<?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>211639</bug_id>
          
          <creation_ts>2020-05-08 12:46:13 -0700</creation_ts>
          <short_desc>Remove no-longer-used PerformanceTests/StitchMarker</short_desc>
          <delta_ts>2020-05-22 16:27:33 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>giffypap79</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jbedard</cc>
    
    <cc>keith_miller</cc>
    
    <cc>rniwa</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1650716</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-08 12:46:13 -0700</bug_when>
    <thetext>Remove no-longer-used PerformanceTests/StitchMarker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650720</commentid>
    <comment_count>1</comment_count>
      <attachid>398883</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-08 12:48:41 -0700</bug_when>
    <thetext>Created attachment 398883
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650764</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-05-08 14:21:52 -0700</bug_when>
    <thetext>Committed r261417: &lt;https://trac.webkit.org/changeset/261417&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 398883.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650765</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-08 14:22:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/63036108&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398883</attachid>
            <date>2020-05-08 12:48:41 -0700</date>
            <delta_ts>2020-05-08 14:21:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211639-20200508124835.patch</filename>
            <type>text/plain</type>
            <size>12059263</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYxMzg2CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGZjZjhkYTAwOGZm
Zjk3YzY0MDI0Mjg4YmE0ZDY0NTllZThjMDJmNzcuLmU4Yzc4ZDQ3ZDZiNWEwNTAwZjFmNjNjYWJl
Y2IwM2MxYzAxOGExODAgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDUt
MDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBuby1s
b25nZXItdXNlZCBQZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNjM5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2aW5nIHRoaXMgdGVzdCBhcm91bmQg
Y2FuIGJlIGNvbmZ1c2luZyBzaW5jZSBpdCBjb250YWlucyBvbGQgdmVyc2lvbnMKKyAgICAgICAg
b2YgbWFueSBXZWJLaXQgc291cmNlIGZpbGVzLCB3aGljaCB3aWxsIHNob3cgdXAgd2hlbiBzZWFy
Y2hpbmcgdGhlIHNvdXJjZQorICAgICAgICB0cmVlLiBBbmQgc2luY2Ugd2UncmUgbm90IHVzaW5n
IGl0LCB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgYSBjb3B5IG9mIGl0CisgICAgICAgIGluIHRoZSB0
aXAgb2YgdHJlZSBpbiB0aGUgcmVwb3NpdG9yeS4KKworICAgICAgICAqIFN0aXRjaE1hcmtlcjog
UmVtb3ZlZC4KKwogMjAyMC0wNC0yNCAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAKICAg
ICAgICAgTW90aW9uTWFyazogYWRkIGxpbmsgdG8gYnVnIGluIGFib3V0IHBhZ2UKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL1JFQURNRS5tZCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL1JFQURNRS5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMmY5YzZhZWQzZWRkOGFlODhjNjBmMzE3Mjk4M2VkNWE2NGE5YTU3My4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9SRUFETUUubWQKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0jIFN0aXRj
aCBNYXJrZXI6IFRocmVhZGluZyBCZW5jaG1hcmtzCi0KLT4gSW4gY3JvY2hldCwgYSBzdGl0Y2gg
bWFya2VyIGlzIGEgbW5lbW9uaWMgZGV2aWNlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggaW1wb3J0YW50
Ci0+IGxvY2F0aW9ucyBvbiBhIHdvcmsgaW4gcHJvZ3Jlc3MuIENyb2NoZXQgcGF0dGVybnMgaGF2
ZSBhIG1hdGhlbWF0aWNhbCBiYXNpcywKLT4gc28gc3RpdGNoIG1hcmtlcnMgc2VydmUgYXMgYSB2
aXN1YWwgcmVmZXJlbmNlIHRoYXQgdGFrZXMgdGhlIHBsYWNlIG9mCi0+IGNvbnRpbnVvdXMgc3Rp
dGNoIGNvdW50aW5nIGFuZCByZWR1Y2VzIGEgY3JvY2hldGVyJ3MgZXJyb3IgcmF0ZS4KLQotU3Rp
dGNoIE1hcmtlciBpcyBhIGNvbGxlY3Rpb24gb2YgdGhyZWFkaW5nIGJlbmNobWFya3MuIEl0IG1l
YXN1cmVzIGFuIGFic3RyYWN0Ci1tYWNoaW5lJ3MgbG93LWxldmVsIGNhcGFiaWxpdGllcyBmb3Ig
YXRvbWljIGluc3RydWN0aW9ucywgaGlnaGVyLWxldmVsIHdhaXRpbmcsCi1hbmQgZ2VuZXJhbCBz
Y2FsYWJpbGl0eSB1bmRlciBjb250ZW50aW9uLiBJdCBjb2xsZWN0cyBzdGF0ZS1vZi10aGUtYXJ0
Ci1hcHByb2FjaGVzIHRvIGxvY2tpbmcgYW5kIGxvY2stZnJlZSBjb2RlIGFzIHdlbGwgYXMgb2xk
ZXIgYXBwcm9hY2hlcywgYW5kIGEgZmV3Ci1uYWl2ZSBvbmVzIGJlY2F1c2UgaW4gdGhlIHJlYWwg
d29ybGQgZXZlcnlvbmUgbG9zZXMgYSBzdGl0Y2ggb3IgdHdvIGZyb20gdGltZSB0bwotdGltZS4g
VGhlIHBvaW50IGlzbid0IHRvIGNvbXBhcmUgZGlmZmVyZW50IGxvY2sgaW1wbGVtZW50YXRpb25z
LCBvciBmYW5jeQotbG9jay1mcmVlIGFsZ29yaXRobXMsIGl0J3MgcmF0aGVyIHRvIGNvbXBhcmUg
aG93IHRoZXkgbG93ZXIgb250byBkaWZmZXJlbnQKLSh2aXJ0dWFsKSBJU0FzLgotCi0KLSMgQmVu
Y2htYXJrcwotCi0jIyBGTUpTIExpdG11cwotCi0qIEF1dGhvcjogQ3Jpc3RpYW4gTWF0dGFyZWkK
LSogQmVuY2htYXJrOiBbRk1KUyBFTU1FXShodHRwczovL2dpdGh1Yi5jb20vRk1KUy9FTU1FKSBs
aXRtdXMgdGVzdHMKLSogVmVyc2lvbjogRklYTUUKLSogTm90ZTogRklYTUUgb25jZSB3ZSBoYXZl
IGEgdmVyc2lvbiB3aGljaCBjYW4gdGFyZ2V0IFdlYkFzc2VtYmx5Ci0KLVRoZXNlIHRlc3RzIGRl
ZmluZSB0aGUgYm91bmRhcnkgb2YgY29ycmVjdG5lc3MgZm9yIHRoZSBKYXZhU2NyaXB0Ci1TaGFy
ZWRBcnJheUJ1ZmZlciBtZW1vcnkgbW9kZWwsIHdoaWNoIFdlYkFzc2VtYmx5IG1vc3RseSByZS11
c2VzLiBUaGUgdGVzdHMKLXRoZW1zZWx2ZXMgYXJlIHByb2JhYmlsaXN0aWMgaW4gdGhhdCB0aGUg
cHJvZ3JhbXMgYXJlIHJ1biBhbmQgdGhlaXIgb3V0Y29tZSBpcwotdmFsaWRhdGVkIGFnYWluc3Qg
YSBsaXN0IG9mIGtub3duLWFsbG93ZWQgb3V0Y29tZXMuIFJ1bm5pbmcgdGhlIHRlc3RzIG1hbnkg
dGltZXMKLXdpbGwsIG92ZXIgdGltZSwgZmluZCBhbnkgaW1wbGVtZW50YXRpb24gZmxhd3MuCi0K
LVJ1bm5pbmcgdGhlc2UgdGVzdHMgaW4gYSBsb29wIGhhcyBhdHRyYWN0aXZlIHByb3BlcnRpZXMg
dHlwaWNhbCBtaWNyb2JlbmNobWFya3MKLWRvIG5vdCBoYXZlOiBpdCB2YWxpZGF0ZXMgdGhhdCBh
biBpbXBsZW1lbnRhdGlvbiBjYW4gcGVyZm9ybSBhcyBmYXN0IGFzIHBvc3NpYmxlCi1hdCB0aGUg
Ym91bmRhcnkgb2YgY29ycmVjdG5lc3MsIGJ1dCBubyBmYXN0ZXIuIEJ5IGRlZmluaXRpb24gdGhp
cyBtaWNyb2JlbmNobWFyawotKmNhbm5vdCogYmUgZ2FtZWQgYmVjYXVzZSBkb2luZyBzbyBvdXQg
Y2F1c2UgaXQgdG8gZmFpbC4KLQotCi0jIyBmb2xseQotCi0qIEF1dGhvcjogRmFjZWJvb2sKLSog
UmVwb3NpdG9yeTogW2ZvbGx5XShodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZm9sbHkuZ2l0
KQotKiBWZXJzaW9uOiBgNDUyNDVjYjI5M2UzYzYxZGViOGI5NTI5NTY1MDdiNjJlODhiMGNmOWAK
LQotRmFjZWJvb2sncyBmb2xseSBsaWJyYXJ5IGhhcyBtdWx0aXBsZSBjbGFzc2VzIHJlbGF0ZWQg
dG8gY29uY3VycmVuY3kgYW5kCi1wYXJhbGxlbGlzbSwgYW5kIGJlbmNobWFyayBtYW55IG9mIHRo
ZW0uCi0KLQotIyMgb2dpcm91eAotCi0qIEF1dGhvcjogT2xpdmllciBHaXJvdXgKLSogQmVuY2ht
YXJrOiBbU2VtYXBob3JlIEMrKyBzdGFuZGFyZCBwcm9wb3NhbF0oaHR0cHM6Ly9naXRodWIuY29t
L29naXJvdXgvc2VtYXBob3JlKQotKiBWZXJzaW9uOiBgOGIyYzRlYTA2OTUyMDg0OTEzYWUxOGQ2
YmI2NmIwYTk1N2Q5NmNkNGAKLQotQ29kZSBhbmQgYmVuY2htYXJrIGZvciBhIEMrKyBzdGFuZGFy
ZHMgY29tbWl0dGVlIHByb3Bvc2FsIGFkZGluZyBhCi1oaWdoLXBlcmZvcm1hbmNlIHNlbWFwaG9y
ZSBjbGFzcyB0byBDKysuCi0KLQotIyMgY2sKLQotKiBBdXRob3I6IFNhbXkgQWwgQmFocmEKLSog
QmVuY2htYXJrOiBbY29uY3VycmVuY3kga2l0XShodHRwczovL2dpdGh1Yi5jb20vY29uY3VycmVu
Y3lraXQvY2spCi0qIFZlcnNpb246IGAwZDFlODZkMThlZTU4NTM0YmVhOTc2NDg5Mjc2ZDc1MDUz
Mjc5MTAwYAotCi1Db25jdXJyZW5jeSBwcmltaXRpdmVzLCBzYWZlIG1lbW9yeSByZWNsYW1hdGlv
biBtZWNoYW5pc21zIGFuZCBub24tYmxvY2tpbmcgZGF0YQotc3RydWN0dXJlcyBmb3IgdGhlIHJl
c2VhcmNoLCBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIG9mIGhpZ2ggcGVyZm9ybWFuY2UKLWNv
bmN1cnJlbnQgc3lzdGVtcy4KLQotCi0jIyBXVEYKLQotKiBBdXRob3I6IEZpbGlwIEplcnp5IFBp
esWCbwotKiBiZW5jaG1hcms6IFtXZWJLaXQgVGVtcGxhdGUgRnJhbWV3b3JrIGxvY2sgYmVuY2ht
YXJrc10oaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci93ZWJraXQvdHJ1bmsvU291cmNl
L1dURi9iZW5jaG1hcmtzKQotKiBWZXJzaW9uOiBgcjIyMDE1MWAKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrLnNoIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2suc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDQ4NTA2NDQ5ODI2MDJl
ODkyOWMxNGY2MTI4YTZmOTkzMDY5YzEwMDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2suc2gKKysr
IC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0KLXNldCAtZQotc2V0IC11
Ci1zZXQgLXgKLQotY2QgY2sKLW1ha2UgcmVncmVzc2lvbnMKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL0xJQ0VOU0UgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9MSUNFTlNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2IwZWVi
MTBhNWE2MjVjNjlkMjZkNDUyZjA0ZmMwOTEzMDhjNGE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1Db3B5cmlnaHQgMjAxMC0y
MDE0IFNhbXkgQWwgQmFocmEuCi1Db3B5cmlnaHQgMjAxMS0yMDEzIEFwcE5leHVzLCBJbmMuCi1B
bGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi1JTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKLUZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi1EQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCi1IT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgot
U1VDSCBEQU1BR0UuCi0KLUhhemFyZCBQb2ludGVycyAoc3JjL2NrX2hwLmMpIGFsc28gaW5jbHVk
ZXMgdGhpcyBsaWNlbnNlOgotCi0oYykgQ29weXJpZ2h0IDIwMDgsIElCTSBDb3Jwb3JhdGlvbi4K
LUxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOwoteW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLgotWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
Ci0KLWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3Mg
cmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3
YXJlCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi
QVMgSVMiIEJBU0lTLAotV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi1TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi1saW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS4KLQotY2tfcHJfcnRtIGxldmVyYWdlcyB3b3JrIGZyb20gQW5kaSBL
bGVlbjoKLUNvcHlyaWdodCAoYykgMjAxMiwyMDEzIEludGVsIENvcnBvcmF0aW9uCi0KLVJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQ6ICgxKSBzb3Vy
Y2UgY29kZSBkaXN0cmlidXRpb25zCi1yZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug
YW5kIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSwgKDIpCi1kaXN0cmlidXRpb25zIGlu
Y2x1ZGluZyBiaW5hcnkgY29kZSBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu
ZAotdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5IGluIHRoZSBkb2N1bWVudGF0aW9uIG9y
IG90aGVyIG1hdGVyaWFscwotcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uCi0KLVRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQKLVdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLgotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9NYWtlZmlsZSBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL01h
a2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDJlYmIxNjI3OGJjMzRiYjhi
ZmRkZGJkNGYzNzA5MjljYWM0MGEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL01ha2VmaWxlCisr
KyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS5QSE9OWTogYWxsIGNoZWNrIGNsZWFuIGRp
c3QgZGlzdGNsZWFuIGRvYyBpbnN0YWxsIGluc3RhbGwtaGVhZGVycyByZWdyZXNzaW9ucyB1bmlu
c3RhbGwKLQotQlVJTERfRElSPS9Wb2x1bWVzL2Rldi9TdGl0Y2hNYXJrZXIvY2sKLVNSQ19ESVI9
L1ZvbHVtZXMvZGV2L1N0aXRjaE1hcmtlci9jawotQ0ZMQUdTPS1EX1hPUEVOX1NPVVJDRT02MDAg
LURfQlNEX1NPVVJDRSAtRF9ERUZBVUxUX1NPVVJDRSAtc3RkPWdudTk5IC1wZWRhbnRpYyAtV2Fs
bCAtVyAtV3VuZGVmIC1XZW5kaWYtbGFiZWxzIC1Xc2hhZG93IC1XcG9pbnRlci1hcml0aCAtV2Nh
c3QtYWxpZ24gLVdjYXN0LXF1YWwgLVd3cml0ZS1zdHJpbmdzIC1Xc3RyaWN0LXByb3RvdHlwZXMg
LVdtaXNzaW5nLXByb3RvdHlwZXMgLVduZXN0ZWQtZXh0ZXJucyAtV2lubGluZSAtV2Rpc2FibGVk
LW9wdGltaXphdGlvbiAtZnN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLVduby1wYXJlbnRoZXNl
cyAgLWZQSUMKLVZFUlNJT049MS4wLjAKLVZFUlNJT05fTUFKT1I9MAotUFJFRklYPS91c3IvbG9j
YWwKLUxJQlJBUlk9L3Vzci9sb2NhbC9saWIKLUhFQURFUlM9L3Vzci9sb2NhbC9pbmNsdWRlCi1Q
S0dDT05GSUdfREFUQT0vdXNyL2xvY2FsL2xpYi9wa2djb25maWcKLUxETkFNRT1saWJjay5keWxp
YgotTEROQU1FX1ZFUlNJT049bGliY2suMS4wLjAuZHlsaWIKLUxETkFNRV9NQUpPUj1saWJjay4w
LmR5bGliCi0KLWFsbDogZG9jCi0JJChNQUtFKSAtQyBzcmMgYWxsIHx8IGV4aXQKLQlAZWNobwot
CUBlY2hvCi0JQGVjaG8gLS0tWyBDb25jdXJyZW5jeSBLaXQgaGFzIGJ1aWx0IHN1Y2Nlc3NmdWxs
eS4gWW91IG1heSBub3cgXCJtYWtlIGluc3RhbGxcIi4KLQotZG9jOgotCSQoTUFLRSkgLUMgZG9j
IGFsbCB8fCBleGl0Ci0JQGVjaG8gLS0tWyBNYW51YWwgcGFnZXMgYXJlIHJlYWR5IGZvciBpbnN0
YWxsYXRpb24uCi0KLXJlZ3Jlc3Npb25zOgotCSQoTUFLRSkgLUMgcmVncmVzc2lvbnMgYWxsIHx8
IGV4aXQKLQlAZWNobyAtLS1bIFJlZ3Jlc3Npb25zIGhhdmUgYnVpbHQgc3VjY2Vzc2Z1bGx5Lgot
Ci1jaGVjazogcmVncmVzc2lvbnMKLQlAZWNobyAtLS1bIEV4ZWN1dGluZyB1bml0IHRlc3RzLi4u
Ci0JJChNQUtFKSAtQyByZWdyZXNzaW9ucyBjaGVjawotCUBlY2hvIC0tLVsgVW5pdCB0ZXN0cyBo
YXZlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCi0KLWluc3RhbGwtaGVhZGVyczoKLQlta2RpciAt
cCAkKERFU1RESVIpLyQoSEVBREVSUykgfHwgZXhpdAotCWNwICQoU1JDX0RJUikvaW5jbHVkZS8q
LmggJChERVNURElSKS8kKEhFQURFUlMpIHx8IGV4aXQKLQljaG1vZCA2NDQgJChERVNURElSKS8k
KEhFQURFUlMpL2NrXyouaCB8fCBleGl0Ci0JbWtkaXIgLXAgJChERVNURElSKSQoSEVBREVSUykv
Z2NjIHx8IGV4aXQKLQljcCAtciAkKFNSQ19ESVIpL2luY2x1ZGUvZ2NjLyogJChERVNURElSKS8k
KEhFQURFUlMpL2djYyB8fCBleGl0Ci0JY3AgaW5jbHVkZS9ja19tZC5oICQoREVTVERJUikvJChI
RUFERVJTKS9ja19tZC5oIHx8IGV4aXQKLQljaG1vZCA3NTUgJChERVNURElSKS8kKEhFQURFUlMp
L2djYwotCWNobW9kIDY0NCAkKERFU1RESVIpLyQoSEVBREVSUykvZ2NjL2NrXyouaCAkKERFU1RE
SVIpLyQoSEVBREVSUykvZ2NjLyovY2tfKi5oIHx8IGV4aXQKLQlta2RpciAtcCAkKERFU1RESVIp
JChIRUFERVJTKS9zcGlubG9jayB8fCBleGl0Ci0JY3AgLXIgJChTUkNfRElSKS9pbmNsdWRlL3Nw
aW5sb2NrLyogJChERVNURElSKS8kKEhFQURFUlMpL3NwaW5sb2NrIHx8IGV4aXQKLQljaG1vZCA3
NTUgJChERVNURElSKS8kKEhFQURFUlMpL3NwaW5sb2NrCi0JY2htb2QgNjQ0ICQoREVTVERJUikv
JChIRUFERVJTKS9zcGlubG9jay8qLmggfHwgZXhpdAotCi1pbnN0YWxsLXNvOgotCW1rZGlyIC1w
ICQoREVTVERJUikvJChMSUJSQVJZKQotCWNwIHNyYy9saWJjay5zbyAkKERFU1RESVIpLyQoTElC
UkFSWSkvJChMRE5BTUVfVkVSU0lPTikKLQlsbiAtc2YgJChMRE5BTUVfVkVSU0lPTikgJChERVNU
RElSKS8kKExJQlJBUlkpLyQoTEROQU1FKQotCWxuIC1zZiAkKExETkFNRV9WRVJTSU9OKSAkKERF
U1RESVIpLyQoTElCUkFSWSkvJChMRE5BTUVfTUFKT1IpCi0JY2htb2QgNzQ0ICQoREVTVERJUikv
JChMSUJSQVJZKS8kKExETkFNRV9WRVJTSU9OKQlcCi0JCSAgJChERVNURElSKS8kKExJQlJBUlkp
LyQoTEROQU1FKQkJXAotCQkgICQoREVTVERJUikvJChMSUJSQVJZKS8kKExETkFNRV9NQUpPUikK
LQotaW5zdGFsbC1saWI6Ci0JbWtkaXIgLXAgJChERVNURElSKS8kKExJQlJBUlkpCi0JY3Agc3Jj
L2xpYmNrLmEgJChERVNURElSKS8kKExJQlJBUlkpL2xpYmNrLmEKLQljaG1vZCA2NDQgJChERVNU
RElSKS8kKExJQlJBUlkpL2xpYmNrLmEKLQotaW5zdGFsbDogYWxsIGluc3RhbGwtaGVhZGVycyBp
bnN0YWxsLXNvIGluc3RhbGwtbGliCi0JJChNQUtFKSAtQyBkb2MgaW5zdGFsbAotCW1rZGlyIC1w
ICQoREVTVERJUikvJChMSUJSQVJZKSB8fCBleGl0Ci0JbWtkaXIgLXAgJChERVNURElSKS8kKFBL
R0NPTkZJR19EQVRBKSB8fCBleGl0Ci0JY2htb2QgNzU1ICQoREVTVERJUikvJChQS0dDT05GSUdf
REFUQSkKLQljcCBidWlsZC9jay5wYyAkKERFU1RESVIpLyQoUEtHQ09ORklHX0RBVEEpL2NrLnBj
IHx8IGV4aXQKLQlAZWNobwotCUBlY2hvCi0JQGVjaG8gLS0tWyBDb25jdXJyZW5jeSBLaXQgaGFz
IGluc3RhbGxlZCBzdWNjZXNzZnVsbHkuCi0KLXVuaW5zdGFsbDoKLQkkKE1BS0UpIC1DIGRvYyB1
bmluc3RhbGwKLQlybSAtZiAkKERFU1RESVIpLyQoTElCUkFSWSkvJChMRE5BTUVfVkVSU0lPTikJ
XAotCSAgICAgICQoREVTVERJUikvJChMSUJSQVJZKS8kKExETkFNRSkJCVwKLQkgICAgICAkKERF
U1RESVIpLyQoTElCUkFSWSkvJChMRE5BTUVfTUFKT1IpCi0Jcm0gLWYgJChERVNURElSKS8kKExJ
QlJBUlkpL2xpYmNrLnNvKgotCXJtIC1mICQoREVTVERJUikvJChMSUJSQVJZKS9saWJjay5hCi0J
cm0gLWYgJChERVNURElSKS8kKEhFQURFUlMpL2NrXyouaAotCXJtIC1mICQoREVTVERJUikvJChI
RUFERVJTKS9zcGlubG9jay8qLmgKLQlybSAtZiAkKERFU1RESVIpLyQoSEVBREVSUykvZ2NjL2Nr
XyouaAotCXJtIC1mICQoREVTVERJUikvJChIRUFERVJTKS9nY2MvKi9ja18qLmgKLQlybSAtZiAk
KERFU1RESVIpLyQoUEtHQ09ORklHX0RBVEEpL2NrLnBjCi0KLWNsZWFuOgotCSQoTUFLRSkgLUMg
ZG9jIGNsZWFuCi0JJChNQUtFKSAtQyBzcmMgY2xlYW4KLQkkKE1BS0UpIC1DIHJlZ3Jlc3Npb25z
IGNsZWFuCi0Jcm0gLWYgJChCVUlMRF9ESVIpLyp+ICQoQlVJTERfRElSKS8qLm8gJChCVUlMRF9E
SVIpLyoudGFyLmd6Ci0KLWRpc3Q6Ci0JZ2l0IGFyY2hpdmUgLS1yZW1vdGU9JChTUkNfRElSKSAt
LWZvcm1hdD10YXIgLS1wcmVmaXg9Y2stJChWRVJTSU9OKS8gSEVBRCBcCi0JCXwgZ3ppcCA+ICQo
QlVJTERfRElSKS9jay0kKFZFUlNJT04pLnRhci5negotCi1kaXN0Y2xlYW46IGNsZWFuCi0Jcm0g
LWYgJChCVUlMRF9ESVIpL2luY2x1ZGUvY2tfbWQuaAotCXJtIC1mICQoQlVJTERfRElSKS9idWls
ZC9yZWdyZXNzaW9ucy5idWlsZAotCXJtIC1mICQoQlVJTERfRElSKS9idWlsZC9jay5idWlsZAot
CXJtIC1mICQoQlVJTERfRElSKS9idWlsZC9jay5wYwotCXJtIC1mICQoQlVJTERfRElSKS9NYWtl
ZmlsZQotCXJtIC1mICQoQlVJTERfRElSKS9kb2MvTWFrZWZpbGUKLQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svTWFrZWZpbGUuaW4gYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9jay9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggN2U3M2Y3MDllMTg0ZWJmOWIxODRmYjJiYTE4MDhlYmYyMjg3MGE2NS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBA
Ci0uUEhPTlk6IGFsbCBjaGVjayBjbGVhbiBkaXN0IGRpc3RjbGVhbiBkb2MgaW5zdGFsbCBpbnN0
YWxsLWhlYWRlcnMgcmVncmVzc2lvbnMgdW5pbnN0YWxsCi0KLUJVSUxEX0RJUj1AQlVJTERfRElS
QAotU1JDX0RJUj1AU1JDX0RJUkAKLUNGTEFHUz1AQ0ZMQUdTQAotVkVSU0lPTj1AVkVSU0lPTkAK
LVZFUlNJT05fTUFKT1I9QFZFUlNJT05fTUFKT1JACi1QUkVGSVg9QFBSRUZJWEAKLUxJQlJBUlk9
QExJQlJBUllACi1IRUFERVJTPUBIRUFERVJTQAotUEtHQ09ORklHX0RBVEE9QExJQlJBUllAL3Br
Z2NvbmZpZwotTEROQU1FPUBMRE5BTUVACi1MRE5BTUVfVkVSU0lPTj1ATEROQU1FX1ZFUlNJT05A
Ci1MRE5BTUVfTUFKT1I9QExETkFNRV9NQUpPUkAKLQotYWxsOiBkb2MKLQkkKE1BS0UpIC1DIHNy
YyBhbGwgfHwgZXhpdAotCUBlY2hvCi0JQGVjaG8KLQlAZWNobyAtLS1bIENvbmN1cnJlbmN5IEtp
dCBoYXMgYnVpbHQgc3VjY2Vzc2Z1bGx5LiBZb3UgbWF5IG5vdyBcIm1ha2UgaW5zdGFsbFwiLgot
Ci1kb2M6Ci0JJChNQUtFKSAtQyBkb2MgYWxsIHx8IGV4aXQKLQlAZWNobyAtLS1bIE1hbnVhbCBw
YWdlcyBhcmUgcmVhZHkgZm9yIGluc3RhbGxhdGlvbi4KLQotcmVncmVzc2lvbnM6Ci0JJChNQUtF
KSAtQyByZWdyZXNzaW9ucyBhbGwgfHwgZXhpdAotCUBlY2hvIC0tLVsgUmVncmVzc2lvbnMgaGF2
ZSBidWlsdCBzdWNjZXNzZnVsbHkuCi0KLWNoZWNrOiByZWdyZXNzaW9ucwotCUBlY2hvIC0tLVsg
RXhlY3V0aW5nIHVuaXQgdGVzdHMuLi4KLQkkKE1BS0UpIC1DIHJlZ3Jlc3Npb25zIGNoZWNrCi0J
QGVjaG8gLS0tWyBVbml0IHRlc3RzIGhhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KLQotaW5z
dGFsbC1oZWFkZXJzOgotCW1rZGlyIC1wICQoREVTVERJUikvJChIRUFERVJTKSB8fCBleGl0Ci0J
Y3AgJChTUkNfRElSKS9pbmNsdWRlLyouaCAkKERFU1RESVIpLyQoSEVBREVSUykgfHwgZXhpdAot
CWNobW9kIDY0NCAkKERFU1RESVIpLyQoSEVBREVSUykvY2tfKi5oIHx8IGV4aXQKLQlta2RpciAt
cCAkKERFU1RESVIpJChIRUFERVJTKS9nY2MgfHwgZXhpdAotCWNwIC1yICQoU1JDX0RJUikvaW5j
bHVkZS9nY2MvKiAkKERFU1RESVIpLyQoSEVBREVSUykvZ2NjIHx8IGV4aXQKLQljcCBpbmNsdWRl
L2NrX21kLmggJChERVNURElSKS8kKEhFQURFUlMpL2NrX21kLmggfHwgZXhpdAotCWNobW9kIDc1
NSAkKERFU1RESVIpLyQoSEVBREVSUykvZ2NjCi0JY2htb2QgNjQ0ICQoREVTVERJUikvJChIRUFE
RVJTKS9nY2MvY2tfKi5oICQoREVTVERJUikvJChIRUFERVJTKS9nY2MvKi9ja18qLmggfHwgZXhp
dAotCW1rZGlyIC1wICQoREVTVERJUikkKEhFQURFUlMpL3NwaW5sb2NrIHx8IGV4aXQKLQljcCAt
ciAkKFNSQ19ESVIpL2luY2x1ZGUvc3BpbmxvY2svKiAkKERFU1RESVIpLyQoSEVBREVSUykvc3Bp
bmxvY2sgfHwgZXhpdAotCWNobW9kIDc1NSAkKERFU1RESVIpLyQoSEVBREVSUykvc3BpbmxvY2sK
LQljaG1vZCA2NDQgJChERVNURElSKS8kKEhFQURFUlMpL3NwaW5sb2NrLyouaCB8fCBleGl0Ci0K
LWluc3RhbGwtc286Ci0JbWtkaXIgLXAgJChERVNURElSKS8kKExJQlJBUlkpCi0JY3Agc3JjL2xp
YmNrLnNvICQoREVTVERJUikvJChMSUJSQVJZKS8kKExETkFNRV9WRVJTSU9OKQotCWxuIC1zZiAk
KExETkFNRV9WRVJTSU9OKSAkKERFU1RESVIpLyQoTElCUkFSWSkvJChMRE5BTUUpCi0JbG4gLXNm
ICQoTEROQU1FX1ZFUlNJT04pICQoREVTVERJUikvJChMSUJSQVJZKS8kKExETkFNRV9NQUpPUikK
LQljaG1vZCA3NDQgJChERVNURElSKS8kKExJQlJBUlkpLyQoTEROQU1FX1ZFUlNJT04pCVwKLQkJ
ICAkKERFU1RESVIpLyQoTElCUkFSWSkvJChMRE5BTUUpCQlcCi0JCSAgJChERVNURElSKS8kKExJ
QlJBUlkpLyQoTEROQU1FX01BSk9SKQotCi1pbnN0YWxsLWxpYjoKLQlta2RpciAtcCAkKERFU1RE
SVIpLyQoTElCUkFSWSkKLQljcCBzcmMvbGliY2suYSAkKERFU1RESVIpLyQoTElCUkFSWSkvbGli
Y2suYQotCWNobW9kIDY0NCAkKERFU1RESVIpLyQoTElCUkFSWSkvbGliY2suYQotCi1pbnN0YWxs
OiBhbGwgaW5zdGFsbC1oZWFkZXJzIEBJTlNUQUxMX0xJQlNACi0JJChNQUtFKSAtQyBkb2MgaW5z
dGFsbAotCW1rZGlyIC1wICQoREVTVERJUikvJChMSUJSQVJZKSB8fCBleGl0Ci0JbWtkaXIgLXAg
JChERVNURElSKS8kKFBLR0NPTkZJR19EQVRBKSB8fCBleGl0Ci0JY2htb2QgNzU1ICQoREVTVERJ
UikvJChQS0dDT05GSUdfREFUQSkKLQljcCBidWlsZC9jay5wYyAkKERFU1RESVIpLyQoUEtHQ09O
RklHX0RBVEEpL2NrLnBjIHx8IGV4aXQKLQlAZWNobwotCUBlY2hvCi0JQGVjaG8gLS0tWyBDb25j
dXJyZW5jeSBLaXQgaGFzIGluc3RhbGxlZCBzdWNjZXNzZnVsbHkuCi0KLXVuaW5zdGFsbDoKLQkk
KE1BS0UpIC1DIGRvYyB1bmluc3RhbGwKLQlybSAtZiAkKERFU1RESVIpLyQoTElCUkFSWSkvJChM
RE5BTUVfVkVSU0lPTikJXAotCSAgICAgICQoREVTVERJUikvJChMSUJSQVJZKS8kKExETkFNRSkJ
CVwKLQkgICAgICAkKERFU1RESVIpLyQoTElCUkFSWSkvJChMRE5BTUVfTUFKT1IpCi0Jcm0gLWYg
JChERVNURElSKS8kKExJQlJBUlkpL2xpYmNrLnNvKgotCXJtIC1mICQoREVTVERJUikvJChMSUJS
QVJZKS9saWJjay5hCi0Jcm0gLWYgJChERVNURElSKS8kKEhFQURFUlMpL2NrXyouaAotCXJtIC1m
ICQoREVTVERJUikvJChIRUFERVJTKS9zcGlubG9jay8qLmgKLQlybSAtZiAkKERFU1RESVIpLyQo
SEVBREVSUykvZ2NjL2NrXyouaAotCXJtIC1mICQoREVTVERJUikvJChIRUFERVJTKS9nY2MvKi9j
a18qLmgKLQlybSAtZiAkKERFU1RESVIpLyQoUEtHQ09ORklHX0RBVEEpL2NrLnBjCi0KLWNsZWFu
OgotCSQoTUFLRSkgLUMgZG9jIGNsZWFuCi0JJChNQUtFKSAtQyBzcmMgY2xlYW4KLQkkKE1BS0Up
IC1DIHJlZ3Jlc3Npb25zIGNsZWFuCi0Jcm0gLWYgJChCVUlMRF9ESVIpLyp+ICQoQlVJTERfRElS
KS8qLm8gJChCVUlMRF9ESVIpLyoudGFyLmd6Ci0KLWRpc3Q6Ci0JZ2l0IGFyY2hpdmUgLS1yZW1v
dGU9JChTUkNfRElSKSAtLWZvcm1hdD10YXIgLS1wcmVmaXg9Y2stJChWRVJTSU9OKS8gSEVBRCBc
Ci0JCXwgZ3ppcCA+ICQoQlVJTERfRElSKS9jay0kKFZFUlNJT04pLnRhci5negotCi1kaXN0Y2xl
YW46IGNsZWFuCi0Jcm0gLWYgJChCVUlMRF9ESVIpL2luY2x1ZGUvY2tfbWQuaAotCXJtIC1mICQo
QlVJTERfRElSKS9idWlsZC9yZWdyZXNzaW9ucy5idWlsZAotCXJtIC1mICQoQlVJTERfRElSKS9i
dWlsZC9jay5idWlsZAotCXJtIC1mICQoQlVJTERfRElSKS9idWlsZC9jay5wYwotCXJtIC1mICQo
QlVJTERfRElSKS9NYWtlZmlsZQotCXJtIC1mICQoQlVJTERfRElSKS9kb2MvTWFrZWZpbGUKLQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svUkVBRE1FIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4MWZiNWFjODdjYThlMmI4MjE2MjFkNTFhYWZiZTQ1YjkxYzlkNGNlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2NrL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAK
LSAgX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXyAgX19fIF8KLSAvIF9fX3xfX18gIF8gX18gICBfX18gXyAgIF8gXyBfXyBfIF9fIF9f
XyBfIF9fICAgX19fIF8gICBfICB8IHwvIChfKSB8XwotfCB8ICAgLyBfIFx8ICdfIFwgLyBfX3wg
fCB8IHwgJ19ffCAnX18vIF8gXCAnXyBcIC8gX198IHwgfCB8IHwgJyAvfCB8IF9ffAotfCB8X198
IChfKSB8IHwgfCB8IChfX3wgfF98IHwgfCAgfCB8IHwgIF9fLyB8IHwgfCAoX198IHxffCB8IHwg
LiBcfCB8IHxfCi0gXF9fX19cX19fL3xffCB8X3xcX19ffFxfXyxffF98ICB8X3wgIFxfX198X3wg
fF98XF9fX3xcX18sIHwgfF98XF9cX3xcX198Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fLwotCi1TdGVwIDEuCi0JLi9jb25maWd1cmUK
LQlGb3IgYWRkaXRpb25hbCBvcHRpb25zIHRyeSAuL2NvbmZpZ3VyZSAtLWhlbHAKLQotU3RlcCAy
LgotCUluIG9yZGVyIHRvIGNvbXBpbGUgcmVncmVzc2lvbnMgKHJlcXVpcmVzIFBPU0lYIHRocmVh
ZHMpIHVzZQotICAgICAgICAibWFrZSByZWdyZXNzaW9ucyIuIEluIG9yZGVyIHRvIGNvbXBpbGUg
bGliY2sgdXNlICJtYWtlIGFsbCIgb3IgIm1ha2UiLgotCi1TdGVwIDMuCi0JSW4gb3JkZXIgdG8g
aW5zdGFsbCB1c2UgIm1ha2UgaW5zdGFsbCIKLQlUbyB1bmluc3RhbGwgdXNlICJtYWtlIHVuaW5z
dGFsbCIuCi0KLVNlZSBodHRwOi8vY29uY3VycmVuY3lraXQub3JnLyBmb3IgbW9yZSBpbmZvcm1h
dGlvbi4KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svY29u
ZmlndXJlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svY29uZmlndXJlCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5ZDJmZTgzYjZmMTZhMzVmNTVmYWNkNWJhMGMyMjk5
M2ZkNmIxNjVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2NvbmZpZ3VyZQorKysgL2Rldi9udWxs
CkBAIC0xLDgwNyArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgQ29weXJpZ2h0IMKpIDIwMDktMjAx
MyBTYW15IEFsIEJhaHJhLgotIyBDb3B5cmlnaHQgwqkgMjAxMSBEZXZvbiBILiBPJ0RlbGwgPGRl
dm9uLm9kZWxsQGdtYWlsLmNvbT4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSMgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKLSMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCi0jIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0jIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSMgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgotIyBTVUNIIERBTUFHRS4KLSMKLQotUkVRVUlSRV9IRUFERVI9InN0ZGJvb2wuaCBzdGRk
ZWYuaCBzdGRpbnQuaCBzdHJpbmcuaCIKLQotRVhJVF9TVUNDRVNTPTAKLUVYSVRfRkFJTFVSRT0x
Ci1XQU5UX1BJQz15ZXMKLQotUF9QV0Q9YHB3ZGAKLU1BSU5UQUlORVI9J3NiYWhyYUByZXBub3Au
b3JnJwotVkVSU0lPTj0ke1ZFUlNJT046LScxLjAuMCd9Ci1WRVJTSU9OX01BSk9SPScwJwotQlVJ
TEQ9IiRQV0QvYnVpbGQvY2suYnVpbGQiCi1QUkVGSVg9JHtQUkVGSVg6LSIvdXNyL2xvY2FsIn0K
LUxETkFNRT0ibGliY2suc28iCi1MRE5BTUVfVkVSU0lPTj0ibGliY2suc28uJFZFUlNJT04iCi1M
RE5BTUVfTUFKT1I9ImxpYmNrLnNvLiRWRVJTSU9OX01BSk9SIgotCi1PUFRJT05fQ0hFQ0tJTkc9
MQotCi1leHBvcnQgQ0ZMQUdTCi1leHBvcnQgUFJFRklYCi1MQ19BTEw9QwotZXhwb3J0IExDX0FM
TAotCi1pZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+
L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAJc2V0IC1vIHBvc2l4Ci1maQotCi10cmFwIGVwaWxvZyAx
IDIgMyA2Ci0KLWVwaWxvZygpCi17Ci0Jcm0gLWYgLjEuYyAuMQotfQotCi1hc3NlcnQoKQotewot
Ci0JaWYgdGVzdCAiJCMiIC1lcSAyOyB0aGVuCi0JCWZhaWw9JDIKLQkJcHJpbnQ9dHJ1ZQotCWVs
aWYgdGVzdCAiJCMiIC1lcSAzOyB0aGVuCi0JCWZhaWw9JDMKLQkJcHJpbnQ9ZWNobwotCWVsc2UK
LQkJZWNobyAiVXNhZ2U6IGFzc2VydCA8dGVzdD4gPGZhaWwgc3RyaW5nPiBvciBhc3NlcnQgPHRl
c3Q+IDxzdWNjZXNzIHN0cmluZz4gPGZhaWwgc3RyaW5nPiIgMT4mMgotCQlleGl0ICRFWElUX0ZB
SUxVUkUKLQlmaQotCi0JaWYgdGVzdCAteiAiJDEiOyB0aGVuCi0JCWVjaG8gImZhaWxlZCAgWyRm
YWlsXSIKLQkJZXhpdCAkRVhJVF9GQUlMVVJFCi0JZWxzZQotCQkke3ByaW50fSAic3VjY2VzcyBb
JDFdIgotCWZpCi19Ci0KLWdldF9naXRfc2hhKCkKLXsKLSAgICAjIHJldHVybiBhIHNob3J0IFNI
QSBmb3IgdGhlIGN1cnJlbnQgSEVBRAotICAgIEdJVF9TSEE9IiIKLSAgICBHSVRfTVNHPSJzdWNj
ZXNzIgotICAgIGdpdGNtZD1gd2hpY2ggZ2l0YAotICAgIGlmIHRlc3QgLW4gIiRnaXRjbWQiOyB0
aGVuCi0JR0lUX1NIQT1gZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQgIDI+L2Rldi9udWxsYAot
CWlmICEgdGVzdCAtbiAiJEdJVF9TSEEiOyB0aGVuCi0JICAgIEdJVF9NU0c9Im5vdCB3aXRoaW4g
YSBnaXQgcmVwbyIKLQlmaQotICAgIGVsc2UKLQlHSVRfTVNHPSJnaXQgbm90IGluc3RhbGxlZCBv
ciBleGVjdXRhYmxlIgotICAgIGZpCi19Ci0KLWdlbmVyYXRlKCkKLXsKLQlzZWQgLWUgInMjQFBS
T0ZJTEVAIyRQUk9GSUxFI2ciCQkJCVwKLQkgICAgLWUgInMjQFZFUlNJT05AIyRWRVJTSU9OI2ci
CQkJCVwKLQkgICAgLWUgInMjQFZFUlNJT05fTUFKT1JAIyRWRVJTSU9OX01BSk9SI2ciCQlcCi0J
ICAgIC1lICJzI0BDQ0AjJENDI2ciCQkJCQlcCi0gCSAgICAtZSAicyNAQ0ZMQUdTQCMkQ0ZMQUdT
I2ciCQkJCVwKLSAJICAgIC1lICJzI0BIRUFERVJTQCMkSEVBREVSUyNnIgkJCQlcCi0JICAgIC1l
ICJzI0BMSUJSQVJZQCMkTElCUkFSWSNnIgkJCQlcCi0JICAgIC1lICJzI0BQUkVGSVhAIyRQUkVG
SVgjZyIJCQkJXAotCSAgICAtZSAicyNAQ09SRVNAIyRDT1JFUyNnIgkJCQlcCi0JICAgIC1lICJz
I0BBTExfTElCU0AjJEFMTF9MSUJTI2ciCQkJXAotCSAgICAtZSAicyNASU5TVEFMTF9MSUJTQCMk
SU5TVEFMTF9MSUJTI2ciCQlcCi0JICAgIC1lICJzI0BMREAjJExEI2ciCQkJCQlcCi0JICAgIC1l
ICJzI0BMREZMQUdTQCMkTERGTEFHUyNnIgkJCQlcCi0JICAgIC1lICJzI0BQVEhSRUFEX0NGTEFH
U0AjJFBUSFJFQURfQ0ZMQUdTI2ciCQlcCi0JICAgIC1lICJzI0BNQU5ESVJAIyRNQU5ESVIjZyIJ
CQkJXAotCSAgICAtZSAicyNAR1pJUEAjJEdaSVAjZyIJCQkJXAotCSAgICAtZSAicyNAR1pJUF9T
VUZGSVhAIyRHWklQX1NVRkZJWCNnIgkJCVwKLQkgICAgLWUgInMjQFBPSU5URVJfUEFDS19FTkFC
TEVAIyRQT0lOVEVSX1BBQ0tfRU5BQkxFI2ciCVwKLQkgICAgLWUgInMjQERJU0FCTEVfRE9VQkxF
QCMkRElTQUJMRV9ET1VCTEUjZyIJCVwKLQkgICAgLWUgInMjQFJUTV9FTkFCTEVAIyRSVE1fRU5B
QkxFI2ciCQkJXAotCSAgICAtZSAicyNATFNFX0VOQUJMRUAjJExTRV9FTkFCTEUjZyIJCQlcCi0J
ICAgIC1lICJzI0BWTUFfQklUU0AjJFZNQV9CSVRTX1IjZyIJCQlcCi0JICAgIC1lICJzI0BWTUFf
QklUU19WQUxVRUAjJFZNQV9CSVRTX1ZBTFVFX1IjZyIJCVwKLQkgICAgLWUgInMjQE1NQCMkTU0j
ZyIJCQkJCVwKLQkgICAgLWUgInMjQEJVSUxEX0RJUkAjJFBfUFdEI2ciCQkJCVwKLQkgICAgLWUg
InMjQFNSQ19ESVJAIyRCVUlMRF9ESVIjZyIJCQlcCi0JICAgIC1lICJzI0BMRE5BTUVAIyRMRE5B
TUUjZyIJCQkJXAotCSAgICAtZSAicyNATEROQU1FX01BSk9SQCMkTEROQU1FX01BSk9SI2ciCQlc
Ci0JICAgIC1lICJzI0BMRE5BTUVfVkVSU0lPTkAjJExETkFNRV9WRVJTSU9OI2ciCQlcCi0JICAg
IC1lICJzI0BQQ19DRkxBR1NAIyRQQ19DRkxBR1MjZyIJCQlcCi0JICAgIC1lICJzI0BHSVRfU0hB
QCMkR0lUX1NIQSNnIgkJCSAgICAgICAgXAotCQkkMSA+ICQyCi19Ci0KLWdlbmVyYXRlX3N0ZG91
dCgpCi17Ci0KLQllY2hvCi0JZWNobyAiICAgICAgICAgICBWRVJTSU9OID0gJFZFUlNJT04iCi0J
ZWNobyAiICAgICAgICAgICBHSVRfU0hBID0gJEdJVF9TSEEiCi0JZWNobyAiICAgICAgICAgQlVJ
TERfRElSID0gJFBfUFdEIgotCWVjaG8gIiAgICAgICAgICAgU1JDX0RJUiA9ICRCVUlMRF9ESVIi
Ci0JZWNobyAiICAgICAgICAgICAgU1lTVEVNID0gJFNZU1RFTSIKLQllY2hvICIgICAgICAgICAg
IFBST0ZJTEUgPSAkUFJPRklMRSIKLQllY2hvICIgICAgICAgICAgICAgICAgQ0MgPSAkQ0MiCi0J
ZWNobyAiICAgICAgICAgIENPTVBJTEVSID0gJENPTVBJTEVSIgotCWVjaG8gIiAgICAgICAgICAg
IENGTEFHUyA9ICRDRkxBR1MiCi0JZWNobyAiICAgIFBUSFJFQURfQ0ZMQUdTID0gJFBUSFJFQURf
Q0ZMQUdTIgotCWVjaG8gIiAgICAgICAgICAgICAgICBMRCA9ICRMRCIKLQllY2hvICIgICAgICAg
ICAgICBMRE5BTUUgPSAkTEROQU1FIgotCWVjaG8gIiAgICBMRE5BTUVfVkVSU0lPTiA9ICRMRE5B
TUVfVkVSU0lPTiIKLQllY2hvICIgICAgICBMRE5BTUVfTUFKT1IgPSAkTEROQU1FX01BSk9SIgot
CWVjaG8gIiAgICAgICAgICAgTERGTEFHUyA9ICRMREZMQUdTIgotCWVjaG8gIiAgICAgICAgICAg
ICAgR1pJUCA9ICRHWklQIgotCWVjaG8gIiAgICAgICAgICAgICBDT1JFUyA9ICRDT1JFUyIKLQll
Y2hvICIgICAgICBQT0lOVEVSX1BBQ0sgPSAkUE9JTlRFUl9QQUNLX0VOQUJMRSIKLQllY2hvICIg
ICAgICAgICAgVk1BX0JJVFMgPSAkVk1BX0JJVFMiCi0JZWNobyAiICAgICAgTUVNT1JZX01PREVM
ID0gJE1NIgotCWVjaG8gIiAgICAgICAgICAgICAgIFJUTSA9ICRSVE1fRU5BQkxFIgotCWVjaG8g
IiAgICAgICAgICAgICAgIExTRSA9ICRMU0VfRU5BQkxFIgotCWVjaG8KLQllY2hvICJIZWFkZXJz
IHdpbGwgYmUgaW5zdGFsbGVkIGluICRIRUFERVJTIgotCWVjaG8gIkxpYnJhcmllcyB3aWxsIGJl
IGluc3RhbGxlZCBpbiAkTElCUkFSWSIKLQllY2hvICJEb2N1bWVudGF0aW9uIHdpbGwgYmUgaW5z
dGFsbGVkIGluICRNQU5ESVIiCi19Ci0KLWZvciBvcHRpb247IGRvCi0JY2FzZSAiJG9wdGlvbiIg
aW4KLQkqPT8qKQotCQlvcHRuYW1lPWBlY2hvICRvcHRpb258Y3V0IC1jIDMtYAotCQl2YWx1ZT1g
ZXhwciAiJG9wdG5hbWUiIDogJ1tePV0qPVwoLipcKSdgCi0JCTs7Ci0JKj0pCi0JCXZhbHVlPQot
CQk7OwotCSopCi0JCXZhbHVlPXllcwotCQk7OwotCWVzYWMKLQotCWNhc2UgIiRvcHRpb24iIGlu
Ci0JLS1oZWxwKQotCQllY2hvICJVc2FnZTogJDAgW09QVElPTlNdIgotCQllY2hvCi0JCWVjaG8g
IlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBtYXkgYmUgdXNlZCBmb3IgY3Jvc3MtYnVpbGRpbmcuIgot
CQllY2hvICIgIC0tcHJvZmlsZT1OICAgICAgICAgICAgICBVc2UgY3VzdG9tIGJ1aWxkIHByb2Zp
bGUgKHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIFwkQ0MpIgotCQllY2hvCi0JCWVjaG8gIlRoZSBm
b2xsb3dpbmcgb3B0aW9ucyBtYXkgYmUgdXNlZCB0byBtb2RpZnkgaW5zdGFsbGF0aW9uIGJlaGF2
aW9yLiIKLQkJZWNobyAiICAtLWluY2x1ZGVkaXI9TiAgICAgICAgICAgSGVhZGVycyBkaXJlY3Rv
cnkgKGRlZmF1bHQgaXMgJHtQUkVGSVh9L2luY2x1ZGUpIgotCQllY2hvICIgIC0tbGliZGlyPU4g
ICAgICAgICAgICAgICBMaWJyYXJpZXMgZGlyZWN0b3J5IChkZWZhdWx0IGlzICR7UFJFRklYfS9s
aWIpIgotCQllY2hvICIgIC0tbWFuZGlyPU4gICAgICAgICAgICAgICBNYW51YWwgcGFnZXMgZGly
ZWN0b3J5IChkZWZhdWx0IGlzICR7UFJFRklYfS9tYW4pIgotCQllY2hvICIgIC0tcHJlZml4PU4g
ICAgICAgICAgICAgICBJbnN0YWxscyBsaWJyYXJ5IGZpbGVzIGluIE4gKGRlZmF1bHQgaXMgJFBS
RUZJWCkiCi0JCWVjaG8KLQkJZWNobyAiVGhlIGZvbGxvd2luZyBvcHRpb25zIHdpbGwgYWZmZWN0
IGdlbmVyYXRlZCBjb2RlLiIKLQkJZWNobyAiICAtLWVuYWJsZS1wb2ludGVyLXBhY2tpbmcgQXNz
dW1lcyBhZGRyZXNzIGVuY29kaW5nIGlzIHN1YnNldCBvZiBwb2ludGVyIHJhbmdlIgotCQllY2hv
ICIgIC0tZW5hYmxlLXJ0bSAgICAgICAgICAgICBFbmFibGUgcmVzdHJpY3RlZCB0cmFuc2FjdGlv
bmFsIG1lbW9yeSAocG93ZXIsIHg4Nl82NCkiCi0JCWVjaG8gIiAgLS1lbmFibGUtbHNlICAgICAg
ICAgICAgIEVuYWJsZSBsYXJnZSBzeXN0ZW0gZXh0ZW5zaW9ucyAoYXJtNjQpIgotCQllY2hvICIg
IC0tbWVtb3J5LW1vZGVsPU4gICAgICAgICBTcGVjaWZ5IG1lbW9yeSBtb2RlbCAoY3VycmVudGx5
IHRzbywgcHNvIG9yIHJtbykiCi0JCWVjaG8gIiAgLS12bWEtYml0cz1OICAgICAgICAgICAgIFNw
ZWNpZnkgdmFsaWQgbnVtYmVyIG9mIFZNQSBiaXRzIgotCQllY2hvICIgIC0tcGxhdGZvcm09TiAg
ICAgICAgICAgICBGb3JjZSB0aGUgcGxhdGZvcm0gdHlwZSwgaW5zdGVhZCBvZiByZWx5aW5nIG9u
IGF1dG9kZXRlY3Rpb24iCi0JCWVjaG8gIiAgLS11c2UtY2MtYnVpbHRpbnMgICAgICAgIFVzZSB0
aGUgY29tcGlsZXIgYXRvbWljIGJ1bHRpbiBmdW5jdGlvbnMsIGluc3RlYWQgb2YgdGhlIENLIGlt
cGxlbWVudGF0aW9uIgotCQllY2hvICIgIC0tZGlzYWJsZS1kb3VibGUgICAgICAgICBEb24ndCBn
ZW5lcmF0ZSBhbnkgb2YgdGhlIGZ1bmN0aW9ucyB1c2luZyB0aGUgXCJkb3VibGVcIiB0eXBlIgot
CQllY2hvCi0JCWVjaG8gIlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhZmZlY3QgcmVncmVzc2lvbiB0
ZXN0aW5nLiIKLQkJZWNobyAiICAtLWNvcmVzPU4gICAgICAgICAgICAgICAgU3BlY2lmeSBudW1i
ZXIgb2YgY29yZXMgYXZhaWxhYmxlIG9uIHRhcmdldCBtYWNoaW5lIgotCQllY2hvCi0JCWVjaG8g
IlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIG1heSBiZSB1c2VkOiIKLQkJZWNo
byAiICAgQ0MgICAgICAgQyBjb21waWxlciBjb21tYW5kIgotCQllY2hvICIgICBDRkxBR1MgICBD
IGNvbXBpbGVyIGZsYWdzIgotCQllY2hvICIgICBMREZMQUdTICBMaW5rZXIgZmxhZ3MiCi0JCWVj
aG8gIiAgIEdaSVAgICAgIEdaSVAgY29tcHJlc3Npb24gdG9vbCIKLQkJZWNobwotCQllY2hvICJS
ZXBvcnQgYnVncyB0byAke01BSU5UQUlORVJ9LiIKLQkJZXhpdCAkRVhJVF9TVUNDRVNTCi0JCTs7
Ci0JLS1tZW1vcnktbW9kZWw9KikKLQkJY2FzZSAiJHZhbHVlIiBpbgotCQkidHNvIikKLQkJCU1N
PSJDS19NRF9UU08iCi0JCQk7OwotCQkicm1vIikKLQkJCU1NPSJDS19NRF9STU8iCi0JCQk7Owot
CQkicHNvIikKLQkJCU1NPSJDS19NRF9QU08iCi0JCQk7OwotCQkqKQotCQkJZWNobyAiLi9jb25m
aWd1cmUgWy0taGVscF0iCi0JCQlleGl0ICRFWElUX0ZBSUxVUkUKLQkJCTs7Ci0JCWVzYWMKLQkJ
OzsKLQktLXZtYS1iaXRzPSopCi0JCVZNQV9CSVRTPSR2YWx1ZQotCQk7OwotCS0tZW5hYmxlLXBv
aW50ZXItcGFja2luZykKLQkJUE9JTlRFUl9QQUNLX0VOQUJMRT0iQ0tfTURfUE9JTlRFUl9QQUNL
X0VOQUJMRSIKLQkJOzsKLQktLWVuYWJsZS1ydG0pCi0JCVJUTV9FTkFCTEVfU0VUPSJDS19NRF9S
VE1fRU5BQkxFIgotCQk7OwotCS0tZW5hYmxlLWxzZSkKLQkJTFNFX0VOQUJMRV9TRVQ9IkNLX01E
X0xTRV9FTkFCTEUiCi0JCTs7Ci0JLS1jb3Jlcz0qKQotCQlDT1JFUz0kdmFsdWUKLQkJOzsKLQkt
LXByb2ZpbGU9KikKLQkJUFJPRklMRT0kdmFsdWUKLQkJOzsKLQktLXByZWZpeD0qKQotCQlQUkVG
SVg9JHZhbHVlCi0JCTs7Ci0JLS1pbmNsdWRlZGlyPSopCi0JCUhFQURFUlM9JHZhbHVlCi0JCTs7
Ci0JLS1saWJkaXI9KikKLQkJTElCUkFSWT0kdmFsdWUKLQkJOzsKLQktLW1hbmRpcj0qKQotCQlN
QU5ESVI9JHZhbHVlCi0JCTs7Ci0JLS13aXRoLXBpYykKLQkJV0FOVF9QSUM9eWVzCi0JCTs7Ci0J
LS13aXRob3V0LXBpYykKLQkJV0FOVF9QSUM9bm8KLQkJOzsKLQktLWRpc2FibGUtb3B0aW9uLWNo
ZWNraW5nKQotCQlPUFRJT05fQ0hFQ0tJTkc9MAotCQk7OwotCS0tdXNlLWNjLWJ1aWx0aW5zKQot
CQlVU0VfQ0NfQlVJTFRJTlM9MQotCQk7OwotCS0tZGlzYWJsZS1kb3VibGUpCi0JCURJU0FCTEVf
RE9VQkxFPSJDS19QUl9ESVNBQkxFX0RPVUJMRSIKLQkJOzsKLQktLXBsYXRmb3JtPSopCi0JCVBM
QVRGT1JNPSR2YWx1ZQotCQk7OwotCS0tYnVpbGQ9KnwtLWhvc3Q9KnwtLXRhcmdldD0qfC0tZXhl
Yy1wcmVmaXg9KnwtLWJpbmRpcj0qfC0tc2JpbmRpcj0qfFwKLQktLXN5c2NvbmZkaXI9KnwtLWRh
dGFkaXI9KnwtLWxpYmV4ZWNkaXI9KnwtLWxvY2Fsc3RhdGVkaXI9KnxcCi0JLS1lbmFibGUtc3Rh
dGljfFwKLQktLXNoYXJlZHN0YXRlZGlyPSp8LS1pbmZvZGlyPSp8LS1lbmFibGUtc2hhcmVkfC0t
ZGlzYWJsZS1zaGFyZWR8XAotCS0tY2FjaGUtZmlsZT0qfC0tc3JjZGlyPSopCi0JCSMgaWdub3Jl
IGZvciBjb21wYXQgd2l0aCByZWd1bGFyIGNvbmZpZ3VyZQotCQk7OwotCS0tKikKLQkJaWYgdGVz
dCAiJE9QVElPTl9DSEVDS0lORyIgLWVxIDE7IHRoZW4KLQkJCWVjaG8gIiQwIFstLWhlbHBdIgot
CQkJZWNobyAiVW5rbm93biBvcHRpb24gJG9wdGlvbiIKLQkJCWV4aXQgJEVYSVRfRkFJTFVSRQot
CQlmaQotCQk7OwotCSo9KikKLQkJb3B0bmFtZT1gZWNobyAkb3B0aW9ufGN1dCAtYyAzLWAKLQkJ
TkFNRT1gZXhwciAiJG9wdG5hbWUiIDogJ1woW149XSpcKT0nYAotCQlldmFsICIkTkFNRT0nJHZh
bHVlJyIKLQkJZXhwb3J0ICROQU1FCi0JCTs7Ci0JKikKLQkJZWNobyAiJDAgWy0taGVscF0iCi0J
CWVjaG8gIlVua25vd24gb3B0aW9uICRvcHRpb24iCi0JCWV4aXQgJEVYSVRfRkFJTFVSRQotCQk7
OwotCWVzYWMKLWRvbmUKLQotSEVBREVSUz0ke0hFQURFUlM6LSIke1BSRUZJWH0vaW5jbHVkZSJ9
Ci1MSUJSQVJZPSR7TElCUkFSWTotIiR7UFJFRklYfS9saWIifQotTUFORElSPSR7TUFORElSOi0i
JHtQUkVGSVh9L3NoYXJlL21hbiJ9Ci1HWklQPSR7R1pJUDotImd6aXAgLWMifQotUE9JTlRFUl9Q
QUNLX0VOQUJMRT0ke1BPSU5URVJfUEFDS19FTkFCTEU6LSJDS19NRF9QT0lOVEVSX1BBQ0tfRElT
QUJMRSJ9Ci1ESVNBQkxFX0RPVUJMRT0ke0RJU0FCTEVfRE9VQkxFOi0iQ0tfUFJfRU5BQkxFX0RP
VUJMRSJ9Ci1SVE1fRU5BQkxFPSR7UlRNX0VOQUJMRV9TRVQ6LSJDS19NRF9SVE1fRElTQUJMRSJ9
Ci1MU0VfRU5BQkxFPSR7TFNFX0VOQUJMRV9TRVQ6LSJDS19NRF9MU0VfRElTQUJMRSJ9Ci1WTUFf
QklUUz0ke1ZNQV9CSVRTOi0idW5rbm93biJ9Ci0KLURDT1JFUz0yCi1wcmludGYgIkRldGVjdGlu
ZyBvcGVyYXRpbmcgc3lzdGVtLi4uLi4uLiIKLVNZU1RFTT1gdW5hbWUgLXMgMj4gL2Rldi9udWxs
YAotY2FzZSAiJFNZU1RFTSIgaW4KLQkiU3VuT1MiKQotCQlTWVNURU09c29sYXJpcwotCQk7Owot
CSJMaW51eCJ8InVDbGludXgiKQotCQlEQ09SRVM9YGVncmVwICcoXkNQVVswLTldK3xecHJvY2Vz
c29yLio6LiopJyAvcHJvYy9jcHVpbmZvfHdjIC1sYAotCQlTWVNURU09bGludXgKLQkJOzsKLQki
RnJlZUJTRCJ8IkdOVS9rRnJlZUJTRCIpCi0JCURDT1JFUz1gc3lzY3RsIC1uIGh3Lm5jcHVgCi0J
CVNZU1RFTT1mcmVlYnNkCi0JCTs7Ci0JIk5ldEJTRCIpCi0JCURDT1JFUz1gc3lzY3RsIC1uIGh3
Lm5jcHVgCi0JCVNZU1RFTT1uZXRic2QKLQkJOzsKLQkiT3BlbkJTRCIpCi0JCURDT1JFUz1gc3lz
Y3RsIC1uIGh3Lm5jcHVgCi0JCVNZU1RFTT1vcGVuYnNkCi0JCTs7Ci0JIkRyYWdvbkZseSIpCi0J
CURDT1JFUz1gc3lzY3RsIC1uIGh3Lm5jcHVgCi0JCVNZU1RFTT1kcmFnb25mbHlic2QKLQkJOzsK
LQkiRGFyd2luIikKLQkJRENPUkVTPWBzeXNjdGwgLW4gaHcubmNwdWAKLQkJU1lTVEVNPWRhcndp
bgotCQk7OwotCU1JTkdXMzIqfE1TWVNfTlQqKQotCQlTWVNURU09bWluZ3czMgotCQlMREZMQUdT
PSItbXRocmVhZHMgJExERkxBR1MiCi0JCTs7Ci0gIENZR1dJTl9OVCopCi0gICAgU1lTVEVNPWN5
Z3dpbgotICAgIExERkxBR1M9Ii1tdGhyZWFkcyAkTERGTEFHUyIKLSAgICA7OwotCSopCi0JCVNZ
U1RFTT0KLQkJOzsKLWVzYWMKLQotYXNzZXJ0ICIkU1lTVEVNIiAiJFNZU1RFTSIgInVuc3VwcG9y
dGVkIgotCi1DT1JFUz0ke0NPUkVTOi0ke0RDT1JFU319Ci1wcmludGYgIkRldGVjdGluZyBtYWNo
aW5lIGFyY2hpdGVjdHVyZS4uLiIKLWlmIHRlc3QgIngkUExBVEZPUk0iID0gIngiOyB0aGVuCi0J
UExBVEZPUk09YHVuYW1lIC1tIDI+IC9kZXYvbnVsbGAKLWZpCi0KLWNhc2UgJFBMQVRGT1JNIGlu
Ci0JIm1hY3BwYyJ8IlBvd2VyIE1hY2ludG9zaCJ8InBvd2VycGMiKQotCQlSVE1fRU5BQkxFPSJD
S19NRF9SVE1fRElTQUJMRSIKLQkJTFNFX0VOQUJMRT0iQ0tfTURfTFNFX0RJU0FCTEUiCi0JCU1N
PSIke01NOi0iQ0tfTURfUk1PIn0iCi0JCVBMQVRGT1JNPXBwYwotCQlFTlZJUk9OTUVOVD0zMgot
CQlMREZMQUdTPSItbTMyICRMREZMQUdTIgotCQk7OwotCSJzdW40dSJ8InN1bjR2Inwic3BhcmM2
NCIpCi0JCVJUTV9FTkFCTEU9IkNLX01EX1JUTV9ESVNBQkxFIgotCQlMU0VfRU5BQkxFPSJDS19N
RF9MU0VfRElTQUJMRSIKLQkJTU09IiR7TU06LSJDS19NRF9UU08ifSIKLQkJUExBVEZPUk09c3Bh
cmN2OQotCQlFTlZJUk9OTUVOVD02NAotCQlMREZMQUdTPSItbTY0ICRMREZMQUdTIgotCQk7Owot
CWkzODZ8aTQ4NnxpNTg2fGk2ODZ8aTU4Nl9pNjg2fHBlbnRpdW0qfGF0aGxvbip8azV8azZ8azZf
MnxrNl8zKQotCQlMU0VfRU5BQkxFPSJDS19NRF9MU0VfRElTQUJMRSIKLQkJTU09IiR7TU06LSJD
S19NRF9UU08ifSIKLQkJY2FzZSAkU1lTVEVNIGluCi0JCQlkYXJ3aW4pCi0JCQkJRU5WSVJPTk1F
TlQ9NjQKLQkJCQlQTEFURk9STT14ODZfNjQKLQkJCQk7OwotCQkJZnJlZWJzZCkKLQkJCQlQTEFU
Rk9STT14ODYKLQkJCQlFTlZJUk9OTUVOVD0zMgotCi0JCQkJIyBGcmVlQlNEIGRvZXNuJ3QgZ2l2
ZSB1cyBhIG5pY2Ugd2F5IHRvIGRldGVybWluZSB0aGUgQ1BVCi0JCQkJIyBjbGFzcyBvZiB0aGUg
cnVubmluZyBzeXN0ZW0sIHJlcG9ydGluZyBhbnkgMzItYml0IHg4NgotCQkJCSMgYXJjaGl0ZWN0
dXJlIGFzIGkzODYuIDQ4NiBpcyBpdHMgbWluaW11bSBzdXBwb3J0ZWQgQ1BVCi0JCQkJIyBjbGFz
cyBhbmQgY21weGNoZzhiIHdhcyBpbXBsZW1lbnRlZCBmaXJzdCBpbiBpNTg2LgotCQkJCWRtZXNn
IHwgZ3JlcCAtcSAiNDg2LWNsYXNzIgotCQkJCWlmIHRlc3QgIiQ/IiAtZXEgMDsgdGhlbgotCQkJ
CQlhc3NlcnQgIiIgIiIgIk11c3QgaGF2ZSBhbiBpNTg2IGNsYXNzIG9yIGhpZ2hlciBDUFUiCi0J
CQkJZmkKLQotCQkJCSMgRnJlZUJTRCBzdGlsbCBnZW5lcmF0ZXMgY29kZSBmb3IgNDg2LWNsYXNz
IENQVXMgYXMgaXRzCi0JCQkJIyBkZWZhdWx0IDMyLWJpdCB0YXJnZXQsIGJ1dCB3ZSBuZWVkIDU4
NiBhdCB0aGUgbGVhc3QuCi0JCQkJZWNobyAiJENGTEFHUyIgfCBncmVwIC1xICdtYXJjaD0nCi0J
CQkJaWYgdGVzdCAiJD8iIC1uZSAwOyB0aGVuCi0JCQkJCSMgTmVlZGVkIGZvciBjbXB4Y2hnOGIK
LQkJCQkJQ0ZMQUdTPSIkQ0ZMQUdTIC1tYXJjaD1pNTg2IgotCQkJCWZpCi0JCQkJOzsKLQkJCWxp
bnV4KQotCQkJCWNhc2UgJFBMQVRGT1JNIGluCi0JCQkJCWkzODZ8aTQ4NikKLQkJCQkJCWFzc2Vy
dCAiIiAiIiAiTXVzdCBoYXZlIGFuIGk1ODYgY2xhc3Mgb3IgaGlnaGVyIENQVSIKLQkJCQkJCTs7
Ci0JCQkJZXNhYwotCi0JCQkJUExBVEZPUk09eDg2Ci0JCQkJRU5WSVJPTk1FTlQ9MzIKLQkJCQk7
OwotCi0JCQkqKQotCQkJCVBMQVRGT1JNPXg4NgotCQkJCUVOVklST05NRU5UPTMyCi0JCQkJYXNz
ZXJ0ICIkUExBVEZPUk0gJEVOVklST05NRU5UIiAiJFBMQVRGT1JNICRFTlZJUk9OTUVOVCIgInVu
c3VwcG9ydGVkIgotCQkJCTs7Ci0JCWVzYWMKLQkJOzsKLQkiYW1kNjQifCJ4ODZfNjQiKQotCQlM
U0VfRU5BQkxFPSJDS19NRF9MU0VfRElTQUJMRSIKLQkJUExBVEZPUk09eDg2XzY0Ci0JCUVOVklS
T05NRU5UPTY0Ci0JCUxERkxBR1M9Ii1tNjQgJExERkxBR1MiCi0JCU1NPSIke01NOi0iQ0tfTURf
VFNPIn0iCi0JCTs7Ci0JImk4NnBjIikKLQkJUlRNX0VOQUJMRT0iQ0tfTURfUlRNX0RJU0FCTEUi
Ci0JCUxTRV9FTkFCTEU9IkNLX01EX0xTRV9ESVNBQkxFIgotCQlNTT0iJHtNTTotIkNLX01EX1RT
TyJ9IgotCQlpZiB0ZXN0IC16ICIkSVNBIjsgdGhlbiBJU0E9YGlzYWluZm8gLW4gMj4gL2Rldi9u
dWxsIHx8IGVjaG8gaTM4NmAgOyBmaQotCQljYXNlICIkSVNBIiBpbgotCQkJImFtZDY0IikKLQkJ
CQlSVE1fRU5BQkxFPSR7UlRNX0VOQUJMRV9TRVQ6LSJDS19NRF9SVE1fRElTQUJMRSJ9Ci0JCQkJ
UExBVEZPUk09eDg2XzY0Ci0JCQkJRU5WSVJPTk1FTlQ9NjQKLQkJCQk7OwotCQkJKikKLQkJCQlQ
TEFURk9STT14ODYKLQkJCQlFTlZJUk9OTUVOVD0zMgotCQkJCWFzc2VydCAiJFBMQVRGT1JNICRF
TlZJUk9OTUVOVCIgIiRQTEFURk9STSAkRU5WSVJPTk1FTlQiICJ1bnN1cHBvcnRlZCIKLQkJCQk7
OwotCQllc2FjCi0JCTs7Ci0JInBwYzY0InwicHBjNjRsZSIpCi0JCVJUTV9FTkFCTEU9IkNLX01E
X1JUTV9ESVNBQkxFIgotCQlMU0VfRU5BQkxFPSJDS19NRF9MU0VfRElTQUJMRSIKLQkJTU09IiR7
TU06LSJDS19NRF9STU8ifSIKLQkJUExBVEZPUk09cHBjNjQKLQkJRU5WSVJPTk1FTlQ9NjQKLQkJ
OzsKLQlhcm18YXJtdjZsfGFybXY3bCkKLQkJaWYgdGVzdCAiJFBMQVRGT1JNIiA9ICJhcm12Nmwi
OyB0aGVuCi0JCQlDRkxBR1M9IiRDRkxBR1MgLW1hcmNoPWFybXY2ayI7Ci0JCWVsaWYgdGVzdCAi
JFBMQVRGT1JNIiA9ICJhcm12N2wiOyB0aGVuCi0JCQlDRkxBR1M9IiRDRkxBR1MgLW1hcmNoPWFy
bXY3LWEiOwotCQlmaQotCQlSVE1fRU5BQkxFPSJDS19NRF9SVE1fRElTQUJMRSIKLQkJTFNFX0VO
QUJMRT0iQ0tfTURfTFNFX0RJU0FCTEUiCi0JCU1NPSIke01NOi0iQ0tfTURfUk1PIn0iCi0JCVBM
QVRGT1JNPWFybQotCQlFTlZJUk9OTUVOVD0zMgotCQk7OwotCSJhcm02NCJ8ImFhcmNoNjQiKQot
CQlSVE1fRU5BQkxFPSJDS19NRF9SVE1fRElTQUJMRSIKLQkJTU09IiR7TU06LSJDS19NRF9STU8i
fSIKLQkJUExBVEZPUk09YWFyY2g2NAotCQlFTlZJUk9OTUVOVD02NAotCQk7OwotCSJzMzkweCIp
Ci0JCVJUTV9FTkFCTEU9IkNLX01EX1JUTV9ESVNBQkxFIgotCQlMU0VfRU5BQkxFPSJDS19NRF9M
U0VfRElTQUJMRSIKLQkJTU09IiR7TU06LSJDS19NRF9STU8ifSIKLQkJUExBVEZPUk09czM5MHgK
LQkJRU5WSVJPTk1FTlQ9NjQKLQkJOzsKLQkqKQotCQlSVE1fRU5BQkxFPSJDS19NRF9SVE1fRElT
QUJMRSIKLQkJTFNFX0VOQUJMRT0iQ0tfTURfTFNFX0RJU0FCTEUiCi0JCVBMQVRGT1JNPQotCQlN
TT0iJHtNTTotIkNLX01EX1JNTyJ9IgotCQk7OwotZXNhYwotCi1hc3NlcnQgIiRQTEFURk9STSIg
IiRQTEFURk9STSIgInVuc3VwcG9ydGVkIgotCi1pZiB0ZXN0ICIkVk1BIiA9ICJ1bmtub3duIjsg
dGhlbgotCVZNQV9CSVRTX1I9IkNLX01EX1ZNQV9CSVRTX1VOS05PV04iCi0JVk1BX0JJVFNfVkFM
VUVfUj0iIgotCVBPSU5URVJfUEFDS19FTkFCTEU9IkNLX01EX1BPSU5URVJfUEFDS19ESVNBQkxF
IgotZWxzZQotCVZNQV9CSVRTX1I9IkNLX01EX1ZNQV9CSVRTIgotCVZNQV9CSVRTX1ZBTFVFX1I9
IiR7Vk1BX0JJVFN9VUxMIgotZmkKLQotaWYgdGVzdCAiJFVTRV9DQ19CVUlMVElOUyI7IHRoZW4K
LQlDRkxBR1M9IiRDRkxBR1MgLURDS19DQ19CVUlMVElOUyIKLQlQQ19DRkxBR1M9Ii1EQ0tfQ0Nf
QlVMSVRJTlMiCi1maQotCi0jIGB3aGljaGAgb24gU29sYXJpcyBzdWNrcwotcGF0aHNlYXJjaCgp
Ci17Ci0Jd2hhdD0kMQotCW9sZEZTPSIkSUZTIgotCUlGUz0iOiIKLQlmb3IgZCBpbiAkUEFUSCA7
IGRvCi0JCWlmIHRlc3QgLXggIiRkLyR3aGF0IiA7IHRoZW4KLQkJCWVjaG8gIiRkLyR3aGF0IjsK
LQkJCUlGUz0iJG9sZEZTIgotCQkJcmV0dXJuCi0JCWZpCi0JZG9uZQotCUlGUz0iJG9sZEZTIgot
fQotCi1wcmludGYgIkZpbmRpbmcgZGlybmFtZSBjb21tYW5kLi4uLi4uLi4uLiIKLURJUk5BTUU9
YHBhdGhzZWFyY2ggIiR7RElSTkFNRTotZGlybmFtZX0iYAotaWYgdGVzdCAteiAiJERJUk5BTUUi
IC1vICEgLXggIiRESVJOQU1FIjsgdGhlbgotCURJUk5BTUU9YHBhdGhzZWFyY2ggIiR7RElSTkFN
RTotZGlybmFtZX0iYAotCURJUk5BTUU9IiRESVJOQU1FIgotZWxzZQotCWVjaG8gInN1Y2Nlc3Mg
WyRESVJOQU1FXSIKLWZpCi0KLWlmIHRlc3QgLXogIiRESVJOQU1FIjsgdGhlbgotCWVjaG8gIm5v
dCBmb3VuZCAob3V0IG9mIHNvdXJjZSBidWlsZCB1bnN1cHBvcnRlZCkiCi1lbHNlCi0JcHJpbnRm
ICJEZXRlcm1pbmluZyBidWlsZCBkaXJlY3RvcnkuLi4uLi4iCi0KLQlCVUlMRF9ESVI9YCRESVJO
QU1FICQwYAotCWNkIGAkRElSTkFNRSAkMGAKLQlCVUlMRF9ESVI9YHB3ZGAKLQotCWVjaG8gInN1
Y2Nlc3MgWyRCVUlMRF9ESVJdIgotZmkKLQotcHJpbnRmICJGaW5kaW5nIGd6aXAgdG9vbC4uLi4u
Li4uLi4uLi4uLi4iCi1HWklQPWBwYXRoc2VhcmNoICIke0daSVA6LWd6aXB9ImAKLWlmIHRlc3Qg
LXogIiRHWklQIiAtbyAhIC14ICIkR1pJUCI7IHRoZW4KLQlHWklQPWBwYXRoc2VhcmNoICIke0da
SVA6LWd6aXB9ImAKLQlHWklQPSIkR1pJUCIKLWZpCi0KLWlmIHRlc3QgLXogIiRHWklQIjsgdGhl
bgotCWVjaG8gIm5vdCBmb3VuZCIKLQlHWklQPWNhdAotCUdaSVBfU1VGRklYPSIiCi1lbHNlCi0J
ZWNobyAic3VjY2VzcyBbJEdaSVBdIgotCUdaSVA9IiRHWklQIC1jIgotCUdaSVBfU1VGRklYPSIu
Z3oiCi1maQotCi1wcmludGYgIkZpbmRpbmcgc3VpdGFibGUgY29tcGlsZXIuLi4uLi4uLiIKLWlm
IHRlc3QgISAteCAiJHtDQ30iOyB0aGVuCi0JQ0M9YHBhdGhzZWFyY2ggIiR7Q0M6LWNjfSJgCi0J
aWYgdGVzdCAteiAiJENDIiAtbyAhIC14ICIkQ0MiOyB0aGVuCi0JCUNDPWBwYXRoc2VhcmNoICIk
e0NDOi1nY2N9ImAKLQlmaQotZmkKLWFzc2VydCAiJENDIiAibm90IGZvdW5kIgotCi1jYXQgPDwg
RU9GID4gLjEuYwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1pbnQgbWFpbih2b2lkKSB7Ci0jaWYgZGVm
aW5lZChfV0lOMzIpCi0jaWYgZGVmaW5lZChfX01JTkdXNjRfXykKLQlwdXRzKCJtaW5ndzY0Iik7
Ci0JcmV0dXJuICgwKTsKLSNlbGlmIGRlZmluZWQoX19NSU5HVzMyX18pICYmIChfX01JTkdXMzJf
TUFKT1JfVkVSU0lPTiA+PSAzKQotCXB1dHMoIm1pbmd3MzIiKTsKLQlyZXR1cm4gKDApOwotI2Vs
c2UKLQlyZXR1cm4gKDEpOwotI2VuZGlmIC8qIF9fTUlOR1czMl9fICYmIF9fTUlOR1czMl9NQUpP
Ul9WRVJTSU9OID49IDMgKi8KLSNlbGlmIGRlZmluZWQoX19jbGFuZ19fKSAmJiAoX19jbGFuZ19t
YWpvcl9fID49IDMpCi0JcHV0cygiY2xhbmciKTsKLQlyZXR1cm4gKDApOwotI2VsaWYgZGVmaW5l
ZChfX1NVTlBST19DKSAmJiAoX19TVU5QUk9fQyA+PSAweDUxMTApCi0JcHV0cygic3VuY2MiKTsK
LQlyZXR1cm4gKDApOwotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID49IDQp
Ci0JcHV0cygiZ2NjIik7Ci0JcmV0dXJuICgwKTsKLSNlbHNlCi0JcmV0dXJuICgxKTsKLSNlbmRp
ZgotfQotRU9GCi0KLSRDQyAtbyAuMSAuMS5jCi1DT01QSUxFUj1gLi8uMSAyPiAvZGV2L251bGxg
Ci1yPSQ/Ci1ybSAtZiAuMS5jIC4xCi0KLWlmIHRlc3QgIiRyIiAtbmUgMDsgdGhlbgotCWFzc2Vy
dCAiIiAidXBkYXRlIGNvbXBpbGVyIgotZWxzZQotCWVjaG8gInN1Y2Nlc3MgWyRDQ10iCi1maQot
Ci1pZiB0ZXN0ICIkQ09NUElMRVIiID0gInN1bmNjIjsgdGhlbgotCUxEPS9iaW4vbGQKLQlMREZM
QUdTPSItRyAteiB0ZXh0IC1oIGxpYmNrLnNvLiRWRVJTSU9OX01BSk9SICRMREZMQUdTIgotCUNG
TEFHUz0iLXhPNSAkQ0ZMQUdTIgotCVBUSFJFQURfQ0ZMQUdTPSItbXQgLWxwdGhyZWFkIgotZWxp
ZiB0ZXN0ICIkQ09NUElMRVIiID0gImdjYyIgfHwgdGVzdCAiJENPTVBJTEVSIiA9ICJjbGFuZyIg
fHwgdGVzdCAiJENPTVBJTEVSIiA9ICJtaW5ndzMyIiB8fCB0ZXN0ICIkQ09NUElMRVIiID0gIm1p
bmd3NjQiOyB0aGVuCi0JTEQ9JENDCi0JU09OQU1FPSIkTEROQU1FX01BSk9SIgotCWlmIHRlc3Qg
IiRTWVNURU0iID0gImRhcndpbiI7IHRoZW4KLQkJQ0NfV0xfT1BUPSItaW5zdGFsbF9uYW1lIgot
CQlMRE5BTUU9ImxpYmNrLmR5bGliIgotCQlMRE5BTUVfVkVSU0lPTj0ibGliY2suJFZFUlNJT04u
ZHlsaWIiCi0JCUxETkFNRV9NQUpPUj0ibGliY2suJFZFUlNJT05fTUFKT1IuZHlsaWIiCi0JCVNP
TkFNRT0iJExJQlJBUlkvJExETkFNRV9NQUpPUiIKLQllbHNlCi0JCUNDX1dMX09QVD0iLXNvbmFt
ZSIKLQlmaQotCi0JTERGTEFHUz0iLVdsLCRDQ19XTF9PUFQsJFNPTkFNRSAkTERGTEFHUyIKLQlp
ZiB0ZXN0ICIkV0FOVF9QSUMiID0gInllcyI7IHRoZW4KLQkJTERGTEFHUz0iJExERkxBR1MgLXNo
YXJlZCAtZlBJQyIKLQkJQ0ZMQUdTPSIkQ0ZMQUdTIC1mUElDIgotCQlBTExfTElCUz0ibGliY2su
c28gbGliY2suYSIKLQkJSU5TVEFMTF9MSUJTPSJpbnN0YWxsLXNvIGluc3RhbGwtbGliIgotCWVs
c2UKLQkJTERGTEFHUz0iJExERkxBR1MgLWZuby1QSUMiCi0JCUNGTEFHUz0iJENGTEFHUyAtZm5v
LVBJQyIKLQkJQUxMX0xJQlM9ImxpYmNrLmEiCi0JCUlOU1RBTExfTElCUz0iaW5zdGFsbC1saWIi
Ci0JZmkKLQotCUNGTEFHUz0iLURfWE9QRU5fU09VUkNFPTYwMCAtRF9CU0RfU09VUkNFIC1EX0RF
RkFVTFRfU09VUkNFIC1zdGQ9Z251OTkgLXBlZGFudGljIC1XYWxsIC1XIC1XdW5kZWYgLVdlbmRp
Zi1sYWJlbHMgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1hbGlnbiAtV2Nhc3QtcXVh
bCAtV3dyaXRlLXN0cmluZ3MgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBl
cyAtV25lc3RlZC1leHRlcm5zIC1XaW5saW5lIC1XZGlzYWJsZWQtb3B0aW1pemF0aW9uIC1mc3Ry
aWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtV25vLXBhcmVudGhlc2VzICRDRkxBR1MiCi0JUFRIUkVB
RF9DRkxBR1M9Ii1wdGhyZWFkIgotCWlmIHRlc3QgIiRDT01QSUxFUiIgPSAibWluZ3c2NCI7IHRo
ZW4KLQkJRU5WSVJPTk1FTlQ9NjQKLQkJUExBVEZPUk09eDg2XzY0Ci0JZmkKLWVsc2UKLQlhc3Nl
cnQgIiIgInVua25vd24gY29tcGlsZXIiCi1maQotCi1wcmludGYgIkRldGVjdGluZyBWTUEgYml0
cy4uLi4uLi4uLi4uLi4uLiIKLVZNQT0idW5rbm93biIKLWlmIHRlc3QgIiRWTUFfQklUUyIgPSAi
dW5rbm93biI7IHRoZW4KLQlpZiB0ZXN0ICIkUExBVEZPUk0iID0gIng4NiIgfHwgdGVzdCAkUExB
VEZPUk0gPSAieDg2XzY0IjsgdGhlbgotCQljYXNlICRTWVNURU0gaW4KLQkJCWRhcndpbikKLQkJ
CQlWTUE9YHN5c2N0bCAtbiBtYWNoZGVwLmNwdS5hZGRyZXNzX2JpdHMudmlydHVhbGAKLQkJCQk7
OwotCQkJbGludXgpCi0JCQkJVk1BPWBhd2sgJy9hZGRyZXNzIHNpemVzLyB7cHJpbnQgJDc7ZXhp
dH0nIC9wcm9jL2NwdWluZm9gCi0JCQkJOzsKLQkJCSopCi0JCQkJaWYgdGVzdCAiJFBMQVRGT1JN
IiA9ICJ4ODYiOyB0aGVuCi0JCQkJCVZNQT0iMzIiCi0JCQkJZWxzZQotCQkJCQljYXQgPDwgRU9G
ID4gLjEuYwotCQkJCQkjaW5jbHVkZSA8c3RkaW8uaD4KLQotCQkJCQlpbnQgbWFpbihpbnQgYXJn
YywgY2hhciAqYXJndltdKQotCQkJCQl7Ci0JCQkJCQl1bnNpZ25lZCBsb25nIHJldCA9IDB4ODAw
MDAwMDA7Ci0KLQkJCQkJCV9fYXNtIF9fdm9sYXRpbGUoImNwdWlkXG4iCi0JCQkJCQkJCSA6ICIr
YSIgKHJldCkpOwotCQkJCQkJaWYgKHJldCA+PSAweDgwMDAwMDA4KSB7Ci0JCQkJCQkJCXJldCA9
IDB4ODAwMDAwMDg7Ci0JCQkJCQkJCV9fYXNtIF9fdm9sYXRpbGUoImNwdWlkXG4iCi0JCQkJCQkJ
CSA6ICIrYSIgKHJldCkpOwotCQkJCQkJCQlwcmludGYoIiVsdVxuIiwgKHJldCA+PiA4KSAmIDB4
ZmYpOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkJcmV0dXJuICgxKTsKLQkJCQkJCX0KLQkJCQkJ
CXJldHVybiAoMCk7Ci0JCQkJCX0KLUVPRgotCi0JCQkJCSRDQyAtbyAuMSAuMS5jIDI+L2Rldi9u
dWxsCi0JCQkJCVZNQT1gLi8uMSAyPi9kZXYvbnVsbGAKLQkJCQkJaWYgdGVzdCAkPyAtbmUgMDsg
dGhlbgotCQkJCQkJVk1BPSJ1bmtub3duIgotCQkJCQlmaQotCQkJCQlybSAtZiAuMS5jIC4xCi0J
CQkJZmkKLQkJZXNhYwotCWZpCi0KLQlWTUFfQklUUz0kVk1BCi1lbHNlCi0JVk1BPSRWTUFfQklU
UwotZmkKLQotaWYgdGVzdCAiJFZNQSIgPSAidW5rbm93biI7IHRoZW4KLQllY2hvICJ1bmtub3du
IgotCVZNQV9CSVRTX1I9IkNLX01EX1ZNQV9CSVRTX1VOS05PV04iCi0JVk1BX0JJVFNfVkFMVUVf
Uj0iIgotCVBPSU5URVJfUEFDS19FTkFCTEU9IkNLX01EX1BPSU5URVJfUEFDS19ESVNBQkxFIgot
ZWxzZQotCWVjaG8gInN1Y2Nlc3MgWyRWTUFdIgotCVZNQV9CSVRTX1I9IkNLX01EX1ZNQV9CSVRT
IgotCVZNQV9CSVRTX1ZBTFVFX1I9IiR7Vk1BX0JJVFN9VUxMIgotZmkKLQotZm9yIGkgaW4gJFJF
UVVJUkVfSEVBREVSOyBkbwotCXByaW50ZiAiQ2hlY2tpbmcgaGVhZGVyIGZpbGUgdXNhYmlsaXR5
Li4uIgotCi0JY2F0IDw8IEVPRiA+IC4xLmMKLSNpbmNsdWRlIDwkaT4KLWludCBtYWluKHZvaWQp
e3JldHVybigwKTt9Ci1FT0YKLQkkQ0MgLW8gLjEgLjEuYyAyPiAvZGV2L251bGwKLQloZl9zPSQ/
Ci0KLQlybSAtZiAuMSAuMS5jCi0JaWYgdGVzdCAkaGZfcyAtZXEgMDsgdGhlbgotCQllY2hvICJz
dWNjZXNzIFskaV0iCi0JZWxzZQotCQllY2hvICJmYWlsZWQgIFskaV0iCi0JCWV4aXQgJEVYSVRf
RkFJTFVSRQotCWZpCi1kb25lCi0KLXByaW50ZiAiRGV0ZWN0aW5nIGdpdCBTSEEuLi4uLi4uLi4u
Li4uLi4uIgotZ2V0X2dpdF9zaGEKLWVjaG8gIiRHSVRfTVNHIFskR0lUX1NIQV0iCi0KLWlmIHRl
c3QgIiRQUk9GSUxFIjsgdGhlbgotICAgIHByaW50ZiAiVXNpbmcgdXNlci1zcGVjaWZpZWQgcHJv
ZmlsZS4uLi4uIgotCi0JaWYgdGVzdCAteiAiJENDIjsgdGhlbgotCQllY2hvICJmYWlsZWQgW3Nw
ZWNpZnkgY29tcGlsZXJdIgotCQlleGl0ICRFWElUX0ZBSUxVUkUKLQlmaQotCi0JaWYgdGVzdCAh
IC1mIGJ1aWxkL2NrLmJ1aWxkLiRQUk9GSUxFOyB0aGVuCi0JCWVjaG8gImZhaWxlZCBbJFBST0ZJ
TEVdIgotCQlleGl0ICRFWElUX0ZBSUxVUkUKLQlmaQotCi0JZWNobyAic3VjY2VzcyBbJFBST0ZJ
TEVdIgotCXByaW50ZiAiR2VuZXJhdGluZyBoZWFkZXIgZmlsZXMuLi4uLi4uLi4uIgotCWdlbmVy
YXRlIGluY2x1ZGUvY2tfbWQuaC5pbiBpbmNsdWRlL2NrX21kLmgKLQllY2hvICJzdWNjZXNzIgot
CXByaW50ZiAiR2VuZXJhdGluZyBidWlsZCBmaWxlcy4uLi4uLi4uLi4uIgotCWdlbmVyYXRlIHNy
Yy9NYWtlZmlsZS5pbiBzcmMvTWFrZWZpbGUKLQlnZW5lcmF0ZSBkb2MvTWFrZWZpbGUuaW4gZG9j
L01ha2VmaWxlCi0JZ2VuZXJhdGUgYnVpbGQvY2suYnVpbGQuaW4gYnVpbGQvY2suYnVpbGQKLQln
ZW5lcmF0ZSBidWlsZC9yZWdyZXNzaW9ucy5idWlsZC5pbiBidWlsZC9yZWdyZXNzaW9ucy5idWls
ZAotCWdlbmVyYXRlIGJ1aWxkL2NrLnBjLmluIGJ1aWxkL2NrLnBjCi0JZ2VuZXJhdGUgYnVpbGQv
Y2suc3BlYy5pbiBidWlsZC9jay5zcGVjCi0JZ2VuZXJhdGUgTWFrZWZpbGUuaW4gTWFrZWZpbGUK
LQllY2hvICJzdWNjZXNzIgotCWdlbmVyYXRlX3N0ZG91dAotCWV4aXQgJEVYSVRfU1VDQ0VTUwot
ZmkKLQotIyBQbGF0Zm9ybSB3aWxsIGJlIHVzZWQgYXMgYSBtYWNyby4KLVBST0ZJTEU9IiR7UFJP
RklMRTotJFBMQVRGT1JNfSIKLVBMQVRGT1JNPSJfXyR7UExBVEZPUk19X18iCi0KLXByaW50ZiAi
R2VuZXJhdGluZyBoZWFkZXIgZmlsZXMuLi4uLi4uLi4uIgotZ2VuZXJhdGUgaW5jbHVkZS9ja19t
ZC5oLmluIGluY2x1ZGUvY2tfbWQuaAotZWNobyAic3VjY2VzcyIKLQotcHJpbnRmICJHZW5lcmF0
aW5nIGJ1aWxkIGZpbGVzLi4uLi4uLi4uLi4iCi0KLW1rZGlyIC1wICRQX1BXRC9kb2MKLW1rZGly
IC1wICRQX1BXRC9idWlsZAotbWtkaXIgLXAgJFBfUFdEL2luY2x1ZGUKLW1rZGlyIC1wICRQX1BX
RC9zcmMKLQotaWYgdGVzdCAiJFBfUFdEIiAnIT0nICIkQlVJTERfRElSIjsgdGhlbgotCW1rZGly
IC1wICRQX1BXRC9yZWdyZXNzaW9ucwotCWNwICRCVUlMRF9ESVIvcmVncmVzc2lvbnMvTWFrZWZp
bGUudW5zdXBwb3J0ZWQgJFBfUFdEL3JlZ3Jlc3Npb25zL01ha2VmaWxlICY+IC9kZXYvbnVsbAot
CWNwICRCVUlMRF9ESVIvYnVpbGQvY2suYnVpbGQuJFBST0ZJTEUgJFBfUFdEL2J1aWxkL2NrLmJ1
aWxkLiRQUk9GSUxFICY+IC9kZXYvbnVsbAotCWNwICRCVUlMRF9ESVIvaW5jbHVkZS9ja19tZC5o
ICRQX1BXRC9pbmNsdWRlL2NrX21kLmggJj4gL2Rldi9udWxsCi1maQotCi1nZW5lcmF0ZSBzcmMv
TWFrZWZpbGUuaW4gJFBfUFdEL3NyYy9NYWtlZmlsZQotZ2VuZXJhdGUgZG9jL01ha2VmaWxlLmlu
ICRQX1BXRC9kb2MvTWFrZWZpbGUKLWdlbmVyYXRlIGJ1aWxkL2NrLmJ1aWxkLmluICRQX1BXRC9i
dWlsZC9jay5idWlsZAotZ2VuZXJhdGUgYnVpbGQvcmVncmVzc2lvbnMuYnVpbGQuaW4gJFBfUFdE
L2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxkCi1nZW5lcmF0ZSBidWlsZC9jay5wYy5pbiAkUF9QV0Qv
YnVpbGQvY2sucGMKLWdlbmVyYXRlIGJ1aWxkL2NrLnNwZWMuaW4gJFBfUFdEL2J1aWxkL2NrLnNw
ZWMKLWdlbmVyYXRlIE1ha2VmaWxlLmluICRQX1BXRC9NYWtlZmlsZQotdG91Y2ggc3JjLyouYwot
ZWNobyAic3VjY2VzcyIKLWdlbmVyYXRlX3N0ZG91dApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svZG9jL01ha2VmaWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvY2svZG9jL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
NjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX2FycmF5LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9pbmNsdWRlL2NrX2FycmF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDljYjk3YjI4MmE0MjU0YTczYjlmZDVkMWEwNmJlMGY1NTQ2MjA5MWIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19hcnJheS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMy0yMDE1IFNhbXkgQWwgQmFocmEKLSAqIENvcHly
aWdodCAyMDEzLTIwMTQgQXBwTmV4dXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBDS19BUlJBWV9ICi0jZGVmaW5lIENLX0FSUkFZX0gKLQotI2luY2x1ZGUgPGNr
X2NjLmg+Ci0jaW5jbHVkZSA8Y2tfbWFsbG9jLmg+Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNs
dWRlIDxja19zdGRib29sLmg+Ci0jaW5jbHVkZSA8Y2tfc3RkZGVmLmg+Ci0KLXN0cnVjdCBfY2tf
YXJyYXkgewotCXVuc2lnbmVkIGludCBuX2NvbW1pdHRlZDsKLQl1bnNpZ25lZCBpbnQgbGVuZ3Ro
OwotCXZvaWQgKnZhbHVlc1tdOwotfTsKLQotc3RydWN0IGNrX2FycmF5IHsKLQlzdHJ1Y3QgY2tf
bWFsbG9jICphbGxvY2F0b3I7Ci0Jc3RydWN0IF9ja19hcnJheSAqYWN0aXZlOwotCXVuc2lnbmVk
IGludCBuX2VudHJpZXM7Ci0Jc3RydWN0IF9ja19hcnJheSAqdHJhbnNhY3Rpb247Ci19OwotdHlw
ZWRlZiBzdHJ1Y3QgY2tfYXJyYXkgY2tfYXJyYXlfdDsKLQotc3RydWN0IGNrX2FycmF5X2l0ZXJh
dG9yIHsKLQlzdHJ1Y3QgX2NrX2FycmF5ICpzbmFwc2hvdDsKLX07Ci10eXBlZGVmIHN0cnVjdCBj
a19hcnJheV9pdGVyYXRvciBja19hcnJheV9pdGVyYXRvcl90OwotCi0jZGVmaW5lIENLX0FSUkFZ
X01PREVfU1BNQyAwVQotI2RlZmluZSBDS19BUlJBWV9NT0RFX01QTUMgKHZvaWQpIC8qIFVuc3Vw
cG9ydGVkLiAqLwotCi1ib29sIGNrX2FycmF5X2luaXQoY2tfYXJyYXlfdCAqLCB1bnNpZ25lZCBp
bnQsIHN0cnVjdCBja19tYWxsb2MgKiwgdW5zaWduZWQgaW50KTsKLWJvb2wgY2tfYXJyYXlfY29t
bWl0KGNrX2FycmF5X3QgKik7Ci1ib29sIGNrX2FycmF5X3B1dChja19hcnJheV90ICosIHZvaWQg
Kik7Ci1pbnQgY2tfYXJyYXlfcHV0X3VuaXF1ZShja19hcnJheV90ICosIHZvaWQgKik7Ci1ib29s
IGNrX2FycmF5X3JlbW92ZShja19hcnJheV90ICosIHZvaWQgKik7Ci12b2lkIGNrX2FycmF5X2Rl
aW5pdChja19hcnJheV90ICosIGJvb2wpOwotCi1DS19DQ19JTkxJTkUgc3RhdGljIHVuc2lnbmVk
IGludAotY2tfYXJyYXlfbGVuZ3RoKHN0cnVjdCBja19hcnJheSAqYXJyYXkpCi17Ci0Jc3RydWN0
IF9ja19hcnJheSAqYSA9IGNrX3ByX2xvYWRfcHRyKCZhcnJheS0+YWN0aXZlKTsKLQotCWNrX3By
X2ZlbmNlX2xvYWQoKTsKLQlyZXR1cm4gY2tfcHJfbG9hZF91aW50KCZhLT5uX2NvbW1pdHRlZCk7
Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZCAqCi1ja19hcnJheV9idWZmZXIoc3RydWN0
IGNrX2FycmF5ICphcnJheSwgdW5zaWduZWQgaW50ICpsZW5ndGgpCi17Ci0Jc3RydWN0IF9ja19h
cnJheSAqYSA9IGNrX3ByX2xvYWRfcHRyKCZhcnJheS0+YWN0aXZlKTsKLQotCWNrX3ByX2ZlbmNl
X2xvYWQoKTsKLQkqbGVuZ3RoID0gY2tfcHJfbG9hZF91aW50KCZhLT5uX2NvbW1pdHRlZCk7Ci0J
cmV0dXJuIGEtPnZhbHVlczsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19hcnJh
eV9pbml0aWFsaXplZChzdHJ1Y3QgY2tfYXJyYXkgKmFycmF5KQotewotCi0JcmV0dXJuIGNrX3By
X2xvYWRfcHRyKCZhcnJheS0+YWN0aXZlKSAhPSBOVUxMOwotfQotCi0jZGVmaW5lIENLX0FSUkFZ
X0ZPUkVBQ0goYSwgaSwgYikJCSAgIAlcCi0JKGkpLT5zbmFwc2hvdCA9IGNrX3ByX2xvYWRfcHRy
KCYoYSktPmFjdGl2ZSk7CVwKLQlja19wcl9mZW5jZV9sb2FkKCk7CQkJCVwKLQlmb3IgKHVuc2ln
bmVkIGludCBfY2tfaSA9IDA7CQkgICAJXAotCSAgICBfY2tfaSA8IChhKS0+YWN0aXZlLT5uX2Nv
bW1pdHRlZCAmJgkJXAotCSAgICAoKCpiKSA9IChhKS0+YWN0aXZlLT52YWx1ZXNbX2NrX2ldLCAx
KTsJXAotCSAgICBfY2tfaSsrKQotCi0jZW5kaWYgLyogQ0tfQVJSQVlfSCAqLwpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19iYWNrb2ZmLmgg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX2JhY2tvZmYuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhNGYyMTUyZTNjZGY4MmQ2ZDU4NTE5YWM5
MjI0Y2JhMDViOTc3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX2JhY2tvZmYu
aAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOS0y
MDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
LSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
Q0tfQkFDS09GRl9ICi0jZGVmaW5lIENLX0JBQ0tPRkZfSAotCi0jaW5jbHVkZSA8Y2tfY2MuaD4K
LSNpbmNsdWRlIDxja19wci5oPgotCi0jaWZuZGVmIENLX0JBQ0tPRkZfQ0VJTElORwotI2RlZmlu
ZSBDS19CQUNLT0ZGX0NFSUxJTkcgKCgxIDw8IDIwKSAtIDEpCi0jZW5kaWYKLQotI2RlZmluZSBD
S19CQUNLT0ZGX0lOSVRJQUxJWkVSICgxIDw8IDkpCi0KLXR5cGVkZWYgdW5zaWduZWQgaW50IGNr
X2JhY2tvZmZfdDsKLQotLyoKLSAqIFRoaXMgaXMgYSBleHBvbmVudGlhbCBiYWNrLW9mZiBpbXBs
ZW1lbnRhdGlvbi4KLSAqLwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19iYWNrb2ZmX2Vi
KHVuc2lnbmVkIGludCAqYykKLXsKLQl1bnNpZ25lZCBpbnQgaSwgY2VpbGluZzsKLQotCWNlaWxp
bmcgPSAqYzsKLQlmb3IgKGkgPSAwOyBpIDwgY2VpbGluZzsgaSsrKQotCQlja19wcl9iYXJyaWVy
KCk7Ci0KLQkqYyA9IGNlaWxpbmcgPDw9IGNlaWxpbmcgPCBDS19CQUNLT0ZGX0NFSUxJTkc7Ci0J
cmV0dXJuOwotfQotCi0jZW5kaWYgLyogQ0tfQkFDS09GRl9IICovCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX2JhcnJpZXIuaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfYmFycmllci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGMxMmNhMmM4ZGUzYjdjOThlY2UyNDZhYzE5MmVhZTA0
MjdjYTI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfYmFycmllci5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFNh
bXkgQWwgQmFocmEuCi0gKiBDb3B5cmlnaHQgMjAxMSBEYXZpZCBKb3NlcGguCi0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ0tfQkFSUklFUl9ICi0jZGVmaW5lIENLX0JBUlJJ
RVJfSAotCi0jaW5jbHVkZSA8Y2tfc3BpbmxvY2suaD4KLQotc3RydWN0IGNrX2JhcnJpZXJfY2Vu
dHJhbGl6ZWQgewotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQl1bnNpZ25lZCBpbnQgc2Vuc2U7Ci19
OwotdHlwZWRlZiBzdHJ1Y3QgY2tfYmFycmllcl9jZW50cmFsaXplZCBja19iYXJyaWVyX2NlbnRy
YWxpemVkX3Q7Ci0KLXN0cnVjdCBja19iYXJyaWVyX2NlbnRyYWxpemVkX3N0YXRlIHsKLQl1bnNp
Z25lZCBpbnQgc2Vuc2U7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tfYmFycmllcl9jZW50cmFsaXpl
ZF9zdGF0ZSBja19iYXJyaWVyX2NlbnRyYWxpemVkX3N0YXRlX3Q7Ci0KLSNkZWZpbmUgQ0tfQkFS
UklFUl9DRU5UUkFMSVpFRF9JTklUSUFMSVpFUiAJIHswLCAwfQotI2RlZmluZSBDS19CQVJSSUVS
X0NFTlRSQUxJWkVEX1NUQVRFX0lOSVRJQUxJWkVSIHswfQotCi12b2lkIGNrX2JhcnJpZXJfY2Vu
dHJhbGl6ZWQoY2tfYmFycmllcl9jZW50cmFsaXplZF90ICosCi0gICAgY2tfYmFycmllcl9jZW50
cmFsaXplZF9zdGF0ZV90ICosIHVuc2lnbmVkIGludCk7Ci0KLXN0cnVjdCBja19iYXJyaWVyX2Nv
bWJpbmluZ19ncm91cCB7Ci0JdW5zaWduZWQgaW50IGs7Ci0JdW5zaWduZWQgaW50IGNvdW50Owot
CXVuc2lnbmVkIGludCBzZW5zZTsKLQlzdHJ1Y3QgY2tfYmFycmllcl9jb21iaW5pbmdfZ3JvdXAg
KnBhcmVudDsKLQlzdHJ1Y3QgY2tfYmFycmllcl9jb21iaW5pbmdfZ3JvdXAgKmxlZnQ7Ci0Jc3Ry
dWN0IGNrX2JhcnJpZXJfY29tYmluaW5nX2dyb3VwICpyaWdodDsKLQlzdHJ1Y3QgY2tfYmFycmll
cl9jb21iaW5pbmdfZ3JvdXAgKm5leHQ7Ci19IENLX0NDX0NBQ0hFTElORTsKLXR5cGVkZWYgc3Ry
dWN0IGNrX2JhcnJpZXJfY29tYmluaW5nX2dyb3VwIGNrX2JhcnJpZXJfY29tYmluaW5nX2dyb3Vw
X3Q7Ci0KLXN0cnVjdCBja19iYXJyaWVyX2NvbWJpbmluZ19zdGF0ZSB7Ci0JdW5zaWduZWQgaW50
IHNlbnNlOwotfTsKLXR5cGVkZWYgc3RydWN0IGNrX2JhcnJpZXJfY29tYmluaW5nX3N0YXRlIGNr
X2JhcnJpZXJfY29tYmluaW5nX3N0YXRlX3Q7Ci0KLSNkZWZpbmUgQ0tfQkFSUklFUl9DT01CSU5J
TkdfU1RBVEVfSU5JVElBTElaRVIge34wfQotCi1zdHJ1Y3QgY2tfYmFycmllcl9jb21iaW5pbmcg
ewotCXN0cnVjdCBja19iYXJyaWVyX2NvbWJpbmluZ19ncm91cCAqcm9vdDsKLQlja19zcGlubG9j
a19mYXNfdCBtdXRleDsKLX07Ci10eXBlZGVmIHN0cnVjdCBja19iYXJyaWVyX2NvbWJpbmluZyBj
a19iYXJyaWVyX2NvbWJpbmluZ190OwotCi12b2lkIGNrX2JhcnJpZXJfY29tYmluaW5nX2luaXQo
Y2tfYmFycmllcl9jb21iaW5pbmdfdCAqLCBja19iYXJyaWVyX2NvbWJpbmluZ19ncm91cF90ICop
OwotCi12b2lkIGNrX2JhcnJpZXJfY29tYmluaW5nX2dyb3VwX2luaXQoY2tfYmFycmllcl9jb21i
aW5pbmdfdCAqLAotICAgIGNrX2JhcnJpZXJfY29tYmluaW5nX2dyb3VwX3QgKiwgdW5zaWduZWQg
aW50KTsKLQotdm9pZCBja19iYXJyaWVyX2NvbWJpbmluZyhja19iYXJyaWVyX2NvbWJpbmluZ190
ICosCi0gICAgY2tfYmFycmllcl9jb21iaW5pbmdfZ3JvdXBfdCAqLAotICAgIGNrX2JhcnJpZXJf
Y29tYmluaW5nX3N0YXRlX3QgKik7Ci0KLXN0cnVjdCBja19iYXJyaWVyX2Rpc3NlbWluYXRpb25f
ZmxhZyB7Ci0JdW5zaWduZWQgaW50IHRmbGFnOwotCXVuc2lnbmVkIGludCAqcGZsYWc7Ci19Owot
dHlwZWRlZiBzdHJ1Y3QgY2tfYmFycmllcl9kaXNzZW1pbmF0aW9uX2ZsYWcgY2tfYmFycmllcl9k
aXNzZW1pbmF0aW9uX2ZsYWdfdDsKLQotc3RydWN0IGNrX2JhcnJpZXJfZGlzc2VtaW5hdGlvbiB7
Ci0JdW5zaWduZWQgaW50IG50aHI7Ci0JdW5zaWduZWQgaW50IHNpemU7Ci0JdW5zaWduZWQgaW50
IHRpZDsKLQlzdHJ1Y3QgY2tfYmFycmllcl9kaXNzZW1pbmF0aW9uX2ZsYWcgKmZsYWdzWzJdOwot
fTsKLXR5cGVkZWYgc3RydWN0IGNrX2JhcnJpZXJfZGlzc2VtaW5hdGlvbiBja19iYXJyaWVyX2Rp
c3NlbWluYXRpb25fdDsKLQotc3RydWN0IGNrX2JhcnJpZXJfZGlzc2VtaW5hdGlvbl9zdGF0ZSB7
Ci0JaW50IAkJcGFyaXR5OwotCXVuc2lnbmVkIGludCAJc2Vuc2U7Ci0JdW5zaWduZWQgaW50CXRp
ZDsKLX07Ci10eXBlZGVmIHN0cnVjdCBja19iYXJyaWVyX2Rpc3NlbWluYXRpb25fc3RhdGUgY2tf
YmFycmllcl9kaXNzZW1pbmF0aW9uX3N0YXRlX3Q7Ci0KLXZvaWQgY2tfYmFycmllcl9kaXNzZW1p
bmF0aW9uX2luaXQoY2tfYmFycmllcl9kaXNzZW1pbmF0aW9uX3QgKiwKLSAgICBja19iYXJyaWVy
X2Rpc3NlbWluYXRpb25fZmxhZ190ICoqLCB1bnNpZ25lZCBpbnQpOwotCi12b2lkIGNrX2JhcnJp
ZXJfZGlzc2VtaW5hdGlvbl9zdWJzY3JpYmUoY2tfYmFycmllcl9kaXNzZW1pbmF0aW9uX3QgKiwK
LSAgICBja19iYXJyaWVyX2Rpc3NlbWluYXRpb25fc3RhdGVfdCAqKTsKLQotdW5zaWduZWQgaW50
IGNrX2JhcnJpZXJfZGlzc2VtaW5hdGlvbl9zaXplKHVuc2lnbmVkIGludCk7Ci0KLXZvaWQgY2tf
YmFycmllcl9kaXNzZW1pbmF0aW9uKGNrX2JhcnJpZXJfZGlzc2VtaW5hdGlvbl90ICosCi0gICAg
Y2tfYmFycmllcl9kaXNzZW1pbmF0aW9uX3N0YXRlX3QgKik7Ci0KLXN0cnVjdCBja19iYXJyaWVy
X3RvdXJuYW1lbnRfcm91bmQgewotCWludCByb2xlOwotCXVuc2lnbmVkIGludCAqb3Bwb25lbnQ7
Ci0JdW5zaWduZWQgaW50IGZsYWc7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tfYmFycmllcl90b3Vy
bmFtZW50X3JvdW5kIGNrX2JhcnJpZXJfdG91cm5hbWVudF9yb3VuZF90OwotCi1zdHJ1Y3QgY2tf
YmFycmllcl90b3VybmFtZW50IHsKLQl1bnNpZ25lZCBpbnQgdGlkOwotCXVuc2lnbmVkIGludCBz
aXplOwotCXN0cnVjdCBja19iYXJyaWVyX3RvdXJuYW1lbnRfcm91bmQgKipyb3VuZHM7Ci19Owot
dHlwZWRlZiBzdHJ1Y3QgY2tfYmFycmllcl90b3VybmFtZW50IGNrX2JhcnJpZXJfdG91cm5hbWVu
dF90OwotCi1zdHJ1Y3QgY2tfYmFycmllcl90b3VybmFtZW50X3N0YXRlIHsKLQl1bnNpZ25lZCBp
bnQgc2Vuc2U7Ci0JdW5zaWduZWQgaW50IHZwaWQ7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tfYmFy
cmllcl90b3VybmFtZW50X3N0YXRlIGNrX2JhcnJpZXJfdG91cm5hbWVudF9zdGF0ZV90OwotCi12
b2lkIGNrX2JhcnJpZXJfdG91cm5hbWVudF9zdWJzY3JpYmUoY2tfYmFycmllcl90b3VybmFtZW50
X3QgKiwKLQkJCQkgICAgIGNrX2JhcnJpZXJfdG91cm5hbWVudF9zdGF0ZV90ICopOwotdm9pZCBj
a19iYXJyaWVyX3RvdXJuYW1lbnRfaW5pdChja19iYXJyaWVyX3RvdXJuYW1lbnRfdCAqLAotCQkJ
CWNrX2JhcnJpZXJfdG91cm5hbWVudF9yb3VuZF90ICoqLAotCQkJCXVuc2lnbmVkIGludCk7Ci11
bnNpZ25lZCBpbnQgY2tfYmFycmllcl90b3VybmFtZW50X3NpemUodW5zaWduZWQgaW50KTsKLXZv
aWQgY2tfYmFycmllcl90b3VybmFtZW50KGNrX2JhcnJpZXJfdG91cm5hbWVudF90ICosIGNrX2Jh
cnJpZXJfdG91cm5hbWVudF9zdGF0ZV90ICopOwotCi1zdHJ1Y3QgY2tfYmFycmllcl9tY3Mgewot
CXVuc2lnbmVkIGludCB0aWQ7Ci0JdW5zaWduZWQgaW50ICpjaGlsZHJlblsyXTsKLQl1bnNpZ25l
ZCBpbnQgY2hpbGRub3RyZWFkeVs0XTsKLQl1bnNpZ25lZCBpbnQgZHVtbXk7Ci0JdW5zaWduZWQg
aW50IGhhdmVjaGlsZFs0XTsKLQl1bnNpZ25lZCBpbnQgKnBhcmVudDsKLQl1bnNpZ25lZCBpbnQg
cGFyZW50c2Vuc2U7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tfYmFycmllcl9tY3MgY2tfYmFycmll
cl9tY3NfdDsKLQotc3RydWN0IGNrX2JhcnJpZXJfbWNzX3N0YXRlIHsKLQl1bnNpZ25lZCBpbnQg
c2Vuc2U7Ci0JdW5zaWduZWQgaW50IHZwaWQ7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tfYmFycmll
cl9tY3Nfc3RhdGUgY2tfYmFycmllcl9tY3Nfc3RhdGVfdDsKLQotdm9pZCBja19iYXJyaWVyX21j
c19pbml0KGNrX2JhcnJpZXJfbWNzX3QgKiwgdW5zaWduZWQgaW50KTsKLXZvaWQgY2tfYmFycmll
cl9tY3Nfc3Vic2NyaWJlKGNrX2JhcnJpZXJfbWNzX3QgKiwgY2tfYmFycmllcl9tY3Nfc3RhdGVf
dCAqKTsKLXZvaWQgY2tfYmFycmllcl9tY3MoY2tfYmFycmllcl9tY3NfdCAqLCBja19iYXJyaWVy
X21jc19zdGF0ZV90ICopOwotCi0jZW5kaWYgLyogQ0tfQkFSUklFUl9IICovCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX2JpdG1hcC5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19iaXRtYXAuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI0ZTk1M2FlMzk4OTY3OTc1ZjIzMzY0YWNlOThh
NzY2ZGI3MmU5NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX2JpdG1hcC5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMi0yMDE1
IFNhbXkgQWwgQmFocmEuCi0gKiBDb3B5cmlnaHQgMjAxMi0yMDE0IEFwcE5leHVzLCBJbmMuCi0g
KiBDb3B5cmlnaHQgMjAxNCBQYXVsIEtodW9uZy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBDS19CSVRNQVBfSAotI2RlZmluZSBDS19CSVRNQVBfSAotCi0jaW5jbHVkZSA8
Y2tfY2MuaD4KLSNpbmNsdWRlIDxja19saW1pdHMuaD4KLSNpbmNsdWRlIDxja19wci5oPgotI2lu
Y2x1ZGUgPGNrX3N0ZGludC5oPgotI2luY2x1ZGUgPGNrX3N0ZGJvb2wuaD4KLSNpbmNsdWRlIDxj
a19zdGRkZWYuaD4KLSNpbmNsdWRlIDxja19zdGRib29sLmg+Ci0jaW5jbHVkZSA8Y2tfc3RkZGVm
Lmg+Ci0jaW5jbHVkZSA8Y2tfc3RyaW5nLmg+Ci0KLSNpZiAhZGVmaW5lZChDS19GX1BSX0xPQURf
VUlOVCkgfHwgIWRlZmluZWQoQ0tfRl9QUl9TVE9SRV9VSU5UKSB8fCBcCi0gICAgIWRlZmluZWQo
Q0tfRl9QUl9BTkRfVUlOVCkgfHwgIWRlZmluZWQoQ0tfRl9QUl9PUl9VSU5UKSB8fCBcCi0gICAg
IWRlZmluZWQoQ0tfRl9DQ19DVFopCi0jZXJyb3IgImNrX2JpdG1hcCBpcyBub3Qgc3VwcG9ydGVk
IG9uIHlvdXIgcGxhdGZvcm0uIgotI2VuZGlmCi0KLSNkZWZpbmUgQ0tfQklUTUFQX0JMT0NLIAko
c2l6ZW9mKHVuc2lnbmVkIGludCkgKiBDSEFSX0JJVCkKLSNkZWZpbmUgQ0tfQklUTUFQX09GRlNF
VChpKQkoKGkpICUgQ0tfQklUTUFQX0JMT0NLKQotI2RlZmluZSBDS19CSVRNQVBfQklUKGkpCSgx
VSA8PCBDS19CSVRNQVBfT0ZGU0VUKGkpKQotI2RlZmluZSBDS19CSVRNQVBfUFRSKHgsIGkpCSgo
eCkgKyAoKGkpIC8gQ0tfQklUTUFQX0JMT0NLKSkKLSNkZWZpbmUgQ0tfQklUTUFQX0JMT0NLUyhu
KQkoKChuKSArIENLX0JJVE1BUF9CTE9DSyAtIDEpIC8gQ0tfQklUTUFQX0JMT0NLKQotCi0jZGVm
aW5lIENLX0JJVE1BUF9JTlNUQU5DRShuX2VudHJpZXMpCQkJCQlcCi0JdW5pb24gewkJCQkJCQkJ
XAotCQlzdHJ1Y3QgewkJCQkJCVwKLQkJCXVuc2lnbmVkIGludCBuX2JpdHM7CQkJCVwKLQkJCXVu
c2lnbmVkIGludCBtYXBbQ0tfQklUTUFQX0JMT0NLUyhuX2VudHJpZXMpXTsJXAotCQl9IGNvbnRl
bnQ7CQkJCQkJXAotCQlzdHJ1Y3QgY2tfYml0bWFwIGJpdG1hcDsJCQkJXAotCX0KLQotI2RlZmlu
ZSBDS19CSVRNQVBfSVRFUkFUT1JfSU5JVChhLCBiKSBcCi0JY2tfYml0bWFwX2l0ZXJhdG9yX2lu
aXQoKGEpLCAmKGIpLT5iaXRtYXApCi0KLSNkZWZpbmUgQ0tfQklUTUFQX0lOSVQoYSwgYiwgYykg
XAotCWNrX2JpdG1hcF9pbml0KCYoYSktPmJpdG1hcCwgKGIpLCAoYykpCi0KLSNkZWZpbmUgQ0tf
QklUTUFQX05FWFQoYSwgYiwgYykgXAotCWNrX2JpdG1hcF9uZXh0KCYoYSktPmJpdG1hcCwgKGIp
LCAoYykpCi0KLSNkZWZpbmUgQ0tfQklUTUFQX1NFVChhLCBiKSBcCi0JY2tfYml0bWFwX3NldCgm
KGEpLT5iaXRtYXAsIChiKSkKLQotI2RlZmluZSBDS19CSVRNQVBfQlRTKGEsIGIpIFwKLQlja19i
aXRtYXBfYnRzKCYoYSktPmJpdG1hcCwgKGIpKQotCi0jZGVmaW5lIENLX0JJVE1BUF9SRVNFVChh
LCBiKSBcCi0JY2tfYml0bWFwX3Jlc2V0KCYoYSktPmJpdG1hcCwgKGIpKQotCi0jZGVmaW5lIENL
X0JJVE1BUF9URVNUKGEsIGIpIFwKLQlja19iaXRtYXBfdGVzdCgmKGEpLT5iaXRtYXAsIChiKSkK
LQotI2RlZmluZSBDS19CSVRNQVBfVU5JT04oYSwgYikgXAotCWNrX2JpdG1hcF91bmlvbigmKGEp
LT5iaXRtYXAsICYoYiktPmJpdG1hcCkKLQotI2RlZmluZSBDS19CSVRNQVBfSU5URVJTRUNUSU9O
KGEsIGIpIFwKLQlja19iaXRtYXBfaW50ZXJzZWN0aW9uKCYoYSktPmJpdG1hcCwgJihiKS0+Yml0
bWFwKQotCi0jZGVmaW5lIENLX0JJVE1BUF9JTlRFUlNFQ1RJT05fTkVHQVRFKGEsIGIpIFwKLQlj
a19iaXRtYXBfaW50ZXJzZWN0aW9uX25lZ2F0ZSgmKGEpLT5iaXRtYXAsICYoYiktPmJpdG1hcCkK
LQotI2RlZmluZSBDS19CSVRNQVBfQ0xFQVIoYSkgXAotCWNrX2JpdG1hcF9jbGVhcigmKGEpLT5i
aXRtYXApCi0KLSNkZWZpbmUgQ0tfQklUTUFQX0VNUFRZKGEsIGIpIFwKLQlja19iaXRtYXBfZW1w
dHkoJihhKS0+Yml0bWFwLCBiKQotCi0jZGVmaW5lIENLX0JJVE1BUF9GVUxMKGEsIGIpIFwKLQlj
a19iaXRtYXBfZnVsbCgmKGEpLT5iaXRtYXAsIGIpCi0KLSNkZWZpbmUgQ0tfQklUTUFQX0NPVU5U
KGEsIGIpIFwKLQlja19iaXRtYXBfY291bnQoJihhKS0+Yml0bWFwLCBiKQotCi0jZGVmaW5lIENL
X0JJVE1BUF9DT1VOVF9JTlRFUlNFQ1QoYSwgYiwgYykgXAotCWNrX2JpdG1hcF9jb3VudF9pbnRl
cnNlY3QoJihhKS0+Yml0bWFwLCBiLCBjKQotCi0jZGVmaW5lIENLX0JJVE1BUF9CSVRTKGEpIFwK
LQlja19iaXRtYXBfYml0cygmKGEpLT5iaXRtYXApCi0KLSNkZWZpbmUgQ0tfQklUTUFQX0JVRkZF
UihhKSBcCi0JY2tfYml0bWFwX2J1ZmZlcigmKGEpLT5iaXRtYXApCi0KLSNkZWZpbmUgQ0tfQklU
TUFQKGEpIFwKLQkoJihhKS0+Yml0bWFwKQotCi1zdHJ1Y3QgY2tfYml0bWFwIHsKLQl1bnNpZ25l
ZCBpbnQgbl9iaXRzOwotCXVuc2lnbmVkIGludCBtYXBbXTsKLX07Ci10eXBlZGVmIHN0cnVjdCBj
a19iaXRtYXAgY2tfYml0bWFwX3Q7Ci0KLXN0cnVjdCBja19iaXRtYXBfaXRlcmF0b3IgewotCXVu
c2lnbmVkIGludCBjYWNoZTsKLQl1bnNpZ25lZCBpbnQgbl9ibG9jazsKLQl1bnNpZ25lZCBpbnQg
bl9saW1pdDsKLX07Ci10eXBlZGVmIHN0cnVjdCBja19iaXRtYXBfaXRlcmF0b3IgY2tfYml0bWFw
X2l0ZXJhdG9yX3Q7Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdW5zaWduZWQgaW50Ci1ja19iaXRt
YXBfYmFzZSh1bnNpZ25lZCBpbnQgbl9iaXRzKQotewotCi0JcmV0dXJuIENLX0JJVE1BUF9CTE9D
S1Mobl9iaXRzKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwotfQotCi0vKgotICogUmV0dXJucyB0
aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhIGNrX2JpdG1hcF90IG9iamVjdCBzdXBw
b3J0aW5nIHRoZQotICogc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzLgotICovCi1DS19DQ19JTkxJ
TkUgc3RhdGljIHVuc2lnbmVkIGludAotY2tfYml0bWFwX3NpemUodW5zaWduZWQgaW50IG5fYml0
cykKLXsKLQotCXJldHVybiBja19iaXRtYXBfYmFzZShuX2JpdHMpICsgc2l6ZW9mKHN0cnVjdCBj
a19iaXRtYXApOwotfQotCi0vKgotICogUmV0dXJucyB0b3RhbCBudW1iZXIgb2YgYml0cyBpbiBz
cGVjaWZpZWQgYml0bWFwLgotICovCi1DS19DQ19JTkxJTkUgc3RhdGljIHVuc2lnbmVkIGludAot
Y2tfYml0bWFwX2JpdHMoY29uc3Qgc3RydWN0IGNrX2JpdG1hcCAqYml0bWFwKQotewotCi0JcmV0
dXJuIGJpdG1hcC0+bl9iaXRzOwotfQotCi0vKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhl
IGJpdCBidWZmZXIgYXNzb2NpYXRlZAotICogd2l0aCB0aGUgc3BlY2lmaWVkIGJpdG1hcC4KLSAq
LwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkICoKLWNrX2JpdG1hcF9idWZmZXIoc3RydWN0IGNr
X2JpdG1hcCAqYml0bWFwKQotewotCi0JcmV0dXJuIGJpdG1hcC0+bWFwOwotfQotCi0vKgotICog
U2V0cyB0aGUgYml0IGF0IHRoZSBvZmZzZXQgc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgYXJndW1l
bnQuCi0gKi8KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfYml0bWFwX3NldChzdHJ1Y3Qg
Y2tfYml0bWFwICpiaXRtYXAsIHVuc2lnbmVkIGludCBuKQotewotCi0JY2tfcHJfb3JfdWludChD
S19CSVRNQVBfUFRSKGJpdG1hcC0+bWFwLCBuKSwgQ0tfQklUTUFQX0JJVChuKSk7Ci0JcmV0dXJu
OwotfQotCi0vKgotICogUGVyZm9ybXMgYSB0ZXN0LWFuZC1zZXQgb3BlcmF0aW9uIGF0IHRoZSBv
ZmZzZXQgc3BlY2lmaWVkIGluIHRoZQotICogc2Vjb25kIGFyZ3VtZW50LgotICogUmV0dXJucyB0
cnVlIGlmIHRoZSBiaXQgYXQgdGhlIHNwZWNpZmllZCBvZmZzZXQgd2FzIGFscmVhZHkgc2V0LAot
ICogZmFsc2Ugb3RoZXJ3aXNlLgotICovCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wKLWNrX2Jp
dG1hcF9idHMoc3RydWN0IGNrX2JpdG1hcCAqYml0bWFwLCB1bnNpZ25lZCBpbnQgbikKLXsKLQot
CXJldHVybiBja19wcl9idHNfdWludChDS19CSVRNQVBfUFRSKGJpdG1hcC0+bWFwLCBuKSwKLQkg
ICAgQ0tfQklUTUFQX09GRlNFVChuKSk7Ci19Ci0KLS8qCi0gKiBSZXNldHMgdGhlIGJpdCBhdCB0
aGUgb2Zmc2V0IHNwZWNpZmllZCBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50LgotICovCi1DS19DQ19J
TkxJTkUgc3RhdGljIHZvaWQKLWNrX2JpdG1hcF9yZXNldChzdHJ1Y3QgY2tfYml0bWFwICpiaXRt
YXAsIHVuc2lnbmVkIGludCBuKQotewotCi0JY2tfcHJfYW5kX3VpbnQoQ0tfQklUTUFQX1BUUihi
aXRtYXAtPm1hcCwgbiksIH5DS19CSVRNQVBfQklUKG4pKTsKLQlyZXR1cm47Ci19Ci0KLS8qCi0g
KiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJpdCBhdCBvZmZzZXQgc3BlY2lmaWVkIGluIHRoZQot
ICogc2Vjb25kIGFyZ3VtZW50IGlzIHNldC4KLSAqLwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29s
Ci1ja19iaXRtYXBfdGVzdChjb25zdCBzdHJ1Y3QgY2tfYml0bWFwICpiaXRtYXAsIHVuc2lnbmVk
IGludCBuKQotewotCXVuc2lnbmVkIGludCBibG9jazsKLQotCWJsb2NrID0gY2tfcHJfbG9hZF91
aW50KENLX0JJVE1BUF9QVFIoYml0bWFwLT5tYXAsIG4pKTsKLQlyZXR1cm4gYmxvY2sgJiBDS19C
SVRNQVBfQklUKG4pOwotfQotCi0vKgotICogQ29tYmluZXMgYml0cyBmcm9tIHNlY29uZCBiaXRt
YXAgaW50byB0aGUgZmlyc3QgYml0bWFwLiBUaGlzIGlzIG5vdCBhCi0gKiBsaW5lYXJpemVkIG9w
ZXJhdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvbXBsZXRlIGJpdG1hcC4KLSAqLwotQ0tfQ0Nf
SU5MSU5FIHN0YXRpYyB2b2lkCi1ja19iaXRtYXBfdW5pb24oc3RydWN0IGNrX2JpdG1hcCAqZHN0
LCBjb25zdCBzdHJ1Y3QgY2tfYml0bWFwICpzcmMpCi17Ci0JdW5zaWduZWQgaW50IG47Ci0JdW5z
aWduZWQgaW50IG5fYnVja2V0cyA9IGRzdC0+bl9iaXRzOwotCi0JaWYgKHNyYy0+bl9iaXRzIDwg
ZHN0LT5uX2JpdHMpCi0JCW5fYnVja2V0cyA9IHNyYy0+bl9iaXRzOwotCi0Jbl9idWNrZXRzID0g
Q0tfQklUTUFQX0JMT0NLUyhuX2J1Y2tldHMpOwotCWZvciAobiA9IDA7IG4gPCBuX2J1Y2tldHM7
IG4rKykgewotCQlja19wcl9vcl91aW50KCZkc3QtPm1hcFtuXSwKLQkJICAgIGNrX3ByX2xvYWRf
dWludCgmc3JjLT5tYXBbbl0pKTsKLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBJbnRlcnNl
Y3RzIGJpdHMgZnJvbSBzZWNvbmQgYml0bWFwIGludG8gdGhlIGZpcnN0IGJpdG1hcC4gVGhpcyBp
cwotICogbm90IGEgbGluZWFyaXplZCBvcGVyYXRpb24gd2l0aCByZXNwZWN0IHRvIHRoZSBjb21w
bGV0ZSBiaXRtYXAuCi0gKiBBbnkgdHJhaWxpbmcgYml0IGluIGRzdCBpcyBjbGVhcmVkLgotICov
Ci1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX2JpdG1hcF9pbnRlcnNlY3Rpb24oc3RydWN0
IGNrX2JpdG1hcCAqZHN0LCBjb25zdCBzdHJ1Y3QgY2tfYml0bWFwICpzcmMpCi17Ci0JdW5zaWdu
ZWQgaW50IG47Ci0JdW5zaWduZWQgaW50IG5fYnVja2V0cyA9IGRzdC0+bl9iaXRzOwotCXVuc2ln
bmVkIGludCBuX2ludGVyc2VjdCA9IG5fYnVja2V0czsKLQotCWlmIChzcmMtPm5fYml0cyA8IG5f
aW50ZXJzZWN0KQotCQluX2ludGVyc2VjdCA9IHNyYy0+bl9iaXRzOwotCi0Jbl9idWNrZXRzID0g
Q0tfQklUTUFQX0JMT0NLUyhuX2J1Y2tldHMpOwotCW5faW50ZXJzZWN0ID0gQ0tfQklUTUFQX0JM
T0NLUyhuX2ludGVyc2VjdCk7Ci0JZm9yIChuID0gMDsgbiA8IG5faW50ZXJzZWN0OyBuKyspIHsK
LQkJY2tfcHJfYW5kX3VpbnQoJmRzdC0+bWFwW25dLAotCQkgICAgY2tfcHJfbG9hZF91aW50KCZz
cmMtPm1hcFtuXSkpOwotCX0KLQotCWZvciAoOyBuIDwgbl9idWNrZXRzOyBuKyspCi0JCWNrX3By
X3N0b3JlX3VpbnQoJmRzdC0+bWFwW25dLCAwKTsKLQotCXJldHVybjsKLX0KLQotLyoKLSAqIElu
dGVyc2VjdHMgdGhlIGNvbXBsZW1lbnQgb2YgYml0cyBmcm9tIHNlY29uZCBiaXRtYXAgaW50byB0
aGUgZmlyc3QKLSAqIGJpdG1hcC4gVGhpcyBpcyBub3QgYSBsaW5lYXJpemVkIG9wZXJhdGlvbiB3
aXRoIHJlc3BlY3QgdG8gdGhlCi0gKiBjb21wbGV0ZSBiaXRtYXAuICBBbnkgdHJhaWxpbmcgYml0
IGluIGRzdCBpcyBsZWZ0IGFzIGlzLgotICovCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNr
X2JpdG1hcF9pbnRlcnNlY3Rpb25fbmVnYXRlKHN0cnVjdCBja19iaXRtYXAgKmRzdCwKLSAgICBj
b25zdCBzdHJ1Y3QgY2tfYml0bWFwICpzcmMpCi17Ci0JdW5zaWduZWQgaW50IG47Ci0JdW5zaWdu
ZWQgaW50IG5faW50ZXJzZWN0ID0gZHN0LT5uX2JpdHM7Ci0KLQlpZiAoc3JjLT5uX2JpdHMgPCBu
X2ludGVyc2VjdCkKLQkJbl9pbnRlcnNlY3QgPSBzcmMtPm5fYml0czsKLQotCW5faW50ZXJzZWN0
ID0gQ0tfQklUTUFQX0JMT0NLUyhuX2ludGVyc2VjdCk7Ci0JZm9yIChuID0gMDsgbiA8IG5faW50
ZXJzZWN0OyBuKyspIHsKLQkJY2tfcHJfYW5kX3VpbnQoJmRzdC0+bWFwW25dLAotCQkgICAgKH5j
a19wcl9sb2FkX3VpbnQoJnNyYy0+bWFwW25dKSkpOwotCX0KLQotCXJldHVybjsKLX0KLQotLyoK
LSAqIFJlc2V0cyBhbGwgYml0cyBpbiB0aGUgcHJvdmlkZWQgYml0bWFwLiBUaGlzIGlzIG5vdCBh
IGxpbmVhcml6ZWQKLSAqIG9wZXJhdGlvbiBpbiBja19iaXRtYXAuCi0gKi8KLUNLX0NDX0lOTElO
RSBzdGF0aWMgdm9pZAotY2tfYml0bWFwX2NsZWFyKHN0cnVjdCBja19iaXRtYXAgKmJpdG1hcCkK
LXsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgbl9idWNrZXRzID0gY2tfYml0bWFw
X2Jhc2UoYml0bWFwLT5uX2JpdHMpIC8KLQkgICAgc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0KLQlm
b3IgKGkgPSAwOyBpIDwgbl9idWNrZXRzOyBpKyspCi0JCWNrX3ByX3N0b3JlX3VpbnQoJmJpdG1h
cC0+bWFwW2ldLCAwKTsKLQotCXJldHVybjsKLX0KLQotLyoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0
aGUgZmlyc3QgbGltaXQgYml0cyBpbiBiaXRtYXAgYXJlIGNsZWFyZWQuICBJZgotICogbGltaXQg
aXMgZ3JlYXRlciB0aGFuIHRoZSBiaXRtYXAgc2l6ZSwgbGltaXQgaXMgdHJ1bmNhdGVkIHRvIHRo
YXQKLSAqIHNpemUuCi0gKi8KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfYml0bWFwX2Vt
cHR5KGNvbnN0IGNrX2JpdG1hcF90ICpiaXRtYXAsIHVuc2lnbmVkIGludCBsaW1pdCkKLXsKLQl1
bnNpZ25lZCBpbnQgaSwgd29yZHMsIHNsb3A7Ci0KLQlpZiAobGltaXQgPiBiaXRtYXAtPm5fYml0
cykKLQkJbGltaXQgPSBiaXRtYXAtPm5fYml0czsKLQotCXdvcmRzID0gbGltaXQgLyBDS19CSVRN
QVBfQkxPQ0s7Ci0Jc2xvcCA9IGxpbWl0ICUgQ0tfQklUTUFQX0JMT0NLOwotCWZvciAoaSA9IDA7
IGkgPCB3b3JkczsgaSsrKSB7Ci0JCWlmIChja19wcl9sb2FkX3VpbnQoJmJpdG1hcC0+bWFwW2ld
KSAhPSAwKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlpZiAoc2xvcCA+IDApIHsK
LQkJdW5zaWduZWQgaW50IHdvcmQ7Ci0KLQkJd29yZCA9IGNrX3ByX2xvYWRfdWludCgmYml0bWFw
LT5tYXBbaV0pOwotCQlpZiAoKHdvcmQgJiAoKDFVIDw8IHNsb3ApIC0gMSkpICE9IDApCi0JCQly
ZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIHRy
dWUgaWYgdGhlIGZpcnN0IGxpbWl0IGJpdHMgaW4gYml0bWFwIGFyZSBzZXQuICBJZiBsaW1pdAot
ICogaXMgZ3JlYXRlciB0aGFuIHRoZSBiaXRtYXAgc2l6ZSwgbGltaXQgaXMgdHJ1bmNhdGVkIHRv
IHRoYXQgc2l6ZS4KLSAqLwotQ0tfQ0NfVU5VU0VEIHN0YXRpYyBib29sCi1ja19iaXRtYXBfZnVs
bChjb25zdCBja19iaXRtYXBfdCAqYml0bWFwLCB1bnNpZ25lZCBpbnQgbGltaXQpCi17Ci0JdW5z
aWduZWQgaW50IGksIHNsb3AsIHdvcmRzOwotCi0JaWYgKGxpbWl0ID4gYml0bWFwLT5uX2JpdHMp
IHsKLQkJbGltaXQgPSBiaXRtYXAtPm5fYml0czsKLQl9Ci0KLQl3b3JkcyA9IGxpbWl0IC8gQ0tf
QklUTUFQX0JMT0NLOwotCXNsb3AgPSBsaW1pdCAlIENLX0JJVE1BUF9CTE9DSzsKLQlmb3IgKGkg
PSAwOyBpIDwgd29yZHM7IGkrKykgewotCQlpZiAoY2tfcHJfbG9hZF91aW50KCZiaXRtYXAtPm1h
cFtpXSkgIT0gLTFVKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChzbG9wID4gMCkgewot
CQl1bnNpZ25lZCBpbnQgd29yZDsKLQotCQl3b3JkID0gfmNrX3ByX2xvYWRfdWludCgmYml0bWFw
LT5tYXBbaV0pOwotCQlpZiAoKHdvcmQgJiAoKDFVIDw8IHNsb3ApIC0gMSkpICE9IDApCi0JCQly
ZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogUmV0dXJucyB0aGUg
bnVtYmVyIG9mIHNldCBiaXQgaW4gYml0bWFwLCB1cHRvIChhbmQgZXhjbHVkaW5nKQotICogbGlt
aXQuICBJZiBsaW1pdCBpcyBncmVhdGVyIHRoYW4gdGhlIGJpdG1hcCBzaXplLCBpdCBpcyB0cnVu
Y2F0ZWQKLSAqIHRvIHRoYXQgc2l6ZS4KLSAqLwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB1bnNpZ25l
ZCBpbnQKLWNrX2JpdG1hcF9jb3VudChjb25zdCBja19iaXRtYXBfdCAqYml0bWFwLCB1bnNpZ25l
ZCBpbnQgbGltaXQpCi17Ci0JdW5zaWduZWQgaW50IGNvdW50LCBpLCBzbG9wLCB3b3JkczsKLQot
CWlmIChsaW1pdCA+IGJpdG1hcC0+bl9iaXRzKQotCQlsaW1pdCA9IGJpdG1hcC0+bl9iaXRzOwot
Ci0Jd29yZHMgPSBsaW1pdCAvIENLX0JJVE1BUF9CTE9DSzsKLQlzbG9wID0gbGltaXQgJSBDS19C
SVRNQVBfQkxPQ0s7Ci0JZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgd29yZHM7IGkrKykKLQkJ
Y291bnQgKz0gY2tfY2NfcG9wY291bnQoY2tfcHJfbG9hZF91aW50KCZiaXRtYXAtPm1hcFtpXSkp
OwotCi0JaWYgKHNsb3AgPiAwKSB7Ci0JCXVuc2lnbmVkIGludCB3b3JkOwotCi0JCXdvcmQgPSBj
a19wcl9sb2FkX3VpbnQoJmJpdG1hcC0+bWFwW2ldKTsKLQkJY291bnQgKz0gY2tfY2NfcG9wY291
bnQod29yZCAmICgoMVUgPDwgc2xvcCkgLSAxKSk7Ci0JfQotCXJldHVybiBjb3VudDsKLX0KLQot
LyoKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzZXQgYml0IGluIHRoZSBpbnRlcnNlY3Rpb24g
b2YgdHdvIGJpdG1hcHMsCi0gKiB1cHRvIChhbmQgZXhjbHVkaW5nKSBsaW1pdC4gIElmIGxpbWl0
IGlzIGdyZWF0ZXIgdGhhbiBlaXRoZXIgYml0bWFwCi0gKiBzaXplLCBpdCBpcyB0cnVuY2F0ZWQg
dG8gdGhlIHNtYWxsZXN0LgotICovCi1DS19DQ19JTkxJTkUgc3RhdGljIHVuc2lnbmVkIGludAot
Y2tfYml0bWFwX2NvdW50X2ludGVyc2VjdChjb25zdCBja19iaXRtYXBfdCAqeCwgY29uc3QgY2tf
Yml0bWFwX3QgKnksCi0gICAgdW5zaWduZWQgaW50IGxpbWl0KQotewotCXVuc2lnbmVkIGludCBj
b3VudCwgaSwgc2xvcCwgd29yZHM7Ci0KLQlpZiAobGltaXQgPiB4LT5uX2JpdHMpCi0JCWxpbWl0
ID0geC0+bl9iaXRzOwotCi0JaWYgKGxpbWl0ID4geS0+bl9iaXRzKQotCQlsaW1pdCA9IHktPm5f
Yml0czsKLQotCXdvcmRzID0gbGltaXQgLyBDS19CSVRNQVBfQkxPQ0s7Ci0Jc2xvcCA9IGxpbWl0
ICUgQ0tfQklUTUFQX0JMT0NLOwotCWZvciAoaSA9IDAsIGNvdW50ID0gMDsgaSA8IHdvcmRzOyBp
KyspIHsKLQkJdW5zaWduZWQgaW50IHhpLCB5aTsKLQotCQl4aSA9IGNrX3ByX2xvYWRfdWludCgm
eC0+bWFwW2ldKTsKLQkJeWkgPSBja19wcl9sb2FkX3VpbnQoJnktPm1hcFtpXSk7Ci0JCWNvdW50
ICs9IGNrX2NjX3BvcGNvdW50KHhpICYgeWkpOwotCX0KLQotCWlmIChzbG9wID4gMCkgewotCQl1
bnNpZ25lZCBpbnQgd29yZCwgeGksIHlpOwotCi0JCXhpID0gY2tfcHJfbG9hZF91aW50KCZ4LT5t
YXBbaV0pOwotCQl5aSA9IGNrX3ByX2xvYWRfdWludCgmeS0+bWFwW2ldKTsKLQkJd29yZCA9IHhp
ICYgeWk7Ci0JCWNvdW50ICs9IGNrX2NjX3BvcGNvdW50KHdvcmQgJiAoKDFVIDw8IHNsb3ApIC0g
MSkpOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplcyBhIGNrX2Jp
dG1hcCBwb2ludGluZyB0byBhIHJlZ2lvbiBvZiBtZW1vcnkgd2l0aAotICogY2tfYml0bWFwX3Np
emUobl9iaXRzKSBieXRlcy4gVGhpcmQgYXJndW1lbnQgZGV0ZXJtaW5lcyB3aGV0aGVyCi0gKiBk
ZWZhdWx0IGJpdCB2YWx1ZSBpcyAxICh0cnVlKSBvciAwIChmYWxzZSkuCi0gKi8KLUNLX0NDX0lO
TElORSBzdGF0aWMgdm9pZAotY2tfYml0bWFwX2luaXQoc3RydWN0IGNrX2JpdG1hcCAqYml0bWFw
LAotCSAgICAgICB1bnNpZ25lZCBpbnQgbl9iaXRzLAotCSAgICAgICBib29sIHNldCkKLXsKLQl1
bnNpZ25lZCBpbnQgYmFzZSA9IGNrX2JpdG1hcF9iYXNlKG5fYml0cyk7Ci0KLQliaXRtYXAtPm5f
Yml0cyA9IG5fYml0czsKLQltZW1zZXQoYml0bWFwLT5tYXAsIC0oaW50KXNldCwgYmFzZSk7Ci0K
LQlpZiAoc2V0ID09IHRydWUpIHsKLQkJdW5zaWduZWQgaW50IGIgPSBuX2JpdHMgJSBDS19CSVRN
QVBfQkxPQ0s7Ci0KLQkJaWYgKGIgPT0gMCkKLQkJCXJldHVybjsKLQotCQkqQ0tfQklUTUFQX1BU
UihiaXRtYXAtPm1hcCwgbl9iaXRzIC0gMSkgJj0gKDFVIDw8IGIpIC0gMVU7Ci0JfQotCi0JcmV0
dXJuOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSBpdGVyYXRvciBmb3IgdXNlIHdpdGggcHJvdmlk
ZWQgYml0bWFwLgotICovCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX2JpdG1hcF9pdGVy
YXRvcl9pbml0KHN0cnVjdCBja19iaXRtYXBfaXRlcmF0b3IgKmksCi0gICAgY29uc3Qgc3RydWN0
IGNrX2JpdG1hcCAqYml0bWFwKQotewotCi0JaS0+bl9ibG9jayA9IDA7Ci0JaS0+bl9saW1pdCA9
IENLX0JJVE1BUF9CTE9DS1MoYml0bWFwLT5uX2JpdHMpOwotCWlmIChpLT5uX2xpbWl0ID4gMCkg
ewotCQlpLT5jYWNoZSA9IGNrX3ByX2xvYWRfdWludCgmYml0bWFwLT5tYXBbMF0pOwotCX0gZWxz
ZSB7Ci0JCWktPmNhY2hlID0gMDsKLQl9Ci0JcmV0dXJuOwotfQotCi0vKgotICogSXRlcmF0ZSB0
byBuZXh0IGJpdC4KLSAqLwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19iaXRtYXBfbmV4
dChjb25zdCBzdHJ1Y3QgY2tfYml0bWFwICpiaXRtYXAsCi0JICAgICAgIHN0cnVjdCBja19iaXRt
YXBfaXRlcmF0b3IgKmksCi0JICAgICAgIHVuc2lnbmVkIGludCAqYml0KQotewotCXVuc2lnbmVk
IGludCBjYWNoZSA9IGktPmNhY2hlOwotCXVuc2lnbmVkIGludCBuX2Jsb2NrID0gaS0+bl9ibG9j
azsKLQl1bnNpZ25lZCBpbnQgbl9saW1pdCA9IGktPm5fbGltaXQ7Ci0KLQlpZiAoY2FjaGUgPT0g
MCkgewotCQlpZiAobl9ibG9jayA+PSBuX2xpbWl0KQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCWZv
ciAobl9ibG9jaysrOyBuX2Jsb2NrIDwgbl9saW1pdDsgbl9ibG9jaysrKSB7Ci0JCQljYWNoZSA9
IGNrX3ByX2xvYWRfdWludCgmYml0bWFwLT5tYXBbbl9ibG9ja10pOwotCQkJaWYgKGNhY2hlICE9
IDApCi0JCQkJZ290byBub25femVybzsKLQkJfQotCi0JCWktPmNhY2hlID0gMDsKLQkJaS0+bl9i
bG9jayA9IG5fYmxvY2s7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLW5vbl96ZXJvOgotCSpiaXQg
PSBDS19CSVRNQVBfQkxPQ0sgKiBuX2Jsb2NrICsgY2tfY2NfY3R6KGNhY2hlKTsKLQlpLT5jYWNo
ZSA9IGNhY2hlICYgKGNhY2hlIC0gMSk7Ci0JaS0+bl9ibG9jayA9IG5fYmxvY2s7Ci0JcmV0dXJu
IHRydWU7Ci19Ci0KLSNlbmRpZiAvKiBDS19CSVRNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19icmxvY2suaCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfYnJsb2NrLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQxYjRlZDE2OTFmNDBlMWU1ZTkyOTBmYzg5NGFjYjg2MWEyYTc0
NzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19icmxvY2suaAorKysgL2Rldi9u
dWxsCkBAIC0xLDI3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEtMjAxNSBTYW15IEFs
IEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENLX0JSTE9DS19I
Ci0jZGVmaW5lIENLX0JSTE9DS19ICi0KLS8qCi0gKiBCaWcgcmVhZGVyIHNwaW5sb2NrcyBwcm92
aWRlIGNhY2hlLWxvY2FsIGNvbnRlbnRpb24tZnJlZSByZWFkCi0gKiBsb2NrIGFjcXVpc2l0aW9u
IGluIHRoZSBhYnNlbmNlIG9mIHdyaXRlcnMuIFRoaXMgY29tZXMgYXQgdGhlCi0gKiBjb3N0IG9m
IE8obikgd3JpdGUgbG9jayBhY3F1aXNpdGlvbi4gVGhleSB3ZXJlIGZpcnN0IGltcGxlbWVudGVk
Ci0gKiBpbiB0aGUgTGludXgga2VybmVsIGJ5IEluZ28gTW9sbmFyIGFuZCBEYXZpZCBTLiBNaWxs
ZXIgYXJvdW5kIHRoZQotICogeWVhciAyMDAwLgotICoKLSAqIFRoaXMgaW1wbGVtZW50YXRpb24g
aXMgdGhyZWFkLWFnbm9zdGljIHdoaWNoIGNvbWVzIGF0IHRoZSBjb3N0Ci0gKiBvZiBsYXJnZXIg
cmVhZGVyIG9iamVjdHMgZHVlIHRvIG5lY2Vzc2FyeSBsaW5rYWdlIG92ZXJoZWFkLiBJbgotICog
b3JkZXIgdG8gY3V0IGRvd24gb24gVExCIHByZXNzdXJlLCBpdCBpcyByZWNvbW1lbmRlZCB0byBh
bGxvY2F0ZQotICogdGhlc2Ugb2JqZWN0cyBvbiB0aGUgc2FtZSBwYWdlLgotICovCi0KLSNpbmNs
dWRlIDxja19wci5oPgotI2luY2x1ZGUgPGNrX3N0ZGJvb2wuaD4KLSNpbmNsdWRlIDxja19zdGRk
ZWYuaD4KLQotc3RydWN0IGNrX2JybG9ja19yZWFkZXIgewotCXVuc2lnbmVkIGludCBuX3JlYWRl
cnM7Ci0Jc3RydWN0IGNrX2JybG9ja19yZWFkZXIgKnByZXZpb3VzOwotCXN0cnVjdCBja19icmxv
Y2tfcmVhZGVyICpuZXh0OwotfTsKLXR5cGVkZWYgc3RydWN0IGNrX2JybG9ja19yZWFkZXIgY2tf
YnJsb2NrX3JlYWRlcl90OwotCi0jZGVmaW5lIENLX0JSTE9DS19SRUFERVJfSU5JVElBTElaRVIg
ezB9Ci0KLXN0cnVjdCBja19icmxvY2sgewotCXN0cnVjdCBja19icmxvY2tfcmVhZGVyICpyZWFk
ZXJzOwotCXVuc2lnbmVkIGludCB3cml0ZXI7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tfYnJsb2Nr
IGNrX2JybG9ja190OwotCi0jZGVmaW5lIENLX0JSTE9DS19JTklUSUFMSVpFUiB7TlVMTCwgZmFs
c2V9Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfYnJsb2NrX2luaXQoc3RydWN0IGNr
X2JybG9jayAqYnIpCi17Ci0KLQlici0+cmVhZGVycyA9IE5VTEw7Ci0JYnItPndyaXRlciA9IGZh
bHNlOwotCWNrX3ByX2JhcnJpZXIoKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0
aWMgdm9pZAotY2tfYnJsb2NrX3dyaXRlX2xvY2soc3RydWN0IGNrX2JybG9jayAqYnIpCi17Ci0J
c3RydWN0IGNrX2JybG9ja19yZWFkZXIgKmN1cnNvcjsKLQotCS8qCi0JICogQXMgdGhlIGZyZXF1
ZW5jeSBvZiB3cml0ZSBhY3F1aXNpdGlvbnMgc2hvdWxkIGJlIGxvdywKLQkgKiB0aGVyZSBpcyBu
byBwb2ludCB0byBtb3JlIGFkdmFuY2VkIGNvbnRlbnRpb24gYXZvaWRhbmNlLgotCSAqLwotCXdo
aWxlIChja19wcl9mYXNfdWludCgmYnItPndyaXRlciwgdHJ1ZSkgPT0gdHJ1ZSkKLQkJY2tfcHJf
c3RhbGwoKTsKLQotCWNrX3ByX2ZlbmNlX2F0b21pY19sb2FkKCk7Ci0KLQkvKiBUaGUgcmVhZGVy
IGxpc3QgaXMgcHJvdGVjdGVkIHVuZGVyIHRoZSB3cml0ZXIgYnIuICovCi0JZm9yIChjdXJzb3Ig
PSBici0+cmVhZGVyczsgY3Vyc29yICE9IE5VTEw7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkgewot
CQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZjdXJzb3ItPm5fcmVhZGVycykgIT0gMCkKLQkJCWNr
X3ByX3N0YWxsKCk7Ci0JfQotCi0JY2tfcHJfZmVuY2VfbG9jaygpOwotCXJldHVybjsKLX0KLQot
Q0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19icmxvY2tfd3JpdGVfdW5sb2NrKHN0cnVjdCBj
a19icmxvY2sgKmJyKQotewotCi0JY2tfcHJfZmVuY2VfdW5sb2NrKCk7Ci0JY2tfcHJfc3RvcmVf
dWludCgmYnItPndyaXRlciwgZmFsc2UpOwotCXJldHVybjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0
YXRpYyBib29sCi1ja19icmxvY2tfd3JpdGVfdHJ5bG9jayhzdHJ1Y3QgY2tfYnJsb2NrICpiciwg
dW5zaWduZWQgaW50IGZhY3RvcikKLXsKLQlzdHJ1Y3QgY2tfYnJsb2NrX3JlYWRlciAqY3Vyc29y
OwotCXVuc2lnbmVkIGludCBzdGVwcyA9IDA7Ci0KLQl3aGlsZSAoY2tfcHJfZmFzX3VpbnQoJmJy
LT53cml0ZXIsIHRydWUpID09IHRydWUpIHsKLQkJaWYgKCsrc3RlcHMgPj0gZmFjdG9yKQotCQkJ
cmV0dXJuIGZhbHNlOwotCi0JCWNrX3ByX3N0YWxsKCk7Ci0JfQotCi0JLyoKLQkgKiBXZSBkbyBu
b3QgcmVxdWlyZSBhIHN0cmljdCBmZW5jZSBoZXJlIGFzIGF0b21pYyBSTVcgb3BlcmF0aW9ucwot
CSAqIGFyZSBzZXJpYWxpemluZy4KLQkgKi8KLQlja19wcl9mZW5jZV9hdG9taWNfbG9hZCgpOwot
Ci0JZm9yIChjdXJzb3IgPSBici0+cmVhZGVyczsgY3Vyc29yICE9IE5VTEw7IGN1cnNvciA9IGN1
cnNvci0+bmV4dCkgewotCQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZjdXJzb3ItPm5fcmVhZGVy
cykgIT0gMCkgewotCQkJaWYgKCsrc3RlcHMgPj0gZmFjdG9yKSB7Ci0JCQkJY2tfYnJsb2NrX3dy
aXRlX3VubG9jayhicik7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCi0JCQlja19wcl9zdGFs
bCgpOwotCQl9Ci0JfQotCi0JY2tfcHJfZmVuY2VfbG9jaygpOwotCXJldHVybiB0cnVlOwotfQot
Ci1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX2JybG9ja19yZWFkX3JlZ2lzdGVyKHN0cnVj
dCBja19icmxvY2sgKmJyLCBzdHJ1Y3QgY2tfYnJsb2NrX3JlYWRlciAqcmVhZGVyKQotewotCi0J
cmVhZGVyLT5uX3JlYWRlcnMgPSAwOwotCXJlYWRlci0+cHJldmlvdXMgPSBOVUxMOwotCi0JLyog
SW1wbGljaXQgY29tcGlsZXIgYmFycmllci4gKi8KLQlja19icmxvY2tfd3JpdGVfbG9jayhicik7
Ci0KLQlyZWFkZXItPm5leHQgPSBja19wcl9sb2FkX3B0cigmYnItPnJlYWRlcnMpOwotCWlmIChy
ZWFkZXItPm5leHQgIT0gTlVMTCkKLQkJcmVhZGVyLT5uZXh0LT5wcmV2aW91cyA9IHJlYWRlcjsK
LQlja19wcl9zdG9yZV9wdHIoJmJyLT5yZWFkZXJzLCByZWFkZXIpOwotCi0JY2tfYnJsb2NrX3dy
aXRlX3VubG9jayhicik7Ci0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQK
LWNrX2JybG9ja19yZWFkX3VucmVnaXN0ZXIoc3RydWN0IGNrX2JybG9jayAqYnIsIHN0cnVjdCBj
a19icmxvY2tfcmVhZGVyICpyZWFkZXIpCi17Ci0KLQlja19icmxvY2tfd3JpdGVfbG9jayhicik7
Ci0KLQlpZiAocmVhZGVyLT5uZXh0ICE9IE5VTEwpCi0JCXJlYWRlci0+bmV4dC0+cHJldmlvdXMg
PSByZWFkZXItPnByZXZpb3VzOwotCi0JaWYgKHJlYWRlci0+cHJldmlvdXMgIT0gTlVMTCkKLQkJ
cmVhZGVyLT5wcmV2aW91cy0+bmV4dCA9IHJlYWRlci0+bmV4dDsKLQllbHNlCi0JCWJyLT5yZWFk
ZXJzID0gcmVhZGVyLT5uZXh0OwotCi0JY2tfYnJsb2NrX3dyaXRlX3VubG9jayhicik7Ci0JcmV0
dXJuOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX2JybG9ja19yZWFkX2xvY2so
c3RydWN0IGNrX2JybG9jayAqYnIsIHN0cnVjdCBja19icmxvY2tfcmVhZGVyICpyZWFkZXIpCi17
Ci0KLQlpZiAocmVhZGVyLT5uX3JlYWRlcnMgPj0gMSkgewotCQlja19wcl9zdG9yZV91aW50KCZy
ZWFkZXItPm5fcmVhZGVycywgcmVhZGVyLT5uX3JlYWRlcnMgKyAxKTsKLQkJcmV0dXJuOwotCX0K
LQotCWZvciAoOzspIHsKLQkJd2hpbGUgKGNrX3ByX2xvYWRfdWludCgmYnItPndyaXRlcikgPT0g
dHJ1ZSkKLQkJCWNrX3ByX3N0YWxsKCk7Ci0KLSNpZiBkZWZpbmVkKF9feDg2X18pIHx8IGRlZmlu
ZWQoX194ODZfNjRfXykKLQkJY2tfcHJfZmFzX3VpbnQoJnJlYWRlci0+bl9yZWFkZXJzLCAxKTsK
LQotCQkvKgotCQkgKiBTZXJpYWxpemUgcmVhZGVyIGNvdW50ZXIgdXBkYXRlIHdpdGggcmVzcGVj
dCB0byBsb2FkIG9mCi0JCSAqIHdyaXRlci4KLQkJICovCi0JCWNrX3ByX2ZlbmNlX2F0b21pY19s
b2FkKCk7Ci0jZWxzZQotCQlja19wcl9zdG9yZV91aW50KCZyZWFkZXItPm5fcmVhZGVycywgMSk7
Ci0KLQkJLyoKLQkJICogU2VyaWFsaXplIHJlYWRlciBjb3VudGVyIHVwZGF0ZSB3aXRoIHJlc3Bl
Y3QgdG8gbG9hZCBvZgotCQkgKiB3cml0ZXIuCi0JCSAqLwotCQlja19wcl9mZW5jZV9zdG9yZV9s
b2FkKCk7Ci0jZW5kaWYKLQotCQlpZiAoY2tfcHJfbG9hZF91aW50KCZici0+d3JpdGVyKSA9PSBm
YWxzZSkKLQkJCWJyZWFrOwotCi0JCWNrX3ByX3N0b3JlX3VpbnQoJnJlYWRlci0+bl9yZWFkZXJz
LCAwKTsKLQl9Ci0KLQlja19wcl9mZW5jZV9sb2NrKCk7Ci0JcmV0dXJuOwotfQotCi1DS19DQ19J
TkxJTkUgc3RhdGljIGJvb2wKLWNrX2JybG9ja19yZWFkX3RyeWxvY2soc3RydWN0IGNrX2JybG9j
ayAqYnIsCi0JCSAgICAgICBzdHJ1Y3QgY2tfYnJsb2NrX3JlYWRlciAqcmVhZGVyLAotCQkgICAg
ICAgdW5zaWduZWQgaW50IGZhY3RvcikKLXsKLQl1bnNpZ25lZCBpbnQgc3RlcHMgPSAwOwotCi0J
aWYgKHJlYWRlci0+bl9yZWFkZXJzID49IDEpIHsKLQkJY2tfcHJfc3RvcmVfdWludCgmcmVhZGVy
LT5uX3JlYWRlcnMsIHJlYWRlci0+bl9yZWFkZXJzICsgMSk7Ci0JCXJldHVybiB0cnVlOwotCX0K
LQotCWZvciAoOzspIHsKLQkJd2hpbGUgKGNrX3ByX2xvYWRfdWludCgmYnItPndyaXRlcikgPT0g
dHJ1ZSkgewotCQkJaWYgKCsrc3RlcHMgPj0gZmFjdG9yKQotCQkJCXJldHVybiBmYWxzZTsKLQot
CQkJY2tfcHJfc3RhbGwoKTsKLQkJfQotCi0jaWYgZGVmaW5lZChfX3g4Nl9fKSB8fCBkZWZpbmVk
KF9feDg2XzY0X18pCi0JCWNrX3ByX2Zhc191aW50KCZyZWFkZXItPm5fcmVhZGVycywgMSk7Ci0K
LQkJLyoKLQkJICogU2VyaWFsaXplIHJlYWRlciBjb3VudGVyIHVwZGF0ZSB3aXRoIHJlc3BlY3Qg
dG8gbG9hZCBvZgotCQkgKiB3cml0ZXIuCi0JCSAqLwotCQlja19wcl9mZW5jZV9hdG9taWNfbG9h
ZCgpOwotI2Vsc2UKLQkJY2tfcHJfc3RvcmVfdWludCgmcmVhZGVyLT5uX3JlYWRlcnMsIDEpOwot
Ci0JCS8qCi0JCSAqIFNlcmlhbGl6ZSByZWFkZXIgY291bnRlciB1cGRhdGUgd2l0aCByZXNwZWN0
IHRvIGxvYWQgb2YKLQkJICogd3JpdGVyLgotCQkgKi8KLQkJY2tfcHJfZmVuY2Vfc3RvcmVfbG9h
ZCgpOwotI2VuZGlmCi0KLQkJaWYgKGNrX3ByX2xvYWRfdWludCgmYnItPndyaXRlcikgPT0gZmFs
c2UpCi0JCQlicmVhazsKLQotCQlja19wcl9zdG9yZV91aW50KCZyZWFkZXItPm5fcmVhZGVycywg
MCk7Ci0KLQkJaWYgKCsrc3RlcHMgPj0gZmFjdG9yKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQot
CWNrX3ByX2ZlbmNlX2xvY2soKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0
YXRpYyB2b2lkCi1ja19icmxvY2tfcmVhZF91bmxvY2soc3RydWN0IGNrX2JybG9ja19yZWFkZXIg
KnJlYWRlcikKLXsKLQotCWNrX3ByX2ZlbmNlX3VubG9jaygpOwotCWNrX3ByX3N0b3JlX3VpbnQo
JnJlYWRlci0+bl9yZWFkZXJzLCByZWFkZXItPm5fcmVhZGVycyAtIDEpOwotCXJldHVybjsKLX0K
LQotI2VuZGlmIC8qIENLX0JSTE9DS19IICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX2J5dGVsb2NrLmggYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX2J5dGVsb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQ0MzczMTYyMzhiN2QyYzYyZWIwNzViYTgyNTNkNGU1Mzc5NWRjZDcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19ieXRlbG9jay5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMC0yMDE1IFNhbXkgQWwgQmFo
cmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ0tfQllURUxPQ0tfSAot
I2RlZmluZSBDS19CWVRFTE9DS19ICi0KLS8qCi0gKiBUaGUgaW1wbGVtZW50YXRpb25zIGhlcmUg
YXJlIGRlcml2ZWQgZnJvbSB0aGUgd29yayBkZXNjcmliZWQgaW46Ci0gKiAgIERpY2UsIEQuIGFu
ZCBTaGF2aXQsIE4uIDIwMTAuIFRMUlc6IHJldHVybiBvZiB0aGUgcmVhZC13cml0ZSBsb2NrLgot
ICogICBJbiBQcm9jZWVkaW5ncyBvZiB0aGUgMjJuZCBBQ00gU3ltcG9zaXVtIG9uIFBhcmFsbGVs
aXNtIGluIEFsZ29yaXRobXMKLSAqICAgYW5kIEFyY2hpdGVjdHVyZXMgKFRoaXJhLCBTYW50b3Jp
bmksIEdyZWVjZSwgSnVuZSAxMyAtIDE1LCAyMDEwKS4KLSAqICAgU1BBQSAnMTAuIEFDTSwgTmV3
IFlvcmssIE5ZLCAyODQtMjkzLgotICovCi0KLSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUg
PGNrX21kLmg+Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19zdGRib29sLmg+Ci0j
aW5jbHVkZSA8Y2tfc3RkZGVmLmg+Ci0jaW5jbHVkZSA8Y2tfbGltaXRzLmg+Ci0KLXN0cnVjdCBj
a19ieXRlbG9jayB7Ci0JdW5zaWduZWQgaW50IG93bmVyOwotCXVuc2lnbmVkIGludCBuX3JlYWRl
cnM7Ci0JdWludDhfdCByZWFkZXJzW0NLX01EX0NBQ0hFTElORSAtIHNpemVvZih1bnNpZ25lZCBp
bnQpICogMl0gQ0tfQ0NfQUxJR04oOCk7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tfYnl0ZWxvY2sg
Y2tfYnl0ZWxvY2tfdDsKLQotI2RlZmluZSBDS19CWVRFTE9DS19JTklUSUFMSVpFUiB7IDAsIDAs
IHswfSB9Ci0jZGVmaW5lIENLX0JZVEVMT0NLX1VOU0xPVFRFRCAgIFVJTlRfTUFYCi0KLUNLX0ND
X0lOTElORSBzdGF0aWMgdm9pZAotY2tfYnl0ZWxvY2tfaW5pdChzdHJ1Y3QgY2tfYnl0ZWxvY2sg
KmJ5dGVsb2NrKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JYnl0ZWxvY2stPm93bmVyID0gMDsK
LQlieXRlbG9jay0+bl9yZWFkZXJzID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIGJ5dGVs
b2NrLT5yZWFkZXJzOyBpKyspCi0JCWJ5dGVsb2NrLT5yZWFkZXJzW2ldID0gZmFsc2U7Ci0KLQlj
a19wcl9iYXJyaWVyKCk7Ci0JcmV0dXJuOwotfQotCi0jaWZkZWYgQ0tfRl9QUl9MT0FEXzY0Ci0j
ZGVmaW5lIENLX0JZVEVMT0NLX0xFTkdUSCBzaXplb2YodWludDY0X3QpCi0jZGVmaW5lIENLX0JZ
VEVMT0NLX0xPQUQgY2tfcHJfbG9hZF82NAotI2RlZmluZSBDS19CWVRFTE9DS19UWVBFIHVpbnQ2
NF90Ci0jZWxpZiBkZWZpbmVkKENLX0ZfUFJfTE9BRF8zMikKLSNkZWZpbmUgQ0tfQllURUxPQ0tf
TEVOR1RIIHNpemVvZih1aW50MzJfdCkKLSNkZWZpbmUgQ0tfQllURUxPQ0tfTE9BRCBja19wcl9s
b2FkXzMyCi0jZGVmaW5lIENLX0JZVEVMT0NLX1RZUEUgdWludDMyX3QKLSNlbHNlCi0jZXJyb3Ig
VW5zdXBwb3J0ZWQgcGxhdGZvcm0uCi0jZW5kaWYKLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lk
Ci1ja19ieXRlbG9ja193cml0ZV9sb2NrKHN0cnVjdCBja19ieXRlbG9jayAqYnl0ZWxvY2ssIHVu
c2lnbmVkIGludCBzbG90KQotewotCUNLX0JZVEVMT0NLX1RZUEUgKnJlYWRlcnMgPSAodm9pZCAq
KWJ5dGVsb2NrLT5yZWFkZXJzOwotCXVuc2lnbmVkIGludCBpOwotCi0JLyogQW5ub3VuY2UgdXBj
b21pbmcgd3JpdGVyIGFjcXVpc2l0aW9uLiAqLwotCXdoaWxlIChja19wcl9jYXNfdWludCgmYnl0
ZWxvY2stPm93bmVyLCAwLCBzbG90KSA9PSBmYWxzZSkKLQkJY2tfcHJfc3RhbGwoKTsKLQotCS8q
IElmIHdlIGFyZSBzbG90dGVkLCB3ZSBtaWdodCBiZSB1cGdyYWRpbmcgZnJvbSBhIHJlYWQgbG9j
ay4gKi8KLQlpZiAoc2xvdCA8PSBzaXplb2YgYnl0ZWxvY2stPnJlYWRlcnMpCi0JCWNrX3ByX3N0
b3JlXzgoJmJ5dGVsb2NrLT5yZWFkZXJzW3Nsb3QgLSAxXSwgZmFsc2UpOwotCi0JLyoKLQkgKiBX
YWl0IGZvciBzbG90dGVkIHJlYWRlcnMgdG8gZHJhaW4gb3V0LiBUaGlzIGFsc28gcHJvdmlkZXMg
dGhlCi0JICogbG9jayBhY3F1aXJlIHNlbWFudGljcy4KLQkgKi8KLQlja19wcl9mZW5jZV9hdG9t
aWNfbG9hZCgpOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihieXRlbG9jay0+cmVhZGVycykg
LyBDS19CWVRFTE9DS19MRU5HVEg7IGkrKykgewotCQl3aGlsZSAoQ0tfQllURUxPQ0tfTE9BRCgm
cmVhZGVyc1tpXSkgIT0gZmFsc2UpCi0JCQlja19wcl9zdGFsbCgpOwotCX0KLQotCS8qIFdhaXQg
Zm9yIHVuc2xvdHRlZCByZWFkZXJzIHRvIGRyYWluIG91dC4gKi8KLQl3aGlsZSAoY2tfcHJfbG9h
ZF91aW50KCZieXRlbG9jay0+bl9yZWFkZXJzKSAhPSAwKQotCQlja19wcl9zdGFsbCgpOwotCi0J
Y2tfcHJfZmVuY2VfbG9jaygpOwotCXJldHVybjsKLX0KLQotI3VuZGVmIENLX0JZVEVMT0NLX0xF
TkdUSAotI3VuZGVmIENLX0JZVEVMT0NLX0xPQUQKLSN1bmRlZiBDS19CWVRFTE9DS19UWVBFCi0K
LUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfYnl0ZWxvY2tfd3JpdGVfdW5sb2NrKHN0cnVj
dCBja19ieXRlbG9jayAqYnl0ZWxvY2spCi17Ci0KLQlja19wcl9mZW5jZV91bmxvY2soKTsKLQlj
a19wcl9zdG9yZV91aW50KCZieXRlbG9jay0+b3duZXIsIDApOwotCXJldHVybjsKLX0KLQotQ0tf
Q0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19ieXRlbG9ja19yZWFkX2xvY2soc3RydWN0IGNrX2J5
dGVsb2NrICpieXRlbG9jaywgdW5zaWduZWQgaW50IHNsb3QpCi17Ci0KLQlpZiAoY2tfcHJfbG9h
ZF91aW50KCZieXRlbG9jay0+b3duZXIpID09IHNsb3QpIHsKLQkJY2tfcHJfc3RvcmVfOCgmYnl0
ZWxvY2stPnJlYWRlcnNbc2xvdCAtIDFdLCB0cnVlKTsKLQkJY2tfcHJfZmVuY2Vfc3RyaWN0X3N0
b3JlKCk7Ci0JCWNrX3ByX3N0b3JlX3VpbnQoJmJ5dGVsb2NrLT5vd25lciwgMCk7Ci0JCXJldHVy
bjsKLQl9Ci0KLQkvKiBVbnNsb3R0ZWQgdGhyZWFkcyB3aWxsIGhhdmUgdG8gdXNlIHRoZSByZWFk
ZXJzIGNvdW50ZXIuICovCi0JaWYgKHNsb3QgPiBzaXplb2YgYnl0ZWxvY2stPnJlYWRlcnMpIHsK
LQkJZm9yICg7OykgewotCQkJY2tfcHJfaW5jX3VpbnQoJmJ5dGVsb2NrLT5uX3JlYWRlcnMpOwot
CQkJY2tfcHJfZmVuY2VfYXRvbWljX2xvYWQoKTsKLQkJCWlmIChja19wcl9sb2FkX3VpbnQoJmJ5
dGVsb2NrLT5vd25lcikgPT0gMCkKLQkJCQlicmVhazsKLQkJCWNrX3ByX2RlY191aW50KCZieXRl
bG9jay0+bl9yZWFkZXJzKTsKLQotCQkJd2hpbGUgKGNrX3ByX2xvYWRfdWludCgmYnl0ZWxvY2st
Pm93bmVyKSAhPSAwKQotCQkJCWNrX3ByX3N0YWxsKCk7Ci0JCX0KLQotCQlja19wcl9mZW5jZV9s
b2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzbG90IC09IDE7Ci0JZm9yICg7OykgewotI2lmZGVm
IENLX0ZfUFJfRkFBXzgKLQkJY2tfcHJfZmFzXzgoJmJ5dGVsb2NrLT5yZWFkZXJzW3Nsb3RdLCB0
cnVlKTsKLQkJY2tfcHJfZmVuY2VfYXRvbWljX2xvYWQoKTsKLSNlbHNlCi0JCWNrX3ByX3N0b3Jl
XzgoJmJ5dGVsb2NrLT5yZWFkZXJzW3Nsb3RdLCB0cnVlKTsKLQkJY2tfcHJfZmVuY2Vfc3RvcmVf
bG9hZCgpOwotI2VuZGlmCi0KLQkJLyoKLQkJICogSWYgdGhlcmUgaXMgbm8gb3duZXIgYXQgdGhp
cyBwb2ludCwgb3VyIHNsb3QgaGFzCi0JCSAqIGFscmVhZHkgYmVlbiBwdWJsaXNoZWQgYW5kIGl0
IGlzIGd1YXJhbnRlZWQgbm8KLQkJICogd3JpdGUgYWNxdWlzaXRpb24gd2lsbCBzdWNjZWVkIHVu
dGlsIHdlIGRyYWluIG91dC4KLQkJICovCi0JCWlmIChja19wcl9sb2FkX3VpbnQoJmJ5dGVsb2Nr
LT5vd25lcikgPT0gMCkKLQkJCWJyZWFrOwotCi0JCWNrX3ByX3N0b3JlXzgoJmJ5dGVsb2NrLT5y
ZWFkZXJzW3Nsb3RdLCBmYWxzZSk7Ci0JCXdoaWxlIChja19wcl9sb2FkX3VpbnQoJmJ5dGVsb2Nr
LT5vd25lcikgIT0gMCkKLQkJCWNrX3ByX3N0YWxsKCk7Ci0JfQotCi0JY2tfcHJfZmVuY2VfbG9j
aygpOwotCXJldHVybjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19ieXRlbG9j
a19yZWFkX3VubG9jayhzdHJ1Y3QgY2tfYnl0ZWxvY2sgKmJ5dGVsb2NrLCB1bnNpZ25lZCBpbnQg
c2xvdCkKLXsKLQotCWNrX3ByX2ZlbmNlX3VubG9jaygpOwotCi0JaWYgKHNsb3QgPiBzaXplb2Yg
Ynl0ZWxvY2stPnJlYWRlcnMpCi0JCWNrX3ByX2RlY191aW50KCZieXRlbG9jay0+bl9yZWFkZXJz
KTsKLQllbHNlCi0JCWNrX3ByX3N0b3JlXzgoJmJ5dGVsb2NrLT5yZWFkZXJzW3Nsb3QgLSAxXSwg
ZmFsc2UpOwotCi0JcmV0dXJuOwotfQotCi0jZW5kaWYgLyogQ0tfQllURUxPQ0tfSCAqLwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19jYy5o
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19jYy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTdkYzdiMTVmMjY3N2JjYzhmZDgzNWJiNWZmNWY3
NTExNDVkNDAwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfY2MuaAorKysgL2Rl
di9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDktMjAxNSBTYW15
IEFsIEJhaHJhLgotICogQ29weXJpZ2h0IDIwMTQgUGF1bCBLaHVvbmcuCi0gKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgQ0tfQ0NfSAotI2RlZmluZSBDS19DQ19ICi0KLSNpZiBk
ZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fU1VOUFJPX0MpCi0jaW5jbHVkZSAiZ2NjL2Nr
X2NjLmgiCi0jZW5kaWYKLQotI2lmbmRlZiBDS19DQ19SRVNUUklDVAotI2RlZmluZSBDS19DQ19S
RVNUUklDVAotI2VuZGlmCi0KLSNpZm5kZWYgQ0tfQ0NfSU5MSU5FCi0jZGVmaW5lIENLX0NDX0lO
TElORSBpbmxpbmUKLSNlbmRpZgotCi0jaWZuZGVmIENLX0NDX0ZPUkNFX0lOTElORQotI2RlZmlu
ZSBDS19DQ19GT1JDRV9JTkxJTkUgaW5saW5lCi0jZW5kaWYKLQotI2RlZmluZSBDS19DQ19ERUNP
TlNUX1BUUihYKSAoKHZvaWQgKikodWludHB0cl90KShYKSkKLQotLyoKLSAqIENvbnRhaW5lciBm
dW5jdGlvbi4KLSAqIFRoaXMgcmVsaWVzIG9uIChjb21waWxlcikgaW1wbGVtZW50YXRpb24tZGVm
aW5lZCBiZWhhdmlvci4KLSAqLwotI2RlZmluZSBDS19DQ19DT05UQUlORVIoRiwgVCwgTSwgTikJ
CQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyBUICoJCQkJCQkJXAotCU4oRiAqcCkJCQkJCQkJ
CQlcCi0JewkJCQkJCQkJCVwKLQkJRiAqbiA9IHA7CQkJCQkJCVwKLQkJcmV0dXJuIChUICopKHZv
aWQgKikoKChjaGFyICopbikgLSAoKHNpemVfdCkmKChUICopMCktPk0pKTsJXAotCX0KLQotI2Rl
ZmluZSBDS19DQ19QQUQoeCkgdW5pb24geyBjaGFyIHBhZFt4XTsgfQotCi0jaWZuZGVmIENLX0ND
X0FMSUFTRUQKLSNkZWZpbmUgQ0tfQ0NfQUxJQVNFRAotI2VuZGlmCi0KLSNpZm5kZWYgQ0tfQ0Nf
VU5VU0VECi0jZGVmaW5lIENLX0NDX1VOVVNFRAotI2VuZGlmCi0KLSNpZm5kZWYgQ0tfQ0NfVVNF
RAotI2RlZmluZSBDS19DQ19VU0VECi0jZW5kaWYKLQotI2lmbmRlZiBDS19DQ19JTU0KLSNkZWZp
bmUgQ0tfQ0NfSU1NCi0jZW5kaWYKLQotI2lmbmRlZiBDS19DQ19QQUNLRUQKLSNkZWZpbmUgQ0tf
Q0NfUEFDS0VECi0jZW5kaWYKLQotI2lmbmRlZiBDS19DQ19XRUFLUkVGCi0jZGVmaW5lIENLX0ND
X1dFQUtSRUYKLSNlbmRpZgotCi0jaWZuZGVmIENLX0NDX0FMSUdOCi0jZGVmaW5lIENLX0NDX0FM
SUdOKFgpCi0jZW5kaWYKLQotI2lmbmRlZiBDS19DQ19DQUNIRUxJTkUKLSNkZWZpbmUgQ0tfQ0Nf
Q0FDSEVMSU5FCi0jZW5kaWYKLQotI2lmbmRlZiBDS19DQ19MSUtFTFkKLSNkZWZpbmUgQ0tfQ0Nf
TElLRUxZKHgpIHgKLSNlbmRpZgotCi0jaWZuZGVmIENLX0NDX1VOTElLRUxZCi0jZGVmaW5lIENL
X0NDX1VOTElLRUxZKHgpIHgKLSNlbmRpZgotCi0jaWZuZGVmIENLX0NDX1RZUEVPRgotI2RlZmlu
ZSBDS19DQ19UWVBFT0YoWCwgREVGQVVMVCkgKERFRkFVTFQpCi0jZW5kaWYKLQotI2lmbmRlZiBD
S19GX0NDX0ZGUwotI2RlZmluZSBDS19GX0NDX0ZGUwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBpbnQK
LWNrX2NjX2Zmcyh1bnNpZ25lZCBpbnQgeCkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWlmICh4
ID09IDApCi0JCXJldHVybiAwOwotCi0JZm9yIChpID0gMTsgKHggJiAxKSA9PSAwOyBpKyssIHgg
Pj49IDEpOwotCi0JcmV0dXJuIGk7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBDS19GX0NDX0NMWgot
I2RlZmluZSBDS19GX0NDX0NMWgotI2luY2x1ZGUgPGNrX2xpbWl0cy5oPgotCi1DS19DQ19JTkxJ
TkUgc3RhdGljIGludAotY2tfY2NfY2x6KHVuc2lnbmVkIGludCB4KQotewotCXVuc2lnbmVkIGlu
dCBjb3VudCwgaTsKLQotCWZvciAoY291bnQgPSAwLCBpID0gc2l6ZW9mKHVuc2lnbmVkIGludCkg
KiBDSEFSX0JJVDsgaSA+IDA7IGNvdW50KyspIHsKLQkJdW5zaWduZWQgaW50IGJpdCA9IDFVIDw8
IC0taTsKLQotCQlpZiAoeCAmIGJpdCkKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBjb3VudDsK
LX0KLSNlbmRpZgotCi0jaWZuZGVmIENLX0ZfQ0NfQ1RaCi0jZGVmaW5lIENLX0ZfQ0NfQ1RaCi1D
S19DQ19JTkxJTkUgc3RhdGljIGludAotY2tfY2NfY3R6KHVuc2lnbmVkIGludCB4KQotewotCXVu
c2lnbmVkIGludCBpOwotCi0JaWYgKHggPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlmb3IgKGkgPSAw
OyAoeCAmIDEpID09IDA7IGkrKywgeCA+Pj0gMSk7Ci0KLQlyZXR1cm4gaTsKLX0KLSNlbmRpZgot
Ci0jaWZuZGVmIENLX0ZfQ0NfUE9QQ09VTlQKLSNkZWZpbmUgQ0tfRl9DQ19QT1BDT1VOVAotQ0tf
Q0NfSU5MSU5FIHN0YXRpYyBpbnQKLWNrX2NjX3BvcGNvdW50KHVuc2lnbmVkIGludCB4KQotewot
CXVuc2lnbmVkIGludCBhY2M7Ci0KLQlmb3IgKGFjYyA9IDA7IHggIT0gMDsgeCA+Pj0gMSkKLQkJ
YWNjICs9IHggJiAxOwotCi0JcmV0dXJuIGFjYzsKLX0KLSNlbmRpZgotCi0KLSNpZmRlZiBfX2Nw
bHVzcGx1cwotI2RlZmluZSBDS19DUFBfQ0FTVCh0eXBlLCBhcmcpIHN0YXRpY19jYXN0PHR5cGU+
KGFyZykKLSNlbHNlCi0jZGVmaW5lIENLX0NQUF9DQVNUKHR5cGUsIGFyZykgYXJnCi0jZW5kaWYK
LQotI2VuZGlmIC8qIENLX0NDX0ggKi8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfY29ob3J0LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9pbmNsdWRlL2NrX2NvaG9ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjMTNjZmEwZDQ5Y2I0MWYxN2I2NTFiZTA0YjAxOWFhZGI0YmUzZDc1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfY29ob3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEzLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIENv
cHlyaWdodCAyMDEzIEJyZW5kb24gU2NoZWlubWFuLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0g
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIENLX0NPSE9SVF9ICi0jZGVmaW5lIENLX0NPSE9SVF9ICi0KLS8qCi0gKiBU
aGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGxvY2sgY29ob3J0cyBhcyBkZXNjcmliZWQgaW46
Ci0gKiAgICAgRGljZSwgRC47IE1hcmF0aGUsIFYuOyBhbmQgU2hhdml0LCBOLiAyMDEyLgotICog
ICAgIExvY2sgQ29ob3J0aW5nOiBBIEdlbmVyYWwgVGVjaG5pcXVlIGZvciBEZXNpZ25pbmcgTlVN
QSBMb2NrcwotICovCi0KLSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNrX3ByLmg+Ci0j
aW5jbHVkZSA8Y2tfc3RkZGVmLmg+Ci0KLWVudW0gY2tfY29ob3J0X3N0YXRlIHsKLQlDS19DT0hP
UlRfU1RBVEVfR0xPQkFMID0gMCwKLQlDS19DT0hPUlRfU1RBVEVfTE9DQUwgPSAxCi19OwotCi0j
ZGVmaW5lIENLX0NPSE9SVF9ERUZBVUxUX0xPQ0FMX1BBU1NfTElNSVQgMTAKLQotI2RlZmluZSBD
S19DT0hPUlRfTkFNRShOKSBja19jb2hvcnRfIyNOCi0jZGVmaW5lIENLX0NPSE9SVF9JTlNUQU5D
RShOKSBzdHJ1Y3QgQ0tfQ09IT1JUX05BTUUoTikKLSNkZWZpbmUgQ0tfQ09IT1JUX0lOSVQoTiwg
QywgR0wsIExMLCBQKSBja19jb2hvcnRfIyNOIyNfaW5pdChDLCBHTCwgTEwsIFApCi0jZGVmaW5l
IENLX0NPSE9SVF9MT0NLKE4sIEMsIEdDLCBMQykgY2tfY29ob3J0XyMjTiMjX2xvY2soQywgR0Ms
IExDKQotI2RlZmluZSBDS19DT0hPUlRfVU5MT0NLKE4sIEMsIEdDLCBMQykgY2tfY29ob3J0XyMj
TiMjX3VubG9jayhDLCBHQywgTEMpCi0jZGVmaW5lIENLX0NPSE9SVF9UUllMT0NLKE4sIEMsIEdM
QywgTExDLCBMVUMpIGNrX2NvaG9ydF8jI04jI190cnlsb2NrKEMsIEdMQywgTExDLCBMVUMpCi0j
ZGVmaW5lIENLX0NPSE9SVF9MT0NLRUQoTiwgQywgR0MsIExDKSBja19jb2hvcnRfIyNOIyNfbG9j
a2VkKEMsIEdDLCBMQykKLQotI2RlZmluZSBDS19DT0hPUlRfUFJPVE9UWVBFKE4sIEdMLCBHVSwg
R0ksIExMLCBMVSwgTEkpCQkJCVwKLQlDS19DT0hPUlRfSU5TVEFOQ0UoTikgewkJCQkJCQlcCi0J
CXZvaWQgKmdsb2JhbF9sb2NrOwkJCQkJCVwKLQkJdm9pZCAqbG9jYWxfbG9jazsJCQkJCQlcCi0J
CWVudW0gY2tfY29ob3J0X3N0YXRlIHJlbGVhc2Vfc3RhdGU7CQkJCVwKLQkJdW5zaWduZWQgaW50
IHdhaXRpbmdfdGhyZWFkczsJCQkJCVwKLQkJdW5zaWduZWQgaW50IGFjcXVpcmVfY291bnQ7CQkJ
CQlcCi0JCXVuc2lnbmVkIGludCBsb2NhbF9wYXNzX2xpbWl0OwkJCQkJXAotCX07CQkJCQkJCQkJ
XAotCQkJCQkJCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIHZvaWQJCQkJCQlcCi0JY2tfY29o
b3J0XyMjTiMjX2luaXQoc3RydWN0IGNrX2NvaG9ydF8jI04gKmNvaG9ydCwJCQlcCi0JICAgIHZv
aWQgKmdsb2JhbF9sb2NrLCB2b2lkICpsb2NhbF9sb2NrLCB1bnNpZ25lZCBpbnQgcGFzc19saW1p
dCkJXAotCXsJCQkJCQkJCQlcCi0JCWNvaG9ydC0+Z2xvYmFsX2xvY2sgPSBnbG9iYWxfbG9jazsJ
CQkJXAotCQljb2hvcnQtPmxvY2FsX2xvY2sgPSBsb2NhbF9sb2NrOwkJCQlcCi0JCWNvaG9ydC0+
cmVsZWFzZV9zdGF0ZSA9IENLX0NPSE9SVF9TVEFURV9HTE9CQUw7CQkJXAotCQljb2hvcnQtPndh
aXRpbmdfdGhyZWFkcyA9IDA7CQkJCQlcCi0JCWNvaG9ydC0+YWNxdWlyZV9jb3VudCA9IDA7CQkJ
CQlcCi0JCWNvaG9ydC0+bG9jYWxfcGFzc19saW1pdCA9IHBhc3NfbGltaXQ7CQkJCVwKLQkJY2tf
cHJfYmFycmllcigpOwkJCQkJCVwKLQkJcmV0dXJuOwkJCQkJCQkJXAotCX0JCQkJCQkJCQlcCi0J
CQkJCQkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCQkJCVwKLQlja19jb2hvcnRf
IyNOIyNfbG9jayhDS19DT0hPUlRfSU5TVEFOQ0UoTikgKmNvaG9ydCwJCQlcCi0JICAgIHZvaWQg
Kmdsb2JhbF9jb250ZXh0LCB2b2lkICpsb2NhbF9jb250ZXh0KQkJCQlcCi0JewkJCQkJCQkJCVwK
LQkJCQkJCQkJCQlcCi0JCWNrX3ByX2luY191aW50KCZjb2hvcnQtPndhaXRpbmdfdGhyZWFkcyk7
CQkJXAotCQlMTChjb2hvcnQtPmxvY2FsX2xvY2ssIGxvY2FsX2NvbnRleHQpOwkJCQlcCi0JCWNr
X3ByX2RlY191aW50KCZjb2hvcnQtPndhaXRpbmdfdGhyZWFkcyk7CQkJXAotCQkJCQkJCQkJCVwK
LQkJaWYgKGNvaG9ydC0+cmVsZWFzZV9zdGF0ZSA9PSBDS19DT0hPUlRfU1RBVEVfR0xPQkFMKSB7
CQlcCi0JCQlHTChjb2hvcnQtPmdsb2JhbF9sb2NrLCBnbG9iYWxfY29udGV4dCk7CQlcCi0JCX0J
CQkJCQkJCVwKLQkJCQkJCQkJCQlcCi0JCSsrY29ob3J0LT5hY3F1aXJlX2NvdW50OwkJCQkJXAot
CQlyZXR1cm47CQkJCQkJCQlcCi0JfQkJCQkJCQkJCVwKLQkJCQkJCQkJCQlcCi0JQ0tfQ0NfSU5M
SU5FIHN0YXRpYyB2b2lkCQkJCQkJXAotCWNrX2NvaG9ydF8jI04jI191bmxvY2soQ0tfQ09IT1JU
X0lOU1RBTkNFKE4pICpjb2hvcnQsCQkJXAotCSAgICB2b2lkICpnbG9iYWxfY29udGV4dCwgdm9p
ZCAqbG9jYWxfY29udGV4dCkJCQkJXAotCXsJCQkJCQkJCQlcCi0JCQkJCQkJCQkJXAotCQlpZiAo
Y2tfcHJfbG9hZF91aW50KCZjb2hvcnQtPndhaXRpbmdfdGhyZWFkcykgPiAwCQlcCi0JCSAgICAm
JiBjb2hvcnQtPmFjcXVpcmVfY291bnQgPCBjb2hvcnQtPmxvY2FsX3Bhc3NfbGltaXQpIHsJXAot
CQkJY29ob3J0LT5yZWxlYXNlX3N0YXRlID0gQ0tfQ09IT1JUX1NUQVRFX0xPQ0FMOwkJXAotCQl9
IGVsc2UgewkJCQkJCQlcCi0JCQlHVShjb2hvcnQtPmdsb2JhbF9sb2NrLCBnbG9iYWxfY29udGV4
dCk7CQlcCi0JCQljb2hvcnQtPnJlbGVhc2Vfc3RhdGUgPSBDS19DT0hPUlRfU1RBVEVfR0xPQkFM
OwkJXAotCQkJY29ob3J0LT5hY3F1aXJlX2NvdW50ID0gMDsJCQkJXAotCQl9CQkJCQkJCQlcCi0J
CQkJCQkJCQkJXAotCQlja19wcl9mZW5jZV9yZWxlYXNlKCk7CQkJCQkJXAotCQlMVShjb2hvcnQt
PmxvY2FsX2xvY2ssIGxvY2FsX2NvbnRleHQpOwkJCQlcCi0JCQkJCQkJCQkJXAotCQlyZXR1cm47
CQkJCQkJCQlcCi0JfQkJCQkJCQkJCVwKLQkJCQkJCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRp
YyBib29sCQkJCQkJXAotCWNrX2NvaG9ydF8jI04jI19sb2NrZWQoQ0tfQ09IT1JUX0lOU1RBTkNF
KE4pICpjb2hvcnQsCQkJXAotCSAgICB2b2lkICpnbG9iYWxfY29udGV4dCwgdm9pZCAqbG9jYWxf
Y29udGV4dCkJCQkJXAotCXsJCQkJCQkJCQlcCi0JCXJldHVybiBHSShjb2hvcnQtPmxvY2FsX2xv
Y2ssIGxvY2FsX2NvbnRleHQpIHx8CQkJXAotCQkgICAgTEkoY29ob3J0LT5nbG9iYWxfbG9jaywg
Z2xvYmFsX2NvbnRleHQpOwkJCVwKLQl9Ci0KLSNkZWZpbmUgQ0tfQ09IT1JUX1RSWUxPQ0tfUFJP
VE9UWVBFKE4sIEdMLCBHVSwgR0ksIEdUTCwgTEwsIExVLCBMSSwgTFRMKQlcCi0JQ0tfQ09IT1JU
X1BST1RPVFlQRShOLCBHTCwgR1UsIEdJLCBMTCwgTFUsIExJKQkJCQlcCi0JQ0tfQ0NfSU5MSU5F
IHN0YXRpYyBib29sCQkJCQkJXAotCWNrX2NvaG9ydF8jI04jI190cnlsb2NrKENLX0NPSE9SVF9J
TlNUQU5DRShOKSAqY29ob3J0LAkJCVwKLQkgICAgdm9pZCAqZ2xvYmFsX2NvbnRleHQsIHZvaWQg
KmxvY2FsX2NvbnRleHQsCQkJCVwKLQkgICAgdm9pZCAqbG9jYWxfdW5sb2NrX2NvbnRleHQpCQkJ
CQkJXAotCXsJCQkJCQkJCQlcCi0JCQkJCQkJCQkJXAotCQlib29sIHRyeWxvY2tfcmVzdWx0OwkJ
CQkJCVwKLQkJCQkJCQkJCQlcCi0JCWNrX3ByX2luY191aW50KCZjb2hvcnQtPndhaXRpbmdfdGhy
ZWFkcyk7CQkJXAotCQl0cnlsb2NrX3Jlc3VsdCA9IExUTChjb2hvcnQtPmxvY2FsX2xvY2ssIGxv
Y2FsX2NvbnRleHQpOwlcCi0JCWNrX3ByX2RlY191aW50KCZjb2hvcnQtPndhaXRpbmdfdGhyZWFk
cyk7CQkJXAotCQlpZiAodHJ5bG9ja19yZXN1bHQgPT0gZmFsc2UpIHsJCQkJCVwKLQkJCXJldHVy
biBmYWxzZTsJCQkJCQlcCi0JCX0JCQkJCQkJCVwKLQkJCQkJCQkJCQlcCi0JCWlmIChjb2hvcnQt
PnJlbGVhc2Vfc3RhdGUgPT0gQ0tfQ09IT1JUX1NUQVRFX0dMT0JBTCAmJgkJXAotCQkgICAgR1RM
KGNvaG9ydC0+Z2xvYmFsX2xvY2ssIGdsb2JhbF9jb250ZXh0KSA9PSBmYWxzZSkgewlcCi0JCSAg
ICAJTFUoY29ob3J0LT5sb2NhbF9sb2NrLCBsb2NhbF91bmxvY2tfY29udGV4dCk7CQlcCi0JCQly
ZXR1cm4gZmFsc2U7CQkJCQkJXAotCQl9CQkJCQkJCQlcCi0JCQkJCQkJCQkJXAotCQkrK2NvaG9y
dC0+YWNxdWlyZV9jb3VudDsJCQkJCVwKLQkJcmV0dXJuIHRydWU7CQkJCQkJCVwKLQl9Ci0KLSNk
ZWZpbmUgQ0tfQ09IT1JUX0lOSVRJQUxJWkVSIHsJCQkJCQkJXAotCS5nbG9iYWxfbG9jayA9IE5V
TEwsCQkJCQkJCVwKLQkubG9jYWxfbG9jayA9IE5VTEwsCQkJCQkJCVwKLQkucmVsZWFzZV9zdGF0
ZSA9IENLX0NPSE9SVF9TVEFURV9HTE9CQUwsCQkJCVwKLQkud2FpdGluZ190aHJlYWRzID0gMCwJ
CQkJCQkJXAotCS5hY3F1aXJlX2NvdW50ID0gMCwJCQkJCQkJXAotCS5sb2NhbF9wYXNzX2xpbWl0
ID0gQ0tfQ09IT1JUX0RFRkFVTFRfTE9DQUxfUEFTU19MSU1JVAkJCVwKLX0KLQotI2VuZGlmIC8q
IENLX0NPSE9SVF9IICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9pbmNsdWRlL2NrX2VsaWRlLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9pbmNsdWRlL2NrX2VsaWRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiOTAw
NDExZjJjZThiYjY1ZjIxZjRiOGUwMmFiNGNhNDE4OTY2OGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Y2svaW5jbHVkZS9ja19lbGlkZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgMjAxMy0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgQ0tfRUxJREVfSAotI2RlZmluZSBDS19FTElERV9ICi0KLS8q
Ci0gKiBBcyBSVE0gaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIG9uIFRTTyB4ODYgYXJjaGl0
ZWN0dXJlcywKLSAqIGZlbmNlcyBoYXZlIGJlZW4gb21pdHRlZC4gVGhleSB3aWxsIGJlIG5lY2Vz
c2FyeSBmb3Igb3RoZXIKLSAqIG5vbi1UU08gYXJjaGl0ZWN0dXJlcyB3aXRoIFRNIHN1cHBvcnQu
Ci0gKi8KLQotI2luY2x1ZGUgPGNrX2NjLmg+Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRl
IDxja19zdHJpbmcuaD4KLQotLyoKLSAqIHNraXBfLXByZWZpeGVkIGNvdW50ZXJzIHJlcHJlc2Vu
dCB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlCi0gKiBlbGlzaW9ucyB0byBmb3JmZWl0LiByZXRy
eV8tcHJlZml4ZWQgY291bnRlcnMgcmVwcmVzZW50IHRoZQotICogbnVtYmVyIG9mIGVsaXNpb24g
cmV0cmllcyB0byBhdHRlbXB0IGJlZm9yZSBmb3JmZWl0LgotICoKLSAqICAgICBfYnVzeTogTG9j
ayB3YXMgYnVzeQotICogICAgX290aGVyOiBVbmtub3duIGV4cGxpY2l0IGFib3J0Ci0gKiBfY29u
ZmxpY3Q6IERhdGEgY29uZmxpY3QgaW4gZWxpc2lvbiBzZWN0aW9uCi0gKi8KLXN0cnVjdCBja19l
bGlkZV9jb25maWcgewotCXVuc2lnbmVkIHNob3J0IHNraXBfYnVzeTsKLQlzaG9ydCByZXRyeV9i
dXN5OwotCXVuc2lnbmVkIHNob3J0IHNraXBfb3RoZXI7Ci0Jc2hvcnQgcmV0cnlfb3RoZXI7Ci0J
dW5zaWduZWQgc2hvcnQgc2tpcF9jb25mbGljdDsKLQlzaG9ydCByZXRyeV9jb25mbGljdDsKLX07
Ci0KLSNkZWZpbmUgQ0tfRUxJREVfQ09ORklHX0RFRkFVTFRfSU5JVElBTElaRVIgewlcCi0JLnNr
aXBfYnVzeSA9IDUsCQkJCVwKLQkucmV0cnlfYnVzeSA9IDI1NiwJCQlcCi0JLnNraXBfb3RoZXIg
PSAzLAkJCVwKLQkucmV0cnlfb3RoZXIgPSAzLAkJCVwKLQkuc2tpcF9jb25mbGljdCA9IDIsCQkJ
XAotCS5yZXRyeV9jb25mbGljdCA9IDUJCQlcCi19Ci0KLXN0cnVjdCBja19lbGlkZV9zdGF0IHsK
LQl1bnNpZ25lZCBpbnQgbl9mYWxsYmFjazsKLQl1bnNpZ25lZCBpbnQgbl9lbGlkZTsKLQl1bnNp
Z25lZCBzaG9ydCBza2lwOwotfTsKLXR5cGVkZWYgc3RydWN0IGNrX2VsaWRlX3N0YXQgY2tfZWxp
ZGVfc3RhdF90OwotCi0jZGVmaW5lIENLX0VMSURFX1NUQVRfSU5JVElBTElaRVIgeyAwLCAwLCAw
IH0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19lbGlkZV9zdGF0X2luaXQoY2tfZWxp
ZGVfc3RhdF90ICpzdCkKLXsKLQotCW1lbXNldChzdCwgMCwgc2l6ZW9mKCpzdCkpOwotCXJldHVy
bjsKLX0KLQotI2lmZGVmIENLX0ZfUFJfUlRNCi1lbnVtIF9ja19lbGlkZV9oaW50IHsKLQlDS19F
TElERV9ISU5UX1JFVFJZID0gMCwKLQlDS19FTElERV9ISU5UX1NQSU4sCi0JQ0tfRUxJREVfSElO
VF9TVE9QCi19OwotCi0jZGVmaW5lIENLX0VMSURFX0xPQ0tfQlVTWSAweEZGCi0KLXN0YXRpYyBl
bnVtIF9ja19lbGlkZV9oaW50Ci1fY2tfZWxpZGVfZmFsbGJhY2soaW50ICpyZXRyeSwKLSAgICBz
dHJ1Y3QgY2tfZWxpZGVfc3RhdCAqc3QsCi0gICAgc3RydWN0IGNrX2VsaWRlX2NvbmZpZyAqYywK
LSAgICB1bnNpZ25lZCBpbnQgc3RhdHVzKQotewotCi0Jc3QtPm5fZmFsbGJhY2srKzsKLQlpZiAo
KnJldHJ5ID4gMCkKLQkJcmV0dXJuIENLX0VMSURFX0hJTlRfUkVUUlk7Ci0KLQlpZiAoc3QtPnNr
aXAgIT0gMCkKLQkJcmV0dXJuIENLX0VMSURFX0hJTlRfU1RPUDsKLQotCWlmIChzdGF0dXMgJiBD
S19QUl9SVE1fRVhQTElDSVQpIHsKLQkJaWYgKENLX1BSX1JUTV9DT0RFKHN0YXR1cykgPT0gQ0tf
RUxJREVfTE9DS19CVVNZKSB7Ci0JCQlzdC0+c2tpcCA9IGMtPnNraXBfYnVzeTsKLQkJCSpyZXRy
eSA9IGMtPnJldHJ5X2J1c3k7Ci0JCQlyZXR1cm4gQ0tfRUxJREVfSElOVF9TUElOOwotCQl9Ci0K
LQkJc3QtPnNraXAgPSBjLT5za2lwX290aGVyOwotCQlyZXR1cm4gQ0tfRUxJREVfSElOVF9TVE9Q
OwotCX0KLQotCWlmICgoc3RhdHVzICYgQ0tfUFJfUlRNX1JFVFJZKSAmJgotCSAgICAoc3RhdHVz
ICYgQ0tfUFJfUlRNX0NPTkZMSUNUKSkgewotCQlzdC0+c2tpcCA9IGMtPnNraXBfY29uZmxpY3Q7
Ci0JCSpyZXRyeSA9IGMtPnJldHJ5X2NvbmZsaWN0OwotCQlyZXR1cm4gQ0tfRUxJREVfSElOVF9S
RVRSWTsKLQl9Ci0KLQkvKgotCSAqIENhcGFjaXR5LCBkZWJ1ZyBhbmQgbmVzdGluZyBhYm9ydGlv
bnMgYXJlIGxpa2VseSB0byBiZQotCSAqIGludmFyaWFudCBjb25kaXRpb25zIGZvciB0aGUgYWNx
dWlzaXRpb24sIGV4ZWN1dGUgcmVndWxhcgotCSAqIHBhdGggaW5zdGVhZC4gSWYgcmV0cnkgYml0
IGlzIG5vdCBzZXQsIHRoZW4gdGFrZSB0aGUgaGludC4KLQkgKi8KLQlzdC0+c2tpcCA9IFVTSFJU
X01BWDsKLQlyZXR1cm4gQ0tfRUxJREVfSElOVF9TVE9QOwotfQotCi0vKgotICogRGVmaW5lcyBh
biBlbGlzaW9uIGltcGxlbWVudGF0aW9uIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHZhcmlh
YmxlczoKLSAqICAgICBOIC0gTmFtZXNwYWNlIG9mIGVsaXNpb24gaW1wbGVtZW50YXRpb24uCi0g
KiAgICAgVCAtIFR5cGVuYW1lIG9mIG11dGV4LgotICogICBMX1AgLSBMb2NrIHByZWRpY2F0ZSwg
cmV0dXJucyBmYWxzZSBpZiByZXNvdXJjZSBpcyBhdmFpbGFibGUuCi0gKiAgICAgTCAtIEZ1bmN0
aW9uIHRvIGNhbGwgaWYgcmVzb3VyY2UgaXMgdW5hdmFpbGFibGUgb2YgdHJhbnNhY3Rpb24gYWJv
cnRzLgotICogICBVX1AgLSBVbmxvY2sgcHJlZGljYXRlLCByZXR1cm5zIGZhbHNlIGlmIGVsaXNp
b24gZmFpbGVkLgotICogICAgIFUgLSBGdW5jdGlvbiB0byBjYWxsIGlmIHRyYW5zYWN0aW9uIGZh
aWxlZC4KLSAqLwotI2RlZmluZSBDS19FTElERV9QUk9UT1RZUEUoTiwgVCwgTF9QLCBMLCBVX1As
IFUpCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJCQkJCVwKLQlja19lbGlkZV8j
I04jI19sb2NrX2FkYXB0aXZlKFQgKmxvY2ssCQkJCQkJXAotCSAgICBzdHJ1Y3QgY2tfZWxpZGVf
c3RhdCAqc3QsCQkJCQkJCVwKLQkgICAgc3RydWN0IGNrX2VsaWRlX2NvbmZpZyAqYykJCQkJCQkJ
XAotCXsJCQkJCQkJCQkJXAotCQllbnVtIF9ja19lbGlkZV9oaW50IGhpbnQ7CQkJCQkJXAotCQlp
bnQgcmV0cnk7CQkJCQkJCQlcCi0JCQkJCQkJCQkJCVwKLQkJaWYgKENLX0NDX1VOTElLRUxZKHN0
LT5za2lwICE9IDApKSB7CQkJCQlcCi0JCQlzdC0+c2tpcC0tOwkJCQkJCQlcCi0JCQlnb3RvIGFj
cXVpcmU7CQkJCQkJCVwKLQkJfQkJCQkJCQkJCVwKLQkJCQkJCQkJCQkJXAotCQlyZXRyeSA9IGMt
PnJldHJ5X2NvbmZsaWN0OwkJCQkJCVwKLQkJZG8gewkJCQkJCQkJCVwKLQkJCXVuc2lnbmVkIGlu
dCBzdGF0dXMgPSBja19wcl9ydG1fYmVnaW4oKTsJCQlcCi0JCQlpZiAoc3RhdHVzID09IENLX1BS
X1JUTV9TVEFSVEVEKSB7CQkJCVwKLQkJCQlpZiAoTF9QKGxvY2spID09IHRydWUpCQkJCQlcCi0J
CQkJCWNrX3ByX3J0bV9hYm9ydChDS19FTElERV9MT0NLX0JVU1kpOwkJXAotCQkJCQkJCQkJCQlc
Ci0JCQkJcmV0dXJuOwkJCQkJCQlcCi0JCQl9CQkJCQkJCQlcCi0JCQkJCQkJCQkJCVwKLQkJCWhp
bnQgPSBfY2tfZWxpZGVfZmFsbGJhY2soJnJldHJ5LCBzdCwgYywgc3RhdHVzKTsJCVwKLQkJCWlm
IChoaW50ID09IENLX0VMSURFX0hJTlRfUkVUUlkpCQkJCVwKLQkJCQljb250aW51ZTsJCQkJCQlc
Ci0JCQkJCQkJCQkJCVwKLQkJCWlmIChoaW50ID09IENLX0VMSURFX0hJTlRfU1BJTikgewkJCQlc
Ci0JCQkJd2hpbGUgKC0tcmV0cnkgIT0gMCkgewkJCQkJXAotCQkJCQlpZiAoTF9QKGxvY2spID09
IGZhbHNlKQkJCQlcCi0JCQkJCQlicmVhazsJCQkJCVwKLQkJCQkJCQkJCQkJXAotCQkJCQlja19w
cl9zdGFsbCgpOwkJCQkJXAotCQkJCX0JCQkJCQkJXAotCQkJCQkJCQkJCQlcCi0JCQkJY29udGlu
dWU7CQkJCQkJXAotCQkJfQkJCQkJCQkJXAotCQkJCQkJCQkJCQlcCi0JCQlpZiAoaGludCA9PSBD
S19FTElERV9ISU5UX1NUT1ApCQkJCQlcCi0JCQkJYnJlYWs7CQkJCQkJCVwKLQkJfSB3aGlsZSAo
Q0tfQ0NfTElLRUxZKC0tcmV0cnkgPiAwKSk7CQkJCQlcCi0JCQkJCQkJCQkJCVwKLQlhY3F1aXJl
OgkJCQkJCQkJCVwKLQkJTChsb2NrKTsJCQkJCQkJCVwKLQkJcmV0dXJuOwkJCQkJCQkJCVwKLQl9
CQkJCQkJCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIHZvaWQJCQkJCQkJXAotCWNrX2VsaWRl
XyMjTiMjX3VubG9ja19hZGFwdGl2ZShzdHJ1Y3QgY2tfZWxpZGVfc3RhdCAqc3QsIFQgKmxvY2sp
CQlcCi0JewkJCQkJCQkJCQlcCi0JCQkJCQkJCQkJCVwKLQkJaWYgKFVfUChsb2NrKSA9PSBmYWxz
ZSkgewkJCQkJCVwKLQkJCWNrX3ByX3J0bV9lbmQoKTsJCQkJCQlcCi0JCQlzdC0+c2tpcCA9IDA7
CQkJCQkJCVwKLQkJCXN0LT5uX2VsaWRlKys7CQkJCQkJCVwKLQkJfSBlbHNlIHsJCQkJCQkJCVwK
LQkJCVUobG9jayk7CQkJCQkJCVwKLQkJfQkJCQkJCQkJCVwKLQkJCQkJCQkJCQkJXAotCQlyZXR1
cm47CQkJCQkJCQkJXAotCX0JCQkJCQkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJ
CQkJCQlcCi0JY2tfZWxpZGVfIyNOIyNfbG9jayhUICpsb2NrKQkJCQkJCQlcCi0JewkJCQkJCQkJ
CQlcCi0JCQkJCQkJCQkJCVwKLQkJaWYgKGNrX3ByX3J0bV9iZWdpbigpICE9IENLX1BSX1JUTV9T
VEFSVEVEKSB7CQkJCVwKLQkJCUwobG9jayk7CQkJCQkJCVwKLQkJCXJldHVybjsJCQkJCQkJCVwK
LQkJfQkJCQkJCQkJCVwKLQkJCQkJCQkJCQkJXAotCQlpZiAoTF9QKGxvY2spID09IHRydWUpCQkJ
CQkJCVwKLQkJCWNrX3ByX3J0bV9hYm9ydChDS19FTElERV9MT0NLX0JVU1kpOwkJCQlcCi0JCQkJ
CQkJCQkJCVwKLQkJcmV0dXJuOwkJCQkJCQkJCVwKLQl9CQkJCQkJCQkJCVwKLQlDS19DQ19JTkxJ
TkUgc3RhdGljIHZvaWQJCQkJCQkJXAotCWNrX2VsaWRlXyMjTiMjX3VubG9jayhUICpsb2NrKQkJ
CQkJCQlcCi0JewkJCQkJCQkJCQlcCi0JCQkJCQkJCQkJCVwKLQkJaWYgKFVfUChsb2NrKSA9PSBm
YWxzZSkgewkJCQkJCVwKLQkJCWNrX3ByX3J0bV9lbmQoKTsJCQkJCQlcCi0JCX0gZWxzZSB7CQkJ
CQkJCQlcCi0JCQlVKGxvY2spOwkJCQkJCQlcCi0JCX0JCQkJCQkJCQlcCi0JCQkJCQkJCQkJCVwK
LQkJcmV0dXJuOwkJCQkJCQkJCVwKLQl9Ci0KLSNkZWZpbmUgQ0tfRUxJREVfVFJZTE9DS19QUk9U
T1RZUEUoTiwgVCwgVExfUCwgVEwpCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAkJCQkJ
XAotCWNrX2VsaWRlXyMjTiMjX3RyeWxvY2soVCAqbG9jaykJCQkJCVwKLQl7CQkJCQkJCQlcCi0J
CQkJCQkJCQlcCi0JCWlmIChja19wcl9ydG1fYmVnaW4oKSAhPSBDS19QUl9SVE1fU1RBUlRFRCkJ
CVwKLQkJCXJldHVybiBmYWxzZTsJCQkJCVwKLQkJCQkJCQkJCVwKLQkJaWYgKFRMX1AobG9jaykg
PT0gdHJ1ZSkJCQkJCVwKLQkJCWNrX3ByX3J0bV9hYm9ydChDS19FTElERV9MT0NLX0JVU1kpOwkJ
XAotCQkJCQkJCQkJXAotCQlyZXR1cm4gdHJ1ZTsJCQkJCQlcCi0JfQotI2Vsc2UKLS8qCi0gKiBJ
ZiBSVE0gaXMgbm90IGVuYWJsZWQgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSAoQ0tfRl9QUl9SVE0p
IHRoZW4gdGhlc2UKLSAqIGVsaXNpb24gd3JhcHBlcnMgZGlyZWN0bHkgY2FsbHMgaW50byB0aGUg
dXNlci1zcGVjaWZpZWQgbG9jayBvcGVyYXRpb25zLgotICogVW5mb3J0dW5hdGVseSwgdGhlIHN0
b3JhZ2UgY29zdCBvZiBib3RoIGNrX2VsaWRlX2NvbmZpZyBhbmQgY2tfZWxpZGVfc3RhdAotICog
YXJlIHBhaWQgKHR5cGljYWxseSBhIHN0b3JhZ2UgY29zdCB0aGF0IGlzIGEgZnVuY3Rpb24gb2Yg
bG9jayBvYmplY3RzIGFuZAotICogdGhyZWFkIGNvdW50KS4KLSAqLwotI2RlZmluZSBDS19FTElE
RV9QUk9UT1RZUEUoTiwgVCwgTF9QLCBMLCBVX1AsIFUpCQkJXAotCUNLX0NDX0lOTElORSBzdGF0
aWMgdm9pZAkJCQkJXAotCWNrX2VsaWRlXyMjTiMjX2xvY2tfYWRhcHRpdmUoVCAqbG9jaywJCQkJ
XAotCSAgICBzdHJ1Y3QgY2tfZWxpZGVfc3RhdCAqc3QsCQkJCQlcCi0JICAgIHN0cnVjdCBja19l
bGlkZV9jb25maWcgKmMpCQkJCQlcCi0JewkJCQkJCQkJXAotCQkJCQkJCQkJXAotCQkodm9pZClz
dDsJCQkJCQlcCi0JCSh2b2lkKWM7CQkJCQkJXAotCQlMKGxvY2spOwkJCQkJCVwKLQkJcmV0dXJu
OwkJCQkJCQlcCi0JfQkJCQkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCQkJXAot
CWNrX2VsaWRlXyMjTiMjX3VubG9ja19hZGFwdGl2ZShzdHJ1Y3QgY2tfZWxpZGVfc3RhdCAqc3Qs
CVwKLQkgICAgVCAqbG9jaykJCQkJCQkJXAotCXsJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLQkJKHZv
aWQpc3Q7CQkJCQkJXAotCQlVKGxvY2spOwkJCQkJCVwKLQkJcmV0dXJuOwkJCQkJCQlcCi0JfQkJ
CQkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCQkJXAotCWNrX2VsaWRlXyMjTiMj
X2xvY2soVCAqbG9jaykJCQkJCVwKLQl7CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JCUwobG9jayk7
CQkJCQkJXAotCQlyZXR1cm47CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0
YXRpYyB2b2lkCQkJCQlcCi0JY2tfZWxpZGVfIyNOIyNfdW5sb2NrKFQgKmxvY2spCQkJCQlcCi0J
ewkJCQkJCQkJXAotCQkJCQkJCQkJXAotCQlVKGxvY2spOwkJCQkJCVwKLQkJcmV0dXJuOwkJCQkJ
CQlcCi0JfQotCi0jZGVmaW5lIENLX0VMSURFX1RSWUxPQ0tfUFJPVE9UWVBFKE4sIFQsIFRMX1As
IFRMKQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIGJvb2wJCQkJCVwKLQlja19lbGlkZV8jI04j
I190cnlsb2NrKFQgKmxvY2spCQkJCQlcCi0JewkJCQkJCQkJXAotCQkJCQkJCQkJXAotCQlyZXR1
cm4gVExfUChsb2NrKTsJCQkJCVwKLQl9Ci0jZW5kaWYgLyogIUNLX0ZfUFJfUlRNICovCi0KLS8q
Ci0gKiBCZXN0LWVmZm9ydCBlbGlzaW9uIGxvY2sgb3BlcmF0aW9ucy4gRmlyc3QgYXJndW1lbnQg
aXMgbmFtZSAoTikKLSAqIGFzc29jaWF0ZWQgd2l0aCBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIHNl
Y29uZCBpcyBhIHBvaW50ZXIgdG8KLSAqIHRoZSB0eXBlIHNwZWNpZmllZCBhYm92ZSAoVCkuCi0g
KgotICogVW5saWtlIHRoZSBhZGFwdGl2ZSB2YXJpYW50LCB0aGlzIGludGVyZmFjZSBkb2VzIG5v
dCBoYXZlIGFueSByZXRyeQotICogc2VtYW50aWNzLiBJbiBlbnZpcm9ubWVudHMgd2hlcmUgaml0
dGVyIGlzIGxvdywgdGhpcyBtYXkgeWllbGQgYSB0aWdodGVyCi0gKiBmYXN0IHBhdGguCi0gKi8K
LSNkZWZpbmUgQ0tfRUxJREVfTE9DSyhOQU1FLCBMT0NLKQlja19lbGlkZV8jI05BTUUjI19sb2Nr
KExPQ0spCi0jZGVmaW5lIENLX0VMSURFX1VOTE9DSyhOQU1FLCBMT0NLKQlja19lbGlkZV8jI05B
TUUjI191bmxvY2soTE9DSykKLSNkZWZpbmUgQ0tfRUxJREVfVFJZTE9DSyhOQU1FLCBMT0NLKQlj
a19lbGlkZV8jI05BTUUjI190cnlsb2NrKExPQ0spCi0KLS8qCi0gKiBBZGFwdGl2ZSBlbGlzaW9u
IGxvY2sgb3BlcmF0aW9ucy4gSW4gYWRkaXRpb24gdG8gbmFtZSBhbmQgcG9pbnRlcgotICogdG8g
dGhlIGxvY2ssIHlvdSBtdXN0IHBhc3MgaW4gYSBwb2ludGVyIHRvIGFuIGluaXRpYWxpemVkCi0g
KiBja19lbGlkZV9jb25maWcgc3RydWN0dXJlIGFsb25nIHdpdGggYSBwZXItdGhyZWFkIHN0YXQg
c3RydWN0dXJlLgotICovCi0jZGVmaW5lIENLX0VMSURFX0xPQ0tfQURBUFRJVkUoTkFNRSwgU1RB
VCwgQ09ORklHLCBMT0NLKSBcCi0JY2tfZWxpZGVfIyNOQU1FIyNfbG9ja19hZGFwdGl2ZShMT0NL
LCBTVEFULCBDT05GSUcpCi0KLSNkZWZpbmUgQ0tfRUxJREVfVU5MT0NLX0FEQVBUSVZFKE5BTUUs
IFNUQVQsIExPQ0spIFwKLQlja19lbGlkZV8jI05BTUUjI191bmxvY2tfYWRhcHRpdmUoU1RBVCwg
TE9DSykKLQotI2VuZGlmIC8qIENLX0VMSURFX0ggKi8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfZXBvY2guaCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfZXBvY2guaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOWUxNjZlNTc1M2E0Yjg5ZWEyY2E0Mzc3ZjY0NzgyYzMxYjc1YmJjYS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX2Vwb2NoLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwyODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBCYWhyYS4K
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
LSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
Ci0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDS19FUE9DSF9ICi0jZGVmaW5l
IENLX0VQT0NIX0gKLQotLyoKLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBoZXJlIGlzIGluc3BpcmVk
IGZyb20gdGhlIHdvcmsgZGVzY3JpYmVkIGluOgotICogICBGcmFzZXIsIEsuIDIwMDQuIFByYWN0
aWNhbCBMb2NrLUZyZWVkb20uIFBoRCBUaGVzaXMsIFVuaXZlcnNpdHkKLSAqICAgb2YgQ2FtYnJp
ZGdlIENvbXB1dGluZyBMYWJvcmF0b3J5LgotICovCi0KLSNpbmNsdWRlIDxja19jYy5oPgotI2lu
Y2x1ZGUgPGNrX21kLmg+Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19zdGFjay5o
PgotI2luY2x1ZGUgPGNrX3N0ZGJvb2wuaD4KLQotI2lmbmRlZiBDS19FUE9DSF9MRU5HVEgKLSNk
ZWZpbmUgQ0tfRVBPQ0hfTEVOR1RIIDQKLSNlbmRpZgotCi0vKgotICogVGhpcyBpcyB1c2VkIGZv
ciBzZW5zZSBkZXRlY3Rpb24gd2l0aC1yZXNwZWN0IHRvIGNvbmN1cnJlbnQKLSAqIGVwb2NoIHNl
Y3Rpb25zLgotICovCi0jZGVmaW5lIENLX0VQT0NIX1NFTlNFCQkoMikKLQotc3RydWN0IGNrX2Vw
b2NoX2VudHJ5OwotdHlwZWRlZiBzdHJ1Y3QgY2tfZXBvY2hfZW50cnkgY2tfZXBvY2hfZW50cnlf
dDsKLXR5cGVkZWYgdm9pZCBja19lcG9jaF9jYl90KGNrX2Vwb2NoX2VudHJ5X3QgKik7Ci0KLS8q
Ci0gKiBUaGlzIHNob3VsZCBiZSBlbWJlZGRlZCBpbnRvIG9iamVjdHMgeW91IHdpc2ggdG8gYmUg
dGhlIHRhcmdldCBvZgotICogY2tfZXBvY2hfY2JfdCBmdW5jdGlvbnMgKHdpdGggY2tfZXBvY2hf
Y2FsbCkuCi0gKi8KLXN0cnVjdCBja19lcG9jaF9lbnRyeSB7Ci0JY2tfZXBvY2hfY2JfdCAqZnVu
Y3Rpb247Ci0JY2tfc3RhY2tfZW50cnlfdCBzdGFja19lbnRyeTsKLX07Ci0KLS8qCi0gKiBBIHNl
Y3Rpb24gb2JqZWN0IG1heSBiZSBwYXNzZWQgdG8gZXZlcnkgYmVnaW4tZW5kIHBhaXIgdG8gYWxs
b3cgZm9yCi0gKiBmb3J3YXJkIHByb2dyZXNzIGd1YXJhbnRlZXMgd2l0aC1pbiBwcm9sb25nZWQg
YWN0aXZlIHNlY3Rpb25zLgotICovCi1zdHJ1Y3QgY2tfZXBvY2hfc2VjdGlvbiB7Ci0JdW5zaWdu
ZWQgaW50IGJ1Y2tldDsKLX07Ci10eXBlZGVmIHN0cnVjdCBja19lcG9jaF9zZWN0aW9uIGNrX2Vw
b2NoX3NlY3Rpb25fdDsKLQotLyoKLSAqIFJldHVybiBwb2ludGVyIHRvIGNrX2Vwb2NoX2VudHJ5
IGNvbnRhaW5lciBvYmplY3QuCi0gKi8KLSNkZWZpbmUgQ0tfRVBPQ0hfQ09OVEFJTkVSKFQsIE0s
IE4pIFwKLQlDS19DQ19DT05UQUlORVIoc3RydWN0IGNrX2Vwb2NoX2VudHJ5LCBULCBNLCBOKQot
Ci1zdHJ1Y3QgY2tfZXBvY2hfcmVmIHsKLQl1bnNpZ25lZCBpbnQgZXBvY2g7Ci0JdW5zaWduZWQg
aW50IGNvdW50OwotfTsKLQotc3RydWN0IGNrX2Vwb2NoX3JlY29yZCB7Ci0JY2tfc3RhY2tfZW50
cnlfdCByZWNvcmRfbmV4dDsKLQlzdHJ1Y3QgY2tfZXBvY2ggKmdsb2JhbDsKLQl1bnNpZ25lZCBp
bnQgc3RhdGU7Ci0JdW5zaWduZWQgaW50IGVwb2NoOwotCXVuc2lnbmVkIGludCBhY3RpdmU7Ci0J
c3RydWN0IHsKLQkJc3RydWN0IGNrX2Vwb2NoX3JlZiBidWNrZXRbQ0tfRVBPQ0hfU0VOU0VdOwot
CX0gbG9jYWwgQ0tfQ0NfQ0FDSEVMSU5FOwotCXVuc2lnbmVkIGludCBuX3BlbmRpbmc7Ci0JdW5z
aWduZWQgaW50IG5fcGVhazsKLQl1bnNpZ25lZCBpbnQgbl9kaXNwYXRjaDsKLQl2b2lkICpjdDsK
LQlja19zdGFja190IHBlbmRpbmdbQ0tfRVBPQ0hfTEVOR1RIXTsKLX0gQ0tfQ0NfQ0FDSEVMSU5F
OwotdHlwZWRlZiBzdHJ1Y3QgY2tfZXBvY2hfcmVjb3JkIGNrX2Vwb2NoX3JlY29yZF90OwotCi1z
dHJ1Y3QgY2tfZXBvY2ggewotCXVuc2lnbmVkIGludCBlcG9jaDsKLQl1bnNpZ25lZCBpbnQgbl9m
cmVlOwotCWNrX3N0YWNrX3QgcmVjb3JkczsKLX07Ci10eXBlZGVmIHN0cnVjdCBja19lcG9jaCBj
a19lcG9jaF90OwotCi0vKgotICogSW50ZXJuYWwgZnVuY3Rpb25zLgotICovCi12b2lkIF9ja19l
cG9jaF9hZGRyZWYoY2tfZXBvY2hfcmVjb3JkX3QgKiwgY2tfZXBvY2hfc2VjdGlvbl90ICopOwot
Ym9vbCBfY2tfZXBvY2hfZGVscmVmKGNrX2Vwb2NoX3JlY29yZF90ICosIGNrX2Vwb2NoX3NlY3Rp
b25fdCAqKTsKLQotQ0tfQ0NfRk9SQ0VfSU5MSU5FIHN0YXRpYyB2b2lkICoKLWNrX2Vwb2NoX3Jl
Y29yZF9jdChjb25zdCBja19lcG9jaF9yZWNvcmRfdCAqcmVjb3JkKQotewotCi0JcmV0dXJuIGNr
X3ByX2xvYWRfcHRyKCZyZWNvcmQtPmN0KTsKLX0KLQotLyoKLSAqIE1hcmtzIHRoZSBiZWdpbm5p
bmcgb2YgYW4gZXBvY2gtcHJvdGVjdGVkIHNlY3Rpb24uCi0gKi8KLUNLX0NDX0ZPUkNFX0lOTElO
RSBzdGF0aWMgdm9pZAotY2tfZXBvY2hfYmVnaW4oY2tfZXBvY2hfcmVjb3JkX3QgKnJlY29yZCwg
Y2tfZXBvY2hfc2VjdGlvbl90ICpzZWN0aW9uKQotewotCXN0cnVjdCBja19lcG9jaCAqZXBvY2gg
PSByZWNvcmQtPmdsb2JhbDsKLQotCS8qCi0JICogT25seSBvYnNlcnZlIG5ldyBlcG9jaCBpZiB0
aHJlYWQgaXMgbm90IHJlY3Vyc2luZyBpbnRvIGEgcmVhZAotCSAqIHNlY3Rpb24uCi0JICovCi0J
aWYgKHJlY29yZC0+YWN0aXZlID09IDApIHsKLQkJdW5zaWduZWQgaW50IGdfZXBvY2g7Ci0KLQkJ
LyoKLQkJICogSXQgaXMgcG9zc2libGUgZm9yIGxvYWRzIHRvIGJlIHJlLW9yZGVyZWQgYmVmb3Jl
IHRoZSBzdG9yZQotCQkgKiBpcyBjb21taXR0ZWQgaW50byB0aGUgY2FsbGVyJ3MgZXBvY2ggYW5k
IGFjdGl2ZSBmaWVsZHMuCi0JCSAqIEZvciB0aGlzIHJlYXNvbiwgc3RvcmUgdG8gbG9hZCBzZXJp
YWxpemF0aW9uIGlzIG5lY2Vzc2FyeS4KLQkJICovCi0jaWYgZGVmaW5lZChDS19NRF9UU08pCi0J
CWNrX3ByX2Zhc191aW50KCZyZWNvcmQtPmFjdGl2ZSwgMSk7Ci0JCWNrX3ByX2ZlbmNlX2F0b21p
Y19sb2FkKCk7Ci0jZWxzZQotCQlja19wcl9zdG9yZV91aW50KCZyZWNvcmQtPmFjdGl2ZSwgMSk7
Ci0JCWNrX3ByX2ZlbmNlX21lbW9yeSgpOwotI2VuZGlmCi0KLQkJLyoKLQkJICogVGhpcyBsb2Fk
IGlzIGFsbG93ZWQgdG8gYmUgcmUtb3JkZXJlZCBwcmlvciB0byBzZXR0aW5nCi0JCSAqIGFjdGl2
ZSBmbGFnIGR1ZSB0byBtb25vdG9uaWMgbmF0dXJlIG9mIHRoZSBnbG9iYWwgZXBvY2guCi0JCSAq
IEhvd2V2ZXIsIHN0YWxlIHZhbHVlcyBsZWFkIHRvIG1lYXN1cmFibGUgcGVyZm9ybWFuY2UKLQkJ
ICogZGVncmFkYXRpb24gaW4gc29tZSB0b3J0dXJlIHRlc3RzIHNvIHdlIGRpc2FsbG93IGVhcmx5
IGxvYWQKLQkJICogb2YgZ2xvYmFsIGVwb2NoLgotCQkgKi8KLQkJZ19lcG9jaCA9IGNrX3ByX2xv
YWRfdWludCgmZXBvY2gtPmVwb2NoKTsKLQkJY2tfcHJfc3RvcmVfdWludCgmcmVjb3JkLT5lcG9j
aCwgZ19lcG9jaCk7Ci0JfSBlbHNlIHsKLQkJY2tfcHJfc3RvcmVfdWludCgmcmVjb3JkLT5hY3Rp
dmUsIHJlY29yZC0+YWN0aXZlICsgMSk7Ci0JfQotCi0JaWYgKHNlY3Rpb24gIT0gTlVMTCkKLQkJ
X2NrX2Vwb2NoX2FkZHJlZihyZWNvcmQsIHNlY3Rpb24pOwotCi0JcmV0dXJuOwotfQotCi0vKgot
ICogTWFya3MgdGhlIGVuZCBvZiBhbiBlcG9jaC1wcm90ZWN0ZWQgc2VjdGlvbi4gUmV0dXJucyB0
cnVlIGlmIG5vIG1vcmUKLSAqIHNlY3Rpb25zIGV4aXN0IGZvciB0aGUgY2FsbGVyLgotICovCi1D
S19DQ19GT1JDRV9JTkxJTkUgc3RhdGljIGJvb2wKLWNrX2Vwb2NoX2VuZChja19lcG9jaF9yZWNv
cmRfdCAqcmVjb3JkLCBja19lcG9jaF9zZWN0aW9uX3QgKnNlY3Rpb24pCi17Ci0KLQlja19wcl9m
ZW5jZV9yZWxlYXNlKCk7Ci0JY2tfcHJfc3RvcmVfdWludCgmcmVjb3JkLT5hY3RpdmUsIHJlY29y
ZC0+YWN0aXZlIC0gMSk7Ci0KLQlpZiAoc2VjdGlvbiAhPSBOVUxMKQotCQlyZXR1cm4gX2NrX2Vw
b2NoX2RlbHJlZihyZWNvcmQsIHNlY3Rpb24pOwotCi0JcmV0dXJuIHJlY29yZC0+YWN0aXZlID09
IDA7Ci19Ci0KLS8qCi0gKiBEZWZlcnMgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZnVuY3Rpb24gcG9p
bnRlZCB0byBieSB0aGUgImNiIgotICogYXJndW1lbnQgdW50aWwgYW4gZXBvY2ggY291bnRlciBs
b29wLiBUaGlzIGFsbG93cyBmb3IgYQotICogbm9uLWJsb2NraW5nIGRlZmVycmFsLgotICoKLSAq
IFdlIGNhbiBnZXQgYXdheSB3aXRob3V0IGEgZmVuY2UgaGVyZSBkdWUgdG8gdGhlIG1vbm90b25p
YyBuYXR1cmUKLSAqIG9mIHRoZSBlcG9jaCBjb3VudGVyLiBXb3JzdCBjYXNlLCB0aGlzIHdpbGwg
cmVzdWx0IGluIHNvbWUgZGVsYXlzCi0gKiBiZWZvcmUgb2JqZWN0IGRlc3RydWN0aW9uLgotICov
Ci1DS19DQ19GT1JDRV9JTkxJTkUgc3RhdGljIHZvaWQKLWNrX2Vwb2NoX2NhbGwoY2tfZXBvY2hf
cmVjb3JkX3QgKnJlY29yZCwKLQkgICAgICBja19lcG9jaF9lbnRyeV90ICplbnRyeSwKLQkgICAg
ICBja19lcG9jaF9jYl90ICpmdW5jdGlvbikKLXsKLQlzdHJ1Y3QgY2tfZXBvY2ggKmVwb2NoID0g
cmVjb3JkLT5nbG9iYWw7Ci0JdW5zaWduZWQgaW50IGUgPSBja19wcl9sb2FkX3VpbnQoJmVwb2No
LT5lcG9jaCk7Ci0JdW5zaWduZWQgaW50IG9mZnNldCA9IGUgJiAoQ0tfRVBPQ0hfTEVOR1RIIC0g
MSk7Ci0KLQlyZWNvcmQtPm5fcGVuZGluZysrOwotCWVudHJ5LT5mdW5jdGlvbiA9IGZ1bmN0aW9u
OwotCWNrX3N0YWNrX3B1c2hfc3BuYygmcmVjb3JkLT5wZW5kaW5nW29mZnNldF0sICZlbnRyeS0+
c3RhY2tfZW50cnkpOwotCXJldHVybjsKLX0KLQotLyoKLSAqIFNhbWUgYXMgY2tfZXBvY2hfY2Fs
bCwgYnV0IGFsbG93cyBmb3IgcmVjb3JkcyB0byBiZSBzaGFyZWQgYW5kIGlzIHJlZW50cmFudC4K
LSAqLwotQ0tfQ0NfRk9SQ0VfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19lcG9jaF9jYWxsX3N0cmlj
dChja19lcG9jaF9yZWNvcmRfdCAqcmVjb3JkLAotCSAgICAgIGNrX2Vwb2NoX2VudHJ5X3QgKmVu
dHJ5LAotCSAgICAgIGNrX2Vwb2NoX2NiX3QgKmZ1bmN0aW9uKQotewotCXN0cnVjdCBja19lcG9j
aCAqZXBvY2ggPSByZWNvcmQtPmdsb2JhbDsKLQl1bnNpZ25lZCBpbnQgZSA9IGNrX3ByX2xvYWRf
dWludCgmZXBvY2gtPmVwb2NoKTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gZSAmIChDS19FUE9D
SF9MRU5HVEggLSAxKTsKLQotCWNrX3ByX2luY191aW50KCZyZWNvcmQtPm5fcGVuZGluZyk7Ci0J
ZW50cnktPmZ1bmN0aW9uID0gZnVuY3Rpb247Ci0KLQkvKiBTdG9yZSBmZW5jZSBpcyBpbXBsaWVk
IGJ5IHB1c2ggb3BlcmF0aW9uLiAqLwotCWNrX3N0YWNrX3B1c2hfdXBtYygmcmVjb3JkLT5wZW5k
aW5nW29mZnNldF0sICZlbnRyeS0+c3RhY2tfZW50cnkpOwotCXJldHVybjsKLX0KLQotLyoKLSAq
IFRoaXMgY2FsbGJhY2sgaXMgdXNlZCBmb3Igc3luY2hyb25pemVfd2FpdCB0byBhbGxvdyBmb3Ig
Y3VzdG9tIGJsb2NraW5nCi0gKiBiZWhhdmlvci4KLSAqLwotdHlwZWRlZiB2b2lkIGNrX2Vwb2No
X3dhaXRfY2JfdChja19lcG9jaF90ICosIGNrX2Vwb2NoX3JlY29yZF90ICosCi0gICAgdm9pZCAq
KTsKLQotLyoKLSAqIFJldHVybiBsYXRlc3QgZXBvY2ggdmFsdWUuIFRoaXMgb3BlcmF0aW9uIHBy
b3ZpZGVzIGxvYWQgb3JkZXJpbmcuCi0gKi8KLUNLX0NDX0ZPUkNFX0lOTElORSBzdGF0aWMgdW5z
aWduZWQgaW50Ci1ja19lcG9jaF92YWx1ZShjb25zdCBja19lcG9jaF90ICplcCkKLXsKLQotCWNr
X3ByX2ZlbmNlX2xvYWQoKTsKLQlyZXR1cm4gY2tfcHJfbG9hZF91aW50KCZlcC0+ZXBvY2gpOwot
fQotCi12b2lkIGNrX2Vwb2NoX2luaXQoY2tfZXBvY2hfdCAqKTsKLQotLyoKLSAqIEF0dGVtcHRz
IHRvIHJlY3ljbGUgYW4gdW51c2VkIGVwb2NoIHJlY29yZC4gSWYgb25lIGlzIHN1Y2Nlc3NmdWxs
eQotICogYWxsb2NhdGVkLCB0aGUgcmVjb3JkIGNvbnRleHQgcG9pbnRlciBpcyBhbHNvIHVwZGF0
ZWQuCi0gKi8KLWNrX2Vwb2NoX3JlY29yZF90ICpja19lcG9jaF9yZWN5Y2xlKGNrX2Vwb2NoX3Qg
Kiwgdm9pZCAqKTsKLQotLyoKLSAqIFJlZ2lzdGVycyBhbiBlcG9jaCByZWNvcmQuIEFuIG9wdGlv
bmFsIGNvbnRleHQgcG9pbnRlciBtYXkgYmUgcGFzc2VkIHRoYXQKLSAqIGlzIHJldHJpZXZhYmxl
IHdpdGggY2tfZXBvY2hfcmVjb3JkX2N0LgotICovCi12b2lkIGNrX2Vwb2NoX3JlZ2lzdGVyKGNr
X2Vwb2NoX3QgKiwgY2tfZXBvY2hfcmVjb3JkX3QgKiwgdm9pZCAqKTsKLQotLyoKLSAqIE1hcmtz
IGEgcmVjb3JkIGFzIGF2YWlsYWJsZSBmb3IgcmUtdXNlIGJ5IGEgc3Vic2VxdWVudCByZWN5Y2xl
IG9wZXJhdGlvbi4KLSAqIE5vdGUgdGhhdCB0aGUgcmVjb3JkIGNhbm5vdCBiZSBwaHlzaWNhbGx5
IGRlc3Ryb3llZC4KLSAqLwotdm9pZCBja19lcG9jaF91bnJlZ2lzdGVyKGNrX2Vwb2NoX3JlY29y
ZF90ICopOwotCi1ib29sIGNrX2Vwb2NoX3BvbGwoY2tfZXBvY2hfcmVjb3JkX3QgKik7Ci12b2lk
IGNrX2Vwb2NoX3N5bmNocm9uaXplKGNrX2Vwb2NoX3JlY29yZF90ICopOwotdm9pZCBja19lcG9j
aF9zeW5jaHJvbml6ZV93YWl0KGNrX2Vwb2NoX3QgKiwgY2tfZXBvY2hfd2FpdF9jYl90ICosIHZv
aWQgKik7Ci12b2lkIGNrX2Vwb2NoX2JhcnJpZXIoY2tfZXBvY2hfcmVjb3JkX3QgKik7Ci12b2lk
IGNrX2Vwb2NoX2JhcnJpZXJfd2FpdChja19lcG9jaF9yZWNvcmRfdCAqLCBja19lcG9jaF93YWl0
X2NiX3QgKiwgdm9pZCAqKTsKLQotLyoKLSAqIFJlY2xhaW0gZW50cmllcyBhc3NvY2lhdGVkIHdp
dGggYSByZWNvcmQuIFRoaXMgaXMgc2FmZSB0byBjYWxsIG9ubHkgb24KLSAqIHRoZSBjYWxsZXIn
cyByZWNvcmQgb3IgcmVjb3JkcyB0aGF0IGFyZSB1c2luZyBjYWxsX3N0cmljdC4KLSAqLwotdm9p
ZCBja19lcG9jaF9yZWNsYWltKGNrX2Vwb2NoX3JlY29yZF90ICopOwotCi0jZW5kaWYgLyogQ0tf
RVBPQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2sv
aW5jbHVkZS9ja19maWZvLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNs
dWRlL2NrX2ZpZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ1MDA3MDhjNDQ1
YmUzODgzMjRhZDc5YjNiNzZiYzc4OTAxNDg1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNs
dWRlL2NrX2ZpZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IDIwMTAtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQ29weXJpZ2h0IDIwMTEgRGF2aWQg
Sm9zZXBoLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENLX0ZJRk9fSAot
I2RlZmluZSBDS19GSUZPX0gKLQotI2luY2x1ZGUgPGNrX2NjLmg+Ci0jaW5jbHVkZSA8Y2tfbWQu
aD4KLSNpbmNsdWRlIDxja19wci5oPgotI2luY2x1ZGUgPGNrX3NwaW5sb2NrLmg+Ci0jaW5jbHVk
ZSA8Y2tfc3RkZGVmLmg+Ci0KLSNpZm5kZWYgQ0tfRl9GSUZPX1NQU0MKLSNkZWZpbmUgQ0tfRl9G
SUZPX1NQU0MKLXN0cnVjdCBja19maWZvX3Nwc2NfZW50cnkgewotCXZvaWQgKnZhbHVlOwotCXN0
cnVjdCBja19maWZvX3Nwc2NfZW50cnkgKm5leHQ7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tfZmlm
b19zcHNjX2VudHJ5IGNrX2ZpZm9fc3BzY19lbnRyeV90OwotCi1zdHJ1Y3QgY2tfZmlmb19zcHNj
IHsKLQlja19zcGlubG9ja190IG1faGVhZDsKLQlzdHJ1Y3QgY2tfZmlmb19zcHNjX2VudHJ5ICpo
ZWFkOwotCWNoYXIgcGFkW0NLX01EX0NBQ0hFTElORSAtIHNpemVvZihzdHJ1Y3QgY2tfZmlmb19z
cHNjX2VudHJ5ICopIC0gc2l6ZW9mKGNrX3NwaW5sb2NrX3QpXTsKLQlja19zcGlubG9ja190IG1f
dGFpbDsKLQlzdHJ1Y3QgY2tfZmlmb19zcHNjX2VudHJ5ICp0YWlsOwotCXN0cnVjdCBja19maWZv
X3Nwc2NfZW50cnkgKmhlYWRfc25hcHNob3Q7Ci0Jc3RydWN0IGNrX2ZpZm9fc3BzY19lbnRyeSAq
Z2FyYmFnZTsKLX07Ci10eXBlZGVmIHN0cnVjdCBja19maWZvX3Nwc2MgY2tfZmlmb19zcHNjX3Q7
Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfZmlmb19zcHNjX2VucXVldWVfdHJ5bG9j
ayhzdHJ1Y3QgY2tfZmlmb19zcHNjICpmaWZvKQotewotCi0JcmV0dXJuIGNrX3NwaW5sb2NrX3Ry
eWxvY2soJmZpZm8tPm1fdGFpbCk7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tf
Zmlmb19zcHNjX2VucXVldWVfbG9jayhzdHJ1Y3QgY2tfZmlmb19zcHNjICpmaWZvKQotewotCi0J
Y2tfc3BpbmxvY2tfbG9jaygmZmlmby0+bV90YWlsKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lO
TElORSBzdGF0aWMgdm9pZAotY2tfZmlmb19zcHNjX2VucXVldWVfdW5sb2NrKHN0cnVjdCBja19m
aWZvX3Nwc2MgKmZpZm8pCi17Ci0KLQlja19zcGlubG9ja191bmxvY2soJmZpZm8tPm1fdGFpbCk7
Ci0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wKLWNrX2ZpZm9fc3BzY19k
ZXF1ZXVlX3RyeWxvY2soc3RydWN0IGNrX2ZpZm9fc3BzYyAqZmlmbykKLXsKLQotCXJldHVybiBj
a19zcGlubG9ja190cnlsb2NrKCZmaWZvLT5tX2hlYWQpOwotfQotCi1DS19DQ19JTkxJTkUgc3Rh
dGljIHZvaWQKLWNrX2ZpZm9fc3BzY19kZXF1ZXVlX2xvY2soc3RydWN0IGNrX2ZpZm9fc3BzYyAq
ZmlmbykKLXsKLQotCWNrX3NwaW5sb2NrX2xvY2soJmZpZm8tPm1faGVhZCk7Ci0JcmV0dXJuOwot
fQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX2ZpZm9fc3BzY19kZXF1ZXVlX3VubG9j
ayhzdHJ1Y3QgY2tfZmlmb19zcHNjICpmaWZvKQotewotCi0JY2tfc3BpbmxvY2tfdW5sb2NrKCZm
aWZvLT5tX2hlYWQpOwotCXJldHVybjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1j
a19maWZvX3Nwc2NfaW5pdChzdHJ1Y3QgY2tfZmlmb19zcHNjICpmaWZvLCBzdHJ1Y3QgY2tfZmlm
b19zcHNjX2VudHJ5ICpzdHViKQotewotCi0JY2tfc3BpbmxvY2tfaW5pdCgmZmlmby0+bV9oZWFk
KTsKLQlja19zcGlubG9ja19pbml0KCZmaWZvLT5tX3RhaWwpOwotCi0Jc3R1Yi0+bmV4dCA9IE5V
TEw7Ci0JZmlmby0+aGVhZCA9IGZpZm8tPnRhaWwgPSBmaWZvLT5oZWFkX3NuYXBzaG90ID0gZmlm
by0+Z2FyYmFnZSA9IHN0dWI7Ci0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZv
aWQKLWNrX2ZpZm9fc3BzY19kZWluaXQoc3RydWN0IGNrX2ZpZm9fc3BzYyAqZmlmbywgc3RydWN0
IGNrX2ZpZm9fc3BzY19lbnRyeSAqKmdhcmJhZ2UpCi17Ci0KLQkqZ2FyYmFnZSA9IGZpZm8tPmhl
YWQ7Ci0JZmlmby0+aGVhZCA9IGZpZm8tPnRhaWwgPSBOVUxMOwotCXJldHVybjsKLX0KLQotQ0tf
Q0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19maWZvX3Nwc2NfZW5xdWV1ZShzdHJ1Y3QgY2tfZmlm
b19zcHNjICpmaWZvLAotCQkgICAgIHN0cnVjdCBja19maWZvX3Nwc2NfZW50cnkgKmVudHJ5LAot
CQkgICAgIHZvaWQgKnZhbHVlKQotewotCi0JZW50cnktPnZhbHVlID0gdmFsdWU7Ci0JZW50cnkt
Pm5leHQgPSBOVUxMOwotCi0JLyogSWYgc3R1Yi0+bmV4dCBpcyB2aXNpYmxlLCBndWFyYW50ZWUg
dGhhdCBlbnRyeSBpcyBjb25zaXN0ZW50LiAqLwotCWNrX3ByX2ZlbmNlX3N0b3JlKCk7Ci0JY2tf
cHJfc3RvcmVfcHRyKCZmaWZvLT50YWlsLT5uZXh0LCBlbnRyeSk7Ci0JZmlmby0+dGFpbCA9IGVu
dHJ5OwotCXJldHVybjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19maWZvX3Nw
c2NfZGVxdWV1ZShzdHJ1Y3QgY2tfZmlmb19zcHNjICpmaWZvLCB2b2lkICp2YWx1ZSkKLXsKLQlz
dHJ1Y3QgY2tfZmlmb19zcHNjX2VudHJ5ICplbnRyeTsKLQotCS8qCi0JICogVGhlIGhlYWQgcG9p
bnRlciBpcyBndWFyYW50ZWVkIHRvIGFsd2F5cyBwb2ludCB0byBhIHN0dWIgZW50cnkuCi0JICog
SWYgdGhlIHN0dWIgZW50cnkgZG9lcyBub3QgcG9pbnQgdG8gYW4gZW50cnksIHRoZW4gdGhlIHF1
ZXVlIGlzCi0JICogZW1wdHkuCi0JICovCi0JZW50cnkgPSBja19wcl9sb2FkX3B0cigmZmlmby0+
aGVhZC0+bmV4dCk7Ci0JaWYgKGVudHJ5ID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQotCS8q
IElmIGVudHJ5IGlzIHZpc2libGUsIGd1YXJhbnRlZSBzdG9yZSB0byB2YWx1ZSBpcyB2aXNpYmxl
LiAqLwotCWNrX3ByX3N0b3JlX3B0cl91bnNhZmUodmFsdWUsIGVudHJ5LT52YWx1ZSk7Ci0JY2tf
cHJfZmVuY2Vfc3RvcmUoKTsKLQlja19wcl9zdG9yZV9wdHIoJmZpZm8tPmhlYWQsIGVudHJ5KTsK
LQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFJlY3ljbGUgYSBub2RlLiBUaGlzIHRlY2huaXF1
ZSBmb3IgcmVjeWNsaW5nIG5vZGVzIGlzIGJhc2VkIG9uCi0gKiBEbWl0cml5IFZ5dWtvdidzIHdv
cmsuCi0gKi8KLUNLX0NDX0lOTElORSBzdGF0aWMgc3RydWN0IGNrX2ZpZm9fc3BzY19lbnRyeSAq
Ci1ja19maWZvX3Nwc2NfcmVjeWNsZShzdHJ1Y3QgY2tfZmlmb19zcHNjICpmaWZvKQotewotCXN0
cnVjdCBja19maWZvX3Nwc2NfZW50cnkgKmdhcmJhZ2U7Ci0KLQlpZiAoZmlmby0+aGVhZF9zbmFw
c2hvdCA9PSBmaWZvLT5nYXJiYWdlKSB7Ci0JCWZpZm8tPmhlYWRfc25hcHNob3QgPSBja19wcl9s
b2FkX3B0cigmZmlmby0+aGVhZCk7Ci0JCWlmIChmaWZvLT5oZWFkX3NuYXBzaG90ID09IGZpZm8t
PmdhcmJhZ2UpCi0JCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlnYXJiYWdlID0gZmlmby0+Z2FyYmFn
ZTsKLQlmaWZvLT5nYXJiYWdlID0gZ2FyYmFnZS0+bmV4dDsKLQlyZXR1cm4gZ2FyYmFnZTsKLX0K
LQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19maWZvX3Nwc2NfaXNlbXB0eShzdHJ1Y3Qg
Y2tfZmlmb19zcHNjICpmaWZvKQotewotCXN0cnVjdCBja19maWZvX3Nwc2NfZW50cnkgKmhlYWQg
PSBja19wcl9sb2FkX3B0cigmZmlmby0+aGVhZCk7Ci0JcmV0dXJuIGNrX3ByX2xvYWRfcHRyKCZo
ZWFkLT5uZXh0KSA9PSBOVUxMOwotfQotCi0jZGVmaW5lIENLX0ZJRk9fU1BTQ19JU0VNUFRZKGYp
CSgoZiktPmhlYWQtPm5leHQgPT0gTlVMTCkKLSNkZWZpbmUgQ0tfRklGT19TUFNDX0ZJUlNUKGYp
CSgoZiktPmhlYWQtPm5leHQpCi0jZGVmaW5lIENLX0ZJRk9fU1BTQ19ORVhUKG0pCSgobSktPm5l
eHQpCi0jZGVmaW5lIENLX0ZJRk9fU1BTQ19TUEFSRShmKQkoKGYpLT5oZWFkKQotI2RlZmluZSBD
S19GSUZPX1NQU0NfRk9SRUFDSChmaWZvLCBlbnRyeSkJCQlcCi0JZm9yICgoZW50cnkpID0gQ0tf
RklGT19TUFNDX0ZJUlNUKGZpZm8pOwkJXAotCSAgICAgKGVudHJ5KSAhPSBOVUxMOwkJCQkJXAot
CSAgICAgKGVudHJ5KSA9IENLX0ZJRk9fU1BTQ19ORVhUKGVudHJ5KSkKLSNkZWZpbmUgQ0tfRklG
T19TUFNDX0ZPUkVBQ0hfU0FGRShmaWZvLCBlbnRyeSwgVCkJCVwKLQlmb3IgKChlbnRyeSkgPSBD
S19GSUZPX1NQU0NfRklSU1QoZmlmbyk7CQlcCi0JICAgICAoZW50cnkpICE9IE5VTEwgJiYgKChU
KSA9IChlbnRyeSktPm5leHQsIDEpOwlcCi0JICAgICAoZW50cnkpID0gKFQpKQotCi0jZW5kaWYg
LyogQ0tfRl9GSUZPX1NQU0MgKi8KLQotI2lmZGVmIENLX0ZfUFJfQ0FTX1BUUl8yCi0jaWZuZGVm
IENLX0ZfRklGT19NUE1DCi0jZGVmaW5lIENLX0ZfRklGT19NUE1DCi1zdHJ1Y3QgY2tfZmlmb19t
cG1jX2VudHJ5Owotc3RydWN0IGNrX2ZpZm9fbXBtY19wb2ludGVyIHsKLQlzdHJ1Y3QgY2tfZmlm
b19tcG1jX2VudHJ5ICpwb2ludGVyOwotCWNoYXIgKmdlbmVyYXRpb24gQ0tfQ0NfUEFDS0VEOwot
fSBDS19DQ19BTElHTigxNik7Ci0KLXN0cnVjdCBja19maWZvX21wbWNfZW50cnkgewotCXZvaWQg
KnZhbHVlOwotCXN0cnVjdCBja19maWZvX21wbWNfcG9pbnRlciBuZXh0OwotfTsKLXR5cGVkZWYg
c3RydWN0IGNrX2ZpZm9fbXBtY19lbnRyeSBja19maWZvX21wbWNfZW50cnlfdDsKLQotc3RydWN0
IGNrX2ZpZm9fbXBtYyB7Ci0Jc3RydWN0IGNrX2ZpZm9fbXBtY19wb2ludGVyIGhlYWQ7Ci0JY2hh
ciBwYWRbQ0tfTURfQ0FDSEVMSU5FIC0gc2l6ZW9mKHN0cnVjdCBja19maWZvX21wbWNfcG9pbnRl
cildOwotCXN0cnVjdCBja19maWZvX21wbWNfcG9pbnRlciB0YWlsOwotfTsKLXR5cGVkZWYgc3Ry
dWN0IGNrX2ZpZm9fbXBtYyBja19maWZvX21wbWNfdDsKLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2
b2lkCi1ja19maWZvX21wbWNfaW5pdChzdHJ1Y3QgY2tfZmlmb19tcG1jICpmaWZvLCBzdHJ1Y3Qg
Y2tfZmlmb19tcG1jX2VudHJ5ICpzdHViKQotewotCi0Jc3R1Yi0+bmV4dC5wb2ludGVyID0gTlVM
TDsKLQlzdHViLT5uZXh0LmdlbmVyYXRpb24gPSBOVUxMOwotCWZpZm8tPmhlYWQucG9pbnRlciA9
IGZpZm8tPnRhaWwucG9pbnRlciA9IHN0dWI7Ci0JZmlmby0+aGVhZC5nZW5lcmF0aW9uID0gZmlm
by0+dGFpbC5nZW5lcmF0aW9uID0gTlVMTDsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBz
dGF0aWMgdm9pZAotY2tfZmlmb19tcG1jX2RlaW5pdChzdHJ1Y3QgY2tfZmlmb19tcG1jICpmaWZv
LCBzdHJ1Y3QgY2tfZmlmb19tcG1jX2VudHJ5ICoqZ2FyYmFnZSkKLXsKLQotCSpnYXJiYWdlID0g
Zmlmby0+aGVhZC5wb2ludGVyOwotCWZpZm8tPmhlYWQucG9pbnRlciA9IGZpZm8tPnRhaWwucG9p
bnRlciA9IE5VTEw7Ci0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNr
X2ZpZm9fbXBtY19lbnF1ZXVlKHN0cnVjdCBja19maWZvX21wbWMgKmZpZm8sCi0JCSAgICAgc3Ry
dWN0IGNrX2ZpZm9fbXBtY19lbnRyeSAqZW50cnksCi0JCSAgICAgdm9pZCAqdmFsdWUpCi17Ci0J
c3RydWN0IGNrX2ZpZm9fbXBtY19wb2ludGVyIHRhaWwsIG5leHQsIHVwZGF0ZTsKLQotCS8qCi0J
ICogUHJlcGFyZSB0aGUgdXBjb21pbmcgbm9kZSBhbmQgbWFrZSBzdXJlIHRvIGNvbW1pdCB0aGUg
dXBkYXRlcwotCSAqIGJlZm9yZSBwdWJsaXNoaW5nLgotCSAqLwotCWVudHJ5LT52YWx1ZSA9IHZh
bHVlOwotCWVudHJ5LT5uZXh0LnBvaW50ZXIgPSBOVUxMOwotCWVudHJ5LT5uZXh0LmdlbmVyYXRp
b24gPSAwOwotCWNrX3ByX2ZlbmNlX3N0b3JlX2F0b21pYygpOwotCi0JZm9yICg7OykgewotCQl0
YWlsLmdlbmVyYXRpb24gPSBja19wcl9sb2FkX3B0cigmZmlmby0+dGFpbC5nZW5lcmF0aW9uKTsK
LQkJY2tfcHJfZmVuY2VfbG9hZCgpOwotCQl0YWlsLnBvaW50ZXIgPSBja19wcl9sb2FkX3B0cigm
Zmlmby0+dGFpbC5wb2ludGVyKTsKLQkJbmV4dC5nZW5lcmF0aW9uID0gY2tfcHJfbG9hZF9wdHIo
JnRhaWwucG9pbnRlci0+bmV4dC5nZW5lcmF0aW9uKTsKLQkJY2tfcHJfZmVuY2VfbG9hZCgpOwot
CQluZXh0LnBvaW50ZXIgPSBja19wcl9sb2FkX3B0cigmdGFpbC5wb2ludGVyLT5uZXh0LnBvaW50
ZXIpOwotCi0JCWlmIChja19wcl9sb2FkX3B0cigmZmlmby0+dGFpbC5nZW5lcmF0aW9uKSAhPSB0
YWlsLmdlbmVyYXRpb24pCi0JCQljb250aW51ZTsKLQotCQlpZiAobmV4dC5wb2ludGVyICE9IE5V
TEwpIHsKLQkJCS8qCi0JCQkgKiBJZiB0aGUgdGFpbCBwb2ludGVyIGhhcyBhbiBlbnRyeSBmb2xs
b3dpbmcgaXQgdGhlbgotCQkJICogaXQgbmVlZHMgdG8gYmUgZm9yd2FyZGVkIHRvIHRoZSBuZXh0
IGVudHJ5LiBUaGlzCi0JCQkgKiBoZWxwcyB1cyBndWFyYW50ZWUgd2UgYXJlIGFsd2F5cyBvcGVy
YXRpbmcgb24gdGhlCi0JCQkgKiBsYXN0IGVudHJ5LgotCQkJICovCi0JCQl1cGRhdGUucG9pbnRl
ciA9IG5leHQucG9pbnRlcjsKLQkJCXVwZGF0ZS5nZW5lcmF0aW9uID0gdGFpbC5nZW5lcmF0aW9u
ICsgMTsKLQkJCWNrX3ByX2Nhc19wdHJfMigmZmlmby0+dGFpbCwgJnRhaWwsICZ1cGRhdGUpOwot
CQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIEF0dGVtcHQgdG8gY29tbWl0IG5ldyBlbnRyeSB0byB0
aGUgZW5kIG9mIHRoZQotCQkJICogY3VycmVudCB0YWlsLgotCQkJICovCi0JCQl1cGRhdGUucG9p
bnRlciA9IGVudHJ5OwotCQkJdXBkYXRlLmdlbmVyYXRpb24gPSBuZXh0LmdlbmVyYXRpb24gKyAx
OwotCQkJaWYgKGNrX3ByX2Nhc19wdHJfMigmdGFpbC5wb2ludGVyLT5uZXh0LCAmbmV4dCwgJnVw
ZGF0ZSkgPT0gdHJ1ZSkKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCWNrX3ByX2ZlbmNlX2F0b21p
YygpOwotCi0JLyogQWZ0ZXIgYSBzdWNjZXNzZnVsIGluc2VydCwgZm9yd2FyZCB0aGUgdGFpbCB0
byB0aGUgbmV3IGVudHJ5LiAqLwotCXVwZGF0ZS5nZW5lcmF0aW9uID0gdGFpbC5nZW5lcmF0aW9u
ICsgMTsKLQlja19wcl9jYXNfcHRyXzIoJmZpZm8tPnRhaWwsICZ0YWlsLCAmdXBkYXRlKTsKLQly
ZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfZmlmb19tcG1jX3RyeWVu
cXVldWUoc3RydWN0IGNrX2ZpZm9fbXBtYyAqZmlmbywKLQkJICAgICAgICBzdHJ1Y3QgY2tfZmlm
b19tcG1jX2VudHJ5ICplbnRyeSwKLQkJICAgICAgICB2b2lkICp2YWx1ZSkKLXsKLQlzdHJ1Y3Qg
Y2tfZmlmb19tcG1jX3BvaW50ZXIgdGFpbCwgbmV4dCwgdXBkYXRlOwotCi0JZW50cnktPnZhbHVl
ID0gdmFsdWU7Ci0JZW50cnktPm5leHQucG9pbnRlciA9IE5VTEw7Ci0JZW50cnktPm5leHQuZ2Vu
ZXJhdGlvbiA9IDA7Ci0KLQlja19wcl9mZW5jZV9zdG9yZV9hdG9taWMoKTsKLQotCXRhaWwuZ2Vu
ZXJhdGlvbiA9IGNrX3ByX2xvYWRfcHRyKCZmaWZvLT50YWlsLmdlbmVyYXRpb24pOwotCWNrX3By
X2ZlbmNlX2xvYWQoKTsKLQl0YWlsLnBvaW50ZXIgPSBja19wcl9sb2FkX3B0cigmZmlmby0+dGFp
bC5wb2ludGVyKTsKLQluZXh0LmdlbmVyYXRpb24gPSBja19wcl9sb2FkX3B0cigmdGFpbC5wb2lu
dGVyLT5uZXh0LmdlbmVyYXRpb24pOwotCWNrX3ByX2ZlbmNlX2xvYWQoKTsKLQluZXh0LnBvaW50
ZXIgPSBja19wcl9sb2FkX3B0cigmdGFpbC5wb2ludGVyLT5uZXh0LnBvaW50ZXIpOwotCi0JaWYg
KGNrX3ByX2xvYWRfcHRyKCZmaWZvLT50YWlsLmdlbmVyYXRpb24pICE9IHRhaWwuZ2VuZXJhdGlv
bikKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKG5leHQucG9pbnRlciAhPSBOVUxMKSB7Ci0JCS8q
Ci0JCSAqIElmIHRoZSB0YWlsIHBvaW50ZXIgaGFzIGFuIGVudHJ5IGZvbGxvd2luZyBpdCB0aGVu
Ci0JCSAqIGl0IG5lZWRzIHRvIGJlIGZvcndhcmRlZCB0byB0aGUgbmV4dCBlbnRyeS4gVGhpcwot
CQkgKiBoZWxwcyB1cyBndWFyYW50ZWUgd2UgYXJlIGFsd2F5cyBvcGVyYXRpbmcgb24gdGhlCi0J
CSAqIGxhc3QgZW50cnkuCi0JCSAqLwotCQl1cGRhdGUucG9pbnRlciA9IG5leHQucG9pbnRlcjsK
LQkJdXBkYXRlLmdlbmVyYXRpb24gPSB0YWlsLmdlbmVyYXRpb24gKyAxOwotCQlja19wcl9jYXNf
cHRyXzIoJmZpZm8tPnRhaWwsICZ0YWlsLCAmdXBkYXRlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0g
ZWxzZSB7Ci0JCS8qCi0JCSAqIEF0dGVtcHQgdG8gY29tbWl0IG5ldyBlbnRyeSB0byB0aGUgZW5k
IG9mIHRoZQotCQkgKiBjdXJyZW50IHRhaWwuCi0JCSAqLwotCQl1cGRhdGUucG9pbnRlciA9IGVu
dHJ5OwotCQl1cGRhdGUuZ2VuZXJhdGlvbiA9IG5leHQuZ2VuZXJhdGlvbiArIDE7Ci0JCWlmIChj
a19wcl9jYXNfcHRyXzIoJnRhaWwucG9pbnRlci0+bmV4dCwgJm5leHQsICZ1cGRhdGUpID09IGZh
bHNlKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWNrX3ByX2ZlbmNlX2F0b21pYygpOwotCi0J
LyogQWZ0ZXIgYSBzdWNjZXNzZnVsIGluc2VydCwgZm9yd2FyZCB0aGUgdGFpbCB0byB0aGUgbmV3
IGVudHJ5LiAqLwotCXVwZGF0ZS5nZW5lcmF0aW9uID0gdGFpbC5nZW5lcmF0aW9uICsgMTsKLQlj
a19wcl9jYXNfcHRyXzIoJmZpZm8tPnRhaWwsICZ0YWlsLCAmdXBkYXRlKTsKLQlyZXR1cm4gdHJ1
ZTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19maWZvX21wbWNfZGVxdWV1ZShz
dHJ1Y3QgY2tfZmlmb19tcG1jICpmaWZvLAotCQkgICAgIHZvaWQgKnZhbHVlLAotCQkgICAgIHN0
cnVjdCBja19maWZvX21wbWNfZW50cnkgKipnYXJiYWdlKQotewotCXN0cnVjdCBja19maWZvX21w
bWNfcG9pbnRlciBoZWFkLCB0YWlsLCBuZXh0LCB1cGRhdGU7Ci0KLQlmb3IgKDs7KSB7Ci0JCWhl
YWQuZ2VuZXJhdGlvbiA9IGNrX3ByX2xvYWRfcHRyKCZmaWZvLT5oZWFkLmdlbmVyYXRpb24pOwot
CQlja19wcl9mZW5jZV9sb2FkKCk7Ci0JCWhlYWQucG9pbnRlciA9IGNrX3ByX2xvYWRfcHRyKCZm
aWZvLT5oZWFkLnBvaW50ZXIpOwotCQl0YWlsLmdlbmVyYXRpb24gPSBja19wcl9sb2FkX3B0cigm
Zmlmby0+dGFpbC5nZW5lcmF0aW9uKTsKLQkJY2tfcHJfZmVuY2VfbG9hZCgpOwotCQl0YWlsLnBv
aW50ZXIgPSBja19wcl9sb2FkX3B0cigmZmlmby0+dGFpbC5wb2ludGVyKTsKLQotCQluZXh0Lmdl
bmVyYXRpb24gPSBja19wcl9sb2FkX3B0cigmaGVhZC5wb2ludGVyLT5uZXh0LmdlbmVyYXRpb24p
OwotCQlja19wcl9mZW5jZV9sb2FkKCk7Ci0JCW5leHQucG9pbnRlciA9IGNrX3ByX2xvYWRfcHRy
KCZoZWFkLnBvaW50ZXItPm5leHQucG9pbnRlcik7Ci0KLQkJdXBkYXRlLnBvaW50ZXIgPSBuZXh0
LnBvaW50ZXI7Ci0JCWlmIChoZWFkLnBvaW50ZXIgPT0gdGFpbC5wb2ludGVyKSB7Ci0JCQkvKgot
CQkJICogVGhlIGhlYWQgaXMgZ3VhcmFudGVlZCB0byBhbHdheXMgcG9pbnQgYXQgYSBzdHViCi0J
CQkgKiBlbnRyeS4gSWYgdGhlIHN0dWIgZW50cnkgaGFzIG5vIHJlZmVyZW5jZXMgdGhlbiB0aGUK
LQkJCSAqIHF1ZXVlIGlzIGVtcHR5LgotCQkJICovCi0JCQlpZiAobmV4dC5wb2ludGVyID09IE5V
TEwpCi0JCQkJcmV0dXJuIGZhbHNlOwotCi0JCQkvKiBGb3J3YXJkIHRoZSB0YWlsIHBvaW50ZXIg
aWYgbmVjZXNzYXJ5LiAqLwotCQkJdXBkYXRlLmdlbmVyYXRpb24gPSB0YWlsLmdlbmVyYXRpb24g
KyAxOwotCQkJY2tfcHJfY2FzX3B0cl8yKCZmaWZvLT50YWlsLCAmdGFpbCwgJnVwZGF0ZSk7Ci0J
CX0gZWxzZSB7Ci0JCQkvKgotCQkJICogSXQgaXMgcG9zc2libGUgZm9yIGhlYWQgc25hcHNob3Qg
dG8gaGF2ZSBiZWVuCi0JCQkgKiByZS11c2VkLiBBdm9pZCBkZWZlcmVuY2luZyBkdXJpbmcgZW5x
dWV1ZQotCQkJICogcmUtdXNlLgotCQkJICovCi0JCQlpZiAobmV4dC5wb2ludGVyID09IE5VTEwp
Ci0JCQkJY29udGludWU7Ci0KLQkJCS8qIFNhdmUgdmFsdWUgYmVmb3JlIGNvbW1pdC4gKi8KLQkJ
CSoodm9pZCAqKil2YWx1ZSA9IGNrX3ByX2xvYWRfcHRyKCZuZXh0LnBvaW50ZXItPnZhbHVlKTsK
LQotCQkJLyogRm9yd2FyZCB0aGUgaGVhZCBwb2ludGVyIHRvIHRoZSBuZXh0IGVudHJ5LiAqLwot
CQkJdXBkYXRlLmdlbmVyYXRpb24gPSBoZWFkLmdlbmVyYXRpb24gKyAxOwotCQkJaWYgKGNrX3By
X2Nhc19wdHJfMigmZmlmby0+aGVhZCwgJmhlYWQsICZ1cGRhdGUpID09IHRydWUpCi0JCQkJYnJl
YWs7Ci0JCX0KLQl9Ci0KLQkqZ2FyYmFnZSA9IGhlYWQucG9pbnRlcjsKLQlyZXR1cm4gdHJ1ZTsK
LX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19maWZvX21wbWNfdHJ5ZGVxdWV1ZShz
dHJ1Y3QgY2tfZmlmb19tcG1jICpmaWZvLAotCQkJdm9pZCAqdmFsdWUsCi0JCQlzdHJ1Y3QgY2tf
Zmlmb19tcG1jX2VudHJ5ICoqZ2FyYmFnZSkKLXsKLQlzdHJ1Y3QgY2tfZmlmb19tcG1jX3BvaW50
ZXIgaGVhZCwgdGFpbCwgbmV4dCwgdXBkYXRlOwotCi0JaGVhZC5nZW5lcmF0aW9uID0gY2tfcHJf
bG9hZF9wdHIoJmZpZm8tPmhlYWQuZ2VuZXJhdGlvbik7Ci0JY2tfcHJfZmVuY2VfbG9hZCgpOwot
CWhlYWQucG9pbnRlciA9IGNrX3ByX2xvYWRfcHRyKCZmaWZvLT5oZWFkLnBvaW50ZXIpOwotCi0J
dGFpbC5nZW5lcmF0aW9uID0gY2tfcHJfbG9hZF9wdHIoJmZpZm8tPnRhaWwuZ2VuZXJhdGlvbik7
Ci0JY2tfcHJfZmVuY2VfbG9hZCgpOwotCXRhaWwucG9pbnRlciA9IGNrX3ByX2xvYWRfcHRyKCZm
aWZvLT50YWlsLnBvaW50ZXIpOwotCi0JbmV4dC5nZW5lcmF0aW9uID0gY2tfcHJfbG9hZF9wdHIo
JmhlYWQucG9pbnRlci0+bmV4dC5nZW5lcmF0aW9uKTsKLQlja19wcl9mZW5jZV9sb2FkKCk7Ci0J
bmV4dC5wb2ludGVyID0gY2tfcHJfbG9hZF9wdHIoJmhlYWQucG9pbnRlci0+bmV4dC5wb2ludGVy
KTsKLQotCXVwZGF0ZS5wb2ludGVyID0gbmV4dC5wb2ludGVyOwotCWlmIChoZWFkLnBvaW50ZXIg
PT0gdGFpbC5wb2ludGVyKSB7Ci0JCS8qCi0JCSAqIFRoZSBoZWFkIGlzIGd1YXJhbnRlZWQgdG8g
YWx3YXlzIHBvaW50IGF0IGEgc3R1YgotCQkgKiBlbnRyeS4gSWYgdGhlIHN0dWIgZW50cnkgaGFz
IG5vIHJlZmVyZW5jZXMgdGhlbiB0aGUKLQkJICogcXVldWUgaXMgZW1wdHkuCi0JCSAqLwotCQlp
ZiAobmV4dC5wb2ludGVyID09IE5VTEwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJLyogRm9yd2Fy
ZCB0aGUgdGFpbCBwb2ludGVyIGlmIG5lY2Vzc2FyeS4gKi8KLQkJdXBkYXRlLmdlbmVyYXRpb24g
PSB0YWlsLmdlbmVyYXRpb24gKyAxOwotCQlja19wcl9jYXNfcHRyXzIoJmZpZm8tPnRhaWwsICZ0
YWlsLCAmdXBkYXRlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEl0
IGlzIHBvc3NpYmxlIGZvciBoZWFkIHNuYXBzaG90IHRvIGhhdmUgYmVlbgotCQkgKiByZS11c2Vk
LiBBdm9pZCBkZWZlcmVuY2luZyBkdXJpbmcgZW5xdWV1ZS4KLQkJICovCi0JCWlmIChuZXh0LnBv
aW50ZXIgPT0gTlVMTCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQkvKiBTYXZlIHZhbHVlIGJlZm9y
ZSBjb21taXQuICovCi0JCSoodm9pZCAqKil2YWx1ZSA9IGNrX3ByX2xvYWRfcHRyKCZuZXh0LnBv
aW50ZXItPnZhbHVlKTsKLQotCQkvKiBGb3J3YXJkIHRoZSBoZWFkIHBvaW50ZXIgdG8gdGhlIG5l
eHQgZW50cnkuICovCi0JCXVwZGF0ZS5nZW5lcmF0aW9uID0gaGVhZC5nZW5lcmF0aW9uICsgMTsK
LQkJaWYgKGNrX3ByX2Nhc19wdHJfMigmZmlmby0+aGVhZCwgJmhlYWQsICZ1cGRhdGUpID09IGZh
bHNlKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCSpnYXJiYWdlID0gaGVhZC5wb2ludGVyOwot
CXJldHVybiB0cnVlOwotfQotCi0jZGVmaW5lIENLX0ZJRk9fTVBNQ19JU0VNUFRZKGYpCSgoZikt
PmhlYWQucG9pbnRlci0+bmV4dC5wb2ludGVyID09IE5VTEwpCi0jZGVmaW5lIENLX0ZJRk9fTVBN
Q19GSVJTVChmKQkoKGYpLT5oZWFkLnBvaW50ZXItPm5leHQucG9pbnRlcikKLSNkZWZpbmUgQ0tf
RklGT19NUE1DX05FWFQobSkJKChtKS0+bmV4dC5wb2ludGVyKQotI2RlZmluZSBDS19GSUZPX01Q
TUNfRk9SRUFDSChmaWZvLCBlbnRyeSkJCQkJXAotCWZvciAoKGVudHJ5KSA9IENLX0ZJRk9fTVBN
Q19GSVJTVChmaWZvKTsJCQlcCi0JICAgICAoZW50cnkpICE9IE5VTEw7CQkJCQkJXAotCSAgICAg
KGVudHJ5KSA9IENLX0ZJRk9fTVBNQ19ORVhUKGVudHJ5KSkKLSNkZWZpbmUgQ0tfRklGT19NUE1D
X0ZPUkVBQ0hfU0FGRShmaWZvLCBlbnRyeSwgVCkJCQlcCi0JZm9yICgoZW50cnkpID0gQ0tfRklG
T19NUE1DX0ZJUlNUKGZpZm8pOwkJCVwKLQkgICAgIChlbnRyeSkgIT0gTlVMTCAmJiAoKFQpID0g
KGVudHJ5KS0+bmV4dC5wb2ludGVyLCAxKTsJXAotCSAgICAgKGVudHJ5KSA9IChUKSkKLQotI2Vu
ZGlmIC8qIENLX0ZfRklGT19NUE1DICovCi0jZW5kaWYgLyogQ0tfRl9QUl9DQVNfUFRSXzIgKi8K
LQotI2VuZGlmIC8qIENLX0ZJRk9fSCAqLwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19ocC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svaW5jbHVkZS9ja19ocC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
N2Q4Y2ZiOTFlM2RkZWY1NWUxYzdlMmE5ZDQ3Yzg2NjExMzJmNDBiLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL2luY2x1ZGUvY2tfaHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IDIwMTAtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIENLX0hQX0gKLSNkZWZpbmUgQ0tfSFBfSAotCi0jaW5jbHVk
ZSA8Y2tfY2MuaD4KLSNpbmNsdWRlIDxja19tZC5oPgotI2luY2x1ZGUgPGNrX3ByLmg+Ci0jaW5j
bHVkZSA8Y2tfc3RhY2suaD4KLQotI2lmbmRlZiBDS19IUF9DQUNIRQotI2RlZmluZSBDS19IUF9D
QUNIRSA1MTIKLSNlbmRpZgotCi1zdHJ1Y3QgY2tfaHBfaGF6YXJkOwotdHlwZWRlZiB2b2lkICgq
Y2tfaHBfZGVzdHJ1Y3Rvcl90KSh2b2lkICopOwotCi1zdHJ1Y3QgY2tfaHAgewotCWNrX3N0YWNr
X3Qgc3Vic2NyaWJlcnM7Ci0JdW5zaWduZWQgaW50IG5fc3Vic2NyaWJlcnM7Ci0JdW5zaWduZWQg
aW50IG5fZnJlZTsKLQl1bnNpZ25lZCBpbnQgdGhyZXNob2xkOwotCXVuc2lnbmVkIGludCBkZWdy
ZWU7Ci0JY2tfaHBfZGVzdHJ1Y3Rvcl90IGRlc3Ryb3k7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tf
aHAgY2tfaHBfdDsKLQotc3RydWN0IGNrX2hwX2hhemFyZCB7Ci0Jdm9pZCAqcG9pbnRlcjsKLQl2
b2lkICpkYXRhOwotCWNrX3N0YWNrX2VudHJ5X3QgcGVuZGluZ19lbnRyeTsKLX07Ci10eXBlZGVm
IHN0cnVjdCBja19ocF9oYXphcmQgY2tfaHBfaGF6YXJkX3Q7Ci0KLWVudW0gewotCUNLX0hQX1VT
RUQgPSAwLAotCUNLX0hQX0ZSRUUgPSAxCi19OwotCi1zdHJ1Y3QgY2tfaHBfcmVjb3JkIHsKLQlp
bnQgc3RhdGU7Ci0Jdm9pZCAqKnBvaW50ZXJzOwotCXZvaWQgKmNhY2hlW0NLX0hQX0NBQ0hFXTsK
LQlzdHJ1Y3QgY2tfaHAgKmdsb2JhbDsKLQlja19zdGFja190IHBlbmRpbmc7Ci0JdW5zaWduZWQg
aW50IG5fcGVuZGluZzsKLQlja19zdGFja19lbnRyeV90IGdsb2JhbF9lbnRyeTsKLQl1bnNpZ25l
ZCBpbnQgbl9wZWFrOwotCXVpbnQ2NF90IG5fcmVjbGFtYXRpb25zOwotfSBDS19DQ19DQUNIRUxJ
TkU7Ci10eXBlZGVmIHN0cnVjdCBja19ocF9yZWNvcmQgY2tfaHBfcmVjb3JkX3Q7Ci0KLUNLX0ND
X0lOTElORSBzdGF0aWMgdm9pZAotY2tfaHBfc2V0KHN0cnVjdCBja19ocF9yZWNvcmQgKnJlY29y
ZCwgdW5zaWduZWQgaW50IGksIHZvaWQgKnBvaW50ZXIpCi17Ci0KLQlja19wcl9zdG9yZV9wdHIo
JnJlY29yZC0+cG9pbnRlcnNbaV0sIHBvaW50ZXIpOwotCXJldHVybjsKLX0KLQotQ0tfQ0NfSU5M
SU5FIHN0YXRpYyB2b2lkCi1ja19ocF9zZXRfZmVuY2Uoc3RydWN0IGNrX2hwX3JlY29yZCAqcmVj
b3JkLCB1bnNpZ25lZCBpbnQgaSwgdm9pZCAqcG9pbnRlcikKLXsKLQotI2lmZGVmIENLX01EX1RT
TwotCWNrX3ByX2Zhc19wdHIoJnJlY29yZC0+cG9pbnRlcnNbaV0sIHBvaW50ZXIpOwotI2Vsc2UK
LQlja19wcl9zdG9yZV9wdHIoJnJlY29yZC0+cG9pbnRlcnNbaV0sIHBvaW50ZXIpOwotCWNrX3By
X2ZlbmNlX21lbW9yeSgpOwotI2VuZGlmCi0KLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBz
dGF0aWMgdm9pZAotY2tfaHBfY2xlYXIoc3RydWN0IGNrX2hwX3JlY29yZCAqcmVjb3JkKQotewot
CXZvaWQgKipwb2ludGVycyA9IHJlY29yZC0+cG9pbnRlcnM7Ci0JdW5zaWduZWQgaW50IGk7Ci0K
LQlmb3IgKGkgPSAwOyBpIDwgcmVjb3JkLT5nbG9iYWwtPmRlZ3JlZTsgaSsrKQotCQkqcG9pbnRl
cnMrKyA9IE5VTEw7Ci0KLQlyZXR1cm47Ci19Ci0KLXZvaWQgY2tfaHBfaW5pdChja19ocF90ICos
IHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBja19ocF9kZXN0cnVjdG9yX3QpOwotdm9pZCBj
a19ocF9zZXRfdGhyZXNob2xkKGNrX2hwX3QgKiwgdW5zaWduZWQgaW50KTsKLXZvaWQgY2tfaHBf
cmVnaXN0ZXIoY2tfaHBfdCAqLCBja19ocF9yZWNvcmRfdCAqLCB2b2lkICoqKTsKLXZvaWQgY2tf
aHBfdW5yZWdpc3Rlcihja19ocF9yZWNvcmRfdCAqKTsKLWNrX2hwX3JlY29yZF90ICpja19ocF9y
ZWN5Y2xlKGNrX2hwX3QgKik7Ci12b2lkIGNrX2hwX3JlY2xhaW0oY2tfaHBfcmVjb3JkX3QgKik7
Ci12b2lkIGNrX2hwX2ZyZWUoY2tfaHBfcmVjb3JkX3QgKiwgY2tfaHBfaGF6YXJkX3QgKiwgdm9p
ZCAqLCB2b2lkICopOwotdm9pZCBja19ocF9yZXRpcmUoY2tfaHBfcmVjb3JkX3QgKiwgY2tfaHBf
aGF6YXJkX3QgKiwgdm9pZCAqLCB2b2lkICopOwotdm9pZCBja19ocF9wdXJnZShja19ocF9yZWNv
cmRfdCAqKTsKLQotI2VuZGlmIC8qIENLX0hQX0ggKi8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfaHBfZmlmby5oIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19ocF9maWZvLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGZkNzhhZTZhYjQ0YmJjYjViYWM4MWZmOWM1ZDM1MDk0NGEwYmQ5NWQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19ocF9maWZvLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwyMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwLTIwMTUgU2FteSBBbCBC
YWhyYS4KLSAqIENvcHlyaWdodCAyMDExIERhdmlkIEpvc2VwaC4KLSAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBDS19IUF9GSUZPX0gKLSNkZWZpbmUgQ0tfSFBfRklGT19ICi0K
LSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNrX2hwLmg+Ci0jaW5jbHVkZSA8Y2tfcHIu
aD4KLSNpbmNsdWRlIDxja19zdGRkZWYuaD4KLQotI2RlZmluZSBDS19IUF9GSUZPX1NMT1RTX0NP
VU5UICgyKQotI2RlZmluZSBDS19IUF9GSUZPX1NMT1RTX1NJWkUgIChzaXplb2Yodm9pZCAqKSAq
IENLX0hQX0ZJRk9fU0xPVFNfQ09VTlQpCi0KLS8qCi0gKiBUaG91Z2ggaXQgaXMgcG9zc2libGUg
dG8gZW1iZWQgdGhlIGRhdGEgc3RydWN0dXJlLCBtZWFzdXJlbWVudHMgbmVlZAotICogdG8gYmUg
bWFkZSBmb3IgdGhlIGNvc3Qgb2YgdGhpcy4gSWYgd2Ugd2VyZSB0byBlbWJlZCB0aGUgaGF6YXJk
IHBvaW50ZXIKLSAqIHN0YXRlIGludG8gdGhlIGRhdGEgc3RydWN0dXJlLCB0aGlzIG1lYW5zIGV2
ZXJ5IGRlZmVycmVkIHJlY2xhbWF0aW9uCi0gKiB3aWxsIGFsc28gaW5jbHVkZSBhIGNhY2hlIGlu
dmFsaWRhdGlvbiB3aGVuIGxpbmtpbmcgaW50byB0aGUgaGF6YXJkIHBvaW50ZXIKLSAqIHBlbmRp
bmcgcXVldWUuIFRoaXMgbWF5IGxlYWQgdG8gdGVycmlibGUgY2FjaGUgbGluZSBib3VuY2luZy4K
LSAqLwotc3RydWN0IGNrX2hwX2ZpZm9fZW50cnkgewotCXZvaWQgKnZhbHVlOwotCWNrX2hwX2hh
emFyZF90IGhhemFyZDsKLQlzdHJ1Y3QgY2tfaHBfZmlmb19lbnRyeSAqbmV4dDsKLX07Ci10eXBl
ZGVmIHN0cnVjdCBja19ocF9maWZvX2VudHJ5IGNrX2hwX2ZpZm9fZW50cnlfdDsKLQotc3RydWN0
IGNrX2hwX2ZpZm8gewotCXN0cnVjdCBja19ocF9maWZvX2VudHJ5ICpoZWFkOwotCXN0cnVjdCBj
a19ocF9maWZvX2VudHJ5ICp0YWlsOwotfTsKLXR5cGVkZWYgc3RydWN0IGNrX2hwX2ZpZm8gY2tf
aHBfZmlmb190OwotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX2hwX2ZpZm9faW5pdChz
dHJ1Y3QgY2tfaHBfZmlmbyAqZmlmbywgc3RydWN0IGNrX2hwX2ZpZm9fZW50cnkgKnN0dWIpCi17
Ci0KLQlmaWZvLT5oZWFkID0gZmlmby0+dGFpbCA9IHN0dWI7Ci0Jc3R1Yi0+bmV4dCA9IE5VTEw7
Ci0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX2hwX2ZpZm9fZGVp
bml0KHN0cnVjdCBja19ocF9maWZvICpmaWZvLCBzdHJ1Y3QgY2tfaHBfZmlmb19lbnRyeSAqKnN0
dWIpCi17Ci0KLQkqc3R1YiA9IGZpZm8tPmhlYWQ7Ci0JZmlmby0+aGVhZCA9IGZpZm8tPnRhaWwg
PSBOVUxMOwotCXJldHVybjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19ocF9m
aWZvX2VucXVldWVfbXBtYyhja19ocF9yZWNvcmRfdCAqcmVjb3JkLAotCQkJc3RydWN0IGNrX2hw
X2ZpZm8gKmZpZm8sCi0JCQlzdHJ1Y3QgY2tfaHBfZmlmb19lbnRyeSAqZW50cnksCi0JCQl2b2lk
ICp2YWx1ZSkKLXsKLQlzdHJ1Y3QgY2tfaHBfZmlmb19lbnRyeSAqdGFpbCwgKm5leHQ7Ci0KLQll
bnRyeS0+dmFsdWUgPSB2YWx1ZTsKLQllbnRyeS0+bmV4dCA9IE5VTEw7Ci0JY2tfcHJfZmVuY2Vf
c3RvcmVfYXRvbWljKCk7Ci0KLQlmb3IgKDs7KSB7Ci0JCXRhaWwgPSBja19wcl9sb2FkX3B0cigm
Zmlmby0+dGFpbCk7Ci0JCWNrX2hwX3NldF9mZW5jZShyZWNvcmQsIDAsIHRhaWwpOwotCQlpZiAo
dGFpbCAhPSBja19wcl9sb2FkX3B0cigmZmlmby0+dGFpbCkpCi0JCQljb250aW51ZTsKLQotCQlu
ZXh0ID0gY2tfcHJfbG9hZF9wdHIoJnRhaWwtPm5leHQpOwotCQlpZiAobmV4dCAhPSBOVUxMKSB7
Ci0JCQlja19wcl9jYXNfcHRyKCZmaWZvLT50YWlsLCB0YWlsLCBuZXh0KTsKLQkJCWNvbnRpbnVl
OwotCQl9IGVsc2UgaWYgKGNrX3ByX2Nhc19wdHIoJmZpZm8tPnRhaWwtPm5leHQsIG5leHQsIGVu
dHJ5KSA9PSB0cnVlKQotCQkJYnJlYWs7Ci0JfQotCi0JY2tfcHJfZmVuY2VfYXRvbWljKCk7Ci0J
Y2tfcHJfY2FzX3B0cigmZmlmby0+dGFpbCwgdGFpbCwgZW50cnkpOwotCXJldHVybjsKLX0KLQot
Q0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19ocF9maWZvX3RyeWVucXVldWVfbXBtYyhja19o
cF9yZWNvcmRfdCAqcmVjb3JkLAotCQkJICAgc3RydWN0IGNrX2hwX2ZpZm8gKmZpZm8sCi0JCQkg
ICBzdHJ1Y3QgY2tfaHBfZmlmb19lbnRyeSAqZW50cnksCi0JCQkgICB2b2lkICp2YWx1ZSkKLXsK
LQlzdHJ1Y3QgY2tfaHBfZmlmb19lbnRyeSAqdGFpbCwgKm5leHQ7Ci0KLQllbnRyeS0+dmFsdWUg
PSB2YWx1ZTsKLQllbnRyeS0+bmV4dCA9IE5VTEw7Ci0JY2tfcHJfZmVuY2Vfc3RvcmVfYXRvbWlj
KCk7Ci0KLQl0YWlsID0gY2tfcHJfbG9hZF9wdHIoJmZpZm8tPnRhaWwpOwotCWNrX2hwX3NldF9m
ZW5jZShyZWNvcmQsIDAsIHRhaWwpOwotCWlmICh0YWlsICE9IGNrX3ByX2xvYWRfcHRyKCZmaWZv
LT50YWlsKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JbmV4dCA9IGNrX3ByX2xvYWRfcHRyKCZ0YWls
LT5uZXh0KTsKLQlpZiAobmV4dCAhPSBOVUxMKSB7Ci0JCWNrX3ByX2Nhc19wdHIoJmZpZm8tPnRh
aWwsIHRhaWwsIG5leHQpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIGlmIChja19wcl9jYXNf
cHRyKCZmaWZvLT50YWlsLT5uZXh0LCBuZXh0LCBlbnRyeSkgPT0gZmFsc2UpCi0JCXJldHVybiBm
YWxzZTsKLQotCWNrX3ByX2ZlbmNlX2F0b21pYygpOwotCWNrX3ByX2Nhc19wdHIoJmZpZm8tPnRh
aWwsIHRhaWwsIGVudHJ5KTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRp
YyBzdHJ1Y3QgY2tfaHBfZmlmb19lbnRyeSAqCi1ja19ocF9maWZvX2RlcXVldWVfbXBtYyhja19o
cF9yZWNvcmRfdCAqcmVjb3JkLAotCQkJc3RydWN0IGNrX2hwX2ZpZm8gKmZpZm8sCi0JCQl2b2lk
ICp2YWx1ZSkKLXsKLQlzdHJ1Y3QgY2tfaHBfZmlmb19lbnRyeSAqaGVhZCwgKnRhaWwsICpuZXh0
OwotCi0JZm9yICg7OykgewotCQloZWFkID0gY2tfcHJfbG9hZF9wdHIoJmZpZm8tPmhlYWQpOwot
CQlja19wcl9mZW5jZV9sb2FkKCk7Ci0JCXRhaWwgPSBja19wcl9sb2FkX3B0cigmZmlmby0+dGFp
bCk7Ci0JCWNrX2hwX3NldF9mZW5jZShyZWNvcmQsIDAsIGhlYWQpOwotCQlpZiAoaGVhZCAhPSBj
a19wcl9sb2FkX3B0cigmZmlmby0+aGVhZCkpCi0JCQljb250aW51ZTsKLQotCQluZXh0ID0gY2tf
cHJfbG9hZF9wdHIoJmhlYWQtPm5leHQpOwotCQlja19ocF9zZXRfZmVuY2UocmVjb3JkLCAxLCBu
ZXh0KTsKLQkJaWYgKGhlYWQgIT0gY2tfcHJfbG9hZF9wdHIoJmZpZm8tPmhlYWQpKQotCQkJY29u
dGludWU7Ci0KLQkJaWYgKGhlYWQgPT0gdGFpbCkgewotCQkJaWYgKG5leHQgPT0gTlVMTCkKLQkJ
CQlyZXR1cm4gTlVMTDsKLQotCQkJY2tfcHJfY2FzX3B0cigmZmlmby0+dGFpbCwgdGFpbCwgbmV4
dCk7Ci0JCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChja19wcl9jYXNfcHRyKCZmaWZvLT5oZWFk
LCBoZWFkLCBuZXh0KSA9PSB0cnVlKQotCQkJYnJlYWs7Ci0JfQotCi0JY2tfcHJfc3RvcmVfcHRy
X3Vuc2FmZSh2YWx1ZSwgbmV4dC0+dmFsdWUpOwotCXJldHVybiBoZWFkOwotfQotCi1DS19DQ19J
TkxJTkUgc3RhdGljIHN0cnVjdCBja19ocF9maWZvX2VudHJ5ICoKLWNrX2hwX2ZpZm9fdHJ5ZGVx
dWV1ZV9tcG1jKGNrX2hwX3JlY29yZF90ICpyZWNvcmQsCi0JCQkgICBzdHJ1Y3QgY2tfaHBfZmlm
byAqZmlmbywKLQkJCSAgIHZvaWQgKnZhbHVlKQotewotCXN0cnVjdCBja19ocF9maWZvX2VudHJ5
ICpoZWFkLCAqdGFpbCwgKm5leHQ7Ci0KLQloZWFkID0gY2tfcHJfbG9hZF9wdHIoJmZpZm8tPmhl
YWQpOwotCWNrX3ByX2ZlbmNlX2xvYWQoKTsKLQl0YWlsID0gY2tfcHJfbG9hZF9wdHIoJmZpZm8t
PnRhaWwpOwotCWNrX2hwX3NldF9mZW5jZShyZWNvcmQsIDAsIGhlYWQpOwotCWlmIChoZWFkICE9
IGNrX3ByX2xvYWRfcHRyKCZmaWZvLT5oZWFkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQluZXh0ID0g
Y2tfcHJfbG9hZF9wdHIoJmhlYWQtPm5leHQpOwotCWNrX2hwX3NldF9mZW5jZShyZWNvcmQsIDEs
IG5leHQpOwotCWlmIChoZWFkICE9IGNrX3ByX2xvYWRfcHRyKCZmaWZvLT5oZWFkKSkKLQkJcmV0
dXJuIE5VTEw7Ci0KLQlpZiAoaGVhZCA9PSB0YWlsKSB7Ci0JCWlmIChuZXh0ID09IE5VTEwpCi0J
CQlyZXR1cm4gTlVMTDsKLQotCQlja19wcl9jYXNfcHRyKCZmaWZvLT50YWlsLCB0YWlsLCBuZXh0
KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfSBlbHNlIGlmIChja19wcl9jYXNfcHRyKCZmaWZvLT5oZWFk
LCBoZWFkLCBuZXh0KSA9PSBmYWxzZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlja19wcl9zdG9yZV9w
dHJfdW5zYWZlKHZhbHVlLCBuZXh0LT52YWx1ZSk7Ci0JcmV0dXJuIGhlYWQ7Ci19Ci0KLSNkZWZp
bmUgQ0tfSFBfRklGT19JU0VNUFRZKGYpICgoZiktPmhlYWQtPm5leHQgPT0gTlVMTCkKLSNkZWZp
bmUgQ0tfSFBfRklGT19GSVJTVChmKSAgICgoZiktPmhlYWQtPm5leHQpCi0jZGVmaW5lIENLX0hQ
X0ZJRk9fTkVYVChtKSAgICAoKG0pLT5uZXh0KQotI2RlZmluZSBDS19IUF9GSUZPX0ZPUkVBQ0go
ZmlmbywgZW50cnkpICAgICAgICAgICAgICAgICAgICAgICAJXAotICAgICAgICBmb3IgKChlbnRy
eSkgPSBDS19IUF9GSUZPX0ZJUlNUKGZpZm8pOyAgICAgICAgICAgICAgICAJXAotICAgICAgICAg
ICAgIChlbnRyeSkgIT0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgICAoZW50cnkpID0gQ0tfSFBfRklGT19ORVhUKGVudHJ5KSkKLSNkZWZpbmUg
Q0tfSFBfRklGT19GT1JFQUNIX1NBRkUoZmlmbywgZW50cnksIFQpCQkJXAotICAgICAgICBmb3Ig
KChlbnRyeSkgPSBDS19IUF9GSUZPX0ZJUlNUKGZpZm8pOwkJCVwKLSAgICAgICAgICAgICAoZW50
cnkpICE9IE5VTEwgJiYgKChUKSA9IChlbnRyeSktPm5leHQsIDEpOwlcCi0gICAgICAgICAgICAg
KGVudHJ5KSA9IChUKSkKLQotI2VuZGlmIC8qIENLX0hQX0ZJRk9fSCAqLwpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19ocF9zdGFjay5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19ocF9zdGFjay5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjVhMWUzMWJlZTY3ZDE0ZDA5ZjFmYTdmYWIz
OWEyZTRjMWQ5YTQxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfaHBfc3RhY2su
aAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAt
MjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
Ci0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IENLX0hQX1NUQUNLX0gKLSNkZWZpbmUgQ0tfSFBfU1RBQ0tfSAotCi0jaW5jbHVkZSA8Y2tfY2Mu
aD4KLSNpbmNsdWRlIDxja19ocC5oPgotI2luY2x1ZGUgPGNrX3ByLmg+Ci0jaW5jbHVkZSA8Y2tf
c3RhY2suaD4KLSNpbmNsdWRlIDxja19zdGRkZWYuaD4KLQotI2RlZmluZSBDS19IUF9TVEFDS19T
TE9UU19DT1VOVCAxCi0jZGVmaW5lIENLX0hQX1NUQUNLX1NMT1RTX1NJWkUgIHNpemVvZih2b2lk
ICopCi0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfaHBfc3RhY2tfcHVzaF9tcG1jKHN0
cnVjdCBja19zdGFjayAqdGFyZ2V0LCBzdHJ1Y3QgY2tfc3RhY2tfZW50cnkgKmVudHJ5KQotewot
Ci0JY2tfc3RhY2tfcHVzaF91cG1jKHRhcmdldCwgZW50cnkpOwotCXJldHVybjsKLX0KLQotQ0tf
Q0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19ocF9zdGFja190cnlwdXNoX21wbWMoc3RydWN0IGNr
X3N0YWNrICp0YXJnZXQsIHN0cnVjdCBja19zdGFja19lbnRyeSAqZW50cnkpCi17Ci0KLQlyZXR1
cm4gY2tfc3RhY2tfdHJ5cHVzaF91cG1jKHRhcmdldCwgZW50cnkpOwotfQotCi1DS19DQ19JTkxJ
TkUgc3RhdGljIHN0cnVjdCBja19zdGFja19lbnRyeSAqCi1ja19ocF9zdGFja19wb3BfbXBtYyhj
a19ocF9yZWNvcmRfdCAqcmVjb3JkLCBzdHJ1Y3QgY2tfc3RhY2sgKnRhcmdldCkKLXsKLQlzdHJ1
Y3QgY2tfc3RhY2tfZW50cnkgKmVudHJ5LCAqdXBkYXRlOwotCi0JZG8gewotCQllbnRyeSA9IGNr
X3ByX2xvYWRfcHRyKCZ0YXJnZXQtPmhlYWQpOwotCQlpZiAoZW50cnkgPT0gTlVMTCkKLQkJCXJl
dHVybiBOVUxMOwotCi0JCWNrX2hwX3NldF9mZW5jZShyZWNvcmQsIDAsIGVudHJ5KTsKLQl9IHdo
aWxlIChlbnRyeSAhPSBja19wcl9sb2FkX3B0cigmdGFyZ2V0LT5oZWFkKSk7Ci0KLQl3aGlsZSAo
Y2tfcHJfY2FzX3B0cl92YWx1ZSgmdGFyZ2V0LT5oZWFkLCBlbnRyeSwgZW50cnktPm5leHQsICZl
bnRyeSkgPT0gZmFsc2UpIHsKLQkJaWYgKGVudHJ5ID09IE5VTEwpCi0JCQlyZXR1cm4gTlVMTDsK
LQotCQlja19ocF9zZXRfZmVuY2UocmVjb3JkLCAwLCBlbnRyeSk7Ci0KLQkJdXBkYXRlID0gY2tf
cHJfbG9hZF9wdHIoJnRhcmdldC0+aGVhZCk7Ci0JCXdoaWxlIChlbnRyeSAhPSB1cGRhdGUpIHsK
LQkJCWNrX2hwX3NldF9mZW5jZShyZWNvcmQsIDAsIHVwZGF0ZSk7Ci0JCQllbnRyeSA9IHVwZGF0
ZTsKLQkJCXVwZGF0ZSA9IGNrX3ByX2xvYWRfcHRyKCZ0YXJnZXQtPmhlYWQpOwotCQkJaWYgKHVw
ZGF0ZSA9PSBOVUxMKQotCQkJCXJldHVybiBOVUxMOwotCQl9Ci0JfQotCi0JcmV0dXJuIGVudHJ5
OwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wKLWNrX2hwX3N0YWNrX3RyeXBvcF9tcG1j
KGNrX2hwX3JlY29yZF90ICpyZWNvcmQsIHN0cnVjdCBja19zdGFjayAqdGFyZ2V0LCBzdHJ1Y3Qg
Y2tfc3RhY2tfZW50cnkgKipyKQotewotCXN0cnVjdCBja19zdGFja19lbnRyeSAqZW50cnk7Ci0K
LQllbnRyeSA9IGNrX3ByX2xvYWRfcHRyKCZ0YXJnZXQtPmhlYWQpOwotCWlmIChlbnRyeSA9PSBO
VUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlja19ocF9zZXRfZmVuY2UocmVjb3JkLCAwLCBlbnRy
eSk7Ci0JaWYgKGVudHJ5ICE9IGNrX3ByX2xvYWRfcHRyKCZ0YXJnZXQtPmhlYWQpKQotCQlnb3Rv
IGxlYXZlOwotCi0JaWYgKGNrX3ByX2Nhc19wdHJfdmFsdWUoJnRhcmdldC0+aGVhZCwgZW50cnks
IGVudHJ5LT5uZXh0LCAmZW50cnkpID09IGZhbHNlKQotCQlnb3RvIGxlYXZlOwotCi0JKnIgPSBl
bnRyeTsKLQlyZXR1cm4gdHJ1ZTsKLQotbGVhdmU6Ci0JY2tfaHBfc2V0KHJlY29yZCwgMCwgTlVM
TCk7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi0jZW5kaWYgLyogQ0tfSFBfU1RBQ0tfSCAqLwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19ocy5o
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19ocy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzEyYjZlNjAyYTdmYTk5N2Q0MTQ5Y2FlMTFmOWQx
ZjU2ODllMTEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfaHMuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTItMjAxNSBTYW15
IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0g
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENLX0hTX0gK
LSNkZWZpbmUgQ0tfSFNfSAotCi0jaW5jbHVkZSA8Y2tfY2MuaD4KLSNpbmNsdWRlIDxja19tYWxs
b2MuaD4KLSNpbmNsdWRlIDxja19tZC5oPgotI2luY2x1ZGUgPGNrX3ByLmg+Ci0jaW5jbHVkZSA8
Y2tfc3RkaW50Lmg+Ci0jaW5jbHVkZSA8Y2tfc3RkYm9vbC5oPgotI2luY2x1ZGUgPGNrX3N0ZGRl
Zi5oPgotCi0vKgotICogSW5kaWNhdGVzIGEgc2luZ2xlLXdyaXRlciBtYW55LXJlYWRlciB3b3Jr
bG9hZC4gTXV0dWFsbHkKLSAqIGV4Y2x1c2l2ZSB3aXRoIENLX0hTX01PREVfTVBNQwotICovCi0j
ZGVmaW5lIENLX0hTX01PREVfU1BNQwkJMQotCi0vKgotICogSW5kaWNhdGVzIHRoYXQgdmFsdWVz
IHRvIGJlIHN0b3JlZCBhcmUgbm90IHBvaW50ZXJzIGJ1dAotICogdmFsdWVzLiBBbGxvd3MgZm9y
IGZ1bGwgcHJlY2lzaW9uLiBNdXR1YWxseSBleGNsdXNpdmUKLSAqIHdpdGggQ0tfSFNfTU9ERV9P
QkpFQ1QuCi0gKi8KLSNkZWZpbmUgQ0tfSFNfTU9ERV9ESVJFQ1QJMgotCi0vKgotICogSW5kaWNh
dGVzIHRoYXQgdGhlIHZhbHVlcyB0byBiZSBzdG9yZWQgYXJlIHBvaW50ZXJzLgotICogQWxsb3dz
IGZvciBzcGFjZSBvcHRpbWl6YXRpb25zIGluIHRoZSBwcmVzZW5jZSBvZiBwb2ludGVyCi0gKiBw
YWNraW5nLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBDS19IU19NT0RFX0RJUkVDVC4KLSAqLwot
I2RlZmluZSBDS19IU19NT0RFX09CSkVDVAk4Ci0KLS8qCi0gKiBJbmRpY2F0ZXMgYSBkZWxldGUt
aGVhdnkgd29ya2xvYWQuIFRoaXMgd2lsbCByZWR1Y2UgdGhlCi0gKiBuZWVkIGZvciBnYXJiYWdl
IGNvbGxlY3Rpb24gYXQgdGhlIGNvc3Qgb2YgYXBwcm94aW1hdGVseQotICogMTIlIHRvIDIwJSBp
bmNyZWFzZWQgbWVtb3J5IHVzYWdlLgotICovCi0jZGVmaW5lIENLX0hTX01PREVfREVMRVRFCTE2
Ci0KLS8qIEN1cnJlbnRseSB1bnN1cHBvcnRlZC4gKi8KLSNkZWZpbmUgQ0tfSFNfTU9ERV9NUE1D
ICAgICh2b2lkKQotCi0vKgotICogSGFzaCBjYWxsYmFjayBmdW5jdGlvbi4KLSAqLwotdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIGNrX2hzX2hhc2hfY2JfdChjb25zdCB2b2lkICosIHVuc2lnbmVkIGxv
bmcpOwotCi0vKgotICogUmV0dXJucyBwb2ludGVyIHRvIG9iamVjdCBpZiBvYmplY3RzIGFyZSBl
cXVpdmFsZW50LgotICovCi10eXBlZGVmIGJvb2wgY2tfaHNfY29tcGFyZV9jYl90KGNvbnN0IHZv
aWQgKiwgY29uc3Qgdm9pZCAqKTsKLQotI2lmIGRlZmluZWQoQ0tfTURfUE9JTlRFUl9QQUNLX0VO
QUJMRSkgJiYgZGVmaW5lZChDS19NRF9WTUFfQklUUykKLSNkZWZpbmUgQ0tfSFNfUFAKLSNkZWZp
bmUgQ0tfSFNfS0VZX01BU0sgKCgxVSA8PCAoKHNpemVvZih2b2lkICopICogOCkgLSBDS19NRF9W
TUFfQklUUykpIC0gMSkKLSNlbmRpZgotCi1zdHJ1Y3QgY2tfaHNfbWFwOwotc3RydWN0IGNrX2hz
IHsKLQlzdHJ1Y3QgY2tfbWFsbG9jICptOwotCXN0cnVjdCBja19oc19tYXAgKm1hcDsKLQl1bnNp
Z25lZCBpbnQgbW9kZTsKLQl1bnNpZ25lZCBsb25nIHNlZWQ7Ci0JY2tfaHNfaGFzaF9jYl90ICpo
ZjsKLQlja19oc19jb21wYXJlX2NiX3QgKmNvbXBhcmU7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tf
aHMgY2tfaHNfdDsKLQotc3RydWN0IGNrX2hzX3N0YXQgewotCXVuc2lnbmVkIGxvbmcgdG9tYnN0
b25lczsKLQl1bnNpZ25lZCBsb25nIG5fZW50cmllczsKLQl1bnNpZ25lZCBpbnQgcHJvYmVfbWF4
aW11bTsKLX07Ci0KLXN0cnVjdCBja19oc19pdGVyYXRvciB7Ci0Jdm9pZCAqKmN1cnNvcjsKLQl1
bnNpZ25lZCBsb25nIG9mZnNldDsKLQlzdHJ1Y3QgY2tfaHNfbWFwICptYXA7Ci19OwotdHlwZWRl
ZiBzdHJ1Y3QgY2tfaHNfaXRlcmF0b3IgY2tfaHNfaXRlcmF0b3JfdDsKLQotI2RlZmluZSBDS19I
U19JVEVSQVRPUl9JTklUSUFMSVpFUiB7IE5VTEwsIDAsIE5VTEwgfQotCi0vKiBDb252ZW5pZW5j
ZSB3cmFwcGVyIHRvIHRhYmxlIGhhc2ggZnVuY3Rpb24uICovCi0jZGVmaW5lIENLX0hTX0hBU0go
VCwgRiwgSykgRigoSyksIChUKS0+c2VlZCkKLQotdHlwZWRlZiB2b2lkICpja19oc19hcHBseV9m
bl90KHZvaWQgKiwgdm9pZCAqKTsKLWJvb2wgY2tfaHNfYXBwbHkoY2tfaHNfdCAqLCB1bnNpZ25l
ZCBsb25nLCBjb25zdCB2b2lkICosIGNrX2hzX2FwcGx5X2ZuX3QgKiwgdm9pZCAqKTsKLXZvaWQg
Y2tfaHNfaXRlcmF0b3JfaW5pdChja19oc19pdGVyYXRvcl90ICopOwotYm9vbCBja19oc19uZXh0
KGNrX2hzX3QgKiwgY2tfaHNfaXRlcmF0b3JfdCAqLCB2b2lkICoqKTsKLWJvb2wgY2tfaHNfbmV4
dF9zcG1jKGNrX2hzX3QgKiwgY2tfaHNfaXRlcmF0b3JfdCAqLCB2b2lkICoqKTsKLWJvb2wgY2tf
aHNfbW92ZShja19oc190ICosIGNrX2hzX3QgKiwgY2tfaHNfaGFzaF9jYl90ICosCi0gICAgY2tf
aHNfY29tcGFyZV9jYl90ICosIHN0cnVjdCBja19tYWxsb2MgKik7Ci1ib29sIGNrX2hzX2luaXQo
Y2tfaHNfdCAqLCB1bnNpZ25lZCBpbnQsIGNrX2hzX2hhc2hfY2JfdCAqLAotICAgIGNrX2hzX2Nv
bXBhcmVfY2JfdCAqLCBzdHJ1Y3QgY2tfbWFsbG9jICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcpOwotdm9pZCBja19oc19kZXN0cm95KGNrX2hzX3QgKik7Ci12b2lkICpja19oc19nZXQo
Y2tfaHNfdCAqLCB1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICopOwotYm9vbCBja19oc19wdXQo
Y2tfaHNfdCAqLCB1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICopOwotYm9vbCBja19oc19wdXRf
dW5pcXVlKGNrX2hzX3QgKiwgdW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqKTsKLWJvb2wgY2tf
aHNfc2V0KGNrX2hzX3QgKiwgdW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqLCB2b2lkICoqKTsK
LWJvb2wgY2tfaHNfZmFzKGNrX2hzX3QgKiwgdW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqLCB2
b2lkICoqKTsKLXZvaWQgKmNrX2hzX3JlbW92ZShja19oc190ICosIHVuc2lnbmVkIGxvbmcsIGNv
bnN0IHZvaWQgKik7Ci1ib29sIGNrX2hzX2dyb3coY2tfaHNfdCAqLCB1bnNpZ25lZCBsb25nKTsK
LWJvb2wgY2tfaHNfcmVidWlsZChja19oc190ICopOwotYm9vbCBja19oc19nYyhja19oc190ICos
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotdW5zaWduZWQgbG9uZyBja19oc19jb3Vu
dChja19oc190ICopOwotYm9vbCBja19oc19yZXNldChja19oc190ICopOwotYm9vbCBja19oc19y
ZXNldF9zaXplKGNrX2hzX3QgKiwgdW5zaWduZWQgbG9uZyk7Ci12b2lkIGNrX2hzX3N0YXQoY2tf
aHNfdCAqLCBzdHJ1Y3QgY2tfaHNfc3RhdCAqKTsKLQotI2VuZGlmIC8qIENLX0hTX0ggKi8KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfaHQu
aCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfaHQuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk0OWQzMGYxNjMwMWVjYTA5ZmY3M2VkOWZhNjM3
MWNlYWRhZjJkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX2h0LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEyLTIwMTUgU2Ft
eSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICog
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQot
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDS19IVF9I
Ci0jZGVmaW5lIENLX0hUX0gKLQotI2luY2x1ZGUgPGNrX3ByLmg+Ci0KLSNkZWZpbmUgQ0tfRl9I
VAotI2lmIGRlZmluZWQoQ0tfRl9QUl9MT0FEXzY0KSAmJiBkZWZpbmVkKENLX0ZfUFJfU1RPUkVf
NjQpCi0jZGVmaW5lIENLX0hUX1RZUEUgdWludDY0X3QKLSNkZWZpbmUgQ0tfSFRfVFlQRV9MT0FE
CQlja19wcl9sb2FkXzY0Ci0jZGVmaW5lIENLX0hUX1RZUEVfU1RPUkUgCWNrX3ByX3N0b3JlXzY0
Ci0jZGVmaW5lIENLX0hUX1RZUEVfTUFYCQlVSU5UNjRfTUFYCi0jZWxzZQotI2RlZmluZSBDS19I
VF9UWVBFIHVpbnQzMl90Ci0jZGVmaW5lIENLX0hUX1RZUEVfTE9BRAkJY2tfcHJfbG9hZF8zMgot
I2RlZmluZSBDS19IVF9UWVBFX1NUT1JFCWNrX3ByX3N0b3JlXzMyCi0jZGVmaW5lIENLX0hUX1RZ
UEVfTUFYCQlVSU5UMzJfTUFYCi0jZW5kaWYKLQotCi0jaW5jbHVkZSA8Y2tfY2MuaD4KLSNpbmNs
dWRlIDxja19tYWxsb2MuaD4KLSNpbmNsdWRlIDxja19tZC5oPgotI2luY2x1ZGUgPGNrX3N0ZGlu
dC5oPgotI2luY2x1ZGUgPGNrX3N0ZGJvb2wuaD4KLSNpbmNsdWRlIDxja19zdGRkZWYuaD4KLQot
c3RydWN0IGNrX2h0X2hhc2ggewotCXVpbnQ2NF90IHZhbHVlOwotfTsKLXR5cGVkZWYgc3RydWN0
IGNrX2h0X2hhc2ggY2tfaHRfaGFzaF90OwotCi0jZGVmaW5lIENLX0hUX01PREVfRElSRUNUCTFV
Ci0jZGVmaW5lIENLX0hUX01PREVfQllURVNUUklORwkyVQotI2RlZmluZSBDS19IVF9XT1JLTE9B
RF9ERUxFVEUJNFUKLQotI2lmIGRlZmluZWQoQ0tfTURfUE9JTlRFUl9QQUNLX0VOQUJMRSkgJiYg
ZGVmaW5lZChDS19NRF9WTUFfQklUUykKLSNkZWZpbmUgQ0tfSFRfUFAKLSNkZWZpbmUgQ0tfSFRf
S0VZX0xFTkdUSCAoKHNpemVvZih2b2lkICopICogOCkgLSBDS19NRF9WTUFfQklUUykKLSNkZWZp
bmUgQ0tfSFRfS0VZX01BU0sgICAoKDFVIDw8IENLX0hUX0tFWV9MRU5HVEgpIC0gMSkKLSNlbHNl
Ci0jZGVmaW5lIENLX0hUX0tFWV9MRU5HVEggNjU1MzVVCi0jZW5kaWYKLQotc3RydWN0IGNrX2h0
X2VudHJ5IHsKLSNpZmRlZiBDS19IVF9QUAotCXVpbnRwdHJfdCBrZXk7Ci0JdWludHB0cl90IHZh
bHVlIENLX0NDX1BBQ0tFRDsKLX0gQ0tfQ0NfQUxJR04oMTYpOwotI2Vsc2UKLQl1aW50cHRyX3Qg
a2V5OwotCXVpbnRwdHJfdCB2YWx1ZTsKLQlDS19IVF9UWVBFIGtleV9sZW5ndGg7Ci0JQ0tfSFRf
VFlQRSBoYXNoOwotfSBDS19DQ19BTElHTigzMik7Ci0jZW5kaWYKLXR5cGVkZWYgc3RydWN0IGNr
X2h0X2VudHJ5IGNrX2h0X2VudHJ5X3Q7Ci0KLS8qCi0gKiBUaGUgdXNlciBpcyBmcmVlIHRvIGRl
ZmluZSB0aGVpciBvd24gc3R1YiB2YWx1ZXMuCi0gKi8KLSNpZm5kZWYgQ0tfSFRfS0VZX0VNUFRZ
Ci0jZGVmaW5lIENLX0hUX0tFWV9FTVBUWQkJKCh1aW50cHRyX3QpMCkKLSNlbmRpZgotCi0jaWZu
ZGVmIENLX0hUX0tFWV9UT01CU1RPTkUKLSNkZWZpbmUgQ0tfSFRfS0VZX1RPTUJTVE9ORQkofkNL
X0hUX0tFWV9FTVBUWSkKLSNlbmRpZgotCi0vKgotICogSGFzaCBjYWxsYmFjayBmdW5jdGlvbi4g
Rmlyc3QgYXJndW1lbnQgaXMgdXBkYXRlZCB0byBjb250YWluIGEgaGFzaCB2YWx1ZSwKLSAqIHNl
Y29uZCBhcmd1bWVudCBpcyB0aGUga2V5LCB0aGlyZCBhcmd1bWVudCBpcyBrZXkgbGVuZ3RoIGFu
ZCBmaW5hbCBhcmd1bWVudAotICogaXMgdGhlIGhhc2ggdGFibGUgc2VlZCB2YWx1ZS4KLSAqLwot
dHlwZWRlZiB2b2lkIGNrX2h0X2hhc2hfY2JfdChja19odF9oYXNoX3QgKiwgY29uc3Qgdm9pZCAq
LCBzaXplX3QsIHVpbnQ2NF90KTsKLQotc3RydWN0IGNrX2h0X21hcDsKLXN0cnVjdCBja19odCB7
Ci0Jc3RydWN0IGNrX21hbGxvYyAqbTsKLQlzdHJ1Y3QgY2tfaHRfbWFwICptYXA7Ci0JdW5zaWdu
ZWQgaW50IG1vZGU7Ci0JdWludDY0X3Qgc2VlZDsKLQlja19odF9oYXNoX2NiX3QgKmg7Ci19Owot
dHlwZWRlZiBzdHJ1Y3QgY2tfaHQgY2tfaHRfdDsKLQotc3RydWN0IGNrX2h0X3N0YXQgewotCXVp
bnQ2NF90IHByb2JlX21heGltdW07Ci0JdWludDY0X3Qgbl9lbnRyaWVzOwotfTsKLQotc3RydWN0
IGNrX2h0X2l0ZXJhdG9yIHsKLQlzdHJ1Y3QgY2tfaHRfZW50cnkgKmN1cnJlbnQ7Ci0JdWludDY0
X3Qgb2Zmc2V0OwotfTsKLXR5cGVkZWYgc3RydWN0IGNrX2h0X2l0ZXJhdG9yIGNrX2h0X2l0ZXJh
dG9yX3Q7Ci0KLSNkZWZpbmUgQ0tfSFRfSVRFUkFUT1JfSU5JVElBTElaRVIgeyBOVUxMLCAwIH0K
LQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19odF9pdGVyYXRvcl9pbml0KHN0cnVjdCBj
a19odF9pdGVyYXRvciAqaXRlcmF0b3IpCi17Ci0KLQlpdGVyYXRvci0+Y3VycmVudCA9IE5VTEw7
Ci0JaXRlcmF0b3ItPm9mZnNldCA9IDA7Ci0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJTkUgc3Rh
dGljIGJvb2wKLWNrX2h0X2VudHJ5X2VtcHR5KGNrX2h0X2VudHJ5X3QgKmVudHJ5KQotewotCi0J
cmV0dXJuIGVudHJ5LT5rZXkgPT0gQ0tfSFRfS0VZX0VNUFRZOwotfQotCi1DS19DQ19JTkxJTkUg
c3RhdGljIHZvaWQKLWNrX2h0X2VudHJ5X2tleV9zZXRfZGlyZWN0KGNrX2h0X2VudHJ5X3QgKmVu
dHJ5LCB1aW50cHRyX3Qga2V5KQotewotCi0JZW50cnktPmtleSA9IGtleTsKLQlyZXR1cm47Ci19
Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfaHRfZW50cnlfa2V5X3NldChja19odF9l
bnRyeV90ICplbnRyeSwgY29uc3Qgdm9pZCAqa2V5LCB1aW50MTZfdCBrZXlfbGVuZ3RoKQotewot
Ci0jaWZkZWYgQ0tfSFRfUFAKLQllbnRyeS0+a2V5ID0gKHVpbnRwdHJfdClrZXkgfCAoKHVpbnRw
dHJfdClrZXlfbGVuZ3RoIDw8IENLX01EX1ZNQV9CSVRTKTsKLSNlbHNlCi0JZW50cnktPmtleSA9
ICh1aW50cHRyX3Qpa2V5OwotCWVudHJ5LT5rZXlfbGVuZ3RoID0ga2V5X2xlbmd0aDsKLSNlbmRp
ZgotCi0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQgKgotY2tfaHRfZW50
cnlfa2V5KGNrX2h0X2VudHJ5X3QgKmVudHJ5KQotewotCi0jaWZkZWYgQ0tfSFRfUFAKLQlyZXR1
cm4gKHZvaWQgKikoZW50cnktPmtleSAmICgoKHVpbnRwdHJfdCkxIDw8IENLX01EX1ZNQV9CSVRT
KSAtIDEpKTsKLSNlbHNlCi0JcmV0dXJuICh2b2lkICopZW50cnktPmtleTsKLSNlbmRpZgotfQot
Ci1DS19DQ19JTkxJTkUgc3RhdGljIHVpbnQxNl90Ci1ja19odF9lbnRyeV9rZXlfbGVuZ3RoKGNr
X2h0X2VudHJ5X3QgKmVudHJ5KQotewotCi0jaWZkZWYgQ0tfSFRfUFAKLQlyZXR1cm4gZW50cnkt
PmtleSA+PiBDS19NRF9WTUFfQklUUzsKLSNlbHNlCi0JcmV0dXJuIGVudHJ5LT5rZXlfbGVuZ3Ro
OwotI2VuZGlmCi19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZCAqCi1ja19odF9lbnRyeV92
YWx1ZShja19odF9lbnRyeV90ICplbnRyeSkKLXsKLQotI2lmZGVmIENLX0hUX1BQCi0JcmV0dXJu
ICh2b2lkICopKGVudHJ5LT52YWx1ZSAmICgoKHVpbnRwdHJfdCkxIDw8IENLX01EX1ZNQV9CSVRT
KSAtIDEpKTsKLSNlbHNlCi0JcmV0dXJuICh2b2lkICopZW50cnktPnZhbHVlOwotI2VuZGlmCi19
Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfaHRfZW50cnlfc2V0KHN0cnVjdCBja19o
dF9lbnRyeSAqZW50cnksCi0JCWNrX2h0X2hhc2hfdCBoLAotCQljb25zdCB2b2lkICprZXksCi0J
CXVpbnQxNl90IGtleV9sZW5ndGgsCi0JCWNvbnN0IHZvaWQgKnZhbHVlKQotewotCi0jaWZkZWYg
Q0tfSFRfUFAKLQllbnRyeS0+a2V5ID0gKHVpbnRwdHJfdClrZXkgfCAoKHVpbnRwdHJfdClrZXlf
bGVuZ3RoIDw8IENLX01EX1ZNQV9CSVRTKTsKLQllbnRyeS0+dmFsdWUgPSAodWludHB0cl90KXZh
bHVlIHwgKCh1aW50cHRyX3QpKGgudmFsdWUgPj4gMzIpIDw8IENLX01EX1ZNQV9CSVRTKTsKLSNl
bHNlCi0JZW50cnktPmtleSA9ICh1aW50cHRyX3Qpa2V5OwotCWVudHJ5LT52YWx1ZSA9ICh1aW50
cHRyX3QpdmFsdWU7Ci0JZW50cnktPmtleV9sZW5ndGggPSBrZXlfbGVuZ3RoOwotCWVudHJ5LT5o
YXNoID0gaC52YWx1ZTsKLSNlbmRpZgotCi0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJTkUgc3Rh
dGljIHZvaWQKLWNrX2h0X2VudHJ5X3NldF9kaXJlY3Qoc3RydWN0IGNrX2h0X2VudHJ5ICplbnRy
eSwKLQkJICAgICAgIGNrX2h0X2hhc2hfdCBoLAotCQkgICAgICAgdWludHB0cl90IGtleSwKLQkJ
ICAgICAgIHVpbnRwdHJfdCB2YWx1ZSkKLXsKLQotCWVudHJ5LT5rZXkgPSBrZXk7Ci0JZW50cnkt
PnZhbHVlID0gdmFsdWU7Ci0KLSNpZm5kZWYgQ0tfSFRfUFAKLQllbnRyeS0+aGFzaCA9IGgudmFs
dWU7Ci0jZWxzZQotCSh2b2lkKWg7Ci0jZW5kaWYKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElO
RSBzdGF0aWMgdWludHB0cl90Ci1ja19odF9lbnRyeV9rZXlfZGlyZWN0KGNrX2h0X2VudHJ5X3Qg
KmVudHJ5KQotewotCi0JcmV0dXJuIGVudHJ5LT5rZXk7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0
aWMgdWludHB0cl90Ci1ja19odF9lbnRyeV92YWx1ZV9kaXJlY3QoY2tfaHRfZW50cnlfdCAqZW50
cnkpCi17Ci0KLQlyZXR1cm4gZW50cnktPnZhbHVlOwotfQotCi0vKgotICogSXRlcmF0aW9uIG11
c3Qgb2NjdXIgd2l0aG91dCBhbnkgY29uY3VycmVudCBtdXRhdGlvbnMgb24KLSAqIHRoZSBoYXNo
IHRhYmxlLgotICovCi1ib29sIGNrX2h0X25leHQoY2tfaHRfdCAqLCBja19odF9pdGVyYXRvcl90
ICosIGNrX2h0X2VudHJ5X3QgKiplbnRyeSk7Ci0KLXZvaWQgY2tfaHRfc3RhdChja19odF90ICos
IHN0cnVjdCBja19odF9zdGF0ICopOwotdm9pZCBja19odF9oYXNoKGNrX2h0X2hhc2hfdCAqLCBj
a19odF90ICosIGNvbnN0IHZvaWQgKiwgdWludDE2X3QpOwotdm9pZCBja19odF9oYXNoX2RpcmVj
dChja19odF9oYXNoX3QgKiwgY2tfaHRfdCAqLCB1aW50cHRyX3QpOwotYm9vbCBja19odF9pbml0
KGNrX2h0X3QgKiwgdW5zaWduZWQgaW50LCBja19odF9oYXNoX2NiX3QgKiwKLSAgICBzdHJ1Y3Qg
Y2tfbWFsbG9jICosIENLX0hUX1RZUEUsIHVpbnQ2NF90KTsKLXZvaWQgY2tfaHRfZGVzdHJveShj
a19odF90ICopOwotYm9vbCBja19odF9zZXRfc3BtYyhja19odF90ICosIGNrX2h0X2hhc2hfdCwg
Y2tfaHRfZW50cnlfdCAqKTsKLWJvb2wgY2tfaHRfcHV0X3NwbWMoY2tfaHRfdCAqLCBja19odF9o
YXNoX3QsIGNrX2h0X2VudHJ5X3QgKik7Ci1ib29sIGNrX2h0X2dldF9zcG1jKGNrX2h0X3QgKiwg
Y2tfaHRfaGFzaF90LCBja19odF9lbnRyeV90ICopOwotYm9vbCBja19odF9nYyhzdHJ1Y3QgY2tf
aHQgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci1ib29sIGNrX2h0X2dyb3dfc3Bt
Yyhja19odF90ICosIENLX0hUX1RZUEUpOwotYm9vbCBja19odF9yZW1vdmVfc3BtYyhja19odF90
ICosIGNrX2h0X2hhc2hfdCwgY2tfaHRfZW50cnlfdCAqKTsKLWJvb2wgY2tfaHRfcmVzZXRfc3Bt
Yyhja19odF90ICopOwotYm9vbCBja19odF9yZXNldF9zaXplX3NwbWMoY2tfaHRfdCAqLCBDS19I
VF9UWVBFKTsKLUNLX0hUX1RZUEUgY2tfaHRfY291bnQoY2tfaHRfdCAqKTsKLQotI2VuZGlmIC8q
IENLX0hUX0ggKi8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L2luY2x1ZGUvY2tfbGltaXRzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9p
bmNsdWRlL2NrX2xpbWl0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODc0OTU1
MDgyOWM2MGE2ZDc3MmNkNmEyNWJiYTE5ZTBlYjY5YThkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L2luY2x1ZGUvY2tfbGltaXRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IDIwMTAtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoX19LRVJORUxfXykK
LSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLQotI2lmbmRlZiBVSU5UOF9NQVgKLSNkZWZpbmUg
VUlOVDhfTUFYICgodTgpKH4wVSkpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDE2X01BWAotI2RlZmlu
ZSBVSU5UMTZfTUFYIFVTSFJUX01BWAotI2VuZGlmCi0jaWZuZGVmIFVJTlQzMl9NQVgKLSNkZWZp
bmUgVUlOVDMyX01BWCBVSU5UX01BWAotI2VuZGlmCi0jaWZuZGVmIFVJTlQ2NF9NQVgKLSNkZWZp
bmUgVUlOVDY0X01BWCBVTExPTkdfTUFYCi0jZW5kaWYKLQotI2VsaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgZGVmaW5lZChfS0VSTkVMKQotI2luY2x1ZGUgPHN5cy9zdGRpbnQuaD4KLSNpbmNs
dWRlIDxzeXMvbGltaXRzLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2VuZGlmIC8q
IF9fbGludXhfXyAmJiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX21hbGxvYy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19tYWxsb2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTE0ZGRlMzhkZjQxOTU3ZTc5NTQ3ZjVlYjEyODc3YWU2N2VkYzEyNy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX21hbGxvYy5oCisrKyAvZGV2L251bGwKQEAgLTEs
MzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEyLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0g
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDS19NQUxMT0NfSAotI2RlZmluZSBD
S19NQUxMT0NfSAotCi0jaW5jbHVkZSA8Y2tfc3RkYm9vbC5oPgotI2luY2x1ZGUgPHN5cy90eXBl
cy5oPgotCi1zdHJ1Y3QgY2tfbWFsbG9jIHsKLQl2b2lkICooKm1hbGxvYykoc2l6ZV90KTsKLQl2
b2lkICooKnJlYWxsb2MpKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIGJvb2wpOwotCXZvaWQgKCpm
cmVlKSh2b2lkICosIHNpemVfdCwgYm9vbCk7Ci19OwotCi0jZW5kaWYgLyogQ0tfTUFMTE9DX0gg
Ki8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUv
Y2tfbWQuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfbWQu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M2MDZmYWI4ZjY5ZGUzYmQ2NmJlMjIy
NTc4ZmIxNTE0YjI2YWFjMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX21kLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEtMjAx
MiBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0g
KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
Ci0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENL
X01EX0gKLSNkZWZpbmUgQ0tfTURfSAotCi0jaWZuZGVmIENLX01EX0NBQ0hFTElORQotI2RlZmlu
ZSBDS19NRF9DQUNIRUxJTkUgKDY0KQotI2VuZGlmCi0KLSNpZm5kZWYgQ0tfTURfUEFHRVNJWkUK
LSNkZWZpbmUgQ0tfTURfUEFHRVNJWkUgKDQwOTYpCi0jZW5kaWYKLQotI2lmbmRlZiBDS19NRF9S
VE1fRElTQUJMRQotI2RlZmluZSBDS19NRF9SVE1fRElTQUJMRQotI2VuZGlmIC8qIENLX01EX1JU
TV9ESVNBQkxFICovCi0KLSNpZm5kZWYgQ0tfTURfTFNFX0RJU0FCTEUKLSNkZWZpbmUgQ0tfTURf
TFNFX0RJU0FCTEUKLSNlbmRpZiAvKiBDS19NRF9MU0VfRElTQUJMRSAqLwotCi0jaWZuZGVmIENL
X01EX1BPSU5URVJfUEFDS19ESVNBQkxFCi0jZGVmaW5lIENLX01EX1BPSU5URVJfUEFDS19ESVNB
QkxFCi0jZW5kaWYgLyogQ0tfTURfUE9JTlRFUl9QQUNLX0RJU0FCTEUgKi8KLQotI2lmbmRlZiBD
S19NRF9WTUFfQklUUyAKLSNkZWZpbmUgQ0tfTURfVk1BX0JJVFMgNDhVTEwKLSNlbmRpZiAvKiBD
S19NRF9WTUFfQklUUyAqLwotCi0jaWZuZGVmIENLX01EX1RTTwotI2RlZmluZSBDS19NRF9UU08K
LSNlbmRpZiAvKiBDS19NRF9UU08gKi8KLQotI2lmbmRlZiBDS19QUl9FTkFCTEVfRE9VQkxFCi0j
ZGVmaW5lIENLX1BSX0VOQUJMRV9ET1VCTEUKLSNlbmRpZiAvKiBDS19QUl9FTkFCTEVfRE9VQkxF
ICovCi0KLSNkZWZpbmUgQ0tfVkVSU0lPTiAiMS4wLjAiCi0jZGVmaW5lIENLX0dJVF9TSEEgIjM5
YzdiODUiCi0KLSNlbmRpZiAvKiBDS19NRF9IICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX21kLmguaW4gYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX21kLmguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNiNTc4M2UwNGNmYjM1MzRkNDFmOGZiNjEwOWY2NjY5NzNhNzI1ZDQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19tZC5oLmluCisrKyAvZGV2L251bGwKQEAgLTEs
NjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTIgU2FteSBBbCBCYWhyYS4KLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0g
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDS19NRF9ICi0jZGVmaW5lIENLX01E
X0gKLQotI2lmbmRlZiBDS19NRF9DQUNIRUxJTkUKLSNkZWZpbmUgQ0tfTURfQ0FDSEVMSU5FICg2
NCkKLSNlbmRpZgotCi0jaWZuZGVmIENLX01EX1BBR0VTSVpFCi0jZGVmaW5lIENLX01EX1BBR0VT
SVpFICg0MDk2KQotI2VuZGlmCi0KLSNpZm5kZWYgQFJUTV9FTkFCTEVACi0jZGVmaW5lIEBSVE1f
RU5BQkxFQAotI2VuZGlmIC8qIEBSVE1fRU5BQkxFQCAqLwotCi0jaWZuZGVmIEBMU0VfRU5BQkxF
QAotI2RlZmluZSBATFNFX0VOQUJMRUAKLSNlbmRpZiAvKiBATFNFX0VOQUJMRUAgKi8KLQotI2lm
bmRlZiBAUE9JTlRFUl9QQUNLX0VOQUJMRUAKLSNkZWZpbmUgQFBPSU5URVJfUEFDS19FTkFCTEVA
Ci0jZW5kaWYgLyogQFBPSU5URVJfUEFDS19FTkFCTEVAICovCi0KLSNpZm5kZWYgQFZNQV9CSVRT
QCAKLSNkZWZpbmUgQFZNQV9CSVRTQCBAVk1BX0JJVFNfVkFMVUVACi0jZW5kaWYgLyogQFZNQV9C
SVRTQCAqLwotCi0jaWZuZGVmIEBNTUAKLSNkZWZpbmUgQE1NQAotI2VuZGlmIC8qIEBNTUAgKi8K
LQotI2lmbmRlZiBARElTQUJMRV9ET1VCTEVACi0jZGVmaW5lIEBESVNBQkxFX0RPVUJMRUAKLSNl
bmRpZiAvKiBARElTQUJMRV9ET1VCTEVAICovCi0KLSNkZWZpbmUgQ0tfVkVSU0lPTiAiQFZFUlNJ
T05AIgotI2RlZmluZSBDS19HSVRfU0hBICJAR0lUX1NIQUAiCi0KLSNlbmRpZiAvKiBDS19NRF9I
ICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRl
L2NrX3BmbG9jay5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9j
a19wZmxvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFiNDJiZDE3ZmNiMGZj
Njg1ODE3ZTEzZWFhNjA5NTdmYmZhMWExYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRl
L2NrX3BmbG9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgMjAxMyBKb2huIFdpdHRyb2NrLgotICogQ29weXJpZ2h0IDIwMTMtMjAxNSBTYW15IEFs
IEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENLX1BGTE9DS19I
Ci0jZGVmaW5lIENLX1BGTE9DS19ICi0KLS8qCi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9u
IG9mIHBoYXNlLWZhaXIgbG9ja3MgZGVyaXZlZCBmcm9tIHRoZSB3b3JrCi0gKiBkZXNjcmliZWQg
aW46Ci0gKiAgICBCcmFuZGVuYnVyZywgQi4gYW5kIEFuZGVyc29uLCBKLiAyMDEwLiBTcGluLUJh
c2VkCi0gKiAgICBSZWFkZXItV3JpdGVyIFN5bmNocm9uaXphdGlvbiBmb3IgTXVsdGlwcm9jZXNz
b3IgUmVhbC1UaW1lIFN5c3RlbXMKLSAqLwotCi0jaW5jbHVkZSA8Y2tfY2MuaD4KLSNpbmNsdWRl
IDxja19wci5oPgotCi1zdHJ1Y3QgY2tfcGZsb2NrIHsKLQl1aW50MzJfdCByaW47Ci0JdWludDMy
X3Qgcm91dDsKLQl1aW50MzJfdCB3aW47Ci0JdWludDMyX3Qgd291dDsKLX07Ci10eXBlZGVmIHN0
cnVjdCBja19wZmxvY2sgY2tfcGZsb2NrX3Q7Ci0KLSNkZWZpbmUgQ0tfUEZMT0NLX0xTQiAgIDB4
RkZGRkZGRjAKLSNkZWZpbmUgQ0tfUEZMT0NLX1JJTkMgIDB4MTAwCQkvKiBSZWFkZXIgaW5jcmVt
ZW50IHZhbHVlLiAqLwotI2RlZmluZSBDS19QRkxPQ0tfV0JJVFMgMHgzCQkvKiBXcml0ZXIgYml0
cyBpbiByZWFkZXIuICovCi0jZGVmaW5lIENLX1BGTE9DS19QUkVTICAweDIJCS8qIFdyaXRlciBw
cmVzZW50IGJpdC4gKi8KLSNkZWZpbmUgQ0tfUEZMT0NLX1BISUQgIDB4MQkJLyogUGhhc2UgSUQg
Yml0LiAqLwotCi0jZGVmaW5lIENLX1BGTE9DS19JTklUSUFMSVpFUiB7MCwgMCwgMCwgMH0KLQot
Q0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19wZmxvY2tfaW5pdChzdHJ1Y3QgY2tfcGZsb2Nr
ICpwZikKLXsKLQotCXBmLT5yaW4gPSAwOwotCXBmLT5yb3V0ID0gMDsKLQlwZi0+d2luID0gMDsK
LQlwZi0+d291dCA9IDA7Ci0JY2tfcHJfYmFycmllcigpOwotCi0JcmV0dXJuOwotfQotCi1DS19D
Q19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3BmbG9ja193cml0ZV91bmxvY2soY2tfcGZsb2NrX3Qg
KnBmKQotewotCi0JY2tfcHJfZmVuY2VfdW5sb2NrKCk7Ci0KLQkvKiBNaWdyYXRlIGZyb20gd3Jp
dGUgcGhhc2UgdG8gcmVhZCBwaGFzZS4gKi8KLQlja19wcl9hbmRfMzIoJnBmLT5yaW4sIENLX1BG
TE9DS19MU0IpOwotCi0JLyogQWxsb3cgb3RoZXIgd3JpdGVycyB0byBjb250aW51ZS4gKi8KLQlj
a19wcl9mYWFfMzIoJnBmLT53b3V0LCAxKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBz
dGF0aWMgdm9pZAotY2tfcGZsb2NrX3dyaXRlX2xvY2soY2tfcGZsb2NrX3QgKnBmKQotewotCXVp
bnQzMl90IHRpY2tldDsKLQotCS8qIEFjcXVpcmUgb3duZXJzaGlwIG9mIHdyaXRlLXBoYXNlLiAq
LwotCXRpY2tldCA9IGNrX3ByX2ZhYV8zMigmcGYtPndpbiwgMSk7Ci0Jd2hpbGUgKGNrX3ByX2xv
YWRfMzIoJnBmLT53b3V0KSAhPSB0aWNrZXQpCi0JCWNrX3ByX3N0YWxsKCk7Ci0KLQkvKgotCSAq
IEFjcXVpcmUgdGlja2V0IG9uIHJlYWQtc2lkZSBpbiBvcmRlciB0byBhbGxvdyB0aGVtCi0JICog
dG8gZmx1c2guIEluZGljYXRlcyB0byBhbnkgaW5jb21pbmcgcmVhZGVyIHRoYXQgYQotCSAqIHdy
aXRlLXBoYXNlIGlzIHBlbmRpbmcuCi0JICovCi0JdGlja2V0ID0gY2tfcHJfZmFhXzMyKCZwZi0+
cmluLAotCSAgICAodGlja2V0ICYgQ0tfUEZMT0NLX1BISUQpIHwgQ0tfUEZMT0NLX1BSRVMpOwot
Ci0JLyogV2FpdCBmb3IgYW55IHBlbmRpbmcgcmVhZGVycyB0byBmbHVzaC4gKi8KLQl3aGlsZSAo
Y2tfcHJfbG9hZF8zMigmcGYtPnJvdXQpICE9IHRpY2tldCkKLQkJY2tfcHJfc3RhbGwoKTsKLQot
CWNrX3ByX2ZlbmNlX2xvY2soKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMg
dm9pZAotY2tfcGZsb2NrX3JlYWRfdW5sb2NrKGNrX3BmbG9ja190ICpwZikKLXsKLQotCWNrX3By
X2ZlbmNlX3VubG9jaygpOwotCWNrX3ByX2ZhYV8zMigmcGYtPnJvdXQsIENLX1BGTE9DS19SSU5D
KTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfcGZsb2NrX3Jl
YWRfbG9jayhja19wZmxvY2tfdCAqcGYpCi17Ci0JdWludDMyX3QgdzsKLQotCS8qCi0JICogSWYg
bm8gd3JpdGVyIGlzIHByZXNlbnQsIHRoZW4gdGhlIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkCi0J
ICogc3VjY2Vzc2Z1bGx5LgotCSAqLwotCXcgPSBja19wcl9mYWFfMzIoJnBmLT5yaW4sIENLX1BG
TE9DS19SSU5DKSAmIENLX1BGTE9DS19XQklUUzsKLQlpZiAodyA9PSAwKQotCQlnb3RvIGxlYXZl
OwotCi0JLyogV2FpdCBmb3IgY3VycmVudCB3cml0ZSBwaGFzZSB0byBjb21wbGV0ZS4gKi8KLQl3
aGlsZSAoKGNrX3ByX2xvYWRfMzIoJnBmLT5yaW4pICYgQ0tfUEZMT0NLX1dCSVRTKSA9PSB3KQot
CQlja19wcl9zdGFsbCgpOwotCi1sZWF2ZToKLQkvKiBBY3F1aXJlIHNlbWFudGljcyB3aXRoIHJl
c3BlY3QgdG8gcmVhZGVycy4gKi8KLQlja19wcl9mZW5jZV9sb2NrKCk7Ci0JcmV0dXJuOwotfQot
Ci0jZW5kaWYgLyogQ0tfUEZMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfcHIuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2NrL2luY2x1ZGUvY2tfcHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NGZkYmRmZmExMTEwMzg5MDNjNzUyMzBiNWVjZDFiYTFkZTk5MTRmZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9pbmNsdWRlL2NrX3ByLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBDb3B5cmlnaHQg
MjAxMSBEYXZpZCBKb3NlcGguCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
LSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
Q0tfUFJfSAotI2RlZmluZSBDS19QUl9ICi0KLSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUg
PGNrX2xpbWl0cy5oPgotI2luY2x1ZGUgPGNrX21kLmg+Ci0jaW5jbHVkZSA8Y2tfc3RkaW50Lmg+
Ci0jaW5jbHVkZSA8Y2tfc3RkYm9vbC5oPgotCi0jaWZuZGVmIENLX1VTRV9DQ19CVUlMVElOUwot
I2lmIGRlZmluZWQoX194ODZfNjRfXykKLSNpbmNsdWRlICJnY2MveDg2XzY0L2NrX3ByLmgiCi0j
ZWxpZiBkZWZpbmVkKF9feDg2X18pCi0jaW5jbHVkZSAiZ2NjL3g4Ni9ja19wci5oIgotI2VsaWYg
ZGVmaW5lZChfX3NwYXJjdjlfXykKLSNpbmNsdWRlICJnY2Mvc3BhcmN2OS9ja19wci5oIgotI2Vs
aWYgZGVmaW5lZChfX3BwYzY0X18pCi0jaW5jbHVkZSAiZ2NjL3BwYzY0L2NrX3ByLmgiCi0jZWxp
ZiBkZWZpbmVkKF9fczM5MHhfXykKLSNpbmNsdWRlICJnY2MvczM5MHgvY2tfcHIuaCIKLSNlbGlm
IGRlZmluZWQoX19wcGNfXykKLSNpbmNsdWRlICJnY2MvcHBjL2NrX3ByLmgiCi0jZWxpZiBkZWZp
bmVkKF9fYXJtX18pCi0jaW5jbHVkZSAiZ2NjL2FybS9ja19wci5oIgotI2VsaWYgZGVmaW5lZChf
X2FhcmNoNjRfXykKLSNpbmNsdWRlICJnY2MvYWFyY2g2NC9ja19wci5oIgotI2VsaWYgIWRlZmlu
ZWQoX19HTlVDX18pCi0jZXJyb3IgWW91ciBwbGF0Zm9ybSBpcyB1bnN1cHBvcnRlZAotI2VuZGlm
Ci0jZW5kaWYgLyogIUNLX1VTRV9DQ19CVUlMVElOUyAqLwotCi0jaWYgZGVmaW5lZChfX0dOVUNf
XykKLSNpbmNsdWRlICJnY2MvY2tfcHIuaCIKLSNlbmRpZgotCi0jZGVmaW5lIENLX1BSX0ZFTkNF
X0VNSVQoVCkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQlcCi0JY2tfcHJfZmVuY2Vf
IyNUKHZvaWQpCQkJXAotCXsJCQkJCVwKLQkJY2tfcHJfZmVuY2Vfc3RyaWN0XyMjVCgpOwlcCi0J
CXJldHVybjsJCQkJXAotCX0KLSNkZWZpbmUgQ0tfUFJfRkVOQ0VfTk9PUChUKQkJCVwKLQlDS19D
Q19JTkxJTkUgc3RhdGljIHZvaWQJCVwKLQlja19wcl9mZW5jZV8jI1Qodm9pZCkJCQlcCi0JewkJ
CQkJXAotCQlja19wcl9iYXJyaWVyKCk7CQlcCi0JCXJldHVybjsJCQkJXAotCX0KLQotLyoKLSAq
IE5vbmUgb2YgdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgcGxhdGZvcm1zIGFsbG93IGZvciBkYXRh
LWRlcGVuZGVudAotICogbG9hZCBvcmRlcmluZy4KLSAqLwotQ0tfUFJfRkVOQ0VfTk9PUChsb2Fk
X2RlcGVuZHMpCi0jZGVmaW5lIGNrX3ByX2ZlbmNlX3N0cmljdF9sb2FkX2RlcGVuZHMgY2tfcHJf
ZmVuY2VfbG9hZF9kZXBlbmRzCi0KLS8qCi0gKiBJbiBtZW1vcnkgbW9kZWxzIHdoZXJlIGF0b21p
YyBvcGVyYXRpb25zIGRvIG5vdCBoYXZlIHNlcmlhbGl6aW5nCi0gKiBlZmZlY3RzLCBhdG9taWMg
cmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9ucyBhcmUgbW9kZWxlZCBhcyBzdG9yZXMuCi0gKi8K
LSNpZiBkZWZpbmVkKENLX01EX1JNTykKLS8qCi0gKiBPbmx5IHN0b3JlcyB0byB0aGUgc2FtZSBs
b2NhdGlvbiBoYXZlIGEgZ2xvYmFsCi0gKiBvcmRlcmluZy4KLSAqLwotQ0tfUFJfRkVOQ0VfRU1J
VChhdG9taWMpCi1DS19QUl9GRU5DRV9FTUlUKGF0b21pY19sb2FkKQotQ0tfUFJfRkVOQ0VfRU1J
VChhdG9taWNfc3RvcmUpCi1DS19QUl9GRU5DRV9FTUlUKHN0b3JlX2F0b21pYykKLUNLX1BSX0ZF
TkNFX0VNSVQobG9hZF9hdG9taWMpCi1DS19QUl9GRU5DRV9FTUlUKGxvYWRfc3RvcmUpCi1DS19Q
Ul9GRU5DRV9FTUlUKHN0b3JlX2xvYWQpCi1DS19QUl9GRU5DRV9FTUlUKGxvYWQpCi1DS19QUl9G
RU5DRV9FTUlUKHN0b3JlKQotQ0tfUFJfRkVOQ0VfRU1JVChtZW1vcnkpCi1DS19QUl9GRU5DRV9F
TUlUKGFjcXVpcmUpCi1DS19QUl9GRU5DRV9FTUlUKHJlbGVhc2UpCi1DS19QUl9GRU5DRV9FTUlU
KGFjcXJlbCkKLUNLX1BSX0ZFTkNFX0VNSVQobG9jaykKLUNLX1BSX0ZFTkNFX0VNSVQodW5sb2Nr
KQotI2VsaWYgZGVmaW5lZChDS19NRF9QU08pCi0vKgotICogQW55dGhpbmcgY2FuIGJlIHJlLW9y
ZGVyZWQgd2l0aCByZXNwZWN0IHRvIHN0b3Jlcy4KLSAqIE90aGVyd2lzZSwgbG9hZHMgYXJlIGV4
ZWN1dGVkIGluLW9yZGVyLgotICovCi1DS19QUl9GRU5DRV9FTUlUKGF0b21pYykKLUNLX1BSX0ZF
TkNFX05PT1AoYXRvbWljX2xvYWQpCi1DS19QUl9GRU5DRV9FTUlUKGF0b21pY19zdG9yZSkKLUNL
X1BSX0ZFTkNFX0VNSVQoc3RvcmVfYXRvbWljKQotQ0tfUFJfRkVOQ0VfTk9PUChsb2FkX2F0b21p
YykKLUNLX1BSX0ZFTkNFX0VNSVQobG9hZF9zdG9yZSkKLUNLX1BSX0ZFTkNFX0VNSVQoc3RvcmVf
bG9hZCkKLUNLX1BSX0ZFTkNFX05PT1AobG9hZCkKLUNLX1BSX0ZFTkNFX0VNSVQoc3RvcmUpCi1D
S19QUl9GRU5DRV9FTUlUKG1lbW9yeSkKLUNLX1BSX0ZFTkNFX0VNSVQoYWNxdWlyZSkKLUNLX1BS
X0ZFTkNFX0VNSVQocmVsZWFzZSkKLUNLX1BSX0ZFTkNFX0VNSVQoYWNxcmVsKQotQ0tfUFJfRkVO
Q0VfRU1JVChsb2NrKQotQ0tfUFJfRkVOQ0VfRU1JVCh1bmxvY2spCi0jZWxpZiBkZWZpbmVkKENL
X01EX1RTTykKLS8qCi0gKiBPbmx5IGxvYWRzIGFyZSByZS1vcmRlcmVkIGFuZCBvbmx5IHdpdGgg
cmVzcGVjdCB0bwotICogcHJpb3Igc3RvcmVzLiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgc2VyaWFs
aXppbmcuCi0gKi8KLUNLX1BSX0ZFTkNFX05PT1AoYXRvbWljKQotQ0tfUFJfRkVOQ0VfTk9PUChh
dG9taWNfbG9hZCkKLUNLX1BSX0ZFTkNFX05PT1AoYXRvbWljX3N0b3JlKQotQ0tfUFJfRkVOQ0Vf
Tk9PUChzdG9yZV9hdG9taWMpCi1DS19QUl9GRU5DRV9OT09QKGxvYWRfYXRvbWljKQotQ0tfUFJf
RkVOQ0VfTk9PUChsb2FkX3N0b3JlKQotQ0tfUFJfRkVOQ0VfRU1JVChzdG9yZV9sb2FkKQotQ0tf
UFJfRkVOQ0VfTk9PUChsb2FkKQotQ0tfUFJfRkVOQ0VfTk9PUChzdG9yZSkKLUNLX1BSX0ZFTkNF
X0VNSVQobWVtb3J5KQotQ0tfUFJfRkVOQ0VfTk9PUChhY3F1aXJlKQotQ0tfUFJfRkVOQ0VfTk9P
UChyZWxlYXNlKQotQ0tfUFJfRkVOQ0VfTk9PUChhY3FyZWwpCi1DS19QUl9GRU5DRV9OT09QKGxv
Y2spCi1DS19QUl9GRU5DRV9OT09QKHVubG9jaykKLSNlbHNlCi0jZXJyb3IgIk5vIG1lbW9yeSBt
b2RlbCBoYXMgYmVlbiBkZWZpbmVkLiIKLSNlbmRpZiAvKiBDS19NRF9UU08gKi8KLQotI3VuZGVm
IENLX1BSX0ZFTkNFX0VNSVQKLSN1bmRlZiBDS19QUl9GRU5DRV9OT09QCi0KLSNpZm5kZWYgQ0tf
Rl9QUl9SRk8KLSNkZWZpbmUgQ0tfRl9QUl9SRk8KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAot
Y2tfcHJfcmZvKGNvbnN0IHZvaWQgKm0pCi17Ci0KLQkodm9pZCltOwotCXJldHVybjsKLX0KLSNl
bmRpZiAvKiBDS19GX1BSX1JGTyAqLwotCi0jZGVmaW5lIENLX1BSX1NUT1JFX1NBRkUoRFNULCBW
QUwsIFRZUEUpCQkJXAotICAgIGNrX3ByX21kX3N0b3JlXyMjVFlQRSgJCQkJCVwKLSAgICAgICAg
KCh2b2lkKXNpemVvZigqKERTVCkgPSAoVkFMKSksIChEU1QpKSwJCQlcCi0gICAgICAgIChWQUwp
KQotCi0jZGVmaW5lIGNrX3ByX3N0b3JlX3B0cihEU1QsIFZBTCkgQ0tfUFJfU1RPUkVfU0FGRSgo
RFNUKSwgKFZBTCksIHB0cikKLSNkZWZpbmUgY2tfcHJfc3RvcmVfY2hhcihEU1QsIFZBTCkgQ0tf
UFJfU1RPUkVfU0FGRSgoRFNUKSwgKFZBTCksIGNoYXIpCi0jaWZuZGVmIENLX1BSX0RJU0FCTEVf
RE9VQkxFCi0jZGVmaW5lIGNrX3ByX3N0b3JlX2RvdWJsZShEU1QsIFZBTCkgQ0tfUFJfU1RPUkVf
U0FGRSgoRFNUKSwgKFZBTCksIGRvdWJsZSkKLSNlbmRpZgotI2RlZmluZSBja19wcl9zdG9yZV91
aW50KERTVCwgVkFMKSBDS19QUl9TVE9SRV9TQUZFKChEU1QpLCAoVkFMKSwgdWludCkKLSNkZWZp
bmUgY2tfcHJfc3RvcmVfaW50KERTVCwgVkFMKSBDS19QUl9TVE9SRV9TQUZFKChEU1QpLCAoVkFM
KSwgaW50KQotI2RlZmluZSBja19wcl9zdG9yZV8zMihEU1QsIFZBTCkgQ0tfUFJfU1RPUkVfU0FG
RSgoRFNUKSwgKFZBTCksIDMyKQotI2RlZmluZSBja19wcl9zdG9yZV8xNihEU1QsIFZBTCkgQ0tf
UFJfU1RPUkVfU0FGRSgoRFNUKSwgKFZBTCksIDE2KQotI2RlZmluZSBja19wcl9zdG9yZV84KERT
VCwgVkFMKSBDS19QUl9TVE9SRV9TQUZFKChEU1QpLCAoVkFMKSwgOCkKLQotI2RlZmluZSBja19w
cl9zdG9yZV9wdHJfdW5zYWZlKERTVCwgVkFMKSBja19wcl9tZF9zdG9yZV9wdHIoKERTVCksIChW
QUwpKQotCi0jaWZkZWYgQ0tfRl9QUl9MT0FEXzY0Ci0jZGVmaW5lIGNrX3ByX3N0b3JlXzY0KERT
VCwgVkFMKSBDS19QUl9TVE9SRV9TQUZFKChEU1QpLCAoVkFMKSwgNjQpCi0jZW5kaWYgLyogQ0tf
Rl9QUl9MT0FEXzY0ICovCi0KLSNkZWZpbmUgQ0tfUFJfTE9BRF9QVFJfU0FGRShTUkMpIChDS19D
Q19UWVBFT0YoKihTUkMpLCAodm9pZCAqKSkpY2tfcHJfbWRfbG9hZF9wdHIoKFNSQykpCi0jZGVm
aW5lIGNrX3ByX2xvYWRfcHRyKFNSQykgQ0tfUFJfTE9BRF9QVFJfU0FGRSgoU1JDKSkKLQotI2Rl
ZmluZSBDS19QUl9MT0FEX1NBRkUoU1JDLCBUWVBFKSBja19wcl9tZF9sb2FkXyMjVFlQRSgoU1JD
KSkKLSNkZWZpbmUgY2tfcHJfbG9hZF9jaGFyKFNSQykgQ0tfUFJfTE9BRF9TQUZFKChTUkMpLCBj
aGFyKQotI2lmbmRlZiBDS19QUl9ESVNBQkxFX0RPVUJMRQotI2RlZmluZSBja19wcl9sb2FkX2Rv
dWJsZShTUkMpIENLX1BSX0xPQURfU0FGRSgoU1JDKSwgZG91YmxlKQotI2VuZGlmCi0jZGVmaW5l
IGNrX3ByX2xvYWRfdWludChTUkMpIENLX1BSX0xPQURfU0FGRSgoU1JDKSwgdWludCkKLSNkZWZp
bmUgY2tfcHJfbG9hZF9pbnQoU1JDKSBDS19QUl9MT0FEX1NBRkUoKFNSQyksIGludCkKLSNkZWZp
bmUgY2tfcHJfbG9hZF8zMihTUkMpIENLX1BSX0xPQURfU0FGRSgoU1JDKSwgMzIpCi0jZGVmaW5l
IGNrX3ByX2xvYWRfMTYoU1JDKSBDS19QUl9MT0FEX1NBRkUoKFNSQyksIDE2KQotI2RlZmluZSBj
a19wcl9sb2FkXzgoU1JDKSBDS19QUl9MT0FEX1NBRkUoKFNSQyksIDgpCi0KLSNpZmRlZiBDS19G
X1BSX0xPQURfNjQKLSNkZWZpbmUgY2tfcHJfbG9hZF82NChTUkMpIENLX1BSX0xPQURfU0FGRSgo
U1JDKSwgNjQpCi0jZW5kaWYgLyogQ0tfRl9QUl9MT0FEXzY0ICovCi0KLSNkZWZpbmUgQ0tfUFJf
QklOKEssIFMsIE0sIFQsIFAsIEMpCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJ
CQlcCi0JY2tfcHJfIyNLIyNfIyNTKE0gKnRhcmdldCwgVCB2YWx1ZSkJCQkJXAotCXsJCQkJCQkJ
CVwKLQkJVCBwcmV2aW91czsJCQkJCQlcCi0JCUMgcHVudDsJCQkJCQkJXAotCQlwdW50ID0gY2tf
cHJfbWRfbG9hZF8jI1ModGFyZ2V0KTsJCQlcCi0JCXByZXZpb3VzID0gKFQpcHVudDsJCQkJCVwK
LQkJd2hpbGUgKGNrX3ByX2Nhc18jI1MjI192YWx1ZSh0YXJnZXQsCQkJXAotCQkJCQkgICAgIChD
KXByZXZpb3VzLAkJXAotCQkJCQkgICAgIChDKShwcmV2aW91cyBQIHZhbHVlKSwJXAotCQkJCQkg
ICAgICZwcmV2aW91cykgPT0gZmFsc2UpCVwKLQkJCWNrX3ByX3N0YWxsKCk7CQkJCQlcCi0JCQkJ
CQkJCQlcCi0JCXJldHVybjsJCQkJCQkJXAotCX0KLQotI2RlZmluZSBDS19QUl9CSU5fUyhLLCBT
LCBULCBQKSBDS19QUl9CSU4oSywgUywgVCwgVCwgUCwgVCkKLQotI2lmIGRlZmluZWQoQ0tfRl9Q
Ul9MT0FEX0NIQVIpICYmIGRlZmluZWQoQ0tfRl9QUl9DQVNfQ0hBUl9WQUxVRSkKLQotI2lmbmRl
ZiBDS19GX1BSX0FERF9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfQUREX0NIQVIKLUNLX1BSX0JJTl9T
KGFkZCwgY2hhciwgY2hhciwgKykKLSNlbmRpZiAvKiBDS19GX1BSX0FERF9DSEFSICovCi0KLSNp
Zm5kZWYgQ0tfRl9QUl9TVUJfQ0hBUgotI2RlZmluZSBDS19GX1BSX1NVQl9DSEFSCi1DS19QUl9C
SU5fUyhzdWIsIGNoYXIsIGNoYXIsIC0pCi0jZW5kaWYgLyogQ0tfRl9QUl9TVUJfQ0hBUiAqLwot
Ci0jaWZuZGVmIENLX0ZfUFJfQU5EX0NIQVIKLSNkZWZpbmUgQ0tfRl9QUl9BTkRfQ0hBUgotQ0tf
UFJfQklOX1MoYW5kLCBjaGFyLCBjaGFyLCAmKQotI2VuZGlmIC8qIENLX0ZfUFJfQU5EX0NIQVIg
Ki8KLQotI2lmbmRlZiBDS19GX1BSX1hPUl9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfWE9SX0NIQVIK
LUNLX1BSX0JJTl9TKHhvciwgY2hhciwgY2hhciwgXikKLSNlbmRpZiAvKiBDS19GX1BSX1hPUl9D
SEFSICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9PUl9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfT1JfQ0hB
UgotQ0tfUFJfQklOX1Mob3IsIGNoYXIsIGNoYXIsIHwpCi0jZW5kaWYgLyogQ0tfRl9QUl9PUl9D
SEFSICovCi0KLSNlbmRpZiAvKiBDS19GX1BSX0xPQURfQ0hBUiAmJiBDS19GX1BSX0NBU19DSEFS
X1ZBTFVFICovCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfTE9BRF9JTlQpICYmIGRlZmluZWQoQ0tf
Rl9QUl9DQVNfSU5UX1ZBTFVFKQotCi0jaWZuZGVmIENLX0ZfUFJfQUREX0lOVAotI2RlZmluZSBD
S19GX1BSX0FERF9JTlQKLUNLX1BSX0JJTl9TKGFkZCwgaW50LCBpbnQsICspCi0jZW5kaWYgLyog
Q0tfRl9QUl9BRERfSU5UICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9TVUJfSU5UCi0jZGVmaW5lIENL
X0ZfUFJfU1VCX0lOVAotQ0tfUFJfQklOX1Moc3ViLCBpbnQsIGludCwgLSkKLSNlbmRpZiAvKiBD
S19GX1BSX1NVQl9JTlQgKi8KLQotI2lmbmRlZiBDS19GX1BSX0FORF9JTlQKLSNkZWZpbmUgQ0tf
Rl9QUl9BTkRfSU5UCi1DS19QUl9CSU5fUyhhbmQsIGludCwgaW50LCAmKQotI2VuZGlmIC8qIENL
X0ZfUFJfQU5EX0lOVCAqLwotCi0jaWZuZGVmIENLX0ZfUFJfWE9SX0lOVAotI2RlZmluZSBDS19G
X1BSX1hPUl9JTlQKLUNLX1BSX0JJTl9TKHhvciwgaW50LCBpbnQsIF4pCi0jZW5kaWYgLyogQ0tf
Rl9QUl9YT1JfSU5UICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9PUl9JTlQKLSNkZWZpbmUgQ0tfRl9Q
Ul9PUl9JTlQKLUNLX1BSX0JJTl9TKG9yLCBpbnQsIGludCwgfCkKLSNlbmRpZiAvKiBDS19GX1BS
X09SX0lOVCAqLwotCi0jZW5kaWYgLyogQ0tfRl9QUl9MT0FEX0lOVCAmJiBDS19GX1BSX0NBU19J
TlRfVkFMVUUgKi8KLQotI2lmIGRlZmluZWQoQ0tfRl9QUl9MT0FEX0RPVUJMRSkgJiYgZGVmaW5l
ZChDS19GX1BSX0NBU19ET1VCTEVfVkFMVUUpICYmIFwKLQkgICAgIWRlZmluZWQoQ0tfUFJfRElT
QUJMRV9ET1VCTEUpCi0KLSNpZm5kZWYgQ0tfRl9QUl9BRERfRE9VQkxFCi0jZGVmaW5lIENLX0Zf
UFJfQUREX0RPVUJMRQotQ0tfUFJfQklOX1MoYWRkLCBkb3VibGUsIGRvdWJsZSwgKykKLSNlbmRp
ZiAvKiBDS19GX1BSX0FERF9ET1VCTEUgKi8KLQotI2lmbmRlZiBDS19GX1BSX1NVQl9ET1VCTEUK
LSNkZWZpbmUgQ0tfRl9QUl9TVUJfRE9VQkxFCi1DS19QUl9CSU5fUyhzdWIsIGRvdWJsZSwgZG91
YmxlLCAtKQotI2VuZGlmIC8qIENLX0ZfUFJfU1VCX0RPVUJMRSAqLwotCi0jZW5kaWYgLyogQ0tf
Rl9QUl9MT0FEX0RPVUJMRSAmJiBDS19GX1BSX0NBU19ET1VCTEVfVkFMVUUgJiYgIUNLX1BSX0RJ
U0FCTEVfRE9VQkxFICovCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfTE9BRF9VSU5UKSAmJiBkZWZp
bmVkKENLX0ZfUFJfQ0FTX1VJTlRfVkFMVUUpCi0KLSNpZm5kZWYgQ0tfRl9QUl9BRERfVUlOVAot
I2RlZmluZSBDS19GX1BSX0FERF9VSU5UCi1DS19QUl9CSU5fUyhhZGQsIHVpbnQsIHVuc2lnbmVk
IGludCwgKykKLSNlbmRpZiAvKiBDS19GX1BSX0FERF9VSU5UICovCi0KLSNpZm5kZWYgQ0tfRl9Q
Ul9TVUJfVUlOVAotI2RlZmluZSBDS19GX1BSX1NVQl9VSU5UCi1DS19QUl9CSU5fUyhzdWIsIHVp
bnQsIHVuc2lnbmVkIGludCwgLSkKLSNlbmRpZiAvKiBDS19GX1BSX1NVQl9VSU5UICovCi0KLSNp
Zm5kZWYgQ0tfRl9QUl9BTkRfVUlOVAotI2RlZmluZSBDS19GX1BSX0FORF9VSU5UCi1DS19QUl9C
SU5fUyhhbmQsIHVpbnQsIHVuc2lnbmVkIGludCwgJikKLSNlbmRpZiAvKiBDS19GX1BSX0FORF9V
SU5UICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9YT1JfVUlOVAotI2RlZmluZSBDS19GX1BSX1hPUl9V
SU5UCi1DS19QUl9CSU5fUyh4b3IsIHVpbnQsIHVuc2lnbmVkIGludCwgXikKLSNlbmRpZiAvKiBD
S19GX1BSX1hPUl9VSU5UICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9PUl9VSU5UCi0jZGVmaW5lIENL
X0ZfUFJfT1JfVUlOVAotQ0tfUFJfQklOX1Mob3IsIHVpbnQsIHVuc2lnbmVkIGludCwgfCkKLSNl
bmRpZiAvKiBDS19GX1BSX09SX1VJTlQgKi8KLQotI2VuZGlmIC8qIENLX0ZfUFJfTE9BRF9VSU5U
ICYmIENLX0ZfUFJfQ0FTX1VJTlRfVkFMVUUgKi8KLQotI2lmIGRlZmluZWQoQ0tfRl9QUl9MT0FE
X1BUUikgJiYgZGVmaW5lZChDS19GX1BSX0NBU19QVFJfVkFMVUUpCi0KLSNpZm5kZWYgQ0tfRl9Q
Ul9BRERfUFRSCi0jZGVmaW5lIENLX0ZfUFJfQUREX1BUUgotQ0tfUFJfQklOKGFkZCwgcHRyLCB2
b2lkLCB1aW50cHRyX3QsICssIHZvaWQgKikKLSNlbmRpZiAvKiBDS19GX1BSX0FERF9QVFIgKi8K
LQotI2lmbmRlZiBDS19GX1BSX1NVQl9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfUFRSCi1DS19Q
Ul9CSU4oc3ViLCBwdHIsIHZvaWQsIHVpbnRwdHJfdCwgLSwgdm9pZCAqKQotI2VuZGlmIC8qIENL
X0ZfUFJfU1VCX1BUUiAqLwotCi0jaWZuZGVmIENLX0ZfUFJfQU5EX1BUUgotI2RlZmluZSBDS19G
X1BSX0FORF9QVFIKLUNLX1BSX0JJTihhbmQsIHB0ciwgdm9pZCwgdWludHB0cl90LCAmLCB2b2lk
ICopCi0jZW5kaWYgLyogQ0tfRl9QUl9BTkRfUFRSICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9YT1Jf
UFRSCi0jZGVmaW5lIENLX0ZfUFJfWE9SX1BUUgotQ0tfUFJfQklOKHhvciwgcHRyLCB2b2lkLCB1
aW50cHRyX3QsIF4sIHZvaWQgKikKLSNlbmRpZiAvKiBDS19GX1BSX1hPUl9QVFIgKi8KLQotI2lm
bmRlZiBDS19GX1BSX09SX1BUUgotI2RlZmluZSBDS19GX1BSX09SX1BUUgotQ0tfUFJfQklOKG9y
LCBwdHIsIHZvaWQsIHVpbnRwdHJfdCwgfCwgdm9pZCAqKQotI2VuZGlmIC8qIENLX0ZfUFJfT1Jf
UFRSICovCi0KLSNlbmRpZiAvKiBDS19GX1BSX0xPQURfUFRSICYmIENLX0ZfUFJfQ0FTX1BUUl9W
QUxVRSAqLwotCi0jaWYgZGVmaW5lZChDS19GX1BSX0xPQURfNjQpICYmIGRlZmluZWQoQ0tfRl9Q
Ul9DQVNfNjRfVkFMVUUpCi0KLSNpZm5kZWYgQ0tfRl9QUl9BRERfNjQKLSNkZWZpbmUgQ0tfRl9Q
Ul9BRERfNjQKLUNLX1BSX0JJTl9TKGFkZCwgNjQsIHVpbnQ2NF90LCArKQotI2VuZGlmIC8qIENL
X0ZfUFJfQUREXzY0ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9TVUJfNjQKLSNkZWZpbmUgQ0tfRl9Q
Ul9TVUJfNjQKLUNLX1BSX0JJTl9TKHN1YiwgNjQsIHVpbnQ2NF90LCAtKQotI2VuZGlmIC8qIENL
X0ZfUFJfU1VCXzY0ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9BTkRfNjQKLSNkZWZpbmUgQ0tfRl9Q
Ul9BTkRfNjQKLUNLX1BSX0JJTl9TKGFuZCwgNjQsIHVpbnQ2NF90LCAmKQotI2VuZGlmIC8qIENL
X0ZfUFJfQU5EXzY0ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9YT1JfNjQKLSNkZWZpbmUgQ0tfRl9Q
Ul9YT1JfNjQKLUNLX1BSX0JJTl9TKHhvciwgNjQsIHVpbnQ2NF90LCBeKQotI2VuZGlmIC8qIENL
X0ZfUFJfWE9SXzY0ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9PUl82NAotI2RlZmluZSBDS19GX1BS
X09SXzY0Ci1DS19QUl9CSU5fUyhvciwgNjQsIHVpbnQ2NF90LCB8KQotI2VuZGlmIC8qIENLX0Zf
UFJfT1JfNjQgKi8KLQotI2VuZGlmIC8qIENLX0ZfUFJfTE9BRF82NCAmJiBDS19GX1BSX0NBU182
NF9WQUxVRSAqLwotCi0jaWYgZGVmaW5lZChDS19GX1BSX0xPQURfMzIpICYmIGRlZmluZWQoQ0tf
Rl9QUl9DQVNfMzJfVkFMVUUpCi0KLSNpZm5kZWYgQ0tfRl9QUl9BRERfMzIKLSNkZWZpbmUgQ0tf
Rl9QUl9BRERfMzIKLUNLX1BSX0JJTl9TKGFkZCwgMzIsIHVpbnQzMl90LCArKQotI2VuZGlmIC8q
IENLX0ZfUFJfQUREXzMyICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9TVUJfMzIKLSNkZWZpbmUgQ0tf
Rl9QUl9TVUJfMzIKLUNLX1BSX0JJTl9TKHN1YiwgMzIsIHVpbnQzMl90LCAtKQotI2VuZGlmIC8q
IENLX0ZfUFJfU1VCXzMyICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9BTkRfMzIKLSNkZWZpbmUgQ0tf
Rl9QUl9BTkRfMzIKLUNLX1BSX0JJTl9TKGFuZCwgMzIsIHVpbnQzMl90LCAmKQotI2VuZGlmIC8q
IENLX0ZfUFJfQU5EXzMyICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9YT1JfMzIKLSNkZWZpbmUgQ0tf
Rl9QUl9YT1JfMzIKLUNLX1BSX0JJTl9TKHhvciwgMzIsIHVpbnQzMl90LCBeKQotI2VuZGlmIC8q
IENLX0ZfUFJfWE9SXzMyICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9PUl8zMgotI2RlZmluZSBDS19G
X1BSX09SXzMyCi1DS19QUl9CSU5fUyhvciwgMzIsIHVpbnQzMl90LCB8KQotI2VuZGlmIC8qIENL
X0ZfUFJfT1JfMzIgKi8KLQotI2VuZGlmIC8qIENLX0ZfUFJfTE9BRF8zMiAmJiBDS19GX1BSX0NB
U18zMl9WQUxVRSAqLwotCi0jaWYgZGVmaW5lZChDS19GX1BSX0xPQURfMTYpICYmIGRlZmluZWQo
Q0tfRl9QUl9DQVNfMTZfVkFMVUUpCi0KLSNpZm5kZWYgQ0tfRl9QUl9BRERfMTYKLSNkZWZpbmUg
Q0tfRl9QUl9BRERfMTYKLUNLX1BSX0JJTl9TKGFkZCwgMTYsIHVpbnQxNl90LCArKQotI2VuZGlm
IC8qIENLX0ZfUFJfQUREXzE2ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9TVUJfMTYKLSNkZWZpbmUg
Q0tfRl9QUl9TVUJfMTYKLUNLX1BSX0JJTl9TKHN1YiwgMTYsIHVpbnQxNl90LCAtKQotI2VuZGlm
IC8qIENLX0ZfUFJfU1VCXzE2ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9BTkRfMTYKLSNkZWZpbmUg
Q0tfRl9QUl9BTkRfMTYKLUNLX1BSX0JJTl9TKGFuZCwgMTYsIHVpbnQxNl90LCAmKQotI2VuZGlm
IC8qIENLX0ZfUFJfQU5EXzE2ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9YT1JfMTYKLSNkZWZpbmUg
Q0tfRl9QUl9YT1JfMTYKLUNLX1BSX0JJTl9TKHhvciwgMTYsIHVpbnQxNl90LCBeKQotI2VuZGlm
IC8qIENLX0ZfUFJfWE9SXzE2ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9PUl8xNgotI2RlZmluZSBD
S19GX1BSX09SXzE2Ci1DS19QUl9CSU5fUyhvciwgMTYsIHVpbnQxNl90LCB8KQotI2VuZGlmIC8q
IENLX0ZfUFJfT1JfMTYgKi8KLQotI2VuZGlmIC8qIENLX0ZfUFJfTE9BRF8xNiAmJiBDS19GX1BS
X0NBU18xNl9WQUxVRSAqLwotCi0jaWYgZGVmaW5lZChDS19GX1BSX0xPQURfOCkgJiYgZGVmaW5l
ZChDS19GX1BSX0NBU184X1ZBTFVFKQotCi0jaWZuZGVmIENLX0ZfUFJfQUREXzgKLSNkZWZpbmUg
Q0tfRl9QUl9BRERfOAotQ0tfUFJfQklOX1MoYWRkLCA4LCB1aW50OF90LCArKQotI2VuZGlmIC8q
IENLX0ZfUFJfQUREXzggKi8KLQotI2lmbmRlZiBDS19GX1BSX1NVQl84Ci0jZGVmaW5lIENLX0Zf
UFJfU1VCXzgKLUNLX1BSX0JJTl9TKHN1YiwgOCwgdWludDhfdCwgLSkKLSNlbmRpZiAvKiBDS19G
X1BSX1NVQl84ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9BTkRfOAotI2RlZmluZSBDS19GX1BSX0FO
RF84Ci1DS19QUl9CSU5fUyhhbmQsIDgsIHVpbnQ4X3QsICYpCi0jZW5kaWYgLyogQ0tfRl9QUl9B
TkRfOCAqLwotCi0jaWZuZGVmIENLX0ZfUFJfWE9SXzgKLSNkZWZpbmUgQ0tfRl9QUl9YT1JfOAot
Q0tfUFJfQklOX1MoeG9yLCA4LCB1aW50OF90LCBeKQotI2VuZGlmIC8qIENLX0ZfUFJfWE9SXzgg
Ki8KLQotI2lmbmRlZiBDS19GX1BSX09SXzgKLSNkZWZpbmUgQ0tfRl9QUl9PUl84Ci1DS19QUl9C
SU5fUyhvciwgOCwgdWludDhfdCwgfCkKLSNlbmRpZiAvKiBDS19GX1BSX09SXzggKi8KLQotI2Vu
ZGlmIC8qIENLX0ZfUFJfTE9BRF84ICYmIENLX0ZfUFJfQ0FTXzhfVkFMVUUgKi8KLQotI3VuZGVm
IENLX1BSX0JJTl9TCi0jdW5kZWYgQ0tfUFJfQklOCi0KLSNkZWZpbmUgQ0tfUFJfQlRYKEssIFMs
IE0sIFQsIFAsIEMsIFIpCQkJCQkJICAgXAotCUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAkJCQkJ
CSAgIFwKLQlja19wcl8jI0sjI18jI1MoTSAqdGFyZ2V0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQkJ
CQkgICBcCi0JewkJCQkJCQkJCSAgIFwKLQkJVCBwcmV2aW91czsJCQkJCQkJICAgXAotCQlDIHB1
bnQ7CQkJCQkJCQkgICBcCi0JCXB1bnQgPSBja19wcl9tZF9sb2FkXyMjUyh0YXJnZXQpOwkJCQkg
ICBcCi0JCXByZXZpb3VzID0gKFQpcHVudDsJCQkJCQkgICBcCi0JCXdoaWxlIChja19wcl9jYXNf
IyNTIyNfdmFsdWUodGFyZ2V0LCAoQylwcmV2aW91cywJCSAgIFwKLQkJCShDKShwcmV2aW91cyBQ
IChSICgoVCkxIDw8IG9mZnNldCkpKSwgJnByZXZpb3VzKSA9PSBmYWxzZSkgXAotCQkJCWNrX3By
X3N0YWxsKCk7CQkJCQkgICBcCi0JCXJldHVybiAoKHByZXZpb3VzID4+IG9mZnNldCkgJiAxKTsJ
CQkJICAgXAotCX0KLQotI2RlZmluZSBDS19QUl9CVFhfUyhLLCBTLCBULCBQLCBSKSBDS19QUl9C
VFgoSywgUywgVCwgVCwgUCwgVCwgUikKLQotI2lmIGRlZmluZWQoQ0tfRl9QUl9MT0FEX0lOVCkg
JiYgZGVmaW5lZChDS19GX1BSX0NBU19JTlRfVkFMVUUpCi0KLSNpZm5kZWYgQ0tfRl9QUl9CVENf
SU5UCi0jZGVmaW5lIENLX0ZfUFJfQlRDX0lOVAotQ0tfUFJfQlRYX1MoYnRjLCBpbnQsIGludCwg
XiwpCi0jZW5kaWYgLyogQ0tfRl9QUl9CVENfSU5UICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9CVFJf
SU5UCi0jZGVmaW5lIENLX0ZfUFJfQlRSX0lOVAotQ0tfUFJfQlRYX1MoYnRyLCBpbnQsIGludCwg
JiwgfikKLSNlbmRpZiAvKiBDS19GX1BSX0JUUl9JTlQgKi8KLQotI2lmbmRlZiBDS19GX1BSX0JU
U19JTlQKLSNkZWZpbmUgQ0tfRl9QUl9CVFNfSU5UCi1DS19QUl9CVFhfUyhidHMsIGludCwgaW50
LCB8LCkKLSNlbmRpZiAvKiBDS19GX1BSX0JUU19JTlQgKi8KLQotI2VuZGlmIC8qIENLX0ZfUFJf
TE9BRF9JTlQgJiYgQ0tfRl9QUl9DQVNfSU5UX1ZBTFVFICovCi0KLSNpZiBkZWZpbmVkKENLX0Zf
UFJfTE9BRF9VSU5UKSAmJiBkZWZpbmVkKENLX0ZfUFJfQ0FTX1VJTlRfVkFMVUUpCi0KLSNpZm5k
ZWYgQ0tfRl9QUl9CVENfVUlOVAotI2RlZmluZSBDS19GX1BSX0JUQ19VSU5UCi1DS19QUl9CVFhf
UyhidGMsIHVpbnQsIHVuc2lnbmVkIGludCwgXiwpCi0jZW5kaWYgLyogQ0tfRl9QUl9CVENfVUlO
VCAqLwotCi0jaWZuZGVmIENLX0ZfUFJfQlRSX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9CVFJfVUlO
VAotQ0tfUFJfQlRYX1MoYnRyLCB1aW50LCB1bnNpZ25lZCBpbnQsICYsIH4pCi0jZW5kaWYgLyog
Q0tfRl9QUl9CVFJfVUlOVCAqLwotCi0jaWZuZGVmIENLX0ZfUFJfQlRTX1VJTlQKLSNkZWZpbmUg
Q0tfRl9QUl9CVFNfVUlOVAotQ0tfUFJfQlRYX1MoYnRzLCB1aW50LCB1bnNpZ25lZCBpbnQsIHws
KQotI2VuZGlmIC8qIENLX0ZfUFJfQlRTX1VJTlQgKi8KLQotI2VuZGlmIC8qIENLX0ZfUFJfTE9B
RF9VSU5UICYmIENLX0ZfUFJfQ0FTX1VJTlRfVkFMVUUgKi8KLQotI2lmIGRlZmluZWQoQ0tfRl9Q
Ul9MT0FEX1BUUikgJiYgZGVmaW5lZChDS19GX1BSX0NBU19QVFJfVkFMVUUpCi0KLSNpZm5kZWYg
Q0tfRl9QUl9CVENfUFRSCi0jZGVmaW5lIENLX0ZfUFJfQlRDX1BUUgotQ0tfUFJfQlRYKGJ0Yywg
cHRyLCB2b2lkLCB1aW50cHRyX3QsIF4sIHZvaWQgKiwpCi0jZW5kaWYgLyogQ0tfRl9QUl9CVENf
UFRSICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9CVFJfUFRSCi0jZGVmaW5lIENLX0ZfUFJfQlRSX1BU
UgotQ0tfUFJfQlRYKGJ0ciwgcHRyLCB2b2lkLCB1aW50cHRyX3QsICYsIHZvaWQgKiwgfikKLSNl
bmRpZiAvKiBDS19GX1BSX0JUUl9QVFIgKi8KLQotI2lmbmRlZiBDS19GX1BSX0JUU19QVFIKLSNk
ZWZpbmUgQ0tfRl9QUl9CVFNfUFRSCi1DS19QUl9CVFgoYnRzLCBwdHIsIHZvaWQsIHVpbnRwdHJf
dCwgfCwgdm9pZCAqLCkKLSNlbmRpZiAvKiBDS19GX1BSX0JUU19QVFIgKi8KLQotI2VuZGlmIC8q
IENLX0ZfUFJfTE9BRF9QVFIgJiYgQ0tfRl9QUl9DQVNfUFRSX1ZBTFVFICovCi0KLSNpZiBkZWZp
bmVkKENLX0ZfUFJfTE9BRF82NCkgJiYgZGVmaW5lZChDS19GX1BSX0NBU182NF9WQUxVRSkKLQot
I2lmbmRlZiBDS19GX1BSX0JUQ182NAotI2RlZmluZSBDS19GX1BSX0JUQ182NAotQ0tfUFJfQlRY
X1MoYnRjLCA2NCwgdWludDY0X3QsIF4sKQotI2VuZGlmIC8qIENLX0ZfUFJfQlRDXzY0ICovCi0K
LSNpZm5kZWYgQ0tfRl9QUl9CVFJfNjQKLSNkZWZpbmUgQ0tfRl9QUl9CVFJfNjQKLUNLX1BSX0JU
WF9TKGJ0ciwgNjQsIHVpbnQ2NF90LCAmLCB+KQotI2VuZGlmIC8qIENLX0ZfUFJfQlRSXzY0ICov
Ci0KLSNpZm5kZWYgQ0tfRl9QUl9CVFNfNjQKLSNkZWZpbmUgQ0tfRl9QUl9CVFNfNjQKLUNLX1BS
X0JUWF9TKGJ0cywgNjQsIHVpbnQ2NF90LCB8LCkKLSNlbmRpZiAvKiBDS19GX1BSX0JUU182NCAq
LwotCi0jZW5kaWYgLyogQ0tfRl9QUl9MT0FEXzY0ICYmIENLX0ZfUFJfQ0FTXzY0X1ZBTFVFICov
Ci0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfTE9BRF8zMikgJiYgZGVmaW5lZChDS19GX1BSX0NBU18z
Ml9WQUxVRSkKLQotI2lmbmRlZiBDS19GX1BSX0JUQ18zMgotI2RlZmluZSBDS19GX1BSX0JUQ18z
MgotQ0tfUFJfQlRYX1MoYnRjLCAzMiwgdWludDMyX3QsIF4sKQotI2VuZGlmIC8qIENLX0ZfUFJf
QlRDXzMyICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9CVFJfMzIKLSNkZWZpbmUgQ0tfRl9QUl9CVFJf
MzIKLUNLX1BSX0JUWF9TKGJ0ciwgMzIsIHVpbnQzMl90LCAmLCB+KQotI2VuZGlmIC8qIENLX0Zf
UFJfQlRSXzMyICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9CVFNfMzIKLSNkZWZpbmUgQ0tfRl9QUl9C
VFNfMzIKLUNLX1BSX0JUWF9TKGJ0cywgMzIsIHVpbnQzMl90LCB8LCkKLSNlbmRpZiAvKiBDS19G
X1BSX0JUU18zMiAqLwotCi0jZW5kaWYgLyogQ0tfRl9QUl9MT0FEXzMyICYmIENLX0ZfUFJfQ0FT
XzMyX1ZBTFVFICovCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfTE9BRF8xNikgJiYgZGVmaW5lZChD
S19GX1BSX0NBU18xNl9WQUxVRSkKLQotI2lmbmRlZiBDS19GX1BSX0JUQ18xNgotI2RlZmluZSBD
S19GX1BSX0JUQ18xNgotQ0tfUFJfQlRYX1MoYnRjLCAxNiwgdWludDE2X3QsIF4sKQotI2VuZGlm
IC8qIENLX0ZfUFJfQlRDXzE2ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9CVFJfMTYKLSNkZWZpbmUg
Q0tfRl9QUl9CVFJfMTYKLUNLX1BSX0JUWF9TKGJ0ciwgMTYsIHVpbnQxNl90LCAmLCB+KQotI2Vu
ZGlmIC8qIENLX0ZfUFJfQlRSXzE2ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9CVFNfMTYKLSNkZWZp
bmUgQ0tfRl9QUl9CVFNfMTYKLUNLX1BSX0JUWF9TKGJ0cywgMTYsIHVpbnQxNl90LCB8LCkKLSNl
bmRpZiAvKiBDS19GX1BSX0JUU18xNiAqLwotCi0jZW5kaWYgLyogQ0tfRl9QUl9MT0FEXzE2ICYm
IENLX0ZfUFJfQ0FTXzE2X1ZBTFVFICovCi0KLSN1bmRlZiBDS19QUl9CVFhfUwotI3VuZGVmIENL
X1BSX0JUWAotCi0jZGVmaW5lIENLX1BSX1VOQVJZKEssIFgsIFMsIE0sIFQpCQkJCQlcCi0JQ0tf
Q0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJCQlcCi0JY2tfcHJfIyNLIyNfIyNTKE0gKnRhcmdldCkJ
CQkJCVwKLQl7CQkJCQkJCQlcCi0JCWNrX3ByXyMjWCMjXyMjUyh0YXJnZXQsIChUKTEpOwkJCQlc
Ci0JCXJldHVybjsJCQkJCQkJXAotCX0KLQotI2RlZmluZSBDS19QUl9VTkFSWV9aKEssIFMsIE0s
IFQsIFAsIEMsIFopCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIHZvaWQJCQkJCVwKLQlja19w
cl8jI0sjI18jI1MjI196ZXJvKE0gKnRhcmdldCwgYm9vbCAqemVybykJCQlcCi0JewkJCQkJCQkJ
XAotCQlUIHByZXZpb3VzOwkJCQkJCVwKLQkJQyBwdW50OwkJCQkJCQlcCi0JCXB1bnQgPSAoQylj
a19wcl9tZF9sb2FkXyMjUyh0YXJnZXQpOwkJCVwKLQkJcHJldmlvdXMgPSAoVClwdW50OwkJCQkJ
XAotCQl3aGlsZSAoY2tfcHJfY2FzXyMjUyMjX3ZhbHVlKHRhcmdldCwJCQlcCi0JCQkJCSAgICAg
KEMpcHJldmlvdXMsCQlcCi0JCQkJCSAgICAgKEMpKHByZXZpb3VzIFAgMSksCQlcCi0JCQkJCSAg
ICAgJnByZXZpb3VzKSA9PSBmYWxzZSkJXAotCQkJY2tfcHJfc3RhbGwoKTsJCQkJCVwKLQkJKnpl
cm8gPSBwcmV2aW91cyA9PSAoVClaOwkJCQlcCi0JCXJldHVybjsJCQkJCQkJXAotCX0KLQotI2Rl
ZmluZSBDS19QUl9VTkFSWV9TKEssIFgsIFMsIE0pIENLX1BSX1VOQVJZKEssIFgsIFMsIE0sIE0p
Ci0jZGVmaW5lIENLX1BSX1VOQVJZX1pfUyhLLCBTLCBNLCBQLCBaKSBDS19QUl9VTkFSWV9aKEss
IFMsIE0sIE0sIFAsIE0sIFopCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfTE9BRF9DSEFSKSAmJiBk
ZWZpbmVkKENLX0ZfUFJfQ0FTX0NIQVJfVkFMVUUpCi0KLSNpZm5kZWYgQ0tfRl9QUl9JTkNfQ0hB
UgotI2RlZmluZSBDS19GX1BSX0lOQ19DSEFSCi1DS19QUl9VTkFSWV9TKGluYywgYWRkLCBjaGFy
LCBjaGFyKQotI2VuZGlmIC8qIENLX0ZfUFJfSU5DX0NIQVIgKi8KLQotI2lmbmRlZiBDS19GX1BS
X0lOQ19DSEFSX1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9JTkNfQ0hBUl9aRVJPCi1DS19QUl9VTkFS
WV9aX1MoaW5jLCBjaGFyLCBjaGFyLCArLCAtMSkKLSNlbmRpZiAvKiBDS19GX1BSX0lOQ19DSEFS
X1pFUk8gKi8KLQotI2lmbmRlZiBDS19GX1BSX0RFQ19DSEFSCi0jZGVmaW5lIENLX0ZfUFJfREVD
X0NIQVIKLUNLX1BSX1VOQVJZX1MoZGVjLCBzdWIsIGNoYXIsIGNoYXIpCi0jZW5kaWYgLyogQ0tf
Rl9QUl9ERUNfQ0hBUiAqLwotCi0jaWZuZGVmIENLX0ZfUFJfREVDX0NIQVJfWkVSTwotI2RlZmlu
ZSBDS19GX1BSX0RFQ19DSEFSX1pFUk8KLUNLX1BSX1VOQVJZX1pfUyhkZWMsIGNoYXIsIGNoYXIs
IC0sIDEpCi0jZW5kaWYgLyogQ0tfRl9QUl9ERUNfQ0hBUl9aRVJPICovCi0KLSNlbmRpZiAvKiBD
S19GX1BSX0xPQURfQ0hBUiAmJiBDS19GX1BSX0NBU19DSEFSX1ZBTFVFICovCi0KLSNpZiBkZWZp
bmVkKENLX0ZfUFJfTE9BRF9JTlQpICYmIGRlZmluZWQoQ0tfRl9QUl9DQVNfSU5UX1ZBTFVFKQot
Ci0jaWZuZGVmIENLX0ZfUFJfSU5DX0lOVAotI2RlZmluZSBDS19GX1BSX0lOQ19JTlQKLUNLX1BS
X1VOQVJZX1MoaW5jLCBhZGQsIGludCwgaW50KQotI2VuZGlmIC8qIENLX0ZfUFJfSU5DX0lOVCAq
LwotCi0jaWZuZGVmIENLX0ZfUFJfSU5DX0lOVF9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfSU5DX0lO
VF9aRVJPCi1DS19QUl9VTkFSWV9aX1MoaW5jLCBpbnQsIGludCwgKywgLTEpCi0jZW5kaWYgLyog
Q0tfRl9QUl9JTkNfSU5UX1pFUk8gKi8KLQotI2lmbmRlZiBDS19GX1BSX0RFQ19JTlQKLSNkZWZp
bmUgQ0tfRl9QUl9ERUNfSU5UCi1DS19QUl9VTkFSWV9TKGRlYywgc3ViLCBpbnQsIGludCkKLSNl
bmRpZiAvKiBDS19GX1BSX0RFQ19JTlQgKi8KLQotI2lmbmRlZiBDS19GX1BSX0RFQ19JTlRfWkVS
TwotI2RlZmluZSBDS19GX1BSX0RFQ19JTlRfWkVSTwotQ0tfUFJfVU5BUllfWl9TKGRlYywgaW50
LCBpbnQsIC0sIDEpCi0jZW5kaWYgLyogQ0tfRl9QUl9ERUNfSU5UX1pFUk8gKi8KLQotI2VuZGlm
IC8qIENLX0ZfUFJfTE9BRF9JTlQgJiYgQ0tfRl9QUl9DQVNfSU5UX1ZBTFVFICovCi0KLSNpZiBk
ZWZpbmVkKENLX0ZfUFJfTE9BRF9ET1VCTEUpICYmIGRlZmluZWQoQ0tfRl9QUl9DQVNfRE9VQkxF
X1ZBTFVFKSAmJiBcCi0JICAgICFkZWZpbmVkKENLX1BSX0RJU0FCTEVfRE9VQkxFKQotCi0jaWZu
ZGVmIENLX0ZfUFJfSU5DX0RPVUJMRQotI2RlZmluZSBDS19GX1BSX0lOQ19ET1VCTEUKLUNLX1BS
X1VOQVJZX1MoaW5jLCBhZGQsIGRvdWJsZSwgZG91YmxlKQotI2VuZGlmIC8qIENLX0ZfUFJfSU5D
X0RPVUJMRSAqLwotCi0jaWZuZGVmIENLX0ZfUFJfREVDX0RPVUJMRQotI2RlZmluZSBDS19GX1BS
X0RFQ19ET1VCTEUKLUNLX1BSX1VOQVJZX1MoZGVjLCBzdWIsIGRvdWJsZSwgZG91YmxlKQotI2Vu
ZGlmIC8qIENLX0ZfUFJfREVDX0RPVUJMRSAqLwotCi0jZW5kaWYgLyogQ0tfRl9QUl9MT0FEX0RP
VUJMRSAmJiBDS19GX1BSX0NBU19ET1VCTEVfVkFMVUUgJiYgIUNLX1BSX0RJU0FCTEVfRE9VQkxF
ICovCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfTE9BRF9VSU5UKSAmJiBkZWZpbmVkKENLX0ZfUFJf
Q0FTX1VJTlRfVkFMVUUpCi0KLSNpZm5kZWYgQ0tfRl9QUl9JTkNfVUlOVAotI2RlZmluZSBDS19G
X1BSX0lOQ19VSU5UCi1DS19QUl9VTkFSWV9TKGluYywgYWRkLCB1aW50LCB1bnNpZ25lZCBpbnQp
Ci0jZW5kaWYgLyogQ0tfRl9QUl9JTkNfVUlOVCAqLwotCi0jaWZuZGVmIENLX0ZfUFJfSU5DX1VJ
TlRfWkVSTwotI2RlZmluZSBDS19GX1BSX0lOQ19VSU5UX1pFUk8KLUNLX1BSX1VOQVJZX1pfUyhp
bmMsIHVpbnQsIHVuc2lnbmVkIGludCwgKywgVUlOVF9NQVgpCi0jZW5kaWYgLyogQ0tfRl9QUl9J
TkNfVUlOVF9aRVJPICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9ERUNfVUlOVAotI2RlZmluZSBDS19G
X1BSX0RFQ19VSU5UCi1DS19QUl9VTkFSWV9TKGRlYywgc3ViLCB1aW50LCB1bnNpZ25lZCBpbnQp
Ci0jZW5kaWYgLyogQ0tfRl9QUl9ERUNfVUlOVCAqLwotCi0jaWZuZGVmIENLX0ZfUFJfREVDX1VJ
TlRfWkVSTwotI2RlZmluZSBDS19GX1BSX0RFQ19VSU5UX1pFUk8KLUNLX1BSX1VOQVJZX1pfUyhk
ZWMsIHVpbnQsIHVuc2lnbmVkIGludCwgLSwgMSkKLSNlbmRpZiAvKiBDS19GX1BSX0RFQ19VSU5U
X1pFUk8gKi8KLQotI2VuZGlmIC8qIENLX0ZfUFJfTE9BRF9VSU5UICYmIENLX0ZfUFJfQ0FTX1VJ
TlRfVkFMVUUgKi8KLQotI2lmIGRlZmluZWQoQ0tfRl9QUl9MT0FEX1BUUikgJiYgZGVmaW5lZChD
S19GX1BSX0NBU19QVFJfVkFMVUUpCi0KLSNpZm5kZWYgQ0tfRl9QUl9JTkNfUFRSCi0jZGVmaW5l
IENLX0ZfUFJfSU5DX1BUUgotQ0tfUFJfVU5BUlkoaW5jLCBhZGQsIHB0ciwgdm9pZCwgdWludHB0
cl90KQotI2VuZGlmIC8qIENLX0ZfUFJfSU5DX1BUUiAqLwotCi0jaWZuZGVmIENLX0ZfUFJfSU5D
X1BUUl9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfSU5DX1BUUl9aRVJPCi1DS19QUl9VTkFSWV9aKGlu
YywgcHRyLCB2b2lkLCB1aW50cHRyX3QsICssIHZvaWQgKiwgVUlOVF9NQVgpCi0jZW5kaWYgLyog
Q0tfRl9QUl9JTkNfUFRSX1pFUk8gKi8KLQotI2lmbmRlZiBDS19GX1BSX0RFQ19QVFIKLSNkZWZp
bmUgQ0tfRl9QUl9ERUNfUFRSCi1DS19QUl9VTkFSWShkZWMsIHN1YiwgcHRyLCB2b2lkLCB1aW50
cHRyX3QpCi0jZW5kaWYgLyogQ0tfRl9QUl9ERUNfUFRSICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9E
RUNfUFRSX1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9ERUNfUFRSX1pFUk8KLUNLX1BSX1VOQVJZX1oo
ZGVjLCBwdHIsIHZvaWQsIHVpbnRwdHJfdCwgLSwgdm9pZCAqLCAxKQotI2VuZGlmIC8qIENLX0Zf
UFJfREVDX1BUUl9aRVJPICovCi0KLSNlbmRpZiAvKiBDS19GX1BSX0xPQURfUFRSICYmIENLX0Zf
UFJfQ0FTX1BUUl9WQUxVRSAqLwotCi0jaWYgZGVmaW5lZChDS19GX1BSX0xPQURfNjQpICYmIGRl
ZmluZWQoQ0tfRl9QUl9DQVNfNjRfVkFMVUUpCi0KLSNpZm5kZWYgQ0tfRl9QUl9JTkNfNjQKLSNk
ZWZpbmUgQ0tfRl9QUl9JTkNfNjQKLUNLX1BSX1VOQVJZX1MoaW5jLCBhZGQsIDY0LCB1aW50NjRf
dCkKLSNlbmRpZiAvKiBDS19GX1BSX0lOQ182NCAqLwotCi0jaWZuZGVmIENLX0ZfUFJfSU5DXzY0
X1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9JTkNfNjRfWkVSTwotQ0tfUFJfVU5BUllfWl9TKGluYywg
NjQsIHVpbnQ2NF90LCArLCBVSU5UNjRfTUFYKQotI2VuZGlmIC8qIENLX0ZfUFJfSU5DXzY0X1pF
Uk8gKi8KLQotI2lmbmRlZiBDS19GX1BSX0RFQ182NAotI2RlZmluZSBDS19GX1BSX0RFQ182NAot
Q0tfUFJfVU5BUllfUyhkZWMsIHN1YiwgNjQsIHVpbnQ2NF90KQotI2VuZGlmIC8qIENLX0ZfUFJf
REVDXzY0ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9ERUNfNjRfWkVSTwotI2RlZmluZSBDS19GX1BS
X0RFQ182NF9aRVJPCi1DS19QUl9VTkFSWV9aX1MoZGVjLCA2NCwgdWludDY0X3QsIC0sIDEpCi0j
ZW5kaWYgLyogQ0tfRl9QUl9ERUNfNjRfWkVSTyAqLwotCi0jZW5kaWYgLyogQ0tfRl9QUl9MT0FE
XzY0ICYmIENLX0ZfUFJfQ0FTXzY0X1ZBTFVFICovCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfTE9B
RF8zMikgJiYgZGVmaW5lZChDS19GX1BSX0NBU18zMl9WQUxVRSkKLQotI2lmbmRlZiBDS19GX1BS
X0lOQ18zMgotI2RlZmluZSBDS19GX1BSX0lOQ18zMgotQ0tfUFJfVU5BUllfUyhpbmMsIGFkZCwg
MzIsIHVpbnQzMl90KQotI2VuZGlmIC8qIENLX0ZfUFJfSU5DXzMyICovCi0KLSNpZm5kZWYgQ0tf
Rl9QUl9JTkNfMzJfWkVSTwotI2RlZmluZSBDS19GX1BSX0lOQ18zMl9aRVJPCi1DS19QUl9VTkFS
WV9aX1MoaW5jLCAzMiwgdWludDMyX3QsICssIFVJTlQzMl9NQVgpCi0jZW5kaWYgLyogQ0tfRl9Q
Ul9JTkNfMzJfWkVSTyAqLwotCi0jaWZuZGVmIENLX0ZfUFJfREVDXzMyCi0jZGVmaW5lIENLX0Zf
UFJfREVDXzMyCi1DS19QUl9VTkFSWV9TKGRlYywgc3ViLCAzMiwgdWludDMyX3QpCi0jZW5kaWYg
LyogQ0tfRl9QUl9ERUNfMzIgKi8KLQotI2lmbmRlZiBDS19GX1BSX0RFQ18zMl9aRVJPCi0jZGVm
aW5lIENLX0ZfUFJfREVDXzMyX1pFUk8KLUNLX1BSX1VOQVJZX1pfUyhkZWMsIDMyLCB1aW50MzJf
dCwgLSwgMSkKLSNlbmRpZiAvKiBDS19GX1BSX0RFQ18zMl9aRVJPICovCi0KLSNlbmRpZiAvKiBD
S19GX1BSX0xPQURfMzIgJiYgQ0tfRl9QUl9DQVNfMzJfVkFMVUUgKi8KLQotI2lmIGRlZmluZWQo
Q0tfRl9QUl9MT0FEXzE2KSAmJiBkZWZpbmVkKENLX0ZfUFJfQ0FTXzE2X1ZBTFVFKQotCi0jaWZu
ZGVmIENLX0ZfUFJfSU5DXzE2Ci0jZGVmaW5lIENLX0ZfUFJfSU5DXzE2Ci1DS19QUl9VTkFSWV9T
KGluYywgYWRkLCAxNiwgdWludDE2X3QpCi0jZW5kaWYgLyogQ0tfRl9QUl9JTkNfMTYgKi8KLQot
I2lmbmRlZiBDS19GX1BSX0lOQ18xNl9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfSU5DXzE2X1pFUk8K
LUNLX1BSX1VOQVJZX1pfUyhpbmMsIDE2LCB1aW50MTZfdCwgKywgVUlOVDE2X01BWCkKLSNlbmRp
ZiAvKiBDS19GX1BSX0lOQ18xNl9aRVJPICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9ERUNfMTYKLSNk
ZWZpbmUgQ0tfRl9QUl9ERUNfMTYKLUNLX1BSX1VOQVJZX1MoZGVjLCBzdWIsIDE2LCB1aW50MTZf
dCkKLSNlbmRpZiAvKiBDS19GX1BSX0RFQ18xNiAqLwotCi0jaWZuZGVmIENLX0ZfUFJfREVDXzE2
X1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9ERUNfMTZfWkVSTwotQ0tfUFJfVU5BUllfWl9TKGRlYywg
MTYsIHVpbnQxNl90LCAtLCAxKQotI2VuZGlmIC8qIENLX0ZfUFJfREVDXzE2X1pFUk8gKi8KLQot
I2VuZGlmIC8qIENLX0ZfUFJfTE9BRF8xNiAmJiBDS19GX1BSX0NBU18xNl9WQUxVRSAqLwotCi0j
aWYgZGVmaW5lZChDS19GX1BSX0xPQURfOCkgJiYgZGVmaW5lZChDS19GX1BSX0NBU184X1ZBTFVF
KQotCi0jaWZuZGVmIENLX0ZfUFJfSU5DXzgKLSNkZWZpbmUgQ0tfRl9QUl9JTkNfOAotQ0tfUFJf
VU5BUllfUyhpbmMsIGFkZCwgOCwgdWludDhfdCkKLSNlbmRpZiAvKiBDS19GX1BSX0lOQ184ICov
Ci0KLSNpZm5kZWYgQ0tfRl9QUl9JTkNfOF9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfSU5DXzhfWkVS
TwotQ0tfUFJfVU5BUllfWl9TKGluYywgOCwgdWludDhfdCwgKywgVUlOVDhfTUFYKQotI2VuZGlm
IC8qIENLX0ZfUFJfSU5DXzhfWkVSTyAqLwotCi0jaWZuZGVmIENLX0ZfUFJfREVDXzgKLSNkZWZp
bmUgQ0tfRl9QUl9ERUNfOAotQ0tfUFJfVU5BUllfUyhkZWMsIHN1YiwgOCwgdWludDhfdCkKLSNl
bmRpZiAvKiBDS19GX1BSX0RFQ184ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9ERUNfOF9aRVJPCi0j
ZGVmaW5lIENLX0ZfUFJfREVDXzhfWkVSTwotQ0tfUFJfVU5BUllfWl9TKGRlYywgOCwgdWludDhf
dCwgLSwgMSkKLSNlbmRpZiAvKiBDS19GX1BSX0RFQ184X1pFUk8gKi8KLQotI2VuZGlmIC8qIENL
X0ZfUFJfTE9BRF84ICYmIENLX0ZfUFJfQ0FTXzhfVkFMVUUgKi8KLQotI3VuZGVmIENLX1BSX1VO
QVJZX1pfUwotI3VuZGVmIENLX1BSX1VOQVJZX1MKLSN1bmRlZiBDS19QUl9VTkFSWV9aCi0jdW5k
ZWYgQ0tfUFJfVU5BUlkKLQotI2RlZmluZSBDS19QUl9OKEssIFMsIE0sIFQsIFAsIEMpCQkJCQlc
Ci0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJCQlcCi0JY2tfcHJfIyNLIyNfIyNTKE0gKnRh
cmdldCkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JCVQgcHJldmlvdXM7CQkJCQkJXAotCQlDIHB1bnQ7
CQkJCQkJCVwKLQkJcHVudCA9IChDKWNrX3ByX21kX2xvYWRfIyNTKHRhcmdldCk7CQkJXAotCQlw
cmV2aW91cyA9IChUKXB1bnQ7CQkJCQlcCi0JCXdoaWxlIChja19wcl9jYXNfIyNTIyNfdmFsdWUo
dGFyZ2V0LAkJCVwKLQkJCQkJICAgICAoQylwcmV2aW91cywJCVwKLQkJCQkJICAgICAoQykoUCBw
cmV2aW91cyksCQlcCi0JCQkJCSAgICAgJnByZXZpb3VzKSA9PSBmYWxzZSkJXAotCQkJY2tfcHJf
c3RhbGwoKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQkJcmV0dXJuOwkJCQkJCQlcCi0JfQotCi0jZGVm
aW5lIENLX1BSX05fWihTLCBNLCBULCBDKQkJCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIHZv
aWQJCQkJCVwKLQlja19wcl9uZWdfIyNTIyNfemVybyhNICp0YXJnZXQsIGJvb2wgKnplcm8pCQkJ
XAotCXsJCQkJCQkJCVwKLQkJVCBwcmV2aW91czsJCQkJCQlcCi0JCUMgcHVudDsJCQkJCQkJXAot
CQlwdW50ID0gKEMpY2tfcHJfbWRfbG9hZF8jI1ModGFyZ2V0KTsJCQlcCi0JCXByZXZpb3VzID0g
KFQpcHVudDsJCQkJCVwKLQkJd2hpbGUgKGNrX3ByX2Nhc18jI1MjI192YWx1ZSh0YXJnZXQsCQkJ
XAotCQkJCQkgICAgIChDKXByZXZpb3VzLAkJXAotCQkJCQkgICAgIChDKSgtcHJldmlvdXMpLAkJ
XAotCQkJCQkgICAgICZwcmV2aW91cykgPT0gZmFsc2UpCVwKLQkJCWNrX3ByX3N0YWxsKCk7CQkJ
CQlcCi0JCQkJCQkJCQlcCi0JCSp6ZXJvID0gcHJldmlvdXMgPT0gMDsJCQkJCVwKLQkJcmV0dXJu
OwkJCQkJCQlcCi0JfQotCi0jZGVmaW5lIENLX1BSX05fUyhLLCBTLCBNLCBQKQlDS19QUl9OKEss
IFMsIE0sIE0sIFAsIE0pCi0jZGVmaW5lIENLX1BSX05fWl9TKFMsIE0pIAlDS19QUl9OX1ooUywg
TSwgTSwgTSkKLQotI2lmIGRlZmluZWQoQ0tfRl9QUl9MT0FEX0NIQVIpICYmIGRlZmluZWQoQ0tf
Rl9QUl9DQVNfQ0hBUl9WQUxVRSkKLQotI2lmbmRlZiBDS19GX1BSX05PVF9DSEFSCi0jZGVmaW5l
IENLX0ZfUFJfTk9UX0NIQVIKLUNLX1BSX05fUyhub3QsIGNoYXIsIGNoYXIsIH4pCi0jZW5kaWYg
LyogQ0tfRl9QUl9OT1RfQ0hBUiAqLwotCi0jaWZuZGVmIENLX0ZfUFJfTkVHX0NIQVIKLSNkZWZp
bmUgQ0tfRl9QUl9ORUdfQ0hBUgotQ0tfUFJfTl9TKG5lZywgY2hhciwgY2hhciwgLSkKLSNlbmRp
ZiAvKiBDS19GX1BSX05FR19DSEFSICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9ORUdfQ0hBUl9aRVJP
Ci0jZGVmaW5lIENLX0ZfUFJfTkVHX0NIQVJfWkVSTwotQ0tfUFJfTl9aX1MoY2hhciwgY2hhcikK
LSNlbmRpZiAvKiBDS19GX1BSX05FR19DSEFSX1pFUk8gKi8KLQotI2VuZGlmIC8qIENLX0ZfUFJf
TE9BRF9DSEFSICYmIENLX0ZfUFJfQ0FTX0NIQVJfVkFMVUUgKi8KLQotI2lmIGRlZmluZWQoQ0tf
Rl9QUl9MT0FEX0lOVCkgJiYgZGVmaW5lZChDS19GX1BSX0NBU19JTlRfVkFMVUUpCi0KLSNpZm5k
ZWYgQ0tfRl9QUl9OT1RfSU5UCi0jZGVmaW5lIENLX0ZfUFJfTk9UX0lOVAotQ0tfUFJfTl9TKG5v
dCwgaW50LCBpbnQsIH4pCi0jZW5kaWYgLyogQ0tfRl9QUl9OT1RfSU5UICovCi0KLSNpZm5kZWYg
Q0tfRl9QUl9ORUdfSU5UCi0jZGVmaW5lIENLX0ZfUFJfTkVHX0lOVAotQ0tfUFJfTl9TKG5lZywg
aW50LCBpbnQsIC0pCi0jZW5kaWYgLyogQ0tfRl9QUl9ORUdfSU5UICovCi0KLSNpZm5kZWYgQ0tf
Rl9QUl9ORUdfSU5UX1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9ORUdfSU5UX1pFUk8KLUNLX1BSX05f
Wl9TKGludCwgaW50KQotI2VuZGlmIC8qIENLX0ZfUFJfTkVHX0lOVF9aRVJPICovCi0KLSNlbmRp
ZiAvKiBDS19GX1BSX0xPQURfSU5UICYmIENLX0ZfUFJfQ0FTX0lOVF9WQUxVRSAqLwotCi0jaWYg
ZGVmaW5lZChDS19GX1BSX0xPQURfRE9VQkxFKSAmJiBkZWZpbmVkKENLX0ZfUFJfQ0FTX0RPVUJM
RV9WQUxVRSkgJiYgXAotCSAgICAhZGVmaW5lZChDS19QUl9ESVNBQkxFX0RPVUJMRSkKLQotI2lm
bmRlZiBDS19GX1BSX05FR19ET1VCTEUKLSNkZWZpbmUgQ0tfRl9QUl9ORUdfRE9VQkxFCi1DS19Q
Ul9OX1MobmVnLCBkb3VibGUsIGRvdWJsZSwgLSkKLSNlbmRpZiAvKiBDS19GX1BSX05FR19ET1VC
TEUgKi8KLQotI2VuZGlmIC8qIENLX0ZfUFJfTE9BRF9ET1VCTEUgJiYgQ0tfRl9QUl9DQVNfRE9V
QkxFX1ZBTFVFICYmICFDS19QUl9ESVNBQkxFX0RPVUJMRSAqLwotCi0jaWYgZGVmaW5lZChDS19G
X1BSX0xPQURfVUlOVCkgJiYgZGVmaW5lZChDS19GX1BSX0NBU19VSU5UX1ZBTFVFKQotCi0jaWZu
ZGVmIENLX0ZfUFJfTk9UX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9OT1RfVUlOVAotQ0tfUFJfTl9T
KG5vdCwgdWludCwgdW5zaWduZWQgaW50LCB+KQotI2VuZGlmIC8qIENLX0ZfUFJfTk9UX1VJTlQg
Ki8KLQotI2lmbmRlZiBDS19GX1BSX05FR19VSU5UCi0jZGVmaW5lIENLX0ZfUFJfTkVHX1VJTlQK
LUNLX1BSX05fUyhuZWcsIHVpbnQsIHVuc2lnbmVkIGludCwgLSkKLSNlbmRpZiAvKiBDS19GX1BS
X05FR19VSU5UICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9ORUdfVUlOVF9aRVJPCi0jZGVmaW5lIENL
X0ZfUFJfTkVHX1VJTlRfWkVSTwotQ0tfUFJfTl9aX1ModWludCwgdW5zaWduZWQgaW50KQotI2Vu
ZGlmIC8qIENLX0ZfUFJfTkVHX1VJTlRfWkVSTyAqLwotCi0jZW5kaWYgLyogQ0tfRl9QUl9MT0FE
X1VJTlQgJiYgQ0tfRl9QUl9DQVNfVUlOVF9WQUxVRSAqLwotCi0jaWYgZGVmaW5lZChDS19GX1BS
X0xPQURfUFRSKSAmJiBkZWZpbmVkKENLX0ZfUFJfQ0FTX1BUUl9WQUxVRSkKLQotI2lmbmRlZiBD
S19GX1BSX05PVF9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9OT1RfUFRSCi1DS19QUl9OKG5vdCwgcHRy
LCB2b2lkLCB1aW50cHRyX3QsIH4sIHZvaWQgKikKLSNlbmRpZiAvKiBDS19GX1BSX05PVF9QVFIg
Ki8KLQotI2lmbmRlZiBDS19GX1BSX05FR19QVFIKLSNkZWZpbmUgQ0tfRl9QUl9ORUdfUFRSCi1D
S19QUl9OKG5lZywgcHRyLCB2b2lkLCB1aW50cHRyX3QsIC0sIHZvaWQgKikKLSNlbmRpZiAvKiBD
S19GX1BSX05FR19QVFIgKi8KLQotI2lmbmRlZiBDS19GX1BSX05FR19QVFJfWkVSTwotI2RlZmlu
ZSBDS19GX1BSX05FR19QVFJfWkVSTwotQ0tfUFJfTl9aKHB0ciwgdm9pZCwgdWludHB0cl90LCB2
b2lkICopCi0jZW5kaWYgLyogQ0tfRl9QUl9ORUdfUFRSX1pFUk8gKi8KLQotI2VuZGlmIC8qIENL
X0ZfUFJfTE9BRF9QVFIgJiYgQ0tfRl9QUl9DQVNfUFRSX1ZBTFVFICovCi0KLSNpZiBkZWZpbmVk
KENLX0ZfUFJfTE9BRF82NCkgJiYgZGVmaW5lZChDS19GX1BSX0NBU182NF9WQUxVRSkKLQotI2lm
bmRlZiBDS19GX1BSX05PVF82NAotI2RlZmluZSBDS19GX1BSX05PVF82NAotQ0tfUFJfTl9TKG5v
dCwgNjQsIHVpbnQ2NF90LCB+KQotI2VuZGlmIC8qIENLX0ZfUFJfTk9UXzY0ICovCi0KLSNpZm5k
ZWYgQ0tfRl9QUl9ORUdfNjQKLSNkZWZpbmUgQ0tfRl9QUl9ORUdfNjQKLUNLX1BSX05fUyhuZWcs
IDY0LCB1aW50NjRfdCwgLSkKLSNlbmRpZiAvKiBDS19GX1BSX05FR182NCAqLwotCi0jaWZuZGVm
IENLX0ZfUFJfTkVHXzY0X1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9ORUdfNjRfWkVSTwotQ0tfUFJf
Tl9aX1MoNjQsIHVpbnQ2NF90KQotI2VuZGlmIC8qIENLX0ZfUFJfTkVHXzY0X1pFUk8gKi8KLQot
I2VuZGlmIC8qIENLX0ZfUFJfTE9BRF82NCAmJiBDS19GX1BSX0NBU182NF9WQUxVRSAqLwotCi0j
aWYgZGVmaW5lZChDS19GX1BSX0xPQURfMzIpICYmIGRlZmluZWQoQ0tfRl9QUl9DQVNfMzJfVkFM
VUUpCi0KLSNpZm5kZWYgQ0tfRl9QUl9OT1RfMzIKLSNkZWZpbmUgQ0tfRl9QUl9OT1RfMzIKLUNL
X1BSX05fUyhub3QsIDMyLCB1aW50MzJfdCwgfikKLSNlbmRpZiAvKiBDS19GX1BSX05PVF8zMiAq
LwotCi0jaWZuZGVmIENLX0ZfUFJfTkVHXzMyCi0jZGVmaW5lIENLX0ZfUFJfTkVHXzMyCi1DS19Q
Ul9OX1MobmVnLCAzMiwgdWludDMyX3QsIC0pCi0jZW5kaWYgLyogQ0tfRl9QUl9ORUdfMzIgKi8K
LQotI2lmbmRlZiBDS19GX1BSX05FR18zMl9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfTkVHXzMyX1pF
Uk8KLUNLX1BSX05fWl9TKDMyLCB1aW50MzJfdCkKLSNlbmRpZiAvKiBDS19GX1BSX05FR18zMl9a
RVJPICovCi0KLSNlbmRpZiAvKiBDS19GX1BSX0xPQURfMzIgJiYgQ0tfRl9QUl9DQVNfMzJfVkFM
VUUgKi8KLQotI2lmIGRlZmluZWQoQ0tfRl9QUl9MT0FEXzE2KSAmJiBkZWZpbmVkKENLX0ZfUFJf
Q0FTXzE2X1ZBTFVFKQotCi0jaWZuZGVmIENLX0ZfUFJfTk9UXzE2Ci0jZGVmaW5lIENLX0ZfUFJf
Tk9UXzE2Ci1DS19QUl9OX1Mobm90LCAxNiwgdWludDE2X3QsIH4pCi0jZW5kaWYgLyogQ0tfRl9Q
Ul9OT1RfMTYgKi8KLQotI2lmbmRlZiBDS19GX1BSX05FR18xNgotI2RlZmluZSBDS19GX1BSX05F
R18xNgotQ0tfUFJfTl9TKG5lZywgMTYsIHVpbnQxNl90LCAtKQotI2VuZGlmIC8qIENLX0ZfUFJf
TkVHXzE2ICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9ORUdfMTZfWkVSTwotI2RlZmluZSBDS19GX1BS
X05FR18xNl9aRVJPCi1DS19QUl9OX1pfUygxNiwgdWludDE2X3QpCi0jZW5kaWYgLyogQ0tfRl9Q
Ul9ORUdfMTZfWkVSTyAqLwotCi0jZW5kaWYgLyogQ0tfRl9QUl9MT0FEXzE2ICYmIENLX0ZfUFJf
Q0FTXzE2X1ZBTFVFICovCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfTE9BRF84KSAmJiBkZWZpbmVk
KENLX0ZfUFJfQ0FTXzhfVkFMVUUpCi0KLSNpZm5kZWYgQ0tfRl9QUl9OT1RfOAotI2RlZmluZSBD
S19GX1BSX05PVF84Ci1DS19QUl9OX1Mobm90LCA4LCB1aW50OF90LCB+KQotI2VuZGlmIC8qIENL
X0ZfUFJfTk9UXzggKi8KLQotI2lmbmRlZiBDS19GX1BSX05FR184Ci0jZGVmaW5lIENLX0ZfUFJf
TkVHXzgKLUNLX1BSX05fUyhuZWcsIDgsIHVpbnQ4X3QsIC0pCi0jZW5kaWYgLyogQ0tfRl9QUl9O
RUdfOCAqLwotCi0jaWZuZGVmIENLX0ZfUFJfTkVHXzhfWkVSTwotI2RlZmluZSBDS19GX1BSX05F
R184X1pFUk8KLUNLX1BSX05fWl9TKDgsIHVpbnQ4X3QpCi0jZW5kaWYgLyogQ0tfRl9QUl9ORUdf
OF9aRVJPICovCi0KLSNlbmRpZiAvKiBDS19GX1BSX0xPQURfOCAmJiBDS19GX1BSX0NBU184X1ZB
TFVFICovCi0KLSN1bmRlZiBDS19QUl9OX1pfUwotI3VuZGVmIENLX1BSX05fUwotI3VuZGVmIENL
X1BSX05fWgotI3VuZGVmIENLX1BSX04KLQotI2RlZmluZSBDS19QUl9GQUEoUywgTSwgVCwgQykJ
CQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyBDCQkJCQkJXAotCWNrX3ByX2ZhYV8jI1MoTSAq
dGFyZ2V0LCBUIGRlbHRhKQkJCQlcCi0JewkJCQkJCQkJXAotCQlUIHByZXZpb3VzOwkJCQkJCVwK
LQkJQyBwdW50OwkJCQkJCQlcCi0JCXB1bnQgPSAoQylja19wcl9tZF9sb2FkXyMjUyh0YXJnZXQp
OwkJCVwKLQkJcHJldmlvdXMgPSAoVClwdW50OwkJCQkJXAotCQl3aGlsZSAoY2tfcHJfY2FzXyMj
UyMjX3ZhbHVlKHRhcmdldCwJCQlcCi0JCQkJCSAgICAgKEMpcHJldmlvdXMsCQlcCi0JCQkJCSAg
ICAgKEMpKHByZXZpb3VzICsgZGVsdGEpLAlcCi0JCQkJCSAgICAgJnByZXZpb3VzKSA9PSBmYWxz
ZSkJXAotCQkJY2tfcHJfc3RhbGwoKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQkJcmV0dXJuICgoQylw
cmV2aW91cyk7CQkJCQlcCi0JfQotCi0jZGVmaW5lIENLX1BSX0ZBUyhTLCBNLCBDKQkJCQkJCVwK
LQlDS19DQ19JTkxJTkUgc3RhdGljIEMJCQkJCQlcCi0JY2tfcHJfZmFzXyMjUyhNICp0YXJnZXQs
IEMgdXBkYXRlKQkJCQlcCi0JewkJCQkJCQkJXAotCQlDIHByZXZpb3VzOwkJCQkJCVwKLQkJcHJl
dmlvdXMgPSBja19wcl9tZF9sb2FkXyMjUyh0YXJnZXQpOwkJCVwKLQkJd2hpbGUgKGNrX3ByX2Nh
c18jI1MjI192YWx1ZSh0YXJnZXQsCQkJXAotCQkJCQkgICAgIHByZXZpb3VzLAkJCVwKLQkJCQkJ
ICAgICB1cGRhdGUsCQkJXAotCQkJCQkgICAgICZwcmV2aW91cykgPT0gZmFsc2UpCVwKLQkJCWNr
X3ByX3N0YWxsKCk7CQkJCQlcCi0JCQkJCQkJCQlcCi0JCXJldHVybiAocHJldmlvdXMpOwkJCQkJ
XAotCX0KLQotI2RlZmluZSBDS19QUl9GQUFfUyhTLCBNKSBDS19QUl9GQUEoUywgTSwgTSwgTSkK
LSNkZWZpbmUgQ0tfUFJfRkFTX1MoUywgTSkgQ0tfUFJfRkFTKFMsIE0sIE0pCi0KLSNpZiBkZWZp
bmVkKENLX0ZfUFJfTE9BRF9DSEFSKSAmJiBkZWZpbmVkKENLX0ZfUFJfQ0FTX0NIQVJfVkFMVUUp
Ci0KLSNpZm5kZWYgQ0tfRl9QUl9GQUFfQ0hBUgotI2RlZmluZSBDS19GX1BSX0ZBQV9DSEFSCi1D
S19QUl9GQUFfUyhjaGFyLCBjaGFyKQotI2VuZGlmIC8qIENLX0ZfUFJfRkFBX0NIQVIgKi8KLQot
I2lmbmRlZiBDS19GX1BSX0ZBU19DSEFSCi0jZGVmaW5lIENLX0ZfUFJfRkFTX0NIQVIKLUNLX1BS
X0ZBU19TKGNoYXIsIGNoYXIpCi0jZW5kaWYgLyogQ0tfRl9QUl9GQVNfQ0hBUiAqLwotCi0jZW5k
aWYgLyogQ0tfRl9QUl9MT0FEX0NIQVIgJiYgQ0tfRl9QUl9DQVNfQ0hBUl9WQUxVRSAqLwotCi0j
aWYgZGVmaW5lZChDS19GX1BSX0xPQURfSU5UKSAmJiBkZWZpbmVkKENLX0ZfUFJfQ0FTX0lOVF9W
QUxVRSkKLQotI2lmbmRlZiBDS19GX1BSX0ZBQV9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9GQUFfSU5U
Ci1DS19QUl9GQUFfUyhpbnQsIGludCkKLSNlbmRpZiAvKiBDS19GX1BSX0ZBQV9JTlQgKi8KLQot
I2lmbmRlZiBDS19GX1BSX0ZBU19JTlQKLSNkZWZpbmUgQ0tfRl9QUl9GQVNfSU5UCi1DS19QUl9G
QVNfUyhpbnQsIGludCkKLSNlbmRpZiAvKiBDS19GX1BSX0ZBU19JTlQgKi8KLQotI2VuZGlmIC8q
IENLX0ZfUFJfTE9BRF9JTlQgJiYgQ0tfRl9QUl9DQVNfSU5UX1ZBTFVFICovCi0KLSNpZiBkZWZp
bmVkKENLX0ZfUFJfTE9BRF9ET1VCTEUpICYmIGRlZmluZWQoQ0tfRl9QUl9DQVNfRE9VQkxFX1ZB
TFVFKSAmJiBcCi0JICAgICFkZWZpbmVkKENLX1BSX0RJU0FCTEVfRE9VQkxFKQotCi0jaWZuZGVm
IENLX0ZfUFJfRkFBX0RPVUJMRQotI2RlZmluZSBDS19GX1BSX0ZBQV9ET1VCTEUKLUNLX1BSX0ZB
QV9TKGRvdWJsZSwgZG91YmxlKQotI2VuZGlmIC8qIENLX0ZfUFJfRkFBX0RPVUJMRSAqLwotCi0j
aWZuZGVmIENLX0ZfUFJfRkFTX0RPVUJMRQotI2RlZmluZSBDS19GX1BSX0ZBU19ET1VCTEUKLUNL
X1BSX0ZBU19TKGRvdWJsZSwgZG91YmxlKQotI2VuZGlmIC8qIENLX0ZfUFJfRkFTX0RPVUJMRSAq
LwotCi0jZW5kaWYgLyogQ0tfRl9QUl9MT0FEX0RPVUJMRSAmJiBDS19GX1BSX0NBU19ET1VCTEVf
VkFMVUUgJiYgIUNLX1BSX0RJU0FCTEVfRE9VQkxFICovCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJf
TE9BRF9VSU5UKSAmJiBkZWZpbmVkKENLX0ZfUFJfQ0FTX1VJTlRfVkFMVUUpCi0KLSNpZm5kZWYg
Q0tfRl9QUl9GQUFfVUlOVAotI2RlZmluZSBDS19GX1BSX0ZBQV9VSU5UCi1DS19QUl9GQUFfUyh1
aW50LCB1bnNpZ25lZCBpbnQpCi0jZW5kaWYgLyogQ0tfRl9QUl9GQUFfVUlOVCAqLwotCi0jaWZu
ZGVmIENLX0ZfUFJfRkFTX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9GQVNfVUlOVAotQ0tfUFJfRkFT
X1ModWludCwgdW5zaWduZWQgaW50KQotI2VuZGlmIC8qIENLX0ZfUFJfRkFTX1VJTlQgKi8KLQot
I2VuZGlmIC8qIENLX0ZfUFJfTE9BRF9VSU5UICYmIENLX0ZfUFJfQ0FTX1VJTlRfVkFMVUUgKi8K
LQotI2lmIGRlZmluZWQoQ0tfRl9QUl9MT0FEX1BUUikgJiYgZGVmaW5lZChDS19GX1BSX0NBU19Q
VFJfVkFMVUUpCi0KLSNpZm5kZWYgQ0tfRl9QUl9GQUFfUFRSCi0jZGVmaW5lIENLX0ZfUFJfRkFB
X1BUUgotQ0tfUFJfRkFBKHB0ciwgdm9pZCwgdWludHB0cl90LCB2b2lkICopCi0jZW5kaWYgLyog
Q0tfRl9QUl9GQUFfUFRSICovCi0KLSNpZm5kZWYgQ0tfRl9QUl9GQVNfUFRSCi0jZGVmaW5lIENL
X0ZfUFJfRkFTX1BUUgotQ0tfUFJfRkFTKHB0ciwgdm9pZCwgdm9pZCAqKQotI2VuZGlmIC8qIENL
X0ZfUFJfRkFTX1BUUiAqLwotCi0jZW5kaWYgLyogQ0tfRl9QUl9MT0FEX1BUUiAmJiBDS19GX1BS
X0NBU19QVFJfVkFMVUUgKi8KLQotI2lmIGRlZmluZWQoQ0tfRl9QUl9MT0FEXzY0KSAmJiBkZWZp
bmVkKENLX0ZfUFJfQ0FTXzY0X1ZBTFVFKQotCi0jaWZuZGVmIENLX0ZfUFJfRkFBXzY0Ci0jZGVm
aW5lIENLX0ZfUFJfRkFBXzY0Ci1DS19QUl9GQUFfUyg2NCwgdWludDY0X3QpCi0jZW5kaWYgLyog
Q0tfRl9QUl9GQUFfNjQgKi8KLQotI2lmbmRlZiBDS19GX1BSX0ZBU182NAotI2RlZmluZSBDS19G
X1BSX0ZBU182NAotQ0tfUFJfRkFTX1MoNjQsIHVpbnQ2NF90KQotI2VuZGlmIC8qIENLX0ZfUFJf
RkFTXzY0ICovCi0KLSNlbmRpZiAvKiBDS19GX1BSX0xPQURfNjQgJiYgQ0tfRl9QUl9DQVNfNjRf
VkFMVUUgKi8KLQotI2lmIGRlZmluZWQoQ0tfRl9QUl9MT0FEXzMyKSAmJiBkZWZpbmVkKENLX0Zf
UFJfQ0FTXzMyX1ZBTFVFKQotCi0jaWZuZGVmIENLX0ZfUFJfRkFBXzMyCi0jZGVmaW5lIENLX0Zf
UFJfRkFBXzMyCi1DS19QUl9GQUFfUygzMiwgdWludDMyX3QpCi0jZW5kaWYgLyogQ0tfRl9QUl9G
QUFfMzIgKi8KLQotI2lmbmRlZiBDS19GX1BSX0ZBU18zMgotI2RlZmluZSBDS19GX1BSX0ZBU18z
MgotQ0tfUFJfRkFTX1MoMzIsIHVpbnQzMl90KQotI2VuZGlmIC8qIENLX0ZfUFJfRkFTXzMyICov
Ci0KLSNlbmRpZiAvKiBDS19GX1BSX0xPQURfMzIgJiYgQ0tfRl9QUl9DQVNfMzJfVkFMVUUgKi8K
LQotI2lmIGRlZmluZWQoQ0tfRl9QUl9MT0FEXzE2KSAmJiBkZWZpbmVkKENLX0ZfUFJfQ0FTXzE2
X1ZBTFVFKQotCi0jaWZuZGVmIENLX0ZfUFJfRkFBXzE2Ci0jZGVmaW5lIENLX0ZfUFJfRkFBXzE2
Ci1DS19QUl9GQUFfUygxNiwgdWludDE2X3QpCi0jZW5kaWYgLyogQ0tfRl9QUl9GQUFfMTYgKi8K
LQotI2lmbmRlZiBDS19GX1BSX0ZBU18xNgotI2RlZmluZSBDS19GX1BSX0ZBU18xNgotQ0tfUFJf
RkFTX1MoMTYsIHVpbnQxNl90KQotI2VuZGlmIC8qIENLX0ZfUFJfRkFTXzE2ICovCi0KLSNlbmRp
ZiAvKiBDS19GX1BSX0xPQURfMTYgJiYgQ0tfRl9QUl9DQVNfMTZfVkFMVUUgKi8KLQotI2lmIGRl
ZmluZWQoQ0tfRl9QUl9MT0FEXzgpICYmIGRlZmluZWQoQ0tfRl9QUl9DQVNfOF9WQUxVRSkKLQot
I2lmbmRlZiBDS19GX1BSX0ZBQV84Ci0jZGVmaW5lIENLX0ZfUFJfRkFBXzgKLUNLX1BSX0ZBQV9T
KDgsIHVpbnQ4X3QpCi0jZW5kaWYgLyogQ0tfRl9QUl9GQUFfOCAqLwotCi0jaWZuZGVmIENLX0Zf
UFJfRkFTXzgKLSNkZWZpbmUgQ0tfRl9QUl9GQVNfOAotQ0tfUFJfRkFTX1MoOCwgdWludDhfdCkK
LSNlbmRpZiAvKiBDS19GX1BSX0ZBU184ICovCi0KLSNlbmRpZiAvKiBDS19GX1BSX0xPQURfOCAm
JiBDS19GX1BSX0NBU184X1ZBTFVFICovCi0KLSN1bmRlZiBDS19QUl9GQUFfUwotI3VuZGVmIENL
X1BSX0ZBU19TCi0jdW5kZWYgQ0tfUFJfRkFBCi0jdW5kZWYgQ0tfUFJfRkFTCi0KLSNlbmRpZiAv
KiBDS19QUl9IICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9pbmNsdWRlL2NrX3F1ZXVlLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9p
bmNsdWRlL2NrX3F1ZXVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZTk4NzI5
YmU4ZTczYzhhODFiNzZiNmQzYWE4MzU4YzBkYjBmYzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2sv
aW5jbHVkZS9ja19xdWV1ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDI4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgMjAxMi0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV
VEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdF
LgotICovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkzCi0gKglUaGUgUmVnZW50
cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJQCgjKXF1ZXVlLmgJOC41IChC
ZXJrZWxleSkgOC8yMC85NAotICogJEZyZWVCU0Q6IHJlbGVhc2UvOS4wLjAvc3lzL3N5cy9xdWV1
ZS5oIDIyMTg0MyAyMDExLTA1LTEzIDE1OjQ5OjIzWiBtZGYgJAotICovCi0KLSNpZm5kZWYgQ0tf
UVVFVUVfSAotI2RlZmluZQlDS19RVUVVRV9ICi0KLSNpbmNsdWRlIDxja19wci5oPgotCi0vKgot
ICogVGhpcyBmaWxlIGRlZmluZXMgdGhyZWUgdHlwZXMgb2YgZGF0YSBzdHJ1Y3R1cmVzOiBzaW5n
bHktbGlua2VkIGxpc3RzLAotICogc2luZ2x5LWxpbmtlZCB0YWlsIHF1ZXVlcyBhbmQgbGlzdHMu
Ci0gKgotICogQSBzaW5nbHktbGlua2VkIGxpc3QgaXMgaGVhZGVkIGJ5IGEgc2luZ2xlIGZvcndh
cmQgcG9pbnRlci4gVGhlIGVsZW1lbnRzCi0gKiBhcmUgc2luZ2x5IGxpbmtlZCBmb3IgbWluaW11
bSBzcGFjZSBhbmQgcG9pbnRlciBtYW5pcHVsYXRpb24gb3ZlcmhlYWQgYXQKLSAqIHRoZSBleHBl
bnNlIG9mIE8obikgcmVtb3ZhbCBmb3IgYXJiaXRyYXJ5IGVsZW1lbnRzLiBOZXcgZWxlbWVudHMg
Y2FuIGJlCi0gKiBhZGRlZCB0byB0aGUgbGlzdCBhZnRlciBhbiBleGlzdGluZyBlbGVtZW50IG9y
IGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LgotICogRWxlbWVudHMgYmVpbmcgcmVtb3ZlZCBmcm9t
IHRoZSBoZWFkIG9mIHRoZSBsaXN0IHNob3VsZCB1c2UgdGhlIGV4cGxpY2l0Ci0gKiBtYWNybyBm
b3IgdGhpcyBwdXJwb3NlIGZvciBvcHRpbXVtIGVmZmljaWVuY3kuIEEgc2luZ2x5LWxpbmtlZCBs
aXN0IG1heQotICogb25seSBiZSB0cmF2ZXJzZWQgaW4gdGhlIGZvcndhcmQgZGlyZWN0aW9uLiAg
U2luZ2x5LWxpbmtlZCBsaXN0cyBhcmUgaWRlYWwKLSAqIGZvciBhcHBsaWNhdGlvbnMgd2l0aCBs
YXJnZSBkYXRhc2V0cyBhbmQgZmV3IG9yIG5vIHJlbW92YWxzIG9yIGZvcgotICogaW1wbGVtZW50
aW5nIGEgTElGTyBxdWV1ZS4KLSAqCi0gKiBBIHNpbmdseS1saW5rZWQgdGFpbCBxdWV1ZSBpcyBo
ZWFkZWQgYnkgYSBwYWlyIG9mIHBvaW50ZXJzLCBvbmUgdG8gdGhlCi0gKiBoZWFkIG9mIHRoZSBs
aXN0IGFuZCB0aGUgb3RoZXIgdG8gdGhlIHRhaWwgb2YgdGhlIGxpc3QuIFRoZSBlbGVtZW50cyBh
cmUKLSAqIHNpbmdseSBsaW5rZWQgZm9yIG1pbmltdW0gc3BhY2UgYW5kIHBvaW50ZXIgbWFuaXB1
bGF0aW9uIG92ZXJoZWFkIGF0IHRoZQotICogZXhwZW5zZSBvZiBPKG4pIHJlbW92YWwgZm9yIGFy
Yml0cmFyeSBlbGVtZW50cy4gTmV3IGVsZW1lbnRzIGNhbiBiZSBhZGRlZAotICogdG8gdGhlIGxp
c3QgYWZ0ZXIgYW4gZXhpc3RpbmcgZWxlbWVudCwgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QsIG9y
IGF0IHRoZQotICogZW5kIG9mIHRoZSBsaXN0LiBFbGVtZW50cyBiZWluZyByZW1vdmVkIGZyb20g
dGhlIGhlYWQgb2YgdGhlIHRhaWwgcXVldWUKLSAqIHNob3VsZCB1c2UgdGhlIGV4cGxpY2l0IG1h
Y3JvIGZvciB0aGlzIHB1cnBvc2UgZm9yIG9wdGltdW0gZWZmaWNpZW5jeS4KLSAqIEEgc2luZ2x5
LWxpbmtlZCB0YWlsIHF1ZXVlIG1heSBvbmx5IGJlIHRyYXZlcnNlZCBpbiB0aGUgZm9yd2FyZCBk
aXJlY3Rpb24uCi0gKiBTaW5nbHktbGlua2VkIHRhaWwgcXVldWVzIGFyZSBpZGVhbCBmb3IgYXBw
bGljYXRpb25zIHdpdGggbGFyZ2UgZGF0YXNldHMKLSAqIGFuZCBmZXcgb3Igbm8gcmVtb3ZhbHMg
b3IgZm9yIGltcGxlbWVudGluZyBhIEZJRk8gcXVldWUuCi0gKgotICogQSBsaXN0IGlzIGhlYWRl
ZCBieSBhIHNpbmdsZSBmb3J3YXJkIHBvaW50ZXIgKG9yIGFuIGFycmF5IG9mIGZvcndhcmQKLSAq
IHBvaW50ZXJzIGZvciBhIGhhc2ggdGFibGUgaGVhZGVyKS4gVGhlIGVsZW1lbnRzIGFyZSBkb3Vi
bHkgbGlua2VkCi0gKiBzbyB0aGF0IGFuIGFyYml0cmFyeSBlbGVtZW50IGNhbiBiZSByZW1vdmVk
IHdpdGhvdXQgYSBuZWVkIHRvCi0gKiB0cmF2ZXJzZSB0aGUgbGlzdC4gTmV3IGVsZW1lbnRzIGNh
biBiZSBhZGRlZCB0byB0aGUgbGlzdCBiZWZvcmUKLSAqIG9yIGFmdGVyIGFuIGV4aXN0aW5nIGVs
ZW1lbnQgb3IgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuIEEgbGlzdAotICogbWF5IG9ubHkgYmUg
dHJhdmVyc2VkIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbi4KLSAqCi0gKiBJdCBpcyBzYWZlIHRv
IHVzZSBfRk9SRUFDSC9fRk9SRUFDSF9TQUZFIGluIHRoZSBwcmVzZW5jZSBvZiBjb25jdXJyZW50
Ci0gKiBtb2RpZmljYXRpb25zIHRvIHRoZSBsaXN0LiBXcml0ZXJzIHRvIHRoZXNlIGxpc3RzIG11
c3QsIG9uIHRoZSBvdGhlciBoYW5kLAotICogaW1wbGVtZW50IHdyaXRlci1zaWRlIHN5bmNocm9u
aXphdGlvbi4gVGhlIF9TV0FQIG9wZXJhdGlvbnMgYXJlIG5vdCBhdG9taWMuCi0gKiBUaGlzIGZh
Y2lsaXR5IGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZCBvbiBhcmNoaXRlY3R1cmVzIHN1Y2ggYXMg
dGhlIEFscGhhCi0gKiB3aGljaCByZXF1aXJlIGxvYWQtZGVwZW5kIG1lbW9yeSBmZW5jZXMuCi0g
KgotICoJCQkJQ0tfU0xJU1QJQ0tfTElTVAlDS19TVEFJTFEKLSAqIF9IRUFECQkJKwkJKwkrCi0g
KiBfSEVBRF9JTklUSUFMSVpFUgkJKwkJKwkrCi0gKiBfRU5UUlkJCQkrCQkrCSsKLSAqIF9JTklU
CQkJKwkJKwkrCi0gKiBfRU1QVFkJCQkrCQkrCSsKLSAqIF9GSVJTVAkJCSsJCSsJKwotICogX05F
WFQJCQkrCQkrCSsKLSAqIF9GT1JFQUNICQkJKwkJKwkrCi0gKiBfRk9SRUFDSF9TQUZFCQkrCQkr
CSsKLSAqIF9JTlNFUlRfSEVBRAkJCSsJCSsJKwotICogX0lOU0VSVF9CRUZPUkUJCS0JCSsJLQot
ICogX0lOU0VSVF9BRlRFUgkJKwkJKwkrCi0gKiBfSU5TRVJUX1RBSUwJCQktCQktCSsKLSAqIF9S
RU1PVkVfQUZURVIJCSsJCS0JKwotICogX1JFTU9WRV9IRUFECQkJKwkJLQkrCi0gKiBfUkVNT1ZF
CQkJKwkJKwkrCi0gKiBfU1dBUAkJCSsJCSsJKwotICogX01PVkUJCQkrCQkrCSsKLSAqLwotCi0v
KgotICogU2luZ2x5LWxpbmtlZCBMaXN0IGRlY2xhcmF0aW9ucy4KLSAqLwotI2RlZmluZQlDS19T
TElTVF9IRUFEKG5hbWUsIHR5cGUpCQkJCQkJXAotc3RydWN0IG5hbWUgewkJCQkJCQkJCVwKLQlz
dHJ1Y3QgdHlwZSAqc2xoX2ZpcnN0OwkvKiBmaXJzdCBlbGVtZW50ICovCQkJCVwKLX0KLQotI2Rl
ZmluZQlDS19TTElTVF9IRUFEX0lOSVRJQUxJWkVSKGhlYWQpCQkJCQkJXAotCXsgTlVMTCB9Ci0K
LSNkZWZpbmUJQ0tfU0xJU1RfRU5UUlkodHlwZSkJCQkJCQkJXAotc3RydWN0IHsJCQkJCQkJCQlc
Ci0Jc3RydWN0IHR5cGUgKnNsZV9uZXh0OwkvKiBuZXh0IGVsZW1lbnQgKi8JCQkJXAotfQotCi0v
KgotICogU2luZ2x5LWxpbmtlZCBMaXN0IGZ1bmN0aW9ucy4KLSAqLwotI2RlZmluZQlDS19TTElT
VF9FTVBUWShoZWFkKQkJCQkJCQlcCi0JKGNrX3ByX2xvYWRfcHRyKCYoaGVhZCktPnNsaF9maXJz
dCkgPT0gTlVMTCkKLQotI2RlZmluZQlDS19TTElTVF9GSVJTVChoZWFkKQkJCQkJCQlcCi0JKGNr
X3ByX2xvYWRfcHRyKCYoaGVhZCktPnNsaF9maXJzdCkpCi0KLSNkZWZpbmUJQ0tfU0xJU1RfTkVY
VChlbG0sIGZpZWxkKQkJCQkJCVwKLQlja19wcl9sb2FkX3B0cigmKChlbG0pLT5maWVsZC5zbGVf
bmV4dCkpCi0KLSNkZWZpbmUJQ0tfU0xJU1RfRk9SRUFDSCh2YXIsIGhlYWQsIGZpZWxkKQkJCQkJ
XAotCWZvciAoKHZhcikgPSBDS19TTElTVF9GSVJTVCgoaGVhZCkpOwkJCQkJXAotCSAgICAodmFy
KSAmJiAoY2tfcHJfZmVuY2VfbG9hZCgpLCAxKTsJCQkJCVwKLQkgICAgKHZhcikgPSBDS19TTElT
VF9ORVhUKCh2YXIpLCBmaWVsZCkpCi0KLSNkZWZpbmUJQ0tfU0xJU1RfRk9SRUFDSF9TQUZFKHZh
ciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJCSBcCi0JZm9yICgodmFyKSA9IENLX1NMSVNUX0ZJUlNU
KGhlYWQpOwkJCQkJIFwKLQkgICAgKHZhcikgJiYgKGNrX3ByX2ZlbmNlX2xvYWQoKSwgKHR2YXIp
ID0gQ0tfU0xJU1RfTkVYVCh2YXIsIGZpZWxkKSwgMSk7XAotCSAgICAodmFyKSA9ICh0dmFyKSkK
LQotI2RlZmluZQlDS19TTElTVF9GT1JFQUNIX1BSRVZQVFIodmFyLCB2YXJwLCBoZWFkLCBmaWVs
ZCkJCQlcCi0JZm9yICgodmFycCkgPSAmKGhlYWQpLT5zbGhfZmlyc3Q7CQkJCQlcCi0JICAgICgo
dmFyKSA9IGNrX3ByX2xvYWRfcHRyKHZhcnApKSAhPSBOVUxMICYmIChja19wcl9mZW5jZV9sb2Fk
KCksIDEpOwlcCi0JICAgICh2YXJwKSA9ICYodmFyKS0+ZmllbGQuc2xlX25leHQpCi0KLSNkZWZp
bmUJQ0tfU0xJU1RfSU5JVChoZWFkKSBkbyB7CQkJCQkJXAotCWNrX3ByX3N0b3JlX3B0cigmKGhl
YWQpLT5zbGhfZmlyc3QsIE5VTEwpOwkJCQlcCi0JY2tfcHJfZmVuY2Vfc3RvcmUoKTsJCQkJCQkJ
XAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlDS19TTElTVF9JTlNFUlRfQUZURVIoYSwgYiwgZmll
bGQpIGRvIHsJCQkJCVwKLQkoYiktPmZpZWxkLnNsZV9uZXh0ID0gKGEpLT5maWVsZC5zbGVfbmV4
dDsJCQkJXAotCWNrX3ByX2ZlbmNlX3N0b3JlKCk7CQkJCQkJCVwKLQlja19wcl9zdG9yZV9wdHIo
JihhKS0+ZmllbGQuc2xlX25leHQsIGIpOwkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lCUNL
X1NMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQkJXAotCShlbG0pLT5m
aWVsZC5zbGVfbmV4dCA9IChoZWFkKS0+c2xoX2ZpcnN0OwkJCQlcCi0JY2tfcHJfZmVuY2Vfc3Rv
cmUoKTsJCQkJCQkJXAotCWNrX3ByX3N0b3JlX3B0cigmKGhlYWQpLT5zbGhfZmlyc3QsIGVsbSk7
CQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQ0tfU0xJU1RfUkVNT1ZFX0FGVEVSKGVsbSwg
ZmllbGQpIGRvIHsJCQkJCVwKLQlja19wcl9zdG9yZV9wdHIoJihlbG0pLT5maWVsZC5zbGVfbmV4
dCwJCQkJCVwKLQkgICAgKGVsbSktPmZpZWxkLnNsZV9uZXh0LT5maWVsZC5zbGVfbmV4dCk7CQkJ
CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJQ0tfU0xJU1RfUkVNT1ZFKGhlYWQsIGVsbSwgdHlw
ZSwgZmllbGQpIGRvIHsJCQkJXAotCWlmICgoaGVhZCktPnNsaF9maXJzdCA9PSAoZWxtKSkgewkJ
CQkJXAotCQlDS19TTElTVF9SRU1PVkVfSEVBRCgoaGVhZCksIGZpZWxkKTsJCQkJXAotCX0gZWxz
ZSB7CQkJCQkJCQlcCi0JCXN0cnVjdCB0eXBlICpjdXJlbG0gPSAoaGVhZCktPnNsaF9maXJzdDsJ
CQlcCi0JCXdoaWxlIChjdXJlbG0tPmZpZWxkLnNsZV9uZXh0ICE9IChlbG0pKQkJCQlcCi0JCQlj
dXJlbG0gPSBjdXJlbG0tPmZpZWxkLnNsZV9uZXh0OwkJCVwKLQkJQ0tfU0xJU1RfUkVNT1ZFX0FG
VEVSKGN1cmVsbSwgZmllbGQpOwkJCQlcCi0JfQkJCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNk
ZWZpbmUJQ0tfU0xJU1RfUkVNT1ZFX0hFQUQoaGVhZCwgZmllbGQpIGRvIHsJCQkJCVwKLQlja19w
cl9zdG9yZV9wdHIoJihoZWFkKS0+c2xoX2ZpcnN0LAkJCQkJXAotCQkoaGVhZCktPnNsaF9maXJz
dC0+ZmllbGQuc2xlX25leHQpOwkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIENLX1NMSVNU
X01PVkUoaGVhZDEsIGhlYWQyLCBmaWVsZCkgZG8gewkJCQkJXAotCWNrX3ByX3N0b3JlX3B0cigm
KGhlYWQxKS0+c2xoX2ZpcnN0LCAoaGVhZDIpLT5zbGhfZmlyc3QpOwkJXAotfSB3aGlsZSAoMCkK
LQotLyoKLSAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBhcHBsaWVkIGF0b21pY2FsbHkuCi0gKi8K
LSNkZWZpbmUgQ0tfU0xJU1RfU1dBUChhLCBiLCB0eXBlKSBkbyB7CQkJCQkJXAotCXN0cnVjdCB0
eXBlICpzd2FwX2ZpcnN0ID0gKGEpLT5zbGhfZmlyc3Q7CQkJCVwKLQkoYSktPnNsaF9maXJzdCA9
IChiKS0+c2xoX2ZpcnN0OwkJCQkJXAotCShiKS0+c2xoX2ZpcnN0ID0gc3dhcF9maXJzdDsJCQkJ
CQlcCi19IHdoaWxlICgwKQotCi0vKgotICogU2luZ2x5LWxpbmtlZCBUYWlsIHF1ZXVlIGRlY2xh
cmF0aW9ucy4KLSAqLwotI2RlZmluZQlDS19TVEFJTFFfSEVBRChuYW1lLCB0eXBlKQkJCQkJXAot
c3RydWN0IG5hbWUgewkJCQkJCQkJXAotCXN0cnVjdCB0eXBlICpzdHFoX2ZpcnN0Oy8qIGZpcnN0
IGVsZW1lbnQgKi8JCQlcCi0Jc3RydWN0IHR5cGUgKipzdHFoX2xhc3Q7LyogYWRkciBvZiBsYXN0
IG5leHQgZWxlbWVudCAqLwkJXAotfQotCi0jZGVmaW5lCUNLX1NUQUlMUV9IRUFEX0lOSVRJQUxJ
WkVSKGhlYWQpCQkJCVwKLQl7IE5VTEwsICYoaGVhZCkuc3RxaF9maXJzdCB9Ci0KLSNkZWZpbmUJ
Q0tfU1RBSUxRX0VOVFJZKHR5cGUpCQkJCQkJXAotc3RydWN0IHsJCQkJCQkJCVwKLQlzdHJ1Y3Qg
dHlwZSAqc3RxZV9uZXh0OwkvKiBuZXh0IGVsZW1lbnQgKi8JCQlcCi19Ci0KLS8qCi0gKiBTaW5n
bHktbGlua2VkIFRhaWwgcXVldWUgZnVuY3Rpb25zLgotICovCi0jZGVmaW5lCUNLX1NUQUlMUV9D
T05DQVQoaGVhZDEsIGhlYWQyKSBkbyB7CQkJCQlcCi0JaWYgKChoZWFkMiktPnN0cWhfZmlyc3Qg
PT0gTlVMTCkgewkJCQkJXAotCQlja19wcl9zdG9yZV9wdHIoKGhlYWQxKS0+c3RxaF9sYXN0LCAo
aGVhZDIpLT5zdHFoX2ZpcnN0KTsJXAotCQlja19wcl9mZW5jZV9zdG9yZSgpOwkJCQkJCVwKLQkJ
KGhlYWQxKS0+c3RxaF9sYXN0ID0gKGhlYWQyKS0+c3RxaF9sYXN0OwkJCVwKLQkJQ0tfU1RBSUxR
X0lOSVQoKGhlYWQyKSk7CQkJCQlcCi0JfQkJCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZp
bmUJQ0tfU1RBSUxRX0VNUFRZKGhlYWQpCShja19wcl9sb2FkX3B0cigmKGhlYWQpLT5zdHFoX2Zp
cnN0KSA9PSBOVUxMKQotCi0jZGVmaW5lCUNLX1NUQUlMUV9GSVJTVChoZWFkKQkoY2tfcHJfbG9h
ZF9wdHIoJihoZWFkKS0+c3RxaF9maXJzdCkpCi0KLSNkZWZpbmUJQ0tfU1RBSUxRX0ZPUkVBQ0go
dmFyLCBoZWFkLCBmaWVsZCkJCQkJXAotCWZvcigodmFyKSA9IENLX1NUQUlMUV9GSVJTVCgoaGVh
ZCkpOwkJCQlcCi0JICAgKHZhcikgJiYgKGNrX3ByX2ZlbmNlX2xvYWQoKSwgMSk7CQkJCVwKLQkg
ICAodmFyKSA9IENLX1NUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCkpCi0KLSNkZWZpbmUJQ0tfU1RB
SUxRX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJCVwKLQlmb3IgKCh2YXIp
ID0gQ0tfU1RBSUxRX0ZJUlNUKChoZWFkKSk7CQkJCVwKLQkgICAgKHZhcikgJiYgKGNrX3ByX2Zl
bmNlX2xvYWQoKSwgKHR2YXIpID0JCQlcCi0JCUNLX1NUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCks
IDEpOwkJCVwKLQkgICAgKHZhcikgPSAodHZhcikpCi0KLSNkZWZpbmUJQ0tfU1RBSUxRX0lOSVQo
aGVhZCkgZG8gewkJCQkJXAotCWNrX3ByX3N0b3JlX3B0cigmKGhlYWQpLT5zdHFoX2ZpcnN0LCBO
VUxMKTsJCQlcCi0JY2tfcHJfZmVuY2Vfc3RvcmUoKTsJCQkJCQlcCi0JKGhlYWQpLT5zdHFoX2xh
c3QgPSAmKGhlYWQpLT5zdHFoX2ZpcnN0OwkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJQ0tf
U1RBSUxRX0lOU0VSVF9BRlRFUihoZWFkLCB0cWVsbSwgZWxtLCBmaWVsZCkgZG8gewkJCVwKLQko
ZWxtKS0+ZmllbGQuc3RxZV9uZXh0ID0gKHRxZWxtKS0+ZmllbGQuc3RxZV9uZXh0OwkJCVwKLQlj
a19wcl9mZW5jZV9zdG9yZSgpOwkJCQkJCQlcCi0JY2tfcHJfc3RvcmVfcHRyKCYodHFlbG0pLT5m
aWVsZC5zdHFlX25leHQsIGVsbSk7CQkJXAotCWlmICgoZWxtKS0+ZmllbGQuc3RxZV9uZXh0ID09
IE5VTEwpCQkJCQlcCi0JCShoZWFkKS0+c3RxaF9sYXN0ID0gJihlbG0pLT5maWVsZC5zdHFlX25l
eHQ7CQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlDS19TVEFJTFFfSU5TRVJUX0hFQUQoaGVh
ZCwgZWxtLCBmaWVsZCkgZG8gewkJCQlcCi0JKGVsbSktPmZpZWxkLnN0cWVfbmV4dCA9IChoZWFk
KS0+c3RxaF9maXJzdDsJCQkJXAotCWNrX3ByX2ZlbmNlX3N0b3JlKCk7CQkJCQkJCVwKLQlja19w
cl9zdG9yZV9wdHIoJihoZWFkKS0+c3RxaF9maXJzdCwgZWxtKTsJCQkJXAotCWlmICgoZWxtKS0+
ZmllbGQuc3RxZV9uZXh0ID09IE5VTEwpCQkJCQlcCi0JCShoZWFkKS0+c3RxaF9sYXN0ID0gJihl
bG0pLT5maWVsZC5zdHFlX25leHQ7CQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlDS19TVEFJ
TFFfSU5TRVJUX1RBSUwoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCQlcCi0JKGVsbSktPmZpZWxk
LnN0cWVfbmV4dCA9IE5VTEw7CQkJCQkJXAotCWNrX3ByX2ZlbmNlX3N0b3JlKCk7CQkJCQkJCVwK
LQlja19wcl9zdG9yZV9wdHIoKGhlYWQpLT5zdHFoX2xhc3QsIChlbG0pKTsJCQkJXAotCShoZWFk
KS0+c3RxaF9sYXN0ID0gJihlbG0pLT5maWVsZC5zdHFlX25leHQ7CQkJCVwKLX0gd2hpbGUgKDAp
Ci0KLSNkZWZpbmUJQ0tfU1RBSUxRX05FWFQoZWxtLCBmaWVsZCkJCQkJCQlcCi0JKGNrX3ByX2xv
YWRfcHRyKCYoZWxtKS0+ZmllbGQuc3RxZV9uZXh0KSkKLQotI2RlZmluZQlDS19TVEFJTFFfUkVN
T1ZFKGhlYWQsIGVsbSwgdHlwZSwgZmllbGQpIGRvIHsJCQkJXAotCWlmICgoaGVhZCktPnN0cWhf
Zmlyc3QgPT0gKGVsbSkpIHsJCQkJCVwKLQkJQ0tfU1RBSUxRX1JFTU9WRV9IRUFEKChoZWFkKSwg
ZmllbGQpOwkJCQlcCi0JfSBlbHNlIHsJCQkJCQkJCVwKLQkJc3RydWN0IHR5cGUgKmN1cmVsbSA9
IChoZWFkKS0+c3RxaF9maXJzdDsJCQlcCi0JCXdoaWxlIChjdXJlbG0tPmZpZWxkLnN0cWVfbmV4
dCAhPSAoZWxtKSkJCQlcCi0JCQljdXJlbG0gPSBjdXJlbG0tPmZpZWxkLnN0cWVfbmV4dDsJCQlc
Ci0JCUNLX1NUQUlMUV9SRU1PVkVfQUZURVIoaGVhZCwgY3VyZWxtLCBmaWVsZCk7CQkJXAotCX0J
CQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIENLX1NUQUlMUV9SRU1PVkVfQUZURVIo
aGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCQlcCi0JY2tfcHJfc3RvcmVfcHRyKCYoZWxtKS0+Zmll
bGQuc3RxZV9uZXh0LAkJCQlcCi0JICAgIChlbG0pLT5maWVsZC5zdHFlX25leHQtPmZpZWxkLnN0
cWVfbmV4dCk7CQkJCVwKLQlpZiAoKGVsbSktPmZpZWxkLnN0cWVfbmV4dCA9PSBOVUxMKQkJCQkJ
XAotCQkoaGVhZCktPnN0cWhfbGFzdCA9ICYoZWxtKS0+ZmllbGQuc3RxZV9uZXh0OwkJCVwKLX0g
d2hpbGUgKDApCi0KLSNkZWZpbmUJQ0tfU1RBSUxRX1JFTU9WRV9IRUFEKGhlYWQsIGZpZWxkKSBk
byB7CQkJCQlcCi0JY2tfcHJfc3RvcmVfcHRyKCYoaGVhZCktPnN0cWhfZmlyc3QsCQkJCQlcCi0J
ICAgIChoZWFkKS0+c3RxaF9maXJzdC0+ZmllbGQuc3RxZV9uZXh0KTsJCQkJXAotCWlmICgoaGVh
ZCktPnN0cWhfZmlyc3QgPT0gTlVMTCkJCQkJCQlcCi0JCShoZWFkKS0+c3RxaF9sYXN0ID0gJiho
ZWFkKS0+c3RxaF9maXJzdDsJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIENLX1NUQUlMUV9N
T1ZFKGhlYWQxLCBoZWFkMiwgZmllbGQpIGRvIHsJCQkJXAotCWNrX3ByX3N0b3JlX3B0cigmKGhl
YWQxKS0+c3RxaF9maXJzdCwgKGhlYWQyKS0+c3RxaF9maXJzdCk7CQlcCi0JKGhlYWQxKS0+c3Rx
aF9sYXN0ID0gKGhlYWQyKS0+c3RxaF9sYXN0OwkJCQlcCi0JaWYgKChoZWFkMiktPnN0cWhfbGFz
dCA9PSAmKGhlYWQyKS0+c3RxaF9maXJzdCkJCQkJXAotCQkoaGVhZDEpLT5zdHFoX2xhc3QgPSAm
KGhlYWQxKS0+c3RxaF9maXJzdDsJCQlcCi19IHdoaWxlICgwKQotCi0vKgotICogVGhpcyBvcGVy
YXRpb24gaXMgbm90IGFwcGxpZWQgYXRvbWljYWxseS4KLSAqLwotI2RlZmluZSBDS19TVEFJTFFf
U1dBUChoZWFkMSwgaGVhZDIsIHR5cGUpIGRvIHsJCQkJXAotCXN0cnVjdCB0eXBlICpzd2FwX2Zp
cnN0ID0gQ0tfU1RBSUxRX0ZJUlNUKGhlYWQxKTsJCVwKLQlzdHJ1Y3QgdHlwZSAqKnN3YXBfbGFz
dCA9IChoZWFkMSktPnN0cWhfbGFzdDsJCQlcCi0JQ0tfU1RBSUxRX0ZJUlNUKGhlYWQxKSA9IENL
X1NUQUlMUV9GSVJTVChoZWFkMik7CQlcCi0JKGhlYWQxKS0+c3RxaF9sYXN0ID0gKGhlYWQyKS0+
c3RxaF9sYXN0OwkJCVwKLQlDS19TVEFJTFFfRklSU1QoaGVhZDIpID0gc3dhcF9maXJzdDsJCQkJ
XAotCShoZWFkMiktPnN0cWhfbGFzdCA9IHN3YXBfbGFzdDsJCQkJCVwKLQlpZiAoQ0tfU1RBSUxR
X0VNUFRZKGhlYWQxKSkJCQkJCVwKLQkJKGhlYWQxKS0+c3RxaF9sYXN0ID0gJihoZWFkMSktPnN0
cWhfZmlyc3Q7CQlcCi0JaWYgKENLX1NUQUlMUV9FTVBUWShoZWFkMikpCQkJCQlcCi0JCShoZWFk
MiktPnN0cWhfbGFzdCA9ICYoaGVhZDIpLT5zdHFoX2ZpcnN0OwkJXAotfSB3aGlsZSAoMCkKLQot
LyoKLSAqIExpc3QgZGVjbGFyYXRpb25zLgotICovCi0jZGVmaW5lCUNLX0xJU1RfSEVBRChuYW1l
LCB0eXBlKQkJCQkJCVwKLXN0cnVjdCBuYW1lIHsJCQkJCQkJCQlcCi0Jc3RydWN0IHR5cGUgKmxo
X2ZpcnN0OwkvKiBmaXJzdCBlbGVtZW50ICovCQkJCVwKLX0KLQotI2RlZmluZQlDS19MSVNUX0hF
QURfSU5JVElBTElaRVIoaGVhZCkJCQkJCQlcCi0JeyBOVUxMIH0KLQotI2RlZmluZQlDS19MSVNU
X0VOVFJZKHR5cGUpCQkJCQkJCVwKLXN0cnVjdCB7CQkJCQkJCQkJXAotCXN0cnVjdCB0eXBlICps
ZV9uZXh0OwkvKiBuZXh0IGVsZW1lbnQgKi8JCQkJXAotCXN0cnVjdCB0eXBlICoqbGVfcHJldjsJ
LyogYWRkcmVzcyBvZiBwcmV2aW91cyBuZXh0IGVsZW1lbnQgKi8JCVwKLX0KLQotI2RlZmluZQlD
S19MSVNUX0ZJUlNUKGhlYWQpCQlja19wcl9sb2FkX3B0cigmKGhlYWQpLT5saF9maXJzdCkKLSNk
ZWZpbmUJQ0tfTElTVF9FTVBUWShoZWFkKQkJKENLX0xJU1RfRklSU1QoaGVhZCkgPT0gTlVMTCkK
LSNkZWZpbmUJQ0tfTElTVF9ORVhUKGVsbSwgZmllbGQpCWNrX3ByX2xvYWRfcHRyKCYoZWxtKS0+
ZmllbGQubGVfbmV4dCkKLQotI2RlZmluZQlDS19MSVNUX0ZPUkVBQ0godmFyLCBoZWFkLCBmaWVs
ZCkJCQkJCVwKLQlmb3IgKCh2YXIpID0gQ0tfTElTVF9GSVJTVCgoaGVhZCkpOwkJCQkJXAotCSAg
ICAodmFyKSAmJiAoY2tfcHJfZmVuY2VfbG9hZCgpLCAxKTsJCQkJCVwKLQkgICAgKHZhcikgPSBD
S19MSVNUX05FWFQoKHZhciksIGZpZWxkKSkKLQotI2RlZmluZQlDS19MSVNUX0ZPUkVBQ0hfU0FG
RSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJCQkgIFwKLQlmb3IgKCh2YXIpID0gQ0tfTElTVF9G
SVJTVCgoaGVhZCkpOwkJCQkJICBcCi0JICAgICh2YXIpICYmIChja19wcl9mZW5jZV9sb2FkKCks
ICh0dmFyKSA9IENLX0xJU1RfTkVYVCgodmFyKSwgZmllbGQpLCAxKTtcCi0JICAgICh2YXIpID0g
KHR2YXIpKQotCi0jZGVmaW5lCUNLX0xJU1RfSU5JVChoZWFkKSBkbyB7CQkJCQkJCVwKLQlja19w
cl9zdG9yZV9wdHIoJihoZWFkKS0+bGhfZmlyc3QsIE5VTEwpOwkJCQlcCi0JY2tfcHJfZmVuY2Vf
c3RvcmUoKTsJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlDS19MSVNUX0lOU0VSVF9B
RlRFUihsaXN0ZWxtLCBlbG0sIGZpZWxkKSBkbyB7CQkJCVwKLQkoZWxtKS0+ZmllbGQubGVfbmV4
dCA9IChsaXN0ZWxtKS0+ZmllbGQubGVfbmV4dDsJCQlcCi0JKGVsbSktPmZpZWxkLmxlX3ByZXYg
PSAmKGxpc3RlbG0pLT5maWVsZC5sZV9uZXh0OwkJCVwKLQlja19wcl9mZW5jZV9zdG9yZSgpOwkJ
CQkJCQlcCi0JaWYgKChsaXN0ZWxtKS0+ZmllbGQubGVfbmV4dCAhPSBOVUxMKQkJCQkJXAotCQko
bGlzdGVsbSktPmZpZWxkLmxlX25leHQtPmZpZWxkLmxlX3ByZXYgPSAmKGVsbSktPmZpZWxkLmxl
X25leHQ7XAotCWNrX3ByX3N0b3JlX3B0cigmKGxpc3RlbG0pLT5maWVsZC5sZV9uZXh0LCBlbG0p
OwkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJQ0tfTElTVF9JTlNFUlRfQkVGT1JFKGxpc3Rl
bG0sIGVsbSwgZmllbGQpIGRvIHsJCQkJXAotCShlbG0pLT5maWVsZC5sZV9wcmV2ID0gKGxpc3Rl
bG0pLT5maWVsZC5sZV9wcmV2OwkJCVwKLQkoZWxtKS0+ZmllbGQubGVfbmV4dCA9IChsaXN0ZWxt
KTsJCQkJCVwKLQlja19wcl9mZW5jZV9zdG9yZSgpOwkJCQkJCQlcCi0JY2tfcHJfc3RvcmVfcHRy
KChsaXN0ZWxtKS0+ZmllbGQubGVfcHJldiwgKGVsbSkpOwkJCVwKLQkobGlzdGVsbSktPmZpZWxk
LmxlX3ByZXYgPSAmKGVsbSktPmZpZWxkLmxlX25leHQ7CQkJXAotfSB3aGlsZSAoMCkKLQotI2Rl
ZmluZQlDS19MSVNUX0lOU0VSVF9IRUFEKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQkJXAotCShl
bG0pLT5maWVsZC5sZV9uZXh0ID0gKGhlYWQpLT5saF9maXJzdDsJCQkJXAotCWNrX3ByX2ZlbmNl
X3N0b3JlKCk7CQkJCQkJCVwKLQlpZiAoKGVsbSktPmZpZWxkLmxlX25leHQgIT0gTlVMTCkJCQkJ
CVwKLQkJKGhlYWQpLT5saF9maXJzdC0+ZmllbGQubGVfcHJldiA9ICAmKGVsbSktPmZpZWxkLmxl
X25leHQ7CVwKLQlja19wcl9zdG9yZV9wdHIoJihoZWFkKS0+bGhfZmlyc3QsIGVsbSk7CQkJCVwK
LQkoZWxtKS0+ZmllbGQubGVfcHJldiA9ICYoaGVhZCktPmxoX2ZpcnN0OwkJCQlcCi19IHdoaWxl
ICgwKQotCi0jZGVmaW5lCUNLX0xJU1RfUkVNT1ZFKGVsbSwgZmllbGQpIGRvIHsJCQkJCQlcCi0J
Y2tfcHJfc3RvcmVfcHRyKChlbG0pLT5maWVsZC5sZV9wcmV2LCAoZWxtKS0+ZmllbGQubGVfbmV4
dCk7CQlcCi0JaWYgKChlbG0pLT5maWVsZC5sZV9uZXh0ICE9IE5VTEwpCQkJCQlcCi0JCShlbG0p
LT5maWVsZC5sZV9uZXh0LT5maWVsZC5sZV9wcmV2ID0gKGVsbSktPmZpZWxkLmxlX3ByZXY7CVwK
LX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQ0tfTElTVF9NT1ZFKGhlYWQxLCBoZWFkMiwgZmllbGQp
IGRvIHsJCQkJXAotCWNrX3ByX3N0b3JlX3B0cigmKGhlYWQxKS0+bGhfZmlyc3QsIChoZWFkMikt
PmxoX2ZpcnN0KTsJCVwKLQlpZiAoKGhlYWQxKS0+bGhfZmlyc3QgIT0gTlVMTCkJCQkJCVwKLQkJ
KGhlYWQxKS0+bGhfZmlyc3QtPmZpZWxkLmxlX3ByZXYgPSAmKGhlYWQxKS0+bGhfZmlyc3Q7CVwK
LX0gd2hpbGUgKDApCi0KLS8qCi0gKiBUaGlzIG9wZXJhdGlvbiBpcyBub3QgYXBwbGllZCBhdG9t
aWNhbGx5LgotICovCi0jZGVmaW5lIENLX0xJU1RfU1dBUChoZWFkMSwgaGVhZDIsIHR5cGUsIGZp
ZWxkKSBkbyB7CQkJXAotCXN0cnVjdCB0eXBlICpzd2FwX3RtcCA9IChoZWFkMSktPmxoX2ZpcnN0
OwkJCVwKLQkoaGVhZDEpLT5saF9maXJzdCA9IChoZWFkMiktPmxoX2ZpcnN0OwkJCQlcCi0JKGhl
YWQyKS0+bGhfZmlyc3QgPSBzd2FwX3RtcDsJCQkJCVwKLQlpZiAoKHN3YXBfdG1wID0gKGhlYWQx
KS0+bGhfZmlyc3QpICE9IE5VTEwpCQkJXAotCQlzd2FwX3RtcC0+ZmllbGQubGVfcHJldiA9ICYo
aGVhZDEpLT5saF9maXJzdDsJCVwKLQlpZiAoKHN3YXBfdG1wID0gKGhlYWQyKS0+bGhfZmlyc3Qp
ICE9IE5VTEwpCQkJXAotCQlzd2FwX3RtcC0+ZmllbGQubGVfcHJldiA9ICYoaGVhZDIpLT5saF9m
aXJzdDsJCVwKLX0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiBDS19RVUVVRV9IICovCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX3Jocy5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19yaHMuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyMWE3MzFkMTM5NWRhYjFjOGE2NTEwOTRlY2NkYzY2
MDY2MjAwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX3Jocy5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMi0yMDE1IFNhbXkg
QWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAq
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ0tfUkhTX0gK
LSNkZWZpbmUgQ0tfUkhTX0gKLQotI2luY2x1ZGUgPGNrX2NjLmg+Ci0jaW5jbHVkZSA8Y2tfbWFs
bG9jLmg+Ci0jaW5jbHVkZSA8Y2tfbWQuaD4KLSNpbmNsdWRlIDxja19wci5oPgotI2luY2x1ZGUg
PGNrX3N0ZGludC5oPgotI2luY2x1ZGUgPGNrX3N0ZGJvb2wuaD4KLSNpbmNsdWRlIDxja19zdGRk
ZWYuaD4KLQotLyoKLSAqIEluZGljYXRlcyBhIHNpbmdsZS13cml0ZXIgbWFueS1yZWFkZXIgd29y
a2xvYWQuIE11dHVhbGx5Ci0gKiBleGNsdXNpdmUgd2l0aCBDS19SSFNfTU9ERV9NUE1DCi0gKi8K
LSNkZWZpbmUgQ0tfUkhTX01PREVfU1BNQwkJMQotCi0vKgotICogSW5kaWNhdGVzIHRoYXQgdmFs
dWVzIHRvIGJlIHN0b3JlZCBhcmUgbm90IHBvaW50ZXJzIGJ1dAotICogdmFsdWVzLiBBbGxvd3Mg
Zm9yIGZ1bGwgcHJlY2lzaW9uLiBNdXR1YWxseSBleGNsdXNpdmUKLSAqIHdpdGggQ0tfUkhTX01P
REVfT0JKRUNULgotICovCi0jZGVmaW5lIENLX1JIU19NT0RFX0RJUkVDVAkyCi0KLS8qCi0gKiBJ
bmRpY2F0ZXMgdGhhdCB0aGUgdmFsdWVzIHRvIGJlIHN0b3JlZCBhcmUgcG9pbnRlcnMuCi0gKiBB
bGxvd3MgZm9yIHNwYWNlIG9wdGltaXphdGlvbnMgaW4gdGhlIHByZXNlbmNlIG9mIHBvaW50ZXIK
LSAqIHBhY2tpbmcuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIENLX1JIU19NT0RFX0RJUkVDVC4K
LSAqLwotI2RlZmluZSBDS19SSFNfTU9ERV9PQkpFQ1QJOAotCi0vKgotICogSW5kaWNhdGVkIHRo
YXQgdGhlIGxvYWQgaXMgcmVhZC1tb3N0bHksIHNvIGdldCBzaG91bGQgYmUgb3B0aW1pemVkCi0g
KiBvdmVyIHB1dCBhbmQgZGVsZXRlCi0gKi8KLSNkZWZpbmUgQ0tfUkhTX01PREVfUkVBRF9NT1NU
TFkJMTYKLQotLyogQ3VycmVudGx5IHVuc3VwcG9ydGVkLiAqLwotI2RlZmluZSBDS19SSFNfTU9E
RV9NUE1DICAgICh2b2lkKQotCi0vKgotICogSGFzaCBjYWxsYmFjayBmdW5jdGlvbi4KLSAqLwot
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGNrX3Joc19oYXNoX2NiX3QoY29uc3Qgdm9pZCAqLCB1bnNp
Z25lZCBsb25nKTsKLQotLyoKLSAqIFJldHVybnMgcG9pbnRlciB0byBvYmplY3QgaWYgb2JqZWN0
cyBhcmUgZXF1aXZhbGVudC4KLSAqLwotdHlwZWRlZiBib29sIGNrX3Joc19jb21wYXJlX2NiX3Qo
Y29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwotCi0jaWYgZGVmaW5lZChDS19NRF9QT0lOVEVS
X1BBQ0tfRU5BQkxFKSAmJiBkZWZpbmVkKENLX01EX1ZNQV9CSVRTKQotI2RlZmluZSBDS19SSFNf
UFAKLSNkZWZpbmUgQ0tfUkhTX0tFWV9NQVNLICgoMVUgPDwgKChzaXplb2Yodm9pZCAqKSAqIDgp
IC0gQ0tfTURfVk1BX0JJVFMpKSAtIDEpCi0jZW5kaWYKLQotc3RydWN0IGNrX3Joc19tYXA7Ci1z
dHJ1Y3QgY2tfcmhzIHsKLQlzdHJ1Y3QgY2tfbWFsbG9jICptOwotCXN0cnVjdCBja19yaHNfbWFw
ICptYXA7Ci0JdW5zaWduZWQgaW50IG1vZGU7Ci0JdW5zaWduZWQgaW50IGxvYWRfZmFjdG9yOwot
CXVuc2lnbmVkIGxvbmcgc2VlZDsKLQlja19yaHNfaGFzaF9jYl90ICpoZjsKLQlja19yaHNfY29t
cGFyZV9jYl90ICpjb21wYXJlOwotfTsKLXR5cGVkZWYgc3RydWN0IGNrX3JocyBja19yaHNfdDsK
LQotc3RydWN0IGNrX3Joc19zdGF0IHsKLQl1bnNpZ25lZCBsb25nIG5fZW50cmllczsKLQl1bnNp
Z25lZCBpbnQgcHJvYmVfbWF4aW11bTsKLX07Ci0KLXN0cnVjdCBja19yaHNfaXRlcmF0b3Igewot
CXZvaWQgKipjdXJzb3I7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci19OwotdHlwZWRlZiBzdHJ1
Y3QgY2tfcmhzX2l0ZXJhdG9yIGNrX3Joc19pdGVyYXRvcl90OwotCi0jZGVmaW5lIENLX1JIU19J
VEVSQVRPUl9JTklUSUFMSVpFUiB7IE5VTEwsIDAgfQotCi0vKiBDb252ZW5pZW5jZSB3cmFwcGVy
IHRvIHRhYmxlIGhhc2ggZnVuY3Rpb24uICovCi0jZGVmaW5lIENLX1JIU19IQVNIKFQsIEYsIEsp
IEYoKEspLCAoVCktPnNlZWQpCi0KLXR5cGVkZWYgdm9pZCAqY2tfcmhzX2FwcGx5X2ZuX3Qodm9p
ZCAqLCB2b2lkICopOwotYm9vbCBja19yaHNfYXBwbHkoY2tfcmhzX3QgKiwgdW5zaWduZWQgbG9u
ZywgY29uc3Qgdm9pZCAqLCBja19yaHNfYXBwbHlfZm5fdCAqLCB2b2lkICopOwotdm9pZCBja19y
aHNfaXRlcmF0b3JfaW5pdChja19yaHNfaXRlcmF0b3JfdCAqKTsKLWJvb2wgY2tfcmhzX25leHQo
Y2tfcmhzX3QgKiwgY2tfcmhzX2l0ZXJhdG9yX3QgKiwgdm9pZCAqKik7Ci1ib29sIGNrX3Joc19t
b3ZlKGNrX3Joc190ICosIGNrX3Joc190ICosIGNrX3Joc19oYXNoX2NiX3QgKiwKLSAgICBja19y
aHNfY29tcGFyZV9jYl90ICosIHN0cnVjdCBja19tYWxsb2MgKik7Ci1ib29sIGNrX3Joc19pbml0
KGNrX3Joc190ICosIHVuc2lnbmVkIGludCwgY2tfcmhzX2hhc2hfY2JfdCAqLAotICAgIGNrX3Jo
c19jb21wYXJlX2NiX3QgKiwgc3RydWN0IGNrX21hbGxvYyAqLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nKTsKLXZvaWQgY2tfcmhzX2Rlc3Ryb3koY2tfcmhzX3QgKik7Ci12b2lkICpja19y
aHNfZ2V0KGNrX3Joc190ICosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKik7Ci1ib29sIGNr
X3Joc19wdXQoY2tfcmhzX3QgKiwgdW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqKTsKLWJvb2wg
Y2tfcmhzX3B1dF91bmlxdWUoY2tfcmhzX3QgKiwgdW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAq
KTsKLWJvb2wgY2tfcmhzX3NldChja19yaHNfdCAqLCB1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lk
ICosIHZvaWQgKiopOwotYm9vbCBja19yaHNfZmFzKGNrX3Joc190ICosIHVuc2lnbmVkIGxvbmcs
IGNvbnN0IHZvaWQgKiwgdm9pZCAqKik7Ci12b2lkICpja19yaHNfcmVtb3ZlKGNrX3Joc190ICos
IHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKik7Ci1ib29sIGNrX3Joc19ncm93KGNrX3Joc190
ICosIHVuc2lnbmVkIGxvbmcpOwotYm9vbCBja19yaHNfcmVidWlsZChja19yaHNfdCAqKTsKLWJv
b2wgY2tfcmhzX2djKGNrX3Joc190ICopOwotdW5zaWduZWQgbG9uZyBja19yaHNfY291bnQoY2tf
cmhzX3QgKik7Ci1ib29sIGNrX3Joc19yZXNldChja19yaHNfdCAqKTsKLWJvb2wgY2tfcmhzX3Jl
c2V0X3NpemUoY2tfcmhzX3QgKiwgdW5zaWduZWQgbG9uZyk7Ci12b2lkIGNrX3Joc19zdGF0KGNr
X3Joc190ICosIHN0cnVjdCBja19yaHNfc3RhdCAqKTsKLWJvb2wgY2tfcmhzX3NldF9sb2FkX2Zh
Y3Rvcihja19yaHNfdCAqLCB1bnNpZ25lZCBpbnQpOwotCi0jZW5kaWYgLyogQ0tfUkhTX0ggKi8K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tf
cmluZy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19yaW5n
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ZjA3MTJlZjdjZjkxMWU0Mjc2ZWJm
ZGYzNDRkNmI1OTkxMDdhZWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19yaW5n
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5
LTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBDS19SSU5HX0gKLSNkZWZpbmUgQ0tfUklOR19ICi0KLSNpbmNsdWRlIDxja19jYy5oPgotI2lu
Y2x1ZGUgPGNrX21kLmg+Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19zdGRib29s
Lmg+Ci0jaW5jbHVkZSA8Y2tfc3RyaW5nLmg+Ci0KLS8qCi0gKiBDb25jdXJyZW50IHJpbmcgYnVm
ZmVyLgotICovCi0KLXN0cnVjdCBja19yaW5nIHsKLQl1bnNpZ25lZCBpbnQgY19oZWFkOwotCWNo
YXIgcGFkW0NLX01EX0NBQ0hFTElORSAtIHNpemVvZih1bnNpZ25lZCBpbnQpXTsKLQl1bnNpZ25l
ZCBpbnQgcF90YWlsOwotCXVuc2lnbmVkIGludCBwX2hlYWQ7Ci0JY2hhciBfcGFkW0NLX01EX0NB
Q0hFTElORSAtIHNpemVvZih1bnNpZ25lZCBpbnQpICogMl07Ci0JdW5zaWduZWQgaW50IHNpemU7
Ci0JdW5zaWduZWQgaW50IG1hc2s7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tfcmluZyBja19yaW5n
X3Q7Ci0KLXN0cnVjdCBja19yaW5nX2J1ZmZlciB7Ci0Jdm9pZCAqdmFsdWU7Ci19OwotdHlwZWRl
ZiBzdHJ1Y3QgY2tfcmluZ19idWZmZXIgY2tfcmluZ19idWZmZXJfdDsKLQotQ0tfQ0NfSU5MSU5F
IHN0YXRpYyB1bnNpZ25lZCBpbnQKLWNrX3Jpbmdfc2l6ZShjb25zdCBzdHJ1Y3QgY2tfcmluZyAq
cmluZykKLXsKLQl1bnNpZ25lZCBpbnQgYywgcDsKLQotCWMgPSBja19wcl9sb2FkX3VpbnQoJnJp
bmctPmNfaGVhZCk7Ci0JcCA9IGNrX3ByX2xvYWRfdWludCgmcmluZy0+cF90YWlsKTsKLQlyZXR1
cm4gKHAgLSBjKSAmIHJpbmctPm1hc2s7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdW5zaWdu
ZWQgaW50Ci1ja19yaW5nX2NhcGFjaXR5KGNvbnN0IHN0cnVjdCBja19yaW5nICpyaW5nKQotewot
CXJldHVybiByaW5nLT5zaXplOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3Jp
bmdfaW5pdChzdHJ1Y3QgY2tfcmluZyAqcmluZywgdW5zaWduZWQgaW50IHNpemUpCi17Ci0KLQly
aW5nLT5zaXplID0gc2l6ZTsKLQlyaW5nLT5tYXNrID0gc2l6ZSAtIDE7Ci0JcmluZy0+cF90YWls
ID0gMDsKLQlyaW5nLT5wX2hlYWQgPSAwOwotCXJpbmctPmNfaGVhZCA9IDA7Ci0JcmV0dXJuOwot
fQotCi0vKgotICogVGhlIF9ja19yaW5nXyogbmFtZXNwYWNlIGlzIGludGVybmFsIG9ubHkgYW5k
IG11c3Qgbm90IHVzZWQgZXh0ZXJuYWxseS4KLSAqLwotQ0tfQ0NfRk9SQ0VfSU5MSU5FIHN0YXRp
YyBib29sCi1fY2tfcmluZ19lbnF1ZXVlX3NwKHN0cnVjdCBja19yaW5nICpyaW5nLAotICAgIHZv
aWQgKkNLX0NDX1JFU1RSSUNUIGJ1ZmZlciwKLSAgICBjb25zdCB2b2lkICpDS19DQ19SRVNUUklD
VCBlbnRyeSwKLSAgICB1bnNpZ25lZCBpbnQgdHMsCi0gICAgdW5zaWduZWQgaW50ICpzaXplKQot
ewotCWNvbnN0IHVuc2lnbmVkIGludCBtYXNrID0gcmluZy0+bWFzazsKLQl1bnNpZ25lZCBpbnQg
Y29uc3VtZXIsIHByb2R1Y2VyLCBkZWx0YTsKLQotCWNvbnN1bWVyID0gY2tfcHJfbG9hZF91aW50
KCZyaW5nLT5jX2hlYWQpOwotCXByb2R1Y2VyID0gcmluZy0+cF90YWlsOwotCWRlbHRhID0gcHJv
ZHVjZXIgKyAxOwotCWlmIChzaXplICE9IE5VTEwpCi0JCSpzaXplID0gKHByb2R1Y2VyIC0gY29u
c3VtZXIpICYgbWFzazsKLQotCWlmIChDS19DQ19VTkxJS0VMWSgoZGVsdGEgJiBtYXNrKSA9PSAo
Y29uc3VtZXIgJiBtYXNrKSkpCi0JCXJldHVybiBmYWxzZTsKLQotCWJ1ZmZlciA9IChjaGFyICop
YnVmZmVyICsgdHMgKiAocHJvZHVjZXIgJiBtYXNrKTsKLQltZW1jcHkoYnVmZmVyLCBlbnRyeSwg
dHMpOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdG8gdXBkYXRlIHNsb3QgdmFsdWUgYmVmb3JlIGlu
ZGljYXRpbmcKLQkgKiB0aGF0IHRoZSBzbG90IGlzIGF2YWlsYWJsZSBmb3IgY29uc3VtcHRpb24u
Ci0JICovCi0JY2tfcHJfZmVuY2Vfc3RvcmUoKTsKLQlja19wcl9zdG9yZV91aW50KCZyaW5nLT5w
X3RhaWwsIGRlbHRhKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotQ0tfQ0NfRk9SQ0VfSU5MSU5FIHN0
YXRpYyBib29sCi1fY2tfcmluZ19lbnF1ZXVlX3NwX3NpemUoc3RydWN0IGNrX3JpbmcgKnJpbmcs
Ci0gICAgdm9pZCAqQ0tfQ0NfUkVTVFJJQ1QgYnVmZmVyLAotICAgIGNvbnN0IHZvaWQgKkNLX0ND
X1JFU1RSSUNUIGVudHJ5LAotICAgIHVuc2lnbmVkIGludCB0cywKLSAgICB1bnNpZ25lZCBpbnQg
KnNpemUpCi17Ci0JdW5zaWduZWQgaW50IHN6OwotCWJvb2wgcjsKLQotCXIgPSBfY2tfcmluZ19l
bnF1ZXVlX3NwKHJpbmcsIGJ1ZmZlciwgZW50cnksIHRzLCAmc3opOwotCSpzaXplID0gc3o7Ci0J
cmV0dXJuIHI7Ci19Ci0KLUNLX0NDX0ZPUkNFX0lOTElORSBzdGF0aWMgYm9vbAotX2NrX3Jpbmdf
ZGVxdWV1ZV9zYyhzdHJ1Y3QgY2tfcmluZyAqcmluZywKLSAgICBjb25zdCB2b2lkICpDS19DQ19S
RVNUUklDVCBidWZmZXIsCi0gICAgdm9pZCAqQ0tfQ0NfUkVTVFJJQ1QgdGFyZ2V0LAotICAgIHVu
c2lnbmVkIGludCBzaXplKQotewotCWNvbnN0IHVuc2lnbmVkIGludCBtYXNrID0gcmluZy0+bWFz
azsKLQl1bnNpZ25lZCBpbnQgY29uc3VtZXIsIHByb2R1Y2VyOwotCi0JY29uc3VtZXIgPSByaW5n
LT5jX2hlYWQ7Ci0JcHJvZHVjZXIgPSBja19wcl9sb2FkX3VpbnQoJnJpbmctPnBfdGFpbCk7Ci0K
LQlpZiAoQ0tfQ0NfVU5MSUtFTFkoY29uc3VtZXIgPT0gcHJvZHVjZXIpKQotCQlyZXR1cm4gZmFs
c2U7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0byBzZXJpYWxpemUgd2l0aCByZXNwZWN0IHRvIG91
ciBzbmFwc2hvdAotCSAqIG9mIHRoZSBwcm9kdWNlciBjb3VudGVyLgotCSAqLwotCWNrX3ByX2Zl
bmNlX2xvYWQoKTsKLQotCWJ1ZmZlciA9IChjb25zdCBjaGFyICopYnVmZmVyICsgc2l6ZSAqIChj
b25zdW1lciAmIG1hc2spOwotCW1lbWNweSh0YXJnZXQsIGJ1ZmZlciwgc2l6ZSk7Ci0KLQkvKgot
CSAqIE1ha2Ugc3VyZSBjb3B5IGlzIGNvbXBsZXRlZCB3aXRoIHJlc3BlY3QgdG8gY29uc3VtZXIK
LQkgKiB1cGRhdGUuCi0JICovCi0JY2tfcHJfZmVuY2Vfc3RvcmUoKTsKLQlja19wcl9zdG9yZV91
aW50KCZyaW5nLT5jX2hlYWQsIGNvbnN1bWVyICsgMSk7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLUNL
X0NDX0ZPUkNFX0lOTElORSBzdGF0aWMgYm9vbAotX2NrX3JpbmdfZW5xdWV1ZV9tcChzdHJ1Y3Qg
Y2tfcmluZyAqcmluZywKLSAgICB2b2lkICpidWZmZXIsCi0gICAgY29uc3Qgdm9pZCAqZW50cnks
Ci0gICAgdW5zaWduZWQgaW50IHRzLAotICAgIHVuc2lnbmVkIGludCAqc2l6ZSkKLXsKLQljb25z
dCB1bnNpZ25lZCBpbnQgbWFzayA9IHJpbmctPm1hc2s7Ci0JdW5zaWduZWQgaW50IHByb2R1Y2Vy
LCBjb25zdW1lciwgZGVsdGE7Ci0JYm9vbCByID0gdHJ1ZTsKLQotCXByb2R1Y2VyID0gY2tfcHJf
bG9hZF91aW50KCZyaW5nLT5wX2hlYWQpOwotCi0JZm9yICg7OykgewotCQkvKgotCQkgKiBUaGUg
c25hcHNob3Qgb2YgcHJvZHVjZXIgbXVzdCBiZSB1cCB0byBkYXRlIHdpdGggcmVzcGVjdCB0bwot
CQkgKiBjb25zdW1lci4KLQkJICovCi0JCWNrX3ByX2ZlbmNlX2xvYWQoKTsKLQkJY29uc3VtZXIg
PSBja19wcl9sb2FkX3VpbnQoJnJpbmctPmNfaGVhZCk7Ci0KLQkJZGVsdGEgPSBwcm9kdWNlciAr
IDE7Ci0KLQkJLyoKLQkJICogT25seSB0cnkgdG8gQ0FTIGlmIHRoZSBwcm9kdWNlciBpcyBub3Qg
Y2xlYXJseSBzdGFsZSAobm90Ci0JCSAqIGxlc3MgdGhhbiBjb25zdW1lcikgYW5kIHRoZSBidWZm
ZXIgaXMgZGVmaW5pdGVseSBub3QgZnVsbC4KLQkJICovCi0JCWlmIChDS19DQ19MSUtFTFkoKHBy
b2R1Y2VyIC0gY29uc3VtZXIpIDwgbWFzaykpIHsKLQkJCWlmIChja19wcl9jYXNfdWludF92YWx1
ZSgmcmluZy0+cF9oZWFkLAotCQkJICAgIHByb2R1Y2VyLCBkZWx0YSwgJnByb2R1Y2VyKSA9PSB0
cnVlKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQl1bnNpZ25lZCBpbnQgbmV3
X3Byb2R1Y2VyOwotCi0JCQkvKgotCQkJICogU2xvdyBwYXRoLiAgRWl0aGVyIHRoZSBidWZmZXIg
aXMgZnVsbCBvciB3ZSBoYXZlIGEKLQkJCSAqIHN0YWxlIHNuYXBzaG90IG9mIHBfaGVhZC4gIEV4
ZWN1dGUgYSBzZWNvbmQgcmVhZCBvZgotCQkJICogcF9yZWFkIHRoYXQgbXVzdCBiZSBvcmRlcmVk
IHdydCB0aGUgc25hcHNob3Qgb2YKLQkJCSAqIGNfaGVhZC4KLQkJCSAqLwotCQkJY2tfcHJfZmVu
Y2VfbG9hZCgpOwotCQkJbmV3X3Byb2R1Y2VyID0gY2tfcHJfbG9hZF91aW50KCZyaW5nLT5wX2hl
YWQpOwotCi0JCQkvKgotCQkJICogT25seSBmYWlsIGlmIHdlIGhhdmVuJ3QgbWFkZSBmb3J3YXJk
IHByb2dyZXNzIGluCi0JCQkgKiBwcm9kdWN0aW9uOiB0aGUgYnVmZmVyIG11c3QgaGF2ZSBiZWVu
IGZ1bGwgd2hlbiB3ZQotCQkJICogcmVhZCBuZXdfcHJvZHVjZXIgKG9yIHdlIHdyYXBwZWQgYXJv
dW5kIFVJTlRfTUFYCi0JCQkgKiBkdXJpbmcgdGhpcyBpdGVyYXRpb24pLgotCQkJICovCi0JCQlp
ZiAocHJvZHVjZXIgPT0gbmV3X3Byb2R1Y2VyKSB7Ci0JCQkJciA9IGZhbHNlOwotCQkJCWdvdG8g
bGVhdmU7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBwX2hlYWQgYWR2YW5jZWQgZHVyaW5nIHRoaXMg
aXRlcmF0aW9uLiBUcnkgYWdhaW4uCi0JCQkgKi8KLQkJCXByb2R1Y2VyID0gbmV3X3Byb2R1Y2Vy
OwotCQl9Ci0JfQotCi0JYnVmZmVyID0gKGNoYXIgKilidWZmZXIgKyB0cyAqIChwcm9kdWNlciAm
IG1hc2spOwotCW1lbWNweShidWZmZXIsIGVudHJ5LCB0cyk7Ci0KLQkvKgotCSAqIFdhaXQgdW50
aWwgYWxsIGNvbmN1cnJlbnQgcHJvZHVjZXJzIGhhdmUgY29tcGxldGVkIHdyaXRpbmcKLQkgKiB0
aGVpciBkYXRhIGludG8gdGhlIHJpbmcgYnVmZmVyLgotCSAqLwotCXdoaWxlIChja19wcl9sb2Fk
X3VpbnQoJnJpbmctPnBfdGFpbCkgIT0gcHJvZHVjZXIpCi0JCWNrX3ByX3N0YWxsKCk7Ci0KLQkv
KgotCSAqIEVuc3VyZSB0aGF0IGNvcHkgaXMgY29tcGxldGVkIGJlZm9yZSB1cGRhdGluZyBzaGFy
ZWQgcHJvZHVjZXIKLQkgKiBjb3VudGVyLgotCSAqLwotCWNrX3ByX2ZlbmNlX3N0b3JlKCk7Ci0J
Y2tfcHJfc3RvcmVfdWludCgmcmluZy0+cF90YWlsLCBkZWx0YSk7Ci0KLWxlYXZlOgotCWlmIChz
aXplICE9IE5VTEwpCi0JCSpzaXplID0gKHByb2R1Y2VyIC0gY29uc3VtZXIpICYgbWFzazsKLQot
CXJldHVybiByOwotfQotCi1DS19DQ19GT1JDRV9JTkxJTkUgc3RhdGljIGJvb2wKLV9ja19yaW5n
X2VucXVldWVfbXBfc2l6ZShzdHJ1Y3QgY2tfcmluZyAqcmluZywKLSAgICB2b2lkICpidWZmZXIs
Ci0gICAgY29uc3Qgdm9pZCAqZW50cnksCi0gICAgdW5zaWduZWQgaW50IHRzLAotICAgIHVuc2ln
bmVkIGludCAqc2l6ZSkKLXsKLQl1bnNpZ25lZCBpbnQgc3o7Ci0JYm9vbCByOwotCi0JciA9IF9j
a19yaW5nX2VucXVldWVfbXAocmluZywgYnVmZmVyLCBlbnRyeSwgdHMsICZzeik7Ci0JKnNpemUg
PSBzejsKLQlyZXR1cm4gcjsKLX0KLQotQ0tfQ0NfRk9SQ0VfSU5MSU5FIHN0YXRpYyBib29sCi1f
Y2tfcmluZ190cnlkZXF1ZXVlX21jKHN0cnVjdCBja19yaW5nICpyaW5nLAotICAgIGNvbnN0IHZv
aWQgKmJ1ZmZlciwKLSAgICB2b2lkICpkYXRhLAotICAgIHVuc2lnbmVkIGludCBzaXplKQotewot
CWNvbnN0IHVuc2lnbmVkIGludCBtYXNrID0gcmluZy0+bWFzazsKLQl1bnNpZ25lZCBpbnQgY29u
c3VtZXIsIHByb2R1Y2VyOwotCi0JY29uc3VtZXIgPSBja19wcl9sb2FkX3VpbnQoJnJpbmctPmNf
aGVhZCk7Ci0JY2tfcHJfZmVuY2VfbG9hZCgpOwotCXByb2R1Y2VyID0gY2tfcHJfbG9hZF91aW50
KCZyaW5nLT5wX3RhaWwpOwotCi0JaWYgKENLX0NDX1VOTElLRUxZKGNvbnN1bWVyID09IHByb2R1
Y2VyKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JY2tfcHJfZmVuY2VfbG9hZCgpOwotCi0JYnVmZmVy
ID0gKGNvbnN0IGNoYXIgKilidWZmZXIgKyBzaXplICogKGNvbnN1bWVyICYgbWFzayk7Ci0JbWVt
Y3B5KGRhdGEsIGJ1ZmZlciwgc2l6ZSk7Ci0KLQlja19wcl9mZW5jZV9zdG9yZV9hdG9taWMoKTsK
LQlyZXR1cm4gY2tfcHJfY2FzX3VpbnQoJnJpbmctPmNfaGVhZCwgY29uc3VtZXIsIGNvbnN1bWVy
ICsgMSk7Ci19Ci0KLUNLX0NDX0ZPUkNFX0lOTElORSBzdGF0aWMgYm9vbAotX2NrX3JpbmdfZGVx
dWV1ZV9tYyhzdHJ1Y3QgY2tfcmluZyAqcmluZywKLSAgICBjb25zdCB2b2lkICpidWZmZXIsCi0g
ICAgdm9pZCAqZGF0YSwKLSAgICB1bnNpZ25lZCBpbnQgdHMpCi17Ci0JY29uc3QgdW5zaWduZWQg
aW50IG1hc2sgPSByaW5nLT5tYXNrOwotCXVuc2lnbmVkIGludCBjb25zdW1lciwgcHJvZHVjZXI7
Ci0KLQljb25zdW1lciA9IGNrX3ByX2xvYWRfdWludCgmcmluZy0+Y19oZWFkKTsKLQotCWRvIHsK
LQkJY29uc3QgY2hhciAqdGFyZ2V0OwotCi0JCS8qCi0JCSAqIFByb2R1Y2VyIGNvdW50ZXIgbXVz
dCByZXByZXNlbnQgc3RhdGUgcmVsYXRpdmUgdG8KLQkJICogb3VyIGxhdGVzdCBjb25zdW1lciBz
bmFwc2hvdC4KLQkJICovCi0JCWNrX3ByX2ZlbmNlX2xvYWQoKTsKLQkJcHJvZHVjZXIgPSBja19w
cl9sb2FkX3VpbnQoJnJpbmctPnBfdGFpbCk7Ci0KLQkJaWYgKENLX0NDX1VOTElLRUxZKGNvbnN1
bWVyID09IHByb2R1Y2VyKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlja19wcl9mZW5jZV9sb2Fk
KCk7Ci0KLQkJdGFyZ2V0ID0gKGNvbnN0IGNoYXIgKilidWZmZXIgKyB0cyAqIChjb25zdW1lciAm
IG1hc2spOwotCQltZW1jcHkoZGF0YSwgdGFyZ2V0LCB0cyk7Ci0KLQkJLyogU2VyaWFsaXplIGxv
YWQgd2l0aCByZXNwZWN0IHRvIGhlYWQgdXBkYXRlLiAqLwotCQlja19wcl9mZW5jZV9zdG9yZV9h
dG9taWMoKTsKLQl9IHdoaWxlIChja19wcl9jYXNfdWludF92YWx1ZSgmcmluZy0+Y19oZWFkLAot
CQkJCSAgICAgIGNvbnN1bWVyLAotCQkJCSAgICAgIGNvbnN1bWVyICsgMSwKLQkJCQkgICAgICAm
Y29uc3VtZXIpID09IGZhbHNlKTsKLQotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogVGhlIGNr
X3JpbmdfKl9zcHNjIG5hbWVzcGFjZSBpcyB0aGUgcHVibGljIGludGVyZmFjZSBmb3IgaW50ZXJh
Y3Rpbmcgd2l0aCBhCi0gKiByaW5nIGJ1ZmZlciBjb250YWluaW5nIHBvaW50ZXJzLiBDb3JyZWN0
bmVzcyBpcyBvbmx5IHByb3ZpZGVkIGlmIHRoZXJlIGlzIHVwCi0gKiB0byBvbmUgY29uY3VycmVu
dCBjb25zdW1lciBhbmQgdXAgdG8gb25lIGNvbmN1cnJlbnQgcHJvZHVjZXIuCi0gKi8KLUNLX0ND
X0lOTElORSBzdGF0aWMgYm9vbAotY2tfcmluZ19lbnF1ZXVlX3Nwc2Nfc2l6ZShzdHJ1Y3QgY2tf
cmluZyAqcmluZywKLSAgICBzdHJ1Y3QgY2tfcmluZ19idWZmZXIgKmJ1ZmZlciwKLSAgICBjb25z
dCB2b2lkICplbnRyeSwKLSAgICB1bnNpZ25lZCBpbnQgKnNpemUpCi17Ci0KLQlyZXR1cm4gX2Nr
X3JpbmdfZW5xdWV1ZV9zcF9zaXplKHJpbmcsIGJ1ZmZlciwgJmVudHJ5LAotCSAgICBzaXplb2Yo
ZW50cnkpLCBzaXplKTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19yaW5nX2Vu
cXVldWVfc3BzYyhzdHJ1Y3QgY2tfcmluZyAqcmluZywKLSAgICBzdHJ1Y3QgY2tfcmluZ19idWZm
ZXIgKmJ1ZmZlciwKLSAgICBjb25zdCB2b2lkICplbnRyeSkKLXsKLQotCXJldHVybiBfY2tfcmlu
Z19lbnF1ZXVlX3NwKHJpbmcsIGJ1ZmZlciwKLQkgICAgJmVudHJ5LCBzaXplb2YoZW50cnkpLCBO
VUxMKTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19yaW5nX2RlcXVldWVfc3Bz
YyhzdHJ1Y3QgY2tfcmluZyAqcmluZywKLSAgICBjb25zdCBzdHJ1Y3QgY2tfcmluZ19idWZmZXIg
KmJ1ZmZlciwKLSAgICB2b2lkICpkYXRhKQotewotCi0JcmV0dXJuIF9ja19yaW5nX2RlcXVldWVf
c2MocmluZywgYnVmZmVyLAotCSAgICAodm9pZCAqKilkYXRhLCBzaXplb2Yodm9pZCAqKSk7Ci19
Ci0KLS8qCi0gKiBUaGUgY2tfcmluZ18qX21wbWMgbmFtZXNwYWNlIGlzIHRoZSBwdWJsaWMgaW50
ZXJmYWNlIGZvciBpbnRlcmFjdGluZyB3aXRoIGEKLSAqIHJpbmcgYnVmZmVyIGNvbnRhaW5pbmcg
cG9pbnRlcnMuIENvcnJlY3RuZXNzIGlzIHByb3ZpZGVkIGZvciBhbnkgbnVtYmVyIG9mCi0gKiBw
cm9kdWNlcnMgYW5kIGNvbnN1bWVycy4KLSAqLwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1j
a19yaW5nX2VucXVldWVfbXBtYyhzdHJ1Y3QgY2tfcmluZyAqcmluZywKLSAgICBzdHJ1Y3QgY2tf
cmluZ19idWZmZXIgKmJ1ZmZlciwKLSAgICBjb25zdCB2b2lkICplbnRyeSkKLXsKLQotCXJldHVy
biBfY2tfcmluZ19lbnF1ZXVlX21wKHJpbmcsIGJ1ZmZlciwgJmVudHJ5LAotCSAgICBzaXplb2Yo
ZW50cnkpLCBOVUxMKTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19yaW5nX2Vu
cXVldWVfbXBtY19zaXplKHN0cnVjdCBja19yaW5nICpyaW5nLAotICAgIHN0cnVjdCBja19yaW5n
X2J1ZmZlciAqYnVmZmVyLAotICAgIGNvbnN0IHZvaWQgKmVudHJ5LAotICAgIHVuc2lnbmVkIGlu
dCAqc2l6ZSkKLXsKLQotCXJldHVybiBfY2tfcmluZ19lbnF1ZXVlX21wX3NpemUocmluZywgYnVm
ZmVyLCAmZW50cnksCi0JICAgIHNpemVvZihlbnRyeSksIHNpemUpOwotfQotCi1DS19DQ19JTkxJ
TkUgc3RhdGljIGJvb2wKLWNrX3JpbmdfdHJ5ZGVxdWV1ZV9tcG1jKHN0cnVjdCBja19yaW5nICpy
aW5nLAotICAgIGNvbnN0IHN0cnVjdCBja19yaW5nX2J1ZmZlciAqYnVmZmVyLAotICAgIHZvaWQg
KmRhdGEpCi17Ci0KLQlyZXR1cm4gX2NrX3JpbmdfdHJ5ZGVxdWV1ZV9tYyhyaW5nLAotCSAgICBi
dWZmZXIsICh2b2lkICoqKWRhdGEsIHNpemVvZih2b2lkICopKTsKLX0KLQotQ0tfQ0NfSU5MSU5F
IHN0YXRpYyBib29sCi1ja19yaW5nX2RlcXVldWVfbXBtYyhzdHJ1Y3QgY2tfcmluZyAqcmluZywK
LSAgICBjb25zdCBzdHJ1Y3QgY2tfcmluZ19idWZmZXIgKmJ1ZmZlciwKLSAgICB2b2lkICpkYXRh
KQotewotCi0JcmV0dXJuIF9ja19yaW5nX2RlcXVldWVfbWMocmluZywgYnVmZmVyLCAodm9pZCAq
KilkYXRhLAotCSAgICBzaXplb2Yodm9pZCAqKSk7Ci19Ci0KLS8qCi0gKiBUaGUgY2tfcmluZ18q
X3NwbWMgbmFtZXNwYWNlIGlzIHRoZSBwdWJsaWMgaW50ZXJmYWNlIGZvciBpbnRlcmFjdGluZyB3
aXRoIGEKLSAqIHJpbmcgYnVmZmVyIGNvbnRhaW5pbmcgcG9pbnRlcnMuIENvcnJlY3RuZXNzIGlz
IHByb3ZpZGVkIGZvciBhbnkgbnVtYmVyIG9mCi0gKiBjb25zdW1lcnMgd2l0aCB1cCB0byBvbmUg
Y29uY3VycmVudCBwcm9kdWNlci4KLSAqLwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19y
aW5nX2VucXVldWVfc3BtY19zaXplKHN0cnVjdCBja19yaW5nICpyaW5nLAotICAgIHN0cnVjdCBj
a19yaW5nX2J1ZmZlciAqYnVmZmVyLAotICAgIGNvbnN0IHZvaWQgKmVudHJ5LAotICAgIHVuc2ln
bmVkIGludCAqc2l6ZSkKLXsKLQotCXJldHVybiBfY2tfcmluZ19lbnF1ZXVlX3NwX3NpemUocmlu
ZywgYnVmZmVyLCAmZW50cnksCi0JICAgIHNpemVvZihlbnRyeSksIHNpemUpOwotfQotCi1DS19D
Q19JTkxJTkUgc3RhdGljIGJvb2wKLWNrX3JpbmdfZW5xdWV1ZV9zcG1jKHN0cnVjdCBja19yaW5n
ICpyaW5nLAotICAgIHN0cnVjdCBja19yaW5nX2J1ZmZlciAqYnVmZmVyLAotICAgIGNvbnN0IHZv
aWQgKmVudHJ5KQotewotCi0JcmV0dXJuIF9ja19yaW5nX2VucXVldWVfc3AocmluZywgYnVmZmVy
LCAmZW50cnksCi0JICAgIHNpemVvZihlbnRyeSksIE5VTEwpOwotfQotCi1DS19DQ19JTkxJTkUg
c3RhdGljIGJvb2wKLWNrX3JpbmdfdHJ5ZGVxdWV1ZV9zcG1jKHN0cnVjdCBja19yaW5nICpyaW5n
LAotICAgIGNvbnN0IHN0cnVjdCBja19yaW5nX2J1ZmZlciAqYnVmZmVyLAotICAgIHZvaWQgKmRh
dGEpCi17Ci0KLQlyZXR1cm4gX2NrX3JpbmdfdHJ5ZGVxdWV1ZV9tYyhyaW5nLCBidWZmZXIsICh2
b2lkICoqKWRhdGEsIHNpemVvZih2b2lkICopKTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBi
b29sCi1ja19yaW5nX2RlcXVldWVfc3BtYyhzdHJ1Y3QgY2tfcmluZyAqcmluZywKLSAgICBjb25z
dCBzdHJ1Y3QgY2tfcmluZ19idWZmZXIgKmJ1ZmZlciwKLSAgICB2b2lkICpkYXRhKQotewotCi0J
cmV0dXJuIF9ja19yaW5nX2RlcXVldWVfbWMocmluZywgYnVmZmVyLCAodm9pZCAqKilkYXRhLCBz
aXplb2Yodm9pZCAqKSk7Ci19Ci0KLS8qCi0gKiBUaGUgY2tfcmluZ18qX21wc2MgbmFtZXNwYWNl
IGlzIHRoZSBwdWJsaWMgaW50ZXJmYWNlIGZvciBpbnRlcmFjdGluZyB3aXRoIGEKLSAqIHJpbmcg
YnVmZmVyIGNvbnRhaW5pbmcgcG9pbnRlcnMuIENvcnJlY3RuZXNzIGlzIHByb3ZpZGVkIGZvciBh
bnkgbnVtYmVyIG9mCi0gKiBwcm9kdWNlcnMgd2l0aCB1cCB0byBvbmUgY29uY3VycmVudCBjb25z
dW1lcnMuCi0gKi8KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfcmluZ19lbnF1ZXVlX21w
c2Moc3RydWN0IGNrX3JpbmcgKnJpbmcsCi0gICAgc3RydWN0IGNrX3JpbmdfYnVmZmVyICpidWZm
ZXIsCi0gICAgY29uc3Qgdm9pZCAqZW50cnkpCi17Ci0KLQlyZXR1cm4gX2NrX3JpbmdfZW5xdWV1
ZV9tcChyaW5nLCBidWZmZXIsICZlbnRyeSwKLQkgICAgc2l6ZW9mKGVudHJ5KSwgTlVMTCk7Ci19
Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfcmluZ19lbnF1ZXVlX21wc2Nfc2l6ZShz
dHJ1Y3QgY2tfcmluZyAqcmluZywKLSAgICBzdHJ1Y3QgY2tfcmluZ19idWZmZXIgKmJ1ZmZlciwK
LSAgICBjb25zdCB2b2lkICplbnRyeSwKLSAgICB1bnNpZ25lZCBpbnQgKnNpemUpCi17Ci0KLQly
ZXR1cm4gX2NrX3JpbmdfZW5xdWV1ZV9tcF9zaXplKHJpbmcsIGJ1ZmZlciwgJmVudHJ5LAotCSAg
ICBzaXplb2YoZW50cnkpLCBzaXplKTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1j
a19yaW5nX2RlcXVldWVfbXBzYyhzdHJ1Y3QgY2tfcmluZyAqcmluZywKLSAgICBjb25zdCBzdHJ1
Y3QgY2tfcmluZ19idWZmZXIgKmJ1ZmZlciwKLSAgICB2b2lkICpkYXRhKQotewotCi0JcmV0dXJu
IF9ja19yaW5nX2RlcXVldWVfc2MocmluZywgYnVmZmVyLCAodm9pZCAqKilkYXRhLAotCSAgICBz
aXplb2Yodm9pZCAqKSk7Ci19Ci0KLS8qCi0gKiBDS19SSU5HX1BST1RPVFlQRSBpcyB1c2VkIHRv
IGRlZmluZSBhIHR5cGUtc2FmZSBpbnRlcmZhY2UgZm9yIGlubGluaW5nCi0gKiB2YWx1ZXMgb2Yg
YSBwYXJ0aWN1bGFyIHR5cGUgaW4gdGhlIHJpbmcgdGhlIGJ1ZmZlci4KLSAqLwotI2RlZmluZSBD
S19SSU5HX1BST1RPVFlQRShuYW1lLCB0eXBlKQkJCVwKLUNLX0NDX0lOTElORSBzdGF0aWMgYm9v
bAkJCQlcCi1ja19yaW5nX2VucXVldWVfc3BzY19zaXplXyMjbmFtZShzdHJ1Y3QgY2tfcmluZyAq
YSwJXAotICAgIHN0cnVjdCB0eXBlICpiLAkJCQkJXAotICAgIHN0cnVjdCB0eXBlICpjLAkJCQkJ
XAotICAgIHVuc2lnbmVkIGludCAqZCkJCQkJCVwKLXsJCQkJCQkJXAotCQkJCQkJCVwKLQlyZXR1
cm4gX2NrX3JpbmdfZW5xdWV1ZV9zcF9zaXplKGEsIGIsIGMsCVwKLQkgICAgc2l6ZW9mKHN0cnVj
dCB0eXBlKSwgZCk7CQkJXAotfQkJCQkJCQlcCi0JCQkJCQkJXAotQ0tfQ0NfSU5MSU5FIHN0YXRp
YyBib29sCQkJCVwKLWNrX3JpbmdfZW5xdWV1ZV9zcHNjXyMjbmFtZShzdHJ1Y3QgY2tfcmluZyAq
YSwJCVwKLSAgICBzdHJ1Y3QgdHlwZSAqYiwJCQkJCVwKLSAgICBzdHJ1Y3QgdHlwZSAqYykJCQkJ
CVwKLXsJCQkJCQkJXAotCQkJCQkJCVwKLQlyZXR1cm4gX2NrX3JpbmdfZW5xdWV1ZV9zcChhLCBi
LCBjLAkJXAotCSAgICBzaXplb2Yoc3RydWN0IHR5cGUpLCBOVUxMKTsJCQlcCi19CQkJCQkJCVwK
LQkJCQkJCQlcCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wJCQkJXAotY2tfcmluZ19kZXF1ZXVl
X3Nwc2NfIyNuYW1lKHN0cnVjdCBja19yaW5nICphLAkJXAotICAgIHN0cnVjdCB0eXBlICpiLAkJ
CQkJXAotICAgIHN0cnVjdCB0eXBlICpjKQkJCQkJXAotewkJCQkJCQlcCi0JCQkJCQkJXAotCXJl
dHVybiBfY2tfcmluZ19kZXF1ZXVlX3NjKGEsIGIsIGMsCQlcCi0JICAgIHNpemVvZihzdHJ1Y3Qg
dHlwZSkpOwkJCVwKLX0JCQkJCQkJXAotCQkJCQkJCVwKLUNLX0NDX0lOTElORSBzdGF0aWMgYm9v
bAkJCQlcCi1ja19yaW5nX2VucXVldWVfc3BtY19zaXplXyMjbmFtZShzdHJ1Y3QgY2tfcmluZyAq
YSwJXAotICAgIHN0cnVjdCB0eXBlICpiLAkJCQkJXAotICAgIHN0cnVjdCB0eXBlICpjLAkJCQkJ
XAotICAgIHVuc2lnbmVkIGludCAqZCkJCQkJCVwKLXsJCQkJCQkJXAotCQkJCQkJCVwKLQlyZXR1
cm4gX2NrX3JpbmdfZW5xdWV1ZV9zcF9zaXplKGEsIGIsIGMsCVwKLQkgICAgc2l6ZW9mKHN0cnVj
dCB0eXBlKSwgZCk7CQkJXAotfQkJCQkJCQlcCi0JCQkJCQkJXAotQ0tfQ0NfSU5MSU5FIHN0YXRp
YyBib29sCQkJCVwKLWNrX3JpbmdfZW5xdWV1ZV9zcG1jXyMjbmFtZShzdHJ1Y3QgY2tfcmluZyAq
YSwJCVwKLSAgICBzdHJ1Y3QgdHlwZSAqYiwJCQkJCVwKLSAgICBzdHJ1Y3QgdHlwZSAqYykJCQkJ
CVwKLXsJCQkJCQkJXAotCQkJCQkJCVwKLQlyZXR1cm4gX2NrX3JpbmdfZW5xdWV1ZV9zcChhLCBi
LCBjLAkJXAotCSAgICBzaXplb2Yoc3RydWN0IHR5cGUpLCBOVUxMKTsJCQlcCi19CQkJCQkJCVwK
LQkJCQkJCQlcCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wJCQkJXAotY2tfcmluZ190cnlkZXF1
ZXVlX3NwbWNfIyNuYW1lKHN0cnVjdCBja19yaW5nICphLAlcCi0gICAgc3RydWN0IHR5cGUgKmIs
CQkJCQlcCi0gICAgc3RydWN0IHR5cGUgKmMpCQkJCQlcCi17CQkJCQkJCVwKLQkJCQkJCQlcCi0J
cmV0dXJuIF9ja19yaW5nX3RyeWRlcXVldWVfbWMoYSwJCVwKLQkgICAgYiwgYywgc2l6ZW9mKHN0
cnVjdCB0eXBlKSk7CQkJXAotfQkJCQkJCQlcCi0JCQkJCQkJXAotQ0tfQ0NfSU5MSU5FIHN0YXRp
YyBib29sCQkJCVwKLWNrX3JpbmdfZGVxdWV1ZV9zcG1jXyMjbmFtZShzdHJ1Y3QgY2tfcmluZyAq
YSwJCVwKLSAgICBzdHJ1Y3QgdHlwZSAqYiwJCQkJCVwKLSAgICBzdHJ1Y3QgdHlwZSAqYykJCQkJ
CVwKLXsJCQkJCQkJXAotCQkJCQkJCVwKLQlyZXR1cm4gX2NrX3JpbmdfZGVxdWV1ZV9tYyhhLCBi
LCBjLAkJXAotCSAgICBzaXplb2Yoc3RydWN0IHR5cGUpKTsJCQlcCi19CQkJCQkJCVwKLQkJCQkJ
CQlcCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wJCQkJXAotY2tfcmluZ19lbnF1ZXVlX21wc2Nf
IyNuYW1lKHN0cnVjdCBja19yaW5nICphLAkJXAotICAgIHN0cnVjdCB0eXBlICpiLAkJCQkJXAot
ICAgIHN0cnVjdCB0eXBlICpjKQkJCQkJXAotewkJCQkJCQlcCi0JCQkJCQkJXAotCXJldHVybiBf
Y2tfcmluZ19lbnF1ZXVlX21wKGEsIGIsIGMsCQlcCi0JICAgIHNpemVvZihzdHJ1Y3QgdHlwZSks
IE5VTEwpOwkJCVwKLX0JCQkJCQkJXAotCQkJCQkJCVwKLUNLX0NDX0lOTElORSBzdGF0aWMgYm9v
bAkJCQlcCi1ja19yaW5nX2VucXVldWVfbXBzY19zaXplXyMjbmFtZShzdHJ1Y3QgY2tfcmluZyAq
YSwJXAotICAgIHN0cnVjdCB0eXBlICpiLAkJCQkJXAotICAgIHN0cnVjdCB0eXBlICpjLAkJCQkJ
XAotICAgIHVuc2lnbmVkIGludCAqZCkJCQkJCVwKLXsJCQkJCQkJXAotCQkJCQkJCVwKLQlyZXR1
cm4gX2NrX3JpbmdfZW5xdWV1ZV9tcF9zaXplKGEsIGIsIGMsCVwKLQkgICAgc2l6ZW9mKHN0cnVj
dCB0eXBlKSwgZCk7CQkJXAotfQkJCQkJCQlcCi0JCQkJCQkJXAotQ0tfQ0NfSU5MSU5FIHN0YXRp
YyBib29sCQkJCVwKLWNrX3JpbmdfZGVxdWV1ZV9tcHNjXyMjbmFtZShzdHJ1Y3QgY2tfcmluZyAq
YSwJCVwKLSAgICBzdHJ1Y3QgdHlwZSAqYiwJCQkJCVwKLSAgICBzdHJ1Y3QgdHlwZSAqYykJCQkJ
CVwKLXsJCQkJCQkJXAotCQkJCQkJCVwKLQlyZXR1cm4gX2NrX3JpbmdfZGVxdWV1ZV9zYyhhLCBi
LCBjLAkJXAotCSAgICBzaXplb2Yoc3RydWN0IHR5cGUpKTsJCQlcCi19CQkJCQkJCVwKLQkJCQkJ
CQlcCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wJCQkJXAotY2tfcmluZ19lbnF1ZXVlX21wbWNf
c2l6ZV8jI25hbWUoc3RydWN0IGNrX3JpbmcgKmEsCVwKLSAgICBzdHJ1Y3QgdHlwZSAqYiwJCQkJ
CVwKLSAgICBzdHJ1Y3QgdHlwZSAqYywJCQkJCVwKLSAgICB1bnNpZ25lZCBpbnQgKmQpCQkJCQlc
Ci17CQkJCQkJCVwKLQkJCQkJCQlcCi0JcmV0dXJuIF9ja19yaW5nX2VucXVldWVfbXBfc2l6ZShh
LCBiLCBjLAlcCi0JICAgIHNpemVvZihzdHJ1Y3QgdHlwZSksIGQpOwkJCVwKLX0JCQkJCQkJXAot
CQkJCQkJCVwKLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAkJCQlcCi1ja19yaW5nX2VucXVldWVf
bXBtY18jI25hbWUoc3RydWN0IGNrX3JpbmcgKmEsCQlcCi0gICAgc3RydWN0IHR5cGUgKmIsCQkJ
CQlcCi0gICAgc3RydWN0IHR5cGUgKmMpCQkJCQlcCi17CQkJCQkJCVwKLQkJCQkJCQlcCi0JcmV0
dXJuIF9ja19yaW5nX2VucXVldWVfbXAoYSwgYiwgYywJCVwKLQkgICAgc2l6ZW9mKHN0cnVjdCB0
eXBlKSwgTlVMTCk7CQkJXAotfQkJCQkJCQlcCi0JCQkJCQkJXAotQ0tfQ0NfSU5MSU5FIHN0YXRp
YyBib29sCQkJCVwKLWNrX3JpbmdfdHJ5ZGVxdWV1ZV9tcG1jXyMjbmFtZShzdHJ1Y3QgY2tfcmlu
ZyAqYSwJXAotICAgIHN0cnVjdCB0eXBlICpiLAkJCQkJXAotICAgIHN0cnVjdCB0eXBlICpjKQkJ
CQkJXAotewkJCQkJCQlcCi0JCQkJCQkJXAotCXJldHVybiBfY2tfcmluZ190cnlkZXF1ZXVlX21j
KGEsCQlcCi0JICAgIGIsIGMsIHNpemVvZihzdHJ1Y3QgdHlwZSkpOwkJCVwKLX0JCQkJCQkJXAot
CQkJCQkJCVwKLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAkJCQlcCi1ja19yaW5nX2RlcXVldWVf
bXBtY18jI25hbWUoc3RydWN0IGNrX3JpbmcgKmEsCQlcCi0gICAgc3RydWN0IHR5cGUgKmIsCQkJ
CQlcCi0gICAgc3RydWN0IHR5cGUgKmMpCQkJCQlcCi17CQkJCQkJCVwKLQkJCQkJCQlcCi0JcmV0
dXJuIF9ja19yaW5nX2RlcXVldWVfbWMoYSwgYiwgYywJCVwKLQkgICAgc2l6ZW9mKHN0cnVjdCB0
eXBlKSk7CQkJXAotfQotCi0vKgotICogQSBzaW5nbGUgcHJvZHVjZXIgd2l0aCBvbmUgY29uY3Vy
cmVudCBjb25zdW1lci4KLSAqLwotI2RlZmluZSBDS19SSU5HX0VOUVVFVUVfU1BTQyhuYW1lLCBh
LCBiLCBjKQkJXAotCWNrX3JpbmdfZW5xdWV1ZV9zcHNjXyMjbmFtZShhLCBiLCBjKQotI2RlZmlu
ZSBDS19SSU5HX0VOUVVFVUVfU1BTQ19TSVpFKG5hbWUsIGEsIGIsIGMsIGQpCVwKLQlja19yaW5n
X2VucXVldWVfc3BzY19zaXplXyMjbmFtZShhLCBiLCBjLCBkKQotI2RlZmluZSBDS19SSU5HX0RF
UVVFVUVfU1BTQyhuYW1lLCBhLCBiLCBjKQkJXAotCWNrX3JpbmdfZGVxdWV1ZV9zcHNjXyMjbmFt
ZShhLCBiLCBjKQotCi0vKgotICogQSBzaW5nbGUgcHJvZHVjZXIgd2l0aCBhbnkgbnVtYmVyIG9m
IGNvbmN1cnJlbnQgY29uc3VtZXJzLgotICovCi0jZGVmaW5lIENLX1JJTkdfRU5RVUVVRV9TUE1D
KG5hbWUsIGEsIGIsIGMpCQlcCi0JY2tfcmluZ19lbnF1ZXVlX3NwbWNfIyNuYW1lKGEsIGIsIGMp
Ci0jZGVmaW5lIENLX1JJTkdfRU5RVUVVRV9TUE1DX1NJWkUobmFtZSwgYSwgYiwgYywgZCkJXAot
CWNrX3JpbmdfZW5xdWV1ZV9zcG1jX3NpemVfIyNuYW1lKGEsIGIsIGMsIGQpCi0jZGVmaW5lIENL
X1JJTkdfVFJZREVRVUVVRV9TUE1DKG5hbWUsIGEsIGIsIGMpCQlcCi0JY2tfcmluZ190cnlkZXF1
ZXVlX3NwbWNfIyNuYW1lKGEsIGIsIGMpCi0jZGVmaW5lIENLX1JJTkdfREVRVUVVRV9TUE1DKG5h
bWUsIGEsIGIsIGMpCQlcCi0JY2tfcmluZ19kZXF1ZXVlX3NwbWNfIyNuYW1lKGEsIGIsIGMpCi0K
LS8qCi0gKiBBbnkgbnVtYmVyIG9mIGNvbmN1cnJlbnQgcHJvZHVjZXJzIHdpdGggdXAgdG8gb25l
Ci0gKiBjb25jdXJyZW50IGNvbnN1bWVyLgotICovCi0jZGVmaW5lIENLX1JJTkdfRU5RVUVVRV9N
UFNDKG5hbWUsIGEsIGIsIGMpCQlcCi0JY2tfcmluZ19lbnF1ZXVlX21wc2NfIyNuYW1lKGEsIGIs
IGMpCi0jZGVmaW5lIENLX1JJTkdfRU5RVUVVRV9NUFNDX1NJWkUobmFtZSwgYSwgYiwgYywgZCkJ
XAotCWNrX3JpbmdfZW5xdWV1ZV9tcHNjX3NpemVfIyNuYW1lKGEsIGIsIGMsIGQpCi0jZGVmaW5l
IENLX1JJTkdfREVRVUVVRV9NUFNDKG5hbWUsIGEsIGIsIGMpCQlcCi0JY2tfcmluZ19kZXF1ZXVl
X21wc2NfIyNuYW1lKGEsIGIsIGMpCi0KLS8qCi0gKiBBbnkgbnVtYmVyIG9mIGNvbmN1cnJlbnQg
cHJvZHVjZXJzIGFuZCBjb25zdW1lcnMuCi0gKi8KLSNkZWZpbmUgQ0tfUklOR19FTlFVRVVFX01Q
TUMobmFtZSwgYSwgYiwgYykJCVwKLQlja19yaW5nX2VucXVldWVfbXBtY18jI25hbWUoYSwgYiwg
YykKLSNkZWZpbmUgQ0tfUklOR19FTlFVRVVFX01QTUNfU0laRShuYW1lLCBhLCBiLCBjLCBkKQlc
Ci0JY2tfcmluZ19lbnF1ZXVlX21wbWNfc2l6ZV8jI25hbWUoYSwgYiwgYywgZCkKLSNkZWZpbmUg
Q0tfUklOR19UUllERVFVRVVFX01QTUMobmFtZSwgYSwgYiwgYykJCVwKLQlja19yaW5nX3RyeWRl
cXVldWVfbXBtY18jI25hbWUoYSwgYiwgYykKLSNkZWZpbmUgQ0tfUklOR19ERVFVRVVFX01QTUMo
bmFtZSwgYSwgYiwgYykJCVwKLQlja19yaW5nX2RlcXVldWVfbXBtY18jI25hbWUoYSwgYiwgYykK
LQotI2VuZGlmIC8qIENLX1JJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19yd2NvaG9ydC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19yd2NvaG9ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3NTE5YjVkYzEzOTVmYmUwOTU0NWU1NWNkYzkyNTc0ZTQxM2MwMWZjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfcndjb2hvcnQuaAorKysgL2Rldi9udWxsCkBA
IC0xLDMxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTMtMjAxNSBTYW15IEFsIEJhaHJh
LgotICogQ29weXJpZ2h0IDIwMTMgQnJlbmRvbiBTY2hlaW5tYW4uCi0gKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgQ0tfUldDT0hPUlRfSAotI2RlZmluZSBDS19SV0NPSE9SVF9I
Ci0KLS8qCi0gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIE5VTUEtYXdhcmUgcmVhZGVy
LXdyaXRlciBsb2NrcyBhcyBkZXNjcmliZWQgaW46Ci0gKiAgICAgQ2FsY2l1LCBJLjsgRGljZSwg
RC47IExldiwgWS47IEx1Y2hhbmdjbywgVi47IE1hcmF0aGUsIFYuOyBhbmQgU2hhdml0LCBOLiAy
MDE0LgotICogICAgIE5VTUEtQXdhcmUgUmVhZGVyLVdyaXRlciBMb2NrcwotICovCi0KLSNpbmNs
dWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNrX3ByLmg+Ci0jaW5jbHVkZSA8Y2tfc3RkZGVmLmg+
Ci0jaW5jbHVkZSA8Y2tfY29ob3J0Lmg+Ci0KLSNkZWZpbmUgQ0tfUldDT0hPUlRfV1BfTkFNRShO
KSBja19yd2NvaG9ydF93cF8jI04KLSNkZWZpbmUgQ0tfUldDT0hPUlRfV1BfSU5TVEFOQ0UoTikg
c3RydWN0IENLX1JXQ09IT1JUX1dQX05BTUUoTikKLSNkZWZpbmUgQ0tfUldDT0hPUlRfV1BfSU5J
VChOLCBSVywgV0wpIGNrX3J3Y29ob3J0X3dwXyMjTiMjX2luaXQoUlcsIFdMKQotI2RlZmluZSBD
S19SV0NPSE9SVF9XUF9SRUFEX0xPQ0soTiwgUlcsIEMsIEdDLCBMQykJXAotCWNrX3J3Y29ob3J0
X3dwXyMjTiMjX3JlYWRfbG9jayhSVywgQywgR0MsIExDKQotI2RlZmluZSBDS19SV0NPSE9SVF9X
UF9SRUFEX1VOTE9DSyhOLCBSVywgQywgR0MsIExDKQlcCi0JY2tfcndjb2hvcnRfd3BfIyNOIyNf
cmVhZF91bmxvY2soUlcpCi0jZGVmaW5lIENLX1JXQ09IT1JUX1dQX1dSSVRFX0xPQ0soTiwgUlcs
IEMsIEdDLCBMQykJXAotCWNrX3J3Y29ob3J0X3dwXyMjTiMjX3dyaXRlX2xvY2soUlcsIEMsIEdD
LCBMQykKLSNkZWZpbmUgQ0tfUldDT0hPUlRfV1BfV1JJVEVfVU5MT0NLKE4sIFJXLCBDLCBHQywg
TEMpCVwKLQlja19yd2NvaG9ydF93cF8jI04jI193cml0ZV91bmxvY2soUlcsIEMsIEdDLCBMQykK
LSNkZWZpbmUgQ0tfUldDT0hPUlRfV1BfREVGQVVMVF9XQUlUX0xJTUlUIDEwMDAKLQotI2RlZmlu
ZSBDS19SV0NPSE9SVF9XUF9QUk9UT1RZUEUoTikJCQkJCQkJXAotCUNLX1JXQ09IT1JUX1dQX0lO
U1RBTkNFKE4pIHsJCQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgcmVhZF9jb3VudGVyOwkJCQkJCVwK
LQkJdW5zaWduZWQgaW50IHdyaXRlX2JhcnJpZXI7CQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgd2Fp
dF9saW1pdDsJCQkJCQlcCi0JfTsJCQkJCQkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9p
ZAkJCQkJCQlcCi0JY2tfcndjb2hvcnRfd3BfIyNOIyNfaW5pdChDS19SV0NPSE9SVF9XUF9JTlNU
QU5DRShOKSAqcndfY29ob3J0LAkJXAotCSAgICB1bnNpZ25lZCBpbnQgd2FpdF9saW1pdCkJCQkJ
CQkJXAotCXsJCQkJCQkJCQkJXAotCQkJCQkJCQkJCQlcCi0JCXJ3X2NvaG9ydC0+cmVhZF9jb3Vu
dGVyID0gMDsJCQkJCQlcCi0JCXJ3X2NvaG9ydC0+d3JpdGVfYmFycmllciA9IDA7CQkJCQkJXAot
CQlyd19jb2hvcnQtPndhaXRfbGltaXQgPSB3YWl0X2xpbWl0OwkJCQkJXAotCQlja19wcl9iYXJy
aWVyKCk7CQkJCQkJCVwKLQkJcmV0dXJuOwkJCQkJCQkJCVwKLQl9CQkJCQkJCQkJCVwKLQlDS19D
Q19JTkxJTkUgc3RhdGljIHZvaWQJCQkJCQkJXAotCWNrX3J3Y29ob3J0X3dwXyMjTiMjX3dyaXRl
X2xvY2soQ0tfUldDT0hPUlRfV1BfSU5TVEFOQ0UoTikgKnJ3X2NvaG9ydCwJCVwKLQkgICAgQ0tf
Q09IT1JUX0lOU1RBTkNFKE4pICpjb2hvcnQsIHZvaWQgKmdsb2JhbF9jb250ZXh0LAkJCVwKLQkg
ICAgdm9pZCAqbG9jYWxfY29udGV4dCkJCQkJCQkJXAotCXsJCQkJCQkJCQkJXAotCQkJCQkJCQkJ
CQlcCi0JCXdoaWxlIChja19wcl9sb2FkX3VpbnQoJnJ3X2NvaG9ydC0+d3JpdGVfYmFycmllcikg
PiAwKQkJCVwKLQkJCWNrX3ByX3N0YWxsKCk7CQkJCQkJCVwKLQkJCQkJCQkJCQkJXAotCQlDS19D
T0hPUlRfTE9DSyhOLCBjb2hvcnQsIGdsb2JhbF9jb250ZXh0LCBsb2NhbF9jb250ZXh0KTsJCVwK
LQkJCQkJCQkJCQkJXAotCQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZyd19jb2hvcnQtPnJlYWRf
Y291bnRlcikgPiAwKSAJCQlcCi0JCQlja19wcl9zdGFsbCgpOwkJCQkJCQlcCi0JCQkJCQkJCQkJ
CVwKLQkJcmV0dXJuOwkJCQkJCQkJCVwKLQl9CQkJCQkJCQkJCVwKLQlDS19DQ19JTkxJTkUgc3Rh
dGljIHZvaWQJCQkJCQkJXAotCWNrX3J3Y29ob3J0X3dwXyMjTiMjX3dyaXRlX3VubG9jayhDS19S
V0NPSE9SVF9XUF9JTlNUQU5DRShOKSAqcndfY29ob3J0LAlcCi0JICAgIENLX0NPSE9SVF9JTlNU
QU5DRShOKSAqY29ob3J0LCB2b2lkICpnbG9iYWxfY29udGV4dCwJCQlcCi0JICAgIHZvaWQgKmxv
Y2FsX2NvbnRleHQpCQkJCQkJCVwKLQl7CQkJCQkJCQkJCVwKLQkJCQkJCQkJCQkJXAotCQkodm9p
ZClyd19jb2hvcnQ7CQkJCQkJCVwKLQkJQ0tfQ09IT1JUX1VOTE9DSyhOLCBjb2hvcnQsIGdsb2Jh
bF9jb250ZXh0LCBsb2NhbF9jb250ZXh0KTsJCVwKLQkJcmV0dXJuOwkJCQkJCQkJCVwKLQl9CQkJ
CQkJCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIHZvaWQJCQkJCQkJXAotCWNrX3J3Y29ob3J0
X3dwXyMjTiMjX3JlYWRfbG9jayhDS19SV0NPSE9SVF9XUF9JTlNUQU5DRShOKSAqcndfY29ob3J0
LAkJXAotCSAgICBDS19DT0hPUlRfSU5TVEFOQ0UoTikgKmNvaG9ydCwgdm9pZCAqZ2xvYmFsX2Nv
bnRleHQsCQkJXAotCSAgICB2b2lkICpsb2NhbF9jb250ZXh0KQkJCQkJCQlcCi0JewkJCQkJCQkJ
CQlcCi0JCXVuc2lnbmVkIGludCB3YWl0X2NvdW50ID0gMDsJCQkJCQlcCi0JCWJvb2wgcmFpc2Vk
ID0gZmFsc2U7CQkJCQkJCVwKLQkJCQkJCQkJCQkJXAotCQlmb3IgKDs7KSB7CQkJCQkJCQlcCi0J
CQlja19wcl9pbmNfdWludCgmcndfY29ob3J0LT5yZWFkX2NvdW50ZXIpOwkJCVwKLQkJCWNrX3By
X2ZlbmNlX2F0b21pY19sb2FkKCk7CQkJCQlcCi0JCQlpZiAoQ0tfQ09IT1JUX0xPQ0tFRChOLCBj
b2hvcnQsIGdsb2JhbF9jb250ZXh0LAkJCVwKLQkJCSAgICBsb2NhbF9jb250ZXh0KSA9PSBmYWxz
ZSkJCQkJCVwKLQkJCQlicmVhazsJCQkJCQkJXAotCQkJCQkJCQkJCQlcCi0JCQlja19wcl9kZWNf
dWludCgmcndfY29ob3J0LT5yZWFkX2NvdW50ZXIpOwkJCVwKLQkJCXdoaWxlIChDS19DT0hPUlRf
TE9DS0VEKE4sIGNvaG9ydCwgZ2xvYmFsX2NvbnRleHQsCQlcCi0JCQkgICAgbG9jYWxfY29udGV4
dCkgPT0gdHJ1ZSkgewkJCQkJXAotCQkJCWNrX3ByX3N0YWxsKCk7CQkJCQkJXAotCQkJCWlmICgr
K3dhaXRfY291bnQgPiByd19jb2hvcnQtPndhaXRfbGltaXQgJiYJCVwKLQkJCQkgICAgcmFpc2Vk
ID09IGZhbHNlKSB7CQkJCQlcCi0JCQkJCWNrX3ByX2luY191aW50KCZyd19jb2hvcnQtPndyaXRl
X2JhcnJpZXIpOwlcCi0JCQkJCXJhaXNlZCA9IHRydWU7CQkJCQlcCi0JCQkJfQkJCQkJCQlcCi0J
CQl9CQkJCQkJCQlcCi0JCX0JCQkJCQkJCQlcCi0JCQkJCQkJCQkJCVwKLQkJaWYgKHJhaXNlZCA9
PSB0cnVlKQkJCQkJCQlcCi0JCQlja19wcl9kZWNfdWludCgmcndfY29ob3J0LT53cml0ZV9iYXJy
aWVyKTsJCQlcCi0JCQkJCQkJCQkJCVwKLQkJY2tfcHJfZmVuY2VfbG9hZCgpOwkJCQkJCQlcCi0J
CXJldHVybjsJCQkJCQkJCQlcCi0JfQkJCQkJCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2
b2lkCQkJCQkJCVwKLQlja19yd2NvaG9ydF93cF8jI04jI19yZWFkX3VubG9jayhDS19SV0NPSE9S
VF9XUF9JTlNUQU5DRShOKSAqY29ob3J0KQkJXAotCXsJCQkJCQkJCQkJXAotCQkJCQkJCQkJCQlc
Ci0JCWNrX3ByX2ZlbmNlX2xvYWRfYXRvbWljKCk7CQkJCQkJXAotCQlja19wcl9kZWNfdWludCgm
Y29ob3J0LT5yZWFkX2NvdW50ZXIpOwkJCQkJXAotCQlyZXR1cm47CQkJCQkJCQkJXAotCX0KLQot
I2RlZmluZSBDS19SV0NPSE9SVF9XUF9JTklUSUFMSVpFUiB7CQkJCQkJCVwKLQkucmVhZF9jb3Vu
dGVyID0gMCwJCQkJCQkJCVwKLQkud3JpdGVfYmFycmllciA9IDAsCQkJCQkJCQlcCi0JLndhaXRf
bGltaXQgPSAwCQkJCQkJCQkJXAotfQotCi0jZGVmaW5lIENLX1JXQ09IT1JUX1JQX05BTUUoTikg
Y2tfcndjb2hvcnRfcnBfIyNOCi0jZGVmaW5lIENLX1JXQ09IT1JUX1JQX0lOU1RBTkNFKE4pIHN0
cnVjdCBDS19SV0NPSE9SVF9SUF9OQU1FKE4pCi0jZGVmaW5lIENLX1JXQ09IT1JUX1JQX0lOSVQo
TiwgUlcsIFdMKSBja19yd2NvaG9ydF9ycF8jI04jI19pbml0KFJXLCBXTCkKLSNkZWZpbmUgQ0tf
UldDT0hPUlRfUlBfUkVBRF9MT0NLKE4sIFJXLCBDLCBHQywgTEMpCVwKLQlja19yd2NvaG9ydF9y
cF8jI04jI19yZWFkX2xvY2soUlcsIEMsIEdDLCBMQykKLSNkZWZpbmUgQ0tfUldDT0hPUlRfUlBf
UkVBRF9VTkxPQ0soTiwgUlcsIEMsIEdDLCBMQykJXAotCWNrX3J3Y29ob3J0X3JwXyMjTiMjX3Jl
YWRfdW5sb2NrKFJXKQotI2RlZmluZSBDS19SV0NPSE9SVF9SUF9XUklURV9MT0NLKE4sIFJXLCBD
LCBHQywgTEMpCVwKLQlja19yd2NvaG9ydF9ycF8jI04jI193cml0ZV9sb2NrKFJXLCBDLCBHQywg
TEMpCi0jZGVmaW5lIENLX1JXQ09IT1JUX1JQX1dSSVRFX1VOTE9DSyhOLCBSVywgQywgR0MsIExD
KQlcCi0JY2tfcndjb2hvcnRfcnBfIyNOIyNfd3JpdGVfdW5sb2NrKFJXLCBDLCBHQywgTEMpCi0j
ZGVmaW5lIENLX1JXQ09IT1JUX1JQX0RFRkFVTFRfV0FJVF9MSU1JVCAxMDAwCi0KLSNkZWZpbmUg
Q0tfUldDT0hPUlRfUlBfUFJPVE9UWVBFKE4pCQkJCQkJCVwKLQlDS19SV0NPSE9SVF9SUF9JTlNU
QU5DRShOKSB7CQkJCQkJCVwKLQkJdW5zaWduZWQgaW50IHJlYWRfY291bnRlcjsJCQkJCQlcCi0J
CXVuc2lnbmVkIGludCByZWFkX2JhcnJpZXI7CQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgd2FpdF9s
aW1pdDsJCQkJCQlcCi0JfTsJCQkJCQkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJ
CQkJCQlcCi0JY2tfcndjb2hvcnRfcnBfIyNOIyNfaW5pdChDS19SV0NPSE9SVF9SUF9JTlNUQU5D
RShOKSAqcndfY29ob3J0LAkJXAotCSAgICB1bnNpZ25lZCBpbnQgd2FpdF9saW1pdCkJCQkJCQkJ
XAotCXsJCQkJCQkJCQkJXAotCQkJCQkJCQkJCQlcCi0JCXJ3X2NvaG9ydC0+cmVhZF9jb3VudGVy
ID0gMDsJCQkJCQlcCi0JCXJ3X2NvaG9ydC0+cmVhZF9iYXJyaWVyID0gMDsJCQkJCQlcCi0JCXJ3
X2NvaG9ydC0+d2FpdF9saW1pdCA9IHdhaXRfbGltaXQ7CQkJCQlcCi0JCWNrX3ByX2JhcnJpZXIo
KTsJCQkJCQkJXAotCQlyZXR1cm47CQkJCQkJCQkJXAotCX0JCQkJCQkJCQkJXAotCUNLX0NDX0lO
TElORSBzdGF0aWMgdm9pZAkJCQkJCQlcCi0JY2tfcndjb2hvcnRfcnBfIyNOIyNfd3JpdGVfbG9j
ayhDS19SV0NPSE9SVF9SUF9JTlNUQU5DRShOKSAqcndfY29ob3J0LAkJXAotCSAgICBDS19DT0hP
UlRfSU5TVEFOQ0UoTikgKmNvaG9ydCwgdm9pZCAqZ2xvYmFsX2NvbnRleHQsCQkJXAotCSAgICB2
b2lkICpsb2NhbF9jb250ZXh0KQkJCQkJCQlcCi0JewkJCQkJCQkJCQlcCi0JCXVuc2lnbmVkIGlu
dCB3YWl0X2NvdW50ID0gMDsJCQkJCQlcCi0JCWJvb2wgcmFpc2VkID0gZmFsc2U7CQkJCQkJCVwK
LQkJCQkJCQkJCQkJXAotCQlmb3IgKDs7KSB7CQkJCQkJCQlcCi0JCQlDS19DT0hPUlRfTE9DSyhO
LCBjb2hvcnQsIGdsb2JhbF9jb250ZXh0LCBsb2NhbF9jb250ZXh0KTsJXAotCQkJaWYgKGNrX3By
X2xvYWRfdWludCgmcndfY29ob3J0LT5yZWFkX2NvdW50ZXIpID09IDApCQlcCi0JCQkJYnJlYWs7
CQkJCQkJCVwKLQkJCQkJCQkJCQkJXAotCQkJQ0tfQ09IT1JUX1VOTE9DSyhOLCBjb2hvcnQsIGds
b2JhbF9jb250ZXh0LCBsb2NhbF9jb250ZXh0KTsJXAotCQkJd2hpbGUgKGNrX3ByX2xvYWRfdWlu
dCgmcndfY29ob3J0LT5yZWFkX2NvdW50ZXIpID4gMCkgewkJXAotCQkJCWNrX3ByX3N0YWxsKCk7
CQkJCQkJXAotCQkJCWlmICgrK3dhaXRfY291bnQgPiByd19jb2hvcnQtPndhaXRfbGltaXQgJiYJ
CVwKLQkJCQkgICAgcmFpc2VkID09IGZhbHNlKSB7CQkJCQlcCi0JCQkJCWNrX3ByX2luY191aW50
KCZyd19jb2hvcnQtPnJlYWRfYmFycmllcik7CVwKLQkJCQkJcmFpc2VkID0gdHJ1ZTsJCQkJCVwK
LQkJCQl9CQkJCQkJCVwKLQkJCX0JCQkJCQkJCVwKLQkJfQkJCQkJCQkJCVwKLQkJCQkJCQkJCQkJ
XAotCQlpZiAocmFpc2VkID09IHRydWUpCQkJCQkJCVwKLQkJCWNrX3ByX2RlY191aW50KCZyd19j
b2hvcnQtPnJlYWRfYmFycmllcik7CQkJXAotCQkJCQkJCQkJCQlcCi0JCXJldHVybjsJCQkJCQkJ
CQlcCi0JfQkJCQkJCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJCQkJCVwKLQlj
a19yd2NvaG9ydF9ycF8jI04jI193cml0ZV91bmxvY2soQ0tfUldDT0hPUlRfUlBfSU5TVEFOQ0Uo
TikgKnJ3X2NvaG9ydCwJXAotCSAgICBDS19DT0hPUlRfSU5TVEFOQ0UoTikgKmNvaG9ydCwgdm9p
ZCAqZ2xvYmFsX2NvbnRleHQsIHZvaWQgKmxvY2FsX2NvbnRleHQpCVwKLQl7CQkJCQkJCQkJCVwK
LQkJCQkJCQkJCQkJXAotCQkodm9pZClyd19jb2hvcnQ7CQkJCQkJCVwKLQkJQ0tfQ09IT1JUX1VO
TE9DSyhOLCBjb2hvcnQsIGdsb2JhbF9jb250ZXh0LCBsb2NhbF9jb250ZXh0KTsJCVwKLQkJcmV0
dXJuOwkJCQkJCQkJCVwKLQl9CQkJCQkJCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIHZvaWQJ
CQkJCQkJXAotCWNrX3J3Y29ob3J0X3JwXyMjTiMjX3JlYWRfbG9jayhDS19SV0NPSE9SVF9SUF9J
TlNUQU5DRShOKSAqcndfY29ob3J0LAkJXAotCSAgICBDS19DT0hPUlRfSU5TVEFOQ0UoTikgKmNv
aG9ydCwgdm9pZCAqZ2xvYmFsX2NvbnRleHQsCQkJXAotCSAgICB2b2lkICpsb2NhbF9jb250ZXh0
KQkJCQkJCQlcCi0JewkJCQkJCQkJCQlcCi0JCQkJCQkJCQkJCVwKLQkJd2hpbGUgKGNrX3ByX2xv
YWRfdWludCgmcndfY29ob3J0LT5yZWFkX2JhcnJpZXIpID4gMCkJCQlcCi0JCQlja19wcl9zdGFs
bCgpOwkJCQkJCQlcCi0JCQkJCQkJCQkJCVwKLQkJY2tfcHJfaW5jX3VpbnQoJnJ3X2NvaG9ydC0+
cmVhZF9jb3VudGVyKTsJCQkJXAotCQlja19wcl9mZW5jZV9hdG9taWNfbG9hZCgpOwkJCQkJCVwK
LQkJCQkJCQkJCQkJXAotCQl3aGlsZSAoQ0tfQ09IT1JUX0xPQ0tFRChOLCBjb2hvcnQsIGdsb2Jh
bF9jb250ZXh0LAkJCVwKLQkJICAgIGxvY2FsX2NvbnRleHQpID09IHRydWUpCQkJCQkJXAotCQkJ
Y2tfcHJfc3RhbGwoKTsJCQkJCQkJXAotCQkJCQkJCQkJCQlcCi0JCXJldHVybjsJCQkJCQkJCQlc
Ci0JfQkJCQkJCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJCQkJCVwKLQlja19y
d2NvaG9ydF9ycF8jI04jI19yZWFkX3VubG9jayhDS19SV0NPSE9SVF9SUF9JTlNUQU5DRShOKSAq
Y29ob3J0KQkJXAotCXsJCQkJCQkJCQkJXAotCQkJCQkJCQkJCQlcCi0JCWNrX3ByX2ZlbmNlX2xv
YWRfYXRvbWljKCk7CQkJCQkJXAotCQlja19wcl9kZWNfdWludCgmY29ob3J0LT5yZWFkX2NvdW50
ZXIpOwkJCQkJXAotCQlyZXR1cm47CQkJCQkJCQkJXAotCX0KLQotI2RlZmluZSBDS19SV0NPSE9S
VF9SUF9JTklUSUFMSVpFUiB7CQkJCQkJCVwKLQkucmVhZF9jb3VudGVyID0gMCwJCQkJCQkJCVwK
LQkucmVhZF9iYXJyaWVyID0gMCwJCQkJCQkJCVwKLQkud2FpdF9saW1pdCA9IDAJCQkJCQkJCQlc
Ci19Ci0KLSNkZWZpbmUgQ0tfUldDT0hPUlRfTkVVVFJBTF9OQU1FKE4pIGNrX3J3Y29ob3J0X25l
dXRyYWxfIyNOCi0jZGVmaW5lIENLX1JXQ09IT1JUX05FVVRSQUxfSU5TVEFOQ0UoTikgc3RydWN0
IENLX1JXQ09IT1JUX05FVVRSQUxfTkFNRShOKQotI2RlZmluZSBDS19SV0NPSE9SVF9ORVVUUkFM
X0lOSVQoTiwgUlcpIGNrX3J3Y29ob3J0X25ldXRyYWxfIyNOIyNfaW5pdChSVykKLSNkZWZpbmUg
Q0tfUldDT0hPUlRfTkVVVFJBTF9SRUFEX0xPQ0soTiwgUlcsIEMsIEdDLCBMQykJCVwKLQlja19y
d2NvaG9ydF9uZXV0cmFsXyMjTiMjX3JlYWRfbG9jayhSVywgQywgR0MsIExDKQotI2RlZmluZSBD
S19SV0NPSE9SVF9ORVVUUkFMX1JFQURfVU5MT0NLKE4sIFJXLCBDLCBHQywgTEMpCVwKLQlja19y
d2NvaG9ydF9uZXV0cmFsXyMjTiMjX3JlYWRfdW5sb2NrKFJXKQotI2RlZmluZSBDS19SV0NPSE9S
VF9ORVVUUkFMX1dSSVRFX0xPQ0soTiwgUlcsIEMsIEdDLCBMQykJXAotCWNrX3J3Y29ob3J0X25l
dXRyYWxfIyNOIyNfd3JpdGVfbG9jayhSVywgQywgR0MsIExDKQotI2RlZmluZSBDS19SV0NPSE9S
VF9ORVVUUkFMX1dSSVRFX1VOTE9DSyhOLCBSVywgQywgR0MsIExDKQlcCi0JY2tfcndjb2hvcnRf
bmV1dHJhbF8jI04jI193cml0ZV91bmxvY2soUlcsIEMsIEdDLCBMQykKLSNkZWZpbmUgQ0tfUldD
T0hPUlRfTkVVVFJBTF9ERUZBVUxUX1dBSVRfTElNSVQgMTAwMAotCi0jZGVmaW5lIENLX1JXQ09I
T1JUX05FVVRSQUxfUFJPVE9UWVBFKE4pCQkJCQkJXAotCUNLX1JXQ09IT1JUX05FVVRSQUxfSU5T
VEFOQ0UoTikgewkJCQkJCVwKLQkJdW5zaWduZWQgaW50IHJlYWRfY291bnRlcjsJCQkJCQlcCi0J
fTsJCQkJCQkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCQkJCQlcCi0JY2tfcndj
b2hvcnRfbmV1dHJhbF8jI04jI19pbml0KENLX1JXQ09IT1JUX05FVVRSQUxfSU5TVEFOQ0UoTikg
KnJ3X2NvaG9ydCkJXAotCXsJCQkJCQkJCQkJXAotCQkJCQkJCQkJCQlcCi0JCXJ3X2NvaG9ydC0+
cmVhZF9jb3VudGVyID0gMDsJCQkJCQlcCi0JCWNrX3ByX2JhcnJpZXIoKTsJCQkJCQkJXAotCQly
ZXR1cm47CQkJCQkJCQkJXAotCX0JCQkJCQkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9p
ZAkJCQkJCQlcCi0JY2tfcndjb2hvcnRfbmV1dHJhbF8jI04jI193cml0ZV9sb2NrKENLX1JXQ09I
T1JUX05FVVRSQUxfSU5TVEFOQ0UoTikgKnJ3X2NvaG9ydCxcCi0JICAgIENLX0NPSE9SVF9JTlNU
QU5DRShOKSAqY29ob3J0LCB2b2lkICpnbG9iYWxfY29udGV4dCwJCQlcCi0JICAgIHZvaWQgKmxv
Y2FsX2NvbnRleHQpCQkJCQkJCVwKLQl7CQkJCQkJCQkJCVwKLQkJCQkJCQkJCQkJXAotCQlDS19D
T0hPUlRfTE9DSyhOLCBjb2hvcnQsIGdsb2JhbF9jb250ZXh0LCBsb2NhbF9jb250ZXh0KTsJCVwK
LQkJd2hpbGUgKGNrX3ByX2xvYWRfdWludCgmcndfY29ob3J0LT5yZWFkX2NvdW50ZXIpID4gMCkg
ewkJCVwKLQkJCWNrX3ByX3N0YWxsKCk7CQkJCQkJCVwKLQkJfQkJCQkJCQkJCVwKLQkJcmV0dXJu
OwkJCQkJCQkJCVwKLQl9CQkJCQkJCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIHZvaWQJCQkJ
CQkJXAotCWNrX3J3Y29ob3J0X25ldXRyYWxfIyNOIyNfd3JpdGVfdW5sb2NrKENLX1JXQ09IT1JU
X05FVVRSQUxfSU5TVEFOQ0UoTikgKnJ3X2NvaG9ydCxcCi0JICAgIENLX0NPSE9SVF9JTlNUQU5D
RShOKSAqY29ob3J0LCB2b2lkICpnbG9iYWxfY29udGV4dCwgdm9pZCAqbG9jYWxfY29udGV4dCkJ
XAotCXsJCQkJCQkJCQkJXAotCQkJCQkJCQkJCQlcCi0JCSh2b2lkKXJ3X2NvaG9ydDsJCQkJCQkJ
XAotCQlDS19DT0hPUlRfVU5MT0NLKE4sIGNvaG9ydCwgZ2xvYmFsX2NvbnRleHQsIGxvY2FsX2Nv
bnRleHQpOwkJXAotCQlyZXR1cm47CQkJCQkJCQkJXAotCX0JCQkJCQkJCQkJXAotCUNLX0NDX0lO
TElORSBzdGF0aWMgdm9pZAkJCQkJCQlcCi0JY2tfcndjb2hvcnRfbmV1dHJhbF8jI04jI19yZWFk
X2xvY2soQ0tfUldDT0hPUlRfTkVVVFJBTF9JTlNUQU5DRShOKSAqcndfY29ob3J0LAlcCi0JICAg
IENLX0NPSE9SVF9JTlNUQU5DRShOKSAqY29ob3J0LCB2b2lkICpnbG9iYWxfY29udGV4dCwJCQlc
Ci0JICAgIHZvaWQgKmxvY2FsX2NvbnRleHQpCQkJCQkJCVwKLQl7CQkJCQkJCQkJCVwKLQkJCQkJ
CQkJCQkJXAotCQlDS19DT0hPUlRfTE9DSyhOLCBjb2hvcnQsIGdsb2JhbF9jb250ZXh0LCBsb2Nh
bF9jb250ZXh0KTsJCVwKLQkJY2tfcHJfaW5jX3VpbnQoJnJ3X2NvaG9ydC0+cmVhZF9jb3VudGVy
KTsJCQkJXAotCQlDS19DT0hPUlRfVU5MT0NLKE4sIGNvaG9ydCwgZ2xvYmFsX2NvbnRleHQsIGxv
Y2FsX2NvbnRleHQpOwkJXAotCQlyZXR1cm47CQkJCQkJCQkJXAotCX0JCQkJCQkJCQkJXAotCUNL
X0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCQkJCQlcCi0JY2tfcndjb2hvcnRfbmV1dHJhbF8jI04j
I19yZWFkX3VubG9jayhDS19SV0NPSE9SVF9ORVVUUkFMX0lOU1RBTkNFKE4pICpjb2hvcnQpCVwK
LQl7CQkJCQkJCQkJCVwKLQkJCQkJCQkJCQkJXAotCQlja19wcl9mZW5jZV9sb2FkX2F0b21pYygp
OwkJCQkJCVwKLQkJY2tfcHJfZGVjX3VpbnQoJmNvaG9ydC0+cmVhZF9jb3VudGVyKTsJCQkJCVwK
LQkJcmV0dXJuOwkJCQkJCQkJCVwKLQl9Ci0KLSNkZWZpbmUgQ0tfUldDT0hPUlRfTkVVVFJBTF9J
TklUSUFMSVpFUiB7CQkJCQkJXAotCS5yZWFkX2NvdW50ZXIgPSAwLAkJCQkJCQkJXAotfQotCi0j
ZW5kaWYgLyogQ0tfUldDT0hPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19yd2xvY2suaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfcndsb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGI4MmI0YjU5Nzk5MjRjYTU0N2NmZmU4NDM0ZDdkMDZhNTY0Njk0ZTMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19yd2xvY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDMw
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEtMjAxNSBTYW15IEFsIEJhaHJhLgotICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICog
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAq
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
Ci0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENLX1JXTE9DS19ICi0jZGVmaW5lIENL
X1JXTE9DS19ICi0KLSNpbmNsdWRlIDxja19lbGlkZS5oPgotI2luY2x1ZGUgPGNrX3ByLmg+Ci0j
aW5jbHVkZSA8Y2tfc3RkYm9vbC5oPgotI2luY2x1ZGUgPGNrX3N0ZGRlZi5oPgotCi1zdHJ1Y3Qg
Y2tfcndsb2NrIHsKLQl1bnNpZ25lZCBpbnQgd3JpdGVyOwotCXVuc2lnbmVkIGludCBuX3JlYWRl
cnM7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tfcndsb2NrIGNrX3J3bG9ja190OwotCi0jZGVmaW5l
IENLX1JXTE9DS19JTklUSUFMSVpFUiB7MCwgMH0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lk
Ci1ja19yd2xvY2tfaW5pdChzdHJ1Y3QgY2tfcndsb2NrICpydykKLXsKLQotCXJ3LT53cml0ZXIg
PSAwOwotCXJ3LT5uX3JlYWRlcnMgPSAwOwotCWNrX3ByX2JhcnJpZXIoKTsKLQlyZXR1cm47Ci19
Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfcndsb2NrX3dyaXRlX3VubG9jayhja19y
d2xvY2tfdCAqcncpCi17Ci0KLQlja19wcl9mZW5jZV91bmxvY2soKTsKLQlja19wcl9zdG9yZV91
aW50KCZydy0+d3JpdGVyLCAwKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMg
Ym9vbAotY2tfcndsb2NrX2xvY2tlZF93cml0ZXIoY2tfcndsb2NrX3QgKnJ3KQotewotCWJvb2wg
cjsKLQotCXIgPSBja19wcl9sb2FkX3VpbnQoJnJ3LT53cml0ZXIpOwotCWNrX3ByX2ZlbmNlX2Fj
cXVpcmUoKTsKLQlyZXR1cm4gcjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19y
d2xvY2tfd3JpdGVfZG93bmdyYWRlKGNrX3J3bG9ja190ICpydykKLXsKLQotCWNrX3ByX2luY191
aW50KCZydy0+bl9yZWFkZXJzKTsKLQlja19yd2xvY2tfd3JpdGVfdW5sb2NrKHJ3KTsKLQlyZXR1
cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfcndsb2NrX2xvY2tlZChja19y
d2xvY2tfdCAqcncpCi17Ci0JYm9vbCBsOwotCi0JbCA9IGNrX3ByX2xvYWRfdWludCgmcnctPm5f
cmVhZGVycykgfAotCSAgICBja19wcl9sb2FkX3VpbnQoJnJ3LT53cml0ZXIpOwotCWNrX3ByX2Zl
bmNlX2FjcXVpcmUoKTsKLQlyZXR1cm4gbDsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29s
Ci1ja19yd2xvY2tfd3JpdGVfdHJ5bG9jayhja19yd2xvY2tfdCAqcncpCi17Ci0KLQlpZiAoY2tf
cHJfZmFzX3VpbnQoJnJ3LT53cml0ZXIsIDEpICE9IDApCi0JCXJldHVybiBmYWxzZTsKLQotCWNr
X3ByX2ZlbmNlX2F0b21pY19sb2FkKCk7Ci0KLQlpZiAoY2tfcHJfbG9hZF91aW50KCZydy0+bl9y
ZWFkZXJzKSAhPSAwKSB7Ci0JCWNrX3J3bG9ja193cml0ZV91bmxvY2socncpOwotCQlyZXR1cm4g
ZmFsc2U7Ci0JfQotCi0JY2tfcHJfZmVuY2VfbG9jaygpOwotCXJldHVybiB0cnVlOwotfQotCi1D
S19FTElERV9UUllMT0NLX1BST1RPVFlQRShja19yd2xvY2tfd3JpdGUsIGNrX3J3bG9ja190LAot
ICAgIGNrX3J3bG9ja19sb2NrZWQsIGNrX3J3bG9ja193cml0ZV90cnlsb2NrKQotCi1DS19DQ19J
TkxJTkUgc3RhdGljIHZvaWQKLWNrX3J3bG9ja193cml0ZV9sb2NrKGNrX3J3bG9ja190ICpydykK
LXsKLQotCXdoaWxlIChja19wcl9mYXNfdWludCgmcnctPndyaXRlciwgMSkgIT0gMCkKLQkJY2tf
cHJfc3RhbGwoKTsKLQotCWNrX3ByX2ZlbmNlX2F0b21pY19sb2FkKCk7Ci0KLQl3aGlsZSAoY2tf
cHJfbG9hZF91aW50KCZydy0+bl9yZWFkZXJzKSAhPSAwKQotCQlja19wcl9zdGFsbCgpOwotCi0J
Y2tfcHJfZmVuY2VfbG9jaygpOwotCXJldHVybjsKLX0KLQotQ0tfRUxJREVfUFJPVE9UWVBFKGNr
X3J3bG9ja193cml0ZSwgY2tfcndsb2NrX3QsCi0gICAgY2tfcndsb2NrX2xvY2tlZCwgY2tfcnds
b2NrX3dyaXRlX2xvY2ssCi0gICAgY2tfcndsb2NrX2xvY2tlZF93cml0ZXIsIGNrX3J3bG9ja193
cml0ZV91bmxvY2spCi0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfcndsb2NrX3JlYWRf
dHJ5bG9jayhja19yd2xvY2tfdCAqcncpCi17Ci0KLQlpZiAoY2tfcHJfbG9hZF91aW50KCZydy0+
d3JpdGVyKSAhPSAwKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlja19wcl9pbmNfdWludCgmcnctPm5f
cmVhZGVycyk7Ci0KLQkvKgotCSAqIFNlcmlhbGl6ZSB3aXRoIHJlc3BlY3QgdG8gY29uY3VycmVu
dCB3cml0ZQotCSAqIGxvY2sgb3BlcmF0aW9uLgotCSAqLwotCWNrX3ByX2ZlbmNlX2F0b21pY19s
b2FkKCk7Ci0KLQlpZiAoY2tfcHJfbG9hZF91aW50KCZydy0+d3JpdGVyKSA9PSAwKSB7Ci0JCWNr
X3ByX2ZlbmNlX2xvY2soKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JY2tfcHJfZGVjX3VpbnQo
JnJ3LT5uX3JlYWRlcnMpOwotCXJldHVybiBmYWxzZTsKLX0KLQotQ0tfRUxJREVfVFJZTE9DS19Q
Uk9UT1RZUEUoY2tfcndsb2NrX3JlYWQsIGNrX3J3bG9ja190LAotICAgIGNrX3J3bG9ja19sb2Nr
ZWRfd3JpdGVyLCBja19yd2xvY2tfcmVhZF90cnlsb2NrKQotCi1DS19DQ19JTkxJTkUgc3RhdGlj
IHZvaWQKLWNrX3J3bG9ja19yZWFkX2xvY2soY2tfcndsb2NrX3QgKnJ3KQotewotCi0JZm9yICg7
OykgewotCQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZydy0+d3JpdGVyKSAhPSAwKQotCQkJY2tf
cHJfc3RhbGwoKTsKLQotCQlja19wcl9pbmNfdWludCgmcnctPm5fcmVhZGVycyk7Ci0KLQkJLyoK
LQkJICogU2VyaWFsaXplIHdpdGggcmVzcGVjdCB0byBjb25jdXJyZW50IHdyaXRlCi0JCSAqIGxv
Y2sgb3BlcmF0aW9uLgotCQkgKi8KLQkJY2tfcHJfZmVuY2VfYXRvbWljX2xvYWQoKTsKLQotCQlp
ZiAoY2tfcHJfbG9hZF91aW50KCZydy0+d3JpdGVyKSA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJY2tf
cHJfZGVjX3VpbnQoJnJ3LT5uX3JlYWRlcnMpOwotCX0KLQotCS8qIEFjcXVpcmUgc2VtYW50aWNz
IGFyZSBuZWNlc3NhcnkuICovCi0JY2tfcHJfZmVuY2VfbG9hZCgpOwotCXJldHVybjsKLX0KLQot
Q0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19yd2xvY2tfbG9ja2VkX3JlYWRlcihja19yd2xv
Y2tfdCAqcncpCi17Ci0KLQlja19wcl9mZW5jZV9sb2FkKCk7Ci0JcmV0dXJuIGNrX3ByX2xvYWRf
dWludCgmcnctPm5fcmVhZGVycyk7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tf
cndsb2NrX3JlYWRfdW5sb2NrKGNrX3J3bG9ja190ICpydykKLXsKLQotCWNrX3ByX2ZlbmNlX2xv
YWRfYXRvbWljKCk7Ci0JY2tfcHJfZGVjX3VpbnQoJnJ3LT5uX3JlYWRlcnMpOwotCXJldHVybjsK
LX0KLQotQ0tfRUxJREVfUFJPVE9UWVBFKGNrX3J3bG9ja19yZWFkLCBja19yd2xvY2tfdCwKLSAg
ICBja19yd2xvY2tfbG9ja2VkX3dyaXRlciwgY2tfcndsb2NrX3JlYWRfbG9jaywKLSAgICBja19y
d2xvY2tfbG9ja2VkX3JlYWRlciwgY2tfcndsb2NrX3JlYWRfdW5sb2NrKQotCi0vKgotICogUmVj
dXJzaXZlIHdyaXRlciByZWFkZXItd3JpdGVyIGxvY2sgaW1wbGVtZW50YXRpb24uCi0gKi8KLXN0
cnVjdCBja19yd2xvY2tfcmVjdXJzaXZlIHsKLQlzdHJ1Y3QgY2tfcndsb2NrIHJ3OwotCXVuc2ln
bmVkIGludCB3YzsKLX07Ci10eXBlZGVmIHN0cnVjdCBja19yd2xvY2tfcmVjdXJzaXZlIGNrX3J3
bG9ja19yZWN1cnNpdmVfdDsKLQotI2RlZmluZSBDS19SV0xPQ0tfUkVDVVJTSVZFX0lOSVRJQUxJ
WkVSIHtDS19SV0xPQ0tfSU5JVElBTElaRVIsIDB9Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9p
ZAotY2tfcndsb2NrX3JlY3Vyc2l2ZV93cml0ZV9sb2NrKGNrX3J3bG9ja19yZWN1cnNpdmVfdCAq
cncsIHVuc2lnbmVkIGludCB0aWQpCi17Ci0JdW5zaWduZWQgaW50IG87Ci0KLQlvID0gY2tfcHJf
bG9hZF91aW50KCZydy0+cncud3JpdGVyKTsKLQlpZiAobyA9PSB0aWQpCi0JCWdvdG8gbGVhdmU7
Ci0KLQl3aGlsZSAoY2tfcHJfY2FzX3VpbnQoJnJ3LT5ydy53cml0ZXIsIDAsIHRpZCkgPT0gZmFs
c2UpCi0JCWNrX3ByX3N0YWxsKCk7Ci0KLQlja19wcl9mZW5jZV9hdG9taWNfbG9hZCgpOwotCi0J
d2hpbGUgKGNrX3ByX2xvYWRfdWludCgmcnctPnJ3Lm5fcmVhZGVycykgIT0gMCkKLQkJY2tfcHJf
c3RhbGwoKTsKLQotCWNrX3ByX2ZlbmNlX2xvY2soKTsKLWxlYXZlOgotCXJ3LT53YysrOwotCXJl
dHVybjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19yd2xvY2tfcmVjdXJzaXZl
X3dyaXRlX3RyeWxvY2soY2tfcndsb2NrX3JlY3Vyc2l2ZV90ICpydywgdW5zaWduZWQgaW50IHRp
ZCkKLXsKLQl1bnNpZ25lZCBpbnQgbzsKLQotCW8gPSBja19wcl9sb2FkX3VpbnQoJnJ3LT5ydy53
cml0ZXIpOwotCWlmIChvID09IHRpZCkKLQkJZ290byBsZWF2ZTsKLQotCWlmIChja19wcl9jYXNf
dWludCgmcnctPnJ3LndyaXRlciwgMCwgdGlkKSA9PSBmYWxzZSkKLQkJcmV0dXJuIGZhbHNlOwot
Ci0JY2tfcHJfZmVuY2VfYXRvbWljX2xvYWQoKTsKLQotCWlmIChja19wcl9sb2FkX3VpbnQoJnJ3
LT5ydy5uX3JlYWRlcnMpICE9IDApIHsKLQkJY2tfcHJfc3RvcmVfdWludCgmcnctPnJ3LndyaXRl
ciwgMCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlja19wcl9mZW5jZV9sb2NrKCk7Ci1sZWF2
ZToKLQlydy0+d2MrKzsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2
b2lkCi1ja19yd2xvY2tfcmVjdXJzaXZlX3dyaXRlX3VubG9jayhja19yd2xvY2tfcmVjdXJzaXZl
X3QgKnJ3KQotewotCi0JaWYgKC0tcnctPndjID09IDApIHsKLQkJY2tfcHJfZmVuY2VfdW5sb2Nr
KCk7Ci0JCWNrX3ByX3N0b3JlX3VpbnQoJnJ3LT5ydy53cml0ZXIsIDApOwotCX0KLQotCXJldHVy
bjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19yd2xvY2tfcmVjdXJzaXZlX3Jl
YWRfbG9jayhja19yd2xvY2tfcmVjdXJzaXZlX3QgKnJ3KQotewotCi0JY2tfcndsb2NrX3JlYWRf
bG9jaygmcnctPnJ3KTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAot
Y2tfcndsb2NrX3JlY3Vyc2l2ZV9yZWFkX3RyeWxvY2soY2tfcndsb2NrX3JlY3Vyc2l2ZV90ICpy
dykKLXsKLQotCXJldHVybiBja19yd2xvY2tfcmVhZF90cnlsb2NrKCZydy0+cncpOwotfQotCi1D
S19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3J3bG9ja19yZWN1cnNpdmVfcmVhZF91bmxvY2so
Y2tfcndsb2NrX3JlY3Vyc2l2ZV90ICpydykKLXsKLQotCWNrX3J3bG9ja19yZWFkX3VubG9jaygm
cnctPnJ3KTsKLQlyZXR1cm47Ci19Ci0KLSNlbmRpZiAvKiBDS19SV0xPQ0tfSCAqLwpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19zZXF1ZW5j
ZS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja19zZXF1ZW5j
ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTQ4MmI5ZTY5OTU2OTcyMjUwNTU3
MzFhNzg3NDBhOTVmNGZlMjMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfc2Vx
dWVuY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IDIwMTAtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIENLX1NFUVVFTkNFX0gKLSNkZWZpbmUgQ0tfU0VRVUVOQ0VfSAotCi0jaW5jbHVkZSA8
Y2tfY2MuaD4KLSNpbmNsdWRlIDxja19wci5oPgotI2luY2x1ZGUgPGNrX3N0ZGJvb2wuaD4KLQot
c3RydWN0IGNrX3NlcXVlbmNlIHsKLQl1bnNpZ25lZCBpbnQgc2VxdWVuY2U7Ci19OwotdHlwZWRl
ZiBzdHJ1Y3QgY2tfc2VxdWVuY2UgY2tfc2VxdWVuY2VfdDsKLQotI2RlZmluZSBDS19TRVFVRU5D
RV9JTklUSUFMSVpFUiB7IC5zZXF1ZW5jZSA9IDAgfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZv
aWQKLWNrX3NlcXVlbmNlX2luaXQoc3RydWN0IGNrX3NlcXVlbmNlICpzcSkKLXsKLQotCWNrX3By
X3N0b3JlX3VpbnQoJnNxLT5zZXF1ZW5jZSwgMCk7Ci0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJ
TkUgc3RhdGljIHVuc2lnbmVkIGludAotY2tfc2VxdWVuY2VfcmVhZF9iZWdpbihjb25zdCBzdHJ1
Y3QgY2tfc2VxdWVuY2UgKnNxKQotewotCXVuc2lnbmVkIGludCB2ZXJzaW9uOwotCi0JZm9yICg7
OykgewotCQl2ZXJzaW9uID0gY2tfcHJfbG9hZF91aW50KCZzcS0+c2VxdWVuY2UpOwotCi0JCS8q
Ci0JCSAqIElmIGEgc2VxdWVuY2UgaXMgZXZlbiB0aGVuIGFzc29jaWF0ZWQgZGF0YSBtYXkgYmUg
aW4gYQotCQkgKiBjb25zaXN0ZW50IHN0YXRlLgotCQkgKi8KLQkJaWYgKENLX0NDX0xJS0VMWSgo
dmVyc2lvbiAmIDEpID09IDApKQotCQkJYnJlYWs7Ci0KLQkJLyoKLQkJICogSWYgYSBzZXF1ZW5j
ZSBpcyBvZGQgdGhlbiBhIHRocmVhZCBpcyBpbiB0aGUgbWlkZGxlIG9mIGFuCi0JCSAqIHVwZGF0
ZS4gUmV0cnkgdGhlIHJlYWQgdG8gYXZvaWQgb3BlcmF0aW5nIG9uIGluY29uc2lzdGVudAotCQkg
KiBkYXRhLgotCQkgKi8KLQkJY2tfcHJfc3RhbGwoKTsKLQl9Ci0KLQlja19wcl9mZW5jZV9sb2Fk
KCk7Ci0JcmV0dXJuIHZlcnNpb247Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tf
c2VxdWVuY2VfcmVhZF9yZXRyeShjb25zdCBzdHJ1Y3QgY2tfc2VxdWVuY2UgKnNxLCB1bnNpZ25l
ZCBpbnQgdmVyc2lvbikKLXsKLQotCS8qCi0JICogSWYgdGhlIHNlcXVlbmNlIG51bWJlciB3YXMg
dXBkYXRlZCB0aGVuIGEgcmVhZCBzaG91bGQgYmUKLQkgKiByZS1hdHRlbXB0ZWQuCi0JICovCi0J
Y2tfcHJfZmVuY2VfbG9hZCgpOwotCXJldHVybiBja19wcl9sb2FkX3VpbnQoJnNxLT5zZXF1ZW5j
ZSkgIT0gdmVyc2lvbjsKLX0KLQotI2RlZmluZSBDS19TRVFVRU5DRV9SRUFEKHNlcWxvY2ssIHZl
cnNpb24pIAkJCQkJCVwKLQlmb3IgKCoodmVyc2lvbikgPSAxOwkJCQkJCQkJXAotCSAgICAoKih2
ZXJzaW9uKSAhPSAwKSAmJiAoKih2ZXJzaW9uKSA9IGNrX3NlcXVlbmNlX3JlYWRfYmVnaW4oc2Vx
bG9jayksIDEpOwlcCi0JICAgICoodmVyc2lvbikgPSBja19zZXF1ZW5jZV9yZWFkX3JldHJ5KHNl
cWxvY2ssICoodmVyc2lvbikpKQotCi0vKgotICogVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciBh
IHN1Y2Nlc3NmdWwgbXV0ZXggYWNxdWlzaXRpb24uCi0gKi8KLUNLX0NDX0lOTElORSBzdGF0aWMg
dm9pZAotY2tfc2VxdWVuY2Vfd3JpdGVfYmVnaW4oc3RydWN0IGNrX3NlcXVlbmNlICpzcSkKLXsK
LQotCS8qCi0JICogSW5jcmVtZW50IHRoZSBzZXF1ZW5jZSB0byBhbiBvZGQgbnVtYmVyIHRvIGlu
ZGljYXRlCi0JICogdGhlIGJlZ2lubmluZyBvZiBhIHdyaXRlIHVwZGF0ZS4KLQkgKi8KLQlja19w
cl9zdG9yZV91aW50KCZzcS0+c2VxdWVuY2UsIHNxLT5zZXF1ZW5jZSArIDEpOwotCWNrX3ByX2Zl
bmNlX3N0b3JlKCk7Ci0JcmV0dXJuOwotfQotCi0vKgotICogVGhpcyBtdXN0IGJlIGNhbGxlZCBi
ZWZvcmUgbXV0ZXggb3duZXJzaGlwIGlzIHJlbGlucXVpc2hlZC4KLSAqLwotQ0tfQ0NfSU5MSU5F
IHN0YXRpYyB2b2lkCi1ja19zZXF1ZW5jZV93cml0ZV9lbmQoc3RydWN0IGNrX3NlcXVlbmNlICpz
cSkKLXsKLQotCS8qCi0JICogSW5jcmVtZW50IHRoZSBzZXF1ZW5jZSB0byBhbiBldmVuIG51bWJl
ciB0byBpbmRpY2F0ZQotCSAqIGNvbXBsZXRpb24gb2YgYSB3cml0ZSB1cGRhdGUuCi0JICovCi0J
Y2tfcHJfZmVuY2Vfc3RvcmUoKTsKLQlja19wcl9zdG9yZV91aW50KCZzcS0+c2VxdWVuY2UsIHNx
LT5zZXF1ZW5jZSArIDEpOwotCXJldHVybjsKLX0KLQotI2VuZGlmIC8qIENLX1NFUVVFTkNFX0gg
Ki8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUv
Y2tfc3BpbmxvY2suaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUv
Y2tfc3BpbmxvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk1ODVmMjQyZDgz
ODIzMTYyNzA0MjNlOTYxYTIzZjA4YjM2M2ZiMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNs
dWRlL2NrX3NwaW5sb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IDIwMTAtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
LSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
Ci0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIENLX1NQSU5MT0NLX0gKLSNkZWZpbmUgQ0tfU1BJTkxPQ0tfSAotCi0j
aW5jbHVkZSAic3BpbmxvY2svYW5kZXJzb24uaCIKLSNpbmNsdWRlICJzcGlubG9jay9jYXMuaCIK
LSNpbmNsdWRlICJzcGlubG9jay9jbGguaCIKLSNpbmNsdWRlICJzcGlubG9jay9kZWMuaCIKLSNp
bmNsdWRlICJzcGlubG9jay9mYXMuaCIKLSNpbmNsdWRlICJzcGlubG9jay9oY2xoLmgiCi0jaW5j
bHVkZSAic3BpbmxvY2svbWNzLmgiCi0jaW5jbHVkZSAic3BpbmxvY2svdGlja2V0LmgiCi0KLS8q
Ci0gKiBPbiB0ZXN0ZWQgeDg2LCB4ODZfNjQsIFBQQzY0IGFuZCBTUEFSQzY0IHRhcmdldHMsCi0g
KiBja19zcGlubG9ja19mYXMgcHJvdmVkIHRvIGhhdmUgbG93ZXN0IGxhdGVuY3kKLSAqIGluIGZh
c3QgcGF0aCB0ZXN0aW5nIG9yIG5lZ2xpZ2libGUgZGVncmFkYXRpb24KLSAqIGZyb20gZmFzdGVy
IGJ1dCBsZXNzIHJvYnVzdCBpbXBsZW1lbnRhdGlvbnMuCi0gKi8KLSNkZWZpbmUgQ0tfU1BJTkxP
Q0tfSU5JVElBTElaRVIgQ0tfU1BJTkxPQ0tfRkFTX0lOSVRJQUxJWkVSCi0jZGVmaW5lIGNrX3Nw
aW5sb2NrX3QJCWNrX3NwaW5sb2NrX2Zhc190Ci0jZGVmaW5lIGNrX3NwaW5sb2NrX2luaXQoeCkJ
Y2tfc3BpbmxvY2tfZmFzX2luaXQoeCkKLSNkZWZpbmUgY2tfc3BpbmxvY2tfbG9jayh4KQlja19z
cGlubG9ja19mYXNfbG9jayh4KQotI2RlZmluZSBja19zcGlubG9ja19sb2NrX2ViKHgpCWNrX3Nw
aW5sb2NrX2Zhc19sb2NrX2ViKHgpCi0jZGVmaW5lIGNrX3NwaW5sb2NrX3VubG9jayh4KQlja19z
cGlubG9ja19mYXNfdW5sb2NrKHgpCi0jZGVmaW5lIGNrX3NwaW5sb2NrX2xvY2tlZCh4KQlja19z
cGlubG9ja19mYXNfbG9ja2VkKHgpCi0jZGVmaW5lIGNrX3NwaW5sb2NrX3RyeWxvY2soeCkJY2tf
c3BpbmxvY2tfZmFzX3RyeWxvY2soeCkKLQotQ0tfRUxJREVfUFJPVE9UWVBFKGNrX3NwaW5sb2Nr
LCBja19zcGlubG9ja190LAotICAgIGNrX3NwaW5sb2NrX2xvY2tlZCwgY2tfc3BpbmxvY2tfbG9j
aywKLSAgICBja19zcGlubG9ja19sb2NrZWQsIGNrX3NwaW5sb2NrX3VubG9jaykKLQotQ0tfRUxJ
REVfVFJZTE9DS19QUk9UT1RZUEUoY2tfc3BpbmxvY2ssIGNrX3NwaW5sb2NrX3QsCi0gICAgY2tf
c3BpbmxvY2tfbG9ja2VkLCBja19zcGlubG9ja190cnlsb2NrKQotCi0jZW5kaWYgLyogQ0tfU1BJ
TkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2sv
aW5jbHVkZS9ja19zdGFjay5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5j
bHVkZS9ja19zdGFjay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjJiNjg1ZmE4
MWI5MTlmOGUwZDAyY2IwODM4YzgwMTg2OGMzOGU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2lu
Y2x1ZGUvY2tfc3RhY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDM1NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IDIwMDktMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
LSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
Ci0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIENLX1NUQUNLX0gKLSNkZWZpbmUgQ0tfU1RBQ0tfSAotCi0jaW5jbHVk
ZSA8Y2tfY2MuaD4KLSNpbmNsdWRlIDxja19wci5oPgotI2luY2x1ZGUgPGNrX3N0ZGJvb2wuaD4K
LSNpbmNsdWRlIDxja19zdGRkZWYuaD4KLQotc3RydWN0IGNrX3N0YWNrX2VudHJ5IHsKLQlzdHJ1
Y3QgY2tfc3RhY2tfZW50cnkgKm5leHQ7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tfc3RhY2tfZW50
cnkgY2tfc3RhY2tfZW50cnlfdDsKLQotc3RydWN0IGNrX3N0YWNrIHsKLQlzdHJ1Y3QgY2tfc3Rh
Y2tfZW50cnkgKmhlYWQ7Ci0JY2hhciAqZ2VuZXJhdGlvbiBDS19DQ19QQUNLRUQ7Ci19IENLX0ND
X0FMSUFTRUQ7Ci10eXBlZGVmIHN0cnVjdCBja19zdGFjayBja19zdGFja190OwotCi0jZGVmaW5l
IENLX1NUQUNLX0lOSVRJQUxJWkVSIHsgTlVMTCwgTlVMTCB9Ci0KLSNpZm5kZWYgQ0tfRl9TVEFD
S19QVVNIX1VQTUMKLSNkZWZpbmUgQ0tfRl9TVEFDS19QVVNIX1VQTUMKLS8qCi0gKiBTdGFjayBw
cm9kdWNlciBvcGVyYXRpb24gc2FmZSBmb3IgbXVsdGlwbGUgdW5pcXVlIHByb2R1Y2VycyBhbmQg
bXVsdGlwbGUgY29uc3VtZXJzLgotICovCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3N0
YWNrX3B1c2hfdXBtYyhzdHJ1Y3QgY2tfc3RhY2sgKnRhcmdldCwgc3RydWN0IGNrX3N0YWNrX2Vu
dHJ5ICplbnRyeSkKLXsKLQlzdHJ1Y3QgY2tfc3RhY2tfZW50cnkgKnN0YWNrOwotCi0Jc3RhY2sg
PSBja19wcl9sb2FkX3B0cigmdGFyZ2V0LT5oZWFkKTsKLQllbnRyeS0+bmV4dCA9IHN0YWNrOwot
CWNrX3ByX2ZlbmNlX3N0b3JlKCk7Ci0KLQl3aGlsZSAoY2tfcHJfY2FzX3B0cl92YWx1ZSgmdGFy
Z2V0LT5oZWFkLCBzdGFjaywgZW50cnksICZzdGFjaykgPT0gZmFsc2UpIHsKLQkJZW50cnktPm5l
eHQgPSBzdGFjazsKLQkJY2tfcHJfZmVuY2Vfc3RvcmUoKTsKLQl9Ci0KLQlyZXR1cm47Ci19Ci0j
ZW5kaWYgLyogQ0tfRl9TVEFDS19QVVNIX1VQTUMgKi8KLQotI2lmbmRlZiBDS19GX1NUQUNLX1RS
WVBVU0hfVVBNQwotI2RlZmluZSBDS19GX1NUQUNLX1RSWVBVU0hfVVBNQwotLyoKLSAqIFN0YWNr
IHByb2R1Y2VyIG9wZXJhdGlvbiBmb3IgbXVsdGlwbGUgdW5pcXVlIHByb2R1Y2VycyBhbmQgbXVs
dGlwbGUgY29uc3VtZXJzLgotICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MgYW5kIGZhbHNlIG9u
IGZhaWx1cmUuCi0gKi8KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfc3RhY2tfdHJ5cHVz
aF91cG1jKHN0cnVjdCBja19zdGFjayAqdGFyZ2V0LCBzdHJ1Y3QgY2tfc3RhY2tfZW50cnkgKmVu
dHJ5KQotewotCXN0cnVjdCBja19zdGFja19lbnRyeSAqc3RhY2s7Ci0KLQlzdGFjayA9IGNrX3By
X2xvYWRfcHRyKCZ0YXJnZXQtPmhlYWQpOwotCWVudHJ5LT5uZXh0ID0gc3RhY2s7Ci0JY2tfcHJf
ZmVuY2Vfc3RvcmUoKTsKLQotCXJldHVybiBja19wcl9jYXNfcHRyKCZ0YXJnZXQtPmhlYWQsIHN0
YWNrLCBlbnRyeSk7Ci19Ci0jZW5kaWYgLyogQ0tfRl9TVEFDS19UUllQVVNIX1VQTUMgKi8KLQot
I2lmbmRlZiBDS19GX1NUQUNLX1BPUF9VUE1DCi0jZGVmaW5lIENLX0ZfU1RBQ0tfUE9QX1VQTUMK
LS8qCi0gKiBTdGFjayBjb25zdW1lciBvcGVyYXRpb24gc2FmZSBmb3IgbXVsdGlwbGUgdW5pcXVl
IHByb2R1Y2VycyBhbmQgbXVsdGlwbGUgY29uc3VtZXJzLgotICovCi1DS19DQ19JTkxJTkUgc3Rh
dGljIHN0cnVjdCBja19zdGFja19lbnRyeSAqCi1ja19zdGFja19wb3BfdXBtYyhzdHJ1Y3QgY2tf
c3RhY2sgKnRhcmdldCkKLXsKLQlzdHJ1Y3QgY2tfc3RhY2tfZW50cnkgKmVudHJ5LCAqbmV4dDsK
LQotCWVudHJ5ID0gY2tfcHJfbG9hZF9wdHIoJnRhcmdldC0+aGVhZCk7Ci0JaWYgKGVudHJ5ID09
IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JY2tfcHJfZmVuY2VfbG9hZCgpOwotCW5leHQgPSBl
bnRyeS0+bmV4dDsKLQl3aGlsZSAoY2tfcHJfY2FzX3B0cl92YWx1ZSgmdGFyZ2V0LT5oZWFkLCBl
bnRyeSwgbmV4dCwgJmVudHJ5KSA9PSBmYWxzZSkgewotCQlpZiAoZW50cnkgPT0gTlVMTCkKLQkJ
CWJyZWFrOwotCi0JCWNrX3ByX2ZlbmNlX2xvYWQoKTsKLQkJbmV4dCA9IGVudHJ5LT5uZXh0Owot
CX0KLQotCXJldHVybiBlbnRyeTsKLX0KLSNlbmRpZgotCi0jaWZuZGVmIENLX0ZfU1RBQ0tfVFJZ
UE9QX1VQTUMKLSNkZWZpbmUgQ0tfRl9TVEFDS19UUllQT1BfVVBNQwotLyoKLSAqIFN0YWNrIHBy
b2R1Y3Rpb24gb3BlcmF0aW9uIGZvciBtdWx0aXBsZSB1bmlxdWUgcHJvZHVjZXJzIGFuZCBtdWx0
aXBsZSBjb25zdW1lcnMuCi0gKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBhbmQgZmFsc2Ugb24g
ZmFpbHVyZS4gVGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgdGhlIHNlY29uZAotICogYXJndW1lbnQg
aXMgc2V0IHRvIGEgdmFsaWQgY2tfc3RhY2tfZW50cnlfdCByZWZlcmVuY2UgaWYgdHJ1ZSBpcyBy
ZXR1cm5lZC4gSWYKLSAqIGZhbHNlIGlzIHJldHVybmVkLCB0aGVuIHRoZSB2YWx1ZSBwb2ludGVk
IHRvIGJ5IHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdW5kZWZpbmVkLgotICovCi1DS19DQ19JTkxJ
TkUgc3RhdGljIGJvb2wKLWNrX3N0YWNrX3RyeXBvcF91cG1jKHN0cnVjdCBja19zdGFjayAqdGFy
Z2V0LCBzdHJ1Y3QgY2tfc3RhY2tfZW50cnkgKipyKQotewotCXN0cnVjdCBja19zdGFja19lbnRy
eSAqZW50cnk7Ci0KLQllbnRyeSA9IGNrX3ByX2xvYWRfcHRyKCZ0YXJnZXQtPmhlYWQpOwotCWlm
IChlbnRyeSA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlja19wcl9mZW5jZV9sb2FkKCk7
Ci0JaWYgKGNrX3ByX2Nhc19wdHIoJnRhcmdldC0+aGVhZCwgZW50cnksIGVudHJ5LT5uZXh0KSA9
PSB0cnVlKSB7Ci0JCSpyID0gZW50cnk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBm
YWxzZTsKLX0KLSNlbmRpZiAvKiBDS19GX1NUQUNLX1RSWVBPUF9VUE1DICovCi0KLSNpZm5kZWYg
Q0tfRl9TVEFDS19CQVRDSF9QT1BfVVBNQwotI2RlZmluZSBDS19GX1NUQUNLX0JBVENIX1BPUF9V
UE1DCi0vKgotICogUG9wIGFsbCBpdGVtcyBvZmYgdGhlIHN0YWNrLgotICovCi1DS19DQ19JTkxJ
TkUgc3RhdGljIHN0cnVjdCBja19zdGFja19lbnRyeSAqCi1ja19zdGFja19iYXRjaF9wb3BfdXBt
YyhzdHJ1Y3QgY2tfc3RhY2sgKnRhcmdldCkKLXsKLQlzdHJ1Y3QgY2tfc3RhY2tfZW50cnkgKmVu
dHJ5OwotCi0JZW50cnkgPSBja19wcl9mYXNfcHRyKCZ0YXJnZXQtPmhlYWQsIE5VTEwpOwotCWNr
X3ByX2ZlbmNlX2xvYWQoKTsKLQlyZXR1cm4gZW50cnk7Ci19Ci0jZW5kaWYgLyogQ0tfRl9TVEFD
S19CQVRDSF9QT1BfVVBNQyAqLwotCi0jaWZuZGVmIENLX0ZfU1RBQ0tfUFVTSF9NUE1DCi0jZGVm
aW5lIENLX0ZfU1RBQ0tfUFVTSF9NUE1DCi0vKgotICogU3RhY2sgcHJvZHVjZXIgb3BlcmF0aW9u
IHNhZmUgZm9yIG11bHRpcGxlIHByb2R1Y2VycyBhbmQgbXVsdGlwbGUgY29uc3VtZXJzLgotICov
Ci1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3N0YWNrX3B1c2hfbXBtYyhzdHJ1Y3QgY2tf
c3RhY2sgKnRhcmdldCwgc3RydWN0IGNrX3N0YWNrX2VudHJ5ICplbnRyeSkKLXsKLQotCWNrX3N0
YWNrX3B1c2hfdXBtYyh0YXJnZXQsIGVudHJ5KTsKLQlyZXR1cm47Ci19Ci0jZW5kaWYgLyogQ0tf
Rl9TVEFDS19QVVNIX01QTUMgKi8KLQotI2lmbmRlZiBDS19GX1NUQUNLX1RSWVBVU0hfTVBNQwot
I2RlZmluZSBDS19GX1NUQUNLX1RSWVBVU0hfTVBNQwotLyoKLSAqIFN0YWNrIHByb2R1Y2VyIG9w
ZXJhdGlvbiBzYWZlIGZvciBtdWx0aXBsZSBwcm9kdWNlcnMgYW5kIG11bHRpcGxlIGNvbnN1bWVy
cy4KLSAqLwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19zdGFja190cnlwdXNoX21wbWMo
c3RydWN0IGNrX3N0YWNrICp0YXJnZXQsIHN0cnVjdCBja19zdGFja19lbnRyeSAqZW50cnkpCi17
Ci0KLQlyZXR1cm4gY2tfc3RhY2tfdHJ5cHVzaF91cG1jKHRhcmdldCwgZW50cnkpOwotfQotI2Vu
ZGlmIC8qIENLX0ZfU1RBQ0tfVFJZUFVTSF9NUE1DICovCi0KLSNpZmRlZiBDS19GX1BSX0NBU19Q
VFJfMl9WQUxVRQotI2lmbmRlZiBDS19GX1NUQUNLX1BPUF9NUE1DCi0jZGVmaW5lIENLX0ZfU1RB
Q0tfUE9QX01QTUMKLS8qCi0gKiBTdGFjayBjb25zdW1lciBvcGVyYXRpb24gc2FmZSBmb3IgbXVs
dGlwbGUgcHJvZHVjZXJzIGFuZCBtdWx0aXBsZSBjb25zdW1lcnMuCi0gKi8KLUNLX0NDX0lOTElO
RSBzdGF0aWMgc3RydWN0IGNrX3N0YWNrX2VudHJ5ICoKLWNrX3N0YWNrX3BvcF9tcG1jKHN0cnVj
dCBja19zdGFjayAqdGFyZ2V0KQotewotCXN0cnVjdCBja19zdGFjayBvcmlnaW5hbCwgdXBkYXRl
OwotCi0Jb3JpZ2luYWwuZ2VuZXJhdGlvbiA9IGNrX3ByX2xvYWRfcHRyKCZ0YXJnZXQtPmdlbmVy
YXRpb24pOwotCWNrX3ByX2ZlbmNlX2xvYWQoKTsKLQlvcmlnaW5hbC5oZWFkID0gY2tfcHJfbG9h
ZF9wdHIoJnRhcmdldC0+aGVhZCk7Ci0JaWYgKG9yaWdpbmFsLmhlYWQgPT0gTlVMTCkKLQkJcmV0
dXJuIE5VTEw7Ci0KLQkvKiBPcmRlciB3aXRoIHJlc3BlY3QgdG8gbmV4dCBwb2ludGVyLiAqLwot
CWNrX3ByX2ZlbmNlX2xvYWQoKTsKLQotCXVwZGF0ZS5nZW5lcmF0aW9uID0gb3JpZ2luYWwuZ2Vu
ZXJhdGlvbiArIDE7Ci0JdXBkYXRlLmhlYWQgPSBvcmlnaW5hbC5oZWFkLT5uZXh0OwotCi0Jd2hp
bGUgKGNrX3ByX2Nhc19wdHJfMl92YWx1ZSh0YXJnZXQsICZvcmlnaW5hbCwgJnVwZGF0ZSwgJm9y
aWdpbmFsKSA9PSBmYWxzZSkgewotCQlpZiAob3JpZ2luYWwuaGVhZCA9PSBOVUxMKQotCQkJcmV0
dXJuIE5VTEw7Ci0KLQkJdXBkYXRlLmdlbmVyYXRpb24gPSBvcmlnaW5hbC5nZW5lcmF0aW9uICsg
MTsKLQotCQkvKiBPcmRlciB3aXRoIHJlc3BlY3QgdG8gbmV4dCBwb2ludGVyLiAqLwotCQlja19w
cl9mZW5jZV9sb2FkKCk7Ci0JCXVwZGF0ZS5oZWFkID0gb3JpZ2luYWwuaGVhZC0+bmV4dDsKLQl9
Ci0KLQlyZXR1cm4gb3JpZ2luYWwuaGVhZDsKLX0KLSNlbmRpZiAvKiBDS19GX1NUQUNLX1BPUF9N
UE1DICovCi0KLSNpZm5kZWYgQ0tfRl9TVEFDS19UUllQT1BfTVBNQwotI2RlZmluZSBDS19GX1NU
QUNLX1RSWVBPUF9NUE1DCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wKLWNrX3N0YWNrX3RyeXBv
cF9tcG1jKHN0cnVjdCBja19zdGFjayAqdGFyZ2V0LCBzdHJ1Y3QgY2tfc3RhY2tfZW50cnkgKipy
KQotewotCXN0cnVjdCBja19zdGFjayBvcmlnaW5hbCwgdXBkYXRlOwotCi0Jb3JpZ2luYWwuZ2Vu
ZXJhdGlvbiA9IGNrX3ByX2xvYWRfcHRyKCZ0YXJnZXQtPmdlbmVyYXRpb24pOwotCWNrX3ByX2Zl
bmNlX2xvYWQoKTsKLQlvcmlnaW5hbC5oZWFkID0gY2tfcHJfbG9hZF9wdHIoJnRhcmdldC0+aGVh
ZCk7Ci0JaWYgKG9yaWdpbmFsLmhlYWQgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JdXBk
YXRlLmdlbmVyYXRpb24gPSBvcmlnaW5hbC5nZW5lcmF0aW9uICsgMTsKLQlja19wcl9mZW5jZV9s
b2FkKCk7Ci0JdXBkYXRlLmhlYWQgPSBvcmlnaW5hbC5oZWFkLT5uZXh0OwotCi0JaWYgKGNrX3By
X2Nhc19wdHJfMl92YWx1ZSh0YXJnZXQsICZvcmlnaW5hbCwgJnVwZGF0ZSwgJm9yaWdpbmFsKSA9
PSB0cnVlKSB7Ci0JCSpyID0gb3JpZ2luYWwuaGVhZDsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0J
cmV0dXJuIGZhbHNlOwotfQotI2VuZGlmIC8qIENLX0ZfU1RBQ0tfVFJZUE9QX01QTUMgKi8KLSNl
bmRpZiAvKiBDS19GX1BSX0NBU19QVFJfMl9WQUxVRSAqLwotCi0jaWZuZGVmIENLX0ZfU1RBQ0tf
QkFUQ0hfUE9QX01QTUMKLSNkZWZpbmUgQ0tfRl9TVEFDS19CQVRDSF9QT1BfTVBNQwotLyoKLSAq
IFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgVVAvTUMgdmVyc2lvbiBhcyBOVUxMIGRvZXMgbm90
IG5lZWQgYQotICogYSBnZW5lcmF0aW9uIGNvdW50LgotICovCi1DS19DQ19JTkxJTkUgc3RhdGlj
IHN0cnVjdCBja19zdGFja19lbnRyeSAqCi1ja19zdGFja19iYXRjaF9wb3BfbXBtYyhzdHJ1Y3Qg
Y2tfc3RhY2sgKnRhcmdldCkKLXsKLQotCXJldHVybiBja19zdGFja19iYXRjaF9wb3BfdXBtYyh0
YXJnZXQpOwotfQotI2VuZGlmIC8qIENLX0ZfU1RBQ0tfQkFUQ0hfUE9QX01QTUMgKi8KLQotI2lm
bmRlZiBDS19GX1NUQUNLX1BVU0hfTVBOQwotI2RlZmluZSBDS19GX1NUQUNLX1BVU0hfTVBOQwot
LyoKLSAqIFN0YWNrIHByb2R1Y2VyIG9wZXJhdGlvbiBzYWZlIHdpdGggbm8gY29uY3VycmVudCBj
b25zdW1lcnMuCi0gKi8KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfc3RhY2tfcHVzaF9t
cG5jKHN0cnVjdCBja19zdGFjayAqdGFyZ2V0LCBzdHJ1Y3QgY2tfc3RhY2tfZW50cnkgKmVudHJ5
KQotewotCXN0cnVjdCBja19zdGFja19lbnRyeSAqc3RhY2s7Ci0KLQllbnRyeS0+bmV4dCA9IE5V
TEw7Ci0JY2tfcHJfZmVuY2Vfc3RvcmVfYXRvbWljKCk7Ci0Jc3RhY2sgPSBja19wcl9mYXNfcHRy
KCZ0YXJnZXQtPmhlYWQsIGVudHJ5KTsKLQlja19wcl9zdG9yZV9wdHIoJmVudHJ5LT5uZXh0LCBz
dGFjayk7Ci0JY2tfcHJfZmVuY2Vfc3RvcmUoKTsKLQotCXJldHVybjsKLX0KLSNlbmRpZiAvKiBD
S19GX1NUQUNLX1BVU0hfTVBOQyAqLwotCi0vKgotICogU3RhY2sgcHJvZHVjZXIgb3BlcmF0aW9u
IGZvciBzaW5nbGUgcHJvZHVjZXIgYW5kIG5vIGNvbmN1cnJlbnQgY29uc3VtZXJzLgotICovCi1D
S19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3N0YWNrX3B1c2hfc3BuYyhzdHJ1Y3QgY2tfc3Rh
Y2sgKnRhcmdldCwgc3RydWN0IGNrX3N0YWNrX2VudHJ5ICplbnRyeSkKLXsKLQotCWVudHJ5LT5u
ZXh0ID0gdGFyZ2V0LT5oZWFkOwotCXRhcmdldC0+aGVhZCA9IGVudHJ5OwotCXJldHVybjsKLX0K
LQotLyoKLSAqIFN0YWNrIGNvbnN1bWVyIG9wZXJhdGlvbiBmb3Igbm8gY29uY3VycmVudCBwcm9k
dWNlcnMgYW5kIHNpbmdsZSBjb25zdW1lci4KLSAqLwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBzdHJ1
Y3QgY2tfc3RhY2tfZW50cnkgKgotY2tfc3RhY2tfcG9wX25wc2Moc3RydWN0IGNrX3N0YWNrICp0
YXJnZXQpCi17Ci0Jc3RydWN0IGNrX3N0YWNrX2VudHJ5ICpuOwotCi0JaWYgKHRhcmdldC0+aGVh
ZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCW4gPSB0YXJnZXQtPmhlYWQ7Ci0JdGFyZ2V0
LT5oZWFkID0gbi0+bmV4dDsKLQotCXJldHVybiBuOwotfQotCi0vKgotICogUG9wIGFsbCBpdGVt
cyBvZmYgYSBzdGFjay4KLSAqLwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBzdHJ1Y3QgY2tfc3RhY2tf
ZW50cnkgKgotY2tfc3RhY2tfYmF0Y2hfcG9wX25wc2Moc3RydWN0IGNrX3N0YWNrICp0YXJnZXQp
Ci17Ci0Jc3RydWN0IGNrX3N0YWNrX2VudHJ5ICpuOwotCi0JbiA9IHRhcmdldC0+aGVhZDsKLQl0
YXJnZXQtPmhlYWQgPSBOVUxMOwotCi0JcmV0dXJuIG47Ci19Ci0KLS8qCi0gKiBTdGFjayBpbml0
aWFsaXphdGlvbiBmdW5jdGlvbi4gR3VhcmFudGVlcyBpbml0aWFsaXphdGlvbiBhY3Jvc3MgcHJv
Y2Vzc29ycy4KLSAqLwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19zdGFja19pbml0KHN0
cnVjdCBja19zdGFjayAqc3RhY2spCi17Ci0KLQlzdGFjay0+aGVhZCA9IE5VTEw7Ci0Jc3RhY2st
PmdlbmVyYXRpb24gPSBOVUxMOwotCXJldHVybjsKLX0KLQotLyogRGVmaW5lcyBhIGNvbnRhaW5l
cl9vZiBmdW5jdGlvbnMgZm9yICovCi0jZGVmaW5lIENLX1NUQUNLX0NPTlRBSU5FUihULCBNLCBO
KSBDS19DQ19DT05UQUlORVIoY2tfc3RhY2tfZW50cnlfdCwgVCwgTSwgTikKLQotI2RlZmluZSBD
S19TVEFDS19JU0VNUFRZKG0pICgobSktPmhlYWQgPT0gTlVMTCkKLSNkZWZpbmUgQ0tfU1RBQ0tf
RklSU1QocykgICAoKHMpLT5oZWFkKQotI2RlZmluZSBDS19TVEFDS19ORVhUKG0pICAgICgobSkt
Pm5leHQpCi0jZGVmaW5lIENLX1NUQUNLX0ZPUkVBQ0goc3RhY2ssIGVudHJ5KQkJCQlcCi0JZm9y
ICgoZW50cnkpID0gQ0tfU1RBQ0tfRklSU1Qoc3RhY2spOwkJCVwKLQkgICAgIChlbnRyeSkgIT0g
TlVMTDsJCQkJCVwKLQkgICAgIChlbnRyeSkgPSBDS19TVEFDS19ORVhUKGVudHJ5KSkKLSNkZWZp
bmUgQ0tfU1RBQ0tfRk9SRUFDSF9TQUZFKHN0YWNrLCBlbnRyeSwgVCkJCQlcCi0JZm9yICgoZW50
cnkpID0gQ0tfU1RBQ0tfRklSU1Qoc3RhY2spOwkJCVwKLQkgICAgIChlbnRyeSkgIT0gTlVMTCAm
JiAoKFQpID0gKGVudHJ5KS0+bmV4dCwgMSk7CVwKLQkgICAgIChlbnRyeSkgPSAoVCkpCi0KLSNl
bmRpZiAvKiBDS19TVEFDS19IICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9pbmNsdWRlL2NrX3N0ZGJvb2wuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2NrL2luY2x1ZGUvY2tfc3RkYm9vbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiOWE3OTgyOTFlODI1ZjU1YjE2ZDFmOWE2MjA3ZmI5NjA4M2QyNTA5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfc3RkYm9vbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE1IE9saXZpZXIgSG91Y2hhcmQuCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAq
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVk
KF9LRVJORUwpCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0ZGJv
b2wuaD4KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Y2svaW5jbHVkZS9ja19zdGRkZWYuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L2luY2x1ZGUvY2tfc3RkZGVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMTll
YTk1MGViNDc5YWMxYjA5OGE3NmZjM2ViYzczNGEyOGM0ZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Y2svaW5jbHVkZS9ja19zdGRkZWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgMjAxNSBPbGl2aWVyIEhvdWNoYXJkLgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChfS0VSTkVMKQot
I2luY2x1ZGUgPHN5cy9zdGRkZWYuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jZW5k
aWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUv
Y2tfc3RkaW50LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2Nr
X3N0ZGludC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjQxNmE5MmZmNWQ2MGIx
YjZkYzE0NzE3NWI2YWEyN2YzNzg2MmQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUv
Y2tfc3RkaW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IDIwMTAtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5E
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoX19LRVJORUxfXykKLSNpbmNsdWRl
IDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2VsaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChfS0VSTkVMKQotI2luY2x1ZGUgPHN5cy9zdGRpbnQu
aD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZW5kaWYgLyogX19saW51eF9fICYmIF9f
S0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L2luY2x1ZGUvY2tfc3RkbGliLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9p
bmNsdWRlL2NrX3N0ZGxpYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWFjNjli
ZGRmNjliZmExZjAzMWY1ZjBlM2NlMDBmZDAyZTM4YzY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L2luY2x1ZGUvY2tfc3RkbGliLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IDIwMTUgT2xpdmllciBIb3VjaGFyZC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU
SE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
Ci0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoX0tFUk5FTCkKLSNp
bmNsdWRlIDxzeXMvc3lzdG0uaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tf
c3RyaW5nLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX3N0
cmluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDJjMjUyNTg3MDY4ZmQ1Yjlj
YThiMTE2NTM4NzFlMTQxOTcxZmFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tf
c3RyaW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IDIwMTUgT2xpdmllciBIb3VjaGFyZC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoX0tFUk5FTCkKLSNpbmNsdWRlIDxzeXMv
c3lzdG0uaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZW5kaWYKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfc3dsb2NrLmggYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX3N3bG9jay5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDZkM2EwYTViOTZjY2UzYjU3Y2YxYzhmOWVjYjZi
NDcxNjAwMTcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvY2tfc3dsb2NrLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE0IEphaWRl
diBTcmlkaGFyLgotICogQ29weXJpZ2h0IDIwMTQgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDS19TV0xPQ0tfSAotI2RlZmluZSBDS19TV0xPQ0tf
SAotCi0jaW5jbHVkZSA8Y2tfZWxpZGUuaD4KLSNpbmNsdWRlIDxja19saW1pdHMuaD4KLSNpbmNs
dWRlIDxja19wci5oPgotI2luY2x1ZGUgPGNrX3N0ZGJvb2wuaD4KLSNpbmNsdWRlIDxja19zdGRk
ZWYuaD4KLQotc3RydWN0IGNrX3N3bG9jayB7Ci0JdWludDMyX3QgdmFsdWU7Ci19OwotdHlwZWRl
ZiBzdHJ1Y3QgY2tfc3dsb2NrIGNrX3N3bG9ja190OwotCi0jZGVmaW5lIENLX1NXTE9DS19JTklU
SUFMSVpFUgl7MH0KLSNkZWZpbmUgQ0tfU1dMT0NLX1dSSVRFUl9CSVQJKDFVTCA8PCAzMSkKLSNk
ZWZpbmUgQ0tfU1dMT0NLX0xBVENIX0JJVAkoMVVMIDw8IDMwKQotI2RlZmluZSBDS19TV0xPQ0tf
V1JJVEVSX01BU0sJKENLX1NXTE9DS19MQVRDSF9CSVQgfCBDS19TV0xPQ0tfV1JJVEVSX0JJVCkK
LSNkZWZpbmUgQ0tfU1dMT0NLX1JFQURFUl9NQVNLICAgKFVJTlQzMl9NQVggXiBDS19TV0xPQ0tf
V1JJVEVSX01BU0spCi0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfc3dsb2NrX2luaXQo
c3RydWN0IGNrX3N3bG9jayAqcncpCi17Ci0KLQlydy0+dmFsdWUgPSAwOwotCWNrX3ByX2JhcnJp
ZXIoKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfc3dsb2Nr
X3dyaXRlX3VubG9jayhja19zd2xvY2tfdCAqcncpCi17Ci0KLQlja19wcl9mZW5jZV91bmxvY2so
KTsKLQlja19wcl9hbmRfMzIoJnJ3LT52YWx1ZSwgQ0tfU1dMT0NLX1JFQURFUl9NQVNLKTsKLQly
ZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfc3dsb2NrX2xvY2tlZF93
cml0ZXIoY2tfc3dsb2NrX3QgKnJ3KQotewotCWJvb2wgcjsKLQotCXIgPSBja19wcl9sb2FkXzMy
KCZydy0+dmFsdWUpICYgQ0tfU1dMT0NLX1dSSVRFUl9CSVQ7Ci0JY2tfcHJfZmVuY2VfYWNxdWly
ZSgpOwotCXJldHVybiByOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3N3bG9j
a193cml0ZV9kb3duZ3JhZGUoY2tfc3dsb2NrX3QgKnJ3KQotewotCi0JY2tfcHJfaW5jXzMyKCZy
dy0+dmFsdWUpOwotCWNrX3N3bG9ja193cml0ZV91bmxvY2socncpOwotCXJldHVybjsKLX0KLQot
Q0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19zd2xvY2tfbG9ja2VkKGNrX3N3bG9ja190ICpy
dykKLXsKLQlib29sIHI7Ci0KLQlyID0gY2tfcHJfbG9hZF8zMigmcnctPnZhbHVlKTsKLQlja19w
cl9mZW5jZV9hY3F1aXJlKCk7Ci0JcmV0dXJuIHI7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMg
Ym9vbAotY2tfc3dsb2NrX3dyaXRlX3RyeWxvY2soY2tfc3dsb2NrX3QgKnJ3KQotewotCWJvb2wg
cjsKLQotCXIgPSBja19wcl9jYXNfMzIoJnJ3LT52YWx1ZSwgMCwgQ0tfU1dMT0NLX1dSSVRFUl9C
SVQpOwotCWNrX3ByX2ZlbmNlX2xvY2soKTsKLQlyZXR1cm4gcjsKLX0KLQotQ0tfRUxJREVfVFJZ
TE9DS19QUk9UT1RZUEUoY2tfc3dsb2NrX3dyaXRlLCBja19zd2xvY2tfdCwKLSAgICBja19zd2xv
Y2tfbG9ja2VkLCBja19zd2xvY2tfd3JpdGVfdHJ5bG9jaykKLQotQ0tfQ0NfSU5MSU5FIHN0YXRp
YyB2b2lkCi1ja19zd2xvY2tfd3JpdGVfbG9jayhja19zd2xvY2tfdCAqcncpCi17Ci0KLQlja19w
cl9vcl8zMigmcnctPnZhbHVlLCBDS19TV0xPQ0tfV1JJVEVSX0JJVCk7Ci0Jd2hpbGUgKGNrX3By
X2xvYWRfMzIoJnJ3LT52YWx1ZSkgJiBDS19TV0xPQ0tfUkVBREVSX01BU0spCi0JCWNrX3ByX3N0
YWxsKCk7Ci0KLQlja19wcl9mZW5jZV9sb2NrKCk7Ci0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJ
TkUgc3RhdGljIHZvaWQKLWNrX3N3bG9ja193cml0ZV9sYXRjaChja19zd2xvY2tfdCAqcncpCi17
Ci0KLQkvKiBQdWJsaXNoIGludGVudCB0byBhY3F1aXJlIGxvY2suICovCi0JY2tfcHJfb3JfMzIo
JnJ3LT52YWx1ZSwgQ0tfU1dMT0NLX1dSSVRFUl9CSVQpOwotCi0JLyogU3RhbGwgdW50aWwgcmVh
ZGVycyBoYXZlIHNlZW4gdGhlIHdyaXRlciBhbmQgY2xlYXJlZC4gKi8KLQl3aGlsZSAoY2tfcHJf
Y2FzXzMyKCZydy0+dmFsdWUsIENLX1NXTE9DS19XUklURVJfQklULAotCSAgICBDS19TV0xPQ0tf
V1JJVEVSX01BU0spID09IGZhbHNlKSAgewotCQlkbyB7Ci0JCQlja19wcl9zdGFsbCgpOwotCQl9
IHdoaWxlIChja19wcl9sb2FkXzMyKCZydy0+dmFsdWUpICE9IENLX1NXTE9DS19XUklURVJfQklU
KTsKLQl9Ci0KLQlja19wcl9mZW5jZV9sb2NrKCk7Ci0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJ
TkUgc3RhdGljIHZvaWQKLWNrX3N3bG9ja193cml0ZV91bmxhdGNoKGNrX3N3bG9ja190ICpydykK
LXsKLQotCWNrX3ByX2ZlbmNlX3VubG9jaygpOwotCWNrX3ByX3N0b3JlXzMyKCZydy0+dmFsdWUs
IDApOwotCXJldHVybjsKLX0KLQotQ0tfRUxJREVfUFJPVE9UWVBFKGNrX3N3bG9ja193cml0ZSwg
Y2tfc3dsb2NrX3QsCi0gICAgY2tfc3dsb2NrX2xvY2tlZCwgY2tfc3dsb2NrX3dyaXRlX2xvY2ss
Ci0gICAgY2tfc3dsb2NrX2xvY2tlZF93cml0ZXIsIGNrX3N3bG9ja193cml0ZV91bmxvY2spCi0K
LUNLX0VMSURFX1RSWUxPQ0tfUFJPVE9UWVBFKGNrX3N3bG9ja19yZWFkLCBja19zd2xvY2tfdCwK
LSAgICBja19zd2xvY2tfbG9ja2VkX3dyaXRlciwgY2tfc3dsb2NrX3JlYWRfdHJ5bG9jaykKLQot
Q0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19zd2xvY2tfcmVhZF90cnlsb2NrKGNrX3N3bG9j
a190ICpydykKLXsKLQl1aW50MzJfdCBsID0gY2tfcHJfbG9hZF8zMigmcnctPnZhbHVlKTsKLQot
CWlmIChsICYgQ0tfU1dMT0NLX1dSSVRFUl9CSVQpCi0JCXJldHVybiBmYWxzZTsKLQotCWwgPSBj
a19wcl9mYWFfMzIoJnJ3LT52YWx1ZSwgMSkgJiBDS19TV0xPQ0tfV1JJVEVSX01BU0s7Ci0JaWYg
KGwgPT0gQ0tfU1dMT0NLX1dSSVRFUl9CSVQpCi0JCWNrX3ByX2RlY18zMigmcnctPnZhbHVlKTsK
LQotCWNrX3ByX2ZlbmNlX2xvY2soKTsKLQlyZXR1cm4gbCA9PSAwOwotfQotCi1DS19DQ19JTkxJ
TkUgc3RhdGljIHZvaWQKLWNrX3N3bG9ja19yZWFkX2xvY2soY2tfc3dsb2NrX3QgKnJ3KQotewot
CXVpbnQzMl90IGw7Ci0KLQlmb3IgKDs7KSB7Ci0JCXdoaWxlIChja19wcl9sb2FkXzMyKCZydy0+
dmFsdWUpICYgQ0tfU1dMT0NLX1dSSVRFUl9CSVQpCi0JCQlja19wcl9zdGFsbCgpOwotCi0JCWwg
PSBja19wcl9mYWFfMzIoJnJ3LT52YWx1ZSwgMSkgJiBDS19TV0xPQ0tfV1JJVEVSX01BU0s7Ci0J
CWlmIChsID09IDApCi0JCQlicmVhazsKLQotCQkvKgotCQkgKiBJZiB0aGUgbGF0Y2ggYml0IGhh
cyBub3QgYmVlbiBzZXQsIHRoZW4gdGhlIHdyaXRlciB3b3VsZAotCQkgKiBoYXZlIG9ic2VydmVk
IHRoZSByZWFkZXIgYW5kIHdpbGwgd2FpdCB0byBjb21wbGV0aW9uIG9mCi0JCSAqIHJlYWQtc2lk
ZSBjcml0aWNhbCBzZWN0aW9uLgotCQkgKi8KLQkJaWYgKGwgPT0gQ0tfU1dMT0NLX1dSSVRFUl9C
SVQpCi0JCQlja19wcl9kZWNfMzIoJnJ3LT52YWx1ZSk7Ci0JfQotCi0JY2tfcHJfZmVuY2VfbG9j
aygpOwotCXJldHVybjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19zd2xvY2tf
bG9ja2VkX3JlYWRlcihja19zd2xvY2tfdCAqcncpCi17Ci0KLQlja19wcl9mZW5jZV9sb2FkKCk7
Ci0JcmV0dXJuIGNrX3ByX2xvYWRfMzIoJnJ3LT52YWx1ZSkgJiBDS19TV0xPQ0tfUkVBREVSX01B
U0s7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfc3dsb2NrX3JlYWRfdW5sb2Nr
KGNrX3N3bG9ja190ICpydykKLXsKLQotCWNrX3ByX2ZlbmNlX3VubG9jaygpOwotCWNrX3ByX2Rl
Y18zMigmcnctPnZhbHVlKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0VMSURFX1BST1RPVFlQRShja19z
d2xvY2tfcmVhZCwgY2tfc3dsb2NrX3QsCi0gICAgY2tfc3dsb2NrX2xvY2tlZF93cml0ZXIsIGNr
X3N3bG9ja19yZWFkX2xvY2ssCi0gICAgY2tfc3dsb2NrX2xvY2tlZF9yZWFkZXIsIGNrX3N3bG9j
a19yZWFkX3VubG9jaykKLQotI2VuZGlmIC8qIENLX1NXTE9DS19IICovCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX3RmbG9jay5oIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9ja190ZmxvY2suaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4NzJhZTA4YWM4MmEzN2Q2YWRiNWU0YzBkNDkxNzhi
YjdhNDcxNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2NrX3RmbG9jay5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNCBTYW15IEFs
IEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENLX1RGTE9DS19U
SUNLRVRfSAotI2RlZmluZSBDS19URkxPQ0tfVElDS0VUX0gKLQotLyoKLSAqIFRoaXMgaXMgYW4g
aW1wbGVtZW50YXRpb24gb2YgdGFzay1mYWlyIGxvY2tzIGRlcml2ZWQgZnJvbSB0aGUgd29yawot
ICogZGVzY3JpYmVkIGluOgotICoJSm9obiBNLiBNZWxsb3ItQ3J1bW1leSBhbmQgTWljaGFlbCBM
LiBTY290dC4gMTk5MS4KLSAqCVNjYWxhYmxlIHJlYWRlci13cml0ZXIgc3luY2hyb25pemF0aW9u
IGZvciBzaGFyZWQtbWVtb3J5Ci0gKgltdWx0aXByb2Nlc3NvcnMuIFNJR1BMQU4gTm90LiAyNiwg
NyAoQXByaWwgMTk5MSksIDEwNi0xMTMuCi0gKi8KLQotI2luY2x1ZGUgPGNrX2NjLmg+Ci0jaW5j
bHVkZSA8Y2tfcHIuaD4KLQotc3RydWN0IGNrX3RmbG9ja190aWNrZXQgewotCXVpbnQzMl90IHJl
cXVlc3Q7Ci0JdWludDMyX3QgY29tcGxldGlvbjsKLX07Ci10eXBlZGVmIHN0cnVjdCBja190Zmxv
Y2tfdGlja2V0IGNrX3RmbG9ja190aWNrZXRfdDsKLQotI2RlZmluZSBDS19URkxPQ0tfVElDS0VU
X0lOSVRJQUxJWkVSIHsgMCwgMCB9Ci0KLSNkZWZpbmUgQ0tfVEZMT0NLX1RJQ0tFVF9SQ19JTkNS
CTB4MTAwMDBVCS8qIFJlYWQtc2lkZSBpbmNyZW1lbnQuICovCi0jZGVmaW5lIENLX1RGTE9DS19U
SUNLRVRfV0NfSU5DUgkweDFVCQkvKiBXcml0ZS1zaWRlIGluY3JlbWVudC4gKi8KLSNkZWZpbmUg
Q0tfVEZMT0NLX1RJQ0tFVF9XX01BU0sJCTB4ZmZmZlUJCS8qIFdyaXRlLXNpZGUgbWFzay4gKi8K
LSNkZWZpbmUgQ0tfVEZMT0NLX1RJQ0tFVF9XQ19UT1BNU0sJMHg4MDAwVQkJLyogV3JpdGUgY2xl
YXIgbWFzayBmb3Igb3ZlcmZsb3cuICovCi0jZGVmaW5lIENLX1RGTE9DS19USUNLRVRfUkNfVE9Q
TVNLCTB4ODAwMDAwMDBVCS8qIFJlYWQgY2xlYXIgbWFzayBmb3Igb3ZlcmZsb3cuICovCi0KLUNL
X0NDX0lOTElORSBzdGF0aWMgdWludDMyX3QKLWNrX3RmbG9ja190aWNrZXRfZmNhXzMyKHVpbnQz
Ml90ICp0YXJnZXQsIHVpbnQzMl90IG1hc2ssIHVpbnQzMl90IGRlbHRhKQotewotCXVpbnQzMl90
IHNuYXBzaG90ID0gY2tfcHJfbG9hZF8zMih0YXJnZXQpOwotCXVpbnQzMl90IGdvYWw7Ci0KLQlm
b3IgKDs7KSB7Ci0JCWdvYWwgPSAoc25hcHNob3QgJiB+bWFzaykgKyBkZWx0YTsKLQkJaWYgKGNr
X3ByX2Nhc18zMl92YWx1ZSh0YXJnZXQsIHNuYXBzaG90LCBnb2FsLCAmc25hcHNob3QpID09IHRy
dWUpCi0JCQlicmVhazsKLQotCQlja19wcl9zdGFsbCgpOwotCX0KLQotCXJldHVybiBzbmFwc2hv
dDsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja190ZmxvY2tfdGlja2V0X2luaXQo
c3RydWN0IGNrX3RmbG9ja190aWNrZXQgKnBmKQotewotCi0JcGYtPnJlcXVlc3QgPSBwZi0+Y29t
cGxldGlvbiA9IDA7Ci0JY2tfcHJfYmFycmllcigpOwotCXJldHVybjsKLX0KLQotQ0tfQ0NfSU5M
SU5FIHN0YXRpYyB2b2lkCi1ja190ZmxvY2tfdGlja2V0X3dyaXRlX2xvY2soc3RydWN0IGNrX3Rm
bG9ja190aWNrZXQgKmxvY2spCi17Ci0JdWludDMyX3QgcHJldmlvdXM7Ci0KLQlwcmV2aW91cyA9
IGNrX3RmbG9ja190aWNrZXRfZmNhXzMyKCZsb2NrLT5yZXF1ZXN0LCBDS19URkxPQ0tfVElDS0VU
X1dDX1RPUE1TSywKLQkgICAgQ0tfVEZMT0NLX1RJQ0tFVF9XQ19JTkNSKTsKLQlja19wcl9mZW5j
ZV9hdG9taWNfbG9hZCgpOwotCXdoaWxlIChja19wcl9sb2FkXzMyKCZsb2NrLT5jb21wbGV0aW9u
KSAhPSBwcmV2aW91cykKLQkJY2tfcHJfc3RhbGwoKTsKLQotCWNrX3ByX2ZlbmNlX2xvY2soKTsK
LQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfdGZsb2NrX3RpY2tl
dF93cml0ZV91bmxvY2soc3RydWN0IGNrX3RmbG9ja190aWNrZXQgKmxvY2spCi17Ci0KLQlja19w
cl9mZW5jZV91bmxvY2soKTsKLQlja190ZmxvY2tfdGlja2V0X2ZjYV8zMigmbG9jay0+Y29tcGxl
dGlvbiwgQ0tfVEZMT0NLX1RJQ0tFVF9XQ19UT1BNU0ssCi0JICAgIENLX1RGTE9DS19USUNLRVRf
V0NfSU5DUik7Ci0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3Rm
bG9ja190aWNrZXRfcmVhZF9sb2NrKHN0cnVjdCBja190ZmxvY2tfdGlja2V0ICpsb2NrKQotewot
CXVpbnQzMl90IHByZXZpb3VzOwotCi0JcHJldmlvdXMgPSBja190ZmxvY2tfdGlja2V0X2ZjYV8z
MigmbG9jay0+cmVxdWVzdCwKLQkgICAgQ0tfVEZMT0NLX1RJQ0tFVF9SQ19UT1BNU0ssIENLX1RG
TE9DS19USUNLRVRfUkNfSU5DUikgJgotCSAgICBDS19URkxPQ0tfVElDS0VUX1dfTUFTSzsKLQot
CWNrX3ByX2ZlbmNlX2F0b21pY19sb2FkKCk7Ci0KLQl3aGlsZSAoKGNrX3ByX2xvYWRfMzIoJmxv
Y2stPmNvbXBsZXRpb24pICYKLQkgICAgQ0tfVEZMT0NLX1RJQ0tFVF9XX01BU0spICE9IHByZXZp
b3VzKSB7Ci0JCWNrX3ByX3N0YWxsKCk7Ci0JfQotCi0JY2tfcHJfZmVuY2VfbG9jaygpOwotCXJl
dHVybjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja190ZmxvY2tfdGlja2V0X3Jl
YWRfdW5sb2NrKHN0cnVjdCBja190ZmxvY2tfdGlja2V0ICpsb2NrKQotewotCi0JY2tfcHJfZmVu
Y2VfdW5sb2NrKCk7Ci0JY2tfdGZsb2NrX3RpY2tldF9mY2FfMzIoJmxvY2stPmNvbXBsZXRpb24s
IENLX1RGTE9DS19USUNLRVRfUkNfVE9QTVNLLAotCSAgICBDS19URkxPQ0tfVElDS0VUX1JDX0lO
Q1IpOwotCXJldHVybjsKLX0KLQotI2VuZGlmIC8qIENLX1RGTE9DS19USUNLRVRfSCAqLwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MvYWFy
Y2g2NC9ja19mX3ByLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRl
L2djYy9hYXJjaDY0L2NrX2ZfcHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNl
Y2VlMDc5NDgwY2NjZDlmMjhkM2QyY2U0NTVmMmU2Mzg4OTlkOC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9pbmNsdWRlL2djYy9hYXJjaDY0L2NrX2ZfcHIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2
NyArMCwwIEBACi0vKiBETyBOT1QgRURJVC4gVGhpcyBpcyBhdXRvLWdlbmVyYXRlZCBmcm9tIGZl
YXR1cmUuc2ggKi8KLSNkZWZpbmUgQ0tfRl9QUl9BRERfMTYKLSNkZWZpbmUgQ0tfRl9QUl9BRERf
MzIKLSNkZWZpbmUgQ0tfRl9QUl9BRERfNjQKLSNkZWZpbmUgQ0tfRl9QUl9BRERfOAotI2RlZmlu
ZSBDS19GX1BSX0FERF9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfQUREX0lOVAotI2RlZmluZSBDS19G
X1BSX0FERF9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9BRERfU0hPUlQKLSNkZWZpbmUgQ0tfRl9QUl9B
RERfVUlOVAotI2RlZmluZSBDS19GX1BSX0FORF8xNgotI2RlZmluZSBDS19GX1BSX0FORF8zMgot
I2RlZmluZSBDS19GX1BSX0FORF82NAotI2RlZmluZSBDS19GX1BSX0FORF84Ci0jZGVmaW5lIENL
X0ZfUFJfQU5EX0NIQVIKLSNkZWZpbmUgQ0tfRl9QUl9BTkRfSU5UCi0jZGVmaW5lIENLX0ZfUFJf
QU5EX1BUUgotI2RlZmluZSBDS19GX1BSX0FORF9TSE9SVAotI2RlZmluZSBDS19GX1BSX0FORF9V
SU5UCi0jZGVmaW5lIENLX0ZfUFJfQkFSUklFUgotI2RlZmluZSBDS19GX1BSX0NBU18xNgotI2Rl
ZmluZSBDS19GX1BSX0NBU18xNl9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU18zMgotI2RlZmlu
ZSBDS19GX1BSX0NBU18zMl9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU182NAotI2RlZmluZSBD
S19GX1BSX0NBU182NF9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU182NF8yCi0jZGVmaW5lIENL
X0ZfUFJfQ0FTXzY0XzJfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfRE9VQkxFCi0jZGVmaW5l
IENLX0ZfUFJfQ0FTX0RPVUJMRV9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU184Ci0jZGVmaW5l
IENLX0ZfUFJfQ0FTXzhfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfQ0hBUgotI2RlZmluZSBD
S19GX1BSX0NBU19DSEFSX1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX0lOVAotI2RlZmluZSBD
S19GX1BSX0NBU19JTlRfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfUFRSCi0jZGVmaW5lIENL
X0ZfUFJfQ0FTX1BUUl8yCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX1BUUl8yX1ZBTFVFCi0jZGVmaW5l
IENLX0ZfUFJfQ0FTX1BUUl9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU19TSE9SVAotI2RlZmlu
ZSBDS19GX1BSX0NBU19TSE9SVF9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU19VSU5UCi0jZGVm
aW5lIENLX0ZfUFJfQ0FTX1VJTlRfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfMTYKLSNkZWZp
bmUgQ0tfRl9QUl9ERUNfMzIKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfNjQKLSNkZWZpbmUgQ0tfRl9Q
Ul9ERUNfOAotI2RlZmluZSBDS19GX1BSX0RFQ19DSEFSCi0jZGVmaW5lIENLX0ZfUFJfREVDX0lO
VAotI2RlZmluZSBDS19GX1BSX0RFQ19QVFIKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfU0hPUlQKLSNk
ZWZpbmUgQ0tfRl9QUl9ERUNfVUlOVAotI2RlZmluZSBDS19GX1BSX0ZBQV8xNgotI2RlZmluZSBD
S19GX1BSX0ZBQV8zMgotI2RlZmluZSBDS19GX1BSX0ZBQV82NAotI2RlZmluZSBDS19GX1BSX0ZB
QV84Ci0jZGVmaW5lIENLX0ZfUFJfRkFBX0NIQVIKLSNkZWZpbmUgQ0tfRl9QUl9GQUFfSU5UCi0j
ZGVmaW5lIENLX0ZfUFJfRkFBX1BUUgotI2RlZmluZSBDS19GX1BSX0ZBQV9TSE9SVAotI2RlZmlu
ZSBDS19GX1BSX0ZBQV9VSU5UCi0jZGVmaW5lIENLX0ZfUFJfRkFTXzE2Ci0jZGVmaW5lIENLX0Zf
UFJfRkFTXzMyCi0jZGVmaW5lIENLX0ZfUFJfRkFTXzY0Ci0jZGVmaW5lIENLX0ZfUFJfRkFTXzgK
LSNkZWZpbmUgQ0tfRl9QUl9GQVNfQ0hBUgotI2RlZmluZSBDS19GX1BSX0ZBU19JTlQKLSNkZWZp
bmUgQ0tfRl9QUl9GQVNfUFRSCi0jZGVmaW5lIENLX0ZfUFJfRkFTX1NIT1JUCi0jZGVmaW5lIENL
X0ZfUFJfRkFTX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9GRU5DRV9BVE9NSUMKLSNkZWZpbmUgQ0tf
Rl9QUl9GRU5DRV9BVE9NSUNfTE9BRAotI2RlZmluZSBDS19GX1BSX0ZFTkNFX0FUT01JQ19TVE9S
RQotI2RlZmluZSBDS19GX1BSX0ZFTkNFX0xPQUQKLSNkZWZpbmUgQ0tfRl9QUl9GRU5DRV9MT0FE
X0FUT01JQwotI2RlZmluZSBDS19GX1BSX0ZFTkNFX0xPQURfREVQRU5EUwotI2RlZmluZSBDS19G
X1BSX0ZFTkNFX0xPQURfU1RPUkUKLSNkZWZpbmUgQ0tfRl9QUl9GRU5DRV9NRU1PUlkKLSNkZWZp
bmUgQ0tfRl9QUl9GRU5DRV9TVE9SRQotI2RlZmluZSBDS19GX1BSX0ZFTkNFX1NUT1JFX0FUT01J
QwotI2RlZmluZSBDS19GX1BSX0ZFTkNFX1NUT1JFX0xPQUQKLSNkZWZpbmUgQ0tfRl9QUl9GRU5D
RV9TVFJJQ1RfQVRPTUlDCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX0FUT01JQ19MT0FE
Ci0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX0FUT01JQ19TVE9SRQotI2RlZmluZSBDS19G
X1BSX0ZFTkNFX1NUUklDVF9MT0FECi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX0xPQURf
QVRPTUlDCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX0xPQURfU1RPUkUKLSNkZWZpbmUg
Q0tfRl9QUl9GRU5DRV9TVFJJQ1RfTUVNT1JZCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNU
X1NUT1JFCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX1NUT1JFX0FUT01JQwotI2RlZmlu
ZSBDS19GX1BSX0ZFTkNFX1NUUklDVF9TVE9SRV9MT0FECi0jZGVmaW5lIENLX0ZfUFJfSU5DXzE2
Ci0jZGVmaW5lIENLX0ZfUFJfSU5DXzMyCi0jZGVmaW5lIENLX0ZfUFJfSU5DXzY0Ci0jZGVmaW5l
IENLX0ZfUFJfSU5DXzgKLSNkZWZpbmUgQ0tfRl9QUl9JTkNfQ0hBUgotI2RlZmluZSBDS19GX1BS
X0lOQ19JTlQKLSNkZWZpbmUgQ0tfRl9QUl9JTkNfUFRSCi0jZGVmaW5lIENLX0ZfUFJfSU5DX1NI
T1JUCi0jZGVmaW5lIENLX0ZfUFJfSU5DX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEXzE2Ci0j
ZGVmaW5lIENLX0ZfUFJfTE9BRF8zMgotI2RlZmluZSBDS19GX1BSX0xPQURfNjQKLSNkZWZpbmUg
Q0tfRl9QUl9MT0FEX0RPVUJMRQotI2RlZmluZSBDS19GX1BSX0xPQURfOAotI2RlZmluZSBDS19G
X1BSX0xPQURfQ0hBUgotI2RlZmluZSBDS19GX1BSX0xPQURfSU5UCi0jZGVmaW5lIENLX0ZfUFJf
TE9BRF9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEX1NIT1JUCi0jZGVmaW5lIENLX0ZfUFJfTE9B
RF9VSU5UCi0jZGVmaW5lIENLX0ZfUFJfTkVHXzE2Ci0jZGVmaW5lIENLX0ZfUFJfTkVHXzMyCi0j
ZGVmaW5lIENLX0ZfUFJfTkVHXzY0Ci0jZGVmaW5lIENLX0ZfUFJfTkVHXzgKLSNkZWZpbmUgQ0tf
Rl9QUl9ORUdfQ0hBUgotI2RlZmluZSBDS19GX1BSX05FR19JTlQKLSNkZWZpbmUgQ0tfRl9QUl9O
RUdfUFRSCi0jZGVmaW5lIENLX0ZfUFJfTkVHX1NIT1JUCi0jZGVmaW5lIENLX0ZfUFJfTkVHX1VJ
TlQKLSNkZWZpbmUgQ0tfRl9QUl9OT1RfMTYKLSNkZWZpbmUgQ0tfRl9QUl9OT1RfMzIKLSNkZWZp
bmUgQ0tfRl9QUl9OT1RfNjQKLSNkZWZpbmUgQ0tfRl9QUl9OT1RfOAotI2RlZmluZSBDS19GX1BS
X05PVF9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfTk9UX0lOVAotI2RlZmluZSBDS19GX1BSX05PVF9Q
VFIKLSNkZWZpbmUgQ0tfRl9QUl9OT1RfU0hPUlQKLSNkZWZpbmUgQ0tfRl9QUl9OT1RfVUlOVAot
I2RlZmluZSBDS19GX1BSX09SXzE2Ci0jZGVmaW5lIENLX0ZfUFJfT1JfMzIKLSNkZWZpbmUgQ0tf
Rl9QUl9PUl82NAotI2RlZmluZSBDS19GX1BSX09SXzgKLSNkZWZpbmUgQ0tfRl9QUl9PUl9DSEFS
Ci0jZGVmaW5lIENLX0ZfUFJfT1JfSU5UCi0jZGVmaW5lIENLX0ZfUFJfT1JfUFRSCi0jZGVmaW5l
IENLX0ZfUFJfT1JfU0hPUlQKLSNkZWZpbmUgQ0tfRl9QUl9PUl9VSU5UCi0jZGVmaW5lIENLX0Zf
UFJfU1RBTEwKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV8xNgotI2RlZmluZSBDS19GX1BSX1NUT1JF
XzMyCi0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfNjQKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV9ET1VC
TEUKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV84Ci0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfQ0hBUgot
I2RlZmluZSBDS19GX1BSX1NUT1JFX0lOVAotI2RlZmluZSBDS19GX1BSX1NUT1JFX1BUUgotI2Rl
ZmluZSBDS19GX1BSX1NUT1JFX1NIT1JUCi0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfVUlOVAotI2Rl
ZmluZSBDS19GX1BSX1NVQl8xNgotI2RlZmluZSBDS19GX1BSX1NVQl8zMgotI2RlZmluZSBDS19G
X1BSX1NVQl82NAotI2RlZmluZSBDS19GX1BSX1NVQl84Ci0jZGVmaW5lIENLX0ZfUFJfU1VCX0NI
QVIKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfSU5UCi0jZGVmaW5lIENLX0ZfUFJfU1VCX1BUUgotI2Rl
ZmluZSBDS19GX1BSX1NVQl9TSE9SVAotI2RlZmluZSBDS19GX1BSX1NVQl9VSU5UCi0jZGVmaW5l
IENLX0ZfUFJfWE9SXzE2Ci0jZGVmaW5lIENLX0ZfUFJfWE9SXzMyCi0jZGVmaW5lIENLX0ZfUFJf
WE9SXzY0Ci0jZGVmaW5lIENLX0ZfUFJfWE9SXzgKLSNkZWZpbmUgQ0tfRl9QUl9YT1JfQ0hBUgot
I2RlZmluZSBDS19GX1BSX1hPUl9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9YT1JfUFRSCi0jZGVmaW5l
IENLX0ZfUFJfWE9SX1NIT1JUCi0jZGVmaW5lIENLX0ZfUFJfWE9SX1VJTlQKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvZ2NjL2FhcmNoNjQvY2tf
cHIuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvZ2NjL2FhcmNo
NjQvY2tfcHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTczOWM0ZDViMThlYmFl
Y2FhOGZlYWFmZWQzMDI4MGQzMDEzYzQ0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRl
L2djYy9hYXJjaDY0L2NrX3ByLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAyMDA5LTIwMTYgU2FteSBBbCBCYWhyYS4KLSAqIENvcHlyaWdodCAyMDEz
LTIwMTYgT2xpdmllciBIb3VjaGFyZC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBDS19QUl9BQVJDSDY0X0gKLSNkZWZpbmUgQ0tfUFJfQUFSQ0g2NF9ICi0KLSNpZm5kZWYg
Q0tfUFJfSAotI2Vycm9yIERvIG5vdCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSwgdXNlIGNr
X3ByLmgKLSNlbmRpZgotCi0jaW5jbHVkZSA8Y2tfY2MuaD4KLSNpbmNsdWRlIDxja19tZC5oPgot
Ci0vKgotICogVGhlIGZvbGxvd2luZyByZXByZXNlbnQgc3VwcG9ydGVkIGF0b21pYyBvcGVyYXRp
b25zLgotICogVGhlc2Ugb3BlcmF0aW9ucyBtYXkgYmUgZW11bGF0ZWQuCi0gKi8KLSNpbmNsdWRl
ICJja19mX3ByLmgiCi0KLS8qCi0gKiBNaW5pbXVtIGludGVyZmFjZSByZXF1aXJlbWVudCBtZXQu
Ci0gKi8KLSNkZWZpbmUgQ0tfRl9QUgotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3By
X3N0YWxsKHZvaWQpCi17Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIiA6OjogIm1lbW9yeSIp
OwotCXJldHVybjsKLX0KLQotI2RlZmluZSBDS19ETUJfU1kgX19hc20gX192b2xhdGlsZSgiZG1i
IGlzaCIgOiA6ICJyIiAoMCkgOiAibWVtb3J5IikKLSNkZWZpbmUgQ0tfRE1CX0xEIF9fYXNtIF9f
dm9sYXRpbGUoImRtYiBpc2hsZCIgOiA6ICJyIiAoMCkgOiAibWVtb3J5IikKLSNkZWZpbmUgQ0tf
RE1CX1NUIF9fYXNtIF9fdm9sYXRpbGUoImRtYiBpc2hzdCIgOiA6ICJyIiAoMCkgOiAibWVtb3J5
IikKLQotI2RlZmluZSBDS19QUl9GRU5DRShULCBJKQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRp
YyB2b2lkCQkJXAotCWNrX3ByX2ZlbmNlX3N0cmljdF8jI1Qodm9pZCkJCQlcCi0JewkJCQkJCVwK
LQkJSTsJCQkJCVwKLQl9Ci0KLUNLX1BSX0ZFTkNFKGF0b21pYywgQ0tfRE1CX1NUKQotQ0tfUFJf
RkVOQ0UoYXRvbWljX3N0b3JlLCBDS19ETUJfU1QpCi1DS19QUl9GRU5DRShhdG9taWNfbG9hZCwg
Q0tfRE1CX1NZKQotQ0tfUFJfRkVOQ0Uoc3RvcmVfYXRvbWljLCBDS19ETUJfU1QpCi1DS19QUl9G
RU5DRShsb2FkX2F0b21pYywgQ0tfRE1CX1NZKQotQ0tfUFJfRkVOQ0Uoc3RvcmUsIENLX0RNQl9T
VCkKLUNLX1BSX0ZFTkNFKHN0b3JlX2xvYWQsIENLX0RNQl9TWSkKLUNLX1BSX0ZFTkNFKGxvYWQs
IENLX0RNQl9MRCkKLUNLX1BSX0ZFTkNFKGxvYWRfc3RvcmUsIENLX0RNQl9TWSkKLUNLX1BSX0ZF
TkNFKG1lbW9yeSwgQ0tfRE1CX1NZKQotQ0tfUFJfRkVOQ0UoYWNxdWlyZSwgQ0tfRE1CX1NZKQot
Q0tfUFJfRkVOQ0UocmVsZWFzZSwgQ0tfRE1CX1NZKQotQ0tfUFJfRkVOQ0UoYWNxcmVsLCBDS19E
TUJfU1kpCi1DS19QUl9GRU5DRShsb2NrLCBDS19ETUJfU1kpCi1DS19QUl9GRU5DRSh1bmxvY2ss
IENLX0RNQl9TWSkKLQotI3VuZGVmIENLX1BSX0ZFTkNFCi0KLSN1bmRlZiBDS19ETUJfU0kKLSN1
bmRlZiBDS19ETUJfTEQKLSN1bmRlZiBDS19ETUJfU1QKLQotI2RlZmluZSBDS19QUl9MT0FEKFMs
IE0sIFQsIEkpCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIFQJCQkJCVwKLQlja19wcl9tZF9s
b2FkXyMjUyhjb25zdCBNICp0YXJnZXQpCQkJXAotCXsJCQkJCQkJXAotCQlsb25nIHIgPSAwOwkJ
CQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhJICIgJXcwLCBbJTFdOyIJCVwKLQkJCQkJOiAi
PXIiIChyKQkJXAotCQkJCQk6ICJyIiAgKHRhcmdldCkJCVwKLQkJCQkJOiAibWVtb3J5Iik7CQlc
Ci0JCXJldHVybiAoKFQpcik7CQkJCQlcCi0JfQotI2RlZmluZSBDS19QUl9MT0FEXzY0KFMsIE0s
IFQsIEkpCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIFQJCQkJCVwKLQlja19wcl9tZF9sb2Fk
XyMjUyhjb25zdCBNICp0YXJnZXQpCQkJXAotCXsJCQkJCQkJXAotCQlsb25nIHIgPSAwOwkJCQkJ
XAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhJICIgJTAsIFslMV07IgkJXAotCQkJCQk6ICI9ciIg
KHIpCQlcCi0JCQkJCTogInIiICAodGFyZ2V0KQkJXAotCQkJCQk6ICJtZW1vcnkiKTsJCVwKLQkJ
cmV0dXJuICgoVClyKTsJCQkJCVwKLQl9Ci0KLQotQ0tfUFJfTE9BRF82NChwdHIsIHZvaWQsIHZv
aWQgKiwgImxkciIpCi0KLSNkZWZpbmUgQ0tfUFJfTE9BRF9TKFMsIFQsIEkpIENLX1BSX0xPQUQo
UywgVCwgVCwgSSkKLSNkZWZpbmUgQ0tfUFJfTE9BRF9TXzY0KFMsIFQsIEkpIENLX1BSX0xPQURf
NjQoUywgVCwgVCwgSSkKLQotQ0tfUFJfTE9BRF9TXzY0KDY0LCB1aW50NjRfdCwgImxkciIpCi1D
S19QUl9MT0FEX1MoMzIsIHVpbnQzMl90LCAibGRyIikKLUNLX1BSX0xPQURfUygxNiwgdWludDE2
X3QsICJsZHJoIikKLUNLX1BSX0xPQURfUyg4LCB1aW50OF90LCAibGRyYiIpCi1DS19QUl9MT0FE
X1ModWludCwgdW5zaWduZWQgaW50LCAibGRyIikKLUNLX1BSX0xPQURfUyhpbnQsIGludCwgImxk
ciIpCi1DS19QUl9MT0FEX1Moc2hvcnQsIHNob3J0LCAibGRyaCIpCi1DS19QUl9MT0FEX1MoY2hh
ciwgY2hhciwgImxkcmIiKQotI2lmbmRlZiBDS19QUl9ESVNBQkxFX0RPVUJMRQotQ0tfUFJfTE9B
RF9TXzY0KGRvdWJsZSwgZG91YmxlLCAibGRyIikKLSNlbmRpZgotCi0jdW5kZWYgQ0tfUFJfTE9B
RF9TCi0jdW5kZWYgQ0tfUFJfTE9BRF9TXzY0Ci0jdW5kZWYgQ0tfUFJfTE9BRAotI3VuZGVmIENL
X1BSX0xBT0RfNjQKLQotI2RlZmluZSBDS19QUl9TVE9SRShTLCBNLCBULCBJKQkJCQkJXAotCUNL
X0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCQlcCi0JY2tfcHJfbWRfc3RvcmVfIyNTKE0gKnRhcmdl
dCwgVCB2KQkJCVwKLQl7CQkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oSSAiICV3MSwg
WyUwXSIJCVwKLQkJCQkJOgkJCVwKLQkJCQkJOiAiciIgKHRhcmdldCksCQlcCi0JCQkJCSAgInIi
ICh2KQkJXAotCQkJCQk6ICJtZW1vcnkiKTsJCVwKLQkJcmV0dXJuOwkJCQkJCVwKLQl9Ci0jZGVm
aW5lIENLX1BSX1NUT1JFXzY0KFMsIE0sIFQsIEkpCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGlj
IHZvaWQJCQkJXAotCWNrX3ByX21kX3N0b3JlXyMjUyhNICp0YXJnZXQsIFQgdikJCQlcCi0JewkJ
CQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKEkgIiAlMSwgWyUwXSIJCVwKLQkJCQkJOgkJ
CVwKLQkJCQkJOiAiciIgKHRhcmdldCksCQlcCi0JCQkJCSAgInIiICh2KQkJXAotCQkJCQk6ICJt
ZW1vcnkiKTsJCVwKLQkJcmV0dXJuOwkJCQkJCVwKLQl9Ci0KLUNLX1BSX1NUT1JFXzY0KHB0ciwg
dm9pZCwgY29uc3Qgdm9pZCAqLCAic3RyIikKLQotI2RlZmluZSBDS19QUl9TVE9SRV9TKFMsIFQs
IEkpIENLX1BSX1NUT1JFKFMsIFQsIFQsIEkpCi0jZGVmaW5lIENLX1BSX1NUT1JFX1NfNjQoUywg
VCwgSSkgQ0tfUFJfU1RPUkVfNjQoUywgVCwgVCwgSSkKLQotQ0tfUFJfU1RPUkVfU182NCg2NCwg
dWludDY0X3QsICJzdHIiKQotQ0tfUFJfU1RPUkVfUygzMiwgdWludDMyX3QsICJzdHIiKQotQ0tf
UFJfU1RPUkVfUygxNiwgdWludDE2X3QsICJzdHJoIikKLUNLX1BSX1NUT1JFX1MoOCwgdWludDhf
dCwgInN0cmIiKQotQ0tfUFJfU1RPUkVfUyh1aW50LCB1bnNpZ25lZCBpbnQsICJzdHIiKQotQ0tf
UFJfU1RPUkVfUyhpbnQsIGludCwgInN0ciIpCi1DS19QUl9TVE9SRV9TKHNob3J0LCBzaG9ydCwg
InN0cmgiKQotQ0tfUFJfU1RPUkVfUyhjaGFyLCBjaGFyLCAic3RyYiIpCi0jaWZuZGVmIENLX1BS
X0RJU0FCTEVfRE9VQkxFCi1DS19QUl9TVE9SRV9TXzY0KGRvdWJsZSwgZG91YmxlLCAic3RyIikK
LSNlbmRpZgotCi0jdW5kZWYgQ0tfUFJfU1RPUkVfUwotI3VuZGVmIENLX1BSX1NUT1JFX1NfNjQK
LSN1bmRlZiBDS19QUl9TVE9SRQotI3VuZGVmIENLX1BSX1NUT1JFXzY0Ci0KLSNpZmRlZiBDS19N
RF9MU0VfRU5BQkxFCi0jaW5jbHVkZSAiY2tfcHJfbHNlLmgiCi0jZWxzZQotI2luY2x1ZGUgImNr
X3ByX2xsc2MuaCIKLSNlbmRpZgotCi0vKgotICogY2tfcHJfbmVnXyooKSBmdW5jdGlvbnMgY2Fu
IG9ubHkgYmUgaW1wbGVtZW50ZWQgdmlhIExML1NDLCBhcyB0aGVyZSBhcmUgbm8KLSAqIExTRSBh
bHRlcm5hdGl2ZXMuCi0gKi8KLSNkZWZpbmUgQ0tfUFJfTkVHKE4sIE0sIFQsIFcsIFIpCQkJCVwK
LSAgICAgICAgQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJCVwKLSAgICAgICAgY2tfcHJfbmVn
XyMjTihNICp0YXJnZXQpCQkJCVwKLSAgICAgICAgewkJCQkJCQlcCi0gICAgICAgICAgICAgICAg
VCBwcmV2aW91cyA9IDA7CQkJCQlcCi0gICAgICAgICAgICAgICAgVCB0bXAgPSAwOwkJCQkJXAot
ICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIxOiIJCQlcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkeHIiIFcgIiAlIiBSICIwLCBbJTJdOyIJXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWcgJSIgUiAiMCwgJSIgUiAi
MDsiCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3R4ciIgVyAiICV3
MSwgJSIgUiAiMCwgWyUyXTsiCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiY2JueiAldzEsIDFiOyIJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6ICI9JnIiIChwcmV2aW91cyksCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICI9JnIiICh0bXApCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiAiciIgICAodGFyZ2V0KQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiAibWVtb3J5IiwgImNjIik7CVwKLSAgICAgICAgICAgICAgICByZXR1
cm47CQkJCQkJXAotICAgICAgICB9Ci0KLUNLX1BSX05FRyhwdHIsIHZvaWQsIHZvaWQgKiwgIiIs
ICIiKQotQ0tfUFJfTkVHKDY0LCB1aW50NjRfdCwgdWludDY0X3QsICIiLCAiIikKLQotI2RlZmlu
ZSBDS19QUl9ORUdfUyhTLCBULCBXKQkJCQkJXAotICAgICAgICBDS19QUl9ORUcoUywgVCwgVCwg
VywgInciKQkJCQlcCi0KLUNLX1BSX05FR19TKDMyLCB1aW50MzJfdCwgIiIpCi1DS19QUl9ORUdf
Uyh1aW50LCB1bnNpZ25lZCBpbnQsICIiKQotQ0tfUFJfTkVHX1MoaW50LCBpbnQsICIiKQotQ0tf
UFJfTkVHX1MoMTYsIHVpbnQxNl90LCAiaCIpCi1DS19QUl9ORUdfUyg4LCB1aW50OF90LCAiYiIp
Ci1DS19QUl9ORUdfUyhzaG9ydCwgc2hvcnQsICJoIikKLUNLX1BSX05FR19TKGNoYXIsIGNoYXIs
ICJiIikKLQotI3VuZGVmIENLX1BSX05FR19TCi0jdW5kZWYgQ0tfUFJfTkVHCi0KLSNlbmRpZiAv
KiBDS19QUl9BQVJDSDY0X0ggKi8KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MvYWFyY2g2NC9ja19wcl9sbHNjLmggYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy9hYXJjaDY0L2NrX3ByX2xsc2MuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE0ZTMwOTBmYTNhM2VmZWY4MDJlNzlkZGE1
ZGRkYTg3MDg3NzAzOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy9hYXJjaDY0
L2NrX3ByX2xsc2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IDIwMDktMjAxNiBTYW15IEFsIEJhaHJhLgotICogQ29weXJpZ2h0IDIwMTMtMjAxNiBP
bGl2aWVyIEhvdWNoYXJkLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0g
KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
Ci0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENL
X1BSX0FBUkNINjRfTExTQ19ICi0jZGVmaW5lIENLX1BSX0FBUkNINjRfTExTQ19ICi0KLSNpZm5k
ZWYgQ0tfUFJfSAotI2Vycm9yIERvIG5vdCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSwgdXNl
IGNrX3ByLmgKLSNlbmRpZgotCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wKLWNrX3ByX2Nhc182
NF8yX3ZhbHVlKHVpbnQ2NF90IHRhcmdldFsyXSwgdWludDY0X3QgY29tcGFyZVsyXSwgdWludDY0
X3Qgc2V0WzJdLCB1aW50NjRfdCB2YWx1ZVsyXSkKLXsKLSAgICAgICAgdWludDY0X3QgdG1wMSwg
dG1wMjsKLQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiMToiCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJsZHhwICUwLCAlMSwgWyU0XTsiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJtb3YgJTIsICUwOyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1v
diAlMywgJTE7IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW9yICUwLCAlMCwgJTU7
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW9yICUxLCAlMSwgJTY7IgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAib3JyICUxLCAlMCwgJTE7IgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAibW92ICV3MCwgIzA7IgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiY2JueiAlMSwgMmY7IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3R4cCAldzAs
ICU3LCAlOCwgWyU0XTsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYm56ICV3MCwg
MWI7IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ICV3MCwgIzE7IgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiMjoiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogIj0mciIgKHRtcDEpLCAiPSZyIiAodG1wMiksICI9JnIiICh2YWx1ZVswXSksICI9JnIiICh2
YWx1ZVsxXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIgKHRhcmdldCksICJy
IiAoY29tcGFyZVswXSksICJyIiAoY29tcGFyZVsxXSksICJyIiAoc2V0WzBdKSwgInIiIChzZXRb
MV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImNjIiwgIm1lbW9yeSIpOwotCi0g
ICAgICAgIHJldHVybiAodG1wMSk7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tf
cHJfY2FzX3B0cl8yX3ZhbHVlKHZvaWQgKnRhcmdldCwgdm9pZCAqY29tcGFyZSwgdm9pZCAqc2V0
LCB2b2lkICp2YWx1ZSkKLXsKLSAgICAgICAgcmV0dXJuIChja19wcl9jYXNfNjRfMl92YWx1ZShD
S19DUFBfQ0FTVCh1aW50NjRfdCAqLCB0YXJnZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDS19DUFBfQ0FTVCh1aW50NjRfdCAqLCBjb21wYXJlKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0tfQ1BQX0NBU1QodWludDY0X3QgKiwgc2V0KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0tfQ1BQX0NBU1QodWludDY0X3QgKiwg
dmFsdWUpKSk7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfcHJfY2FzXzY0XzIo
dWludDY0X3QgdGFyZ2V0WzJdLCB1aW50NjRfdCBjb21wYXJlWzJdLCB1aW50NjRfdCBzZXRbMl0p
Ci17Ci0gICAgICAgIHVpbnQ2NF90IHRtcDEsIHRtcDI7Ci0KLSAgICAgICAgX19hc21fXyBfX3Zv
bGF0aWxlX18oIjE6IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGR4cCAlMCwgJTEs
IFslMl07IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW9yICUwLCAlMCwgJTM7Igot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW9yICUxLCAlMSwgJTQ7IgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAib3JyICUxLCAlMCwgJTE7IgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAibW92ICV3MCwgIzA7IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Y2JueiAlMSwgMmY7IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3R4cCAldzAsICU1
LCAlNiwgWyUyXTsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYm56ICV3MCwgMWI7
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW92ICV3MCwgIzE7IgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiMjoiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
Ij0mciIgKHRtcDEpLCAiPSZyIiAodG1wMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAiciIgKHRhcmdldCksICJyIiAoY29tcGFyZVswXSksICJyIiAoY29tcGFyZVsxXSksICJyIiAo
c2V0WzBdKSwgInIiIChzZXRbMV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImNj
IiwgIm1lbW9yeSIpOwotCi0gICAgICAgIHJldHVybiAodG1wMSk7Ci19Ci1DS19DQ19JTkxJTkUg
c3RhdGljIGJvb2wKLWNrX3ByX2Nhc19wdHJfMih2b2lkICp0YXJnZXQsIHZvaWQgKmNvbXBhcmUs
IHZvaWQgKnNldCkKLXsKLSAgICAgICAgcmV0dXJuIChja19wcl9jYXNfNjRfMihDS19DUFBfQ0FT
VCh1aW50NjRfdCAqLCB0YXJnZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDS19D
UFBfQ0FTVCh1aW50NjRfdCAqLCBjb21wYXJlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ0tfQ1BQX0NBU1QodWludDY0X3QgKiwgc2V0KSkpOwotfQotCi0KLSNkZWZpbmUgQ0tfUFJf
Q0FTKE4sIE0sIFQsIFcsIFIpCQkJCQlcCi0gICAgICAgIENLX0NDX0lOTElORSBzdGF0aWMgYm9v
bAkJCQkJXAotICAgICAgICBja19wcl9jYXNfIyNOIyNfdmFsdWUoTSAqdGFyZ2V0LCBUIGNvbXBh
cmUsIFQgc2V0LCBNICp2YWx1ZSkJXAotICAgICAgICB7CQkJCQkJCQlcCi0gICAgICAgICAgICAg
ICAgVCBwcmV2aW91czsJCQkJCQlcCi0gICAgICAgICAgICAgICAgVCB0bXA7CQkJCQkJCVwKLSAg
ICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiMToiCQkJCVwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAibGR4ciIgVyAiICUiIFIgIjAsIFslMl07IgkJXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbXAgICUiIFIgIjAsICUiIFIg
IjQ7IgkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiLm5lIDJmOyIJ
CQkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHhyIiBXICIgJXcx
LCAlIiBSICIzLCBbJTJdOyIJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJjYm56ICV3MSwgMWI7IgkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiMjoiCQkJCVwKLSAgICAgICAgICAgICAgICAgICAgOiAiPSZyIiAocHJldmlvdXMpLAkJCQkJ
XAotICAgICAgICAgICAgICAgICAgICAiPSZyIiAodG1wKQkJCQkJCVwKLSAgICAgICAgICAgICAg
ICAgICAgOiAiciIgICAodGFyZ2V0KSwJCQkJCVwKLSAgICAgICAgICAgICAgICAgICAgInIiICAg
KHNldCksCQkJCQlcCi0gICAgICAgICAgICAgICAgICAgICJyIiAgIChjb21wYXJlKQkJCQkJXAot
ICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiLCAiY2MiKTsJCQkJCVwKLSAgICAgICAgICAg
ICAgICAqKFQgKil2YWx1ZSA9IHByZXZpb3VzOwkJCQkJXAotICAgICAgICAgICAgICAgIHJldHVy
biAocHJldmlvdXMgPT0gY29tcGFyZSk7CQkJCVwKLSAgICAgICAgfQkJCQkJCQkJXAotICAgICAg
ICBDS19DQ19JTkxJTkUgc3RhdGljIGJvb2wJCQkJCVwKLSAgICAgICAgY2tfcHJfY2FzXyMjTihN
ICp0YXJnZXQsIFQgY29tcGFyZSwgVCBzZXQpCQkJXAotICAgICAgICB7CQkJCQkJCQlcCi0gICAg
ICAgICAgICAgICAgVCBwcmV2aW91czsJCQkJCQlcCi0gICAgICAgICAgICAgICAgVCB0bXA7CQkJ
CQkJCVwKLSAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMToiCQkJCVwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAibGR4ciIgVyAiICUiIFIgIjAsIFslMl07IgkJXAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbXAgICUiIFIgIjAsICUiIFIgIjQ7
IgkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiLm5lIDJmOyIJCQkJ
XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHhyIiBXICIgJXcxLCAl
IiBSICIzLCBbJTJdOyIJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJj
Ym56ICV3MSwgMWI7IgkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
MjoiCQkJCVwKLSAgICAgICAgICAgICAgICAgICAgOiAiPSZyIiAocHJldmlvdXMpLAkJCQkJXAot
ICAgICAgICAgICAgICAgICAgICAiPSZyIiAodG1wKQkJCQkJCVwKLSAgICAgICAgICAgICAgICAg
ICAgOiAiciIgICAodGFyZ2V0KSwJCQkJCVwKLSAgICAgICAgICAgICAgICAgICAgInIiICAgKHNl
dCksCQkJCQlcCi0gICAgICAgICAgICAgICAgICAgICJyIiAgIChjb21wYXJlKQkJCQkJXAotICAg
ICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiLCAiY2MiKTsJCQkJCVwKLSAgICAgICAgICAgICAg
ICByZXR1cm4gKHByZXZpb3VzID09IGNvbXBhcmUpOwkJCQlcCi0gICAgICAgIH0KLQotQ0tfUFJf
Q0FTKHB0ciwgdm9pZCwgdm9pZCAqLCAiIiwgIiIpCi0KLSNkZWZpbmUgQ0tfUFJfQ0FTX1MoTiwg
TSwgVywgUikJQ0tfUFJfQ0FTKE4sIE0sIE0sIFcsIFIpCi1DS19QUl9DQVNfUyg2NCwgdWludDY0
X3QsICIiLCAiIikKLSNpZm5kZWYgQ0tfUFJfRElTQUJMRV9ET1VCTEUKLUNLX1BSX0NBU19TKGRv
dWJsZSwgZG91YmxlLCAiIiwgIiIpCi0jZW5kaWYKLUNLX1BSX0NBU19TKDMyLCB1aW50MzJfdCwg
IiIsICJ3IikKLUNLX1BSX0NBU19TKHVpbnQsIHVuc2lnbmVkIGludCwgIiIsICJ3IikKLUNLX1BS
X0NBU19TKGludCwgaW50LCAiIiwgInciKQotQ0tfUFJfQ0FTX1MoMTYsIHVpbnQxNl90LCAiaCIs
ICJ3IikKLUNLX1BSX0NBU19TKDgsIHVpbnQ4X3QsICJiIiwgInciKQotQ0tfUFJfQ0FTX1Moc2hv
cnQsIHNob3J0LCAiaCIsICJ3IikKLUNLX1BSX0NBU19TKGNoYXIsIGNoYXIsICJiIiwgInciKQot
Ci0KLSN1bmRlZiBDS19QUl9DQVNfUwotI3VuZGVmIENLX1BSX0NBUwotCi0jZGVmaW5lIENLX1BS
X0ZBUyhOLCBNLCBULCBXLCBSKQkJCQlcCi0gICAgICAgIENLX0NDX0lOTElORSBzdGF0aWMgVAkJ
CQkJXAotICAgICAgICBja19wcl9mYXNfIyNOKE0gKnRhcmdldCwgVCB2KQkJCQlcCi0gICAgICAg
IHsJCQkJCQkJXAotICAgICAgICAgICAgICAgIFQgcHJldmlvdXM7CQkJCQlcCi0gICAgICAgICAg
ICAgICAgVCB0bXA7CQkJCQkJXAotICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9f
KCIxOiIJCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkeHIiIFcg
IiAlIiBSICIwLCBbJTJdOyIJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJzdHhyIiBXICIgJXcxLCAlIiBSICIzLCBbJTJdOyJcCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImNibnogJXcxLCAxYjsiCQlcCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiAiPSZyIiAocHJldmlvdXMpLAlcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiPSZyIiAodG1wKSAJCVwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAgICh0YXJnZXQpLAlcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciIgICAodikJCVwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiLCAiY2MiKTsJXAotICAgICAg
ICAgICAgICAgIHJldHVybiAocHJldmlvdXMpOwkJCQlcCi0gICAgICAgIH0KLQotQ0tfUFJfRkFT
KDY0LCB1aW50NjRfdCwgdWludDY0X3QsICIiLCAiIikKLUNLX1BSX0ZBUygzMiwgdWludDMyX3Qs
IHVpbnQzMl90LCAiIiwgInciKQotQ0tfUFJfRkFTKHB0ciwgdm9pZCwgdm9pZCAqLCAiIiwgIiIp
Ci1DS19QUl9GQVMoaW50LCBpbnQsIGludCwgIiIsICJ3IikKLUNLX1BSX0ZBUyh1aW50LCB1bnNp
Z25lZCBpbnQsIHVuc2lnbmVkIGludCwgIiIsICJ3IikKLUNLX1BSX0ZBUygxNiwgdWludDE2X3Qs
IHVpbnQxNl90LCAiaCIsICJ3IikKLUNLX1BSX0ZBUyg4LCB1aW50OF90LCB1aW50OF90LCAiYiIs
ICJ3IikKLUNLX1BSX0ZBUyhzaG9ydCwgc2hvcnQsIHNob3J0LCAiaCIsICJ3IikKLUNLX1BSX0ZB
UyhjaGFyLCBjaGFyLCBjaGFyLCAiYiIsICJ3IikKLQotCi0jdW5kZWYgQ0tfUFJfRkFTCi0KLSNk
ZWZpbmUgQ0tfUFJfVU5BUlkoTywgTiwgTSwgVCwgSSwgVywgUikJCQlcCi0gICAgICAgIENLX0ND
X0lOTElORSBzdGF0aWMgdm9pZAkJCQlcCi0gICAgICAgIGNrX3ByXyMjTyMjXyMjTihNICp0YXJn
ZXQpCQkJCVwKLSAgICAgICAgewkJCQkJCQlcCi0gICAgICAgICAgICAgICAgVCBwcmV2aW91cyA9
IDA7CQkJCQlcCi0gICAgICAgICAgICAgICAgVCB0bXAgPSAwOwkJCQkJXAotICAgICAgICAgICAg
ICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIxOiIJCQlcCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImxkeHIiIFcgIiAlIiBSICIwLCBbJTJdOyIJXAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJICI7IgkJCVwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAic3R4ciIgVyAiICV3MSwgJSIgUiAiMCwgWyUyXTsiCVwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2JueiAldzEsIDFiOyIJCVwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9JnIiIChwcmV2aW91cyksCVwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9JnIiICh0bXApCQlc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIgICAodGFyZ2V0
KQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iiwg
ImNjIik7CVwKLSAgICAgICAgICAgICAgICByZXR1cm47CQkJCQkJXAotICAgICAgICB9Ci0KLUNL
X1BSX1VOQVJZKGluYywgcHRyLCB2b2lkLCB2b2lkICosICJhZGQgJTAsICUwLCAjMSIsICIiLCAi
IikKLUNLX1BSX1VOQVJZKGRlYywgcHRyLCB2b2lkLCB2b2lkICosICJzdWIgJTAsICUwLCAjMSIs
ICIiLCAiIikKLUNLX1BSX1VOQVJZKG5vdCwgcHRyLCB2b2lkLCB2b2lkICosICJtdm4gJTAsICUw
IiwgIiIsICIiKQotQ0tfUFJfVU5BUlkoaW5jLCA2NCwgdWludDY0X3QsIHVpbnQ2NF90LCAiYWRk
ICUwLCAlMCwgIzEiLCAiIiwgIiIpCi1DS19QUl9VTkFSWShkZWMsIDY0LCB1aW50NjRfdCwgdWlu
dDY0X3QsICJzdWIgJTAsICUwLCAjMSIsICIiLCAiIikKLUNLX1BSX1VOQVJZKG5vdCwgNjQsIHVp
bnQ2NF90LCB1aW50NjRfdCwgIm12biAlMCwgJTAiLCAiIiwgIiIpCi0KLSNkZWZpbmUgQ0tfUFJf
VU5BUllfUyhTLCBULCBXKQkJCQkJXAotICAgICAgICBDS19QUl9VTkFSWShpbmMsIFMsIFQsIFQs
ICJhZGQgJXcwLCAldzAsICMxIiwgVywgInciKQlcCi0gICAgICAgIENLX1BSX1VOQVJZKGRlYywg
UywgVCwgVCwgInN1YiAldzAsICV3MCwgIzEiLCBXLCAidyIpCVwKLSAgICAgICAgQ0tfUFJfVU5B
Ulkobm90LCBTLCBULCBULCAibXZuICV3MCwgJXcwIiwgVywgInciKQlcCi0KLUNLX1BSX1VOQVJZ
X1MoMzIsIHVpbnQzMl90LCAiIikKLUNLX1BSX1VOQVJZX1ModWludCwgdW5zaWduZWQgaW50LCAi
IikKLUNLX1BSX1VOQVJZX1MoaW50LCBpbnQsICIiKQotQ0tfUFJfVU5BUllfUygxNiwgdWludDE2
X3QsICJoIikKLUNLX1BSX1VOQVJZX1MoOCwgdWludDhfdCwgImIiKQotQ0tfUFJfVU5BUllfUyhz
aG9ydCwgc2hvcnQsICJoIikKLUNLX1BSX1VOQVJZX1MoY2hhciwgY2hhciwgImIiKQotCi0jdW5k
ZWYgQ0tfUFJfVU5BUllfUwotI3VuZGVmIENLX1BSX1VOQVJZCi0KLSNkZWZpbmUgQ0tfUFJfQklO
QVJZKE8sIE4sIE0sIFQsIEksIFcsIFIpCQkJXAotICAgICAgICBDS19DQ19JTkxJTkUgc3RhdGlj
IHZvaWQJCQkJXAotICAgICAgICBja19wcl8jI08jI18jI04oTSAqdGFyZ2V0LCBUIGRlbHRhKQkJ
CVwKLSAgICAgICAgewkJCQkJCQlcCi0gICAgICAgICAgICAgICAgVCBwcmV2aW91czsJCQkJCVwK
LSAgICAgICAgICAgICAgICBUIHRtcDsJCQkJCQlcCi0gICAgICAgICAgICAgICAgX19hc21fXyBf
X3ZvbGF0aWxlX18oIjE6IgkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAibGR4ciIgVyAiICUiIFIgIjAsIFslMl07IlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSSAiICUiIFIgIjAsICUiIFIgIjAsICUiIFIgIjM7IglcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0eHIiIFcgIiAldzEsICUiIFIgIjAsIFslMl07
IglcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNibnogJXcxLCAxYjsi
CQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPSZyIiAocHJl
dmlvdXMpLAlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPSZy
IiAodG1wKQkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInIi
ICAgKHRhcmdldCksCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJyIiAgIChkZWx0YSkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6ICJtZW1vcnkiLCAiY2MiKTsJXAotICAgICAgICAgICAgICAgIHJldHVybjsJCQkJCQlcCi0g
ICAgICAgIH0KLQotQ0tfUFJfQklOQVJZKGFuZCwgcHRyLCB2b2lkLCB1aW50cHRyX3QsICJhbmQi
LCAiIiwgIiIpCi1DS19QUl9CSU5BUlkoYWRkLCBwdHIsIHZvaWQsIHVpbnRwdHJfdCwgImFkZCIs
ICIiLCAiIikKLUNLX1BSX0JJTkFSWShvciwgcHRyLCB2b2lkLCB1aW50cHRyX3QsICJvcnIiLCAi
IiwgIiIpCi1DS19QUl9CSU5BUlkoc3ViLCBwdHIsIHZvaWQsIHVpbnRwdHJfdCwgInN1YiIsICIi
LCAiIikKLUNLX1BSX0JJTkFSWSh4b3IsIHB0ciwgdm9pZCwgdWludHB0cl90LCAiZW9yIiwgIiIs
ICIiKQotQ0tfUFJfQklOQVJZKGFuZCwgNjQsIHVpbnQ2NF90LCB1aW50NjRfdCwgImFuZCIsICIi
LCAiIikKLUNLX1BSX0JJTkFSWShhZGQsIDY0LCB1aW50NjRfdCwgdWludDY0X3QsICJhZGQiLCAi
IiwgIiIpCi1DS19QUl9CSU5BUlkob3IsIDY0LCB1aW50NjRfdCwgdWludDY0X3QsICJvcnIiLCAi
IiwgIiIpCi1DS19QUl9CSU5BUlkoc3ViLCA2NCwgdWludDY0X3QsIHVpbnQ2NF90LCAic3ViIiwg
IiIsICIiKQotQ0tfUFJfQklOQVJZKHhvciwgNjQsIHVpbnQ2NF90LCB1aW50NjRfdCwgImVvciIs
ICIiLCAiIikKLQotI2RlZmluZSBDS19QUl9CSU5BUllfUyhTLCBULCBXKQkJCQlcCi0gICAgICAg
IENLX1BSX0JJTkFSWShhbmQsIFMsIFQsIFQsICJhbmQiLCBXLCAidyIpCVwKLSAgICAgICAgQ0tf
UFJfQklOQVJZKGFkZCwgUywgVCwgVCwgImFkZCIsIFcsICJ3IikJXAotICAgICAgICBDS19QUl9C
SU5BUlkob3IsIFMsIFQsIFQsICJvcnIiLCBXLCAidyIpCVwKLSAgICAgICAgQ0tfUFJfQklOQVJZ
KHN1YiwgUywgVCwgVCwgInN1YiIsIFcsICJ3IikJXAotICAgICAgICBDS19QUl9CSU5BUlkoeG9y
LCBTLCBULCBULCAiZW9yIiwgVywgInciKQotCi1DS19QUl9CSU5BUllfUygzMiwgdWludDMyX3Qs
ICIiKQotQ0tfUFJfQklOQVJZX1ModWludCwgdW5zaWduZWQgaW50LCAiIikKLUNLX1BSX0JJTkFS
WV9TKGludCwgaW50LCAiIikKLUNLX1BSX0JJTkFSWV9TKDE2LCB1aW50MTZfdCwgImgiKQotQ0tf
UFJfQklOQVJZX1MoOCwgdWludDhfdCwgImIiKQotQ0tfUFJfQklOQVJZX1Moc2hvcnQsIHNob3J0
LCAiaCIpCi1DS19QUl9CSU5BUllfUyhjaGFyLCBjaGFyLCAiYiIpCi0KLSN1bmRlZiBDS19QUl9C
SU5BUllfUwotI3VuZGVmIENLX1BSX0JJTkFSWQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQg
KgotY2tfcHJfZmFhX3B0cih2b2lkICp0YXJnZXQsIHVpbnRwdHJfdCBkZWx0YSkKLXsKLSAgICAg
ICAgdWludHB0cl90IHByZXZpb3VzLCByLCB0bXA7Ci0KLSAgICAgICAgX19hc21fXyBfX3ZvbGF0
aWxlX18oIjE6IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGR4ciAlMCwgWyUzXTsi
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGQgJTEsICU0LCAlMDsiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJzdHhyICV3MiwgJTEsIFslM107IgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiY2JueiAldzIsIDFiOyIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiAiPSZyIiAocHJldmlvdXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICI9JnIiIChyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPSZy
IiAodG1wKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAgICh0YXJnZXQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyIiAgIChkZWx0YSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5IiwgImNjIik7Ci0KLSAgICAgICAg
cmV0dXJuICh2b2lkICopKHByZXZpb3VzKTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB1aW50
NjRfdAotY2tfcHJfZmFhXzY0KHVpbnQ2NF90ICp0YXJnZXQsIHVpbnQ2NF90IGRlbHRhKQotewot
ICAgICAgICB1aW50NjRfdCBwcmV2aW91cywgciwgdG1wOwotCi0gICAgICAgIF9fYXNtX18gX192
b2xhdGlsZV9fKCIxOiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkeHIgJTAsIFsl
M107IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkICUxLCAlNCwgJTA7IgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAic3R4ciAldzIsICUxLCBbJTNdOyIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImNibnogJXcyLCAxYjsiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogIj0mciIgKHByZXZpb3VzKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiPSZyIiAociksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ij0mciIgKHRtcCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIgICAodGFy
Z2V0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciIgICAoZGVsdGEpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIsICJjYyIpOwotCi0gICAg
ICAgIHJldHVybiAocHJldmlvdXMpOwotfQotCi0jZGVmaW5lIENLX1BSX0ZBQShTLCBULCBXKQkJ
CQkJCVwKLSAgICAgICAgQ0tfQ0NfSU5MSU5FIHN0YXRpYyBUCQkJCQkJXAotICAgICAgICBja19w
cl9mYWFfIyNTKFQgKnRhcmdldCwgVCBkZWx0YSkJCQkJXAotICAgICAgICB7CQkJCQkJCQlcCi0g
ICAgICAgICAgICAgICAgVCBwcmV2aW91cywgciwgdG1wOwkJCQkJXAotICAgICAgICAgICAgICAg
IF9fYXNtX18gX192b2xhdGlsZV9fKCIxOiIJCQkJXAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJsZHhyIiBXICIgJXcwLCBbJTNdOyIJCVwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiYWRkICV3MSwgJXc0LCAldzA7IgkJXAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJzdHhyIiBXICIgJXcyLCAldzEsIFslM107IglcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNibnogJXcyLCAxYjsiCQkJXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj0mciIgKHByZXZpb3Vz
KSwJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9JnIiIChy
KSwJCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPSZyIiAo
dG1wKQkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAg
ICh0YXJnZXQpLAkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InIiICAgKGRlbHRhKQkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6ICJtZW1vcnkiLCAiY2MiKTsJCVwKLSAgICAgICAgICAgICAgICByZXR1cm4gKHByZXZpb3Vz
KTsJCQkJCVwKLSAgICAgICAgfQotCi1DS19QUl9GQUEoMzIsIHVpbnQzMl90LCAiIikKLUNLX1BS
X0ZBQSh1aW50LCB1bnNpZ25lZCBpbnQsICIiKQotQ0tfUFJfRkFBKGludCwgaW50LCAiIikKLUNL
X1BSX0ZBQSgxNiwgdWludDE2X3QsICJoIikKLUNLX1BSX0ZBQSg4LCB1aW50OF90LCAiYiIpCi1D
S19QUl9GQUEoc2hvcnQsIHNob3J0LCAiaCIpCi1DS19QUl9GQUEoY2hhciwgY2hhciwgImIiKQot
Ci0jdW5kZWYgQ0tfUFJfRkFBCi0KLSNlbmRpZiAvKiBDS19QUl9BQVJDSDY0X0xMU0NfSCAqLwpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2Mv
YWFyY2g2NC9ja19wcl9sc2UuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2lu
Y2x1ZGUvZ2NjL2FhcmNoNjQvY2tfcHJfbHNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGUyYzk1NTRjOGI0YTc0MzRhY2E4NzBlYTFlODRlZDRkNjIwY2EwN2YuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MvYWFyY2g2NC9ja19wcl9sc2UuaAorKysgL2Rldi9udWxs
CkBAIC0xLDI5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDktMjAxNiBTYW15IEFsIEJh
aHJhLgotICogQ29weXJpZ2h0IDIwMTMtMjAxNiBPbGl2aWVyIEhvdWNoYXJkLgotICogQ29weXJp
Z2h0IDIwMTYgQWxleGV5IEtvcHl0b3YuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgQ0tfUFJfQUFSQ0g2NF9MU0VfSAotI2RlZmluZSBDS19QUl9BQVJDSDY0X0xTRV9ICi0K
LSNpZm5kZWYgQ0tfUFJfSAotI2Vycm9yIERvIG5vdCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3Rs
eSwgdXNlIGNrX3ByLmgKLSNlbmRpZgotCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wKLWNrX3By
X2Nhc182NF8yX3ZhbHVlKHVpbnQ2NF90IHRhcmdldFsyXSwgdWludDY0X3QgY29tcGFyZVsyXSwg
dWludDY0X3Qgc2V0WzJdLCB1aW50NjRfdCB2YWx1ZVsyXSkKLXsKLSAgICAgICAgdWludDY0X3Qg
dG1wMTsKLSAgICAgICAgdWludDY0X3QgdG1wMjsKLSAgICAgICAgcmVnaXN0ZXIgdWludDY0X3Qg
eDAgX19hc21fXyAoIngwIikgPSBjb21wYXJlWzBdOwotICAgICAgICByZWdpc3RlciB1aW50NjRf
dCB4MSBfX2FzbV9fICgieDEiKSA9IGNvbXBhcmVbMV07Ci0gICAgICAgIHJlZ2lzdGVyIHVpbnQ2
NF90IHgyIF9fYXNtX18gKCJ4MiIpID0gc2V0WzBdOwotICAgICAgICByZWdpc3RlciB1aW50NjRf
dCB4MyBfX2FzbV9fICgieDMiKSA9IHNldFsxXTsKLQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRp
bGVfXygiY2FzcCAlMCwgJTEsICU0LCAlNSwgWyU2XTsiCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJlb3IgJTIsICUwLCAlNzsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJl
b3IgJTMsICUxLCAlODsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcnIgJTIsICUy
LCAlMzsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIismciIgKHgwKSwgIismciIg
KHgxKSwgIj0mciIgKHRtcDEpLCAiPSZyIiAodG1wMikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiAiciIgKHgyKSwgInIiICh4MyksICJyIiAodGFyZ2V0KSwgInIiIChjb21wYXJlWzBd
KSwgInIiIChjb21wYXJlWzFdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1v
cnkiKTsKLQotICAgICAgICB2YWx1ZVswXSA9IHgwOwotICAgICAgICB2YWx1ZVsxXSA9IHgxOwot
Ci0gICAgICAgIHJldHVybiAoISF0bXAxKTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29s
Ci1ja19wcl9jYXNfcHRyXzJfdmFsdWUodm9pZCAqdGFyZ2V0LCB2b2lkICpjb21wYXJlLCB2b2lk
ICpzZXQsIHZvaWQgKnZhbHVlKQotewotICAgICAgICByZXR1cm4gKGNrX3ByX2Nhc182NF8yX3Zh
bHVlKENLX0NQUF9DQVNUKHVpbnQ2NF90ICosIHRhcmdldCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENLX0NQUF9DQVNUKHVpbnQ2NF90ICosIGNvbXBhcmUpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDS19DUFBfQ0FTVCh1aW50NjRfdCAqLCBzZXQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDS19DUFBfQ0FTVCh1aW50NjRf
dCAqLCB2YWx1ZSkpKTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19wcl9jYXNf
NjRfMih1aW50NjRfdCB0YXJnZXRbMl0sIHVpbnQ2NF90IGNvbXBhcmVbMl0sIHVpbnQ2NF90IHNl
dFsyXSkKLXsKLSAgICAgICAgcmVnaXN0ZXIgdWludDY0X3QgeDAgX19hc21fXyAoIngwIikgPSBj
b21wYXJlWzBdOwotICAgICAgICByZWdpc3RlciB1aW50NjRfdCB4MSBfX2FzbV9fICgieDEiKSA9
IGNvbXBhcmVbMV07Ci0gICAgICAgIHJlZ2lzdGVyIHVpbnQ2NF90IHgyIF9fYXNtX18gKCJ4MiIp
ID0gc2V0WzBdOwotICAgICAgICByZWdpc3RlciB1aW50NjRfdCB4MyBfX2FzbV9fICgieDMiKSA9
IHNldFsxXTsKLQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FzcCAlMCwgJTEsICUy
LCAlMywgWyU0XTsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlb3IgJTAsICUwLCAl
NTsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlb3IgJTEsICUxLCAlNjsiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJvcnIgJTAsICUwLCAlMTsiCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogIismciIgKHgwKSwgIismciIgKHgxKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6ICJyIiAoeDIpLCAiciIgKHgzKSwgInIiICh0YXJnZXQpLCAiciIgKGNv
bXBhcmVbMF0pLCAiciIgKGNvbXBhcmVbMV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogIm1lbW9yeSIpOwotCi0gICAgICAgIHJldHVybiAoISF4MCk7Ci19Ci1DS19DQ19JTkxJTkUg
c3RhdGljIGJvb2wKLWNrX3ByX2Nhc19wdHJfMih2b2lkICp0YXJnZXQsIHZvaWQgKmNvbXBhcmUs
IHZvaWQgKnNldCkKLXsKLSAgICAgICAgcmV0dXJuIChja19wcl9jYXNfNjRfMihDS19DUFBfQ0FT
VCh1aW50NjRfdCAqLCB0YXJnZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDS19D
UFBfQ0FTVCh1aW50NjRfdCAqLCBjb21wYXJlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ0tfQ1BQX0NBU1QodWludDY0X3QgKiwgc2V0KSkpOwotfQotCi0KLSNkZWZpbmUgQ0tfUFJf
Q0FTKE4sIE0sIFQsIFcsIFIpCQkJCQlcCi0gICAgICAgIENLX0NDX0lOTElORSBzdGF0aWMgYm9v
bAkJCQkJXAotICAgICAgICBja19wcl9jYXNfIyNOIyNfdmFsdWUoTSAqdGFyZ2V0LCBUIGNvbXBh
cmUsIFQgc2V0LCBNICp2YWx1ZSkJXAotICAgICAgICB7CQkJCQkJCQlcCi0gICAgICAgICAgICAg
ICAgICAqKFQgKil2YWx1ZSA9IGNvbXBhcmU7CQkJCVwKLSAgICAgICAgICAgICAgICBfX2FzbV9f
IF9fdm9sYXRpbGVfXygJCQkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiY2FzIiBXICIgJSIgUiAiMCwgJSIgUiAiMiwgWyUxXTsiCVwKLSAgICAgICAgICAgICAgICAg
ICAgOiAiKyZyIiAoKihUICopdmFsdWUpCQkJCVwKLSAgICAgICAgICAgICAgICAgICAgOiAiciIg
ICAodGFyZ2V0KSwJCQkJCVwKLSAgICAgICAgICAgICAgICAgICAgInIiICAgKHNldCkJCQkJCQlc
Ci0gICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwkJCQkJXAotICAgICAgICAgICAgICAg
IHJldHVybiAoKihUICopdmFsdWUgPT0gY29tcGFyZSk7ICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICB9CQkJCQkJCQlcCi0gICAgICAgIENLX0NDX0lOTElORSBzdGF0aWMgYm9vbAkJ
CQkJXAotICAgICAgICBja19wcl9jYXNfIyNOKE0gKnRhcmdldCwgVCBjb21wYXJlLCBUIHNldCkJ
CQlcCi0gICAgICAgIHsJCQkJCQkJCVwKLSAgICAgICAgICAgICAgICBUIHByZXZpb3VzID0gY29t
cGFyZTsJCQkJCVwKLSAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FzIiBXICIgJSIgUiAiMCwg
JSIgUiAiMiwgWyUxXTsiCVwKLSAgICAgICAgICAgICAgICAgICAgOiAiKyZyIiAocHJldmlvdXMp
CQkJCQlcCi0gICAgICAgICAgICAgICAgICAgIDogInIiICAgKHRhcmdldCksCQkJCQlcCi0gICAg
ICAgICAgICAgICAgICAgICJyIiAgIChzZXQpCQkJCQkJXAotICAgICAgICAgICAgICAgICAgICA6
ICJtZW1vcnkiKTsJCQkJCVwKLSAgICAgICAgICAgICAgICByZXR1cm4gKHByZXZpb3VzID09IGNv
bXBhcmUpOyAgIAkJCVwKLSAgICAgICAgfQotCi1DS19QUl9DQVMocHRyLCB2b2lkLCB2b2lkICos
ICIiLCAiIikKLQotI2RlZmluZSBDS19QUl9DQVNfUyhOLCBNLCBXLCBSKQlDS19QUl9DQVMoTiwg
TSwgTSwgVywgUikKLUNLX1BSX0NBU19TKDY0LCB1aW50NjRfdCwgIiIsICIiKQotI2lmbmRlZiBD
S19QUl9ESVNBQkxFX0RPVUJMRQotQ0tfUFJfQ0FTX1MoZG91YmxlLCBkb3VibGUsICIiLCAiIikK
LSNlbmRpZgotQ0tfUFJfQ0FTX1MoMzIsIHVpbnQzMl90LCAiIiwgInciKQotQ0tfUFJfQ0FTX1Mo
dWludCwgdW5zaWduZWQgaW50LCAiIiwgInciKQotQ0tfUFJfQ0FTX1MoaW50LCBpbnQsICIiLCAi
dyIpCi1DS19QUl9DQVNfUygxNiwgdWludDE2X3QsICJoIiwgInciKQotQ0tfUFJfQ0FTX1MoOCwg
dWludDhfdCwgImIiLCAidyIpCi1DS19QUl9DQVNfUyhzaG9ydCwgc2hvcnQsICJoIiwgInciKQot
Q0tfUFJfQ0FTX1MoY2hhciwgY2hhciwgImIiLCAidyIpCi0KLQotI3VuZGVmIENLX1BSX0NBU19T
Ci0jdW5kZWYgQ0tfUFJfQ0FTCi0KLSNkZWZpbmUgQ0tfUFJfRkFTKE4sIE0sIFQsIFcsIFIpCQkJ
CQlcCi0gICAgICAgIENLX0NDX0lOTElORSBzdGF0aWMgVAkJCQkJCVwKLSAgICAgICAgY2tfcHJf
ZmFzXyMjTihNICp0YXJnZXQsIFQgdikJCQkJCVwKLSAgICAgICAgewkJCQkJCQkJXAotICAgICAg
ICAgICAgICAgIFQgcHJldmlvdXM7CQkJCQkJXAotICAgICAgICAgICAgICAgIF9fYXNtX18gX192
b2xhdGlsZV9fKAkJCQkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJz
d3AiIFcgIiAlIiBSICIyLCAlIiBSICIwLCBbJTFdOyIJXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogIj0mciIgKHByZXZpb3VzKQkJXAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogInIiICAgKHRhcmdldCksCQlcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciIgICAodikJCQlcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CQkJXAotICAgICAgICAg
ICAgICAgIHJldHVybiAocHJldmlvdXMpOwkJCQkJXAotICAgICAgICB9Ci0KLUNLX1BSX0ZBUyg2
NCwgdWludDY0X3QsIHVpbnQ2NF90LCAiIiwgIiIpCi1DS19QUl9GQVMoMzIsIHVpbnQzMl90LCB1
aW50MzJfdCwgIiIsICJ3IikKLUNLX1BSX0ZBUyhwdHIsIHZvaWQsIHZvaWQgKiwgIiIsICIiKQot
Q0tfUFJfRkFTKGludCwgaW50LCBpbnQsICIiLCAidyIpCi1DS19QUl9GQVModWludCwgdW5zaWdu
ZWQgaW50LCB1bnNpZ25lZCBpbnQsICIiLCAidyIpCi1DS19QUl9GQVMoMTYsIHVpbnQxNl90LCB1
aW50MTZfdCwgImgiLCAidyIpCi1DS19QUl9GQVMoOCwgdWludDhfdCwgdWludDhfdCwgImIiLCAi
dyIpCi1DS19QUl9GQVMoc2hvcnQsIHNob3J0LCBzaG9ydCwgImgiLCAidyIpCi1DS19QUl9GQVMo
Y2hhciwgY2hhciwgY2hhciwgImIiLCAidyIpCi0KLQotI3VuZGVmIENLX1BSX0ZBUwotCi0jZGVm
aW5lIENLX1BSX1VOQVJZKE8sIE4sIE0sIFQsIEksIFcsIFIsIFMpCQkJXAotICAgICAgICBDS19D
Q19JTkxJTkUgc3RhdGljIHZvaWQJCQkJXAotICAgICAgICBja19wcl8jI08jI18jI04oTSAqdGFy
Z2V0KQkJCQlcCi0gICAgICAgIHsJCQkJCQkJXAotICAgICAgICAgICAgICAgIF9fYXNtX18gX192
b2xhdGlsZV9fKEkgIjsiCQkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJzdCIgUyBXICIgIiBSICIwLCBbJTBdOyIJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDoJCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiAiciIgICAodGFyZ2V0KQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiAieDAiLCAibWVtb3J5Iik7CVwKLSAgICAgICAgICAgICAgICByZXR1cm47CQkJCQkJ
XAotICAgICAgICB9Ci0KLUNLX1BSX1VOQVJZKGluYywgcHRyLCB2b2lkLCB2b2lkICosICJtb3Yg
eDAsIDEiLCAiIiwgIngiLCAiYWRkIikKLUNLX1BSX1VOQVJZKGRlYywgcHRyLCB2b2lkLCB2b2lk
ICosICJtb3YgeDAsIC0xIiwgIiIsICJ4IiwgImFkZCIpCi1DS19QUl9VTkFSWShub3QsIHB0ciwg
dm9pZCwgdm9pZCAqLCAibW92IHgwLCAtMSIsICIiLCAieCIsICJlb3IiKQotQ0tfUFJfVU5BUlko
aW5jLCA2NCwgdWludDY0X3QsIHVpbnQ2NF90LCAibW92IHgwLCAxIiwgIiIsICJ4IiwgImFkZCIp
Ci1DS19QUl9VTkFSWShkZWMsIDY0LCB1aW50NjRfdCwgdWludDY0X3QsICJtb3YgeDAsIC0xIiwg
IiIsICJ4IiwgImFkZCIpCi1DS19QUl9VTkFSWShub3QsIDY0LCB1aW50NjRfdCwgdWludDY0X3Qs
ICJtb3YgeDAsIC0xIiwgIiIsICJ4IiwgImVvciIpCi0KLSNkZWZpbmUgQ0tfUFJfVU5BUllfUyhT
LCBULCBXKQkJCQkJXAotICAgICAgICBDS19QUl9VTkFSWShpbmMsIFMsIFQsIFQsICJtb3YgdzAs
IDEiLCBXLCAidyIsICJhZGQiKQlcCi0gICAgICAgIENLX1BSX1VOQVJZKGRlYywgUywgVCwgVCwg
Im1vdiB3MCwgLTEiLCBXLCAidyIsICJhZGQiKQlcCi0gICAgICAgIENLX1BSX1VOQVJZKG5vdCwg
UywgVCwgVCwgIm1vdiB3MCwgLTEiLCBXLCAidyIsICJlb3IiKQlcCi0KLUNLX1BSX1VOQVJZX1Mo
MzIsIHVpbnQzMl90LCAiIikKLUNLX1BSX1VOQVJZX1ModWludCwgdW5zaWduZWQgaW50LCAiIikK
LUNLX1BSX1VOQVJZX1MoaW50LCBpbnQsICIiKQotQ0tfUFJfVU5BUllfUygxNiwgdWludDE2X3Qs
ICJoIikKLUNLX1BSX1VOQVJZX1MoOCwgdWludDhfdCwgImIiKQotQ0tfUFJfVU5BUllfUyhzaG9y
dCwgc2hvcnQsICJoIikKLUNLX1BSX1VOQVJZX1MoY2hhciwgY2hhciwgImIiKQotCi0jdW5kZWYg
Q0tfUFJfVU5BUllfUwotI3VuZGVmIENLX1BSX1VOQVJZCi0KLSNkZWZpbmUgQ0tfUFJfQklOQVJZ
KE8sIE4sIE0sIFQsIFMsIFcsIFIsIEkpCQkJXAotICAgICAgICBDS19DQ19JTkxJTkUgc3RhdGlj
IHZvaWQJCQkJXAotICAgICAgICBja19wcl8jI08jI18jI04oTSAqdGFyZ2V0LCBUIGRlbHRhKQkJ
CVwKLSAgICAgICAgewkJCQkJCQlcCi0gICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxl
X18oSSAiOyIJCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0IiBT
IFcgIiAlIiBSICIwLCBbJTFdOyIJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogIismciIgKGRlbHRhKQkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogInIiICAgKHRhcmdldCkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogIm1lbW9yeSIpOwkJXAotICAgICAgICAgICAgICAgIHJldHVybjsJCQkJ
CQlcCi0gICAgICAgIH0KLQotQ0tfUFJfQklOQVJZKGFuZCwgcHRyLCB2b2lkLCB1aW50cHRyX3Qs
ICJjbHIiLCAiIiwgIiIsICJtdm4gJTAsICUwIikKLUNLX1BSX0JJTkFSWShhZGQsIHB0ciwgdm9p
ZCwgdWludHB0cl90LCAiYWRkIiwgIiIsICIiLCAiIikKLUNLX1BSX0JJTkFSWShvciwgcHRyLCB2
b2lkLCB1aW50cHRyX3QsICJzZXQiLCAiIiwgIiIsICIiKQotQ0tfUFJfQklOQVJZKHN1YiwgcHRy
LCB2b2lkLCB1aW50cHRyX3QsICJhZGQiLCAiIiwgIiIsICJuZWcgJTAsICUwIikKLUNLX1BSX0JJ
TkFSWSh4b3IsIHB0ciwgdm9pZCwgdWludHB0cl90LCAiZW9yIiwgIiIsICIiLCAiIikKLUNLX1BS
X0JJTkFSWShhbmQsIDY0LCB1aW50NjRfdCwgdWludDY0X3QsICJjbHIiLCAiIiwgIiIsICJtdm4g
JTAsICUwIikKLUNLX1BSX0JJTkFSWShhZGQsIDY0LCB1aW50NjRfdCwgdWludDY0X3QsICJhZGQi
LCAiIiwgIiIsICIiKQotQ0tfUFJfQklOQVJZKG9yLCA2NCwgdWludDY0X3QsIHVpbnQ2NF90LCAi
c2V0IiwgIiIsICIiLCAiIikKLUNLX1BSX0JJTkFSWShzdWIsIDY0LCB1aW50NjRfdCwgdWludDY0
X3QsICJhZGQiLCAiIiwgIiIsICJuZWcgJTAsICUwIikKLUNLX1BSX0JJTkFSWSh4b3IsIDY0LCB1
aW50NjRfdCwgdWludDY0X3QsICJlb3IiLCAiIiwgIiIsICIiKQotCi0jZGVmaW5lIENLX1BSX0JJ
TkFSWV9TKFMsIFQsIFcpCQkJCQkJXAotICAgICAgICBDS19QUl9CSU5BUlkoYW5kLCBTLCBULCBU
LCAiY2xyIiwgVywgInciLCAibXZuICV3MCwgJXcwIikJXAotICAgICAgICBDS19QUl9CSU5BUlko
YWRkLCBTLCBULCBULCAiYWRkIiwgVywgInciLCAiIikJCQlcCi0gICAgICAgIENLX1BSX0JJTkFS
WShvciwgUywgVCwgVCwgInNldCIsIFcsICJ3IiwgIiIpCQkJXAotICAgICAgICBDS19QUl9CSU5B
Ulkoc3ViLCBTLCBULCBULCAiYWRkIiwgVywgInciLCAibmVnICV3MCwgJXcwIikJXAotICAgICAg
ICBDS19QUl9CSU5BUlkoeG9yLCBTLCBULCBULCAiZW9yIiwgVywgInciLCAiIikKLQotQ0tfUFJf
QklOQVJZX1MoMzIsIHVpbnQzMl90LCAiIikKLUNLX1BSX0JJTkFSWV9TKHVpbnQsIHVuc2lnbmVk
IGludCwgIiIpCi1DS19QUl9CSU5BUllfUyhpbnQsIGludCwgIiIpCi1DS19QUl9CSU5BUllfUygx
NiwgdWludDE2X3QsICJoIikKLUNLX1BSX0JJTkFSWV9TKDgsIHVpbnQ4X3QsICJiIikKLUNLX1BS
X0JJTkFSWV9TKHNob3J0LCBzaG9ydCwgImgiKQotQ0tfUFJfQklOQVJZX1MoY2hhciwgY2hhciwg
ImIiKQotCi0jdW5kZWYgQ0tfUFJfQklOQVJZX1MKLSN1bmRlZiBDS19QUl9CSU5BUlkKLQotQ0tf
Q0NfSU5MSU5FIHN0YXRpYyB2b2lkICoKLWNrX3ByX2ZhYV9wdHIodm9pZCAqdGFyZ2V0LCB1aW50
cHRyX3QgZGVsdGEpCi17Ci0gICAgICAgIHVpbnRwdHJfdCBwcmV2aW91czsKLQotICAgICAgICBf
X2FzbV9fIF9fdm9sYXRpbGVfXygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkYWRk
ICUyLCAlMCwgWyUxXTsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAo
cHJldmlvdXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInIiICAgKHRhcmdl
dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiICAgKGRlbHRhKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKLQotICAgICAgICByZXR1
cm4gKHZvaWQgKikocHJldmlvdXMpOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHVpbnQ2NF90
Ci1ja19wcl9mYWFfNjQodWludDY0X3QgKnRhcmdldCwgdWludDY0X3QgZGVsdGEpCi17Ci0gICAg
ICAgIHVpbnQ2NF90IHByZXZpb3VzOwotCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGRhZGQgJTIsICUwLCBbJTFdOyIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChwcmV2aW91cykKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiAiciIgICAodGFyZ2V0KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiciIgICAoZGVsdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogIm1lbW9yeSIpOwotCi0gICAgICAgIHJldHVybiAocHJldmlvdXMpOwotfQotCi0j
ZGVmaW5lIENLX1BSX0ZBQShTLCBULCBXKQkJCQkJCVwKLSAgICAgICAgQ0tfQ0NfSU5MSU5FIHN0
YXRpYyBUCQkJCQkJXAotICAgICAgICBja19wcl9mYWFfIyNTKFQgKnRhcmdldCwgVCBkZWx0YSkJ
CQkJXAotICAgICAgICB7CQkJCQkJCQlcCi0gICAgICAgICAgICAgICAgVCBwcmV2aW91czsJCQkJ
CQlcCi0gICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxkYWRkIiBXICIgJXcyLCAldzAsIFslMV07
IglcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChwcmV2
aW91cykJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAg
ICh0YXJnZXQpLAkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InIiICAgKGRlbHRhKQkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6ICJtZW1vcnkiKTsJCQlcCi0gICAgICAgICAgICAgICAgcmV0dXJuIChwcmV2aW91cyk7CQkJ
CQlcCi0gICAgICAgIH0KLQotQ0tfUFJfRkFBKDMyLCB1aW50MzJfdCwgIiIpCi1DS19QUl9GQUEo
dWludCwgdW5zaWduZWQgaW50LCAiIikKLUNLX1BSX0ZBQShpbnQsIGludCwgIiIpCi1DS19QUl9G
QUEoMTYsIHVpbnQxNl90LCAiaCIpCi1DS19QUl9GQUEoOCwgdWludDhfdCwgImIiKQotQ0tfUFJf
RkFBKHNob3J0LCBzaG9ydCwgImgiKQotQ0tfUFJfRkFBKGNoYXIsIGNoYXIsICJiIikKLQotI3Vu
ZGVmIENLX1BSX0ZBQQotCi0jZW5kaWYgLyogQ0tfUFJfQUFSQ0g2NF9MU0VfSCAqLwpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MvYXJtL2Nr
X2ZfcHIuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvZ2NjL2Fy
bS9ja19mX3ByLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MDhmODU1YmIzODRh
MzA2ZjM3NzUyNzhmYWIyODgxNTg2NDNkYzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVk
ZS9nY2MvYXJtL2NrX2ZfcHIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKiBE
TyBOT1QgRURJVC4gVGhpcyBpcyBhdXRvLWdlbmVyYXRlZCBmcm9tIGZlYXR1cmUuc2ggKi8KLSNk
ZWZpbmUgQ0tfRl9QUl9BRERfMTYKLSNkZWZpbmUgQ0tfRl9QUl9BRERfMzIKLSNkZWZpbmUgQ0tf
Rl9QUl9BRERfOAotI2RlZmluZSBDS19GX1BSX0FERF9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfQURE
X0lOVAotI2RlZmluZSBDS19GX1BSX0FERF9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9BRERfU0hPUlQK
LSNkZWZpbmUgQ0tfRl9QUl9BRERfVUlOVAotI2RlZmluZSBDS19GX1BSX0FORF8xNgotI2RlZmlu
ZSBDS19GX1BSX0FORF8zMgotI2RlZmluZSBDS19GX1BSX0FORF84Ci0jZGVmaW5lIENLX0ZfUFJf
QU5EX0NIQVIKLSNkZWZpbmUgQ0tfRl9QUl9BTkRfSU5UCi0jZGVmaW5lIENLX0ZfUFJfQU5EX1BU
UgotI2RlZmluZSBDS19GX1BSX0FORF9TSE9SVAotI2RlZmluZSBDS19GX1BSX0FORF9VSU5UCi0j
ZGVmaW5lIENLX0ZfUFJfQkFSUklFUgotI2RlZmluZSBDS19GX1BSX0NBU18xNgotI2RlZmluZSBD
S19GX1BSX0NBU18xNl9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU18zMgotI2RlZmluZSBDS19G
X1BSX0NBU18zMl9WQUxVRQotI2lmIGRlZmluZWQoX19BUk1fQVJDSF83X18pIHx8IGRlZmluZWQo
X19BUk1fQVJDSF83QV9fKQotI2RlZmluZSBDS19GX1BSX0NBU182NAotI2RlZmluZSBDS19GX1BS
X0NBU182NF9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU19ET1VCTEUKLSNkZWZpbmUgQ0tfRl9Q
Ul9DQVNfRE9VQkxFX1ZBTFVFCi0jZW5kaWYKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfOAotI2RlZmlu
ZSBDS19GX1BSX0NBU184X1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX0NIQVIKLSNkZWZpbmUg
Q0tfRl9QUl9DQVNfQ0hBUl9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU19JTlQKLSNkZWZpbmUg
Q0tfRl9QUl9DQVNfSU5UX1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX1BUUgotI2lmIGRlZmlu
ZWQoX19BUk1fQVJDSF83X18pIHx8IGRlZmluZWQoX19BUk1fQVJDSF83QV9fKQotI2RlZmluZSBD
S19GX1BSX0NBU19QVFJfMgotI2RlZmluZSBDS19GX1BSX0NBU19QVFJfMl9WQUxVRQotI2VuZGlm
Ci0jZGVmaW5lIENLX0ZfUFJfQ0FTX1BUUl9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU19TSE9S
VAotI2RlZmluZSBDS19GX1BSX0NBU19TSE9SVF9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU19V
SU5UCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX1VJTlRfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9ERUNf
MTYKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfMzIKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfOAotI2RlZmlu
ZSBDS19GX1BSX0RFQ19DSEFSCi0jZGVmaW5lIENLX0ZfUFJfREVDX0lOVAotI2RlZmluZSBDS19G
X1BSX0RFQ19QVFIKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfU0hPUlQKLSNkZWZpbmUgQ0tfRl9QUl9E
RUNfVUlOVAotI2RlZmluZSBDS19GX1BSX0ZBQV8xNgotI2RlZmluZSBDS19GX1BSX0ZBQV8zMgot
I2RlZmluZSBDS19GX1BSX0ZBQV84Ci0jZGVmaW5lIENLX0ZfUFJfRkFBX0NIQVIKLSNkZWZpbmUg
Q0tfRl9QUl9GQUFfSU5UCi0jZGVmaW5lIENLX0ZfUFJfRkFBX1BUUgotI2RlZmluZSBDS19GX1BS
X0ZBQV9TSE9SVAotI2RlZmluZSBDS19GX1BSX0ZBQV9VSU5UCi0jZGVmaW5lIENLX0ZfUFJfRkFT
XzE2Ci0jZGVmaW5lIENLX0ZfUFJfRkFTXzMyCi0jZGVmaW5lIENLX0ZfUFJfRkFTXzgKLSNkZWZp
bmUgQ0tfRl9QUl9GQVNfQ0hBUgotI2RlZmluZSBDS19GX1BSX0ZBU19JTlQKLSNkZWZpbmUgQ0tf
Rl9QUl9GQVNfUFRSCi0jZGVmaW5lIENLX0ZfUFJfRkFTX1NIT1JUCi0jZGVmaW5lIENLX0ZfUFJf
RkFTX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9GRU5DRV9BVE9NSUMKLSNkZWZpbmUgQ0tfRl9QUl9G
RU5DRV9BVE9NSUNfTE9BRAotI2RlZmluZSBDS19GX1BSX0ZFTkNFX0FUT01JQ19TVE9SRQotI2Rl
ZmluZSBDS19GX1BSX0ZFTkNFX0xPQUQKLSNkZWZpbmUgQ0tfRl9QUl9GRU5DRV9MT0FEX0FUT01J
QwotI2RlZmluZSBDS19GX1BSX0ZFTkNFX0xPQURfREVQRU5EUwotI2RlZmluZSBDS19GX1BSX0ZF
TkNFX0xPQURfU1RPUkUKLSNkZWZpbmUgQ0tfRl9QUl9GRU5DRV9NRU1PUlkKLSNkZWZpbmUgQ0tf
Rl9QUl9GRU5DRV9TVE9SRQotI2RlZmluZSBDS19GX1BSX0ZFTkNFX1NUT1JFX0FUT01JQwotI2Rl
ZmluZSBDS19GX1BSX0ZFTkNFX1NUT1JFX0xPQUQKLSNkZWZpbmUgQ0tfRl9QUl9GRU5DRV9TVFJJ
Q1RfQVRPTUlDCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX0FUT01JQ19MT0FECi0jZGVm
aW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX0FUT01JQ19TVE9SRQotI2RlZmluZSBDS19GX1BSX0ZF
TkNFX1NUUklDVF9MT0FECi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX0xPQURfQVRPTUlD
Ci0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX0xPQURfU1RPUkUKLSNkZWZpbmUgQ0tfRl9Q
Ul9GRU5DRV9TVFJJQ1RfTUVNT1JZCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX1NUT1JF
Ci0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX1NUT1JFX0FUT01JQwotI2RlZmluZSBDS19G
X1BSX0ZFTkNFX1NUUklDVF9TVE9SRV9MT0FECi0jZGVmaW5lIENLX0ZfUFJfSU5DXzE2Ci0jZGVm
aW5lIENLX0ZfUFJfSU5DXzMyCi0jZGVmaW5lIENLX0ZfUFJfSU5DXzgKLSNkZWZpbmUgQ0tfRl9Q
Ul9JTkNfQ0hBUgotI2RlZmluZSBDS19GX1BSX0lOQ19JTlQKLSNkZWZpbmUgQ0tfRl9QUl9JTkNf
UFRSCi0jZGVmaW5lIENLX0ZfUFJfSU5DX1NIT1JUCi0jZGVmaW5lIENLX0ZfUFJfSU5DX1VJTlQK
LSNkZWZpbmUgQ0tfRl9QUl9MT0FEXzE2Ci0jZGVmaW5lIENLX0ZfUFJfTE9BRF8zMgotI2lmIGRl
ZmluZWQoX19BUk1fQVJDSF83X18pIHx8IGRlZmluZWQoX19BUk1fQVJDSF83QV9fKQotI2RlZmlu
ZSBDS19GX1BSX0xPQURfNjQKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEX0RPVUJMRQotI2VuZGlmCi0j
ZGVmaW5lIENLX0ZfUFJfTE9BRF84Ci0jZGVmaW5lIENLX0ZfUFJfTE9BRF9DSEFSCi0jZGVmaW5l
IENLX0ZfUFJfTE9BRF9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEX1BUUgotI2RlZmluZSBDS19G
X1BSX0xPQURfU0hPUlQKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEX1VJTlQKLSNkZWZpbmUgQ0tfRl9Q
Ul9ORUdfMTYKLSNkZWZpbmUgQ0tfRl9QUl9ORUdfMzIKLSNkZWZpbmUgQ0tfRl9QUl9ORUdfOAot
I2RlZmluZSBDS19GX1BSX05FR19DSEFSCi0jZGVmaW5lIENLX0ZfUFJfTkVHX0lOVAotI2RlZmlu
ZSBDS19GX1BSX05FR19QVFIKLSNkZWZpbmUgQ0tfRl9QUl9ORUdfU0hPUlQKLSNkZWZpbmUgQ0tf
Rl9QUl9ORUdfVUlOVAotI2RlZmluZSBDS19GX1BSX05PVF8xNgotI2RlZmluZSBDS19GX1BSX05P
VF8zMgotI2RlZmluZSBDS19GX1BSX05PVF84Ci0jZGVmaW5lIENLX0ZfUFJfTk9UX0NIQVIKLSNk
ZWZpbmUgQ0tfRl9QUl9OT1RfSU5UCi0jZGVmaW5lIENLX0ZfUFJfTk9UX1BUUgotI2RlZmluZSBD
S19GX1BSX05PVF9TSE9SVAotI2RlZmluZSBDS19GX1BSX05PVF9VSU5UCi0jZGVmaW5lIENLX0Zf
UFJfT1JfMTYKLSNkZWZpbmUgQ0tfRl9QUl9PUl8zMgotI2RlZmluZSBDS19GX1BSX09SXzgKLSNk
ZWZpbmUgQ0tfRl9QUl9PUl9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfT1JfSU5UCi0jZGVmaW5lIENL
X0ZfUFJfT1JfUFRSCi0jZGVmaW5lIENLX0ZfUFJfT1JfU0hPUlQKLSNkZWZpbmUgQ0tfRl9QUl9P
Ul9VSU5UCi0jZGVmaW5lIENLX0ZfUFJfU1RBTEwKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV8xNgot
I2RlZmluZSBDS19GX1BSX1NUT1JFXzMyCi0jaWYgZGVmaW5lZChfX0FSTV9BUkNIXzdfXykgfHwg
ZGVmaW5lZChfX0FSTV9BUkNIXzdBX18pCi0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfNjQKLSNkZWZp
bmUgQ0tfRl9QUl9TVE9SRV9ET1VCTEUKLSNlbmRpZgotI2RlZmluZSBDS19GX1BSX1NUT1JFXzgK
LSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfSU5UCi0j
ZGVmaW5lIENLX0ZfUFJfU1RPUkVfUFRSCi0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfU0hPUlQKLSNk
ZWZpbmUgQ0tfRl9QUl9TVE9SRV9VSU5UCi0jZGVmaW5lIENLX0ZfUFJfU1VCXzE2Ci0jZGVmaW5l
IENLX0ZfUFJfU1VCXzMyCi0jZGVmaW5lIENLX0ZfUFJfU1VCXzgKLSNkZWZpbmUgQ0tfRl9QUl9T
VUJfQ0hBUgotI2RlZmluZSBDS19GX1BSX1NVQl9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfUFRS
Ci0jZGVmaW5lIENLX0ZfUFJfU1VCX1NIT1JUCi0jZGVmaW5lIENLX0ZfUFJfU1VCX1VJTlQKLSNk
ZWZpbmUgQ0tfRl9QUl9YT1JfMTYKLSNkZWZpbmUgQ0tfRl9QUl9YT1JfMzIKLSNkZWZpbmUgQ0tf
Rl9QUl9YT1JfOAotI2RlZmluZSBDS19GX1BSX1hPUl9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfWE9S
X0lOVAotI2RlZmluZSBDS19GX1BSX1hPUl9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9YT1JfU0hPUlQK
LSNkZWZpbmUgQ0tfRl9QUl9YT1JfVUlOVApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MvYXJtL2NrX3ByLmggYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy9hcm0vY2tfcHIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggODQxY2EyMThhYWNmODQ1YjliZjcyZjA5MzNmNTJhY2Y1MTViMzcyZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy9hcm0vY2tfcHIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDU2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDktMjAxNSBTYW15IEFs
IEJhaHJhLgotICogQ29weXJpZ2h0IDIwMTMtMjAxNSBPbGl2aWVyIEhvdWNoYXJkLgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0g
KiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENLX1BSX0FSTV9ICi0jZGVmaW5lIENLX1BS
X0FSTV9ICi0KLSNpZm5kZWYgQ0tfUFJfSAotI2Vycm9yIERvIG5vdCBpbmNsdWRlIHRoaXMgZmls
ZSBkaXJlY3RseSwgdXNlIGNrX3ByLmgKLSNlbmRpZgotCi0jaW5jbHVkZSA8Y2tfY2MuaD4KLSNp
bmNsdWRlIDxja19tZC5oPgotCi0vKgotICogVGhlIGZvbGxvd2luZyByZXByZXNlbnQgc3VwcG9y
dGVkIGF0b21pYyBvcGVyYXRpb25zLgotICogVGhlc2Ugb3BlcmF0aW9ucyBtYXkgYmUgZW11bGF0
ZWQuCi0gKi8KLSNpbmNsdWRlICJja19mX3ByLmgiCi0KLS8qCi0gKiBNaW5pbXVtIGludGVyZmFj
ZSByZXF1aXJlbWVudCBtZXQuCi0gKi8KLSNkZWZpbmUgQ0tfRl9QUgotCi1DS19DQ19JTkxJTkUg
c3RhdGljIHZvaWQKLWNrX3ByX3N0YWxsKHZvaWQpCi17Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVf
XygiIiA6OjogIm1lbW9yeSIpOwotCXJldHVybjsKLX0KLQotI2lmIGRlZmluZWQoX19BUk1fQVJD
SF83X18pIHx8IGRlZmluZWQoX19BUk1fQVJDSF83QV9fKQotI2RlZmluZSBDS19JU0IgX19hc20g
X192b2xhdGlsZSgiaXNiIiA6IDogInIiICgwKSA6ICJtZW1vcnkiKQotI2RlZmluZSBDS19ETUIg
X19hc20gX192b2xhdGlsZSgiZG1iIiA6IDogInIiICgwKSA6ICJtZW1vcnkiKQotI2RlZmluZSBD
S19EU0IgX19hc20gX192b2xhdGlsZSgiZHNiIiA6IDogInIiICgwKSA6ICJtZW1vcnkiKQotLyog
RnJlZUJTRCdzIHRvb2xjaGFpbiBkb2Vzbid0IGFjY2VwdCBkbWIgc3QsIHNvIHVzZSB0aGUgb3Bj
b2RlIGluc3RlYWQgKi8KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2RlZmluZSBDS19ETUJfU1QgX19h
c20gX192b2xhdGlsZSgiLndvcmQgMHhmNTdmZjA1ZSIgOiA6ICJyIiAoMCkgOiAibWVtb3J5IikK
LSNlbHNlCi0jZGVmaW5lIENLX0RNQl9TVCBfX2FzbSBfX3ZvbGF0aWxlKCJkbWIgc3QiIDogOiAi
ciIgKDApIDogIm1lbW9yeSIpCi0jZW5kaWYgLyogX19GcmVlQlNEX18gKi8KLSNlbHNlCi0vKiBh
cm12NiBkb2Vzbid0IGhhdmUgZHNiL2RtYi9pc2IsIGFuZCBubyB3YXkgdG8gd2FpdCBvbmx5IGZv
ciBzdG9yZXMgKi8KLSNkZWZpbmUgQ0tfSVNCIFwKLSAgICBfX2FzbSBfX3ZvbGF0aWxlKCJtY3Ig
cDE1LCAwLCAlMCwgYzcsIGM1LCA0IiA6IDogInIiICgwKSA6ICJtZW1vcnkiKQotI2RlZmluZSBD
S19EU0IgXAotICAgIF9fYXNtIF9fdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA0
IiA6IDogInIiICgwKSA6ICJtZW1vcnkiKQotI2RlZmluZSBDS19ETUIgIFwKLSAgICBfX2FzbSBf
X3ZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNSIgOiA6ICJyIiAoMCkgOiAibWVt
b3J5IikKLSNkZWZpbmUgQ0tfRE1CX1NUIENLX0RNQgotI2VuZGlmCi0KLSNkZWZpbmUgQ0tfUFJf
RkVOQ0UoVCwgSSkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCVwKLQlja19wcl9m
ZW5jZV9zdHJpY3RfIyNUKHZvaWQpCQkJXAotCXsJCQkJCQlcCi0JCUk7CQkJCQlcCi0JfQotCi1D
S19QUl9GRU5DRShhdG9taWMsIENLX0RNQl9TVCkKLUNLX1BSX0ZFTkNFKGF0b21pY19zdG9yZSwg
Q0tfRE1CX1NUKQotQ0tfUFJfRkVOQ0UoYXRvbWljX2xvYWQsIENLX0RNQl9TVCkKLUNLX1BSX0ZF
TkNFKHN0b3JlX2F0b21pYywgQ0tfRE1CX1NUKQotQ0tfUFJfRkVOQ0UobG9hZF9hdG9taWMsIENL
X0RNQikKLUNLX1BSX0ZFTkNFKHN0b3JlLCBDS19ETUJfU1QpCi1DS19QUl9GRU5DRShzdG9yZV9s
b2FkLCBDS19ETUIpCi1DS19QUl9GRU5DRShsb2FkLCBDS19ETUIpCi1DS19QUl9GRU5DRShsb2Fk
X3N0b3JlLCBDS19ETUIpCi1DS19QUl9GRU5DRShtZW1vcnksIENLX0RNQikKLUNLX1BSX0ZFTkNF
KGFjcXVpcmUsIENLX0RNQikKLUNLX1BSX0ZFTkNFKHJlbGVhc2UsIENLX0RNQikKLUNLX1BSX0ZF
TkNFKGFjcXJlbCwgQ0tfRE1CKQotQ0tfUFJfRkVOQ0UobG9jaywgQ0tfRE1CKQotQ0tfUFJfRkVO
Q0UodW5sb2NrLCBDS19ETUIpCi0KLSN1bmRlZiBDS19QUl9GRU5DRQotCi0jdW5kZWYgQ0tfSVNC
Ci0jdW5kZWYgQ0tfRFNCCi0jdW5kZWYgQ0tfRE1CCi0jdW5kZWYgQ0tfRE1CX1NUCi0KLSNkZWZp
bmUgQ0tfUFJfTE9BRChTLCBNLCBULCBDLCBJKQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyBU
CQkJCQlcCi0JY2tfcHJfbWRfbG9hZF8jI1MoY29uc3QgTSAqdGFyZ2V0KQkJCVwKLQl7CQkJCQkJ
CVwKLQkJbG9uZyByID0gMDsJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oSSAiICUwLCBb
JTFdOyIJCVwKLQkJCQkJOiAiPXIiIChyKQkJXAotCQkJCQk6ICJyIiAgKHRhcmdldCkJCVwKLQkJ
CQkJOiAibWVtb3J5Iik7CQlcCi0JCXJldHVybiAoKFQpcik7CQkJCQlcCi0JfQotCi1DS19QUl9M
T0FEKHB0ciwgdm9pZCwgdm9pZCAqLCB1aW50MzJfdCwgImxkciIpCi0KLSNkZWZpbmUgQ0tfUFJf
TE9BRF9TKFMsIFQsIEkpIENLX1BSX0xPQUQoUywgVCwgVCwgVCwgSSkKLQotQ0tfUFJfTE9BRF9T
KDMyLCB1aW50MzJfdCwgImxkciIpCi1DS19QUl9MT0FEX1MoMTYsIHVpbnQxNl90LCAibGRyaCIp
Ci1DS19QUl9MT0FEX1MoOCwgdWludDhfdCwgImxkcmIiKQotQ0tfUFJfTE9BRF9TKHVpbnQsIHVu
c2lnbmVkIGludCwgImxkciIpCi1DS19QUl9MT0FEX1MoaW50LCBpbnQsICJsZHIiKQotQ0tfUFJf
TE9BRF9TKHNob3J0LCBzaG9ydCwgImxkcmgiKQotQ0tfUFJfTE9BRF9TKGNoYXIsIGNoYXIsICJs
ZHJiIikKLQotI3VuZGVmIENLX1BSX0xPQURfUwotI3VuZGVmIENLX1BSX0xPQUQKLQotI2lmIGRl
ZmluZWQoX19BUk1fQVJDSF83X18pIHx8IGRlZmluZWQoX19BUk1fQVJDSF83QV9fKQotCi0jZGVm
aW5lIENLX1BSX0RPVUJMRV9MT0FEKFQsIE4pIAkJXAotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBUCQkJ
CVwKLWNrX3ByX21kX2xvYWRfIyNOKGNvbnN0IFQgKnRhcmdldCkJCVwKLXsJCQkJCQlcCi0JcmVn
aXN0ZXIgVCByZXQ7CQkJCVwKLQkJCQkJCVwKLQlfX2FzbSBfX3ZvbGF0aWxlKCJsZHJleGQgJTAs
IFslMV0iIAlcCi0JICAgIDogIj0mciIgKHJldCkJCQlcCi0JICAgIDogInIiICh0YXJnZXQpCQkJ
XAotCSAgICA6ICJtZW1vcnkiLCAiY2MiKTsJCQlcCi0JcmV0dXJuIChyZXQpOwkJCQlcCi19CQkJ
CQkKLQotQ0tfUFJfRE9VQkxFX0xPQUQodWludDY0X3QsIDY0KQotI2lmbmRlZiBDS19QUl9ESVNB
QkxFX0RPVUJMRQotQ0tfUFJfRE9VQkxFX0xPQUQoZG91YmxlLCBkb3VibGUpCi0jZW5kaWYKLSN1
bmRlZiBDS19QUl9ET1VCTEVfTE9BRAotI2VuZGlmCi0KLSNkZWZpbmUgQ0tfUFJfU1RPUkUoUywg
TSwgVCwgQywgSSkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCQlcCi0JY2tfcHJf
bWRfc3RvcmVfIyNTKE0gKnRhcmdldCwgVCB2KQkJCVwKLQl7CQkJCQkJCVwKLQkJX19hc21fXyBf
X3ZvbGF0aWxlX18oSSAiICUxLCBbJTBdIgkJXAotCQkJCQk6CQkJXAotCQkJCQk6ICJyIiAodGFy
Z2V0KSwJCVwKLQkJCQkJICAiciIgKHYpCQlcCi0JCQkJCTogIm1lbW9yeSIpOwkJXAotCQlyZXR1
cm47CQkJCQkJXAotCX0KLQotQ0tfUFJfU1RPUkUocHRyLCB2b2lkLCBjb25zdCB2b2lkICosIHVp
bnQzMl90LCAic3RyIikKLQotI2RlZmluZSBDS19QUl9TVE9SRV9TKFMsIFQsIEkpIENLX1BSX1NU
T1JFKFMsIFQsIFQsIFQsIEkpCi0KLUNLX1BSX1NUT1JFX1MoMzIsIHVpbnQzMl90LCAic3RyIikK
LUNLX1BSX1NUT1JFX1MoMTYsIHVpbnQxNl90LCAic3RyaCIpCi1DS19QUl9TVE9SRV9TKDgsIHVp
bnQ4X3QsICJzdHJiIikKLUNLX1BSX1NUT1JFX1ModWludCwgdW5zaWduZWQgaW50LCAic3RyIikK
LUNLX1BSX1NUT1JFX1MoaW50LCBpbnQsICJzdHIiKQotQ0tfUFJfU1RPUkVfUyhzaG9ydCwgc2hv
cnQsICJzdHJoIikKLUNLX1BSX1NUT1JFX1MoY2hhciwgY2hhciwgInN0cmIiKQotCi0jdW5kZWYg
Q0tfUFJfU1RPUkVfUwotI3VuZGVmIENLX1BSX1NUT1JFCi0KLSNpZiBkZWZpbmVkKF9fQVJNX0FS
Q0hfN19fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN0FfXykKLQotI2RlZmluZSBDS19QUl9ET1VC
TEVfU1RPUkUoVCwgTikJCQkJXAotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJCQlcCi1ja19w
cl9tZF9zdG9yZV8jI04oY29uc3QgVCAqdGFyZ2V0LCBUIHZhbHVlKQkJCVwKLXsJCQkJCQkJCVwK
LQlUIHRtcDsJCQkJCQkJXAotCXVpbnQzMl90IGZsYWc7CQkJCQkJXAotCV9fYXNtIF9fdm9sYXRp
bGUoIjE6IAkJXG4iCQkJXAotCSAgICAJCSAibGRyZXhkCSUwLCBbJTJdXG4iCQlcCi0JCQkgInN0
cmV4ZAklMSwgJTMsIFslMl1cbiIJCVwKLQkJCSAidGVxCQklMSwgIzBcbiIJCVwKLQkJCSAiaXQg
bmUJCVxuIgkJCVwKLQkJCSAiYm5lCQkxYlxuIgkJCVwKLQkJCQk6ICI9JnIiICh0bXApLCAiPSZy
IiAoZmxhZykJXAotCQkJCTogInIiICh0YXJnZXQpLCAiciIgKHZhbHVlKQlcCi0JCQkJOiAibWVt
b3J5IiwgImNjIik7CQlcCi19Ci0KLUNLX1BSX0RPVUJMRV9TVE9SRSh1aW50NjRfdCwgNjQpCi0j
aWZuZGVmIENLX1BSX0RJU0FCTEVfRE9VQkxFCi1DS19QUl9ET1VCTEVfU1RPUkUoZG91YmxlLCBk
b3VibGUpCi0jZW5kaWYKLQotI3VuZGVmIENLX1BSX0RPVUJMRV9TVE9SRQotCi0jZGVmaW5lIENL
X1BSX0RPVUJMRV9DQVNfVkFMVUUoVCwgTikJCQkJXAotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29s
CQkJCQlcCi1ja19wcl9jYXNfIyNOIyNfdmFsdWUoVCAqdGFyZ2V0LCBUIGNvbXBhcmUsIFQgc2V0
LCBUICp2YWx1ZSkJXAotewkJCQkJCQkJXAotICAgICAgICBUIHByZXZpb3VzOwkJCQkJCVwKLSAg
ICAgICAgaW50IHRtcDsJCQkJCQlcCi0JCQkJCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygi
MToiCQkJCVwKLQkJCSAgICAgImxkcmV4ZCAlMCwgWyU0XTsiCQkJXAotCQkJICAgICAiY21wICAg
ICVRMCwgJVEyOyIJCQlcCi0JCQkgICAgICJpdHR0IGVxOyIJCQkJXAotCQkJICAgICAiY21wZXEg
ICVSMCwgJVIyOyIJCQlcCi0JCQkgICAgICJzdHJleGRlcSAlMSwgJTMsIFslNF07IgkJXAotCQkJ
ICAgICAiY21wZXEgICUxLCAjMTsiCQkJXAotCQkJICAgICAiYmVxIDFiOyIJCQkJXAotCQkJCToi
PSZyIiAocHJldmlvdXMpLCAiPSZyIiAodG1wKQlcCi0JCQkJOiAiciIgKGNvbXBhcmUpLCAiciIg
KHNldCkgLAlcCi0JCQkJICAiciIodGFyZ2V0KQkJCVwKLQkJCQk6ICJtZW1vcnkiLCAiY2MiKTsJ
CVwKLSAgICAgICAgKnZhbHVlID0gcHJldmlvdXM7CQkJCQlcCi0JcmV0dXJuICgqdmFsdWUgPT0g
Y29tcGFyZSk7CQkJCVwKLX0KLQotQ0tfUFJfRE9VQkxFX0NBU19WQUxVRSh1aW50NjRfdCwgNjQp
Ci0jaWZuZGVmIENLX1BSX0RJU0FCTEVfRE9VQkxFCi1DS19QUl9ET1VCTEVfQ0FTX1ZBTFVFKGRv
dWJsZSwgZG91YmxlKQotI2VuZGlmCi0KLSN1bmRlZiBDS19QUl9ET1VCTEVfQ0FTX1ZBTFVFCi0K
LUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfcHJfY2FzX3B0cl8yX3ZhbHVlKHZvaWQgKnRh
cmdldCwgdm9pZCAqY29tcGFyZSwgdm9pZCAqc2V0LCB2b2lkICp2YWx1ZSkKLXsKLQl1aW50MzJf
dCAqX2NvbXBhcmUgPSBDS19DUFBfQ0FTVCh1aW50MzJfdCAqLCBjb21wYXJlKTsKLQl1aW50MzJf
dCAqX3NldCA9IENLX0NQUF9DQVNUKHVpbnQzMl90ICosIHNldCk7Ci0JdWludDY0X3QgX19jb21w
YXJlID0gKCh1aW50NjRfdClfY29tcGFyZVswXSkgfCAoKHVpbnQ2NF90KV9jb21wYXJlWzFdIDw8
IDMyKTsKLQl1aW50NjRfdCBfX3NldCA9ICgodWludDY0X3QpX3NldFswXSkgfCAoKHVpbnQ2NF90
KV9zZXRbMV0gPDwgMzIpOwotCi0JcmV0dXJuIChja19wcl9jYXNfNjRfdmFsdWUoQ0tfQ1BQX0NB
U1QodWludDY0X3QgKiwgdGFyZ2V0KSwKLQkJCQkgICBfX2NvbXBhcmUsCi0JCQkJICAgX19zZXQs
Ci0JCQkJICAgQ0tfQ1BQX0NBU1QodWludDY0X3QgKiwgdmFsdWUpKSk7Ci19Ci0KLSNkZWZpbmUg
Q0tfUFJfRE9VQkxFX0NBUyhULCBOKSAgCQlcCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wJCQlc
Ci1ja19wcl9jYXNfIyNOKFQgKnRhcmdldCwgVCBjb21wYXJlLCBUIHNldCkJXAotewkJCQkJCVwK
LQlpbnQgcmV0OwkJCQlcCi0gICAgICAgIFQgdG1wOwkJCQkJXAotCQkJCQkJXAotCV9fYXNtX18g
X192b2xhdGlsZV9fKCIxOiIJCVwKLQkJCSAgICAgIm1vdiAlMCwgIzA7IglcCi0JCQkgICAgICJs
ZHJleGQgJTEsIFslNF07IglcCi0JCQkgICAgICJjbXAgICAgJVExLCAlUTI7IglcCi0JCQkgICAg
ICJpdHR0dCBlcTsiCVwKLQkJCSAgICAgImNtcGVxICAlUjEsICVSMjsiCVwKLQkJCSAgICAgInN0
cmV4ZGVxICUxLCAlMywgWyU0XTsiIFwKLQkJCSAgICAgIm1vdmVxICUwLCAjMTsiCVwKLQkJCSAg
ICAgImNtcGVxICAlMSwgIzE7IglcCi0JCQkgICAgICJiZXEgMWI7IgkJXAotCQkJICAgICA6ICI9
JnIiIChyZXQpLCAiPSZyIiAodG1wKSBcCi0JCQkgICAgIDogInIiIChjb21wYXJlKSwgInIiIChz
ZXQpICwgXAotCQkJICAgICAgICJyIih0YXJnZXQpCVwKLQkJCSAgICAgOiAibWVtb3J5IiwgImNj
Iik7CVwKLQkJCQkJCVwKLQlyZXR1cm4gKHJldCk7CQkJCVwKLX0KLQotQ0tfUFJfRE9VQkxFX0NB
Uyh1aW50NjRfdCwgNjQpCi0jaWZuZGVmIENLX1BSX0RJU0FCTEVfRE9VQkxFCi1DS19QUl9ET1VC
TEVfQ0FTKGRvdWJsZSwgZG91YmxlKQotI2VuZGlmCi0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9v
bAotY2tfcHJfY2FzX3B0cl8yKHZvaWQgKnRhcmdldCwgdm9pZCAqY29tcGFyZSwgdm9pZCAqc2V0
KQotewotCXVpbnQzMl90ICpfY29tcGFyZSA9IENLX0NQUF9DQVNUKHVpbnQzMl90ICosIGNvbXBh
cmUpOwotCXVpbnQzMl90ICpfc2V0ID0gQ0tfQ1BQX0NBU1QodWludDMyX3QgKiwgc2V0KTsKLQl1
aW50NjRfdCBfX2NvbXBhcmUgPSAoKHVpbnQ2NF90KV9jb21wYXJlWzBdKSB8ICgodWludDY0X3Qp
X2NvbXBhcmVbMV0gPDwgMzIpOwotCXVpbnQ2NF90IF9fc2V0ID0gKCh1aW50NjRfdClfc2V0WzBd
KSB8ICgodWludDY0X3QpX3NldFsxXSA8PCAzMik7Ci0JcmV0dXJuIChja19wcl9jYXNfNjQoQ0tf
Q1BQX0NBU1QodWludDY0X3QgKiwgdGFyZ2V0KSwKLQkJCSAgICAgX19jb21wYXJlLAotCQkJICAg
ICBfX3NldCkpOwotfQotCi0jZW5kaWYKLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19w
cl9jYXNfcHRyX3ZhbHVlKHZvaWQgKnRhcmdldCwgdm9pZCAqY29tcGFyZSwgdm9pZCAqc2V0LCB2
b2lkICp2YWx1ZSkKLXsKLQl2b2lkICpwcmV2aW91cywgKnRtcDsKLQlfX2FzbV9fIF9fdm9sYXRp
bGVfXygiMToiCi0JCQkgICAgICJsZHJleCAlMCwgWyUyXTsiCi0JCQkgICAgICJjbXAgICAlMCwg
JTQ7IgotCQkJICAgICAiaXR0IGVxOyIKLQkJCSAgICAgInN0cmV4ZXEgJTEsICUzLCBbJTJdOyIK
LQkJCSAgICAgImNtcGVxICAgJTEsICMxOyIKLQkJCSAgICAgImJlcSAgIDFiOyIKLQkJCSAgCTog
Ij0mciIgKHByZXZpb3VzKSwKLQkJCQkgICI9JnIiICh0bXApCi0JCSAgCQk6ICJyIiAgICh0YXJn
ZXQpLAotCQkJCSAgInIiICAgKHNldCksCi0JCQkJICAiciIgICAoY29tcGFyZSkKLQkJCQk6ICJt
ZW1vcnkiLCAiY2MiKTsKLQkqKHZvaWQgKiopdmFsdWUgPSBwcmV2aW91czsKLQlyZXR1cm4gKHBy
ZXZpb3VzID09IGNvbXBhcmUpOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wKLWNrX3By
X2Nhc19wdHIodm9pZCAqdGFyZ2V0LCB2b2lkICpjb21wYXJlLCB2b2lkICpzZXQpCi17Ci0Jdm9p
ZCAqcHJldmlvdXMsICp0bXA7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6IgotCQkJICAgICAi
bGRyZXggJTAsIFslMl07IgotCQkJICAgICAiY21wICAgJTAsICU0OyIKLQkJCSAgICAgIml0dCBl
cTsiCi0JCQkgICAgICJzdHJleGVxICUxLCAlMywgWyUyXTsiCi0JCQkgICAgICJjbXBlcSAgICUx
LCAjMTsiCi0JCQkgICAgICJiZXEgICAxYjsiCi0JCQkgIAk6ICI9JnIiIChwcmV2aW91cyksCi0J
CQkJICAiPSZyIiAodG1wKQotCQkgIAkJOiAiciIgICAodGFyZ2V0KSwKLQkJCQkgICJyIiAgIChz
ZXQpLAotCQkJCSAgInIiICAgKGNvbXBhcmUpCi0JCQkJOiAibWVtb3J5IiwgImNjIik7Ci0JcmV0
dXJuIChwcmV2aW91cyA9PSBjb21wYXJlKTsKLX0KLQotI2RlZmluZSBDS19QUl9DQVMoTiwgVCwg
VykJCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCQkJCQlcCi0JY2tfcHJfY2FzXyMj
TiMjX3ZhbHVlKFQgKnRhcmdldCwgVCBjb21wYXJlLCBUIHNldCwgVCAqdmFsdWUpCVwKLQl7CQkJ
CQkJCQlcCi0JCVQgcHJldmlvdXMgPSAwLCB0bXAgPSAwOwkJCQlcCi0JCV9fYXNtX18gX192b2xh
dGlsZV9fKCIxOiIJCQkJXAotCQkJCSAgICAgImxkcmV4IiBXICIgJTAsIFslMl07IgkJXAotCQkJ
CSAgICAgImNtcCAgICUwLCAlNDsiCQkJXAotCQkJCSAgICAgIml0dCBlcTsiCQkJCVwKLQkJCQkg
ICAgICJzdHJleCIgVyAiZXEgJTEsICUzLCBbJTJdOyIJXAotCQkgICAgCQkgICAgICJjbXBlcSAg
ICUxLCAjMTsiCQkJXAotCQkJCSAgICAgImJlcSAgIDFiOyIJCQlcCi0JCQkvKiAJCQkJCQlcCi0J
CQkgKiBVc2luZyAiKyYiIGluc3RlYWQgb2YgIj0mIiB0byBhdm9pZCBib2d1cwlcCi0JCQkgKiBj
bGFuZyB3YXJuaW5ncy4JCQkJXAotCQkJICovCQkJCQkJXAotCQkJCQk6ICIrJnIiIChwcmV2aW91
cyksCQlcCi0JCSAgICAJCQkgICIrJnIiICh0bXApCQkJXAotCQkJCQk6ICJyIiAgICh0YXJnZXQp
LAkJXAotCQkJCQkgICJyIiAgIChzZXQpLAkJCVwKLQkJCQkJICAiciIgICAoY29tcGFyZSkJCVwK
LQkJCQkJOiAibWVtb3J5IiwgImNjIik7CQlcCi0JCSp2YWx1ZSA9IHByZXZpb3VzOyAJCQkJCVwK
LQkJcmV0dXJuIChwcmV2aW91cyA9PSBjb21wYXJlKTsJCQkJXAotCX0JCQkJCQkJCVwKLQlDS19D
Q19JTkxJTkUgc3RhdGljIGJvb2wJCQkJCVwKLQlja19wcl9jYXNfIyNOKFQgKnRhcmdldCwgVCBj
b21wYXJlLCBUIHNldCkJCQlcCi0JewkJCQkJCQkJXAotCQlUIHByZXZpb3VzID0gMCwgdG1wID0g
MDsJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiMToiCQkJCVwKLQkJCQkgICAgICJsZHJl
eCIgVyAiICUwLCBbJTJdOyIJCVwKLQkJCQkgICAgICJjbXAgICAlMCwgJTQ7IgkJCVwKLQkJCQkg
ICAgICJpdHQgZXE7IgkJCQlcCi0JCQkJICAgICAic3RyZXgiIFcgImVxICUxLCAlMywgWyUyXTsi
CVwKLQkJCQkgICAgICJjbXBlcSAgICUxLCAjMTsiCQkJXAotCQkJCSAgICAgImJlcSAgIDFiOyIJ
CQlcCi0JCQkJCTogIismciIgKHByZXZpb3VzKSwJCVwKLQkJICAgIAkJCSAgIismciIgKHRtcCkJ
CQlcCi0JCQkJCTogInIiICAgKHRhcmdldCksCQlcCi0JCQkJCSAgInIiICAgKHNldCksCQkJXAot
CQkJCQkgICJyIiAgIChjb21wYXJlKQkJXAotCQkJCQk6ICJtZW1vcnkiLCAiY2MiKTsJCVwKLQkJ
cmV0dXJuIChwcmV2aW91cyA9PSBjb21wYXJlKTsJCQkJXAotCX0KLQotQ0tfUFJfQ0FTKDMyLCB1
aW50MzJfdCwgIiIpCi1DS19QUl9DQVModWludCwgdW5zaWduZWQgaW50LCAiIikKLUNLX1BSX0NB
UyhpbnQsIGludCwgIiIpCi1DS19QUl9DQVMoMTYsIHVpbnQxNl90LCAiaCIpCi1DS19QUl9DQVMo
OCwgdWludDhfdCwgImIiKQotQ0tfUFJfQ0FTKHNob3J0LCBzaG9ydCwgImgiKQotQ0tfUFJfQ0FT
KGNoYXIsIGNoYXIsICJiIikKLQotCi0jdW5kZWYgQ0tfUFJfQ0FTCi0KLSNkZWZpbmUgQ0tfUFJf
RkFTKE4sIE0sIFQsIFcpCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyBUCQkJCQlcCi0JY2tf
cHJfZmFzXyMjTihNICp0YXJnZXQsIFQgdikJCQkJXAotCXsJCQkJCQkJXAotCQlUIHByZXZpb3Vz
ID0gMDsJCQkJCVwKLQkJVCB0bXAgPSAwOwkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygi
MToiCQkJXAotCQkJCSAgICAgImxkcmV4IiBXICIgJTAsIFslMl07IglcCi0JCQkJICAgICAic3Ry
ZXgiIFcgIiAlMSwgJTMsIFslMl07IglcCi0JCSAgICAJCSAgICAgImNtcCAlMSwgIzA7IgkJXAot
CQkJCSAgICAgImJuZSAxYjsiCQkJXAotCQkJCQk6ICIrJnIiIChwcmV2aW91cyksCVwKLQkJICAg
IAkJCSAgIismciIgKHRtcCkgCQlcCi0JCQkJCTogInIiICAgKHRhcmdldCksCVwKLQkJCQkJICAi
ciIgICAodikJCVwKLQkJCQkJOiAibWVtb3J5IiwgImNjIik7CVwKLQkJcmV0dXJuIChwcmV2aW91
cyk7CQkJCVwKLQl9Ci0KLUNLX1BSX0ZBUygzMiwgdWludDMyX3QsIHVpbnQzMl90LCAiIikKLUNL
X1BSX0ZBUyhwdHIsIHZvaWQsIHZvaWQgKiwgIiIpCi1DS19QUl9GQVMoaW50LCBpbnQsIGludCwg
IiIpCi1DS19QUl9GQVModWludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsICIiKQotQ0tf
UFJfRkFTKDE2LCB1aW50MTZfdCwgdWludDE2X3QsICJoIikKLUNLX1BSX0ZBUyg4LCB1aW50OF90
LCB1aW50OF90LCAiYiIpCi1DS19QUl9GQVMoc2hvcnQsIHNob3J0LCBzaG9ydCwgImgiKQotQ0tf
UFJfRkFTKGNoYXIsIGNoYXIsIGNoYXIsICJiIikKLQotCi0jdW5kZWYgQ0tfUFJfRkFTCi0KLSNk
ZWZpbmUgQ0tfUFJfVU5BUlkoTywgTiwgTSwgVCwgSSwgVykJCQkJXAotCUNLX0NDX0lOTElORSBz
dGF0aWMgdm9pZAkJCQlcCi0JY2tfcHJfIyNPIyNfIyNOKE0gKnRhcmdldCkJCQkJXAotCXsJCQkJ
CQkJXAotCQlUIHByZXZpb3VzID0gMDsJCQkJCVwKLQkJVCB0bXAgPSAwOwkJCQkJXAotCQlfX2Fz
bV9fIF9fdm9sYXRpbGVfXygiMToiCQkJXAotCQkJCSAgICAgImxkcmV4IiBXICIgJTAsIFslMl07
IglcCi0JCQkJICAgICAgSSAiOyIJCQlcCi0JCQkJICAgICAic3RyZXgiIFcgIiAlMSwgJTAsIFsl
Ml07IglcCi0JCSAgICAJCSAgICAgImNtcCAgICUxLCAjMDsiCQlcCi0JCQkJICAgICAiYm5lICAg
MWI7IgkJXAotCQkJCQk6ICIrJnIiIChwcmV2aW91cyksCVwKLQkJICAgIAkJCSAgIismciIgKHRt
cCkJCVwKLQkJCQkJOiAiciIgICAodGFyZ2V0KQlcCi0JCQkJCTogIm1lbW9yeSIsICJjYyIpOwlc
Ci0JCXJldHVybjsJCQkJCQlcCi0JfQotCi1DS19QUl9VTkFSWShpbmMsIHB0ciwgdm9pZCwgdm9p
ZCAqLCAiYWRkICUwLCAlMCwgIzEiLCAiIikKLUNLX1BSX1VOQVJZKGRlYywgcHRyLCB2b2lkLCB2
b2lkICosICJzdWIgJTAsICUwLCAjMSIsICIiKQotQ0tfUFJfVU5BUlkobm90LCBwdHIsIHZvaWQs
IHZvaWQgKiwgIm12biAlMCwgJTAiLCAiIikKLUNLX1BSX1VOQVJZKG5lZywgcHRyLCB2b2lkLCB2
b2lkICosICJuZWcgJTAsICUwIiwgIiIpCi0KLSNkZWZpbmUgQ0tfUFJfVU5BUllfUyhTLCBULCBX
KQkJCQkJXAotCUNLX1BSX1VOQVJZKGluYywgUywgVCwgVCwgImFkZCAlMCwgJTAsICMxIiwgVykJ
CVwKLQlDS19QUl9VTkFSWShkZWMsIFMsIFQsIFQsICJzdWIgJTAsICUwLCAjMSIsIFcpCQlcCi0J
Q0tfUFJfVU5BUlkobm90LCBTLCBULCBULCAibXZuICUwLCAlMCIsIFcpCQlcCi0JQ0tfUFJfVU5B
UlkobmVnLCBTLCBULCBULCAibmVnICUwLCAlMCIsIFcpCQlcCi0KLUNLX1BSX1VOQVJZX1MoMzIs
IHVpbnQzMl90LCAiIikKLUNLX1BSX1VOQVJZX1ModWludCwgdW5zaWduZWQgaW50LCAiIikKLUNL
X1BSX1VOQVJZX1MoaW50LCBpbnQsICIiKQotQ0tfUFJfVU5BUllfUygxNiwgdWludDE2X3QsICJo
IikKLUNLX1BSX1VOQVJZX1MoOCwgdWludDhfdCwgImIiKQotQ0tfUFJfVU5BUllfUyhzaG9ydCwg
c2hvcnQsICJoIikKLUNLX1BSX1VOQVJZX1MoY2hhciwgY2hhciwgImIiKQotCi0jdW5kZWYgQ0tf
UFJfVU5BUllfUwotI3VuZGVmIENLX1BSX1VOQVJZCi0KLSNkZWZpbmUgQ0tfUFJfQklOQVJZKE8s
IE4sIE0sIFQsIEksIFcpCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIHZvaWQJCQkJXAotCWNr
X3ByXyMjTyMjXyMjTihNICp0YXJnZXQsIFQgZGVsdGEpCQkJXAotCXsJCQkJCQkJXAotCQlUIHBy
ZXZpb3VzID0gMDsJCQkJCVwKLQkJVCB0bXAgPSAwOwkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRp
bGVfXygiMToiCQkJXAotCQkJCSAgICAgImxkcmV4IiBXICIgJTAsIFslMl07IglcCi0JCQkJICAg
ICAgSSAiICUwLCAlMCwgJTM7IgkJXAotCQkJCSAgICAgInN0cmV4IiBXICIgJTEsICUwLCBbJTJd
OyIJXAotCQkgICAgCQkgICAgICJjbXAgJTEsICMwOyIJCVwKLQkJCQkgICAgICJibmUgMWI7IgkJ
CVwKLQkJCQkJOiAiKyZyIiAocHJldmlvdXMpLAlcCi0JCSAgICAJCQkgICIrJnIiICh0bXApCQlc
Ci0JCQkJCTogInIiICAgKHRhcmdldCksCVwKLQkJCQkJICAiciIgICAoZGVsdGEpCQlcCi0JCQkJ
CTogIm1lbW9yeSIsICJjYyIpOwlcCi0JCXJldHVybjsJCQkJCQlcCi0JfQotCi1DS19QUl9CSU5B
UlkoYW5kLCBwdHIsIHZvaWQsIHVpbnRwdHJfdCwgImFuZCIsICIiKQotQ0tfUFJfQklOQVJZKGFk
ZCwgcHRyLCB2b2lkLCB1aW50cHRyX3QsICJhZGQiLCAiIikKLUNLX1BSX0JJTkFSWShvciwgcHRy
LCB2b2lkLCB1aW50cHRyX3QsICJvcnIiLCAiIikKLUNLX1BSX0JJTkFSWShzdWIsIHB0ciwgdm9p
ZCwgdWludHB0cl90LCAic3ViIiwgIiIpCi1DS19QUl9CSU5BUlkoeG9yLCBwdHIsIHZvaWQsIHVp
bnRwdHJfdCwgImVvciIsICIiKQotCi0jZGVmaW5lIENLX1BSX0JJTkFSWV9TKFMsIFQsIFcpCQkJ
XAotCUNLX1BSX0JJTkFSWShhbmQsIFMsIFQsIFQsICJhbmQiLCBXKQlcCi0JQ0tfUFJfQklOQVJZ
KGFkZCwgUywgVCwgVCwgImFkZCIsIFcpCVwKLQlDS19QUl9CSU5BUlkob3IsIFMsIFQsIFQsICJv
cnIiLCBXKQlcCi0JQ0tfUFJfQklOQVJZKHN1YiwgUywgVCwgVCwgInN1YiIsIFcpCVwKLQlDS19Q
Ul9CSU5BUlkoeG9yLCBTLCBULCBULCAiZW9yIiwgVykKLQotQ0tfUFJfQklOQVJZX1MoMzIsIHVp
bnQzMl90LCAiIikKLUNLX1BSX0JJTkFSWV9TKHVpbnQsIHVuc2lnbmVkIGludCwgIiIpCi1DS19Q
Ul9CSU5BUllfUyhpbnQsIGludCwgIiIpCi1DS19QUl9CSU5BUllfUygxNiwgdWludDE2X3QsICJo
IikKLUNLX1BSX0JJTkFSWV9TKDgsIHVpbnQ4X3QsICJiIikKLUNLX1BSX0JJTkFSWV9TKHNob3J0
LCBzaG9ydCwgImgiKQotQ0tfUFJfQklOQVJZX1MoY2hhciwgY2hhciwgImIiKQotCi0jdW5kZWYg
Q0tfUFJfQklOQVJZX1MKLSN1bmRlZiBDS19QUl9CSU5BUlkKLQotQ0tfQ0NfSU5MSU5FIHN0YXRp
YyB2b2lkICoKLWNrX3ByX2ZhYV9wdHIodm9pZCAqdGFyZ2V0LCB1aW50cHRyX3QgZGVsdGEpCi17
Ci0JdWludHB0cl90IHByZXZpb3VzLCByLCB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygi
MToiCi0JCQkgICAgICJsZHJleCAlMCwgWyUzXTsiCi0JCQkgICAgICJhZGQgJTEsICU0LCAlMDsi
Ci0JCQkgICAgICJzdHJleCAlMiwgJTEsIFslM107IgotCQkJICAgICAiY21wICUyLCAjMDsiCi0J
CQkgICAgICJibmUgIDFiOyIKLQkJCQk6ICI9JnIiIChwcmV2aW91cyksCi0JCQkJICAiPSZyIiAo
ciksCi0JCQkJICAiPSZyIiAodG1wKQotCQkJCTogInIiICAgKHRhcmdldCksCi0JCQkJICAiciIg
ICAoZGVsdGEpCi0JCQkJOiAibWVtb3J5IiwgImNjIik7Ci0KLQlyZXR1cm4gKHZvaWQgKikocHJl
dmlvdXMpOwotfQotCi0jZGVmaW5lIENLX1BSX0ZBQShTLCBULCBXKQkJCQkJCVwKLQlDS19DQ19J
TkxJTkUgc3RhdGljIFQJCQkJCQlcCi0JY2tfcHJfZmFhXyMjUyhUICp0YXJnZXQsIFQgZGVsdGEp
CQkJCVwKLQl7CQkJCQkJCQlcCi0JCVQgcHJldmlvdXMgPSAwLCByID0gMCwgdG1wID0gMDsJCQkJ
XAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiMToiCQkJCVwKLQkJCQkgICAgICJsZHJleCIgVyAi
ICUwLCBbJTNdOyIJCVwKLQkJCQkgICAgICJhZGQgJTEsICU0LCAlMDsiCQkJXAotCQkJCSAgICAg
InN0cmV4IiBXICIgJTIsICUxLCBbJTNdOyIJCVwKLQkJICAgIAkJICAgICAiY21wICUyLCAjMDsi
CQkJXAotCQkJCSAgICAgImJuZSAgMWI7IgkJCQlcCi0JCQkJCTogIismciIgKHByZXZpb3VzKSwJ
CVwKLQkJCQkJICAiKyZyIiAociksCQkJXAotCQkgICAgCQkJICAiKyZyIiAodG1wKQkJCVwKLQkJ
CQkJOiAiciIgICAodGFyZ2V0KSwJCVwKLQkJCQkJICAiciIgICAoZGVsdGEpCQkJXAotCQkJCQk6
ICJtZW1vcnkiLCAiY2MiKTsJCVwKLQkJcmV0dXJuIChwcmV2aW91cyk7CQkJCQlcCi0JfQotCi1D
S19QUl9GQUEoMzIsIHVpbnQzMl90LCAiIikKLUNLX1BSX0ZBQSh1aW50LCB1bnNpZ25lZCBpbnQs
ICIiKQotQ0tfUFJfRkFBKGludCwgaW50LCAiIikKLUNLX1BSX0ZBQSgxNiwgdWludDE2X3QsICJo
IikKLUNLX1BSX0ZBQSg4LCB1aW50OF90LCAiYiIpCi1DS19QUl9GQUEoc2hvcnQsIHNob3J0LCAi
aCIpCi1DS19QUl9GQUEoY2hhciwgY2hhciwgImIiKQotCi0jdW5kZWYgQ0tfUFJfRkFBCi0KLSNl
bmRpZiAvKiBDS19QUl9BUk1fSCAqLwotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy9ja19jYy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MvY2tfY2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTE0YTRiNTFhYTgzNWY2MTY3YzUxMDdiNjQ2ZTRlODBkNWE1MDk2OC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy9ja19jYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBD
b3B5cmlnaHQgMjAxNCBQYXVsIEtodW9uZy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBDS19HQ0NfQ0NfSAotI2RlZmluZSBDS19HQ0NfQ0NfSAotCi0jaW5jbHVkZSA8Y2tf
bWQuaD4KLQotI2lmZGVmIF9fU1VOUFJPX0MKLSNkZWZpbmUgQ0tfQ0NfVU5VU0VECi0jZGVmaW5l
IENLX0NDX1VTRUQKLSNkZWZpbmUgQ0tfQ0NfSU1NCi0jZGVmaW5lIENLX0NDX0lNTV9VMzIKLSNl
bHNlCi0jZGVmaW5lIENLX0NDX1VOVVNFRCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQotI2RlZmlu
ZSBDS19DQ19VU0VEICAgX19hdHRyaWJ1dGVfXygodXNlZCkpCi0jZGVmaW5lIENLX0NDX0lNTSAi
aSIKLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX194ODZfXykKLSNkZWZpbmUg
Q0tfQ0NfSU1NX1UzMiAiWiIKLSNkZWZpbmUgQ0tfQ0NfSU1NX1MzMiAiZSIKLSNlbHNlCi0jZGVm
aW5lIENLX0NDX0lNTV9VMzIgQ0tfQ0NfSU1NCi0jZGVmaW5lIENLX0NDX0lNTV9TMzIgQ0tfQ0Nf
SU1NCi0jZW5kaWYgLyogX194ODZfNjRfXyB8fCBfX3g4Nl9fICovCi0jZW5kaWYKLQotI2lmZGVm
IF9fT1BUSU1JWkVfXwotI2RlZmluZSBDS19DQ19JTkxJTkUgQ0tfQ0NfVU5VU0VEIGlubGluZQot
I2Vsc2UKLSNkZWZpbmUgQ0tfQ0NfSU5MSU5FIENLX0NDX1VOVVNFRAotI2VuZGlmCi0KLSNkZWZp
bmUgQ0tfQ0NfRk9SQ0VfSU5MSU5FIENLX0NDX1VOVVNFRCBfX2F0dHJpYnV0ZV9fKChhbHdheXNf
aW5saW5lKSkgaW5saW5lCi0jZGVmaW5lIENLX0NDX1JFU1RSSUNUIF9fcmVzdHJpY3RfXwotCi0v
KgotICogUGFja2VkIGF0dHJpYnV0ZS4KLSAqLwotI2RlZmluZSBDS19DQ19QQUNLRUQgX19hdHRy
aWJ1dGVfXygocGFja2VkKSkKLQotLyoKLSAqIFdlYWsgcmVmZXJlbmNlLgotICovCi0jZGVmaW5l
IENLX0NDX1dFQUtSRUYgX19hdHRyaWJ1dGVfXygod2Vha3JlZikpCi0KLS8qCi0gKiBBbGlnbm1l
bnQgYXR0cmlidXRlLgotICovCi0jZGVmaW5lIENLX0NDX0FMSUdOKEIpIF9fYXR0cmlidXRlX18o
KGFsaWduZWQoQikpKQotCi0vKgotICogQ2FjaGUgYWxpZ24uCi0gKi8KLSNkZWZpbmUgQ0tfQ0Nf
Q0FDSEVMSU5FIENLX0NDX0FMSUdOKENLX01EX0NBQ0hFTElORSkKLQotLyoKLSAqIFRoZXNlIGFy
ZSBmdW5jdGlvbnMgd2hpY2ggc2hvdWxkIGJlIGF2b2lkZWQuCi0gKi8KLSNpZmRlZiBfX2ZyZWVz
dGFuZGluZ19fCi0jcHJhZ21hIEdDQyBwb2lzb24gbWFsbG9jIGZyZWUKLSNlbmRpZgotCi0vKgot
ICogQnJhbmNoIGV4ZWN1dGlvbiBoaW50cy4KLSAqLwotI2RlZmluZSBDS19DQ19MSUtFTFkoeCkg
KF9fYnVpbHRpbl9leHBlY3QoISEoeCksIDEpKQotI2RlZmluZSBDS19DQ19VTkxJS0VMWSh4KSAo
X19idWlsdGluX2V4cGVjdCghISh4KSwgMCkpCi0KLS8qCi0gKiBTb21lIGNvbXBpbGVycyBhcmUg
b3Zlcmx5IHN0cmljdCByZWdhcmRpbmcgYWxpYXNpbmcgc2VtYW50aWNzLgotICogVW5mb3J0dW5h
dGVseSwgaW4gbWFueSBjYXNlcyBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIHBheSBhbGlhc2luZwot
ICogY29zdCByYXRoZXIgdGhhbiBvdmVybHkgZXhwZW5zaXZlIHJlZ2lzdGVyIHNwaWxsYWdlLgot
ICovCi0jZGVmaW5lIENLX0NDX0FMSUFTRUQgX19hdHRyaWJ1dGVfXygoX19tYXlfYWxpYXNfXykp
Ci0KLS8qCi0gKiBDb21waWxlLXRpbWUgdHlwZW9mCi0gKi8KLSNkZWZpbmUgQ0tfQ0NfVFlQRU9G
KFgsIERFRkFVTFQpIF9fdHlwZW9mX18oWCkKLQotLyoKLSAqIFBvcnRhYmlsaXR5IHdyYXBwZXJz
IGZvciBiaXR3aXNlIG9wcy4KLSAqLwotCi0jZGVmaW5lIENLX0ZfQ0NfRkZTCi0jZGVmaW5lIENL
X0ZfQ0NfQ0xaCi0jZGVmaW5lIENLX0ZfQ0NfQ1RaCi0jZGVmaW5lIENLX0ZfQ0NfUE9QQ09VTlQK
LQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBpbnQKLWNrX2NjX2Zmcyh1bnNpZ25lZCBpbnQgeCkKLXsK
LQotCXJldHVybiBfX2J1aWx0aW5fZmZzKHgpOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIGlu
dAotY2tfY2NfY2x6KHVuc2lnbmVkIGludCB4KQotewotCi0JcmV0dXJuIF9fYnVpbHRpbl9jbHoo
eCk7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgaW50Ci1ja19jY19jdHoodW5zaWduZWQgaW50
IHgpCi17Ci0KLQlyZXR1cm4gX19idWlsdGluX2N0eih4KTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0
YXRpYyBpbnQKLWNrX2NjX3BvcGNvdW50KHVuc2lnbmVkIGludCB4KQotewotCi0JcmV0dXJuIF9f
YnVpbHRpbl9wb3Bjb3VudCh4KTsKLX0KLQotI2VuZGlmIC8qIENLX0dDQ19DQ19IICovCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy9ja19m
X3ByLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy9ja19m
X3ByLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZjBkMTA4NzJiYTc0NDcxM2Fh
Mjk0MDE3YmVjYjlmNjU1MjNjMmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2Mv
Y2tfZl9wci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qIERPIE5PVCBFRElU
LiBUaGlzIGlzIGF1dG8tZ2VuZXJhdGVkIGZyb20gZmVhdHVyZS5zaCAqLwotI2RlZmluZSBDS19G
X1BSX0FERF8xNgotI2RlZmluZSBDS19GX1BSX0FERF8zMgotI2RlZmluZSBDS19GX1BSX0FERF82
NAotI2RlZmluZSBDS19GX1BSX0FERF84Ci0jZGVmaW5lIENLX0ZfUFJfQUREX0NIQVIKLSNkZWZp
bmUgQ0tfRl9QUl9BRERfSU5UCi0jZGVmaW5lIENLX0ZfUFJfQUREX1BUUgotI2RlZmluZSBDS19G
X1BSX0FERF9VSU5UCi0jZGVmaW5lIENLX0ZfUFJfQU5EXzE2Ci0jZGVmaW5lIENLX0ZfUFJfQU5E
XzMyCi0jZGVmaW5lIENLX0ZfUFJfQU5EXzY0Ci0jZGVmaW5lIENLX0ZfUFJfQU5EXzgKLSNkZWZp
bmUgQ0tfRl9QUl9BTkRfQ0hBUgotI2RlZmluZSBDS19GX1BSX0FORF9JTlQKLSNkZWZpbmUgQ0tf
Rl9QUl9BTkRfUFRSCi0jZGVmaW5lIENLX0ZfUFJfQU5EX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9D
QVNfMTYKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfMTZfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9DQVNf
MzIKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfMzJfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfNjQK
LSNkZWZpbmUgQ0tfRl9QUl9DQVNfNjRfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfOAotI2Rl
ZmluZSBDS19GX1BSX0NBU184X1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX0NIQVIKLSNkZWZp
bmUgQ0tfRl9QUl9DQVNfQ0hBUl9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU19JTlQKLSNkZWZp
bmUgQ0tfRl9QUl9DQVNfSU5UX1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX1BUUgotI2RlZmlu
ZSBDS19GX1BSX0NBU19QVFJfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfVUlOVAotI2RlZmlu
ZSBDS19GX1BSX0NBU19VSU5UX1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfREVDXzE2Ci0jZGVmaW5l
IENLX0ZfUFJfREVDXzMyCi0jZGVmaW5lIENLX0ZfUFJfREVDXzY0Ci0jZGVmaW5lIENLX0ZfUFJf
REVDXzgKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfQ0hBUgotI2RlZmluZSBDS19GX1BSX0RFQ19JTlQK
LSNkZWZpbmUgQ0tfRl9QUl9ERUNfUFRSCi0jZGVmaW5lIENLX0ZfUFJfREVDX1VJTlQKLSNkZWZp
bmUgQ0tfRl9QUl9GQUFfMTYKLSNkZWZpbmUgQ0tfRl9QUl9GQUFfMzIKLSNkZWZpbmUgQ0tfRl9Q
Ul9GQUFfNjQKLSNkZWZpbmUgQ0tfRl9QUl9GQUFfOAotI2RlZmluZSBDS19GX1BSX0ZBQV9DSEFS
Ci0jZGVmaW5lIENLX0ZfUFJfRkFBX0lOVAotI2RlZmluZSBDS19GX1BSX0ZBQV9QVFIKLSNkZWZp
bmUgQ0tfRl9QUl9GQUFfVUlOVAotI2RlZmluZSBDS19GX1BSX0ZFTkNFX0xPQUQKLSNkZWZpbmUg
Q0tfRl9QUl9GRU5DRV9MT0FEX0RFUEVORFMKLSNkZWZpbmUgQ0tfRl9QUl9GRU5DRV9NRU1PUlkK
LSNkZWZpbmUgQ0tfRl9QUl9GRU5DRV9TVE9SRQotI2RlZmluZSBDS19GX1BSX0ZFTkNFX1NUUklD
VF9MT0FECi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX01FTU9SWQotI2RlZmluZSBDS19G
X1BSX0ZFTkNFX1NUUklDVF9TVE9SRQotI2RlZmluZSBDS19GX1BSX0lOQ18xNgotI2RlZmluZSBD
S19GX1BSX0lOQ18zMgotI2RlZmluZSBDS19GX1BSX0lOQ182NAotI2RlZmluZSBDS19GX1BSX0lO
Q184Ci0jZGVmaW5lIENLX0ZfUFJfSU5DX0NIQVIKLSNkZWZpbmUgQ0tfRl9QUl9JTkNfSU5UCi0j
ZGVmaW5lIENLX0ZfUFJfSU5DX1BUUgotI2RlZmluZSBDS19GX1BSX0lOQ19VSU5UCi0jZGVmaW5l
IENLX0ZfUFJfTE9BRF8xNgotI2RlZmluZSBDS19GX1BSX0xPQURfMzIKLSNkZWZpbmUgQ0tfRl9Q
Ul9MT0FEXzY0Ci0jZGVmaW5lIENLX0ZfUFJfTE9BRF84Ci0jZGVmaW5lIENLX0ZfUFJfTE9BRF9D
SEFSCi0jZGVmaW5lIENLX0ZfUFJfTE9BRF9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEX1BUUgot
I2RlZmluZSBDS19GX1BSX0xPQURfVUlOVAotI2RlZmluZSBDS19GX1BSX09SXzE2Ci0jZGVmaW5l
IENLX0ZfUFJfT1JfMzIKLSNkZWZpbmUgQ0tfRl9QUl9PUl82NAotI2RlZmluZSBDS19GX1BSX09S
XzgKLSNkZWZpbmUgQ0tfRl9QUl9PUl9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfT1JfSU5UCi0jZGVm
aW5lIENLX0ZfUFJfT1JfUFRSCi0jZGVmaW5lIENLX0ZfUFJfT1JfVUlOVAotI2RlZmluZSBDS19G
X1BSX1NUQUxMCi0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfMTYKLSNkZWZpbmUgQ0tfRl9QUl9TVE9S
RV8zMgotI2RlZmluZSBDS19GX1BSX1NUT1JFXzY0Ci0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfOAot
I2RlZmluZSBDS19GX1BSX1NUT1JFX0NIQVIKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV9JTlQKLSNk
ZWZpbmUgQ0tfRl9QUl9TVE9SRV9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV9VSU5UCi0jZGVm
aW5lIENLX0ZfUFJfU1VCXzE2Ci0jZGVmaW5lIENLX0ZfUFJfU1VCXzMyCi0jZGVmaW5lIENLX0Zf
UFJfU1VCXzY0Ci0jZGVmaW5lIENLX0ZfUFJfU1VCXzgKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfQ0hB
UgotI2RlZmluZSBDS19GX1BSX1NVQl9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfUFRSCi0jZGVm
aW5lIENLX0ZfUFJfU1VCX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9YT1JfMTYKLSNkZWZpbmUgQ0tf
Rl9QUl9YT1JfMzIKLSNkZWZpbmUgQ0tfRl9QUl9YT1JfNjQKLSNkZWZpbmUgQ0tfRl9QUl9YT1Jf
OAotI2RlZmluZSBDS19GX1BSX1hPUl9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfWE9SX0lOVAotI2Rl
ZmluZSBDS19GX1BSX1hPUl9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9YT1JfVUlOVApkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MvY2tfcHIuaCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvZ2NjL2NrX3ByLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NGQ0MjMyZDgyMDEzYzdmMjQ3N2QzNWViYmIy
NzE2OTA5YTQ4OTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MvY2tfcHIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAgU2Ft
eSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICog
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQot
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDS19QUl9H
Q0NfSAotI2RlZmluZSBDS19QUl9HQ0NfSAotCi0jaWZuZGVmIENLX1BSX0gKLSNlcnJvciBEbyBu
b3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHksIHVzZSBja19wci5oCi0jZW5kaWYKLQotI2lu
Y2x1ZGUgPGNrX2NjLmg+Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfcHJfYmFycmll
cih2b2lkKQotewotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIiIgOjo6ICJtZW1vcnkiKTsKLQly
ZXR1cm47Ci19Ci0KLSNpZm5kZWYgQ0tfRl9QUgotI2RlZmluZSBDS19GX1BSCi0KLSNpbmNsdWRl
IDxja19zdGRib29sLmg+Ci0jaW5jbHVkZSA8Y2tfc3RkaW50Lmg+Ci0KLS8qCi0gKiBUaGUgZm9s
bG93aW5nIHJlcHJlc2VudCBzdXBwb3J0ZWQgYXRvbWljIG9wZXJhdGlvbnMuCi0gKiBUaGVzZSBv
cGVyYXRpb25zIG1heSBiZSBlbXVsYXRlZC4KLSAqLwotI2luY2x1ZGUgImNrX2ZfcHIuaCIKLQot
I2RlZmluZSBDS19QUl9BQ0NFU1MoeCkgKCoodm9sYXRpbGUgX190eXBlb2ZfXyh4KSAqKSYoeCkp
Ci0KLSNkZWZpbmUgQ0tfUFJfTE9BRChTLCBNLCBUKQkJIAkJCVwKLQlDS19DQ19JTkxJTkUgc3Rh
dGljIFQJCQkJCVwKLQlja19wcl9tZF9sb2FkXyMjUyhjb25zdCBNICp0YXJnZXQpCQkJXAotCXsJ
CQkJCQkJXAotCQlUIHI7CQkJCQkJXAotCQlja19wcl9iYXJyaWVyKCk7CQkJCVwKLQkJciA9IENL
X1BSX0FDQ0VTUygqKGNvbnN0IFQgKil0YXJnZXQpOwkJXAotCQlja19wcl9iYXJyaWVyKCk7CQkJ
CVwKLQkJcmV0dXJuIChyKTsJCQkJCVwKLQl9CQkJCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGlj
IHZvaWQJCQkJXAotCWNrX3ByX21kX3N0b3JlXyMjUyhNICp0YXJnZXQsIFQgdikJCQlcCi0JewkJ
CQkJCQlcCi0JCWNrX3ByX2JhcnJpZXIoKTsJCQkJXAotCQlDS19QUl9BQ0NFU1MoKihUICopdGFy
Z2V0KSA9IHY7CQkJXAotCQlja19wcl9iYXJyaWVyKCk7CQkJCVwKLQkJcmV0dXJuOwkJCQkJCVwK
LQl9Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZCAqCi1ja19wcl9tZF9sb2FkX3B0cihjb25z
dCB2b2lkICp0YXJnZXQpCi17Ci0Jdm9pZCAqcjsKLQotCWNrX3ByX2JhcnJpZXIoKTsKLQlyID0g
Q0tfQ0NfREVDT05TVF9QVFIoQ0tfUFJfQUNDRVNTKHRhcmdldCkpOwotCWNrX3ByX2JhcnJpZXIo
KTsKLQotCXJldHVybiByOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3ByX21k
X3N0b3JlX3B0cih2b2lkICp0YXJnZXQsIGNvbnN0IHZvaWQgKnYpCi17Ci0KLQlja19wcl9iYXJy
aWVyKCk7Ci0JQ0tfUFJfQUNDRVNTKHRhcmdldCkgPSBDS19DQ19ERUNPTlNUX1BUUih2KTsKLQlj
a19wcl9iYXJyaWVyKCk7Ci0JcmV0dXJuOwotfQotCi0jZGVmaW5lIENLX1BSX0xPQURfUyhTLCBU
KSBDS19QUl9MT0FEKFMsIFQsIFQpCi0KLUNLX1BSX0xPQURfUyhjaGFyLCBjaGFyKQotQ0tfUFJf
TE9BRF9TKHVpbnQsIHVuc2lnbmVkIGludCkKLUNLX1BSX0xPQURfUyhpbnQsIGludCkKLSNpZm5k
ZWYgQ0tfUFJfRElTQUJMRV9ET1VCTEUKLUNLX1BSX0xPQURfUyhkb3VibGUsIGRvdWJsZSkKLSNl
bmRpZgotQ0tfUFJfTE9BRF9TKDY0LCB1aW50NjRfdCkKLUNLX1BSX0xPQURfUygzMiwgdWludDMy
X3QpCi1DS19QUl9MT0FEX1MoMTYsIHVpbnQxNl90KQotQ0tfUFJfTE9BRF9TKDgsICB1aW50OF90
KQotCi0jdW5kZWYgQ0tfUFJfTE9BRF9TCi0jdW5kZWYgQ0tfUFJfTE9BRAotCi1DS19DQ19JTkxJ
TkUgc3RhdGljIHZvaWQKLWNrX3ByX3N0YWxsKHZvaWQpCi17Ci0KLQlja19wcl9iYXJyaWVyKCk7
Ci19Ci0KLS8qCi0gKiBMb2FkIGFuZCBzdG9yZSBmZW5jZXMgYXJlIGVxdWl2YWxlbnQgdG8gZnVs
bCBmZW5jZXMgaW4gdGhlIEdDQyBwb3J0LgotICovCi0jZGVmaW5lIENLX1BSX0ZFTkNFKFQpCQkJ
CQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJXAotCWNrX3ByX2ZlbmNlX3N0cmljdF8j
I1Qodm9pZCkJCQlcCi0JewkJCQkJCVwKLQkJX19zeW5jX3N5bmNocm9uaXplKCk7CQkJXAotCX0K
LQotQ0tfUFJfRkVOQ0UoYXRvbWljKQotQ0tfUFJfRkVOQ0UoYXRvbWljX2F0b21pYykKLUNLX1BS
X0ZFTkNFKGF0b21pY19sb2FkKQotQ0tfUFJfRkVOQ0UoYXRvbWljX3N0b3JlKQotQ0tfUFJfRkVO
Q0Uoc3RvcmVfYXRvbWljKQotQ0tfUFJfRkVOQ0UobG9hZF9hdG9taWMpCi1DS19QUl9GRU5DRShs
b2FkKQotQ0tfUFJfRkVOQ0UobG9hZF9sb2FkKQotQ0tfUFJfRkVOQ0UobG9hZF9zdG9yZSkKLUNL
X1BSX0ZFTkNFKHN0b3JlKQotQ0tfUFJfRkVOQ0Uoc3RvcmVfc3RvcmUpCi1DS19QUl9GRU5DRShz
dG9yZV9sb2FkKQotQ0tfUFJfRkVOQ0UobWVtb3J5KQotQ0tfUFJfRkVOQ0UoYWNxdWlyZSkKLUNL
X1BSX0ZFTkNFKHJlbGVhc2UpCi1DS19QUl9GRU5DRShhY3FyZWwpCi1DS19QUl9GRU5DRShsb2Nr
KQotQ0tfUFJfRkVOQ0UodW5sb2NrKQotCi0jdW5kZWYgQ0tfUFJfRkVOQ0UKLQotLyoKLSAqIEF0
b21pYyBjb21wYXJlIGFuZCBzd2FwLgotICovCi0jZGVmaW5lIENLX1BSX0NBUyhTLCBNLCBUKQkJ
CQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCQkJCQkJXAotCWNrX3ByX2Nhc18jI1Mo
TSAqdGFyZ2V0LCBUIGNvbXBhcmUsIFQgc2V0KQkJCQlcCi0JewkJCQkJCQkJCVwKLQkJYm9vbCB6
OwkJCQkJCQkJXAotCQl6ID0gX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCgoVCAqKXRhcmdl
dCwgY29tcGFyZSwgc2V0KTsJXAotCQlyZXR1cm4gejsJCQkJCQkJXAotCX0KLQotQ0tfUFJfQ0FT
KHB0ciwgdm9pZCwgdm9pZCAqKQotCi0jZGVmaW5lIENLX1BSX0NBU19TKFMsIFQpIENLX1BSX0NB
UyhTLCBULCBUKQotCi1DS19QUl9DQVNfUyhjaGFyLCBjaGFyKQotQ0tfUFJfQ0FTX1MoaW50LCBp
bnQpCi1DS19QUl9DQVNfUyh1aW50LCB1bnNpZ25lZCBpbnQpCi1DS19QUl9DQVNfUyg2NCwgdWlu
dDY0X3QpCi1DS19QUl9DQVNfUygzMiwgdWludDMyX3QpCi1DS19QUl9DQVNfUygxNiwgdWludDE2
X3QpCi1DS19QUl9DQVNfUyg4LCAgdWludDhfdCkKLQotI3VuZGVmIENLX1BSX0NBU19TCi0jdW5k
ZWYgQ0tfUFJfQ0FTCi0KLS8qCi0gKiBDb21wYXJlIGFuZCBzd2FwLCBzZXQgKnYgdG8gb2xkIHZh
bHVlIG9mIHRhcmdldC4KLSAqLwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19wcl9jYXNf
cHRyX3ZhbHVlKHZvaWQgKnRhcmdldCwgdm9pZCAqY29tcGFyZSwgdm9pZCAqc2V0LCB2b2lkICp2
KQotewotCXNldCA9IF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcCgodm9pZCAqKil0YXJnZXQs
IGNvbXBhcmUsIHNldCk7Ci0JKih2b2lkICoqKXYgPSBzZXQ7Ci0JcmV0dXJuIChzZXQgPT0gY29t
cGFyZSk7Ci19Ci0KLSNkZWZpbmUgQ0tfUFJfQ0FTX08oUywgVCkJCQkJCQlcCi0JQ0tfQ0NfSU5M
SU5FIHN0YXRpYyBib29sCQkJCQlcCi0JY2tfcHJfY2FzXyMjUyMjX3ZhbHVlKFQgKnRhcmdldCwg
VCBjb21wYXJlLCBUIHNldCwgVCAqdikJXAotCXsJCQkJCQkJCVwKLQkJc2V0ID0gX19zeW5jX3Zh
bF9jb21wYXJlX2FuZF9zd2FwKHRhcmdldCwgY29tcGFyZSwgc2V0KTtcCi0JCSp2ID0gc2V0OwkJ
CQkJCVwKLQkJcmV0dXJuIChzZXQgPT0gY29tcGFyZSk7CQkJCVwKLQl9Ci0KLUNLX1BSX0NBU19P
KGNoYXIsIGNoYXIpCi1DS19QUl9DQVNfTyhpbnQsIGludCkKLUNLX1BSX0NBU19PKHVpbnQsIHVu
c2lnbmVkIGludCkKLUNLX1BSX0NBU19PKDY0LCB1aW50NjRfdCkKLUNLX1BSX0NBU19PKDMyLCB1
aW50MzJfdCkKLUNLX1BSX0NBU19PKDE2LCB1aW50MTZfdCkKLUNLX1BSX0NBU19PKDgsICB1aW50
OF90KQotCi0jdW5kZWYgQ0tfUFJfQ0FTX08KLQotLyoKLSAqIEF0b21pYyBmZXRjaC1hbmQtYWRk
IG9wZXJhdGlvbnMuCi0gKi8KLSNkZWZpbmUgQ0tfUFJfRkFBKFMsIE0sIFQpCQkJCQlcCi0JQ0tf
Q0NfSU5MSU5FIHN0YXRpYyBUCQkJCQlcCi0JY2tfcHJfZmFhXyMjUyhNICp0YXJnZXQsIFQgZCkJ
CQkJXAotCXsJCQkJCQkJXAotCQlkID0gX19zeW5jX2ZldGNoX2FuZF9hZGQoKFQgKil0YXJnZXQs
IGQpOwlcCi0JCXJldHVybiAoZCk7CQkJCQlcCi0JfQotCi1DS19QUl9GQUEocHRyLCB2b2lkLCB2
b2lkICopCi0KLSNkZWZpbmUgQ0tfUFJfRkFBX1MoUywgVCkgQ0tfUFJfRkFBKFMsIFQsIFQpCi0K
LUNLX1BSX0ZBQV9TKGNoYXIsIGNoYXIpCi1DS19QUl9GQUFfUyh1aW50LCB1bnNpZ25lZCBpbnQp
Ci1DS19QUl9GQUFfUyhpbnQsIGludCkKLUNLX1BSX0ZBQV9TKDY0LCB1aW50NjRfdCkKLUNLX1BS
X0ZBQV9TKDMyLCB1aW50MzJfdCkKLUNLX1BSX0ZBQV9TKDE2LCB1aW50MTZfdCkKLUNLX1BSX0ZB
QV9TKDgsICB1aW50OF90KQotCi0jdW5kZWYgQ0tfUFJfRkFBX1MKLSN1bmRlZiBDS19QUl9GQUEK
LQotLyoKLSAqIEF0b21pYyBzdG9yZS1vbmx5IGJpbmFyeSBvcGVyYXRpb25zLgotICovCi0jZGVm
aW5lIENLX1BSX0JJTkFSWShLLCBTLCBNLCBUKQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2
b2lkCQkJCVwKLQlja19wcl8jI0sjI18jI1MoTSAqdGFyZ2V0LCBUIGQpCQkJCVwKLQl7CQkJCQkJ
CVwKLQkJZCA9IF9fc3luY19mZXRjaF9hbmRfIyNLKChUICopdGFyZ2V0LCBkKTsJXAotCQlyZXR1
cm47CQkJCQkJXAotCX0KLQotI2RlZmluZSBDS19QUl9CSU5BUllfUyhLLCBTLCBUKSBDS19QUl9C
SU5BUlkoSywgUywgVCwgVCkKLQotI2RlZmluZSBDS19QUl9HRU5FUkFURShLKQkJCVwKLQlDS19Q
Ul9CSU5BUlkoSywgcHRyLCB2b2lkLCB2b2lkICopCVwKLQlDS19QUl9CSU5BUllfUyhLLCBjaGFy
LCBjaGFyKQkJXAotCUNLX1BSX0JJTkFSWV9TKEssIGludCwgaW50KQkJXAotCUNLX1BSX0JJTkFS
WV9TKEssIHVpbnQsIHVuc2lnbmVkIGludCkJXAotCUNLX1BSX0JJTkFSWV9TKEssIDY0LCB1aW50
NjRfdCkJCVwKLQlDS19QUl9CSU5BUllfUyhLLCAzMiwgdWludDMyX3QpCQlcCi0JQ0tfUFJfQklO
QVJZX1MoSywgMTYsIHVpbnQxNl90KQkJXAotCUNLX1BSX0JJTkFSWV9TKEssIDgsIHVpbnQ4X3Qp
Ci0KLUNLX1BSX0dFTkVSQVRFKGFkZCkKLUNLX1BSX0dFTkVSQVRFKHN1YikKLUNLX1BSX0dFTkVS
QVRFKGFuZCkKLUNLX1BSX0dFTkVSQVRFKG9yKQotQ0tfUFJfR0VORVJBVEUoeG9yKQotCi0jdW5k
ZWYgQ0tfUFJfR0VORVJBVEUKLSN1bmRlZiBDS19QUl9CSU5BUllfUwotI3VuZGVmIENLX1BSX0JJ
TkFSWQotCi0jZGVmaW5lIENLX1BSX1VOQVJZKFMsIE0sIFQpCQkJXAotCUNLX0NDX0lOTElORSBz
dGF0aWMgdm9pZAkJXAotCWNrX3ByX2luY18jI1MoTSAqdGFyZ2V0KQkJXAotCXsJCQkJCVwKLQkJ
Y2tfcHJfYWRkXyMjUyh0YXJnZXQsIChUKTEpOwlcCi0JCXJldHVybjsJCQkJXAotCX0JCQkJCVwK
LQlDS19DQ19JTkxJTkUgc3RhdGljIHZvaWQJCVwKLQlja19wcl9kZWNfIyNTKE0gKnRhcmdldCkJ
CVwKLQl7CQkJCQlcCi0JCWNrX3ByX3N1Yl8jI1ModGFyZ2V0LCAoVCkxKTsJXAotCQlyZXR1cm47
CQkJCVwKLQl9Ci0KLSNkZWZpbmUgQ0tfUFJfVU5BUllfUyhTLCBNKSBDS19QUl9VTkFSWShTLCBN
LCBNKQotCi1DS19QUl9VTkFSWShwdHIsIHZvaWQsIHZvaWQgKikKLUNLX1BSX1VOQVJZX1MoY2hh
ciwgY2hhcikKLUNLX1BSX1VOQVJZX1MoaW50LCBpbnQpCi1DS19QUl9VTkFSWV9TKHVpbnQsIHVu
c2lnbmVkIGludCkKLUNLX1BSX1VOQVJZX1MoNjQsIHVpbnQ2NF90KQotQ0tfUFJfVU5BUllfUygz
MiwgdWludDMyX3QpCi1DS19QUl9VTkFSWV9TKDE2LCB1aW50MTZfdCkKLUNLX1BSX1VOQVJZX1Mo
OCwgdWludDhfdCkKLQotI3VuZGVmIENLX1BSX1VOQVJZX1MKLSN1bmRlZiBDS19QUl9VTkFSWQot
I2VuZGlmIC8qICFDS19GX1BSICovCi0jZW5kaWYgLyogQ0tfUFJfR0NDX0ggKi8KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvZ2NjL3BwYy9ja19m
X3ByLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy9wcGMv
Y2tfZl9wci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWVjMzNlNDAxYjhjMzU4
ZWI1MTY3N2I4N2NiZjUyYWFjZDE3YTU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUv
Z2NjL3BwYy9ja19mX3ByLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKiBETyBO
T1QgRURJVC4gVGhpcyBpcyBhdXRvLWdlbmVyYXRlZCBmcm9tIGZlYXR1cmUuc2ggKi8KLSNkZWZp
bmUgQ0tfRl9QUl9BRERfMzIKLSNkZWZpbmUgQ0tfRl9QUl9BRERfSU5UCi0jZGVmaW5lIENLX0Zf
UFJfQUREX1BUUgotI2RlZmluZSBDS19GX1BSX0FERF9VSU5UCi0jZGVmaW5lIENLX0ZfUFJfQU5E
XzMyCi0jZGVmaW5lIENLX0ZfUFJfQU5EX0lOVAotI2RlZmluZSBDS19GX1BSX0FORF9QVFIKLSNk
ZWZpbmUgQ0tfRl9QUl9BTkRfVUlOVAotI2RlZmluZSBDS19GX1BSX0NBU18zMgotI2RlZmluZSBD
S19GX1BSX0NBU18zMl9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU19JTlQKLSNkZWZpbmUgQ0tf
Rl9QUl9DQVNfSU5UX1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX1BUUgotI2RlZmluZSBDS19G
X1BSX0NBU19QVFJfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfVUlOVAotI2RlZmluZSBDS19G
X1BSX0NBU19VSU5UX1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfREVDXzMyCi0jZGVmaW5lIENLX0Zf
UFJfREVDX0lOVAotI2RlZmluZSBDS19GX1BSX0RFQ19QVFIKLSNkZWZpbmUgQ0tfRl9QUl9ERUNf
VUlOVAotI2RlZmluZSBDS19GX1BSX0ZBQV8zMgotI2RlZmluZSBDS19GX1BSX0ZBQV9JTlQKLSNk
ZWZpbmUgQ0tfRl9QUl9GQUFfUFRSCi0jZGVmaW5lIENLX0ZfUFJfRkFBX1VJTlQKLSNkZWZpbmUg
Q0tfRl9QUl9GQVNfMzIKLSNkZWZpbmUgQ0tfRl9QUl9GQVNfSU5UCi0jZGVmaW5lIENLX0ZfUFJf
RkFTX1BUUgotI2RlZmluZSBDS19GX1BSX0ZBU19VSU5UCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0Vf
TE9BRAotI2RlZmluZSBDS19GX1BSX0ZFTkNFX0xPQURfREVQRU5EUwotI2RlZmluZSBDS19GX1BS
X0ZFTkNFX01FTU9SWQotI2RlZmluZSBDS19GX1BSX0ZFTkNFX1NUT1JFCi0jZGVmaW5lIENLX0Zf
UFJfRkVOQ0VfU1RSSUNUX0xPQUQKLSNkZWZpbmUgQ0tfRl9QUl9GRU5DRV9TVFJJQ1RfTE9BRF9E
RVBFTkRTCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX01FTU9SWQotI2RlZmluZSBDS19G
X1BSX0ZFTkNFX1NUUklDVF9TVE9SRQotI2RlZmluZSBDS19GX1BSX0lOQ18zMgotI2RlZmluZSBD
S19GX1BSX0lOQ19JTlQKLSNkZWZpbmUgQ0tfRl9QUl9JTkNfUFRSCi0jZGVmaW5lIENLX0ZfUFJf
SU5DX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEXzE2Ci0jZGVmaW5lIENLX0ZfUFJfTE9BRF8z
MgotI2RlZmluZSBDS19GX1BSX0xPQURfOAotI2RlZmluZSBDS19GX1BSX0xPQURfQ0hBUgotI2Rl
ZmluZSBDS19GX1BSX0xPQURfSU5UCi0jZGVmaW5lIENLX0ZfUFJfTE9BRF9QVFIKLSNkZWZpbmUg
Q0tfRl9QUl9MT0FEX1NIT1JUCi0jZGVmaW5lIENLX0ZfUFJfTE9BRF9VSU5UCi0jZGVmaW5lIENL
X0ZfUFJfTkVHXzMyCi0jZGVmaW5lIENLX0ZfUFJfTkVHX0lOVAotI2RlZmluZSBDS19GX1BSX05F
R19QVFIKLSNkZWZpbmUgQ0tfRl9QUl9ORUdfVUlOVAotI2RlZmluZSBDS19GX1BSX05PVF8zMgot
I2RlZmluZSBDS19GX1BSX05PVF9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9OT1RfUFRSCi0jZGVmaW5l
IENLX0ZfUFJfTk9UX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9PUl8zMgotI2RlZmluZSBDS19GX1BS
X09SX0lOVAotI2RlZmluZSBDS19GX1BSX09SX1BUUgotI2RlZmluZSBDS19GX1BSX09SX1VJTlQK
LSNkZWZpbmUgQ0tfRl9QUl9TVEFMTAotI2RlZmluZSBDS19GX1BSX1NUT1JFXzE2Ci0jZGVmaW5l
IENLX0ZfUFJfU1RPUkVfMzIKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV84Ci0jZGVmaW5lIENLX0Zf
UFJfU1RPUkVfQ0hBUgotI2RlZmluZSBDS19GX1BSX1NUT1JFX0lOVAotI2RlZmluZSBDS19GX1BS
X1NUT1JFX1BUUgotI2RlZmluZSBDS19GX1BSX1NUT1JFX1NIT1JUCi0jZGVmaW5lIENLX0ZfUFJf
U1RPUkVfVUlOVAotI2RlZmluZSBDS19GX1BSX1NVQl8zMgotI2RlZmluZSBDS19GX1BSX1NVQl9J
TlQKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfUFRSCi0jZGVmaW5lIENLX0ZfUFJfU1VCX1VJTlQKLSNk
ZWZpbmUgQ0tfRl9QUl9YT1JfMzIKLSNkZWZpbmUgQ0tfRl9QUl9YT1JfSU5UCi0jZGVmaW5lIENL
X0ZfUFJfWE9SX1BUUgotI2RlZmluZSBDS19GX1BSX1hPUl9VSU5UCi0KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvZ2NjL3BwYy9ja19wci5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MvcHBjL2NrX3ByLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNzkzNWRkNzI1YjllZDE0ZTQ4NzI5ZDAz
OTQ0ZGE5ZDgxYWQzZjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MvcHBjL2Nr
X3ByLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAy
MDA5LTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIENvcHlyaWdodCAyMDEyIEpvw6NvIEZlcm5hbmRl
cy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDS19QUl9QUENfSAotI2Rl
ZmluZSBDS19QUl9QUENfSAotCi0jaWZuZGVmIENLX1BSX0gKLSNlcnJvciBEbyBub3QgaW5jbHVk
ZSB0aGlzIGZpbGUgZGlyZWN0bHksIHVzZSBja19wci5oCi0jZW5kaWYKLQotI2luY2x1ZGUgPGNr
X2NjLmg+Ci0jaW5jbHVkZSA8Y2tfbWQuaD4KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgcmVwcmVz
ZW50IHN1cHBvcnRlZCBhdG9taWMgb3BlcmF0aW9ucy4KLSAqIFRoZXNlIG9wZXJhdGlvbnMgbWF5
IGJlIGVtdWxhdGVkLgotICovCi0jaW5jbHVkZSAiY2tfZl9wci5oIgotCi0vKgotICogTWluaW11
bSBpbnRlcmZhY2UgcmVxdWlyZW1lbnQgbWV0LgotICovCi0jZGVmaW5lIENLX0ZfUFIKLQotLyoK
LSAqIFRoaXMgYm91bmNlcyB0aGUgaGFyZHdhcmUgdGhyZWFkIGZyb20gbG93IHRvIG1lZGl1bQot
ICogcHJpb3JpdHkuIEkgYW0gdW5zdXJlIG9mIHRoZSBiZW5lZml0cyBvZiB0aGlzIGFwcHJvYWNo
Ci0gKiBidXQgaXQgaXMgdXNlZCBieSB0aGUgTGludXgga2VybmVsLgotICovCi1DS19DQ19JTkxJ
TkUgc3RhdGljIHZvaWQKLWNrX3ByX3N0YWxsKHZvaWQpCi17Ci0KLQlfX2FzbV9fIF9fdm9sYXRp
bGVfXygib3IgMSwgMSwgMTsiCi0JCQkgICAgICJvciAyLCAyLCAyOyIgOjo6ICJtZW1vcnkiKTsK
LQlyZXR1cm47Ci19Ci0KLSNkZWZpbmUgQ0tfUFJfRkVOQ0UoVCwgSSkJCQkJXAotCUNLX0NDX0lO
TElORSBzdGF0aWMgdm9pZAkJCVwKLQlja19wcl9mZW5jZV9zdHJpY3RfIyNUKHZvaWQpCQkJXAot
CXsJCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKEkgOjo6ICJtZW1vcnkiKTsgICBcCi0J
fQotCi1DS19QUl9GRU5DRShhdG9taWMsICJsd3N5bmMiKQotQ0tfUFJfRkVOQ0UoYXRvbWljX3N0
b3JlLCAibHdzeW5jIikKLUNLX1BSX0ZFTkNFKGF0b21pY19sb2FkLCAic3luYyIpCi1DS19QUl9G
RU5DRShzdG9yZV9hdG9taWMsICJsd3N5bmMiKQotQ0tfUFJfRkVOQ0UobG9hZF9hdG9taWMsICJs
d3N5bmMiKQotQ0tfUFJfRkVOQ0Uoc3RvcmUsICJsd3N5bmMiKQotQ0tfUFJfRkVOQ0Uoc3RvcmVf
bG9hZCwgInN5bmMiKQotQ0tfUFJfRkVOQ0UobG9hZCwgImx3c3luYyIpCi1DS19QUl9GRU5DRShs
b2FkX3N0b3JlLCAibHdzeW5jIikKLUNLX1BSX0ZFTkNFKG1lbW9yeSwgInN5bmMiKQotQ0tfUFJf
RkVOQ0UoYWNxdWlyZSwgImx3c3luYyIpCi1DS19QUl9GRU5DRShyZWxlYXNlLCAibHdzeW5jIikK
LUNLX1BSX0ZFTkNFKGFjcXJlbCwgImx3c3luYyIpCi1DS19QUl9GRU5DRShsb2NrLCAibHdzeW5j
IikKLUNLX1BSX0ZFTkNFKHVubG9jaywgImx3c3luYyIpCi0KLSN1bmRlZiBDS19QUl9GRU5DRQot
Ci0jZGVmaW5lIENLX1BSX0xPQUQoUywgTSwgVCwgQywgSSkJCQkJCVwKLQlDS19DQ19JTkxJTkUg
c3RhdGljIFQJCQkJCQlcCi0JY2tfcHJfbWRfbG9hZF8jI1MoY29uc3QgTSAqdGFyZ2V0KQkJCQlc
Ci0JewkJCQkJCQkJXAotCQlUIHI7CQkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oSSAi
JVUxJVgxICUwLCAlMSIJCQlcCi0JCQkJCTogIj1yIiAocikJCQlcCi0JCQkJCTogIm0iICAoKihj
b25zdCBDICopdGFyZ2V0KQlcCi0JCQkJCTogIm1lbW9yeSIpOwkJCVwKLQkJcmV0dXJuIChyKTsJ
CQkJCQlcCi0JfQotCi1DS19QUl9MT0FEKHB0ciwgdm9pZCwgdm9pZCAqLCB1aW50MzJfdCwgImx3
eiIpCi0KLSNkZWZpbmUgQ0tfUFJfTE9BRF9TKFMsIFQsIEkpIENLX1BSX0xPQUQoUywgVCwgVCwg
VCwgSSkKLQotQ0tfUFJfTE9BRF9TKDMyLCB1aW50MzJfdCwgImx3eiIpCi1DS19QUl9MT0FEX1Mo
MTYsIHVpbnQxNl90LCAibGh6IikKLUNLX1BSX0xPQURfUyg4LCB1aW50OF90LCAibGJ6IikKLUNL
X1BSX0xPQURfUyh1aW50LCB1bnNpZ25lZCBpbnQsICJsd3oiKQotQ0tfUFJfTE9BRF9TKGludCwg
aW50LCAibHd6IikKLUNLX1BSX0xPQURfUyhzaG9ydCwgc2hvcnQsICJsaHoiKQotQ0tfUFJfTE9B
RF9TKGNoYXIsIGNoYXIsICJsYnoiKQotCi0jdW5kZWYgQ0tfUFJfTE9BRF9TCi0jdW5kZWYgQ0tf
UFJfTE9BRAotCi0jZGVmaW5lIENLX1BSX1NUT1JFKFMsIE0sIFQsIEMsIEkpCQkJCVwKLQlDS19D
Q19JTkxJTkUgc3RhdGljIHZvaWQJCQkJXAotCWNrX3ByX21kX3N0b3JlXyMjUyhNICp0YXJnZXQs
IFQgdikJCQlcCi0JewkJCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKEkgIiVVMCVYMCAl
MSwgJTAiCQlcCi0JCQkJCTogIj1tIiAoKihDICopdGFyZ2V0KQlcCi0JCQkJCTogInIiICh2KQkJ
XAotCQkJCQk6ICJtZW1vcnkiKTsJCVwKLQkJcmV0dXJuOwkJCQkJCVwKLQl9Ci0KLUNLX1BSX1NU
T1JFKHB0ciwgdm9pZCwgY29uc3Qgdm9pZCAqLCB1aW50MzJfdCwgInN0dyIpCi0KLSNkZWZpbmUg
Q0tfUFJfU1RPUkVfUyhTLCBULCBJKSBDS19QUl9TVE9SRShTLCBULCBULCBULCBJKQotCi1DS19Q
Ul9TVE9SRV9TKDMyLCB1aW50MzJfdCwgInN0dyIpCi1DS19QUl9TVE9SRV9TKDE2LCB1aW50MTZf
dCwgInN0aCIpCi1DS19QUl9TVE9SRV9TKDgsIHVpbnQ4X3QsICJzdGIiKQotQ0tfUFJfU1RPUkVf
Uyh1aW50LCB1bnNpZ25lZCBpbnQsICJzdHciKQotQ0tfUFJfU1RPUkVfUyhpbnQsIGludCwgInN0
dyIpCi1DS19QUl9TVE9SRV9TKHNob3J0LCBzaG9ydCwgInN0aCIpCi1DS19QUl9TVE9SRV9TKGNo
YXIsIGNoYXIsICJzdGIiKQotCi0jdW5kZWYgQ0tfUFJfU1RPUkVfUwotI3VuZGVmIENLX1BSX1NU
T1JFCi0KLSNkZWZpbmUgQ0tfUFJfQ0FTKE4sIFQsIE0pCQkJCQkJXAotCUNLX0NDX0lOTElORSBz
dGF0aWMgYm9vbAkJCQkJXAotCWNrX3ByX2Nhc18jI04jI192YWx1ZShNICp0YXJnZXQsIFQgY29t
cGFyZSwgVCBzZXQsIE0gKnZhbHVlKQlcCi0JewkJCQkJCQkJXAotCQlUIHByZXZpb3VzOwkJCQkJ
CVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6IgkJCQlcCi0JCQkJICAgICAibHdhcnggJTAs
IDAsICUxOyIJCQlcCi0JCQkJICAgICAiY21wdyAgMCwgJTAsICUzOyIJCQlcCi0JCQkJICAgICAi
Ym5lLSAgMmY7IgkJCVwKLQkJCQkgICAgICJzdHdjeC4gJTIsIDAsICUxOyIJCVwKLQkJCQkgICAg
ICJibmUtICAxYjsiCQkJXAotCQkJCSAgICAgIjI6IgkJCQlcCi0JCQkJCTogIj0mciIgKHByZXZp
b3VzKQkJXAotCQkJCQk6ICJyIiAgICh0YXJnZXQpLAkJXAotCQkJCQkgICJyIiAgIChzZXQpLAkJ
CVwKLQkJCQkJICAiciIgICAoY29tcGFyZSkJCVwKLQkJCQkJOiAibWVtb3J5IiwgImNjIik7CQlc
Ci0JCSooVCAqKXZhbHVlID0gcHJldmlvdXM7IAkJCQlcCi0JCXJldHVybiAocHJldmlvdXMgPT0g
Y29tcGFyZSk7CQkJCVwKLQl9CQkJCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCQkJ
CQlcCi0JY2tfcHJfY2FzXyMjTihNICp0YXJnZXQsIFQgY29tcGFyZSwgVCBzZXQpCQkJXAotCXsJ
CQkJCQkJCVwKLQkJVCBwcmV2aW91czsJCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKCIx
OiIJCQkJXAotCQkJCSAgICAgImx3YXJ4ICUwLCAwLCAlMTsiCQkJXAotCQkJCSAgICAgImNtcHcg
IDAsICUwLCAlMzsiCQkJXAotCQkJCSAgICAgImJuZS0gIDJmOyIJCQlcCi0JCQkJICAgICAic3R3
Y3guICUyLCAwLCAlMTsiCQlcCi0JCQkJICAgICAiYm5lLSAgMWI7IgkJCVwKLQkJCQkgICAgICIy
OiIJCQkJXAotCQkJCQk6ICI9JnIiIChwcmV2aW91cykJCVwKLQkJCQkJOiAiciIgICAodGFyZ2V0
KSwJCVwKLQkJCQkJICAiciIgICAoc2V0KSwJCQlcCi0JCQkJCSAgInIiICAgKGNvbXBhcmUpCQlc
Ci0JCQkJCTogIm1lbW9yeSIsICJjYyIpOwkJXAotCQlyZXR1cm4gKHByZXZpb3VzID09IGNvbXBh
cmUpOwkJCQlcCi0JfQotCi1DS19QUl9DQVMocHRyLCB2b2lkICosIHZvaWQpCi0jZGVmaW5lIENL
X1BSX0NBU19TKGEsIGIpIENLX1BSX0NBUyhhLCBiLCBiKQotQ0tfUFJfQ0FTX1MoMzIsIHVpbnQz
Ml90KQotQ0tfUFJfQ0FTX1ModWludCwgdW5zaWduZWQgaW50KQotQ0tfUFJfQ0FTX1MoaW50LCBp
bnQpCi0KLSN1bmRlZiBDS19QUl9DQVNfUwotI3VuZGVmIENLX1BSX0NBUwotCi0jZGVmaW5lIENL
X1BSX0ZBUyhOLCBNLCBULCBXKQkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgVAkJCQkJXAot
CWNrX3ByX2Zhc18jI04oTSAqdGFyZ2V0LCBUIHYpCQkJCVwKLQl7CQkJCQkJCVwKLQkJVCBwcmV2
aW91czsJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6IgkJCVwKLQkJCQkgICAgICJs
IiBXICJhcnggJTAsIDAsICUxOyIJXAotCQkJCSAgICAgInN0IiBXICJjeC4gJTIsIDAsICUxOyIJ
XAotCQkJCSAgICAgImJuZS0gMWI7IgkJCVwKLQkJCQkJOiAiPSZyIiAocHJldmlvdXMpCVwKLQkJ
CQkJOiAiciIgICAodGFyZ2V0KSwJXAotCQkJCQkgICJyIiAgICh2KQkJXAotCQkJCQk6ICJtZW1v
cnkiLCAiY2MiKTsJXAotCQlyZXR1cm4gKHByZXZpb3VzKTsJCQkJXAotCX0KLQotQ0tfUFJfRkFT
KDMyLCB1aW50MzJfdCwgdWludDMyX3QsICJ3IikKLUNLX1BSX0ZBUyhwdHIsIHZvaWQsIHZvaWQg
KiwgInciKQotQ0tfUFJfRkFTKGludCwgaW50LCBpbnQsICJ3IikKLUNLX1BSX0ZBUyh1aW50LCB1
bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgInciKQotCi0jdW5kZWYgQ0tfUFJfRkFTCi0KLSNk
ZWZpbmUgQ0tfUFJfVU5BUlkoTywgTiwgTSwgVCwgSSwgVykJCQkJXAotCUNLX0NDX0lOTElORSBz
dGF0aWMgdm9pZAkJCQlcCi0JY2tfcHJfIyNPIyNfIyNOKE0gKnRhcmdldCkJCQkJXAotCXsJCQkJ
CQkJXAotCQlUIHByZXZpb3VzOwkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiMToiCQkJ
XAotCQkJCSAgICAgImwiIFcgImFyeCAlMCwgMCwgJTE7IglcCi0JCQkJICAgICAgSSAiOyIJCQlc
Ci0JCQkJICAgICAic3QiIFcgImN4LiAlMCwgMCwgJTE7IglcCi0JCQkJICAgICAiYm5lLSAgMWI7
IgkJXAotCQkJCQk6ICI9JnIiIChwcmV2aW91cykJXAotCQkJCQk6ICJyIiAgICh0YXJnZXQpCVwK
LQkJCQkJOiAibWVtb3J5IiwgImNjIik7CVwKLQkJcmV0dXJuOwkJCQkJCVwKLQl9Ci0KLUNLX1BS
X1VOQVJZKGluYywgcHRyLCB2b2lkLCB2b2lkICosICJhZGRpYyAlMCwgJTAsIDEiLCAidyIpCi1D
S19QUl9VTkFSWShkZWMsIHB0ciwgdm9pZCwgdm9pZCAqLCAiYWRkaWMgJTAsICUwLCAtMSIsICJ3
IikKLUNLX1BSX1VOQVJZKG5vdCwgcHRyLCB2b2lkLCB2b2lkICosICJub3QgJTAsICUwIiwgInci
KQotQ0tfUFJfVU5BUlkobmVnLCBwdHIsIHZvaWQsIHZvaWQgKiwgIm5lZyAlMCwgJTAiLCAidyIp
Ci0KLSNkZWZpbmUgQ0tfUFJfVU5BUllfUyhTLCBULCBXKQkJCQkJXAotCUNLX1BSX1VOQVJZKGlu
YywgUywgVCwgVCwgImFkZGljICUwLCAlMCwgMSIsIFcpCQlcCi0JQ0tfUFJfVU5BUlkoZGVjLCBT
LCBULCBULCAiYWRkaWMgJTAsICUwLCAtMSIsIFcpCVwKLQlDS19QUl9VTkFSWShub3QsIFMsIFQs
IFQsICJub3QgJTAsICUwIiwgVykJCVwKLQlDS19QUl9VTkFSWShuZWcsIFMsIFQsIFQsICJuZWcg
JTAsICUwIiwgVykKLQotQ0tfUFJfVU5BUllfUygzMiwgdWludDMyX3QsICJ3IikKLUNLX1BSX1VO
QVJZX1ModWludCwgdW5zaWduZWQgaW50LCAidyIpCi1DS19QUl9VTkFSWV9TKGludCwgaW50LCAi
dyIpCi0KLSN1bmRlZiBDS19QUl9VTkFSWV9TCi0jdW5kZWYgQ0tfUFJfVU5BUlkKLQotI2RlZmlu
ZSBDS19QUl9CSU5BUlkoTywgTiwgTSwgVCwgSSwgVykJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0
aWMgdm9pZAkJCQlcCi0JY2tfcHJfIyNPIyNfIyNOKE0gKnRhcmdldCwgVCBkZWx0YSkJCQlcCi0J
ewkJCQkJCQlcCi0JCVQgcHJldmlvdXM7CQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKCIx
OiIJCQlcCi0JCQkJICAgICAibCIgVyAiYXJ4ICUwLCAwLCAlMTsiCVwKLQkJCQkgICAgICBJICIg
JTAsICUyLCAlMDsiCQlcCi0JCQkJICAgICAic3QiIFcgImN4LiAlMCwgMCwgJTE7IglcCi0JCQkJ
ICAgICAiYm5lLSAgMWI7IgkJXAotCQkJCQk6ICI9JnIiIChwcmV2aW91cykJXAotCQkJCQk6ICJy
IiAgICh0YXJnZXQpLAlcCi0JCQkJCSAgInIiICAgKGRlbHRhKQkJXAotCQkJCQk6ICJtZW1vcnki
LCAiY2MiKTsJXAotCQlyZXR1cm47CQkJCQkJXAotCX0KLQotQ0tfUFJfQklOQVJZKGFuZCwgcHRy
LCB2b2lkLCB1aW50cHRyX3QsICJhbmQiLCAidyIpCi1DS19QUl9CSU5BUlkoYWRkLCBwdHIsIHZv
aWQsIHVpbnRwdHJfdCwgImFkZCIsICJ3IikKLUNLX1BSX0JJTkFSWShvciwgcHRyLCB2b2lkLCB1
aW50cHRyX3QsICJvciIsICJ3IikKLUNLX1BSX0JJTkFSWShzdWIsIHB0ciwgdm9pZCwgdWludHB0
cl90LCAic3ViIiwgInciKQotQ0tfUFJfQklOQVJZKHhvciwgcHRyLCB2b2lkLCB1aW50cHRyX3Qs
ICJ4b3IiLCAidyIpCi0KLSNkZWZpbmUgQ0tfUFJfQklOQVJZX1MoUywgVCwgVykJCQlcCi0JQ0tf
UFJfQklOQVJZKGFuZCwgUywgVCwgVCwgImFuZCIsIFcpCVwKLQlDS19QUl9CSU5BUlkoYWRkLCBT
LCBULCBULCAiYWRkIiwgVykJXAotCUNLX1BSX0JJTkFSWShvciwgUywgVCwgVCwgIm9yIiwgVykJ
XAotCUNLX1BSX0JJTkFSWShzdWIsIFMsIFQsIFQsICJzdWJmIiwgVykJXAotCUNLX1BSX0JJTkFS
WSh4b3IsIFMsIFQsIFQsICJ4b3IiLCBXKQotCi1DS19QUl9CSU5BUllfUygzMiwgdWludDMyX3Qs
ICJ3IikKLUNLX1BSX0JJTkFSWV9TKHVpbnQsIHVuc2lnbmVkIGludCwgInciKQotQ0tfUFJfQklO
QVJZX1MoaW50LCBpbnQsICJ3IikKLQotI3VuZGVmIENLX1BSX0JJTkFSWV9TCi0jdW5kZWYgQ0tf
UFJfQklOQVJZCi0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZCAqCi1ja19wcl9mYWFfcHRyKHZv
aWQgKnRhcmdldCwgdWludHB0cl90IGRlbHRhKQotewotCXVpbnRwdHJfdCBwcmV2aW91cywgcjsK
LQotCV9fYXNtX18gX192b2xhdGlsZV9fKCIxOiIKLQkJCSAgICAgImx3YXJ4ICUwLCAwLCAlMjsi
Ci0JCQkgICAgICJhZGQgJTEsICUzLCAlMDsiCi0JCQkgICAgICJzdHdjeC4gJTEsIDAsICUyOyIK
LQkJCSAgICAgImJuZS0gIDFiOyIKLQkJCQk6ICI9JnIiIChwcmV2aW91cyksCi0JCQkJICAiPSZy
IiAocikKLQkJCQk6ICJyIiAgICh0YXJnZXQpLAotCQkJCSAgInIiICAgKGRlbHRhKQotCQkJCTog
Im1lbW9yeSIsICJjYyIpOwotCi0JcmV0dXJuICh2b2lkICopKHByZXZpb3VzKTsKLX0KLQotI2Rl
ZmluZSBDS19QUl9GQUEoUywgVCwgVykJCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyBUCQkJ
CQkJXAotCWNrX3ByX2ZhYV8jI1MoVCAqdGFyZ2V0LCBUIGRlbHRhKQkJCQlcCi0JewkJCQkJCQkJ
XAotCQlUIHByZXZpb3VzLCByOwkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6IgkJ
CQlcCi0JCQkJICAgICAibCIgVyAiYXJ4ICUwLCAwLCAlMjsiCQlcCi0JCQkJICAgICAiYWRkICUx
LCAlMywgJTA7IgkJCVwKLQkJCQkgICAgICJzdCIgVyAiY3guICUxLCAwLCAlMjsiCQlcCi0JCQkJ
ICAgICAiYm5lLSAgMWI7IgkJCVwKLQkJCQkJOiAiPSZyIiAocHJldmlvdXMpLAkJXAotCQkJCQkg
ICI9JnIiIChyKQkJCVwKLQkJCQkJOiAiciIgICAodGFyZ2V0KSwJCVwKLQkJCQkJICAiciIgICAo
ZGVsdGEpCQkJXAotCQkJCQk6ICJtZW1vcnkiLCAiY2MiKTsJCVwKLQkJcmV0dXJuIChwcmV2aW91
cyk7CQkJCQlcCi0JfQotCi1DS19QUl9GQUEoMzIsIHVpbnQzMl90LCAidyIpCi1DS19QUl9GQUEo
dWludCwgdW5zaWduZWQgaW50LCAidyIpCi1DS19QUl9GQUEoaW50LCBpbnQsICJ3IikKLQotI3Vu
ZGVmIENLX1BSX0ZBQQotCi0jZW5kaWYgLyogQ0tfUFJfUFBDX0ggKi8KLQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MvcHBjNjQvY2tfZl9w
ci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MvcHBjNjQv
Y2tfZl9wci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDU0YTI4OWUxMWU2ZmY4
M2YyMGQ2ZGI2NTg4ZWQxY2Q5Zjc1MjJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUv
Z2NjL3BwYzY0L2NrX2ZfcHIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qIERP
IE5PVCBFRElULiBUaGlzIGlzIGF1dG8tZ2VuZXJhdGVkIGZyb20gZmVhdHVyZS5zaCAqLwotI2Rl
ZmluZSBDS19GX1BSX0FERF8zMgotI2RlZmluZSBDS19GX1BSX0FERF82NAotI2RlZmluZSBDS19G
X1BSX0FERF9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9BRERfUFRSCi0jZGVmaW5lIENLX0ZfUFJfQURE
X1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9BTkRfMzIKLSNkZWZpbmUgQ0tfRl9QUl9BTkRfNjQKLSNk
ZWZpbmUgQ0tfRl9QUl9BTkRfSU5UCi0jZGVmaW5lIENLX0ZfUFJfQU5EX1BUUgotI2RlZmluZSBD
S19GX1BSX0FORF9VSU5UCi0jZGVmaW5lIENLX0ZfUFJfQ0FTXzMyCi0jZGVmaW5lIENLX0ZfUFJf
Q0FTXzMyX1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTXzY0Ci0jZGVmaW5lIENLX0ZfUFJfQ0FT
XzY0X1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX0lOVAotI2RlZmluZSBDS19GX1BSX0NBU19J
TlRfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfUFRSCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX1BU
Ul9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU19VSU5UCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX1VJ
TlRfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfMzIKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfNjQK
LSNkZWZpbmUgQ0tfRl9QUl9ERUNfSU5UCi0jZGVmaW5lIENLX0ZfUFJfREVDX1BUUgotI2RlZmlu
ZSBDS19GX1BSX0RFQ19VSU5UCi0jZGVmaW5lIENLX0ZfUFJfRkFBXzMyCi0jZGVmaW5lIENLX0Zf
UFJfRkFBXzY0Ci0jZGVmaW5lIENLX0ZfUFJfRkFBX0lOVAotI2RlZmluZSBDS19GX1BSX0ZBQV9Q
VFIKLSNkZWZpbmUgQ0tfRl9QUl9GQUFfVUlOVAotI2RlZmluZSBDS19GX1BSX0ZBU18zMgotI2Rl
ZmluZSBDS19GX1BSX0ZBU182NAotI2RlZmluZSBDS19GX1BSX0ZBU19JTlQKLSNkZWZpbmUgQ0tf
Rl9QUl9GQVNfUFRSCi0jZGVmaW5lIENLX0ZfUFJfRkFTX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9G
QVNfRE9VQkxFCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfTE9BRAotI2RlZmluZSBDS19GX1BSX0ZF
TkNFX0xPQURfREVQRU5EUwotI2RlZmluZSBDS19GX1BSX0ZFTkNFX01FTU9SWQotI2RlZmluZSBD
S19GX1BSX0ZFTkNFX1NUT1JFCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX0xPQUQKLSNk
ZWZpbmUgQ0tfRl9QUl9GRU5DRV9TVFJJQ1RfTE9BRF9ERVBFTkRTCi0jZGVmaW5lIENLX0ZfUFJf
RkVOQ0VfU1RSSUNUX01FTU9SWQotI2RlZmluZSBDS19GX1BSX0ZFTkNFX1NUUklDVF9TVE9SRQot
I2RlZmluZSBDS19GX1BSX0lOQ18zMgotI2RlZmluZSBDS19GX1BSX0lOQ182NAotI2RlZmluZSBD
S19GX1BSX0lOQ19JTlQKLSNkZWZpbmUgQ0tfRl9QUl9JTkNfUFRSCi0jZGVmaW5lIENLX0ZfUFJf
SU5DX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEXzE2Ci0jZGVmaW5lIENLX0ZfUFJfTE9BRF8z
MgotI2RlZmluZSBDS19GX1BSX0xPQURfNjQKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEXzgKLSNkZWZp
bmUgQ0tfRl9QUl9MT0FEX0NIQVIKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEX0RPVUJMRQotI2RlZmlu
ZSBDS19GX1BSX0xPQURfSU5UCi0jZGVmaW5lIENLX0ZfUFJfTE9BRF9QVFIKLSNkZWZpbmUgQ0tf
Rl9QUl9MT0FEX1NIT1JUCi0jZGVmaW5lIENLX0ZfUFJfTE9BRF9VSU5UCi0jZGVmaW5lIENLX0Zf
UFJfTkVHXzMyCi0jZGVmaW5lIENLX0ZfUFJfTkVHXzY0Ci0jZGVmaW5lIENLX0ZfUFJfTkVHX0lO
VAotI2RlZmluZSBDS19GX1BSX05FR19QVFIKLSNkZWZpbmUgQ0tfRl9QUl9ORUdfVUlOVAotI2Rl
ZmluZSBDS19GX1BSX05PVF8zMgotI2RlZmluZSBDS19GX1BSX05PVF82NAotI2RlZmluZSBDS19G
X1BSX05PVF9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9OT1RfUFRSCi0jZGVmaW5lIENLX0ZfUFJfTk9U
X1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9PUl8zMgotI2RlZmluZSBDS19GX1BSX09SXzY0Ci0jZGVm
aW5lIENLX0ZfUFJfT1JfSU5UCi0jZGVmaW5lIENLX0ZfUFJfT1JfUFRSCi0jZGVmaW5lIENLX0Zf
UFJfT1JfVUlOVAotI2RlZmluZSBDS19GX1BSX1NUQUxMCi0jZGVmaW5lIENLX0ZfUFJfU1RPUkVf
MTYKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV8zMgotI2RlZmluZSBDS19GX1BSX1NUT1JFXzY0Ci0j
ZGVmaW5lIENLX0ZfUFJfU1RPUkVfOAotI2RlZmluZSBDS19GX1BSX1NUT1JFX0NIQVIKLSNkZWZp
bmUgQ0tfRl9QUl9TVE9SRV9ET1VCTEUKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV9JTlQKLSNkZWZp
bmUgQ0tfRl9QUl9TVE9SRV9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV9TSE9SVAotI2RlZmlu
ZSBDS19GX1BSX1NUT1JFX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfMzIKLSNkZWZpbmUgQ0tf
Rl9QUl9TVUJfNjQKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfSU5UCi0jZGVmaW5lIENLX0ZfUFJfU1VC
X1BUUgotI2RlZmluZSBDS19GX1BSX1NVQl9VSU5UCi0jZGVmaW5lIENLX0ZfUFJfWE9SXzMyCi0j
ZGVmaW5lIENLX0ZfUFJfWE9SXzY0Ci0jZGVmaW5lIENLX0ZfUFJfWE9SX0lOVAotI2RlZmluZSBD
S19GX1BSX1hPUl9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9YT1JfVUlOVAotCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy9wcGM2NC9ja19wci5o
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MvcHBjNjQvY2tf
cHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y1ZTVkYjA4ODkxZmRiOTQ1ODU0
ZmJhNWM1YzE5YTU2ZDI5Njc0NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy9w
cGM2NC9ja19wci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDI3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgMjAwOS0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBB
TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICog
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAq
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgQ0tfUFJfUFBDNjRfSAotI2RlZmluZSBDS19QUl9QUEM2NF9ICi0KLSNpZm5k
ZWYgQ0tfUFJfSAotI2Vycm9yIERvIG5vdCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSwgdXNl
IGNrX3ByLmgKLSNlbmRpZgotCi0jaW5jbHVkZSA8Y2tfY2MuaD4KLSNpbmNsdWRlIDxja19tZC5o
PgotCi0vKgotICogVGhlIGZvbGxvd2luZyByZXByZXNlbnQgc3VwcG9ydGVkIGF0b21pYyBvcGVy
YXRpb25zLgotICogVGhlc2Ugb3BlcmF0aW9ucyBtYXkgYmUgZW11bGF0ZWQuCi0gKi8KLSNpbmNs
dWRlICJja19mX3ByLmgiCi0KLS8qCi0gKiBNaW5pbXVtIGludGVyZmFjZSByZXF1aXJlbWVudCBt
ZXQuCi0gKi8KLSNkZWZpbmUgQ0tfRl9QUgotCi0vKgotICogVGhpcyBib3VuY2VzIHRoZSBoYXJk
d2FyZSB0aHJlYWQgZnJvbSBsb3cgdG8gbWVkaXVtCi0gKiBwcmlvcml0eS4gSSBhbSB1bnN1cmUg
b2YgdGhlIGJlbmVmaXRzIG9mIHRoaXMgYXBwcm9hY2gKLSAqIGJ1dCBpdCBpcyB1c2VkIGJ5IHRo
ZSBMaW51eCBrZXJuZWwuCi0gKi8KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfcHJfc3Rh
bGwodm9pZCkKLXsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJvciAxLCAxLCAxOyIKLQkJCSAg
ICAgIm9yIDIsIDIsIDI7IiA6OjogIm1lbW9yeSIpOwotCXJldHVybjsKLX0KLQotI2RlZmluZSBD
S19QUl9GRU5DRShULCBJKQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJXAotCWNr
X3ByX2ZlbmNlX3N0cmljdF8jI1Qodm9pZCkJCQlcCi0JewkJCQkJCVwKLQkJX19hc21fXyBfX3Zv
bGF0aWxlX18oSSA6OjogIm1lbW9yeSIpOyAgIFwKLQl9Ci0KLS8qCi0gKiBUaGVzZSBhcmUgZGVy
aXZlZCBmcm9tOgotICogICAgIGh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9zeXN0
ZW1zL2FydGljbGVzL3Bvd2VycGMuaHRtbAotICovCi1DS19QUl9GRU5DRShhdG9taWMsICJsd3N5
bmMiKQotQ0tfUFJfRkVOQ0UoYXRvbWljX3N0b3JlLCAibHdzeW5jIikKLUNLX1BSX0ZFTkNFKGF0
b21pY19sb2FkLCAic3luYyIpCi1DS19QUl9GRU5DRShzdG9yZV9hdG9taWMsICJsd3N5bmMiKQot
Q0tfUFJfRkVOQ0UobG9hZF9hdG9taWMsICJsd3N5bmMiKQotQ0tfUFJfRkVOQ0Uoc3RvcmUsICJs
d3N5bmMiKQotQ0tfUFJfRkVOQ0Uoc3RvcmVfbG9hZCwgInN5bmMiKQotQ0tfUFJfRkVOQ0UobG9h
ZCwgImx3c3luYyIpCi1DS19QUl9GRU5DRShsb2FkX3N0b3JlLCAibHdzeW5jIikKLUNLX1BSX0ZF
TkNFKG1lbW9yeSwgInN5bmMiKQotQ0tfUFJfRkVOQ0UoYWNxdWlyZSwgImx3c3luYyIpCi1DS19Q
Ul9GRU5DRShyZWxlYXNlLCAibHdzeW5jIikKLUNLX1BSX0ZFTkNFKGFjcXJlbCwgImx3c3luYyIp
Ci1DS19QUl9GRU5DRShsb2NrLCAibHdzeW5jIikKLUNLX1BSX0ZFTkNFKHVubG9jaywgImx3c3lu
YyIpCi0KLSN1bmRlZiBDS19QUl9GRU5DRQotCi0jZGVmaW5lIENLX1BSX0xPQUQoUywgTSwgVCwg
QywgSSkJCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIFQJCQkJCQlcCi0JY2tfcHJfbWRfbG9h
ZF8jI1MoY29uc3QgTSAqdGFyZ2V0KQkJCQlcCi0JewkJCQkJCQkJXAotCQlUIHI7CQkJCQkJCVwK
LQkJX19hc21fXyBfX3ZvbGF0aWxlX18oSSAiJVUxJVgxICUwLCAlMSIJCQlcCi0JCQkJCTogIj1y
IiAocikJCQlcCi0JCQkJCTogIm0iICAoKihjb25zdCBDICopdGFyZ2V0KQlcCi0JCQkJCTogIm1l
bW9yeSIpOwkJCVwKLQkJcmV0dXJuIChyKTsJCQkJCQlcCi0JfQotCi1DS19QUl9MT0FEKHB0ciwg
dm9pZCwgdm9pZCAqLCB1aW50NjRfdCwgImxkIikKLQotI2RlZmluZSBDS19QUl9MT0FEX1MoUywg
VCwgSSkgQ0tfUFJfTE9BRChTLCBULCBULCBULCBJKQotCi1DS19QUl9MT0FEX1MoNjQsIHVpbnQ2
NF90LCAibGQiKQotQ0tfUFJfTE9BRF9TKDMyLCB1aW50MzJfdCwgImx3eiIpCi1DS19QUl9MT0FE
X1MoMTYsIHVpbnQxNl90LCAibGh6IikKLUNLX1BSX0xPQURfUyg4LCB1aW50OF90LCAibGJ6IikK
LUNLX1BSX0xPQURfUyh1aW50LCB1bnNpZ25lZCBpbnQsICJsd3oiKQotQ0tfUFJfTE9BRF9TKGlu
dCwgaW50LCAibHd6IikKLUNLX1BSX0xPQURfUyhzaG9ydCwgc2hvcnQsICJsaHoiKQotQ0tfUFJf
TE9BRF9TKGNoYXIsIGNoYXIsICJsYnoiKQotI2lmbmRlZiBDS19QUl9ESVNBQkxFX0RPVUJMRQot
Q0tfUFJfTE9BRF9TKGRvdWJsZSwgZG91YmxlLCAibGQiKQotI2VuZGlmCi0KLSN1bmRlZiBDS19Q
Ul9MT0FEX1MKLSN1bmRlZiBDS19QUl9MT0FECi0KLSNkZWZpbmUgQ0tfUFJfU1RPUkUoUywgTSwg
VCwgQywgSSkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCQlcCi0JY2tfcHJfbWRf
c3RvcmVfIyNTKE0gKnRhcmdldCwgVCB2KQkJCVwKLQl7CQkJCQkJCVwKLQkJX19hc21fXyBfX3Zv
bGF0aWxlX18oSSAiJVUwJVgwICUxLCAlMCIJCVwKLQkJCQkJOiAiPW0iICgqKEMgKil0YXJnZXQp
CVwKLQkJCQkJOiAiciIgKHYpCQlcCi0JCQkJCTogIm1lbW9yeSIpOwkJXAotCQlyZXR1cm47CQkJ
CQkJXAotCX0KLQotQ0tfUFJfU1RPUkUocHRyLCB2b2lkLCBjb25zdCB2b2lkICosIHVpbnQ2NF90
LCAic3RkIikKLQotI2RlZmluZSBDS19QUl9TVE9SRV9TKFMsIFQsIEkpIENLX1BSX1NUT1JFKFMs
IFQsIFQsIFQsIEkpCi0KLUNLX1BSX1NUT1JFX1MoNjQsIHVpbnQ2NF90LCAic3RkIikKLUNLX1BS
X1NUT1JFX1MoMzIsIHVpbnQzMl90LCAic3R3IikKLUNLX1BSX1NUT1JFX1MoMTYsIHVpbnQxNl90
LCAic3RoIikKLUNLX1BSX1NUT1JFX1MoOCwgdWludDhfdCwgInN0YiIpCi1DS19QUl9TVE9SRV9T
KHVpbnQsIHVuc2lnbmVkIGludCwgInN0dyIpCi1DS19QUl9TVE9SRV9TKGludCwgaW50LCAic3R3
IikKLUNLX1BSX1NUT1JFX1Moc2hvcnQsIHNob3J0LCAic3RoIikKLUNLX1BSX1NUT1JFX1MoY2hh
ciwgY2hhciwgInN0YiIpCi0jaWZuZGVmIENLX1BSX0RJU0FCTEVfRE9VQkxFCi1DS19QUl9TVE9S
RV9TKGRvdWJsZSwgZG91YmxlLCAic3RkIikKLSNlbmRpZgotCi0jdW5kZWYgQ0tfUFJfU1RPUkVf
UwotI3VuZGVmIENLX1BSX1NUT1JFCi0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfcHJf
Y2FzXzY0X3ZhbHVlKHVpbnQ2NF90ICp0YXJnZXQsIHVpbnQ2NF90IGNvbXBhcmUsIHVpbnQ2NF90
IHNldCwgdWludDY0X3QgKnZhbHVlKQotewotCXVpbnQ2NF90IHByZXZpb3VzOwotCi0gICAgICAg
IF9fYXNtX18gX192b2xhdGlsZV9fKCIxOiIKLQkJCSAgICAgImxkYXJ4ICUwLCAwLCAlMTsiCi0J
CQkgICAgICJjbXBkICAwLCAlMCwgJTM7IgotCQkJICAgICAiYm5lLSAgMmY7IgotCQkJICAgICAi
c3RkY3guICUyLCAwLCAlMTsiCi0JCQkgICAgICJibmUtICAxYjsiCi0JCQkgICAgICIyOiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPSZyIiAocHJldmlvdXMpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogInIiICAgKHRhcmdldCksCi0JCQkJICAiciIgICAo
c2V0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciIgICAoY29tcGFyZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5IiwgImNjIik7Ci0KLSAg
ICAgICAgKnZhbHVlID0gcHJldmlvdXM7Ci0gICAgICAgIHJldHVybiAocHJldmlvdXMgPT0gY29t
cGFyZSk7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfcHJfY2FzX3B0cl92YWx1
ZSh2b2lkICp0YXJnZXQsIHZvaWQgKmNvbXBhcmUsIHZvaWQgKnNldCwgdm9pZCAqdmFsdWUpCi17
Ci0Jdm9pZCAqcHJldmlvdXM7Ci0KLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6Igot
CQkJICAgICAibGRhcnggJTAsIDAsICUxOyIKLQkJCSAgICAgImNtcGQgIDAsICUwLCAlMzsiCi0J
CQkgICAgICJibmUtICAyZjsiCi0JCQkgICAgICJzdGRjeC4gJTIsIDAsICUxOyIKLQkJCSAgICAg
ImJuZS0gIDFiOyIKLQkJCSAgICAgIjI6IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6ICI9JnIiIChwcmV2aW91cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAi
ciIgICAodGFyZ2V0KSwKLQkJCQkgICJyIiAgIChzZXQpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJyIiAgIChjb21wYXJlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKLQotICAgICAgICBja19wcl9tZF9zdG9yZV9wdHIodmFs
dWUsIHByZXZpb3VzKTsKLSAgICAgICAgcmV0dXJuIChwcmV2aW91cyA9PSBjb21wYXJlKTsKLX0K
LQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19wcl9jYXNfNjQodWludDY0X3QgKnRhcmdl
dCwgdWludDY0X3QgY29tcGFyZSwgdWludDY0X3Qgc2V0KQotewotCXVpbnQ2NF90IHByZXZpb3Vz
OwotCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIxOiIKLQkJCSAgICAgImxkYXJ4ICUw
LCAwLCAlMTsiCi0JCQkgICAgICJjbXBkICAwLCAlMCwgJTM7IgotCQkJICAgICAiYm5lLSAgMmY7
IgotCQkJICAgICAic3RkY3guICUyLCAwLCAlMTsiCi0JCQkgICAgICJibmUtICAxYjsiCi0JCQkg
ICAgICIyOiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPSZyIiAocHJldmlv
dXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInIiICAgKHRhcmdldCksCi0J
CQkJICAiciIgICAoc2V0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciIg
ICAoY29tcGFyZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iiwg
ImNjIik7Ci0KLSAgICAgICAgcmV0dXJuIChwcmV2aW91cyA9PSBjb21wYXJlKTsKLX0KLQotQ0tf
Q0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19wcl9jYXNfcHRyKHZvaWQgKnRhcmdldCwgdm9pZCAq
Y29tcGFyZSwgdm9pZCAqc2V0KQotewotCXZvaWQgKnByZXZpb3VzOwotCi0gICAgICAgIF9fYXNt
X18gX192b2xhdGlsZV9fKCIxOiIKLQkJCSAgICAgImxkYXJ4ICUwLCAwLCAlMTsiCi0JCQkgICAg
ICJjbXBkICAwLCAlMCwgJTM7IgotCQkJICAgICAiYm5lLSAgMmY7IgotCQkJICAgICAic3RkY3gu
ICUyLCAwLCAlMTsiCi0JCQkgICAgICJibmUtICAxYjsiCi0JCQkgICAgICIyOiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiAiPSZyIiAocHJldmlvdXMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogInIiICAgKHRhcmdldCksCi0JCQkJICAiciIgICAoc2V0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciIgICAoY29tcGFyZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5IiwgImNjIik7Ci0KLSAgICAgICAg
cmV0dXJuIChwcmV2aW91cyA9PSBjb21wYXJlKTsKLX0KLQotI2RlZmluZSBDS19QUl9DQVMoTiwg
VCkJCQkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAkJCQkJXAotCWNrX3ByX2Nhc18j
I04jI192YWx1ZShUICp0YXJnZXQsIFQgY29tcGFyZSwgVCBzZXQsIFQgKnZhbHVlKQlcCi0JewkJ
CQkJCQkJXAotCQlUIHByZXZpb3VzOwkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6
IgkJCQlcCi0JCQkJICAgICAibHdhcnggJTAsIDAsICUxOyIJCQlcCi0JCQkJICAgICAiY21wdyAg
MCwgJTAsICUzOyIJCQlcCi0JCQkJICAgICAiYm5lLSAgMmY7IgkJCVwKLQkJCQkgICAgICJzdHdj
eC4gJTIsIDAsICUxOyIJCVwKLQkJCQkgICAgICJibmUtICAxYjsiCQkJXAotCQkJCSAgICAgIjI6
IgkJCQlcCi0JCQkJCTogIj0mciIgKHByZXZpb3VzKQkJXAotCQkJCQk6ICJyIiAgICh0YXJnZXQp
LAkJXAotCQkJCQkgICJyIiAgIChzZXQpLAkJCVwKLQkJCQkJICAiciIgICAoY29tcGFyZSkJCVwK
LQkJCQkJOiAibWVtb3J5IiwgImNjIik7CQlcCi0JCSp2YWx1ZSA9IHByZXZpb3VzOyAJCQkJCVwK
LQkJcmV0dXJuIChwcmV2aW91cyA9PSBjb21wYXJlKTsJCQkJXAotCX0JCQkJCQkJCVwKLQlDS19D
Q19JTkxJTkUgc3RhdGljIGJvb2wJCQkJCVwKLQlja19wcl9jYXNfIyNOKFQgKnRhcmdldCwgVCBj
b21wYXJlLCBUIHNldCkJCQlcCi0JewkJCQkJCQkJXAotCQlUIHByZXZpb3VzOwkJCQkJCVwKLQkJ
X19hc21fXyBfX3ZvbGF0aWxlX18oIjE6IgkJCQlcCi0JCQkJICAgICAibHdhcnggJTAsIDAsICUx
OyIJCQlcCi0JCQkJICAgICAiY21wdyAgMCwgJTAsICUzOyIJCQlcCi0JCQkJICAgICAiYm5lLSAg
MmY7IgkJCVwKLQkJCQkgICAgICJzdHdjeC4gJTIsIDAsICUxOyIJCVwKLQkJCQkgICAgICJibmUt
ICAxYjsiCQkJXAotCQkJCSAgICAgIjI6IgkJCQlcCi0JCQkJCTogIj0mciIgKHByZXZpb3VzKQkJ
XAotCQkJCQk6ICJyIiAgICh0YXJnZXQpLAkJXAotCQkJCQkgICJyIiAgIChzZXQpLAkJCVwKLQkJ
CQkJICAiciIgICAoY29tcGFyZSkJCVwKLQkJCQkJOiAibWVtb3J5IiwgImNjIik7CQlcCi0JCXJl
dHVybiAocHJldmlvdXMgPT0gY29tcGFyZSk7CQkJCVwKLQl9Ci0KLUNLX1BSX0NBUygzMiwgdWlu
dDMyX3QpCi1DS19QUl9DQVModWludCwgdW5zaWduZWQgaW50KQotQ0tfUFJfQ0FTKGludCwgaW50
KQotCi0jdW5kZWYgQ0tfUFJfQ0FTCi0KLSNkZWZpbmUgQ0tfUFJfRkFTKE4sIE0sIFQsIFcpCQkJ
CQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyBUCQkJCQlcCi0JY2tfcHJfZmFzXyMjTihNICp0YXJn
ZXQsIFQgdikJCQkJXAotCXsJCQkJCQkJXAotCQlUIHByZXZpb3VzOwkJCQkJXAotCQlfX2FzbV9f
IF9fdm9sYXRpbGVfXygiMToiCQkJXAotCQkJCSAgICAgImwiIFcgImFyeCAlMCwgMCwgJTE7Iglc
Ci0JCQkJICAgICAic3QiIFcgImN4LiAlMiwgMCwgJTE7IglcCi0JCQkJICAgICAiYm5lLSAxYjsi
CQkJXAotCQkJCQk6ICI9JnIiIChwcmV2aW91cykJXAotCQkJCQk6ICJyIiAgICh0YXJnZXQpLAlc
Ci0JCQkJCSAgInIiICAgKHYpCQlcCi0JCQkJCTogIm1lbW9yeSIsICJjYyIpOwlcCi0JCXJldHVy
biAocHJldmlvdXMpOwkJCQlcCi0JfQotCi1DS19QUl9GQVMoNjQsIHVpbnQ2NF90LCB1aW50NjRf
dCwgImQiKQotQ0tfUFJfRkFTKDMyLCB1aW50MzJfdCwgdWludDMyX3QsICJ3IikKLSNpZm5kZWYg
Q0tfUFJfRElTQUJMRV9ET1VCTEUKLUNLX1BSX0ZBUyhkb3VibGUsIGRvdWJsZSwgZG91YmxlLCAi
ZCIpCi0jZW5kaWYKLUNLX1BSX0ZBUyhwdHIsIHZvaWQsIHZvaWQgKiwgImQiKQotQ0tfUFJfRkFT
KGludCwgaW50LCBpbnQsICJ3IikKLUNLX1BSX0ZBUyh1aW50LCB1bnNpZ25lZCBpbnQsIHVuc2ln
bmVkIGludCwgInciKQotCi0jdW5kZWYgQ0tfUFJfRkFTCi0KLSNkZWZpbmUgQ0tfUFJfVU5BUlko
TywgTiwgTSwgVCwgSSwgVykJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCQlcCi0J
Y2tfcHJfIyNPIyNfIyNOKE0gKnRhcmdldCkJCQkJXAotCXsJCQkJCQkJXAotCQlUIHByZXZpb3Vz
OwkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiMToiCQkJXAotCQkJCSAgICAgImwiIFcg
ImFyeCAlMCwgMCwgJTE7IglcCi0JCQkJICAgICAgSSAiOyIJCQlcCi0JCQkJICAgICAic3QiIFcg
ImN4LiAlMCwgMCwgJTE7IglcCi0JCQkJICAgICAiYm5lLSAgMWI7IgkJXAotCQkJCQk6ICI9JnIi
IChwcmV2aW91cykJXAotCQkJCQk6ICJyIiAgICh0YXJnZXQpCVwKLQkJCQkJOiAibWVtb3J5Iiwg
ImNjIik7CVwKLQkJcmV0dXJuOwkJCQkJCVwKLQl9Ci0KLUNLX1BSX1VOQVJZKGluYywgcHRyLCB2
b2lkLCB2b2lkICosICJhZGRpYyAlMCwgJTAsIDEiLCAiZCIpCi1DS19QUl9VTkFSWShkZWMsIHB0
ciwgdm9pZCwgdm9pZCAqLCAiYWRkaWMgJTAsICUwLCAtMSIsICJkIikKLUNLX1BSX1VOQVJZKG5v
dCwgcHRyLCB2b2lkLCB2b2lkICosICJub3QgJTAsICUwIiwgImQiKQotQ0tfUFJfVU5BUlkobmVn
LCBwdHIsIHZvaWQsIHZvaWQgKiwgIm5lZyAlMCwgJTAiLCAiZCIpCi0KLSNkZWZpbmUgQ0tfUFJf
VU5BUllfUyhTLCBULCBXKQkJCQkJXAotCUNLX1BSX1VOQVJZKGluYywgUywgVCwgVCwgImFkZGlj
ICUwLCAlMCwgMSIsIFcpCQlcCi0JQ0tfUFJfVU5BUlkoZGVjLCBTLCBULCBULCAiYWRkaWMgJTAs
ICUwLCAtMSIsIFcpCVwKLQlDS19QUl9VTkFSWShub3QsIFMsIFQsIFQsICJub3QgJTAsICUwIiwg
VykJCVwKLQlDS19QUl9VTkFSWShuZWcsIFMsIFQsIFQsICJuZWcgJTAsICUwIiwgVykKLQotQ0tf
UFJfVU5BUllfUyg2NCwgdWludDY0X3QsICJkIikKLUNLX1BSX1VOQVJZX1MoMzIsIHVpbnQzMl90
LCAidyIpCi1DS19QUl9VTkFSWV9TKHVpbnQsIHVuc2lnbmVkIGludCwgInciKQotQ0tfUFJfVU5B
UllfUyhpbnQsIGludCwgInciKQotCi0jdW5kZWYgQ0tfUFJfVU5BUllfUwotI3VuZGVmIENLX1BS
X1VOQVJZCi0KLSNkZWZpbmUgQ0tfUFJfQklOQVJZKE8sIE4sIE0sIFQsIEksIFcpCQkJCVwKLQlD
S19DQ19JTkxJTkUgc3RhdGljIHZvaWQJCQkJXAotCWNrX3ByXyMjTyMjXyMjTihNICp0YXJnZXQs
IFQgZGVsdGEpCQkJXAotCXsJCQkJCQkJXAotCQlUIHByZXZpb3VzOwkJCQkJXAotCQlfX2FzbV9f
IF9fdm9sYXRpbGVfXygiMToiCQkJXAotCQkJCSAgICAgImwiIFcgImFyeCAlMCwgMCwgJTE7Iglc
Ci0JCQkJICAgICAgSSAiICUwLCAlMiwgJTA7IgkJXAotCQkJCSAgICAgInN0IiBXICJjeC4gJTAs
IDAsICUxOyIJXAotCQkJCSAgICAgImJuZS0gIDFiOyIJCVwKLQkJCQkJOiAiPSZyIiAocHJldmlv
dXMpCVwKLQkJCQkJOiAiciIgICAodGFyZ2V0KSwJXAotCQkJCQkgICJyIiAgIChkZWx0YSkJCVwK
LQkJCQkJOiAibWVtb3J5IiwgImNjIik7CVwKLQkJcmV0dXJuOwkJCQkJCVwKLQl9Ci0KLUNLX1BS
X0JJTkFSWShhbmQsIHB0ciwgdm9pZCwgdWludHB0cl90LCAiYW5kIiwgImQiKQotQ0tfUFJfQklO
QVJZKGFkZCwgcHRyLCB2b2lkLCB1aW50cHRyX3QsICJhZGQiLCAiZCIpCi1DS19QUl9CSU5BUlko
b3IsIHB0ciwgdm9pZCwgdWludHB0cl90LCAib3IiLCAiZCIpCi1DS19QUl9CSU5BUlkoc3ViLCBw
dHIsIHZvaWQsIHVpbnRwdHJfdCwgInN1YiIsICJkIikKLUNLX1BSX0JJTkFSWSh4b3IsIHB0ciwg
dm9pZCwgdWludHB0cl90LCAieG9yIiwgImQiKQotCi0jZGVmaW5lIENLX1BSX0JJTkFSWV9TKFMs
IFQsIFcpCQkJXAotCUNLX1BSX0JJTkFSWShhbmQsIFMsIFQsIFQsICJhbmQiLCBXKQlcCi0JQ0tf
UFJfQklOQVJZKGFkZCwgUywgVCwgVCwgImFkZCIsIFcpCVwKLQlDS19QUl9CSU5BUlkob3IsIFMs
IFQsIFQsICJvciIsIFcpCVwKLQlDS19QUl9CSU5BUlkoc3ViLCBTLCBULCBULCAic3ViZiIsIFcp
CVwKLQlDS19QUl9CSU5BUlkoeG9yLCBTLCBULCBULCAieG9yIiwgVykKLQotQ0tfUFJfQklOQVJZ
X1MoNjQsIHVpbnQ2NF90LCAiZCIpCi1DS19QUl9CSU5BUllfUygzMiwgdWludDMyX3QsICJ3IikK
LUNLX1BSX0JJTkFSWV9TKHVpbnQsIHVuc2lnbmVkIGludCwgInciKQotQ0tfUFJfQklOQVJZX1Mo
aW50LCBpbnQsICJ3IikKLQotI3VuZGVmIENLX1BSX0JJTkFSWV9TCi0jdW5kZWYgQ0tfUFJfQklO
QVJZCi0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZCAqCi1ja19wcl9mYWFfcHRyKHZvaWQgKnRh
cmdldCwgdWludHB0cl90IGRlbHRhKQotewotCXVpbnRwdHJfdCBwcmV2aW91cywgcjsKLQotCV9f
YXNtX18gX192b2xhdGlsZV9fKCIxOiIKLQkJCSAgICAgImxkYXJ4ICUwLCAwLCAlMjsiCi0JCQkg
ICAgICJhZGQgJTEsICUzLCAlMDsiCi0JCQkgICAgICJzdGRjeC4gJTEsIDAsICUyOyIKLQkJCSAg
ICAgImJuZS0gIDFiOyIKLQkJCQk6ICI9JnIiIChwcmV2aW91cyksCi0JCQkJICAiPSZyIiAocikK
LQkJCQk6ICJyIiAgICh0YXJnZXQpLAotCQkJCSAgInIiICAgKGRlbHRhKQotCQkJCTogIm1lbW9y
eSIsICJjYyIpOwotCi0JcmV0dXJuICh2b2lkICopKHByZXZpb3VzKTsKLX0KLQotI2RlZmluZSBD
S19QUl9GQUEoUywgVCwgVykJCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyBUCQkJCQkJXAot
CWNrX3ByX2ZhYV8jI1MoVCAqdGFyZ2V0LCBUIGRlbHRhKQkJCQlcCi0JewkJCQkJCQkJXAotCQlU
IHByZXZpb3VzLCByOwkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6IgkJCQlcCi0J
CQkJICAgICAibCIgVyAiYXJ4ICUwLCAwLCAlMjsiCQlcCi0JCQkJICAgICAiYWRkICUxLCAlMywg
JTA7IgkJCVwKLQkJCQkgICAgICJzdCIgVyAiY3guICUxLCAwLCAlMjsiCQlcCi0JCQkJICAgICAi
Ym5lLSAgMWI7IgkJCVwKLQkJCQkJOiAiPSZyIiAocHJldmlvdXMpLAkJXAotCQkJCQkgICI9JnIi
IChyKQkJCVwKLQkJCQkJOiAiciIgICAodGFyZ2V0KSwJCVwKLQkJCQkJICAiciIgICAoZGVsdGEp
CQkJXAotCQkJCQk6ICJtZW1vcnkiLCAiY2MiKTsJCVwKLQkJcmV0dXJuIChwcmV2aW91cyk7CQkJ
CQlcCi0JfQotCi1DS19QUl9GQUEoNjQsIHVpbnQ2NF90LCAiZCIpCi1DS19QUl9GQUEoMzIsIHVp
bnQzMl90LCAidyIpCi1DS19QUl9GQUEodWludCwgdW5zaWduZWQgaW50LCAidyIpCi1DS19QUl9G
QUEoaW50LCBpbnQsICJ3IikKLQotI3VuZGVmIENLX1BSX0ZBQQotCi0jZW5kaWYgLyogQ0tfUFJf
UFBDNjRfSCAqLwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2sv
aW5jbHVkZS9nY2MvczM5MHgvY2tfZl9wci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvY2svaW5jbHVkZS9nY2MvczM5MHgvY2tfZl9wci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjZDU0YTI4OWUxMWU2ZmY4M2YyMGQ2ZGI2NTg4ZWQxY2Q5Zjc1MjJhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvZ2NjL3MzOTB4L2NrX2ZfcHIuaAorKysgL2Rldi9udWxs
CkBAIC0xLDk3ICswLDAgQEAKLS8qIERPIE5PVCBFRElULiBUaGlzIGlzIGF1dG8tZ2VuZXJhdGVk
IGZyb20gZmVhdHVyZS5zaCAqLwotI2RlZmluZSBDS19GX1BSX0FERF8zMgotI2RlZmluZSBDS19G
X1BSX0FERF82NAotI2RlZmluZSBDS19GX1BSX0FERF9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9BRERf
UFRSCi0jZGVmaW5lIENLX0ZfUFJfQUREX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9BTkRfMzIKLSNk
ZWZpbmUgQ0tfRl9QUl9BTkRfNjQKLSNkZWZpbmUgQ0tfRl9QUl9BTkRfSU5UCi0jZGVmaW5lIENL
X0ZfUFJfQU5EX1BUUgotI2RlZmluZSBDS19GX1BSX0FORF9VSU5UCi0jZGVmaW5lIENLX0ZfUFJf
Q0FTXzMyCi0jZGVmaW5lIENLX0ZfUFJfQ0FTXzMyX1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FT
XzY0Ci0jZGVmaW5lIENLX0ZfUFJfQ0FTXzY0X1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX0lO
VAotI2RlZmluZSBDS19GX1BSX0NBU19JTlRfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfUFRS
Ci0jZGVmaW5lIENLX0ZfUFJfQ0FTX1BUUl9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU19VSU5U
Ci0jZGVmaW5lIENLX0ZfUFJfQ0FTX1VJTlRfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfMzIK
LSNkZWZpbmUgQ0tfRl9QUl9ERUNfNjQKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfSU5UCi0jZGVmaW5l
IENLX0ZfUFJfREVDX1BUUgotI2RlZmluZSBDS19GX1BSX0RFQ19VSU5UCi0jZGVmaW5lIENLX0Zf
UFJfRkFBXzMyCi0jZGVmaW5lIENLX0ZfUFJfRkFBXzY0Ci0jZGVmaW5lIENLX0ZfUFJfRkFBX0lO
VAotI2RlZmluZSBDS19GX1BSX0ZBQV9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9GQUFfVUlOVAotI2Rl
ZmluZSBDS19GX1BSX0ZBU18zMgotI2RlZmluZSBDS19GX1BSX0ZBU182NAotI2RlZmluZSBDS19G
X1BSX0ZBU19JTlQKLSNkZWZpbmUgQ0tfRl9QUl9GQVNfUFRSCi0jZGVmaW5lIENLX0ZfUFJfRkFT
X1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9GQVNfRE9VQkxFCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0Vf
TE9BRAotI2RlZmluZSBDS19GX1BSX0ZFTkNFX0xPQURfREVQRU5EUwotI2RlZmluZSBDS19GX1BS
X0ZFTkNFX01FTU9SWQotI2RlZmluZSBDS19GX1BSX0ZFTkNFX1NUT1JFCi0jZGVmaW5lIENLX0Zf
UFJfRkVOQ0VfU1RSSUNUX0xPQUQKLSNkZWZpbmUgQ0tfRl9QUl9GRU5DRV9TVFJJQ1RfTE9BRF9E
RVBFTkRTCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX01FTU9SWQotI2RlZmluZSBDS19G
X1BSX0ZFTkNFX1NUUklDVF9TVE9SRQotI2RlZmluZSBDS19GX1BSX0lOQ18zMgotI2RlZmluZSBD
S19GX1BSX0lOQ182NAotI2RlZmluZSBDS19GX1BSX0lOQ19JTlQKLSNkZWZpbmUgQ0tfRl9QUl9J
TkNfUFRSCi0jZGVmaW5lIENLX0ZfUFJfSU5DX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEXzE2
Ci0jZGVmaW5lIENLX0ZfUFJfTE9BRF8zMgotI2RlZmluZSBDS19GX1BSX0xPQURfNjQKLSNkZWZp
bmUgQ0tfRl9QUl9MT0FEXzgKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEX0NIQVIKLSNkZWZpbmUgQ0tf
Rl9QUl9MT0FEX0RPVUJMRQotI2RlZmluZSBDS19GX1BSX0xPQURfSU5UCi0jZGVmaW5lIENLX0Zf
UFJfTE9BRF9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEX1NIT1JUCi0jZGVmaW5lIENLX0ZfUFJf
TE9BRF9VSU5UCi0jZGVmaW5lIENLX0ZfUFJfTkVHXzMyCi0jZGVmaW5lIENLX0ZfUFJfTkVHXzY0
Ci0jZGVmaW5lIENLX0ZfUFJfTkVHX0lOVAotI2RlZmluZSBDS19GX1BSX05FR19QVFIKLSNkZWZp
bmUgQ0tfRl9QUl9ORUdfVUlOVAotI2RlZmluZSBDS19GX1BSX05PVF8zMgotI2RlZmluZSBDS19G
X1BSX05PVF82NAotI2RlZmluZSBDS19GX1BSX05PVF9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9OT1Rf
UFRSCi0jZGVmaW5lIENLX0ZfUFJfTk9UX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9PUl8zMgotI2Rl
ZmluZSBDS19GX1BSX09SXzY0Ci0jZGVmaW5lIENLX0ZfUFJfT1JfSU5UCi0jZGVmaW5lIENLX0Zf
UFJfT1JfUFRSCi0jZGVmaW5lIENLX0ZfUFJfT1JfVUlOVAotI2RlZmluZSBDS19GX1BSX1NUQUxM
Ci0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfMTYKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV8zMgotI2Rl
ZmluZSBDS19GX1BSX1NUT1JFXzY0Ci0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfOAotI2RlZmluZSBD
S19GX1BSX1NUT1JFX0NIQVIKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV9ET1VCTEUKLSNkZWZpbmUg
Q0tfRl9QUl9TVE9SRV9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV9QVFIKLSNkZWZpbmUgQ0tf
Rl9QUl9TVE9SRV9TSE9SVAotI2RlZmluZSBDS19GX1BSX1NUT1JFX1VJTlQKLSNkZWZpbmUgQ0tf
Rl9QUl9TVUJfMzIKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfNjQKLSNkZWZpbmUgQ0tfRl9QUl9TVUJf
SU5UCi0jZGVmaW5lIENLX0ZfUFJfU1VCX1BUUgotI2RlZmluZSBDS19GX1BSX1NVQl9VSU5UCi0j
ZGVmaW5lIENLX0ZfUFJfWE9SXzMyCi0jZGVmaW5lIENLX0ZfUFJfWE9SXzY0Ci0jZGVmaW5lIENL
X0ZfUFJfWE9SX0lOVAotI2RlZmluZSBDS19GX1BSX1hPUl9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9Y
T1JfVUlOVAotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9p
bmNsdWRlL2djYy9zMzkweC9ja19wci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Y2svaW5jbHVkZS9nY2MvczM5MHgvY2tfcHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGFkMjJiMmQyYzEyMzI3ZmYwNzU1MDZiZmJhZmY4ZGQyYjhjNmZkMC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9pbmNsdWRlL2djYy9zMzkweC9ja19wci5oCisrKyAvZGV2L251bGwKQEAgLTEs
MzczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IFNhbXkgQWwgQmFocmEuCi0g
KiBDb3B5cmlnaHQgMjAxNyBOZWFsZSBGZXJndXNvbgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0g
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIENLX1BSX1MzOTBYX0gKLSNkZWZpbmUgQ0tfUFJfUzM5MFhfSAotCi0jaWZu
ZGVmIENLX1BSX0gKLSNlcnJvciBEbyBub3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHksIHVz
ZSBja19wci5oCi0jZW5kaWYKLQotI2luY2x1ZGUgPGNrX2NjLmg+Ci0jaW5jbHVkZSA8Y2tfbWQu
aD4KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgcmVwcmVzZW50IHN1cHBvcnRlZCBhdG9taWMgb3Bl
cmF0aW9ucy4KLSAqIFRoZXNlIG9wZXJhdGlvbnMgbWF5IGJlIGVtdWxhdGVkLgotICovCi0jaW5j
bHVkZSAiY2tfZl9wci5oIgotCi0vKgotICogTWluaW11bSBpbnRlcmZhY2UgcmVxdWlyZW1lbnQg
bWV0LgotICovCi0jZGVmaW5lIENLX0ZfUFIKLQotLyoKLSAqIFRoaXMgYm91bmNlcyB0aGUgaGFy
ZHdhcmUgdGhyZWFkIGZyb20gbG93IHRvIG1lZGl1bQotICogcHJpb3JpdHkuIEkgYW0gdW5zdXJl
IG9mIHRoZSBiZW5lZml0cyBvZiB0aGlzIGFwcHJvYWNoCi0gKiBidXQgaXQgaXMgdXNlZCBieSB0
aGUgTGludXgga2VybmVsLgotICovCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3ByX3N0
YWxsKHZvaWQpCi17Ci0JX19zeW5jX3N5bmNocm9uaXplKCk7Ci0JcmV0dXJuOwotfQotCi0jZGVm
aW5lIENLX1BSX0ZFTkNFKFQpCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJXAot
CWNrX3ByX2ZlbmNlX3N0cmljdF8jI1Qodm9pZCkJCQlcCi0JewkJCQkJCVwKLQkJX19zeW5jX3N5
bmNocm9uaXplKCk7CQkJXAotCX0KLQotLyoKLSAqIFRoZXNlIGFyZSBkZXJpdmVkIGZyb206Ci0g
KiAgICAgaHR0cDovL3d3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL3N5c3RlbXMvYXJ0aWNsZXMv
cG93ZXJwYy5odG1sCi0gKi8KLUNLX1BSX0ZFTkNFKGF0b21pYykKLUNLX1BSX0ZFTkNFKGF0b21p
Y19zdG9yZSkKLUNLX1BSX0ZFTkNFKGF0b21pY19sb2FkKQotQ0tfUFJfRkVOQ0Uoc3RvcmVfYXRv
bWljKQotQ0tfUFJfRkVOQ0UobG9hZF9hdG9taWMpCi1DS19QUl9GRU5DRShzdG9yZSkKLUNLX1BS
X0ZFTkNFKHN0b3JlX2xvYWQpCi1DS19QUl9GRU5DRShsb2FkKQotQ0tfUFJfRkVOQ0UobG9hZF9z
dG9yZSkKLUNLX1BSX0ZFTkNFKG1lbW9yeSkKLUNLX1BSX0ZFTkNFKGFjcXVpcmUpCi1DS19QUl9G
RU5DRShyZWxlYXNlKQotQ0tfUFJfRkVOQ0UoYWNxcmVsKQotQ0tfUFJfRkVOQ0UobG9jaykKLUNL
X1BSX0ZFTkNFKHVubG9jaykKLQotI3VuZGVmIENLX1BSX0ZFTkNFCi0KLSNkZWZpbmUgQ0tfUFJf
TE9BRChTLCBNLCBULCBDLCBJKQkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgVAkJCQkJCVwK
LQlja19wcl9tZF9sb2FkXyMjUyhjb25zdCBNICp0YXJnZXQpCQkJCVwKLQl7CQkJCQkJCQlcCi0J
CVQgcjsJCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhJICJcdCUwLCAlMVxuIgkJCVwK
LQkJCQkJOiAiPXIiIChyKQkJCVwKLQkJCQkJOiAiUSIgICgqKGNvbnN0IEMgKil0YXJnZXQpCVwK
LQkJCQkJOiAibWVtb3J5Iik7CQkJXAotCQlyZXR1cm4gKHIpOwkJCQkJCVwKLQl9Ci0KLUNLX1BS
X0xPQUQocHRyLCB2b2lkLCB2b2lkICosIHVpbnQ2NF90LCAibGciKQotCi0jZGVmaW5lIENLX1BS
X0xPQURfUyhTLCBULCBJKSBDS19QUl9MT0FEKFMsIFQsIFQsIFQsIEkpCi0KLUNLX1BSX0xPQURf
Uyg2NCwgdWludDY0X3QsICJsZyIpCi1DS19QUl9MT0FEX1MoMzIsIHVpbnQzMl90LCAibGxnZiIp
Ci1DS19QUl9MT0FEX1MoMTYsIHVpbnQxNl90LCAibGxnaCIpCi1DS19QUl9MT0FEX1MoOCwgdWlu
dDhfdCwgImxsZ2MiKQotQ0tfUFJfTE9BRF9TKHVpbnQsIHVuc2lnbmVkIGludCwgImxsZ2YiKQot
Q0tfUFJfTE9BRF9TKGludCwgaW50LCAibGxnZiIpCi1DS19QUl9MT0FEX1Moc2hvcnQsIHNob3J0
LCAibGdoIikKLUNLX1BSX0xPQURfUyhjaGFyLCBjaGFyLCAibGdiIikKLSNpZm5kZWYgQ0tfUFJf
RElTQUJMRV9ET1VCTEUKLUNLX0NDX0lOTElORSBzdGF0aWMgZG91YmxlCi1ja19wcl9tZF9sb2Fk
X2RvdWJsZShjb25zdCBkb3VibGUgKnRhcmdldCkKLXsKLQlkb3VibGUgcjsKLQlfX2FzbV9fIF9f
dm9sYXRpbGVfXygibGQgICUwLCAlMVxuIgotCQkJCTogIj1mIiAocikKLQkJCQk6ICJRIiAgKCoo
Y29uc3QgZG91YmxlICopdGFyZ2V0KSAgIAotCQkJCTogIm1lbW9yeSIpOwotCXJldHVybiAocik7
CQkJCi19Ci0jZW5kaWYKLQotI3VuZGVmIENLX1BSX0xPQURfUwotI3VuZGVmIENLX1BSX0xPQUQK
LQotI2RlZmluZSBDS19QUl9TVE9SRShTLCBNLCBULCBDLCBJKQkJCQlcCi0JQ0tfQ0NfSU5MSU5F
IHN0YXRpYyB2b2lkCQkJCVwKLQlja19wcl9tZF9zdG9yZV8jI1MoTSAqdGFyZ2V0LCBUIHYpCQkJ
XAotCXsJCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhJICJcdCUxLCAlMFxuIgkJXAot
CQkJCQk6ICI9USIgKCooQyAqKXRhcmdldCkJXAotCQkJCQk6ICJyIiAodikJCVwKLQkJCQkJOiAi
bWVtb3J5Iik7CQlcCi0JCXJldHVybjsJCQkJCQlcCi0JfQotCi1DS19QUl9TVE9SRShwdHIsIHZv
aWQsIGNvbnN0IHZvaWQgKiwgdWludDY0X3QsICJzdGciKQotCi0jZGVmaW5lIENLX1BSX1NUT1JF
X1MoUywgVCwgSSkgQ0tfUFJfU1RPUkUoUywgVCwgVCwgVCwgSSkKLQotQ0tfUFJfU1RPUkVfUyg2
NCwgdWludDY0X3QsICJzdGciKQotQ0tfUFJfU1RPUkVfUygzMiwgdWludDMyX3QsICJzdCIpCi1D
S19QUl9TVE9SRV9TKDE2LCB1aW50MTZfdCwgInN0aCIpCi1DS19QUl9TVE9SRV9TKDgsIHVpbnQ4
X3QsICJzdGMiKQotQ0tfUFJfU1RPUkVfUyh1aW50LCB1bnNpZ25lZCBpbnQsICJzdCIpCi1DS19Q
Ul9TVE9SRV9TKGludCwgaW50LCAic3QiKQotQ0tfUFJfU1RPUkVfUyhzaG9ydCwgc2hvcnQsICJz
dGgiKQotQ0tfUFJfU1RPUkVfUyhjaGFyLCBjaGFyLCAic3RjIikKLSNpZm5kZWYgQ0tfUFJfRElT
QUJMRV9ET1VCTEUKLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfcHJfbWRfc3RvcmVfZG91
YmxlKGRvdWJsZSAqdGFyZ2V0LCBkb3VibGUgdikKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygi
IHN0ZCAgJTEsICUwXG4iCi0JCQkJOiAiPVEiICgqKGRvdWJsZSAqKXRhcmdldCkgICAKLQkJCQk6
ICJmIiAgKHYpCi0JCQkJOiAiMCIsICJtZW1vcnkiKTsKLX0KLSNlbmRpZgotCi0jdW5kZWYgQ0tf
UFJfU1RPUkVfUwotI3VuZGVmIENLX1BSX1NUT1JFCi0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9v
bAotY2tfcHJfY2FzXzY0X3ZhbHVlKHVpbnQ2NF90ICp0YXJnZXQsIHVpbnQ2NF90IGNvbXBhcmUs
IHVpbnQ2NF90IHNldCwgdWludDY0X3QgKnZhbHVlKQotewotCSp2YWx1ZSA9IF9fc3luY192YWxf
Y29tcGFyZV9hbmRfc3dhcCh0YXJnZXQsY29tcGFyZSxzZXQpOwotICAgICAgICByZXR1cm4gKCp2
YWx1ZSA9PSBjb21wYXJlKTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19wcl9j
YXNfcHRyX3ZhbHVlKHZvaWQgKnRhcmdldCwgdm9pZCAqY29tcGFyZSwgdm9pZCAqc2V0LCB2b2lk
ICp2YWx1ZSkKLXsKLQl1aW50cHRyX3QgcHJldmlvdXM7Ci0KLQlwcmV2aW91cyA9IF9fc3luY192
YWxfY29tcGFyZV9hbmRfc3dhcCgodWludHB0cl90ICopIHRhcmdldCwKLQkJCQkJICAgICAgICh1
aW50cHRyX3QpIGNvbXBhcmUsCi0JCQkJCSAgICAgICAodWludHB0cl90KSBzZXQpOwotCSooKHVp
bnRwdHJfdCAqKSB2YWx1ZSkgPSBwcmV2aW91czsKLSAgICAgICAgcmV0dXJuIChwcmV2aW91cyA9
PSAodWludHB0cl90KSBjb21wYXJlKTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1j
a19wcl9jYXNfNjQodWludDY0X3QgKnRhcmdldCwgdWludDY0X3QgY29tcGFyZSwgdWludDY0X3Qg
c2V0KQotewotCXJldHVybihfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwKHRhcmdldCxjb21w
YXJlLHNldCkpOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wKLWNrX3ByX2Nhc19wdHIo
dm9pZCAqdGFyZ2V0LCB2b2lkICpjb21wYXJlLCB2b2lkICpzZXQpCi17Ci0JcmV0dXJuKF9fc3lu
Y19ib29sX2NvbXBhcmVfYW5kX3N3YXAoKHVpbnRwdHJfdCAqKSB0YXJnZXQsCi0JCQkJCSAgICAo
dWludHB0cl90KSBjb21wYXJlLAotCQkJCQkgICAgKHVpbnRwdHJfdCkgc2V0KSk7Ci19Ci0KLSNk
ZWZpbmUgQ0tfUFJfQ0FTKE4sIFQpCQkJCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIGJvb2wJ
CQkJCVwKLQlja19wcl9jYXNfIyNOIyNfdmFsdWUoVCAqdGFyZ2V0LCBUIGNvbXBhcmUsIFQgc2V0
LCBUICp2YWx1ZSkJXAotCXsJCQkJCQkJCVwKLQkJKnZhbHVlID0gX19zeW5jX3ZhbF9jb21wYXJl
X2FuZF9zd2FwKHRhcmdldCwJCVwKLQkJCQkJCSAgICAgY29tcGFyZSwJCVwKLQkJCQkJCSAgICAg
c2V0KTsJCVwKLQkJcmV0dXJuKCp2YWx1ZSA9PSBjb21wYXJlKTsJCQkJXAotCX0JCQkJCQkJCVwK
LQlDS19DQ19JTkxJTkUgc3RhdGljIGJvb2wJCQkJCVwKLQlja19wcl9jYXNfIyNOKFQgKnRhcmdl
dCwgVCBjb21wYXJlLCBUIHNldCkJCQlcCi0JewkJCQkJCQkJXAotCQlyZXR1cm4oX19zeW5jX2Jv
b2xfY29tcGFyZV9hbmRfc3dhcCh0YXJnZXQsCQlcCi0JCQkJCQkgICBjb21wYXJlLAkJXAotCQkJ
CQkJICAgc2V0KSk7CQlcCi0JfQotCi1DS19QUl9DQVMoMzIsIHVpbnQzMl90KQotQ0tfUFJfQ0FT
KHVpbnQsIHVuc2lnbmVkIGludCkKLUNLX1BSX0NBUyhpbnQsIGludCkKLQotI3VuZGVmIENLX1BS
X0NBUwotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQgKgotY2tfcHJfZmFzX3B0cih2b2lkICp0
YXJnZXQsIHZvaWQgKnYpCi17Ci0JcmV0dXJuKCh2b2lkICopX19hdG9taWNfZXhjaGFuZ2Vfbigo
dWludHB0cl90ICopIHRhcmdldCwgKHVpbnRwdHJfdCkgdiwgX19BVE9NSUNfQUNRVUlSRSkpOwot
fQotCi0jZGVmaW5lIENLX1BSX0ZBUyhOLCBNLCBUKQkJCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0
YXRpYyBUCQkJCQkJCVwKLQlja19wcl9mYXNfIyNOKE0gKnRhcmdldCwgVCB2KQkJCQkJCVwKLQl7
CQkJCQkJCQkJXAotCQlyZXR1cm4oX19hdG9taWNfZXhjaGFuZ2Vfbih0YXJnZXQsIHYsIF9fQVRP
TUlDX0FDUVVJUkUpKTsJXAotCX0KLQotQ0tfUFJfRkFTKDY0LCB1aW50NjRfdCwgdWludDY0X3Qp
Ci1DS19QUl9GQVMoMzIsIHVpbnQzMl90LCB1aW50MzJfdCkKLUNLX1BSX0ZBUyhpbnQsIGludCwg
aW50KQotQ0tfUFJfRkFTKHVpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KQotCi0jaWZu
ZGVmIENLX1BSX0RJU0FCTEVfRE9VQkxFCi1DS19DQ19JTkxJTkUgc3RhdGljIGRvdWJsZQotY2tf
cHJfZmFzX2RvdWJsZShkb3VibGUgKnRhcmdldCwgZG91YmxlICp2KQotewotCWRvdWJsZSBwcmV2
aW91czsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgiCSAgIGxnICAgMSwlMlxuIgotCQkJICAg
ICAgIjA6ICBsZwkwLCUxXG4iCi0JCQkgICAgICAiICAgIGNzZwkwLDEsJTFcbiIKLQkJCSAgICAg
ICIgICAgam56CTBiXG4iCi0JCQkgICAgICAiICAgIGxkZ3IgJTAsMFxuIgotCQkJICAgICAgOiAi
PWYiIChwcmV2aW91cykgCi0JCQkgICAgICA6ICJRIiAodGFyZ2V0KSwgIlEiICh2KQotCQkJICAg
ICAgOiAiMCIsICIxIiwgImNjIiwgIm1lbW9yeSIpOwotCXJldHVybiAocHJldmlvdXMpOwotfQot
I2VuZGlmCi0KLSN1bmRlZiBDS19QUl9GQVMKLQotLyoKLSAqIEF0b21pYyBzdG9yZS1vbmx5IGJp
bmFyeSBvcGVyYXRpb25zLgotICovCi0jZGVmaW5lIENLX1BSX0JJTkFSWShLLCBTLCBNLCBUKQkJ
CQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJCVwKLQlja19wcl8jI0sjI18jI1MoTSAq
dGFyZ2V0LCBUIGQpCQkJCVwKLQl7CQkJCQkJCVwKLQkJZCA9IF9fc3luY19mZXRjaF9hbmRfIyNL
KChUICopdGFyZ2V0LCBkKTsJXAotCQlyZXR1cm47CQkJCQkJXAotCX0KLQotI2RlZmluZSBDS19Q
Ul9CSU5BUllfUyhLLCBTLCBUKSBDS19QUl9CSU5BUlkoSywgUywgVCwgVCkKLQotI2RlZmluZSBD
S19QUl9HRU5FUkFURShLKQkJCVwKLQlDS19QUl9CSU5BUlkoSywgcHRyLCB2b2lkLCB2b2lkICop
CVwKLQlDS19QUl9CSU5BUllfUyhLLCBjaGFyLCBjaGFyKQkJXAotCUNLX1BSX0JJTkFSWV9TKEss
IGludCwgaW50KQkJXAotCUNLX1BSX0JJTkFSWV9TKEssIHVpbnQsIHVuc2lnbmVkIGludCkJXAot
CUNLX1BSX0JJTkFSWV9TKEssIDY0LCB1aW50NjRfdCkJCVwKLQlDS19QUl9CSU5BUllfUyhLLCAz
MiwgdWludDMyX3QpCQlcCi0JQ0tfUFJfQklOQVJZX1MoSywgMTYsIHVpbnQxNl90KQkJXAotCUNL
X1BSX0JJTkFSWV9TKEssIDgsIHVpbnQ4X3QpCi0KLUNLX1BSX0dFTkVSQVRFKGFkZCkKLUNLX1BS
X0dFTkVSQVRFKHN1YikKLUNLX1BSX0dFTkVSQVRFKGFuZCkKLUNLX1BSX0dFTkVSQVRFKG9yKQot
Q0tfUFJfR0VORVJBVEUoeG9yKQotCi0jdW5kZWYgQ0tfUFJfR0VORVJBVEUKLSN1bmRlZiBDS19Q
Ul9CSU5BUllfUwotI3VuZGVmIENLX1BSX0JJTkFSWQotCi0jZGVmaW5lIENLX1BSX1VOQVJZKFMs
IE0sIFQpCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJXAotCWNrX3ByX2luY18jI1Mo
TSAqdGFyZ2V0KQkJXAotCXsJCQkJCVwKLQkJY2tfcHJfYWRkXyMjUyh0YXJnZXQsIChUKTEpOwlc
Ci0JCXJldHVybjsJCQkJXAotCX0JCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIHZvaWQJCVwK
LQlja19wcl9kZWNfIyNTKE0gKnRhcmdldCkJCVwKLQl7CQkJCQlcCi0JCWNrX3ByX3N1Yl8jI1Mo
dGFyZ2V0LCAoVCkxKTsJXAotCQlyZXR1cm47CQkJCVwKLQl9Ci0KLSNkZWZpbmUgQ0tfUFJfVU5B
UllfWChTLCBNKSAJICAJCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIHZvaWQJCQkJCVwKLQlj
a19wcl9ub3RfIyNTKE0gKnRhcmdldCkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JCU0gbmV3dmFsOwkJ
CQkJCVwKLQkJZG8gewkJCQkJCQlcCi0JCQluZXd2YWwgPSB+KCp0YXJnZXQpOwkJCQlcCi0JCX0g
d2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwKHRhcmdldCwgCQlcCi0JCQkJCQkg
ICAgICAqdGFyZ2V0LAkJXAotCQkJCQkJICAgICAgbmV3dmFsKSk7CQlcCi0JfQkJCQkJCQkJXAot
CUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCQkJXAotCWNrX3ByX25lZ18jI1MoTSAqdGFyZ2V0
KQkJCQkJXAotCXsJCQkJCQkJCVwKLQkJTSBuZXd2YWw7CQkJCQkJXAotCQlkbyB7CQkJCQkJCVwK
LQkJCW5ld3ZhbCA9IC0oKnRhcmdldCk7CQkJCVwKLQkJfSB3aGlsZSAoIV9fc3luY19ib29sX2Nv
bXBhcmVfYW5kX3N3YXAodGFyZ2V0LCAJCVwKLQkJCQkJCSAgICAgICp0YXJnZXQsCQlcCi0JCQkJ
CQkgICAgICBuZXd2YWwpKTsJCVwKLQl9CQkJCQkJCQkKLQotI2RlZmluZSBDS19QUl9VTkFSWV9T
KFMsIE0pIENLX1BSX1VOQVJZKFMsIE0sIE0pIFwKLQkJCSAgICBDS19QUl9VTkFSWV9YKFMsIE0p
Ci0KLUNLX1BSX1VOQVJZKHB0ciwgdm9pZCwgdm9pZCAqKQotQ0tfUFJfVU5BUllfUyhjaGFyLCBj
aGFyKQotQ0tfUFJfVU5BUllfUyhpbnQsIGludCkKLUNLX1BSX1VOQVJZX1ModWludCwgdW5zaWdu
ZWQgaW50KQotQ0tfUFJfVU5BUllfUyg2NCwgdWludDY0X3QpCi1DS19QUl9VTkFSWV9TKDMyLCB1
aW50MzJfdCkKLUNLX1BSX1VOQVJZX1MoMTYsIHVpbnQxNl90KQotQ0tfUFJfVU5BUllfUyg4LCB1
aW50OF90KQotCi0jdW5kZWYgQ0tfUFJfVU5BUllfUwotI3VuZGVmIENLX1BSX1VOQVJZCi0KLUNL
X0NDX0lOTElORSBzdGF0aWMgdm9pZCAqCi1ja19wcl9mYWFfcHRyKHZvaWQgKnRhcmdldCwgdWlu
dHB0cl90IGRlbHRhKQotewotCXVpbnRwdHJfdCBwcmV2aW91czsKLQotCXByZXZpb3VzID0gX19z
eW5jX2ZldGNoX2FuZF9hZGQoKHVpbnRwdHJfdCAqKSB0YXJnZXQsIGRlbHRhKTsKLQotCXJldHVy
biAodm9pZCAqKShwcmV2aW91cyk7Ci19Ci0KLSNkZWZpbmUgQ0tfUFJfRkFBKFMsIFQpCQkJCQkJ
CVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIFQJCQkJCQlcCi0JY2tfcHJfZmFhXyMjUyhUICp0YXJn
ZXQsIFQgZGVsdGEpCQkJCVwKLQl7CQkJCQkJCQlcCi0JCVQgcHJldmlvdXM7CQkJCQkJXAotCQkJ
CQkJCQkJXAotCQlwcmV2aW91cyA9IF9fc3luY19mZXRjaF9hbmRfYWRkKHRhcmdldCwgZGVsdGEp
OwkJXAotCQkJCQkJCQkJXAotCQlyZXR1cm4gKHByZXZpb3VzKTsJCQkJCVwKLQl9Ci0KLUNLX1BS
X0ZBQSg2NCwgdWludDY0X3QpCi1DS19QUl9GQUEoMzIsIHVpbnQzMl90KQotQ0tfUFJfRkFBKHVp
bnQsIHVuc2lnbmVkIGludCkKLUNLX1BSX0ZBQShpbnQsIGludCkKLQotI3VuZGVmIENLX1BSX0ZB
QQotCi0jZW5kaWYgLyogQ0tfUFJfUzM5MFhfSCAqLwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2Mvc3BhcmN2OS9ja19mX3ByLmggYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy9zcGFyY3Y5L2NrX2ZfcHIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM5ODY4MGViNWYyOTQ4NGE3Y2QxZWFj
MjlkYjAyNzBiMzI3MjE4ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy9zcGFy
Y3Y5L2NrX2ZfcHIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSNkZWZpbmUgQ0tf
Rl9QUl9DQVNfNjQKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfNjRfVkFMVUUKLSNkZWZpbmUgQ0tfRl9Q
Ul9DQVNfUFRSCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX1BUUl9WQUxVRQotI2RlZmluZSBDS19GX1BS
X0ZBU18zMgotI2RlZmluZSBDS19GX1BSX0ZBU19VSU5UCi0jZGVmaW5lIENLX0ZfUFJfRkFTX0lO
VAotI2RlZmluZSBDS19GX1BSX0NBU18zMgotI2RlZmluZSBDS19GX1BSX0NBU18zMl9WQUxVRQot
I2RlZmluZSBDS19GX1BSX0NBU19VSU5UCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX0lOVAotI2RlZmlu
ZSBDS19GX1BSX0NBU19VSU5UX1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX0lOVF9WQUxVRQot
I2RlZmluZSBDS19GX1BSX1NUT1JFXzY0Ci0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfMzIKLSNkZWZp
bmUgQ0tfRl9QUl9TVE9SRV9ET1VCTEUKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV9VSU5UCi0jZGVm
aW5lIENLX0ZfUFJfU1RPUkVfSU5UCi0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfUFRSCi0jZGVmaW5l
IENLX0ZfUFJfTE9BRF82NAotI2RlZmluZSBDS19GX1BSX0xPQURfMzIKLSNkZWZpbmUgQ0tfRl9Q
Ul9MT0FEX0RPVUJMRQotI2RlZmluZSBDS19GX1BSX0xPQURfVUlOVAotI2RlZmluZSBDS19GX1BS
X0xPQURfSU5UCi0jZGVmaW5lIENLX0ZfUFJfTE9BRF9QVFIKLQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2Mvc3BhcmN2OS9ja19wci5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2Mvc3BhcmN2OS9ja19w
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjdhZjZhMDI2OGI3ZTY3YjJjNTY2
ODUxNTA5ZTU5ZDk4YmExNTM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvZ2NjL3Nw
YXJjdjkvY2tfcHIuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyOCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IDIwMDksIDIwMTAgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0g
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAot
ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBDS19QUl9TUEFSQ1Y5X0gKLSNkZWZpbmUgQ0tfUFJfU1BBUkNWOV9ICi0K
LSNpZm5kZWYgQ0tfUFJfSAotI2Vycm9yIERvIG5vdCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3Rs
eSwgdXNlIGNrX3ByLmgKLSNlbmRpZgotCi0jaW5jbHVkZSA8Y2tfY2MuaD4KLSNpbmNsdWRlIDxj
a19tZC5oPgotCi0vKgotICogVGhlIGZvbGxvd2luZyByZXByZXNlbnQgc3VwcG9ydGVkIGF0b21p
YyBvcGVyYXRpb25zLgotICogVGhlc2Ugb3BlcmF0aW9ucyBtYXkgYmUgZW11bGF0ZWQuCi0gKi8K
LSNpbmNsdWRlICJja19mX3ByLmgiCi0KLS8qCi0gKiBNaW5pbXVtIGludGVyZmFjZSByZXF1aXJl
bWVudCBtZXQuCi0gKi8KLSNkZWZpbmUgQ0tfRl9QUgotCi0vKgotICogT3JkZXIgbG9hZHMgYXQg
dGhlIGxlYXN0LgotICovCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3ByX3N0YWxsKHZv
aWQpCi17Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibWVtYmFyICNMb2FkTG9hZCIgOjo6ICJt
ZW1vcnkiKTsKLQlyZXR1cm47Ci19Ci0KLSNkZWZpbmUgQ0tfUFJfRkVOQ0UoVCwgSSkJCQkJXAot
CUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCVwKLQlja19wcl9mZW5jZV9zdHJpY3RfIyNUKHZv
aWQpCQkJXAotCXsJCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKEkgOjo6ICJtZW1vcnki
KTsgICBcCi0JfQotCi0vKgotICogQXRvbWljIG9wZXJhdGlvbnMgYXJlIHRyZWF0ZWQgYXMgYm90
aCBsb2FkIGFuZCBzdG9yZQotICogb3BlcmF0aW9ucyBvbiBTUEFSQ3Y5LgotICovCi1DS19QUl9G
RU5DRShhdG9taWMsICJtZW1iYXIgI1N0b3JlU3RvcmUiKQotQ0tfUFJfRkVOQ0UoYXRvbWljX3N0
b3JlLCAibWVtYmFyICNTdG9yZVN0b3JlIikKLUNLX1BSX0ZFTkNFKGF0b21pY19sb2FkLCAibWVt
YmFyICNTdG9yZUxvYWQiKQotQ0tfUFJfRkVOQ0Uoc3RvcmVfYXRvbWljLCAibWVtYmFyICNTdG9y
ZVN0b3JlIikKLUNLX1BSX0ZFTkNFKGxvYWRfYXRvbWljLCAibWVtYmFyICNMb2FkU3RvcmUiKQot
Q0tfUFJfRkVOQ0Uoc3RvcmUsICJtZW1iYXIgI1N0b3JlU3RvcmUiKQotQ0tfUFJfRkVOQ0Uoc3Rv
cmVfbG9hZCwgIm1lbWJhciAjU3RvcmVMb2FkIikKLUNLX1BSX0ZFTkNFKGxvYWQsICJtZW1iYXIg
I0xvYWRMb2FkIikKLUNLX1BSX0ZFTkNFKGxvYWRfc3RvcmUsICJtZW1iYXIgI0xvYWRTdG9yZSIp
Ci1DS19QUl9GRU5DRShtZW1vcnksICJtZW1iYXIgI0xvYWRMb2FkIHwgI0xvYWRTdG9yZSB8ICNT
dG9yZVN0b3JlIHwgI1N0b3JlTG9hZCIpCi1DS19QUl9GRU5DRShhY3F1aXJlLCAibWVtYmFyICNM
b2FkTG9hZCB8ICNMb2FkU3RvcmUiKQotQ0tfUFJfRkVOQ0UocmVsZWFzZSwgIm1lbWJhciAjTG9h
ZFN0b3JlIHwgI1N0b3JlU3RvcmUiKQotQ0tfUFJfRkVOQ0UoYWNxcmVsLCAibWVtYmFyICNMb2Fk
TG9hZCB8ICNMb2FkU3RvcmUgfCAjU3RvcmVTdG9yZSIpCi1DS19QUl9GRU5DRShsb2NrLCAibWVt
YmFyICNMb2FkTG9hZCB8ICNMb2FkU3RvcmUgfCAjU3RvcmVTdG9yZSB8ICNTdG9yZUxvYWQiKQot
Q0tfUFJfRkVOQ0UodW5sb2NrLCAibWVtYmFyICNMb2FkU3RvcmUgfCAjU3RvcmVTdG9yZSIpCi0K
LSN1bmRlZiBDS19QUl9GRU5DRQotCi0jZGVmaW5lIENLX1BSX0xPQUQoUywgTSwgVCwgQywgSSkJ
CQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgVAkJCQkJXAotCWNrX3ByX21kX2xvYWRfIyNTKGNv
bnN0IE0gKnRhcmdldCkJCQlcCi0JewkJCQkJCQlcCi0JCVQgcjsJCQkJCQlcCi0JCV9fYXNtX18g
X192b2xhdGlsZV9fKEkgIiBbJTFdLCAlMCIJCVwKLQkJCQkJOiAiPSZyIiAocikJCVwKLQkJCQkJ
OiAiciIgICAodGFyZ2V0KQlcCi0JCQkJCTogIm1lbW9yeSIpOwkJXAotCQlyZXR1cm4gKHIpOwkJ
CQkJXAotCX0KLQotQ0tfUFJfTE9BRChwdHIsIHZvaWQsIHZvaWQgKiwgdWludDY0X3QsICJsZHgi
KQotCi0jZGVmaW5lIENLX1BSX0xPQURfUyhTLCBULCBJKSBDS19QUl9MT0FEKFMsIFQsIFQsIFQs
IEkpCi0KLUNLX1BSX0xPQURfUyg2NCwgdWludDY0X3QsICJsZHgiKQotQ0tfUFJfTE9BRF9TKDMy
LCB1aW50MzJfdCwgImxkdXciKQotQ0tfUFJfTE9BRF9TKHVpbnQsIHVuc2lnbmVkIGludCwgImxk
dXciKQotQ0tfUFJfTE9BRF9TKGRvdWJsZSwgZG91YmxlLCAibGR4IikKLUNLX1BSX0xPQURfUyhp
bnQsIGludCwgImxkc3ciKQotCi0jdW5kZWYgQ0tfUFJfTE9BRF9TCi0jdW5kZWYgQ0tfUFJfTE9B
RAotCi0jZGVmaW5lIENLX1BSX1NUT1JFKFMsIE0sIFQsIEMsIEkpCQkJCVwKLQlDS19DQ19JTkxJ
TkUgc3RhdGljIHZvaWQJCQkJXAotCWNrX3ByX21kX3N0b3JlXyMjUyhNICp0YXJnZXQsIFQgdikJ
CQlcCi0JewkJCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKEkgIiAlMCwgWyUxXSIJCVwK
LQkJCQkJOgkJCVwKLQkJCQkJOiAiciIgKHYpLAkJXAotCQkJCQkgICJyIiAodGFyZ2V0KQkJXAot
CQkJCQk6ICJtZW1vcnkiKTsJCVwKLQkJcmV0dXJuOwkJCQkJCVwKLQl9Ci0KLUNLX1BSX1NUT1JF
KHB0ciwgdm9pZCwgY29uc3Qgdm9pZCAqLCB1aW50NjRfdCwgInN0eCIpCi0KLSNkZWZpbmUgQ0tf
UFJfU1RPUkVfUyhTLCBULCBJKSBDS19QUl9TVE9SRShTLCBULCBULCBULCBJKQotCi1DS19QUl9T
VE9SRV9TKDgsIHVpbnQ4X3QsICJzdHViIikKLUNLX1BSX1NUT1JFX1MoNjQsIHVpbnQ2NF90LCAi
c3R4IikKLUNLX1BSX1NUT1JFX1MoMzIsIHVpbnQzMl90LCAic3R1dyIpCi1DS19QUl9TVE9SRV9T
KHVpbnQsIHVuc2lnbmVkIGludCwgInN0dXciKQotQ0tfUFJfU1RPUkVfUyhkb3VibGUsIGRvdWJs
ZSwgInN0eCIpCi1DS19QUl9TVE9SRV9TKGludCwgaW50LCAic3RzdyIpCi0KLSN1bmRlZiBDS19Q
Ul9TVE9SRV9TCi0jdW5kZWYgQ0tfUFJfU1RPUkUKLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29s
Ci1ja19wcl9jYXNfNjRfdmFsdWUodWludDY0X3QgKnRhcmdldCwgdWludDY0X3QgY29tcGFyZSwg
dWludDY0X3Qgc2V0LCB1aW50NjRfdCAqdmFsdWUpCi17Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVf
XygiY2FzeCBbJTFdLCAlMiwgJTAiCi0JCQkJOiAiKyZyIiAoc2V0KQotCQkJCTogInIiICAgKHRh
cmdldCksCi0JCQkJICAiciIgICAoY29tcGFyZSkKLQkJCQk6ICJtZW1vcnkiKTsKLQotCSp2YWx1
ZSA9IHNldDsKLQlyZXR1cm4gKGNvbXBhcmUgPT0gc2V0KTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0
YXRpYyBib29sCi1ja19wcl9jYXNfNjQodWludDY0X3QgKnRhcmdldCwgdWludDY0X3QgY29tcGFy
ZSwgdWludDY0X3Qgc2V0KQotewotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImNhc3ggWyUxXSwg
JTIsICUwIgotCQkJCTogIismciIgKHNldCkKLQkJCQk6ICJyIiAodGFyZ2V0KSwKLQkJCQkgICJy
IiAoY29tcGFyZSkKLQkJCQk6ICJtZW1vcnkiKTsKLQotCXJldHVybiAoY29tcGFyZSA9PSBzZXQp
OwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wKLWNrX3ByX2Nhc19wdHIodm9pZCAqdGFy
Z2V0LCB2b2lkICpjb21wYXJlLCB2b2lkICpzZXQpCi17Ci0KLQlyZXR1cm4gY2tfcHJfY2FzXzY0
KHRhcmdldCwgKHVpbnQ2NF90KWNvbXBhcmUsICh1aW50NjRfdClzZXQpOwotfQotCi1DS19DQ19J
TkxJTkUgc3RhdGljIGJvb2wKLWNrX3ByX2Nhc19wdHJfdmFsdWUodm9pZCAqdGFyZ2V0LCB2b2lk
ICpjb21wYXJlLCB2b2lkICpzZXQsIHZvaWQgKnByZXZpb3VzKQotewotCi0JcmV0dXJuIGNrX3By
X2Nhc182NF92YWx1ZSh0YXJnZXQsICh1aW50NjRfdCljb21wYXJlLCAodWludDY0X3Qpc2V0LCBw
cmV2aW91cyk7Ci19Ci0KLSNkZWZpbmUgQ0tfUFJfQ0FTKE4sIFQpCQkJCQkJCVwKLQlDS19DQ19J
TkxJTkUgc3RhdGljIGJvb2wJCQkJCVwKLQlja19wcl9jYXNfIyNOIyNfdmFsdWUoVCAqdGFyZ2V0
LCBUIGNvbXBhcmUsIFQgc2V0LCBUICp2YWx1ZSkJXAotCXsJCQkJCQkJCVwKLQkJX19hc21fXyBf
X3ZvbGF0aWxlX18oImNhcyBbJTFdLCAlMiwgJTAiCQkJXAotCQkJCQk6ICIrJnIiIChzZXQpCQkJ
XAotCQkJCQk6ICJyIiAgICh0YXJnZXQpLAkJXAotCQkJCQkgICJyIiAgIChjb21wYXJlKQkJXAot
CQkJCQk6ICJtZW1vcnkiKTsJCQlcCi0JCSp2YWx1ZSA9IHNldDsJCQkJCQlcCi0JCXJldHVybiAo
Y29tcGFyZSA9PSBzZXQpOwkJCQlcCi0JfSAJCQkJCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGlj
IGJvb2wJCQkJCVwKLQlja19wcl9jYXNfIyNOKFQgKnRhcmdldCwgVCBjb21wYXJlLCBUIHNldCkJ
CQlcCi0JewkJCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FzIFslMV0sICUyLCAl
MCIJCQlcCi0JCQkJCTogIismciIgKHNldCkJCQlcCi0JCQkJCTogInIiICh0YXJnZXQpLAkJCVwK
LQkJCQkJICAiciIgKGNvbXBhcmUpCQkJXAotCQkJCQk6ICJtZW1vcnkiKTsJCQlcCi0JCXJldHVy
biAoY29tcGFyZSA9PSBzZXQpOwkJCQlcCi0JfQotCi1DS19QUl9DQVMoMzIsIHVpbnQzMl90KQot
Q0tfUFJfQ0FTKHVpbnQsIHVuc2lnbmVkIGludCkKLUNLX1BSX0NBUyhpbnQsIGludCkKLQotI3Vu
ZGVmIENLX1BSX0NBUwotCi0jZGVmaW5lIENLX1BSX0ZBUyhOLCBUKQkJCQkJCVwKLQlDS19DQ19J
TkxJTkUgc3RhdGljIFQgCQkJCQlcCi0JY2tfcHJfZmFzXyMjTihUICp0YXJnZXQsIFQgdXBkYXRl
KQkJCVwKLQl7CQkJCQkJCVwKLQkJCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3dh
cCBbJTFdLCAlMCIJCVwKLQkJCQkJOiAiKyZyIiAodXBkYXRlKQlcCi0JCQkJCTogInIiICAgKHRh
cmdldCkJXAotCQkJCQk6ICJtZW1vcnkiKTsJCVwKLQkJcmV0dXJuICh1cGRhdGUpOwkJCQlcCi0J
fQotCi1DS19QUl9GQVMoaW50LCBpbnQpCi1DS19QUl9GQVModWludCwgdW5zaWduZWQgaW50KQot
Q0tfUFJfRkFTKDMyLCB1aW50MzJfdCkKLQotI3VuZGVmIENLX1BSX0ZBUwotCi0jZW5kaWYgLyog
Q0tfUFJfU1BBUkNWOV9IICovCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2NrL2luY2x1ZGUvZ2NjL3g4Ni9ja19mX3ByLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy94ODYvY2tfZl9wci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmODJjNjZiMDAzNzFkM2RiMDc1YWU0MTM1YjExZmYzMTg4ZjU0ODk4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvZ2NjL3g4Ni9ja19mX3ByLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyogRE8gTk9UIEVESVQuIFRoaXMgaXMgYXV0by1nZW5l
cmF0ZWQgZnJvbSBmZWF0dXJlLnNoICovCi0jZGVmaW5lIENLX0ZfUFJfQUREXzE2Ci0jZGVmaW5l
IENLX0ZfUFJfQUREXzMyCi0jZGVmaW5lIENLX0ZfUFJfQUREXzgKLSNkZWZpbmUgQ0tfRl9QUl9B
RERfQ0hBUgotI2RlZmluZSBDS19GX1BSX0FERF9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9BRERfUFRS
Ci0jZGVmaW5lIENLX0ZfUFJfQUREX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9BTkRfMTYKLSNkZWZp
bmUgQ0tfRl9QUl9BTkRfMzIKLSNkZWZpbmUgQ0tfRl9QUl9BTkRfOAotI2RlZmluZSBDS19GX1BS
X0FORF9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfQU5EX0lOVAotI2RlZmluZSBDS19GX1BSX0FORF9Q
VFIKLSNkZWZpbmUgQ0tfRl9QUl9BTkRfVUlOVAotI2RlZmluZSBDS19GX1BSX0JUQ18xNgotI2Rl
ZmluZSBDS19GX1BSX0JUQ18zMgotI2RlZmluZSBDS19GX1BSX0JUQ19JTlQKLSNkZWZpbmUgQ0tf
Rl9QUl9CVENfUFRSCi0jZGVmaW5lIENLX0ZfUFJfQlRDX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9C
VFJfMTYKLSNkZWZpbmUgQ0tfRl9QUl9CVFJfMzIKLSNkZWZpbmUgQ0tfRl9QUl9CVFJfSU5UCi0j
ZGVmaW5lIENLX0ZfUFJfQlRSX1BUUgotI2RlZmluZSBDS19GX1BSX0JUUl9VSU5UCi0jZGVmaW5l
IENLX0ZfUFJfQlRTXzE2Ci0jZGVmaW5lIENLX0ZfUFJfQlRTXzMyCi0jZGVmaW5lIENLX0ZfUFJf
QlRTX0lOVAotI2RlZmluZSBDS19GX1BSX0JUU19QVFIKLSNkZWZpbmUgQ0tfRl9QUl9CVFNfVUlO
VAotI2RlZmluZSBDS19GX1BSX0NBU18xNgotI2RlZmluZSBDS19GX1BSX0NBU18xNl9WQUxVRQot
I2RlZmluZSBDS19GX1BSX0NBU18zMgotI2RlZmluZSBDS19GX1BSX0NBU18zMl9WQUxVRQotI2Rl
ZmluZSBDS19GX1BSX0NBU184Ci0jZGVmaW5lIENLX0ZfUFJfQ0FTXzhfVkFMVUUKLSNkZWZpbmUg
Q0tfRl9QUl9DQVNfQ0hBUgotI2RlZmluZSBDS19GX1BSX0NBU19DSEFSX1ZBTFVFCi0jZGVmaW5l
IENLX0ZfUFJfQ0FTX0lOVAotI2RlZmluZSBDS19GX1BSX0NBU19JTlRfVkFMVUUKLSNkZWZpbmUg
Q0tfRl9QUl9DQVNfUFRSCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX1BUUl9WQUxVRQotI2RlZmluZSBD
S19GX1BSX0NBU19VSU5UCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX1VJTlRfVkFMVUUKLSNkZWZpbmUg
Q0tfRl9QUl9ERUNfMTYKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfMTZfWkVSTwotI2RlZmluZSBDS19G
X1BSX0RFQ18zMgotI2RlZmluZSBDS19GX1BSX0RFQ18zMl9aRVJPCi0jZGVmaW5lIENLX0ZfUFJf
REVDXzgKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfOF9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfREVDX0NI
QVIKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfQ0hBUl9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfREVDX0lO
VAotI2RlZmluZSBDS19GX1BSX0RFQ19JTlRfWkVSTwotI2RlZmluZSBDS19GX1BSX0RFQ19QVFIK
LSNkZWZpbmUgQ0tfRl9QUl9ERUNfUFRSX1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9ERUNfVUlOVAot
I2RlZmluZSBDS19GX1BSX0RFQ19VSU5UX1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9GQUFfMTYKLSNk
ZWZpbmUgQ0tfRl9QUl9GQUFfMzIKLSNkZWZpbmUgQ0tfRl9QUl9GQUFfOAotI2RlZmluZSBDS19G
X1BSX0ZBQV9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfRkFBX0lOVAotI2RlZmluZSBDS19GX1BSX0ZB
QV9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9GQUFfVUlOVAotI2RlZmluZSBDS19GX1BSX0ZBU18xNgot
I2RlZmluZSBDS19GX1BSX0ZBU18zMgotI2RlZmluZSBDS19GX1BSX0ZBU184Ci0jZGVmaW5lIENL
X0ZfUFJfRkFTX0NIQVIKLSNkZWZpbmUgQ0tfRl9QUl9GQVNfSU5UCi0jZGVmaW5lIENLX0ZfUFJf
RkFTX1BUUgotI2RlZmluZSBDS19GX1BSX0ZBU19VSU5UCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0Vf
TE9BRAotI2RlZmluZSBDS19GX1BSX0ZFTkNFX0xPQURfREVQRU5EUwotI2RlZmluZSBDS19GX1BS
X0ZFTkNFX01FTU9SWQotI2RlZmluZSBDS19GX1BSX0ZFTkNFX1NUT1JFCi0jZGVmaW5lIENLX0Zf
UFJfRkVOQ0VfU1RSSUNUX0xPQUQKLSNkZWZpbmUgQ0tfRl9QUl9GRU5DRV9TVFJJQ1RfTE9BRF9E
RVBFTkRTCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX01FTU9SWQotI2RlZmluZSBDS19G
X1BSX0ZFTkNFX1NUUklDVF9TVE9SRQotI2RlZmluZSBDS19GX1BSX0lOQ18xNgotI2RlZmluZSBD
S19GX1BSX0lOQ18xNl9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfSU5DXzMyCi0jZGVmaW5lIENLX0Zf
UFJfSU5DXzMyX1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9JTkNfOAotI2RlZmluZSBDS19GX1BSX0lO
Q184X1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9JTkNfQ0hBUgotI2RlZmluZSBDS19GX1BSX0lOQ19D
SEFSX1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9JTkNfSU5UCi0jZGVmaW5lIENLX0ZfUFJfSU5DX0lO
VF9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfSU5DX1BUUgotI2RlZmluZSBDS19GX1BSX0lOQ19QVFJf
WkVSTwotI2RlZmluZSBDS19GX1BSX0lOQ19VSU5UCi0jZGVmaW5lIENLX0ZfUFJfSU5DX1VJTlRf
WkVSTwotI2RlZmluZSBDS19GX1BSX0xPQURfMTYKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEXzMyCi0j
ZGVmaW5lIENLX0ZfUFJfTE9BRF84Ci0jZGVmaW5lIENLX0ZfUFJfTE9BRF9DSEFSCi0jZGVmaW5l
IENLX0ZfUFJfTE9BRF9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEX1BUUgotI2RlZmluZSBDS19G
X1BSX0xPQURfVUlOVAotI2RlZmluZSBDS19GX1BSX05FR18xNgotI2RlZmluZSBDS19GX1BSX05F
R18xNl9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfTkVHXzMyCi0jZGVmaW5lIENLX0ZfUFJfTkVHXzMy
X1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9ORUdfOAotI2RlZmluZSBDS19GX1BSX05FR184X1pFUk8K
LSNkZWZpbmUgQ0tfRl9QUl9ORUdfQ0hBUgotI2RlZmluZSBDS19GX1BSX05FR19DSEFSX1pFUk8K
LSNkZWZpbmUgQ0tfRl9QUl9ORUdfSU5UCi0jZGVmaW5lIENLX0ZfUFJfTkVHX0lOVF9aRVJPCi0j
ZGVmaW5lIENLX0ZfUFJfTkVHX1BUUgotI2RlZmluZSBDS19GX1BSX05FR19QVFJfWkVSTwotI2Rl
ZmluZSBDS19GX1BSX05FR19VSU5UCi0jZGVmaW5lIENLX0ZfUFJfTkVHX1VJTlRfWkVSTwotI2Rl
ZmluZSBDS19GX1BSX05PVF8xNgotI2RlZmluZSBDS19GX1BSX05PVF8zMgotI2RlZmluZSBDS19G
X1BSX05PVF84Ci0jZGVmaW5lIENLX0ZfUFJfTk9UX0NIQVIKLSNkZWZpbmUgQ0tfRl9QUl9OT1Rf
SU5UCi0jZGVmaW5lIENLX0ZfUFJfTk9UX1BUUgotI2RlZmluZSBDS19GX1BSX05PVF9VSU5UCi0j
ZGVmaW5lIENLX0ZfUFJfT1JfMTYKLSNkZWZpbmUgQ0tfRl9QUl9PUl8zMgotI2RlZmluZSBDS19G
X1BSX09SXzgKLSNkZWZpbmUgQ0tfRl9QUl9PUl9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfT1JfSU5U
Ci0jZGVmaW5lIENLX0ZfUFJfT1JfUFRSCi0jZGVmaW5lIENLX0ZfUFJfT1JfVUlOVAotI2RlZmlu
ZSBDS19GX1BSX1NUQUxMCi0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfMTYKLSNkZWZpbmUgQ0tfRl9Q
Ul9TVE9SRV8zMgotI2RlZmluZSBDS19GX1BSX1NUT1JFXzgKLSNkZWZpbmUgQ0tfRl9QUl9TVE9S
RV9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfSU5UCi0jZGVmaW5lIENLX0ZfUFJfU1RPUkVf
UFRSCi0jZGVmaW5lIENLX0ZfUFJfU1RPUkVfVUlOVAotI2RlZmluZSBDS19GX1BSX1NVQl8xNgot
I2RlZmluZSBDS19GX1BSX1NVQl8zMgotI2RlZmluZSBDS19GX1BSX1NVQl84Ci0jZGVmaW5lIENL
X0ZfUFJfU1VCX0NIQVIKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfSU5UCi0jZGVmaW5lIENLX0ZfUFJf
U1VCX1BUUgotI2RlZmluZSBDS19GX1BSX1NVQl9VSU5UCi0jZGVmaW5lIENLX0ZfUFJfWE9SXzE2
Ci0jZGVmaW5lIENLX0ZfUFJfWE9SXzMyCi0jZGVmaW5lIENLX0ZfUFJfWE9SXzgKLSNkZWZpbmUg
Q0tfRl9QUl9YT1JfQ0hBUgotI2RlZmluZSBDS19GX1BSX1hPUl9JTlQKLSNkZWZpbmUgQ0tfRl9Q
Ul9YT1JfUFRSCi0jZGVmaW5lIENLX0ZfUFJfWE9SX1VJTlQKLQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MveDg2L2NrX3ByLmggYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy94ODYvY2tfcHIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA0Y2ViZmQwMzM3OGE4NDRjMGY4NWIxOThlYzI0
OTM0OTEwYWZkNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy94ODYvY2tfcHIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDM5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDkt
MjAxNSBTYW15IEFsIEJhaHJhLgotICogQ29weXJpZ2h0IDIwMTEgRGV2b24gSC4gTydEZWxsIDxk
ZXZvbi5vZGVsbEBnbWFpbC5jb20+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgQ0tfUFJfWDg2X0gKLSNkZWZpbmUgQ0tfUFJfWDg2X0gKLQotI2lmbmRlZiBDS19QUl9ICi0j
ZXJyb3IgRG8gbm90IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LCB1c2UgY2tfcHIuaAotI2Vu
ZGlmCi0KLSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNrX21kLmg+Ci0jaW5jbHVkZSA8
Y2tfc3RkaW50Lmg+Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIHJlcHJlc2VudCBzdXBwb3J0ZWQg
YXRvbWljIG9wZXJhdGlvbnMuCi0gKiBUaGVzZSBvcGVyYXRpb25zIG1heSBiZSBlbXVsYXRlZC4K
LSAqLwotI2luY2x1ZGUgImNrX2ZfcHIuaCIKLQotLyogTWluaW11bSByZXF1aXJlbWVudHMgZm9y
IHRoZSBDS19QUiBpbnRlcmZhY2UgYXJlIG1ldC4gKi8KLSNkZWZpbmUgQ0tfRl9QUgotCi0jaWZk
ZWYgQ0tfTURfVU1QCi0jZGVmaW5lIENLX1BSX0xPQ0tfUFJFRklYCi0jZWxzZQotI2RlZmluZSBD
S19QUl9MT0NLX1BSRUZJWCAibG9jayAiCi0jZW5kaWYKLQotLyoKLSAqIFByZXZlbnQgc3BlY3Vs
YXRpdmUgZXhlY3V0aW9uIGluIGJ1c3ktd2FpdCBsb29wcyAoUDQgPD0pCi0gKiBvciAicHJlZGVm
aW5lZCBkZWxheSIuCi0gKi8KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfcHJfc3RhbGwo
dm9pZCkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGF1c2UiIDo6OiAibWVtb3J5Iik7Ci0J
cmV0dXJuOwotfQotCi0jZGVmaW5lIENLX1BSX0ZFTkNFKFQsIEkpCQkJCVwKLQlDS19DQ19JTkxJ
TkUgc3RhdGljIHZvaWQJCQlcCi0JY2tfcHJfZmVuY2Vfc3RyaWN0XyMjVCh2b2lkKQkJCVwKLQl7
CQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhJIDo6OiAibWVtb3J5Iik7CVwKLQl9Ci0K
LUNLX1BSX0ZFTkNFKGF0b21pYywgInNmZW5jZSIpCi1DS19QUl9GRU5DRShhdG9taWNfc3RvcmUs
ICJzZmVuY2UiKQotQ0tfUFJfRkVOQ0UoYXRvbWljX2xvYWQsICJtZmVuY2UiKQotQ0tfUFJfRkVO
Q0Uoc3RvcmVfYXRvbWljLCAic2ZlbmNlIikKLUNLX1BSX0ZFTkNFKGxvYWRfYXRvbWljLCAibWZl
bmNlIikKLUNLX1BSX0ZFTkNFKGxvYWQsICJsZmVuY2UiKQotQ0tfUFJfRkVOQ0UobG9hZF9zdG9y
ZSwgIm1mZW5jZSIpCi1DS19QUl9GRU5DRShzdG9yZSwgInNmZW5jZSIpCi1DS19QUl9GRU5DRShz
dG9yZV9sb2FkLCAibWZlbmNlIikKLUNLX1BSX0ZFTkNFKG1lbW9yeSwgIm1mZW5jZSIpCi1DS19Q
Ul9GRU5DRShyZWxlYXNlLCAibWZlbmNlIikKLUNLX1BSX0ZFTkNFKGFjcXVpcmUsICJtZmVuY2Ui
KQotQ0tfUFJfRkVOQ0UoYWNxcmVsLCAibWZlbmNlIikKLUNLX1BSX0ZFTkNFKGxvY2ssICJtZmVu
Y2UiKQotQ0tfUFJfRkVOQ0UodW5sb2NrLCAibWZlbmNlIikKLQotI3VuZGVmIENLX1BSX0ZFTkNF
Ci0KLS8qCi0gKiBBdG9taWMgZmV0Y2gtYW5kLXN0b3JlIG9wZXJhdGlvbnMuCi0gKi8KLSNkZWZp
bmUgQ0tfUFJfRkFTKFMsIE0sIFQsIEMsIEkpCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIFQJ
CQkJCVwKLQlja19wcl9mYXNfIyNTKE0gKnRhcmdldCwgVCB2KQkJCQlcCi0JewkJCQkJCQlcCi0J
CV9fYXNtX18gX192b2xhdGlsZV9fKEkgIiAlMCwgJTEiCQlcCi0JCQkJCTogIittIiAoKihDICop
dGFyZ2V0KSwJXAotCQkJCQkgICIrcSIgKHYpCQlcCi0JCQkJCToJCQlcCi0JCQkJCTogIm1lbW9y
eSIpOwkJXAotCQlyZXR1cm4gdjsJCQkJCVwKLQl9Ci0KLUNLX1BSX0ZBUyhwdHIsIHZvaWQsIHZv
aWQgKiwgY2hhciwgInhjaGdsIikKLQotI2RlZmluZSBDS19QUl9GQVNfUyhTLCBULCBJKSBDS19Q
Ul9GQVMoUywgVCwgVCwgVCwgSSkKLQotQ0tfUFJfRkFTX1MoY2hhciwgY2hhciwgInhjaGdiIikK
LUNLX1BSX0ZBU19TKHVpbnQsIHVuc2lnbmVkIGludCwgInhjaGdsIikKLUNLX1BSX0ZBU19TKGlu
dCwgaW50LCAieGNoZ2wiKQotQ0tfUFJfRkFTX1MoMzIsIHVpbnQzMl90LCAieGNoZ2wiKQotQ0tf
UFJfRkFTX1MoMTYsIHVpbnQxNl90LCAieGNoZ3ciKQotQ0tfUFJfRkFTX1MoOCwgIHVpbnQ4X3Qs
ICAieGNoZ2IiKQotCi0jdW5kZWYgQ0tfUFJfRkFTX1MKLSN1bmRlZiBDS19QUl9GQVMKLQotI2Rl
ZmluZSBDS19QUl9MT0FEKFMsIE0sIFQsIEMsIEkpCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRp
YyBUCQkJCQkJXAotCWNrX3ByX21kX2xvYWRfIyNTKGNvbnN0IE0gKnRhcmdldCkJCQkJXAotCXsJ
CQkJCQkJCVwKLQkJVCByOwkJCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKEkgIiAlMSwg
JTAiCQkJXAotCQkJCQk6ICI9cSIgKHIpCQkJXAotCQkJCQk6ICJtIiAgKCooY29uc3QgQyAqKXRh
cmdldCkJXAotCQkJCQk6ICJtZW1vcnkiKTsJCQlcCi0JCXJldHVybiAocik7CQkJCQkJXAotCX0K
LQotQ0tfUFJfTE9BRChwdHIsIHZvaWQsIHZvaWQgKiwgY2hhciwgIm1vdmwiKQotCi0jZGVmaW5l
IENLX1BSX0xPQURfUyhTLCBULCBJKSBDS19QUl9MT0FEKFMsIFQsIFQsIFQsIEkpCi0KLUNLX1BS
X0xPQURfUyhjaGFyLCBjaGFyLCAibW92YiIpCi1DS19QUl9MT0FEX1ModWludCwgdW5zaWduZWQg
aW50LCAibW92bCIpCi1DS19QUl9MT0FEX1MoaW50LCBpbnQsICJtb3ZsIikKLUNLX1BSX0xPQURf
UygzMiwgdWludDMyX3QsICJtb3ZsIikKLUNLX1BSX0xPQURfUygxNiwgdWludDE2X3QsICJtb3Z3
IikKLUNLX1BSX0xPQURfUyg4LCAgdWludDhfdCwgICJtb3ZiIikKLQotI3VuZGVmIENLX1BSX0xP
QURfUwotI3VuZGVmIENLX1BSX0xPQUQKLQotI2RlZmluZSBDS19QUl9TVE9SRShTLCBNLCBULCBD
LCBJKQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJCVwKLQlja19wcl9tZF9zdG9y
ZV8jI1MoTSAqdGFyZ2V0LCBUIHYpCQkJXAotCXsJCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRp
bGVfXyhJICIgJTEsICUwIgkJXAotCQkJCQk6ICI9bSIgKCooQyAqKXRhcmdldCkJXAotCQkJCQk6
IENLX0NDX0lNTSAicSIgKHYpCVwKLQkJCQkJOiAibWVtb3J5Iik7CQlcCi0JCXJldHVybjsJCQkJ
CQlcCi0JfQotCi1DS19QUl9TVE9SRShwdHIsIHZvaWQsIGNvbnN0IHZvaWQgKiwgY2hhciwgIm1v
dmwiKQotCi0jZGVmaW5lIENLX1BSX1NUT1JFX1MoUywgVCwgSSkgQ0tfUFJfU1RPUkUoUywgVCwg
VCwgVCwgSSkKLQotQ0tfUFJfU1RPUkVfUyhjaGFyLCBjaGFyLCAibW92YiIpCi1DS19QUl9TVE9S
RV9TKHVpbnQsIHVuc2lnbmVkIGludCwgIm1vdmwiKQotQ0tfUFJfU1RPUkVfUyhpbnQsIGludCwg
Im1vdmwiKQotQ0tfUFJfU1RPUkVfUygzMiwgdWludDMyX3QsICJtb3ZsIikKLUNLX1BSX1NUT1JF
X1MoMTYsIHVpbnQxNl90LCAibW92dyIpCi1DS19QUl9TVE9SRV9TKDgsICB1aW50OF90LCAibW92
YiIpCi0KLSN1bmRlZiBDS19QUl9TVE9SRV9TCi0jdW5kZWYgQ0tfUFJfU1RPUkUKLQotLyoKLSAq
IEF0b21pYyBmZXRjaC1hbmQtYWRkIG9wZXJhdGlvbnMuCi0gKi8KLSNkZWZpbmUgQ0tfUFJfRkFB
KFMsIE0sIFQsIEMsIEkpCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyBUCQkJCQkJXAotCWNr
X3ByX2ZhYV8jI1MoTSAqdGFyZ2V0LCBUIGQpCQkJCQlcCi0JewkJCQkJCQkJXAotCQlfX2FzbV9f
IF9fdm9sYXRpbGVfXyhDS19QUl9MT0NLX1BSRUZJWCBJICIgJTEsICUwIglcCi0JCQkJCTogIitt
IiAoKihDICopdGFyZ2V0KSwJCVwKLQkJCQkJICAiK3EiIChkKQkJCVwKLQkJCQkJOgkJCQlcCi0J
CQkJCTogIm1lbW9yeSIsICJjYyIpOwkJXAotCQlyZXR1cm4gKGQpOwkJCQkJCVwKLQl9Ci0KLUNL
X1BSX0ZBQShwdHIsIHZvaWQsIHVpbnRwdHJfdCwgY2hhciwgInhhZGRsIikKLQotI2RlZmluZSBD
S19QUl9GQUFfUyhTLCBULCBJKSBDS19QUl9GQUEoUywgVCwgVCwgVCwgSSkKLQotQ0tfUFJfRkFB
X1MoY2hhciwgY2hhciwgInhhZGRiIikKLUNLX1BSX0ZBQV9TKHVpbnQsIHVuc2lnbmVkIGludCwg
InhhZGRsIikKLUNLX1BSX0ZBQV9TKGludCwgaW50LCAieGFkZGwiKQotQ0tfUFJfRkFBX1MoMzIs
IHVpbnQzMl90LCAieGFkZGwiKQotQ0tfUFJfRkFBX1MoMTYsIHVpbnQxNl90LCAieGFkZHciKQot
Q0tfUFJfRkFBX1MoOCwgIHVpbnQ4X3QsICAieGFkZGIiKQotCi0jdW5kZWYgQ0tfUFJfRkFBX1MK
LSN1bmRlZiBDS19QUl9GQUEKLQotLyoKLSAqIEF0b21pYyBzdG9yZS1vbmx5IHVuYXJ5IG9wZXJh
dGlvbnMuCi0gKi8KLSNkZWZpbmUgQ0tfUFJfVU5BUlkoSywgUywgVCwgQywgSSkJCQkJXAotCUNL
X1BSX1VOQVJZX1IoSywgUywgVCwgQywgSSkJCQkJXAotCUNLX1BSX1VOQVJZX1YoSywgUywgVCwg
QywgSSkKLQotI2RlZmluZSBDS19QUl9VTkFSWV9SKEssIFMsIFQsIEMsIEkpCQkJCVwKLQlDS19D
Q19JTkxJTkUgc3RhdGljIHZvaWQJCQkJXAotCWNrX3ByXyMjSyMjXyMjUyhUICp0YXJnZXQpCQkJ
CVwKLQl7CQkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oQ0tfUFJfTE9DS19QUkVGSVgg
SSAiICUwIglcCi0JCQkJCTogIittIiAoKihDICopdGFyZ2V0KQlcCi0JCQkJCToJCQlcCi0JCQkJ
CTogIm1lbW9yeSIsICJjYyIpOwlcCi0JCXJldHVybjsJCQkJCQlcCi0JfQotCi0jZGVmaW5lIENL
X1BSX1VOQVJZX1YoSywgUywgVCwgQywgSSkJCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIHZv
aWQJCQkJCVwKLQlja19wcl8jI0sjI18jI1MjI196ZXJvKFQgKnRhcmdldCwgYm9vbCAqcikJCQlc
Ci0JewkJCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhDS19QUl9MT0NLX1BSRUZJWCBJ
ICIgJTA7IHNldHogJTEiCVwKLQkJCQkJOiAiK20iICgqKEMgKil0YXJnZXQpLAkJXAotCQkJCQkg
ICI9bSIgKCpyKQkJCVwKLQkJCQkJOgkJCQlcCi0JCQkJCTogIm1lbW9yeSIsICJjYyIpOwkJXAot
CQlyZXR1cm47CQkJCQkJCVwKLQl9Ci0KLQotI2RlZmluZSBDS19QUl9VTkFSWV9TKEssIFMsIFQs
IEkpIENLX1BSX1VOQVJZKEssIFMsIFQsIFQsIEkpCi0KLSNkZWZpbmUgQ0tfUFJfR0VORVJBVEUo
SykJCQkJXAotCUNLX1BSX1VOQVJZKEssIHB0ciwgdm9pZCwgY2hhciwgI0sgImwiKSAJXAotCUNL
X1BSX1VOQVJZX1MoSywgY2hhciwgY2hhciwgI0sgImIiKQkJXAotCUNLX1BSX1VOQVJZX1MoSywg
aW50LCBpbnQsICNLICJsIikJCVwKLQlDS19QUl9VTkFSWV9TKEssIHVpbnQsIHVuc2lnbmVkIGlu
dCwgI0sgImwiKQlcCi0JQ0tfUFJfVU5BUllfUyhLLCAzMiwgdWludDMyX3QsICNLICJsIikJCVwK
LQlDS19QUl9VTkFSWV9TKEssIDE2LCB1aW50MTZfdCwgI0sgInciKQkJXAotCUNLX1BSX1VOQVJZ
X1MoSywgOCwgdWludDhfdCwgI0sgImIiKQotCi1DS19QUl9HRU5FUkFURShpbmMpCi1DS19QUl9H
RU5FUkFURShkZWMpCi1DS19QUl9HRU5FUkFURShuZWcpCi0KLS8qIG5vdCBkb2VzIG5vdCBhZmZl
Y3QgY29uZGl0aW9uIGZsYWdzLiAqLwotI3VuZGVmIENLX1BSX1VOQVJZX1YKLSNkZWZpbmUgQ0tf
UFJfVU5BUllfVihhLCBiLCBjLCBkLCBlKQotQ0tfUFJfR0VORVJBVEUobm90KQotCi0jdW5kZWYg
Q0tfUFJfR0VORVJBVEUKLSN1bmRlZiBDS19QUl9VTkFSWV9TCi0jdW5kZWYgQ0tfUFJfVU5BUllf
VgotI3VuZGVmIENLX1BSX1VOQVJZX1IKLSN1bmRlZiBDS19QUl9VTkFSWQotCi0vKgotICogQXRv
bWljIHN0b3JlLW9ubHkgYmluYXJ5IG9wZXJhdGlvbnMuCi0gKi8KLSNkZWZpbmUgQ0tfUFJfQklO
QVJZKEssIFMsIE0sIFQsIEMsIEkpCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJ
CQlcCi0JY2tfcHJfIyNLIyNfIyNTKE0gKnRhcmdldCwgVCBkKQkJCQkJXAotCXsJCQkJCQkJCVwK
LQkJX19hc21fXyBfX3ZvbGF0aWxlX18oQ0tfUFJfTE9DS19QUkVGSVggSSAiICUxLCAlMCIJXAot
CQkJCQk6ICIrbSIgKCooQyAqKXRhcmdldCkJCVwKLQkJCQkJOiBDS19DQ19JTU0gInEiIChkKQkJ
XAotCQkJCQk6ICJtZW1vcnkiLCAiY2MiKTsJCVwKLQkJcmV0dXJuOwkJCQkJCQlcCi0JfQotCi0j
ZGVmaW5lIENLX1BSX0JJTkFSWV9TKEssIFMsIFQsIEkpIENLX1BSX0JJTkFSWShLLCBTLCBULCBU
LCBULCBJKQotCi0jZGVmaW5lIENLX1BSX0dFTkVSQVRFKEspCQkJCQlcCi0JQ0tfUFJfQklOQVJZ
KEssIHB0ciwgdm9pZCwgdWludHB0cl90LCBjaGFyLCAjSyAibCIpCVwKLQlDS19QUl9CSU5BUllf
UyhLLCBjaGFyLCBjaGFyLCAjSyAiYiIpCQkJXAotCUNLX1BSX0JJTkFSWV9TKEssIGludCwgaW50
LCAjSyAibCIpCQkJXAotCUNLX1BSX0JJTkFSWV9TKEssIHVpbnQsIHVuc2lnbmVkIGludCwgI0sg
ImwiKQkJXAotCUNLX1BSX0JJTkFSWV9TKEssIDMyLCB1aW50MzJfdCwgI0sgImwiKQkJCVwKLQlD
S19QUl9CSU5BUllfUyhLLCAxNiwgdWludDE2X3QsICNLICJ3IikJCQlcCi0JQ0tfUFJfQklOQVJZ
X1MoSywgOCwgdWludDhfdCwgI0sgImIiKQotCi1DS19QUl9HRU5FUkFURShhZGQpCi1DS19QUl9H
RU5FUkFURShzdWIpCi1DS19QUl9HRU5FUkFURShhbmQpCi1DS19QUl9HRU5FUkFURShvcikKLUNL
X1BSX0dFTkVSQVRFKHhvcikKLQotI3VuZGVmIENLX1BSX0dFTkVSQVRFCi0jdW5kZWYgQ0tfUFJf
QklOQVJZX1MKLSN1bmRlZiBDS19QUl9CSU5BUlkKLQotLyoKLSAqIEF0b21pYyBjb21wYXJlIGFu
ZCBzd2FwLgotICovCi0jZGVmaW5lIENLX1BSX0NBUyhTLCBNLCBULCBDLCBJKQkJCQkJCVwKLQlD
S19DQ19JTkxJTkUgc3RhdGljIGJvb2wJCQkJCQlcCi0JY2tfcHJfY2FzXyMjUyhNICp0YXJnZXQs
IFQgY29tcGFyZSwgVCBzZXQpCQkJCVwKLQl7CQkJCQkJCQkJXAotCQlib29sIHo7CQkJCQkJCQlc
Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKENLX1BSX0xPQ0tfUFJFRklYIEkgIiAlMiwgJTA7IHNl
dHogJTEiCVwKLQkJCQkJOiAiK20iICAoKihDICopdGFyZ2V0KSwJCQlcCi0JCQkJCSAgIj1hIiAg
KHopCQkJCVwKLQkJCQkJOiAicSIgICAoc2V0KSwJCQkJXAotCQkJCQkgICJhIiAgIChjb21wYXJl
KQkJCVwKLQkJCQkJOiAibWVtb3J5IiwgImNjIik7CQkJXAotCQlyZXR1cm4gejsJCQkJCQkJXAot
CX0KLQotQ0tfUFJfQ0FTKHB0ciwgdm9pZCwgdm9pZCAqLCBjaGFyLCAiY21weGNoZ2wiKQotCi0j
ZGVmaW5lIENLX1BSX0NBU19TKFMsIFQsIEkpIENLX1BSX0NBUyhTLCBULCBULCBULCBJKQotCi1D
S19QUl9DQVNfUyhjaGFyLCBjaGFyLCAiY21weGNoZ2IiKQotQ0tfUFJfQ0FTX1MoaW50LCBpbnQs
ICJjbXB4Y2hnbCIpCi1DS19QUl9DQVNfUyh1aW50LCB1bnNpZ25lZCBpbnQsICJjbXB4Y2hnbCIp
Ci1DS19QUl9DQVNfUygzMiwgdWludDMyX3QsICJjbXB4Y2hnbCIpCi1DS19QUl9DQVNfUygxNiwg
dWludDE2X3QsICJjbXB4Y2hndyIpCi1DS19QUl9DQVNfUyg4LCAgdWludDhfdCwgICJjbXB4Y2hn
YiIpCi0KLSN1bmRlZiBDS19QUl9DQVNfUwotI3VuZGVmIENLX1BSX0NBUwotCi0vKgotICogQ29t
cGFyZSBhbmQgc3dhcCwgc2V0ICp2IHRvIG9sZCB2YWx1ZSBvZiB0YXJnZXQuCi0gKi8KLSNkZWZp
bmUgQ0tfUFJfQ0FTX08oUywgTSwgVCwgQywgSSwgUikJCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0
YXRpYyBib29sCQkJCQkJXAotCWNrX3ByX2Nhc18jI1MjI192YWx1ZShNICp0YXJnZXQsIFQgY29t
cGFyZSwgVCBzZXQsIE0gKnYpCQlcCi0JewkJCQkJCQkJCVwKLQkJYm9vbCB6OwkJCQkJCQkJXAot
CQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhDS19QUl9MT0NLX1BSRUZJWCAiY21weGNoZyIgSSAiICUz
LCAlMDsiCVwKLQkJCQkgICAgICJtb3YgJSUgIiBSICIsICUyOyIJCQlcCi0JCQkJICAgICAic2V0
eiAlMTsiCQkJCQlcCi0JCQkJCTogIittIiAgKCooQyAqKXRhcmdldCksCQkJXAotCQkJCQkgICI9
YSIgICh6KSwJCQkJXAotCQkJCQkgICI9bSIgICgqKEMgKil2KQkJCVwKLQkJCQkJOiAicSIgICAo
c2V0KSwJCQkJXAotCQkJCQkgICJhIiAgIChjb21wYXJlKQkJCVwKLQkJCQkJOiAibWVtb3J5Iiwg
ImNjIik7CQkJXAotCQlyZXR1cm4gKGJvb2wpejsJCQkJCQkJXAotCX0KLQotQ0tfUFJfQ0FTX08o
cHRyLCB2b2lkLCB2b2lkICosIGNoYXIsICJsIiwgImVheCIpCi0KLSNkZWZpbmUgQ0tfUFJfQ0FT
X09fUyhTLCBULCBJLCBSKQlcCi0JQ0tfUFJfQ0FTX08oUywgVCwgVCwgVCwgSSwgUikKLQotQ0tf
UFJfQ0FTX09fUyhjaGFyLCBjaGFyLCAiYiIsICJhbCIpCi1DS19QUl9DQVNfT19TKGludCwgaW50
LCAibCIsICJlYXgiKQotQ0tfUFJfQ0FTX09fUyh1aW50LCB1bnNpZ25lZCBpbnQsICJsIiwgImVh
eCIpCi1DS19QUl9DQVNfT19TKDMyLCB1aW50MzJfdCwgImwiLCAiZWF4IikKLUNLX1BSX0NBU19P
X1MoMTYsIHVpbnQxNl90LCAidyIsICJheCIpCi1DS19QUl9DQVNfT19TKDgsICB1aW50OF90LCAg
ImIiLCAiYWwiKQotCi0jdW5kZWYgQ0tfUFJfQ0FTX09fUwotI3VuZGVmIENLX1BSX0NBU19PCi0K
LS8qCi0gKiBBdG9taWMgYml0IHRlc3Qgb3BlcmF0aW9ucy4KLSAqLwotI2RlZmluZSBDS19QUl9C
VChLLCBTLCBULCBQLCBDLCBJKQkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAkJCQkJ
XAotCWNrX3ByXyMjSyMjXyMjUyhUICp0YXJnZXQsIHVuc2lnbmVkIGludCBiKQkJCVwKLQl7CQkJ
CQkJCQlcCi0JCWJvb2wgYzsJCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhDS19QUl9M
T0NLX1BSRUZJWCBJICI7IHNldGMgJTEiCVwKLQkJCQkJOiAiK20iICgqKEMgKil0YXJnZXQpLAkJ
XAotCQkJCQkgICI9cSIgKGMpCQkJXAotCQkJCQk6ICJxIiAgKChQKWIpCQkJXAotCQkJCQk6ICJt
ZW1vcnkiLCAiY2MiKTsJCVwKLQkJcmV0dXJuIChib29sKWM7CQkJCQkJXAotCX0KLQotI2RlZmlu
ZSBDS19QUl9CVF9TKEssIFMsIFQsIEkpIENLX1BSX0JUKEssIFMsIFQsIFQsIFQsIEkpCi0KLSNk
ZWZpbmUgQ0tfUFJfR0VORVJBVEUoSykJCQkJCVwKLQlDS19QUl9CVChLLCBwdHIsIHZvaWQsIHVp
bnQzMl90LCBjaGFyLCAjSyAibCAlMiwgJTAiKQlcCi0JQ0tfUFJfQlRfUyhLLCB1aW50LCB1bnNp
Z25lZCBpbnQsICNLICJsICUyLCAlMCIpCVwKLQlDS19QUl9CVF9TKEssIGludCwgaW50LCAjSyAi
bCAlMiwgJTAiKQkJCVwKLQlDS19QUl9CVF9TKEssIDMyLCB1aW50MzJfdCwgI0sgImwgJTIsICUw
IikJCVwKLQlDS19QUl9CVF9TKEssIDE2LCB1aW50MTZfdCwgI0sgIncgJXcyLCAlMCIpCi0KLUNL
X1BSX0dFTkVSQVRFKGJ0YykKLUNLX1BSX0dFTkVSQVRFKGJ0cykKLUNLX1BSX0dFTkVSQVRFKGJ0
cikKLQotI3VuZGVmIENLX1BSX0dFTkVSQVRFCi0jdW5kZWYgQ0tfUFJfQlQKLQotI2VuZGlmIC8q
IENLX1BSX1g4Nl9IICovCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL2luY2x1ZGUvZ2NjL3g4Nl82NC9ja19mX3ByLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9pbmNsdWRlL2djYy94ODZfNjQvY2tfZl9wci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1NDVmNWZkNmQzYTI0YjNhMzgwMWJiNDE5NWZmNDExNjQ5ZWMyYWFl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvZ2NjL3g4Nl82NC9ja19mX3ByLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyogRE8gTk9UIEVESVQuIFRoaXMgaXMgYXV0
by1nZW5lcmF0ZWQgZnJvbSBmZWF0dXJlLnNoICovCi0jZGVmaW5lIENLX0ZfUFJfQUREXzE2Ci0j
ZGVmaW5lIENLX0ZfUFJfQUREXzMyCi0jZGVmaW5lIENLX0ZfUFJfQUREXzY0Ci0jZGVmaW5lIENL
X0ZfUFJfQUREXzgKLSNkZWZpbmUgQ0tfRl9QUl9BRERfQ0hBUgotI2RlZmluZSBDS19GX1BSX0FE
RF9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9BRERfUFRSCi0jZGVmaW5lIENLX0ZfUFJfQUREX1VJTlQK
LSNkZWZpbmUgQ0tfRl9QUl9BTkRfMTYKLSNkZWZpbmUgQ0tfRl9QUl9BTkRfMzIKLSNkZWZpbmUg
Q0tfRl9QUl9BTkRfNjQKLSNkZWZpbmUgQ0tfRl9QUl9BTkRfOAotI2RlZmluZSBDS19GX1BSX0FO
RF9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfQU5EX0lOVAotI2RlZmluZSBDS19GX1BSX0FORF9QVFIK
LSNkZWZpbmUgQ0tfRl9QUl9BTkRfVUlOVAotI2RlZmluZSBDS19GX1BSX0JUQ18xNgotI2RlZmlu
ZSBDS19GX1BSX0JUQ18zMgotI2RlZmluZSBDS19GX1BSX0JUQ182NAotI2RlZmluZSBDS19GX1BS
X0JUQ19JTlQKLSNkZWZpbmUgQ0tfRl9QUl9CVENfUFRSCi0jZGVmaW5lIENLX0ZfUFJfQlRDX1VJ
TlQKLSNkZWZpbmUgQ0tfRl9QUl9CVFJfMTYKLSNkZWZpbmUgQ0tfRl9QUl9CVFJfMzIKLSNkZWZp
bmUgQ0tfRl9QUl9CVFJfNjQKLSNkZWZpbmUgQ0tfRl9QUl9CVFJfSU5UCi0jZGVmaW5lIENLX0Zf
UFJfQlRSX1BUUgotI2RlZmluZSBDS19GX1BSX0JUUl9VSU5UCi0jZGVmaW5lIENLX0ZfUFJfQlRT
XzE2Ci0jZGVmaW5lIENLX0ZfUFJfQlRTXzMyCi0jZGVmaW5lIENLX0ZfUFJfQlRTXzY0Ci0jZGVm
aW5lIENLX0ZfUFJfQlRTX0lOVAotI2RlZmluZSBDS19GX1BSX0JUU19QVFIKLSNkZWZpbmUgQ0tf
Rl9QUl9CVFNfVUlOVAotI2RlZmluZSBDS19GX1BSX0NBU18xNgotI2RlZmluZSBDS19GX1BSX0NB
U18xNl84Ci0jZGVmaW5lIENLX0ZfUFJfQ0FTXzE2XzhfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9D
QVNfMTZfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfMzIKLSNkZWZpbmUgQ0tfRl9QUl9DQVNf
MzJfNAotI2RlZmluZSBDS19GX1BSX0NBU18zMl80X1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FT
XzMyX1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTXzY0Ci0jZGVmaW5lIENLX0ZfUFJfQ0FTXzY0
XzIKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfNjRfMl9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU182
NF9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU184Ci0jZGVmaW5lIENLX0ZfUFJfQ0FTXzhfMTYK
LSNkZWZpbmUgQ0tfRl9QUl9DQVNfOF8xNl9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU184X1ZB
TFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX0NIQVIKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfQ0hBUl8x
NgotI2RlZmluZSBDS19GX1BSX0NBU19DSEFSXzE2X1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FT
X0NIQVJfVkFMVUUKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfSU5UCi0jZGVmaW5lIENLX0ZfUFJfQ0FT
X0lOVF80Ci0jZGVmaW5lIENLX0ZfUFJfQ0FTX0lOVF80X1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJf
Q0FTX0lOVF9WQUxVRQotI2RlZmluZSBDS19GX1BSX0NBU19QVFIKLSNkZWZpbmUgQ0tfRl9QUl9D
QVNfUFRSXzIKLSNkZWZpbmUgQ0tfRl9QUl9DQVNfUFRSXzJfVkFMVUUKLSNkZWZpbmUgQ0tfRl9Q
Ul9DQVNfUFRSX1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX0RPVUJMRQotI2RlZmluZSBDS19G
X1BSX0NBU19ET1VCTEVfMgotI2RlZmluZSBDS19GX1BSX0NBU19ET1VCTEVfVkFMVUUKLSNkZWZp
bmUgQ0tfRl9QUl9DQVNfVUlOVAotI2RlZmluZSBDS19GX1BSX0NBU19VSU5UXzQKLSNkZWZpbmUg
Q0tfRl9QUl9DQVNfVUlOVF80X1ZBTFVFCi0jZGVmaW5lIENLX0ZfUFJfQ0FTX1VJTlRfVkFMVUUK
LSNkZWZpbmUgQ0tfRl9QUl9ERUNfMTYKLSNkZWZpbmUgQ0tfRl9QUl9ERUNfMTZfWkVSTwotI2Rl
ZmluZSBDS19GX1BSX0RFQ18zMgotI2RlZmluZSBDS19GX1BSX0RFQ18zMl9aRVJPCi0jZGVmaW5l
IENLX0ZfUFJfREVDXzY0Ci0jZGVmaW5lIENLX0ZfUFJfREVDXzY0X1pFUk8KLSNkZWZpbmUgQ0tf
Rl9QUl9ERUNfOAotI2RlZmluZSBDS19GX1BSX0RFQ184X1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9E
RUNfQ0hBUgotI2RlZmluZSBDS19GX1BSX0RFQ19DSEFSX1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9E
RUNfSU5UCi0jZGVmaW5lIENLX0ZfUFJfREVDX0lOVF9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfREVD
X1BUUgotI2RlZmluZSBDS19GX1BSX0RFQ19QVFJfWkVSTwotI2RlZmluZSBDS19GX1BSX0RFQ19V
SU5UCi0jZGVmaW5lIENLX0ZfUFJfREVDX1VJTlRfWkVSTwotI2RlZmluZSBDS19GX1BSX0ZBQV8x
NgotI2RlZmluZSBDS19GX1BSX0ZBQV8zMgotI2RlZmluZSBDS19GX1BSX0ZBQV82NAotI2RlZmlu
ZSBDS19GX1BSX0ZBQV84Ci0jZGVmaW5lIENLX0ZfUFJfRkFBX0NIQVIKLSNkZWZpbmUgQ0tfRl9Q
Ul9GQUFfSU5UCi0jZGVmaW5lIENLX0ZfUFJfRkFBX1BUUgotI2RlZmluZSBDS19GX1BSX0ZBQV9V
SU5UCi0jZGVmaW5lIENLX0ZfUFJfRkFTXzE2Ci0jZGVmaW5lIENLX0ZfUFJfRkFTXzMyCi0jZGVm
aW5lIENLX0ZfUFJfRkFTXzY0Ci0jZGVmaW5lIENLX0ZfUFJfRkFTXzgKLSNkZWZpbmUgQ0tfRl9Q
Ul9GQVNfQ0hBUgotI2RlZmluZSBDS19GX1BSX0ZBU19JTlQKLSNkZWZpbmUgQ0tfRl9QUl9GQVNf
UFRSCi0jZGVmaW5lIENLX0ZfUFJfRkFTX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9GQVNfRE9VQkxF
Ci0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfTE9BRAotI2RlZmluZSBDS19GX1BSX0ZFTkNFX0xPQURf
REVQRU5EUwotI2RlZmluZSBDS19GX1BSX0ZFTkNFX01FTU9SWQotI2RlZmluZSBDS19GX1BSX0ZF
TkNFX1NUT1JFCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RSSUNUX0xPQUQKLSNkZWZpbmUgQ0tf
Rl9QUl9GRU5DRV9TVFJJQ1RfTE9BRF9ERVBFTkRTCi0jZGVmaW5lIENLX0ZfUFJfRkVOQ0VfU1RS
SUNUX01FTU9SWQotI2RlZmluZSBDS19GX1BSX0ZFTkNFX1NUUklDVF9TVE9SRQotI2RlZmluZSBD
S19GX1BSX0lOQ18xNgotI2RlZmluZSBDS19GX1BSX0lOQ18xNl9aRVJPCi0jZGVmaW5lIENLX0Zf
UFJfSU5DXzMyCi0jZGVmaW5lIENLX0ZfUFJfSU5DXzMyX1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9J
TkNfNjQKLSNkZWZpbmUgQ0tfRl9QUl9JTkNfNjRfWkVSTwotI2RlZmluZSBDS19GX1BSX0lOQ184
Ci0jZGVmaW5lIENLX0ZfUFJfSU5DXzhfWkVSTwotI2RlZmluZSBDS19GX1BSX0lOQ19DSEFSCi0j
ZGVmaW5lIENLX0ZfUFJfSU5DX0NIQVJfWkVSTwotI2RlZmluZSBDS19GX1BSX0lOQ19JTlQKLSNk
ZWZpbmUgQ0tfRl9QUl9JTkNfSU5UX1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9JTkNfUFRSCi0jZGVm
aW5lIENLX0ZfUFJfSU5DX1BUUl9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfSU5DX1VJTlQKLSNkZWZp
bmUgQ0tfRl9QUl9JTkNfVUlOVF9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfTE9BRF8xNgotI2RlZmlu
ZSBDS19GX1BSX0xPQURfMTZfOAotI2RlZmluZSBDS19GX1BSX0xPQURfMzIKLSNkZWZpbmUgQ0tf
Rl9QUl9MT0FEXzMyXzQKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEXzY0Ci0jZGVmaW5lIENLX0ZfUFJf
TE9BRF82NF8yCi0jZGVmaW5lIENLX0ZfUFJfTE9BRF84Ci0jZGVmaW5lIENLX0ZfUFJfTE9BRF84
XzE2Ci0jZGVmaW5lIENLX0ZfUFJfTE9BRF9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfTE9BRF9DSEFS
XzE2Ci0jZGVmaW5lIENLX0ZfUFJfTE9BRF9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEX0lOVF80
Ci0jZGVmaW5lIENLX0ZfUFJfTE9BRF9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEX1BUUl8yCi0j
ZGVmaW5lIENLX0ZfUFJfTE9BRF9ET1VCTEUKLSNkZWZpbmUgQ0tfRl9QUl9MT0FEX1VJTlQKLSNk
ZWZpbmUgQ0tfRl9QUl9MT0FEX1VJTlRfNAotI2RlZmluZSBDS19GX1BSX05FR18xNgotI2RlZmlu
ZSBDS19GX1BSX05FR18xNl9aRVJPCi0jZGVmaW5lIENLX0ZfUFJfTkVHXzMyCi0jZGVmaW5lIENL
X0ZfUFJfTkVHXzMyX1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9ORUdfNjQKLSNkZWZpbmUgQ0tfRl9Q
Ul9ORUdfNjRfWkVSTwotI2RlZmluZSBDS19GX1BSX05FR184Ci0jZGVmaW5lIENLX0ZfUFJfTkVH
XzhfWkVSTwotI2RlZmluZSBDS19GX1BSX05FR19DSEFSCi0jZGVmaW5lIENLX0ZfUFJfTkVHX0NI
QVJfWkVSTwotI2RlZmluZSBDS19GX1BSX05FR19JTlQKLSNkZWZpbmUgQ0tfRl9QUl9ORUdfSU5U
X1pFUk8KLSNkZWZpbmUgQ0tfRl9QUl9ORUdfUFRSCi0jZGVmaW5lIENLX0ZfUFJfTkVHX1BUUl9a
RVJPCi0jZGVmaW5lIENLX0ZfUFJfTkVHX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9ORUdfVUlOVF9a
RVJPCi0jZGVmaW5lIENLX0ZfUFJfTk9UXzE2Ci0jZGVmaW5lIENLX0ZfUFJfTk9UXzMyCi0jZGVm
aW5lIENLX0ZfUFJfTk9UXzY0Ci0jZGVmaW5lIENLX0ZfUFJfTk9UXzgKLSNkZWZpbmUgQ0tfRl9Q
Ul9OT1RfQ0hBUgotI2RlZmluZSBDS19GX1BSX05PVF9JTlQKLSNkZWZpbmUgQ0tfRl9QUl9OT1Rf
UFRSCi0jZGVmaW5lIENLX0ZfUFJfTk9UX1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9PUl8xNgotI2Rl
ZmluZSBDS19GX1BSX09SXzMyCi0jZGVmaW5lIENLX0ZfUFJfT1JfNjQKLSNkZWZpbmUgQ0tfRl9Q
Ul9PUl84Ci0jZGVmaW5lIENLX0ZfUFJfT1JfQ0hBUgotI2RlZmluZSBDS19GX1BSX09SX0lOVAot
I2RlZmluZSBDS19GX1BSX09SX1BUUgotI2RlZmluZSBDS19GX1BSX09SX1VJTlQKLSNkZWZpbmUg
Q0tfRl9QUl9TVE9SRV8xNgotI2RlZmluZSBDS19GX1BSX1NUT1JFXzMyCi0jZGVmaW5lIENLX0Zf
UFJfU1RPUkVfNjQKLSNkZWZpbmUgQ0tfRl9QUl9TVE9SRV84Ci0jZGVmaW5lIENLX0ZfUFJfU1RP
UkVfQ0hBUgotI2RlZmluZSBDS19GX1BSX1NUT1JFX0lOVAotI2RlZmluZSBDS19GX1BSX1NUT1JF
X0RPVUJMRQotI2RlZmluZSBDS19GX1BSX1NUT1JFX1BUUgotI2RlZmluZSBDS19GX1BSX1NUT1JF
X1VJTlQKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfMTYKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfMzIKLSNk
ZWZpbmUgQ0tfRl9QUl9TVUJfNjQKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfOAotI2RlZmluZSBDS19G
X1BSX1NVQl9DSEFSCi0jZGVmaW5lIENLX0ZfUFJfU1VCX0lOVAotI2RlZmluZSBDS19GX1BSX1NV
Ql9QVFIKLSNkZWZpbmUgQ0tfRl9QUl9TVUJfVUlOVAotI2RlZmluZSBDS19GX1BSX1hPUl8xNgot
I2RlZmluZSBDS19GX1BSX1hPUl8zMgotI2RlZmluZSBDS19GX1BSX1hPUl82NAotI2RlZmluZSBD
S19GX1BSX1hPUl84Ci0jZGVmaW5lIENLX0ZfUFJfWE9SX0NIQVIKLSNkZWZpbmUgQ0tfRl9QUl9Y
T1JfSU5UCi0jZGVmaW5lIENLX0ZfUFJfWE9SX1BUUgotI2RlZmluZSBDS19GX1BSX1hPUl9VSU5U
Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUv
Z2NjL3g4Nl82NC9ja19wci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5j
bHVkZS9nY2MveDg2XzY0L2NrX3ByLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUz
MmQ1OTNmMjc3YzdhNWU0M2JkNzA0ZWMwNmEzMDUxM2UxMjBlZWEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvY2svaW5jbHVkZS9nY2MveDg2XzY0L2NrX3ByLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1ODUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5LTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgot
ICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDS19QUl9YODZfNjRfSAotI2RlZmluZSBD
S19QUl9YODZfNjRfSAotCi0jaWZuZGVmIENLX1BSX0gKLSNlcnJvciBEbyBub3QgaW5jbHVkZSB0
aGlzIGZpbGUgZGlyZWN0bHksIHVzZSBja19wci5oCi0jZW5kaWYKLQotI2luY2x1ZGUgPGNrX2Nj
Lmg+Ci0jaW5jbHVkZSA8Y2tfbWQuaD4KLSNpbmNsdWRlIDxja19zdGRpbnQuaD4KLQotLyoKLSAq
IFRoZSBmb2xsb3dpbmcgcmVwcmVzZW50IHN1cHBvcnRlZCBhdG9taWMgb3BlcmF0aW9ucy4KLSAq
IFRoZXNlIG9wZXJhdGlvbnMgbWF5IGJlIGVtdWxhdGVkLgotICovCi0jaW5jbHVkZSAiY2tfZl9w
ci5oIgotCi0vKgotICogU3VwcG9ydCBmb3IgVFNYIGV4dGVuc2lvbnMuCi0gKi8KLSNpZmRlZiBD
S19NRF9SVE1fRU5BQkxFCi0jaW5jbHVkZSAiY2tfcHJfcnRtLmgiCi0jZW5kaWYKLQotLyogTWlu
aW11bSByZXF1aXJlbWVudHMgZm9yIHRoZSBDS19QUiBpbnRlcmZhY2UgYXJlIG1ldC4gKi8KLSNk
ZWZpbmUgQ0tfRl9QUgotCi0jaWZkZWYgQ0tfTURfVU1QCi0jZGVmaW5lIENLX1BSX0xPQ0tfUFJF
RklYCi0jZWxzZQotI2RlZmluZSBDS19QUl9MT0NLX1BSRUZJWCAibG9jayAiCi0jZW5kaWYKLQot
LyoKLSAqIFByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uIGluIGJ1c3ktd2FpdCBsb29wcyAo
UDQgPD0pCi0gKiBvciAicHJlZGVmaW5lZCBkZWxheSIuCi0gKi8KLUNLX0NDX0lOTElORSBzdGF0
aWMgdm9pZAotY2tfcHJfc3RhbGwodm9pZCkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGF1
c2UiIDo6OiAibWVtb3J5Iik7Ci0JcmV0dXJuOwotfQotCi0jZGVmaW5lIENLX1BSX0ZFTkNFKFQs
IEkpCQkJCVwKLQlDS19DQ19JTkxJTkUgc3RhdGljIHZvaWQJCQlcCi0JY2tfcHJfZmVuY2Vfc3Ry
aWN0XyMjVCh2b2lkKQkJCVwKLQl7CQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhJIDo6
OiAibWVtb3J5Iik7CVwKLQl9Ci0KLUNLX1BSX0ZFTkNFKGF0b21pYywgInNmZW5jZSIpCi1DS19Q
Ul9GRU5DRShhdG9taWNfc3RvcmUsICJzZmVuY2UiKQotQ0tfUFJfRkVOQ0UoYXRvbWljX2xvYWQs
ICJtZmVuY2UiKQotQ0tfUFJfRkVOQ0Uoc3RvcmVfYXRvbWljLCAic2ZlbmNlIikKLUNLX1BSX0ZF
TkNFKGxvYWRfYXRvbWljLCAibWZlbmNlIikKLUNLX1BSX0ZFTkNFKGxvYWQsICJsZmVuY2UiKQot
Q0tfUFJfRkVOQ0UobG9hZF9zdG9yZSwgIm1mZW5jZSIpCi1DS19QUl9GRU5DRShzdG9yZSwgInNm
ZW5jZSIpCi1DS19QUl9GRU5DRShzdG9yZV9sb2FkLCAibWZlbmNlIikKLUNLX1BSX0ZFTkNFKG1l
bW9yeSwgIm1mZW5jZSIpCi1DS19QUl9GRU5DRShyZWxlYXNlLCAibWZlbmNlIikKLUNLX1BSX0ZF
TkNFKGFjcXVpcmUsICJtZmVuY2UiKQotQ0tfUFJfRkVOQ0UoYWNxcmVsLCAibWZlbmNlIikKLUNL
X1BSX0ZFTkNFKGxvY2ssICJtZmVuY2UiKQotQ0tfUFJfRkVOQ0UodW5sb2NrLCAibWZlbmNlIikK
LQotI3VuZGVmIENLX1BSX0ZFTkNFCi0KLS8qCi0gKiBSZWFkIGZvciBvd25lcnNoaXAuIE9sZGVy
IGNvbXBpbGVycyB3aWxsIGdlbmVyYXRlIHRoZSAzMi1iaXQKLSAqIDNETm93ISB2YXJpYW50IHdo
aWNoIGlzIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggeDg2LTY0IHZhcmlhbnQKLSAqIG9mIHByZWZl
dGNody4KLSAqLwotI2lmbmRlZiBDS19GX1BSX1JGTwotI2RlZmluZSBDS19GX1BSX1JGTwotQ0tf
Q0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19wcl9yZm8oY29uc3Qgdm9pZCAqbSkKLXsKLQotCV9f
YXNtX18gX192b2xhdGlsZV9fKCJwcmVmZXRjaHcgKCUwKSIKLQkgICAgOgotCSAgICA6ICJyIiAo
bSkKLQkgICAgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm47Ci19Ci0jZW5kaWYgLyogQ0tfRl9QUl9S
Rk8gKi8KLQotLyoKLSAqIEF0b21pYyBmZXRjaC1hbmQtc3RvcmUgb3BlcmF0aW9ucy4KLSAqLwot
I2RlZmluZSBDS19QUl9GQVMoUywgTSwgVCwgQywgSSkJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0
aWMgVAkJCQkJXAotCWNrX3ByX2Zhc18jI1MoTSAqdGFyZ2V0LCBUIHYpCQkJCVwKLQl7CQkJCQkJ
CVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oSSAiICUwLCAlMSIJCVwKLQkJCQkJOiAiK20iICgq
KEMgKil0YXJnZXQpLAlcCi0JCQkJCSAgIitxIiAodikJCVwKLQkJCQkJOgkJCVwKLQkJCQkJOiAi
bWVtb3J5Iik7CQlcCi0JCXJldHVybiB2OwkJCQkJXAotCX0KLQotQ0tfUFJfRkFTKHB0ciwgdm9p
ZCwgdm9pZCAqLCBjaGFyLCAieGNoZ3EiKQotCi0jZGVmaW5lIENLX1BSX0ZBU19TKFMsIFQsIEkp
IENLX1BSX0ZBUyhTLCBULCBULCBULCBJKQotCi0jaWZuZGVmIENLX1BSX0RJU0FCTEVfRE9VQkxF
Ci1DS19QUl9GQVNfUyhkb3VibGUsIGRvdWJsZSwgInhjaGdxIikKLSNlbmRpZgotQ0tfUFJfRkFT
X1MoY2hhciwgY2hhciwgInhjaGdiIikKLUNLX1BSX0ZBU19TKHVpbnQsIHVuc2lnbmVkIGludCwg
InhjaGdsIikKLUNLX1BSX0ZBU19TKGludCwgaW50LCAieGNoZ2wiKQotQ0tfUFJfRkFTX1MoNjQs
IHVpbnQ2NF90LCAieGNoZ3EiKQotQ0tfUFJfRkFTX1MoMzIsIHVpbnQzMl90LCAieGNoZ2wiKQot
Q0tfUFJfRkFTX1MoMTYsIHVpbnQxNl90LCAieGNoZ3ciKQotQ0tfUFJfRkFTX1MoOCwgIHVpbnQ4
X3QsICAieGNoZ2IiKQotCi0jdW5kZWYgQ0tfUFJfRkFTX1MKLSN1bmRlZiBDS19QUl9GQVMKLQot
LyoKLSAqIEF0b21pYyBsb2FkLWZyb20tbWVtb3J5IG9wZXJhdGlvbnMuCi0gKi8KLSNkZWZpbmUg
Q0tfUFJfTE9BRChTLCBNLCBULCBDLCBJKQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyBUCQkJ
CQlcCi0JY2tfcHJfbWRfbG9hZF8jI1MoY29uc3QgTSAqdGFyZ2V0KQkJCVwKLQl7CQkJCQkJCVwK
LQkJVCByOwkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oSSAiICUxLCAlMCIJCVwKLQkJ
ICAgIDogIj1xIiAocikJCQkJCVwKLQkJICAgIDogIm0iICAoKihjb25zdCBDICopdGFyZ2V0KQkJ
CVwKLQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCi0JCXJldHVybiAocik7CQkJCQlcCi0JfQotCi1D
S19QUl9MT0FEKHB0ciwgdm9pZCwgdm9pZCAqLCBjaGFyLCAibW92cSIpCi0KLSNkZWZpbmUgQ0tf
UFJfTE9BRF9TKFMsIFQsIEkpIENLX1BSX0xPQUQoUywgVCwgVCwgVCwgSSkKLQotQ0tfUFJfTE9B
RF9TKGNoYXIsIGNoYXIsICJtb3ZiIikKLUNLX1BSX0xPQURfUyh1aW50LCB1bnNpZ25lZCBpbnQs
ICJtb3ZsIikKLUNLX1BSX0xPQURfUyhpbnQsIGludCwgIm1vdmwiKQotI2lmbmRlZiBDS19QUl9E
SVNBQkxFX0RPVUJMRQotQ0tfUFJfTE9BRF9TKGRvdWJsZSwgZG91YmxlLCAibW92cSIpCi0jZW5k
aWYKLUNLX1BSX0xPQURfUyg2NCwgdWludDY0X3QsICJtb3ZxIikKLUNLX1BSX0xPQURfUygzMiwg
dWludDMyX3QsICJtb3ZsIikKLUNLX1BSX0xPQURfUygxNiwgdWludDE2X3QsICJtb3Z3IikKLUNL
X1BSX0xPQURfUyg4LCAgdWludDhfdCwgICJtb3ZiIikKLQotI3VuZGVmIENLX1BSX0xPQURfUwot
I3VuZGVmIENLX1BSX0xPQUQKLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19wcl9sb2Fk
XzY0XzIoY29uc3QgdWludDY0X3QgdGFyZ2V0WzJdLCB1aW50NjRfdCB2WzJdKQotewotCV9fYXNt
X18gX192b2xhdGlsZV9fKCJtb3ZxICUlcmR4LCAlJXJjeDsiCi0JCQkgICAgICJtb3ZxICUlcmF4
LCAlJXJieDsiCi0JCQkgICAgIENLX1BSX0xPQ0tfUFJFRklYICJjbXB4Y2hnMTZiICUyOyIKLQkJ
CQk6ICI9YSIgKHZbMF0pLAotCQkJCSAgIj1kIiAodlsxXSkKLQkJCQk6ICJtIiAoKihjb25zdCB1
aW50NjRfdCAqKXRhcmdldCkKLQkJCQk6ICJyYngiLCAicmN4IiwgIm1lbW9yeSIsICJjYyIpOwot
CXJldHVybjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19wcl9sb2FkX3B0cl8y
KGNvbnN0IHZvaWQgKnQsIHZvaWQgKnYpCi17Ci0JY2tfcHJfbG9hZF82NF8yKENLX0NQUF9DQVNU
KGNvbnN0IHVpbnQ2NF90ICosIHQpLAotCQkJQ0tfQ1BQX0NBU1QodWludDY0X3QgKiwgdikpOwot
CXJldHVybjsKLX0KLQotI2RlZmluZSBDS19QUl9MT0FEXzIoUywgVywgVCkJCQkJCQkJXAotCUNL
X0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCQkJCVwKLQlja19wcl9tZF9sb2FkXyMjUyMjXyMjVyhj
b25zdCBUIHRbMl0sIFQgdlsyXSkJCQkJXAotCXsJCQkJCQkJCQlcCi0JCWNrX3ByX2xvYWRfNjRf
MigoY29uc3QgdWludDY0X3QgKikoY29uc3Qgdm9pZCAqKXQsCQlcCi0JCQkJKHVpbnQ2NF90ICop
KHZvaWQgKil2KTsJCQkJXAotCQlyZXR1cm47CQkJCQkJCQlcCi0JfQotCi1DS19QUl9MT0FEXzIo
Y2hhciwgMTYsIGNoYXIpCi1DS19QUl9MT0FEXzIoaW50LCA0LCBpbnQpCi1DS19QUl9MT0FEXzIo
dWludCwgNCwgdW5zaWduZWQgaW50KQotQ0tfUFJfTE9BRF8yKDMyLCA0LCB1aW50MzJfdCkKLUNL
X1BSX0xPQURfMigxNiwgOCwgdWludDE2X3QpCi1DS19QUl9MT0FEXzIoOCwgMTYsIHVpbnQ4X3Qp
Ci0KLSN1bmRlZiBDS19QUl9MT0FEXzIKLQotLyoKLSAqIEF0b21pYyBzdG9yZS10by1tZW1vcnkg
b3BlcmF0aW9ucy4KLSAqLwotI2RlZmluZSBDS19QUl9TVE9SRV9JTU0oUywgTSwgVCwgQywgSSwg
SykJCQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCQkJXAotCWNrX3ByX21kX3N0b3Jl
XyMjUyhNICp0YXJnZXQsIFQgdikJCQkJXAotCXsJCQkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0
aWxlX18oSSAiICUxLCAlMCIJCQlcCi0JCQkJCTogIj1tIiAoKihDICopdGFyZ2V0KQkJXAotCQkJ
CQk6IEsgInEiICh2KQkJCVwKLQkJCQkJOiAibWVtb3J5Iik7CQkJXAotCQlyZXR1cm47CQkJCQkJ
CVwKLQl9Ci0KLSNkZWZpbmUgQ0tfUFJfU1RPUkUoUywgTSwgVCwgQywgSSkJCQkJXAotCUNLX0ND
X0lOTElORSBzdGF0aWMgdm9pZAkJCQlcCi0JY2tfcHJfbWRfc3RvcmVfIyNTKE0gKnRhcmdldCwg
VCB2KQkJCVwKLQl7CQkJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oSSAiICUxLCAlMCIJ
CVwKLQkJCQkJOiAiPW0iICgqKEMgKil0YXJnZXQpCVwKLQkJCQkJOiAicSIgKHYpCQlcCi0JCQkJ
CTogIm1lbW9yeSIpOwkJXAotCQlyZXR1cm47CQkJCQkJXAotCX0KLQotQ0tfUFJfU1RPUkVfSU1N
KHB0ciwgdm9pZCwgY29uc3Qgdm9pZCAqLCBjaGFyLCAibW92cSIsIENLX0NDX0lNTV9VMzIpCi0j
aWZuZGVmIENLX1BSX0RJU0FCTEVfRE9VQkxFCi1DS19QUl9TVE9SRShkb3VibGUsIGRvdWJsZSwg
ZG91YmxlLCBkb3VibGUsICJtb3ZxIikKLSNlbmRpZgotCi0jZGVmaW5lIENLX1BSX1NUT1JFX1Mo
UywgVCwgSSwgSykgQ0tfUFJfU1RPUkVfSU1NKFMsIFQsIFQsIFQsIEksIEspCi0KLUNLX1BSX1NU
T1JFX1MoY2hhciwgY2hhciwgIm1vdmIiLCBDS19DQ19JTU1fUzMyKQotQ0tfUFJfU1RPUkVfUyhp
bnQsIGludCwgIm1vdmwiLCBDS19DQ19JTU1fUzMyKQotQ0tfUFJfU1RPUkVfUyh1aW50LCB1bnNp
Z25lZCBpbnQsICJtb3ZsIiwgQ0tfQ0NfSU1NX1UzMikKLUNLX1BSX1NUT1JFX1MoNjQsIHVpbnQ2
NF90LCAibW92cSIsIENLX0NDX0lNTV9VMzIpCi1DS19QUl9TVE9SRV9TKDMyLCB1aW50MzJfdCwg
Im1vdmwiLCBDS19DQ19JTU1fVTMyKQotQ0tfUFJfU1RPUkVfUygxNiwgdWludDE2X3QsICJtb3Z3
IiwgQ0tfQ0NfSU1NX1UzMikKLUNLX1BSX1NUT1JFX1MoOCwgIHVpbnQ4X3QsICJtb3ZiIiwgQ0tf
Q0NfSU1NX1UzMikKLQotI3VuZGVmIENLX1BSX1NUT1JFX1MKLSN1bmRlZiBDS19QUl9TVE9SRV9J
TU0KLSN1bmRlZiBDS19QUl9TVE9SRQotCi0vKgotICogQXRvbWljIGZldGNoLWFuZC1hZGQgb3Bl
cmF0aW9ucy4KLSAqLwotI2RlZmluZSBDS19QUl9GQUEoUywgTSwgVCwgQywgSSkJCQkJCVwKLQlD
S19DQ19JTkxJTkUgc3RhdGljIFQJCQkJCQlcCi0JY2tfcHJfZmFhXyMjUyhNICp0YXJnZXQsIFQg
ZCkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKENLX1BSX0xPQ0tf
UFJFRklYIEkgIiAlMSwgJTAiCVwKLQkJCQkJOiAiK20iICgqKEMgKil0YXJnZXQpLAkJXAotCQkJ
CQkgICIrcSIgKGQpCQkJXAotCQkJCQk6CQkJCVwKLQkJCQkJOiAibWVtb3J5IiwgImNjIik7CQlc
Ci0JCXJldHVybiAoZCk7CQkJCQkJXAotCX0KLQotQ0tfUFJfRkFBKHB0ciwgdm9pZCwgdWludHB0
cl90LCBjaGFyLCAieGFkZHEiKQotCi0jZGVmaW5lIENLX1BSX0ZBQV9TKFMsIFQsIEkpIENLX1BS
X0ZBQShTLCBULCBULCBULCBJKQotCi1DS19QUl9GQUFfUyhjaGFyLCBjaGFyLCAieGFkZGIiKQot
Q0tfUFJfRkFBX1ModWludCwgdW5zaWduZWQgaW50LCAieGFkZGwiKQotQ0tfUFJfRkFBX1MoaW50
LCBpbnQsICJ4YWRkbCIpCi1DS19QUl9GQUFfUyg2NCwgdWludDY0X3QsICJ4YWRkcSIpCi1DS19Q
Ul9GQUFfUygzMiwgdWludDMyX3QsICJ4YWRkbCIpCi1DS19QUl9GQUFfUygxNiwgdWludDE2X3Qs
ICJ4YWRkdyIpCi1DS19QUl9GQUFfUyg4LCAgdWludDhfdCwgICJ4YWRkYiIpCi0KLSN1bmRlZiBD
S19QUl9GQUFfUwotI3VuZGVmIENLX1BSX0ZBQQotCi0vKgotICogQXRvbWljIHN0b3JlLW9ubHkg
dW5hcnkgb3BlcmF0aW9ucy4KLSAqLwotI2RlZmluZSBDS19QUl9VTkFSWShLLCBTLCBULCBDLCBJ
KQkJCQlcCi0JQ0tfUFJfVU5BUllfUihLLCBTLCBULCBDLCBJKQkJCQlcCi0JQ0tfUFJfVU5BUllf
VihLLCBTLCBULCBDLCBJKQotCi0jZGVmaW5lIENLX1BSX1VOQVJZX1IoSywgUywgVCwgQywgSSkJ
CQkJXAotCUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAkJCQlcCi0JY2tfcHJfIyNLIyNfIyNTKFQg
KnRhcmdldCkJCQkJXAotCXsJCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhDS19QUl9M
T0NLX1BSRUZJWCBJICIgJTAiCVwKLQkJCQkJOiAiK20iICgqKEMgKil0YXJnZXQpCVwKLQkJCQkJ
OgkJCVwKLQkJCQkJOiAibWVtb3J5IiwgImNjIik7CVwKLQkJcmV0dXJuOwkJCQkJCVwKLQl9Ci0K
LSNkZWZpbmUgQ0tfUFJfVU5BUllfVihLLCBTLCBULCBDLCBJKQkJCQkJXAotCUNLX0NDX0lOTElO
RSBzdGF0aWMgdm9pZAkJCQkJXAotCWNrX3ByXyMjSyMjXyMjUyMjX3plcm8oVCAqdGFyZ2V0LCBi
b29sICpyKQkJCVwKLQl7CQkJCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKENLX1BSX0xP
Q0tfUFJFRklYIEkgIiAlMDsgc2V0eiAlMSIJXAotCQkJCQk6ICIrbSIgKCooQyAqKXRhcmdldCks
CQlcCi0JCQkJCSAgIj1tIiAoKnIpCQkJXAotCQkJCQk6CQkJCVwKLQkJCQkJOiAibWVtb3J5Iiwg
ImNjIik7CQlcCi0JCXJldHVybjsJCQkJCQkJXAotCX0KLQotCi0jZGVmaW5lIENLX1BSX1VOQVJZ
X1MoSywgUywgVCwgSSkgQ0tfUFJfVU5BUlkoSywgUywgVCwgVCwgSSkKLQotI2RlZmluZSBDS19Q
Ul9HRU5FUkFURShLKQkJCQlcCi0JQ0tfUFJfVU5BUlkoSywgcHRyLCB2b2lkLCBjaGFyLCAjSyAi
cSIpIAlcCi0JQ0tfUFJfVU5BUllfUyhLLCBjaGFyLCBjaGFyLCAjSyAiYiIpCQlcCi0JQ0tfUFJf
VU5BUllfUyhLLCBpbnQsIGludCwgI0sgImwiKQkJXAotCUNLX1BSX1VOQVJZX1MoSywgdWludCwg
dW5zaWduZWQgaW50LCAjSyAibCIpCVwKLQlDS19QUl9VTkFSWV9TKEssIDY0LCB1aW50NjRfdCwg
I0sgInEiKQkJXAotCUNLX1BSX1VOQVJZX1MoSywgMzIsIHVpbnQzMl90LCAjSyAibCIpCQlcCi0J
Q0tfUFJfVU5BUllfUyhLLCAxNiwgdWludDE2X3QsICNLICJ3IikJCVwKLQlDS19QUl9VTkFSWV9T
KEssIDgsIHVpbnQ4X3QsICNLICJiIikKLQotQ0tfUFJfR0VORVJBVEUoaW5jKQotQ0tfUFJfR0VO
RVJBVEUoZGVjKQotQ0tfUFJfR0VORVJBVEUobmVnKQotCi0vKiBub3QgZG9lcyBub3QgYWZmZWN0
IGNvbmRpdGlvbiBmbGFncy4gKi8KLSN1bmRlZiBDS19QUl9VTkFSWV9WCi0jZGVmaW5lIENLX1BS
X1VOQVJZX1YoYSwgYiwgYywgZCwgZSkKLUNLX1BSX0dFTkVSQVRFKG5vdCkKLQotI3VuZGVmIENL
X1BSX0dFTkVSQVRFCi0jdW5kZWYgQ0tfUFJfVU5BUllfUwotI3VuZGVmIENLX1BSX1VOQVJZX1YK
LSN1bmRlZiBDS19QUl9VTkFSWV9SCi0jdW5kZWYgQ0tfUFJfVU5BUlkKLQotLyoKLSAqIEF0b21p
YyBzdG9yZS1vbmx5IGJpbmFyeSBvcGVyYXRpb25zLgotICovCi0jZGVmaW5lIENLX1BSX0JJTkFS
WShLLCBTLCBNLCBULCBDLCBJLCBPKQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCQkJ
CQlcCi0JY2tfcHJfIyNLIyNfIyNTKE0gKnRhcmdldCwgVCBkKQkJCQkJXAotCXsJCQkJCQkJCVwK
LQkJX19hc21fXyBfX3ZvbGF0aWxlX18oQ0tfUFJfTE9DS19QUkVGSVggSSAiICUxLCAlMCIJXAot
CQkJCQk6ICIrbSIgKCooQyAqKXRhcmdldCkJCVwKLQkJCQkJOiBPICJxIiAoZCkJCQlcCi0JCQkJ
CTogIm1lbW9yeSIsICJjYyIpOwkJXAotCQlyZXR1cm47CQkJCQkJCVwKLQl9Ci0KLSNkZWZpbmUg
Q0tfUFJfQklOQVJZX1MoSywgUywgVCwgSSwgTykgQ0tfUFJfQklOQVJZKEssIFMsIFQsIFQsIFQs
IEksIE8pCi0KLSNkZWZpbmUgQ0tfUFJfR0VORVJBVEUoSykJCQkJCQkJXAotCUNLX1BSX0JJTkFS
WShLLCBwdHIsIHZvaWQsIHVpbnRwdHJfdCwgY2hhciwgI0sgInEiLCBDS19DQ19JTU1fVTMyKQlc
Ci0JQ0tfUFJfQklOQVJZX1MoSywgY2hhciwgY2hhciwgI0sgImIiLCBDS19DQ19JTU1fUzMyKQkJ
CVwKLQlDS19QUl9CSU5BUllfUyhLLCBpbnQsIGludCwgI0sgImwiLCBDS19DQ19JTU1fUzMyKQkJ
CVwKLQlDS19QUl9CSU5BUllfUyhLLCB1aW50LCB1bnNpZ25lZCBpbnQsICNLICJsIiwgQ0tfQ0Nf
SU1NX1UzMikJCVwKLQlDS19QUl9CSU5BUllfUyhLLCA2NCwgdWludDY0X3QsICNLICJxIiwgQ0tf
Q0NfSU1NX1UzMikJCQlcCi0JQ0tfUFJfQklOQVJZX1MoSywgMzIsIHVpbnQzMl90LCAjSyAibCIs
IENLX0NDX0lNTV9VMzIpCQkJXAotCUNLX1BSX0JJTkFSWV9TKEssIDE2LCB1aW50MTZfdCwgI0sg
InciLCBDS19DQ19JTU1fVTMyKQkJCVwKLQlDS19QUl9CSU5BUllfUyhLLCA4LCB1aW50OF90LCAj
SyAiYiIsIENLX0NDX0lNTV9VMzIpCi0KLUNLX1BSX0dFTkVSQVRFKGFkZCkKLUNLX1BSX0dFTkVS
QVRFKHN1YikKLUNLX1BSX0dFTkVSQVRFKGFuZCkKLUNLX1BSX0dFTkVSQVRFKG9yKQotQ0tfUFJf
R0VORVJBVEUoeG9yKQotCi0jdW5kZWYgQ0tfUFJfR0VORVJBVEUKLSN1bmRlZiBDS19QUl9CSU5B
UllfUwotI3VuZGVmIENLX1BSX0JJTkFSWQotCi0vKgotICogQXRvbWljIGNvbXBhcmUgYW5kIHN3
YXAuCi0gKi8KLSNkZWZpbmUgQ0tfUFJfQ0FTKFMsIE0sIFQsIEMsIEkpCQkJCQkJXAotCUNLX0ND
X0lOTElORSBzdGF0aWMgYm9vbAkJCQkJCVwKLQlja19wcl9jYXNfIyNTKE0gKnRhcmdldCwgVCBj
b21wYXJlLCBUIHNldCkJCQkJXAotCXsJCQkJCQkJCQlcCi0JCWJvb2wgejsJCQkJCQkJCVwKLQkJ
X19hc21fXyBfX3ZvbGF0aWxlX18oQ0tfUFJfTE9DS19QUkVGSVggSSAiICUyLCAlMDsgc2V0eiAl
MSIJXAotCQkJCQk6ICIrbSIgICgqKEMgKil0YXJnZXQpLAkJCVwKLQkJCQkJICAiPWEiICAoeikJ
CQkJXAotCQkJCQk6ICJxIiAgIChzZXQpLAkJCQlcCi0JCQkJCSAgImEiICAgKGNvbXBhcmUpCQkJ
XAotCQkJCQk6ICJtZW1vcnkiLCAiY2MiKTsJCQlcCi0JCXJldHVybiB6OwkJCQkJCQlcCi0JfQot
Ci1DS19QUl9DQVMocHRyLCB2b2lkLCB2b2lkICosIGNoYXIsICJjbXB4Y2hncSIpCi0KLSNkZWZp
bmUgQ0tfUFJfQ0FTX1MoUywgVCwgSSkgQ0tfUFJfQ0FTKFMsIFQsIFQsIFQsIEkpCi0KLUNLX1BS
X0NBU19TKGNoYXIsIGNoYXIsICJjbXB4Y2hnYiIpCi1DS19QUl9DQVNfUyhpbnQsIGludCwgImNt
cHhjaGdsIikKLUNLX1BSX0NBU19TKHVpbnQsIHVuc2lnbmVkIGludCwgImNtcHhjaGdsIikKLSNp
Zm5kZWYgQ0tfUFJfRElTQUJMRV9ET1VCTEUKLUNLX1BSX0NBU19TKGRvdWJsZSwgZG91YmxlLCAi
Y21weGNoZ3EiKQotI2VuZGlmCi1DS19QUl9DQVNfUyg2NCwgdWludDY0X3QsICJjbXB4Y2hncSIp
Ci1DS19QUl9DQVNfUygzMiwgdWludDMyX3QsICJjbXB4Y2hnbCIpCi1DS19QUl9DQVNfUygxNiwg
dWludDE2X3QsICJjbXB4Y2hndyIpCi1DS19QUl9DQVNfUyg4LCAgdWludDhfdCwgICJjbXB4Y2hn
YiIpCi0KLSN1bmRlZiBDS19QUl9DQVNfUwotI3VuZGVmIENLX1BSX0NBUwotCi0vKgotICogQ29t
cGFyZSBhbmQgc3dhcCwgc2V0ICp2IHRvIG9sZCB2YWx1ZSBvZiB0YXJnZXQuCi0gKi8KLSNkZWZp
bmUgQ0tfUFJfQ0FTX08oUywgTSwgVCwgQywgSSwgUikJCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0
YXRpYyBib29sCQkJCQkJXAotCWNrX3ByX2Nhc18jI1MjI192YWx1ZShNICp0YXJnZXQsIFQgY29t
cGFyZSwgVCBzZXQsIE0gKnYpCQlcCi0JewkJCQkJCQkJCVwKLQkJYm9vbCB6OwkJCQkJCQkJXAot
CQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhDS19QUl9MT0NLX1BSRUZJWCAiY21weGNoZyIgSSAiICUz
LCAlMDsiCVwKLQkJCQkgICAgICJtb3YgJSUgIiBSICIsICUyOyIJCQlcCi0JCQkJICAgICAic2V0
eiAlMTsiCQkJCQlcCi0JCQkJCTogIittIiAgKCooQyAqKXRhcmdldCksCQkJXAotCQkJCQkgICI9
YSIgICh6KSwJCQkJXAotCQkJCQkgICI9bSIgICgqKEMgKil2KQkJCVwKLQkJCQkJOiAicSIgICAo
c2V0KSwJCQkJXAotCQkJCQkgICJhIiAgIChjb21wYXJlKQkJCVwKLQkJCQkJOiAibWVtb3J5Iiwg
ImNjIik7CQkJXAotCQlyZXR1cm4gejsJCQkJCQkJXAotCX0KLQotQ0tfUFJfQ0FTX08ocHRyLCB2
b2lkLCB2b2lkICosIGNoYXIsICJxIiwgInJheCIpCi0KLSNkZWZpbmUgQ0tfUFJfQ0FTX09fUyhT
LCBULCBJLCBSKQlcCi0JQ0tfUFJfQ0FTX08oUywgVCwgVCwgVCwgSSwgUikKLQotQ0tfUFJfQ0FT
X09fUyhjaGFyLCBjaGFyLCAiYiIsICJhbCIpCi1DS19QUl9DQVNfT19TKGludCwgaW50LCAibCIs
ICJlYXgiKQotQ0tfUFJfQ0FTX09fUyh1aW50LCB1bnNpZ25lZCBpbnQsICJsIiwgImVheCIpCi0j
aWZuZGVmIENLX1BSX0RJU0FCTEVfRE9VQkxFCi1DS19QUl9DQVNfT19TKGRvdWJsZSwgZG91Ymxl
LCAicSIsICJyYXgiKQotI2VuZGlmCi1DS19QUl9DQVNfT19TKDY0LCB1aW50NjRfdCwgInEiLCAi
cmF4IikKLUNLX1BSX0NBU19PX1MoMzIsIHVpbnQzMl90LCAibCIsICJlYXgiKQotQ0tfUFJfQ0FT
X09fUygxNiwgdWludDE2X3QsICJ3IiwgImF4IikKLUNLX1BSX0NBU19PX1MoOCwgIHVpbnQ4X3Qs
ICAiYiIsICJhbCIpCi0KLSN1bmRlZiBDS19QUl9DQVNfT19TCi0jdW5kZWYgQ0tfUFJfQ0FTX08K
LQotLyoKLSAqIENvbnRyYXJ5IHRvIEMtaW50ZXJmYWNlLCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRz
IGFyZSB0aGF0IG9mIHVpbnQ2NF90WzJdLgotICovCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wK
LWNrX3ByX2Nhc182NF8yKHVpbnQ2NF90IHRhcmdldFsyXSwgdWludDY0X3QgY29tcGFyZVsyXSwg
dWludDY0X3Qgc2V0WzJdKQotewotCWJvb2wgejsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJt
b3ZxIDAoJTQpLCAlJXJheDsiCi0JCQkgICAgICJtb3ZxIDgoJTQpLCAlJXJkeDsiCi0JCQkgICAg
IENLX1BSX0xPQ0tfUFJFRklYICJjbXB4Y2hnMTZiICUwOyBzZXR6ICUxIgotCQkJCTogIittIiAo
KnRhcmdldCksCi0JCQkJICAiPXEiICh6KQotCQkJCTogImIiICAoc2V0WzBdKSwKLQkJCQkgICJj
IiAgKHNldFsxXSksCi0JCQkJICAicSIgIChjb21wYXJlKQotCQkJCTogIm1lbW9yeSIsICJjYyIs
ICIlcmF4IiwgIiVyZHgiKTsKLQlyZXR1cm4gejsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBi
b29sCi1ja19wcl9jYXNfcHRyXzIodm9pZCAqdCwgdm9pZCAqYywgdm9pZCAqcykKLXsKLQlyZXR1
cm4gY2tfcHJfY2FzXzY0XzIoQ0tfQ1BQX0NBU1QodWludDY0X3QgKiwgdCksCi0JCQkgICAgICBD
S19DUFBfQ0FTVCh1aW50NjRfdCAqLCBjKSwKLQkJCSAgICAgIENLX0NQUF9DQVNUKHVpbnQ2NF90
ICosIHMpKTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19wcl9jYXNfNjRfMl92
YWx1ZSh1aW50NjRfdCB0YXJnZXRbMl0sCi0JCSAgICAgdWludDY0X3QgY29tcGFyZVsyXSwKLQkJ
ICAgICB1aW50NjRfdCBzZXRbMl0sCi0JCSAgICAgdWludDY0X3QgdlsyXSkKLXsKLQlib29sIHo7
Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhDS19QUl9MT0NLX1BSRUZJWCAiY21weGNoZzE2YiAl
MDsiCi0JCQkgICAgICJzZXR6ICUzIgotCQkJCTogIittIiAoKnRhcmdldCksCi0JCQkJICAiPWEi
ICh2WzBdKSwKLQkJCQkgICI9ZCIgKHZbMV0pLAotCQkJCSAgIj1xIiAoeikKLQkJCQk6ICJhIiAo
Y29tcGFyZVswXSksCi0JCQkJICAiZCIgKGNvbXBhcmVbMV0pLAotCQkJCSAgImIiIChzZXRbMF0p
LAotCQkJCSAgImMiIChzZXRbMV0pCi0JCQkJOiAibWVtb3J5IiwgImNjIik7Ci0JcmV0dXJuIHo7
Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfcHJfY2FzX3B0cl8yX3ZhbHVlKHZv
aWQgKnQsIHZvaWQgKmMsIHZvaWQgKnMsIHZvaWQgKnYpCi17Ci0JcmV0dXJuIGNrX3ByX2Nhc182
NF8yX3ZhbHVlKENLX0NQUF9DQVNUKHVpbnQ2NF90ICosdCksCi0JCQkJICAgIENLX0NQUF9DQVNU
KHVpbnQ2NF90ICosYyksCi0JCQkJICAgIENLX0NQUF9DQVNUKHVpbnQ2NF90ICoscyksCi0JCQkJ
ICAgIENLX0NQUF9DQVNUKHVpbnQ2NF90ICosdikpOwotfQotCi0jZGVmaW5lIENLX1BSX0NBU19W
KFMsIFcsIFQpCQkJCQlcCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wJCQkJCVwKLWNrX3ByX2Nh
c18jI1MjI18jI1coVCB0W1ddLCBUIGNbV10sIFQgc1tXXSkJCQlcCi17CQkJCQkJCQlcCi0JcmV0
dXJuIGNrX3ByX2Nhc182NF8yKCh1aW50NjRfdCAqKSh2b2lkICopdCwJCVwKLQkJCSAgICAgICh1
aW50NjRfdCAqKSh2b2lkICopYywJCVwKLQkJCSAgICAgICh1aW50NjRfdCAqKSh2b2lkICopcyk7
CQlcCi19CQkJCQkJCQlcCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wJCQkJCVwKLWNrX3ByX2Nh
c18jI1MjI18jI1cjI192YWx1ZShUICp0LCBUIGNbV10sIFQgc1tXXSwgVCAqdikJCVwKLXsJCQkJ
CQkJCVwKLQlyZXR1cm4gY2tfcHJfY2FzXzY0XzJfdmFsdWUoKHVpbnQ2NF90ICopKHZvaWQgKil0
LAlcCi0JCQkJICAgICh1aW50NjRfdCAqKSh2b2lkICopYywJXAotCQkJCSAgICAodWludDY0X3Qg
Kikodm9pZCAqKXMsCVwKLQkJCQkgICAgKHVpbnQ2NF90ICopKHZvaWQgKil2KTsJXAotfQotCi0j
aWZuZGVmIENLX1BSX0RJU0FCTEVfRE9VQkxFCi1DS19QUl9DQVNfVihkb3VibGUsIDIsIGRvdWJs
ZSkKLSNlbmRpZgotQ0tfUFJfQ0FTX1YoY2hhciwgMTYsIGNoYXIpCi1DS19QUl9DQVNfVihpbnQs
IDQsIGludCkKLUNLX1BSX0NBU19WKHVpbnQsIDQsIHVuc2lnbmVkIGludCkKLUNLX1BSX0NBU19W
KDMyLCA0LCB1aW50MzJfdCkKLUNLX1BSX0NBU19WKDE2LCA4LCB1aW50MTZfdCkKLUNLX1BSX0NB
U19WKDgsIDE2LCB1aW50OF90KQotCi0jdW5kZWYgQ0tfUFJfQ0FTX1YKLQotLyoKLSAqIEF0b21p
YyBiaXQgdGVzdCBvcGVyYXRpb25zLgotICovCi0jZGVmaW5lIENLX1BSX0JUKEssIFMsIFQsIFAs
IEMsIEkpCQkJCQlcCi0JQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCQkJCQlcCi0JY2tfcHJfIyNL
IyNfIyNTKFQgKnRhcmdldCwgdW5zaWduZWQgaW50IGIpCQkJXAotCXsJCQkJCQkJCVwKLQkJYm9v
bCBjOwkJCQkJCQlcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKENLX1BSX0xPQ0tfUFJFRklYIEkg
Ijsgc2V0YyAlMSIJXAotCQkJCQk6ICIrbSIgKCooQyAqKXRhcmdldCksCQlcCi0JCQkJCSAgIj1x
IiAoYykJCQlcCi0JCQkJCTogInEiICAoKFApYikJCQlcCi0JCQkJCTogIm1lbW9yeSIsICJjYyIp
OwkJXAotCQlyZXR1cm4gYzsJCQkJCQlcCi0JfQotCi0jZGVmaW5lIENLX1BSX0JUX1MoSywgUywg
VCwgSSkgQ0tfUFJfQlQoSywgUywgVCwgVCwgVCwgSSkKLQotI2RlZmluZSBDS19QUl9HRU5FUkFU
RShLKQkJCQkJXAotCUNLX1BSX0JUKEssIHB0ciwgdm9pZCwgdWludDY0X3QsIGNoYXIsICNLICJx
ICUyLCAlMCIpCVwKLQlDS19QUl9CVF9TKEssIHVpbnQsIHVuc2lnbmVkIGludCwgI0sgImwgJTIs
ICUwIikJXAotCUNLX1BSX0JUX1MoSywgaW50LCBpbnQsICNLICJsICUyLCAlMCIpCQkJXAotCUNL
X1BSX0JUX1MoSywgNjQsIHVpbnQ2NF90LCAjSyAicSAlMiwgJTAiKQkJXAotCUNLX1BSX0JUX1Mo
SywgMzIsIHVpbnQzMl90LCAjSyAibCAlMiwgJTAiKQkJXAotCUNLX1BSX0JUX1MoSywgMTYsIHVp
bnQxNl90LCAjSyAidyAldzIsICUwIikKLQotQ0tfUFJfR0VORVJBVEUoYnRjKQotQ0tfUFJfR0VO
RVJBVEUoYnRzKQotQ0tfUFJfR0VORVJBVEUoYnRyKQotCi0jdW5kZWYgQ0tfUFJfR0VORVJBVEUK
LSN1bmRlZiBDS19QUl9CVAotCi0jZW5kaWYgLyogQ0tfUFJfWDg2XzY0X0ggKi8KLQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9nY2MveDg2XzY0
L2NrX3ByX3J0bS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9n
Y2MveDg2XzY0L2NrX3ByX3J0bS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWM3
YjlkYmZlMTA5MmVmYWQxYzRmYmVlOTM5MWFhMzg0MDI5ZDg0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2NrL2luY2x1ZGUvZ2NjL3g4Nl82NC9ja19wcl9ydG0uaAorKysgL2Rldi9udWxsCkBAIC0xLDEw
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTMtMjAxNSBTYW15IEFsIEJhaHJhLgotICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICog
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAq
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
Ci0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEyLDIwMTMg
SW50ZWwgQ29ycG9yYXRpb24KLSAqIEF1dGhvcjogQW5kaSBLbGVlbgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQ6ICgxKSBzb3Vy
Y2UgY29kZSBkaXN0cmlidXRpb25zCi0gKiByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp
Y2UgYW5kIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSwgKDIpCi0gKiBkaXN0cmlidXRp
b25zIGluY2x1ZGluZyBiaW5hcnkgY29kZSBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlIGFuZAotICogdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5IGluIHRoZSBkb2N1bWVu
dGF0aW9uIG9yIG90aGVyIG1hdGVyaWFscwotICogcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhP
VVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRI
T1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKi8KLQotI2lmbmRl
ZiBDS19QUl9YODZfNjRfUlRNX0gKLSNkZWZpbmUgQ0tfUFJfWDg2XzY0X1JUTV9ICi0KLSNpZm5k
ZWYgQ0tfUFJfWDg2XzY0X0gKLSNlcnJvciBEbyBub3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0
bHksIHVzZSBja19wci5oCi0jZW5kaWYKLQotI2RlZmluZSBDS19GX1BSX1JUTQotCi0jaW5jbHVk
ZSA8Y2tfY2MuaD4KLSNpbmNsdWRlIDxja19zdGRib29sLmg+Ci0KLSNkZWZpbmUgQ0tfUFJfUlRN
X1NUQVJURUQJKH4wVSkKLSNkZWZpbmUgQ0tfUFJfUlRNX0VYUExJQ0lUCSgxIDw8IDApCi0jZGVm
aW5lIENLX1BSX1JUTV9SRVRSWQkJKDEgPDwgMSkKLSNkZWZpbmUgQ0tfUFJfUlRNX0NPTkZMSUNU
CSgxIDw8IDIpCi0jZGVmaW5lIENLX1BSX1JUTV9DQVBBQ0lUWQkoMSA8PCAzKQotI2RlZmluZSBD
S19QUl9SVE1fREVCVUcJCSgxIDw8IDQpCi0jZGVmaW5lIENLX1BSX1JUTV9ORVNURUQJKDEgPDwg
NSkKLSNkZWZpbmUgQ0tfUFJfUlRNX0NPREUoeCkJKCgoeCkgPj4gMjQpICYgMHhGRikKLQotQ0tf
Q0NfSU5MSU5FIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWNrX3ByX3J0bV9iZWdpbih2b2lkKQotewot
CXVuc2lnbmVkIGludCByID0gQ0tfUFJfUlRNX1NUQVJURUQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRp
bGVfXygiLmJ5dGUgMHhjNywweGY4OyIKLQkJCSAgICAgIi5sb25nIDA7IgotCQkJCTogIithIiAo
cikKLQkJCQk6Ci0JCQkJOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gcjsKLX0KLQotQ0tfQ0NfSU5M
SU5FIHN0YXRpYyB2b2lkCi1ja19wcl9ydG1fZW5kKHZvaWQpCi17Ci0KLQlfX2FzbV9fIF9fdm9s
YXRpbGVfXygiLmJ5dGUgMHgwZiwweDAxLDB4ZDUiIDo6OiAibWVtb3J5Iik7Ci0JcmV0dXJuOwot
fQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3ByX3J0bV9hYm9ydChjb25zdCB1bnNp
Z25lZCBpbnQgc3RhdHVzKQotewotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4YzYs
MHhmOCwlUDAiIDo6ICJpIiAoc3RhdHVzKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm47Ci19Ci0KLUNL
X0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfcHJfcnRtX3Rlc3Qodm9pZCkKLXsKLQlib29sIHI7
Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmJ5dGUgMHgwZiwweDAxLDB4ZDY7IgotCQkJICAg
ICAic2V0bnogJTAiCi0JCQkJOiAiPXIiIChyKQotCQkJCToKLQkJCQk6ICJtZW1vcnkiKTsKLQot
CXJldHVybiByOwotfQotCi0jZW5kaWYgLyogQ0tfUFJfWDg2XzY0X1JUTV9IICovCi0KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvc3BpbmxvY2sv
YW5kZXJzb24uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvc3Bp
bmxvY2svYW5kZXJzb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmViYzVkODc5
MTczNjdiMTBmMTdmODM5ZWVjM2IxNTYwZmUyNGRhZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9p
bmNsdWRlL3NwaW5sb2NrL2FuZGVyc29uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAyMDEwLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDS19TUElOTE9DS19BTkRFUlNPTl9ICi0jZGVmaW5l
IENLX1NQSU5MT0NLX0FOREVSU09OX0gKLQotI2luY2x1ZGUgPGNrX2NjLmg+Ci0jaW5jbHVkZSA8
Y2tfbGltaXRzLmg+Ci0jaW5jbHVkZSA8Y2tfbWQuaD4KLSNpbmNsdWRlIDxja19wci5oPgotI2lu
Y2x1ZGUgPGNrX3N0ZGJvb2wuaD4KLQotI2lmbmRlZiBDS19GX1NQSU5MT0NLX0FOREVSU09OCi0j
ZGVmaW5lIENLX0ZfU1BJTkxPQ0tfQU5ERVJTT04KLS8qCi0gKiBUaGlzIGlzIGFuIGltcGxlbWVu
dGF0aW9uIG9mIEFuZGVyc29uJ3MgYXJyYXktYmFzZWQgcXVldWluZyBsb2NrLgotICovCi1zdHJ1
Y3QgY2tfc3BpbmxvY2tfYW5kZXJzb25fdGhyZWFkIHsKLQl1bnNpZ25lZCBpbnQgbG9ja2VkOwot
CXVuc2lnbmVkIGludCBwb3NpdGlvbjsKLX07Ci10eXBlZGVmIHN0cnVjdCBja19zcGlubG9ja19h
bmRlcnNvbl90aHJlYWQgY2tfc3BpbmxvY2tfYW5kZXJzb25fdGhyZWFkX3Q7Ci0KLXN0cnVjdCBj
a19zcGlubG9ja19hbmRlcnNvbiB7Ci0Jc3RydWN0IGNrX3NwaW5sb2NrX2FuZGVyc29uX3RocmVh
ZCAqc2xvdHM7Ci0JdW5zaWduZWQgaW50IGNvdW50OwotCXVuc2lnbmVkIGludCB3cmFwOwotCXVu
c2lnbmVkIGludCBtYXNrOwotCWNoYXIgcGFkW0NLX01EX0NBQ0hFTElORSAtIHNpemVvZih1bnNp
Z25lZCBpbnQpICogMyAtIHNpemVvZih2b2lkICopXTsKLQl1bnNpZ25lZCBpbnQgbmV4dDsKLX07
Ci10eXBlZGVmIHN0cnVjdCBja19zcGlubG9ja19hbmRlcnNvbiBja19zcGlubG9ja19hbmRlcnNv
bl90OwotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3NwaW5sb2NrX2FuZGVyc29uX2lu
aXQoc3RydWN0IGNrX3NwaW5sb2NrX2FuZGVyc29uICpsb2NrLAotICAgIHN0cnVjdCBja19zcGlu
bG9ja19hbmRlcnNvbl90aHJlYWQgKnNsb3RzLAotICAgIHVuc2lnbmVkIGludCBjb3VudCkKLXsK
LQl1bnNpZ25lZCBpbnQgaTsKLQotCXNsb3RzWzBdLmxvY2tlZCA9IGZhbHNlOwotCXNsb3RzWzBd
LnBvc2l0aW9uID0gMDsKLQlmb3IgKGkgPSAxOyBpIDwgY291bnQ7IGkrKykgewotCQlzbG90c1tp
XS5sb2NrZWQgPSB0cnVlOwotCQlzbG90c1tpXS5wb3NpdGlvbiA9IGk7Ci0JfQotCi0JbG9jay0+
c2xvdHMgPSBzbG90czsKLQlsb2NrLT5jb3VudCA9IGNvdW50OwotCWxvY2stPm1hc2sgPSBjb3Vu
dCAtIDE7Ci0JbG9jay0+bmV4dCA9IDA7Ci0KLQkvKgotCSAqIElmIHRoZSBudW1iZXIgb2YgdGhy
ZWFkcyBpcyBub3QgYSBwb3dlciBvZiB0d28gdGhlbiBjb21wdXRlCi0JICogYXBwcm9wcmlhdGUg
d3JhcC1hcm91bmQgdmFsdWUgaW4gdGhlIGNhc2Ugb2YgbmV4dCBzbG90IGNvdW50ZXIKLQkgKiBv
dmVyZmxvdy4KLQkgKi8KLQlpZiAoY291bnQgJiAoY291bnQgLSAxKSkKLQkJbG9jay0+d3JhcCA9
IChVSU5UX01BWCAlIGNvdW50KSArIDE7Ci0JZWxzZQotCQlsb2NrLT53cmFwID0gMDsKLQotCWNr
X3ByX2JhcnJpZXIoKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAot
Y2tfc3BpbmxvY2tfYW5kZXJzb25fbG9ja2VkKHN0cnVjdCBja19zcGlubG9ja19hbmRlcnNvbiAq
bG9jaykKLXsKLQl1bnNpZ25lZCBpbnQgcG9zaXRpb247Ci0JYm9vbCByOwotCi0JcG9zaXRpb24g
PSBja19wcl9sb2FkX3VpbnQoJmxvY2stPm5leHQpICYgbG9jay0+bWFzazsKLQlyID0gY2tfcHJf
bG9hZF91aW50KCZsb2NrLT5zbG90c1twb3NpdGlvbl0ubG9ja2VkKTsKLQlja19wcl9mZW5jZV9h
Y3F1aXJlKCk7Ci0JcmV0dXJuIHI7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tf
c3BpbmxvY2tfYW5kZXJzb25fbG9jayhzdHJ1Y3QgY2tfc3BpbmxvY2tfYW5kZXJzb24gKmxvY2ss
Ci0gICAgc3RydWN0IGNrX3NwaW5sb2NrX2FuZGVyc29uX3RocmVhZCAqKnNsb3QpCi17Ci0JdW5z
aWduZWQgaW50IHBvc2l0aW9uLCBuZXh0OwotCXVuc2lnbmVkIGludCBjb3VudCA9IGxvY2stPmNv
dW50OwotCi0JLyoKLQkgKiBJZiBjb3VudCBpcyBub3QgYSBwb3dlciBvZiAyLCB0aGVuIGl0IGlz
IHBvc3NpYmxlIGZvciBhbiBvdmVyZmxvdwotCSAqIHRvIHJlYWxsb2NhdGUgYmVnaW5uaW5nIHNs
b3RzIHRvIG1vcmUgdGhhbiBvbmUgdGhyZWFkLiBUbyBhdm9pZCB0aGlzCi0JICogdXNlIGEgY29t
cGFyZS1hbmQtc3dhcC4KLQkgKi8KLQlpZiAobG9jay0+d3JhcCAhPSAwKSB7Ci0JCXBvc2l0aW9u
ID0gY2tfcHJfbG9hZF91aW50KCZsb2NrLT5uZXh0KTsKLQotCQlkbyB7Ci0JCQlpZiAocG9zaXRp
b24gPT0gVUlOVF9NQVgpCi0JCQkJbmV4dCA9IGxvY2stPndyYXA7Ci0JCQllbHNlCi0JCQkJbmV4
dCA9IHBvc2l0aW9uICsgMTsKLQkJfSB3aGlsZSAoY2tfcHJfY2FzX3VpbnRfdmFsdWUoJmxvY2st
Pm5leHQsIHBvc2l0aW9uLAotCQkJCQkgICAgICBuZXh0LCAmcG9zaXRpb24pID09IGZhbHNlKTsK
LQotCQlwb3NpdGlvbiAlPSBjb3VudDsKLQl9IGVsc2UgewotCQlwb3NpdGlvbiA9IGNrX3ByX2Zh
YV91aW50KCZsb2NrLT5uZXh0LCAxKTsKLQkJcG9zaXRpb24gJj0gbG9jay0+bWFzazsKLQl9Ci0K
LQkvKiBTZXJpYWxpemUgd2l0aCByZXNwZWN0IHRvIHByZXZpb3VzIHRocmVhZCdzIHN0b3JlLiAq
LwotCWNrX3ByX2ZlbmNlX2xvYWQoKTsKLQotCS8qCi0JICogU3BpbiB1bnRpbCBzbG90IGlzIG1h
cmtlZCBhcyB1bmxvY2tlZC4gRmlyc3Qgc2xvdCBpcyBpbml0aWFsaXplZCB0bwotCSAqIGZhbHNl
LgotCSAqLwotCXdoaWxlIChja19wcl9sb2FkX3VpbnQoJmxvY2stPnNsb3RzW3Bvc2l0aW9uXS5s
b2NrZWQpID09IHRydWUpCi0JCWNrX3ByX3N0YWxsKCk7Ci0KLQkvKiBQcmVwYXJlIHNsb3QgZm9y
IHBvdGVudGlhbCByZS11c2UgYnkgYW5vdGhlciB0aHJlYWQuICovCi0JY2tfcHJfc3RvcmVfdWlu
dCgmbG9jay0+c2xvdHNbcG9zaXRpb25dLmxvY2tlZCwgdHJ1ZSk7Ci0JY2tfcHJfZmVuY2VfbG9j
aygpOwotCi0JKnNsb3QgPSBsb2NrLT5zbG90cyArIHBvc2l0aW9uOwotCXJldHVybjsKLX0KLQot
Q0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19zcGlubG9ja19hbmRlcnNvbl91bmxvY2soc3Ry
dWN0IGNrX3NwaW5sb2NrX2FuZGVyc29uICpsb2NrLAotICAgIHN0cnVjdCBja19zcGlubG9ja19h
bmRlcnNvbl90aHJlYWQgKnNsb3QpCi17Ci0JdW5zaWduZWQgaW50IHBvc2l0aW9uOwotCi0JY2tf
cHJfZmVuY2VfdW5sb2NrKCk7Ci0KLQkvKiBNYXJrIG5leHQgc2xvdCBhcyBhdmFpbGFibGUuICov
Ci0JaWYgKGxvY2stPndyYXAgPT0gMCkKLQkJcG9zaXRpb24gPSAoc2xvdC0+cG9zaXRpb24gKyAx
KSAmIGxvY2stPm1hc2s7Ci0JZWxzZQotCQlwb3NpdGlvbiA9IChzbG90LT5wb3NpdGlvbiArIDEp
ICUgbG9jay0+Y291bnQ7Ci0KLQlja19wcl9zdG9yZV91aW50KCZsb2NrLT5zbG90c1twb3NpdGlv
bl0ubG9ja2VkLCBmYWxzZSk7Ci0JcmV0dXJuOwotfQotI2VuZGlmIC8qIENLX0ZfU1BJTkxPQ0tf
QU5ERVJTT04gKi8KLSNlbmRpZiAvKiBDS19TUElOTE9DS19BTkRFUlNPTl9IICovCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL3NwaW5sb2NrL2Nh
cy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9zcGlubG9jay9j
YXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY2ZDcyM2VkMmNlODYyNWVjMzBl
YzhkZTIzMGY5MDIzOGVlMWYzZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL3NwaW5s
b2NrL2Nhcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgMjAxMC0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgQ0tfU1BJTkxPQ0tfQ0FTX0gKLSNkZWZpbmUgQ0tfU1BJTkxPQ0tfQ0FTX0gKLQot
I2luY2x1ZGUgPGNrX2JhY2tvZmYuaD4KLSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNr
X2VsaWRlLmg+Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19zdGRib29sLmg+Ci0K
LSNpZm5kZWYgQ0tfRl9TUElOTE9DS19DQVMKLSNkZWZpbmUgQ0tfRl9TUElOTE9DS19DQVMKLS8q
Ci0gKiBUaGlzIGlzIGEgc2ltcGxlIENBQ0FTIChUQVRBUykgc3BpbmxvY2sgaW1wbGVtZW50YXRp
b24uCi0gKi8KLXN0cnVjdCBja19zcGlubG9ja19jYXMgewotCXVuc2lnbmVkIGludCB2YWx1ZTsK
LX07Ci10eXBlZGVmIHN0cnVjdCBja19zcGlubG9ja19jYXMgY2tfc3BpbmxvY2tfY2FzX3Q7Ci0K
LSNkZWZpbmUgQ0tfU1BJTkxPQ0tfQ0FTX0lOSVRJQUxJWkVSIHtmYWxzZX0KLQotQ0tfQ0NfSU5M
SU5FIHN0YXRpYyB2b2lkCi1ja19zcGlubG9ja19jYXNfaW5pdChzdHJ1Y3QgY2tfc3BpbmxvY2tf
Y2FzICpsb2NrKQotewotCi0JbG9jay0+dmFsdWUgPSBmYWxzZTsKLQlja19wcl9iYXJyaWVyKCk7
Ci0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wKLWNrX3NwaW5sb2NrX2Nh
c190cnlsb2NrKHN0cnVjdCBja19zcGlubG9ja19jYXMgKmxvY2spCi17Ci0JdW5zaWduZWQgaW50
IHZhbHVlOwotCi0JdmFsdWUgPSBja19wcl9mYXNfdWludCgmbG9jay0+dmFsdWUsIHRydWUpOwot
CWNrX3ByX2ZlbmNlX2xvY2soKTsKLQlyZXR1cm4gIXZhbHVlOwotfQotCi1DS19DQ19JTkxJTkUg
c3RhdGljIGJvb2wKLWNrX3NwaW5sb2NrX2Nhc19sb2NrZWQoc3RydWN0IGNrX3NwaW5sb2NrX2Nh
cyAqbG9jaykKLXsKLQlib29sIHIgPSBja19wcl9sb2FkX3VpbnQoJmxvY2stPnZhbHVlKTsKLQot
CWNrX3ByX2ZlbmNlX2FjcXVpcmUoKTsKLQlyZXR1cm4gcjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0
YXRpYyB2b2lkCi1ja19zcGlubG9ja19jYXNfbG9jayhzdHJ1Y3QgY2tfc3BpbmxvY2tfY2FzICps
b2NrKQotewotCi0Jd2hpbGUgKGNrX3ByX2Nhc191aW50KCZsb2NrLT52YWx1ZSwgZmFsc2UsIHRy
dWUpID09IGZhbHNlKSB7Ci0JCXdoaWxlIChja19wcl9sb2FkX3VpbnQoJmxvY2stPnZhbHVlKSA9
PSB0cnVlKQotCQkJY2tfcHJfc3RhbGwoKTsKLQl9Ci0KLQlja19wcl9mZW5jZV9sb2NrKCk7Ci0J
cmV0dXJuOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3NwaW5sb2NrX2Nhc19s
b2NrX2ViKHN0cnVjdCBja19zcGlubG9ja19jYXMgKmxvY2spCi17Ci0JY2tfYmFja29mZl90IGJh
Y2tvZmYgPSBDS19CQUNLT0ZGX0lOSVRJQUxJWkVSOwotCi0Jd2hpbGUgKGNrX3ByX2Nhc191aW50
KCZsb2NrLT52YWx1ZSwgZmFsc2UsIHRydWUpID09IGZhbHNlKQotCQlja19iYWNrb2ZmX2ViKCZi
YWNrb2ZmKTsKLQotCWNrX3ByX2ZlbmNlX2xvY2soKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lO
TElORSBzdGF0aWMgdm9pZAotY2tfc3BpbmxvY2tfY2FzX3VubG9jayhzdHJ1Y3QgY2tfc3Bpbmxv
Y2tfY2FzICpsb2NrKQotewotCi0JLyogU2V0IGxvY2sgc3RhdGUgdG8gdW5sb2NrZWQuICovCi0J
Y2tfcHJfZmVuY2VfdW5sb2NrKCk7Ci0JY2tfcHJfc3RvcmVfdWludCgmbG9jay0+dmFsdWUsIGZh
bHNlKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0VMSURFX1BST1RPVFlQRShja19zcGlubG9ja19jYXMs
IGNrX3NwaW5sb2NrX2Nhc190LAotICAgIGNrX3NwaW5sb2NrX2Nhc19sb2NrZWQsIGNrX3NwaW5s
b2NrX2Nhc19sb2NrLAotICAgIGNrX3NwaW5sb2NrX2Nhc19sb2NrZWQsIGNrX3NwaW5sb2NrX2Nh
c191bmxvY2spCi0KLUNLX0VMSURFX1RSWUxPQ0tfUFJPVE9UWVBFKGNrX3NwaW5sb2NrX2Nhcywg
Y2tfc3BpbmxvY2tfY2FzX3QsCi0gICAgY2tfc3BpbmxvY2tfY2FzX2xvY2tlZCwgY2tfc3Bpbmxv
Y2tfY2FzX3RyeWxvY2spCi0KLSNlbmRpZiAvKiBDS19GX1NQSU5MT0NLX0NBUyAqLwotI2VuZGlm
IC8qIENLX1NQSU5MT0NLX0NBU19IICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9pbmNsdWRlL3NwaW5sb2NrL2NsaC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9zcGlubG9jay9jbGguaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMTEzMzgwNjEyMDQxN2ZmZTk3NzQwMDM3ZGQ2ZjdjOTYyYTQ5ZTVkZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL3NwaW5sb2NrL2NsaC5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMC0yMDE1IFNhbXkgQWwgQmFo
cmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ0tfU1BJTkxPQ0tfQ0xI
X0gKLSNkZWZpbmUgQ0tfU1BJTkxPQ0tfQ0xIX0gKLQotI2luY2x1ZGUgPGNrX2NjLmg+Ci0jaW5j
bHVkZSA8Y2tfbGltaXRzLmg+Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19zdGRi
b29sLmg+Ci0jaW5jbHVkZSA8Y2tfc3RkZGVmLmg+Ci0KLSNpZm5kZWYgQ0tfRl9TUElOTE9DS19D
TEgKLSNkZWZpbmUgQ0tfRl9TUElOTE9DS19DTEgKLQotc3RydWN0IGNrX3NwaW5sb2NrX2NsaCB7
Ci0JdW5zaWduZWQgaW50IHdhaXQ7Ci0Jc3RydWN0IGNrX3NwaW5sb2NrX2NsaCAqcHJldmlvdXM7
Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tfc3BpbmxvY2tfY2xoIGNrX3NwaW5sb2NrX2NsaF90Owot
Ci1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3NwaW5sb2NrX2NsaF9pbml0KHN0cnVjdCBj
a19zcGlubG9ja19jbGggKipsb2NrLCBzdHJ1Y3QgY2tfc3BpbmxvY2tfY2xoICp1bm93bmVkKQot
ewotCi0JdW5vd25lZC0+cHJldmlvdXMgPSBOVUxMOwotCXVub3duZWQtPndhaXQgPSBmYWxzZTsK
LQkqbG9jayA9IHVub3duZWQ7Ci0JY2tfcHJfYmFycmllcigpOwotCXJldHVybjsKLX0KLQotQ0tf
Q0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19zcGlubG9ja19jbGhfbG9ja2VkKHN0cnVjdCBja19z
cGlubG9ja19jbGggKipxdWV1ZSkKLXsKLQlzdHJ1Y3QgY2tfc3BpbmxvY2tfY2xoICpoZWFkOwot
CWJvb2wgcjsKLQotCWhlYWQgPSBja19wcl9sb2FkX3B0cihxdWV1ZSk7Ci0JciA9IGNrX3ByX2xv
YWRfdWludCgmaGVhZC0+d2FpdCk7Ci0JY2tfcHJfZmVuY2VfYWNxdWlyZSgpOwotCXJldHVybiBy
OwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3NwaW5sb2NrX2NsaF9sb2NrKHN0
cnVjdCBja19zcGlubG9ja19jbGggKipxdWV1ZSwgc3RydWN0IGNrX3NwaW5sb2NrX2NsaCAqdGhy
ZWFkKQotewotCXN0cnVjdCBja19zcGlubG9ja19jbGggKnByZXZpb3VzOwotCi0JLyogSW5kaWNh
dGUgdG8gdGhlIG5leHQgdGhyZWFkIG9uIHF1ZXVlIHRoYXQgdGhleSB3aWxsIGhhdmUgdG8gYmxv
Y2suICovCi0JdGhyZWFkLT53YWl0ID0gdHJ1ZTsKLQlja19wcl9mZW5jZV9zdG9yZV9hdG9taWMo
KTsKLQotCS8qCi0JICogTWFyayBjdXJyZW50IHJlcXVlc3QgYXMgbGFzdCByZXF1ZXN0LiBTYXZl
IHJlZmVyZW5jZSB0byBwcmV2aW91cwotCSAqIHJlcXVlc3QuCi0JICovCi0JcHJldmlvdXMgPSBj
a19wcl9mYXNfcHRyKHF1ZXVlLCB0aHJlYWQpOwotCXRocmVhZC0+cHJldmlvdXMgPSBwcmV2aW91
czsKLQotCS8qIFdhaXQgdW50aWwgcHJldmlvdXMgdGhyZWFkIGlzIGRvbmUgd2l0aCBsb2NrLiAq
LwotCWNrX3ByX2ZlbmNlX2xvYWQoKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZwcmV2aW91
cy0+d2FpdCkgPT0gdHJ1ZSkKLQkJY2tfcHJfc3RhbGwoKTsKLQotCWNrX3ByX2ZlbmNlX2xvY2so
KTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfc3BpbmxvY2tf
Y2xoX3VubG9jayhzdHJ1Y3QgY2tfc3BpbmxvY2tfY2xoICoqdGhyZWFkKQotewotCXN0cnVjdCBj
a19zcGlubG9ja19jbGggKnByZXZpb3VzOwotCi0JLyoKLQkgKiBJZiB0aGVyZSBhcmUgd2FpdGVy
cywgdGhleSBhcmUgc3Bpbm5pbmcgb24gdGhlIGN1cnJlbnQgbm9kZSB3YWl0Ci0JICogZmxhZy4g
VGhlIGZsYWcgaXMgY2xlYXJlZCBzbyB0aGF0IHRoZSBzdWNjZXNzb3IgbWF5IGNvbXBsZXRlIGFu
Ci0JICogYWNxdWlzaXRpb24uIElmIHRoZSBjYWxsZXIgaXMgcHJlLWVtcHRlZCB0aGVuIHRoZSBw
cmVkZWNlc3NvciBmaWVsZAotCSAqIG1heSBiZSB1cGRhdGVkIGJ5IGEgc3VjY2Vzc29yJ3MgbG9j
ayBvcGVyYXRpb24uIEluIG9yZGVyIHRvIGF2b2lkCi0JICogdGhpcywgc2F2ZSBhIGNvcHkgb2Yg
dGhlIHByZWRlY2Vzc29yIGJlZm9yZSBzZXR0aW5nIHRoZSBmbGFnLgotCSAqLwotCXByZXZpb3Vz
ID0gdGhyZWFkWzBdLT5wcmV2aW91czsKLQotCS8qCi0JICogV2UgaGF2ZSB0byBwYXkgdGhpcyBj
b3N0IGFueXdheXMsIHVzZSBpdCBhcyBhIGNvbXBpbGVyIGJhcnJpZXIgdG9vLgotCSAqLwotCWNr
X3ByX2ZlbmNlX3VubG9jaygpOwotCWNrX3ByX3N0b3JlX3VpbnQoJigqdGhyZWFkKS0+d2FpdCwg
ZmFsc2UpOwotCi0JLyoKLQkgKiBQcmVkZWNlc3NvciBpcyBndWFyYW50ZWVkIG5vdCB0byBiZSBz
cGlubmluZyBvbiBwcmV2aW91cyByZXF1ZXN0LAotCSAqIHNvIHVwZGF0ZSBjYWxsZXIgdG8gdXNl
IHByZXZpb3VzIHN0cnVjdHVyZS4gVGhpcyBhbGxvd3Mgc3VjY2Vzc29yCi0JICogYWxsIHRoZSB0
aW1lIGluIHRoZSB3b3JsZCB0byBzdWNjZXNzZnVsbHkgcmVhZCB1cGRhdGVkIHdhaXQgZmxhZy4K
LQkgKi8KLQkqdGhyZWFkID0gcHJldmlvdXM7Ci0JcmV0dXJuOwotfQotI2VuZGlmIC8qIENLX0Zf
U1BJTkxPQ0tfQ0xIICovCi0jZW5kaWYgLyogQ0tfU1BJTkxPQ0tfQ0xIX0ggKi8KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvc3BpbmxvY2svZGVj
LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL3NwaW5sb2NrL2Rl
Yy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTM2YmY3NjEyYTRkZTIxMDRmOWE2
MWY1YjE5ODUzOTNmZmUzNTA5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2luY2x1ZGUvc3Bpbmxv
Y2svZGVjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAyMDEwLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBDS19TUElOTE9DS19ERUNfSAotI2RlZmluZSBDS19TUElOTE9DS19ERUNfSAotCi0j
aW5jbHVkZSA8Y2tfYmFja29mZi5oPgotI2luY2x1ZGUgPGNrX2NjLmg+Ci0jaW5jbHVkZSA8Y2tf
ZWxpZGUuaD4KLSNpbmNsdWRlIDxja19wci5oPgotI2luY2x1ZGUgPGNrX3N0ZGJvb2wuaD4KLQot
I2lmbmRlZiBDS19GX1NQSU5MT0NLX0RFQwotI2RlZmluZSBDS19GX1NQSU5MT0NLX0RFQwotLyoK
LSAqIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgQ0FDQVMgbG9jayBidXQgbWFrZXMgdXNlIG9mIGFu
IGF0b21pYyBkZWNyZW1lbnQKLSAqIG9wZXJhdGlvbiB0byBjaGVjayBpZiB0aGUgbG9jayB2YWx1
ZSB3YXMgZGVjcmVtZW50ZWQgdG8gMCBmcm9tIDEuIFRoZQotICogaWRlYSBpcyB0aGF0IGEgZGVj
cmVtZW50IG9wZXJhdGlvbiBpcyBjaGVhcGVyIHRoYW4gYSBjb21wYXJlLWFuZC1zd2FwLgotICov
Ci1zdHJ1Y3QgY2tfc3BpbmxvY2tfZGVjIHsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci19OwotdHlw
ZWRlZiBzdHJ1Y3QgY2tfc3BpbmxvY2tfZGVjIGNrX3NwaW5sb2NrX2RlY190OwotCi0jZGVmaW5l
IENLX1NQSU5MT0NLX0RFQ19JTklUSUFMSVpFUgl7MX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2
b2lkCi1ja19zcGlubG9ja19kZWNfaW5pdChzdHJ1Y3QgY2tfc3BpbmxvY2tfZGVjICpsb2NrKQot
ewotCi0JbG9jay0+dmFsdWUgPSAxOwotCWNrX3ByX2JhcnJpZXIoKTsKLQlyZXR1cm47Ci19Ci0K
LUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfc3BpbmxvY2tfZGVjX3RyeWxvY2soc3RydWN0
IGNrX3NwaW5sb2NrX2RlYyAqbG9jaykKLXsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLQl2YWx1
ZSA9IGNrX3ByX2Zhc191aW50KCZsb2NrLT52YWx1ZSwgMCk7Ci0JY2tfcHJfZmVuY2VfbG9jaygp
OwotCXJldHVybiB2YWx1ZSA9PSAxOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wKLWNr
X3NwaW5sb2NrX2RlY19sb2NrZWQoc3RydWN0IGNrX3NwaW5sb2NrX2RlYyAqbG9jaykKLXsKLQli
b29sIHI7Ci0KLQlyID0gY2tfcHJfbG9hZF91aW50KCZsb2NrLT52YWx1ZSkgIT0gMTsKLQlja19w
cl9mZW5jZV9hY3F1aXJlKCk7Ci0JcmV0dXJuIHI7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMg
dm9pZAotY2tfc3BpbmxvY2tfZGVjX2xvY2soc3RydWN0IGNrX3NwaW5sb2NrX2RlYyAqbG9jaykK
LXsKLQlib29sIHI7Ci0KLQlmb3IgKDs7KSB7Ci0JCS8qCi0JCSAqIE9ubHkgb25lIHRocmVhZCBp
cyBndWFyYW50ZWVkIHRvIGRlY3JlbWVudCBsb2NrIHRvIDAuCi0JCSAqIE92ZXJmbG93IG11c3Qg
YmUgcHJvdGVjdGVkIGFnYWluc3QuIE5vIG1vcmUgdGhhbgotCQkgKiBVSU5UX01BWCBsb2NrIHJl
cXVlc3RzIGNhbiBoYXBwZW4gd2hpbGUgdGhlIGxvY2sgaXMgaGVsZC4KLQkJICovCi0JCWNrX3By
X2RlY191aW50X3plcm8oJmxvY2stPnZhbHVlLCAmcik7Ci0JCWlmIChyID09IHRydWUpCi0JCQli
cmVhazsKLQotCQkvKiBMb2FkIHZhbHVlIHdpdGhvdXQgZ2VuZXJhdGluZyB3cml0ZSBjeWNsZXMu
ICovCi0JCXdoaWxlIChja19wcl9sb2FkX3VpbnQoJmxvY2stPnZhbHVlKSAhPSAxKQotCQkJY2tf
cHJfc3RhbGwoKTsKLQl9Ci0KLQlja19wcl9mZW5jZV9sb2NrKCk7Ci0JcmV0dXJuOwotfQotCi1D
S19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3NwaW5sb2NrX2RlY19sb2NrX2ViKHN0cnVjdCBj
a19zcGlubG9ja19kZWMgKmxvY2spCi17Ci0JY2tfYmFja29mZl90IGJhY2tvZmYgPSBDS19CQUNL
T0ZGX0lOSVRJQUxJWkVSOwotCWJvb2wgcjsKLQotCWZvciAoOzspIHsKLQkJY2tfcHJfZGVjX3Vp
bnRfemVybygmbG9jay0+dmFsdWUsICZyKTsKLQkJaWYgKHIgPT0gdHJ1ZSkKLQkJCWJyZWFrOwot
Ci0JCXdoaWxlIChja19wcl9sb2FkX3VpbnQoJmxvY2stPnZhbHVlKSAhPSAxKQotCQkJY2tfYmFj
a29mZl9lYigmYmFja29mZik7Ci0JfQotCi0JY2tfcHJfZmVuY2VfbG9jaygpOwotCXJldHVybjsK
LX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19zcGlubG9ja19kZWNfdW5sb2NrKHN0
cnVjdCBja19zcGlubG9ja19kZWMgKmxvY2spCi17Ci0KLQlja19wcl9mZW5jZV91bmxvY2soKTsK
LQotCS8qCi0JICogVW5jb25kaXRpb25hbGx5IHNldCBsb2NrIHZhbHVlIHRvIDEgc28gc29tZW9u
ZSBjYW4gZGVjcmVtZW50IGxvY2sKLQkgKiB0byAwLgotCSAqLwotCWNrX3ByX3N0b3JlX3VpbnQo
JmxvY2stPnZhbHVlLCAxKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0VMSURFX1BST1RPVFlQRShja19z
cGlubG9ja19kZWMsIGNrX3NwaW5sb2NrX2RlY190LAotICAgIGNrX3NwaW5sb2NrX2RlY19sb2Nr
ZWQsIGNrX3NwaW5sb2NrX2RlY19sb2NrLAotICAgIGNrX3NwaW5sb2NrX2RlY19sb2NrZWQsIGNr
X3NwaW5sb2NrX2RlY191bmxvY2spCi0KLUNLX0VMSURFX1RSWUxPQ0tfUFJPVE9UWVBFKGNrX3Nw
aW5sb2NrX2RlYywgY2tfc3BpbmxvY2tfZGVjX3QsCi0gICAgY2tfc3BpbmxvY2tfZGVjX2xvY2tl
ZCwgY2tfc3BpbmxvY2tfZGVjX3RyeWxvY2spCi0KLSNlbmRpZiAvKiBDS19GX1NQSU5MT0NLX0RF
QyAqLwotI2VuZGlmIC8qIENLX1NQSU5MT0NLX0RFQ19IICovCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL3NwaW5sb2NrL2Zhcy5oIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9zcGlubG9jay9mYXMuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU2YzEyMzBlYWYxZWRmNmUxZDVmN2RlNzhlYTdiNGNh
OWI0YzdmMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL3NwaW5sb2NrL2Zhcy5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMC0yMDE1
IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAq
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK
LSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ0tf
U1BJTkxPQ0tfRkFTX0gKLSNkZWZpbmUgQ0tfU1BJTkxPQ0tfRkFTX0gKLQotI2luY2x1ZGUgPGNr
X2JhY2tvZmYuaD4KLSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNrX2VsaWRlLmg+Ci0j
aW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19zdGRib29sLmg+Ci0KLSNpZm5kZWYgQ0tf
Rl9TUElOTE9DS19GQVMKLSNkZWZpbmUgQ0tfRl9TUElOTE9DS19GQVMKLQotc3RydWN0IGNrX3Nw
aW5sb2NrX2ZhcyB7Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotfTsKLXR5cGVkZWYgc3RydWN0IGNr
X3NwaW5sb2NrX2ZhcyBja19zcGlubG9ja19mYXNfdDsKLQotI2RlZmluZSBDS19TUElOTE9DS19G
QVNfSU5JVElBTElaRVIge2ZhbHNlfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3Nw
aW5sb2NrX2Zhc19pbml0KHN0cnVjdCBja19zcGlubG9ja19mYXMgKmxvY2spCi17Ci0KLQlsb2Nr
LT52YWx1ZSA9IGZhbHNlOwotCWNrX3ByX2JhcnJpZXIoKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0ND
X0lOTElORSBzdGF0aWMgYm9vbAotY2tfc3BpbmxvY2tfZmFzX3RyeWxvY2soc3RydWN0IGNrX3Nw
aW5sb2NrX2ZhcyAqbG9jaykKLXsKLQlib29sIHZhbHVlOwotCi0JdmFsdWUgPSBja19wcl9mYXNf
dWludCgmbG9jay0+dmFsdWUsIHRydWUpOwotCWNrX3ByX2ZlbmNlX2xvY2soKTsKLQotCXJldHVy
biAhdmFsdWU7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAotY2tfc3BpbmxvY2tfZmFz
X2xvY2tlZChzdHJ1Y3QgY2tfc3BpbmxvY2tfZmFzICpsb2NrKQotewotCWJvb2wgcjsKLQotCXIg
PSBja19wcl9sb2FkX3VpbnQoJmxvY2stPnZhbHVlKTsKLQlja19wcl9mZW5jZV9hY3F1aXJlKCk7
Ci0JcmV0dXJuIHI7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfc3BpbmxvY2tf
ZmFzX2xvY2soc3RydWN0IGNrX3NwaW5sb2NrX2ZhcyAqbG9jaykKLXsKLQotCXdoaWxlIChja19w
cl9mYXNfdWludCgmbG9jay0+dmFsdWUsIHRydWUpID09IHRydWUpIHsKLQkJd2hpbGUgKGNrX3By
X2xvYWRfdWludCgmbG9jay0+dmFsdWUpID09IHRydWUpCi0JCQlja19wcl9zdGFsbCgpOwotCX0K
LQotCWNrX3ByX2ZlbmNlX2xvY2soKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0
aWMgdm9pZAotY2tfc3BpbmxvY2tfZmFzX2xvY2tfZWIoc3RydWN0IGNrX3NwaW5sb2NrX2ZhcyAq
bG9jaykKLXsKLQlja19iYWNrb2ZmX3QgYmFja29mZiA9IENLX0JBQ0tPRkZfSU5JVElBTElaRVI7
Ci0KLQl3aGlsZSAoY2tfcHJfZmFzX3VpbnQoJmxvY2stPnZhbHVlLCB0cnVlKSA9PSB0cnVlKQot
CQlja19iYWNrb2ZmX2ViKCZiYWNrb2ZmKTsKLQotCWNrX3ByX2ZlbmNlX2xvY2soKTsKLQlyZXR1
cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfc3BpbmxvY2tfZmFzX3VubG9j
ayhzdHJ1Y3QgY2tfc3BpbmxvY2tfZmFzICpsb2NrKQotewotCi0JY2tfcHJfZmVuY2VfdW5sb2Nr
KCk7Ci0JY2tfcHJfc3RvcmVfdWludCgmbG9jay0+dmFsdWUsIGZhbHNlKTsKLQlyZXR1cm47Ci19
Ci0KLUNLX0VMSURFX1BST1RPVFlQRShja19zcGlubG9ja19mYXMsIGNrX3NwaW5sb2NrX2Zhc190
LAotICAgIGNrX3NwaW5sb2NrX2Zhc19sb2NrZWQsIGNrX3NwaW5sb2NrX2Zhc19sb2NrLAotICAg
IGNrX3NwaW5sb2NrX2Zhc19sb2NrZWQsIGNrX3NwaW5sb2NrX2Zhc191bmxvY2spCi0KLUNLX0VM
SURFX1RSWUxPQ0tfUFJPVE9UWVBFKGNrX3NwaW5sb2NrX2ZhcywgY2tfc3BpbmxvY2tfZmFzX3Qs
Ci0gICAgY2tfc3BpbmxvY2tfZmFzX2xvY2tlZCwgY2tfc3BpbmxvY2tfZmFzX3RyeWxvY2spCi0K
LSNlbmRpZiAvKiBDS19GX1NQSU5MT0NLX0ZBUyAqLwotI2VuZGlmIC8qIENLX1NQSU5MT0NLX0ZB
U19IICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNs
dWRlL3NwaW5sb2NrL2hjbGguaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL2lu
Y2x1ZGUvc3BpbmxvY2svaGNsaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTY0
NDhiNGUyMDRkOTJhMDUzNDlkNGNjMDVhYWY5ZTYzMmQzNWUyLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2NrL2luY2x1ZGUvc3BpbmxvY2svaGNsaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMy0yMDE1IE9saXZpZXIgSG91Y2hhcmQKLSAqIENvcHly
aWdodCAyMDEwLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBDS19TUElOTE9DS19IQ0xIX0gKLSNkZWZpbmUgQ0tfU1BJTkxPQ0tfSENMSF9I
Ci0KLSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNrX3ByLmg+Ci0jaW5jbHVkZSA8Y2tf
c3RkYm9vbC5oPgotI2luY2x1ZGUgPGNrX3N0ZGRlZi5oPgotCi0jaWZuZGVmIENLX0ZfU1BJTkxP
Q0tfSENMSAotI2RlZmluZSBDS19GX1NQSU5MT0NLX0hDTEgKLXN0cnVjdCBja19zcGlubG9ja19o
Y2xoIHsKLQl1bnNpZ25lZCBpbnQgd2FpdDsKLQl1bnNpZ25lZCBpbnQgc3BsaWNlOwotCWludCBj
bHVzdGVyX2lkOwotCXN0cnVjdCBja19zcGlubG9ja19oY2xoICpwcmV2aW91czsKLX07Ci10eXBl
ZGVmIHN0cnVjdCBja19zcGlubG9ja19oY2xoIGNrX3NwaW5sb2NrX2hjbGhfdDsKLQotQ0tfQ0Nf
SU5MSU5FIHN0YXRpYyB2b2lkCi1ja19zcGlubG9ja19oY2xoX2luaXQoc3RydWN0IGNrX3NwaW5s
b2NrX2hjbGggKipsb2NrLAotICAgIHN0cnVjdCBja19zcGlubG9ja19oY2xoICp1bm93bmVkLAot
ICAgIGludCBjbHVzdGVyX2lkKQotewotCi0JdW5vd25lZC0+cHJldmlvdXMgPSBOVUxMOwotCXVu
b3duZWQtPndhaXQgPSBmYWxzZTsKLQl1bm93bmVkLT5zcGxpY2UgPSBmYWxzZTsKLQl1bm93bmVk
LT5jbHVzdGVyX2lkID0gY2x1c3Rlcl9pZDsKLQkqbG9jayA9IHVub3duZWQ7Ci0JY2tfcHJfYmFy
cmllcigpOwotCXJldHVybjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19zcGlu
bG9ja19oY2xoX2xvY2tlZChzdHJ1Y3QgY2tfc3BpbmxvY2tfaGNsaCAqKnF1ZXVlKQotewotCXN0
cnVjdCBja19zcGlubG9ja19oY2xoICpoZWFkOwotCWJvb2wgcjsKLQotCWhlYWQgPSBja19wcl9s
b2FkX3B0cihxdWV1ZSk7Ci0JciA9IGNrX3ByX2xvYWRfdWludCgmaGVhZC0+d2FpdCk7Ci0JY2tf
cHJfZmVuY2VfYWNxdWlyZSgpOwotCXJldHVybiByOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGlj
IHZvaWQKLWNrX3NwaW5sb2NrX2hjbGhfbG9jayhzdHJ1Y3QgY2tfc3BpbmxvY2tfaGNsaCAqKmds
b2JfcXVldWUsCi0gICAgc3RydWN0IGNrX3NwaW5sb2NrX2hjbGggKipsb2NhbF9xdWV1ZSwKLSAg
ICBzdHJ1Y3QgY2tfc3BpbmxvY2tfaGNsaCAqdGhyZWFkKQotewotCXN0cnVjdCBja19zcGlubG9j
a19oY2xoICpwcmV2aW91cywgKmxvY2FsX3RhaWw7Ci0KLQkvKiBJbmRpY2F0ZSB0byB0aGUgbmV4
dCB0aHJlYWQgb24gcXVldWUgdGhhdCB0aGV5IHdpbGwgaGF2ZSB0byBibG9jay4gKi8KLQl0aHJl
YWQtPndhaXQgPSB0cnVlOwotCXRocmVhZC0+c3BsaWNlID0gZmFsc2U7Ci0JdGhyZWFkLT5jbHVz
dGVyX2lkID0gKCpsb2NhbF9xdWV1ZSktPmNsdXN0ZXJfaWQ7Ci0KLQkvKiBTZXJpYWxpemUgd2l0
aCByZXNwZWN0IHRvIHVwZGF0ZSBvZiBsb2NhbCBxdWV1ZS4gKi8KLQlja19wcl9mZW5jZV9zdG9y
ZV9hdG9taWMoKTsKLQotCS8qIE1hcmsgY3VycmVudCByZXF1ZXN0IGFzIGxhc3QgcmVxdWVzdC4g
U2F2ZSByZWZlcmVuY2UgdG8gcHJldmlvdXMgcmVxdWVzdC4gKi8KLQlwcmV2aW91cyA9IGNrX3By
X2Zhc19wdHIobG9jYWxfcXVldWUsIHRocmVhZCk7Ci0JdGhyZWFkLT5wcmV2aW91cyA9IHByZXZp
b3VzOwotCi0JLyogV2FpdCB1bnRpbCBwcmV2aW91cyB0aHJlYWQgZnJvbSB0aGUgbG9jYWwgcXVl
dWUgaXMgZG9uZSB3aXRoIGxvY2suICovCi0JY2tfcHJfZmVuY2VfbG9hZCgpOwotCWlmIChwcmV2
aW91cy0+cHJldmlvdXMgIT0gTlVMTCAmJgotCSAgICBwcmV2aW91cy0+Y2x1c3Rlcl9pZCA9PSB0
aHJlYWQtPmNsdXN0ZXJfaWQpIHsKLQkJd2hpbGUgKGNrX3ByX2xvYWRfdWludCgmcHJldmlvdXMt
PndhaXQpID09IHRydWUpCi0JCQlja19wcl9zdGFsbCgpOwotCi0JCS8qIFdlJ3JlIGhlYWQgb2Yg
dGhlIGdsb2JhbCBxdWV1ZSwgd2UncmUgZG9uZSAqLwotCQlpZiAoY2tfcHJfbG9hZF91aW50KCZw
cmV2aW91cy0+c3BsaWNlKSA9PSBmYWxzZSkKLQkJCXJldHVybjsKLQl9Ci0KLQkvKiBOb3cgd2Ug
bmVlZCB0byBzcGxpY2UgdGhlIGxvY2FsIHF1ZXVlIGludG8gdGhlIGdsb2JhbCBxdWV1ZS4gKi8K
LQlsb2NhbF90YWlsID0gY2tfcHJfbG9hZF9wdHIobG9jYWxfcXVldWUpOwotCXByZXZpb3VzID0g
Y2tfcHJfZmFzX3B0cihnbG9iX3F1ZXVlLCBsb2NhbF90YWlsKTsKLQotCWNrX3ByX3N0b3JlX3Vp
bnQoJmxvY2FsX3RhaWwtPnNwbGljZSwgdHJ1ZSk7Ci0KLQkvKiBXYWl0IHVudGlsIHByZXZpb3Vz
IHRocmVhZCBmcm9tIHRoZSBnbG9iYWwgcXVldWUgaXMgZG9uZSB3aXRoIGxvY2suICovCi0Jd2hp
bGUgKGNrX3ByX2xvYWRfdWludCgmcHJldmlvdXMtPndhaXQpID09IHRydWUpCi0JCWNrX3ByX3N0
YWxsKCk7Ci0KLQlja19wcl9mZW5jZV9sb2NrKCk7Ci0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJ
TkUgc3RhdGljIHZvaWQKLWNrX3NwaW5sb2NrX2hjbGhfdW5sb2NrKHN0cnVjdCBja19zcGlubG9j
a19oY2xoICoqdGhyZWFkKQotewotCXN0cnVjdCBja19zcGlubG9ja19oY2xoICpwcmV2aW91czsK
LQotCS8qCi0JICogSWYgdGhlcmUgYXJlIHdhaXRlcnMsIHRoZXkgYXJlIHNwaW5uaW5nIG9uIHRo
ZSBjdXJyZW50IG5vZGUgd2FpdAotCSAqIGZsYWcuIFRoZSBmbGFnIGlzIGNsZWFyZWQgc28gdGhh
dCB0aGUgc3VjY2Vzc29yIG1heSBjb21wbGV0ZSBhbgotCSAqIGFjcXVpc2l0aW9uLiBJZiB0aGUg
Y2FsbGVyIGlzIHByZS1lbXB0ZWQgdGhlbiB0aGUgcHJlZGVjZXNzb3IgZmllbGQKLQkgKiBtYXkg
YmUgdXBkYXRlZCBieSBhIHN1Y2Nlc3NvcidzIGxvY2sgb3BlcmF0aW9uLiBJbiBvcmRlciB0byBh
dm9pZAotCSAqIHRoaXMsIHNhdmUgYSBjb3B5IG9mIHRoZSBwcmVkZWNlc3NvciBiZWZvcmUgc2V0
dGluZyB0aGUgZmxhZy4KLQkgKi8KLQlwcmV2aW91cyA9IHRocmVhZFswXS0+cHJldmlvdXM7Ci0K
LQkvKiBXZSBoYXZlIHRvIHBheSB0aGlzIGNvc3QgYW55d2F5cywgdXNlIGl0IGFzIGEgY29tcGls
ZXIgYmFycmllciB0b28uICovCi0JY2tfcHJfZmVuY2VfdW5sb2NrKCk7Ci0JY2tfcHJfc3RvcmVf
dWludCgmKCp0aHJlYWQpLT53YWl0LCBmYWxzZSk7Ci0KLQkvKgotCSAqIFByZWRlY2Vzc29yIGlz
IGd1YXJhbnRlZWQgbm90IHRvIGJlIHNwaW5uaW5nIG9uIHByZXZpb3VzIHJlcXVlc3QsCi0JICog
c28gdXBkYXRlIGNhbGxlciB0byB1c2UgcHJldmlvdXMgc3RydWN0dXJlLiBUaGlzIGFsbG93cyBz
dWNjZXNzb3IKLQkgKiBhbGwgdGhlIHRpbWUgaW4gdGhlIHdvcmxkIHRvIHN1Y2Nlc3NmdWxseSBy
ZWFkIHVwZGF0ZWQgd2FpdCBmbGFnLgotCSAqLwotCSp0aHJlYWQgPSBwcmV2aW91czsKLQlyZXR1
cm47Ci19Ci0jZW5kaWYgLyogQ0tfRl9TUElOTE9DS19IQ0xIICovCi0jZW5kaWYgLyogQ0tfU1BJ
TkxPQ0tfSENMSF9IICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9pbmNsdWRlL3NwaW5sb2NrL21jcy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvY2svaW5jbHVkZS9zcGlubG9jay9tY3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjYyYzcyMDVjNmVkZDkxMmU2NTM5NjhlZGU3NTZlNWEyMTE0MjU2My4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9pbmNsdWRlL3NwaW5sb2NrL21jcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMC0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICog
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK
LSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ0tfU1BJTkxPQ0tfTUNTX0gKLSNkZWZp
bmUgQ0tfU1BJTkxPQ0tfTUNTX0gKLQotI2luY2x1ZGUgPGNrX2NjLmg+Ci0jaW5jbHVkZSA8Y2tf
cHIuaD4KLSNpbmNsdWRlIDxja19zdGRib29sLmg+Ci0jaW5jbHVkZSA8Y2tfc3RkZGVmLmg+Ci0K
LSNpZm5kZWYgQ0tfRl9TUElOTE9DS19NQ1MKLSNkZWZpbmUgQ0tfRl9TUElOTE9DS19NQ1MKLQot
c3RydWN0IGNrX3NwaW5sb2NrX21jcyB7Ci0JdW5zaWduZWQgaW50IGxvY2tlZDsKLQlzdHJ1Y3Qg
Y2tfc3BpbmxvY2tfbWNzICpuZXh0OwotfTsKLXR5cGVkZWYgc3RydWN0IGNrX3NwaW5sb2NrX21j
cyAqIGNrX3NwaW5sb2NrX21jc190OwotdHlwZWRlZiBzdHJ1Y3QgY2tfc3BpbmxvY2tfbWNzIGNr
X3NwaW5sb2NrX21jc19jb250ZXh0X3Q7Ci0KLSNkZWZpbmUgQ0tfU1BJTkxPQ0tfTUNTX0lOSVRJ
QUxJWkVSCSAgICAoTlVMTCkKLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19zcGlubG9j
a19tY3NfaW5pdChzdHJ1Y3QgY2tfc3BpbmxvY2tfbWNzICoqcXVldWUpCi17Ci0KLQkqcXVldWUg
PSBOVUxMOwotCWNrX3ByX2JhcnJpZXIoKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBz
dGF0aWMgYm9vbAotY2tfc3BpbmxvY2tfbWNzX3RyeWxvY2soc3RydWN0IGNrX3NwaW5sb2NrX21j
cyAqKnF1ZXVlLAotICAgIHN0cnVjdCBja19zcGlubG9ja19tY3MgKm5vZGUpCi17Ci0JYm9vbCBy
OwotCi0Jbm9kZS0+bG9ja2VkID0gdHJ1ZTsKLQlub2RlLT5uZXh0ID0gTlVMTDsKLQlja19wcl9m
ZW5jZV9zdG9yZV9hdG9taWMoKTsKLQotCXIgPSBja19wcl9jYXNfcHRyKHF1ZXVlLCBOVUxMLCBu
b2RlKTsKLQlja19wcl9mZW5jZV9sb2NrKCk7Ci0JcmV0dXJuIHI7Ci19Ci0KLUNLX0NDX0lOTElO
RSBzdGF0aWMgYm9vbAotY2tfc3BpbmxvY2tfbWNzX2xvY2tlZChzdHJ1Y3QgY2tfc3BpbmxvY2tf
bWNzICoqcXVldWUpCi17Ci0JYm9vbCByOwotCi0JciA9IGNrX3ByX2xvYWRfcHRyKHF1ZXVlKSAh
PSBOVUxMOwotCWNrX3ByX2ZlbmNlX2FjcXVpcmUoKTsKLQlyZXR1cm4gcjsKLX0KLQotQ0tfQ0Nf
SU5MSU5FIHN0YXRpYyB2b2lkCi1ja19zcGlubG9ja19tY3NfbG9jayhzdHJ1Y3QgY2tfc3Bpbmxv
Y2tfbWNzICoqcXVldWUsCi0gICAgc3RydWN0IGNrX3NwaW5sb2NrX21jcyAqbm9kZSkKLXsKLQlz
dHJ1Y3QgY2tfc3BpbmxvY2tfbWNzICpwcmV2aW91czsKLQotCS8qCi0JICogSW4gdGhlIGNhc2Ug
dGhhdCB0aGVyZSBpcyBhIHN1Y2Nlc3NvciwgbGV0IHRoZW0ga25vdyB0aGV5IG11c3QKLQkgKiB3
YWl0IGZvciB1cyB0byB1bmxvY2suCi0JICovCi0Jbm9kZS0+bG9ja2VkID0gdHJ1ZTsKLQlub2Rl
LT5uZXh0ID0gTlVMTDsKLQlja19wcl9mZW5jZV9zdG9yZV9hdG9taWMoKTsKLQotCS8qCi0JICog
U3dhcCBjdXJyZW50IHRhaWwgd2l0aCBjdXJyZW50IGxvY2sgcmVxdWVzdC4gSWYgdGhlIHN3YXAg
b3BlcmF0aW9uCi0JICogcmV0dXJucyBOVUxMLCBpdCBtZWFucyB0aGUgcXVldWUgd2FzIGVtcHR5
LiBJZiB0aGUgcXVldWUgd2FzIGVtcHR5LAotCSAqIHRoZW4gdGhlIG9wZXJhdGlvbiBpcyBjb21w
bGV0ZS4KLQkgKi8KLQlwcmV2aW91cyA9IGNrX3ByX2Zhc19wdHIocXVldWUsIG5vZGUpOwotCWlm
IChwcmV2aW91cyAhPSBOVUxMKSB7Ci0JCS8qCi0JCSAqIExldCB0aGUgcHJldmlvdXMgbG9jayBo
b2xkZXIga25vdyB0aGF0IHdlIGFyZSB3YWl0aW5nIG9uCi0JCSAqIHRoZW0uCi0JCSAqLwotCQlj
a19wcl9zdG9yZV9wdHIoJnByZXZpb3VzLT5uZXh0LCBub2RlKTsKLQkJd2hpbGUgKGNrX3ByX2xv
YWRfdWludCgmbm9kZS0+bG9ja2VkKSA9PSB0cnVlKQotCQkJY2tfcHJfc3RhbGwoKTsKLQl9Ci0K
LQlja19wcl9mZW5jZV9sb2NrKCk7Ci0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGlj
IHZvaWQKLWNrX3NwaW5sb2NrX21jc191bmxvY2soc3RydWN0IGNrX3NwaW5sb2NrX21jcyAqKnF1
ZXVlLAotICAgIHN0cnVjdCBja19zcGlubG9ja19tY3MgKm5vZGUpCi17Ci0Jc3RydWN0IGNrX3Nw
aW5sb2NrX21jcyAqbmV4dDsKLQotCWNrX3ByX2ZlbmNlX3VubG9jaygpOwotCi0JbmV4dCA9IGNr
X3ByX2xvYWRfcHRyKCZub2RlLT5uZXh0KTsKLQlpZiAobmV4dCA9PSBOVUxMKSB7Ci0JCS8qCi0J
CSAqIElmIHRoZXJlIGlzIG5vIHJlcXVlc3QgZm9sbG93aW5nIHVzIHRoZW4gaXQgaXMgYSBwb3Nz
aWJpbHR5Ci0JCSAqIHRoYXQgd2UgYXJlIHRoZSBjdXJyZW50IHRhaWwuIEluIHRoaXMgY2FzZSwg
d2UgbWF5IGp1c3QKLQkJICogbWFyayB0aGUgc3BpbmxvY2sgcXVldWUgYXMgZW1wdHkuCi0JCSAq
LwotCQlpZiAoY2tfcHJfbG9hZF9wdHIocXVldWUpID09IG5vZGUgJiYKLQkJICAgIGNrX3ByX2Nh
c19wdHIocXVldWUsIG5vZGUsIE5VTEwpID09IHRydWUpIHsKLQkJCXJldHVybjsKLQkJfQotCi0J
CS8qCi0JCSAqIElmIHRoZSBub2RlIGlzIG5vdCB0aGUgY3VycmVudCB0YWlsIHRoZW4gYSBsb2Nr
IG9wZXJhdGlvbgotCQkgKiBpcyBpbi1wcm9ncmVzcy4gSW4gdGhpcyBjYXNlLCBidXN5LXdhaXQg
dW50aWwgdGhlIHF1ZXVlIGlzCi0JCSAqIGluIGEgY29uc2lzdGVudCBzdGF0ZSB0byB3YWtlIHVw
IHRoZSBpbmNvbWluZyBsb2NrCi0JCSAqIHJlcXVlc3QuCi0JCSAqLwotCQlmb3IgKDs7KSB7Ci0J
CQluZXh0ID0gY2tfcHJfbG9hZF9wdHIoJm5vZGUtPm5leHQpOwotCQkJaWYgKG5leHQgIT0gTlVM
TCkKLQkJCQlicmVhazsKLQotCQkJY2tfcHJfc3RhbGwoKTsKLQkJfQotCX0KLQotCS8qIEFsbG93
IHRoZSBuZXh0IGxvY2sgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLiAqLwotCWNrX3ByX3N0b3JlX3Vp
bnQoJm5leHQtPmxvY2tlZCwgZmFsc2UpOwotCXJldHVybjsKLX0KLSNlbmRpZiAvKiBDS19GX1NQ
SU5MT0NLX01DUyAqLwotI2VuZGlmIC8qIENLX1NQSU5MT0NLX01DU19IICovCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL3NwaW5sb2NrL3RpY2tl
dC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svaW5jbHVkZS9zcGlubG9jay90
aWNrZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM1ODU0NzRmNWRkZDE5ZGRj
NWExMDc1NjNjMTIwNGVkYjc1N2EyNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9pbmNsdWRlL3Nw
aW5sb2NrL3RpY2tldC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjk2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgMjAxMC0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAot
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
LSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgQ0tfU1BJTkxPQ0tfVElDS0VUX0gKLSNkZWZpbmUgQ0tfU1BJTkxPQ0tf
VElDS0VUX0gKLQotI2luY2x1ZGUgPGNrX2JhY2tvZmYuaD4KLSNpbmNsdWRlIDxja19jYy5oPgot
I2luY2x1ZGUgPGNrX2VsaWRlLmg+Ci0jaW5jbHVkZSA8Y2tfbWQuaD4KLSNpbmNsdWRlIDxja19w
ci5oPgotI2luY2x1ZGUgPGNrX3N0ZGJvb2wuaD4KLQotI2lmbmRlZiBDS19GX1NQSU5MT0NLX1RJ
Q0tFVAotI2RlZmluZSBDS19GX1NQSU5MT0NLX1RJQ0tFVAotLyoKLSAqIElmIDE2LWJpdCBvciAz
Mi1iaXQgaW5jcmVtZW50IGlzIHN1cHBvcnRlZCwgaW1wbGVtZW50IHN1cHBvcnQgZm9yCi0gKiB0
cnlsb2NrIGZ1bmN0aW9uYWxpdHkgb24gYXZhaWxhYmlsaXR5IG9mIDMyLWJpdCBvciA2NC1iaXQg
ZmV0Y2gtYW5kLWFkZAotICogYW5kIGNvbXBhcmUtYW5kLXN3YXAuIFRoaXMgY29kZSBwYXRoIGlz
IG9ubHkgYXBwbGllZCB0byB4ODYqLgotICovCi0jaWYgZGVmaW5lZChDS19NRF9UU08pICYmIChk
ZWZpbmVkKF9feDg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpCi0jaWYgZGVmaW5lZChDS19G
X1BSX0ZBQV8zMikgJiYgZGVmaW5lZChDS19GX1BSX0lOQ18xNikgJiYgZGVmaW5lZChDS19GX1BS
X0NBU18zMikKLSNkZWZpbmUgQ0tfU1BJTkxPQ0tfVElDS0VUX1RZUEUJCXVpbnQzMl90Ci0jZGVm
aW5lIENLX1NQSU5MT0NLX1RJQ0tFVF9UWVBFX0JBU0UJdWludDE2X3QKLSNkZWZpbmUgQ0tfU1BJ
TkxPQ0tfVElDS0VUX0lOQyh4KQlja19wcl9pbmNfMTYoeCkKLSNkZWZpbmUgQ0tfU1BJTkxPQ0tf
VElDS0VUX0NBUyh4LCB5LCB6KSBja19wcl9jYXNfMzIoeCwgeSwgeikKLSNkZWZpbmUgQ0tfU1BJ
TkxPQ0tfVElDS0VUX0ZBQSh4LCB5KQlja19wcl9mYWFfMzIoeCwgeSkKLSNkZWZpbmUgQ0tfU1BJ
TkxPQ0tfVElDS0VUX0xPQUQoeCkJY2tfcHJfbG9hZF8zMih4KQotI2RlZmluZSBDS19TUElOTE9D
S19USUNLRVRfSU5DUkVNRU5UCSgweDAwMDEwMDAwVUwpCi0jZGVmaW5lIENLX1NQSU5MT0NLX1RJ
Q0tFVF9NQVNLCQkoMHhGRkZGVUwpCi0jZGVmaW5lIENLX1NQSU5MT0NLX1RJQ0tFVF9TSElGVAko
MTYpCi0jZWxpZiBkZWZpbmVkKENLX0ZfUFJfRkFBXzY0KSAmJiBkZWZpbmVkKENLX0ZfUFJfSU5D
XzMyKSAmJiBkZWZpbmVkKENLX0ZfUFJfQ0FTXzY0KQotI2RlZmluZSBDS19TUElOTE9DS19USUNL
RVRfVFlQRQkJdWludDY0X3QKLSNkZWZpbmUgQ0tfU1BJTkxPQ0tfVElDS0VUX1RZUEVfQkFTRQl1
aW50MzJfdAotI2RlZmluZSBDS19TUElOTE9DS19USUNLRVRfSU5DKHgpCWNrX3ByX2luY18zMih4
KQotI2RlZmluZSBDS19TUElOTE9DS19USUNLRVRfQ0FTKHgsIHksIHopIGNrX3ByX2Nhc182NCh4
LCB5LCB6KQotI2RlZmluZSBDS19TUElOTE9DS19USUNLRVRfRkFBKHgsIHkpCWNrX3ByX2ZhYV82
NCh4LCB5KQotI2RlZmluZSBDS19TUElOTE9DS19USUNLRVRfTE9BRCh4KQlja19wcl9sb2FkXzY0
KHgpCi0jZGVmaW5lIENLX1NQSU5MT0NLX1RJQ0tFVF9JTkNSRU1FTlQJKDB4MDAwMDAwMDEwMDAw
MDAwMFVMTCkKLSNkZWZpbmUgQ0tfU1BJTkxPQ0tfVElDS0VUX01BU0sJCSgweEZGRkZGRkZGVUxM
KQotI2RlZmluZSBDS19TUElOTE9DS19USUNLRVRfU0hJRlQJKDMyKQotI2VuZGlmCi0jZW5kaWYg
LyogQ0tfTURfVFNPICovCi0KLSNpZiBkZWZpbmVkKENLX1NQSU5MT0NLX1RJQ0tFVF9UWVBFKQot
I2RlZmluZSBDS19GX1NQSU5MT0NLX1RJQ0tFVF9UUllMT0NLCi0KLXN0cnVjdCBja19zcGlubG9j
a190aWNrZXQgewotCUNLX1NQSU5MT0NLX1RJQ0tFVF9UWVBFIHZhbHVlOwotfTsKLXR5cGVkZWYg
c3RydWN0IGNrX3NwaW5sb2NrX3RpY2tldCBja19zcGlubG9ja190aWNrZXRfdDsKLSNkZWZpbmUg
Q0tfU1BJTkxPQ0tfVElDS0VUX0lOSVRJQUxJWkVSIHsgLnZhbHVlID0gMCB9Ci0KLUNLX0NDX0lO
TElORSBzdGF0aWMgdm9pZAotY2tfc3BpbmxvY2tfdGlja2V0X2luaXQoc3RydWN0IGNrX3NwaW5s
b2NrX3RpY2tldCAqdGlja2V0KQotewotCi0JdGlja2V0LT52YWx1ZSA9IDA7Ci0JY2tfcHJfYmFy
cmllcigpOwotCXJldHVybjsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19zcGlu
bG9ja190aWNrZXRfbG9ja2VkKHN0cnVjdCBja19zcGlubG9ja190aWNrZXQgKnRpY2tldCkKLXsK
LQlDS19TUElOTE9DS19USUNLRVRfVFlQRSByZXF1ZXN0LCBwb3NpdGlvbjsKLQotCXJlcXVlc3Qg
PSBDS19TUElOTE9DS19USUNLRVRfTE9BRCgmdGlja2V0LT52YWx1ZSk7Ci0JcG9zaXRpb24gPSBy
ZXF1ZXN0ICYgQ0tfU1BJTkxPQ0tfVElDS0VUX01BU0s7Ci0JcmVxdWVzdCA+Pj0gQ0tfU1BJTkxP
Q0tfVElDS0VUX1NISUZUOwotCi0JY2tfcHJfZmVuY2VfYWNxdWlyZSgpOwotCXJldHVybiByZXF1
ZXN0ICE9IHBvc2l0aW9uOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3NwaW5s
b2NrX3RpY2tldF9sb2NrKHN0cnVjdCBja19zcGlubG9ja190aWNrZXQgKnRpY2tldCkKLXsKLQlD
S19TUElOTE9DS19USUNLRVRfVFlQRSByZXF1ZXN0LCBwb3NpdGlvbjsKLQotCS8qIEdldCBvdXIg
dGlja2V0IG51bWJlciBhbmQgc2V0IG5leHQgdGlja2V0IG51bWJlci4gKi8KLQlyZXF1ZXN0ID0g
Q0tfU1BJTkxPQ0tfVElDS0VUX0ZBQSgmdGlja2V0LT52YWx1ZSwKLQkgICAgQ0tfU1BJTkxPQ0tf
VElDS0VUX0lOQ1JFTUVOVCk7Ci0KLQlwb3NpdGlvbiA9IHJlcXVlc3QgJiBDS19TUElOTE9DS19U
SUNLRVRfTUFTSzsKLQlyZXF1ZXN0ID4+PSBDS19TUElOTE9DS19USUNLRVRfU0hJRlQ7Ci0KLQl3
aGlsZSAocmVxdWVzdCAhPSBwb3NpdGlvbikgewotCQlja19wcl9zdGFsbCgpOwotCQlwb3NpdGlv
biA9IENLX1NQSU5MT0NLX1RJQ0tFVF9MT0FEKCZ0aWNrZXQtPnZhbHVlKSAmCi0JCSAgICBDS19T
UElOTE9DS19USUNLRVRfTUFTSzsKLQl9Ci0KLQlja19wcl9mZW5jZV9sb2NrKCk7Ci0JcmV0dXJu
OwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLWNrX3NwaW5sb2NrX3RpY2tldF9sb2Nr
X3BiKHN0cnVjdCBja19zcGlubG9ja190aWNrZXQgKnRpY2tldCwgdW5zaWduZWQgaW50IGMpCi17
Ci0JQ0tfU1BJTkxPQ0tfVElDS0VUX1RZUEUgcmVxdWVzdCwgcG9zaXRpb247Ci0JY2tfYmFja29m
Zl90IGJhY2tvZmY7Ci0KLQkvKiBHZXQgb3VyIHRpY2tldCBudW1iZXIgYW5kIHNldCBuZXh0IHRp
Y2tldCBudW1iZXIuICovCi0JcmVxdWVzdCA9IENLX1NQSU5MT0NLX1RJQ0tFVF9GQUEoJnRpY2tl
dC0+dmFsdWUsCi0JICAgIENLX1NQSU5MT0NLX1RJQ0tFVF9JTkNSRU1FTlQpOwotCi0JcG9zaXRp
b24gPSByZXF1ZXN0ICYgQ0tfU1BJTkxPQ0tfVElDS0VUX01BU0s7Ci0JcmVxdWVzdCA+Pj0gQ0tf
U1BJTkxPQ0tfVElDS0VUX1NISUZUOwotCi0Jd2hpbGUgKHJlcXVlc3QgIT0gcG9zaXRpb24pIHsK
LQkJY2tfcHJfc3RhbGwoKTsKLQkJcG9zaXRpb24gPSBDS19TUElOTE9DS19USUNLRVRfTE9BRCgm
dGlja2V0LT52YWx1ZSkgJgotCQkgICAgQ0tfU1BJTkxPQ0tfVElDS0VUX01BU0s7Ci0KLQkJYmFj
a29mZiA9IChyZXF1ZXN0IC0gcG9zaXRpb24pICYgQ0tfU1BJTkxPQ0tfVElDS0VUX01BU0s7Ci0J
CWJhY2tvZmYgPDw9IGM7Ci0JCWNrX2JhY2tvZmZfZWIoJmJhY2tvZmYpOwotCX0KLQotCWNrX3By
X2ZlbmNlX2xvY2soKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgYm9vbAot
Y2tfc3BpbmxvY2tfdGlja2V0X3RyeWxvY2soc3RydWN0IGNrX3NwaW5sb2NrX3RpY2tldCAqdGlj
a2V0KQotewotCUNLX1NQSU5MT0NLX1RJQ0tFVF9UWVBFIHNuYXBzaG90LCByZXF1ZXN0LCBwb3Np
dGlvbjsKLQotCXNuYXBzaG90ID0gQ0tfU1BJTkxPQ0tfVElDS0VUX0xPQUQoJnRpY2tldC0+dmFs
dWUpOwotCXBvc2l0aW9uID0gc25hcHNob3QgJiBDS19TUElOTE9DS19USUNLRVRfTUFTSzsKLQly
ZXF1ZXN0ID0gc25hcHNob3QgPj4gQ0tfU1BJTkxPQ0tfVElDS0VUX1NISUZUOwotCi0JaWYgKHBv
c2l0aW9uICE9IHJlcXVlc3QpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChDS19TUElOTE9DS19U
SUNLRVRfQ0FTKCZ0aWNrZXQtPnZhbHVlLAotCSAgICBzbmFwc2hvdCwgc25hcHNob3QgKyBDS19T
UElOTE9DS19USUNLRVRfSU5DUkVNRU5UKSA9PSBmYWxzZSkgewotCQlyZXR1cm4gZmFsc2U7Ci0J
fQotCi0JY2tfcHJfZmVuY2VfbG9jaygpOwotCXJldHVybiB0cnVlOwotfQotCi1DS19DQ19JTkxJ
TkUgc3RhdGljIHZvaWQKLWNrX3NwaW5sb2NrX3RpY2tldF91bmxvY2soc3RydWN0IGNrX3NwaW5s
b2NrX3RpY2tldCAqdGlja2V0KQotewotCi0JY2tfcHJfZmVuY2VfdW5sb2NrKCk7Ci0JQ0tfU1BJ
TkxPQ0tfVElDS0VUX0lOQygoQ0tfU1BJTkxPQ0tfVElDS0VUX1RZUEVfQkFTRSAqKSh2b2lkICop
JnRpY2tldC0+dmFsdWUpOwotCXJldHVybjsKLX0KLQotI3VuZGVmIENLX1NQSU5MT0NLX1RJQ0tF
VF9UWVBFCi0jdW5kZWYgQ0tfU1BJTkxPQ0tfVElDS0VUX1RZUEVfQkFTRQotI3VuZGVmIENLX1NQ
SU5MT0NLX1RJQ0tFVF9JTkMKLSN1bmRlZiBDS19TUElOTE9DS19USUNLRVRfRkFBCi0jdW5kZWYg
Q0tfU1BJTkxPQ0tfVElDS0VUX0xPQUQKLSN1bmRlZiBDS19TUElOTE9DS19USUNLRVRfSU5DUkVN
RU5UCi0jdW5kZWYgQ0tfU1BJTkxPQ0tfVElDS0VUX01BU0sKLSN1bmRlZiBDS19TUElOTE9DS19U
SUNLRVRfU0hJRlQKLSNlbHNlCi0vKgotICogTUVTSSBiZW5lZml0cyBmcm9tIGNhY2hlbGluZSBw
YWRkaW5nIGJldHdlZW4gbmV4dCBhbmQgY3VycmVudC4gVGhpcyBhdm9pZHMKLSAqIGludmFsaWRh
dGlvbiBvZiBjdXJyZW50IGZyb20gdGhlIGNhY2hlIGR1ZSB0byBpbmNvbWluZyBsb2NrIHJlcXVl
c3RzLgotICovCi1zdHJ1Y3QgY2tfc3BpbmxvY2tfdGlja2V0IHsKLQl1bnNpZ25lZCBpbnQgbmV4
dDsKLQl1bnNpZ25lZCBpbnQgcG9zaXRpb247Ci19OwotdHlwZWRlZiBzdHJ1Y3QgY2tfc3Bpbmxv
Y2tfdGlja2V0IGNrX3NwaW5sb2NrX3RpY2tldF90OwotCi0jZGVmaW5lIENLX1NQSU5MT0NLX1RJ
Q0tFVF9JTklUSUFMSVpFUiB7Lm5leHQgPSAwLCAucG9zaXRpb24gPSAwfQotCi1DS19DQ19JTkxJ
TkUgc3RhdGljIHZvaWQKLWNrX3NwaW5sb2NrX3RpY2tldF9pbml0KHN0cnVjdCBja19zcGlubG9j
a190aWNrZXQgKnRpY2tldCkKLXsKLQotCXRpY2tldC0+bmV4dCA9IDA7Ci0JdGlja2V0LT5wb3Np
dGlvbiA9IDA7Ci0JY2tfcHJfYmFycmllcigpOwotCi0JcmV0dXJuOwotfQotCi1DS19DQ19JTkxJ
TkUgc3RhdGljIGJvb2wKLWNrX3NwaW5sb2NrX3RpY2tldF9sb2NrZWQoc3RydWN0IGNrX3NwaW5s
b2NrX3RpY2tldCAqdGlja2V0KQotewotCWJvb2wgcjsKLQotCXIgPSBja19wcl9sb2FkX3VpbnQo
JnRpY2tldC0+cG9zaXRpb24pICE9Ci0JICAgIGNrX3ByX2xvYWRfdWludCgmdGlja2V0LT5uZXh0
KTsKLQlja19wcl9mZW5jZV9hY3F1aXJlKCk7Ci0JcmV0dXJuIHI7Ci19Ci0KLUNLX0NDX0lOTElO
RSBzdGF0aWMgdm9pZAotY2tfc3BpbmxvY2tfdGlja2V0X2xvY2soc3RydWN0IGNrX3NwaW5sb2Nr
X3RpY2tldCAqdGlja2V0KQotewotCXVuc2lnbmVkIGludCByZXF1ZXN0OwotCi0JLyogR2V0IG91
ciB0aWNrZXQgbnVtYmVyIGFuZCBzZXQgbmV4dCB0aWNrZXQgbnVtYmVyLiAqLwotCXJlcXVlc3Qg
PSBja19wcl9mYWFfdWludCgmdGlja2V0LT5uZXh0LCAxKTsKLQotCS8qCi0JICogQnVzeS13YWl0
IHVudGlsIG91ciB0aWNrZXQgbnVtYmVyIGlzIGN1cnJlbnQuCi0JICogV2UgY2FuIGdldCBhd2F5
IHdpdGhvdXQgYSBmZW5jZSBoZXJlIGFzc3VtaW5nCi0JICogb3VyIHBvc2l0aW9uIGNvdW50ZXIg
ZG9lcyBub3Qgb3ZlcmZsb3cuCi0JICovCi0Jd2hpbGUgKGNrX3ByX2xvYWRfdWludCgmdGlja2V0
LT5wb3NpdGlvbikgIT0gcmVxdWVzdCkKLQkJY2tfcHJfc3RhbGwoKTsKLQotCWNrX3ByX2ZlbmNl
X2xvY2soKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfc3Bp
bmxvY2tfdGlja2V0X2xvY2tfcGIoc3RydWN0IGNrX3NwaW5sb2NrX3RpY2tldCAqdGlja2V0LCB1
bnNpZ25lZCBpbnQgYykKLXsKLQlja19iYWNrb2ZmX3QgYmFja29mZjsKLQl1bnNpZ25lZCBpbnQg
cmVxdWVzdCwgcG9zaXRpb247Ci0KLQlyZXF1ZXN0ID0gY2tfcHJfZmFhX3VpbnQoJnRpY2tldC0+
bmV4dCwgMSk7Ci0KLQlmb3IgKDs7KSB7Ci0JCXBvc2l0aW9uID0gY2tfcHJfbG9hZF91aW50KCZ0
aWNrZXQtPnBvc2l0aW9uKTsKLQkJaWYgKHBvc2l0aW9uID09IHJlcXVlc3QpCi0JCQlicmVhazsK
LQotCQliYWNrb2ZmID0gcmVxdWVzdCAtIHBvc2l0aW9uOwotCQliYWNrb2ZmIDw8PSBjOwotCi0J
CS8qCi0JCSAqIElkZWFsbHksIGJhY2stb2ZmIGZyb20gZ2VuZXJhdGluZyBjYWNoZSB0cmFmZmlj
IGZvciBhdCBsZWFzdAotCQkgKiB0aGUgYW1vdW50IG9mIHRpbWUgbmVjZXNzYXJ5IGZvciB0aGUg
bnVtYmVyIG9mIHBlbmRpbmcgbG9jawotCQkgKiBhY3F1aXNpdGlvbiBhbmQgcmVsaW5xdWlzaCBv
cGVyYXRpb25zIChhc3N1bWluZyBhbiBlbXB0eQotCQkgKiBjcml0aWNhbCBzZWN0aW9uKS4KLQkJ
ICovCi0JCWNrX2JhY2tvZmZfZWIoJmJhY2tvZmYpOwotCX0KLQotCWNrX3ByX2ZlbmNlX2xvY2so
KTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfc3BpbmxvY2tf
dGlja2V0X3VubG9jayhzdHJ1Y3QgY2tfc3BpbmxvY2tfdGlja2V0ICp0aWNrZXQpCi17Ci0JdW5z
aWduZWQgaW50IHVwZGF0ZTsKLQotCWNrX3ByX2ZlbmNlX3VubG9jaygpOwotCi0JLyoKLQkgKiBV
cGRhdGUgY3VycmVudCB0aWNrZXQgdmFsdWUgc28gbmV4dCBsb2NrIHJlcXVlc3QgY2FuIHByb2Nl
ZWQuCi0JICogT3ZlcmZsb3cgYmVoYXZpb3IgaXMgYXNzdW1lZCB0byBiZSByb2xsLW92ZXIsIGlu
IHdoaWNoIGNhc2UsCi0JICogaXQgaXMgb25seSBhbiBpc3N1ZSBpZiB0aGVyZSBhcmUgMl4zMiBw
ZW5kaW5nIGxvY2sgcmVxdWVzdHMuCi0JICovCi0JdXBkYXRlID0gY2tfcHJfbG9hZF91aW50KCZ0
aWNrZXQtPnBvc2l0aW9uKTsKLQlja19wcl9zdG9yZV91aW50KCZ0aWNrZXQtPnBvc2l0aW9uLCB1
cGRhdGUgKyAxKTsKLQlyZXR1cm47Ci19Ci0jZW5kaWYgLyogIUNLX0ZfU1BJTkxPQ0tfVElDS0VU
X1RSWUxPQ0sgKi8KLQotQ0tfRUxJREVfUFJPVE9UWVBFKGNrX3NwaW5sb2NrX3RpY2tldCwgY2tf
c3BpbmxvY2tfdGlja2V0X3QsCi0gICAgY2tfc3BpbmxvY2tfdGlja2V0X2xvY2tlZCwgY2tfc3Bp
bmxvY2tfdGlja2V0X2xvY2ssCi0gICAgY2tfc3BpbmxvY2tfdGlja2V0X2xvY2tlZCwgY2tfc3Bp
bmxvY2tfdGlja2V0X3VubG9jaykKLQotQ0tfRUxJREVfVFJZTE9DS19QUk9UT1RZUEUoY2tfc3Bp
bmxvY2tfdGlja2V0LCBja19zcGlubG9ja190aWNrZXRfdCwKLSAgICBja19zcGlubG9ja190aWNr
ZXRfbG9ja2VkLCBja19zcGlubG9ja190aWNrZXRfdHJ5bG9jaykKLQotI2VuZGlmIC8qIENLX0Zf
U1BJTkxPQ0tfVElDS0VUICovCi0jZW5kaWYgLyogQ0tfU1BJTkxPQ0tfVElDS0VUX0ggKi8KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL01h
a2VmaWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvTWFr
ZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxOTVlNTJlNWZhMWI3YzQ0ZjUz
NzNmMjdkMzZiYTFhMTJiYzg3NDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
TWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotRElSPWFycmF5CVwKLSAg
ICBiYWNrb2ZmCVwKLSAgICBiYXJyaWVyCVwKLSAgICBiaXRtYXAJXAotICAgIGJybG9jawlcCi0g
ICAgYnl0ZWxvY2sJXAotICAgIGNvaG9ydAlcCi0gICAgZXBvY2gJXAotICAgIGZpZm8JXAotICAg
IGhwCQlcCi0gICAgaHMJCVwKLSAgICByaHMJCVwKLSAgICBodAkJXAotICAgIHBmbG9jawlcCi0g
ICAgcHIJCVwKLSAgICBxdWV1ZQlcCi0gICAgcmluZwlcCi0gICAgcndsb2NrCVwKLSAgICBzd2xv
Y2sJXAotICAgIHNlcXVlbmNlCVwKLSAgICBzcGlubG9jawlcCi0gICAgc3RhY2sJXAotICAgIHN3
bG9jawlcCi0gICAgdGZsb2NrCi0KLS5QSE9OWTogYWxsIGNsZWFuIGNoZWNrCi0KLWFsbDoKLQkk
KE1BS0UpIC1DIC4vY2tfYXJyYXkvdmFsaWRhdGUgYWxsCi0JJChNQUtFKSAtQyAuL2NrX2NvaG9y
dC92YWxpZGF0ZSBhbGwKLQkkKE1BS0UpIC1DIC4vY2tfY29ob3J0L2JlbmNobWFyayBhbGwKLQkk
KE1BS0UpIC1DIC4vY2tfYml0bWFwL3ZhbGlkYXRlIGFsbAotCSQoTUFLRSkgLUMgLi9ja19iYWNr
b2ZmL3ZhbGlkYXRlIGFsbAotCSQoTUFLRSkgLUMgLi9ja19xdWV1ZS92YWxpZGF0ZSBhbGwKLQkk
KE1BS0UpIC1DIC4vY2tfYnJsb2NrL3ZhbGlkYXRlIGFsbAotCSQoTUFLRSkgLUMgLi9ja19odC92
YWxpZGF0ZSBhbGwKLQkkKE1BS0UpIC1DIC4vY2tfaHQvYmVuY2htYXJrIGFsbAotCSQoTUFLRSkg
LUMgLi9ja19icmxvY2svYmVuY2htYXJrIGFsbAotCSQoTUFLRSkgLUMgLi9ja19zcGlubG9jay92
YWxpZGF0ZSBhbGwKLQkkKE1BS0UpIC1DIC4vY2tfc3BpbmxvY2svYmVuY2htYXJrIGFsbAotCSQo
TUFLRSkgLUMgLi9ja19maWZvL3ZhbGlkYXRlIGFsbAotCSQoTUFLRSkgLUMgLi9ja19maWZvL2Jl
bmNobWFyayBhbGwKLQkkKE1BS0UpIC1DIC4vY2tfcHIvdmFsaWRhdGUgYWxsCi0JJChNQUtFKSAt
QyAuL2NrX3ByL2JlbmNobWFyayBhbGwKLQkkKE1BS0UpIC1DIC4vY2tfaHMvYmVuY2htYXJrIGFs
bAotCSQoTUFLRSkgLUMgLi9ja19ocy92YWxpZGF0ZSBhbGwKLQkkKE1BS0UpIC1DIC4vY2tfcmhz
L2JlbmNobWFyayBhbGwKLQkkKE1BS0UpIC1DIC4vY2tfcmhzL3ZhbGlkYXRlIGFsbAotCSQoTUFL
RSkgLUMgLi9ja19iYXJyaWVyL3ZhbGlkYXRlIGFsbAotCSQoTUFLRSkgLUMgLi9ja19iYXJyaWVy
L2JlbmNobWFyayBhbGwKLQkkKE1BS0UpIC1DIC4vY2tfYnl0ZWxvY2svdmFsaWRhdGUgYWxsCi0J
JChNQUtFKSAtQyAuL2NrX2J5dGVsb2NrL2JlbmNobWFyayBhbGwKLQkkKE1BS0UpIC1DIC4vY2tf
ZXBvY2gvdmFsaWRhdGUgYWxsCi0JJChNQUtFKSAtQyAuL2NrX3J3Y29ob3J0L3ZhbGlkYXRlIGFs
bAotCSQoTUFLRSkgLUMgLi9ja19yd2NvaG9ydC9iZW5jaG1hcmsgYWxsCi0JJChNQUtFKSAtQyAu
L2NrX3NlcXVlbmNlL3ZhbGlkYXRlIGFsbAotCSQoTUFLRSkgLUMgLi9ja19zZXF1ZW5jZS9iZW5j
aG1hcmsgYWxsCi0JJChNQUtFKSAtQyAuL2NrX3N0YWNrL3ZhbGlkYXRlIGFsbAotCSQoTUFLRSkg
LUMgLi9ja19zdGFjay9iZW5jaG1hcmsgYWxsCi0JJChNQUtFKSAtQyAuL2NrX3JpbmcvdmFsaWRh
dGUgYWxsCi0JJChNQUtFKSAtQyAuL2NrX3JpbmcvYmVuY2htYXJrIGFsbAotCSQoTUFLRSkgLUMg
Li9ja19yd2xvY2svdmFsaWRhdGUgYWxsCi0JJChNQUtFKSAtQyAuL2NrX3J3bG9jay9iZW5jaG1h
cmsgYWxsCi0JJChNQUtFKSAtQyAuL2NrX3RmbG9jay92YWxpZGF0ZSBhbGwKLQkkKE1BS0UpIC1D
IC4vY2tfdGZsb2NrL2JlbmNobWFyayBhbGwKLQkkKE1BS0UpIC1DIC4vY2tfc3dsb2NrL3ZhbGlk
YXRlIGFsbAotCSQoTUFLRSkgLUMgLi9ja19zd2xvY2svYmVuY2htYXJrIGFsbAotCSQoTUFLRSkg
LUMgLi9ja19wZmxvY2svdmFsaWRhdGUgYWxsCi0JJChNQUtFKSAtQyAuL2NrX3BmbG9jay9iZW5j
aG1hcmsgYWxsCi0JJChNQUtFKSAtQyAuL2NrX2hwL3ZhbGlkYXRlIGFsbAotCSQoTUFLRSkgLUMg
Li9ja19ocC9iZW5jaG1hcmsgYWxsCi0KLWNsZWFuOgotCSQoTUFLRSkgLUMgLi9ja19hcnJheS92
YWxpZGF0ZSBjbGVhbgotCSQoTUFLRSkgLUMgLi9ja19wZmxvY2svdmFsaWRhdGUgY2xlYW4KLQkk
KE1BS0UpIC1DIC4vY2tfcGZsb2NrL2JlbmNobWFyayBjbGVhbgotCSQoTUFLRSkgLUMgLi9ja190
ZmxvY2svdmFsaWRhdGUgY2xlYW4KLQkkKE1BS0UpIC1DIC4vY2tfdGZsb2NrL2JlbmNobWFyayBj
bGVhbgotCSQoTUFLRSkgLUMgLi9ja19yd2NvaG9ydC92YWxpZGF0ZSBjbGVhbgotCSQoTUFLRSkg
LUMgLi9ja19yd2NvaG9ydC9iZW5jaG1hcmsgY2xlYW4KLQkkKE1BS0UpIC1DIC4vY2tfYmFja29m
Zi92YWxpZGF0ZSBjbGVhbgotCSQoTUFLRSkgLUMgLi9ja19iaXRtYXAvdmFsaWRhdGUgY2xlYW4K
LQkkKE1BS0UpIC1DIC4vY2tfcXVldWUvdmFsaWRhdGUgY2xlYW4KLQkkKE1BS0UpIC1DIC4vY2tf
Y29ob3J0L3ZhbGlkYXRlIGNsZWFuCi0JJChNQUtFKSAtQyAuL2NrX2NvaG9ydC9iZW5jaG1hcmsg
Y2xlYW4KLQkkKE1BS0UpIC1DIC4vY2tfYnJsb2NrL3ZhbGlkYXRlIGNsZWFuCi0JJChNQUtFKSAt
QyAuL2NrX2h0L3ZhbGlkYXRlIGNsZWFuCi0JJChNQUtFKSAtQyAuL2NrX2h0L2JlbmNobWFyayBj
bGVhbgotCSQoTUFLRSkgLUMgLi9ja19ocy92YWxpZGF0ZSBjbGVhbgotCSQoTUFLRSkgLUMgLi9j
a19ocy9iZW5jaG1hcmsgY2xlYW4KLQkkKE1BS0UpIC1DIC4vY2tfcmhzL3ZhbGlkYXRlIGNsZWFu
Ci0JJChNQUtFKSAtQyAuL2NrX3Jocy9iZW5jaG1hcmsgY2xlYW4KLQkkKE1BS0UpIC1DIC4vY2tf
YnJsb2NrL2JlbmNobWFyayBjbGVhbgotCSQoTUFLRSkgLUMgLi9ja19zcGlubG9jay92YWxpZGF0
ZSBjbGVhbgotCSQoTUFLRSkgLUMgLi9ja19zcGlubG9jay9iZW5jaG1hcmsgY2xlYW4KLQkkKE1B
S0UpIC1DIC4vY2tfZmlmby92YWxpZGF0ZSBjbGVhbgotCSQoTUFLRSkgLUMgLi9ja19maWZvL2Jl
bmNobWFyayBjbGVhbgotCSQoTUFLRSkgLUMgLi9ja19wci92YWxpZGF0ZSBjbGVhbgotCSQoTUFL
RSkgLUMgLi9ja19wci9iZW5jaG1hcmsgY2xlYW4KLQkkKE1BS0UpIC1DIC4vY2tfYmFycmllci92
YWxpZGF0ZSBjbGVhbgotCSQoTUFLRSkgLUMgLi9ja19iYXJyaWVyL2JlbmNobWFyayBjbGVhbgot
CSQoTUFLRSkgLUMgLi9ja19ieXRlbG9jay92YWxpZGF0ZSBjbGVhbgotCSQoTUFLRSkgLUMgLi9j
a19ieXRlbG9jay9iZW5jaG1hcmsgY2xlYW4KLQkkKE1BS0UpIC1DIC4vY2tfZXBvY2gvdmFsaWRh
dGUgY2xlYW4KLQkkKE1BS0UpIC1DIC4vY2tfc2VxdWVuY2UvdmFsaWRhdGUgY2xlYW4KLQkkKE1B
S0UpIC1DIC4vY2tfc2VxdWVuY2UvYmVuY2htYXJrIGNsZWFuCi0JJChNQUtFKSAtQyAuL2NrX3N0
YWNrL3ZhbGlkYXRlIGNsZWFuCi0JJChNQUtFKSAtQyAuL2NrX3N0YWNrL2JlbmNobWFyayBjbGVh
bgotCSQoTUFLRSkgLUMgLi9ja19yaW5nL3ZhbGlkYXRlIGNsZWFuCi0JJChNQUtFKSAtQyAuL2Nr
X3JpbmcvYmVuY2htYXJrIGNsZWFuCi0JJChNQUtFKSAtQyAuL2NrX3J3bG9jay92YWxpZGF0ZSBj
bGVhbgotCSQoTUFLRSkgLUMgLi9ja19yd2xvY2svYmVuY2htYXJrIGNsZWFuCi0JJChNQUtFKSAt
QyAuL2NrX3N3bG9jay92YWxpZGF0ZSBjbGVhbgotCSQoTUFLRSkgLUMgLi9ja19zd2xvY2svYmVu
Y2htYXJrIGNsZWFuCi0JJChNQUtFKSAtQyAuL2NrX3BmbG9jay92YWxpZGF0ZSBjbGVhbgotCSQo
TUFLRSkgLUMgLi9ja19wZmxvY2svYmVuY2htYXJrIGNsZWFuCi0JJChNQUtFKSAtQyAuL2NrX2hw
L3ZhbGlkYXRlIGNsZWFuCi0JJChNQUtFKSAtQyAuL2NrX2hwL2JlbmNobWFyayBjbGVhbgotCi1j
aGVjazogYWxsCi0JcmM9MDsgCQkJCQkJCVwKLQlmb3IgZCBpbiAkKERJUikgOyBkbwkJCQkJXAot
CQllY2hvICItLS0tWyBUZXN0aW5nICQkZC4uLi4iOwkJCVwKLQkJJChNQUtFKSAtQyAuL2NrXyQk
ZC92YWxpZGF0ZSBjaGVjayB8fCByYz0xOyAJXAotCQllY2hvOwkJCQkJCVwKLQlkb25lOyAJCQkJ
CQkJXAotCWV4aXQgJCRyYwotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9NYWtlZmlsZS51bnN1cHBvcnRlZCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL01ha2VmaWxlLnVuc3VwcG9ydGVkCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGFhODc3ZWUwNGY0NjU2MGY3ZjFiMDQzYjRkMzE5
ZjBlNjkzYzIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL01ha2VmaWxlLnVu
c3VwcG9ydGVkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0uUEhPTlk6IGFsbCBjbGVh
biBjaGVjawotCi1hbGw6Ci0JQGVjaG8gUmVncmVzc2lvbnMgYXJlIGN1cnJlbnRseSB1bnN1cHBv
cnRlZCBmb3Igb3V0LW9mLXNvdXJjZSBidWlsZHMKLQotY2xlYW46IGFsbAotCi1jaGVjazogYWxs
Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Np
b25zL2NrX2FycmF5L3ZhbGlkYXRlL01ha2VmaWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYXJyYXkvdmFsaWRhdGUvTWFrZWZpbGUKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNDgxNjdiMjI0YWUxYWI3M2EwYzkxZDcwNmJkNzczODA5
MGQzMWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYXJyYXkvdmFsaWRh
dGUvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0uUEhPTlk6IGNoZWNr
IGNsZWFuIGRpc3RyaWJ1dGlvbgotCi1PQkpFQ1RTPXNlcmlhbAotCi1hbGw6ICQoT0JKRUNUUykK
LQotc2VyaWFsOiBzZXJpYWwuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX2FycmF5LmggLi4vLi4vLi4v
c3JjL2NrX2FycmF5LmMKLQkkKENDKSAkKENGTEFHUykgLW8gc2VyaWFsIHNlcmlhbC5jIC4uLy4u
Ly4uL3NyYy9ja19hcnJheS5jCi0KLWNoZWNrOiBhbGwKLQkuL3NlcmlhbAotCi1jbGVhbjoKLQly
bSAtcmYgKn4gKi5vICQoT0JKRUNUUykgKi5kU1lNICouZXhlCi0KLWluY2x1ZGUgLi4vLi4vLi4v
YnVpbGQvcmVncmVzc2lvbnMuYnVpbGQKLUNGTEFHUys9LURfR05VX1NPVVJDRSAtZ2dkYgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tf
YXJyYXkvdmFsaWRhdGUvc2VyaWFsLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19hcnJheS92YWxpZGF0ZS9zZXJpYWwuYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYjZkN2I1NjJhOGMzY2YwODZlYTcxMmIyMWViMmYwZDVhMTZjMzUyMC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19hcnJheS92YWxpZGF0ZS9zZXJp
YWwuYworKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0jaW5jbHVkZSA8Y2tfYXJyYXku
aD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNpZm5kZWYgSVRFUkFUSU9O
Ci0jZGVmaW5lIElURVJBVElPTiAxMjgKLSNlbmRpZgotCi1zdGF0aWMgdm9pZAotbXlfZnJlZSh2
b2lkICpwLCBzaXplX3QgbSwgYm9vbCBkKQotewotCi0JKHZvaWQpbTsKLQkodm9pZClkOwotCi0J
ZnJlZShwKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkICoKLW15X21hbGxvYyhzaXplX3Qg
YikKLXsKLQotCXJldHVybiBtYWxsb2MoYik7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLW15X3JlYWxs
b2Modm9pZCAqciwgc2l6ZV90IGEsIHNpemVfdCBiLCBib29sIGQpCi17Ci0KLQkodm9pZClhOwot
CSh2b2lkKWQ7Ci0KLQlyZXR1cm4gcmVhbGxvYyhyLCBiKTsKLX0KLQotaW50Ci1tYWluKHZvaWQp
Ci17Ci0Jdm9pZCAqcjsKLQl1aW50cHRyX3QgaTsKLQlja19hcnJheV90IGFycmF5OwotCWNrX2Fy
cmF5X2l0ZXJhdG9yX3QgaXRlcmF0b3I7Ci0Jc3RydWN0IGNrX21hbGxvYyBtID0gewotCQkubWFs
bG9jID0gbXlfbWFsbG9jLAotCQkuZnJlZSA9IE5VTEwsCi0JCS5yZWFsbG9jID0gbXlfcmVhbGxv
YwotCX07Ci0KLQlpZiAoY2tfYXJyYXlfaW5pdCgmYXJyYXksIENLX0FSUkFZX01PREVfU1BNQywg
Jm0sIDQpID09IHRydWUpCi0JCWNrX2Vycm9yKCJja19hcnJheV9pbml0IHdpdGggTlVMTCBmcmVl
IHN1Y2NlZWRlZFxuIik7Ci0KLQltLmZyZWUgPSBteV9mcmVlOwotCWlmIChja19hcnJheV9pbml0
KCZhcnJheSwgQ0tfQVJSQVlfTU9ERV9TUE1DLCAmbSwgNCkgPT0gZmFsc2UpCi0JCWNrX2Vycm9y
KCJja19hcnJheV9pbml0XG4iKTsKLQotCWZvciAoaSA9IDA7IGkgPCBJVEVSQVRJT047IGkrKykg
ewotCQlpZiAoY2tfYXJyYXlfcHV0KCZhcnJheSwgKHZvaWQgKilpKSA9PSBmYWxzZSkKLQkJCWNr
X2Vycm9yKCJja19lcnJvcl9wdXRcbiIpOwotCi0JCWlmIChja19hcnJheV9yZW1vdmUoJmFycmF5
LCAodm9pZCAqKWkpID09IGZhbHNlKQotCQkJY2tfZXJyb3IoImNrX2Vycm9yX3JlbW92ZSBhZnRl
ciBwdXRcbiIpOwotCX0KLQotCWkgPSAwOyBDS19BUlJBWV9GT1JFQUNIKCZhcnJheSwgJml0ZXJh
dG9yLCAmcikgaSsrOwotCWlmIChpICE9IDApCi0JCWNrX2Vycm9yKCJOb24tZW1wdHkgYXJyYXkg
YWZ0ZXIgcHV0IC0+IHJlbW92ZSB3b3JrbG9hZC5cbiIpOwotCi0JY2tfYXJyYXlfY29tbWl0KCZh
cnJheSk7Ci0KLQlpID0gMDsgQ0tfQVJSQVlfRk9SRUFDSCgmYXJyYXksICZpdGVyYXRvciwgJnIp
IGkrKzsKLQlpZiAoaSAhPSAwKQotCQlja19lcnJvcigiTm9uLWVtcHR5IGFycmF5IGFmdGVyIHB1
dCAtPiByZW1vdmUgLT4gY29tbWl0IHdvcmtsb2FkLlxuIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwg
SVRFUkFUSU9OOyBpKyspIHsKLQkJaWYgKGNrX2FycmF5X3B1dCgmYXJyYXksICh2b2lkICopaSkg
PT0gZmFsc2UpCi0JCQlja19lcnJvcigiY2tfZXJyb3JfcHV0XG4iKTsKLQl9Ci0KLQlpID0gMDsg
Q0tfQVJSQVlfRk9SRUFDSCgmYXJyYXksICZpdGVyYXRvciwgJnIpIGkrKzsKLQlpZiAoaSAhPSAw
KQotCQlja19lcnJvcigiTm9uLWVtcHR5IGFycmF5IGFmdGVyIHB1dCB3b3JrbG9hZC5cbiIpOwot
Ci0JZm9yIChpID0gMDsgaSA8IElURVJBVElPTjsgaSsrKSB7Ci0JCWlmIChja19hcnJheV9yZW1v
dmUoJmFycmF5LCAodm9pZCAqKWkpID09IGZhbHNlKQotCQkJY2tfZXJyb3IoImNrX2Vycm9yX3Jl
bW92ZSBhZnRlciBwdXRcbiIpOwotCX0KLQotCWkgPSAwOyBDS19BUlJBWV9GT1JFQUNIKCZhcnJh
eSwgJml0ZXJhdG9yLCAmcikgaSsrOwotCWlmIChpICE9IDApCi0JCWNrX2Vycm9yKCJOb24tZW1w
dHkgYXJyYXkgYWZ0ZXIgcHV0IC0+IHJlbW92ZSB3b3JrbG9hZC5cbiIpOwotCi0JY2tfYXJyYXlf
Y29tbWl0KCZhcnJheSk7Ci0KLQlpID0gMDsgQ0tfQVJSQVlfRk9SRUFDSCgmYXJyYXksICZpdGVy
YXRvciwgJnIpIGkrKzsKLQlpZiAoaSAhPSAwKQotCQlja19lcnJvcigiTm9uLWVtcHR5IGFycmF5
IGFmdGVyIHB1dCAtPiByZW1vdmUgLT4gY29tbWl0IHdvcmtsb2FkLlxuIik7Ci0KLQlmb3IgKGkg
PSAwOyBpIDwgSVRFUkFUSU9OOyBpKyspIHsKLQkJaWYgKGNrX2FycmF5X3B1dCgmYXJyYXksICh2
b2lkICopaSkgPT0gZmFsc2UpCi0JCQlja19lcnJvcigiY2tfZXJyb3JfcHV0XG4iKTsKLQl9Ci0K
LQlja19hcnJheV9jb21taXQoJmFycmF5KTsKLQotCWkgPSAwOwotCUNLX0FSUkFZX0ZPUkVBQ0go
JmFycmF5LCAmaXRlcmF0b3IsICZyKSB7Ci0JCWkrKzsKLQl9Ci0KLQlpZiAoaSAhPSBJVEVSQVRJ
T04pCi0JCWNrX2Vycm9yKCJJbmNvcnJlY3QgaXRlbSBjb3VudCBpbiBpdGVyYXRpb25cbiIpOwot
Ci0JY2tfYXJyYXlfcmVtb3ZlKCZhcnJheSwgKHZvaWQgKikodWludHB0cl90KTApOwotCWNrX2Fy
cmF5X3JlbW92ZSgmYXJyYXksICh2b2lkICopKHVpbnRwdHJfdCkxKTsKLQlja19hcnJheV9jb21t
aXQoJmFycmF5KTsKLQlpID0gMDsgQ0tfQVJSQVlfRk9SRUFDSCgmYXJyYXksICZpdGVyYXRvciwg
JnIpIGkrKzsKLQlpZiAoaSAhPSBJVEVSQVRJT04gLSAyIHx8IGNrX2FycmF5X2xlbmd0aCgmYXJy
YXkpICE9IElURVJBVElPTiAtIDIpCi0JCWNrX2Vycm9yKCJJbmNvcnJlY3QgaXRlbSBjb3VudCBp
biBpdGVyYXRpb24gYWZ0ZXIgcmVtb3ZlXG4iKTsKLQotCWlmIChja19hcnJheV9wdXRfdW5pcXVl
KCZhcnJheSwgKHZvaWQgKilVSU5UUFRSX01BWCkgIT0gMCkKLQkJY2tfZXJyb3IoIlVuaXF1ZSB2
YWx1ZSBwdXQgZmFpbGVkLlxuIik7Ci0KLQlpZiAoY2tfYXJyYXlfcHV0X3VuaXF1ZSgmYXJyYXks
ICh2b2lkICopKHVpbnRwdHJfdCk0KSAhPSAxKQotCQlja19lcnJvcigicHV0IG9mIDQgbm90IGRl
dGVjdGVkIGFzIG5vbi11bmlxdWUuXG4iKTsKLQotCWlmIChja19hcnJheV9wdXRfdW5pcXVlKCZh
cnJheSwgKHZvaWQgKilVSU5UUFRSX01BWCkgIT0gMSkKLQkJY2tfZXJyb3IoInB1dCBvZiBVSU5U
UFRSX01BWCBub3QgZGV0ZWN0ZWQgYXMgbm9uLXVuaXF1ZS5cbiIpOwotCi0JY2tfYXJyYXlfY29t
bWl0KCZhcnJheSk7Ci0JaSA9IDA7Ci0JQ0tfQVJSQVlfRk9SRUFDSCgmYXJyYXksICZpdGVyYXRv
ciwgJnIpIHsKLQkJaSsrOwotCX0KLQlpZiAoaSAhPSBJVEVSQVRJT04gLSAxIHx8IGNrX2FycmF5
X2xlbmd0aCgmYXJyYXkpICE9IElURVJBVElPTiAtIDEpCi0JCWNrX2Vycm9yKCJJbmNvcnJlY3Qg
aXRlbSBjb3VudCBpbiBpdGVyYXRpb24gYWZ0ZXIgdW5pcXVlIHB1dFxuIik7Ci0KLQlpZiAoY2tf
YXJyYXlfaW5pdGlhbGl6ZWQoJmFycmF5KSA9PSBmYWxzZSkKLQkJY2tfZXJyb3IoIkVycm9yLCBl
eHBlY3RlZCBhcnJheSB0byBiZSBpbml0aWFsaXplZC5cbiIpOwotCi0JZm9yIChpID0gMDsgaSA8
IElURVJBVElPTiAqIDQ7IGkrKykgewotCQlja19hcnJheV9yZW1vdmUoJmFycmF5LCAodm9pZCAq
KWkpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBJVEVSQVRJT04gKiAxNjsgaSsrKSB7Ci0JCWNr
X2FycmF5X3B1dCgmYXJyYXksICh2b2lkICopaSk7Ci0JfQotCi0JY2tfYXJyYXlfY29tbWl0KCZh
cnJheSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSVRFUkFUSU9OICogMTI4OyBpKyspIHsKLQkJY2tf
YXJyYXlfcHV0KCZhcnJheSwgKHZvaWQgKilpKTsKLQkJaWYgKGNrX2FycmF5X3B1dF91bmlxdWUo
JmFycmF5LCAodm9pZCAqKWkpICE9IDEpCi0JCQlja19lcnJvcigicHV0X3VuaXF1ZSBmb3Igbm9u
LXVuaXF1ZSB2YWx1ZSBzaG91bGQgZmFpbC5cbiIpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBJ
VEVSQVRJT04gKiA2NDsgaSsrKSB7Ci0JCWJvb2wgZiA9IGNrX2FycmF5X3JlbW92ZSgmYXJyYXks
ICh2b2lkICopaSk7Ci0KLQkJaWYgKGYgPT0gZmFsc2UgJiYgaSA8IElURVJBVElPTiAqIDE0NCkK
LQkJCWNrX2Vycm9yKCJSZW1vdmUgZmFpbGVkIGZvciBleGlzdGluZyBlbnRyeS5cbiIpOwotCi0J
CWlmIChmID09IHRydWUgJiYgaSA+IElURVJBVElPTiAqIDE0NCkKLQkJCWNrX2Vycm9yKCJSZW1v
dmUgc3VjY2VlZGVkIGZvciBub24tZXhpc3RpbmcgZW50cnkuXG4iKTsKLQl9Ci0KLQlja19hcnJh
eV9jb21taXQoJmFycmF5KTsKLQlja19hcnJheV9kZWluaXQoJmFycmF5LCBmYWxzZSk7Ci0KLQlp
ZiAoY2tfYXJyYXlfaW5pdGlhbGl6ZWQoJmFycmF5KSA9PSB0cnVlKQotCQlja19lcnJvcigiRXJy
b3IsIGV4cGVjdGVkIGFycmF5IHRvIGJlIHVuaW5pdGlhbGl6ZWQuXG4iKTsKLQotCXJldHVybiAw
OwotfQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdy
ZXNzaW9ucy9ja19hcnJheS92YWxpZGF0ZS9zZXJpYWwuZFNZTS9Db250ZW50cy9JbmZvLnBsaXN0
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYXJyYXkv
dmFsaWRhdGUvc2VyaWFsLmRTWU0vQ29udGVudHMvSW5mby5wbGlzdApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYzdkNzI0NmFkOTc4NWVhNWFlNTU0NjczMTFhYWVkOWM4ZWY5ZTdjYy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19hcnJheS92YWxpZGF0ZS9zZXJp
YWwuZFNZTS9Db250ZW50cy9JbmZvLnBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBA
QAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlz
dCBQVUJMSUMgIi0vL0FwcGxlIENvbXB1dGVyLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93
d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249
IjEuMCI+Ci0JPGRpY3Q+Ci0JCTxrZXk+Q0ZCdW5kbGVEZXZlbG9wbWVudFJlZ2lvbjwva2V5Pgot
CQk8c3RyaW5nPkVuZ2xpc2g8L3N0cmluZz4KLQkJPGtleT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tl
eT4KLQkJPHN0cmluZz5jb20uYXBwbGUueGNvZGUuZHN5bS5zZXJpYWw8L3N0cmluZz4KLQkJPGtl
eT5DRkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvbjwva2V5PgotCQk8c3RyaW5nPjYuMDwvc3Ry
aW5nPgotCQk8a2V5PkNGQnVuZGxlUGFja2FnZVR5cGU8L2tleT4KLQkJPHN0cmluZz5kU1lNPC9z
dHJpbmc+Ci0JCTxrZXk+Q0ZCdW5kbGVTaWduYXR1cmU8L2tleT4KLQkJPHN0cmluZz4/Pz8/PC9z
dHJpbmc+Ci0JCTxrZXk+Q0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmc8L2tleT4KLQkJPHN0cmlu
Zz4xLjA8L3N0cmluZz4KLQkJPGtleT5DRkJ1bmRsZVZlcnNpb248L2tleT4KLQkJPHN0cmluZz4x
PC9zdHJpbmc+Ci0JPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2FycmF5L3ZhbGlkYXRlL3NlcmlhbC5k
U1lNL0NvbnRlbnRzL1Jlc291cmNlcy9EV0FSRi9zZXJpYWwgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19hcnJheS92YWxpZGF0ZS9zZXJpYWwuZFNZTS9D
b250ZW50cy9SZXNvdXJjZXMvRFdBUkYvc2VyaWFsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxM2UwYTlmOTgyM2YwYjY2YzVkNjMwODUyYWE5YmZlN2MzZDdmN2RjLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAw
CkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDIxMjY3CnpjbWVIUGR3NWpVd2Nsc1hvUmVXZi1WcEt0Rzkp
fCMhVkU3RkhDUGUyS25OMGZxfHhGWENYLTFSbWB2aSMxY2BkWAp6YEA+ZjhMYUVrUUs/fUZsaW9J
JkRVTyVlVVlFfGtKdEJyNVY2Pmh6WFI3elg0KjJuIz17VyN9akNUWj5XXzM9LVIKej8oRFZKVWkt
SiNVVkVRP19HQF9JbE18bjNGe2JIXkYpc3BXdyUmdDNAK243TGc3RU47bmF2e35KbS09OT1OJWVz
Cnp7Q29RKm16MS03I3MtNmE2IUJlJU9BIV96MWNVWG49Zyslai1xSXl0KGpHMDE/fjVnelNEX2RU
RX16JTl5dGY5PQp6QDlRbTc5TkJOa0soYiZrNjxNRG1OPDhVIWA5bn43Qndndkt2cyk9cz59RElD
WSVyS2lidjdqfVE5OW5XIXYpQEcKek9HRUlBXistSFozSXR3b2J0S2ppTmtFcDRjYU94WVF2aXNg
X3R1a1BVcFNkY01CfVllQXN6MmlpRlp2ZTVEVHEwCnpIcEliVFhaLVNMeWczKyt4M3FKPGNZOW8y
QT9vTEZhUiFFc0Y4YXNTeWp8emNVT3dCQTsqKSt0S2tEbkRjQk1ZNQp6KzludWAkQVpiT3d4OyUy
dXBeYSNvcWdqdTtWOGQpJHA1TWhORVFzWHdtYSpQaitnSGZfQnB4PHd9PGw1THMtdFYKelVAI1c/
Yk19P14xbTB4SUVGWShSUk5wfT0wZFgpR1pqVUV6MylBZ2U7MWhXQ3VCeWswcihgTyYtX3lFPDdj
UUROCnpjajBvRzApelBicjVxPll3T2xDMTJUQWVfZ3d1I2RmandXSHo0VHVjSlkobGU5S2AoYmlL
dTlyaCpmKiQycDBMOQp6QlRiI0ghQntqTkF5SSNMVkglfDlAJHRYP3shd0B4b2xXc2pUT15yfDdw
QGlkeSlGXkw2WihiWDJAYnFlUzRTcV4KenRWSUl2NzNySz1YTTghbExAM0BHIUVsbXAtO2wpdVB4
WCU+bGZFMll0VVdDND9jRS04Q0VrVz9maXczQDspU0d2Cno+R25PfERDfDJUJjNiJk1CPklWenxL
dT18UVF2KFIzJXNBXjIhTVRPX1g4eHczTk9edWwhJmEkXmp8WHVLeCZGMQp6YS0zX1B8SzsjN2N5
aChgYG1UPSh5IUc7PlRFRmx3O2V8Um5WdiEqNGR7OWx0SX5meXIkRTFCSG9kYkx5KDd+VnMKenVP
ayNyJDlveHJHdTJtcGNWNnp9eVglQmljKVQ8QlZjKjlSPzt+bTckNnBlIXk9ZXthZmEmJnEyKTg9
emAqNWsjCnpuZ00jaTB8T295QFc2bHYyMFNwfWZxJGUyPTx9WTc1M15iYShee1ZSQlVuaCNfajtK
KlBmRVRAXjBkJldeb2E8MAp6bnBoK2RlP0kzS0pCKkQzO3hDZj9XViFCYWw2PTAqZjBeV1dOYDhh
blNDeHRVLTsoQDJsSyY2STQteDVAUyV1ZEkKekJaKSppKV9gcVkhTTBHMHJvY29kQX54TlVoKHNf
NFlnLStSdGRFMntReFVBVkwoTiFtUXw/ZUE1JGVNRnM7dz1XCnphdE45dShSZVJHOHIjdzcpQ1B5
OGFgZHVKbHcpQmdCNW0jS0FaUUNrPDFsPlM4U3ViPjJMP1BhO0RHQFQ0MHZGYAp6MHxPb3lAVzZs
djIwU3B9ZmRMUXZsUldUczlHMUotOUJjejwrTWpaQkBLPld7SkEmci0yZ0x1O2NzU1BDOUFTYWsK
eklNUnJRTCNaZl5BX0ktI19VNEVtcnhKbFY/ZVNEM289T0poTSVHMVE/S3NFfClXPEBwbWk5empH
TyMhbFViM3Z3CnoteXNES29uPjx1c3BLaD57WnBwLWxnKD1ib3lrTiVtS1I4TkI/Q2NtS3B7PEc9
ezV5ZyF7TmFDbktPYmpydVVpbAp6NTRTbHdaUlUpPnJxSmM+P1htRGBZITY2PiZXKkgkSSU2c1Ng
Znk2NmFHJTdZT0BWTD5obFBRJntnZUhabTUmJXgKemRreX44KU0meFpYZ3IxVUBMJm8mOGtJSVIr
VCk7Y1k/WHs4cU0/fGRBSX42SE0qP0Q7KyRzX3NMNkhRK3tTRk5yCnpZekxGa0Q8VCUrVERpeDlI
MFVLJCY3bmpxWGdiaGtnSXNESyQqdD4kYmpAJmlUfT94Y1l8ayNrVyVpZ2BVMCFyQgp6WHgkQHNa
YF5LdXlrLT02bXplclJ1OEVwcW4pO2N3PTBSaFN4eT4qPTByUXxmZjN1Tmc+YSNxQjxeZ2s/ZEI3
TkgKemJ7cUwtanAzP3c4LWB9O3xIdTRwKHtTbHFIYEtiXyN2cHctV0RqalBneVFyPWpPKnhjOygq
JHpRVkVwQHBhUj8lCnpTUFJHOClDO3BHNGY3MFN4TGFnK20zalBxPGFqUEUkOF9ZX0ZSVkJzdEB2
NCo3M1YtQGp7dHBfP2QqbEEtQEwoWgp6PmM/ZnF2bU1zIVBjbWZ0PTd2K0l7cyZnT192aHBUZWJW
TSQpalB+SUV9blNFNXxoPkBPQG83YD4tQnpreGtsZjwKenB+Y2ljV3dwanhhSlQ3KXxHPDklZXh8
dntLPjgtKUgpfUd6TSpxQ0tnP3plQTZGI2tROHVjcSM7KXVSVzREa3wwCnpiQ3RFWUhLU1U7cFNQ
QiZQcD5pYy12TD1TXjw3JHZRRiloV2htP01AK2ZUeWx3VmcobENIJFpwWm4rVVE+N0s8Iwp6KjQr
bFJMe15QNCtNS0Fle1RrVEBvQkhqQFJgXjRzWVFCO21wYDFVXllQV0ZEYm5XUzcjTEVvYkRRZkQ2
eUFLI3sKelF+IT9VSXE7VUx6dURiRzdKUn15MmxScC17akxvP3VqfVBLYHA2I0wrdzxDTWRVbFdR
PnY4M1o/eU5SVChWYV4pCnpXMDFHYldyX3J+WWw/JmxOPzc2PUJvZnMyREgzdyVFbV57SWB+dDZ8
aX5Ublp6V29seSR3Vzl+cjJBX0lvV0lHKQp6e01VfGhmMElJO3BNJGhkKF9qMXkqdSFMKU1sSHZu
aTl5bUQ+bzc+I1cxU2NwI2VPb3pIeVRYa3B5P1BYRiorKEsKejYhLXVySD9zQXFubztXWU9meUVB
allmZVBGaUhebllLJENudk43XnBOY19lXlEqWWE4JSluQHR5JjNXVnlfaU9eCnpJbUlZd0hIITQm
K0FUKUBFTXc+KlF+JlhYSnY3IW0jY0V5SXFXYEd2YXtYemg4OUNsaGo4ZH19dVBzcFlHUVRrbAp6
NiNnIy1XWUtFRkgqMVNBYyV6Wn4ydThkYnFZKEpUaTtQajE8OF5LXiM/WUpKWGNVP0glWHMmNT50
Sk9LeTtFaCMKekklS3NtM1IhYkQ4aE1XeDk8djYrMzU+WDFeU2lTITtOSUM/TzlLNlFqNFBUXnNo
e2RqO2VCWl8jYDtPQ0lIZkZBCno4fkhRPDgzbz5BQldJUX1IVyNNa0ZOUGd7MzxDVmN5LXFzX0JP
Q0dCUEorMFJpP2NEeztocHpGSmN6SiZuZmkldAp6cFQxamJiWk5wRj5URSMyMFkmNl5Vc3cyTDxW
eUhPX3ZgTmZ6cyVKNFlNdyQ9ZyZKZk10Wm40LUxRfXMoT0J0bmcKenJyeShDaSgkZlZ4WDV8MEk4
MTNsdTQjUFdkPVdfMXJoWGdjS3lgO1Q1XmZSM09nT0k2KVYrUlZoVz5zeG4kKUI9Cnp6MVZLa1BC
YHMpUkhWI3ZIQEIrN1QhaEIxSE84Mjs1YnJUdWptOGthRzFSPW8oRGlyPV93OGQwMU59Rjs4e1Ay
ZQp6QXFfKj1nV1dwflg2bnhacm95fCtAWUhlbWFANGFCP1NwMmFEKWBZSngldlVMMyQ7JldFbSpJ
PHNAQk13V3owQWkKendjZD40dyg+U1MrPk1iP2U/ViVFTmBWUmEpZXhtbFoxa2g+PkxCbEpoN1VF
STNacDkheVVhflMmTklyPFVpNmt9Cnp2JCVxZWdmVk1Tam1eOzY7eGY9ZXhPcWZ4NTF1UDxMdjl+
cHlmV2claFVUNjhZLUJYMTVCQk5KViFeMmNvUEMxagp6WEUrNDI0WiszMT1IcGVJPnYqNFdPQSNr
RlJwTVAwJDJ4Uk1eTG07PDlue3B8Zzt6clhqKkl3TiVgY29YY18jRnIKejd6K2ZUSlFnQkRNeCR1
RVdeYDR7SXtJT2tnNm9WWXFwazVzdmsjTHBoNl49fUNRPng5Vnp7eHl0Zj9CPzFUTk1kCnpafXMp
Y0BKJmNESEI3S2A5V2BXS2Z8MkszNH1jVDFHeGslRXhEXiNqO0pUKDkjbl5GQFU0ViVzYCEjJD5S
LThiKgp6RWApMSN4SiZwaz13UHNeR2E1QEZpPDBKfWslRWN+cmI0YWtMUCN0KHJQIyR6SGt5aGdM
YUJDNEk5WVJGYUAwWHcKejQ3TUFMe000KFdZYXA7NF9nISQ3cE1ENGlNYSRZQW1xe3E+SDA0UkZF
djtOSy04anpqITNTdFleMTtXQj00OXVKCnooT2s0YDNhRV9qTD5IaUV1WihyKiheRFgwIURhcjxs
X0hJO1B+Ozl2YmNySVZTP1NUKGF6V1VDNEA+ZVhTJiltWgp6dEc4MUhePlVoeSZlbENoaG8tJXJn
e1UoPE9KdUNFV3MxQihpZ2V1RS1tOTJmWjlQVHlJUTEwc3JtZCZRdkVsezUKejB0MHg4SWEzTnp0
fENWJlhPZjtgIyFEZ2UmWGVRe1RjcFR0WEk5MDAtUFpmQUI+JlNFaVIjO2JtcjI5RllFPlleCnp2
MjhOeHZpPzxXbFMldmdTMi1lK2pgZ3FkaUE/JnVmMGVWUHw3S1ohJXJMaEBDWittVTtnfEhgZ0Ry
bj02Ozs1cwp6e1RLODxHVTxRJlMyLW48ZSpnRFlRM1pVfmU/azJCNU9BSD4+UVdnRXBuQlYlZHMm
fjUqYE16cD1DRkwlVXphZmsKejU0K242PldFQV9AdDBOSndOeD8mN2xtVDBUJTxARnhaaGsjI20k
eX1OQV9FWG5Jfm5qcElGNmJSM2NMKXFwV2xsCnpIQG0yaHZRKTd9bDdQYiRpOTRxSihiJklBRGtK
KWVsPUx6QkQmMmZiPHN3Q1BTZlhXMEQ/T0k/bU5CZF5SYjxNXwp6Ni0/SndYMCUhPThVMVVuT3Yx
JXV7JFB4aGxvZF50bCZ6OWMmXz0xVVFeeFI/QjVTUGlDaihnSlFyfDNpT09mWVUKenhpV25HRW1f
OHNSJDJBV05iO3lIZFJMTXE3RXR7Tk51RmhrcT4+ZVZVczYzWCk+IWI1bEJ+OUpXel95bHMzPGRS
CnpsI0dfQm1qIUlNM1I8eVNrfmk1UiVUITVaPTMxVmFFOGB0ZEExYkA3ZFg/KSZ0RT56UVNJSHo1
Pm4hMmYrYWlWQwp6R1VoQEJyVlF1OGJrbEU+SWVzVyhiUShuLXc4cVRmTHl+O2Q3V0Reb2Z1Kndp
UiFRRCNpXyZ3d0N5UH5nX2Njfk8KelMhJk87YUBFJkxRVVQoblNFUC1kO2kmXk1tI3NvSylPdE90
NEJPfW9sb1Fnei0mK25eKiRWPVVeMipPR2kmclF6CnomLXhsPHltLSReP1JUdFBePFBMKnd7bTVl
Xk0rTFVnT3d7fF8qRShuO0I8PnMwaU9OfkdHJnNqdk5ScFZDc2lnYAp6Q0BVMHN4aDJZfGNYfT4y
VGFLWSRXdDx+MzNUYitZXyQ3czBnPCUxTE17UG1oJH5uZj1YN2YxdGFaPFo9VVlWe28Kej5DfntU
X1UyVCZSST8mYzk8NjAlZDIre3gpXnpsIXlfdkBaJWhWMnRgbylPYXUyMihBd2IxXlcpSzhEcnAl
YEpoCnpobzgrMVg2bTteKTFqKHJPUF5rc0p7Yn0+dHUjSF83XjRkQEVrbWBqJSVDK2hyXm1VQ1ll
NkBZeXhQT2UtNXwydQp6U3JaVT5DP2d3bTg8QVB3T15FSjlhRSZ5N2dlYzNTKDxkT0NtTWBXTF5o
ZVk4a2JxREpEPVd6N1RFby0kaXd6NnoKeigzYj4jSEtKVkN1MnBYa2A/TjtPJl4oc15IYUtISG04
fSg9PG4oOXdUbGtTQlc7IS1gU2tWdn4kanZkQGtTdVVuCnpKRzZXbndZNTNDTElwSChZamJBY1o9
cyphZEU3bFp0KHg3RkB5RGx+VlZzUlBNVHJ4Y0YkWGNKWHA9bGZFb2hHNwp6Jm9gRFVkN3k7cHc5
SXpYYTlaTFdXdm9IYEpwXndoR3BOO2BDQSFMRWtrVG9sTjlReUJFKVlZaEQjWl9nVnFSTDAKeik2
aEdwZzFkNFhOWTZfQk1NT2YmUXN3JV52e1l5Ml80dz0zXnA2az9FNERSd1YqVnxWOGg0NkhiOHA+
dzZZPmFlCnphV1R1TVZPbmItYnhydUNmJjlXc29iUTB2QEhrfWRAdzZwU059WkElPSQ9SFl7TCho
Q2hsbVlPLUFidmtwQykhOQp6YiM3amdgd1RMeGtYKyNRKF5memt7ZSYoITZlU3wyZShJaUV6N088
b0w5KmY1cHUjZWQxbiMrNkJsSSpgKSgkcE8Kej19QDFrVjg0V2hkb0k7Zno7YCp9WXM7VlAxXjto
T18qd3opbG83bio5cV9kX2B+ZkhZdlUyK1Yqdyl8VWdrTDckCnpvaWMofnlhUnJqNGdZfT9lcjVT
IWpNNnN6TmhrYkQwcT5MJXl5Nn0zRHtYa1EqeH4hOEA8MTxtdVNfSVl4fDs7Tgp6USUzTkxjZmRF
PEBiakdUQCQjajs7MUBkSzwwZnhmcjtPa2dwQVFwYyk1ZE4xdEROeGIlUjc2KVoqOz0xN3VHdnYK
ejFoMDY5XzNKdE9ARktNMTR2QnpgZGdrdVolNU1iejFqdT0+UmYqSlZ3Uno8flIlTXFfdWlmUCtU
YnN7bzxga2ptCnpHN21CKzhBenJyQFYkK2c8fUt5NGZ+KzgrREMmZj5uJW0xcUJofkgkempZTWwt
WSZmOGx1PFBtQDJLVz55UEJVbgp6dE45SkJkX001NFlOfHc4JXs4aVFVUUhLbl9AbFBgaz0xbUhS
NWdgTVImeGgxY3MxXzxBKio9PyhzQ3BraDhFYEQKeiFKVnVgeSE0QzlVczkjQlFCLUUoOHp8ZztK
MElaNjI7b0kxIXJpe3BQKEtTfDR5RHAwUjJnRktNOCt6ZUE5YnphCnpFZG5pfWZ2UmQybC19aG1B
Q0BiZlV3Zl5BVVVoY2BTNmxAfWB0VjQwM3QwTWB4R059TSklTyZQVkJaOHdsUnRMXwp6d3x1bTcm
WSg0JXJqKHAyPzB6JWE8WjxXbDA+KiZsVmB+bWFUbVk2czxadVgrPH1pbGFPUGpLOGtsNz4weEd9
b1kKelZCdm1SJWM1UGB2R2plYCp0bjY5bHxXY001ZGAlQyg1IWxmJkE2LTIyU2JHLSNaeWhNdFlx
PzttJWZYdUFrbjZICnpYfiVYZ2t1JSZJNVA3c3wjeEJKQzw0QUxoSVdRM3cjaU0yKEh6Um9tcTxy
UWY9UkhAVmlOd3I5UEEybTJCaDBEQAp6QEBXUDE8PCtXYUIybG83MVhWT2VEV3E/KEhpazVxejZP
ODlvVyYqUEVUckwqYX40al5JbUA/Nmp5YTIldGI3LW8Kem55bCF3UGJAeXloV0szNUpqME5tWVl6
JUQ8bVp+MilTJUR4NWgjY2NAb2BZaGRtNFl9Yk0zRDEoa3pRVSpaTjh8CnpeVGAze18tYSMqVipZ
MHc2MEVRR0clKWgzWjZ9dGZVJUlTPXJxPUtueG4/UzV0QlMqcV55JF42e3RpeUErN0k/SAp6UG8r
OW5KcTRFZ1pZdWUlPk5CdzAyd15Jdm1RS1RYIyhnK0YwPURjZHtKQjZqMll6Vjd3RFd1b3F5Zl5g
MT4hO3cKempFKDsjO0xSX0BSTGxKMDQyVE5lPDA4VWplM0YlZ04hREA1SmxBUkNYQEFULUUhOXNg
NC0pRjlNPDlYZW1IMW0hCno7KypZajRmKkhgU31te010dGdqUXVhO051N2hwJjVSMDFtWHBxcmxy
cTE5MFpOfUl0fVFSLXFjclIpV2BXcz5+Rwp6NHxQQi08aHZPZj8/QkFUPTxTKiE2VHZnQmRCa3Ro
TTRzemQ4TkdRKjRTQVVzQGpaO1ZmTlc8YSZQbG59UCkkV3wKenFWc3tPQmhjWXlae2xWYjt9emol
WntsWHhmdSZPO1ozfU9QJjB4dWMrU1Z5KHA5KCUjNT1vZUhOZlVqckx1PEh6CnpHVHAhKF5DQnx3
NV5tcm5sbnMoNCsoMEVyakdIKW9KKDlTU1pzZV5ASEZgKz90X3NDNT9aMTJucHV1YXp5VEFnTwp6
SUQhJSVfUHYwX0lVcyRmSyFgMy07ezA4ZiowN1lVZFdLc3kpR011ZVcoS2ZKN2xBIVFtT24+RGs5
PGNXUFhiZkEKejMyOWBEYzlAJCo/ZVZUbU0+NWwxO19jeFNzckVRNylwKG8hKHpoUSNxQ0kkez1B
cjhYaSRCXzE5SzxPaTViN0FrCnpRakhvP2QpeE9FS3dnMl5fZFc+VEwpWmw4bDFnaTZxRk5yVSVF
XntCSmoocSgyVyowO1EybFl3MzMhSEVyXjZ3IQp6WTtjS1ghPHxUVSR6PW84KkNtJD8pSXUofll+
WFRRSGNXc31yejBnVjttfFBhbnUwLTQ4PFNnUD0oK2pCJTV3e30KekxjOXNDSld8WUszeVYtJWsq
NFFuWFA9WE9FLVclfm40WV9eaD90cFImQ3lgYiVnelJ3ckQ+JD84TzFYVnFKLUAxCnpeTkBoKSty
bEN9U0xEd2clYWFIRFFEfnVnZWhIVHc8MWpZbDd8YjxIdSFOSTRvdztOeHYzZEE/QUl0Wns2MmNp
Kgp6eTBGTHg9bUc8IWticVBRciNxT1V2Q3RwbG15JlUlcSY7KmZFVHAxfTRRfEErcCZEQHx5PT52
d1V4QnozMV8qbU4KemRmNW5WTilnJUluMCt5QCR8LWRVTiooVCRLWDN0KE12UCFpJjVfeD5zKDV2
I3YqQ0hSeGp3MmRBJmtuX1IkeCs1CnpuUH49SWNncmM8aHwlZGZqRSU5cGkmaDs9Jk9ad19qSS1K
ZChyVDtDM35JQ1N3aW40TzZWZnJNQHtHfTQlODBNNwp6dTNAb25UX2xtamx9YURLKzJeYX4qWmR9
KEpzSD5oe0xgazR4OXt4Kjhyb3g+X19zXn4mNT9EMVd2T1Q/eW4xbWMKenVAPWBZISlwVkhOTlhh
SkIlQ0J6QHRlbEx4PTx8STk3O0tVbEV+dW5obU5VOEdtQXl5dCpPO0c0fn0pPi15ckZBCnpDVHBG
KitOYWMrTjJ+bUY4aWszJmR7fndZd01KTnxnTnwlRjYyWjNTVjV+alYlPlI5ITZtQUpkUVk7fnBu
c0RBNAp6I21fSD1Wb018KmomTk5QaEApNig4KXNPXmt+OTlCUEM5WEJwPlFnU0E2TGVNeE8pbilC
dW5BbkRvSypHSng9PWEKeiZ7Iyg1RzZCQ3VBZGskYDUwSiVDZDJpI1h7I05QeWVnUTV+O3V5YktU
d0d7bFFLcnRvYDV8X2N3SyM0dkchZDxlCnpNd1lIMUZUYURJTCNxP18lcnA0aj1rS2lAIVM8R3hC
OzQweFFUU1BEcTl4WFRJbFJAMTVENzdLZk03RFRFK1JPfgp6azUxJDV2d0FEcHZPTzZPYnRHNWct
JDFnaSp5NSZ7KXN0eyopWEVZQFkzTmNHJitsQmM7Vzk5Wk02KU4rSmBzS3cKejYqbkQoUkoxV3FO
WXxyKHpzVytRYHg/QU1APUV9ezxtJWMrRUp7RHJ3UXxVZDh4fTd3WkNKZCN1K2JjOEw1RXdnCnpa
MXdeZz8od1opU2I2aCp5OV5Raz9yM3pgUm5xaXZBJnpEYWMhe3xsam9BZVY3KnA4aEU4M29JYEBe
Zit1Um9pOAp6NGcxPT8mbVAjaTxMST9fVHk7Rn1pflVRRT9UZktKa3U4LT8tflF0eEhEfj9ne292
JFRrRjQybl5IbTJ3ejR2R1AKejFHanVxYHIkZTN5PlhaMW9xQSpJa2o2YHxgQXlQVHZOQHRSOWk+
a184SXE0Y1M0LSVDclZlMnhMST1XRGdsezMtCnpmJCQmI2VWPD1ORDFvdW4yKClwJTBBVkVwdCNo
QTZwcF84KlhMUH1hOXt3I3ZKZUFnd2N4Yn4yWVY3LXs/MGNnNgp6ak9LcyVGdFIqVWVEN2UhanY+
JVBpelVMTT5wQXEkaG81LTVwRjxCI0ZBM2B1b1NRQjJYKD5SbU8zMjFZOTZsRjwKej47WkJ0OUBe
STtvdHJTMFpqPzRXNFc0NkAwdjxqP0wlZHcoZDBkdUZIO0N4QEJMV3BrR3cxK316WWdJOUxMRU5D
CnpjT2lJenkkI3tGMnItbVYzN3E/MiZxdlpHSn0qYzlwSjF2KTUxJHohdTlOOX1WaGpFfClOJTA4
MXwkX2Q2TD1OVQp6WDQ9Z3BefVJePTlOfCl3e300aHMlRCkyUEhHfno9ZS14bnhjQDgyTihzeDxG
Qmp8XmF1Ti0tPEt6SSNkQ2h+azYKejtXUj01YFFBZGZTZThmZ2JFdlF4c0VZPiRLUGhjaGVWcUo5
an0mdSVRWGxeVWtKNiMpNzkhQitwQkB3Z0pybFNGCnp7PnVnPjNQVnZtam0pSnlnaH1zMUpfNVpI
NkpqNE4lZGdzVFF9ZjF8ITQ1cz1tZFA4aCZPUkE8R3h5PUUmaXZEYgp6d2UheHU/NHsyNG8zMSYh
WSo9T2U+YV88PlUtakpYbil7eUhlRVJMMSQzMV4pX28+Nj5fYTdQaVZjMio1UlkhbkQKelRmVV9U
dntKbmtWRlNZTDItTjFVQlljV0xZdjN+eD5KWmB4K1lzcFo9TytrOTVMUTc0NXgqe2xfalMpTEta
c1l1CnpaYj40NkJTNEFLJHtPT1dBMCVpLUMrMkwzWCooMn5EdmYoQ0koJERtbUx5NG9SXmJGcT5k
MUkoPlpBN2A2QnRCNwp6JGRnSGZjMzRMPHchaXdFITdhZCRCcXtLSFVjfEtZaHEoRVBuX1JjVUpW
fXpxan1Rb0I2OVU5amooODdWREt2PEwKemtaO2FZMSEhUmpeQihLXl8hMUorbU4jVzJAND52dEc0
cG9gNmZRfjl4REEwY3MzTCVGeEhZd014UFRAU0xjUmUoCnooNm1odD14ZEgwbm9aKXQkVkZuPnFr
I0JWZEMjNnA7QHQ+QE1fVW9WYHwwT0hwOG8rSEIxczZ2Q0llI0hGR2p9TQp6eVlJViQjSSklXmMo
ZX16YCpOP0BjUTEpKThCVGIjTyM8IWhHaUdtKHomPVRtMkNkRlhnWjlgVjl7PFl6byhgY3cKZEJ4
eVc+Zko4PCsqZjhYKXVVdHUxVEVqbWooYkx6ZkAmQjlWbmgqZDAKCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19iYWNrb2ZmL3ZhbGlk
YXRlL01ha2VmaWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lv
bnMvY2tfYmFja29mZi92YWxpZGF0ZS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzllNmQ0ZjMyNWY4Y2YzZWNhN2FmODc5NzgwMDU0OTg3YTQzOWQ1Mi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19iYWNrb2ZmL3ZhbGlkYXRlL01ha2VmaWxlCisr
KyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLlBIT05ZOiBjaGVjayBjbGVhbgotCi1hbGw6
IHZhbGlkYXRlCi0KLXZhbGlkYXRlOiB2YWxpZGF0ZS5jIC4uLy4uLy4uL2luY2x1ZGUvY2tfYmFj
a29mZi5oCi0JJChDQykgJChDRkxBR1MpIC1vIHZhbGlkYXRlIHZhbGlkYXRlLmMKLQotY2hlY2s6
IGFsbAotCS4vdmFsaWRhdGUKLQotY2xlYW46Ci0Jcm0gLXJmIHZhbGlkYXRlICouZFNZTSAqLmV4
ZQotCi1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxkCi1DRkxBR1MrPS1E
X0dOVV9TT1VSQ0UKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L3JlZ3Jlc3Npb25zL2NrX2JhY2tvZmYvdmFsaWRhdGUvdmFsaWRhdGUuYyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2JhY2tvZmYvdmFsaWRhdGUvdmFs
aWRhdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM3ZDQ4ZTMwOWU0MjVhM2I2
ZGE5ZTMyODg1YzVhNTdjZTY2MWRmNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9u
cy9ja19iYWNrb2ZmL3ZhbGlkYXRlL3ZhbGlkYXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0g
KiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRs
aWIuaD4KLQotI2luY2x1ZGUgPGNrX2JhY2tvZmYuaD4KLSNpbmNsdWRlICIuLi8uLi9jb21tb24u
aCIKLQotaW50Ci1tYWluKHZvaWQpCi17Ci0JY2tfYmFja29mZl90IGJhY2tvZmYgPSBDS19CQUNL
T0ZGX0lOSVRJQUxJWkVSOwotCWNvbnN0IGNrX2JhY2tvZmZfdCBjZWlsaW5nID0gQ0tfQkFDS09G
Rl9DRUlMSU5HICsgMTsKLQl1bnNpZ25lZCBpbnQgaSA9IDA7Ci0KLQlmcHJpbnRmKHN0ZGVyciwg
IkNlaWxpbmcgaXM6ICV1ICglI3gpXG4iLCBDS19CQUNLT0ZGX0NFSUxJTkcsIENLX0JBQ0tPRkZf
Q0VJTElORyk7Ci0KLQlmb3IgKDs7KSB7Ci0JCWNrX2JhY2tvZmZfdCBwcmV2aW91cyA9IGJhY2tv
ZmY7Ci0JCWNrX2JhY2tvZmZfZWIoJmJhY2tvZmYpOwotCi0JCXByaW50ZigiRUIgJXVcbiIsIGJh
Y2tvZmYpOwotCQlpZiAocHJldmlvdXMgPT0gY2VpbGluZykgewotCQkJaWYgKGJhY2tvZmYgIT0g
Y2VpbGluZykKLQkJCQlja19lcnJvcigiW0NdIEdCOiBleHBlY3RlZCAldSwgZ290ICV1XG4iLCBj
ZWlsaW5nLCBiYWNrb2ZmKTsKLQotCQkJaWYgKGkrKyA+PSAxKQotCQkJCWJyZWFrOwotCQl9IGVs
c2UgaWYgKHByZXZpb3VzICE9IGJhY2tvZmYgPj4gMSkgewotCQkJY2tfZXJyb3IoIltOXSBHQjog
ZXhwZWN0ZWQgJXUgKCV1KSwgZ290ICV1XG4iLCBwcmV2aW91cyA8PCAxLCBwcmV2aW91cywgYmFj
a29mZik7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYmFycmllci9iZW5jaG1hcmsv
TWFrZWZpbGUgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9j
a19iYXJyaWVyL2JlbmNobWFyay9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZWE5NzNkMmM1NTZmYzRjNTRjMzk5NGU0NTI0YWVlYTBhOWMyYmFiNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19iYXJyaWVyL2JlbmNobWFyay9NYWtlZmlsZQorKysg
L2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS5QSE9OWTogY2xlYW4gZGlzdHJpYnV0aW9uCi0K
LU9CSkVDVFM9dGhyb3VnaHB1dAotCi1hbGw6ICQoT0JKRUNUUykKLQotdGhyb3VnaHB1dDogdGhy
b3VnaHB1dC5jIC4uLy4uLy4uL2luY2x1ZGUvY2tfYmFycmllci5oIC4uLy4uLy4uL3NyYy9ja19i
YXJyaWVyX2NlbnRyYWxpemVkLmMKLQkkKENDKSAkKENGTEFHUykgLW8gdGhyb3VnaHB1dCB0aHJv
dWdocHV0LmMgLi4vLi4vLi4vc3JjL2NrX2JhcnJpZXJfY2VudHJhbGl6ZWQuYwotCi1jbGVhbjoK
LQlybSAtcmYgKi5kU1lNICouZXhlICp+ICoubyAkKE9CSkVDVFMpCi0KLWluY2x1ZGUgLi4vLi4v
Li4vYnVpbGQvcmVncmVzc2lvbnMuYnVpbGQKLUNGTEFHUys9JChQVEhSRUFEX0NGTEFHUykgLURf
R05VX1NPVVJDRQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2sv
cmVncmVzc2lvbnMvY2tfYmFycmllci9iZW5jaG1hcmsvdGhyb3VnaHB1dC5jIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYmFycmllci9iZW5jaG1hcmsv
dGhyb3VnaHB1dC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTFjMDEzOTVjNTNh
ZjUzMTAxYjhiZjNiYjcxYzE2NjNhM2Y1ZTM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jl
c3Npb25zL2NrX2JhcnJpZXIvYmVuY2htYXJrL3Rocm91Z2hwdXQuYworKysgL2Rldi9udWxsCkBA
IC0xLDEzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEgRGF2aWQgSm9zZXBoLgotICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICog
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAq
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
Ci0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUg
PHVuaXN0ZC5oPgotI2luY2x1ZGUgPGNrX3N0ZGludC5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+
Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGNr
X3ByLmg+Ci0jaW5jbHVkZSA8Y2tfYmFycmllci5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9u
LmgiCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfSU5DXzY0KSAmJiBkZWZpbmVkKENLX0ZfUFJfTE9B
RF82NCkKLXN0YXRpYyBpbnQgZG9uZSA9IDA7Ci1zdGF0aWMgc3RydWN0IGFmZmluaXR5IGE7Ci1z
dGF0aWMgaW50IG50aHI7Ci1zdGF0aWMgaW50IHRpZDsKLXN0YXRpYyBja19iYXJyaWVyX2NlbnRy
YWxpemVkX3QgYmFycmllciA9IENLX0JBUlJJRVJfQ0VOVFJBTElaRURfSU5JVElBTElaRVI7Ci1z
dHJ1Y3QgY291bnRlciB7Ci0JdWludDY0X3QgdmFsdWU7Ci19IENLX0NDX0NBQ0hFTElORTsKLXN0
cnVjdCBjb3VudGVyICpjb3VudGVyczsKLQotc3RhdGljIHZvaWQgKgotdGhyZWFkKHZvaWQgKm51
bGwgQ0tfQ0NfVU5VU0VEKQotewotCWNrX2JhcnJpZXJfY2VudHJhbGl6ZWRfc3RhdGVfdCBzdGF0
ZSA9IENLX0JBUlJJRVJfQ0VOVFJBTElaRURfU1RBVEVfSU5JVElBTElaRVI7Ci0JaW50IGlkOwot
Ci0JaWQgPSBja19wcl9mYWFfaW50KCZ0aWQsIDEpOwotCWFmZl9pdGVyYXRlKCZhKTsKLQotCXdo
aWxlIChja19wcl9sb2FkX2ludCgmZG9uZSkgPT0gMCkgewotCQlja19iYXJyaWVyX2NlbnRyYWxp
emVkKCZiYXJyaWVyLCAmc3RhdGUsIG50aHIpOwotCQlja19wcl9pbmNfNjQoJmNvdW50ZXJzW2lk
XS52YWx1ZSk7Ci0JCWNrX2JhcnJpZXJfY2VudHJhbGl6ZWQoJmJhcnJpZXIsICZzdGF0ZSwgbnRo
cik7Ci0JCWNrX3ByX2luY182NCgmY291bnRlcnNbaWRdLnZhbHVlKTsKLQkJY2tfYmFycmllcl9j
ZW50cmFsaXplZCgmYmFycmllciwgJnN0YXRlLCBudGhyKTsKLQkJY2tfcHJfaW5jXzY0KCZjb3Vu
dGVyc1tpZF0udmFsdWUpOwotCQlja19iYXJyaWVyX2NlbnRyYWxpemVkKCZiYXJyaWVyLCAmc3Rh
dGUsIG50aHIpOwotCQlja19wcl9pbmNfNjQoJmNvdW50ZXJzW2lkXS52YWx1ZSk7Ci0JCWNrX2Jh
cnJpZXJfY2VudHJhbGl6ZWQoJmJhcnJpZXIsICZzdGF0ZSwgbnRocik7Ci0JCWNrX3ByX2luY182
NCgmY291bnRlcnNbaWRdLnZhbHVlKTsKLQkJY2tfYmFycmllcl9jZW50cmFsaXplZCgmYmFycmll
ciwgJnN0YXRlLCBudGhyKTsKLQkJY2tfcHJfaW5jXzY0KCZjb3VudGVyc1tpZF0udmFsdWUpOwot
CQlja19iYXJyaWVyX2NlbnRyYWxpemVkKCZiYXJyaWVyLCAmc3RhdGUsIG50aHIpOwotCQlja19w
cl9pbmNfNjQoJmNvdW50ZXJzW2lkXS52YWx1ZSk7Ci0JCWNrX2JhcnJpZXJfY2VudHJhbGl6ZWQo
JmJhcnJpZXIsICZzdGF0ZSwgbnRocik7Ci0JCWNrX3ByX2luY182NCgmY291bnRlcnNbaWRdLnZh
bHVlKTsKLQl9Ci0KLQlyZXR1cm4gKE5VTEwpOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNo
YXIgKmFyZ3ZbXSkKLXsKLQlwdGhyZWFkX3QgKnRocmVhZHM7Ci0JdWludDY0X3QgY291bnQ7Ci0J
aW50IGk7Ci0KLQlpZiAoYXJnYyAhPSAzKSB7Ci0JCWNrX2Vycm9yKCJDb3JyZWN0IHVzYWdlOiA8
bnVtYmVyIG9mIHRocmVhZHM+IDxhZmZpbml0eSBkZWx0YT5cbiIpOwotCX0KLQotCW50aHIgPSBh
dG9pKGFyZ3ZbMV0pOwotICAgICAgICBpZiAobnRociA8PSAwKSB7Ci0gICAgICAgICAgICAgICAg
Y2tfZXJyb3IoIkVSUk9SOiBOdW1iZXIgb2YgdGhyZWFkcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAw
XG4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocmVhZHMgPSBtYWxsb2Moc2l6ZW9mKHB0aHJl
YWRfdCkgKiBudGhyKTsKLSAgICAgICAgaWYgKHRocmVhZHMgPT0gTlVMTCkgewotICAgICAgICAg
ICAgICAgIGNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIHRocmVhZCBzdHJ1Y3R1
cmVzXG4iKTsKLSAgICAgICAgfQotCi0JY291bnRlcnMgPSBjYWxsb2Moc2l6ZW9mKHN0cnVjdCBj
b3VudGVyKSwgbnRocik7Ci0JaWYgKGNvdW50ZXJzID09IE5VTEwpIHsKLQkJY2tfZXJyb3IoIkVS
Uk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgY291bnRlcnNcbiIpOwotCX0KLQotICAgICAgICBhLmRl
bHRhID0gYXRvaShhcmd2WzJdKTsKLQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW5n
IHRocmVhZHMgKGJhcnJpZXIpLi4uIik7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudGhyOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICBpZiAocHRocmVhZF9jcmVhdGUoJnRocmVhZHNbaV0sIE5V
TEwsIHRocmVhZCwgTlVMTCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNrX2Vycm9yKCJF
UlJPUjogQ291bGQgbm90IGNyZWF0ZSB0aHJlYWQgJWRcbiIsIGkpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImRvbmVcbiIpOwotCi0JY29t
bW9uX3NsZWVwKDEwKTsKLQotCWNvdW50ID0gMDsKLQlja19wcl9zdG9yZV9pbnQoJmRvbmUsIDEp
OwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyArK2kpCi0JCWNvdW50ICs9IGNrX3ByX2xvYWRfNjQo
JmNvdW50ZXJzW2ldLnZhbHVlKTsKLQlwcmludGYoIiVkICUxNiIgUFJJdTY0ICJcbiIsIG50aHIs
IGNvdW50KTsKLQotCXJldHVybiAoMCk7Ci19Ci0jZWxzZQotaW50Ci1tYWluKHZvaWQpCi17Ci0K
LQlmcHV0cygiVW5zdXBwb3J0ZWQuIiwgc3RkZXJyKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgot
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9u
cy9ja19iYXJyaWVyL3ZhbGlkYXRlL01ha2VmaWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYmFycmllci92YWxpZGF0ZS9NYWtlZmlsZQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMxYTFhNmQyYjRlMWYxNDA4NjMyYmEzYmNmMjE5ZGQw
YWEwYTE2ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19iYXJyaWVyL3Zh
bGlkYXRlL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLlBIT05ZOiBj
aGVjayBjbGVhbiBkaXN0cmlidXRpb24KLQotT0JKRUNUUz1iYXJyaWVyX2NlbnRyYWxpemVkIGJh
cnJpZXJfY29tYmluaW5nIGJhcnJpZXJfZGlzc2VtaW5hdGlvbiBiYXJyaWVyX3RvdXJuYW1lbnQg
YmFycmllcl9tY3MKLQotYWxsOiAkKE9CSkVDVFMpCi0KLWJhcnJpZXJfY2VudHJhbGl6ZWQ6IGJh
cnJpZXJfY2VudHJhbGl6ZWQuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX2JhcnJpZXIuaCAuLi8uLi8u
Li9zcmMvY2tfYmFycmllcl9jZW50cmFsaXplZC5jCi0JJChDQykgJChDRkxBR1MpIC1vIGJhcnJp
ZXJfY2VudHJhbGl6ZWQgYmFycmllcl9jZW50cmFsaXplZC5jIC4uLy4uLy4uL3NyYy9ja19iYXJy
aWVyX2NlbnRyYWxpemVkLmMKLQotYmFycmllcl9jb21iaW5pbmc6IGJhcnJpZXJfY29tYmluaW5n
LmMgLi4vLi4vLi4vaW5jbHVkZS9ja19iYXJyaWVyLmggLi4vLi4vLi4vc3JjL2NrX2JhcnJpZXJf
Y29tYmluaW5nLmMKLQkkKENDKSAkKENGTEFHUykgLW8gYmFycmllcl9jb21iaW5pbmcgYmFycmll
cl9jb21iaW5pbmcuYyAuLi8uLi8uLi9zcmMvY2tfYmFycmllcl9jb21iaW5pbmcuYwotCi1iYXJy
aWVyX2Rpc3NlbWluYXRpb246IGJhcnJpZXJfZGlzc2VtaW5hdGlvbi5jIC4uLy4uLy4uL2luY2x1
ZGUvY2tfYmFycmllci5oIC4uLy4uLy4uL3NyYy9ja19iYXJyaWVyX2Rpc3NlbWluYXRpb24uYwot
CSQoQ0MpICQoQ0ZMQUdTKSAtbyBiYXJyaWVyX2Rpc3NlbWluYXRpb24gYmFycmllcl9kaXNzZW1p
bmF0aW9uLmMgLi4vLi4vLi4vc3JjL2NrX2JhcnJpZXJfZGlzc2VtaW5hdGlvbi5jCi0KLWJhcnJp
ZXJfdG91cm5hbWVudDogYmFycmllcl90b3VybmFtZW50LmMgLi4vLi4vLi4vaW5jbHVkZS9ja19i
YXJyaWVyLmggLi4vLi4vLi4vc3JjL2NrX2JhcnJpZXJfdG91cm5hbWVudC5jCi0JJChDQykgJChD
RkxBR1MpIC1vIGJhcnJpZXJfdG91cm5hbWVudCBiYXJyaWVyX3RvdXJuYW1lbnQuYyAuLi8uLi8u
Li9zcmMvY2tfYmFycmllcl90b3VybmFtZW50LmMKLQotYmFycmllcl9tY3M6IGJhcnJpZXJfbWNz
LmMgLi4vLi4vLi4vaW5jbHVkZS9ja19iYXJyaWVyLmggLi4vLi4vLi4vc3JjL2NrX2JhcnJpZXJf
bWNzLmMKLQkkKENDKSAkKENGTEFHUykgLW8gYmFycmllcl9tY3MgYmFycmllcl9tY3MuYyAuLi8u
Li8uLi9zcmMvY2tfYmFycmllcl9tY3MuYwotCi1jaGVjazogYWxsCi0JcmM9MDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZm9yIGQgaW4gJChP
QkpFQ1RTKSA7IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWVjaG8gJCRk
OwkJCQkJXAotCQkuLyQkZCAkKENPUkVTKSAxIDEgfHwgcmM9MTsgICAgIAkJXAotCWRvbmU7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWV4aXQg
JCRyYwotCi1jbGVhbjoKLQlybSAtcmYgKi5kU1lNICouZXhlICp+ICoubyAkKE9CSkVDVFMpCi0K
LWluY2x1ZGUgLi4vLi4vLi4vYnVpbGQvcmVncmVzc2lvbnMuYnVpbGQKLUNGTEFHUys9JChQVEhS
RUFEX0NGTEFHUykgLURfR05VX1NPVVJDRQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYmFycmllci92YWxpZGF0ZS9iYXJyaWVyX2Nl
bnRyYWxpemVkLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9u
cy9ja19iYXJyaWVyL3ZhbGlkYXRlL2JhcnJpZXJfY2VudHJhbGl6ZWQuYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTUxOTEzYWI2NjdlYWIzYTUzOGUxNTUzYjdkNGFiOTkwMjkyMTlk
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19iYXJyaWVyL3ZhbGlkYXRl
L2JhcnJpZXJfY2VudHJhbGl6ZWQuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IDIwMTEtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgot
I2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkaW50
Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxz
dHJpbmdzLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQot
I2luY2x1ZGUgPGNrX3ByLmg+Ci0jaW5jbHVkZSA8Y2tfYmFycmllci5oPgotCi0jaW5jbHVkZSAi
Li4vLi4vY29tbW9uLmgiCi0KLSNpZm5kZWYgSVRFUkFURQotI2RlZmluZSBJVEVSQVRFIDUwMDAw
MDAKLSNlbmRpZgotCi0jaWZuZGVmIEVOVFJJRVMKLSNkZWZpbmUgRU5UUklFUyA1MTIKLSNlbmRp
ZgotCi1zdGF0aWMgc3RydWN0IGFmZmluaXR5IGE7Ci1zdGF0aWMgaW50IG50aHI7Ci1zdGF0aWMg
aW50IGNvdW50ZXJzW0VOVFJJRVNdOwotc3RhdGljIGNrX2JhcnJpZXJfY2VudHJhbGl6ZWRfdCBi
YXJyaWVyID0gQ0tfQkFSUklFUl9DRU5UUkFMSVpFRF9JTklUSUFMSVpFUjsKLXN0YXRpYyBpbnQg
YmFycmllcl93YWl0OwotCi1zdGF0aWMgdm9pZCAqCi10aHJlYWQodm9pZCAqbnVsbCBDS19DQ19V
TlVTRUQpCi17Ci0JY2tfYmFycmllcl9jZW50cmFsaXplZF9zdGF0ZV90IHN0YXRlID0gQ0tfQkFS
UklFUl9DRU5UUkFMSVpFRF9TVEFURV9JTklUSUFMSVpFUjsKLQlpbnQgaiwgY291bnRlcjsKLQlp
bnQgaSA9IDA7Ci0KLQlhZmZfaXRlcmF0ZSgmYSk7Ci0KLQlja19wcl9pbmNfaW50KCZiYXJyaWVy
X3dhaXQpOwotCXdoaWxlIChja19wcl9sb2FkX2ludCgmYmFycmllcl93YWl0KSAhPSBudGhyKQot
CQlja19wcl9zdGFsbCgpOwotCi0JZm9yIChqID0gMDsgaiA8IElURVJBVEU7IGorKykgewotCQlp
ID0gaisrICYgKEVOVFJJRVMgLSAxKTsKLQkJY2tfcHJfaW5jX2ludCgmY291bnRlcnNbaV0pOwot
CQlja19iYXJyaWVyX2NlbnRyYWxpemVkKCZiYXJyaWVyLCAmc3RhdGUsIG50aHIpOwotCQljb3Vu
dGVyID0gY2tfcHJfbG9hZF9pbnQoJmNvdW50ZXJzW2ldKTsKLQkJaWYgKGNvdW50ZXIgIT0gbnRo
ciAqIChqIC8gRU5UUklFUyArIDEpKSB7Ci0JCQlja19lcnJvcigiRkFJTEVEIFslZDolZF06ICVk
ICE9ICVkXG4iLCBpLCBqIC0gMSwgY291bnRlciwgbnRocik7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4g
KE5VTEwpOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlwdGhy
ZWFkX3QgKnRocmVhZHM7Ci0JaW50IGk7Ci0KLQlpZiAoYXJnYyA8IDMpIHsKLQkJY2tfZXJyb3Io
IlVzYWdlOiBjb3JyZWN0IDxudW1iZXIgb2YgdGhyZWFkcz4gPGFmZmluaXR5IGRlbHRhPlxuIik7
Ci0JfQotCi0JbnRociA9IGF0b2koYXJndlsxXSk7Ci0JaWYgKG50aHIgPD0gMCkgewotCQlja19l
cnJvcigiRVJST1I6IE51bWJlciBvZiB0aHJlYWRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcbiIp
OwotCX0KLQotCXRocmVhZHMgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyKTsKLQlp
ZiAodGhyZWFkcyA9PSBOVUxMKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9j
YXRlIHRocmVhZCBzdHJ1Y3R1cmVzXG4iKTsKLQl9Ci0KLQlhLmRlbHRhID0gYXRvaShhcmd2WzJd
KTsKLQotCWZwcmludGYoc3RkZXJyLCAiQ3JlYXRpbmcgdGhyZWFkcyAoYmFycmllcikuLi4iKTsK
LQlmb3IgKGkgPSAwOyBpIDwgbnRocjsgaSsrKSB7Ci0JCWlmIChwdGhyZWFkX2NyZWF0ZSgmdGhy
ZWFkc1tpXSwgTlVMTCwgdGhyZWFkLCBOVUxMKSkgewotCQkJY2tfZXJyb3IoIkVSUk9SOiBDb3Vs
ZCBub3QgY3JlYXRlIHRocmVhZCAlZFxuIiwgaSk7Ci0JCX0KLQl9Ci0JZnByaW50ZihzdGRlcnIs
ICJkb25lXG4iKTsKLQotCWZwcmludGYoc3RkZXJyLCAiV2FpdGluZyBmb3IgdGhyZWFkcyB0byBm
aW5pc2ggY29ycmVjdG5lc3MgcmVncmVzc2lvbi4uLiIpOwotCWZvciAoaSA9IDA7IGkgPCBudGhy
OyBpKyspCi0JCXB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsKLQlmcHJpbnRmKHN0ZGVy
ciwgImRvbmUgKHBhc3NlZClcbiIpOwotCi0KLQlyZXR1cm4gKDApOwotfQotCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19iYXJyaWVy
L3ZhbGlkYXRlL2JhcnJpZXJfY29tYmluaW5nLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9ja19iYXJyaWVyL3ZhbGlkYXRlL2JhcnJpZXJfY29tYmluaW5n
LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZmEwY2YzMzlkODZhNDE3N2VhNGUy
NzIwNTM0ZGFjZjM0MmY3N2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tf
YmFycmllci92YWxpZGF0ZS9iYXJyaWVyX2NvbWJpbmluZy5jCisrKyAvZGV2L251bGwKQEAgLTEs
MTQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFNhbXkgQWwgQmFocmEuCi0g
KiBDb3B5cmlnaHQgMjAxMSBEYXZpZCBKb3NlcGguCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBB
TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICog
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAq
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8
cHRocmVhZC5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNs
dWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4K
LSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotCi0jaW5jbHVkZSA8
Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19iYXJyaWVyLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21t
b24uaCIKLQotI2lmbmRlZiBJVEVSQVRFCi0jZGVmaW5lIElURVJBVEUgNTAwMDAwMAotI2VuZGlm
Ci0KLSNpZm5kZWYgRU5UUklFUwotI2RlZmluZSBFTlRSSUVTIDUxMgotI2VuZGlmCi0KLXN0YXRp
YyBzdHJ1Y3QgYWZmaW5pdHkgYTsKLXN0YXRpYyBpbnQgbnRocjsKLXN0YXRpYyBpbnQgbmdyb3Vw
czsKLXN0YXRpYyBpbnQgY291bnRlcnNbRU5UUklFU107Ci1zdGF0aWMgY2tfYmFycmllcl9jb21i
aW5pbmdfdCBiYXJyaWVyOwotc3RhdGljIGludCBiYXJyaWVyX3dhaXQ7Ci0KLXN0YXRpYyB2b2lk
ICoKLXRocmVhZCh2b2lkICpncm91cCkKLXsKLQlja19iYXJyaWVyX2NvbWJpbmluZ19zdGF0ZV90
IHN0YXRlID0gQ0tfQkFSUklFUl9DT01CSU5JTkdfU1RBVEVfSU5JVElBTElaRVI7Ci0JaW50IGos
IGNvdW50ZXI7Ci0JaW50IGkgPSAwOwotCi0JYWZmX2l0ZXJhdGUoJmEpOwotCi0JY2tfcHJfaW5j
X2ludCgmYmFycmllcl93YWl0KTsKLQl3aGlsZSAoY2tfcHJfbG9hZF9pbnQoJmJhcnJpZXJfd2Fp
dCkgIT0gKG50aHIgKiBuZ3JvdXBzKSkKLQkJY2tfcHJfc3RhbGwoKTsKLQotCWZvciAoaiA9IDA7
IGogPCBJVEVSQVRFOyBqKyspIHsKLQkJaSA9IGorKyAmIChFTlRSSUVTIC0gMSk7Ci0JCWNrX3By
X2luY19pbnQoJmNvdW50ZXJzW2ldKTsKLQkJY2tfYmFycmllcl9jb21iaW5pbmcoJmJhcnJpZXIs
IGdyb3VwLCAmc3RhdGUpOwotCQljb3VudGVyID0gY2tfcHJfbG9hZF9pbnQoJmNvdW50ZXJzW2ld
KTsKLQkJaWYgKGNvdW50ZXIgIT0gbnRociAqIG5ncm91cHMgKiAoaiAvIEVOVFJJRVMgKyAxKSkg
ewotCQkJY2tfZXJyb3IoIkZBSUxFRCBbJWQ6JWRdOiAlZCAhPSAlZFxuIiwgaSwgaiAtIDEsIGNv
dW50ZXIsIG50aHIgKiBuZ3JvdXBzKTsKLQkJfQotCX0KLQotCXJldHVybiAoTlVMTCk7Ci19Ci0K
LWludAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCXB0aHJlYWRfdCAqdGhyZWFk
czsKLQlja19iYXJyaWVyX2NvbWJpbmluZ19ncm91cF90ICpncm91cGluZ3M7Ci0JY2tfYmFycmll
cl9jb21iaW5pbmdfZ3JvdXBfdCAqaW5pdF9yb290OwotCWludCBpOwotCi0JaW5pdF9yb290ID0g
bWFsbG9jKHNpemVvZihja19iYXJyaWVyX2NvbWJpbmluZ19ncm91cF90KSk7Ci0JaWYgKGluaXRf
cm9vdCA9PSBOVUxMKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIGlu
aXRpYWwgYmFycmllciBzdHJ1Y3R1cmVcbiIpOwotCX0KLQlja19iYXJyaWVyX2NvbWJpbmluZ19p
bml0KCZiYXJyaWVyLCBpbml0X3Jvb3QpOwotCi0JaWYgKGFyZ2MgPCA0KSB7Ci0JCWNrX2Vycm9y
KCJVc2FnZTogY29ycmVjdCA8dG90YWwgZ3JvdXBzPiA8dGhyZWFkcyBwZXIgZ3JvdXA+IDxhZmZp
bml0eSBkZWx0YT5cbiIpOwotCX0KLQotCW5ncm91cHMgPSBhdG9pKGFyZ3ZbMV0pOwotCWlmIChu
Z3JvdXBzIDw9IDApIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBOdW1iZXIgb2YgZ3JvdXBzIG11c3Qg
YmUgZ3JlYXRlciB0aGFuIDBcbiIpOwotCX0KLQotCW50aHIgPSBhdG9pKGFyZ3ZbMl0pOwotCWlm
IChudGhyIDw9IDApIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBOdW1iZXIgb2YgdGhyZWFkcyBtdXN0
IGJlIGdyZWF0ZXIgdGhhbiAwXG4iKTsKLQl9Ci0KLQlncm91cGluZ3MgPSBtYWxsb2Moc2l6ZW9m
KGNrX2JhcnJpZXJfY29tYmluaW5nX2dyb3VwX3QpICogbmdyb3Vwcyk7Ci0JaWYgKGdyb3VwaW5n
cyA9PSBOVUxMKSB7Ci0JCWNrX2Vycm9yKCJDb3VsZCBub3QgYWxsb2NhdGUgdGhyZWFkIGJhcnJp
ZXIgZ3JvdXBpbmcgc3RydWN0dXJlc1xuIik7Ci0JfQotCi0JdGhyZWFkcyA9IG1hbGxvYyhzaXpl
b2YocHRocmVhZF90KSAqIG50aHIgKiBuZ3JvdXBzKTsKLQlpZiAodGhyZWFkcyA9PSBOVUxMKSB7
Ci0JCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIHRocmVhZCBzdHJ1Y3R1cmVz
XG4iKTsKLQl9Ci0KLQlhLmRlbHRhID0gYXRvaShhcmd2WzNdKTsKLQotCWZvciAoaSA9IDA7IGkg
PCBuZ3JvdXBzOyBpKyspCi0JCWNrX2JhcnJpZXJfY29tYmluaW5nX2dyb3VwX2luaXQoJmJhcnJp
ZXIsIGdyb3VwaW5ncyArIGksIG50aHIpOwotCi0JZnByaW50ZihzdGRlcnIsICJDcmVhdGluZyB0
aHJlYWRzIChiYXJyaWVyKS4uLiIpOwotCWZvciAoaSA9IDA7IGkgPCAobnRociAqIG5ncm91cHMp
OyBpKyspIHsKLQkJaWYgKHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCBOVUxMLCB0aHJlYWQs
IGdyb3VwaW5ncyArIChpICUgbmdyb3VwcykpKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IENvdWxk
IG5vdCBjcmVhdGUgdGhyZWFkICVkXG4iLCBpKTsKLQkJfQotCX0KLQlmcHJpbnRmKHN0ZGVyciwg
ImRvbmVcbiIpOwotCi0JZnByaW50ZihzdGRlcnIsICJXYWl0aW5nIGZvciB0aHJlYWRzIHRvIGZp
bmlzaCBjb3JyZWN0bmVzcyByZWdyZXNzaW9uLi4uIik7Ci0JZm9yIChpID0gMDsgaSA8IChudGhy
ICogbmdyb3Vwcyk7IGkrKykKLQkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwotCWZw
cmludGYoc3RkZXJyLCAiZG9uZSAocGFzc2VkKVxuIik7Ci0KLQlyZXR1cm4gKDApOwotfQotCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9j
a19iYXJyaWVyL3ZhbGlkYXRlL2JhcnJpZXJfZGlzc2VtaW5hdGlvbi5jIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYmFycmllci92YWxpZGF0ZS9iYXJy
aWVyX2Rpc3NlbWluYXRpb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhY2Mx
MGM3YzdlYjlhNTlkNDNkZDg2M2VkZmJhYWI4ZTQzY2IwMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19iYXJyaWVyL3ZhbGlkYXRlL2JhcnJpZXJfZGlzc2VtaW5hdGlvbi5j
CisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMS0y
MDE1IFNhbXkgQWwgQmFocmEuCi0gKiBDb3B5cmlnaHQgMjAxMSBEYXZpZCBKb3NlcGguCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICog
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK
LSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGlu
dHR5cGVzLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNs
dWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgot
I2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMv
dGltZS5oPgotCi0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19iYXJyaWVyLmg+Ci0K
LSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIKLQotI2lmbmRlZiBJVEVSQVRFCi0jZGVmaW5lIElU
RVJBVEUgNTAwMDAwMAotI2VuZGlmCi0KLSNpZm5kZWYgRU5UUklFUwotI2RlZmluZSBFTlRSSUVT
IDUxMgotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgYWZmaW5pdHkgYTsKLXN0YXRpYyBpbnQgbnRo
cjsKLXN0YXRpYyBpbnQgY291bnRlcnNbRU5UUklFU107Ci1zdGF0aWMgaW50IGJhcnJpZXJfd2Fp
dDsKLQotc3RhdGljIHZvaWQgKgotdGhyZWFkKHZvaWQgKmIpCi17Ci0JY2tfYmFycmllcl9kaXNz
ZW1pbmF0aW9uX3QgKmJhcnJpZXIgPSBiOwotCWNrX2JhcnJpZXJfZGlzc2VtaW5hdGlvbl9zdGF0
ZV90IHN0YXRlOwotCWludCBqLCBrLCBjb3VudGVyOwotCWludCBpID0gMDsKLQotCWFmZl9pdGVy
YXRlKCZhKTsKLQlja19iYXJyaWVyX2Rpc3NlbWluYXRpb25fc3Vic2NyaWJlKGJhcnJpZXIsICZz
dGF0ZSk7Ci0KLQlja19wcl9pbmNfaW50KCZiYXJyaWVyX3dhaXQpOwotCXdoaWxlIChja19wcl9s
b2FkX2ludCgmYmFycmllcl93YWl0KSAhPSBudGhyKQotCQlja19wcl9zdGFsbCgpOwotCi0JZm9y
IChqID0gMCwgayA9IDA7IGogPCBJVEVSQVRFOyBqKyssIGsrKykgewotCQlpID0gaisrICYgKEVO
VFJJRVMgLSAxKTsKLQkJY2tfcHJfaW5jX2ludCgmY291bnRlcnNbaV0pOwotCQlja19iYXJyaWVy
X2Rpc3NlbWluYXRpb24oYmFycmllciwgJnN0YXRlKTsKLQkJY291bnRlciA9IGNrX3ByX2xvYWRf
aW50KCZjb3VudGVyc1tpXSk7Ci0JCWlmIChjb3VudGVyICE9IG50aHIgKiAoaiAvIEVOVFJJRVMg
KyAxKSkgewotCQkJY2tfZXJyb3IoIkZBSUxFRCBbJWQ6JWRdOiAlZCAhPSAlZFxuIiwgaSwgaiAt
IDEsIGNvdW50ZXIsIG50aHIpOwotCQl9Ci0JfQotCi0JcmV0dXJuIChOVUxMKTsKLX0KLQotaW50
Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JY2tfYmFycmllcl9kaXNzZW1pbmF0
aW9uX3QgKmJhcnJpZXI7Ci0JY2tfYmFycmllcl9kaXNzZW1pbmF0aW9uX2ZsYWdfdCAqKmJhcnJp
ZXJfaW50ZXJuYWw7Ci0JcHRocmVhZF90ICp0aHJlYWRzOwotCWludCBpLCBzaXplOwotCi0JaWYg
KGFyZ2MgPCAzKSB7Ci0JCWNrX2Vycm9yKCJVc2FnZTogY29ycmVjdCA8bnVtYmVyIG9mIHRocmVh
ZHM+IDxhZmZpbml0eSBkZWx0YT5cbiIpOwotCX0KLQotCW50aHIgPSBhdG9pKGFyZ3ZbMV0pOwot
CWlmIChudGhyIDw9IDApIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBOdW1iZXIgb2YgdGhyZWFkcyBt
dXN0IGJlIGdyZWF0ZXIgdGhhbiAwXG4iKTsKLQl9Ci0KLQl0aHJlYWRzID0gbWFsbG9jKHNpemVv
ZihwdGhyZWFkX3QpICogbnRocik7Ci0JaWYgKHRocmVhZHMgPT0gTlVMTCkgewotCQlja19lcnJv
cigiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSB0aHJlYWQgc3RydWN0dXJlc1xuIik7Ci0JfQot
Ci0JYS5kZWx0YSA9IGF0b2koYXJndlsyXSk7Ci0KLQliYXJyaWVyID0gbWFsbG9jKHNpemVvZihj
a19iYXJyaWVyX2Rpc3NlbWluYXRpb25fdCkgKiBudGhyKTsKLQlpZiAoYmFycmllciA9PSBOVUxM
KSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIGJhcnJpZXIgc3RydWN0
dXJlc1xuIik7Ci0JfQotCi0JYmFycmllcl9pbnRlcm5hbCA9IG1hbGxvYyhzaXplb2YoY2tfYmFy
cmllcl9kaXNzZW1pbmF0aW9uX2ZsYWdfdCAqKSAqIG50aHIpOwotCWlmIChiYXJyaWVyX2ludGVy
bmFsID09IE5VTEwpIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgYmFy
cmllciBzdHJ1Y3R1cmVzXG4iKTsKLQl9Ci0KLQlzaXplID0gY2tfYmFycmllcl9kaXNzZW1pbmF0
aW9uX3NpemUobnRocik7Ci0JZm9yIChpID0gMDsgaSA8IG50aHI7ICsraSkgewotCQliYXJyaWVy
X2ludGVybmFsW2ldID0gbWFsbG9jKHNpemVvZihja19iYXJyaWVyX2Rpc3NlbWluYXRpb25fZmxh
Z190KSAqIHNpemUpOwotCQlpZiAoYmFycmllcl9pbnRlcm5hbFtpXSA9PSBOVUxMKSB7Ci0JCQlj
a19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSBiYXJyaWVyIHN0cnVjdHVyZXNcbiIp
OwotCQl9Ci0JfQotCWNrX2JhcnJpZXJfZGlzc2VtaW5hdGlvbl9pbml0KGJhcnJpZXIsIGJhcnJp
ZXJfaW50ZXJuYWwsIG50aHIpOwotCi0JZnByaW50ZihzdGRlcnIsICJDcmVhdGluZyB0aHJlYWRz
IChiYXJyaWVyKS4uLiIpOwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspIHsKLQkJaWYgKHB0
aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCBOVUxMLCB0aHJlYWQsIGJhcnJpZXIpKSB7Ci0JCQlj
a19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBjcmVhdGUgdGhyZWFkICVkXG4iLCBpKTsKLQkJfQot
CX0KLQlmcHJpbnRmKHN0ZGVyciwgImRvbmVcbiIpOwotCi0JZnByaW50ZihzdGRlcnIsICJXYWl0
aW5nIGZvciB0aHJlYWRzIHRvIGZpbmlzaCBjb3JyZWN0bmVzcyByZWdyZXNzaW9uLi4uIik7Ci0J
Zm9yIChpID0gMDsgaSA8IG50aHI7IGkrKykKLQkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5V
TEwpOwotCWZwcmludGYoc3RkZXJyLCAiZG9uZSAocGFzc2VkKVxuIik7Ci0KLQotCXJldHVybiAo
MCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3Jl
Z3Jlc3Npb25zL2NrX2JhcnJpZXIvdmFsaWRhdGUvYmFycmllcl9tY3MuYyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2JhcnJpZXIvdmFsaWRhdGUvYmFy
cmllcl9tY3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJlM2YyYjA4NTA0OTMz
OThiNWMyNjFlMjA1ZmIwZjdhZmY2MzNhNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNz
aW9ucy9ja19iYXJyaWVyL3ZhbGlkYXRlL2JhcnJpZXJfbWNzLmMKKysrIC9kZXYvbnVsbApAQCAt
MSwxMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBCYWhyYS4K
LSAqIENvcHlyaWdodCAyMDExIERhdmlkIEpvc2VwaC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0g
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAot
ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRl
IDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5ncy5o
PgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0KLSNpbmNsdWRl
IDxja19wci5oPgotI2luY2x1ZGUgPGNrX2JhcnJpZXIuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2Nv
bW1vbi5oIgotCi0jaWZuZGVmIElURVJBVEUKLSNkZWZpbmUgSVRFUkFURSA1MDAwMDAwCi0jZW5k
aWYKLQotI2lmbmRlZiBFTlRSSUVTCi0jZGVmaW5lIEVOVFJJRVMgNTEyCi0jZW5kaWYKLQotc3Rh
dGljIHN0cnVjdCBhZmZpbml0eSBhOwotc3RhdGljIGludCBudGhyOwotc3RhdGljIGludCBjb3Vu
dGVyc1tFTlRSSUVTXTsKLXN0YXRpYyBpbnQgYmFycmllcl93YWl0OwotCi1zdGF0aWMgdm9pZCAq
Ci10aHJlYWQodm9pZCAqYikKLXsKLQlja19iYXJyaWVyX21jc190ICpiYXJyaWVyID0gYjsKLQlj
a19iYXJyaWVyX21jc19zdGF0ZV90IHN0YXRlOwotCWludCBqLCBjb3VudGVyOwotCWludCBpID0g
MDsKLQotCWFmZl9pdGVyYXRlKCZhKTsKLQotCWNrX2JhcnJpZXJfbWNzX3N1YnNjcmliZShiYXJy
aWVyLCAmc3RhdGUpOwotCi0JY2tfcHJfaW5jX2ludCgmYmFycmllcl93YWl0KTsKLQl3aGlsZSAo
Y2tfcHJfbG9hZF9pbnQoJmJhcnJpZXJfd2FpdCkgIT0gbnRocikKLQkJY2tfcHJfc3RhbGwoKTsK
LQotCWZvciAoaiA9IDA7IGogPCBJVEVSQVRFOyBqKyspIHsKLQkJaSA9IGorKyAmIChFTlRSSUVT
IC0gMSk7Ci0JCWNrX3ByX2luY19pbnQoJmNvdW50ZXJzW2ldKTsKLQkJY2tfYmFycmllcl9tY3Mo
YmFycmllciwgJnN0YXRlKTsKLQkJY291bnRlciA9IGNrX3ByX2xvYWRfaW50KCZjb3VudGVyc1tp
XSk7Ci0JCWlmIChjb3VudGVyICE9IG50aHIgKiAoaiAvIEVOVFJJRVMgKyAxKSkgewotCQkJY2tf
ZXJyb3IoIkZBSUxFRCBbJWQ6JWRdOiAlZCAhPSAlZFxuIiwgaSwgaiAtIDEsIGNvdW50ZXIsIG50
aHIpOwotCQl9Ci0JfQotCi0JcmV0dXJuIChOVUxMKTsKLX0KLQotaW50Ci1tYWluKGludCBhcmdj
LCBjaGFyICphcmd2W10pCi17Ci0JcHRocmVhZF90ICp0aHJlYWRzOwotCWNrX2JhcnJpZXJfbWNz
X3QgKmJhcnJpZXI7Ci0JaW50IGk7Ci0KLQlpZiAoYXJnYyA8IDMpIHsKLQkJY2tfZXJyb3IoIlVz
YWdlOiBjb3JyZWN0IDxudW1iZXIgb2YgdGhyZWFkcz4gPGFmZmluaXR5IGRlbHRhPlxuIik7Ci0J
fQotCi0JbnRociA9IGF0b2koYXJndlsxXSk7Ci0JaWYgKG50aHIgPD0gMCkgewotCQlja19lcnJv
cigiRVJST1I6IE51bWJlciBvZiB0aHJlYWRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcbiIpOwot
CX0KLQotCXRocmVhZHMgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyKTsKLQlpZiAo
dGhyZWFkcyA9PSBOVUxMKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRl
IHRocmVhZCBzdHJ1Y3R1cmVzXG4iKTsKLQl9Ci0KLQliYXJyaWVyID0gbWFsbG9jKHNpemVvZihj
a19iYXJyaWVyX21jc190KSAqIG50aHIpOwotCWlmIChiYXJyaWVyID09IE5VTEwpIHsKLQkJY2tf
ZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgYmFycmllciBzdHJ1Y3R1cmVzXG4iKTsK
LQl9Ci0JY2tfYmFycmllcl9tY3NfaW5pdChiYXJyaWVyLCBudGhyKTsKLQotCWEuZGVsdGEgPSBh
dG9pKGFyZ3ZbMl0pOwotCi0JZnByaW50ZihzdGRlcnIsICJDcmVhdGluZyB0aHJlYWRzIChiYXJy
aWVyKS4uLiIpOwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspIHsKLQkJaWYgKHB0aHJlYWRf
Y3JlYXRlKCZ0aHJlYWRzW2ldLCBOVUxMLCB0aHJlYWQsIGJhcnJpZXIpKSB7Ci0JCQlja19lcnJv
cigiRVJST1I6IENvdWxkIG5vdCBjcmVhdGUgdGhyZWFkICVkXG4iLCBpKTsKLQkJfQotCX0KLQlm
cHJpbnRmKHN0ZGVyciwgImRvbmVcbiIpOwotCi0JZnByaW50ZihzdGRlcnIsICJXYWl0aW5nIGZv
ciB0aHJlYWRzIHRvIGZpbmlzaCBjb3JyZWN0bmVzcyByZWdyZXNzaW9uLi4uIik7Ci0JZm9yIChp
ID0gMDsgaSA8IG50aHI7IGkrKykKLQkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwot
CWZwcmludGYoc3RkZXJyLCAiZG9uZSAocGFzc2VkKVxuIik7Ci0KLQotCXJldHVybiAoMCk7Ci19
Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Np
b25zL2NrX2JhcnJpZXIvdmFsaWRhdGUvYmFycmllcl90b3VybmFtZW50LmMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19iYXJyaWVyL3ZhbGlkYXRlL2Jh
cnJpZXJfdG91cm5hbWVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTFkYWI4
ZDY0ZmUxZTJlNDMxMTVkNGFhZjk2OTc1NmVkNWJlOWU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L3JlZ3Jlc3Npb25zL2NrX2JhcnJpZXIvdmFsaWRhdGUvYmFycmllcl90b3VybmFtZW50LmMKKysr
IC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUg
U2FteSBBbCBCYWhyYS4KLSAqIENvcHlyaWdodCAyMDExIERhdmlkIEpvc2VwaC4KLSAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICog
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlw
ZXMuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUg
PHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5j
bHVkZSA8c3RyaW5ncy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy90aW1l
Lmg+Ci0KLSNpbmNsdWRlIDxja19wci5oPgotI2luY2x1ZGUgPGNrX2JhcnJpZXIuaD4KLQotI2lu
Y2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi0jaWZuZGVmIElURVJBVEUKLSNkZWZpbmUgSVRFUkFU
RSA1MDAwMDAwCi0jZW5kaWYKLQotI2lmbmRlZiBFTlRSSUVTCi0jZGVmaW5lIEVOVFJJRVMgNTEy
Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBhZmZpbml0eSBhOwotc3RhdGljIGludCBudGhyOwot
c3RhdGljIGludCBjb3VudGVyc1tFTlRSSUVTXTsKLXN0YXRpYyBpbnQgYmFycmllcl93YWl0Owot
c3RhdGljIGNrX2JhcnJpZXJfdG91cm5hbWVudF90IGJhcnJpZXI7Ci0KLXN0YXRpYyB2b2lkICoK
LXRocmVhZChDS19DQ19VTlVTRUQgdm9pZCAqdW51c2VkKQotewotCWNrX2JhcnJpZXJfdG91cm5h
bWVudF9zdGF0ZV90IHN0YXRlOwotCWludCBqLCBjb3VudGVyOwotCWludCBpID0gMDsKLQotCWFm
Zl9pdGVyYXRlKCZhKTsKLQlja19iYXJyaWVyX3RvdXJuYW1lbnRfc3Vic2NyaWJlKCZiYXJyaWVy
LCAmc3RhdGUpOwotCi0JY2tfcHJfaW5jX2ludCgmYmFycmllcl93YWl0KTsKLQl3aGlsZSAoY2tf
cHJfbG9hZF9pbnQoJmJhcnJpZXJfd2FpdCkgIT0gbnRocikKLQkJY2tfcHJfc3RhbGwoKTsKLQot
CWZvciAoaiA9IDA7IGogPCBJVEVSQVRFOyBqKyspIHsKLQkJaSA9IGorKyAmIChFTlRSSUVTIC0g
MSk7Ci0JCWNrX3ByX2luY19pbnQoJmNvdW50ZXJzW2ldKTsKLQkJY2tfYmFycmllcl90b3VybmFt
ZW50KCZiYXJyaWVyLCAmc3RhdGUpOwotCQljb3VudGVyID0gY2tfcHJfbG9hZF9pbnQoJmNvdW50
ZXJzW2ldKTsKLQkJaWYgKGNvdW50ZXIgIT0gbnRociAqIChqIC8gRU5UUklFUyArIDEpKSB7Ci0J
CQlja19lcnJvcigiRkFJTEVEIFslZDolZF06ICVkICE9ICVkXG4iLCBpLCBqIC0gMSwgY291bnRl
ciwgbnRocik7Ci0JCX0KLQl9Ci0KLQlja19wcl9pbmNfaW50KCZiYXJyaWVyX3dhaXQpOwotCXdo
aWxlIChja19wcl9sb2FkX2ludCgmYmFycmllcl93YWl0KSAhPSBudGhyICogMikKLQkJY2tfcHJf
c3RhbGwoKTsKLQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hh
ciAqYXJndltdKQotewotCXB0aHJlYWRfdCAqdGhyZWFkczsKLQlja19iYXJyaWVyX3RvdXJuYW1l
bnRfcm91bmRfdCAqKnJvdW5kczsKLQlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQotCWlm
IChhcmdjIDwgMykgewotCQlja19lcnJvcigiVXNhZ2U6IGNvcnJlY3QgPG51bWJlciBvZiB0aHJl
YWRzPiA8YWZmaW5pdHkgZGVsdGE+XG4iKTsKLQl9Ci0KLQludGhyID0gYXRvaShhcmd2WzFdKTsK
LQlpZiAobnRociA8PSAwKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogTnVtYmVyIG9mIHRocmVhZHMg
bXVzdCBiZSBncmVhdGVyIHRoYW4gMFxuIik7Ci0JfQotCWEuZGVsdGEgPSBhdG9pKGFyZ3ZbMl0p
OwotCi0JdGhyZWFkcyA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG50aHIpOwotCWlmICh0
aHJlYWRzID09IE5VTEwpIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUg
dGhyZWFkIHN0cnVjdHVyZXNcbiIpOwotCX0KLQotCXJvdW5kcyA9IG1hbGxvYyhzaXplb2YoY2tf
YmFycmllcl90b3VybmFtZW50X3JvdW5kX3QgKikgKiBudGhyKTsKLQlpZiAocm91bmRzID09IE5V
TEwpIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgYmFycmllciBzdHJ1
Y3R1cmVzXG4iKTsKLQl9Ci0KLQlzaXplID0gY2tfYmFycmllcl90b3VybmFtZW50X3NpemUobnRo
cik7Ci0JZm9yIChpID0gMDsgaSA8IG50aHI7ICsraSkgewotCQlyb3VuZHNbaV0gPSBtYWxsb2Mo
c2l6ZW9mKGNrX2JhcnJpZXJfdG91cm5hbWVudF9yb3VuZF90KSAqIHNpemUpOwotCQlpZiAocm91
bmRzW2ldID09IE5VTEwpIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRl
IGJhcnJpZXIgc3RydWN0dXJlc1xuIik7Ci0JCX0KLQl9Ci0KLQlja19iYXJyaWVyX3RvdXJuYW1l
bnRfaW5pdCgmYmFycmllciwgcm91bmRzLCBudGhyKTsKLQotCWZwcmludGYoc3RkZXJyLCAiQ3Jl
YXRpbmcgdGhyZWFkcyAoYmFycmllcikuLi4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnRocjsgaSsr
KSB7Ci0JCWlmIChwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkc1tpXSwgTlVMTCwgdGhyZWFkLCBOVUxM
KSkgewotCQkJY2tfZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgY3JlYXRlIHRocmVhZCAlZFxuIiwg
aSk7Ci0JCX0KLQl9Ci0JZnByaW50ZihzdGRlcnIsICJkb25lXG4iKTsKLQotCWZwcmludGYoc3Rk
ZXJyLCAiV2FpdGluZyBmb3IgdGhyZWFkcyB0byBmaW5pc2ggY29ycmVjdG5lc3MgcmVncmVzc2lv
bi4uLiIpOwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspCi0JCXB0aHJlYWRfam9pbih0aHJl
YWRzW2ldLCBOVUxMKTsKLQlmcHJpbnRmKHN0ZGVyciwgImRvbmUgKHBhc3NlZClcbiIpOwotCi0J
cmV0dXJuICgwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvY2svcmVncmVzc2lvbnMvY2tfYml0bWFwL3ZhbGlkYXRlL01ha2VmaWxlIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYml0bWFwL3ZhbGlkYXRlL01h
a2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWUxM2M4MzQ5OTBmNTA2MzRj
YzBhYzcxOTBmZjZlMWVlNjM0OGU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25z
L2NrX2JpdG1hcC92YWxpZGF0ZS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAg
QEAKLS5QSE9OWTogY2hlY2sgY2xlYW4KLQotT0JKRUNUUz1zZXJpYWwKLQotYWxsOiAkKE9CSkVD
VFMpCi0KLXNlcmlhbDogc2VyaWFsLmMgLi4vLi4vLi4vaW5jbHVkZS9ja19iaXRtYXAuaAotCSQo
Q0MpICQoQ0ZMQUdTKSAtbyBzZXJpYWwgc2VyaWFsLmMKLQotY2xlYW46Ci0Jcm0gLXJmICp+ICou
byAkKE9CSkVDVFMpICouZFNZTSAqLmV4ZQotCi1jaGVjazogYWxsCi0JLi9zZXJpYWwKLQotaW5j
bHVkZSAuLi8uLi8uLi9idWlsZC9yZWdyZXNzaW9ucy5idWlsZAotQ0ZMQUdTKz0tRF9HTlVfU09V
UkNFCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNz
aW9ucy9ja19iaXRtYXAvdmFsaWRhdGUvc2VyaWFsLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19iaXRtYXAvdmFsaWRhdGUvc2VyaWFsLmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNTI1ODhiMWU1ZGNiOTRlNDczMjY0MmVjYjJmMjc2
MTA0ZTlmNDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYml0bWFwL3Zh
bGlkYXRlL3NlcmlhbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzcyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgMjAxMi0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBDb3B5cmlnaHQgMjAxMi0yMDE0
IEFwcE5leHVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAxMiBTaHJleWFzIFByYXNhZC4KLSAqIENv
cHlyaWdodCAyMDE0IFBhdWwgS2h1b25nLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSA8Y2tfYml0bWFwLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRs
aWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgot
Ci0jaWZuZGVmIFNUQVRJQ19MRU5HVEgKLSNkZWZpbmUgU1RBVElDX0xFTkdUSCAyNTYKLSNlbmRp
ZgotCi1zdGF0aWMgdW5zaWduZWQgaW50IGxlbmd0aCA9IDI1NjsKLXN0YXRpYyBja19iaXRtYXBf
dCAqZ19iaXRzOwotCi1zdGF0aWMgdm9pZAotY2hlY2tfaXRlcmF0aW9uKGNrX2JpdG1hcF90ICpi
aXRzLCB1bnNpZ25lZCBpbnQgbGVuLCBib29sIGluaXRpYWwpCi17Ci0JY2tfYml0bWFwX2l0ZXJh
dG9yX3QgaXRlcjsKLQl1bnNpZ25lZCBpbnQgaSA9IDAsIGo7Ci0KLQlsZW4gKz0gMTsKLQlpZiAo
aW5pdGlhbCA9PSB0cnVlKSB7Ci0JCWlmIChiaXRzID09IGdfYml0cykKLQkJCWxlbiA9IGxlbmd0
aDsKLQkJZWxzZQotCQkJbGVuID0gU1RBVElDX0xFTkdUSDsKLQl9Ci0KLQlja19iaXRtYXBfaXRl
cmF0b3JfaW5pdCgmaXRlciwgYml0cyk7Ci0JZm9yIChqID0gMDsgY2tfYml0bWFwX25leHQoYml0
cywgJml0ZXIsICZpKSA9PSB0cnVlOyBqKyspIHsKLQkJaWYgKGkgPT0gaikKLQkJCWNvbnRpbnVl
OwotCi0JCWNrX2Vycm9yKCJbNF0gRVJST1I6IEV4cGVjdGVkIGJpdCAldSwgZ290IGJpdCAldVxu
IiwgaiwgaSk7Ci0JfQotCi0JaWYgKGogIT0gbGVuKSB7Ci0JCWNrX2Vycm9yKCJbNV0gRVJST1I6
IEV4cGVjdGVkIGxlbmd0aCAldSwgZ290IGxlbmd0aCAldVxuIiwgbGVuLCBqKTsKLQl9Ci0KLQly
ZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0KGNrX2JpdG1hcF90ICpiaXRzLCB1bnNpZ25l
ZCBpbnQgbl9sZW5ndGgsIGJvb2wgaW5pdGlhbCkKLXsKLQlib29sIHI7Ci0JdW5zaWduZWQgaW50
IGk7Ci0JQ0tfQklUTUFQX0lOU1RBTkNFKDgpIHU7Ci0KLQlDS19CSVRNQVBfSU5JVCgmdSwgOCwg
ZmFsc2UpOwotCUNLX0JJVE1BUF9TRVQoJnUsIDEpOwotCUNLX0JJVE1BUF9TRVQoJnUsIDQpOwot
Ci0JZm9yIChpID0gMDsgaSA8IG5fbGVuZ3RoOyBpKyspIHsKLQkJaWYgKGNrX2JpdG1hcF90ZXN0
KGJpdHMsIGkpID09ICFpbml0aWFsKSB7Ci0JCQlja19lcnJvcigiWzBdIEVSUk9SIFsldV06IEV4
cGVjdGVkICV1IGdvdCAldVxuIiwgaSwKLQkJCQlpbml0aWFsLCAhaW5pdGlhbCk7Ci0JCX0KLQl9
Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbl9sZW5ndGg7IGkrKykgewotCQlja19iaXRtYXBfc2V0KGJp
dHMsIGkpOwotCQlpZiAoY2tfYml0bWFwX3Rlc3QoYml0cywgaSkgPT0gZmFsc2UpIHsKLQkJCWNr
X2Vycm9yKCJbMV0gRVJST1I6IEV4cGVjdGVkIGJpdCB0byBiZSBzZXQ6ICV1XG4iLCBpKTsKLQkJ
fQotCi0JCWNrX2JpdG1hcF9yZXNldChiaXRzLCBpKTsKLQkJaWYgKGNrX2JpdG1hcF90ZXN0KGJp
dHMsIGkpID09IHRydWUpIHsKLQkJCWNrX2Vycm9yKCJbMl0gRVJST1I6IEV4cGVjdGVkIGJpdCB0
byBiZSBjbGVhcmVkOiAldVxuIiwgaSk7Ci0JCX0KLQotCQlyID0gY2tfYml0bWFwX2J0cyhiaXRz
LCBpKTsKLQkJaWYgKHIgPT0gdHJ1ZSkgewotCQkJY2tfZXJyb3IoIlszXSBFUlJPUjogRXhwZWN0
ZWQgYml0IHRvIGJlIGNsZWFyZWQgYmVmb3JlIDFzdCBidHM6ICV1XG4iLCBpKTsKLQkJfQotCQlp
ZiAoY2tfYml0bWFwX3Rlc3QoYml0cywgaSkgPT0gZmFsc2UpIHsKLQkJCWNrX2Vycm9yKCJbNF0g
RVJST1I6IEV4cGVjdGVkIGJpdCB0byBiZSBzZXQ6ICV1XG4iLCBpKTsKLQkJfQotCQlyID0gY2tf
Yml0bWFwX2J0cyhiaXRzLCBpKTsKLQkJaWYgKHIgPT0gZmFsc2UpIHsKLQkJCWNrX2Vycm9yKCJb
NV0gRVJST1I6IEV4cGVjdGVkIGJpdCB0byBiZSBzZXQgYmVmb3JlIDJuZCBidHM6ICV1XG4iLCBp
KTsKLQkJfQotCQlpZiAoY2tfYml0bWFwX3Rlc3QoYml0cywgaSkgPT0gZmFsc2UpIHsKLQkJCWNr
X2Vycm9yKCJbNl0gRVJST1I6IEV4cGVjdGVkIGJpdCB0byBiZSBzZXQ6ICV1XG4iLCBpKTsKLQkJ
fQotCi0JCWNrX2JpdG1hcF9yZXNldChiaXRzLCBpKTsKLQkJaWYgKGNrX2JpdG1hcF90ZXN0KGJp
dHMsIGkpID09IHRydWUpIHsKLQkJCWNrX2Vycm9yKCJbN10gRVJST1I6IEV4cGVjdGVkIGJpdCB0
byBiZSBjbGVhcmVkOiAldVxuIiwgaSk7Ci0JCX0KLQotCQlja19iaXRtYXBfc2V0KGJpdHMsIGkp
OwotCQlpZiAoY2tfYml0bWFwX3Rlc3QoYml0cywgaSkgPT0gZmFsc2UpIHsKLQkJCWNrX2Vycm9y
KCJbOF0gRVJST1I6IEV4cGVjdGVkIGJpdCB0byBiZSBzZXQ6ICV1XG4iLCBpKTsKLQkJfQotCi0J
CWNoZWNrX2l0ZXJhdGlvbihiaXRzLCBpLCBpbml0aWFsKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBp
IDwgbl9sZW5ndGg7IGkrKykgewotCQlpZiAoY2tfYml0bWFwX3Rlc3QoYml0cywgaSkgPT0gZmFs
c2UpIHsKLQkJCWNrX2Vycm9yKCJbOV0gRVJST1I6IEV4cGVjdGVkIGJpdCB0byBiZSBzZXQ6ICV1
XG4iLCBpKTsKLQkJfQotCX0KLQotCWNrX2JpdG1hcF9jbGVhcihiaXRzKTsKLQotCWZvciAoaSA9
IDA7IGkgPCBuX2xlbmd0aDsgaSsrKSB7Ci0JCWlmIChja19iaXRtYXBfdGVzdChiaXRzLCBpKSA9
PSB0cnVlKSB7Ci0JCQlja19lcnJvcigiWzEwXSBFUlJPUjogRXhwZWN0ZWQgYml0IHRvIGJlIHJl
c2V0OiAldVxuIiwgaSk7Ci0JCX0KLQl9Ci0KLQlja19iaXRtYXBfdW5pb24oYml0cywgQ0tfQklU
TUFQKCZ1KSk7Ci0JaWYgKGNrX2JpdG1hcF90ZXN0KGJpdHMsIDEpID09IGZhbHNlIHx8Ci0JICAg
IGNrX2JpdG1hcF90ZXN0KGJpdHMsIDQpID09IGZhbHNlKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjog
RXhwZWN0ZWQgdW5pb24gc2VtYW50aWNzLlxuIik7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0
aWMgdm9pZAotdGVzdF9pbml0KGJvb2wgaW5pdCkKLXsKLQlja19iaXRtYXBfdCAqYml0bWFwOwot
CXNpemVfdCBieXRlczsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWJ5dGVzID0gY2tfYml0bWFwX3Np
emUobGVuZ3RoKTsKLQliaXRtYXAgPSBtYWxsb2MoYnl0ZXMpOwotCW1lbXNldChiaXRtYXAsIHJh
bmRvbSgpLCBieXRlcyk7Ci0KLQlja19iaXRtYXBfaW5pdChiaXRtYXAsIGxlbmd0aCwgaW5pdCk7
Ci0KLQlpZiAoY2tfYml0bWFwX2JpdHMoYml0bWFwKSAhPSBsZW5ndGgpIHsKLQkJY2tfZXJyb3Io
IkVSUk9SOiBFeHBlY3RlZCBsZW5ndGggJXUgZ290ICV1XG4iLAotCQkgICAgbGVuZ3RoLCBja19i
aXRtYXBfYml0cyhiaXRtYXApKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLQkJaWYgKGNrX2JpdG1hcF90ZXN0KGJpdG1hcCwgaSkgIT0gaW5pdCkgewotCQkJY2tfZXJy
b3IoIkVSUk9SOiBFeHBlY3RlZCBiaXQgJWkgYXQgaW5kZXggJXUsIGdvdCAlaVxuIiwKLQkJCSAg
ICAoaW50KWluaXQsIGksIChpbnQpKCFpbml0KSk7Ci0JCX0KLQl9Ci0KLQlmcmVlKGJpdG1hcCk7
Ci19Ci0KLXN0YXRpYyBja19iaXRtYXBfdCAqCi1yYW5kb21faW5pdCh2b2lkKQotewotCWNrX2Jp
dG1hcF90ICpiaXRtYXA7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQliaXRtYXAgPSBtYWxsb2MoY2tf
Yml0bWFwX3NpemUobGVuZ3RoKSk7Ci0JY2tfYml0bWFwX2luaXQoYml0bWFwLCBsZW5ndGgsIGZh
bHNlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotCQlpZiAocmFuZG9tKCkg
JiAxKSB7Ci0JCQlja19iaXRtYXBfc2V0KGJpdG1hcCwgaSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4g
Yml0bWFwOwotfQotCi1zdGF0aWMgY2tfYml0bWFwX3QgKgotY29weShjb25zdCBja19iaXRtYXBf
dCAqc3JjKQotewotCWNrX2JpdG1hcF90ICpiaXRtYXA7Ci0Jc2l6ZV90IGJ5dGVzID0gY2tfYml0
bWFwX3NpemUoY2tfYml0bWFwX2JpdHMoc3JjKSk7Ci0KLQliaXRtYXAgPSBtYWxsb2MoYnl0ZXMp
OwotCW1lbWNweShiaXRtYXAsIHNyYywgYnl0ZXMpOwotCXJldHVybiBiaXRtYXA7Ci19Ci0KLXN0
YXRpYyB2b2lkCi10ZXN0X2NvdW50cyhjb25zdCBja19iaXRtYXBfdCAqeCwgY29uc3QgY2tfYml0
bWFwX3QgKnkpCi17Ci0JdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQl1bnNpZ25lZCBpbnQgY291
bnRfaW50ZXJzZWN0ID0gMDsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPD0g
bGVuZ3RoICogMjsgaSsrKSB7Ci0JCXVuc2lnbmVkIGFjdHVhbF9saW1pdCA9IGk7Ci0JCXVuc2ln
bmVkIGludCByOwotCQlib29sIGNoZWNrOwotCi0JCWlmIChhY3R1YWxfbGltaXQgPiBja19iaXRt
YXBfYml0cyh4KSkKLQkJCWFjdHVhbF9saW1pdCA9IGNrX2JpdG1hcF9iaXRzKHgpOwotCi0JCWNo
ZWNrID0gY2tfYml0bWFwX2VtcHR5KHgsIGkpOwotCQlpZiAoY2hlY2sgIT0gKGNvdW50ID09IDAp
KSB7Ci0JCQlja19lcnJvcigiY2tfYml0bWFwX2VtcHR5KCV1KTogZ290ICVpIGV4cGVjdGVkICVp
XG4iLAotCQkJICAgIGksIChpbnQpY2hlY2ssIChpbnQpKGNvdW50ID09IDApKTsKLQkJfQotCi0J
CWNoZWNrID0gY2tfYml0bWFwX2Z1bGwoeCwgaSk7Ci0JCWlmIChjaGVjayAhPSAoY291bnQgPT0g
YWN0dWFsX2xpbWl0KSkgewotCQkJY2tfZXJyb3IoImNrX2JpdG1hcF9mdWxsKCV1KTogZ290ICVp
IGV4cGVjdGVkICVpXG4iLAotCQkJICAgIGksIChpbnQpY2hlY2ssIChpbnQpKGNvdW50ID09IGkp
KTsKLQkJfQotCi0JCXIgPSBja19iaXRtYXBfY291bnQoeCwgaSk7Ci0JCWlmIChyICE9IGNvdW50
KSB7Ci0JCQlja19lcnJvcigiY2tfYml0bWFwX2NvdW50KCV1KTogZ290ICV1IGV4cGVjdGVkICV1
XG4iLAotCQkJICAgIGksIHIsIGNvdW50KTsKLQkJfQotCi0JCXIgPSBja19iaXRtYXBfY291bnRf
aW50ZXJzZWN0KHgsIHksIGkpOwotCQlpZiAociAhPSBjb3VudF9pbnRlcnNlY3QpIHsKLQkJCWNr
X2Vycm9yKCJja19iaXRtYXBfY291bnRfaW50ZXJzZWN0KCV1KTogZ290ICV1IGV4cGVjdGVkICV1
XG4iLAotCQkJICAgIGksIHIsIGNvdW50X2ludGVyc2VjdCk7Ci0JCX0KLQotCQlpZiAoaSA8IGxl
bmd0aCkgewotCQkJY291bnQgKz0gY2tfYml0bWFwX3Rlc3QoeCwgaSk7Ci0JCQljb3VudF9pbnRl
cnNlY3QgKz0gY2tfYml0bWFwX3Rlc3QoeCwgaSkgJiBja19iaXRtYXBfdGVzdCh5LCBpKTsKLQkJ
fQotCX0KLX0KLQotc3RhdGljIHZvaWQKLXJhbmRvbV90ZXN0KHVuc2lnbmVkIGludCBzZWVkKQot
ewotCWNrX2JpdG1hcF90ICp4LCAqeF9jb3B5LCAqeTsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCXNy
YW5kb20oc2VlZCk7Ci0KLQl0ZXN0X2luaXQoZmFsc2UpOwotCXRlc3RfaW5pdCh0cnVlKTsKLQot
CXggPSByYW5kb21faW5pdCgpOwotCXkgPSByYW5kb21faW5pdCgpOwotCi0jZGVmaW5lIFRFU1Qo
cm91dGluZSwgZXhwZWN0ZWQpIGRvIHsJCQkJCVwKLQkJeF9jb3B5ID0gY29weSh4KTsJCQkJCVwK
LQkJcm91dGluZSh4X2NvcHksIHkpOwkJCQkJXAotCQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsJCQkJXAotCQkJYm9vbCB4aSA9IGNrX2JpdG1hcF90ZXN0KHgsIGkpOwkJCVwKLQkJCWJv
b2wgeWkgPSBja19iaXRtYXBfdGVzdCh5LCBpKTsJCQlcCi0JCQlib29sIHJpID0gY2tfYml0bWFw
X3Rlc3QoeF9jb3B5LCBpKTsJCVwKLQkJCWJvb2wgd2FudGVkID0gZXhwZWN0ZWQoeGksIHlpKTsJ
CQlcCi0JCQkJCQkJCQlcCi0JCQlpZiAocmkgIT0gd2FudGVkKSB7CQkJCVwKLQkJCQlja19lcnJv
cigiSW4gIiAjcm91dGluZSAiIGF0ICV1OiAiCVwKLQkJCQkgICAgImdvdCAlaSBleHBlY3RlZCAl
aVxuIiwJCVwKLQkJCQkgICAgaSwgcmksIHdhbnRlZCk7CQkJXAotCQkJfQkJCQkJCVwKLQkJfQkJ
CQkJCQlcCi0JCWZyZWUoeF9jb3B5KTsJCQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBP
Uih4LCB5KSAoeCB8IHkpCi0jZGVmaW5lIEFORCh4LCB5KSAoeCAmIHkpCi0jZGVmaW5lIEFOREMy
KHgsIHkpICh4ICYgKH55KSkKLQotCVRFU1QoY2tfYml0bWFwX3VuaW9uLCBPUik7Ci0JVEVTVChj
a19iaXRtYXBfaW50ZXJzZWN0aW9uLCBBTkQpOwotCVRFU1QoY2tfYml0bWFwX2ludGVyc2VjdGlv
bl9uZWdhdGUsIEFOREMyKTsKLQotI3VuZGVmIEFOREMyCi0jdW5kZWYgQU5ECi0jdW5kZWYgT1IK
LSN1bmRlZiBURVNUCi0KLQl0ZXN0X2NvdW50cyh4LCB5KTsKLQotCWZvciAoaSA9IDA7IGkgPCA0
OyBpKyspIHsKLQkJY2tfYml0bWFwX2luaXQoeCwgbGVuZ3RoLCBpICYgMSk7Ci0JCWNrX2JpdG1h
cF9pbml0KHksIGxlbmd0aCwgaSA+PiAxKTsKLQkJdGVzdF9jb3VudHMoeCwgeSk7Ci0JfQotCi0J
ZnJlZSh5KTsKLQlmcmVlKHgpOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb
XSkKLXsKLQl1bnNpZ25lZCBpbnQgYnl0ZXMsIGJhc2U7Ci0Jc2l6ZV90IGksIGo7Ci0KLQlpZiAo
YXJnYyA+PSAyKSB7Ci0JCWxlbmd0aCA9IGF0b2koYXJndlsxXSk7Ci0JfQotCi0JYmFzZSA9IGNr
X2JpdG1hcF9iYXNlKGxlbmd0aCk7Ci0JYnl0ZXMgPSBja19iaXRtYXBfc2l6ZShsZW5ndGgpOwot
CWZwcmludGYoc3RkZXJyLCAiQ29uZmlndXJhdGlvbjogJXUgYnl0ZXNcbiIsCi0JICAgIGJ5dGVz
KTsKLQotCWdfYml0cyA9IG1hbGxvYyhieXRlcyk7Ci0JbWVtc2V0KGdfYml0cy0+bWFwLCAweEZG
LCBiYXNlKTsKLQlja19iaXRtYXBfaW5pdChnX2JpdHMsIGxlbmd0aCwgZmFsc2UpOwotCXRlc3Qo
Z19iaXRzLCBsZW5ndGgsIGZhbHNlKTsKLQotCW1lbXNldChnX2JpdHMtPm1hcCwgMHgwMCwgYmFz
ZSk7Ci0JY2tfYml0bWFwX2luaXQoZ19iaXRzLCBsZW5ndGgsIHRydWUpOwotCXRlc3QoZ19iaXRz
LCBsZW5ndGgsIHRydWUpOwotCi0JY2tfYml0bWFwX3Rlc3QoZ19iaXRzLCBsZW5ndGggLSAxKTsK
LQotCUNLX0JJVE1BUF9JTlNUQU5DRShTVEFUSUNfTEVOR1RIKSBzYjsKLQlmcHJpbnRmKHN0ZGVy
ciwgIlN0YXRpYyBjb25maWd1cmF0aW9uOiAlenUgYnl0ZXNcbiIsCi0JICAgIHNpemVvZihzYikp
OwotCW1lbXNldChDS19CSVRNQVBfQlVGRkVSKCZzYiksIDB4RkYsIGNrX2JpdG1hcF9iYXNlKFNU
QVRJQ19MRU5HVEgpKTsKLQlDS19CSVRNQVBfSU5JVCgmc2IsIFNUQVRJQ19MRU5HVEgsIGZhbHNl
KTsKLQl0ZXN0KENLX0JJVE1BUCgmc2IpLCBTVEFUSUNfTEVOR1RILCBmYWxzZSk7Ci0JbWVtc2V0
KENLX0JJVE1BUF9CVUZGRVIoJnNiKSwgMHgwMCwgY2tfYml0bWFwX2Jhc2UoU1RBVElDX0xFTkdU
SCkpOwotCUNLX0JJVE1BUF9JTklUKCZzYiwgU1RBVElDX0xFTkdUSCwgdHJ1ZSk7Ci0JdGVzdChD
S19CSVRNQVAoJnNiKSwgU1RBVElDX0xFTkdUSCwgdHJ1ZSk7Ci0KLQlDS19CSVRNQVBfQ0xFQVIo
JnNiKTsKLQlpZiAoQ0tfQklUTUFQX1RFU1QoJnNiLCAxKSA9PSB0cnVlKSB7Ci0JCWNrX2Vycm9y
KCJFUlJPUjogRXhwZWN0ZWQgYml0IHRvIGJlIHJlc2V0LlxuIik7Ci0JfQotCi0JQ0tfQklUTUFQ
X1NFVCgmc2IsIDEpOwotCWlmIChDS19CSVRNQVBfVEVTVCgmc2IsIDEpID09IGZhbHNlKSB7Ci0J
CWNrX2Vycm9yKCJFUlJPUjogRXhwZWN0ZWQgYml0IHRvIGJlIHNldC5cbiIpOwotCX0KLQotCUNL
X0JJVE1BUF9SRVNFVCgmc2IsIDEpOwotCWlmIChDS19CSVRNQVBfVEVTVCgmc2IsIDEpID09IHRy
dWUpIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBFeHBlY3RlZCBiaXQgdG8gYmUgcmVzZXQuXG4iKTsK
LQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNCAqIHNpemVvZih1bnNpZ25lZCBpbnQpICogQ0hBUl9C
SVQ7IGkrKykgewotCQlsZW5ndGggPSBpOwotCQlmb3IgKGogPSAwOyBqIDwgMTA7IGorKykgewot
CQkJcmFuZG9tX3Rlc3QoaSAqIDEwICsgaik7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X2JybG9jay9iZW5jaG1hcmsvTWFrZWZpbGUgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19icmxvY2svYmVuY2htYXJrL01ha2VmaWxlCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjZDEyZTdjYTM0Mjg0MjBhNmEzYmU2YjNlNWNhYmFmYmY4YmMx
ODRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2JybG9jay9iZW5jaG1h
cmsvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0uUEhPTlk6IGNsZWFu
IGRpc3RyaWJ1dGlvbgotCi1PQkpFQ1RTPWxhdGVuY3kgdGhyb3VnaHB1dAotCi1hbGw6ICQoT0JK
RUNUUykKLQotbGF0ZW5jeTogbGF0ZW5jeS5jIC4uLy4uLy4uL2luY2x1ZGUvY2tfYnJsb2NrLmgK
LQkkKENDKSAkKENGTEFHUykgLW8gbGF0ZW5jeSBsYXRlbmN5LmMKLQotdGhyb3VnaHB1dDogdGhy
b3VnaHB1dC5jIC4uLy4uLy4uL2luY2x1ZGUvY2tfYnJsb2NrLmgKLQkkKENDKSAkKENGTEFHUykg
LW8gdGhyb3VnaHB1dCB0aHJvdWdocHV0LmMKLQotY2xlYW46Ci0Jcm0gLXJmICouZFNZTSAqLmV4
ZSAqfiAqLm8gJChPQkpFQ1RTKQotCi1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25z
LmJ1aWxkCi1DRkxBR1MrPSQoUFRIUkVBRF9DRkxBR1MpIC1EX0dOVV9TT1VSQ0UKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2JybG9j
ay9iZW5jaG1hcmsvbGF0ZW5jeS5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2sv
cmVncmVzc2lvbnMvY2tfYnJsb2NrL2JlbmNobWFyay9sYXRlbmN5LmMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDRkYjhlMjY5YmFhZGJiZjk1YjI2NjYwMjM2N2YwNTUwYzM2OGE4ODEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYnJsb2NrL2JlbmNobWFyay9s
YXRlbmN5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAyMDExLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgPGNrX2JybG9jay5oPgotI2luY2x1ZGUgPGNrX3J3bG9jay5oPgotI2luY2x1ZGUg
PGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1v
bi5oIgotCi0jaWZuZGVmIFNURVBTCi0jZGVmaW5lIFNURVBTIDEwMDAwMDAKLSNlbmRpZgotCi1p
bnQKLW1haW4odm9pZCkKLXsKLQl1aW50NjRfdCBzX2IsIGVfYiwgaTsKLQlja19icmxvY2tfdCBi
cmxvY2sgPSBDS19CUkxPQ0tfSU5JVElBTElaRVI7Ci0JY2tfYnJsb2NrX3JlYWRlcl90IHJbOF07
Ci0JY2tfcndsb2NrX3QgbmFpdmU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHIpIC8gc2l6
ZW9mKCpyKTsgaSsrKQotCQlja19icmxvY2tfcmVhZF9yZWdpc3RlcigmYnJsb2NrLCAmcltpXSk7
Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19icmxvY2tfd3JpdGVfbG9j
aygmYnJsb2NrKTsKLQkJY2tfYnJsb2NrX3dyaXRlX3VubG9jaygmYnJsb2NrKTsKLQl9Ci0KLQlz
X2IgPSByZHRzYygpOwotCWZvciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0JCWNrX2JybG9j
a193cml0ZV9sb2NrKCZicmxvY2spOwotCQlja19icmxvY2tfd3JpdGVfdW5sb2NrKCZicmxvY2sp
OwotCX0KLQllX2IgPSByZHRzYygpOwotCXByaW50ZigiV1JJVEU6IGJybG9jayAgICUxNSIgUFJJ
dTY0ICJcbiIsIChlX2IgLSBzX2IpIC8gU1RFUFMpOwotCi0JY2tfcndsb2NrX2luaXQoJm5haXZl
KTsKLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19yd2xvY2tfd3JpdGVfbG9j
aygmbmFpdmUpOwotCQlja19yd2xvY2tfd3JpdGVfdW5sb2NrKCZuYWl2ZSk7Ci0JfQotCi0Jc19i
ID0gcmR0c2MoKTsKLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19yd2xvY2tf
d3JpdGVfbG9jaygmbmFpdmUpOwotCQlja19yd2xvY2tfd3JpdGVfdW5sb2NrKCZuYWl2ZSk7Ci0J
fQotCWVfYiA9IHJkdHNjKCk7Ci0JcHJpbnRmKCJXUklURTogbmFpdmUgICAgJTE1IiBQUkl1NjQg
IlxuIiwgKGVfYiAtIHNfYikgLyBTVEVQUyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkr
KykgewotCQlja19icmxvY2tfcmVhZF9sb2NrKCZicmxvY2ssICZyWzBdKTsKLQkJY2tfYnJsb2Nr
X3JlYWRfdW5sb2NrKCZyWzBdKTsKLQl9Ci0Jc19iID0gcmR0c2MoKTsKLQlmb3IgKGkgPSAwOyBp
IDwgU1RFUFM7IGkrKykgewotCQlja19icmxvY2tfcmVhZF9sb2NrKCZicmxvY2ssICZyWzBdKTsK
LQkJY2tfYnJsb2NrX3JlYWRfdW5sb2NrKCZyWzBdKTsKLQl9Ci0JZV9iID0gcmR0c2MoKTsKLQlw
cmludGYoIlJFQUQ6ICBicmxvY2sgICAlMTUiIFBSSXU2NCAiXG4iLCAoZV9iIC0gc19iKSAvIFNU
RVBTKTsKLQotCWZvciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0JCWNrX3J3bG9ja19yZWFk
X2xvY2soJm5haXZlKTsKLQkJY2tfcndsb2NrX3JlYWRfdW5sb2NrKCZuYWl2ZSk7Ci0JfQotCi0J
c19iID0gcmR0c2MoKTsKLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19yd2xv
Y2tfcmVhZF9sb2NrKCZuYWl2ZSk7Ci0JCWNrX3J3bG9ja19yZWFkX3VubG9jaygmbmFpdmUpOwot
CX0KLQllX2IgPSByZHRzYygpOwotCXByaW50ZigiUkVBRDogIG5haXZlICAgICUxNSIgUFJJdTY0
ICJcbiIsIChlX2IgLSBzX2IpIC8gU1RFUFMpOwotCi0JcmV0dXJuICgwKTsKLX0KLQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYnJs
b2NrL2JlbmNobWFyay90aHJvdWdocHV0LmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19icmxvY2svYmVuY2htYXJrL3Rocm91Z2hwdXQuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdlZDgwMzZlNTBjZDE0ZTUzYTliMzY5NGE0MTQ4OTZm
MjE5OTIxYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19icmxvY2svYmVu
Y2htYXJrL3Rocm91Z2hwdXQuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IDIwMTEtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSA8Y2tfYnJsb2NrLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4K
LSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRp
bnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1
ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi0jaWZuZGVmIFNURVBTCi0jZGVmaW5lIFNURVBTIDEwMDAw
MDAKLSNlbmRpZgotCi1zdGF0aWMgaW50IGJhcnJpZXI7Ci1zdGF0aWMgaW50IHRocmVhZHM7Ci1z
dGF0aWMgdW5zaWduZWQgaW50IGZsYWcgQ0tfQ0NfQ0FDSEVMSU5FOwotc3RhdGljIGNrX2JybG9j
a190IGJybG9jayA9IENLX0JSTE9DS19JTklUSUFMSVpFUjsKLXN0YXRpYyBzdHJ1Y3QgYWZmaW5p
dHkgYWZmaW5pdHk7Ci0KLXN0YXRpYyB2b2lkICoKLXRocmVhZF9icmxvY2sodm9pZCAqcHVuKQot
ewotCXVpbnQ2NF90IHNfYiwgZV9iLCBhLCBpOwotCWNrX2JybG9ja19yZWFkZXJfdCByOwotCXVp
bnQ2NF90ICp2YWx1ZSA9IHB1bjsKLQotCWlmIChhZmZfaXRlcmF0ZSgmYWZmaW5pdHkpICE9IDAp
IHsKLQkJcGVycm9yKCJFUlJPUjogQ291bGQgbm90IGFmZmluZSB0aHJlYWQiKTsKLQkJZXhpdChF
WElUX0ZBSUxVUkUpOwotCX0KLQotCWNrX2JybG9ja19yZWFkX3JlZ2lzdGVyKCZicmxvY2ssICZy
KTsKLQlja19wcl9pbmNfaW50KCZiYXJyaWVyKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF9pbnQoJmJh
cnJpZXIpICE9IHRocmVhZHMpCi0JCWNrX3ByX3N0YWxsKCk7Ci0KLQlmb3IgKGkgPSAxLCBhID0g
MDs7IGkrKykgewotCQlzX2IgPSByZHRzYygpOwotCQlja19icmxvY2tfcmVhZF9sb2NrKCZicmxv
Y2ssICZyKTsKLQkJY2tfYnJsb2NrX3JlYWRfdW5sb2NrKCZyKTsKLQkJY2tfYnJsb2NrX3JlYWRf
bG9jaygmYnJsb2NrLCAmcik7Ci0JCWNrX2JybG9ja19yZWFkX3VubG9jaygmcik7Ci0JCWNrX2Jy
bG9ja19yZWFkX2xvY2soJmJybG9jaywgJnIpOwotCQlja19icmxvY2tfcmVhZF91bmxvY2soJnIp
OwotCQlja19icmxvY2tfcmVhZF9sb2NrKCZicmxvY2ssICZyKTsKLQkJY2tfYnJsb2NrX3JlYWRf
dW5sb2NrKCZyKTsKLQkJY2tfYnJsb2NrX3JlYWRfbG9jaygmYnJsb2NrLCAmcik7Ci0JCWNrX2Jy
bG9ja19yZWFkX3VubG9jaygmcik7Ci0JCWNrX2JybG9ja19yZWFkX2xvY2soJmJybG9jaywgJnIp
OwotCQlja19icmxvY2tfcmVhZF91bmxvY2soJnIpOwotCQlja19icmxvY2tfcmVhZF9sb2NrKCZi
cmxvY2ssICZyKTsKLQkJY2tfYnJsb2NrX3JlYWRfdW5sb2NrKCZyKTsKLQkJY2tfYnJsb2NrX3Jl
YWRfbG9jaygmYnJsb2NrLCAmcik7Ci0JCWNrX2JybG9ja19yZWFkX3VubG9jaygmcik7Ci0JCWNr
X2JybG9ja19yZWFkX2xvY2soJmJybG9jaywgJnIpOwotCQlja19icmxvY2tfcmVhZF91bmxvY2so
JnIpOwotCQlja19icmxvY2tfcmVhZF9sb2NrKCZicmxvY2ssICZyKTsKLQkJY2tfYnJsb2NrX3Jl
YWRfdW5sb2NrKCZyKTsKLQkJY2tfYnJsb2NrX3JlYWRfbG9jaygmYnJsb2NrLCAmcik7Ci0JCWNr
X2JybG9ja19yZWFkX3VubG9jaygmcik7Ci0JCWNrX2JybG9ja19yZWFkX2xvY2soJmJybG9jaywg
JnIpOwotCQlja19icmxvY2tfcmVhZF91bmxvY2soJnIpOwotCQlja19icmxvY2tfcmVhZF9sb2Nr
KCZicmxvY2ssICZyKTsKLQkJY2tfYnJsb2NrX3JlYWRfdW5sb2NrKCZyKTsKLQkJY2tfYnJsb2Nr
X3JlYWRfbG9jaygmYnJsb2NrLCAmcik7Ci0JCWNrX2JybG9ja19yZWFkX3VubG9jaygmcik7Ci0J
CWNrX2JybG9ja19yZWFkX2xvY2soJmJybG9jaywgJnIpOwotCQlja19icmxvY2tfcmVhZF91bmxv
Y2soJnIpOwotCQlja19icmxvY2tfcmVhZF9sb2NrKCZicmxvY2ssICZyKTsKLQkJY2tfYnJsb2Nr
X3JlYWRfdW5sb2NrKCZyKTsKLQkJZV9iID0gcmR0c2MoKTsKLQotCQlhICs9IChlX2IgLSBzX2Ip
ID4+IDQ7Ci0KLQkJaWYgKGNrX3ByX2xvYWRfdWludCgmZmxhZykgPT0gMSkKLQkJCWJyZWFrOwot
CX0KLQotCWNrX3ByX2luY19pbnQoJmJhcnJpZXIpOwotCXdoaWxlIChja19wcl9sb2FkX2ludCgm
YmFycmllcikgIT0gdGhyZWFkcyAqIDIpCi0JCWNrX3ByX3N0YWxsKCk7Ci0KLQkqdmFsdWUgPSAo
YSAvIGkpOwotCXJldHVybiBOVUxMOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFy
Z3ZbXSkKLXsKLQlpbnQgdDsKLQlwdGhyZWFkX3QgKnA7Ci0JdWludDY0X3QgKmxhdGVuY3k7Ci0K
LQlpZiAoYXJnYyAhPSAzKSB7Ci0JCWNrX2Vycm9yKCJVc2FnZTogdGhyb3VnaHB1dCA8ZGVsdGE+
IDx0aHJlYWRzPlxuIik7Ci0JfQotCi0JdGhyZWFkcyA9IGF0b2koYXJndlsyXSk7Ci0JaWYgKHRo
cmVhZHMgPD0gMCkgewotCQlja19lcnJvcigiRVJST1I6IFRocmVhZHMgbXVzdCBiZSBhIHZhbHVl
ID4gMC5cbiIpOwotCX0KLQotCXAgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiB0aHJlYWRz
KTsKLQlpZiAocCA9PSBOVUxMKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogRmFpbGVkIHRvIGluaXRp
YWxpemUgdGhyZWFkLlxuIik7Ci0JfQotCi0JbGF0ZW5jeSA9IG1hbGxvYyhzaXplb2YodWludDY0
X3QpICogdGhyZWFkcyk7Ci0JaWYgKGxhdGVuY3kgPT0gTlVMTCkgewotCQlja19lcnJvcigiRVJS
T1I6IEZhaWxlZCB0byBjcmVhdGUgbGF0ZW5jeSBidWZmZXIuXG4iKTsKLQl9Ci0KLQlhZmZpbml0
eS5kZWx0YSA9IGF0b2koYXJndlsxXSk7Ci0JYWZmaW5pdHkucmVxdWVzdCA9IDA7Ci0KLQlmcHJp
bnRmKHN0ZGVyciwgIkNyZWF0aW5nIHRocmVhZHMgKGJybG9jaykuLi4iKTsKLQlmb3IgKHQgPSAw
OyB0IDwgdGhyZWFkczsgdCsrKSB7Ci0JCWlmIChwdGhyZWFkX2NyZWF0ZSgmcFt0XSwgTlVMTCwg
dGhyZWFkX2JybG9jaywgbGF0ZW5jeSArIHQpICE9IDApIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjog
Q291bGQgbm90IGNyZWF0ZSB0aHJlYWQgJWRcbiIsIHQpOwotCQl9Ci0JfQotCWZwcmludGYoc3Rk
ZXJyLCAiZG9uZVxuIik7Ci0KLQljb21tb25fc2xlZXAoMTApOwotCWNrX3ByX3N0b3JlX3VpbnQo
JmZsYWcsIDEpOwotCi0JZnByaW50ZihzdGRlcnIsICJXYWl0aW5nIGZvciB0aHJlYWRzIHRvIGZp
bmlzaCBhY3F1aXNpdGlvbiByZWdyZXNzaW9uLi4uIik7Ci0JZm9yICh0ID0gMDsgdCA8IHRocmVh
ZHM7IHQrKykKLQkJcHRocmVhZF9qb2luKHBbdF0sIE5VTEwpOwotCWZwcmludGYoc3RkZXJyLCAi
ZG9uZVxuXG4iKTsKLQotCWZvciAodCA9IDE7IHQgPD0gdGhyZWFkczsgdCsrKQotCQlwcmludGYo
IiUxMHUgJTIwIiBQUkl1NjQgIlxuIiwgdCwgbGF0ZW5jeVt0IC0gMV0pOwotCi0JcmV0dXJuICgw
KTsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVn
cmVzc2lvbnMvY2tfYnJsb2NrL3ZhbGlkYXRlL01ha2VmaWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYnJsb2NrL3ZhbGlkYXRlL01ha2VmaWxlCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTQ5YzQzZTQ1OTQ3YzI0ZTkzYzUzYjA4NDk1
YmI1MmM1Yzc3OWE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2JybG9j
ay92YWxpZGF0ZS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS5QSE9O
WTogY2hlY2sgY2xlYW4gZGlzdHJpYnV0aW9uCi0KLU9CSkVDVFM9dmFsaWRhdGUKLQotYWxsOiAk
KE9CSkVDVFMpCi0KLXZhbGlkYXRlOiB2YWxpZGF0ZS5jIC4uLy4uLy4uL2luY2x1ZGUvY2tfYnJs
b2NrLmgKLQkkKENDKSAkKENGTEFHUykgLW8gdmFsaWRhdGUgdmFsaWRhdGUuYwotCi1jaGVjazog
YWxsCi0JLi92YWxpZGF0ZSAkKENPUkVTKSAxCi0KLWNsZWFuOgotCXJtIC1yZiAqLmRTWU0gKi5l
eGUgKn4gKi5vICQoT0JKRUNUUykKLQotaW5jbHVkZSAuLi8uLi8uLi9idWlsZC9yZWdyZXNzaW9u
cy5idWlsZAotQ0ZMQUdTKz0kKFBUSFJFQURfQ0ZMQUdTKSAtRF9HTlVfU09VUkNFCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19icmxv
Y2svdmFsaWRhdGUvdmFsaWRhdGUuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L3JlZ3Jlc3Npb25zL2NrX2JybG9jay92YWxpZGF0ZS92YWxpZGF0ZS5jCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyMGYyODVhM2RhNzI0YzcyMjRhOWNkN2VhZDRhMDJlNmEwMWZmM2U2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2JybG9jay92YWxpZGF0ZS92
YWxpZGF0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgMjAxMS0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8cHRo
cmVhZC5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRl
IDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNp
bmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotCi0jaW5jbHVkZSA8Y2tf
cHIuaD4KLSNpbmNsdWRlIDxja19icmxvY2suaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5o
IgotCi0jaWZuZGVmIElURVJBVEUKLSNkZWZpbmUgSVRFUkFURSAxMDAwMDAwCi0jZW5kaWYKLQot
c3RhdGljIHN0cnVjdCBhZmZpbml0eSBhOwotc3RhdGljIHVuc2lnbmVkIGludCBsb2NrZWQgPSAw
Owotc3RhdGljIGludCBudGhyOwotc3RhdGljIGNrX2JybG9ja190IGxvY2sgPSBDS19CUkxPQ0tf
SU5JVElBTElaRVI7Ci0KLXN0YXRpYyB2b2lkICoKLXRocmVhZCh2b2lkICpudWxsIENLX0NDX1VO
VVNFRCkKLXsKLQlja19icmxvY2tfcmVhZGVyX3QgcjsKLQlpbnQgaSA9IElURVJBVEU7Ci0JdW5z
aWduZWQgaW50IGw7Ci0KLSAgICAgICAgaWYgKGFmZl9pdGVyYXRlKCZhKSkgewotICAgICAgICAg
ICAgICAgIHBlcnJvcigiRVJST1I6IENvdWxkIG5vdCBhZmZpbmUgdGhyZWFkIik7Ci0gICAgICAg
ICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLQlja19icmxvY2tfcmVh
ZF9yZWdpc3RlcigmbG9jaywgJnIpOwotCi0Jd2hpbGUgKGktLSkgewotCQlja19icmxvY2tfd3Jp
dGVfbG9jaygmbG9jayk7Ci0JCXsKLQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0J
CQlpZiAobCAhPSAwKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDBcbiIs
IF9fTElORV9fLCBsKTsKLQkJCX0KLQotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlj
a19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJ
Y2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJ
CWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0J
CQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQotCQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9j
a2VkKTsKLQkJCWlmIChsICE9IDgpIHsKLQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUg
IT0gMlxuIiwgX19MSU5FX18sIGwpOwotCQkJfQotCi0JCQlja19wcl9kZWNfdWludCgmbG9ja2Vk
KTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tl
ZCk7Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2Nr
ZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9kZWNfdWludCgmbG9j
a2VkKTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCi0JCQlsID0gY2tfcHJfbG9hZF91
aW50KCZsb2NrZWQpOwotCQkJaWYgKGwgIT0gMCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbV1I6
JWRdOiAldSAhPSAwXG4iLCBfX0xJTkVfXywgbCk7Ci0JCQl9Ci0JCX0KLQkJY2tfYnJsb2NrX3dy
aXRlX3VubG9jaygmbG9jayk7Ci0KLQkJY2tfYnJsb2NrX3JlYWRfbG9jaygmbG9jaywgJnIpOwot
CQl7Ci0JCQlsID0gY2tfcHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQkJaWYgKGwgIT0gMCkgewot
CQkJCWNrX2Vycm9yKCJFUlJPUiBbUkQ6JWRdOiAldSAhPSAwXG4iLCBfX0xJTkVfXywgbCk7Ci0J
CQl9Ci0JCX0KLQkJY2tfYnJsb2NrX3JlYWRfdW5sb2NrKCZyKTsKLQl9Ci0KLQlja19icmxvY2tf
cmVhZF91bnJlZ2lzdGVyKCZsb2NrLCAmcik7Ci0JcmV0dXJuIChOVUxMKTsKLX0KLQotaW50Ci1t
YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JcHRocmVhZF90ICp0aHJlYWRzOwotCWlu
dCBpOwotCi0JaWYgKGFyZ2MgIT0gMykgewotCQlja19lcnJvcigiVXNhZ2U6IHZhbGlkYXRlIDxu
dW1iZXIgb2YgdGhyZWFkcz4gPGFmZmluaXR5IGRlbHRhPlxuIik7Ci0JfQotCi0JbnRociA9IGF0
b2koYXJndlsxXSk7Ci0JaWYgKG50aHIgPD0gMCkgewotCQlja19lcnJvcigiRVJST1I6IE51bWJl
ciBvZiB0aHJlYWRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcbiIpOwotCX0KLQotCXRocmVhZHMg
PSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyKTsKLQlpZiAodGhyZWFkcyA9PSBOVUxM
KSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIHRocmVhZCBzdHJ1Y3R1
cmVzXG4iKTsKLQl9Ci0KLQlhLmRlbHRhID0gYXRvaShhcmd2WzJdKTsKLQotCWZwcmludGYoc3Rk
ZXJyLCAiQ3JlYXRpbmcgdGhyZWFkcyAobXV0dWFsIGV4Y2x1c2lvbikuLi4iKTsKLQlmb3IgKGkg
PSAwOyBpIDwgbnRocjsgaSsrKSB7Ci0JCWlmIChwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkc1tpXSwg
TlVMTCwgdGhyZWFkLCBOVUxMKSkgewotCQkJY2tfZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgY3Jl
YXRlIHRocmVhZCAlZFxuIiwgaSk7Ci0JCX0KLQl9Ci0JZnByaW50ZihzdGRlcnIsICJkb25lXG4i
KTsKLQotCWZwcmludGYoc3RkZXJyLCAiV2FpdGluZyBmb3IgdGhyZWFkcyB0byBmaW5pc2ggY29y
cmVjdG5lc3MgcmVncmVzc2lvbi4uLiIpOwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspCi0J
CXB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsKLQlmcHJpbnRmKHN0ZGVyciwgImRvbmUg
KHBhc3NlZClcbiIpOwotCi0JcmV0dXJuICgwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYnl0ZWxvY2svYmVuY2htYXJr
L01ha2VmaWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfYnl0ZWxvY2svYmVuY2htYXJrL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjODE5MDk5NWU1NWJmMDNlMTI0YzBmZmM5ZjA1YTNiZGE4ZmYwZDJkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2J5dGVsb2NrL2JlbmNobWFyay9NYWtlZmlsZQor
KysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS5QSE9OWTogY2xlYW4gZGlzdHJpYnV0aW9u
Ci0KLU9CSkVDVFM9bGF0ZW5jeQotCi1hbGw6ICQoT0JKRUNUUykKLQotbGF0ZW5jeTogbGF0ZW5j
eS5jCi0JJChDQykgJChDRkxBR1MpIC1vIGxhdGVuY3kgbGF0ZW5jeS5jCi0KLWNsZWFuOgotCXJt
IC1yZiAqLmRTWU0gKi5leGUgKn4gKi5vICQoT0JKRUNUUykKLQotaW5jbHVkZSAuLi8uLi8uLi9i
dWlsZC9yZWdyZXNzaW9ucy5idWlsZAotQ0ZMQUdTKz0kKFBUSFJFQURfQ0ZMQUdTKSAtRF9HTlVf
U09VUkNFCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdy
ZXNzaW9ucy9ja19ieXRlbG9jay9iZW5jaG1hcmsvbGF0ZW5jeS5jIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfYnl0ZWxvY2svYmVuY2htYXJrL2xhdGVu
Y3kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUzMDE2NTZlZjY3YmE5MjkyZGNh
Mzk5YTdkOTA3OGM3NDY0YWU0NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9j
a19ieXRlbG9jay9iZW5jaG1hcmsvbGF0ZW5jeS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICog
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGNrX2J5dGVsb2NrLmg+Ci0jaW5jbHVkZSA8
Y2tfcndsb2NrLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgot
Ci0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNpZm5kZWYgU1RFUFMKLSNkZWZpbmUgU1RF
UFMgMTAwMDAwMAotI2VuZGlmCi0KLWludAotbWFpbih2b2lkKQotewotCXVpbnQ2NF90IHNfYiwg
ZV9iLCBpOwotCWNrX2J5dGVsb2NrX3QgYnl0ZWxvY2sgPSBDS19CWVRFTE9DS19JTklUSUFMSVpF
UjsKLQlja19yd2xvY2tfdCBuYWl2ZTsKLQotCWZvciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7
Ci0JCWNrX2J5dGVsb2NrX3dyaXRlX2xvY2soJmJ5dGVsb2NrLCAxKTsKLQkJY2tfYnl0ZWxvY2tf
d3JpdGVfdW5sb2NrKCZieXRlbG9jayk7Ci0JfQotCi0Jc19iID0gcmR0c2MoKTsKLQlmb3IgKGkg
PSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19ieXRlbG9ja193cml0ZV9sb2NrKCZieXRlbG9j
aywgMSk7Ci0JCWNrX2J5dGVsb2NrX3dyaXRlX3VubG9jaygmYnl0ZWxvY2spOwotCX0KLQllX2Ig
PSByZHRzYygpOwotCXByaW50ZigiV1JJVEU6IGJ5dGVsb2NrICUxNSIgUFJJdTY0ICJcbiIsIChl
X2IgLSBzX2IpIC8gU1RFUFMpOwotCi0JY2tfcndsb2NrX2luaXQoJm5haXZlKTsKLQlmb3IgKGkg
PSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19yd2xvY2tfd3JpdGVfbG9jaygmbmFpdmUpOwot
CQlja19yd2xvY2tfd3JpdGVfdW5sb2NrKCZuYWl2ZSk7Ci0JfQotCi0Jc19iID0gcmR0c2MoKTsK
LQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19yd2xvY2tfd3JpdGVfbG9jaygm
bmFpdmUpOwotCQlja19yd2xvY2tfd3JpdGVfdW5sb2NrKCZuYWl2ZSk7Ci0JfQotCWVfYiA9IHJk
dHNjKCk7Ci0JcHJpbnRmKCJXUklURTogbmFpdmUgICAgJTE1IiBQUkl1NjQgIlxuIiwgKGVfYiAt
IHNfYikgLyBTVEVQUyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19i
eXRlbG9ja19yZWFkX2xvY2soJmJ5dGVsb2NrLCAxKTsKLQkJY2tfYnl0ZWxvY2tfcmVhZF91bmxv
Y2soJmJ5dGVsb2NrLCAxKTsKLQl9Ci0Jc19iID0gcmR0c2MoKTsKLQlmb3IgKGkgPSAwOyBpIDwg
U1RFUFM7IGkrKykgewotCQlja19ieXRlbG9ja19yZWFkX2xvY2soJmJ5dGVsb2NrLCAxKTsKLQkJ
Y2tfYnl0ZWxvY2tfcmVhZF91bmxvY2soJmJ5dGVsb2NrLCAxKTsKLQl9Ci0JZV9iID0gcmR0c2Mo
KTsKLQlwcmludGYoIlJFQUQ6ICBieXRlbG9jayAlMTUiIFBSSXU2NCAiXG4iLCAoZV9iIC0gc19i
KSAvIFNURVBTKTsKLQotCWZvciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0JCWNrX3J3bG9j
a19yZWFkX2xvY2soJm5haXZlKTsKLQkJY2tfcndsb2NrX3JlYWRfdW5sb2NrKCZuYWl2ZSk7Ci0J
fQotCi0Jc19iID0gcmR0c2MoKTsKLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlj
a19yd2xvY2tfcmVhZF9sb2NrKCZuYWl2ZSk7Ci0JCWNrX3J3bG9ja19yZWFkX3VubG9jaygmbmFp
dmUpOwotCX0KLQllX2IgPSByZHRzYygpOwotCXByaW50ZigiUkVBRDogIG5haXZlICAgICUxNSIg
UFJJdTY0ICJcbiIsIChlX2IgLSBzX2IpIC8gU1RFUFMpOwotCi0JcmV0dXJuICgwKTsKLX0KLQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfYnl0ZWxvY2svdmFsaWRhdGUvTWFrZWZpbGUgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9ja19ieXRlbG9jay92YWxpZGF0ZS9NYWtlZmlsZQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE4OTBlMGM3MTEwZWNjODY5NjExZDI5Yjg5MzQxNWMz
NjZmOGQzYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19ieXRlbG9jay92
YWxpZGF0ZS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS5QSE9OWTog
Y2hlY2sgY2xlYW4gZGlzdHJpYnV0aW9uCi0KLU9CSkVDVFM9dmFsaWRhdGUKLQotYWxsOiAkKE9C
SkVDVFMpCi0KLXZhbGlkYXRlOiB2YWxpZGF0ZS5jIC4uLy4uLy4uL2luY2x1ZGUvY2tfYnl0ZWxv
Y2suaAotCSQoQ0MpICQoQ0ZMQUdTKSAtbyB2YWxpZGF0ZSB2YWxpZGF0ZS5jCi0KLWNoZWNrOiBh
bGwKLQkuL3ZhbGlkYXRlICQoQ09SRVMpIDEKLQotY2xlYW46Ci0Jcm0gLXJmICouZFNZTSAqLmV4
ZSAqfiAqLm8gJChPQkpFQ1RTKQotCi1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25z
LmJ1aWxkCi1DRkxBR1MrPSQoUFRIUkVBRF9DRkxBR1MpIC1EX0dOVV9TT1VSQ0UKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2J5dGVs
b2NrL3ZhbGlkYXRlL3ZhbGlkYXRlLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19ieXRlbG9jay92YWxpZGF0ZS92YWxpZGF0ZS5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjMTY0Y2U0NzE3MDZhN2FhMmZlNDJlNDYzODM5MjBiMDIyZDM1
MGQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2J5dGVsb2NrL3ZhbGlk
YXRlL3ZhbGlkYXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0g
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAot
ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRl
IDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5ncy5o
PgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0KLSNpbmNsdWRl
IDxja19wci5oPgotI2luY2x1ZGUgPGNrX2J5dGVsb2NrLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9j
b21tb24uaCIKLQotI2lmbmRlZiBJVEVSQVRFCi0jZGVmaW5lIElURVJBVEUgNTAwMDAwMAotI2Vu
ZGlmCi0KLXN0cnVjdCBibG9jayB7Ci0JdW5zaWduZWQgaW50IHRpZDsKLX07Ci0KLXN0YXRpYyBz
dHJ1Y3QgYWZmaW5pdHkgYTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbG9ja2VkID0gMDsKLXN0YXRp
YyBpbnQgbnRocjsKLXN0YXRpYyBja19ieXRlbG9ja190IGxvY2sgQ0tfQ0NfQ0FDSEVMSU5FID0g
Q0tfQllURUxPQ0tfSU5JVElBTElaRVI7Ci0KLXN0YXRpYyB2b2lkICoKLXRocmVhZCh2b2lkICpu
dWxsKQotewotCXN0cnVjdCBibG9jayAqY29udGV4dCA9IG51bGw7Ci0JaW50IGkgPSBJVEVSQVRF
OwotCXVuc2lnbmVkIGludCBsOwotCi0gICAgICAgIGlmIChhZmZfaXRlcmF0ZSgmYSkpIHsKLSAg
ICAgICAgICAgICAgICBwZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWZmaW5lIHRocmVhZCIpOwot
ICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotCi0JaWYgKGNv
bnRleHQtPnRpZCA9PSAodW5zaWduZWQgaW50KW50aHIgLSAxKQotCQljb250ZXh0LT50aWQgPSBz
aXplb2YobG9jay5yZWFkZXJzKSArIDE7Ci0KLQl3aGlsZSAoaS0tKSB7Ci0JCWNrX2J5dGVsb2Nr
X3dyaXRlX2xvY2soJmxvY2ssIGNvbnRleHQtPnRpZCk7Ci0JCXsKLQkJCWwgPSBja19wcl9sb2Fk
X3VpbnQoJmxvY2tlZCk7Ci0JCQlpZiAobCAhPSAwKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFtX
UjolZF06ICV1ICE9IDBcbiIsIF9fTElORV9fLCBsKTsKLQkJCX0KLQotCQkJY2tfcHJfaW5jX3Vp
bnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191
aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNf
dWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5j
X3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQotCQkJbCA9IGNr
X3ByX2xvYWRfdWludCgmbG9ja2VkKTsKLQkJCWlmIChsICE9IDgpIHsKLQkJCQlja19lcnJvcigi
RVJST1IgW1dSOiVkXTogJXUgIT0gMlxuIiwgX19MSU5FX18sIGwpOwotCQkJfQotCi0JCQlja19w
cl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tf
cHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNr
X3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlj
a19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCi0J
CQlsID0gY2tfcHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQkJaWYgKGwgIT0gMCkgewotCQkJCWNr
X2Vycm9yKCJFUlJPUiBbV1I6JWRdOiAldSAhPSAwXG4iLCBfX0xJTkVfXywgbCk7Ci0JCQl9Ci0J
CX0KLQkJY2tfYnl0ZWxvY2tfd3JpdGVfdW5sb2NrKCZsb2NrKTsKLQotCQlja19ieXRlbG9ja19y
ZWFkX2xvY2soJmxvY2ssIGNvbnRleHQtPnRpZCk7Ci0JCXsKLQkJCWwgPSBja19wcl9sb2FkX3Vp
bnQoJmxvY2tlZCk7Ci0JCQlpZiAobCAhPSAwKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFtSRDol
ZF06ICV1ICE9IDBcbiIsIF9fTElORV9fLCBsKTsKLQkJCX0KLQkJfQotCQlja19ieXRlbG9ja19y
ZWFkX3VubG9jaygmbG9jaywgY29udGV4dC0+dGlkKTsKLQl9Ci0KLQlyZXR1cm4gKE5VTEwpOwot
fQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlwdGhyZWFkX3QgKnRo
cmVhZHM7Ci0Jc3RydWN0IGJsb2NrICpjb250ZXh0OwotCWludCBpOwotCi0JaWYgKGFyZ2MgIT0g
MykgewotCQlja19lcnJvcigiVXNhZ2U6IGNvcnJlY3QgPG51bWJlciBvZiB0aHJlYWRzPiA8YWZm
aW5pdHkgZGVsdGE+XG4iKTsKLQl9Ci0KLQludGhyID0gYXRvaShhcmd2WzFdKTsKLQlpZiAobnRo
ciA8PSAwKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogTnVtYmVyIG9mIHRocmVhZHMgbXVzdCBiZSBn
cmVhdGVyIHRoYW4gMFxuIik7Ci0JfQotCi0JdGhyZWFkcyA9IG1hbGxvYyhzaXplb2YocHRocmVh
ZF90KSAqIG50aHIpOwotCWlmICh0aHJlYWRzID09IE5VTEwpIHsKLQkJY2tfZXJyb3IoIkVSUk9S
OiBDb3VsZCBub3QgYWxsb2NhdGUgdGhyZWFkIHN0cnVjdHVyZXNcbiIpOwotCX0KLQotCWNvbnRl
eHQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBibG9jaykgKiBudGhyKTsKLQlpZiAoY29udGV4dCA9
PSBOVUxMKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIHRocmVhZCBj
b250ZXh0c1xuIik7Ci0JfQotCi0JYS5kZWx0YSA9IGF0b2koYXJndlsyXSk7Ci0KLQlmcHJpbnRm
KHN0ZGVyciwgIkNyZWF0aW5nIHRocmVhZHMgKG11dHVhbCBleGNsdXNpb24pLi4uIik7Ci0JZm9y
IChpID0gMDsgaSA8IG50aHI7IGkrKykgewotCQljb250ZXh0W2ldLnRpZCA9IGkgKyAxOwotCQlp
ZiAocHRocmVhZF9jcmVhdGUoJnRocmVhZHNbaV0sIE5VTEwsIHRocmVhZCwgY29udGV4dCArIGkp
KSB7Ci0JCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBjcmVhdGUgdGhyZWFkICVkXG4iLCBp
KTsKLQkJfQotCX0KLQlmcHJpbnRmKHN0ZGVyciwgImRvbmVcbiIpOwotCi0JZnByaW50ZihzdGRl
cnIsICJXYWl0aW5nIGZvciB0aHJlYWRzIHRvIGZpbmlzaCBjb3JyZWN0bmVzcyByZWdyZXNzaW9u
Li4uIik7Ci0JZm9yIChpID0gMDsgaSA8IG50aHI7IGkrKykKLQkJcHRocmVhZF9qb2luKHRocmVh
ZHNbaV0sIE5VTEwpOwotCWZwcmludGYoc3RkZXJyLCAiZG9uZSAocGFzc2VkKVxuIik7Ci0KLQly
ZXR1cm4gKDApOwotfQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19jb2hvcnQvYmVuY2htYXJrL01ha2VmaWxlIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfY29ob3J0L2JlbmNobWFyay9N
YWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFmMThiOWUwNmMzOGJiYWVj
Y2IyMWY4ZjY1NjUxNDZhOTU3MzAzMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9u
cy9ja19jb2hvcnQvYmVuY2htYXJrL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAs
MCBAQAotLlBIT05ZOiBhbGwgY2xlYW4KLQotT0JKRUNUUz1ja19jb2hvcnQuVEhST1VHSFBVVCBj
a19jb2hvcnQuTEFURU5DWQotCi1hbGw6ICQoT0JKRUNUUykKLQotY2tfY29ob3J0LlRIUk9VR0hQ
VVQ6IGNrX2NvaG9ydC5jCi0JJChDQykgJChDRkxBR1MpIC1vIGNrX2NvaG9ydC5USFJPVUdIUFVU
IHRocm91Z2hwdXQuYyAtbG0KLQotY2tfY29ob3J0LkxBVEVOQ1k6IGNrX2NvaG9ydC5jCi0JJChD
QykgLURMQVRFTkNZICQoQ0ZMQUdTKSAtbyBja19jb2hvcnQuTEFURU5DWSBja19jb2hvcnQuYwot
Ci1jbGVhbjoKLQlybSAtcmYgKi5kU1lNICouZXhlICQoT0JKRUNUUykKLQotaW5jbHVkZSAuLi8u
Li8uLi9idWlsZC9yZWdyZXNzaW9ucy5idWlsZAotQ0ZMQUdTKz0kKFBUSFJFQURfQ0ZMQUdTKSAt
RF9HTlVfU09VUkNFIC1sbQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvY2svcmVncmVzc2lvbnMvY2tfY29ob3J0L2JlbmNobWFyay9ja19jb2hvcnQuYyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2NvaG9ydC9iZW5jaG1h
cmsvY2tfY29ob3J0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NGI2MTZjOWIx
NTEyZWUyODBmMjFkOGQ3MTg1ZDdiMjQ4YWE2OGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVn
cmVzc2lvbnMvY2tfY29ob3J0L2JlbmNobWFyay9ja19jb2hvcnQuYworKysgL2Rldi9udWxsCkBA
IC0xLDggKzAsMCBAQAotI2luY2x1ZGUgIi4uL2NrX2NvaG9ydC5oIgotCi0jaW5jbHVkZSA8Y2tf
Y29ob3J0Lmg+Ci0jaWZkZWYgVEhST1VHSFBVVAotI2luY2x1ZGUgIi4uLy4uL2NrX3NwaW5sb2Nr
L2JlbmNobWFyay90aHJvdWdocHV0LmgiCi0jZWxpZiBkZWZpbmVkKExBVEVOQ1kpCi0jaW5jbHVk
ZSAiLi4vLi4vY2tfc3BpbmxvY2svYmVuY2htYXJrL2xhdGVuY3kuaCIKLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfY29o
b3J0L2JlbmNobWFyay90aHJvdWdocHV0LmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19jb2hvcnQvYmVuY2htYXJrL3Rocm91Z2hwdXQuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M0Nzc2ZDNjMzA4Y2RmNjlkZDUzYTNmMGQ1Y2RmMTA0
ODFiNDlmMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19jb2hvcnQvYmVu
Y2htYXJrL3Rocm91Z2hwdXQuYworKysgL2Rldi9udWxsCkBAIC0xLDIzOSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IDIwMTMtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQ29weXJpZ2h0IDIwMTMg
QnJlbmRvbiBTY2hlaW5tYW4uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
LSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
IDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgot
I2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRpby5o
PgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0
cmluZ3MuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotCi0j
aW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19jb2hvcnQuaD4KLSNpbmNsdWRlIDxja19t
ZC5oPgotI2luY2x1ZGUgPGNrX3NwaW5sb2NrLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21tb24u
aCIKLQotI2RlZmluZSBtYXgoeCwgeSkgKCgoeCkgPiAoeSkpID8gKHgpIDogKHkpKQotCi1zdGF0
aWMgc3RydWN0IGFmZmluaXR5IGE7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHJlYWR5OwotCi1zdHJ1
Y3QgY291bnRlcnMgewotCXVpbnQ2NF90IHZhbHVlOwotfSBDS19DQ19DQUNIRUxJTkU7Ci0KLXN0
YXRpYyBzdHJ1Y3QgY291bnRlcnMgKmNvdW50Owotc3RhdGljIHVpbnQ2NF90IG50aHI7Ci1zdGF0
aWMgdW5zaWduZWQgaW50IG5fY29ob3J0czsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYmFycmllcjsK
LXN0YXRpYyBpbnQgY3JpdGljYWwgQ0tfQ0NfQ0FDSEVMSU5FOwotCi1zdGF0aWMgdm9pZAotY2tf
c3BpbmxvY2tfZmFzX2xvY2tfd2l0aF9jb250ZXh0KGNrX3NwaW5sb2NrX2Zhc190ICpsb2NrLCB2
b2lkICpjb250ZXh0KQotewotCi0JKHZvaWQpY29udGV4dDsKLQlja19zcGlubG9ja19mYXNfbG9j
ayhsb2NrKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1ja19zcGlubG9ja19mYXNfdW5s
b2NrX3dpdGhfY29udGV4dChja19zcGlubG9ja19mYXNfdCAqbG9jaywgdm9pZCAqY29udGV4dCkK
LXsKLQotCSh2b2lkKWNvbnRleHQ7Ci0JY2tfc3BpbmxvY2tfZmFzX3VubG9jayhsb2NrKTsKLQly
ZXR1cm47Ci19Ci0KLXN0YXRpYyBib29sCi1ja19zcGlubG9ja19mYXNfbG9ja2VkX3dpdGhfY29u
dGV4dChja19zcGlubG9ja19mYXNfdCAqbG9jaywgdm9pZCAqY29udGV4dCkKLXsKLQotCSh2b2lk
KWNvbnRleHQ7Ci0JcmV0dXJuIGNrX3NwaW5sb2NrX2Zhc19sb2NrZWQobG9jayk7Ci19Ci0KLUNL
X0NPSE9SVF9QUk9UT1RZUEUoYmFzaWMsCi0gICAgY2tfc3BpbmxvY2tfZmFzX2xvY2tfd2l0aF9j
b250ZXh0LCBja19zcGlubG9ja19mYXNfdW5sb2NrX3dpdGhfY29udGV4dCwgY2tfc3BpbmxvY2tf
ZmFzX2xvY2tlZF93aXRoX2NvbnRleHQsCi0gICAgY2tfc3BpbmxvY2tfZmFzX2xvY2tfd2l0aF9j
b250ZXh0LCBja19zcGlubG9ja19mYXNfdW5sb2NrX3dpdGhfY29udGV4dCwgY2tfc3BpbmxvY2tf
ZmFzX2xvY2tlZF93aXRoX2NvbnRleHQpCi0KLXN0cnVjdCBjb2hvcnRfcmVjb3JkIHsKLQlDS19D
T0hPUlRfSU5TVEFOQ0UoYmFzaWMpIGNvaG9ydDsKLX0gQ0tfQ0NfQ0FDSEVMSU5FOwotc3RhdGlj
IHN0cnVjdCBjb2hvcnRfcmVjb3JkICpjb2hvcnRzOwotCi1zdGF0aWMgY2tfc3BpbmxvY2tfdCBn
bG9iYWxfbG9jayA9IENLX1NQSU5MT0NLX0lOSVRJQUxJWkVSOwotCi1zdHJ1Y3QgYmxvY2sgewot
CXVuc2lnbmVkIGludCB0aWQ7Ci19OwotCi1zdGF0aWMgdm9pZCAqCi1mYWlybmVzcyh2b2lkICpu
dWxsKQotewotCXN0cnVjdCBibG9jayAqY29udGV4dCA9IG51bGw7Ci0JdW5zaWduZWQgaW50IGkg
PSBjb250ZXh0LT50aWQ7Ci0Jdm9sYXRpbGUgaW50IGo7Ci0JbG9uZyBpbnQgYmFzZTsKLQl1bnNp
Z25lZCBpbnQgY29yZTsKLQlDS19DT0hPUlRfSU5TVEFOQ0UoYmFzaWMpICpjb2hvcnQ7Ci0KLQot
CWlmIChhZmZfaXRlcmF0ZV9jb3JlKCZhLCAmY29yZSkpIHsKLQkJcGVycm9yKCJFUlJPUjogQ291
bGQgbm90IGFmZmluZSB0aHJlYWQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWNv
aG9ydCA9ICYoKGNvaG9ydHMgKyAoY29yZSAvIChpbnQpKGEuZGVsdGEpKSAlIG5fY29ob3J0cykt
PmNvaG9ydCk7Ci0KLQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZyZWFkeSkgPT0gMCk7Ci0KLQlj
a19wcl9pbmNfdWludCgmYmFycmllcik7Ci0Jd2hpbGUgKGNrX3ByX2xvYWRfdWludCgmYmFycmll
cikgIT0gbnRocik7Ci0KLQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZyZWFkeSkpIHsKLQkJQ0tf
Q09IT1JUX0xPQ0soYmFzaWMsIGNvaG9ydCwgTlVMTCwgTlVMTCk7Ci0KLQkJY291bnRbaV0udmFs
dWUrKzsKLQkJaWYgKGNyaXRpY2FsKSB7Ci0JCQliYXNlID0gY29tbW9uX2xyYW5kNDgoKSAlIGNy
aXRpY2FsOwotCQkJZm9yIChqID0gMDsgaiA8IGJhc2U7IGorKyk7Ci0JCX0KLQotCQlDS19DT0hP
UlRfVU5MT0NLKGJhc2ljLCBjb2hvcnQsIE5VTEwsIE5VTEwpOwotCX0KLQotCXJldHVybiBOVUxM
OwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQl1aW50NjRfdCB2
LCBkOwotCXVuc2lnbmVkIGludCBpOwotCXB0aHJlYWRfdCAqdGhyZWFkczsKLQlzdHJ1Y3QgYmxv
Y2sgKmNvbnRleHQ7Ci0JY2tfc3BpbmxvY2tfdCAqbG9jYWxfbG9jazsKLQotCWlmIChhcmdjICE9
IDUpIHsKLQkJY2tfZXJyb3IoIlVzYWdlOiBja19jb2hvcnQgPG51bWJlciBvZiBjb2hvcnRzPiA8
dGhyZWFkcyBwZXIgY29ob3J0PiAiCi0JCQkiPGFmZmluaXR5IGRlbHRhPiA8Y3JpdGljYWwgc2Vj
dGlvbj5cbiIpOwotCX0KLQotCW5fY29ob3J0cyA9IGF0b2koYXJndlsxXSk7Ci0JaWYgKG5fY29o
b3J0cyA8PSAwKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogTnVtYmVyIG9mIGNvaG9ydHMgbXVzdCBi
ZSBncmVhdGVyIHRoYW4gMFxuIik7Ci0JfQotCi0JbnRociA9IG5fY29ob3J0cyAqIGF0b2koYXJn
dlsyXSk7Ci0JaWYgKG50aHIgPD0gMCkgewotCQlja19lcnJvcigiRVJST1I6IE51bWJlciBvZiB0
aHJlYWRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcbiIpOwotCX0KLQotCWNyaXRpY2FsID0gYXRv
aShhcmd2WzRdKTsKLQlpZiAoY3JpdGljYWwgPCAwKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogY3Jp
dGljYWwgc2VjdGlvbiBjYW5ub3QgYmUgbmVnYXRpdmVcbiIpOwotCX0KLQotCXRocmVhZHMgPSBt
YWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyKTsKLQlpZiAodGhyZWFkcyA9PSBOVUxMKSB7
Ci0JCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIHRocmVhZCBzdHJ1Y3R1cmVz
XG4iKTsKLQl9Ci0KLQljb2hvcnRzID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29ob3J0X3JlY29y
ZCkgKiBuX2NvaG9ydHMpOwotCWlmIChjb2hvcnRzID09IE5VTEwpIHsKLQkJY2tfZXJyb3IoIkVS
Uk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgY29ob3J0IHN0cnVjdHVyZXNcbiIpOwotCX0KLQotCWNv
bnRleHQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBibG9jaykgKiBudGhyKTsKLQlpZiAoY29udGV4
dCA9PSBOVUxMKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIHRocmVh
ZCBjb250ZXh0c1xuIik7Ci0JfQotCi0JYS5kZWx0YSA9IGF0b2koYXJndlsyXSk7Ci0JYS5yZXF1
ZXN0ID0gMDsKLQotCWNvdW50ID0gbWFsbG9jKHNpemVvZigqY291bnQpICogbnRocik7Ci0JaWYg
KGNvdW50ID09IE5VTEwpIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgY3JlYXRlIGFj
cXVpc2l0aW9uIGJ1ZmZlclxuIik7Ci0JfQotCW1lbXNldChjb3VudCwgMCwgc2l6ZW9mKCpjb3Vu
dCkgKiBudGhyKTsKLQotCWZwcmludGYoc3RkZXJyLCAiQ3JlYXRpbmcgY29ob3J0cy4uLiIpOwot
CWZvciAoaSA9IDAgOyBpIDwgbl9jb2hvcnRzIDsgaSsrKSB7Ci0JCWxvY2FsX2xvY2sgPSBtYWxs
b2MobWF4KENLX01EX0NBQ0hFTElORSwgc2l6ZW9mKGNrX3NwaW5sb2NrX3QpKSk7Ci0JCWlmIChs
b2NhbF9sb2NrID09IE5VTEwpIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9j
YXRlIGxvY2FsIGxvY2tcbiIpOwotCQl9Ci0JCUNLX0NPSE9SVF9JTklUKGJhc2ljLCAmKChjb2hv
cnRzICsgaSktPmNvaG9ydCksICZnbG9iYWxfbG9jaywgbG9jYWxfbG9jaywKLQkJICAgIENLX0NP
SE9SVF9ERUZBVUxUX0xPQ0FMX1BBU1NfTElNSVQpOwotCQlsb2NhbF9sb2NrID0gTlVMTDsKLQl9
Ci0JZnByaW50ZihzdGRlcnIsICJkb25lXG4iKTsKLQotCWZwcmludGYoc3RkZXJyLCAiQ3JlYXRp
bmcgdGhyZWFkcyAoZmFpcm5lc3MpLi4uIik7Ci0JZm9yIChpID0gMDsgaSA8IG50aHI7IGkrKykg
ewotCQljb250ZXh0W2ldLnRpZCA9IGk7Ci0JCWlmIChwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkc1tp
XSwgTlVMTCwgZmFpcm5lc3MsIGNvbnRleHQgKyBpKSkgewotCQkJY2tfZXJyb3IoIkVSUk9SOiBD
b3VsZCBub3QgY3JlYXRlIHRocmVhZCAlZFxuIiwgaSk7Ci0JCX0KLQl9Ci0JZnByaW50ZihzdGRl
cnIsICJkb25lXG4iKTsKLQotCWNrX3ByX3N0b3JlX3VpbnQoJnJlYWR5LCAxKTsKLQljb21tb25f
c2xlZXAoMTApOwotCWNrX3ByX3N0b3JlX3VpbnQoJnJlYWR5LCAwKTsKLQotCWZwcmludGYoc3Rk
ZXJyLCAiV2FpdGluZyBmb3IgdGhyZWFkcyB0byBmaW5pc2ggYWNxdWlzaXRpb24gcmVncmVzc2lv
bi4uLiIpOwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspCi0JCXB0aHJlYWRfam9pbih0aHJl
YWRzW2ldLCBOVUxMKTsKLQlmcHJpbnRmKHN0ZGVyciwgImRvbmVcblxuIik7Ci0KLQlmb3IgKGkg
PSAwLCB2ID0gMDsgaSA8IG50aHI7IGkrKykgewotCQlwcmludGYoIiVkICUxNSIgUFJJdTY0ICJc
biIsIGksIGNvdW50W2ldLnZhbHVlKTsKLQkJdiArPSBjb3VudFtpXS52YWx1ZTsKLQl9Ci0KLQlw
cmludGYoIlxuIyB0b3RhbCAgICAgICA6ICUxNSIgUFJJdTY0ICJcbiIsIHYpOwotCXByaW50Zigi
IyB0aHJvdWdocHV0ICA6ICUxNSIgUFJJdTY0ICIgYS9zXG4iLCAodiAvPSBudGhyKSAvIDEwKTsK
LQotCWZvciAoaSA9IDAsIGQgPSAwOyBpIDwgbnRocjsgaSsrKQotCQlkICs9IChjb3VudFtpXS52
YWx1ZSAtIHYpICogKGNvdW50W2ldLnZhbHVlIC0gdik7Ci0KLQlwcmludGYoIiMgYXZlcmFnZSAg
ICAgOiAlMTUiIFBSSXU2NCAiXG4iLCB2KTsKLQlwcmludGYoIiMgZGV2aWF0aW9uICAgOiAlLjJm
ICglLjJmJSUpXG5cbiIsIHNxcnQoZCAvIG50aHIpLCAoc3FydChkIC8gbnRocikgLyB2KSAqIDEw
MC4wMCk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2NvaG9ydC9ja19jb2hvcnQuaCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2NvaG9ydC9ja19jb2hvcnQu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBkN2YwYTQ4M2UxZmU2NDgyY2FkMTg2
ZTkxNWJkM2RhZjA2NTJlMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19j
b2hvcnQvY2tfY29ob3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jZGVmaW5l
IExPQ0tfTkFNRSAiY2tfY29ob3J0IgotI2RlZmluZSBMT0NLX0RFRklORQkJCQkJCQkJCVwKLQlz
dGF0aWMgY2tfc3BpbmxvY2tfZmFzX3QgZ2xvYmFsX2Zhc19sb2NrID0gQ0tfU1BJTkxPQ0tfRkFT
X0lOSVRJQUxJWkVSOwkJXAotCXN0YXRpYyBja19zcGlubG9ja19mYXNfdCBsb2NhbF9mYXNfbG9j
ayA9IENLX1NQSU5MT0NLX0ZBU19JTklUSUFMSVpFUjsJCVwKLQlzdGF0aWMgdm9pZAkJCQkJCQkJ
CVwKLQlja19zcGlubG9ja19mYXNfbG9ja193aXRoX2NvbnRleHQoY2tfc3BpbmxvY2tfZmFzX3Qg
KmxvY2ssIHZvaWQgKmNvbnRleHQpCVwKLQl7CQkJCQkJCQkJCVwKLQkJKHZvaWQpY29udGV4dDsJ
CQkJCQkJCVwKLQkJY2tfc3BpbmxvY2tfZmFzX2xvY2sobG9jayk7CQkJCQkJXAotCX0JCQkJCQkJ
CQkJXAotCQkJCQkJCQkJCQlcCi0Jc3RhdGljIHZvaWQJCQkJCQkJCQlcCi0JY2tfc3BpbmxvY2tf
ZmFzX3VubG9ja193aXRoX2NvbnRleHQoY2tfc3BpbmxvY2tfZmFzX3QgKmxvY2ssIHZvaWQgKmNv
bnRleHQpCVwKLQl7CQkJCQkJCQkJCVwKLQkJKHZvaWQpY29udGV4dDsJCQkJCQkJCVwKLQkJY2tf
c3BpbmxvY2tfZmFzX3VubG9jayhsb2NrKTsJCQkJCQlcCi0JfQkJCQkJCQkJCQlcCi0JCQkJCQkJ
CQkJCVwKLQlzdGF0aWMgYm9vbAkJCQkJCQkJCVwKLQlja19zcGlubG9ja19mYXNfbG9ja2VkX3dp
dGhfY29udGV4dChja19zcGlubG9ja19mYXNfdCAqbG9jaywgdm9pZCAqY29udGV4dCkJXAotCXsJ
CQkJCQkJCQkJXAotCQkodm9pZCljb250ZXh0OwkJCQkJCQkJXAotCQlyZXR1cm4gY2tfc3Bpbmxv
Y2tfZmFzX2xvY2tlZChsb2NrKTsJCQkJCVwKLQl9CQkJCQkJCQkJCVwKLQlDS19DT0hPUlRfUFJP
VE9UWVBFKGZhc19mYXMsCQkJCQkJCVwKLQkgICAgY2tfc3BpbmxvY2tfZmFzX2xvY2tfd2l0aF9j
b250ZXh0LCBja19zcGlubG9ja19mYXNfdW5sb2NrX3dpdGhfY29udGV4dCwJXAotCSAgICBja19z
cGlubG9ja19mYXNfbG9ja2VkX3dpdGhfY29udGV4dCwgY2tfc3BpbmxvY2tfZmFzX2xvY2tfd2l0
aF9jb250ZXh0LAlcCi0JICAgIGNrX3NwaW5sb2NrX2Zhc191bmxvY2tfd2l0aF9jb250ZXh0LCBj
a19zcGlubG9ja19mYXNfbG9ja2VkX3dpdGhfY29udGV4dCkJXAotCXN0YXRpYyBDS19DT0hPUlRf
SU5TVEFOQ0UoZmFzX2ZhcykgQ0tfQ0NfQ0FDSEVMSU5FIGNvaG9ydCA9IENLX0NPSE9SVF9JTklU
SUFMSVpFUgotCi0KLSNkZWZpbmUgTE9DS19JTklUIENLX0NPSE9SVF9JTklUKGZhc19mYXMsICZj
b2hvcnQsICZnbG9iYWxfZmFzX2xvY2ssICZsb2NhbF9mYXNfbG9jaywgICBcCi0JQ0tfQ09IT1JU
X0RFRkFVTFRfTE9DQUxfUEFTU19MSU1JVCkKLSNkZWZpbmUgTE9DSyBDS19DT0hPUlRfTE9DSyhm
YXNfZmFzLCAmY29ob3J0LCBOVUxMLCBOVUxMKQotI2RlZmluZSBVTkxPQ0sgQ0tfQ09IT1JUX1VO
TE9DSyhmYXNfZmFzLCAmY29ob3J0LCBOVUxMLCBOVUxMKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfY29ob3J0L3ZhbGlkYXRlL01h
a2VmaWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tf
Y29ob3J0L3ZhbGlkYXRlL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
NDVhZjNhNThlNzY2ZGVlNTgwMjA2N2NjMWUxODM1MzA2YjdlOTZiLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2NvaG9ydC92YWxpZGF0ZS9NYWtlZmlsZQorKysgL2Rldi9u
dWxsCkBAIC0xLDE3ICswLDAgQEAKLS5QSE9OWTogY2hlY2sgY2xlYW4gZGlzdHJpYnV0aW9uCi0K
LU9CSkVDVFM9dmFsaWRhdGUKLQotYWxsOiAkKE9CSkVDVFMpCi0KLXZhbGlkYXRlOiB2YWxpZGF0
ZS5jIC4uLy4uLy4uL2luY2x1ZGUvY2tfY29ob3J0LmgKLQkkKENDKSAkKENGTEFHUykgLW8gdmFs
aWRhdGUgdmFsaWRhdGUuYwotCi1jaGVjazogYWxsCi0JLi92YWxpZGF0ZSBgZXhwciAkKENPUkVT
KSAvIDJgIDIgMQotCi1jbGVhbjoKLQlybSAtcmYgKi5kU1lNICouZXhlICp+ICoubyAkKE9CSkVD
VFMpCi0KLWluY2x1ZGUgLi4vLi4vLi4vYnVpbGQvcmVncmVzc2lvbnMuYnVpbGQKLUNGTEFHUys9
JChQVEhSRUFEX0NGTEFHUykgLURfR05VX1NPVVJDRQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfY29ob3J0L3ZhbGlkYXRlL3ZhbGlk
YXRlLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19j
b2hvcnQvdmFsaWRhdGUvdmFsaWRhdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Y2ZmYmY3N2NlMTE1NTJkOGFmMjdmMzcwMjdjNzY0NTRlNTBjMTE3OC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9ja19jb2hvcnQvdmFsaWRhdGUvdmFsaWRhdGUuYworKysgL2Rl
di9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTMtMjAxNSBTYW15
IEFsIEJhaHJhLgotICogQ29weXJpZ2h0IDIwMTMgQnJlbmRvbiBTY2hlaW5tYW4uCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAq
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHB0aHJl
YWQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVk
ZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19jb2hvcnQuaD4KLSNpbmNsdWRlIDxja19zcGlubG9j
ay5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNpZm5kZWYgSVRFUkFURQotI2Rl
ZmluZSBJVEVSQVRFIDEwMDAwMDAKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IGFmZmluaXR5IGE7
Ci1zdGF0aWMgdW5zaWduZWQgaW50IGxvY2tlZDsKLXN0YXRpYyBpbnQgbnRocjsKLXN0YXRpYyBj
a19zcGlubG9ja19mYXNfdCBnbG9iYWxfZmFzX2xvY2sgPSBDS19TUElOTE9DS19GQVNfSU5JVElB
TElaRVI7Ci0KLXN0YXRpYyB2b2lkCi1ja19zcGlubG9ja19mYXNfbG9ja193aXRoX2NvbnRleHQo
Y2tfc3BpbmxvY2tfZmFzX3QgKmxvY2ssIHZvaWQgKmNvbnRleHQpCi17Ci0JKHZvaWQpY29udGV4
dDsKLQlja19zcGlubG9ja19mYXNfbG9jayhsb2NrKTsKLX0KLQotc3RhdGljIHZvaWQKLWNrX3Nw
aW5sb2NrX2Zhc191bmxvY2tfd2l0aF9jb250ZXh0KGNrX3NwaW5sb2NrX2Zhc190ICpsb2NrLCB2
b2lkICpjb250ZXh0KQotewotCSh2b2lkKWNvbnRleHQ7Ci0JY2tfc3BpbmxvY2tfZmFzX3VubG9j
ayhsb2NrKTsKLX0KLQotc3RhdGljIGJvb2wKLWNrX3NwaW5sb2NrX2Zhc19sb2NrZWRfd2l0aF9j
b250ZXh0KGNrX3NwaW5sb2NrX2Zhc190ICpsb2NrLCB2b2lkICpjb250ZXh0KQotewotCSh2b2lk
KWNvbnRleHQ7Ci0JcmV0dXJuIGNrX3NwaW5sb2NrX2Zhc19sb2NrZWQobG9jayk7Ci19Ci0KLXN0
YXRpYyBib29sCi1ja19zcGlubG9ja19mYXNfdHJ5bG9ja193aXRoX2NvbnRleHQoY2tfc3Bpbmxv
Y2tfZmFzX3QgKmxvY2ssIHZvaWQgKmNvbnRleHQpCi17Ci0JKHZvaWQpY29udGV4dDsKLQlyZXR1
cm4gY2tfc3BpbmxvY2tfZmFzX3RyeWxvY2sobG9jayk7Ci19Ci0KLUNLX0NPSE9SVF9UUllMT0NL
X1BST1RPVFlQRShmYXNfZmFzLAotCWNrX3NwaW5sb2NrX2Zhc19sb2NrX3dpdGhfY29udGV4dCwg
Y2tfc3BpbmxvY2tfZmFzX3VubG9ja193aXRoX2NvbnRleHQsCi0JY2tfc3BpbmxvY2tfZmFzX2xv
Y2tlZF93aXRoX2NvbnRleHQsIGNrX3NwaW5sb2NrX2Zhc190cnlsb2NrX3dpdGhfY29udGV4dCwK
LQlja19zcGlubG9ja19mYXNfbG9ja193aXRoX2NvbnRleHQsIGNrX3NwaW5sb2NrX2Zhc191bmxv
Y2tfd2l0aF9jb250ZXh0LAotCWNrX3NwaW5sb2NrX2Zhc19sb2NrZWRfd2l0aF9jb250ZXh0LCBj
a19zcGlubG9ja19mYXNfdHJ5bG9ja193aXRoX2NvbnRleHQpCi1zdGF0aWMgQ0tfQ09IT1JUX0lO
U1RBTkNFKGZhc19mYXMpICpjb2hvcnRzOwotc3RhdGljIGludCBuX2NvaG9ydHM7Ci0KLXN0YXRp
YyB2b2lkICoKLXRocmVhZCh2b2lkICpudWxsIENLX0NDX1VOVVNFRCkKLXsKLQlpbnQgaSA9IElU
RVJBVEU7Ci0JdW5zaWduZWQgaW50IGw7Ci0JdW5zaWduZWQgaW50IGNvcmU7Ci0JQ0tfQ09IT1JU
X0lOU1RBTkNFKGZhc19mYXMpICpjb2hvcnQ7Ci0KLQlpZiAoYWZmX2l0ZXJhdGVfY29yZSgmYSwg
JmNvcmUpKSB7Ci0JCQlwZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWZmaW5lIHRocmVhZCIpOwot
CQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWNvaG9ydCA9IGNvaG9ydHMgKyAoY29yZSAv
IChpbnQpKGEuZGVsdGEpKSAlIG5fY29ob3J0czsKLQotCXdoaWxlIChpLS0pIHsKLQotCQlpZiAo
aSAmIDEpIHsKLQkJCUNLX0NPSE9SVF9MT0NLKGZhc19mYXMsIGNvaG9ydCwgTlVMTCwgTlVMTCk7
Ci0JCX0gZWxzZSB7Ci0JCQl3aGlsZSAoQ0tfQ09IT1JUX1RSWUxPQ0soZmFzX2ZhcywgY29ob3J0
LCBOVUxMLCBOVUxMLCBOVUxMKSA9PSBmYWxzZSkgewotCQkJCWNrX3ByX3N0YWxsKCk7Ci0JCQl9
Ci0JCX0KLQotCQl7Ci0JCQlsID0gY2tfcHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQkJaWYgKGwg
IT0gMCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbV1I6JWRdOiAldSAhPSAwXG4iLCBfX0xJTkVf
XywgbCk7Ci0JCQl9Ci0KLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5j
X3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2lu
Y191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9p
bmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJf
aW5jX3VpbnQoJmxvY2tlZCk7Ci0KLQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0J
CQlpZiAobCAhPSA4KSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDJcbiIs
IF9fTElORV9fLCBsKTsKLQkJCX0KLQotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlj
a19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJ
Y2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJ
CWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0J
CQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQotCQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9j
a2VkKTsKLQkJCWlmIChsICE9IDApIHsKLQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUg
IT0gMFxuIiwgX19MSU5FX18sIGwpOwotCQkJfQotCQl9Ci0JCUNLX0NPSE9SVF9VTkxPQ0soZmFz
X2ZhcywgY29ob3J0LCBOVUxMLCBOVUxMKTsKLQl9Ci0KLQlyZXR1cm4gKE5VTEwpOwotfQotCi1p
bnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlwdGhyZWFkX3QgKnRocmVhZHM7
Ci0JaW50IHRocmVhZHNfcGVyX2NvaG9ydDsKLQlja19zcGlubG9ja19mYXNfdCAqbG9jYWxfbG9j
azsKLQlpbnQgaTsKLQotCWlmIChhcmdjICE9IDQpIHsKLQkJY2tfZXJyb3IoIlVzYWdlOiB2YWxp
ZGF0ZSA8bnVtYmVyIG9mIGNvaG9ydHM+IDx0aHJlYWRzIHBlciBjb2hvcnQ+IDxhZmZpbml0eSBk
ZWx0YT5cbiIpOwotCX0KLQotCW5fY29ob3J0cyA9IGF0b2koYXJndlsxXSk7Ci0JaWYgKG5fY29o
b3J0cyA8PSAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAic2V0dGluZyBudW1iZXIgb2YgY29ob3J0
cyBwZXIgdGhyZWFkIHRvIDFcbiIpOwotCQluX2NvaG9ydHMgPSAxOwotCX0KLQotCXRocmVhZHNf
cGVyX2NvaG9ydCA9IGF0b2koYXJndlsyXSk7Ci0JaWYgKHRocmVhZHNfcGVyX2NvaG9ydCA8PSAw
KSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogVGhyZWFkcyBwZXIgY29ob3J0IG11c3QgYmUgZ3JlYXRl
ciB0aGFuIDBcbiIpOwotCX0KLQotCW50aHIgPSBuX2NvaG9ydHMgKiB0aHJlYWRzX3Blcl9jb2hv
cnQ7Ci0KLQl0aHJlYWRzID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocik7Ci0JaWYg
KHRocmVhZHMgPT0gTlVMTCkgewotCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0
ZSB0aHJlYWQgc3RydWN0dXJlc1xuIik7Ci0JfQotCi0JYS5kZWx0YSA9IGF0b2koYXJndlszXSk7
Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW5nIGNvaG9ydHMuLi4iKTsKLQljb2hvcnRzID0g
bWFsbG9jKHNpemVvZihDS19DT0hPUlRfSU5TVEFOQ0UoZmFzX2ZhcykpICogbl9jb2hvcnRzKTsK
LQlmb3IgKGkgPSAwIDsgaSA8IG5fY29ob3J0cyA7IGkrKykgewotCQlsb2NhbF9sb2NrID0gbWFs
bG9jKHNpemVvZihja19zcGlubG9ja19mYXNfdCkpOwotCQlDS19DT0hPUlRfSU5JVChmYXNfZmFz
LCBjb2hvcnRzICsgaSwgJmdsb2JhbF9mYXNfbG9jaywgbG9jYWxfbG9jaywKLQkJICAgIENLX0NP
SE9SVF9ERUZBVUxUX0xPQ0FMX1BBU1NfTElNSVQpOwotCX0KLQlmcHJpbnRmKHN0ZGVyciwgImRv
bmVcbiIpOwotCi0JZnByaW50ZihzdGRlcnIsICJDcmVhdGluZyB0aHJlYWRzLi4uIik7Ci0JZm9y
IChpID0gMDsgaSA8IG50aHI7IGkrKykgewotCQlpZiAocHRocmVhZF9jcmVhdGUoJnRocmVhZHNb
aV0sIE5VTEwsIHRocmVhZCwgTlVMTCkpIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90
IGNyZWF0ZSB0aHJlYWQgJWRcbiIsIGkpOwotCQl9Ci0JfQotCWZwcmludGYoc3RkZXJyLCAiZG9u
ZVxuIik7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIldhaXRpbmcgZm9yIHRocmVhZHMgdG8gZmluaXNo
IGNvcnJlY3RuZXNzIHJlZ3Jlc3Npb24uLi4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnRocjsgaSsr
KQotCQlwdGhyZWFkX2pvaW4odGhyZWFkc1tpXSwgTlVMTCk7Ci0JZnByaW50ZihzdGRlcnIsICJk
b25lIChwYXNzZWQpXG4iKTsKLQotCXJldHVybiAoMCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2Vwb2NoL3ZhbGlkYXRl
L01ha2VmaWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfZXBvY2gvdmFsaWRhdGUvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQ0NmMwMDhhMjU3ZjMwODMyYzU0MjU2NmYzOWQyOWZjZWViM2EwMjIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svcmVncmVzc2lvbnMvY2tfZXBvY2gvdmFsaWRhdGUvTWFrZWZpbGUKKysrIC9kZXYv
bnVsbApAQCAtMSw0MiArMCwwIEBACi0uUEhPTlk6IGNoZWNrIGNsZWFuIGRpc3RyaWJ1dGlvbgot
Ci1PQkpFQ1RTPWNrX3N0YWNrIGNrX2Vwb2NoX3N5bmNocm9uaXplIGNrX2Vwb2NoX3BvbGwgY2tf
ZXBvY2hfY2FsbCBcCi0JY2tfZXBvY2hfc2VjdGlvbiBja19lcG9jaF9zZWN0aW9uXzIgdG9ydHVy
ZQotSEFMRj1gZXhwciAkKENPUkVTKSAvIDJgCi0KLWFsbDogJChPQkpFQ1RTKQotCi1jaGVjazog
YWxsCi0JLi9ja19zdGFjayAkKENPUkVTKSAxCi0JLi9ja19lcG9jaF9zeW5jaHJvbml6ZSAkKEhB
TEYpICQoSEFMRikgMQotCS4vY2tfZXBvY2hfcG9sbCAkKENPUkVTKSAxIDEKLQkuL2NrX2Vwb2No
X3NlY3Rpb24KLQkuL2NrX2Vwb2NoX3NlY3Rpb25fMiAkKEhBTEYpICQoSEFMRikgMQotCS4vdG9y
dHVyZSAkKEhBTEYpICQoSEFMRikgMQotCi1ja19lcG9jaF9zeW5jaHJvbml6ZTogY2tfZXBvY2hf
c3luY2hyb25pemUuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX3N0YWNrLmggLi4vLi4vLi4vaW5jbHVk
ZS9ja19lcG9jaC5oIC4uLy4uLy4uL3NyYy9ja19lcG9jaC5jCi0JJChDQykgJChDRkxBR1MpIC1v
IGNrX2Vwb2NoX3N5bmNocm9uaXplIGNrX2Vwb2NoX3N5bmNocm9uaXplLmMgLi4vLi4vLi4vc3Jj
L2NrX2Vwb2NoLmMKLQotY2tfZXBvY2hfcG9sbDogY2tfZXBvY2hfcG9sbC5jIC4uLy4uLy4uL2lu
Y2x1ZGUvY2tfc3RhY2suaCAuLi8uLi8uLi9pbmNsdWRlL2NrX2Vwb2NoLmggLi4vLi4vLi4vc3Jj
L2NrX2Vwb2NoLmMKLQkkKENDKSAkKENGTEFHUykgLW8gY2tfZXBvY2hfcG9sbCBja19lcG9jaF9w
b2xsLmMgLi4vLi4vLi4vc3JjL2NrX2Vwb2NoLmMKLQotdG9ydHVyZTogdG9ydHVyZS5jIC4uLy4u
Ly4uL2luY2x1ZGUvY2tfZXBvY2guaCAuLi8uLi8uLi9zcmMvY2tfZXBvY2guYwotCSQoQ0MpICQo
Q0ZMQUdTKSAtbyB0b3J0dXJlIHRvcnR1cmUuYyAuLi8uLi8uLi9zcmMvY2tfZXBvY2guYwotCi1j
a19lcG9jaF9zZWN0aW9uOiBja19lcG9jaF9zZWN0aW9uLmMgLi4vLi4vLi4vaW5jbHVkZS9ja19l
cG9jaC5oIC4uLy4uLy4uL3NyYy9ja19lcG9jaC5jCi0JJChDQykgJChDRkxBR1MpIC1vIGNrX2Vw
b2NoX3NlY3Rpb24gY2tfZXBvY2hfc2VjdGlvbi5jIC4uLy4uLy4uL3NyYy9ja19lcG9jaC5jCi0K
LWNrX2Vwb2NoX3NlY3Rpb25fMjogY2tfZXBvY2hfc2VjdGlvbl8yLmMgLi4vLi4vLi4vaW5jbHVk
ZS9ja19lcG9jaC5oIC4uLy4uLy4uL3NyYy9ja19lcG9jaC5jCi0JJChDQykgJChDRkxBR1MpIC1v
IGNrX2Vwb2NoX3NlY3Rpb25fMiBja19lcG9jaF9zZWN0aW9uXzIuYyAuLi8uLi8uLi9zcmMvY2tf
ZXBvY2guYwotCi1ja19lcG9jaF9jYWxsOiBja19lcG9jaF9jYWxsLmMgLi4vLi4vLi4vaW5jbHVk
ZS9ja19zdGFjay5oIC4uLy4uLy4uL2luY2x1ZGUvY2tfZXBvY2guaCAuLi8uLi8uLi9zcmMvY2tf
ZXBvY2guYwotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBja19lcG9jaF9jYWxsIGNrX2Vwb2NoX2NhbGwu
YyAuLi8uLi8uLi9zcmMvY2tfZXBvY2guYwotCi1ja19zdGFjazogY2tfc3RhY2suYyAuLi8uLi8u
Li9pbmNsdWRlL2NrX3N0YWNrLmggLi4vLi4vLi4vaW5jbHVkZS9ja19lcG9jaC5oIC4uLy4uLy4u
L3NyYy9ja19lcG9jaC5jCi0JJChDQykgJChDRkxBR1MpIC1vIGNrX3N0YWNrIGNrX3N0YWNrLmMg
Li4vLi4vLi4vc3JjL2NrX2Vwb2NoLmMKLQotY2xlYW46Ci0Jcm0gLXJmICp+ICoubyAkKE9CSkVD
VFMpICouZFNZTSAqLmV4ZQotCi1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25zLmJ1
aWxkCi1DRkxBR1MrPSQoUFRIUkVBRF9DRkxBR1MpIC1EX0dOVV9TT1VSQ0UKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2Vwb2NoL3Zh
bGlkYXRlL2NrX2Vwb2NoX2NhbGwuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L3JlZ3Jlc3Npb25zL2NrX2Vwb2NoL3ZhbGlkYXRlL2NrX2Vwb2NoX2NhbGwuYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMWMyNzRlMGY1NGJiOWM3ZDQzYzcxNTMzZmU3YTY2MTEzYTU0
ZTMxMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19lcG9jaC92YWxpZGF0
ZS9ja19lcG9jaF9jYWxsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IDIwMTQgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8Y2tfZXBvY2guaD4KLQotI2luY2x1ZGUg
Ii4uLy4uL2NvbW1vbi5oIgotCi1zdGF0aWMgY2tfZXBvY2hfdCBlcG9jaDsKLXN0YXRpYyB1bnNp
Z25lZCBpbnQgY291bnRlcjsKLXN0YXRpYyBja19lcG9jaF9yZWNvcmRfdCByZWNvcmRbMl07Ci0K
LXN0YXRpYyB2b2lkCi1jYihja19lcG9jaF9lbnRyeV90ICpwKQotewotCi0JLyogVGVzdCB0aGF0
IHdlIGNhbiByZXJlZ2lzdGVyIHRoZSBjYWxsYmFjay4gKi8KLQlpZiAoY291bnRlciA9PSAwKQot
CQlja19lcG9jaF9jYWxsKCZyZWNvcmRbMV0sIHAsIGNiKTsKLQotCXByaW50ZigiQ291bnRlciB2
YWx1ZTogJXUgLT4gJXVcbiIsCi0JICAgIGNvdW50ZXIsIGNvdW50ZXIgKyAxKTsKLQljb3VudGVy
Kys7Ci0JcmV0dXJuOwotfQotCi1pbnQKLW1haW4odm9pZCkKLXsKLQlja19lcG9jaF9lbnRyeV90
IGVudHJ5OwotCWNrX2Vwb2NoX2VudHJ5X3QgYW5vdGhlcjsKLQotCWNrX2Vwb2NoX3JlZ2lzdGVy
KCZlcG9jaCwgJnJlY29yZFswXSwgTlVMTCk7Ci0JY2tfZXBvY2hfcmVnaXN0ZXIoJmVwb2NoLCAm
cmVjb3JkWzFdLCBOVUxMKTsKLQotCWNrX2Vwb2NoX2NhbGwoJnJlY29yZFsxXSwgJmVudHJ5LCBj
Yik7Ci0JY2tfZXBvY2hfYmFycmllcigmcmVjb3JkWzFdKTsKLQlja19lcG9jaF9iYXJyaWVyKCZy
ZWNvcmRbMV0pOwotCi0JLyogTWFrZSBzdXJlIHRoYXQgc3RyaWN0IHdvcmtzLiAqLwotCWNrX2Vw
b2NoX2NhbGxfc3RyaWN0KCZyZWNvcmRbMV0sICZlbnRyeSwgY2IpOwotCWNrX2Vwb2NoX2NhbGxf
c3RyaWN0KCZyZWNvcmRbMV0sICZhbm90aGVyLCBjYik7Ci0JY2tfZXBvY2hfYmFycmllcigmcmVj
b3JkWzFdKTsKLQotCWlmIChjb3VudGVyICE9IDQpCi0JCWNrX2Vycm9yKCJFeHBlY3RlZCBjb3Vu
dGVyIHZhbHVlIDQsIHJlYWQgJXUuXG4iLCBjb3VudGVyKTsKLQotCXJldHVybiAwOwotfQpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tf
ZXBvY2gvdmFsaWRhdGUvY2tfZXBvY2hfcG9sbC5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svcmVncmVzc2lvbnMvY2tfZXBvY2gvdmFsaWRhdGUvY2tfZXBvY2hfcG9sbC5jCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTg3NjliYTczZjI3MjMwNzU2ODg4ZGRjOWYz
ODYyNGE0MTMwMjgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2Vwb2No
L3ZhbGlkYXRlL2NrX2Vwb2NoX3BvbGwuYworKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IDIwMTAtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5o
PgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxz
dGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNpbmNs
dWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotCi0jaW5jbHVkZSA8Y2tfYmFj
a29mZi5oPgotI2luY2x1ZGUgPGNrX2NjLmg+Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRl
IDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0j
aW5jbHVkZSA8Y2tfZXBvY2guaD4KLSNpbmNsdWRlIDxja19zdGFjay5oPgotCi0jaW5jbHVkZSAi
Li4vLi4vY29tbW9uLmgiCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbl9yZDsKLXN0YXRpYyB1bnNp
Z25lZCBpbnQgbl93cjsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbl90aHJlYWRzOwotc3RhdGljIHVu
c2lnbmVkIGludCBiYXJyaWVyOwotc3RhdGljIHVuc2lnbmVkIGludCBlX2JhcnJpZXI7Ci1zdGF0
aWMgdW5zaWduZWQgaW50IHJlYWRlcnM7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHdyaXRlcnM7Ci0K
LSNpZm5kZWYgUEFJUlNfUwotI2RlZmluZSBQQUlSU19TIDEwMDAwMAotI2VuZGlmCi0KLSNpZm5k
ZWYgSVRFUkFURV9TCi0jZGVmaW5lIElURVJBVEVfUyAyMAotI2VuZGlmCi0KLXN0cnVjdCBub2Rl
IHsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0JY2tfc3RhY2tfZW50cnlfdCBzdGFja19lbnRyeTsK
LQlja19lcG9jaF9lbnRyeV90IGVwb2NoX2VudHJ5OwotfTsKLXN0YXRpYyBja19zdGFja190IHN0
YWNrID0gQ0tfU1RBQ0tfSU5JVElBTElaRVI7Ci1zdGF0aWMgY2tfZXBvY2hfdCBzdGFja19lcG9j
aDsKLUNLX1NUQUNLX0NPTlRBSU5FUihzdHJ1Y3Qgbm9kZSwgc3RhY2tfZW50cnksIHN0YWNrX2Nv
bnRhaW5lcikKLUNLX0VQT0NIX0NPTlRBSU5FUihzdHJ1Y3Qgbm9kZSwgZXBvY2hfZW50cnksIGVw
b2NoX2NvbnRhaW5lcikKLXN0YXRpYyBzdHJ1Y3QgYWZmaW5pdHkgYTsKLXN0YXRpYyBjb25zdCBj
aGFyIGFuaW1hdGVbXSA9ICItL3xcXCI7Ci0KLXN0YXRpYyB2b2lkCi1kZXN0cnVjdG9yKGNrX2Vw
b2NoX2VudHJ5X3QgKnApCi17Ci0Jc3RydWN0IG5vZGUgKmUgPSBlcG9jaF9jb250YWluZXIocCk7
Ci0KLQlmcmVlKGUpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgKgotcmVhZF90aHJlYWQo
dm9pZCAqdW51c2VkIENLX0NDX1VOVVNFRCkKLXsKLQl1bnNpZ25lZCBpbnQgajsKLQlja19lcG9j
aF9yZWNvcmRfdCByZWNvcmQgQ0tfQ0NfQ0FDSEVMSU5FOwotCWNrX3N0YWNrX2VudHJ5X3QgKmN1
cnNvciwgKm47Ci0KLQlja19lcG9jaF9yZWdpc3Rlcigmc3RhY2tfZXBvY2gsICZyZWNvcmQsIE5V
TEwpOwotCi0JaWYgKGFmZl9pdGVyYXRlKCZhKSkgewotCQlwZXJyb3IoIkVSUk9SOiBmYWlsZWQg
dG8gYWZmaW5lIHRocmVhZCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JY2tfcHJf
aW5jX3VpbnQoJmJhcnJpZXIpOwotCXdoaWxlIChja19wcl9sb2FkX3VpbnQoJmJhcnJpZXIpIDwg
bl90aHJlYWRzKTsKLQotCXdoaWxlIChDS19TVEFDS19JU0VNUFRZKCZzdGFjaykgPT0gdHJ1ZSkg
ewotCQlpZiAoY2tfcHJfbG9hZF91aW50KCZyZWFkZXJzKSAhPSAwKQotCQkJYnJlYWs7Ci0KLQkJ
Y2tfcHJfc3RhbGwoKTsKLQl9Ci0KLQlqID0gMDsKLQlmb3IgKDs7KSB7Ci0JCWNrX2Vwb2NoX2Jl
Z2luKCZyZWNvcmQsIE5VTEwpOwotCQlDS19TVEFDS19GT1JFQUNIKCZzdGFjaywgY3Vyc29yKSB7
Ci0JCQlpZiAoY3Vyc29yID09IE5VTEwpCi0JCQkJY29udGludWU7Ci0KLQkJCW4gPSBDS19TVEFD
S19ORVhUKGN1cnNvcik7Ci0JCQlqICs9IGNrX3ByX2xvYWRfcHRyKCZuKSAhPSBOVUxMOwotCQl9
Ci0JCWNrX2Vwb2NoX2VuZCgmcmVjb3JkLCBOVUxMKTsKLQotCQlpZiAoaiAhPSAwICYmIGNrX3By
X2xvYWRfdWludCgmcmVhZGVycykgPT0gMCkKLQkJCWNrX3ByX3N0b3JlX3VpbnQoJnJlYWRlcnMs
IDEpOwotCi0JCWlmIChDS19TVEFDS19JU0VNUFRZKCZzdGFjaykgPT0gdHJ1ZSAmJgotCQkgICAg
Y2tfcHJfbG9hZF91aW50KCZlX2JhcnJpZXIpICE9IDApCi0JCQlicmVhazsKLQl9Ci0KLQlja19w
cl9pbmNfdWludCgmZV9iYXJyaWVyKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZlX2JhcnJp
ZXIpIDwgbl90aHJlYWRzKTsKLQotCWZwcmludGYoc3RkZXJyLCAiW1JdIE9ic2VydmVkIGVudHJp
ZXM6ICV1XG4iLCBqKTsKLQlyZXR1cm4gKE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCAqCi13cml0
ZV90aHJlYWQodm9pZCAqdW51c2VkIENLX0NDX1VOVVNFRCkKLXsKLQlzdHJ1Y3Qgbm9kZSAqKmVu
dHJ5LCAqZTsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgdGlkOwotCWNrX2Vwb2NoX3JlY29yZF90IHJl
Y29yZDsKLQlja19zdGFja19lbnRyeV90ICpzOwotCi0JY2tfZXBvY2hfcmVnaXN0ZXIoJnN0YWNr
X2Vwb2NoLCAmcmVjb3JkLCBOVUxMKTsKLQotCWlmIChhZmZfaXRlcmF0ZSgmYSkpIHsKLQkJcGVy
cm9yKCJFUlJPUjogZmFpbGVkIHRvIGFmZmluZSB0aHJlYWQiKTsKLQkJZXhpdChFWElUX0ZBSUxV
UkUpOwotCX0KLQotCXRpZCA9IGNrX3ByX2ZhYV91aW50KCZ3cml0ZXJzLCAxKTsKLQlja19wcl9p
bmNfdWludCgmYmFycmllcik7Ci0Jd2hpbGUgKGNrX3ByX2xvYWRfdWludCgmYmFycmllcikgPCBu
X3RocmVhZHMpOwotCi0JZW50cnkgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlICopICogUEFJ
UlNfUyk7Ci0JaWYgKGVudHJ5ID09IE5VTEwpIHsKLQkJY2tfZXJyb3IoIkZhaWxlZCBhbGxvY2F0
aW9uLlxuIik7Ci0JfQotCi0JZm9yIChqID0gMDsgaiA8IElURVJBVEVfUzsgaisrKSB7Ci0JCWZv
ciAoaSA9IDA7IGkgPCBQQUlSU19TOyBpKyspIHsKLQkJCWVudHJ5W2ldID0gbWFsbG9jKHNpemVv
ZihzdHJ1Y3Qgbm9kZSkpOwotCQkJaWYgKGVudHJ5ID09IE5VTEwpIHsKLQkJCQlja19lcnJvcigi
RmFpbGVkIGluZGl2aWR1YWwgYWxsb2NhdGlvblxuIik7Ci0JCQl9Ci0JCX0KLQotCQlmb3IgKGkg
PSAwOyBpIDwgUEFJUlNfUzsgaSsrKSB7Ci0JCQlja19zdGFja19wdXNoX3VwbWMoJnN0YWNrLCAm
ZW50cnlbaV0tPnN0YWNrX2VudHJ5KTsKLQkJfQotCi0JCXdoaWxlIChja19wcl9sb2FkX3VpbnQo
JnJlYWRlcnMpID09IDApCi0JCQlja19wcl9zdGFsbCgpOwotCi0JCWlmICh0aWQgPT0gMCkgewot
CQkJZnByaW50ZihzdGRlcnIsICJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJbV10gJTIu
MmY6ICVjIiwKLQkJCSAgICAoZG91YmxlKWogLyBJVEVSQVRFX1MsIGFuaW1hdGVbaSAlIHN0cmxl
bihhbmltYXRlKV0pOwotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IFBBSVJTX1M7IGkrKykgewot
CQkJY2tfZXBvY2hfYmVnaW4oJnJlY29yZCwgTlVMTCk7Ci0JCQlzID0gY2tfc3RhY2tfcG9wX3Vw
bWMoJnN0YWNrKTsKLQkJCWUgPSBzdGFja19jb250YWluZXIocyk7Ci0JCQlja19lcG9jaF9lbmQo
JnJlY29yZCwgTlVMTCk7Ci0KLQkJCWNrX2Vwb2NoX2NhbGwoJnJlY29yZCwgJmUtPmVwb2NoX2Vu
dHJ5LCBkZXN0cnVjdG9yKTsKLQkJCWNrX2Vwb2NoX3BvbGwoJnJlY29yZCk7Ci0JCX0KLQl9Ci0K
LQlja19lcG9jaF9iYXJyaWVyKCZyZWNvcmQpOwotCi0JaWYgKHRpZCA9PSAwKSB7Ci0JCWZwcmlu
dGYoc3RkZXJyLCAiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYltXXSBQ
ZWFrOiAldSAoJTIuMmYlJSlcbiAgICBSZWNsYW1hdGlvbnM6ICV1XG5cbiIsCi0JCQlyZWNvcmQu
bl9wZWFrLAotCQkJKGRvdWJsZSlyZWNvcmQubl9wZWFrIC8gKChkb3VibGUpUEFJUlNfUyAqIElU
RVJBVEVfUykgKiAxMDAsCi0JCQlyZWNvcmQubl9kaXNwYXRjaCk7Ci0JfQotCi0JY2tfcHJfaW5j
X3VpbnQoJmVfYmFycmllcik7Ci0Jd2hpbGUgKGNrX3ByX2xvYWRfdWludCgmZV9iYXJyaWVyKSA8
IG5fdGhyZWFkcyk7Ci0JcmV0dXJuIChOVUxMKTsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBj
aGFyICphcmd2W10pCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JcHRocmVhZF90ICp0aHJlYWRzOwot
Ci0JaWYgKGFyZ2MgIT0gNCkgewotCQlja19lcnJvcigiVXNhZ2U6IHN0YWNrIDwjcmVhZGVycz4g
PCN3cml0ZXJzPiA8YWZmaW5pdHkgZGVsdGE+XG4iKTsKLQl9Ci0KLQluX3JkID0gYXRvaShhcmd2
WzFdKTsKLQluX3dyID0gYXRvaShhcmd2WzJdKTsKLQluX3RocmVhZHMgPSBuX3dyICsgbl9yZDsK
LQotCWEuZGVsdGEgPSBhdG9pKGFyZ3ZbM10pOwotCWEucmVxdWVzdCA9IDA7Ci0KLQl0aHJlYWRz
ID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbl90aHJlYWRzKTsKLQlja19lcG9jaF9pbml0
KCZzdGFja19lcG9jaCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbl9yZDsgaSsrKQotCQlwdGhyZWFk
X2NyZWF0ZSh0aHJlYWRzICsgaSwgTlVMTCwgcmVhZF90aHJlYWQsIE5VTEwpOwotCi0JZG8gewot
CQlwdGhyZWFkX2NyZWF0ZSh0aHJlYWRzICsgaSwgTlVMTCwgd3JpdGVfdGhyZWFkLCBOVUxMKTsK
LQl9IHdoaWxlICgrK2kgPCBuX3dyICsgbl9yZCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbl90aHJl
YWRzOyBpKyspCi0JCXB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsKLQotCXJldHVybiAo
MCk7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdy
ZXNzaW9ucy9ja19lcG9jaC92YWxpZGF0ZS9ja19lcG9jaF9zZWN0aW9uLmMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19lcG9jaC92YWxpZGF0ZS9ja19l
cG9jaF9zZWN0aW9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNzZkMWNjYTU0
NDM0ZWIwMGYyMTAwYzcyM2NjZDk0N2ExNTc2NzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVn
cmVzc2lvbnMvY2tfZXBvY2gvdmFsaWRhdGUvY2tfZXBvY2hfc2VjdGlvbi5jCisrKyAvZGV2L251
bGwKQEAgLTEsMzEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNSBKb2huIEVzbWV0Lgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0g
KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQot
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK
LSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVk
ZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4K
LSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHRpbWUu
aD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGNrX2Vwb2NoLmg+Ci0KLSNpbmNs
dWRlICIuLi8uLi9jb21tb24uaCIKLQotc3RhdGljIGNrX2Vwb2NoX3QgZXBjOwotc3RhdGljIGNr
X2Vwb2NoX3JlY29yZF90IHJlY29yZCwgcmVjb3JkMjsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY2xl
YW51cF9jYWxsczsKLQotc3RhdGljIHZvaWQKLXNldHVwX3Rlc3Qodm9pZCkKLXsKLQotCWNrX2Vw
b2NoX2luaXQoJmVwYyk7Ci0JY2tfZXBvY2hfcmVnaXN0ZXIoJmVwYywgJnJlY29yZCwgTlVMTCk7
Ci0JY2tfZXBvY2hfcmVnaXN0ZXIoJmVwYywgJnJlY29yZDIsIE5VTEwpOwotCWNsZWFudXBfY2Fs
bHMgPSAwOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotdGVhcmRvd25fdGVzdCh2b2lk
KQotewotCi0JbWVtc2V0KCZlcGMsIDAsIHNpemVvZihja19lcG9jaF90KSk7Ci0JY2tfZXBvY2hf
dW5yZWdpc3RlcigmcmVjb3JkKTsKLQltZW1zZXQoJnJlY29yZCwgMCwgc2l6ZW9mKGNrX2Vwb2No
X3JlY29yZF90KSk7Ci0JbWVtc2V0KCZyZWNvcmQyLCAwLCBzaXplb2YoY2tfZXBvY2hfcmVjb3Jk
X3QpKTsKLQljbGVhbnVwX2NhbGxzID0gMDsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQK
LWNsZWFudXAoY2tfZXBvY2hfZW50cnlfdCAqZSkKLXsKLQkodm9pZCkgZTsKLQotCWNsZWFudXBf
Y2FsbHMrKzsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfc2ltcGxlX3JlYWRf
c2VjdGlvbih2b2lkKQotewotCWNrX2Vwb2NoX2VudHJ5X3QgZW50cnk7Ci0JY2tfZXBvY2hfc2Vj
dGlvbl90IHNlY3Rpb247Ci0KLQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoY2tfZXBvY2hfZW50
cnlfdCkpOwotCXNldHVwX3Rlc3QoKTsKLQotCWNrX2Vwb2NoX2JlZ2luKCZyZWNvcmQsICZzZWN0
aW9uKTsKLQlja19lcG9jaF9jYWxsKCZyZWNvcmQsICZlbnRyeSwgY2xlYW51cCk7Ci0JYXNzZXJ0
KGNsZWFudXBfY2FsbHMgPT0gMCk7Ci0JaWYgKGNrX2Vwb2NoX2VuZCgmcmVjb3JkLCAmc2VjdGlv
bikgPT0gZmFsc2UpCi0JCWNrX2Vycm9yKCJleHBlY3RlZCBubyBtb3JlIHNlY3Rpb25zIik7Ci0J
Y2tfZXBvY2hfYmFycmllcigmcmVjb3JkKTsKLQlhc3NlcnQoY2xlYW51cF9jYWxscyA9PSAxKTsK
LQotCXRlYXJkb3duX3Rlc3QoKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X25l
c3RlZF9yZWFkX3NlY3Rpb24odm9pZCkKLXsKLQlja19lcG9jaF9lbnRyeV90IGVudHJ5MSwgZW50
cnkyOwotCWNrX2Vwb2NoX3NlY3Rpb25fdCBzZWN0aW9uMSwgc2VjdGlvbjI7Ci0KLQltZW1zZXQo
JmVudHJ5MSwgMCwgc2l6ZW9mKGNrX2Vwb2NoX2VudHJ5X3QpKTsKLQltZW1zZXQoJmVudHJ5Miwg
MCwgc2l6ZW9mKGNrX2Vwb2NoX2VudHJ5X3QpKTsKLQlzZXR1cF90ZXN0KCk7Ci0KLQlja19lcG9j
aF9iZWdpbigmcmVjb3JkLCAmc2VjdGlvbjEpOwotCWNrX2Vwb2NoX2NhbGwoJnJlY29yZCwgJmVu
dHJ5MSwgY2xlYW51cCk7Ci0JYXNzZXJ0KGNsZWFudXBfY2FsbHMgPT0gMCk7Ci0KLQlja19lcG9j
aF9iZWdpbigmcmVjb3JkLCAmc2VjdGlvbjIpOwotCWNrX2Vwb2NoX2NhbGwoJnJlY29yZCwgJmVu
dHJ5MiwgY2xlYW51cCk7Ci0JYXNzZXJ0KGNsZWFudXBfY2FsbHMgPT0gMCk7Ci0KLQlja19lcG9j
aF9lbmQoJnJlY29yZCwgJnNlY3Rpb24yKTsKLQlhc3NlcnQoY2xlYW51cF9jYWxscyA9PSAwKTsK
LQotCWNrX2Vwb2NoX2VuZCgmcmVjb3JkLCAmc2VjdGlvbjEpOwotCWFzc2VydChjbGVhbnVwX2Nh
bGxzID09IDApOwotCi0JY2tfZXBvY2hfYmFycmllcigmcmVjb3JkKTsKLQlhc3NlcnQoY2xlYW51
cF9jYWxscyA9PSAyKTsKLQotCXRlYXJkb3duX3Rlc3QoKTsKLQlyZXR1cm47Ci19Ci0KLXN0cnVj
dCBvYmogewotCWNrX2Vwb2NoX2VudHJ5X3QgZW50cnk7Ci0JdW5zaWduZWQgaW50IGRlc3Ryb3ll
ZDsKLX07Ci0KLXN0YXRpYyB2b2lkICoKLWJhcnJpZXJfd29yayh2b2lkICphcmcpCi17Ci0JdW5z
aWduZWQgaW50ICpydW47Ci0KLQlydW4gPSAodW5zaWduZWQgaW50ICopYXJnOwotCXdoaWxlIChj
a19wcl9sb2FkX3VpbnQocnVuKSAhPSAwKSB7Ci0JCS8qCi0JCSAqIE5lZWQgdG8gdXNlIHJlY29y
ZDIsIGFzIHJlY29yZCBpcyBsb2NhbAotCQkgKiB0byB0aGUgdGVzdCB0aHJlYWQuCi0JCSAqLwot
CQlja19lcG9jaF9iYXJyaWVyKCZyZWNvcmQyKTsKLQkJdXNsZWVwKDUgKiAxMDAwKTsKLQl9Ci0K
LQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgKgotcmVhZGVyX3dvcmsodm9pZCAqYXJn
KQotewotCWNrX2Vwb2NoX3JlY29yZF90IGxvY2FsX3JlY29yZDsKLQlja19lcG9jaF9zZWN0aW9u
X3Qgc2VjdGlvbjsKLQlzdHJ1Y3Qgb2JqICpvOwotCi0JY2tfZXBvY2hfcmVnaXN0ZXIoJmVwYywg
JmxvY2FsX3JlY29yZCwgTlVMTCk7Ci0KLQlvID0gKHN0cnVjdCBvYmogKilhcmc7Ci0KLQkvKgot
CSAqIEJlZ2luIGEgcmVhZCBzZWN0aW9uLiBUaGUgY2FsbGluZyB0aHJlYWQgaGFzIGFuIG9wZW4g
cmVhZCBzZWN0aW9uLAotCSAqIHNvIHRoZSBvYmplY3Qgc2hvdWxkIG5vdCBiZSBkZXN0cm95ZWQg
Zm9yIHRoZSBsaWZldGltZSBvZiB0aGlzCi0JICogdGhyZWFkLgotCSAqLwotCWNrX2Vwb2NoX2Jl
Z2luKCZsb2NhbF9yZWNvcmQsICZzZWN0aW9uKTsKLQl1c2xlZXAoKGNvbW1vbl9yYW5kKCkgJSAx
MDApICogMTAwMCk7Ci0JYXNzZXJ0KGNrX3ByX2xvYWRfdWludCgmby0+ZGVzdHJveWVkKSA9PSAw
KTsKLQlja19lcG9jaF9lbmQoJmxvY2FsX3JlY29yZCwgJnNlY3Rpb24pOwotCi0JY2tfZXBvY2hf
dW5yZWdpc3RlcigmbG9jYWxfcmVjb3JkKTsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMg
dm9pZAotb2JqX2Rlc3Ryb3koY2tfZXBvY2hfZW50cnlfdCAqZSkKLXsKLQlzdHJ1Y3Qgb2JqICpv
OwotCi0JbyA9IChzdHJ1Y3Qgb2JqICopZTsKLQlja19wcl9mYXNfdWludCgmby0+ZGVzdHJveWVk
LCAxKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfc2luZ2xlX3JlYWRlcl93
aXRoX2JhcnJpZXJfdGhyZWFkKHZvaWQpCi17Ci0JY29uc3QgaW50IG51bV9zZWN0aW9ucyA9IDEw
OwotCXN0cnVjdCBvYmogbzsKLQl1bnNpZ25lZCBpbnQgcnVuOwotCXB0aHJlYWRfdCB0aHJlYWQ7
Ci0JY2tfZXBvY2hfc2VjdGlvbl90IHNlY3Rpb25zW251bV9zZWN0aW9uc107Ci0JaW50IHNodWZm
bGVkW251bV9zZWN0aW9uc107Ci0KLQlydW4gPSAxOwotCW1lbXNldCgmbywgMCwgc2l6ZW9mKHN0
cnVjdCBvYmopKTsKLQljb21tb25fc3JhbmQodGltZShOVUxMKSk7Ci0Jc2V0dXBfdGVzdCgpOwot
Ci0JaWYgKHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWQsIE5VTEwsIGJhcnJpZXJfd29yaywgJnJ1bikg
IT0gMCkgewotCQlhYm9ydCgpOwotCX0KLQotCS8qIFN0YXJ0IGEgYnVuY2ggb2Ygc2VjdGlvbnMu
ICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fc2VjdGlvbnM7IGkrKykgewotCQlja19lcG9j
aF9iZWdpbigmcmVjb3JkLCAmc2VjdGlvbnNbaV0pOwotCQlzaHVmZmxlZFtpXSA9IGk7Ci0JCWlm
IChpID09IG51bV9zZWN0aW9ucyAvIDIpIHsKLQkJCXVzbGVlcCgxICogMTAwMCk7Ci0JCX0KLQl9
Ci0KLQkvKiBHZW5lcmF0ZSBhIHNodWZmbGUuICovCi0JZm9yIChpbnQgaSA9IG51bV9zZWN0aW9u
cyAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWludCBrID0gY29tbW9uX3JhbmQoKSAlIChpICsgMSk7
Ci0JCWludCB0bXAgPSBzaHVmZmxlZFtrXTsKLQkJc2h1ZmZsZWRba10gPSBzaHVmZmxlZFtpXTsK
LQkJc2h1ZmZsZWRbaV0gPSB0bXA7Ci0JfQotCi0JY2tfZXBvY2hfY2FsbCgmcmVjb3JkLCAmby5l
bnRyeSwgb2JqX2Rlc3Ryb3kpOwotCi0JLyogQ2xvc2UgdGhlIHNlY3Rpb25zIGluIHNodWZmbGUt
b3JkZXIuICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fc2VjdGlvbnM7IGkrKykgewotCQlj
a19lcG9jaF9lbmQoJnJlY29yZCwgJnNlY3Rpb25zW3NodWZmbGVkW2ldXSk7Ci0JCWlmIChpICE9
IG51bV9zZWN0aW9ucyAtIDEpIHsKLQkJCWFzc2VydChja19wcl9sb2FkX3VpbnQoJm8uZGVzdHJv
eWVkKSA9PSAwKTsKLQkJCXVzbGVlcCgzICogMTAwMCk7Ci0JCX0KLQl9Ci0KLQlja19wcl9zdG9y
ZV91aW50KCZydW4sIDApOwotCWlmIChwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKSAhPSAwKSB7
Ci0JCWFib3J0KCk7Ci0JfQotCi0JY2tfZXBvY2hfYmFycmllcigmcmVjb3JkKTsKLQlhc3NlcnQo
Y2tfcHJfbG9hZF91aW50KCZvLmRlc3Ryb3llZCkgPT0gMSk7Ci0KLQl0ZWFyZG93bl90ZXN0KCk7
Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X211bHRpcGxlX3JlYWRlcnNfd2l0
aF9iYXJyaWVyX3RocmVhZCh2b2lkKQotewotCWNvbnN0IGludCBudW1fcmVhZGVycyA9IDEwOwot
CXN0cnVjdCBvYmogbzsKLQl1bnNpZ25lZCBpbnQgcnVuOwotCWNrX2Vwb2NoX3NlY3Rpb25fdCBz
ZWN0aW9uOwotCXB0aHJlYWRfdCB0aHJlYWRzW251bV9yZWFkZXJzICsgMV07Ci0KLQlydW4gPSAx
OwotCW1lbXNldCgmbywgMCwgc2l6ZW9mKHN0cnVjdCBvYmopKTsKLQltZW1zZXQoJnNlY3Rpb24s
IDAsIHNpemVvZihja19lcG9jaF9zZWN0aW9uX3QpKTsKLQljb21tb25fc3JhbmQodGltZShOVUxM
KSk7Ci0Jc2V0dXBfdGVzdCgpOwotCi0JLyogQ3JlYXRlIGEgdGhyZWFkIHRvIGNhbGwgYmFycmll
cigpIHdoaWxlIHdlIGNyZWF0ZSByZWFkZXIgdGhyZWFkcy4KLQkgKiBFYWNoIGJhcnJpZXIgd2ls
bCBhdHRlbXB0IHRvIG1vdmUgdGhlIGdsb2JhbCBlcG9jaCBmb3J3YXJkIHNvCi0JICogaXQgd2ls
bCBtYWtlIHRoZSByZWFkIHNlY3Rpb24gY29kZSBjb3ZlcmFnZSBtb3JlIGludGVyZXN0aW5nLiAq
LwotCWlmIChwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkc1tudW1fcmVhZGVyc10sIE5VTEwsCi0JICAg
IGJhcnJpZXJfd29yaywgJnJ1bikgIT0gMCkgewotCQlhYm9ydCgpOwotCX0KLQotCWNrX2Vwb2No
X2JlZ2luKCZyZWNvcmQsICZzZWN0aW9uKTsKLQlja19lcG9jaF9jYWxsKCZyZWNvcmQsICZvLmVu
dHJ5LCBvYmpfZGVzdHJveSk7Ci0KLQlmb3IgKGludCBpID0gMDsgaSA8IG51bV9yZWFkZXJzOyBp
KyspIHsKLQkJaWYgKHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCBOVUxMLCByZWFkZXJfd29y
aywgJm8pICE9IDApIHsKLQkJCWFib3J0KCk7Ci0JCX0KLQl9Ci0KLQlja19lcG9jaF9lbmQoJnJl
Y29yZCwgJnNlY3Rpb24pOwotCi0JY2tfcHJfc3RvcmVfdWludCgmcnVuLCAwKTsKLQlpZiAocHRo
cmVhZF9qb2luKHRocmVhZHNbbnVtX3JlYWRlcnNdLCBOVUxMKSAhPSAwKSB7Ci0JCWFib3J0KCk7
Ci0JfQotCi0JLyogQWZ0ZXIgdGhlIGJhcnJpZXIsIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGRlc3Ry
b3llZCBhbmQgcmVhZGVycwotCSAqIHNob3VsZCByZXR1cm4uICovCi0JZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1fcmVhZGVyczsgaSsrKSB7Ci0JCWlmIChwdGhyZWFkX2pvaW4odGhyZWFkc1tpXSwg
TlVMTCkgIT0gMCkgewotCQkJYWJvcnQoKTsKLQkJfQotCX0KLQotCXRlYXJkb3duX3Rlc3QoKTsK
LQlyZXR1cm47Ci19Ci0KLWludAotbWFpbih2b2lkKQotewotCi0JdGVzdF9zaW1wbGVfcmVhZF9z
ZWN0aW9uKCk7Ci0JdGVzdF9uZXN0ZWRfcmVhZF9zZWN0aW9uKCk7Ci0JdGVzdF9zaW5nbGVfcmVh
ZGVyX3dpdGhfYmFycmllcl90aHJlYWQoKTsKLQl0ZXN0X211bHRpcGxlX3JlYWRlcnNfd2l0aF9i
YXJyaWVyX3RocmVhZCgpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19lcG9jaC92YWxpZGF0ZS9ja19l
cG9jaF9zZWN0aW9uXzIuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jl
c3Npb25zL2NrX2Vwb2NoL3ZhbGlkYXRlL2NrX2Vwb2NoX3NlY3Rpb25fMi5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkYWY2NzM4NTZhMWRlNjUwMDg1MGZhMTk5YmFkZGY1MDAwMzc0
ODcyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2Vwb2NoL3ZhbGlkYXRl
L2NrX2Vwb2NoX3NlY3Rpb25fMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgMjAxMC0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0j
aW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQu
aD4KLSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNrX3ByLmg+Ci0jaW5jbHVkZSA8c3Rk
Ym9vbC5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1
ZGUgPGNrX2Vwb2NoLmg+Ci0jaW5jbHVkZSA8Y2tfc3RhY2suaD4KLQotI2luY2x1ZGUgIi4uLy4u
L2NvbW1vbi5oIgotCi1zdGF0aWMgdW5zaWduZWQgaW50IG5fcmQ7Ci1zdGF0aWMgdW5zaWduZWQg
aW50IG5fd3I7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG5fdGhyZWFkczsKLXN0YXRpYyB1bnNpZ25l
ZCBpbnQgYmFycmllcjsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbGVhdmU7Ci0KLSNpZm5kZWYgUEFJ
UlNfUwotI2RlZmluZSBQQUlSU19TIDEwMDAwCi0jZW5kaWYKLQotI2lmbmRlZiBDS19FUE9DSF9U
X0RFUFRICi0jZGVmaW5lIENLX0VQT0NIX1RfREVQVEgJOAotI2VuZGlmCi0KLXN0YXRpYyBja19l
cG9jaF90IGVwb2NoOwotc3RhdGljIHN0cnVjdCBhZmZpbml0eSBhOwotCi1zdGF0aWMgdm9pZCAq
Ci1yZWFkX3RocmVhZCh2b2lkICp1bnVzZWQgQ0tfQ0NfVU5VU0VEKQotewotCWNrX2Vwb2NoX3Jl
Y29yZF90ICpyZWNvcmQ7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGkgPSAwOwotCi0JcmVjb3JkID0g
bWFsbG9jKHNpemVvZiAqcmVjb3JkKTsKLQlhc3NlcnQocmVjb3JkICE9IE5VTEwpOwotCWNrX2Vw
b2NoX3JlZ2lzdGVyKCZlcG9jaCwgcmVjb3JkLCBOVUxMKTsKLQotCWlmIChhZmZfaXRlcmF0ZSgm
YSkpIHsKLQkJcGVycm9yKCJFUlJPUjogZmFpbGVkIHRvIGFmZmluZSB0aHJlYWQiKTsKLQkJZXhp
dChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWNrX3ByX2luY191aW50KCZiYXJyaWVyKTsKLQl3aGls
ZSAoY2tfcHJfbG9hZF91aW50KCZiYXJyaWVyKSA8IG5fdGhyZWFkcyk7Ci0KLQlmb3IgKDs7KSB7
Ci0JCWNrX2Vwb2NoX3NlY3Rpb25fdCBzZWN0aW9uWzJdOwotCQlja19lcG9jaF9zZWN0aW9uX3Qg
anVua1tDS19FUE9DSF9UX0RFUFRIXTsKLQkJdW5zaWduZWQgaW50IGo7Ci0KLQkJY2tfZXBvY2hf
YmVnaW4ocmVjb3JkLCAmc2VjdGlvblswXSk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IENLX0VQT0NI
X1RfREVQVEg7IGorKykKLQkJCWNrX2Vwb2NoX2JlZ2luKHJlY29yZCwgJmp1bmtbal0pOwotCQlm
b3IgKGogPSAwOyBqIDwgQ0tfRVBPQ0hfVF9ERVBUSDsgaisrKQotCQkJY2tfZXBvY2hfZW5kKHJl
Y29yZCwgJmp1bmtbal0pOwotCi0JCWlmIChpID4gMCkKLQkJCWNrX2Vwb2NoX2VuZChyZWNvcmQs
ICZzZWN0aW9uWzFdKTsKLQotCQkvKiBXYWl0IGZvciB0aGUgbmV4dCBzeW5jaHJvbml6ZSBvcGVy
YXRpb24uICovCi0JCXdoaWxlICgoY2tfcHJfbG9hZF91aW50KCZlcG9jaC5lcG9jaCkgJiAxKSA9
PQotCQkgICAgc2VjdGlvblswXS5idWNrZXQpIHsKLQkJCWkrKzsKLQotCQkJaWYgKCEoaSAlIDEw
MDAwMDAwKSkgewotCQkJCWZwcmludGYoc3RkZXJyLCAiJXUgJXUgJXVcbiIsCi0JCQkJICAgIGNr
X3ByX2xvYWRfdWludCgmZXBvY2guZXBvY2gpLAotCQkJCSAgICBzZWN0aW9uWzBdLmJ1Y2tldCwg
cmVjb3JkLT5lcG9jaCk7Ci0JCQl9Ci0KLQkJCXdoaWxlICgoY2tfcHJfbG9hZF91aW50KCZlcG9j
aC5lcG9jaCkgJiAxKSA9PQotCQkJICAgIHNlY3Rpb25bMF0uYnVja2V0KSB7Ci0JCQkJaWYgKGNr
X3ByX2xvYWRfdWludCgmbGVhdmUpID09IDEpCi0JCQkJCWJyZWFrOwotCi0JCQkJY2tfcHJfc3Rh
bGwoKTsKLQkJCX0KLQkJfQotCi0JCWNrX2Vwb2NoX2JlZ2luKHJlY29yZCwgJnNlY3Rpb25bMV0p
OwotCi0JCWFzc2VydChzZWN0aW9uWzBdLmJ1Y2tldCAhPSBzZWN0aW9uWzFdLmJ1Y2tldCk7Ci0J
CWNrX2Vwb2NoX2VuZChyZWNvcmQsICZzZWN0aW9uWzBdKTsKLQotCQlhc3NlcnQoY2tfcHJfbG9h
ZF91aW50KCZyZWNvcmQtPmFjdGl2ZSkgPiAwKTsKLQotCQlpZiAoY2tfcHJfbG9hZF91aW50KCZs
ZWF2ZSkgPT0gMSkgewotCQkJY2tfZXBvY2hfZW5kKHJlY29yZCwgJnNlY3Rpb25bMV0pOwotCQkJ
YnJlYWs7Ci0JCX0KLQotCQlpKys7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2
b2lkICoKLXdyaXRlX3RocmVhZCh2b2lkICp1bnVzZWQgQ0tfQ0NfVU5VU0VEKQotewotCWNrX2Vw
b2NoX3JlY29yZF90IHJlY29yZDsKLQl1bnNpZ25lZCBsb25nIGl0ZXJhdGlvbnMgPSAwOwotCi0J
Y2tfZXBvY2hfcmVnaXN0ZXIoJmVwb2NoLCAmcmVjb3JkLCBOVUxMKTsKLQotCWlmIChhZmZfaXRl
cmF0ZSgmYSkpIHsKLQkJcGVycm9yKCJFUlJPUjogZmFpbGVkIHRvIGFmZmluZSB0aHJlYWQiKTsK
LQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWNrX3ByX2luY191aW50KCZiYXJyaWVyKTsK
LQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZiYXJyaWVyKSA8IG5fdGhyZWFkcyk7Ci0KLQlmb3Ig
KDs7KSB7Ci0JCWlmICghKGl0ZXJhdGlvbnMgJSAxMDQ4NTc1KSkKLQkJCWZwcmludGYoc3RkZXJy
LCAiLiIpOwotCi0JCWNrX2Vwb2NoX3N5bmNocm9uaXplKCZyZWNvcmQpOwotCQlpdGVyYXRpb25z
Kys7Ci0KLQkJaWYgKGNrX3ByX2xvYWRfdWludCgmbGVhdmUpID09IDEpCi0JCQlicmVhazsKLQl9
Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiVsdSBpdGVyYXRpb25zXG4iLCBpdGVyYXRpb25zKTsKLQly
ZXR1cm4gTlVMTDsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0J
dW5zaWduZWQgaW50IGk7Ci0JcHRocmVhZF90ICp0aHJlYWRzOwotCi0JaWYgKGFyZ2MgIT0gNCkg
ewotCQlja19lcnJvcigiVXNhZ2U6IHN0YWNrIDwjcmVhZGVycz4gPCN3cml0ZXJzPiA8YWZmaW5p
dHkgZGVsdGE+XG4iKTsKLQl9Ci0KLQluX3JkID0gYXRvaShhcmd2WzFdKTsKLQluX3dyID0gYXRv
aShhcmd2WzJdKTsKLQluX3RocmVhZHMgPSBuX3dyICsgbl9yZDsKLQotCWEuZGVsdGEgPSBhdG9p
KGFyZ3ZbM10pOwotCWEucmVxdWVzdCA9IDA7Ci0KLQl0aHJlYWRzID0gbWFsbG9jKHNpemVvZihw
dGhyZWFkX3QpICogbl90aHJlYWRzKTsKLQlja19lcG9jaF9pbml0KCZlcG9jaCk7Ci0KLQlmb3Ig
KGkgPSAwOyBpIDwgbl9yZDsgaSsrKQotCQlwdGhyZWFkX2NyZWF0ZSh0aHJlYWRzICsgaSwgTlVM
TCwgcmVhZF90aHJlYWQsIE5VTEwpOwotCi0JZG8gewotCQlwdGhyZWFkX2NyZWF0ZSh0aHJlYWRz
ICsgaSwgTlVMTCwgd3JpdGVfdGhyZWFkLCBOVUxMKTsKLQl9IHdoaWxlICgrK2kgPCBuX3dyICsg
bl9yZCk7Ci0KLQljb21tb25fc2xlZXAoMTApOwotCWNrX3ByX3N0b3JlX3VpbnQoJmxlYXZlLCAx
KTsKLQotCWZvciAoaSA9IDA7IGkgPCBuX3RocmVhZHM7IGkrKykKLQkJcHRocmVhZF9qb2luKHRo
cmVhZHNbaV0sIE5VTEwpOwotCi0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2Vwb2NoL3ZhbGlkYXRlL2Nr
X2Vwb2NoX3N5bmNocm9uaXplLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9y
ZWdyZXNzaW9ucy9ja19lcG9jaC92YWxpZGF0ZS9ja19lcG9jaF9zeW5jaHJvbml6ZS5jCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjc4MzM0ZWFlMTViZjA0MDEyZTZkNTU3M2MwNTgx
Mzg5NmVjYTkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2Vwb2NoL3Zh
bGlkYXRlL2NrX2Vwb2NoX3N5bmNocm9uaXplLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICog
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlw
ZXMuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVk
ZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0j
aW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotI2luY2x1ZGUgPGNr
X2JhY2tvZmYuaD4KLSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNrX3ByLmg+Ci0jaW5j
bHVkZSA8c3RkYm9vbC5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0cmluZy5o
PgotI2luY2x1ZGUgPGNrX2Vwb2NoLmg+Ci0jaW5jbHVkZSA8Y2tfc3RhY2suaD4KLQotI2luY2x1
ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi1zdGF0aWMgdW5zaWduZWQgaW50IG5fcmQ7Ci1zdGF0aWMg
dW5zaWduZWQgaW50IG5fd3I7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG5fdGhyZWFkczsKLXN0YXRp
YyB1bnNpZ25lZCBpbnQgYmFycmllcjsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZV9iYXJyaWVyOwot
c3RhdGljIHVuc2lnbmVkIGludCByZWFkZXJzOwotc3RhdGljIHVuc2lnbmVkIGludCB3cml0ZXJz
OwotCi0jaWZuZGVmIFBBSVJTX1MKLSNkZWZpbmUgUEFJUlNfUyAxMDAwMAotI2VuZGlmCi0KLSNp
Zm5kZWYgSVRFUkFURV9TCi0jZGVmaW5lIElURVJBVEVfUyAyMAotI2VuZGlmCi0KLXN0cnVjdCBu
b2RlIHsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0JY2tfc3RhY2tfZW50cnlfdCBzdGFja19lbnRy
eTsKLQlja19lcG9jaF9lbnRyeV90IGVwb2NoX2VudHJ5OwotfTsKLXN0YXRpYyBja19zdGFja190
IHN0YWNrID0gQ0tfU1RBQ0tfSU5JVElBTElaRVI7Ci1zdGF0aWMgY2tfZXBvY2hfdCBzdGFja19l
cG9jaDsKLUNLX1NUQUNLX0NPTlRBSU5FUihzdHJ1Y3Qgbm9kZSwgc3RhY2tfZW50cnksIHN0YWNr
X2NvbnRhaW5lcikKLUNLX0VQT0NIX0NPTlRBSU5FUihzdHJ1Y3Qgbm9kZSwgZXBvY2hfZW50cnks
IGVwb2NoX2NvbnRhaW5lcikKLXN0YXRpYyBzdHJ1Y3QgYWZmaW5pdHkgYTsKLXN0YXRpYyBjb25z
dCBjaGFyIGFuaW1hdGVbXSA9ICItL3xcXCI7Ci0KLXN0YXRpYyB2b2lkCi1kZXN0cnVjdG9yKGNr
X2Vwb2NoX2VudHJ5X3QgKnApCi17Ci0Jc3RydWN0IG5vZGUgKmUgPSBlcG9jaF9jb250YWluZXIo
cCk7Ci0KLQlmcmVlKGUpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgKgotcmVhZF90aHJl
YWQodm9pZCAqdW51c2VkIENLX0NDX1VOVVNFRCkKLXsKLQl1bnNpZ25lZCBpbnQgajsKLQlja19l
cG9jaF9yZWNvcmRfdCByZWNvcmQgQ0tfQ0NfQ0FDSEVMSU5FOwotCWNrX3N0YWNrX2VudHJ5X3Qg
KmN1cnNvcjsKLQlja19zdGFja19lbnRyeV90ICpuOwotCXVuc2lnbmVkIGludCBpOwotCi0JY2tf
ZXBvY2hfcmVnaXN0ZXIoJnN0YWNrX2Vwb2NoLCAmcmVjb3JkLCBOVUxMKTsKLQotCWlmIChhZmZf
aXRlcmF0ZSgmYSkpIHsKLQkJcGVycm9yKCJFUlJPUjogZmFpbGVkIHRvIGFmZmluZSB0aHJlYWQi
KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWNrX3ByX2luY191aW50KCZiYXJyaWVy
KTsKLQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZiYXJyaWVyKSA8IG5fdGhyZWFkcyk7Ci0KLQl3
aGlsZSAoQ0tfU1RBQ0tfSVNFTVBUWSgmc3RhY2spID09IHRydWUpIHsKLQkJaWYgKGNrX3ByX2xv
YWRfdWludCgmcmVhZGVycykgIT0gMCkKLQkJCWJyZWFrOwotCi0JCWNrX3ByX3N0YWxsKCk7Ci0J
fQotCi0JaiA9IDA7Ci0JZm9yICg7OykgewotCQlpID0gMDsKLQotCQlja19lcG9jaF9iZWdpbigm
cmVjb3JkLCBOVUxMKTsKLQkJQ0tfU1RBQ0tfRk9SRUFDSCgmc3RhY2ssIGN1cnNvcikgewotCQkJ
aWYgKGN1cnNvciA9PSBOVUxMKQotCQkJCWNvbnRpbnVlOwotCi0JCQluID0gQ0tfU1RBQ0tfTkVY
VChjdXJzb3IpOwotCQkJaiArPSBja19wcl9sb2FkX3B0cigmbikgIT0gTlVMTDsKLQotCQkJaWYg
KGkrKyA+IDQwOTgpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJY2tfZXBvY2hfZW5kKCZyZWNvcmQsIE5V
TEwpOwotCi0JCWlmIChqICE9IDAgJiYgY2tfcHJfbG9hZF91aW50KCZyZWFkZXJzKSA9PSAwKQot
CQkJY2tfcHJfc3RvcmVfdWludCgmcmVhZGVycywgMSk7Ci0KLQkJaWYgKENLX1NUQUNLX0lTRU1Q
VFkoJnN0YWNrKSA9PSB0cnVlICYmCi0JCSAgICBja19wcl9sb2FkX3VpbnQoJmVfYmFycmllcikg
IT0gMCkKLQkJCWJyZWFrOwotCX0KLQotCWNrX3ByX2luY191aW50KCZlX2JhcnJpZXIpOwotCXdo
aWxlIChja19wcl9sb2FkX3VpbnQoJmVfYmFycmllcikgPCBuX3RocmVhZHMpOwotCi0JZnByaW50
ZihzdGRlcnIsICJbUl0gT2JzZXJ2ZWQgZW50cmllczogJXVcbiIsIGopOwotCXJldHVybiAoTlVM
TCk7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLXdyaXRlX3RocmVhZCh2b2lkICp1bnVzZWQgQ0tfQ0Nf
VU5VU0VEKQotewotCXN0cnVjdCBub2RlICoqZW50cnksICplOwotCXVuc2lnbmVkIGludCBpLCBq
LCB0aWQ7Ci0JY2tfZXBvY2hfcmVjb3JkX3QgcmVjb3JkOwotCWNrX3N0YWNrX2VudHJ5X3QgKnM7
Ci0KLQlja19lcG9jaF9yZWdpc3Rlcigmc3RhY2tfZXBvY2gsICZyZWNvcmQsIE5VTEwpOwotCi0J
aWYgKGFmZl9pdGVyYXRlKCZhKSkgewotCQlwZXJyb3IoIkVSUk9SOiBmYWlsZWQgdG8gYWZmaW5l
IHRocmVhZCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JdGlkID0gY2tfcHJfZmFh
X3VpbnQoJndyaXRlcnMsIDEpOwotCWNrX3ByX2luY191aW50KCZiYXJyaWVyKTsKLQl3aGlsZSAo
Y2tfcHJfbG9hZF91aW50KCZiYXJyaWVyKSA8IG5fdGhyZWFkcyk7Ci0KLQllbnRyeSA9IG1hbGxv
YyhzaXplb2Yoc3RydWN0IG5vZGUgKikgKiBQQUlSU19TKTsKLQlpZiAoZW50cnkgPT0gTlVMTCkg
ewotCQlja19lcnJvcigiRmFpbGVkIGFsbG9jYXRpb24uXG4iKTsKLQl9Ci0KLQlmb3IgKGogPSAw
OyBqIDwgSVRFUkFURV9TOyBqKyspIHsKLQkJZm9yIChpID0gMDsgaSA8IFBBSVJTX1M7IGkrKykg
ewotCQkJZW50cnlbaV0gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7Ci0JCQlpZiAoZW50
cnkgPT0gTlVMTCkgewotCQkJCWNrX2Vycm9yKCJGYWlsZWQgaW5kaXZpZHVhbCBhbGxvY2F0aW9u
XG4iKTsKLQkJCX0KLQkJfQotCi0JCWZvciAoaSA9IDA7IGkgPCBQQUlSU19TOyBpKyspIHsKLQkJ
CWNrX3N0YWNrX3B1c2hfdXBtYygmc3RhY2ssICZlbnRyeVtpXS0+c3RhY2tfZW50cnkpOwotCQl9
Ci0KLQkJd2hpbGUgKGNrX3ByX2xvYWRfdWludCgmcmVhZGVycykgPT0gMCkKLQkJCWNrX3ByX3N0
YWxsKCk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IFBBSVJTX1M7IGkrKykgewotCQkJY2tfZXBvY2hf
YmVnaW4oJnJlY29yZCwgTlVMTCk7Ci0JCQlzID0gY2tfc3RhY2tfcG9wX3VwbWMoJnN0YWNrKTsK
LQkJCWUgPSBzdGFja19jb250YWluZXIocyk7Ci0JCQlja19lcG9jaF9lbmQoJnJlY29yZCwgTlVM
TCk7Ci0KLQkJCWlmIChpICYgMSkgewotCQkJCWNrX2Vwb2NoX3N5bmNocm9uaXplKCZyZWNvcmQp
OwotCQkJCWNrX2Vwb2NoX3JlY2xhaW0oJnJlY29yZCk7Ci0JCQkJY2tfZXBvY2hfY2FsbCgmcmVj
b3JkLCAmZS0+ZXBvY2hfZW50cnksIGRlc3RydWN0b3IpOwotCQkJfSBlbHNlIHsKLQkJCQlja19l
cG9jaF9iYXJyaWVyKCZyZWNvcmQpOwotCQkJCWRlc3RydWN0b3IoJmUtPmVwb2NoX2VudHJ5KTsK
LQkJCX0KLQotCQkJaWYgKHRpZCA9PSAwICYmIChpICUgMTYzODQpID09IDApIHsKLQkJCQlmcHJp
bnRmKHN0ZGVyciwgIltXXSAlMi4yZjogJWNcbiIsCi0JCQkJICAgIChkb3VibGUpaiAvIElURVJB
VEVfUywgYW5pbWF0ZVtpICUgc3RybGVuKGFuaW1hdGUpXSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlj
a19lcG9jaF9zeW5jaHJvbml6ZSgmcmVjb3JkKTsKLQotCWlmICh0aWQgPT0gMCkgewotCQlmcHJp
bnRmKHN0ZGVyciwgIltXXSBQZWFrOiAldSAoJTIuMmYlJSlcbiAgICBSZWNsYW1hdGlvbnM6ICV1
XG5cbiIsCi0JCQlyZWNvcmQubl9wZWFrLAotCQkJKGRvdWJsZSlyZWNvcmQubl9wZWFrIC8gKChk
b3VibGUpUEFJUlNfUyAqIElURVJBVEVfUykgKiAxMDAsCi0JCQlyZWNvcmQubl9kaXNwYXRjaCk7
Ci0JfQotCi0JY2tfcHJfaW5jX3VpbnQoJmVfYmFycmllcik7Ci0Jd2hpbGUgKGNrX3ByX2xvYWRf
dWludCgmZV9iYXJyaWVyKSA8IG5fdGhyZWFkcyk7Ci0JcmV0dXJuIChOVUxMKTsKLX0KLQotaW50
Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JcHRo
cmVhZF90ICp0aHJlYWRzOwotCi0JaWYgKGFyZ2MgIT0gNCkgewotCQlja19lcnJvcigiVXNhZ2U6
IHN0YWNrIDwjcmVhZGVycz4gPCN3cml0ZXJzPiA8YWZmaW5pdHkgZGVsdGE+XG4iKTsKLQl9Ci0K
LQluX3JkID0gYXRvaShhcmd2WzFdKTsKLQluX3dyID0gYXRvaShhcmd2WzJdKTsKLQluX3RocmVh
ZHMgPSBuX3dyICsgbl9yZDsKLQotCWEuZGVsdGEgPSBhdG9pKGFyZ3ZbM10pOwotCWEucmVxdWVz
dCA9IDA7Ci0KLQl0aHJlYWRzID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbl90aHJlYWRz
KTsKLQlja19lcG9jaF9pbml0KCZzdGFja19lcG9jaCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbl9y
ZDsgaSsrKQotCQlwdGhyZWFkX2NyZWF0ZSh0aHJlYWRzICsgaSwgTlVMTCwgcmVhZF90aHJlYWQs
IE5VTEwpOwotCi0JZG8gewotCQlwdGhyZWFkX2NyZWF0ZSh0aHJlYWRzICsgaSwgTlVMTCwgd3Jp
dGVfdGhyZWFkLCBOVUxMKTsKLQl9IHdoaWxlICgrK2kgPCBuX3dyICsgbl9yZCk7Ci0KLQlmb3Ig
KGkgPSAwOyBpIDwgbl90aHJlYWRzOyBpKyspCi0JCXB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBO
VUxMKTsKLQotCXJldHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19lcG9jaC92YWxpZGF0ZS9ja19zdGFjay5jIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfZXBvY2gvdmFs
aWRhdGUvY2tfc3RhY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ0OTNlMTg4
N2I5YTgyMTliYjNkM2IwYmI3YjM2ZTUxZTIxNDczNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9y
ZWdyZXNzaW9ucy9ja19lcG9jaC92YWxpZGF0ZS9ja19zdGFjay5jCisrKyAvZGV2L251bGwKQEAg
LTEsMTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMC0yMDE1IFNhbXkgQWwgQmFocmEu
Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
LSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
Ci0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1
ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHN0ZGludC5o
PgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3Ry
aW5ncy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0KLSNp
bmNsdWRlIDxja19iYWNrb2ZmLmg+Ci0jaW5jbHVkZSA8Y2tfY2MuaD4KLSNpbmNsdWRlIDxja19w
ci5oPgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRl
IDxja19lcG9jaC5oPgotI2luY2x1ZGUgPGNrX3N0YWNrLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9j
b21tb24uaCIKLQotc3RhdGljIHVuc2lnbmVkIGludCBuX3RocmVhZHM7Ci1zdGF0aWMgdW5zaWdu
ZWQgaW50IGJhcnJpZXI7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGVfYmFycmllcjsKLQotI2lmbmRl
ZiBQQUlSUwotI2RlZmluZSBQQUlSUyA1MDAwMDAwCi0jZW5kaWYKLQotc3RydWN0IG5vZGUgewot
CXVuc2lnbmVkIGludCB2YWx1ZTsKLQlja19lcG9jaF9lbnRyeV90IGVwb2NoX2VudHJ5OwotCWNr
X3N0YWNrX2VudHJ5X3Qgc3RhY2tfZW50cnk7Ci19Owotc3RhdGljIGNrX3N0YWNrX3Qgc3RhY2sg
PSB7TlVMTCwgTlVMTH07Ci1zdGF0aWMgY2tfZXBvY2hfdCBzdGFja19lcG9jaDsKLUNLX1NUQUNL
X0NPTlRBSU5FUihzdHJ1Y3Qgbm9kZSwgc3RhY2tfZW50cnksIHN0YWNrX2NvbnRhaW5lcikKLUNL
X0VQT0NIX0NPTlRBSU5FUihzdHJ1Y3Qgbm9kZSwgZXBvY2hfZW50cnksIGVwb2NoX2NvbnRhaW5l
cikKLXN0YXRpYyBzdHJ1Y3QgYWZmaW5pdHkgYTsKLQotc3RhdGljIHZvaWQKLWRlc3RydWN0b3Io
Y2tfZXBvY2hfZW50cnlfdCAqcCkKLXsKLQlzdHJ1Y3Qgbm9kZSAqZSA9IGVwb2NoX2NvbnRhaW5l
cihwKTsKLQotCWZyZWUoZSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCAqCi10aHJlYWQo
dm9pZCAqdW51c2VkIENLX0NDX1VOVVNFRCkKLXsKLQlzdHJ1Y3Qgbm9kZSAqKmVudHJ5LCAqZTsK
LQlja19lcG9jaF9yZWNvcmRfdCByZWNvcmQ7Ci0JY2tfc3RhY2tfZW50cnlfdCAqczsKLQl1bnNp
Z25lZCBsb25nIHNtciA9IDA7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlja19lcG9jaF9yZWdpc3Rl
cigmc3RhY2tfZXBvY2gsICZyZWNvcmQsIE5VTEwpOwotCi0JaWYgKGFmZl9pdGVyYXRlKCZhKSkg
ewotCQlwZXJyb3IoIkVSUk9SOiBmYWlsZWQgdG8gYWZmaW5lIHRocmVhZCIpOwotCQlleGl0KEVY
SVRfRkFJTFVSRSk7Ci0JfQotCi0JZW50cnkgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlICop
ICogUEFJUlMpOwotCWlmIChlbnRyeSA9PSBOVUxMKSB7Ci0JCWNrX2Vycm9yKCJGYWlsZWQgYWxs
b2NhdGlvbi5cbiIpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBQQUlSUzsgaSsrKSB7Ci0JCWVu
dHJ5W2ldID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwotCQlpZiAoZW50cnkgPT0gTlVM
TCkgewotCQkJY2tfZXJyb3IoIkZhaWxlZCBpbmRpdmlkdWFsIGFsbG9jYXRpb25cbiIpOwotCQl9
Ci0JfQotCi0JY2tfcHJfaW5jX3VpbnQoJmJhcnJpZXIpOwotCXdoaWxlIChja19wcl9sb2FkX3Vp
bnQoJmJhcnJpZXIpIDwgbl90aHJlYWRzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBQQUlSUzsgaSsr
KSB7Ci0JCWNrX2Vwb2NoX2JlZ2luKCZyZWNvcmQsIE5VTEwpOwotCQlja19zdGFja19wdXNoX3Vw
bWMoJnN0YWNrLCAmZW50cnlbaV0tPnN0YWNrX2VudHJ5KTsKLQkJcyA9IGNrX3N0YWNrX3BvcF91
cG1jKCZzdGFjayk7Ci0JCWNrX2Vwb2NoX2VuZCgmcmVjb3JkLCBOVUxMKTsKLQotCQllID0gc3Rh
Y2tfY29udGFpbmVyKHMpOwotCQlja19lcG9jaF9jYWxsKCZyZWNvcmQsICZlLT5lcG9jaF9lbnRy
eSwgZGVzdHJ1Y3Rvcik7Ci0JCXNtciArPSBja19lcG9jaF9wb2xsKCZyZWNvcmQpID09IGZhbHNl
OwotCX0KLQotCWNrX3ByX2luY191aW50KCZlX2JhcnJpZXIpOwotCXdoaWxlIChja19wcl9sb2Fk
X3VpbnQoJmVfYmFycmllcikgPCBuX3RocmVhZHMpOwotCi0JZnByaW50ZihzdGRlcnIsICJEZWZl
cnJhbHM6ICVsdSAoJTIuMmYpXG4iLCBzbXIsIChkb3VibGUpc21yIC8gUEFJUlMpOwotCWZwcmlu
dGYoc3RkZXJyLCAiUGVhazogJXUgKCUyLjJmJSUpLCAldSBwZW5kaW5nXG5SZWNsYW1hdGlvbnM6
ICV1XG5cbiIsCi0JCQlyZWNvcmQubl9wZWFrLAotCQkJKGRvdWJsZSlyZWNvcmQubl9wZWFrIC8g
UEFJUlMgKiAxMDAsCi0JCQlyZWNvcmQubl9wZW5kaW5nLAotCQkJcmVjb3JkLm5fZGlzcGF0Y2gp
OwotCi0JY2tfZXBvY2hfYmFycmllcigmcmVjb3JkKTsKLQlja19wcl9pbmNfdWludCgmZV9iYXJy
aWVyKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZlX2JhcnJpZXIpIDwgKG5fdGhyZWFkcyA8
PCAxKSk7Ci0KLQlpZiAocmVjb3JkLm5fcGVuZGluZyAhPSAwKSB7Ci0JCWNrX2Vycm9yKCJFUlJP
UjogJXUgcGVuZGluZywgZXhwZWN0aW5nIG5vbmUuXG4iLAotCQkJCXJlY29yZC5uX3BlbmRpbmcp
OwotCX0KLQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAq
YXJndltdKQotewotCXVuc2lnbmVkIGludCBpOwotCXB0aHJlYWRfdCAqdGhyZWFkczsKLQotCWlm
IChhcmdjICE9IDMpIHsKLQkJY2tfZXJyb3IoIlVzYWdlOiBzdGFjayA8dGhyZWFkcz4gPGFmZmlu
aXR5IGRlbHRhPlxuIik7Ci0JfQotCi0Jbl90aHJlYWRzID0gYXRvaShhcmd2WzFdKTsKLQlhLmRl
bHRhID0gYXRvaShhcmd2WzJdKTsKLQlhLnJlcXVlc3QgPSAwOwotCi0JdGhyZWFkcyA9IG1hbGxv
YyhzaXplb2YocHRocmVhZF90KSAqIG5fdGhyZWFkcyk7Ci0KLQlja19lcG9jaF9pbml0KCZzdGFj
a19lcG9jaCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbl90aHJlYWRzOyBpKyspCi0JCXB0aHJlYWRf
Y3JlYXRlKHRocmVhZHMgKyBpLCBOVUxMLCB0aHJlYWQsIE5VTEwpOwotCi0JZm9yIChpID0gMDsg
aSA8IG5fdGhyZWFkczsgaSsrKQotCQlwdGhyZWFkX2pvaW4odGhyZWFkc1tpXSwgTlVMTCk7Ci0K
LQlyZXR1cm4gKDApOwotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvY2svcmVncmVzc2lvbnMvY2tfZXBvY2gvdmFsaWRhdGUvdG9ydHVyZS5jIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfZXBvY2gvdmFsaWRhdGUvdG9y
dHVyZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDlkNDEyMzZhODY1ZjVmNTMw
YjgyYzRhYTQwZjg4YmRjMWFmOThjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25z
L2NrX2Vwb2NoL3ZhbGlkYXRlL3RvcnR1cmUuYworKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8cHRocmVh
ZC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8
dW5pc3RkLmg+Ci0jaW5jbHVkZSA8Y2tfY2MuaD4KLSNpbmNsdWRlIDxja19wci5oPgotI2luY2x1
ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkYm9vbC5oPgotI2luY2x1ZGUgPHN0cmluZy5o
PgotI2luY2x1ZGUgPGNrX2Vwb2NoLmg+Ci0jaW5jbHVkZSA8Y2tfc3RhY2suaD4KLQotI2luY2x1
ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi1zdGF0aWMgdW5zaWduZWQgaW50IG5fcmQ7Ci1zdGF0aWMg
dW5zaWduZWQgaW50IG5fd3I7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG5fdGhyZWFkczsKLXN0YXRp
YyB1bnNpZ25lZCBpbnQgYmFycmllcjsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbGVhdmU7Ci1zdGF0
aWMgdW5zaWduZWQgaW50IGZpcnN0OwotCi1zdHJ1Y3QgewotCXVuc2lnbmVkIGludCB2YWx1ZTsK
LX0gdmFsaWQgQ0tfQ0NfQ0FDSEVMSU5FID0geyAxIH07Ci0KLXN0cnVjdCB7Ci0JdW5zaWduZWQg
aW50IHZhbHVlOwotfSBpbnZhbGlkIENLX0NDX0NBQ0hFTElORTsKLQotI2lmbmRlZiBQQUlSU19T
Ci0jZGVmaW5lIFBBSVJTX1MgMTAwMDAKLSNlbmRpZgotCi0jaWZuZGVmIENLX0VQT0NIX1RfREVQ
VEgKLSNkZWZpbmUgQ0tfRVBPQ0hfVF9ERVBUSAk4Ci0jZW5kaWYKLQotc3RhdGljIGNrX2Vwb2No
X3QgZXBvY2g7Ci1zdGF0aWMgc3RydWN0IGFmZmluaXR5IGE7Ci0KLXN0YXRpYyB2b2lkCi10ZXN0
KHN0cnVjdCBja19lcG9jaF9yZWNvcmQgKnJlY29yZCkKLXsKLQl1bnNpZ25lZCBpbnQgalszXTsK
LQl1bnNpZ25lZCBpbnQgYiwgYzsKLQljb25zdCB1bnNpZ25lZCBpbnQgciA9IDEwMDsKLQlzaXpl
X3QgaTsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJY2tfZXBvY2hfYmVnaW4ocmVj
b3JkLCBOVUxMKTsKLQkJYyA9IGNrX3ByX2xvYWRfdWludCgmaW52YWxpZC52YWx1ZSk7Ci0JCWNr
X3ByX2ZlbmNlX2xvYWQoKTsKLQkJYiA9IGNrX3ByX2xvYWRfdWludCgmdmFsaWQudmFsdWUpOwot
CQlja190ZXN0KGMgPiBiLCAiSW52YWxpZCB2YWx1ZTogJXUgPiAldVxuIiwgYywgYik7Ci0JCWNr
X2Vwb2NoX2VuZChyZWNvcmQsIE5VTEwpOwotCX0KLQotCWNrX2Vwb2NoX2JlZ2luKHJlY29yZCwg
TlVMTCk7Ci0KLQkvKiBUaGlzIGltcGxpZXMgbm8gZWFybHkgbG9hZCBvZiBlcG9jaCBvY2N1cnMu
ICovCi0JalswXSA9IHJlY29yZC0+ZXBvY2g7Ci0KLQotCS8qIFdlIHNob3VsZCBvYnNlcnZlIHVw
IHRvIG9uZSBlcG9jaCBtaWdyYXRpb24uICovCi0JZG8gewotCQlja19wcl9mZW5jZV9sb2FkKCk7
Ci0JCWpbMV0gPSBja19wcl9sb2FkX3VpbnQoJmVwb2NoLmVwb2NoKTsKLQotCQlpZiAoY2tfcHJf
bG9hZF91aW50KCZsZWF2ZSkgPT0gMSkgewotCQkJY2tfZXBvY2hfZW5kKHJlY29yZCwgTlVMTCk7
Ci0JCQlyZXR1cm47Ci0JCX0KLQl9IHdoaWxlIChqWzFdID09IGpbMF0pOwotCi0JLyogTm8gbW9y
ZSBlcG9jaCBtaWdyYXRpb25zIHNob3VsZCBvY2N1ciAqLwotCWZvciAoaSA9IDA7IGkgPCByOyBp
KyspIHsKLQkJY2tfcHJfZmVuY2Vfc3RyaWN0X2xvYWQoKTsKLQkJalsyXSA9IGNrX3ByX2xvYWRf
dWludCgmZXBvY2guZXBvY2gpOwotCi0JCWNrX3Rlc3QoalsyXSAhPSBqWzFdLCAiSW5jb25zaXN0
ZW5jeSBkZXRlY3RlZDogJXUgJXUgJXVcbiIsCi0JCSAgICBqWzBdLCBqWzFdLCBqWzJdKTsKLQl9
Ci0KLQlja19lcG9jaF9lbmQocmVjb3JkLCBOVUxMKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2
b2lkICoKLXJlYWRfdGhyZWFkKHZvaWQgKnVudXNlZCBDS19DQ19VTlVTRUQpCi17Ci0JY2tfZXBv
Y2hfcmVjb3JkX3QgKnJlY29yZDsKLQotCXJlY29yZCA9IG1hbGxvYyhzaXplb2YgKnJlY29yZCk7
Ci0JYXNzZXJ0KHJlY29yZCAhPSBOVUxMKTsKLQlja19lcG9jaF9yZWdpc3RlcigmZXBvY2gsIHJl
Y29yZCwgTlVMTCk7Ci0KLQlpZiAoYWZmX2l0ZXJhdGUoJmEpKSB7Ci0JCXBlcnJvcigiRVJST1I6
IGZhaWxlZCB0byBhZmZpbmUgdGhyZWFkIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0K
LQlja19wcl9pbmNfdWludCgmYmFycmllcik7Ci0Jd2hpbGUgKGNrX3ByX2xvYWRfdWludCgmYmFy
cmllcikgPCBuX3RocmVhZHMpOwotCi0JZG8gewotCQl0ZXN0KHJlY29yZCk7Ci0JCXRlc3QocmVj
b3JkKTsKLQkJdGVzdChyZWNvcmQpOwotCQl0ZXN0KHJlY29yZCk7Ci0JfSB3aGlsZSAoY2tfcHJf
bG9hZF91aW50KCZsZWF2ZSkgPT0gMCk7Ci0KLQlja19wcl9kZWNfdWludCgmbl9yZCk7Ci0KLQly
ZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgKgotd3JpdGVfdGhyZWFkKHZvaWQgKnVudXNl
ZCBDS19DQ19VTlVTRUQpCi17Ci0JY2tfZXBvY2hfcmVjb3JkX3QgKnJlY29yZDsKLQl1bnNpZ25l
ZCBsb25nIGl0ZXJhdGlvbnMgPSAwOwotCWJvb2wgYyA9IGNrX3ByX2ZhYV91aW50KCZmaXJzdCwg
MSk7Ci0JdWludDY0X3QgYWMgPSAwOwotCi0JcmVjb3JkID0gbWFsbG9jKHNpemVvZiAqcmVjb3Jk
KTsKLQlhc3NlcnQocmVjb3JkICE9IE5VTEwpOwotCWNrX2Vwb2NoX3JlZ2lzdGVyKCZlcG9jaCwg
cmVjb3JkLCBOVUxMKTsKLQotCWlmIChhZmZfaXRlcmF0ZSgmYSkpIHsKLQkJcGVycm9yKCJFUlJP
UjogZmFpbGVkIHRvIGFmZmluZSB0aHJlYWQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0K
LQotCWNrX3ByX2luY191aW50KCZiYXJyaWVyKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZi
YXJyaWVyKSA8IG5fdGhyZWFkcyk7Ci0KLSNkZWZpbmUgQ0tfRVBPQ0hfUwlkbyB7CQlcCi0JdWlu
dDY0X3QgX3MgPSByZHRzYygpOwkJXAotCWNrX2Vwb2NoX3N5bmNocm9uaXplKHJlY29yZCk7CVwK
LQlhYyArPSByZHRzYygpIC0gX3M7CQlcCi19IHdoaWxlICgwKQotCi0JZG8gewotCQkvKgotCQkg
KiBBIHRocmVhZCBzaG91bGQgbmV2ZXIgb2JzZXJ2ZSBpbnZhbGlkLnZhbHVlID4gdmFsaWQudmFs
dWUuCi0JCSAqIGluc2lkZSBhIHByb3RlY3RlZCBzZWN0aW9uLiBPbmx5Ci0JCSAqIGludmFsaWQu
dmFsdWUgPD0gdmFsaWQudmFsdWUgaXMgdmFsaWQuCi0JCSAqLwotCQlpZiAoIWMpIGNrX3ByX3N0
b3JlX3VpbnQoJnZhbGlkLnZhbHVlLCAxKTsKLQkJQ0tfRVBPQ0hfUzsKLQkJaWYgKCFjKSBja19w
cl9zdG9yZV91aW50KCZpbnZhbGlkLnZhbHVlLCAxKTsKLQotCQlja19wcl9mZW5jZV9zdG9yZSgp
OwotCQlpZiAoIWMpIGNrX3ByX3N0b3JlX3VpbnQoJnZhbGlkLnZhbHVlLCAyKTsKLQkJQ0tfRVBP
Q0hfUzsKLQkJaWYgKCFjKSBja19wcl9zdG9yZV91aW50KCZpbnZhbGlkLnZhbHVlLCAyKTsKLQot
CQlja19wcl9mZW5jZV9zdG9yZSgpOwotCQlpZiAoIWMpIGNrX3ByX3N0b3JlX3VpbnQoJnZhbGlk
LnZhbHVlLCAzKTsKLQkJQ0tfRVBPQ0hfUzsKLQkJaWYgKCFjKSBja19wcl9zdG9yZV91aW50KCZp
bnZhbGlkLnZhbHVlLCAzKTsKLQotCQlja19wcl9mZW5jZV9zdG9yZSgpOwotCQlpZiAoIWMpIGNr
X3ByX3N0b3JlX3VpbnQoJnZhbGlkLnZhbHVlLCA0KTsKLQkJQ0tfRVBPQ0hfUzsKLQkJaWYgKCFj
KSBja19wcl9zdG9yZV91aW50KCZpbnZhbGlkLnZhbHVlLCA0KTsKLQotCQlDS19FUE9DSF9TOwot
CQlpZiAoIWMpIGNrX3ByX3N0b3JlX3VpbnQoJmludmFsaWQudmFsdWUsIDApOwotCQlDS19FUE9D
SF9TOwotCi0JCWl0ZXJhdGlvbnMgKz0gNjsKLQl9IHdoaWxlIChja19wcl9sb2FkX3VpbnQoJmxl
YXZlKSA9PSAwICYmCi0JCSBja19wcl9sb2FkX3VpbnQoJm5fcmQpID4gMCk7Ci0KLQlmcHJpbnRm
KHN0ZGVyciwgIiVsdSBpdGVyYXRpb25zXG4iLCBpdGVyYXRpb25zKTsKLQlmcHJpbnRmKHN0ZGVy
ciwgIiUiIFBSSXU2NCAiIGF2ZXJhZ2UgbGF0ZW5jeVxuIiwgYWMgLyBpdGVyYXRpb25zKTsKLQly
ZXR1cm4gTlVMTDsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0J
dW5zaWduZWQgaW50IGk7Ci0JcHRocmVhZF90ICp0aHJlYWRzOwotCi0JaWYgKGFyZ2MgIT0gNCkg
ewotCQlja19lcnJvcigiVXNhZ2U6IHN0YWNrIDwjcmVhZGVycz4gPCN3cml0ZXJzPiA8YWZmaW5p
dHkgZGVsdGE+XG4iKTsKLQl9Ci0KLQluX3JkID0gYXRvaShhcmd2WzFdKTsKLQluX3dyID0gYXRv
aShhcmd2WzJdKTsKLQluX3RocmVhZHMgPSBuX3dyICsgbl9yZDsKLQotCWEuZGVsdGEgPSBhdG9p
KGFyZ3ZbM10pOwotCWEucmVxdWVzdCA9IDA7Ci0KLQl0aHJlYWRzID0gbWFsbG9jKHNpemVvZihw
dGhyZWFkX3QpICogbl90aHJlYWRzKTsKLQlja19lcG9jaF9pbml0KCZlcG9jaCk7Ci0KLQlmb3Ig
KGkgPSAwOyBpIDwgbl9yZDsgaSsrKQotCQlwdGhyZWFkX2NyZWF0ZSh0aHJlYWRzICsgaSwgTlVM
TCwgcmVhZF90aHJlYWQsIE5VTEwpOwotCi0JZG8gewotCQlwdGhyZWFkX2NyZWF0ZSh0aHJlYWRz
ICsgaSwgTlVMTCwgd3JpdGVfdGhyZWFkLCBOVUxMKTsKLQl9IHdoaWxlICgrK2kgPCBuX3dyICsg
bl9yZCk7Ci0KLQljb21tb25fc2xlZXAoMzApOwotCWNrX3ByX3N0b3JlX3VpbnQoJmxlYXZlLCAx
KTsKLQotCWZvciAoaSA9IDA7IGkgPCBuX3RocmVhZHM7IGkrKykKLQkJcHRocmVhZF9qb2luKHRo
cmVhZHNbaV0sIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19maWZvL2JlbmNobWFyay9NYWtl
ZmlsZSBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2Zp
Zm8vYmVuY2htYXJrL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTJk
ZjJhM2E4YTVmZmFhMmQ3OWM3NjQ0YzBiZWRhZmRjYzIzNTU4Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2NrL3JlZ3Jlc3Npb25zL2NrX2ZpZm8vYmVuY2htYXJrL01ha2VmaWxlCisrKyAvZGV2L251bGwK
QEAgLTEsMTQgKzAsMCBAQAotLlBIT05ZOiBjbGVhbiBkaXN0cmlidXRpb24KLQotT0JKRUNUUz1s
YXRlbmN5Ci0KLWFsbDogJChPQkpFQ1RTKQotCi1sYXRlbmN5OiBsYXRlbmN5LmMKLQkkKENDKSAk
KENGTEFHUykgLW8gbGF0ZW5jeSBsYXRlbmN5LmMKLQotY2xlYW46Ci0Jcm0gLXJmICp+ICoubyAq
LmRTWU0gKi5leGUgJChPQkpFQ1RTKQotCi1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Np
b25zLmJ1aWxkCi1DRkxBR1MrPSQoUFRIUkVBRF9DRkxBR1MpIC1EX0dOVV9TT1VSQ0UKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2Zp
Zm8vYmVuY2htYXJrL2xhdGVuY3kuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L3JlZ3Jlc3Npb25zL2NrX2ZpZm8vYmVuY2htYXJrL2xhdGVuY3kuYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjY3NDUyZjgwNjNlNWFjNjU4YWY0MGUyMmE2NWRlOTU5NjY3MDBiYi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19maWZvL2JlbmNobWFyay9sYXRl
bmN5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAy
MDExLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgPGNrX2ZpZm8uaD4KLSNpbmNsdWRlIDxja19zcGlubG9jay5oPgotI2luY2x1ZGUgPGlu
dHR5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2lu
Y2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi0jaWZuZGVmIEVOVFJJRVMKLSNkZWZpbmUgRU5UUklF
UyA0MDk2Ci0jZW5kaWYKLQotI2lmbmRlZiBTVEVQUwotI2RlZmluZSBTVEVQUyA0MDAwMAotI2Vu
ZGlmCi0KLWludAotbWFpbih2b2lkKQotewotCWNrX3NwaW5sb2NrX2Zhc190IG11dGV4ID0gQ0tf
U1BJTkxPQ0tfRkFTX0lOSVRJQUxJWkVSOwotCXZvaWQgKnI7Ci0JdWludDY0X3QgcywgZSwgYTsK
LQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgajsKLQotI2lmICAgZGVmaW5lZChDS19G
X0ZJRk9fU1BTQykKLQlja19maWZvX3Nwc2NfdCBzcHNjX2ZpZm87Ci0JY2tfZmlmb19zcHNjX2Vu
dHJ5X3Qgc3BzY19lbnRyeVtFTlRSSUVTXTsKLQlja19maWZvX3Nwc2NfZW50cnlfdCBzcHNjX3N0
dWI7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ0tfRl9GSUZPX01QTUMpCi0JY2tfZmlmb19tcG1j
X3QgbXBtY19maWZvOwotCWNrX2ZpZm9fbXBtY19lbnRyeV90IG1wbWNfZW50cnlbRU5UUklFU107
Ci0JY2tfZmlmb19tcG1jX2VudHJ5X3QgbXBtY19zdHViOwotCWNrX2ZpZm9fbXBtY19lbnRyeV90
ICpnYXJiYWdlOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX0ZJRk9fU1BTQwotCWEgPSAwOwotCWZv
ciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0JCWNrX2ZpZm9fc3BzY19pbml0KCZzcHNjX2Zp
Zm8sICZzcHNjX3N0dWIpOwotCi0JCXMgPSByZHRzYygpOwotCQlmb3IgKGogPSAwOyBqIDwgRU5U
UklFUzsgaisrKSB7Ci0JCQlja19zcGlubG9ja19mYXNfbG9jaygmbXV0ZXgpOwotCQkJY2tfZmlm
b19zcHNjX2VucXVldWUoJnNwc2NfZmlmbywgc3BzY19lbnRyeSArIGosIE5VTEwpOwotCQkJY2tf
c3BpbmxvY2tfZmFzX3VubG9jaygmbXV0ZXgpOwotCQl9Ci0JCWUgPSByZHRzYygpOwotCi0JCWEg
Kz0gZSAtIHM7Ci0JfQotCXByaW50ZigiICAgIHNwaW5sb2NrX2VucXVldWU6ICUxNiIgUFJJdTY0
ICJcbiIsIGEgLyBTVEVQUyAvIChzaXplb2Yoc3BzY19lbnRyeSkgLyBzaXplb2YoKnNwc2NfZW50
cnkpKSk7Ci0KLQlhID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19m
aWZvX3Nwc2NfaW5pdCgmc3BzY19maWZvLCAmc3BzY19zdHViKTsKLQkJZm9yIChqID0gMDsgaiA8
IEVOVFJJRVM7IGorKykKLQkJCWNrX2ZpZm9fc3BzY19lbnF1ZXVlKCZzcHNjX2ZpZm8sIHNwc2Nf
ZW50cnkgKyBqLCBOVUxMKTsKLQotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChqID0gMDsgaiA8IEVO
VFJJRVM7IGorKykgewotCQkJY2tfc3BpbmxvY2tfZmFzX2xvY2soJm11dGV4KTsKLQkJCWNrX2Zp
Zm9fc3BzY19kZXF1ZXVlKCZzcHNjX2ZpZm8sICZyKTsKLQkJCWNrX3NwaW5sb2NrX2Zhc191bmxv
Y2soJm11dGV4KTsKLQkJfQotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9Ci0JcHJp
bnRmKCIgICAgc3BpbmxvY2tfZGVxdWV1ZTogJTE2IiBQUkl1NjQgIlxuIiwgYSAvIFNURVBTIC8g
KHNpemVvZihzcHNjX2VudHJ5KSAvIHNpemVvZigqc3BzY19lbnRyeSkpKTsKLQotCWEgPSAwOwot
CWZvciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0JCWNrX2ZpZm9fc3BzY19pbml0KCZzcHNj
X2ZpZm8sICZzcHNjX3N0dWIpOwotCi0JCXMgPSByZHRzYygpOwotCQlmb3IgKGogPSAwOyBqIDwg
RU5UUklFUzsgaisrKQotCQkJY2tfZmlmb19zcHNjX2VucXVldWUoJnNwc2NfZmlmbywgc3BzY19l
bnRyeSArIGosIE5VTEwpOwotCQllID0gcmR0c2MoKTsKLQotCQlhICs9IGUgLSBzOwotCX0KLQlw
cmludGYoImNrX2ZpZm9fc3BzY19lbnF1ZXVlOiAlMTYiIFBSSXU2NCAiXG4iLCBhIC8gU1RFUFMg
LyAoc2l6ZW9mKHNwc2NfZW50cnkpIC8gc2l6ZW9mKCpzcHNjX2VudHJ5KSkpOwotCi0JYSA9IDA7
Ci0JZm9yIChpID0gMDsgaSA8IFNURVBTOyBpKyspIHsKLQkJY2tfZmlmb19zcHNjX2luaXQoJnNw
c2NfZmlmbywgJnNwc2Nfc3R1Yik7Ci0JCWZvciAoaiA9IDA7IGogPCBFTlRSSUVTOyBqKyspCi0J
CQlja19maWZvX3Nwc2NfZW5xdWV1ZSgmc3BzY19maWZvLCBzcHNjX2VudHJ5ICsgaiwgTlVMTCk7
Ci0KLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaiA9IDA7IGogPCBFTlRSSUVTOyBqKyspCi0JCQlj
a19maWZvX3Nwc2NfZGVxdWV1ZSgmc3BzY19maWZvLCAmcik7Ci0JCWUgPSByZHRzYygpOwotCQlh
ICs9IGUgLSBzOwotCX0KLQlwcmludGYoImNrX2ZpZm9fc3BzY19kZXF1ZXVlOiAlMTYiIFBSSXU2
NCAiXG4iLCBhIC8gU1RFUFMgLyAoc2l6ZW9mKHNwc2NfZW50cnkpIC8gc2l6ZW9mKCpzcHNjX2Vu
dHJ5KSkpOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX0ZJRk9fTVBNQwotCWEgPSAwOwotCWZvciAo
aSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0JCWNrX2ZpZm9fbXBtY19pbml0KCZtcG1jX2ZpZm8s
ICZtcG1jX3N0dWIpOwotCi0JCXMgPSByZHRzYygpOwotCQlmb3IgKGogPSAwOyBqIDwgRU5UUklF
UzsgaisrKQotCQkJY2tfZmlmb19tcG1jX2VucXVldWUoJm1wbWNfZmlmbywgbXBtY19lbnRyeSAr
IGosIE5VTEwpOwotCQllID0gcmR0c2MoKTsKLQotCQlhICs9IGUgLSBzOwotCX0KLQlwcmludGYo
ImNrX2ZpZm9fbXBtY19lbnF1ZXVlOiAlMTYiIFBSSXU2NCAiXG4iLCBhIC8gU1RFUFMgLyAoc2l6
ZW9mKG1wbWNfZW50cnkpIC8gc2l6ZW9mKCptcG1jX2VudHJ5KSkpOwotCi0JYSA9IDA7Ci0JZm9y
IChpID0gMDsgaSA8IFNURVBTOyBpKyspIHsKLQkJY2tfZmlmb19tcG1jX2luaXQoJm1wbWNfZmlm
bywgJm1wbWNfc3R1Yik7Ci0JCWZvciAoaiA9IDA7IGogPCBFTlRSSUVTOyBqKyspCi0JCQlja19m
aWZvX21wbWNfZW5xdWV1ZSgmbXBtY19maWZvLCBtcG1jX2VudHJ5ICsgaiwgTlVMTCk7Ci0KLQkJ
cyA9IHJkdHNjKCk7Ci0JCWZvciAoaiA9IDA7IGogPCBFTlRSSUVTOyBqKyspCi0JCQlja19maWZv
X21wbWNfZGVxdWV1ZSgmbXBtY19maWZvLCAmciwgJmdhcmJhZ2UpOwotCQllID0gcmR0c2MoKTsK
LQkJYSArPSBlIC0gczsKLQl9Ci0JcHJpbnRmKCJja19maWZvX21wbWNfZGVxdWV1ZTogJTE2IiBQ
Ukl1NjQgIlxuIiwgYSAvIFNURVBTIC8gKHNpemVvZihtcG1jX2VudHJ5KSAvIHNpemVvZigqbXBt
Y19lbnRyeSkpKTsKLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19maWZvL3ZhbGlkYXRlL01h
a2VmaWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tf
Zmlmby92YWxpZGF0ZS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJm
YzY5NmRkYjliOTk2ZTc0NDA1MTA5N2UwMTIxNGQ5MzIzNDJlZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19maWZvL3ZhbGlkYXRlL01ha2VmaWxlCisrKyAvZGV2L251bGwK
QEAgLTEsMjkgKzAsMCBAQAotLlBIT05ZOiBjaGVjayBjbGVhbiBkaXN0cmlidXRpb24KLQotT0JK
RUNUUz1ja19maWZvX3Nwc2MgY2tfZmlmb19tcG1jIGNrX2ZpZm9fc3BzY19pdGVyYXRvciBja19m
aWZvX21wbWNfaXRlcmF0b3IKLQotYWxsOiAkKE9CSkVDVFMpCi0KLWNoZWNrOiBhbGwKLQkuL2Nr
X2ZpZm9fc3BzYyAkKENPUkVTKSAxIDY0MDAwCi0JLi9ja19maWZvX21wbWMgJChDT1JFUykgMSAx
NjAwMAotCS4vY2tfZmlmb19zcHNjX2l0ZXJhdG9yCi0JLi9ja19maWZvX21wbWNfaXRlcmF0b3IK
LQotY2tfZmlmb19zcHNjOiBja19maWZvX3Nwc2MuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX2ZpZm8u
aAotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBja19maWZvX3Nwc2MgY2tfZmlmb19zcHNjLmMKLQotY2tf
Zmlmb19tcG1jOiBja19maWZvX21wbWMuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX2ZpZm8uaAotCSQo
Q0MpICQoQ0ZMQUdTKSAtbyBja19maWZvX21wbWMgY2tfZmlmb19tcG1jLmMKLQotY2tfZmlmb19z
cHNjX2l0ZXJhdG9yOiBja19maWZvX3Nwc2NfaXRlcmF0b3IuYyAuLi8uLi8uLi9pbmNsdWRlL2Nr
X2ZpZm8uaAotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBja19maWZvX3Nwc2NfaXRlcmF0b3IgY2tfZmlm
b19zcHNjX2l0ZXJhdG9yLmMKLQotY2tfZmlmb19tcG1jX2l0ZXJhdG9yOiBja19maWZvX21wbWNf
aXRlcmF0b3IuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX2ZpZm8uaAotCSQoQ0MpICQoQ0ZMQUdTKSAt
byBja19maWZvX21wbWNfaXRlcmF0b3IgY2tfZmlmb19tcG1jX2l0ZXJhdG9yLmMKLQotY2xlYW46
Ci0Jcm0gLXJmICouZFNZTSAqLmV4ZSAqfiAqLm8gJChPQkpFQ1RTKQotCi1pbmNsdWRlIC4uLy4u
Ly4uL2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxkCi1DRkxBR1MrPSQoUFRIUkVBRF9DRkxBR1MpIC1E
X0dOVV9TT1VSQ0UKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L3JlZ3Jlc3Npb25zL2NrX2ZpZm8vdmFsaWRhdGUvY2tfZmlmb19tcG1jLmMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19maWZvL3ZhbGlkYXRlL2NrX2Zp
Zm9fbXBtYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWViMmY0ZDhlNTdkNTJk
ZDkwNTdmNTY5N2M2ODFkMjc1OGMyMjE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Np
b25zL2NrX2ZpZm8vdmFsaWRhdGUvY2tfZmlmb19tcG1jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwx
NjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0g
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUg
PHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2lu
Y2x1ZGUgPGNrX2ZpZm8uaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi0jaWZkZWYg
Q0tfRl9GSUZPX01QTUMKLSNpZm5kZWYgSVRFUkFUSU9OUwotI2RlZmluZSBJVEVSQVRJT05TIDEy
OAotI2VuZGlmCi0KLXN0cnVjdCBjb250ZXh0IHsKLQl1bnNpZ25lZCBpbnQgdGlkOwotCXVuc2ln
bmVkIGludCBwcmV2aW91czsKLQl1bnNpZ25lZCBpbnQgbmV4dDsKLX07Ci0KLXN0cnVjdCBlbnRy
eSB7Ci0JaW50IHRpZDsKLQlpbnQgdmFsdWU7Ci19OwotCi1zdGF0aWMgaW50IG50aHI7Ci0KLSNp
ZmRlZiBDS19GX0ZJRk9fTVBNQwotc3RhdGljIGNrX2ZpZm9fbXBtY190IGZpZm8gQ0tfQ0NfQ0FD
SEVMSU5FOwotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgYWZmaW5pdHkgYTsKLXN0YXRpYyBpbnQg
c2l6ZTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYmFycmllcjsKLQotc3RhdGljIHZvaWQgKgotdGVz
dCh2b2lkICpjKQotewotI2lmZGVmIENLX0ZfRklGT19NUE1DCi0Jc3RydWN0IGNvbnRleHQgKmNv
bnRleHQgPSBjOwotCXN0cnVjdCBlbnRyeSAqZW50cnk7Ci0JY2tfZmlmb19tcG1jX2VudHJ5X3Qg
KmZpZm9fZW50cnksICpnYXJiYWdlOwotCWludCBpLCBqOwotCi0gICAgICAgIGlmIChhZmZfaXRl
cmF0ZSgmYSkpIHsKLSAgICAgICAgICAgICAgICBwZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWZm
aW5lIHRocmVhZCIpOwotICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAg
ICAgfQotCi0JY2tfcHJfaW5jX3VpbnQoJmJhcnJpZXIpOwotCXdoaWxlIChja19wcl9sb2FkX3Vp
bnQoJmJhcnJpZXIpIDwgKHVuc2lnbmVkIGludCludGhyKTsKLQotCWZvciAoaSA9IDA7IGkgPCBJ
VEVSQVRJT05TOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgewotCQkJZmlm
b19lbnRyeSA9IG1hbGxvYyhzaXplb2YoY2tfZmlmb19tcG1jX2VudHJ5X3QpKTsKLQkJCWVudHJ5
ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZW50cnkpKTsKLQkJCWVudHJ5LT50aWQgPSBjb250ZXh0
LT50aWQ7Ci0JCQlja19maWZvX21wbWNfZW5xdWV1ZSgmZmlmbywgZmlmb19lbnRyeSwgZW50cnkp
OwotCQkJaWYgKGNrX2ZpZm9fbXBtY19kZXF1ZXVlKCZmaWZvLCAmZW50cnksICZnYXJiYWdlKSA9
PSBmYWxzZSkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbJXVdIFF1ZXVlIHNob3VsZCBuZXZlciBi
ZSBlbXB0eS5cbiIsIGNvbnRleHQtPnRpZCk7Ci0JCQl9Ci0KLQkJCWlmIChlbnRyeS0+dGlkIDwg
MCB8fCBlbnRyeS0+dGlkID49IG50aHIpIHsKLQkJCQlja19lcnJvcigiRVJST1IgWyV1XSBJbmNv
cnJlY3QgdmFsdWUgaW4gZW50cnkuXG4iLCBlbnRyeS0+dGlkKTsKLQkJCX0KLQkJfQotCX0KLQot
CWZvciAoaSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IHNp
emU7IGorKykgewotCQkJZmlmb19lbnRyeSA9IG1hbGxvYyhzaXplb2YoY2tfZmlmb19tcG1jX2Vu
dHJ5X3QpKTsKLQkJCWVudHJ5ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZW50cnkpKTsKLQkJCWVu
dHJ5LT50aWQgPSBjb250ZXh0LT50aWQ7Ci0JCQl3aGlsZSAoY2tfZmlmb19tcG1jX3RyeWVucXVl
dWUoJmZpZm8sIGZpZm9fZW50cnksIGVudHJ5KSA9PSBmYWxzZSkKLQkJCQlja19wcl9zdGFsbCgp
OwotCi0JCQl3aGlsZSAoY2tfZmlmb19tcG1jX3RyeWRlcXVldWUoJmZpZm8sICZlbnRyeSwgJmdh
cmJhZ2UpID09IGZhbHNlKQotCQkJCWNrX3ByX3N0YWxsKCk7Ci0KLQkJCWlmIChlbnRyeS0+dGlk
IDwgMCB8fCBlbnRyeS0+dGlkID49IG50aHIpIHsKLQkJCQlja19lcnJvcigiRVJST1IgWyV1XSBJ
bmNvcnJlY3QgdmFsdWUgaW4gZW50cnkgd2hlbiB1c2luZyB0cnkgaW50ZXJmYWNlLlxuIiwgZW50
cnktPnRpZCk7Ci0JCQl9Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCXJldHVybiAoTlVMTCk7Ci19Ci0K
LWludAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWludCBpLCByOwotCXN0cnVj
dCBjb250ZXh0ICpjb250ZXh0OwotCWNrX2ZpZm9fbXBtY19lbnRyeV90ICpnYXJiYWdlOwotCXB0
aHJlYWRfdCAqdGhyZWFkOwotCi0JaWYgKGFyZ2MgIT0gNCkgewotCQlja19lcnJvcigiVXNhZ2U6
IHZhbGlkYXRlIDx0aHJlYWRzPiA8YWZmaW5pdHkgZGVsdGE+IDxzaXplPlxuIik7Ci0JfQotCi0J
YS5yZXF1ZXN0ID0gMDsKLQlhLmRlbHRhID0gYXRvaShhcmd2WzJdKTsKLQotCW50aHIgPSBhdG9p
KGFyZ3ZbMV0pOwotCWFzc2VydChudGhyID49IDEpOwotCi0Jc2l6ZSA9IGF0b2koYXJndlszXSk7
Ci0JYXNzZXJ0KHNpemUgPiAwKTsKLQotCWNvbnRleHQgPSBtYWxsb2Moc2l6ZW9mKCpjb250ZXh0
KSAqIG50aHIpOwotCWFzc2VydChjb250ZXh0KTsKLQotCXRocmVhZCA9IG1hbGxvYyhzaXplb2Yo
cHRocmVhZF90KSAqIG50aHIpOwotCWFzc2VydCh0aHJlYWQpOwotCi0JY2tfZmlmb19tcG1jX2lu
aXQoJmZpZm8sIG1hbGxvYyhzaXplb2YoY2tfZmlmb19tcG1jX2VudHJ5X3QpKSk7Ci0JY2tfZmlm
b19tcG1jX2RlaW5pdCgmZmlmbywgJmdhcmJhZ2UpOwotCWlmIChnYXJiYWdlID09IE5VTEwpCi0J
CWNrX2Vycm9yKCJFUlJPUjogRXhwZWN0ZWQgbm9uLU5VTEwgc3R1YiBub2RlIG9uIGRlaW5pdC5c
biIpOwotCWZyZWUoZ2FyYmFnZSk7Ci0JY2tfZmlmb19tcG1jX2luaXQoJmZpZm8sIG1hbGxvYyhz
aXplb2YoY2tfZmlmb19tcG1jX2VudHJ5X3QpKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnRocjsg
aSsrKSB7Ci0JCWNvbnRleHRbaV0udGlkID0gaTsKLQkJciA9IHB0aHJlYWRfY3JlYXRlKHRocmVh
ZCArIGksIE5VTEwsIHRlc3QsIGNvbnRleHQgKyBpKTsKLQkJYXNzZXJ0KHIgPT0gMCk7Ci0JfQot
Ci0JZm9yIChpID0gMDsgaSA8IG50aHI7IGkrKykKLQkJcHRocmVhZF9qb2luKHRocmVhZFtpXSwg
TlVMTCk7Ci0KLQlyZXR1cm4gKDApOwotfQotI2Vsc2UKLWludAotbWFpbih2b2lkKQotewotCWZw
cmludGYoc3RkZXJyLCAiVW5zdXBwb3J0ZWQuXG4iKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgot
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9u
cy9ja19maWZvL3ZhbGlkYXRlL2NrX2ZpZm9fbXBtY19pdGVyYXRvci5jIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfZmlmby92YWxpZGF0ZS9ja19maWZv
X21wbWNfaXRlcmF0b3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjODE3NTdm
MmNiMGJlYjg3Mjk2ZmY0YWY0MWNhYTUyODlhZjQyOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9y
ZWdyZXNzaW9ucy9ja19maWZvL3ZhbGlkYXRlL2NrX2ZpZm9fbXBtY19pdGVyYXRvci5jCisrKyAv
ZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExIERhdmlkIEpv
c2VwaC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGNrX2ZpZm8uaD4K
LSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3Rk
aW8uaD4KLQotI2lmZGVmIENLX0ZfRklGT19NUE1DCi1zdHJ1Y3QgZXhhbXBsZSB7Ci0JaW50IHg7
Ci19OwotCi1zdGF0aWMgY2tfZmlmb19tcG1jX3QgbXBtY19maWZvOwotCi1pbnQKLW1haW4odm9p
ZCkKLXsKLQlpbnQgaSwgbGVuZ3RoID0gMzsKLQlzdHJ1Y3QgZXhhbXBsZSAqZXhhbXBsZXM7Ci0J
Y2tfZmlmb19tcG1jX2VudHJ5X3QgKnN0dWIsICplbnRyaWVzLCAqZW50cnksICpuZXh0OwotCi0J
c3R1YiA9IG1hbGxvYyhzaXplb2YoY2tfZmlmb19tcG1jX2VudHJ5X3QpKTsKLQlpZiAoc3R1YiA9
PSBOVUxMKQotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0KLQlja19maWZvX21wbWNfaW5pdCgmbXBt
Y19maWZvLCBzdHViKTsKLQotCWVudHJpZXMgPSBtYWxsb2Moc2l6ZW9mKGNrX2ZpZm9fbXBtY19l
bnRyeV90KSAqIGxlbmd0aCk7Ci0JaWYgKGVudHJpZXMgPT0gTlVMTCkKLQkJZXhpdChFWElUX0ZB
SUxVUkUpOwotCi0JZXhhbXBsZXMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBleGFtcGxlKSAqIGxl
bmd0aCk7Ci0JLyogTmVlZCB0aGVzZSBmb3IgdGhpcyB1bml0IHRlc3QuICovCi0JaWYgKGV4YW1w
bGVzID09IE5VTEwpCi0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQotCWZvciAoaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgewotCQlleGFtcGxlc1tpXS54ID0gaTsKLQkJY2tfZmlmb19tcG1jX2VucXVl
dWUoJm1wbWNfZmlmbywgZW50cmllcyArIGksIGV4YW1wbGVzICsgaSk7Ci0JfQotCi0JcHV0cygi
VGVzdGluZyBDS19GSUZPX01QTUNfRk9SRUFDSC4iKTsKLQlDS19GSUZPX01QTUNfRk9SRUFDSCgm
bXBtY19maWZvLCBlbnRyeSkgewotCQlwcmludGYoIk5leHQgdmFsdWUgaW4gZmlmbzogJWRcbiIs
ICgoc3RydWN0IGV4YW1wbGUgKillbnRyeS0+dmFsdWUpLT54KTsKLQl9Ci0KLQlwdXRzKCJUZXN0
aW5nIENLX0ZJRk9fTVBNQ19GT1JFQUNIX1NBRkUuIik7Ci0JQ0tfRklGT19NUE1DX0ZPUkVBQ0hf
U0FGRSgmbXBtY19maWZvLCBlbnRyeSwgbmV4dCkgewotCQlpZiAoZW50cnktPm5leHQucG9pbnRl
ciAhPSBuZXh0KQotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQlwcmludGYoIk5leHQgdmFsdWUg
aW4gZmlmbzogJWRcbiIsICgoc3RydWN0IGV4YW1wbGUgKillbnRyeS0+dmFsdWUpLT54KTsKLQl9
Ci0KLQlmcmVlKGV4YW1wbGVzKTsKLQlmcmVlKGVudHJpZXMpOwotCWZyZWUoc3R1Yik7Ci0KLQly
ZXR1cm4gKDApOwotfQotI2Vsc2UKLWludAotbWFpbih2b2lkKQotewotCXJldHVybiAoMCk7Ci19
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3Jl
Z3Jlc3Npb25zL2NrX2ZpZm8vdmFsaWRhdGUvY2tfZmlmb19zcHNjLmMgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19maWZvL3ZhbGlkYXRlL2NrX2ZpZm9f
c3BzYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDZjMzhjMTk5YzRmZjc5MWZj
MjRhYzY0MjRmMGNiOGQ5NmU3OWQwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25z
L2NrX2ZpZm8vdmFsaWRhdGUvY2tfZmlmb19zcHNjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgot
ICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotCi0jaW5j
bHVkZSA8Y2tfZmlmby5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNpZm5kZWYg
SVRFUkFUSU9OUwotI2RlZmluZSBJVEVSQVRJT05TIDEyOAotI2VuZGlmCi0KLXN0cnVjdCBjb250
ZXh0IHsKLQl1bnNpZ25lZCBpbnQgdGlkOwotCXVuc2lnbmVkIGludCBwcmV2aW91czsKLQl1bnNp
Z25lZCBpbnQgbmV4dDsKLX07Ci0KLXN0cnVjdCBlbnRyeSB7Ci0JaW50IHRpZDsKLQlpbnQgdmFs
dWU7Ci19OwotCi1zdGF0aWMgaW50IG50aHI7Ci1zdGF0aWMgY2tfZmlmb19zcHNjX3QgKmZpZm87
Ci1zdGF0aWMgc3RydWN0IGFmZmluaXR5IGE7Ci1zdGF0aWMgaW50IHNpemU7Ci1zdGF0aWMgdW5z
aWduZWQgaW50IGJhcnJpZXI7Ci0KLXN0YXRpYyB2b2lkICoKLXRlc3Qodm9pZCAqYykKLXsKLQlz
dHJ1Y3QgY29udGV4dCAqY29udGV4dCA9IGM7Ci0Jc3RydWN0IGVudHJ5ICplbnRyeTsKLQlja19m
aWZvX3Nwc2NfZW50cnlfdCAqZmlmb19lbnRyeTsKLQlpbnQgaSwgajsKLQotICAgICAgICBpZiAo
YWZmX2l0ZXJhdGUoJmEpKSB7Ci0gICAgICAgICAgICAgICAgcGVycm9yKCJFUlJPUjogQ291bGQg
bm90IGFmZmluZSB0aHJlYWQiKTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
Ci0gICAgICAgIH0KLQotI2lmZGVmIERFQlVHCi0JZnByaW50ZihzdGRlcnIsICIlcCAldTogJXUg
LT4gJXVcbiIsIGZpZm8rY29udGV4dC0+dGlkLCBjb250ZXh0LT50aWQsIGNvbnRleHQtPnByZXZp
b3VzLCBjb250ZXh0LT50aWQpOwotI2VuZGlmCi0KLQlpZiAoY29udGV4dC0+dGlkID09IDApIHsK
LQkJc3RydWN0IGVudHJ5ICplbnRyaWVzOwotCi0JCWVudHJpZXMgPSBtYWxsb2Moc2l6ZW9mKHN0
cnVjdCBlbnRyeSkgKiBzaXplKTsKLQkJYXNzZXJ0KGVudHJpZXMgIT0gTlVMTCk7Ci0KLQkJZm9y
IChpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQkJZW50cmllc1tpXS52YWx1ZSA9IGk7Ci0JCQll
bnRyaWVzW2ldLnRpZCA9IDA7Ci0KLQkJCWZpZm9fZW50cnkgPSBtYWxsb2Moc2l6ZW9mKGNrX2Zp
Zm9fc3BzY19lbnRyeV90KSk7Ci0JCQlja19maWZvX3Nwc2NfZW5xdWV1ZShmaWZvICsgY29udGV4
dC0+dGlkLCBmaWZvX2VudHJ5LCBlbnRyaWVzICsgaSk7Ci0JCX0KLQl9Ci0KLQlja19wcl9pbmNf
dWludCgmYmFycmllcik7Ci0Jd2hpbGUgKGNrX3ByX2xvYWRfdWludCgmYmFycmllcikgPCAodW5z
aWduZWQgaW50KW50aHIpOwotCi0JZm9yIChpID0gMDsgaSA8IElURVJBVElPTlM7IGkrKykgewot
CQlmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7Ci0JCQl3aGlsZSAoY2tfZmlmb19zcHNjX2Rl
cXVldWUoZmlmbyArIGNvbnRleHQtPnByZXZpb3VzLCAmZW50cnkpID09IGZhbHNlKTsKLQkJCWlm
IChjb250ZXh0LT5wcmV2aW91cyAhPSAodW5zaWduZWQgaW50KWVudHJ5LT50aWQpIHsKLQkJCQlj
a19lcnJvcigiVCBbJXU6JXBdICV1ICE9ICV1XG4iLAotCQkJCQljb250ZXh0LT50aWQsICh2b2lk
ICopZW50cnksIGVudHJ5LT50aWQsIGNvbnRleHQtPnByZXZpb3VzKTsKLQkJCX0KLQotCQkJaWYg
KGVudHJ5LT52YWx1ZSAhPSBqKSB7Ci0JCQkJY2tfZXJyb3IoIlYgWyV1OiVwXSAldSAhPSAldVxu
IiwKLQkJCQkJY29udGV4dC0+dGlkLCAodm9pZCAqKWVudHJ5LCBlbnRyeS0+dmFsdWUsIGopOwot
CQkJfQotCi0JCQllbnRyeS0+dGlkID0gY29udGV4dC0+dGlkOwotCQkJZmlmb19lbnRyeSA9IGNr
X2ZpZm9fc3BzY19yZWN5Y2xlKGZpZm8gKyBjb250ZXh0LT50aWQpOwotCQkJaWYgKGZpZm9fZW50
cnkgPT0gTlVMTCkKLQkJCQlmaWZvX2VudHJ5ID0gbWFsbG9jKHNpemVvZihja19maWZvX3Nwc2Nf
ZW50cnlfdCkpOwotCi0JCQlja19maWZvX3Nwc2NfZW5xdWV1ZShmaWZvICsgY29udGV4dC0+dGlk
LCBmaWZvX2VudHJ5LCBlbnRyeSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gKE5VTEwpOwotfQotCi1p
bnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlpbnQgaSwgcjsKLQlzdHJ1Y3Qg
Y29udGV4dCAqY29udGV4dDsKLQlwdGhyZWFkX3QgKnRocmVhZDsKLQotCWlmIChhcmdjICE9IDQp
IHsKLQkJY2tfZXJyb3IoIlVzYWdlOiB2YWxpZGF0ZSA8dGhyZWFkcz4gPGFmZmluaXR5IGRlbHRh
PiA8c2l6ZT5cbiIpOwotCX0KLQotCWEucmVxdWVzdCA9IDA7Ci0JYS5kZWx0YSA9IGF0b2koYXJn
dlsyXSk7Ci0KLQludGhyID0gYXRvaShhcmd2WzFdKTsKLQlhc3NlcnQobnRociA+PSAxKTsKLQot
CXNpemUgPSBhdG9pKGFyZ3ZbM10pOwotCWFzc2VydChzaXplID4gMCk7Ci0KLQlmaWZvID0gbWFs
bG9jKHNpemVvZihja19maWZvX3Nwc2NfdCkgKiBudGhyKTsKLQlhc3NlcnQoZmlmbyk7Ci0KLQlj
b250ZXh0ID0gbWFsbG9jKHNpemVvZigqY29udGV4dCkgKiBudGhyKTsKLQlhc3NlcnQoY29udGV4
dCk7Ci0KLQl0aHJlYWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyKTsKLQlhc3Nl
cnQodGhyZWFkKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspIHsKLQkJY2tfZmlmb19z
cHNjX2VudHJ5X3QgKmdhcmJhZ2U7Ci0KLQkJY29udGV4dFtpXS50aWQgPSBpOwotCQlpZiAoaSA9
PSAwKSB7Ci0JCQljb250ZXh0W2ldLnByZXZpb3VzID0gbnRociAtIDE7Ci0JCQljb250ZXh0W2ld
Lm5leHQgPSBpICsgMTsKLQkJfSBlbHNlIGlmIChpID09IG50aHIgLSAxKSB7Ci0JCQljb250ZXh0
W2ldLm5leHQgPSAwOwotCQkJY29udGV4dFtpXS5wcmV2aW91cyA9IGkgLSAxOwotCQl9IGVsc2Ug
ewotCQkJY29udGV4dFtpXS5uZXh0ID0gaSArIDE7Ci0JCQljb250ZXh0W2ldLnByZXZpb3VzID0g
aSAtIDE7Ci0JCX0KLQotCQlja19maWZvX3Nwc2NfaW5pdChmaWZvICsgaSwgbWFsbG9jKHNpemVv
Zihja19maWZvX3Nwc2NfZW50cnlfdCkpKTsKLQkJY2tfZmlmb19zcHNjX2RlaW5pdChmaWZvICsg
aSwgJmdhcmJhZ2UpOwotCQlpZiAoZ2FyYmFnZSA9PSBOVUxMKQotCQkJY2tfZXJyb3IoIkVSUk9S
OiBFeHBlY3RlZCBub24tTlVMTCBzdHViIG5vZGUgb24gZGVpbml0LlxuIik7Ci0KLQkJZnJlZShn
YXJiYWdlKTsKLQkJY2tfZmlmb19zcHNjX2luaXQoZmlmbyArIGksIG1hbGxvYyhzaXplb2YoY2tf
Zmlmb19zcHNjX2VudHJ5X3QpKSk7Ci0JCXIgPSBwdGhyZWFkX2NyZWF0ZSh0aHJlYWQgKyBpLCBO
VUxMLCB0ZXN0LCBjb250ZXh0ICsgaSk7Ci0JCWFzc2VydChyID09IDApOwotCX0KLQotCWZvciAo
aSA9IDA7IGkgPCBudGhyOyBpKyspCi0JCXB0aHJlYWRfam9pbih0aHJlYWRbaV0sIE5VTEwpOwot
Ci0JcmV0dXJuICgwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svcmVncmVzc2lvbnMvY2tfZmlmby92YWxpZGF0ZS9ja19maWZvX3Nwc2NfaXRlcmF0
b3IuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2Zp
Zm8vdmFsaWRhdGUvY2tfZmlmb19zcHNjX2l0ZXJhdG9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDk3ODA0ZGUwNzg2ZjgzMWYyYzUyMzEwZGY5MmZlMDk4M2I1NzI3ZmMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfZmlmby92YWxpZGF0ZS9ja19maWZvX3Nw
c2NfaXRlcmF0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgMjAxMSBEYXZpZCBKb3NlcGguCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlIDxja19maWZvLmg+Ci0jaW5jbHVkZSA8c3RkYm9vbC5oPgotI2luY2x1ZGUgPHN0ZGxp
Yi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLXN0cnVjdCBleGFtcGxlIHsKLQlpbnQgeDsKLX07
Ci0KLXN0YXRpYyBja19maWZvX3Nwc2NfdCBzcHNjX2ZpZm87Ci0KLWludAotbWFpbih2b2lkKQot
ewotCWludCBpLCBsZW5ndGggPSAzOwotCXN0cnVjdCBleGFtcGxlICpleGFtcGxlczsKLQlja19m
aWZvX3Nwc2NfZW50cnlfdCAqc3R1YiwgKmVudHJpZXMsICplbnRyeSwgKm5leHQ7Ci0KLQlzdHVi
ID0gbWFsbG9jKHNpemVvZihja19maWZvX3Nwc2NfZW50cnlfdCkpOwotCWlmIChzdHViID09IE5V
TEwpCi0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQotCWNrX2ZpZm9fc3BzY19pbml0KCZzcHNjX2Zp
Zm8sIHN0dWIpOwotCi0JZW50cmllcyA9IG1hbGxvYyhzaXplb2YoY2tfZmlmb19zcHNjX2VudHJ5
X3QpICogbGVuZ3RoKTsKLQlpZiAoZW50cmllcyA9PSBOVUxMKQotCQlleGl0KEVYSVRfRkFJTFVS
RSk7Ci0KLQlleGFtcGxlcyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGV4YW1wbGUpICogbGVuZ3Ro
KTsKLQkvKiBOZWVkIHRoZXNlIGZvciB0aGlzIHVuaXQgdGVzdC4gKi8KLQlpZiAoZXhhbXBsZXMg
PT0gTlVMTCkKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7Ci0JCWV4YW1wbGVzW2ldLnggPSBpOwotCQlja19maWZvX3Nwc2NfZW5xdWV1ZSgm
c3BzY19maWZvLCBlbnRyaWVzICsgaSwgZXhhbXBsZXMgKyBpKTsKLQl9Ci0KLQlwdXRzKCJUZXN0
aW5nIENLX0ZJRk9fU1BTQ19GT1JFQUNILiIpOwotCUNLX0ZJRk9fU1BTQ19GT1JFQUNIKCZzcHNj
X2ZpZm8sIGVudHJ5KSB7Ci0JCXByaW50ZigiTmV4dCB2YWx1ZSBpbiBmaWZvOiAlZFxuIiwgKChz
dHJ1Y3QgZXhhbXBsZSAqKWVudHJ5LT52YWx1ZSktPngpOwotCX0KLQotCXB1dHMoIlRlc3Rpbmcg
Q0tfRklGT19TUFNDX0ZPUkVBQ0hfU0FGRS4iKTsKLQlDS19GSUZPX1NQU0NfRk9SRUFDSF9TQUZF
KCZzcHNjX2ZpZm8sIGVudHJ5LCBuZXh0KSB7Ci0JCWlmIChlbnRyeS0+bmV4dCAhPSBuZXh0KQot
CQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQlwcmludGYoIk5leHQgdmFsdWUgaW4gZmlmbzogJWRc
biIsICgoc3RydWN0IGV4YW1wbGUgKillbnRyeS0+dmFsdWUpLT54KTsKLQl9Ci0KLQlmcmVlKGV4
YW1wbGVzKTsKLQlmcmVlKGVudHJpZXMpOwotCWZyZWUoc3R1Yik7Ci0KLQlyZXR1cm4gKDApOwot
fQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNz
aW9ucy9ja19ocC9iZW5jaG1hcmsvTWFrZWZpbGUgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9ja19ocC9iZW5jaG1hcmsvTWFrZWZpbGUKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDIwMjVlYTk5NTdmODIwMTQ5NDE1YTZiN2UxYzU2ZTBmMjcyZThm
ZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHAvYmVuY2htYXJrL01h
a2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLlBIT05ZOiBjbGVhbiBkaXN0
cmlidXRpb24KLQotT0JKRUNUUz1maWZvX2xhdGVuY3kgc3RhY2tfbGF0ZW5jeQotCi1hbGw6ICQo
T0JKRUNUUykKLQotZmlmb19sYXRlbmN5OiBmaWZvX2xhdGVuY3kuYwotCSQoQ0MpICQoQ0ZMQUdT
KSAtbyBmaWZvX2xhdGVuY3kgLi4vLi4vLi4vc3JjL2NrX2hwLmMgZmlmb19sYXRlbmN5LmMKLQot
c3RhY2tfbGF0ZW5jeTogc3RhY2tfbGF0ZW5jeS5jCi0JJChDQykgJChDRkxBR1MpIC1vIHN0YWNr
X2xhdGVuY3kgLi4vLi4vLi4vc3JjL2NrX2hwLmMgc3RhY2tfbGF0ZW5jeS5jCi0KLWNsZWFuOgot
CXJtIC1yZiAqfiAqLm8gKi5kU1lNICouZXhlICQoT0JKRUNUUykKLQotaW5jbHVkZSAuLi8uLi8u
Li9idWlsZC9yZWdyZXNzaW9ucy5idWlsZAotQ0ZMQUdTKz0kKFBUSFJFQURfQ0ZMQUdTKSAtRF9H
TlVfU09VUkNFCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9y
ZWdyZXNzaW9ucy9ja19ocC9iZW5jaG1hcmsvZmlmb19sYXRlbmN5LmMgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19ocC9iZW5jaG1hcmsvZmlmb19sYXRl
bmN5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZWUyYTcyOWJlNDlkYTI4Mzk2
NWMzM2JiZGYwZWI3ZTMxMWRkMjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfaHAvYmVuY2htYXJrL2ZpZm9fbGF0ZW5jeS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICog
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGNrX2hwLmg+Ci0jaW5jbHVkZSA8Y2tfaHBf
Zmlmby5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5j
bHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2Nv
bW1vbi5oIgotCi0jaWZuZGVmIEVOVFJJRVMKLSNkZWZpbmUgRU5UUklFUyA0MDk2Ci0jZW5kaWYK
LQotI2lmbmRlZiBTVEVQUwotI2RlZmluZSBTVEVQUyA0MDAwMAotI2VuZGlmCi0KLXN0YXRpYyBj
a19ocF9maWZvX3QgZmlmbzsKLXN0YXRpYyBja19ocF90IGZpZm9faHA7Ci0KLWludAotbWFpbih2
b2lkKQotewotCXZvaWQgKnI7Ci0JdWludDY0X3QgcywgZSwgYTsKLQl1bnNpZ25lZCBpbnQgaTsK
LQl1bnNpZ25lZCBpbnQgajsKLQlja19ocF9maWZvX2VudHJ5X3QgaHBfZW50cnlbRU5UUklFU107
Ci0JY2tfaHBfZmlmb19lbnRyeV90IGhwX3N0dWI7Ci0JY2tfaHBfcmVjb3JkX3QgcmVjb3JkOwot
Ci0JY2tfaHBfaW5pdCgmZmlmb19ocCwgQ0tfSFBfRklGT19TTE9UU19DT1VOVCwgMTAwMDAwMCwg
TlVMTCk7Ci0KLQlyID0gbWFsbG9jKENLX0hQX0ZJRk9fU0xPVFNfU0laRSk7Ci0JaWYgKHIgPT0g
TlVMTCkgewotCQlja19lcnJvcigiRVJST1I6IEZhaWxlZCB0byBhbGxvY2F0ZSBzbG90cy5cbiIp
OwotCX0KLQlja19ocF9yZWdpc3RlcigmZmlmb19ocCwgJnJlY29yZCwgcik7Ci0KLQlhID0gMDsK
LQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19ocF9maWZvX2luaXQoJmZpZm8s
ICZocF9zdHViKTsKLQotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChqID0gMDsgaiA8IEVOVFJJRVM7
IGorKykKLQkJCWNrX2hwX2ZpZm9fZW5xdWV1ZV9tcG1jKCZyZWNvcmQsICZmaWZvLCBocF9lbnRy
eSArIGosIE5VTEwpOwotCQllID0gcmR0c2MoKTsKLQotCQlhICs9IGUgLSBzOwotCX0KLQlwcmlu
dGYoImNrX2hwX2ZpZm9fZW5xdWV1ZV9tcG1jOiAlMTYiIFBSSXU2NCAiXG4iLCBhIC8gU1RFUFMg
LyBFTlRSSUVTKTsKLQotCWEgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0J
CWNrX2hwX2ZpZm9faW5pdCgmZmlmbywgJmhwX3N0dWIpOwotCQlmb3IgKGogPSAwOyBqIDwgRU5U
UklFUzsgaisrKQotCQkJY2tfaHBfZmlmb19lbnF1ZXVlX21wbWMoJnJlY29yZCwgJmZpZm8sIGhw
X2VudHJ5ICsgaiwgTlVMTCk7Ci0KLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaiA9IDA7IGogPCBF
TlRSSUVTOyBqKyspCi0JCQlja19ocF9maWZvX2RlcXVldWVfbXBtYygmcmVjb3JkLCAmZmlmbywg
JnIpOwotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9Ci0JcHJpbnRmKCJja19ocF9m
aWZvX2RlcXVldWVfbXBtYzogJTE2IiBQUkl1NjQgIlxuIiwgYSAvIFNURVBTIC8gRU5UUklFUyk7
Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2hwL2JlbmNobWFyay9zdGFja19sYXRlbmN5LmMgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19ocC9iZW5jaG1hcmsv
c3RhY2tfbGF0ZW5jeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzM2ZGU2YmM1
ZDgwOTRmODgwNWFlOWViODg3NWQ0NTg3Yjk1MDE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3Jl
Z3Jlc3Npb25zL2NrX2hwL2JlbmNobWFyay9zdGFja19sYXRlbmN5LmMKKysrIC9kZXYvbnVsbApA
QCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEtMjAxNSBTYW15IEFsIEJhaHJh
LgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
Ci0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8Y2tfaHAuaD4KLSNpbmNs
dWRlIDxja19ocF9zdGFjay5oPgotI2luY2x1ZGUgPGNrX3N0YWNrLmg+Ci0jaW5jbHVkZSA8aW50
dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNpZm5kZWYgRU5U
UklFUwotI2RlZmluZSBFTlRSSUVTIDQwOTYKLSNlbmRpZgotCi0jaWZuZGVmIFNURVBTCi0jZGVm
aW5lIFNURVBTIDQwMDAwCi0jZW5kaWYKLQotc3RhdGljIGNrX3N0YWNrX3Qgc3RhY2s7Ci1zdGF0
aWMgY2tfaHBfdCBzdGFja19ocDsKLQotaW50Ci1tYWluKHZvaWQpCi17Ci0JY2tfaHBfcmVjb3Jk
X3QgcmVjb3JkOwotCWNrX3N0YWNrX2VudHJ5X3QgZW50cnlbRU5UUklFU107Ci0JdWludDY0X3Qg
cywgZSwgYTsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgajsKLQl2b2lkICpyOwot
Ci0JY2tfaHBfaW5pdCgmc3RhY2tfaHAsIENLX0hQX1NUQUNLX1NMT1RTX0NPVU5ULCAxMDAwMDAw
LCBOVUxMKTsKLQlyID0gbWFsbG9jKENLX0hQX1NUQUNLX1NMT1RTX1NJWkUpOwotCWlmIChyID09
IE5VTEwpIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBGYWlsZWQgdG8gYWxsb2NhdGUgc2xvdHMuXG4i
KTsKLQl9Ci0JY2tfaHBfcmVnaXN0ZXIoJnN0YWNrX2hwLCAmcmVjb3JkLCAodm9pZCAqKXIpOwot
Ci0JYSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNURVBTOyBpKyspIHsKLQkJY2tfc3RhY2tfaW5p
dCgmc3RhY2spOwotCi0JCXMgPSByZHRzYygpOwotCQlmb3IgKGogPSAwOyBqIDwgRU5UUklFUzsg
aisrKQotCQkJY2tfaHBfc3RhY2tfcHVzaF9tcG1jKCZzdGFjaywgZW50cnkgKyBqKTsKLQkJZSA9
IHJkdHNjKCk7Ci0KLQkJYSArPSBlIC0gczsKLQl9Ci0JcHJpbnRmKCJja19ocF9zdGFja19wdXNo
X21wbWM6ICUxNiIgUFJJdTY0ICJcbiIsIGEgLyBTVEVQUyAvIEVOVFJJRVMpOwotCi0JYSA9IDA7
Ci0JZm9yIChpID0gMDsgaSA8IFNURVBTOyBpKyspIHsKLQkJY2tfc3RhY2tfaW5pdCgmc3RhY2sp
OwotCi0JCWZvciAoaiA9IDA7IGogPCBFTlRSSUVTOyBqKyspCi0JCQlja19ocF9zdGFja19wdXNo
X21wbWMoJnN0YWNrLCBlbnRyeSArIGopOwotCi0JCXMgPSByZHRzYygpOwotCQlmb3IgKGogPSAw
OyBqIDwgRU5UUklFUzsgaisrKSB7Ci0JCQlyID0gY2tfaHBfc3RhY2tfcG9wX21wbWMoJnJlY29y
ZCwgJnN0YWNrKTsKLQkJfQotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9Ci0JcHJp
bnRmKCIgY2tfaHBfc3RhY2tfcG9wX21wbWM6ICUxNiIgUFJJdTY0ICJcbiIsIGEgLyBTVEVQUyAv
IEVOVFJJRVMpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19ocC92YWxpZGF0ZS9NYWtlZmlsZSBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2hwL3ZhbGlkYXRl
L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzZiMzRmYWJlYTk3YTFm
NDZhM2RjNWVjZTkzMjliMTdmYjllZDhlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Np
b25zL2NrX2hwL3ZhbGlkYXRlL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBA
QAotLlBIT05ZOiBjaGVjayBjbGVhbiBkaXN0cmlidXRpb24KLQotT0JKRUNUUz1ja19ocF9zdGFj
ayBuYmRzX2hhel90ZXN0IHNlcmlhbCBja19ocF9maWZvIGNrX2hwX2ZpZm9fZG9ubmVyCi0KLWFs
bDogJChPQkpFQ1RTKQotCi1jaGVjazogYWxsCi0JLi9zZXJpYWwKLQkuL2NrX2hwX3N0YWNrICQo
Q09SRVMpIDEwMCAxCi0JLi9ja19ocF9maWZvICQoQ09SRVMpIDEgMTYzODQgMTAwCi0JLi9uYmRz
X2hhel90ZXN0ICQoQ09SRVMpIDE1IDEKLQkuL2NrX2hwX2ZpZm9fZG9ubmVyICQoQ09SRVMpIDE2
Mzg0Ci0KLWNrX2hwX3N0YWNrOiAuLi8uLi8uLi9zcmMvY2tfaHAuYyBja19ocF9zdGFjay5jIC4u
Ly4uLy4uL2luY2x1ZGUvY2tfaHBfc3RhY2suaAotCSQoQ0MpICQoQ0ZMQUdTKSAuLi8uLi8uLi9z
cmMvY2tfaHAuYyAtbyBja19ocF9zdGFjayBja19ocF9zdGFjay5jCi0KLWNrX2hwX2ZpZm86IC4u
Ly4uLy4uL3NyYy9ja19ocC5jIGNrX2hwX2ZpZm8uYyAuLi8uLi8uLi9pbmNsdWRlL2NrX2hwX2Zp
Zm8uaAotCSQoQ0MpICQoQ0ZMQUdTKSAuLi8uLi8uLi9zcmMvY2tfaHAuYyAtbyBja19ocF9maWZv
IGNrX2hwX2ZpZm8uYwotCi1ja19ocF9maWZvX2Rvbm5lcjogLi4vLi4vLi4vc3JjL2NrX2hwLmMg
Y2tfaHBfZmlmb19kb25uZXIuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX2hwX2ZpZm8uaAotCSQoQ0Mp
ICQoQ0ZMQUdTKSAuLi8uLi8uLi9zcmMvY2tfaHAuYyAtbyBja19ocF9maWZvX2Rvbm5lciBja19o
cF9maWZvX2Rvbm5lci5jCi0KLXNlcmlhbDogLi4vLi4vLi4vc3JjL2NrX2hwLmMgc2VyaWFsLmMg
Li4vLi4vLi4vaW5jbHVkZS9ja19ocF9zdGFjay5oCi0JJChDQykgJChDRkxBR1MpIC4uLy4uLy4u
L3NyYy9ja19ocC5jIC1vIHNlcmlhbCBzZXJpYWwuYwotCi1uYmRzX2hhel90ZXN0OiAuLi8uLi8u
Li9zcmMvY2tfaHAuYyBuYmRzX2hhel90ZXN0LmMKLQkkKENDKSAkKENGTEFHUykgLi4vLi4vLi4v
c3JjL2NrX2hwLmMgLW8gbmJkc19oYXpfdGVzdCBuYmRzX2hhel90ZXN0LmMKLQotY2xlYW46Ci0J
cm0gLXJmICp+ICoubyAqLmRTWU0gKi5leGUgJChPQkpFQ1RTKQotCi1pbmNsdWRlIC4uLy4uLy4u
L2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxkCi1DRkxBR1MrPSQoUFRIUkVBRF9DRkxBR1MpIC1EX0dO
VV9TT1VSQ0UKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3Jl
Z3Jlc3Npb25zL2NrX2hwL3ZhbGlkYXRlL2NrX2hwX2ZpZm8uYyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2hwL3ZhbGlkYXRlL2NrX2hwX2ZpZm8uYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ1NDI4M2MxZjJiNGJhOTBjNDBmMjVhYjlm
ZDM5Nzg1NzkwOWRjOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19ocC92
YWxpZGF0ZS9ja19ocF9maWZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPGNrX2hwX2Zp
Zm8uaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi0jaWZuZGVmIElURVJBVElPTlMK
LSNkZWZpbmUgSVRFUkFUSU9OUyAxMjgKLSNlbmRpZgotCi1zdHJ1Y3QgY29udGV4dCB7Ci0JdW5z
aWduZWQgaW50IHRpZDsKLQl1bnNpZ25lZCBpbnQgcHJldmlvdXM7Ci0JdW5zaWduZWQgaW50IG5l
eHQ7Ci19OwotCi1zdHJ1Y3QgZW50cnkgewotCWludCB0aWQ7Ci0JaW50IHZhbHVlOwotfTsKLQot
c3RhdGljIGNrX2hwX2ZpZm9fdCBmaWZvOwotc3RhdGljIGNrX2hwX3QgZmlmb19ocDsKLXN0YXRp
YyBpbnQgbnRocjsKLQotc3RhdGljIHN0cnVjdCBhZmZpbml0eSBhOwotc3RhdGljIGludCBzaXpl
Owotc3RhdGljIHVuc2lnbmVkIGludCBiYXJyaWVyOwotc3RhdGljIHVuc2lnbmVkIGludCBlX2Jh
cnJpZXI7Ci0KLXN0YXRpYyB2b2lkICoKLXRlc3Qodm9pZCAqYykKLXsKLQlzdHJ1Y3QgY29udGV4
dCAqY29udGV4dCA9IGM7Ci0Jc3RydWN0IGVudHJ5ICplbnRyeTsKLQlja19ocF9maWZvX2VudHJ5
X3QgKmZpZm9fZW50cnk7Ci0JY2tfaHBfcmVjb3JkX3QgcmVjb3JkOwotCWludCBpLCBqOwotCi0g
ICAgICAgIGlmIChhZmZfaXRlcmF0ZSgmYSkpIHsKLSAgICAgICAgICAgICAgICBwZXJyb3IoIkVS
Uk9SOiBDb3VsZCBub3QgYWZmaW5lIHRocmVhZCIpOwotICAgICAgICAgICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICAgICAgfQotCi0JY2tfaHBfcmVnaXN0ZXIoJmZpZm9faHAsICZyZWNv
cmQsIG1hbGxvYyhzaXplb2Yodm9pZCAqKSAqIDIpKTsKLQlja19wcl9pbmNfdWludCgmYmFycmll
cik7Ci0Jd2hpbGUgKGNrX3ByX2xvYWRfdWludCgmYmFycmllcikgPCAodW5zaWduZWQgaW50KW50
aHIpOwotCi0JZm9yIChpID0gMDsgaSA8IElURVJBVElPTlM7IGkrKykgewotCQlmb3IgKGogPSAw
OyBqIDwgc2l6ZTsgaisrKSB7Ci0JCQlmaWZvX2VudHJ5ID0gbWFsbG9jKHNpemVvZihja19ocF9m
aWZvX2VudHJ5X3QpKTsKLQkJCWVudHJ5ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZW50cnkpKTsK
LQkJCWVudHJ5LT50aWQgPSBjb250ZXh0LT50aWQ7Ci0JCQlja19ocF9maWZvX2VucXVldWVfbXBt
YygmcmVjb3JkLCAmZmlmbywgZmlmb19lbnRyeSwgZW50cnkpOwotCi0JCQlja19wcl9iYXJyaWVy
KCk7Ci0KLQkJCWZpZm9fZW50cnkgPSBja19ocF9maWZvX2RlcXVldWVfbXBtYygmcmVjb3JkLCAm
ZmlmbywgJmVudHJ5KTsKLQkJCWlmIChmaWZvX2VudHJ5ID09IE5VTEwpIHsKLQkJCQlja19lcnJv
cigiRVJST1IgWyV1XSBRdWV1ZSBzaG91bGQgbmV2ZXIgYmUgZW1wdHkuXG4iLCBjb250ZXh0LT50
aWQpOwotCQkJfQotCi0JCQlja19wcl9iYXJyaWVyKCk7Ci0KLQkJCWlmIChlbnRyeS0+dGlkIDwg
MCB8fCBlbnRyeS0+dGlkID49IG50aHIpIHsKLQkJCQlja19lcnJvcigiRVJST1IgWyV1XSBJbmNv
cnJlY3QgdmFsdWUgaW4gZW50cnkuXG4iLCBlbnRyeS0+dGlkKTsKLQkJCX0KLQotCQkJY2tfaHBf
ZnJlZSgmcmVjb3JkLCAmZmlmb19lbnRyeS0+aGF6YXJkLCBmaWZvX2VudHJ5LCBmaWZvX2VudHJ5
KTsKLQkJfQotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspIHsKLQkJZm9y
IChqID0gMDsgaiA8IHNpemU7IGorKykgewotCQkJZmlmb19lbnRyeSA9IG1hbGxvYyhzaXplb2Yo
Y2tfaHBfZmlmb19lbnRyeV90KSk7Ci0JCQllbnRyeSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGVu
dHJ5KSk7Ci0JCQllbnRyeS0+dGlkID0gY29udGV4dC0+dGlkOwotCi0JCQl3aGlsZSAoY2tfaHBf
Zmlmb190cnllbnF1ZXVlX21wbWMoJnJlY29yZCwgJmZpZm8sIGZpZm9fZW50cnksIGVudHJ5KSA9
PSBmYWxzZSkKLQkJCQlja19wcl9zdGFsbCgpOwotCi0JCQl3aGlsZSAoZmlmb19lbnRyeSA9IGNr
X2hwX2ZpZm9fdHJ5ZGVxdWV1ZV9tcG1jKCZyZWNvcmQsICZmaWZvLCAmZW50cnkpLCBmaWZvX2Vu
dHJ5ID09IE5VTEwpCi0JCQkJY2tfcHJfc3RhbGwoKTsKLQotCQkJaWYgKGVudHJ5LT50aWQgPCAw
IHx8IGVudHJ5LT50aWQgPj0gbnRocikgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbJXVdIEluY29y
cmVjdCB2YWx1ZSBpbiBlbnRyeS5cbiIsIGVudHJ5LT50aWQpOwotCQkJfQotCi0JCQlja19ocF9m
cmVlKCZyZWNvcmQsICZmaWZvX2VudHJ5LT5oYXphcmQsIGZpZm9fZW50cnksIGZpZm9fZW50cnkp
OwotCQl9Ci0JfQotCi0JY2tfcHJfaW5jX3VpbnQoJmVfYmFycmllcik7Ci0Jd2hpbGUgKGNrX3By
X2xvYWRfdWludCgmZV9iYXJyaWVyKSA8ICh1bnNpZ25lZCBpbnQpbnRocik7Ci0KLQlyZXR1cm4g
KE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotZGVzdHJ1Y3Rvcih2b2lkICpwKQotewotCi0JZnJl
ZShwKTsKLQlyZXR1cm47Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQot
ewotCWludCBpLCByOwotCXN0cnVjdCBjb250ZXh0ICpjb250ZXh0OwotCXB0aHJlYWRfdCAqdGhy
ZWFkOwotCWludCB0aHJlc2hvbGQ7Ci0KLQlpZiAoYXJnYyAhPSA1KSB7Ci0JCWNrX2Vycm9yKCJV
c2FnZTogdmFsaWRhdGUgPHRocmVhZHM+IDxhZmZpbml0eSBkZWx0YT4gPHNpemU+IDx0aHJlc2hv
bGQ+XG4iKTsKLQl9Ci0KLQlhLmRlbHRhID0gYXRvaShhcmd2WzJdKTsKLQotCW50aHIgPSBhdG9p
KGFyZ3ZbMV0pOwotCWFzc2VydChudGhyID49IDEpOwotCi0Jc2l6ZSA9IGF0b2koYXJndlszXSk7
Ci0JYXNzZXJ0KHNpemUgPiAwKTsKLQotCXRocmVzaG9sZCA9IGF0b2koYXJndls0XSk7Ci0JYXNz
ZXJ0KHRocmVzaG9sZCA+IDApOwotCi0JY29udGV4dCA9IG1hbGxvYyhzaXplb2YoKmNvbnRleHQp
ICogbnRocik7Ci0JYXNzZXJ0KGNvbnRleHQpOwotCi0JdGhyZWFkID0gbWFsbG9jKHNpemVvZihw
dGhyZWFkX3QpICogbnRocik7Ci0JYXNzZXJ0KHRocmVhZCk7Ci0KLQlja19ocF9pbml0KCZmaWZv
X2hwLCAyLCB0aHJlc2hvbGQsIGRlc3RydWN0b3IpOwotCWNrX2hwX2ZpZm9faW5pdCgmZmlmbywg
bWFsbG9jKHNpemVvZihja19ocF9maWZvX2VudHJ5X3QpKSk7Ci0KLQlja19ocF9maWZvX2VudHJ5
X3QgKmVudHJ5OwotCWNrX2hwX2ZpZm9fZGVpbml0KCZmaWZvLCAmZW50cnkpOwotCi0JaWYgKGVu
dHJ5ID09IE5VTEwpCi0JCWNrX2Vycm9yKCJFUlJPUjogRXhwZWN0ZWQgbm9uLU5VTEwgc3R1YiBu
b2RlLlxuIik7Ci0KLQlmcmVlKGVudHJ5KTsKLQlja19ocF9maWZvX2luaXQoJmZpZm8sIG1hbGxv
YyhzaXplb2YoY2tfaHBfZmlmb19lbnRyeV90KSkpOwotCi0JZm9yIChpID0gMDsgaSA8IG50aHI7
IGkrKykgewotCQljb250ZXh0W2ldLnRpZCA9IGk7Ci0JCXIgPSBwdGhyZWFkX2NyZWF0ZSh0aHJl
YWQgKyBpLCBOVUxMLCB0ZXN0LCBjb250ZXh0ICsgaSk7Ci0JCWFzc2VydChyID09IDApOwotCX0K
LQotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspCi0JCXB0aHJlYWRfam9pbih0aHJlYWRbaV0s
IE5VTEwpOwotCi0JcmV0dXJuICgwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHAvdmFsaWRhdGUvY2tfaHBfZmlmb19k
b25uZXIuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X2hwL3ZhbGlkYXRlL2NrX2hwX2ZpZm9fZG9ubmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDFiNTJhMzc1NGYzM2IwNjRlZjAwNTY3ZDBhYzAzN2IzMGJkZmNiMDUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHAvdmFsaWRhdGUvY2tfaHBfZmlmb19kb25u
ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIw
MTIgSGVuZHJpayBEb25uZXIKLSAqIENvcHlyaWdodCAyMDEyLTIwMTUgU2FteSBBbCBCYWhyYS4K
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
LSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
Ci0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGNrX2hwLmg+Ci0jaW5jbHVk
ZSA8Y2tfaHBfZmlmby5oPgotI2luY2x1ZGUgPGNrX3ByLmg+Ci0jaW5jbHVkZSA8c3RkYm9vbC5o
PgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8cHRo
cmVhZC5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5j
bHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLS8qIEZJRk8gcXVldWUgKi8KLXN0YXRpYyBja19ocF9m
aWZvX3QgZmlmbzsKLQotLyogSGF6YXJkIHBvaW50ZXIgZ2xvYmFsICovCi1zdGF0aWMgY2tfaHBf
dCBmaWZvX2hwOwotCi0vKiB0aHJlYWQgbG9jYWwgZWxlbWVudCBjb3VudCAqLwotc3RhdGljIHVu
c2lnbmVkIGxvbmcgKmNvdW50OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aHJlYWRfY291bnQ7
Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnRfYmFycmllcjsKLXN0YXRpYyB1bnNpZ25lZCBp
bnQgZW5kX2JhcnJpZXI7Ci0KLS8qIGRlc3RydWN0b3IgZm9yIEZJRk8gcXVldWUgKi8KLXN0YXRp
YyB2b2lkCi1kZXN0cnVjdG9yKHZvaWQgKnApCi17Ci0KLQlmcmVlKHApOwotCXJldHVybjsKLX0K
LQotLyogZW50cnkgc3RydWN0IGZvciBGSUZPIHF1ZXVlIGVudHJpZXMgKi8KLXN0cnVjdCBlbnRy
eSB7Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKLX07Ci0KLS8qIGZ1bmN0aW9uIGZvciB0aHJlYWQg
Ki8KLXN0YXRpYyB2b2lkICoKLXF1ZXVlXzUwXzUwKHZvaWQgKmVsZW1lbnRzKQotewotICAgICAg
ICBzdHJ1Y3QgZW50cnkgKmVudHJ5OwotICAgICAgICBja19ocF9maWZvX2VudHJ5X3QgKmZpZm9f
ZW50cnk7Ci0JY2tfaHBfcmVjb3JkX3QgKnJlY29yZDsKLQl2b2lkICpzbG90czsKLSAgICAgICAg
dW5zaWduZWQgbG9uZyBqLCBlbGVtZW50X2NvdW50ID0gKih1bnNpZ25lZCBsb25nICopZWxlbWVu
dHM7Ci0JdW5zaWduZWQgaW50IHNlZWQ7Ci0KLQlyZWNvcmQgPSBtYWxsb2Moc2l6ZW9mKGNrX2hw
X3JlY29yZF90KSk7Ci0JYXNzZXJ0KHJlY29yZCk7Ci0KLQlzbG90cyA9IG1hbGxvYyhDS19IUF9G
SUZPX1NMT1RTX1NJWkUpOwotCWFzc2VydChzbG90cyk7Ci0KLSAgICAgICAgLyogZGlmZmVyZW50
IHNlZWQgZm9yIGVhY2ggdGhyZWFkICovCi0Jc2VlZCA9IDEzMzc7IC8qKHVuc2lnbmVkIGludCkg
cHRocmVhZF9zZWxmKCk7ICovCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBzdWJzY3Jp
YmVzIHRoZSB0aHJlYWQgdG8gdGhlIGZpZm9faHAgc3RhdGUgdXNpbmcgdGhlIHRocmVhZC1vd25l
ZAotICAgICAgICAgKiByZWNvcmQuCi0gICAgICAgICAqIEZJRk8gcXVldWUgbmVlZHMgMiBoYXph
cmQgcG9pbnRlcnMuCi0gICAgICAgICAqLwotICAgICAgICBja19ocF9yZWdpc3RlcigmZmlmb19o
cCwgcmVjb3JkLCBzbG90cyk7Ci0KLQkvKiBzdGFydCBiYXJyaWVyICovCi0JY2tfcHJfaW5jX3Vp
bnQoJnN0YXJ0X2JhcnJpZXIpOwotCXdoaWxlIChja19wcl9sb2FkX3VpbnQoJnN0YXJ0X2JhcnJp
ZXIpIDwgdGhyZWFkX2NvdW50ICsgMSkKLQkJY2tfcHJfc3RhbGwoKTsKLQotCS8qIDUwLzUwIGVu
cXVldWUtZGVxdWV1ZSAqLwotCWZvcihqID0gMDsgaiA8IGVsZW1lbnRfY291bnQ7IGorKykgewot
CQkvKiByYW5kX3Igd2l0aCB0aHJlYWQgbG9jYWwgc3RhdGUgc2hvdWxkIGJlIHRocmVhZCBzYWZl
ICovCi0JCWlmKCA1MCA8ICgxKyhpbnQpICgxMDAuMCpjb21tb25fcmFuZF9yKCZzZWVkKS8oUkFO
RF9NQVgrMS4wKSkpKSB7Ci0JCQkvKiBUaGlzIGlzIHRoZSBjb250YWluZXIgZm9yIHRoZSBlbnF1
ZXVlZCBkYXRhLiAqLwotICAgICAgICAJCWZpZm9fZW50cnkgPSBtYWxsb2Moc2l6ZW9mKGNrX2hw
X2ZpZm9fZW50cnlfdCkpOwotCi0gICAgICAgIAkJaWYgKGZpZm9fZW50cnkgPT0gTlVMTCkgewot
ICAgICAgICAJICAgICAgICAJZXhpdChFWElUX0ZBSUxVUkUpOwotCQkJfQotCi0gICAgICAgIAkJ
LyogVGhpcyBpcyB0aGUgZGF0YS4gKi8KLSAgICAgICAgCQllbnRyeSA9IG1hbGxvYyhzaXplb2Yo
c3RydWN0IGVudHJ5KSk7Ci0gICAgICAgIAkJaWYgKGVudHJ5ICE9IE5VTEwpIHsKLSAgICAgICAg
CSAgICAgICAgCWVudHJ5LT52YWx1ZSA9IGo7Ci0JCQl9Ci0KLSAgICAgICAgCSAgICAgICAvKgot
ICAgICAgICAJIAkqIEVucXVldWUgdGhlIHZhbHVlIG9mIHRoZSBwb2ludGVyIGVudHJ5IGludG8g
RklGTyBxdWV1ZSB1c2luZyB0aGUKLSAgICAgICAgCSAJKiBjb250YWluZXIgZmlmb19lbnRyeS4K
LSAgICAgICAgCSAJKi8KLSAgICAgICAgCQlja19ocF9maWZvX2VucXVldWVfbXBtYyhyZWNvcmQs
ICZmaWZvLCBmaWZvX2VudHJ5LCBlbnRyeSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotICAgICAgICAJ
CSAqIGNrX2hwX2ZpZm9fZGVxdWV1ZV9tcG1jIHdpbGwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUg
Zmlyc3QgdW51c2VkIG5vZGUgYW5kIHN0b3JlCi0gICAgICAgIAkJICogdGhlIHZhbHVlIG9mIHRo
ZSBmaXJzdCBwb2ludGVyIGluIHRoZSBGSUZPIHF1ZXVlIGluIGVudHJ5LgotICAgICAgICAJCSAq
LwotICAJCSAgICAgIAlmaWZvX2VudHJ5ID0gY2tfaHBfZmlmb19kZXF1ZXVlX21wbWMocmVjb3Jk
LCAmZmlmbywgJmVudHJ5KTsKLSAgICAgICAgCQlpZiAoZmlmb19lbnRyeSAhPSBOVUxMKSB7Ci0g
ICAgICAgICAgICAgICAJCSAJLyoKLSAgICAgICAgICAgICAgIAkJIAkgKiBTYWZlbHkgcmVjbGFp
bSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGZpZm9fZW50cnkuCi0gICAgICAgICAgICAgICAgCQkg
KiBUaGlzIGluc2VydHMgZ2FyYmFnZSBpbnRvIGEgbG9jYWwgbGlzdC4gT25jZSB0aGUgbGlzdCAo
cGxpc3QpIHJlYWNoZXMKLSAgICAgIAkJCSAgICAgICAJICogYSBsZW5ndGggb2YgMTAwLCBja19o
cF9mcmVlIHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIGFsbCByZWZlcmVuY2VzCi0gICAgICAgICAg
ICAgICAgCQkgKiB0byBvYmplY3RzIG9uIHRoZSBsaXN0LgotICAgICAgICAJCSAgICAgICAJICov
Ci0gICAgICAgICAgICAgICAgCQlja19ocF9mcmVlKHJlY29yZCwgJmZpZm9fZW50cnktPmhhemFy
ZCwgZmlmb19lbnRyeSwgZmlmb19lbnRyeSk7Ci0gICAgICAgIAkJfQotCQl9Ci0JfQotCi0JLyog
ZW5kIGJhcnJpZXIgKi8KLQlja19wcl9pbmNfdWludCgmZW5kX2JhcnJpZXIpOwotCXdoaWxlIChj
a19wcl9sb2FkX3VpbnQoJmVuZF9iYXJyaWVyKSA8IHRocmVhZF9jb3VudCArIDEpCi0JCWNrX3By
X3N0YWxsKCk7Ci0KLSAgICAgICAJcmV0dXJuIE5VTEw7Ci19Ci0KLWludAotbWFpbihpbnQgYXJn
YywgY2hhcioqIGFyZ3YpCi17Ci0gICAgICAgIGNrX2hwX2ZpZm9fZW50cnlfdCAqc3R1YjsKLSAg
ICAgICAgdW5zaWduZWQgbG9uZyBlbGVtZW50X2NvdW50LCBpOwotCXB0aHJlYWRfdCAqdGhyOwot
Ci0gICAgICAgIGlmIChhcmdjICE9IDMpIHsKLSAgICAgICAgCWNrX2Vycm9yKCJVc2FnZTogY2t0
ZXN0IDx0aHJlYWRfY291bnQ+IDxlbGVtZW50X2NvdW50PlxuIik7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvKiBHZXQgZWxlbWVudCBjb3VudCBmcm9tIGFyZ3VtZW50ICovCi0gICAgICAgIGVsZW1l
bnRfY291bnQgPSBhdG9pKGFyZ3ZbMl0pOwotCi0JLyogR2V0IGVsZW1lbnQgY291bnQgZnJvbSBh
cmd1bWVudCAqLwotICAgICAgICB0aHJlYWRfY291bnQgPSBhdG9pKGFyZ3ZbMV0pOwotCi0JLyog
cHRocmVhZCBoYW5kbGVzICovCi0JdGhyID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogdGhy
ZWFkX2NvdW50KTsKLQotCS8qIGFycmF5IGZvciBsb2NhbCBvcGVyYXRpb24gY291bnQgKi8KLQlj
b3VudCA9IG1hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZyAqKSAqIHRocmVhZF9jb3VudCk7Ci0K
LSAgICAgICAgLyoKLSAgICAgICAgICogSW5pdGlhbGl6ZSBnbG9iYWwgaGF6YXJkIHBvaW50ZXIg
c2FmZSBtZW1vcnkgcmVjbGFtYXRpb24gdG8gZXhlY3V0ZSBmcmVlKCkKLSAgICAgICAgICogd2hl
biBhIGZpZm9fZW50cnkgaXMgc2FmZSB0byBiZSBkZWxldGVkLgotICAgICAgICAgKiBIYXphcmQg
cG9pbnRlciBzY2FuIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgdGhyZWFkIGxvY2Fs
IGludGVybiBwbGlzdCdzCi0gICAgICAgICAqIHNpemUgZXhjZWVkIDEwMCBlbnRyaWVzLgotICAg
ICAgICAgKi8KLQotCS8qIEZJRk8gcXVldWUgbmVlZHMgMiBoYXphcmQgcG9pbnRlcnMgKi8KLQlj
a19ocF9pbml0KCZmaWZvX2hwLCBDS19IUF9GSUZPX1NMT1RTX0NPVU5ULCAxMDAsIGRlc3RydWN0
b3IpOwotCi0gICAgICAgIC8qIFRoZSBGSUZPIHJlcXVpcmVzIG9uZSBzdHViIGVudHJ5IG9uIGlu
aXRpYWxpemF0aW9uLiAqLwotICAgICAgICBzdHViID0gbWFsbG9jKHNpemVvZihja19ocF9maWZv
X2VudHJ5X3QpKTsKLQotICAgICAgICAvKiBCZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgc3R1YiBp
cyBOVUxMLiAqLwotICAgICAgICBpZiAoc3R1YiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAg
ZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotICAgICAgICAvKiBUaGlzIGlzIGNhbGxlZCBvbmNl
IHRvIGluaXRpYWxpemUgdGhlIGZpZm8uICovCi0gICAgICAgIGNrX2hwX2ZpZm9faW5pdCgmZmlm
bywgc3R1Yik7Ci0KLQkvKiBDcmVhdGUgdGhyZWFkcyAqLwotCWZvciAoaSA9IDA7IGkgPCB0aHJl
YWRfY291bnQ7IGkrKykgewotCQljb3VudFtpXSA9IChlbGVtZW50X2NvdW50ICsgaSkgLyB0aHJl
YWRfY291bnQ7Ci0JCWlmIChwdGhyZWFkX2NyZWF0ZSgmdGhyW2ldLCBOVUxMLCBxdWV1ZV81MF81
MCwgKHZvaWQgKikgJmNvdW50W2ldKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICAgICAgICAgICAgICB9Ci0JfQotCi0JLyogc3RhcnQgYmFycmllciAq
LwotCWNrX3ByX2luY191aW50KCZzdGFydF9iYXJyaWVyKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF91
aW50KCZzdGFydF9iYXJyaWVyKSA8IHRocmVhZF9jb3VudCArIDEpOwotCi0JLyogZW5kIGJhcnJp
ZXIgKi8KLQlja19wcl9pbmNfdWludCgmZW5kX2JhcnJpZXIpOwotCXdoaWxlIChja19wcl9sb2Fk
X3VpbnQoJmVuZF9iYXJyaWVyKSA8IHRocmVhZF9jb3VudCArIDEpOwotCi0JLyogSm9pbiB0aHJl
YWRzICovCi0JZm9yIChpID0gMDsgaSA8IHRocmVhZF9jb3VudDsgaSsrKQotCQlwdGhyZWFkX2pv
aW4odGhyW2ldLCBOVUxMKTsKLQotICAgICAgICByZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHAvdmFsaWRh
dGUvY2tfaHBfc3RhY2suYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jl
c3Npb25zL2NrX2hwL3ZhbGlkYXRlL2NrX2hwX3N0YWNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGFkOWI5MjdhMTRmY2Q4MGYzMzU5MDZmNzc0Y2I5Y2Q1OWM4MTYwOTMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHAvdmFsaWRhdGUvY2tfaHBfc3RhY2su
YworKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAt
MjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
Ci0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4K
LSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxp
Yi5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRl
IDxzeXMvdGltZS5oPgotCi0jaW5jbHVkZSA8Y2tfYmFja29mZi5oPgotI2luY2x1ZGUgPGNrX2Nj
Lmg+Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8
c3RkZGVmLmg+Ci0jaW5jbHVkZSA8Y2tfaHAuaD4KLSNpbmNsdWRlIDxja19zdGFjay5oPgotI2lu
Y2x1ZGUgPGNrX2hwX3N0YWNrLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIKLQotc3Rh
dGljIHVuc2lnbmVkIGludCB0aHJlc2hvbGQ7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG5fdGhyZWFk
czsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYmFycmllcjsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZV9i
YXJyaWVyOwotCi0jaWZuZGVmIFBBSVJTCi0jZGVmaW5lIFBBSVJTIDUwMDAwMDAKLSNlbmRpZgot
Ci1zdHJ1Y3Qgbm9kZSB7Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCWNrX2hwX2hhemFyZF90IGhh
emFyZDsKLQlja19zdGFja19lbnRyeV90IHN0YWNrX2VudHJ5OwotfTsKLXN0YXRpYyBja19zdGFj
a190IHN0YWNrID0ge05VTEwsIE5VTEx9Owotc3RhdGljIGNrX2hwX3Qgc3RhY2tfaHA7Ci1DS19T
VEFDS19DT05UQUlORVIoc3RydWN0IG5vZGUsIHN0YWNrX2VudHJ5LCBzdGFja19jb250YWluZXIp
Ci1zdGF0aWMgc3RydWN0IGFmZmluaXR5IGE7Ci0KLXN0YXRpYyB2b2lkICoKLXRocmVhZCh2b2lk
ICp1bnVzZWQgQ0tfQ0NfVU5VU0VEKQotewotCXN0cnVjdCBub2RlICoqZW50cnksICplOwotCXVu
c2lnbmVkIGludCBpOwotCWNrX2hwX3JlY29yZF90IHJlY29yZDsKLQl2b2lkICoqcG9pbnRlcnM7
Ci0JY2tfc3RhY2tfZW50cnlfdCAqczsKLQotCXVudXNlZCA9IE5VTEw7Ci0JcG9pbnRlcnMgPSBt
YWxsb2Moc2l6ZW9mKHZvaWQgKikpOwotCWNrX2hwX3JlZ2lzdGVyKCZzdGFja19ocCwgJnJlY29y
ZCwgcG9pbnRlcnMpOwotCi0JaWYgKGFmZl9pdGVyYXRlKCZhKSkgewotCQlwZXJyb3IoIkVSUk9S
OiBmYWlsZWQgdG8gYWZmaW5lIHRocmVhZCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQot
Ci0JZW50cnkgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlICopICogUEFJUlMpOwotCWlmIChl
bnRyeSA9PSBOVUxMKSB7Ci0JCWNrX2Vycm9yKCJGYWlsZWQgYWxsb2NhdGlvbi5cbiIpOwotCX0K
LQotCWZvciAoaSA9IDA7IGkgPCBQQUlSUzsgaSsrKSB7Ci0JCWVudHJ5W2ldID0gbWFsbG9jKHNp
emVvZihzdHJ1Y3Qgbm9kZSkpOwotCQlpZiAoZW50cnkgPT0gTlVMTCkgewotCQkJY2tfZXJyb3Io
IkZhaWxlZCBpbmRpdmlkdWFsIGFsbG9jYXRpb25cbiIpOwotCQl9Ci0JfQotCi0JY2tfcHJfaW5j
X3VpbnQoJmJhcnJpZXIpOwotCXdoaWxlIChja19wcl9sb2FkX3VpbnQoJmJhcnJpZXIpIDwgbl90
aHJlYWRzKQotCQlja19wcl9zdGFsbCgpOwotCi0JZm9yIChpID0gMDsgaSA8IFBBSVJTOyBpKysp
IHsKLQkJY2tfaHBfc3RhY2tfcHVzaF9tcG1jKCZzdGFjaywgJmVudHJ5W2ldLT5zdGFja19lbnRy
eSk7Ci0JCXMgPSBja19ocF9zdGFja19wb3BfbXBtYygmcmVjb3JkLCAmc3RhY2spOwotCQllID0g
c3RhY2tfY29udGFpbmVyKHMpOwotCQlja19ocF9mcmVlKCZyZWNvcmQsICZlLT5oYXphcmQsIGUs
IHMpOwotCX0KLQotCWNrX3ByX2luY191aW50KCZlX2JhcnJpZXIpOwotCXdoaWxlIChja19wcl9s
b2FkX3VpbnQoJmVfYmFycmllcikgPCBuX3RocmVhZHMpCi0JCWNrX3ByX3N0YWxsKCk7Ci0KLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJQZWFrOiAldSAoJTIuMmYlJSlcblJlY2xhbWF0aW9uczog
JSIgUFJJdTY0ICJcblxuIiwKLSAgICAgICAgICAgICAgICByZWNvcmQubl9wZWFrLAotCQkoZG91
YmxlKXJlY29yZC5uX3BlYWsgLyBQQUlSUyAqIDEwMCwKLQkJcmVjb3JkLm5fcmVjbGFtYXRpb25z
KTsKLQotCWNrX2hwX2NsZWFyKCZyZWNvcmQpOwotCWNrX2hwX3B1cmdlKCZyZWNvcmQpOwotCi0g
ICAgICAgIGNrX3ByX2luY191aW50KCZlX2JhcnJpZXIpOwotICAgICAgICB3aGlsZSAoY2tfcHJf
bG9hZF91aW50KCZlX2JhcnJpZXIpIDwgKG5fdGhyZWFkcyA8PCAxKSk7Ci0KLSAgICAgICAgaWYg
KHJlY29yZC5uX3BlbmRpbmcgIT0gMCkgewotICAgICAgICAgICAgICAgIGNrX2Vycm9yKCJFUlJP
UjogJXUgcGVuZGluZywgZXhwZWN0aW5nIG5vbmUuXG4iLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWNvcmQubl9wZW5kaW5nKTsKLSAgICAgICAgfQotCi0JcmV0dXJuIChOVUxM
KTsKLX0KLQotc3RhdGljIHZvaWQKLWRlc3RydWN0b3Iodm9pZCAqcCkKLXsKLQotCWZyZWUocCk7
Ci0JcmV0dXJuOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQl1
bnNpZ25lZCBpbnQgaTsKLQlwdGhyZWFkX3QgKnRocmVhZHM7Ci0KLQlpZiAoYXJnYyAhPSA0KSB7
Ci0JCWNrX2Vycm9yKCJVc2FnZTogc3RhY2sgPHRocmVhZHM+IDx0aHJlc2hvbGQ+IDxkZWx0YT5c
biIpOwotCX0KLQotCW5fdGhyZWFkcyA9IGF0b2koYXJndlsxXSk7Ci0JdGhyZXNob2xkID0gYXRv
aShhcmd2WzJdKTsKLQlhLmRlbHRhID0gYXRvaShhcmd2WzNdKTsKLQlhLnJlcXVlc3QgPSAwOwot
Ci0JdGhyZWFkcyA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG5fdGhyZWFkcyk7Ci0KLQlj
a19ocF9pbml0KCZzdGFja19ocCwgMSwgdGhyZXNob2xkLCBkZXN0cnVjdG9yKTsKLQotCWZvciAo
aSA9IDA7IGkgPCBuX3RocmVhZHM7IGkrKykKLQkJcHRocmVhZF9jcmVhdGUodGhyZWFkcyArIGks
IE5VTEwsIHRocmVhZCwgTlVMTCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbl90aHJlYWRzOyBpKysp
Ci0JCXB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsKLQotCXJldHVybiAoMCk7Ci19CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9j
a19ocC92YWxpZGF0ZS9uYmRzX2hhel90ZXN0LmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9ja19ocC92YWxpZGF0ZS9uYmRzX2hhel90ZXN0LmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliODVlNzYyYjE4ODg1MWYyNWI3ODAyMDkwNmM0ZGJm
NjkwYWQ3ODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHAvdmFsaWRh
dGUvbmJkc19oYXpfdGVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgMjAxMC0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV
VEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdF
LgotICovCi0KLS8qCi0gKiBUaGlzIGlzIGEgdW5pdCB0ZXN0IHNpbWlsYXIgdG8gdGhlIGltcGxl
bWVudGF0aW9uIGluIEpvaG4gRHlibmlzJ3MgbmJkcwotICogdGVzdC4KLSAqLwotCi0jaW5jbHVk
ZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgot
I2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRp
by5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNpbmNsdWRl
IDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotCi0jaW5jbHVkZSA8Y2tfcHIuaD4K
LQotI2luY2x1ZGUgPGNrX2JhY2tvZmYuaD4KLSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUg
PGNrX3ByLmg+Ci0jaW5jbHVkZSA8c3RkYm9vbC5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2lu
Y2x1ZGUgPGNrX2hwLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIKLQotI2RlZmluZSBT
VEFDS19DT05UQUlORVIoVCwgTSwgTikgQ0tfQ0NfQ09OVEFJTkVSKHN0YWNrX2VudHJ5X3QsIFQs
IE0sIE4pCi0KLXN0cnVjdCBzdGFja19lbnRyeSB7Ci0Jc3RydWN0IHN0YWNrX2VudHJ5ICpuZXh0
OwotfSBDS19DQ19BTElHTig4KTsKLXR5cGVkZWYgc3RydWN0IHN0YWNrX2VudHJ5IHN0YWNrX2Vu
dHJ5X3Q7Ci0KLXN0cnVjdCBzdGFjayB7Ci0Jc3RydWN0IHN0YWNrX2VudHJ5ICpoZWFkOwotCWNo
YXIgKmdlbmVyYXRpb247Ci19IENLX0NDX1BBQ0tFRCBDS19DQ19BTElHTigxNik7Ci10eXBlZGVm
IHN0cnVjdCBzdGFjayBocF9zdGFja190OwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHRocmVzaG9s
ZDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbl90aHJlYWRzOwotc3RhdGljIHVuc2lnbmVkIGludCBi
YXJyaWVyOwotc3RhdGljIHVuc2lnbmVkIGludCBlX2JhcnJpZXI7Ci1zdGF0aWMgdW5zaWduZWQg
aW50IGdsb2JhbF90aWQ7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHBvcHM7Ci1zdGF0aWMgdW5zaWdu
ZWQgaW50IHB1c2hzOwotCi0jaWZuZGVmIFBBSVJTCi0jZGVmaW5lIFBBSVJTIDEwMDAwMDAKLSNl
bmRpZgotCi1zdHJ1Y3Qgbm9kZSB7Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCWNrX2hwX2hhemFy
ZF90IGhhemFyZDsKLQlzdGFja19lbnRyeV90IHN0YWNrX2VudHJ5OwotfTsKLWhwX3N0YWNrX3Qg
c3RhY2sgPSB7TlVMTCwgTlVMTH07Ci1ja19ocF90IHN0YWNrX2hwOwotCi1TVEFDS19DT05UQUlO
RVIoc3RydWN0IG5vZGUsIHN0YWNrX2VudHJ5LCBzdGFja19jb250YWluZXIpCi1zdGF0aWMgc3Ry
dWN0IGFmZmluaXR5IGE7Ci0KLS8qCi0gKiBTdGFjayBwcm9kdWNlciBvcGVyYXRpb24gc2FmZSBm
b3IgbXVsdGlwbGUgdW5pcXVlIHByb2R1Y2VycyBhbmQgbXVsdGlwbGUgY29uc3VtZXJzLgotICov
Ci1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLXN0YWNrX3B1c2hfbXBtYyhzdHJ1Y3Qgc3RhY2sg
KnRhcmdldCwgc3RydWN0IHN0YWNrX2VudHJ5ICplbnRyeSkKLXsKLQlzdHJ1Y3Qgc3RhY2tfZW50
cnkgKmxzdGFjazsKLQlja19iYWNrb2ZmX3QgYmFja29mZiA9IENLX0JBQ0tPRkZfSU5JVElBTEla
RVI7Ci0KLQlsc3RhY2sgPSBja19wcl9sb2FkX3B0cigmdGFyZ2V0LT5oZWFkKTsKLQlja19wcl9z
dG9yZV9wdHIoJmVudHJ5LT5uZXh0LCBsc3RhY2spOwotCWNrX3ByX2ZlbmNlX3N0b3JlKCk7Ci0K
LQl3aGlsZSAoY2tfcHJfY2FzX3B0cl92YWx1ZSgmdGFyZ2V0LT5oZWFkLCBsc3RhY2ssIGVudHJ5
LCAmbHN0YWNrKSA9PSBmYWxzZSkgewotCQlja19wcl9zdG9yZV9wdHIoJmVudHJ5LT5uZXh0LCBs
c3RhY2spOwotCQlja19wcl9mZW5jZV9zdG9yZSgpOwotCQlja19iYWNrb2ZmX2ViKCZiYWNrb2Zm
KTsKLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBTdGFjayBjb25zdW1lciBvcGVyYXRpb24g
c2FmZSBmb3IgbXVsdGlwbGUgdW5pcXVlIHByb2R1Y2VycyBhbmQgbXVsdGlwbGUgY29uc3VtZXJz
LgotICovCi1DS19DQ19JTkxJTkUgc3RhdGljIHN0cnVjdCBzdGFja19lbnRyeSAqCi1zdGFja19w
b3BfbXBtYyhja19ocF9yZWNvcmRfdCAqcmVjb3JkLCBzdHJ1Y3Qgc3RhY2sgKnRhcmdldCkKLXsK
LQlzdHJ1Y3Qgc3RhY2tfZW50cnkgKmVudHJ5OwotCWNrX2JhY2tvZmZfdCBiYWNrb2ZmID0gQ0tf
QkFDS09GRl9JTklUSUFMSVpFUjsKLQotCWRvIHsKLQkJZW50cnkgPSBja19wcl9sb2FkX3B0cigm
dGFyZ2V0LT5oZWFkKTsKLQkJaWYgKGVudHJ5ID09IE5VTEwpCi0JCQlyZXR1cm4gKE5VTEwpOwot
Ci0JCWNrX2hwX3NldF9mZW5jZShyZWNvcmQsIDAsIGVudHJ5KTsKLQl9IHdoaWxlIChlbnRyeSAh
PSBja19wcl9sb2FkX3B0cigmdGFyZ2V0LT5oZWFkKSk7Ci0KLQl3aGlsZSAoY2tfcHJfY2FzX3B0
cl92YWx1ZSgmdGFyZ2V0LT5oZWFkLCBlbnRyeSwgZW50cnktPm5leHQsICZlbnRyeSkgPT0gZmFs
c2UpIHsKLQkJaWYgKGNrX3ByX2xvYWRfcHRyKCZlbnRyeSkgPT0gTlVMTCkKLQkJCWJyZWFrOwot
Ci0JCWNrX2hwX3NldF9mZW5jZShyZWNvcmQsIDAsIGVudHJ5KTsKLQkJaWYgKGVudHJ5ICE9IGNr
X3ByX2xvYWRfcHRyKCZ0YXJnZXQtPmhlYWQpKQotCQkJY29udGludWU7Ci0KLQkJY2tfYmFja29m
Zl9lYigmYmFja29mZik7Ci0JfQotCi0JcmV0dXJuIChlbnRyeSk7Ci19Ci0KLXN0YXRpYyB2b2lk
ICoKLXRocmVhZCh2b2lkICp1bnVzZWQgQ0tfQ0NfVU5VU0VEKQotewotCXN0cnVjdCBub2RlICpl
bnRyeSwgKmU7Ci0JdW5zaWduZWQgaW50IGk7Ci0JY2tfaHBfcmVjb3JkX3QgcmVjb3JkOwotCXZv
aWQgKipwb2ludGVyczsKLQlzdGFja19lbnRyeV90ICpzOwotCXVuc2lnbmVkIGludCB0aWQgPSBj
a19wcl9mYWFfdWludCgmZ2xvYmFsX3RpZCwgMSkgKyAxOwotCXVuc2lnbmVkIGludCByID0gKHVu
c2lnbmVkIGludCkodGlkICsgMSkgKiAweDViZDFlOTk1OwotCi0JdW51c2VkID0gTlVMTDsKLQlw
b2ludGVycyA9IG1hbGxvYyhzaXplb2Yodm9pZCAqKSk7Ci0JY2tfaHBfcmVnaXN0ZXIoJnN0YWNr
X2hwLCAmcmVjb3JkLCBwb2ludGVycyk7Ci0KLQlpZiAoYWZmX2l0ZXJhdGUoJmEpKSB7Ci0JCXBl
cnJvcigiRVJST1I6IGZhaWxlZCB0byBhZmZpbmUgdGhyZWFkIik7Ci0JCWV4aXQoRVhJVF9GQUlM
VVJFKTsKLQl9Ci0KLQlja19wcl9pbmNfdWludCgmYmFycmllcik7Ci0Jd2hpbGUgKGNrX3ByX2xv
YWRfdWludCgmYmFycmllcikgPCBuX3RocmVhZHMpCi0JCWNrX3ByX3N0YWxsKCk7Ci0KLQlmb3Ig
KGkgPSAwOyBpIDwgUEFJUlM7IGkrKykgewotCQlyIF49IHIgPDwgNjsgciBePSByID4+IDIxOyBy
IF49IHIgPDwgNzsKLQotCQlpZiAociAmIDB4MTAwMCkgewotCQkJZW50cnkgPSBtYWxsb2Moc2l6
ZW9mKHN0cnVjdCBub2RlKSk7Ci0JCQlhc3NlcnQoZW50cnkpOwotCQkJc3RhY2tfcHVzaF9tcG1j
KCZzdGFjaywgJmVudHJ5LT5zdGFja19lbnRyeSk7Ci0JCQlja19wcl9pbmNfdWludCgmcHVzaHMp
OwotCQl9IGVsc2UgewotCQkJcyA9IHN0YWNrX3BvcF9tcG1jKCZyZWNvcmQsICZzdGFjayk7Ci0J
CQlpZiAocyA9PSBOVUxMKQotCQkJCWNvbnRpbnVlOwotCi0JCQllID0gc3RhY2tfY29udGFpbmVy
KHMpOwotCQkJY2tfaHBfZnJlZSgmcmVjb3JkLCAmZS0+aGF6YXJkLCBlLCBzKTsKLQkJCWNrX3By
X2luY191aW50KCZwb3BzKTsKLQkJfQotCX0KLQotCWNrX3ByX2luY191aW50KCZlX2JhcnJpZXIp
OwotCXdoaWxlIChja19wcl9sb2FkX3VpbnQoJmVfYmFycmllcikgPCBuX3RocmVhZHMpOwotCi0J
cmV0dXJuIChOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlc3RydWN0b3Iodm9pZCAqcCkKLXsK
LQlmcmVlKHApOwotCXJldHVybjsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2
W10pCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JcHRocmVhZF90ICp0aHJlYWRzOwotCi0JaWYgKGFy
Z2MgIT0gNCkgewotCQlja19lcnJvcigiVXNhZ2U6IHN0YWNrIDx0aHJlYWRzPiA8dGhyZXNob2xk
PiA8ZGVsdGE+XG4iKTsKLQl9Ci0KLQluX3RocmVhZHMgPSBhdG9pKGFyZ3ZbMV0pOwotCXRocmVz
aG9sZCA9IGF0b2koYXJndlsyXSk7Ci0JYS5kZWx0YSA9IGF0b2koYXJndlszXSk7Ci0JYS5yZXF1
ZXN0ID0gMDsKLQotCXRocmVhZHMgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBuX3RocmVh
ZHMpOwotCi0JY2tfaHBfaW5pdCgmc3RhY2tfaHAsIDEsIHRocmVzaG9sZCwgZGVzdHJ1Y3Rvcik7
Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbl90aHJlYWRzOyBpKyspCi0JCXB0aHJlYWRfY3JlYXRlKHRo
cmVhZHMgKyBpLCBOVUxMLCB0aHJlYWQsIE5VTEwpOwotCi0JZm9yIChpID0gMDsgaSA8IG5fdGhy
ZWFkczsgaSsrKQotCQlwdGhyZWFkX2pvaW4odGhyZWFkc1tpXSwgTlVMTCk7Ci0KLQlmcHJpbnRm
KHN0ZGVyciwgIlB1c2g6ICV1XG5Qb3A6ICV1XG4iLCBwdXNocywgcG9wcyk7Ci0JcmV0dXJuICgw
KTsKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jl
c3Npb25zL2NrX2hwL3ZhbGlkYXRlL3NlcmlhbC5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHAvdmFsaWRhdGUvc2VyaWFsLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGZkMzE1ODE3YWY1MTI5ZjZhNTY4OTQ2OWNlZTk1ZTc1MjI5Mzlm
ZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHAvdmFsaWRhdGUvc2Vy
aWFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAy
MDEwLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxwdGhyZWFk
Lmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxz
dGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5j
bHVkZSA8c3lzL3RpbWUuaD4KLQotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlIDxzdGRk
ZWYuaD4KLSNpbmNsdWRlIDxja19ocC5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0K
LXN0cnVjdCBlbnRyeSB7Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCWNrX2hwX2hhemFyZF90IGhh
emFyZDsKLX07Ci0KLXN0YXRpYyB2b2lkCi1kZXN0cnVjdG9yKHZvaWQgKnBvaW50ZXIpCi17Ci0K
LQlmcHJpbnRmKHN0ZGVyciwgIkZyZWUgJXBcbiIsIHBvaW50ZXIpOwotCWZyZWUocG9pbnRlcik7
Ci0JcmV0dXJuOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlj
a19ocF90IHN0YXRlOwotCWNrX2hwX3JlY29yZF90IHJlY29yZFsyXTsKLQl2b2lkICoqcG9pbnRl
cnM7Ci0Jc3RydWN0IGVudHJ5ICplbnRyeSwgKm90aGVyOwotCi0JKHZvaWQpYXJnYzsKLQkodm9p
ZClhcmd2OwotCi0JY2tfaHBfaW5pdCgmc3RhdGUsIDEsIDEsIGRlc3RydWN0b3IpOwotCi0JcG9p
bnRlcnMgPSBtYWxsb2Moc2l6ZW9mKHZvaWQgKikpOwotCWlmIChwb2ludGVycyA9PSBOVUxMKSB7
Ci0JCWNrX2Vycm9yKCJFUlJPUjogRmFpbGVkIHRvIGFsbG9jYXRlIHNsb3QuXG4iKTsKLQl9Ci0J
Y2tfaHBfcmVnaXN0ZXIoJnN0YXRlLCAmcmVjb3JkWzBdLCBwb2ludGVycyk7Ci0JY2tfaHBfcmVj
bGFpbSgmcmVjb3JkWzBdKTsKLQotCWVudHJ5ID0gbWFsbG9jKHNpemVvZiAqZW50cnkpOwotCWNr
X2hwX3NldCgmcmVjb3JkWzBdLCAwLCBlbnRyeSk7Ci0JY2tfaHBfcmVjbGFpbSgmcmVjb3JkWzBd
KTsKLQlja19ocF9mcmVlKCZyZWNvcmRbMF0sICZlbnRyeS0+aGF6YXJkLCBlbnRyeSwgZW50cnkp
OwotCWNrX2hwX3JlY2xhaW0oJnJlY29yZFswXSk7Ci0JY2tfaHBfc2V0KCZyZWNvcmRbMF0sIDAs
IE5VTEwpOwotCWNrX2hwX3JlY2xhaW0oJnJlY29yZFswXSk7Ci0KLQllbnRyeSA9IG1hbGxvYyhz
aXplb2YgKmVudHJ5KTsKLQlja19ocF9zZXQoJnJlY29yZFswXSwgMCwgZW50cnkpOwotCWNrX2hw
X3JlY2xhaW0oJnJlY29yZFswXSk7Ci0JY2tfaHBfZnJlZSgmcmVjb3JkWzBdLCAmZW50cnktPmhh
emFyZCwgZW50cnksIGVudHJ5KTsKLQlja19ocF9yZWNsYWltKCZyZWNvcmRbMF0pOwotCWNrX2hw
X3NldCgmcmVjb3JkWzBdLCAwLCBOVUxMKTsKLQlja19ocF9yZWNsYWltKCZyZWNvcmRbMF0pOwot
Ci0JcG9pbnRlcnMgPSBtYWxsb2Moc2l6ZW9mKHZvaWQgKikpOwotCWlmIChwb2ludGVycyA9PSBO
VUxMKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogRmFpbGVkIHRvIGFsbG9jYXRlIHNsb3QuXG4iKTsK
LQl9Ci0JY2tfaHBfcmVnaXN0ZXIoJnN0YXRlLCAmcmVjb3JkWzFdLCBwb2ludGVycyk7Ci0JY2tf
aHBfcmVjbGFpbSgmcmVjb3JkWzFdKTsKLQotCWVudHJ5ID0gbWFsbG9jKHNpemVvZiAqZW50cnkp
OwotCWNrX2hwX3NldCgmcmVjb3JkWzFdLCAwLCBlbnRyeSk7Ci0JY2tfaHBfcmVjbGFpbSgmcmVj
b3JkWzFdKTsKLQlja19ocF9mcmVlKCZyZWNvcmRbMV0sICZlbnRyeS0+aGF6YXJkLCBlbnRyeSwg
ZW50cnkpOwotCWNrX2hwX3JlY2xhaW0oJnJlY29yZFsxXSk7Ci0JY2tfaHBfc2V0KCZyZWNvcmRb
MV0sIDAsIE5VTEwpOwotCWNrX2hwX3JlY2xhaW0oJnJlY29yZFsxXSk7Ci0KLQlwcmludGYoIkFs
bG9jYXRpbmcgZW50cnkgYW5kIGZyZWVpbmcgaW4gb3RoZXIgSFAgcmVjb3JkLi4uXG4iKTsKLQll
bnRyeSA9IG1hbGxvYyhzaXplb2YgKmVudHJ5KTsKLQllbnRyeS0+dmFsdWUgPSA0MjsKLQlja19o
cF9zZXQoJnJlY29yZFswXSwgMCwgZW50cnkpOwotCWNrX2hwX2ZyZWUoJnJlY29yZFsxXSwgJmVu
dHJ5LT5oYXphcmQsIGVudHJ5LCBlbnRyeSk7Ci0JY2tfcHJfc3RvcmVfdWludCgmZW50cnktPnZh
bHVlLCAxKTsKLQotCW90aGVyID0gbWFsbG9jKHNpemVvZiAqb3RoZXIpOwotCW90aGVyLT52YWx1
ZSA9IDI0OwotCWNrX2hwX3NldCgmcmVjb3JkWzFdLCAwLCBvdGhlcik7Ci0JY2tfaHBfZnJlZSgm
cmVjb3JkWzBdLCAmb3RoZXItPmhhemFyZCwgb3RoZXIsIG90aGVyKTsKLQlja19wcl9zdG9yZV91
aW50KCZvdGhlci0+dmFsdWUsIDMyKTsKLQlja19ocF9zZXQoJnJlY29yZFswXSwgMCwgTlVMTCk7
Ci0JY2tfaHBfcmVjbGFpbSgmcmVjb3JkWzFdKTsKLQlja19ocF9zZXQoJnJlY29yZFsxXSwgMCwg
TlVMTCk7Ci0JY2tfaHBfcmVjbGFpbSgmcmVjb3JkWzBdKTsKLQlja19ocF9yZWNsYWltKCZyZWNv
cmRbMV0pOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19ocy9iZW5jaG1hcmsvTWFrZWZpbGUgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19ocy9iZW5jaG1hcmsv
TWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYjY3NDUxMjM3NmIzZTlk
N2MyMmZjZmI4YzEyYjAxN2Q0MjQ1ODguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lv
bnMvY2tfaHMvYmVuY2htYXJrL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBA
QAotLlBIT05ZOiBjbGVhbiBkaXN0cmlidXRpb24KLQotT0JKRUNUUz1zZXJpYWwgcGFyYWxsZWxf
Ynl0ZXN0cmluZyBwYXJhbGxlbF9ieXRlc3RyaW5nLmRlbGV0ZSBhcHBseQotCi1hbGw6ICQoT0JK
RUNUUykKLQotc2VyaWFsOiBzZXJpYWwuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX2hzLmggLi4vLi4v
Li4vc3JjL2NrX2hzLmMKLQkkKENDKSAkKENGTEFHUykgLW8gc2VyaWFsIHNlcmlhbC5jIC4uLy4u
Ly4uL3NyYy9ja19ocy5jCi0KLWFwcGx5OiBhcHBseS5jIC4uLy4uLy4uL2luY2x1ZGUvY2tfaHMu
aCAuLi8uLi8uLi9zcmMvY2tfaHMuYwotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBhcHBseSBhcHBseS5j
IC4uLy4uLy4uL3NyYy9ja19ocy5jCi0KLXBhcmFsbGVsX2J5dGVzdHJpbmc6IHBhcmFsbGVsX2J5
dGVzdHJpbmcuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX2hzLmggLi4vLi4vLi4vc3JjL2NrX2hzLmMg
Li4vLi4vLi4vc3JjL2NrX2Vwb2NoLmMKLQkkKENDKSAkKFBUSFJFQURfQ0ZMQUdTKSAkKENGTEFH
UykgLW8gcGFyYWxsZWxfYnl0ZXN0cmluZyBwYXJhbGxlbF9ieXRlc3RyaW5nLmMgLi4vLi4vLi4v
c3JjL2NrX2hzLmMgLi4vLi4vLi4vc3JjL2NrX2Vwb2NoLmMKLQotcGFyYWxsZWxfYnl0ZXN0cmlu
Zy5kZWxldGU6IHBhcmFsbGVsX2J5dGVzdHJpbmcuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX2hzLmgg
Li4vLi4vLi4vc3JjL2NrX2hzLmMgLi4vLi4vLi4vc3JjL2NrX2Vwb2NoLmMKLQkkKENDKSAkKFBU
SFJFQURfQ0ZMQUdTKSAkKENGTEFHUykgLURIU19ERUxFVEUgLW8gcGFyYWxsZWxfYnl0ZXN0cmlu
Zy5kZWxldGUgcGFyYWxsZWxfYnl0ZXN0cmluZy5jIC4uLy4uLy4uL3NyYy9ja19ocy5jIC4uLy4u
Ly4uL3NyYy9ja19lcG9jaC5jCi0KLWNsZWFuOgotCXJtIC1yZiAqfiAqLm8gJChPQkpFQ1RTKSAq
LmRTWU0gKi5leGUKLQotaW5jbHVkZSAuLi8uLi8uLi9idWlsZC9yZWdyZXNzaW9ucy5idWlsZAot
Q0ZMQUdTKz0tRF9HTlVfU09VUkNFCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19ocy9iZW5jaG1hcmsvYXBwbHkuYyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2hzL2JlbmNobWFyay9hcHBs
eS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTRhM2RhMTIyMjQyZGM3YWUxZTli
MWI2YmVjNzE3ZjlkMDBmYmM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X2hzL2JlbmNobWFyay9hcHBseS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgMjAxNCBTYW15IEFsIEJhaHJhLgotICogQ29weXJpZ2h0IDIwMTQgQmFj
a3RyYWNlIEkvTywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2hzCi0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdocwotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0g
KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
Ci0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8
Y2tfaHMuaD4KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGNrX21hbGxvYy5oPgot
I2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRp
by5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUg
PHRpbWUuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotI2luY2x1ZGUgIi4uLy4uLy4u
L3NyYy9ja19odF9oYXNoLmgiCi0KLXN0YXRpYyBja19oc190IGhzOwotc3RhdGljIGNoYXIgKipr
ZXlzOwotc3RhdGljIHNpemVfdCBrZXlzX2xlbmd0aCA9IDA7Ci1zdGF0aWMgc2l6ZV90IGtleXNf
Y2FwYWNpdHkgPSAxMjg7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBnbG9iYWxfc2VlZDsKLQotc3Rh
dGljIHZvaWQgKgotaHNfbWFsbG9jKHNpemVfdCByKQotewotCi0JcmV0dXJuIG1hbGxvYyhyKTsK
LX0KLQotc3RhdGljIHZvaWQKLWhzX2ZyZWUodm9pZCAqcCwgc2l6ZV90IGIsIGJvb2wgcikKLXsK
LQotCSh2b2lkKWI7Ci0JKHZvaWQpcjsKLQotCWZyZWUocCk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0
YXRpYyBzdHJ1Y3QgY2tfbWFsbG9jIG15X2FsbG9jYXRvciA9IHsKLQkubWFsbG9jID0gaHNfbWFs
bG9jLAotCS5mcmVlID0gaHNfZnJlZQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWhzX2hh
c2goY29uc3Qgdm9pZCAqb2JqZWN0LCB1bnNpZ25lZCBsb25nIHNlZWQpCi17Ci0JY29uc3QgY2hh
ciAqYyA9IG9iamVjdDsKLQl1bnNpZ25lZCBsb25nIGg7Ci0KLQloID0gKHVuc2lnbmVkIGxvbmcp
TXVybXVySGFzaDY0QShjLCBzdHJsZW4oYyksIHNlZWQpOwotCXJldHVybiBoOwotfQotCi1zdGF0
aWMgYm9vbAotaHNfY29tcGFyZShjb25zdCB2b2lkICpwcmV2aW91cywgY29uc3Qgdm9pZCAqY29t
cGFyZSkKLXsKLQotCXJldHVybiBzdHJjbXAocHJldmlvdXMsIGNvbXBhcmUpID09IDA7Ci19Ci0K
LXN0YXRpYyB2b2lkCi1zZXRfZGVzdHJveSh2b2lkKQotewotCi0JY2tfaHNfZGVzdHJveSgmaHMp
OwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNldF9pbml0KHVuc2lnbmVkIGludCBzaXpl
LCB1bnNpZ25lZCBpbnQgbW9kZSkKLXsKLQotCWlmIChja19oc19pbml0KCZocywgQ0tfSFNfTU9E
RV9PQkpFQ1QgfCBDS19IU19NT0RFX1NQTUMgfCBtb2RlLCBoc19oYXNoLCBoc19jb21wYXJlLAot
CSAgICAmbXlfYWxsb2NhdG9yLCBzaXplLCBnbG9iYWxfc2VlZCkgPT0gZmFsc2UpIHsKLQkJcGVy
cm9yKCJja19oc19pbml0Iik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQlyZXR1cm47
Ci19Ci0KLXN0YXRpYyBzaXplX3QKLXNldF9jb3VudCh2b2lkKQotewotCi0JcmV0dXJuIGNrX2hz
X2NvdW50KCZocyk7Ci19Ci0KLXN0YXRpYyBib29sCi1zZXRfcmVzZXQodm9pZCkKLXsKLQotCXJl
dHVybiBja19oc19yZXNldCgmaHMpOwotfQotCi1zdGF0aWMgdm9pZCAqCi10ZXN0X2FwcGx5KHZv
aWQgKmtleSwgdm9pZCAqY2xvc3VyZSkKLXsKLQotCSh2b2lkKWtleTsKLQotCXJldHVybiBjbG9z
dXJlOwotfQotCi1zdGF0aWMgdm9pZAotcnVuX3Rlc3QoY29uc3QgY2hhciAqZmlsZSwgc2l6ZV90
IHIsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgbW9kZSkKLXsKLQlGSUxFICpmcDsK
LQljaGFyIGJ1ZmZlcls1MTJdOwotCXNpemVfdCBpLCBqOwotCXVuc2lnbmVkIGludCBkID0gMDsK
LQl1aW50NjRfdCBzLCBlLCBhLCBncCwgYWdwOwotCXN0cnVjdCBja19oc19zdGF0IHN0OwotCWNo
YXIgKip0OwotCi0Ja2V5cyA9IG1hbGxvYyhzaXplb2YoY2hhciAqKSAqIGtleXNfY2FwYWNpdHkp
OwotCWFzc2VydChrZXlzICE9IE5VTEwpOwotCi0JZnAgPSBmb3BlbihmaWxlLCAiciIpOwotCWFz
c2VydChmcCAhPSBOVUxMKTsKLQotCXdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIp
LCBmcCkgIT0gTlVMTCkgewotCQlidWZmZXJbc3RybGVuKGJ1ZmZlcikgLSAxXSA9ICdcMCc7Ci0J
CWtleXNba2V5c19sZW5ndGgrK10gPSBzdHJkdXAoYnVmZmVyKTsKLQkJYXNzZXJ0KGtleXNba2V5
c19sZW5ndGggLSAxXSAhPSBOVUxMKTsKLQotCQlpZiAoa2V5c19sZW5ndGggPT0ga2V5c19jYXBh
Y2l0eSkgewotCQkJdCA9IHJlYWxsb2Moa2V5cywgc2l6ZW9mKGNoYXIgKikgKiAoa2V5c19jYXBh
Y2l0eSAqPSAyKSk7Ci0JCQlhc3NlcnQodCAhPSBOVUxMKTsKLQkJCWtleXMgPSB0OwotCQl9Ci0J
fQotCi0JdCA9IHJlYWxsb2Moa2V5cywgc2l6ZW9mKGNoYXIgKikgKiBrZXlzX2xlbmd0aCk7Ci0J
YXNzZXJ0KHQgIT0gTlVMTCk7Ci0Ja2V5cyA9IHQ7Ci0KLQlzZXRfaW5pdChzaXplLCBtb2RlKTsK
LQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGgg
PSBDS19IU19IQVNIKCZocywgaHNfaGFzaCwga2V5c1tpXSk7Ci0KLQkJaWYgKGNrX2hzX2dldCgm
aHMsIGgsIGtleXNbaV0pID09IGZhbHNlKSB7Ci0JCQlpZiAoY2tfaHNfcHV0KCZocywgaCwga2V5
c1tpXSkgPT0gZmFsc2UpCi0JCQkJY2tfZXJyb3IoIkVSUk9SOiBGYWlsZWQgZ2V0IHRvIHB1dCB3
b3JrbG9hZC5cbiIpOwotCQl9IGVsc2UgewotCQkJZCsrOwotCQl9Ci0JfQotCWNrX2hzX3N0YXQo
JmhzLCAmc3QpOwotCi0JZnByaW50ZihzdGRlcnIsICIjICV6dSBlbnRyaWVzIHN0b3JlZCwgJXUg
ZHVwbGljYXRlcywgJXUgcHJvYmUuXG4iLAotCSAgICBzZXRfY291bnQoKSwgZCwgc3QucHJvYmVf
bWF4aW11bSk7Ci0KLQlhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsgaisrKSB7Ci0JCWlmIChz
ZXRfcmVzZXQoKSA9PSBmYWxzZSkKLQkJCWNrX2Vycm9yKCJFUlJPUjogRmFpbGVkIHRvIHJlc2V0
IGhhc2ggdGFibGUuXG4iKTsKLQotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtl
eXNfbGVuZ3RoOyBpKyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgaCA9IENLX0hTX0hBU0goJmhzLCBo
c19oYXNoLCBrZXlzW2ldKTsKLQotCQkJaWYgKGNrX2hzX2dldCgmaHMsIGgsIGtleXNbaV0pID09
IGZhbHNlICYmCi0JCQkgICAgY2tfaHNfcHV0KCZocywgaCwga2V5c1tpXSkgPT0gZmFsc2UpIHsK
LQkJCQlja19lcnJvcigiRVJST1I6IEZhaWxlZCBnZXQgdG8gcHV0IHdvcmtsb2FkLlxuIik7Ci0J
CQl9Ci0JCX0KLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAtIHM7Ci0JfQotCWdwID0gYSAvIChy
ICoga2V5c19sZW5ndGgpOwotCi0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewot
CQlpZiAoc2V0X3Jlc2V0KCkgPT0gZmFsc2UpCi0JCQlja19lcnJvcigiRVJST1I6IEZhaWxlZCB0
byByZXNldCBoYXNoIHRhYmxlLlxuIik7Ci0KLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IDA7
IGkgPCBrZXlzX2xlbmd0aDsgaSsrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGggPSBDS19IU19IQVNI
KCZocywgaHNfaGFzaCwga2V5c1tpXSk7Ci0KLQkJCWlmIChja19oc19hcHBseSgmaHMsIGgsIGtl
eXNbaV0sIHRlc3RfYXBwbHksICh2b2lkICopa2V5c1tpXSkgPT0gZmFsc2UpCi0JCQkJY2tfZXJy
b3IoIkVSUk9SOiBGYWlsZWQgaW4gYXBwbHkgd29ya2xvYWQuXG4iKTsKLQkJfQotCQllID0gcmR0
c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9Ci0JYWdwID0gYSAvIChyICoga2V5c19sZW5ndGgpOwot
Ci0JZmNsb3NlKGZwKTsKLQotCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKSB7Ci0J
CWZyZWUoa2V5c1tpXSk7Ci0JfQotCi0JcHJpbnRmKCJHZXQgdG8gcHV0OiAlIiBQUkl1NjQgIiB0
aWNrc1xuIiwgZ3ApOwotCXByaW50ZigiICAgICBBcHBseTogJSIgUFJJdTY0ICIgdGlja3NcbiIs
IGFncCk7Ci0KLQlmcmVlKGtleXMpOwotCWtleXNfbGVuZ3RoID0gMDsKLQlzZXRfZGVzdHJveSgp
OwotCXJldHVybjsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0J
dW5zaWduZWQgaW50IHIsIHNpemU7Ci0KLQljb21tb25fc3JhbmQ0OCgobG9uZyBpbnQpdGltZShO
VUxMKSk7Ci0JaWYgKGFyZ2MgPCAyKSB7Ci0JCWNrX2Vycm9yKCJVc2FnZTogY2tfaHMgPGRpY3Rp
b25hcnk+IFs8cmVwZXRpdGlvbnM+IDxpbml0aWFsIHNpemU+XVxuIik7Ci0JfQotCi0JciA9IDE2
OwotCWlmIChhcmdjID49IDMpCi0JCXIgPSBhdG9pKGFyZ3ZbMl0pOwotCi0Jc2l6ZSA9IDg7Ci0J
aWYgKGFyZ2MgPj0gNCkKLQkJc2l6ZSA9IGF0b2koYXJndlszXSk7Ci0KLQlnbG9iYWxfc2VlZCA9
IGNvbW1vbl9scmFuZDQ4KCk7Ci0JcnVuX3Rlc3QoYXJndlsxXSwgciwgc2l6ZSwgMCk7Ci0KLQlw
cmludGYoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxu
IgotCSAgICAiRGVsZXRlIG1vZGVcbiIKLQkgICAgIj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT1cbiIpOwotCXJ1bl90ZXN0KGFyZ3ZbMV0sIHIsIHNpemUsIENL
X0hTX01PREVfREVMRVRFKTsKLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHMvYmVuY2htYXJrL3BhcmFs
bGVsX2J5dGVzdHJpbmcuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jl
c3Npb25zL2NrX2hzL2JlbmNobWFyay9wYXJhbGxlbF9ieXRlc3RyaW5nLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDNjMzY4NTEwODZlZGQ0YmZhYWVhOWYxYjRhYmRlZDU2YTM2N2Rm
OGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHMvYmVuY2htYXJrL3Bh
cmFsbGVsX2J5dGVzdHJpbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDYwMiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IDIwMTIgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
cwotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHMKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0g
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAot
ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0g
Ki8KLSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIKLSNpbmNsdWRlIDxja19ocy5oPgotI2luY2x1
ZGUgIi4uLy4uLy4uL3NyYy9ja19odF9oYXNoLmgiCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5j
bHVkZSA8Y2tfZXBvY2guaD4KLSNpbmNsdWRlIDxja19tYWxsb2MuaD4KLSNpbmNsdWRlIDxja19w
ci5oPgotI2luY2x1ZGUgPGNrX3NwaW5sb2NrLmg+Ci0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2lu
Y2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHNpZ25h
bC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8
c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1zdGF0
aWMgY2tfaHNfdCBocyBDS19DQ19DQUNIRUxJTkU7Ci1zdGF0aWMgY2hhciAqKmtleXM7Ci1zdGF0
aWMgc2l6ZV90IGtleXNfbGVuZ3RoID0gMDsKLXN0YXRpYyBzaXplX3Qga2V5c19jYXBhY2l0eSA9
IDEyODsKLXN0YXRpYyBja19lcG9jaF90IGVwb2NoX2hzOwotc3RhdGljIGNrX2Vwb2NoX3JlY29y
ZF90IGVwb2NoX3dyOwotc3RhdGljIGludCBuX3RocmVhZHM7Ci1zdGF0aWMgYm9vbCBuZXh0X3N0
YWdlOwotCi1lbnVtIHN0YXRlIHsKLQlIU19TVEFURV9TVE9QID0gMCwKLQlIU19TVEFURV9HRVQs
Ci0JSFNfU1RBVEVfU1RSSUNUX1JFUExBQ0VNRU5ULAotCUhTX1NUQVRFX0RFTEVUSU9OLAotCUhT
X1NUQVRFX1JFUExBQ0VNRU5ULAotCUhTX1NUQVRFX0NPVU5UCi19OwotCi1zdGF0aWMgY2tfc3Bp
bmxvY2tfdCBtdHggPSBDS19TUElOTE9DS19JTklUSUFMSVpFUjsKLXN0YXRpYyBzdHJ1Y3QgYWZm
aW5pdHkgYWZmaW5lcmF0b3IgPSBBRkZJTklUWV9JTklUSUFMSVpFUjsKLXN0YXRpYyB1aW50NjRf
dCBhY2N1bXVsYXRvcltIU19TVEFURV9DT1VOVF07Ci1zdGF0aWMgaW50IGJhcnJpZXJbSFNfU1RB
VEVfQ09VTlRdOwotc3RhdGljIGludCBzdGF0ZTsKLQotc3RydWN0IGhzX2Vwb2NoIHsKLQlja19l
cG9jaF9lbnRyeV90IGVwb2NoX2VudHJ5OwotfTsKLQotQ09NTU9OX0FMQVJNX0RFQ0xBUkVfR0xP
QkFMKGhzX2FsYXJtLCBhbGFybV9ldmVudCwgbmV4dF9zdGFnZSkKLQotc3RhdGljIHZvaWQKLWFs
YXJtX2hhbmRsZXIoaW50IHMpCi17Ci0KLQkodm9pZClzOwotCW5leHRfc3RhZ2UgPSB0cnVlOwot
CXJldHVybjsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWhzX2hhc2goY29uc3Qgdm9pZCAq
b2JqZWN0LCB1bnNpZ25lZCBsb25nIHNlZWQpCi17Ci0JY29uc3QgY2hhciAqYyA9IG9iamVjdDsK
LQl1bnNpZ25lZCBsb25nIGg7Ci0KLQloID0gKHVuc2lnbmVkIGxvbmcpTXVybXVySGFzaDY0QShj
LCBzdHJsZW4oYyksIHNlZWQpOwotCXJldHVybiBoOwotfQotCi1zdGF0aWMgYm9vbAotaHNfY29t
cGFyZShjb25zdCB2b2lkICpwcmV2aW91cywgY29uc3Qgdm9pZCAqY29tcGFyZSkKLXsKLQotCXJl
dHVybiBzdHJjbXAocHJldmlvdXMsIGNvbXBhcmUpID09IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1o
c19kZXN0cm95KGNrX2Vwb2NoX2VudHJ5X3QgKmUpCi17Ci0KLQlmcmVlKGUpOwotCXJldHVybjsK
LX0KLQotc3RhdGljIHZvaWQgKgotaHNfbWFsbG9jKHNpemVfdCByKQotewotCWNrX2Vwb2NoX2Vu
dHJ5X3QgKmI7Ci0KLQliID0gbWFsbG9jKHNpemVvZigqYikgKyByKTsKLQlyZXR1cm4gYiArIDE7
Ci19Ci0KLXN0YXRpYyB2b2lkCi1oc19mcmVlKHZvaWQgKnAsIHNpemVfdCBiLCBib29sIHIpCi17
Ci0Jc3RydWN0IGhzX2Vwb2NoICplID0gcDsKLQotCSh2b2lkKWI7Ci0KLQlpZiAociA9PSB0cnVl
KSB7Ci0JCS8qIERlc3RydWN0aW9uIHJlcXVpcmVzIHNhZmUgbWVtb3J5IHJlY2xhbWF0aW9uLiAq
LwotCQlja19lcG9jaF9jYWxsKCZlcG9jaF93ciwgJigtLWUpLT5lcG9jaF9lbnRyeSwgaHNfZGVz
dHJveSk7Ci0JfSBlbHNlIHsKLQkJZnJlZSgtLWUpOwotCX0KLQotCXJldHVybjsKLX0KLQotc3Rh
dGljIHN0cnVjdCBja19tYWxsb2MgbXlfYWxsb2NhdG9yID0gewotCS5tYWxsb2MgPSBoc19tYWxs
b2MsCi0JLmZyZWUgPSBoc19mcmVlCi19OwotCi1zdGF0aWMgdm9pZAotc2V0X2luaXQodm9pZCkK
LXsKLQl1bnNpZ25lZCBpbnQgbW9kZSA9IENLX0hTX01PREVfT0JKRUNUIHwgQ0tfSFNfTU9ERV9T
UE1DOwotCi0jaWZkZWYgSFNfREVMRVRFCi0JbW9kZSB8PSBDS19IU19NT0RFX0RFTEVURTsKLSNl
bmRpZgotCi0JY2tfZXBvY2hfaW5pdCgmZXBvY2hfaHMpOwotCWNrX2Vwb2NoX3JlZ2lzdGVyKCZl
cG9jaF9ocywgJmVwb2NoX3dyLCBOVUxMKTsKLQljb21tb25fc3JhbmQ0OCgobG9uZyBpbnQpdGlt
ZShOVUxMKSk7Ci0JaWYgKGNrX2hzX2luaXQoJmhzLCBtb2RlLCBoc19oYXNoLCBoc19jb21wYXJl
LCAmbXlfYWxsb2NhdG9yLCA2NTUzNiwgY29tbW9uX2xyYW5kNDgoKSkgPT0gZmFsc2UpIHsKLQkJ
cGVycm9yKCJja19oc19pbml0Iik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQlyZXR1
cm47Ci19Ci0KLXN0YXRpYyBib29sCi1zZXRfcmVtb3ZlKGNvbnN0IGNoYXIgKnZhbHVlKQotewot
CXVuc2lnbmVkIGxvbmcgaDsKLQotCWggPSBDS19IU19IQVNIKCZocywgaHNfaGFzaCwgdmFsdWUp
OwotCXJldHVybiAoYm9vbClja19oc19yZW1vdmUoJmhzLCBoLCB2YWx1ZSk7Ci19Ci0KLXN0YXRp
YyBib29sCi1zZXRfcmVwbGFjZShjb25zdCBjaGFyICp2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25n
IGg7Ci0Jdm9pZCAqcHJldmlvdXM7Ci0KLQloID0gQ0tfSFNfSEFTSCgmaHMsIGhzX2hhc2gsIHZh
bHVlKTsKLQlyZXR1cm4gY2tfaHNfc2V0KCZocywgaCwgdmFsdWUsICZwcmV2aW91cyk7Ci19Ci0K
LXN0YXRpYyBib29sCi1zZXRfc3dhcChjb25zdCBjaGFyICp2YWx1ZSkKLXsKLQl1bnNpZ25lZCBs
b25nIGg7Ci0Jdm9pZCAqcHJldmlvdXM7Ci0KLQloID0gQ0tfSFNfSEFTSCgmaHMsIGhzX2hhc2gs
IHZhbHVlKTsKLQlyZXR1cm4gY2tfaHNfZmFzKCZocywgaCwgdmFsdWUsICZwcmV2aW91cyk7Ci19
Ci0KLXN0YXRpYyB2b2lkICoKLXNldF9nZXQoY29uc3QgY2hhciAqdmFsdWUpCi17Ci0JdW5zaWdu
ZWQgbG9uZyBoOwotCXZvaWQgKnY7Ci0KLQloID0gQ0tfSFNfSEFTSCgmaHMsIGhzX2hhc2gsIHZh
bHVlKTsKLQl2ID0gY2tfaHNfZ2V0KCZocywgaCwgdmFsdWUpOwotCXJldHVybiB2OwotfQotCi1z
dGF0aWMgYm9vbAotc2V0X2luc2VydChjb25zdCBjaGFyICp2YWx1ZSkKLXsKLQl1bnNpZ25lZCBs
b25nIGg7Ci0KLQloID0gQ0tfSFNfSEFTSCgmaHMsIGhzX2hhc2gsIHZhbHVlKTsKLQlyZXR1cm4g
Y2tfaHNfcHV0KCZocywgaCwgdmFsdWUpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1zZXRfY291bnQo
dm9pZCkKLXsKLQotCXJldHVybiBja19oc19jb3VudCgmaHMpOwotfQotCi1zdGF0aWMgYm9vbAot
c2V0X3Jlc2V0KHZvaWQpCi17Ci0KLQlyZXR1cm4gY2tfaHNfcmVzZXQoJmhzKTsKLX0KLQotc3Rh
dGljIHZvaWQgKgotcmVhZGVyKHZvaWQgKnVudXNlZCkKLXsKLQlzaXplX3QgaTsKLQlja19lcG9j
aF9yZWNvcmRfdCBlcG9jaF9yZWNvcmQ7Ci0JaW50IHN0YXRlX3ByZXZpb3VzID0gSFNfU1RBVEVf
U1RPUDsKLQlpbnQgbl9zdGF0ZSA9IDA7Ci0JdWludDY0X3QgcywgaiwgYTsKLQotCSh2b2lkKXVu
dXNlZDsKLQlpZiAoYWZmX2l0ZXJhdGUoJmFmZmluZXJhdG9yKSAhPSAwKQotCQlwZXJyb3IoIldB
Uk5JTkc6IEZhaWxlZCB0byBhZmZpbmUgdGhyZWFkIik7Ci0KLQlzID0gaiA9IGEgPSAwOwotCWNr
X2Vwb2NoX3JlZ2lzdGVyKCZlcG9jaF9ocywgJmVwb2NoX3JlY29yZCwgTlVMTCk7Ci0JZm9yICg7
OykgewotCQlqKys7Ci0JCWNrX2Vwb2NoX2JlZ2luKCZlcG9jaF9yZWNvcmQsIE5VTEwpOwotCQlz
ID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspIHsKLQkJCWNo
YXIgKnI7Ci0KLQkJCXIgPSBzZXRfZ2V0KGtleXNbaV0pOwotCQkJaWYgKHIgPT0gTlVMTCkgewot
CQkJCWlmIChuX3N0YXRlID09IEhTX1NUQVRFX1NUUklDVF9SRVBMQUNFTUVOVCkgewotCQkJCQlj
a19lcnJvcigiRVJST1I6IERpZCBub3QgZmluZCBkdXJpbmcgcmVwbGFjZW1lbnQ6ICVzXG4iLCBr
ZXlzW2ldKTsKLQkJCQl9Ci0KLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaWYgKHN0cmNtcChy
LCBrZXlzW2ldKSA9PSAwKQotCQkJCWNvbnRpbnVlOwotCi0JCQlja19lcnJvcigiRVJST1I6IEZv
dW5kIGludmFsaWQgdmFsdWU6IFslc10gYnV0IGV4cGVjdGVkIFslc11cbiIsIChjaGFyICopciwg
a2V5c1tpXSk7Ci0JCX0KLQkJYSArPSByZHRzYygpIC0gczsKLQkJY2tfZXBvY2hfZW5kKCZlcG9j
aF9yZWNvcmQsIE5VTEwpOwotCi0JCW5fc3RhdGUgPSBja19wcl9sb2FkX2ludCgmc3RhdGUpOwot
CQlpZiAobl9zdGF0ZSAhPSBzdGF0ZV9wcmV2aW91cykgewotCQkJY2tfc3BpbmxvY2tfbG9jaygm
bXR4KTsKLQkJCWFjY3VtdWxhdG9yW3N0YXRlX3ByZXZpb3VzXSArPSBhIC8gKGogKiBrZXlzX2xl
bmd0aCk7Ci0JCQlja19zcGlubG9ja191bmxvY2soJm10eCk7Ci0KLQkJCWNrX3ByX2luY19pbnQo
JmJhcnJpZXJbc3RhdGVfcHJldmlvdXNdKTsKLQkJCXdoaWxlIChja19wcl9sb2FkX2ludCgmYmFy
cmllcltzdGF0ZV9wcmV2aW91c10pICE9IG5fdGhyZWFkcyArIDEpCi0JCQkJY2tfcHJfc3RhbGwo
KTsKLQotCQkJc3RhdGVfcHJldmlvdXMgPSBuX3N0YXRlOwotCQkJcyA9IGogPSBhID0gMDsKLQkJ
fQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdWludDY0X3QKLWFjYyhzaXplX3Qg
aSkKLXsKLQl1aW50NjRfdCByOwotCi0JY2tfc3BpbmxvY2tfbG9jaygmbXR4KTsKLQlyID0gYWNj
dW11bGF0b3JbaV07Ci0JY2tfc3BpbmxvY2tfdW5sb2NrKCZtdHgpOwotCi0JcmV0dXJuIHI7Ci19
Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCUZJTEUgKmZwOwotCWNo
YXIgYnVmZmVyWzUxMl07Ci0Jc2l6ZV90IGksIGosIHI7Ci0JdW5zaWduZWQgaW50IGQgPSAwOwot
CXVpbnQ2NF90IHMsIGUsIGEsIHJlcGVhdGVkOwotCWNoYXIgKip0OwotCXB0aHJlYWRfdCAqcmVh
ZGVyczsKLQlkb3VibGUgcF9yLCBwX2Q7Ci0KLQlDT01NT05fQUxBUk1fREVDTEFSRV9MT0NBTCho
c19hbGFybSwgYWxhcm1fZXZlbnQpCi0KLQlyID0gMjA7Ci0JcyA9IDg7Ci0JcF9kID0gMC41Owot
CXBfciA9IDAuNTsKLQluX3RocmVhZHMgPSBDT1JFUyAtIDE7Ci0KLQlpZiAoYXJnYyA8IDIpIHsK
LQkJY2tfZXJyb3IoIlVzYWdlOiBwYXJhbGxlbCA8ZGljdGlvbmFyeT4gWzxpbnRlcnZhbCBsZW5n
dGg+IDxpbml0aWFsIHNpemU+IDxyZWFkZXJzPlxuIgotCQkgICAgIiA8cHJvYmFiaWxpdHkgb2Yg
cmVwbGFjZW1lbnQ+IDxwcm9iYWJpbGl0eSBvZiBkZWxldGlvbj4gPGVwb2NoIHRocmVzaG9sZD5d
XG4iKTsKLQl9Ci0KLQlpZiAoYXJnYyA+PSAzKQotCQlyID0gYXRvaShhcmd2WzJdKTsKLQotCWlm
IChhcmdjID49IDQpCi0JCXMgPSAodWludDY0X3QpYXRvaShhcmd2WzNdKTsKLQotCWlmIChhcmdj
ID49IDUpIHsKLQkJbl90aHJlYWRzID0gYXRvaShhcmd2WzRdKTsKLQkJaWYgKG5fdGhyZWFkcyA8
IDEpIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogTnVtYmVyIG9mIHJlYWRlcnMgbXVzdCBiZSA+PSAx
LlxuIik7Ci0JCX0KLQl9Ci0KLQlpZiAoYXJnYyA+PSA2KSB7Ci0JCXBfciA9IGF0b2YoYXJndls1
XSkgLyAxMDAuMDA7Ci0JCWlmIChwX3IgPCAwKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IFByb2Jh
YmlsaXR5IG9mIHJlcGxhY2VtZW50IG11c3QgYmUgPj0gMCBhbmQgPD0gMTAwLlxuIik7Ci0JCX0K
LQl9Ci0KLQlpZiAoYXJnYyA+PSA3KSB7Ci0JCXBfZCA9IGF0b2YoYXJndls2XSkgLyAxMDAuMDA7
Ci0JCWlmIChwX2QgPCAwKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IFByb2JhYmlsaXR5IG9mIGRl
bGV0aW9uIG11c3QgYmUgPj0gMCBhbmQgPD0gMTAwLlxuIik7Ci0JCX0KLQl9Ci0KLQlDT01NT05f
QUxBUk1fSU5JVChoc19hbGFybSwgYWxhcm1fZXZlbnQsIHIpCi0KLQlhZmZpbmVyYXRvci5kZWx0
YSA9IDE7Ci0JcmVhZGVycyA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG5fdGhyZWFkcyk7
Ci0JYXNzZXJ0KHJlYWRlcnMgIT0gTlVMTCk7Ci0KLQlrZXlzID0gbWFsbG9jKHNpemVvZihjaGFy
ICopICoga2V5c19jYXBhY2l0eSk7Ci0JYXNzZXJ0KGtleXMgIT0gTlVMTCk7Ci0KLQlmcCA9IGZv
cGVuKGFyZ3ZbMV0sICJyIik7Ci0JYXNzZXJ0KGZwICE9IE5VTEwpOwotCi0Jd2hpbGUgKGZnZXRz
KGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZwKSAhPSBOVUxMKSB7Ci0JCWJ1ZmZlcltzdHJsZW4o
YnVmZmVyKSAtIDFdID0gJ1wwJzsKLQkJa2V5c1trZXlzX2xlbmd0aCsrXSA9IHN0cmR1cChidWZm
ZXIpOwotCQlhc3NlcnQoa2V5c1trZXlzX2xlbmd0aCAtIDFdICE9IE5VTEwpOwotCi0JCWlmIChr
ZXlzX2xlbmd0aCA9PSBrZXlzX2NhcGFjaXR5KSB7Ci0JCQl0ID0gcmVhbGxvYyhrZXlzLCBzaXpl
b2YoY2hhciAqKSAqIChrZXlzX2NhcGFjaXR5ICo9IDIpKTsKLQkJCWFzc2VydCh0ICE9IE5VTEwp
OwotCQkJa2V5cyA9IHQ7Ci0JCX0KLQl9Ci0KLQl0ID0gcmVhbGxvYyhrZXlzLCBzaXplb2YoY2hh
ciAqKSAqIGtleXNfbGVuZ3RoKTsKLQlhc3NlcnQodCAhPSBOVUxMKTsKLQlrZXlzID0gdDsKLQot
CXNldF9pbml0KCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgKHNpemVfdCluX3RocmVhZHM7IGkrKykg
ewotCQlpZiAocHRocmVhZF9jcmVhdGUoJnJlYWRlcnNbaV0sIE5VTEwsIHJlYWRlciwgTlVMTCkg
IT0gMCkgewotCQkJY2tfZXJyb3IoIkVSUk9SOiBGYWlsZWQgdG8gY3JlYXRlIHRocmVhZCAlenUu
XG4iLCBpKTsKLQkJfQotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKQot
CQlkICs9IHNldF9pbnNlcnQoa2V5c1tpXSkgPT0gZmFsc2U7Ci0KLQlmcHJpbnRmKHN0ZGVyciwg
IiBbU10gJWQgcmVhZGVycywgMSB3cml0ZXIuXG4iLCBuX3RocmVhZHMpOwotCWZwcmludGYoc3Rk
ZXJyLCAiIFtTXSAlenUgZW50cmllcyBzdG9yZWQgYW5kICV1IGR1cGxpY2F0ZXMuXG5cbiIsCi0J
ICAgIHNldF9jb3VudCgpLCBkKTsKLQotCWZwcmludGYoc3RkZXJyLCAiICwtIEJBU0lDIFRFU1Rc
biIpOwotCWZwcmludGYoc3RkZXJyLCAiIHwgRXhlY3V0aW5nIFNNUiB0ZXN0Li4uIik7Ci0JYSA9
IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewotCQlpZiAoc2V0X3Jlc2V0KCkgPT0gZmFs
c2UpIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogRmFpbGVkIHRvIHJlc2V0IGhhc2ggdGFibGUuXG4i
KTsKLQkJfQotCi0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7
IGkrKykKLQkJCWQgKz0gc2V0X2luc2VydChrZXlzW2ldKSA9PSBmYWxzZTsKLQkJZSA9IHJkdHNj
KCk7Ci0JCWEgKz0gZSAtIHM7Ci0JfQotCWZwcmludGYoc3RkZXJyLCAiZG9uZSAoJSIgUFJJdTY0
ICIgdGlja3MpXG4iLCBhIC8gKHIgKiBrZXlzX2xlbmd0aCkpOwotCi0JZnByaW50ZihzdGRlcnIs
ICIgfCBFeGVjdXRpbmcgcmVwbGFjZW1lbnQgdGVzdC4uLiIpOwotCWEgPSAwOwotCWZvciAoaiA9
IDA7IGogPCByOyBqKyspIHsKLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXlz
X2xlbmd0aDsgaSsrKQotCQkJc2V0X3JlcGxhY2Uoa2V5c1tpXSk7Ci0JCWUgPSByZHRzYygpOwot
CQlhICs9IGUgLSBzOwotCX0KLQlmcHJpbnRmKHN0ZGVyciwgImRvbmUgKCUiIFBSSXU2NCAiIHRp
Y2tzKVxuIiwgYSAvIChyICoga2V5c19sZW5ndGgpKTsKLQotCWZwcmludGYoc3RkZXJyLCAiIHwg
RXhlY3V0aW5nIGdldCB0ZXN0Li4uIik7Ci0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGor
KykgewotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKysp
IHsKLQkJCWlmIChzZXRfZ2V0KGtleXNbaV0pID09IE5VTEwpIHsKLQkJCQlja19lcnJvcigiRVJS
T1I6IFVuZXhwZWN0ZWQgTlVMTCB2YWx1ZS5cbiIpOwotCQkJfQotCQl9Ci0JCWUgPSByZHRzYygp
OwotCQlhICs9IGUgLSBzOwotCX0KLQlmcHJpbnRmKHN0ZGVyciwgImRvbmUgKCUiIFBSSXU2NCAi
IHRpY2tzKVxuIiwgYSAvIChyICoga2V5c19sZW5ndGgpKTsKLQotCWEgPSAwOwotCWZwcmludGYo
c3RkZXJyLCAiIHwgRXhlY3V0aW5nIHJlbW92YWwgdGVzdC4uLiIpOwotCWZvciAoaiA9IDA7IGog
PCByOyBqKyspIHsKLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0
aDsgaSsrKQotCQkJc2V0X3JlbW92ZShrZXlzW2ldKTsKLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0g
ZSAtIHM7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspCi0JCQlzZXRfaW5z
ZXJ0KGtleXNbaV0pOwotCX0KLQlmcHJpbnRmKHN0ZGVyciwgImRvbmUgKCUiIFBSSXU2NCAiIHRp
Y2tzKVxuIiwgYSAvIChyICoga2V5c19sZW5ndGgpKTsKLQotCWZwcmludGYoc3RkZXJyLCAiIHwg
RXhlY3V0aW5nIG5lZ2F0aXZlIGxvb2stdXAgdGVzdC4uLiIpOwotCWEgPSAwOwotCWZvciAoaiA9
IDA7IGogPCByOyBqKyspIHsKLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXlz
X2xlbmd0aDsgaSsrKSB7Ci0JCQlzZXRfZ2V0KCJceDUwXHgwM1x4MDRceDA1XHgwNlx4MTAiKTsK
LQkJfQotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9Ci0JZnByaW50ZihzdGRlcnIs
ICJkb25lICglIiBQUkl1NjQgIiB0aWNrcylcbiIsIGEgLyAociAqIGtleXNfbGVuZ3RoKSk7Ci0K
LQlja19lcG9jaF9yZWNvcmRfdCBlcG9jaF90ZW1wb3JhcnkgPSBlcG9jaF93cjsKLQlja19lcG9j
aF9zeW5jaHJvbml6ZSgmZXBvY2hfd3IpOwotCi0JZnByaW50ZihzdGRlcnIsICIgJy0gU3VtbWFy
eTogJXUgcGVuZGluZywgJXUgcGVhaywgJXUgcmVjbGFtYXRpb25zIC0+ICIKLQkgICAgIiV1IHBl
bmRpbmcsICV1IHBlYWssICV1IHJlY2xhbWF0aW9uc1xuXG4iLAotCSAgICBlcG9jaF90ZW1wb3Jh
cnkubl9wZW5kaW5nLCBlcG9jaF90ZW1wb3Jhcnkubl9wZWFrLCBlcG9jaF90ZW1wb3Jhcnkubl9k
aXNwYXRjaCwKLQkgICAgZXBvY2hfd3Iubl9wZW5kaW5nLCBlcG9jaF93ci5uX3BlYWssIGVwb2No
X3dyLm5fZGlzcGF0Y2gpOwotCi0JZnByaW50ZihzdGRlcnIsICIgLC0gUkVBREVSIENPTkNVUlJF
TkNZXG4iKTsKLQlmcHJpbnRmKHN0ZGVyciwgIiB8IEV4ZWN1dGluZyByZWFkZXIgdGVzdC4uLiIp
OwotCi0JY2tfcHJfc3RvcmVfaW50KCZzdGF0ZSwgSFNfU1RBVEVfR0VUKTsKLQl3aGlsZSAoY2tf
cHJfbG9hZF9pbnQoJmJhcnJpZXJbSFNfU1RBVEVfU1RPUF0pICE9IG5fdGhyZWFkcykKLQkJY2tf
cHJfc3RhbGwoKTsKLQlja19wcl9pbmNfaW50KCZiYXJyaWVyW0hTX1NUQVRFX1NUT1BdKTsKLQlj
b21tb25fc2xlZXAocik7Ci0JY2tfcHJfc3RvcmVfaW50KCZzdGF0ZSwgSFNfU1RBVEVfU1RSSUNU
X1JFUExBQ0VNRU5UKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF9pbnQoJmJhcnJpZXJbSFNfU1RBVEVf
R0VUXSkgIT0gbl90aHJlYWRzKQotCQlja19wcl9zdGFsbCgpOwotCi0JZnByaW50ZihzdGRlcnIs
ICJkb25lIChyZWFkZXIgPSAlIiBQUkl1NjQgIiB0aWNrcylcbiIsCi0JICAgIGFjYyhIU19TVEFU
RV9HRVQpIC8gbl90aHJlYWRzKTsKLQotCWZwcmludGYoc3RkZXJyLCAiIHwgRXhlY3V0aW5nIHN0
cmljdCByZXBsYWNlbWVudCB0ZXN0Li4uIik7Ci0KLQlhID0gcmVwZWF0ZWQgPSAwOwotCWNvbW1v
bl9hbGFybShhbGFybV9oYW5kbGVyLCAmYWxhcm1fZXZlbnQsIHIpOwotCi0JY2tfcHJfaW5jX2lu
dCgmYmFycmllcltIU19TVEFURV9HRVRdKTsKLQlmb3IgKDs7KSB7Ci0JCXJlcGVhdGVkKys7Ci0J
CXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykgewotCQkJ
aWYgKGkgJiAxKSB7Ci0JCQkJc2V0X3JlcGxhY2Uoa2V5c1tpXSk7Ci0JCQl9IGVsc2UgewotCQkJ
CXNldF9zd2FwKGtleXNbaV0pOwotCQkJfQotCQl9Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUg
LSBzOwotCi0JCWlmIChuZXh0X3N0YWdlID09IHRydWUpIHsKLQkJCW5leHRfc3RhZ2UgPSBmYWxz
ZTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JY2tfcHJfc3RvcmVfaW50KCZzdGF0ZSwgSFNfU1RB
VEVfREVMRVRJT04pOwotCXdoaWxlIChja19wcl9sb2FkX2ludCgmYmFycmllcltIU19TVEFURV9T
VFJJQ1RfUkVQTEFDRU1FTlRdKSAhPSBuX3RocmVhZHMpCi0JCWNrX3ByX3N0YWxsKCk7Ci0Jc2V0
X3Jlc2V0KCk7Ci0JY2tfZXBvY2hfc3luY2hyb25pemUoJmVwb2NoX3dyKTsKLQlmcHJpbnRmKHN0
ZGVyciwgImRvbmUgKHdyaXRlciA9ICUiIFBSSXU2NCAiIHRpY2tzLCByZWFkZXIgPSAlIiBQUkl1
NjQgIiB0aWNrcylcbiIsCi0JICAgIGEgLyAocmVwZWF0ZWQgKiBrZXlzX2xlbmd0aCksIGFjYyhI
U19TVEFURV9TVFJJQ1RfUkVQTEFDRU1FTlQpIC8gbl90aHJlYWRzKTsKLQotCWNvbW1vbl9hbGFy
bShhbGFybV9oYW5kbGVyLCAmYWxhcm1fZXZlbnQsIHIpOwotCi0JZnByaW50ZihzdGRlcnIsICIg
fCBFeGVjdXRpbmcgZGVsZXRpb24gdGVzdCAoJS4yZikuLi4iLCBwX2QgKiAxMDApOwotCWEgPSBy
ZXBlYXRlZCA9IDA7Ci0JY2tfcHJfaW5jX2ludCgmYmFycmllcltIU19TVEFURV9TVFJJQ1RfUkVQ
TEFDRU1FTlRdKTsKLQlmb3IgKDs7KSB7Ci0JCWRvdWJsZSBkZWxldGU7Ci0KLQkJcmVwZWF0ZWQr
KzsKLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKSB7
Ci0JCQlzZXRfaW5zZXJ0KGtleXNbaV0pOwotCQkJaWYgKHBfZCAhPSAwLjApIHsKLQkJCQlkZWxl
dGUgPSBjb21tb25fZHJhbmQ0OCgpOwotCQkJCWlmIChkZWxldGUgPD0gcF9kKQotCQkJCQlzZXRf
cmVtb3ZlKGtleXNbaV0pOwotCQkJfQotCQl9Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBz
OwotCi0JCWlmIChuZXh0X3N0YWdlID09IHRydWUpIHsKLQkJCW5leHRfc3RhZ2UgPSBmYWxzZTsK
LQkJCWJyZWFrOwotCQl9Ci0JfQotCWNrX3ByX3N0b3JlX2ludCgmc3RhdGUsIEhTX1NUQVRFX1JF
UExBQ0VNRU5UKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF9pbnQoJmJhcnJpZXJbSFNfU1RBVEVfREVM
RVRJT05dKSAhPSBuX3RocmVhZHMpCi0JCWNrX3ByX3N0YWxsKCk7Ci0KLQlzZXRfcmVzZXQoKTsK
LQlja19lcG9jaF9zeW5jaHJvbml6ZSgmZXBvY2hfd3IpOwotCWZwcmludGYoc3RkZXJyLCAiZG9u
ZSAod3JpdGVyID0gJSIgUFJJdTY0ICIgdGlja3MsIHJlYWRlciA9ICUiIFBSSXU2NCAiIHRpY2tz
KVxuIiwKLQkgICAgYSAvIChyZXBlYXRlZCAqIGtleXNfbGVuZ3RoKSwgYWNjKEhTX1NUQVRFX0RF
TEVUSU9OKSAvIG5fdGhyZWFkcyk7Ci0KLQljb21tb25fYWxhcm0oYWxhcm1faGFuZGxlciwgJmFs
YXJtX2V2ZW50LCByKTsKLQotCWZwcmludGYoc3RkZXJyLCAiIHwgRXhlY3V0aW5nIHJlcGxhY2Vt
ZW50IHRlc3QgKCUuMmYpLi4uIiwgcF9yICogMTAwKTsKLQlhID0gcmVwZWF0ZWQgPSAwOwotCWNr
X3ByX2luY19pbnQoJmJhcnJpZXJbSFNfU1RBVEVfREVMRVRJT05dKTsKLQlmb3IgKDs7KSB7Ci0J
CWRvdWJsZSBkZWxldGUsIHJlcGxhY2U7Ci0KLQkJcmVwZWF0ZWQrKzsKLQkJcyA9IHJkdHNjKCk7
Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKSB7Ci0JCQlzZXRfaW5zZXJ0KGtl
eXNbaV0pOwotCQkJaWYgKHBfZCAhPSAwLjApIHsKLQkJCQlkZWxldGUgPSBjb21tb25fZHJhbmQ0
OCgpOwotCQkJCWlmIChkZWxldGUgPD0gcF9kKQotCQkJCQlzZXRfcmVtb3ZlKGtleXNbaV0pOwot
CQkJfSBlbHNlIHsKLQkJCQlkZWxldGUgPSAwLjA7Ci0JCQl9Ci0KLQkJCWlmIChwX3IgIT0gMC4w
KSB7Ci0JCQkJcmVwbGFjZSA9IGNvbW1vbl9kcmFuZDQ4KCk7Ci0JCQkJaWYgKHJlcGxhY2UgPD0g
cF9yKSB7Ci0JCQkJCWlmICgoaSAmIDEpIHx8IChkZWxldGUgPD0gcF9kKSkgewotCQkJCQkJc2V0
X3JlcGxhY2Uoa2V5c1tpXSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlzZXRfc3dhcChrZXlzW2ld
KTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0g
czsKLQotCQlpZiAobmV4dF9zdGFnZSA9PSB0cnVlKSB7Ci0JCQluZXh0X3N0YWdlID0gZmFsc2U7
Ci0JCQlicmVhazsKLQkJfQotCX0KLQlja19wcl9zdG9yZV9pbnQoJnN0YXRlLCBIU19TVEFURV9T
VE9QKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF9pbnQoJmJhcnJpZXJbSFNfU1RBVEVfUkVQTEFDRU1F
TlRdKSAhPSBuX3RocmVhZHMpCi0JCWNrX3ByX3N0YWxsKCk7Ci0Jc2V0X3Jlc2V0KCk7Ci0JY2tf
ZXBvY2hfc3luY2hyb25pemUoJmVwb2NoX3dyKTsKLQlmcHJpbnRmKHN0ZGVyciwgImRvbmUgKHdy
aXRlciA9ICUiIFBSSXU2NCAiIHRpY2tzLCByZWFkZXIgPSAlIiBQUkl1NjQgIiB0aWNrcylcbiIs
Ci0JICAgIGEgLyAocmVwZWF0ZWQgKiBrZXlzX2xlbmd0aCksIGFjYyhIU19TVEFURV9SRVBMQUNF
TUVOVCkgLyBuX3RocmVhZHMpOwotCi0JY2tfcHJfaW5jX2ludCgmYmFycmllcltIU19TVEFURV9S
RVBMQUNFTUVOVF0pOwotCWVwb2NoX3RlbXBvcmFyeSA9IGVwb2NoX3dyOwotCWNrX2Vwb2NoX3N5
bmNocm9uaXplKCZlcG9jaF93cik7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiAnLSBTdW1tYXJ5OiAl
dSBwZW5kaW5nLCAldSBwZWFrLCAldSByZWNsYW1hdGlvbnMgLT4gIgotCSAgICAiJXUgcGVuZGlu
ZywgJXUgcGVhaywgJXUgcmVjbGFtYXRpb25zXG5cbiIsCi0JICAgIGVwb2NoX3RlbXBvcmFyeS5u
X3BlbmRpbmcsIGVwb2NoX3RlbXBvcmFyeS5uX3BlYWssIGVwb2NoX3RlbXBvcmFyeS5uX2Rpc3Bh
dGNoLAotCSAgICBlcG9jaF93ci5uX3BlbmRpbmcsIGVwb2NoX3dyLm5fcGVhaywgZXBvY2hfd3Iu
bl9kaXNwYXRjaCk7Ci0JcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2hzL2JlbmNobWFyay9zZXJpYWwuYyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2hzL2JlbmNo
bWFyay9zZXJpYWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM0Y2FmZjI0MWI2
NTkxYTc5OTc0ZTEwMDI0ZjE4ZjljNjcwZmY5Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdy
ZXNzaW9ucy9ja19ocy9iZW5jaG1hcmsvc2VyaWFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MTcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEyIFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHMKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2hzCi0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxja19ocy5oPgotCi0jaW5jbHVkZSA8YXNzZXJ0
Lmg+Ci0jaW5jbHVkZSA8Y2tfbWFsbG9jLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRl
IDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0j
aW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotCi0jaW5jbHVkZSAiLi4vLi4v
Y29tbW9uLmgiCi0jaW5jbHVkZSAiLi4vLi4vLi4vc3JjL2NrX2h0X2hhc2guaCIKLQotc3RhdGlj
IGNrX2hzX3QgaHM7Ci1zdGF0aWMgY2hhciAqKmtleXM7Ci1zdGF0aWMgc2l6ZV90IGtleXNfbGVu
Z3RoID0gMDsKLXN0YXRpYyBzaXplX3Qga2V5c19jYXBhY2l0eSA9IDEyODsKLXN0YXRpYyB1bnNp
Z25lZCBsb25nIGdsb2JhbF9zZWVkOwotCi1zdGF0aWMgdm9pZCAqCi1oc19tYWxsb2Moc2l6ZV90
IHIpCi17Ci0KLQlyZXR1cm4gbWFsbG9jKHIpOwotfQotCi1zdGF0aWMgdm9pZAotaHNfZnJlZSh2
b2lkICpwLCBzaXplX3QgYiwgYm9vbCByKQotewotCi0JKHZvaWQpYjsKLQkodm9pZClyOwotCi0J
ZnJlZShwKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHN0cnVjdCBja19tYWxsb2MgbXlfYWxs
b2NhdG9yID0gewotCS5tYWxsb2MgPSBoc19tYWxsb2MsCi0JLmZyZWUgPSBoc19mcmVlCi19Owot
Ci1zdGF0aWMgdW5zaWduZWQgbG9uZwotaHNfaGFzaChjb25zdCB2b2lkICpvYmplY3QsIHVuc2ln
bmVkIGxvbmcgc2VlZCkKLXsKLQljb25zdCBjaGFyICpjID0gb2JqZWN0OwotCXVuc2lnbmVkIGxv
bmcgaDsKLQotCWggPSAodW5zaWduZWQgbG9uZylNdXJtdXJIYXNoNjRBKGMsIHN0cmxlbihjKSwg
c2VlZCk7Ci0JcmV0dXJuIGg7Ci19Ci0KLXN0YXRpYyBib29sCi1oc19jb21wYXJlKGNvbnN0IHZv
aWQgKnByZXZpb3VzLCBjb25zdCB2b2lkICpjb21wYXJlKQotewotCi0JcmV0dXJuIHN0cmNtcChw
cmV2aW91cywgY29tcGFyZSkgPT0gMDsKLX0KLQotc3RhdGljIHZvaWQKLXNldF9kZXN0cm95KHZv
aWQpCi17Ci0KLQlja19oc19kZXN0cm95KCZocyk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9p
ZAotc2V0X2luaXQodW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBtb2RlKQotewotCi0J
aWYgKGNrX2hzX2luaXQoJmhzLCBDS19IU19NT0RFX09CSkVDVCB8IENLX0hTX01PREVfU1BNQyB8
IG1vZGUsIGhzX2hhc2gsIGhzX2NvbXBhcmUsCi0JICAgICZteV9hbGxvY2F0b3IsIHNpemUsIGds
b2JhbF9zZWVkKSA9PSBmYWxzZSkgewotCQlwZXJyb3IoImNrX2hzX2luaXQiKTsKLQkJZXhpdChF
WElUX0ZBSUxVUkUpOwotCX0KLQotCXJldHVybjsKLX0KLQotc3RhdGljIGJvb2wKLXNldF9yZW1v
dmUoY29uc3QgY2hhciAqdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBoOwotCi0JaCA9IENLX0hT
X0hBU0goJmhzLCBoc19oYXNoLCB2YWx1ZSk7Ci0JcmV0dXJuIGNrX2hzX3JlbW92ZSgmaHMsIGgs
IHZhbHVlKSAhPSBOVUxMOwotfQotCi1zdGF0aWMgYm9vbAotc2V0X3N3YXAoY29uc3QgY2hhciAq
dmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBoOwotCXZvaWQgKnByZXZpb3VzOwotCi0JaCA9IENL
X0hTX0hBU0goJmhzLCBoc19oYXNoLCB2YWx1ZSk7Ci0JcmV0dXJuIGNrX2hzX2ZhcygmaHMsIGgs
IHZhbHVlLCAmcHJldmlvdXMpOwotfQotCi1zdGF0aWMgYm9vbAotc2V0X3JlcGxhY2UoY29uc3Qg
Y2hhciAqdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBoOwotCXZvaWQgKnByZXZpb3VzOwotCi0J
aCA9IENLX0hTX0hBU0goJmhzLCBoc19oYXNoLCB2YWx1ZSk7Ci0JY2tfaHNfc2V0KCZocywgaCwg
dmFsdWUsICZwcmV2aW91cyk7Ci0JcmV0dXJuIHByZXZpb3VzID09IHZhbHVlOwotfQotCi1zdGF0
aWMgdm9pZCAqCi1zZXRfZ2V0KGNvbnN0IGNoYXIgKnZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcg
aDsKLQl2b2lkICp2OwotCi0JaCA9IENLX0hTX0hBU0goJmhzLCBoc19oYXNoLCB2YWx1ZSk7Ci0J
diA9IGNrX2hzX2dldCgmaHMsIGgsIHZhbHVlKTsKLQlyZXR1cm4gdjsKLX0KLQotc3RhdGljIGJv
b2wKLXNldF9pbnNlcnQoY29uc3QgY2hhciAqdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBoOwot
Ci0JaCA9IENLX0hTX0hBU0goJmhzLCBoc19oYXNoLCB2YWx1ZSk7Ci0JcmV0dXJuIGNrX2hzX3B1
dCgmaHMsIGgsIHZhbHVlKTsKLX0KLQotc3RhdGljIGJvb2wKLXNldF9pbnNlcnRfdW5pcXVlKGNv
bnN0IGNoYXIgKnZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcgaDsKLQotCWggPSBDS19IU19IQVNI
KCZocywgaHNfaGFzaCwgdmFsdWUpOwotCXJldHVybiBja19oc19wdXRfdW5pcXVlKCZocywgaCwg
dmFsdWUpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1zZXRfY291bnQodm9pZCkKLXsKLQotCXJldHVy
biBja19oc19jb3VudCgmaHMpOwotfQotCi1zdGF0aWMgYm9vbAotc2V0X3Jlc2V0KHZvaWQpCi17
Ci0KLQlyZXR1cm4gY2tfaHNfcmVzZXQoJmhzKTsKLX0KLQotc3RhdGljIHZvaWQKLXNldF9nYyh2
b2lkKQotewotCi0JY2tfaHNfZ2MoJmhzLCAwLCAwKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2
b2lkCi1zZXRfcmVidWlsZCh2b2lkKQotewotCi0JY2tfaHNfcmVidWlsZCgmaHMpOwotCXJldHVy
bjsKLX0KLQotc3RhdGljIHZvaWQKLWtleXNfc2h1ZmZsZShjaGFyICoqaykKLXsKLQlzaXplX3Qg
aSwgajsKLQljaGFyICp0OwotCi0JZm9yIChpID0ga2V5c19sZW5ndGg7IGkgPiAxOyBpLS0pIHsK
LQkJaiA9IHJhbmQoKSAlIChpIC0gMSk7Ci0KLQkJaWYgKGogIT0gaSAtIDEpIHsKLQkJCXQgPSBr
W2kgLSAxXTsKLQkJCWtbaSAtIDFdID0ga1tqXTsKLQkJCWtbal0gPSB0OwotCQl9Ci0JfQotCi0J
cmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotcnVuX3Rlc3QoY29uc3QgY2hhciAqZmlsZSwgc2l6
ZV90IHIsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgbW9kZSkKLXsKLQlGSUxFICpm
cDsKLQljaGFyIGJ1ZmZlcls1MTJdOwotCXNpemVfdCBpLCBqOwotCXVuc2lnbmVkIGludCBkID0g
MDsKLQl1aW50NjRfdCBzLCBlLCBhLCByaSwgc2ksIGFpLCBzciwgcmcsIHNnLCBhZywgc2QsIG5n
LCBzcywgc3RzLCBzdSwgc2djLCBzYjsKLQlzdHJ1Y3QgY2tfaHNfc3RhdCBzdDsKLQljaGFyICoq
dDsKLQotCWtleXMgPSBtYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiBrZXlzX2NhcGFjaXR5KTsKLQlh
c3NlcnQoa2V5cyAhPSBOVUxMKTsKLQotCWZwID0gZm9wZW4oZmlsZSwgInIiKTsKLQlhc3NlcnQo
ZnAgIT0gTlVMTCk7Ci0KLQl3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZnAp
ICE9IE5VTEwpIHsKLQkJYnVmZmVyW3N0cmxlbihidWZmZXIpIC0gMV0gPSAnXDAnOwotCQlrZXlz
W2tleXNfbGVuZ3RoKytdID0gc3RyZHVwKGJ1ZmZlcik7Ci0JCWFzc2VydChrZXlzW2tleXNfbGVu
Z3RoIC0gMV0gIT0gTlVMTCk7Ci0KLQkJaWYgKGtleXNfbGVuZ3RoID09IGtleXNfY2FwYWNpdHkp
IHsKLQkJCXQgPSByZWFsbG9jKGtleXMsIHNpemVvZihjaGFyICopICogKGtleXNfY2FwYWNpdHkg
Kj0gMikpOwotCQkJYXNzZXJ0KHQgIT0gTlVMTCk7Ci0JCQlrZXlzID0gdDsKLQkJfQotCX0KLQot
CXQgPSByZWFsbG9jKGtleXMsIHNpemVvZihjaGFyICopICoga2V5c19sZW5ndGgpOwotCWFzc2Vy
dCh0ICE9IE5VTEwpOwotCWtleXMgPSB0OwotCi0Jc2V0X2luaXQoc2l6ZSwgbW9kZSk7Ci0JZm9y
IChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspCi0JCWQgKz0gc2V0X2luc2VydChrZXlzW2ld
KSA9PSBmYWxzZTsKLQlja19oc19zdGF0KCZocywgJnN0KTsKLQotCWZwcmludGYoc3RkZXJyLCAi
IyAlenUgZW50cmllcyBzdG9yZWQsICV1IGR1cGxpY2F0ZXMsICV1IHByb2JlLlxuIiwKLQkgICAg
c2V0X2NvdW50KCksIGQsIHN0LnByb2JlX21heGltdW0pOwotCi0JYSA9IDA7Ci0JZm9yIChqID0g
MDsgaiA8IHI7IGorKykgewotCQlpZiAoc2V0X3Jlc2V0KCkgPT0gZmFsc2UpIHsKLQkJCWNrX2Vy
cm9yKCJFUlJPUjogRmFpbGVkIHRvIHJlc2V0IGhhc2ggdGFibGUuXG4iKTsKLQkJfQotCi0JCXMg
PSByZHRzYygpOwotCQlmb3IgKGkgPSBrZXlzX2xlbmd0aDsgaSA+IDA7IGktLSkKLQkJCWQgKz0g
c2V0X2luc2VydChrZXlzW2kgLSAxXSkgPT0gZmFsc2U7Ci0JCWUgPSByZHRzYygpOwotCQlhICs9
IGUgLSBzOwotCX0KLQlyaSA9IGEgLyAociAqIGtleXNfbGVuZ3RoKTsKLQotCWEgPSAwOwotCWZv
ciAoaiA9IDA7IGogPCByOyBqKyspIHsKLQkJaWYgKHNldF9yZXNldCgpID09IGZhbHNlKSB7Ci0J
CQlja19lcnJvcigiRVJST1I6IEZhaWxlZCB0byByZXNldCBoYXNoIHRhYmxlLlxuIik7Ci0JCX0K
LQotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspCi0J
CQlkICs9IHNldF9pbnNlcnQoa2V5c1tpXSkgPT0gZmFsc2U7Ci0JCWUgPSByZHRzYygpOwotCQlh
ICs9IGUgLSBzOwotCX0KLQlzaSA9IGEgLyAociAqIGtleXNfbGVuZ3RoKTsKLQotCWEgPSAwOwot
CWZvciAoaiA9IDA7IGogPCByOyBqKyspIHsKLQkJa2V5c19zaHVmZmxlKGtleXMpOwotCi0JCWlm
IChzZXRfcmVzZXQoKSA9PSBmYWxzZSkgewotCQkJY2tfZXJyb3IoIkVSUk9SOiBGYWlsZWQgdG8g
cmVzZXQgaGFzaCB0YWJsZS5cbiIpOwotCQl9Ci0KLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9
IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKQotCQkJZCArPSBzZXRfaW5zZXJ0KGtleXNbaV0pID09
IGZhbHNlOwotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9Ci0JYWkgPSBhIC8gKHIg
KiBrZXlzX2xlbmd0aCk7Ci0KLQlhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsgaisrKSB7Ci0J
CXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJCXNl
dF9zd2FwKGtleXNbaV0pOwotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9Ci0Jc3Mg
PSBhIC8gKHIgKiBrZXlzX2xlbmd0aCk7Ci0KLQlhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsg
aisrKSB7Ci0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkr
KykKLQkJCXNldF9yZXBsYWNlKGtleXNbaV0pOwotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0g
czsKLQl9Ci0Jc3IgPSBhIC8gKHIgKiBrZXlzX2xlbmd0aCk7Ci0KLQlzZXRfcmVzZXQoKTsKLQlm
b3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJc2V0X2luc2VydChrZXlzW2ldKTsK
LQotCWEgPSAwOwotCWZvciAoaiA9IDA7IGogPCByOyBqKyspIHsKLQkJcyA9IHJkdHNjKCk7Ci0J
CWZvciAoaSA9IGtleXNfbGVuZ3RoOyBpID4gMDsgaS0tKSB7Ci0JCQlpZiAoc2V0X2dldChrZXlz
W2kgLSAxXSkgPT0gTlVMTCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUjogVW5leHBlY3RlZCBOVUxM
IHZhbHVlLlxuIik7Ci0JCQl9Ci0JCX0KLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAtIHM7Ci0J
fQotCXJnID0gYSAvIChyICoga2V5c19sZW5ndGgpOwotCi0JYSA9IDA7Ci0JZm9yIChqID0gMDsg
aiA8IHI7IGorKykgewotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVu
Z3RoOyBpKyspIHsKLQkJCWlmIChzZXRfZ2V0KGtleXNbaV0pID09IE5VTEwpIHsKLQkJCQlja19l
cnJvcigiRVJST1I6IFVuZXhwZWN0ZWQgTlVMTCB2YWx1ZS5cbiIpOwotCQkJfQotCQl9Ci0JCWUg
PSByZHRzYygpOwotCQlhICs9IGUgLSBzOwotCX0KLQlzZyA9IGEgLyAociAqIGtleXNfbGVuZ3Ro
KTsKLQotCWEgPSAwOwotCWZvciAoaiA9IDA7IGogPCByOyBqKyspIHsKLQkJa2V5c19zaHVmZmxl
KGtleXMpOwotCi0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7
IGkrKykgewotCQkJaWYgKHNldF9nZXQoa2V5c1tpXSkgPT0gTlVMTCkgewotCQkJCWNrX2Vycm9y
KCJFUlJPUjogVW5leHBlY3RlZCBOVUxMIHZhbHVlLlxuIik7Ci0JCQl9Ci0JCX0KLQkJZSA9IHJk
dHNjKCk7Ci0JCWEgKz0gZSAtIHM7Ci0JfQotCWFnID0gYSAvIChyICoga2V5c19sZW5ndGgpOwot
Ci0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewotCQlzID0gcmR0c2MoKTsKLQkJ
Zm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspCi0JCQlzZXRfcmVtb3ZlKGtleXNbaV0p
OwotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQotCQlmb3IgKGkgPSAwOyBpIDwga2V5
c19sZW5ndGg7IGkrKykKLQkJCXNldF9pbnNlcnQoa2V5c1tpXSk7Ci0JfQotCXNkID0gYSAvIChy
ICoga2V5c19sZW5ndGgpOwotCi0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewot
CQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspIHsKLQkJ
CXNldF9nZXQoIlx4NTBceDAzXHgwNFx4MDVceDA2XHgxMCIpOwotCQl9Ci0JCWUgPSByZHRzYygp
OwotCQlhICs9IGUgLSBzOwotCX0KLQluZyA9IGEgLyAociAqIGtleXNfbGVuZ3RoKTsKLQotCXNl
dF9yZXNldCgpOwotCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKQotCQlzZXRfaW5z
ZXJ0KGtleXNbaV0pOwotCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKQotCQlzZXRf
cmVtb3ZlKGtleXNbaV0pOwotCi0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewot
CQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspCi0JCQlz
ZXRfaW5zZXJ0KGtleXNbaV0pOwotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQotCQlm
b3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJCXNldF9yZW1vdmUoa2V5c1tpXSk7
Ci0JfQotCXN0cyA9IGEgLyAociAqIGtleXNfbGVuZ3RoKTsKLQotCXNldF9yZXNldCgpOwotCi0J
LyogUHJ1bmUgZHVwbGljYXRlcy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkr
KykgewotCQlpZiAoc2V0X2luc2VydChrZXlzW2ldKSA9PSB0cnVlKQotCQkJY29udGludWU7Ci0K
LQkJZnJlZShrZXlzW2ldKTsKLQkJa2V5c1tpXSA9IGtleXNbLS1rZXlzX2xlbmd0aF07Ci0JfQot
Ci0JZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspCi0JCXNldF9yZW1vdmUoa2V5c1tp
XSk7Ci0KLQlhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsgaisrKSB7Ci0JCXMgPSByZHRzYygp
OwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJCXNldF9pbnNlcnRfdW5p
cXVlKGtleXNbaV0pOwotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQotCQlmb3IgKGkg
PSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJCXNldF9yZW1vdmUoa2V5c1tpXSk7Ci0JfQot
CXN1ID0gYSAvIChyICoga2V5c19sZW5ndGgpOwotCi0JZm9yIChpID0gMDsgaSA8IGtleXNfbGVu
Z3RoOyBpKyspCi0JCXNldF9pbnNlcnRfdW5pcXVlKGtleXNbaV0pOwotCi0JZm9yIChpID0gMDsg
aSA8IGtleXNfbGVuZ3RoIC8gMjsgaSsrKQotCQlzZXRfcmVtb3ZlKGtleXNbaV0pOwotCi0JYSA9
IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewotCQlzID0gcmR0c2MoKTsKLQkJc2V0X2dj
KCk7Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBzOwotCX0KLQlzZ2MgPSBhIC8gcjsKLQot
CWEgPSAwOwotCWZvciAoaiA9IDA7IGogPCByOyBqKyspIHsKLQkJcyA9IHJkdHNjKCk7Ci0JCXNl
dF9yZWJ1aWxkKCk7Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBzOwotCX0KLQlzYiA9IGEg
LyByOwotCi0JcHJpbnRmKCIlenUgIgotCSAgICAiJSIgUFJJdTY0ICIgIgotCSAgICAiJSIgUFJJ
dTY0ICIgIgotCSAgICAiJSIgUFJJdTY0ICIgIgotCSAgICAiJSIgUFJJdTY0ICIgIgotCSAgICAi
JSIgUFJJdTY0ICIgIgotCSAgICAiJSIgUFJJdTY0ICIgIgotCSAgICAiJSIgUFJJdTY0ICIgIgot
CSAgICAiJSIgUFJJdTY0ICIgIgotCSAgICAiJSIgUFJJdTY0ICIgIgotCSAgICAiJSIgUFJJdTY0
ICIgIgotCSAgICAiJSIgUFJJdTY0ICIgIgotCSAgICAiJSIgUFJJdTY0ICIgIgotCSAgICAiJSIg
UFJJdTY0ICIgIgotCSAgICAiJSIgUFJJdTY0ICJcbiIsCi0JICAgIGtleXNfbGVuZ3RoLCByaSwg
c2ksIGFpLCBzcywgc3IsIHJnLCBzZywgYWcsIHNkLCBuZywgc3RzLCBzdSwgc2djLCBzYik7Ci0K
LQlmY2xvc2UoZnApOwotCi0JZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspIHsKLQkJ
ZnJlZShrZXlzW2ldKTsKLQl9Ci0KLQlmcmVlKGtleXMpOwotCWtleXNfbGVuZ3RoID0gMDsKLQlz
ZXRfZGVzdHJveSgpOwotCXJldHVybjsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICph
cmd2W10pCi17Ci0JdW5zaWduZWQgaW50IHIsIHNpemU7Ci0KLQljb21tb25fc3JhbmQ0OCgobG9u
ZyBpbnQpdGltZShOVUxMKSk7Ci0JaWYgKGFyZ2MgPCAyKSB7Ci0JCWNrX2Vycm9yKCJVc2FnZTog
Y2tfaHMgPGRpY3Rpb25hcnk+IFs8cmVwZXRpdGlvbnM+IDxpbml0aWFsIHNpemU+XVxuIik7Ci0J
fQotCi0JciA9IDE2OwotCWlmIChhcmdjID49IDMpCi0JCXIgPSBhdG9pKGFyZ3ZbMl0pOwotCi0J
c2l6ZSA9IDg7Ci0JaWYgKGFyZ2MgPj0gNCkKLQkJc2l6ZSA9IGF0b2koYXJndlszXSk7Ci0KLQln
bG9iYWxfc2VlZCA9IGNvbW1vbl9scmFuZDQ4KCk7Ci0JcnVuX3Rlc3QoYXJndlsxXSwgciwgc2l6
ZSwgMCk7Ci0JcnVuX3Rlc3QoYXJndlsxXSwgciwgc2l6ZSwgQ0tfSFNfTU9ERV9ERUxFVEUpOwot
CWZwcmludGYoc3RkZXJyLCAiIyAgICByZXZlcnNlX2luc2VydGlvbiBzZXJpYWxfaW5zZXJ0aW9u
IHJhbmRvbV9pbnNlcnRpb24gc2VyaWFsX3N3YXAgIgotCSAgICAic2VyaWFsX3JlcGxhY2UgcmV2
ZXJzZV9nZXQgc2VyaWFsX2dldCByYW5kb21fZ2V0IHNlcmlhbF9yZW1vdmUgbmVnYXRpdmVfZ2V0
IHRvbWJzdG9uZSAiCi0JICAgICJzZXRfdW5pcXVlIGdjIHJlYnVpbGRcblxuIik7Ci0KLQlyZXR1
cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2sv
cmVncmVzc2lvbnMvY2tfaHMvdmFsaWRhdGUvTWFrZWZpbGUgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19ocy92YWxpZGF0ZS9NYWtlZmlsZQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk2ZTY1MmEwN2U1NWU1N2ZlMjRjMDM1MmZlNDM0NjA3
M2NkZDRjZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19ocy92YWxpZGF0
ZS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS5QSE9OWTogY2hlY2sg
Y2xlYW4gZGlzdHJpYnV0aW9uCi0KLU9CSkVDVFM9c2VyaWFsCi0KLWFsbDogJChPQkpFQ1RTKQot
Ci1zZXJpYWw6IHNlcmlhbC5jIC4uLy4uLy4uL2luY2x1ZGUvY2tfaHMuaCAuLi8uLi8uLi9zcmMv
Y2tfaHMuYwotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzZXJpYWwgc2VyaWFsLmMgLi4vLi4vLi4vc3Jj
L2NrX2hzLmMKLQotY2hlY2s6IGFsbAotCS4vc2VyaWFsCi0KLWNsZWFuOgotCXJtIC1yZiAqfiAq
Lm8gJChPQkpFQ1RTKSAqLmRTWU0gKi5leGUKLQotaW5jbHVkZSAuLi8uLi8uLi9idWlsZC9yZWdy
ZXNzaW9ucy5idWlsZAotQ0ZMQUdTKz0tRF9HTlVfU09VUkNFCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19ocy92YWxpZGF0ZS9zZXJp
YWwuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2hz
L3ZhbGlkYXRlL3NlcmlhbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWNiMTNh
NjEwMzAyNzk4ZGExZGI3M2VhYTk4MGMyYmZiODczMWFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L3JlZ3Jlc3Npb25zL2NrX2hzL3ZhbGlkYXRlL3NlcmlhbC5jCisrKyAvZGV2L251bGwKQEAgLTEs
MzYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMiBTYW15IEFsIEJhaHJhLgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0cwotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRzCi0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICog
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK
LSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxja19ocy5oPgotCi0jaW5jbHVkZSA8
YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8Y2tfbWFsbG9jLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNp
bmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5o
PgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLXN0YXRpYyB2b2lkICoKLWhzX21hbGxv
YyhzaXplX3QgcikKLXsKLQotCXJldHVybiBtYWxsb2Mocik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1o
c19mcmVlKHZvaWQgKnAsIHNpemVfdCBiLCBib29sIHIpCi17Ci0KLQkodm9pZCliOwotCSh2b2lk
KXI7Ci0JZnJlZShwKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2tfbWFsbG9jIG15
X2FsbG9jYXRvciA9IHsKLQkubWFsbG9jID0gaHNfbWFsbG9jLAotCS5mcmVlID0gaHNfZnJlZQot
fTsKLQotY29uc3QgY2hhciAqdGVzdFtdID0geyAiU2FteSIsICJBbCIsICJCYWhyYSIsICJkYW5j
ZXMiLCAiaW4iLCAidGhlIiwgIndpbmQuIiwgIk9uY2UiLAotICAgICAgICAgICAgICAgICAgICAg
ICAidXBvbiIsICJhIiwgInRpbWUiLCAiaGlzIiwgImd5cHN5IiwgImF0ZSIsICJvbmUiLCAiaXRz
eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICJiaXRzeSIsICJzcGlkZXIuIiwgIldoYXQiLCAi
Z29lcyIsICJ1cCIsICJtdXN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgImNvbWUiLCAiZG93
bi4iLCAiV2hhdCIsICJpcyIsICJkb3duIiwgInN0YXlzIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgImRvd24uIiwgIkEiLCAiQiIsICJDIiwgIkQiLCAiRSIsICJGIiwgIkciLCAiSCIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICJJIiwgIkoiLCAiSyIsICJMIiwgIk0iLCAiTiIsICJPIiwgIlAi
LCAiUSIgfTsKLQotY29uc3QgY2hhciAqbmVnYXRpdmUgPSAibmVnYXRpdmUiOwotCi0vKiBQdXJw
b3NlZnVsbHkgY3JhcHB5IGhhc2ggZnVuY3Rpb24uICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZwot
aHNfaGFzaChjb25zdCB2b2lkICpvYmplY3QsIHVuc2lnbmVkIGxvbmcgc2VlZCkKLXsKLQljb25z
dCBjaGFyICpjID0gb2JqZWN0OwotCXVuc2lnbmVkIGxvbmcgaDsKLQotCSh2b2lkKXNlZWQ7Ci0J
aCA9IGNbMF07Ci0JcmV0dXJuIGg7Ci19Ci0KLXN0YXRpYyBib29sCi1oc19jb21wYXJlKGNvbnN0
IHZvaWQgKnByZXZpb3VzLCBjb25zdCB2b2lkICpjb21wYXJlKQotewotCi0JcmV0dXJuIHN0cmNt
cChwcmV2aW91cywgY29tcGFyZSkgPT0gMDsKLX0KLQotc3RhdGljIHZvaWQgKgotdGVzdF9pcCh2
b2lkICprZXksIHZvaWQgKmNsb3N1cmUpCi17Ci0JY29uc3QgY2hhciAqYSA9IGtleTsKLQljb25z
dCBjaGFyICpiID0gY2xvc3VyZTsKLQotCWlmIChzdHJjbXAoYSwgYikgIT0gMCkKLQkJY2tfZXJy
b3IoIk1pc21hdGNoOiAlcyAhPSAlc1xuIiwgYSwgYik7Ci0KLQlyZXR1cm4gY2xvc3VyZTsKLX0K
LQotc3RhdGljIHZvaWQgKgotdGVzdF9uZWdhdGl2ZSh2b2lkICprZXksIHZvaWQgKmNsb3N1cmUp
Ci17Ci0KLQkodm9pZCljbG9zdXJlOwotCWlmIChrZXkgIT0gTlVMTCkKLQkJY2tfZXJyb3IoIkVS
Uk9SOiBBcHBseSBjYWxsYmFjayBleHBlY3RzIE5VTEwgYXJndW1lbnQgaW5zdGVhZCBvZiBbJXNd
XG4iLCBrZXkpOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLXRlc3RfdW5p
cXVlKHZvaWQgKmtleSwgdm9pZCAqY2xvc3VyZSkKLXsKLQotCWlmIChrZXkgIT0gTlVMTCkKLQkJ
Y2tfZXJyb3IoIkVSUk9SOiBBcHBseSBjYWxsYmFjayBleHBlY3RzIE5VTEwgYXJndW1lbnQgaW5z
dGVhZCBvZiBbJXNdXG4iLCBrZXkpOwotCi0JcmV0dXJuIGNsb3N1cmU7Ci19Ci0KLXN0YXRpYyB2
b2lkICoKLXRlc3RfcmVtb3ZlKHZvaWQgKmtleSwgdm9pZCAqY2xvc3VyZSkKLXsKLQotCSh2b2lk
KWtleTsKLQkodm9pZCljbG9zdXJlOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lk
Ci1ydW5fdGVzdCh1bnNpZ25lZCBpbnQgaXMsIHVuc2lnbmVkIGludCBhZCkKLXsKLQlja19oc190
IGhzWzE2XTsKLQljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihocykgLyBzaXplb2YoKmhzKTsK
LQlzaXplX3QgaSwgajsKLQljb25zdCBjaGFyICpibG9iID0gIiNibG9icyI7Ci0JdW5zaWduZWQg
bG9uZyBoOwotCWNrX2hzX2l0ZXJhdG9yX3QgaXQ7Ci0KLQlpZiAoY2tfaHNfaW5pdCgmaHNbMF0s
IENLX0hTX01PREVfU1BNQyB8IENLX0hTX01PREVfT0JKRUNUIHwgYWQsIGhzX2hhc2gsIGhzX2Nv
bXBhcmUsICZteV9hbGxvY2F0b3IsIGlzLCA2NjAyODM0KSA9PSBmYWxzZSkKLQkJY2tfZXJyb3Io
ImNrX2hzX2luaXRcbiIpOwotCi0JZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgewotCQlmb3Ig
KGkgPSAwOyBpIDwgc2l6ZW9mKHRlc3QpIC8gc2l6ZW9mKCp0ZXN0KTsgaSsrKSB7Ci0JCQloID0g
dGVzdFtpXVswXTsKLQkJCWlmIChja19oc19nZXQoJmhzW2pdLCBoLCB0ZXN0W2ldKSAhPSBOVUxM
KSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWlmIChpICYgMSkgewotCQkJCWlmIChja19o
c19wdXRfdW5pcXVlKCZoc1tqXSwgaCwgdGVzdFtpXSkgPT0gZmFsc2UpCi0JCQkJCWNrX2Vycm9y
KCJFUlJPUiBbJXp1XTogRmFpbGVkIHRvIGluc2VydCB1bmlxdWUgKCVzKVxuIiwgaiwgdGVzdFtp
XSk7Ci0JCQl9IGVsc2UgaWYgKGNrX2hzX2FwcGx5KCZoc1tqXSwgaCwgdGVzdFtpXSwgdGVzdF91
bmlxdWUsICh2b2lkICopKHVpbnRwdHJfdCl0ZXN0W2ldKSA9PSBmYWxzZSkgewotCQkJCWNrX2Vy
cm9yKCJFUlJPUjogRmFpbGVkIHRvIGFwcGx5IGZvciBpbnNlcnRpb24uXG4iKTsKLQkJCX0KLQot
CQkJaWYgKGkgJiAxKSB7Ci0JCQkJaWYgKGNrX2hzX3JlbW92ZSgmaHNbal0sIGgsIHRlc3RbaV0p
ID09IGZhbHNlKQotCQkJCQlja19lcnJvcigiRVJST1IgWyV6dV06IEZhaWxlZCB0byByZW1vdmUg
dW5pcXVlICglcylcbiIsIGosIHRlc3RbaV0pOwotCQkJfSBlbHNlIGlmIChja19oc19hcHBseSgm
aHNbal0sIGgsIHRlc3RbaV0sIHRlc3RfcmVtb3ZlLCBOVUxMKSA9PSBmYWxzZSkgewotCQkJCWNr
X2Vycm9yKCJFUlJPUjogRmFpbGVkIHRvIHJlbW92ZSBhcHBseS5cbiIpOwotCQkJfQotCi0JCQlp
ZiAoY2tfaHNfYXBwbHkoJmhzW2pdLCBoLCB0ZXN0W2ldLCB0ZXN0X25lZ2F0aXZlLCAoY2hhciAq
KSh1aW50cHRyX3QpdGVzdFtpXSkgPT0gZmFsc2UpCi0JCQkJY2tfZXJyb3IoIkVSUk9SOiBGYWls
ZWQgdG8gYXBwbHkuXG4iKTsKLQotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoY2tfaHNfZ2MoJmhz
W2pdLCAwLCAwKSA9PSBmYWxzZSkKLQkJCWNrX2Vycm9yKCJFUlJPUjogRmFpbGVkIHRvIEdDIGVt
cHR5IHNldC5cbiIpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodGVzdCkgLyBzaXplb2Yo
KnRlc3QpOyBpKyspIHsKLQkJCWggPSB0ZXN0W2ldWzBdOwotCQkJY2tfaHNfcHV0KCZoc1tqXSwg
aCwgdGVzdFtpXSk7Ci0JCQlpZiAoY2tfaHNfcHV0KCZoc1tqXSwgaCwgdGVzdFtpXSkgPT0gdHJ1
ZSkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbJXVdIFsxXTogcHV0IG11c3QgZmFpbCBvbiBjb2xs
aXNpb24gKCVzKS5cbiIsIGlzLCB0ZXN0W2ldKTsKLQkJCX0KLQkJCWlmIChja19oc19nZXQoJmhz
W2pdLCBoLCB0ZXN0W2ldKSA9PSBOVUxMKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFsldV06IGdl
dCBtdXN0IG5vdCBmYWlsIGFmdGVyIHB1dFxuIiwgaXMpOwotCQkJfQotCQl9Ci0KLQkJLyogVGVz
dCBpdGVyYXRpb24gKi8KLQkJaWYgKGogPT0gMCkgeyAvLyBhdm9pZCB0aGUgYmxvYiBzdHVmZiBh
cyBpdCdzIG5vdCBpbiB0aGUgdGVzdCBhcnJheQotCQkJY2tfaHNfaXRlcmF0b3JfaW5pdCgmaXQp
OwotCQkJdm9pZCAqayA9IE5VTEw7Ci0JCQlpbnQgbWF0Y2hlcyA9IDA7Ci0JCQlpbnQgZW50cmll
cyA9IDA7Ci0JCQl3aGlsZShja19oc19uZXh0KCZoc1tqXSwgJml0LCAmaykpIHsKLQkJCQllbnRy
aWVzKys7Ci0JCQkJZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZXN0KSAvIHNpemVvZigqdGVzdCk7
IGkrKykgewotCQkJCQlpbnQgeCA9IHN0cmNtcCh0ZXN0W2ldLCAoY2hhciAqKWspOwotCQkJCQlp
ZiAoeCA9PSAwKSB7Ci0JCQkJCQltYXRjaGVzKys7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJ
CX0KLQkJCX0KLQotCQkJaWYgKGVudHJpZXMgIT0gbWF0Y2hlcykgewotCQkJCWNrX2Vycm9yKCJJ
dGVyYXRpb24gbXVzdCBtYXRjaCBhbGwgZWxlbWVudHMsIGhhczogJWQsIG1hdGNoZWQ6ICVkIFsl
ZF0iLCBlbnRyaWVzLCBtYXRjaGVzLCBpcyk7Ci0JCQl9Ci0KLQkJCS8qIE5vdyB0ZXN0IGl0ZXJh
dGlvbiBpbiB0aGUgZmFjZSBvZiBncm93cyAoc3BtYykqLwotCQkJY2tfaHNfaXRlcmF0b3JfaW5p
dCgmaXQpOwotCQkJayA9IE5VTEw7Ci0JCQltYXRjaGVzID0gMDsKLQkJCWVudHJpZXMgPSAwOwot
CQkJd2hpbGUoY2tfaHNfbmV4dF9zcG1jKCZoc1tqXSwgJml0LCAmaykpIHsKLQkJCQllbnRyaWVz
Kys7Ci0JCQkJZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZXN0KSAvIHNpemVvZigqdGVzdCk7IGkr
KykgewotCQkJCQlpbnQgeCA9IHN0cmNtcCh0ZXN0W2ldLCAoY2hhciAqKWspOwotCQkJCQlpZiAo
eCA9PSAwKSB7Ci0JCQkJCQltYXRjaGVzKys7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0K
LQkJCQlpZiAoZW50cmllcyA9PSAyMCkgewotCQkJCQlja19oc19ncm93KCZoc1tqXSwgMTI4KTsK
LQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChlbnRyaWVzICE9IG1hdGNoZXMpIHsKLQkJCQlja19lcnJv
cigiQWZ0ZXIgZ3Jvd3RoLCBpdGVyYXRpb24gbXVzdCBtYXRjaCBhbGwgZWxlbWVudHMsIGhhczog
JWQsIG1hdGNoZWQ6ICVkIFslZF0iLCBlbnRyaWVzLCBtYXRjaGVzLCBpcyk7Ci0JCQl9Ci0JCX0K
LQotCQkvKiBUZXN0IGdyb3cgc2VtYW50aWNzLiAqLwotCQlja19oc19ncm93KCZoc1tqXSwgMTI4
KTsKLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZXN0KSAvIHNpemVvZigqdGVzdCk7IGkrKykg
ewotCQkJaCA9IHRlc3RbaV1bMF07Ci0JCQlpZiAoY2tfaHNfcHV0KCZoc1tqXSwgaCwgdGVzdFtp
XSkgPT0gdHJ1ZSkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbJXVdIFsyXTogcHV0IG11c3QgZmFp
bCBvbiBjb2xsaXNpb24uXG4iLCBpcyk7Ci0JCQl9Ci0KLQkJCWlmIChja19oc19nZXQoJmhzW2pd
LCBoLCB0ZXN0W2ldKSA9PSBOVUxMKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFsldV06IGdldCBt
dXN0IG5vdCBmYWlsXG4iLCBpcyk7Ci0JCQl9Ci0JCX0KLQotCQloID0gYmxvYlswXTsKLQkJaWYg
KGNrX2hzX2dldCgmaHNbal0sIGgsIGJsb2IpID09IE5VTEwpIHsKLQkJCWlmIChqID4gMCkKLQkJ
CQlja19lcnJvcigiRVJST1IgWyV1XTogQmxvYiBtdXN0IGFsd2F5cyBleGlzdCBhZnRlciBmaXJz
dC5cbiIsIGlzKTsKLQotCQkJaWYgKGNrX2hzX3B1dCgmaHNbal0sIGgsIGJsb2IpID09IGZhbHNl
KSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFsldV06IEEgdW5pcXVlIGJsb2IgcHV0IGZhaWxlZC5c
biIsIGlzKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChja19oc19wdXQoJmhzW2pdLCBoLCBi
bG9iKSA9PSB0cnVlKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFsldV06IER1cGxpY2F0ZSBibG9i
IHB1dCBzdWNjZWVkZWQuXG4iLCBpcyk7Ci0JCQl9Ci0JCX0KLQotCQkvKiBHcm93IHNldCBhbmQg
Y2hlY2sgZ2V0IHNlbWFudGljcy4gKi8KLQkJY2tfaHNfZ3JvdygmaHNbal0sIDUxMik7Ci0JCWZv
ciAoaSA9IDA7IGkgPCBzaXplb2YodGVzdCkgLyBzaXplb2YoKnRlc3QpOyBpKyspIHsKLQkJCWgg
PSB0ZXN0W2ldWzBdOwotCQkJaWYgKGNrX2hzX2dldCgmaHNbal0sIGgsIHRlc3RbaV0pID09IE5V
TEwpIHsKLQkJCQlja19lcnJvcigiRVJST1IgWyV1XTogZ2V0IG11c3Qgbm90IGZhaWxcbiIsIGlz
KTsKLQkJCX0KLQkJfQotCi0JCS8qIERlbGV0ZSBhbmQgY2hlY2sgbmVnYXRpdmUgbWVtYmVyc2hp
cC4gKi8KLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZXN0KSAvIHNpemVvZigqdGVzdCk7IGkr
KykgewotCQkJdm9pZCAqcjsKLQotCQkJaCA9IHRlc3RbaV1bMF07Ci0JCQlpZiAoY2tfaHNfZ2V0
KCZoc1tqXSwgaCwgdGVzdFtpXSkgPT0gTlVMTCkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHIg
PSBja19oc19yZW1vdmUoJmhzW2pdLCBoLCB0ZXN0W2ldKSwgciA9PSBOVUxMKSB7Ci0JCQkJY2tf
ZXJyb3IoIkVSUk9SIFsldV06IHJlbW92ZSBtdXN0IG5vdCBmYWlsXG4iLCBpcyk7Ci0JCQl9Ci0K
LQkJCWlmIChzdHJjbXAociwgdGVzdFtpXSkgIT0gMCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBb
JXVdOiBSZW1vdmVkIGluY29ycmVjdCBub2RlICglcyAhPSAlcylcbiIsIChjaGFyICopciwgdGVz
dFtpXSwgaXMpOwotCQkJfQotCQl9Ci0KLQkJLyogVGVzdCByZXBsYWNlbWVudCBzZW1hbnRpY3Mu
ICovCi0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodGVzdCkgLyBzaXplb2YoKnRlc3QpOyBpKysp
IHsKLQkJCXZvaWQgKnI7Ci0JCQlib29sIGQ7Ci0KLQkJCWggPSB0ZXN0W2ldWzBdOwotCQkJZCA9
IGNrX2hzX2dldCgmaHNbal0sIGgsIHRlc3RbaV0pICE9IE5VTEw7Ci0JCQlpZiAoY2tfaHNfc2V0
KCZoc1tqXSwgaCwgdGVzdFtpXSwgJnIpID09IGZhbHNlKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9S
IFsldV06IEZhaWxlZCB0byBzZXRcbiIsIGlzKTsKLQkJCX0KLQotCQkJLyogRXhwZWN0ZWQgcmVw
bGFjZW1lbnQuICovCi0JCQlpZiAoZCA9PSB0cnVlICYmIChyID09IE5VTEwgfHwgc3RyY21wKHIs
IHRlc3RbaV0pICE9IDApKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFsldV06IEluY29ycmVjdCBw
cmV2aW91cyB2YWx1ZTogJXMgIT0gJXNcbiIsCi0JCQkJICAgIGlzLCB0ZXN0W2ldLCAoY2hhciAq
KXIpOwotCQkJfQotCi0JCQkvKiBSZXBsYWNlbWVudCBzaG91bGQgc3VjY2VlZC4gKi8KLQkJCWlm
IChja19oc19mYXMoJmhzW2pdLCBoLCB0ZXN0W2ldLCAmcikgPT0gZmFsc2UpCi0JCQkJY2tfZXJy
b3IoIkVSUk9SIFsldV06IGNrX2hzX2ZhcyBtdXN0IHN1Y2NlZWQuXG4iLCBpcyk7Ci0KLQkJCWlm
IChzdHJjbXAociwgdGVzdFtpXSkgIT0gMCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbJXVdOiBJ
bmNvcnJlY3QgcmVwbGFjZWQgdmFsdWU6ICVzICE9ICVzXG4iLAotCQkJCSAgICBpcywgdGVzdFtp
XSwgKGNoYXIgKilyKTsKLQkJCX0KLQotCQkJaWYgKGNrX2hzX2ZhcygmaHNbal0sIGgsIG5lZ2F0
aXZlLCAmcikgPT0gdHJ1ZSkKLQkJCQlja19lcnJvcigiRVJST1IgWyV1XTogUmVwbGFjZW1lbnQg
b2YgbmVnYXRpdmUgc2hvdWxkIGZhaWwuXG4iLCBpcyk7Ci0KLQkJCWlmIChja19oc19zZXQoJmhz
W2pdLCBoLCB0ZXN0W2ldLCAmcikgPT0gZmFsc2UpIHsKLQkJCQlja19lcnJvcigiRVJST1IgWyV1
XTogRmFpbGVkIHRvIHNldCBbMV1cbiIsIGlzKTsKLQkJCX0KLQotCQkJaWYgKHN0cmNtcChyLCB0
ZXN0W2ldKSAhPSAwKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFsldV06IEludmFsaWQgJmhzW2pd
OiAlcyAhPSAlc1xuIiwgaXMsIHRlc3RbaV0sIChjaGFyICopcik7Ci0JCQl9Ci0KLQkJCS8qIEF0
dGVtcHQgaW4tcGxhY2UgbXV0YXRpb24uICovCi0JCQlpZiAoY2tfaHNfYXBwbHkoJmhzW2pdLCBo
LCB0ZXN0W2ldLCB0ZXN0X2lwLCAodm9pZCAqKSh1aW50cHRyX3QpdGVzdFtpXSkgPT0gZmFsc2Up
Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFsldV06IEZhaWxlZCB0byBhcHBseTogJXMgIT0gJXNcbiIs
IGlzLCAoY2hhciAqKXIsIHRlc3RbaV0pOwotCi0JCQlkID0gY2tfaHNfZ2V0KCZoc1tqXSwgaCwg
dGVzdFtpXSkgIT0gTlVMTDsKLQkJCWlmIChkID09IGZhbHNlKQotCQkJCWNrX2Vycm9yKCJFUlJP
UiBbJXVdOiBFeHBlY3RlZCBbJXNdIHRvIGV4aXN0LlxuIiwgaXMsIHRlc3RbaV0pOwotCQl9Ci0K
LQkJaWYgKGogPT0gc2l6ZSAtIDEpCi0JCQlicmVhazsKLQotCQlpZiAoY2tfaHNfbW92ZSgmaHNb
aiArIDFdLCAmaHNbal0sIGhzX2hhc2gsIGhzX2NvbXBhcmUsICZteV9hbGxvY2F0b3IpID09IGZh
bHNlKQotCQkJY2tfZXJyb3IoIkZhaWxlZCB0byBtb3ZlIGhhc2ggdGFibGUiKTsKLQotCQlpZiAo
aiAmIDEpIHsKLQkJCWNrX2hzX2djKCZoc1tqICsgMV0sIDAsIDApOwotCQl9IGVsc2UgewotCQkJ
Y2tfaHNfZ2MoJmhzW2ogKyAxXSwgMjYsIDI2KTsKLQkJfQotCi0JCWlmIChja19oc19yZWJ1aWxk
KCZoc1tqICsgMV0pID09IGZhbHNlKQotCQkJY2tfZXJyb3IoIkZhaWxlZCB0byByZWJ1aWxkIik7
Ci0JfQotCi0JcmV0dXJuOwotfQotCi1pbnQKLW1haW4odm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQg
azsKLQotCWZvciAoayA9IDE2OyBrIDw9IDY0OyBrIDw8PSAxKSB7Ci0JCXJ1bl90ZXN0KGssIDAp
OwotCQlydW5fdGVzdChrLCBDS19IU19NT0RFX0RFTEVURSk7Ci0JCWJyZWFrOwotCX0KLQotCXJl
dHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19odC9iZW5jaG1hcmsvTWFrZWZpbGUgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19odC9iZW5jaG1hcmsvTWFrZWZpbGUKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMzEyNzRlOWYxODY5YjA2ODBlMzE4MzAwNjY5
OWNjOGEwMzE1NjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHQvYmVu
Y2htYXJrL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLlBIT05ZOiBj
bGVhbiBkaXN0cmlidXRpb24KLQotT0JKRUNUUz1zZXJpYWwgc2VyaWFsLmRlbGV0ZSBwYXJhbGxl
bF9ieXRlc3RyaW5nIHBhcmFsbGVsX2J5dGVzdHJpbmcuZGVsZXRlIHBhcmFsbGVsX2RpcmVjdAot
Ci1hbGw6ICQoT0JKRUNUUykKLQotc2VyaWFsOiBzZXJpYWwuYyAuLi8uLi8uLi9pbmNsdWRlL2Nr
X2h0LmggLi4vLi4vLi4vc3JjL2NrX2h0LmMKLQkkKENDKSAkKENGTEFHUykgLW8gc2VyaWFsIHNl
cmlhbC5jIC4uLy4uLy4uL3NyYy9ja19odC5jCi0KLXNlcmlhbC5kZWxldGU6IHNlcmlhbC5jIC4u
Ly4uLy4uL2luY2x1ZGUvY2tfaHQuaCAuLi8uLi8uLi9zcmMvY2tfaHQuYwotCSQoQ0MpICQoQ0ZM
QUdTKSAtREhUX0RFTEVURSAtbyBzZXJpYWwuZGVsZXRlIHNlcmlhbC5jIC4uLy4uLy4uL3NyYy9j
a19odC5jCi0KLXBhcmFsbGVsX2J5dGVzdHJpbmcuZGVsZXRlOiBwYXJhbGxlbF9ieXRlc3RyaW5n
LmMgLi4vLi4vLi4vaW5jbHVkZS9ja19odC5oIC4uLy4uLy4uL3NyYy9ja19odC5jIC4uLy4uLy4u
L3NyYy9ja19lcG9jaC5jCi0JJChDQykgJChQVEhSRUFEX0NGTEFHUykgJChDRkxBR1MpIC1ESFRf
REVMRVRFIC1vIHBhcmFsbGVsX2J5dGVzdHJpbmcuZGVsZXRlIHBhcmFsbGVsX2J5dGVzdHJpbmcu
YyAuLi8uLi8uLi9zcmMvY2tfaHQuYyAuLi8uLi8uLi9zcmMvY2tfZXBvY2guYwotCi1wYXJhbGxl
bF9ieXRlc3RyaW5nOiBwYXJhbGxlbF9ieXRlc3RyaW5nLmMgLi4vLi4vLi4vaW5jbHVkZS9ja19o
dC5oIC4uLy4uLy4uL3NyYy9ja19odC5jIC4uLy4uLy4uL3NyYy9ja19lcG9jaC5jCi0JJChDQykg
JChQVEhSRUFEX0NGTEFHUykgJChDRkxBR1MpIC1vIHBhcmFsbGVsX2J5dGVzdHJpbmcgcGFyYWxs
ZWxfYnl0ZXN0cmluZy5jIC4uLy4uLy4uL3NyYy9ja19odC5jIC4uLy4uLy4uL3NyYy9ja19lcG9j
aC5jCi0KLXBhcmFsbGVsX2RpcmVjdDogcGFyYWxsZWxfZGlyZWN0LmMgLi4vLi4vLi4vaW5jbHVk
ZS9ja19odC5oIC4uLy4uLy4uL3NyYy9ja19odC5jIC4uLy4uLy4uL3NyYy9ja19lcG9jaC5jCi0J
JChDQykgJChQVEhSRUFEX0NGTEFHUykgJChDRkxBR1MpIC1vIHBhcmFsbGVsX2RpcmVjdCBwYXJh
bGxlbF9kaXJlY3QuYyAuLi8uLi8uLi9zcmMvY2tfaHQuYyAuLi8uLi8uLi9zcmMvY2tfZXBvY2gu
YwotCi1jbGVhbjoKLQlybSAtcmYgKn4gKi5vICQoT0JKRUNUUykgKi5kU1lNICouZXhlCi0KLWlu
Y2x1ZGUgLi4vLi4vLi4vYnVpbGQvcmVncmVzc2lvbnMuYnVpbGQKLUNGTEFHUys9LURfR05VX1NP
VVJDRQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdy
ZXNzaW9ucy9ja19odC9iZW5jaG1hcmsvcGFyYWxsZWxfYnl0ZXN0cmluZy5jIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHQvYmVuY2htYXJrL3BhcmFs
bGVsX2J5dGVzdHJpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI4ZjQ2Mjlh
OTlhMzg3MmMxMTYxYTM2YzlhZDY1MjFjNWE2MWQxYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9y
ZWdyZXNzaW9ucy9ja19odC9iZW5jaG1hcmsvcGFyYWxsZWxfYnl0ZXN0cmluZy5jCisrKyAvZGV2
L251bGwKQEAgLTEsNTU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMi0yMDE1IFNhbXkg
QWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAq
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxja19odC5o
PgotCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxja19lcG9jaC5oPgotI2luY2x1
ZGUgPGNrX21hbGxvYy5oPgotI2luY2x1ZGUgPGNrX3ByLmg+Ci0jaW5jbHVkZSA8Y2tfc3Bpbmxv
Y2suaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVk
ZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0j
aW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dGltZS5o
PgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLXN0
YXRpYyBja19odF90IGh0IENLX0NDX0NBQ0hFTElORTsKLXN0YXRpYyBjaGFyICoqa2V5czsKLXN0
YXRpYyBzaXplX3Qga2V5c19sZW5ndGggPSAwOwotc3RhdGljIHNpemVfdCBrZXlzX2NhcGFjaXR5
ID0gMTI4Owotc3RhdGljIGNrX2Vwb2NoX3QgZXBvY2hfaHQ7Ci1zdGF0aWMgY2tfZXBvY2hfcmVj
b3JkX3QgZXBvY2hfd3I7Ci1zdGF0aWMgaW50IG5fdGhyZWFkczsKLXN0YXRpYyBib29sIG5leHRf
c3RhZ2U7Ci0KLWVudW0gc3RhdGUgewotCUhUX1NUQVRFX1NUT1AgPSAwLAotCUhUX1NUQVRFX0dF
VCwKLQlIVF9TVEFURV9TVFJJQ1RfUkVQTEFDRU1FTlQsCi0JSFRfU1RBVEVfREVMRVRJT04sCi0J
SFRfU1RBVEVfUkVQTEFDRU1FTlQsCi0JSFRfU1RBVEVfQ09VTlQKLX07Ci0KLXN0YXRpYyBzdHJ1
Y3QgYWZmaW5pdHkgYWZmaW5lcmF0b3IgPSBBRkZJTklUWV9JTklUSUFMSVpFUjsKLXN0YXRpYyB1
aW50NjRfdCBhY2N1bXVsYXRvcltIVF9TVEFURV9DT1VOVF07Ci1zdGF0aWMgY2tfc3BpbmxvY2tf
dCBhY2N1bXVsYXRvcl9tdXRleCA9IENLX1NQSU5MT0NLX0lOSVRJQUxJWkVSOwotc3RhdGljIGlu
dCBiYXJyaWVyW0hUX1NUQVRFX0NPVU5UXTsKLXN0YXRpYyBpbnQgc3RhdGU7Ci0KLXN0cnVjdCBo
dF9lcG9jaCB7Ci0JY2tfZXBvY2hfZW50cnlfdCBlcG9jaF9lbnRyeTsKLX07Ci0KLUNPTU1PTl9B
TEFSTV9ERUNMQVJFX0dMT0JBTChodF9hbGFybSwgYWxhcm1fZXZlbnQsIG5leHRfc3RhZ2UpCi0K
LXN0YXRpYyB2b2lkCi1hbGFybV9oYW5kbGVyKGludCBzKQotewotCi0JKHZvaWQpczsKLQluZXh0
X3N0YWdlID0gdHJ1ZTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1odF9kZXN0cm95KGNr
X2Vwb2NoX2VudHJ5X3QgKmUpCi17Ci0KLQlmcmVlKGUpOwotCXJldHVybjsKLX0KLQotc3RhdGlj
IHZvaWQgKgotaHRfbWFsbG9jKHNpemVfdCByKQotewotCWNrX2Vwb2NoX2VudHJ5X3QgKmI7Ci0K
LQliID0gbWFsbG9jKHNpemVvZigqYikgKyByKTsKLQlyZXR1cm4gYiArIDE7Ci19Ci0KLXN0YXRp
YyB2b2lkCi1odF9mcmVlKHZvaWQgKnAsIHNpemVfdCBiLCBib29sIHIpCi17Ci0Jc3RydWN0IGh0
X2Vwb2NoICplID0gcDsKLQotCSh2b2lkKWI7Ci0KLQlpZiAociA9PSB0cnVlKSB7Ci0JCS8qIERl
c3RydWN0aW9uIHJlcXVpcmVzIHNhZmUgbWVtb3J5IHJlY2xhbWF0aW9uLiAqLwotCQlja19lcG9j
aF9jYWxsKCZlcG9jaF93ciwgJigtLWUpLT5lcG9jaF9lbnRyeSwgaHRfZGVzdHJveSk7Ci0JfSBl
bHNlIHsKLQkJZnJlZSgtLWUpOwotCX0KLQotCXJldHVybjsKLX0KLQotc3RhdGljIHN0cnVjdCBj
a19tYWxsb2MgbXlfYWxsb2NhdG9yID0gewotCS5tYWxsb2MgPSBodF9tYWxsb2MsCi0JLmZyZWUg
PSBodF9mcmVlCi19OwotCi1zdGF0aWMgdm9pZAotdGFibGVfaW5pdCh2b2lkKQotewotCXVuc2ln
bmVkIGludCBtb2RlID0gQ0tfSFRfTU9ERV9CWVRFU1RSSU5HOwotCi0jaWZkZWYgSFRfREVMRVRF
Ci0JbW9kZSB8PSBDS19IVF9XT1JLTE9BRF9ERUxFVEU7Ci0jZW5kaWYKLQotCWNrX2Vwb2NoX2lu
aXQoJmVwb2NoX2h0KTsKLQlja19lcG9jaF9yZWdpc3RlcigmZXBvY2hfaHQsICZlcG9jaF93ciwg
TlVMTCk7Ci0JY29tbW9uX3NyYW5kNDgoKGxvbmcgaW50KXRpbWUoTlVMTCkpOwotCWlmIChja19o
dF9pbml0KCZodCwgbW9kZSwgTlVMTCwgJm15X2FsbG9jYXRvciwgOCwgY29tbW9uX2xyYW5kNDgo
KSkgPT0gZmFsc2UpIHsKLQkJcGVycm9yKCJja19odF9pbml0Iik7Ci0JCWV4aXQoRVhJVF9GQUlM
VVJFKTsKLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBib29sCi10YWJsZV9yZW1vdmUoY29u
c3QgY2hhciAqdmFsdWUpCi17Ci0JY2tfaHRfZW50cnlfdCBlbnRyeTsKLQlja19odF9oYXNoX3Qg
aDsKLQlzaXplX3QgbCA9IHN0cmxlbih2YWx1ZSk7Ci0KLQlja19odF9oYXNoKCZoLCAmaHQsIHZh
bHVlLCBsKTsKLQlja19odF9lbnRyeV9rZXlfc2V0KCZlbnRyeSwgdmFsdWUsIGwpOwotCXJldHVy
biBja19odF9yZW1vdmVfc3BtYygmaHQsIGgsICZlbnRyeSk7Ci19Ci0KLXN0YXRpYyBib29sCi10
YWJsZV9yZXBsYWNlKGNvbnN0IGNoYXIgKnZhbHVlKQotewotCWNrX2h0X2VudHJ5X3QgZW50cnk7
Ci0JY2tfaHRfaGFzaF90IGg7Ci0Jc2l6ZV90IGwgPSBzdHJsZW4odmFsdWUpOwotCi0JY2tfaHRf
aGFzaCgmaCwgJmh0LCB2YWx1ZSwgbCk7Ci0JY2tfaHRfZW50cnlfc2V0KCZlbnRyeSwgaCwgdmFs
dWUsIGwsICJSRVBMQUNFRCIpOwotCXJldHVybiBja19odF9zZXRfc3BtYygmaHQsIGgsICZlbnRy
eSk7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLXRhYmxlX2dldChjb25zdCBjaGFyICp2YWx1ZSkKLXsK
LQlja19odF9lbnRyeV90IGVudHJ5OwotCWNrX2h0X2hhc2hfdCBoOwotCXNpemVfdCBsID0gc3Ry
bGVuKHZhbHVlKTsKLQotCWNrX2h0X2hhc2goJmgsICZodCwgdmFsdWUsIGwpOwotCWNrX2h0X2Vu
dHJ5X2tleV9zZXQoJmVudHJ5LCB2YWx1ZSwgbCk7Ci0JaWYgKGNrX2h0X2dldF9zcG1jKCZodCwg
aCwgJmVudHJ5KSA9PSB0cnVlKQotCQlyZXR1cm4gY2tfaHRfZW50cnlfdmFsdWUoJmVudHJ5KTsK
LQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgYm9vbAotdGFibGVfaW5zZXJ0KGNvbnN0IGNo
YXIgKnZhbHVlKQotewotCWNrX2h0X2VudHJ5X3QgZW50cnk7Ci0JY2tfaHRfaGFzaF90IGg7Ci0J
c2l6ZV90IGwgPSBzdHJsZW4odmFsdWUpOwotCi0JY2tfaHRfaGFzaCgmaCwgJmh0LCB2YWx1ZSwg
bCk7Ci0JY2tfaHRfZW50cnlfc2V0KCZlbnRyeSwgaCwgdmFsdWUsIGwsIHZhbHVlKTsKLQlyZXR1
cm4gY2tfaHRfcHV0X3NwbWMoJmh0LCBoLCAmZW50cnkpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci10
YWJsZV9jb3VudCh2b2lkKQotewotCi0JcmV0dXJuIGNrX2h0X2NvdW50KCZodCk7Ci19Ci0KLXN0
YXRpYyBib29sCi10YWJsZV9yZXNldCh2b2lkKQotewotCi0JcmV0dXJuIGNrX2h0X3Jlc2V0X3Nw
bWMoJmh0KTsKLX0KLQotc3RhdGljIHZvaWQgKgotcmVhZGVyKHZvaWQgKnVudXNlZCkKLXsKLQlz
aXplX3QgaTsKLQlja19lcG9jaF9yZWNvcmRfdCBlcG9jaF9yZWNvcmQ7Ci0JaW50IHN0YXRlX3By
ZXZpb3VzID0gSFRfU1RBVEVfU1RPUDsKLQlpbnQgbl9zdGF0ZTsKLQl1aW50NjRfdCBzLCBqLCBh
OwotCi0JKHZvaWQpdW51c2VkOwotCWlmIChhZmZfaXRlcmF0ZSgmYWZmaW5lcmF0b3IpICE9IDAp
Ci0JCXBlcnJvcigiV0FSTklORzogRmFpbGVkIHRvIGFmZmluZSB0aHJlYWQiKTsKLQotCXMgPSBq
ID0gYSA9IDA7Ci0JY2tfZXBvY2hfcmVnaXN0ZXIoJmVwb2NoX2h0LCAmZXBvY2hfcmVjb3JkLCBO
VUxMKTsKLQlmb3IgKDs7KSB7Ci0JCWorKzsKLQkJY2tfZXBvY2hfYmVnaW4oJmVwb2NoX3JlY29y
ZCwgTlVMTCk7Ci0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7
IGkrKykgewotCQkJY2hhciAqcjsKLQotCQkJciA9IHRhYmxlX2dldChrZXlzW2ldKTsKLQkJCWlm
IChyID09IE5VTEwpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChzdHJjbXAociwgIlJFUExBQ0VE
IikgPT0gMCkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHN0cmNtcChyLCBrZXlzW2ldKSA9PSAw
KQotCQkJCWNvbnRpbnVlOwotCi0JCQlja19lcnJvcigiRVJST1I6IEZvdW5kIGludmFsaWQgdmFs
dWU6IFslc10gYnV0IGV4cGVjdGVkIFslc11cbiIsIHIsIGtleXNbaV0pOwotCQl9Ci0JCWEgKz0g
cmR0c2MoKSAtIHM7Ci0JCWNrX2Vwb2NoX2VuZCgmZXBvY2hfcmVjb3JkLCBOVUxMKTsKLQotCQlu
X3N0YXRlID0gY2tfcHJfbG9hZF9pbnQoJnN0YXRlKTsKLQkJaWYgKG5fc3RhdGUgIT0gc3RhdGVf
cHJldmlvdXMpIHsKLQkJCWNrX3NwaW5sb2NrX2xvY2soJmFjY3VtdWxhdG9yX211dGV4KTsKLQkJ
CWFjY3VtdWxhdG9yW3N0YXRlX3ByZXZpb3VzXSArPSBhIC8gKGogKiBrZXlzX2xlbmd0aCk7Ci0J
CQlja19zcGlubG9ja191bmxvY2soJmFjY3VtdWxhdG9yX211dGV4KTsKLQkJCWNrX3ByX2luY19p
bnQoJmJhcnJpZXJbc3RhdGVfcHJldmlvdXNdKTsKLQkJCXdoaWxlIChja19wcl9sb2FkX2ludCgm
YmFycmllcltzdGF0ZV9wcmV2aW91c10pICE9IG5fdGhyZWFkcyArIDEpCi0JCQkJY2tfcHJfc3Rh
bGwoKTsKLQotCQkJc3RhdGVfcHJldmlvdXMgPSBuX3N0YXRlOwotCQkJcyA9IGogPSBhID0gMDsK
LQkJfQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIg
KmFyZ3ZbXSkKLXsKLQlGSUxFICpmcDsKLQljaGFyIGJ1ZmZlcls1MTJdOwotCXNpemVfdCBpLCBq
LCByOwotCXVuc2lnbmVkIGludCBkID0gMDsKLQl1aW50NjRfdCBzLCBlLCBhLCByZXBlYXRlZDsK
LQljaGFyICoqdDsKLQlwdGhyZWFkX3QgKnJlYWRlcnM7Ci0JZG91YmxlIHBfciwgcF9kOwotCi0J
Q09NTU9OX0FMQVJNX0RFQ0xBUkVfTE9DQUwoaHRfYWxhcm0sIGFsYXJtX2V2ZW50KQotCi0JciA9
IDIwOwotCXMgPSA4OwotCXBfZCA9IDAuNTsKLQlwX3IgPSAwLjU7Ci0Jbl90aHJlYWRzID0gQ09S
RVMgLSAxOwotCi0JaWYgKGFyZ2MgPCAyKSB7Ci0JCWNrX2Vycm9yKCJVc2FnZTogcGFyYWxsZWwg
PGRpY3Rpb25hcnk+IFs8aW50ZXJ2YWwgbGVuZ3RoPiA8aW5pdGlhbCBzaXplPiA8cmVhZGVycz5c
biIKLQkJICAgICIgPHByb2JhYmlsaXR5IG9mIHJlcGxhY2VtZW50PiA8cHJvYmFiaWxpdHkgb2Yg
ZGVsZXRpb24+IDxlcG9jaCB0aHJlc2hvbGQ+XVxuIik7Ci0JfQotCi0JaWYgKGFyZ2MgPj0gMykK
LQkJciA9IGF0b2koYXJndlsyXSk7Ci0KLQlpZiAoYXJnYyA+PSA0KQotCQlzID0gKHVpbnQ2NF90
KWF0b2koYXJndlszXSk7Ci0KLQlpZiAoYXJnYyA+PSA1KSB7Ci0JCW5fdGhyZWFkcyA9IGF0b2ko
YXJndls0XSk7Ci0JCWlmIChuX3RocmVhZHMgPCAxKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IE51
bWJlciBvZiByZWFkZXJzIG11c3QgYmUgPj0gMS5cbiIpOwotCQl9Ci0JfQotCi0JaWYgKGFyZ2Mg
Pj0gNikgewotCQlwX3IgPSBhdG9mKGFyZ3ZbNV0pIC8gMTAwLjAwOwotCQlpZiAocF9yIDwgMCkg
ewotCQkJY2tfZXJyb3IoIkVSUk9SOiBQcm9iYWJpbGl0eSBvZiByZXBsYWNlbWVudCBtdXN0IGJl
ID49IDAgYW5kIDw9IDEwMC5cbiIpOwotCQl9Ci0JfQotCi0JaWYgKGFyZ2MgPj0gNykgewotCQlw
X2QgPSBhdG9mKGFyZ3ZbNl0pIC8gMTAwLjAwOwotCQlpZiAocF9kIDwgMCkgewotCQkJY2tfZXJy
b3IoIkVSUk9SOiBQcm9iYWJpbGl0eSBvZiBkZWxldGlvbiBtdXN0IGJlID49IDAgYW5kIDw9IDEw
MC5cbiIpOwotCQl9Ci0JfQotCi0JQ09NTU9OX0FMQVJNX0lOSVQoaHRfYWxhcm0sIGFsYXJtX2V2
ZW50LCByKQotCi0JYWZmaW5lcmF0b3IuZGVsdGEgPSAxOwotCXJlYWRlcnMgPSBtYWxsb2Moc2l6
ZW9mKHB0aHJlYWRfdCkgKiBuX3RocmVhZHMpOwotCWFzc2VydChyZWFkZXJzICE9IE5VTEwpOwot
Ci0Ja2V5cyA9IG1hbGxvYyhzaXplb2YoY2hhciAqKSAqIGtleXNfY2FwYWNpdHkpOwotCWFzc2Vy
dChrZXlzICE9IE5VTEwpOwotCi0JZnAgPSBmb3Blbihhcmd2WzFdLCAiciIpOwotCWFzc2VydChm
cCAhPSBOVUxMKTsKLQotCXdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBmcCkg
IT0gTlVMTCkgewotCQlidWZmZXJbc3RybGVuKGJ1ZmZlcikgLSAxXSA9ICdcMCc7Ci0JCWtleXNb
a2V5c19sZW5ndGgrK10gPSBzdHJkdXAoYnVmZmVyKTsKLQkJYXNzZXJ0KGtleXNba2V5c19sZW5n
dGggLSAxXSAhPSBOVUxMKTsKLQotCQlpZiAoa2V5c19sZW5ndGggPT0ga2V5c19jYXBhY2l0eSkg
ewotCQkJdCA9IHJlYWxsb2Moa2V5cywgc2l6ZW9mKGNoYXIgKikgKiAoa2V5c19jYXBhY2l0eSAq
PSAyKSk7Ci0JCQlhc3NlcnQodCAhPSBOVUxMKTsKLQkJCWtleXMgPSB0OwotCQl9Ci0JfQotCi0J
dCA9IHJlYWxsb2Moa2V5cywgc2l6ZW9mKGNoYXIgKikgKiBrZXlzX2xlbmd0aCk7Ci0JYXNzZXJ0
KHQgIT0gTlVMTCk7Ci0Ja2V5cyA9IHQ7Ci0KLQl0YWJsZV9pbml0KCk7Ci0KLQlmb3IgKGkgPSAw
OyBpIDwgKHNpemVfdCluX3RocmVhZHM7IGkrKykgewotCQlpZiAocHRocmVhZF9jcmVhdGUoJnJl
YWRlcnNbaV0sIE5VTEwsIHJlYWRlciwgTlVMTCkgIT0gMCkgewotCQkJY2tfZXJyb3IoIkVSUk9S
OiBGYWlsZWQgdG8gY3JlYXRlIHRocmVhZCAlenUuXG4iLCBpKTsKLQkJfQotCX0KLQotCWZvciAo
aSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKQotCQlkICs9IHRhYmxlX2luc2VydChrZXlzW2ld
KSA9PSBmYWxzZTsKLQotCWZwcmludGYoc3RkZXJyLCAiIFtTXSAlZCByZWFkZXJzLCAxIHdyaXRl
ci5cbiIsIG5fdGhyZWFkcyk7Ci0JZnByaW50ZihzdGRlcnIsICIgW1NdICV6dSBlbnRyaWVzIHN0
b3JlZCBhbmQgJXUgZHVwbGljYXRlcy5cblxuIiwKLQkgICAgdGFibGVfY291bnQoKSwgZCk7Ci0K
LQlmcHJpbnRmKHN0ZGVyciwgIiAsLSBCQVNJQyBURVNUXG4iKTsKLQlmcHJpbnRmKHN0ZGVyciwg
IiB8IEV4ZWN1dGluZyBTTVIgdGVzdC4uLiIpOwotCWEgPSAwOwotCWZvciAoaiA9IDA7IGogPCBy
OyBqKyspIHsKLQkJaWYgKHRhYmxlX3Jlc2V0KCkgPT0gZmFsc2UpIHsKLQkJCWNrX2Vycm9yKCJF
UlJPUjogRmFpbGVkIHRvIHJlc2V0IGhhc2ggdGFibGUuXG4iKTsKLQkJfQotCi0JCXMgPSByZHRz
YygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJCWQgKz0gdGFibGVf
aW5zZXJ0KGtleXNbaV0pID09IGZhbHNlOwotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsK
LQl9Ci0JZnByaW50ZihzdGRlcnIsICJkb25lICglIiBQUkl1NjQgIiB0aWNrcylcbiIsIGEgLyAo
ciAqIGtleXNfbGVuZ3RoKSk7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiB8IEV4ZWN1dGluZyByZXBs
YWNlbWVudCB0ZXN0Li4uIik7Ci0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewot
CQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspCi0JCQl0
YWJsZV9yZXBsYWNlKGtleXNbaV0pOwotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9
Ci0JZnByaW50ZihzdGRlcnIsICJkb25lICglIiBQUkl1NjQgIiB0aWNrcylcbiIsIGEgLyAociAq
IGtleXNfbGVuZ3RoKSk7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiB8IEV4ZWN1dGluZyBnZXQgdGVz
dC4uLiIpOwotCWEgPSAwOwotCWZvciAoaiA9IDA7IGogPCByOyBqKyspIHsKLQkJcyA9IHJkdHNj
KCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKSB7Ci0JCQlpZiAodGFibGVf
Z2V0KGtleXNbaV0pID09IE5VTEwpIHsKLQkJCQlja19lcnJvcigiRVJST1I6IFVuZXhwZWN0ZWQg
TlVMTCB2YWx1ZS5cbiIpOwotCQkJfQotCQl9Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBz
OwotCX0KLQlmcHJpbnRmKHN0ZGVyciwgImRvbmUgKCUiIFBSSXU2NCAiIHRpY2tzKVxuIiwgYSAv
IChyICoga2V5c19sZW5ndGgpKTsKLQotCWEgPSAwOwotCWZwcmludGYoc3RkZXJyLCAiIHwgRXhl
Y3V0aW5nIHJlbW92YWwgdGVzdC4uLiIpOwotCWZvciAoaiA9IDA7IGogPCByOyBqKyspIHsKLQkJ
cyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKQotCQkJdGFi
bGVfcmVtb3ZlKGtleXNbaV0pOwotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQotCQlm
b3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJCXRhYmxlX2luc2VydChrZXlzW2ld
KTsKLQl9Ci0JZnByaW50ZihzdGRlcnIsICJkb25lICglIiBQUkl1NjQgIiB0aWNrcylcbiIsIGEg
LyAociAqIGtleXNfbGVuZ3RoKSk7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiB8IEV4ZWN1dGluZyBu
ZWdhdGl2ZSBsb29rLXVwIHRlc3QuLi4iKTsKLQlhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsg
aisrKSB7Ci0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkr
KykgewotCQkJdGFibGVfZ2V0KCJceDUwXHgwM1x4MDRceDA1XHgwNlx4MTAiKTsKLQkJfQotCQll
ID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9Ci0JZnByaW50ZihzdGRlcnIsICJkb25lICgl
IiBQUkl1NjQgIiB0aWNrcylcbiIsIGEgLyAociAqIGtleXNfbGVuZ3RoKSk7Ci0KLQlja19lcG9j
aF9yZWNvcmRfdCBlcG9jaF90ZW1wb3JhcnkgPSBlcG9jaF93cjsKLQlja19lcG9jaF9zeW5jaHJv
bml6ZSgmZXBvY2hfd3IpOwotCi0JZnByaW50ZihzdGRlcnIsICIgJy0gU3VtbWFyeTogJXUgcGVu
ZGluZywgJXUgcGVhaywgJXUgcmVjbGFtYXRpb25zIC0+ICIKLQkgICAgIiV1IHBlbmRpbmcsICV1
IHBlYWssICV1IHJlY2xhbWF0aW9uc1xuXG4iLAotCSAgICBlcG9jaF90ZW1wb3Jhcnkubl9wZW5k
aW5nLCBlcG9jaF90ZW1wb3Jhcnkubl9wZWFrLCBlcG9jaF90ZW1wb3Jhcnkubl9kaXNwYXRjaCwK
LQkgICAgZXBvY2hfd3Iubl9wZW5kaW5nLCBlcG9jaF93ci5uX3BlYWssIGVwb2NoX3dyLm5fZGlz
cGF0Y2gpOwotCi0JZnByaW50ZihzdGRlcnIsICIgLC0gUkVBREVSIENPTkNVUlJFTkNZXG4iKTsK
LQlmcHJpbnRmKHN0ZGVyciwgIiB8IEV4ZWN1dGluZyByZWFkZXIgdGVzdC4uLiIpOwotCi0JY2tf
cHJfc3RvcmVfaW50KCZzdGF0ZSwgSFRfU1RBVEVfR0VUKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF9p
bnQoJmJhcnJpZXJbSFRfU1RBVEVfU1RPUF0pICE9IG5fdGhyZWFkcykKLQkJY2tfcHJfc3RhbGwo
KTsKLQlja19wcl9pbmNfaW50KCZiYXJyaWVyW0hUX1NUQVRFX1NUT1BdKTsKLQljb21tb25fc2xl
ZXAocik7Ci0JY2tfcHJfc3RvcmVfaW50KCZzdGF0ZSwgSFRfU1RBVEVfU1RSSUNUX1JFUExBQ0VN
RU5UKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF9pbnQoJmJhcnJpZXJbSFRfU1RBVEVfR0VUXSkgIT0g
bl90aHJlYWRzKQotCQlja19wcl9zdGFsbCgpOwotCWZwcmludGYoc3RkZXJyLCAiZG9uZSAocmVh
ZGVyID0gJSIgUFJJdTY0ICIgdGlja3MpXG4iLAotCSAgICBhY2N1bXVsYXRvcltIVF9TVEFURV9H
RVRdIC8gbl90aHJlYWRzKTsKLQotCWZwcmludGYoc3RkZXJyLCAiIHwgRXhlY3V0aW5nIHN0cmlj
dCByZXBsYWNlbWVudCB0ZXN0Li4uIik7Ci0KLQlhID0gcmVwZWF0ZWQgPSAwOwotCWNvbW1vbl9h
bGFybShhbGFybV9oYW5kbGVyLCAmYWxhcm1fZXZlbnQsIHIpOwotCi0JY2tfcHJfaW5jX2ludCgm
YmFycmllcltIVF9TVEFURV9HRVRdKTsKLQlmb3IgKDs7KSB7Ci0JCXJlcGVhdGVkKys7Ci0JCXMg
PSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJCXRhYmxl
X3JlcGxhY2Uoa2V5c1tpXSk7Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBzOwotCi0JCWlm
IChuZXh0X3N0YWdlID09IHRydWUpIHsKLQkJCW5leHRfc3RhZ2UgPSBmYWxzZTsKLQkJCWJyZWFr
OwotCQl9Ci0JfQotCi0JY2tfcHJfc3RvcmVfaW50KCZzdGF0ZSwgSFRfU1RBVEVfREVMRVRJT04p
OwotCXdoaWxlIChja19wcl9sb2FkX2ludCgmYmFycmllcltIVF9TVEFURV9TVFJJQ1RfUkVQTEFD
RU1FTlRdKSAhPSBuX3RocmVhZHMpCi0JCWNrX3ByX3N0YWxsKCk7Ci0JdGFibGVfcmVzZXQoKTsK
LQlja19lcG9jaF9zeW5jaHJvbml6ZSgmZXBvY2hfd3IpOwotCWZwcmludGYoc3RkZXJyLCAiZG9u
ZSAod3JpdGVyID0gJSIgUFJJdTY0ICIgdGlja3MsIHJlYWRlciA9ICUiIFBSSXU2NCAiIHRpY2tz
KVxuIiwKLQkgICAgYSAvIChyZXBlYXRlZCAqIGtleXNfbGVuZ3RoKSwgYWNjdW11bGF0b3JbSFRf
U1RBVEVfU1RSSUNUX1JFUExBQ0VNRU5UXSAvIG5fdGhyZWFkcyk7Ci0KLQljb21tb25fYWxhcm0o
YWxhcm1faGFuZGxlciwgJmFsYXJtX2V2ZW50LCByKTsKLQotCWZwcmludGYoc3RkZXJyLCAiIHwg
RXhlY3V0aW5nIGRlbGV0aW9uIHRlc3QgKCUuMmYpLi4uIiwgcF9kICogMTAwKTsKLQlhID0gcmVw
ZWF0ZWQgPSAwOwotCWNrX3ByX2luY19pbnQoJmJhcnJpZXJbSFRfU1RBVEVfU1RSSUNUX1JFUExB
Q0VNRU5UXSk7Ci0JZm9yICg7OykgewotCQlkb3VibGUgZGVsZXRlOwotCi0JCXJlcGVhdGVkKys7
Ci0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykgewot
CQkJdGFibGVfaW5zZXJ0KGtleXNbaV0pOwotCQkJaWYgKHBfZCAhPSAwLjApIHsKLQkJCQlkZWxl
dGUgPSBjb21tb25fZHJhbmQ0OCgpOwotCQkJCWlmIChkZWxldGUgPD0gcF9kKQotCQkJCQl0YWJs
ZV9yZW1vdmUoa2V5c1tpXSk7Ci0JCQl9Ci0JCX0KLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAt
IHM7Ci0KLQkJaWYgKG5leHRfc3RhZ2UgPT0gdHJ1ZSkgewotCQkJbmV4dF9zdGFnZSA9IGZhbHNl
OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JY2tfcHJfc3RvcmVfaW50KCZzdGF0ZSwgSFRfU1RBVEVf
UkVQTEFDRU1FTlQpOwotCXdoaWxlIChja19wcl9sb2FkX2ludCgmYmFycmllcltIVF9TVEFURV9E
RUxFVElPTl0pICE9IG5fdGhyZWFkcykKLQkJY2tfcHJfc3RhbGwoKTsKLQotCXRhYmxlX3Jlc2V0
KCk7Ci0JY2tfZXBvY2hfc3luY2hyb25pemUoJmVwb2NoX3dyKTsKLQlmcHJpbnRmKHN0ZGVyciwg
ImRvbmUgKHdyaXRlciA9ICUiIFBSSXU2NCAiIHRpY2tzLCByZWFkZXIgPSAlIiBQUkl1NjQgIiB0
aWNrcylcbiIsCi0JICAgIGEgLyAocmVwZWF0ZWQgKiBrZXlzX2xlbmd0aCksIGFjY3VtdWxhdG9y
W0hUX1NUQVRFX0RFTEVUSU9OXSAvIG5fdGhyZWFkcyk7Ci0KLQljb21tb25fYWxhcm0oYWxhcm1f
aGFuZGxlciwgJmFsYXJtX2V2ZW50LCByKTsKLQotCWZwcmludGYoc3RkZXJyLCAiIHwgRXhlY3V0
aW5nIHJlcGxhY2VtZW50IHRlc3QgKCUuMmYpLi4uIiwgcF9yICogMTAwKTsKLQlhID0gcmVwZWF0
ZWQgPSAwOwotCWNrX3ByX2luY19pbnQoJmJhcnJpZXJbSFRfU1RBVEVfREVMRVRJT05dKTsKLQlm
b3IgKDs7KSB7Ci0JCWRvdWJsZSByZXBsYWNlLCBkZWxldGU7Ci0KLQkJcmVwZWF0ZWQrKzsKLQkJ
cyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKSB7Ci0JCQl0
YWJsZV9pbnNlcnQoa2V5c1tpXSk7Ci0JCQlpZiAocF9kICE9IDAuMCkgewotCQkJCWRlbGV0ZSA9
IGNvbW1vbl9kcmFuZDQ4KCk7Ci0JCQkJaWYgKGRlbGV0ZSA8PSBwX2QpCi0JCQkJCXRhYmxlX3Jl
bW92ZShrZXlzW2ldKTsKLQkJCX0KLQkJCWlmIChwX3IgIT0gMC4wKSB7Ci0JCQkJcmVwbGFjZSA9
IGNvbW1vbl9kcmFuZDQ4KCk7Ci0JCQkJaWYgKHJlcGxhY2UgPD0gcF9yKQotCQkJCQl0YWJsZV9y
ZXBsYWNlKGtleXNbaV0pOwotCQkJfQotCQl9Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBz
OwotCi0JCWlmIChuZXh0X3N0YWdlID09IHRydWUpIHsKLQkJCW5leHRfc3RhZ2UgPSBmYWxzZTsK
LQkJCWJyZWFrOwotCQl9Ci0JfQotCWNrX3ByX3N0b3JlX2ludCgmc3RhdGUsIEhUX1NUQVRFX1NU
T1ApOwotCXdoaWxlIChja19wcl9sb2FkX2ludCgmYmFycmllcltIVF9TVEFURV9SRVBMQUNFTUVO
VF0pICE9IG5fdGhyZWFkcykKLQkJY2tfcHJfc3RhbGwoKTsKLQl0YWJsZV9yZXNldCgpOwotCWNr
X2Vwb2NoX3N5bmNocm9uaXplKCZlcG9jaF93cik7Ci0JZnByaW50ZihzdGRlcnIsICJkb25lICh3
cml0ZXIgPSAlIiBQUkl1NjQgIiB0aWNrcywgcmVhZGVyID0gJSIgUFJJdTY0ICIgdGlja3MpXG4i
LAotCSAgICBhIC8gKHJlcGVhdGVkICoga2V5c19sZW5ndGgpLCBhY2N1bXVsYXRvcltIVF9TVEFU
RV9SRVBMQUNFTUVOVF0gLyBuX3RocmVhZHMpOwotCi0JY2tfcHJfaW5jX2ludCgmYmFycmllcltI
VF9TVEFURV9SRVBMQUNFTUVOVF0pOwotCWVwb2NoX3RlbXBvcmFyeSA9IGVwb2NoX3dyOwotCWNr
X2Vwb2NoX3N5bmNocm9uaXplKCZlcG9jaF93cik7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiAnLSBT
dW1tYXJ5OiAldSBwZW5kaW5nLCAldSBwZWFrLCAldSByZWNsYW1hdGlvbnMgLT4gIgotCSAgICAi
JXUgcGVuZGluZywgJXUgcGVhaywgJXUgcmVjbGFtYXRpb25zXG5cbiIsCi0JICAgIGVwb2NoX3Rl
bXBvcmFyeS5uX3BlbmRpbmcsIGVwb2NoX3RlbXBvcmFyeS5uX3BlYWssIGVwb2NoX3RlbXBvcmFy
eS5uX2Rpc3BhdGNoLAotCSAgICBlcG9jaF93ci5uX3BlbmRpbmcsIGVwb2NoX3dyLm5fcGVhaywg
ZXBvY2hfd3Iubl9kaXNwYXRjaCk7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19odC9iZW5jaG1hcmsvcGFy
YWxsZWxfZGlyZWN0LmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNz
aW9ucy9ja19odC9iZW5jaG1hcmsvcGFyYWxsZWxfZGlyZWN0LmMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGRlMWQxMmVmNjJjYWQ4ZjdmMTBmOGZiMGRlZjM2ODYzZGMxOGNlOWQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHQvYmVuY2htYXJrL3BhcmFsbGVs
X2RpcmVjdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgMjAxMi0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlIDxja19odC5oPgotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8Y2tf
ZXBvY2guaD4KLSNpbmNsdWRlIDxja19tYWxsb2MuaD4KLSNpbmNsdWRlIDxja19wci5oPgotI2lu
Y2x1ZGUgPGNrX3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxpbnR0
eXBlcy5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNs
dWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgot
I2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgIi4uLy4u
L2NvbW1vbi5oIgotCi1zdGF0aWMgY2tfaHRfdCBodCBDS19DQ19DQUNIRUxJTkU7Ci1zdGF0aWMg
dWludHB0cl90ICprZXlzOwotc3RhdGljIHNpemVfdCBrZXlzX2xlbmd0aCA9IDA7Ci1zdGF0aWMg
Y2tfZXBvY2hfdCBlcG9jaF9odDsKLXN0YXRpYyBja19lcG9jaF9yZWNvcmRfdCBlcG9jaF93cjsK
LXN0YXRpYyBpbnQgbl90aHJlYWRzOwotc3RhdGljIGJvb2wgbmV4dF9zdGFnZTsKLQotZW51bSBz
dGF0ZSB7Ci0JSFRfU1RBVEVfU1RPUCA9IDAsCi0JSFRfU1RBVEVfR0VULAotCUhUX1NUQVRFX1NU
UklDVF9SRVBMQUNFTUVOVCwKLQlIVF9TVEFURV9ERUxFVElPTiwKLQlIVF9TVEFURV9SRVBMQUNF
TUVOVCwKLQlIVF9TVEFURV9DT1VOVAotfTsKLQotc3RhdGljIHN0cnVjdCBhZmZpbml0eSBhZmZp
bmVyYXRvciA9IEFGRklOSVRZX0lOSVRJQUxJWkVSOwotc3RhdGljIHVpbnQ2NF90IGFjY3VtdWxh
dG9yW0hUX1NUQVRFX0NPVU5UXTsKLXN0YXRpYyBja19zcGlubG9ja190IGFjY3VtdWxhdG9yX211
dGV4ID0gQ0tfU1BJTkxPQ0tfSU5JVElBTElaRVI7Ci1zdGF0aWMgaW50IGJhcnJpZXJbSFRfU1RB
VEVfQ09VTlRdOwotc3RhdGljIGludCBzdGF0ZTsKLQotc3RydWN0IGh0X2Vwb2NoIHsKLQlja19l
cG9jaF9lbnRyeV90IGVwb2NoX2VudHJ5OwotfTsKLQotQ09NTU9OX0FMQVJNX0RFQ0xBUkVfR0xP
QkFMKGh0X2FsYXJtLCBhbGFybV9ldmVudCwgbmV4dF9zdGFnZSkKLQotc3RhdGljIHZvaWQKLWFs
YXJtX2hhbmRsZXIoaW50IHMpCi17Ci0KLQkodm9pZClzOwotCW5leHRfc3RhZ2UgPSB0cnVlOwot
CXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLWh0X2Rlc3Ryb3koY2tfZXBvY2hfZW50cnlfdCAq
ZSkKLXsKLQotCWZyZWUoZSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCAqCi1odF9tYWxs
b2Moc2l6ZV90IHIpCi17Ci0JY2tfZXBvY2hfZW50cnlfdCAqYjsKLQotCWIgPSBtYWxsb2Moc2l6
ZW9mKCpiKSArIHIpOwotCXJldHVybiBiICsgMTsKLX0KLQotc3RhdGljIHZvaWQKLWh0X2ZyZWUo
dm9pZCAqcCwgc2l6ZV90IGIsIGJvb2wgcikKLXsKLQlzdHJ1Y3QgaHRfZXBvY2ggKmUgPSBwOwot
Ci0JKHZvaWQpYjsKLQotCWlmIChyID09IHRydWUpIHsKLQkJLyogRGVzdHJ1Y3Rpb24gcmVxdWly
ZXMgc2FmZSBtZW1vcnkgcmVjbGFtYXRpb24uICovCi0JCWNrX2Vwb2NoX2NhbGwoJmVwb2NoX3dy
LCAmKC0tZSktPmVwb2NoX2VudHJ5LCBodF9kZXN0cm95KTsKLQl9IGVsc2UgewotCQlmcmVlKC0t
ZSk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgc3RydWN0IGNrX21hbGxvYyBteV9hbGxv
Y2F0b3IgPSB7Ci0JLm1hbGxvYyA9IGh0X21hbGxvYywKLQkuZnJlZSA9IGh0X2ZyZWUKLX07Ci0K
LXN0YXRpYyB2b2lkCi1oYXNoX2Z1bmN0aW9uKGNrX2h0X2hhc2hfdCAqaCwgY29uc3Qgdm9pZCAq
a2V5LCBzaXplX3Qga2V5X2xlbmd0aCwgdWludDY0X3Qgc2VlZCkKLXsKLQljb25zdCB1aW50cHRy
X3QgKnZhbHVlID0ga2V5OwotCi0JKHZvaWQpa2V5X2xlbmd0aDsKLQkodm9pZClzZWVkOwotCWgt
PnZhbHVlID0gKnZhbHVlOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXRhYmxlX2luaXQo
dm9pZCkKLXsKLQotCWNrX2Vwb2NoX2luaXQoJmVwb2NoX2h0KTsKLQlja19lcG9jaF9yZWdpc3Rl
cigmZXBvY2hfaHQsICZlcG9jaF93ciwgTlVMTCk7Ci0JY29tbW9uX3NyYW5kNDgoKGxvbmcgaW50
KXRpbWUoTlVMTCkpOwotCWlmIChja19odF9pbml0KCZodCwgQ0tfSFRfTU9ERV9ESVJFQ1QsIGhh
c2hfZnVuY3Rpb24sICZteV9hbGxvY2F0b3IsIDgsIGNvbW1vbl9scmFuZDQ4KCkpID09IGZhbHNl
KSB7Ci0JCXBlcnJvcigiY2tfaHRfaW5pdCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQot
Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgYm9vbAotdGFibGVfcmVtb3ZlKHVpbnRwdHJfdCB2YWx1
ZSkKLXsKLQlja19odF9lbnRyeV90IGVudHJ5OwotCWNrX2h0X2hhc2hfdCBoOwotCi0JY2tfaHRf
aGFzaF9kaXJlY3QoJmgsICZodCwgdmFsdWUpOwotCWNrX2h0X2VudHJ5X2tleV9zZXRfZGlyZWN0
KCZlbnRyeSwgdmFsdWUpOwotCXJldHVybiBja19odF9yZW1vdmVfc3BtYygmaHQsIGgsICZlbnRy
eSk7Ci19Ci0KLXN0YXRpYyBib29sCi10YWJsZV9yZXBsYWNlKHVpbnRwdHJfdCB2YWx1ZSkKLXsK
LQlja19odF9lbnRyeV90IGVudHJ5OwotCWNrX2h0X2hhc2hfdCBoOwotCi0JY2tfaHRfaGFzaF9k
aXJlY3QoJmgsICZodCwgdmFsdWUpOwotCWNrX2h0X2VudHJ5X3NldF9kaXJlY3QoJmVudHJ5LCBo
LCB2YWx1ZSwgNjYwNTI0MSk7Ci0JcmV0dXJuIGNrX2h0X3NldF9zcG1jKCZodCwgaCwgJmVudHJ5
KTsKLX0KLQotc3RhdGljIHVpbnRwdHJfdAotdGFibGVfZ2V0KHVpbnRwdHJfdCB2YWx1ZSkKLXsK
LQlja19odF9lbnRyeV90IGVudHJ5OwotCWNrX2h0X2hhc2hfdCBoOwotCi0JY2tfaHRfaGFzaF9k
aXJlY3QoJmgsICZodCwgdmFsdWUpOwotCWNrX2h0X2VudHJ5X2tleV9zZXRfZGlyZWN0KCZlbnRy
eSwgdmFsdWUpOwotCWlmIChja19odF9nZXRfc3BtYygmaHQsIGgsICZlbnRyeSkgPT0gdHJ1ZSkK
LQkJcmV0dXJuIGNrX2h0X2VudHJ5X3ZhbHVlX2RpcmVjdCgmZW50cnkpOwotCi0JcmV0dXJuIDA7
Ci19Ci0KLXN0YXRpYyBib29sCi10YWJsZV9pbnNlcnQodWludHB0cl90IHZhbHVlKQotewotCWNr
X2h0X2VudHJ5X3QgZW50cnk7Ci0JY2tfaHRfaGFzaF90IGg7Ci0KLQlja19odF9oYXNoX2RpcmVj
dCgmaCwgJmh0LCB2YWx1ZSk7Ci0JY2tfaHRfZW50cnlfc2V0X2RpcmVjdCgmZW50cnksIGgsIHZh
bHVlLCB2YWx1ZSk7Ci0JcmV0dXJuIGNrX2h0X3B1dF9zcG1jKCZodCwgaCwgJmVudHJ5KTsKLX0K
LQotc3RhdGljIHNpemVfdAotdGFibGVfY291bnQodm9pZCkKLXsKLQotCXJldHVybiBja19odF9j
b3VudCgmaHQpOwotfQotCi1zdGF0aWMgYm9vbAotdGFibGVfcmVzZXQodm9pZCkKLXsKLQotCXJl
dHVybiBja19odF9yZXNldF9zcG1jKCZodCk7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLWh0X3JlYWRl
cih2b2lkICp1bnVzZWQpCi17Ci0Jc2l6ZV90IGk7Ci0JY2tfZXBvY2hfcmVjb3JkX3QgZXBvY2hf
cmVjb3JkOwotCWludCBzdGF0ZV9wcmV2aW91cyA9IEhUX1NUQVRFX1NUT1A7Ci0JaW50IG5fc3Rh
dGU7Ci0JdWludDY0X3QgcywgaiwgYTsKLQotCSh2b2lkKXVudXNlZDsKLQlpZiAoYWZmX2l0ZXJh
dGUoJmFmZmluZXJhdG9yKSAhPSAwKQotCQlwZXJyb3IoIldBUk5JTkc6IEZhaWxlZCB0byBhZmZp
bmUgdGhyZWFkIik7Ci0KLQlzID0gaiA9IGEgPSAwOwotCWNrX2Vwb2NoX3JlZ2lzdGVyKCZlcG9j
aF9odCwgJmVwb2NoX3JlY29yZCwgTlVMTCk7Ci0JZm9yICg7OykgewotCQlqKys7Ci0JCWNrX2Vw
b2NoX2JlZ2luKCZlcG9jaF9yZWNvcmQsIE5VTEwpOwotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChp
ID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspIHsKLQkJCXVpbnRwdHJfdCByOwotCi0JCQlyID0g
dGFibGVfZ2V0KGtleXNbaV0pOwotCQkJaWYgKHIgPT0gMCkKLQkJCQljb250aW51ZTsKLQotCQkJ
aWYgKHIgPT0gNjYwNTI0MSkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHIgPT0ga2V5c1tpXSkK
LQkJCQljb250aW51ZTsKLQotCQkJY2tfZXJyb3IoIkVSUk9SOiBGb3VuZCBpbnZhbGlkIHZhbHVl
OiBbJWp1XVxuIiwKLQkJCSAgICAodWludG1heF90KXIpOwotCQl9Ci0JCWEgKz0gcmR0c2MoKSAt
IHM7Ci0JCWNrX2Vwb2NoX2VuZCgmZXBvY2hfcmVjb3JkLCBOVUxMKTsKLQotCQluX3N0YXRlID0g
Y2tfcHJfbG9hZF9pbnQoJnN0YXRlKTsKLQkJaWYgKG5fc3RhdGUgIT0gc3RhdGVfcHJldmlvdXMp
IHsKLQkJCWNrX3NwaW5sb2NrX2xvY2soJmFjY3VtdWxhdG9yX211dGV4KTsKLQkJCWFjY3VtdWxh
dG9yW3N0YXRlX3ByZXZpb3VzXSArPSBhIC8gKGogKiBrZXlzX2xlbmd0aCk7Ci0JCQlja19zcGlu
bG9ja191bmxvY2soJmFjY3VtdWxhdG9yX211dGV4KTsKLQkJCWNrX3ByX2luY19pbnQoJmJhcnJp
ZXJbc3RhdGVfcHJldmlvdXNdKTsKLQkJCXdoaWxlIChja19wcl9sb2FkX2ludCgmYmFycmllcltz
dGF0ZV9wcmV2aW91c10pICE9IG5fdGhyZWFkcyArIDEpCi0JCQkJY2tfcHJfc3RhbGwoKTsKLQot
CQkJc3RhdGVfcHJldmlvdXMgPSBuX3N0YXRlOwotCQkJcyA9IGogPSBhID0gMDsKLQkJfQotCX0K
LQotCXJldHVybiBOVUxMOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK
LXsKLQlzaXplX3QgaSwgaiwgcjsKLQl1bnNpZ25lZCBpbnQgZCA9IDA7Ci0JdWludDY0X3Qgcywg
ZSwgYSwgcmVwZWF0ZWQ7Ci0JcHRocmVhZF90ICpyZWFkZXJzOwotCWRvdWJsZSBwX3IsIHBfZDsK
LQotCUNPTU1PTl9BTEFSTV9ERUNMQVJFX0xPQ0FMKGh0X2FsYXJtLCBhbGFybV9ldmVudCkKLQot
CXIgPSAyMDsKLQlzID0gODsKLQlwX2QgPSAwLjU7Ci0JcF9yID0gMC41OwotCW5fdGhyZWFkcyA9
IENPUkVTIC0gMTsKLQotCWlmIChhcmdjIDwgMikgewotCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdl
OiBwYXJhbGxlbCA8I2VudHJpZXM+IFs8aW50ZXJ2YWwgbGVuZ3RoPiA8aW5pdGlhbCBzaXplPiA8
cmVhZGVycz5cbiIKLQkJICAgICIgPHByb2JhYmlsaXR5IG9mIHJlcGxhY2VtZW50PiA8cHJvYmFi
aWxpdHkgb2YgZGVsZXRpb24+IDxlcG9jaCB0aHJlc2hvbGQ+XVxuIik7Ci0JCWV4aXQoRVhJVF9G
QUlMVVJFKTsKLQl9Ci0KLQlpZiAoYXJnYyA+PSAzKQotCQlyID0gYXRvaShhcmd2WzJdKTsKLQot
CWlmIChhcmdjID49IDQpCi0JCXMgPSAodWludDY0X3QpYXRvaShhcmd2WzNdKTsKLQotCWlmIChh
cmdjID49IDUpIHsKLQkJbl90aHJlYWRzID0gYXRvaShhcmd2WzRdKTsKLQkJaWYgKG5fdGhyZWFk
cyA8IDEpIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogTnVtYmVyIG9mIHJlYWRlcnMgbXVzdCBiZSA+
PSAxLlxuIik7Ci0JCX0KLQl9Ci0KLQlpZiAoYXJnYyA+PSA2KSB7Ci0JCXBfciA9IGF0b2YoYXJn
dls1XSkgLyAxMDAuMDA7Ci0JCWlmIChwX3IgPCAwKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IFBy
b2JhYmlsaXR5IG9mIHJlcGxhY2VtZW50IG11c3QgYmUgPj0gMCBhbmQgPD0gMTAwLlxuIik7Ci0J
CX0KLQl9Ci0KLQlpZiAoYXJnYyA+PSA3KSB7Ci0JCXBfZCA9IGF0b2YoYXJndls2XSkgLyAxMDAu
MDA7Ci0JCWlmIChwX2QgPCAwKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IFByb2JhYmlsaXR5IG9m
IGRlbGV0aW9uIG11c3QgYmUgPj0gMCBhbmQgPD0gMTAwLlxuIik7Ci0JCX0KLQl9Ci0KLQlDT01N
T05fQUxBUk1fSU5JVChodF9hbGFybSwgYWxhcm1fZXZlbnQsIHIpCi0KLQlhZmZpbmVyYXRvci5k
ZWx0YSA9IDE7Ci0JcmVhZGVycyA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG5fdGhyZWFk
cyk7Ci0JYXNzZXJ0KHJlYWRlcnMgIT0gTlVMTCk7Ci0KLQlrZXlzX2xlbmd0aCA9IChzaXplX3Qp
YXRvaShhcmd2WzFdKTsKLQlrZXlzID0gbWFsbG9jKHNpemVvZih1aW50cHRyX3QpICoga2V5c19s
ZW5ndGgpOwotCWFzc2VydChrZXlzICE9IE5VTEwpOwotCi0JdGFibGVfaW5pdCgpOwotCi0JZm9y
IChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspIHsKLQkJa2V5c1tpXSA9ICh1aW50cHRyX3Qp
Y29tbW9uX2xyYW5kNDgoKTsKLQkJd2hpbGUgKGtleXNbaV0gPT0gMikKLQkJCWtleXNbaV0gPSAo
dWludHB0cl90KWNvbW1vbl9scmFuZDQ4KCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IChzaXpl
X3Qpbl90aHJlYWRzOyBpKyspIHsKLQkJaWYgKHB0aHJlYWRfY3JlYXRlKCZyZWFkZXJzW2ldLCBO
VUxMLCBodF9yZWFkZXIsIE5VTEwpICE9IDApIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogRmFpbGVk
IHRvIGNyZWF0ZSB0aHJlYWQgJXp1LlxuIiwgaSk7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBp
IDwga2V5c19sZW5ndGg7IGkrKykKLQkJZCArPSB0YWJsZV9pbnNlcnQoa2V5c1tpXSkgPT0gZmFs
c2U7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiBbU10gJXp1IGVudHJpZXMgc3RvcmVkIGFuZCAldSBk
dXBsaWNhdGVzLlxuXG4iLAotCSAgICB0YWJsZV9jb3VudCgpLCBkKTsKLQotCWZwcmludGYoc3Rk
ZXJyLCAiICwtIEJBU0lDIFRFU1RcbiIpOwotCWZwcmludGYoc3RkZXJyLCAiIHwgRXhlY3V0aW5n
IFNNUiB0ZXN0Li4uIik7Ci0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewotCQlp
ZiAodGFibGVfcmVzZXQoKSA9PSBmYWxzZSkgewotCQkJY2tfZXJyb3IoIkVSUk9SOiBGYWlsZWQg
dG8gcmVzZXQgaGFzaCB0YWJsZS5cbiIpOwotCQl9Ci0KLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAo
aSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKQotCQkJZCArPSB0YWJsZV9pbnNlcnQoa2V5c1tp
XSkgPT0gZmFsc2U7Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBzOwotCX0KLQlmcHJpbnRm
KHN0ZGVyciwgImRvbmUgKCUiIFBSSXU2NCAiIHRpY2tzKVxuIiwgYSAvIChyICoga2V5c19sZW5n
dGgpKTsKLQotCWZwcmludGYoc3RkZXJyLCAiIHwgRXhlY3V0aW5nIHJlcGxhY2VtZW50IHRlc3Qu
Li4iKTsKLQlhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsgaisrKSB7Ci0JCXMgPSByZHRzYygp
OwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJCXRhYmxlX3JlcGxhY2Uo
a2V5c1tpXSk7Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBzOwotCX0KLQlmcHJpbnRmKHN0
ZGVyciwgImRvbmUgKCUiIFBSSXU2NCAiIHRpY2tzKVxuIiwgYSAvIChyICoga2V5c19sZW5ndGgp
KTsKLQotCWZwcmludGYoc3RkZXJyLCAiIHwgRXhlY3V0aW5nIGdldCB0ZXN0Li4uIik7Ci0JYSA9
IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChp
ID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspIHsKLQkJCWlmICh0YWJsZV9nZXQoa2V5c1tpXSkg
PT0gMCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUjogVW5leHBlY3RlZCAwIHZhbHVlLlxuIik7Ci0J
CQl9Ci0JCX0KLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAtIHM7Ci0JfQotCWZwcmludGYoc3Rk
ZXJyLCAiZG9uZSAoJSIgUFJJdTY0ICIgdGlja3MpXG4iLCBhIC8gKHIgKiBrZXlzX2xlbmd0aCkp
OwotCi0JYSA9IDA7Ci0JZnByaW50ZihzdGRlcnIsICIgfCBFeGVjdXRpbmcgcmVtb3ZhbCB0ZXN0
Li4uIik7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewotCQlzID0gcmR0c2MoKTsKLQkJZm9y
IChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspCi0JCQl0YWJsZV9yZW1vdmUoa2V5c1tpXSk7
Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBzOwotCi0JCWZvciAoaSA9IDA7IGkgPCBrZXlz
X2xlbmd0aDsgaSsrKQotCQkJdGFibGVfaW5zZXJ0KGtleXNbaV0pOwotCX0KLQlmcHJpbnRmKHN0
ZGVyciwgImRvbmUgKCUiIFBSSXU2NCAiIHRpY2tzKVxuIiwgYSAvIChyICoga2V5c19sZW5ndGgp
KTsKLQotCWZwcmludGYoc3RkZXJyLCAiIHwgRXhlY3V0aW5nIG5lZ2F0aXZlIGxvb2stdXAgdGVz
dC4uLiIpOwotCWEgPSAwOwotCWZvciAoaiA9IDA7IGogPCByOyBqKyspIHsKLQkJcyA9IHJkdHNj
KCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKSB7Ci0JCQl0YWJsZV9nZXQo
Mik7Ci0JCX0KLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAtIHM7Ci0JfQotCWZwcmludGYoc3Rk
ZXJyLCAiZG9uZSAoJSIgUFJJdTY0ICIgdGlja3MpXG4iLCBhIC8gKHIgKiBrZXlzX2xlbmd0aCkp
OwotCi0JY2tfZXBvY2hfcmVjb3JkX3QgZXBvY2hfdGVtcG9yYXJ5ID0gZXBvY2hfd3I7Ci0JY2tf
ZXBvY2hfc3luY2hyb25pemUoJmVwb2NoX3dyKTsKLQotCWZwcmludGYoc3RkZXJyLCAiICctIFN1
bW1hcnk6ICV1IHBlbmRpbmcsICV1IHBlYWssICV1IHJlY2xhbWF0aW9ucyAtPiAiCi0JICAgICIl
dSBwZW5kaW5nLCAldSBwZWFrLCAldSByZWNsYW1hdGlvbnNcblxuIiwKLQkgICAgZXBvY2hfdGVt
cG9yYXJ5Lm5fcGVuZGluZywgZXBvY2hfdGVtcG9yYXJ5Lm5fcGVhaywgZXBvY2hfdGVtcG9yYXJ5
Lm5fZGlzcGF0Y2gsCi0JICAgIGVwb2NoX3dyLm5fcGVuZGluZywgZXBvY2hfd3Iubl9wZWFrLCBl
cG9jaF93ci5uX2Rpc3BhdGNoKTsKLQotCWZwcmludGYoc3RkZXJyLCAiICwtIFJFQURFUiBDT05D
VVJSRU5DWVxuIik7Ci0JZnByaW50ZihzdGRlcnIsICIgfCBFeGVjdXRpbmcgcmVhZGVyIHRlc3Qu
Li4iKTsKLQotCWNrX3ByX3N0b3JlX2ludCgmc3RhdGUsIEhUX1NUQVRFX0dFVCk7Ci0Jd2hpbGUg
KGNrX3ByX2xvYWRfaW50KCZiYXJyaWVyW0hUX1NUQVRFX1NUT1BdKSAhPSBuX3RocmVhZHMpCi0J
CWNrX3ByX3N0YWxsKCk7Ci0JY2tfcHJfaW5jX2ludCgmYmFycmllcltIVF9TVEFURV9TVE9QXSk7
Ci0JY29tbW9uX3NsZWVwKHIpOwotCWNrX3ByX3N0b3JlX2ludCgmc3RhdGUsIEhUX1NUQVRFX1NU
UklDVF9SRVBMQUNFTUVOVCk7Ci0Jd2hpbGUgKGNrX3ByX2xvYWRfaW50KCZiYXJyaWVyW0hUX1NU
QVRFX0dFVF0pICE9IG5fdGhyZWFkcykKLQkJY2tfcHJfc3RhbGwoKTsKLQlmcHJpbnRmKHN0ZGVy
ciwgImRvbmUgKHJlYWRlciA9ICUiIFBSSXU2NCAiIHRpY2tzKVxuIiwKLQkgICAgYWNjdW11bGF0
b3JbSFRfU1RBVEVfR0VUXSAvIG5fdGhyZWFkcyk7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiB8IEV4
ZWN1dGluZyBzdHJpY3QgcmVwbGFjZW1lbnQgdGVzdC4uLiIpOwotCi0JYSA9IHJlcGVhdGVkID0g
MDsKLQljb21tb25fYWxhcm0oYWxhcm1faGFuZGxlciwgJmFsYXJtX2V2ZW50LCByKTsKLQotCWNr
X3ByX2luY19pbnQoJmJhcnJpZXJbSFRfU1RBVEVfR0VUXSk7Ci0JZm9yICg7OykgewotCQlyZXBl
YXRlZCsrOwotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBp
KyspCi0JCQl0YWJsZV9yZXBsYWNlKGtleXNbaV0pOwotCQllID0gcmR0c2MoKTsKLQkJYSArPSBl
IC0gczsKLQotCQlpZiAobmV4dF9zdGFnZSA9PSB0cnVlKSB7Ci0JCQluZXh0X3N0YWdlID0gZmFs
c2U7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWNrX3ByX3N0b3JlX2ludCgmc3RhdGUsIEhUX1NU
QVRFX0RFTEVUSU9OKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF9pbnQoJmJhcnJpZXJbSFRfU1RBVEVf
U1RSSUNUX1JFUExBQ0VNRU5UXSkgIT0gbl90aHJlYWRzKQotCQlja19wcl9zdGFsbCgpOwotCXRh
YmxlX3Jlc2V0KCk7Ci0JY2tfZXBvY2hfc3luY2hyb25pemUoJmVwb2NoX3dyKTsKLQlmcHJpbnRm
KHN0ZGVyciwgImRvbmUgKHdyaXRlciA9ICUiIFBSSXU2NCAiIHRpY2tzLCByZWFkZXIgPSAlIiBQ
Ukl1NjQgIiB0aWNrcylcbiIsCi0JICAgIGEgLyAocmVwZWF0ZWQgKiBrZXlzX2xlbmd0aCksIGFj
Y3VtdWxhdG9yW0hUX1NUQVRFX1NUUklDVF9SRVBMQUNFTUVOVF0gLyBuX3RocmVhZHMpOwotCi0J
Y29tbW9uX2FsYXJtKGFsYXJtX2hhbmRsZXIsICZhbGFybV9ldmVudCwgcik7Ci0KLQlmcHJpbnRm
KHN0ZGVyciwgIiB8IEV4ZWN1dGluZyBkZWxldGlvbiB0ZXN0ICglLjJmKS4uLiIsIHBfZCAqIDEw
MCk7Ci0JYSA9IHJlcGVhdGVkID0gMDsKLQlja19wcl9pbmNfaW50KCZiYXJyaWVyW0hUX1NUQVRF
X1NUUklDVF9SRVBMQUNFTUVOVF0pOwotCWZvciAoOzspIHsKLQkJZG91YmxlIGRlbGV0ZTsKLQot
CQlyZXBlYXRlZCsrOwotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVu
Z3RoOyBpKyspIHsKLQkJCXRhYmxlX2luc2VydChrZXlzW2ldKTsKLQkJCWlmIChwX2QgIT0gMC4w
KSB7Ci0JCQkJZGVsZXRlID0gY29tbW9uX2RyYW5kNDgoKTsKLQkJCQlpZiAoZGVsZXRlIDw9IHBf
ZCkKLQkJCQkJdGFibGVfcmVtb3ZlKGtleXNbaV0pOwotCQkJfQotCQl9Ci0JCWUgPSByZHRzYygp
OwotCQlhICs9IGUgLSBzOwotCi0JCWlmIChuZXh0X3N0YWdlID09IHRydWUpIHsKLQkJCW5leHRf
c3RhZ2UgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWNrX3ByX3N0b3JlX2ludCgmc3Rh
dGUsIEhUX1NUQVRFX1JFUExBQ0VNRU5UKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF9pbnQoJmJhcnJp
ZXJbSFRfU1RBVEVfREVMRVRJT05dKSAhPSBuX3RocmVhZHMpCi0JCWNrX3ByX3N0YWxsKCk7Ci0K
LQl0YWJsZV9yZXNldCgpOwotCWNrX2Vwb2NoX3N5bmNocm9uaXplKCZlcG9jaF93cik7Ci0JZnBy
aW50ZihzdGRlcnIsICJkb25lICh3cml0ZXIgPSAlIiBQUkl1NjQgIiB0aWNrcywgcmVhZGVyID0g
JSIgUFJJdTY0ICIgdGlja3MpXG4iLAotCSAgICBhIC8gKHJlcGVhdGVkICoga2V5c19sZW5ndGgp
LCBhY2N1bXVsYXRvcltIVF9TVEFURV9ERUxFVElPTl0gLyBuX3RocmVhZHMpOwotCi0JY29tbW9u
X2FsYXJtKGFsYXJtX2hhbmRsZXIsICZhbGFybV9ldmVudCwgcik7Ci0KLQlmcHJpbnRmKHN0ZGVy
ciwgIiB8IEV4ZWN1dGluZyByZXBsYWNlbWVudCB0ZXN0ICglLjJmKS4uLiIsIHBfciAqIDEwMCk7
Ci0JYSA9IHJlcGVhdGVkID0gMDsKLQlja19wcl9pbmNfaW50KCZiYXJyaWVyW0hUX1NUQVRFX0RF
TEVUSU9OXSk7Ci0JZm9yICg7OykgewotCQlkb3VibGUgcmVwbGFjZSwgZGVsZXRlOwotCi0JCXJl
cGVhdGVkKys7Ci0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7
IGkrKykgewotCQkJdGFibGVfaW5zZXJ0KGtleXNbaV0pOwotCQkJaWYgKHBfZCAhPSAwLjApIHsK
LQkJCQlkZWxldGUgPSBjb21tb25fZHJhbmQ0OCgpOwotCQkJCWlmIChkZWxldGUgPD0gcF9kKQot
CQkJCQl0YWJsZV9yZW1vdmUoa2V5c1tpXSk7Ci0JCQl9Ci0JCQlpZiAocF9yICE9IDAuMCkgewot
CQkJCXJlcGxhY2UgPSBjb21tb25fZHJhbmQ0OCgpOwotCQkJCWlmIChyZXBsYWNlIDw9IHBfcikK
LQkJCQkJdGFibGVfcmVwbGFjZShrZXlzW2ldKTsKLQkJCX0KLQkJfQotCQllID0gcmR0c2MoKTsK
LQkJYSArPSBlIC0gczsKLQotCQlpZiAobmV4dF9zdGFnZSA9PSB0cnVlKSB7Ci0JCQluZXh0X3N0
YWdlID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlja19wcl9zdG9yZV9pbnQoJnN0YXRl
LCBIVF9TVEFURV9TVE9QKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF9pbnQoJmJhcnJpZXJbSFRfU1RB
VEVfUkVQTEFDRU1FTlRdKSAhPSBuX3RocmVhZHMpCi0JCWNrX3ByX3N0YWxsKCk7Ci0JdGFibGVf
cmVzZXQoKTsKLQlja19lcG9jaF9zeW5jaHJvbml6ZSgmZXBvY2hfd3IpOwotCWZwcmludGYoc3Rk
ZXJyLCAiZG9uZSAod3JpdGVyID0gJSIgUFJJdTY0ICIgdGlja3MsIHJlYWRlciA9ICUiIFBSSXU2
NCAiIHRpY2tzKVxuIiwKLQkgICAgYSAvIChyZXBlYXRlZCAqIGtleXNfbGVuZ3RoKSwgYWNjdW11
bGF0b3JbSFRfU1RBVEVfUkVQTEFDRU1FTlRdIC8gbl90aHJlYWRzKTsKLQotCWNrX3ByX2luY19p
bnQoJmJhcnJpZXJbSFRfU1RBVEVfUkVQTEFDRU1FTlRdKTsKLQllcG9jaF90ZW1wb3JhcnkgPSBl
cG9jaF93cjsKLQlja19lcG9jaF9zeW5jaHJvbml6ZSgmZXBvY2hfd3IpOwotCi0JZnByaW50Zihz
dGRlcnIsICIgJy0gU3VtbWFyeTogJXUgcGVuZGluZywgJXUgcGVhaywgJXUgcmVjbGFtYXRpb25z
IC0+ICIKLQkgICAgIiV1IHBlbmRpbmcsICV1IHBlYWssICV1IHJlY2xhbWF0aW9uc1xuXG4iLAot
CSAgICBlcG9jaF90ZW1wb3Jhcnkubl9wZW5kaW5nLCBlcG9jaF90ZW1wb3Jhcnkubl9wZWFrLCBl
cG9jaF90ZW1wb3Jhcnkubl9kaXNwYXRjaCwKLQkgICAgZXBvY2hfd3Iubl9wZW5kaW5nLCBlcG9j
aF93ci5uX3BlYWssIGVwb2NoX3dyLm5fZGlzcGF0Y2gpOwotCXJldHVybiAwOwotfQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHQv
YmVuY2htYXJrL3NlcmlhbC5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVn
cmVzc2lvbnMvY2tfaHQvYmVuY2htYXJrL3NlcmlhbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwZGFhNDVjY2JlZWVjNjBkZTcxNThhZDk3MDA0YzIzN2Y1MDk3YzhlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX2h0L2JlbmNobWFyay9zZXJpYWwuYworKysg
L2Rldi9udWxsCkBAIC0xLDM4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTItMjAxNSBT
YW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0g
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
Ci0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8Y2tf
aHQuaD4KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGNrX21hbGxvYy5oPgotI2lu
Y2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRpby5o
PgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHRp
bWUuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi1zdGF0aWMgY2tfaHRfdCBodDsK
LXN0YXRpYyBjaGFyICoqa2V5czsKLXN0YXRpYyBzaXplX3Qga2V5c19sZW5ndGggPSAwOwotc3Rh
dGljIHNpemVfdCBrZXlzX2NhcGFjaXR5ID0gMTI4OwotCi1zdGF0aWMgdm9pZCAqCi1odF9tYWxs
b2Moc2l6ZV90IHIpCi17Ci0KLQlyZXR1cm4gbWFsbG9jKHIpOwotfQotCi1zdGF0aWMgdm9pZAot
aHRfZnJlZSh2b2lkICpwLCBzaXplX3QgYiwgYm9vbCByKQotewotCi0JKHZvaWQpYjsKLQkodm9p
ZClyOwotCi0JZnJlZShwKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHN0cnVjdCBja19tYWxs
b2MgbXlfYWxsb2NhdG9yID0gewotCS5tYWxsb2MgPSBodF9tYWxsb2MsCi0JLmZyZWUgPSBodF9m
cmVlCi19OwotCi1zdGF0aWMgdm9pZAotdGFibGVfaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGlu
dCBtb2RlID0gQ0tfSFRfTU9ERV9CWVRFU1RSSU5HOwotCi0jaWZkZWYgSFRfREVMRVRFCi0JbW9k
ZSB8PSBDS19IVF9XT1JLTE9BRF9ERUxFVEU7Ci0jZW5kaWYKLQotCWNvbW1vbl9zcmFuZDQ4KChs
b25nIGludCl0aW1lKE5VTEwpKTsKLQlpZiAoY2tfaHRfaW5pdCgmaHQsIG1vZGUsIE5VTEwsICZt
eV9hbGxvY2F0b3IsIDgsIGNvbW1vbl9scmFuZDQ4KCkpID09IGZhbHNlKSB7Ci0JCXBlcnJvcigi
Y2tfaHRfaW5pdCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JcmV0dXJuOwotfQot
Ci1zdGF0aWMgYm9vbAotdGFibGVfcmVtb3ZlKGNvbnN0IGNoYXIgKnZhbHVlKQotewotCWNrX2h0
X2VudHJ5X3QgZW50cnk7Ci0JY2tfaHRfaGFzaF90IGg7Ci0Jc2l6ZV90IGwgPSBzdHJsZW4odmFs
dWUpOwotCi0JY2tfaHRfaGFzaCgmaCwgJmh0LCB2YWx1ZSwgbCk7Ci0JY2tfaHRfZW50cnlfa2V5
X3NldCgmZW50cnksIHZhbHVlLCBsKTsKLQlyZXR1cm4gY2tfaHRfcmVtb3ZlX3NwbWMoJmh0LCBo
LCAmZW50cnkpOwotfQotCi1zdGF0aWMgYm9vbAotdGFibGVfcmVwbGFjZShjb25zdCBjaGFyICp2
YWx1ZSkKLXsKLQlja19odF9lbnRyeV90IGVudHJ5OwotCWNrX2h0X2hhc2hfdCBoOwotCXNpemVf
dCBsID0gc3RybGVuKHZhbHVlKTsKLQotCWNrX2h0X2hhc2goJmgsICZodCwgdmFsdWUsIGwpOwot
CWNrX2h0X2VudHJ5X3NldCgmZW50cnksIGgsIHZhbHVlLCBsLCAiUkVQTEFDRUQiKTsKLQlyZXR1
cm4gY2tfaHRfc2V0X3NwbWMoJmh0LCBoLCAmZW50cnkpOwotfQotCi1zdGF0aWMgdm9pZCAqCi10
YWJsZV9nZXQoY29uc3QgY2hhciAqdmFsdWUpCi17Ci0JY2tfaHRfZW50cnlfdCBlbnRyeTsKLQlj
a19odF9oYXNoX3QgaDsKLQlzaXplX3QgbCA9IHN0cmxlbih2YWx1ZSk7Ci0Jdm9pZCAqdiA9IE5V
TEw7Ci0KLQlja19odF9oYXNoKCZoLCAmaHQsIHZhbHVlLCBsKTsKLQlja19odF9lbnRyeV9rZXlf
c2V0KCZlbnRyeSwgdmFsdWUsIGwpOwotCi0JaWYgKGNrX2h0X2dldF9zcG1jKCZodCwgaCwgJmVu
dHJ5KSA9PSB0cnVlKSB7Ci0JCXYgPSBja19odF9lbnRyeV92YWx1ZSgmZW50cnkpOwotCX0KLQly
ZXR1cm4gdjsKLX0KLQotc3RhdGljIGJvb2wKLXRhYmxlX2luc2VydChjb25zdCBjaGFyICp2YWx1
ZSkKLXsKLQlja19odF9lbnRyeV90IGVudHJ5OwotCWNrX2h0X2hhc2hfdCBoOwotCXNpemVfdCBs
ID0gc3RybGVuKHZhbHVlKTsKLQotCWNrX2h0X2hhc2goJmgsICZodCwgdmFsdWUsIGwpOwotCWNr
X2h0X2VudHJ5X3NldCgmZW50cnksIGgsIHZhbHVlLCBsLCAiVkFMVUUiKTsKLQlyZXR1cm4gY2tf
aHRfcHV0X3NwbWMoJmh0LCBoLCAmZW50cnkpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci10YWJsZV9j
b3VudCh2b2lkKQotewotCi0JcmV0dXJuIGNrX2h0X2NvdW50KCZodCk7Ci19Ci0KLXN0YXRpYyBi
b29sCi10YWJsZV9nYyh2b2lkKQotewotCi0JcmV0dXJuIGNrX2h0X2djKCZodCwgMCwgY29tbW9u
X2xyYW5kNDgoKSk7Ci19Ci0KLXN0YXRpYyBib29sCi10YWJsZV9yZXNldCh2b2lkKQotewotCi0J
cmV0dXJuIGNrX2h0X3Jlc2V0X3NwbWMoJmh0KTsKLX0KLQotc3RhdGljIHZvaWQKLWtleXNfc2h1
ZmZsZShjaGFyICoqaykKLXsKLQlzaXplX3QgaSwgajsKLQljaGFyICp0OwotCi0JZm9yIChpID0g
a2V5c19sZW5ndGg7IGkgPiAxOyBpLS0pIHsKLQkJaiA9IHJhbmQoKSAlIChpIC0gMSk7Ci0KLQkJ
aWYgKGogIT0gaSAtIDEpIHsKLQkJCXQgPSBrW2kgLSAxXTsKLQkJCWtbaSAtIDFdID0ga1tqXTsK
LQkJCWtbal0gPSB0OwotCQl9Ci0JfQotCi0JcmV0dXJuOwotfQotCi1pbnQKLW1haW4oaW50IGFy
Z2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlGSUxFICpmcDsKLQljaGFyIGJ1ZmZlcls1MTJdOwotCXNp
emVfdCBpLCBqLCByOwotCXVuc2lnbmVkIGludCBkID0gMDsKLQl1aW50NjRfdCBzLCBlLCBhLCBy
aSwgc2ksIGFpLCBzciwgcmcsIHNnLCBhZywgc2QsIG5nLCBnZzsKLQljaGFyICoqdDsKLQlzdHJ1
Y3QgY2tfaHRfc3RhdCBzdDsKLQotCXIgPSAyMDsKLQlzID0gODsKLQlzcmFuZCh0aW1lKE5VTEwp
KTsKLQotCWlmIChhcmdjIDwgMikgewotCQlja19lcnJvcigiVXNhZ2U6IGNrX2h0IDxkaWN0aW9u
YXJ5PiBbPHJlcGV0aXRpb25zPiA8aW5pdGlhbCBzaXplPl1cbiIpOwotCX0KLQotCWlmIChhcmdj
ID49IDMpCi0JCXIgPSBhdG9pKGFyZ3ZbMl0pOwotCi0JaWYgKGFyZ2MgPj0gNCkKLQkJcyA9ICh1
aW50NjRfdClhdG9pKGFyZ3ZbM10pOwotCi0Ja2V5cyA9IG1hbGxvYyhzaXplb2YoY2hhciAqKSAq
IGtleXNfY2FwYWNpdHkpOwotCWFzc2VydChrZXlzICE9IE5VTEwpOwotCi0JZnAgPSBmb3Blbihh
cmd2WzFdLCAiciIpOwotCWFzc2VydChmcCAhPSBOVUxMKTsKLQotCXdoaWxlIChmZ2V0cyhidWZm
ZXIsIHNpemVvZihidWZmZXIpLCBmcCkgIT0gTlVMTCkgewotCQlidWZmZXJbc3RybGVuKGJ1ZmZl
cikgLSAxXSA9ICdcMCc7Ci0JCWtleXNba2V5c19sZW5ndGgrK10gPSBzdHJkdXAoYnVmZmVyKTsK
LQkJYXNzZXJ0KGtleXNba2V5c19sZW5ndGggLSAxXSAhPSBOVUxMKTsKLQotCQlpZiAoa2V5c19s
ZW5ndGggPT0ga2V5c19jYXBhY2l0eSkgewotCQkJdCA9IHJlYWxsb2Moa2V5cywgc2l6ZW9mKGNo
YXIgKikgKiAoa2V5c19jYXBhY2l0eSAqPSAyKSk7Ci0JCQlhc3NlcnQodCAhPSBOVUxMKTsKLQkJ
CWtleXMgPSB0OwotCQl9Ci0JfQotCi0JdCA9IHJlYWxsb2Moa2V5cywgc2l6ZW9mKGNoYXIgKikg
KiBrZXlzX2xlbmd0aCk7Ci0JYXNzZXJ0KHQgIT0gTlVMTCk7Ci0Ja2V5cyA9IHQ7Ci0KLQl0YWJs
ZV9pbml0KCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJZCArPSB0
YWJsZV9pbnNlcnQoa2V5c1tpXSkgPT0gZmFsc2U7Ci0JY2tfaHRfc3RhdCgmaHQsICZzdCk7Ci0K
LQlmcHJpbnRmKHN0ZGVyciwgIiMgJXp1IGVudHJpZXMgc3RvcmVkLCAldSBkdXBsaWNhdGVzLCAl
IiBQUkl1NjQgIiBwcm9iZS5cbiIsCi0JICAgIHRhYmxlX2NvdW50KCksIGQsIHN0LnByb2JlX21h
eGltdW0pOwotCi0JZnByaW50ZihzdGRlcnIsICIjICAgIHJldmVyc2VfaW5zZXJ0aW9uIHNlcmlh
bF9pbnNlcnRpb24gcmFuZG9tX2luc2VydGlvbiBzZXJpYWxfcmVwbGFjZSByZXZlcnNlX2dldCBz
ZXJpYWxfZ2V0IHJhbmRvbV9nZXQgc2VyaWFsX3JlbW92ZSBuZWdhdGl2ZV9nZXQgZ2FyYmFnZV9j
b2xsZWN0XG5cbiIpOwotCi0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewotCQlp
ZiAodGFibGVfcmVzZXQoKSA9PSBmYWxzZSkgewotCQkJY2tfZXJyb3IoIkVSUk9SOiBGYWlsZWQg
dG8gcmVzZXQgaGFzaCB0YWJsZS5cbiIpOwotCQl9Ci0KLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAo
aSA9IGtleXNfbGVuZ3RoOyBpID4gMDsgaS0tKQotCQkJZCArPSB0YWJsZV9pbnNlcnQoa2V5c1tp
IC0gMV0pID09IGZhbHNlOwotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9Ci0Jcmkg
PSBhIC8gKHIgKiBrZXlzX2xlbmd0aCk7Ci0KLQlhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsg
aisrKSB7Ci0JCWlmICh0YWJsZV9yZXNldCgpID09IGZhbHNlKSB7Ci0JCQlja19lcnJvcigiRVJS
T1I6IEZhaWxlZCB0byByZXNldCBoYXNoIHRhYmxlLlxuIik7Ci0JCX0KLQotCQlzID0gcmR0c2Mo
KTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspCi0JCQlkICs9IHRhYmxlX2lu
c2VydChrZXlzW2ldKSA9PSBmYWxzZTsKLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAtIHM7Ci0J
fQotCXNpID0gYSAvIChyICoga2V5c19sZW5ndGgpOwotCi0JYSA9IDA7Ci0JZm9yIChqID0gMDsg
aiA8IHI7IGorKykgewotCQlrZXlzX3NodWZmbGUoa2V5cyk7Ci0KLQkJaWYgKHRhYmxlX3Jlc2V0
KCkgPT0gZmFsc2UpIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogRmFpbGVkIHRvIHJlc2V0IGhhc2gg
dGFibGUuXG4iKTsKLQkJfQotCi0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5
c19sZW5ndGg7IGkrKykKLQkJCWQgKz0gdGFibGVfaW5zZXJ0KGtleXNbaV0pID09IGZhbHNlOwot
CQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9Ci0JYWkgPSBhIC8gKHIgKiBrZXlzX2xl
bmd0aCk7Ci0KLQlhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsgaisrKSB7Ci0JCXMgPSByZHRz
YygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJCXRhYmxlX3JlcGxh
Y2Uoa2V5c1tpXSk7Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBzOwotCX0KLQlzciA9IGEg
LyAociAqIGtleXNfbGVuZ3RoKTsKLQotCXRhYmxlX3Jlc2V0KCk7Ci0JZm9yIChpID0gMDsgaSA8
IGtleXNfbGVuZ3RoOyBpKyspCi0JCXRhYmxlX2luc2VydChrZXlzW2ldKTsKLQotCWEgPSAwOwot
CWZvciAoaiA9IDA7IGogPCByOyBqKyspIHsKLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IGtl
eXNfbGVuZ3RoOyBpID4gMDsgaS0tKSB7Ci0JCQlpZiAodGFibGVfZ2V0KGtleXNbaSAtIDFdKSA9
PSBOVUxMKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SOiBVbmV4cGVjdGVkIE5VTEwgdmFsdWUuXG4i
KTsKLQkJCX0KLQkJfQotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9Ci0JcmcgPSBh
IC8gKHIgKiBrZXlzX2xlbmd0aCk7Ci0KLQlhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsgaisr
KSB7Ci0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykg
ewotCQkJaWYgKHRhYmxlX2dldChrZXlzW2ldKSA9PSBOVUxMKSB7Ci0JCQkJY2tfZXJyb3IoIkVS
Uk9SOiBVbmV4cGVjdGVkIE5VTEwgdmFsdWUuXG4iKTsKLQkJCX0KLQkJfQotCQllID0gcmR0c2Mo
KTsKLQkJYSArPSBlIC0gczsKLQl9Ci0Jc2cgPSBhIC8gKHIgKiBrZXlzX2xlbmd0aCk7Ci0KLQlh
ID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsgaisrKSB7Ci0JCWtleXNfc2h1ZmZsZShrZXlzKTsK
LQotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspIHsK
LQkJCWlmICh0YWJsZV9nZXQoa2V5c1tpXSkgPT0gTlVMTCkgewotCQkJCWNrX2Vycm9yKCJFUlJP
UjogVW5leHBlY3RlZCBOVUxMIHZhbHVlLlxuIik7Ci0JCQl9Ci0JCX0KLQkJZSA9IHJkdHNjKCk7
Ci0JCWEgKz0gZSAtIHM7Ci0JfQotCWFnID0gYSAvIChyICoga2V5c19sZW5ndGgpOwotCi0JYSA9
IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChp
ID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspCi0JCQl0YWJsZV9yZW1vdmUoa2V5c1tpXSk7Ci0J
CWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBzOwotCi0JCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xl
bmd0aDsgaSsrKQotCQkJdGFibGVfaW5zZXJ0KGtleXNbaV0pOwotCX0KLQlzZCA9IGEgLyAociAq
IGtleXNfbGVuZ3RoKTsKLQotCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aCAvIDI7IGkrKykK
LQkJdGFibGVfcmVtb3ZlKGtleXNbaV0pOwotCi0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7
IGorKykgewotCQlzID0gcmR0c2MoKTsKLQkJdGFibGVfZ2MoKTsKLQkJZSA9IHJkdHNjKCk7Ci0J
CWEgKz0gZSAtIHM7Ci0JfQotCWdnID0gYSAvIHI7Ci0KLQlhID0gMDsKLQlmb3IgKGogPSAwOyBq
IDwgcjsgaisrKSB7Ci0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5n
dGg7IGkrKykgewotCQkJdGFibGVfZ2V0KCJceDUwXHgwM1x4MDRceDA1XHgwNlx4MTAiKTsKLQkJ
fQotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9Ci0JbmcgPSBhIC8gKHIgKiBrZXlz
X2xlbmd0aCk7Ci0KLQlwcmludGYoIiV6dSAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIl
IiBQUkl1NjQgIiAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0J
ICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIlIiBQUkl1NjQg
IiAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIlIiBQ
Ukl1NjQgIlxuIiwKLQkgICAga2V5c19sZW5ndGgsIHJpLCBzaSwgYWksIHNyLCByZywgc2csIGFn
LCBzZCwgbmcsIGdnKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHQvdmFsaWRhdGUvTWFrZWZpbGUg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19odC92YWxp
ZGF0ZS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I1NjgyYzI1MDY5
YTg2MDVkYmIzZGJkZWI4MGQzYjNmNzJhNmVmZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdy
ZXNzaW9ucy9ja19odC92YWxpZGF0ZS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDIxICsw
LDAgQEAKLS5QSE9OWTogY2hlY2sgY2xlYW4gZGlzdHJpYnV0aW9uCi0KLU9CSkVDVFM9c2VyaWFs
IHNlcmlhbC5kZWxldGUKLQotYWxsOiAkKE9CSkVDVFMpCi0KLXNlcmlhbDogc2VyaWFsLmMgLi4v
Li4vLi4vaW5jbHVkZS9ja19odC5oIC4uLy4uLy4uL3NyYy9ja19odC5jCi0JJChDQykgJChDRkxB
R1MpIC1vIHNlcmlhbCBzZXJpYWwuYyAuLi8uLi8uLi9zcmMvY2tfaHQuYwotCi1zZXJpYWwuZGVs
ZXRlOiBzZXJpYWwuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX2h0LmggLi4vLi4vLi4vc3JjL2NrX2h0
LmMKLQkkKENDKSAkKENGTEFHUykgLURIVF9ERUxFVEUgLW8gc2VyaWFsLmRlbGV0ZSBzZXJpYWwu
YyAuLi8uLi8uLi9zcmMvY2tfaHQuYwotCi1jaGVjazogYWxsCi0JLi9zZXJpYWwKLQkuL3Nlcmlh
bC5kZWxldGUKLQotY2xlYW46Ci0Jcm0gLXJmICp+ICoubyAkKE9CSkVDVFMpICouZFNZTSAqLmV4
ZQotCi1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxkCi1DRkxBR1MrPS1E
X0dOVV9TT1VSQ0UKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L3JlZ3Jlc3Npb25zL2NrX2h0L3ZhbGlkYXRlL3NlcmlhbC5jIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHQvdmFsaWRhdGUvc2VyaWFsLmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhODVjMmY3Y2MxOWQ5MmUyMzkyZTMyNTIzNTU2YmFl
MTY2OWFkYzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfaHQvdmFsaWRh
dGUvc2VyaWFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAyMDEyLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgPGNrX2h0Lmg+Ci0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxj
a19tYWxsb2MuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5j
bHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiLi4vLi4vY29t
bW9uLmgiCi0jaW5jbHVkZSAiLi4vLi4vLi4vc3JjL2NrX2h0X2hhc2guaCIKLQotc3RhdGljIHNp
emVfdCBoYXNoX3RpbWVzX2NhbGxlZCA9IDA7Ci0KLXN0YXRpYyB2b2lkICoKLWh0X21hbGxvYyhz
aXplX3QgcikKLXsKLQotCXJldHVybiBtYWxsb2Mocik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1odF9m
cmVlKHZvaWQgKnAsIHNpemVfdCBiLCBib29sIHIpCi17Ci0KLQkodm9pZCliOwotCSh2b2lkKXI7
Ci0JZnJlZShwKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1odF9oYXNoX3dyYXBwZXIo
c3RydWN0IGNrX2h0X2hhc2ggKmgsCi0JY29uc3Qgdm9pZCAqa2V5LAotCXNpemVfdCBsZW5ndGgs
Ci0JdWludDY0X3Qgc2VlZCkKLXsKLQloYXNoX3RpbWVzX2NhbGxlZCsrOwotCi0JaC0+dmFsdWUg
PSAodW5zaWduZWQgbG9uZylNdXJtdXJIYXNoNjRBKGtleSwgbGVuZ3RoLCBzZWVkKTsKLQlyZXR1
cm47Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2tfbWFsbG9jIG15X2FsbG9jYXRvciA9IHsKLQkubWFs
bG9jID0gaHRfbWFsbG9jLAotCS5mcmVlID0gaHRfZnJlZQotfTsKLQotY29uc3QgY2hhciAqdGVz
dFtdID0geyJTYW15IiwgIkFsIiwgIkJhaHJhIiwgImRhbmNlcyIsICJpbiIsICJ0aGUiLCAid2lu
ZC4iLCAiT25jZSIsCi0JCQkidXBvbiIsICJhIiwgInRpbWUiLCAiaGlzIiwgImd5cHN5IiwgImF0
ZSIsICJvbmUiLCAiaXRzeSIsCi0JCQkgICAgImJpdHN5IiwgInNwaWRlci4iLCAiV2hhdCIsICJn
b2VzIiwgInVwIiwgIm11c3QiLAotCQkJCSJjb21lIiwgImRvd24uIiwgIldoYXQiLCAiaXMiLCAi
ZG93biIsICJzdGF5cyIsCi0JCQkJICAgICJkb3duLiIsICJBIiwgIkIiLCAiQyIsICJEIiwgIkUi
LCAiRiIsICJHIiwgIkgiLAotCQkJCQkiSSIsICJKIiwgIksiLCAiTCIsICJNIiwgIk4iLCAiTyJ9
OwotCi1zdGF0aWMgdWludHB0cl90IGRpcmVjdFtdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4
LCA5LCAxLCAxLCAyLCAzLCA0LCA1LCA5IH07Ci0KLWNvbnN0IGNoYXIgKm5lZ2F0aXZlID0gIm5l
Z2F0aXZlIjsKLQotaW50Ci1tYWluKHZvaWQpCi17Ci0Jc2l6ZV90IGksIGw7Ci0JY2tfaHRfdCBo
dDsKLQlja19odF9lbnRyeV90IGVudHJ5OwotCWNrX2h0X2hhc2hfdCBoOwotCWNrX2h0X2l0ZXJh
dG9yX3QgaXRlcmF0b3IgPSBDS19IVF9JVEVSQVRPUl9JTklUSUFMSVpFUjsKLQlja19odF9lbnRy
eV90ICpjdXJzb3I7Ci0JdW5zaWduZWQgaW50IG1vZGUgPSBDS19IVF9NT0RFX0JZVEVTVFJJTkc7
Ci0KLSNpZmRlZiBIVF9ERUxFVEUKLQltb2RlIHw9IENLX0hUX1dPUktMT0FEX0RFTEVURTsKLSNl
bmRpZgotCi0JaWYgKGNrX2h0X2luaXQoJmh0LCBtb2RlLCBodF9oYXNoX3dyYXBwZXIsICZteV9h
bGxvY2F0b3IsIDIsIDY2MDI4MzQpID09IGZhbHNlKSB7Ci0JCXBlcnJvcigiY2tfaHRfaW5pdCIp
OwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZih0
ZXN0KSAvIHNpemVvZigqdGVzdCk7IGkrKykgewotCQlsID0gc3RybGVuKHRlc3RbaV0pOwotCQlj
a19odF9oYXNoKCZoLCAmaHQsIHRlc3RbaV0sIGwpOwotCQlja19odF9lbnRyeV9zZXQoJmVudHJ5
LCBoLCB0ZXN0W2ldLCBsLCB0ZXN0W2ldKTsKLQkJY2tfaHRfcHV0X3NwbWMoJmh0LCBoLCAmZW50
cnkpOwotCX0KLQotCWwgPSBzdHJsZW4odGVzdFswXSk7Ci0JY2tfaHRfaGFzaCgmaCwgJmh0LCB0
ZXN0WzBdLCBsKTsKLQlja19odF9lbnRyeV9zZXQoJmVudHJ5LCBoLCB0ZXN0WzBdLCBsLCB0ZXN0
WzBdKTsKLQlja19odF9wdXRfc3BtYygmaHQsIGgsICZlbnRyeSk7Ci0KLQlmb3IgKGkgPSAwOyBp
IDwgc2l6ZW9mKHRlc3QpIC8gc2l6ZW9mKCp0ZXN0KTsgaSsrKSB7Ci0JCWwgPSBzdHJsZW4odGVz
dFtpXSk7Ci0JCWNrX2h0X2hhc2goJmgsICZodCwgdGVzdFtpXSwgbCk7Ci0JCWNrX2h0X2VudHJ5
X2tleV9zZXQoJmVudHJ5LCB0ZXN0W2ldLCBsKTsKLQkJaWYgKGNrX2h0X2dldF9zcG1jKCZodCwg
aCwgJmVudHJ5KSA9PSBmYWxzZSkgewotCQkJY2tfZXJyb3IoIkVSUk9SIChwdXQpOiBGYWlsZWQg
dG8gZmluZCBbJXNdXG4iLCB0ZXN0W2ldKTsKLQkJfSBlbHNlIHsKLQkJCXZvaWQgKmssICp2Owot
Ci0JCQlrID0gY2tfaHRfZW50cnlfa2V5KCZlbnRyeSk7Ci0JCQl2ID0gY2tfaHRfZW50cnlfdmFs
dWUoJmVudHJ5KTsKLQotCQkJaWYgKHN0cmNtcChrLCB0ZXN0W2ldKSB8fCBzdHJjbXAodiwgdGVz
dFtpXSkpIHsKLQkJCQlja19lcnJvcigiRVJST1I6IE1pc21hdGNoOiAoJXMsICVzKSAhPSAoJXMs
ICVzKVxuIiwKLQkJCQkgICAgKGNoYXIgKilrLCAoY2hhciAqKXYsIHRlc3RbaV0sIHRlc3RbaV0p
OwotCQkJfQotCQl9Ci0JfQotCi0JY2tfaHRfaGFzaCgmaCwgJmh0LCBuZWdhdGl2ZSwgc3RybGVu
KG5lZ2F0aXZlKSk7Ci0JY2tfaHRfZW50cnlfa2V5X3NldCgmZW50cnksIG5lZ2F0aXZlLCBzdHJs
ZW4obmVnYXRpdmUpKTsKLQlpZiAoY2tfaHRfZ2V0X3NwbWMoJmh0LCBoLCAmZW50cnkpID09IHRy
dWUpIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBGb3VuZCBub24tZXhpc3RpbmcgZW50cnkuXG4iKTsK
LQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHRlc3QpIC8gc2l6ZW9mKCp0ZXN0KTsgaSsr
KSB7Ci0JCWwgPSBzdHJsZW4odGVzdFtpXSk7Ci0JCWNrX2h0X2hhc2goJmgsICZodCwgdGVzdFtp
XSwgbCk7Ci0JCWNrX2h0X2VudHJ5X2tleV9zZXQoJmVudHJ5LCB0ZXN0W2ldLCBsKTsKLQotCQlp
ZiAoY2tfaHRfZ2V0X3NwbWMoJmh0LCBoLCAmZW50cnkpID09IGZhbHNlKQotCQkJY29udGludWU7
Ci0KLQkJaWYgKGNrX2h0X3JlbW92ZV9zcG1jKCZodCwgaCwgJmVudHJ5KSA9PSBmYWxzZSkgewot
CQkJY2tfZXJyb3IoIkVSUk9SOiBGYWlsZWQgdG8gZGVsZXRlIGV4aXN0aW5nIGVudHJ5XG4iKTsK
LQkJfQotCi0JCWlmIChja19odF9nZXRfc3BtYygmaHQsIGgsICZlbnRyeSkgPT0gdHJ1ZSkKLQkJ
CWNrX2Vycm9yKCJFUlJPUjogQWJsZSB0byBmaW5kIFslc10gYWZ0ZXIgZGVsZXRlXG4iLCB0ZXN0
W2ldKTsKLQotCQlja19odF9lbnRyeV9zZXQoJmVudHJ5LCBoLCB0ZXN0W2ldLCBsLCB0ZXN0W2ld
KTsKLQkJaWYgKGNrX2h0X3B1dF9zcG1jKCZodCwgaCwgJmVudHJ5KSA9PSBmYWxzZSkKLQkJCWNr
X2Vycm9yKCJFUlJPUjogRmFpbGVkIHRvIGluc2VydCBbJXNdXG4iLCB0ZXN0W2ldKTsKLQotCQlp
ZiAoY2tfaHRfcmVtb3ZlX3NwbWMoJmh0LCBoLCAmZW50cnkpID09IGZhbHNlKSB7Ci0JCQlja19l
cnJvcigiRVJST1I6IEZhaWxlZCB0byBkZWxldGUgZXhpc3RpbmcgZW50cnlcbiIpOwotCQl9Ci0J
fQotCi0JY2tfaHRfcmVzZXRfc3BtYygmaHQpOwotCWlmIChja19odF9jb3VudCgmaHQpICE9IDAp
IHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBNYXAgd2FzIG5vdCByZXNldC5cbiIpOwotCX0KLQotCWZv
ciAoaSA9IDA7IGkgPCBzaXplb2YodGVzdCkgLyBzaXplb2YoKnRlc3QpOyBpKyspIHsKLQkJbCA9
IHN0cmxlbih0ZXN0W2ldKTsKLQkJY2tfaHRfaGFzaCgmaCwgJmh0LCB0ZXN0W2ldLCBsKTsKLQkJ
Y2tfaHRfZW50cnlfc2V0KCZlbnRyeSwgaCwgdGVzdFtpXSwgbCwgdGVzdFtpXSk7Ci0JCWNrX2h0
X3B1dF9zcG1jKCZodCwgaCwgJmVudHJ5KTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBja19odF9uZXh0
KCZodCwgJml0ZXJhdG9yLCAmY3Vyc29yKSA9PSB0cnVlOyBpKyspOwotCWlmIChpICE9IDQyKSB7
Ci0JCWNrX2Vycm9yKCJFUlJPUjogSW5jb3JyZWN0IG51bWJlciBvZiBlbnRyaWVzIGluIHRhYmxl
LlxuIik7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZXN0KSAvIHNpemVvZigqdGVz
dCk7IGkrKykgewotCQlsID0gc3RybGVuKHRlc3RbaV0pOwotCQlja19odF9oYXNoKCZoLCAmaHQs
IHRlc3RbaV0sIGwpOwotCQlja19odF9lbnRyeV9zZXQoJmVudHJ5LCBoLCB0ZXN0W2ldLCBsLCB0
ZXN0W2ldKTsKLQkJY2tfaHRfc2V0X3NwbWMoJmh0LCBoLCAmZW50cnkpOwotCX0KLQotCWZvciAo
aSA9IDA7IGkgPCBzaXplb2YodGVzdCkgLyBzaXplb2YoKnRlc3QpOyBpKyspIHsKLQkJbCA9IHN0
cmxlbih0ZXN0W2ldKTsKLQkJY2tfaHRfaGFzaCgmaCwgJmh0LCB0ZXN0W2ldLCBsKTsKLQkJY2tf
aHRfZW50cnlfa2V5X3NldCgmZW50cnksIHRlc3RbaV0sIGwpOwotCQlpZiAoY2tfaHRfZ2V0X3Nw
bWMoJmh0LCBoLCAmZW50cnkpID09IGZhbHNlKSB7Ci0JCQlja19lcnJvcigiRVJST1IgKHNldCk6
IEZhaWxlZCB0byBmaW5kIFslc11cbiIsIHRlc3RbaV0pOwotCQl9IGVsc2UgewotCQkJdm9pZCAq
aywgKnY7Ci0KLQkJCWsgPSBja19odF9lbnRyeV9rZXkoJmVudHJ5KTsKLQkJCXYgPSBja19odF9l
bnRyeV92YWx1ZSgmZW50cnkpOwotCi0JCQlpZiAoc3RyY21wKGssIHRlc3RbaV0pIHx8IHN0cmNt
cCh2LCB0ZXN0W2ldKSkgewotCQkJCWNrX2Vycm9yKCJFUlJPUjogTWlzbWF0Y2g6ICglcywgJXMp
ICE9ICglcywgJXMpXG4iLAotCQkJCSAgICAoY2hhciAqKWssIChjaGFyICopdiwgdGVzdFtpXSwg
dGVzdFtpXSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoY2tfaHRfZ2MoJmh0LCAwLCAyNykgPT0g
ZmFsc2UpIHsKLQkJY2tfZXJyb3IoImNrX2h0X2djXG4iKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBp
IDwgc2l6ZW9mKHRlc3QpIC8gc2l6ZW9mKCp0ZXN0KTsgaSsrKSB7Ci0JCWwgPSBzdHJsZW4odGVz
dFtpXSk7Ci0JCWNrX2h0X2hhc2goJmgsICZodCwgdGVzdFtpXSwgbCk7Ci0JCWNrX2h0X2VudHJ5
X3NldCgmZW50cnksIGgsIHRlc3RbaV0sIGwsICJSRVBMQUNFRCIpOwotCQlja19odF9zZXRfc3Bt
YygmaHQsIGgsICZlbnRyeSk7Ci0KLQkJaWYgKHN0cmNtcCh0ZXN0W2ldLCAiV2hhdCIpID09IDAp
Ci0JCQljb250aW51ZTsKLQotCQlpZiAoc3RyY21wKHRlc3RbaV0sICJkb3duLiIpID09IDApCi0J
CQljb250aW51ZTsKLQotCQlpZiAoc3RyY21wKGNrX2h0X2VudHJ5X3ZhbHVlKCZlbnRyeSksIHRl
c3RbaV0pICE9IDApIHsKLQkJCWNrX2Vycm9yKCJNaXNtYXRjaCBkZXRlY3RlZDogJXMsIGV4cGVj
dGVkICVzXG4iLAotCQkJCShjaGFyICopY2tfaHRfZW50cnlfdmFsdWUoJmVudHJ5KSwKLQkJCQl0
ZXN0W2ldKTsKLQkJfQotCX0KLQotCWNrX2h0X2l0ZXJhdG9yX2luaXQoJml0ZXJhdG9yKTsKLQl3
aGlsZSAoY2tfaHRfbmV4dCgmaHQsICZpdGVyYXRvciwgJmN1cnNvcikgPT0gdHJ1ZSkgewotCQlp
ZiAoc3RyY21wKGNrX2h0X2VudHJ5X3ZhbHVlKGN1cnNvciksICJSRVBMQUNFRCIpICE9IDApIHsK
LQkJCWNrX2Vycm9yKCJNaXNtYXRjaCBkZXRlY3RlZDogJXMsIGV4cGVjdGVkIFJFUExBQ0VEXG4i
LAotCQkJCShjaGFyICopY2tfaHRfZW50cnlfdmFsdWUoY3Vyc29yKSk7Ci0JCX0KLQl9Ci0KLQlm
b3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHRlc3QpIC8gc2l6ZW9mKCp0ZXN0KTsgaSsrKSB7Ci0JCWwg
PSBzdHJsZW4odGVzdFtpXSk7Ci0JCWNrX2h0X2hhc2goJmgsICZodCwgdGVzdFtpXSwgbCk7Ci0J
CWNrX2h0X2VudHJ5X2tleV9zZXQoJmVudHJ5LCB0ZXN0W2ldLCBsKTsKLQotCQlpZiAoY2tfaHRf
Z2V0X3NwbWMoJmh0LCBoLCAmZW50cnkpID09IGZhbHNlKQotCQkJY29udGludWU7Ci0KLQkJaWYg
KGNrX2h0X3JlbW92ZV9zcG1jKCZodCwgaCwgJmVudHJ5KSA9PSBmYWxzZSkgewotCQkJY2tfZXJy
b3IoIkVSUk9SOiBGYWlsZWQgdG8gZGVsZXRlIGV4aXN0aW5nIGVudHJ5XG4iKTsKLQkJfQotCi0J
CWlmIChja19odF9nZXRfc3BtYygmaHQsIGgsICZlbnRyeSkgPT0gdHJ1ZSkKLQkJCWNrX2Vycm9y
KCJFUlJPUjogQWJsZSB0byBmaW5kIFslc10gYWZ0ZXIgZGVsZXRlXG4iLCB0ZXN0W2ldKTsKLQot
CQlja19odF9lbnRyeV9zZXQoJmVudHJ5LCBoLCB0ZXN0W2ldLCBsLCB0ZXN0W2ldKTsKLQkJaWYg
KGNrX2h0X3B1dF9zcG1jKCZodCwgaCwgJmVudHJ5KSA9PSBmYWxzZSkKLQkJCWNrX2Vycm9yKCJF
UlJPUjogRmFpbGVkIHRvIGluc2VydCBbJXNdXG4iLCB0ZXN0W2ldKTsKLQotCQlpZiAoY2tfaHRf
cmVtb3ZlX3NwbWMoJmh0LCBoLCAmZW50cnkpID09IGZhbHNlKSB7Ci0JCQlja19lcnJvcigiRVJS
T1I6IEZhaWxlZCB0byBkZWxldGUgZXhpc3RpbmcgZW50cnlcbiIpOwotCQl9Ci0JfQotCi0JY2tf
aHRfZGVzdHJveSgmaHQpOwotCi0JaWYgKGhhc2hfdGltZXNfY2FsbGVkID09IDApIHsKLQkJY2tf
ZXJyb3IoIkVSUk9SOiBPdXIgaGFzaCBmdW5jdGlvbiB3YXMgbm90IGNhbGxlZCFcbiIpOwotCX0K
LQotCWhhc2hfdGltZXNfY2FsbGVkID0gMDsKLQotCWlmIChja19odF9pbml0KCZodCwgQ0tfSFRf
TU9ERV9ESVJFQ1QsIGh0X2hhc2hfd3JhcHBlciwgJm15X2FsbG9jYXRvciwgOCwgNjYwMjgzNCkg
PT0gZmFsc2UpIHsKLQkJcGVycm9yKCJja19odF9pbml0Iik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJF
KTsKLQl9Ci0KLQlsID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGRpcmVjdCkgLyBzaXpl
b2YoKmRpcmVjdCk7IGkrKykgewotCQlja19odF9oYXNoX2RpcmVjdCgmaCwgJmh0LCBkaXJlY3Rb
aV0pOwotCQlja19odF9lbnRyeV9zZXRfZGlyZWN0KCZlbnRyeSwgaCwgZGlyZWN0W2ldLCAodWlu
dHB0cl90KXRlc3RbaV0pOwotCQlsICs9IGNrX2h0X3B1dF9zcG1jKCZodCwgaCwgJmVudHJ5KSA9
PSBmYWxzZTsKLQl9Ci0KLQlpZiAobCAhPSA3KSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogR290ICV6
dSBmYWlsdXJlcyByYXRoZXIgdGhhbiA3XG4iLCBsKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwg
c2l6ZW9mKGRpcmVjdCkgLyBzaXplb2YoKmRpcmVjdCk7IGkrKykgewotCQlja19odF9oYXNoX2Rp
cmVjdCgmaCwgJmh0LCBkaXJlY3RbaV0pOwotCQlja19odF9lbnRyeV9zZXRfZGlyZWN0KCZlbnRy
eSwgaCwgZGlyZWN0W2ldLCAodWludHB0cl90KSJSRVBMQUNFRCIpOwotCQlsICs9IGNrX2h0X3Nl
dF9zcG1jKCZodCwgaCwgJmVudHJ5KSA9PSBmYWxzZTsKLQl9Ci0KLQlja19odF9pdGVyYXRvcl9p
bml0KCZpdGVyYXRvcik7Ci0Jd2hpbGUgKGNrX2h0X25leHQoJmh0LCAmaXRlcmF0b3IsICZjdXJz
b3IpID09IHRydWUpIHsKLQkJaWYgKHN0cmNtcChja19odF9lbnRyeV92YWx1ZShjdXJzb3IpLCAi
UkVQTEFDRUQiKSAhPSAwKSB7Ci0JCQlja19lcnJvcigiTWlzbWF0Y2ggZGV0ZWN0ZWQ6ICVzLCBl
eHBlY3RlZCBSRVBMQUNFRFxuIiwKLQkJCQkoY2hhciAqKWNrX2h0X2VudHJ5X3ZhbHVlKGN1cnNv
cikpOwotCQl9Ci0JfQotCi0JY2tfaHRfZGVzdHJveSgmaHQpOwotCi0JaWYgKGhhc2hfdGltZXNf
Y2FsbGVkID09IDApIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBPdXIgaGFzaCBmdW5jdGlvbiB3YXMg
bm90IGNhbGxlZCFcbiIpOwotCX0KLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcGZsb2NrL2JlbmNobWFy
ay9NYWtlZmlsZSBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25z
L2NrX3BmbG9jay9iZW5jaG1hcmsvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDZmNzM5ZDkzYzQwOGU2Mjg1MmQ1MTlmNDk1NWMwN2Q3NDRiYjQzNzguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcGZsb2NrL2JlbmNobWFyay9NYWtlZmlsZQorKysg
L2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS5QSE9OWTogY2xlYW4gZGlzdHJpYnV0aW9uCi0K
LU9CSkVDVFM9bGF0ZW5jeSB0aHJvdWdocHV0Ci0KLWFsbDogJChPQkpFQ1RTKQotCi1sYXRlbmN5
OiBsYXRlbmN5LmMgLi4vLi4vLi4vaW5jbHVkZS9ja19yd2xvY2suaAotCSQoQ0MpICQoQ0ZMQUdT
KSAtbyBsYXRlbmN5IGxhdGVuY3kuYwotCi10aHJvdWdocHV0OiB0aHJvdWdocHV0LmMgLi4vLi4v
Li4vaW5jbHVkZS9ja19yd2xvY2suaAotCSQoQ0MpICQoQ0ZMQUdTKSAtbyB0aHJvdWdocHV0IHRo
cm91Z2hwdXQuYwotCi1jbGVhbjoKLQlybSAtcmYgKi5kU1lNICouZXhlICp+ICoubyAkKE9CSkVD
VFMpCi0KLWluY2x1ZGUgLi4vLi4vLi4vYnVpbGQvcmVncmVzc2lvbnMuYnVpbGQKLUNGTEFHUys9
JChQVEhSRUFEX0NGTEFHUykgLURfR05VX1NPVVJDRQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcGZsb2NrL2JlbmNobWFyay9sYXRl
bmN5LmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19w
ZmxvY2svYmVuY2htYXJrL2xhdGVuY3kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTI4YzlkZDViNjI3NjBmMDdjZDUyOGNhYWEyNTEwMzlmZTU3YWY0Mi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9ja19wZmxvY2svYmVuY2htYXJrL2xhdGVuY3kuYworKysgL2Rl
di9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFNhbXkg
QWwgQmFocmEuCi0gKiBDb3B5cmlnaHQgMjAxMyBKb2huIFdpdHRyb2NrLgotICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVQRklTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8Y2tfcGZsb2NrLmg+Ci0jaW5jbHVkZSA8aW50dHlw
ZXMuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0K
LSNpZm5kZWYgU1RFUFMKLSNkZWZpbmUgU1RFUFMgMTAwMDAwMAotI2VuZGlmCi0KLWludAotbWFp
bih2b2lkKQotewotCXVpbnQ2NF90IHNfYiwgZV9iLCBpOwotCWNrX3BmbG9ja190IHBmbG9jayA9
IENLX1BGTE9DS19JTklUSUFMSVpFUjsKLQotCWZvciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7
Ci0JCWNrX3BmbG9ja193cml0ZV9sb2NrKCZwZmxvY2spOwotCQlja19wZmxvY2tfd3JpdGVfdW5s
b2NrKCZwZmxvY2spOwotCX0KLQotCXNfYiA9IHJkdHNjKCk7Ci0JZm9yIChpID0gMDsgaSA8IFNU
RVBTOyBpKyspIHsKLQkJY2tfcGZsb2NrX3dyaXRlX2xvY2soJnBmbG9jayk7Ci0JCWNrX3BmbG9j
a193cml0ZV91bmxvY2soJnBmbG9jayk7Ci0JfQotCWVfYiA9IHJkdHNjKCk7Ci0JcHJpbnRmKCJX
UklURTogcGZsb2NrICAgJTE1IiBQUkl1NjQgIlxuIiwgKGVfYiAtIHNfYikgLyBTVEVQUyk7Ci0K
LQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19wZmxvY2tfcmVhZF9sb2NrKCZw
ZmxvY2spOwotCQlja19wZmxvY2tfcmVhZF91bmxvY2soJnBmbG9jayk7Ci0JfQotCi0Jc19iID0g
cmR0c2MoKTsKLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19wZmxvY2tfcmVh
ZF9sb2NrKCZwZmxvY2spOwotCQlja19wZmxvY2tfcmVhZF91bmxvY2soJnBmbG9jayk7Ci0JfQot
CWVfYiA9IHJkdHNjKCk7Ci0JcHJpbnRmKCJSRUFEOiAgcGZsb2NrICAgJTE1IiBQUkl1NjQgIlxu
IiwgKGVfYiAtIHNfYikgLyBTVEVQUyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcGZsb2NrL2Jl
bmNobWFyay90aHJvdWdocHV0LmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9y
ZWdyZXNzaW9ucy9ja19wZmxvY2svYmVuY2htYXJrL3Rocm91Z2hwdXQuYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDI5NDY1ZjlhZGFiYmYzZDQ3ZDZhZTg5NzA5MWNhNTE1YjVkZTU4
ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wZmxvY2svYmVuY2htYXJr
L3Rocm91Z2hwdXQuYworKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IDIwMTEtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQ29weXJpZ2h0IDIwMTMgSm9obiBX
aXR0cm9jay4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUEZJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGNrX3BmbG9j
ay5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1
ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0j
aW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIKLQotI2lmbmRl
ZiBTVEVQUwotI2RlZmluZSBTVEVQUyAxMDAwMDAwCi0jZW5kaWYKLQotc3RhdGljIGludCBiYXJy
aWVyOwotc3RhdGljIGludCB0aHJlYWRzOwotc3RhdGljIHVuc2lnbmVkIGludCBmbGFnIENLX0ND
X0NBQ0hFTElORTsKLXN0YXRpYyBja19wZmxvY2tfdCBwZmxvY2sgPSBDS19QRkxPQ0tfSU5JVElB
TElaRVI7Ci1zdGF0aWMgc3RydWN0IGFmZmluaXR5IGFmZmluaXR5OwotCi1zdGF0aWMgdm9pZCAq
Ci10aHJlYWRfcGZsb2NrKHZvaWQgKnB1bikKLXsKLQl1aW50NjRfdCBzX2IsIGVfYiwgYSwgaTsK
LQl1aW50NjRfdCAqdmFsdWUgPSBwdW47Ci0KLQlpZiAoYWZmX2l0ZXJhdGUoJmFmZmluaXR5KSAh
PSAwKSB7Ci0JCXBlcnJvcigiRVJST1I6IENvdWxkIG5vdCBhZmZpbmUgdGhyZWFkIik7Ci0JCWV4
aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQlja19wcl9pbmNfaW50KCZiYXJyaWVyKTsKLQl3aGls
ZSAoY2tfcHJfbG9hZF9pbnQoJmJhcnJpZXIpICE9IHRocmVhZHMpCi0JCWNrX3ByX3N0YWxsKCk7
Ci0KLQlmb3IgKGkgPSAxLCBhID0gMDs7IGkrKykgewotCQlzX2IgPSByZHRzYygpOwotCQlja19w
ZmxvY2tfcmVhZF9sb2NrKCZwZmxvY2spOwotCQlja19wZmxvY2tfcmVhZF91bmxvY2soJnBmbG9j
ayk7Ci0JCWNrX3BmbG9ja19yZWFkX2xvY2soJnBmbG9jayk7Ci0JCWNrX3BmbG9ja19yZWFkX3Vu
bG9jaygmcGZsb2NrKTsKLQkJY2tfcGZsb2NrX3JlYWRfbG9jaygmcGZsb2NrKTsKLQkJY2tfcGZs
b2NrX3JlYWRfdW5sb2NrKCZwZmxvY2spOwotCQlja19wZmxvY2tfcmVhZF9sb2NrKCZwZmxvY2sp
OwotCQlja19wZmxvY2tfcmVhZF91bmxvY2soJnBmbG9jayk7Ci0JCWNrX3BmbG9ja19yZWFkX2xv
Y2soJnBmbG9jayk7Ci0JCWNrX3BmbG9ja19yZWFkX3VubG9jaygmcGZsb2NrKTsKLQkJY2tfcGZs
b2NrX3JlYWRfbG9jaygmcGZsb2NrKTsKLQkJY2tfcGZsb2NrX3JlYWRfdW5sb2NrKCZwZmxvY2sp
OwotCQlja19wZmxvY2tfcmVhZF9sb2NrKCZwZmxvY2spOwotCQlja19wZmxvY2tfcmVhZF91bmxv
Y2soJnBmbG9jayk7Ci0JCWNrX3BmbG9ja19yZWFkX2xvY2soJnBmbG9jayk7Ci0JCWNrX3BmbG9j
a19yZWFkX3VubG9jaygmcGZsb2NrKTsKLQkJY2tfcGZsb2NrX3JlYWRfbG9jaygmcGZsb2NrKTsK
LQkJY2tfcGZsb2NrX3JlYWRfdW5sb2NrKCZwZmxvY2spOwotCQlja19wZmxvY2tfcmVhZF9sb2Nr
KCZwZmxvY2spOwotCQlja19wZmxvY2tfcmVhZF91bmxvY2soJnBmbG9jayk7Ci0JCWNrX3BmbG9j
a19yZWFkX2xvY2soJnBmbG9jayk7Ci0JCWNrX3BmbG9ja19yZWFkX3VubG9jaygmcGZsb2NrKTsK
LQkJY2tfcGZsb2NrX3JlYWRfbG9jaygmcGZsb2NrKTsKLQkJY2tfcGZsb2NrX3JlYWRfdW5sb2Nr
KCZwZmxvY2spOwotCQlja19wZmxvY2tfcmVhZF9sb2NrKCZwZmxvY2spOwotCQlja19wZmxvY2tf
cmVhZF91bmxvY2soJnBmbG9jayk7Ci0JCWNrX3BmbG9ja19yZWFkX2xvY2soJnBmbG9jayk7Ci0J
CWNrX3BmbG9ja19yZWFkX3VubG9jaygmcGZsb2NrKTsKLQkJY2tfcGZsb2NrX3JlYWRfbG9jaygm
cGZsb2NrKTsKLQkJY2tfcGZsb2NrX3JlYWRfdW5sb2NrKCZwZmxvY2spOwotCQlja19wZmxvY2tf
cmVhZF9sb2NrKCZwZmxvY2spOwotCQlja19wZmxvY2tfcmVhZF91bmxvY2soJnBmbG9jayk7Ci0J
CWVfYiA9IHJkdHNjKCk7Ci0KLQkJYSArPSAoZV9iIC0gc19iKSA+PiA0OwotCi0JCWlmIChja19w
cl9sb2FkX3VpbnQoJmZsYWcpID09IDEpCi0JCQlicmVhazsKLQl9Ci0KLQlja19wcl9pbmNfaW50
KCZiYXJyaWVyKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF9pbnQoJmJhcnJpZXIpICE9IHRocmVhZHMg
KiAyKQotCQlja19wcl9zdGFsbCgpOwotCi0JKnZhbHVlID0gKGEgLyBpKTsKLQlyZXR1cm4gTlVM
TDsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JaW50IHQ7Ci0J
cHRocmVhZF90ICpwOwotCXVpbnQ2NF90ICpsYXRlbmN5OwotCi0JaWYgKGFyZ2MgIT0gMykgewot
CQlja19lcnJvcigiVXNhZ2U6IHRocm91Z2hwdXQgPGRlbHRhPiA8dGhyZWFkcz5cbiIpOwotCX0K
LQotCXRocmVhZHMgPSBhdG9pKGFyZ3ZbMl0pOwotCWlmICh0aHJlYWRzIDw9IDApIHsKLQkJY2tf
ZXJyb3IoIkVSUk9SOiBUaHJlYWRzIG11c3QgYmUgYSB2YWx1ZSA+IDAuXG4iKTsKLQl9Ci0KLQlw
ID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogdGhyZWFkcyk7Ci0JaWYgKHAgPT0gTlVMTCkg
ewotCQlja19lcnJvcigiRVJST1I6IEZhaWxlZCB0byBpbml0aWFsaXplIHRocmVhZC5cbiIpOwot
CX0KLQotCWxhdGVuY3kgPSBtYWxsb2Moc2l6ZW9mKHVpbnQ2NF90KSAqIHRocmVhZHMpOwotCWlm
IChsYXRlbmN5ID09IE5VTEwpIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBGYWlsZWQgdG8gY3JlYXRl
IGxhdGVuY3kgYnVmZmVyLlxuIik7Ci0JfQotCi0JYWZmaW5pdHkuZGVsdGEgPSBhdG9pKGFyZ3Zb
MV0pOwotCWFmZmluaXR5LnJlcXVlc3QgPSAwOwotCi0JZnByaW50ZihzdGRlcnIsICJDcmVhdGlu
ZyB0aHJlYWRzIChwZmxvY2spLi4uIik7Ci0JZm9yICh0ID0gMDsgdCA8IHRocmVhZHM7IHQrKykg
ewotCQlpZiAocHRocmVhZF9jcmVhdGUoJnBbdF0sIE5VTEwsIHRocmVhZF9wZmxvY2ssIGxhdGVu
Y3kgKyB0KSAhPSAwKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBjcmVhdGUgdGhy
ZWFkICVkXG4iLCB0KTsKLQkJfQotCX0KLQlmcHJpbnRmKHN0ZGVyciwgImRvbmVcbiIpOwotCi0J
Y29tbW9uX3NsZWVwKDEwKTsKLQlja19wcl9zdG9yZV91aW50KCZmbGFnLCAxKTsKLQotCWZwcmlu
dGYoc3RkZXJyLCAiV2FpdGluZyBmb3IgdGhyZWFkcyB0byBmaW5pc2ggYWNxdWlzaXRpb24gcmVn
cmVzc2lvbi4uLiIpOwotCWZvciAodCA9IDA7IHQgPCB0aHJlYWRzOyB0KyspCi0JCXB0aHJlYWRf
am9pbihwW3RdLCBOVUxMKTsKLQlmcHJpbnRmKHN0ZGVyciwgImRvbmVcblxuIik7Ci0KLQlmb3Ig
KHQgPSAxOyB0IDw9IHRocmVhZHM7IHQrKykKLQkJcHJpbnRmKCIlMTB1ICUyMCIgUFJJdTY0ICJc
biIsIHQsIGxhdGVuY3lbdCAtIDFdKTsKLQotCXJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wZmxvY2svdmFs
aWRhdGUvTWFrZWZpbGUgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNz
aW9ucy9ja19wZmxvY2svdmFsaWRhdGUvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGVlYTlkMDIyY2UzMWI5OGI0MjM2MmI4MDU0MDRhNzc0OGQ4ZjQxMTQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcGZsb2NrL3ZhbGlkYXRlL01ha2VmaWxlCisr
KyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLlBIT05ZOiBjaGVjayBjbGVhbiBkaXN0cmli
dXRpb24KLQotT0JKRUNUUz12YWxpZGF0ZQotCi1hbGw6ICQoT0JKRUNUUykKLQotdmFsaWRhdGU6
IHZhbGlkYXRlLmMgLi4vLi4vLi4vaW5jbHVkZS9ja19wZmxvY2suaAotCSQoQ0MpICQoQ0ZMQUdT
KSAtbyB2YWxpZGF0ZSB2YWxpZGF0ZS5jCi0KLWNoZWNrOiBhbGwKLQkuL3ZhbGlkYXRlICQoQ09S
RVMpIDEKLQotY2xlYW46Ci0Jcm0gLXJmICouZFNZTSAqLmV4ZSAqfiAqLm8gJChPQkpFQ1RTKQot
Ci1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxkCi1DRkxBR1MrPSQoUFRI
UkVBRF9DRkxBR1MpIC1EX0dOVV9TT1VSQ0UKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3BmbG9jay92YWxpZGF0ZS92YWxpZGF0ZS5j
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcGZsb2Nr
L3ZhbGlkYXRlL3ZhbGlkYXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NTE3
NTVkZTJmNWMzYWQyNGFlODMwZTVkN2ZiNGE0OGQ4YWJmMTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Y2svcmVncmVzc2lvbnMvY2tfcGZsb2NrL3ZhbGlkYXRlL3ZhbGlkYXRlLmMKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBC
YWhyYSwgSm9obiBXaXR0cm9jay4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+
Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGlv
Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2luY2x1ZGUg
PHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0KLSNpbmNsdWRlIDxja19wci5oPgot
I2luY2x1ZGUgPGNrX3BmbG9jay5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNp
Zm5kZWYgSVRFUkFURQotI2RlZmluZSBJVEVSQVRFIDEwMDAwMDAKLSNlbmRpZgotCi1zdGF0aWMg
c3RydWN0IGFmZmluaXR5IGE7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGxvY2tlZDsKLXN0YXRpYyBp
bnQgbnRocjsKLXN0YXRpYyBja19wZmxvY2tfdCBsb2NrID0gQ0tfUEZMT0NLX0lOSVRJQUxJWkVS
OwotCi1zdGF0aWMgdm9pZCAqCi10aHJlYWQodm9pZCAqbnVsbCBDS19DQ19VTlVTRUQpCi17Ci0J
aW50IGkgPSBJVEVSQVRFOwotCXVuc2lnbmVkIGludCBsOwotCi0gICAgICAgIGlmIChhZmZfaXRl
cmF0ZSgmYSkpIHsKLSAgICAgICAgICAgICAgICBwZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWZm
aW5lIHRocmVhZCIpOwotICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAg
ICAgfQotCi0Jd2hpbGUgKGktLSkgewotCQlja19wZmxvY2tfd3JpdGVfbG9jaygmbG9jayk7Ci0J
CXsKLQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0JCQlpZiAobCAhPSAwKSB7Ci0J
CQkJY2tfZXJyb3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDBcbiIsIF9fTElORV9fLCBsKTsKLQkJ
CX0KLQotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9j
a2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQoJmxv
Y2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZs
b2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgm
bG9ja2VkKTsKLQotCQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9ja2VkKTsKLQkJCWlmIChsICE9
IDgpIHsKLQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUgIT0gMlxuIiwgX19MSU5FX18s
IGwpOwotCQkJfQotCi0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191
aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9kZWNf
dWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVj
X3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2Rl
Y191aW50KCZsb2NrZWQpOwotCi0JCQlsID0gY2tfcHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQkJ
aWYgKGwgIT0gMCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbV1I6JWRdOiAldSAhPSAwXG4iLCBf
X0xJTkVfXywgbCk7Ci0JCQl9Ci0JCX0KLQkJY2tfcGZsb2NrX3dyaXRlX3VubG9jaygmbG9jayk7
Ci0KLQkJY2tfcGZsb2NrX3JlYWRfbG9jaygmbG9jayk7Ci0JCXsKLQkJCWwgPSBja19wcl9sb2Fk
X3VpbnQoJmxvY2tlZCk7Ci0JCQlpZiAobCAhPSAwKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFtS
RDolZF06ICV1ICE9IDBcbiIsIF9fTElORV9fLCBsKTsKLQkJCX0KLQkJfQotCQlja19wZmxvY2tf
cmVhZF91bmxvY2soJmxvY2spOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1pbnQKLW1haW4o
aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlwdGhyZWFkX3QgKnRocmVhZHM7Ci0JaW50IGk7
Ci0KLQlpZiAoYXJnYyAhPSAzKSB7Ci0JCWNrX2Vycm9yKCJVc2FnZTogdmFsaWRhdGUgPG51bWJl
ciBvZiB0aHJlYWRzPiA8YWZmaW5pdHkgZGVsdGE+XG4iKTsKLQl9Ci0KLQludGhyID0gYXRvaShh
cmd2WzFdKTsKLQlpZiAobnRociA8PSAwKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogTnVtYmVyIG9m
IHRocmVhZHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFxuIik7Ci0JfQotCi0JdGhyZWFkcyA9IG1h
bGxvYyhzaXplb2YocHRocmVhZF90KSAqIG50aHIpOwotCWlmICh0aHJlYWRzID09IE5VTEwpIHsK
LQkJY2tfZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgdGhyZWFkIHN0cnVjdHVyZXNc
biIpOwotCX0KLQotCWEuZGVsdGEgPSBhdG9pKGFyZ3ZbMl0pOwotCi0JZnByaW50ZihzdGRlcnIs
ICJDcmVhdGluZyB0aHJlYWRzIChtdXR1YWwgZXhjbHVzaW9uKS4uLiIpOwotCWZvciAoaSA9IDA7
IGkgPCBudGhyOyBpKyspIHsKLQkJaWYgKHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCBOVUxM
LCB0aHJlYWQsIE5VTEwpKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBjcmVhdGUg
dGhyZWFkICVkXG4iLCBpKTsKLQkJfQotCX0KLQlmcHJpbnRmKHN0ZGVyciwgImRvbmVcbiIpOwot
Ci0JZnByaW50ZihzdGRlcnIsICJXYWl0aW5nIGZvciB0aHJlYWRzIHRvIGZpbmlzaCBjb3JyZWN0
bmVzcyByZWdyZXNzaW9uLi4uIik7Ci0JZm9yIChpID0gMDsgaSA8IG50aHI7IGkrKykKLQkJcHRo
cmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwotCWZwcmludGYoc3RkZXJyLCAiZG9uZSAocGFz
c2VkKVxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvYmVuY2htYXJrL01ha2VmaWxlIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvYmVuY2ht
YXJrL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTE4M2Q4YjJlYjU5
OGRlMWUxMTE5Y2JhYWFlZjhjMGFkMWM5ZWZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jl
c3Npb25zL2NrX3ByL2JlbmNobWFyay9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMxICsw
LDAgQEAKLS5QSE9OWTogY2xlYW4KLQotYWxsOiBja19wcl9jYXNfNjQgY2tfcHJfZmFzXzY0IGNr
X3ByX2Nhc182NF8yIGNrX3ByX2FkZF82NCBja19wcl9mYWFfNjQgY2tfcHJfbmVnXzY0IGZwCi0K
LWZwOiBmcC5jCi0JJChDQykgJChDRkxBR1MpIC1vIGZwIGZwLmMKLQotY2tfcHJfY2FzXzY0XzI6
IGNrX3ByX2Nhc182NF8yLmMKLQkkKENDKSAkKENGTEFHUykgLW8gY2tfcHJfY2FzXzY0XzIgY2tf
cHJfY2FzXzY0XzIuYyAtbG0KLQotY2tfcHJfY2FzXzY0OiBja19wcl9jYXNfNjQuYwotCSQoQ0Mp
ICQoQ0ZMQUdTKSAtbyBja19wcl9jYXNfNjQgY2tfcHJfY2FzXzY0LmMgLWxtCi0KLWNrX3ByX2Zh
c182NDogY2tfcHJfZmFzXzY0LmMKLQkkKENDKSAkKENGTEFHUykgLW8gY2tfcHJfZmFzXzY0IGNr
X3ByX2Zhc182NC5jIC1sbQotCi1ja19wcl9hZGRfNjQ6IGNrX3ByX2FkZF82NC5jCi0JJChDQykg
JChDRkxBR1MpIC1vIGNrX3ByX2FkZF82NCBja19wcl9hZGRfNjQuYyAtbG0KLQotY2tfcHJfZmFh
XzY0OiBja19wcl9mYWFfNjQuYwotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBja19wcl9mYWFfNjQgY2tf
cHJfZmFhXzY0LmMgLWxtCi0KLWNrX3ByX25lZ182NDogY2tfcHJfbmVnXzY0LmMKLQkkKENDKSAk
KENGTEFHUykgLW8gY2tfcHJfbmVnXzY0IGNrX3ByX25lZ182NC5jIC1sbQotCi1jbGVhbjoKLQly
bSAtcmYgY2tfcHJfY2FzXzY0IGNrX3ByX2Zhc182NCBja19wcl9jYXNfNjRfMiBja19wcl9hZGRf
NjQgXAotCSAgICAgICBja19wcl9mYWFfNjQgY2tfcHJfbmVnXzY0ICouZFNZTSAqLmV4ZQotCi1p
bmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxkCi1DRkxBR1MrPSQoUFRIUkVB
RF9DRkxBR1MpIC1EX0dOVV9TT1VSQ0UKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL2JlbmNobWFyay9iZW5jaG1hcmsuaCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL2JlbmNobWFy
ay9iZW5jaG1hcmsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjllNGVkMmYwMmE1
ZTdmYWM1OTkxNGY3M2I3ZDI0YmRjMTJiYWIwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdy
ZXNzaW9ucy9ja19wci9iZW5jaG1hcmsvYmVuY2htYXJrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MzAgKzAsMCBAQAotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNp
bmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGludC5o
PgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1
ZGUgPHN5cy90aW1lLmg+Ci0KLSNpbmNsdWRlIDxja19wci5oPgotCi0jaW5jbHVkZSAiLi4vLi4v
Y29tbW9uLmgiCi0KLS8qIDghID0gNDAzMjAsIGV2ZW5seSBkaXZpZGUgMSAuLiA4IHByb2Nlc3Nv
ciB3b3JrbG9hZC4gKi8KLSNkZWZpbmUgV09SS0xPQUQgKDQwMzIwICogMjA1NikKLQotc3RydWN0
IGJsb2NrIHsKLQl1bnNpZ25lZCBpbnQgdGlkOwotfTsKLQotc3RhdGljIHN0cnVjdCBhZmZpbml0
eSBhOwotc3RhdGljIHVuc2lnbmVkIGludCByZWFkeTsKLXN0YXRpYyB1aW50NjRfdCAqY291bnQ7
Ci1zdGF0aWMgdWludDY0X3QgbnRocjsKLQotc3RhdGljIHVpbnQ2NF90IG9iamVjdFsyXSBDS19D
Q19DQUNIRUxJTkU7Ci0KLXN0YXRpYyB2b2lkICoKLWZhaXJuZXNzKHZvaWQgKm51bGwpCi17Ci0J
c3RydWN0IGJsb2NrICpjb250ZXh0ID0gbnVsbDsKLQl1bnNpZ25lZCBpbnQgaSA9IGNvbnRleHQt
PnRpZDsKLQotICAgICAgICBpZiAoYWZmX2l0ZXJhdGUoJmEpKSB7Ci0gICAgICAgICAgICAgICAg
cGVycm9yKCJFUlJPUjogQ291bGQgbm90IGFmZmluZSB0aHJlYWQiKTsKLSAgICAgICAgICAgICAg
ICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLQotCXdoaWxlIChja19wcl9sb2FkX3Vp
bnQoJnJlYWR5KSA9PSAwKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZyZWFkeSkpIHsKLQkJ
QVRPTUlDOwotCQlBVE9NSUM7Ci0JCUFUT01JQzsKLQkJQVRPTUlDOwotCQlja19wcl9zdG9yZV82
NChjb3VudCArIGksIGNvdW50W2ldICsgMSk7Ci0JfQotCi0JcmV0dXJuIChOVUxMKTsKLX0KLQot
aW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JdWludDY0X3QgdiwgZDsKLQl1
bnNpZ25lZCBpbnQgaTsKLQlwdGhyZWFkX3QgKnRocmVhZHM7Ci0Jc3RydWN0IGJsb2NrICpjb250
ZXh0OwotCi0JaWYgKGFyZ2MgIT0gMykgewotCQlja19lcnJvcigiVXNhZ2U6ICIgQVRPTUlDX1NU
UklORyAiIDxudW1iZXIgb2YgdGhyZWFkcz4gPGFmZmluaXR5IGRlbHRhPlxuIik7Ci0JCWV4aXQo
RVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQludGhyID0gYXRvaShhcmd2WzFdKTsKLQlpZiAobnRociA8
PSAwKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogTnVtYmVyIG9mIHRocmVhZHMgbXVzdCBiZSBncmVh
dGVyIHRoYW4gMFxuIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQl0aHJlYWRzID0g
bWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocik7Ci0JaWYgKHRocmVhZHMgPT0gTlVMTCkg
ewotCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSB0aHJlYWQgc3RydWN0dXJl
c1xuIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQljb250ZXh0ID0gbWFsbG9jKHNp
emVvZihzdHJ1Y3QgYmxvY2spICogbnRocik7Ci0JaWYgKGNvbnRleHQgPT0gTlVMTCkgewotCQlj
a19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSB0aHJlYWQgY29udGV4dHNcbiIpOwot
CQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JYS5kZWx0YSA9IGF0b2koYXJndlsyXSk7Ci0J
YS5yZXF1ZXN0ID0gMDsKLQotCWNvdW50ID0gbWFsbG9jKHNpemVvZih1aW50NjRfdCkgKiBudGhy
KTsKLQlpZiAoY291bnQgPT0gTlVMTCkgewotCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBj
cmVhdGUgYWNxdWlzaXRpb24gYnVmZmVyXG4iKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0K
LQltZW1zZXQoY291bnQsIDAsIHNpemVvZih1aW50NjRfdCkgKiBudGhyKTsKLQotCWZwcmludGYo
c3RkZXJyLCAiQ3JlYXRpbmcgdGhyZWFkcyAoZmFpcm5lc3MpLi4uIik7Ci0JZm9yIChpID0gMDsg
aSA8IG50aHI7IGkrKykgewotCQljb250ZXh0W2ldLnRpZCA9IGk7Ci0JCWlmIChwdGhyZWFkX2Ny
ZWF0ZSgmdGhyZWFkc1tpXSwgTlVMTCwgZmFpcm5lc3MsIGNvbnRleHQgKyBpKSkgewotCQkJY2tf
ZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgY3JlYXRlIHRocmVhZCAlZFxuIiwgaSk7Ci0JCQlleGl0
KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQl9Ci0JZnByaW50ZihzdGRlcnIsICJkb25lXG4iKTsKLQot
CWNrX3ByX3N0b3JlX3VpbnQoJnJlYWR5LCAxKTsKLQljb21tb25fc2xlZXAoMTApOwotCWNrX3By
X3N0b3JlX3VpbnQoJnJlYWR5LCAwKTsKLQotCWZwcmludGYoc3RkZXJyLCAiV2FpdGluZyBmb3Ig
dGhyZWFkcyB0byBmaW5pc2ggYWNxdWlzaXRpb24gcmVncmVzc2lvbi4uLiIpOwotCWZvciAoaSA9
IDA7IGkgPCBudGhyOyBpKyspCi0JCXB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsKLQlm
cHJpbnRmKHN0ZGVyciwgImRvbmVcblxuIik7Ci0KLQlmb3IgKGkgPSAwLCB2ID0gMDsgaSA8IG50
aHI7IGkrKykgewotCQlwcmludGYoIiVkICUxNSIgUFJJdTY0ICJcbiIsIGksIGNvdW50W2ldKTsK
LQkJdiArPSBjb3VudFtpXTsKLQl9Ci0KLQlwcmludGYoIlxuIyB0b3RhbCAgICAgICA6ICUxNSIg
UFJJdTY0ICJcbiIsIHYpOwotCXByaW50ZigiIyB0aHJvdWdocHV0ICA6ICUxNSIgUFJJdTY0ICIg
YS9zXG4iLCAodiAvPSBudGhyKSAvIDEwKTsKLQotCWZvciAoaSA9IDAsIGQgPSAwOyBpIDwgbnRo
cjsgaSsrKQotCQlkICs9IChjb3VudFtpXSAtIHYpICogKGNvdW50W2ldIC0gdik7Ci0KLQlwcmlu
dGYoIiMgYXZlcmFnZSAgICAgOiAlMTUiIFBSSXU2NCAiXG4iLCB2KTsKLQlwcmludGYoIiMgZGV2
aWF0aW9uICAgOiAlLjJmICglLjJmJSUpXG5cbiIsIHNxcnQoZCAvIG50aHIpLCAoc3FydChkIC8g
bnRocikgLyB2KSAqIDEwMC4wMCk7Ci0KLQlyZXR1cm4gKDApOwotfQotCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wci9iZW5jaG1h
cmsvY2tfcHJfYWRkXzY0LmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdy
ZXNzaW9ucy9ja19wci9iZW5jaG1hcmsvY2tfcHJfYWRkXzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDljNGQ1MWY0MGVhOTg5YjRhYTYzN2U2NmQ0Zjg2MTY4MWNhN2YxY2YuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvYmVuY2htYXJrL2NrX3ByX2Fk
ZF82NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI2luY2x1ZGUgPGNrX3ByLmg+
Ci0KLSNpZmRlZiBDS19GX1BSX0FERF82NAotI2RlZmluZSBBVE9NSUMgY2tfcHJfYWRkXzY0KG9i
amVjdCwgMSkKLSNkZWZpbmUgQVRPTUlDX1NUUklORyAiY2tfcHJfYWRkXzY0IgotI2luY2x1ZGUg
ImJlbmNobWFyay5oIgotI2Vsc2UKLSN3YXJuaW5nIERpZCBub3QgZmluZCBBRERfNjQgaW1wbGVt
ZW50YXRpb24uCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLWludAotbWFpbih2b2lkKQotewotCWV4
aXQoRVhJVF9GQUlMVVJFKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvYmVuY2htYXJrL2NrX3ByX2Nhc182
NC5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIv
YmVuY2htYXJrL2NrX3ByX2Nhc182NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
MGRjYjY0YjBlN2FjNzA4NGI5ZWQ3MjdhZWM1YzhjZDFhM2JjYWM5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL2JlbmNobWFyay9ja19wcl9jYXNfNjQuYworKysgL2Rl
di9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNpbmNsdWRlIDxja19wci5oPgotCi0jaWZkZWYgQ0tf
Rl9QUl9DQVNfNjQKLSNkZWZpbmUgQVRPTUlDIGNrX3ByX2Nhc182NChvYmplY3QsIDEsIDEpCi0j
ZGVmaW5lIEFUT01JQ19TVFJJTkcgImNrX3ByX2Nhc182NCIKLSNpbmNsdWRlICJiZW5jaG1hcmsu
aCIKLSNlbHNlCi0jd2FybmluZyBEaWQgbm90IGZpbmQgQ0FTXzY0IGltcGxlbWVudGF0aW9uLgot
I2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1pbnQKLW1haW4odm9pZCkKLXsKLQlleGl0KEVYSVRfRkFJ
TFVSRSk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL2JlbmNobWFyay9ja19wcl9jYXNfNjRfMi5jIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvYmVuY2htYXJr
L2NrX3ByX2Nhc182NF8yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NTliMzli
MmM1ZjNiNzUwODg0YTgxZDFmOWU3ZGYzNTc0NzA3NzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2sv
cmVncmVzc2lvbnMvY2tfcHIvYmVuY2htYXJrL2NrX3ByX2Nhc182NF8yLmMKKysrIC9kZXYvbnVs
bApAQCAtMSwxNyArMCwwIEBACi0jaW5jbHVkZSA8Y2tfcHIuaD4KLQotI2lmZGVmIENLX0ZfUFJf
Q0FTXzY0XzIKLSNkZWZpbmUgQVRPTUlDIHsgdWludDY0X3QgelsyXSA9IHsxLCAyfTsgY2tfcHJf
Y2FzXzY0XzIob2JqZWN0LCB6LCB6KTsgfQotI2RlZmluZSBBVE9NSUNfU1RSSU5HICJja19wcl9j
YXNfNjRfMiIKLSNpbmNsdWRlICJiZW5jaG1hcmsuaCIKLSNlbHNlCi0jaW5jbHVkZSA8c3RkaW8u
aD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotaW50Ci1tYWluKHZvaWQpCi17Ci0JZnByaW50Zihz
dGRlcnIsICJVbnN1cHBvcnRlZC5cbiIpOwotCXJldHVybiAwOwotfQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wci9i
ZW5jaG1hcmsvY2tfcHJfZmFhXzY0LmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19wci9iZW5jaG1hcmsvY2tfcHJfZmFhXzY0LmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDliZGM4N2Q5ZDg0YmQzNjY2MmM0NWVhM2ExMmJjZjgzZGM5OTdi
MzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvYmVuY2htYXJrL2Nr
X3ByX2ZhYV82NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI2luY2x1ZGUgPGNr
X3ByLmg+Ci0KLSNpZmRlZiBDS19GX1BSX0ZBQV82NAotI2RlZmluZSBBVE9NSUMgY2tfcHJfZmFh
XzY0KG9iamVjdCwgMSkKLSNkZWZpbmUgQVRPTUlDX1NUUklORyAiY2tfcHJfZmFhXzY0IgotI2lu
Y2x1ZGUgImJlbmNobWFyay5oIgotI2Vsc2UKLSN3YXJuaW5nIERpZCBub3QgZmluZCBGQUFfNjQg
aW1wbGVtZW50YXRpb24uCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLWludAotbWFpbih2b2lkKQot
ewotCWV4aXQoRVhJVF9GQUlMVVJFKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvYmVuY2htYXJrL2NrX3By
X2Zhc182NC5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfcHIvYmVuY2htYXJrL2NrX3ByX2Zhc182NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmYWNkNzU5MGMyNGI4NDBhNGQyODAzN2VkYTViMzE5OTVhMzM0YTU2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL2JlbmNobWFyay9ja19wcl9mYXNfNjQuYwor
KysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNpbmNsdWRlIDxja19wci5oPgotCi0jaWZk
ZWYgQ0tfRl9QUl9GQVNfNjQKLSNkZWZpbmUgQVRPTUlDIGNrX3ByX2Zhc182NChvYmplY3QsIDEp
Ci0jZGVmaW5lIEFUT01JQ19TVFJJTkcgImNrX3ByX2Zhc182NCIKLSNpbmNsdWRlICJiZW5jaG1h
cmsuaCIKLSNlbHNlCi0jd2FybmluZyBEaWQgbm90IGZpbmQgRkFTXzY0IGltcGxlbWVudGF0aW9u
LgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1pbnQKLW1haW4odm9pZCkKLXsKLQotCXJldHVybiAw
OwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19wci9iZW5jaG1hcmsvY2tfcHJfbmVnXzY0LmMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wci9iZW5jaG1hcmsvY2tfcHJf
bmVnXzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZTBhZDk2OTZjOGNiMDk0
OWIwMmQ2NzI0NGIxNDhkODgyZDc2ZTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lv
bnMvY2tfcHIvYmVuY2htYXJrL2NrX3ByX25lZ182NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYg
KzAsMCBAQAotI2luY2x1ZGUgPGNrX3ByLmg+Ci0KLSNpZmRlZiBDS19GX1BSX05FR182NAotI2Rl
ZmluZSBBVE9NSUMgY2tfcHJfbmVnXzY0KG9iamVjdCkKLSNkZWZpbmUgQVRPTUlDX1NUUklORyAi
Y2tfcHJfbmVnXzY0IgotI2luY2x1ZGUgImJlbmNobWFyay5oIgotI2Vsc2UKLSN3YXJuaW5nIERp
ZCBub3QgZmluZCBORUdfNjQgaW1wbGVtZW50YXRpb24uCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0K
LWludAotbWFpbih2b2lkKQotewotCWV4aXQoRVhJVF9GQUlMVVJFKTsKLX0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tf
cHIvYmVuY2htYXJrL2ZwLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdy
ZXNzaW9ucy9ja19wci9iZW5jaG1hcmsvZnAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZjdhYTE1NzAxN2VkMWY2YWZkN2VlMDMzMTRhOWI2OGY4NjA3ZTE1ZS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wci9iZW5jaG1hcmsvZnAuYworKysgL2Rldi9udWxs
CkBAIC0xLDY2ICswLDAgQEAKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGludHR5cGVz
Lmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIKLQot
I2lmbmRlZiBJUgotI2RlZmluZSBJUiAzMDAwMDAwCi0jZW5kaWYgLyogSVIgKi8KLQotc3RhdGlj
IGludCBhIENLX0NDX0NBQ0hFTElORTsKLXN0YXRpYyBpbnQgYiBDS19DQ19DQUNIRUxJTkU7Ci0K
LWludAotbWFpbih2b2lkKQotewotCXVpbnQ2NF90IHMsIGU7Ci0JdW5zaWduZWQgaW50IGk7Ci0K
LQlzID0gcmR0c2MoKTsKLQlmb3IgKGkgPSAwOyBpIDwgSVI7IGkrKykgewotCQlja19wcl9sb2Fk
X2ludCgmYSk7Ci0JCWNrX3ByX2ZlbmNlX3N0cmljdF9sb2FkKCk7Ci0JCWNrX3ByX2xvYWRfaW50
KCZiKTsKLQl9Ci0JZSA9IHJkdHNjKCk7Ci0JcHJpbnRmKCJbQV0gZmVuY2VfbG9hZDogJSIgUFJJ
dTY0ICJcbiIsIChlIC0gcykgLyBJUik7Ci0KLQlzID0gcmR0c2MoKTsKLQlmb3IgKGkgPSAwOyBp
IDwgSVI7IGkrKykgewotCQlpZiAoY2tfcHJfbG9hZF9pbnQoJmEpID09IDApCi0JCQlja19wcl9i
YXJyaWVyKCk7Ci0JCWNrX3ByX2ZlbmNlX3N0cmljdF9sb2NrKCk7Ci0JCWNrX3ByX2xvYWRfaW50
KCZiKTsKLQl9Ci0JZSA9IHJkdHNjKCk7Ci0JcHJpbnRmKCJbQV0gZmVuY2VfbG9jazogJSIgUFJJ
dTY0ICJcbiIsIChlIC0gcykgLyBJUik7Ci0KLQlzID0gcmR0c2MoKTsKLQlmb3IgKGkgPSAwOyBp
IDwgSVI7IGkrKykgewotCQlja19wcl9zdG9yZV9pbnQoJmEsIDApOwotCQlja19wcl9mZW5jZV9z
dHJpY3Rfc3RvcmUoKTsKLQkJY2tfcHJfc3RvcmVfaW50KCZiLCAwKTsKLQl9Ci0JZSA9IHJkdHNj
KCk7Ci0JcHJpbnRmKCJbQl0gZmVuY2Vfc3RvcmU6ICUiIFBSSXU2NCAiXG4iLCAoZSAtIHMpIC8g
SVIpOwotCi0JcyA9IHJkdHNjKCk7Ci0JZm9yIChpID0gMDsgaSA8IElSOyBpKyspIHsKLQkJY2tf
cHJfc3RvcmVfaW50KCZhLCAwKTsKLQkJY2tfcHJfZmVuY2Vfc3RyaWN0X21lbW9yeSgpOwotCQlj
a19wcl9sb2FkX2ludCgmYik7Ci0JfQotCWUgPSByZHRzYygpOwotCXByaW50ZigiW0NdIGZlbmNl
X21lbW9yeTogJSIgUFJJdTY0ICJcbiIsIChlIC0gcykgLyBJUik7Ci0KLQlzID0gcmR0c2MoKTsK
LQlmb3IgKGkgPSAwOyBpIDwgSVI7IGkrKykgewotCQlja19wcl9zdG9yZV9pbnQoJmEsIDApOwot
CQlja19wcl9mYWFfaW50KCZhLCAwKTsKLQkJY2tfcHJfbG9hZF9pbnQoJmIpOwotCX0KLQllID0g
cmR0c2MoKTsKLQlwcmludGYoIltDXSBhdG9taWM6ICUiIFBSSXU2NCAiXG4iLCAoZSAtIHMpIC8g
SVIpOwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvdmFsaWRhdGUvTWFrZWZpbGUgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wci92YWxpZGF0ZS9NYWtlZmls
ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU0YTgyZDE2NjIwZWNiOWJjYjUwOGE1
NzAyYjljNzQ3OTBkOTQxMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19w
ci92YWxpZGF0ZS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS5QSE9O
WTogY2hlY2sgY2xlYW4gZGlzdHJpYnV0aW9uCi0KLU9CSkVDVFM9Y2tfcHJfY2FzIGNrX3ByX2Zh
YSBja19wcl9pbmMgY2tfcHJfZGVjIGNrX3ByX2J0cyBcCi0JY2tfcHJfYnRyIGNrX3ByX2J0YyBj
a19wcl9sb2FkIGNrX3ByX3N0b3JlIAkgIFwKLQlja19wcl9hbmQgY2tfcHJfb3IgY2tfcHJfeG9y
IGNrX3ByX2FkZCBja19wcl9zdWIgIFwKLQlja19wcl9mYXMgY2tfcHJfYmluIGNrX3ByX2J0eCBj
a19wcl9mYXggY2tfcHJfbgkgIFwKLQlja19wcl91bmFyeQotCi1hbGw6ICQoT0JKRUNUUykKLQot
Y2hlY2s6IGFsbAotCWZvciBkIGluICQoT0JKRUNUUykgOyBkbyAgICAgICAgXAotCQllY2hvICQk
ZDsJCVwKLQkJLi8kJGQgfHwgZXhpdCAxOyAgICAgCVwKLQlkb25lOwotCi1ja19wcl9jYXM6IGNr
X3ByX2Nhcy5jCi0JJChDQykgJChDRkxBR1MpIC1vIGNrX3ByX2NhcyBja19wcl9jYXMuYwotCi1j
a19wcl9pbmM6IGNrX3ByX2luYy5jCi0JJChDQykgJChDRkxBR1MpIC1vIGNrX3ByX2luYyBja19w
cl9pbmMuYwotCi1ja19wcl9kZWM6IGNrX3ByX2RlYy5jCi0JJChDQykgJChDRkxBR1MpIC1vIGNr
X3ByX2RlYyBja19wcl9kZWMuYwotCi1ja19wcl9mYWE6IGNrX3ByX2ZhYS5jCi0JJChDQykgJChD
RkxBR1MpIC1vIGNrX3ByX2ZhYSBja19wcl9mYWEuYwotCi1ja19wcl9idGM6IGNrX3ByX2J0Yy5j
Ci0JJChDQykgJChDRkxBR1MpIC1vIGNrX3ByX2J0YyBja19wcl9idGMuYwotCi1ja19wcl9idHI6
IGNrX3ByX2J0ci5jCi0JJChDQykgJChDRkxBR1MpIC1vIGNrX3ByX2J0ciBja19wcl9idHIuYwot
Ci1ja19wcl9idHM6IGNrX3ByX2J0cy5jCi0JJChDQykgJChDRkxBR1MpIC1vIGNrX3ByX2J0cyBj
a19wcl9idHMuYwotCi1ja19wcl9sb2FkOiBja19wcl9sb2FkLmMKLQkkKENDKSAkKENGTEFHUykg
LW8gY2tfcHJfbG9hZCBja19wcl9sb2FkLmMKLQotY2tfcHJfc3RvcmU6IGNrX3ByX3N0b3JlLmMK
LQkkKENDKSAkKENGTEFHUykgLW8gY2tfcHJfc3RvcmUgY2tfcHJfc3RvcmUuYwotCi1ja19wcl9h
bmQ6IGNrX3ByX2FuZC5jCi0JJChDQykgJChDRkxBR1MpIC1vIGNrX3ByX2FuZCBja19wcl9hbmQu
YwotCi1ja19wcl9vcjogY2tfcHJfb3IuYwotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBja19wcl9vciBj
a19wcl9vci5jCi0KLWNrX3ByX3hvcjogY2tfcHJfeG9yLmMKLQkkKENDKSAkKENGTEFHUykgLW8g
Y2tfcHJfeG9yIGNrX3ByX3hvci5jCi0KLWNrX3ByX2FkZDogY2tfcHJfYWRkLmMKLQkkKENDKSAk
KENGTEFHUykgLW8gY2tfcHJfYWRkIGNrX3ByX2FkZC5jCi0KLWNrX3ByX3N1YjogY2tfcHJfc3Vi
LmMKLQkkKENDKSAkKENGTEFHUykgLW8gY2tfcHJfc3ViIGNrX3ByX3N1Yi5jCi0KLWNrX3ByX2Zh
czogY2tfcHJfZmFzLmMKLQkkKENDKSAkKENGTEFHUykgLW8gY2tfcHJfZmFzIGNrX3ByX2Zhcy5j
Ci0KLWNrX3RwOiBja190cC5jCi0JJChDQykgJChDRkxBR1MpIC1vIGNrX3RwIGNrX3RwLmMKLQot
Y2tfcHJfYmluOiBja19wcl9iaW4uYwotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBja19wcl9iaW4gY2tf
cHJfYmluLmMKLQotY2tfcHJfYnR4OiBja19wcl9idHguYwotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBj
a19wcl9idHggY2tfcHJfYnR4LmMKLQotY2tfcHJfZmF4OiBja19wcl9mYXguYwotCSQoQ0MpICQo
Q0ZMQUdTKSAtbyBja19wcl9mYXggY2tfcHJfZmF4LmMKLQotY2tfcHJfbjogY2tfcHJfbi5jCi0J
JChDQykgJChDRkxBR1MpIC1vIGNrX3ByX24gY2tfcHJfbi5jCi0KLWNrX3ByX3VuYXJ5OiBja19w
cl91bmFyeS5jCi0JJChDQykgJChDRkxBR1MpIC1vIGNrX3ByX3VuYXJ5IGNrX3ByX3VuYXJ5LmMK
LQotY2xlYW46Ci0Jcm0gLXJmICp+ICoubyAkKE9CSkVDVFMpICouZFNZTSAqLmV4ZQotCi1pbmNs
dWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxkCi1DRkxBR1MrPS1EX0dOVV9TT1VS
Q0UKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Np
b25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX2FkZC5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvdmFsaWRhdGUvY2tfcHJfYWRkLmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZjE4OTNlYzYxNzI2MmRlZjViNjM5ZjJlMmMxYjUwM2Jk
YzVmMTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvdmFsaWRhdGUv
Y2tfcHJfYWRkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAyMDA5IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlIDxzdGRp
by5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUg
PHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Y2tfcHIuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1v
bi5oIgotI2lmbmRlZiBSX1JFUEVBVAotI2RlZmluZSBSX1JFUEVBVCAyMDAwMDAKLSNlbmRpZgot
Ci0jZGVmaW5lIENLX1BSX0FERF9UKHcsIHYsIGQpCQkJCQkJCVwKLQl7CQkJCQkJCQkJXAotCQl1
aW50IyN3IyNfdCB0ID0gdjsJCQkJCQlcCi0JCWNrX3ByX2FkZF8jI3coJnQsIGQpOwkJCQkJCVwK
LQkJaWYgKHQgIT0gKHVpbnQjI3cjI190KSh2ICsgZCkpIHsJCQkJXAotCQkJcHJpbnRmKCJGQUlM
IFsiKTsJCQkJCVwKLQkJCXByaW50ZigiJSIgUFJJdSMjdyAiICglIiBQUkl1IyN3ICIpIC0+ICUi
IFBSSXUjI3cgIl1cbiIsXAotCQkJCQkodWludCMjdyMjX3QpdiwgZCwgdCk7CQkJXAotCQkJZXhp
dChFWElUX0ZBSUxVUkUpOwkJCQkJXAotCQl9CQkJCQkJCQlcCi0JfQotCi0jZGVmaW5lIENLX1BS
X0FERF9CKHcpCQkJCQkJCQlcCi0JewkJCQkJCQkJCVwKLQkJdW5zaWduZWQgaW50IF9fY2tfaSA9
IDA7CQkJCQlcCi0JCXByaW50ZigiY2tfcHJfYWRkXyIgI3cgIjogIik7CQkJCQlcCi0JCWlmICh3
IDwgMTApCQkJCQkJCVwKLQkJCXByaW50ZigiICIpOwkJCQkJCVwKLQkJZm9yIChfX2NrX2kgPSAw
OyBfX2NrX2kgPCBSX1JFUEVBVDsgX19ja19pKyspIHsJCQlcCi0JCQl1aW50IyN3IyNfdCBhID0g
Y29tbW9uX3JhbmQoKSAlICgodWludCMjdyMjX3QpLTEgLyAyKTsJXAotCQkJdWludCMjdyMjX3Qg
YiA9IGNvbW1vbl9yYW5kKCkgJSAoKHVpbnQjI3cjI190KS0xIC8gMik7CVwKLQkJCUNLX1BSX0FE
RF9UKHcsIGEsIGIpOwkJCQkJXAotCQl9CQkJCQkJCQlcCi0JCXJnX3dpZHRoKHcpOwkJCQkJCQlc
Ci0JCXByaW50ZigiICBTVUNDRVNTXG4iKTsJCQkJCQlcCi0JfQotCi0jZGVmaW5lIENLX1BSX0FE
RF9XKG0sIHcpCQkJCQkJCVwKLQl7CQkJCQkJCQkJXAotCQl1aW50IyNtIyNfdCB0ID0gLTEsIHIg
PSAtMSAmIH4odWludCMjbSMjX3QpKHVpbnQjI3cjI190KS0xOwlcCi0JCWNrX3ByX2FkZF8jI3co
KHVpbnQjI3cjI190ICopKHZvaWQgKikmdCwgMSk7CQkJXAotCQlpZiAodCAhPSByKSB7CQkJCQkJ
CVwKLQkJCXByaW50ZigiRkFJTCBbJSMiIFBSSXgjI20gIiAhPSAlIyIgUFJJeCMjbSAiXVxuIiwg
dCwgcik7XAotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwkJCQkJXAotCQl9CQkJCQkJCQlcCi0JCXQg
PSAwLCByID0gKHVpbnQjI20jI190KSh1aW50IyN3IyNfdCktMTsJCQlcCi0JCWNrX3ByX2FkZF8j
I3coKHVpbnQjI3cjI190ICopKHZvaWQgKikmdCwgLTEpOwkJCVwKLQkJaWYgKHQgIT0gcikgewkJ
CQkJCQlcCi0JCQlwcmludGYoIkZBSUwgWyUjIiBQUkl4IyNtICIgIT0gJSMiIFBSSXgjI20gIl1c
biIsIHQsIHIpO1wKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsJCQkJCVwKLQkJfQkJCQkJCQkJXAot
CX0KLQotc3RhdGljIHZvaWQKLXJnX3dpZHRoKGludCBtKQotewotCi0JLyogT3RoZXIgYXJjaGl0
ZWN0dXJlcyBhcmUgYmktZW5kaWFuLiAqLwotI2lmICFkZWZpbmVkKF9feDg2X18pICYmICFkZWZp
bmVkKF9feDg2XzY0X18pCi0JcmV0dXJuOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX1BSX0FERF82
NAotCWlmIChtID09IDY0KSB7Ci0jaWYgZGVmaW5lZChDS19GX1BSX0FERF8zMikKLQkJQ0tfUFJf
QUREX1coNjQsIDMyKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ0tfUFJfQUREXzE2KQotCQlDS19Q
Ul9BRERfVyg2NCwgMTYpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDS19QUl9BRERfOCkKLQkJQ0tf
UFJfQUREX1coNjQsIDgpOwotI2VuZGlmCi0JfQotI2VuZGlmIC8qIENLX1BSX0FERF82NCAqLwot
Ci0jaWZkZWYgQ0tfRl9QUl9BRERfMzIKLQlpZiAobSA9PSAzMikgewotI2lmIGRlZmluZWQoQ0tf
Rl9QUl9BRERfMTYpCi0JCUNLX1BSX0FERF9XKDMyLCAxNik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVk
KENLX1BSX0FERF84KQotCQlDS19QUl9BRERfVygzMiwgOCk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYg
LyogQ0tfUFJfQUREXzMyICovCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfQUREXzE2KSAmJiBkZWZp
bmVkKENLX1BSX0FERF84KQotCWlmIChtID09IDE2KSB7Ci0JCUNLX1BSX0FERF9XKDE2LCA4KTsK
LQl9Ci0jZW5kaWYgLyogQ0tfUFJfQUREXzE2ICYmIENLX1BSX0FERF84ICovCi0KLQlyZXR1cm47
Ci19Ci0KLWludAotbWFpbih2b2lkKQotewotCi0JY29tbW9uX3NyYW5kKCh1bnNpZ25lZCBpbnQp
Z2V0cGlkKCkpOwotCi0jaWZkZWYgQ0tfRl9QUl9BRERfNjQKLQlDS19QUl9BRERfQig2NCk7Ci0j
ZW5kaWYKLQotI2lmZGVmIENLX0ZfUFJfQUREXzMyCi0JQ0tfUFJfQUREX0IoMzIpOwotI2VuZGlm
Ci0KLSNpZmRlZiBDS19GX1BSX0FERF8xNgotCUNLX1BSX0FERF9CKDE2KTsKLSNlbmRpZgotCi0j
aWZkZWYgQ0tfRl9QUl9BRERfOAotCUNLX1BSX0FERF9CKDgpOwotI2VuZGlmCi0KLQlyZXR1cm4g
KDApOwotfQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9y
ZWdyZXNzaW9ucy9ja19wci92YWxpZGF0ZS9ja19wcl9hbmQuYyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX2FuZC5jCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzU2OWJiZDExMDVkM2IwYmU5NDg5NWU1YmMz
ZTZlN2E1ZjVkNGNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3Zh
bGlkYXRlL2NrX3ByX2FuZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgMjAwOSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0g
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVk
ZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNp
bmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGNrX3ByLmg+Ci0KLSNpbmNsdWRlICIuLi8u
Li9jb21tb24uaCIKLSNpZm5kZWYgUl9SRVBFQVQKLSNkZWZpbmUgUl9SRVBFQVQgMjAwMDAwCi0j
ZW5kaWYKLQotI2RlZmluZSBCTShtLCB3KSAoKHVpbnQjI20jI190KS0xIDw8ICh3KSkKLQotI2Rl
ZmluZSBDS19QUl9BTkRfVCh3LCB2LCBkKQkJCQkJCQlcCi0JewkJCQkJCQkJCVwKLQkJdWludCMj
dyMjX3QgdCA9IHY7CQkJCQkJXAotCQlja19wcl9hbmRfIyN3KCZ0LCBkKTsJCQkJCQlcCi0JCWlm
ICh0ICE9ICh1aW50IyN3IyNfdCkodiAmIGQpKSB7CQkJCVwKLQkJCXByaW50ZigiRkFJTCBbIik7
CQkJCQlcCi0JCQlwcmludGYoIiUiIFBSSXUjI3cgIiAoJSIgUFJJdSMjdyAiKSAtPiAlIiBQUkl1
IyN3ICJdXG4iLFwKLQkJCQkJKHVpbnQjI3cjI190KXYsIGQsIHQpOwkJCVwKLQkJCWV4aXQoRVhJ
VF9GQUlMVVJFKTsJCQkJCVwKLQkJfQkJCQkJCQkJXAotCX0KLQotI2RlZmluZSBDS19QUl9BTkRf
Qih3KQkJCQkJCVwKLQl7CQkJCQkJCVwKLQkJdW5zaWduZWQgaW50IF9fY2tfaSA9IDA7CQkJXAot
CQlwcmludGYoImNrX3ByX2FuZF8iICN3ICI6ICIpOwkJCVwKLQkJaWYgKHcgPCAxMCkJCQkJCVwK
LQkJCXByaW50ZigiICIpOwkJCQlcCi0JCWZvciAoX19ja19pID0gMDsgX19ja19pIDwgUl9SRVBF
QVQ7IF9fY2tfaSsrKSB7CVwKLQkJCXVpbnQjI3cjI190IGEgPSAodWludCMjdyMjX3QpY29tbW9u
X3JhbmQoKTsJXAotCQkJdWludCMjdyMjX3QgYiA9ICh1aW50IyN3IyNfdCljb21tb25fcmFuZCgp
OwlcCi0JCQlDS19QUl9BTkRfVCh3LCBhLCBiKTsJCQlcCi0JCX0JCQkJCQlcCi0JCXJnX3dpZHRo
KHcpOwkJCQkJXAotCQlwcmludGYoIiAgU1VDQ0VTU1xuIik7CQkJCVwKLQl9Ci0KLSNkZWZpbmUg
Q0tfUFJfQU5EX1cobSwgdykJCQkJCQkJCQlcCi0JewkJCQkJCQkJCQkJXAotCQl1aW50IyNtIyNf
dCB0ID0gLTE7CQkJCQkJCQlcCi0JCWNrX3ByX2FuZF8jI3coKHVpbnQjI3cjI190ICopKHZvaWQg
KikmdCwgMCk7CQkJCQlcCi0JCWlmICh0ICE9IEJNKG0sIHcpKSB7CQkJCQkJCQlcCi0JCQlwcmlu
dGYoIiAgRkFJTCBbJSMiIFBSSXgjI20gIiAhPSAlIyIgUFJJeCMjbSAiXVxuIiwgdCwgQk0obSwg
dykpOwlcCi0JCQlleGl0KEVYSVRfRkFJTFVSRSk7CQkJCQkJCVwKLQkJfQkJCQkJCQkJCQlcCi0J
fQotCi1zdGF0aWMgdm9pZAotcmdfd2lkdGgoaW50IG0pCi17Ci0KLQkvKiBPdGhlciBhcmNoaXRl
Y3R1cmVzIGFyZSBiaS1lbmRpYW4uICovCi0jaWYgIWRlZmluZWQoX194ODZfXykgJiYgIWRlZmlu
ZWQoX194ODZfNjRfXykKLQlyZXR1cm47Ci0jZW5kaWYKLQotI2lmZGVmIENLX0ZfUFJfQU5EXzY0
Ci0JaWYgKG0gPT0gNjQpIHsKLSNpZiBkZWZpbmVkKENLX0ZfUFJfQU5EXzMyKQotCQlDS19QUl9B
TkRfVyg2NCwgMzIpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDS19QUl9BTkRfMTYpCi0JCUNLX1BS
X0FORF9XKDY0LCAxNik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENLX1BSX0FORF84KQotCQlDS19Q
Ul9BTkRfVyg2NCwgOCk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYgLyogQ0tfUFJfQU5EXzY0ICovCi0K
LSNpZmRlZiBDS19GX1BSX0FORF8zMgotCWlmIChtID09IDMyKSB7Ci0jaWYgZGVmaW5lZChDS19G
X1BSX0FORF8xNikKLQkJQ0tfUFJfQU5EX1coMzIsIDE2KTsKLSNlbmRpZgotI2lmIGRlZmluZWQo
Q0tfUFJfQU5EXzgpCi0JCUNLX1BSX0FORF9XKDMyLCA4KTsKLSNlbmRpZgotCX0KLSNlbmRpZiAv
KiBDS19QUl9BTkRfMzIgKi8KLQotI2lmIGRlZmluZWQoQ0tfRl9QUl9BTkRfMTYpICYmIGRlZmlu
ZWQoQ0tfUFJfQU5EXzgpCi0JaWYgKG0gPT0gMTYpIHsKLQkJQ0tfUFJfQU5EX1coMTYsIDgpOwot
CX0KLSNlbmRpZiAvKiBDS19QUl9BTkRfMTYgJiYgQ0tfUFJfQU5EXzggKi8KLQotCXJldHVybjsK
LX0KLQotaW50Ci1tYWluKHZvaWQpCi17Ci0KLQljb21tb25fc3JhbmQoKHVuc2lnbmVkIGludCln
ZXRwaWQoKSk7Ci0KLSNpZmRlZiBDS19GX1BSX0FORF82NAotCUNLX1BSX0FORF9CKDY0KTsKLSNl
bmRpZgotCi0jaWZkZWYgQ0tfRl9QUl9BTkRfMzIKLQlDS19QUl9BTkRfQigzMik7Ci0jZW5kaWYK
LQotI2lmZGVmIENLX0ZfUFJfQU5EXzE2Ci0JQ0tfUFJfQU5EX0IoMTYpOwotI2VuZGlmCi0KLSNp
ZmRlZiBDS19GX1BSX0FORF84Ci0JQ0tfUFJfQU5EX0IoOCk7Ci0jZW5kaWYKLQotCXJldHVybiAo
MCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3Jl
Z3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX2Jpbi5jIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvdmFsaWRhdGUvY2tfcHJfYmluLmMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxODY4ZjRlNjRhYTY2OWMyMWU0Yzg0ZjNkM2Qz
N2Q5M2Q2NzA4ZDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvdmFs
aWRhdGUvY2tfcHJfYmluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IDIwMTEgRGF2aWQgSm9zZXBoLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5E
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxp
Yi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0j
ZGVmaW5lIFJFUEVBVCAyMDAwMDAwCi0KLSNkZWZpbmUgVEVTVF9CSU5BUlkoSywgUywgVCwgUCwg
RCkJCQkJCVwKLQlzdGF0aWMgdm9pZAkJCQkJCQlcCi0JcnVuX3Rlc3RfIyNLIyNfIyNTKHZvaWQp
CQkJCQlcCi0JewkJCQkJCQkJXAotCQlpbnQgaSwgcjsJCQkJCQlcCi0JCVQgc2VyaWFsX3Jlc3Vs
dCA9IDY1NTM1OwkJCQlcCi0JCVQgY2tfcmVzdWx0ID0gNjU1MzU7CQkJCQlcCi0JCQkJCQkJCQlc
Ci0JCXB1dHMoIioqKlRFU1RJTkcgY2tfcHJfIiAjSyAiXyIgI1MgIioqKiIpOwkJXAotCQljb21t
b25fc3JhbmQoKHVuc2lnbmVkIGludClnZXRwaWQoKSk7CQkJXAotCQlmb3IgKGkgPSAwOyBpIDwg
UkVQRUFUOyArK2kpIHsJCQkJXAotCQkJciA9IGNvbW1vbl9yYW5kKCk7CQkJCQlcCi0JCQlzZXJp
YWxfcmVzdWx0ID0gc2VyaWFsX3Jlc3VsdCBQIHI7CQlcCi0JCQlja19wcl8jI0sjI18jI1MoJmNr
X3Jlc3VsdCwgcik7CQkJXAotCQl9CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQkJcHJpbnRmKCJWYWx1
ZSBvZiBvcGVyYXRpb24gIiAjSyAiIG9uIDIwMDAwMDAgIgkJXAotCQkJInJhbmRvbSBudW1iZXJz
XG5cdHVzaW5nICIgI1AgIjogJSIgI0QgIixcbiIJXAotCQkJIlx0dXNpbmcgY2tfcHJfIiNLIl8i
I1MiOiAlIiAjRCAiXG4iLAkJXAotCQkJCSBzZXJpYWxfcmVzdWx0LCBja19yZXN1bHQpOwkJXAot
CQkoc2VyaWFsX3Jlc3VsdCA9PSBja19yZXN1bHQpID8gcHV0cygiU1VDQ0VTUy4iKQkJXAotCQkJ
CQkgICAgIDogcHV0cygiRkFJTFVSRS4iKTsJXAotCQkJCQkJCQkJXAotCQlyZXR1cm47CQkJCQkJ
CVwKLQl9CQkJCQkJCQlcCi0KLSNkZWZpbmUgR0VORVJBVEVfVEVTVChLLCBQKQkJCQlcCi0JVEVT
VF9CSU5BUlkoSywgaW50LCBpbnQsIFAsIGQpCQkJXAotCVRFU1RfQklOQVJZKEssIHVpbnQsIHVu
c2lnbmVkIGludCwgUCwgdSkJXAotCXN0YXRpYyB2b2lkCQkJCQlcCi0JcnVuX3Rlc3RfIyNLKHZv
aWQpCQkJCVwKLQl7CQkJCQkJXAotCQlydW5fdGVzdF8jI0sjI19pbnQoKTsJCQlcCi0JCXJ1bl90
ZXN0XyMjSyMjX3VpbnQoKTsJCQlcCi0JCQkJCQkJXAotCQlyZXR1cm47CQkJCQlcCi0JfQotCi1H
RU5FUkFURV9URVNUKGFkZCwgKykKLUdFTkVSQVRFX1RFU1Qoc3ViLCAtKQotR0VORVJBVEVfVEVT
VChhbmQsICYpCi1HRU5FUkFURV9URVNUKG9yLCB8KQotR0VORVJBVEVfVEVTVCh4b3IsIF4pCi0K
LSN1bmRlZiBHRU5FUkFURV9URVNUCi0jdW5kZWYgVEVTVF9CSU5BUlkKLQotaW50Ci1tYWluKHZv
aWQpCi17Ci0JcnVuX3Rlc3RfYWRkKCk7Ci0JcnVuX3Rlc3Rfc3ViKCk7Ci0JcnVuX3Rlc3RfYW5k
KCk7Ci0JcnVuX3Rlc3Rfb3IoKTsKLQlydW5fdGVzdF94b3IoKTsKLQotCXJldHVybiAoMCk7Ci19
Ci0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVz
c2lvbnMvY2tfcHIvdmFsaWRhdGUvY2tfcHJfYnRjLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wci92YWxpZGF0ZS9ja19wcl9idGMuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVkZWM5OGIwMDNjOGU1ZjUzZDZiODE3MGRjY2RmYjhm
ODRkOGMyNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wci92YWxpZGF0
ZS9ja19wcl9idGMuYworKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgMjAwOSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8c3Rk
aW8uaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRl
IDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGNrX3ByLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21t
b24uaCIKLSNpZm5kZWYgUl9SRVBFQVQKLSNkZWZpbmUgUl9SRVBFQVQgMjAwMDAwCi0jZW5kaWYK
LQotLyoKLSAqIEJpdCBzZWxlY3Rvci4KLSAqLwotI2RlZmluZSBCTSh2LCBiKSAoKCh2KSA+PiAo
YikpICYgMSkKLQotI2RlZmluZSBDS19QUl9CVENfVCh3LCB2KQkJCQkJCQlcCi0JewkJCQkJCQkJ
CVwKLQkJdW5zaWduZWQgaW50IGo7CQkJCQkJCVwKLQkJdWludCMjdyMjX3QgciA9IHY7CQkJCQkJ
XAotCQlib29sIHQ7CQkJCQkJCQlcCi0JCWZvciAoaiA9IDA7IGogPCAodyk7IGorKykgewkJCQkJ
XAotCQkJdCA9IGNrX3ByX2J0Y18jI3coJnIsIGopOwkJCQlcCi0JCQlpZiAoKHQgJiYgIUJNKHYs
IGopKSB8fCAoKEJNKHYsIGopICsgQk0ociwgaikpICE9IDEpKSB7CVwKLQkJCQlwcmludGYoIkZB
SUwgWyUiIFBSSXgjI3cgIjoldV1cbiIsIHIsIGopOwlcCi0JCQkJZXhpdChFWElUX0ZBSUxVUkUp
OwkJCQlcCi0JCQl9CQkJCQkJCVwKLQkJfQkJCQkJCQkJXAotCX0KLQotI2RlZmluZSBDS19QUl9C
VENfQih3KQkJCQkJXAotCXsJCQkJCQlcCi0JCXVpbnQjI3cjI190IG87CQkJCVwKLQkJdW5zaWdu
ZWQgaW50IGk7CQkJCVwKLQkJcHJpbnRmKCJja19wcl9idGNfIiAjdyAiOiAiKTsJCVwKLQkJZm9y
IChpID0gMDsgaSA8IFJfUkVQRUFUOyBpKyspIHsJXAotCQkJbyA9ICh1aW50IyN3IyNfdCljb21t
b25fcmFuZCgpOwlcCi0JCQlDS19QUl9CVENfVCh3LCBvKTsJCVwKLQkJfQkJCQkJXAotCQlwcmlu
dGYoIiAgU1VDQ0VTU1xuIik7CQkJXAotCX0KLQotaW50Ci1tYWluKHZvaWQpCi17Ci0KLQljb21t
b25fc3JhbmQoKHVuc2lnbmVkIGludClnZXRwaWQoKSk7Ci0KLSNpZmRlZiBDS19GX1BSX0JUQ182
NAotCUNLX1BSX0JUQ19CKDY0KTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9QUl9CVENfMzIKLQlD
S19QUl9CVENfQigzMik7Ci0jZW5kaWYKLQotI2lmZGVmIENLX0ZfUFJfQlRDXzE2Ci0JQ0tfUFJf
QlRDX0IoMTYpOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX1BSX0JUQ184Ci0JQ0tfUFJfQlRDX0Io
OCk7Ci0jZW5kaWYKLQotCXJldHVybiAoMCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX2J0
ci5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIv
dmFsaWRhdGUvY2tfcHJfYnRyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYWJi
MzAyYzcyN2MwMTk3MmQzY2JmMDBmOTFjOWZmMDdiYzA0YzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Y2svcmVncmVzc2lvbnMvY2tfcHIvdmFsaWRhdGUvY2tfcHJfYnRyLmMKKysrIC9kZXYvbnVsbApA
QCAtMSw5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDkgU2FteSBBbCBCYWhyYS4KLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0g
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVk
ZSA8c3RkYm9vbC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0j
aW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxja19w
ci5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0jaWZuZGVmIFJfUkVQRUFUCi0jZGVm
aW5lIFJfUkVQRUFUIDIwMDAwMAotI2VuZGlmCi0KLS8qCi0gKiBCaXQgc2VsZWN0b3IuCi0gKi8K
LSNkZWZpbmUgQk0odiwgYikgKCgodikgPj4gKGIpKSAmIDEpCi0KLSNkZWZpbmUgQ0tfUFJfQlRS
X1QodywgdikJCQkJCQkJCQkJXAotCXsJCQkJCQkJCQkJCQlcCi0JCXVuc2lnbmVkIGludCBqOwkJ
CQkJCQkJCQlcCi0JCXVpbnQjI3cjI190IHIgPSB2LCBjID0gdjsJCQkJCQkJCVwKLQkJYm9vbCB0
OwkJCQkJCQkJCQkJXAotCQlmb3IgKGogPSAwOyBqIDwgKHcpOyBqKyspIHsJCQkJCQkJCVwKLQkJ
CWMgJj0gKHVpbnQjI3cjI190KS0xIF4gKDEgPDwgaik7CQkJCQkJXAotCQkJdCA9IGNrX3ByX2J0
cl8jI3coJnIsIGopOwkJCQkJCQlcCi0JCQlpZiAoKHQgJiYgIUJNKHYsIGopKSB8fCAociAhPSBj
KSkgewkJCQkJCVwKLQkJCQlwcmludGYoIkZBSUwgWyUiIFBSSXgjI3cgIjoldSAhPSAlIiBQUkl4
IyN3ICI6JXVdXG4iLCByLCBqLCBjLCBqKTsJXAotCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsJCQkJ
CQkJXAotCQkJfQkJCQkJCQkJCQlcCi0JCX0JCQkJCQkJCQkJCVwKLQl9Ci0KLSNkZWZpbmUgQ0tf
UFJfQlRSX0IodykJCQkJCVwKLQl7CQkJCQkJXAotCQl1aW50IyN3IyNfdCBvOwkJCQlcCi0JCXVu
c2lnbmVkIGludCBpOwkJCQlcCi0JCXByaW50ZigiY2tfcHJfYnRyXyIgI3cgIjogIik7CQlcCi0J
CWZvciAoaSA9IDA7IGkgPCBSX1JFUEVBVDsgaSsrKSB7CVwKLQkJCW8gPSAodWludCMjdyMjX3Qp
Y29tbW9uX3JhbmQoKTsJXAotCQkJQ0tfUFJfQlRSX1Qodywgbyk7CQlcCi0JCX0JCQkJCVwKLQkJ
cHJpbnRmKCIgIFNVQ0NFU1NcbiIpOwkJCVwKLQl9Ci0KLWludAotbWFpbih2b2lkKQotewotCi0J
Y29tbW9uX3NyYW5kKCh1bnNpZ25lZCBpbnQpZ2V0cGlkKCkpOwotCi0jaWZkZWYgQ0tfRl9QUl9C
VFJfNjQKLQlDS19QUl9CVFJfQig2NCk7Ci0jZW5kaWYKLQotI2lmZGVmIENLX0ZfUFJfQlRSXzMy
Ci0JQ0tfUFJfQlRSX0IoMzIpOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX1BSX0JUUl8xNgotCUNL
X1BSX0JUUl9CKDE2KTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9QUl9CVFJfOAotCUNLX1BSX0JU
Ul9CKDgpOwotI2VuZGlmCi0KLQlyZXR1cm4gKDApOwotfQotCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wci92YWxpZGF0ZS9ja19w
cl9idHMuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X3ByL3ZhbGlkYXRlL2NrX3ByX2J0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
ZTYyMTY1MWE3NzhmZjFkM2U4ZGIzN2UwM2UxY2I3MDA2ZmJiYzE5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX2J0cy5jCisrKyAvZGV2L251
bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5IFNhbXkgQWwgQmFocmEu
Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
LSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
Ci0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2lu
Y2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGludC5o
PgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8
Y2tfcHIuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotI2lmbmRlZiBSX1JFUEVBVAot
I2RlZmluZSBSX1JFUEVBVCAyMDAwMDAKLSNlbmRpZgotCi0vKgotICogQml0IHNlbGVjdG9yLgot
ICovCi0jZGVmaW5lIEJNKHYsIGIpICgoKHYpID4+IChiKSkgJiAxKQotCi0jZGVmaW5lIENLX1BS
X0JUU19UKHcsIHYpCQkJCQkJCQkJCVwKLQl7CQkJCQkJCQkJCQkJXAotCQl1bnNpZ25lZCBpbnQg
ajsJCQkJCQkJCQkJXAotCQl1aW50IyN3IyNfdCByID0gdiwgYyA9IHY7CQkJCQkJCQlcCi0JCWJv
b2wgdDsJCQkJCQkJCQkJCVwKLQkJZm9yIChqID0gMDsgaiA8ICh3KTsgaisrKSB7CQkJCQkJCQlc
Ci0JCQljIHw9ICh1aW50IyN3IyNfdCkxIDw8IGo7CQkJCQkJCVwKLQkJCXQgPSBja19wcl9idHNf
IyN3KCZyLCBqKTsJCQkJCQkJXAotCQkJaWYgKCh0ICYmICFCTSh2LCBqKSkgfHwgKHIgIT0gYykp
IHsJCQkJCQlcCi0JCQkJcHJpbnRmKCJGQUlMIFslIiBQUkl4IyN3ICI6JXUgIT0gJSIgUFJJeCMj
dyAiOiV1XVxuIiwgciwgaiwgYywgaik7CVwKLQkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CQkJCQkJ
CVwKLQkJCX0JCQkJCQkJCQkJXAotCQl9CQkJCQkJCQkJCQlcCi0JfQotCi0jZGVmaW5lIENLX1BS
X0JUU19CKHcpCQkJCQlcCi0JewkJCQkJCVwKLQkJdWludCMjdyMjX3QgbzsJCQkJXAotCQl1bnNp
Z25lZCBpbnQgaTsJCQkJXAotCQlwcmludGYoImNrX3ByX2J0c18iICN3ICI6ICIpOwkJXAotCQlm
b3IgKGkgPSAwOyBpIDwgUl9SRVBFQVQ7IGkrKykgewlcCi0JCQlvID0gKHVpbnQjI3cjI190KWNv
bW1vbl9yYW5kKCk7CVwKLQkJCUNLX1BSX0JUU19UKHcsIG8pOwkJXAotCQl9CQkJCQlcCi0JCXBy
aW50ZigiICBTVUNDRVNTXG4iKTsJCQlcCi0JfQotCi1pbnQKLW1haW4odm9pZCkKLXsKLQotCWNv
bW1vbl9zcmFuZCgodW5zaWduZWQgaW50KWdldHBpZCgpKTsKLQotI2lmZGVmIENLX0ZfUFJfQlRT
XzY0Ci0JQ0tfUFJfQlRTX0IoNjQpOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX1BSX0JUU18zMgot
CUNLX1BSX0JUU19CKDMyKTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9QUl9CVFNfMTYKLQlDS19Q
Ul9CVFNfQigxNik7Ci0jZW5kaWYKLQotI2lmZGVmIENLX0ZfUFJfQlRTXzgKLQlDS19QUl9CVFNf
Qig4KTsKLSNlbmRpZgotCi0JcmV0dXJuICgwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvdmFsaWRhdGUvY2tfcHJf
YnR4LmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19w
ci92YWxpZGF0ZS9ja19wcl9idHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJi
Mzk2NGU5N2UyZTc5MjllNDkzM2Y4ZWE4ZDlhZjU4MjU1NzRjZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19wci92YWxpZGF0ZS9ja19wcl9idHguYworKysgL2Rldi9udWxs
CkBAIC0xLDExMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEgRGF2aWQgSm9zZXBoLgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0g
KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQot
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK
LSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRl
IDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0j
aW5jbHVkZSA8Y2tfcHIuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotI2RlZmluZSBS
RVBFQVQgMjAwMDAwMAotCi0jZGVmaW5lIFRFU1RfQlRYKEssIFMsIE0sIFQsIEwsIFAsIEQsIFIp
CQkJCQkJXAotCXN0YXRpYyBib29sCQkJCQkJCQkJXAotCXRlc3RfIyNLIyNfIyNTKE0gKnRhcmdl
dCwgaW50IG9mZnNldCkJCQkJCQlcCi0JewkJCQkJCQkJCQlcCi0JCVQgcHJldmlvdXM7CQkJCQkJ
CQlcCi0JCWNvbnN0IEwgY2hhbmdlID0gUiAoMHgwMSA8PCBvZmZzZXQpOwkJCQkJXAotCQkJCQkJ
CQkJCQlcCi0JCXByZXZpb3VzID0gKFQpKnRhcmdldDsJCQkJCQkJXAotCQkqdGFyZ2V0ID0gcHJl
dmlvdXMgUCBjaGFuZ2U7CQkJCQkJXAotCQlyZXR1cm4gKChwcmV2aW91cyA+PiBvZmZzZXQpICYg
MHgwMSk7CQkJCQlcCi0JfQkJCQkJCQkJCQlcCi0Jc3RhdGljIHZvaWQJCQkJCQkJCQlcCi0JcnVu
X3Rlc3RfIyNLIyNfIyNTKHZvaWQpCQkJCQkJCVwKLQl7CQkJCQkJCQkJCVwKLQkJaW50IGksIG9m
ZnNldCwgbTsJCQkJCQkJXAotCQlib29sIHNlcmlhbF90LCBja19wcl90OwkJCQkJCQlcCi0JCVQg
eCA9IDY1NTM1LCB5ID0gNjU1MzU7CQkJCQkJCVwKLQkJCQkJCQkJCQkJXAotCQljb21tb25fc3Jh
bmQoKHVuc2lnbmVkIGludClnZXRwaWQoKSk7CQkJCQlcCi0JCW0gPSBzaXplb2YoVCkgKiA4OwkJ
CQkJCQlcCi0JCQkJCQkJCQkJCVwKLQkJcHV0cygiKioqVEVTVElORyBja19wcl8iI0siXyIjUyIq
KioiKTsJCQkJCVwKLQkJZm9yIChpID0gMDsgaSA8IFJFUEVBVDsgKytpKSB7CQkJCQkJXAotCQkJ
b2Zmc2V0ID0gY29tbW9uX3JhbmQoKSAlIG07CQkJCQkJXAotCQkJc2VyaWFsX3QgPSB0ZXN0XyMj
SyMjXyMjUygmeCwgb2Zmc2V0KTsJCQkJXAotCQkJY2tfcHJfdCA9IGNrX3ByXyMjSyMjXyMjUygm
eSwgb2Zmc2V0KTsJCQkJXAotCQkJCQkJCQkJCQlcCi0JCQlpZiAoc2VyaWFsX3QgIT0gY2tfcHJf
dCB8fCB4ICE9IHkgKSB7CQkJCVwKLQkJCQlwcmludGYoIlNlcmlhbCglIiNEIikgYW5kIGNrX3By
KCUiI0QiKSIJCQlcCi0JCQkJCSNLIl8iI1MgIiBkbyBub3QgbWF0Y2guXG4iCQkJXAotCQkJCQki
RkFJTFVSRS5cbiIsIAkJCQkJXAotCQkJCQlzZXJpYWxfdCwgY2tfcHJfdCk7CQkJCVwKLQkJCQkJ
CQkJCQkJXAotCQkJCXJldHVybjsJCQkJCQkJXAotCQkJfQkJCQkJCQkJXAotCQl9CQkJCQkJCQkJ
XAotCQlwcmludGYoIlx0c2VyaWFsXyIjSyJfIiNTIjogJSIjRCJcbiIJCQkJCVwKLQkJCSJcdGNr
X3ByXyIjSyJfIiNTIjogJSIjRCJcbiIJCQkJCVwKLQkJCSJTVUNDRVNTLlxuIiwJCQkJCQkJXAot
CQkJeCwgeSk7CQkJCQkJCQlcCi0JCQkJCQkJCQkJCVwKLQkJcmV0dXJuOwkJCQkJCQkJCVwKLQl9
Ci0KLSNkZWZpbmUgVEVTVF9CVFhfUyhLLCBTLCBULCBQLCBELCBSKSBURVNUX0JUWChLLCBTLCBU
LCBULCBULCBQLCBELCBSKQotCi0jZGVmaW5lIEdFTkVSQVRFX1RFU1QoSywgUCwgUikJCQkJXAot
CVRFU1RfQlRYX1MoSywgaW50LCBpbnQsIFAsIGQsIFIpCQlcCi0JVEVTVF9CVFhfUyhLLCB1aW50
LCB1bnNpZ25lZCBpbnQsIFAsIHUsIFIpCVwKLQlzdGF0aWMgdm9pZAkJCQkJXAotCXJ1bl90ZXN0
XyMjSyh2b2lkKQkJCQlcCi0JewkJCQkJCVwKLQkJcnVuX3Rlc3RfIyNLIyNfaW50KCk7CQkJXAot
CQlydW5fdGVzdF8jI0sjI191aW50KCk7CQkJXAotCQkJCQkJCVwKLQkJcmV0dXJuOwkJCQkJXAot
CX0KLQotR0VORVJBVEVfVEVTVChidGMsIF4sIDArKQotR0VORVJBVEVfVEVTVChidHIsICYsIH4p
Ci1HRU5FUkFURV9URVNUKGJ0cywgfCwgMCspCi0KLSN1bmRlZiBHRU5FUkFURV9URVNUCi0jdW5k
ZWYgVEVTVF9CVFhfUwotI3VuZGVmIFRFU1RfQlRYCi0KLWludAotbWFpbih2b2lkKQotewotCXJ1
bl90ZXN0X2J0YygpOwotCXJ1bl90ZXN0X2J0cigpOwotCXJ1bl90ZXN0X2J0cygpOwotCi0JcmV0
dXJuICgwKTsKLX0KLQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19wci92YWxpZGF0ZS9ja19wcl9jYXMuYyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX2Nh
cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzJkMWU1OGM0Y2RjYTFkMTMyNDYy
YWI3NDU0MDZkNGVhOGJjOGY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X3ByL3ZhbGlkYXRlL2NrX3ByX2Nhcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgMjAwOSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0j
aW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIu
aD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGNrX3ByLmg+Ci0KLSNpbmNsdWRl
ICIuLi8uLi9jb21tb24uaCIKLSNpZm5kZWYgUl9SRVBFQVQKLSNkZWZpbmUgUl9SRVBFQVQgMjAw
MDAwCi0jZW5kaWYKLQotI2RlZmluZSBXKHcsIHgpICh1aW50IyN3IyNfdCkoKHgpICYgKHVpbnQj
I3cjI190KX4wKQotCi0jZGVmaW5lIENLX1BSX0NBU19UKHcsIHYsIGMsIHMpIAkJCQkJCQkJCQlc
Ci0JCXsJCQkJCQkJCQkJCQlcCi0JCQl1aW50IyN3IyNfdCB0ID0gdjsJCQkJCQkJCQlcCi0JCQli
b29sIHI7CQkJCQkJCQkJCQlcCi0JCQlyID0gY2tfcHJfY2FzXyMjdygmdCwgYywgcyk7CQkJCQkJ
CQlcCi0JCQlpZiAoKChjID09IHYpICYmIChyID09IGZhbHNlKSkgfHwgKChjICE9IHYpICYmIChy
ID09IHRydWUpKSB8fAkJCQlcCi0JCQkJCSgociA9PSB0cnVlKSAmJiAoVyh3LCBzKSAhPSB0KSkp
IHsJCQkJCVwKLQkJCQlwcmludGYoIkZBSUwgWyIpOwkJCQkJCQkJXAotCQkJCXByaW50ZigiJSIg
UFJJdSMjdyAiICglIiBQUkl1IyN3ICIgLT4gJSIgUFJJdSMjdyAiKSIJCQkJXAotCQkJCQkiIC0+
ICUiIFBSSXUjI3cgIl1cbiIsCQkJCQkJCVwKLQkJCQkJCSh1aW50IyN3IyNfdCkodiksICh1aW50
IyN3IyNfdCkoYyksIFcodywgcyksICh1aW50IyN3IyNfdCkodCkpOwlcCi0JCQl9CQkJCQkJCQkJ
CQlcCi0JCX0KLQotI2RlZmluZSBDS19QUl9DQVNfQih3KQkJCQkJCQlcCi0JewkJCQkJCQkJXAot
CQl1bnNpZ25lZCBpbnQgX19ja19pOwkJCQkJXAotCQlwcmludGYoImNrX3ByX2Nhc18iICN3ICI6
ICIpOwkJCQlcCi0JCWlmICh3IDwgMTApCQkJCQkJXAotCQkJcHJpbnRmKCIgIik7CQkJCQlcCi0J
CWZvciAoX19ja19pID0gMDsgX19ja19pIDwgUl9SRVBFQVQ7IF9fY2tfaSsrKSB7CQlcCi0JCQl1
aW50IyN3IyNfdCBhID0gY29tbW9uX3JhbmQoKSAlICh1aW50IyN3IyNfdCktMTsJXAotCQkJQ0tf
UFJfQ0FTX1QodywgYSwgYSArIDEsIChhIC0gMSkpOwkJXAotCQkJQ0tfUFJfQ0FTX1QodywgYSwg
YSwgKGEgLSAxKSk7CQkJXAotCQkJQ0tfUFJfQ0FTX1QodywgYSwgYSArIDEsIGEpOwkJCVwKLQkJ
fQkJCQkJCQlcCi0JCXJnX3dpZHRoKHcpOwkJCQkJCVwKLQkJcHJpbnRmKCIgIFNVQ0NFU1NcbiIp
OwkJCQkJXAotCX0KLQotI2RlZmluZSBDS19QUl9DQVNfVyhtLCB3KQkJCQkJCQlcCi0JewkJCQkJ
CQkJCVwKLQkJdWludCMjbSMjX3QgdCA9IC0xLCByID0gLTEgJiB+KHVpbnQjI20jI190KSh1aW50
IyN3IyNfdCktMTsJXAotCQlja19wcl9jYXNfIyN3KCh1aW50IyN3IyNfdCAqKSh2b2lkICopJnQs
ICh1aW50IyN3IyNfdCl0LCAwKTsJXAotCQlpZiAodCAhPSByKSB7CQkJCQkJCVwKLQkJCXByaW50
ZigiRkFJTCBbJSMiIFBSSXgjI20gIiAhPSAlIyIgUFJJeCMjbSAiXVxuIiwJXAotCQkJCQkodWlu
dCMjbSMjX3QpdCwgKHVpbnQjI20jI190KXIpOwlcCi0JCX0JCQkJCQkJCVwKLQl9Ci0KLXN0YXRp
YyB2b2lkCi1yZ193aWR0aChpbnQgbSkKLXsKLQotCS8qIE90aGVyIGFyY2hpdGVjdHVyZXMgYXJl
IGJpLWVuZGlhbi4gKi8KLSNpZiAhZGVmaW5lZChfX3g4Nl9fKSAmJiAhZGVmaW5lZChfX3g4Nl82
NF9fKQotCXJldHVybjsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9QUl9DQVNfNjQKLQlpZiAobSA9
PSA2NCkgewotI2lmIGRlZmluZWQoQ0tfRl9QUl9DQVNfMzIpCi0JCUNLX1BSX0NBU19XKDY0LCAz
Mik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENLX1BSX0NBU18xNikKLQkJQ0tfUFJfQ0FTX1coNjQs
IDE2KTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ0tfUFJfQ0FTXzgpCi0JCUNLX1BSX0NBU19XKDY0
LCA4KTsKLSNlbmRpZgotCX0KLSNlbmRpZiAvKiBDS19QUl9DQVNfNjQgKi8KLQotI2lmZGVmIENL
X0ZfUFJfQ0FTXzMyCi0JaWYgKG0gPT0gMzIpIHsKLSNpZiBkZWZpbmVkKENLX0ZfUFJfQ0FTXzE2
KQotCQlDS19QUl9DQVNfVygzMiwgMTYpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDS19QUl9DQVNf
OCkKLQkJQ0tfUFJfQ0FTX1coMzIsIDgpOwotI2VuZGlmCi0JfQotI2VuZGlmIC8qIENLX1BSX0NB
U18zMiAqLwotCi0jaWYgZGVmaW5lZChDS19GX1BSX0NBU18xNikgJiYgZGVmaW5lZChDS19QUl9D
QVNfOCkKLQlpZiAobSA9PSAxNikgewotCQlDS19QUl9DQVNfVygxNiwgOCk7Ci0JfQotI2VuZGlm
IC8qIENLX1BSX0NBU18xNiAmJiBDS19QUl9DQVNfOCAqLwotCi0JcmV0dXJuOwotfQotCi1pbnQK
LW1haW4odm9pZCkKLXsKLQotCWNvbW1vbl9zcmFuZCgodW5zaWduZWQgaW50KWdldHBpZCgpKTsK
LQotI2lmZGVmIENLX0ZfUFJfQ0FTXzY0Ci0JQ0tfUFJfQ0FTX0IoNjQpOwotI2VuZGlmCi0KLSNp
ZmRlZiBDS19GX1BSX0NBU18zMgotCUNLX1BSX0NBU19CKDMyKTsKLSNlbmRpZgotCi0jaWZkZWYg
Q0tfRl9QUl9DQVNfMTYKLQlDS19QUl9DQVNfQigxNik7Ci0jZW5kaWYKLQotI2lmZGVmIENLX0Zf
UFJfQ0FTXzgKLQlDS19QUl9DQVNfQig4KTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9QUl9DQVNf
NjRfVkFMVUUKLQl1aW50NjRfdCBhID0gMHhmZmZmZmZmZmFhYWFhYWFhLCBiID0gMHg4ODg4ODg4
ODAwMDAwMDAwOwotCi0JcHJpbnRmKCIlIiBQUkl4NjQgIiAoJSIgUFJJeDY0ICIpIC0+ICIsIGIs
IGEpOwotCWNrX3ByX2Nhc182NF92YWx1ZSgmYSwgYSwgYiwgJmIpOwotCXByaW50ZigiJSIgUFJJ
eDY0ICIgKCUiIFBSSXg2NCAiKVxuIiwgYiwgYSk7Ci0jZW5kaWYKLQotCXJldHVybiAoMCk7Ci19
Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Np
b25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX2RlYy5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvdmFsaWRhdGUvY2tfcHJfZGVjLmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2Y2UwODg1YTFkZmExZWMyZTcxZTBjOTk4YjU3ZDY4ZWQ0
ZjUwZjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvdmFsaWRhdGUv
Y2tfcHJfZGVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAyMDA5IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlIDxzdGRp
by5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUg
PHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Y2tfcHIuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1v
bi5oIgotI2lmbmRlZiBSX1JFUEVBVAotI2RlZmluZSBSX1JFUEVBVCAyMDAwMDAKLSNlbmRpZgot
Ci0jZGVmaW5lIENLX1BSX0RFQ19UKHcsIHYpCQkJCQkJCQlcCi0JewkJCQkJCQkJCQlcCi0JCXVp
bnQjI3cjI190IHQgPSB2OwkJCQkJCQlcCi0JCWNrX3ByX2RlY18jI3coJnQpOwkJCQkJCQlcCi0J
CWlmICgodCAhPSAodWludCMjdyMjX3QpKHYgLSAxKSkpIHsJCQkJCVwKLQkJCXByaW50ZigiRkFJ
TCBbIik7CQkJCQkJXAotCQkJcHJpbnRmKCIlIiBQUkl1IyN3ICIgLT4gJSIgUFJJdSMjdyAiXVxu
IiwgKHVpbnQjI3cjI190KXYsIHQpOwlcCi0JCQlleGl0KEVYSVRfRkFJTFVSRSk7CQkJCQkJXAot
CQl9CQkJCQkJCQkJXAotCX0KLQotI2RlZmluZSBDS19QUl9ERUNfQih3KQkJCQkJCQlcCi0JewkJ
CQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgX19ja19pID0gMDsJCQkJXAotCQlwcmludGYoImNrX3By
X2RlY18iICN3ICI6ICIpOwkJCQlcCi0JCWlmICh3IDwgMTApCQkJCQkJXAotCQkJcHJpbnRmKCIg
Iik7CQkJCQlcCi0JCWZvciAoX19ja19pID0gMDsgX19ja19pIDwgUl9SRVBFQVQ7IF9fY2tfaSsr
KSB7CQlcCi0JCQl1aW50IyN3IyNfdCBhID0gY29tbW9uX3JhbmQoKSAlICgodWludCMjdyMjX3Qp
LTEpOwlcCi0JCQlDS19QUl9ERUNfVCh3LCBhKTsJCQkJXAotCQl9CQkJCQkJCVwKLQkJcmdfd2lk
dGgodyk7CQkJCQkJXAotCQlwcmludGYoIiAgU1VDQ0VTU1xuIik7CQkJCQlcCi0JfQotCi0jZGVm
aW5lIENLX1BSX0RFQ19XKG0sIHcpCQkJCQkJCVwKLQl7CQkJCQkJCQkJXAotCQl1aW50IyNtIyNf
dCB0ID0gMCwgciA9ICh1aW50IyN3IyNfdCktMTsJCQkJXAotCQlja19wcl9kZWNfIyN3KCh1aW50
IyN3IyNfdCAqKSh2b2lkICopJnQpOwkJCVwKLQkJaWYgKHQgIT0gcikgewkJCQkJCQlcCi0JCQlw
cmludGYoIkZBSUwgWyUjIiBQUkl4IyNtICIgIT0gJSMiIFBSSXgjI20gIl1cbiIsIHQsIHIpO1wK
LQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsJCQkJCVwKLQkJfQkJCQkJCQkJXAotCX0KLQotc3RhdGlj
IHZvaWQKLXJnX3dpZHRoKGludCBtKQotewotCi0JLyogT3RoZXIgYXJjaGl0ZWN0dXJlcyBhcmUg
YmktZW5kaWFuLiAqLwotI2lmICFkZWZpbmVkKF9feDg2X18pICYmICFkZWZpbmVkKF9feDg2XzY0
X18pCi0JcmV0dXJuOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX1BSX0RFQ182NAotCWlmIChtID09
IDY0KSB7Ci0jaWYgZGVmaW5lZChDS19GX1BSX0RFQ18zMikKLQkJQ0tfUFJfREVDX1coNjQsIDMy
KTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ0tfUFJfREVDXzE2KQotCQlDS19QUl9ERUNfVyg2NCwg
MTYpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDS19QUl9ERUNfOCkKLQkJQ0tfUFJfREVDX1coNjQs
IDgpOwotI2VuZGlmCi0JfQotI2VuZGlmIC8qIENLX1BSX0RFQ182NCAqLwotCi0jaWZkZWYgQ0tf
Rl9QUl9ERUNfMzIKLQlpZiAobSA9PSAzMikgewotI2lmIGRlZmluZWQoQ0tfRl9QUl9ERUNfMTYp
Ci0JCUNLX1BSX0RFQ19XKDMyLCAxNik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENLX1BSX0RFQ184
KQotCQlDS19QUl9ERUNfVygzMiwgOCk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYgLyogQ0tfUFJfREVD
XzMyICovCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfREVDXzE2KSAmJiBkZWZpbmVkKENLX1BSX0RF
Q184KQotCWlmIChtID09IDE2KSB7Ci0JCUNLX1BSX0RFQ19XKDE2LCA4KTsKLQl9Ci0jZW5kaWYg
LyogQ0tfUFJfREVDXzE2ICYmIENLX1BSX0RFQ184ICovCi0KLQlyZXR1cm47Ci19Ci0KLWludAot
bWFpbih2b2lkKQotewotCi0JY29tbW9uX3NyYW5kKCh1bnNpZ25lZCBpbnQpZ2V0cGlkKCkpOwot
Ci0jaWZkZWYgQ0tfRl9QUl9ERUNfNjQKLQlDS19QUl9ERUNfQig2NCk7Ci0jZW5kaWYKLQotI2lm
ZGVmIENLX0ZfUFJfREVDXzMyCi0JQ0tfUFJfREVDX0IoMzIpOwotI2VuZGlmCi0KLSNpZmRlZiBD
S19GX1BSX0RFQ18xNgotCUNLX1BSX0RFQ19CKDE2KTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9Q
Ul9ERUNfOAotCUNLX1BSX0RFQ19CKDgpOwotI2VuZGlmCi0KLQlyZXR1cm4gKDApOwotfQotCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9j
a19wci92YWxpZGF0ZS9ja19wcl9mYWEuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX2ZhYS5jCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxZDEwYmI5YzczMGU3NTljNDQxZjI3MjJkYTY3ZjczZmJkNDlmOWU5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2NrX3By
X2ZhYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
MjAwOSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
Ci0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4K
LSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlz
dGQuaD4KLQotI2luY2x1ZGUgPGNrX3ByLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIK
LSNpZm5kZWYgUl9SRVBFQVQKLSNkZWZpbmUgUl9SRVBFQVQgMjAwMDAwCi0jZW5kaWYKLQotI2Rl
ZmluZSBDS19QUl9GQUFfVCh3LCB2LCBkKQkJCQkJCQlcCi0JewkJCQkJCQkJCVwKLQkJdWludCMj
dyMjX3QgciwgdCA9IHY7CQkJCQkJXAotCQlyID0gY2tfcHJfZmFhXyMjdygmdCwgZCk7CQkJCQlc
Ci0JCWlmICgodCAhPSAodWludCMjdyMjX3QpKHYgKyBkKSkgfHwgKHIgIT0gdikpIHsJCQlcCi0J
CQlwcmludGYoIkZBSUwgWyIpOwkJCQkJXAotCQkJcHJpbnRmKCIlIiBQUkl1IyN3ICIgKCUiIFBS
SXUjI3cgIikgLT4gJSIgUFJJdSMjdwlcCi0JCQkJCSIgKCUiIFBSSXUjI3cgIildXG4iLAkJCVwK
LQkJCQkJKHVpbnQjI3cjI190KXYsIGQsIHQsIHIpOwkJXAotCQkJZXhpdChFWElUX0ZBSUxVUkUp
OwkJCQkJXAotCQl9CQkJCQkJCQlcCi0JfQotCi0jZGVmaW5lIENLX1BSX0ZBQV9CKHcpCQkJCQkJ
CQlcCi0JewkJCQkJCQkJCVwKLQkJdW5zaWduZWQgaW50IF9fY2tfaSA9IDA7CQkJCQlcCi0JCXBy
aW50ZigiY2tfcHJfZmFhXyIgI3cgIjogIik7CQkJCQlcCi0JCWlmICh3IDwgMTApCQkJCQkJCVwK
LQkJCXByaW50ZigiICIpOwkJCQkJCVwKLQkJZm9yIChfX2NrX2kgPSAwOyBfX2NrX2kgPCBSX1JF
UEVBVDsgX19ja19pKyspIHsJCQlcCi0JCQl1aW50IyN3IyNfdCBhID0gY29tbW9uX3JhbmQoKSAl
ICgodWludCMjdyMjX3QpLTEgLyAyKTsJXAotCQkJdWludCMjdyMjX3QgYiA9IGNvbW1vbl9yYW5k
KCkgJSAoKHVpbnQjI3cjI190KS0xIC8gMik7CVwKLQkJCUNLX1BSX0ZBQV9UKHcsIGEsIGIpOwkJ
CQkJXAotCQl9CQkJCQkJCQlcCi0JCXJnX3dpZHRoKHcpOwkJCQkJCQlcCi0JCXByaW50ZigiICBT
VUNDRVNTXG4iKTsJCQkJCQlcCi0JfQotCi0jZGVmaW5lIENLX1BSX0ZBQV9XKG0sIHcpCQkJCQkJ
CVwKLQl7CQkJCQkJCQkJXAotCQl1aW50IyNtIyNfdCB0ID0gLTEsIHIgPSAtMSAmIH4odWludCMj
bSMjX3QpKHVpbnQjI3cjI190KS0xOwlcCi0JCWNrX3ByX2ZhYV8jI3coKHVpbnQjI3cjI190ICop
KHZvaWQgKikmdCwgMSk7CQkJXAotCQlpZiAodCAhPSByKSB7CQkJCQkJCVwKLQkJCXByaW50Zigi
RkFJTCBbJSMiIFBSSXgjI20gIiAhPSAlIyIgUFJJeCMjbSAiXVxuIiwgdCwgcik7XAotCQkJZXhp
dChFWElUX0ZBSUxVUkUpOwkJCQkJXAotCQl9CQkJCQkJCQlcCi0JCXQgPSAwLCByID0gKHVpbnQj
I20jI190KSh1aW50IyN3IyNfdCktMTsJCQlcCi0JCWNrX3ByX2ZhYV8jI3coKHVpbnQjI3cjI190
ICopKHZvaWQgKikmdCwgLTEpOwkJCVwKLQkJaWYgKHQgIT0gcikgewkJCQkJCQlcCi0JCQlwcmlu
dGYoIkZBSUwgWyUjIiBQUkl4IyNtICIgIT0gJSMiIFBSSXgjI20gIl1cbiIsIHQsIHIpO1wKLQkJ
CWV4aXQoRVhJVF9GQUlMVVJFKTsJCQkJCVwKLQkJfQkJCQkJCQkJXAotCX0KLQotc3RhdGljIHZv
aWQKLXJnX3dpZHRoKGludCBtKQotewotCi0JLyogT3RoZXIgYXJjaGl0ZWN0dXJlcyBhcmUgYmkt
ZW5kaWFuLiAqLwotI2lmICFkZWZpbmVkKF9feDg2X18pICYmICFkZWZpbmVkKF9feDg2XzY0X18p
Ci0JcmV0dXJuOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX1BSX0ZBQV82NAotCWlmIChtID09IDY0
KSB7Ci0jaWYgZGVmaW5lZChDS19GX1BSX0ZBQV8zMikKLQkJQ0tfUFJfRkFBX1coNjQsIDMyKTsK
LSNlbmRpZgotI2lmIGRlZmluZWQoQ0tfUFJfRkFBXzE2KQotCQlDS19QUl9GQUFfVyg2NCwgMTYp
OwotI2VuZGlmCi0jaWYgZGVmaW5lZChDS19QUl9GQUFfOCkKLQkJQ0tfUFJfRkFBX1coNjQsIDgp
OwotI2VuZGlmCi0JfQotI2VuZGlmIC8qIENLX1BSX0ZBQV82NCAqLwotCi0jaWZkZWYgQ0tfRl9Q
Ul9GQUFfMzIKLQlpZiAobSA9PSAzMikgewotI2lmIGRlZmluZWQoQ0tfRl9QUl9GQUFfMTYpCi0J
CUNLX1BSX0ZBQV9XKDMyLCAxNik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENLX1BSX0ZBQV84KQot
CQlDS19QUl9GQUFfVygzMiwgOCk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYgLyogQ0tfUFJfRkFBXzMy
ICovCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfRkFBXzE2KSAmJiBkZWZpbmVkKENLX1BSX0ZBQV84
KQotCWlmIChtID09IDE2KSB7Ci0JCUNLX1BSX0ZBQV9XKDE2LCA4KTsKLQl9Ci0jZW5kaWYgLyog
Q0tfUFJfRkFBXzE2ICYmIENLX1BSX0ZBQV84ICovCi0KLQlyZXR1cm47Ci19Ci0KLWludAotbWFp
bih2b2lkKQotewotCi0JY29tbW9uX3NyYW5kKCh1bnNpZ25lZCBpbnQpZ2V0cGlkKCkpOwotCi0j
aWZkZWYgQ0tfRl9QUl9GQUFfNjQKLQlDS19QUl9GQUFfQig2NCk7Ci0jZW5kaWYKLQotI2lmZGVm
IENLX0ZfUFJfRkFBXzMyCi0JQ0tfUFJfRkFBX0IoMzIpOwotI2VuZGlmCi0KLSNpZmRlZiBDS19G
X1BSX0ZBQV8xNgotCUNLX1BSX0ZBQV9CKDE2KTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9QUl9G
QUFfOAotCUNLX1BSX0ZBQV9CKDgpOwotI2VuZGlmCi0KLQlyZXR1cm4gKDApOwotfQotCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19w
ci92YWxpZGF0ZS9ja19wcl9mYXMuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX2Zhcy5jCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMGNlZjRlZTlmOWU2ZTc2MDJhODMxMDgzMjVkNTg4OTdhNjA2ZWY0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX2Zh
cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAw
OSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0g
KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
Ci0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8
aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNp
bmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQu
aD4KLQotI2luY2x1ZGUgPGNrX3ByLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIKLSNp
Zm5kZWYgUl9SRVBFQVQKLSNkZWZpbmUgUl9SRVBFQVQgMjAwMDAwCi0jZW5kaWYKLQotI2RlZmlu
ZSBCTShtLCB3KSAoKHVpbnQjI20jI190KSh1aW50IyN3IyNfdCkoLTEpKQotCi0jZGVmaW5lIENL
X1BSX0ZBU19UKHcsIHYsIGQpCQkJCQkJCVwKLQl7CQkJCQkJCQkJXAotCQl1aW50IyN3IyNfdCBy
LCB0ID0gdjsJCQkJCQlcCi0JCXIgPSBja19wcl9mYXNfIyN3KCZ0LCBkKTsJCQkJCVwKLQkJaWYg
KCh0ICE9IGQpIHx8IChyICE9IHYpKSB7CQkJCQlcCi0JCQlwcmludGYoIkZBSUwgWyIpOwkJCQkJ
XAotCQkJcHJpbnRmKCIlIiBQUkl1IyN3ICIgKCUiIFBSSXUjI3cgIikgLT4gJSIgUFJJdSMjdwlc
Ci0JCQkJCSIgKCUiIFBSSXUjI3cgIildXG4iLAkJCVwKLQkJCQkJKHVpbnQjI3cjI190KXYsIGQs
IHQsIHIpOwkJXAotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwkJCQkJXAotCQl9CQkJCQkJCQlcCi0J
fQotCi0jZGVmaW5lIENLX1BSX0ZBU19CKHcpCQkJCQkJXAotCXsJCQkJCQkJXAotCQl1bnNpZ25l
ZCBpbnQgX19ja19pID0gMDsJCQlcCi0JCXByaW50ZigiY2tfcHJfZmFzXyIgI3cgIjogIik7CQkJ
XAotCQlpZiAodyA8IDEwKQkJCQkJXAotCQkJcHJpbnRmKCIgIik7CQkJCVwKLQkJZm9yIChfX2Nr
X2kgPSAwOyBfX2NrX2kgPCBSX1JFUEVBVDsgX19ja19pKyspIHsJXAotCQkJdWludCMjdyMjX3Qg
YSA9IGNvbW1vbl9yYW5kKCk7CQlcCi0JCQl1aW50IyN3IyNfdCBiID0gY29tbW9uX3JhbmQoKTsJ
CVwKLQkJCUNLX1BSX0ZBU19UKHcsIGEsIGIpOwkJCVwKLQkJfQkJCQkJCVwKLQkJcmdfd2lkdGgo
dyk7CQkJCQlcCi0JCXByaW50ZigiICBTVUNDRVNTXG4iKTsJCQkJXAotCX0KLQotI2RlZmluZSBD
S19QUl9GQVNfVyhtLCB3KQkJCQkJCQkJXAotCXsJCQkJCQkJCQkJXAotCQl1aW50IyNtIyNfdCB0
ID0gMDsJCQkJCQkJXAotCQlja19wcl9mYXNfIyN3KCh1aW50IyN3IyNfdCAqKSh2b2lkICopJnQs
IC0xKTsJCQkJXAotCQlpZiAodCAhPSBCTShtLCB3KSkgewkJCQkJCQlcCi0JCQlwcmludGYoIkZB
SUwgWyUjIiBQUkl4IyNtICIgIT0gJSMiIFBSSXgjI20gIl1cbiIsIHQsIEJNKG0sIHcpKTsJXAot
CQkJZXhpdChFWElUX0ZBSUxVUkUpOwkJCQkJCVwKLQkJfQkJCQkJCQkJCVwKLQl9Ci0KLXN0YXRp
YyB2b2lkCi1yZ193aWR0aChpbnQgbSkKLXsKLQotCS8qIE90aGVyIGFyY2hpdGVjdHVyZXMgYXJl
IGJpLWVuZGlhbi4gKi8KLSNpZiAhZGVmaW5lZChfX3g4Nl9fKSAmJiAhZGVmaW5lZChfX3g4Nl82
NF9fKQotCXJldHVybjsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9QUl9GQVNfNjQKLQlpZiAobSA9
PSA2NCkgewotI2lmIGRlZmluZWQoQ0tfRl9QUl9GQVNfMzIpCi0JCUNLX1BSX0ZBU19XKDY0LCAz
Mik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENLX1BSX0ZBU18xNikKLQkJQ0tfUFJfRkFTX1coNjQs
IDE2KTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ0tfUFJfRkFTXzgpCi0JCUNLX1BSX0ZBU19XKDY0
LCA4KTsKLSNlbmRpZgotCX0KLSNlbmRpZiAvKiBDS19QUl9GQVNfNjQgKi8KLQotI2lmZGVmIENL
X0ZfUFJfRkFTXzMyCi0JaWYgKG0gPT0gMzIpIHsKLSNpZiBkZWZpbmVkKENLX0ZfUFJfRkFTXzE2
KQotCQlDS19QUl9GQVNfVygzMiwgMTYpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDS19QUl9GQVNf
OCkKLQkJQ0tfUFJfRkFTX1coMzIsIDgpOwotI2VuZGlmCi0JfQotI2VuZGlmIC8qIENLX1BSX0ZB
U18zMiAqLwotCi0jaWYgZGVmaW5lZChDS19GX1BSX0ZBU18xNikgJiYgZGVmaW5lZChDS19QUl9G
QVNfOCkKLQlpZiAobSA9PSAxNikgewotCQlDS19QUl9GQVNfVygxNiwgOCk7Ci0JfQotI2VuZGlm
IC8qIENLX1BSX0ZBU18xNiAmJiBDS19QUl9GQVNfOCAqLwotCi0JcmV0dXJuOwotfQotCi1pbnQK
LW1haW4odm9pZCkKLXsKLQotCWNvbW1vbl9zcmFuZCgodW5zaWduZWQgaW50KWdldHBpZCgpKTsK
LQotI2lmZGVmIENLX0ZfUFJfRkFTXzY0Ci0JQ0tfUFJfRkFTX0IoNjQpOwotI2VuZGlmCi0KLSNp
ZmRlZiBDS19GX1BSX0ZBU18zMgotCUNLX1BSX0ZBU19CKDMyKTsKLSNlbmRpZgotCi0jaWZkZWYg
Q0tfRl9QUl9GQVNfMTYKLQlDS19QUl9GQVNfQigxNik7Ci0jZW5kaWYKLQotI2lmZGVmIENLX0Zf
UFJfRkFTXzgKLQlDS19QUl9GQVNfQig4KTsKLSNlbmRpZgotCi0JcmV0dXJuICgwKTsKLX0KLQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfcHIvdmFsaWRhdGUvY2tfcHJfZmF4LmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19wci92YWxpZGF0ZS9ja19wcl9mYXguYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWQ4Yzk0ZjJlZjkxM2U1ZTE0NTFjMjY2NWZhNGQ1MjAwMTQ5NTRh
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wci92YWxpZGF0ZS9ja19w
cl9mYXguYworKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IDIwMTEgRGF2aWQgSm9zZXBoLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
Ci0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNp
bmNsdWRlIDxja19wci5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0jZGVmaW5lIFJF
UEVBVCAyMDAwMDAwCi0KLSNkZWZpbmUgVEVTVF9GQVhfRk4oUywgVCwgTSkJCQkJCQkJCVwKLQlz
dGF0aWMgVAkJCQkJCQkJCVwKLQl0ZXN0X2ZhYV8jI1MoTSAqdGFyZ2V0LCBUIGRlbHRhKQkJCQkJ
CVwKLQl7CQkJCQkJCQkJCVwKLQkJVCBwcmV2aW91cyA9IChUKSp0YXJnZXQ7CQkJCQkJXAotCQkq
dGFyZ2V0ID0gKFQpKnRhcmdldCArIGRlbHRhOwkJCQkJCVwKLQkJCQkJCQkJCQkJXAotCQlyZXR1
cm4gKHByZXZpb3VzKTsJCQkJCQkJXAotCX0JCQkJCQkJCQkJXAotCXN0YXRpYyBUCQkJCQkJCQkJ
XAotCXRlc3RfZmFzXyMjUyhNICp0YXJnZXQsIFQgdXBkYXRlKQkJCQkJCVwKLQl7CQkJCQkJCQkJ
CVwKLQkJVCBwcmV2aW91cyA9ICp0YXJnZXQ7CQkJCQkJCVwKLQkJKnRhcmdldCA9IHVwZGF0ZTsJ
CQkJCQkJXAotCQkJCQkJCQkJCQlcCi0JCXJldHVybiAocHJldmlvdXMpOwkJCQkJCQlcCi0JfQot
Ci0jZGVmaW5lIFRFU1RfRkFYX0ZOX1MoUywgVCkgVEVTVF9GQVhfRk4oUywgVCwgVCkKLQotVEVT
VF9GQVhfRk5fUyhpbnQsIGludCkKLVRFU1RfRkFYX0ZOX1ModWludCwgdW5zaWduZWQgaW50KQot
Ci0jdW5kZWYgVEVTVF9GQVhfRk5fUwotI3VuZGVmIFRFU1RfRkFYX0ZOCi0KLSNkZWZpbmUgVEVT
VF9GQVgoSywgUywgVCwgRCkJCQkJCQkJCVwKLQlzdGF0aWMgdm9pZAkJCQkJCQkJCVwKLQlydW5f
dGVzdF8jI0sjI18jI1Modm9pZCkJCQkJCQkJXAotCXsJCQkJCQkJCQkJXAotCQlpbnQgaSwgcjsJ
CQkJCQkJCVwKLQkJVCB4ID0gMCwgeSA9IDAsIHhfYiwgeV9iOwkJCQkJCVwKLQkJCQkJCQkJCQkJ
XAotCQlwdXRzKCIqKipURVNUSU5HIGNrX3ByXyIjSyJfIiNTIioqKiIpOwkJCQkJXAotCQljb21t
b25fc3JhbmQoKHVuc2lnbmVkIGludClnZXRwaWQoKSk7CQkJCQlcCi0JCWZvciAoaSA9IDA7IGkg
PCBSRVBFQVQ7ICsraSkgewkJCQkJCVwKLQkJCXIgPSBjb21tb25fcmFuZCgpOwkJCQkJCQlcCi0J
CQl4X2IgPSB0ZXN0XyMjSyMjXyMjUygmeCwgcik7CQkJCQlcCi0JCQl5X2IgPSBja19wcl8jI0sj
I18jI1MoJnksIHIpOwkJCQkJXAotCQkJCQkJCQkJCQlcCi0JCQlpZiAoeF9iICE9IHlfYikgewkJ
CQkJCVwKLQkJCQlwcmludGYoIlNlcmlhbCBmZXRjaCBkb2VzIG5vdCBtYXRjaCBja19wciBmZXRj
aC5cbiIJXAotCQkJCQkiXHRTZXJpYWw6ICUiI0QiXG4iCQkJCVwKLQkJCQkJIlx0Y2tfcHI6ICUi
I0QiXG4iLAkJCQlcCi0JCQkJCXhfYiwgeV9iKTsJCQkJCVwKLQkJCQkJCQkJCQkJXAotCQkJCXJl
dHVybjsJCQkJCQkJXAotCQkJfQkJCQkJCQkJXAotCQl9CQkJCQkJCQkJXAotCQkJCQkJCQkJCQlc
Ci0JCXByaW50ZigiRmluYWwgcmVzdWx0OlxuIgkJCQkJCVwKLQkJCSJcdFNlcmlhbDogJSIjRCJc
biIJCQkJCQlcCi0JCQkiXHRja19wcjogJSIjRCJcbiIsCQkJCQkJXAotCQkJeCwgeSk7CQkJCQkJ
CQlcCi0JCSh4ID09IHkpID8gcHV0cygiU1VDQ0VTUy4iKQkJCQkJCVwKLQkJCSA6IHB1dHMoIkZB
SUxVUkUuIik7CQkJCQkJXAotCQkJCQkJCQkJCQlcCi0JCXJldHVybjsJCQkJCQkJCQlcCi0JfQkJ
CQkJCQkJCQlcCi0KLQotI2RlZmluZSBHRU5FUkFURV9URVNUKEspCQkJCVwKLQlURVNUX0ZBWChL
LCBpbnQsIGludCwgZCkJCQlcCi0JVEVTVF9GQVgoSywgdWludCwgdW5zaWduZWQgaW50LCB1KQkJ
XAotCXN0YXRpYyB2b2lkCQkJCQlcCi0JcnVuX3Rlc3RfIyNLKHZvaWQpCQkJCVwKLQl7CQkJCQkJ
XAotCQlydW5fdGVzdF8jI0sjI19pbnQoKTsJCQlcCi0JCXJ1bl90ZXN0XyMjSyMjX3VpbnQoKTsJ
CQlcCi0JfQotCi1HRU5FUkFURV9URVNUKGZhYSkKLUdFTkVSQVRFX1RFU1QoZmFzKQotCi0jdW5k
ZWYgR0VORVJBVEVfVEVTVAotI3VuZGVmIFRFU1RfRkFYCi0KLWludAotbWFpbih2b2lkKQotewot
CXJ1bl90ZXN0X2ZhYSgpOwotCXJ1bl90ZXN0X2ZhcygpOwotCi0JcmV0dXJuICgwKTsKLX0KLQot
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9u
cy9ja19wci92YWxpZGF0ZS9ja19wcl9pbmMuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX2luYy5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlODUyNGE1NTdjM2I0MDczODRmYWYxZjI0NjBiMWQ3MGJjYzRi
YTVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2Nr
X3ByX2luYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgMjAwOSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8c3RkaW8u
aD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1
bmlzdGQuaD4KLQotI2luY2x1ZGUgPGNrX3ByLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21tb24u
aCIKLSNpZm5kZWYgUl9SRVBFQVQKLSNkZWZpbmUgUl9SRVBFQVQgMjAwMDAwCi0jZW5kaWYKLQot
I2RlZmluZSBDS19QUl9JTkNfVCh3LCB2KQkJCQkJCVwKLQl7CQkJCQkJCQlcCi0JCXVpbnQjI3cj
I190IHQgPSB2OwkJCQkJXAotCQlja19wcl9pbmNfIyN3KCZ0KTsJCQkJCVwKLQkJaWYgKCh0ICE9
ICh1aW50IyN3IyNfdCkodiArIDEpKSkgewkJCVwKLQkJCXByaW50ZigiRkFJTCBbJSIgUFJJdSMj
dyAiIC0+ICUiIFBSSXUjI3cgIl1cbiIsCVwKLQkJCQkJKHVpbnQjI3cjI190KXYsIHQpOwkJXAot
CQkJZXhpdChFWElUX0ZBSUxVUkUpOwkJCQlcCi0JCX0JCQkJCQkJXAotCX0KLQotI2RlZmluZSBD
S19QUl9JTkNfQih3KQkJCQkJCQlcCi0JewkJCQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgX19ja19p
ID0gMDsJCQkJXAotCQlwcmludGYoImNrX3ByX2luY18iICN3ICI6ICIpOwkJCQlcCi0JCWlmICh3
IDwgMTApCQkJCQkJXAotCQkJcHJpbnRmKCIgIik7CQkJCQlcCi0JCWZvciAoX19ja19pID0gMDsg
X19ja19pIDwgUl9SRVBFQVQ7IF9fY2tfaSsrKSB7CQlcCi0JCQl1aW50IyN3IyNfdCBhID0gY29t
bW9uX3JhbmQoKSAlICgodWludCMjdyMjX3QpLTEpOwlcCi0JCQlDS19QUl9JTkNfVCh3LCBhKTsJ
CQkJXAotCQl9CQkJCQkJCVwKLQkJcmdfd2lkdGgodyk7CQkJCQkJXAotCQlwcmludGYoIiAgU1VD
Q0VTU1xuIik7CQkJCQlcCi0JfQotCi0jZGVmaW5lIENLX1BSX0lOQ19XKG0sIHcpCQkJCQkJCVwK
LQl7CQkJCQkJCQkJXAotCQl1aW50IyNtIyNfdCB0ID0gLTEsIHIgPSAtMSAmIH4odWludCMjbSMj
X3QpKHVpbnQjI3cjI190KS0xOwlcCi0JCWNrX3ByX2luY18jI3coKHVpbnQjI3cjI190ICopKHZv
aWQgKikmdCk7CQkJXAotCQlpZiAodCAhPSByKSB7CQkJCQkJCVwKLQkJCXByaW50ZigiRkFJTCBb
JSMiIFBSSXgjI20gIiAhPSAlIyIgUFJJeCMjbSAiXVxuIiwgdCwgcik7XAotCQkJZXhpdChFWElU
X0ZBSUxVUkUpOwkJCQkJXAotCQl9CQkJCQkJCQlcCi0JfQotCi1zdGF0aWMgdm9pZAotcmdfd2lk
dGgoaW50IG0pCi17Ci0KLQkvKiBPdGhlciBhcmNoaXRlY3R1cmVzIGFyZSBiaS1lbmRpYW4uICov
Ci0jaWYgIWRlZmluZWQoX194ODZfXykgJiYgIWRlZmluZWQoX194ODZfNjRfXykKLQlyZXR1cm47
Ci0jZW5kaWYKLQotI2lmZGVmIENLX0ZfUFJfSU5DXzY0Ci0JaWYgKG0gPT0gNjQpIHsKLSNpZiBk
ZWZpbmVkKENLX0ZfUFJfSU5DXzMyKQotCQlDS19QUl9JTkNfVyg2NCwgMzIpOwotI2VuZGlmCi0j
aWYgZGVmaW5lZChDS19QUl9JTkNfMTYpCi0JCUNLX1BSX0lOQ19XKDY0LCAxNik7Ci0jZW5kaWYK
LSNpZiBkZWZpbmVkKENLX1BSX0lOQ184KQotCQlDS19QUl9JTkNfVyg2NCwgOCk7Ci0jZW5kaWYK
LQl9Ci0jZW5kaWYgLyogQ0tfUFJfSU5DXzY0ICovCi0KLSNpZmRlZiBDS19GX1BSX0lOQ18zMgot
CWlmIChtID09IDMyKSB7Ci0jaWYgZGVmaW5lZChDS19GX1BSX0lOQ18xNikKLQkJQ0tfUFJfSU5D
X1coMzIsIDE2KTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ0tfUFJfSU5DXzgpCi0JCUNLX1BSX0lO
Q19XKDMyLCA4KTsKLSNlbmRpZgotCX0KLSNlbmRpZiAvKiBDS19QUl9JTkNfMzIgKi8KLQotI2lm
IGRlZmluZWQoQ0tfRl9QUl9JTkNfMTYpICYmIGRlZmluZWQoQ0tfUFJfSU5DXzgpCi0JaWYgKG0g
PT0gMTYpIHsKLQkJQ0tfUFJfSU5DX1coMTYsIDgpOwotCX0KLSNlbmRpZiAvKiBDS19QUl9JTkNf
MTYgJiYgQ0tfUFJfSU5DXzggKi8KLQotCXJldHVybjsKLX0KLQotaW50Ci1tYWluKHZvaWQpCi17
Ci0KLQljb21tb25fc3JhbmQoKHVuc2lnbmVkIGludClnZXRwaWQoKSk7Ci0KLSNpZmRlZiBDS19G
X1BSX0lOQ182NAotCUNLX1BSX0lOQ19CKDY0KTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9QUl9J
TkNfMzIKLQlDS19QUl9JTkNfQigzMik7Ci0jZW5kaWYKLQotI2lmZGVmIENLX0ZfUFJfSU5DXzE2
Ci0JQ0tfUFJfSU5DX0IoMTYpOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX1BSX0lOQ184Ci0JQ0tf
UFJfSU5DX0IoOCk7Ci0jZW5kaWYKLQotCXJldHVybiAoMCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRl
L2NrX3ByX2xvYWQuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Np
b25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX2xvYWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTE1YWNkMGM1NjEyMGJmMzNiNTA3YjU0NzA3ZDg3ODA5NmRhYmU3ZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wci92YWxpZGF0ZS9ja19wcl9sb2FkLmMKKysr
IC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5IFNhbXkg
QWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAq
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxpbnR0eXBl
cy5oPgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUg
PHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0j
aW5jbHVkZSA8Y2tfcHIuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotI2lmbmRlZiBS
X1JFUEVBVAotI2RlZmluZSBSX1JFUEVBVCAyMDAwMDAKLSNlbmRpZgotCi0jZGVmaW5lIENLX1BS
X0xPQURfQih3KQkJCQkJCQkJCVwKLQl7CQkJCQkJCQkJCVwKLQkJdWludCMjdyMjX3QgdCA9ICh1
aW50IyN3IyNfdCktMSwgYSA9IDA7CQkJCQlcCi0JCXVuc2lnbmVkIGludCBpOwkJCQkJCQkJXAot
CQlwcmludGYoImNrX3ByX2xvYWRfIiAjdyAiOiAiKTsJCQkJCQlcCi0JCWlmICh3IDwgMTApCQkJ
CQkJCQlcCi0JCQlwcmludGYoIiAiKTsJCQkJCQkJXAotCQlhID0gY2tfcHJfbG9hZF8jI3coJnQp
OwkJCQkJCQlcCi0JCWlmIChhICE9IHQpIHsJCQkJCQkJCVwKLQkJCXByaW50ZigiRkFJTCBbJSMi
IFBSSXgjI3cgIiAhPSAlIyIgUFJJeCMjdyAiXVxuIiwgYSwgdCk7CVwKLQkJCWV4aXQoRVhJVF9G
QUlMVVJFKTsJCQkJCQlcCi0JCX0JCQkJCQkJCQlcCi0JCWZvciAoaSA9IDA7IGkgPCBSX1JFUEVB
VDsgaSsrKSB7CQkJCQlcCi0JCQl0ID0gKHVpbnQjI3cjI190KWNvbW1vbl9yYW5kKCk7CQkJCQlc
Ci0JCQlhID0gY2tfcHJfbG9hZF8jI3coJnQpOwkJCQkJCVwKLQkJCWlmIChhICE9IHQpIHsJCQkJ
CQkJXAotCQkJCXByaW50ZigiRkFJTCBbJSMiIFBSSXgjI3cgIiAhPSAlIyIgUFJJeCMjdyAiXVxu
IiwgYSwgdCk7XAotCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsJCQkJCVwKLQkJCX0JCQkJCQkJCVwK
LQkJfQkJCQkJCQkJCVwKLQkJcmdfd2lkdGgodyk7CQkJCQkJCQlcCi0JCXByaW50ZigiIFNVQ0NF
U1NcbiIpOwkJCQkJCQlcCi0JfQotCi0jZGVmaW5lIENLX1BSX0xPQURfVyhtLCB3KQkJCQkJCQlc
Ci0JewkJCQkJCQkJCVwKLQkJdWludCMjbSMjX3QgZiA9IDA7CQkJCQkJXAotCQl1aW50IyN3IyNf
dCBqID0gKHVpbnQjI3cjI190KS0xOwkJCQlcCi0JCWYgPSBja19wcl9sb2FkXyMjdygmaik7CQkJ
CQkJXAotCQlpZiAoZiAhPSBqKSB7CQkJCQkJCVwKLQkJCXByaW50ZigiRkFJTCBbJSMiIFBSSXgj
I20gIiAhPSAlIyIgUFJJeCMjdyAiXVxuIiwgZiwgaik7XAotCQkJZXhpdChFWElUX0ZBSUxVUkUp
OwkJCQkJXAotCQl9CQkJCQkJCQlcCi0JfQotCi1zdGF0aWMgdm9pZAotcmdfd2lkdGgoaW50IG0p
Ci17Ci0KLQkvKiBPdGhlciBhcmNoaXRlY3R1cmVzIGFyZSBiaS1lbmRpYW4uICovCi0jaWYgIWRl
ZmluZWQoX194ODZfXykgJiYgIWRlZmluZWQoX194ODZfNjRfXykKLQlyZXR1cm47Ci0jZW5kaWYK
LQotI2lmZGVmIENLX0ZfUFJfTE9BRF82NAotCWlmIChtID09IDY0KSB7Ci0jaWYgZGVmaW5lZChD
S19GX1BSX0xPQURfMzIpCi0JCUNLX1BSX0xPQURfVyg2NCwgMzIpOwotI2VuZGlmCi0jaWYgZGVm
aW5lZChDS19QUl9MT0FEXzE2KQotCQlDS19QUl9MT0FEX1coNjQsIDE2KTsKLSNlbmRpZgotI2lm
IGRlZmluZWQoQ0tfUFJfTE9BRF84KQotCQlDS19QUl9MT0FEX1coNjQsIDgpOwotI2VuZGlmCi0J
fQotI2VuZGlmIC8qIENLX1BSX0xPQURfNjQgKi8KLQotI2lmZGVmIENLX0ZfUFJfTE9BRF8zMgot
CWlmIChtID09IDMyKSB7Ci0jaWYgZGVmaW5lZChDS19GX1BSX0xPQURfMTYpCi0JCUNLX1BSX0xP
QURfVygzMiwgMTYpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDS19QUl9MT0FEXzgpCi0JCUNLX1BS
X0xPQURfVygzMiwgOCk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYgLyogQ0tfUFJfTE9BRF8zMiAqLwot
Ci0jaWYgZGVmaW5lZChDS19GX1BSX0xPQURfMTYpICYmIGRlZmluZWQoQ0tfUFJfTE9BRF84KQot
CWlmIChtID09IDE2KQotCQlDS19QUl9MT0FEX1coMTYsIDgpOwotI2VuZGlmIC8qIENLX1BSX0xP
QURfMTYgJiYgQ0tfUFJfTE9BRF84ICovCi0KLQlyZXR1cm47Ci19Ci0KLWludAotbWFpbih2b2lk
KQotewotCi0JY29tbW9uX3NyYW5kKCh1bnNpZ25lZCBpbnQpZ2V0cGlkKCkpOwotCi0jaWZkZWYg
Q0tfRl9QUl9MT0FEXzY0Ci0JQ0tfUFJfTE9BRF9CKDY0KTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tf
Rl9QUl9MT0FEXzMyCi0JQ0tfUFJfTE9BRF9CKDMyKTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9Q
Ul9MT0FEXzE2Ci0JQ0tfUFJfTE9BRF9CKDE2KTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9QUl9M
T0FEXzgKLQlDS19QUl9MT0FEX0IoOCk7Ci0jZW5kaWYKLQotI2lmIDAKLQl1aW50NjRfdCBhWzJd
ID0gezAsIDB9LCBiWzJdID0gezB4MTExMTExMTE0NDQ0NDQ0NCwgMHgyMjIyMjIyMjY2NjY2NjY2
fTsKLQlwcmludGYoIiUiIFBSSXg2NCAiOiUiIFBSSXg2NCAiIC0+ICIsIGFbMF0sIGFbMV0pOwot
CWNrX3ByX2xvYWRfNjRfMigmYiwgJmEpOwotCXByaW50ZigiJSIgUFJJeDY0ICI6JSIgUFJJeDY0
ICJcbiIsIGFbMF0sIGFbMV0pOwotI2VuZGlmCi0KLQlyZXR1cm4gKDApOwotfQotCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wci92
YWxpZGF0ZS9ja19wcl9uLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdy
ZXNzaW9ucy9ja19wci92YWxpZGF0ZS9ja19wcl9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDgxZTM2MzkzMjI3MTQzZDhkNDBhN2FmNzYxYjQ5NzE3ZTk5M2NlM2EuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvdmFsaWRhdGUvY2tfcHJfbi5jCisrKyAv
ZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExIERhdmlkIEpv
c2VwaC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0j
aW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8Y2tfcHIu
aD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotI2RlZmluZSBSRVBFQVQgMjAwMDAwMAot
Ci0jZGVmaW5lIFRFU1RfTihLLCBTLCBULCBQLCBEKQkJCQkJXAotCXN0YXRpYyB2b2lkCQkJCQkJ
XAotCXJ1bl90ZXN0XyMjSyMjXyMjUyh2b2lkKQkJCQlcCi0JewkJCQkJCQlcCi0JCWludCBpLCBy
OwkJCQkJXAotCQlUIHggPSAwLCB5ID0gMDsJCQkJCVwKLQkJCQkJCQkJXAotCQlwdXRzKCIqKipU
RVNUSU5HIGNrX3ByXyIjSyJfIiNTIioqKiIpOwkJXAotCQljb21tb25fc3JhbmQoKHVuc2lnbmVk
IGludClnZXRwaWQoKSk7CQlcCi0JCWZvciAoaSA9IDA7IGkgPCBSRVBFQVQ7ICsraSkgewkJCVwK
LQkJCXIgPSBjb21tb25fcmFuZCgpOwkJCQlcCi0JCQl4ICs9IHI7CQkJCQlcCi0JCQl4ID0gUCB4
OwkJCQlcCi0JCQl5ICs9IHI7CQkJCQlcCi0JCQlja19wcl8jI0sjI18jI1MoJnkpOwkJCVwKLQkJ
fQkJCQkJCVwKLQkJCQkJCQkJXAotCQlwcmludGYoIlZhbHVlIG9mIG9wZXJhdGlvbiAiI0siIG9u
IDIwMDAwMDAgIglcCi0JCQkicmFuZG9tIG51bWJlcnNcbiIJCQlcCi0JCQkiXHR1c2luZyAiI1Ai
OiAlIiNEIixcbiIJCVwKLQkJCSJcdHVzaW5nIGNrX3ByXyIjSyJfIiNTIjogJSIjRCIsXG4iLAlc
Ci0JCQl4LCB5KTsJCQkJCVwKLQkJKHggPT0geSkgPyBwdXRzKCJTVUNDRVNTLiIpCQkJXAotCQkJ
IDogcHV0cygiRkFJTFVSRS4iKTsJCQlcCi0JCQkJCQkJCVwKLQkJcmV0dXJuOwkJCQkJCVwKLQl9
Ci0KLSNkZWZpbmUgR0VORVJBVEVfVEVTVChLLCBQKQkJCVwKLQlURVNUX04oSywgaW50LCBpbnQs
IFAsIGQpCQlcCi0JVEVTVF9OKEssIHVpbnQsIHVuc2lnbmVkIGludCwgUCwgdSkJXAotCXN0YXRp
YyB2b2lkCQkJCVwKLQlydW5fdGVzdF8jI0sodm9pZCkJCQlcCi0JewkJCQkJXAotCQlydW5fdGVz
dF8jI0sjI19pbnQoKTsJCVwKLQkJcnVuX3Rlc3RfIyNLIyNfdWludCgpOwkJXAotCQkJCQkJXAot
CQlyZXR1cm47CQkJCVwKLQl9Ci0KLUdFTkVSQVRFX1RFU1Qobm90LCB+KQotR0VORVJBVEVfVEVT
VChuZWcsIC0pCi0KLSN1bmRlZiBHRU5FUkFURV9URVNUCi0jdW5kZWYgVEVTVF9OCi0KLWludAot
bWFpbih2b2lkKQotewotCXJ1bl90ZXN0X25vdCgpOwotCXJ1bl90ZXN0X25lZygpOwotCi0JcmV0
dXJuICgwKTsKLX0KLQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19wci92YWxpZGF0ZS9ja19wcl9vci5jIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvdmFsaWRhdGUvY2tfcHJfb3Iu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc1ODBjMzgyZjU3ZTg1MjM5OGRlOTVl
NjFmOTQ0ODU3YTVjZDQ4OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19w
ci92YWxpZGF0ZS9ja19wcl9vci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgMjAwOSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
LSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
Ci0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5j
bHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4K
LSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGNrX3ByLmg+Ci0KLSNpbmNsdWRlICIu
Li8uLi9jb21tb24uaCIKLSNpZm5kZWYgUl9SRVBFQVQKLSNkZWZpbmUgUl9SRVBFQVQgMjAwMDAw
Ci0jZW5kaWYKLQotI2RlZmluZSBCTShtLCB3KSAodWludCMjbSMjX3QpKHVpbnQjI3cjI190KS0x
Ci0KLSNkZWZpbmUgQ0tfUFJfT1JfVCh3LCB2LCBkKQkJCQkJCQlcCi0JewkJCQkJCQkJCVwKLQkJ
dWludCMjdyMjX3QgdDsJCQkJCQkJXAotCQlja19wcl9vcl8jI3coJnQsIDFVTEwgPDwgKHcgLSAx
KSk7CQkJCVwKLQkJdCA9IHY7CQkJCQkJCQlcCi0JCWNrX3ByX29yXyMjdygmdCwgZCk7CQkJCQkJ
XAotCQlpZiAodCAhPSAodWludCMjdyMjX3QpKHYgfCBkKSkgewkJCQlcCi0JCQlwcmludGYoIkZB
SUwgWyIpOwkJCQkJXAotCQkJcHJpbnRmKCIlIiBQUkl1IyN3ICIgKCUiIFBSSXUjI3cgIikgLT4g
JSIgUFJJdSMjdyAiXVxuIixcCi0JCQkJCSh1aW50IyN3IyNfdCl2LCBkLCB0KTsJCQlcCi0JCQll
eGl0KEVYSVRfRkFJTFVSRSk7CQkJCQlcCi0JCX0JCQkJCQkJCVwKLQl9Ci0KLSNkZWZpbmUgQ0tf
UFJfT1JfQih3KQkJCQkJCVwKLQl7CQkJCQkJCVwKLQkJdW5zaWduZWQgaW50IF9fY2tfaSA9IDA7
CQkJXAotCQlwcmludGYoImNrX3ByX29yXyIgI3cgIjogIik7CQkJXAotCQlpZiAodyA8IDEwKQkJ
CQkJXAotCQkJcHJpbnRmKCIgIik7CQkJCVwKLQkJZm9yIChfX2NrX2kgPSAwOyBfX2NrX2kgPCBS
X1JFUEVBVDsgX19ja19pKyspIHsJXAotCQkJdWludCMjdyMjX3QgYSA9ICh1aW50IyN3IyNfdClj
b21tb25fcmFuZCgpOwlcCi0JCQl1aW50IyN3IyNfdCBiID0gKHVpbnQjI3cjI190KWNvbW1vbl9y
YW5kKCk7CVwKLQkJCUNLX1BSX09SX1QodywgYSwgYik7CQkJXAotCQl9CQkJCQkJXAotCQlyZ193
aWR0aCh3KTsJCQkJCVwKLQkJcHJpbnRmKCIgICBTVUNDRVNTXG4iKTsJCQkJXAotCX0KLQotI2Rl
ZmluZSBDS19QUl9PUl9XKG0sIHcpCQkJCQkJCQkJXAotCXsJCQkJCQkJCQkJCVwKLQkJdWludCMj
bSMjX3QgdCA9IDA7CQkJCQkJCQlcCi0JCWNrX3ByX29yXyMjdygodWludCMjdyMjX3QgKikodm9p
ZCAqKSZ0LCAtMSk7CQkJCQlcCi0JCWlmICh0ICE9IEJNKG0sIHcpKSB7CQkJCQkJCQlcCi0JCQlw
cmludGYoIiAgRkFJTCBbJSMiIFBSSXgjI20gIiAhPSAlIyIgUFJJeCMjbSAiXVxuIiwgdCwgQk0o
bSwgdykpOwlcCi0JCQlleGl0KEVYSVRfRkFJTFVSRSk7CQkJCQkJCVwKLQkJfQkJCQkJCQkJCQlc
Ci0JfQotCi1zdGF0aWMgdm9pZAotcmdfd2lkdGgoaW50IG0pCi17Ci0KLQkvKiBPdGhlciBhcmNo
aXRlY3R1cmVzIGFyZSBiaS1lbmRpYW4uICovCi0jaWYgIWRlZmluZWQoX194ODZfXykgJiYgIWRl
ZmluZWQoX194ODZfNjRfXykKLQlyZXR1cm47Ci0jZW5kaWYKLQotI2lmZGVmIENLX0ZfUFJfT1Jf
NjQKLQlpZiAobSA9PSA2NCkgewotI2lmIGRlZmluZWQoQ0tfRl9QUl9PUl8zMikKLQkJQ0tfUFJf
T1JfVyg2NCwgMzIpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDS19QUl9PUl8xNikKLQkJQ0tfUFJf
T1JfVyg2NCwgMTYpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDS19QUl9PUl84KQotCQlDS19QUl9P
Ul9XKDY0LCA4KTsKLSNlbmRpZgotCX0KLSNlbmRpZiAvKiBDS19QUl9PUl82NCAqLwotCi0jaWZk
ZWYgQ0tfRl9QUl9PUl8zMgotCWlmIChtID09IDMyKSB7Ci0jaWYgZGVmaW5lZChDS19GX1BSX09S
XzE2KQotCQlDS19QUl9PUl9XKDMyLCAxNik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENLX1BSX09S
XzgpCi0JCUNLX1BSX09SX1coMzIsIDgpOwotI2VuZGlmCi0JfQotI2VuZGlmIC8qIENLX1BSX09S
XzMyICovCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfT1JfMTYpICYmIGRlZmluZWQoQ0tfUFJfT1Jf
OCkKLQlpZiAobSA9PSAxNikgewotCQlDS19QUl9PUl9XKDE2LCA4KTsKLQl9Ci0jZW5kaWYgLyog
Q0tfUFJfT1JfMTYgJiYgQ0tfUFJfT1JfOCAqLwotCi0JcmV0dXJuOwotfQotCi1pbnQKLW1haW4o
dm9pZCkKLXsKLQotCWNvbW1vbl9zcmFuZCgodW5zaWduZWQgaW50KWdldHBpZCgpKTsKLQotI2lm
ZGVmIENLX0ZfUFJfT1JfNjQKLQlDS19QUl9PUl9CKDY0KTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tf
Rl9QUl9PUl8zMgotCUNLX1BSX09SX0IoMzIpOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX1BSX09S
XzE2Ci0JQ0tfUFJfT1JfQigxNik7Ci0jZW5kaWYKLQotI2lmZGVmIENLX0ZfUFJfT1JfOAotCUNL
X1BSX09SX0IoOCk7Ci0jZW5kaWYKLQotCXJldHVybiAoMCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRl
L2NrX3ByX3N0b3JlLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNz
aW9ucy9ja19wci92YWxpZGF0ZS9ja19wcl9zdG9yZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBlNGI4NTJiNGZjZDg0OTNiMTZlNDA3MjA2MWE3Yzc5NTA4Zjc4ZDk2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX3N0b3JlLmMK
KysrIC9kZXYvbnVsbApAQCAtMSwxNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5IFNh
bXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
LSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICIuLi8u
Li9jb21tb24uaCIKLSNpbmNsdWRlIDxja19wci5oPgotCi0jaW5jbHVkZSA8aW50dHlwZXMuaD4K
LSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRp
bnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2lmbmRl
ZiBSX1JFUEVBVAotI2RlZmluZSBSX1JFUEVBVCAyMDAwMDAKLSNlbmRpZgotCi0jZGVmaW5lIENL
X1BSX1NUT1JFX0IodykJCQkJCQkJCVwKLQl7CQkJCQkJCQkJCVwKLQkJdWludCMjdyMjX3QgdCA9
ICh1aW50IyN3IyNfdCktMSwgYSA9IDAsIGI7CQkJCVwKLQkJY2tfcHJfc3RvcmVfIyN3KCZiLCAx
VUxMIDw8ICh3IC0gMSkpOwkJCQkJXAotCQl1bnNpZ25lZCBpbnQgaTsJCQkJCQkJCVwKLQkJcHJp
bnRmKCJja19wcl9zdG9yZV8iICN3ICI6ICIpOwkJCQkJCVwKLQkJaWYgKHcgPCAxMCkJCQkJCQkJ
CVwKLQkJCXByaW50ZigiICIpOwkJCQkJCQlcCi0JCWNrX3ByX3N0b3JlXyMjdygmYSwgdCk7CQkJ
CQkJCVwKLQkJaWYgKGEgIT0gdCkgewkJCQkJCQkJXAotCQkJcHJpbnRmKCJGQUlMIFslIyIgUFJJ
eCMjdyAiICE9ICUjIiBQUkl4IyN3ICJdXG4iLCBhLCB0KTsJXAotCQkJZXhpdChFWElUX0ZBSUxV
UkUpOwkJCQkJCVwKLQkJfQkJCQkJCQkJCVwKLQkJZm9yIChpID0gMDsgaSA8IFJfUkVQRUFUOyBp
KyspIHsJCQkJCVwKLQkJCXQgPSAodWludCMjdyMjX3QpY29tbW9uX3JhbmQoKTsJCQkJCVwKLQkJ
CWNrX3ByX3N0b3JlXyMjdygmYSwgdCk7CQkJCQkJXAotCQkJaWYgKGEgIT0gdCkgewkJCQkJCQlc
Ci0JCQkJcHJpbnRmKCJGQUlMIFslIyIgUFJJeCMjdyAiICE9ICUjIiBQUkl4IyN3ICJdXG4iLCBh
LCB0KTtcCi0JCQkJZXhpdChFWElUX0ZBSUxVUkUpOwkJCQkJXAotCQkJfQkJCQkJCQkJXAotCQl9
CQkJCQkJCQkJXAotCQlyZ193aWR0aCh3KTsJCQkJCQkJCVwKLQkJcHJpbnRmKCJTVUNDRVNTXG4i
KTsJCQkJCQkJXAotCX0KLQotI2RlZmluZSBDS19QUl9TVE9SRV9XKG0sIHcpCQkJCQkJCVwKLQl7
CQkJCQkJCQkJXAotCQl1aW50IyNtIyNfdCBmID0gMDsJCQkJCQlcCi0JCXVpbnQjI3cjI190IGog
PSAodWludCMjdyMjX3QpLTE7CQkJCVwKLQkJY2tfcHJfc3RvcmVfIyN3KCh1aW50IyN3IyNfdCAq
KSh2b2lkICopJmYsIGopOwkJCVwKLQkJaWYgKGYgIT0gaikgewkJCQkJCQlcCi0JCQlwcmludGYo
IkZBSUwgWyUjIiBQUkl4IyNtICIgIT0gJSMiIFBSSXgjI3cgIl1cbiIsIGYsIGopO1wKLQkJCWV4
aXQoRVhJVF9GQUlMVVJFKTsJCQkJCVwKLQkJfQkJCQkJCQkJXAotCX0KLQotc3RhdGljIHZvaWQK
LXJnX3dpZHRoKGludCBtKQotewotCi0JLyogT3RoZXIgYXJjaGl0ZWN0dXJlcyBhcmUgYmktZW5k
aWFuLiAqLwotI2lmICFkZWZpbmVkKF9feDg2X18pICYmICFkZWZpbmVkKF9feDg2XzY0X18pCi0J
cmV0dXJuOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX1BSX1NUT1JFXzY0Ci0JaWYgKG0gPT0gNjQp
IHsKLSNpZiBkZWZpbmVkKENLX0ZfUFJfU1RPUkVfMzIpCi0JCUNLX1BSX1NUT1JFX1coNjQsIDMy
KTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ0tfUFJfU1RPUkVfMTYpCi0JCUNLX1BSX1NUT1JFX1co
NjQsIDE2KTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ0tfUFJfU1RPUkVfOCkKLQkJQ0tfUFJfU1RP
UkVfVyg2NCwgOCk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYgLyogQ0tfUFJfU1RPUkVfNjQgKi8KLQot
I2lmZGVmIENLX0ZfUFJfU1RPUkVfMzIKLQlpZiAobSA9PSAzMikgewotI2lmIGRlZmluZWQoQ0tf
Rl9QUl9TVE9SRV8xNikKLQkJQ0tfUFJfU1RPUkVfVygzMiwgMTYpOwotI2VuZGlmCi0jaWYgZGVm
aW5lZChDS19QUl9TVE9SRV84KQotCQlDS19QUl9TVE9SRV9XKDMyLCA4KTsKLSNlbmRpZgotCX0K
LSNlbmRpZiAvKiBDS19QUl9TVE9SRV8zMiAqLwotCi0jaWYgZGVmaW5lZChDS19GX1BSX1NUT1JF
XzE2KSAmJiBkZWZpbmVkKENLX1BSX1NUT1JFXzgpCi0JaWYgKG0gPT0gMTYpCi0JCUNLX1BSX1NU
T1JFX1coMTYsIDgpOwotI2VuZGlmIC8qIENLX1BSX1NUT1JFXzE2ICYmIENLX1BSX1NUT1JFXzgg
Ki8KLQotCXJldHVybjsKLX0KLQotaW50Ci1tYWluKHZvaWQpCi17Ci0jaWYgZGVmaW5lZChDS19G
X1BSX1NUT1JFX0RPVUJMRSkgJiYgZGVmaW5lZChDS19GX1BSX0xPQURfRE9VQkxFKQotCWRvdWJs
ZSBkOwotCi0JY2tfcHJfc3RvcmVfZG91YmxlKCZkLCAwLjApOwotCWlmIChja19wcl9sb2FkX2Rv
dWJsZSgmZCkgIT0gMC4wKSB7Ci0JCWNrX2Vycm9yKCJTdG9yZWQgMCBpbiBkb3VibGUsIGRpZCBu
b3QgZmluZCAwLlxuIik7Ci0JfQotI2VuZGlmCi0KLQljb21tb25fc3JhbmQoKHVuc2lnbmVkIGlu
dClnZXRwaWQoKSk7Ci0KLSNpZmRlZiBDS19GX1BSX1NUT1JFXzY0Ci0JQ0tfUFJfU1RPUkVfQig2
NCk7Ci0jZW5kaWYKLQotI2lmZGVmIENLX0ZfUFJfU1RPUkVfMzIKLQlDS19QUl9TVE9SRV9CKDMy
KTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9QUl9TVE9SRV8xNgotCUNLX1BSX1NUT1JFX0IoMTYp
OwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX1BSX1NUT1JFXzgKLQlDS19QUl9TVE9SRV9CKDgpOwot
I2VuZGlmCi0KLQlyZXR1cm4gKDApOwotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvdmFsaWRhdGUvY2tfcHJfc3ViLmMgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wci92YWxpZGF0
ZS9ja19wcl9zdWIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUxNTkxNDY0NTk3
NGMyOWZiZGJmZThlMDQyZTdjY2JhYzIzMWZmNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdy
ZXNzaW9ucy9ja19wci92YWxpZGF0ZS9ja19wcl9zdWIuYworKysgL2Rldi9udWxsCkBAIC0xLDE1
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDkgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICog
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8c3Rk
Ym9vbC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVk
ZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxja19wci5oPgot
Ci0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0jaWZuZGVmIFJfUkVQRUFUCi0jZGVmaW5lIFJf
UkVQRUFUIDIwMDAwMAotI2VuZGlmCi0KLSNkZWZpbmUgQ0tfUFJfU1VCX1QodywgdiwgZCkJCQkJ
CQkJCVwKLQl7CQkJCQkJCQkJCVwKLQkJdWludCMjdyMjX3QgdCA9IHY7CQkJCQkJCVwKLQkJY2tf
cHJfc3ViXyMjdygmdCwgZCk7CQkJCQkJCVwKLQkJaWYgKHQgIT0gKHVpbnQjI3cjI190KSh2IC0g
ZCkpIHsJCQkJCVwKLQkJCXByaW50ZigiRkFJTCBbIik7CQkJCQkJXAotCQkJcHJpbnRmKCIlIiBQ
Ukl1IyN3ICIgKCUiIFBSSXUjI3cgIikgLT4gJSIgUFJJdSMjdyAiXVxuIiwJXAotCQkJCQkodWlu
dCMjdyMjX3QpdiwgZCwgdCk7CQkJCVwKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsJCQkJCQlcCi0J
CX0JCQkJCQkJCQlcCi0JfQotCi0jZGVmaW5lIENLX1BSX1NVQl9CKHcpCQkJCQkJCQkJXAotCXsJ
CQkJCQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgX19ja19pID0gMDsJCQkJCQlcCi0JCXByaW50Zigi
Y2tfcHJfc3ViXyIgI3cgIjogIik7CQkJCQkJXAotCQlpZiAodyA8IDEwKQkJCQkJCQkJXAotCQkJ
cHJpbnRmKCIgIik7CQkJCQkJCVwKLQkJZm9yIChfX2NrX2kgPSAwOyBfX2NrX2kgPCBSX1JFUEVB
VDsgX19ja19pKyspIHsJCQkJXAotCQkJdWludCMjdyMjX3QgYSA9IGNvbW1vbl9yYW5kKCkgJSAo
KHVpbnQjI3cjI190KS0xIC8gMik7CQlcCi0JCQl1aW50IyN3IyNfdCBiID0gY29tbW9uX3JhbmQo
KSAlICgodWludCMjdyMjX3QpLTEgLyAyKTsJCVwKLQkJCUNLX1BSX1NVQl9UKHcsIGEsIGIpOwkJ
CQkJCVwKLQkJfQkJCQkJCQkJCVwKLQkJcmdfd2lkdGgodyk7CQkJCQkJCQlcCi0JCXByaW50Zigi
ICBTVUNDRVNTXG4iKTsJCQkJCQkJXAotCX0KLQotI2RlZmluZSBDS19QUl9TVUJfVyhtLCB3KQkJ
CQkJCQkJXAotCXsJCQkJCQkJCQkJXAotCQl1aW50IyNtIyNfdCB0ID0gMCwgciA9ICh1aW50IyNt
IyNfdCkodWludCMjdyMjX3QpLTE7CQkJXAotCQlja19wcl9zdWJfIyN3KCh1aW50IyN3IyNfdCAq
KSh2b2lkICopJnQsIDEpOwkJCQlcCi0JCWlmICh0ICE9IHIpIHsJCQkJCQkJCVwKLQkJCXByaW50
ZigiICBGQUlMIFslIyIgUFJJeCMjbSAiICE9ICUjIiBQUkl4IyNtICJdXG4iLCB0LCByKTsJXAot
CQkJZXhpdChFWElUX0ZBSUxVUkUpOwkJCQkJCVwKLQkJfQkJCQkJCQkJCVwKLQkJdCA9IDA7CQkJ
CQkJCQkJXAotCQlja19wcl9zdWJfIyN3KCh1aW50IyN3IyNfdCAqKSh2b2lkICopJnQsIC0xKTsJ
CQkJXAotCQlpZiAodCAhPSAxKSB7CQkJCQkJCQlcCi0JCQlwcmludGYoIiAgRkFJTCBbJSMiIFBS
SXgjI20gIiAhPSAxXVxuIiwgdCk7CQkJXAotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwkJCQkJCVwK
LQkJfQkJCQkJCQkJCVwKLQl9Ci0KLXN0YXRpYyB2b2lkCi1yZ193aWR0aChpbnQgbSkKLXsKLQot
CS8qIE90aGVyIGFyY2hpdGVjdHVyZXMgYXJlIGJpLWVuZGlhbi4gKi8KLSNpZiAhZGVmaW5lZChf
X3g4Nl9fKSAmJiAhZGVmaW5lZChfX3g4Nl82NF9fKQotCXJldHVybjsKLSNlbmRpZgotCi0jaWZk
ZWYgQ0tfRl9QUl9TVUJfNjQKLQlpZiAobSA9PSA2NCkgewotI2lmIGRlZmluZWQoQ0tfRl9QUl9T
VUJfMzIpCi0JCUNLX1BSX1NVQl9XKDY0LCAzMik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENLX1BS
X1NVQl8xNikKLQkJQ0tfUFJfU1VCX1coNjQsIDE2KTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ0tf
UFJfU1VCXzgpCi0JCUNLX1BSX1NVQl9XKDY0LCA4KTsKLSNlbmRpZgotCX0KLSNlbmRpZiAvKiBD
S19QUl9TVUJfNjQgKi8KLQotI2lmZGVmIENLX0ZfUFJfU1VCXzMyCi0JaWYgKG0gPT0gMzIpIHsK
LSNpZiBkZWZpbmVkKENLX0ZfUFJfU1VCXzE2KQotCQlDS19QUl9TVUJfVygzMiwgMTYpOwotI2Vu
ZGlmCi0jaWYgZGVmaW5lZChDS19QUl9TVUJfOCkKLQkJQ0tfUFJfU1VCX1coMzIsIDgpOwotI2Vu
ZGlmCi0JfQotI2VuZGlmIC8qIENLX1BSX1NVQl8zMiAqLwotCi0jaWYgZGVmaW5lZChDS19GX1BS
X1NVQl8xNikgJiYgZGVmaW5lZChDS19QUl9TVUJfOCkKLQlpZiAobSA9PSAxNikgewotCQlDS19Q
Ul9TVUJfVygxNiwgOCk7Ci0JfQotI2VuZGlmIC8qIENLX1BSX1NVQl8xNiAmJiBDS19QUl9TVUJf
OCAqLwotCi0JcmV0dXJuOwotfQotCi1pbnQKLW1haW4odm9pZCkKLXsKLQotCWNvbW1vbl9zcmFu
ZCgodW5zaWduZWQgaW50KWdldHBpZCgpKTsKLQotI2lmZGVmIENLX0ZfUFJfU1VCXzY0Ci0JQ0tf
UFJfU1VCX0IoNjQpOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX1BSX1NVQl8zMgotCUNLX1BSX1NV
Ql9CKDMyKTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9QUl9TVUJfMTYKLQlDS19QUl9TVUJfQigx
Nik7Ci0jZW5kaWYKLQotI2lmZGVmIENLX0ZfUFJfU1VCXzgKLQlDS19QUl9TVUJfQig4KTsKLSNl
bmRpZgotCi0JcmV0dXJuICgwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcHIvdmFsaWRhdGUvY2tfcHJfdW5hcnkuYyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlk
YXRlL2NrX3ByX3VuYXJ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMzAwY2Q5
NTVlOGUzZDMzOWE5M2FhZjgzNDQ4ODI4MGRiNTNiZDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2sv
cmVncmVzc2lvbnMvY2tfcHIvdmFsaWRhdGUvY2tfcHJfdW5hcnkuYworKysgL2Rldi9udWxsCkBA
IC0xLDExNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEgRGF2aWQgSm9zZXBoLgotICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICog
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAq
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
Ci0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxz
dGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxja19wci5oPgotCi0jZGVm
aW5lIFJFUEVBVCAyMDAwMDAwCi0KLSNkZWZpbmUgVEVTVF9VTkFSWShLLCBTLCBNLCBULCBQLCBE
LCBIKQkJCQkJCQkJCVwKLQlzdGF0aWMgdm9pZAkJCQkJCQkJCQkJXAotCXRlc3RfIyNLIyNfIyNT
KE0gKnRhcmdldCkJCQkJCQkJCQlcCi0JewkJCQkJCQkJCQkJCVwKLQkJKnRhcmdldCA9ICp0YXJn
ZXQgUCAxOwkJCQkJCQkJCVwKLQkJCQkJCQkJCQkJCQlcCi0JCXJldHVybjsJCQkJCQkJCQkJCVwK
LQl9CQkJCQkJCQkJCQkJXAotCXN0YXRpYyB2b2lkCQkJCQkJCQkJCQlcCi0JdGVzdF8jI0sjI18j
I1MjI196ZXJvKE0gKnRhcmdldCwgYm9vbCAqemVybykJCQkJCQkJXAotCXsJCQkJCQkJCQkJCQlc
Ci0JCSp6ZXJvID0gKnRhcmdldCA9PSBIOwkJCQkJCQkJCVwKLQkJKnRhcmdldCA9ICp0YXJnZXQg
UCAxOwkJCQkJCQkJCVwKLQkJCQkJCQkJCQkJCQlcCi0JCXJldHVybjsJCQkJCQkJCQkJCVwKLQl9
CQkJCQkJCQkJCQkJXAotCXN0YXRpYyB2b2lkCQkJCQkJCQkJCQlcCi0JcnVuX3Rlc3RfIyNLIyNf
IyNTKGJvb2wgdXNlX3plcm8pCQkJCQkJCQlcCi0JewkJCQkJCQkJCQkJCVwKLQkJaW50IGk7CQkJ
CQkJCQkJCQlcCi0JCVQgeCA9IDEsIHkgPSAxOwkJCQkJCQkJCQlcCi0JCWJvb2wgemVyb194ID0g
ZmFsc2UsIHplcm9feSA9IGZhbHNlOwkJCQkJCQlcCi0JCQkJCQkJCQkJCQkJXAotCQl1c2VfemVy
byA/IHB1dHMoIioqKlRFU1RJTkcgY2tfcHJfIiNLIl8iI1MiX3plcm8qKioiKQkJCQkJXAotCQkJ
IDogcHV0cygiKioqVEVTVElORyBja19wcl8iI0siXyIjUyIqKioiKTsJCQkJCVwKLQkJZm9yIChp
ID0gMDsgaSA8IFJFUEVBVDsgKytpKSB7CQkJCQkJCQlcCi0JCQlpZiAodXNlX3plcm8pIHsJCQkJ
CQkJCQlcCi0JCQkJdGVzdF8jI0sjI18jI1MjI196ZXJvKCZ4LCAmemVyb194KTsJCQkJCVwKLQkJ
CQlja19wcl8jI0sjI18jI1MjI196ZXJvKCZ5LCAmemVyb195KTsJCQkJCVwKLQkJCX0JCQkJCQkJ
CQkJXAotCQkJZWxzZSB7CQkJCQkJCQkJCVwKLQkJCQl0ZXN0XyMjSyMjXyMjUygmeCk7CQkJCQkJ
CVwKLQkJCQlja19wcl8jI0sjI18jI1MoJnkpOwkJCQkJCQlcCi0JCQl9CQkJCQkJCQkJCVwKLQkJ
CQkJCQkJCQkJCQlcCi0JCQlpZiAoeCAhPSB5IHx8IHplcm9feCAhPSB6ZXJvX3kpIHsJCQkJCQlc
Ci0JCQkJcHJpbnRmKCJTZXJpYWwoJSIjRCIpIGFuZCBja19wciglIiNEIikiCQkJCQlcCi0JCQkJ
CSNLIl8iI1MiIGRvIG5vdCBtYXRjaC5cbiIJCQkJCVwKLQkJCQkJIkZBSUxVUkUuXG4iLAkJCQkJ
CQlcCi0JCQkJCXgsIHkpOwkJCQkJCQkJXAotCQkJCQkJCQkJCQkJCVwKLQkJCQlyZXR1cm47CQkJ
CQkJCQkJXAotCQkJfQkJCQkJCQkJCQlcCi0JCQkJCQkJCQkJCQkJXAotCQkJaWYgKHplcm9feCkJ
CQkJCQkJCQlcCi0JCQkJcHJpbnRmKCJWYXJpYWJsZXMgYXJlIHplcm8gYXQgaXRlcmF0aW9uICVk
XG4iLCBpKTsJCQlcCi0JCX0JCQkJCQkJCQkJCVwKLQkJCQkJCQkJCQkJCQlcCi0JCQkJCQkJCQkJ
CQkJXAotCQlwcmludGYoIlx0c2VyaWFsXyIjSyJfIiNTIjogJSIjRCJcbiIJCQkJCQkJXAotCQkJ
Ilx0Y2tfcHJfIiNLIl8iI1MiOiAlIiNEIlxuIgkJCQkJCQlcCi0JCQkiU1VDQ0VTUy5cbiIsCQkJ
CQkJCQkJXAotCQkJeCwgeSk7CQkJCQkJCQkJCVwKLQkJCQkJCQkJCQkJCQlcCi0JCXJldHVybjsJ
CQkJCQkJCQkJCVwKLQl9Ci0KLSNkZWZpbmUgR0VORVJBVEVfVEVTVChLLCBQLCBZLCBaKQkJCQkJ
XAotCVRFU1RfVU5BUlkoSywgaW50LCBpbnQsIGludCwgUCwgZCwgWSkJCQkJXAotCVRFU1RfVU5B
UlkoSywgdWludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIFAsIHUsIFopCVwKLQlzdGF0
aWMgdm9pZAkJCQkJCQlcCi0JcnVuX3Rlc3RfIyNLKHZvaWQpCQkJCQkJXAotCXsJCQkJCQkJCVwK
LQkJcnVuX3Rlc3RfIyNLIyNfaW50KGZhbHNlKTsJCQkJXAotCQlydW5fdGVzdF8jI0sjI19pbnQo
dHJ1ZSk7CQkJCVwKLQkJcnVuX3Rlc3RfIyNLIyNfdWludChmYWxzZSk7CQkJCVwKLQkJcnVuX3Rl
c3RfIyNLIyNfdWludCh0cnVlKTsJCQkJXAotCX0KLQotR0VORVJBVEVfVEVTVChpbmMsICssIC0x
LCBVSU5UX01BWCkKLUdFTkVSQVRFX1RFU1QoZGVjLCAtLCAxLCAxKQotCi0jdW5kZWYgR0VORVJB
VEVfVEVTVAotI3VuZGVmIFRFU1RfVU5BUlkKLQotaW50Ci1tYWluKHZvaWQpCi17Ci0JcnVuX3Rl
c3RfaW5jKCk7Ci0JcnVuX3Rlc3RfZGVjKCk7Ci0KLQlyZXR1cm4gKDApOwotfQotCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19wci92
YWxpZGF0ZS9ja19wcl94b3IuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3Jl
Z3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX3hvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0NTE1Y2M0NTIzNmQwMDkxZmEzNzIzOTY5Zjk0MzRiZDA4NzYzYTAxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3ByL3ZhbGlkYXRlL2NrX3ByX3hvci5j
CisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOSBT
YW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0g
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
Ci0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8aW50
dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNs
dWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4K
LQotI2luY2x1ZGUgPGNrX3ByLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIKLSNpZm5k
ZWYgUl9SRVBFQVQKLSNkZWZpbmUgUl9SRVBFQVQgMjAwMDAwCi0jZW5kaWYKLQotI2RlZmluZSBC
TShtLCB3KSAoKHVpbnQjI20jI190KS0xIDw8ICh3KSkKLQotI2RlZmluZSBDS19QUl9YT1JfVCh3
LCB2LCBkKQkJCQkJCQlcCi0JewkJCQkJCQkJCVwKLQkJdWludCMjdyMjX3QgdCA9IHY7CQkJCQkJ
XAotCQlja19wcl94b3JfIyN3KCZ0LCBkKTsJCQkJCQlcCi0JCWlmICh0ICE9ICh1aW50IyN3IyNf
dCkodiBeIGQpKSB7CQkJCVwKLQkJCXByaW50ZigiRkFJTCBbIik7CQkJCQlcCi0JCQlwcmludGYo
IiUiIFBSSXUjI3cgIiAoJSIgUFJJdSMjdyAiKSAtPiAlIiBQUkl1IyN3ICJdXG4iLFwKLQkJCQkJ
KHVpbnQjI3cjI190KXYsIGQsIHQpOwkJCVwKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsJCQkJCVwK
LQkJfQkJCQkJCQkJXAotCX0KLQotI2RlZmluZSBDS19QUl9YT1JfQih3KQkJCQkJCVwKLQl7CQkJ
CQkJCVwKLQkJdW5zaWduZWQgaW50IF9fY2tfaSA9IDA7CQkJXAotCQlwcmludGYoImNrX3ByX3hv
cl8iICN3ICI6ICIpOwkJCVwKLQkJaWYgKHcgPCAxMCkJCQkJCVwKLQkJCXByaW50ZigiICIpOwkJ
CQlcCi0JCWZvciAoX19ja19pID0gMDsgX19ja19pIDwgUl9SRVBFQVQ7IF9fY2tfaSsrKSB7CVwK
LQkJCXVpbnQjI3cjI190IGEgPSAodWludCMjdyMjX3QpY29tbW9uX3JhbmQoKTsJXAotCQkJdWlu
dCMjdyMjX3QgYiA9ICh1aW50IyN3IyNfdCljb21tb25fcmFuZCgpOwlcCi0JCQlDS19QUl9YT1Jf
VCh3LCBhLCBiKTsJCQlcCi0JCX0JCQkJCQlcCi0JCXJnX3dpZHRoKHcpOwkJCQkJXAotCQlwcmlu
dGYoIiAgU1VDQ0VTU1xuIik7CQkJCVwKLQl9Ci0KLSNkZWZpbmUgQ0tfUFJfWE9SX1cobSwgdykJ
CQkJCQkJCQlcCi0JewkJCQkJCQkJCQkJXAotCQl1aW50IyNtIyNfdCB0ID0gLTE7CQkJCQkJCQlc
Ci0JCWNrX3ByX3hvcl8jI3coKHVpbnQjI3cjI190ICopKHZvaWQgKikmdCwgLTEpOwkJCQkJXAot
CQlpZiAodCAhPSBCTShtLCB3KSkgewkJCQkJCQkJXAotCQkJcHJpbnRmKCIgIEZBSUwgWyUjIiBQ
Ukl4IyNtICIgIT0gJSMiIFBSSXgjI20gIl1cbiIsIHQsIEJNKG0sIHcpKTsJXAotCQkJZXhpdChF
WElUX0ZBSUxVUkUpOwkJCQkJCQlcCi0JCX0JCQkJCQkJCQkJXAotCX0KLQotc3RhdGljIHZvaWQK
LXJnX3dpZHRoKGludCBtKQotewotCi0JLyogT3RoZXIgYXJjaGl0ZWN0dXJlcyBhcmUgYmktZW5k
aWFuLiAqLwotI2lmICFkZWZpbmVkKF9feDg2X18pICYmICFkZWZpbmVkKF9feDg2XzY0X18pCi0J
cmV0dXJuOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX1BSX1hPUl82NAotCWlmIChtID09IDY0KSB7
Ci0jaWYgZGVmaW5lZChDS19GX1BSX1hPUl8zMikKLQkJQ0tfUFJfWE9SX1coNjQsIDMyKTsKLSNl
bmRpZgotI2lmIGRlZmluZWQoQ0tfUFJfWE9SXzE2KQotCQlDS19QUl9YT1JfVyg2NCwgMTYpOwot
I2VuZGlmCi0jaWYgZGVmaW5lZChDS19QUl9YT1JfOCkKLQkJQ0tfUFJfWE9SX1coNjQsIDgpOwot
I2VuZGlmCi0JfQotI2VuZGlmIC8qIENLX1BSX1hPUl82NCAqLwotCi0jaWZkZWYgQ0tfRl9QUl9Y
T1JfMzIKLQlpZiAobSA9PSAzMikgewotI2lmIGRlZmluZWQoQ0tfRl9QUl9YT1JfMTYpCi0JCUNL
X1BSX1hPUl9XKDMyLCAxNik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENLX1BSX1hPUl84KQotCQlD
S19QUl9YT1JfVygzMiwgOCk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYgLyogQ0tfUFJfWE9SXzMyICov
Ci0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfWE9SXzE2KSAmJiBkZWZpbmVkKENLX1BSX1hPUl84KQot
CWlmIChtID09IDE2KSB7Ci0JCUNLX1BSX1hPUl9XKDE2LCA4KTsKLQl9Ci0jZW5kaWYgLyogQ0tf
UFJfWE9SXzE2ICYmIENLX1BSX1hPUl84ICovCi0KLQlyZXR1cm47Ci19Ci0KLWludAotbWFpbih2
b2lkKQotewotCi0JY29tbW9uX3NyYW5kKCh1bnNpZ25lZCBpbnQpZ2V0cGlkKCkpOwotCi0jaWZk
ZWYgQ0tfRl9QUl9YT1JfNjQKLQlDS19QUl9YT1JfQig2NCk7Ci0jZW5kaWYKLQotI2lmZGVmIENL
X0ZfUFJfWE9SXzMyCi0JQ0tfUFJfWE9SX0IoMzIpOwotI2VuZGlmCi0KLSNpZmRlZiBDS19GX1BS
X1hPUl8xNgotCUNLX1BSX1hPUl9CKDE2KTsKLSNlbmRpZgotCi0jaWZkZWYgQ0tfRl9QUl9YT1Jf
OAotCUNLX1BSX1hPUl9CKDgpOwotI2VuZGlmCi0KLQlyZXR1cm4gKDApOwotfQotCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19xdWV1
ZS92YWxpZGF0ZS9NYWtlZmlsZSBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3Jl
Z3Jlc3Npb25zL2NrX3F1ZXVlL3ZhbGlkYXRlL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkNmJlM2RjMzlkNWZmMDU3MWUxY2IxMGMzMmUzNzRkYjZiOTRjMDU2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3F1ZXVlL3ZhbGlkYXRlL01ha2VmaWxl
CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLlBIT05ZOiBjaGVjayBjbGVhbiBkaXN0
cmlidXRpb24KLQotSEVBREVSPS4uLy4uLy4uL2luY2x1ZGUvY2tfcXVldWUuaAotT0JKRUNUUz1j
a19saXN0IGNrX3NsaXN0IGNrX3N0YWlscQotCi1hbGw6ICQoT0JKRUNUUykKLQotY2hlY2s6IGFs
bAotCS4vY2tfbGlzdCAkKENPUkVTKSA1Ci0JLi9ja19zbGlzdCAkKENPUkVTKSA1Ci0JLi9ja19z
dGFpbHEgJChDT1JFUykgMTAwMDAwMAotCi1ja19saXN0OiAkKEhFQURFUikgY2tfbGlzdC5jCi0J
JChDQykgJChDRkxBR1MpIC1vIGNrX2xpc3QgY2tfbGlzdC5jCi0KLWNrX3NsaXN0OiAkKEhFQURF
UikgY2tfc2xpc3QuYwotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBja19zbGlzdCBja19zbGlzdC5jCi0K
LWNrX3N0YWlscTogJChIRUFERVIpIGNrX3N0YWlscS5jCi0JJChDQykgJChDRkxBR1MpIC1vIGNr
X3N0YWlscSBja19zdGFpbHEuYwotCi1jbGVhbjoKLQlybSAtcmYgKn4gKi5vICQoT0JKRUNUUykg
Ki5kU1lNICouZXhlCi0KLWluY2x1ZGUgLi4vLi4vLi4vYnVpbGQvcmVncmVzc2lvbnMuYnVpbGQK
LUNGTEFHUys9JChQVEhSRUFEX0NGTEFHUykgLURfR05VX1NPVVJDRQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcXVldWUvdmFsaWRh
dGUvY2tfbGlzdC5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lv
bnMvY2tfcXVldWUvdmFsaWRhdGUvY2tfbGlzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkYWE0OGIxYjk4Y2U0YjJmMzA4N2I4Nzc1N2NkYTBiM2FkYTNmMDFhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3F1ZXVlL3ZhbGlkYXRlL2NrX2xpc3QuYworKysg
L2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTItMjAxNSBT
YW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0g
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
Ci0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8YXNz
ZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRl
IDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8Y2tfcXVldWUuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2Nv
bW1vbi5oIgotCi1zdHJ1Y3QgdGVzdCB7Ci0JaW50IHZhbHVlOwotCUNLX0xJU1RfRU5UUlkodGVz
dCkgbGlzdF9lbnRyeTsKLX07Ci1zdGF0aWMgQ0tfTElTVF9IRUFEKHRlc3RfbGlzdCwgdGVzdCkg
aGVhZCA9IENLX0xJU1RfSEVBRF9JTklUSUFMSVpFUihoZWFkKTsKLQotc3RhdGljIGludCBnb2Fs
OwotCi1zdGF0aWMgdm9pZAotdGVzdF9mb3JlYWNoKHZvaWQpCi17Ci0Jc3RydWN0IHRlc3QgKm4s
ICpuZXh0LCAqc2FmZTsKLQlpbnQgaSwgcyA9IDAsIGogPSAwLCBrID0gMDsKLQotCWZvciAoaSA9
IGdvYWw7IGkgIT0gMDsgaSA9IGdvYWwpIHsKLQkJcyA9IDA7Ci0KLQkJQ0tfTElTVF9GT1JFQUNI
KG4sICZoZWFkLCBsaXN0X2VudHJ5KSB7Ci0JCQlqKys7Ci0JCQlpZiAocyA9PSAwKQotCQkJCXMg
PSBuLT52YWx1ZTsKLQkJCWVsc2UKLQkJCQlzID0gcyAtIDE7Ci0KLQkJCWlmIChuLT52YWx1ZSAh
PSBzKSB7Ci0JCQkJY2tfZXJyb3IoIlxuRXhwZWN0ZWQgJWQsIGJ1dCBnb3QgJWQuXG4iLAotCQkJ
CSAgICBzLCBuLT52YWx1ZSk7Ci0JCQl9Ci0KLQkJCW5leHQgPSBDS19MSVNUX05FWFQobiwgbGlz
dF9lbnRyeSk7Ci0JCQlpZiAobmV4dCAhPSBOVUxMICYmIG5leHQtPnZhbHVlICE9IHMgLSAxKSB7
Ci0JCQkJY2tfZXJyb3IoIlxuRXhwZWN0ZWQgJWQsIGJ1dCBnb3QgJWQuXG4iLAotCQkJCSAgICBz
LCBuZXh0LT52YWx1ZSk7Ci0JCQl9Ci0KLQkJCWktLTsKLQkJfQotCi0JCWlmIChpID09IDApCi0J
CQlicmVhazsKLQotCQlzID0gMDsKLQkJQ0tfTElTVF9GT1JFQUNIX1NBRkUobiwgJmhlYWQsIGxp
c3RfZW50cnksIHNhZmUpIHsKLQkJCWsrKzsKLQotCQkJaWYgKHMgPT0gMCkKLQkJCQlzID0gbi0+
dmFsdWU7Ci0JCQllbHNlCi0JCQkJcyA9IHMgLSAxOwotCi0JCQlpZiAobi0+dmFsdWUgIT0gcykg
ewotCQkJCWNrX2Vycm9yKCJcbkV4cGVjdGVkICVkLCBidXQgZ290ICVkLlxuIiwKLQkJCQkgICAg
cywgbi0+dmFsdWUpOwotCQkJfQotCi0JCQluZXh0ID0gQ0tfTElTVF9ORVhUKG4sIGxpc3RfZW50
cnkpOwotCQkJaWYgKG5leHQgIT0gTlVMTCAmJiBuZXh0LT52YWx1ZSAhPSBzIC0gMSkgewotCQkJ
CWNrX2Vycm9yKCJcbkV4cGVjdGVkICVkLCBidXQgZ290ICVkLlxuIiwKLQkJCQkgICAgcywgbmV4
dC0+dmFsdWUpOwotCQkJfQotCi0JCQlpLS07Ci0JCX0KLQotCQlpZiAoaSA9PSAwIHx8IENLX0xJ
U1RfRU1QVFkoJmhlYWQpID09IHRydWUpCi0JCQlicmVhazsKLQl9Ci0KLQlmcHJpbnRmKHN0ZGVy
ciwgIiglZCwgJWQpICIsIGosIGspOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgKgotZXhl
Y3V0ZSh2b2lkICpjKQotewotCi0JKHZvaWQpYzsKLQl0ZXN0X2ZvcmVhY2goKTsKLQlyZXR1cm4g
TlVMTDsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JcHRocmVh
ZF90ICp0aHJlYWQ7Ci0Jc3RydWN0IHRlc3QgKm4sIGEsIGI7Ci0Jc3RydWN0IHRlc3RfbGlzdCB0
YXJnZXQ7Ci0JaW50IG5fdGhyZWFkcywgaTsKLQotCWlmIChhcmdjICE9IDMpIHsKLQkJY2tfZXJy
b3IoIlVzYWdlOiAlcyA8bnVtYmVyIG9mIHRocmVhZHM+IDxudW1iZXIgb2YgbGlzdCBlbnRyaWVz
PlxuIiwgYXJndlswXSk7Ci0JfQotCi0Jbl90aHJlYWRzID0gYXRvaShhcmd2WzFdKTsKLQlpZiAo
bl90aHJlYWRzIDwgMSkgewotCQlja19lcnJvcigiRVJST1I6IE51bWJlciBvZiB0aHJlYWRzIG11
c3QgYmUgPj0gMS5cbiIpOwotCX0KLQotCXRocmVhZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90
KSAqIG5fdGhyZWFkcyk7Ci0JYXNzZXJ0KHRocmVhZCAhPSBOVUxMKTsKLQotCWdvYWwgPSBhdG9p
KGFyZ3ZbMl0pOwotCWlmIChnb2FsIDwgNCkgewotCQlja19lcnJvcigiRVJST1I6IE51bWJlciBv
ZiBlbnRyaWVzIG11c3QgYmUgPj0gNC5cbiIpOwotCX0KLQotCWZwcmludGYoc3RkZXJyLCAiQmVn
aW5uaW5nIHNlcmlhbCB0ZXN0Li4uIik7Ci0JQ0tfTElTVF9JTklUKCZoZWFkKTsKLQotCWZvciAo
aSA9IDE7IGkgPD0gZ29hbDsgaSsrKSB7Ci0JCW4gPSBtYWxsb2Moc2l6ZW9mICpuKTsKLQkJYXNz
ZXJ0KG4gIT0gTlVMTCk7Ci0JCW4tPnZhbHVlID0gaTsKLQkJQ0tfTElTVF9JTlNFUlRfSEVBRCgm
aGVhZCwgbiwgbGlzdF9lbnRyeSk7Ci0JfQotCi0JdGVzdF9mb3JlYWNoKCk7Ci0KLQlmb3IgKGkg
PSAxOyBpIDw9IGdvYWw7IGkrKykgewotCQluID0gQ0tfTElTVF9GSVJTVCgmaGVhZCk7Ci0JCUNL
X0xJU1RfUkVNT1ZFKG4sIGxpc3RfZW50cnkpOwotCQlmcmVlKG4pOwotCX0KLQotCUNLX0xJU1Rf
SU5TRVJUX0hFQUQoJmhlYWQsICZhLCBsaXN0X2VudHJ5KTsKLQlDS19MSVNUX0lOU0VSVF9IRUFE
KCZoZWFkLCAmYiwgbGlzdF9lbnRyeSk7Ci0JQ0tfTElTVF9SRU1PVkUoJmEsIGxpc3RfZW50cnkp
OwotCWlmIChDS19MSVNUX0ZJUlNUKCZoZWFkKSAhPSAmYikKLQkJY2tfZXJyb3IoIkxpc3QgaXMg
aW4gaW52YWxpZCBzdGF0ZS5cbiIpOwotCUNLX0xJU1RfUkVNT1ZFKCZiLCBsaXN0X2VudHJ5KTsK
LQotCWlmIChDS19MSVNUX0VNUFRZKCZoZWFkKSA9PSBmYWxzZSkgewotCQlja19lcnJvcigiTGlz
dCBpcyBub3QgZW1wdHkgYWZ0ZXIgYnVsayByZW1vdmFsLlxuIik7Ci0JfQotCi0JQ0tfTElTVF9J
TlNFUlRfSEVBRCgmaGVhZCwgJmEsIGxpc3RfZW50cnkpOwotCUNLX0xJU1RfSU5TRVJUX0FGVEVS
KCZhLCAmYiwgbGlzdF9lbnRyeSk7Ci0KLQlpZiAoQ0tfTElTVF9ORVhUKCZiLCBsaXN0X2VudHJ5
KSAhPSBOVUxMKQotCQlja19lcnJvcigiSW5zZXJ0ZWQgaXRlbSBhZnRlciBsYXN0LCBpdCBzaG91
bGQgbm90IGhhdmUgbm8gbmV4dC5cbiIpOwotCi0JQ0tfTElTVF9JTklUKCZoZWFkKTsKLQotCUNL
X0xJU1RfSU5TRVJUX0hFQUQoJmhlYWQsICZhLCBsaXN0X2VudHJ5KTsKLQlDS19MSVNUX0lOU0VS
VF9CRUZPUkUoJmEsICZiLCBsaXN0X2VudHJ5KTsKLQotCWlmIChDS19MSVNUX05FWFQoJmIsIGxp
c3RfZW50cnkpICE9ICZhKQotCQlja19lcnJvcigiSW5zZXJ0ZWQgaXRlbSBiZWZvcmUgbGFzdCwg
aXQgc2hvdWxkIHBvaW50IHRvIGxhc3QuXG4iKTsKLQotCUNLX0xJU1RfSU5JVCgmaGVhZCk7Ci0J
ZnByaW50ZihzdGRlcnIsICJkb25lIChzdWNjZXNzKVxuIik7Ci0KLQlmcHJpbnRmKHN0ZGVyciwg
IkJlZ2lubmluZyBwYXJhbGxlbCB0cmF2ZXJzYWwuLi4iKTsKLQotCW4gPSBtYWxsb2Moc2l6ZW9m
ICpuKTsKLQlhc3NlcnQobiAhPSBOVUxMKTsKLQluLT52YWx1ZSA9IDE7Ci0JQ0tfTElTVF9JTlNF
UlRfSEVBRCgmaGVhZCwgbiwgbGlzdF9lbnRyeSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbl90aHJl
YWRzOyBpKyspIHsKLQkJaW50IHIgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkW2ldLCBOVUxMLCBl
eGVjdXRlLCBOVUxMKTsKLQkJYXNzZXJ0KHIgPT0gMCk7Ci0JfQotCi0JZm9yIChpID0gMjsgaSA8
PSBnb2FsOyBpKyspIHsKLQkJdm9sYXRpbGUgaW50IGo7Ci0KLQkJbiA9IG1hbGxvYyhzaXplb2Yg
Km4pOwotCQlhc3NlcnQobiAhPSBOVUxMKTsKLQkJbi0+dmFsdWUgPSBpOwotCQlDS19MSVNUX0lO
U0VSVF9IRUFEKCZoZWFkLCBuLCBsaXN0X2VudHJ5KTsKLQkJZm9yIChqID0gMDsgaiA8PSAxMDAw
OyBqKyspOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBuX3RocmVhZHM7IGkrKykKLQkJcHRocmVh
ZF9qb2luKHRocmVhZFtpXSwgTlVMTCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbl90aHJlYWRzOyBp
KyspIHsKLQkJaW50IHIgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkW2ldLCBOVUxMLCBleGVjdXRl
LCBOVUxMKTsKLQkJYXNzZXJ0KHIgPT0gMCk7Ci0JfQotCi0JQ0tfTElTVF9NT1ZFKCZ0YXJnZXQs
ICZoZWFkLCBsaXN0X2VudHJ5KTsKLQotCWZvciAoaSA9IDE7IGkgPD0gZ29hbDsgaSsrKSB7Ci0J
CXZvbGF0aWxlIGludCBqOwotCi0JCWlmIChDS19MSVNUX0VNUFRZKCZ0YXJnZXQpID09IGZhbHNl
KSB7Ci0JCQlzdHJ1Y3QgdGVzdCAqciA9IENLX0xJU1RfRklSU1QoJnRhcmdldCk7Ci0JCQlDS19M
SVNUX1JFTU9WRShyLCBsaXN0X2VudHJ5KTsKLQkJfQotCi0JCWZvciAoaiA9IDA7IGogPD0gMTAw
MDsgaisrKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbl90aHJlYWRzOyBpKyspCi0JCXB0aHJl
YWRfam9pbih0aHJlYWRbaV0sIE5VTEwpOwotCi0JZnByaW50ZihzdGRlcnIsICJkb25lIChzdWNj
ZXNzKVxuIik7Ci0JcmV0dXJuICgwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcXVldWUvdmFsaWRhdGUvY2tfc2xpc3Qu
YyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3F1ZXVl
L3ZhbGlkYXRlL2NrX3NsaXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZGYy
ZWYxNTU4NTg1NzYxOTZhNzgwMDI4MTEwZTg0MzBiYzU4ODkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Y2svcmVncmVzc2lvbnMvY2tfcXVldWUvdmFsaWRhdGUvY2tfc2xpc3QuYworKysgL2Rldi9udWxs
CkBAIC0xLDIxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTItMjAxNSBTYW15IEFsIEJh
aHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0j
aW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxwdGhyZWFk
Lmg+Ci0jaW5jbHVkZSA8Y2tfcXVldWUuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgot
Ci1zdHJ1Y3QgdGVzdCB7Ci0JaW50IHZhbHVlOwotCUNLX1NMSVNUX0VOVFJZKHRlc3QpIGxpc3Rf
ZW50cnk7Ci19Owotc3RhdGljIENLX1NMSVNUX0hFQUQodGVzdF9saXN0LCB0ZXN0KSBoZWFkID0g
Q0tfU0xJU1RfSEVBRF9JTklUSUFMSVpFUihoZWFkKTsKLQotc3RhdGljIGludCBnb2FsOwotCi1z
dGF0aWMgdm9pZAotdGVzdF9mb3JlYWNoKHZvaWQpCi17Ci0Jc3RydWN0IHRlc3QgKm4sICpuZXh0
LCAqc2FmZTsKLQlpbnQgaSwgcyA9IDAsIGogPSAwLCBrID0gMDsKLQotCWZvciAoaSA9IGdvYWw7
IGkgIT0gMDsgaSA9IGdvYWwpIHsKLQkJcyA9IDA7Ci0KLQkJQ0tfU0xJU1RfRk9SRUFDSChuLCAm
aGVhZCwgbGlzdF9lbnRyeSkgewotCQkJaisrOwotCQkJaWYgKHMgPT0gMCkKLQkJCQlzID0gbi0+
dmFsdWU7Ci0JCQllbHNlCi0JCQkJcyA9IHMgLSAxOwotCi0JCQlpZiAobi0+dmFsdWUgIT0gcykg
ewotCQkJCWNrX2Vycm9yKCJcbkV4cGVjdGVkICVkLCBidXQgZ290ICVkLlxuIiwKLQkJCQkgICAg
cywgbi0+dmFsdWUpOwotCQkJfQotCi0JCQluZXh0ID0gQ0tfU0xJU1RfTkVYVChuLCBsaXN0X2Vu
dHJ5KTsKLQkJCWlmIChuZXh0ICE9IE5VTEwgJiYgbmV4dC0+dmFsdWUgIT0gcyAtIDEpIHsKLQkJ
CQlja19lcnJvcigiXG5FeHBlY3RlZCAlZCwgYnV0IGdvdCAlZC5cbiIsCi0JCQkJICAgIHMsIG5l
eHQtPnZhbHVlKTsKLQkJCX0KLQotCQkJaS0tOwotCQl9Ci0KLQkJaWYgKGkgPT0gMCkKLQkJCWJy
ZWFrOwotCi0JCXMgPSAwOwotCQlDS19TTElTVF9GT1JFQUNIX1NBRkUobiwgJmhlYWQsIGxpc3Rf
ZW50cnksIHNhZmUpIHsKLQkJCWsrKzsKLQotCQkJaWYgKHMgPT0gMCkKLQkJCQlzID0gbi0+dmFs
dWU7Ci0JCQllbHNlCi0JCQkJcyA9IHMgLSAxOwotCi0JCQlpZiAobi0+dmFsdWUgIT0gcykgewot
CQkJCWNrX2Vycm9yKCJcbkV4cGVjdGVkICVkLCBidXQgZ290ICVkLlxuIiwKLQkJCQkgICAgcywg
bi0+dmFsdWUpOwotCQkJfQotCi0JCQluZXh0ID0gQ0tfU0xJU1RfTkVYVChuLCBsaXN0X2VudHJ5
KTsKLQkJCWlmIChuZXh0ICE9IE5VTEwgJiYgbmV4dC0+dmFsdWUgIT0gcyAtIDEpIHsKLQkJCQlj
a19lcnJvcigiXG5FeHBlY3RlZCAlZCwgYnV0IGdvdCAlZC5cbiIsCi0JCQkJICAgIHMsIG5leHQt
PnZhbHVlKTsKLQkJCX0KLQotCQkJaS0tOwotCQl9Ci0KLQkJaWYgKGkgPT0gMCB8fCBDS19TTElT
VF9FTVBUWSgmaGVhZCkgPT0gdHJ1ZSkKLQkJCWJyZWFrOwotCX0KLQotCWZwcmludGYoc3RkZXJy
LCAiKCVkLCAlZCkgIiwgaiwgayk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCAqCi1leGVj
dXRlKHZvaWQgKmMpCi17Ci0KLQkodm9pZCljOwotCXRlc3RfZm9yZWFjaCgpOwotCXJldHVybiBO
VUxMOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlwdGhyZWFk
X3QgKnRocmVhZDsKLQlzdHJ1Y3QgdGVzdCAqbjsKLQlzdHJ1Y3QgdGVzdF9saXN0IHRhcmdldDsK
LQlpbnQgbl90aHJlYWRzLCBpOwotCi0JaWYgKGFyZ2MgIT0gMykgewotCQlja19lcnJvcigiVXNh
Z2U6ICVzIDxudW1iZXIgb2YgdGhyZWFkcz4gPG51bWJlciBvZiBsaXN0IGVudHJpZXM+XG4iLCBh
cmd2WzBdKTsKLQl9Ci0KLQluX3RocmVhZHMgPSBhdG9pKGFyZ3ZbMV0pOwotCWlmIChuX3RocmVh
ZHMgPCAxKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogTnVtYmVyIG9mIHRocmVhZHMgbXVzdCBiZSA+
PSAxLlxuIik7Ci0JfQotCi0JdGhyZWFkID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbl90
aHJlYWRzKTsKLQlhc3NlcnQodGhyZWFkICE9IE5VTEwpOwotCi0JZ29hbCA9IGF0b2koYXJndlsy
XSk7Ci0JaWYgKGdvYWwgPCA0KSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogTnVtYmVyIG9mIGVudHJp
ZXMgbXVzdCBiZSA+PSA0LlxuIik7Ci0JfQotCi0JZnByaW50ZihzdGRlcnIsICJCZWdpbm5pbmcg
c2VyaWFsIHRlc3QuLi4iKTsKLQlDS19TTElTVF9JTklUKCZoZWFkKTsKLQotCWZvciAoaSA9IDE7
IGkgPD0gZ29hbDsgaSsrKSB7Ci0JCW4gPSBtYWxsb2Moc2l6ZW9mICpuKTsKLQkJYXNzZXJ0KG4g
IT0gTlVMTCk7Ci0JCW4tPnZhbHVlID0gaTsKLQkJQ0tfU0xJU1RfSU5TRVJUX0hFQUQoJmhlYWQs
IG4sIGxpc3RfZW50cnkpOwotCX0KLQotCXRlc3RfZm9yZWFjaCgpOwotCi0JZm9yIChpID0gMTsg
aSA8PSBnb2FsOyBpKyspIHsKLQkJbiA9IENLX1NMSVNUX0ZJUlNUKCZoZWFkKTsKLQkJQ0tfU0xJ
U1RfUkVNT1ZFX0hFQUQoJmhlYWQsIGxpc3RfZW50cnkpOwotCQlmcmVlKG4pOwotCX0KLQotCWlm
IChDS19TTElTVF9FTVBUWSgmaGVhZCkgPT0gZmFsc2UpIHsKLQkJY2tfZXJyb3IoIkxpc3QgaXMg
bm90IGVtcHR5IGFmdGVyIGJ1bGsgcmVtb3ZhbC5cbiIpOwotCX0KLQotCWZwcmludGYoc3RkZXJy
LCAiZG9uZSAoc3VjY2VzcylcbiIpOwotCi0JZnByaW50ZihzdGRlcnIsICJCZWdpbm5pbmcgcGFy
YWxsZWwgdHJhdmVyc2FsLi4uIik7Ci0KLQluID0gbWFsbG9jKHNpemVvZiAqbik7Ci0JYXNzZXJ0
KG4gIT0gTlVMTCk7Ci0Jbi0+dmFsdWUgPSAxOwotCUNLX1NMSVNUX0lOU0VSVF9IRUFEKCZoZWFk
LCBuLCBsaXN0X2VudHJ5KTsKLQotCWZvciAoaSA9IDA7IGkgPCBuX3RocmVhZHM7IGkrKykgewot
CQlpbnQgciA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRbaV0sIE5VTEwsIGV4ZWN1dGUsIE5VTEwp
OwotCQlhc3NlcnQociA9PSAwKTsKLQl9Ci0KLQlmb3IgKGkgPSAyOyBpIDw9IGdvYWw7IGkrKykg
ewotCQl2b2xhdGlsZSBpbnQgajsKLQotCQluID0gbWFsbG9jKHNpemVvZiAqbik7Ci0JCWFzc2Vy
dChuICE9IE5VTEwpOwotCQluLT52YWx1ZSA9IGk7Ci0JCUNLX1NMSVNUX0lOU0VSVF9IRUFEKCZo
ZWFkLCBuLCBsaXN0X2VudHJ5KTsKLQkJZm9yIChqID0gMDsgaiA8PSAxMDAwOyBqKyspOwotCX0K
LQotCWZvciAoaSA9IDA7IGkgPCBuX3RocmVhZHM7IGkrKykKLQkJcHRocmVhZF9qb2luKHRocmVh
ZFtpXSwgTlVMTCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbl90aHJlYWRzOyBpKyspIHsKLQkJaW50
IHIgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkW2ldLCBOVUxMLCBleGVjdXRlLCBOVUxMKTsKLQkJ
YXNzZXJ0KHIgPT0gMCk7Ci0JfQotCi0JQ0tfU0xJU1RfTU9WRSgmdGFyZ2V0LCAmaGVhZCwgbGlz
dF9lbnRyeSk7Ci0KLQlmb3IgKGkgPSAxOyBpIDw9IGdvYWw7IGkrKykgewotCQl2b2xhdGlsZSBp
bnQgajsKLQotCQlpZiAoQ0tfU0xJU1RfRU1QVFkoJnRhcmdldCkgPT0gZmFsc2UpCi0JCQlDS19T
TElTVF9SRU1PVkVfSEVBRCgmdGFyZ2V0LCBsaXN0X2VudHJ5KTsKLQotCQlmb3IgKGogPSAwOyBq
IDw9IDEwMDA7IGorKyk7Ci0KLQkJaWYgKENLX1NMSVNUX0VNUFRZKCZ0YXJnZXQpID09IGZhbHNl
KSB7Ci0JCQlzdHJ1Y3QgdGVzdCAqciA9IENLX1NMSVNUX0ZJUlNUKCZ0YXJnZXQpOwotCQkJQ0tf
U0xJU1RfUkVNT1ZFKCZ0YXJnZXQsIHIsIHRlc3QsIGxpc3RfZW50cnkpOwotCQl9Ci0JfQotCi0J
Zm9yIChpID0gMDsgaSA8IG5fdGhyZWFkczsgaSsrKQotCQlwdGhyZWFkX2pvaW4odGhyZWFkW2ld
LCBOVUxMKTsKLQotCWZwcmludGYoc3RkZXJyLCAiZG9uZSAoc3VjY2VzcylcbiIpOwotCXJldHVy
biAoMCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L3JlZ3Jlc3Npb25zL2NrX3F1ZXVlL3ZhbGlkYXRlL2NrX3N0YWlscS5jIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcXVldWUvdmFsaWRhdGUvY2tfc3Rh
aWxxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOWU5M2ZiMTlmNjBmYTgzNWZi
ZTQ5OWU3OWY3ODAwNjYyM2MyMWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfcXVldWUvdmFsaWRhdGUvY2tfc3RhaWxxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEyLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICog
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGxp
Yi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUg
PGNrX3F1ZXVlLmg+Ci0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLXN0cnVjdCB0ZXN0IHsK
LQlpbnQgdmFsdWU7Ci0JQ0tfU1RBSUxRX0VOVFJZKHRlc3QpIGxpc3RfZW50cnk7Ci19Owotc3Rh
dGljIENLX1NUQUlMUV9IRUFEKHRlc3RfbGlzdCwgdGVzdCkgaGVhZCA9IENLX1NUQUlMUV9IRUFE
X0lOSVRJQUxJWkVSKGhlYWQpOwotCi1zdGF0aWMgaW50IGdvYWw7Ci0KLXN0YXRpYyB2b2lkCi10
ZXN0X2ZvcmVhY2godm9pZCkKLXsKLQlzdHJ1Y3QgdGVzdCAqbiwgKm5leHQsICpzYWZlOwotCWlu
dCBpLCBzID0gMCwgaiA9IDAsIGsgPSAwOwotCi0JZm9yIChpID0gZ29hbDsgaSAhPSAwOyBpID0g
Z29hbCkgewotCQlzID0gMDsKLQotCQlDS19TVEFJTFFfRk9SRUFDSChuLCAmaGVhZCwgbGlzdF9l
bnRyeSkgewotCQkJaisrOwotCQkJaWYgKHMgPT0gMCkKLQkJCQlzID0gbi0+dmFsdWU7Ci0JCQll
bHNlCi0JCQkJcyA9IHMgLSAxOwotCi0JCQlpZiAobi0+dmFsdWUgIT0gcykgewotCQkJCWNrX2Vy
cm9yKCJcbkV4cGVjdGVkICVkLCBidXQgZ290ICVkLlxuIiwKLQkJCQkgICAgcywgbi0+dmFsdWUp
OwotCQkJfQotCi0JCQluZXh0ID0gQ0tfU1RBSUxRX05FWFQobiwgbGlzdF9lbnRyeSk7Ci0JCQlp
ZiAobmV4dCAhPSBOVUxMICYmIG5leHQtPnZhbHVlICE9IHMgLSAxKSB7Ci0JCQkJY2tfZXJyb3Io
IlxuRXhwZWN0ZWQgJWQsIGJ1dCBnb3QgJWQuXG4iLAotCQkJCSAgICBzLCBuZXh0LT52YWx1ZSk7
Ci0JCQl9Ci0KLQkJCWktLTsKLQkJfQotCi0JCWlmIChpID09IDApCi0JCQlicmVhazsKLQotCQlz
ID0gMDsKLQkJQ0tfU1RBSUxRX0ZPUkVBQ0hfU0FGRShuLCAmaGVhZCwgbGlzdF9lbnRyeSwgc2Fm
ZSkgewotCQkJaysrOwotCi0JCQlpZiAocyA9PSAwKQotCQkJCXMgPSBuLT52YWx1ZTsKLQkJCWVs
c2UKLQkJCQlzID0gcyAtIDE7Ci0KLQkJCWlmIChuLT52YWx1ZSAhPSBzKSB7Ci0JCQkJY2tfZXJy
b3IoIlxuRXhwZWN0ZWQgJWQsIGJ1dCBnb3QgJWQuXG4iLAotCQkJCSAgICBzLCBuLT52YWx1ZSk7
Ci0JCQl9Ci0KLQkJCW5leHQgPSBDS19TVEFJTFFfTkVYVChuLCBsaXN0X2VudHJ5KTsKLQkJCWlm
IChuZXh0ICE9IE5VTEwgJiYgbmV4dC0+dmFsdWUgIT0gcyAtIDEpIHsKLQkJCQlja19lcnJvcigi
XG5FeHBlY3RlZCAlZCwgYnV0IGdvdCAlZC5cbiIsCi0JCQkJICAgIHMsIG5leHQtPnZhbHVlKTsK
LQkJCX0KLQotCQkJaS0tOwotCQl9Ci0KLQkJaWYgKGkgPT0gMCB8fCBDS19TVEFJTFFfRU1QVFko
JmhlYWQpID09IHRydWUpCi0JCQlicmVhazsKLQl9Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiglZCwg
JWQpICIsIGosIGspOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgKgotZXhlY3V0ZSh2b2lk
ICpjKQotewotCi0JKHZvaWQpYzsKLQl0ZXN0X2ZvcmVhY2goKTsKLQlyZXR1cm4gTlVMTDsKLX0K
LQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JcHRocmVhZF90ICp0aHJl
YWQ7Ci0Jc3RydWN0IHRlc3QgKm4sIGEsIGI7Ci0Jc3RydWN0IHRlc3RfbGlzdCB0YXJnZXQ7Ci0J
aW50IG5fdGhyZWFkcywgaTsKLQotCWlmIChhcmdjICE9IDMpIHsKLQkJY2tfZXJyb3IoIlVzYWdl
OiAlcyA8bnVtYmVyIG9mIHRocmVhZHM+IDxudW1iZXIgb2YgbGlzdCBlbnRyaWVzPlxuIiwgYXJn
dlswXSk7Ci0JfQotCi0Jbl90aHJlYWRzID0gYXRvaShhcmd2WzFdKTsKLQlpZiAobl90aHJlYWRz
IDwgMSkgewotCQlja19lcnJvcigiRVJST1I6IE51bWJlciBvZiB0aHJlYWRzIG11c3QgYmUgPj0g
MS5cbiIpOwotCX0KLQotCXRocmVhZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG5fdGhy
ZWFkcyk7Ci0JYXNzZXJ0KHRocmVhZCAhPSBOVUxMKTsKLQotCWdvYWwgPSBhdG9pKGFyZ3ZbMl0p
OwotCWlmIChnb2FsIDwgNCkgewotCQlja19lcnJvcigiRVJST1I6IE51bWJlciBvZiBlbnRyaWVz
IG11c3QgYmUgPj0gNC5cbiIpOwotCX0KLQotCWZwcmludGYoc3RkZXJyLCAiQmVnaW5uaW5nIHNl
cmlhbCB0ZXN0Li4uIik7Ci0JQ0tfU1RBSUxRX0lOSVQoJmhlYWQpOwotCi0JZm9yIChpID0gMTsg
aSA8PSBnb2FsOyBpKyspIHsKLQkJbiA9IG1hbGxvYyhzaXplb2YgKm4pOwotCQlhc3NlcnQobiAh
PSBOVUxMKTsKLQkJbi0+dmFsdWUgPSBpOwotCQlDS19TVEFJTFFfSU5TRVJUX0hFQUQoJmhlYWQs
IG4sIGxpc3RfZW50cnkpOwotCX0KLQotCXRlc3RfZm9yZWFjaCgpOwotCi0JZm9yIChpID0gMTsg
aSA8PSBnb2FsOyBpKyspIHsKLQkJbiA9IENLX1NUQUlMUV9GSVJTVCgmaGVhZCk7Ci0JCUNLX1NU
QUlMUV9SRU1PVkUoJmhlYWQsIG4sIHRlc3QsIGxpc3RfZW50cnkpOwotCQlmcmVlKG4pOwotCX0K
LQotCWlmIChDS19TVEFJTFFfRU1QVFkoJmhlYWQpID09IGZhbHNlKSB7Ci0JCWNrX2Vycm9yKCJM
aXN0IGlzIG5vdCBlbXB0eSBhZnRlciBidWxrIHJlbW92YWwuXG4iKTsKLQl9Ci0KLQlmb3IgKGkg
PSAxOyBpIDw9IGdvYWw7IGkrKykgewotCQluID0gbWFsbG9jKHNpemVvZiAqbik7Ci0JCWFzc2Vy
dChuICE9IE5VTEwpOwotCQluLT52YWx1ZSA9IGdvYWwgLSBpOwotCQlDS19TVEFJTFFfSU5TRVJU
X1RBSUwoJmhlYWQsIG4sIGxpc3RfZW50cnkpOwotCX0KLQotCXRlc3RfZm9yZWFjaCgpOwotCi0J
Zm9yIChpID0gMTsgaSA8PSBnb2FsOyBpKyspIHsKLQkJbiA9IENLX1NUQUlMUV9GSVJTVCgmaGVh
ZCk7Ci0JCUNLX1NUQUlMUV9SRU1PVkUoJmhlYWQsIG4sIHRlc3QsIGxpc3RfZW50cnkpOwotCQlm
cmVlKG4pOwotCX0KLQotCWlmIChDS19TVEFJTFFfRU1QVFkoJmhlYWQpID09IGZhbHNlKSB7Ci0J
CWNrX2Vycm9yKCJMaXN0IGlzIG5vdCBlbXB0eSBhZnRlciBidWxrIHJlbW92YWwuXG4iKTsKLQl9
Ci0KLQlDS19TVEFJTFFfSU5TRVJUX0hFQUQoJmhlYWQsICZhLCBsaXN0X2VudHJ5KTsKLQlDS19T
VEFJTFFfSU5TRVJUX0hFQUQoJmhlYWQsICZiLCBsaXN0X2VudHJ5KTsKLQlDS19TVEFJTFFfUkVN
T1ZFKCZoZWFkLCAmYSwgdGVzdCwgbGlzdF9lbnRyeSk7Ci0JaWYgKENLX1NUQUlMUV9GSVJTVCgm
aGVhZCkgIT0gJmIpCi0JCWNrX2Vycm9yKCJMaXN0IGlzIGluIGludmFsaWQgc3RhdGUuXG4iKTsK
LQlDS19TVEFJTFFfUkVNT1ZFKCZoZWFkLCAmYiwgdGVzdCwgbGlzdF9lbnRyeSk7Ci0KLQlpZiAo
Q0tfU1RBSUxRX0VNUFRZKCZoZWFkKSA9PSBmYWxzZSkgewotCQlja19lcnJvcigiTGlzdCBpcyBu
b3QgZW1wdHkgYWZ0ZXIgYnVsayByZW1vdmFsLlxuIik7Ci0JfQotCi0JQ0tfU1RBSUxRX0lOU0VS
VF9IRUFEKCZoZWFkLCAmYSwgbGlzdF9lbnRyeSk7Ci0JQ0tfU1RBSUxRX0lOU0VSVF9BRlRFUigm
aGVhZCwgJmEsICZiLCBsaXN0X2VudHJ5KTsKLQotCWlmIChDS19TVEFJTFFfTkVYVCgmYiwgbGlz
dF9lbnRyeSkgIT0gTlVMTCkKLQkJY2tfZXJyb3IoIkluc2VydGVkIGl0ZW0gYWZ0ZXIgbGFzdCwg
aXQgc2hvdWxkIG5vdCBoYXZlIG5vIG5leHQuXG4iKTsKLQotCUNLX1NUQUlMUV9JTklUKCZoZWFk
KTsKLQotCUNLX1NUQUlMUV9JTlNFUlRfSEVBRCgmaGVhZCwgJmEsIGxpc3RfZW50cnkpOwotCWlm
IChDS19TVEFJTFFfTkVYVCgmYSwgbGlzdF9lbnRyeSkgIT0gTlVMTCkKLQkJY2tfZXJyb3IoIklu
c2VydGVkIGl0ZW0gYXMgbGFzdCwgYnV0IGl0IGNvbnRhaW5zIG5leHQgcG9pbnRlci5cbiIpOwot
Ci0JQ0tfU1RBSUxRX0lOSVQoJmhlYWQpOwotCWZwcmludGYoc3RkZXJyLCAiZG9uZSAoc3VjY2Vz
cylcbiIpOwotCi0JZnByaW50ZihzdGRlcnIsICJCZWdpbm5pbmcgcGFyYWxsZWwgdHJhdmVyc2Fs
Li4uIik7Ci0KLQluID0gbWFsbG9jKHNpemVvZiAqbik7Ci0JYXNzZXJ0KG4gIT0gTlVMTCk7Ci0J
bi0+dmFsdWUgPSAxOwotCUNLX1NUQUlMUV9JTlNFUlRfSEVBRCgmaGVhZCwgbiwgbGlzdF9lbnRy
eSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbl90aHJlYWRzOyBpKyspIHsKLQkJaW50IHIgPSBwdGhy
ZWFkX2NyZWF0ZSgmdGhyZWFkW2ldLCBOVUxMLCBleGVjdXRlLCBOVUxMKTsKLQkJYXNzZXJ0KHIg
PT0gMCk7Ci0JfQotCi0JZm9yIChpID0gMjsgaSA8PSBnb2FsOyBpKyspIHsKLQkJdm9sYXRpbGUg
aW50IGo7Ci0KLQkJbiA9IG1hbGxvYyhzaXplb2YgKm4pOwotCQlhc3NlcnQobiAhPSBOVUxMKTsK
LQkJbi0+dmFsdWUgPSBpOwotCQlDS19TVEFJTFFfSU5TRVJUX0hFQUQoJmhlYWQsIG4sIGxpc3Rf
ZW50cnkpOwotCQlmb3IgKGogPSAwOyBqIDw9IDEwMDA7IGorKyk7Ci0JfQotCi0JZm9yIChpID0g
MDsgaSA8IG5fdGhyZWFkczsgaSsrKQotCQlwdGhyZWFkX2pvaW4odGhyZWFkW2ldLCBOVUxMKTsK
LQotCWZvciAoaSA9IDA7IGkgPCBuX3RocmVhZHM7IGkrKykgewotCQlpbnQgciA9IHB0aHJlYWRf
Y3JlYXRlKCZ0aHJlYWRbaV0sIE5VTEwsIGV4ZWN1dGUsIE5VTEwpOwotCQlhc3NlcnQociA9PSAw
KTsKLQl9Ci0KLQlDS19TVEFJTFFfTU9WRSgmdGFyZ2V0LCAmaGVhZCwgbGlzdF9lbnRyeSk7Ci0K
LQlmb3IgKGkgPSAxOyBpIDw9IGdvYWw7IGkrKykgewotCQl2b2xhdGlsZSBpbnQgajsKLQotCQlp
ZiAoQ0tfU1RBSUxRX0VNUFRZKCZ0YXJnZXQpID09IGZhbHNlKSB7Ci0JCQlzdHJ1Y3QgdGVzdCAq
ciA9IENLX1NUQUlMUV9GSVJTVCgmdGFyZ2V0KTsKLQkJCUNLX1NUQUlMUV9SRU1PVkUoJnRhcmdl
dCwgciwgdGVzdCwgbGlzdF9lbnRyeSk7Ci0JCX0KLQotCQlmb3IgKGogPSAwOyBqIDw9IDEwMDA7
IGorKyk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG5fdGhyZWFkczsgaSsrKQotCQlwdGhyZWFk
X2pvaW4odGhyZWFkW2ldLCBOVUxMKTsKLQotCWZwcmludGYoc3RkZXJyLCAiZG9uZSAoc3VjY2Vz
cylcbiIpOwotCXJldHVybiAoMCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3Jocy9iZW5jaG1hcmsvTWFrZWZpbGUgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yaHMvYmVuY2ht
YXJrL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTk3OTkzNWYxZDM5
MjI5NjQ5ZjY5NjIyNTlhMjY3YTk0YmNkZGJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jl
c3Npb25zL2NrX3Jocy9iZW5jaG1hcmsvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNyAr
MCwwIEBACi0uUEhPTlk6IGNsZWFuIGRpc3RyaWJ1dGlvbgotCi1PQkpFQ1RTPXNlcmlhbCBwYXJh
bGxlbF9ieXRlc3RyaW5nCi0KLWFsbDogJChPQkpFQ1RTKQotCi1zZXJpYWw6IHNlcmlhbC5jIC4u
Ly4uLy4uL2luY2x1ZGUvY2tfcmhzLmggLi4vLi4vLi4vc3JjL2NrX3Jocy5jCi0JJChDQykgJChD
RkxBR1MpIC1vIHNlcmlhbCBzZXJpYWwuYyAuLi8uLi8uLi9zcmMvY2tfcmhzLmMKLQotcGFyYWxs
ZWxfYnl0ZXN0cmluZzogcGFyYWxsZWxfYnl0ZXN0cmluZy5jIC4uLy4uLy4uL2luY2x1ZGUvY2tf
cmhzLmggLi4vLi4vLi4vc3JjL2NrX3Jocy5jIC4uLy4uLy4uL3NyYy9ja19lcG9jaC5jCi0JJChD
QykgJChQVEhSRUFEX0NGTEFHUykgJChDRkxBR1MpIC1vIHBhcmFsbGVsX2J5dGVzdHJpbmcgcGFy
YWxsZWxfYnl0ZXN0cmluZy5jIC4uLy4uLy4uL3NyYy9ja19yaHMuYyAuLi8uLi8uLi9zcmMvY2tf
ZXBvY2guYwotCi1jbGVhbjoKLQlybSAtcmYgKn4gKi5vICQoT0JKRUNUUykgKi5kU1lNICouZXhl
Ci0KLWluY2x1ZGUgLi4vLi4vLi4vYnVpbGQvcmVncmVzc2lvbnMuYnVpbGQKLUNGTEFHUys9LURf
R05VX1NPVVJDRQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2sv
cmVncmVzc2lvbnMvY2tfcmhzL2JlbmNobWFyay9wYXJhbGxlbF9ieXRlc3RyaW5nLmMgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yaHMvYmVuY2htYXJr
L3BhcmFsbGVsX2J5dGVzdHJpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE3
MjIyZDllNmE0ZThiNWMxYzVhNjgzZTBiZmU4ZGY1ZTFhMjM5Ny4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19yaHMvYmVuY2htYXJrL3BhcmFsbGVsX2J5dGVzdHJpbmcuYwor
KysgL2Rldi9udWxsCkBAIC0xLDU5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTIgU2Ft
eSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdocwotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHMKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICog
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQot
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlICIuLi8uLi9j
b21tb24uaCIKLSNpbmNsdWRlIDxja19yaHMuaD4KLSNpbmNsdWRlICIuLi8uLi8uLi9zcmMvY2tf
aHRfaGFzaC5oIgotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGNrX2Vwb2NoLmg+Ci0j
aW5jbHVkZSA8Y2tfbWFsbG9jLmg+Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19z
cGlubG9jay5oPgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgot
I2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxzdGRp
by5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUg
PHRpbWUuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotc3RhdGljIGNrX3Joc190IGhzIENLX0ND
X0NBQ0hFTElORTsKLXN0YXRpYyBjaGFyICoqa2V5czsKLXN0YXRpYyBzaXplX3Qga2V5c19sZW5n
dGggPSAwOwotc3RhdGljIHNpemVfdCBrZXlzX2NhcGFjaXR5ID0gMTI4Owotc3RhdGljIGNrX2Vw
b2NoX3QgZXBvY2hfaHM7Ci1zdGF0aWMgY2tfZXBvY2hfcmVjb3JkX3QgZXBvY2hfd3I7Ci1zdGF0
aWMgaW50IG5fdGhyZWFkczsKLXN0YXRpYyBib29sIG5leHRfc3RhZ2U7Ci0KLWVudW0gc3RhdGUg
ewotCUhTX1NUQVRFX1NUT1AgPSAwLAotCUhTX1NUQVRFX0dFVCwKLQlIU19TVEFURV9TVFJJQ1Rf
UkVQTEFDRU1FTlQsCi0JSFNfU1RBVEVfREVMRVRJT04sCi0JSFNfU1RBVEVfUkVQTEFDRU1FTlQs
Ci0JSFNfU1RBVEVfQ09VTlQKLX07Ci0KLXN0YXRpYyBja19zcGlubG9ja190IG10eCA9IENLX1NQ
SU5MT0NLX0lOSVRJQUxJWkVSOwotc3RhdGljIHN0cnVjdCBhZmZpbml0eSBhZmZpbmVyYXRvciA9
IEFGRklOSVRZX0lOSVRJQUxJWkVSOwotc3RhdGljIHVpbnQ2NF90IGFjY3VtdWxhdG9yW0hTX1NU
QVRFX0NPVU5UXTsKLXN0YXRpYyBpbnQgYmFycmllcltIU19TVEFURV9DT1VOVF07Ci1zdGF0aWMg
aW50IHN0YXRlOwotCi1zdHJ1Y3QgaHNfZXBvY2ggewotCWNrX2Vwb2NoX2VudHJ5X3QgZXBvY2hf
ZW50cnk7Ci19OwotCi1DT01NT05fQUxBUk1fREVDTEFSRV9HTE9CQUwoaHNfYWxhcm0sIGFsYXJt
X2V2ZW50LCBuZXh0X3N0YWdlKQotCi1zdGF0aWMgdm9pZAotYWxhcm1faGFuZGxlcihpbnQgcykK
LXsKLQotCSh2b2lkKXM7Ci0JbmV4dF9zdGFnZSA9IHRydWU7Ci0JcmV0dXJuOwotfQotCi1zdGF0
aWMgdW5zaWduZWQgbG9uZwotaHNfaGFzaChjb25zdCB2b2lkICpvYmplY3QsIHVuc2lnbmVkIGxv
bmcgc2VlZCkKLXsKLQljb25zdCBjaGFyICpjID0gb2JqZWN0OwotCXVuc2lnbmVkIGxvbmcgaDsK
LQotCWggPSAodW5zaWduZWQgbG9uZylNdXJtdXJIYXNoNjRBKGMsIHN0cmxlbihjKSwgc2VlZCk7
Ci0JcmV0dXJuIGg7Ci19Ci0KLXN0YXRpYyBib29sCi1oc19jb21wYXJlKGNvbnN0IHZvaWQgKnBy
ZXZpb3VzLCBjb25zdCB2b2lkICpjb21wYXJlKQotewotCi0JcmV0dXJuIHN0cmNtcChwcmV2aW91
cywgY29tcGFyZSkgPT0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWhzX2Rlc3Ryb3koY2tfZXBvY2hf
ZW50cnlfdCAqZSkKLXsKLQotCWZyZWUoZSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCAq
Ci1oc19tYWxsb2Moc2l6ZV90IHIpCi17Ci0JY2tfZXBvY2hfZW50cnlfdCAqYjsKLQotCWIgPSBt
YWxsb2Moc2l6ZW9mKCpiKSArIHIpOwotCXJldHVybiBiICsgMTsKLX0KLQotc3RhdGljIHZvaWQK
LWhzX2ZyZWUodm9pZCAqcCwgc2l6ZV90IGIsIGJvb2wgcikKLXsKLQlzdHJ1Y3QgaHNfZXBvY2gg
KmUgPSBwOwotCi0JKHZvaWQpYjsKLQotCWlmIChyID09IHRydWUpIHsKLQkJLyogRGVzdHJ1Y3Rp
b24gcmVxdWlyZXMgc2FmZSBtZW1vcnkgcmVjbGFtYXRpb24uICovCi0JCWNrX2Vwb2NoX2NhbGwo
JmVwb2NoX3dyLCAmKC0tZSktPmVwb2NoX2VudHJ5LCBoc19kZXN0cm95KTsKLQl9IGVsc2Ugewot
CQlmcmVlKC0tZSk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgc3RydWN0IGNrX21hbGxv
YyBteV9hbGxvY2F0b3IgPSB7Ci0JLm1hbGxvYyA9IGhzX21hbGxvYywKLQkuZnJlZSA9IGhzX2Zy
ZWUKLX07Ci0KLXN0YXRpYyB2b2lkCi1zZXRfaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGludCBt
b2RlID0gQ0tfUkhTX01PREVfT0JKRUNUIHwgQ0tfUkhTX01PREVfU1BNQzsKLQotCi0JY2tfZXBv
Y2hfaW5pdCgmZXBvY2hfaHMpOwotCWNrX2Vwb2NoX3JlZ2lzdGVyKCZlcG9jaF9ocywgJmVwb2No
X3dyLCBOVUxMKTsKLQljb21tb25fc3JhbmQ0OCgobG9uZyBpbnQpdGltZShOVUxMKSk7Ci0JaWYg
KGNrX3Joc19pbml0KCZocywgbW9kZSwgaHNfaGFzaCwgaHNfY29tcGFyZSwgJm15X2FsbG9jYXRv
ciwgNjU1MzYsIGNvbW1vbl9scmFuZDQ4KCkpID09IGZhbHNlKSB7Ci0JCXBlcnJvcigiY2tfcmhz
X2luaXQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCXJldHVybjsKLX0KLQotc3Rh
dGljIGJvb2wKLXNldF9yZW1vdmUoY29uc3QgY2hhciAqdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9u
ZyBoOwotCi0JaCA9IENLX1JIU19IQVNIKCZocywgaHNfaGFzaCwgdmFsdWUpOwotCXJldHVybiAo
Ym9vbClja19yaHNfcmVtb3ZlKCZocywgaCwgdmFsdWUpOwotfQotCi1zdGF0aWMgYm9vbAotc2V0
X3JlcGxhY2UoY29uc3QgY2hhciAqdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBoOwotCXZvaWQg
KnByZXZpb3VzOwotCi0JaCA9IENLX1JIU19IQVNIKCZocywgaHNfaGFzaCwgdmFsdWUpOwotCXJl
dHVybiBja19yaHNfc2V0KCZocywgaCwgdmFsdWUsICZwcmV2aW91cyk7Ci19Ci0KLXN0YXRpYyBi
b29sCi1zZXRfc3dhcChjb25zdCBjaGFyICp2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGg7Ci0J
dm9pZCAqcHJldmlvdXM7Ci0KLQloID0gQ0tfUkhTX0hBU0goJmhzLCBoc19oYXNoLCB2YWx1ZSk7
Ci0JcmV0dXJuIGNrX3Joc19mYXMoJmhzLCBoLCB2YWx1ZSwgJnByZXZpb3VzKTsKLX0KLQotc3Rh
dGljIHZvaWQgKgotc2V0X2dldChjb25zdCBjaGFyICp2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25n
IGg7Ci0Jdm9pZCAqdjsKLQotCWggPSBDS19SSFNfSEFTSCgmaHMsIGhzX2hhc2gsIHZhbHVlKTsK
LQl2ID0gY2tfcmhzX2dldCgmaHMsIGgsIHZhbHVlKTsKLQlyZXR1cm4gdjsKLX0KLQotc3RhdGlj
IGJvb2wKLXNldF9pbnNlcnQoY29uc3QgY2hhciAqdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBo
OwotCi0JaCA9IENLX1JIU19IQVNIKCZocywgaHNfaGFzaCwgdmFsdWUpOwotCXJldHVybiBja19y
aHNfcHV0KCZocywgaCwgdmFsdWUpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1zZXRfY291bnQodm9p
ZCkKLXsKLQotCXJldHVybiBja19yaHNfY291bnQoJmhzKTsKLX0KLQotc3RhdGljIGJvb2wKLXNl
dF9yZXNldCh2b2lkKQotewotCi0JcmV0dXJuIGNrX3Joc19yZXNldCgmaHMpOwotfQotCi1zdGF0
aWMgdm9pZCAqCi1yZWFkZXIodm9pZCAqdW51c2VkKQotewotCXNpemVfdCBpOwotCWNrX2Vwb2No
X3JlY29yZF90IGVwb2NoX3JlY29yZDsKLQlpbnQgc3RhdGVfcHJldmlvdXMgPSBIU19TVEFURV9T
VE9QOwotCWludCBuX3N0YXRlID0gMDsKLQl1aW50NjRfdCBzLCBqLCBhOwotCi0JKHZvaWQpdW51
c2VkOwotCWlmIChhZmZfaXRlcmF0ZSgmYWZmaW5lcmF0b3IpICE9IDApCi0JCXBlcnJvcigiV0FS
TklORzogRmFpbGVkIHRvIGFmZmluZSB0aHJlYWQiKTsKLQotCXMgPSBqID0gYSA9IDA7Ci0JY2tf
ZXBvY2hfcmVnaXN0ZXIoJmVwb2NoX2hzLCAmZXBvY2hfcmVjb3JkLCBOVUxMKTsKLQlmb3IgKDs7
KSB7Ci0JCWorKzsKLQkJY2tfZXBvY2hfYmVnaW4oJmVwb2NoX3JlY29yZCwgTlVMTCk7Ci0JCXMg
PSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykgewotCQkJY2hh
ciAqcjsKLQotCQkJciA9IHNldF9nZXQoa2V5c1tpXSk7Ci0JCQlpZiAociA9PSBOVUxMKSB7Ci0J
CQkJaWYgKG5fc3RhdGUgPT0gSFNfU1RBVEVfU1RSSUNUX1JFUExBQ0VNRU5UKSB7Ci0JCQkJCWNr
X2Vycm9yKCJFUlJPUjogRGlkIG5vdCBmaW5kIGR1cmluZyByZXBsYWNlbWVudDogJXNcbiIsIGtl
eXNbaV0pOwotCQkJCX0KLQotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlpZiAoc3RyY21wKHIs
IGtleXNbaV0pID09IDApCi0JCQkJY29udGludWU7Ci0KLQkJCWNrX2Vycm9yKCJFUlJPUjogRm91
bmQgaW52YWxpZCB2YWx1ZTogWyVzXSBidXQgZXhwZWN0ZWQgWyVzXVxuIiwgKGNoYXIgKilyLCBr
ZXlzW2ldKTsKLQkJfQotCQlhICs9IHJkdHNjKCkgLSBzOwotCQlja19lcG9jaF9lbmQoJmVwb2No
X3JlY29yZCwgTlVMTCk7Ci0KLQkJbl9zdGF0ZSA9IGNrX3ByX2xvYWRfaW50KCZzdGF0ZSk7Ci0J
CWlmIChuX3N0YXRlICE9IHN0YXRlX3ByZXZpb3VzKSB7Ci0JCQlja19zcGlubG9ja19sb2NrKCZt
dHgpOwotCQkJYWNjdW11bGF0b3Jbc3RhdGVfcHJldmlvdXNdICs9IGEgLyAoaiAqIGtleXNfbGVu
Z3RoKTsKLQkJCWNrX3NwaW5sb2NrX3VubG9jaygmbXR4KTsKLQotCQkJY2tfcHJfaW5jX2ludCgm
YmFycmllcltzdGF0ZV9wcmV2aW91c10pOwotCQkJd2hpbGUgKGNrX3ByX2xvYWRfaW50KCZiYXJy
aWVyW3N0YXRlX3ByZXZpb3VzXSkgIT0gbl90aHJlYWRzICsgMSkKLQkJCQlja19wcl9zdGFsbCgp
OwotCi0JCQlzdGF0ZV9wcmV2aW91cyA9IG5fc3RhdGU7Ci0JCQlzID0gaiA9IGEgPSAwOwotCQl9
Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB1aW50NjRfdAotYWNjKHNpemVfdCBp
KQotewotCXVpbnQ2NF90IHI7Ci0KLQlja19zcGlubG9ja19sb2NrKCZtdHgpOwotCXIgPSBhY2N1
bXVsYXRvcltpXTsKLQlja19zcGlubG9ja191bmxvY2soJm10eCk7Ci0KLQlyZXR1cm4gcjsKLX0K
LQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JRklMRSAqZnA7Ci0JY2hh
ciBidWZmZXJbNTEyXTsKLQlzaXplX3QgaSwgaiwgcjsKLQl1bnNpZ25lZCBpbnQgZCA9IDA7Ci0J
dWludDY0X3QgcywgZSwgYSwgcmVwZWF0ZWQ7Ci0JY2hhciAqKnQ7Ci0JcHRocmVhZF90ICpyZWFk
ZXJzOwotCWRvdWJsZSBwX3IsIHBfZDsKLQotCUNPTU1PTl9BTEFSTV9ERUNMQVJFX0xPQ0FMKGhz
X2FsYXJtLCBhbGFybV9ldmVudCkKLQotCXIgPSAyMDsKLQlzID0gODsKLQlwX2QgPSAwLjU7Ci0J
cF9yID0gMC41OwotCW5fdGhyZWFkcyA9IENPUkVTIC0gMTsKLQotCWlmIChhcmdjIDwgMikgewot
CQlja19lcnJvcigiVXNhZ2U6IHBhcmFsbGVsIDxkaWN0aW9uYXJ5PiBbPGludGVydmFsIGxlbmd0
aD4gPGluaXRpYWwgc2l6ZT4gPHJlYWRlcnM+XG4iCi0JCSAgICAiIDxwcm9iYWJpbGl0eSBvZiBy
ZXBsYWNlbWVudD4gPHByb2JhYmlsaXR5IG9mIGRlbGV0aW9uPiA8ZXBvY2ggdGhyZXNob2xkPl1c
biIpOwotCX0KLQotCWlmIChhcmdjID49IDMpCi0JCXIgPSBhdG9pKGFyZ3ZbMl0pOwotCi0JaWYg
KGFyZ2MgPj0gNCkKLQkJcyA9ICh1aW50NjRfdClhdG9pKGFyZ3ZbM10pOwotCi0JaWYgKGFyZ2Mg
Pj0gNSkgewotCQluX3RocmVhZHMgPSBhdG9pKGFyZ3ZbNF0pOwotCQlpZiAobl90aHJlYWRzIDwg
MSkgewotCQkJY2tfZXJyb3IoIkVSUk9SOiBOdW1iZXIgb2YgcmVhZGVycyBtdXN0IGJlID49IDEu
XG4iKTsKLQkJfQotCX0KLQotCWlmIChhcmdjID49IDYpIHsKLQkJcF9yID0gYXRvZihhcmd2WzVd
KSAvIDEwMC4wMDsKLQkJaWYgKHBfciA8IDApIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogUHJvYmFi
aWxpdHkgb2YgcmVwbGFjZW1lbnQgbXVzdCBiZSA+PSAwIGFuZCA8PSAxMDAuXG4iKTsKLQkJfQot
CX0KLQotCWlmIChhcmdjID49IDcpIHsKLQkJcF9kID0gYXRvZihhcmd2WzZdKSAvIDEwMC4wMDsK
LQkJaWYgKHBfZCA8IDApIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogUHJvYmFiaWxpdHkgb2YgZGVs
ZXRpb24gbXVzdCBiZSA+PSAwIGFuZCA8PSAxMDAuXG4iKTsKLQkJfQotCX0KLQotCUNPTU1PTl9B
TEFSTV9JTklUKGhzX2FsYXJtLCBhbGFybV9ldmVudCwgcikKLQotCWFmZmluZXJhdG9yLmRlbHRh
ID0gMTsKLQlyZWFkZXJzID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbl90aHJlYWRzKTsK
LQlhc3NlcnQocmVhZGVycyAhPSBOVUxMKTsKLQotCWtleXMgPSBtYWxsb2Moc2l6ZW9mKGNoYXIg
KikgKiBrZXlzX2NhcGFjaXR5KTsKLQlhc3NlcnQoa2V5cyAhPSBOVUxMKTsKLQotCWZwID0gZm9w
ZW4oYXJndlsxXSwgInIiKTsKLQlhc3NlcnQoZnAgIT0gTlVMTCk7Ci0KLQl3aGlsZSAoZmdldHMo
YnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZnApICE9IE5VTEwpIHsKLQkJYnVmZmVyW3N0cmxlbihi
dWZmZXIpIC0gMV0gPSAnXDAnOwotCQlrZXlzW2tleXNfbGVuZ3RoKytdID0gc3RyZHVwKGJ1ZmZl
cik7Ci0JCWFzc2VydChrZXlzW2tleXNfbGVuZ3RoIC0gMV0gIT0gTlVMTCk7Ci0KLQkJaWYgKGtl
eXNfbGVuZ3RoID09IGtleXNfY2FwYWNpdHkpIHsKLQkJCXQgPSByZWFsbG9jKGtleXMsIHNpemVv
ZihjaGFyICopICogKGtleXNfY2FwYWNpdHkgKj0gMikpOwotCQkJYXNzZXJ0KHQgIT0gTlVMTCk7
Ci0JCQlrZXlzID0gdDsKLQkJfQotCX0KLQotCXQgPSByZWFsbG9jKGtleXMsIHNpemVvZihjaGFy
ICopICoga2V5c19sZW5ndGgpOwotCWFzc2VydCh0ICE9IE5VTEwpOwotCWtleXMgPSB0OwotCi0J
c2V0X2luaXQoKTsKLQotCWZvciAoaSA9IDA7IGkgPCAoc2l6ZV90KW5fdGhyZWFkczsgaSsrKSB7
Ci0JCWlmIChwdGhyZWFkX2NyZWF0ZSgmcmVhZGVyc1tpXSwgTlVMTCwgcmVhZGVyLCBOVUxMKSAh
PSAwKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IEZhaWxlZCB0byBjcmVhdGUgdGhyZWFkICV6dS5c
biIsIGkpOwotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspCi0J
CWQgKz0gc2V0X2luc2VydChrZXlzW2ldKSA9PSBmYWxzZTsKLQotCWZwcmludGYoc3RkZXJyLCAi
IFtTXSAlZCByZWFkZXJzLCAxIHdyaXRlci5cbiIsIG5fdGhyZWFkcyk7Ci0JZnByaW50ZihzdGRl
cnIsICIgW1NdICV6dSBlbnRyaWVzIHN0b3JlZCBhbmQgJXUgZHVwbGljYXRlcy5cblxuIiwKLQkg
ICAgc2V0X2NvdW50KCksIGQpOwotCi0JZnByaW50ZihzdGRlcnIsICIgLC0gQkFTSUMgVEVTVFxu
Iik7Ci0JZnByaW50ZihzdGRlcnIsICIgfCBFeGVjdXRpbmcgU01SIHRlc3QuLi4iKTsKLQlhID0g
MDsKLQlmb3IgKGogPSAwOyBqIDwgcjsgaisrKSB7Ci0JCWlmIChzZXRfcmVzZXQoKSA9PSBmYWxz
ZSkgewotCQkJY2tfZXJyb3IoIkVSUk9SOiBGYWlsZWQgdG8gcmVzZXQgaGFzaCB0YWJsZS5cbiIp
OwotCQl9Ci0KLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsg
aSsrKQotCQkJZCArPSBzZXRfaW5zZXJ0KGtleXNbaV0pID09IGZhbHNlOwotCQllID0gcmR0c2Mo
KTsKLQkJYSArPSBlIC0gczsKLQl9Ci0JZnByaW50ZihzdGRlcnIsICJkb25lICglIiBQUkl1NjQg
IiB0aWNrcylcbiIsIGEgLyAociAqIGtleXNfbGVuZ3RoKSk7Ci0KLQlmcHJpbnRmKHN0ZGVyciwg
IiB8IEV4ZWN1dGluZyByZXBsYWNlbWVudCB0ZXN0Li4uIik7Ci0JYSA9IDA7Ci0JZm9yIChqID0g
MDsgaiA8IHI7IGorKykgewotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNf
bGVuZ3RoOyBpKyspCi0JCQlzZXRfcmVwbGFjZShrZXlzW2ldKTsKLQkJZSA9IHJkdHNjKCk7Ci0J
CWEgKz0gZSAtIHM7Ci0JfQotCWZwcmludGYoc3RkZXJyLCAiZG9uZSAoJSIgUFJJdTY0ICIgdGlj
a3MpXG4iLCBhIC8gKHIgKiBrZXlzX2xlbmd0aCkpOwotCi0JZnByaW50ZihzdGRlcnIsICIgfCBF
eGVjdXRpbmcgZ2V0IHRlc3QuLi4iKTsKLQlhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsgaisr
KSB7Ci0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykg
ewotCQkJaWYgKHNldF9nZXQoa2V5c1tpXSkgPT0gTlVMTCkgewotCQkJCWNrX2Vycm9yKCJFUlJP
UjogVW5leHBlY3RlZCBOVUxMIHZhbHVlLlxuIik7Ci0JCQl9Ci0JCX0KLQkJZSA9IHJkdHNjKCk7
Ci0JCWEgKz0gZSAtIHM7Ci0JfQotCWZwcmludGYoc3RkZXJyLCAiZG9uZSAoJSIgUFJJdTY0ICIg
dGlja3MpXG4iLCBhIC8gKHIgKiBrZXlzX2xlbmd0aCkpOwotCi0JYSA9IDA7Ci0JZnByaW50Zihz
dGRlcnIsICIgfCBFeGVjdXRpbmcgcmVtb3ZhbCB0ZXN0Li4uIik7Ci0JZm9yIChqID0gMDsgaiA8
IHI7IGorKykgewotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3Ro
OyBpKyspCi0JCQlzZXRfcmVtb3ZlKGtleXNbaV0pOwotCQllID0gcmR0c2MoKTsKLQkJYSArPSBl
IC0gczsKLQotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJCXNldF9pbnNl
cnQoa2V5c1tpXSk7Ci0JfQotCWZwcmludGYoc3RkZXJyLCAiZG9uZSAoJSIgUFJJdTY0ICIgdGlj
a3MpXG4iLCBhIC8gKHIgKiBrZXlzX2xlbmd0aCkpOwotCi0JZnByaW50ZihzdGRlcnIsICIgfCBF
eGVjdXRpbmcgbmVnYXRpdmUgbG9vay11cCB0ZXN0Li4uIik7Ci0JYSA9IDA7Ci0JZm9yIChqID0g
MDsgaiA8IHI7IGorKykgewotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNf
bGVuZ3RoOyBpKyspIHsKLQkJCXNldF9nZXQoIlx4NTBceDAzXHgwNFx4MDVceDA2XHgxMCIpOwot
CQl9Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBzOwotCX0KLQlmcHJpbnRmKHN0ZGVyciwg
ImRvbmUgKCUiIFBSSXU2NCAiIHRpY2tzKVxuIiwgYSAvIChyICoga2V5c19sZW5ndGgpKTsKLQot
CWNrX2Vwb2NoX3JlY29yZF90IGVwb2NoX3RlbXBvcmFyeSA9IGVwb2NoX3dyOwotCWNrX2Vwb2No
X3N5bmNocm9uaXplKCZlcG9jaF93cik7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiAnLSBTdW1tYXJ5
OiAldSBwZW5kaW5nLCAldSBwZWFrLCAldSByZWNsYW1hdGlvbnMgLT4gIgotCSAgICAiJXUgcGVu
ZGluZywgJXUgcGVhaywgJXUgcmVjbGFtYXRpb25zXG5cbiIsCi0JICAgIGVwb2NoX3RlbXBvcmFy
eS5uX3BlbmRpbmcsIGVwb2NoX3RlbXBvcmFyeS5uX3BlYWssIGVwb2NoX3RlbXBvcmFyeS5uX2Rp
c3BhdGNoLAotCSAgICBlcG9jaF93ci5uX3BlbmRpbmcsIGVwb2NoX3dyLm5fcGVhaywgZXBvY2hf
d3Iubl9kaXNwYXRjaCk7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiAsLSBSRUFERVIgQ09OQ1VSUkVO
Q1lcbiIpOwotCWZwcmludGYoc3RkZXJyLCAiIHwgRXhlY3V0aW5nIHJlYWRlciB0ZXN0Li4uIik7
Ci0KLQlja19wcl9zdG9yZV9pbnQoJnN0YXRlLCBIU19TVEFURV9HRVQpOwotCXdoaWxlIChja19w
cl9sb2FkX2ludCgmYmFycmllcltIU19TVEFURV9TVE9QXSkgIT0gbl90aHJlYWRzKQotCQlja19w
cl9zdGFsbCgpOwotCWNrX3ByX2luY19pbnQoJmJhcnJpZXJbSFNfU1RBVEVfU1RPUF0pOwotCWNv
bW1vbl9zbGVlcChyKTsKLQlja19wcl9zdG9yZV9pbnQoJnN0YXRlLCBIU19TVEFURV9TVFJJQ1Rf
UkVQTEFDRU1FTlQpOwotCXdoaWxlIChja19wcl9sb2FkX2ludCgmYmFycmllcltIU19TVEFURV9H
RVRdKSAhPSBuX3RocmVhZHMpCi0JCWNrX3ByX3N0YWxsKCk7Ci0KLQlmcHJpbnRmKHN0ZGVyciwg
ImRvbmUgKHJlYWRlciA9ICUiIFBSSXU2NCAiIHRpY2tzKVxuIiwKLQkgICAgYWNjKEhTX1NUQVRF
X0dFVCkgLyBuX3RocmVhZHMpOwotCi0JZnByaW50ZihzdGRlcnIsICIgfCBFeGVjdXRpbmcgc3Ry
aWN0IHJlcGxhY2VtZW50IHRlc3QuLi4iKTsKLQotCWEgPSByZXBlYXRlZCA9IDA7Ci0JY29tbW9u
X2FsYXJtKGFsYXJtX2hhbmRsZXIsICZhbGFybV9ldmVudCwgcik7Ci0KLQlja19wcl9pbmNfaW50
KCZiYXJyaWVyW0hTX1NUQVRFX0dFVF0pOwotCWZvciAoOzspIHsKLQkJcmVwZWF0ZWQrKzsKLQkJ
cyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKSB7Ci0JCQlp
ZiAoaSAmIDEpIHsKLQkJCQlzZXRfcmVwbGFjZShrZXlzW2ldKTsKLQkJCX0gZWxzZSB7Ci0JCQkJ
c2V0X3N3YXAoa2V5c1tpXSk7Ci0JCQl9Ci0JCX0KLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAt
IHM7Ci0KLQkJaWYgKG5leHRfc3RhZ2UgPT0gdHJ1ZSkgewotCQkJbmV4dF9zdGFnZSA9IGZhbHNl
OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlja19wcl9zdG9yZV9pbnQoJnN0YXRlLCBIU19TVEFU
RV9ERUxFVElPTik7Ci0Jd2hpbGUgKGNrX3ByX2xvYWRfaW50KCZiYXJyaWVyW0hTX1NUQVRFX1NU
UklDVF9SRVBMQUNFTUVOVF0pICE9IG5fdGhyZWFkcykKLQkJY2tfcHJfc3RhbGwoKTsKLQlzZXRf
cmVzZXQoKTsKLQlja19lcG9jaF9zeW5jaHJvbml6ZSgmZXBvY2hfd3IpOwotCWZwcmludGYoc3Rk
ZXJyLCAiZG9uZSAod3JpdGVyID0gJSIgUFJJdTY0ICIgdGlja3MsIHJlYWRlciA9ICUiIFBSSXU2
NCAiIHRpY2tzKVxuIiwKLQkgICAgYSAvIChyZXBlYXRlZCAqIGtleXNfbGVuZ3RoKSwgYWNjKEhT
X1NUQVRFX1NUUklDVF9SRVBMQUNFTUVOVCkgLyBuX3RocmVhZHMpOwotCi0JY29tbW9uX2FsYXJt
KGFsYXJtX2hhbmRsZXIsICZhbGFybV9ldmVudCwgcik7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiB8
IEV4ZWN1dGluZyBkZWxldGlvbiB0ZXN0ICglLjJmKS4uLiIsIHBfZCAqIDEwMCk7Ci0JYSA9IHJl
cGVhdGVkID0gMDsKLQlja19wcl9pbmNfaW50KCZiYXJyaWVyW0hTX1NUQVRFX1NUUklDVF9SRVBM
QUNFTUVOVF0pOwotCWZvciAoOzspIHsKLQkJZG91YmxlIGRlbGV0ZTsKLQotCQlyZXBlYXRlZCsr
OwotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspIHsK
LQkJCXNldF9pbnNlcnQoa2V5c1tpXSk7Ci0JCQlpZiAocF9kICE9IDAuMCkgewotCQkJCWRlbGV0
ZSA9IGNvbW1vbl9kcmFuZDQ4KCk7Ci0JCQkJaWYgKGRlbGV0ZSA8PSBwX2QpCi0JCQkJCXNldF9y
ZW1vdmUoa2V5c1tpXSk7Ci0JCQl9Ci0JCX0KLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAtIHM7
Ci0KLQkJaWYgKG5leHRfc3RhZ2UgPT0gdHJ1ZSkgewotCQkJbmV4dF9zdGFnZSA9IGZhbHNlOwot
CQkJYnJlYWs7Ci0JCX0KLQl9Ci0JY2tfcHJfc3RvcmVfaW50KCZzdGF0ZSwgSFNfU1RBVEVfUkVQ
TEFDRU1FTlQpOwotCXdoaWxlIChja19wcl9sb2FkX2ludCgmYmFycmllcltIU19TVEFURV9ERUxF
VElPTl0pICE9IG5fdGhyZWFkcykKLQkJY2tfcHJfc3RhbGwoKTsKLQotCXNldF9yZXNldCgpOwot
CWNrX2Vwb2NoX3N5bmNocm9uaXplKCZlcG9jaF93cik7Ci0JZnByaW50ZihzdGRlcnIsICJkb25l
ICh3cml0ZXIgPSAlIiBQUkl1NjQgIiB0aWNrcywgcmVhZGVyID0gJSIgUFJJdTY0ICIgdGlja3Mp
XG4iLAotCSAgICBhIC8gKHJlcGVhdGVkICoga2V5c19sZW5ndGgpLCBhY2MoSFNfU1RBVEVfREVM
RVRJT04pIC8gbl90aHJlYWRzKTsKLQotCWNvbW1vbl9hbGFybShhbGFybV9oYW5kbGVyLCAmYWxh
cm1fZXZlbnQsIHIpOwotCi0JZnByaW50ZihzdGRlcnIsICIgfCBFeGVjdXRpbmcgcmVwbGFjZW1l
bnQgdGVzdCAoJS4yZikuLi4iLCBwX3IgKiAxMDApOwotCWEgPSByZXBlYXRlZCA9IDA7Ci0JY2tf
cHJfaW5jX2ludCgmYmFycmllcltIU19TVEFURV9ERUxFVElPTl0pOwotCWZvciAoOzspIHsKLQkJ
ZG91YmxlIGRlbGV0ZSwgcmVwbGFjZTsKLQotCQlyZXBlYXRlZCsrOwotCQlzID0gcmR0c2MoKTsK
LQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspIHsKLQkJCXNldF9pbnNlcnQoa2V5
c1tpXSk7Ci0JCQlpZiAocF9kICE9IDAuMCkgewotCQkJCWRlbGV0ZSA9IGNvbW1vbl9kcmFuZDQ4
KCk7Ci0JCQkJaWYgKGRlbGV0ZSA8PSBwX2QpCi0JCQkJCXNldF9yZW1vdmUoa2V5c1tpXSk7Ci0J
CQl9IGVsc2UgewotCQkJCWRlbGV0ZSA9IDAuMDsKLQkJCX0KLQotCQkJaWYgKHBfciAhPSAwLjAp
IHsKLQkJCQlyZXBsYWNlID0gY29tbW9uX2RyYW5kNDgoKTsKLQkJCQlpZiAocmVwbGFjZSA8PSBw
X3IpIHsKLQkJCQkJaWYgKChpICYgMSkgfHwgKGRlbGV0ZSA8PSBwX2QpKSB7Ci0JCQkJCQlzZXRf
cmVwbGFjZShrZXlzW2ldKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXNldF9zd2FwKGtleXNbaV0p
OwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBz
OwotCi0JCWlmIChuZXh0X3N0YWdlID09IHRydWUpIHsKLQkJCW5leHRfc3RhZ2UgPSBmYWxzZTsK
LQkJCWJyZWFrOwotCQl9Ci0JfQotCWNrX3ByX3N0b3JlX2ludCgmc3RhdGUsIEhTX1NUQVRFX1NU
T1ApOwotCXdoaWxlIChja19wcl9sb2FkX2ludCgmYmFycmllcltIU19TVEFURV9SRVBMQUNFTUVO
VF0pICE9IG5fdGhyZWFkcykKLQkJY2tfcHJfc3RhbGwoKTsKLQlzZXRfcmVzZXQoKTsKLQlja19l
cG9jaF9zeW5jaHJvbml6ZSgmZXBvY2hfd3IpOwotCWZwcmludGYoc3RkZXJyLCAiZG9uZSAod3Jp
dGVyID0gJSIgUFJJdTY0ICIgdGlja3MsIHJlYWRlciA9ICUiIFBSSXU2NCAiIHRpY2tzKVxuIiwK
LQkgICAgYSAvIChyZXBlYXRlZCAqIGtleXNfbGVuZ3RoKSwgYWNjKEhTX1NUQVRFX1JFUExBQ0VN
RU5UKSAvIG5fdGhyZWFkcyk7Ci0KLQlja19wcl9pbmNfaW50KCZiYXJyaWVyW0hTX1NUQVRFX1JF
UExBQ0VNRU5UXSk7Ci0JZXBvY2hfdGVtcG9yYXJ5ID0gZXBvY2hfd3I7Ci0JY2tfZXBvY2hfc3lu
Y2hyb25pemUoJmVwb2NoX3dyKTsKLQotCWZwcmludGYoc3RkZXJyLCAiICctIFN1bW1hcnk6ICV1
IHBlbmRpbmcsICV1IHBlYWssICV1IHJlY2xhbWF0aW9ucyAtPiAiCi0JICAgICIldSBwZW5kaW5n
LCAldSBwZWFrLCAldSByZWNsYW1hdGlvbnNcblxuIiwKLQkgICAgZXBvY2hfdGVtcG9yYXJ5Lm5f
cGVuZGluZywgZXBvY2hfdGVtcG9yYXJ5Lm5fcGVhaywgZXBvY2hfdGVtcG9yYXJ5Lm5fZGlzcGF0
Y2gsCi0JICAgIGVwb2NoX3dyLm5fcGVuZGluZywgZXBvY2hfd3Iubl9wZWFrLCBlcG9jaF93ci5u
X2Rpc3BhdGNoKTsKLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcmhzL2JlbmNobWFyay9zZXJpYWwuYyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3Jocy9iZW5j
aG1hcmsvc2VyaWFsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZmE4OTI3YzNk
NWVjMzc0MDEyYTI5ZjQ2NTM1YjU5OTQ1NWJmYWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVn
cmVzc2lvbnMvY2tfcmhzL2JlbmNobWFyay9zZXJpYWwuYworKysgL2Rldi9udWxsCkBAIC0xLDUx
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTIgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdocwotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHMKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICog
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGNrX3Jocy5oPgotCi0jaW5jbHVkZSA8YXNz
ZXJ0Lmg+Ci0jaW5jbHVkZSA8Y2tfbWFsbG9jLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNs
dWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+
Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotCi0jaW5jbHVkZSAiLi4v
Li4vY29tbW9uLmgiCi0jaW5jbHVkZSAiLi4vLi4vLi4vc3JjL2NrX2h0X2hhc2guaCIKLQotc3Rh
dGljIGNrX3Joc190IGhzOwotc3RhdGljIGNoYXIgKiprZXlzOwotc3RhdGljIHNpemVfdCBrZXlz
X2xlbmd0aCA9IDA7Ci1zdGF0aWMgc2l6ZV90IGtleXNfY2FwYWNpdHkgPSAxMjg7Ci1zdGF0aWMg
dW5zaWduZWQgbG9uZyBnbG9iYWxfc2VlZDsKLQotc3RhdGljIHZvaWQgKgotaHNfbWFsbG9jKHNp
emVfdCByKQotewotCi0JcmV0dXJuIG1hbGxvYyhyKTsKLX0KLQotc3RhdGljIHZvaWQKLWhzX2Zy
ZWUodm9pZCAqcCwgc2l6ZV90IGIsIGJvb2wgcikKLXsKLQotCSh2b2lkKWI7Ci0JKHZvaWQpcjsK
LQotCWZyZWUocCk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2tfbWFsbG9jIG15
X2FsbG9jYXRvciA9IHsKLQkubWFsbG9jID0gaHNfbWFsbG9jLAotCS5mcmVlID0gaHNfZnJlZQot
fTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWhzX2hhc2goY29uc3Qgdm9pZCAqb2JqZWN0LCB1
bnNpZ25lZCBsb25nIHNlZWQpCi17Ci0JY29uc3QgY2hhciAqYyA9IG9iamVjdDsKLQl1bnNpZ25l
ZCBsb25nIGg7Ci0KLQloID0gKHVuc2lnbmVkIGxvbmcpTXVybXVySGFzaDY0QShjLCBzdHJsZW4o
YyksIHNlZWQpOwotCXJldHVybiBoOwotfQotCi1zdGF0aWMgYm9vbAotaHNfY29tcGFyZShjb25z
dCB2b2lkICpwcmV2aW91cywgY29uc3Qgdm9pZCAqY29tcGFyZSkKLXsKLQotCXJldHVybiBzdHJj
bXAocHJldmlvdXMsIGNvbXBhcmUpID09IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXRfZGVzdHJv
eSh2b2lkKQotewotCi0JY2tfcmhzX2Rlc3Ryb3koJmhzKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRp
YyB2b2lkCi1zZXRfaW5pdCh1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG1vZGUpCi17
Ci0KLQlpZiAoY2tfcmhzX2luaXQoJmhzLCBDS19SSFNfTU9ERV9PQkpFQ1QgfCBDS19SSFNfTU9E
RV9TUE1DIHwgbW9kZSwgaHNfaGFzaCwgaHNfY29tcGFyZSwKLQkgICAgJm15X2FsbG9jYXRvciwg
c2l6ZSwgZ2xvYmFsX3NlZWQpID09IGZhbHNlKSB7Ci0JCXBlcnJvcigiY2tfcmhzX2luaXQiKTsK
LQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCXJldHVybjsKLX0KLQotc3RhdGljIGJvb2wK
LXNldF9yZW1vdmUoY29uc3QgY2hhciAqdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBoOwotCi0J
aCA9IENLX1JIU19IQVNIKCZocywgaHNfaGFzaCwgdmFsdWUpOwotCXJldHVybiBja19yaHNfcmVt
b3ZlKCZocywgaCwgdmFsdWUpICE9IE5VTEw7Ci19Ci0KLXN0YXRpYyBib29sCi1zZXRfc3dhcChj
b25zdCBjaGFyICp2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGg7Ci0Jdm9pZCAqcHJldmlvdXM7
Ci0KLQloID0gQ0tfUkhTX0hBU0goJmhzLCBoc19oYXNoLCB2YWx1ZSk7Ci0JcmV0dXJuIGNrX3Jo
c19mYXMoJmhzLCBoLCB2YWx1ZSwgJnByZXZpb3VzKTsKLX0KLQotc3RhdGljIGJvb2wKLXNldF9y
ZXBsYWNlKGNvbnN0IGNoYXIgKnZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcgaDsKLQl2b2lkICpw
cmV2aW91czsKLQotCWggPSBDS19SSFNfSEFTSCgmaHMsIGhzX2hhc2gsIHZhbHVlKTsKLQlja19y
aHNfc2V0KCZocywgaCwgdmFsdWUsICZwcmV2aW91cyk7Ci0JcmV0dXJuIHByZXZpb3VzICE9IE5V
TEw7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLXNldF9nZXQoY29uc3QgY2hhciAqdmFsdWUpCi17Ci0J
dW5zaWduZWQgbG9uZyBoOwotCXZvaWQgKnY7Ci0KLQloID0gQ0tfUkhTX0hBU0goJmhzLCBoc19o
YXNoLCB2YWx1ZSk7Ci0JdiA9IGNrX3Joc19nZXQoJmhzLCBoLCB2YWx1ZSk7Ci0JcmV0dXJuIHY7
Ci19Ci0KLXN0YXRpYyBib29sCi1zZXRfaW5zZXJ0KGNvbnN0IGNoYXIgKnZhbHVlKQotewotCXVu
c2lnbmVkIGxvbmcgaDsKLQotCWggPSBDS19SSFNfSEFTSCgmaHMsIGhzX2hhc2gsIHZhbHVlKTsK
LQlyZXR1cm4gY2tfcmhzX3B1dCgmaHMsIGgsIHZhbHVlKTsKLX0KLQotc3RhdGljIGJvb2wKLXNl
dF9pbnNlcnRfdW5pcXVlKGNvbnN0IGNoYXIgKnZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcgaDsK
LQotCWggPSBDS19SSFNfSEFTSCgmaHMsIGhzX2hhc2gsIHZhbHVlKTsKLQlyZXR1cm4gY2tfcmhz
X3B1dF91bmlxdWUoJmhzLCBoLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBzaXplX3QKLXNldF9jb3Vu
dCh2b2lkKQotewotCi0JcmV0dXJuIGNrX3Joc19jb3VudCgmaHMpOwotfQotCi1zdGF0aWMgYm9v
bAotc2V0X3Jlc2V0KHZvaWQpCi17Ci0KLQlyZXR1cm4gY2tfcmhzX3Jlc2V0KCZocyk7Ci19Ci0K
LXN0YXRpYyB2b2lkCi1zZXRfZ2Modm9pZCkKLXsKLQotCWNrX3Joc19nYygmaHMpOwotCXJldHVy
bjsKLX0KLQotc3RhdGljIHZvaWQKLXNldF9yZWJ1aWxkKHZvaWQpCi17Ci0KLQlja19yaHNfcmVi
dWlsZCgmaHMpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLWtleXNfc2h1ZmZsZShjaGFy
ICoqaykKLXsKLQlzaXplX3QgaSwgajsKLQljaGFyICp0OwotCi0JZm9yIChpID0ga2V5c19sZW5n
dGg7IGkgPiAxOyBpLS0pIHsKLQkJaiA9IHJhbmQoKSAlIChpIC0gMSk7Ci0KLQkJaWYgKGogIT0g
aSAtIDEpIHsKLQkJCXQgPSBrW2kgLSAxXTsKLQkJCWtbaSAtIDFdID0ga1tqXTsKLQkJCWtbal0g
PSB0OwotCQl9Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotcnVuX3Rlc3QoY29u
c3QgY2hhciAqZmlsZSwgc2l6ZV90IHIsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQg
bW9kZSkKLXsKLQlGSUxFICpmcDsKLQljaGFyIGJ1ZmZlcls1MTJdOwotCXNpemVfdCBpLCBqOwot
CXVuc2lnbmVkIGludCBkID0gMDsKLQl1aW50NjRfdCBzLCBlLCBhLCByaSwgc2ksIGFpLCBzciwg
cmcsIHNnLCBhZywgc2QsIG5nLCBzcywgc3RzLCBzdSwgc2djLCBzYjsKLQlzdHJ1Y3QgY2tfcmhz
X3N0YXQgc3Q7Ci0JY2hhciAqKnQ7Ci0KLQlrZXlzID0gbWFsbG9jKHNpemVvZihjaGFyICopICog
a2V5c19jYXBhY2l0eSk7Ci0JYXNzZXJ0KGtleXMgIT0gTlVMTCk7Ci0KLQlmcCA9IGZvcGVuKGZp
bGUsICJyIik7Ci0JYXNzZXJ0KGZwICE9IE5VTEwpOwotCi0Jd2hpbGUgKGZnZXRzKGJ1ZmZlciwg
c2l6ZW9mKGJ1ZmZlciksIGZwKSAhPSBOVUxMKSB7Ci0JCWJ1ZmZlcltzdHJsZW4oYnVmZmVyKSAt
IDFdID0gJ1wwJzsKLQkJa2V5c1trZXlzX2xlbmd0aCsrXSA9IHN0cmR1cChidWZmZXIpOwotCQlh
c3NlcnQoa2V5c1trZXlzX2xlbmd0aCAtIDFdICE9IE5VTEwpOwotCi0JCWlmIChrZXlzX2xlbmd0
aCA9PSBrZXlzX2NhcGFjaXR5KSB7Ci0JCQl0ID0gcmVhbGxvYyhrZXlzLCBzaXplb2YoY2hhciAq
KSAqIChrZXlzX2NhcGFjaXR5ICo9IDIpKTsKLQkJCWFzc2VydCh0ICE9IE5VTEwpOwotCQkJa2V5
cyA9IHQ7Ci0JCX0KLQl9Ci0KLQl0ID0gcmVhbGxvYyhrZXlzLCBzaXplb2YoY2hhciAqKSAqIGtl
eXNfbGVuZ3RoKTsKLQlhc3NlcnQodCAhPSBOVUxMKTsKLQlrZXlzID0gdDsKLQotCXNldF9pbml0
KHNpemUsIG1vZGUpOwotCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKQotCQlkICs9
IHNldF9pbnNlcnQoa2V5c1tpXSkgPT0gZmFsc2U7Ci0JY2tfcmhzX3N0YXQoJmhzLCAmc3QpOwot
Ci0JZnByaW50ZihzdGRlcnIsICIjICV6dSBlbnRyaWVzIHN0b3JlZCwgJXUgZHVwbGljYXRlcywg
JXUgcHJvYmUuXG4iLAotCSAgICBzZXRfY291bnQoKSwgZCwgc3QucHJvYmVfbWF4aW11bSk7Ci0K
LQlhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsgaisrKSB7Ci0JCWlmIChzZXRfcmVzZXQoKSA9
PSBmYWxzZSkgewotCQkJY2tfZXJyb3IoIkVSUk9SOiBGYWlsZWQgdG8gcmVzZXQgaGFzaCB0YWJs
ZS5cbiIpOwotCQl9Ci0KLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IGtleXNfbGVuZ3RoOyBp
ID4gMDsgaS0tKQotCQkJZCArPSBzZXRfaW5zZXJ0KGtleXNbaSAtIDFdKSA9PSBmYWxzZTsKLQkJ
ZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAtIHM7Ci0JfQotCXJpID0gYSAvIChyICoga2V5c19sZW5n
dGgpOwotCi0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewotCQlpZiAoc2V0X3Jl
c2V0KCkgPT0gZmFsc2UpIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogRmFpbGVkIHRvIHJlc2V0IGhh
c2ggdGFibGUuXG4iKTsKLQkJfQotCi0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwg
a2V5c19sZW5ndGg7IGkrKykKLQkJCWQgKz0gc2V0X2luc2VydChrZXlzW2ldKSA9PSBmYWxzZTsK
LQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAtIHM7Ci0JfQotCXNpID0gYSAvIChyICoga2V5c19s
ZW5ndGgpOwotCi0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewotCQlrZXlzX3No
dWZmbGUoa2V5cyk7Ci0KLQkJaWYgKHNldF9yZXNldCgpID09IGZhbHNlKSB7Ci0JCQlja19lcnJv
cigiRVJST1I6IEZhaWxlZCB0byByZXNldCBoYXNoIHRhYmxlLlxuIik7Ci0JCX0KLQotCQlzID0g
cmR0c2MoKTsKLQkJZm9yIChpID0gMDsgaSA8IGtleXNfbGVuZ3RoOyBpKyspCi0JCQlkICs9IHNl
dF9pbnNlcnQoa2V5c1tpXSkgPT0gZmFsc2U7Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBz
OwotCX0KLQlhaSA9IGEgLyAociAqIGtleXNfbGVuZ3RoKTsKLQotCWEgPSAwOwotCWZvciAoaiA9
IDA7IGogPCByOyBqKyspIHsKLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXlz
X2xlbmd0aDsgaSsrKQotCQkJc2V0X3N3YXAoa2V5c1tpXSk7Ci0JCWUgPSByZHRzYygpOwotCQlh
ICs9IGUgLSBzOwotCX0KLQlzcyA9IGEgLyAociAqIGtleXNfbGVuZ3RoKTsKLQotCWEgPSAwOwot
CWZvciAoaiA9IDA7IGogPCByOyBqKyspIHsKLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IDA7
IGkgPCBrZXlzX2xlbmd0aDsgaSsrKQotCQkJc2V0X3JlcGxhY2Uoa2V5c1tpXSk7Ci0JCWUgPSBy
ZHRzYygpOwotCQlhICs9IGUgLSBzOwotCX0KLQlzciA9IGEgLyAociAqIGtleXNfbGVuZ3RoKTsK
LQotCXNldF9yZXNldCgpOwotCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKQotCQlz
ZXRfaW5zZXJ0KGtleXNbaV0pOwotCi0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykg
ewotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChpID0ga2V5c19sZW5ndGg7IGkgPiAwOyBpLS0pIHsK
LQkJCWlmIChzZXRfZ2V0KGtleXNbaSAtIDFdKSA9PSBOVUxMKSB7Ci0JCQkJY2tfZXJyb3IoIkVS
Uk9SOiBVbmV4cGVjdGVkIE5VTEwgdmFsdWUuXG4iKTsKLQkJCX0KLQkJfQotCQllID0gcmR0c2Mo
KTsKLQkJYSArPSBlIC0gczsKLQl9Ci0JcmcgPSBhIC8gKHIgKiBrZXlzX2xlbmd0aCk7Ci0KLQlh
ID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsgaisrKSB7Ci0JCXMgPSByZHRzYygpOwotCQlmb3Ig
KGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykgewotCQkJaWYgKHNldF9nZXQoa2V5c1tpXSkg
PT0gTlVMTCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUjogVW5leHBlY3RlZCBOVUxMIHZhbHVlLlxu
Iik7Ci0JCQl9Ci0JCX0KLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAtIHM7Ci0JfQotCXNnID0g
YSAvIChyICoga2V5c19sZW5ndGgpOwotCi0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGor
KykgewotCQlrZXlzX3NodWZmbGUoa2V5cyk7Ci0KLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9
IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKSB7Ci0JCQlpZiAoc2V0X2dldChrZXlzW2ldKSA9PSBO
VUxMKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SOiBVbmV4cGVjdGVkIE5VTEwgdmFsdWUuXG4iKTsK
LQkJCX0KLQkJfQotCQllID0gcmR0c2MoKTsKLQkJYSArPSBlIC0gczsKLQl9Ci0JYWcgPSBhIC8g
KHIgKiBrZXlzX2xlbmd0aCk7Ci0KLQlhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsgaisrKSB7
Ci0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJ
CXNldF9yZW1vdmUoa2V5c1tpXSk7Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBzOwotCi0J
CWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKQotCQkJc2V0X2luc2VydChrZXlzW2ld
KTsKLQl9Ci0Jc2QgPSBhIC8gKHIgKiBrZXlzX2xlbmd0aCk7Ci0KLQlhID0gMDsKLQlmb3IgKGog
PSAwOyBqIDwgcjsgaisrKSB7Ci0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5
c19sZW5ndGg7IGkrKykgewotCQkJc2V0X2dldCgiXHg1MFx4MDNceDA0XHgwNVx4MDZceDEwIik7
Ci0JCX0KLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAtIHM7Ci0JfQotCW5nID0gYSAvIChyICog
a2V5c19sZW5ndGgpOwotCi0Jc2V0X3Jlc2V0KCk7Ci0JZm9yIChpID0gMDsgaSA8IGtleXNfbGVu
Z3RoOyBpKyspCi0JCXNldF9pbnNlcnQoa2V5c1tpXSk7Ci0JZm9yIChpID0gMDsgaSA8IGtleXNf
bGVuZ3RoOyBpKyspCi0JCXNldF9yZW1vdmUoa2V5c1tpXSk7Ci0KLQlhID0gMDsKLQlmb3IgKGog
PSAwOyBqIDwgcjsgaisrKSB7Ci0JCXMgPSByZHRzYygpOwotCQlmb3IgKGkgPSAwOyBpIDwga2V5
c19sZW5ndGg7IGkrKykKLQkJCXNldF9pbnNlcnQoa2V5c1tpXSk7Ci0JCWUgPSByZHRzYygpOwot
CQlhICs9IGUgLSBzOwotCi0JCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKQotCQkJ
c2V0X3JlbW92ZShrZXlzW2ldKTsKLQl9Ci0Jc3RzID0gYSAvIChyICoga2V5c19sZW5ndGgpOwot
Ci0Jc2V0X3Jlc2V0KCk7Ci0KLQkvKiBQcnVuZSBkdXBsaWNhdGVzLiAqLwotCWZvciAoaSA9IDA7
IGkgPCBrZXlzX2xlbmd0aDsgaSsrKSB7Ci0JCWlmIChzZXRfaW5zZXJ0KGtleXNbaV0pID09IHRy
dWUpCi0JCQljb250aW51ZTsKLQotCQlmcmVlKGtleXNbaV0pOwotCQlrZXlzW2ldID0ga2V5c1st
LWtleXNfbGVuZ3RoXTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykK
LQkJc2V0X3JlbW92ZShrZXlzW2ldKTsKLQotCWEgPSAwOwotCWZvciAoaiA9IDA7IGogPCByOyBq
KyspIHsKLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsr
KQotCQkJc2V0X2luc2VydF91bmlxdWUoa2V5c1tpXSk7Ci0JCWUgPSByZHRzYygpOwotCQlhICs9
IGUgLSBzOwotCi0JCWZvciAoaSA9IDA7IGkgPCBrZXlzX2xlbmd0aDsgaSsrKQotCQkJc2V0X3Jl
bW92ZShrZXlzW2ldKTsKLQl9Ci0Jc3UgPSBhIC8gKHIgKiBrZXlzX2xlbmd0aCk7Ci0KLQlmb3Ig
KGkgPSAwOyBpIDwga2V5c19sZW5ndGg7IGkrKykKLQkJc2V0X2luc2VydF91bmlxdWUoa2V5c1tp
XSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwga2V5c19sZW5ndGggLyAyOyBpKyspCi0JCXNldF9yZW1v
dmUoa2V5c1tpXSk7Ci0KLQlhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgcjsgaisrKSB7Ci0JCXMg
PSByZHRzYygpOwotCQlzZXRfZ2MoKTsKLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAtIHM7Ci0J
fQotCXNnYyA9IGEgLyByOwotCi0JYSA9IDA7Ci0JZm9yIChqID0gMDsgaiA8IHI7IGorKykgewot
CQlzID0gcmR0c2MoKTsKLQkJc2V0X3JlYnVpbGQoKTsKLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0g
ZSAtIHM7Ci0JfQotCXNiID0gYSAvIHI7Ci0KLQlwcmludGYoIiV6dSAiCi0JICAgICIlIiBQUkl1
NjQgIiAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIl
IiBQUkl1NjQgIiAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0J
ICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIlIiBQUkl1NjQg
IiAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIlIiBQ
Ukl1NjQgIiAiCi0JICAgICIlIiBQUkl1NjQgIiAiCi0JICAgICIlIiBQUkl1NjQgIlxuIiwKLQkg
ICAga2V5c19sZW5ndGgsIHJpLCBzaSwgYWksIHNzLCBzciwgcmcsIHNnLCBhZywgc2QsIG5nLCBz
dHMsIHN1LCBzZ2MsIHNiKTsKLQotCWZjbG9zZShmcCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwga2V5
c19sZW5ndGg7IGkrKykgewotCQlmcmVlKGtleXNbaV0pOwotCX0KLQotCWZyZWUoa2V5cyk7Ci0J
a2V5c19sZW5ndGggPSAwOwotCXNldF9kZXN0cm95KCk7Ci0JcmV0dXJuOwotfQotCi1pbnQKLW1h
aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQl1bnNpZ25lZCBpbnQgciwgc2l6ZTsKLQot
CWNvbW1vbl9zcmFuZDQ4KChsb25nIGludCl0aW1lKE5VTEwpKTsKLQlpZiAoYXJnYyA8IDIpIHsK
LQkJY2tfZXJyb3IoIlVzYWdlOiBja19yaHMgPGRpY3Rpb25hcnk+IFs8cmVwZXRpdGlvbnM+IDxp
bml0aWFsIHNpemU+XVxuIik7Ci0JfQotCi0JciA9IDE2OwotCWlmIChhcmdjID49IDMpCi0JCXIg
PSBhdG9pKGFyZ3ZbMl0pOwotCi0Jc2l6ZSA9IDg7Ci0JaWYgKGFyZ2MgPj0gNCkKLQkJc2l6ZSA9
IGF0b2koYXJndlszXSk7Ci0KLQlnbG9iYWxfc2VlZCA9IGNvbW1vbl9scmFuZDQ4KCk7Ci0JcnVu
X3Rlc3QoYXJndlsxXSwgciwgc2l6ZSwgMCk7Ci0JcnVuX3Rlc3QoYXJndlsxXSwgciwgc2l6ZSwg
Q0tfUkhTX01PREVfUkVBRF9NT1NUTFkpOwotCWZwcmludGYoc3RkZXJyLCAiIyAgICByZXZlcnNl
X2luc2VydGlvbiBzZXJpYWxfaW5zZXJ0aW9uIHJhbmRvbV9pbnNlcnRpb24gc2VyaWFsX3N3YXAg
IgotCSAgICAic2VyaWFsX3JlcGxhY2UgcmV2ZXJzZV9nZXQgc2VyaWFsX2dldCByYW5kb21fZ2V0
IHNlcmlhbF9yZW1vdmUgbmVnYXRpdmVfZ2V0IHRvbWJzdG9uZSAiCi0JICAgICJzZXRfdW5pcXVl
IGdjIHJlYnVpbGRcblxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcmhzL3ZhbGlkYXRlL01h
a2VmaWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tf
cmhzL3ZhbGlkYXRlL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTg3
Mzk1ZjU0YTNiODc0YTg5OGRmY2Y0ZDM3ZTJhZjU2YWFlNjFiLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2NrL3JlZ3Jlc3Npb25zL2NrX3Jocy92YWxpZGF0ZS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBA
IC0xLDE3ICswLDAgQEAKLS5QSE9OWTogY2hlY2sgY2xlYW4gZGlzdHJpYnV0aW9uCi0KLU9CSkVD
VFM9c2VyaWFsCi0KLWFsbDogJChPQkpFQ1RTKQotCi1zZXJpYWw6IHNlcmlhbC5jIC4uLy4uLy4u
L2luY2x1ZGUvY2tfcmhzLmggLi4vLi4vLi4vc3JjL2NrX3Jocy5jCi0JJChDQykgJChDRkxBR1Mp
IC1vIHNlcmlhbCBzZXJpYWwuYyAuLi8uLi8uLi9zcmMvY2tfcmhzLmMKLQotY2hlY2s6IGFsbAot
CS4vc2VyaWFsCi0KLWNsZWFuOgotCXJtIC1yZiAqfiAqLm8gJChPQkpFQ1RTKSAqLmRTWU0gKi5l
eGUKLQotaW5jbHVkZSAuLi8uLi8uLi9idWlsZC9yZWdyZXNzaW9ucy5idWlsZAotQ0ZMQUdTKz0t
RF9HTlVfU09VUkNFCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19yaHMvdmFsaWRhdGUvc2VyaWFsLmMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yaHMvdmFsaWRhdGUvc2VyaWFsLmMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmOTM2NWZlZGVhNGI5MDE2YjEwMDk5ZjQwYmFh
YTdlNTM1OWJmNmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcmhzL3Zh
bGlkYXRlL3NlcmlhbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzEwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgMjAxMiBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2hzCi0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdocwotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5E
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSA8Y2tfcmhzLmg+Ci0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxj
a19tYWxsb2MuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5j
bHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9j
b21tb24uaCIKLQotc3RhdGljIHZvaWQgKgotaHNfbWFsbG9jKHNpemVfdCByKQotewotCi0JcmV0
dXJuIG1hbGxvYyhyKTsKLX0KLQotc3RhdGljIHZvaWQKLWhzX2ZyZWUodm9pZCAqcCwgc2l6ZV90
IGIsIGJvb2wgcikKLXsKLQotCSh2b2lkKWI7Ci0JKHZvaWQpcjsKLQlmcmVlKHApOwotCXJldHVy
bjsKLX0KLQotc3RhdGljIHN0cnVjdCBja19tYWxsb2MgbXlfYWxsb2NhdG9yID0gewotCS5tYWxs
b2MgPSBoc19tYWxsb2MsCi0JLmZyZWUgPSBoc19mcmVlCi19OwotCi1jb25zdCBjaGFyICp0ZXN0
W10gPSB7ICJTYW15IiwgIkFsIiwgIkJhaHJhIiwgImRhbmNlcyIsICJpbiIsICJ0aGUiLCAid2lu
ZC4iLCAiT25jZSIsCi0JCQkidXBvbiIsICJhIiwgInRpbWUiLCAiaGlzIiwgImd5cHN5IiwgImF0
ZSIsICJvbmUiLCAiaXRzeSIsCi0JCQkgICAgImJpdHN5IiwgInNwaWRlci4iLCAiV2hhdCIsICJn
b2VzIiwgInVwIiwgIm11c3QiLAotCQkJCSJjb21lIiwgImRvd24uIiwgIldoYXQiLCAiaXMiLCAi
ZG93biIsICJzdGF5cyIsCi0JCQkJICAgICJkb3duLiIsICJBIiwgIkIiLCAiQyIsICJEIiwgIkUi
LCAiRiIsICJHIiwgIkgiLAotCQkJCQkiSSIsICJKIiwgIksiLCAiTCIsICJNIiwgIk4iLCAiTyIs
ICJQIiwgIlEiIH07Ci0KLWNvbnN0IGNoYXIgKm5lZ2F0aXZlID0gIm5lZ2F0aXZlIjsKLQotLyog
UHVycG9zZWZ1bGx5IGNyYXBweSBoYXNoIGZ1bmN0aW9uLiAqLwotc3RhdGljIHVuc2lnbmVkIGxv
bmcKLWhzX2hhc2goY29uc3Qgdm9pZCAqb2JqZWN0LCB1bnNpZ25lZCBsb25nIHNlZWQpCi17Ci0J
Y29uc3QgY2hhciAqYyA9IG9iamVjdDsKLQl1bnNpZ25lZCBsb25nIGg7Ci0KLQkodm9pZClzZWVk
OwotCWggPSBjWzBdOwotCXJldHVybiBoOwotfQotCi1zdGF0aWMgYm9vbAotaHNfY29tcGFyZShj
b25zdCB2b2lkICpwcmV2aW91cywgY29uc3Qgdm9pZCAqY29tcGFyZSkKLXsKLQotCXJldHVybiBz
dHJjbXAocHJldmlvdXMsIGNvbXBhcmUpID09IDA7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLXRlc3Rf
aXAodm9pZCAqa2V5LCB2b2lkICpjbG9zdXJlKQotewotCWNvbnN0IGNoYXIgKmEgPSBrZXk7Ci0J
Y29uc3QgY2hhciAqYiA9IGNsb3N1cmU7Ci0KLQlpZiAoc3RyY21wKGEsIGIpICE9IDApCi0JCWNr
X2Vycm9yKCJNaXNtYXRjaDogJXMgIT0gJXNcbiIsIGEsIGIpOwotCi0JcmV0dXJuIGNsb3N1cmU7
Ci19Ci0KLXN0YXRpYyB2b2lkICoKLXRlc3RfbmVnYXRpdmUodm9pZCAqa2V5LCB2b2lkICpjbG9z
dXJlKQotewotCi0JKHZvaWQpY2xvc3VyZTsKLQlpZiAoa2V5ICE9IE5VTEwpCi0JCWNrX2Vycm9y
KCJFUlJPUjogQXBwbHkgY2FsbGJhY2sgZXhwZWN0cyBOVUxMIGFyZ3VtZW50IGluc3RlYWQgb2Yg
WyVzXVxuIiwga2V5KTsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCAqCi10ZXN0
X3VuaXF1ZSh2b2lkICprZXksIHZvaWQgKmNsb3N1cmUpCi17Ci0KLQlpZiAoa2V5ICE9IE5VTEwp
Ci0JCWNrX2Vycm9yKCJFUlJPUjogQXBwbHkgY2FsbGJhY2sgZXhwZWN0cyBOVUxMIGFyZ3VtZW50
IGluc3RlYWQgb2YgWyVzXVxuIiwga2V5KTsKLQotCXJldHVybiBjbG9zdXJlOwotfQotCi1zdGF0
aWMgdm9pZCAqCi10ZXN0X3JlbW92ZSh2b2lkICprZXksIHZvaWQgKmNsb3N1cmUpCi17Ci0KLQko
dm9pZClrZXk7Ci0JKHZvaWQpY2xvc3VyZTsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMg
dm9pZAotcnVuX3Rlc3QodW5zaWduZWQgaW50IGlzLCB1bnNpZ25lZCBpbnQgYWQpCi17Ci0JY2tf
cmhzX3QgaHNbMTZdOwotCWNvbnN0IHNpemVfdCBzaXplID0gc2l6ZW9mKGhzKSAvIHNpemVvZigq
aHMpOwotCXNpemVfdCBpLCBqOwotCWNvbnN0IGNoYXIgKmJsb2IgPSAiI2Jsb2JzIjsKLQl1bnNp
Z25lZCBsb25nIGg7Ci0KLQlpZiAoY2tfcmhzX2luaXQoJmhzWzBdLCBDS19SSFNfTU9ERV9TUE1D
IHwgQ0tfUkhTX01PREVfT0JKRUNUIHwgYWQsIGhzX2hhc2gsIGhzX2NvbXBhcmUsICZteV9hbGxv
Y2F0b3IsIGlzLCA2NjAyODM0KSA9PSBmYWxzZSkKLQkJY2tfZXJyb3IoImNrX3Joc19pbml0XG4i
KTsKLQotCWZvciAoaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLQkJZm9yIChpID0gMDsgaSA8IHNp
emVvZih0ZXN0KSAvIHNpemVvZigqdGVzdCk7IGkrKykgewotCQkJaCA9IHRlc3RbaV1bMF07Ci0J
CQlpZiAoY2tfcmhzX2dldCgmaHNbal0sIGgsIHRlc3RbaV0pICE9IE5VTEwpIHsKLQkJCQljb250
aW51ZTsKLQkJCX0KLQotCQkJaWYgKGkgJiAxKSB7Ci0JCQkJaWYgKGNrX3Joc19wdXRfdW5pcXVl
KCZoc1tqXSwgaCwgdGVzdFtpXSkgPT0gZmFsc2UpCi0JCQkJCWNrX2Vycm9yKCJFUlJPUiBbJXp1
XTogRmFpbGVkIHRvIGluc2VydCB1bmlxdWUgKCVzKVxuIiwgaiwgdGVzdFtpXSk7Ci0JCQl9IGVs
c2UgaWYgKGNrX3Joc19hcHBseSgmaHNbal0sIGgsIHRlc3RbaV0sIHRlc3RfdW5pcXVlLAotCQkJ
ICAgICh2b2lkICopKHVpbnRwdHJfdCl0ZXN0W2ldKSA9PSBmYWxzZSkgewotCQkJCWNrX2Vycm9y
KCJFUlJPUjogRmFpbGVkIHRvIGFwcGx5IGZvciBpbnNlcnRpb24uXG4iKTsKLQkJCX0KLQotCQkJ
aWYgKGkgJiAxKSB7Ci0JCQkJaWYgKGNrX3Joc19yZW1vdmUoJmhzW2pdLCBoLCB0ZXN0W2ldKSA9
PSBmYWxzZSkKLQkJCQkJY2tfZXJyb3IoIkVSUk9SIFslenVdOiBGYWlsZWQgdG8gcmVtb3ZlIHVu
aXF1ZSAoJXMpXG4iLCBqLCB0ZXN0W2ldKTsKLQkJCX0gZWxzZSBpZiAoY2tfcmhzX2FwcGx5KCZo
c1tqXSwgaCwgdGVzdFtpXSwgdGVzdF9yZW1vdmUsIE5VTEwpID09IGZhbHNlKSB7Ci0JCQkJY2tf
ZXJyb3IoIkVSUk9SOiBGYWlsZWQgdG8gcmVtb3ZlIGFwcGx5LlxuIik7Ci0JCQl9Ci0KLQkJCWlm
IChja19yaHNfYXBwbHkoJmhzW2pdLCBoLCB0ZXN0W2ldLCB0ZXN0X25lZ2F0aXZlLAotCQkJICAg
ICh2b2lkICopKHVpbnRwdHJfdCl0ZXN0W2ldKSA9PSBmYWxzZSkKLQkJCQlja19lcnJvcigiRVJS
T1I6IEZhaWxlZCB0byBhcHBseS5cbiIpOwotCi0JCQlicmVhazsKLQkJfQotCi0JCWZvciAoaSA9
IDA7IGkgPCBzaXplb2YodGVzdCkgLyBzaXplb2YoKnRlc3QpOyBpKyspIHsKLQkJCWggPSB0ZXN0
W2ldWzBdOwotCQkJY2tfcmhzX3B1dCgmaHNbal0sIGgsIHRlc3RbaV0pOwotCQkJaWYgKGNrX3Jo
c19wdXQoJmhzW2pdLCBoLCB0ZXN0W2ldKSA9PSB0cnVlKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9S
IFsldV0gWzFdOiBwdXQgbXVzdCBmYWlsIG9uIGNvbGxpc2lvbiAoJXMpLlxuIiwgaXMsIHRlc3Rb
aV0pOwotCQkJfQotCQkJaWYgKGNrX3Joc19nZXQoJmhzW2pdLCBoLCB0ZXN0W2ldKSA9PSBOVUxM
KSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFsldV06IGdldCBtdXN0IG5vdCBmYWlsIGFmdGVyIHB1
dFxuIiwgaXMpOwotCQkJfQotCQl9Ci0KLQkJLyogVGVzdCBncm93IHNlbWFudGljcy4gKi8KLQkJ
Y2tfcmhzX2dyb3coJmhzW2pdLCAxMjgpOwotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHRlc3Qp
IC8gc2l6ZW9mKCp0ZXN0KTsgaSsrKSB7Ci0JCQloID0gdGVzdFtpXVswXTsKLQkJCWlmIChja19y
aHNfcHV0KCZoc1tqXSwgaCwgdGVzdFtpXSkgPT0gdHJ1ZSkgewotCQkJCWNrX2Vycm9yKCJFUlJP
UiBbJXVdIFsyXTogcHV0IG11c3QgZmFpbCBvbiBjb2xsaXNpb24uXG4iLCBpcyk7Ci0JCQl9Ci0K
LQkJCWlmIChja19yaHNfZ2V0KCZoc1tqXSwgaCwgdGVzdFtpXSkgPT0gTlVMTCkgewotCQkJCWNr
X2Vycm9yKCJFUlJPUiBbJXVdOiBnZXQgbXVzdCBub3QgZmFpbFxuIiwgaXMpOwotCQkJfQotCQl9
Ci0KLQkJaCA9IGJsb2JbMF07Ci0JCWlmIChja19yaHNfZ2V0KCZoc1tqXSwgaCwgYmxvYikgPT0g
TlVMTCkgewotCQkJaWYgKGogPiAwKQotCQkJCWNrX2Vycm9yKCJFUlJPUiBbJXVdOiBCbG9iIG11
c3QgYWx3YXlzIGV4aXN0IGFmdGVyIGZpcnN0LlxuIiwgaXMpOwotCi0JCQlpZiAoY2tfcmhzX3B1
dCgmaHNbal0sIGgsIGJsb2IpID09IGZhbHNlKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFsldV06
IEEgdW5pcXVlIGJsb2IgcHV0IGZhaWxlZC5cbiIsIGlzKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJ
CWlmIChja19yaHNfcHV0KCZoc1tqXSwgaCwgYmxvYikgPT0gdHJ1ZSkgewotCQkJCWNrX2Vycm9y
KCJFUlJPUiBbJXVdOiBEdXBsaWNhdGUgYmxvYiBwdXQgc3VjY2VlZGVkLlxuIiwgaXMpOwotCQkJ
fQotCQl9Ci0KLQkJLyogR3JvdyBzZXQgYW5kIGNoZWNrIGdldCBzZW1hbnRpY3MuICovCi0JCWNr
X3Joc19ncm93KCZoc1tqXSwgNTEyKTsKLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZXN0KSAv
IHNpemVvZigqdGVzdCk7IGkrKykgewotCQkJaCA9IHRlc3RbaV1bMF07Ci0JCQlpZiAoY2tfcmhz
X2dldCgmaHNbal0sIGgsIHRlc3RbaV0pID09IE5VTEwpIHsKLQkJCQlja19lcnJvcigiRVJST1Ig
WyV1XTogZ2V0IG11c3Qgbm90IGZhaWxcbiIsIGlzKTsKLQkJCX0KLQkJfQotCi0JCS8qIERlbGV0
ZSBhbmQgY2hlY2sgbmVnYXRpdmUgbWVtYmVyc2hpcC4gKi8KLQkJZm9yIChpID0gMDsgaSA8IHNp
emVvZih0ZXN0KSAvIHNpemVvZigqdGVzdCk7IGkrKykgewotCQkJdm9pZCAqcjsKLQotCQkJaCA9
IHRlc3RbaV1bMF07Ci0JCQlpZiAoY2tfcmhzX2dldCgmaHNbal0sIGgsIHRlc3RbaV0pID09IE5V
TEwpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChyID0gY2tfcmhzX3JlbW92ZSgmaHNbal0sIGgs
IHRlc3RbaV0pLCByID09IE5VTEwpIHsKLQkJCQlja19lcnJvcigiRVJST1IgWyV1XTogcmVtb3Zl
IG11c3Qgbm90IGZhaWxcbiIsIGlzKTsKLQkJCX0KLQotCQkJaWYgKHN0cmNtcChyLCB0ZXN0W2ld
KSAhPSAwKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFsldV06IFJlbW92ZWQgaW5jb3JyZWN0IG5v
ZGUgKCVzICE9ICVzKVxuIiwgKGNoYXIgKilyLCB0ZXN0W2ldLCBpcyk7Ci0JCQl9Ci0JCX0KLQot
CQkvKiBUZXN0IHJlcGxhY2VtZW50IHNlbWFudGljcy4gKi8KLQkJZm9yIChpID0gMDsgaSA8IHNp
emVvZih0ZXN0KSAvIHNpemVvZigqdGVzdCk7IGkrKykgewotCQkJdm9pZCAqcjsKLQkJCWJvb2wg
ZDsKLQotCQkJaCA9IHRlc3RbaV1bMF07Ci0JCQlkID0gY2tfcmhzX2dldCgmaHNbal0sIGgsIHRl
c3RbaV0pICE9IE5VTEw7Ci0JCQlpZiAoY2tfcmhzX3NldCgmaHNbal0sIGgsIHRlc3RbaV0sICZy
KSA9PSBmYWxzZSkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbJXVdOiBGYWlsZWQgdG8gc2V0XG4i
LCBpcyk7Ci0JCQl9Ci0KLQkJCS8qIEV4cGVjdGVkIHJlcGxhY2VtZW50LiAqLwotCQkJaWYgKGQg
PT0gdHJ1ZSAmJiAociA9PSBOVUxMIHx8IHN0cmNtcChyLCB0ZXN0W2ldKSAhPSAwKSkgewotCQkJ
CWNrX2Vycm9yKCJFUlJPUiBbJXVdOiBJbmNvcnJlY3QgcHJldmlvdXMgdmFsdWU6ICVzICE9ICVz
XG4iLAotCQkJCSAgICBpcywgdGVzdFtpXSwgKGNoYXIgKilyKTsKLQkJCX0KLQotCQkJLyogUmVw
bGFjZW1lbnQgc2hvdWxkIHN1Y2NlZWQuICovCi0JCQlpZiAoY2tfcmhzX2ZhcygmaHNbal0sIGgs
IHRlc3RbaV0sICZyKSA9PSBmYWxzZSkKLQkJCQlja19lcnJvcigiRVJST1IgWyV1XTogY2tfcmhz
X2ZhcyBtdXN0IHN1Y2NlZWQuXG4iLCBpcyk7Ci0KLQkJCWlmIChzdHJjbXAociwgdGVzdFtpXSkg
IT0gMCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbJXVdOiBJbmNvcnJlY3QgcmVwbGFjZWQgdmFs
dWU6ICVzICE9ICVzXG4iLAotCQkJCSAgICBpcywgdGVzdFtpXSwgKGNoYXIgKilyKTsKLQkJCX0K
LQotCQkJaWYgKGNrX3Joc19mYXMoJmhzW2pdLCBoLCBuZWdhdGl2ZSwgJnIpID09IHRydWUpCi0J
CQkJY2tfZXJyb3IoIkVSUk9SIFsldV06IFJlcGxhY2VtZW50IG9mIG5lZ2F0aXZlIHNob3VsZCBm
YWlsLlxuIiwgaXMpOwotCi0JCQlpZiAoY2tfcmhzX3NldCgmaHNbal0sIGgsIHRlc3RbaV0sICZy
KSA9PSBmYWxzZSkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbJXVdOiBGYWlsZWQgdG8gc2V0IFsx
XVxuIiwgaXMpOwotCQkJfQotCi0JCQlpZiAoc3RyY21wKHIsIHRlc3RbaV0pICE9IDApIHsKLQkJ
CQlja19lcnJvcigiRVJST1IgWyV1XTogSW52YWxpZCAmaHNbal06ICVzICE9ICVzXG4iLCAoY2hh
ciAqKXIsIHRlc3RbaV0sIGlzKTsKLQkJCX0KLQkJCS8qIEF0dGVtcHQgaW4tcGxhY2UgbXV0YXRp
b24uICovCi0JCQlpZiAoY2tfcmhzX2FwcGx5KCZoc1tqXSwgaCwgdGVzdFtpXSwgdGVzdF9pcCwK
LQkJCSAgICAodm9pZCAqKSh1aW50cHRyX3QpdGVzdFtpXSkgPT0gZmFsc2UpIHsKLQkJCQlja19l
cnJvcigiRVJST1IgWyV1XTogRmFpbGVkIHRvIGFwcGx5OiAlcyAhPSAlc1xuIiwgaXMsIChjaGFy
ICopciwgdGVzdFtpXSk7Ci0JCQl9Ci0KLQkJCWQgPSBja19yaHNfZ2V0KCZoc1tqXSwgaCwgdGVz
dFtpXSkgIT0gTlVMTDsKLQkJCWlmIChkID09IGZhbHNlKQotCQkJCWNrX2Vycm9yKCJFUlJPUiBb
JXVdOiBFeHBlY3RlZCBbJXNdIHRvIGV4aXN0LlxuIiwgaXMsIHRlc3RbaV0pOwotCQl9Ci0KLQkJ
aWYgKGogPT0gc2l6ZSAtIDEpCi0JCQlicmVhazsKLQotCQlpZiAoY2tfcmhzX21vdmUoJmhzW2og
KyAxXSwgJmhzW2pdLCBoc19oYXNoLCBoc19jb21wYXJlLCAmbXlfYWxsb2NhdG9yKSA9PSBmYWxz
ZSkKLQkJCWNrX2Vycm9yKCJGYWlsZWQgdG8gbW92ZSBoYXNoIHRhYmxlIik7Ci0KLQkJY2tfcmhz
X2djKCZoc1tqICsgMV0pOwotCi0JCWlmIChja19yaHNfcmVidWlsZCgmaHNbaiArIDFdKSA9PSBm
YWxzZSkKLQkJCWNrX2Vycm9yKCJGYWlsZWQgdG8gcmVidWlsZCIpOwotCX0KLQotCXJldHVybjsK
LX0KLQotaW50Ci1tYWluKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGs7Ci0KLQlmb3IgKGsgPSAx
NjsgayA8PSA2NDsgayA8PD0gMSkgewotCQlydW5fdGVzdChrLCAwKTsKLQkJYnJlYWs7Ci0JfQot
Ci0JcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3JpbmcvYmVuY2htYXJrL01ha2VmaWxlIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcmluZy9iZW5jaG1hcmsvTWFr
ZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwODdlZDE4ZmIwNDdmYzc5NGEw
YWFmOTlmNWU1ZTNiN2VmMmQ2YzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfcmluZy9iZW5jaG1hcmsvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBA
Ci0uUEhPTlk6IGNsZWFuIGRpc3RyaWJ1dGlvbgotCi1PQkpFQ1RTPWxhdGVuY3kKLQotYWxsOiAk
KE9CSkVDVFMpCi0KLWxhdGVuY3k6IGxhdGVuY3kuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX3Jpbmcu
aAotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBsYXRlbmN5IGxhdGVuY3kuYwotCi1jbGVhbjoKLQlybSAt
cmYgKn4gKi5vICQoT0JKRUNUUykgKi5kU1lNICouZXhlCi0KLWluY2x1ZGUgLi4vLi4vLi4vYnVp
bGQvcmVncmVzc2lvbnMuYnVpbGQKLUNGTEFHUys9LURfR05VX1NPVVJDRQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcmluZy9iZW5j
aG1hcmsvbGF0ZW5jeS5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVz
c2lvbnMvY2tfcmluZy9iZW5jaG1hcmsvbGF0ZW5jeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2NTdiZTRkYmMwZTYxMGQ2MmZmMTliYjI5OTQ0MjdkY2RhN2VmM2QwLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3JpbmcvYmVuY2htYXJrL2xhdGVuY3kuYwor
KysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0jaW5jbHVkZSA8Y2tfcmluZy5oPgotI2lu
Y2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RkaW8u
aD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi0j
aWZuZGVmIElURVJBVElPTlMKLSNkZWZpbmUgSVRFUkFUSU9OUyAoMTI4MDAwKQotI2VuZGlmCi0K
LXN0cnVjdCBlbnRyeSB7Ci0JaW50IHRpZDsKLQlpbnQgdmFsdWU7Ci19OwotCi1pbnQKLW1haW4o
aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlpbnQgaSwgciwgc2l6ZTsKLQl1aW50NjRfdCBz
LCBlLCBlX2EsIGRfYTsKLQlzdHJ1Y3QgZW50cnkgZW50cnkgPSB7MCwgMH07Ci0JY2tfcmluZ19i
dWZmZXJfdCAqYnVmOwotCWNrX3JpbmdfdCByaW5nOwotCi0JaWYgKGFyZ2MgIT0gMikgewotCQlj
a19lcnJvcigiVXNhZ2U6IGxhdGVuY3kgPHNpemU+XG4iKTsKLQl9Ci0KLQlzaXplID0gYXRvaShh
cmd2WzFdKTsKLQlpZiAoc2l6ZSA8PSA0IHx8IChzaXplICYgKHNpemUgLSAxKSkpIHsKLQkJY2tf
ZXJyb3IoIkVSUk9SOiBTaXplIG11c3QgYmUgYSBwb3dlciBvZiAyIGdyZWF0ZXIgdGhhbiA0Llxu
Iik7Ci0JfQotCi0JYnVmID0gbWFsbG9jKHNpemVvZihja19yaW5nX2J1ZmZlcl90KSAqIHNpemUp
OwotCWlmIChidWYgPT0gTlVMTCkgewotCQlja19lcnJvcigiRVJST1I6IEZhaWxlZCB0byBhbGxv
Y2F0ZSBidWZmZXJcbiIpOwotCX0KLQotCWNrX3JpbmdfaW5pdCgmcmluZywgc2l6ZSk7Ci0KLQll
X2EgPSBkX2EgPSBzID0gZSA9IDA7Ci0JZm9yIChyID0gMDsgciA8IElURVJBVElPTlM7IHIrKykg
ewotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIDQ7IGkgKz0gNCkgewotCQkJcyA9IHJkdHNjKCk7
Ci0JCQlja19yaW5nX2VucXVldWVfc3BzYygmcmluZywgYnVmLCAmZW50cnkpOwotCQkJY2tfcmlu
Z19lbnF1ZXVlX3Nwc2MoJnJpbmcsIGJ1ZiwgJmVudHJ5KTsKLQkJCWNrX3JpbmdfZW5xdWV1ZV9z
cHNjKCZyaW5nLCBidWYsICZlbnRyeSk7Ci0JCQlja19yaW5nX2VucXVldWVfc3BzYygmcmluZywg
YnVmLCAmZW50cnkpOwotCQkJZSA9IHJkdHNjKCk7Ci0JCX0KLQkJZV9hICs9IChlIC0gcykgLyA0
OwotCi0JCWZvciAoaSA9IDA7IGkgPCBzaXplIC8gNDsgaSArPSA0KSB7Ci0JCQlzID0gcmR0c2Mo
KTsKLQkJCWNrX3JpbmdfZGVxdWV1ZV9zcHNjKCZyaW5nLCBidWYsICZlbnRyeSk7Ci0JCQlja19y
aW5nX2RlcXVldWVfc3BzYygmcmluZywgYnVmLCAmZW50cnkpOwotCQkJY2tfcmluZ19kZXF1ZXVl
X3Nwc2MoJnJpbmcsIGJ1ZiwgJmVudHJ5KTsKLQkJCWNrX3JpbmdfZGVxdWV1ZV9zcHNjKCZyaW5n
LCBidWYsICZlbnRyeSk7Ci0JCQllID0gcmR0c2MoKTsKLQkJfQotCQlkX2EgKz0gKGUgLSBzKSAv
IDQ7Ci0JfQotCi0JcHJpbnRmKCJzcHNjICUxMGQgJTE2IiBQUkl1NjQgIiAlMTYiIFBSSXU2NCAi
XG4iLCBzaXplLCBlX2EgLyBJVEVSQVRJT05TLCBkX2EgLyBJVEVSQVRJT05TKTsKLQotCWVfYSA9
IGRfYSA9IHMgPSBlID0gMDsKLQlmb3IgKHIgPSAwOyByIDwgSVRFUkFUSU9OUzsgcisrKSB7Ci0J
CWZvciAoaSA9IDA7IGkgPCBzaXplIC8gNDsgaSArPSA0KSB7Ci0JCQlzID0gcmR0c2MoKTsKLQkJ
CWNrX3JpbmdfZW5xdWV1ZV9zcG1jKCZyaW5nLCBidWYsICZlbnRyeSk7Ci0JCQlja19yaW5nX2Vu
cXVldWVfc3BtYygmcmluZywgYnVmLCAmZW50cnkpOwotCQkJY2tfcmluZ19lbnF1ZXVlX3NwbWMo
JnJpbmcsIGJ1ZiwgJmVudHJ5KTsKLQkJCWNrX3JpbmdfZW5xdWV1ZV9zcG1jKCZyaW5nLCBidWYs
ICZlbnRyeSk7Ci0JCQllID0gcmR0c2MoKTsKLQkJfQotCQllX2EgKz0gKGUgLSBzKSAvIDQ7Ci0K
LQkJZm9yIChpID0gMDsgaSA8IHNpemUgLyA0OyBpICs9IDQpIHsKLQkJCXMgPSByZHRzYygpOwot
CQkJY2tfcmluZ19kZXF1ZXVlX3NwbWMoJnJpbmcsIGJ1ZiwgJmVudHJ5KTsKLQkJCWNrX3Jpbmdf
ZGVxdWV1ZV9zcG1jKCZyaW5nLCBidWYsICZlbnRyeSk7Ci0JCQlja19yaW5nX2RlcXVldWVfc3Bt
YygmcmluZywgYnVmLCAmZW50cnkpOwotCQkJY2tfcmluZ19kZXF1ZXVlX3NwbWMoJnJpbmcsIGJ1
ZiwgJmVudHJ5KTsKLQkJCWUgPSByZHRzYygpOwotCQl9Ci0JCWRfYSArPSAoZSAtIHMpIC8gNDsK
LQl9Ci0KLQlwcmludGYoInNwbWMgJTEwZCAlMTYiIFBSSXU2NCAiICUxNiIgUFJJdTY0ICJcbiIs
IHNpemUsIGVfYSAvIElURVJBVElPTlMsIGRfYSAvIElURVJBVElPTlMpOwotCi0JY2tfcmluZ19p
bml0KCZyaW5nLCBzaXplKTsKLQllX2EgPSBkX2EgPSBzID0gZSA9IDA7Ci0JZm9yIChyID0gMDsg
ciA8IElURVJBVElPTlM7IHIrKykgewotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIDQ7IGkgKz0g
NCkgewotCQkJcyA9IHJkdHNjKCk7Ci0JCQlja19yaW5nX2VucXVldWVfbXBzYygmcmluZywgYnVm
LCAmZW50cnkpOwotCQkJY2tfcmluZ19lbnF1ZXVlX21wc2MoJnJpbmcsIGJ1ZiwgJmVudHJ5KTsK
LQkJCWNrX3JpbmdfZW5xdWV1ZV9tcHNjKCZyaW5nLCBidWYsICZlbnRyeSk7Ci0JCQlja19yaW5n
X2VucXVldWVfbXBzYygmcmluZywgYnVmLCAmZW50cnkpOwotCQkJZSA9IHJkdHNjKCk7Ci0JCX0K
LQkJZV9hICs9IChlIC0gcykgLyA0OwotCi0JCWZvciAoaSA9IDA7IGkgPCBzaXplIC8gNDsgaSAr
PSA0KSB7Ci0JCQlzID0gcmR0c2MoKTsKLQkJCWNrX3JpbmdfZGVxdWV1ZV9tcHNjKCZyaW5nLCBi
dWYsICZlbnRyeSk7Ci0JCQlja19yaW5nX2RlcXVldWVfbXBzYygmcmluZywgYnVmLCAmZW50cnkp
OwotCQkJY2tfcmluZ19kZXF1ZXVlX21wc2MoJnJpbmcsIGJ1ZiwgJmVudHJ5KTsKLQkJCWNrX3Jp
bmdfZGVxdWV1ZV9tcHNjKCZyaW5nLCBidWYsICZlbnRyeSk7Ci0JCQllID0gcmR0c2MoKTsKLQkJ
fQotCQlkX2EgKz0gKGUgLSBzKSAvIDQ7Ci0JfQotCXByaW50ZigibXBzYyAlMTBkICUxNiIgUFJJ
dTY0ICIgJTE2IiBQUkl1NjQgIlxuIiwgc2l6ZSwgZV9hIC8gSVRFUkFUSU9OUywgZF9hIC8gSVRF
UkFUSU9OUyk7Ci0JY2tfcmluZ19pbml0KCZyaW5nLCBzaXplKTsKLQllX2EgPSBkX2EgPSBzID0g
ZSA9IDA7Ci0JZm9yIChyID0gMDsgciA8IElURVJBVElPTlM7IHIrKykgewotCQlmb3IgKGkgPSAw
OyBpIDwgc2l6ZSAvIDQ7IGkgKz0gNCkgewotCQkJcyA9IHJkdHNjKCk7Ci0JCQlja19yaW5nX2Vu
cXVldWVfbXBtYygmcmluZywgYnVmLCAmZW50cnkpOwotCQkJY2tfcmluZ19lbnF1ZXVlX21wbWMo
JnJpbmcsIGJ1ZiwgJmVudHJ5KTsKLQkJCWNrX3JpbmdfZW5xdWV1ZV9tcG1jKCZyaW5nLCBidWYs
ICZlbnRyeSk7Ci0JCQlja19yaW5nX2VucXVldWVfbXBtYygmcmluZywgYnVmLCAmZW50cnkpOwot
CQkJZSA9IHJkdHNjKCk7Ci0JCX0KLQkJZV9hICs9IChlIC0gcykgLyA0OwotCi0JCWZvciAoaSA9
IDA7IGkgPCBzaXplIC8gNDsgaSArPSA0KSB7Ci0JCQlzID0gcmR0c2MoKTsKLQkJCWNrX3Jpbmdf
ZGVxdWV1ZV9tcG1jKCZyaW5nLCBidWYsICZlbnRyeSk7Ci0JCQlja19yaW5nX2RlcXVldWVfbXBt
YygmcmluZywgYnVmLCAmZW50cnkpOwotCQkJY2tfcmluZ19kZXF1ZXVlX21wbWMoJnJpbmcsIGJ1
ZiwgJmVudHJ5KTsKLQkJCWNrX3JpbmdfZGVxdWV1ZV9tcG1jKCZyaW5nLCBidWYsICZlbnRyeSk7
Ci0JCQllID0gcmR0c2MoKTsKLQkJfQotCQlkX2EgKz0gKGUgLSBzKSAvIDQ7Ci0JfQotCXByaW50
ZigibXBtYyAlMTBkICUxNiIgUFJJdTY0ICIgJTE2IiBQUkl1NjQgIlxuIiwgc2l6ZSwgZV9hIC8g
SVRFUkFUSU9OUywgZF9hIC8gSVRFUkFUSU9OUyk7Ci0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3Jpbmcv
dmFsaWRhdGUvTWFrZWZpbGUgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdy
ZXNzaW9ucy9ja19yaW5nL3ZhbGlkYXRlL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwYjY4ZmFkNTZhMDk5OWExY2Y4ZGNjZDE2ZDYxMWYwNTJhMGEyM2VjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3JpbmcvdmFsaWRhdGUvTWFrZWZpbGUKKysr
IC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0uUEhPTlk6IGNoZWNrIGNsZWFuIGRpc3RyaWJ1
dGlvbgotCi1PQkpFQ1RTPWNrX3Jpbmdfc3BzYyBja19yaW5nX3NwbWMgY2tfcmluZ19zcG1jX3Rl
bXBsYXRlIGNrX3JpbmdfbXBtYyBcCi0JY2tfcmluZ19tcG1jX3RlbXBsYXRlCi1TSVpFPTE2Mzg0
Ci0KLWFsbDogJChPQkpFQ1RTKQotCi1jaGVjazogYWxsCi0JLi9ja19yaW5nX3Nwc2MgJChDT1JF
UykgMSAkKFNJWkUpCi0JLi9ja19yaW5nX3NwbWMgJChDT1JFUykgMSAkKFNJWkUpCi0JLi9ja19y
aW5nX3NwbWNfdGVtcGxhdGUgJChDT1JFUykgMSAkKFNJWkUpCi0JLi9ja19yaW5nX21wbWMgJChD
T1JFUykgMSAkKFNJWkUpCi0JLi9ja19yaW5nX21wbWNfdGVtcGxhdGUgJChDT1JFUykgMSAkKFNJ
WkUpCi0KLWNrX3Jpbmdfc3BzYzogY2tfcmluZ19zcHNjLmMgLi4vLi4vLi4vaW5jbHVkZS9ja19y
aW5nLmgKLQkkKENDKSAkKENGTEFHUykgLW8gY2tfcmluZ19zcHNjIGNrX3Jpbmdfc3BzYy5jIFwK
LQkJLi4vLi4vLi4vc3JjL2NrX2JhcnJpZXJfY2VudHJhbGl6ZWQuYwotCi1ja19yaW5nX3NwbWM6
IGNrX3Jpbmdfc3BtYy5jIC4uLy4uLy4uL2luY2x1ZGUvY2tfcmluZy5oCi0JJChDQykgJChDRkxB
R1MpIC1vIGNrX3Jpbmdfc3BtYyBja19yaW5nX3NwbWMuYyBcCi0JCS4uLy4uLy4uL3NyYy9ja19i
YXJyaWVyX2NlbnRyYWxpemVkLmMKLQotY2tfcmluZ19tcG1jOiBja19yaW5nX21wbWMuYyAuLi8u
Li8uLi9pbmNsdWRlL2NrX3JpbmcuaAotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBja19yaW5nX21wbWMg
Y2tfcmluZ19tcG1jLmMgXAotCQkuLi8uLi8uLi9zcmMvY2tfYmFycmllcl9jZW50cmFsaXplZC5j
Ci0KLWNrX3JpbmdfbXBtY190ZW1wbGF0ZTogY2tfcmluZ19tcG1jX3RlbXBsYXRlLmMgLi4vLi4v
Li4vaW5jbHVkZS9ja19yaW5nLmgKLQkkKENDKSAkKENGTEFHUykgLW8gY2tfcmluZ19tcG1jX3Rl
bXBsYXRlIGNrX3JpbmdfbXBtY190ZW1wbGF0ZS5jIFwKLQkJLi4vLi4vLi4vc3JjL2NrX2JhcnJp
ZXJfY2VudHJhbGl6ZWQuYwotCi1ja19yaW5nX3NwbWNfdGVtcGxhdGU6IGNrX3Jpbmdfc3BtY190
ZW1wbGF0ZS5jIC4uLy4uLy4uL2luY2x1ZGUvY2tfcmluZy5oCi0JJChDQykgJChDRkxBR1MpIC1v
IGNrX3Jpbmdfc3BtY190ZW1wbGF0ZSBja19yaW5nX3NwbWNfdGVtcGxhdGUuYyBcCi0JCS4uLy4u
Ly4uL3NyYy9ja19iYXJyaWVyX2NlbnRyYWxpemVkLmMKLQotY2xlYW46Ci0Jcm0gLXJmICp+ICou
byAkKE9CSkVDVFMpICouZFNZTSAqLmV4ZQotCi1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jl
c3Npb25zLmJ1aWxkCi1DRkxBR1MrPSQoUFRIUkVBRF9DRkxBR1MpIC1EX0dOVV9TT1VSQ0UKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X3JpbmcvdmFsaWRhdGUvY2tfcmluZ19tcG1jLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9ja19yaW5nL3ZhbGlkYXRlL2NrX3JpbmdfbXBtYy5jCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmQ3ZjM5YTMxMGJjM2RhMjE2N2JjNmIyYjQ2ZGJm
YmE0Yzc4ZjJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3JpbmcvdmFs
aWRhdGUvY2tfcmluZ19tcG1jLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NDggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5o
PgotCi0jaW5jbHVkZSA8Y2tfYmFycmllci5oPgotI2luY2x1ZGUgPGNrX3JpbmcuaD4KLSNpbmNs
dWRlIDxja19zcGlubG9jay5oPgotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi0jaWZuZGVm
IElURVJBVElPTlMKLSNkZWZpbmUgSVRFUkFUSU9OUyAxMjgKLSNlbmRpZgotCi1zdHJ1Y3QgY29u
dGV4dCB7Ci0JdW5zaWduZWQgaW50IHRpZDsKLQl1bnNpZ25lZCBpbnQgcHJldmlvdXM7Ci0JdW5z
aWduZWQgaW50IG5leHQ7Ci0JY2tfcmluZ19idWZmZXJfdCAqYnVmZmVyOwotfTsKLQotc3RydWN0
IGVudHJ5IHsKLQl1bnNpZ25lZCBsb25nIHZhbHVlX2xvbmc7Ci0JdW5zaWduZWQgaW50IG1hZ2lj
OwotCXVuc2lnbmVkIGludCByZWY7Ci0JaW50IHRpZDsKLQlpbnQgdmFsdWU7Ci19OwotCi1zdGF0
aWMgaW50IG50aHI7Ci1zdGF0aWMgY2tfcmluZ190ICpyaW5nOwotc3RhdGljIGNrX3JpbmdfdCBy
aW5nX21wbWMgQ0tfQ0NfQ0FDSEVMSU5FOwotc3RhdGljIGNrX3JpbmdfdCByaW5nX213IENLX0ND
X0NBQ0hFTElORTsKLXN0YXRpYyBzdHJ1Y3QgYWZmaW5pdHkgYTsKLXN0YXRpYyBpbnQgc2l6ZTsK
LXN0YXRpYyBpbnQgZWI7Ci1zdGF0aWMgY2tfYmFycmllcl9jZW50cmFsaXplZF90IGJhcnJpZXIg
PSBDS19CQVJSSUVSX0NFTlRSQUxJWkVEX0lOSVRJQUxJWkVSOwotc3RhdGljIHN0cnVjdCBjb250
ZXh0ICpfY29udGV4dDsKLQotc3RhdGljIHVuc2lnbmVkIGludCBnbG9iYWxfY291bnRlcjsKLQot
c3RhdGljIHZvaWQgKgotdGVzdF9tcG1jKHZvaWQgKmMpCi17Ci0JdW5zaWduZWQgaW50IG9ic2Vy
dmVkID0gMDsKLQl1bnNpZ25lZCBpbnQgZW5xdWV1ZSA9IDA7Ci0JdW5zaWduZWQgaW50IHNlZWQ7
Ci0JaW50IGksIGssIGosIHRpZDsKLQlzdHJ1Y3QgY29udGV4dCAqY29udGV4dCA9IGM7Ci0JY2tf
cmluZ19idWZmZXJfdCAqYnVmZmVyOwotCXVuc2lnbmVkIGludCAqY3NwOwotCi0JY3NwID0gbWFs
bG9jKHNpemVvZigqY3NwKSAqIG50aHIpOwotCWFzc2VydChjc3AgIT0gTlVMTCk7Ci0KLQltZW1z
ZXQoY3NwLCAwLCBzaXplb2YoKmNzcCkgKiBudGhyKTsKLQotCWJ1ZmZlciA9IGNvbnRleHQtPmJ1
ZmZlcjsKLSAgICAgICAgaWYgKGFmZl9pdGVyYXRlKCZhKSkgewotICAgICAgICAgICAgICAgIHBl
cnJvcigiRVJST1I6IENvdWxkIG5vdCBhZmZpbmUgdGhyZWFkIik7Ci0gICAgICAgICAgICAgICAg
ZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLQl0aWQgPSBja19wcl9mYWFfaW50KCZl
YiwgMSk7Ci0JY2tfcHJfZmVuY2VfbWVtb3J5KCk7Ci0Jd2hpbGUgKGNrX3ByX2xvYWRfaW50KCZl
YikgIT0gbnRociAtIDEpOwotCi0JZm9yIChpID0gMDsgaSA8IElURVJBVElPTlM7IGkrKykgewot
CQlmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7Ci0JCQlzdHJ1Y3QgZW50cnkgKm8gPSBOVUxM
OwotCQkJaW50IHNwaW47Ci0KLQkJCS8qIEtlZXAgdHJ5aW5nIHVudGlsIHdlIGVuY291bnRlciBh
dCBsZWFzdCBvbmUgbm9kZS4gKi8KLQkJCWlmIChqICYgMSkgewotCQkJCWlmIChja19yaW5nX2Rl
cXVldWVfbXBtYygmcmluZ19tdywgYnVmZmVyLCAmbykgPT0gZmFsc2UpCi0JCQkJCW8gPSBOVUxM
OwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoY2tfcmluZ190cnlkZXF1ZXVlX21wbWMoJnJpbmdfbXcs
IGJ1ZmZlciwgJm8pID09IGZhbHNlKQotCQkJCQlvID0gTlVMTDsKLQkJCX0KLQotCQkJaWYgKG8g
PT0gTlVMTCkgewotCQkJCW8gPSBtYWxsb2Moc2l6ZW9mKCpvKSk7Ci0JCQkJaWYgKG8gPT0gTlVM
TCkKLQkJCQkJY29udGludWU7Ci0KLQkJCQlvLT52YWx1ZV9sb25nID0gKHVuc2lnbmVkIGxvbmcp
Y2tfcHJfZmFhX3VpbnQoJmdsb2JhbF9jb3VudGVyLCAxKSArIDE7Ci0KLQkJCQlvLT5tYWdpYyA9
IDB4ZGVhZDsKLQkJCQlvLT5yZWYgPSAwOwotCQkJCW8tPnRpZCA9IHRpZDsKLQotCQkJCWlmIChj
a19yaW5nX2VucXVldWVfbXBtYygmcmluZ19tdywgYnVmZmVyLCBvKSA9PSBmYWxzZSkgewotCQkJ
CQlmcmVlKG8pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWVucXVldWUrKzsKLQkJCQl9Ci0KLQkJCQlj
b250aW51ZTsKLQkJCX0KLQotCQkJb2JzZXJ2ZWQrKzsKLQotCQkJaWYgKG8tPm1hZ2ljICE9IDB4
ZGVhZCkgewotCQkJCWNrX2Vycm9yKCJbJXBdICgleClcbiIsCi0JCQkJCSh2b2lkICopbywgby0+
bWFnaWMpOwotCQkJfQotCi0JCQlvLT5tYWdpYyA9IDB4YmVlZjsKLQotCQkJaWYgKGNzcFtvLT50
aWRdID49IG8tPnZhbHVlX2xvbmcpCi0JCQkJY2tfZXJyb3IoInF1ZXVlIHNlbWFudGljcyB2aW9s
YXRlZDogJWx1IDw9ICVsdVxuIiwgby0+dmFsdWVfbG9uZywgY3NwW28tPnRpZF0pOwotCi0JCQlj
c3Bbby0+dGlkXSA9IG8tPnZhbHVlX2xvbmc7Ci0KLQkJCWlmIChja19wcl9mYWFfdWludCgmby0+
cmVmLCAxKSAhPSAwKSB7Ci0JCQkJY2tfZXJyb3IoIlslcF0gV2UgZGVxdWV1ZWQgdHdpY2UuXG4i
LCAodm9pZCAqKW8pOwotCQkJfQotCi0JCQlpZiAoKGkgJSA0KSA9PSAwKSB7Ci0JCQkJc3BpbiA9
IGNvbW1vbl9yYW5kX3IoJnNlZWQpICUgMTYzODQ7Ci0JCQkJZm9yIChrID0gMDsgayA8IHNwaW47
IGsrKykgewotCQkJCQlja19wcl9zdGFsbCgpOwotCQkJCX0KLQkJCX0KLQotCQkJZnJlZShvKTsK
LQkJfQotCX0KLQotCWZwcmludGYoc3RkZXJyLCAiWyVkXSBkZXF1ZXVlPSV1IGVucXVldWU9JXVc
biIsIHRpZCwgb2JzZXJ2ZWQsIGVucXVldWUpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMg
dm9pZCAqCi10ZXN0X3NwbWModm9pZCAqYykKLXsKLQl1bnNpZ25lZCBpbnQgb2JzZXJ2ZWQgPSAw
OwotCXVuc2lnbmVkIGxvbmcgcHJldmlvdXMgPSAwOwotCXVuc2lnbmVkIGludCBzZWVkOwotCWlu
dCBpLCBrLCBqLCB0aWQ7Ci0Jc3RydWN0IGNvbnRleHQgKmNvbnRleHQgPSBjOwotCWNrX3Jpbmdf
YnVmZmVyX3QgKmJ1ZmZlcjsKLQotCWJ1ZmZlciA9IGNvbnRleHQtPmJ1ZmZlcjsKLSAgICAgICAg
aWYgKGFmZl9pdGVyYXRlKCZhKSkgewotICAgICAgICAgICAgICAgIHBlcnJvcigiRVJST1I6IENv
dWxkIG5vdCBhZmZpbmUgdGhyZWFkIik7Ci0gICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxV
UkUpOwotICAgICAgICB9Ci0KLQl0aWQgPSBja19wcl9mYWFfaW50KCZlYiwgMSk7Ci0JY2tfcHJf
ZmVuY2VfbWVtb3J5KCk7Ci0Jd2hpbGUgKGNrX3ByX2xvYWRfaW50KCZlYikgIT0gbnRociAtIDEp
OwotCi0JZm9yIChpID0gMDsgaSA8IElURVJBVElPTlM7IGkrKykgewotCQlmb3IgKGogPSAwOyBq
IDwgc2l6ZTsgaisrKSB7Ci0JCQlzdHJ1Y3QgZW50cnkgKm87Ci0JCQlpbnQgc3BpbjsKLQotCQkJ
LyogS2VlcCB0cnlpbmcgdW50aWwgd2UgZW5jb3VudGVyIGF0IGxlYXN0IG9uZSBub2RlLiAqLwot
CQkJaWYgKGogJiAxKSB7Ci0JCQkJd2hpbGUgKGNrX3JpbmdfZGVxdWV1ZV9tcG1jKCZyaW5nX21w
bWMsIGJ1ZmZlciwKLQkJCQkgICAgJm8pID09IGZhbHNlKTsKLQkJCX0gZWxzZSB7Ci0JCQkJd2hp
bGUgKGNrX3JpbmdfdHJ5ZGVxdWV1ZV9tcG1jKCZyaW5nX21wbWMsIGJ1ZmZlciwKLQkJCQkgICAg
Jm8pID09IGZhbHNlKTsKLQkJCX0KLQotCQkJb2JzZXJ2ZWQrKzsKLQkJCWlmIChvLT52YWx1ZSA8
IDAKLQkJCSAgICB8fCBvLT52YWx1ZSAhPSBvLT50aWQKLQkJCSAgICB8fCBvLT5tYWdpYyAhPSAw
eGRlYWQKLQkJCSAgICB8fCAocHJldmlvdXMgIT0gMCAmJiBwcmV2aW91cyA+PSBvLT52YWx1ZV9s
b25nKSkgewotCQkJCWNrX2Vycm9yKCJbMHglcF0gKCV4KSAoJWQsICVkKSA+PCAoMCwgJWQpXG4i
LAotCQkJCQkodm9pZCAqKW8sIG8tPm1hZ2ljLCBvLT50aWQsIG8tPnZhbHVlLCBzaXplKTsKLQkJ
CX0KLQotCQkJby0+bWFnaWMgPSAweGJlZWY7Ci0JCQlvLT52YWx1ZSA9IC0zMTMzNzsKLQkJCW8t
PnRpZCA9IC0zMTMzODsKLQkJCXByZXZpb3VzID0gby0+dmFsdWVfbG9uZzsKLQotCQkJaWYgKGNr
X3ByX2ZhYV91aW50KCZvLT5yZWYsIDEpICE9IDApIHsKLQkJCQlja19lcnJvcigiWyVwXSBXZSBk
ZXF1ZXVlZCB0d2ljZS5cbiIsICh2b2lkICopbyk7Ci0JCQl9Ci0KLQkJCWlmICgoaSAlIDQpID09
IDApIHsKLQkJCQlzcGluID0gY29tbW9uX3JhbmRfcigmc2VlZCkgJSAxNjM4NDsKLQkJCQlmb3Ig
KGsgPSAwOyBrIDwgc3BpbjsgaysrKSB7Ci0JCQkJCWNrX3ByX3N0YWxsKCk7Ci0JCQkJfQotCQkJ
fQotCi0JCQlmcmVlKG8pOwotCQl9Ci0JfQotCi0JZnByaW50ZihzdGRlcnIsICJbJWRdIE9ic2Vy
dmVkICV1XG4iLCB0aWQsIG9ic2VydmVkKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZv
aWQgKgotdGVzdCh2b2lkICpjKQotewotCXN0cnVjdCBjb250ZXh0ICpjb250ZXh0ID0gYzsKLQlz
dHJ1Y3QgZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGludCBzOwotCWludCBpLCBqOwotCWJvb2wg
cjsKLQlja19yaW5nX2J1ZmZlcl90ICpidWZmZXIgPSBjb250ZXh0LT5idWZmZXI7Ci0JY2tfYmFy
cmllcl9jZW50cmFsaXplZF9zdGF0ZV90IHNlbnNlID0KLQkgICAgQ0tfQkFSUklFUl9DRU5UUkFM
SVpFRF9TVEFURV9JTklUSUFMSVpFUjsKLQotICAgICAgICBpZiAoYWZmX2l0ZXJhdGUoJmEpKSB7
Ci0gICAgICAgICAgICAgICAgcGVycm9yKCJFUlJPUjogQ291bGQgbm90IGFmZmluZSB0aHJlYWQi
KTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLQotCWlm
IChjb250ZXh0LT50aWQgPT0gMCkgewotCQlzdHJ1Y3QgZW50cnkgKmVudHJpZXM7Ci0KLQkJZW50
cmllcyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGVudHJ5KSAqIHNpemUpOwotCQlhc3NlcnQoZW50
cmllcyAhPSBOVUxMKTsKLQotCQlpZiAoY2tfcmluZ19zaXplKHJpbmcpICE9IDApIHsKLQkJCWNr
X2Vycm9yKCJNb3JlIGVudHJpZXMgdGhhbiBleHBlY3RlZDogJXUgPiAwXG4iLAotCQkJCWNrX3Jp
bmdfc2l6ZShyaW5nKSk7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0J
CQllbnRyaWVzW2ldLnZhbHVlID0gaTsKLQkJCWVudHJpZXNbaV0udGlkID0gMDsKLQotCQkJaWYg
KHRydWUpIHsKLQkJCQlyID0gY2tfcmluZ19lbnF1ZXVlX21wbWMocmluZywgYnVmZmVyLAotCQkJ
CSAgICBlbnRyaWVzICsgaSk7Ci0JCQl9IGVsc2UgewotCQkJCXIgPSBja19yaW5nX2VucXVldWVf
bXBtY19zaXplKHJpbmcsIGJ1ZmZlciwKLQkJCQkJZW50cmllcyArIGksICZzKTsKLQotCQkJCWlm
ICgoaW50KXMgIT0gaSkgewotCQkJCQlja19lcnJvcigiU2l6ZSBpcyAldSwgZXhwZWN0ZWQgJWQu
XG4iLAotCQkJCQkgICAgcywgc2l6ZSk7Ci0JCQkJfQotCQkJfQotCi0JCQlhc3NlcnQociAhPSBm
YWxzZSk7Ci0JCX0KLQotCQlpZiAoY2tfcmluZ19zaXplKHJpbmcpICE9ICh1bnNpZ25lZCBpbnQp
c2l6ZSkgewotCQkJY2tfZXJyb3IoIkxlc3MgZW50cmllcyB0aGFuIGV4cGVjdGVkOiAldSA8ICVk
XG4iLAotCQkJCWNrX3Jpbmdfc2l6ZShyaW5nKSwgc2l6ZSk7Ci0JCX0KLQotCQlpZiAoY2tfcmlu
Z19jYXBhY2l0eShyaW5nKSAhPSBja19yaW5nX3NpemUocmluZykgKyAxKSB7Ci0JCQlja19lcnJv
cigiQ2FwYWNpdHkgbGVzcyB0aGFuIGV4cGVjdGVkOiAldSA8ICV1XG4iLAotCQkJCWNrX3Jpbmdf
c2l6ZShyaW5nKSwgY2tfcmluZ19jYXBhY2l0eShyaW5nKSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAq
IFdhaXQgZm9yIGFsbCB0aHJlYWRzLiBUaGUgaWRlYSBoZXJlIGlzIHRvIG1heGltaXplIHRoZSBj
b250ZW50aW9uLgotCSAqLwotCWNrX2JhcnJpZXJfY2VudHJhbGl6ZWQoJmJhcnJpZXIsICZzZW5z
ZSwgbnRocik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSVRFUkFUSU9OUzsgaSsrKSB7Ci0JCWZvciAo
aiA9IDA7IGogPCBzaXplOyBqKyspIHsKLQkJCWJ1ZmZlciA9IF9jb250ZXh0W2NvbnRleHQtPnBy
ZXZpb3VzXS5idWZmZXI7Ci0JCQl3aGlsZSAoY2tfcmluZ19kZXF1ZXVlX21wbWMocmluZyArIGNv
bnRleHQtPnByZXZpb3VzLAotCQkJICAgIGJ1ZmZlciwgJmVudHJ5KSA9PSBmYWxzZSk7Ci0KLQkJ
CWlmIChjb250ZXh0LT5wcmV2aW91cyAhPSAodW5zaWduZWQgaW50KWVudHJ5LT50aWQpIHsKLQkJ
CQlja19lcnJvcigiWyV1OiVwXSAldSAhPSAldVxuIiwKLQkJCQkJY29udGV4dC0+dGlkLCAodm9p
ZCAqKWVudHJ5LCBlbnRyeS0+dGlkLCBjb250ZXh0LT5wcmV2aW91cyk7Ci0JCQl9Ci0KLQkJCWlm
IChlbnRyeS0+dmFsdWUgPCAwIHx8IGVudHJ5LT52YWx1ZSA+PSBzaXplKSB7Ci0JCQkJY2tfZXJy
b3IoIlsldTolcF0gJXUgPC8+ICV1XG4iLAotCQkJCQljb250ZXh0LT50aWQsICh2b2lkICopZW50
cnksIGVudHJ5LT50aWQsIGNvbnRleHQtPnByZXZpb3VzKTsKLQkJCX0KLQotCQkJZW50cnktPnRp
ZCA9IGNvbnRleHQtPnRpZDsKLQkJCWJ1ZmZlciA9IGNvbnRleHQtPmJ1ZmZlcjsKLQotCQkJaWYg
KHRydWUpIHsKLQkJCQlyID0gY2tfcmluZ19lbnF1ZXVlX21wbWMocmluZyArIGNvbnRleHQtPnRp
ZCwKLQkJCQkJYnVmZmVyLCBlbnRyeSk7Ci0JCQl9IGVsc2UgewotCQkJCXIgPSBja19yaW5nX2Vu
cXVldWVfbXBtY19zaXplKHJpbmcgKyBjb250ZXh0LT50aWQsCi0JCQkJCWJ1ZmZlciwgZW50cnks
ICZzKTsKLQotCQkJCWlmICgoaW50KXMgPj0gc2l6ZSkgewotCQkJCQlja19lcnJvcigiU2l6ZSAl
dSBvdXQgb2YgcmFuZ2Ugb2YgJWRcbiIsCi0JCQkJCSAgICBzLCBzaXplKTsKLQkJCQl9Ci0JCQl9
Ci0JCQlhc3NlcnQociA9PSB0cnVlKTsKLQkJfQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1p
bnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlpbnQgaSwgcjsKLQl1bnNpZ25l
ZCBsb25nIGw7Ci0JcHRocmVhZF90ICp0aHJlYWQ7Ci0JY2tfcmluZ19idWZmZXJfdCAqYnVmZmVy
OwotCi0JaWYgKGFyZ2MgIT0gNCkgewotCQlja19lcnJvcigiVXNhZ2U6IHZhbGlkYXRlIDx0aHJl
YWRzPiA8YWZmaW5pdHkgZGVsdGE+IDxzaXplPlxuIik7Ci0JfQotCi0JYS5yZXF1ZXN0ID0gMDsK
LQlhLmRlbHRhID0gYXRvaShhcmd2WzJdKTsKLQotCW50aHIgPSBhdG9pKGFyZ3ZbMV0pOwotCWFz
c2VydChudGhyID49IDEpOwotCi0Jc2l6ZSA9IGF0b2koYXJndlszXSk7Ci0JYXNzZXJ0KHNpemUg
Pj0gNCAmJiAoc2l6ZSAmIHNpemUgLSAxKSA9PSAwKTsKLQlzaXplIC09IDE7Ci0KLQlyaW5nID0g
bWFsbG9jKHNpemVvZihja19yaW5nX3QpICogbnRocik7Ci0JYXNzZXJ0KHJpbmcpOwotCi0JX2Nv
bnRleHQgPSBtYWxsb2Moc2l6ZW9mKCpfY29udGV4dCkgKiBudGhyKTsKLQlhc3NlcnQoX2NvbnRl
eHQpOwotCi0JdGhyZWFkID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocik7Ci0JYXNz
ZXJ0KHRocmVhZCk7Ci0JZnByaW50ZihzdGRlcnIsICJTUFNDIHRlc3Q6Iik7Ci0JZm9yIChpID0g
MDsgaSA8IG50aHI7IGkrKykgewotCQlfY29udGV4dFtpXS50aWQgPSBpOwotCQlpZiAoaSA9PSAw
KSB7Ci0JCQlfY29udGV4dFtpXS5wcmV2aW91cyA9IG50aHIgLSAxOwotCQkJX2NvbnRleHRbaV0u
bmV4dCA9IGkgKyAxOwotCQl9IGVsc2UgaWYgKGkgPT0gbnRociAtIDEpIHsKLQkJCV9jb250ZXh0
W2ldLm5leHQgPSAwOwotCQkJX2NvbnRleHRbaV0ucHJldmlvdXMgPSBpIC0gMTsKLQkJfSBlbHNl
IHsKLQkJCV9jb250ZXh0W2ldLm5leHQgPSBpICsgMTsKLQkJCV9jb250ZXh0W2ldLnByZXZpb3Vz
ID0gaSAtIDE7Ci0JCX0KLQotCQlidWZmZXIgPSBtYWxsb2Moc2l6ZW9mKGNrX3JpbmdfYnVmZmVy
X3QpICogKHNpemUgKyAxKSk7Ci0JCWFzc2VydChidWZmZXIpOwotCQltZW1zZXQoYnVmZmVyLCAw
LCBzaXplb2YoY2tfcmluZ19idWZmZXJfdCkgKiAoc2l6ZSArIDEpKTsKLQkJX2NvbnRleHRbaV0u
YnVmZmVyID0gYnVmZmVyOwotCQlja19yaW5nX2luaXQocmluZyArIGksIHNpemUgKyAxKTsKLQkJ
ciA9IHB0aHJlYWRfY3JlYXRlKHRocmVhZCArIGksIE5VTEwsIHRlc3QsIF9jb250ZXh0ICsgaSk7
Ci0JCWFzc2VydChyID09IDApOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspCi0J
CXB0aHJlYWRfam9pbih0aHJlYWRbaV0sIE5VTEwpOwotCi0JZnByaW50ZihzdGRlcnIsICIgZG9u
ZVxuIik7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIlNQTUMgdGVzdDpcbiIpOwotCWJ1ZmZlciA9IG1h
bGxvYyhzaXplb2YoY2tfcmluZ19idWZmZXJfdCkgKiAoc2l6ZSArIDEpKTsKLQlhc3NlcnQoYnVm
ZmVyKTsKLQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2Yodm9pZCAqKSAqIChzaXplICsgMSkpOwot
CWNrX3JpbmdfaW5pdCgmcmluZ19tcG1jLCBzaXplICsgMSk7Ci0JZm9yIChpID0gMDsgaSA8IG50
aHIgLSAxOyBpKyspIHsKLQkJX2NvbnRleHRbaV0uYnVmZmVyID0gYnVmZmVyOwotCQlyID0gcHRo
cmVhZF9jcmVhdGUodGhyZWFkICsgaSwgTlVMTCwgdGVzdF9zcG1jLCBfY29udGV4dCArIGkpOwot
CQlhc3NlcnQociA9PSAwKTsKLQl9Ci0KLQlmb3IgKGwgPSAwOyBsIDwgKHVuc2lnbmVkIGxvbmcp
c2l6ZSAqIElURVJBVElPTlMgKiAobnRociAtIDEpIDsgbCsrKSB7Ci0JCXN0cnVjdCBlbnRyeSAq
ZW50cnkgPSBtYWxsb2Moc2l6ZW9mICplbnRyeSk7Ci0KLQkJYXNzZXJ0KGVudHJ5ICE9IE5VTEwp
OwotCQllbnRyeS0+dmFsdWVfbG9uZyA9IGw7Ci0JCWVudHJ5LT52YWx1ZSA9IChpbnQpbDsKLQkJ
ZW50cnktPnRpZCA9IChpbnQpbDsKLQkJZW50cnktPm1hZ2ljID0gMHhkZWFkOwotCQllbnRyeS0+
cmVmID0gMDsKLQotCQkvKiBXYWl0IHVudGlsIHF1ZXVlIGlzIG5vdCBmdWxsLiAqLwotCQlpZiAo
bCAmIDEpIHsKLQkJCXdoaWxlIChja19yaW5nX2VucXVldWVfbXBtYygmcmluZ19tcG1jLAotCQkJ
ICAgIGJ1ZmZlciwKLQkJCSAgICBlbnRyeSkgPT0gZmFsc2UpCi0JCQkJY2tfcHJfc3RhbGwoKTsK
LQkJfSBlbHNlIHsKLQkJCXVuc2lnbmVkIGludCBzOwotCi0JCQl3aGlsZSAoY2tfcmluZ19lbnF1
ZXVlX21wbWNfc2l6ZSgmcmluZ19tcG1jLAotCQkJICAgIGJ1ZmZlciwgZW50cnksICZzKSA9PSBm
YWxzZSkgewotCQkJCWNrX3ByX3N0YWxsKCk7Ci0JCQl9Ci0KLQkJCWlmICgoaW50KXMgPj0gKHNp
emUgKiBJVEVSQVRJT05TICogKG50aHIgLSAxKSkpIHsKLQkJCQlja19lcnJvcigiTVBNQzogVW5l
eHBlY3RlZCBzaXplIG9mICV1XG4iLCBzKTsKLQkJCX0KLQkJfQotCX0KLQotCWZvciAoaSA9IDA7
IGkgPCBudGhyIC0gMTsgaSsrKQotCQlwdGhyZWFkX2pvaW4odGhyZWFkW2ldLCBOVUxMKTsKLQlj
a19wcl9zdG9yZV9pbnQoJmViLCAwKTsKLQlmcHJpbnRmKHN0ZGVyciwgIk1QTUMgdGVzdDpcbiIp
OwotCWJ1ZmZlciA9IG1hbGxvYyhzaXplb2YoY2tfcmluZ19idWZmZXJfdCkgKiAoc2l6ZSArIDEp
KTsKLQlhc3NlcnQoYnVmZmVyKTsKLQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2Yodm9pZCAqKSAq
IChzaXplICsgMSkpOwotCWNrX3JpbmdfaW5pdCgmcmluZ19tdywgc2l6ZSArIDEpOwotCWZvciAo
aSA9IDA7IGkgPCBudGhyIC0gMTsgaSsrKSB7Ci0JCV9jb250ZXh0W2ldLmJ1ZmZlciA9IGJ1ZmZl
cjsKLQkJciA9IHB0aHJlYWRfY3JlYXRlKHRocmVhZCArIGksIE5VTEwsIHRlc3RfbXBtYywgX2Nv
bnRleHQgKyBpKTsKLQkJYXNzZXJ0KHIgPT0gMCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG50
aHIgLSAxOyBpKyspCi0JCXB0aHJlYWRfam9pbih0aHJlYWRbaV0sIE5VTEwpOwotCi0JcmV0dXJu
ICgwKTsKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3Jl
Z3Jlc3Npb25zL2NrX3JpbmcvdmFsaWRhdGUvY2tfcmluZ19tcG1jX3RlbXBsYXRlLmMgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yaW5nL3ZhbGlkYXRl
L2NrX3JpbmdfbXBtY190ZW1wbGF0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
MDc2ZTlhNmUzNGRmNmQyMDkwNWU5N2IzMjZlZjU2M2NiNTY0OGM2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3JpbmcvdmFsaWRhdGUvY2tfcmluZ19tcG1jX3RlbXBsYXRl
LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEx
LTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0j
aW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotCi0jaW5jbHVkZSA8Y2tf
YmFycmllci5oPgotI2luY2x1ZGUgPGNrX3JpbmcuaD4KLSNpbmNsdWRlIDxja19zcGlubG9jay5o
PgotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi0jaWZuZGVmIElURVJBVElPTlMKLSNkZWZp
bmUgSVRFUkFUSU9OUyAxMjgKLSNlbmRpZgotCi1zdHJ1Y3QgY29udGV4dCB7Ci0JdW5zaWduZWQg
aW50IHRpZDsKLQl1bnNpZ25lZCBpbnQgcHJldmlvdXM7Ci0JdW5zaWduZWQgaW50IG5leHQ7Ci0J
c3RydWN0IGVudHJ5ICoqYnVmZmVyOwotfTsKLQotc3RydWN0IGVudHJ5IHsKLQl1bnNpZ25lZCBs
b25nIHZhbHVlX2xvbmc7Ci0JdW5zaWduZWQgaW50IG1hZ2ljOwotCXVuc2lnbmVkIGludCByZWY7
Ci0JaW50IHRpZDsKLQlpbnQgdmFsdWU7Ci19OwotCi1DS19SSU5HX1BST1RPVFlQRShlbnRyeSwg
ZW50cnkgKikKLQotc3RhdGljIGludCBudGhyOwotc3RhdGljIGNrX3JpbmdfdCAqcmluZzsKLXN0
YXRpYyBja19yaW5nX3QgcmluZ19zcG1jIENLX0NDX0NBQ0hFTElORTsKLXN0YXRpYyBzdHJ1Y3Qg
YWZmaW5pdHkgYTsKLXN0YXRpYyBpbnQgc2l6ZTsKLXN0YXRpYyBpbnQgZWI7Ci1zdGF0aWMgY2tf
YmFycmllcl9jZW50cmFsaXplZF90IGJhcnJpZXIgPSBDS19CQVJSSUVSX0NFTlRSQUxJWkVEX0lO
SVRJQUxJWkVSOwotc3RhdGljIHN0cnVjdCBjb250ZXh0ICpfY29udGV4dDsKLQotc3RhdGljIHZv
aWQgKgotdGVzdF9zcG1jKHZvaWQgKmMpCi17Ci0JdW5zaWduZWQgaW50IG9ic2VydmVkID0gMDsK
LQl1bnNpZ25lZCBsb25nIHByZXZpb3VzID0gMDsKLQl1bnNpZ25lZCBpbnQgc2VlZDsKLQlpbnQg
aSwgaywgaiwgdGlkOwotCXN0cnVjdCBjb250ZXh0ICpjb250ZXh0ID0gYzsKLQlzdHJ1Y3QgZW50
cnkgKipidWZmZXI7Ci0KLQlidWZmZXIgPSBjb250ZXh0LT5idWZmZXI7Ci0gICAgICAgIGlmIChh
ZmZfaXRlcmF0ZSgmYSkpIHsKLSAgICAgICAgICAgICAgICBwZXJyb3IoIkVSUk9SOiBDb3VsZCBu
b3QgYWZmaW5lIHRocmVhZCIpOwotICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsK
LSAgICAgICAgfQotCi0JdGlkID0gY2tfcHJfZmFhX2ludCgmZWIsIDEpOwotCWNrX3ByX2ZlbmNl
X21lbW9yeSgpOwotCXdoaWxlIChja19wcl9sb2FkX2ludCgmZWIpICE9IG50aHIgLSAxKTsKLQot
CWZvciAoaSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IHNp
emU7IGorKykgewotCQkJc3RydWN0IGVudHJ5ICpvOwotCQkJaW50IHNwaW47Ci0KLQkJCS8qIEtl
ZXAgdHJ5aW5nIHVudGlsIHdlIGVuY291bnRlciBhdCBsZWFzdCBvbmUgbm9kZS4gKi8KLQkJCWlm
IChqICYgMSkgewotCQkJCXdoaWxlIChDS19SSU5HX0RFUVVFVUVfTVBNQyhlbnRyeSwKLQkJCQkg
ICAgJnJpbmdfc3BtYywgYnVmZmVyLCAmbykgPT0gZmFsc2UpOwotCQkJfSBlbHNlIHsKLQkJCQl3
aGlsZSAoQ0tfUklOR19UUllERVFVRVVFX01QTUMoZW50cnksCi0JCQkJICAgICZyaW5nX3NwbWMs
IGJ1ZmZlciwgJm8pID09IGZhbHNlKTsKLQkJCX0KLQotCQkJb2JzZXJ2ZWQrKzsKLQkJCWlmIChv
LT52YWx1ZSA8IDAKLQkJCSAgICB8fCBvLT52YWx1ZSAhPSBvLT50aWQKLQkJCSAgICB8fCBvLT5t
YWdpYyAhPSAweGRlYWQKLQkJCSAgICB8fCAocHJldmlvdXMgIT0gMCAmJiBwcmV2aW91cyA+PSBv
LT52YWx1ZV9sb25nKSkgewotCQkJCWNrX2Vycm9yKCJbMHglcF0gKCV4KSAoJWQsICVkKSA+PCAo
MCwgJWQpXG4iLAotCQkJCQkodm9pZCAqKW8sIG8tPm1hZ2ljLCBvLT50aWQsIG8tPnZhbHVlLCBz
aXplKTsKLQkJCX0KLQotCQkJby0+bWFnaWMgPSAweGJlZWY7Ci0JCQlvLT52YWx1ZSA9IC0zMTMz
NzsKLQkJCW8tPnRpZCA9IC0zMTMzODsKLQkJCXByZXZpb3VzID0gby0+dmFsdWVfbG9uZzsKLQot
CQkJaWYgKGNrX3ByX2ZhYV91aW50KCZvLT5yZWYsIDEpICE9IDApIHsKLQkJCQlja19lcnJvcigi
WyVwXSBXZSBkZXF1ZXVlZCB0d2ljZS5cbiIsICh2b2lkICopbyk7Ci0JCQl9Ci0KLQkJCWlmICgo
aSAlIDQpID09IDApIHsKLQkJCQlzcGluID0gY29tbW9uX3JhbmRfcigmc2VlZCkgJSAxNjM4NDsK
LQkJCQlmb3IgKGsgPSAwOyBrIDwgc3BpbjsgaysrKSB7Ci0JCQkJCWNrX3ByX3N0YWxsKCk7Ci0J
CQkJfQotCQkJfQotCi0JCQlmcmVlKG8pOwotCQl9Ci0JfQotCi0JZnByaW50ZihzdGRlcnIsICJb
JWRdIE9ic2VydmVkICV1XG4iLCB0aWQsIG9ic2VydmVkKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQot
c3RhdGljIHZvaWQgKgotdGVzdCh2b2lkICpjKQotewotCXN0cnVjdCBjb250ZXh0ICpjb250ZXh0
ID0gYzsKLQlzdHJ1Y3QgZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGludCBzOwotCWludCBpLCBq
OwotCWJvb2wgcjsKLQlzdHJ1Y3QgZW50cnkgKipidWZmZXIgPSBjb250ZXh0LT5idWZmZXI7Ci0J
Y2tfYmFycmllcl9jZW50cmFsaXplZF9zdGF0ZV90IHNlbnNlID0KLQkgICAgQ0tfQkFSUklFUl9D
RU5UUkFMSVpFRF9TVEFURV9JTklUSUFMSVpFUjsKLQotICAgICAgICBpZiAoYWZmX2l0ZXJhdGUo
JmEpKSB7Ci0gICAgICAgICAgICAgICAgcGVycm9yKCJFUlJPUjogQ291bGQgbm90IGFmZmluZSB0
aHJlYWQiKTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0K
LQotCWlmIChjb250ZXh0LT50aWQgPT0gMCkgewotCQlzdHJ1Y3QgZW50cnkgKiplbnRyaWVzOwot
Ci0JCWVudHJpZXMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBlbnRyeSAqKSAqIHNpemUpOwotCQlh
c3NlcnQoZW50cmllcyAhPSBOVUxMKTsKLQotCQlpZiAoY2tfcmluZ19zaXplKHJpbmcpICE9IDAp
IHsKLQkJCWNrX2Vycm9yKCJNb3JlIGVudHJpZXMgdGhhbiBleHBlY3RlZDogJXUgPiAwXG4iLAot
CQkJCWNrX3Jpbmdfc2l6ZShyaW5nKSk7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7Ci0JCQllbnRyaWVzW2ldID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZW50cnkpKTsKLQkJ
CWFzc2VydChlbnRyaWVzW2ldICE9IE5VTEwpOwotCi0JCQllbnRyaWVzW2ldLT52YWx1ZSA9IGk7
Ci0JCQllbnRyaWVzW2ldLT50aWQgPSAwOwotCi0JCQlpZiAoaSAmIDEpIHsKLQkJCQlyID0gQ0tf
UklOR19FTlFVRVVFX01QTUMoZW50cnksIHJpbmcsIGJ1ZmZlciwKLQkJCQkgICAgJmVudHJpZXNb
aV0pOwotCQkJfSBlbHNlIHsKLQkJCQlyID0gQ0tfUklOR19FTlFVRVVFX01QTUNfU0laRShlbnRy
eSwgcmluZywKLQkJCQkJYnVmZmVyLCAmZW50cmllc1tpXSwgJnMpOwotCi0JCQkJaWYgKChpbnQp
cyAhPSBpKSB7Ci0JCQkJCWNrX2Vycm9yKCJTaXplIGlzICV1LCBleHBlY3RlZCAlZC5cbiIsCi0J
CQkJCSAgICBzLCBzaXplKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWFzc2VydChyICE9IGZhbHNlKTsK
LQkJfQotCi0JCWlmIChja19yaW5nX3NpemUocmluZykgIT0gKHVuc2lnbmVkIGludClzaXplKSB7
Ci0JCQlja19lcnJvcigiTGVzcyBlbnRyaWVzIHRoYW4gZXhwZWN0ZWQ6ICV1IDwgJWRcbiIsCi0J
CQkJY2tfcmluZ19zaXplKHJpbmcpLCBzaXplKTsKLQkJfQotCi0JCWlmIChja19yaW5nX2NhcGFj
aXR5KHJpbmcpICE9IGNrX3Jpbmdfc2l6ZShyaW5nKSArIDEpIHsKLQkJCWNrX2Vycm9yKCJDYXBh
Y2l0eSBsZXNzIHRoYW4gZXhwZWN0ZWQ6ICV1IDwgJXVcbiIsCi0JCQkJY2tfcmluZ19zaXplKHJp
bmcpLCBja19yaW5nX2NhcGFjaXR5KHJpbmcpKTsKLQkJfQotCX0KLQotCS8qCi0JICogV2FpdCBm
b3IgYWxsIHRocmVhZHMuIFRoZSBpZGVhIGhlcmUgaXMgdG8gbWF4aW1pemUgdGhlIGNvbnRlbnRp
b24uCi0JICovCi0JY2tfYmFycmllcl9jZW50cmFsaXplZCgmYmFycmllciwgJnNlbnNlLCBudGhy
KTsKLQotCWZvciAoaSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspIHsKLQkJZm9yIChqID0gMDsg
aiA8IHNpemU7IGorKykgewotCQkJYnVmZmVyID0gX2NvbnRleHRbY29udGV4dC0+cHJldmlvdXNd
LmJ1ZmZlcjsKLQkJCXdoaWxlIChDS19SSU5HX0RFUVVFVUVfTVBNQyhlbnRyeSwKLQkJCSAgICBy
aW5nICsgY29udGV4dC0+cHJldmlvdXMsCi0JCQkgICAgYnVmZmVyLCAmZW50cnkpID09IGZhbHNl
KTsKLQotCQkJaWYgKGNvbnRleHQtPnByZXZpb3VzICE9ICh1bnNpZ25lZCBpbnQpZW50cnktPnRp
ZCkgewotCQkJCWNrX2Vycm9yKCJbJXU6JXBdICV1ICE9ICV1XG4iLAotCQkJCSAgICBjb250ZXh0
LT50aWQsICh2b2lkICopZW50cnksCi0JCQkJICAgIGVudHJ5LT50aWQsIGNvbnRleHQtPnByZXZp
b3VzKTsKLQkJCX0KLQotCQkJaWYgKGVudHJ5LT52YWx1ZSA8IDAgfHwgZW50cnktPnZhbHVlID49
IHNpemUpIHsKLQkJCQlja19lcnJvcigiWyV1OiVwXSAldSA8Lz4gJXVcbiIsCi0JCQkJICAgIGNv
bnRleHQtPnRpZCwgKHZvaWQgKillbnRyeSwKLQkJCQkgICAgZW50cnktPnRpZCwgY29udGV4dC0+
cHJldmlvdXMpOwotCQkJfQotCi0JCQllbnRyeS0+dGlkID0gY29udGV4dC0+dGlkOwotCQkJYnVm
ZmVyID0gY29udGV4dC0+YnVmZmVyOwotCi0JCQlpZiAoaSAmIDEpIHsKLQkJCQlyID0gQ0tfUklO
R19FTlFVRVVFX01QTUMoZW50cnksCi0JCQkJICAgIHJpbmcgKyBjb250ZXh0LT50aWQsCi0JCQkJ
ICAgIGJ1ZmZlciwgJmVudHJ5KTsKLQkJCX0gZWxzZSB7Ci0JCQkJciA9IENLX1JJTkdfRU5RVUVV
RV9NUE1DX1NJWkUoZW50cnksCi0JCQkJICAgIHJpbmcgKyBjb250ZXh0LT50aWQsCi0JCQkJICAg
IGJ1ZmZlciwgJmVudHJ5LCAmcyk7Ci0KLQkJCQlpZiAoKGludClzID49IHNpemUpIHsKLQkJCQkJ
Y2tfZXJyb3IoIlNpemUgJXUgb3V0IG9mIHJhbmdlIG9mICVkXG4iLAotCQkJCQkgICAgcywgc2l6
ZSk7Ci0JCQkJfQotCQkJfQotCQkJYXNzZXJ0KHIgPT0gdHJ1ZSk7Ci0JCX0KLQl9Ci0KLQlyZXR1
cm4gTlVMTDsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JaW50
IGksIHI7Ci0JdW5zaWduZWQgbG9uZyBsOwotCXB0aHJlYWRfdCAqdGhyZWFkOwotCXN0cnVjdCBl
bnRyeSAqKmJ1ZmZlcjsKLQotCWlmIChhcmdjICE9IDQpIHsKLQkJY2tfZXJyb3IoIlVzYWdlOiB2
YWxpZGF0ZSA8dGhyZWFkcz4gPGFmZmluaXR5IGRlbHRhPiA8c2l6ZT5cbiIpOwotCX0KLQotCWEu
cmVxdWVzdCA9IDA7Ci0JYS5kZWx0YSA9IGF0b2koYXJndlsyXSk7Ci0KLQludGhyID0gYXRvaShh
cmd2WzFdKTsKLQlhc3NlcnQobnRociA+PSAxKTsKLQotCXNpemUgPSBhdG9pKGFyZ3ZbM10pOwot
CWFzc2VydChzaXplID49IDQgJiYgKHNpemUgJiBzaXplIC0gMSkgPT0gMCk7Ci0Jc2l6ZSAtPSAx
OwotCi0JcmluZyA9IG1hbGxvYyhzaXplb2YoY2tfcmluZ190KSAqIG50aHIpOwotCWFzc2VydChy
aW5nKTsKLQotCV9jb250ZXh0ID0gbWFsbG9jKHNpemVvZigqX2NvbnRleHQpICogbnRocik7Ci0J
YXNzZXJ0KF9jb250ZXh0KTsKLQotCXRocmVhZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAq
IG50aHIpOwotCWFzc2VydCh0aHJlYWQpOwotCi0JZnByaW50ZihzdGRlcnIsICJTUFNDIHRlc3Q6
Iik7Ci0JZm9yIChpID0gMDsgaSA8IG50aHI7IGkrKykgewotCQlfY29udGV4dFtpXS50aWQgPSBp
OwotCQlpZiAoaSA9PSAwKSB7Ci0JCQlfY29udGV4dFtpXS5wcmV2aW91cyA9IG50aHIgLSAxOwot
CQkJX2NvbnRleHRbaV0ubmV4dCA9IGkgKyAxOwotCQl9IGVsc2UgaWYgKGkgPT0gbnRociAtIDEp
IHsKLQkJCV9jb250ZXh0W2ldLm5leHQgPSAwOwotCQkJX2NvbnRleHRbaV0ucHJldmlvdXMgPSBp
IC0gMTsKLQkJfSBlbHNlIHsKLQkJCV9jb250ZXh0W2ldLm5leHQgPSBpICsgMTsKLQkJCV9jb250
ZXh0W2ldLnByZXZpb3VzID0gaSAtIDE7Ci0JCX0KLQotCQlidWZmZXIgPSBtYWxsb2Moc2l6ZW9m
KHN0cnVjdCBlbnRyeSAqKSAqIChzaXplICsgMSkpOwotCQlhc3NlcnQoYnVmZmVyKTsKLQkJbWVt
c2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBlbnRyeSAqKSAqIChzaXplICsgMSkpOwotCQlf
Y29udGV4dFtpXS5idWZmZXIgPSBidWZmZXI7Ci0JCWNrX3JpbmdfaW5pdChyaW5nICsgaSwgc2l6
ZSArIDEpOwotCQlyID0gcHRocmVhZF9jcmVhdGUodGhyZWFkICsgaSwgTlVMTCwgdGVzdCwgX2Nv
bnRleHQgKyBpKTsKLQkJYXNzZXJ0KHIgPT0gMCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG50
aHI7IGkrKykKLQkJcHRocmVhZF9qb2luKHRocmVhZFtpXSwgTlVMTCk7Ci0KLQlmcHJpbnRmKHN0
ZGVyciwgIiBkb25lXG4iKTsKLQotCWZwcmludGYoc3RkZXJyLCAiTVBNQyB0ZXN0OlxuIik7Ci0J
YnVmZmVyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZW50cnkgKikgKiAoc2l6ZSArIDEpKTsKLQlh
c3NlcnQoYnVmZmVyKTsKLQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGVudHJ5ICop
ICogKHNpemUgKyAxKSk7Ci0JY2tfcmluZ19pbml0KCZyaW5nX3NwbWMsIHNpemUgKyAxKTsKLQlm
b3IgKGkgPSAwOyBpIDwgbnRociAtIDE7IGkrKykgewotCQlfY29udGV4dFtpXS5idWZmZXIgPSBi
dWZmZXI7Ci0JCXIgPSBwdGhyZWFkX2NyZWF0ZSh0aHJlYWQgKyBpLCBOVUxMLCB0ZXN0X3NwbWMs
IF9jb250ZXh0ICsgaSk7Ci0JCWFzc2VydChyID09IDApOwotCX0KLQotCWZvciAobCA9IDA7IGwg
PCAodW5zaWduZWQgbG9uZylzaXplICogSVRFUkFUSU9OUyAqIChudGhyIC0gMSkgOyBsKyspIHsK
LQkJc3RydWN0IGVudHJ5ICplbnRyeSA9IG1hbGxvYyhzaXplb2YgKmVudHJ5KTsKLQotCQlhc3Nl
cnQoZW50cnkgIT0gTlVMTCk7Ci0JCWVudHJ5LT52YWx1ZV9sb25nID0gbDsKLQkJZW50cnktPnZh
bHVlID0gKGludClsOwotCQllbnRyeS0+dGlkID0gKGludClsOwotCQllbnRyeS0+bWFnaWMgPSAw
eGRlYWQ7Ci0JCWVudHJ5LT5yZWYgPSAwOwotCi0JCS8qIFdhaXQgdW50aWwgcXVldWUgaXMgbm90
IGZ1bGwuICovCi0JCWlmIChsICYgMSkgewotCQkJd2hpbGUgKENLX1JJTkdfRU5RVUVVRV9NUE1D
KGVudHJ5LCAmcmluZ19zcG1jLAotCQkJICAgIGJ1ZmZlciwgJmVudHJ5KSA9PSBmYWxzZSkgewot
CQkJCWNrX3ByX3N0YWxsKCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQl1bnNpZ25lZCBpbnQgczsK
LQotCQkJd2hpbGUgKENLX1JJTkdfRU5RVUVVRV9NUE1DX1NJWkUoZW50cnksICZyaW5nX3NwbWMs
Ci0JCQkgICAgYnVmZmVyLCAmZW50cnksICZzKSA9PSBmYWxzZSkgewotCQkJCWNrX3ByX3N0YWxs
KCk7Ci0JCQl9Ci0KLQkJCWlmICgoaW50KXMgPj0gKHNpemUgKiBJVEVSQVRJT05TICogKG50aHIg
LSAxKSkpIHsKLQkJCQlja19lcnJvcigiTVBNQzogVW5leHBlY3RlZCBzaXplIG9mICV1XG4iLCBz
KTsKLQkJCX0KLQkJfQotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBudGhyIC0gMTsgaSsrKQotCQlw
dGhyZWFkX2pvaW4odGhyZWFkW2ldLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcmluZy92
YWxpZGF0ZS9ja19yaW5nX3NwbWMuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L3JlZ3Jlc3Npb25zL2NrX3JpbmcvdmFsaWRhdGUvY2tfcmluZ19zcG1jLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDE2MWMwZDg1MTViZjMzZjgzNDllYjczZTJhZmVmNTMyMzVkZTRj
NmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcmluZy92YWxpZGF0ZS9j
a19yaW5nX3NwbWMuYworKysgL2Rldi9udWxsCkBAIC0xLDM0MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IDIwMTEtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0g
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8
c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0KLSNp
bmNsdWRlIDxja19iYXJyaWVyLmg+Ci0jaW5jbHVkZSA8Y2tfcmluZy5oPgotI2luY2x1ZGUgPGNr
X3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNpZm5kZWYgSVRFUkFU
SU9OUwotI2RlZmluZSBJVEVSQVRJT05TIDEyOAotI2VuZGlmCi0KLXN0cnVjdCBjb250ZXh0IHsK
LQl1bnNpZ25lZCBpbnQgdGlkOwotCXVuc2lnbmVkIGludCBwcmV2aW91czsKLQl1bnNpZ25lZCBp
bnQgbmV4dDsKLQlja19yaW5nX2J1ZmZlcl90ICpidWZmZXI7Ci19OwotCi1zdHJ1Y3QgZW50cnkg
ewotCXVuc2lnbmVkIGxvbmcgdmFsdWVfbG9uZzsKLQl1bnNpZ25lZCBpbnQgbWFnaWM7Ci0JdW5z
aWduZWQgaW50IHJlZjsKLQlpbnQgdGlkOwotCWludCB2YWx1ZTsKLX07Ci0KLXN0YXRpYyBpbnQg
bnRocjsKLXN0YXRpYyBja19yaW5nX3QgKnJpbmc7Ci1zdGF0aWMgY2tfcmluZ190IHJpbmdfc3Bt
YyBDS19DQ19DQUNIRUxJTkU7Ci1zdGF0aWMgc3RydWN0IGFmZmluaXR5IGE7Ci1zdGF0aWMgaW50
IHNpemU7Ci1zdGF0aWMgaW50IGViOwotc3RhdGljIGNrX2JhcnJpZXJfY2VudHJhbGl6ZWRfdCBi
YXJyaWVyID0gQ0tfQkFSUklFUl9DRU5UUkFMSVpFRF9JTklUSUFMSVpFUjsKLXN0YXRpYyBzdHJ1
Y3QgY29udGV4dCAqX2NvbnRleHQ7Ci0KLXN0YXRpYyB2b2lkICoKLXRlc3Rfc3BtYyh2b2lkICpj
KQotewotCXVuc2lnbmVkIGludCBvYnNlcnZlZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBwcmV2aW91
cyA9IDA7Ci0JdW5zaWduZWQgaW50IHNlZWQ7Ci0JaW50IGksIGssIGosIHRpZDsKLQlzdHJ1Y3Qg
Y29udGV4dCAqY29udGV4dCA9IGM7Ci0JY2tfcmluZ19idWZmZXJfdCAqYnVmZmVyOwotCi0JYnVm
ZmVyID0gY29udGV4dC0+YnVmZmVyOwotICAgICAgICBpZiAoYWZmX2l0ZXJhdGUoJmEpKSB7Ci0g
ICAgICAgICAgICAgICAgcGVycm9yKCJFUlJPUjogQ291bGQgbm90IGFmZmluZSB0aHJlYWQiKTsK
LSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLQotCXRpZCA9
IGNrX3ByX2ZhYV9pbnQoJmViLCAxKTsKLQlja19wcl9mZW5jZV9tZW1vcnkoKTsKLQl3aGlsZSAo
Y2tfcHJfbG9hZF9pbnQoJmViKSAhPSBudGhyIC0gMSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSVRF
UkFUSU9OUzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLQkJCXN0cnVj
dCBlbnRyeSAqbzsKLQkJCWludCBzcGluOwotCi0JCQkvKiBLZWVwIHRyeWluZyB1bnRpbCB3ZSBl
bmNvdW50ZXIgYXQgbGVhc3Qgb25lIG5vZGUuICovCi0JCQlpZiAoaiAmIDEpIHsKLQkJCQl3aGls
ZSAoY2tfcmluZ19kZXF1ZXVlX3NwbWMoJnJpbmdfc3BtYywgYnVmZmVyLAotCQkJCSAgICAmbykg
PT0gZmFsc2UpOwotCQkJfSBlbHNlIHsKLQkJCQl3aGlsZSAoY2tfcmluZ190cnlkZXF1ZXVlX3Nw
bWMoJnJpbmdfc3BtYywgYnVmZmVyLAotCQkJCSAgICAmbykgPT0gZmFsc2UpOwotCQkJfQotCi0J
CQlvYnNlcnZlZCsrOwotCQkJaWYgKG8tPnZhbHVlIDwgMAotCQkJICAgIHx8IG8tPnZhbHVlICE9
IG8tPnRpZAotCQkJICAgIHx8IG8tPm1hZ2ljICE9IDB4ZGVhZAotCQkJICAgIHx8IChwcmV2aW91
cyAhPSAwICYmIHByZXZpb3VzID49IG8tPnZhbHVlX2xvbmcpKSB7Ci0JCQkJY2tfZXJyb3IoIlsw
eCVwXSAoJXgpICglZCwgJWQpID48ICgwLCAlZClcbiIsCi0JCQkJCSh2b2lkICopbywgby0+bWFn
aWMsIG8tPnRpZCwgby0+dmFsdWUsIHNpemUpOwotCQkJfQotCi0JCQlvLT5tYWdpYyA9IDB4YmVl
ZjsKLQkJCW8tPnZhbHVlID0gLTMxMzM3OwotCQkJby0+dGlkID0gLTMxMzM4OwotCQkJcHJldmlv
dXMgPSBvLT52YWx1ZV9sb25nOwotCi0JCQlpZiAoY2tfcHJfZmFhX3VpbnQoJm8tPnJlZiwgMSkg
IT0gMCkgewotCQkJCWNrX2Vycm9yKCJbJXBdIFdlIGRlcXVldWVkIHR3aWNlLlxuIiwgKHZvaWQg
KilvKTsKLQkJCX0KLQotCQkJaWYgKChpICUgNCkgPT0gMCkgewotCQkJCXNwaW4gPSBjb21tb25f
cmFuZF9yKCZzZWVkKSAlIDE2Mzg0OwotCQkJCWZvciAoayA9IDA7IGsgPCBzcGluOyBrKyspIHsK
LQkJCQkJY2tfcHJfc3RhbGwoKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWZyZWUobyk7Ci0JCX0KLQl9
Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIlslZF0gT2JzZXJ2ZWQgJXVcbiIsIHRpZCwgb2JzZXJ2ZWQp
OwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCAqCi10ZXN0KHZvaWQgKmMpCi17Ci0J
c3RydWN0IGNvbnRleHQgKmNvbnRleHQgPSBjOwotCXN0cnVjdCBlbnRyeSAqZW50cnk7Ci0JdW5z
aWduZWQgaW50IHM7Ci0JaW50IGksIGo7Ci0JYm9vbCByOwotCWNrX3JpbmdfYnVmZmVyX3QgKmJ1
ZmZlciA9IGNvbnRleHQtPmJ1ZmZlcjsKLQlja19iYXJyaWVyX2NlbnRyYWxpemVkX3N0YXRlX3Qg
c2Vuc2UgPQotCSAgICBDS19CQVJSSUVSX0NFTlRSQUxJWkVEX1NUQVRFX0lOSVRJQUxJWkVSOwot
Ci0gICAgICAgIGlmIChhZmZfaXRlcmF0ZSgmYSkpIHsKLSAgICAgICAgICAgICAgICBwZXJyb3Io
IkVSUk9SOiBDb3VsZCBub3QgYWZmaW5lIHRocmVhZCIpOwotICAgICAgICAgICAgICAgIGV4aXQo
RVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotCi0JaWYgKGNvbnRleHQtPnRpZCA9PSAwKSB7Ci0J
CXN0cnVjdCBlbnRyeSAqZW50cmllczsKLQotCQllbnRyaWVzID0gbWFsbG9jKHNpemVvZihzdHJ1
Y3QgZW50cnkpICogc2l6ZSk7Ci0JCWFzc2VydChlbnRyaWVzICE9IE5VTEwpOwotCi0JCWlmIChj
a19yaW5nX3NpemUocmluZykgIT0gMCkgewotCQkJY2tfZXJyb3IoIk1vcmUgZW50cmllcyB0aGFu
IGV4cGVjdGVkOiAldSA+IDBcbiIsCi0JCQkJY2tfcmluZ19zaXplKHJpbmcpKTsKLQkJfQotCi0J
CWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCWVudHJpZXNbaV0udmFsdWUgPSBpOwot
CQkJZW50cmllc1tpXS50aWQgPSAwOwotCi0JCQlpZiAoaSAmIDEpIHsKLQkJCQlyID0gY2tfcmlu
Z19lbnF1ZXVlX3NwbWMocmluZywgYnVmZmVyLAotCQkJCSAgICBlbnRyaWVzICsgaSk7Ci0JCQl9
IGVsc2UgewotCQkJCXIgPSBja19yaW5nX2VucXVldWVfc3BtY19zaXplKHJpbmcsIGJ1ZmZlciwK
LQkJCQkJZW50cmllcyArIGksICZzKTsKLQotCQkJCWlmICgoaW50KXMgIT0gaSkgewotCQkJCQlj
a19lcnJvcigiU2l6ZSBpcyAldSwgZXhwZWN0ZWQgJWQuXG4iLAotCQkJCQkgICAgcywgc2l6ZSk7
Ci0JCQkJfQotCQkJfQotCi0JCQlhc3NlcnQociAhPSBmYWxzZSk7Ci0JCX0KLQotCQlpZiAoY2tf
cmluZ19zaXplKHJpbmcpICE9ICh1bnNpZ25lZCBpbnQpc2l6ZSkgewotCQkJY2tfZXJyb3IoIkxl
c3MgZW50cmllcyB0aGFuIGV4cGVjdGVkOiAldSA8ICVkXG4iLAotCQkJCWNrX3Jpbmdfc2l6ZShy
aW5nKSwgc2l6ZSk7Ci0JCX0KLQotCQlpZiAoY2tfcmluZ19jYXBhY2l0eShyaW5nKSAhPSBja19y
aW5nX3NpemUocmluZykgKyAxKSB7Ci0JCQlja19lcnJvcigiQ2FwYWNpdHkgbGVzcyB0aGFuIGV4
cGVjdGVkOiAldSA8ICV1XG4iLAotCQkJCWNrX3Jpbmdfc2l6ZShyaW5nKSwgY2tfcmluZ19jYXBh
Y2l0eShyaW5nKSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFdhaXQgZm9yIGFsbCB0aHJlYWRzLiBU
aGUgaWRlYSBoZXJlIGlzIHRvIG1heGltaXplIHRoZSBjb250ZW50aW9uLgotCSAqLwotCWNrX2Jh
cnJpZXJfY2VudHJhbGl6ZWQoJmJhcnJpZXIsICZzZW5zZSwgbnRocik7Ci0KLQlmb3IgKGkgPSAw
OyBpIDwgSVRFUkFUSU9OUzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBzaXplOyBqKyspIHsK
LQkJCWJ1ZmZlciA9IF9jb250ZXh0W2NvbnRleHQtPnByZXZpb3VzXS5idWZmZXI7Ci0JCQl3aGls
ZSAoY2tfcmluZ19kZXF1ZXVlX3NwbWMocmluZyArIGNvbnRleHQtPnByZXZpb3VzLAotCQkJICAg
IGJ1ZmZlciwgJmVudHJ5KSA9PSBmYWxzZSk7Ci0KLQkJCWlmIChjb250ZXh0LT5wcmV2aW91cyAh
PSAodW5zaWduZWQgaW50KWVudHJ5LT50aWQpIHsKLQkJCQlja19lcnJvcigiWyV1OiVwXSAldSAh
PSAldVxuIiwKLQkJCQkJY29udGV4dC0+dGlkLCAodm9pZCAqKWVudHJ5LCBlbnRyeS0+dGlkLCBj
b250ZXh0LT5wcmV2aW91cyk7Ci0JCQl9Ci0KLQkJCWlmIChlbnRyeS0+dmFsdWUgPCAwIHx8IGVu
dHJ5LT52YWx1ZSA+PSBzaXplKSB7Ci0JCQkJY2tfZXJyb3IoIlsldTolcF0gJXUgPC8+ICV1XG4i
LAotCQkJCQljb250ZXh0LT50aWQsICh2b2lkICopZW50cnksIGVudHJ5LT50aWQsIGNvbnRleHQt
PnByZXZpb3VzKTsKLQkJCX0KLQotCQkJZW50cnktPnRpZCA9IGNvbnRleHQtPnRpZDsKLQkJCWJ1
ZmZlciA9IGNvbnRleHQtPmJ1ZmZlcjsKLQotCQkJaWYgKGkgJiAxKSB7Ci0JCQkJciA9IGNrX3Jp
bmdfZW5xdWV1ZV9zcG1jKHJpbmcgKyBjb250ZXh0LT50aWQsCi0JCQkJCWJ1ZmZlciwgZW50cnkp
OwotCQkJfSBlbHNlIHsKLQkJCQlyID0gY2tfcmluZ19lbnF1ZXVlX3NwbWNfc2l6ZShyaW5nICsg
Y29udGV4dC0+dGlkLAotCQkJCQlidWZmZXIsIGVudHJ5LCAmcyk7Ci0KLQkJCQlpZiAoKGludClz
ID49IHNpemUpIHsKLQkJCQkJY2tfZXJyb3IoIlNpemUgJXUgb3V0IG9mIHJhbmdlIG9mICVkXG4i
LAotCQkJCQkgICAgcywgc2l6ZSk7Ci0JCQkJfQotCQkJfQotCQkJYXNzZXJ0KHIgPT0gdHJ1ZSk7
Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFy
ICphcmd2W10pCi17Ci0JaW50IGksIHI7Ci0JdW5zaWduZWQgbG9uZyBsOwotCXB0aHJlYWRfdCAq
dGhyZWFkOwotCWNrX3JpbmdfYnVmZmVyX3QgKmJ1ZmZlcjsKLQotCWlmIChhcmdjICE9IDQpIHsK
LQkJY2tfZXJyb3IoIlVzYWdlOiB2YWxpZGF0ZSA8dGhyZWFkcz4gPGFmZmluaXR5IGRlbHRhPiA8
c2l6ZT5cbiIpOwotCX0KLQotCWEucmVxdWVzdCA9IDA7Ci0JYS5kZWx0YSA9IGF0b2koYXJndlsy
XSk7Ci0KLQludGhyID0gYXRvaShhcmd2WzFdKTsKLQlhc3NlcnQobnRociA+PSAxKTsKLQotCXNp
emUgPSBhdG9pKGFyZ3ZbM10pOwotCWFzc2VydChzaXplID49IDQgJiYgKHNpemUgJiBzaXplIC0g
MSkgPT0gMCk7Ci0Jc2l6ZSAtPSAxOwotCi0JcmluZyA9IG1hbGxvYyhzaXplb2YoY2tfcmluZ190
KSAqIG50aHIpOwotCWFzc2VydChyaW5nKTsKLQotCV9jb250ZXh0ID0gbWFsbG9jKHNpemVvZigq
X2NvbnRleHQpICogbnRocik7Ci0JYXNzZXJ0KF9jb250ZXh0KTsKLQotCXRocmVhZCA9IG1hbGxv
YyhzaXplb2YocHRocmVhZF90KSAqIG50aHIpOwotCWFzc2VydCh0aHJlYWQpOwotCi0JZnByaW50
ZihzdGRlcnIsICJTUFNDIHRlc3Q6Iik7Ci0JZm9yIChpID0gMDsgaSA8IG50aHI7IGkrKykgewot
CQlfY29udGV4dFtpXS50aWQgPSBpOwotCQlpZiAoaSA9PSAwKSB7Ci0JCQlfY29udGV4dFtpXS5w
cmV2aW91cyA9IG50aHIgLSAxOwotCQkJX2NvbnRleHRbaV0ubmV4dCA9IGkgKyAxOwotCQl9IGVs
c2UgaWYgKGkgPT0gbnRociAtIDEpIHsKLQkJCV9jb250ZXh0W2ldLm5leHQgPSAwOwotCQkJX2Nv
bnRleHRbaV0ucHJldmlvdXMgPSBpIC0gMTsKLQkJfSBlbHNlIHsKLQkJCV9jb250ZXh0W2ldLm5l
eHQgPSBpICsgMTsKLQkJCV9jb250ZXh0W2ldLnByZXZpb3VzID0gaSAtIDE7Ci0JCX0KLQotCQli
dWZmZXIgPSBtYWxsb2Moc2l6ZW9mKGNrX3JpbmdfYnVmZmVyX3QpICogKHNpemUgKyAxKSk7Ci0J
CWFzc2VydChidWZmZXIpOwotCQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoY2tfcmluZ19idWZm
ZXJfdCkgKiAoc2l6ZSArIDEpKTsKLQkJX2NvbnRleHRbaV0uYnVmZmVyID0gYnVmZmVyOwotCQlj
a19yaW5nX2luaXQocmluZyArIGksIHNpemUgKyAxKTsKLQkJciA9IHB0aHJlYWRfY3JlYXRlKHRo
cmVhZCArIGksIE5VTEwsIHRlc3QsIF9jb250ZXh0ICsgaSk7Ci0JCWFzc2VydChyID09IDApOwot
CX0KLQotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspCi0JCXB0aHJlYWRfam9pbih0aHJlYWRb
aV0sIE5VTEwpOwotCi0JZnByaW50ZihzdGRlcnIsICIgZG9uZVxuIik7Ci0KLQlmcHJpbnRmKHN0
ZGVyciwgIlNQTUMgdGVzdDpcbiIpOwotCWJ1ZmZlciA9IG1hbGxvYyhzaXplb2YoY2tfcmluZ19i
dWZmZXJfdCkgKiAoc2l6ZSArIDEpKTsKLQlhc3NlcnQoYnVmZmVyKTsKLQltZW1zZXQoYnVmZmVy
LCAwLCBzaXplb2Yodm9pZCAqKSAqIChzaXplICsgMSkpOwotCWNrX3JpbmdfaW5pdCgmcmluZ19z
cG1jLCBzaXplICsgMSk7Ci0JZm9yIChpID0gMDsgaSA8IG50aHIgLSAxOyBpKyspIHsKLQkJX2Nv
bnRleHRbaV0uYnVmZmVyID0gYnVmZmVyOwotCQlyID0gcHRocmVhZF9jcmVhdGUodGhyZWFkICsg
aSwgTlVMTCwgdGVzdF9zcG1jLCBfY29udGV4dCArIGkpOwotCQlhc3NlcnQociA9PSAwKTsKLQl9
Ci0KLQlmb3IgKGwgPSAwOyBsIDwgKHVuc2lnbmVkIGxvbmcpc2l6ZSAqIElURVJBVElPTlMgKiAo
bnRociAtIDEpIDsgbCsrKSB7Ci0JCXN0cnVjdCBlbnRyeSAqZW50cnkgPSBtYWxsb2Moc2l6ZW9m
ICplbnRyeSk7Ci0KLQkJYXNzZXJ0KGVudHJ5ICE9IE5VTEwpOwotCQllbnRyeS0+dmFsdWVfbG9u
ZyA9IGw7Ci0JCWVudHJ5LT52YWx1ZSA9IChpbnQpbDsKLQkJZW50cnktPnRpZCA9IChpbnQpbDsK
LQkJZW50cnktPm1hZ2ljID0gMHhkZWFkOwotCQllbnRyeS0+cmVmID0gMDsKLQotCQkvKiBXYWl0
IHVudGlsIHF1ZXVlIGlzIG5vdCBmdWxsLiAqLwotCQlpZiAobCAmIDEpIHsKLQkJCXdoaWxlIChj
a19yaW5nX2VucXVldWVfc3BtYygmcmluZ19zcG1jLAotCQkJICAgIGJ1ZmZlciwKLQkJCSAgICBl
bnRyeSkgPT0gZmFsc2UpCi0JCQkJY2tfcHJfc3RhbGwoKTsKLQkJfSBlbHNlIHsKLQkJCXVuc2ln
bmVkIGludCBzOwotCi0JCQl3aGlsZSAoY2tfcmluZ19lbnF1ZXVlX3NwbWNfc2l6ZSgmcmluZ19z
cG1jLAotCQkJICAgIGJ1ZmZlciwgZW50cnksICZzKSA9PSBmYWxzZSkgewotCQkJCWNrX3ByX3N0
YWxsKCk7Ci0JCQl9Ci0KLQkJCWlmICgoaW50KXMgPj0gKHNpemUgKiBJVEVSQVRJT05TICogKG50
aHIgLSAxKSkpIHsKLQkJCQlja19lcnJvcigiTVBNQzogVW5leHBlY3RlZCBzaXplIG9mICV1XG4i
LCBzKTsKLQkJCX0KLQkJfQotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBudGhyIC0gMTsgaSsrKQot
CQlwdGhyZWFkX2pvaW4odGhyZWFkW2ldLCBOVUxMKTsKLQotCXJldHVybiAoMCk7Ci19Ci0KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X3JpbmcvdmFsaWRhdGUvY2tfcmluZ19zcG1jX3RlbXBsYXRlLmMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yaW5nL3ZhbGlkYXRlL2NrX3Jpbmdfc3Bt
Y190ZW1wbGF0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmM3NWMxMTUwMWE4
NmJmYjI0YjU5N2ZjMGI3MTM2Zjk0Mjk0ZDRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jl
c3Npb25zL2NrX3JpbmcvdmFsaWRhdGUvY2tfcmluZ19zcG1jX3RlbXBsYXRlLmMKKysrIC9kZXYv
bnVsbApAQCAtMSwzNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBB
bCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGFzc2VydC5o
PgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotCi0jaW5jbHVkZSA8Y2tfYmFycmllci5oPgot
I2luY2x1ZGUgPGNrX3JpbmcuaD4KLSNpbmNsdWRlIDxja19zcGlubG9jay5oPgotI2luY2x1ZGUg
Ii4uLy4uL2NvbW1vbi5oIgotCi0jaWZuZGVmIElURVJBVElPTlMKLSNkZWZpbmUgSVRFUkFUSU9O
UyAxMjgKLSNlbmRpZgotCi1zdHJ1Y3QgY29udGV4dCB7Ci0JdW5zaWduZWQgaW50IHRpZDsKLQl1
bnNpZ25lZCBpbnQgcHJldmlvdXM7Ci0JdW5zaWduZWQgaW50IG5leHQ7Ci0Jc3RydWN0IGVudHJ5
ICoqYnVmZmVyOwotfTsKLQotc3RydWN0IGVudHJ5IHsKLQl1bnNpZ25lZCBsb25nIHZhbHVlX2xv
bmc7Ci0JdW5zaWduZWQgaW50IG1hZ2ljOwotCXVuc2lnbmVkIGludCByZWY7Ci0JaW50IHRpZDsK
LQlpbnQgdmFsdWU7Ci19OwotCi1DS19SSU5HX1BST1RPVFlQRShlbnRyeSwgZW50cnkgKikKLQot
c3RhdGljIGludCBudGhyOwotc3RhdGljIGNrX3JpbmdfdCAqcmluZzsKLXN0YXRpYyBja19yaW5n
X3QgcmluZ19zcG1jIENLX0NDX0NBQ0hFTElORTsKLXN0YXRpYyBzdHJ1Y3QgYWZmaW5pdHkgYTsK
LXN0YXRpYyBpbnQgc2l6ZTsKLXN0YXRpYyBpbnQgZWI7Ci1zdGF0aWMgY2tfYmFycmllcl9jZW50
cmFsaXplZF90IGJhcnJpZXIgPSBDS19CQVJSSUVSX0NFTlRSQUxJWkVEX0lOSVRJQUxJWkVSOwot
c3RhdGljIHN0cnVjdCBjb250ZXh0ICpfY29udGV4dDsKLQotc3RhdGljIHZvaWQgKgotdGVzdF9z
cG1jKHZvaWQgKmMpCi17Ci0JdW5zaWduZWQgaW50IG9ic2VydmVkID0gMDsKLQl1bnNpZ25lZCBs
b25nIHByZXZpb3VzID0gMDsKLQl1bnNpZ25lZCBpbnQgc2VlZDsKLQlpbnQgaSwgaywgaiwgdGlk
OwotCXN0cnVjdCBjb250ZXh0ICpjb250ZXh0ID0gYzsKLQlzdHJ1Y3QgZW50cnkgKipidWZmZXI7
Ci0KLQlidWZmZXIgPSBjb250ZXh0LT5idWZmZXI7Ci0gICAgICAgIGlmIChhZmZfaXRlcmF0ZSgm
YSkpIHsKLSAgICAgICAgICAgICAgICBwZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWZmaW5lIHRo
cmVhZCIpOwotICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQot
Ci0JdGlkID0gY2tfcHJfZmFhX2ludCgmZWIsIDEpOwotCWNrX3ByX2ZlbmNlX21lbW9yeSgpOwot
CXdoaWxlIChja19wcl9sb2FkX2ludCgmZWIpICE9IG50aHIgLSAxKTsKLQotCWZvciAoaSA9IDA7
IGkgPCBJVEVSQVRJT05TOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgewot
CQkJc3RydWN0IGVudHJ5ICpvOwotCQkJaW50IHNwaW47Ci0KLQkJCS8qIEtlZXAgdHJ5aW5nIHVu
dGlsIHdlIGVuY291bnRlciBhdCBsZWFzdCBvbmUgbm9kZS4gKi8KLQkJCWlmIChqICYgMSkgewot
CQkJCXdoaWxlIChDS19SSU5HX0RFUVVFVUVfU1BNQyhlbnRyeSwKLQkJCQkgICAgJnJpbmdfc3Bt
YywgYnVmZmVyLCAmbykgPT0gZmFsc2UpOwotCQkJfSBlbHNlIHsKLQkJCQl3aGlsZSAoQ0tfUklO
R19UUllERVFVRVVFX1NQTUMoZW50cnksCi0JCQkJICAgICZyaW5nX3NwbWMsIGJ1ZmZlciwgJm8p
ID09IGZhbHNlKTsKLQkJCX0KLQotCQkJb2JzZXJ2ZWQrKzsKLQkJCWlmIChvLT52YWx1ZSA8IDAK
LQkJCSAgICB8fCBvLT52YWx1ZSAhPSBvLT50aWQKLQkJCSAgICB8fCBvLT5tYWdpYyAhPSAweGRl
YWQKLQkJCSAgICB8fCAocHJldmlvdXMgIT0gMCAmJiBwcmV2aW91cyA+PSBvLT52YWx1ZV9sb25n
KSkgewotCQkJCWNrX2Vycm9yKCJbMHglcF0gKCV4KSAoJWQsICVkKSA+PCAoMCwgJWQpXG4iLAot
CQkJCQkodm9pZCAqKW8sIG8tPm1hZ2ljLCBvLT50aWQsIG8tPnZhbHVlLCBzaXplKTsKLQkJCX0K
LQotCQkJby0+bWFnaWMgPSAweGJlZWY7Ci0JCQlvLT52YWx1ZSA9IC0zMTMzNzsKLQkJCW8tPnRp
ZCA9IC0zMTMzODsKLQkJCXByZXZpb3VzID0gby0+dmFsdWVfbG9uZzsKLQotCQkJaWYgKGNrX3By
X2ZhYV91aW50KCZvLT5yZWYsIDEpICE9IDApIHsKLQkJCQlja19lcnJvcigiWyVwXSBXZSBkZXF1
ZXVlZCB0d2ljZS5cbiIsICh2b2lkICopbyk7Ci0JCQl9Ci0KLQkJCWlmICgoaSAlIDQpID09IDAp
IHsKLQkJCQlzcGluID0gY29tbW9uX3JhbmRfcigmc2VlZCkgJSAxNjM4NDsKLQkJCQlmb3IgKGsg
PSAwOyBrIDwgc3BpbjsgaysrKSB7Ci0JCQkJCWNrX3ByX3N0YWxsKCk7Ci0JCQkJfQotCQkJfQot
Ci0JCQlmcmVlKG8pOwotCQl9Ci0JfQotCi0JZnByaW50ZihzdGRlcnIsICJbJWRdIE9ic2VydmVk
ICV1XG4iLCB0aWQsIG9ic2VydmVkKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQg
KgotdGVzdCh2b2lkICpjKQotewotCXN0cnVjdCBjb250ZXh0ICpjb250ZXh0ID0gYzsKLQlzdHJ1
Y3QgZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGludCBzOwotCWludCBpLCBqOwotCWJvb2wgcjsK
LQlzdHJ1Y3QgZW50cnkgKipidWZmZXIgPSBjb250ZXh0LT5idWZmZXI7Ci0JY2tfYmFycmllcl9j
ZW50cmFsaXplZF9zdGF0ZV90IHNlbnNlID0KLQkgICAgQ0tfQkFSUklFUl9DRU5UUkFMSVpFRF9T
VEFURV9JTklUSUFMSVpFUjsKLQotICAgICAgICBpZiAoYWZmX2l0ZXJhdGUoJmEpKSB7Ci0gICAg
ICAgICAgICAgICAgcGVycm9yKCJFUlJPUjogQ291bGQgbm90IGFmZmluZSB0aHJlYWQiKTsKLSAg
ICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLQotCWlmIChjb250
ZXh0LT50aWQgPT0gMCkgewotCQlzdHJ1Y3QgZW50cnkgKiplbnRyaWVzOwotCi0JCWVudHJpZXMg
PSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBlbnRyeSAqKSAqIHNpemUpOwotCQlhc3NlcnQoZW50cmll
cyAhPSBOVUxMKTsKLQotCQlpZiAoY2tfcmluZ19zaXplKHJpbmcpICE9IDApIHsKLQkJCWNrX2Vy
cm9yKCJNb3JlIGVudHJpZXMgdGhhbiBleHBlY3RlZDogJXUgPiAwXG4iLAotCQkJCWNrX3Jpbmdf
c2l6ZShyaW5nKSk7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCQll
bnRyaWVzW2ldID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZW50cnkpKTsKLQkJCWFzc2VydChlbnRy
aWVzW2ldICE9IE5VTEwpOwotCi0JCQllbnRyaWVzW2ldLT52YWx1ZSA9IGk7Ci0JCQllbnRyaWVz
W2ldLT50aWQgPSAwOwotCi0JCQlpZiAoaSAmIDEpIHsKLQkJCQlyID0gQ0tfUklOR19FTlFVRVVF
X1NQTUMoZW50cnksIHJpbmcsIGJ1ZmZlciwKLQkJCQkgICAgJmVudHJpZXNbaV0pOwotCQkJfSBl
bHNlIHsKLQkJCQlyID0gQ0tfUklOR19FTlFVRVVFX1NQTUNfU0laRShlbnRyeSwgcmluZywKLQkJ
CQkJYnVmZmVyLCAmZW50cmllc1tpXSwgJnMpOwotCi0JCQkJaWYgKChpbnQpcyAhPSBpKSB7Ci0J
CQkJCWNrX2Vycm9yKCJTaXplIGlzICV1LCBleHBlY3RlZCAlZC5cbiIsCi0JCQkJCSAgICBzLCBz
aXplKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWFzc2VydChyICE9IGZhbHNlKTsKLQkJfQotCi0JCWlm
IChja19yaW5nX3NpemUocmluZykgIT0gKHVuc2lnbmVkIGludClzaXplKSB7Ci0JCQlja19lcnJv
cigiTGVzcyBlbnRyaWVzIHRoYW4gZXhwZWN0ZWQ6ICV1IDwgJWRcbiIsCi0JCQkJY2tfcmluZ19z
aXplKHJpbmcpLCBzaXplKTsKLQkJfQotCi0JCWlmIChja19yaW5nX2NhcGFjaXR5KHJpbmcpICE9
IGNrX3Jpbmdfc2l6ZShyaW5nKSArIDEpIHsKLQkJCWNrX2Vycm9yKCJDYXBhY2l0eSBsZXNzIHRo
YW4gZXhwZWN0ZWQ6ICV1IDwgJXVcbiIsCi0JCQkJY2tfcmluZ19zaXplKHJpbmcpLCBja19yaW5n
X2NhcGFjaXR5KHJpbmcpKTsKLQkJfQotCX0KLQotCS8qCi0JICogV2FpdCBmb3IgYWxsIHRocmVh
ZHMuIFRoZSBpZGVhIGhlcmUgaXMgdG8gbWF4aW1pemUgdGhlIGNvbnRlbnRpb24uCi0JICovCi0J
Y2tfYmFycmllcl9jZW50cmFsaXplZCgmYmFycmllciwgJnNlbnNlLCBudGhyKTsKLQotCWZvciAo
aSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IHNpemU7IGor
KykgewotCQkJYnVmZmVyID0gX2NvbnRleHRbY29udGV4dC0+cHJldmlvdXNdLmJ1ZmZlcjsKLQkJ
CXdoaWxlIChDS19SSU5HX0RFUVVFVUVfU1BNQyhlbnRyeSwKLQkJCSAgICByaW5nICsgY29udGV4
dC0+cHJldmlvdXMsCi0JCQkgICAgYnVmZmVyLCAmZW50cnkpID09IGZhbHNlKTsKLQotCQkJaWYg
KGNvbnRleHQtPnByZXZpb3VzICE9ICh1bnNpZ25lZCBpbnQpZW50cnktPnRpZCkgewotCQkJCWNr
X2Vycm9yKCJbJXU6JXBdICV1ICE9ICV1XG4iLAotCQkJCSAgICBjb250ZXh0LT50aWQsICh2b2lk
ICopZW50cnksCi0JCQkJICAgIGVudHJ5LT50aWQsIGNvbnRleHQtPnByZXZpb3VzKTsKLQkJCX0K
LQotCQkJaWYgKGVudHJ5LT52YWx1ZSA8IDAgfHwgZW50cnktPnZhbHVlID49IHNpemUpIHsKLQkJ
CQlja19lcnJvcigiWyV1OiVwXSAldSA8Lz4gJXVcbiIsCi0JCQkJICAgIGNvbnRleHQtPnRpZCwg
KHZvaWQgKillbnRyeSwKLQkJCQkgICAgZW50cnktPnRpZCwgY29udGV4dC0+cHJldmlvdXMpOwot
CQkJfQotCi0JCQllbnRyeS0+dGlkID0gY29udGV4dC0+dGlkOwotCQkJYnVmZmVyID0gY29udGV4
dC0+YnVmZmVyOwotCi0JCQlpZiAoaSAmIDEpIHsKLQkJCQlyID0gQ0tfUklOR19FTlFVRVVFX1NQ
TUMoZW50cnksCi0JCQkJICAgIHJpbmcgKyBjb250ZXh0LT50aWQsCi0JCQkJICAgIGJ1ZmZlciwg
JmVudHJ5KTsKLQkJCX0gZWxzZSB7Ci0JCQkJciA9IENLX1JJTkdfRU5RVUVVRV9TUE1DX1NJWkUo
ZW50cnksCi0JCQkJICAgIHJpbmcgKyBjb250ZXh0LT50aWQsCi0JCQkJICAgIGJ1ZmZlciwgJmVu
dHJ5LCAmcyk7Ci0KLQkJCQlpZiAoKGludClzID49IHNpemUpIHsKLQkJCQkJY2tfZXJyb3IoIlNp
emUgJXUgb3V0IG9mIHJhbmdlIG9mICVkXG4iLAotCQkJCQkgICAgcywgc2l6ZSk7Ci0JCQkJfQot
CQkJfQotCQkJYXNzZXJ0KHIgPT0gdHJ1ZSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0K
LQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JaW50IGksIHI7Ci0JdW5z
aWduZWQgbG9uZyBsOwotCXB0aHJlYWRfdCAqdGhyZWFkOwotCXN0cnVjdCBlbnRyeSAqKmJ1ZmZl
cjsKLQotCWlmIChhcmdjICE9IDQpIHsKLQkJY2tfZXJyb3IoIlVzYWdlOiB2YWxpZGF0ZSA8dGhy
ZWFkcz4gPGFmZmluaXR5IGRlbHRhPiA8c2l6ZT5cbiIpOwotCX0KLQotCWEucmVxdWVzdCA9IDA7
Ci0JYS5kZWx0YSA9IGF0b2koYXJndlsyXSk7Ci0KLQludGhyID0gYXRvaShhcmd2WzFdKTsKLQlh
c3NlcnQobnRociA+PSAxKTsKLQotCXNpemUgPSBhdG9pKGFyZ3ZbM10pOwotCWFzc2VydChzaXpl
ID49IDQgJiYgKHNpemUgJiBzaXplIC0gMSkgPT0gMCk7Ci0Jc2l6ZSAtPSAxOwotCi0JcmluZyA9
IG1hbGxvYyhzaXplb2YoY2tfcmluZ190KSAqIG50aHIpOwotCWFzc2VydChyaW5nKTsKLQotCV9j
b250ZXh0ID0gbWFsbG9jKHNpemVvZigqX2NvbnRleHQpICogbnRocik7Ci0JYXNzZXJ0KF9jb250
ZXh0KTsKLQotCXRocmVhZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG50aHIpOwotCWFz
c2VydCh0aHJlYWQpOwotCi0JZnByaW50ZihzdGRlcnIsICJTUFNDIHRlc3Q6Iik7Ci0JZm9yIChp
ID0gMDsgaSA8IG50aHI7IGkrKykgewotCQlfY29udGV4dFtpXS50aWQgPSBpOwotCQlpZiAoaSA9
PSAwKSB7Ci0JCQlfY29udGV4dFtpXS5wcmV2aW91cyA9IG50aHIgLSAxOwotCQkJX2NvbnRleHRb
aV0ubmV4dCA9IGkgKyAxOwotCQl9IGVsc2UgaWYgKGkgPT0gbnRociAtIDEpIHsKLQkJCV9jb250
ZXh0W2ldLm5leHQgPSAwOwotCQkJX2NvbnRleHRbaV0ucHJldmlvdXMgPSBpIC0gMTsKLQkJfSBl
bHNlIHsKLQkJCV9jb250ZXh0W2ldLm5leHQgPSBpICsgMTsKLQkJCV9jb250ZXh0W2ldLnByZXZp
b3VzID0gaSAtIDE7Ci0JCX0KLQotCQlidWZmZXIgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBlbnRy
eSAqKSAqIChzaXplICsgMSkpOwotCQlhc3NlcnQoYnVmZmVyKTsKLQkJbWVtc2V0KGJ1ZmZlciwg
MCwgc2l6ZW9mKHN0cnVjdCBlbnRyeSAqKSAqIChzaXplICsgMSkpOwotCQlfY29udGV4dFtpXS5i
dWZmZXIgPSBidWZmZXI7Ci0JCWNrX3JpbmdfaW5pdChyaW5nICsgaSwgc2l6ZSArIDEpOwotCQly
ID0gcHRocmVhZF9jcmVhdGUodGhyZWFkICsgaSwgTlVMTCwgdGVzdCwgX2NvbnRleHQgKyBpKTsK
LQkJYXNzZXJ0KHIgPT0gMCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG50aHI7IGkrKykKLQkJ
cHRocmVhZF9qb2luKHRocmVhZFtpXSwgTlVMTCk7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiBkb25l
XG4iKTsKLQotCWZwcmludGYoc3RkZXJyLCAiU1BNQyB0ZXN0OlxuIik7Ci0JYnVmZmVyID0gbWFs
bG9jKHNpemVvZihzdHJ1Y3QgZW50cnkgKikgKiAoc2l6ZSArIDEpKTsKLQlhc3NlcnQoYnVmZmVy
KTsKLQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGVudHJ5ICopICogKHNpemUgKyAx
KSk7Ci0JY2tfcmluZ19pbml0KCZyaW5nX3NwbWMsIHNpemUgKyAxKTsKLQlmb3IgKGkgPSAwOyBp
IDwgbnRociAtIDE7IGkrKykgewotCQlfY29udGV4dFtpXS5idWZmZXIgPSBidWZmZXI7Ci0JCXIg
PSBwdGhyZWFkX2NyZWF0ZSh0aHJlYWQgKyBpLCBOVUxMLCB0ZXN0X3NwbWMsIF9jb250ZXh0ICsg
aSk7Ci0JCWFzc2VydChyID09IDApOwotCX0KLQotCWZvciAobCA9IDA7IGwgPCAodW5zaWduZWQg
bG9uZylzaXplICogSVRFUkFUSU9OUyAqIChudGhyIC0gMSkgOyBsKyspIHsKLQkJc3RydWN0IGVu
dHJ5ICplbnRyeSA9IG1hbGxvYyhzaXplb2YgKmVudHJ5KTsKLQotCQlhc3NlcnQoZW50cnkgIT0g
TlVMTCk7Ci0JCWVudHJ5LT52YWx1ZV9sb25nID0gbDsKLQkJZW50cnktPnZhbHVlID0gKGludCls
OwotCQllbnRyeS0+dGlkID0gKGludClsOwotCQllbnRyeS0+bWFnaWMgPSAweGRlYWQ7Ci0JCWVu
dHJ5LT5yZWYgPSAwOwotCi0JCS8qIFdhaXQgdW50aWwgcXVldWUgaXMgbm90IGZ1bGwuICovCi0J
CWlmIChsICYgMSkgewotCQkJd2hpbGUgKENLX1JJTkdfRU5RVUVVRV9TUE1DKGVudHJ5LCAmcmlu
Z19zcG1jLAotCQkJICAgIGJ1ZmZlciwgJmVudHJ5KSA9PSBmYWxzZSkgewotCQkJCWNrX3ByX3N0
YWxsKCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQl1bnNpZ25lZCBpbnQgczsKLQotCQkJd2hpbGUg
KENLX1JJTkdfRU5RVUVVRV9TUE1DX1NJWkUoZW50cnksICZyaW5nX3NwbWMsCi0JCQkgICAgYnVm
ZmVyLCAmZW50cnksICZzKSA9PSBmYWxzZSkgewotCQkJCWNrX3ByX3N0YWxsKCk7Ci0JCQl9Ci0K
LQkJCWlmICgoaW50KXMgPj0gKHNpemUgKiBJVEVSQVRJT05TICogKG50aHIgLSAxKSkpIHsKLQkJ
CQlja19lcnJvcigiTVBNQzogVW5leHBlY3RlZCBzaXplIG9mICV1XG4iLCBzKTsKLQkJCX0KLQkJ
fQotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBudGhyIC0gMTsgaSsrKQotCQlwdGhyZWFkX2pvaW4o
dGhyZWFkW2ldLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yaW5nL3ZhbGlkYXRlL2Nr
X3Jpbmdfc3BzYy5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lv
bnMvY2tfcmluZy92YWxpZGF0ZS9ja19yaW5nX3Nwc2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOTEwZjdlNjU0YmRiZDBkZTM5YTQ0MTdmMzIwNmY4ZWIwNmI2MDRmMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yaW5nL3ZhbGlkYXRlL2NrX3Jpbmdfc3Bz
Yy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAx
MS0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgot
I2luY2x1ZGUgPHB0aHJlYWQuaD4KLQotI2luY2x1ZGUgPGNrX2JhcnJpZXIuaD4KLSNpbmNsdWRl
IDxja19yaW5nLmg+Ci0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNpZm5kZWYgSVRFUkFU
SU9OUwotI2RlZmluZSBJVEVSQVRJT05TIDEyOAotI2VuZGlmCi0KLXN0cnVjdCBjb250ZXh0IHsK
LQl1bnNpZ25lZCBpbnQgdGlkOwotCXVuc2lnbmVkIGludCBwcmV2aW91czsKLQl1bnNpZ25lZCBp
bnQgbmV4dDsKLQl2b2lkICpidWZmZXI7Ci19OwotCi1zdHJ1Y3QgZW50cnkgewotCWludCB0aWQ7
Ci0JaW50IHZhbHVlOwotfTsKLQotc3RhdGljIGludCBudGhyOwotc3RhdGljIGNrX3JpbmdfdCAq
cmluZzsKLXN0YXRpYyBzdHJ1Y3QgYWZmaW5pdHkgYTsKLXN0YXRpYyBpbnQgc2l6ZTsKLXN0YXRp
YyBja19iYXJyaWVyX2NlbnRyYWxpemVkX3QgYmFycmllciA9IENLX0JBUlJJRVJfQ0VOVFJBTEla
RURfSU5JVElBTElaRVI7Ci1zdGF0aWMgc3RydWN0IGNvbnRleHQgKl9jb250ZXh0OwotCi1zdGF0
aWMgdm9pZCAqCi10ZXN0KHZvaWQgKmMpCi17Ci0Jc3RydWN0IGNvbnRleHQgKmNvbnRleHQgPSBj
OwotCXN0cnVjdCBlbnRyeSAqZW50cnk7Ci0JdW5zaWduZWQgaW50IHM7Ci0JaW50IGksIGo7Ci0J
Ym9vbCByOwotCWNrX2JhcnJpZXJfY2VudHJhbGl6ZWRfc3RhdGVfdCBzZW5zZSA9Ci0JICAgIENL
X0JBUlJJRVJfQ0VOVFJBTElaRURfU1RBVEVfSU5JVElBTElaRVI7Ci0JY2tfcmluZ19idWZmZXJf
dCAqYnVmZmVyOwotCi0gICAgICAgIGlmIChhZmZfaXRlcmF0ZSgmYSkpIHsKLSAgICAgICAgICAg
ICAgICBwZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWZmaW5lIHRocmVhZCIpOwotICAgICAgICAg
ICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotCi0JYnVmZmVyID0gY29udGV4
dC0+YnVmZmVyOwotCWlmIChjb250ZXh0LT50aWQgPT0gMCkgewotCQlzdHJ1Y3QgZW50cnkgKmVu
dHJpZXM7Ci0KLQkJZW50cmllcyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGVudHJ5KSAqIHNpemUp
OwotCQlhc3NlcnQoZW50cmllcyAhPSBOVUxMKTsKLQotCQlpZiAoY2tfcmluZ19zaXplKHJpbmcp
ICE9IDApIHsKLQkJCWNrX2Vycm9yKCJNb3JlIGVudHJpZXMgdGhhbiBleHBlY3RlZDogJXUgPiAw
XG4iLAotCQkJCWNrX3Jpbmdfc2l6ZShyaW5nKSk7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7Ci0JCQllbnRyaWVzW2ldLnZhbHVlID0gaTsKLQkJCWVudHJpZXNbaV0udGlk
ID0gMDsKLQotCQkJaWYgKGkgJiAxKSB7Ci0JCQkJciA9IGNrX3JpbmdfZW5xdWV1ZV9zcHNjKHJp
bmcsIGJ1ZmZlciwKLQkJCQkgICAgZW50cmllcyArIGkpOwotCQkJfSBlbHNlIHsKLQkJCQlyID0g
Y2tfcmluZ19lbnF1ZXVlX3Nwc2Nfc2l6ZShyaW5nLAotCQkJCQlidWZmZXIsIGVudHJpZXMgKyBp
LCAmcyk7Ci0KLQkJCQlpZiAoKGludClzICE9IGkpIHsKLQkJCQkJY2tfZXJyb3IoIlNpemUgaXMg
JXUsIGV4cGVjdGVkICVkXG4iLAotCQkJCQkgICAgcywgaSArIDEpOwotCQkJCX0KLQkJCX0KLQot
CQkJYXNzZXJ0KHIgIT0gZmFsc2UpOwotCQl9Ci0KLQkJaWYgKGNrX3Jpbmdfc2l6ZShyaW5nKSAh
PSAodW5zaWduZWQgaW50KXNpemUpIHsKLQkJCWNrX2Vycm9yKCJMZXNzIGVudHJpZXMgdGhhbiBl
eHBlY3RlZDogJXUgPCAlZFxuIiwKLQkJCQlja19yaW5nX3NpemUocmluZyksIHNpemUpOwotCQl9
Ci0KLQkJaWYgKGNrX3JpbmdfY2FwYWNpdHkocmluZykgIT0gY2tfcmluZ19zaXplKHJpbmcpICsg
MSkgewotCQkJY2tfZXJyb3IoIkNhcGFjaXR5IGxlc3MgdGhhbiBleHBlY3RlZDogJXUgPCAldVxu
IiwKLQkJCQlja19yaW5nX3NpemUocmluZyksIGNrX3JpbmdfY2FwYWNpdHkocmluZykpOwotCQl9
Ci0JfQotCi0JY2tfYmFycmllcl9jZW50cmFsaXplZCgmYmFycmllciwgJnNlbnNlLCBudGhyKTsK
LQotCWZvciAoaSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8
IHNpemU7IGorKykgewotCQkJYnVmZmVyID0gX2NvbnRleHRbY29udGV4dC0+cHJldmlvdXNdLmJ1
ZmZlcjsKLQkJCXdoaWxlIChja19yaW5nX2RlcXVldWVfc3BzYyhyaW5nICsgY29udGV4dC0+cHJl
dmlvdXMsCi0JCQkgICAgYnVmZmVyLCAmZW50cnkpID09IGZhbHNlKTsKLQotCQkJaWYgKGNvbnRl
eHQtPnByZXZpb3VzICE9ICh1bnNpZ25lZCBpbnQpZW50cnktPnRpZCkgewotCQkJCWNrX2Vycm9y
KCJbJXU6JXBdICV1ICE9ICV1XG4iLAotCQkJCQljb250ZXh0LT50aWQsICh2b2lkICopZW50cnks
IGVudHJ5LT50aWQsIGNvbnRleHQtPnByZXZpb3VzKTsKLQkJCX0KLQotCQkJaWYgKGVudHJ5LT52
YWx1ZSAhPSBqKSB7Ci0JCQkJY2tfZXJyb3IoIlsldTolcF0gJXUgIT0gJXVcbiIsCi0JCQkJCWNv
bnRleHQtPnRpZCwgKHZvaWQgKillbnRyeSwgZW50cnktPnRpZCwgY29udGV4dC0+cHJldmlvdXMp
OwotCQkJfQotCi0JCQllbnRyeS0+dGlkID0gY29udGV4dC0+dGlkOwotCQkJYnVmZmVyID0gY29u
dGV4dC0+YnVmZmVyOwotCQkJaWYgKGkgJiAxKSB7Ci0JCQkJciA9IGNrX3JpbmdfZW5xdWV1ZV9z
cHNjKHJpbmcgKyBjb250ZXh0LT50aWQsCi0JCQkJCWJ1ZmZlciwgZW50cnkpOwotCQkJfSBlbHNl
IHsKLQkJCQlyID0gY2tfcmluZ19lbnF1ZXVlX3Nwc2Nfc2l6ZShyaW5nICsKLQkJCQkJY29udGV4
dC0+dGlkLCBidWZmZXIsIGVudHJ5LCAmcyk7Ci0KLQkJCQlpZiAoKGludClzID49IHNpemUpIHsK
LQkJCQkJY2tfZXJyb3IoIlNpemUgJXUgaXMgb3V0IG9mIHJhbmdlICVkXG4iLAotCQkJCQkgICAg
cywgc2l6ZSk7Ci0JCQkJfQotCQkJfQotCQkJYXNzZXJ0KHIgPT0gdHJ1ZSk7Ci0JCX0KLQl9Ci0K
LQlyZXR1cm4gTlVMTDsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17
Ci0JaW50IGksIHI7Ci0JY2tfcmluZ19idWZmZXJfdCAqYnVmZmVyOwotCXB0aHJlYWRfdCAqdGhy
ZWFkOwotCi0JaWYgKGFyZ2MgIT0gNCkgewotCQlja19lcnJvcigiVXNhZ2U6IHZhbGlkYXRlIDx0
aHJlYWRzPiA8YWZmaW5pdHkgZGVsdGE+IDxzaXplPlxuIik7Ci0JfQotCi0JYS5yZXF1ZXN0ID0g
MDsKLQlhLmRlbHRhID0gYXRvaShhcmd2WzJdKTsKLQotCW50aHIgPSBhdG9pKGFyZ3ZbMV0pOwot
CWFzc2VydChudGhyID49IDEpOwotCi0Jc2l6ZSA9IGF0b2koYXJndlszXSk7Ci0JYXNzZXJ0KHNp
emUgPj0gNCAmJiAoc2l6ZSAmIHNpemUgLSAxKSA9PSAwKTsKLQlzaXplIC09IDE7Ci0KLQlyaW5n
ID0gbWFsbG9jKHNpemVvZihja19yaW5nX3QpICogbnRocik7Ci0JYXNzZXJ0KHJpbmcpOwotCi0J
X2NvbnRleHQgPSBtYWxsb2Moc2l6ZW9mKCpfY29udGV4dCkgKiBudGhyKTsKLQlhc3NlcnQoX2Nv
bnRleHQpOwotCi0JdGhyZWFkID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocik7Ci0J
YXNzZXJ0KHRocmVhZCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnRocjsgaSsrKSB7Ci0JCV9jb250
ZXh0W2ldLnRpZCA9IGk7Ci0JCWlmIChpID09IDApIHsKLQkJCV9jb250ZXh0W2ldLnByZXZpb3Vz
ID0gbnRociAtIDE7Ci0JCQlfY29udGV4dFtpXS5uZXh0ID0gaSArIDE7Ci0JCX0gZWxzZSBpZiAo
aSA9PSBudGhyIC0gMSkgewotCQkJX2NvbnRleHRbaV0ubmV4dCA9IDA7Ci0JCQlfY29udGV4dFtp
XS5wcmV2aW91cyA9IGkgLSAxOwotCQl9IGVsc2UgewotCQkJX2NvbnRleHRbaV0ubmV4dCA9IGkg
KyAxOwotCQkJX2NvbnRleHRbaV0ucHJldmlvdXMgPSBpIC0gMTsKLQkJfQotCi0JCWJ1ZmZlciA9
IG1hbGxvYyhzaXplb2YoY2tfcmluZ19idWZmZXJfdCkgKiAoc2l6ZSArIDEpKTsKLQkJYXNzZXJ0
KGJ1ZmZlcik7Ci0JCV9jb250ZXh0W2ldLmJ1ZmZlciA9IGJ1ZmZlcjsKLQkJY2tfcmluZ19pbml0
KHJpbmcgKyBpLCBzaXplICsgMSk7Ci0JCXIgPSBwdGhyZWFkX2NyZWF0ZSh0aHJlYWQgKyBpLCBO
VUxMLCB0ZXN0LCBfY29udGV4dCArIGkpOwotCQlhc3NlcnQociA9PSAwKTsKLQl9Ci0KLQlmb3Ig
KGkgPSAwOyBpIDwgbnRocjsgaSsrKQotCQlwdGhyZWFkX2pvaW4odGhyZWFkW2ldLCBOVUxMKTsK
LQotCXJldHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9ja19yd2NvaG9ydC9iZW5jaG1hcmsvTWFrZWZpbGUgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yd2NvaG9ydC9iZW5j
aG1hcmsvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NGM4NWMwZmFi
ZGM4MjFmODk4MmI5YTdiOTliNTcwYjk1YzBiMDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVn
cmVzc2lvbnMvY2tfcndjb2hvcnQvYmVuY2htYXJrL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAg
LTEsMzIgKzAsMCBAQAotLlBIT05ZOiBjbGVhbiBkaXN0cmlidXRpb24KLQotT0JKRUNUUz1sYXRl
bmN5IHRocm91Z2hwdXQKLU9CSkVDVFM9Y2tfbmV1dHJhbC5USFJPVUdIUFVUIGNrX25ldXRyYWwu
TEFURU5DWQkJXAotCWNrX3JwLlRIUk9VR0hQVVQgY2tfcnAuTEFURU5DWQkJCQlcCi0JY2tfd3Au
VEhST1VHSFBVVCBja193cC5MQVRFTkNZCi0KLWFsbDogJChPQkpFQ1RTKQotCi1ja19uZXV0cmFs
LlRIUk9VR0hQVVQ6IGNrX25ldXRyYWwuYwotCSQoQ0MpIC1EVEhST1VHSFBVVCAkKENGTEFHUykg
LW8gY2tfbmV1dHJhbC5USFJPVUdIUFVUIGNrX25ldXRyYWwuYwotCi1ja19uZXV0cmFsLkxBVEVO
Q1k6IGNrX25ldXRyYWwuYwotCSQoQ0MpIC1ETEFURU5DWSAkKENGTEFHUykgLW8gY2tfbmV1dHJh
bC5MQVRFTkNZIGNrX25ldXRyYWwuYwotCi1ja19ycC5USFJPVUdIUFVUOiBja19ycC5jCi0JJChD
QykgLURUSFJPVUdIUFVUICQoQ0ZMQUdTKSAtbyBja19ycC5USFJPVUdIUFVUIGNrX3JwLmMKLQot
Y2tfcnAuTEFURU5DWTogY2tfcnAuYwotCSQoQ0MpIC1ETEFURU5DWSAkKENGTEFHUykgLW8gY2tf
cnAuTEFURU5DWSBja19ycC5jCi0KLWNrX3dwLlRIUk9VR0hQVVQ6IGNrX3dwLmMKLQkkKENDKSAt
RFRIUk9VR0hQVVQgJChDRkxBR1MpIC1vIGNrX3dwLlRIUk9VR0hQVVQgY2tfd3AuYwotCi1ja193
cC5MQVRFTkNZOiBja193cC5jCi0JJChDQykgLURMQVRFTkNZICQoQ0ZMQUdTKSAtbyBja193cC5M
QVRFTkNZIGNrX3dwLmMKLQotY2xlYW46Ci0Jcm0gLXJmICouZFNZTSAqfiAqLm8gJChPQkpFQ1RT
KQotCi1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxkCi1DRkxBR1MrPSQo
UFRIUkVBRF9DRkxBR1MpIC1EX0dOVV9TT1VSQ0UKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3J3Y29ob3J0L2JlbmNobWFyay9ja19u
ZXV0cmFsLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9j
a19yd2NvaG9ydC9iZW5jaG1hcmsvY2tfbmV1dHJhbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5ZmI4NWRiMmQ1NjliYjFlMGMwZjAzZDE5YzU5NmFjZDI3YWE5YTUxLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3J3Y29ob3J0L2JlbmNobWFyay9ja19uZXV0
cmFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpbmNsdWRlICIuLi9ja19uZXV0
cmFsLmgiCi0KLSNpZmRlZiBUSFJPVUdIUFVUCi0jaW5jbHVkZSAidGhyb3VnaHB1dC5oIgotI2Vs
aWYgZGVmaW5lZChMQVRFTkNZKQotI2luY2x1ZGUgImxhdGVuY3kuaCIKLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcndj
b2hvcnQvYmVuY2htYXJrL2NrX3JwLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19yd2NvaG9ydC9iZW5jaG1hcmsvY2tfcnAuYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNzk4ZTU3ODEwMzBjYTZiYjFhMDg5MWRhNDBhYjllMWUwYWVmNTVi
ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yd2NvaG9ydC9iZW5jaG1h
cmsvY2tfcnAuYworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2luY2x1ZGUgIi4uL2Nr
X3JwLmgiCi0KLSNpZmRlZiBUSFJPVUdIUFVUCi0jaW5jbHVkZSAidGhyb3VnaHB1dC5oIgotI2Vs
aWYgZGVmaW5lZChMQVRFTkNZKQotI2luY2x1ZGUgImxhdGVuY3kuaCIKLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcndj
b2hvcnQvYmVuY2htYXJrL2NrX3dwLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19yd2NvaG9ydC9iZW5jaG1hcmsvY2tfd3AuYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDdiMGNjZWQxNDM2ZjM1YWVjZGJmYzBlMGExMWJmNjI0ZTIwNzAy
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yd2NvaG9ydC9iZW5jaG1h
cmsvY2tfd3AuYworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2luY2x1ZGUgIi4uL2Nr
X3dwLmgiCi0KLSNpZmRlZiBUSFJPVUdIUFVUCi0jaW5jbHVkZSAidGhyb3VnaHB1dC5oIgotI2Vs
aWYgZGVmaW5lZChMQVRFTkNZKQotI2luY2x1ZGUgImxhdGVuY3kuaCIKLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcndj
b2hvcnQvYmVuY2htYXJrL2xhdGVuY3kuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2NrL3JlZ3Jlc3Npb25zL2NrX3J3Y29ob3J0L2JlbmNobWFyay9sYXRlbmN5LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyN2E4YjIwYTUwYTM5MGMxYzg1MjlmMmVjNTRmODNjZmE1
OTYwN2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcndjb2hvcnQvYmVu
Y2htYXJrL2xhdGVuY3kuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IDIwMTMtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQ29weXJpZ2h0IDIwMTMgQnJl
bmRvbiBTY2hlaW5tYW4uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAq
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK
LSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxj
a19yd2NvaG9ydC5oPgotI2luY2x1ZGUgPGNrX3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8aW50dHlw
ZXMuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0K
LSNpZm5kZWYgU1RFUFMKLSNkZWZpbmUgU1RFUFMgMTAwMDAwMAotI2VuZGlmCi0KLXN0YXRpYyB2
b2lkCi1ja19zcGlubG9ja19mYXNfbG9ja193aXRoX2NvbnRleHQoY2tfc3BpbmxvY2tfZmFzX3Qg
KmxvY2ssIHZvaWQgKmNvbnRleHQpCi17Ci0JKHZvaWQpY29udGV4dDsKLQlja19zcGlubG9ja19m
YXNfbG9jayhsb2NrKTsKLX0KLQotc3RhdGljIHZvaWQKLWNrX3NwaW5sb2NrX2Zhc191bmxvY2tf
d2l0aF9jb250ZXh0KGNrX3NwaW5sb2NrX2Zhc190ICpsb2NrLCB2b2lkICpjb250ZXh0KQotewot
CSh2b2lkKWNvbnRleHQ7Ci0JY2tfc3BpbmxvY2tfZmFzX3VubG9jayhsb2NrKTsKLX0KLQotc3Rh
dGljIGJvb2wKLWNrX3NwaW5sb2NrX2Zhc19sb2NrZWRfd2l0aF9jb250ZXh0KGNrX3NwaW5sb2Nr
X2Zhc190ICpsb2NrLCB2b2lkICpjb250ZXh0KQotewotCSh2b2lkKWNvbnRleHQ7Ci0JcmV0dXJu
IGNrX3NwaW5sb2NrX2Zhc19sb2NrZWQobG9jayk7Ci19Ci0KLUNLX0NPSE9SVF9QUk9UT1RZUEUo
ZmFzX2ZhcywKLQlja19zcGlubG9ja19mYXNfbG9ja193aXRoX2NvbnRleHQsIGNrX3NwaW5sb2Nr
X2Zhc191bmxvY2tfd2l0aF9jb250ZXh0LCBja19zcGlubG9ja19mYXNfbG9ja2VkX3dpdGhfY29u
dGV4dCwKLQlja19zcGlubG9ja19mYXNfbG9ja193aXRoX2NvbnRleHQsIGNrX3NwaW5sb2NrX2Zh
c191bmxvY2tfd2l0aF9jb250ZXh0LCBja19zcGlubG9ja19mYXNfbG9ja2VkX3dpdGhfY29udGV4
dCkKLUxPQ0tfUFJPVE9UWVBFKGZhc19mYXMpCi0KLWludAotbWFpbih2b2lkKQotewotCXVpbnQ2
NF90IHNfYiwgZV9iLCBpOwotCWNrX3NwaW5sb2NrX2Zhc190IGdsb2JhbF9sb2NrID0gQ0tfU1BJ
TkxPQ0tfRkFTX0lOSVRJQUxJWkVSOwotCWNrX3NwaW5sb2NrX2Zhc190IGxvY2FsX2xvY2sgPSBD
S19TUElOTE9DS19GQVNfSU5JVElBTElaRVI7Ci0JQ0tfQ09IT1JUX0lOU1RBTkNFKGZhc19mYXMp
IGNvaG9ydCA9IENLX0NPSE9SVF9JTklUSUFMSVpFUjsKLQlMT0NLX0lOU1RBTkNFKGZhc19mYXMp
IHJ3X2NvaG9ydCA9IExPQ0tfSU5JVElBTElaRVI7Ci0KLQlDS19DT0hPUlRfSU5JVChmYXNfZmFz
LCAmY29ob3J0LCAmZ2xvYmFsX2xvY2ssICZsb2NhbF9sb2NrLAotCSAgICBDS19DT0hPUlRfREVG
QVVMVF9MT0NBTF9QQVNTX0xJTUlUKTsKLQlMT0NLX0lOSVQoZmFzX2ZhcywgJnJ3X2NvaG9ydCwg
Q0tfUldDT0hPUlRfV1BfREVGQVVMVF9XQUlUX0xJTUlUKTsKLQotCWZvciAoaSA9IDA7IGkgPCBT
VEVQUzsgaSsrKSB7Ci0JCVdSSVRFX0xPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwgJmNvaG9ydCwg
TlVMTCwgTlVMTCk7Ci0JCVdSSVRFX1VOTE9DSyhmYXNfZmFzLCAmcndfY29ob3J0LCAmY29ob3J0
LCBOVUxMLCBOVUxMKTsKLQl9Ci0KLQlzX2IgPSByZHRzYygpOwotCWZvciAoaSA9IDA7IGkgPCBT
VEVQUzsgaSsrKSB7Ci0JCVdSSVRFX0xPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwgJmNvaG9ydCwg
TlVMTCwgTlVMTCk7Ci0JCVdSSVRFX1VOTE9DSyhmYXNfZmFzLCAmcndfY29ob3J0LCAmY29ob3J0
LCBOVUxMLCBOVUxMKTsKLQl9Ci0JZV9iID0gcmR0c2MoKTsKLQlwcmludGYoIldSSVRFOiByd2xv
Y2sgICAlMTUiIFBSSXU2NCAiXG4iLCAoZV9iIC0gc19iKSAvIFNURVBTKTsKLQotCWZvciAoaSA9
IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0JCVJFQURfTE9DSyhmYXNfZmFzLCAmcndfY29ob3J0LCAm
Y29ob3J0LCBOVUxMLCBOVUxMKTsKLQkJUkVBRF9VTkxPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwg
JmNvaG9ydCwgTlVMTCwgTlVMTCk7Ci0JfQotCi0Jc19iID0gcmR0c2MoKTsKLQlmb3IgKGkgPSAw
OyBpIDwgU1RFUFM7IGkrKykgewotCQlSRUFEX0xPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwgJmNv
aG9ydCwgTlVMTCwgTlVMTCk7Ci0JCVJFQURfVU5MT0NLKGZhc19mYXMsICZyd19jb2hvcnQsICZj
b2hvcnQsIE5VTEwsIE5VTEwpOwotCX0KLQllX2IgPSByZHRzYygpOwotCXByaW50ZigiUkVBRDog
IHJ3bG9jayAgICUxNSIgUFJJdTY0ICJcbiIsIChlX2IgLSBzX2IpIC8gU1RFUFMpOwotCi0JcmV0
dXJuICgwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Y2svcmVncmVzc2lvbnMvY2tfcndjb2hvcnQvYmVuY2htYXJrL3Rocm91Z2hwdXQuaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3J3Y29ob3J0L2JlbmNo
bWFyay90aHJvdWdocHV0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NzA4NTVi
MDgwNzk3NDliMjE5YjJiOWI4MWQyMmZiMDhkMjBlMjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2sv
cmVncmVzc2lvbnMvY2tfcndjb2hvcnQvYmVuY2htYXJrL3Rocm91Z2hwdXQuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTMtMjAxNSBTYW15IEFs
IEJhaHJhLgotICogQ29weXJpZ2h0IDIwMTMgQnJlbmRvbiBTY2hlaW5tYW4uCi0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxja19jb2hvcnQuaD4KLSNpbmNsdWRlIDxja19y
d2NvaG9ydC5oPgotI2luY2x1ZGUgPGNrX3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMu
aD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxz
dGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNs
dWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi0jZGVmaW5lIG1h
eCh4LCB5KSAoKCh4KSA+ICh5KSkgPyAoeCkgOiAoeSkpCi0KLSNpZm5kZWYgU1RFUFMKLSNkZWZp
bmUgU1RFUFMgMTAwMDAwMAotI2VuZGlmCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYmFycmllcjsK
LXN0YXRpYyB1bnNpZ25lZCBpbnQgZmxhZyBDS19DQ19DQUNIRUxJTkU7Ci1zdGF0aWMgc3RydWN0
IGFmZmluaXR5IGFmZmluaXR5Owotc3RhdGljIHVuc2lnbmVkIGludCBudGhyOwotCi1zdGF0aWMg
dm9pZAotY2tfc3BpbmxvY2tfZmFzX2xvY2tfd2l0aF9jb250ZXh0KGNrX3NwaW5sb2NrX2Zhc190
ICpsb2NrLCB2b2lkICpjb250ZXh0KQotewotCi0JKHZvaWQpY29udGV4dDsKLQlja19zcGlubG9j
a19mYXNfbG9jayhsb2NrKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1ja19zcGlubG9j
a19mYXNfdW5sb2NrX3dpdGhfY29udGV4dChja19zcGlubG9ja19mYXNfdCAqbG9jaywgdm9pZCAq
Y29udGV4dCkKLXsKLQotCSh2b2lkKWNvbnRleHQ7Ci0JY2tfc3BpbmxvY2tfZmFzX3VubG9jayhs
b2NrKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBib29sCi1ja19zcGlubG9ja19mYXNfbG9ja2Vk
X3dpdGhfY29udGV4dChja19zcGlubG9ja19mYXNfdCAqbG9jaywgdm9pZCAqY29udGV4dCkKLXsK
LQotCSh2b2lkKWNvbnRleHQ7Ci0JcmV0dXJuIGNrX3NwaW5sb2NrX2Zhc19sb2NrZWQobG9jayk7
Ci19Ci0KLUNLX0NPSE9SVF9QUk9UT1RZUEUoZmFzX2ZhcywKLSAgICBja19zcGlubG9ja19mYXNf
bG9ja193aXRoX2NvbnRleHQsIGNrX3NwaW5sb2NrX2Zhc191bmxvY2tfd2l0aF9jb250ZXh0LCBj
a19zcGlubG9ja19mYXNfbG9ja2VkX3dpdGhfY29udGV4dCwKLSAgICBja19zcGlubG9ja19mYXNf
bG9ja193aXRoX2NvbnRleHQsIGNrX3NwaW5sb2NrX2Zhc191bmxvY2tfd2l0aF9jb250ZXh0LCBj
a19zcGlubG9ja19mYXNfbG9ja2VkX3dpdGhfY29udGV4dCkKLUxPQ0tfUFJPVE9UWVBFKGZhc19m
YXMpCi0KLXN0cnVjdCBjb2hvcnRfcmVjb3JkIHsKLQlDS19DT0hPUlRfSU5TVEFOQ0UoZmFzX2Zh
cykgY29ob3J0OwotfSBDS19DQ19DQUNIRUxJTkU7Ci1zdGF0aWMgc3RydWN0IGNvaG9ydF9yZWNv
cmQgKmNvaG9ydHM7Ci0KLXN0YXRpYyBja19zcGlubG9ja190IGdsb2JhbF9sb2NrID0gQ0tfU1BJ
TkxPQ0tfSU5JVElBTElaRVI7Ci1zdGF0aWMgTE9DS19JTlNUQU5DRShmYXNfZmFzKSByd19jb2hv
cnQgPSBMT0NLX0lOSVRJQUxJWkVSOwotc3RhdGljIHVuc2lnbmVkIGludCBuX2NvaG9ydHM7Ci0K
LXN0cnVjdCBibG9jayB7Ci0JdW5zaWduZWQgaW50IHRpZDsKLX07Ci0KLXN0YXRpYyB2b2lkICoK
LXRocmVhZF9yd2xvY2sodm9pZCAqcHVuKQotewotCXVpbnQ2NF90IHNfYiwgZV9iLCBhLCBpOwot
CXVpbnQ2NF90ICp2YWx1ZSA9IHB1bjsKLQlDS19DT0hPUlRfSU5TVEFOQ0UoZmFzX2ZhcykgKmNv
aG9ydDsKLQl1bnNpZ25lZCBpbnQgY29yZTsKLQotCWlmIChhZmZfaXRlcmF0ZV9jb3JlKCZhZmZp
bml0eSwgJmNvcmUpICE9IDApIHsKLQkJcGVycm9yKCJFUlJPUjogQ291bGQgbm90IGFmZmluZSB0
aHJlYWQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWNvaG9ydCA9ICYoKGNvaG9y
dHMgKyAoY29yZSAvIChpbnQpKGFmZmluaXR5LmRlbHRhKSkgJSBuX2NvaG9ydHMpLT5jb2hvcnQp
OwotCi0JY2tfcHJfaW5jX3VpbnQoJmJhcnJpZXIpOwotCXdoaWxlIChja19wcl9sb2FkX3VpbnQo
JmJhcnJpZXIpICE9IG50aHIpCi0JCWNrX3ByX3N0YWxsKCk7Ci0KLQlmb3IgKGkgPSAxLCBhID0g
MDs7IGkrKykgewotCQlzX2IgPSByZHRzYygpOwotCQlSRUFEX0xPQ0soZmFzX2ZhcywgJnJ3X2Nv
aG9ydCwgY29ob3J0LCBOVUxMLCBOVUxMKTsKLQkJUkVBRF9VTkxPQ0soZmFzX2ZhcywgJnJ3X2Nv
aG9ydCwgY29ob3J0LCBOVUxMLCBOVUxMKTsKLQkJUkVBRF9MT0NLKGZhc19mYXMsICZyd19jb2hv
cnQsIGNvaG9ydCwgTlVMTCwgTlVMTCk7Ci0JCVJFQURfVU5MT0NLKGZhc19mYXMsICZyd19jb2hv
cnQsIGNvaG9ydCwgTlVMTCwgTlVMTCk7Ci0JCVJFQURfTE9DSyhmYXNfZmFzLCAmcndfY29ob3J0
LCBjb2hvcnQsIE5VTEwsIE5VTEwpOwotCQlSRUFEX1VOTE9DSyhmYXNfZmFzLCAmcndfY29ob3J0
LCBjb2hvcnQsIE5VTEwsIE5VTEwpOwotCQlSRUFEX0xPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwg
Y29ob3J0LCBOVUxMLCBOVUxMKTsKLQkJUkVBRF9VTkxPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwg
Y29ob3J0LCBOVUxMLCBOVUxMKTsKLQkJUkVBRF9MT0NLKGZhc19mYXMsICZyd19jb2hvcnQsIGNv
aG9ydCwgTlVMTCwgTlVMTCk7Ci0JCVJFQURfVU5MT0NLKGZhc19mYXMsICZyd19jb2hvcnQsIGNv
aG9ydCwgTlVMTCwgTlVMTCk7Ci0JCVJFQURfTE9DSyhmYXNfZmFzLCAmcndfY29ob3J0LCBjb2hv
cnQsIE5VTEwsIE5VTEwpOwotCQlSRUFEX1VOTE9DSyhmYXNfZmFzLCAmcndfY29ob3J0LCBjb2hv
cnQsIE5VTEwsIE5VTEwpOwotCQlSRUFEX0xPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwgY29ob3J0
LCBOVUxMLCBOVUxMKTsKLQkJUkVBRF9VTkxPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwgY29ob3J0
LCBOVUxMLCBOVUxMKTsKLQkJUkVBRF9MT0NLKGZhc19mYXMsICZyd19jb2hvcnQsIGNvaG9ydCwg
TlVMTCwgTlVMTCk7Ci0JCVJFQURfVU5MT0NLKGZhc19mYXMsICZyd19jb2hvcnQsIGNvaG9ydCwg
TlVMTCwgTlVMTCk7Ci0JCVJFQURfTE9DSyhmYXNfZmFzLCAmcndfY29ob3J0LCBjb2hvcnQsIE5V
TEwsIE5VTEwpOwotCQlSRUFEX1VOTE9DSyhmYXNfZmFzLCAmcndfY29ob3J0LCBjb2hvcnQsIE5V
TEwsIE5VTEwpOwotCQlSRUFEX0xPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwgY29ob3J0LCBOVUxM
LCBOVUxMKTsKLQkJUkVBRF9VTkxPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwgY29ob3J0LCBOVUxM
LCBOVUxMKTsKLQkJUkVBRF9MT0NLKGZhc19mYXMsICZyd19jb2hvcnQsIGNvaG9ydCwgTlVMTCwg
TlVMTCk7Ci0JCVJFQURfVU5MT0NLKGZhc19mYXMsICZyd19jb2hvcnQsIGNvaG9ydCwgTlVMTCwg
TlVMTCk7Ci0JCVJFQURfTE9DSyhmYXNfZmFzLCAmcndfY29ob3J0LCBjb2hvcnQsIE5VTEwsIE5V
TEwpOwotCQlSRUFEX1VOTE9DSyhmYXNfZmFzLCAmcndfY29ob3J0LCBjb2hvcnQsIE5VTEwsIE5V
TEwpOwotCQlSRUFEX0xPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwgY29ob3J0LCBOVUxMLCBOVUxM
KTsKLQkJUkVBRF9VTkxPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwgY29ob3J0LCBOVUxMLCBOVUxM
KTsKLQkJUkVBRF9MT0NLKGZhc19mYXMsICZyd19jb2hvcnQsIGNvaG9ydCwgTlVMTCwgTlVMTCk7
Ci0JCVJFQURfVU5MT0NLKGZhc19mYXMsICZyd19jb2hvcnQsIGNvaG9ydCwgTlVMTCwgTlVMTCk7
Ci0JCVJFQURfTE9DSyhmYXNfZmFzLCAmcndfY29ob3J0LCBjb2hvcnQsIE5VTEwsIE5VTEwpOwot
CQlSRUFEX1VOTE9DSyhmYXNfZmFzLCAmcndfY29ob3J0LCBjb2hvcnQsIE5VTEwsIE5VTEwpOwot
CQlSRUFEX0xPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwgY29ob3J0LCBOVUxMLCBOVUxMKTsKLQkJ
UkVBRF9VTkxPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwgY29ob3J0LCBOVUxMLCBOVUxMKTsKLQkJ
ZV9iID0gcmR0c2MoKTsKLQotCQlhICs9IChlX2IgLSBzX2IpID4+IDQ7Ci0KLQkJaWYgKGNrX3By
X2xvYWRfdWludCgmZmxhZykgPT0gMSkKLQkJCWJyZWFrOwotCX0KLQotCWNrX3ByX2luY191aW50
KCZiYXJyaWVyKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZiYXJyaWVyKSAhPSBudGhyICog
MikKLQkJY2tfcHJfc3RhbGwoKTsKLQotCSp2YWx1ZSA9IChhIC8gaSk7Ci0JcmV0dXJuIE5VTEw7
Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCXVuc2lnbmVkIGlu
dCBpOwotCXB0aHJlYWRfdCAqdGhyZWFkczsKLQl1aW50NjRfdCAqbGF0ZW5jeTsKLQlzdHJ1Y3Qg
YmxvY2sgKmNvbnRleHQ7Ci0JY2tfc3BpbmxvY2tfZmFzX3QgKmxvY2FsX2xvY2s7Ci0KLQlpZiAo
YXJnYyAhPSA0KSB7Ci0JCWNrX2Vycm9yKCJVc2FnZTogdGhyb3VnaHB1dCA8bnVtYmVyIG9mIGNv
aG9ydHM+IDx0aHJlYWRzIHBlciBjb2hvcnQ+IDxhZmZpbml0eSBkZWx0YT5cbiIpOwotCX0KLQot
CW5fY29ob3J0cyA9IGF0b2koYXJndlsxXSk7Ci0JaWYgKG5fY29ob3J0cyA8PSAwKSB7Ci0JCWNr
X2Vycm9yKCJFUlJPUjogTnVtYmVyIG9mIGNvaG9ydHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFxu
Iik7Ci0JfQotCi0JbnRociA9IG5fY29ob3J0cyAqIGF0b2koYXJndlsyXSk7Ci0JaWYgKG50aHIg
PD0gMCkgewotCQlja19lcnJvcigiRVJST1I6IE51bWJlciBvZiB0aHJlYWRzIG11c3QgYmUgZ3Jl
YXRlciB0aGFuIDBcbiIpOwotCX0KLQotCXRocmVhZHMgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRf
dCkgKiBudGhyKTsKLQlpZiAodGhyZWFkcyA9PSBOVUxMKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjog
Q291bGQgbm90IGFsbG9jYXRlIHRocmVhZCBzdHJ1Y3R1cmVzXG4iKTsKLQl9Ci0KLQljb2hvcnRz
ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29ob3J0X3JlY29yZCkgKiBuX2NvaG9ydHMpOwotCWlm
IChjb2hvcnRzID09IE5VTEwpIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2Nh
dGUgY29ob3J0IHN0cnVjdHVyZXNcbiIpOwotCX0KLQotCWNvbnRleHQgPSBtYWxsb2Moc2l6ZW9m
KHN0cnVjdCBibG9jaykgKiBudGhyKTsKLQlpZiAoY29udGV4dCA9PSBOVUxMKSB7Ci0JCWNrX2Vy
cm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIHRocmVhZCBjb250ZXh0c1xuIik7Ci0JfQot
Ci0JYWZmaW5pdHkuZGVsdGEgPSBhdG9pKGFyZ3ZbM10pOwotCWFmZmluaXR5LnJlcXVlc3QgPSAw
OwotCi0JbGF0ZW5jeSA9IG1hbGxvYyhzaXplb2YoKmxhdGVuY3kpICogbnRocik7Ci0JaWYgKGxh
dGVuY3kgPT0gTlVMTCkgewotCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBjcmVhdGUgbGF0
ZW5jeSBidWZmZXJcbiIpOwotCX0KLQltZW1zZXQobGF0ZW5jeSwgMCwgc2l6ZW9mKCpsYXRlbmN5
KSAqIG50aHIpOwotCi0JZnByaW50ZihzdGRlcnIsICJDcmVhdGluZyBjb2hvcnRzLi4uIik7Ci0J
Zm9yIChpID0gMCA7IGkgPCBuX2NvaG9ydHMgOyBpKyspIHsKLQkJbG9jYWxfbG9jayA9IG1hbGxv
YyhtYXgoQ0tfTURfQ0FDSEVMSU5FLCBzaXplb2YoY2tfc3BpbmxvY2tfZmFzX3QpKSk7Ci0JCWlm
IChsb2NhbF9sb2NrID09IE5VTEwpIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFs
bG9jYXRlIGxvY2FsIGxvY2tcbiIpOwotCQl9Ci0JCUNLX0NPSE9SVF9JTklUKGZhc19mYXMsICYo
KGNvaG9ydHMgKyBpKS0+Y29ob3J0KSwgJmdsb2JhbF9sb2NrLCBsb2NhbF9sb2NrLAotCQkgICAg
Q0tfQ09IT1JUX0RFRkFVTFRfTE9DQUxfUEFTU19MSU1JVCk7Ci0JCWxvY2FsX2xvY2sgPSBOVUxM
OwotCX0KLQlmcHJpbnRmKHN0ZGVyciwgImRvbmVcbiIpOwotCi0JZnByaW50ZihzdGRlcnIsICJD
cmVhdGluZyB0aHJlYWRzIChyd2xvY2spLi4uIik7Ci0JZm9yIChpID0gMDsgaSA8IG50aHI7IGkr
KykgewotCQlpZiAocHRocmVhZF9jcmVhdGUoJnRocmVhZHNbaV0sIE5VTEwsIHRocmVhZF9yd2xv
Y2ssIGxhdGVuY3kgKyBpKSAhPSAwKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBj
cmVhdGUgdGhyZWFkICVkXG4iLCBpKTsKLQkJfQotCX0KLQlmcHJpbnRmKHN0ZGVyciwgImRvbmVc
biIpOwotCi0JY29tbW9uX3NsZWVwKDEwKTsKLQlja19wcl9zdG9yZV91aW50KCZmbGFnLCAxKTsK
LQotCWZwcmludGYoc3RkZXJyLCAiV2FpdGluZyBmb3IgdGhyZWFkcyB0byBmaW5pc2ggYWNxdWlz
aXRpb24gcmVncmVzc2lvbi4uLiIpOwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspCi0JCXB0
aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsKLQlmcHJpbnRmKHN0ZGVyciwgImRvbmVcblxu
Iik7Ci0KLQlmb3IgKGkgPSAxOyBpIDw9IG50aHI7IGkrKykKLQkJcHJpbnRmKCIlMTB1ICUyMCIg
UFJJdTY0ICJcbiIsIGksIGxhdGVuY3lbaSAtIDFdKTsKLQotCXJldHVybiAoMCk7Ci19Ci0KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X3J3Y29ob3J0L2NrX25ldXRyYWwuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L3JlZ3Jlc3Npb25zL2NrX3J3Y29ob3J0L2NrX25ldXRyYWwuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZGJiZGE5ZDQ5ZDM1Yzk1ZmExMDNhYTU0NGY1MDdjNzYyNjk1NGU3OC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yd2NvaG9ydC9ja19uZXV0cmFsLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNkZWZpbmUgTE9DS19QUk9UT1RZUEUgQ0tf
UldDT0hPUlRfTkVVVFJBTF9QUk9UT1RZUEUKLSNkZWZpbmUgTE9DS19JTlNUQU5DRSBDS19SV0NP
SE9SVF9ORVVUUkFMX0lOU1RBTkNFCi0jZGVmaW5lIExPQ0tfSU5JVElBTElaRVIgQ0tfUldDT0hP
UlRfTkVVVFJBTF9JTklUSUFMSVpFUgotI2RlZmluZSBMT0NLX0lOSVQoTiwgQywgVykgQ0tfUldD
T0hPUlRfTkVVVFJBTF9JTklUKE4sIEMpCi0jZGVmaW5lIFJFQURfTE9DSyBDS19SV0NPSE9SVF9O
RVVUUkFMX1JFQURfTE9DSwotI2RlZmluZSBXUklURV9MT0NLIENLX1JXQ09IT1JUX05FVVRSQUxf
V1JJVEVfTE9DSwotI2RlZmluZSBSRUFEX1VOTE9DSyBDS19SV0NPSE9SVF9ORVVUUkFMX1JFQURf
VU5MT0NLCi0jZGVmaW5lIFdSSVRFX1VOTE9DSyBDS19SV0NPSE9SVF9ORVVUUkFMX1dSSVRFX1VO
TE9DSwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVz
c2lvbnMvY2tfcndjb2hvcnQvY2tfcnAuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2NrL3JlZ3Jlc3Npb25zL2NrX3J3Y29ob3J0L2NrX3JwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGUyMGYzZDJkNmIzOWI5NDhhZGIwY2FlMWQ0Zjk4MjRmOGJjZTMzZmYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcndjb2hvcnQvY2tfcnAuaAorKysgL2Rl
di9udWxsCkBAIC0xLDggKzAsMCBAQAotI2RlZmluZSBMT0NLX1BST1RPVFlQRSBDS19SV0NPSE9S
VF9SUF9QUk9UT1RZUEUKLSNkZWZpbmUgTE9DS19JTlNUQU5DRSBDS19SV0NPSE9SVF9SUF9JTlNU
QU5DRQotI2RlZmluZSBMT0NLX0lOSVRJQUxJWkVSIENLX1JXQ09IT1JUX1JQX0lOSVRJQUxJWkVS
Ci0jZGVmaW5lIExPQ0tfSU5JVCBDS19SV0NPSE9SVF9SUF9JTklUCi0jZGVmaW5lIFJFQURfTE9D
SyBDS19SV0NPSE9SVF9SUF9SRUFEX0xPQ0sKLSNkZWZpbmUgUkVBRF9VTkxPQ0sgQ0tfUldDT0hP
UlRfUlBfUkVBRF9VTkxPQ0sKLSNkZWZpbmUgV1JJVEVfTE9DSyBDS19SV0NPSE9SVF9SUF9XUklU
RV9MT0NLCi0jZGVmaW5lIFdSSVRFX1VOTE9DSyBDS19SV0NPSE9SVF9SUF9XUklURV9VTkxPQ0sK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25z
L2NrX3J3Y29ob3J0L2NrX3dwLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9y
ZWdyZXNzaW9ucy9ja19yd2NvaG9ydC9ja193cC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1NTZjN2RmZGE3NjJjZGEwY2RjNGZkZTgwNjMyMTI3ZTEwMmFmZGU3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3J3Y29ob3J0L2NrX3dwLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4ICswLDAgQEAKLSNkZWZpbmUgTE9DS19QUk9UT1RZUEUgQ0tfUldDT0hPUlRfV1Bf
UFJPVE9UWVBFCi0jZGVmaW5lIExPQ0tfSU5TVEFOQ0UgQ0tfUldDT0hPUlRfV1BfSU5TVEFOQ0UK
LSNkZWZpbmUgTE9DS19JTklUSUFMSVpFUiBDS19SV0NPSE9SVF9XUF9JTklUSUFMSVpFUgotI2Rl
ZmluZSBMT0NLX0lOSVQgQ0tfUldDT0hPUlRfV1BfSU5JVAotI2RlZmluZSBSRUFEX0xPQ0sgQ0tf
UldDT0hPUlRfV1BfUkVBRF9MT0NLCi0jZGVmaW5lIFdSSVRFX0xPQ0sgQ0tfUldDT0hPUlRfV1Bf
V1JJVEVfTE9DSwotI2RlZmluZSBSRUFEX1VOTE9DSyBDS19SV0NPSE9SVF9XUF9SRUFEX1VOTE9D
SwotI2RlZmluZSBXUklURV9VTkxPQ0sgQ0tfUldDT0hPUlRfV1BfV1JJVEVfVU5MT0NLCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19y
d2NvaG9ydC92YWxpZGF0ZS9NYWtlZmlsZSBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2NrL3JlZ3Jlc3Npb25zL2NrX3J3Y29ob3J0L3ZhbGlkYXRlL01ha2VmaWxlCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzM2UzYTI5ZjkzZWY3OWUwODNiODZjYjBmNjM4MGI0MzBiYTBj
YmQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3J3Y29ob3J0L3ZhbGlk
YXRlL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLlBIT05ZOiBjaGVj
ayBjbGVhbiBkaXN0cmlidXRpb24KLQotT0JKRUNUUz1ja19uZXV0cmFsIGNrX3JwIGNrX3dwCi0K
LWFsbDogJChPQkpFQ1RTKQotCi1ja19uZXV0cmFsOiBja19uZXV0cmFsLmMgLi4vLi4vLi4vaW5j
bHVkZS9ja19yd2NvaG9ydC5oCi0JJChDQykgJChDRkxBR1MpIC1vIGNrX25ldXRyYWwgY2tfbmV1
dHJhbC5jCi0KLWNrX3JwOiBja19ycC5jIC4uLy4uLy4uL2luY2x1ZGUvY2tfcndjb2hvcnQuaAot
CSQoQ0MpICQoQ0ZMQUdTKSAtbyBja19ycCBja19ycC5jCi0KLWNrX3dwOiBja193cC5jIC4uLy4u
Ly4uL2luY2x1ZGUvY2tfcndjb2hvcnQuaAotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBja193cCBja193
cC5jCi0KLWNoZWNrOiBhbGwKLQkuL2NrX25ldXRyYWwgYGV4cHIgJChDT1JFUykgLyAyYCAyIDEK
LQkuL2NrX3JwIGBleHByICQoQ09SRVMpIC8gMmAgMiAxCi0JLi9ja193cCBgZXhwciAkKENPUkVT
KSAvIDJgIDIgMQotCi1jbGVhbjoKLQlybSAtcmYgKi5kU1lNICp+ICoubyAkKE9CSkVDVFMpCi0K
LWluY2x1ZGUgLi4vLi4vLi4vYnVpbGQvcmVncmVzc2lvbnMuYnVpbGQKLUNGTEFHUys9JChQVEhS
RUFEX0NGTEFHUykgLURfR05VX1NPVVJDRQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcndjb2hvcnQvdmFsaWRhdGUvY2tfbmV1dHJh
bC5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcndj
b2hvcnQvdmFsaWRhdGUvY2tfbmV1dHJhbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3ODg0ZGM1MDM3NGI4YmI0NDA3MTMzNmMyMjkzM2VjYzQxZDkzMTJkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3J3Y29ob3J0L3ZhbGlkYXRlL2NrX25ldXRyYWwuYwor
KysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotI2luY2x1ZGUgIi4uL2NrX25ldXRyYWwuaCIK
LSNpbmNsdWRlICJ2YWxpZGF0ZS5oIgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcndjb2hvcnQvdmFsaWRhdGUvY2tfcnAuYyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3J3Y29ob3J0L3Zh
bGlkYXRlL2NrX3JwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2M2U5ZDUxNTQw
ODY2OTY2MDZkMTY0YzU0MDhlZjEwN2VjMjI1MDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVn
cmVzc2lvbnMvY2tfcndjb2hvcnQvdmFsaWRhdGUvY2tfcnAuYworKysgL2Rldi9udWxsCkBAIC0x
LDIgKzAsMCBAQAotI2luY2x1ZGUgIi4uL2NrX3JwLmgiCi0jaW5jbHVkZSAidmFsaWRhdGUuaCIK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25z
L2NrX3J3Y29ob3J0L3ZhbGlkYXRlL2NrX3dwLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9ja19yd2NvaG9ydC92YWxpZGF0ZS9ja193cC5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODliZTM1YWM1NjJjZDIxY2MyYzNlNDRjMDg0YzRkZDA1
MTBmYTUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3J3Y29ob3J0L3Zh
bGlkYXRlL2NrX3dwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSNpbmNsdWRlICIu
Li9ja193cC5oIgotI2luY2x1ZGUgInZhbGlkYXRlLmgiCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yd2NvaG9ydC92YWxpZGF0ZS92
YWxpZGF0ZS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfcndjb2hvcnQvdmFsaWRhdGUvdmFsaWRhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOGJjOWE4ODdmMjhmY2FkNTQyZjMyY2Y1OWMyMGMyN2U2YWRkNzU1YS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yd2NvaG9ydC92YWxpZGF0ZS92YWxpZGF0ZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMy0y
MDE1IFNhbXkgQWwgQmFocmEuCi0gKiBDb3B5dGhpbmcgMjAxMyBCcmVuZG9uIFNjaGVpbm1hbi4K
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
LSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
Ci0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVk
ZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgot
I2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGli
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUg
PHN5cy90aW1lLmg+Ci0KLSNpbmNsdWRlIDxja19wci5oPgotI2luY2x1ZGUgPGNrX3J3Y29ob3J0
Lmg+Ci0jaW5jbHVkZSA8Y2tfc3BpbmxvY2suaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5o
IgotCi0jaWZuZGVmIElURVJBVEUKLSNkZWZpbmUgSVRFUkFURSAxMDAwMDAwCi0jZW5kaWYKLQot
Ci1zdGF0aWMgc3RydWN0IGFmZmluaXR5IGE7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGxvY2tlZDsK
LXN0YXRpYyBpbnQgbnRocjsKLXN0YXRpYyBja19zcGlubG9ja19mYXNfdCBnbG9iYWxfZmFzX2xv
Y2sgPSBDS19TUElOTE9DS19GQVNfSU5JVElBTElaRVI7Ci0KLXN0YXRpYyB2b2lkCi1ja19zcGlu
bG9ja19mYXNfbG9ja193aXRoX2NvbnRleHQoY2tfc3BpbmxvY2tfZmFzX3QgKmxvY2ssIHZvaWQg
KmNvbnRleHQpCi17Ci0JKHZvaWQpY29udGV4dDsKLQlja19zcGlubG9ja19mYXNfbG9jayhsb2Nr
KTsKLX0KLQotc3RhdGljIHZvaWQKLWNrX3NwaW5sb2NrX2Zhc191bmxvY2tfd2l0aF9jb250ZXh0
KGNrX3NwaW5sb2NrX2Zhc190ICpsb2NrLCB2b2lkICpjb250ZXh0KQotewotCSh2b2lkKWNvbnRl
eHQ7Ci0JY2tfc3BpbmxvY2tfZmFzX3VubG9jayhsb2NrKTsKLX0KLQotc3RhdGljIGJvb2wKLWNr
X3NwaW5sb2NrX2Zhc19sb2NrZWRfd2l0aF9jb250ZXh0KGNrX3NwaW5sb2NrX2Zhc190ICpsb2Nr
LCB2b2lkICpjb250ZXh0KQotewotCSh2b2lkKWNvbnRleHQ7Ci0JcmV0dXJuIGNrX3NwaW5sb2Nr
X2Zhc19sb2NrZWQobG9jayk7Ci19Ci0KLUNLX0NPSE9SVF9QUk9UT1RZUEUoZmFzX2ZhcywKLQlj
a19zcGlubG9ja19mYXNfbG9ja193aXRoX2NvbnRleHQsIGNrX3NwaW5sb2NrX2Zhc191bmxvY2tf
d2l0aF9jb250ZXh0LCBja19zcGlubG9ja19mYXNfbG9ja2VkX3dpdGhfY29udGV4dCwKLQlja19z
cGlubG9ja19mYXNfbG9ja193aXRoX2NvbnRleHQsIGNrX3NwaW5sb2NrX2Zhc191bmxvY2tfd2l0
aF9jb250ZXh0LCBja19zcGlubG9ja19mYXNfbG9ja2VkX3dpdGhfY29udGV4dCkKLUxPQ0tfUFJP
VE9UWVBFKGZhc19mYXMpCi0KLXN0YXRpYyBDS19DT0hPUlRfSU5TVEFOQ0UoZmFzX2ZhcykgKmNv
aG9ydHM7Ci1zdGF0aWMgTE9DS19JTlNUQU5DRShmYXNfZmFzKSByd19jb2hvcnQgPSBMT0NLX0lO
SVRJQUxJWkVSOwotc3RhdGljIGludCBuX2NvaG9ydHM7Ci0KLXN0YXRpYyB2b2lkICoKLXRocmVh
ZCh2b2lkICpudWxsIENLX0NDX1VOVVNFRCkKLXsKLSAgICAgICAgaW50IGkgPSBJVEVSQVRFOwot
CXVuc2lnbmVkIGludCBsOwotCXVuc2lnbmVkIGludCBjb3JlOwotCUNLX0NPSE9SVF9JTlNUQU5D
RShmYXNfZmFzKSAqY29ob3J0OwotCi0JaWYgKGFmZl9pdGVyYXRlX2NvcmUoJmEsICZjb3JlKSkg
ewotCQlwZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWZmaW5lIHRocmVhZCIpOwotCQlleGl0KEVY
SVRfRkFJTFVSRSk7Ci0JfQotCi0JY29ob3J0ID0gY29ob3J0cyArIChjb3JlIC8gKGludCkoYS5k
ZWx0YSkpICUgbl9jb2hvcnRzOwotCi0Jd2hpbGUgKGktLSkgewotICAgICAgICAgICAgICAgIFdS
SVRFX0xPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwgY29ob3J0LCBOVUxMLCBOVUxMKTsKLQkJewot
CQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9ja2VkKTsKLQkJCWlmIChsICE9IDApIHsKLQkJCQlj
a19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUgIT0gMFxuIiwgX19MSU5FX18sIGwpOwotCQkJfQot
Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQp
OwotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2Vk
KTsKLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tl
ZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZsb2Nr
ZWQpOwotCi0JCQlsID0gY2tfcHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQkJaWYgKGwgIT0gOCkg
ewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbV1I6JWRdOiAldSAhPSAyXG4iLCBfX0xJTkVfXywgbCk7
Ci0JCQl9Ci0KLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQo
JmxvY2tlZCk7Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191aW50
KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9kZWNfdWlu
dCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3Vp
bnQoJmxvY2tlZCk7Ci0KLQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0JCQlpZiAo
bCAhPSAwKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDBcbiIsIF9fTElO
RV9fLCBsKTsKLQkJCX0KLQkJfQotCQlXUklURV9VTkxPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwg
Y29ob3J0LCBOVUxMLCBOVUxMKTsKLQotCQlSRUFEX0xPQ0soZmFzX2ZhcywgJnJ3X2NvaG9ydCwg
Y29ob3J0LCBOVUxMLCBOVUxMKTsKLQkJewotCQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9ja2Vk
KTsKLQkJCWlmIChsICE9IDApIHsKLQkJCQlja19lcnJvcigiRVJST1IgW1JEOiVkXTogJXUgIT0g
MFxuIiwgX19MSU5FX18sIGwpOwotCQkJfQotCQl9Ci0JCVJFQURfVU5MT0NLKGZhc19mYXMsICZy
d19jb2hvcnQsIGNvaG9ydCwgTlVMTCwgTlVMTCk7Ci0JfQotCi0JcmV0dXJuIChOVUxMKTsKLX0K
LQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JcHRocmVhZF90ICp0aHJl
YWRzOwotCWludCB0aHJlYWRzX3Blcl9jb2hvcnQ7Ci0JY2tfc3BpbmxvY2tfZmFzX3QgKmxvY2Fs
X2xvY2s7Ci0JaW50IGk7Ci0KLQlpZiAoYXJnYyAhPSA0KSB7Ci0JCWNrX2Vycm9yKCJVc2FnZTog
dmFsaWRhdGUgPG51bWJlciBvZiBjb2hvcnRzPiA8dGhyZWFkcyBwZXIgY29ob3J0PiA8YWZmaW5p
dHkgZGVsdGE+XG4iKTsKLQl9Ci0KLQluX2NvaG9ydHMgPSBhdG9pKGFyZ3ZbMV0pOwotCWlmIChu
X2NvaG9ydHMgPD0gMCkgewotCQlja19lcnJvcigiRVJST1I6IE51bWJlciBvZiBjb2hvcnRzIG11
c3QgYmUgZ3JlYXRlciB0aGFuIDBcbiIpOwotCX0KLQotCXRocmVhZHNfcGVyX2NvaG9ydCA9IGF0
b2koYXJndlsyXSk7Ci0JaWYgKHRocmVhZHNfcGVyX2NvaG9ydCA8PSAwKSB7Ci0JCWNrX2Vycm9y
KCJFUlJPUjogVGhyZWFkcyBwZXIgY29ob3J0IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcbiIpOwot
CX0KLQotCW50aHIgPSBuX2NvaG9ydHMgKiB0aHJlYWRzX3Blcl9jb2hvcnQ7Ci0KLQl0aHJlYWRz
ID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocik7Ci0JaWYgKHRocmVhZHMgPT0gTlVM
TCkgewotCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSB0aHJlYWQgc3RydWN0
dXJlc1xuIik7Ci0JfQotCi0JYS5kZWx0YSA9IGF0b2koYXJndlszXSk7Ci0KLQlmcHJpbnRmKHN0
ZGVyciwgIkNyZWF0aW5nIGNvaG9ydHMuLi4iKTsKLQljb2hvcnRzID0gbWFsbG9jKHNpemVvZihD
S19DT0hPUlRfSU5TVEFOQ0UoZmFzX2ZhcykpICogbl9jb2hvcnRzKTsKLQlpZiAoY29ob3J0cyA9
PSBOVUxMKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIGJhc2UgY29o
b3J0IHN0cnVjdHVyZXNcbiIpOwotCX0KLQlmb3IgKGkgPSAwIDsgaSA8IG5fY29ob3J0cyA7IGkr
KykgewotCQlsb2NhbF9sb2NrID0gbWFsbG9jKHNpemVvZihja19zcGlubG9ja19mYXNfdCkpOwot
CQlDS19DT0hPUlRfSU5JVChmYXNfZmFzLCBjb2hvcnRzICsgaSwgJmdsb2JhbF9mYXNfbG9jaywg
bG9jYWxfbG9jaywKLQkJICAgIENLX0NPSE9SVF9ERUZBVUxUX0xPQ0FMX1BBU1NfTElNSVQpOwot
CX0KLQlmcHJpbnRmKHN0ZGVyciwgImRvbmVcbiIpOwotCi0JZnByaW50ZihzdGRlcnIsICJDcmVh
dGluZyB0aHJlYWRzLi4uIik7Ci0JZm9yIChpID0gMDsgaSA8IG50aHI7IGkrKykgewotCQlpZiAo
cHRocmVhZF9jcmVhdGUoJnRocmVhZHNbaV0sIE5VTEwsIHRocmVhZCwgTlVMTCkpIHsKLQkJCWNr
X2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGNyZWF0ZSB0aHJlYWQgJWRcbiIsIGkpOwotCQl9Ci0J
fQotCWZwcmludGYoc3RkZXJyLCAiZG9uZVxuIik7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIldhaXRp
bmcgZm9yIHRocmVhZHMgdG8gZmluaXNoIGNvcnJlY3RuZXNzIHJlZ3Jlc3Npb24uLi4iKTsKLQlm
b3IgKGkgPSAwOyBpIDwgbnRocjsgaSsrKQotCQlwdGhyZWFkX2pvaW4odGhyZWFkc1tpXSwgTlVM
TCk7Ci0JZnByaW50ZihzdGRlcnIsICJkb25lIChwYXNzZWQpXG4iKTsKLQotCXJldHVybiAoMCk7
Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jl
c3Npb25zL2NrX3J3bG9jay9iZW5jaG1hcmsvTWFrZWZpbGUgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yd2xvY2svYmVuY2htYXJrL01ha2VmaWxlCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDYzNTA0MDAzMmYwOTI5NDc1MGNiMTM4OTYz
NjZhYTAxNmMxODMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3J3bG9j
ay9iZW5jaG1hcmsvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0uUEhP
Tlk6IGNsZWFuIGRpc3RyaWJ1dGlvbgotCi1PQkpFQ1RTPWxhdGVuY3kgdGhyb3VnaHB1dAotCi1h
bGw6ICQoT0JKRUNUUykKLQotbGF0ZW5jeTogbGF0ZW5jeS5jIC4uLy4uLy4uL2luY2x1ZGUvY2tf
cndsb2NrLmggLi4vLi4vLi4vaW5jbHVkZS9ja19lbGlkZS5oCi0JJChDQykgJChDRkxBR1MpIC1v
IGxhdGVuY3kgbGF0ZW5jeS5jCi0KLXRocm91Z2hwdXQ6IHRocm91Z2hwdXQuYyAuLi8uLi8uLi9p
bmNsdWRlL2NrX3J3bG9jay5oIC4uLy4uLy4uL2luY2x1ZGUvY2tfZWxpZGUuaAotCSQoQ0MpICQo
Q0ZMQUdTKSAtbyB0aHJvdWdocHV0IHRocm91Z2hwdXQuYwotCi1jbGVhbjoKLQlybSAtcmYgKi5k
U1lNICouZXhlICp+ICoubyAkKE9CSkVDVFMpCi0KLWluY2x1ZGUgLi4vLi4vLi4vYnVpbGQvcmVn
cmVzc2lvbnMuYnVpbGQKLUNGTEFHUys9JChQVEhSRUFEX0NGTEFHUykgLURfR05VX1NPVVJDRQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfcndsb2NrL2JlbmNobWFyay9sYXRlbmN5LmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9ja19yd2xvY2svYmVuY2htYXJrL2xhdGVuY3kuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgyMTNjNmY2NjQ4M2JhZmIyNDc0YTEyN2I5NjI4Zjdl
MzUyNmU1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yd2xvY2svYmVu
Y2htYXJrL2xhdGVuY3kuYworKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IDIwMTEtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRI
T1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
LSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
Ci0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSA8Y2tfcndsb2NrLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNp
bmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNkZWZpbmUg
Q0tfRl9QUl9SVE0KLQotI2lmbmRlZiBTVEVQUwotI2RlZmluZSBTVEVQUyAyMDAwMDAwCi0jZW5k
aWYKLQotaW50Ci1tYWluKHZvaWQpCi17Ci0JdWludDY0X3Qgc19iLCBlX2IsIGk7Ci0JY2tfcnds
b2NrX3Qgcndsb2NrID0gQ0tfUldMT0NLX0lOSVRJQUxJWkVSOwotCi0JZm9yIChpID0gMDsgaSA8
IFNURVBTOyBpKyspIHsKLQkJY2tfcndsb2NrX3dyaXRlX2xvY2soJnJ3bG9jayk7Ci0JCWNrX3J3
bG9ja193cml0ZV91bmxvY2soJnJ3bG9jayk7Ci0JfQotCi0Jc19iID0gcmR0c2MoKTsKLQlmb3Ig
KGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19yd2xvY2tfd3JpdGVfbG9jaygmcndsb2Nr
KTsKLQkJY2tfcndsb2NrX3dyaXRlX3VubG9jaygmcndsb2NrKTsKLQl9Ci0JZV9iID0gcmR0c2Mo
KTsKLQlwcmludGYoIiAgICAgICAgICAgICAgICBXUklURTogcndsb2NrICAgJTE1IiBQUkl1NjQg
IlxuIiwgKGVfYiAtIHNfYikgLyBTVEVQUyk7Ci0KLSNpZmRlZiBDS19GX1BSX1JUTQotCXN0cnVj
dCBja19lbGlkZV9jb25maWcgY29uZmlnID0gQ0tfRUxJREVfQ09ORklHX0RFRkFVTFRfSU5JVElB
TElaRVI7Ci0Jc3RydWN0IGNrX2VsaWRlX3N0YXQgc3QgPSBDS19FTElERV9TVEFUX0lOSVRJQUxJ
WkVSOwotCi0JZm9yIChpID0gMDsgaSA8IFNURVBTOyBpKyspIHsKLQkJQ0tfRUxJREVfTE9DSyhj
a19yd2xvY2tfd3JpdGUsICZyd2xvY2spOwotCQlDS19FTElERV9VTkxPQ0soY2tfcndsb2NrX3dy
aXRlLCAmcndsb2NrKTsKLQl9Ci0KLQlzX2IgPSByZHRzYygpOwotCWZvciAoaSA9IDA7IGkgPCBT
VEVQUzsgaSsrKSB7Ci0JCUNLX0VMSURFX0xPQ0soY2tfcndsb2NrX3dyaXRlLCAmcndsb2NrKTsK
LQkJQ0tfRUxJREVfVU5MT0NLKGNrX3J3bG9ja193cml0ZSwgJnJ3bG9jayk7Ci0JfQotCWVfYiA9
IHJkdHNjKCk7Ci0JcHJpbnRmKCIgICAgICAgICAgKHJ0bSkgV1JJVEU6IHJ3bG9jayAgICUxNSIg
UFJJdTY0ICJcbiIsIChlX2IgLSBzX2IpIC8gU1RFUFMpOwotCi0JZm9yIChpID0gMDsgaSA8IFNU
RVBTOyBpKyspIHsKLQkJQ0tfRUxJREVfTE9DS19BREFQVElWRShja19yd2xvY2tfd3JpdGUsICZz
dCwgJmNvbmZpZywgJnJ3bG9jayk7Ci0JCUNLX0VMSURFX1VOTE9DS19BREFQVElWRShja19yd2xv
Y2tfd3JpdGUsICZzdCwgJnJ3bG9jayk7Ci0JfQotCi0Jc19iID0gcmR0c2MoKTsKLQlmb3IgKGkg
PSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlDS19FTElERV9MT0NLX0FEQVBUSVZFKGNrX3J3bG9j
a193cml0ZSwgJnN0LCAmY29uZmlnLCAmcndsb2NrKTsKLQkJQ0tfRUxJREVfVU5MT0NLX0FEQVBU
SVZFKGNrX3J3bG9ja193cml0ZSwgJnN0LCAmcndsb2NrKTsKLQl9Ci0JZV9iID0gcmR0c2MoKTsK
LQlwcmludGYoIiAocnRtLWFkYXB0aXZlKSBXUklURTogcndsb2NrICAgJTE1IiBQUkl1NjQgIlxu
IiwgKGVfYiAtIHNfYikgLyBTVEVQUyk7Ci0jZW5kaWYgLyogQ0tfRl9QUl9SVE0gKi8KLQotCWZv
ciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0JCWNrX3J3bG9ja19yZWFkX2xvY2soJnJ3bG9j
ayk7Ci0JCWNrX3J3bG9ja19yZWFkX3VubG9jaygmcndsb2NrKTsKLQl9Ci0KLQlzX2IgPSByZHRz
YygpOwotCWZvciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0JCWNrX3J3bG9ja19yZWFkX2xv
Y2soJnJ3bG9jayk7Ci0JCWNrX3J3bG9ja19yZWFkX3VubG9jaygmcndsb2NrKTsKLQl9Ci0JZV9i
ID0gcmR0c2MoKTsKLQlwcmludGYoIiAgICAgICAgICAgICAgICBSRUFEOiAgcndsb2NrICAgJTE1
IiBQUkl1NjQgIlxuIiwgKGVfYiAtIHNfYikgLyBTVEVQUyk7Ci0KLSNpZmRlZiBDS19GX1BSX1JU
TQotCWNrX2VsaWRlX3N0YXRfaW5pdCgmc3QpOwotCi0JZm9yIChpID0gMDsgaSA8IFNURVBTOyBp
KyspIHsKLQkJQ0tfRUxJREVfTE9DSyhja19yd2xvY2tfcmVhZCwgJnJ3bG9jayk7Ci0JCUNLX0VM
SURFX1VOTE9DSyhja19yd2xvY2tfcmVhZCwgJnJ3bG9jayk7Ci0JfQotCi0Jc19iID0gcmR0c2Mo
KTsKLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlDS19FTElERV9MT0NLKGNrX3J3
bG9ja19yZWFkLCAmcndsb2NrKTsKLQkJQ0tfRUxJREVfVU5MT0NLKGNrX3J3bG9ja19yZWFkLCAm
cndsb2NrKTsKLQl9Ci0JZV9iID0gcmR0c2MoKTsKLQlwcmludGYoIiAgICAgICAgICAocnRtKSBS
RUFEOiAgcndsb2NrICAgJTE1IiBQUkl1NjQgIlxuIiwgKGVfYiAtIHNfYikgLyBTVEVQUyk7Ci0K
LQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlDS19FTElERV9MT0NLX0FEQVBUSVZF
KGNrX3J3bG9ja19yZWFkLCAmc3QsICZjb25maWcsICZyd2xvY2spOwotCQlDS19FTElERV9VTkxP
Q0tfQURBUFRJVkUoY2tfcndsb2NrX3JlYWQsICZzdCwgJnJ3bG9jayk7Ci0JfQotCi0Jc19iID0g
cmR0c2MoKTsKLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlDS19FTElERV9MT0NL
X0FEQVBUSVZFKGNrX3J3bG9ja19yZWFkLCAmc3QsICZjb25maWcsICZyd2xvY2spOwotCQlDS19F
TElERV9VTkxPQ0tfQURBUFRJVkUoY2tfcndsb2NrX3JlYWQsICZzdCwgJnJ3bG9jayk7Ci0JfQot
CWVfYiA9IHJkdHNjKCk7Ci0JcHJpbnRmKCIgKHJ0bS1hZGFwdGl2ZSkgUkVBRDogIHJ3bG9jayAg
ICUxNSIgUFJJdTY0ICJcbiIsIChlX2IgLSBzX2IpIC8gU1RFUFMpOwotI2VuZGlmIC8qIENLX0Zf
UFJfUlRNICovCi0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcndsb2NrL2JlbmNobWFyay90aHJvdWdo
cHV0LmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19y
d2xvY2svYmVuY2htYXJrL3Rocm91Z2hwdXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZjU3ZmJkODFhZjRjMGU3MmMzMTg5ZTBjYWIzNWYyODc5YzI4NmQ0NS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19yd2xvY2svYmVuY2htYXJrL3Rocm91Z2hwdXQuYwor
KysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEtMjAx
NSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0g
KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
Ci0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8
Y2tfcndsb2NrLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+
Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRs
aWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgot
Ci0jaWZuZGVmIFNURVBTCi0jZGVmaW5lIFNURVBTIDEwMDAwMDAKLSNlbmRpZgotCi1zdGF0aWMg
aW50IGJhcnJpZXI7Ci1zdGF0aWMgaW50IHRocmVhZHM7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGZs
YWcgQ0tfQ0NfQ0FDSEVMSU5FOwotc3RhdGljIHN0cnVjdCB7Ci0JY2tfcndsb2NrX3QgbG9jazsK
LX0gcncgQ0tfQ0NfQ0FDSEVMSU5FID0gewotCS5sb2NrID0gQ0tfUldMT0NLX0lOSVRJQUxJWkVS
Ci19OwotCi1zdGF0aWMgc3RydWN0IGFmZmluaXR5IGFmZmluaXR5OwotCi0jaWZkZWYgQ0tfRl9Q
Ul9SVE0KLXN0YXRpYyB2b2lkICoKLXRocmVhZF9sb2NrX3J0bSh2b2lkICpwdW4pCi17Ci0JdWlu
dDY0X3Qgc19iLCBlX2IsIGEsIGk7Ci0JdWludDY0X3QgKnZhbHVlID0gcHVuOwotCi0JaWYgKGFm
Zl9pdGVyYXRlKCZhZmZpbml0eSkgIT0gMCkgewotCQlwZXJyb3IoIkVSUk9SOiBDb3VsZCBub3Qg
YWZmaW5lIHRocmVhZCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JY2tfcHJfaW5j
X2ludCgmYmFycmllcik7Ci0Jd2hpbGUgKGNrX3ByX2xvYWRfaW50KCZiYXJyaWVyKSAhPSB0aHJl
YWRzKQotCQlja19wcl9zdGFsbCgpOwotCi0JZm9yIChpID0gMSwgYSA9IDA7OyBpKyspIHsKLQkJ
c19iID0gcmR0c2MoKTsKLQkJQ0tfRUxJREVfTE9DSyhja19yd2xvY2tfcmVhZCwgJnJ3LmxvY2sp
OwotCQlDS19FTElERV9VTkxPQ0soY2tfcndsb2NrX3JlYWQsICZydy5sb2NrKTsKLQkJQ0tfRUxJ
REVfTE9DSyhja19yd2xvY2tfcmVhZCwgJnJ3LmxvY2spOwotCQlDS19FTElERV9VTkxPQ0soY2tf
cndsb2NrX3JlYWQsICZydy5sb2NrKTsKLQkJQ0tfRUxJREVfTE9DSyhja19yd2xvY2tfcmVhZCwg
JnJ3LmxvY2spOwotCQlDS19FTElERV9VTkxPQ0soY2tfcndsb2NrX3JlYWQsICZydy5sb2NrKTsK
LQkJQ0tfRUxJREVfTE9DSyhja19yd2xvY2tfcmVhZCwgJnJ3LmxvY2spOwotCQlDS19FTElERV9V
TkxPQ0soY2tfcndsb2NrX3JlYWQsICZydy5sb2NrKTsKLQkJQ0tfRUxJREVfTE9DSyhja19yd2xv
Y2tfcmVhZCwgJnJ3LmxvY2spOwotCQlDS19FTElERV9VTkxPQ0soY2tfcndsb2NrX3JlYWQsICZy
dy5sb2NrKTsKLQkJQ0tfRUxJREVfTE9DSyhja19yd2xvY2tfcmVhZCwgJnJ3LmxvY2spOwotCQlD
S19FTElERV9VTkxPQ0soY2tfcndsb2NrX3JlYWQsICZydy5sb2NrKTsKLQkJQ0tfRUxJREVfTE9D
Syhja19yd2xvY2tfcmVhZCwgJnJ3LmxvY2spOwotCQlDS19FTElERV9VTkxPQ0soY2tfcndsb2Nr
X3JlYWQsICZydy5sb2NrKTsKLQkJQ0tfRUxJREVfTE9DSyhja19yd2xvY2tfcmVhZCwgJnJ3Lmxv
Y2spOwotCQlDS19FTElERV9VTkxPQ0soY2tfcndsb2NrX3JlYWQsICZydy5sb2NrKTsKLQkJQ0tf
RUxJREVfTE9DSyhja19yd2xvY2tfcmVhZCwgJnJ3LmxvY2spOwotCQlDS19FTElERV9VTkxPQ0so
Y2tfcndsb2NrX3JlYWQsICZydy5sb2NrKTsKLQkJQ0tfRUxJREVfTE9DSyhja19yd2xvY2tfcmVh
ZCwgJnJ3LmxvY2spOwotCQlDS19FTElERV9VTkxPQ0soY2tfcndsb2NrX3JlYWQsICZydy5sb2Nr
KTsKLQkJQ0tfRUxJREVfTE9DSyhja19yd2xvY2tfcmVhZCwgJnJ3LmxvY2spOwotCQlDS19FTElE
RV9VTkxPQ0soY2tfcndsb2NrX3JlYWQsICZydy5sb2NrKTsKLQkJQ0tfRUxJREVfTE9DSyhja19y
d2xvY2tfcmVhZCwgJnJ3LmxvY2spOwotCQlDS19FTElERV9VTkxPQ0soY2tfcndsb2NrX3JlYWQs
ICZydy5sb2NrKTsKLQkJQ0tfRUxJREVfTE9DSyhja19yd2xvY2tfcmVhZCwgJnJ3LmxvY2spOwot
CQlDS19FTElERV9VTkxPQ0soY2tfcndsb2NrX3JlYWQsICZydy5sb2NrKTsKLQkJQ0tfRUxJREVf
TE9DSyhja19yd2xvY2tfcmVhZCwgJnJ3LmxvY2spOwotCQlDS19FTElERV9VTkxPQ0soY2tfcnds
b2NrX3JlYWQsICZydy5sb2NrKTsKLQkJQ0tfRUxJREVfTE9DSyhja19yd2xvY2tfcmVhZCwgJnJ3
LmxvY2spOwotCQlDS19FTElERV9VTkxPQ0soY2tfcndsb2NrX3JlYWQsICZydy5sb2NrKTsKLQkJ
Q0tfRUxJREVfTE9DSyhja19yd2xvY2tfcmVhZCwgJnJ3LmxvY2spOwotCQlDS19FTElERV9VTkxP
Q0soY2tfcndsb2NrX3JlYWQsICZydy5sb2NrKTsKLQkJZV9iID0gcmR0c2MoKTsKLQotCQlhICs9
IChlX2IgLSBzX2IpID4+IDQ7Ci0KLQkJaWYgKGNrX3ByX2xvYWRfdWludCgmZmxhZykgPT0gMSkK
LQkJCWJyZWFrOwotCX0KLQotCWNrX3ByX2luY19pbnQoJmJhcnJpZXIpOwotCXdoaWxlIChja19w
cl9sb2FkX2ludCgmYmFycmllcikgIT0gdGhyZWFkcyAqIDIpCi0JCWNrX3ByX3N0YWxsKCk7Ci0K
LQkqdmFsdWUgPSAoYSAvIGkpOwotCXJldHVybiBOVUxMOwotfQotI2VuZGlmIC8qIENLX0ZfUFJf
UlRNICovCi0KLXN0YXRpYyB2b2lkICoKLXRocmVhZF9sb2NrKHZvaWQgKnB1bikKLXsKLQl1aW50
NjRfdCBzX2IsIGVfYiwgYSwgaTsKLQl1aW50NjRfdCAqdmFsdWUgPSBwdW47Ci0KLQlpZiAoYWZm
X2l0ZXJhdGUoJmFmZmluaXR5KSAhPSAwKSB7Ci0JCXBlcnJvcigiRVJST1I6IENvdWxkIG5vdCBh
ZmZpbmUgdGhyZWFkIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQlja19wcl9pbmNf
aW50KCZiYXJyaWVyKTsKLQl3aGlsZSAoY2tfcHJfbG9hZF9pbnQoJmJhcnJpZXIpICE9IHRocmVh
ZHMpCi0JCWNrX3ByX3N0YWxsKCk7Ci0KLQlmb3IgKGkgPSAxLCBhID0gMDs7IGkrKykgewotCQlz
X2IgPSByZHRzYygpOwotCQlja19yd2xvY2tfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfcnds
b2NrX3JlYWRfdW5sb2NrKCZydy5sb2NrKTsKLQkJY2tfcndsb2NrX3JlYWRfbG9jaygmcncubG9j
ayk7Ci0JCWNrX3J3bG9ja19yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3J3bG9ja19yZWFk
X2xvY2soJnJ3LmxvY2spOwotCQlja19yd2xvY2tfcmVhZF91bmxvY2soJnJ3LmxvY2spOwotCQlj
a19yd2xvY2tfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfcndsb2NrX3JlYWRfdW5sb2NrKCZy
dy5sb2NrKTsKLQkJY2tfcndsb2NrX3JlYWRfbG9jaygmcncubG9jayk7Ci0JCWNrX3J3bG9ja19y
ZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3J3bG9ja19yZWFkX2xvY2soJnJ3LmxvY2spOwot
CQlja19yd2xvY2tfcmVhZF91bmxvY2soJnJ3LmxvY2spOwotCQlja19yd2xvY2tfcmVhZF9sb2Nr
KCZydy5sb2NrKTsKLQkJY2tfcndsb2NrX3JlYWRfdW5sb2NrKCZydy5sb2NrKTsKLQkJY2tfcnds
b2NrX3JlYWRfbG9jaygmcncubG9jayk7Ci0JCWNrX3J3bG9ja19yZWFkX3VubG9jaygmcncubG9j
ayk7Ci0JCWNrX3J3bG9ja19yZWFkX2xvY2soJnJ3LmxvY2spOwotCQlja19yd2xvY2tfcmVhZF91
bmxvY2soJnJ3LmxvY2spOwotCQlja19yd2xvY2tfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tf
cndsb2NrX3JlYWRfdW5sb2NrKCZydy5sb2NrKTsKLQkJY2tfcndsb2NrX3JlYWRfbG9jaygmcncu
bG9jayk7Ci0JCWNrX3J3bG9ja19yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3J3bG9ja19y
ZWFkX2xvY2soJnJ3LmxvY2spOwotCQlja19yd2xvY2tfcmVhZF91bmxvY2soJnJ3LmxvY2spOwot
CQlja19yd2xvY2tfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfcndsb2NrX3JlYWRfdW5sb2Nr
KCZydy5sb2NrKTsKLQkJY2tfcndsb2NrX3JlYWRfbG9jaygmcncubG9jayk7Ci0JCWNrX3J3bG9j
a19yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3J3bG9ja19yZWFkX2xvY2soJnJ3LmxvY2sp
OwotCQlja19yd2xvY2tfcmVhZF91bmxvY2soJnJ3LmxvY2spOwotCQlja19yd2xvY2tfcmVhZF9s
b2NrKCZydy5sb2NrKTsKLQkJY2tfcndsb2NrX3JlYWRfdW5sb2NrKCZydy5sb2NrKTsKLQkJZV9i
ID0gcmR0c2MoKTsKLQotCQlhICs9IChlX2IgLSBzX2IpID4+IDQ7Ci0KLQkJaWYgKGNrX3ByX2xv
YWRfdWludCgmZmxhZykgPT0gMSkKLQkJCWJyZWFrOwotCX0KLQotCWNrX3ByX2luY19pbnQoJmJh
cnJpZXIpOwotCXdoaWxlIChja19wcl9sb2FkX2ludCgmYmFycmllcikgIT0gdGhyZWFkcyAqIDIp
Ci0JCWNrX3ByX3N0YWxsKCk7Ci0KLQkqdmFsdWUgPSAoYSAvIGkpOwotCXJldHVybiBOVUxMOwot
fQotCi1zdGF0aWMgdm9pZAotcndsb2NrX3Rlc3QocHRocmVhZF90ICpwLCBpbnQgZCwgdWludDY0
X3QgKmxhdGVuY3ksIHZvaWQgKigqZikodm9pZCAqKSwgY29uc3QgY2hhciAqbGFiZWwpCi17Ci0J
aW50IHQ7Ci0KLQlja19wcl9zdG9yZV9pbnQoJmJhcnJpZXIsIDApOwotCWNrX3ByX3N0b3JlX3Vp
bnQoJmZsYWcsIDApOwotCi0JYWZmaW5pdHkuZGVsdGEgPSBkOwotCWFmZmluaXR5LnJlcXVlc3Qg
PSAwOwotCi0JZnByaW50ZihzdGRlcnIsICJDcmVhdGluZyB0aHJlYWRzICglcykuLi4iLCBsYWJl
bCk7Ci0JZm9yICh0ID0gMDsgdCA8IHRocmVhZHM7IHQrKykgewotCQlpZiAocHRocmVhZF9jcmVh
dGUoJnBbdF0sIE5VTEwsIGYsIGxhdGVuY3kgKyB0KSAhPSAwKSB7Ci0JCQlja19lcnJvcigiRVJS
T1I6IENvdWxkIG5vdCBjcmVhdGUgdGhyZWFkICVkXG4iLCB0KTsKLQkJfQotCX0KLQlmcHJpbnRm
KHN0ZGVyciwgImRvbmVcbiIpOwotCi0JY29tbW9uX3NsZWVwKDEwKTsKLQlja19wcl9zdG9yZV91
aW50KCZmbGFnLCAxKTsKLQotCWZwcmludGYoc3RkZXJyLCAiV2FpdGluZyBmb3IgdGhyZWFkcyB0
byBmaW5pc2ggYWNxdWlzaXRpb24gcmVncmVzc2lvbi4uLiIpOwotCWZvciAodCA9IDA7IHQgPCB0
aHJlYWRzOyB0KyspCi0JCXB0aHJlYWRfam9pbihwW3RdLCBOVUxMKTsKLQlmcHJpbnRmKHN0ZGVy
ciwgImRvbmVcblxuIik7Ci0KLQlmb3IgKHQgPSAxOyB0IDw9IHRocmVhZHM7IHQrKykKLQkJcHJp
bnRmKCIlMTB1ICUyMCIgUFJJdTY0ICJcbiIsIHQsIGxhdGVuY3lbdCAtIDFdKTsKLQotCWZwcmlu
dGYoc3RkZXJyLCAiXG4iKTsKLQlyZXR1cm47Ci19Ci0KLQotaW50Ci1tYWluKGludCBhcmdjLCBj
aGFyICphcmd2W10pCi17Ci0JaW50IGQ7Ci0JcHRocmVhZF90ICpwOwotCXVpbnQ2NF90ICpsYXRl
bmN5OwotCi0JaWYgKGFyZ2MgIT0gMykgewotCQlja19lcnJvcigiVXNhZ2U6IHRocm91Z2hwdXQg
PGRlbHRhPiA8dGhyZWFkcz5cbiIpOwotCX0KLQotCXRocmVhZHMgPSBhdG9pKGFyZ3ZbMl0pOwot
CWlmICh0aHJlYWRzIDw9IDApIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBUaHJlYWRzIG11c3QgYmUg
YSB2YWx1ZSA+IDAuXG4iKTsKLQl9Ci0KLQlwID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICog
dGhyZWFkcyk7Ci0JaWYgKHAgPT0gTlVMTCkgewotCQlja19lcnJvcigiRVJST1I6IEZhaWxlZCB0
byBpbml0aWFsaXplIHRocmVhZC5cbiIpOwotCX0KLQotCWxhdGVuY3kgPSBtYWxsb2Moc2l6ZW9m
KHVpbnQ2NF90KSAqIHRocmVhZHMpOwotCWlmIChsYXRlbmN5ID09IE5VTEwpIHsKLQkJY2tfZXJy
b3IoIkVSUk9SOiBGYWlsZWQgdG8gY3JlYXRlIGxhdGVuY3kgYnVmZmVyLlxuIik7Ci0JfQotCi0J
ZCA9IGF0b2koYXJndlsxXSk7Ci0Jcndsb2NrX3Rlc3QocCwgZCwgbGF0ZW5jeSwgdGhyZWFkX2xv
Y2ssICJyd2xvY2siKTsKLQotI2lmZGVmIENLX0ZfUFJfUlRNCi0Jcndsb2NrX3Rlc3QocCwgZCwg
bGF0ZW5jeSwgdGhyZWFkX2xvY2tfcnRtLCAicndsb2NrLCBydG0iKTsKLSNlbmRpZiAvKiBDS19G
X1BSX1JUTSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3J3bG9jay92YWxpZGF0ZS9NYWtlZmls
ZSBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3J3bG9j
ay92YWxpZGF0ZS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMyMTE2
YmQzNDdjMGQ0ZmU5NjllOGM5YWRjMTQ3MzQ4MmZiMTY0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19yd2xvY2svdmFsaWRhdGUvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApA
QCAtMSwxNyArMCwwIEBACi0uUEhPTlk6IGNoZWNrIGNsZWFuIGRpc3RyaWJ1dGlvbgotCi1PQkpF
Q1RTPXZhbGlkYXRlCi0KLWFsbDogJChPQkpFQ1RTKQotCi12YWxpZGF0ZTogdmFsaWRhdGUuYyAu
Li8uLi8uLi9pbmNsdWRlL2NrX3J3bG9jay5oIC4uLy4uLy4uL2luY2x1ZGUvY2tfZWxpZGUuaAot
CSQoQ0MpICQoQ0ZMQUdTKSAtbyB2YWxpZGF0ZSB2YWxpZGF0ZS5jCi0KLWNoZWNrOiBhbGwKLQku
L3ZhbGlkYXRlICQoQ09SRVMpIDEKLQotY2xlYW46Ci0Jcm0gLXJmICouZFNZTSAqLmV4ZSAqfiAq
Lm8gJChPQkpFQ1RTKQotCi1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxk
Ci1DRkxBR1MrPSQoUFRIUkVBRF9DRkxBR1MpIC1EX0dOVV9TT1VSQ0UKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3J3bG9jay92YWxp
ZGF0ZS92YWxpZGF0ZS5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVz
c2lvbnMvY2tfcndsb2NrL3ZhbGlkYXRlL3ZhbGlkYXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDhhMzJlMDg1NmYyODJhYWM4MWQ1NTEwNmJiOGE5ODU4NDhiYjZjMjIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfcndsb2NrL3ZhbGlkYXRlL3ZhbGlkYXRl
LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEx
LTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+
Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGlv
Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2luY2x1ZGUg
PHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0KLSNpbmNsdWRlIDxja19wci5oPgot
I2luY2x1ZGUgPGNrX3J3bG9jay5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNp
Zm5kZWYgSVRFUkFURQotI2RlZmluZSBJVEVSQVRFIDEwMDAwMDAKLSNlbmRpZgotCi1zdGF0aWMg
c3RydWN0IGFmZmluaXR5IGE7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGxvY2tlZDsKLXN0YXRpYyB1
bnNpZ25lZCBpbnQgdGlkID0gMjsKLXN0YXRpYyBpbnQgbnRocjsKLXN0YXRpYyBja19yd2xvY2tf
dCBsb2NrID0gQ0tfUldMT0NLX0lOSVRJQUxJWkVSOwotc3RhdGljIGNrX3J3bG9ja19yZWN1cnNp
dmVfdCByX2xvY2sgPSBDS19SV0xPQ0tfUkVDVVJTSVZFX0lOSVRJQUxJWkVSOwotCi1zdGF0aWMg
dm9pZCAqCi10aHJlYWRfcmVjdXJzaXZlKHZvaWQgKm51bGwgQ0tfQ0NfVU5VU0VEKQotewotCWlu
dCBpID0gSVRFUkFURTsKLQl1bnNpZ25lZCBpbnQgbDsKLQl1bnNpZ25lZCBpbnQgdCA9IGNrX3By
X2ZhYV91aW50KCZ0aWQsIDEpOwotCi0gICAgICAgIGlmIChhZmZfaXRlcmF0ZSgmYSkpIHsKLSAg
ICAgICAgICAgICAgICBwZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWZmaW5lIHRocmVhZCIpOwot
ICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotCi0Jd2hpbGUg
KGktLSkgewotCQl3aGlsZSAoY2tfcndsb2NrX3JlY3Vyc2l2ZV93cml0ZV90cnlsb2NrKCZyX2xv
Y2ssIHQpID09IGZhbHNlKQotCQkJY2tfcHJfc3RhbGwoKTsKLQotCQlja19yd2xvY2tfcmVjdXJz
aXZlX3dyaXRlX2xvY2soJnJfbG9jaywgdCk7Ci0JCWNrX3J3bG9ja19yZWN1cnNpdmVfd3JpdGVf
bG9jaygmcl9sb2NrLCB0KTsKLQkJY2tfcndsb2NrX3JlY3Vyc2l2ZV93cml0ZV9sb2NrKCZyX2xv
Y2ssIHQpOwotCi0JCXsKLQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0JCQlpZiAo
bCAhPSAwKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDBcbiIsIF9fTElO
RV9fLCBsKTsKLQkJCX0KLQotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9p
bmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJf
aW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3By
X2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19w
cl9pbmNfdWludCgmbG9ja2VkKTsKLQotCQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9ja2VkKTsK
LQkJCWlmIChsICE9IDgpIHsKLQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUgIT0gMlxu
IiwgX19MSU5FX18sIGwpOwotCQkJfQotCi0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJ
CWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0J
CQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwot
CQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsK
LQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCi0JCQlsID0gY2tfcHJfbG9hZF91aW50KCZs
b2NrZWQpOwotCQkJaWYgKGwgIT0gMCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbV1I6JWRdOiAl
dSAhPSAwXG4iLCBfX0xJTkVfXywgbCk7Ci0JCQl9Ci0JCX0KLQkJY2tfcndsb2NrX3JlY3Vyc2l2
ZV93cml0ZV91bmxvY2soJnJfbG9jayk7Ci0JCWNrX3J3bG9ja19yZWN1cnNpdmVfd3JpdGVfdW5s
b2NrKCZyX2xvY2spOwotCQlja19yd2xvY2tfcmVjdXJzaXZlX3dyaXRlX3VubG9jaygmcl9sb2Nr
KTsKLQkJY2tfcndsb2NrX3JlY3Vyc2l2ZV93cml0ZV91bmxvY2soJnJfbG9jayk7Ci0KLQkJY2tf
cndsb2NrX3JlY3Vyc2l2ZV9yZWFkX2xvY2soJnJfbG9jayk7Ci0JCXsKLQkJCWwgPSBja19wcl9s
b2FkX3VpbnQoJmxvY2tlZCk7Ci0JCQlpZiAobCAhPSAwKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9S
IFtSRDolZF06ICV1ICE9IDBcbiIsIF9fTElORV9fLCBsKTsKLQkJCX0KLQkJfQotCQlja19yd2xv
Y2tfcmVjdXJzaXZlX3JlYWRfdW5sb2NrKCZyX2xvY2spOwotCX0KLQotCXJldHVybiAoTlVMTCk7
Ci19Ci0KLSNpZmRlZiBDS19GX1BSX1JUTQotc3RhdGljIHZvaWQgKgotdGhyZWFkX3J0bV9hZGFw
dGl2ZSh2b2lkICpudWxsIENLX0NDX1VOVVNFRCkKLXsKLQl1bnNpZ25lZCBpbnQgaSA9IElURVJB
VEU7Ci0JdW5zaWduZWQgaW50IGw7Ci0Jc3RydWN0IGNrX2VsaWRlX2NvbmZpZyBjb25maWcgPSBD
S19FTElERV9DT05GSUdfREVGQVVMVF9JTklUSUFMSVpFUjsKLQlzdHJ1Y3QgY2tfZWxpZGVfc3Rh
dCBzdCA9IENLX0VMSURFX1NUQVRfSU5JVElBTElaRVI7Ci0KLSAgICAgICAgaWYgKGFmZl9pdGVy
YXRlKCZhKSkgewotICAgICAgICAgICAgICAgIHBlcnJvcigiRVJST1I6IENvdWxkIG5vdCBhZmZp
bmUgdGhyZWFkIik7Ci0gICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAg
ICB9Ci0KLQl3aGlsZSAoaS0tKSB7Ci0JCUNLX0VMSURFX0xPQ0tfQURBUFRJVkUoY2tfcndsb2Nr
X3dyaXRlLCAmc3QsICZjb25maWcsICZsb2NrKTsKLQkJewotCQkJbCA9IGNrX3ByX2xvYWRfdWlu
dCgmbG9ja2VkKTsKLQkJCWlmIChsICE9IDApIHsKLQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVk
XTogJXUgIT0gMFxuIiwgX19MSU5FX18sIGwpOwotCQkJfQotCi0JCQlja19wcl9pbmNfdWludCgm
bG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQo
JmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50
KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWlu
dCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCi0JCQlsID0gY2tfcHJf
bG9hZF91aW50KCZsb2NrZWQpOwotCQkJaWYgKGwgIT0gOCkgewotCQkJCWNrX2Vycm9yKCJFUlJP
UiBbV1I6JWRdOiAldSAhPSAyXG4iLCBfX0xJTkVfXywgbCk7Ci0JCQl9Ci0KLQkJCWNrX3ByX2Rl
Y191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9k
ZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJf
ZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3By
X2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0KLQkJCWwg
PSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0JCQlpZiAobCAhPSAwKSB7Ci0JCQkJY2tfZXJy
b3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDBcbiIsIF9fTElORV9fLCBsKTsKLQkJCX0KLQkJfQot
CQlDS19FTElERV9VTkxPQ0tfQURBUFRJVkUoY2tfcndsb2NrX3dyaXRlLCAmc3QsICZsb2NrKTsK
LQotCQlDS19FTElERV9MT0NLKGNrX3J3bG9ja19yZWFkLCAmbG9jayk7Ci0JCXsKLQkJCWwgPSBj
a19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0JCQlpZiAobCAhPSAwKSB7Ci0JCQkJY2tfZXJyb3Io
IkVSUk9SIFtSRDolZF06ICV1ICE9IDBcbiIsIF9fTElORV9fLCBsKTsKLQkJCX0KLQkJfQotCQlD
S19FTElERV9VTkxPQ0soY2tfcndsb2NrX3JlYWQsICZsb2NrKTsKLQl9Ci0KLQlyZXR1cm4gTlVM
TDsKLX0KLQotc3RhdGljIHZvaWQgKgotdGhyZWFkX3J0bV9taXgodm9pZCAqbnVsbCBDS19DQ19V
TlVTRUQpCi17Ci0JdW5zaWduZWQgaW50IGkgPSBJVEVSQVRFOwotCXVuc2lnbmVkIGludCBsOwot
Ci0gICAgICAgIGlmIChhZmZfaXRlcmF0ZSgmYSkpIHsKLSAgICAgICAgICAgICAgICBwZXJyb3Io
IkVSUk9SOiBDb3VsZCBub3QgYWZmaW5lIHRocmVhZCIpOwotICAgICAgICAgICAgICAgIGV4aXQo
RVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotCi0Jd2hpbGUgKGktLSkgewotCQlpZiAoaSAmIDEp
IHsKLQkJCUNLX0VMSURFX0xPQ0soY2tfcndsb2NrX3dyaXRlLCAmbG9jayk7Ci0JCX0gZWxzZSB7
Ci0JCQlja19yd2xvY2tfd3JpdGVfbG9jaygmbG9jayk7Ci0JCX0KLQotCQl7Ci0JCQlsID0gY2tf
cHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQkJaWYgKGwgIT0gMCkgewotCQkJCWNrX2Vycm9yKCJF
UlJPUiBbV1I6JWRdOiAldSAhPSAwXG4iLCBfX0xJTkVfXywgbCk7Ci0JCQl9Ci0KLQkJCWNrX3By
X2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19w
cl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tf
cHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNr
X3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0KLQkJ
CWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0JCQlpZiAobCAhPSA4KSB7Ci0JCQkJY2tf
ZXJyb3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDJcbiIsIF9fTElORV9fLCBsKTsKLQkJCX0KLQot
CQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsK
LQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7
Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQp
OwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2Vk
KTsKLQotCQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9ja2VkKTsKLQkJCWlmIChsICE9IDApIHsK
LQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUgIT0gMFxuIiwgX19MSU5FX18sIGwpOwot
CQkJfQotCQl9Ci0KLQkJaWYgKGkgJiAxKSB7Ci0JCQlDS19FTElERV9VTkxPQ0soY2tfcndsb2Nr
X3dyaXRlLCAmbG9jayk7Ci0JCX0gZWxzZSB7Ci0JCQlja19yd2xvY2tfd3JpdGVfdW5sb2NrKCZs
b2NrKTsKLQkJfQotCi0JCWlmIChpICYgMSkgewotCQkJQ0tfRUxJREVfTE9DSyhja19yd2xvY2tf
cmVhZCwgJmxvY2spOwotCQl9IGVsc2UgewotCQkJY2tfcndsb2NrX3JlYWRfbG9jaygmbG9jayk7
Ci0JCX0KLQotCQl7Ci0JCQlsID0gY2tfcHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQkJaWYgKGwg
IT0gMCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbUkQ6JWRdOiAldSAhPSAwXG4iLCBfX0xJTkVf
XywgbCk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoaSAmIDEpIHsKLQkJCUNLX0VMSURFX1VOTE9DSyhj
a19yd2xvY2tfcmVhZCwgJmxvY2spOwotCQl9IGVsc2UgewotCQkJY2tfcndsb2NrX3JlYWRfdW5s
b2NrKCZsb2NrKTsKLQkJfQotCX0KLQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lk
ICoKLXRocmVhZF9ydG0odm9pZCAqbnVsbCBDS19DQ19VTlVTRUQpCi17Ci0JdW5zaWduZWQgaW50
IGkgPSBJVEVSQVRFOwotCXVuc2lnbmVkIGludCBsOwotCi0gICAgICAgIGlmIChhZmZfaXRlcmF0
ZSgmYSkpIHsKLSAgICAgICAgICAgICAgICBwZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgYWZmaW5l
IHRocmVhZCIpOwotICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAg
fQotCi0Jd2hpbGUgKGktLSkgewotCQlDS19FTElERV9MT0NLKGNrX3J3bG9ja193cml0ZSwgJmxv
Y2spOwotCQl7Ci0JCQlsID0gY2tfcHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQkJaWYgKGwgIT0g
MCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbV1I6JWRdOiAldSAhPSAwXG4iLCBfX0xJTkVfXywg
bCk7Ci0JCQl9Ci0KLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3Vp
bnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191
aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNf
dWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5j
X3VpbnQoJmxvY2tlZCk7Ci0KLQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0JCQlp
ZiAobCAhPSA4KSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDJcbiIsIF9f
TElORV9fLCBsKTsKLQkJCX0KLQotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19w
cl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tf
cHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNr
X3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlj
a19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQotCQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9ja2Vk
KTsKLQkJCWlmIChsICE9IDApIHsKLQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUgIT0g
MFxuIiwgX19MSU5FX18sIGwpOwotCQkJfQotCQl9Ci0JCUNLX0VMSURFX1VOTE9DSyhja19yd2xv
Y2tfd3JpdGUsICZsb2NrKTsKLQotCQlDS19FTElERV9MT0NLKGNrX3J3bG9ja19yZWFkLCAmbG9j
ayk7Ci0JCXsKLQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0JCQlpZiAobCAhPSAw
KSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFtSRDolZF06ICV1ICE9IDBcbiIsIF9fTElORV9fLCBs
KTsKLQkJCX0KLQkJfQotCQlDS19FTElERV9VTkxPQ0soY2tfcndsb2NrX3JlYWQsICZsb2NrKTsK
LQl9Ci0KLQlyZXR1cm4gKE5VTEwpOwotfQotI2VuZGlmIC8qIENLX0ZfUFJfUlRNICovCi0KLXN0
YXRpYyB2b2lkICoKLXRocmVhZCh2b2lkICpudWxsIENLX0NDX1VOVVNFRCkKLXsKLQl1bnNpZ25l
ZCBpbnQgaSA9IElURVJBVEU7Ci0JdW5zaWduZWQgaW50IGw7Ci0KLSAgICAgICAgaWYgKGFmZl9p
dGVyYXRlKCZhKSkgewotICAgICAgICAgICAgICAgIHBlcnJvcigiRVJST1I6IENvdWxkIG5vdCBh
ZmZpbmUgdGhyZWFkIik7Ci0gICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAg
ICAgICB9Ci0KLQl3aGlsZSAoaS0tKSB7Ci0JCWNrX3J3bG9ja193cml0ZV9sb2NrKCZsb2NrKTsK
LQkJewotCQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9ja2VkKTsKLQkJCWlmIChsICE9IDApIHsK
LQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUgIT0gMFxuIiwgX19MSU5FX18sIGwpOwot
CQkJfQotCi0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZs
b2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgm
bG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQo
JmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50
KCZsb2NrZWQpOwotCi0JCQlsID0gY2tfcHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQkJaWYgKGwg
IT0gOCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbV1I6JWRdOiAldSAhPSAyXG4iLCBfX0xJTkVf
XywgbCk7Ci0JCQl9Ci0KLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVj
X3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2Rl
Y191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9k
ZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJf
ZGVjX3VpbnQoJmxvY2tlZCk7Ci0KLQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0J
CQlpZiAobCAhPSAwKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDBcbiIs
IF9fTElORV9fLCBsKTsKLQkJCX0KLQkJfQotCQlja19yd2xvY2tfd3JpdGVfdW5sb2NrKCZsb2Nr
KTsKLQotCQlja19yd2xvY2tfcmVhZF9sb2NrKCZsb2NrKTsKLQkJewotCQkJbCA9IGNrX3ByX2xv
YWRfdWludCgmbG9ja2VkKTsKLQkJCWlmIChsICE9IDApIHsKLQkJCQlja19lcnJvcigiRVJST1Ig
W1JEOiVkXTogJXUgIT0gMFxuIiwgX19MSU5FX18sIGwpOwotCQkJfQotCQl9Ci0JCWNrX3J3bG9j
a19yZWFkX3VubG9jaygmbG9jayk7Ci0JfQotCi0JcmV0dXJuIChOVUxMKTsKLX0KLQotc3RhdGlj
IHZvaWQKLXJ3bG9ja190ZXN0KHB0aHJlYWRfdCAqdGhyZWFkcywgdm9pZCAqKCpmKSh2b2lkICop
LCBjb25zdCBjaGFyICp0ZXN0KQotewotCWludCBpOwotCi0JZnByaW50ZihzdGRlcnIsICJDcmVh
dGluZyB0aHJlYWRzICglcykuLi4iLCB0ZXN0KTsKLQlmb3IgKGkgPSAwOyBpIDwgbnRocjsgaSsr
KSB7Ci0JCWlmIChwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkc1tpXSwgTlVMTCwgZiwgTlVMTCkpIHsK
LQkJCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGNyZWF0ZSB0aHJlYWQgJWRcbiIsIGkpOwot
CQl9Ci0JfQotCWZwcmludGYoc3RkZXJyLCAiLiIpOwotCi0JZm9yIChpID0gMDsgaSA8IG50aHI7
IGkrKykKLQkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwotCWZwcmludGYoc3RkZXJy
LCAiZG9uZSAocGFzc2VkKVxuIik7Ci0JcmV0dXJuOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2Ms
IGNoYXIgKmFyZ3ZbXSkKLXsKLQlwdGhyZWFkX3QgKnRocmVhZHM7Ci0KLQlpZiAoYXJnYyAhPSAz
KSB7Ci0JCWNrX2Vycm9yKCJVc2FnZTogdmFsaWRhdGUgPG51bWJlciBvZiB0aHJlYWRzPiA8YWZm
aW5pdHkgZGVsdGE+XG4iKTsKLQl9Ci0KLQludGhyID0gYXRvaShhcmd2WzFdKTsKLQlpZiAobnRo
ciA8PSAwKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogTnVtYmVyIG9mIHRocmVhZHMgbXVzdCBiZSBn
cmVhdGVyIHRoYW4gMFxuIik7Ci0JfQotCi0JdGhyZWFkcyA9IG1hbGxvYyhzaXplb2YocHRocmVh
ZF90KSAqIG50aHIpOwotCWlmICh0aHJlYWRzID09IE5VTEwpIHsKLQkJY2tfZXJyb3IoIkVSUk9S
OiBDb3VsZCBub3QgYWxsb2NhdGUgdGhyZWFkIHN0cnVjdHVyZXNcbiIpOwotCX0KLQotCWEuZGVs
dGEgPSBhdG9pKGFyZ3ZbMl0pOwotCi0Jcndsb2NrX3Rlc3QodGhyZWFkcywgdGhyZWFkLCAicmVn
dWxhciIpOwotI2lmZGVmIENLX0ZfUFJfUlRNCi0Jcndsb2NrX3Rlc3QodGhyZWFkcywgdGhyZWFk
X3J0bSwgInJ0bSIpOwotCXJ3bG9ja190ZXN0KHRocmVhZHMsIHRocmVhZF9ydG1fbWl4LCAicnRt
LW1peCIpOwotCXJ3bG9ja190ZXN0KHRocmVhZHMsIHRocmVhZF9ydG1fYWRhcHRpdmUsICJydG0t
YWRhcHRpdmUiKTsKLSNlbmRpZgotCXJ3bG9ja190ZXN0KHRocmVhZHMsIHRocmVhZF9yZWN1cnNp
dmUsICJyZWN1cnNpdmUiKTsKLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc2VxdWVuY2UvYmVuY2htYXJr
L01ha2VmaWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfc2VxdWVuY2UvYmVuY2htYXJrL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1ODAzYTRkMjllYTZkOWE2OTM5NzE5ZTlkZWNjNTA4NzYyNDNlNTY5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NlcXVlbmNlL2JlbmNobWFyay9NYWtlZmlsZQor
KysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS5QSE9OWTogY2xlYW4gZGlzdHJpYnV0aW9u
Ci0KLU9CSkVDVFM9Y2tfc2VxdWVuY2UKLQotYWxsOiAkKE9CSkVDVFMpCi0KLWNrX3NlcXVlbmNl
OiBja19zZXF1ZW5jZS5jIC4uLy4uLy4uL2luY2x1ZGUvY2tfc2VxdWVuY2UuaAotCSQoQ0MpICQo
Q0ZMQUdTKSAtbyBja19zZXF1ZW5jZSBja19zZXF1ZW5jZS5jCi0KLWNoZWNrOiBhbGwKLQkuL2Nr
X3NlcXVlbmNlICQoQ09SRVMpIDEKLQotY2xlYW46Ci0Jcm0gLXJmICp+ICoubyAkKE9CSkVDVFMp
ICouZFNZTSAqLmV4ZQotCi1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxk
Ci1DRkxBR1MrPS1EX0dOVV9TT1VSQ0UKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc2VxdWVuY2UvYmVuY2htYXJrL2NrX3NlcXVl
bmNlLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19z
ZXF1ZW5jZS9iZW5jaG1hcmsvY2tfc2VxdWVuY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjcyMGMzMWQ4YjFmNDI1OGZhYTNmOWE0Nzc5NmNkNTcxMjE5NmZjOC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zZXF1ZW5jZS9iZW5jaG1hcmsvY2tfc2VxdWVu
Y2UuYworKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAx
My0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNrX3NlcXVlbmNlLmg+Ci0jaW5jbHVkZSA8ZXJybm8u
aD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxz
dGRsaWIuaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9u
LmgiCi0KLSNpZm5kZWYgU1RFUFMKLSNkZWZpbmUgU1RFUFMgKDY1NTM2ICogNjQpCi0jZW5kaWYK
LQotc3RhdGljIGNrX3NlcXVlbmNlX3Qgc2VxbG9jayBDS19DQ19DQUNIRUxJTkUgPSBDS19TRVFV
RU5DRV9JTklUSUFMSVpFUjsKLQotaW50Ci1tYWluKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGkg
PSAwOwotCXVuc2lnbmVkIGludCB2ZXJzaW9uOwotCXVpbnQ2NF90IGEsIHM7Ci0KLQkvKiBSZWFk
LXNpZGUgbGF0ZW5jeS4gKi8KLQlhID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFMgLyA0OyBp
KyspIHsKLQkJcyA9IHJkdHNjKCk7Ci0JCWNrX3NlcXVlbmNlX3JlYWRfcmV0cnkoJnNlcWxvY2ss
IGNrX3NlcXVlbmNlX3JlYWRfYmVnaW4oJnNlcWxvY2spKTsKLQkJY2tfc2VxdWVuY2VfcmVhZF9y
ZXRyeSgmc2VxbG9jaywgY2tfc2VxdWVuY2VfcmVhZF9iZWdpbigmc2VxbG9jaykpOwotCQlja19z
ZXF1ZW5jZV9yZWFkX3JldHJ5KCZzZXFsb2NrLCBja19zZXF1ZW5jZV9yZWFkX2JlZ2luKCZzZXFs
b2NrKSk7Ci0JCWNrX3NlcXVlbmNlX3JlYWRfcmV0cnkoJnNlcWxvY2ssIGNrX3NlcXVlbmNlX3Jl
YWRfYmVnaW4oJnNlcWxvY2spKTsKLQkJYSArPSByZHRzYygpIC0gczsKLQl9Ci0JcHJpbnRmKCJy
ZWFkOiAlIiBQUkl1NjQgIlxuIiwgYSAvIFNURVBTKTsKLQotCWEgPSAwOwotCWZvciAoaSA9IDA7
IGkgPCBTVEVQUyAvIDQ7IGkrKykgewotCQlzID0gcmR0c2MoKTsKLQkJQ0tfU0VRVUVOQ0VfUkVB
RCgmc2VxbG9jaywgJnZlcnNpb24pOwotCQlDS19TRVFVRU5DRV9SRUFEKCZzZXFsb2NrLCAmdmVy
c2lvbik7Ci0JCUNLX1NFUVVFTkNFX1JFQUQoJnNlcWxvY2ssICZ2ZXJzaW9uKTsKLQkJQ0tfU0VR
VUVOQ0VfUkVBRCgmc2VxbG9jaywgJnZlcnNpb24pOwotCQlhICs9IHJkdHNjKCkgLSBzOwotCX0K
LQlwcmludGYoIlJFQUQgJSIgUFJJdTY0ICJcbiIsIGEgLyBTVEVQUyk7Ci0KLQkvKiBXcml0ZS1z
aWRlIGxhdGVuY3kuICovCi0JYSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNURVBTIC8gNDsgaSsr
KSB7Ci0JCXMgPSByZHRzYygpOwotCQlja19zZXF1ZW5jZV93cml0ZV9iZWdpbigmc2VxbG9jayk7
Ci0JCWNrX3NlcXVlbmNlX3dyaXRlX2VuZCgmc2VxbG9jayk7Ci0JCWNrX3NlcXVlbmNlX3dyaXRl
X2JlZ2luKCZzZXFsb2NrKTsKLQkJY2tfc2VxdWVuY2Vfd3JpdGVfZW5kKCZzZXFsb2NrKTsKLQkJ
Y2tfc2VxdWVuY2Vfd3JpdGVfYmVnaW4oJnNlcWxvY2spOwotCQlja19zZXF1ZW5jZV93cml0ZV9l
bmQoJnNlcWxvY2spOwotCQlja19zZXF1ZW5jZV93cml0ZV9iZWdpbigmc2VxbG9jayk7Ci0JCWNr
X3NlcXVlbmNlX3dyaXRlX2VuZCgmc2VxbG9jayk7Ci0JCWEgKz0gcmR0c2MoKSAtIHM7Ci0JfQot
CXByaW50Zigid3JpdGU6ICUiIFBSSXU2NCAiXG4iLCBhIC8gU1RFUFMpOwotCi0gICAgICAgIHJl
dHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19zZXF1ZW5jZS92YWxpZGF0ZS9NYWtlZmlsZSBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NlcXVlbmNlL3ZhbGlkYXRlL01h
a2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzJlNWJlNGJkOGNlZTE4NDFk
ZTZmMWUyZTNjMjFkNmY5OTE1MTU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25z
L2NrX3NlcXVlbmNlL3ZhbGlkYXRlL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAs
MCBAQAotLlBIT05ZOiBjaGVjayBjbGVhbiBkaXN0cmlidXRpb24KLQotT0JKRUNUUz1ja19zZXF1
ZW5jZQotCi1hbGw6ICQoT0JKRUNUUykKLQotY2tfc2VxdWVuY2U6IGNrX3NlcXVlbmNlLmMgLi4v
Li4vLi4vaW5jbHVkZS9ja19zZXF1ZW5jZS5oCi0JJChDQykgJChDRkxBR1MpIC1vIGNrX3NlcXVl
bmNlIGNrX3NlcXVlbmNlLmMKLQotY2hlY2s6IGFsbAotCS4vY2tfc2VxdWVuY2UgJChDT1JFUykg
MQotCi1jbGVhbjoKLQlybSAtcmYgKn4gKi5vICQoT0JKRUNUUykgKi5kU1lNICouZXhlCi0KLWlu
Y2x1ZGUgLi4vLi4vLi4vYnVpbGQvcmVncmVzc2lvbnMuYnVpbGQKLUNGTEFHUys9JChQVEhSRUFE
X0NGTEFHUykgLURfR05VX1NPVVJDRQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc2VxdWVuY2UvdmFsaWRhdGUvY2tfc2VxdWVuY2Uu
YyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NlcXVl
bmNlL3ZhbGlkYXRlL2NrX3NlcXVlbmNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGUwYmM3MDA5MjRjY2Q0MDU3YTUxNDBmYjBlN2ViODA3ZjBjNDljZjAuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc2VxdWVuY2UvdmFsaWRhdGUvY2tfc2VxdWVuY2UuYwor
KysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEtMjAx
NSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0g
KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
Ci0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8
Y2tfY2MuaD4KLSNpbmNsdWRlIDxja19zZXF1ZW5jZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0j
aW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGli
Lmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIKLQotI2lmbmRlZiBTVEVQUwotI2RlZmlu
ZSBTVEVQUyAxMDAwMDAwCi0jZW5kaWYKLQotc3RydWN0IGV4YW1wbGUgewotICAgICAgICB1bnNp
Z25lZCBpbnQgYTsKLSAgICAgICAgdW5zaWduZWQgaW50IGI7Ci0gICAgICAgIHVuc2lnbmVkIGlu
dCBjOwotfTsKLQotc3RhdGljIHN0cnVjdCBleGFtcGxlIGdsb2JhbCBDS19DQ19DQUNIRUxJTkU7
Ci1zdGF0aWMgY2tfc2VxdWVuY2VfdCBzZXFsb2NrIENLX0NDX0NBQ0hFTElORSA9IENLX1NFUVVF
TkNFX0lOSVRJQUxJWkVSOwotc3RhdGljIHVuc2lnbmVkIGludCBiYXJyaWVyOwotc3RhdGljIHN0
cnVjdCBhZmZpbml0eSBhZmZpbmVyYXRvcjsKLQotc3RhdGljIHZvaWQKLXZhbGlkYXRlKHN0cnVj
dCBleGFtcGxlICpjb3B5KQotewotCi0JaWYgKGNvcHktPmIgIT0gY29weS0+YSArIDEwMDApIHsK
LQkJY2tfZXJyb3IoIkVSUk9SOiBGYWlsZWQgcmVncmVzc2lvbjogY29weS0+YiAoJXUgIT0gJXUg
KyAldSAvICV1KVxuIiwKLQkJICAgIGNvcHktPmIsIGNvcHktPmEsIDEwMDAsIGNvcHktPmEgKyAx
MDAwKTsKLQl9Ci0KLQlpZiAoY29weS0+YyAhPSBjb3B5LT5hICsgY29weS0+YikgewotCQlja19l
cnJvcigiRVJST1I6IEZhaWxlZCByZWdyZXNzaW9uOiBjb3B5LT5jICgldSAhPSAldSArICV1IC8g
JXUpXG4iLAotCQkgICAgY29weS0+YywgY29weS0+YSwgY29weS0+YiwgY29weS0+YSArIGNvcHkt
PmIpOwotCX0KLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgKgotY29uc3VtZXIodm9pZCAq
dW51c2VkIENLX0NDX1VOVVNFRCkKLXsKLSAgICAgICAgc3RydWN0IGV4YW1wbGUgY29weTsKLSAg
ICAgICAgdWludDMyX3QgdmVyc2lvbjsKLSAgICAgICAgdW5zaWduZWQgaW50IHJldHJpZXMgPSAw
OwotICAgICAgICB1bnNpZ25lZCBpbnQgaTsKLQotCXVudXNlZCA9IE5VTEw7Ci0JaWYgKGFmZl9p
dGVyYXRlKCZhZmZpbmVyYXRvcikpIHsKLQkJcGVycm9yKCJFUlJPUjogQ291bGQgbm90IGFmZmlu
ZSB0aHJlYWQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotICAgICAgICB3aGlsZSAo
Y2tfcHJfbG9hZF91aW50KCZiYXJyaWVyKSA9PSAwKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8
IFNURVBTOyBpKyspIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIEF0
dGVtcHQgYSByZWFkIG9mIHRoZSBkYXRhIHN0cnVjdHVyZS4gSWYgdGhlIHN0cnVjdHVyZQotICAg
ICAgICAgICAgICAgICAqIGhhcyBiZWVuIG1vZGlmaWVkIGJldHdlZW4gY2tfc2VxdWVuY2VfcmVh
ZF9iZWdpbiBhbmQKLSAgICAgICAgICAgICAgICAgKiBja19zZXF1ZW5jZV9yZWFkX3JldHJ5IHRo
ZW4gYXR0ZW1wdCBhbm90aGVyIHJlYWQgc2luY2UKLSAgICAgICAgICAgICAgICAgKiB0aGUgZGF0
YSBtYXkgYmUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLgotICAgICAgICAgICAgICAgICAqLwot
ICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSBj
a19zZXF1ZW5jZV9yZWFkX2JlZ2luKCZzZXFsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvcHkuYSA9IGNrX3ByX2xvYWRfdWludCgmZ2xvYmFsLmEpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgY29weS5iID0gY2tfcHJfbG9hZF91aW50KCZnbG9iYWwuYik7Ci0JCQljb3B5LmMgPSBj
a19wcl9sb2FkX3VpbnQoJmdsb2JhbC5jKTsKLQkJCXJldHJpZXMrKzsKLSAgICAgICAgICAgICAg
ICB9IHdoaWxlIChja19zZXF1ZW5jZV9yZWFkX3JldHJ5KCZzZXFsb2NrLCB2ZXJzaW9uKSA9PSB0
cnVlKTsKLQkJdmFsaWRhdGUoJmNvcHkpOwotCi0JCUNLX1NFUVVFTkNFX1JFQUQoJnNlcWxvY2ss
ICZ2ZXJzaW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb3B5LmEgPSBja19wcl9sb2Fk
X3VpbnQoJmdsb2JhbC5hKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkuYiA9IGNrX3By
X2xvYWRfdWludCgmZ2xvYmFsLmIpOwotCQkJY29weS5jID0gY2tfcHJfbG9hZF91aW50KCZnbG9i
YWwuYyk7Ci0JCQlyZXRyaWVzKys7Ci0JCX0KLQkJdmFsaWRhdGUoJmNvcHkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIldSByZXRyaWVzLlxuIiwgcmV0cmllcyAtIFNU
RVBTKTsKLQlja19wcl9kZWNfdWludCgmYmFycmllcik7Ci0gICAgICAgIHJldHVybiAoTlVMTCk7
Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCXB0aHJlYWRfdCAq
dGhyZWFkczsKLSAgICAgICAgdW5zaWduZWQgaW50IGNvdW50ZXIgPSAwOwotCWJvb2wgZmlyc3Qg
PSB0cnVlOwotCWludCBuX3RocmVhZHMsIGk7Ci0KLQlpZiAoYXJnYyAhPSAzKSB7Ci0JCWNrX2Vy
cm9yKCJVc2FnZTogY2tfc2VxdWVuY2UgPG51bWJlciBvZiB0aHJlYWRzPiA8YWZmaW5pdHkgZGVs
dGE+XG4iKTsKLQl9Ci0KLQluX3RocmVhZHMgPSBhdG9pKGFyZ3ZbMV0pOwotCWlmIChuX3RocmVh
ZHMgPD0gMCkgewotCQlja19lcnJvcigiRVJST1I6IE51bWJlciBvZiB0aHJlYWRzIG11c3QgYmUg
Z3JlYXRlciB0aGFuIDBcbiIpOwotCX0KLQotCXRocmVhZHMgPSBtYWxsb2Moc2l6ZW9mKHB0aHJl
YWRfdCkgKiBuX3RocmVhZHMpOwotCWlmICh0aHJlYWRzID09IE5VTEwpIHsKLQkJY2tfZXJyb3Io
IkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aHJlYWRzXG4iKTsKLQl9Ci0K
LQlhZmZpbmVyYXRvci5kZWx0YSA9IGF0b2koYXJndlsyXSk7Ci0JYWZmaW5lcmF0b3IucmVxdWVz
dCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbl90aHJlYWRzOyBpKyspIHsKLQkJaWYgKHB0aHJl
YWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCBOVUxMLCBjb25zdW1lciwgTlVMTCkpIHsKLQkJCWNrX2Vy
cm9yKCJFUlJPUjogRmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQgJWRcbiIsIGkpOwotCQl9Ci0JfQot
Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAg
ICAqIFVwZGF0ZSB0aGUgc2hhcmVkIGRhdGEgaW4gYSBub24tYmxvY2tpbmcgZmFzaGlvbi4KLQkJ
ICogSWYgdGhlIGRhdGEgaXMgbW9kaWZpZWQgYnkgbXVsdGlwbGUgd3JpdGVycyB0aGVuCi0JCSAq
IGNrX3NlcXVlbmNlX3dyaXRlX2JlZ2luIG11c3QgYmUgY2FsbGVkIGFmdGVyIGFjcXVpcmluZwot
CQkgKiB0aGUgYXNzb2NpYXRlZCBsb2NrIGFuZCBja19zZXF1ZW5jZV93cml0ZV9lbmQgbXVzdCBi
ZQotCQkgKiBjYWxsZWQgYmVmb3JlIHJlbGlucXVpc2hpbmcgdGhlIGxvY2suCi0gICAgICAgICAg
ICAgICAgICovCi0gICAgICAgICAgICAgICAgY2tfc2VxdWVuY2Vfd3JpdGVfYmVnaW4oJnNlcWxv
Y2spOwotICAgICAgICAgICAgICAgIGdsb2JhbC5hID0gY291bnRlcisrOwotCQlnbG9iYWwuYiA9
IGdsb2JhbC5hICsgMTAwMDsKLQkJZ2xvYmFsLmMgPSBnbG9iYWwuYiArIGdsb2JhbC5hOwotICAg
ICAgICAgICAgICAgIGNrX3NlcXVlbmNlX3dyaXRlX2VuZCgmc2VxbG9jayk7Ci0KLQkJaWYgKGZp
cnN0ID09IHRydWUpIHsKLQkJCWNrX3ByX3N0b3JlX3VpbnQoJmJhcnJpZXIsIG5fdGhyZWFkcyk7
Ci0JCQlmaXJzdCA9IGZhbHNlOwotCQl9Ci0KLSAgICAgICAgICAgICAgICBjb3VudGVyKys7Ci0J
CWlmIChja19wcl9sb2FkX3VpbnQoJmJhcnJpZXIpID09IDApCi0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHByaW50ZigiJXUgdXBkYXRlcyBtYWRl
LlxuIiwgY291bnRlcik7Ci0gICAgICAgIHJldHVybiAoMCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2Jl
bmNobWFyay9NYWtlZmlsZSBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jl
c3Npb25zL2NrX3NwaW5sb2NrL2JlbmNobWFyay9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggY2EzZTFjZjIwMzgwYTU5NDhjYTBlMmNmZWQyNGM4MGM5YjE4ZTJkNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9iZW5jaG1hcmsvTWFr
ZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0uUEhPTlk6IGFsbCBjbGVhbgot
Ci1PQkpFQ1RTPWNrX3RpY2tldC5USFJPVUdIUFVUIGNrX3RpY2tldC5MQVRFTkNZCQkJXAotCWNr
X21jcy5USFJPVUdIUFVUIGNrX21jcy5MQVRFTkNZCQkJXAotCWNrX2RlYy5USFJPVUdIUFVUIGNr
X2RlYy5MQVRFTkNZCQkJXAotCWNrX2Nhcy5USFJPVUdIUFVUIGNrX2Nhcy5MQVRFTkNZCQkJXAot
CWNrX2Zhcy5USFJPVUdIUFVUIGNrX2Zhcy5MQVRFTkNZCQkJXAotCWNrX2NsaC5USFJPVUdIUFVU
IGNrX2NsaC5MQVRFTkNZCQkJXAotCWxpbnV4X3NwaW5sb2NrLlRIUk9VR0hQVVQgbGludXhfc3Bp
bmxvY2suTEFURU5DWQlcCi0JY2tfdGlja2V0X3BiLlRIUk9VR0hQVVQgY2tfdGlja2V0X3BiLkxB
VEVOQ1kJCVwKLQlja19hbmRlcnNvbi5USFJPVUdIUFVUIGNrX2FuZGVyc29uLkxBVEVOQ1kJCVwK
LQlja19zcGlubG9jay5USFJPVUdIUFVUIGNrX3NwaW5sb2NrLkxBVEVOQ1kJCVwKLQlja19oY2xo
LlRIUk9VR0hQVVQgY2tfaGNsaC5MQVRFTkNZCi0KLWFsbDogJChPQkpFQ1RTKQotCi1ja19zcGlu
bG9jay5USFJPVUdIUFVUOiBja19zcGlubG9jay5jCi0JJChDQykgLURUSFJPVUdIUFVUICQoQ0ZM
QUdTKSAtbyBja19zcGlubG9jay5USFJPVUdIUFVUIGNrX3NwaW5sb2NrLmMgLWxtCi0KLWNrX3Nw
aW5sb2NrLkxBVEVOQ1k6IGNrX3NwaW5sb2NrLmMKLQkkKENDKSAtRExBVEVOQ1kgJChDRkxBR1Mp
IC1vIGNrX3NwaW5sb2NrLkxBVEVOQ1kgY2tfc3BpbmxvY2suYyAtbG0KLQotY2tfdGlja2V0LlRI
Uk9VR0hQVVQ6IGNrX3RpY2tldC5jCi0JJChDQykgLURUSFJPVUdIUFVUICQoQ0ZMQUdTKSAtbyBj
a190aWNrZXQuVEhST1VHSFBVVCBja190aWNrZXQuYyAtbG0KLQotY2tfdGlja2V0LkxBVEVOQ1k6
IGNrX3RpY2tldC5jCi0JJChDQykgLURMQVRFTkNZICQoQ0ZMQUdTKSAtbyBja190aWNrZXQuTEFU
RU5DWSBja190aWNrZXQuYyAtbG0KLQotY2tfbWNzLlRIUk9VR0hQVVQ6IGNrX21jcy5jCi0JJChD
QykgLURUSFJPVUdIUFVUICQoQ0ZMQUdTKSAtbyBja19tY3MuVEhST1VHSFBVVCBja19tY3MuYyAt
bG0KLQotY2tfbWNzLkxBVEVOQ1k6IGNrX21jcy5jCi0JJChDQykgLURMQVRFTkNZICQoQ0ZMQUdT
KSAtbyBja19tY3MuTEFURU5DWSBja19tY3MuYyAtbG0KLQotY2tfZGVjLlRIUk9VR0hQVVQ6IGNr
X2RlYy5jCi0JJChDQykgLURUSFJPVUdIUFVUICQoQ0ZMQUdTKSAtbyBja19kZWMuVEhST1VHSFBV
VCBja19kZWMuYyAtbG0KLQotY2tfZGVjLkxBVEVOQ1k6IGNrX2RlYy5jCi0JJChDQykgLURMQVRF
TkNZICQoQ0ZMQUdTKSAtbyBja19kZWMuTEFURU5DWSBja19kZWMuYyAtbG0KLQotY2tfY2FzLlRI
Uk9VR0hQVVQ6IGNrX2Nhcy5jCi0JJChDQykgLURUSFJPVUdIUFVUICQoQ0ZMQUdTKSAtbyBja19j
YXMuVEhST1VHSFBVVCBja19jYXMuYyAtbG0KLQotY2tfY2FzLkxBVEVOQ1k6IGNrX2Nhcy5jCi0J
JChDQykgLURMQVRFTkNZICQoQ0ZMQUdTKSAtbyBja19jYXMuTEFURU5DWSBja19jYXMuYyAtbG0K
LQotY2tfZmFzLlRIUk9VR0hQVVQ6IGNrX2Zhcy5jCi0JJChDQykgLURUSFJPVUdIUFVUICQoQ0ZM
QUdTKSAtbyBja19mYXMuVEhST1VHSFBVVCBja19mYXMuYyAtbG0KLQotY2tfZmFzLkxBVEVOQ1k6
IGNrX2Zhcy5jCi0JJChDQykgLURMQVRFTkNZICQoQ0ZMQUdTKSAtbyBja19mYXMuTEFURU5DWSBj
a19mYXMuYyAtbG0KLQotY2tfY2xoLlRIUk9VR0hQVVQ6IGNrX2NsaC5jCi0JJChDQykgLURUSFJP
VUdIUFVUICQoQ0ZMQUdTKSAtbyBja19jbGguVEhST1VHSFBVVCBja19jbGguYyAtbG0KLQotY2tf
Y2xoLkxBVEVOQ1k6IGNrX2NsaC5jCi0JJChDQykgLURMQVRFTkNZICQoQ0ZMQUdTKSAtbyBja19j
bGguTEFURU5DWSBja19jbGguYyAtbG0KLQotY2tfaGNsaC5USFJPVUdIUFVUOiBja19oY2xoLmMK
LQkkKENDKSAtRFRIUk9VR0hQVVQgJChDRkxBR1MpIC1vIGNrX2hjbGguVEhST1VHSFBVVCBja19o
Y2xoLmMgLWxtCi0KLWNrX2hjbGguTEFURU5DWTogY2tfaGNsaC5jCi0JJChDQykgLURMQVRFTkNZ
ICQoQ0ZMQUdTKSAtbyBja19oY2xoLkxBVEVOQ1kgY2tfaGNsaC5jIC1sbQotCi1saW51eF9zcGlu
bG9jay5USFJPVUdIUFVUOiBsaW51eF9zcGlubG9jay5jCi0JJChDQykgLURUSFJPVUdIUFVUICQo
Q0ZMQUdTKSAtbyBsaW51eF9zcGlubG9jay5USFJPVUdIUFVUIGxpbnV4X3NwaW5sb2NrLmMgLWxt
Ci0KLWxpbnV4X3NwaW5sb2NrLkxBVEVOQ1k6IGxpbnV4X3NwaW5sb2NrLmMKLQkkKENDKSAtRExB
VEVOQ1kgJChDRkxBR1MpIC1vIGxpbnV4X3NwaW5sb2NrLkxBVEVOQ1kgbGludXhfc3BpbmxvY2su
YyAtbG0KLQotY2tfdGlja2V0X3BiLlRIUk9VR0hQVVQ6IGNrX3RpY2tldF9wYi5jCi0JJChDQykg
LURUSFJPVUdIUFVUICQoQ0ZMQUdTKSAtbyBja190aWNrZXRfcGIuVEhST1VHSFBVVCBja190aWNr
ZXRfcGIuYyAtbG0KLQotY2tfdGlja2V0X3BiLkxBVEVOQ1k6IGNrX3RpY2tldF9wYi5jCi0JJChD
QykgLURMQVRFTkNZICQoQ0ZMQUdTKSAtbyBja190aWNrZXRfcGIuTEFURU5DWSBja190aWNrZXRf
cGIuYyAtbG0KLQotY2tfYW5kZXJzb24uVEhST1VHSFBVVDogY2tfYW5kZXJzb24uYwotCSQoQ0Mp
IC1EVEhST1VHSFBVVCAkKENGTEFHUykgLW8gY2tfYW5kZXJzb24uVEhST1VHSFBVVCBja19hbmRl
cnNvbi5jIC1sbQotCi1ja19hbmRlcnNvbi5MQVRFTkNZOiBja19hbmRlcnNvbi5jCi0JJChDQykg
LURMQVRFTkNZICQoQ0ZMQUdTKSAtbyBja19hbmRlcnNvbi5MQVRFTkNZIGNrX2FuZGVyc29uLmMg
LWxtCi0KLWNsZWFuOgotCXJtIC1yZiAqLmRTWU0gKi5leGUgJChPQkpFQ1RTKQotCi1pbmNsdWRl
IC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxkCi1DRkxBR1MrPSQoUFRIUkVBRF9DRkxB
R1MpIC1EX0dOVV9TT1VSQ0UKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2JlbmNobWFyay9ja19hbmRlcnNvbi5jIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2sv
YmVuY2htYXJrL2NrX2FuZGVyc29uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJm
MWFlY2RjZWZhNDQ4ODMxN2U4OTkwN2U1YmQ3Njk2N2FkNTZlOWEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svYmVuY2htYXJrL2NrX2FuZGVyc29uLmMKKysr
IC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNpbmNsdWRlICIuLi9ja19hbmRlcnNvbi5oIgot
Ci0jaWZkZWYgVEhST1VHSFBVVAotI2luY2x1ZGUgInRocm91Z2hwdXQuaCIKLSNlbGlmIGRlZmlu
ZWQoTEFURU5DWSkKLSNpbmNsdWRlICJsYXRlbmN5LmgiCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2sv
YmVuY2htYXJrL2NrX2Nhcy5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVn
cmVzc2lvbnMvY2tfc3BpbmxvY2svYmVuY2htYXJrL2NrX2Nhcy5jCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5NmJkOWQ4OTg4OTVlZTVlY2U2OWM5OGZiYjNjNzFjODQ1OWQwNzI1Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2JlbmNobWFyay9j
a19jYXMuYworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotI2luY2x1ZGUgIi4uL2NrX2Nh
cy5oIgotCi0jaWZkZWYgVEhST1VHSFBVVAotI2luY2x1ZGUgInRocm91Z2hwdXQuaCIKLSNlbGlm
IGRlZmluZWQoTEFURU5DWSkKLSNpbmNsdWRlICJsYXRlbmN5LmgiCi0jZW5kaWYKLQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3Bp
bmxvY2svYmVuY2htYXJrL2NrX2NsaC5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Y2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svYmVuY2htYXJrL2NrX2NsaC5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkYTcxZDVlMzBmY2Q2NmM3YzlhMDc0OGFjMDIwZTYwMTQzNTQx
NGJlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2JlbmNo
bWFyay9ja19jbGguYworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2luY2x1ZGUgIi4u
L2NrX2NsaC5oIgotCi0jaWZkZWYgVEhST1VHSFBVVAotI2luY2x1ZGUgInRocm91Z2hwdXQuaCIK
LSNlbGlmIGRlZmluZWQoTEFURU5DWSkKLSNpbmNsdWRlICJsYXRlbmN5LmgiCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X3NwaW5sb2NrL2JlbmNobWFyay9ja19kZWMuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2JlbmNobWFyay9ja19kZWMuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1YzExNmUzYmE1ZDAzMTk4NzQ4NzVlNGI5M2RiYWE4
NzRiZjE4Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9i
ZW5jaG1hcmsvY2tfZGVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpbmNsdWRl
ICIuLi9ja19kZWMuaCIKLQotI2lmZGVmIFRIUk9VR0hQVVQKLSNpbmNsdWRlICJ0aHJvdWdocHV0
LmgiCi0jZWxpZiBkZWZpbmVkKExBVEVOQ1kpCi0jaW5jbHVkZSAibGF0ZW5jeS5oIgotI2VuZGlm
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9u
cy9ja19zcGlubG9jay9iZW5jaG1hcmsvY2tfZmFzLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9iZW5jaG1hcmsvY2tfZmFzLmMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NmM5NjQ3M2RiNzc5M2Y1ODAxNDJjMjIwNWU5
NDQ4ZDAyODZkZjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3Bpbmxv
Y2svYmVuY2htYXJrL2NrX2Zhcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaW5j
bHVkZSAiLi4vY2tfZmFzLmgiCi0KLSNpZmRlZiBUSFJPVUdIUFVUCi0jaW5jbHVkZSAidGhyb3Vn
aHB1dC5oIgotI2VsaWYgZGVmaW5lZChMQVRFTkNZKQotI2luY2x1ZGUgImxhdGVuY3kuaCIKLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVz
c2lvbnMvY2tfc3BpbmxvY2svYmVuY2htYXJrL2NrX2hjbGguYyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2JlbmNobWFyay9ja19oY2xo
LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZTQ0M2U4NDk4YzNlOGNjZDFiMjk4
MzE1YzI1ZjU4ZjY3MTY1YWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tf
c3BpbmxvY2svYmVuY2htYXJrL2NrX2hjbGguYworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBA
QAotI2luY2x1ZGUgIi4uL2NrX2hjbGguaCIKLQotI2lmZGVmIFRIUk9VR0hQVVQKLSNpbmNsdWRl
ICJ0aHJvdWdocHV0LmgiCi0jZWxpZiBkZWZpbmVkKExBVEVOQ1kpCi0jaW5jbHVkZSAibGF0ZW5j
eS5oIgotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9iZW5jaG1hcmsvY2tfbWNzLmMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9iZW5jaG1hcmsv
Y2tfbWNzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZTk1ZGVkNWNhNmNlYjA1
YWU1Nzk2NzNkMjIyNzhjMGZkY2IyZmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lv
bnMvY2tfc3BpbmxvY2svYmVuY2htYXJrL2NrX21jcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNyAr
MCwwIEBACi0jaW5jbHVkZSAiLi4vY2tfbWNzLmgiCi0KLSNpZmRlZiBUSFJPVUdIUFVUCi0jaW5j
bHVkZSAidGhyb3VnaHB1dC5oIgotI2VsaWYgZGVmaW5lZChMQVRFTkNZKQotI2luY2x1ZGUgImxh
dGVuY3kuaCIKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svYmVuY2htYXJrL2NrX3NwaW5sb2NrLmMgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9i
ZW5jaG1hcmsvY2tfc3BpbmxvY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM4
NTQxZTlmM2UzZmFhMzJmZDFhNzI0OGUyOWY5YWFlODJlMTBmNS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9iZW5jaG1hcmsvY2tfc3BpbmxvY2suYworKysg
L2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2luY2x1ZGUgIi4uL2NrX3NwaW5sb2NrLmgiCi0K
LSNpZmRlZiBUSFJPVUdIUFVUCi0jaW5jbHVkZSAidGhyb3VnaHB1dC5oIgotI2VsaWYgZGVmaW5l
ZChMQVRFTkNZKQotI2luY2x1ZGUgImxhdGVuY3kuaCIKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svYmVu
Y2htYXJrL2NrX3RpY2tldC5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVn
cmVzc2lvbnMvY2tfc3BpbmxvY2svYmVuY2htYXJrL2NrX3RpY2tldC5jCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwOWM5MTkzYTA3YjU3MmFkNmNkZDMzNDdkODNlYTEyODE3N2E5ZjJh
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2JlbmNobWFy
ay9ja190aWNrZXQuYworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotI2luY2x1ZGUgIi4u
L2NrX3RpY2tldC5oIgotCi0jaWZkZWYgVEhST1VHSFBVVAotI2luY2x1ZGUgInRocm91Z2hwdXQu
aCIKLSNlbGlmIGRlZmluZWQoTEFURU5DWSkKLSNpbmNsdWRlICJsYXRlbmN5LmgiCi0jZW5kaWYK
LQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lv
bnMvY2tfc3BpbmxvY2svYmVuY2htYXJrL2NrX3RpY2tldF9wYi5jIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svYmVuY2htYXJrL2NrX3Rp
Y2tldF9wYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTIyZDZhODgwNjMxZTBj
MTkzMmE1Njk1MzE4MjM4ZDcxN2YxZjYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Np
b25zL2NrX3NwaW5sb2NrL2JlbmNobWFyay9ja190aWNrZXRfcGIuYworKysgL2Rldi9udWxsCkBA
IC0xLDcgKzAsMCBAQAotI2luY2x1ZGUgIi4uL2NrX3RpY2tldF9wYi5oIgotCi0jaWZkZWYgVEhS
T1VHSFBVVAotI2luY2x1ZGUgInRocm91Z2hwdXQuaCIKLSNlbGlmIGRlZmluZWQoTEFURU5DWSkK
LSNpbmNsdWRlICJsYXRlbmN5LmgiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2JlbmNobWFyay9sYXRl
bmN5LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19z
cGlubG9jay9iZW5jaG1hcmsvbGF0ZW5jeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhZmFkY2QyNDg4ODIzMDNkNTVhMzcxNjE4MjFlYjBlOWE1NDhkZmRjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2JlbmNobWFyay9sYXRlbmN5LmgKKysr
IC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEtMjAxNSBT
YW15IEFsIEJhaHJhLgotICogQ29weXJpZ2h0IDIwMTEgRGF2aWQgSm9zZXBoLgotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8Y2tfYnl0ZWxvY2suaD4KLSNpbmNsdWRlIDxj
a19zcGlubG9jay5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4K
LSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi0jaWZu
ZGVmIFNURVBTCi0jZGVmaW5lIFNURVBTIDMwMDAwMDAwCi0jZW5kaWYKLQotTE9DS19ERUZJTkU7
Ci0KLWludAotbWFpbih2b2lkKQotewotCUNLX0NDX1VOVVNFRCB1bnNpZ25lZCBpbnQgbnRociA9
IDE7Ci0KLQkjaWZkZWYgTE9DS19JTklUCi0JTE9DS19JTklUOwotCSNlbmRpZgotCi0JI2lmZGVm
IExPQ0tfU1RBVEUKLQlMT0NLX1NUQVRFOwotCSNlbmRpZgotCi0JdWludDY0X3Qgc19iLCBlX2Is
IGk7Ci0JQ0tfQ0NfVU5VU0VEIGludCBjb3JlID0gMDsKLQotCXNfYiA9IHJkdHNjKCk7Ci0JZm9y
IChpID0gMDsgaSA8IFNURVBTOyArK2kpIHsKLQkJI2lmZGVmIExPQ0sKLQkJTE9DSzsKLQkJVU5M
T0NLOwotCQlMT0NLOwotCQlVTkxPQ0s7Ci0JCUxPQ0s7Ci0JCVVOTE9DSzsKLQkJTE9DSzsKLQkJ
VU5MT0NLOwotCQkjZW5kaWYKLQl9Ci0JZV9iID0gcmR0c2MoKTsKLQlwcmludGYoIiUxNSIgUFJJ
dTY0ICJcbiIsIChlX2IgLSBzX2IpIC8gNCAvIFNURVBTKTsKLQotCXJldHVybiAoMCk7Ci19Ci0K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25z
L2NrX3NwaW5sb2NrL2JlbmNobWFyay9saW51eF9zcGlubG9jay5jIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svYmVuY2htYXJrL2xpbnV4
X3NwaW5sb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NDAxOWJlZTkzMDVi
OWYxZTEzNTRhYjhiMTZmYjUyYzMwOGIzM2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVz
c2lvbnMvY2tfc3BpbmxvY2svYmVuY2htYXJrL2xpbnV4X3NwaW5sb2NrLmMKKysrIC9kZXYvbnVs
bApAQCAtMSw3ICswLDAgQEAKLSNpbmNsdWRlICIuLi9saW51eF9zcGlubG9jay5oIgotCi0jaWZk
ZWYgVEhST1VHSFBVVAotI2luY2x1ZGUgInRocm91Z2hwdXQuaCIKLSNlbGlmIGRlZmluZWQoTEFU
RU5DWSkKLSNpbmNsdWRlICJsYXRlbmN5LmgiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2JlbmNobWFy
ay90aHJvdWdocHV0LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNz
aW9ucy9ja19zcGlubG9jay9iZW5jaG1hcmsvdGhyb3VnaHB1dC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3ODUxYzUwY2ZlNTFjYWRkYmJjNTJiN2IwYzEzZmRjZDk4MzUxOGUyLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2JlbmNobWFyay90
aHJvdWdocHV0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAyMDA4LTIwMTIgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxw
dGhyZWFkLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1
ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0j
aW5jbHVkZSA8c3RyaW5ncy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy90
aW1lLmg+Ci0KLSNpbmNsdWRlIDxja19wci5oPgotI2luY2x1ZGUgPGNrX3NwaW5sb2NrLmg+Ci0K
LSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIKLQotLyogOCEgPSA0MDMyMCwgZXZlbmx5IGRpdmlk
ZSAxIC4uIDggcHJvY2Vzc29yIHdvcmtsb2FkLiAqLwotI2RlZmluZSBXT1JLTE9BRCAoNDAzMjAg
KiAyMDU2KQotCi0jaWZuZGVmIElURVJBVEUKLSNkZWZpbmUgSVRFUkFURSA2NTUzNgotI2VuZGlm
Ci0KLXN0cnVjdCBibG9jayB7Ci0JdW5zaWduZWQgaW50IHRpZDsKLX07Ci0KLXN0YXRpYyBzdHJ1
Y3QgYWZmaW5pdHkgYTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVhZHk7Ci0KLXN0cnVjdCBjb3Vu
dGVycyB7Ci0JdWludDY0X3QgdmFsdWU7Ci19IENLX0NDX0NBQ0hFTElORTsKLQotc3RhdGljIHN0
cnVjdCBjb3VudGVycyAqY291bnQ7Ci1zdGF0aWMgdWludDY0X3QgbnRocjsKLXN0YXRpYyB1bnNp
Z25lZCBpbnQgYmFycmllcjsKLQotaW50IGNyaXRpY2FsIF9fYXR0cmlidXRlX18oKGFsaWduZWQo
NjQpKSk7Ci0KLUxPQ0tfREVGSU5FOwotCi1DS19DQ19VU0VEIHN0YXRpYyB2b2lkCi1nZW5fbG9j
ayh2b2lkKQotewotCUNLX0NDX1VOVVNFRCBpbnQgY29yZSA9IDA7Ci0jaWZkZWYgTE9DS19TVEFU
RQotCUxPQ0tfU1RBVEU7Ci0jZW5kaWYKLQotI2lmZGVmIExPQ0sKLQlMT0NLOwotI2VuZGlmCi19
Ci0KLUNLX0NDX1VTRUQgc3RhdGljIHZvaWQKLWdlbl91bmxvY2sodm9pZCkKLXsKLSNpZmRlZiBM
T0NLX1NUQVRFCi0JTE9DS19TVEFURTsKLSNlbmRpZgotCi0jaWZkZWYgVU5MT0NLCi0JVU5MT0NL
OwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkICoKLWZhaXJuZXNzKHZvaWQgKm51bGwpCi17Ci0j
aWZkZWYgTE9DS19TVEFURQotCUxPQ0tfU1RBVEU7Ci0jZW5kaWYKLQlzdHJ1Y3QgYmxvY2sgKmNv
bnRleHQgPSBudWxsOwotCXVuc2lnbmVkIGludCBpID0gY29udGV4dC0+dGlkOwotCXZvbGF0aWxl
IGludCBqOwotCWxvbmcgaW50IGJhc2U7Ci0JdW5zaWduZWQgaW50IGNvcmU7Ci0KLSAgICAgICAg
aWYgKGFmZl9pdGVyYXRlX2NvcmUoJmEsICZjb3JlKSkgewotICAgICAgICAgICAgICAgIHBlcnJv
cigiRVJST1I6IENvdWxkIG5vdCBhZmZpbmUgdGhyZWFkIik7Ci0gICAgICAgICAgICAgICAgZXhp
dChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZy
ZWFkeSkgPT0gMCk7Ci0KLQlja19wcl9pbmNfdWludCgmYmFycmllcik7Ci0Jd2hpbGUgKGNrX3By
X2xvYWRfdWludCgmYmFycmllcikgIT0gbnRocik7Ci0KLQl3aGlsZSAocmVhZHkpIHsKLQkJTE9D
SzsKLQotCQljb3VudFtpXS52YWx1ZSsrOwotCQlpZiAoY3JpdGljYWwpIHsKLQkJCWJhc2UgPSBj
b21tb25fbHJhbmQ0OCgpICUgY3JpdGljYWw7Ci0JCQlmb3IgKGogPSAwOyBqIDwgYmFzZTsgaisr
KTsKLQkJfQotCi0JCVVOTE9DSzsKLQl9Ci0KLQlyZXR1cm4gKE5VTEwpOwotfQotCi1pbnQKLW1h
aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQl1aW50NjRfdCB2LCBkOwotCXVuc2lnbmVk
IGludCBpOwotCXB0aHJlYWRfdCAqdGhyZWFkczsKLQlzdHJ1Y3QgYmxvY2sgKmNvbnRleHQ7Ci0K
LQlpZiAoYXJnYyAhPSA0KSB7Ci0JCWNrX2Vycm9yKCJVc2FnZTogIiBMT0NLX05BTUUgIiA8bnVt
YmVyIG9mIHRocmVhZHM+IDxhZmZpbml0eSBkZWx0YT4gPGNyaXRpY2FsIHNlY3Rpb24+XG4iKTsK
LQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCW50aHIgPSBhdG9pKGFyZ3ZbMV0pOwotCWlm
IChudGhyIDw9IDApIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBOdW1iZXIgb2YgdGhyZWFkcyBtdXN0
IGJlIGdyZWF0ZXIgdGhhbiAwXG4iKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotI2lm
ZGVmIExPQ0tfSU5JVAotCUxPQ0tfSU5JVDsKLSNlbmRpZgotCi0JY3JpdGljYWwgPSBhdG9pKGFy
Z3ZbM10pOwotCWlmIChjcml0aWNhbCA8IDApIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBjcml0aWNh
bCBzZWN0aW9uIGNhbm5vdCBiZSBuZWdhdGl2ZVxuIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsK
LQl9Ci0KLQl0aHJlYWRzID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocik7Ci0JaWYg
KHRocmVhZHMgPT0gTlVMTCkgewotCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0
ZSB0aHJlYWQgc3RydWN0dXJlc1xuIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQlj
b250ZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmxvY2spICogbnRocik7Ci0JaWYgKGNvbnRl
eHQgPT0gTlVMTCkgewotCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSB0aHJl
YWQgY29udGV4dHNcbiIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JYS5kZWx0YSA9
IGF0b2koYXJndlsyXSk7Ci0JYS5yZXF1ZXN0ID0gMDsKLQotCWNvdW50ID0gbWFsbG9jKHNpemVv
ZigqY291bnQpICogbnRocik7Ci0JaWYgKGNvdW50ID09IE5VTEwpIHsKLQkJY2tfZXJyb3IoIkVS
Uk9SOiBDb3VsZCBub3QgY3JlYXRlIGFjcXVpc2l0aW9uIGJ1ZmZlclxuIik7Ci0JCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKLQl9Ci0JbWVtc2V0KGNvdW50LCAwLCBzaXplb2YoKmNvdW50KSAqIG50aHIp
OwotCi0JZnByaW50ZihzdGRlcnIsICJDcmVhdGluZyB0aHJlYWRzIChmYWlybmVzcykuLi4iKTsK
LQlmb3IgKGkgPSAwOyBpIDwgbnRocjsgaSsrKSB7Ci0JCWNvbnRleHRbaV0udGlkID0gaTsKLQkJ
aWYgKHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCBOVUxMLCBmYWlybmVzcywgY29udGV4dCAr
IGkpKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBjcmVhdGUgdGhyZWFkICVkXG4i
LCBpKTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQotCX0KLQlmcHJpbnRmKHN0ZGVyciwg
ImRvbmVcbiIpOwotCi0JY2tfcHJfc3RvcmVfdWludCgmcmVhZHksIDEpOwotCWNvbW1vbl9zbGVl
cCgxMCk7Ci0JY2tfcHJfc3RvcmVfdWludCgmcmVhZHksIDApOwotCi0JZnByaW50ZihzdGRlcnIs
ICJXYWl0aW5nIGZvciB0aHJlYWRzIHRvIGZpbmlzaCBhY3F1aXNpdGlvbiByZWdyZXNzaW9uLi4u
Iik7Ci0JZm9yIChpID0gMDsgaSA8IG50aHI7IGkrKykKLQkJcHRocmVhZF9qb2luKHRocmVhZHNb
aV0sIE5VTEwpOwotCWZwcmludGYoc3RkZXJyLCAiZG9uZVxuXG4iKTsKLQotCWZvciAoaSA9IDAs
IHYgPSAwOyBpIDwgbnRocjsgaSsrKSB7Ci0JCXByaW50ZigiJWQgJTE1IiBQUkl1NjQgIlxuIiwg
aSwgY291bnRbaV0udmFsdWUpOwotCQl2ICs9IGNvdW50W2ldLnZhbHVlOwotCX0KLQotCXByaW50
ZigiXG4jIHRvdGFsICAgICAgIDogJTE1IiBQUkl1NjQgIlxuIiwgdik7Ci0JcHJpbnRmKCIjIHRo
cm91Z2hwdXQgIDogJTE1IiBQUkl1NjQgIiBhL3NcbiIsICh2IC89IG50aHIpIC8gMTApOwotCi0J
Zm9yIChpID0gMCwgZCA9IDA7IGkgPCBudGhyOyBpKyspCi0JCWQgKz0gKGNvdW50W2ldLnZhbHVl
IC0gdikgKiAoY291bnRbaV0udmFsdWUgLSB2KTsKLQotCXByaW50ZigiIyBhdmVyYWdlICAgICA6
ICUxNSIgUFJJdTY0ICJcbiIsIHYpOwotCXByaW50ZigiIyBkZXZpYXRpb24gICA6ICUuMmYgKCUu
MmYlJSlcblxuIiwgc3FydChkIC8gbnRociksIChzcXJ0KGQgLyBudGhyKSAvIHYpICogMTAwLjAw
KTsKLQotCXJldHVybiAoMCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2NrX2FuZGVyc29uLmggYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9ja19h
bmRlcnNvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGM4ZTZlYWMzZmUxNjY5
OWViZTBjM2JiYzUyNTJiMmY1ZTQ0OWMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Np
b25zL2NrX3NwaW5sb2NrL2NrX2FuZGVyc29uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCww
IEBACi0jZGVmaW5lIE1BWChhLGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCi0jZGVmaW5lIExP
Q0tfTkFNRSAiY2tfYW5kZXJzb24iCi0jZGVmaW5lIExPQ0tfREVGSU5FIHN0YXRpYyBja19zcGlu
bG9ja19hbmRlcnNvbl90IGxvY2sgQ0tfQ0NfQ0FDSEVMSU5FCi0jZGVmaW5lIExPQ0tfU1RBVEUg
Y2tfc3BpbmxvY2tfYW5kZXJzb25fdGhyZWFkX3QgKm5hZCA9IE5VTEwKLSNkZWZpbmUgTE9DSyBj
a19zcGlubG9ja19hbmRlcnNvbl9sb2NrKCZsb2NrLCAmbmFkKQotI2RlZmluZSBVTkxPQ0sgY2tf
c3BpbmxvY2tfYW5kZXJzb25fdW5sb2NrKCZsb2NrLCBuYWQpCi0jZGVmaW5lIExPQ0tfSU5JVCBj
a19zcGlubG9ja19hbmRlcnNvbl9pbml0KCZsb2NrLCBtYWxsb2MoTUFYKDY0LHNpemVvZihja19z
cGlubG9ja19hbmRlcnNvbl90aHJlYWRfdCkpICogbnRociksIG50aHIpCi0jZGVmaW5lIExPQ0tF
RCBja19zcGlubG9ja19hbmRlcnNvbl9sb2NrZWQoJmxvY2spCi0KLSNkZWZpbmUgTk9fTE9DQUwK
LQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lv
bnMvY2tfc3BpbmxvY2svY2tfY2FzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9ja19jYXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYmQ0YWUxMzI1M2RlZmU4ZGRkZTllYzkxM2NmMGFjYzhmMzAwN2U0Yy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9ja19jYXMuaAorKysgL2Rl
di9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2RlZmluZSBMT0NLX05BTUUgImNrX2NhcyIKLSNkZWZp
bmUgTE9DS19ERUZJTkUgc3RhdGljIGNrX3NwaW5sb2NrX2Nhc190IENLX0NDX0NBQ0hFTElORSBs
b2NrID0gQ0tfU1BJTkxPQ0tfQ0FTX0lOSVRJQUxJWkVSCi0jZGVmaW5lIExPQ0sgY2tfc3Bpbmxv
Y2tfY2FzX2xvY2tfZWIoJmxvY2spCi0jZGVmaW5lIFVOTE9DSyBja19zcGlubG9ja19jYXNfdW5s
b2NrKCZsb2NrKQotI2RlZmluZSBMT0NLRUQgY2tfc3BpbmxvY2tfY2FzX2xvY2tlZCgmbG9jaykK
LQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lv
bnMvY2tfc3BpbmxvY2svY2tfY2xoLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9ja19jbGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZGY3ZTQ5ZmJiZGMzOWI4MWY1YTdkOTA3ZjNjNjVmZjEzM2Q3NGJiNS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9ja19jbGguaAorKysgL2Rl
di9udWxsCkBAIC0xLDkgKzAsMCBAQAotI2RlZmluZSBNQVgoYSxiKSAoKGEpID4gKGIpID8gKGEp
IDogKGIpKQotI2RlZmluZSBMT0NLX05BTUUgImNrX2NsaCIKLSNkZWZpbmUgTE9DS19ERUZJTkUg
c3RhdGljIGNrX3NwaW5sb2NrX2NsaF90IENLX0NDX0NBQ0hFTElORSAqbG9jayA9IE5VTEwKLSNk
ZWZpbmUgTE9DS19TVEFURSBja19zcGlubG9ja19jbGhfdCAqbmEgPSBtYWxsb2MoTUFYKHNpemVv
Zihja19zcGlubG9ja19jbGhfdCksIDY0KSkKLSNkZWZpbmUgTE9DSyBja19zcGlubG9ja19jbGhf
bG9jaygmbG9jaywgbmEpCi0jZGVmaW5lIFVOTE9DSyBja19zcGlubG9ja19jbGhfdW5sb2NrKCZu
YSkKLSNkZWZpbmUgTE9DS19JTklUIGNrX3NwaW5sb2NrX2NsaF9pbml0KCZsb2NrLCBtYWxsb2Mo
TUFYKHNpemVvZihja19zcGlubG9ja19jbGhfdCksIDY0KSkpCi0jZGVmaW5lIExPQ0tFRCBja19z
cGlubG9ja19jbGhfbG9ja2VkKCZsb2NrKQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9ja19kZWMuaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2NrX2Rl
Yy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjFhMzkwMTBkNzlmZGY4MTBiY2Rh
Mzg5ZjIzYTI3YjM2OTFkMTI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X3NwaW5sb2NrL2NrX2RlYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jZGVmaW5l
IExPQ0tfTkFNRSAiY2tfZGVjIgotI2RlZmluZSBMT0NLX0RFRklORSBzdGF0aWMgY2tfc3Bpbmxv
Y2tfZGVjX3QgQ0tfQ0NfQ0FDSEVMSU5FIGxvY2sgPSBDS19TUElOTE9DS19ERUNfSU5JVElBTEla
RVIKLSNkZWZpbmUgTE9DSyBja19zcGlubG9ja19kZWNfbG9ja19lYigmbG9jaykKLSNkZWZpbmUg
VU5MT0NLIGNrX3NwaW5sb2NrX2RlY191bmxvY2soJmxvY2spCi0jZGVmaW5lIExPQ0tFRCBja19z
cGlubG9ja19kZWNfbG9ja2VkKCZsb2NrKQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9ja19mYXMuaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2NrX2Zh
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjQ0NzQ2NGVlZDUwODlmOWViNDM3
NTA1ZDBmYTYzNDhmYTg2NTkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X3NwaW5sb2NrL2NrX2Zhcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jZGVmaW5l
IExPQ0tfTkFNRSAiY2tfZmFzIgotI2RlZmluZSBMT0NLX0RFRklORSBzdGF0aWMgY2tfc3Bpbmxv
Y2tfZmFzX3QgQ0tfQ0NfQ0FDSEVMSU5FIGxvY2sgPSBDS19TUElOTE9DS19GQVNfSU5JVElBTEla
RVIKLSNkZWZpbmUgTE9DSyBja19zcGlubG9ja19mYXNfbG9ja19lYigmbG9jaykKLSNkZWZpbmUg
VU5MT0NLIGNrX3NwaW5sb2NrX2Zhc191bmxvY2soJmxvY2spCi0jZGVmaW5lIExPQ0tFRCBja19z
cGlubG9ja19mYXNfbG9ja2VkKCZsb2NrKQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9ja19oY2xoLmggYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9ja19o
Y2xoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMmU2ZWI3YTIwMTliYmRmNGUy
NTYyNDRiZDFkMmFjY2JmNGNlMmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfc3BpbmxvY2svY2tfaGNsaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI2Rl
ZmluZSBNQVgoYSxiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQotI2RlZmluZSBMT0NLX05BTUUg
ImNrX2NsaCIKLSNkZWZpbmUgTE9DS19ERUZJTkUgc3RhdGljIGNrX3NwaW5sb2NrX2hjbGhfdCBD
S19DQ19DQUNIRUxJTkUgKmdsb2JfbG9jazsgXAotCQkgICAgc3RhdGljIGNrX3NwaW5sb2NrX2hj
bGhfdCBDS19DQ19DQUNIRUxJTkUgKmxvY2FsX2xvY2tbQ09SRVMgLyAyXQotI2RlZmluZSBMT0NL
X1NUQVRFIGNrX3NwaW5sb2NrX2hjbGhfdCAqbmEgPSBtYWxsb2MoTUFYKHNpemVvZihja19zcGlu
bG9ja19oY2xoX3QpLCA2NCkpCi0jZGVmaW5lIExPQ0sgY2tfc3BpbmxvY2tfaGNsaF9sb2NrKCZn
bG9iX2xvY2ssICZsb2NhbF9sb2NrWyhjb3JlICUgQ09SRVMpIC8gMl0sIG5hKQotI2RlZmluZSBV
TkxPQ0sgY2tfc3BpbmxvY2tfaGNsaF91bmxvY2soJm5hKQotI2RlZmluZSBMT0NLX0lOSVQgZG8g
ewkJCQkJCQlcCi0JaW50IF9pOwkJCQkJCQkJXAotCWNrX3NwaW5sb2NrX2hjbGhfaW5pdCgmZ2xv
Yl9sb2NrLCBtYWxsb2MoTUFYKHNpemVvZihja19zcGlubG9ja19oY2xoX3QpLCA2NCkpLCAtMSk7
IFwKLQlmb3IgKF9pID0gMDsgX2kgPCBDT1JFUyAvIDI7IF9pKyspIHsJCQkJXAotCQlja19zcGlu
bG9ja19oY2xoX2luaXQoJmxvY2FsX2xvY2tbX2ldLCBtYWxsb2MoTUFYKHNpemVvZihja19zcGlu
bG9ja19oY2xoX3QpLCA2NCkpLCBfaSk7CX0gXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBMT0NL
RUQgY2tfc3BpbmxvY2tfaGNsaF9sb2NrZWQoJmdsb2JfbG9jaykKLQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svY2tf
bWNzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19z
cGlubG9jay9ja19tY3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQxMjdkZmVh
NmJjYTEzMTEwYWU0OTI0YThiZWExZjRlMGEyMWJhZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9y
ZWdyZXNzaW9ucy9ja19zcGlubG9jay9ja19tY3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAs
MCBAQAotI2RlZmluZSBMT0NLX05BTUUgImNrX21jcyIKLSNkZWZpbmUgTE9DS19ERUZJTkUgc3Rh
dGljIGNrX3NwaW5sb2NrX21jc190IENLX0NDX0NBQ0hFTElORSBsb2NrID0gTlVMTAotI2RlZmlu
ZSBMT0NLX1NUQVRFIGNrX3NwaW5sb2NrX21jc19jb250ZXh0X3Qgbm9kZSBDS19DQ19DQUNIRUxJ
TkU7Ci0jZGVmaW5lIExPQ0sgY2tfc3BpbmxvY2tfbWNzX2xvY2soJmxvY2ssICZub2RlKQotI2Rl
ZmluZSBVTkxPQ0sgY2tfc3BpbmxvY2tfbWNzX3VubG9jaygmbG9jaywgJm5vZGUpCi0jZGVmaW5l
IExPQ0tFRCBja19zcGlubG9ja19tY3NfbG9ja2VkKCZsb2NrKQotCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9ja19z
cGlubG9jay5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfc3BpbmxvY2svY2tfc3BpbmxvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OTM4ZTFjZTRmOGU3ZjFjMTUyZDE3ZDUzZWQ3MmViMjUxOTZjOTA4OC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9ja19zcGlubG9jay5oCisrKyAvZGV2L251
bGwKQEAgLTEsNiArMCwwIEBACi0jZGVmaW5lIExPQ0tfTkFNRSAiY2tfc3BpbmxvY2siCi0jZGVm
aW5lIExPQ0tfREVGSU5FIHN0YXRpYyBja19zcGlubG9ja190IENLX0NDX0NBQ0hFTElORSBsb2Nr
ID0gQ0tfU1BJTkxPQ0tfSU5JVElBTElaRVIKLSNkZWZpbmUgTE9DSyBja19zcGlubG9ja19sb2Nr
X2ViKCZsb2NrKQotI2RlZmluZSBVTkxPQ0sgY2tfc3BpbmxvY2tfdW5sb2NrKCZsb2NrKQotI2Rl
ZmluZSBMT0NLRUQgY2tfc3BpbmxvY2tfbG9ja2VkKCZsb2NrKQotCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9ja190
aWNrZXQuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X3NwaW5sb2NrL2NrX3RpY2tldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTA1
NGE2OTc5NzdlY2I1YjgwZmRhMjQzOWIwZWIxMzU2YmIyNDU5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2NrX3RpY2tldC5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTEgKzAsMCBAQAotI2luY2x1ZGUgPGNrX3NwaW5sb2NrLmg+Ci0KLSNkZWZpbmUgTE9DS19O
QU1FICJja190aWNrZXQiCi0jZGVmaW5lIExPQ0tfREVGSU5FIHN0YXRpYyBja19zcGlubG9ja190
aWNrZXRfdCBDS19DQ19DQUNIRUxJTkUgbG9jayA9IENLX1NQSU5MT0NLX1RJQ0tFVF9JTklUSUFM
SVpFUgotI2RlZmluZSBMT0NLIGNrX3NwaW5sb2NrX3RpY2tldF9sb2NrKCZsb2NrKQotI2RlZmlu
ZSBVTkxPQ0sgY2tfc3BpbmxvY2tfdGlja2V0X3VubG9jaygmbG9jaykKLSNpZmRlZiBDS19GX1NQ
SU5MT0NLX1RJQ0tFVF9UUllMT0NLCi0jZGVmaW5lIFRSWUxPQ0sgY2tfc3BpbmxvY2tfdGlja2V0
X3RyeWxvY2soJmxvY2spCi0jZW5kaWYKLSNkZWZpbmUgTE9DS0VEIGNrX3NwaW5sb2NrX3RpY2tl
dF9sb2NrZWQoJmxvY2spCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL2NrX3RpY2tldF9wYi5oIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svY2tfdGlja2V0
X3BiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YTdhODRlYTFmOTZiMDc0NzE2
ZWUxNDkyOGJmZDkzYmFmYjhlZjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfc3BpbmxvY2svY2tfdGlja2V0X3BiLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAK
LSNkZWZpbmUgTE9DS19OQU1FICJja190aWNrZXRfcGIiCi0jZGVmaW5lIExPQ0tfREVGSU5FIHN0
YXRpYyBja19zcGlubG9ja190aWNrZXRfdCBDS19DQ19DQUNIRUxJTkUgbG9jayA9IENLX1NQSU5M
T0NLX1RJQ0tFVF9JTklUSUFMSVpFUgotI2RlZmluZSBMT0NLIGNrX3NwaW5sb2NrX3RpY2tldF9s
b2NrX3BiKCZsb2NrLCAwKQotI2RlZmluZSBVTkxPQ0sgY2tfc3BpbmxvY2tfdGlja2V0X3VubG9j
aygmbG9jaykKLSNkZWZpbmUgTE9DS0VEIGNrX3NwaW5sb2NrX3RpY2tldF9sb2NrZWQoJmxvY2sp
Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Np
b25zL2NrX3NwaW5sb2NrL2xpbnV4X3NwaW5sb2NrLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay9saW51eF9zcGlubG9jay5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmUxZjNlMjFlZjcyODA1YzMzMWE2NGEyOGFkMzMx
MWQyNDU1ODcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2Nr
L2xpbnV4X3NwaW5sb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jaW5jbHVk
ZSA8Y2tfY2MuaD4KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1zcGluX2xvY2sodm9sYXRp
bGUgdW5zaWduZWQgaW50ICpsb2NrKQotewotI2lmZGVmIF9feDg2XzY0X18KLSAgICAgICAgICAg
IF9fYXNtX18gX192b2xhdGlsZV9fKAotICAgICAgICAgICAgICAgICAgICAiXG4xOlx0IgotICAg
ICAgICAgICAgICAgICAgICAibG9jayA7IGRlY2wgJTBcblx0IgotICAgICAgICAgICAgICAgICAg
ICAiam5zIDJmXG4iCi0gICAgICAgICAgICAgICAgICAgICIzOlxuIgotICAgICAgICAgICAgICAg
ICAgICAicmVwO25vcFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICJjbXBsICQwLCUwXG5cdCIK
LSAgICAgICAgICAgICAgICAgICAgImpsZSAzYlxuXHQiCi0gICAgICAgICAgICAgICAgICAgICJq
bXAgMWJcbiIKLSAgICAgICAgICAgICAgICAgICAgIjI6XHQiIDogIj1tIiAoKmxvY2spIDogOiAi
bWVtb3J5Iik7Ci0jZWxzZQotCSpsb2NrID0gMTsKLSNlbmRpZgotCi0gICAgICAgICAgcmV0dXJu
OwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQKLXNwaW5fdW5sb2NrKHZvbGF0aWxlIHVu
c2lnbmVkIGludCAqbG9jaykKLXsKLSNpZmRlZiBfX3g4Nl82NF9fCi0gICAgICAgIF9fYXNtX18g
X192b2xhdGlsZV9fKCJtb3ZsICQxLCUwIiA6Ij1tIiAoKmxvY2spIDo6ICJtZW1vcnkiKTsKLSNl
bHNlCi0JKmxvY2sgPSAwOwotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLX0KLQotI2RlZmluZSBM
T0NLX05BTUUgImxpbnV4X3NwaW5sb2NrIgotI2RlZmluZSBMT0NLX0RFRklORSB2b2xhdGlsZSB1
bnNpZ25lZCBpbnQgbG9jayA9IDEKLSNkZWZpbmUgTE9DSyBzcGluX2xvY2soJmxvY2spCi0jZGVm
aW5lIFVOTE9DSyBzcGluX3VubG9jaygmbG9jaykKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svdmFsaWRhdGUvTWFr
ZWZpbGUgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19z
cGlubG9jay92YWxpZGF0ZS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjFkN2NiYTFmN2M5NzM5ZmViMDY2YTA0ZjliZjZkNjMzNTMyM2Q2ZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay92YWxpZGF0ZS9NYWtlZmlsZQorKysgL2Rl
di9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS5QSE9OWTogY2hlY2sgY2xlYW4KLQotYWxsOiBja190
aWNrZXQgY2tfbWNzIGNrX2RlYyBja19jYXMgY2tfZmFzIGNrX2NsaCBsaW51eF9zcGlubG9jayBc
Ci0gICAgIGNrX3RpY2tldF9wYiBja19hbmRlcnNvbiBja19zcGlubG9jayBja19oY2xoCi0KLWNo
ZWNrOiBhbGwKLQkuL2NrX3RpY2tldCAkKENPUkVTKSAxCi0JLi9ja19tY3MgJChDT1JFUykgMQot
CS4vY2tfZGVjICQoQ09SRVMpIDEKLQkuL2NrX2NhcyAkKENPUkVTKSAxCi0JLi9ja19mYXMgJChD
T1JFUykgMQotCS4vY2tfY2xoICQoQ09SRVMpIDEKLQkuL2NrX2hjbGggJChDT1JFUykgMQotCS4v
bGludXhfc3BpbmxvY2sgJChDT1JFUykgMQotCS4vY2tfdGlja2V0X3BiICQoQ09SRVMpIDEKLQku
L2NrX2FuZGVyc29uICQoQ09SRVMpIDEKLQkuL2NrX3NwaW5sb2NrICQoQ09SRVMpIDEKLQotbGlu
dXhfc3BpbmxvY2s6IGxpbnV4X3NwaW5sb2NrLmMKLQkkKENDKSAkKENGTEFHUykgLW8gbGludXhf
c3BpbmxvY2sgbGludXhfc3BpbmxvY2suYwotCi1ja19zcGlubG9jazogY2tfc3BpbmxvY2suYwot
CSQoQ0MpICQoQ0ZMQUdTKSAtbyBja19zcGlubG9jayBja19zcGlubG9jay5jCi0KLWNrX3RpY2tl
dF9wYjogY2tfdGlja2V0X3BiLmMKLQkkKENDKSAkKENGTEFHUykgLW8gY2tfdGlja2V0X3BiIGNr
X3RpY2tldF9wYi5jCi0KLWNrX2NsaDogY2tfY2xoLmMKLQkkKENDKSAkKENGTEFHUykgLW8gY2tf
Y2xoIGNrX2NsaC5jCi0KLWNrX2hjbGg6IGNrX2hjbGguYwotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBj
a19oY2xoIGNrX2hjbGguYwotCi1ja19hbmRlcnNvbjogY2tfYW5kZXJzb24uYwotCSQoQ0MpICQo
Q0ZMQUdTKSAtbyBja19hbmRlcnNvbiBja19hbmRlcnNvbi5jCi0KLWNrX2ZhczogY2tfZmFzLmMK
LQkkKENDKSAkKENGTEFHUykgLW8gY2tfZmFzIGNrX2Zhcy5jCi0KLWNrX3RpY2tldDogY2tfdGlj
a2V0LmMKLQkkKENDKSAkKENGTEFHUykgLW8gY2tfdGlja2V0IGNrX3RpY2tldC5jCi0KLWNrX2Nh
czogY2tfY2FzLmMKLQkkKENDKSAkKENGTEFHUykgLW8gY2tfY2FzIGNrX2Nhcy5jCi0KLWNrX21j
czogY2tfbWNzLmMKLQkkKENDKSAkKENGTEFHUykgLW8gY2tfbWNzIGNrX21jcy5jCi0KLWNrX2Rl
YzogY2tfZGVjLmMKLQkkKENDKSAkKENGTEFHUykgLW8gY2tfZGVjIGNrX2RlYy5jCi0KLWNsZWFu
OgotCXJtIC1yZiBja190aWNrZXQgY2tfbWNzIGNrX2RlYyBja19jYXMgY2tfZmFzIGNrX2NsaCBs
aW51eF9zcGlubG9jayBja190aWNrZXRfcGIgXAotCQlja19hbmRlcnNvbiBja19zcGlubG9jayBj
a19oY2xoICouZFNZTSAqLmV4ZQotCi1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25z
LmJ1aWxkCi1DRkxBR1MrPSQoUFRIUkVBRF9DRkxBR1MpIC1EX0dOVV9TT1VSQ0UgLWxtCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19z
cGlubG9jay92YWxpZGF0ZS9ja19hbmRlcnNvbi5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svdmFsaWRhdGUvY2tfYW5kZXJzb24uYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwOTAwY2U4MTVlMDAwMzE0MTNiZDAwNWVj
NjFmYzYxODFiN2U4My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlu
bG9jay92YWxpZGF0ZS9ja19hbmRlcnNvbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBA
Ci0jaW5jbHVkZSAiLi4vY2tfYW5kZXJzb24uaCIKLSNpbmNsdWRlICJ2YWxpZGF0ZS5oIgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tf
c3BpbmxvY2svdmFsaWRhdGUvY2tfY2FzLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay92YWxpZGF0ZS9ja19jYXMuYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyNDkwYTFlYjE2OTJmOTY1MzQ2OGZmZTAzNjc2ZmU1ZjJj
YmY2Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay92YWxp
ZGF0ZS9ja19jYXMuYworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotI2luY2x1ZGUgIi4u
L2NrX2Nhcy5oIgotI2luY2x1ZGUgInZhbGlkYXRlLmgiCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay92YWxpZGF0ZS9j
a19jbGguYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X3NwaW5sb2NrL3ZhbGlkYXRlL2NrX2NsaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxOWNiNTEyZGVhYzg4MDEwMGRiYjQ0NjBhMmRmYjZjOTRlOGMwNzg4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL3ZhbGlkYXRlL2NrX2NsaC5jCisrKyAv
ZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jaW5jbHVkZSAiLi4vY2tfY2xoLmgiCi0jaW5jbHVk
ZSAidmFsaWRhdGUuaCIKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL3ZhbGlkYXRlL2NrX2RlYy5jIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svdmFsaWRhdGUv
Y2tfZGVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMzUxZGUyY2U2ODkxNzZi
YWJiNzkwNTM2MDU0MjM2ZGM4Zjc5YTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lv
bnMvY2tfc3BpbmxvY2svdmFsaWRhdGUvY2tfZGVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyICsw
LDAgQEAKLSNpbmNsdWRlICIuLi9ja19kZWMuaCIKLSNpbmNsdWRlICJ2YWxpZGF0ZS5oIgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tf
c3BpbmxvY2svdmFsaWRhdGUvY2tfZmFzLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay92YWxpZGF0ZS9ja19mYXMuYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNWNmNDA3MTQ5YWJhZjNjZDkxZmE0MzE2ZDU5YzYwZDIwYWQ1
ZGJhNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay92YWxp
ZGF0ZS9ja19mYXMuYworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotI2luY2x1ZGUgIi4u
L2NrX2Zhcy5oIgotI2luY2x1ZGUgInZhbGlkYXRlLmgiCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay92YWxpZGF0ZS9j
a19oY2xoLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9j
a19zcGlubG9jay92YWxpZGF0ZS9ja19oY2xoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMWY1N2JkMjc4MjE5Y2UxZGFiYTU1MDlkZjg1MDcyNDQwNmZiOWUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svdmFsaWRhdGUvY2tfaGNsaC5jCisr
KyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jaW5jbHVkZSAiLi4vY2tfaGNsaC5oIgotI2lu
Y2x1ZGUgInZhbGlkYXRlLmgiCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay92YWxpZGF0ZS9ja19tY3MuYyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL3ZhbGlk
YXRlL2NrX21jcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWRhZDQzNjQ0MDdk
OWY0YjdkMmQxMTkwNmFiODkxNGMyZGVmNmMyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jl
c3Npb25zL2NrX3NwaW5sb2NrL3ZhbGlkYXRlL2NrX21jcy5jCisrKyAvZGV2L251bGwKQEAgLTEs
MiArMCwwIEBACi0jaW5jbHVkZSAiLi4vY2tfbWNzLmgiCi0jaW5jbHVkZSAidmFsaWRhdGUuaCIK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25z
L2NrX3NwaW5sb2NrL3ZhbGlkYXRlL2NrX3NwaW5sb2NrLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zcGlubG9jay92YWxpZGF0ZS9ja19zcGlubG9j
ay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjgyOTA1ZmVlNTVjZWFmYmRjMjky
N2NhY2NlNTUwZDJhMzA0OGIwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X3NwaW5sb2NrL3ZhbGlkYXRlL2NrX3NwaW5sb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyICsw
LDAgQEAKLSNpbmNsdWRlICIuLi9ja19zcGlubG9jay5oIgotI2luY2x1ZGUgInZhbGlkYXRlLmgi
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9u
cy9ja19zcGlubG9jay92YWxpZGF0ZS9ja190aWNrZXQuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL3ZhbGlkYXRlL2NrX3RpY2tldC5j
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTY3MjU0ZWVlZWM2YzU4MjllOGJjMDc0
MzBlYjA4MDhmYTFmYzg3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3Nw
aW5sb2NrL3ZhbGlkYXRlL2NrX3RpY2tldC5jCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBA
Ci0jaW5jbHVkZSAiLi4vY2tfdGlja2V0LmgiCi0jaW5jbHVkZSAidmFsaWRhdGUuaCIKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3Nw
aW5sb2NrL3ZhbGlkYXRlL2NrX3RpY2tldF9wYi5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svdmFsaWRhdGUvY2tfdGlja2V0X3BiLmMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2MmVlMGVjNjk0MWVhMTdiYTJkN2ZmNTYx
ZjZhZTIxYzZjZjdkYzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3Bp
bmxvY2svdmFsaWRhdGUvY2tfdGlja2V0X3BiLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAg
QEAKLSNpbmNsdWRlICIuLi9ja190aWNrZXRfcGIuaCIKLSNpbmNsdWRlICJ2YWxpZGF0ZS5oIgpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfc3BpbmxvY2svdmFsaWRhdGUvbGludXhfc3BpbmxvY2suYyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3NwaW5sb2NrL3ZhbGlkYXRlL2xpbnV4X3Nw
aW5sb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MWU0MTliMDRjMjU5YWYz
ZjRiMzdhOGMxNGE2ZjYxZWVjMzkzYjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lv
bnMvY2tfc3BpbmxvY2svdmFsaWRhdGUvbGludXhfc3BpbmxvY2suYworKysgL2Rldi9udWxsCkBA
IC0xLDE0ICswLDAgQEAKLSNpZmRlZiBfX3g4Nl82NF9fCi0jaW5jbHVkZSAiLi4vbGludXhfc3Bp
bmxvY2suaCIKLSNpbmNsdWRlICJ2YWxpZGF0ZS5oIgotI2Vsc2UKLSNpbmNsdWRlIDxzdGRpby5o
PgotCi1pbnQKLW1haW4odm9pZCkKLXsKLQotCWZwcmludGYoc3RkZXJyLCAiVW5zdXBwb3J0ZWQu
XG4iKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svdmFsaWRhdGUvdmFsaWRh
dGUuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3Nw
aW5sb2NrL3ZhbGlkYXRlL3ZhbGlkYXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGRmNDA1ODQ4NzFhNmRkZGFhYjRjMjgxZGIxY2Y5YzAyOWYzMmRhODEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3BpbmxvY2svdmFsaWRhdGUvdmFsaWRhdGUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEtMjAxNSBT
YW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0g
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
Ci0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8ZXJy
bm8uaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNs
dWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNp
bmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jaW5jbHVkZSA8dW5pc3Rk
Lmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotI2luY2x1ZGUgPGNrX2NjLmg+Ci0jaW5jbHVk
ZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19zcGlubG9jay5oPgotCi0jaW5jbHVkZSAiLi4vLi4v
Y29tbW9uLmgiCi0KLSNpZm5kZWYgSVRFUkFURQotI2RlZmluZSBJVEVSQVRFIDEwMDAwMDAKLSNl
bmRpZgotCi1zdHJ1Y3QgYmxvY2sgewotCXVuc2lnbmVkIGludCB0aWQ7Ci19OwotCi1zdGF0aWMg
c3RydWN0IGFmZmluaXR5IGE7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGxvY2tlZCA9IDA7Ci1zdGF0
aWMgdWludDY0X3QgbnRocjsKLQotTE9DS19ERUZJTkU7Ci0KLXN0YXRpYyB2b2lkICoKLXRocmVh
ZCh2b2lkICpudWxsIENLX0NDX1VOVVNFRCkKLXsKLSNpZmRlZiBMT0NLX1NUQVRFCi0JTE9DS19T
VEFURTsKLSNlbmRpZgotCXVuc2lnbmVkIGludCBpID0gSVRFUkFURTsKLQl1bnNpZ25lZCBpbnQg
ajsKLQl1bnNpZ25lZCBpbnQgY29yZTsKLQotICAgICAgICBpZiAoYWZmX2l0ZXJhdGVfY29yZSgm
YSwgJmNvcmUpKSB7Ci0gICAgICAgICAgICAgICAgcGVycm9yKCJFUlJPUjogQ291bGQgbm90IGFm
ZmluZSB0aHJlYWQiKTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAg
ICAgIH0KLQotCXdoaWxlIChpLS0pIHsKLSNpZmRlZiBUUllMT0NLCi0JCWlmIChpICYgMSkgewot
CQkJTE9DSzsKLQkJfSBlbHNlIHsKLQkJCXdoaWxlIChUUllMT0NLID09IGZhbHNlKQotCQkJCWNr
X3ByX3N0YWxsKCk7Ci0JCX0KLSNlbHNlCi0JCUxPQ0s7Ci0jZW5kaWYKLQotI2lmZGVmIExPQ0tF
RAotCQlpZiAoTE9DS0VEID09IGZhbHNlKQotCQkJY2tfZXJyb3IoImlzX2xvY2tlZCBvcGVyYXRp
b24gZmFpbGVkLiIpOwotI2VuZGlmCi0KLQkJY2tfcHJfc3RvcmVfdWludCgmbG9ja2VkLCBsb2Nr
ZWQgKyAxKTsKLQkJY2tfcHJfc3RvcmVfdWludCgmbG9ja2VkLCBsb2NrZWQgKyAxKTsKLQkJY2tf
cHJfc3RvcmVfdWludCgmbG9ja2VkLCBsb2NrZWQgKyAxKTsKLQkJY2tfcHJfc3RvcmVfdWludCgm
bG9ja2VkLCBsb2NrZWQgKyAxKTsKLQkJY2tfcHJfc3RvcmVfdWludCgmbG9ja2VkLCBsb2NrZWQg
KyAxKTsKLQkJY2tfcHJfc3RvcmVfdWludCgmbG9ja2VkLCBsb2NrZWQgKyAxKTsKLQkJY2tfcHJf
c3RvcmVfdWludCgmbG9ja2VkLCBsb2NrZWQgKyAxKTsKLQkJY2tfcHJfc3RvcmVfdWludCgmbG9j
a2VkLCBsb2NrZWQgKyAxKTsKLQkJY2tfcHJfc3RvcmVfdWludCgmbG9ja2VkLCBsb2NrZWQgKyAx
KTsKLQkJY2tfcHJfc3RvcmVfdWludCgmbG9ja2VkLCBsb2NrZWQgKyAxKTsKLQotCQlqID0gY2tf
cHJfbG9hZF91aW50KCZsb2NrZWQpOwotCi0JCWlmIChqICE9IDEwKSB7Ci0JCQlja19lcnJvcigi
RVJST1IgKFdSKTogUmFjZSBjb25kaXRpb24gKCV1KVxuIiwgaik7Ci0JCQlleGl0KEVYSVRfRkFJ
TFVSRSk7Ci0JCX0KLQotCQlja19wcl9zdG9yZV91aW50KCZsb2NrZWQsIGxvY2tlZCAtIDEpOwot
CQlja19wcl9zdG9yZV91aW50KCZsb2NrZWQsIGxvY2tlZCAtIDEpOwotCQlja19wcl9zdG9yZV91
aW50KCZsb2NrZWQsIGxvY2tlZCAtIDEpOwotCQlja19wcl9zdG9yZV91aW50KCZsb2NrZWQsIGxv
Y2tlZCAtIDEpOwotCQlja19wcl9zdG9yZV91aW50KCZsb2NrZWQsIGxvY2tlZCAtIDEpOwotCQlj
a19wcl9zdG9yZV91aW50KCZsb2NrZWQsIGxvY2tlZCAtIDEpOwotCQlja19wcl9zdG9yZV91aW50
KCZsb2NrZWQsIGxvY2tlZCAtIDEpOwotCQlja19wcl9zdG9yZV91aW50KCZsb2NrZWQsIGxvY2tl
ZCAtIDEpOwotCQlja19wcl9zdG9yZV91aW50KCZsb2NrZWQsIGxvY2tlZCAtIDEpOwotCQlja19w
cl9zdG9yZV91aW50KCZsb2NrZWQsIGxvY2tlZCAtIDEpOwotCi0JCVVOTE9DSzsKLQkJTE9DSzsK
LQotCQlqID0gY2tfcHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQlpZiAoaiAhPSAwKSB7Ci0JCQlj
a19lcnJvcigiRVJST1IgKFJEKTogUmFjZSBjb25kaXRpb24gKCV1KVxuIiwgaik7Ci0JCQlleGl0
KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQotCQlVTkxPQ0s7Ci0JfQotCi0JcmV0dXJuIChOVUxMKTsK
LX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JdWludDY0X3QgaTsK
LQlwdGhyZWFkX3QgKnRocmVhZHM7Ci0KLQlpZiAoYXJnYyAhPSAzKSB7Ci0JCWNrX2Vycm9yKCJV
c2FnZTogIiBMT0NLX05BTUUgIiA8bnVtYmVyIG9mIHRocmVhZHM+IDxhZmZpbml0eSBkZWx0YT5c
biIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCi0JbnRociA9IGF0b2koYXJndlsxXSk7
Ci0JaWYgKG50aHIgPD0gMCkgewotCQlja19lcnJvcigiRVJST1I6IE51bWJlciBvZiB0aHJlYWRz
IG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcbiIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQot
Ci0jaWZkZWYgTE9DS19JTklUCi0JTE9DS19JTklUOwotI2VuZGlmCi0KLQl0aHJlYWRzID0gbWFs
bG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocik7Ci0JaWYgKHRocmVhZHMgPT0gTlVMTCkgewot
CQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSB0aHJlYWQgc3RydWN0dXJlc1xu
Iik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0KLQlhLmRlbHRhID0gYXRvaShhcmd2WzJd
KTsKLQlhLnJlcXVlc3QgPSAwOwotCi0JZnByaW50ZihzdGRlcnIsICJDcmVhdGluZyB0aHJlYWRz
IChtdXR1YWwgZXhjbHVzaW9uKS4uLiIpOwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspIHsK
LQkJaWYgKHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCBOVUxMLCB0aHJlYWQsIE5VTEwpKSB7
Ci0JCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBjcmVhdGUgdGhyZWFkICUiIFBSSXU2NCAi
XG4iLCBpKTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQotCX0KLQlmcHJpbnRmKHN0ZGVy
ciwgImRvbmVcbiIpOwotCi0JZnByaW50ZihzdGRlcnIsICJXYWl0aW5nIGZvciB0aHJlYWRzIHRv
IGZpbmlzaCBjb3JyZWN0bmVzcyByZWdyZXNzaW9uLi4uIik7Ci0JZm9yIChpID0gMDsgaSA8IG50
aHI7IGkrKykKLQkJcHRocmVhZF9qb2luKHRocmVhZHNbaV0sIE5VTEwpOwotCWZwcmludGYoc3Rk
ZXJyLCAiZG9uZSAocGFzc2VkKVxuIik7Ci0KLQlyZXR1cm4gKDApOwotfQotCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zdGFjay9i
ZW5jaG1hcmsvTWFrZWZpbGUgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdy
ZXNzaW9ucy9ja19zdGFjay9iZW5jaG1hcmsvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDZlMmRmMmEzYThhNWZmYWEyZDc5Yzc2NDRjMGJlZGFmZGNjMjM1NTguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3RhY2svYmVuY2htYXJrL01ha2VmaWxl
CisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLlBIT05ZOiBjbGVhbiBkaXN0cmlidXRp
b24KLQotT0JKRUNUUz1sYXRlbmN5Ci0KLWFsbDogJChPQkpFQ1RTKQotCi1sYXRlbmN5OiBsYXRl
bmN5LmMKLQkkKENDKSAkKENGTEFHUykgLW8gbGF0ZW5jeSBsYXRlbmN5LmMKLQotY2xlYW46Ci0J
cm0gLXJmICp+ICoubyAqLmRTWU0gKi5leGUgJChPQkpFQ1RTKQotCi1pbmNsdWRlIC4uLy4uLy4u
L2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxkCi1DRkxBR1MrPSQoUFRIUkVBRF9DRkxBR1MpIC1EX0dO
VV9TT1VSQ0UKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3Jl
Z3Jlc3Npb25zL2NrX3N0YWNrL2JlbmNobWFyay9sYXRlbmN5LmMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zdGFjay9iZW5jaG1hcmsvbGF0ZW5jeS5j
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjcxNTFjMDJiMGJhZWZjZDQ0YWY3NTk2
MzY1NThlNjZlNWVlYmM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3N0
YWNrL2JlbmNobWFyay9sYXRlbmN5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGNrX3N0YWNrLmg+Ci0jaW5jbHVkZSA8Y2tfc3Bpbmxv
Y2suaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1
ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIKLQotI2lmbmRlZiBFTlRS
SUVTCi0jZGVmaW5lIEVOVFJJRVMgNDA5NgotI2VuZGlmCi0KLSNpZm5kZWYgU1RFUFMKLSNkZWZp
bmUgU1RFUFMgNDAwMDAKLSNlbmRpZgotCi0vKgotICogTm90ZSB0aGUgcmVkdW5kYW50IHBvc3Qt
aW5jcmVtZW50IG9mIHIuIFRoaXMgaXMgdG8gc2lsZW5jZQotICogc29tZSBpcnJlbGV2YW50IEdD
QyB3YXJuaW5ncy4KLSAqLwotCi1zdGF0aWMgY2tfc3RhY2tfdCBzdGFjayBDS19DQ19DQUNIRUxJ
TkU7Ci0KLWludAotbWFpbih2b2lkKQotewotCWNrX3N0YWNrX2VudHJ5X3QgZW50cnlbRU5UUklF
U107Ci0JY2tfc3BpbmxvY2tfZmFzX3QgbXV0ZXggPSBDS19TUElOTE9DS19GQVNfSU5JVElBTEla
RVI7Ci0Jdm9sYXRpbGUgY2tfc3RhY2tfZW50cnlfdCAqIHZvbGF0aWxlIHI7Ci0JdWludDY0X3Qg
cywgZSwgYTsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgajsKLQotCWEgPSAwOwot
CWZvciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0JCWNrX3N0YWNrX2luaXQoJnN0YWNrKTsK
LQotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChqID0gMDsgaiA8IEVOVFJJRVM7IGorKykgewotCQkJ
Y2tfc3BpbmxvY2tfZmFzX2xvY2soJm11dGV4KTsKLQkJCWNrX3N0YWNrX3B1c2hfc3BuYygmc3Rh
Y2ssIGVudHJ5ICsgaik7Ci0JCQlja19zcGlubG9ja19mYXNfdW5sb2NrKCZtdXRleCk7Ci0JCX0K
LQkJZSA9IHJkdHNjKCk7Ci0KLQkJYSArPSBlIC0gczsKLQl9Ci0JcHJpbnRmKCIgICAgIHNwaW5s
b2NrX3B1c2g6ICUxNiIgUFJJdTY0ICJcbiIsIGEgLyBTVEVQUyAvIEVOVFJJRVMpOwotCi0JYSA9
IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNURVBTOyBpKyspIHsKLQkJY2tfc3RhY2tfaW5pdCgmc3Rh
Y2spOwotCi0JCWZvciAoaiA9IDA7IGogPCBFTlRSSUVTOyBqKyspCi0JCQlja19zdGFja19wdXNo
X3NwbmMoJnN0YWNrLCBlbnRyeSArIGopOwotCi0JCXMgPSByZHRzYygpOwotCQlmb3IgKGogPSAw
OyBqIDwgRU5UUklFUzsgaisrKSB7Ci0JCQlja19zcGlubG9ja19mYXNfbG9jaygmbXV0ZXgpOwot
CQkJciA9IGNrX3N0YWNrX3BvcF9ucHNjKCZzdGFjayk7Ci0JCQlja19zcGlubG9ja19mYXNfdW5s
b2NrKCZtdXRleCk7Ci0JCX0KLQkJZSA9IHJkdHNjKCk7Ci0JCWEgKz0gZSAtIHM7Ci0JfQotCXBy
aW50ZigiICAgICAgc3BpbmxvY2tfcG9wOiAlMTYiIFBSSXU2NCAiXG4iLCBhIC8gU1RFUFMgLyBF
TlRSSUVTKTsKLQlyKys7Ci0KLSNpZmRlZiBDS19GX1NUQUNLX1BVU0hfVVBNQwotCWEgPSAwOwot
CWZvciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0JCWNrX3N0YWNrX2luaXQoJnN0YWNrKTsK
LQotCQlzID0gcmR0c2MoKTsKLQkJZm9yIChqID0gMDsgaiA8IEVOVFJJRVM7IGorKykKLQkJCWNr
X3N0YWNrX3B1c2hfdXBtYygmc3RhY2ssIGVudHJ5ICsgaik7Ci0JCWUgPSByZHRzYygpOwotCi0J
CWEgKz0gZSAtIHM7Ci0JfQotCXByaW50ZigiY2tfc3RhY2tfcHVzaF91cG1jOiAlMTYiIFBSSXU2
NCAiXG4iLCBhIC8gU1RFUFMgLyBFTlRSSUVTKTsKLSNlbmRpZiAvKiBDS19GX1NUQUNLX1BVU0hf
VVBNQyAqLwotCi0jaWZkZWYgQ0tfRl9TVEFDS19QVVNIX01QTUMKLQlhID0gMDsKLQlmb3IgKGkg
PSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19zdGFja19pbml0KCZzdGFjayk7Ci0KLQkJcyA9
IHJkdHNjKCk7Ci0JCWZvciAoaiA9IDA7IGogPCBFTlRSSUVTOyBqKyspCi0JCQlja19zdGFja19w
dXNoX21wbWMoJnN0YWNrLCBlbnRyeSArIGopOwotCQllID0gcmR0c2MoKTsKLQotCQlhICs9IGUg
LSBzOwotCX0KLQlwcmludGYoImNrX3N0YWNrX3B1c2hfbXBtYzogJTE2IiBQUkl1NjQgIlxuIiwg
YSAvIFNURVBTIC8gRU5UUklFUyk7Ci0jZW5kaWYgLyogQ0tfRl9TVEFDS19QVVNIX01QTUMgKi8K
LQotI2lmZGVmIENLX0ZfU1RBQ0tfUFVTSF9NUE5DCi0JYSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8
IFNURVBTOyBpKyspIHsKLQkJY2tfc3RhY2tfaW5pdCgmc3RhY2spOwotCi0JCXMgPSByZHRzYygp
OwotCQlmb3IgKGogPSAwOyBqIDwgRU5UUklFUzsgaisrKQotCQkJY2tfc3RhY2tfcHVzaF9tcG5j
KCZzdGFjaywgZW50cnkgKyBqKTsKLQkJZSA9IHJkdHNjKCk7Ci0KLQkJYSArPSBlIC0gczsKLQl9
Ci0JcHJpbnRmKCJja19zdGFja19wdXNoX21wbmM6ICUxNiIgUFJJdTY0ICJcbiIsIGEgLyBTVEVQ
UyAvIEVOVFJJRVMpOwotI2VuZGlmIC8qIENLX0ZfU1RBQ0tfUFVTSF9NUE5DICovCi0KLSNpZiBk
ZWZpbmVkKENLX0ZfU1RBQ0tfUFVTSF9VUE1DKSAmJiBkZWZpbmVkKENLX0ZfU1RBQ0tfUE9QX1VQ
TUMpCi0JYSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNURVBTOyBpKyspIHsKLQkJY2tfc3RhY2tf
aW5pdCgmc3RhY2spOwotCi0JCWZvciAoaiA9IDA7IGogPCBFTlRSSUVTOyBqKyspCi0JCQlja19z
dGFja19wdXNoX3VwbWMoJnN0YWNrLCBlbnRyeSArIGopOwotCi0JCXMgPSByZHRzYygpOwotCQlm
b3IgKGogPSAwOyBqIDwgRU5UUklFUzsgaisrKQotCQkJciA9IGNrX3N0YWNrX3BvcF91cG1jKCZz
dGFjayk7Ci0JCWUgPSByZHRzYygpOwotCQlhICs9IGUgLSBzOwotCX0KLQlwcmludGYoIiBja19z
dGFja19wb3BfdXBtYzogJTE2IiBQUkl1NjQgIlxuIiwgYSAvIFNURVBTIC8gKHNpemVvZihlbnRy
eSkgLyBzaXplb2YoKmVudHJ5KSkpOwotI2VuZGlmIC8qIENLX0ZfU1RBQ0tfUFVTSF9VUE1DICYm
IENLX0ZfU1RBQ0tfUE9QX1VQTUMgKi8KLQotI2lmIGRlZmluZWQoQ0tfRl9TVEFDS19QT1BfTVBN
QykgJiYgZGVmaW5lZChDS19GX1NUQUNLX1BVU0hfTVBNQykKLQlhID0gMDsKLQlmb3IgKGkgPSAw
OyBpIDwgU1RFUFM7IGkrKykgewotCQlja19zdGFja19pbml0KCZzdGFjayk7Ci0KLQkJZm9yIChq
ID0gMDsgaiA8IEVOVFJJRVM7IGorKykKLQkJCWNrX3N0YWNrX3B1c2hfbXBtYygmc3RhY2ssIGVu
dHJ5ICsgaik7Ci0KLQkJcyA9IHJkdHNjKCk7Ci0JCWZvciAoaiA9IDA7IGogPCBFTlRSSUVTOyBq
KyspCi0JCQlyID0gY2tfc3RhY2tfcG9wX21wbWMoJnN0YWNrKTsKLQkJZSA9IHJkdHNjKCk7Ci0J
CWEgKz0gZSAtIHM7Ci0JfQotCXByaW50ZigiIGNrX3N0YWNrX3BvcF9tcG1jOiAlMTYiIFBSSXU2
NCAiXG4iLCBhIC8gU1RFUFMgLyAoc2l6ZW9mKGVudHJ5KSAvIHNpemVvZigqZW50cnkpKSk7Ci0J
cisrOwotI2VuZGlmCi0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3N0YWNrL3ZhbGlkYXRlL01ha2VmaWxl
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3RhY2sv
dmFsaWRhdGUvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxOWRjYTFl
YzE3MjBkODA3MzlmODA5ZGE1NDk2MWExNzljNjgzOTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2sv
cmVncmVzc2lvbnMvY2tfc3RhY2svdmFsaWRhdGUvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAt
MSw1NiArMCwwIEBACi0uUEhPTlk6IGNoZWNrIGNsZWFuIGRpc3RyaWJ1dGlvbgotCi1PQkpFQ1RT
PXNlcmlhbCBtcG5jX3B1c2ggbXBtY19wdXNoIHVwbWNfcHVzaCBzcGlubG9ja19wdXNoIHNwaW5s
b2NrX2ViX3B1c2ggXAotCW1wbWNfcG9wIHVwbWNfcG9wIHNwaW5sb2NrX3BvcCBzcGlubG9ja19l
Yl9wb3AJCQkgICAgXAotCXVwbWNfdHJ5cG9wIG1wbWNfdHJ5cG9wIG1wbWNfdHJ5cGFpcgkJCQkg
ICAgXAotCW1wbWNfcGFpciBzcGlubG9ja19wYWlyIHNwaW5sb2NrX2ViX3BhaXIgcHRocmVhZHNf
cGFpcgkJICAgIFwKLQltcG1jX3RyeXB1c2ggdXBtY190cnlwdXNoCi0KLWFsbDogJChPQkpFQ1RT
KQotCi1jaGVjazogYWxsCi0JLi9zZXJpYWwKLQkuL21wbWNfcGFpciAkKENPUkVTKSAxIDAKLQku
L3VwbWNfdHJ5cG9wICQoQ09SRVMpIDEgMAotCS4vbXBtY190cnlwb3AgJChDT1JFUykgMSAwCi0J
Li9tcG1jX3RyeXBhaXIgJChDT1JFUykgMSAwCi0JLi9tcG1jX3BvcCAkKENPUkVTKSAxIDAKLQku
L3VwbWNfcG9wICQoQ09SRVMpIDEgMAotCS4vbXBuY19wdXNoICQoQ09SRVMpIDEgMAotCS4vbXBt
Y19wdXNoICQoQ09SRVMpIDEgMAotCS4vdXBtY19wdXNoICQoQ09SRVMpIDEgMAotCS4vbXBtY190
cnlwdXNoICQoQ09SRVMpIDEgMAotCS4vdXBtY190cnlwdXNoICQoQ09SRVMpIDEgMAotCi1zZXJp
YWw6IHNlcmlhbC5jCi0JJChDQykgJChDRkxBR1MpIC1vIHNlcmlhbCBzZXJpYWwuYwotCi1tcG1j
X3RyeXB1c2ggdXBtY190cnlwdXNoIG1wbmNfcHVzaCBtcG1jX3B1c2ggdXBtY19wdXNoIHNwaW5s
b2NrX3B1c2ggc3BpbmxvY2tfZWJfcHVzaDogcHVzaC5jCi0JJChDQykgLURUUllVUE1DICQoQ0ZM
QUdTKSAtbyB1cG1jX3RyeXB1c2ggcHVzaC5jCi0JJChDQykgLURUUllNUE1DICQoQ0ZMQUdTKSAt
byBtcG1jX3RyeXB1c2ggcHVzaC5jCi0JJChDQykgLURNUE5DICQoQ0ZMQUdTKSAtbyBtcG5jX3B1
c2ggcHVzaC5jCi0JJChDQykgLURNUE1DICQoQ0ZMQUdTKSAtbyBtcG1jX3B1c2ggcHVzaC5jCi0J
JChDQykgLURVUE1DICQoQ0ZMQUdTKSAtbyB1cG1jX3B1c2ggcHVzaC5jCi0JJChDQykgLURTUElO
TE9DSyAkKENGTEFHUykgLW8gc3BpbmxvY2tfcHVzaCBwdXNoLmMKLQkkKENDKSAtRFNQSU5MT0NL
IC1ERUIgJChDRkxBR1MpIC1vIHNwaW5sb2NrX2ViX3B1c2ggcHVzaC5jCi0KLXVwbWNfdHJ5cG9w
IG1wbWNfdHJ5cG9wIG1wbWNfcG9wIHRyeXVwbWNfcG9wIHVwbWNfcG9wIHNwaW5sb2NrX3BvcCBz
cGlubG9ja19lYl9wb3A6IHBvcC5jCi0JJChDQykgLURUUllNUE1DICQoQ0ZMQUdTKSAtbyBtcG1j
X3RyeXBvcCBwb3AuYwotCSQoQ0MpIC1EVFJZVVBNQyAkKENGTEFHUykgLW8gdXBtY190cnlwb3Ag
cG9wLmMKLQkkKENDKSAtRE1QTUMgJChDRkxBR1MpIC1vIG1wbWNfcG9wIHBvcC5jCi0JJChDQykg
LURVUE1DICQoQ0ZMQUdTKSAtbyB1cG1jX3BvcCBwb3AuYwotCSQoQ0MpIC1EU1BJTkxPQ0sgJChD
RkxBR1MpIC1vIHNwaW5sb2NrX3BvcCBwb3AuYwotCSQoQ0MpIC1ERUIgLURTUElOTE9DSyAkKENG
TEFHUykgLW8gc3BpbmxvY2tfZWJfcG9wIHBvcC5jCi0KLW1wbWNfdHJ5cGFpciBtcG1jX3BhaXIg
c3BpbmxvY2tfcGFpciBzcGlubG9ja19lYl9wYWlyIHB0aHJlYWRzX3BhaXI6IHBhaXIuYwotCSQo
Q0MpIC1EVFJZTVBNQyAkKENGTEFHUykgLW8gbXBtY190cnlwYWlyIHBhaXIuYwotCSQoQ0MpIC1E
TVBNQyAkKENGTEFHUykgLW8gbXBtY19wYWlyIHBhaXIuYwotCSQoQ0MpIC1EU1BJTkxPQ0sgJChD
RkxBR1MpIC1vIHNwaW5sb2NrX3BhaXIgcGFpci5jCi0JJChDQykgLURFQiAtRFNQSU5MT0NLICQo
Q0ZMQUdTKSAtbyBzcGlubG9ja19lYl9wYWlyIHBhaXIuYwotCSQoQ0MpIC1EUFRIUkVBRFMgJChD
RkxBR1MpIC1vIHB0aHJlYWRzX3BhaXIgcGFpci5jCi0KLWNsZWFuOgotCXJtIC1yZiAqfiAqLm8g
Ki5kU1lNICouZXhlICQoT0JKRUNUUykKLQotaW5jbHVkZSAuLi8uLi8uLi9idWlsZC9yZWdyZXNz
aW9ucy5idWlsZAotQ0ZMQUdTKz0kKFBUSFJFQURfQ0ZMQUdTKSAtRF9HTlVfU09VUkNFCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19z
dGFjay92YWxpZGF0ZS9wYWlyLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9y
ZWdyZXNzaW9ucy9ja19zdGFjay92YWxpZGF0ZS9wYWlyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGMwZjFiYjFhNTMyZmE2M2Q5OTY2YTBjMWVjMGY0ZjI5MDc4MWQyNzQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3RhY2svdmFsaWRhdGUvcGFpci5jCisr
KyAvZGV2L251bGwKQEAgLTEsMjQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOSBTYW15
IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0g
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8YXNzZXJ0
Lmg+Ci0jaW5jbHVkZSA8Y2tfY2MuaD4KLSNpbmNsdWRlIDxja19wci5oPgotI2lmZGVmIFNQSU5M
T0NLCi0jaW5jbHVkZSA8Y2tfc3BpbmxvY2suaD4KLSNlbmRpZgotI2luY2x1ZGUgPGNrX3N0YWNr
Lmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxz
dGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1
ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHVuaXN0ZC5o
PgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNpZm5kZWYgSVRFTVMKLSNkZWZpbmUg
SVRFTVMgKDU3NjU3NjApCi0jZW5kaWYKLQotI2RlZmluZSBUVlRPRCh0dikgKCh0dikudHZfc2Vj
KygodHYpLnR2X3VzZWMgLyAoZG91YmxlKTEwMDAwMDApKQotCi1zdHJ1Y3QgZW50cnkgewotCWlu
dCB2YWx1ZTsKLSNpZiBkZWZpbmVkKFNQSU5MT0NLKSB8fCBkZWZpbmVkKFBUSFJFQURTKQotCXN0
cnVjdCBlbnRyeSAqbmV4dDsKLSNlbHNlCi0JY2tfc3RhY2tfZW50cnlfdCBuZXh0OwotI2VuZGlm
Ci19IENLX0NDX0NBQ0hFTElORTsKLQotI2lmZGVmIFNQSU5MT0NLCi1zdGF0aWMgc3RydWN0IGVu
dHJ5ICpzdGFjayBDS19DQ19DQUNIRUxJTkU7Ci1ja19zcGlubG9ja19mYXNfdCBzdGFja19zcGlu
bG9jayA9IENLX1NQSU5MT0NLX0ZBU19JTklUSUFMSVpFUjsKLSNkZWZpbmUgVU5MT0NLIGNrX3Nw
aW5sb2NrX2Zhc191bmxvY2sKLSNpZiBkZWZpbmVkKEVCKQotI2RlZmluZSBMT0NLIGNrX3NwaW5s
b2NrX2Zhc19sb2NrX2ViCi0jZWxzZQotI2RlZmluZSBMT0NLIGNrX3NwaW5sb2NrX2Zhc19sb2Nr
Ci0jZW5kaWYKLSNlbGlmIGRlZmluZWQoUFRIUkVBRFMpCi1zdGF0aWMgc3RydWN0IGVudHJ5ICpz
dGFjayBDS19DQ19DQUNIRUxJTkU7Ci1wdGhyZWFkX211dGV4X3Qgc3RhY2tfc3BpbmxvY2sgPSBQ
VEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwotI2RlZmluZSBMT0NLIHB0aHJlYWRfbXV0ZXhfbG9j
awotI2RlZmluZSBVTkxPQ0sgcHRocmVhZF9tdXRleF91bmxvY2sKLSNlbHNlCi1zdGF0aWMgY2tf
c3RhY2tfdCBzdGFjayBDS19DQ19DQUNIRUxJTkU7Ci1DS19TVEFDS19DT05UQUlORVIoc3RydWN0
IGVudHJ5LCBuZXh0LCBnZXR2YWx1ZSkKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IGFmZmluaXR5
IGFmZmluZXJhdG9yOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBudGhyOwotc3RhdGljIHZv
bGF0aWxlIHVuc2lnbmVkIGludCBiYXJyaWVyID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY3Jp
dGljYWw7Ci0KLXN0YXRpYyB2b2lkICoKLXN0YWNrX3RocmVhZCh2b2lkICpidWZmZXIpCi17Ci0j
aWYgKGRlZmluZWQoTVBNQykgJiYgZGVmaW5lZChDS19GX1NUQUNLX1BPUF9NUE1DKSkgfHwgKGRl
ZmluZWQoVVBNQykgJiYgZGVmaW5lZChDS19GX1NUQUNLX1BPUF9VUE1DKSkgfHwgKGRlZmluZWQo
VFJZVVBNQykgJiYgZGVmaW5lZChDS19GX1NUQUNLX1RSWVBPUF9VUE1DKSkgfHwgKGRlZmluZWQo
VFJZTVBNQykgJiYgZGVmaW5lZChDS19GX1NUQUNLX1RSWVBPUF9NUE1DKSkKLQlja19zdGFja19l
bnRyeV90ICpyZWY7Ci0jZW5kaWYKLQlzdHJ1Y3QgZW50cnkgKmVudHJ5ID0gYnVmZmVyOwotCXVu
c2lnbmVkIGxvbmcgbG9uZyBpLCBuID0gSVRFTVM7Ci0JdW5zaWduZWQgaW50IHNlZWQ7Ci0JaW50
IGo7Ci0KLQlpZiAoYWZmX2l0ZXJhdGUoJmFmZmluZXJhdG9yKSkgewotCQlwZXJyb3IoIkVSUk9S
OiBmYWlsZWQgdG8gYWZmaW5lIHRocmVhZCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQot
Ci0Jd2hpbGUgKGJhcnJpZXIgPT0gMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0j
aWYgZGVmaW5lZChNUE1DKQotICAgICAgICAgICAgICAgIGNrX3N0YWNrX3B1c2hfbXBtYygmc3Rh
Y2ssICZlbnRyeS0+bmV4dCk7Ci0jZWxpZiBkZWZpbmVkKFRSWU1QTUMpCi0JCXdoaWxlIChja19z
dGFja190cnlwdXNoX21wbWMoJnN0YWNrLCAmZW50cnktPm5leHQpID09IGZhbHNlKQotCQkJY2tf
cHJfc3RhbGwoKTsKLSNlbGlmIGRlZmluZWQoVVBNQykKLSAgICAgICAgICAgICAgICBja19zdGFj
a19wdXNoX3VwbWMoJnN0YWNrLCAmZW50cnktPm5leHQpOwotI2VsaWYgZGVmaW5lZChUUllVUE1D
KQotCQl3aGlsZSAoY2tfc3RhY2tfdHJ5cHVzaF91cG1jKCZzdGFjaywgJmVudHJ5LT5uZXh0KSA9
PSBmYWxzZSkKLQkJCWNrX3ByX3N0YWxsKCk7Ci0jZWxpZiBkZWZpbmVkKFNQSU5MT0NLKSB8fCBk
ZWZpbmVkKFBUSFJFQURTKQotCQlMT0NLKCZzdGFja19zcGlubG9jayk7Ci0JCWNrX3ByX3N0b3Jl
X3B0cigmZW50cnktPm5leHQsIHN0YWNrKTsKLQkJY2tfcHJfc3RvcmVfcHRyKCZzdGFjaywgZW50
cnkpOwotCQlVTkxPQ0soJnN0YWNrX3NwaW5sb2NrKTsKLSNlbHNlCi0jICAgICAgICAgICAgICAg
ZXJyb3IgVW5kZWZpbmVkIG9wZXJhdGlvbi4KLSNlbmRpZgotCi0JCWlmIChjcml0aWNhbCkgewot
CQkJaiA9IGNvbW1vbl9yYW5kX3IoJnNlZWQpICUgY3JpdGljYWw7Ci0JCQl3aGlsZSAoai0tKQot
CQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCIiIDo6OiAibWVtb3J5Iik7Ci0JCX0KLQotI2lmIGRl
ZmluZWQoTVBNQykKLSNpZmRlZiBDS19GX1NUQUNLX1BPUF9NUE1DCi0JCXJlZiA9IGNrX3N0YWNr
X3BvcF9tcG1jKCZzdGFjayk7Ci0JCWVudHJ5ID0gZ2V0dmFsdWUocmVmKTsKLSNlbmRpZgotI2Vs
aWYgZGVmaW5lZChUUllNUE1DKQotI2lmZGVmIENLX0ZfU1RBQ0tfVFJZUE9QX01QTUMKLQkJd2hp
bGUgKGNrX3N0YWNrX3RyeXBvcF9tcG1jKCZzdGFjaywgJnJlZikgPT0gZmFsc2UpCi0JCQlja19w
cl9zdGFsbCgpOwotCQllbnRyeSA9IGdldHZhbHVlKHJlZik7Ci0jZW5kaWYgLyogQ0tfRl9TVEFD
S19UUllQT1BfTVBNQyAqLwotI2VsaWYgZGVmaW5lZChVUE1DKQotCQlyZWYgPSBja19zdGFja19w
b3BfdXBtYygmc3RhY2spOwotCQllbnRyeSA9IGdldHZhbHVlKHJlZik7Ci0jZWxpZiBkZWZpbmVk
KFNQSU5MT0NLKSB8fCBkZWZpbmVkKFBUSFJFQURTKQotCQlMT0NLKCZzdGFja19zcGlubG9jayk7
Ci0JCWVudHJ5ID0gc3RhY2s7Ci0JCXN0YWNrID0gc3RhY2stPm5leHQ7Ci0JCVVOTE9DSygmc3Rh
Y2tfc3BpbmxvY2spOwotI2Vsc2UKLSMJCWVycm9yIFVuZGVmaW5lZCBvcGVyYXRpb24uCi0jZW5k
aWYKLQl9Ci0KLQlyZXR1cm4gKE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotc3RhY2tfYXNzZXJ0
KHZvaWQpCi17Ci0KLSNpZiBkZWZpbmVkKFNQSU5MT0NLKSB8fCBkZWZpbmVkKFBUSFJFQURTKQot
CWFzc2VydChzdGFjayA9PSBOVUxMKTsKLSNlbHNlCi0JYXNzZXJ0KENLX1NUQUNLX0lTRU1QVFko
JnN0YWNrKSk7Ci0jZW5kaWYKLQlyZXR1cm47Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hh
ciAqYXJndltdKQotewotCXN0cnVjdCBlbnRyeSAqYnVja2V0OwotCXVuc2lnbmVkIGxvbmcgbG9u
ZyBpLCBkOwotCXB0aHJlYWRfdCAqdGhyZWFkOwotCXN0cnVjdCB0aW1ldmFsIHN0diwgZXR2Owot
Ci0jaWYgKGRlZmluZWQoVFJZTVBNQykgfHwgZGVmaW5lZChNUE1DKSkgJiYgKCFkZWZpbmVkKENL
X0ZfU1RBQ0tfUFVTSF9NUE1DKSB8fCAhZGVmaW5lZChDS19GX1NUQUNLX1BPUF9NUE1DKSkKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJVbnN1cHBvcnRlZC5cbiIpOwotICAgICAgICByZXR1cm4g
MDsKLSNlbmRpZgotCi0JaWYgKGFyZ2MgIT0gNCkgewotCQlja19lcnJvcigiVXNhZ2U6IHN0YWNr
IDx0aHJlYWRzPiA8ZGVsdGE+IDxjcml0aWNhbD5cbiIpOwotCX0KLQotCXsKLQkJY2hhciAqZTsK
LQotCQludGhyID0gc3RydG9sKGFyZ3ZbMV0sICZlLCAxMCk7Ci0JCWlmIChlcnJubyA9PSBFUkFO
R0UpIHsKLQkJCXBlcnJvcigiRVJST1I6IHRvbyBtYW55IHRocmVhZHMiKTsKLQkJCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKLQkJfSBlbHNlIGlmICgqZSAhPSAnXDAnKSB7Ci0JCQlja19lcnJvcigiRVJS
T1I6IGlucHV0IGZvcm1hdCBpcyBpbmNvcnJlY3RcbiIpOwotCQl9Ci0KLQkJZCA9IHN0cnRvbChh
cmd2WzJdLCAmZSwgMTApOwotCQlpZiAoZXJybm8gPT0gRVJBTkdFKSB7Ci0JCQlwZXJyb3IoIkVS
Uk9SOiBkZWx0YSBpcyB0b28gbGFyZ2UiKTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfSBl
bHNlIGlmICgqZSAhPSAnXDAnKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IGlucHV0IGZvcm1hdCBp
cyBpbmNvcnJlY3RcbiIpOwotCQl9Ci0KLQkJY3JpdGljYWwgPSBzdHJ0b3VsKGFyZ3ZbM10sICZl
LCAxMCk7Ci0JCWlmIChlcnJubyA9PSBFUkFOR0UpIHsKLQkJCXBlcnJvcigiRVJST1I6IGNyaXRp
Y2FsIHNlY3Rpb24gaXMgdG9vIGxhcmdlIik7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCX0g
ZWxzZSBpZiAoKmUgIT0gJ1wwJykgewotCQkJY2tfZXJyb3IoIkVSUk9SOiBpbnB1dCBmb3JtYXQg
aXMgaW5jb3JyZWN0XG4iKTsKLQkJfQotCX0KLQotCXNyYW5kKGdldHBpZCgpKTsKLQotCWFmZmlu
ZXJhdG9yLnJlcXVlc3QgPSAwOwotCWFmZmluZXJhdG9yLmRlbHRhID0gZDsKLQotCWJ1Y2tldCA9
IG1hbGxvYyhzaXplb2Yoc3RydWN0IGVudHJ5KSAqIG50aHIpOwotCWFzc2VydChidWNrZXQgIT0g
TlVMTCk7Ci0KLQl0aHJlYWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyKTsKLQlh
c3NlcnQodGhyZWFkICE9IE5VTEwpOwotCi0JZm9yIChpID0gMDsgaSA8IG50aHI7IGkrKykKLQkJ
cHRocmVhZF9jcmVhdGUoJnRocmVhZFtpXSwgTlVMTCwgc3RhY2tfdGhyZWFkLCBidWNrZXQgKyBp
KTsKLQotCWJhcnJpZXIgPSAxOwotCi0JZm9yIChpID0gMDsgaSA8IG50aHI7IGkrKykKLQkJcHRo
cmVhZF9qb2luKHRocmVhZFtpXSwgTlVMTCk7Ci0KLQliYXJyaWVyID0gMDsKLQotCWZvciAoaSA9
IDA7IGkgPCBudGhyOyBpKyspCi0JCXB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRbaV0sIE5VTEwsIHN0
YWNrX3RocmVhZCwgYnVja2V0ICsgaSk7Ci0KLQljb21tb25fZ2V0dGltZW9mZGF5KCZzdHYsIE5V
TEwpOwotCWJhcnJpZXIgPSAxOwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspCi0JCXB0aHJl
YWRfam9pbih0aHJlYWRbaV0sIE5VTEwpOwotCWNvbW1vbl9nZXR0aW1lb2ZkYXkoJmV0diwgTlVM
TCk7Ci0KLQlzdGFja19hc3NlcnQoKTsKLSNpZmRlZiBfV0lOMzIKLQlwcmludGYoIiUzbGx1ICUu
NmZcbiIsIG50aHIsIFRWVE9EKGV0dikgLSBUVlRPRChzdHYpKTsKLSNlbHNlCi0JcHJpbnRmKCIl
M2xsdSAlLjZsZlxuIiwgbnRociwgVFZUT0QoZXR2KSAtIFRWVE9EKHN0dikpOwotI2VuZGlmCi0J
cmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9yZWdyZXNzaW9ucy9ja19zdGFjay92YWxpZGF0ZS9wb3AuYyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3N0YWNrL3ZhbGlkYXRlL3BvcC5jCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDY5ZDQyYTg0MTVmYWU5NzUxMmEwNTdjY2RhZWNk
ZDM1MzQ2NGJlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3N0YWNrL3Zh
bGlkYXRlL3BvcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgMjAwOS0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBB
TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICog
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAq
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNr
X3ByLmg+Ci0jaWZkZWYgU1BJTkxPQ0sKLSNpbmNsdWRlIDxja19zcGlubG9jay5oPgotI2VuZGlm
Ci0jaW5jbHVkZSA8Y2tfc3RhY2suaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGxp
bWl0cy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVk
ZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+
Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIKLQotI2lm
bmRlZiBJVEVNUwotI2RlZmluZSBJVEVNUyAoNTc2NTc2MCAqIDIpCi0jZW5kaWYKLQotI2RlZmlu
ZSBUVlRPRCh0dikgKCh0dikudHZfc2VjKygodHYpLnR2X3VzZWMgLyAoZG91YmxlKTEwMDAwMDAp
KQotCi1zdHJ1Y3QgZW50cnkgewotCWludCB2YWx1ZTsKLSNpZmRlZiBTUElOTE9DSwotCXN0cnVj
dCBlbnRyeSAqbmV4dDsKLSNlbHNlCi0JY2tfc3RhY2tfZW50cnlfdCBuZXh0OwotI2VuZGlmCi19
OwotCi0jaWZkZWYgU1BJTkxPQ0sKLXN0YXRpYyBzdHJ1Y3QgZW50cnkgKnN0YWNrIENLX0NDX0NB
Q0hFTElORTsKLWNrX3NwaW5sb2NrX2Zhc190IHN0YWNrX3NwaW5sb2NrID0gQ0tfU1BJTkxPQ0tf
RkFTX0lOSVRJQUxJWkVSOwotI2RlZmluZSBVTkxPQ0sgY2tfc3BpbmxvY2tfZmFzX3VubG9jawot
I2lmIGRlZmluZWQoRUIpCi0jZGVmaW5lIExPQ0sgY2tfc3BpbmxvY2tfZmFzX2xvY2tfZWIKLSNl
bHNlCi0jZGVmaW5lIExPQ0sgY2tfc3BpbmxvY2tfZmFzX2xvY2sKLSNlbmRpZgotI2Vsc2UKLXN0
YXRpYyBja19zdGFja190IHN0YWNrIENLX0NDX0NBQ0hFTElORTsKLUNLX1NUQUNLX0NPTlRBSU5F
UihzdHJ1Y3QgZW50cnksIG5leHQsIGdldHZhbHVlKQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3Qg
YWZmaW5pdHkgYWZmaW5lcmF0b3IgPSBBRkZJTklUWV9JTklUSUFMSVpFUjsKLXN0YXRpYyB1bnNp
Z25lZCBsb25nIGxvbmcgbnRocjsKLXN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYmFycmll
ciA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGNyaXRpY2FsOwotCi1zdGF0aWMgdm9pZCAqCi1z
dGFja190aHJlYWQodm9pZCAqdW51c2VkIENLX0NDX1VOVVNFRCkKLXsKLSNpZiAoZGVmaW5lZChN
UE1DKSAmJiBkZWZpbmVkKENLX0ZfU1RBQ0tfUE9QX01QTUMpKSB8fCAoZGVmaW5lZChVUE1DKSAm
JiBkZWZpbmVkKENLX0ZfU1RBQ0tfUE9QX1VQTUMpKSB8fCAoZGVmaW5lZChUUllNUE1DKSAmJiBk
ZWZpbmVkKENLX0ZfU1RBQ0tfVFJZUE9QX01QTUMpKSB8fCAoZGVmaW5lZChUUllVUE1DKSAmJiBk
ZWZpbmVkKENLX0ZfU1RBQ0tfVFJZUE9QX1VQTUMpKQotCWNrX3N0YWNrX2VudHJ5X3QgKnJlZjsK
LSNlbmRpZgotCXN0cnVjdCBlbnRyeSAqZW50cnkgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgbG9u
ZyBpLCBuID0gSVRFTVMgLyBudGhyOwotCXVuc2lnbmVkIGludCBzZWVkOwotCWludCBqLCBwcmV2
aW91cyA9IElOVF9NQVg7Ci0KLQlpZiAoYWZmX2l0ZXJhdGUoJmFmZmluZXJhdG9yKSkgewotCQlw
ZXJyb3IoIkVSUk9SOiBmYWlsZWQgdG8gYWZmaW5lIHRocmVhZCIpOwotCQlleGl0KEVYSVRfRkFJ
TFVSRSk7Ci0JfQotCi0Jd2hpbGUgKGJhcnJpZXIgPT0gMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwg
bjsgaSsrKSB7Ci0jaWZkZWYgTVBNQwotI2lmZGVmIENLX0ZfU1RBQ0tfUE9QX01QTUMKLQkJcmVm
ID0gY2tfc3RhY2tfcG9wX21wbWMoJnN0YWNrKTsKLQkJYXNzZXJ0KHJlZik7Ci0JCWVudHJ5ID0g
Z2V0dmFsdWUocmVmKTsKLSNlbmRpZiAvKiBDS19GX1NUQUNLX1BPUF9NUE1DICovCi0jZWxpZiBk
ZWZpbmVkKFRSWU1QTUMpCi0jaWZkZWYgQ0tfRl9TVEFDS19UUllQT1BfTVBNQwotCQl3aGlsZSAo
Y2tfc3RhY2tfdHJ5cG9wX21wbWMoJnN0YWNrLCAmcmVmKSA9PSBmYWxzZSkKLQkJCWNrX3ByX3N0
YWxsKCk7Ci0JCWFzc2VydChyZWYpOwotCQllbnRyeSA9IGdldHZhbHVlKHJlZik7Ci0jZW5kaWYg
LyogQ0tfRl9TVEFDS19UUllQT1BfTVBNQyAqLwotI2VsaWYgZGVmaW5lZChVUE1DKQotCQlyZWYg
PSBja19zdGFja19wb3BfdXBtYygmc3RhY2spOwotCQlhc3NlcnQocmVmKTsKLQkJZW50cnkgPSBn
ZXR2YWx1ZShyZWYpOwotI2VsaWYgZGVmaW5lZChUUllVUE1DKQotCQl3aGlsZSAoY2tfc3RhY2tf
dHJ5cG9wX3VwbWMoJnN0YWNrLCAmcmVmKSA9PSBmYWxzZSkKLQkJCWNrX3ByX3N0YWxsKCk7Ci0J
CWFzc2VydChyZWYpOwotCQllbnRyeSA9IGdldHZhbHVlKHJlZik7Ci0jZWxpZiBkZWZpbmVkKFNQ
SU5MT0NLKQotCQlMT0NLKCZzdGFja19zcGlubG9jayk7Ci0JCWVudHJ5ID0gc3RhY2s7Ci0JCXN0
YWNrID0gc3RhY2stPm5leHQ7Ci0JCVVOTE9DSygmc3RhY2tfc3BpbmxvY2spOwotI2Vsc2UKLSMJ
CWVycm9yIFVuZGVmaW5lZCBvcGVyYXRpb24uCi0jZW5kaWYKLQotCQlpZiAoY3JpdGljYWwpIHsK
LQkJCWogPSBjb21tb25fcmFuZF9yKCZzZWVkKSAlIGNyaXRpY2FsOwotCQkJd2hpbGUgKGotLSkK
LQkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIiA6OjogIm1lbW9yeSIpOwotCQl9Ci0KLQkJYXNz
ZXJ0IChwcmV2aW91cyA+PSBlbnRyeS0+dmFsdWUpOwotCQlwcmV2aW91cyA9IGVudHJ5LT52YWx1
ZTsKLQl9Ci0KLQlyZXR1cm4gKE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotc3RhY2tfYXNzZXJ0
KHZvaWQpCi17Ci0KLSNpZmRlZiBTUElOTE9DSwotCWFzc2VydChzdGFjayA9PSBOVUxMKTsKLSNl
bHNlCi0JYXNzZXJ0KENLX1NUQUNLX0lTRU1QVFkoJnN0YWNrKSk7Ci0jZW5kaWYKLQlyZXR1cm47
Ci19Ci0KLXN0YXRpYyB2b2lkCi1wdXNoX3N0YWNrKHN0cnVjdCBlbnRyeSAqYnVja2V0KQotewot
CXVuc2lnbmVkIGxvbmcgbG9uZyBpOwotCi0jaWZkZWYgU1BJTkxPQ0sKLQlzdGFjayA9IE5VTEw7
Ci0jZWxzZQotCWNrX3N0YWNrX2luaXQoJnN0YWNrKTsKLSNlbmRpZgotCi0JZm9yIChpID0gMDsg
aSA8IElURU1TOyBpKyspIHsKLQkJYnVja2V0W2ldLnZhbHVlID0gaSAlIElOVF9NQVg7Ci0jaWZk
ZWYgU1BJTkxPQ0sKLQkJYnVja2V0W2ldLm5leHQgPSBzdGFjazsKLQkJc3RhY2sgPSBidWNrZXQg
KyBpOwotI2Vsc2UKLQkJY2tfc3RhY2tfcHVzaF9zcG5jKCZzdGFjaywgJmJ1Y2tldFtpXS5uZXh0
KTsKLSNlbmRpZgotCX0KLQotI2lmbmRlZiBTUElOTE9DSwotCWNrX3N0YWNrX2VudHJ5X3QgKmVu
dHJ5OwotCWkgPSAwOwotCUNLX1NUQUNLX0ZPUkVBQ0goJnN0YWNrLCBlbnRyeSkgewotCQlpKys7
Ci0JfQotCWFzc2VydChpID09IElURU1TKTsKLSNlbmRpZgotCi0JcmV0dXJuOwotfQotCi1pbnQK
LW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlzdHJ1Y3QgZW50cnkgKmJ1Y2tldDsK
LQl1bnNpZ25lZCBsb25nIGxvbmcgaSwgZDsKLQlwdGhyZWFkX3QgKnRocmVhZDsKLQlzdHJ1Y3Qg
dGltZXZhbCBzdHYsIGV0djsKLQotI2lmIChkZWZpbmVkKFRSWU1QTUMpIHx8IGRlZmluZWQoTVBN
QykpICYmICghZGVmaW5lZChDS19GX1NUQUNLX1BVU0hfTVBNQykgfHwgIWRlZmluZWQoQ0tfRl9T
VEFDS19QT1BfTVBNQykpCi0JZnByaW50ZihzdGRlcnIsICJVbnN1cHBvcnRlZC5cbiIpOwotCXJl
dHVybiAwOwotI2VuZGlmCi0KLQlpZiAoYXJnYyAhPSA0KSB7Ci0JCWNrX2Vycm9yKCJVc2FnZTog
c3RhY2sgPHRocmVhZHM+IDxkZWx0YT4gPGNyaXRpY2FsPlxuIik7Ci0JfQotCi0JewotCQljaGFy
ICplOwotCi0JCW50aHIgPSBzdHJ0b2woYXJndlsxXSwgJmUsIDEwKTsKLQkJaWYgKGVycm5vID09
IEVSQU5HRSkgewotCQkJcGVycm9yKCJFUlJPUjogdG9vIG1hbnkgdGhyZWFkcyIpOwotCQkJZXhp
dChFWElUX0ZBSUxVUkUpOwotCQl9IGVsc2UgaWYgKCplICE9ICdcMCcpIHsKLQkJCWNrX2Vycm9y
KCJFUlJPUjogaW5wdXQgZm9ybWF0IGlzIGluY29ycmVjdFxuIik7Ci0JCX0KLQotCQlkID0gc3Ry
dG9sKGFyZ3ZbMl0sICZlLCAxMCk7Ci0JCWlmIChlcnJubyA9PSBFUkFOR0UpIHsKLQkJCXBlcnJv
cigiRVJST1I6IGRlbHRhIGlzIHRvbyBsYXJnZSIpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwot
CQl9IGVsc2UgaWYgKCplICE9ICdcMCcpIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogaW5wdXQgZm9y
bWF0IGlzIGluY29ycmVjdFxuIik7Ci0JCX0KLQotCQljcml0aWNhbCA9IHN0cnRvdWwoYXJndlsz
XSwgJmUsIDEwKTsKLQkJaWYgKGVycm5vID09IEVSQU5HRSkgewotCQkJcGVycm9yKCJFUlJPUjog
Y3JpdGljYWwgc2VjdGlvbiBpcyB0b28gbGFyZ2UiKTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsK
LQkJfSBlbHNlIGlmICgqZSAhPSAnXDAnKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IGlucHV0IGZv
cm1hdCBpcyBpbmNvcnJlY3RcbiIpOwotCQl9Ci0JfQotCi0Jc3JhbmQoZ2V0cGlkKCkpOwotCi0J
YWZmaW5lcmF0b3IuZGVsdGEgPSBkOwotCWJ1Y2tldCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGVu
dHJ5KSAqIElURU1TKTsKLQlhc3NlcnQoYnVja2V0ICE9IE5VTEwpOwotCi0JdGhyZWFkID0gbWFs
bG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocik7Ci0JYXNzZXJ0KHRocmVhZCAhPSBOVUxMKTsK
LQotCXB1c2hfc3RhY2soYnVja2V0KTsKLQlmb3IgKGkgPSAwOyBpIDwgbnRocjsgaSsrKQotCQlw
dGhyZWFkX2NyZWF0ZSgmdGhyZWFkW2ldLCBOVUxMLCBzdGFja190aHJlYWQsIE5VTEwpOwotCi0J
YmFycmllciA9IDE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnRocjsgaSsrKQotCQlwdGhyZWFkX2pv
aW4odGhyZWFkW2ldLCBOVUxMKTsKLQotCWJhcnJpZXIgPSAwOwotCi0JcHVzaF9zdGFjayhidWNr
ZXQpOwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspCi0JCXB0aHJlYWRfY3JlYXRlKCZ0aHJl
YWRbaV0sIE5VTEwsIHN0YWNrX3RocmVhZCwgTlVMTCk7Ci0KLQljb21tb25fZ2V0dGltZW9mZGF5
KCZzdHYsIE5VTEwpOwotCWJhcnJpZXIgPSAxOwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKysp
Ci0JCXB0aHJlYWRfam9pbih0aHJlYWRbaV0sIE5VTEwpOwotCWNvbW1vbl9nZXR0aW1lb2ZkYXko
JmV0diwgTlVMTCk7Ci0KLQlzdGFja19hc3NlcnQoKTsKLSNpZmRlZiBfV0lOMzIKLQlwcmludGYo
IiUzbGx1ICUuNmZcbiIsIG50aHIsIFRWVE9EKGV0dikgLSBUVlRPRChzdHYpKTsKLSNlbHNlCi0J
cHJpbnRmKCIlM2xsdSAlLjZsZlxuIiwgbnRociwgVFZUT0QoZXR2KSAtIFRWVE9EKHN0dikpOwot
I2VuZGlmCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zdGFjay92YWxpZGF0ZS9wdXNoLmMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zdGFjay92YWxpZGF0ZS9w
dXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiM2VhMzM0ZGRjNTdjNTc3NGFl
ZDdiYmYxNTg2ZmFhZTczMjlkMTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfc3RhY2svdmFsaWRhdGUvcHVzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQ4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgMjAwOS0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxja19wci5oPgot
I2lmZGVmIFNQSU5MT0NLCi0jaW5jbHVkZSA8Y2tfc3BpbmxvY2suaD4KLSNlbmRpZgotI2luY2x1
ZGUgPGNrX3N0YWNrLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgot
I2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHB0aHJl
YWQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5j
bHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNpZm5kZWYgSVRFTVMKLSNkZWZpbmUgSVRFTVMgKDU3
NjU3NjAgKiAyKQotI2VuZGlmCi0KLSNkZWZpbmUgVFZUT0QodHYpICgodHYpLnR2X3NlYysoKHR2
KS50dl91c2VjIC8gKGRvdWJsZSkxMDAwMDAwKSkKLQotc3RydWN0IGVudHJ5IHsKLQlpbnQgdmFs
dWU7Ci0jaWZkZWYgU1BJTkxPQ0sKLQlzdHJ1Y3QgZW50cnkgKm5leHQ7Ci0jZWxzZQotCWNrX3N0
YWNrX2VudHJ5X3QgbmV4dDsKLSNlbmRpZgotfTsKLQotI2lmZGVmIFNQSU5MT0NLCi1zdGF0aWMg
c3RydWN0IGVudHJ5ICpzdGFjayBDS19DQ19DQUNIRUxJTkU7Ci0jZWxzZQotc3RhdGljIGNrX3N0
YWNrX3Qgc3RhY2sgQ0tfQ0NfQ0FDSEVMSU5FOwotI2VuZGlmCi0KLUNLX1NUQUNLX0NPTlRBSU5F
UihzdHJ1Y3QgZW50cnksIG5leHQsIGdldHZhbHVlKQotCi1zdGF0aWMgc3RydWN0IGFmZmluaXR5
IGFmZmluZXJhdG9yID0gQUZGSU5JVFlfSU5JVElBTElaRVI7Ci1zdGF0aWMgdW5zaWduZWQgbG9u
ZyBsb25nIG50aHI7Ci1zdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgaW50IGJhcnJpZXIgPSAwOwot
c3RhdGljIHVuc2lnbmVkIGludCBjcml0aWNhbDsKLQotI2lmIGRlZmluZWQoU1BJTkxPQ0spCi1j
a19zcGlubG9ja19mYXNfdCBzdGFja19zcGlubG9jayA9IENLX1NQSU5MT0NLX0ZBU19JTklUSUFM
SVpFUjsKLSNkZWZpbmUgVU5MT0NLIGNrX3NwaW5sb2NrX2Zhc191bmxvY2sKLSNpZiBkZWZpbmVk
KEVCKQotI2RlZmluZSBMT0NLIGNrX3NwaW5sb2NrX2Zhc19sb2NrX2ViCi0jZWxzZQotI2RlZmlu
ZSBMT0NLIGNrX3NwaW5sb2NrX2Zhc19sb2NrCi0jZW5kaWYKLSNlbGlmIGRlZmluZWQoUFRIUkVB
RCkKLXB0aHJlYWRfbXV0ZXhfdCBzdGFja19zcGlubG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElB
TElaRVI7Ci0jZGVmaW5lIExPQ0sgcHRocmVhZF9tdXRleF9sb2NrCi0jZGVmaW5lIFVOTE9DSyBw
dGhyZWFkX211dGV4X3VubG9jawotI2VuZGlmCi0KLXN0YXRpYyB2b2lkICoKLXN0YWNrX3RocmVh
ZCh2b2lkICpidWZmZXIpCi17Ci0Jc3RydWN0IGVudHJ5ICpidWNrZXQgPSBidWZmZXI7Ci0JdW5z
aWduZWQgbG9uZyBsb25nIGksIG4gPSBJVEVNUyAvIG50aHI7Ci0JdW5zaWduZWQgaW50IHNlZWQ7
Ci0JaW50IGo7Ci0KLQlpZiAoYWZmX2l0ZXJhdGUoJmFmZmluZXJhdG9yKSkgewotCQlwZXJyb3Io
IkVSUk9SOiBmYWlsZWQgdG8gYWZmaW5lIHRocmVhZCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7
Ci0JfQotCi0Jd2hpbGUgKGJhcnJpZXIgPT0gMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsr
KSB7Ci0JCWJ1Y2tldFtpXS52YWx1ZSA9IChpICsgMSkgKiAyOwotCi0jaWYgICBkZWZpbmVkKE1Q
TkMpCi0JCWNrX3N0YWNrX3B1c2hfbXBuYygmc3RhY2ssICZidWNrZXRbaV0ubmV4dCk7Ci0jZWxp
ZiBkZWZpbmVkKE1QTUMpCi0JCWNrX3N0YWNrX3B1c2hfbXBtYygmc3RhY2ssICZidWNrZXRbaV0u
bmV4dCk7Ci0jZWxpZiBkZWZpbmVkKFRSWU1QTUMpCi0JCXdoaWxlIChja19zdGFja190cnlwdXNo
X21wbWMoJnN0YWNrLCAmYnVja2V0W2ldLm5leHQpID09IGZhbHNlKQotCQkJY2tfcHJfc3RhbGwo
KTsKLSNlbGlmIGRlZmluZWQoVFJZVVBNQykKLQkJd2hpbGUgKGNrX3N0YWNrX3RyeXB1c2hfdXBt
Yygmc3RhY2ssICZidWNrZXRbaV0ubmV4dCkgPT0gZmFsc2UpCi0JCQlja19wcl9zdGFsbCgpOwot
I2VsaWYgZGVmaW5lZChVUE1DKQotCQlja19zdGFja19wdXNoX3VwbWMoJnN0YWNrLCAmYnVja2V0
W2ldLm5leHQpOwotI2VsaWYgZGVmaW5lZChTUElOTE9DSykgfHwgZGVmaW5lZChQVEhSRUFEUykK
LQkJTE9DSygmc3RhY2tfc3BpbmxvY2spOwotCQlidWNrZXRbaV0ubmV4dCA9IHN0YWNrOwotCQlz
dGFjayA9IGJ1Y2tldCArIGk7Ci0JCVVOTE9DSygmc3RhY2tfc3BpbmxvY2spOwotI2Vsc2UKLSMJ
CWVycm9yIFVuZGVmaW5lZCBvcGVyYXRpb24uCi0jZW5kaWYKLQotCQlpZiAoY3JpdGljYWwpIHsK
LQkJCWogPSBjb21tb25fcmFuZF9yKCZzZWVkKSAlIGNyaXRpY2FsOwotCQkJd2hpbGUgKGotLSkK
LQkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIiA6OjogIm1lbW9yeSIpOwotCQl9Ci0JfQotCi0J
cmV0dXJuIChOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQKLXN0YWNrX2Fzc2VydCh2b2lkKQotewot
I2lmbmRlZiBTUElOTE9DSwotCWNrX3N0YWNrX2VudHJ5X3QgKm47Ci0jZW5kaWYKLQlzdHJ1Y3Qg
ZW50cnkgKnA7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGMgPSAwOwotCi0jaWZkZWYgU1BJTkxPQ0sK
LQlmb3IgKHAgPSBzdGFjazsgcDsgcCA9IHAtPm5leHQpCi0JCWMrKzsKLSNlbHNlCi0JQ0tfU1RB
Q0tfRk9SRUFDSCgmc3RhY2ssIG4pIHsKLQkJcCA9IGdldHZhbHVlKG4pOwotCQkodm9pZCkoKHZv
bGF0aWxlIHN0cnVjdCBlbnRyeSAqKXApLT52YWx1ZTsKLQkJYysrOwotCX0KLSNlbmRpZgotCi0J
YXNzZXJ0KGMgPT0gSVRFTVMpOwotCXJldHVybjsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBj
aGFyICphcmd2W10pCi17Ci0Jc3RydWN0IGVudHJ5ICpidWNrZXQ7Ci0JdW5zaWduZWQgbG9uZyBs
b25nIGksIGQsIG47Ci0JcHRocmVhZF90ICp0aHJlYWQ7Ci0Jc3RydWN0IHRpbWV2YWwgc3R2LCBl
dHY7Ci0KLQlpZiAoYXJnYyAhPSA0KSB7Ci0JCWNrX2Vycm9yKCJVc2FnZTogc3RhY2sgPHRocmVh
ZHM+IDxkZWx0YT4gPGNyaXRpY2FsPlxuIik7Ci0JfQotCi0JewotCQljaGFyICplOwotCi0JCW50
aHIgPSBzdHJ0b2woYXJndlsxXSwgJmUsIDEwKTsKLQkJaWYgKGVycm5vID09IEVSQU5HRSkgewot
CQkJcGVycm9yKCJFUlJPUjogdG9vIG1hbnkgdGhyZWFkcyIpOwotCQkJZXhpdChFWElUX0ZBSUxV
UkUpOwotCQl9IGVsc2UgaWYgKCplICE9ICdcMCcpIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogaW5w
dXQgZm9ybWF0IGlzIGluY29ycmVjdFxuIik7Ci0JCX0KLQotCQlkID0gc3RydG9sKGFyZ3ZbMl0s
ICZlLCAxMCk7Ci0JCWlmIChlcnJubyA9PSBFUkFOR0UpIHsKLQkJCXBlcnJvcigiRVJST1I6IGRl
bHRhIGlzIHRvbyBsYXJnZSIpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQl9IGVsc2UgaWYg
KCplICE9ICdcMCcpIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogaW5wdXQgZm9ybWF0IGlzIGluY29y
cmVjdFxuIik7Ci0JCX0KLQotCQljcml0aWNhbCA9IHN0cnRvdWwoYXJndlszXSwgJmUsIDEwKTsK
LQkJaWYgKGVycm5vID09IEVSQU5HRSkgewotCQkJcGVycm9yKCJFUlJPUjogY3JpdGljYWwgc2Vj
dGlvbiBpcyB0b28gbGFyZ2UiKTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfSBlbHNlIGlm
ICgqZSAhPSAnXDAnKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IGlucHV0IGZvcm1hdCBpcyBpbmNv
cnJlY3RcbiIpOwotCQl9Ci0JfQotCi0Jc3JhbmQoZ2V0cGlkKCkpOwotCi0JYWZmaW5lcmF0b3Iu
cmVxdWVzdCA9IDA7Ci0JYWZmaW5lcmF0b3IuZGVsdGEgPSBkOwotCW4gPSBJVEVNUyAvIG50aHI7
Ci0KLSNpZm5kZWYgU1BJTkxPQ0sKLQlja19zdGFja19pbml0KCZzdGFjayk7Ci0jZWxzZQotCXN0
YWNrID0gTlVMTDsKLSNlbmRpZgotCi0JYnVja2V0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZW50
cnkpICogSVRFTVMpOwotCWFzc2VydChidWNrZXQgIT0gTlVMTCk7Ci0KLQl0aHJlYWQgPSBtYWxs
b2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyKTsKLQlhc3NlcnQodGhyZWFkICE9IE5VTEwpOwot
Ci0JZm9yIChpID0gMDsgaSA8IG50aHI7IGkrKykKLQkJcHRocmVhZF9jcmVhdGUoJnRocmVhZFtp
XSwgTlVMTCwgc3RhY2tfdGhyZWFkLCBidWNrZXQgKyBpICogbik7Ci0KLQliYXJyaWVyID0gMTsK
LQotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspCi0JCXB0aHJlYWRfam9pbih0aHJlYWRbaV0s
IE5VTEwpOwotCi0JYmFycmllciA9IDA7Ci0KLSNpZm5kZWYgU1BJTkxPQ0sKLQlja19zdGFja19p
bml0KCZzdGFjayk7Ci0jZWxzZQotCXN0YWNrID0gTlVMTDsKLSNlbmRpZgotCi0JZm9yIChpID0g
MDsgaSA8IG50aHI7IGkrKykKLQkJcHRocmVhZF9jcmVhdGUoJnRocmVhZFtpXSwgTlVMTCwgc3Rh
Y2tfdGhyZWFkLCBidWNrZXQgKyBpICogbik7Ci0KLQljb21tb25fZ2V0dGltZW9mZGF5KCZzdHYs
IE5VTEwpOwotCWJhcnJpZXIgPSAxOwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspCi0JCXB0
aHJlYWRfam9pbih0aHJlYWRbaV0sIE5VTEwpOwotCWNvbW1vbl9nZXR0aW1lb2ZkYXkoJmV0diwg
TlVMTCk7Ci0KLQlzdGFja19hc3NlcnQoKTsKLSNpZmRlZiBfV0lOMzIKLQlwcmludGYoIiUzbGx1
ICUuNmZcbiIsIG50aHIsIFRWVE9EKGV0dikgLSBUVlRPRChzdHYpKTsKLSNlbHNlCi0JcHJpbnRm
KCIlM2xsdSAlLjZsZlxuIiwgbnRociwgVFZUT0QoZXR2KSAtIFRWVE9EKHN0dikpOwotI2VuZGlm
Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19zdGFjay92YWxpZGF0ZS9zZXJpYWwuYyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3N0YWNrL3ZhbGlkYXRlL3Nlcmlh
bC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjY2N2NhMTAzMTBhZDdhZWUxNDU3
OTk2NDE3NWNlYWQ3ZDc5ZDZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2Nr
X3N0YWNrL3ZhbGlkYXRlL3NlcmlhbC5jCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAyMDA5LTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgot
I2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlIDxja19zdGFjay5oPgotCi0jaWZuZGVmIFNJ
WkUKLSNkZWZpbmUgU0laRSAxMDI0MDAwCi0jZW5kaWYKLQotc3RydWN0IGVudHJ5IHsKLQlpbnQg
dmFsdWU7Ci0JY2tfc3RhY2tfZW50cnlfdCBuZXh0OwotfTsKLQotQ0tfU1RBQ0tfQ09OVEFJTkVS
KHN0cnVjdCBlbnRyeSwgbmV4dCwgZ2V0X2VudHJ5KQotCi0jZGVmaW5lIExPT1AoUFVTSCwgUE9Q
KQkJCQkJCQkJXAotCWZvciAoaSA9IDA7IGkgPCBTSVpFOyBpKyspIHsJCQkJCQlcCi0JCWVudHJp
ZXNbaV0udmFsdWUgPSBpOwkJCQkJCVwKLQkJUFVTSChzdGFjaywgJmVudHJpZXNbaV0ubmV4dCk7
CQkJCQlcCi0JfQkJCQkJCQkJCVwKLQlmb3IgKGkgPSBTSVpFIC0gMTsgaSA+PSAwOyBpLS0pIHsJ
CQkJCVwKLQkJZW50cnkgPSBQT1Aoc3RhY2spOwkJCQkJCVwKLQkJYXNzZXJ0KGVudHJ5KTsJCQkJ
CQkJXAotCQlhc3NlcnQoZ2V0X2VudHJ5KGVudHJ5KS0+dmFsdWUgPT0gaSk7CQkJCVwKLQl9Ci0K
LXN0YXRpYyB2b2lkCi1zZXJpYWwoY2tfc3RhY2tfdCAqc3RhY2spCi17Ci0Jc3RydWN0IGVudHJ5
ICplbnRyaWVzOwotCWNrX3N0YWNrX2VudHJ5X3QgKmVudHJ5OwotCWludCBpOwotCi0JY2tfc3Rh
Y2tfaW5pdChzdGFjayk7Ci0KLQllbnRyaWVzID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZW50cnkp
ICogU0laRSk7Ci0JYXNzZXJ0KGVudHJpZXMgIT0gTlVMTCk7Ci0KLQlMT09QKGNrX3N0YWNrX3B1
c2hfdXBtYywgY2tfc3RhY2tfcG9wX3VwbWMpOwotI2lmZGVmIENLX0ZfU1RBQ0tfUE9QX01QTUMK
LQlMT09QKGNrX3N0YWNrX3B1c2hfbXBtYywgY2tfc3RhY2tfcG9wX21wbWMpOwotI2VuZGlmCi0J
TE9PUChja19zdGFja19wdXNoX21wbmMsIGNrX3N0YWNrX3BvcF91cG1jKTsKLQlMT09QKGNrX3N0
YWNrX3B1c2hfc3BuYywgY2tfc3RhY2tfcG9wX25wc2MpOwotCi0JcmV0dXJuOwotfQotCi1pbnQK
LW1haW4odm9pZCkKLXsKLQlja19zdGFja190IHN0YWNrIENLX0NDX0NBQ0hFTElORTsKLQotCXNl
cmlhbCgmc3RhY2spOwotCXJldHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zd2xvY2svYmVuY2htYXJrL01ha2Vm
aWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3ds
b2NrL2JlbmNobWFyay9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVj
NzI4YzJhNTFjZTM5YWY5ZTNiOTI3ZTZjOTMzYmNjNTQ2Zjc2Zi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9jay9yZWdyZXNzaW9ucy9ja19zd2xvY2svYmVuY2htYXJrL01ha2VmaWxlCisrKyAvZGV2L251
bGwKQEAgLTEsMTcgKzAsMCBAQAotLlBIT05ZOiBjbGVhbiBkaXN0cmlidXRpb24KLQotT0JKRUNU
Uz1sYXRlbmN5IHRocm91Z2hwdXQKLQotYWxsOiAkKE9CSkVDVFMpCi0KLWxhdGVuY3k6IGxhdGVu
Y3kuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX3N3bG9jay5oCi0JJChDQykgJChDRkxBR1MpIC1vIGxh
dGVuY3kgbGF0ZW5jeS5jCi0KLXRocm91Z2hwdXQ6IHRocm91Z2hwdXQuYyAuLi8uLi8uLi9pbmNs
dWRlL2NrX3N3bG9jay5oCi0JJChDQykgJChDRkxBR1MpIC1vIHRocm91Z2hwdXQgdGhyb3VnaHB1
dC5jCi0KLWNsZWFuOgotCXJtIC1yZiAqLmRTWU0gKi5leGUgKn4gKi5vICQoT0JKRUNUUykKLQot
aW5jbHVkZSAuLi8uLi8uLi9idWlsZC9yZWdyZXNzaW9ucy5idWlsZAotQ0ZMQUdTKz0kKFBUSFJF
QURfQ0ZMQUdTKSAtRF9HTlVfU09VUkNFCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zd2xvY2svYmVuY2htYXJrL2xhdGVuY3kuYyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3N3bG9jay9i
ZW5jaG1hcmsvbGF0ZW5jeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2E5NDgy
ODQ5ZjRhZmQyY2NmOTg1ZTMwNzk5YzJlYjc3MzhjY2RmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Nr
L3JlZ3Jlc3Npb25zL2NrX3N3bG9jay9iZW5jaG1hcmsvbGF0ZW5jeS5jCisrKyAvZGV2L251bGwK
QEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBCYWhy
YS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGNrX3N3bG9jay5oPgot
I2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgIi4u
Ly4uL2NvbW1vbi5oIgotCi0jZGVmaW5lIENLX0ZfUFJfUlRNCi0KLSNpZm5kZWYgU1RFUFMKLSNk
ZWZpbmUgU1RFUFMgMjAwMDAwMAotI2VuZGlmCi0KLWludAotbWFpbih2b2lkKQotewotCXVpbnQ2
NF90IHNfYiwgZV9iLCBpOwotCWNrX3N3bG9ja190IHN3bG9jayA9IENLX1NXTE9DS19JTklUSUFM
SVpFUjsKLQotCWZvciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0JCWNrX3N3bG9ja193cml0
ZV9sb2NrKCZzd2xvY2spOwotCQlja19zd2xvY2tfd3JpdGVfdW5sb2NrKCZzd2xvY2spOwotCX0K
LQotCXNfYiA9IHJkdHNjKCk7Ci0JZm9yIChpID0gMDsgaSA8IFNURVBTOyBpKyspIHsKLQkJY2tf
c3dsb2NrX3dyaXRlX2xvY2soJnN3bG9jayk7Ci0JCWNrX3N3bG9ja193cml0ZV91bmxvY2soJnN3
bG9jayk7Ci0JfQotCWVfYiA9IHJkdHNjKCk7Ci0JcHJpbnRmKCIgICAgICAgICAgICAgICAgV1JJ
VEU6IHN3bG9jayAgICAgICAgICAgICUxNSIgUFJJdTY0ICJcbiIsIChlX2IgLSBzX2IpIC8gU1RF
UFMpOwotCi0JZm9yIChpID0gMDsgaSA8IFNURVBTOyBpKyspIHsKLQkJY2tfc3dsb2NrX3JlYWRf
bG9jaygmc3dsb2NrKTsKLQkJY2tfc3dsb2NrX3JlYWRfdW5sb2NrKCZzd2xvY2spOwotCX0KLQot
CXNfYiA9IHJkdHNjKCk7Ci0JZm9yIChpID0gMDsgaSA8IFNURVBTOyBpKyspIHsKLQkJY2tfc3ds
b2NrX3JlYWRfbG9jaygmc3dsb2NrKTsKLQkJY2tfc3dsb2NrX3JlYWRfdW5sb2NrKCZzd2xvY2sp
OwotCX0KLQllX2IgPSByZHRzYygpOwotCXByaW50ZigiICAgICAgICAgICAgICAgIFJFQUQ6ICBz
d2xvY2sgICAgICAgICAgICAgJTE1IiBQUkl1NjQgIlxuIiwgKGVfYiAtIHNfYikgLyBTVEVQUyk7
Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja19zd2xvY2tfd3JpdGVfbGF0
Y2goJnN3bG9jayk7Ci0JCWNrX3N3bG9ja193cml0ZV91bmxhdGNoKCZzd2xvY2spOwotCX0KLQot
CXNfYiA9IHJkdHNjKCk7Ci0JZm9yIChpID0gMDsgaSA8IFNURVBTOyBpKyspIHsKLQkJY2tfc3ds
b2NrX3dyaXRlX2xhdGNoKCZzd2xvY2spOwotCQlja19zd2xvY2tfd3JpdGVfdW5sYXRjaCgmc3ds
b2NrKTsKLQl9Ci0JZV9iID0gcmR0c2MoKTsKLQlwcmludGYoIiAgICAgICAgICAgICAgICBMQVRD
SDogc3dsb2NrICAgICAgICAgICAgICUxNSIgUFJJdTY0ICJcbiIsIChlX2IgLSBzX2IpIC8gU1RF
UFMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3N3bG9jay9iZW5jaG1hcmsvdGhyb3VnaHB1dC5j
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3dsb2Nr
L2JlbmNobWFyay90aHJvdWdocHV0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVi
MDUzNjU3NTFjZTUyNzQzNjVjMDA4Zjc1ZmVjZGNkNDJhMmQ4OWMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvY2svcmVncmVzc2lvbnMvY2tfc3dsb2NrL2JlbmNobWFyay90aHJvdWdocHV0LmMKKysrIC9k
ZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2Ft
eSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICog
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQot
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGNrX3N3
bG9jay5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+
Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9jb21tb24uaCIKLQotI2lm
bmRlZiBTVEVQUwotI2RlZmluZSBTVEVQUyAxMDAwMDAwCi0jZW5kaWYKLQotc3RhdGljIGludCBi
YXJyaWVyOwotc3RhdGljIGludCB0aHJlYWRzOwotc3RhdGljIHVuc2lnbmVkIGludCBmbGFnIENL
X0NDX0NBQ0hFTElORTsKLXN0YXRpYyBzdHJ1Y3QgewotCWNrX3N3bG9ja190IGxvY2s7Ci19IHJ3
IENLX0NDX0NBQ0hFTElORSA9IHsKLQkubG9jayA9IENLX1NXTE9DS19JTklUSUFMSVpFUgotfTsK
LQotc3RhdGljIHN0cnVjdCBhZmZpbml0eSBhZmZpbml0eTsKLQotc3RhdGljIHZvaWQgKgotdGhy
ZWFkX2xvY2sodm9pZCAqcHVuKQotewotCXVpbnQ2NF90IHNfYiwgZV9iLCBhLCBpOwotCXVpbnQ2
NF90ICp2YWx1ZSA9IHB1bjsKLQotCWlmIChhZmZfaXRlcmF0ZSgmYWZmaW5pdHkpICE9IDApIHsK
LQkJcGVycm9yKCJFUlJPUjogQ291bGQgbm90IGFmZmluZSB0aHJlYWQiKTsKLQkJZXhpdChFWElU
X0ZBSUxVUkUpOwotCX0KLQotCWNrX3ByX2luY19pbnQoJmJhcnJpZXIpOwotCXdoaWxlIChja19w
cl9sb2FkX2ludCgmYmFycmllcikgIT0gdGhyZWFkcykKLQkJY2tfcHJfc3RhbGwoKTsKLQotCWZv
ciAoaSA9IDEsIGEgPSAwOzsgaSsrKSB7Ci0JCXNfYiA9IHJkdHNjKCk7Ci0JCWNrX3N3bG9ja19y
ZWFkX2xvY2soJnJ3LmxvY2spOwotCQlja19zd2xvY2tfcmVhZF91bmxvY2soJnJ3LmxvY2spOwot
CQlja19zd2xvY2tfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfc3dsb2NrX3JlYWRfdW5sb2Nr
KCZydy5sb2NrKTsKLQkJY2tfc3dsb2NrX3JlYWRfbG9jaygmcncubG9jayk7Ci0JCWNrX3N3bG9j
a19yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3N3bG9ja19yZWFkX2xvY2soJnJ3LmxvY2sp
OwotCQlja19zd2xvY2tfcmVhZF91bmxvY2soJnJ3LmxvY2spOwotCQlja19zd2xvY2tfcmVhZF9s
b2NrKCZydy5sb2NrKTsKLQkJY2tfc3dsb2NrX3JlYWRfdW5sb2NrKCZydy5sb2NrKTsKLQkJY2tf
c3dsb2NrX3JlYWRfbG9jaygmcncubG9jayk7Ci0JCWNrX3N3bG9ja19yZWFkX3VubG9jaygmcncu
bG9jayk7Ci0JCWNrX3N3bG9ja19yZWFkX2xvY2soJnJ3LmxvY2spOwotCQlja19zd2xvY2tfcmVh
ZF91bmxvY2soJnJ3LmxvY2spOwotCQlja19zd2xvY2tfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJ
Y2tfc3dsb2NrX3JlYWRfdW5sb2NrKCZydy5sb2NrKTsKLQkJY2tfc3dsb2NrX3JlYWRfbG9jaygm
cncubG9jayk7Ci0JCWNrX3N3bG9ja19yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3N3bG9j
a19yZWFkX2xvY2soJnJ3LmxvY2spOwotCQlja19zd2xvY2tfcmVhZF91bmxvY2soJnJ3LmxvY2sp
OwotCQlja19zd2xvY2tfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfc3dsb2NrX3JlYWRfdW5s
b2NrKCZydy5sb2NrKTsKLQkJY2tfc3dsb2NrX3JlYWRfbG9jaygmcncubG9jayk7Ci0JCWNrX3N3
bG9ja19yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3N3bG9ja19yZWFkX2xvY2soJnJ3Lmxv
Y2spOwotCQlja19zd2xvY2tfcmVhZF91bmxvY2soJnJ3LmxvY2spOwotCQlja19zd2xvY2tfcmVh
ZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfc3dsb2NrX3JlYWRfdW5sb2NrKCZydy5sb2NrKTsKLQkJ
Y2tfc3dsb2NrX3JlYWRfbG9jaygmcncubG9jayk7Ci0JCWNrX3N3bG9ja19yZWFkX3VubG9jaygm
cncubG9jayk7Ci0JCWNrX3N3bG9ja19yZWFkX2xvY2soJnJ3LmxvY2spOwotCQlja19zd2xvY2tf
cmVhZF91bmxvY2soJnJ3LmxvY2spOwotCQllX2IgPSByZHRzYygpOwotCi0JCWEgKz0gKGVfYiAt
IHNfYikgPj4gNDsKLQotCQlpZiAoY2tfcHJfbG9hZF91aW50KCZmbGFnKSA9PSAxKQotCQkJYnJl
YWs7Ci0JfQotCi0JY2tfcHJfaW5jX2ludCgmYmFycmllcik7Ci0Jd2hpbGUgKGNrX3ByX2xvYWRf
aW50KCZiYXJyaWVyKSAhPSB0aHJlYWRzICogMikKLQkJY2tfcHJfc3RhbGwoKTsKLQotCSp2YWx1
ZSA9IChhIC8gaSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zd2xvY2tfdGVz
dChwdGhyZWFkX3QgKnAsIGludCBkLCB1aW50NjRfdCAqbGF0ZW5jeSwgdm9pZCAqKCpmKSh2b2lk
ICopLCBjb25zdCBjaGFyICpsYWJlbCkKLXsKLQlpbnQgdDsKLQotCWNrX3ByX3N0b3JlX2ludCgm
YmFycmllciwgMCk7Ci0JY2tfcHJfc3RvcmVfdWludCgmZmxhZywgMCk7Ci0KLQlhZmZpbml0eS5k
ZWx0YSA9IGQ7Ci0JYWZmaW5pdHkucmVxdWVzdCA9IDA7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIkNy
ZWF0aW5nIHRocmVhZHMgKCVzKS4uLiIsIGxhYmVsKTsKLQlmb3IgKHQgPSAwOyB0IDwgdGhyZWFk
czsgdCsrKSB7Ci0JCWlmIChwdGhyZWFkX2NyZWF0ZSgmcFt0XSwgTlVMTCwgZiwgbGF0ZW5jeSAr
IHQpICE9IDApIHsKLQkJCWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGNyZWF0ZSB0aHJlYWQg
JWRcbiIsIHQpOwotCQl9Ci0JfQotCWZwcmludGYoc3RkZXJyLCAiZG9uZVxuIik7Ci0KLQljb21t
b25fc2xlZXAoMTApOwotCWNrX3ByX3N0b3JlX3VpbnQoJmZsYWcsIDEpOwotCi0JZnByaW50Zihz
dGRlcnIsICJXYWl0aW5nIGZvciB0aHJlYWRzIHRvIGZpbmlzaCBhY3F1aXNpdGlvbiByZWdyZXNz
aW9uLi4uIik7Ci0JZm9yICh0ID0gMDsgdCA8IHRocmVhZHM7IHQrKykKLQkJcHRocmVhZF9qb2lu
KHBbdF0sIE5VTEwpOwotCWZwcmludGYoc3RkZXJyLCAiZG9uZVxuXG4iKTsKLQotCWZvciAodCA9
IDE7IHQgPD0gdGhyZWFkczsgdCsrKQotCQlwcmludGYoIiUxMHUgJTIwIiBQUkl1NjQgIlxuIiwg
dCwgbGF0ZW5jeVt0IC0gMV0pOwotCi0JZnByaW50ZihzdGRlcnIsICJcbiIpOwotCXJldHVybjsK
LX0KLQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlpbnQgZDsKLQlw
dGhyZWFkX3QgKnA7Ci0JdWludDY0X3QgKmxhdGVuY3k7Ci0KLQlpZiAoYXJnYyAhPSAzKSB7Ci0J
CWNrX2Vycm9yKCJVc2FnZTogdGhyb3VnaHB1dCA8ZGVsdGE+IDx0aHJlYWRzPlxuIik7Ci0JfQot
Ci0JdGhyZWFkcyA9IGF0b2koYXJndlsyXSk7Ci0JaWYgKHRocmVhZHMgPD0gMCkgewotCQlja19l
cnJvcigiRVJST1I6IFRocmVhZHMgbXVzdCBiZSBhIHZhbHVlID4gMC5cbiIpOwotCX0KLQotCXAg
PSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiB0aHJlYWRzKTsKLQlpZiAocCA9PSBOVUxMKSB7
Ci0JCWNrX2Vycm9yKCJFUlJPUjogRmFpbGVkIHRvIGluaXRpYWxpemUgdGhyZWFkLlxuIik7Ci0J
fQotCi0JbGF0ZW5jeSA9IG1hbGxvYyhzaXplb2YodWludDY0X3QpICogdGhyZWFkcyk7Ci0JaWYg
KGxhdGVuY3kgPT0gTlVMTCkgewotCQlja19lcnJvcigiRVJST1I6IEZhaWxlZCB0byBjcmVhdGUg
bGF0ZW5jeSBidWZmZXIuXG4iKTsKLQl9Ci0KLQlkID0gYXRvaShhcmd2WzFdKTsKLQlzd2xvY2tf
dGVzdChwLCBkLCBsYXRlbmN5LCB0aHJlYWRfbG9jaywgInN3bG9jayIpOwotCi0JcmV0dXJuIDA7
Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jl
c3Npb25zL2NrX3N3bG9jay92YWxpZGF0ZS9NYWtlZmlsZSBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3N3bG9jay92YWxpZGF0ZS9NYWtlZmlsZQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRkNjJmMjAzM2Q2YmZhZDQ5ZjgwZTk1MThkOTkx
M2NkYTM3NDdiNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zd2xvY2sv
dmFsaWRhdGUvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0uUEhPTlk6
IGNoZWNrIGNsZWFuIGRpc3RyaWJ1dGlvbgotCi1PQkpFQ1RTPXZhbGlkYXRlCi0KLWFsbDogJChP
QkpFQ1RTKQotCi12YWxpZGF0ZTogdmFsaWRhdGUuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX3N3bG9j
ay5oCi0JJChDQykgJChDRkxBR1MpIC1vIHZhbGlkYXRlIHZhbGlkYXRlLmMKLQotY2hlY2s6IGFs
bAotCS4vdmFsaWRhdGUgJChDT1JFUykgMQotCi1jbGVhbjoKLQlybSAtcmYgKi5kU1lNICouZXhl
ICp+ICoubyAkKE9CSkVDVFMpCi0KLWluY2x1ZGUgLi4vLi4vLi4vYnVpbGQvcmVncmVzc2lvbnMu
YnVpbGQKLUNGTEFHUys9JChQVEhSRUFEX0NGTEFHUykgLURfR05VX1NPVVJDRQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfc3dsb2Nr
L3ZhbGlkYXRlL3ZhbGlkYXRlLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9y
ZWdyZXNzaW9ucy9ja19zd2xvY2svdmFsaWRhdGUvdmFsaWRhdGUuYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMTEzNjZjZTY0MTViY2IxY2RlN2RmNTQ5YWI5MTMzOTM3N2E5NGRmMS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja19zd2xvY2svdmFsaWRhdGUvdmFs
aWRhdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDQ1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IDIwMTQgSmFpZGV2IFNyaWRoYXIuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5o
PgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRp
by5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNpbmNsdWRl
IDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotCi0jaW5jbHVkZSA8Y2tfcHIuaD4K
LSNpbmNsdWRlIDxja19zd2xvY2suaD4KLQotI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi5oIgotCi0j
aWZuZGVmIElURVJBVEUKLSNkZWZpbmUgSVRFUkFURSAxMDAwMDAwCi0jZW5kaWYKLQotc3RhdGlj
IHN0cnVjdCBhZmZpbml0eSBhOwotc3RhdGljIHVuc2lnbmVkIGludCBsb2NrZWQ7Ci1zdGF0aWMg
aW50IG50aHI7Ci1zdGF0aWMgY2tfc3dsb2NrX3QgbG9jayA9IENLX1NXTE9DS19JTklUSUFMSVpF
UjsKLXN0YXRpYyBja19zd2xvY2tfdCBjb3B5OwotI2lmZGVmIENLX0ZfUFJfUlRNCi1zdGF0aWMg
dm9pZCAqCi10aHJlYWRfcnRtX2FkYXB0aXZlKHZvaWQgKmFyZykKLXsKLQl1bnNpZ25lZCBpbnQg
aSA9IElURVJBVEU7Ci0JdW5zaWduZWQgaW50IGw7Ci0JaW50IHRpZCA9IGNrX3ByX2xvYWRfaW50
KGFyZyk7Ci0KLQlzdHJ1Y3QgY2tfZWxpZGVfY29uZmlnIGNvbmZpZyA9IENLX0VMSURFX0NPTkZJ
R19ERUZBVUxUX0lOSVRJQUxJWkVSOwotCXN0cnVjdCBja19lbGlkZV9zdGF0IHN0ID0gQ0tfRUxJ
REVfU1RBVF9JTklUSUFMSVpFUjsKLQotICAgICAgICBpZiAoYWZmX2l0ZXJhdGUoJmEpKSB7Ci0g
ICAgICAgICAgICAgICAgcGVycm9yKCJFUlJPUjogQ291bGQgbm90IGFmZmluZSB0aHJlYWQiKTsK
LSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLQotCXdoaWxl
IChpLS0pIHsKLQkJaWYgKHRpZCA9PSAwKSB7Ci0JCQlDS19FTElERV9MT0NLX0FEQVBUSVZFKGNr
X3N3bG9ja193cml0ZSwgJnN0LCAmY29uZmlnLCAmbG9jayk7Ci0JCQl7Ci0JCQkJbCA9IGNrX3By
X2xvYWRfdWludCgmbG9ja2VkKTsKLQkJCQlpZiAobCAhPSAwKSB7Ci0JCQkJCWNrX2Vycm9yKCJF
UlJPUiBbV1I6JWRdOiAldSAhPSAwXG4iLCBfX0xJTkVfXywgbCk7Ci0JCQkJfQotCi0JCQkJY2tf
cHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQkJ
Y2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0J
CQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7
Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tl
ZCk7Ci0KLQkJCQlsID0gY2tfcHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQkJCWlmIChsICE9IDgp
IHsKLQkJCQkJY2tfZXJyb3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDJcbiIsIF9fTElORV9fLCBs
KTsKLQkJCQl9Ci0KLQkJCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9kZWNf
dWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9k
ZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19w
cl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlj
a19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQotCQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tl
ZCk7Ci0JCQkJaWYgKGwgIT0gMCkgewotCQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUg
IT0gMFxuIiwgX19MSU5FX18sIGwpOwotCQkJCX0KLQkJCX0KLQkJCUNLX0VMSURFX1VOTE9DS19B
REFQVElWRShja19zd2xvY2tfd3JpdGUsICZzdCwgJmxvY2spOwotCQl9Ci0KLQkJQ0tfRUxJREVf
TE9DSyhja19zd2xvY2tfcmVhZCwgJmxvY2spOwotCQl7Ci0JCQlsID0gY2tfcHJfbG9hZF91aW50
KCZsb2NrZWQpOwotCQkJaWYgKGwgIT0gMCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbUkQ6JWRd
OiAldSAhPSAwXG4iLCBfX0xJTkVfXywgbCk7Ci0JCQl9Ci0JCX0KLQkJQ0tfRUxJREVfVU5MT0NL
KGNrX3N3bG9ja19yZWFkLCAmbG9jayk7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRp
YyB2b2lkICoKLXRocmVhZF9ydG1fbWl4KHZvaWQgKmFyZykKLXsKLQl1bnNpZ25lZCBpbnQgaSA9
IElURVJBVEU7Ci0JdW5zaWduZWQgaW50IGw7Ci0JaW50IHRpZCA9IGNrX3ByX2xvYWRfaW50KGFy
Zyk7Ci0KLSAgICAgICAgaWYgKGFmZl9pdGVyYXRlKCZhKSkgewotICAgICAgICAgICAgICAgIHBl
cnJvcigiRVJST1I6IENvdWxkIG5vdCBhZmZpbmUgdGhyZWFkIik7Ci0gICAgICAgICAgICAgICAg
ZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLQl3aGlsZSAoaS0tKSB7Ci0JCWlmICh0
aWQgPT0gMCkgewotCQkJaWYgKGkgJiAxKSB7Ci0JCQkJQ0tfRUxJREVfTE9DSyhja19zd2xvY2tf
d3JpdGUsICZsb2NrKTsKLQkJCX0gZWxzZSB7Ci0JCQkJY2tfc3dsb2NrX3dyaXRlX2xvY2soJmxv
Y2spOwotCQkJfQotCi0JCQl7Ci0JCQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9ja2VkKTsKLQkJ
CQlpZiAobCAhPSAwKSB7Ci0JCQkJCWNrX2Vycm9yKCJFUlJPUiBbV1I6JWRdOiAldSAhPSAwXG4i
LCBfX0xJTkVfXywgbCk7Ci0JCQkJfQotCi0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0J
CQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7
Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tl
ZCk7Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxv
Y2tlZCk7Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0KLQkJCQlsID0gY2tfcHJfbG9h
ZF91aW50KCZsb2NrZWQpOwotCQkJCWlmIChsICE9IDgpIHsKLQkJCQkJY2tfZXJyb3IoIkVSUk9S
IFtXUjolZF06ICV1ICE9IDJcbiIsIF9fTElORV9fLCBsKTsKLQkJCQl9Ci0KLQkJCQlja19wcl9k
ZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19w
cl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlj
a19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJ
CQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsK
LQotCQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0JCQkJaWYgKGwgIT0gMCkgewot
CQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUgIT0gMFxuIiwgX19MSU5FX18sIGwpOwot
CQkJCX0KLQkJCX0KLQotCQkJaWYgKGkgJiAxKSB7Ci0JCQkJQ0tfRUxJREVfVU5MT0NLKGNrX3N3
bG9ja193cml0ZSwgJmxvY2spOwotCQkJfSBlbHNlIHsKLQkJCQlja19zd2xvY2tfd3JpdGVfdW5s
b2NrKCZsb2NrKTsKLQkJCX0KLQkJfQotCQlpZiAoaSAmIDEpIHsKLQkJCUNLX0VMSURFX0xPQ0so
Y2tfc3dsb2NrX3JlYWQsICZsb2NrKTsKLQkJfSBlbHNlIHsKLQkJCWNrX3N3bG9ja19yZWFkX2xv
Y2soJmxvY2spOwotCQl9Ci0KLQkJewotCQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9ja2VkKTsK
LQkJCWlmIChsICE9IDApIHsKLQkJCQlja19lcnJvcigiRVJST1IgW1JEOiVkXTogJXUgIT0gMFxu
IiwgX19MSU5FX18sIGwpOwotCQkJfQotCQl9Ci0KLQkJaWYgKGkgJiAxKSB7Ci0JCQlDS19FTElE
RV9VTkxPQ0soY2tfc3dsb2NrX3JlYWQsICZsb2NrKTsKLQkJfSBlbHNlIHsKLQkJCWNrX3N3bG9j
a19yZWFkX3VubG9jaygmbG9jayk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gKE5VTEwpOwotfQotCi1z
dGF0aWMgdm9pZCAqCi10aHJlYWRfcnRtKHZvaWQgKmFyZykKLXsKLQl1bnNpZ25lZCBpbnQgaSA9
IElURVJBVEU7Ci0JdW5zaWduZWQgaW50IGw7Ci0JaW50IHRpZCA9IGNrX3ByX2xvYWRfaW50KGFy
Zyk7Ci0KLSAgICAgICAgaWYgKGFmZl9pdGVyYXRlKCZhKSkgewotICAgICAgICAgICAgICAgIHBl
cnJvcigiRVJST1I6IENvdWxkIG5vdCBhZmZpbmUgdGhyZWFkIik7Ci0gICAgICAgICAgICAgICAg
ZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLQl3aGlsZSAoaS0tKSB7Ci0JCWlmICh0
aWQgPT0gMCkgewotCQkJQ0tfRUxJREVfTE9DSyhja19zd2xvY2tfd3JpdGUsICZsb2NrKTsKLQkJ
CXsKLQkJCQlsID0gY2tfcHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQkJCWlmIChsICE9IDApIHsK
LQkJCQkJY2tfZXJyb3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDBcbiIsIF9fTElORV9fLCBsKTsK
LQkJCQl9Ci0KLQkJCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9pbmNfdWlu
dCgmbG9ja2VkKTsKLQkJCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9pbmNf
dWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9p
bmNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCQlja19w
cl9pbmNfdWludCgmbG9ja2VkKTsKLQotCQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7
Ci0JCQkJaWYgKGwgIT0gOCkgewotCQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUgIT0g
MlxuIiwgX19MSU5FX18sIGwpOwotCQkJCX0KLQotCQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQp
OwotCQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJCWNrX3ByX2RlY191aW50KCZsb2Nr
ZWQpOwotCQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJCWNrX3ByX2RlY191aW50KCZs
b2NrZWQpOwotCQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJCWNrX3ByX2RlY191aW50
KCZsb2NrZWQpOwotCQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCi0JCQkJbCA9IGNrX3By
X2xvYWRfdWludCgmbG9ja2VkKTsKLQkJCQlpZiAobCAhPSAwKSB7Ci0JCQkJCWNrX2Vycm9yKCJF
UlJPUiBbV1I6JWRdOiAldSAhPSAwXG4iLCBfX0xJTkVfXywgbCk7Ci0JCQkJfQotCQkJfQotCQkJ
Q0tfRUxJREVfVU5MT0NLKGNrX3N3bG9ja193cml0ZSwgJmxvY2spOwotCQl9Ci0KLQkJQ0tfRUxJ
REVfTE9DSyhja19zd2xvY2tfcmVhZCwgJmxvY2spOwotCQl7Ci0JCQlsID0gY2tfcHJfbG9hZF91
aW50KCZsb2NrZWQpOwotCQkJaWYgKGwgIT0gMCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbUkQ6
JWRdOiAldSAhPSAwXG4iLCBfX0xJTkVfXywgbCk7Ci0JCQl9Ci0JCX0KLQkJQ0tfRUxJREVfVU5M
T0NLKGNrX3N3bG9ja19yZWFkLCAmbG9jayk7Ci0JfQotCi0JcmV0dXJuIChOVUxMKTsKLX0KLSNl
bmRpZiAvKiBDS19GX1BSX1JUTSAqLwotCi1zdGF0aWMgdm9pZCAqCi10aHJlYWRfbGF0Y2godm9p
ZCAqYXJnKQotewotCXVuc2lnbmVkIGludCBpID0gSVRFUkFURTsKLQl1bnNpZ25lZCBpbnQgbDsK
LQlpbnQgdGlkID0gY2tfcHJfbG9hZF9pbnQoYXJnKTsKLQotICAgICAgICBpZiAoYWZmX2l0ZXJh
dGUoJmEpKSB7Ci0gICAgICAgICAgICAgICAgcGVycm9yKCJFUlJPUjogQ291bGQgbm90IGFmZmlu
ZSB0aHJlYWQiKTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAg
IH0KLQotCXdoaWxlIChpLS0pIHsKLQkJaWYgKHRpZCA9PSAwKSB7Ci0JCQkvKiBXcml0ZXIgKi8K
LQkJCWNrX3N3bG9ja193cml0ZV9sYXRjaCgmbG9jayk7Ci0JCQl7Ci0JCQkJbWVtY3B5KCZjb3B5
LCAmbG9jaywgc2l6ZW9mKGNrX3N3bG9ja190KSk7Ci0JCQkJbCA9IGNrX3ByX2xvYWRfdWludCgm
bG9ja2VkKTsKLQkJCQlpZiAobCAhPSAwKSB7Ci0JCQkJCWNrX2Vycm9yKCJFUlJPUiBbV1I6JWRd
OiAldSAhPSAwXG4iLCBfX0xJTkVfXywgbCk7Ci0JCQkJfQotCi0JCQkJY2tfcHJfaW5jX3VpbnQo
JmxvY2tlZCk7Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQkJY2tfcHJfaW5jX3Vp
bnQoJmxvY2tlZCk7Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQkJY2tfcHJfaW5j
X3VpbnQoJmxvY2tlZCk7Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQkJY2tfcHJf
aW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0KLQkJCQls
ID0gY2tfcHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQkJCWlmIChsICE9IDgpIHsKLQkJCQkJY2tf
ZXJyb3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDJcbiIsIF9fTElORV9fLCBsKTsKLQkJCQl9Ci0K
LQkJCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9kZWNfdWludCgmbG9ja2Vk
KTsKLQkJCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9kZWNfdWludCgmbG9j
a2VkKTsKLQkJCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9kZWNfdWludCgm
bG9ja2VkKTsKLQkJCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9kZWNfdWlu
dCgmbG9ja2VkKTsKLQotCQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0JCQkJaWYg
KGwgIT0gMCkgewotCQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUgIT0gMFxuIiwgX19M
SU5FX18sIGwpOwotCQkJCX0KLQkJCQltZW1jcHkoJmxvY2ssICZjb3B5LCBzaXplb2YoY2tfc3ds
b2NrX3QpKTsKLQkJCX0KLQkJCWNrX3N3bG9ja193cml0ZV91bmxhdGNoKCZsb2NrKTsKLQkJfQot
Ci0JCWNrX3N3bG9ja19yZWFkX2xvY2soJmxvY2spOwotCQl7Ci0JCQlsID0gY2tfcHJfbG9hZF91
aW50KCZsb2NrZWQpOwotCQkJaWYgKGwgIT0gMCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbUkQ6
JWRdOiAldSAhPSAwXG4iLCBfX0xJTkVfXywgbCk7Ci0JCQl9Ci0JCX0KLQkJY2tfc3dsb2NrX3Jl
YWRfdW5sb2NrKCZsb2NrKTsKLQl9Ci0KLQlyZXR1cm4gKE5VTEwpOwotfQotCi1zdGF0aWMgdm9p
ZCAqCi10aHJlYWQodm9pZCAqYXJnKQotewotCXVuc2lnbmVkIGludCBpID0gSVRFUkFURTsKLQl1
bnNpZ25lZCBpbnQgbDsKLQlpbnQgdGlkID0gY2tfcHJfbG9hZF9pbnQoYXJnKTsKLQotICAgICAg
ICBpZiAoYWZmX2l0ZXJhdGUoJmEpKSB7Ci0gICAgICAgICAgICAgICAgcGVycm9yKCJFUlJPUjog
Q291bGQgbm90IGFmZmluZSB0aHJlYWQiKTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJ
TFVSRSk7Ci0gICAgICAgIH0KLQotCXdoaWxlIChpLS0pIHsKLQkJaWYgKHRpZCA9PSAwKSB7Ci0J
CQkvKiBXcml0ZXIgKi8KLQkJCWNrX3N3bG9ja193cml0ZV9sb2NrKCZsb2NrKTsKLQkJCXsKLQkJ
CQlsID0gY2tfcHJfbG9hZF91aW50KCZsb2NrZWQpOwotCQkJCWlmIChsICE9IDApIHsKLQkJCQkJ
Y2tfZXJyb3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDBcbiIsIF9fTElORV9fLCBsKTsKLQkJCQl9
Ci0KLQkJCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9pbmNfdWludCgmbG9j
a2VkKTsKLQkJCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9pbmNfdWludCgm
bG9ja2VkKTsKLQkJCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9pbmNfdWlu
dCgmbG9ja2VkKTsKLQkJCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCQlja19wcl9pbmNf
dWludCgmbG9ja2VkKTsKLQotCQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0JCQkJ
aWYgKGwgIT0gOCkgewotCQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUgIT0gMlxuIiwg
X19MSU5FX18sIGwpOwotCQkJCX0KLQotCQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJ
CWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwot
CQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQp
OwotCQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJCWNrX3ByX2RlY191aW50KCZsb2Nr
ZWQpOwotCQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCi0JCQkJbCA9IGNrX3ByX2xvYWRf
dWludCgmbG9ja2VkKTsKLQkJCQlpZiAobCAhPSAwKSB7Ci0JCQkJCWNrX2Vycm9yKCJFUlJPUiBb
V1I6JWRdOiAldSAhPSAwXG4iLCBfX0xJTkVfXywgbCk7Ci0JCQkJfQotCQkJfQotCQkJY2tfc3ds
b2NrX3dyaXRlX3VubG9jaygmbG9jayk7Ci0JCX0KLQotCQlja19zd2xvY2tfcmVhZF9sb2NrKCZs
b2NrKTsKLQkJewotCQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9ja2VkKTsKLQkJCWlmIChsICE9
IDApIHsKLQkJCQlja19lcnJvcigiRVJST1IgW1JEOiVkXTogJXUgIT0gMFxuIiwgX19MSU5FX18s
IGwpOwotCQkJfQotCQl9Ci0JCWNrX3N3bG9ja19yZWFkX3VubG9jaygmbG9jayk7Ci0JfQotCi0J
cmV0dXJuIChOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQKLXN3bG9ja190ZXN0KHB0aHJlYWRfdCAq
dGhyZWFkcywgdm9pZCAqKCpmKSh2b2lkICopLCBjb25zdCBjaGFyICp0ZXN0KQotewotCWludCBp
LCB0aWRbbnRocl07Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW5nIHRocmVhZHMgKCVzKS4u
LiIsIHRlc3QpOwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspIHsKLQkJY2tfcHJfc3RvcmVf
aW50KCZ0aWRbaV0sIGkpOwotCQlpZiAocHRocmVhZF9jcmVhdGUoJnRocmVhZHNbaV0sIE5VTEws
IGYsICZ0aWRbaV0pKSB7Ci0JCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBjcmVhdGUgdGhy
ZWFkICVkXG4iLCBpKTsKLQkJfQotCX0KLQlmcHJpbnRmKHN0ZGVyciwgIi4iKTsKLQotCWZvciAo
aSA9IDA7IGkgPCBudGhyOyBpKyspCi0JCXB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsK
LQlmcHJpbnRmKHN0ZGVyciwgImRvbmUgKHBhc3NlZClcbiIpOwotCXJldHVybjsKLX0KLQotaW50
Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JcHRocmVhZF90ICp0aHJlYWRzOwot
Ci0JaWYgKGFyZ2MgIT0gMykgewotCQlja19lcnJvcigiVXNhZ2U6IHZhbGlkYXRlIDxudW1iZXIg
b2YgdGhyZWFkcz4gPGFmZmluaXR5IGRlbHRhPlxuIik7Ci0JfQotCi0JbnRociA9IGF0b2koYXJn
dlsxXSk7Ci0JaWYgKG50aHIgPD0gMCkgewotCQlja19lcnJvcigiRVJST1I6IE51bWJlciBvZiB0
aHJlYWRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcbiIpOwotCX0KLQotCXRocmVhZHMgPSBtYWxs
b2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyKTsKLQlpZiAodGhyZWFkcyA9PSBOVUxMKSB7Ci0J
CWNrX2Vycm9yKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIHRocmVhZCBzdHJ1Y3R1cmVzXG4i
KTsKLQl9Ci0KLQlhLmRlbHRhID0gYXRvaShhcmd2WzJdKTsKLQotCXN3bG9ja190ZXN0KHRocmVh
ZHMsIHRocmVhZCwgInJlZ3VsYXIiKTsKLQlzd2xvY2tfdGVzdCh0aHJlYWRzLCB0aHJlYWRfbGF0
Y2gsICJsYXRjaCIpOwotI2lmZGVmIENLX0ZfUFJfUlRNCi0Jc3dsb2NrX3Rlc3QodGhyZWFkcywg
dGhyZWFkX3J0bSwgInJ0bSIpOwotCXN3bG9ja190ZXN0KHRocmVhZHMsIHRocmVhZF9ydG1fbWl4
LCAicnRtLW1peCIpOwotCXN3bG9ja190ZXN0KHRocmVhZHMsIHRocmVhZF9ydG1fYWRhcHRpdmUs
ICJydG0tYWRhcHRpdmUiKTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja190ZmxvY2svYmVu
Y2htYXJrL01ha2VmaWxlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVz
c2lvbnMvY2tfdGZsb2NrL2JlbmNobWFyay9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZWQ2MzUwNDAwMzJmMDkyOTQ3NTBjYjEzODk2MzY2YWEwMTZjMTgzMS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja190ZmxvY2svYmVuY2htYXJrL01ha2VmaWxl
CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLlBIT05ZOiBjbGVhbiBkaXN0cmlidXRp
b24KLQotT0JKRUNUUz1sYXRlbmN5IHRocm91Z2hwdXQKLQotYWxsOiAkKE9CSkVDVFMpCi0KLWxh
dGVuY3k6IGxhdGVuY3kuYyAuLi8uLi8uLi9pbmNsdWRlL2NrX3J3bG9jay5oIC4uLy4uLy4uL2lu
Y2x1ZGUvY2tfZWxpZGUuaAotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBsYXRlbmN5IGxhdGVuY3kuYwot
Ci10aHJvdWdocHV0OiB0aHJvdWdocHV0LmMgLi4vLi4vLi4vaW5jbHVkZS9ja19yd2xvY2suaCAu
Li8uLi8uLi9pbmNsdWRlL2NrX2VsaWRlLmgKLQkkKENDKSAkKENGTEFHUykgLW8gdGhyb3VnaHB1
dCB0aHJvdWdocHV0LmMKLQotY2xlYW46Ci0Jcm0gLXJmICouZFNZTSAqLmV4ZSAqfiAqLm8gJChP
QkpFQ1RTKQotCi1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxkCi1DRkxB
R1MrPSQoUFRIUkVBRF9DRkxBR1MpIC1EX0dOVV9TT1VSQ0UKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3RmbG9jay9iZW5jaG1hcmsv
bGF0ZW5jeS5jIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMv
Y2tfdGZsb2NrL2JlbmNobWFyay9sYXRlbmN5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGZkNzdkNDRiMDY2ZDQ0NjI1N2UyYzAzOGY0YWJjMmUzOWM3ZDU4OTUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfdGZsb2NrL2JlbmNobWFyay9sYXRlbmN5LmMKKysr
IC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEtMjAxNSBT
YW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0g
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
Ci0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8Y2tf
dGZsb2NrLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0j
aW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNkZWZpbmUgQ0tfRl9QUl9SVE0KLQotI2lmbmRl
ZiBTVEVQUwotI2RlZmluZSBTVEVQUyAyMDAwMDAwCi0jZW5kaWYKLQotaW50Ci1tYWluKHZvaWQp
Ci17Ci0JdWludDY0X3Qgc19iLCBlX2IsIGk7Ci0JY2tfdGZsb2NrX3RpY2tldF90IHRmbG9jayA9
IENLX1RGTE9DS19USUNLRVRfSU5JVElBTElaRVI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU1RFUFM7
IGkrKykgewotCQlja190ZmxvY2tfdGlja2V0X3dyaXRlX2xvY2soJnRmbG9jayk7Ci0JCWNrX3Rm
bG9ja190aWNrZXRfd3JpdGVfdW5sb2NrKCZ0ZmxvY2spOwotCX0KLQotCXNfYiA9IHJkdHNjKCk7
Ci0JZm9yIChpID0gMDsgaSA8IFNURVBTOyBpKyspIHsKLQkJY2tfdGZsb2NrX3RpY2tldF93cml0
ZV9sb2NrKCZ0ZmxvY2spOwotCQlja190ZmxvY2tfdGlja2V0X3dyaXRlX3VubG9jaygmdGZsb2Nr
KTsKLQl9Ci0JZV9iID0gcmR0c2MoKTsKLQlwcmludGYoIiAgICAgICAgICAgICAgICBXUklURTog
dGZsb2NrICAgJTE1IiBQUkl1NjQgIlxuIiwgKGVfYiAtIHNfYikgLyBTVEVQUyk7Ci0KLQlmb3Ig
KGkgPSAwOyBpIDwgU1RFUFM7IGkrKykgewotCQlja190ZmxvY2tfdGlja2V0X3JlYWRfbG9jaygm
dGZsb2NrKTsKLQkJY2tfdGZsb2NrX3RpY2tldF9yZWFkX3VubG9jaygmdGZsb2NrKTsKLQl9Ci0K
LQlzX2IgPSByZHRzYygpOwotCWZvciAoaSA9IDA7IGkgPCBTVEVQUzsgaSsrKSB7Ci0JCWNrX3Rm
bG9ja190aWNrZXRfcmVhZF9sb2NrKCZ0ZmxvY2spOwotCQlja190ZmxvY2tfdGlja2V0X3JlYWRf
dW5sb2NrKCZ0ZmxvY2spOwotCX0KLQllX2IgPSByZHRzYygpOwotCXByaW50ZigiICAgICAgICAg
ICAgICAgIFJFQUQ6ICB0ZmxvY2sgICAlMTUiIFBSSXU2NCAiXG4iLCAoZV9iIC0gc19iKSAvIFNU
RVBTKTsKLQotCXJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9ja190ZmxvY2svYmVuY2htYXJrL3Rocm91Z2hwdXQu
YyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3RmbG9j
ay9iZW5jaG1hcmsvdGhyb3VnaHB1dC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
MWQyMmJkZmEwNzM4MTU4OGNhOTQ1N2U1NzY1OGY0NTliYWM1MzU2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3RmbG9jay9iZW5jaG1hcmsvdGhyb3VnaHB1dC5jCisrKyAv
ZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFNh
bXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
LSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxja190
ZmxvY2suaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNp
bmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNp
Zm5kZWYgU1RFUFMKLSNkZWZpbmUgU1RFUFMgMTAwMDAwMAotI2VuZGlmCi0KLXN0YXRpYyBpbnQg
YmFycmllcjsKLXN0YXRpYyBpbnQgdGhyZWFkczsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmxhZyBD
S19DQ19DQUNIRUxJTkU7Ci1zdGF0aWMgc3RydWN0IHsKLQlja190ZmxvY2tfdGlja2V0X3QgbG9j
azsKLX0gcncgQ0tfQ0NfQ0FDSEVMSU5FID0gewotCS5sb2NrID0gQ0tfVEZMT0NLX1RJQ0tFVF9J
TklUSUFMSVpFUgotfTsKLQotc3RhdGljIHN0cnVjdCBhZmZpbml0eSBhZmZpbml0eTsKLQotc3Rh
dGljIHZvaWQgKgotdGhyZWFkX2xvY2sodm9pZCAqcHVuKQotewotCXVpbnQ2NF90IHNfYiwgZV9i
LCBhLCBpOwotCXVpbnQ2NF90ICp2YWx1ZSA9IHB1bjsKLQotCWlmIChhZmZfaXRlcmF0ZSgmYWZm
aW5pdHkpICE9IDApIHsKLQkJcGVycm9yKCJFUlJPUjogQ291bGQgbm90IGFmZmluZSB0aHJlYWQi
KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWNrX3ByX2luY19pbnQoJmJhcnJpZXIp
OwotCXdoaWxlIChja19wcl9sb2FkX2ludCgmYmFycmllcikgIT0gdGhyZWFkcykKLQkJY2tfcHJf
c3RhbGwoKTsKLQotCWZvciAoaSA9IDEsIGEgPSAwOzsgaSsrKSB7Ci0JCXNfYiA9IHJkdHNjKCk7
Ci0JCWNrX3RmbG9ja190aWNrZXRfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfdGZsb2NrX3Rp
Y2tldF9yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3RmbG9ja190aWNrZXRfcmVhZF9sb2Nr
KCZydy5sb2NrKTsKLQkJY2tfdGZsb2NrX3RpY2tldF9yZWFkX3VubG9jaygmcncubG9jayk7Ci0J
CWNrX3RmbG9ja190aWNrZXRfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfdGZsb2NrX3RpY2tl
dF9yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3RmbG9ja190aWNrZXRfcmVhZF9sb2NrKCZy
dy5sb2NrKTsKLQkJY2tfdGZsb2NrX3RpY2tldF9yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNr
X3RmbG9ja190aWNrZXRfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfdGZsb2NrX3RpY2tldF9y
ZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3RmbG9ja190aWNrZXRfcmVhZF9sb2NrKCZydy5s
b2NrKTsKLQkJY2tfdGZsb2NrX3RpY2tldF9yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3Rm
bG9ja190aWNrZXRfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfdGZsb2NrX3RpY2tldF9yZWFk
X3VubG9jaygmcncubG9jayk7Ci0JCWNrX3RmbG9ja190aWNrZXRfcmVhZF9sb2NrKCZydy5sb2Nr
KTsKLQkJY2tfdGZsb2NrX3RpY2tldF9yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3RmbG9j
a190aWNrZXRfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfdGZsb2NrX3RpY2tldF9yZWFkX3Vu
bG9jaygmcncubG9jayk7Ci0JCWNrX3RmbG9ja190aWNrZXRfcmVhZF9sb2NrKCZydy5sb2NrKTsK
LQkJY2tfdGZsb2NrX3RpY2tldF9yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3RmbG9ja190
aWNrZXRfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfdGZsb2NrX3RpY2tldF9yZWFkX3VubG9j
aygmcncubG9jayk7Ci0JCWNrX3RmbG9ja190aWNrZXRfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJ
Y2tfdGZsb2NrX3RpY2tldF9yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3RmbG9ja190aWNr
ZXRfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfdGZsb2NrX3RpY2tldF9yZWFkX3VubG9jaygm
cncubG9jayk7Ci0JCWNrX3RmbG9ja190aWNrZXRfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tf
dGZsb2NrX3RpY2tldF9yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWNrX3RmbG9ja190aWNrZXRf
cmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfdGZsb2NrX3RpY2tldF9yZWFkX3VubG9jaygmcncu
bG9jayk7Ci0JCWNrX3RmbG9ja190aWNrZXRfcmVhZF9sb2NrKCZydy5sb2NrKTsKLQkJY2tfdGZs
b2NrX3RpY2tldF9yZWFkX3VubG9jaygmcncubG9jayk7Ci0JCWVfYiA9IHJkdHNjKCk7Ci0KLQkJ
YSArPSAoZV9iIC0gc19iKSA+PiA0OwotCi0JCWlmIChja19wcl9sb2FkX3VpbnQoJmZsYWcpID09
IDEpCi0JCQlicmVhazsKLQl9Ci0KLQlja19wcl9pbmNfaW50KCZiYXJyaWVyKTsKLQl3aGlsZSAo
Y2tfcHJfbG9hZF9pbnQoJmJhcnJpZXIpICE9IHRocmVhZHMgKiAyKQotCQlja19wcl9zdGFsbCgp
OwotCi0JKnZhbHVlID0gKGEgLyBpKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQK
LXRmbG9ja190ZXN0KHB0aHJlYWRfdCAqcCwgaW50IGQsIHVpbnQ2NF90ICpsYXRlbmN5LCB2b2lk
ICooKmYpKHZvaWQgKiksIGNvbnN0IGNoYXIgKmxhYmVsKQotewotCWludCB0OwotCi0JY2tfcHJf
c3RvcmVfaW50KCZiYXJyaWVyLCAwKTsKLQlja19wcl9zdG9yZV91aW50KCZmbGFnLCAwKTsKLQot
CWFmZmluaXR5LmRlbHRhID0gZDsKLQlhZmZpbml0eS5yZXF1ZXN0ID0gMDsKLQotCWZwcmludGYo
c3RkZXJyLCAiQ3JlYXRpbmcgdGhyZWFkcyAoJXMpLi4uIiwgbGFiZWwpOwotCWZvciAodCA9IDA7
IHQgPCB0aHJlYWRzOyB0KyspIHsKLQkJaWYgKHB0aHJlYWRfY3JlYXRlKCZwW3RdLCBOVUxMLCBm
LCBsYXRlbmN5ICsgdCkgIT0gMCkgewotCQkJY2tfZXJyb3IoIkVSUk9SOiBDb3VsZCBub3QgY3Jl
YXRlIHRocmVhZCAlZFxuIiwgdCk7Ci0JCX0KLQl9Ci0JZnByaW50ZihzdGRlcnIsICJkb25lXG4i
KTsKLQotCWNvbW1vbl9zbGVlcCgxMCk7Ci0JY2tfcHJfc3RvcmVfdWludCgmZmxhZywgMSk7Ci0K
LQlmcHJpbnRmKHN0ZGVyciwgIldhaXRpbmcgZm9yIHRocmVhZHMgdG8gZmluaXNoIGFjcXVpc2l0
aW9uIHJlZ3Jlc3Npb24uLi4iKTsKLQlmb3IgKHQgPSAwOyB0IDwgdGhyZWFkczsgdCsrKQotCQlw
dGhyZWFkX2pvaW4ocFt0XSwgTlVMTCk7Ci0JZnByaW50ZihzdGRlcnIsICJkb25lXG5cbiIpOwot
Ci0JZm9yICh0ID0gMTsgdCA8PSB0aHJlYWRzOyB0KyspCi0JCXByaW50ZigiJTEwdSAlMjAiIFBS
SXU2NCAiXG4iLCB0LCBsYXRlbmN5W3QgLSAxXSk7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7
Ci0JcmV0dXJuOwotfQotCi0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewot
CWludCBkOwotCXB0aHJlYWRfdCAqcDsKLQl1aW50NjRfdCAqbGF0ZW5jeTsKLQotCWlmIChhcmdj
ICE9IDMpIHsKLQkJY2tfZXJyb3IoIlVzYWdlOiB0aHJvdWdocHV0IDxkZWx0YT4gPHRocmVhZHM+
XG4iKTsKLQl9Ci0KLQl0aHJlYWRzID0gYXRvaShhcmd2WzJdKTsKLQlpZiAodGhyZWFkcyA8PSAw
KSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogVGhyZWFkcyBtdXN0IGJlIGEgdmFsdWUgPiAwLlxuIik7
Ci0JfQotCi0JcCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIHRocmVhZHMpOwotCWlmIChw
ID09IE5VTEwpIHsKLQkJY2tfZXJyb3IoIkVSUk9SOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aHJl
YWQuXG4iKTsKLQl9Ci0KLQlsYXRlbmN5ID0gbWFsbG9jKHNpemVvZih1aW50NjRfdCkgKiB0aHJl
YWRzKTsKLQlpZiAobGF0ZW5jeSA9PSBOVUxMKSB7Ci0JCWNrX2Vycm9yKCJFUlJPUjogRmFpbGVk
IHRvIGNyZWF0ZSBsYXRlbmN5IGJ1ZmZlci5cbiIpOwotCX0KLQotCWQgPSBhdG9pKGFyZ3ZbMV0p
OwotCXRmbG9ja190ZXN0KHAsIGQsIGxhdGVuY3ksIHRocmVhZF9sb2NrLCAidGZsb2NrIik7Ci0J
cmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2NrL3JlZ3Jlc3Npb25zL2NrX3RmbG9jay92YWxpZGF0ZS9NYWtlZmlsZSBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3RmbG9jay92YWxpZGF0ZS9NYWtl
ZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFlN2M3MzFiNGQwM2FkMDA1MDZm
NWM2NTNlMmNjNThjM2I3YzNiYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9yZWdyZXNzaW9ucy9j
a190ZmxvY2svdmFsaWRhdGUvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBA
Ci0uUEhPTlk6IGNoZWNrIGNsZWFuIGRpc3RyaWJ1dGlvbgotCi1PQkpFQ1RTPXZhbGlkYXRlCi0K
LWFsbDogJChPQkpFQ1RTKQotCi12YWxpZGF0ZTogdmFsaWRhdGUuYyAuLi8uLi8uLi9pbmNsdWRl
L2NrX3RmbG9jay5oIC4uLy4uLy4uL2luY2x1ZGUvY2tfZWxpZGUuaAotCSQoQ0MpICQoQ0ZMQUdT
KSAtbyB2YWxpZGF0ZSB2YWxpZGF0ZS5jCi0KLWNoZWNrOiBhbGwKLQkuL3ZhbGlkYXRlICQoQ09S
RVMpIDEKLQotY2xlYW46Ci0Jcm0gLXJmICouZFNZTSAqLmV4ZSAqfiAqLm8gJChPQkpFQ1RTKQot
Ci1pbmNsdWRlIC4uLy4uLy4uL2J1aWxkL3JlZ3Jlc3Npb25zLmJ1aWxkCi1DRkxBR1MrPSQoUFRI
UkVBRF9DRkxBR1MpIC1EX0dOVV9TT1VSQ0UKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NrX3RmbG9jay92YWxpZGF0ZS92YWxpZGF0ZS5j
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY2tfdGZsb2Nr
L3ZhbGlkYXRlL3ZhbGlkYXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZTll
NjU0NjY3OTRmMDFkNmYyZGQyODU3NTE0YTRlYzJlMmJiNjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Y2svcmVncmVzc2lvbnMvY2tfdGZsb2NrL3ZhbGlkYXRlL3ZhbGlkYXRlLmMKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBC
YWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0j
aW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bWF0
aC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8
c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2lu
Y2x1ZGUgPHN5cy90aW1lLmg+Ci0KLSNpbmNsdWRlIDxja19wci5oPgotI2luY2x1ZGUgPGNrX3Rm
bG9jay5oPgotCi0jaW5jbHVkZSAiLi4vLi4vY29tbW9uLmgiCi0KLSNpZm5kZWYgSVRFUkFURQot
I2RlZmluZSBJVEVSQVRFIDEwMDAwMDAKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IGFmZmluaXR5
IGE7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGxvY2tlZDsKLXN0YXRpYyBpbnQgbnRocjsKLXN0YXRp
YyBja190ZmxvY2tfdGlja2V0X3QgbG9jayA9IENLX1RGTE9DS19USUNLRVRfSU5JVElBTElaRVI7
Ci0KLXN0YXRpYyB2b2lkICoKLXRocmVhZCh2b2lkICpudWxsIENLX0NDX1VOVVNFRCkKLXsKLQl1
bnNpZ25lZCBpbnQgaSA9IElURVJBVEU7Ci0JdW5zaWduZWQgaW50IGw7Ci0KLSAgICAgICAgaWYg
KGFmZl9pdGVyYXRlKCZhKSkgewotICAgICAgICAgICAgICAgIHBlcnJvcigiRVJST1I6IENvdWxk
IG5vdCBhZmZpbmUgdGhyZWFkIik7Ci0gICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUp
OwotICAgICAgICB9Ci0KLQl3aGlsZSAoaS0tKSB7Ci0JCWNrX3RmbG9ja190aWNrZXRfd3JpdGVf
bG9jaygmbG9jayk7Ci0JCXsKLQkJCWwgPSBja19wcl9sb2FkX3VpbnQoJmxvY2tlZCk7Ci0JCQlp
ZiAobCAhPSAwKSB7Ci0JCQkJY2tfZXJyb3IoIkVSUk9SIFtXUjolZF06ICV1ICE9IDBcbiIsIF9f
TElORV9fLCBsKTsKLQkJCX0KLQotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19w
cl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tf
cHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQkJCWNr
X3ByX2luY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfaW5jX3VpbnQoJmxvY2tlZCk7Ci0JCQlj
a19wcl9pbmNfdWludCgmbG9ja2VkKTsKLQotCQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9ja2Vk
KTsKLQkJCWlmIChsICE9IDgpIHsKLQkJCQlja19lcnJvcigiRVJST1IgW1dSOiVkXTogJXUgIT0g
MlxuIiwgX19MSU5FX18sIGwpOwotCQkJfQotCi0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsK
LQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7
Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2VkKTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQp
OwotCQkJY2tfcHJfZGVjX3VpbnQoJmxvY2tlZCk7Ci0JCQlja19wcl9kZWNfdWludCgmbG9ja2Vk
KTsKLQkJCWNrX3ByX2RlY191aW50KCZsb2NrZWQpOwotCi0JCQlsID0gY2tfcHJfbG9hZF91aW50
KCZsb2NrZWQpOwotCQkJaWYgKGwgIT0gMCkgewotCQkJCWNrX2Vycm9yKCJFUlJPUiBbV1I6JWRd
OiAldSAhPSAwXG4iLCBfX0xJTkVfXywgbCk7Ci0JCQl9Ci0JCX0KLQkJY2tfdGZsb2NrX3RpY2tl
dF93cml0ZV91bmxvY2soJmxvY2spOwotCi0JCWNrX3RmbG9ja190aWNrZXRfcmVhZF9sb2NrKCZs
b2NrKTsKLQkJewotCQkJbCA9IGNrX3ByX2xvYWRfdWludCgmbG9ja2VkKTsKLQkJCWlmIChsICE9
IDApIHsKLQkJCQlja19lcnJvcigiRVJST1IgW1JEOiVkXTogJXUgIT0gMFxuIiwgX19MSU5FX18s
IGwpOwotCQkJfQotCQl9Ci0JCWNrX3RmbG9ja190aWNrZXRfcmVhZF91bmxvY2soJmxvY2spOwot
CX0KLQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZmxvY2tfdGlja2V0X3Rl
c3QocHRocmVhZF90ICp0aHJlYWRzLCB2b2lkICooKmYpKHZvaWQgKiksIGNvbnN0IGNoYXIgKnRl
c3QpCi17Ci0JaW50IGk7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW5nIHRocmVhZHMgKCVz
KS4uLiIsIHRlc3QpOwotCWZvciAoaSA9IDA7IGkgPCBudGhyOyBpKyspIHsKLQkJaWYgKHB0aHJl
YWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCBOVUxMLCBmLCBOVUxMKSkgewotCQkJY2tfZXJyb3IoIkVS
Uk9SOiBDb3VsZCBub3QgY3JlYXRlIHRocmVhZCAlZFxuIiwgaSk7Ci0JCX0KLQl9Ci0JZnByaW50
ZihzdGRlcnIsICIuIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnRocjsgaSsrKQotCQlwdGhyZWFk
X2pvaW4odGhyZWFkc1tpXSwgTlVMTCk7Ci0JZnByaW50ZihzdGRlcnIsICJkb25lIChwYXNzZWQp
XG4iKTsKLQlyZXR1cm47Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQot
ewotCXB0aHJlYWRfdCAqdGhyZWFkczsKLQotCWlmIChhcmdjICE9IDMpIHsKLQkJY2tfZXJyb3Io
IlVzYWdlOiB2YWxpZGF0ZSA8bnVtYmVyIG9mIHRocmVhZHM+IDxhZmZpbml0eSBkZWx0YT5cbiIp
OwotCX0KLQotCW50aHIgPSBhdG9pKGFyZ3ZbMV0pOwotCWlmIChudGhyIDw9IDApIHsKLQkJY2tf
ZXJyb3IoIkVSUk9SOiBOdW1iZXIgb2YgdGhyZWFkcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXG4i
KTsKLQl9Ci0KLQl0aHJlYWRzID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocik7Ci0J
aWYgKHRocmVhZHMgPT0gTlVMTCkgewotCQlja19lcnJvcigiRVJST1I6IENvdWxkIG5vdCBhbGxv
Y2F0ZSB0aHJlYWQgc3RydWN0dXJlc1xuIik7Ci0JfQotCi0JYS5kZWx0YSA9IGF0b2koYXJndlsy
XSk7Ci0KLQl0ZmxvY2tfdGlja2V0X3Rlc3QodGhyZWFkcywgdGhyZWFkLCAicmVndWxhciIpOwot
CWNrX3RmbG9ja190aWNrZXRfaW5pdCgmbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3JlZ3Jlc3Npb25zL2NvbW1vbi5o
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY29tbW9uLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2N2MyYWYxOTE4MTcwNjk5MWZkMDZjY2Nj
NmVlYmY1MTFhYjljY2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svcmVncmVzc2lvbnMvY29tbW9u
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEx
LTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBDS19DT01NT05fSAotI2RlZmluZSBDS19DT01NT05fSAotCi0jaW5jbHVkZSA8Y2tfY2MuaD4K
LSNpbmNsdWRlIDxja19wci5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlv
Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotI2lmZGVm
IF9fbGludXhfXwotI2luY2x1ZGUgPHNjaGVkLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0j
aW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KLSNlbGlmIGRlZmluZWQoX19NQUNIX18pCi0jaW5jbHVk
ZSA8bWFjaC9tYWNoLmg+Ci0jaW5jbHVkZSA8bWFjaC90aHJlYWRfcG9saWN5Lmg+Ci0jZWxpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5
cy9jcHVzZXQuaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfV0lOMzIpCi0jaW5jbHVkZSA8YXNz
ZXJ0Lmg+Ci0jZGVmaW5lIE5PTUlOTUFYCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2RlZmluZSBE
RUxUQV9FUE9DSCAgMTE2NDQ0NzM2MDAwMDAwMDBVTEwKLSNlbHNlCi0jaW5jbHVkZSA8c2lnbmFs
Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBDT1JFUwotI2RlZmlu
ZSBDT1JFUyA4Ci0jZW5kaWYKLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1jb21tb25fc3Jh
bmQodW5zaWduZWQgaW50IGkpCi17Ci0jaWZkZWYgX1dJTjMyCi0Jc3JhbmQoaSk7Ci0jZWxzZQot
CXNyYW5kb20oaSk7Ci0jZW5kaWYKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBpbnQKLWNvbW1v
bl9yYW5kKHZvaWQpCi17Ci0jaWZkZWYgX1dJTjMyCi0JcmV0dXJuIHJhbmQoKTsKLSNlbHNlCi0J
cmV0dXJuIHJhbmRvbSgpOwotI2VuZGlmCi19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgaW50Ci1j
b21tb25fcmFuZF9yKHVuc2lnbmVkIGludCAqaSkKLXsKLSNpZmRlZiBfV0lOMzIKLQkodm9pZClp
OwotCi0JLyoKLQkgKiBXaGVuIGxpbmtlZCB3aXRoIC1tdGhyZWFkcywgcmFuZCgpIGlzIHRocmVh
ZC1zYWZlLgotCSAqIHJhbmRfcyBpcyBhbHNvIGFuIG9wdGlvbi4KLQkgKi8KLQlyZXR1cm4gcmFu
ZCgpOwotI2Vsc2UKLQlyZXR1cm4gcmFuZF9yKGkpOwotI2VuZGlmCi19Ci0KLUNLX0NDX0lOTElO
RSBzdGF0aWMgdm9pZAotY29tbW9uX3NyYW5kNDgobG9uZyBpbnQgaSkKLXsKLSNpZmRlZiBfV0lO
MzIKLQlzcmFuZChpKTsKLSNlbHNlCi0Jc3JhbmQ0OChpKTsKLSNlbmRpZgotfQotCi1DS19DQ19J
TkxJTkUgc3RhdGljIGxvbmcgaW50Ci1jb21tb25fbHJhbmQ0OCh2b2lkKQotewotI2lmZGVmIF9X
SU4zMgotCXJldHVybiByYW5kKCk7Ci0jZWxzZQotCXJldHVybiBscmFuZDQ4KCk7Ci0jZW5kaWYK
LX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBkb3VibGUKLWNvbW1vbl9kcmFuZDQ4KHZvaWQpCi17
Ci0jaWZkZWYgX1dJTjMyCi0JcmV0dXJuIChkb3VibGUpcmFuZCgpL1JBTkRfTUFYOwotI2Vsc2UK
LQlyZXR1cm4gZHJhbmQ0OCgpOwotI2VuZGlmCi19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9p
ZAotY29tbW9uX3NsZWVwKHVuc2lnbmVkIGludCBuKQotewotI2lmZGVmIF9XSU4zMgotCVNsZWVw
KG4gKiAxMDAwKTsKLSNlbHNlCi0Jc2xlZXAobik7Ci0jZW5kaWYKLX0KLQotQ0tfQ0NfSU5MSU5F
IHN0YXRpYyBpbnQKLWNvbW1vbl9nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCB2b2lk
ICp0eikKLXsKLSNpZmRlZiBfV0lOMzIKLQlGSUxFVElNRSBmdDsKLQl1aW50NjRfdCB0bXBfdGlt
ZSA9IDA7Ci0Jc3RhdGljIGJvb2wgdHpmbGFnID0gZmFsc2U7Ci0Jc3RydWN0IHRpbWV6b25lICp0
enAgPSB0ejsKLQotCWlmICh0diAhPSBOVUxMKSB7Ci0JCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1l
KCZmdCk7Ci0JCXRtcF90aW1lIHw9IGZ0LmR3SGlnaERhdGVUaW1lOwotCQl0bXBfdGltZSA8PD0g
MzI7Ci0JCXRtcF90aW1lIHw9IGZ0LmR3TG93RGF0ZVRpbWU7Ci0KLQkJLyogR2V0U3lzdGVtVGlt
ZUFzRmlsZVRpbWUgcmV0dXJucyAxMDAgbmFub3NlY29uZCBpbnRlcnZhbHMuICovCi0JCXRtcF90
aW1lIC89IDEwOwotCi0JCS8qIFdpbmRvd3MnIGVwb2NoIHN0YXJ0cyBvbiAwMS8wMS8xNjAxLCB3
aGlsZSBVbml4JyBzdGFydHMgb24gMDEvMDEvMTk3MC4gKi8KLQkJdG1wX3RpbWUgLT0gREVMVEFf
RVBPQ0g7Ci0KLQkJdHYtPnR2X3NlYyA9IChsb25nKSh0bXBfdGltZSAvIDEwMDAwMDBVTCk7Ci0J
CXR2LT50dl91c2VjID0gKGxvbmcpKHRtcF90aW1lICUgMTAwMDAwMFVMKTsKLQl9Ci0KLQotCWlm
ICh0eiAhPSBOVUxMKSB7Ci0JCWlmICh0emZsYWcgPT0gZmFsc2UpIHsKLQkJCV90enNldCgpOwot
CQkJdHpmbGFnID0gdHJ1ZTsKLQkJfQotCi0JCXR6cC0+dHpfbWludXRlc3dlc3QgPSBfdGltZXpv
bmUgLyA2MDsKLQkJdHpwLT50el9kc3R0aW1lID0gX2RheWxpZ2h0OwotCX0KLQotCXJldHVybiAw
OwotI2Vsc2UKLQlyZXR1cm4gZ2V0dGltZW9mZGF5KHR2LCB0eik7Ci0jZW5kaWYKLX0KLQotQ0tf
Q0NfVU5VU0VEIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWNvbW1vbl9hbGFybSh2b2lkICgqc2lnX2hh
bmRsZXIpKGludCksIHZvaWQgKmFsYXJtX2V2ZW50LCB1bnNpZ25lZCBpbnQgZHVyYXRpb24pCi17
Ci0jaWZkZWYgX1dJTjMyCi0JKHZvaWQpc2lnX2hhbmRsZXI7Ci0JKHZvaWQpZHVyYXRpb247Ci0J
Ym9vbCBzdWNjZXNzOwotCUhBTkRMRSAqYWxhcm1faGFuZGxlID0gYWxhcm1fZXZlbnQ7Ci0Jc3Vj
Y2VzcyA9IFNldEV2ZW50KCphbGFybV9oYW5kbGUpOwotCWFzc2VydChzdWNjZXNzICE9IGZhbHNl
KTsKLQlyZXR1cm4gMDsKLSNlbHNlCi0JKHZvaWQpYWxhcm1fZXZlbnQ7Ci0Jc2lnbmFsKFNJR0FM
Uk0sIHNpZ19oYW5kbGVyKTsKLQlyZXR1cm4gYWxhcm0oZHVyYXRpb24pOwotI2VuZGlmCi19Ci0K
LSNpZmRlZiBfV0lOMzIKLSNpZm5kZWYgU0VDT05EX1RJTUVSCi0jZGVmaW5lCVNFQ09ORF9USU1F
UiAxMDAwMDAwMAotI2VuZGlmCi0jZGVmaW5lCUNPTU1PTl9BTEFSTV9ERUNMQVJFX0dMT0JBTChw
cmVmaXgsIGFsYXJtX2V2ZW50X25hbWUsIGZsYWdfbmFtZSkJCQkJXAotc3RhdGljIEhBTkRMRSBw
cmVmaXgjI19jb21tb25fd2luX2FsYXJtX3RpbWVyOwkJCQkJCQkJXAotc3RhdGljIEhBTkRMRSBh
bGFybV9ldmVudF9uYW1lOwkJCQkJCQkJCQlcCi1zdGF0aWMgTEFSR0VfSU5URUdFUiBwcmVmaXgj
I19jb21tb25fYWxhcm1fdGltZXJfbGVuZ3RoOwkJCQkJCVwKLQkJCQkJCQkJCQkJCQlcCi1zdGF0
aWMgdm9pZCBDQUxMQkFDSwkJCQkJCQkJCQkJXAotcHJlZml4IyNfY29tbW9uX3dpbl9hbGFybV9o
YW5kbGVyKExQVk9JRCBhcmcsIERXT1JEIHRpbWVyX2xvd192YWx1ZSwgRFdPUkQgdGltZXJfaGln
aF92YWx1ZSkJCVwKLXsJCQkJCQkJCQkJCQkJXAotCSh2b2lkKWFyZzsJCQkJCQkJCQkJCVwKLQko
dm9pZCl0aW1lcl9sb3dfdmFsdWU7CQkJCQkJCQkJCVwKLQkodm9pZCl0aW1lcl9oaWdoX3ZhbHVl
OwkJCQkJCQkJCQlcCi0JZmxhZ19uYW1lID0gdHJ1ZTsJCQkJCQkJCQkJXAotCXJldHVybjsJCQkJ
CQkJCQkJCQlcCi19CQkJCQkJCQkJCQkJCVwKLQkJCQkJCQkJCQkJCQlcCi1zdGF0aWMgdm9pZCAq
CQkJCQkJCQkJCQkJXAotcHJlZml4IyNfY29tbW9uX3dpbl9hbGFybSh2b2lkICp1bnVzZWQpCQkJ
CQkJCQkJXAotewkJCQkJCQkJCQkJCQlcCi0JKHZvaWQpdW51c2VkOwkJCQkJCQkJCQkJXAotCWJv
b2wgdGltZXJfc3VjY2VzcyA9IGZhbHNlOwkJCQkJCQkJCVwKLQlmb3IgKDs7KSB7CQkJCQkJCQkJ
CQlcCi0JCVdhaXRGb3JTaW5nbGVPYmplY3RFeChhbGFybV9ldmVudF9uYW1lLCBJTkZJTklURSwg
dHJ1ZSk7CQkJCVwKLQkJdGltZXJfc3VjY2VzcyA9IFNldFdhaXRhYmxlVGltZXIocHJlZml4IyNf
Y29tbW9uX3dpbl9hbGFybV90aW1lciwJCQlcCi0JCQkJCQkgJnByZWZpeCMjX2NvbW1vbl9hbGFy
bV90aW1lcl9sZW5ndGgsCQkJXAotCQkJCQkJIDAsCQkJCQkJCVwKLQkJCQkJCSBwcmVmaXgjI19j
b21tb25fd2luX2FsYXJtX2hhbmRsZXIsIE5VTEwsIGZhbHNlKTsJXAotCQlhc3NlcnQodGltZXJf
c3VjY2VzcyAhPSBmYWxzZSk7CQkJCQkJCQlcCi0JCVdhaXRGb3JTaW5nbGVPYmplY3RFeChwcmVm
aXgjI19jb21tb25fd2luX2FsYXJtX3RpbWVyLCBJTkZJTklURSwgdHJ1ZSk7CQkJXAotCX0JCQkJ
CQkJCQkJCQlcCi0JCQkJCQkJCQkJCQkJXAotCXJldHVybiBOVUxMOwkJCQkJCQkJCQkJXAotfQot
Ci0jZGVmaW5lCUNPTU1PTl9BTEFSTV9ERUNMQVJFX0xPQ0FMKHByZWZpeCwgYWxhcm1fZXZlbnRf
bmFtZSkJXAotCWludDY0X3QgcHJlZml4IyNfY29tbW9uX2FsYXJtX3RsOwkJCVwKLQlwdGhyZWFk
X3QgcHJlZml4IyNfY29tbW9uX3dpbl9hbGFybV90aHJlYWQ7Ci0KLSNkZWZpbmUJQ09NTU9OX0FM
QVJNX0lOSVQocHJlZml4LCBhbGFybV9ldmVudF9uYW1lLCBkdXJhdGlvbikgCQkJCVwKLQlwcmVm
aXgjI19jb21tb25fYWxhcm1fdGwgPSAtMSAqIChkdXJhdGlvbikgKiBTRUNPTkRfVElNRVI7CQkJ
XAotCXByZWZpeCMjX2NvbW1vbl9hbGFybV90aW1lcl9sZW5ndGguTG93UGFydCA9CQkJCQlcCi0J
CShEV09SRCkgKHByZWZpeCMjX2NvbW1vbl9hbGFybV90bCAmIDB4RkZGRkZGRkYpOwkJCVwKLQlw
cmVmaXgjI19jb21tb25fYWxhcm1fdGltZXJfbGVuZ3RoLkhpZ2hQYXJ0ID0gCQkJCQlcCi0JCShM
T05HKSAocHJlZml4IyNfY29tbW9uX2FsYXJtX3RsID4+IDMyKTsJCQkJXAotCWFsYXJtX2V2ZW50
X25hbWUgPSBDcmVhdGVFdmVudChOVUxMLCBmYWxzZSwgZmFsc2UsIE5VTEwpOwkJCVwKLQlhc3Nl
cnQoYWxhcm1fZXZlbnRfbmFtZSAhPSBOVUxMKTsJCQkJCQlcCi0JcHJlZml4IyNfY29tbW9uX3dp
bl9hbGFybV90aW1lciA9IENyZWF0ZVdhaXRhYmxlVGltZXIoTlVMTCwgdHJ1ZSwgTlVMTCk7CVwK
LQlhc3NlcnQocHJlZml4IyNfY29tbW9uX3dpbl9hbGFybV90aW1lciAhPSBOVUxMKTsJCQkJXAot
CWlmIChwdGhyZWFkX2NyZWF0ZSgmcHJlZml4IyNfY29tbW9uX3dpbl9hbGFybV90aHJlYWQsCQkJ
CVwKLQkJCSAgIE5VTEwsCQkJCQkJCVwKLQkJCSAgIHByZWZpeCMjX2NvbW1vbl93aW5fYWxhcm0s
CQkJCQlcCi0JCQkgICBOVUxMKSAhPSAwKQkJCQkJCQlcCi0JCWNrX2Vycm9yKCJFUlJPUjogRmFp
bGVkIHRvIGNyZWF0ZSBjb21tb25fd2luX2FsYXJtIHRocmVhZC5cbiIpOwotI2Vsc2UKLSNkZWZp
bmUJQ09NTU9OX0FMQVJNX0RFQ0xBUkVfR0xPQkFMKHByZWZpeCwgYWxhcm1fZXZlbnRfbmFtZSwg
ZmxhZ19uYW1lKQotI2RlZmluZQlDT01NT05fQUxBUk1fREVDTEFSRV9MT0NBTChwcmVmaXgsIGFs
YXJtX2V2ZW50X25hbWUpCVwKLQlpbnQgYWxhcm1fZXZlbnRfbmFtZSA9IDA7Ci0jZGVmaW5lCUNP
TU1PTl9BTEFSTV9JTklUKHByZWZpeCwgYWxhcm1fZXZlbnRfbmFtZSwgZHVyYXRpb24pCi0jZW5k
aWYKLQotc3RydWN0IGFmZmluaXR5IHsKLQl1bnNpZ25lZCBpbnQgZGVsdGE7Ci0JdW5zaWduZWQg
aW50IHJlcXVlc3Q7Ci19OwotCi0jZGVmaW5lIEFGRklOSVRZX0lOSVRJQUxJWkVSIHswLCAwfQot
Ci0jaWZkZWYgX19saW51eF9fCi0jaWZuZGVmIGdldHRpZAotc3RhdGljIHBpZF90Ci1nZXR0aWQo
dm9pZCkKLXsKLQlyZXR1cm4gc3lzY2FsbChfX05SX2dldHRpZCk7Ci19Ci0jZW5kaWYgLyogZ2V0
dGlkICovCi0KLUNLX0NDX1VOVVNFRCBzdGF0aWMgaW50Ci1hZmZfaXRlcmF0ZShzdHJ1Y3QgYWZm
aW5pdHkgKmFjYikKLXsKLQljcHVfc2V0X3QgczsKLQl1bnNpZ25lZCBpbnQgYzsKLQotCWMgPSBj
a19wcl9mYWFfdWludCgmYWNiLT5yZXF1ZXN0LCBhY2ItPmRlbHRhKTsKLQlDUFVfWkVSTygmcyk7
Ci0JQ1BVX1NFVChjICUgQ09SRVMsICZzKTsKLQotCXJldHVybiBzY2hlZF9zZXRhZmZpbml0eShn
ZXR0aWQoKSwgc2l6ZW9mKHMpLCAmcyk7Ci19Ci0KLUNLX0NDX1VOVVNFRCBzdGF0aWMgaW50Ci1h
ZmZfaXRlcmF0ZV9jb3JlKHN0cnVjdCBhZmZpbml0eSAqYWNiLCB1bnNpZ25lZCBpbnQgKmNvcmUp
Ci17Ci0JY3B1X3NldF90IHM7Ci0KLQkqY29yZSA9IGNrX3ByX2ZhYV91aW50KCZhY2ItPnJlcXVl
c3QsIGFjYi0+ZGVsdGEpOwotCUNQVV9aRVJPKCZzKTsKLQlDUFVfU0VUKCgqY29yZSkgJSBDT1JF
UywgJnMpOwotCi0JcmV0dXJuIHNjaGVkX3NldGFmZmluaXR5KGdldHRpZCgpLCBzaXplb2Yocyks
ICZzKTsKLX0KLSNlbGlmIGRlZmluZWQoX19NQUNIX18pCi1DS19DQ19VTlVTRUQgc3RhdGljIGlu
dAotYWZmX2l0ZXJhdGUoc3RydWN0IGFmZmluaXR5ICphY2IpCi17Ci0JdGhyZWFkX2FmZmluaXR5
X3BvbGljeV9kYXRhX3QgcG9saWN5OwotCXVuc2lnbmVkIGludCBjOwotCi0JYyA9IGNrX3ByX2Zh
YV91aW50KCZhY2ItPnJlcXVlc3QsIGFjYi0+ZGVsdGEpICUgQ09SRVM7Ci0JcG9saWN5LmFmZmlu
aXR5X3RhZyA9IGM7Ci0JcmV0dXJuIHRocmVhZF9wb2xpY3lfc2V0KG1hY2hfdGhyZWFkX3NlbGYo
KSwKLQkJCQkgVEhSRUFEX0FGRklOSVRZX1BPTElDWSwKLQkJCQkgKHRocmVhZF9wb2xpY3lfdCkm
cG9saWN5LAotCQkJCSBUSFJFQURfQUZGSU5JVFlfUE9MSUNZX0NPVU5UKTsKLX0KLQotQ0tfQ0Nf
VU5VU0VEIHN0YXRpYyBpbnQKLWFmZl9pdGVyYXRlX2NvcmUoc3RydWN0IGFmZmluaXR5ICphY2Is
IHVuc2lnbmVkIGludCAqY29yZSkKLXsKLQl0aHJlYWRfYWZmaW5pdHlfcG9saWN5X2RhdGFfdCBw
b2xpY3k7Ci0KLQkqY29yZSA9IGNrX3ByX2ZhYV91aW50KCZhY2ItPnJlcXVlc3QsIGFjYi0+ZGVs
dGEpICUgQ09SRVM7Ci0JcG9saWN5LmFmZmluaXR5X3RhZyA9ICpjb3JlOwotCXJldHVybiB0aHJl
YWRfcG9saWN5X3NldChtYWNoX3RocmVhZF9zZWxmKCksCi0JCQkJIFRIUkVBRF9BRkZJTklUWV9Q
T0xJQ1ksCi0JCQkJICh0aHJlYWRfcG9saWN5X3QpJnBvbGljeSwKLQkJCQkgVEhSRUFEX0FGRklO
SVRZX1BPTElDWV9DT1VOVCk7Ci19Ci0jZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotQ0tfQ0Nf
VU5VU0VEIHN0YXRpYyBpbnQKLWFmZl9pdGVyYXRlKHN0cnVjdCBhZmZpbml0eSAqYWNiIENLX0ND
X1VOVVNFRCkKLXsKLQl1bnNpZ25lZCBpbnQgYzsKLQljcHVzZXRfdCBtYXNrOwotCi0JYyA9IGNr
X3ByX2ZhYV91aW50KCZhY2ItPnJlcXVlc3QsIGFjYi0+ZGVsdGEpICUgQ09SRVM7Ci0JQ1BVX1pF
Uk8oJm1hc2spOwotCUNQVV9TRVQoYywgJm1hc2spOwotCXJldHVybiAoY3B1c2V0X3NldGFmZmlu
aXR5KENQVV9MRVZFTF9XSElDSCwgQ1BVX1dISUNIX1RJRCwgLTEsCi0JICAgIHNpemVvZihtYXNr
KSwgJm1hc2spKTsKLX0KLQotQ0tfQ0NfVU5VU0VEIHN0YXRpYyBpbnQKLWFmZl9pdGVyYXRlX2Nv
cmUoc3RydWN0IGFmZmluaXR5ICphY2IgQ0tfQ0NfVU5VU0VELCB1bnNpZ25lZCBpbnQgKmNvcmUp
Ci17Ci0JY3B1c2V0X3QgbWFzazsKLQotCSpjb3JlID0gY2tfcHJfZmFhX3VpbnQoJmFjYi0+cmVx
dWVzdCwgYWNiLT5kZWx0YSkgJSBDT1JFUzsKLQlDUFVfWkVSTygmbWFzayk7Ci0JQ1BVX1NFVCgq
Y29yZSwgJm1hc2spOwotCXJldHVybiAoY3B1c2V0X3NldGFmZmluaXR5KENQVV9MRVZFTF9XSElD
SCwgQ1BVX1dISUNIX1RJRCwgLTEsCi0JICAgIHNpemVvZihtYXNrKSwgJm1hc2spKTsKLX0KLSNl
bHNlCi1DS19DQ19VTlVTRUQgc3RhdGljIGludAotYWZmX2l0ZXJhdGUoc3RydWN0IGFmZmluaXR5
ICphY2IgQ0tfQ0NfVU5VU0VEKQotewotCi0JcmV0dXJuICgwKTsKLX0KLQotQ0tfQ0NfVU5VU0VE
IHN0YXRpYyBpbnQKLWFmZl9pdGVyYXRlX2NvcmUoc3RydWN0IGFmZmluaXR5ICphY2IgQ0tfQ0Nf
VU5VU0VELCB1bnNpZ25lZCBpbnQgKmNvcmUpCi17Ci0JKmNvcmUgPSAwOwotCXJldHVybiAoMCk7
Ci19Ci0jZW5kaWYKLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB1aW50NjRfdAotcmR0c2Modm9pZCkK
LXsKLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0JdWludDMyX3QgZWF4ID0gMCwgZWR4OwotI2lm
IGRlZmluZWQoQ0tfTURfUkRUU0NQKQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZHRzY3AiCi0J
CQkJOiAiK2EiIChlYXgpLCAiPWQiIChlZHgpCi0JCQkJOgotCQkJCTogIiVlY3giLCAibWVtb3J5
Iik7Ci0KLQlyZXR1cm4gKCgodWludDY0X3QpZWR4IDw8IDMyKSB8IGVheCk7Ci0jZWxzZQotICAg
ICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY3B1aWQ7IgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAicmR0c2M7IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIrYSIg
KGVheCksICI9ZCIgKGVkeCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWJ4IiwgIiVlY3giLCAibWVtb3J5Iik7
Ci0KLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInhvcmwgJSVlYXgsICUlZWF4OyIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImNwdWlkOyIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVlYXgiLCAiJWVieCIsICIlZWN4IiwgIiVlZHgi
LCAibWVtb3J5Iik7Ci0KLSAgICAgICAgcmV0dXJuICgoKHVpbnQ2NF90KWVkeCA8PCAzMikgfCBl
YXgpOwotI2VuZGlmIC8qICFDS19NRF9SRFRTQ1AgKi8KLSNlbGlmIGRlZmluZWQoX194ODZfXykK
LQl1aW50MzJfdCBlYXggPSAwLCBlZHg7Ci0jaWYgZGVmaW5lZChDS19NRF9SRFRTQ1ApCi0JX19h
c21fXyBfX3ZvbGF0aWxlX18oInJkdHNjcCIKLQkJCQk6ICIrYSIgKGVheCksICI9ZCIgKGVkeCkK
LQkJCQk6Ci0JCQkJOiAiJWVjeCIsICJtZW1vcnkiKTsKLQotCXJldHVybiAoKCh1aW50NjRfdCll
ZHggPDwgMzIpIHwgZWF4KTsKLSNlbHNlCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJw
dXNobCAlJWVieDsiCi0JCQkgICAgICJjcHVpZDsiCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJyZHRzYzsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIithIiAoZWF4
KSwgIj1kIiAoZWR4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogIiVlY3giLCAibWVtb3J5Iik7Ci0KLSAgICAgICAg
X19hc21fXyBfX3ZvbGF0aWxlX18oInhvcmwgJSVlYXgsICUlZWF4OyIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImNwdWlkOyIKLQkJCSAgICAgInBvcGwgJSVlYng7IgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiJWVheCIsICIlZWN4IiwgIiVl
ZHgiLCAibWVtb3J5Iik7Ci0KLSAgICAgICAgcmV0dXJuICgoKHVpbnQ2NF90KWVkeCA8PCAzMikg
fCBlYXgpOwotI2VuZGlmIC8qICFDS19NRF9SRFRTQ1AgKi8KLSNlbGlmIGRlZmluZWQoX19zcGFy
Y3Y5X18pCi0JdWludDY0X3QgcjsKLQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmQg
JSV0aWNrLCAlMCIKLQkJCQk6ICI9ciIgKHIpCi0JCQkJOgotCQkJCTogIm1lbW9yeSIpOwotICAg
ICAgICByZXR1cm4gcjsKLSNlbGlmIGRlZmluZWQoX19wcGM2NF9fKQotCXVpbnQzMl90IGhpZ2gs
IGxvdywgc25hcHNob3Q7Ci0KLQlkbyB7Ci0JICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiaXN5bmM7
IgotCQkJICAgICAgICJtZnRidSAlMDsiCi0JCQkgICAgICAgIm1mdGIgICUxOyIKLQkJCSAgICAg
ICAibWZ0YnUgJTI7IgotCQkJCTogIj1yIiAoaGlnaCksICI9ciIgKGxvdyksICI9ciIgKHNuYXBz
aG90KQotCQkJCToKLQkJCQk6ICJtZW1vcnkiKTsKLQl9IHdoaWxlIChzbmFwc2hvdCAhPSBoaWdo
KTsKLQotCXJldHVybiAoKCh1aW50NjRfdCloaWdoIDw8IDMyKSB8IGxvdyk7Ci0jZWxpZiBkZWZp
bmVkKF9fYWFyY2g2NF9fKQotCXVpbnQ2NF90IHI7Ci0KLQlfX2FzbSBfX3ZvbGF0aWxlX18gKCJt
cnMgJTAsIGNudHZjdF9lbDAiIDogIj1yIiAocikgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gcjsK
LSNlbHNlCi0JcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotQ0tfQ0NfVVNFRCBzdGF0aWMgdm9pZAot
Y2tfZXJyb3IoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0KLQl2
YV9zdGFydChhcCwgbWVzc2FnZSk7Ci0JdmZwcmludGYoc3RkZXJyLCBtZXNzYWdlLCBhcCk7Ci0J
dmFfZW5kKGFwKTsKLQlleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLSNkZWZpbmUgY2tfdGVzdChB
LCBCLCAuLi4pIGRvIHsJCQlcCi0JaWYgKEEpCQkJCQlcCi0JCWNrX2Vycm9yKEIsICMjX19WQV9B
UkdTX18pOwlcCi19IHdoaWxlICgwKQotCi0jZW5kaWYgLyogQ0tfQ09NTU9OX0ggKi8KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9NYWtlZmlsZSBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9NYWtlZmlsZQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYmYxMDcxYTY3NGEzYTBhYmY3OGQ4ZGFlZjFjYTgxMWFkZDZlMWMy
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9zcmMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAt
MSw2NCArMCwwIEBACi0uUEhPTlk6IGNsZWFuIGRpc3RyaWJ1dGlvbgotCi1pbmNsdWRlIC9Wb2x1
bWVzL2Rldi9TdGl0Y2hNYXJrZXIvY2svYnVpbGQvY2suYnVpbGQKLQotVEFSR0VUX0RJUj0kKEJV
SUxEX0RJUikvc3JjCi1TRElSPSQoU1JDX0RJUikvc3JjCi1JTkNMVURFX0RJUj0kKFNSQ19ESVIp
L2luY2x1ZGUKLQotT0JKRUNUUz1ja19iYXJyaWVyX2NlbnRyYWxpemVkLm8JXAotCWNrX2JhcnJp
ZXJfY29tYmluaW5nLm8JCVwKLQlja19iYXJyaWVyX2Rpc3NlbWluYXRpb24ubwlcCi0JY2tfYmFy
cmllcl90b3VybmFtZW50Lm8JCVwKLQlja19iYXJyaWVyX21jcy5vCQlcCi0JY2tfZXBvY2gubwkJ
CVwKLQlja19odC5vCQkJCVwKLQlja19ocC5vCQkJCVwKLQlja19ocy5vCQkJCVwKLQlja19yaHMu
bwkJCVwKLQlja19hcnJheS5vCi0KLWFsbDogJChBTExfTElCUykKLQotbGliY2suc286ICQoT0JK
RUNUUykKLQkkKExEKSAkKExERkxBR1MpIC1vICQoVEFSR0VUX0RJUikvbGliY2suc28gJChPQkpF
Q1RTKQotCi1saWJjay5hOiAkKE9CSkVDVFMpCi0JYXIgcmNzICQoVEFSR0VUX0RJUikvbGliY2su
YSAkKE9CSkVDVFMpCi0KLWNrX2FycmF5Lm86ICQoSU5DTFVERV9ESVIpL2NrX2FycmF5LmggJChT
RElSKS9ja19hcnJheS5jCi0JJChDQykgJChDRkxBR1MpIC1jIC1vICQoVEFSR0VUX0RJUikvY2tf
YXJyYXkubyAkKFNESVIpL2NrX2FycmF5LmMKLQotY2tfZXBvY2gubzogJChJTkNMVURFX0RJUikv
Y2tfZXBvY2guaCAkKFNESVIpL2NrX2Vwb2NoLmMgJChJTkNMVURFX0RJUikvY2tfc3RhY2suaAot
CSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkKFRBUkdFVF9ESVIpL2NrX2Vwb2NoLm8gJChTRElSKS9j
a19lcG9jaC5jCi0KLWNrX2hzLm86ICQoSU5DTFVERV9ESVIpL2NrX2hzLmggJChTRElSKS9ja19o
cy5jCi0JJChDQykgJChDRkxBR1MpIC1jIC1vICQoVEFSR0VUX0RJUikvY2tfaHMubyAkKFNESVIp
L2NrX2hzLmMKLQotY2tfcmhzLm86ICQoSU5DTFVERV9ESVIpL2NrX3Jocy5oICQoU0RJUikvY2tf
cmhzLmMKLQkkKENDKSAkKENGTEFHUykgLWMgLW8gJChUQVJHRVRfRElSKS9ja19yaHMubyAkKFNE
SVIpL2NrX3Jocy5jCi0KLWNrX2h0Lm86ICQoSU5DTFVERV9ESVIpL2NrX2h0LmggJChTRElSKS9j
a19odC5jCi0JJChDQykgJChDRkxBR1MpIC1jIC1vICQoVEFSR0VUX0RJUikvY2tfaHQubyAkKFNE
SVIpL2NrX2h0LmMKLQotY2tfaHAubzogJChTRElSKS9ja19ocC5jICQoSU5DTFVERV9ESVIpL2Nr
X2hwLmggJChJTkNMVURFX0RJUikvY2tfc3RhY2suaAotCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAk
KFRBUkdFVF9ESVIpL2NrX2hwLm8gJChTRElSKS9ja19ocC5jCi0KLWNrX2JhcnJpZXJfY2VudHJh
bGl6ZWQubzogJChTRElSKS9ja19iYXJyaWVyX2NlbnRyYWxpemVkLmMKLQkkKENDKSAkKENGTEFH
UykgLWMgLW8gJChUQVJHRVRfRElSKS9ja19iYXJyaWVyX2NlbnRyYWxpemVkLm8gJChTRElSKS9j
a19iYXJyaWVyX2NlbnRyYWxpemVkLmMKLQotY2tfYmFycmllcl9jb21iaW5pbmcubzogJChTRElS
KS9ja19iYXJyaWVyX2NvbWJpbmluZy5jCi0JJChDQykgJChDRkxBR1MpIC1jIC1vICQoVEFSR0VU
X0RJUikvY2tfYmFycmllcl9jb21iaW5pbmcubyAkKFNESVIpL2NrX2JhcnJpZXJfY29tYmluaW5n
LmMKLQotY2tfYmFycmllcl9kaXNzZW1pbmF0aW9uLm86ICQoU0RJUikvY2tfYmFycmllcl9kaXNz
ZW1pbmF0aW9uLmMKLQkkKENDKSAkKENGTEFHUykgLWMgLW8gJChUQVJHRVRfRElSKS9ja19iYXJy
aWVyX2Rpc3NlbWluYXRpb24ubyAkKFNESVIpL2NrX2JhcnJpZXJfZGlzc2VtaW5hdGlvbi5jCi0K
LWNrX2JhcnJpZXJfdG91cm5hbWVudC5vOiAkKFNESVIpL2NrX2JhcnJpZXJfdG91cm5hbWVudC5j
Ci0JJChDQykgJChDRkxBR1MpIC1jIC1vICQoVEFSR0VUX0RJUikvY2tfYmFycmllcl90b3VybmFt
ZW50Lm8gJChTRElSKS9ja19iYXJyaWVyX3RvdXJuYW1lbnQuYwotCi1ja19iYXJyaWVyX21jcy5v
OiAkKFNESVIpL2NrX2JhcnJpZXJfbWNzLmMKLQkkKENDKSAkKENGTEFHUykgLWMgLW8gJChUQVJH
RVRfRElSKS9ja19iYXJyaWVyX21jcy5vICQoU0RJUikvY2tfYmFycmllcl9tY3MuYwotCi1jbGVh
bjoKLQlybSAtcmYgJChUQVJHRVRfRElSKS8qLmRTWU0gJChUQVJHRVRfRElSKS8qfiAkKFRBUkdF
VF9ESVIpLyoubyBcCi0JCSQoT0JKRUNUUykgJChUQVJHRVRfRElSKS9saWJjay5hICQoVEFSR0VU
X0RJUikvbGliY2suc28KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2NrL3NyYy9NYWtlZmlsZS5pbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3Ny
Yy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ4NGU3NmEyOGRk
Njc1YjkyY2QwZWRkYmNmODZjOGFlMmRjMTFmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9zcmMv
TWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0uUEhPTlk6IGNsZWFu
IGRpc3RyaWJ1dGlvbgotCi1pbmNsdWRlIEBCVUlMRF9ESVJAL2J1aWxkL2NrLmJ1aWxkCi0KLVRB
UkdFVF9ESVI9JChCVUlMRF9ESVIpL3NyYwotU0RJUj0kKFNSQ19ESVIpL3NyYwotSU5DTFVERV9E
SVI9JChTUkNfRElSKS9pbmNsdWRlCi0KLU9CSkVDVFM9Y2tfYmFycmllcl9jZW50cmFsaXplZC5v
CVwKLQlja19iYXJyaWVyX2NvbWJpbmluZy5vCQlcCi0JY2tfYmFycmllcl9kaXNzZW1pbmF0aW9u
Lm8JXAotCWNrX2JhcnJpZXJfdG91cm5hbWVudC5vCQlcCi0JY2tfYmFycmllcl9tY3MubwkJXAot
CWNrX2Vwb2NoLm8JCQlcCi0JY2tfaHQubwkJCQlcCi0JY2tfaHAubwkJCQlcCi0JY2tfaHMubwkJ
CQlcCi0JY2tfcmhzLm8JCQlcCi0JY2tfYXJyYXkubwotCi1hbGw6ICQoQUxMX0xJQlMpCi0KLWxp
YmNrLnNvOiAkKE9CSkVDVFMpCi0JJChMRCkgJChMREZMQUdTKSAtbyAkKFRBUkdFVF9ESVIpL2xp
YmNrLnNvICQoT0JKRUNUUykKLQotbGliY2suYTogJChPQkpFQ1RTKQotCWFyIHJjcyAkKFRBUkdF
VF9ESVIpL2xpYmNrLmEgJChPQkpFQ1RTKQotCi1ja19hcnJheS5vOiAkKElOQ0xVREVfRElSKS9j
a19hcnJheS5oICQoU0RJUikvY2tfYXJyYXkuYwotCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkKFRB
UkdFVF9ESVIpL2NrX2FycmF5Lm8gJChTRElSKS9ja19hcnJheS5jCi0KLWNrX2Vwb2NoLm86ICQo
SU5DTFVERV9ESVIpL2NrX2Vwb2NoLmggJChTRElSKS9ja19lcG9jaC5jICQoSU5DTFVERV9ESVIp
L2NrX3N0YWNrLmgKLQkkKENDKSAkKENGTEFHUykgLWMgLW8gJChUQVJHRVRfRElSKS9ja19lcG9j
aC5vICQoU0RJUikvY2tfZXBvY2guYwotCi1ja19ocy5vOiAkKElOQ0xVREVfRElSKS9ja19ocy5o
ICQoU0RJUikvY2tfaHMuYwotCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkKFRBUkdFVF9ESVIpL2Nr
X2hzLm8gJChTRElSKS9ja19ocy5jCi0KLWNrX3Jocy5vOiAkKElOQ0xVREVfRElSKS9ja19yaHMu
aCAkKFNESVIpL2NrX3Jocy5jCi0JJChDQykgJChDRkxBR1MpIC1jIC1vICQoVEFSR0VUX0RJUikv
Y2tfcmhzLm8gJChTRElSKS9ja19yaHMuYwotCi1ja19odC5vOiAkKElOQ0xVREVfRElSKS9ja19o
dC5oICQoU0RJUikvY2tfaHQuYwotCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkKFRBUkdFVF9ESVIp
L2NrX2h0Lm8gJChTRElSKS9ja19odC5jCi0KLWNrX2hwLm86ICQoU0RJUikvY2tfaHAuYyAkKElO
Q0xVREVfRElSKS9ja19ocC5oICQoSU5DTFVERV9ESVIpL2NrX3N0YWNrLmgKLQkkKENDKSAkKENG
TEFHUykgLWMgLW8gJChUQVJHRVRfRElSKS9ja19ocC5vICQoU0RJUikvY2tfaHAuYwotCi1ja19i
YXJyaWVyX2NlbnRyYWxpemVkLm86ICQoU0RJUikvY2tfYmFycmllcl9jZW50cmFsaXplZC5jCi0J
JChDQykgJChDRkxBR1MpIC1jIC1vICQoVEFSR0VUX0RJUikvY2tfYmFycmllcl9jZW50cmFsaXpl
ZC5vICQoU0RJUikvY2tfYmFycmllcl9jZW50cmFsaXplZC5jCi0KLWNrX2JhcnJpZXJfY29tYmlu
aW5nLm86ICQoU0RJUikvY2tfYmFycmllcl9jb21iaW5pbmcuYwotCSQoQ0MpICQoQ0ZMQUdTKSAt
YyAtbyAkKFRBUkdFVF9ESVIpL2NrX2JhcnJpZXJfY29tYmluaW5nLm8gJChTRElSKS9ja19iYXJy
aWVyX2NvbWJpbmluZy5jCi0KLWNrX2JhcnJpZXJfZGlzc2VtaW5hdGlvbi5vOiAkKFNESVIpL2Nr
X2JhcnJpZXJfZGlzc2VtaW5hdGlvbi5jCi0JJChDQykgJChDRkxBR1MpIC1jIC1vICQoVEFSR0VU
X0RJUikvY2tfYmFycmllcl9kaXNzZW1pbmF0aW9uLm8gJChTRElSKS9ja19iYXJyaWVyX2Rpc3Nl
bWluYXRpb24uYwotCi1ja19iYXJyaWVyX3RvdXJuYW1lbnQubzogJChTRElSKS9ja19iYXJyaWVy
X3RvdXJuYW1lbnQuYwotCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkKFRBUkdFVF9ESVIpL2NrX2Jh
cnJpZXJfdG91cm5hbWVudC5vICQoU0RJUikvY2tfYmFycmllcl90b3VybmFtZW50LmMKLQotY2tf
YmFycmllcl9tY3MubzogJChTRElSKS9ja19iYXJyaWVyX21jcy5jCi0JJChDQykgJChDRkxBR1Mp
IC1jIC1vICQoVEFSR0VUX0RJUikvY2tfYmFycmllcl9tY3MubyAkKFNESVIpL2NrX2JhcnJpZXJf
bWNzLmMKLQotY2xlYW46Ci0Jcm0gLXJmICQoVEFSR0VUX0RJUikvKi5kU1lNICQoVEFSR0VUX0RJ
UikvKn4gJChUQVJHRVRfRElSKS8qLm8gXAotCQkkKE9CSkVDVFMpICQoVEFSR0VUX0RJUikvbGli
Y2suYSAkKFRBUkdFVF9ESVIpL2xpYmNrLnNvCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9jay9zcmMvY2tfYXJyYXkuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2NrL3NyYy9ja19hcnJheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
NWIyNTAyMGZjMTU2YjJkMzU2YmYzZmNhMmYyOTA0M2JkNTFhNDE2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3NyYy9ja19hcnJheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgMjAxMy0yMDE1IFNhbXkgQWwgQmFocmEKLSAqIENvcHlyaWdodCAyMDEz
LTIwMTQgQXBwTmV4dXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgPGNrX2FycmF5Lmg+Ci0jaW5jbHVkZSA8Y2tfY2MuaD4KLSNpbmNsdWRlIDxja19wci5oPgot
I2luY2x1ZGUgPGNrX3N0ZGJvb2wuaD4KLSNpbmNsdWRlIDxja19zdHJpbmcuaD4KLQotc3RhdGlj
IHN0cnVjdCBfY2tfYXJyYXkgKgotY2tfYXJyYXlfY3JlYXRlKHN0cnVjdCBja19tYWxsb2MgKmFs
bG9jYXRvciwgdW5zaWduZWQgaW50IGxlbmd0aCkKLXsKLQlzdHJ1Y3QgX2NrX2FycmF5ICphY3Rp
dmU7Ci0KLQlhY3RpdmUgPSBhbGxvY2F0b3ItPm1hbGxvYyhzaXplb2Yoc3RydWN0IF9ja19hcnJh
eSkgKyBzaXplb2Yodm9pZCAqKSAqIGxlbmd0aCk7Ci0JaWYgKGFjdGl2ZSA9PSBOVUxMKQotCQly
ZXR1cm4gTlVMTDsKLQotCWFjdGl2ZS0+bl9jb21taXR0ZWQgPSAwOwotCWFjdGl2ZS0+bGVuZ3Ro
ID0gbGVuZ3RoOwotCi0JcmV0dXJuIGFjdGl2ZTsKLX0KLQotYm9vbAotY2tfYXJyYXlfaW5pdChz
dHJ1Y3QgY2tfYXJyYXkgKmFycmF5LCB1bnNpZ25lZCBpbnQgbW9kZSwgc3RydWN0IGNrX21hbGxv
YyAqYWxsb2NhdG9yLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotCXN0cnVjdCBfY2tfYXJyYXkg
KmFjdGl2ZTsKLQotCSh2b2lkKW1vZGU7Ci0KLQlpZiAoYWxsb2NhdG9yLT5yZWFsbG9jID09IE5V
TEwgfHwKLQkgICAgYWxsb2NhdG9yLT5tYWxsb2MgPT0gTlVMTCB8fAotCSAgICBhbGxvY2F0b3It
PmZyZWUgPT0gTlVMTCB8fAotCSAgICBsZW5ndGggPT0gMCkKLQkJcmV0dXJuIGZhbHNlOwotCi0J
YWN0aXZlID0gY2tfYXJyYXlfY3JlYXRlKGFsbG9jYXRvciwgbGVuZ3RoKTsKLQlpZiAoYWN0aXZl
ID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQotCWFycmF5LT5uX2VudHJpZXMgPSAwOwotCWFy
cmF5LT5hbGxvY2F0b3IgPSBhbGxvY2F0b3I7Ci0JYXJyYXktPmFjdGl2ZSA9IGFjdGl2ZTsKLQlh
cnJheS0+dHJhbnNhY3Rpb24gPSBOVUxMOwotCXJldHVybiB0cnVlOwotfQotCi1ib29sCi1ja19h
cnJheV9wdXQoc3RydWN0IGNrX2FycmF5ICphcnJheSwgdm9pZCAqdmFsdWUpCi17Ci0Jc3RydWN0
IF9ja19hcnJheSAqdGFyZ2V0OwotCXVuc2lnbmVkIGludCBzaXplOwotCi0JLyoKLQkgKiBJZiBu
byB0cmFuc2FjdGlvbiBjb3B5IGhhcyBiZWVuIG5lY2Vzc2FyeSwgYXR0ZW1wdCB0byBkbyBpbi1w
bGFjZQotCSAqIG1vZGlmaWNhdGlvbiBvZiB0aGUgYXJyYXkuCi0JICovCi0JaWYgKGFycmF5LT50
cmFuc2FjdGlvbiA9PSBOVUxMKSB7Ci0JCXRhcmdldCA9IGFycmF5LT5hY3RpdmU7Ci0KLQkJaWYg
KGFycmF5LT5uX2VudHJpZXMgPT0gdGFyZ2V0LT5sZW5ndGgpIHsKLQkJCXNpemUgPSB0YXJnZXQt
Pmxlbmd0aCA8PCAxOwotCi0JCQl0YXJnZXQgPSBhcnJheS0+YWxsb2NhdG9yLT5yZWFsbG9jKHRh
cmdldCwKLQkJCSAgICBzaXplb2Yoc3RydWN0IF9ja19hcnJheSkgKyBzaXplb2Yodm9pZCAqKSAq
IGFycmF5LT5uX2VudHJpZXMsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBfY2tfYXJyYXkpICsgc2l6
ZW9mKHZvaWQgKikgKiBzaXplLAotCQkJICAgIHRydWUpOwotCi0JCQlpZiAodGFyZ2V0ID09IE5V
TEwpCi0JCQkJcmV0dXJuIGZhbHNlOwotCi0JCQlja19wcl9zdG9yZV91aW50KCZ0YXJnZXQtPmxl
bmd0aCwgc2l6ZSk7Ci0KLQkJCS8qIFNlcmlhbGl6ZSB3aXRoIHJlc3BlY3QgdG8gY29udGVudHMu
ICovCi0JCQlja19wcl9mZW5jZV9zdG9yZSgpOwotCQkJY2tfcHJfc3RvcmVfcHRyKCZhcnJheS0+
YWN0aXZlLCB0YXJnZXQpOwotCQl9Ci0KLQkJdGFyZ2V0LT52YWx1ZXNbYXJyYXktPm5fZW50cmll
cysrXSA9IHZhbHVlOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQl0YXJnZXQgPSBhcnJheS0+dHJh
bnNhY3Rpb247Ci0JaWYgKGFycmF5LT5uX2VudHJpZXMgPT0gdGFyZ2V0LT5sZW5ndGgpIHsKLQkJ
c2l6ZSA9IHRhcmdldC0+bGVuZ3RoIDw8IDE7Ci0KLQkJdGFyZ2V0ID0gYXJyYXktPmFsbG9jYXRv
ci0+cmVhbGxvYyh0YXJnZXQsCi0JCSAgICBzaXplb2Yoc3RydWN0IF9ja19hcnJheSkgKyBzaXpl
b2Yodm9pZCAqKSAqIGFycmF5LT5uX2VudHJpZXMsCi0JCSAgICBzaXplb2Yoc3RydWN0IF9ja19h
cnJheSkgKyBzaXplb2Yodm9pZCAqKSAqIHNpemUsCi0JCSAgICB0cnVlKTsKLQotCQlpZiAodGFy
Z2V0ID09IE5VTEwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJdGFyZ2V0LT5sZW5ndGggPSBzaXpl
OwotCQlhcnJheS0+dHJhbnNhY3Rpb24gPSB0YXJnZXQ7Ci0JfQotCi0JdGFyZ2V0LT52YWx1ZXNb
YXJyYXktPm5fZW50cmllcysrXSA9IHZhbHVlOwotCXJldHVybiBmYWxzZTsKLX0KLQotaW50Ci1j
a19hcnJheV9wdXRfdW5pcXVlKHN0cnVjdCBja19hcnJheSAqYXJyYXksIHZvaWQgKnZhbHVlKQot
ewotCXVuc2lnbmVkIGludCBpLCBsaW1pdDsKLQl2b2lkICoqdjsKLQotCWxpbWl0ID0gYXJyYXkt
Pm5fZW50cmllczsKLQlpZiAoYXJyYXktPnRyYW5zYWN0aW9uICE9IE5VTEwpIHsKLQkJdiA9IGFy
cmF5LT50cmFuc2FjdGlvbi0+dmFsdWVzOwotCX0gZWxzZSB7Ci0JCXYgPSBhcnJheS0+YWN0aXZl
LT52YWx1ZXM7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKLQkJaWYgKHZb
aV0gPT0gdmFsdWUpCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gLSFja19hcnJheV9wdXQo
YXJyYXksIHZhbHVlKTsKLX0KLQotYm9vbAotY2tfYXJyYXlfcmVtb3ZlKHN0cnVjdCBja19hcnJh
eSAqYXJyYXksIHZvaWQgKnZhbHVlKQotewotCXN0cnVjdCBfY2tfYXJyYXkgKnRhcmdldDsKLQl1
bnNpZ25lZCBpbnQgaTsKLQotCWlmIChhcnJheS0+dHJhbnNhY3Rpb24gIT0gTlVMTCkgewotCQl0
YXJnZXQgPSBhcnJheS0+dHJhbnNhY3Rpb247Ci0KLQkJZm9yIChpID0gMDsgaSA8IGFycmF5LT5u
X2VudHJpZXM7IGkrKykgewotCQkJaWYgKHRhcmdldC0+dmFsdWVzW2ldID09IHZhbHVlKSB7Ci0J
CQkJdGFyZ2V0LT52YWx1ZXNbaV0gPSB0YXJnZXQtPnZhbHVlc1stLWFycmF5LT5uX2VudHJpZXNd
OwotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQot
CXRhcmdldCA9IGFycmF5LT5hY3RpdmU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5fZW50
cmllczsgaSsrKSB7Ci0JCWlmICh0YXJnZXQtPnZhbHVlc1tpXSA9PSB2YWx1ZSkKLQkJCWJyZWFr
OwotCX0KLQotCWlmIChpID09IGFycmF5LT5uX2VudHJpZXMpCi0JCXJldHVybiBmYWxzZTsKLQot
CS8qIElmIHRoZXJlIGFyZSBwZW5kaW5nIGFkZGl0aW9ucywgaW1tZWRpYXRlbHkgZWxpbWluYXRl
IHRoZSBvcGVyYXRpb24uICovCi0JaWYgKHRhcmdldC0+bl9jb21taXR0ZWQgIT0gYXJyYXktPm5f
ZW50cmllcykgewotCQlja19wcl9zdG9yZV9wdHIoJnRhcmdldC0+dmFsdWVzW2ldLCB0YXJnZXQt
PnZhbHVlc1stLWFycmF5LT5uX2VudHJpZXNdKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoK
LQkgKiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZXNlIGFsbG9jYXRpb25zIGFyZSBzbWFsbCB0
byBiZWdpbiB3aXRoLgotCSAqIElmIHRoZXJlIGlzIG5vIGltbWVkaWF0ZSBvcHBvcnR1bml0eSBm
b3IgdHJhbnNhY3Rpb24sIGFsbG9jYXRlIGEKLQkgKiB0cmFuc2FjdGlvbmFsIGFycmF5IHdoaWNo
IHdpbGwgYmUgYXBwbGllZCB1cG9uIGNvbW1pdCB0aW1lLgotCSAqLwotCXRhcmdldCA9IGNrX2Fy
cmF5X2NyZWF0ZShhcnJheS0+YWxsb2NhdG9yLCBhcnJheS0+bl9lbnRyaWVzKTsKLQlpZiAodGFy
Z2V0ID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQotCW1lbWNweSh0YXJnZXQtPnZhbHVlcywg
YXJyYXktPmFjdGl2ZS0+dmFsdWVzLCBzaXplb2Yodm9pZCAqKSAqIGFycmF5LT5uX2VudHJpZXMp
OwotCXRhcmdldC0+bGVuZ3RoID0gYXJyYXktPm5fZW50cmllczsKLQl0YXJnZXQtPm5fY29tbWl0
dGVkID0gYXJyYXktPm5fZW50cmllczsKLQl0YXJnZXQtPnZhbHVlc1tpXSA9IHRhcmdldC0+dmFs
dWVzWy0tYXJyYXktPm5fZW50cmllc107Ci0KLQlhcnJheS0+dHJhbnNhY3Rpb24gPSB0YXJnZXQ7
Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wKLWNrX2FycmF5X2NvbW1pdChja19hcnJheV90ICph
cnJheSkKLXsKLQlzdHJ1Y3QgX2NrX2FycmF5ICptID0gYXJyYXktPnRyYW5zYWN0aW9uOwotCi0J
aWYgKG0gIT0gTlVMTCkgewotCQlzdHJ1Y3QgX2NrX2FycmF5ICpwOwotCi0JCW0tPm5fY29tbWl0
dGVkID0gYXJyYXktPm5fZW50cmllczsKLQkJY2tfcHJfZmVuY2Vfc3RvcmUoKTsKLQkJcCA9IGFy
cmF5LT5hY3RpdmU7Ci0JCWNrX3ByX3N0b3JlX3B0cigmYXJyYXktPmFjdGl2ZSwgbSk7Ci0JCWFy
cmF5LT5hbGxvY2F0b3ItPmZyZWUocCwgc2l6ZW9mKHN0cnVjdCBfY2tfYXJyYXkpICsKLQkJICAg
IHAtPmxlbmd0aCAqIHNpemVvZih2b2lkICopLCB0cnVlKTsKLQkJYXJyYXktPnRyYW5zYWN0aW9u
ID0gTlVMTDsKLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlja19wcl9mZW5jZV9zdG9yZSgpOwot
CWNrX3ByX3N0b3JlX3VpbnQoJmFycmF5LT5hY3RpdmUtPm5fY29tbWl0dGVkLCBhcnJheS0+bl9l
bnRyaWVzKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZAotY2tfYXJyYXlfZGVpbml0KHN0cnVj
dCBja19hcnJheSAqYXJyYXksIGJvb2wgZGVmZXIpCi17Ci0KLQlhcnJheS0+YWxsb2NhdG9yLT5m
cmVlKGFycmF5LT5hY3RpdmUsCi0JICAgIHNpemVvZihzdHJ1Y3QgX2NrX2FycmF5KSArIHNpemVv
Zih2b2lkICopICogYXJyYXktPmFjdGl2ZS0+bGVuZ3RoLCBkZWZlcik7Ci0KLQlpZiAoYXJyYXkt
PnRyYW5zYWN0aW9uICE9IE5VTEwpIHsKLQkJYXJyYXktPmFsbG9jYXRvci0+ZnJlZShhcnJheS0+
dHJhbnNhY3Rpb24sCi0JCSAgICBzaXplb2Yoc3RydWN0IF9ja19hcnJheSkgKyBzaXplb2Yodm9p
ZCAqKSAqIGFycmF5LT50cmFuc2FjdGlvbi0+bGVuZ3RoLCBkZWZlcik7Ci0JfQotCi0JYXJyYXkt
PnRyYW5zYWN0aW9uID0gYXJyYXktPmFjdGl2ZSA9IE5VTEw7Ci0JcmV0dXJuOwotfQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svc3JjL2NrX2JhcnJpZXJfY2Vu
dHJhbGl6ZWQuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9ja19iYXJy
aWVyX2NlbnRyYWxpemVkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhOGNjMTg4
N2I5NWU3ZTMxODI4NWE5M2ZhYzUwNjgxYzI1YjI2ZjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2sv
c3JjL2NrX2JhcnJpZXJfY2VudHJhbGl6ZWQuYworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBDb3B5cmln
aHQgMjAxMSBEYXZpZCBKb3NlcGguCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlIDxja19iYXJyaWVyLmg+Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLQotdm9pZAotY2tfYmFycmll
cl9jZW50cmFsaXplZChzdHJ1Y3QgY2tfYmFycmllcl9jZW50cmFsaXplZCAqYmFycmllciwKLSAg
ICBzdHJ1Y3QgY2tfYmFycmllcl9jZW50cmFsaXplZF9zdGF0ZSAqc3RhdGUsCi0gICAgdW5zaWdu
ZWQgaW50IG5fdGhyZWFkcykKLXsKLQl1bnNpZ25lZCBpbnQgc2Vuc2UsIHZhbHVlOwotCi0JLyoK
LQkgKiBFdmVyeSBleGVjdXRpb24gY29udGV4dCBoYXMgYSBzZW5zZSBhc3NvY2lhdGVkIHdpdGgg
aXQuCi0JICogVGhpcyBzZW5zZSBpcyByZXZlcnNlZCB3aGVuIHRoZSBiYXJyaWVyIGlzIGVudGVy
ZWQuIEV2ZXJ5Ci0JICogdGhyZWFkIHdpbGwgc3BpbiBvbiB0aGUgZ2xvYmFsIHNlbnNlIHVudGls
IHRoZSBsYXN0IHRocmVhZAotCSAqIHJldmVyc2VzIGl0LgotCSAqLwotCXNlbnNlID0gc3RhdGUt
PnNlbnNlID0gfnN0YXRlLT5zZW5zZTsKLQl2YWx1ZSA9IGNrX3ByX2ZhYV91aW50KCZiYXJyaWVy
LT52YWx1ZSwgMSk7Ci0JaWYgKHZhbHVlID09IG5fdGhyZWFkcyAtIDEpIHsKLQkJY2tfcHJfc3Rv
cmVfdWludCgmYmFycmllci0+dmFsdWUsIDApOwotCQlja19wcl9mZW5jZV9tZW1vcnkoKTsKLQkJ
Y2tfcHJfc3RvcmVfdWludCgmYmFycmllci0+c2Vuc2UsIHNlbnNlKTsKLQkJcmV0dXJuOwotCX0K
LQotCWNrX3ByX2ZlbmNlX2F0b21pY19sb2FkKCk7Ci0Jd2hpbGUgKHNlbnNlICE9IGNrX3ByX2xv
YWRfdWludCgmYmFycmllci0+c2Vuc2UpKQotCQlja19wcl9zdGFsbCgpOwotCi0JY2tfcHJfZmVu
Y2VfYWNxdWlyZSgpOwotCXJldHVybjsKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3NyYy9ja19iYXJyaWVyX2NvbWJpbmluZy5jIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvY2svc3JjL2NrX2JhcnJpZXJfY29tYmluaW5nLmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlZTcyZmRiMDg2ZjM3YzllMzRlNjViOGRhOThhYjQ1ZjVj
OGM4ZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svc3JjL2NrX2JhcnJpZXJfY29tYmluaW5nLmMK
KysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIw
MTUgU2FteSBBbCBCYWhyYS4KLSAqIENvcHlyaWdodCAyMDExIERhdmlkIEpvc2VwaC4KLSAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgot
ICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGNrX2JhcnJpZXIuaD4KLSNpbmNsdWRl
IDxja19jYy5oPgotI2luY2x1ZGUgPGNrX3ByLmg+Ci0jaW5jbHVkZSA8Y2tfc3BpbmxvY2suaD4K
LQotc3RydWN0IGNrX2JhcnJpZXJfY29tYmluaW5nX3F1ZXVlIHsKLQlzdHJ1Y3QgY2tfYmFycmll
cl9jb21iaW5pbmdfZ3JvdXAgKmhlYWQ7Ci0Jc3RydWN0IGNrX2JhcnJpZXJfY29tYmluaW5nX2dy
b3VwICp0YWlsOwotfTsKLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBzdHJ1Y3QgY2tfYmFycmllcl9j
b21iaW5pbmdfZ3JvdXAgKgotY2tfYmFycmllcl9jb21iaW5pbmdfcXVldWVfZGVxdWV1ZShzdHJ1
Y3QgY2tfYmFycmllcl9jb21iaW5pbmdfcXVldWUgKnF1ZXVlKQotewotCXN0cnVjdCBja19iYXJy
aWVyX2NvbWJpbmluZ19ncm91cCAqZnJvbnQgPSBOVUxMOwotCi0JaWYgKHF1ZXVlLT5oZWFkICE9
IE5VTEwpIHsKLQkJZnJvbnQgPSBxdWV1ZS0+aGVhZDsKLQkJcXVldWUtPmhlYWQgPSBxdWV1ZS0+
aGVhZC0+bmV4dDsKLQl9Ci0KLQlyZXR1cm4gZnJvbnQ7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0
aWMgdm9pZAotY2tfYmFycmllcl9jb21iaW5pbmdfaW5zZXJ0KHN0cnVjdCBja19iYXJyaWVyX2Nv
bWJpbmluZ19ncm91cCAqcGFyZW50LAotICAgIHN0cnVjdCBja19iYXJyaWVyX2NvbWJpbmluZ19n
cm91cCAqdG5vZGUsCi0gICAgc3RydWN0IGNrX2JhcnJpZXJfY29tYmluaW5nX2dyb3VwICoqY2hp
bGQpCi17Ci0KLQkqY2hpbGQgPSB0bm9kZTsKLQl0bm9kZS0+cGFyZW50ID0gcGFyZW50OwotCi0J
LyoKLQkgKiBBZnRlciBpbnNlcnRpbmcsIHdlIG11c3QgaW5jcmVtZW50IHRoZSBwYXJlbnQgZ3Jv
dXAncyBjb3VudCBmb3IKLQkgKiBudW1iZXIgb2YgdGhyZWFkcyBleHBlY3RlZCB0byByZWFjaCBp
dDsgb3RoZXJ3aXNlLCB0aGUKLQkgKiBiYXJyaWVyIG1heSBlbmQgcHJlbWF0dXJlbHkuCi0JICov
Ci0JcGFyZW50LT5rKys7Ci0JcmV0dXJuOwotfQotCi0vKgotICogVGhpcyBpbXBsZW1lbnRhdGlv
biBvZiBzb2Z0d2FyZSBjb21iaW5pbmcgdHJlZSBiYXJyaWVycwotICogdXNlcyBsZXZlbCBvcmRl
ciB0cmF2ZXJzYWwgdG8gaW5zZXJ0IG5ldyB0aHJlYWQgZ3JvdXBzCi0gKiBpbnRvIHRoZSBiYXJy
aWVyJ3MgdHJlZS4gV2UgdXNlIGEgcXVldWUgdG8gaW1wbGVtZW50IHRoaXMKLSAqIHRyYXZlcnNh
bC4KLSAqLwotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB2b2lkCi1ja19iYXJyaWVyX2NvbWJpbmluZ19x
dWV1ZV9lbnF1ZXVlKHN0cnVjdCBja19iYXJyaWVyX2NvbWJpbmluZ19xdWV1ZSAqcXVldWUsCi0g
ICAgc3RydWN0IGNrX2JhcnJpZXJfY29tYmluaW5nX2dyb3VwICpub2RlX3ZhbHVlKQotewotCi0J
bm9kZV92YWx1ZS0+bmV4dCA9IE5VTEw7Ci0JaWYgKHF1ZXVlLT5oZWFkID09IE5VTEwpIHsKLQkJ
cXVldWUtPmhlYWQgPSBxdWV1ZS0+dGFpbCA9IG5vZGVfdmFsdWU7Ci0JCXJldHVybjsKLQl9Ci0K
LQlxdWV1ZS0+dGFpbC0+bmV4dCA9IG5vZGVfdmFsdWU7Ci0JcXVldWUtPnRhaWwgPSBub2RlX3Zh
bHVlOwotCi0JcmV0dXJuOwotfQotCi0KLXZvaWQKLWNrX2JhcnJpZXJfY29tYmluaW5nX2dyb3Vw
X2luaXQoc3RydWN0IGNrX2JhcnJpZXJfY29tYmluaW5nICpyb290LAotICAgIHN0cnVjdCBja19i
YXJyaWVyX2NvbWJpbmluZ19ncm91cCAqdG5vZGUsCi0gICAgdW5zaWduZWQgaW50IG50aHIpCi17
Ci0Jc3RydWN0IGNrX2JhcnJpZXJfY29tYmluaW5nX2dyb3VwICpub2RlOwotCXN0cnVjdCBja19i
YXJyaWVyX2NvbWJpbmluZ19xdWV1ZSBxdWV1ZTsKLQotCXF1ZXVlLmhlYWQgPSBxdWV1ZS50YWls
ID0gTlVMTDsKLQotCXRub2RlLT5rID0gbnRocjsKLQl0bm9kZS0+Y291bnQgPSAwOwotCXRub2Rl
LT5zZW5zZSA9IDA7Ci0JdG5vZGUtPmxlZnQgPSB0bm9kZS0+cmlnaHQgPSBOVUxMOwotCi0JLyoK
LQkgKiBGaW5kcyB0aGUgZmlyc3QgYXZhaWxhYmxlIG5vZGUgZm9yIGxpbmthZ2UgaW50byB0aGUg
Y29tYmluaW5nCi0JICogdHJlZS4gVGhlIHVzZSBvZiBhIHNwaW5sb2NrIGlzIGV4Y3VzYWJsZSBh
cyB0aGlzIGlzIGEgb25lLXRpbWUKLQkgKiBpbml0aWFsaXphdGlvbiBjb3N0LgotCSAqLwotCWNr
X3NwaW5sb2NrX2Zhc19sb2NrKCZyb290LT5tdXRleCk7Ci0JY2tfYmFycmllcl9jb21iaW5pbmdf
cXVldWVfZW5xdWV1ZSgmcXVldWUsIHJvb3QtPnJvb3QpOwotCXdoaWxlIChxdWV1ZS5oZWFkICE9
IE5VTEwpIHsKLQkJbm9kZSA9IGNrX2JhcnJpZXJfY29tYmluaW5nX3F1ZXVlX2RlcXVldWUoJnF1
ZXVlKTsKLQotCQkvKiBJZiB0aGUgbGVmdCBjaGlsZCBpcyBmcmVlLCBsaW5rIHRoZSBncm91cCB0
aGVyZS4gKi8KLQkJaWYgKG5vZGUtPmxlZnQgPT0gTlVMTCkgewotCQkJY2tfYmFycmllcl9jb21i
aW5pbmdfaW5zZXJ0KG5vZGUsIHRub2RlLCAmbm9kZS0+bGVmdCk7Ci0JCQlnb3RvIGxlYXZlOwot
CQl9Ci0KLQkJLyogSWYgdGhlIHJpZ2h0IGNoaWxkIGlzIGZyZWUsIGxpbmsgdGhlIGdyb3VwIHRo
ZXJlLiAqLwotCQlpZiAobm9kZS0+cmlnaHQgPT0gTlVMTCkgewotCQkJY2tfYmFycmllcl9jb21i
aW5pbmdfaW5zZXJ0KG5vZGUsIHRub2RlLCAmbm9kZS0+cmlnaHQpOwotCQkJZ290byBsZWF2ZTsK
LQkJfQotCi0JCS8qCi0JCSAqIElmIHVuc3VjY2Vzc2Z1bCwgdHJ5IGluc2VydGluZyBhcyBhIGNo
aWxkIG9mIHRoZSBjaGlsZHJlbiBvZiB0aGUKLQkJICogY3VycmVudCBub2RlLgotCQkgKi8KLQkJ
Y2tfYmFycmllcl9jb21iaW5pbmdfcXVldWVfZW5xdWV1ZSgmcXVldWUsIG5vZGUtPmxlZnQpOwot
CQlja19iYXJyaWVyX2NvbWJpbmluZ19xdWV1ZV9lbnF1ZXVlKCZxdWV1ZSwgbm9kZS0+cmlnaHQp
OwotCX0KLQotbGVhdmU6Ci0JY2tfc3BpbmxvY2tfZmFzX3VubG9jaygmcm9vdC0+bXV0ZXgpOwot
CXJldHVybjsKLX0KLQotdm9pZAotY2tfYmFycmllcl9jb21iaW5pbmdfaW5pdChzdHJ1Y3QgY2tf
YmFycmllcl9jb21iaW5pbmcgKnJvb3QsCi0gICAgc3RydWN0IGNrX2JhcnJpZXJfY29tYmluaW5n
X2dyb3VwICppbml0X3Jvb3QpCi17Ci0KLQlpbml0X3Jvb3QtPmsgPSAwOwotCWluaXRfcm9vdC0+
Y291bnQgPSAwOwotCWluaXRfcm9vdC0+c2Vuc2UgPSAwOwotCWluaXRfcm9vdC0+cGFyZW50ID0g
aW5pdF9yb290LT5sZWZ0ID0gaW5pdF9yb290LT5yaWdodCA9IE5VTEw7Ci0JY2tfc3BpbmxvY2tf
ZmFzX2luaXQoJnJvb3QtPm11dGV4KTsKLQlyb290LT5yb290ID0gaW5pdF9yb290OwotCXJldHVy
bjsKLX0KLQotc3RhdGljIHZvaWQKLWNrX2JhcnJpZXJfY29tYmluaW5nX2F1eChzdHJ1Y3QgY2tf
YmFycmllcl9jb21iaW5pbmcgKmJhcnJpZXIsCi0gICAgc3RydWN0IGNrX2JhcnJpZXJfY29tYmlu
aW5nX2dyb3VwICp0bm9kZSwKLSAgICB1bnNpZ25lZCBpbnQgc2Vuc2UpCi17Ci0KLQkvKgotCSAq
IElmIHRoaXMgaXMgdGhlIGxhc3QgdGhyZWFkIGluIHRoZSBncm91cCwgaXQgbW92ZXMgb24gdG8g
dGhlIHBhcmVudCBncm91cC4KLQkgKiBPdGhlcndpc2UsIGl0IHNwaW5zIG9uIHRoaXMgZ3JvdXAn
cyBzZW5zZS4KLQkgKi8KLQlpZiAoY2tfcHJfZmFhX3VpbnQoJnRub2RlLT5jb3VudCwgMSkgPT0g
dG5vZGUtPmsgLSAxKSB7Ci0JCS8qCi0JCSAqIElmIHdlIGFyZSBhbmQgd2lsbCBiZSB0aGUgbGFz
dCB0aHJlYWQgZW50ZXJpbmcgdGhlIGJhcnJpZXIgZm9yIHRoZQotCQkgKiBjdXJyZW50IGdyb3Vw
IHRoZW4gc2lnbmFsIHRoZSBwYXJlbnQgZ3JvdXAgaWYgb25lIGV4aXN0cy4KLQkJICovCi0JCWlm
ICh0bm9kZS0+cGFyZW50ICE9IE5VTEwpCi0JCQlja19iYXJyaWVyX2NvbWJpbmluZ19hdXgoYmFy
cmllciwgdG5vZGUtPnBhcmVudCwgc2Vuc2UpOwotCi0JCS8qCi0JCSAqIE9uY2UgdGhlIHRocmVh
ZCByZXR1cm5zIGZyb20gaXRzIHBhcmVudChzKSwgaXQgcmVpbml0aWFsaXplcyB0aGUgZ3JvdXAn
cwotCQkgKiBhcnJpdmFsIGNvdW50IGFuZCBzaWduYWxzIG90aGVyIHRocmVhZHMgdG8gY29udGlu
dWUgYnkgZmxpcHBpbmcgdGhlIGdyb3VwCi0JCSAqIHNlbnNlLiBPcmRlciBvZiB0aGVzZSBvcGVy
YXRpb25zIGlzIG5vdCBpbXBvcnRhbnQgc2luY2Ugd2UgYXNzdW1lIGEgc3RhdGljCi0JCSAqIG51
bWJlciBvZiB0aHJlYWRzIGFyZSBtZW1iZXJzIG9mIGEgYmFycmllciBmb3IgdGhlIGxpZmV0aW1l
IG9mIHRoZSBiYXJyaWVyLgotCQkgKiBTaW5jZSBjb3VudCBpcyBleHBsaWNpdGx5IHJlaW5pdGlh
bGl6ZWQsIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBhdCBhbnkgcG9pbnQKLQkJICogdG5vZGUtPmNv
dW50IGlzIGVxdWl2YWxlbnQgdG8gdG5vZGUtPmsgaWYgYW5kIG9ubHkgaWYgdGhhdCBtYW55IHRo
cmVhZHMKLQkJICogYXJlIGF0IHRoZSBiYXJyaWVyLgotCQkgKi8KLQkJY2tfcHJfc3RvcmVfdWlu
dCgmdG5vZGUtPmNvdW50LCAwKTsKLQkJY2tfcHJfZmVuY2Vfc3RvcmUoKTsKLQkJY2tfcHJfc3Rv
cmVfdWludCgmdG5vZGUtPnNlbnNlLCB+dG5vZGUtPnNlbnNlKTsKLQl9IGVsc2UgewotCQlja19w
cl9mZW5jZV9tZW1vcnkoKTsKLQkJd2hpbGUgKHNlbnNlICE9IGNrX3ByX2xvYWRfdWludCgmdG5v
ZGUtPnNlbnNlKSkKLQkJCWNrX3ByX3N0YWxsKCk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi12b2lk
Ci1ja19iYXJyaWVyX2NvbWJpbmluZyhzdHJ1Y3QgY2tfYmFycmllcl9jb21iaW5pbmcgKmJhcnJp
ZXIsCi0gICAgc3RydWN0IGNrX2JhcnJpZXJfY29tYmluaW5nX2dyb3VwICp0bm9kZSwKLSAgICBz
dHJ1Y3QgY2tfYmFycmllcl9jb21iaW5pbmdfc3RhdGUgKnN0YXRlKQotewotCi0JY2tfYmFycmll
cl9jb21iaW5pbmdfYXV4KGJhcnJpZXIsIHRub2RlLCBzdGF0ZS0+c2Vuc2UpOwotCi0JLyogUmV2
ZXJzZSB0aGUgZXhlY3V0aW9uIGNvbnRleHQncyBzZW5zZSBmb3IgdGhlIG5leHQgYmFycmllci4g
Ki8KLQlzdGF0ZS0+c2Vuc2UgPSB+c3RhdGUtPnNlbnNlOwotCXJldHVybjsKLX0KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9ja19iYXJyaWVyX2Rpc3Nl
bWluYXRpb24uYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9ja19iYXJy
aWVyX2Rpc3NlbWluYXRpb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYxNTFk
OGRiYjhkYmFiNmRhNjNiYTAxNGE1MTA2NjJiMDkyNzIwYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9zcmMvY2tfYmFycmllcl9kaXNzZW1pbmF0aW9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIENv
cHlyaWdodCAyMDExIERhdmlkIEpvc2VwaC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgPGNrX2JhcnJpZXIuaD4KLSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNr
X3ByLmg+Ci0jaW5jbHVkZSA8Y2tfc3BpbmxvY2suaD4KLQotI2luY2x1ZGUgImNrX2ludGVybmFs
LmgiCi0KLXZvaWQKLWNrX2JhcnJpZXJfZGlzc2VtaW5hdGlvbl9pbml0KHN0cnVjdCBja19iYXJy
aWVyX2Rpc3NlbWluYXRpb24gKmJhcnJpZXIsCi0gICAgc3RydWN0IGNrX2JhcnJpZXJfZGlzc2Vt
aW5hdGlvbl9mbGFnICoqYmFycmllcl9pbnRlcm5hbCwKLSAgICB1bnNpZ25lZCBpbnQgbnRocikK
LXsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgaywgc2l6ZSwgb2Zmc2V0OwotCWJvb2wgcCA9IG50aHIg
JiAobnRociAtIDEpOwotCi0JYmFycmllci0+bnRociA9IG50aHI7Ci0JYmFycmllci0+c2l6ZSA9
IHNpemUgPSBja19pbnRlcm5hbF9sb2coY2tfaW50ZXJuYWxfcG93ZXJfMihudGhyKSk7Ci0JY2tf
cHJfc3RvcmVfdWludCgmYmFycmllci0+dGlkLCAwKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudGhy
OyArK2kpIHsKLQkJYmFycmllcltpXS5mbGFnc1swXSA9IGJhcnJpZXJfaW50ZXJuYWxbaV07Ci0J
CWJhcnJpZXJbaV0uZmxhZ3NbMV0gPSBiYXJyaWVyX2ludGVybmFsW2ldICsgc2l6ZTsKLQl9Ci0K
LQlmb3IgKGkgPSAwOyBpIDwgbnRocjsgKytpKSB7Ci0JCWZvciAoayA9IDAsIG9mZnNldCA9IDE7
IGsgPCBzaXplOyArK2ssIG9mZnNldCA8PD0gMSkgewotCQkJLyoKLQkJCSAqIERldGVybWluZSB0
aGUgdGhyZWFkJ3MgcGFydG5lciwgaiwgZm9yIHRoZSBjdXJyZW50IHJvdW5kLCBrLgotCQkJICog
UGFydG5lcnMgYXJlIGNob3NlbiBzdWNoIHRoYXQgYnkgdGhlIGNvbXBsZXRpb24gb2YgdGhlIGJh
cnJpZXIsCi0JCQkgKiBldmVyeSB0aHJlYWQgaGFzIGJlZW4gZGlyZWN0bHkgKGhhdmluZyBvbmUg
b2YgaXRzIGZsYWcgc2V0KSBvcgotCQkJICogaW5kaXJlY3RseSAoaGF2aW5nIG9uZSBvZiBpdHMg
cGFydG5lcnMncyBmbGFncyBzZXQpIHNpZ25hbGVkCi0JCQkgKiBieSBldmVyeSBvdGhlciB0aHJl
YWQgaW4gdGhlIGJhcnJpZXIuCi0JCQkgKi8KLQkJCWlmIChwID09IGZhbHNlKQotCQkJCWogPSAo
aSArIG9mZnNldCkgJiAobnRociAtIDEpOwotCQkJZWxzZQotCQkJCWogPSAoaSArIG9mZnNldCkg
JSBudGhyOwotCi0JCQkvKiBTZXQgdGhlIHRocmVhZCdzIHBhcnRuZXIgZm9yIHJvdW5kIGsuICov
Ci0JCQliYXJyaWVyW2ldLmZsYWdzWzBdW2tdLnBmbGFnID0gJmJhcnJpZXJbal0uZmxhZ3NbMF1b
a10udGZsYWc7Ci0JCQliYXJyaWVyW2ldLmZsYWdzWzFdW2tdLnBmbGFnID0gJmJhcnJpZXJbal0u
ZmxhZ3NbMV1ba10udGZsYWc7Ci0KLQkJCS8qIFNldCB0aGUgdGhyZWFkJ3MgZmxhZ3MgdG8gZmFs
c2UuICovCi0JCQliYXJyaWVyW2ldLmZsYWdzWzBdW2tdLnRmbGFnID0gYmFycmllcltpXS5mbGFn
c1sxXVtrXS50ZmxhZyA9IDA7Ci0JCX0KLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLXZvaWQKLWNrX2Jh
cnJpZXJfZGlzc2VtaW5hdGlvbl9zdWJzY3JpYmUoc3RydWN0IGNrX2JhcnJpZXJfZGlzc2VtaW5h
dGlvbiAqYmFycmllciwKLSAgICBzdHJ1Y3QgY2tfYmFycmllcl9kaXNzZW1pbmF0aW9uX3N0YXRl
ICpzdGF0ZSkKLXsKLQotCXN0YXRlLT5wYXJpdHkgPSAwOwotCXN0YXRlLT5zZW5zZSA9IH4wOwot
CXN0YXRlLT50aWQgPSBja19wcl9mYWFfdWludCgmYmFycmllci0+dGlkLCAxKTsKLQlyZXR1cm47
Ci19Ci0KLXVuc2lnbmVkIGludAotY2tfYmFycmllcl9kaXNzZW1pbmF0aW9uX3NpemUodW5zaWdu
ZWQgaW50IG50aHIpCi17Ci0KLQlyZXR1cm4gKGNrX2ludGVybmFsX2xvZyhja19pbnRlcm5hbF9w
b3dlcl8yKG50aHIpKSA8PCAxKTsKLX0KLQotdm9pZAotY2tfYmFycmllcl9kaXNzZW1pbmF0aW9u
KHN0cnVjdCBja19iYXJyaWVyX2Rpc3NlbWluYXRpb24gKmJhcnJpZXIsCi0gICAgc3RydWN0IGNr
X2JhcnJpZXJfZGlzc2VtaW5hdGlvbl9zdGF0ZSAqc3RhdGUpCi17Ci0JdW5zaWduZWQgaW50IGk7
Ci0JdW5zaWduZWQgaW50IHNpemUgPSBiYXJyaWVyLT5zaXplOwotCi0JZm9yIChpID0gMDsgaSA8
IHNpemU7ICsraSkgewotCQl1bnNpZ25lZCBpbnQgKnBmbGFnLCAqdGZsYWc7Ci0KLQkJcGZsYWcg
PSBiYXJyaWVyW3N0YXRlLT50aWRdLmZsYWdzW3N0YXRlLT5wYXJpdHldW2ldLnBmbGFnOwotCQl0
ZmxhZyA9ICZiYXJyaWVyW3N0YXRlLT50aWRdLmZsYWdzW3N0YXRlLT5wYXJpdHldW2ldLnRmbGFn
OwotCi0JCS8qIFVuYmxvY2sgY3VycmVudCBwYXJ0bmVyLiAqLwotCQlja19wcl9zdG9yZV91aW50
KHBmbGFnLCBzdGF0ZS0+c2Vuc2UpOwotCi0JCS8qIFdhaXQgdW50aWwgc29tZSBvdGhlciB0aHJl
YWQgdW5ibG9ja3MgdGhpcyBvbmUuICovCi0JCXdoaWxlIChja19wcl9sb2FkX3VpbnQodGZsYWcp
ICE9IHN0YXRlLT5zZW5zZSkKLQkJCWNrX3ByX3N0YWxsKCk7Ci0JfQotCi0JLyoKLQkgKiBEaXNz
ZW1pbmF0aW9uIGJhcnJpZXJzIHVzZSB0d28gc2V0cyBvZiBmbGFncyB0byBwcmV2ZW50IHJhY2Ug
Y29uZGl0aW9ucwotCSAqIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxscyB0byB0aGUgYmFycmllci4g
UGFyaXR5IGluZGljYXRlcyB3aGljaCBzZXQgd2lsbAotCSAqIGJlIHVzZWQgZm9yIHRoZSBuZXh0
IGJhcnJpZXIuIFRoZXkgYWxzbyB1c2UgYSBzZW5zZSByZXZlcnNhbCB0ZWNobmlxdWUKLQkgKiB0
byBhdm9pZCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgZmxhZ3MgZm9yIGV2ZXJ5IHR3byBjYWxs
cyB0byB0aGUgYmFycmllci4KLQkgKi8KLQlpZiAoc3RhdGUtPnBhcml0eSA9PSAxKQotCQlzdGF0
ZS0+c2Vuc2UgPSB+c3RhdGUtPnNlbnNlOwotCi0Jc3RhdGUtPnBhcml0eSA9IDEgLSBzdGF0ZS0+
cGFyaXR5OwotCi0JY2tfcHJfZmVuY2VfYWNxdWlyZSgpOwotCXJldHVybjsKLX0KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9ja19iYXJyaWVyX21jcy5j
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svc3JjL2NrX2JhcnJpZXJfbWNzLmMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMDYwMTcyZGJmMDZjZTY0ZDZlYTc2NDZk
ZGYzYTVlNmQ2ZjcwOWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svc3JjL2NrX2JhcnJpZXJfbWNz
LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEx
LTIwMTUgU2FteSBBbCBCYWhyYS4KLSAqIENvcHlyaWdodCAyMDExIERhdmlkIEpvc2VwaC4KLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0g
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGNrX2JhcnJpZXIuaD4KLSNpbmNs
dWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNrX3ByLmg+Ci0jaW5jbHVkZSA8Y2tfc3RkYm9vbC5o
PgotCi12b2lkCi1ja19iYXJyaWVyX21jc19pbml0KHN0cnVjdCBja19iYXJyaWVyX21jcyAqYmFy
cmllciwgdW5zaWduZWQgaW50IG50aHIpCi17Ci0JdW5zaWduZWQgaW50IGksIGo7Ci0KLQlja19w
cl9zdG9yZV91aW50KCZiYXJyaWVyLT50aWQsIDApOwotCi0JZm9yIChpID0gMDsgaSA8IG50aHI7
ICsraSkgewotCQlmb3IgKGogPSAwOyBqIDwgNDsgKytqKSB7Ci0JCQkvKgotCQkJICogSWYgdGhl
cmUgYXJlIHN0aWxsIHRocmVhZHMgdGhhdCBkb24ndCBoYXZlIHBhcmVudHMsCi0JCQkgKiBhZGQg
aXQgYXMgYSBjaGlsZC4KLQkJCSAqLwotCQkJYmFycmllcltpXS5oYXZlY2hpbGRbal0gPSAoKGkg
PDwgMikgKyBqIDwgbnRociAtIDEpID8gfjAgOiAwOwotCi0JCQkvKgotCQkJICogY2hpbGRub3Ry
ZWFkeSBpcyBpbml0aWFsaXplZCB0byBoYXZlY2hpbGQgdG8gZW5zdXJlCi0JCQkgKiBhIHRocmVh
ZCBkb2VzIG5vdCB3YWl0IGZvciBhIGNoaWxkIHRoYXQgZG9lcyBub3QgZXhpc3QuCi0JCQkgKi8K
LQkJCWJhcnJpZXJbaV0uY2hpbGRub3RyZWFkeVtqXSA9IGJhcnJpZXJbaV0uaGF2ZWNoaWxkW2pd
OwotCQl9Ci0KLQkJLyogVGhlIHJvb3QgdGhyZWFkIGRvZXMgbm90IGhhdmUgYSBwYXJlbnQuICov
Ci0JCWJhcnJpZXJbaV0ucGFyZW50ID0gKGkgPT0gMCkgPwotCQkgICAgJmJhcnJpZXJbaV0uZHVt
bXkgOgotCQkgICAgJmJhcnJpZXJbKGkgLSAxKSA+PiAyXS5jaGlsZG5vdHJlYWR5WyhpIC0gMSkg
JiAzXTsKLQotCQkvKiBMZWFmIHRocmVhZHMgZG8gbm90IGhhdmUgYW55IGNoaWxkcmVuLiAqLwot
CQliYXJyaWVyW2ldLmNoaWxkcmVuWzBdID0gKChpIDw8IDEpICsgMSA+PSBudGhyKQk/Ci0JCSAg
ICAmYmFycmllcltpXS5kdW1teSA6Ci0JCSAgICAmYmFycmllclsoaSA8PCAxKSArIDFdLnBhcmVu
dHNlbnNlOwotCi0JCWJhcnJpZXJbaV0uY2hpbGRyZW5bMV0gPSAoKGkgPDwgMSkgKyAyID49IG50
aHIpCT8KLQkJICAgICZiYXJyaWVyW2ldLmR1bW15IDoKLQkJICAgICZiYXJyaWVyWyhpIDw8IDEp
ICsgMl0ucGFyZW50c2Vuc2U7Ci0KLQkJYmFycmllcltpXS5wYXJlbnRzZW5zZSA9IDA7Ci0JfQot
Ci0JcmV0dXJuOwotfQotCi12b2lkCi1ja19iYXJyaWVyX21jc19zdWJzY3JpYmUoc3RydWN0IGNr
X2JhcnJpZXJfbWNzICpiYXJyaWVyLCBzdHJ1Y3QgY2tfYmFycmllcl9tY3Nfc3RhdGUgKnN0YXRl
KQotewotCi0Jc3RhdGUtPnNlbnNlID0gfjA7Ci0Jc3RhdGUtPnZwaWQgPSBja19wcl9mYWFfdWlu
dCgmYmFycmllci0+dGlkLCAxKTsKLQlyZXR1cm47Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMg
Ym9vbAotY2tfYmFycmllcl9tY3NfY2hlY2tfY2hpbGRyZW4odW5zaWduZWQgaW50ICpjaGlsZG5v
dHJlYWR5KQotewotCi0JaWYgKGNrX3ByX2xvYWRfdWludCgmY2hpbGRub3RyZWFkeVswXSkgIT0g
MCkKLQkJcmV0dXJuIGZhbHNlOwotCWlmIChja19wcl9sb2FkX3VpbnQoJmNoaWxkbm90cmVhZHlb
MV0pICE9IDApCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoY2tfcHJfbG9hZF91aW50KCZjaGlsZG5v
dHJlYWR5WzJdKSAhPSAwKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKGNrX3ByX2xvYWRfdWludCgm
Y2hpbGRub3RyZWFkeVszXSkgIT0gMCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7
Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdm9pZAotY2tfYmFycmllcl9tY3NfcmVpbml0aWFs
aXplX2NoaWxkcmVuKHN0cnVjdCBja19iYXJyaWVyX21jcyAqbm9kZSkKLXsKLQotCWNrX3ByX3N0
b3JlX3VpbnQoJm5vZGUtPmNoaWxkbm90cmVhZHlbMF0sIG5vZGUtPmhhdmVjaGlsZFswXSk7Ci0J
Y2tfcHJfc3RvcmVfdWludCgmbm9kZS0+Y2hpbGRub3RyZWFkeVsxXSwgbm9kZS0+aGF2ZWNoaWxk
WzFdKTsKLQlja19wcl9zdG9yZV91aW50KCZub2RlLT5jaGlsZG5vdHJlYWR5WzJdLCBub2RlLT5o
YXZlY2hpbGRbMl0pOwotCWNrX3ByX3N0b3JlX3VpbnQoJm5vZGUtPmNoaWxkbm90cmVhZHlbM10s
IG5vZGUtPmhhdmVjaGlsZFszXSk7Ci0JcmV0dXJuOwotfQotCi12b2lkCi1ja19iYXJyaWVyX21j
cyhzdHJ1Y3QgY2tfYmFycmllcl9tY3MgKmJhcnJpZXIsCi0gICAgc3RydWN0IGNrX2JhcnJpZXJf
bWNzX3N0YXRlICpzdGF0ZSkKLXsKLQotCS8qCi0JICogV2FpdCB1bnRpbCBhbGwgY2hpbGRyZW4g
aGF2ZSByZWFjaGVkIHRoZSBiYXJyaWVyIGFuZCBhcmUgZG9uZSB3YWl0aW5nCi0JICogZm9yIHRo
ZWlyIGNoaWxkcmVuLgotCSAqLwotCXdoaWxlIChja19iYXJyaWVyX21jc19jaGVja19jaGlsZHJl
bihiYXJyaWVyW3N0YXRlLT52cGlkXS5jaGlsZG5vdHJlYWR5KSA9PSBmYWxzZSkKLQkJY2tfcHJf
c3RhbGwoKTsKLQotCS8qIFJlaW5pdGlhbGl6ZSBmb3IgbmV4dCBiYXJyaWVyLiAqLwotCWNrX2Jh
cnJpZXJfbWNzX3JlaW5pdGlhbGl6ZV9jaGlsZHJlbigmYmFycmllcltzdGF0ZS0+dnBpZF0pOwot
Ci0JLyogSW5mb3JtIHBhcmVudCB0aHJlYWQgYW5kIGl0cyBjaGlsZHJlbiBoYXZlIGFycml2ZWQg
YXQgdGhlIGJhcnJpZXIuICovCi0JY2tfcHJfc3RvcmVfdWludChiYXJyaWVyW3N0YXRlLT52cGlk
XS5wYXJlbnQsIDApOwotCi0JLyogV2FpdCB1bnRpbCBwYXJlbnQgaW5kaWNhdGVzIGFsbCB0aHJl
YWRzIGhhdmUgYXJyaXZlZCBhdCB0aGUgYmFycmllci4gKi8KLQlpZiAoc3RhdGUtPnZwaWQgIT0g
MCkgewotCQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZiYXJyaWVyW3N0YXRlLT52cGlkXS5wYXJl
bnRzZW5zZSkgIT0gc3RhdGUtPnNlbnNlKQotCQkJY2tfcHJfc3RhbGwoKTsKLQl9Ci0KLQkvKiBJ
bmZvcm0gY2hpbGRyZW4gb2Ygc3VjY2Vzc2Z1bCBiYXJyaWVyLiAqLwotCWNrX3ByX3N0b3JlX3Vp
bnQoYmFycmllcltzdGF0ZS0+dnBpZF0uY2hpbGRyZW5bMF0sIHN0YXRlLT5zZW5zZSk7Ci0JY2tf
cHJfc3RvcmVfdWludChiYXJyaWVyW3N0YXRlLT52cGlkXS5jaGlsZHJlblsxXSwgc3RhdGUtPnNl
bnNlKTsKLQlzdGF0ZS0+c2Vuc2UgPSB+c3RhdGUtPnNlbnNlOwotCWNrX3ByX2ZlbmNlX21lbW9y
eSgpOwotCXJldHVybjsKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2NrL3NyYy9ja19iYXJyaWVyX3RvdXJuYW1lbnQuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2NrL3NyYy9ja19iYXJyaWVyX3RvdXJuYW1lbnQuYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTIzMmRiYzA1MWMzYjFlMTFiM2ZmMjJhNmYxYTJkMTMxMzNkZjNmNi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9jay9zcmMvY2tfYmFycmllcl90b3VybmFtZW50LmMKKysrIC9k
ZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDExLTIwMTUgU2Ft
eSBBbCBCYWhyYS4KLSAqIENvcHlyaWdodCAyMDExIERhdmlkIEpvc2VwaC4KLSAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGNrX2JhcnJpZXIuaD4KLSNpbmNsdWRlIDxja19w
ci5oPgotCi0jaW5jbHVkZSAiY2tfaW50ZXJuYWwuaCIKLQotLyoKLSAqIFRoaXMgaXMgYSB0b3Vy
bmFtZW50IGJhcnJpZXIgaW1wbGVtZW50YXRpb24uIFRocmVhZHMgYXJlIHN0YXRpY2FsbHkKLSAq
IGFzc2lnbmVkIHJvbGVzIHRvIHBlcmZvcm0gZm9yIGVhY2ggcm91bmQgb2YgdGhlIGJhcnJpZXIu
IFdpbm5lcnMKLSAqIG1vdmUgb24gdG8gdGhlIG5leHQgcm91bmQsIHdoaWxlIGxvc2VycyBzcGlu
IGluIHRoZWlyIGN1cnJlbnQgcm91bmRzCi0gKiBvbiB0aGVpciBvd24gZmxhZ3MuIER1cmluZyB0
aGUgbGFzdCByb3VuZCwgdGhlIGNoYW1waW9uIG9mIHRoZSB0b3VybmFtZW50Ci0gKiBzZXRzIHRo
ZSBsYXN0IGZsYWcgdGhhdCBiZWdpbnMgdGhlIHdha2V1cCBwcm9jZXNzLgotICovCi0KLWVudW0g
ewotCUNLX0JBUlJJRVJfVE9VUk5BTUVOVF9CWUUsCi0JQ0tfQkFSUklFUl9UT1VSTkFNRU5UX0NI
QU1QSU9OLAotCUNLX0JBUlJJRVJfVE9VUk5BTUVOVF9EUk9QT1VULAotCUNLX0JBUlJJRVJfVE9V
Uk5BTUVOVF9MT1NFUiwKLQlDS19CQVJSSUVSX1RPVVJOQU1FTlRfV0lOTkVSCi19OwotCi12b2lk
Ci1ja19iYXJyaWVyX3RvdXJuYW1lbnRfc3Vic2NyaWJlKHN0cnVjdCBja19iYXJyaWVyX3RvdXJu
YW1lbnQgKmJhcnJpZXIsCi0gICAgc3RydWN0IGNrX2JhcnJpZXJfdG91cm5hbWVudF9zdGF0ZSAq
c3RhdGUpCi17Ci0KLQlzdGF0ZS0+c2Vuc2UgPSB+MDsKLQlzdGF0ZS0+dnBpZCA9IGNrX3ByX2Zh
YV91aW50KCZiYXJyaWVyLT50aWQsIDEpOwotCXJldHVybjsKLX0KLQotdm9pZAotY2tfYmFycmll
cl90b3VybmFtZW50X2luaXQoc3RydWN0IGNrX2JhcnJpZXJfdG91cm5hbWVudCAqYmFycmllciwK
LSAgICBzdHJ1Y3QgY2tfYmFycmllcl90b3VybmFtZW50X3JvdW5kICoqcm91bmRzLAotICAgIHVu
c2lnbmVkIGludCBudGhyKQotewotCXVuc2lnbmVkIGludCBpLCBrLCBzaXplLCB0d29rLCB0d29r
bTEsIGltb2QyazsKLQotCWNrX3ByX3N0b3JlX3VpbnQoJmJhcnJpZXItPnRpZCwgMCk7Ci0JYmFy
cmllci0+c2l6ZSA9IHNpemUgPSBja19iYXJyaWVyX3RvdXJuYW1lbnRfc2l6ZShudGhyKTsKLQot
CWZvciAoaSA9IDA7IGkgPCBudGhyOyArK2kpIHsKLQkJLyogVGhlIGZpcnN0IHJvbGUgaXMgYWx3
YXlzIENLX0JBUlJJRVJfVE9VUk5BTUVOVF9EUk9QT1VULiAqLwotCQlyb3VuZHNbaV1bMF0uZmxh
ZyA9IDA7Ci0JCXJvdW5kc1tpXVswXS5yb2xlID0gQ0tfQkFSUklFUl9UT1VSTkFNRU5UX0RST1BP
VVQ7Ci0JCWZvciAoayA9IDEsIHR3b2sgPSAyLCB0d29rbTEgPSAxOyBrIDwgc2l6ZTsgKytrLCB0
d29rbTEgPSB0d29rLCB0d29rIDw8PSAxKSB7Ci0JCQlyb3VuZHNbaV1ba10uZmxhZyA9IDA7Ci0K
LQkJCWltb2QyayA9IGkgJiAodHdvayAtIDEpOwotCQkJaWYgKGltb2QyayA9PSAwKSB7Ci0JCQkJ
aWYgKChpICsgdHdva20xIDwgbnRocikgJiYgKHR3b2sgPCBudGhyKSkKLQkJCQkJcm91bmRzW2ld
W2tdLnJvbGUgPSBDS19CQVJSSUVSX1RPVVJOQU1FTlRfV0lOTkVSOwotCQkJCWVsc2UgaWYgKGkg
KyB0d29rbTEgPj0gbnRocikKLQkJCQkJcm91bmRzW2ldW2tdLnJvbGUgPSBDS19CQVJSSUVSX1RP
VVJOQU1FTlRfQllFOwotCQkJfQotCi0JCQlpZiAoaW1vZDJrID09IHR3b2ttMSkKLQkJCQlyb3Vu
ZHNbaV1ba10ucm9sZSA9IENLX0JBUlJJRVJfVE9VUk5BTUVOVF9MT1NFUjsKLQkJCWVsc2UgaWYg
KChpID09IDApICYmICh0d29rID49IG50aHIpKQotCQkJCXJvdW5kc1tpXVtrXS5yb2xlID0gQ0tf
QkFSUklFUl9UT1VSTkFNRU5UX0NIQU1QSU9OOwotCi0JCQlpZiAocm91bmRzW2ldW2tdLnJvbGUg
PT0gQ0tfQkFSUklFUl9UT1VSTkFNRU5UX0xPU0VSKQotCQkJCXJvdW5kc1tpXVtrXS5vcHBvbmVu
dCA9ICZyb3VuZHNbaSAtIHR3b2ttMV1ba10uZmxhZzsKLQkJCWVsc2UgaWYgKHJvdW5kc1tpXVtr
XS5yb2xlID09IENLX0JBUlJJRVJfVE9VUk5BTUVOVF9XSU5ORVIgfHwKLQkJCQkgcm91bmRzW2ld
W2tdLnJvbGUgPT0gQ0tfQkFSUklFUl9UT1VSTkFNRU5UX0NIQU1QSU9OKQotCQkJCXJvdW5kc1tp
XVtrXS5vcHBvbmVudCA9ICZyb3VuZHNbaSArIHR3b2ttMV1ba10uZmxhZzsKLQkJfQotCX0KLQot
CWNrX3ByX3N0b3JlX3B0cigmYmFycmllci0+cm91bmRzLCByb3VuZHMpOwotCXJldHVybjsKLX0K
LQotdW5zaWduZWQgaW50Ci1ja19iYXJyaWVyX3RvdXJuYW1lbnRfc2l6ZSh1bnNpZ25lZCBpbnQg
bnRocikKLXsKLQotCXJldHVybiAoY2tfaW50ZXJuYWxfbG9nKGNrX2ludGVybmFsX3Bvd2VyXzIo
bnRocikpICsgMSk7Ci19Ci0KLXZvaWQKLWNrX2JhcnJpZXJfdG91cm5hbWVudChzdHJ1Y3QgY2tf
YmFycmllcl90b3VybmFtZW50ICpiYXJyaWVyLAotICAgIHN0cnVjdCBja19iYXJyaWVyX3RvdXJu
YW1lbnRfc3RhdGUgKnN0YXRlKQotewotCXN0cnVjdCBja19iYXJyaWVyX3RvdXJuYW1lbnRfcm91
bmQgKipyb3VuZHMgPSBja19wcl9sb2FkX3B0cigmYmFycmllci0+cm91bmRzKTsKLQlpbnQgcm91
bmQgPSAxOwotCi0JaWYgKGJhcnJpZXItPnNpemUgPT0gMSkKLQkJcmV0dXJuOwotCi0JZm9yICg7
OyArK3JvdW5kKSB7Ci0JCXN3aXRjaCAocm91bmRzW3N0YXRlLT52cGlkXVtyb3VuZF0ucm9sZSkg
ewotCQljYXNlIENLX0JBUlJJRVJfVE9VUk5BTUVOVF9CWUU6Ci0JCQlicmVhazsKLQkJY2FzZSBD
S19CQVJSSUVSX1RPVVJOQU1FTlRfQ0hBTVBJT046Ci0JCQkvKgotCQkJICogVGhlIENLX0JBUlJJ
RVJfVE9VUk5BTUVOVF9DSEFNUElPTiB3YWl0cyB1bnRpbCBpdCB3aW5zIHRoZSB0b3VybmFtZW50
OyBpdCB0aGVuCi0JCQkgKiBzZXRzIHRoZSBmaW5hbCBmbGFnIGJlZm9yZSB0aGUgd2FrZXVwIHBo
YXNlIG9mIHRoZSBiYXJyaWVyLgotCQkJICovCi0JCQl3aGlsZSAoY2tfcHJfbG9hZF91aW50KCZy
b3VuZHNbc3RhdGUtPnZwaWRdW3JvdW5kXS5mbGFnKSAhPSBzdGF0ZS0+c2Vuc2UpCi0JCQkJY2tf
cHJfc3RhbGwoKTsKLQotCQkJY2tfcHJfc3RvcmVfdWludChyb3VuZHNbc3RhdGUtPnZwaWRdW3Jv
dW5kXS5vcHBvbmVudCwgc3RhdGUtPnNlbnNlKTsKLQkJCWdvdG8gd2FrZXVwOwotCQljYXNlIENL
X0JBUlJJRVJfVE9VUk5BTUVOVF9EUk9QT1VUOgotCQkJLyogTk9UUkVBQ0hFRCAqLwotCQkJYnJl
YWs7Ci0JCWNhc2UgQ0tfQkFSUklFUl9UT1VSTkFNRU5UX0xPU0VSOgotCQkJLyoKLQkJCSAqIENL
X0JBUlJJRVJfVE9VUk5BTUVOVF9MT1NFUnMgc2V0IHRoZSBmbGFncyBvZiB0aGVpciBvcHBvbmVu
dHMgYW5kIHdhaXQgdW50aWwKLQkJCSAqIHRoZWlyIG9wcG9uZW50cyByZWxlYXNlIHRoZW0gYWZ0
ZXIgdGhlIHRvdXJuYW1lbnQgaXMgb3Zlci4KLQkJCSAqLwotCQkJY2tfcHJfc3RvcmVfdWludChy
b3VuZHNbc3RhdGUtPnZwaWRdW3JvdW5kXS5vcHBvbmVudCwgc3RhdGUtPnNlbnNlKTsKLQkJCXdo
aWxlIChja19wcl9sb2FkX3VpbnQoJnJvdW5kc1tzdGF0ZS0+dnBpZF1bcm91bmRdLmZsYWcpICE9
IHN0YXRlLT5zZW5zZSkKLQkJCQlja19wcl9zdGFsbCgpOwotCi0JCQlnb3RvIHdha2V1cDsKLQkJ
Y2FzZSBDS19CQVJSSUVSX1RPVVJOQU1FTlRfV0lOTkVSOgotCQkJLyoKLQkJCSAqIENLX0JBUlJJ
RVJfVE9VUk5BTUVOVF9XSU5ORVJzIHdhaXQgdW50aWwgdGhlaXIgY3VycmVudCBvcHBvbmVudCBz
ZXRzIHRoZWlyIGZsYWc7IHRoZXkgdGhlbgotCQkJICogY29udGludWUgdG8gdGhlIG5leHQgcm91
bmQgb2YgdGhlIHRvdXJuYW1lbnQuCi0JCQkgKi8KLQkJCXdoaWxlIChja19wcl9sb2FkX3VpbnQo
JnJvdW5kc1tzdGF0ZS0+dnBpZF1bcm91bmRdLmZsYWcpICE9IHN0YXRlLT5zZW5zZSkKLQkJCQlj
a19wcl9zdGFsbCgpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLXdha2V1cDoKLQlmb3IgKHJvdW5k
IC09IDEgOzsgLS1yb3VuZCkgewotCQlzd2l0Y2ggKHJvdW5kc1tzdGF0ZS0+dnBpZF1bcm91bmRd
LnJvbGUpIHsKLQkJY2FzZSBDS19CQVJSSUVSX1RPVVJOQU1FTlRfQllFOgotCQkJYnJlYWs7Ci0J
CWNhc2UgQ0tfQkFSUklFUl9UT1VSTkFNRU5UX0NIQU1QSU9OOgotCQkJLyogTk9UUkVBQ0hFRCAq
LwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0tfQkFSUklFUl9UT1VSTkFNRU5UX0RST1BPVVQ6Ci0JCQln
b3RvIGxlYXZlOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0tfQkFSUklFUl9UT1VSTkFNRU5UX0xPU0VS
OgotCQkJLyogTk9UUkVBQ0hFRCAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0tfQkFSUklFUl9UT1VS
TkFNRU5UX1dJTk5FUjoKLQkJCS8qCi0JCQkgKiBXaW5uZXJzIGluZm9ybSB0aGVpciBvbGQgb3Bw
b25lbnRzIHRoZSB0b3VybmFtZW50IGlzIG92ZXIKLQkJCSAqIGJ5IHNldHRpbmcgdGhlaXIgZmxh
Z3MuCi0JCQkgKi8KLQkJCWNrX3ByX3N0b3JlX3VpbnQocm91bmRzW3N0YXRlLT52cGlkXVtyb3Vu
ZF0ub3Bwb25lbnQsIHN0YXRlLT5zZW5zZSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotbGVhdmU6
Ci0JY2tfcHJfZmVuY2VfbWVtb3J5KCk7Ci0Jc3RhdGUtPnNlbnNlID0gfnN0YXRlLT5zZW5zZTsK
LQlyZXR1cm47Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9zcmMvY2tfZXBvY2guYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9j
a19lcG9jaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzI3M2I0NzRiNjM4ZGRk
NGJkYmY3NDE3YWNhYjBjMjc5M2VjMmY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9ja19l
cG9jaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
MjAxMS0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8q
Ci0gKiBUaGUgaW1wbGVtZW50YXRpb24gaGVyZSBpcyBpbnNwaXJlZCBmcm9tIHRoZSB3b3JrIGRl
c2NyaWJlZCBpbjoKLSAqICAgRnJhc2VyLCBLLiAyMDA0LiBQcmFjdGljYWwgTG9jay1GcmVlZG9t
LiBQaEQgVGhlc2lzLCBVbml2ZXJzaXR5Ci0gKiAgIG9mIENhbWJyaWRnZSBDb21wdXRpbmcgTGFi
b3JhdG9yeS4KLSAqLwotCi0jaW5jbHVkZSA8Y2tfYmFja29mZi5oPgotI2luY2x1ZGUgPGNrX2Nj
Lmg+Ci0jaW5jbHVkZSA8Y2tfZXBvY2guaD4KLSNpbmNsdWRlIDxja19wci5oPgotI2luY2x1ZGUg
PGNrX3N0YWNrLmg+Ci0jaW5jbHVkZSA8Y2tfc3RkYm9vbC5oPgotI2luY2x1ZGUgPGNrX3N0cmlu
Zy5oPgotCi0vKgotICogT25seSB0aHJlZSBkaXN0aW5jdCB2YWx1ZXMgYXJlIHVzZWQgZm9yIHJl
Y2xhbWF0aW9uLCBidXQgcmVjbGFtYXRpb24gb2NjdXJzCi0gKiBhdCBlKzIgcmF0aGVyIHRoYW4g
ZSsxLiBBbnkgdGhyZWFkIGluIGEgImNyaXRpY2FsIHNlY3Rpb24iIHdvdWxkIGhhdmUKLSAqIGFj
cXVpcmVkIHNvbWUgc25hcHNob3QgKGUpIG9mIHRoZSBnbG9iYWwgZXBvY2ggdmFsdWUgKGVfZykg
YW5kIHNldCBhbiBhY3RpdmUKLSAqIGZsYWcuIEFueSBoYXphcmRvdXMgcmVmZXJlbmNlcyB3aWxs
IG9ubHkgb2NjdXIgYWZ0ZXIgYSBmdWxsIG1lbW9yeSBiYXJyaWVyLgotICogRm9yIGV4YW1wbGUs
IGFzc3VtZSBhbiBpbml0aWFsIGVfZyB2YWx1ZSBvZiAxLCBlIHZhbHVlIG9mIDAgYW5kIGFjdGl2
ZSB2YWx1ZQotICogb2YgMC4KLSAqCi0gKiBja19lcG9jaF9iZWdpbiguLi4pCi0gKiAgIGUgPSBl
X2cKLSAqICAgYWN0aXZlID0gMQotICogICBtZW1vcnlfYmFycmllcigpOwotICoKLSAqIEFueSBz
ZXJpYWxpemVkIHJlYWRzIG1heSBvYnNlcnZlIGUgPSAwIG9yIGUgPSAxIHdpdGggYWN0aXZlID0g
MCwgb3IgZSA9IDAgb3IKLSAqIGUgPSAxIHdpdGggYWN0aXZlID0gMS4gVGhlIGVfZyB2YWx1ZSBj
YW4gb25seSBnbyBmcm9tIDEgdG8gMiBpZiBldmVyeSB0aHJlYWQKLSAqIGhhcyBhbHJlYWR5IG9i
c2VydmVkIHRoZSB2YWx1ZSBvZiAiMSIgKG9yIHRoZSB2YWx1ZSB3ZSBhcmUgaW5jcmVtZW50aW5n
Ci0gKiBmcm9tKS4gVGhpcyBndWFyYW50ZWVzIHVzIHRoYXQgZm9yIGFueSBnaXZlbiB2YWx1ZSBl
X2csIGFueSB0aHJlYWRzIHdpdGgtaW4KLSAqIGNyaXRpY2FsIHNlY3Rpb25zIChyZWZlcnJlZCB0
byBhcyAiYWN0aXZlIiB0aHJlYWRzIGZyb20gaGVyZSBvbikgd291bGQgaGF2ZQotICogYW4gZSB2
YWx1ZSBvZiBlX2ctMSBvciBlX2cuIFRoaXMgYWxzbyBtZWFucyB0aGF0IGhhemFyZG91cyByZWZl
cmVuY2VzIG1heSBiZQotICogc2hhcmVkIGluIGJvdGggZV9nLTEgYW5kIGVfZyBldmVuIGlmIHRo
ZXkgYXJlIGxvZ2ljYWxseSBkZWxldGVkIGluIGVfZy4KLSAqCi0gKiBGb3IgZXhhbXBsZSwgYXNz
dW1lIGFsbCB0aHJlYWRzIGhhdmUgYW4gZSB2YWx1ZSBvZiBlX2cuIEFub3RoZXIgdGhyZWFkIG1h
eQotICogaW5jcmVtZW50IHRvIGVfZyB0byBlX2crMS4gT2xkZXIgdGhyZWFkcyBtYXkgaGF2ZSBh
IHJlZmVyZW5jZSB0byBhbiBvYmplY3QKLSAqIHdoaWNoIGlzIG9ubHkgZGVsZXRlZCBpbiBlX2cr
MS4gSXQgY291bGQgYmUgdGhhdCByZWFkZXIgdGhyZWFkcyBhcmUKLSAqIGV4ZWN1dGluZyBzb21l
IGhhc2ggdGFibGUgbG9vay11cHMsIHdoaWxlIHNvbWUgb3RoZXIgd3JpdGVyIHRocmVhZCAod2hp
Y2gKLSAqIGNhdXNlcyBlcG9jaCBjb3VudGVyIHRpY2spIGFjdHVhbGx5IGRlbGV0ZXMgdGhlIHNh
bWUgaXRlbXMgdGhhdCByZWFkZXIKLSAqIHRocmVhZHMgYXJlIGxvb2tpbmcgdXAgKHRoaXMgd3Jp
dGVyIHRocmVhZCBoYXZpbmcgYW4gZSB2YWx1ZSBvZiBlX2crMSkuCi0gKiBUaGlzIGlzIHBvc3Np
YmxlIGlmIHRoZSB3cml0ZXIgdGhyZWFkIHJlLW9ic2VydmVzIHRoZSBlcG9jaCBhZnRlciB0aGUK
LSAqIGNvdW50ZXIgdGljay4KLSAqCi0gKiBQc3VlZG8tY29kZSBmb3Igd3JpdGVyOgotICogICBj
a19lcG9jaF9iZWdpbigpCi0gKiAgIGh0X2RlbGV0ZSh4KQotICogICBja19lcG9jaF9lbmQoKQot
ICogICBja19lcG9jaF9iZWdpbigpCi0gKiAgIGh0X2RlbGV0ZSh4KQotICogICBja19lcG9jaF9l
bmQoKQotICoKLSAqIFBzdWVkby1jb2RlIGZvciByZWFkZXI6Ci0gKiAgIGZvciAoOzspIHsKLSAq
ICAgICAgeCA9IGh0X2xvb2t1cCh4KQotICogICAgICBja19wcl9pbmMoJngtPnZhbHVlKTsKLSAq
ICAgfQotICoKLSAqIE9mIGNvdXJzZSwgaXQgaXMgYWxzbyBwb3NzaWJsZSBmb3IgcmVmZXJlbmNl
cyBsb2dpY2FsbHkgZGVsZXRlZCBhdCBlX2ctMSB0bwotICogc3RpbGwgYmUgYWNjZXNzZWQgYXQg
ZV9nIGFzIHRocmVhZHMgYXJlICJhY3RpdmUiIGF0IHRoZSBzYW1lIHRpbWUKLSAqIChyZWFsLXdv
cmxkIHRpbWUpIG11dGF0aW5nIHNoYXJlZCBvYmplY3RzLgotICoKLSAqIE5vdywgaWYgdGhlIGVw
b2NoIGNvdW50ZXIgaXMgdGlja2VkIHRvIGVfZysxLCB0aGVuIG5vIG5ldyBoYXphcmRvdXMKLSAq
IHJlZmVyZW5jZXMgY291bGQgZXhpc3QgdG8gb2JqZWN0cyBsb2dpY2FsbHkgZGVsZXRlZCBhdCBl
X2ctMS4gVGhlIHJlYXNvbiBmb3IKLSAqIHRoaXMgaXMgdGhhdCBhdCBlX2crMSwgYWxsIGVwb2No
IHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBzdGFydGVkIGF0Ci0gKiBlX2ctMSBtdXN0IGhh
dmUgYmVlbiBjb21wbGV0ZWQuIElmIGFueSBlcG9jaCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlv
bnMgYXQKLSAqIGVfZy0xIHdlcmUgc3RpbGwgYWN0aXZlLCB0aGVuIHdlIHdvdWxkIG5ldmVyIGlu
Y3JlbWVudCB0byBlX2crMSAoYWN0aXZlICE9IDAKLSAqIF4gZSAhPSBlX2cpLiAgQWRkaXRpb25h
bGx5LCBlX2cgbWF5IHN0aWxsIGhhdmUgaGF6YXJkb3VzIHJlZmVyZW5jZXMgdG8KLSAqIG9iamVj
dHMgbG9naWNhbGx5IGRlbGV0ZWQgYXQgZV9nLTEgd2hpY2ggbWVhbnMgb2JqZWN0cyBsb2dpY2Fs
bHkgZGVsZXRlZCBhdAotICogZV9nLTEgY2Fubm90IGJlIGRlbGV0ZWQgYXQgZV9nKzEgdW5sZXNz
IGFsbCB0aHJlYWRzIGhhdmUgb2JzZXJ2ZWQgZV9nKzEKLSAqIChzaW5jZSBpdCBpcyB2YWxpZCBm
b3IgYWN0aXZlIHRocmVhZHMgdG8gYmUgYXQgZV9nIGFuZCB0aHJlYWRzIGF0IGVfZyBzdGlsbAot
ICogcmVxdWlyZSBzYWZlIG1lbW9yeSBhY2Nlc3NlcykuCi0gKgotICogSG93ZXZlciwgYXQgZV9n
KzIsIGFsbCBhY3RpdmUgdGhyZWFkcyBtdXN0IGJlIGVpdGhlciBhdCBlX2crMSBvciBlX2crMi4K
LSAqIFRob3VnaCBlX2crMiBtYXkgc2hhcmUgaGF6YXJkb3VzIHJlZmVyZW5jZXMgd2l0aCBlX2cr
MSwgYW5kIGVfZysxIHNoYXJlcwotICogaGF6YXJkb3VzIHJlZmVyZW5jZXMgdG8gZV9nLCBubyBh
Y3RpdmUgdGhyZWFkcyBhcmUgYXQgZV9nIG9yIGVfZy0xLiBUaGlzCi0gKiBtZWFucyBubyBoYXph
cmRvdXMgcmVmZXJlbmNlcyBjb3VsZCBleGlzdCB0byBvYmplY3RzIGRlbGV0ZWQgYXQgZV9nLTEg
KGF0Ci0gKiBlX2crMikuCi0gKgotICogVG8gc3VtbWFyaXplIHRoZXNlIGltcG9ydGFudCBwb2lu
dHMsCi0gKiAgIDEpIEFjdGl2ZSB0aHJlYWRzIHdpbGwgYWx3YXlzIGhhdmUgYSB2YWx1ZSBvZiBl
X2cgb3IgZV9nLTEuCi0gKiAgIDIpIEl0ZW1zIHRoYXQgYXJlIGxvZ2ljYWxseSBkZWxldGVkIGVf
ZyBvciBlX2ctMSBjYW5ub3QgYmUgcGh5c2ljYWxseQotICogICAgICBkZWxldGVkLgotICogICAz
KSBPYmplY3RzIGxvZ2ljYWxseSBkZWxldGVkIGF0IGVfZy0xIGNhbiBiZSBwaHlzaWNhbGx5IGRl
c3Ryb3llZCBhdCBlX2crMgotICogICAgICBvciBhdCBlX2crMSBpZiBubyB0aHJlYWRzIGFyZSBh
dCBlX2cuCi0gKgotICogTGFzdCBidXQgbm90IGxlYXN0LCBpZiB3ZSBhcmUgYXQgZV9nKzIsIHRo
ZW4gbm8gYWN0aXZlIHRocmVhZCBpcyBhdCBlX2cKLSAqIHdoaWNoIG1lYW5zIGl0IGlzIHNhZmUg
dG8gYXBwbHkgbW9kdWxvLTMgYXJpdGhtZXRpYyB0byBlX2cgdmFsdWUgaW4gb3JkZXIgdG8KLSAq
IHJlLXVzZSBlX2cgdG8gcmVwcmVzZW50IHRoZSBlX2crMyBzdGF0ZS4gVGhpcyBtZWFucyBpdCBp
cyBzdWZmaWNpZW50IHRvCi0gKiByZXByZXNlbnQgZV9nIHVzaW5nIG9ubHkgdGhlIHZhbHVlcyAw
LCAxIG9yIDIuIEV2ZXJ5IHRpbWUgYSB0aHJlYWQgcmUtdmlzaXRzCi0gKiBhIGVfZyAod2hpY2gg
Y2FuIGJlIGRldGVybWluZWQgd2l0aCBhIG5vbi1lbXB0eSBkZWZlcnJhbCBsaXN0KSBpdCBjYW4g
YXNzdW1lCi0gKiBvYmplY3RzIGluIHRoZSBlX2cgZGVmZXJyYWwgbGlzdCBpbnZvbHZlZCBhdCBs
ZWFzdCB0aHJlZSBlX2cgdHJhbnNpdGlvbnMgYW5kCi0gKiBhcmUgdGh1cywgc2FmZSwgZm9yIHBo
eXNpY2FsIGRlbGV0aW9uLgotICoKLSAqIEJsb2NraW5nIHNlbWFudGljcyBmb3IgZXBvY2ggcmVj
bGFtYXRpb24gaGF2ZSBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucy4KLSAqIFRob3VnaCB3ZSBvbmx5
IHJlcXVpcmUgdGhyZWUgZGVmZXJyYWwgbGlzdHMsIHJlYXNvbmFibGUgYmxvY2tpbmcgc2VtYW50
aWNzCi0gKiBtdXN0IGJlIGFibGUgdG8gbW9yZSBncmFjZWZ1bGx5IGhhbmRsZSBidXJzdHkgd3Jp
dGUgd29yay1sb2FkcyB3aGljaCBjb3VsZAotICogZWFzaWx5IGNhdXNlIGVfZyB3cmFwLWFyb3Vu
ZCBpZiBtb2R1bG8tMyBhcml0aG1ldGljIGlzIHVzZWQuIFRoaXMgYWxsb3dzIGZvcgotICogZWFz
eS10by10cmlnZ2VyIGxpdmUtbG9jayBzaXR1YXRpb25zLiBUaGUgd29yay1hcm91bmQgdG8gdGhp
cyBpcyB0byBub3QKLSAqIGFwcGx5IG1vZHVsbyBhcml0aG1ldGljIHRvIGVfZyBidXQgb25seSB0
byBkZWZlcnJhbCBsaXN0IGluZGV4aW5nLgotICovCi0jZGVmaW5lIENLX0VQT0NIX0dSQUNFIDNV
Ci0KLWVudW0gewotCUNLX0VQT0NIX1NUQVRFX1VTRUQgPSAwLAotCUNLX0VQT0NIX1NUQVRFX0ZS
RUUgPSAxCi19OwotCi1DS19TVEFDS19DT05UQUlORVIoc3RydWN0IGNrX2Vwb2NoX3JlY29yZCwg
cmVjb3JkX25leHQsCi0gICAgY2tfZXBvY2hfcmVjb3JkX2NvbnRhaW5lcikKLUNLX1NUQUNLX0NP
TlRBSU5FUihzdHJ1Y3QgY2tfZXBvY2hfZW50cnksIHN0YWNrX2VudHJ5LAotICAgIGNrX2Vwb2No
X2VudHJ5X2NvbnRhaW5lcikKLQotI2RlZmluZSBDS19FUE9DSF9TRU5TRV9NQVNLCShDS19FUE9D
SF9TRU5TRSAtIDEpCi0KLWJvb2wKLV9ja19lcG9jaF9kZWxyZWYoc3RydWN0IGNrX2Vwb2NoX3Jl
Y29yZCAqcmVjb3JkLAotICAgIHN0cnVjdCBja19lcG9jaF9zZWN0aW9uICpzZWN0aW9uKQotewot
CXN0cnVjdCBja19lcG9jaF9yZWYgKmN1cnJlbnQsICpvdGhlcjsKLQl1bnNpZ25lZCBpbnQgaSA9
IHNlY3Rpb24tPmJ1Y2tldDsKLQotCWN1cnJlbnQgPSAmcmVjb3JkLT5sb2NhbC5idWNrZXRbaV07
Ci0JY3VycmVudC0+Y291bnQtLTsKLQotCWlmIChjdXJyZW50LT5jb3VudCA+IDApCi0JCXJldHVy
biBmYWxzZTsKLQotCS8qCi0JICogSWYgdGhlIGN1cnJlbnQgYnVja2V0IG5vIGxvbmdlciBoYXMg
YW55IHJlZmVyZW5jZXMsIHRoZW4KLQkgKiBkZXRlcm1pbmUgd2hldGhlciB3ZSBoYXZlIGFscmVh
ZHkgdHJhbnNpdGlvbmVkIGludG8gYSBuZXdlcgotCSAqIGVwb2NoLiBJZiBzbywgdGhlbiBtYWtl
IHN1cmUgdG8gdXBkYXRlIG91ciBzaGFyZWQgc25hcHNob3QKLQkgKiB0byBhbGxvdyBmb3IgZm9y
d2FyZCBwcm9ncmVzcy4KLQkgKgotCSAqIElmIG5vIG90aGVyIGFjdGl2ZSBidWNrZXQgZXhpc3Rz
LCB0aGVuIHRoZSByZWNvcmQgd2lsbCBnbwotCSAqIGluYWN0aXZlIGluIG9yZGVyIHRvIGFsbG93
IGZvciBmb3J3YXJkIHByb2dyZXNzLgotCSAqLwotCW90aGVyID0gJnJlY29yZC0+bG9jYWwuYnVj
a2V0WyhpICsgMSkgJiBDS19FUE9DSF9TRU5TRV9NQVNLXTsKLQlpZiAob3RoZXItPmNvdW50ID4g
MCAmJgotCSAgICAoKGludCkoY3VycmVudC0+ZXBvY2ggLSBvdGhlci0+ZXBvY2gpIDwgMCkpIHsK
LQkJLyoKLQkJICogVGhlIG90aGVyIGVwb2NoIHZhbHVlIGlzIGFjdHVhbGx5IHRoZSBuZXdlc3Qs
Ci0JCSAqIHRyYW5zaXRpb24gdG8gaXQuCi0JCSAqLwotCQlja19wcl9zdG9yZV91aW50KCZyZWNv
cmQtPmVwb2NoLCBvdGhlci0+ZXBvY2gpOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi12b2lk
Ci1fY2tfZXBvY2hfYWRkcmVmKHN0cnVjdCBja19lcG9jaF9yZWNvcmQgKnJlY29yZCwKLSAgICBz
dHJ1Y3QgY2tfZXBvY2hfc2VjdGlvbiAqc2VjdGlvbikKLXsKLQlzdHJ1Y3QgY2tfZXBvY2ggKmds
b2JhbCA9IHJlY29yZC0+Z2xvYmFsOwotCXN0cnVjdCBja19lcG9jaF9yZWYgKnJlZjsKLQl1bnNp
Z25lZCBpbnQgZXBvY2gsIGk7Ci0KLQllcG9jaCA9IGNrX3ByX2xvYWRfdWludCgmZ2xvYmFsLT5l
cG9jaCk7Ci0JaSA9IGVwb2NoICYgQ0tfRVBPQ0hfU0VOU0VfTUFTSzsKLQlyZWYgPSAmcmVjb3Jk
LT5sb2NhbC5idWNrZXRbaV07Ci0KLQlpZiAocmVmLT5jb3VudCsrID09IDApIHsKLSNpZm5kZWYg
Q0tfTURfVFNPCi0JCXN0cnVjdCBja19lcG9jaF9yZWYgKnByZXZpb3VzOwotCi0JCS8qCi0JCSAq
IFRoZSBzeXN0ZW0gaGFzIGFscmVhZHkgdGlja2VkLiBJZiBhbm90aGVyIG5vbi16ZXJvIGJ1Y2tl
dAotCQkgKiBleGlzdHMsIG1ha2Ugc3VyZSB0byBvcmRlciBvdXIgb2JzZXJ2YXRpb25zIHdpdGgg
cmVzcGVjdAotCQkgKiB0byBpdC4gT3RoZXJ3aXNlLCBpdCBpcyBwb3NzaWJsZSB0byBhY3F1aXJl
IGEgcmVmZXJlbmNlCi0JCSAqIGZyb20gdGhlIHByZXZpb3VzIGVwb2NoIGdlbmVyYXRpb24uCi0J
CSAqCi0JCSAqIE9uIFRTTyBhcmNoaXRlY3R1cmVzLCB0aGUgbW9ub3RpY2l0eSBvZiB0aGUgZ2xv
YmFsIGNvdW50ZXIKLQkJICogYW5kIGxvYWQte3N0b3JlLCBsb2FkfSBvcmRlcmluZyBhcmUgc3Vm
ZmljaWVudCB0byBndWFyYW50ZWUKLQkJICogdGhpcyBvcmRlcmluZy4KLQkJICovCi0JCXByZXZp
b3VzID0gJnJlY29yZC0+bG9jYWwuYnVja2V0WyhpICsgMSkgJgotCQkgICAgQ0tfRVBPQ0hfU0VO
U0VfTUFTS107Ci0JCWlmIChwcmV2aW91cy0+Y291bnQgPiAwKQotCQkJY2tfcHJfZmVuY2VfYWNx
cmVsKCk7Ci0jZW5kaWYgLyogIUNLX01EX1RTTyAqLwotCi0JCS8qCi0JCSAqIElmIHRoaXMgaXMg
dGhpcyBpcyBhIG5ldyByZWZlcmVuY2UgaW50byB0aGUgY3VycmVudAotCQkgKiBidWNrZXQgdGhl
biBjYWNoZSB0aGUgYXNzb2NpYXRlZCBlcG9jaCB2YWx1ZS4KLQkJICovCi0JCXJlZi0+ZXBvY2gg
PSBlcG9jaDsKLQl9Ci0KLQlzZWN0aW9uLT5idWNrZXQgPSBpOwotCXJldHVybjsKLX0KLQotdm9p
ZAotY2tfZXBvY2hfaW5pdChzdHJ1Y3QgY2tfZXBvY2ggKmdsb2JhbCkKLXsKLQotCWNrX3N0YWNr
X2luaXQoJmdsb2JhbC0+cmVjb3Jkcyk7Ci0JZ2xvYmFsLT5lcG9jaCA9IDE7Ci0JZ2xvYmFsLT5u
X2ZyZWUgPSAwOwotCWNrX3ByX2ZlbmNlX3N0b3JlKCk7Ci0JcmV0dXJuOwotfQotCi1zdHJ1Y3Qg
Y2tfZXBvY2hfcmVjb3JkICoKLWNrX2Vwb2NoX3JlY3ljbGUoc3RydWN0IGNrX2Vwb2NoICpnbG9i
YWwsIHZvaWQgKmN0KQotewotCXN0cnVjdCBja19lcG9jaF9yZWNvcmQgKnJlY29yZDsKLQlja19z
dGFja19lbnRyeV90ICpjdXJzb3I7Ci0JdW5zaWduZWQgaW50IHN0YXRlOwotCi0JaWYgKGNrX3By
X2xvYWRfdWludCgmZ2xvYmFsLT5uX2ZyZWUpID09IDApCi0JCXJldHVybiBOVUxMOwotCi0JQ0tf
U1RBQ0tfRk9SRUFDSCgmZ2xvYmFsLT5yZWNvcmRzLCBjdXJzb3IpIHsKLQkJcmVjb3JkID0gY2tf
ZXBvY2hfcmVjb3JkX2NvbnRhaW5lcihjdXJzb3IpOwotCi0JCWlmIChja19wcl9sb2FkX3VpbnQo
JnJlY29yZC0+c3RhdGUpID09IENLX0VQT0NIX1NUQVRFX0ZSRUUpIHsKLQkJCS8qIFNlcmlhbGl6
ZSB3aXRoIHJlc3BlY3QgdG8gZGVmZXJyYWwgbGlzdCBjbGVhbi11cC4gKi8KLQkJCWNrX3ByX2Zl
bmNlX2xvYWQoKTsKLQkJCXN0YXRlID0gY2tfcHJfZmFzX3VpbnQoJnJlY29yZC0+c3RhdGUsCi0J
CQkgICAgQ0tfRVBPQ0hfU1RBVEVfVVNFRCk7Ci0JCQlpZiAoc3RhdGUgPT0gQ0tfRVBPQ0hfU1RB
VEVfRlJFRSkgewotCQkJCWNrX3ByX2RlY191aW50KCZnbG9iYWwtPm5fZnJlZSk7Ci0JCQkJY2tf
cHJfc3RvcmVfcHRyKCZyZWNvcmQtPmN0LCBjdCk7Ci0KLQkJCQkvKgotCQkJCSAqIFRoZSBjb250
ZXh0IHBvaW50ZXIgaXMgb3JkZXJlZCBieSBhCi0JCQkJICogc3Vic2VxdWVudCBwcm90ZWN0ZWQg
c2VjdGlvbi4KLQkJCQkgKi8KLQkJCQlyZXR1cm4gcmVjb3JkOwotCQkJfQotCQl9Ci0JfQotCi0J
cmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQKLWNrX2Vwb2NoX3JlZ2lzdGVyKHN0cnVjdCBja19lcG9j
aCAqZ2xvYmFsLCBzdHJ1Y3QgY2tfZXBvY2hfcmVjb3JkICpyZWNvcmQsCi0gICAgdm9pZCAqY3Qp
Ci17Ci0Jc2l6ZV90IGk7Ci0KLQlyZWNvcmQtPmdsb2JhbCA9IGdsb2JhbDsKLQlyZWNvcmQtPnN0
YXRlID0gQ0tfRVBPQ0hfU1RBVEVfVVNFRDsKLQlyZWNvcmQtPmFjdGl2ZSA9IDA7Ci0JcmVjb3Jk
LT5lcG9jaCA9IDA7Ci0JcmVjb3JkLT5uX2Rpc3BhdGNoID0gMDsKLQlyZWNvcmQtPm5fcGVhayA9
IDA7Ci0JcmVjb3JkLT5uX3BlbmRpbmcgPSAwOwotCXJlY29yZC0+Y3QgPSBjdDsKLQltZW1zZXQo
JnJlY29yZC0+bG9jYWwsIDAsIHNpemVvZiByZWNvcmQtPmxvY2FsKTsKLQotCWZvciAoaSA9IDA7
IGkgPCBDS19FUE9DSF9MRU5HVEg7IGkrKykKLQkJY2tfc3RhY2tfaW5pdCgmcmVjb3JkLT5wZW5k
aW5nW2ldKTsKLQotCWNrX3ByX2ZlbmNlX3N0b3JlKCk7Ci0JY2tfc3RhY2tfcHVzaF91cG1jKCZn
bG9iYWwtPnJlY29yZHMsICZyZWNvcmQtPnJlY29yZF9uZXh0KTsKLQlyZXR1cm47Ci19Ci0KLXZv
aWQKLWNrX2Vwb2NoX3VucmVnaXN0ZXIoc3RydWN0IGNrX2Vwb2NoX3JlY29yZCAqcmVjb3JkKQot
ewotCXN0cnVjdCBja19lcG9jaCAqZ2xvYmFsID0gcmVjb3JkLT5nbG9iYWw7Ci0Jc2l6ZV90IGk7
Ci0KLQlyZWNvcmQtPmFjdGl2ZSA9IDA7Ci0JcmVjb3JkLT5lcG9jaCA9IDA7Ci0JcmVjb3JkLT5u
X2Rpc3BhdGNoID0gMDsKLQlyZWNvcmQtPm5fcGVhayA9IDA7Ci0JcmVjb3JkLT5uX3BlbmRpbmcg
PSAwOwotCW1lbXNldCgmcmVjb3JkLT5sb2NhbCwgMCwgc2l6ZW9mIHJlY29yZC0+bG9jYWwpOwot
Ci0JZm9yIChpID0gMDsgaSA8IENLX0VQT0NIX0xFTkdUSDsgaSsrKQotCQlja19zdGFja19pbml0
KCZyZWNvcmQtPnBlbmRpbmdbaV0pOwotCi0JY2tfcHJfc3RvcmVfcHRyKCZyZWNvcmQtPmN0LCBO
VUxMKTsKLQlja19wcl9mZW5jZV9zdG9yZSgpOwotCWNrX3ByX3N0b3JlX3VpbnQoJnJlY29yZC0+
c3RhdGUsIENLX0VQT0NIX1NUQVRFX0ZSRUUpOwotCWNrX3ByX2luY191aW50KCZnbG9iYWwtPm5f
ZnJlZSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgc3RydWN0IGNrX2Vwb2NoX3JlY29yZCAqCi1j
a19lcG9jaF9zY2FuKHN0cnVjdCBja19lcG9jaCAqZ2xvYmFsLAotICAgIHN0cnVjdCBja19lcG9j
aF9yZWNvcmQgKmNyLAotICAgIHVuc2lnbmVkIGludCBlcG9jaCwKLSAgICBib29sICphZikKLXsK
LQlja19zdGFja19lbnRyeV90ICpjdXJzb3I7Ci0KLQlpZiAoY3IgPT0gTlVMTCkgewotCQljdXJz
b3IgPSBDS19TVEFDS19GSVJTVCgmZ2xvYmFsLT5yZWNvcmRzKTsKLQkJKmFmID0gZmFsc2U7Ci0J
fSBlbHNlIHsKLQkJY3Vyc29yID0gJmNyLT5yZWNvcmRfbmV4dDsKLQkJKmFmID0gdHJ1ZTsKLQl9
Ci0KLQl3aGlsZSAoY3Vyc29yICE9IE5VTEwpIHsKLQkJdW5zaWduZWQgaW50IHN0YXRlLCBhY3Rp
dmU7Ci0KLQkJY3IgPSBja19lcG9jaF9yZWNvcmRfY29udGFpbmVyKGN1cnNvcik7Ci0KLQkJc3Rh
dGUgPSBja19wcl9sb2FkX3VpbnQoJmNyLT5zdGF0ZSk7Ci0JCWlmIChzdGF0ZSAmIENLX0VQT0NI
X1NUQVRFX0ZSRUUpIHsKLQkJCWN1cnNvciA9IENLX1NUQUNLX05FWFQoY3Vyc29yKTsKLQkJCWNv
bnRpbnVlOwotCQl9Ci0KLQkJYWN0aXZlID0gY2tfcHJfbG9hZF91aW50KCZjci0+YWN0aXZlKTsK
LQkJKmFmIHw9IGFjdGl2ZTsKLQotCQlpZiAoYWN0aXZlICE9IDAgJiYgY2tfcHJfbG9hZF91aW50
KCZjci0+ZXBvY2gpICE9IGVwb2NoKQotCQkJcmV0dXJuIGNyOwotCi0JCWN1cnNvciA9IENLX1NU
QUNLX05FWFQoY3Vyc29yKTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQK
LWNrX2Vwb2NoX2Rpc3BhdGNoKHN0cnVjdCBja19lcG9jaF9yZWNvcmQgKnJlY29yZCwgdW5zaWdu
ZWQgaW50IGUpCi17Ci0JdW5zaWduZWQgaW50IGVwb2NoID0gZSAmIChDS19FUE9DSF9MRU5HVEgg
LSAxKTsKLQlja19zdGFja19lbnRyeV90ICpoZWFkLCAqbmV4dCwgKmN1cnNvcjsKLQl1bnNpZ25l
ZCBpbnQgbl9wZW5kaW5nLCBuX3BlYWs7Ci0JdW5zaWduZWQgaW50IGkgPSAwOwotCi0JaGVhZCA9
IGNrX3N0YWNrX2JhdGNoX3BvcF91cG1jKCZyZWNvcmQtPnBlbmRpbmdbZXBvY2hdKTsKLQlmb3Ig
KGN1cnNvciA9IGhlYWQ7IGN1cnNvciAhPSBOVUxMOyBjdXJzb3IgPSBuZXh0KSB7Ci0JCXN0cnVj
dCBja19lcG9jaF9lbnRyeSAqZW50cnkgPQotCQkgICAgY2tfZXBvY2hfZW50cnlfY29udGFpbmVy
KGN1cnNvcik7Ci0KLQkJbmV4dCA9IENLX1NUQUNLX05FWFQoY3Vyc29yKTsKLQkJZW50cnktPmZ1
bmN0aW9uKGVudHJ5KTsKLQkJaSsrOwotCX0KLQotCW5fcGVhayA9IGNrX3ByX2xvYWRfdWludCgm
cmVjb3JkLT5uX3BlYWspOwotCW5fcGVuZGluZyA9IGNrX3ByX2xvYWRfdWludCgmcmVjb3JkLT5u
X3BlbmRpbmcpOwotCi0JLyogV2UgZG9uJ3QgcmVxdWlyZSBhY2N1cmFjeSBhcm91bmQgcGVhayBj
YWxjdWxhdGlvbi4gKi8KLQlpZiAobl9wZW5kaW5nID4gbl9wZWFrKQotCQlja19wcl9zdG9yZV91
aW50KCZyZWNvcmQtPm5fcGVhaywgbl9wZWFrKTsKLQotCWlmIChpID4gMCkgewotCQlja19wcl9h
ZGRfdWludCgmcmVjb3JkLT5uX2Rpc3BhdGNoLCBpKTsKLQkJY2tfcHJfc3ViX3VpbnQoJnJlY29y
ZC0+bl9wZW5kaW5nLCBpKTsKLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBSZWNsYWltIGFs
bCBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCBhIHJlY29yZC4KLSAqLwotdm9pZAotY2tfZXBvY2hf
cmVjbGFpbShzdHJ1Y3QgY2tfZXBvY2hfcmVjb3JkICpyZWNvcmQpCi17Ci0JdW5zaWduZWQgaW50
IGVwb2NoOwotCi0JZm9yIChlcG9jaCA9IDA7IGVwb2NoIDwgQ0tfRVBPQ0hfTEVOR1RIOyBlcG9j
aCsrKQotCQlja19lcG9jaF9kaXNwYXRjaChyZWNvcmQsIGVwb2NoKTsKLQotCXJldHVybjsKLX0K
LQotQ0tfQ0NfRk9SQ0VfSU5MSU5FIHN0YXRpYyB2b2lkCi1lcG9jaF9ibG9jayhzdHJ1Y3QgY2tf
ZXBvY2ggKmdsb2JhbCwgc3RydWN0IGNrX2Vwb2NoX3JlY29yZCAqY3IsCi0gICAgY2tfZXBvY2hf
d2FpdF9jYl90ICpjYiwgdm9pZCAqY3QpCi17Ci0KLQlpZiAoY2IgIT0gTlVMTCkKLQkJY2IoZ2xv
YmFsLCBjciwgY3QpOwotCi0JcmV0dXJuOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBtdXN0
IG5vdCBiZSBjYWxsZWQgd2l0aC1pbiByZWFkIHNlY3Rpb24uCi0gKi8KLXZvaWQKLWNrX2Vwb2No
X3N5bmNocm9uaXplX3dhaXQoc3RydWN0IGNrX2Vwb2NoICpnbG9iYWwsCi0gICAgY2tfZXBvY2hf
d2FpdF9jYl90ICpjYiwgdm9pZCAqY3QpCi17Ci0Jc3RydWN0IGNrX2Vwb2NoX3JlY29yZCAqY3I7
Ci0JdW5zaWduZWQgaW50IGRlbHRhLCBlcG9jaCwgZ29hbCwgaTsKLQlib29sIGFjdGl2ZTsKLQot
CWNrX3ByX2ZlbmNlX21lbW9yeSgpOwotCi0JLyoKLQkgKiBUaGUgb2JzZXJ2YXRpb24gb2YgdGhl
IGdsb2JhbCBlcG9jaCBtdXN0IGJlIG9yZGVyZWQgd2l0aCByZXNwZWN0IHRvCi0JICogYWxsIHBy
aW9yIG9wZXJhdGlvbnMuIFRoZSByZS1vcmRlcmluZyBvZiBsb2FkcyBpcyBwZXJtaXR0ZWQgZ2l2
ZW4KLQkgKiBtb25vdGljaXR5IG9mIGdsb2JhbCBlcG9jaCBjb3VudGVyLgotCSAqCi0JICogSWYg
VUlOVF9NQVggY29uY3VycmVudCBtdXRhdGlvbnMgd2VyZSB0byBvY2N1ciB0aGVuIGl0IGlzIHBv
c3NpYmxlCi0JICogdG8gZW5jb3VudGVyIGFuIEFCQS1pc3N1ZS4gSWYgdGhpcyBpcyBhIGNvbmNl
cm4sIGNvbnNpZGVyIHR1bmluZwotCSAqIHdyaXRlLXNpZGUgY29uY3VycmVuY3kuCi0JICovCi0J
ZGVsdGEgPSBlcG9jaCA9IGNrX3ByX2xvYWRfdWludCgmZ2xvYmFsLT5lcG9jaCk7Ci0JZ29hbCA9
IGVwb2NoICsgQ0tfRVBPQ0hfR1JBQ0U7Ci0KLQlmb3IgKGkgPSAwLCBjciA9IE5VTEw7IGkgPCBD
S19FUE9DSF9HUkFDRSAtIDE7IGNyID0gTlVMTCwgaSsrKSB7Ci0JCWJvb2wgcjsKLQotCQkvKgot
CQkgKiBEZXRlcm1pbmUgd2hldGhlciBhbGwgdGhyZWFkcyBoYXZlIG9ic2VydmVkIHRoZSBjdXJy
ZW50Ci0JCSAqIGVwb2NoIHdpdGggcmVzcGVjdCB0byB0aGUgdXBkYXRlcyBvbiBpbnZvY2F0aW9u
LgotCQkgKi8KLQkJd2hpbGUgKGNyID0gY2tfZXBvY2hfc2NhbihnbG9iYWwsIGNyLCBkZWx0YSwg
JmFjdGl2ZSksCi0JCSAgICBjciAhPSBOVUxMKSB7Ci0JCQl1bnNpZ25lZCBpbnQgZV9kOwotCi0J
CQlja19wcl9zdGFsbCgpOwotCi0JCQkvKgotCQkJICogQW5vdGhlciB3cml0ZXIgbWF5IGhhdmUg
YWxyZWFkeSBvYnNlcnZlZCBhIGdyYWNlCi0JCQkgKiBwZXJpb2QuCi0JCQkgKi8KLQkJCWVfZCA9
IGNrX3ByX2xvYWRfdWludCgmZ2xvYmFsLT5lcG9jaCk7Ci0JCQlpZiAoZV9kID09IGRlbHRhKSB7
Ci0JCQkJZXBvY2hfYmxvY2soZ2xvYmFsLCBjciwgY2IsIGN0KTsKLQkJCQljb250aW51ZTsKLQkJ
CX0KLQotCQkJLyoKLQkJCSAqIElmIHRoZSBlcG9jaCBoYXMgYmVlbiB1cGRhdGVkLCB3ZSBtYXkg
aGF2ZSBhbHJlYWR5Ci0JCQkgKiBtZXQgb3VyIGdvYWwuCi0JCQkgKi8KLQkJCWRlbHRhID0gZV9k
OwotCQkJaWYgKChnb2FsID4gZXBvY2gpICYgKGRlbHRhID49IGdvYWwpKQotCQkJCWdvdG8gbGVh
dmU7Ci0KLQkJCWVwb2NoX2Jsb2NrKGdsb2JhbCwgY3IsIGNiLCBjdCk7Ci0KLQkJCS8qCi0JCQkg
KiBJZiB0aGUgZXBvY2ggaGFzIGJlZW4gdXBkYXRlZCwgdGhlbiBhIGdyYWNlIHBlcmlvZAotCQkJ
ICogcmVxdWlyZXMgdGhhdCBhbGwgdGhyZWFkcyBhcmUgb2JzZXJ2ZWQgaWRsZSBhdCB0aGUKLQkJ
CSAqIHNhbWUgZXBvY2guCi0JCQkgKi8KLQkJCWNyID0gTlVMTDsKLQkJfQotCi0JCS8qCi0JCSAq
IElmIHdlIGhhdmUgb2JzZXJ2ZWQgYWxsIHRocmVhZHMgYXMgaW5hY3RpdmUsIHRoZW4gd2UgYXNz
dW1lCi0JCSAqIHdlIGFyZSBhdCBhIGdyYWNlIHBlcmlvZC4KLQkJICovCi0JCWlmIChhY3RpdmUg
PT0gZmFsc2UpCi0JCQlicmVhazsKLQotCQkvKgotCQkgKiBJbmNyZW1lbnQgY3VycmVudCBlcG9j
aC4gQ0FTIHNlbWFudGljcyBhcmUgdXNlZCB0byBlbGltaW5hdGUKLQkJICogaW5jcmVtZW50IG9w
ZXJhdGlvbnMgZm9yIHN5bmNocm9uaXphdGlvbiB0aGF0IG9jY3VycyBmb3IgdGhlCi0JCSAqIHNh
bWUgZ2xvYmFsIGVwb2NoIHZhbHVlIHNuYXBzaG90LgotCQkgKgotCQkgKiBJZiB3ZSBjYW4gZ3Vh
cmFudGVlIHRoZXJlIHdpbGwgb25seSBiZSBvbmUgYWN0aXZlIGJhcnJpZXIgb3IKLQkJICogZXBv
Y2ggdGljayBhdCBhIGdpdmVuIHRpbWUsIHRoZW4gaXQgaXMgc3VmZmljaWVudCB0byB1c2UgYW4K
LQkJICogaW5jcmVtZW50IG9wZXJhdGlvbi4gSW4gYSBtdWx0aS1iYXJyaWVyIHdvcmtsb2FkLCBo
b3dldmVyLAotCQkgKiBpdCBpcyBwb3NzaWJsZSB0byBvdmVyZmxvdyB0aGUgZXBvY2ggdmFsdWUg
aWYgd2UgYXBwbHkKLQkJICogbW9kdWxvLTMgYXJpdGhtZXRpYy4KLQkJICovCi0JCXIgPSBja19w
cl9jYXNfdWludF92YWx1ZSgmZ2xvYmFsLT5lcG9jaCwgZGVsdGEsIGRlbHRhICsgMSwKLQkJICAg
ICZkZWx0YSk7Ci0KLQkJLyogT3JkZXIgc3Vic2VxdWVudCB0aHJlYWQgYWN0aXZlIGNoZWNrcy4g
Ki8KLQkJY2tfcHJfZmVuY2VfYXRvbWljX2xvYWQoKTsKLQotCQkvKgotCQkgKiBJZiBDQVMgaGFz
IHN1Y2NlZWRlZCwgdGhlbiBzZXQgZGVsdGEgdG8gbGF0ZXN0IHNuYXBzaG90LgotCQkgKiBPdGhl
cndpc2UsIHdlIGhhdmUganVzdCBhY3F1aXJlZCBsYXRlc3Qgc25hcHNob3QuCi0JCSAqLwotCQlk
ZWx0YSA9IGRlbHRhICsgcjsKLQl9Ci0KLQkvKgotCSAqIEEgbWFqb3JpdHkgb2YgdXNlLWNhc2Vz
IHdpbGwgbm90IHJlcXVpcmUgZnVsbCBiYXJyaWVyIHNlbWFudGljcy4KLQkgKiBIb3dldmVyLCBp
ZiBub24tdGVtcG9yYWwgaW5zdHJ1Y3Rpb25zIGFyZSB1c2VkLCBmdWxsIGJhcnJpZXIKLQkgKiBz
ZW1hbnRpY3MgYXJlIG5lY2Vzc2FyeS4KLQkgKi8KLWxlYXZlOgotCWNrX3ByX2ZlbmNlX21lbW9y
eSgpOwotCXJldHVybjsKLX0KLQotdm9pZAotY2tfZXBvY2hfc3luY2hyb25pemUoc3RydWN0IGNr
X2Vwb2NoX3JlY29yZCAqcmVjb3JkKQotewotCi0JY2tfZXBvY2hfc3luY2hyb25pemVfd2FpdChy
ZWNvcmQtPmdsb2JhbCwgTlVMTCwgTlVMTCk7Ci0JcmV0dXJuOwotfQotCi12b2lkCi1ja19lcG9j
aF9iYXJyaWVyKHN0cnVjdCBja19lcG9jaF9yZWNvcmQgKnJlY29yZCkKLXsKLQotCWNrX2Vwb2No
X3N5bmNocm9uaXplKHJlY29yZCk7Ci0JY2tfZXBvY2hfcmVjbGFpbShyZWNvcmQpOwotCXJldHVy
bjsKLX0KLQotdm9pZAotY2tfZXBvY2hfYmFycmllcl93YWl0KHN0cnVjdCBja19lcG9jaF9yZWNv
cmQgKnJlY29yZCwgY2tfZXBvY2hfd2FpdF9jYl90ICpjYiwKLSAgICB2b2lkICpjdCkKLXsKLQot
CWNrX2Vwb2NoX3N5bmNocm9uaXplX3dhaXQocmVjb3JkLT5nbG9iYWwsIGNiLCBjdCk7Ci0JY2tf
ZXBvY2hfcmVjbGFpbShyZWNvcmQpOwotCXJldHVybjsKLX0KLQotLyoKLSAqIEl0IG1heSBiZSB3
b3J0aCBpdCB0byBhY3R1YWxseSBhcHBseSB0aGVzZSBkZWZlcnJhbCBzZW1hbnRpY3MgdG8gYW4g
ZXBvY2gKLSAqIHRoYXQgd2FzIG9ic2VydmVkIGF0IGNrX2Vwb2NoX2NhbGwgdGltZS4gVGhlIHBy
b2JsZW0gaXMgdGhhdCB0aGUgbGF0dGVyCi0gKiB3b3VsZCByZXF1aXJlIGEgZnVsbCBmZW5jZS4K
LSAqCi0gKiBja19lcG9jaF9jYWxsIHdpbGwgZGlzcGF0Y2ggdG8gdGhlIGxhdGVzdCBlcG9jaCBz
bmFwc2hvdCB0aGF0IHdhcyBvYnNlcnZlZC4KLSAqIFRoZXJlIGFyZSBjYXNlcyB3aGVyZSBpdCB3
aWxsIGZhaWwgdG8gcmVjbGFpbSBhcyBlYXJseSBhcyBpdCBjb3VsZC4gSWYgdGhpcwotICogYmVj
b21lcyBhIHByb2JsZW0sIHdlIGNvdWxkIGFjdHVhbGx5IHVzZSBhIGhlYXAgZm9yIGVwb2NoIGJ1
Y2tldHMgYnV0IHRoYXQKLSAqIGlzIGZhciBmcm9tIGlkZWFsIHRvby4KLSAqLwotYm9vbAotY2tf
ZXBvY2hfcG9sbChzdHJ1Y3QgY2tfZXBvY2hfcmVjb3JkICpyZWNvcmQpCi17Ci0JYm9vbCBhY3Rp
dmU7Ci0JdW5zaWduZWQgaW50IGVwb2NoOwotCXN0cnVjdCBja19lcG9jaF9yZWNvcmQgKmNyID0g
TlVMTDsKLQlzdHJ1Y3QgY2tfZXBvY2ggKmdsb2JhbCA9IHJlY29yZC0+Z2xvYmFsOwotCi0JZXBv
Y2ggPSBja19wcl9sb2FkX3VpbnQoJmdsb2JhbC0+ZXBvY2gpOwotCi0JLyogU2VyaWFsaXplIGVw
b2NoIHNuYXBzaG90cyB3aXRoIHJlc3BlY3QgdG8gZ2xvYmFsIGVwb2NoLiAqLwotCWNrX3ByX2Zl
bmNlX21lbW9yeSgpOwotCWNyID0gY2tfZXBvY2hfc2NhbihnbG9iYWwsIGNyLCBlcG9jaCwgJmFj
dGl2ZSk7Ci0JaWYgKGNyICE9IE5VTEwpIHsKLQkJcmVjb3JkLT5lcG9jaCA9IGVwb2NoOwotCQly
ZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyogV2UgYXJlIGF0IGEgZ3JhY2UgcGVyaW9kIGlmIGFsbCB0
aHJlYWRzIGFyZSBpbmFjdGl2ZS4gKi8KLQlpZiAoYWN0aXZlID09IGZhbHNlKSB7Ci0JCXJlY29y
ZC0+ZXBvY2ggPSBlcG9jaDsKLQkJZm9yIChlcG9jaCA9IDA7IGVwb2NoIDwgQ0tfRVBPQ0hfTEVO
R1RIOyBlcG9jaCsrKQotCQkJY2tfZXBvY2hfZGlzcGF0Y2gocmVjb3JkLCBlcG9jaCk7Ci0KLQkJ
cmV0dXJuIHRydWU7Ci0JfQotCi0JLyogSWYgYW4gYWN0aXZlIHRocmVhZCBleGlzdHMsIHJlbHkg
b24gZXBvY2ggb2JzZXJ2YXRpb24uICovCi0JKHZvaWQpY2tfcHJfY2FzX3VpbnQoJmdsb2JhbC0+
ZXBvY2gsIGVwb2NoLCBlcG9jaCArIDEpOwotCi0JY2tfZXBvY2hfZGlzcGF0Y2gocmVjb3JkLCBl
cG9jaCArIDEpOwotCXJldHVybiB0cnVlOwotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvY2svc3JjL2NrX2hwLmMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9jay9zcmMvY2tfaHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJkZjky
ZTg1ZjI1N2NkOTQwY2FjYTczZGQ4OGNmOGM1NDUzMWEyZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9zcmMvY2tfaHAuYworKysgL2Rldi9udWxsCkBAIC0xLDMyMyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IDIwMTAtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0g
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vKgotICogKGMpIENvcHlyaWdodCAyMDA4LCBJQk0gQ29ycG9yYXRpb24uCi0gKiBMaWNl
bnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2Ui
KTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoK
LSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3Jp
dGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry
aWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0
aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9u
cyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qCi0gKiBU
aGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGhhemFyZCBwb2ludGVycyBhcyBkZXRhaWxlZCBp
bjoKLSAqICAgaHR0cDovL3d3dy5yZXNlYXJjaC5pYm0uY29tL3Blb3BsZS9tL21pY2hhZWwvaWVl
ZXRwZHMtMjAwNC5wZGYKLSAqCi0gKiBUaGlzIEFQSSBwcm92aWRlcyBhIHB1Ymxpc2hpbmcgbWVj
aGFuaXNtIHRoYXQgZGVmZXJzIGRlc3RydWN0aW9uIG9mCi0gKiBoYXphcmQgcG9pbnRlcnMgdW50
aWwgaXQgaXMgc2FmZSB0byBkbyBzby4gUHJldmVudGluZyBhcmJpdHJhcnkgcmUtdXNlCi0gKiBw
cm90ZWN0cyBhZ2FpbnN0IHRoZSBBQkEgcHJvYmxlbSBhbmQgcHJvdmlkZXMgc2FmZSBtZW1vcnkg
cmVjbGFtYXRpb24uCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIGRlcml2ZWQgZnJvbSB0aGUg
SGF6YXJkIFBvaW50ZXJzIGltcGxlbWVudGF0aW9uCi0gKiBmcm9tIHRoZSBBbWlubyBDQkJTIHBy
b2plY3QuIEl0IGhhcyBiZWVuIGhlYXZpbHkgbW9kaWZpZWQgZm9yIENvbmN1cnJlbmN5Ci0gKiBL
aXQuCi0gKi8KLQotI2luY2x1ZGUgPGNrX2JhY2tvZmYuaD4KLSNpbmNsdWRlIDxja19jYy5oPgot
I2luY2x1ZGUgPGNrX2hwLmg+Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19zdGFj
ay5oPgotI2luY2x1ZGUgPGNrX3N0ZGJvb2wuaD4KLSNpbmNsdWRlIDxja19zdGRkZWYuaD4KLSNp
bmNsdWRlIDxja19zdGRsaWIuaD4KLSNpbmNsdWRlIDxja19zdHJpbmcuaD4KLQotQ0tfU1RBQ0tf
Q09OVEFJTkVSKHN0cnVjdCBja19ocF9yZWNvcmQsIGdsb2JhbF9lbnRyeSwgY2tfaHBfcmVjb3Jk
X2NvbnRhaW5lcikKLUNLX1NUQUNLX0NPTlRBSU5FUihzdHJ1Y3QgY2tfaHBfaGF6YXJkLCBwZW5k
aW5nX2VudHJ5LCBja19ocF9oYXphcmRfY29udGFpbmVyKQotCi12b2lkCi1ja19ocF9pbml0KHN0
cnVjdCBja19ocCAqc3RhdGUsCi0JICAgdW5zaWduZWQgaW50IGRlZ3JlZSwKLQkgICB1bnNpZ25l
ZCBpbnQgdGhyZXNob2xkLAotCSAgIGNrX2hwX2Rlc3RydWN0b3JfdCBkZXN0cm95KQotewotCi0J
c3RhdGUtPnRocmVzaG9sZCA9IHRocmVzaG9sZDsKLQlzdGF0ZS0+ZGVncmVlID0gZGVncmVlOwot
CXN0YXRlLT5kZXN0cm95ID0gZGVzdHJveTsKLQlzdGF0ZS0+bl9zdWJzY3JpYmVycyA9IDA7Ci0J
c3RhdGUtPm5fZnJlZSA9IDA7Ci0JY2tfc3RhY2tfaW5pdCgmc3RhdGUtPnN1YnNjcmliZXJzKTsK
LQlja19wcl9mZW5jZV9zdG9yZSgpOwotCi0JcmV0dXJuOwotfQotCi12b2lkCi1ja19ocF9zZXRf
dGhyZXNob2xkKHN0cnVjdCBja19ocCAqc3RhdGUsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQpCi17
Ci0KLQlja19wcl9zdG9yZV91aW50KCZzdGF0ZS0+dGhyZXNob2xkLCB0aHJlc2hvbGQpOwotCXJl
dHVybjsKLX0KLQotc3RydWN0IGNrX2hwX3JlY29yZCAqCi1ja19ocF9yZWN5Y2xlKHN0cnVjdCBj
a19ocCAqZ2xvYmFsKQotewotCXN0cnVjdCBja19ocF9yZWNvcmQgKnJlY29yZDsKLQlja19zdGFj
a19lbnRyeV90ICplbnRyeTsKLQlpbnQgc3RhdGU7Ci0KLQlpZiAoY2tfcHJfbG9hZF91aW50KCZn
bG9iYWwtPm5fZnJlZSkgPT0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlDS19TVEFDS19GT1JFQUNI
KCZnbG9iYWwtPnN1YnNjcmliZXJzLCBlbnRyeSkgewotCQlyZWNvcmQgPSBja19ocF9yZWNvcmRf
Y29udGFpbmVyKGVudHJ5KTsKLQotCQlpZiAoY2tfcHJfbG9hZF9pbnQoJnJlY29yZC0+c3RhdGUp
ID09IENLX0hQX0ZSRUUpIHsKLQkJCWNrX3ByX2ZlbmNlX2xvYWQoKTsKLQkJCXN0YXRlID0gY2tf
cHJfZmFzX2ludCgmcmVjb3JkLT5zdGF0ZSwgQ0tfSFBfVVNFRCk7Ci0JCQlpZiAoc3RhdGUgPT0g
Q0tfSFBfRlJFRSkgewotCQkJCWNrX3ByX2RlY191aW50KCZnbG9iYWwtPm5fZnJlZSk7Ci0JCQkJ
cmV0dXJuIHJlY29yZDsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi12b2lk
Ci1ja19ocF91bnJlZ2lzdGVyKHN0cnVjdCBja19ocF9yZWNvcmQgKmVudHJ5KQotewotCi0JZW50
cnktPm5fcGVuZGluZyA9IDA7Ci0JZW50cnktPm5fcGVhayA9IDA7Ci0JZW50cnktPm5fcmVjbGFt
YXRpb25zID0gMDsKLQlja19zdGFja19pbml0KCZlbnRyeS0+cGVuZGluZyk7Ci0JY2tfcHJfZmVu
Y2Vfc3RvcmUoKTsKLQlja19wcl9zdG9yZV9pbnQoJmVudHJ5LT5zdGF0ZSwgQ0tfSFBfRlJFRSk7
Ci0JY2tfcHJfaW5jX3VpbnQoJmVudHJ5LT5nbG9iYWwtPm5fZnJlZSk7Ci0JcmV0dXJuOwotfQot
Ci12b2lkCi1ja19ocF9yZWdpc3RlcihzdHJ1Y3QgY2tfaHAgKnN0YXRlLAotICAgIHN0cnVjdCBj
a19ocF9yZWNvcmQgKmVudHJ5LAotICAgIHZvaWQgKipwb2ludGVycykKLXsKLQotCWVudHJ5LT5z
dGF0ZSA9IENLX0hQX1VTRUQ7Ci0JZW50cnktPmdsb2JhbCA9IHN0YXRlOwotCWVudHJ5LT5wb2lu
dGVycyA9IHBvaW50ZXJzOwotCWVudHJ5LT5uX3BlbmRpbmcgPSAwOwotCWVudHJ5LT5uX3BlYWsg
PSAwOwotCWVudHJ5LT5uX3JlY2xhbWF0aW9ucyA9IDA7Ci0JbWVtc2V0KHBvaW50ZXJzLCAwLCBz
dGF0ZS0+ZGVncmVlICogc2l6ZW9mKHZvaWQgKikpOwotCWNrX3N0YWNrX2luaXQoJmVudHJ5LT5w
ZW5kaW5nKTsKLQlja19wcl9mZW5jZV9zdG9yZSgpOwotCWNrX3N0YWNrX3B1c2hfdXBtYygmc3Rh
dGUtPnN1YnNjcmliZXJzLCAmZW50cnktPmdsb2JhbF9lbnRyeSk7Ci0JY2tfcHJfaW5jX3VpbnQo
JnN0YXRlLT5uX3N1YnNjcmliZXJzKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQKLWhhemFy
ZF9jb21wYXJlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCi17Ci0Jdm9pZCAqIGNvbnN0
ICp4OwotCXZvaWQgKiBjb25zdCAqeTsKLQotCXggPSBhOwotCXkgPSBiOwotCXJldHVybiAoKCp4
ID4gKnkpIC0gKCp4IDwgKnkpKTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyBib29sCi1ja19o
cF9tZW1iZXJfc2Nhbihja19zdGFja19lbnRyeV90ICplbnRyeSwgdW5zaWduZWQgaW50IGRlZ3Jl
ZSwgdm9pZCAqcG9pbnRlcikKLXsKLQlzdHJ1Y3QgY2tfaHBfcmVjb3JkICpyZWNvcmQ7Ci0JdW5z
aWduZWQgaW50IGk7Ci0Jdm9pZCAqaGF6YXJkOwotCi0JZG8gewotCQlyZWNvcmQgPSBja19ocF9y
ZWNvcmRfY29udGFpbmVyKGVudHJ5KTsKLQkJaWYgKGNrX3ByX2xvYWRfaW50KCZyZWNvcmQtPnN0
YXRlKSA9PSBDS19IUF9GUkVFKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGNrX3ByX2xvYWRfcHRy
KCZyZWNvcmQtPnBvaW50ZXJzKSA9PSBOVUxMKQotCQkJY29udGludWU7Ci0KLQkJZm9yIChpID0g
MDsgaSA8IGRlZ3JlZTsgaSsrKSB7Ci0JCQloYXphcmQgPSBja19wcl9sb2FkX3B0cigmcmVjb3Jk
LT5wb2ludGVyc1tpXSk7Ci0JCQlpZiAoaGF6YXJkID09IHBvaW50ZXIpCi0JCQkJcmV0dXJuICh0
cnVlKTsKLQkJfQotCX0gd2hpbGUgKChlbnRyeSA9IENLX1NUQUNLX05FWFQoZW50cnkpKSAhPSBO
VUxMKTsKLQotCXJldHVybiAoZmFsc2UpOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIHZvaWQg
KgotY2tfaHBfbWVtYmVyX2NhY2hlKHN0cnVjdCBja19ocCAqZ2xvYmFsLCB2b2lkICoqY2FjaGUs
IHVuc2lnbmVkIGludCAqbl9oYXphcmRzKQotewotCXN0cnVjdCBja19ocF9yZWNvcmQgKnJlY29y
ZDsKLQlja19zdGFja19lbnRyeV90ICplbnRyeTsKLQl1bnNpZ25lZCBpbnQgaGF6YXJkcyA9IDA7
Ci0JdW5zaWduZWQgaW50IGk7Ci0Jdm9pZCAqcG9pbnRlcjsKLQotCUNLX1NUQUNLX0ZPUkVBQ0go
Jmdsb2JhbC0+c3Vic2NyaWJlcnMsIGVudHJ5KSB7Ci0JCXJlY29yZCA9IGNrX2hwX3JlY29yZF9j
b250YWluZXIoZW50cnkpOwotCQlpZiAoY2tfcHJfbG9hZF9pbnQoJnJlY29yZC0+c3RhdGUpID09
IENLX0hQX0ZSRUUpCi0JCQljb250aW51ZTsKLQotCQlpZiAoY2tfcHJfbG9hZF9wdHIoJnJlY29y
ZC0+cG9pbnRlcnMpID09IE5VTEwpCi0JCQljb250aW51ZTsKLQotCQlmb3IgKGkgPSAwOyBpIDwg
Z2xvYmFsLT5kZWdyZWU7IGkrKykgewotCQkJaWYgKGhhemFyZHMgPiBDS19IUF9DQUNIRSkKLQkJ
CQlicmVhazsKLQotCQkJcG9pbnRlciA9IGNrX3ByX2xvYWRfcHRyKCZyZWNvcmQtPnBvaW50ZXJz
W2ldKTsKLQkJCWlmIChwb2ludGVyICE9IE5VTEwpCi0JCQkJY2FjaGVbaGF6YXJkcysrXSA9IHBv
aW50ZXI7Ci0JCX0KLQl9Ci0KLQkqbl9oYXphcmRzID0gaGF6YXJkczsKLQlyZXR1cm4gKGVudHJ5
KTsKLX0KLQotdm9pZAotY2tfaHBfcmVjbGFpbShzdHJ1Y3QgY2tfaHBfcmVjb3JkICp0aHJlYWQp
Ci17Ci0Jc3RydWN0IGNrX2hwX2hhemFyZCAqaGF6YXJkOwotCXN0cnVjdCBja19ocCAqZ2xvYmFs
ID0gdGhyZWFkLT5nbG9iYWw7Ci0JdW5zaWduZWQgaW50IG5faGF6YXJkczsKLQl2b2lkICoqY2Fj
aGUsICptYXJrZXIsICptYXRjaDsKLQlja19zdGFja19lbnRyeV90ICpwcmV2aW91cywgKmVudHJ5
LCAqbmV4dDsKLQotCS8qIFN0b3JlIGFzIG1hbnkgZW50cmllcyBhcyBwb3NzaWJsZSBpbiBsb2Nh
bCBhcnJheS4gKi8KLQljYWNoZSA9IHRocmVhZC0+Y2FjaGU7Ci0JbWFya2VyID0gY2tfaHBfbWVt
YmVyX2NhY2hlKGdsb2JhbCwgY2FjaGUsICZuX2hhemFyZHMpOwotCi0JLyoKLQkgKiBJbiB0aGVv
cnksIHRoZXJlIGlzIGFuIG4gc3VjaCB0aGF0IChuICogKGxvZyBuKSAqKiAyKSA8IG5wLgotCSAq
LwotCXFzb3J0KGNhY2hlLCBuX2hhemFyZHMsIHNpemVvZih2b2lkICopLCBoYXphcmRfY29tcGFy
ZSk7Ci0KLQlwcmV2aW91cyA9IE5VTEw7Ci0JQ0tfU1RBQ0tfRk9SRUFDSF9TQUZFKCZ0aHJlYWQt
PnBlbmRpbmcsIGVudHJ5LCBuZXh0KSB7Ci0JCWhhemFyZCA9IGNrX2hwX2hhemFyZF9jb250YWlu
ZXIoZW50cnkpOwotCQltYXRjaCA9IGJzZWFyY2goJmhhemFyZC0+cG9pbnRlciwgY2FjaGUsIG5f
aGF6YXJkcywKLQkJCQkgIHNpemVvZih2b2lkICopLCBoYXphcmRfY29tcGFyZSk7Ci0JCWlmICht
YXRjaCAhPSBOVUxMKSB7Ci0JCQlwcmV2aW91cyA9IGVudHJ5OwotCQkJY29udGludWU7Ci0JCX0K
LQotCQlpZiAobWFya2VyICE9IE5VTEwgJiYKLQkJICAgIGNrX2hwX21lbWJlcl9zY2FuKG1hcmtl
ciwgZ2xvYmFsLT5kZWdyZWUsIGhhemFyZC0+cG9pbnRlcikpIHsKLQkJCXByZXZpb3VzID0gZW50
cnk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXRocmVhZC0+bl9wZW5kaW5nIC09IDE7Ci0KLQkJ
LyogUmVtb3ZlIGZyb20gdGhlIHBlbmRpbmcgc3RhY2suICovCi0JCWlmIChwcmV2aW91cykKLQkJ
CUNLX1NUQUNLX05FWFQocHJldmlvdXMpID0gQ0tfU1RBQ0tfTkVYVChlbnRyeSk7Ci0JCWVsc2UK
LQkJCUNLX1NUQUNLX0ZJUlNUKCZ0aHJlYWQtPnBlbmRpbmcpID0gQ0tfU1RBQ0tfTkVYVChlbnRy
eSk7Ci0KLQkJLyogVGhlIGVudHJ5IGlzIG5vdyBzYWZlIHRvIGRlc3Ryb3kuICovCi0JCWdsb2Jh
bC0+ZGVzdHJveShoYXphcmQtPmRhdGEpOwotCQl0aHJlYWQtPm5fcmVjbGFtYXRpb25zKys7Ci0J
fQotCi0JcmV0dXJuOwotfQotCi12b2lkCi1ja19ocF9yZXRpcmUoc3RydWN0IGNrX2hwX3JlY29y
ZCAqdGhyZWFkLAotICAgIHN0cnVjdCBja19ocF9oYXphcmQgKmhhemFyZCwKLSAgICB2b2lkICpk
YXRhLAotICAgIHZvaWQgKnBvaW50ZXIpCi17Ci0KLQlja19wcl9zdG9yZV9wdHIoJmhhemFyZC0+
cG9pbnRlciwgcG9pbnRlcik7Ci0JY2tfcHJfc3RvcmVfcHRyKCZoYXphcmQtPmRhdGEsIGRhdGEp
OwotCWNrX3N0YWNrX3B1c2hfc3BuYygmdGhyZWFkLT5wZW5kaW5nLCAmaGF6YXJkLT5wZW5kaW5n
X2VudHJ5KTsKLQotCXRocmVhZC0+bl9wZW5kaW5nICs9IDE7Ci0JaWYgKHRocmVhZC0+bl9wZW5k
aW5nID4gdGhyZWFkLT5uX3BlYWspCi0JCXRocmVhZC0+bl9wZWFrID0gdGhyZWFkLT5uX3BlbmRp
bmc7Ci0KLQlyZXR1cm47Ci19Ci0KLXZvaWQKLWNrX2hwX2ZyZWUoc3RydWN0IGNrX2hwX3JlY29y
ZCAqdGhyZWFkLAotICAgIHN0cnVjdCBja19ocF9oYXphcmQgKmhhemFyZCwKLSAgICB2b2lkICpk
YXRhLAotICAgIHZvaWQgKnBvaW50ZXIpCi17Ci0Jc3RydWN0IGNrX2hwICpnbG9iYWw7Ci0KLQln
bG9iYWwgPSBja19wcl9sb2FkX3B0cigmdGhyZWFkLT5nbG9iYWwpOwotCWNrX3ByX3N0b3JlX3B0
cigmaGF6YXJkLT5kYXRhLCBkYXRhKTsKLQlja19wcl9zdG9yZV9wdHIoJmhhemFyZC0+cG9pbnRl
ciwgcG9pbnRlcik7Ci0JY2tfc3RhY2tfcHVzaF9zcG5jKCZ0aHJlYWQtPnBlbmRpbmcsICZoYXph
cmQtPnBlbmRpbmdfZW50cnkpOwotCi0JdGhyZWFkLT5uX3BlbmRpbmcgKz0gMTsKLQlpZiAodGhy
ZWFkLT5uX3BlbmRpbmcgPiB0aHJlYWQtPm5fcGVhaykKLQkJdGhyZWFkLT5uX3BlYWsgPSB0aHJl
YWQtPm5fcGVuZGluZzsKLQotCWlmICh0aHJlYWQtPm5fcGVuZGluZyA+PSBnbG9iYWwtPnRocmVz
aG9sZCkKLQkJY2tfaHBfcmVjbGFpbSh0aHJlYWQpOwotCi0JcmV0dXJuOwotfQotCi12b2lkCi1j
a19ocF9wdXJnZShzdHJ1Y3QgY2tfaHBfcmVjb3JkICp0aHJlYWQpCi17Ci0JY2tfYmFja29mZl90
IGJhY2tvZmYgPSBDS19CQUNLT0ZGX0lOSVRJQUxJWkVSOwotCi0Jd2hpbGUgKHRocmVhZC0+bl9w
ZW5kaW5nID4gMCkgewotCQlja19ocF9yZWNsYWltKHRocmVhZCk7Ci0JCWlmICh0aHJlYWQtPm5f
cGVuZGluZyA+IDApCi0JCQlja19iYWNrb2ZmX2ViKCZiYWNrb2ZmKTsKLQl9Ci0KLQlyZXR1cm47
Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9zcmMvY2tf
aHMuYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9ja19ocy5jCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmQwNGVkMmU4Yjc2YWM2OWQ1OTk1NmUwZmM0YTU2
NmM5YWU5YjM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9ja19ocy5jCisrKyAvZGV2L251
bGwKQEAgLTEsOTU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMi0yMDE1IFNhbXkgQWwg
QmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxja19jYy5oPgot
I2luY2x1ZGUgPGNrX2hzLmg+Ci0jaW5jbHVkZSA8Y2tfbGltaXRzLmg+Ci0jaW5jbHVkZSA8Y2tf
bWQuaD4KLSNpbmNsdWRlIDxja19wci5oPgotI2luY2x1ZGUgPGNrX3N0ZGludC5oPgotI2luY2x1
ZGUgPGNrX3N0ZGJvb2wuaD4KLSNpbmNsdWRlIDxja19zdHJpbmcuaD4KLQotI2luY2x1ZGUgImNr
X2ludGVybmFsLmgiCi0KLSNpZm5kZWYgQ0tfSFNfUFJPQkVfTDFfU0hJRlQKLSNkZWZpbmUgQ0tf
SFNfUFJPQkVfTDFfU0hJRlQgM1VMTAotI2VuZGlmIC8qIENLX0hTX1BST0JFX0wxX1NISUZUICov
Ci0KLSNkZWZpbmUgQ0tfSFNfUFJPQkVfTDEgKDEgPDwgQ0tfSFNfUFJPQkVfTDFfU0hJRlQpCi0j
ZGVmaW5lIENLX0hTX1BST0JFX0wxX01BU0sgKENLX0hTX1BST0JFX0wxIC0gMSkKLQotI2lmbmRl
ZiBDS19IU19QUk9CRV9MMV9ERUZBVUxUCi0jZGVmaW5lIENLX0hTX1BST0JFX0wxX0RFRkFVTFQg
Q0tfTURfQ0FDSEVMSU5FCi0jZW5kaWYKLQotI2RlZmluZSBDS19IU19WTUFfTUFTSyAoKHVpbnRw
dHJfdCkoKDFVTEwgPDwgQ0tfTURfVk1BX0JJVFMpIC0gMSkpCi0jZGVmaW5lIENLX0hTX1ZNQSh4
KQlcCi0JKCh2b2lkICopKCh1aW50cHRyX3QpKHgpICYgQ0tfSFNfVk1BX01BU0spKQotCi0jZGVm
aW5lIENLX0hTX0VNUFRZICAgICBOVUxMCi0jZGVmaW5lIENLX0hTX1RPTUJTVE9ORSAoKHZvaWQg
Kil+KHVpbnRwdHJfdCkwKQotI2RlZmluZSBDS19IU19HCQkoMikKLSNkZWZpbmUgQ0tfSFNfR19N
QVNLCShDS19IU19HIC0gMSkKLQotI2lmIGRlZmluZWQoQ0tfRl9QUl9MT0FEXzgpICYmIGRlZmlu
ZWQoQ0tfRl9QUl9TVE9SRV84KQotI2RlZmluZSBDS19IU19XT1JEICAgICAgICAgIHVpbnQ4X3QK
LSNkZWZpbmUgQ0tfSFNfV09SRF9NQVgJICAgIFVJTlQ4X01BWAotI2RlZmluZSBDS19IU19TVE9S
RSh4LCB5KSAgIGNrX3ByX3N0b3JlXzgoeCwgeSkKLSNkZWZpbmUgQ0tfSFNfTE9BRCh4KSAgICAg
ICBja19wcl9sb2FkXzgoeCkKLSNlbGlmIGRlZmluZWQoQ0tfRl9QUl9MT0FEXzE2KSAmJiBkZWZp
bmVkKENLX0ZfUFJfU1RPUkVfMTYpCi0jZGVmaW5lIENLX0hTX1dPUkQgICAgICAgICAgdWludDE2
X3QKLSNkZWZpbmUgQ0tfSFNfV09SRF9NQVgJICAgIFVJTlQxNl9NQVgKLSNkZWZpbmUgQ0tfSFNf
U1RPUkUoeCwgeSkgICBja19wcl9zdG9yZV8xNih4LCB5KQotI2RlZmluZSBDS19IU19MT0FEKHgp
ICAgICAgIGNrX3ByX2xvYWRfMTYoeCkKLSNlbGlmIGRlZmluZWQoQ0tfRl9QUl9MT0FEXzMyKSAm
JiBkZWZpbmVkKENLX0ZfUFJfU1RPUkVfMzIpCi0jZGVmaW5lIENLX0hTX1dPUkQgICAgICAgICAg
dWludDMyX3QKLSNkZWZpbmUgQ0tfSFNfV09SRF9NQVgJICAgIFVJTlQzMl9NQVgKLSNkZWZpbmUg
Q0tfSFNfU1RPUkUoeCwgeSkgICBja19wcl9zdG9yZV8zMih4LCB5KQotI2RlZmluZSBDS19IU19M
T0FEKHgpICAgICAgIGNrX3ByX2xvYWRfMzIoeCkKLSNlbHNlCi0jZXJyb3IgImNrX2hzIGlzIG5v
dCBzdXBwb3J0ZWQgb24geW91ciBwbGF0Zm9ybS4iCi0jZW5kaWYKLQotZW51bSBja19oc19wcm9i
ZV9iZWhhdmlvciB7Ci0JQ0tfSFNfUFJPQkUgPSAwLAkvKiBEZWZhdWx0IGJlaGF2aW9yLiAqLwot
CUNLX0hTX1BST0JFX1RPTUJTVE9ORSwJLyogU2hvcnQtY2lyY3VpdCBvbiB0b21ic3RvbmUuICov
Ci0JQ0tfSFNfUFJPQkVfSU5TRVJUCS8qIFNob3J0LWNpcmN1aXQgb24gcHJvYmUgYm91bmQgaWYg
dG9tYnN0b25lIGZvdW5kLiAqLwotfTsKLQotc3RydWN0IGNrX2hzX21hcCB7Ci0JdW5zaWduZWQg
aW50IGdlbmVyYXRpb25bQ0tfSFNfR107Ci0JdW5zaWduZWQgaW50IHByb2JlX21heGltdW07Ci0J
dW5zaWduZWQgbG9uZyBtYXNrOwotCXVuc2lnbmVkIGxvbmcgc3RlcDsKLQl1bnNpZ25lZCBpbnQg
cHJvYmVfbGltaXQ7Ci0JdW5zaWduZWQgaW50IHRvbWJzdG9uZXM7Ci0JdW5zaWduZWQgbG9uZyBu
X2VudHJpZXM7Ci0JdW5zaWduZWQgbG9uZyBjYXBhY2l0eTsKLQl1bnNpZ25lZCBsb25nIHNpemU7
Ci0JQ0tfSFNfV09SRCAqcHJvYmVfYm91bmQ7Ci0JY29uc3Qgdm9pZCAqKmVudHJpZXM7Ci19Owot
Ci1zdGF0aWMgaW5saW5lIHZvaWQKLWNrX2hzX21hcF9zaWduYWwoc3RydWN0IGNrX2hzX21hcCAq
bWFwLCB1bnNpZ25lZCBsb25nIGgpCi17Ci0KLQloICY9IENLX0hTX0dfTUFTSzsKLQlja19wcl9z
dG9yZV91aW50KCZtYXAtPmdlbmVyYXRpb25baF0sCi0JICAgIG1hcC0+Z2VuZXJhdGlvbltoXSAr
IDEpOwotCWNrX3ByX2ZlbmNlX3N0b3JlKCk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgYm9vbCAK
LV9ja19oc19uZXh0KHN0cnVjdCBja19ocyAqaHMsIHN0cnVjdCBja19oc19tYXAgKm1hcCwgc3Ry
dWN0IGNrX2hzX2l0ZXJhdG9yICppLCB2b2lkICoqa2V5KQotewotCXZvaWQgKnZhbHVlOwotCWlm
IChpLT5vZmZzZXQgPj0gbWFwLT5jYXBhY2l0eSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JZG8gewot
CQl2YWx1ZSA9IENLX0NDX0RFQ09OU1RfUFRSKG1hcC0+ZW50cmllc1tpLT5vZmZzZXRdKTsKLQkJ
aWYgKHZhbHVlICE9IENLX0hTX0VNUFRZICYmIHZhbHVlICE9IENLX0hTX1RPTUJTVE9ORSkgewot
I2lmZGVmIENLX0hTX1BQCi0JCQlpZiAoaHMtPm1vZGUgJiBDS19IU19NT0RFX09CSkVDVCkKLQkJ
CQl2YWx1ZSA9IENLX0hTX1ZNQSh2YWx1ZSk7Ci0jZWxzZQotCQkJKHZvaWQpaHM7IC8vIGF2b2lk
IHVudXNlZCBwYXJhbSB3YXJuaW5nCi0jZW5kaWYKLQkJCWktPm9mZnNldCsrOwotCQkJKmtleSA9
IHZhbHVlOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9IHdoaWxlICgrK2ktPm9mZnNldCA8IG1h
cC0+Y2FwYWNpdHkpOwotCi0JcmV0dXJuIGZhbHNlOwotfQotCi12b2lkCi1ja19oc19pdGVyYXRv
cl9pbml0KHN0cnVjdCBja19oc19pdGVyYXRvciAqaXRlcmF0b3IpCi17Ci0KLQlpdGVyYXRvci0+
Y3Vyc29yID0gTlVMTDsKLQlpdGVyYXRvci0+b2Zmc2V0ID0gMDsKLQlpdGVyYXRvci0+bWFwID0g
TlVMTDsKLQlyZXR1cm47Ci19Ci0KLWJvb2wKLWNrX2hzX25leHQoc3RydWN0IGNrX2hzICpocywg
c3RydWN0IGNrX2hzX2l0ZXJhdG9yICppLCB2b2lkICoqa2V5KQotewotCXJldHVybiBfY2tfaHNf
bmV4dChocywgaHMtPm1hcCwgaSwga2V5KTsKLX0KLQotYm9vbAotY2tfaHNfbmV4dF9zcG1jKHN0
cnVjdCBja19ocyAqaHMsIHN0cnVjdCBja19oc19pdGVyYXRvciAqaSwgdm9pZCAqKmtleSkKLXsK
LQlzdHJ1Y3QgY2tfaHNfbWFwICptID0gaS0+bWFwOwotCWlmIChtID09IE5VTEwpIHsKLQkJbSA9
IGktPm1hcCA9IGNrX3ByX2xvYWRfcHRyKCZocy0+bWFwKTsKLQl9Ci0JcmV0dXJuIF9ja19oc19u
ZXh0KGhzLCBtLCBpLCBrZXkpOwotfQotCi12b2lkCi1ja19oc19zdGF0KHN0cnVjdCBja19ocyAq
aHMsIHN0cnVjdCBja19oc19zdGF0ICpzdCkKLXsKLQlzdHJ1Y3QgY2tfaHNfbWFwICptYXAgPSBo
cy0+bWFwOwotCi0Jc3QtPm5fZW50cmllcyA9IG1hcC0+bl9lbnRyaWVzOwotCXN0LT50b21ic3Rv
bmVzID0gbWFwLT50b21ic3RvbmVzOwotCXN0LT5wcm9iZV9tYXhpbXVtID0gbWFwLT5wcm9iZV9t
YXhpbXVtOwotCXJldHVybjsKLX0KLQotdW5zaWduZWQgbG9uZwotY2tfaHNfY291bnQoc3RydWN0
IGNrX2hzICpocykKLXsKLQotCXJldHVybiBocy0+bWFwLT5uX2VudHJpZXM7Ci19Ci0KLXN0YXRp
YyB2b2lkCi1ja19oc19tYXBfZGVzdHJveShzdHJ1Y3QgY2tfbWFsbG9jICptLCBzdHJ1Y3QgY2tf
aHNfbWFwICptYXAsIGJvb2wgZGVmZXIpCi17Ci0KLQltLT5mcmVlKG1hcCwgbWFwLT5zaXplLCBk
ZWZlcik7Ci0JcmV0dXJuOwotfQotCi12b2lkCi1ja19oc19kZXN0cm95KHN0cnVjdCBja19ocyAq
aHMpCi17Ci0KLQlja19oc19tYXBfZGVzdHJveShocy0+bSwgaHMtPm1hcCwgZmFsc2UpOwotCXJl
dHVybjsKLX0KLQotc3RhdGljIHN0cnVjdCBja19oc19tYXAgKgotY2tfaHNfbWFwX2NyZWF0ZShz
dHJ1Y3QgY2tfaHMgKmhzLCB1bnNpZ25lZCBsb25nIGVudHJpZXMpCi17Ci0Jc3RydWN0IGNrX2hz
X21hcCAqbWFwOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSwgbl9lbnRyaWVzLCBwcmVmaXgsIGxpbWl0
OwotCi0Jbl9lbnRyaWVzID0gY2tfaW50ZXJuYWxfcG93ZXJfMihlbnRyaWVzKTsKLQlpZiAobl9l
bnRyaWVzIDwgQ0tfSFNfUFJPQkVfTDEpCi0JCW5fZW50cmllcyA9IENLX0hTX1BST0JFX0wxOwot
Ci0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2tfaHNfbWFwKSArIChzaXplb2Yodm9pZCAqKSAqIG5f
ZW50cmllcyArIENLX01EX0NBQ0hFTElORSAtIDEpOwotCi0JaWYgKGhzLT5tb2RlICYgQ0tfSFNf
TU9ERV9ERUxFVEUpIHsKLQkJcHJlZml4ID0gc2l6ZW9mKENLX0hTX1dPUkQpICogbl9lbnRyaWVz
OwotCQlzaXplICs9IHByZWZpeDsKLQl9IGVsc2UgewotCQlwcmVmaXggPSAwOwotCX0KLQotCW1h
cCA9IGhzLT5tLT5tYWxsb2Moc2l6ZSk7Ci0JaWYgKG1hcCA9PSBOVUxMKQotCQlyZXR1cm4gTlVM
TDsKLQotCW1hcC0+c2l6ZSA9IHNpemU7Ci0KLQkvKiBXZSBzaG91bGQgcHJvYmFibHkgdXNlIGEg
bW9yZSBpbnRlbGxpZ2VudCBoZXVyaXN0aWMgZm9yIGRlZmF1bHQgcHJvYmUgbGVuZ3RoLiAqLwot
CWxpbWl0ID0gY2tfaW50ZXJuYWxfbWF4KG5fZW50cmllcyA+PiAoQ0tfSFNfUFJPQkVfTDFfU0hJ
RlQgKyAyKSwgQ0tfSFNfUFJPQkVfTDFfREVGQVVMVCk7Ci0JaWYgKGxpbWl0ID4gVUlOVF9NQVgp
Ci0JCWxpbWl0ID0gVUlOVF9NQVg7Ci0KLQltYXAtPnByb2JlX2xpbWl0ID0gKHVuc2lnbmVkIGlu
dClsaW1pdDsKLQltYXAtPnByb2JlX21heGltdW0gPSAwOwotCW1hcC0+Y2FwYWNpdHkgPSBuX2Vu
dHJpZXM7Ci0JbWFwLT5zdGVwID0gY2tfaW50ZXJuYWxfYnNmKG5fZW50cmllcyk7Ci0JbWFwLT5t
YXNrID0gbl9lbnRyaWVzIC0gMTsKLQltYXAtPm5fZW50cmllcyA9IDA7Ci0KLQkvKiBBbGlnbiBt
YXAgYWxsb2NhdGlvbiB0byBjYWNoZSBsaW5lLiAqLwotCW1hcC0+ZW50cmllcyA9ICh2b2lkICop
KCgodWludHB0cl90KSZtYXBbMV0gKyBwcmVmaXggKwotCSAgICBDS19NRF9DQUNIRUxJTkUgLSAx
KSAmIH4oQ0tfTURfQ0FDSEVMSU5FIC0gMSkpOwotCi0JbWVtc2V0KG1hcC0+ZW50cmllcywgMCwg
c2l6ZW9mKHZvaWQgKikgKiBuX2VudHJpZXMpOwotCW1lbXNldChtYXAtPmdlbmVyYXRpb24sIDAs
IHNpemVvZiBtYXAtPmdlbmVyYXRpb24pOwotCi0JaWYgKGhzLT5tb2RlICYgQ0tfSFNfTU9ERV9E
RUxFVEUpIHsKLQkJbWFwLT5wcm9iZV9ib3VuZCA9IChDS19IU19XT1JEICopJm1hcFsxXTsKLQkJ
bWVtc2V0KG1hcC0+cHJvYmVfYm91bmQsIDAsIHByZWZpeCk7Ci0JfSBlbHNlIHsKLQkJbWFwLT5w
cm9iZV9ib3VuZCA9IE5VTEw7Ci0JfQotCi0JLyogQ29tbWl0IGVudHJpZXMgcHVyZ2Ugd2l0aCBy
ZXNwZWN0IHRvIG1hcCBwdWJsaWNhdGlvbi4gKi8KLQlja19wcl9mZW5jZV9zdG9yZSgpOwotCXJl
dHVybiBtYXA7Ci19Ci0KLWJvb2wKLWNrX2hzX3Jlc2V0X3NpemUoc3RydWN0IGNrX2hzICpocywg
dW5zaWduZWQgbG9uZyBjYXBhY2l0eSkKLXsKLQlzdHJ1Y3QgY2tfaHNfbWFwICptYXAsICpwcmV2
aW91czsKLQotCXByZXZpb3VzID0gaHMtPm1hcDsKLQltYXAgPSBja19oc19tYXBfY3JlYXRlKGhz
LCBjYXBhY2l0eSk7Ci0JaWYgKG1hcCA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlja19w
cl9zdG9yZV9wdHIoJmhzLT5tYXAsIG1hcCk7Ci0JY2tfaHNfbWFwX2Rlc3Ryb3koaHMtPm0sIHBy
ZXZpb3VzLCB0cnVlKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbAotY2tfaHNfcmVzZXQoc3Ry
dWN0IGNrX2hzICpocykKLXsKLQlzdHJ1Y3QgY2tfaHNfbWFwICpwcmV2aW91czsKLQotCXByZXZp
b3VzID0gaHMtPm1hcDsKLQlyZXR1cm4gY2tfaHNfcmVzZXRfc2l6ZShocywgcHJldmlvdXMtPmNh
cGFjaXR5KTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1ja19oc19tYXBfcHJv
YmVfbmV4dChzdHJ1Y3QgY2tfaHNfbWFwICptYXAsCi0gICAgdW5zaWduZWQgbG9uZyBvZmZzZXQs
Ci0gICAgdW5zaWduZWQgbG9uZyBoLAotICAgIHVuc2lnbmVkIGxvbmcgbGV2ZWwsCi0gICAgdW5z
aWduZWQgbG9uZyBwcm9iZXMpCi17Ci0JdW5zaWduZWQgbG9uZyByLCBzdHJpZGU7Ci0KLQlyID0g
KGggPj4gbWFwLT5zdGVwKSA+PiBsZXZlbDsKLQlzdHJpZGUgPSAociAmIH5DS19IU19QUk9CRV9M
MV9NQVNLKSA8PCAxIHwgKHIgJiBDS19IU19QUk9CRV9MMV9NQVNLKTsKLQotCXJldHVybiAob2Zm
c2V0ICsgKHByb2JlcyA+PiBDS19IU19QUk9CRV9MMV9TSElGVCkgKwotCSAgICAoc3RyaWRlIHwg
Q0tfSFNfUFJPQkVfTDEpKSAmIG1hcC0+bWFzazsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1j
a19oc19tYXBfYm91bmRfc2V0KHN0cnVjdCBja19oc19tYXAgKm0sCi0gICAgdW5zaWduZWQgbG9u
ZyBoLAotICAgIHVuc2lnbmVkIGxvbmcgbl9wcm9iZXMpCi17Ci0JdW5zaWduZWQgbG9uZyBvZmZz
ZXQgPSBoICYgbS0+bWFzazsKLQotCWlmIChuX3Byb2JlcyA+IG0tPnByb2JlX21heGltdW0pCi0J
CWNrX3ByX3N0b3JlX3VpbnQoJm0tPnByb2JlX21heGltdW0sIG5fcHJvYmVzKTsKLQotCWlmICht
LT5wcm9iZV9ib3VuZCAhPSBOVUxMICYmIG0tPnByb2JlX2JvdW5kW29mZnNldF0gPCBuX3Byb2Jl
cykgewotCQlpZiAobl9wcm9iZXMgPiBDS19IU19XT1JEX01BWCkKLQkJCW5fcHJvYmVzID0gQ0tf
SFNfV09SRF9NQVg7Ci0KLQkJQ0tfSFNfU1RPUkUoJm0tPnByb2JlX2JvdW5kW29mZnNldF0sIG5f
cHJvYmVzKTsKLQkJY2tfcHJfZmVuY2Vfc3RvcmUoKTsKLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1ja19oc19tYXBfYm91bmRfZ2V0KHN0cnVjdCBja19o
c19tYXAgKm0sIHVuc2lnbmVkIGxvbmcgaCkKLXsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGgg
JiBtLT5tYXNrOwotCXVuc2lnbmVkIGludCByID0gQ0tfSFNfV09SRF9NQVg7Ci0KLQlpZiAobS0+
cHJvYmVfYm91bmQgIT0gTlVMTCkgewotCQlyID0gQ0tfSFNfTE9BRCgmbS0+cHJvYmVfYm91bmRb
b2Zmc2V0XSk7Ci0JCWlmIChyID09IENLX0hTX1dPUkRfTUFYKQotCQkJciA9IGNrX3ByX2xvYWRf
dWludCgmbS0+cHJvYmVfbWF4aW11bSk7Ci0JfSBlbHNlIHsKLQkJciA9IGNrX3ByX2xvYWRfdWlu
dCgmbS0+cHJvYmVfbWF4aW11bSk7Ci0JfQotCi0JcmV0dXJuIHI7Ci19Ci0KLWJvb2wKLWNrX2hz
X2dyb3coc3RydWN0IGNrX2hzICpocywKLSAgICB1bnNpZ25lZCBsb25nIGNhcGFjaXR5KQotewot
CXN0cnVjdCBja19oc19tYXAgKm1hcCwgKnVwZGF0ZTsKLQl1bnNpZ25lZCBsb25nIGssIGksIGos
IG9mZnNldCwgcHJvYmVzOwotCWNvbnN0IHZvaWQgKnByZXZpb3VzLCAqKmJ1Y2tldDsKLQotcmVz
dGFydDoKLQltYXAgPSBocy0+bWFwOwotCWlmIChtYXAtPmNhcGFjaXR5ID4gY2FwYWNpdHkpCi0J
CXJldHVybiBmYWxzZTsKLQotCXVwZGF0ZSA9IGNrX2hzX21hcF9jcmVhdGUoaHMsIGNhcGFjaXR5
KTsKLQlpZiAodXBkYXRlID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQotCWZvciAoayA9IDA7
IGsgPCBtYXAtPmNhcGFjaXR5OyBrKyspIHsKLQkJdW5zaWduZWQgbG9uZyBoOwotCi0JCXByZXZp
b3VzID0gbWFwLT5lbnRyaWVzW2tdOwotCQlpZiAocHJldmlvdXMgPT0gQ0tfSFNfRU1QVFkgfHwg
cHJldmlvdXMgPT0gQ0tfSFNfVE9NQlNUT05FKQotCQkJY29udGludWU7Ci0KLSNpZmRlZiBDS19I
U19QUAotCQlpZiAoaHMtPm1vZGUgJiBDS19IU19NT0RFX09CSkVDVCkKLQkJCXByZXZpb3VzID0g
Q0tfSFNfVk1BKHByZXZpb3VzKTsKLSNlbmRpZgotCi0JCWggPSBocy0+aGYocHJldmlvdXMsIGhz
LT5zZWVkKTsKLQkJb2Zmc2V0ID0gaCAmIHVwZGF0ZS0+bWFzazsKLQkJaSA9IHByb2JlcyA9IDA7
Ci0KLQkJZm9yICg7OykgewotCQkJYnVja2V0ID0gKGNvbnN0IHZvaWQgKiopKCh1aW50cHRyX3Qp
JnVwZGF0ZS0+ZW50cmllc1tvZmZzZXRdICYgfihDS19NRF9DQUNIRUxJTkUgLSAxKSk7Ci0KLQkJ
CWZvciAoaiA9IDA7IGogPCBDS19IU19QUk9CRV9MMTsgaisrKSB7Ci0JCQkJY29uc3Qgdm9pZCAq
KmN1cnNvciA9IGJ1Y2tldCArICgoaiArIG9mZnNldCkgJiAoQ0tfSFNfUFJPQkVfTDEgLSAxKSk7
Ci0KLQkJCQlpZiAocHJvYmVzKysgPT0gdXBkYXRlLT5wcm9iZV9saW1pdCkKLQkJCQkJYnJlYWs7
Ci0KLQkJCQlpZiAoQ0tfQ0NfTElLRUxZKCpjdXJzb3IgPT0gQ0tfSFNfRU1QVFkpKSB7Ci0JCQkJ
CSpjdXJzb3IgPSBtYXAtPmVudHJpZXNba107Ci0JCQkJCXVwZGF0ZS0+bl9lbnRyaWVzKys7Ci0K
LQkJCQkJY2tfaHNfbWFwX2JvdW5kX3NldCh1cGRhdGUsIGgsIHByb2Jlcyk7Ci0JCQkJCWJyZWFr
OwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGogPCBDS19IU19QUk9CRV9MMSkKLQkJCQlicmVhazsK
LQotCQkJb2Zmc2V0ID0gY2tfaHNfbWFwX3Byb2JlX25leHQodXBkYXRlLCBvZmZzZXQsIGgsIGkr
KywgcHJvYmVzKTsKLQkJfQotCi0JCWlmIChwcm9iZXMgPiB1cGRhdGUtPnByb2JlX2xpbWl0KSB7
Ci0JCQkvKgotCQkJICogV2UgaGF2ZSBoaXQgdGhlIHByb2JlIGxpbWl0LCBtYXAgbmVlZHMgdG8g
YmUgZXZlbiBsYXJnZXIuCi0JCQkgKi8KLQkJCWNrX2hzX21hcF9kZXN0cm95KGhzLT5tLCB1cGRh
dGUsIGZhbHNlKTsKLQkJCWNhcGFjaXR5IDw8PSAxOwotCQkJZ290byByZXN0YXJ0OwotCQl9Ci0J
fQotCi0JY2tfcHJfZmVuY2Vfc3RvcmUoKTsKLQlja19wcl9zdG9yZV9wdHIoJmhzLT5tYXAsIHVw
ZGF0ZSk7Ci0JY2tfaHNfbWFwX2Rlc3Ryb3koaHMtPm0sIG1hcCwgdHJ1ZSk7Ci0JcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ja19oc19tYXBfcG9zdGluc2VydChzdHJ1Y3QgY2tfaHMg
KmhzLCBzdHJ1Y3QgY2tfaHNfbWFwICptYXApCi17Ci0KLQltYXAtPm5fZW50cmllcysrOwotCWlm
ICgobWFwLT5uX2VudHJpZXMgPDwgMSkgPiBtYXAtPmNhcGFjaXR5KQotCQlja19oc19ncm93KGhz
LCBtYXAtPmNhcGFjaXR5IDw8IDEpOwotCi0JcmV0dXJuOwotfQotCi1ib29sCi1ja19oc19yZWJ1
aWxkKHN0cnVjdCBja19ocyAqaHMpCi17Ci0KLQlyZXR1cm4gY2tfaHNfZ3JvdyhocywgaHMtPm1h
cC0+Y2FwYWNpdHkpOwotfQotCi1zdGF0aWMgY29uc3Qgdm9pZCAqKgotY2tfaHNfbWFwX3Byb2Jl
KHN0cnVjdCBja19ocyAqaHMsCi0gICAgc3RydWN0IGNrX2hzX21hcCAqbWFwLAotICAgIHVuc2ln
bmVkIGxvbmcgKm5fcHJvYmVzLAotICAgIGNvbnN0IHZvaWQgKioqcHJpb3JpdHksCi0gICAgdW5z
aWduZWQgbG9uZyBoLAotICAgIGNvbnN0IHZvaWQgKmtleSwKLSAgICBjb25zdCB2b2lkICoqb2Jq
ZWN0LAotICAgIHVuc2lnbmVkIGxvbmcgcHJvYmVfbGltaXQsCi0gICAgZW51bSBja19oc19wcm9i
ZV9iZWhhdmlvciBiZWhhdmlvcikKLXsKLQljb25zdCB2b2lkICoqYnVja2V0LCAqKmN1cnNvciwg
KmssICpjb21wYXJlOwotCWNvbnN0IHZvaWQgKipwciA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBv
ZmZzZXQsIGosIGksIHByb2Jlcywgb3BsOwotCi0jaWZkZWYgQ0tfSFNfUFAKLQkvKiBJZiB3ZSBh
cmUgc3RvcmluZyBvYmplY3QgcG9pbnRlcnMsIHRoZW4gd2UgbWF5IGxldmVyYWdlIHBvaW50ZXIg
cGFja2luZy4gKi8KLQl1bnNpZ25lZCBsb25nIGh2ID0gMDsKLQotCWlmIChocy0+bW9kZSAmIENL
X0hTX01PREVfT0JKRUNUKSB7Ci0JCWh2ID0gKGggPj4gMjUpICYgQ0tfSFNfS0VZX01BU0s7Ci0J
CWNvbXBhcmUgPSBDS19IU19WTUEoa2V5KTsKLQl9IGVsc2UgewotCQljb21wYXJlID0ga2V5Owot
CX0KLSNlbHNlCi0JY29tcGFyZSA9IGtleTsKLSNlbmRpZgotCi0Jb2Zmc2V0ID0gaCAmIG1hcC0+
bWFzazsKLQkqb2JqZWN0ID0gTlVMTDsKLQlpID0gcHJvYmVzID0gMDsKLQotCW9wbCA9IHByb2Jl
X2xpbWl0OwotCWlmIChiZWhhdmlvciA9PSBDS19IU19QUk9CRV9JTlNFUlQpCi0JCXByb2JlX2xp
bWl0ID0gY2tfaHNfbWFwX2JvdW5kX2dldChtYXAsIGgpOwotCi0JZm9yICg7OykgewotCQlidWNr
ZXQgPSAoY29uc3Qgdm9pZCAqKikoKHVpbnRwdHJfdCkmbWFwLT5lbnRyaWVzW29mZnNldF0gJiB+
KENLX01EX0NBQ0hFTElORSAtIDEpKTsKLQotCQlmb3IgKGogPSAwOyBqIDwgQ0tfSFNfUFJPQkVf
TDE7IGorKykgewotCQkJY3Vyc29yID0gYnVja2V0ICsgKChqICsgb2Zmc2V0KSAmIChDS19IU19Q
Uk9CRV9MMSAtIDEpKTsKLQotCQkJaWYgKHByb2JlcysrID09IHByb2JlX2xpbWl0KSB7Ci0JCQkJ
aWYgKHByb2JlX2xpbWl0ID09IG9wbCB8fCBwciAhPSBOVUxMKSB7Ci0JCQkJCWsgPSBDS19IU19F
TVBUWTsKLQkJCQkJZ290byBsZWF2ZTsKLQkJCQl9Ci0KLQkJCQkvKgotCQkJCSAqIElmIG5vIGVs
aWdpYmxlIHNsb3QgaGFzIGJlZW4gZm91bmQgeWV0LCBjb250aW51ZSBwcm9iZQotCQkJCSAqIHNl
cXVlbmNlIHdpdGggb3JpZ2luYWwgcHJvYmUgbGltaXQuCi0JCQkJICovCi0JCQkJcHJvYmVfbGlt
aXQgPSBvcGw7Ci0JCQl9Ci0KLQkJCWsgPSBja19wcl9sb2FkX3B0cihjdXJzb3IpOwotCQkJaWYg
KGsgPT0gQ0tfSFNfRU1QVFkpCi0JCQkJZ290byBsZWF2ZTsKLQotCQkJaWYgKGsgPT0gQ0tfSFNf
VE9NQlNUT05FKSB7Ci0JCQkJaWYgKHByID09IE5VTEwpIHsKLQkJCQkJcHIgPSBjdXJzb3I7Ci0J
CQkJCSpuX3Byb2JlcyA9IHByb2JlczsKLQotCQkJCQlpZiAoYmVoYXZpb3IgPT0gQ0tfSFNfUFJP
QkVfVE9NQlNUT05FKSB7Ci0JCQkJCQlrID0gQ0tfSFNfRU1QVFk7Ci0JCQkJCQlnb3RvIGxlYXZl
OwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJY29udGludWU7Ci0JCQl9Ci0KLSNpZmRlZiBDS19IU19Q
UAotCQkJaWYgKGhzLT5tb2RlICYgQ0tfSFNfTU9ERV9PQkpFQ1QpIHsKLQkJCQlpZiAoKCh1aW50
cHRyX3QpayA+PiBDS19NRF9WTUFfQklUUykgIT0gaHYpCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJ
ayA9IENLX0hTX1ZNQShrKTsKLQkJCX0KLSNlbmRpZgotCi0JCQlpZiAoayA9PSBjb21wYXJlKQot
CQkJCWdvdG8gbGVhdmU7Ci0KLQkJCWlmIChocy0+Y29tcGFyZSA9PSBOVUxMKQotCQkJCWNvbnRp
bnVlOwotCi0JCQlpZiAoaHMtPmNvbXBhcmUoaywga2V5KSA9PSB0cnVlKQotCQkJCWdvdG8gbGVh
dmU7Ci0JCX0KLQotCQlvZmZzZXQgPSBja19oc19tYXBfcHJvYmVfbmV4dChtYXAsIG9mZnNldCwg
aCwgaSsrLCBwcm9iZXMpOwotCX0KLQotbGVhdmU6Ci0JaWYgKHByb2JlcyA+IHByb2JlX2xpbWl0
KSB7Ci0JCWN1cnNvciA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJKm9iamVjdCA9IGs7Ci0JfQotCi0J
aWYgKHByID09IE5VTEwpCi0JCSpuX3Byb2JlcyA9IHByb2JlczsKLQotCSpwcmlvcml0eSA9IHBy
OwotCXJldHVybiBjdXJzb3I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqCi1ja19o
c19tYXJzaGFsKHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCB2b2lkICprZXksIHVuc2lnbmVkIGxv
bmcgaCkKLXsKLSNpZmRlZiBDS19IU19QUAotCWNvbnN0IHZvaWQgKmluc2VydDsKLQotCWlmICht
b2RlICYgQ0tfSFNfTU9ERV9PQkpFQ1QpIHsKLQkJaW5zZXJ0ID0gKHZvaWQgKikoKHVpbnRwdHJf
dClDS19IU19WTUEoa2V5KSB8Ci0JCSAgICAoKGggPj4gMjUpIDw8IENLX01EX1ZNQV9CSVRTKSk7
Ci0JfSBlbHNlIHsKLQkJaW5zZXJ0ID0ga2V5OwotCX0KLQotCXJldHVybiBpbnNlcnQ7Ci0jZWxz
ZQotCSh2b2lkKW1vZGU7Ci0JKHZvaWQpaDsKLQotCXJldHVybiBrZXk7Ci0jZW5kaWYKLX0KLQot
Ym9vbAotY2tfaHNfZ2Moc3RydWN0IGNrX2hzICpocywgdW5zaWduZWQgbG9uZyBjeWNsZXMsIHVu
c2lnbmVkIGxvbmcgc2VlZCkKLXsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSAwOwotCXVuc2lnbmVk
IGxvbmcgaTsKLQlzdHJ1Y3QgY2tfaHNfbWFwICptYXAgPSBocy0+bWFwOwotCXVuc2lnbmVkIGlu
dCBtYXhpbXVtOwotCUNLX0hTX1dPUkQgKmJvdW5kcyA9IE5VTEw7Ci0KLQlpZiAobWFwLT5uX2Vu
dHJpZXMgPT0gMCkgewotCQlja19wcl9zdG9yZV91aW50KCZtYXAtPnByb2JlX21heGltdW0sIDAp
OwotCQlpZiAobWFwLT5wcm9iZV9ib3VuZCAhPSBOVUxMKQotCQkJbWVtc2V0KG1hcC0+cHJvYmVf
Ym91bmQsIDAsIHNpemVvZihDS19IU19XT1JEKSAqIG1hcC0+Y2FwYWNpdHkpOwotCi0JCXJldHVy
biB0cnVlOwotCX0KLQotCWlmIChjeWNsZXMgPT0gMCkgewotCQltYXhpbXVtID0gMDsKLQotCQlp
ZiAobWFwLT5wcm9iZV9ib3VuZCAhPSBOVUxMKSB7Ci0JCQlzaXplID0gc2l6ZW9mKENLX0hTX1dP
UkQpICogbWFwLT5jYXBhY2l0eTsKLQkJCWJvdW5kcyA9IGhzLT5tLT5tYWxsb2Moc2l6ZSk7Ci0J
CQlpZiAoYm91bmRzID09IE5VTEwpCi0JCQkJcmV0dXJuIGZhbHNlOwotCi0JCQltZW1zZXQoYm91
bmRzLCAwLCBzaXplKTsKLQkJfQotCX0gZWxzZSB7Ci0JCW1heGltdW0gPSBtYXAtPnByb2JlX21h
eGltdW07Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG1hcC0+Y2FwYWNpdHk7IGkrKykgewotCQlj
b25zdCB2b2lkICoqZmlyc3QsICpvYmplY3QsICoqc2xvdCwgKmVudHJ5OwotCQl1bnNpZ25lZCBs
b25nIG5fcHJvYmVzLCBvZmZzZXQsIGg7Ci0KLQkJZW50cnkgPSBtYXAtPmVudHJpZXNbKGkgKyBz
ZWVkKSAmIG1hcC0+bWFza107Ci0JCWlmIChlbnRyeSA9PSBDS19IU19FTVBUWSB8fCBlbnRyeSA9
PSBDS19IU19UT01CU1RPTkUpCi0JCQljb250aW51ZTsKLQotI2lmZGVmIENLX0hTX1BQCi0JCWlm
IChocy0+bW9kZSAmIENLX0hTX01PREVfT0JKRUNUKQotCQkJZW50cnkgPSBDS19IU19WTUEoZW50
cnkpOwotI2VuZGlmCi0KLQkJaCA9IGhzLT5oZihlbnRyeSwgaHMtPnNlZWQpOwotCQlvZmZzZXQg
PSBoICYgbWFwLT5tYXNrOwotCi0JCXNsb3QgPSBja19oc19tYXBfcHJvYmUoaHMsIG1hcCwgJm5f
cHJvYmVzLCAmZmlyc3QsIGgsIGVudHJ5LCAmb2JqZWN0LAotCQkgICAgY2tfaHNfbWFwX2JvdW5k
X2dldChtYXAsIGgpLCBDS19IU19QUk9CRSk7Ci0KLQkJaWYgKGZpcnN0ICE9IE5VTEwpIHsKLQkJ
CWNvbnN0IHZvaWQgKmluc2VydCA9IGNrX2hzX21hcnNoYWwoaHMtPm1vZGUsIGVudHJ5LCBoKTsK
LQotCQkJY2tfcHJfc3RvcmVfcHRyKGZpcnN0LCBpbnNlcnQpOwotCQkJY2tfaHNfbWFwX3NpZ25h
bChtYXAsIGgpOwotCQkJY2tfcHJfc3RvcmVfcHRyKHNsb3QsIENLX0hTX1RPTUJTVE9ORSk7Ci0J
CX0KLQotCQlpZiAoY3ljbGVzID09IDApIHsKLQkJCWlmIChuX3Byb2JlcyA+IG1heGltdW0pCi0J
CQkJbWF4aW11bSA9IG5fcHJvYmVzOwotCi0JCQlpZiAobl9wcm9iZXMgPiBDS19IU19XT1JEX01B
WCkKLQkJCQluX3Byb2JlcyA9IENLX0hTX1dPUkRfTUFYOwotCi0JCQlpZiAoYm91bmRzICE9IE5V
TEwgJiYgbl9wcm9iZXMgPiBib3VuZHNbb2Zmc2V0XSkKLQkJCQlib3VuZHNbb2Zmc2V0XSA9IG5f
cHJvYmVzOwotCQl9IGVsc2UgaWYgKC0tY3ljbGVzID09IDApCi0JCQlicmVhazsKLQl9Ci0KLQkv
KgotCSAqIFRoZSBmb2xsb3dpbmcgb25seSBhcHBseSB0byBnYXJiYWdlIGNvbGxlY3Rpb24gaW52
b2x2aW5nCi0JICogYSBmdWxsIHNjYW4gb2YgYWxsIGVudHJpZXMuCi0JICovCi0JaWYgKG1heGlt
dW0gIT0gbWFwLT5wcm9iZV9tYXhpbXVtKQotCQlja19wcl9zdG9yZV91aW50KCZtYXAtPnByb2Jl
X21heGltdW0sIG1heGltdW0pOwotCi0JaWYgKGJvdW5kcyAhPSBOVUxMKSB7Ci0JCWZvciAoaSA9
IDA7IGkgPCBtYXAtPmNhcGFjaXR5OyBpKyspCi0JCQlDS19IU19TVE9SRSgmbWFwLT5wcm9iZV9i
b3VuZFtpXSwgYm91bmRzW2ldKTsKLQotCQlocy0+bS0+ZnJlZShib3VuZHMsIHNpemUsIGZhbHNl
KTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbAotY2tfaHNfZmFzKHN0cnVjdCBja19o
cyAqaHMsCi0gICAgdW5zaWduZWQgbG9uZyBoLAotICAgIGNvbnN0IHZvaWQgKmtleSwKLSAgICB2
b2lkICoqcHJldmlvdXMpCi17Ci0JY29uc3Qgdm9pZCAqKnNsb3QsICoqZmlyc3QsICpvYmplY3Qs
ICppbnNlcnQ7Ci0Jc3RydWN0IGNrX2hzX21hcCAqbWFwID0gaHMtPm1hcDsKLQl1bnNpZ25lZCBs
b25nIG5fcHJvYmVzOwotCi0JKnByZXZpb3VzID0gTlVMTDsKLQlzbG90ID0gY2tfaHNfbWFwX3By
b2JlKGhzLCBtYXAsICZuX3Byb2JlcywgJmZpcnN0LCBoLCBrZXksICZvYmplY3QsCi0JICAgIGNr
X2hzX21hcF9ib3VuZF9nZXQobWFwLCBoKSwgQ0tfSFNfUFJPQkUpOwotCi0JLyogUmVwbGFjZW1l
bnQgc2VtYW50aWNzIHByZXN1bWUgZXhpc3RlbmNlLiAqLwotCWlmIChvYmplY3QgPT0gTlVMTCkK
LQkJcmV0dXJuIGZhbHNlOwotCi0JaW5zZXJ0ID0gY2tfaHNfbWFyc2hhbChocy0+bW9kZSwga2V5
LCBoKTsKLQotCWlmIChmaXJzdCAhPSBOVUxMKSB7Ci0JCWNrX3ByX3N0b3JlX3B0cihmaXJzdCwg
aW5zZXJ0KTsKLQkJY2tfaHNfbWFwX3NpZ25hbChtYXAsIGgpOwotCQlja19wcl9zdG9yZV9wdHIo
c2xvdCwgQ0tfSFNfVE9NQlNUT05FKTsKLQl9IGVsc2UgewotCQlja19wcl9zdG9yZV9wdHIoc2xv
dCwgaW5zZXJ0KTsKLQl9Ci0KLQkqcHJldmlvdXMgPSBDS19DQ19ERUNPTlNUX1BUUihvYmplY3Qp
OwotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogQW4gYXBwbHkgZnVuY3Rpb24gdGFrZXMgdHdv
IGFyZ3VtZW50cy4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBhCi0gKiBwcmUt
ZXhpc3Rpbmcgb2JqZWN0LiBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUg
ZmlmdGggYXJndW1lbnQKLSAqIHBhc3NlZCB0byBja19oc19hcHBseS4gSWYgYSBub24tTlVMTCBw
b2ludGVyIGlzIHBhc3NlZCB0byB0aGUgZmlyc3QgYXJndW1lbnQKLSAqIGFuZCB0aGUgcmV0dXJu
IHZhbHVlIG9mIHRoZSBhcHBseSBmdW5jdGlvbiBpcyBOVUxMLCB0aGVuIHRoZSBwcmUtZXhpc3Rp
bmcKLSAqIHZhbHVlIGlzIGRlbGV0ZWQuIElmIHRoZSByZXR1cm4gcG9pbnRlciBpcyB0aGUgc2Ft
ZSBhcyB0aGUgb25lIHBhc3NlZCB0byB0aGUKLSAqIGFwcGx5IGZ1bmN0aW9uIHRoZW4gbm8gY2hh
bmdlcyBhcmUgbWFkZSB0byB0aGUgaGFzaCB0YWJsZS4gIElmIHRoZSBmaXJzdAotICogYXJndW1l
bnQgaXMgbm9uLU5VTEwgYW5kIHRoZSByZXR1cm4gcG9pbnRlciBpcyBkaWZmZXJlbnQgdGhhbiB0
aGF0IHBhc3NlZCB0bwotICogdGhlIGFwcGx5IGZ1bmN0aW9uLCB0aGVuIHRoZSBwcmUtZXhpc3Rp
bmcgdmFsdWUgaXMgcmVwbGFjZWQuIEZvcgotICogcmVwbGFjZW1lbnQsIGl0IGlzIHJlcXVpcmVk
IHRoYXQgdGhlIHZhbHVlIGl0c2VsZiBpcyBpZGVudGljYWwgdG8gdGhlCi0gKiBwcmV2aW91cyB2
YWx1ZS4KLSAqLwotYm9vbAotY2tfaHNfYXBwbHkoc3RydWN0IGNrX2hzICpocywKLSAgICB1bnNp
Z25lZCBsb25nIGgsCi0gICAgY29uc3Qgdm9pZCAqa2V5LAotICAgIGNrX2hzX2FwcGx5X2ZuX3Qg
KmZuLAotICAgIHZvaWQgKmNsKQotewotCWNvbnN0IHZvaWQgKipzbG90LCAqKmZpcnN0LCAqb2Jq
ZWN0LCAqZGVsdGEsICppbnNlcnQ7Ci0JdW5zaWduZWQgbG9uZyBuX3Byb2JlczsKLQlzdHJ1Y3Qg
Y2tfaHNfbWFwICptYXA7Ci0KLXJlc3RhcnQ6Ci0JbWFwID0gaHMtPm1hcDsKLQotCXNsb3QgPSBj
a19oc19tYXBfcHJvYmUoaHMsIG1hcCwgJm5fcHJvYmVzLCAmZmlyc3QsIGgsIGtleSwgJm9iamVj
dCwgbWFwLT5wcm9iZV9saW1pdCwgQ0tfSFNfUFJPQkVfSU5TRVJUKTsKLQlpZiAoc2xvdCA9PSBO
VUxMICYmIGZpcnN0ID09IE5VTEwpIHsKLQkJaWYgKGNrX2hzX2dyb3coaHMsIG1hcC0+Y2FwYWNp
dHkgPDwgMSkgPT0gZmFsc2UpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJZ290byByZXN0YXJ0Owot
CX0KLQotCWRlbHRhID0gZm4oQ0tfQ0NfREVDT05TVF9QVFIob2JqZWN0KSwgY2wpOwotCWlmIChk
ZWx0YSA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFRoZSBhcHBseSBmdW5jdGlvbiBoYXMgcmVxdWVz
dGVkIGRlbGV0aW9uLiBJZiB0aGUgb2JqZWN0IGRvZXNuJ3QgZXhpc3QsCi0JCSAqIHRoZW4gZXhp
dCBlYXJseS4KLQkJICovCi0JCWlmIChDS19DQ19VTkxJS0VMWShvYmplY3QgPT0gTlVMTCkpCi0J
CQlyZXR1cm4gdHJ1ZTsKLQotCQkvKiBPdGhlcndpc2UsIG1hcmsgc2xvdCBhcyBkZWxldGVkLiAq
LwotCQlja19wcl9zdG9yZV9wdHIoc2xvdCwgQ0tfSFNfVE9NQlNUT05FKTsKLQkJbWFwLT5uX2Vu
dHJpZXMtLTsKLQkJbWFwLT50b21ic3RvbmVzKys7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8q
IFRoZSBhcHBseSBmdW5jdGlvbiBoYXMgbm90IHJlcXVlc3RlZCBoYXNoIHNldCBtb2RpZmljYXRp
b24gc28gZXhpdCBlYXJseS4gKi8KLQlpZiAoZGVsdGEgPT0gb2JqZWN0KQotCQlyZXR1cm4gdHJ1
ZTsKLQotCS8qIEEgbW9kaWZpY2F0aW9uIG9yIGluc2VydGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQu
ICovCi0JY2tfaHNfbWFwX2JvdW5kX3NldChtYXAsIGgsIG5fcHJvYmVzKTsKLQotCWluc2VydCA9
IGNrX2hzX21hcnNoYWwoaHMtPm1vZGUsIGRlbHRhLCBoKTsKLQlpZiAoZmlyc3QgIT0gTlVMTCkg
ewotCQkvKgotCQkgKiBUaGlzIGZvbGxvd3MgdGhlIHNhbWUgc2VtYW50aWNzIGFzIGNrX2hzX3Nl
dCwgcGxlYXNlIHJlZmVyIHRvIHRoYXQKLQkJICogZnVuY3Rpb24gZm9yIGRvY3VtZW50YXRpb24u
Ci0JCSAqLwotCQlja19wcl9zdG9yZV9wdHIoZmlyc3QsIGluc2VydCk7Ci0KLQkJaWYgKG9iamVj
dCAhPSBOVUxMKSB7Ci0JCQlja19oc19tYXBfc2lnbmFsKG1hcCwgaCk7Ci0JCQlja19wcl9zdG9y
ZV9wdHIoc2xvdCwgQ0tfSFNfVE9NQlNUT05FKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qCi0JCSAq
IElmIHdlIGFyZSBzdG9yaW5nIGludG8gc2FtZSBzbG90LCB0aGVuIGF0b21pYyBzdG9yZSBpcyBz
dWZmaWNpZW50Ci0JCSAqIGZvciByZXBsYWNlbWVudC4KLQkJICovCi0JCWNrX3ByX3N0b3JlX3B0
cihzbG90LCBpbnNlcnQpOwotCX0KLQotCWlmIChvYmplY3QgPT0gTlVMTCkKLQkJY2tfaHNfbWFw
X3Bvc3RpbnNlcnQoaHMsIG1hcCk7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbAotY2tfaHNf
c2V0KHN0cnVjdCBja19ocyAqaHMsCi0gICAgdW5zaWduZWQgbG9uZyBoLAotICAgIGNvbnN0IHZv
aWQgKmtleSwKLSAgICB2b2lkICoqcHJldmlvdXMpCi17Ci0JY29uc3Qgdm9pZCAqKnNsb3QsICoq
Zmlyc3QsICpvYmplY3QsICppbnNlcnQ7Ci0JdW5zaWduZWQgbG9uZyBuX3Byb2JlczsKLQlzdHJ1
Y3QgY2tfaHNfbWFwICptYXA7Ci0KLQkqcHJldmlvdXMgPSBOVUxMOwotCi1yZXN0YXJ0OgotCW1h
cCA9IGhzLT5tYXA7Ci0KLQlzbG90ID0gY2tfaHNfbWFwX3Byb2JlKGhzLCBtYXAsICZuX3Byb2Jl
cywgJmZpcnN0LCBoLCBrZXksICZvYmplY3QsIG1hcC0+cHJvYmVfbGltaXQsIENLX0hTX1BST0JF
X0lOU0VSVCk7Ci0JaWYgKHNsb3QgPT0gTlVMTCAmJiBmaXJzdCA9PSBOVUxMKSB7Ci0JCWlmIChj
a19oc19ncm93KGhzLCBtYXAtPmNhcGFjaXR5IDw8IDEpID09IGZhbHNlKQotCQkJcmV0dXJuIGZh
bHNlOwotCi0JCWdvdG8gcmVzdGFydDsKLQl9Ci0KLQlja19oc19tYXBfYm91bmRfc2V0KG1hcCwg
aCwgbl9wcm9iZXMpOwotCWluc2VydCA9IGNrX2hzX21hcnNoYWwoaHMtPm1vZGUsIGtleSwgaCk7
Ci0KLQlpZiAoZmlyc3QgIT0gTlVMTCkgewotCQkvKiBJZiBhbiBlYXJsaWVyIGJ1Y2tldCB3YXMg
Zm91bmQsIHRoZW4gc3RvcmUgZW50cnkgdGhlcmUuICovCi0JCWNrX3ByX3N0b3JlX3B0cihmaXJz
dCwgaW5zZXJ0KTsKLQotCQkvKgotCQkgKiBJZiBhIGR1cGxpY2F0ZSBrZXkgd2FzIGZvdW5kLCB0
aGVuIGRlbGV0ZSBpdCBhZnRlcgotCQkgKiBzaWduYWxpbmcgY29uY3VycmVudCBwcm9iZXMgdG8g
cmVzdGFydC4gT3B0aW9uYWxseSwKLQkJICogaXQgaXMgcG9zc2libGUgdG8gaW5zdGFsbCB0b21i
c3RvbmUgYWZ0ZXIgZ3JhY2UKLQkJICogcGVyaW9kIGlmIHdlIGNhbiBndWFyYW50ZWUgZWFybGll
ciBwb3NpdGlvbiBvZgotCQkgKiBkdXBsaWNhdGUga2V5LgotCQkgKi8KLQkJaWYgKG9iamVjdCAh
PSBOVUxMKSB7Ci0JCQlja19oc19tYXBfc2lnbmFsKG1hcCwgaCk7Ci0JCQlja19wcl9zdG9yZV9w
dHIoc2xvdCwgQ0tfSFNfVE9NQlNUT05FKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIElm
IHdlIGFyZSBzdG9yaW5nIGludG8gc2FtZSBzbG90LCB0aGVuIGF0b21pYyBzdG9yZSBpcyBzdWZm
aWNpZW50Ci0JCSAqIGZvciByZXBsYWNlbWVudC4KLQkJICovCi0JCWNrX3ByX3N0b3JlX3B0cihz
bG90LCBpbnNlcnQpOwotCX0KLQotCWlmIChvYmplY3QgPT0gTlVMTCkKLQkJY2tfaHNfbWFwX3Bv
c3RpbnNlcnQoaHMsIG1hcCk7Ci0KLQkqcHJldmlvdXMgPSBDS19DQ19ERUNPTlNUX1BUUihvYmpl
Y3QpOwotCXJldHVybiB0cnVlOwotfQotCi1DS19DQ19JTkxJTkUgc3RhdGljIGJvb2wKLWNrX2hz
X3B1dF9pbnRlcm5hbChzdHJ1Y3QgY2tfaHMgKmhzLAotICAgIHVuc2lnbmVkIGxvbmcgaCwKLSAg
ICBjb25zdCB2b2lkICprZXksCi0gICAgZW51bSBja19oc19wcm9iZV9iZWhhdmlvciBiZWhhdmlv
cikKLXsKLQljb25zdCB2b2lkICoqc2xvdCwgKipmaXJzdCwgKm9iamVjdCwgKmluc2VydDsKLQl1
bnNpZ25lZCBsb25nIG5fcHJvYmVzOwotCXN0cnVjdCBja19oc19tYXAgKm1hcDsKLQotcmVzdGFy
dDoKLQltYXAgPSBocy0+bWFwOwotCi0Jc2xvdCA9IGNrX2hzX21hcF9wcm9iZShocywgbWFwLCAm
bl9wcm9iZXMsICZmaXJzdCwgaCwga2V5LCAmb2JqZWN0LAotCSAgICBtYXAtPnByb2JlX2xpbWl0
LCBiZWhhdmlvcik7Ci0KLQlpZiAoc2xvdCA9PSBOVUxMICYmIGZpcnN0ID09IE5VTEwpIHsKLQkJ
aWYgKGNrX2hzX2dyb3coaHMsIG1hcC0+Y2FwYWNpdHkgPDwgMSkgPT0gZmFsc2UpCi0JCQlyZXR1
cm4gZmFsc2U7Ci0KLQkJZ290byByZXN0YXJ0OwotCX0KLQotCS8qIEZhaWwgb3BlcmF0aW9uIGlm
IGEgbWF0Y2ggd2FzIGZvdW5kLiAqLwotCWlmIChvYmplY3QgIT0gTlVMTCkKLQkJcmV0dXJuIGZh
bHNlOwotCi0JY2tfaHNfbWFwX2JvdW5kX3NldChtYXAsIGgsIG5fcHJvYmVzKTsKLQlpbnNlcnQg
PSBja19oc19tYXJzaGFsKGhzLT5tb2RlLCBrZXksIGgpOwotCi0JaWYgKGZpcnN0ICE9IE5VTEwp
IHsKLQkJLyogSW5zZXJ0IGtleSBpbnRvIGZpcnN0IGJ1Y2tldCBpbiBwcm9iZSBzZXF1ZW5jZS4g
Ki8KLQkJY2tfcHJfc3RvcmVfcHRyKGZpcnN0LCBpbnNlcnQpOwotCX0gZWxzZSB7Ci0JCS8qIEFu
IGVtcHR5IHNsb3Qgd2FzIGZvdW5kLiAqLwotCQlja19wcl9zdG9yZV9wdHIoc2xvdCwgaW5zZXJ0
KTsKLQl9Ci0KLQlja19oc19tYXBfcG9zdGluc2VydChocywgbWFwKTsKLQlyZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbAotY2tfaHNfcHV0KHN0cnVjdCBja19ocyAqaHMsCi0gICAgdW5zaWduZWQgbG9u
ZyBoLAotICAgIGNvbnN0IHZvaWQgKmtleSkKLXsKLQotCXJldHVybiBja19oc19wdXRfaW50ZXJu
YWwoaHMsIGgsIGtleSwgQ0tfSFNfUFJPQkVfSU5TRVJUKTsKLX0KLQotYm9vbAotY2tfaHNfcHV0
X3VuaXF1ZShzdHJ1Y3QgY2tfaHMgKmhzLAotICAgIHVuc2lnbmVkIGxvbmcgaCwKLSAgICBjb25z
dCB2b2lkICprZXkpCi17Ci0KLQlyZXR1cm4gY2tfaHNfcHV0X2ludGVybmFsKGhzLCBoLCBrZXks
IENLX0hTX1BST0JFX1RPTUJTVE9ORSk7Ci19Ci0KLXZvaWQgKgotY2tfaHNfZ2V0KHN0cnVjdCBj
a19ocyAqaHMsCi0gICAgdW5zaWduZWQgbG9uZyBoLAotICAgIGNvbnN0IHZvaWQgKmtleSkKLXsK
LQljb25zdCB2b2lkICoqZmlyc3QsICpvYmplY3Q7Ci0Jc3RydWN0IGNrX2hzX21hcCAqbWFwOwot
CXVuc2lnbmVkIGxvbmcgbl9wcm9iZXM7Ci0JdW5zaWduZWQgaW50IGcsIGdfcCwgcHJvYmU7Ci0J
dW5zaWduZWQgaW50ICpnZW5lcmF0aW9uOwotCi0JZG8gewotCQltYXAgPSBja19wcl9sb2FkX3B0
cigmaHMtPm1hcCk7Ci0JCWdlbmVyYXRpb24gPSAmbWFwLT5nZW5lcmF0aW9uW2ggJiBDS19IU19H
X01BU0tdOwotCQlnID0gY2tfcHJfbG9hZF91aW50KGdlbmVyYXRpb24pOwotCQlwcm9iZSAgPSBj
a19oc19tYXBfYm91bmRfZ2V0KG1hcCwgaCk7Ci0JCWNrX3ByX2ZlbmNlX2xvYWQoKTsKLQotCQlj
a19oc19tYXBfcHJvYmUoaHMsIG1hcCwgJm5fcHJvYmVzLCAmZmlyc3QsIGgsIGtleSwgJm9iamVj
dCwgcHJvYmUsIENLX0hTX1BST0JFKTsKLQotCQlja19wcl9mZW5jZV9sb2FkKCk7Ci0JCWdfcCA9
IGNrX3ByX2xvYWRfdWludChnZW5lcmF0aW9uKTsKLQl9IHdoaWxlIChnICE9IGdfcCk7Ci0KLQly
ZXR1cm4gQ0tfQ0NfREVDT05TVF9QVFIob2JqZWN0KTsKLX0KLQotdm9pZCAqCi1ja19oc19yZW1v
dmUoc3RydWN0IGNrX2hzICpocywKLSAgICB1bnNpZ25lZCBsb25nIGgsCi0gICAgY29uc3Qgdm9p
ZCAqa2V5KQotewotCWNvbnN0IHZvaWQgKipzbG90LCAqKmZpcnN0LCAqb2JqZWN0OwotCXN0cnVj
dCBja19oc19tYXAgKm1hcCA9IGhzLT5tYXA7Ci0JdW5zaWduZWQgbG9uZyBuX3Byb2JlczsKLQot
CXNsb3QgPSBja19oc19tYXBfcHJvYmUoaHMsIG1hcCwgJm5fcHJvYmVzLCAmZmlyc3QsIGgsIGtl
eSwgJm9iamVjdCwKLQkgICAgY2tfaHNfbWFwX2JvdW5kX2dldChtYXAsIGgpLCBDS19IU19QUk9C
RSk7Ci0JaWYgKG9iamVjdCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWNrX3ByX3N0b3Jl
X3B0cihzbG90LCBDS19IU19UT01CU1RPTkUpOwotCW1hcC0+bl9lbnRyaWVzLS07Ci0JbWFwLT50
b21ic3RvbmVzKys7Ci0JcmV0dXJuIENLX0NDX0RFQ09OU1RfUFRSKG9iamVjdCk7Ci19Ci0KLWJv
b2wKLWNrX2hzX21vdmUoc3RydWN0IGNrX2hzICpocywKLSAgICBzdHJ1Y3QgY2tfaHMgKnNvdXJj
ZSwKLSAgICBja19oc19oYXNoX2NiX3QgKmhmLAotICAgIGNrX2hzX2NvbXBhcmVfY2JfdCAqY29t
cGFyZSwKLSAgICBzdHJ1Y3QgY2tfbWFsbG9jICptKQotewotCi0JaWYgKG0gPT0gTlVMTCB8fCBt
LT5tYWxsb2MgPT0gTlVMTCB8fCBtLT5mcmVlID09IE5VTEwgfHwgaGYgPT0gTlVMTCkKLQkJcmV0
dXJuIGZhbHNlOwotCi0JaHMtPm1vZGUgPSBzb3VyY2UtPm1vZGU7Ci0JaHMtPnNlZWQgPSBzb3Vy
Y2UtPnNlZWQ7Ci0JaHMtPm1hcCA9IHNvdXJjZS0+bWFwOwotCWhzLT5tID0gbTsKLQlocy0+aGYg
PSBoZjsKLQlocy0+Y29tcGFyZSA9IGNvbXBhcmU7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wK
LWNrX2hzX2luaXQoc3RydWN0IGNrX2hzICpocywKLSAgICB1bnNpZ25lZCBpbnQgbW9kZSwKLSAg
ICBja19oc19oYXNoX2NiX3QgKmhmLAotICAgIGNrX2hzX2NvbXBhcmVfY2JfdCAqY29tcGFyZSwK
LSAgICBzdHJ1Y3QgY2tfbWFsbG9jICptLAotICAgIHVuc2lnbmVkIGxvbmcgbl9lbnRyaWVzLAot
ICAgIHVuc2lnbmVkIGxvbmcgc2VlZCkKLXsKLQotCWlmIChtID09IE5VTEwgfHwgbS0+bWFsbG9j
ID09IE5VTEwgfHwgbS0+ZnJlZSA9PSBOVUxMIHx8IGhmID09IE5VTEwpCi0JCXJldHVybiBmYWxz
ZTsKLQotCWhzLT5tID0gbTsKLQlocy0+bW9kZSA9IG1vZGU7Ci0JaHMtPnNlZWQgPSBzZWVkOwot
CWhzLT5oZiA9IGhmOwotCWhzLT5jb21wYXJlID0gY29tcGFyZTsKLQotCWhzLT5tYXAgPSBja19o
c19tYXBfY3JlYXRlKGhzLCBuX2VudHJpZXMpOwotCXJldHVybiBocy0+bWFwICE9IE5VTEw7Ci19
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9jay9zcmMvY2tfaHQu
YyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9ja19odC5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzg2NGM1NzE0YzJmMzc2NWFhM2Y3NTgzOGZmYzQ4OWM1
ZmFiOGQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9ja19odC5jCisrKyAvZGV2L251bGwK
QEAgLTEsMTAzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTItMjAxNSBTYW15IEFsIEJh
aHJhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jZGVmaW5lIENLX0hUX0lNCi0jaW5j
bHVkZSA8Y2tfaHQuaD4KLQotLyoKLSAqIFRoaXMgaW1wbGVtZW50YXRpb24gYm9ycm93cyBzZXZl
cmFsIHRlY2huaXF1ZXMgZnJvbSBKb3NoIER5Ym5pcydzCi0gKiBuYmRzIGxpYnJhcnkgd2hpY2gg
Y2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9uYmRzCi0gKgotICogVGhp
cyByZWxlYXNlIGN1cnJlbnRseSBvbmx5IGluY2x1ZGVzIHN1cHBvcnQgZm9yIDY0LWJpdCBwbGF0
Zm9ybXMuCi0gKiBXZSBjYW4gYWRkcmVzcyAzMi1iaXQgcGxhdGZvcm1zIGluIGEgZnV0dXJlIHJl
bGVhc2UuCi0gKi8KLSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNrX21kLmg+Ci0jaW5j
bHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRlIDxja19zdGRpbnQuaD4KLSNpbmNsdWRlIDxja19zdGRi
b29sLmg+Ci0jaW5jbHVkZSA8Y2tfc3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJja19odF9oYXNoLmgi
Ci0jaW5jbHVkZSAiY2tfaW50ZXJuYWwuaCIKLQotI2lmbmRlZiBDS19IVF9CVUNLRVRfTEVOR1RI
Ci0KLSNpZmRlZiBDS19IVF9QUAotI2RlZmluZSBDS19IVF9CVUNLRVRfU0hJRlQgMlVMTAotI2Vs
c2UKLSNkZWZpbmUgQ0tfSFRfQlVDS0VUX1NISUZUIDFVTEwKLSNlbmRpZgotCi0jZGVmaW5lIENL
X0hUX0JVQ0tFVF9MRU5HVEggKDFVIDw8IENLX0hUX0JVQ0tFVF9TSElGVCkKLSNkZWZpbmUgQ0tf
SFRfQlVDS0VUX01BU0sgKENLX0hUX0JVQ0tFVF9MRU5HVEggLSAxKQotI2VuZGlmCi0KLSNpZm5k
ZWYgQ0tfSFRfUFJPQkVfREVGQVVMVAotI2RlZmluZSBDS19IVF9QUk9CRV9ERUZBVUxUIDY0VUxM
Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ0tfRl9QUl9MT0FEXzgpICYmIGRlZmluZWQoQ0tfRl9Q
Ul9TVE9SRV84KQotI2RlZmluZSBDS19IVF9XT1JECSAgICB1aW50OF90Ci0jZGVmaW5lIENLX0hU
X1dPUkRfTUFYCSAgICBVSU5UOF9NQVgKLSNkZWZpbmUgQ0tfSFRfU1RPUkUoeCwgeSkgICBja19w
cl9zdG9yZV84KHgsIHkpCi0jZGVmaW5lIENLX0hUX0xPQUQoeCkJICAgIGNrX3ByX2xvYWRfOCh4
KQotI2VsaWYgZGVmaW5lZChDS19GX1BSX0xPQURfMTYpICYmIGRlZmluZWQoQ0tfRl9QUl9TVE9S
RV8xNikKLSNkZWZpbmUgQ0tfSFRfV09SRAkgICAgdWludDE2X3QKLSNkZWZpbmUgQ0tfSFRfV09S
RF9NQVgJICAgIFVJTlQxNl9NQVgKLSNkZWZpbmUgQ0tfSFRfU1RPUkUoeCwgeSkgICBja19wcl9z
dG9yZV8xNih4LCB5KQotI2RlZmluZSBDS19IVF9MT0FEKHgpCSAgICBja19wcl9sb2FkXzE2KHgp
Ci0jZWxpZiBkZWZpbmVkKENLX0ZfUFJfTE9BRF8zMikgJiYgZGVmaW5lZChDS19GX1BSX1NUT1JF
XzMyKQotI2RlZmluZSBDS19IVF9XT1JECSAgICB1aW50MzJfdAotI2RlZmluZSBDS19IVF9XT1JE
X01BWAkgICAgVUlOVDMyX01BWAotI2RlZmluZSBDS19IVF9TVE9SRSh4LCB5KSAgIGNrX3ByX3N0
b3JlXzMyKHgsIHkpCi0jZGVmaW5lIENLX0hUX0xPQUQoeCkJICAgIGNrX3ByX2xvYWRfMzIoeCkK
LSNlbHNlCi0jZXJyb3IgImNrX2h0IGlzIG5vdCBzdXBwb3J0ZWQgb24geW91ciBwbGF0Zm9ybS4i
Ci0jZW5kaWYKLQotc3RydWN0IGNrX2h0X21hcCB7Ci0JdW5zaWduZWQgaW50IG1vZGU7Ci0JQ0tf
SFRfVFlQRSBkZWxldGlvbnM7Ci0JQ0tfSFRfVFlQRSBwcm9iZV9tYXhpbXVtOwotCUNLX0hUX1RZ
UEUgcHJvYmVfbGVuZ3RoOwotCUNLX0hUX1RZUEUgcHJvYmVfbGltaXQ7Ci0JQ0tfSFRfVFlQRSBz
aXplOwotCUNLX0hUX1RZUEUgbl9lbnRyaWVzOwotCUNLX0hUX1RZUEUgbWFzazsKLQlDS19IVF9U
WVBFIGNhcGFjaXR5OwotCUNLX0hUX1RZUEUgc3RlcDsKLQlDS19IVF9XT1JEICpwcm9iZV9ib3Vu
ZDsKLQlzdHJ1Y3QgY2tfaHRfZW50cnkgKmVudHJpZXM7Ci19OwotCi12b2lkCi1ja19odF9zdGF0
KHN0cnVjdCBja19odCAqdGFibGUsCi0gICAgc3RydWN0IGNrX2h0X3N0YXQgKnN0KQotewotCXN0
cnVjdCBja19odF9tYXAgKm1hcCA9IHRhYmxlLT5tYXA7Ci0KLQlzdC0+bl9lbnRyaWVzID0gbWFw
LT5uX2VudHJpZXM7Ci0Jc3QtPnByb2JlX21heGltdW0gPSBtYXAtPnByb2JlX21heGltdW07Ci0J
cmV0dXJuOwotfQotCi12b2lkCi1ja19odF9oYXNoKHN0cnVjdCBja19odF9oYXNoICpoLAotICAg
IHN0cnVjdCBja19odCAqdGFibGUsCi0gICAgY29uc3Qgdm9pZCAqa2V5LAotICAgIHVpbnQxNl90
IGtleV9sZW5ndGgpCi17Ci0KLQl0YWJsZS0+aChoLCBrZXksIGtleV9sZW5ndGgsIHRhYmxlLT5z
ZWVkKTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQKLWNrX2h0X2hhc2hfZGlyZWN0KHN0cnVjdCBja19o
dF9oYXNoICpoLAotICAgIHN0cnVjdCBja19odCAqdGFibGUsCi0gICAgdWludHB0cl90IGtleSkK
LXsKLQotCWNrX2h0X2hhc2goaCwgdGFibGUsICZrZXksIHNpemVvZihrZXkpKTsKLQlyZXR1cm47
Ci19Ci0KLXN0YXRpYyB2b2lkCi1ja19odF9oYXNoX3dyYXBwZXIoc3RydWN0IGNrX2h0X2hhc2gg
KmgsCi0gICAgY29uc3Qgdm9pZCAqa2V5LAotICAgIHNpemVfdCBsZW5ndGgsCi0gICAgdWludDY0
X3Qgc2VlZCkKLXsKLQotCWgtPnZhbHVlID0gKHVuc2lnbmVkIGxvbmcpTXVybXVySGFzaDY0QShr
ZXksIGxlbmd0aCwgc2VlZCk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgc3RydWN0IGNrX2h0X21h
cCAqCi1ja19odF9tYXBfY3JlYXRlKHN0cnVjdCBja19odCAqdGFibGUsIENLX0hUX1RZUEUgZW50
cmllcykKLXsKLQlzdHJ1Y3QgY2tfaHRfbWFwICptYXA7Ci0JQ0tfSFRfVFlQRSBzaXplOwotCXVp
bnRwdHJfdCBwcmVmaXg7Ci0JdWludDMyX3Qgbl9lbnRyaWVzOwotCi0Jbl9lbnRyaWVzID0gY2tf
aW50ZXJuYWxfcG93ZXJfMihlbnRyaWVzKTsKLQlpZiAobl9lbnRyaWVzIDwgQ0tfSFRfQlVDS0VU
X0xFTkdUSCkKLQkJbl9lbnRyaWVzID0gQ0tfSFRfQlVDS0VUX0xFTkdUSDsKLQotCXNpemUgPSBz
aXplb2Yoc3RydWN0IGNrX2h0X21hcCkgKwotCQkgICAoc2l6ZW9mKHN0cnVjdCBja19odF9lbnRy
eSkgKiBuX2VudHJpZXMgKyBDS19NRF9DQUNIRUxJTkUgLSAxKTsKLQotCWlmICh0YWJsZS0+bW9k
ZSAmIENLX0hUX1dPUktMT0FEX0RFTEVURSkgewotCQlwcmVmaXggPSBzaXplb2YoQ0tfSFRfV09S
RCkgKiBuX2VudHJpZXM7Ci0JCXNpemUgKz0gcHJlZml4OwotCX0gZWxzZSB7Ci0JCXByZWZpeCA9
IDA7Ci0JfQotCi0JbWFwID0gdGFibGUtPm0tPm1hbGxvYyhzaXplKTsKLQlpZiAobWFwID09IE5V
TEwpCi0JCXJldHVybiBOVUxMOwotCi0JbWFwLT5tb2RlID0gdGFibGUtPm1vZGU7Ci0JbWFwLT5z
aXplID0gc2l6ZTsKLQltYXAtPnByb2JlX2xpbWl0ID0gY2tfaW50ZXJuYWxfbWF4XzY0KG5fZW50
cmllcyA+PgotCSAgICAoQ0tfSFRfQlVDS0VUX1NISUZUICsgMiksIENLX0hUX1BST0JFX0RFRkFV
TFQpOwotCi0JbWFwLT5kZWxldGlvbnMgPSAwOwotCW1hcC0+cHJvYmVfbWF4aW11bSA9IDA7Ci0J
bWFwLT5jYXBhY2l0eSA9IG5fZW50cmllczsKLQltYXAtPnN0ZXAgPSBja19pbnRlcm5hbF9ic2Zf
NjQobWFwLT5jYXBhY2l0eSk7Ci0JbWFwLT5tYXNrID0gbWFwLT5jYXBhY2l0eSAtIDE7Ci0JbWFw
LT5uX2VudHJpZXMgPSAwOwotCW1hcC0+ZW50cmllcyA9IChzdHJ1Y3QgY2tfaHRfZW50cnkgKiko
KCh1aW50cHRyX3QpJm1hcFsxXSArIHByZWZpeCArCi0JICAgIENLX01EX0NBQ0hFTElORSAtIDEp
ICYgfihDS19NRF9DQUNIRUxJTkUgLSAxKSk7Ci0KLQlpZiAodGFibGUtPm1vZGUgJiBDS19IVF9X
T1JLTE9BRF9ERUxFVEUpIHsKLQkJbWFwLT5wcm9iZV9ib3VuZCA9IChDS19IVF9XT1JEICopJm1h
cFsxXTsKLQkJbWVtc2V0KG1hcC0+cHJvYmVfYm91bmQsIDAsIHByZWZpeCk7Ci0JfSBlbHNlIHsK
LQkJbWFwLT5wcm9iZV9ib3VuZCA9IE5VTEw7Ci0JfQotCi0JbWVtc2V0KG1hcC0+ZW50cmllcywg
MCwgc2l6ZW9mKHN0cnVjdCBja19odF9lbnRyeSkgKiBuX2VudHJpZXMpOwotCWNrX3ByX2ZlbmNl
X3N0b3JlKCk7Ci0JcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1ja19odF9t
YXBfYm91bmRfc2V0KHN0cnVjdCBja19odF9tYXAgKm0sCi0gICAgc3RydWN0IGNrX2h0X2hhc2gg
aCwKLSAgICBDS19IVF9UWVBFIG5fcHJvYmVzKQotewotCUNLX0hUX1RZUEUgb2Zmc2V0ID0gaC52
YWx1ZSAmIG0tPm1hc2s7Ci0KLQlpZiAobl9wcm9iZXMgPiBtLT5wcm9iZV9tYXhpbXVtKQotCQlD
S19IVF9UWVBFX1NUT1JFKCZtLT5wcm9iZV9tYXhpbXVtLCBuX3Byb2Jlcyk7Ci0KLQlpZiAobS0+
cHJvYmVfYm91bmQgIT0gTlVMTCAmJiBtLT5wcm9iZV9ib3VuZFtvZmZzZXRdIDwgbl9wcm9iZXMp
IHsKLQkJaWYgKG5fcHJvYmVzID49IENLX0hUX1dPUkRfTUFYKQotCQkJbl9wcm9iZXMgPSBDS19I
VF9XT1JEX01BWDsKLQotCQlDS19IVF9TVE9SRSgmbS0+cHJvYmVfYm91bmRbb2Zmc2V0XSwgbl9w
cm9iZXMpOwotCQlja19wcl9mZW5jZV9zdG9yZSgpOwotCX0KLQotCXJldHVybjsKLX0KLQotc3Rh
dGljIGlubGluZSBDS19IVF9UWVBFCi1ja19odF9tYXBfYm91bmRfZ2V0KHN0cnVjdCBja19odF9t
YXAgKm0sIHN0cnVjdCBja19odF9oYXNoIGgpCi17Ci0JQ0tfSFRfVFlQRSBvZmZzZXQgPSBoLnZh
bHVlICYgbS0+bWFzazsKLQlDS19IVF9UWVBFIHIgPSBDS19IVF9XT1JEX01BWDsKLQotCWlmICht
LT5wcm9iZV9ib3VuZCAhPSBOVUxMKSB7Ci0JCXIgPSBDS19IVF9MT0FEKCZtLT5wcm9iZV9ib3Vu
ZFtvZmZzZXRdKTsKLQkJaWYgKHIgPT0gQ0tfSFRfV09SRF9NQVgpCi0JCQlyID0gQ0tfSFRfVFlQ
RV9MT0FEKCZtLT5wcm9iZV9tYXhpbXVtKTsKLQl9IGVsc2UgewotCQlyID0gQ0tfSFRfVFlQRV9M
T0FEKCZtLT5wcm9iZV9tYXhpbXVtKTsKLQl9Ci0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIHZv
aWQKLWNrX2h0X21hcF9kZXN0cm95KHN0cnVjdCBja19tYWxsb2MgKm0sIHN0cnVjdCBja19odF9t
YXAgKm1hcCwgYm9vbCBkZWZlcikKLXsKLQotCW0tPmZyZWUobWFwLCBtYXAtPnNpemUsIGRlZmVy
KTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci1ja19odF9tYXBfcHJvYmVf
bmV4dChzdHJ1Y3QgY2tfaHRfbWFwICptYXAsIHNpemVfdCBvZmZzZXQsIGNrX2h0X2hhc2hfdCBo
LCBzaXplX3QgcHJvYmVzKQotewotCWNrX2h0X2hhc2hfdCByOwotCXNpemVfdCBzdHJpZGU7Ci0J
dW5zaWduZWQgbG9uZyBsZXZlbCA9ICh1bnNpZ25lZCBsb25nKXByb2JlcyA+PiBDS19IVF9CVUNL
RVRfU0hJRlQ7Ci0KLQlyLnZhbHVlID0gKGgudmFsdWUgPj4gbWFwLT5zdGVwKSA+PiBsZXZlbDsK
LQlzdHJpZGUgPSAoci52YWx1ZSAmIH5DS19IVF9CVUNLRVRfTUFTSykgPDwgMQotCQkgICAgIHwg
KHIudmFsdWUgJiBDS19IVF9CVUNLRVRfTUFTSyk7Ci0KLQlyZXR1cm4gKG9mZnNldCArIGxldmVs
ICsKLQkgICAgKHN0cmlkZSB8IENLX0hUX0JVQ0tFVF9MRU5HVEgpKSAmIG1hcC0+bWFzazsKLX0K
LQotYm9vbAotY2tfaHRfaW5pdChzdHJ1Y3QgY2tfaHQgKnRhYmxlLAotICAgIHVuc2lnbmVkIGlu
dCBtb2RlLAotICAgIGNrX2h0X2hhc2hfY2JfdCAqaCwKLSAgICBzdHJ1Y3QgY2tfbWFsbG9jICpt
LAotICAgIENLX0hUX1RZUEUgZW50cmllcywKLSAgICB1aW50NjRfdCBzZWVkKQotewotCi0JaWYg
KG0gPT0gTlVMTCB8fCBtLT5tYWxsb2MgPT0gTlVMTCB8fCBtLT5mcmVlID09IE5VTEwpCi0JCXJl
dHVybiBmYWxzZTsKLQotCXRhYmxlLT5tID0gbTsKLQl0YWJsZS0+bW9kZSA9IG1vZGU7Ci0JdGFi
bGUtPnNlZWQgPSBzZWVkOwotCi0JaWYgKGggPT0gTlVMTCkgewotCQl0YWJsZS0+aCA9IGNrX2h0
X2hhc2hfd3JhcHBlcjsKLQl9IGVsc2UgewotCQl0YWJsZS0+aCA9IGg7Ci0JfQotCi0JdGFibGUt
Pm1hcCA9IGNrX2h0X21hcF9jcmVhdGUodGFibGUsIGVudHJpZXMpOwotCXJldHVybiB0YWJsZS0+
bWFwICE9IE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2tfaHRfZW50cnkgKgotY2tfaHRfbWFw
X3Byb2JlX3dyKHN0cnVjdCBja19odF9tYXAgKm1hcCwKLSAgICBja19odF9oYXNoX3QgaCwKLSAg
ICBja19odF9lbnRyeV90ICpzbmFwc2hvdCwKLSAgICBja19odF9lbnRyeV90ICoqYXZhaWxhYmxl
LAotICAgIGNvbnN0IHZvaWQgKmtleSwKLSAgICB1aW50MTZfdCBrZXlfbGVuZ3RoLAotICAgIENL
X0hUX1RZUEUgKnByb2JlX2xpbWl0LAotICAgIENLX0hUX1RZUEUgKnByb2JlX3dyKQotewotCXN0
cnVjdCBja19odF9lbnRyeSAqYnVja2V0LCAqY3Vyc29yOwotCXN0cnVjdCBja19odF9lbnRyeSAq
Zmlyc3QgPSBOVUxMOwotCXNpemVfdCBvZmZzZXQsIGksIGo7Ci0JQ0tfSFRfVFlQRSBwcm9iZXMg
PSAwOwotCUNLX0hUX1RZUEUgbGltaXQ7Ci0KLQlpZiAocHJvYmVfbGltaXQgPT0gTlVMTCkgewot
CQlsaW1pdCA9IGNrX2h0X21hcF9ib3VuZF9nZXQobWFwLCBoKTsKLQl9IGVsc2UgewotCQlsaW1p
dCA9IENLX0hUX1RZUEVfTUFYOwotCX0KLQotCW9mZnNldCA9IGgudmFsdWUgJiBtYXAtPm1hc2s7
Ci0JZm9yIChpID0gMDsgaSA8IG1hcC0+cHJvYmVfbGltaXQ7IGkrKykgewotCQkvKgotCQkgKiBQ
cm9iZSBvbiBhIGNvbXBsZXRlIGNhY2hlIGxpbmUgZmlyc3QuIFNjYW4gZm9yd2FyZCBhbmQgd3Jh
cCBhcm91bmQgdG8KLQkJICogdGhlIGJlZ2lubmluZyBvZiB0aGUgY2FjaGUgbGluZS4gT25seSB3
aGVuIHRoZSBjb21wbGV0ZSBjYWNoZSBsaW5lIGhhcwotCQkgKiBiZWVuIHNjYW5uZWQgZG8gd2Ug
bW92ZSBvbiB0byB0aGUgbmV4dCByb3cuCi0JCSAqLwotCQlidWNrZXQgPSAodm9pZCAqKSgodWlu
dHB0cl90KShtYXAtPmVudHJpZXMgKyBvZmZzZXQpICYKLQkJCSAgICAgfihDS19NRF9DQUNIRUxJ
TkUgLSAxKSk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IENLX0hUX0JVQ0tFVF9MRU5HVEg7IGorKykg
ewotCQkJdWludDE2X3QgazsKLQotCQkJaWYgKHByb2JlcysrID4gbGltaXQpCi0JCQkJYnJlYWs7
Ci0KLQkJCWN1cnNvciA9IGJ1Y2tldCArICgoaiArIG9mZnNldCkgJiAoQ0tfSFRfQlVDS0VUX0xF
TkdUSCAtIDEpKTsKLQotCQkJLyoKLQkJCSAqIEl0IGlzIHByb2JhYmx5IHdvcnRoIGl0IHRvIGVu
Y2Fwc3VsYXRlIHByb2JlIHN0YXRlCi0JCQkgKiBpbiBvcmRlciB0byBwcmV2ZW50IGEgY29tcGxl
dGUgcmVwcm9iZSBzZXF1ZW5jZSBpbgotCQkJICogdGhlIGNhc2Ugb2YgaW50ZXJtaXR0ZW50IHdy
aXRlcnMuCi0JCQkgKi8KLQkJCWlmIChjdXJzb3ItPmtleSA9PSBDS19IVF9LRVlfVE9NQlNUT05F
KSB7Ci0JCQkJaWYgKGZpcnN0ID09IE5VTEwpIHsKLQkJCQkJZmlyc3QgPSBjdXJzb3I7Ci0JCQkJ
CSpwcm9iZV93ciA9IHByb2JlczsKLQkJCQl9Ci0KLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJ
aWYgKGN1cnNvci0+a2V5ID09IENLX0hUX0tFWV9FTVBUWSkKLQkJCQlnb3RvIGxlYXZlOwotCi0J
CQlpZiAoY3Vyc29yLT5rZXkgPT0gKHVpbnRwdHJfdClrZXkpCi0JCQkJZ290byBsZWF2ZTsKLQot
CQkJaWYgKG1hcC0+bW9kZSAmIENLX0hUX01PREVfQllURVNUUklORykgewotCQkJCXZvaWQgKnBv
aW50ZXI7Ci0KLQkJCQkvKgotCQkJCSAqIENoZWNrIG1lbW9pemVkIHBvcnRpb24gb2YgaGFzaCB2
YWx1ZSBiZWZvcmUKLQkJCQkgKiBleHBlbnNpdmUgZnVsbC1sZW5ndGggY29tcGFyaXNvbi4KLQkJ
CQkgKi8KLQkJCQlrID0gY2tfaHRfZW50cnlfa2V5X2xlbmd0aChjdXJzb3IpOwotCQkJCWlmIChr
ICE9IGtleV9sZW5ndGgpCi0JCQkJCWNvbnRpbnVlOwotCi0jaWZkZWYgQ0tfSFRfUFAKLQkJCQlp
ZiAoKGN1cnNvci0+dmFsdWUgPj4gQ0tfTURfVk1BX0JJVFMpICE9ICgoaC52YWx1ZSA+PiAzMikg
JiBDS19IVF9LRVlfTUFTSykpCi0JCQkJCWNvbnRpbnVlOwotI2Vsc2UKLQkJCQlpZiAoY3Vyc29y
LT5oYXNoICE9IGgudmFsdWUpCi0JCQkJCWNvbnRpbnVlOwotI2VuZGlmCi0KLQkJCQlwb2ludGVy
ID0gY2tfaHRfZW50cnlfa2V5KGN1cnNvcik7Ci0JCQkJaWYgKG1lbWNtcChwb2ludGVyLCBrZXks
IGtleV9sZW5ndGgpID09IDApCi0JCQkJCWdvdG8gbGVhdmU7Ci0JCQl9Ci0JCX0KLQotCQlvZmZz
ZXQgPSBja19odF9tYXBfcHJvYmVfbmV4dChtYXAsIG9mZnNldCwgaCwgcHJvYmVzKTsKLQl9Ci0K
LQljdXJzb3IgPSBOVUxMOwotCi1sZWF2ZToKLQlpZiAocHJvYmVfbGltaXQgIT0gTlVMTCkgewot
CQkqcHJvYmVfbGltaXQgPSBwcm9iZXM7Ci0JfSBlbHNlIGlmIChmaXJzdCA9PSBOVUxMKSB7Ci0J
CSpwcm9iZV93ciA9IHByb2JlczsKLQl9Ci0KLQkqYXZhaWxhYmxlID0gZmlyc3Q7Ci0KLQlpZiAo
Y3Vyc29yICE9IE5VTEwpIHsKLQkJKnNuYXBzaG90ID0gKmN1cnNvcjsKLQl9Ci0KLQlyZXR1cm4g
Y3Vyc29yOwotfQotCi1ib29sCi1ja19odF9nYyhzdHJ1Y3QgY2tfaHQgKmh0LCB1bnNpZ25lZCBs
b25nIGN5Y2xlcywgdW5zaWduZWQgbG9uZyBzZWVkKQotewotCUNLX0hUX1dPUkQgKmJvdW5kcyA9
IE5VTEw7Ci0Jc3RydWN0IGNrX2h0X21hcCAqbWFwID0gaHQtPm1hcDsKLQlDS19IVF9UWVBFIG1h
eGltdW0sIGk7Ci0JQ0tfSFRfVFlQRSBzaXplID0gMDsKLQotCWlmIChtYXAtPm5fZW50cmllcyA9
PSAwKSB7Ci0JCUNLX0hUX1RZUEVfU1RPUkUoJm1hcC0+cHJvYmVfbWF4aW11bSwgMCk7Ci0JCWlm
IChtYXAtPnByb2JlX2JvdW5kICE9IE5VTEwpCi0JCQltZW1zZXQobWFwLT5wcm9iZV9ib3VuZCwg
MCwgc2l6ZW9mKENLX0hUX1dPUkQpICogbWFwLT5jYXBhY2l0eSk7Ci0KLQkJcmV0dXJuIHRydWU7
Ci0JfQotCi0JaWYgKGN5Y2xlcyA9PSAwKSB7Ci0JCW1heGltdW0gPSAwOwotCi0JCWlmIChtYXAt
PnByb2JlX2JvdW5kICE9IE5VTEwpIHsKLQkJCXNpemUgPSBzaXplb2YoQ0tfSFRfV09SRCkgKiBt
YXAtPmNhcGFjaXR5OwotCQkJYm91bmRzID0gaHQtPm0tPm1hbGxvYyhzaXplKTsKLQkJCWlmIChi
b3VuZHMgPT0gTlVMTCkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0KLQkJCW1lbXNldChib3VuZHMsIDAs
IHNpemUpOwotCQl9Ci0JfSBlbHNlIHsKLQkJbWF4aW11bSA9IG1hcC0+cHJvYmVfbWF4aW11bTsK
LQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbWFwLT5jYXBhY2l0eTsgaSsrKSB7Ci0JCXN0cnVjdCBj
a19odF9lbnRyeSAqZW50cnksICpwcmlvcml0eSwgc25hcHNob3Q7Ci0JCXN0cnVjdCBja19odF9o
YXNoIGg7Ci0JCUNLX0hUX1RZUEUgcHJvYmVzX3dyOwotCQlDS19IVF9UWVBFIG9mZnNldDsKLQot
CQllbnRyeSA9ICZtYXAtPmVudHJpZXNbKGkgKyBzZWVkKSAmIG1hcC0+bWFza107Ci0JCWlmIChl
bnRyeS0+a2V5ID09IENLX0hUX0tFWV9FTVBUWSB8fAotCQkgICAgZW50cnktPmtleSA9PSBDS19I
VF9LRVlfVE9NQlNUT05FKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChodC0+bW9kZSAm
IENLX0hUX01PREVfQllURVNUUklORykgewotI2lmbmRlZiBDS19IVF9QUAotCQkJaC52YWx1ZSA9
IGVudHJ5LT5oYXNoOwotI2Vsc2UKLQkJCWh0LT5oKCZoLCBja19odF9lbnRyeV9rZXkoZW50cnkp
LCBja19odF9lbnRyeV9rZXlfbGVuZ3RoKGVudHJ5KSwKLQkJCSAgICBodC0+c2VlZCk7Ci0jZW5k
aWYKLQkJCWVudHJ5ID0gY2tfaHRfbWFwX3Byb2JlX3dyKG1hcCwgaCwgJnNuYXBzaG90LCAmcHJp
b3JpdHksCi0JCQkgICAgY2tfaHRfZW50cnlfa2V5KGVudHJ5KSwKLQkJCSAgICBja19odF9lbnRy
eV9rZXlfbGVuZ3RoKGVudHJ5KSwKLQkJCSAgICBOVUxMLCAmcHJvYmVzX3dyKTsKLQkJfSBlbHNl
IHsKLSNpZm5kZWYgQ0tfSFRfUFAKLQkJCWgudmFsdWUgPSBlbnRyeS0+aGFzaDsKLSNlbHNlCi0J
CQlodC0+aCgmaCwgJmVudHJ5LT5rZXksIHNpemVvZihlbnRyeS0+a2V5KSwgaHQtPnNlZWQpOwot
I2VuZGlmCi0JCQllbnRyeSA9IGNrX2h0X21hcF9wcm9iZV93cihtYXAsIGgsICZzbmFwc2hvdCwg
JnByaW9yaXR5LAotCQkJICAgICh2b2lkICopZW50cnktPmtleSwKLQkJCSAgICBzaXplb2YoZW50
cnktPmtleSksCi0JCQkgICAgTlVMTCwgJnByb2Jlc193cik7Ci0JCX0KLQotCQlvZmZzZXQgPSBo
LnZhbHVlICYgbWFwLT5tYXNrOwotCi0JCWlmIChwcmlvcml0eSAhPSBOVUxMKSB7Ci0JCQlDS19I
VF9UWVBFX1NUT1JFKCZtYXAtPmRlbGV0aW9ucywgbWFwLT5kZWxldGlvbnMgKyAxKTsKLQkJCWNr
X3ByX2ZlbmNlX3N0b3JlKCk7Ci0jaWZuZGVmIENLX0hUX1BQCi0JCQlDS19IVF9UWVBFX1NUT1JF
KCZwcmlvcml0eS0+a2V5X2xlbmd0aCwgZW50cnktPmtleV9sZW5ndGgpOwotCQkJQ0tfSFRfVFlQ
RV9TVE9SRSgmcHJpb3JpdHktPmhhc2gsIGVudHJ5LT5oYXNoKTsKLSNlbmRpZgotCQkJY2tfcHJf
c3RvcmVfcHRyX3Vuc2FmZSgmcHJpb3JpdHktPnZhbHVlLCAodm9pZCAqKWVudHJ5LT52YWx1ZSk7
Ci0JCQlja19wcl9mZW5jZV9zdG9yZSgpOwotCQkJY2tfcHJfc3RvcmVfcHRyX3Vuc2FmZSgmcHJp
b3JpdHktPmtleSwgKHZvaWQgKillbnRyeS0+a2V5KTsKLQkJCWNrX3ByX2ZlbmNlX3N0b3JlKCk7
Ci0JCQlDS19IVF9UWVBFX1NUT1JFKCZtYXAtPmRlbGV0aW9ucywgbWFwLT5kZWxldGlvbnMgKyAx
KTsKLQkJCWNrX3ByX2ZlbmNlX3N0b3JlKCk7Ci0JCQlja19wcl9zdG9yZV9wdHJfdW5zYWZlKCZl
bnRyeS0+a2V5LCAodm9pZCAqKUNLX0hUX0tFWV9UT01CU1RPTkUpOwotCQkJY2tfcHJfZmVuY2Vf
c3RvcmUoKTsKLQkJfQotCi0JCWlmIChjeWNsZXMgPT0gMCkgewotCQkJaWYgKHByb2Jlc193ciA+
IG1heGltdW0pCi0JCQkJbWF4aW11bSA9IHByb2Jlc193cjsKLQotCQkJaWYgKHByb2Jlc193ciA+
PSBDS19IVF9XT1JEX01BWCkKLQkJCQlwcm9iZXNfd3IgPSBDS19IVF9XT1JEX01BWDsKLQotCQkJ
aWYgKGJvdW5kcyAhPSBOVUxMICYmIHByb2Jlc193ciA+IGJvdW5kc1tvZmZzZXRdKQotCQkJCWJv
dW5kc1tvZmZzZXRdID0gcHJvYmVzX3dyOwotCQl9IGVsc2UgaWYgKC0tY3ljbGVzID09IDApCi0J
CQlicmVhazsKLQl9Ci0KLQlpZiAobWF4aW11bSAhPSBtYXAtPnByb2JlX21heGltdW0pCi0JCUNL
X0hUX1RZUEVfU1RPUkUoJm1hcC0+cHJvYmVfbWF4aW11bSwgbWF4aW11bSk7Ci0KLQlpZiAoYm91
bmRzICE9IE5VTEwpIHsKLQkJZm9yIChpID0gMDsgaSA8IG1hcC0+Y2FwYWNpdHk7IGkrKykKLQkJ
CUNLX0hUX1NUT1JFKCZtYXAtPnByb2JlX2JvdW5kW2ldLCBib3VuZHNbaV0pOwotCi0JCWh0LT5t
LT5mcmVlKGJvdW5kcywgc2l6ZSwgZmFsc2UpOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgc3RydWN0IGNrX2h0X2VudHJ5ICoKLWNrX2h0X21hcF9wcm9iZV9yZChzdHJ1Y3QgY2tf
aHRfbWFwICptYXAsCi0gICAgY2tfaHRfaGFzaF90IGgsCi0gICAgY2tfaHRfZW50cnlfdCAqc25h
cHNob3QsCi0gICAgY29uc3Qgdm9pZCAqa2V5LAotICAgIHVpbnQxNl90IGtleV9sZW5ndGgpCi17
Ci0Jc3RydWN0IGNrX2h0X2VudHJ5ICpidWNrZXQsICpjdXJzb3I7Ci0Jc2l6ZV90IG9mZnNldCwg
aSwgajsKLQlDS19IVF9UWVBFIHByb2JlcyA9IDA7Ci0JQ0tfSFRfVFlQRSBwcm9iZV9tYXhpbXVt
OwotCi0jaWZuZGVmIENLX0hUX1BQCi0JQ0tfSFRfVFlQRSBkID0gMDsKLQlDS19IVF9UWVBFIGRf
cHJpbWUgPSAwOwotcmV0cnk6Ci0jZW5kaWYKLQotCXByb2JlX21heGltdW0gPSBja19odF9tYXBf
Ym91bmRfZ2V0KG1hcCwgaCk7Ci0Jb2Zmc2V0ID0gaC52YWx1ZSAmIG1hcC0+bWFzazsKLQotCWZv
ciAoaSA9IDA7IGkgPCBtYXAtPnByb2JlX2xpbWl0OyBpKyspIHsKLQkJLyoKLQkJICogUHJvYmUg
b24gYSBjb21wbGV0ZSBjYWNoZSBsaW5lIGZpcnN0LiBTY2FuIGZvcndhcmQgYW5kIHdyYXAgYXJv
dW5kIHRvCi0JCSAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNhY2hlIGxpbmUuIE9ubHkgd2hlbiB0
aGUgY29tcGxldGUgY2FjaGUgbGluZSBoYXMKLQkJICogYmVlbiBzY2FubmVkIGRvIHdlIG1vdmUg
b24gdG8gdGhlIG5leHQgcm93LgotCQkgKi8KLQkJYnVja2V0ID0gKHZvaWQgKikoKHVpbnRwdHJf
dCkobWFwLT5lbnRyaWVzICsgb2Zmc2V0KSAmCi0JCQkgICAgIH4oQ0tfTURfQ0FDSEVMSU5FIC0g
MSkpOwotCi0JCWZvciAoaiA9IDA7IGogPCBDS19IVF9CVUNLRVRfTEVOR1RIOyBqKyspIHsKLQkJ
CXVpbnQxNl90IGs7Ci0KLQkJCWlmIChwcm9iZXMrKyA+IHByb2JlX21heGltdW0pCi0JCQkJcmV0
dXJuIE5VTEw7Ci0KLQkJCWN1cnNvciA9IGJ1Y2tldCArICgoaiArIG9mZnNldCkgJiAoQ0tfSFRf
QlVDS0VUX0xFTkdUSCAtIDEpKTsKLQotI2lmZGVmIENLX0hUX1BQCi0JCQlzbmFwc2hvdC0+a2V5
ID0gKHVpbnRwdHJfdClja19wcl9sb2FkX3B0cigmY3Vyc29yLT5rZXkpOwotCQkJY2tfcHJfZmVu
Y2VfbG9hZCgpOwotCQkJc25hcHNob3QtPnZhbHVlID0gKHVpbnRwdHJfdClja19wcl9sb2FkX3B0
cigmY3Vyc29yLT52YWx1ZSk7Ci0jZWxzZQotCQkJZCA9IENLX0hUX1RZUEVfTE9BRCgmbWFwLT5k
ZWxldGlvbnMpOwotCQkJc25hcHNob3QtPmtleSA9ICh1aW50cHRyX3QpY2tfcHJfbG9hZF9wdHIo
JmN1cnNvci0+a2V5KTsKLQkJCWNrX3ByX2ZlbmNlX2xvYWQoKTsKLQkJCXNuYXBzaG90LT5rZXlf
bGVuZ3RoID0gQ0tfSFRfVFlQRV9MT0FEKCZjdXJzb3ItPmtleV9sZW5ndGgpOwotCQkJc25hcHNo
b3QtPmhhc2ggPSBDS19IVF9UWVBFX0xPQUQoJmN1cnNvci0+aGFzaCk7Ci0JCQlzbmFwc2hvdC0+
dmFsdWUgPSAodWludHB0cl90KWNrX3ByX2xvYWRfcHRyKCZjdXJzb3ItPnZhbHVlKTsKLSNlbmRp
ZgotCi0JCQkvKgotCQkJICogSXQgaXMgcHJvYmFibHkgd29ydGggaXQgdG8gZW5jYXBzdWxhdGUg
cHJvYmUgc3RhdGUKLQkJCSAqIGluIG9yZGVyIHRvIHByZXZlbnQgYSBjb21wbGV0ZSByZXByb2Jl
IHNlcXVlbmNlIGluCi0JCQkgKiB0aGUgY2FzZSBvZiBpbnRlcm1pdHRlbnQgd3JpdGVycy4KLQkJ
CSAqLwotCQkJaWYgKHNuYXBzaG90LT5rZXkgPT0gQ0tfSFRfS0VZX1RPTUJTVE9ORSkKLQkJCQlj
b250aW51ZTsKLQotCQkJaWYgKHNuYXBzaG90LT5rZXkgPT0gQ0tfSFRfS0VZX0VNUFRZKQotCQkJ
CWdvdG8gbGVhdmU7Ci0KLQkJCWlmIChzbmFwc2hvdC0+a2V5ID09ICh1aW50cHRyX3Qpa2V5KQot
CQkJCWdvdG8gbGVhdmU7Ci0KLQkJCWlmIChtYXAtPm1vZGUgJiBDS19IVF9NT0RFX0JZVEVTVFJJ
TkcpIHsKLQkJCQl2b2lkICpwb2ludGVyOwotCi0JCQkJLyoKLQkJCQkgKiBDaGVjayBtZW1vaXpl
ZCBwb3J0aW9uIG9mIGhhc2ggdmFsdWUgYmVmb3JlCi0JCQkJICogZXhwZW5zaXZlIGZ1bGwtbGVu
Z3RoIGNvbXBhcmlzb24uCi0JCQkJICovCi0JCQkJayA9IGNrX2h0X2VudHJ5X2tleV9sZW5ndGgo
c25hcHNob3QpOwotCQkJCWlmIChrICE9IGtleV9sZW5ndGgpCi0JCQkJCWNvbnRpbnVlOwotI2lm
ZGVmIENLX0hUX1BQCi0JCQkJaWYgKChzbmFwc2hvdC0+dmFsdWUgPj4gQ0tfTURfVk1BX0JJVFMp
ICE9ICgoaC52YWx1ZSA+PiAzMikgJiBDS19IVF9LRVlfTUFTSykpCi0JCQkJCWNvbnRpbnVlOwot
I2Vsc2UKLQkJCQlpZiAoc25hcHNob3QtPmhhc2ggIT0gaC52YWx1ZSkKLQkJCQkJY29udGludWU7
Ci0KLQkJCQlkX3ByaW1lID0gQ0tfSFRfVFlQRV9MT0FEKCZtYXAtPmRlbGV0aW9ucyk7Ci0KLQkJ
CQkvKgotCQkJCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHNsb3Qgd2FzCi0JCQkJICogcmVw
bGFjZWQsIGluaXRpYXRlIGEgcmUtcHJvYmUuCi0JCQkJICovCi0JCQkJaWYgKGQgIT0gZF9wcmlt
ZSkKLQkJCQkJZ290byByZXRyeTsKLSNlbmRpZgotCi0JCQkJcG9pbnRlciA9IGNrX2h0X2VudHJ5
X2tleShzbmFwc2hvdCk7Ci0JCQkJaWYgKG1lbWNtcChwb2ludGVyLCBrZXksIGtleV9sZW5ndGgp
ID09IDApCi0JCQkJCWdvdG8gbGVhdmU7Ci0JCQl9Ci0JCX0KLQotCQlvZmZzZXQgPSBja19odF9t
YXBfcHJvYmVfbmV4dChtYXAsIG9mZnNldCwgaCwgcHJvYmVzKTsKLQl9Ci0KLQlyZXR1cm4gTlVM
TDsKLQotbGVhdmU6Ci0JcmV0dXJuIGN1cnNvcjsKLX0KLQotQ0tfSFRfVFlQRQotY2tfaHRfY291
bnQoc3RydWN0IGNrX2h0ICp0YWJsZSkKLXsKLQlzdHJ1Y3QgY2tfaHRfbWFwICptYXAgPSBja19w
cl9sb2FkX3B0cigmdGFibGUtPm1hcCk7Ci0KLQlyZXR1cm4gQ0tfSFRfVFlQRV9MT0FEKCZtYXAt
Pm5fZW50cmllcyk7Ci19Ci0KLWJvb2wKLWNrX2h0X25leHQoc3RydWN0IGNrX2h0ICp0YWJsZSwK
LSAgICBzdHJ1Y3QgY2tfaHRfaXRlcmF0b3IgKmksCi0gICAgc3RydWN0IGNrX2h0X2VudHJ5ICoq
ZW50cnkpCi17Ci0Jc3RydWN0IGNrX2h0X21hcCAqbWFwID0gdGFibGUtPm1hcDsKLQl1aW50cHRy
X3Qga2V5OwotCi0JaWYgKGktPm9mZnNldCA+PSBtYXAtPmNhcGFjaXR5KQotCQlyZXR1cm4gZmFs
c2U7Ci0KLQlkbyB7Ci0JCWtleSA9IG1hcC0+ZW50cmllc1tpLT5vZmZzZXRdLmtleTsKLQkJaWYg
KGtleSAhPSBDS19IVF9LRVlfRU1QVFkgJiYga2V5ICE9IENLX0hUX0tFWV9UT01CU1RPTkUpCi0J
CQlicmVhazsKLQl9IHdoaWxlICgrK2ktPm9mZnNldCA8IG1hcC0+Y2FwYWNpdHkpOwotCi0JaWYg
KGktPm9mZnNldCA+PSBtYXAtPmNhcGFjaXR5KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkqZW50cnkg
PSBtYXAtPmVudHJpZXMgKyBpLT5vZmZzZXQrKzsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbAot
Y2tfaHRfcmVzZXRfc2l6ZV9zcG1jKHN0cnVjdCBja19odCAqdGFibGUsIENLX0hUX1RZUEUgc2l6
ZSkKLXsKLQlzdHJ1Y3QgY2tfaHRfbWFwICptYXAsICp1cGRhdGU7Ci0KLQltYXAgPSB0YWJsZS0+
bWFwOwotCXVwZGF0ZSA9IGNrX2h0X21hcF9jcmVhdGUodGFibGUsIHNpemUpOwotCWlmICh1cGRh
dGUgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JY2tfcHJfc3RvcmVfcHRyX3Vuc2FmZSgm
dGFibGUtPm1hcCwgdXBkYXRlKTsKLQlja19odF9tYXBfZGVzdHJveSh0YWJsZS0+bSwgbWFwLCB0
cnVlKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbAotY2tfaHRfcmVzZXRfc3BtYyhzdHJ1Y3Qg
Y2tfaHQgKnRhYmxlKQotewotCXN0cnVjdCBja19odF9tYXAgKm1hcCA9IHRhYmxlLT5tYXA7Ci0K
LQlyZXR1cm4gY2tfaHRfcmVzZXRfc2l6ZV9zcG1jKHRhYmxlLCBtYXAtPmNhcGFjaXR5KTsKLX0K
LQotYm9vbAotY2tfaHRfZ3Jvd19zcG1jKHN0cnVjdCBja19odCAqdGFibGUsIENLX0hUX1RZUEUg
Y2FwYWNpdHkpCi17Ci0Jc3RydWN0IGNrX2h0X21hcCAqbWFwLCAqdXBkYXRlOwotCXN0cnVjdCBj
a19odF9lbnRyeSAqYnVja2V0LCAqcHJldmlvdXM7Ci0Jc3RydWN0IGNrX2h0X2hhc2ggaDsKLQlz
aXplX3QgaywgaSwgaiwgb2Zmc2V0OwotCUNLX0hUX1RZUEUgcHJvYmVzOwotCi1yZXN0YXJ0Ogot
CW1hcCA9IHRhYmxlLT5tYXA7Ci0KLQlpZiAobWFwLT5jYXBhY2l0eSA+PSBjYXBhY2l0eSkKLQkJ
cmV0dXJuIGZhbHNlOwotCi0JdXBkYXRlID0gY2tfaHRfbWFwX2NyZWF0ZSh0YWJsZSwgY2FwYWNp
dHkpOwotCWlmICh1cGRhdGUgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JZm9yIChrID0g
MDsgayA8IG1hcC0+Y2FwYWNpdHk7IGsrKykgewotCQlwcmV2aW91cyA9ICZtYXAtPmVudHJpZXNb
a107Ci0KLQkJaWYgKHByZXZpb3VzLT5rZXkgPT0gQ0tfSFRfS0VZX0VNUFRZIHx8IHByZXZpb3Vz
LT5rZXkgPT0gQ0tfSFRfS0VZX1RPTUJTVE9ORSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICh0YWJs
ZS0+bW9kZSAmIENLX0hUX01PREVfQllURVNUUklORykgewotI2lmZGVmIENLX0hUX1BQCi0JCQl2
b2lkICprZXk7Ci0JCQl1aW50MTZfdCBrZXlfbGVuZ3RoOwotCi0JCQlrZXkgPSBja19odF9lbnRy
eV9rZXkocHJldmlvdXMpOwotCQkJa2V5X2xlbmd0aCA9IGNrX2h0X2VudHJ5X2tleV9sZW5ndGgo
cHJldmlvdXMpOwotI2VuZGlmCi0KLSNpZm5kZWYgQ0tfSFRfUFAKLQkJCWgudmFsdWUgPSBwcmV2
aW91cy0+aGFzaDsKLSNlbHNlCi0JCQl0YWJsZS0+aCgmaCwga2V5LCBrZXlfbGVuZ3RoLCB0YWJs
ZS0+c2VlZCk7Ci0jZW5kaWYKLQkJfSBlbHNlIHsKLSNpZm5kZWYgQ0tfSFRfUFAKLQkJCWgudmFs
dWUgPSBwcmV2aW91cy0+aGFzaDsKLSNlbHNlCi0JCQl0YWJsZS0+aCgmaCwgJnByZXZpb3VzLT5r
ZXksIHNpemVvZihwcmV2aW91cy0+a2V5KSwgdGFibGUtPnNlZWQpOwotI2VuZGlmCi0JCX0KLQot
CQlvZmZzZXQgPSBoLnZhbHVlICYgdXBkYXRlLT5tYXNrOwotCQlwcm9iZXMgPSAwOwotCi0JCWZv
ciAoaSA9IDA7IGkgPCB1cGRhdGUtPnByb2JlX2xpbWl0OyBpKyspIHsKLQkJCWJ1Y2tldCA9ICh2
b2lkICopKCh1aW50cHRyX3QpKHVwZGF0ZS0+ZW50cmllcyArIG9mZnNldCkgJiB+KENLX01EX0NB
Q0hFTElORSAtIDEpKTsKLQotCQkJZm9yIChqID0gMDsgaiA8IENLX0hUX0JVQ0tFVF9MRU5HVEg7
IGorKykgewotCQkJCXN0cnVjdCBja19odF9lbnRyeSAqY3Vyc29yID0gYnVja2V0ICsgKChqICsg
b2Zmc2V0KSAmIChDS19IVF9CVUNLRVRfTEVOR1RIIC0gMSkpOwotCi0JCQkJcHJvYmVzKys7Ci0J
CQkJaWYgKENLX0NDX0xJS0VMWShjdXJzb3ItPmtleSA9PSBDS19IVF9LRVlfRU1QVFkpKSB7Ci0J
CQkJCSpjdXJzb3IgPSAqcHJldmlvdXM7Ci0JCQkJCXVwZGF0ZS0+bl9lbnRyaWVzKys7Ci0JCQkJ
CWNrX2h0X21hcF9ib3VuZF9zZXQodXBkYXRlLCBoLCBwcm9iZXMpOwotCQkJCQlicmVhazsKLQkJ
CQl9Ci0JCQl9Ci0KLQkJCWlmIChqIDwgQ0tfSFRfQlVDS0VUX0xFTkdUSCkKLQkJCQlicmVhazsK
LQotCQkJb2Zmc2V0ID0gY2tfaHRfbWFwX3Byb2JlX25leHQodXBkYXRlLCBvZmZzZXQsIGgsIHBy
b2Jlcyk7Ci0JCX0KLQotCQlpZiAoaSA9PSB1cGRhdGUtPnByb2JlX2xpbWl0KSB7Ci0JCQkvKgot
CQkJICogV2UgaGF2ZSBoaXQgdGhlIHByb2JlIGxpbWl0LCB0aGUgbWFwIG5lZWRzIHRvIGJlIGV2
ZW4KLQkJCSAqIGxhcmdlci4KLQkJCSAqLwotCQkJY2tfaHRfbWFwX2Rlc3Ryb3kodGFibGUtPm0s
IHVwZGF0ZSwgZmFsc2UpOwotCQkJY2FwYWNpdHkgPDw9IDE7Ci0JCQlnb3RvIHJlc3RhcnQ7Ci0J
CX0KLQl9Ci0KLQlja19wcl9mZW5jZV9zdG9yZSgpOwotCWNrX3ByX3N0b3JlX3B0cl91bnNhZmUo
JnRhYmxlLT5tYXAsIHVwZGF0ZSk7Ci0JY2tfaHRfbWFwX2Rlc3Ryb3kodGFibGUtPm0sIG1hcCwg
dHJ1ZSk7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wKLWNrX2h0X3JlbW92ZV9zcG1jKHN0cnVj
dCBja19odCAqdGFibGUsCi0gICAgY2tfaHRfaGFzaF90IGgsCi0gICAgY2tfaHRfZW50cnlfdCAq
ZW50cnkpCi17Ci0Jc3RydWN0IGNrX2h0X21hcCAqbWFwOwotCXN0cnVjdCBja19odF9lbnRyeSAq
Y2FuZGlkYXRlLCBzbmFwc2hvdDsKLQotCW1hcCA9IHRhYmxlLT5tYXA7Ci0KLQlpZiAodGFibGUt
Pm1vZGUgJiBDS19IVF9NT0RFX0JZVEVTVFJJTkcpIHsKLQkJY2FuZGlkYXRlID0gY2tfaHRfbWFw
X3Byb2JlX3JkKG1hcCwgaCwgJnNuYXBzaG90LAotCQkgICAgY2tfaHRfZW50cnlfa2V5KGVudHJ5
KSwKLQkJICAgIGNrX2h0X2VudHJ5X2tleV9sZW5ndGgoZW50cnkpKTsKLQl9IGVsc2UgewotCQlj
YW5kaWRhdGUgPSBja19odF9tYXBfcHJvYmVfcmQobWFwLCBoLCAmc25hcHNob3QsCi0JCSAgICAo
dm9pZCAqKWVudHJ5LT5rZXksCi0JCSAgICBzaXplb2YoZW50cnktPmtleSkpOwotCX0KLQotCS8q
IE5vIG1hdGNoaW5nIGVudHJ5IHdhcyBmb3VuZC4gKi8KLQlpZiAoY2FuZGlkYXRlID09IE5VTEwg
fHwgc25hcHNob3Qua2V5ID09IENLX0hUX0tFWV9FTVBUWSkKLQkJcmV0dXJuIGZhbHNlOwotCi0J
KmVudHJ5ID0gc25hcHNob3Q7Ci0KLQlja19wcl9zdG9yZV9wdHJfdW5zYWZlKCZjYW5kaWRhdGUt
PmtleSwgKHZvaWQgKilDS19IVF9LRVlfVE9NQlNUT05FKTsKLQlja19wcl9mZW5jZV9zdG9yZSgp
OwotCUNLX0hUX1RZUEVfU1RPUkUoJm1hcC0+bl9lbnRyaWVzLCBtYXAtPm5fZW50cmllcyAtIDEp
OwotCXJldHVybiB0cnVlOwotfQotCi1ib29sCi1ja19odF9nZXRfc3BtYyhzdHJ1Y3QgY2tfaHQg
KnRhYmxlLAotICAgIGNrX2h0X2hhc2hfdCBoLAotICAgIGNrX2h0X2VudHJ5X3QgKmVudHJ5KQot
ewotCXN0cnVjdCBja19odF9lbnRyeSAqY2FuZGlkYXRlLCBzbmFwc2hvdDsKLQlzdHJ1Y3QgY2tf
aHRfbWFwICptYXA7Ci0JQ0tfSFRfVFlQRSBkLCBkX3ByaW1lOwotCi1yZXN0YXJ0OgotCW1hcCA9
IGNrX3ByX2xvYWRfcHRyKCZ0YWJsZS0+bWFwKTsKLQotCS8qCi0JICogUGxhdGZvcm1zIHRoYXQg
Y2Fubm90IHJlYWQga2V5IGFuZCBrZXlfbGVuZ3RoIGF0b21pY2FsbHkgbXVzdCByZXByb2JlCi0J
ICogb24gdGhlIHNjYW4gb2YgYW55IHNpbmdsZSBlbnRyeS4KLQkgKi8KLQlkID0gQ0tfSFRfVFlQ
RV9MT0FEKCZtYXAtPmRlbGV0aW9ucyk7Ci0KLQlpZiAodGFibGUtPm1vZGUgJiBDS19IVF9NT0RF
X0JZVEVTVFJJTkcpIHsKLQkJY2FuZGlkYXRlID0gY2tfaHRfbWFwX3Byb2JlX3JkKG1hcCwgaCwg
JnNuYXBzaG90LAotCQkgICAgY2tfaHRfZW50cnlfa2V5KGVudHJ5KSwgY2tfaHRfZW50cnlfa2V5
X2xlbmd0aChlbnRyeSkpOwotCX0gZWxzZSB7Ci0JCWNhbmRpZGF0ZSA9IGNrX2h0X21hcF9wcm9i
ZV9yZChtYXAsIGgsICZzbmFwc2hvdCwKLQkJICAgICh2b2lkICopZW50cnktPmtleSwgc2l6ZW9m
KGVudHJ5LT5rZXkpKTsKLQl9Ci0KLQlkX3ByaW1lID0gQ0tfSFRfVFlQRV9MT0FEKCZtYXAtPmRl
bGV0aW9ucyk7Ci0JaWYgKGQgIT0gZF9wcmltZSkgewotCQkvKgotCQkgKiBJdCBpcyBwb3NzaWJs
ZSB3ZSBoYXZlIHJlYWQgKEssIFYnKS4gT25seSB2YWxpZCBzdGF0ZXMgYXJlCi0JCSAqIChLLCBW
KSwgKEsnLCBWJykgYW5kIChULCBWKS4gUmVzdGFydCBsb2FkIG9wZXJhdGlvbiBpbiBmYWNlCi0J
CSAqIG9mIGNvbmN1cnJlbnQgZGVsZXRpb25zIG9yIHJlcGxhY2VtZW50cy4KLQkJICovCi0JCWdv
dG8gcmVzdGFydDsKLQl9Ci0KLQlpZiAoY2FuZGlkYXRlID09IE5VTEwgfHwgc25hcHNob3Qua2V5
ID09IENLX0hUX0tFWV9FTVBUWSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JKmVudHJ5ID0gc25hcHNo
b3Q7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wKLWNrX2h0X3NldF9zcG1jKHN0cnVjdCBja19o
dCAqdGFibGUsCi0gICAgY2tfaHRfaGFzaF90IGgsCi0gICAgY2tfaHRfZW50cnlfdCAqZW50cnkp
Ci17Ci0Jc3RydWN0IGNrX2h0X2VudHJ5IHNuYXBzaG90LCAqY2FuZGlkYXRlLCAqcHJpb3JpdHk7
Ci0Jc3RydWN0IGNrX2h0X21hcCAqbWFwOwotCUNLX0hUX1RZUEUgcHJvYmVzLCBwcm9iZXNfd3I7
Ci0JYm9vbCBlbXB0eSA9IGZhbHNlOwotCi0JZm9yICg7OykgewotCQltYXAgPSB0YWJsZS0+bWFw
OwotCi0JCWlmICh0YWJsZS0+bW9kZSAmIENLX0hUX01PREVfQllURVNUUklORykgewotCQkJY2Fu
ZGlkYXRlID0gY2tfaHRfbWFwX3Byb2JlX3dyKG1hcCwgaCwgJnNuYXBzaG90LCAmcHJpb3JpdHks
Ci0JCQkgICAgY2tfaHRfZW50cnlfa2V5KGVudHJ5KSwKLQkJCSAgICBja19odF9lbnRyeV9rZXlf
bGVuZ3RoKGVudHJ5KSwKLQkJCSAgICAmcHJvYmVzLCAmcHJvYmVzX3dyKTsKLQkJfSBlbHNlIHsK
LQkJCWNhbmRpZGF0ZSA9IGNrX2h0X21hcF9wcm9iZV93cihtYXAsIGgsICZzbmFwc2hvdCwgJnBy
aW9yaXR5LAotCQkJICAgICh2b2lkICopZW50cnktPmtleSwKLQkJCSAgICBzaXplb2YoZW50cnkt
PmtleSksCi0JCQkgICAgJnByb2JlcywgJnByb2Jlc193cik7Ci0JCX0KLQotCQlpZiAocHJpb3Jp
dHkgIT0gTlVMTCkgewotCQkJcHJvYmVzID0gcHJvYmVzX3dyOwotCQkJYnJlYWs7Ci0JCX0KLQot
CQlpZiAoY2FuZGlkYXRlICE9IE5VTEwpCi0JCQlicmVhazsKLQotCQlpZiAoY2tfaHRfZ3Jvd19z
cG1jKHRhYmxlLCBtYXAtPmNhcGFjaXR5IDw8IDEpID09IGZhbHNlKQotCQkJcmV0dXJuIGZhbHNl
OwotCX0KLQotCWlmIChjYW5kaWRhdGUgPT0gTlVMTCkgewotCQljYW5kaWRhdGUgPSBwcmlvcml0
eTsKLQkJZW1wdHkgPSB0cnVlOwotCX0KLQotCWlmIChjYW5kaWRhdGUtPmtleSAhPSBDS19IVF9L
RVlfRU1QVFkgJiYKLQkgICAgcHJpb3JpdHkgIT0gTlVMTCAmJiBjYW5kaWRhdGUgIT0gcHJpb3Jp
dHkpIHsKLQkJLyoKLQkJICogRW50cnkgaXMgbW92ZWQgaW50byBhbm90aGVyIHBvc2l0aW9uIGlu
IHByb2JlIHNlcXVlbmNlLgotCQkgKiBXZSBhdm9pZCBhIHN0YXRlIG9mIChLLCBCKSAod2hlcmUg
W0ssIEJdIC0+IFtLJywgQl0pIGJ5Ci0JCSAqIGd1YXJhbnRlZWluZyBhIGZvcmNlZCByZXByb2Jl
IGJlZm9yZSB0cmFuc2l0aW9uaW5nIGZyb20gSyB0bwotCQkgKiBULiAoSywgQikgaW1wbGllcyAo
SywgQiwgRCcpIHNvIHdlIHdpbGwgcmVwcm9iZSBzdWNjZXNzZnVsbHkKLQkJICogZnJvbSB0aGlz
IHRyYW5zaWVudCBzdGF0ZS4KLQkJICovCi0JCXByb2JlcyA9IHByb2Jlc193cjsKLQotI2lmbmRl
ZiBDS19IVF9QUAotCQlDS19IVF9UWVBFX1NUT1JFKCZwcmlvcml0eS0+a2V5X2xlbmd0aCwgZW50
cnktPmtleV9sZW5ndGgpOwotCQlDS19IVF9UWVBFX1NUT1JFKCZwcmlvcml0eS0+aGFzaCwgZW50
cnktPmhhc2gpOwotI2VuZGlmCi0KLQkJLyoKLQkJICogUmVhZGVycyBtdXN0IG9ic2VydmUgdmVy
c2lvbiBjb3VudGVyIGNoYW5nZSBiZWZvcmUgdGhleQotCQkgKiBvYnNlcnZlIHJlLXVzZS4gSWYg
dGhleSBvYnNlcnZlIHJlLXVzZSwgaXQgaXMgYXQgbW9zdAotCQkgKiBhIHRvbWJzdG9uZS4KLQkJ
ICovCi0JCWlmIChwcmlvcml0eS0+dmFsdWUgPT0gQ0tfSFRfS0VZX1RPTUJTVE9ORSkgewotCQkJ
Q0tfSFRfVFlQRV9TVE9SRSgmbWFwLT5kZWxldGlvbnMsIG1hcC0+ZGVsZXRpb25zICsgMSk7Ci0J
CQlja19wcl9mZW5jZV9zdG9yZSgpOwotCQl9Ci0KLQkJY2tfcHJfc3RvcmVfcHRyX3Vuc2FmZSgm
cHJpb3JpdHktPnZhbHVlLCAodm9pZCAqKWVudHJ5LT52YWx1ZSk7Ci0JCWNrX3ByX2ZlbmNlX3N0
b3JlKCk7Ci0JCWNrX3ByX3N0b3JlX3B0cl91bnNhZmUoJnByaW9yaXR5LT5rZXksICh2b2lkICop
ZW50cnktPmtleSk7Ci0JCWNrX3ByX2ZlbmNlX3N0b3JlKCk7Ci0KLQkJLyoKLQkJICogTWFrZSBz
dXJlIHRoYXQgcmVhZGVycyB3aG8gb2JzZXJ2ZSB0aGUgdG9tYnN0b25lIHdvdWxkCi0JCSAqIGFs
c28gb2JzZXJ2ZSBjb3VudGVyIGNoYW5nZS4KLQkJICovCi0JCUNLX0hUX1RZUEVfU1RPUkUoJm1h
cC0+ZGVsZXRpb25zLCBtYXAtPmRlbGV0aW9ucyArIDEpOwotCQlja19wcl9mZW5jZV9zdG9yZSgp
OwotCi0JCWNrX3ByX3N0b3JlX3B0cl91bnNhZmUoJmNhbmRpZGF0ZS0+a2V5LCAodm9pZCAqKUNL
X0hUX0tFWV9UT01CU1RPTkUpOwotCQlja19wcl9mZW5jZV9zdG9yZSgpOwotCX0gZWxzZSB7Ci0J
CS8qCi0JCSAqIEluIHRoaXMgY2FzZSB3ZSBhcmUgaW5zZXJ0aW5nIGEgbmV3IGVudHJ5IG9yIHJl
cGxhY2luZwotCQkgKiBhbiBleGlzdGluZyBlbnRyeS4gWWVzLCB0aGlzIGNhbiBiZSBjb21iaW5l
ZCBpbnRvIGFib3ZlIGJyYW5jaCwKLQkJICogYnV0IGlzbid0IGJlY2F1c2UgeW91IGFyZSBhY3R1
YWxseSBsb29raW5nIGF0IGR5aW5nIGNvZGUKLQkJICogKGNrX2h0IGlzIGVmZmVjdGl2ZWx5IGRl
cHJlY2F0ZWQgYW5kIGlzIGJlaW5nIHJlcGxhY2VkIHNvb24pLgotCQkgKi8KLQkJYm9vbCByZXBs
YWNlID0gY2FuZGlkYXRlLT5rZXkgIT0gQ0tfSFRfS0VZX0VNUFRZICYmCi0JCSAgICBjYW5kaWRh
dGUtPmtleSAhPSBDS19IVF9LRVlfVE9NQlNUT05FOwotCi0JCWlmIChwcmlvcml0eSAhPSBOVUxM
KSB7Ci0JCQlpZiAocHJpb3JpdHktPmtleSA9PSBDS19IVF9LRVlfVE9NQlNUT05FKSB7Ci0JCQkJ
Q0tfSFRfVFlQRV9TVE9SRSgmbWFwLT5kZWxldGlvbnMsIG1hcC0+ZGVsZXRpb25zICsgMSk7Ci0J
CQkJY2tfcHJfZmVuY2Vfc3RvcmUoKTsKLQkJCX0KLQotCQkJY2FuZGlkYXRlID0gcHJpb3JpdHk7
Ci0JCQlwcm9iZXMgPSBwcm9iZXNfd3I7Ci0JCX0KLQotI2lmZGVmIENLX0hUX1BQCi0JCWNrX3By
X3N0b3JlX3B0cl91bnNhZmUoJmNhbmRpZGF0ZS0+dmFsdWUsICh2b2lkICopZW50cnktPnZhbHVl
KTsKLQkJY2tfcHJfZmVuY2Vfc3RvcmUoKTsKLQkJY2tfcHJfc3RvcmVfcHRyX3Vuc2FmZSgmY2Fu
ZGlkYXRlLT5rZXksICh2b2lkICopZW50cnktPmtleSk7Ci0jZWxzZQotCQlDS19IVF9UWVBFX1NU
T1JFKCZjYW5kaWRhdGUtPmtleV9sZW5ndGgsIGVudHJ5LT5rZXlfbGVuZ3RoKTsKLQkJQ0tfSFRf
VFlQRV9TVE9SRSgmY2FuZGlkYXRlLT5oYXNoLCBlbnRyeS0+aGFzaCk7Ci0JCWNrX3ByX3N0b3Jl
X3B0cl91bnNhZmUoJmNhbmRpZGF0ZS0+dmFsdWUsICh2b2lkICopZW50cnktPnZhbHVlKTsKLQkJ
Y2tfcHJfZmVuY2Vfc3RvcmUoKTsKLQkJY2tfcHJfc3RvcmVfcHRyX3Vuc2FmZSgmY2FuZGlkYXRl
LT5rZXksICh2b2lkICopZW50cnktPmtleSk7Ci0jZW5kaWYKLQotCQkvKgotCQkgKiBJZiB3ZSBh
cmUgaW5zZXJ0IGEgbmV3IGVudHJ5IHRoZW4gaW5jcmVtZW50IG51bWJlcgotCQkgKiBvZiBlbnRy
aWVzIGFzc29jaWF0ZWQgd2l0aCBtYXAuCi0JCSAqLwotCQlpZiAocmVwbGFjZSA9PSBmYWxzZSkK
LQkJCUNLX0hUX1RZUEVfU1RPUkUoJm1hcC0+bl9lbnRyaWVzLCBtYXAtPm5fZW50cmllcyArIDEp
OwotCX0KLQotCWNrX2h0X21hcF9ib3VuZF9zZXQobWFwLCBoLCBwcm9iZXMpOwotCi0JLyogRW5m
b3JjZSBhIGxvYWQgZmFjdG9yIG9mIDAuNS4gKi8KLQlpZiAobWFwLT5uX2VudHJpZXMgKiAyID4g
bWFwLT5jYXBhY2l0eSkKLQkJY2tfaHRfZ3Jvd19zcG1jKHRhYmxlLCBtYXAtPmNhcGFjaXR5IDw8
IDEpOwotCi0JaWYgKGVtcHR5ID09IHRydWUpIHsKLQkJZW50cnktPmtleSA9IENLX0hUX0tFWV9F
TVBUWTsKLQl9IGVsc2UgewotCQkqZW50cnkgPSBzbmFwc2hvdDsKLQl9Ci0KLQlyZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbAotY2tfaHRfcHV0X3NwbWMoc3RydWN0IGNrX2h0ICp0YWJsZSwKLSAgICBj
a19odF9oYXNoX3QgaCwKLSAgICBja19odF9lbnRyeV90ICplbnRyeSkKLXsKLQlzdHJ1Y3QgY2tf
aHRfZW50cnkgc25hcHNob3QsICpjYW5kaWRhdGUsICpwcmlvcml0eTsKLQlzdHJ1Y3QgY2tfaHRf
bWFwICptYXA7Ci0JQ0tfSFRfVFlQRSBwcm9iZXMsIHByb2Jlc193cjsKLQotCWZvciAoOzspIHsK
LQkJbWFwID0gdGFibGUtPm1hcDsKLQotCQlpZiAodGFibGUtPm1vZGUgJiBDS19IVF9NT0RFX0JZ
VEVTVFJJTkcpIHsKLQkJCWNhbmRpZGF0ZSA9IGNrX2h0X21hcF9wcm9iZV93cihtYXAsIGgsICZz
bmFwc2hvdCwgJnByaW9yaXR5LAotCQkJICAgIGNrX2h0X2VudHJ5X2tleShlbnRyeSksCi0JCQkg
ICAgY2tfaHRfZW50cnlfa2V5X2xlbmd0aChlbnRyeSksCi0JCQkgICAgJnByb2JlcywgJnByb2Jl
c193cik7Ci0JCX0gZWxzZSB7Ci0JCQljYW5kaWRhdGUgPSBja19odF9tYXBfcHJvYmVfd3IobWFw
LCBoLCAmc25hcHNob3QsICZwcmlvcml0eSwKLQkJCSAgICAodm9pZCAqKWVudHJ5LT5rZXksCi0J
CQkgICAgc2l6ZW9mKGVudHJ5LT5rZXkpLAotCQkJICAgICZwcm9iZXMsICZwcm9iZXNfd3IpOwot
CQl9Ci0KLQkJaWYgKGNhbmRpZGF0ZSAhPSBOVUxMIHx8IHByaW9yaXR5ICE9IE5VTEwpCi0JCQli
cmVhazsKLQotCQlpZiAoY2tfaHRfZ3Jvd19zcG1jKHRhYmxlLCBtYXAtPmNhcGFjaXR5IDw8IDEp
ID09IGZhbHNlKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChwcmlvcml0eSAhPSBOVUxM
KSB7Ci0JCS8qIFZlcnNpb24gY291bnRlciBpcyB1cGRhdGVkIGJlZm9yZSByZS11c2UuICovCi0J
CUNLX0hUX1RZUEVfU1RPUkUoJm1hcC0+ZGVsZXRpb25zLCBtYXAtPmRlbGV0aW9ucyArIDEpOwot
CQlja19wcl9mZW5jZV9zdG9yZSgpOwotCi0JCS8qIFJlLXVzZSB0b21ic3RvbmUgaWYgb25lIHdh
cyBmb3VuZC4gKi8KLQkJY2FuZGlkYXRlID0gcHJpb3JpdHk7Ci0JCXByb2JlcyA9IHByb2Jlc193
cjsKLQl9IGVsc2UgaWYgKGNhbmRpZGF0ZS0+a2V5ICE9IENLX0hUX0tFWV9FTVBUWSAmJgotCSAg
ICBjYW5kaWRhdGUtPmtleSAhPSBDS19IVF9LRVlfVE9NQlNUT05FKSB7Ci0JCS8qCi0JCSAqIElm
IHRoZSBzbmFwc2hvdCBrZXkgaXMgbm9uLWVtcHR5IGFuZCB0aGUgdmFsdWUgZmllbGQgaXMgbm90
Ci0JCSAqIGEgdG9tYnN0b25lIHRoZW4gYW4gaWRlbnRpY2FsIGtleSB3YXMgZm91bmQuIEFzIHN0
b3JlIGRvZXMKLQkJICogbm90IGltcGxlbWVudCByZXBsYWNlbWVudCwgd2Ugd2lsbCBmYWlsLgot
CQkgKi8KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWNrX2h0X21hcF9ib3VuZF9zZXQobWFwLCBo
LCBwcm9iZXMpOwotCi0jaWZkZWYgQ0tfSFRfUFAKLQlja19wcl9zdG9yZV9wdHJfdW5zYWZlKCZj
YW5kaWRhdGUtPnZhbHVlLCAodm9pZCAqKWVudHJ5LT52YWx1ZSk7Ci0JY2tfcHJfZmVuY2Vfc3Rv
cmUoKTsKLQlja19wcl9zdG9yZV9wdHJfdW5zYWZlKCZjYW5kaWRhdGUtPmtleSwgKHZvaWQgKill
bnRyeS0+a2V5KTsKLSNlbHNlCi0JQ0tfSFRfVFlQRV9TVE9SRSgmY2FuZGlkYXRlLT5rZXlfbGVu
Z3RoLCBlbnRyeS0+a2V5X2xlbmd0aCk7Ci0JQ0tfSFRfVFlQRV9TVE9SRSgmY2FuZGlkYXRlLT5o
YXNoLCBlbnRyeS0+aGFzaCk7Ci0JY2tfcHJfc3RvcmVfcHRyX3Vuc2FmZSgmY2FuZGlkYXRlLT52
YWx1ZSwgKHZvaWQgKillbnRyeS0+dmFsdWUpOwotCWNrX3ByX2ZlbmNlX3N0b3JlKCk7Ci0JY2tf
cHJfc3RvcmVfcHRyX3Vuc2FmZSgmY2FuZGlkYXRlLT5rZXksICh2b2lkICopZW50cnktPmtleSk7
Ci0jZW5kaWYKLQotCUNLX0hUX1RZUEVfU1RPUkUoJm1hcC0+bl9lbnRyaWVzLCBtYXAtPm5fZW50
cmllcyArIDEpOwotCi0JLyogRW5mb3JjZSBhIGxvYWQgZmFjdG9yIG9mIDAuNS4gKi8KLQlpZiAo
bWFwLT5uX2VudHJpZXMgKiAyID4gbWFwLT5jYXBhY2l0eSkKLQkJY2tfaHRfZ3Jvd19zcG1jKHRh
YmxlLCBtYXAtPmNhcGFjaXR5IDw8IDEpOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQKLWNr
X2h0X2Rlc3Ryb3koc3RydWN0IGNrX2h0ICp0YWJsZSkKLXsKLQotCWNrX2h0X21hcF9kZXN0cm95
KHRhYmxlLT5tLCB0YWJsZS0+bWFwLCBmYWxzZSk7Ci0JcmV0dXJuOwotfQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svc3JjL2NrX2h0X2hhc2guaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9ja19odF9oYXNoLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGUwNzY3Zjk5MTUxYzA2YTZmNWM5ZGUyYjJjMmQ1ZTkyZjk4OGJj
MzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvY2svc3JjL2NrX2h0X2hhc2guaAorKysgL2Rldi9udWxs
CkBAIC0xLDI3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTItMjAxNSBTYW15IEFsIEJh
aHJhCi0gKiBDb3B5cmlnaHQgMjAxMS0yMDE0IEFwcE5leHVzLCBJbmMuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQot
ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBD
S19IVF9IQVNIX0gKLSNkZWZpbmUgQ0tfSFRfSEFTSF9ICi0KLS8qCi0gKiBUaGlzIGlzIHRoZSBN
dXJtdXIgaGFzaCB3cml0dGVuIGJ5IEF1c3RpbiBBcHBsZWJ5LgotICovCi0KLSNpbmNsdWRlIDxj
a19zdGRpbnQuaD4KLSNpbmNsdWRlIDxja19zdHJpbmcuaD4KLQotLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLy8gTXVybXVySGFzaDMgd2FzIHdyaXR0ZW4gYnkgQXVzdGluIEFwcGxlYnksIGFuZCBp
cyBwbGFjZWQgaW4gdGhlIHB1YmxpYwotLy8gZG9tYWluLiBUaGUgYXV0aG9yIGhlcmVieSBkaXNj
bGFpbXMgY29weXJpZ2h0IHRvIHRoaXMgc291cmNlIGNvZGUuCi0KLS8vIE5vdGUgLSBUaGUgeDg2
IGFuZCB4NjQgdmVyc2lvbnMgZG8gX25vdF8gcHJvZHVjZSB0aGUgc2FtZSByZXN1bHRzLCBhcyB0
aGUKLS8vIGFsZ29yaXRobXMgYXJlIG9wdGltaXplZCBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBwbGF0
Zm9ybXMuIFlvdSBjYW4gc3RpbGwKLS8vIGNvbXBpbGUgYW5kIHJ1biBhbnkgb2YgdGhlbSBvbiBh
bnkgcGxhdGZvcm0sIGJ1dCB5b3VyIHBlcmZvcm1hbmNlIHdpdGggdGhlCi0vLyBub24tbmF0aXZl
IHZlcnNpb24gd2lsbCBiZSBsZXNzIHRoYW4gb3B0aW1hbC4KLQotLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLy8gUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb25zIGFuZCBtYWNyb3MKLQotLy8gTWlj
cm9zb2Z0IFZpc3VhbCBTdHVkaW8KLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0KLSNkZWZpbmUg
Rk9SQ0VfSU5MSU5FICAgIF9fZm9yY2VpbmxpbmUKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0j
ZGVmaW5lIFJPVEwzMih4LHkpICAgICBfcm90bCh4LHkpCi0jZGVmaW5lIFJPVEw2NCh4LHkpICAg
ICBfcm90bDY0KHgseSkKLQotI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgpCi0KLS8vIE90aGVy
IGNvbXBpbGVycwotCi0jZWxzZSAgIC8vIGRlZmluZWQoX01TQ19WRVIpCi0KLSNkZWZpbmUgRk9S
Q0VfSU5MSU5FIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKLQotc3RhdGlj
IGlubGluZSB1aW50MzJfdCByb3RsMzIgKCB1aW50MzJfdCB4LCBpbnQ4X3QgciApCi17Ci0gIHJl
dHVybiAoeCA8PCByKSB8ICh4ID4+ICgzMiAtIHIpKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50
NjRfdCByb3RsNjQgKCB1aW50NjRfdCB4LCBpbnQ4X3QgciApCi17Ci0gIHJldHVybiAoeCA8PCBy
KSB8ICh4ID4+ICg2NCAtIHIpKTsKLX0KLQotI2RlZmluZSBST1RMMzIoeCx5KSAgICAgcm90bDMy
KHgseSkKLSNkZWZpbmUgUk9UTDY0KHgseSkgICAgIHJvdGw2NCh4LHkpCi0KLSNkZWZpbmUgQklH
X0NPTlNUQU5UKHgpICh4IyNMTFUpCi0KLSNlbmRpZiAvLyAhZGVmaW5lZChfTVNDX1ZFUikKLQot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQmxvY2sgcmVhZCAtIGlmIHlvdXIgcGxhdGZvcm0g
bmVlZHMgdG8gZG8gZW5kaWFuLXN3YXBwaW5nIG9yIGNhbiBvbmx5Ci0vLyBoYW5kbGUgYWxpZ25l
ZCByZWFkcywgZG8gdGhlIGNvbnZlcnNpb24gaGVyZQotCi1GT1JDRV9JTkxJTkUgc3RhdGljIHVp
bnQzMl90IGdldGJsb2NrICggY29uc3QgdWludDMyX3QgKiBwLCBpbnQgaSApCi17Ci0jaWZkZWYg
X19zMzkweF9fCi0gIHVpbnQzMl90IHJlczsKLQotICBfX2FzbV9fICgiCWxydgklMCwlMVxuIgot
CSAgIDogIj1yIiAocmVzKSA6ICJRIiAocFtpXSkgOiAiY2MiLCAibWVtIik7Ci0gIHJldHVybiBy
ZXM7Ci0jZWxzZQotICByZXR1cm4gcFtpXTsKLSNlbmRpZiAvKiAhX19zMzkweF9fICovCi19Ci0K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZpbmFsaXphdGlvbiBtaXggLSBmb3JjZSBhbGwg
Yml0cyBvZiBhIGhhc2ggYmxvY2sgdG8gYXZhbGFuY2hlCi0KLUZPUkNFX0lOTElORSBzdGF0aWMg
dWludDMyX3QgZm1peCAoIHVpbnQzMl90IGggKQotewotICBoIF49IGggPj4gMTY7Ci0gIGggKj0g
MHg4NWViY2E2YjsKLSAgaCBePSBoID4+IDEzOwotICBoICo9IDB4YzJiMmFlMzU7Ci0gIGggXj0g
aCA+PiAxNjsKLQotICByZXR1cm4gaDsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1z
dGF0aWMgaW5saW5lIHZvaWQgTXVybXVySGFzaDNfeDg2XzMyICggY29uc3Qgdm9pZCAqIGtleSwg
aW50IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2VlZCwgdWludDMy
X3QgKiBvdXQgKQotewotICBjb25zdCB1aW50OF90ICogZGF0YSA9IChjb25zdCB1aW50OF90Kilr
ZXk7Ci0gIGNvbnN0IGludCBuYmxvY2tzID0gbGVuIC8gNDsKLSAgaW50IGk7Ci0KLSAgdWludDMy
X3QgaDEgPSBzZWVkOwotCi0gIHVpbnQzMl90IGMxID0gMHhjYzllMmQ1MTsKLSAgdWludDMyX3Qg
YzIgPSAweDFiODczNTkzOwotCi0gIC8vLS0tLS0tLS0tLQotICAvLyBib2R5Ci0KLSAgY29uc3Qg
dWludDMyX3QgKiBibG9ja3MgPSAoY29uc3QgdWludDMyX3QgKikoY29uc3Qgdm9pZCAqKShkYXRh
ICsgbmJsb2Nrcyo0KTsKLQotICBmb3IoaSA9IC1uYmxvY2tzOyBpOyBpKyspCi0gIHsKLSAgICB1
aW50MzJfdCBrMSA9IGdldGJsb2NrKGJsb2NrcyxpKTsKLQotICAgIGsxICo9IGMxOwotICAgIGsx
ID0gUk9UTDMyKGsxLDE1KTsKLSAgICBrMSAqPSBjMjsKLQotICAgIGgxIF49IGsxOwotICAgIGgx
ID0gUk9UTDMyKGgxLDEzKTsKLSAgICBoMSA9IGgxKjUrMHhlNjU0NmI2NDsKLSAgfQotCi0gIC8v
LS0tLS0tLS0tLQotICAvLyB0YWlsCi0KLSAgY29uc3QgdWludDhfdCAqIHRhaWwgPSAoY29uc3Qg
dWludDhfdCopKGRhdGEgKyBuYmxvY2tzKjQpOwotCi0gIHVpbnQzMl90IGsxID0gMDsKLQotICBz
d2l0Y2gobGVuICYgMykKLSAgewotICBjYXNlIDM6IGsxIF49IHRhaWxbMl0gPDwgMTY7Ci0gIGNh
c2UgMjogazEgXj0gdGFpbFsxXSA8PCA4OwotICBjYXNlIDE6IGsxIF49IHRhaWxbMF07Ci0gICAg
ICAgICAgazEgKj0gYzE7IGsxID0gUk9UTDMyKGsxLDE1KTsgazEgKj0gYzI7IGgxIF49IGsxOwot
ICB9OwotCi0gIC8vLS0tLS0tLS0tLQotICAvLyBmaW5hbGl6YXRpb24KLQotICBoMSBePSBsZW47
Ci0KLSAgaDEgPSBmbWl4KGgxKTsKLQotICAqKHVpbnQzMl90ICopb3V0ID0gaDE7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdWludDY0X3QgTXVybXVySGFzaDY0QSAoIGNvbnN0IHZvaWQgKiBrZXksIGlu
dCBsZW4sIHVpbnQ2NF90IHNlZWQgKQotewotICBjb25zdCB1aW50NjRfdCBtID0gQklHX0NPTlNU
QU5UKDB4YzZhNGE3OTM1YmQxZTk5NSk7Ci0gIGNvbnN0IGludCByID0gNDc7Ci0KLSAgdWludDY0
X3QgaCA9IHNlZWQgXiAobGVuICogbSk7Ci0KLSAgY29uc3QgdWludDY0X3QgKiBkYXRhID0gKGNv
bnN0IHVpbnQ2NF90ICopa2V5OwotICBjb25zdCB1aW50NjRfdCAqIGVuZCA9IGRhdGEgKyAobGVu
LzgpOwotCi0gIHdoaWxlKGRhdGEgIT0gZW5kKQotICB7Ci0gICAgdWludDY0X3QgazsKLQotICAg
IGlmICghKCh1aW50cHRyX3QpZGF0YSAmIDB4NykpCi0JICAgIGsgPSAqZGF0YSsrOwotICAgIGVs
c2UgewotCSAgICBtZW1jcHkoJmssIGRhdGEsIHNpemVvZihrKSk7Ci0JICAgIGRhdGErKzsKLSAg
ICB9Ci0KLSAgICBrICo9IG07Ci0gICAgayBePSBrID4+IHI7Ci0gICAgayAqPSBtOwotCi0gICAg
aCBePSBrOwotICAgIGggKj0gbTsKLSAgfQotCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRh
MiA9IChjb25zdCB1bnNpZ25lZCBjaGFyKilkYXRhOwotCi0gIHN3aXRjaChsZW4gJiA3KQotICB7
Ci0gIGNhc2UgNzogaCBePSAodWludDY0X3QpKGRhdGEyWzZdKSA8PCA0ODsKLSAgY2FzZSA2OiBo
IF49ICh1aW50NjRfdCkoZGF0YTJbNV0pIDw8IDQwOwotICBjYXNlIDU6IGggXj0gKHVpbnQ2NF90
KShkYXRhMls0XSkgPDwgMzI7Ci0gIGNhc2UgNDogaCBePSAodWludDY0X3QpKGRhdGEyWzNdKSA8
PCAyNDsKLSAgY2FzZSAzOiBoIF49ICh1aW50NjRfdCkoZGF0YTJbMl0pIDw8IDE2OwotICBjYXNl
IDI6IGggXj0gKHVpbnQ2NF90KShkYXRhMlsxXSkgPDwgODsKLSAgY2FzZSAxOiBoIF49ICh1aW50
NjRfdCkoZGF0YTJbMF0pOwotICAgICAgICAgIGggKj0gbTsKLSAgfTsKLQotICBoIF49IGggPj4g
cjsKLSAgaCAqPSBtOwotICBoIF49IGggPj4gcjsKLQotICByZXR1cm4gaDsKLX0KLQotCi0vLyA2
NC1iaXQgaGFzaCBmb3IgMzItYml0IHBsYXRmb3JtcwotCi1zdGF0aWMgaW5saW5lIHVpbnQ2NF90
IE11cm11ckhhc2g2NEIgKCBjb25zdCB2b2lkICoga2V5LCBpbnQgbGVuLCB1aW50NjRfdCBzZWVk
ICkKLXsKLSAgY29uc3QgdWludDMyX3QgbSA9IDB4NWJkMWU5OTU7Ci0gIGNvbnN0IGludCByID0g
MjQ7Ci0KLSAgdWludDMyX3QgaDEgPSAodWludDMyX3QpKHNlZWQpIF4gbGVuOwotICB1aW50MzJf
dCBoMiA9ICh1aW50MzJfdCkoc2VlZCA+PiAzMik7Ci0KLSAgY29uc3QgdWludDMyX3QgKiBkYXRh
ID0gKGNvbnN0IHVpbnQzMl90ICopa2V5OwotCi0gIHdoaWxlKGxlbiA+PSA4KQotICB7Ci0gICAg
dWludDMyX3QgazEgPSAqZGF0YSsrOwotICAgIGsxICo9IG07IGsxIF49IGsxID4+IHI7IGsxICo9
IG07Ci0gICAgaDEgKj0gbTsgaDEgXj0gazE7Ci0gICAgbGVuIC09IDQ7Ci0KLSAgICB1aW50MzJf
dCBrMiA9ICpkYXRhKys7Ci0gICAgazIgKj0gbTsgazIgXj0gazIgPj4gcjsgazIgKj0gbTsKLSAg
ICBoMiAqPSBtOyBoMiBePSBrMjsKLSAgICBsZW4gLT0gNDsKLSAgfQotCi0gIGlmKGxlbiA+PSA0
KQotICB7Ci0gICAgdWludDMyX3QgazEgPSAqZGF0YSsrOwotICAgIGsxICo9IG07IGsxIF49IGsx
ID4+IHI7IGsxICo9IG07Ci0gICAgaDEgKj0gbTsgaDEgXj0gazE7Ci0gICAgbGVuIC09IDQ7Ci0g
IH0KLQotICBzd2l0Y2gobGVuKQotICB7Ci0gIGNhc2UgMzogaDIgXj0gKChjb25zdCB1bnNpZ25l
ZCBjaGFyKilkYXRhKVsyXSA8PCAxNjsKLSAgY2FzZSAyOiBoMiBePSAoKGNvbnN0IHVuc2lnbmVk
IGNoYXIqKWRhdGEpWzFdIDw8IDg7Ci0gIGNhc2UgMTogaDIgXj0gKChjb25zdCB1bnNpZ25lZCBj
aGFyKilkYXRhKVswXTsKLSAgICAgIGgyICo9IG07Ci0gIH07Ci0KLSAgaDEgXj0gaDIgPj4gMTg7
IGgxICo9IG07Ci0gIGgyIF49IGgxID4+IDIyOyBoMiAqPSBtOwotICBoMSBePSBoMiA+PiAxNzsg
aDEgKj0gbTsKLSAgaDIgXj0gaDEgPj4gMTk7IGgyICo9IG07Ci0KLSAgdWludDY0X3QgaCA9IGgx
OwotCi0gIGggPSAoaCA8PCAzMikgfCBoMjsKLQotICByZXR1cm4gaDsKLX0KLQotI2VuZGlmIC8q
IENLX0hUX0hBU0hfSCAqLwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvY2svc3JjL2NrX2ludGVybmFsLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9zcmMvY2tfaW50ZXJuYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FhZDNk
NzQzY2VlMTU1YWJkYzZlZTZhYzBiMmU5ZWJjMmEwYzlhYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9j
ay9zcmMvY2tfaW50ZXJuYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IDIwMTEtMjAxNSBTYW15IEFsIEJhaHJhLgotICogQ29weXJpZ2h0IDIwMTEg
RGF2aWQgSm9zZXBoLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0g
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
Ci0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogU2V2ZXJh
bCBvZiB0aGVzZSBhcmUgZnJvbTogaHR0cDovL2dyYXBoaWNzLnN0YW5mb3JkLmVkdS9+c2VhbmRl
ci9iaXRoYWNrcy5odG1sCi0gKi8KLQotI2RlZmluZSBDS19JTlRFUk5BTF9MT0dfMCAoMHhBQUFB
QUFBQSkKLSNkZWZpbmUgQ0tfSU5URVJOQUxfTE9HXzEgKDB4Q0NDQ0NDQ0MpCi0jZGVmaW5lIENL
X0lOVEVSTkFMX0xPR18yICgweEYwRjBGMEYwKQotI2RlZmluZSBDS19JTlRFUk5BTF9MT0dfMyAo
MHhGRjAwRkYwMCkKLSNkZWZpbmUgQ0tfSU5URVJOQUxfTE9HXzQgKDB4RkZGRjAwMDApCi0KLUNL
X0NDX0lOTElORSBzdGF0aWMgdWludDMyX3QKLWNrX2ludGVybmFsX2xvZyh1aW50MzJfdCB2KQot
ewotICAgICAgICB1aW50MzJfdCByID0gKHYgJiBDS19JTlRFUk5BTF9MT0dfMCkgIT0gMDsKLQot
CXIgfD0gKCh2ICYgQ0tfSU5URVJOQUxfTE9HXzQpICE9IDApIDw8IDQ7Ci0JciB8PSAoKHYgJiBD
S19JTlRFUk5BTF9MT0dfMykgIT0gMCkgPDwgMzsKLQlyIHw9ICgodiAmIENLX0lOVEVSTkFMX0xP
R18yKSAhPSAwKSA8PCAyOwotCXIgfD0gKCh2ICYgQ0tfSU5URVJOQUxfTE9HXzEpICE9IDApIDw8
IDE7Ci0gICAgICAgIHJldHVybiAocik7Ci19Ci0KLUNLX0NDX0lOTElORSBzdGF0aWMgdWludDMy
X3QKLWNrX2ludGVybmFsX3Bvd2VyXzIodWludDMyX3QgdikKLXsKLQotICAgICAgICAtLXY7Ci0g
ICAgICAgIHYgfD0gdiA+PiAxOwotICAgICAgICB2IHw9IHYgPj4gMjsKLSAgICAgICAgdiB8PSB2
ID4+IDQ7Ci0gICAgICAgIHYgfD0gdiA+PiA4OwotICAgICAgICB2IHw9IHYgPj4gMTY7Ci0gICAg
ICAgIHJldHVybiAoKyt2KTsKLX0KLQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB1bnNpZ25lZCBsb25n
Ci1ja19pbnRlcm5hbF9tYXgodW5zaWduZWQgbG9uZyB4LCB1bnNpZ25lZCBsb25nIHkpCi17Ci0K
LQlyZXR1cm4geCBeICgoeCBeIHkpICYgLSh4IDwgeSkpOwotfQotCi1DS19DQ19JTkxJTkUgc3Rh
dGljIHVpbnQ2NF90Ci1ja19pbnRlcm5hbF9tYXhfNjQodWludDY0X3QgeCwgdWludDY0X3QgeSkK
LXsKLQotCXJldHVybiB4IF4gKCh4IF4geSkgJiAtKHggPCB5KSk7Ci19Ci0KLUNLX0NDX0lOTElO
RSBzdGF0aWMgdWludDMyX3QKLWNrX2ludGVybmFsX21heF8zMih1aW50MzJfdCB4LCB1aW50MzJf
dCB5KQotewotCi0JcmV0dXJuIHggXiAoKHggXiB5KSAmIC0oeCA8IHkpKTsKLX0KLQotQ0tfQ0Nf
SU5MSU5FIHN0YXRpYyB1bnNpZ25lZCBsb25nCi1ja19pbnRlcm5hbF9ic2YodW5zaWduZWQgbG9u
ZyB2KQotewotI2lmIGRlZmluZWQoX19HTlVDX18pCi0JcmV0dXJuIF9fYnVpbHRpbl9mZnModik7
Ci0jZWxzZQotCXVuc2lnbmVkIGludCBpOwotCWNvbnN0IHVuc2lnbmVkIGludCBzID0gc2l6ZW9m
KHVuc2lnbmVkIGxvbmcpICogOCAtIDE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgczsgaSsrKSB7Ci0J
CWlmICh2ICYgKDFVTCA8PCAocyAtIGkpKSkKLQkJCXJldHVybiBzaXplb2YodW5zaWduZWQgbG9u
ZykgKiA4IC0gaTsKLQl9Ci0KLQlyZXR1cm4gMTsKLSNlbmRpZiAvKiAhX19HTlVDX18gKi8KLX0K
LQotQ0tfQ0NfSU5MSU5FIHN0YXRpYyB1aW50NjRfdAotY2tfaW50ZXJuYWxfYnNmXzY0KHVpbnQ2
NF90IHYpCi17Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykKLQlyZXR1cm4gX19idWlsdGluX2Zmcyh2
KTsKLSNlbHNlCi0JdW5zaWduZWQgaW50IGk7Ci0JY29uc3QgdW5zaWduZWQgaW50IHMgPSBzaXpl
b2YodW5zaWduZWQgbG9uZykgKiA4IC0gMTsKLQotCWZvciAoaSA9IDA7IGkgPCBzOyBpKyspIHsK
LQkJaWYgKHYgJiAoMVVMTCA8PCAoNjNVIC0gaSkpKQotCQkJcmV0dXJuIGk7Ci0JfQotI2VuZGlm
IC8qICFfX0dOVUNfXyAqLwotCi0JcmV0dXJuIDE7Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2NrL3NyYy9ja19yaHMuYyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2NrL3NyYy9ja19yaHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZjZkZDJlZTI5ZTlmZDdiZjQ4YWEzYjdiMTcxNWRlNDI4ZGM2ODNiYy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9jay9zcmMvY2tfcmhzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDgwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgMjAxNC0yMDE1IE9saXZpZXIgSG91Y2hhcmQuCi0gKiBDb3B5cmln
aHQgMjAxMi0yMDE1IFNhbXkgQWwgQmFocmEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlIDxja19jYy5oPgotI2luY2x1ZGUgPGNrX3Jocy5oPgotI2luY2x1ZGUgPGNrX2xp
bWl0cy5oPgotI2luY2x1ZGUgPGNrX21kLmg+Ci0jaW5jbHVkZSA8Y2tfcHIuaD4KLSNpbmNsdWRl
IDxja19zdGRpbnQuaD4KLSNpbmNsdWRlIDxja19zdGRib29sLmg+Ci0jaW5jbHVkZSA8Y2tfc3Ry
aW5nLmg+Ci0KLSNpbmNsdWRlICJja19pbnRlcm5hbC5oIgotCi0jaWZuZGVmIENLX1JIU19QUk9C
RV9MMV9TSElGVAotI2RlZmluZSBDS19SSFNfUFJPQkVfTDFfU0hJRlQgM1VMTAotI2VuZGlmIC8q
IENLX1JIU19QUk9CRV9MMV9TSElGVCAqLwotCi0jZGVmaW5lIENLX1JIU19QUk9CRV9MMSAoMSA8
PCBDS19SSFNfUFJPQkVfTDFfU0hJRlQpCi0jZGVmaW5lIENLX1JIU19QUk9CRV9MMV9NQVNLIChD
S19SSFNfUFJPQkVfTDEgLSAxKQotCi0jaWZuZGVmIENLX1JIU19QUk9CRV9MMV9ERUZBVUxUCi0j
ZGVmaW5lIENLX1JIU19QUk9CRV9MMV9ERUZBVUxUIENLX01EX0NBQ0hFTElORQotI2VuZGlmCi0K
LSNkZWZpbmUgQ0tfUkhTX1ZNQV9NQVNLICgodWludHB0cl90KSgoMVVMTCA8PCBDS19NRF9WTUFf
QklUUykgLSAxKSkKLSNkZWZpbmUgQ0tfUkhTX1ZNQSh4KQlcCi0JKCh2b2lkICopKCh1aW50cHRy
X3QpKHgpICYgQ0tfUkhTX1ZNQV9NQVNLKSkKLQotI2RlZmluZSBDS19SSFNfRU1QVFkgICAgIE5V
TEwKLSNkZWZpbmUgQ0tfUkhTX0cJCSgxMDI0KQotI2RlZmluZSBDS19SSFNfR19NQVNLCShDS19S
SFNfRyAtIDEpCi0KLSNpZiBkZWZpbmVkKENLX0ZfUFJfTE9BRF84KSAmJiBkZWZpbmVkKENLX0Zf
UFJfU1RPUkVfOCkKLSNkZWZpbmUgQ0tfUkhTX1dPUkQgICAgICAgICAgdWludDhfdAotI2RlZmlu
ZSBDS19SSFNfV09SRF9NQVgJICAgIFVJTlQ4X01BWAotI2RlZmluZSBDS19SSFNfU1RPUkUoeCwg
eSkgICBja19wcl9zdG9yZV84KHgsIHkpCi0jZGVmaW5lIENLX1JIU19MT0FEKHgpICAgICAgIGNr
X3ByX2xvYWRfOCh4KQotI2VsaWYgZGVmaW5lZChDS19GX1BSX0xPQURfMTYpICYmIGRlZmluZWQo
Q0tfRl9QUl9TVE9SRV8xNikKLSNkZWZpbmUgQ0tfUkhTX1dPUkQgICAgICAgICAgdWludDE2X3QK
LSNkZWZpbmUgQ0tfUkhTX1dPUkRfTUFYCSAgICBVSU5UMTZfTUFYCi0jZGVmaW5lIENLX1JIU19T
VE9SRSh4LCB5KSAgIGNrX3ByX3N0b3JlXzE2KHgsIHkpCi0jZGVmaW5lIENLX1JIU19MT0FEKHgp
ICAgICAgIGNrX3ByX2xvYWRfMTYoeCkKLSNlbGlmIGRlZmluZWQoQ0tfRl9QUl9MT0FEXzMyKSAm
JiBkZWZpbmVkKENLX0ZfUFJfU1RPUkVfMzIpCi0jZGVmaW5lIENLX1JIU19XT1JEICAgICAgICAg
IHVpbnQzMl90Ci0jZGVmaW5lIENLX1JIU19XT1JEX01BWAkgICAgVUlOVDMyX01BWAotI2RlZmlu
ZSBDS19SSFNfU1RPUkUoeCwgeSkgICBja19wcl9zdG9yZV8zMih4LCB5KQotI2RlZmluZSBDS19S
SFNfTE9BRCh4KSAgICAgICBja19wcl9sb2FkXzMyKHgpCi0jZWxzZQotI2Vycm9yICJja19yaHMg
aXMgbm90IHN1cHBvcnRlZCBvbiB5b3VyIHBsYXRmb3JtLiIKLSNlbmRpZgotCi0jZGVmaW5lIENL
X1JIU19NQVhfV0FOVEVECTB4ZmZmZgotCi1lbnVtIGNrX3Joc19wcm9iZV9iZWhhdmlvciB7Ci0J
Q0tfUkhTX1BST0JFID0gMCwJLyogRGVmYXVsdCBiZWhhdmlvci4gKi8KLQlDS19SSFNfUFJPQkVf
UkgsCS8qIFNob3J0LWNpcmN1aXQgaWYgUkggc2xvdCBmb3VuZC4gKi8KLQlDS19SSFNfUFJPQkVf
SU5TRVJULAkvKiBTaG9ydC1jaXJjdWl0IG9uIHByb2JlIGJvdW5kIGlmIHRvbWJzdG9uZSBmb3Vu
ZC4gKi8KLQotCUNLX1JIU19QUk9CRV9ST0JJTl9IT09ELC8qIExvb2sgZm9yIHRoZSBmaXJzdCBz
bG90IGF2YWlsYWJsZSBmb3IgdGhlIGVudHJ5IHdlIGFyZSBhYm91dCB0byByZXBsYWNlLCBvbmx5
IHVzZWQgdG8gaW50ZXJuYWxseSBpbXBsZW1lbnQgUm9iaW4gSG9vZCAqLwotCUNLX1JIU19QUk9C
RV9OT19SSCwJLyogRG9uJ3QgZG8gdGhlIFJIIGRhbmNlICovCi19Owotc3RydWN0IGNrX3Joc19l
bnRyeV9kZXNjIHsKLQl1bnNpZ25lZCBpbnQgcHJvYmVzOwotCXVuc2lnbmVkIHNob3J0IHdhbnRl
ZDsKLQlDS19SSFNfV09SRCBwcm9iZV9ib3VuZDsKLQlib29sIGluX3JoOwotCWNvbnN0IHZvaWQg
KmVudHJ5OwotfSBDS19DQ19BTElHTigxNik7Ci0KLXN0cnVjdCBja19yaHNfbm9fZW50cnlfZGVz
YyB7Ci0JdW5zaWduZWQgaW50IHByb2JlczsKLQl1bnNpZ25lZCBzaG9ydCB3YW50ZWQ7Ci0JQ0tf
UkhTX1dPUkQgcHJvYmVfYm91bmQ7Ci0JYm9vbCBpbl9yaDsKLX0gQ0tfQ0NfQUxJR04oOCk7Ci0K
LXR5cGVkZWYgbG9uZyBja19yaHNfcHJvYmVfY2JfdChzdHJ1Y3QgY2tfcmhzICpocywKLSAgICBz
dHJ1Y3QgY2tfcmhzX21hcCAqbWFwLAotICAgIHVuc2lnbmVkIGxvbmcgKm5fcHJvYmVzLAotICAg
IGxvbmcgKnByaW9yaXR5LAotICAgIHVuc2lnbmVkIGxvbmcgaCwKLSAgICBjb25zdCB2b2lkICpr
ZXksCi0gICAgY29uc3Qgdm9pZCAqKm9iamVjdCwKLSAgICB1bnNpZ25lZCBsb25nIHByb2JlX2xp
bWl0LAotICAgIGVudW0gY2tfcmhzX3Byb2JlX2JlaGF2aW9yIGJlaGF2aW9yKTsKLQotc3RydWN0
IGNrX3Joc19tYXAgewotCXVuc2lnbmVkIGludCBnZW5lcmF0aW9uW0NLX1JIU19HXTsKLQl1bnNp
Z25lZCBpbnQgcHJvYmVfbWF4aW11bTsKLQl1bnNpZ25lZCBsb25nIG1hc2s7Ci0JdW5zaWduZWQg
bG9uZyBzdGVwOwotCXVuc2lnbmVkIGludCBwcm9iZV9saW1pdDsKLQl1bnNpZ25lZCBsb25nIG5f
ZW50cmllczsKLQl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsK
LQl1bnNpZ25lZCBsb25nIG1heF9lbnRyaWVzOwotCWNoYXIgb2Zmc2V0X21hc2s7Ci0JdW5pb24g
ewotCQlzdHJ1Y3QgY2tfcmhzX2VudHJ5X2Rlc2MgKmRlc2NzOwotCQlzdHJ1Y3QgY2tfcmhzX25v
X2VudHJ5IHsKLQkJCWNvbnN0IHZvaWQgKiplbnRyaWVzOwotCQkJc3RydWN0IGNrX3Joc19ub19l
bnRyeV9kZXNjICpkZXNjczsKLQkJfSBub19lbnRyaWVzOwotCX0gZW50cmllczsKLQlib29sIHJl
YWRfbW9zdGx5OwotCWNrX3Joc19wcm9iZV9jYl90ICpwcm9iZV9mdW5jOwotfTsKLQotc3RhdGlj
IENLX0NDX0lOTElORSBjb25zdCB2b2lkICoKLWNrX3Joc19lbnRyeShzdHJ1Y3QgY2tfcmhzX21h
cCAqbWFwLCBsb25nIG9mZnNldCkKLXsKLQotCWlmIChtYXAtPnJlYWRfbW9zdGx5KQotCQlyZXR1
cm4gKG1hcC0+ZW50cmllcy5ub19lbnRyaWVzLmVudHJpZXNbb2Zmc2V0XSk7Ci0JZWxzZQotCQly
ZXR1cm4gKG1hcC0+ZW50cmllcy5kZXNjc1tvZmZzZXRdLmVudHJ5KTsKLX0KLQotc3RhdGljIENL
X0NDX0lOTElORSBjb25zdCB2b2lkICoqCi1ja19yaHNfZW50cnlfYWRkcihzdHJ1Y3QgY2tfcmhz
X21hcCAqbWFwLCBsb25nIG9mZnNldCkKLXsKLQotCWlmIChtYXAtPnJlYWRfbW9zdGx5KQotCQly
ZXR1cm4gKCZtYXAtPmVudHJpZXMubm9fZW50cmllcy5lbnRyaWVzW29mZnNldF0pOwotCWVsc2UK
LQkJcmV0dXJuICgmbWFwLT5lbnRyaWVzLmRlc2NzW29mZnNldF0uZW50cnkpOwotfQotCi1zdGF0
aWMgQ0tfQ0NfSU5MSU5FIHN0cnVjdCBja19yaHNfZW50cnlfZGVzYyAqCi1ja19yaHNfZGVzYyhz
dHJ1Y3QgY2tfcmhzX21hcCAqbWFwLCBsb25nIG9mZnNldCkKLXsKLQotCWlmIChDS19DQ19VTkxJ
S0VMWShtYXAtPnJlYWRfbW9zdGx5KSkKLQkJcmV0dXJuICgoc3RydWN0IGNrX3Joc19lbnRyeV9k
ZXNjICopKHZvaWQgKikmbWFwLT5lbnRyaWVzLm5vX2VudHJpZXMuZGVzY3Nbb2Zmc2V0XSk7Ci0J
ZWxzZQotCQlyZXR1cm4gKCZtYXAtPmVudHJpZXMuZGVzY3Nbb2Zmc2V0XSk7Ci19Ci0KLXN0YXRp
YyBDS19DQ19JTkxJTkUgdm9pZAotY2tfcmhzX3dhbnRlZF9pbmMoc3RydWN0IGNrX3Joc19tYXAg
Km1hcCwgbG9uZyBvZmZzZXQpCi17Ci0KLQlpZiAoQ0tfQ0NfVU5MSUtFTFkobWFwLT5yZWFkX21v
c3RseSkpCi0JCW1hcC0+ZW50cmllcy5ub19lbnRyaWVzLmRlc2NzW29mZnNldF0ud2FudGVkKys7
Ci0JZWxzZQotCQltYXAtPmVudHJpZXMuZGVzY3Nbb2Zmc2V0XS53YW50ZWQrKzsKLX0KLQotc3Rh
dGljIENLX0NDX0lOTElORSB1bnNpZ25lZCBpbnQKLWNrX3Joc19wcm9iZXMoc3RydWN0IGNrX3Jo
c19tYXAgKm1hcCwgbG9uZyBvZmZzZXQpCi17Ci0KLQlpZiAoQ0tfQ0NfVU5MSUtFTFkobWFwLT5y
ZWFkX21vc3RseSkpCi0JCXJldHVybiAobWFwLT5lbnRyaWVzLm5vX2VudHJpZXMuZGVzY3Nbb2Zm
c2V0XS5wcm9iZXMpOwotCWVsc2UKLQkJcmV0dXJuIChtYXAtPmVudHJpZXMuZGVzY3Nbb2Zmc2V0
XS5wcm9iZXMpOwotfQotCi1zdGF0aWMgQ0tfQ0NfSU5MSU5FIHZvaWQKLWNrX3Joc19zZXRfcHJv
YmVzKHN0cnVjdCBja19yaHNfbWFwICptYXAsIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgdmFs
dWUpCi17Ci0KLQlpZiAoQ0tfQ0NfVU5MSUtFTFkobWFwLT5yZWFkX21vc3RseSkpCi0JCW1hcC0+
ZW50cmllcy5ub19lbnRyaWVzLmRlc2NzW29mZnNldF0ucHJvYmVzID0gdmFsdWU7Ci0JZWxzZQot
CQltYXAtPmVudHJpZXMuZGVzY3Nbb2Zmc2V0XS5wcm9iZXMgPSB2YWx1ZTsKLX0KLQotc3RhdGlj
IENLX0NDX0lOTElORSBDS19SSFNfV09SRAotY2tfcmhzX3Byb2JlX2JvdW5kKHN0cnVjdCBja19y
aHNfbWFwICptYXAsIGxvbmcgb2Zmc2V0KQotewotCi0JaWYgKENLX0NDX1VOTElLRUxZKG1hcC0+
cmVhZF9tb3N0bHkpKQotCQlyZXR1cm4gKG1hcC0+ZW50cmllcy5ub19lbnRyaWVzLmRlc2NzW29m
ZnNldF0ucHJvYmVfYm91bmQpOwotCWVsc2UKLQkJcmV0dXJuIChtYXAtPmVudHJpZXMuZGVzY3Nb
b2Zmc2V0XS5wcm9iZV9ib3VuZCk7Ci19Ci0KLXN0YXRpYyBDS19DQ19JTkxJTkUgQ0tfUkhTX1dP
UkQgKgotY2tfcmhzX3Byb2JlX2JvdW5kX2FkZHIoc3RydWN0IGNrX3Joc19tYXAgKm1hcCwgbG9u
ZyBvZmZzZXQpCi17Ci0KLQlpZiAoQ0tfQ0NfVU5MSUtFTFkobWFwLT5yZWFkX21vc3RseSkpCi0J
CXJldHVybiAoJm1hcC0+ZW50cmllcy5ub19lbnRyaWVzLmRlc2NzW29mZnNldF0ucHJvYmVfYm91
bmQpOwotCWVsc2UKLQkJcmV0dXJuICgmbWFwLT5lbnRyaWVzLmRlc2NzW29mZnNldF0ucHJvYmVf
Ym91bmQpOwotfQotCi0KLXN0YXRpYyBDS19DQ19JTkxJTkUgYm9vbAotY2tfcmhzX2luX3JoKHN0
cnVjdCBja19yaHNfbWFwICptYXAsIGxvbmcgb2Zmc2V0KQotewotCi0JaWYgKENLX0NDX1VOTElL
RUxZKG1hcC0+cmVhZF9tb3N0bHkpKQotCQlyZXR1cm4gKG1hcC0+ZW50cmllcy5ub19lbnRyaWVz
LmRlc2NzW29mZnNldF0uaW5fcmgpOwotCWVsc2UKLQkJcmV0dXJuIChtYXAtPmVudHJpZXMuZGVz
Y3Nbb2Zmc2V0XS5pbl9yaCk7Ci19Ci0KLXN0YXRpYyBDS19DQ19JTkxJTkUgdm9pZAotY2tfcmhz
X3NldF9yaChzdHJ1Y3QgY2tfcmhzX21hcCAqbWFwLCBsb25nIG9mZnNldCkKLXsKLQotCWlmIChD
S19DQ19VTkxJS0VMWShtYXAtPnJlYWRfbW9zdGx5KSkKLQkJbWFwLT5lbnRyaWVzLm5vX2VudHJp
ZXMuZGVzY3Nbb2Zmc2V0XS5pbl9yaCA9IHRydWU7Ci0JZWxzZQotCQltYXAtPmVudHJpZXMuZGVz
Y3Nbb2Zmc2V0XS5pbl9yaCA9IHRydWU7Ci19Ci0KLXN0YXRpYyBDS19DQ19JTkxJTkUgdm9pZAot
Y2tfcmhzX3Vuc2V0X3JoKHN0cnVjdCBja19yaHNfbWFwICptYXAsIGxvbmcgb2Zmc2V0KQotewot
Ci0JaWYgKENLX0NDX1VOTElLRUxZKG1hcC0+cmVhZF9tb3N0bHkpKQotCQltYXAtPmVudHJpZXMu
bm9fZW50cmllcy5kZXNjc1tvZmZzZXRdLmluX3JoID0gZmFsc2U7Ci0JZWxzZQotCQltYXAtPmVu
dHJpZXMuZGVzY3Nbb2Zmc2V0XS5pbl9yaCA9IGZhbHNlOwotfQotCi0KLSNkZWZpbmUgQ0tfUkhT
X0RFRkFVTFRfTE9BRF9GQUNUT1IJNTAKLQotc3RhdGljIGNrX3Joc19wcm9iZV9jYl90IGNrX3Jo
c19tYXBfcHJvYmU7Ci1zdGF0aWMgY2tfcmhzX3Byb2JlX2NiX3QgY2tfcmhzX21hcF9wcm9iZV9y
bTsKLQotYm9vbAotY2tfcmhzX3NldF9sb2FkX2ZhY3RvcihzdHJ1Y3QgY2tfcmhzICpocywgdW5z
aWduZWQgaW50IGxvYWRfZmFjdG9yKQotewotCXN0cnVjdCBja19yaHNfbWFwICptYXAgPSBocy0+
bWFwOwotCi0JaWYgKGxvYWRfZmFjdG9yID09IDAgfHwgbG9hZF9mYWN0b3IgPiAxMDApCi0JCXJl
dHVybiBmYWxzZTsKLQotCWhzLT5sb2FkX2ZhY3RvciA9IGxvYWRfZmFjdG9yOwotCW1hcC0+bWF4
X2VudHJpZXMgPSAobWFwLT5jYXBhY2l0eSAqICh1bnNpZ25lZCBsb25nKWhzLT5sb2FkX2ZhY3Rv
cikgLyAxMDA7Ci0Jd2hpbGUgKG1hcC0+bl9lbnRyaWVzID4gbWFwLT5tYXhfZW50cmllcykgewot
CQlpZiAoY2tfcmhzX2dyb3coaHMsIG1hcC0+Y2FwYWNpdHkgPDwgMSkgPT0gZmFsc2UpCi0JCQly
ZXR1cm4gZmFsc2U7Ci0JCW1hcCA9IGhzLT5tYXA7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi12
b2lkCi1ja19yaHNfaXRlcmF0b3JfaW5pdChzdHJ1Y3QgY2tfcmhzX2l0ZXJhdG9yICppdGVyYXRv
cikKLXsKLQotCWl0ZXJhdG9yLT5jdXJzb3IgPSBOVUxMOwotCWl0ZXJhdG9yLT5vZmZzZXQgPSAw
OwotCXJldHVybjsKLX0KLQotYm9vbAotY2tfcmhzX25leHQoc3RydWN0IGNrX3JocyAqaHMsIHN0
cnVjdCBja19yaHNfaXRlcmF0b3IgKmksIHZvaWQgKiprZXkpCi17Ci0Jc3RydWN0IGNrX3Joc19t
YXAgKm1hcCA9IGhzLT5tYXA7Ci0Jdm9pZCAqdmFsdWU7Ci0KLQlpZiAoaS0+b2Zmc2V0ID49IG1h
cC0+Y2FwYWNpdHkpCi0JCXJldHVybiBmYWxzZTsKLQotCWRvIHsKLQkJdmFsdWUgPSBDS19DQ19E
RUNPTlNUX1BUUihja19yaHNfZW50cnkobWFwLCBpLT5vZmZzZXQpKTsKLQkJaWYgKHZhbHVlICE9
IENLX1JIU19FTVBUWSkgewotI2lmZGVmIENLX1JIU19QUAotCQkJaWYgKGhzLT5tb2RlICYgQ0tf
UkhTX01PREVfT0JKRUNUKQotCQkJCXZhbHVlID0gQ0tfUkhTX1ZNQSh2YWx1ZSk7Ci0jZW5kaWYK
LQkJCWktPm9mZnNldCsrOwotCQkJKmtleSA9IHZhbHVlOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0K
LQl9IHdoaWxlICgrK2ktPm9mZnNldCA8IG1hcC0+Y2FwYWNpdHkpOwotCi0JcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkCi1ja19yaHNfc3RhdChzdHJ1Y3QgY2tfcmhzICpocywgc3RydWN0IGNrX3Jo
c19zdGF0ICpzdCkKLXsKLQlzdHJ1Y3QgY2tfcmhzX21hcCAqbWFwID0gaHMtPm1hcDsKLQotCXN0
LT5uX2VudHJpZXMgPSBtYXAtPm5fZW50cmllczsKLQlzdC0+cHJvYmVfbWF4aW11bSA9IG1hcC0+
cHJvYmVfbWF4aW11bTsKLQlyZXR1cm47Ci19Ci0KLXVuc2lnbmVkIGxvbmcKLWNrX3Joc19jb3Vu
dChzdHJ1Y3QgY2tfcmhzICpocykKLXsKLQotCXJldHVybiBocy0+bWFwLT5uX2VudHJpZXM7Ci19
Ci0KLXN0YXRpYyB2b2lkCi1ja19yaHNfbWFwX2Rlc3Ryb3koc3RydWN0IGNrX21hbGxvYyAqbSwg
c3RydWN0IGNrX3Joc19tYXAgKm1hcCwgYm9vbCBkZWZlcikKLXsKLQotCW0tPmZyZWUobWFwLCBt
YXAtPnNpemUsIGRlZmVyKTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQKLWNrX3Joc19kZXN0cm95KHN0
cnVjdCBja19yaHMgKmhzKQotewotCi0JY2tfcmhzX21hcF9kZXN0cm95KGhzLT5tLCBocy0+bWFw
LCBmYWxzZSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgc3RydWN0IGNrX3Joc19tYXAgKgotY2tf
cmhzX21hcF9jcmVhdGUoc3RydWN0IGNrX3JocyAqaHMsIHVuc2lnbmVkIGxvbmcgZW50cmllcykK
LXsKLQlzdHJ1Y3QgY2tfcmhzX21hcCAqbWFwOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSwgbl9lbnRy
aWVzLCBsaW1pdDsKLQotCW5fZW50cmllcyA9IGNrX2ludGVybmFsX3Bvd2VyXzIoZW50cmllcyk7
Ci0JaWYgKG5fZW50cmllcyA8IENLX1JIU19QUk9CRV9MMSkKLQkJbl9lbnRyaWVzID0gQ0tfUkhT
X1BST0JFX0wxOwotCi0JaWYgKGhzLT5tb2RlICYgQ0tfUkhTX01PREVfUkVBRF9NT1NUTFkpCi0J
CXNpemUgPSBzaXplb2Yoc3RydWN0IGNrX3Joc19tYXApICsKLQkJICAgIChzaXplb2Yodm9pZCAq
KSAqIG5fZW50cmllcyArCi0JCSAgICAgc2l6ZW9mKHN0cnVjdCBja19yaHNfbm9fZW50cnlfZGVz
YykgKiBuX2VudHJpZXMgKwotCQkgICAgIDIgKiBDS19NRF9DQUNIRUxJTkUgLSAxKTsKLQllbHNl
Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IGNrX3Joc19tYXApICsKLQkJICAgIChzaXplb2Yoc3Ry
dWN0IGNrX3Joc19lbnRyeV9kZXNjKSAqIG5fZW50cmllcyArCi0JCSAgICAgQ0tfTURfQ0FDSEVM
SU5FIC0gMSk7Ci0JbWFwID0gaHMtPm0tPm1hbGxvYyhzaXplKTsKLQlpZiAobWFwID09IE5VTEwp
Ci0JCXJldHVybiBOVUxMOwotCW1hcC0+cmVhZF9tb3N0bHkgPSAhIShocy0+bW9kZSAmIENLX1JI
U19NT0RFX1JFQURfTU9TVExZKTsKLQotCW1hcC0+c2l6ZSA9IHNpemU7Ci0JLyogV2Ugc2hvdWxk
IHByb2JhYmx5IHVzZSBhIG1vcmUgaW50ZWxsaWdlbnQgaGV1cmlzdGljIGZvciBkZWZhdWx0IHBy
b2JlIGxlbmd0aC4gKi8KLQlsaW1pdCA9IGNrX2ludGVybmFsX21heChuX2VudHJpZXMgPj4gKENL
X1JIU19QUk9CRV9MMV9TSElGVCArIDIpLCBDS19SSFNfUFJPQkVfTDFfREVGQVVMVCk7Ci0JaWYg
KGxpbWl0ID4gVUlOVF9NQVgpCi0JCWxpbWl0ID0gVUlOVF9NQVg7Ci0KLQltYXAtPnByb2JlX2xp
bWl0ID0gKHVuc2lnbmVkIGludClsaW1pdDsKLQltYXAtPnByb2JlX21heGltdW0gPSAwOwotCW1h
cC0+Y2FwYWNpdHkgPSBuX2VudHJpZXM7Ci0JbWFwLT5zdGVwID0gY2tfaW50ZXJuYWxfYnNmKG5f
ZW50cmllcyk7Ci0JbWFwLT5tYXNrID0gbl9lbnRyaWVzIC0gMTsKLQltYXAtPm5fZW50cmllcyA9
IDA7Ci0KLQltYXAtPm1heF9lbnRyaWVzID0gKG1hcC0+Y2FwYWNpdHkgKiAodW5zaWduZWQgbG9u
Zylocy0+bG9hZF9mYWN0b3IpIC8gMTAwOwotCS8qIEFsaWduIG1hcCBhbGxvY2F0aW9uIHRvIGNh
Y2hlIGxpbmUuICovCi0JaWYgKG1hcC0+cmVhZF9tb3N0bHkpIHsKLQkJbWFwLT5lbnRyaWVzLm5v
X2VudHJpZXMuZW50cmllcyA9ICh2b2lkICopKCgodWludHB0cl90KSZtYXBbMV0gKwotCQkgICAg
Q0tfTURfQ0FDSEVMSU5FIC0gMSkgJiB+KENLX01EX0NBQ0hFTElORSAtIDEpKTsKLQkJbWFwLT5l
bnRyaWVzLm5vX2VudHJpZXMuZGVzY3MgPSAodm9pZCAqKSgoKHVpbnRwdHJfdCltYXAtPmVudHJp
ZXMubm9fZW50cmllcy5lbnRyaWVzICsgKHNpemVvZih2b2lkICopICogbl9lbnRyaWVzKSArIENL
X01EX0NBQ0hFTElORSAtIDEpICZ+IChDS19NRF9DQUNIRUxJTkUgLSAxKSk7Ci0JCW1lbXNldCht
YXAtPmVudHJpZXMubm9fZW50cmllcy5lbnRyaWVzLCAwLAotCQkgICAgc2l6ZW9mKHZvaWQgKikg
KiBuX2VudHJpZXMpOwotCQltZW1zZXQobWFwLT5lbnRyaWVzLm5vX2VudHJpZXMuZGVzY3MsIDAs
Ci0JCSAgICBzaXplb2Yoc3RydWN0IGNrX3Joc19ub19lbnRyeV9kZXNjKSAqIG5fZW50cmllcyk7
Ci0JCW1hcC0+b2Zmc2V0X21hc2sgPSAoQ0tfTURfQ0FDSEVMSU5FIC8gc2l6ZW9mKHZvaWQgKikp
IC0gMTsKLQkJbWFwLT5wcm9iZV9mdW5jID0gY2tfcmhzX21hcF9wcm9iZV9ybTsKLQotCX0gZWxz
ZSB7Ci0JCW1hcC0+ZW50cmllcy5kZXNjcyA9ICh2b2lkICopKCgodWludHB0cl90KSZtYXBbMV0g
KwotCQkgICAgQ0tfTURfQ0FDSEVMSU5FIC0gMSkgJiB+KENLX01EX0NBQ0hFTElORSAtIDEpKTsK
LQkJbWVtc2V0KG1hcC0+ZW50cmllcy5kZXNjcywgMCwgc2l6ZW9mKHN0cnVjdCBja19yaHNfZW50
cnlfZGVzYykgKiBuX2VudHJpZXMpOwotCQltYXAtPm9mZnNldF9tYXNrID0gKENLX01EX0NBQ0hF
TElORSAvIHNpemVvZihzdHJ1Y3QgY2tfcmhzX2VudHJ5X2Rlc2MpKSAtIDE7Ci0JCW1hcC0+cHJv
YmVfZnVuYyA9IGNrX3Joc19tYXBfcHJvYmU7Ci0JfQotCW1lbXNldChtYXAtPmdlbmVyYXRpb24s
IDAsIHNpemVvZiBtYXAtPmdlbmVyYXRpb24pOwotCi0JLyogQ29tbWl0IGVudHJpZXMgcHVyZ2Ug
d2l0aCByZXNwZWN0IHRvIG1hcCBwdWJsaWNhdGlvbi4gKi8KLQlja19wcl9mZW5jZV9zdG9yZSgp
OwotCXJldHVybiBtYXA7Ci19Ci0KLWJvb2wKLWNrX3Joc19yZXNldF9zaXplKHN0cnVjdCBja19y
aHMgKmhzLCB1bnNpZ25lZCBsb25nIGNhcGFjaXR5KQotewotCXN0cnVjdCBja19yaHNfbWFwICpt
YXAsICpwcmV2aW91czsKLQotCXByZXZpb3VzID0gaHMtPm1hcDsKLQltYXAgPSBja19yaHNfbWFw
X2NyZWF0ZShocywgY2FwYWNpdHkpOwotCWlmIChtYXAgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNl
OwotCi0JY2tfcHJfc3RvcmVfcHRyKCZocy0+bWFwLCBtYXApOwotCWNrX3Joc19tYXBfZGVzdHJv
eShocy0+bSwgcHJldmlvdXMsIHRydWUpOwotCXJldHVybiB0cnVlOwotfQotCi1ib29sCi1ja19y
aHNfcmVzZXQoc3RydWN0IGNrX3JocyAqaHMpCi17Ci0Jc3RydWN0IGNrX3Joc19tYXAgKnByZXZp
b3VzOwotCi0JcHJldmlvdXMgPSBocy0+bWFwOwotCXJldHVybiBja19yaHNfcmVzZXRfc2l6ZSho
cywgcHJldmlvdXMtPmNhcGFjaXR5KTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25n
Ci1ja19yaHNfbWFwX3Byb2JlX25leHQoc3RydWN0IGNrX3Joc19tYXAgKm1hcCwKLSAgICB1bnNp
Z25lZCBsb25nIG9mZnNldCwKLSAgICB1bnNpZ25lZCBsb25nIHByb2JlcykKLXsKLQotCWlmIChw
cm9iZXMgJiBtYXAtPm9mZnNldF9tYXNrKSB7Ci0JCW9mZnNldCA9IChvZmZzZXQgJn4gbWFwLT5v
ZmZzZXRfbWFzaykgKwotCQkgICAgKChvZmZzZXQgKyAxKSAmIG1hcC0+b2Zmc2V0X21hc2spOwot
CQlyZXR1cm4gb2Zmc2V0OwotCX0gZWxzZQotCQlyZXR1cm4gKG9mZnNldCArIHByb2JlcykgJiBt
YXAtPm1hc2s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotY2tfcmhzX21hcF9w
cm9iZV9wcmV2KHN0cnVjdCBja19yaHNfbWFwICptYXAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAot
ICAgIHVuc2lnbmVkIGxvbmcgcHJvYmVzKQotewotCi0JaWYgKHByb2JlcyAmIG1hcC0+b2Zmc2V0
X21hc2spIHsKLQkJb2Zmc2V0ID0gKG9mZnNldCAmfiBtYXAtPm9mZnNldF9tYXNrKSArICgob2Zm
c2V0IC0gMSkgJgotCQkgICAgbWFwLT5vZmZzZXRfbWFzayk7Ci0JCXJldHVybiBvZmZzZXQ7Ci0J
fSBlbHNlCi0JCXJldHVybiAoKG9mZnNldCAtIHByb2JlcykgJiBtYXAtPm1hc2spOwotfQotCi0K
LXN0YXRpYyBpbmxpbmUgdm9pZAotY2tfcmhzX21hcF9ib3VuZF9zZXQoc3RydWN0IGNrX3Joc19t
YXAgKm0sCi0gICAgdW5zaWduZWQgbG9uZyBoLAotICAgIHVuc2lnbmVkIGxvbmcgbl9wcm9iZXMp
Ci17Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBoICYgbS0+bWFzazsKLQlzdHJ1Y3QgY2tfcmhz
X2VudHJ5X2Rlc2MgKmRlc2M7Ci0KLQlpZiAobl9wcm9iZXMgPiBtLT5wcm9iZV9tYXhpbXVtKQot
CQlja19wcl9zdG9yZV91aW50KCZtLT5wcm9iZV9tYXhpbXVtLCBuX3Byb2Jlcyk7Ci0JaWYgKCEo
bS0+cmVhZF9tb3N0bHkpKSB7Ci0JCWRlc2MgPSAmbS0+ZW50cmllcy5kZXNjc1tvZmZzZXRdOwot
Ci0JCWlmIChkZXNjLT5wcm9iZV9ib3VuZCA8IG5fcHJvYmVzKSB7Ci0JCQlpZiAobl9wcm9iZXMg
PiBDS19SSFNfV09SRF9NQVgpCi0JCQkJbl9wcm9iZXMgPSBDS19SSFNfV09SRF9NQVg7Ci0KLQkJ
CUNLX1JIU19TVE9SRSgmZGVzYy0+cHJvYmVfYm91bmQsIG5fcHJvYmVzKTsKLQkJCWNrX3ByX2Zl
bmNlX3N0b3JlKCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5z
aWduZWQgaW50Ci1ja19yaHNfbWFwX2JvdW5kX2dldChzdHJ1Y3QgY2tfcmhzX21hcCAqbSwgdW5z
aWduZWQgbG9uZyBoKQotewotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gaCAmIG0tPm1hc2s7Ci0J
dW5zaWduZWQgaW50IHIgPSBDS19SSFNfV09SRF9NQVg7Ci0KLQlpZiAobS0+cmVhZF9tb3N0bHkp
Ci0JCXIgPSBja19wcl9sb2FkX3VpbnQoJm0tPnByb2JlX21heGltdW0pOwotCWVsc2UgewotCQly
ID0gQ0tfUkhTX0xPQUQoJm0tPmVudHJpZXMuZGVzY3Nbb2Zmc2V0XS5wcm9iZV9ib3VuZCk7Ci0J
CWlmIChyID09IENLX1JIU19XT1JEX01BWCkKLQkJCXIgPSBja19wcl9sb2FkX3VpbnQoJm0tPnBy
b2JlX21heGltdW0pOwotCX0KLQlyZXR1cm4gcjsKLX0KLQotYm9vbAotY2tfcmhzX2dyb3coc3Ry
dWN0IGNrX3JocyAqaHMsCi0gICAgdW5zaWduZWQgbG9uZyBjYXBhY2l0eSkKLXsKLQlzdHJ1Y3Qg
Y2tfcmhzX21hcCAqbWFwLCAqdXBkYXRlOwotCWNvbnN0IHZvaWQgKnByZXZpb3VzLCAqcHJldl9z
YXZlZDsKLQl1bnNpZ25lZCBsb25nIGssIG9mZnNldCwgcHJvYmVzOwotCi1yZXN0YXJ0OgotCW1h
cCA9IGhzLT5tYXA7Ci0JaWYgKG1hcC0+Y2FwYWNpdHkgPiBjYXBhY2l0eSkKLQkJcmV0dXJuIGZh
bHNlOwotCi0JdXBkYXRlID0gY2tfcmhzX21hcF9jcmVhdGUoaHMsIGNhcGFjaXR5KTsKLQlpZiAo
dXBkYXRlID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQotCWZvciAoayA9IDA7IGsgPCBtYXAt
PmNhcGFjaXR5OyBrKyspIHsKLQkJdW5zaWduZWQgbG9uZyBoOwotCi0JCXByZXZfc2F2ZWQgPSBw
cmV2aW91cyA9IGNrX3Joc19lbnRyeShtYXAsIGspOwotCQlpZiAocHJldmlvdXMgPT0gQ0tfUkhT
X0VNUFRZKQotCQkJY29udGludWU7Ci0KLSNpZmRlZiBDS19SSFNfUFAKLQkJaWYgKGhzLT5tb2Rl
ICYgQ0tfUkhTX01PREVfT0JKRUNUKQotCQkJcHJldmlvdXMgPSBDS19SSFNfVk1BKHByZXZpb3Vz
KTsKLSNlbmRpZgotCi0JCWggPSBocy0+aGYocHJldmlvdXMsIGhzLT5zZWVkKTsKLQkJb2Zmc2V0
ID0gaCAmIHVwZGF0ZS0+bWFzazsKLQkJcHJvYmVzID0gMDsKLQotCQlmb3IgKDs7KSB7Ci0JCQlj
b25zdCB2b2lkICoqY3Vyc29yID0gY2tfcmhzX2VudHJ5X2FkZHIodXBkYXRlLCBvZmZzZXQpOwot
Ci0JCQlpZiAocHJvYmVzKysgPT0gdXBkYXRlLT5wcm9iZV9saW1pdCkgewotCQkJCS8qCi0JCQkJ
ICogV2UgaGF2ZSBoaXQgdGhlIHByb2JlIGxpbWl0LCBtYXAgbmVlZHMgdG8gYmUgZXZlbiBsYXJn
ZXIuCi0JCQkJICovCi0JCQkJY2tfcmhzX21hcF9kZXN0cm95KGhzLT5tLCB1cGRhdGUsIGZhbHNl
KTsKLQkJCQljYXBhY2l0eSA8PD0gMTsKLQkJCQlnb3RvIHJlc3RhcnQ7Ci0JCQl9Ci0KLQkJCWlm
IChDS19DQ19MSUtFTFkoKmN1cnNvciA9PSBDS19SSFNfRU1QVFkpKSB7Ci0JCQkJKmN1cnNvciA9
IHByZXZfc2F2ZWQ7Ci0JCQkJdXBkYXRlLT5uX2VudHJpZXMrKzsKLQkJCQlja19yaHNfc2V0X3By
b2Jlcyh1cGRhdGUsIG9mZnNldCwgcHJvYmVzKTsKLQkJCQlja19yaHNfbWFwX2JvdW5kX3NldCh1
cGRhdGUsIGgsIHByb2Jlcyk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKGNrX3Joc19wcm9i
ZXModXBkYXRlLCBvZmZzZXQpIDwgcHJvYmVzKSB7Ci0JCQkJY29uc3Qgdm9pZCAqdG1wID0gcHJl
dl9zYXZlZDsKLQkJCQl1bnNpZ25lZCBpbnQgb2xkX3Byb2JlczsKLQkJCQlwcmV2X3NhdmVkID0g
cHJldmlvdXMgPSAqY3Vyc29yOwotI2lmZGVmIENLX1JIU19QUAotCQkJCWlmIChocy0+bW9kZSAm
IENLX1JIU19NT0RFX09CSkVDVCkKLQkJCQkJcHJldmlvdXMgPSBDS19SSFNfVk1BKHByZXZpb3Vz
KTsKLSNlbmRpZgotCQkJCSpjdXJzb3IgPSB0bXA7Ci0JCQkJY2tfcmhzX21hcF9ib3VuZF9zZXQo
dXBkYXRlLCBoLCBwcm9iZXMpOwotCQkJCWggPSBocy0+aGYocHJldmlvdXMsIGhzLT5zZWVkKTsK
LQkJCQlvbGRfcHJvYmVzID0gY2tfcmhzX3Byb2Jlcyh1cGRhdGUsIG9mZnNldCk7Ci0JCQkJY2tf
cmhzX3NldF9wcm9iZXModXBkYXRlLCBvZmZzZXQsIHByb2Jlcyk7Ci0JCQkJcHJvYmVzID0gb2xk
X3Byb2JlcyAtIDE7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlja19yaHNfd2FudGVkX2luYyh1
cGRhdGUsIG9mZnNldCk7Ci0JCQlvZmZzZXQgPSBja19yaHNfbWFwX3Byb2JlX25leHQodXBkYXRl
LCBvZmZzZXQsICBwcm9iZXMpOwotCQl9Ci0KLQl9Ci0KLQlja19wcl9mZW5jZV9zdG9yZSgpOwot
CWNrX3ByX3N0b3JlX3B0cigmaHMtPm1hcCwgdXBkYXRlKTsKLQlja19yaHNfbWFwX2Rlc3Ryb3ko
aHMtPm0sIG1hcCwgdHJ1ZSk7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wKLWNrX3Joc19yZWJ1
aWxkKHN0cnVjdCBja19yaHMgKmhzKQotewotCi0JcmV0dXJuIGNrX3Joc19ncm93KGhzLCBocy0+
bWFwLT5jYXBhY2l0eSk7Ci19Ci0KLXN0YXRpYyBsb25nCi1ja19yaHNfbWFwX3Byb2JlX3JtKHN0
cnVjdCBja19yaHMgKmhzLAotICAgIHN0cnVjdCBja19yaHNfbWFwICptYXAsCi0gICAgdW5zaWdu
ZWQgbG9uZyAqbl9wcm9iZXMsCi0gICAgbG9uZyAqcHJpb3JpdHksCi0gICAgdW5zaWduZWQgbG9u
ZyBoLAotICAgIGNvbnN0IHZvaWQgKmtleSwKLSAgICBjb25zdCB2b2lkICoqb2JqZWN0LAotICAg
IHVuc2lnbmVkIGxvbmcgcHJvYmVfbGltaXQsCi0gICAgZW51bSBja19yaHNfcHJvYmVfYmVoYXZp
b3IgYmVoYXZpb3IpCi17Ci0JY29uc3Qgdm9pZCAqazsKLQljb25zdCB2b2lkICpjb21wYXJlOwot
CWxvbmcgcHIgPSAtMTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCwgcHJvYmVzLCBvcGw7Ci0KLSNp
ZmRlZiBDS19SSFNfUFAKLQkvKiBJZiB3ZSBhcmUgc3RvcmluZyBvYmplY3QgcG9pbnRlcnMsIHRo
ZW4gd2UgbWF5IGxldmVyYWdlIHBvaW50ZXIgcGFja2luZy4gKi8KLQl1bnNpZ25lZCBsb25nIGh2
ID0gMDsKLQotCWlmIChocy0+bW9kZSAmIENLX1JIU19NT0RFX09CSkVDVCkgewotCQlodiA9ICho
ID4+IDI1KSAmIENLX1JIU19LRVlfTUFTSzsKLQkJY29tcGFyZSA9IENLX1JIU19WTUEoa2V5KTsK
LQl9IGVsc2UgewotCQljb21wYXJlID0ga2V5OwotCX0KLSNlbHNlCi0JY29tcGFyZSA9IGtleTsK
LSNlbmRpZgotIAkqb2JqZWN0ID0gTlVMTDsKLQlpZiAoYmVoYXZpb3IgIT0gQ0tfUkhTX1BST0JF
X1JPQklOX0hPT0QpIHsKLQkJcHJvYmVzID0gMDsKLQkJb2Zmc2V0ID0gaCAmIG1hcC0+bWFzazsK
LQl9IGVsc2UgewotCQkvKiBSZXN0YXJ0IGZyb20gdGhlIGJ1Y2tldCB3ZSB3ZXJlIHByZXZpb3Vz
bHkgaW4gKi8KLQkJcHJvYmVzID0gKm5fcHJvYmVzOwotCQlvZmZzZXQgPSBja19yaHNfbWFwX3By
b2JlX25leHQobWFwLCAqcHJpb3JpdHksCi0JCSAgICBwcm9iZXMpOwotCX0KLQlvcGwgPSBwcm9i
ZV9saW1pdDsKLQotCWZvciAoOzspIHsKLQkJaWYgKHByb2JlcysrID09IHByb2JlX2xpbWl0KSB7
Ci0JCQlpZiAocHJvYmVfbGltaXQgPT0gb3BsIHx8IHByICE9IC0xKSB7Ci0JCQkJayA9IENLX1JI
U19FTVBUWTsKLQkJCQlnb3RvIGxlYXZlOwotCQkJfQotCQkJLyoKLQkJCSAqIElmIG5vIGVsaWdp
YmxlIHNsb3QgaGFzIGJlZW4gZm91bmQgeWV0LCBjb250aW51ZSBwcm9iZQotCQkJICogc2VxdWVu
Y2Ugd2l0aCBvcmlnaW5hbCBwcm9iZSBsaW1pdC4KLQkJCSAqLwotCQkJcHJvYmVfbGltaXQgPSBv
cGw7Ci0JCX0KLQkJayA9IGNrX3ByX2xvYWRfcHRyKCZtYXAtPmVudHJpZXMubm9fZW50cmllcy5l
bnRyaWVzW29mZnNldF0pOwotCQlpZiAoayA9PSBDS19SSFNfRU1QVFkpCi0JCQlnb3RvIGxlYXZl
OwotCi0JCWlmIChiZWhhdmlvciAhPSBDS19SSFNfUFJPQkVfTk9fUkgpIHsKLQkJCXN0cnVjdCBj
a19yaHNfZW50cnlfZGVzYyAqZGVzYyA9ICh2b2lkICopJm1hcC0+ZW50cmllcy5ub19lbnRyaWVz
LmRlc2NzW29mZnNldF07Ci0KLQkJCWlmIChwciA9PSAtMSAmJgotCQkJICAgIGRlc2MtPmluX3Jo
ID09IGZhbHNlICYmIGRlc2MtPnByb2JlcyA8IHByb2JlcykgewotCQkJCXByID0gb2Zmc2V0Owot
CQkJCSpuX3Byb2JlcyA9IHByb2JlczsKLQotCQkJCWlmIChiZWhhdmlvciA9PSBDS19SSFNfUFJP
QkVfUkggfHwKLQkJCQkgICAgYmVoYXZpb3IgPT0gQ0tfUkhTX1BST0JFX1JPQklOX0hPT0QpIHsK
LQkJCQkJayA9IENLX1JIU19FTVBUWTsKLQkJCQkJZ290byBsZWF2ZTsKLQkJCQl9Ci0JCQl9Ci0J
CX0KLQotCQlpZiAoYmVoYXZpb3IgIT0gQ0tfUkhTX1BST0JFX1JPQklOX0hPT0QpIHsKLSNpZmRl
ZiBDS19SSFNfUFAKLQkJCWlmIChocy0+bW9kZSAmIENLX1JIU19NT0RFX09CSkVDVCkgewotCQkJ
CWlmICgoKHVpbnRwdHJfdClrID4+IENLX01EX1ZNQV9CSVRTKSAhPSBodikgewotCQkJCQlvZmZz
ZXQgPSBja19yaHNfbWFwX3Byb2JlX25leHQobWFwLCBvZmZzZXQsIHByb2Jlcyk7Ci0JCQkJCWNv
bnRpbnVlOwotCQkJCX0KLQotCQkJCWsgPSBDS19SSFNfVk1BKGspOwotCQkJfQotI2VuZGlmCi0K
LQkJCWlmIChrID09IGNvbXBhcmUpCi0JCQkJZ290byBsZWF2ZTsKLQotCQkJaWYgKGhzLT5jb21w
YXJlID09IE5VTEwpIHsKLQkJCQlvZmZzZXQgPSBja19yaHNfbWFwX3Byb2JlX25leHQobWFwLCBv
ZmZzZXQsIHByb2Jlcyk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWlmIChocy0+Y29tcGFy
ZShrLCBrZXkpID09IHRydWUpCi0JCQkJZ290byBsZWF2ZTsKLQkJfQotCQlvZmZzZXQgPSBja19y
aHNfbWFwX3Byb2JlX25leHQobWFwLCBvZmZzZXQsIHByb2Jlcyk7Ci0JfQotbGVhdmU6Ci0JaWYg
KHByb2JlcyA+IHByb2JlX2xpbWl0KSB7Ci0JCW9mZnNldCA9IC0xOwotCX0gZWxzZSB7Ci0JCSpv
YmplY3QgPSBrOwotCX0KLQotCWlmIChwciA9PSAtMSkKLQkJKm5fcHJvYmVzID0gcHJvYmVzOwot
Ci0JKnByaW9yaXR5ID0gcHI7Ci0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIGxvbmcKLWNr
X3Joc19tYXBfcHJvYmUoc3RydWN0IGNrX3JocyAqaHMsCi0gICAgc3RydWN0IGNrX3Joc19tYXAg
Km1hcCwKLSAgICB1bnNpZ25lZCBsb25nICpuX3Byb2JlcywKLSAgICBsb25nICpwcmlvcml0eSwK
LSAgICB1bnNpZ25lZCBsb25nIGgsCi0gICAgY29uc3Qgdm9pZCAqa2V5LAotICAgIGNvbnN0IHZv
aWQgKipvYmplY3QsCi0gICAgdW5zaWduZWQgbG9uZyBwcm9iZV9saW1pdCwKLSAgICBlbnVtIGNr
X3Joc19wcm9iZV9iZWhhdmlvciBiZWhhdmlvcikKLXsKLQljb25zdCB2b2lkICprOwotCWNvbnN0
IHZvaWQgKmNvbXBhcmU7Ci0JbG9uZyBwciA9IC0xOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBw
cm9iZXMsIG9wbDsKLQotI2lmZGVmIENLX1JIU19QUAotCS8qIElmIHdlIGFyZSBzdG9yaW5nIG9i
amVjdCBwb2ludGVycywgdGhlbiB3ZSBtYXkgbGV2ZXJhZ2UgcG9pbnRlciBwYWNraW5nLiAqLwot
CXVuc2lnbmVkIGxvbmcgaHYgPSAwOwotCi0JaWYgKGhzLT5tb2RlICYgQ0tfUkhTX01PREVfT0JK
RUNUKSB7Ci0JCWh2ID0gKGggPj4gMjUpICYgQ0tfUkhTX0tFWV9NQVNLOwotCQljb21wYXJlID0g
Q0tfUkhTX1ZNQShrZXkpOwotCX0gZWxzZSB7Ci0JCWNvbXBhcmUgPSBrZXk7Ci0JfQotI2Vsc2UK
LQljb21wYXJlID0ga2V5OwotI2VuZGlmCi0KLSAJKm9iamVjdCA9IE5VTEw7Ci0JaWYgKGJlaGF2
aW9yICE9IENLX1JIU19QUk9CRV9ST0JJTl9IT09EKSB7Ci0JCXByb2JlcyA9IDA7Ci0JCW9mZnNl
dCA9IGggJiBtYXAtPm1hc2s7Ci0JfSBlbHNlIHsKLQkJLyogUmVzdGFydCBmcm9tIHRoZSBidWNr
ZXQgd2Ugd2VyZSBwcmV2aW91c2x5IGluICovCi0JCXByb2JlcyA9ICpuX3Byb2JlczsKLQkJb2Zm
c2V0ID0gY2tfcmhzX21hcF9wcm9iZV9uZXh0KG1hcCwgKnByaW9yaXR5LAotCQkgICAgcHJvYmVz
KTsKLQl9Ci0Jb3BsID0gcHJvYmVfbGltaXQ7Ci0JaWYgKGJlaGF2aW9yID09IENLX1JIU19QUk9C
RV9JTlNFUlQpCi0JCXByb2JlX2xpbWl0ID0gY2tfcmhzX21hcF9ib3VuZF9nZXQobWFwLCBoKTsK
LQotCWZvciAoOzspIHsKLQkJaWYgKHByb2JlcysrID09IHByb2JlX2xpbWl0KSB7Ci0JCQlpZiAo
cHJvYmVfbGltaXQgPT0gb3BsIHx8IHByICE9IC0xKSB7Ci0JCQkJayA9IENLX1JIU19FTVBUWTsK
LQkJCQlnb3RvIGxlYXZlOwotCQkJfQotCQkJLyoKLQkJCSAqIElmIG5vIGVsaWdpYmxlIHNsb3Qg
aGFzIGJlZW4gZm91bmQgeWV0LCBjb250aW51ZSBwcm9iZQotCQkJICogc2VxdWVuY2Ugd2l0aCBv
cmlnaW5hbCBwcm9iZSBsaW1pdC4KLQkJCSAqLwotCQkJcHJvYmVfbGltaXQgPSBvcGw7Ci0JCX0K
LQkJayA9IGNrX3ByX2xvYWRfcHRyKCZtYXAtPmVudHJpZXMuZGVzY3Nbb2Zmc2V0XS5lbnRyeSk7
Ci0JCWlmIChrID09IENLX1JIU19FTVBUWSkKLQkJCWdvdG8gbGVhdmU7Ci0JCWlmICgoYmVoYXZp
b3IgIT0gQ0tfUkhTX1BST0JFX05PX1JIKSkgewotCQkJc3RydWN0IGNrX3Joc19lbnRyeV9kZXNj
ICpkZXNjID0gJm1hcC0+ZW50cmllcy5kZXNjc1tvZmZzZXRdOwotCi0JCQlpZiAocHIgPT0gLTEg
JiYKLQkJCSAgICBkZXNjLT5pbl9yaCA9PSBmYWxzZSAmJiBkZXNjLT5wcm9iZXMgPCBwcm9iZXMp
IHsKLQkJCQlwciA9IG9mZnNldDsKLQkJCQkqbl9wcm9iZXMgPSBwcm9iZXM7Ci0KLQkJCQlpZiAo
YmVoYXZpb3IgPT0gQ0tfUkhTX1BST0JFX1JIIHx8Ci0JCQkJICAgIGJlaGF2aW9yID09IENLX1JI
U19QUk9CRV9ST0JJTl9IT09EKSB7Ci0JCQkJCWsgPSBDS19SSFNfRU1QVFk7Ci0JCQkJCWdvdG8g
bGVhdmU7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJaWYgKGJlaGF2aW9yICE9IENLX1JIU19QUk9C
RV9ST0JJTl9IT09EKSB7Ci0jaWZkZWYgQ0tfUkhTX1BQCi0JCQlpZiAoaHMtPm1vZGUgJiBDS19S
SFNfTU9ERV9PQkpFQ1QpIHsKLQkJCQlpZiAoKCh1aW50cHRyX3QpayA+PiBDS19NRF9WTUFfQklU
UykgIT0gaHYpIHsKLQkJCQkJb2Zmc2V0ID0gY2tfcmhzX21hcF9wcm9iZV9uZXh0KG1hcCwgb2Zm
c2V0LCBwcm9iZXMpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0KLQkJCQlrID0gQ0tfUkhTX1ZN
QShrKTsKLQkJCX0KLSNlbmRpZgotCi0JCQlpZiAoayA9PSBjb21wYXJlKQotCQkJCWdvdG8gbGVh
dmU7Ci0KLQkJCWlmIChocy0+Y29tcGFyZSA9PSBOVUxMKSB7Ci0JCQkJb2Zmc2V0ID0gY2tfcmhz
X21hcF9wcm9iZV9uZXh0KG1hcCwgb2Zmc2V0LCBwcm9iZXMpOwotCQkJCWNvbnRpbnVlOwotCQkJ
fQotCi0JCQlpZiAoaHMtPmNvbXBhcmUoaywga2V5KSA9PSB0cnVlKQotCQkJCWdvdG8gbGVhdmU7
Ci0JCX0KLQkJb2Zmc2V0ID0gY2tfcmhzX21hcF9wcm9iZV9uZXh0KG1hcCwgb2Zmc2V0LCBwcm9i
ZXMpOwotCX0KLWxlYXZlOgotCWlmIChwcm9iZXMgPiBwcm9iZV9saW1pdCkgewotCQlvZmZzZXQg
PSAtMTsKLQl9IGVsc2UgewotCQkqb2JqZWN0ID0gazsKLQl9Ci0KLQlpZiAocHIgPT0gLTEpCi0J
CSpuX3Byb2JlcyA9IHByb2JlczsKLQotCSpwcmlvcml0eSA9IHByOwotCXJldHVybiBvZmZzZXQ7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqCi1ja19yaHNfbWFyc2hhbCh1bnNpZ25l
ZCBpbnQgbW9kZSwgY29uc3Qgdm9pZCAqa2V5LCB1bnNpZ25lZCBsb25nIGgpCi17Ci0jaWZkZWYg
Q0tfUkhTX1BQCi0JY29uc3Qgdm9pZCAqaW5zZXJ0OwotCi0JaWYgKG1vZGUgJiBDS19SSFNfTU9E
RV9PQkpFQ1QpIHsKLQkJaW5zZXJ0ID0gKHZvaWQgKikoKHVpbnRwdHJfdClDS19SSFNfVk1BKGtl
eSkgfCAoKGggPj4gMjUpIDw8IENLX01EX1ZNQV9CSVRTKSk7Ci0JfSBlbHNlIHsKLQkJaW5zZXJ0
ID0ga2V5OwotCX0KLQotCXJldHVybiBpbnNlcnQ7Ci0jZWxzZQotCSh2b2lkKW1vZGU7Ci0JKHZv
aWQpaDsKLQotCXJldHVybiBrZXk7Ci0jZW5kaWYKLX0KLQotYm9vbAotY2tfcmhzX2djKHN0cnVj
dCBja19yaHMgKmhzKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQlzdHJ1Y3QgY2tfcmhzX21hcCAq
bWFwID0gaHMtPm1hcDsKLQotCXVuc2lnbmVkIGludCBtYXhfcHJvYmVzID0gMDsKLQlmb3IgKGkg
PSAwOyBpIDwgbWFwLT5jYXBhY2l0eTsgaSsrKSB7Ci0JCWlmIChja19yaHNfcHJvYmVzKG1hcCwg
aSkgPiBtYXhfcHJvYmVzKQotCQkJbWF4X3Byb2JlcyA9IGNrX3Joc19wcm9iZXMobWFwLCBpKTsK
LQl9Ci0JbWFwLT5wcm9iZV9tYXhpbXVtID0gbWF4X3Byb2JlczsKLQlyZXR1cm4gdHJ1ZTsKLX0K
LQotc3RhdGljIHZvaWQKLWNrX3Joc19hZGRfd2FudGVkKHN0cnVjdCBja19yaHMgKmhzLCBsb25n
IGVuZF9vZmZzZXQsIGxvbmcgb2xkX3Nsb3QsCi0JdW5zaWduZWQgbG9uZyBoKQotewotCXN0cnVj
dCBja19yaHNfbWFwICptYXAgPSBocy0+bWFwOwotCWxvbmcgb2Zmc2V0OwotCXVuc2lnbmVkIGlu
dCBwcm9iZXMgPSAxOwotCWJvb2wgZm91bmRfc2xvdCA9IGZhbHNlOwotCXN0cnVjdCBja19yaHNf
ZW50cnlfZGVzYyAqZGVzYzsKLQotCW9mZnNldCA9IGggJiBtYXAtPm1hc2s7Ci0KLQlpZiAob2xk
X3Nsb3QgPT0gLTEpCi0JCWZvdW5kX3Nsb3QgPSB0cnVlOwotCXdoaWxlIChvZmZzZXQgIT0gZW5k
X29mZnNldCkgewotCQlpZiAob2Zmc2V0ID09IG9sZF9zbG90KQotCQkJZm91bmRfc2xvdCA9IHRy
dWU7Ci0JCWlmIChmb3VuZF9zbG90KSB7Ci0JCQlkZXNjID0gY2tfcmhzX2Rlc2MobWFwLCBvZmZz
ZXQpOwotCQkJaWYgKGRlc2MtPndhbnRlZCA8IENLX1JIU19NQVhfV0FOVEVEKQotCQkJCWRlc2Mt
PndhbnRlZCsrOwotCQl9Ci0JCW9mZnNldCA9IGNrX3Joc19tYXBfcHJvYmVfbmV4dChtYXAsIG9m
ZnNldCwgcHJvYmVzKTsKLQkJcHJvYmVzKys7Ci0JfQotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9u
ZwotY2tfcmhzX3JlbW92ZV93YW50ZWQoc3RydWN0IGNrX3JocyAqaHMsIGxvbmcgb2Zmc2V0LCBs
b25nIGxpbWl0KQotewotCXN0cnVjdCBja19yaHNfbWFwICptYXAgPSBocy0+bWFwOwotCWludCBw
cm9iZXMgPSBja19yaHNfcHJvYmVzKG1hcCwgb2Zmc2V0KTsKLQlib29sIGRvX3JlbW92ZSA9IHRy
dWU7Ci0Jc3RydWN0IGNrX3Joc19lbnRyeV9kZXNjICpkZXNjOwotCi0Jd2hpbGUgKHByb2JlcyA+
IDEpIHsKLQkJcHJvYmVzLS07Ci0JCW9mZnNldCA9IGNrX3Joc19tYXBfcHJvYmVfcHJldihtYXAs
IG9mZnNldCwgcHJvYmVzKTsKLQkJaWYgKG9mZnNldCA9PSBsaW1pdCkKLQkJCWRvX3JlbW92ZSA9
IGZhbHNlOwotCQlpZiAoZG9fcmVtb3ZlKSB7Ci0JCQlkZXNjID0gY2tfcmhzX2Rlc2MobWFwLCBv
ZmZzZXQpOwotCQkJaWYgKGRlc2MtPndhbnRlZCAhPSBDS19SSFNfTUFYX1dBTlRFRCkKLQkJCQlk
ZXNjLT53YW50ZWQtLTsKLQkJfQotCX0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgbG9u
ZwotY2tfcmhzX2dldF9maXJzdF9vZmZzZXQoc3RydWN0IGNrX3Joc19tYXAgKm1hcCwgdW5zaWdu
ZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGludCBwcm9iZXMpCi17Ci0Jd2hpbGUgKHByb2JlcyA+
ICh1bnNpZ25lZCBsb25nKW1hcC0+b2Zmc2V0X21hc2sgKyAxKSB7Ci0JCW9mZnNldCAtPSAoKHBy
b2JlcyAtIDEpICZ+IG1hcC0+b2Zmc2V0X21hc2spOwotCQlvZmZzZXQgJj0gbWFwLT5tYXNrOwot
CQlvZmZzZXQgPSAob2Zmc2V0ICZ+IG1hcC0+b2Zmc2V0X21hc2spICsKLQkJICAgICgob2Zmc2V0
IC0gbWFwLT5vZmZzZXRfbWFzaykgJiBtYXAtPm9mZnNldF9tYXNrKTsKLQkJcHJvYmVzIC09IG1h
cC0+b2Zmc2V0X21hc2sgKyAxOwotCX0KLQlyZXR1cm4gKChvZmZzZXQgJn4gbWFwLT5vZmZzZXRf
bWFzaykgKyAoKG9mZnNldCAtIChwcm9iZXMgLSAxKSkgJiBtYXAtPm9mZnNldF9tYXNrKSk7Ci19
Ci0KLSNkZWZpbmUgQ0tfUkhTX01BWF9SSAk1MTIKLQotc3RhdGljIGludAotY2tfcmhzX3B1dF9y
b2Jpbl9ob29kKHN0cnVjdCBja19yaHMgKmhzLAotICAgIGxvbmcgb3JpZ19zbG90LCBzdHJ1Y3Qg
Y2tfcmhzX2VudHJ5X2Rlc2MgKmRlc2MpCi17Ci0JbG9uZyBzbG90LCBmaXJzdDsKLQljb25zdCB2
b2lkICpvYmplY3QsICppbnNlcnQ7Ci0JdW5zaWduZWQgbG9uZyBuX3Byb2JlczsKLQlzdHJ1Y3Qg
Y2tfcmhzX21hcCAqbWFwOwotCXVuc2lnbmVkIGxvbmcgaCA9IDA7Ci0JbG9uZyBwcmV2OwotCXZv
aWQgKmtleTsKLQlsb25nIHByZXZzW0NLX1JIU19NQVhfUkhdOwotCXVuc2lnbmVkIGludCBwcmV2
c19uYiA9IDA7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQltYXAgPSBocy0+bWFwOwotCWZpcnN0ID0g
b3JpZ19zbG90OwotCW5fcHJvYmVzID0gZGVzYy0+cHJvYmVzOwotcmVzdGFydDoKLQlrZXkgPSBD
S19DQ19ERUNPTlNUX1BUUihja19yaHNfZW50cnkobWFwLCBmaXJzdCkpOwotCWluc2VydCA9IGtl
eTsKLSNpZmRlZiBDS19SSFNfUFAKLQlpZiAoaHMtPm1vZGUgJiBDS19SSFNfTU9ERV9PQkpFQ1Qp
Ci0JICAgIGtleSA9IENLX1JIU19WTUEoa2V5KTsKLSNlbmRpZgotCW9yaWdfc2xvdCA9IGZpcnN0
OwotCWNrX3Joc19zZXRfcmgobWFwLCBvcmlnX3Nsb3QpOwotCi0Jc2xvdCA9IG1hcC0+cHJvYmVf
ZnVuYyhocywgbWFwLCAmbl9wcm9iZXMsICZmaXJzdCwgaCwga2V5LCAmb2JqZWN0LAotCSAgICBt
YXAtPnByb2JlX2xpbWl0LCBwcmV2c19uYiA9PSBDS19SSFNfTUFYX1JIID8KLQkgICAgQ0tfUkhT
X1BST0JFX05PX1JIIDogQ0tfUkhTX1BST0JFX1JPQklOX0hPT0QpOwotCi0JaWYgKHNsb3QgPT0g
LTEgJiYgZmlyc3QgPT0gLTEpIHsKLQkJaWYgKGNrX3Joc19ncm93KGhzLCBtYXAtPmNhcGFjaXR5
IDw8IDEpID09IGZhbHNlKSB7Ci0JCQlkZXNjLT5pbl9yaCA9IGZhbHNlOwotCi0JCQlmb3IgKGkg
PSAwOyBpIDwgcHJldnNfbmI7IGkrKykKLQkJCQlja19yaHNfdW5zZXRfcmgobWFwLCBwcmV2c1tp
XSk7Ci0KLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCXJldHVybiAxOwotCX0KLQotCWlmIChmaXJz
dCAhPSAtMSkgewotCQlkZXNjID0gY2tfcmhzX2Rlc2MobWFwLCBmaXJzdCk7Ci0JCWludCBvbGRf
cHJvYmVzID0gZGVzYy0+cHJvYmVzOwotCi0JCWRlc2MtPnByb2JlcyA9IG5fcHJvYmVzOwotCQlo
ID0gY2tfcmhzX2dldF9maXJzdF9vZmZzZXQobWFwLCBmaXJzdCwgbl9wcm9iZXMpOwotCQlja19y
aHNfbWFwX2JvdW5kX3NldChtYXAsIGgsIG5fcHJvYmVzKTsKLQkJcHJldiA9IG9yaWdfc2xvdDsK
LQkJcHJldnNbcHJldnNfbmIrK10gPSBwcmV2OwotCQluX3Byb2JlcyA9IG9sZF9wcm9iZXM7Ci0J
CWdvdG8gcmVzdGFydDsKLQl9IGVsc2UgewotCQkvKiBBbiBlbXB0eSBzbG90IHdhcyBmb3VuZC4g
Ki8KLQkJaCA9ICBja19yaHNfZ2V0X2ZpcnN0X29mZnNldChtYXAsIHNsb3QsIG5fcHJvYmVzKTsK
LQkJY2tfcmhzX21hcF9ib3VuZF9zZXQobWFwLCBoLCBuX3Byb2Jlcyk7Ci0JCWNrX3ByX3N0b3Jl
X3B0cihja19yaHNfZW50cnlfYWRkcihtYXAsIHNsb3QpLCBpbnNlcnQpOwotCQlja19wcl9pbmNf
dWludCgmbWFwLT5nZW5lcmF0aW9uW2ggJiBDS19SSFNfR19NQVNLXSk7Ci0JCWNrX3ByX2ZlbmNl
X2F0b21pY19zdG9yZSgpOwotCQlja19yaHNfc2V0X3Byb2JlcyhtYXAsIHNsb3QsIG5fcHJvYmVz
KTsKLQkJZGVzYy0+aW5fcmggPSAwOwotCQlja19yaHNfYWRkX3dhbnRlZChocywgc2xvdCwgb3Jp
Z19zbG90LCBoKTsKLQl9Ci0Jd2hpbGUgKHByZXZzX25iID4gMCkgewotCQlwcmV2ID0gcHJldnNb
LS1wcmV2c19uYl07Ci0JCWNrX3ByX3N0b3JlX3B0cihja19yaHNfZW50cnlfYWRkcihtYXAsIG9y
aWdfc2xvdCksCi0JCSAgICBja19yaHNfZW50cnkobWFwLCBwcmV2KSk7Ci0JCWggPSBja19yaHNf
Z2V0X2ZpcnN0X29mZnNldChtYXAsIG9yaWdfc2xvdCwKLQkJICAgIGRlc2MtPnByb2Jlcyk7Ci0J
CWNrX3Joc19hZGRfd2FudGVkKGhzLCBvcmlnX3Nsb3QsIHByZXYsIGgpOwotCQlja19wcl9pbmNf
dWludCgmbWFwLT5nZW5lcmF0aW9uW2ggJiBDS19SSFNfR19NQVNLXSk7Ci0JCWNrX3ByX2ZlbmNl
X2F0b21pY19zdG9yZSgpOwotCQlvcmlnX3Nsb3QgPSBwcmV2OwotCQlkZXNjLT5pbl9yaCA9IGZh
bHNlOwotCQlkZXNjID0gY2tfcmhzX2Rlc2MobWFwLCBvcmlnX3Nsb3QpOwotCX0KLQlyZXR1cm4g
MDsKLX0KLQotc3RhdGljIHZvaWQKLWNrX3Joc19kb19iYWNrd2FyZF9zaGlmdF9kZWxldGUoc3Ry
dWN0IGNrX3JocyAqaHMsIGxvbmcgc2xvdCkKLXsKLQlzdHJ1Y3QgY2tfcmhzX21hcCAqbWFwID0g
aHMtPm1hcDsKLQlzdHJ1Y3QgY2tfcmhzX2VudHJ5X2Rlc2MgKmRlc2MsICpuZXdfZGVzYyA9IE5V
TEw7Ci0JdW5zaWduZWQgbG9uZyBoOwotCi0JZGVzYyA9IGNrX3Joc19kZXNjKG1hcCwgc2xvdCk7
Ci0JaCA9IGNrX3Joc19yZW1vdmVfd2FudGVkKGhzLCBzbG90LCAtMSk7Ci0Jd2hpbGUgKGRlc2Mt
PndhbnRlZCA+IDApIHsKLQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwLCB0bXBfb2Zmc2V0Owot
CQl1bnNpZ25lZCBsb25nIHdhbnRlZF9wcm9iZXMgPSAxOwotCQl1bnNpZ25lZCBpbnQgcHJvYmUg
PSAwOwotCQl1bnNpZ25lZCBpbnQgbWF4X3Byb2JlczsKLQotCQkvKiBGaW5kIGEgc3VjY2Vzc29y
ICovCi0JCXdoaWxlICh3YW50ZWRfcHJvYmVzIDwgbWFwLT5wcm9iZV9tYXhpbXVtKSB7Ci0JCQlw
cm9iZSA9IHdhbnRlZF9wcm9iZXM7Ci0JCQlvZmZzZXQgPSBja19yaHNfbWFwX3Byb2JlX25leHQo
bWFwLCBzbG90LCBwcm9iZSk7Ci0JCQl3aGlsZSAocHJvYmUgPCBtYXAtPnByb2JlX21heGltdW0p
IHsKLQkJCQluZXdfZGVzYyA9IGNrX3Joc19kZXNjKG1hcCwgb2Zmc2V0KTsKLQkJCQlpZiAobmV3
X2Rlc2MtPnByb2JlcyA9PSBwcm9iZSArIDEpCi0JCQkJCWJyZWFrOwotCQkJCXByb2JlKys7Ci0J
CQkJb2Zmc2V0ID0gY2tfcmhzX21hcF9wcm9iZV9uZXh0KG1hcCwgb2Zmc2V0LAotCQkJCSAgICBw
cm9iZSk7Ci0JCQl9Ci0JCQlpZiAocHJvYmUgPCBtYXAtPnByb2JlX21heGltdW0pCi0JCQkJYnJl
YWs7Ci0JCQl3YW50ZWRfcHJvYmVzKys7Ci0JCX0KLQkJaWYgKCEod2FudGVkX3Byb2JlcyA8IG1h
cC0+cHJvYmVfbWF4aW11bSkpIHsKLQkJCWRlc2MtPndhbnRlZCA9IDA7Ci0JCQlicmVhazsKLQkJ
fQotCQlkZXNjLT5wcm9iZXMgPSB3YW50ZWRfcHJvYmVzOwotCQloID0gY2tfcmhzX3JlbW92ZV93
YW50ZWQoaHMsIG9mZnNldCwgc2xvdCk7Ci0JCWNrX3ByX3N0b3JlX3B0cihja19yaHNfZW50cnlf
YWRkcihtYXAsIHNsb3QpLAotCQkgICAgY2tfcmhzX2VudHJ5KG1hcCwgb2Zmc2V0KSk7Ci0JCWNr
X3ByX2luY191aW50KCZtYXAtPmdlbmVyYXRpb25baCAmIENLX1JIU19HX01BU0tdKTsKLQkJY2tf
cHJfZmVuY2VfYXRvbWljX3N0b3JlKCk7Ci0JCWlmICh3YW50ZWRfcHJvYmVzIDwgQ0tfUkhTX1dP
UkRfTUFYKSB7Ci0JCQlzdHJ1Y3QgY2tfcmhzX2VudHJ5X2Rlc2MgKmhkZXNjID0gY2tfcmhzX2Rl
c2MobWFwLCBoKTsKLQkJCWlmIChoZGVzYy0+d2FudGVkID09IDEpCi0JCQkJQ0tfUkhTX1NUT1JF
KCZoZGVzYy0+cHJvYmVfYm91bmQsCi0JCQkJICAgIHdhbnRlZF9wcm9iZXMpOwotCQkJZWxzZSBp
ZiAoaGRlc2MtPnByb2JlX2JvdW5kID09IENLX1JIU19XT1JEX01BWCB8fAotCQkJICAgIGhkZXNj
LT5wcm9iZV9ib3VuZCA9PSBuZXdfZGVzYy0+cHJvYmVzKSB7Ci0JCQkJcHJvYmUrKzsKLQkJCQlp
ZiAoaGRlc2MtPnByb2JlX2JvdW5kID09IENLX1JIU19XT1JEX01BWCkKLQkJCQkJbWF4X3Byb2Jl
cyA9IG1hcC0+cHJvYmVfbWF4aW11bTsKLQkJCQllbHNlIHsKLQkJCQkJbWF4X3Byb2JlcyA9IGhk
ZXNjLT5wcm9iZV9ib3VuZDsKLQkJCQkJbWF4X3Byb2Jlcy0tOwotCQkJCX0KLQkJCQl0bXBfb2Zm
c2V0ID0gY2tfcmhzX21hcF9wcm9iZV9uZXh0KG1hcCwgb2Zmc2V0LAotCQkJCSAgICBwcm9iZSk7
Ci0JCQkJd2hpbGUgKHByb2JlIDwgbWF4X3Byb2JlcykgewotCQkJCQlpZiAoaCA9PSAodW5zaWdu
ZWQgbG9uZylja19yaHNfZ2V0X2ZpcnN0X29mZnNldChtYXAsIHRtcF9vZmZzZXQsIHByb2JlKSkK
LQkJCQkJCWJyZWFrOwotCQkJCQlwcm9iZSsrOwotCQkJCQl0bXBfb2Zmc2V0ID0gY2tfcmhzX21h
cF9wcm9iZV9uZXh0KG1hcCwgdG1wX29mZnNldCwgcHJvYmUpOwotCQkJCX0KLQkJCQlpZiAocHJv
YmUgPT0gbWF4X3Byb2JlcykKLQkJCQkJQ0tfUkhTX1NUT1JFKCZoZGVzYy0+cHJvYmVfYm91bmQs
Ci0JCQkJCSAgICB3YW50ZWRfcHJvYmVzKTsKLQkJCX0KLQkJfQotCQlpZiAoZGVzYy0+d2FudGVk
IDwgQ0tfUkhTX01BWF9XQU5URUQpCi0JCQlkZXNjLT53YW50ZWQtLTsKLQkJc2xvdCA9IG9mZnNl
dDsKLQkJZGVzYyA9IG5ld19kZXNjOwotCX0KLQlja19wcl9zdG9yZV9wdHIoY2tfcmhzX2VudHJ5
X2FkZHIobWFwLCBzbG90KSwgQ0tfUkhTX0VNUFRZKTsKLQlpZiAoKGRlc2MtPnByb2JlcyAtIDEp
IDwgQ0tfUkhTX1dPUkRfTUFYKQotCQlDS19SSFNfU1RPUkUoY2tfcmhzX3Byb2JlX2JvdW5kX2Fk
ZHIobWFwLCBoKSwKLQkJICAgIGRlc2MtPnByb2JlcyAtIDEpOwotCWRlc2MtPnByb2JlcyA9IDA7
Ci19Ci0KLWJvb2wKLWNrX3Joc19mYXMoc3RydWN0IGNrX3JocyAqaHMsCi0gICAgdW5zaWduZWQg
bG9uZyBoLAotICAgIGNvbnN0IHZvaWQgKmtleSwKLSAgICB2b2lkICoqcHJldmlvdXMpCi17Ci0J
bG9uZyBzbG90LCBmaXJzdDsKLQljb25zdCB2b2lkICpvYmplY3Q7Ci0JY29uc3Qgdm9pZCAqaW5z
ZXJ0OwotCXVuc2lnbmVkIGxvbmcgbl9wcm9iZXM7Ci0Jc3RydWN0IGNrX3Joc19tYXAgKm1hcCA9
IGhzLT5tYXA7Ci0Jc3RydWN0IGNrX3Joc19lbnRyeV9kZXNjICpkZXNjLCAqZGVzYzI7Ci0KLQkq
cHJldmlvdXMgPSBOVUxMOwotcmVzdGFydDoKLQlzbG90ID0gbWFwLT5wcm9iZV9mdW5jKGhzLCBt
YXAsICZuX3Byb2JlcywgJmZpcnN0LCBoLCBrZXksICZvYmplY3QsCi0JICAgIGNrX3Joc19tYXBf
Ym91bmRfZ2V0KG1hcCwgaCksIENLX1JIU19QUk9CRSk7Ci0KLQkvKiBSZXBsYWNlbWVudCBzZW1h
bnRpY3MgcHJlc3VtZSBleGlzdGVuY2UuICovCi0JaWYgKG9iamVjdCA9PSBOVUxMKQotCQlyZXR1
cm4gZmFsc2U7Ci0KLQlpbnNlcnQgPSBja19yaHNfbWFyc2hhbChocy0+bW9kZSwga2V5LCBoKTsK
LQotCWlmIChmaXJzdCAhPSAtMSkgewotCQlpbnQgcmV0OwotCi0JCWRlc2MgPSBja19yaHNfZGVz
YyhtYXAsIHNsb3QpOwotCQlkZXNjMiA9IGNrX3Joc19kZXNjKG1hcCwgZmlyc3QpOwotCQlkZXNj
LT5pbl9yaCA9IHRydWU7Ci0JCXJldCA9IGNrX3Joc19wdXRfcm9iaW5faG9vZChocywgZmlyc3Qs
IGRlc2MyKTsKLQkJZGVzYy0+aW5fcmggPSBmYWxzZTsKLQkJaWYgKENLX0NDX1VOTElLRUxZKHJl
dCA9PSAxKSkKLQkJCWdvdG8gcmVzdGFydDsKLQkJZWxzZSBpZiAoQ0tfQ0NfVU5MSUtFTFkocmV0
ICE9IDApKQotCQkJcmV0dXJuIGZhbHNlOwotCQlja19wcl9zdG9yZV9wdHIoY2tfcmhzX2VudHJ5
X2FkZHIobWFwLCBmaXJzdCksIGluc2VydCk7Ci0JCWNrX3ByX2luY191aW50KCZtYXAtPmdlbmVy
YXRpb25baCAmIENLX1JIU19HX01BU0tdKTsKLQkJY2tfcHJfZmVuY2VfYXRvbWljX3N0b3JlKCk7
Ci0JCWRlc2MyLT5wcm9iZXMgPSBuX3Byb2JlczsKLQkJY2tfcmhzX2FkZF93YW50ZWQoaHMsIGZp
cnN0LCAtMSwgaCk7Ci0JCWNrX3Joc19kb19iYWNrd2FyZF9zaGlmdF9kZWxldGUoaHMsIHNsb3Qp
OwotCX0gZWxzZSB7Ci0JCWNrX3ByX3N0b3JlX3B0cihja19yaHNfZW50cnlfYWRkcihtYXAsIHNs
b3QpLCBpbnNlcnQpOwotCQlja19yaHNfc2V0X3Byb2JlcyhtYXAsIHNsb3QsIG5fcHJvYmVzKTsK
LQl9Ci0JKnByZXZpb3VzID0gQ0tfQ0NfREVDT05TVF9QVFIob2JqZWN0KTsKLQlyZXR1cm4gdHJ1
ZTsKLX0KLQotLyoKLSAqIEFuIGFwcGx5IGZ1bmN0aW9uIHRha2VzIHR3byBhcmd1bWVudHMuIFRo
ZSBmaXJzdCBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gYQotICogcHJlLWV4aXN0aW5nIG9iamVj
dC4gVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlIGZpZnRoIGFyZ3VtZW50
Ci0gKiBwYXNzZWQgdG8gY2tfaHNfYXBwbHkuIElmIGEgbm9uLU5VTEwgcG9pbnRlciBpcyBwYXNz
ZWQgdG8gdGhlIGZpcnN0IGFyZ3VtZW50Ci0gKiBhbmQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUg
YXBwbHkgZnVuY3Rpb24gaXMgTlVMTCwgdGhlbiB0aGUgcHJlLWV4aXN0aW5nCi0gKiB2YWx1ZSBp
cyBkZWxldGVkLiBJZiB0aGUgcmV0dXJuIHBvaW50ZXIgaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSBw
YXNzZWQgdG8gdGhlCi0gKiBhcHBseSBmdW5jdGlvbiB0aGVuIG5vIGNoYW5nZXMgYXJlIG1hZGUg
dG8gdGhlIGhhc2ggdGFibGUuICBJZiB0aGUgZmlyc3QKLSAqIGFyZ3VtZW50IGlzIG5vbi1OVUxM
IGFuZCB0aGUgcmV0dXJuIHBvaW50ZXIgaXMgZGlmZmVyZW50IHRoYW4gdGhhdCBwYXNzZWQgdG8K
LSAqIHRoZSBhcHBseSBmdW5jdGlvbiwgdGhlbiB0aGUgcHJlLWV4aXN0aW5nIHZhbHVlIGlzIHJl
cGxhY2VkLiBGb3IKLSAqIHJlcGxhY2VtZW50LCBpdCBpcyByZXF1aXJlZCB0aGF0IHRoZSB2YWx1
ZSBpdHNlbGYgaXMgaWRlbnRpY2FsIHRvIHRoZQotICogcHJldmlvdXMgdmFsdWUuCi0gKi8KLWJv
b2wKLWNrX3Joc19hcHBseShzdHJ1Y3QgY2tfcmhzICpocywKLSAgICB1bnNpZ25lZCBsb25nIGgs
Ci0gICAgY29uc3Qgdm9pZCAqa2V5LAotICAgIGNrX3Joc19hcHBseV9mbl90ICpmbiwKLSAgICB2
b2lkICpjbCkKLXsKLQljb25zdCB2b2lkICppbnNlcnQ7Ci0JY29uc3Qgdm9pZCAgKm9iamVjdCwg
KmRlbHRhID0gZmFsc2U7Ci0JdW5zaWduZWQgbG9uZyBuX3Byb2JlczsKLQlsb25nIHNsb3QsIGZp
cnN0OwotCXN0cnVjdCBja19yaHNfbWFwICptYXA7Ci0JYm9vbCBkZWx0YV9zZXQgPSBmYWxzZTsK
LQotcmVzdGFydDoKLQltYXAgPSBocy0+bWFwOwotCi0Jc2xvdCA9IG1hcC0+cHJvYmVfZnVuYyho
cywgbWFwLCAmbl9wcm9iZXMsICZmaXJzdCwgaCwga2V5LCAmb2JqZWN0LCBtYXAtPnByb2JlX2xp
bWl0LCBDS19SSFNfUFJPQkVfSU5TRVJUKTsKLQlpZiAoc2xvdCA9PSAtMSAmJiBmaXJzdCA9PSAt
MSkgewotCQlpZiAoY2tfcmhzX2dyb3coaHMsIG1hcC0+Y2FwYWNpdHkgPDwgMSkgPT0gZmFsc2Up
Ci0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJZ290byByZXN0YXJ0OwotCX0KLQlpZiAoIWRlbHRhX3Nl
dCkgewotCQlkZWx0YSA9IGZuKENLX0NDX0RFQ09OU1RfUFRSKG9iamVjdCksIGNsKTsKLQkJZGVs
dGFfc2V0ID0gdHJ1ZTsKLQl9Ci0KLQlpZiAoZGVsdGEgPT0gTlVMTCkgewotCQkvKgotCQkgKiBU
aGUgYXBwbHkgZnVuY3Rpb24gaGFzIHJlcXVlc3RlZCBkZWxldGlvbi4gSWYgdGhlIG9iamVjdCBk
b2Vzbid0IGV4aXN0LAotCQkgKiB0aGVuIGV4aXQgZWFybHkuCi0JCSAqLwotCQlpZiAoQ0tfQ0Nf
VU5MSUtFTFkob2JqZWN0ID09IE5VTEwpKQotCQkJcmV0dXJuIHRydWU7Ci0KLQkJLyogT3RoZXJ3
aXNlLCBkZWxldGUgaXQuICovCi0JCWNrX3Joc19kb19iYWNrd2FyZF9zaGlmdF9kZWxldGUoaHMs
IHNsb3QpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKiBUaGUgYXBwbHkgZnVuY3Rpb24gaGFz
IG5vdCByZXF1ZXN0ZWQgaGFzaCBzZXQgbW9kaWZpY2F0aW9uIHNvIGV4aXQgZWFybHkuICovCi0J
aWYgKGRlbHRhID09IG9iamVjdCkKLQkJcmV0dXJuIHRydWU7Ci0KLQkvKiBBIG1vZGlmaWNhdGlv
biBvciBpbnNlcnRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLiAqLwotCWNrX3Joc19tYXBfYm91bmRf
c2V0KG1hcCwgaCwgbl9wcm9iZXMpOwotCi0JaW5zZXJ0ID0gY2tfcmhzX21hcnNoYWwoaHMtPm1v
ZGUsIGRlbHRhLCBoKTsKLQlpZiAoZmlyc3QgIT0gLTEpIHsKLQkJLyoKLQkJICogVGhpcyBmb2xs
b3dzIHRoZSBzYW1lIHNlbWFudGljcyBhcyBja19oc19zZXQsIHBsZWFzZSByZWZlciB0byB0aGF0
Ci0JCSAqIGZ1bmN0aW9uIGZvciBkb2N1bWVudGF0aW9uLgotCQkgKi8KLQkJc3RydWN0IGNrX3Jo
c19lbnRyeV9kZXNjICpkZXNjID0gTlVMTCwgKmRlc2MyOwotCQlpZiAoc2xvdCAhPSAtMSkgewot
CQkJZGVzYyA9IGNrX3Joc19kZXNjKG1hcCwgc2xvdCk7Ci0JCQlkZXNjLT5pbl9yaCA9IHRydWU7
Ci0JCX0KLQkJZGVzYzIgPSBja19yaHNfZGVzYyhtYXAsIGZpcnN0KTsKLQkJaW50IHJldCA9IGNr
X3Joc19wdXRfcm9iaW5faG9vZChocywgZmlyc3QsIGRlc2MyKTsKLQkJaWYgKHNsb3QgIT0gLTEp
Ci0JCQlkZXNjLT5pbl9yaCA9IGZhbHNlOwotCi0JCWlmIChDS19DQ19VTkxJS0VMWShyZXQgPT0g
MSkpCi0JCQlnb3RvIHJlc3RhcnQ7Ci0JCWlmIChDS19DQ19VTkxJS0VMWShyZXQgPT0gLTEpKQot
CQkJcmV0dXJuIGZhbHNlOwotCQkvKiBJZiBhbiBlYXJsaWVyIGJ1Y2tldCB3YXMgZm91bmQsIHRo
ZW4gc3RvcmUgZW50cnkgdGhlcmUuICovCi0JCWNrX3ByX3N0b3JlX3B0cihja19yaHNfZW50cnlf
YWRkcihtYXAsIGZpcnN0KSwgaW5zZXJ0KTsKLQkJZGVzYzItPnByb2JlcyA9IG5fcHJvYmVzOwot
CQkvKgotCQkgKiBJZiBhIGR1cGxpY2F0ZSBrZXkgd2FzIGZvdW5kLCB0aGVuIGRlbGV0ZSBpdCBh
ZnRlcgotCQkgKiBzaWduYWxpbmcgY29uY3VycmVudCBwcm9iZXMgdG8gcmVzdGFydC4gT3B0aW9u
YWxseSwKLQkJICogaXQgaXMgcG9zc2libGUgdG8gaW5zdGFsbCB0b21ic3RvbmUgYWZ0ZXIgZ3Jh
Y2UKLQkJICogcGVyaW9kIGlmIHdlIGNhbiBndWFyYW50ZWUgZWFybGllciBwb3NpdGlvbiBvZgot
CQkgKiBkdXBsaWNhdGUga2V5LgotCQkgKi8KLQkJY2tfcmhzX2FkZF93YW50ZWQoaHMsIGZpcnN0
LCAtMSwgaCk7Ci0JCWlmIChvYmplY3QgIT0gTlVMTCkgewotCQkJY2tfcHJfaW5jX3VpbnQoJm1h
cC0+Z2VuZXJhdGlvbltoICYgQ0tfUkhTX0dfTUFTS10pOwotCQkJY2tfcHJfZmVuY2VfYXRvbWlj
X3N0b3JlKCk7Ci0JCQlja19yaHNfZG9fYmFja3dhcmRfc2hpZnRfZGVsZXRlKGhzLCBzbG90KTsK
LQkJfQotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIElmIHdlIGFyZSBzdG9yaW5nIGludG8gc2FtZSBz
bG90LCB0aGVuIGF0b21pYyBzdG9yZSBpcyBzdWZmaWNpZW50Ci0JCSAqIGZvciByZXBsYWNlbWVu
dC4KLQkJICovCi0JCWNrX3ByX3N0b3JlX3B0cihja19yaHNfZW50cnlfYWRkcihtYXAsIHNsb3Qp
LCBpbnNlcnQpOwotCQlja19yaHNfc2V0X3Byb2JlcyhtYXAsIHNsb3QsIG5fcHJvYmVzKTsKLQkJ
aWYgKG9iamVjdCA9PSBOVUxMKQotCQkJY2tfcmhzX2FkZF93YW50ZWQoaHMsIHNsb3QsIC0xLCBo
KTsKLQl9Ci0KLQlpZiAob2JqZWN0ID09IE5VTEwpIHsKLQkJbWFwLT5uX2VudHJpZXMrKzsKLQkJ
aWYgKChtYXAtPm5fZW50cmllcyApID4gbWFwLT5tYXhfZW50cmllcykKLQkJCWNrX3Joc19ncm93
KGhzLCBtYXAtPmNhcGFjaXR5IDw8IDEpOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbAot
Y2tfcmhzX3NldChzdHJ1Y3QgY2tfcmhzICpocywKLSAgICB1bnNpZ25lZCBsb25nIGgsCi0gICAg
Y29uc3Qgdm9pZCAqa2V5LAotICAgIHZvaWQgKipwcmV2aW91cykKLXsKLQlsb25nIHNsb3QsIGZp
cnN0OwotCWNvbnN0IHZvaWQgKm9iamVjdDsKLQljb25zdCB2b2lkICppbnNlcnQ7Ci0JdW5zaWdu
ZWQgbG9uZyBuX3Byb2JlczsKLQlzdHJ1Y3QgY2tfcmhzX21hcCAqbWFwOwotCi0JKnByZXZpb3Vz
ID0gTlVMTDsKLQotcmVzdGFydDoKLQltYXAgPSBocy0+bWFwOwotCi0Jc2xvdCA9IG1hcC0+cHJv
YmVfZnVuYyhocywgbWFwLCAmbl9wcm9iZXMsICZmaXJzdCwgaCwga2V5LCAmb2JqZWN0LCBtYXAt
PnByb2JlX2xpbWl0LCBDS19SSFNfUFJPQkVfSU5TRVJUKTsKLQlpZiAoc2xvdCA9PSAtMSAmJiBm
aXJzdCA9PSAtMSkgewotCQlpZiAoY2tfcmhzX2dyb3coaHMsIG1hcC0+Y2FwYWNpdHkgPDwgMSkg
PT0gZmFsc2UpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJZ290byByZXN0YXJ0OwotCX0KLQlja19y
aHNfbWFwX2JvdW5kX3NldChtYXAsIGgsIG5fcHJvYmVzKTsKLQlpbnNlcnQgPSBja19yaHNfbWFy
c2hhbChocy0+bW9kZSwga2V5LCBoKTsKLQotCWlmIChmaXJzdCAhPSAtMSkgewotCQlzdHJ1Y3Qg
Y2tfcmhzX2VudHJ5X2Rlc2MgKmRlc2MgPSBOVUxMLCAqZGVzYzI7Ci0JCWlmIChzbG90ICE9IC0x
KSB7Ci0JCQlkZXNjID0gY2tfcmhzX2Rlc2MobWFwLCBzbG90KTsKLQkJCWRlc2MtPmluX3JoID0g
dHJ1ZTsKLQkJfQotCQlkZXNjMiA9IGNrX3Joc19kZXNjKG1hcCwgZmlyc3QpOwotCQlpbnQgcmV0
ID0gY2tfcmhzX3B1dF9yb2Jpbl9ob29kKGhzLCBmaXJzdCwgZGVzYzIpOwotCQlpZiAoc2xvdCAh
PSAtMSkKLQkJCWRlc2MtPmluX3JoID0gZmFsc2U7Ci0KLQkJaWYgKENLX0NDX1VOTElLRUxZKHJl
dCA9PSAxKSkKLQkJCWdvdG8gcmVzdGFydDsKLQkJaWYgKENLX0NDX1VOTElLRUxZKHJldCA9PSAt
MSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCS8qIElmIGFuIGVhcmxpZXIgYnVja2V0IHdhcyBmb3Vu
ZCwgdGhlbiBzdG9yZSBlbnRyeSB0aGVyZS4gKi8KLQkJY2tfcHJfc3RvcmVfcHRyKGNrX3Joc19l
bnRyeV9hZGRyKG1hcCwgZmlyc3QpLCBpbnNlcnQpOwotCQlkZXNjMi0+cHJvYmVzID0gbl9wcm9i
ZXM7Ci0JCS8qCi0JCSAqIElmIGEgZHVwbGljYXRlIGtleSB3YXMgZm91bmQsIHRoZW4gZGVsZXRl
IGl0IGFmdGVyCi0JCSAqIHNpZ25hbGluZyBjb25jdXJyZW50IHByb2JlcyB0byByZXN0YXJ0LiBP
cHRpb25hbGx5LAotCQkgKiBpdCBpcyBwb3NzaWJsZSB0byBpbnN0YWxsIHRvbWJzdG9uZSBhZnRl
ciBncmFjZQotCQkgKiBwZXJpb2QgaWYgd2UgY2FuIGd1YXJhbnRlZSBlYXJsaWVyIHBvc2l0aW9u
IG9mCi0JCSAqIGR1cGxpY2F0ZSBrZXkuCi0JCSAqLwotCQlja19yaHNfYWRkX3dhbnRlZChocywg
Zmlyc3QsIC0xLCBoKTsKLQkJaWYgKG9iamVjdCAhPSBOVUxMKSB7Ci0JCQlja19wcl9pbmNfdWlu
dCgmbWFwLT5nZW5lcmF0aW9uW2ggJiBDS19SSFNfR19NQVNLXSk7Ci0JCQlja19wcl9mZW5jZV9h
dG9taWNfc3RvcmUoKTsKLQkJCWNrX3Joc19kb19iYWNrd2FyZF9zaGlmdF9kZWxldGUoaHMsIHNs
b3QpOwotCQl9Ci0KLQl9IGVsc2UgewotCQkvKgotCQkgKiBJZiB3ZSBhcmUgc3RvcmluZyBpbnRv
IHNhbWUgc2xvdCwgdGhlbiBhdG9taWMgc3RvcmUgaXMgc3VmZmljaWVudAotCQkgKiBmb3IgcmVw
bGFjZW1lbnQuCi0JCSAqLwotCQlja19wcl9zdG9yZV9wdHIoY2tfcmhzX2VudHJ5X2FkZHIobWFw
LCBzbG90KSwgaW5zZXJ0KTsKLQkJY2tfcmhzX3NldF9wcm9iZXMobWFwLCBzbG90LCBuX3Byb2Jl
cyk7Ci0JCWlmIChvYmplY3QgPT0gTlVMTCkKLQkJCWNrX3Joc19hZGRfd2FudGVkKGhzLCBzbG90
LCAtMSwgaCk7Ci0JfQotCi0JaWYgKG9iamVjdCA9PSBOVUxMKSB7Ci0JCW1hcC0+bl9lbnRyaWVz
Kys7Ci0JCWlmICgobWFwLT5uX2VudHJpZXMgKSA+IG1hcC0+bWF4X2VudHJpZXMpCi0JCQlja19y
aHNfZ3JvdyhocywgbWFwLT5jYXBhY2l0eSA8PCAxKTsKLQl9Ci0KLQkqcHJldmlvdXMgPSBDS19D
Q19ERUNPTlNUX1BUUihvYmplY3QpOwotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbAot
Y2tfcmhzX3B1dF9pbnRlcm5hbChzdHJ1Y3QgY2tfcmhzICpocywKLSAgICB1bnNpZ25lZCBsb25n
IGgsCi0gICAgY29uc3Qgdm9pZCAqa2V5LAotICAgIGVudW0gY2tfcmhzX3Byb2JlX2JlaGF2aW9y
IGJlaGF2aW9yKQotewotCWxvbmcgc2xvdCwgZmlyc3Q7Ci0JY29uc3Qgdm9pZCAqb2JqZWN0Owot
CWNvbnN0IHZvaWQgKmluc2VydDsKLQl1bnNpZ25lZCBsb25nIG5fcHJvYmVzOwotCXN0cnVjdCBj
a19yaHNfbWFwICptYXA7Ci0KLXJlc3RhcnQ6Ci0JbWFwID0gaHMtPm1hcDsKLQotCXNsb3QgPSBt
YXAtPnByb2JlX2Z1bmMoaHMsIG1hcCwgJm5fcHJvYmVzLCAmZmlyc3QsIGgsIGtleSwgJm9iamVj
dCwKLQkgICAgbWFwLT5wcm9iZV9saW1pdCwgYmVoYXZpb3IpOwotCi0JaWYgKHNsb3QgPT0gLTEg
JiYgZmlyc3QgPT0gLTEpIHsKLQkJaWYgKGNrX3Joc19ncm93KGhzLCBtYXAtPmNhcGFjaXR5IDw8
IDEpID09IGZhbHNlKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCWdvdG8gcmVzdGFydDsKLQl9Ci0K
LQkvKiBGYWlsIG9wZXJhdGlvbiBpZiBhIG1hdGNoIHdhcyBmb3VuZC4gKi8KLQlpZiAob2JqZWN0
ICE9IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQotCWNrX3Joc19tYXBfYm91bmRfc2V0KG1hcCwg
aCwgbl9wcm9iZXMpOwotCWluc2VydCA9IGNrX3Joc19tYXJzaGFsKGhzLT5tb2RlLCBrZXksIGgp
OwotCi0JaWYgKGZpcnN0ICE9IC0xKSB7Ci0JCXN0cnVjdCBja19yaHNfZW50cnlfZGVzYyAqZGVz
YyA9IGNrX3Joc19kZXNjKG1hcCwgZmlyc3QpOwotCQlpbnQgcmV0ID0gY2tfcmhzX3B1dF9yb2Jp
bl9ob29kKGhzLCBmaXJzdCwgZGVzYyk7Ci0JCWlmIChDS19DQ19VTkxJS0VMWShyZXQgPT0gMSkp
Ci0JCQlyZXR1cm4gY2tfcmhzX3B1dF9pbnRlcm5hbChocywgaCwga2V5LCBiZWhhdmlvcik7Ci0J
CWVsc2UgaWYgKENLX0NDX1VOTElLRUxZKHJldCA9PSAtMSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0J
CS8qIEluc2VydCBrZXkgaW50byBmaXJzdCBidWNrZXQgaW4gcHJvYmUgc2VxdWVuY2UuICovCi0J
CWNrX3ByX3N0b3JlX3B0cihja19yaHNfZW50cnlfYWRkcihtYXAsIGZpcnN0KSwgaW5zZXJ0KTsK
LQkJZGVzYy0+cHJvYmVzID0gbl9wcm9iZXM7Ci0JCWNrX3Joc19hZGRfd2FudGVkKGhzLCBmaXJz
dCwgLTEsIGgpOwotCX0gZWxzZSB7Ci0JCS8qIEFuIGVtcHR5IHNsb3Qgd2FzIGZvdW5kLiAqLwot
CQlja19wcl9zdG9yZV9wdHIoY2tfcmhzX2VudHJ5X2FkZHIobWFwLCBzbG90KSwgaW5zZXJ0KTsK
LQkJY2tfcmhzX3NldF9wcm9iZXMobWFwLCBzbG90LCBuX3Byb2Jlcyk7Ci0JCWNrX3Joc19hZGRf
d2FudGVkKGhzLCBzbG90LCAtMSwgaCk7Ci0JfQotCi0JbWFwLT5uX2VudHJpZXMrKzsKLQlpZiAo
KG1hcC0+bl9lbnRyaWVzICkgPiBtYXAtPm1heF9lbnRyaWVzKQotCQlja19yaHNfZ3Jvdyhocywg
bWFwLT5jYXBhY2l0eSA8PCAxKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbAotY2tfcmhzX3B1
dChzdHJ1Y3QgY2tfcmhzICpocywKLSAgICB1bnNpZ25lZCBsb25nIGgsCi0gICAgY29uc3Qgdm9p
ZCAqa2V5KQotewotCi0JcmV0dXJuIGNrX3Joc19wdXRfaW50ZXJuYWwoaHMsIGgsIGtleSwgQ0tf
UkhTX1BST0JFX0lOU0VSVCk7Ci19Ci0KLWJvb2wKLWNrX3Joc19wdXRfdW5pcXVlKHN0cnVjdCBj
a19yaHMgKmhzLAotICAgIHVuc2lnbmVkIGxvbmcgaCwKLSAgICBjb25zdCB2b2lkICprZXkpCi17
Ci0KLQlyZXR1cm4gY2tfcmhzX3B1dF9pbnRlcm5hbChocywgaCwga2V5LCBDS19SSFNfUFJPQkVf
UkgpOwotfQotCi12b2lkICoKLWNrX3Joc19nZXQoc3RydWN0IGNrX3JocyAqaHMsCi0gICAgdW5z
aWduZWQgbG9uZyBoLAotICAgIGNvbnN0IHZvaWQgKmtleSkKLXsKLQlsb25nIGZpcnN0OwotCWNv
bnN0IHZvaWQgKm9iamVjdDsKLQlzdHJ1Y3QgY2tfcmhzX21hcCAqbWFwOwotCXVuc2lnbmVkIGxv
bmcgbl9wcm9iZXM7Ci0JdW5zaWduZWQgaW50IGcsIGdfcCwgcHJvYmU7Ci0JdW5zaWduZWQgaW50
ICpnZW5lcmF0aW9uOwotCi0JZG8gewotCQltYXAgPSBja19wcl9sb2FkX3B0cigmaHMtPm1hcCk7
Ci0JCWdlbmVyYXRpb24gPSAmbWFwLT5nZW5lcmF0aW9uW2ggJiBDS19SSFNfR19NQVNLXTsKLQkJ
ZyA9IGNrX3ByX2xvYWRfdWludChnZW5lcmF0aW9uKTsKLQkJcHJvYmUgID0gY2tfcmhzX21hcF9i
b3VuZF9nZXQobWFwLCBoKTsKLQkJY2tfcHJfZmVuY2VfbG9hZCgpOwotCi0JCWZpcnN0ID0gLTE7
Ci0JCW1hcC0+cHJvYmVfZnVuYyhocywgbWFwLCAmbl9wcm9iZXMsICZmaXJzdCwgaCwga2V5LCAm
b2JqZWN0LCBwcm9iZSwgQ0tfUkhTX1BST0JFX05PX1JIKTsKLQotCQlja19wcl9mZW5jZV9sb2Fk
KCk7Ci0JCWdfcCA9IGNrX3ByX2xvYWRfdWludChnZW5lcmF0aW9uKTsKLQl9IHdoaWxlIChnICE9
IGdfcCk7Ci0KLQlyZXR1cm4gQ0tfQ0NfREVDT05TVF9QVFIob2JqZWN0KTsKLX0KLQotdm9pZCAq
Ci1ja19yaHNfcmVtb3ZlKHN0cnVjdCBja19yaHMgKmhzLAotICAgIHVuc2lnbmVkIGxvbmcgaCwK
LSAgICBjb25zdCB2b2lkICprZXkpCi17Ci0JbG9uZyBzbG90LCBmaXJzdDsKLQljb25zdCB2b2lk
ICpvYmplY3Q7Ci0Jc3RydWN0IGNrX3Joc19tYXAgKm1hcCA9IGhzLT5tYXA7Ci0JdW5zaWduZWQg
bG9uZyBuX3Byb2JlczsKLQotCXNsb3QgPSBtYXAtPnByb2JlX2Z1bmMoaHMsIG1hcCwgJm5fcHJv
YmVzLCAmZmlyc3QsIGgsIGtleSwgJm9iamVjdCwKLQkgICAgY2tfcmhzX21hcF9ib3VuZF9nZXQo
bWFwLCBoKSwgQ0tfUkhTX1BST0JFX05PX1JIKTsKLQlpZiAob2JqZWN0ID09IE5VTEwpCi0JCXJl
dHVybiBOVUxMOwotCi0JbWFwLT5uX2VudHJpZXMtLTsKLQlja19yaHNfZG9fYmFja3dhcmRfc2hp
ZnRfZGVsZXRlKGhzLCBzbG90KTsKLQlyZXR1cm4gQ0tfQ0NfREVDT05TVF9QVFIob2JqZWN0KTsK
LX0KLQotYm9vbAotY2tfcmhzX21vdmUoc3RydWN0IGNrX3JocyAqaHMsCi0gICAgc3RydWN0IGNr
X3JocyAqc291cmNlLAotICAgIGNrX3Joc19oYXNoX2NiX3QgKmhmLAotICAgIGNrX3Joc19jb21w
YXJlX2NiX3QgKmNvbXBhcmUsCi0gICAgc3RydWN0IGNrX21hbGxvYyAqbSkKLXsKLQotCWlmICht
ID09IE5VTEwgfHwgbS0+bWFsbG9jID09IE5VTEwgfHwgbS0+ZnJlZSA9PSBOVUxMIHx8IGhmID09
IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQotCWhzLT5tb2RlID0gc291cmNlLT5tb2RlOwotCWhz
LT5zZWVkID0gc291cmNlLT5zZWVkOwotCWhzLT5tYXAgPSBzb3VyY2UtPm1hcDsKLQlocy0+bG9h
ZF9mYWN0b3IgPSBzb3VyY2UtPmxvYWRfZmFjdG9yOwotCWhzLT5tID0gbTsKLQlocy0+aGYgPSBo
ZjsKLQlocy0+Y29tcGFyZSA9IGNvbXBhcmU7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wKLWNr
X3Joc19pbml0KHN0cnVjdCBja19yaHMgKmhzLAotICAgIHVuc2lnbmVkIGludCBtb2RlLAotICAg
IGNrX3Joc19oYXNoX2NiX3QgKmhmLAotICAgIGNrX3Joc19jb21wYXJlX2NiX3QgKmNvbXBhcmUs
Ci0gICAgc3RydWN0IGNrX21hbGxvYyAqbSwKLSAgICB1bnNpZ25lZCBsb25nIG5fZW50cmllcywK
LSAgICB1bnNpZ25lZCBsb25nIHNlZWQpCi17Ci0KLQlpZiAobSA9PSBOVUxMIHx8IG0tPm1hbGxv
YyA9PSBOVUxMIHx8IG0tPmZyZWUgPT0gTlVMTCB8fCBoZiA9PSBOVUxMKQotCQlyZXR1cm4gZmFs
c2U7Ci0KLQlocy0+bSA9IG07Ci0JaHMtPm1vZGUgPSBtb2RlOwotCWhzLT5zZWVkID0gc2VlZDsK
LQlocy0+aGYgPSBoZjsKLQlocy0+Y29tcGFyZSA9IGNvbXBhcmU7Ci0JaHMtPmxvYWRfZmFjdG9y
ID0gQ0tfUkhTX0RFRkFVTFRfTE9BRF9GQUNUT1I7Ci0KLQlocy0+bWFwID0gY2tfcmhzX21hcF9j
cmVhdGUoaHMsIG5fZW50cmllcyk7Ci0JcmV0dXJuIGhzLT5tYXAgIT0gTlVMTDsKLX0KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5LnNoIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDJjMWViZGViMzU1ZThkZmYyYmEyZDg2Y2FkYzE0Nzg3MzYxNzQzMzguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0jIS9iaW4v
YmFzaAotCi1zZXQgLWUKLXNldCAtdQotc2V0IC14Ci0KLUZMQUdTPSItT3MgLXN0ZD1jKysxNCAt
ZnZpc2liaWxpdHk9aGlkZGVuIC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi1JTkNMVURF
Uz0iLUkuL2ZvbGx5LyAtSS4vZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vIC1JLi9mb2xseS9nbG9n
L3NyYy8gLUkuL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVkZS8gLUkuL2ZvbGx5L2d0ZXN0
L2dvb2dsZXRlc3QvIgotCi1ERVBFTkRFTkNJRVM9IgotICAgICAgICAgICAgIC4vZm9sbHkvZG91
YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNpb24vYmlnbnVtLWR0b2EuY2MKLSAgICAgICAg
ICAgICAuL2ZvbGx5L2RvdWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uL2JpZ251bS5j
YwotICAgICAgICAgICAgIC4vZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNp
b24vY2FjaGVkLXBvd2Vycy5jYwotICAgICAgICAgICAgIC4vZm9sbHkvZG91YmxlLWNvbnZlcnNp
b24vZG91YmxlLWNvbnZlcnNpb24vZGl5LWZwLmNjCi0gICAgICAgICAgICAgLi9mb2xseS9kb3Vi
bGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi5jYwotICAg
ICAgICAgICAgIC4vZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNpb24vZmFz
dC1kdG9hLmNjCi0gICAgICAgICAgICAgLi9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3VibGUt
Y29udmVyc2lvbi9maXhlZC1kdG9hLmNjCi0gICAgICAgICAgICAgLi9mb2xseS9kb3VibGUtY29u
dmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi9zdHJ0b2QuY2MKLSAgICAgICAgICAgICAuL2ZvbGx5
L2ZvbGx5L0Fzc3VtZS5jcHAKLSAgICAgICAgICAgICAuL2ZvbGx5L2ZvbGx5L0JlbmNobWFyay5j
cHAKLSAgICAgICAgICAgICAuL2ZvbGx5L2ZvbGx5L0NvbnYuY3BwCi0gICAgICAgICAgICAgLi9m
b2xseS9mb2xseS9EZW1hbmdsZS5jcHAKLSAgICAgICAgICAgICAuL2ZvbGx5L2ZvbGx5L0Zvcm1h
dC5jcHAKLSAgICAgICAgICAgICAuL2ZvbGx5L2ZvbGx5L0Zvcm1hdFRhYmxlcy5jcHAKLSAgICAg
ICAgICAgICAuL2ZvbGx5L2ZvbGx5L1JhbmRvbS5jcHAKLSAgICAgICAgICAgICAuL2ZvbGx5L2Zv
bGx5L1Njb3BlR3VhcmQuY3BwCi0gICAgICAgICAgICAgLi9mb2xseS9mb2xseS9TaGFyZWRNdXRl
eC5jcHAKLSAgICAgICAgICAgICAuL2ZvbGx5L2ZvbGx5L1N0cmluZy5jcHAKLSAgICAgICAgICAg
ICAuL2ZvbGx5L2ZvbGx5L2NvbmN1cnJlbmN5L0NhY2hlTG9jYWxpdHkuY3BwCi0gICAgICAgICAg
ICAgLi9mb2xseS9mb2xseS9kZXRhaWwvRnV0ZXguY3BwCi0gICAgICAgICAgICAgLi9mb2xseS9m
b2xseS9kZXRhaWwvTWFsbG9jSW1wbC5jcHAKLSAgICAgICAgICAgICAuL2ZvbGx5L2ZvbGx5L2Rl
dGFpbC9TdGF0aWNTaW5nbGV0b25NYW5hZ2VyLmNwcAotICAgICAgICAgICAgIC4vZm9sbHkvZm9s
bHkvZGV0YWlsL1RocmVhZExvY2FsRGV0YWlsLmNwcAotICAgICAgICAgICAgIC4vZm9sbHkvZm9s
bHkvZXhwZXJpbWVudGFsL0FzeW1tZXRyaWNNZW1vcnlCYXJyaWVyLmNwcAotICAgICAgICAgICAg
IC4vZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvTWVtb3J5LmNwcAotICAgICAgICAgICAgIC4vZm9s
bHkvZm9sbHkvdGVzdC9EZXRlcm1pbmlzdGljU2NoZWR1bGUuY3BwCi0gICAgICAgICAgICAgLi9m
b2xseS9nbG9nL3NyYy9sb2dnaW5nLmNjCi0gICAgICAgICAgICAgLi9mb2xseS9nbG9nL3NyYy9y
YXdfbG9nZ2luZy5jYwotICAgICAgICAgICAgIC4vZm9sbHkvZ2xvZy9zcmMvdXRpbGl0aWVzLmNj
Ci0gICAgICAgICAgICAgLi9mb2xseS9nbG9nL3NyYy92bG9nX2lzX29uLmNjCi0iCi0KLUdURVNU
PSIKLSAgICAgIC4vZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC8vc3JjL2d0ZXN0LWZpbGVwYXRoLmNj
Ci0gICAgICAuL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3Qvc3JjL2d0ZXN0LXBvcnQuY2MKLSAgICAg
IC4vZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9zcmMvZ3Rlc3QtcHJpbnRlcnMuY2MKLSAgICAgIC4v
Zm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9zcmMvZ3Rlc3QtdGVzdC1wYXJ0LmNjCi0gICAgICAuL2Zv
bGx5L2d0ZXN0L2dvb2dsZXRlc3Qvc3JjL2d0ZXN0LmNjCi0iCi0KLUdURVNUX01BSU49Li9mb2xs
eS9ndGVzdC9nb29nbGV0ZXN0L3NyYy9ndGVzdF9tYWluLmNjCi0KLSMgY29uY3VycmVuY3kvdGVz
dC9BdG9taWNTaGFyZWRQdHJQZXJmb3JtYW5jZS5jcHAgdXNlcyBsaWJzdGRjKysgaW50ZXJuYWxz
LCBpZ25vcmUgaXQuCi0KLXhjcnVuIGNsYW5nKysgLW8gQ2FjaGVMb2NhbGl0eUJlbmNobWFyayAu
L2ZvbGx5L2ZvbGx5L2NvbmN1cnJlbmN5L3Rlc3QvQ2FjaGVMb2NhbGl0eUJlbmNobWFyay5jcHAg
JEZMQUdTICRJTkNMVURFUyAkREVQRU5ERU5DSUVTCi14Y3J1biBjbGFuZysrIC1vIEZsYXRDb21i
aW5pbmdCZW5jaG1hcmsgLi9mb2xseS9mb2xseS9leHBlcmltZW50YWwvZmxhdF9jb21iaW5pbmcv
dGVzdC9GbGF0Q29tYmluaW5nQmVuY2htYXJrLmNwcCAkR1RFU1QgJEdURVNUX01BSU4gJEZMQUdT
ICRJTkNMVURFUyAkREVQRU5ERU5DSUVTCi0KLXhjcnVuIGNsYW5nKysgLW8gSGF6cHRyQmVuY2gt
QW1iLVRjIC4vZm9sbHkvZm9sbHkvZXhwZXJpbWVudGFsL2hhenB0ci9iZW5jaC9IYXpwdHJCZW5j
aC1BbWItVGMuY3BwICRHVEVTVCAkRkxBR1MgJElOQ0xVREVTICRERVBFTkRFTkNJRVMKLXhjcnVu
IGNsYW5nKysgLW8gSGF6cHRyQmVuY2gtTm9BbWItTm9UYyAuL2ZvbGx5L2ZvbGx5L2V4cGVyaW1l
bnRhbC9oYXpwdHIvYmVuY2gvSGF6cHRyQmVuY2gtTm9BbWItTm9UYy5jcHAgJEdURVNUICRGTEFH
UyAkSU5DTFVERVMgJERFUEVOREVOQ0lFUwoteGNydW4gY2xhbmcrKyAtbyBIYXpwdHJCZW5jaC1P
bmVEb21haW4gLi9mb2xseS9mb2xseS9leHBlcmltZW50YWwvaGF6cHRyL2JlbmNoL0hhenB0ckJl
bmNoLU9uZURvbWFpbi5jcHAgJEdURVNUICRGTEFHUyAkSU5DTFVERVMgJERFUEVOREVOQ0lFUwot
eGNydW4gY2xhbmcrKyAtbyBIYXpwdHJCZW5jaC1Ob0FtYi1UYyAuL2ZvbGx5L2ZvbGx5L2V4cGVy
aW1lbnRhbC9oYXpwdHIvYmVuY2gvSGF6cHRyQmVuY2gtTm9BbWItVGMuY3BwICRHVEVTVCAkRkxB
R1MgJElOQ0xVREVTICRERVBFTkRFTkNJRVMKLQotIyBGSVhNRSBUaGVzZSB1c2UgdXJjdSBidXQg
SSBjb21tZW50ZWQgaXQgb3V0LiBUaGF0J3MgYSBzaGFtZSwgd2Ugc2hvdWxkIHRlc3QgUkNVLiBU
aGUgcmVzdCBvZiB0aGVzZSB0ZXN0cyBhcmUgb3RoZXJ3aXNlIHVzZWZ1bC4KLXhjcnVuIGNsYW5n
KysgLW8gUmVhZE1vc3RseVNoYXJlZFB0ckJlbmNobWFyayAuL2ZvbGx5L2ZvbGx5L2V4cGVyaW1l
bnRhbC90ZXN0L1JlYWRNb3N0bHlTaGFyZWRQdHJCZW5jaG1hcmsuY3BwICRGTEFHUyAkSU5DTFVE
RVMgJERFUEVOREVOQ0lFUwoteGNydW4gY2xhbmcrKyAtbyBSZWZDb3VudEJlbmNobWFyayAuL2Zv
bGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC90ZXN0L1JlZkNvdW50QmVuY2htYXJrLmNwcCAkRkxBR1Mg
JElOQ0xVREVTICRERVBFTkRFTkNJRVMKLQoteGNydW4gY2xhbmcrKyAtbyBCYXRvbkJlbmNobWFy
ayAuL2ZvbGx5L2ZvbGx5L3Rlc3QvQmF0b25CZW5jaG1hcmsuY3BwICRGTEFHUyAkSU5DTFVERVMg
JERFUEVOREVOQ0lFUwoteGNydW4gY2xhbmcrKyAtbyBDYWxsT25jZUJlbmNobWFyayAuL2ZvbGx5
L2ZvbGx5L3Rlc3QvQ2FsbE9uY2VCZW5jaG1hcmsuY3BwICRGTEFHUyAkSU5DTFVERVMgJERFUEVO
REVOQ0lFUwoteGNydW4gY2xhbmcrKyAtbyBDb25jdXJyZW50U2tpcExpc3RCZW5jaG1hcmsgLi9m
b2xseS9mb2xseS90ZXN0L0NvbmN1cnJlbnRTa2lwTGlzdEJlbmNobWFyay5jcHAgJEZMQUdTICRJ
TkNMVURFUyAkREVQRU5ERU5DSUVTCi14Y3J1biBjbGFuZysrIC1vIFByb2R1Y2VyQ29uc3VtZXJR
dWV1ZUJlbmNobWFyayAuL2ZvbGx5L2ZvbGx5L3Rlc3QvUHJvZHVjZXJDb25zdW1lclF1ZXVlQmVu
Y2htYXJrLmNwcCAkRkxBR1MgJElOQ0xVREVTICRERVBFTkRFTkNJRVMKLXhjcnVuIGNsYW5nKysg
LW8gVGhyZWFkTG9jYWxCZW5jaG1hcmsgLi9mb2xseS9mb2xseS90ZXN0L1RocmVhZExvY2FsQmVu
Y2htYXJrLmNwcCAkRkxBR1MgJElOQ0xVREVTICRERVBFTkRFTkNJRVMKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L0xJQ0VOU0UgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9MSUNFTlNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmNDMzYjFhNTNmNWI4MzBhMjA1ZmQyZGY3OGUyYjM0OTc0NjU2YzdiLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAgICAg
ICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBURVJN
UyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04K
LQotICAgMS4gRGVmaW5pdGlvbnMuCi0KLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0
ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlz
dHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1
bWVudC4KLQotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIg
b3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBp
cyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVh
biB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIgZW50
aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1v
bgotICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRo
aXMgZGVmaW5pdGlvbiwKLSAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJl
Y3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1l
bnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVyd2lz
ZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRo
ZQotICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hp
cCBvZiBzdWNoIGVudGl0eS4KLQotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBh
biBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9u
cyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBt
ZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAgICBp
bmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVu
dGF0aW9uCi0gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICAi
T2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNh
bAotICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwg
aW5jbHVkaW5nIGJ1dAotICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUs
IGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVy
IG1lZGlhIHR5cGVzLgotCi0gICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRo
b3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZh
aWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29weXJp
Z2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0g
ICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0g
ICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBT
b3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVk
IGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNp
b25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0g
ICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hp
cC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdv
cmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFibGUg
ZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMg
b2YsCi0gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAg
ICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1
ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2Rp
ZmljYXRpb25zIG9yIGFkZGl0aW9ucwotICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUg
V29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQgdG8g
TGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVy
Ci0gICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRv
IHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUg
cHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMgYW55
IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2Vu
dAotICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGlu
ZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBt
YWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQgaXNz
dWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2Ys
IHRoZQotICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGlt
cHJvdmluZyB0aGUgV29yaywgYnV0Ci0gICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0
IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRlZCBp
biB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4i
Ci0KLSAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2
aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1
dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVlbnRs
eSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5cmln
aHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAg
IHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBl
cnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lh
bHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1
Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXks
IHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAg
V29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4K
LQotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFu
ZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVy
ZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNs
dXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2Vw
dCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZl
IG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVy
d2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVz
IG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENv
bnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAg
Q29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1
dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihz
KSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlv
biBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBj
b3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBv
ciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVz
IGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4g
YW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNl
bnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBz
dWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5
IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERl
cml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAg
ICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVk
IHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAg
KGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAg
ICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0g
ICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21p
bmVudCBub3RpY2VzCi0gICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxl
czsgYW5kCi0KLSAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBv
ZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwotICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFs
bCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1dGlv
biBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgIGV4
Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YK
LSAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0aGUg
V29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAg
ICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0
cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0
cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0Ug
ZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0
YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUK
LSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQg
ZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29y
a3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBp
ZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAg
ICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYg
YW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5
IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBm
b3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2Rp
ZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAg
ICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBh
bG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQg
ZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBh
dHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2Rp
ZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdo
dCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUg
YWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAg
ICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmlj
YXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9s
ZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRp
b24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRp
b25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJp
YnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFu
eSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0
aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUg
dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkg
YWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRo
ZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAg
dGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUg
ZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9u
cy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1p
c3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2Ug
bWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFz
IHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcg
dGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50
IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3Jp
dGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmli
dXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAg
ICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg
ZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24s
IGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklO
R0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRo
ZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBX
b3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVy
Y2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRp
b24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAot
ICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBv
ciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1
Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJs
ZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3Bl
Y2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkg
Y2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBv
dXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVk
aW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAg
ICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55
IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVu
IGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3Np
YmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFk
ZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsg
b3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAg
ICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5
LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29y
IHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4g
YWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlv
dXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVo
YWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3Jl
ZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3Ig
aGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMg
YXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlv
dXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5Lgot
Ci0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L1JFQURNRS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L1JFQURNRS5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZThiZmY1MDg5MTFkMTIzODlmYjMwNWJlMjEzZWQ4N2I0NGVlYWQ1ZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9SRUFETUUubWQKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotRm9s
bHk6IEZhY2Vib29rIE9wZW4tc291cmNlIExpYnJhcnkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSMjIyBXaGF0IGlzIGBmb2xseWA/Ci0KLUZvbGx5IChhY3JvbnltZWQg
bG9vc2VseSBhZnRlciBGYWNlYm9vayBPcGVuIFNvdXJjZSBMaWJyYXJ5KSBpcyBhCi1saWJyYXJ5
IG9mIEMrKzExIGNvbXBvbmVudHMgZGVzaWduZWQgd2l0aCBwcmFjdGljYWxpdHkgYW5kIGVmZmlj
aWVuY3kKLWluIG1pbmQuICoqRm9sbHkgY29udGFpbnMgYSB2YXJpZXR5IG9mIGNvcmUgbGlicmFy
eSBjb21wb25lbnRzIHVzZWQgZXh0ZW5zaXZlbHkKLWF0IEZhY2Vib29rKiouIEluIHBhcnRpY3Vs
YXIsIGl0J3Mgb2Z0ZW4gYSBkZXBlbmRlbmN5IG9mIEZhY2Vib29rJ3Mgb3RoZXIKLW9wZW4gc291
cmNlIEMrKyBlZmZvcnRzIGFuZCBwbGFjZSB3aGVyZSB0aG9zZSBwcm9qZWN0cyBjYW4gc2hhcmUg
Y29kZS4KLQotSXQgY29tcGxlbWVudHMgKGFzIG9wcG9zZWQgdG8gY29tcGV0aW5nIGFnYWluc3Qp
IG9mZmVyaW5ncwotc3VjaCBhcyBCb29zdCBhbmQgb2YgY291cnNlIGBzdGRgLiBJbiBmYWN0LCB3
ZSBlbWJhcmsgb24gZGVmaW5pbmcgb3VyCi1vd24gY29tcG9uZW50IG9ubHkgd2hlbiBzb21ldGhp
bmcgd2UgbmVlZCBpcyBlaXRoZXIgbm90IGF2YWlsYWJsZSwgb3IKLWRvZXMgbm90IG1lZXQgdGhl
IG5lZWRlZCBwZXJmb3JtYW5jZSBwcm9maWxlLiBXZSBlbmRlYXZvciB0byByZW1vdmUKLXRoaW5n
cyBmcm9tIGZvbGx5IGlmIG9yIHdoZW4gYHN0ZGAgb3IgQm9vc3Qgb2Jzb2xldGVzIHRoZW0uCi0K
LVBlcmZvcm1hbmNlIGNvbmNlcm5zIHBlcm1lYXRlIG11Y2ggb2YgRm9sbHksIHNvbWV0aW1lcyBs
ZWFkaW5nIHRvCi1kZXNpZ25zIHRoYXQgYXJlIG1vcmUgaWRpb3N5bmNyYXRpYyB0aGFuIHRoZXkg
d291bGQgb3RoZXJ3aXNlIGJlIChzZWUKLWUuZy4gYFBhY2tlZFN5bmNQdHIuaGAsIGBTbWFsbExv
Y2tzLmhgKS4gR29vZCBwZXJmb3JtYW5jZSBhdCBsYXJnZQotc2NhbGUgaXMgYSB1bmlmeWluZyB0
aGVtZSBpbiBhbGwgb2YgRm9sbHkuCi0KLSMjIyBMb2dpY2FsIERlc2lnbgotCi1Gb2xseSBpcyBh
IGNvbGxlY3Rpb24gb2YgcmVsYXRpdmVseSBpbmRlcGVuZGVudCBjb21wb25lbnRzLCBzb21lIGFz
Ci1zaW1wbGUgYXMgYSBmZXcgc3ltYm9scy4gVGhlcmUgaXMgbm8gcmVzdHJpY3Rpb24gb24gaW50
ZXJuYWwKLWRlcGVuZGVuY2llcywgbWVhbmluZyB0aGF0IGEgZ2l2ZW4gZm9sbHkgbW9kdWxlIG1h
eSB1c2UgYW55IG90aGVyCi1mb2xseSBjb21wb25lbnRzLgotCi1BbGwgc3ltYm9scyBhcmUgZGVm
aW5lZCBpbiB0aGUgdG9wLWxldmVsIG5hbWVzcGFjZSBgZm9sbHlgLCBleGNlcHQgb2YKLWNvdXJz
ZSBtYWNyb3MuIE1hY3JvIG5hbWVzIGFyZSBBTExfVVBQRVJDQVNFIGFuZCBzaG91bGQgYmUgcHJl
Zml4ZWQKLXdpdGggYEZPTExZX2AuIE5hbWVzcGFjZSBgZm9sbHlgIGRlZmluZXMgb3RoZXIgaW50
ZXJuYWwgbmFtZXNwYWNlcwotc3VjaCBhcyBgaW50ZXJuYWxgIG9yIGBkZXRhaWxgLiBVc2VyIGNv
ZGUgc2hvdWxkIG5vdCBkZXBlbmQgb24gc3ltYm9scwotaW4gdGhvc2UgbmFtZXNwYWNlcy4KLQot
Rm9sbHkgaGFzIGFuIGBleHBlcmltZW50YWxgIGRpcmVjdG9yeSBhcyB3ZWxsLiBUaGlzIGRlc2ln
bmF0aW9uIGNvbm5vdGVzCi1wcmltYXJpbHkgdGhhdCB3ZSBmZWVsIHRoZSBBUEkgbWF5IGNoYW5n
ZSBoZWF2aWx5IG92ZXIgdGltZS4gVGhpcyBjb2RlLAotdHlwaWNhbGx5LCBpcyBzdGlsbCBpbiBo
ZWF2eSB1c2UgYW5kIGlzIHdlbGwgdGVzdGVkLgotCi0jIyMgUGh5c2ljYWwgRGVzaWduCi0KLUF0
IHRoZSB0b3AgbGV2ZWwgRm9sbHkgdXNlcyB0aGUgY2xhc3NpYyAic3R1dHRlcmluZyIgc2NoZW1l
Ci1gZm9sbHkvZm9sbHlgIHVzZWQgYnkgQm9vc3QgYW5kIG90aGVycy4gVGhlIGZpcnN0IGRpcmVj
dG9yeSBzZXJ2ZXMgYXMKLWFuIGluc3RhbGxhdGlvbiByb290IG9mIHRoZSBsaWJyYXJ5ICh3aXRo
IHBvc3NpYmxlIHZlcnNpb25pbmcgYSBsYQotYGZvbGx5LTEuMC9gKSwgYW5kIHRoZSBzZWNvbmQg
aXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGxpYnJhcnkgd2hlbgotaW5jbHVkaW5nIGZpbGVzLCBlLmcu
IGAjaW5jbHVkZSA8Zm9sbHkvRkJTdHJpbmcuaD5gLgotCi1UaGUgZGlyZWN0b3J5IHN0cnVjdHVy
ZSBpcyBmbGF0IChtaW1pY2tpbmcgdGhlIG5hbWVzcGFjZSBzdHJ1Y3R1cmUpLAotaS5lLiB3ZSBk
b24ndCBoYXZlIGFuIGVsYWJvcmF0ZSBkaXJlY3RvcnkgaGllcmFyY2h5IChpdCBpcyBwb3NzaWJs
ZQotdGhpcyB3aWxsIGNoYW5nZSBpbiBmdXR1cmUgdmVyc2lvbnMpLiBUaGUgc3ViZGlyZWN0b3J5
IGBleHBlcmltZW50YWxgCi1jb250YWlucyBmaWxlcyB0aGF0IGFyZSB1c2VkIGluc2lkZSBmb2xs
eSBhbmQgcG9zc2libHkgYXQgRmFjZWJvb2sgYnV0Ci1ub3QgY29uc2lkZXJlZCBzdGFibGUgZW5v
dWdoIGZvciBjbGllbnQgdXNlLiBZb3VyIGNvZGUgc2hvdWxkIG5vdCB1c2UKLWZpbGVzIGluIGBm
b2xseS9leHBlcmltZW50YWxgIGxlc3QgaXQgbWF5IGJyZWFrIHdoZW4geW91IHVwZGF0ZSBGb2xs
eS4KLQotVGhlIGBmb2xseS9mb2xseS90ZXN0YCBzdWJkaXJlY3RvcnkgaW5jbHVkZXMgdGhlIHVu
aXR0ZXN0cyBmb3IgYWxsCi1jb21wb25lbnRzLCB1c3VhbGx5IG5hbWVkIGBDb21wb25lbnRYeXpU
ZXN0LmNwcGAgZm9yIGVhY2gKLWBDb21wb25lbnRYeXouKmAuIFRoZSBgZm9sbHkvZm9sbHkvZG9j
c2AgZGlyZWN0b3J5IGNvbnRhaW5zCi1kb2N1bWVudGF0aW9uLgotCi0jIyMgV2hhdCdzIGluIGl0
PwotCi1CZWNhdXNlIG9mIGZvbGx5J3MgZmFpcmx5IGZsYXQgc3RydWN0dXJlLCB0aGUgYmVzdCB3
YXkgdG8gc2VlIHdoYXQncyBpbiBpdAotaXMgdG8gbG9vayBhdCB0aGUgaGVhZGVycyBpbiBbdG9w
IGxldmVsIGBmb2xseS9gIGRpcmVjdG9yeV0oaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zv
bGx5L3RyZWUvbWFzdGVyL2ZvbGx5KS4gWW91IGNhbiBhbHNvCi1jaGVjayB0aGUgW2Bkb2NzYCBm
b2xkZXJdKGZvbGx5L2RvY3MpIGZvciBkb2N1bWVudGF0aW9uLCBzdGFydGluZyB3aXRoIHRoZQot
W292ZXJ2aWV3XShmb2xseS9kb2NzL092ZXJ2aWV3Lm1kKS4KLQotRm9sbHkgaXMgcHVibGlzaGVk
IG9uIEdpdGh1YiBhdCBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZm9sbHkKLQotIyMjIEJ1
aWxkIE5vdGVzCi0KLSMjIyMgRGVwZW5kZW5jaWVzCi0KLWZvbGx5IHJlcXVpcmVzIGdjYyA0Ljkr
IGFuZCBhIHZlcnNpb24gb2YgYm9vc3QgY29tcGlsZWQgd2l0aCBDKysxNCBzdXBwb3J0LgotCi1Q
bGVhc2UgZG93bmxvYWQgZ29vZ2xldGVzdCBmcm9tCi1odHRwczovL2dpdGh1Yi5jb20vZ29vZ2xl
L2dvb2dsZXRlc3QvYXJjaGl2ZS9yZWxlYXNlLTEuOC4wLnRhci5neiBhbmQgdW5wYWNrIGl0IGlu
dG8gdGhlCi1mb2xseS90ZXN0IHN1YmRpcmVjdG9yeSBhcyBgZ3Rlc3RgOgotCi0gICAgKGNkIGZv
bGx5L3Rlc3QgJiYgXAotICAgICBybSAtcmYgZ3Rlc3QgJiYgXAotICAgICB3Z2V0IGh0dHBzOi8v
Z2l0aHViLmNvbS9nb29nbGUvZ29vZ2xldGVzdC9hcmNoaXZlL3JlbGVhc2UtMS44LjAudGFyLmd6
ICYmIFwKLSAgICAgdGFyIHp4ZiByZWxlYXNlLTEuOC4wLnRhci5neiAmJiBcCi0gICAgIHJtIC1m
IHJlbGVhc2UtMS44LjAudGFyLmd6ICYmIFwKLSAgICAgbXYgZ29vZ2xldGVzdC1yZWxlYXNlLTEu
OC4wIGd0ZXN0KQotCi0jIyMjIFVidW50dSAxMi4wNAotCi1UaGlzIHJlbGVhc2UgaXMgb2xkLCBy
ZXF1aXJpbmcgbWFueSB1cGdyYWRlcy4gSG93ZXZlciwgc2luY2UgVHJhdmlzIENJIHJ1bnMKLW9u
IDEyLjA0LCBgZm9sbHkvYnVpbGQvZGVwc191YnVudHVfMTIuMDQuc2hgIGlzIHByb3ZpZGVkLCBh
bmQgdXBncmFkZXMgYWxsCi10aGUgcmVxdWlyZWQgcGFja2FnZXMuCi0KLSMjIyMgVWJ1bnR1IDEz
LjEwCi0KLVRoZSBmb2xsb3dpbmcgcGFja2FnZXMgYXJlIHJlcXVpcmVkIChmZWVsIGZyZWUgdG8g
Y3V0IGFuZCBwYXN0ZSB0aGUgYXB0LWdldAotY29tbWFuZCBiZWxvdyk6Ci0KLWBgYAotc3VkbyBh
cHQtZ2V0IGluc3RhbGwgXAotICAgIGcrKyBcCi0gICAgYXV0b21ha2UgXAotICAgIGF1dG9jb25m
IFwKLSAgICBhdXRvY29uZi1hcmNoaXZlIFwKLSAgICBsaWJ0b29sIFwKLSAgICBsaWJib29zdC1h
bGwtZGV2IFwKLSAgICBsaWJldmVudC1kZXYgXAotICAgIGxpYmRvdWJsZS1jb252ZXJzaW9uLWRl
diBcCi0gICAgbGliZ29vZ2xlLWdsb2ctZGV2IFwKLSAgICBsaWJnZmxhZ3MtZGV2IFwKLSAgICBs
aWJsejQtZGV2IFwKLSAgICBsaWJsem1hLWRldiBcCi0gICAgbGlic25hcHB5LWRldiBcCi0gICAg
bWFrZSBcCi0gICAgemxpYjFnLWRldiBcCi0gICAgYmludXRpbHMtZGV2IFwKLSAgICBsaWJqZW1h
bGxvYy1kZXYgXAotICAgIGxpYnNzbC1kZXYgXAotICAgIHBrZy1jb25maWcKLWBgYAotCi1JZiBh
ZHZhbmNlZCBkZWJ1Z2dpbmcgZnVuY3Rpb25hbGl0eSBpcyByZXF1aXJlZAotCi1gYGAKLXN1ZG8g
YXB0LWdldCBpbnN0YWxsIFwKLSAgICBsaWJ1bndpbmQ4LWRldiBcCi0gICAgbGliZWxmLWRldiBc
Ci0gICAgbGliZHdhcmYtZGV2Ci1gYGAKLQotIyMjIyBVYnVudHUgMTQuMDQgTFRTCi0KLVRoZSBw
YWNrYWdlcyBsaXN0ZWQgYWJvdmUgZm9yIFVidW50dSAxMy4xMCBhcmUgcmVxdWlyZWQsIGFzIHdl
bGwgYXM6Ci0KLWBgYAotc3VkbyBhcHQtZ2V0IGluc3RhbGwgXAotICAgIGxpYmliZXJ0eS1kZXYK
LWBgYAotCi1UaGUgYWJvdmUgcGFja2FnZXMgYXJlIHN1ZmZpY2llbnQgZm9yIFVidW50dSAxMy4x
MCBhbmQgVWJ1bnR1IDE0LjA0LgotCi1JbiB0aGUgZm9sbHkgZGlyZWN0b3J5LCBydW4KLWBgYAot
ICBhdXRvcmVjb25mIC1pdmYKLSAgLi9jb25maWd1cmUKLSAgbWFrZQotICBtYWtlIGNoZWNrCi0g
IHN1ZG8gbWFrZSBpbnN0YWxsCi1gYGAKLQotIyMjIyBPUyBYIChIb21lYnJldykKLQotZm9sbHkg
aXMgYXZhaWxhYmxlIGFzIGEgRm9ybXVsYSBhbmQgcmVsZWFzZXMgbWF5IGJlIGJ1aWx0IHZpYSBg
YnJldyBpbnN0YWxsIGZvbGx5YC4KLQotWW91IG1heSBhbHNvIHVzZSBgZm9sbHkvYnVpbGQvYm9v
dHN0cmFwLW9zeC1ob21lYnJldy5zaGAgdG8gYnVpbGQgYWdhaW5zdCBgbWFzdGVyYDoKLQotYGBg
Ci0gIGNkIGZvbGx5Ci0gIC4vYnVpbGQvYm9vdHN0cmFwLW9zeC1ob21lYnJldy5zaAotYGBgCi0K
LSMjIyMgT1MgWCAoTWFjUG9ydHMpCi0KLUluc3RhbGwgdGhlIHJlcXVpcmVkIHBhY2thZ2VzIGZy
b20gTWFjUG9ydHM6Ci0KLWBgYAotICBzdWRvIHBvcnQgaW5zdGFsbCBcCi0gICAgYXV0b2NvbmYg
XAotICAgIGF1dG9tYWtlIFwKLSAgICBib29zdCBcCi0gICAgZ2ZsYWdzIFwKLSAgICBnaXQgXAot
ICAgIGdvb2dsZS1nbG9nIFwKLSAgICBsaWJldmVudCBcCi0gICAgbGlidG9vbCBcCi0gICAgbHo0
IFwKLSAgICBsem1hIFwKLSAgICBzY29ucyBcCi0gICAgc25hcHB5IFwKLSAgICB6bGliCi1gYGAK
LQotRG93bmxvYWQgYW5kIGluc3RhbGwgZG91YmxlLWNvbnZlcnNpb246Ci0KLWBgYAotICBnaXQg
Y2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9kb3VibGUtY29udmVyc2lvbi5naXQKLSAg
Y2QgZG91YmxlLWNvbnZlcnNpb24KLSAgY21ha2UgLURCVUlMRF9TSEFSRURfTElCUz1PTiAuCi0g
IG1ha2UKLSAgc3VkbyBtYWtlIGluc3RhbGwKLWBgYAotCi1Eb3dubG9hZCBhbmQgaW5zdGFsbCBm
b2xseSB3aXRoIHRoZSBwYXJhbWV0ZXJzIGxpc3RlZCBiZWxvdzoKLQotYGBgCi0gIGdpdCBjbG9u
ZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZm9sbHkuZ2l0Ci0gIGNkIGZvbGx5L2ZvbGx5
Ci0gIGF1dG9yZWNvbmYgLWl2ZgotICAuL2NvbmZpZ3VyZSBDUFBGTEFHUz0iLUkvb3B0L2xvY2Fs
L2luY2x1ZGUiIExERkxBR1M9Ii1ML29wdC9sb2NhbC9saWIiCi0gIG1ha2UKLSAgc3VkbyBtYWtl
IGluc3RhbGwKLWBgYAotCi0jIyMjIE90aGVyIExpbnV4IGRpc3RyaWJ1dGlvbnMKLQotLSBkb3Vi
bGUtY29udmVyc2lvbiAoaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9kb3VibGUtY29udmVyc2lv
bikKLQotICBEb3dubG9hZCBhbmQgYnVpbGQgZG91YmxlLWNvbnZlcnNpb24uCi0gIFlvdSBtYXkg
bmVlZCB0byB0ZWxsIGNvbmZpZ3VyZSB3aGVyZSB0byBmaW5kIGl0LgotCi0gIFtkb3VibGUtY29u
dmVyc2lvbi9dIGBsbiAtcyBzcmMgZG91YmxlLWNvbnZlcnNpb25gCi0KLSAgW2ZvbGx5L10gYC4v
Y29uZmlndXJlIExERkxBR1M9LUwkRE9VQkxFX0NPTlZFUlNJT05fSE9NRS8gQ1BQRkxBR1M9LUkk
RE9VQkxFX0NPTlZFUlNJT05fSE9NRS9gCi0KLSAgW2ZvbGx5L10gYExEX0xJQlJBUllfUEFUSD0k
RE9VQkxFX0NPTlZFUlNJT05fSE9NRS8gbWFrZWAKLQotLSBhZGRpdGlvbmFsIHBsYXRmb3JtIHNw
ZWNpZmljIGRlcGVuZGVuY2llczoKLQotICBGZWRvcmEgMjEgNjQtYml0Ci0gICAgLSBnY2MKLSAg
ICAtIGdjYy1jKysKLSAgICAtIGF1dG9jb25mCi0gICAgLSBhdXRvY29uZi1hcmNoaXZlCi0gICAg
LSBhdXRvbWFrZQotICAgIC0gYm9vc3QtZGV2ZWwKLSAgICAtIGxpYnRvb2wKLSAgICAtIGx6NC1k
ZXZlbAotICAgIC0gbHptYS1kZXZlbAotICAgIC0gc25hcHB5LWRldmVsCi0gICAgLSB6bGliLWRl
dmVsCi0gICAgLSBnbG9nLWRldmVsCi0gICAgLSBnZmxhZ3MtZGV2ZWwKLSAgICAtIHNjb25zCi0g
ICAgLSBkb3VibGUtY29udmVyc2lvbi1kZXZlbAotICAgIC0gb3BlbnNzbC1kZXZlbAotICAgIC0g
bGliZXZlbnQtZGV2ZWwKLQotICBPcHRpb25hbAotICAgIC0gbGliZHdhcmYtZGV2Ci0gICAgLSBs
aWJlbGYtZGV2Ci0gICAgLSBsaWJ1bndpbmQ4LWRldgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvTElDRU5TRV8xXzAudHh0IGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvTElDRU5TRV8xXzAudHh0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmI3Y2Q5M2NkZmJhYzc2MmY1YmU0YzZjZTI3NmRmMmVh
NjMwNWMyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L0xJQ0VOU0VfMV8wLnR4dAor
KysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLUJvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBW
ZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy
YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgotb2J0
YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0
aW9uIGNvdmVyZWQgYnkKLXRoaXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVw
cm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAotZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBT
b2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKLVNvZnR3YXJl
LCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVy
bmlzaGVkIHRvCi1kbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKLQotVGhlIGNv
cHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50
LCBpbmNsdWRpbmcKLXRoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCi1tdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp
ZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKLWFsbCBkZXJpdmF0
aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRp
dmUKLXdvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9i
amVjdCBjb2RlIGdlbmVyYXRlZCBieQotYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgotCi1U
SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg
S0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU
SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi1GSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCi1TSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUgU09GVFdB
UkUgQkUgTElBQkxFCi1GT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLUFSSVNJTkcgRlJPTSwgT1VUIE9GIE9S
IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotREVB
TElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvYXNzZXJ0LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L2Fzc2VydC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDk2NTBkN2EyOTA4YWQ1MjQ0YTA5ZWY4M2I0MDNkZWY1ZGFjMjEwMjguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvYXNzZXJ0LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICsw
LDAgQEAKLS8vCi0vLyAgYm9vc3QvYXNzZXJ0LmhwcCAtIEJPT1NUX0FTU0VSVChleHByKQotLy8g
ICAgICAgICAgICAgICAgICAgICBCT09TVF9BU1NFUlRfTVNHKGV4cHIsIG1zZykKLS8vICAgICAg
ICAgICAgICAgICAgICAgQk9PU1RfVkVSSUZZKGV4cHIpCi0vLyAgICAgICAgICAgICAgICAgICAg
IEJPT1NUX1ZFUklGWV9NU0coZXhwciwgbXNnKQotLy8gICAgICAgICAgICAgICAgICAgICBCT09T
VF9BU1NFUlRfSVNfVk9JRAotLy8KLS8vICBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIgUGV0ZXIg
RGltb3YgYW5kIE11bHRpIE1lZGlhIEx0ZC4KLS8vICBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMTQg
UGV0ZXIgRGltb3YKLS8vICBDb3B5cmlnaHQgKGMpIEJlbWFuIERhd2VzIDIwMTEKLS8vICBDb3B5
cmlnaHQgKGMpIDIwMTUgSW9uIEdhenRhbmFnYQotLy8KLS8vICBEaXN0cmlidXRlZCB1bmRlciB0
aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAgU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0Ci0vLwotLy8gIE5vdGU6IFRoZXJlIGFyZSBubyBpbmNsdWRl
IGd1YXJkcy4gVGhpcyBpcyBpbnRlbnRpb25hbC4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL2xpYnMvYXNzZXJ0L2Fzc2VydC5odG1sIGZvciBkb2N1bWVudGF0aW9uLgotLy8KLQot
Ly8KLS8vIFN0b3AgaW5zcGVjdCBjb21wbGFpbmluZyBhYm91dCB1c2Ugb2YgJ2Fzc2VydCc6Ci0v
LwotLy8gYm9vc3RpbnNwZWN0Om5hYXNzZXJ0X21hY3JvCi0vLwotCi0vLwotLy8gQk9PU1RfQVNT
RVJULCBCT09TVF9BU1NFUlRfTVNHLCBCT09TVF9BU1NFUlRfSVNfVk9JRAotLy8KLQotI3VuZGVm
IEJPT1NUX0FTU0VSVAotI3VuZGVmIEJPT1NUX0FTU0VSVF9NU0cKLSN1bmRlZiBCT09TVF9BU1NF
UlRfSVNfVk9JRAotCi0jaWYgZGVmaW5lZChCT09TVF9ESVNBQkxFX0FTU0VSVFMpIHx8ICggZGVm
aW5lZChCT09TVF9FTkFCTEVfQVNTRVJUX0RFQlVHX0hBTkRMRVIpICYmIGRlZmluZWQoTkRFQlVH
KSApCi0KLSMgZGVmaW5lIEJPT1NUX0FTU0VSVChleHByKSAoKHZvaWQpMCkKLSMgZGVmaW5lIEJP
T1NUX0FTU0VSVF9NU0coZXhwciwgbXNnKSAoKHZvaWQpMCkKLSMgZGVmaW5lIEJPT1NUX0FTU0VS
VF9JU19WT0lECi0KLSNlbGlmIGRlZmluZWQoQk9PU1RfRU5BQkxFX0FTU0VSVF9IQU5ETEVSKSB8
fCAoIGRlZmluZWQoQk9PU1RfRU5BQkxFX0FTU0VSVF9ERUJVR19IQU5ETEVSKSAmJiAhZGVmaW5l
ZChOREVCVUcpICkKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+IC8vIGZvciBCT09TVF9M
SUtFTFkKLSNpbmNsdWRlIDxib29zdC9jdXJyZW50X2Z1bmN0aW9uLmhwcD4KLQotbmFtZXNwYWNl
IGJvb3N0Ci17Ci0gICAgdm9pZCBhc3NlcnRpb25fZmFpbGVkKGNoYXIgY29uc3QgKiBleHByLCBj
aGFyIGNvbnN0ICogZnVuY3Rpb24sIGNoYXIgY29uc3QgKiBmaWxlLCBsb25nIGxpbmUpOyAvLyB1
c2VyIGRlZmluZWQKLSAgICB2b2lkIGFzc2VydGlvbl9mYWlsZWRfbXNnKGNoYXIgY29uc3QgKiBl
eHByLCBjaGFyIGNvbnN0ICogbXNnLCBjaGFyIGNvbnN0ICogZnVuY3Rpb24sIGNoYXIgY29uc3Qg
KiBmaWxlLCBsb25nIGxpbmUpOyAvLyB1c2VyIGRlZmluZWQKLX0gLy8gbmFtZXNwYWNlIGJvb3N0
Ci0KLSNkZWZpbmUgQk9PU1RfQVNTRVJUKGV4cHIpIChCT09TVF9MSUtFTFkoISEoZXhwcikpPyAo
KHZvaWQpMCk6IDo6Ym9vc3Q6OmFzc2VydGlvbl9mYWlsZWQoI2V4cHIsIEJPT1NUX0NVUlJFTlRf
RlVOQ1RJT04sIF9fRklMRV9fLCBfX0xJTkVfXykpCi0jZGVmaW5lIEJPT1NUX0FTU0VSVF9NU0co
ZXhwciwgbXNnKSAoQk9PU1RfTElLRUxZKCEhKGV4cHIpKT8gKCh2b2lkKTApOiA6OmJvb3N0Ojph
c3NlcnRpb25fZmFpbGVkX21zZygjZXhwciwgbXNnLCBCT09TVF9DVVJSRU5UX0ZVTkNUSU9OLCBf
X0ZJTEVfXywgX19MSU5FX18pKQotCi0jZWxzZQotCi0jIGluY2x1ZGUgPGFzc2VydC5oPiAvLyAu
aCB0byBzdXBwb3J0IG9sZCBsaWJyYXJpZXMgdy9vIDxjYXNzZXJ0PiAtIGVmZmVjdCBpcyB0aGUg
c2FtZQotCi0jIGRlZmluZSBCT09TVF9BU1NFUlQoZXhwcikgYXNzZXJ0KGV4cHIpCi0jIGRlZmlu
ZSBCT09TVF9BU1NFUlRfTVNHKGV4cHIsIG1zZykgYXNzZXJ0KChleHByKSYmKG1zZykpCi0jaWYg
ZGVmaW5lZChOREVCVUcpCi0jIGRlZmluZSBCT09TVF9BU1NFUlRfSVNfVk9JRAotI2VuZGlmCi0K
LSNlbmRpZgotCi0vLwotLy8gQk9PU1RfVkVSSUZZLCBCT09TVF9WRVJJRllfTVNHCi0vLwotCi0j
dW5kZWYgQk9PU1RfVkVSSUZZCi0jdW5kZWYgQk9PU1RfVkVSSUZZX01TRwotCi0jaWYgZGVmaW5l
ZChCT09TVF9ESVNBQkxFX0FTU0VSVFMpIHx8ICggIWRlZmluZWQoQk9PU1RfRU5BQkxFX0FTU0VS
VF9IQU5ETEVSKSAmJiBkZWZpbmVkKE5ERUJVRykgKQotCi0jIGRlZmluZSBCT09TVF9WRVJJRlko
ZXhwcikgKCh2b2lkKShleHByKSkKLSMgZGVmaW5lIEJPT1NUX1ZFUklGWV9NU0coZXhwciwgbXNn
KSAoKHZvaWQpKGV4cHIpKQotCi0jZWxzZQotCi0jIGRlZmluZSBCT09TVF9WRVJJRlkoZXhwcikg
Qk9PU1RfQVNTRVJUKGV4cHIpCi0jIGRlZmluZSBCT09TVF9WRVJJRllfTVNHKGV4cHIsIG1zZykg
Qk9PU1RfQVNTRVJUX01TRyhleHByLG1zZykKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9ibGFuay5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9ibGFuay5ocHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQwZmU1YWJjYTU2NzQxYmJlOTI5MDE2N2ViNWQ2ODQwNzBlY2Q1NmQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvYmxhbmsuaHBwCisrKyAvZGV2L251bGwK
QEAgLTEsMTA2ICswLDAgQEAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGJvb3N0IGJsYW5r
LmhwcCBoZWFkZXIgZmlsZQotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciB1cGRhdGVz
LCBkb2N1bWVudGF0aW9uLCBhbmQgcmV2aXNpb24gaGlzdG9yeS4KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDMKLS8vIEVyaWMgRnJpZWRtYW4KLS8vCi0v
LyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuIChTZWUKLS8vIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0
Ci0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpZm5kZWYgQk9P
U1RfQkxBTktfSFBQCi0jZGVmaW5lIEJPT1NUX0JMQU5LX0hQUAotCi0jaW5jbHVkZSAiYm9vc3Qv
YmxhbmtfZndkLmhwcCIKLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX0lPU1RSRUFNKQotI2luY2x1
ZGUgPGlvc2Z3ZD4gLy8gZm9yIHN0ZDo6YmFzaWNfb3N0cmVhbSBmb3J3YXJkIGRlY2xhcmUKLSNp
bmNsdWRlICJib29zdC9kZXRhaWwvdGVtcGxhdGVkX3N0cmVhbXMuaHBwIgotI2VuZGlmIC8vIEJP
T1NUX05PX0lPU1RSRUFNCi0KLSNpbmNsdWRlICJib29zdC9tcGwvYm9vbC5ocHAiCi0jaW5jbHVk
ZSAiYm9vc3QvdHlwZV90cmFpdHMvaXNfZW1wdHkuaHBwIgotI2luY2x1ZGUgImJvb3N0L3R5cGVf
dHJhaXRzL2lzX3BvZC5ocHAiCi0jaW5jbHVkZSAiYm9vc3QvdHlwZV90cmFpdHMvaXNfc3RhdGVs
ZXNzLmhwcCIKLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotc3RydWN0IGJsYW5rCi17Ci19OwotCi0v
LyB0eXBlIHRyYWl0cyBzcGVjaWFsaXphdGlvbnMKLS8vCi0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3Qg
aXNfcG9kPCBibGFuayA+Ci0gICAgOiBtcGw6OnRydWVfCi17Ci19OwotCi10ZW1wbGF0ZSA8Pgot
c3RydWN0IGlzX2VtcHR5PCBibGFuayA+Ci0gICAgOiBtcGw6OnRydWVfCi17Ci19OwotCi10ZW1w
bGF0ZSA8Pgotc3RydWN0IGlzX3N0YXRlbGVzczwgYmxhbmsgPgotICAgIDogbXBsOjp0cnVlXwot
ewotfTsKLQotLy8gcmVsYXRpb25hbCBvcGVyYXRvcnMKLS8vCi0KLWlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgYmxhbmsmLCBjb25zdCBibGFuayYpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgYmxhbmsmLCBjb25zdCBibGFuayYpCi17
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgYmxh
bmsmLCBjb25zdCBibGFuayYpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgYmxhbmsmLCBjb25zdCBibGFuayYpCi17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgYmxhbmsmLCBjb25zdCBibGFu
ayYpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29u
c3QgYmxhbmsmLCBjb25zdCBibGFuayYpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBz
dHJlYW1pbmcgc3VwcG9ydAotLy8KLSNpZiAhZGVmaW5lZChCT09TVF9OT19JT1NUUkVBTSkKLQot
Qk9PU1RfVEVNUExBVEVEX1NUUkVBTV9URU1QTEFURShFLFQpCi1pbmxpbmUgQk9PU1RfVEVNUExB
VEVEX1NUUkVBTShvc3RyZWFtLCBFLFQpJiBvcGVyYXRvcjw8KAotICAgICAgQk9PU1RfVEVNUExB
VEVEX1NUUkVBTShvc3RyZWFtLCBFLFQpJiBvdXQKLSAgICAsIGNvbnN0IGJsYW5rJgotICAgICkK
LXsKLSAgICAvLyAob3V0cHV0IG5vdGhpbmcpCi0gICAgcmV0dXJuIG91dDsKLX0KLQotI2VuZGlm
IC8vIEJPT1NUX05PX0lPU1RSRUFNCi0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAv
LyBCT09TVF9CTEFOS19IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L2JsYW5rX2Z3ZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9ibGFua19md2QuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4YmZlOTdjNDY5OWE3YzRiNTRjNGE3MWE0MjJjYzgwMWIwYTRkNzM3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2JsYW5rX2Z3ZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
MiArMCwwIEBACi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBib29zdCBibGFua19md2QuaHBw
IGhlYWRlciBmaWxlCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIHVwZGF0ZXMsIGRv
Y3VtZW50YXRpb24sIGFuZCByZXZpc2lvbiBoaXN0b3J5LgotLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMwotLy8gRXJpYyBGcmllZG1hbgotLy8KLS8vIERp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4g
KFNlZQotLy8gYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8v
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2lmbmRlZiBCT09TVF9C
TEFOS19GV0RfSFBQCi0jZGVmaW5lIEJPT1NUX0JMQU5LX0ZXRF9IUFAKLQotbmFtZXNwYWNlIGJv
b3N0IHsKLQotc3RydWN0IGJsYW5rOwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYg
Ly8gQk9PU1RfQkxBTktfRldEX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uY2VwdC9hc3NlcnQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uY2VwdC9hc3NlcnQuaHBwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjZjk4MTc5NTIyOTE5YTllOTVhZWU0YTNjZTcwNTE3ZTg2NTJi
YzY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2NvbmNlcHQvYXNzZXJ0LmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8vIENvcHlyaWdodCBEYXZpZCBBYnJhaGFt
cyAyMDA2LiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QKLS8vIFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jaWZuZGVm
IEJPT1NUX0NPTkNFUFRfQVNTRVJUX0RXQTIwMDY0MzBfSFBQCi0jIGRlZmluZSBCT09TVF9DT05D
RVBUX0FTU0VSVF9EV0EyMDA2NDMwX0hQUAotCi0jIGluY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+
Ci0jIGluY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQotLy8gVGhlIG9sZCBw
cm90b2NvbCB1c2VkIGEgY29uc3RyYWludHMoKSBtZW1iZXIgZnVuY3Rpb24gaW4gY29uY2VwdAot
Ly8gY2hlY2tpbmcgY2xhc3Nlcy4gIElmIHRoZSBjb21waWxlciBzdXBwb3J0cyBTRklOQUUsIHdl
IGNhbiBkZXRlY3QKLS8vIHRoYXQgZnVuY3Rpb24gYW5kIHNlYW1sZXNzbHkgc3VwcG9ydCB0aGUg
b2xkIGNvbmNlcHQgY2hlY2tpbmcKLS8vIGNsYXNzZXMuICBJbiB0aGlzIHJlbGVhc2UsIGJhY2t3
YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb2xkCi0vLyBjb25jZXB0IGNoZWNraW5nIGNsYXNz
ZXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGVyZSBhdmFpbGFibGUuCi0vLyBUaGUgb2xkIHBy
b3RvY29sIGlzIGRlcHJlY2F0ZWQsIHRob3VnaCwgYW5kIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkK
LS8vIHdpbGwgbm8gbG9uZ2VyIGJlIHRoZSBkZWZhdWx0IGluIHRoZSBuZXh0IHJlbGVhc2UuCi0K
LSMgaWYgIWRlZmluZWQoQk9PU1RfTk9fT0xEX0NPTkNFUFRfU1VQUE9SVCkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAmJiAhZGVmaW5lZChCT09TVF9OT19T
RklOQUUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAmJiAhKEJPT1NUX1dPUktBUk9V
TkQoX19HTlVDX18sID09IDMpICYmIEJPT1NUX1dPUktBUk9VTkQoX19HTlVDX01JTk9SX18sIDwg
NCkpCi0KLS8vIE5vdGU6IGdjYy0yLjk2IHRocm91Z2ggMy4zLnggaGF2ZSBzb21lIFNGSU5BRSwg
YnV0IG5vIGFiaWxpdHkgdG8KLS8vIGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgcGFydGljdWxh
cm1lbWJlciBmdW5jdGlvbnMuCi0KLSMgIGRlZmluZSBCT09TVF9PTERfQ09OQ0VQVF9TVVBQT1JU
Ci0KLSMgZW5kaWYKLQotIyBpZmRlZiBCT09TVF9NU1ZDCi0jICBpbmNsdWRlIDxib29zdC9jb25j
ZXB0L2RldGFpbC9tc3ZjLmhwcD4KLSMgZWxpZiBCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENf
XywgQk9PU1RfVEVTVEVEX0FUKDB4NTY0KSkKLSMgIGluY2x1ZGUgPGJvb3N0L2NvbmNlcHQvZGV0
YWlsL2JvcmxhbmQuaHBwPgotIyBlbHNlIAotIyAgaW5jbHVkZSA8Ym9vc3QvY29uY2VwdC9kZXRh
aWwvZ2VuZXJhbC5ocHA+Ci0jIGVuZGlmCi0KLSAgLy8gVXNhZ2UsIGluIGNsYXNzIG9yIGZ1bmN0
aW9uIGNvbnRleHQ6Ci0gIC8vCi0gIC8vICAgICBCT09TVF9DT05DRVBUX0FTU0VSVCgoVW5hcnlG
dW5jdGlvbkNvbmNlcHQ8Rixib29sLGludD4pKTsKLSAgLy8KLSMgZGVmaW5lIEJPT1NUX0NPTkNF
UFRfQVNTRVJUKE1vZGVsSW5QYXJlbnMpIFwKLSAgICBCT09TVF9DT05DRVBUX0FTU0VSVF9GTih2
b2lkKCopTW9kZWxJblBhcmVucykKLQotI2VuZGlmIC8vIEJPT1NUX0NPTkNFUFRfQVNTRVJUX0RX
QTIwMDY0MzBfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9jb25jZXB0L2RldGFpbC9iYWNrd2FyZF9jb21wYXRpYmlsaXR5LmhwcCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2NvbmNlcHQvZGV0YWlsL2Jh
Y2t3YXJkX2NvbXBhdGliaWxpdHkuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
NmQ1NzNlZjRiYmU0NjJkM2UzOTBhYTQxZmE0Mjk4NDA4ZDEyNjAyLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L2NvbmNlcHQvZGV0YWlsL2JhY2t3YXJkX2NvbXBhdGliaWxpdHkuaHBw
CisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IERhdmlkIEFicmFo
YW1zIDIwMDkuIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdAotLy8gU29mdHdhcmUgTGljZW5z
ZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vLyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSNpZm5k
ZWYgQk9PU1RfQ09OQ0VQVF9CQUNLV0FSRF9DT01QQVRJQklMSVRZX0RXQTIwMDk2OF9IUFAKLSMg
ZGVmaW5lIEJPT1NUX0NPTkNFUFRfQkFDS1dBUkRfQ09NUEFUSUJJTElUWV9EV0EyMDA5NjhfSFBQ
Ci0KLW5hbWVzcGFjZSBib29zdAotewotICBuYW1lc3BhY2UgY29uY2VwdHMge30KLQotIyBpZiBk
ZWZpbmVkKEJPT1NUX0hBU19DT05DRVBUUykgJiYgIWRlZmluZWQoQk9PU1RfQ09OQ0VQVF9OT19C
QUNLV0FSRF9LRVlXT1JEKQotICBuYW1lc3BhY2UgY29uY2VwdCA9IGNvbmNlcHRzOwotIyBlbmRp
ZiAKLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ojpjb25jZXB0Ci0KLSNlbmRpZiAvLyBCT09TVF9DT05D
RVBUX0JBQ0tXQVJEX0NPTVBBVElCSUxJVFlfRFdBMjAwOTY4X0hQUApkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uY2VwdC9kZXRhaWwvY29u
Y2VwdF9kZWYuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
Y29uY2VwdC9kZXRhaWwvY29uY2VwdF9kZWYuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3NTA1NjFlZTMwMTczN2VjZTVlZWI0NzRjNDcwYmVlMzRkZDg2MDAzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2NvbmNlcHQvZGV0YWlsL2NvbmNlcHRfZGVmLmhwcAorKysg
L2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8vIENvcHlyaWdodCBEYXZpZCBBYnJhaGFtcyAy
MDA2LiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QKLS8vIFNvZnR3YXJlIExpY2Vuc2UsIFZl
cnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jaWZuZGVmIEJP
T1NUX0NPTkNFUFRfREVUQUlMX0NPTkNFUFRfREVGX0RXQTIwMDY1MV9IUFAKLSMgZGVmaW5lIEJP
T1NUX0NPTkNFUFRfREVUQUlMX0NPTkNFUFRfREVGX0RXQTIwMDY1MV9IUFAKLSMgaW5jbHVkZSA8
Ym9vc3QvcHJlcHJvY2Vzc29yL3NlcS9mb3JfZWFjaF9pLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3Qv
cHJlcHJvY2Vzc29yL3NlcS9lbnVtLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29y
L2NvbW1hX2lmLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHA+Ci0j
ZW5kaWYgLy8gQk9PU1RfQ09OQ0VQVF9ERVRBSUxfQ09OQ0VQVF9ERUZfRFdBMjAwNjUxX0hQUAot
Ci0vLyBCT09TVF9jb25jZXB0KFNvbWVOYW1lLCAocDEpKHAyKS4uLihwTikpCi0vLwotLy8gRXhw
YW5kcyB0byAidGVtcGxhdGUgPGNsYXNzIHAxLCBjbGFzcyBwMiwgLi4uY2xhc3MgcE4+IHN0cnVj
dCBTb21lTmFtZSIKLS8vCi0vLyBBbHNvIGRlZmluZXMgYW4gZXF1aXZhbGVudCBTb21lTmFtZUNv
bmNlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi0vLyBNYXliZSBpbiB0aGUgbmV4dCBy
ZWxlYXNlIHdlIGNhbiBraWxsIG9mZiB0aGUgIkNvbmNlcHQiIHN1ZmZpeCBmb3IgZ29vZC4KLSMg
ZGVmaW5lIEJPT1NUX2NvbmNlcHQobmFtZSwgcGFyYW1zKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHRlbXBsYXRlIDwgQk9PU1RfUFBfU0VRX0ZPUl9F
QUNIX0koQk9PU1RfQ09OQ0VQVF90eXBlbmFtZSx+LHBhcmFtcykgPiAgICAgICBcCi0gICAgc3Ry
dWN0IG5hbWU7IC8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHRlbXBsYXRl
IDwgQk9PU1RfUFBfU0VRX0ZPUl9FQUNIX0koQk9PU1RfQ09OQ0VQVF90eXBlbmFtZSx+LHBhcmFt
cykgPiAgICAgICBcCi0gICAgc3RydWN0IEJPT1NUX1BQX0NBVChuYW1lLENvbmNlcHQpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIDogbmFtZTwgQk9P
U1RfUFBfU0VRX0VOVU0ocGFyYW1zKSA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHRlbXBsYXRlIDwgQk9PU1RfUFBfU0VR
X0ZPUl9FQUNIX0koQk9PU1RfQ09OQ0VQVF90eXBlbmFtZSx+LHBhcmFtcykgPiAgICAgICBcCi0g
ICAgc3RydWN0IG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgCi0vLyBIZWxwZXIgZm9yIEJPT1NUX2NvbmNlcHQs
IGFib3ZlLgotIyBkZWZpbmUgQk9PU1RfQ09OQ0VQVF90eXBlbmFtZShyLCBpZ25vcmVkLCBpbmRl
eCwgdCkgXAotICAgIEJPT1NUX1BQX0NPTU1BX0lGKGluZGV4KSB0eXBlbmFtZSB0Ci0KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2NvbmNlcHQv
ZGV0YWlsL2NvbmNlcHRfdW5kZWYuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvY29uY2VwdC9kZXRhaWwvY29uY2VwdF91bmRlZi5ocHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDcxM2RiODkxMjNiM2Y3YmNjNzdmYjFhMWM5ZGExMDMyZTBmOWIw
ZjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uY2VwdC9kZXRhaWwvY29uY2Vw
dF91bmRlZi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLS8vIENvcHlyaWdodCBE
YXZpZCBBYnJhaGFtcyAyMDA2LiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QKLS8vIFNvZnR3
YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpCi0jIHVuZGVmIEJPT1NUX2NvbmNlcHRfdHlwZW5hbWUKLSMgdW5kZWYgQk9PU1RfY29uY2Vw
dApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
Y29uY2VwdC9kZXRhaWwvZ2VuZXJhbC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9jb25jZXB0L2RldGFpbC9nZW5lcmFsLmhwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNTI1ZWE2NTZjMmRiZGM3ODRjZjVmNTg3NWI0MTBjMDIyN2ZjMzlkZS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb25jZXB0L2RldGFpbC9nZW5lcmFsLmhw
cAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8vIENvcHlyaWdodCBEYXZpZCBBYnJh
aGFtcyAyMDA2LiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QKLS8vIFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFfMC50
eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jaWZu
ZGVmIEJPT1NUX0NPTkNFUFRfREVUQUlMX0dFTkVSQUxfRFdBMjAwNjQyOV9IUFAKLSMgZGVmaW5l
IEJPT1NUX0NPTkNFUFRfREVUQUlMX0dFTkVSQUxfRFdBMjAwNjQyOV9IUFAKLQotIyBpbmNsdWRl
IDxib29zdC9jb25maWcuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY2F0Lmhw
cD4KLSMgaW5jbHVkZSA8Ym9vc3QvY29uY2VwdC9kZXRhaWwvYmFja3dhcmRfY29tcGF0aWJpbGl0
eS5ocHA+Ci0KLSMgaWZkZWYgQk9PU1RfT0xEX0NPTkNFUFRfU1VQUE9SVAotIyAgaW5jbHVkZSA8
Ym9vc3QvY29uY2VwdC9kZXRhaWwvaGFzX2NvbnN0cmFpbnRzLmhwcD4KLSMgIGluY2x1ZGUgPGJv
b3N0L21wbC9pZi5ocHA+Ci0jIGVuZGlmCi0KLS8vIFRoaXMgaW1wbGVtZW50YXRpb24gd29ya3Mg
b24gQ29tZWF1IGFuZCBHQ0MsIGFsbCB0aGUgd2F5IGJhY2sgdG8KLS8vIDIuOTUKLW5hbWVzcGFj
ZSBib29zdCB7IG5hbWVzcGFjZSBjb25jZXB0cyB7Ci0KLXRlbXBsYXRlIDxjbGFzcyBNb2RlbEZu
Pgotc3RydWN0IHJlcXVpcmVtZW50XzsKLQotbmFtZXNwYWNlIGRldGFpbAotewotICB0ZW1wbGF0
ZSA8dm9pZCgqKSgpPiBzdHJ1Y3QgaW5zdGFudGlhdGUge307Ci19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBNb2RlbD4KLXN0cnVjdCByZXF1aXJlbWVudAotewotICAgIHN0YXRpYyB2b2lkIGZhaWxlZCgp
IHsgKChNb2RlbCopMCktPn5Nb2RlbCgpOyB9Ci19OwotCi1zdHJ1Y3QgZmFpbGVkIHt9OwotCi10
ZW1wbGF0ZSA8Y2xhc3MgTW9kZWw+Ci1zdHJ1Y3QgcmVxdWlyZW1lbnQ8ZmFpbGVkICoqKioqKioq
KioqKiBNb2RlbDo6KioqKioqKioqKioqPgotewotICAgIHN0YXRpYyB2b2lkIGZhaWxlZCgpIHsg
KChNb2RlbCopMCktPn5Nb2RlbCgpOyB9Ci19OwotCi0jIGlmZGVmIEJPT1NUX09MRF9DT05DRVBU
X1NVUFBPUlQKLQotdGVtcGxhdGUgPGNsYXNzIE1vZGVsPgotc3RydWN0IGNvbnN0cmFpbnQKLXsK
LSAgICBzdGF0aWMgdm9pZCBmYWlsZWQoKSB7ICgoTW9kZWwqKTApLT5jb25zdHJhaW50cygpOyB9
Ci19OwotICAKLXRlbXBsYXRlIDxjbGFzcyBNb2RlbD4KLXN0cnVjdCByZXF1aXJlbWVudF88dm9p
ZCgqKShNb2RlbCk+Ci0gIDogbXBsOjppZl88Ci0gICAgICAgIGNvbmNlcHRzOjpub3Rfc2F0aXNm
aWVkPE1vZGVsPgotICAgICAgLCBjb25zdHJhaW50PE1vZGVsPgotICAgICAgLCByZXF1aXJlbWVu
dDxmYWlsZWQgKioqKioqKioqKioqIE1vZGVsOjoqKioqKioqKioqKio+Ci0gICAgPjo6dHlwZQot
e307Ci0gIAotIyBlbHNlCi0KLS8vIEZvciBHQ0MtMi54LCB0aGVzZSBjYW4ndCBoYXZlIGV4YWN0
bHkgdGhlIHNhbWUgbmFtZQotdGVtcGxhdGUgPGNsYXNzIE1vZGVsPgotc3RydWN0IHJlcXVpcmVt
ZW50Xzx2b2lkKCopKE1vZGVsKT4KLSAgICA6IHJlcXVpcmVtZW50PGZhaWxlZCAqKioqKioqKioq
KiogTW9kZWw6OioqKioqKioqKioqKj4KLXt9OwotICAKLSMgZW5kaWYKLQotIyAgZGVmaW5lIEJP
T1NUX0NPTkNFUFRfQVNTRVJUX0ZOKCBNb2RlbEZuUHRyICkgICAgICAgICAgICAgXAotICAgIHR5
cGVkZWYgOjpib29zdDo6Y29uY2VwdHM6OmRldGFpbDo6aW5zdGFudGlhdGU8ICAgICAgICAgIFwK
LSAgICAmOjpib29zdDo6Y29uY2VwdHM6OnJlcXVpcmVtZW50XzxNb2RlbEZuUHRyPjo6ZmFpbGVk
PiAgICBcCi0gICAgICBCT09TVF9QUF9DQVQoYm9vc3RfY29uY2VwdF9jaGVjayxfX0xJTkVfXykg
ICAgICAgICAgICAgXAotICAgICAgQk9PU1RfQVRUUklCVVRFX1VOVVNFRAotCi19fQotCi0jZW5k
aWYgLy8gQk9PU1RfQ09OQ0VQVF9ERVRBSUxfR0VORVJBTF9EV0EyMDA2NDI5X0hQUApkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uY2VwdC9k
ZXRhaWwvaGFzX2NvbnN0cmFpbnRzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L2NvbmNlcHQvZGV0YWlsL2hhc19jb25zdHJhaW50cy5ocHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzMDlkYjNkODhhMDBkZDlmMDM3MjMzNDI4YTVkOGI5YWY4
MmVkNWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uY2VwdC9kZXRhaWwvaGFz
X2NvbnN0cmFpbnRzLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8vIENvcHly
aWdodCBEYXZpZCBBYnJhaGFtcyAyMDA2LiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QKLS8v
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0jaWZuZGVmIEJPT1NUX0NPTkNFUFRfREVUQUlMX0hBU19DT05TVFJBSU5UU19E
V0EyMDA2NDI5X0hQUAotIyBkZWZpbmUgQk9PU1RfQ09OQ0VQVF9ERVRBSUxfSEFTX0NPTlNUUkFJ
TlRTX0RXQTIwMDY0MjlfSFBQCi0KLSMgaW5jbHVkZSA8Ym9vc3QvbXBsL2Jvb2wuaHBwPgotIyBp
bmNsdWRlIDxib29zdC9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L2Nv
bmNlcHQvZGV0YWlsL2JhY2t3YXJkX2NvbXBhdGliaWxpdHkuaHBwPgotCi1uYW1lc3BhY2UgYm9v
c3QgeyBuYW1lc3BhY2UgY29uY2VwdHMgewotCi1uYW1lc3BhY2UgZGV0YWlsCi17IAotCi0vLyBI
ZXJlIHdlIGltcGxlbWVudCB0aGUgbWV0YWZ1bmN0aW9uIHRoYXQgZGV0ZWN0cyB3aGV0aGVyIGEK
LS8vIGNvbnN0cmFpbnRzIG1ldGFmdW5jdGlvbiBleGlzdHMKLSAgdHlwZWRlZiBjaGFyIHllczsK
LSAgdHlwZWRlZiBjaGFyICgmbm8pWzJdOwotCi0gIHRlbXBsYXRlIDxjbGFzcyBNb2RlbCwgdm9p
ZCAoTW9kZWw6OiopKCk+Ci0gIHN0cnVjdCB3cmFwX2NvbnN0cmFpbnRzIHt9OwotICAgIAotI2lm
IEJPT1NUX1dPUktBUk9VTkQoX19TVU5QUk9fQ0MsIDw9IDB4NTgwKSB8fCBkZWZpbmVkKF9fQ1VE
QUNDX18pCi0gIC8vIFdvcmsgYXJvdW5kIHRoZSBmb2xsb3dpbmcgYm9ndXMgZXJyb3IgaW4gU3Vu
IFN0dWRpbyAxMSwgYnkKLSAgLy8gdHVybmluZyBvZmYgdGhlIGhhc19jb25zdHJhaW50cyBmdW5j
dGlvbiBlbnRpcmVseToKLSAgLy8gICAgRXJyb3I6IGNvbXBsZXggZXhwcmVzc2lvbiBub3QgYWxs
b3dlZCBpbiBkZXBlbmRlbnQgdGVtcGxhdGUKLSAgLy8gICAgYXJndW1lbnQgZXhwcmVzc2lvbgot
ICBpbmxpbmUgbm8gaGFzX2NvbnN0cmFpbnRzXyguLi4pOwotI2Vsc2UKLSAgdGVtcGxhdGUgPGNs
YXNzIE1vZGVsPgotICBpbmxpbmUgeWVzIGhhc19jb25zdHJhaW50c18oTW9kZWwqLCB3cmFwX2Nv
bnN0cmFpbnRzPE1vZGVsLCZNb2RlbDo6Y29uc3RyYWludHM+KiA9IDApOwotICBpbmxpbmUgbm8g
aGFzX2NvbnN0cmFpbnRzXyguLi4pOwotI2VuZGlmCi19Ci0KLS8vIFRoaXMgd291bGQgYmUgY2Fs
bGVkICJkZXRhaWw6Omhhc19jb25zdHJhaW50cywiIGJ1dCBpdCBoYXMgYSBzdHJvbmcKLS8vIHRl
bmRlbmN5IHRvIHNob3cgdXAgaW4gZXJyb3IgbWVzc2FnZXMuCi10ZW1wbGF0ZSA8Y2xhc3MgTW9k
ZWw+Ci1zdHJ1Y3Qgbm90X3NhdGlzZmllZAotewotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVCgK
LSAgICAgICAgYm9vbAotICAgICAgLCB2YWx1ZSA9IHNpemVvZiggZGV0YWlsOjpoYXNfY29uc3Ry
YWludHNfKChNb2RlbCopMCkgKSA9PSBzaXplb2YoZGV0YWlsOjp5ZXMpICk7Ci0gICAgdHlwZWRl
ZiBtcGw6OmJvb2xfPHZhbHVlPiB0eXBlOwotfTsKLQotfX0gLy8gbmFtZXNwYWNlIGJvb3N0Ojpj
b25jZXB0czo6ZGV0YWlsCi0KLSNlbmRpZiAvLyBCT09TVF9DT05DRVBUX0RFVEFJTF9IQVNfQ09O
U1RSQUlOVFNfRFdBMjAwNjQyOV9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2NvbmNlcHQvdXNhZ2UuaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uY2VwdC91c2FnZS5ocHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGU3MzM3MGZiMzdlNWVlOTJkOTUzMzc1MjEyNmQ2Yjc4YTU3MWM5
YzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uY2VwdC91c2FnZS5ocHAKKysr
IC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgRGF2aWQgQWJyYWhhbXMg
MjAwNi4gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0Ci0vLyBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLS8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9y
IGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotI2lmbmRlZiBC
T09TVF9DT05DRVBUX1VTQUdFX0RXQTIwMDY5MTlfSFBQCi0jIGRlZmluZSBCT09TVF9DT05DRVBU
X1VTQUdFX0RXQTIwMDY5MTlfSFBQCi0KLSMgaW5jbHVkZSA8Ym9vc3QvY29uY2VwdC9hc3NlcnQu
aHBwPgotIyBpbmNsdWRlIDxib29zdC9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0jIGluY2x1ZGUg
PGJvb3N0L2NvbmNlcHQvZGV0YWlsL2JhY2t3YXJkX2NvbXBhdGliaWxpdHkuaHBwPgotCi1uYW1l
c3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgY29uY2VwdHMgeyAKLQotdGVtcGxhdGUgPGNsYXNzIE1v
ZGVsPgotc3RydWN0IHVzYWdlX3JlcXVpcmVtZW50cwotewotICAgIH51c2FnZV9yZXF1aXJlbWVu
dHMoKSB7ICgoTW9kZWwqKTApLT5+TW9kZWwoKTsgfQotfTsKLQotIyAgaWYgQk9PU1RfV09SS0FS
T1VORChfX0dOVUNfXywgPD0gMykKLQotIyAgIGRlZmluZSBCT09TVF9DT05DRVBUX1VTQUdFKG1v
ZGVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIG1vZGVsKCk7
IC8qIGF0IGxlYXN0IDIuOTYgYW5kIDMuNC4zIGJvdGggbmVlZCB0aGlzIDooICovICAgICAgICAg
ICBcCi0gICAgICBCT09TVF9DT05DRVBUX0FTU0VSVCgoYm9vc3Q6OmNvbmNlcHRzOjp1c2FnZV9y
ZXF1aXJlbWVudHM8bW9kZWw+KSk7IFwKLSAgICAgIH5tb2RlbCgpCi0KLSMgIGVsc2UKLQotIyAg
IGRlZmluZSBCT09TVF9DT05DRVBUX1VTQUdFKG1vZGVsKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgIEJPT1NUX0NPTkNFUFRfQVNTRVJUKChib29zdDo6Y29uY2Vw
dHM6OnVzYWdlX3JlcXVpcmVtZW50czxtb2RlbD4pKTsgXAotICAgICAgfm1vZGVsKCkKLQotIyAg
ZW5kaWYKLQotfX0gLy8gbmFtZXNwYWNlIGJvb3N0Ojpjb25jZXB0cwotCi0jZW5kaWYgLy8gQk9P
U1RfQ09OQ0VQVF9VU0FHRV9EV0EyMDA2OTE5X0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uY2VwdF9jaGVjay5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb25jZXB0X2NoZWNrLmhwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVmMTE4YjY0MzhhNDQzMzdmZjFjYjRkNjI4YWY0
MTc1NDFjMDlkZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb25jZXB0X2NoZWNr
LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwODIgKzAsMCBAQAotLy8KLS8vIChDKSBDb3B5cmln
aHQgSmVyZW15IFNpZWsgMjAwMC4KLS8vIENvcHlyaWdodCAyMDAyIFRoZSBUcnVzdGVlcyBvZiBJ
bmRpYW5hIFVuaXZlcnNpdHkuCi0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNv
ZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0vLyBhY2NvbXBhbnlpbmcgZmlsZSBM
SUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotLy8KLS8vIFJldmlzaW9uIEhpc3Rvcnk6Ci0vLyAgIDA1IE1heSAgIDIwMDE6
IFdvcmthcm91bmRzIGZvciBIUCBhQ0MgZnJvbSBUaG9tYXMgTWF0ZWxpY2guIChKZXJlbXkgU2ll
aykKLS8vICAgMDIgQXByaWwgMjAwMTogUmVtb3ZlZCBsaW1pdHMgaGVhZGVyIGFsdG9nZXRoZXIu
IChKZXJlbXkgU2llaykKLS8vICAgMDEgQXByaWwgMjAwMTogTW9kaWZpZWQgdG8gdXNlIG5ldyA8
Ym9vc3QvbGltaXRzLmhwcD4gaGVhZGVyLiAoSk1hZGRvY2spCi0vLwotCi0vLyBTZWUgaHR0cDov
L3d3dy5ib29zdC5vcmcvbGlicy9jb25jZXB0X2NoZWNrIGZvciBkb2N1bWVudGF0aW9uLgotCi0j
aWZuZGVmIEJPT1NUX0NPTkNFUFRfQ0hFQ0tTX0hQUAotIyBkZWZpbmUgQk9PU1RfQ09OQ0VQVF9D
SEVDS1NfSFBQCi0KLSMgaW5jbHVkZSA8Ym9vc3QvY29uY2VwdC9hc3NlcnQuaHBwPgotCi0jIGlu
Y2x1ZGUgPGl0ZXJhdG9yPgotIyBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9jb252ZXJzaW9u
X3RyYWl0cy5ocHA+Ci0jIGluY2x1ZGUgPHV0aWxpdHk+Ci0jIGluY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2lzX3NhbWUuaHBwPgotIyBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc192b2lk
LmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvbXBsL2Fzc2VydC5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0
L21wbC9ib29sLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL3dvcmthcm91bmQuaHBwPgot
Ci0jIGluY2x1ZGUgPGJvb3N0L2NvbmNlcHQvdXNhZ2UuaHBwPgotIyBpbmNsdWRlIDxib29zdC9j
b25jZXB0L2RldGFpbC9jb25jZXB0X2RlZi5ocHA+Ci0KLSNpZiAoZGVmaW5lZCBfTVNDX1ZFUikK
LSMgcHJhZ21hIHdhcm5pbmcoIHB1c2ggKQotIyBwcmFnbWEgd2FybmluZyggZGlzYWJsZSA6IDQ1
MTAgKSAvLyBkZWZhdWx0IGNvbnN0cnVjdG9yIGNvdWxkIG5vdCBiZSBnZW5lcmF0ZWQKLSMgcHJh
Z21hIHdhcm5pbmcoIGRpc2FibGUgOiA0NjEwICkgLy8gb2JqZWN0ICdjbGFzcycgY2FuIG5ldmVy
IGJlIGluc3RhbnRpYXRlZCAtIHVzZXItZGVmaW5lZCBjb25zdHJ1Y3RvciByZXF1aXJlZAotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBib29zdAotewotCi0gIC8vCi0gIC8vIEJhY2t3YXJkIGNvbXBhdGli
aWxpdHkKLSAgLy8KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgTW9kZWw+Ci0gIGlubGluZSB2b2lkIGZ1
bmN0aW9uX3JlcXVpcmVzKE1vZGVsKiA9IDApCi0gIHsKLSAgICAgIEJPT1NUX0NPTkNFUFRfQVNT
RVJUKChNb2RlbCkpOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZCBpZ25v
cmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoVCBjb25zdCYpIHt9Ci0KLSMgIGRlZmluZSBCT09T
VF9DTEFTU19SRVFVSVJFKHR5cGVfdmFyLCBucywgY29uY2VwdCkgICAgXAotICAgIEJPT1NUX0NP
TkNFUFRfQVNTRVJUKChuczo6Y29uY2VwdDx0eXBlX3Zhcj4pKQotCi0jICBkZWZpbmUgQk9PU1Rf
Q0xBU1NfUkVRVUlSRTIodHlwZV92YXIxLCB0eXBlX3ZhcjIsIG5zLCBjb25jZXB0KSAgIFwKLSAg
ICBCT09TVF9DT05DRVBUX0FTU0VSVCgobnM6OmNvbmNlcHQ8dHlwZV92YXIxLHR5cGVfdmFyMj4p
KQotCi0jICBkZWZpbmUgQk9PU1RfQ0xBU1NfUkVRVUlSRTModHYxLCB0djIsIHR2MywgbnMsIGNv
bmNlcHQpICBcCi0gICAgQk9PU1RfQ09OQ0VQVF9BU1NFUlQoKG5zOjpjb25jZXB0PHR2MSx0djIs
dHYzPikpCi0KLSMgIGRlZmluZSBCT09TVF9DTEFTU19SRVFVSVJFNCh0djEsIHR2MiwgdHYzLCB0
djQsIG5zLCBjb25jZXB0KSBcCi0gICAgQk9PU1RfQ09OQ0VQVF9BU1NFUlQoKG5zOjpjb25jZXB0
PHR2MSx0djIsdHYzLHR2ND4pKQotCi0KLSAgLy8KLSAgLy8gQmVnaW4gY29uY2VwdCBkZWZpbml0
aW9ucwotICAvLwotICBCT09TVF9jb25jZXB0KEludGVnZXIsIChUKSkKLSAgewotICAgICAgQk9P
U1RfQ09OQ0VQVF9VU0FHRShJbnRlZ2VyKQotICAgICAgICB7Ci0gICAgICAgICAgICB4LmVycm9y
X3R5cGVfbXVzdF9iZV9hbl9pbnRlZ2VyX3R5cGUoKTsKLSAgICAgICAgfQotICAgcHJpdmF0ZToK
LSAgICAgIFQgeDsKLSAgfTsKLQotICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSW50ZWdlcjxjaGFyPiB7
fTsKLSAgdGVtcGxhdGUgPD4gc3RydWN0IEludGVnZXI8c2lnbmVkIGNoYXI+IHt9OwotICB0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgSW50ZWdlcjx1bnNpZ25lZCBjaGFyPiB7fTsKLSAgdGVtcGxhdGUgPD4g
c3RydWN0IEludGVnZXI8c2hvcnQ+IHt9OwotICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSW50ZWdlcjx1
bnNpZ25lZCBzaG9ydD4ge307Ci0gIHRlbXBsYXRlIDw+IHN0cnVjdCBJbnRlZ2VyPGludD4ge307
Ci0gIHRlbXBsYXRlIDw+IHN0cnVjdCBJbnRlZ2VyPHVuc2lnbmVkIGludD4ge307Ci0gIHRlbXBs
YXRlIDw+IHN0cnVjdCBJbnRlZ2VyPGxvbmc+IHt9OwotICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSW50
ZWdlcjx1bnNpZ25lZCBsb25nPiB7fTsKLSMgaWYgZGVmaW5lZChCT09TVF9IQVNfTE9OR19MT05H
KQotICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSW50ZWdlcjwgOjpib29zdDo6bG9uZ19sb25nX3R5cGU+
IHt9OwotICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSW50ZWdlcjwgOjpib29zdDo6dWxvbmdfbG9uZ190
eXBlPiB7fTsKLSMgZWxpZiBkZWZpbmVkKEJPT1NUX0hBU19NU19JTlQ2NCkKLSAgdGVtcGxhdGUg
PD4gc3RydWN0IEludGVnZXI8X19pbnQ2ND4ge307Ci0gIHRlbXBsYXRlIDw+IHN0cnVjdCBJbnRl
Z2VyPHVuc2lnbmVkIF9faW50NjQ+IHt9OwotIyBlbmRpZgotCi0gIEJPT1NUX2NvbmNlcHQoU2ln
bmVkSW50ZWdlciwoVCkpIHsKLSAgICBCT09TVF9DT05DRVBUX1VTQUdFKFNpZ25lZEludGVnZXIp
IHsKLSAgICAgIHguZXJyb3JfdHlwZV9tdXN0X2JlX2Ffc2lnbmVkX2ludGVnZXJfdHlwZSgpOwot
ICAgIH0KLSAgIHByaXZhdGU6Ci0gICAgVCB4OwotICB9OwotICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
U2lnbmVkSW50ZWdlcjxzaWduZWQgY2hhcj4geyB9OwotICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgU2ln
bmVkSW50ZWdlcjxzaG9ydD4ge307Ci0gIHRlbXBsYXRlIDw+IHN0cnVjdCBTaWduZWRJbnRlZ2Vy
PGludD4ge307Ci0gIHRlbXBsYXRlIDw+IHN0cnVjdCBTaWduZWRJbnRlZ2VyPGxvbmc+IHt9Owot
IyBpZiBkZWZpbmVkKEJPT1NUX0hBU19MT05HX0xPTkcpCi0gIHRlbXBsYXRlIDw+IHN0cnVjdCBT
aWduZWRJbnRlZ2VyPCA6OmJvb3N0Ojpsb25nX2xvbmdfdHlwZT4ge307Ci0jIGVsaWYgZGVmaW5l
ZChCT09TVF9IQVNfTVNfSU5UNjQpCi0gIHRlbXBsYXRlIDw+IHN0cnVjdCBTaWduZWRJbnRlZ2Vy
PF9faW50NjQ+IHt9OwotIyBlbmRpZgotCi0gIEJPT1NUX2NvbmNlcHQoVW5zaWduZWRJbnRlZ2Vy
LChUKSkgewotICAgIEJPT1NUX0NPTkNFUFRfVVNBR0UoVW5zaWduZWRJbnRlZ2VyKSB7Ci0gICAg
ICB4LmVycm9yX3R5cGVfbXVzdF9iZV9hbl91bnNpZ25lZF9pbnRlZ2VyX3R5cGUoKTsKLSAgICB9
Ci0gICBwcml2YXRlOgotICAgIFQgeDsKLSAgfTsKLQotICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVW5z
aWduZWRJbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHt9OwotICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVW5z
aWduZWRJbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7fTsKLSAgdGVtcGxhdGUgPD4gc3RydWN0IFVu
c2lnbmVkSW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHt9OwotICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVW5z
aWduZWRJbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHt9OwotIyBpZiBkZWZpbmVkKEJPT1NUX0hBU19M
T05HX0xPTkcpCi0gIHRlbXBsYXRlIDw+IHN0cnVjdCBVbnNpZ25lZEludGVnZXI8IDo6Ym9vc3Q6
OnVsb25nX2xvbmdfdHlwZT4ge307Ci0jIGVsaWYgZGVmaW5lZChCT09TVF9IQVNfTVNfSU5UNjQp
Ci0gIHRlbXBsYXRlIDw+IHN0cnVjdCBVbnNpZ25lZEludGVnZXI8dW5zaWduZWQgX19pbnQ2ND4g
e307Ci0jIGVuZGlmCi0KLSAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQmFzaWMgQ29uY2Vw
dHMKLQotICBCT09TVF9jb25jZXB0KERlZmF1bHRDb25zdHJ1Y3RpYmxlLChUVCkpCi0gIHsKLSAg
ICBCT09TVF9DT05DRVBUX1VTQUdFKERlZmF1bHRDb25zdHJ1Y3RpYmxlKSB7Ci0gICAgICBUVCBh
OyAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgZGVmYXVsdCBjb25zdHJ1Y3RvcgotICAgICAgaWdu
b3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKGEpOwotICAgIH0KLSAgfTsKLQotICBCT09TVF9j
b25jZXB0KEFzc2lnbmFibGUsKFRUKSkKLSAgewotICAgIEJPT1NUX0NPTkNFUFRfVVNBR0UoQXNz
aWduYWJsZSkgewotI2lmICFkZWZpbmVkKF9JVEVSQVRPUl8pIC8vIGJhY2tfaW5zZXJ0X2l0ZXJh
dG9yIGJyb2tlbiBmb3IgVkMrKyBTVEwKLSAgICAgIGEgPSBiOyAgICAgICAgICAgICAvLyByZXF1
aXJlIGFzc2lnbm1lbnQgb3BlcmF0b3IKLSNlbmRpZgotICAgICAgY29uc3RfY29uc3RyYWludHMo
Yik7Ci0gICAgfQotICAgcHJpdmF0ZToKLSAgICB2b2lkIGNvbnN0X2NvbnN0cmFpbnRzKGNvbnN0
IFRUJiB4KSB7Ci0jaWYgIWRlZmluZWQoX0lURVJBVE9SXykgLy8gYmFja19pbnNlcnRfaXRlcmF0
b3IgYnJva2VuIGZvciBWQysrIFNUTAotICAgICAgYSA9IHg7ICAgICAgICAgICAgICAvLyBjb25z
dCByZXF1aXJlZCBmb3IgYXJndW1lbnQgdG8gYXNzaWdubWVudAotI2Vsc2UKLSAgICAgIGlnbm9y
ZV91bnVzZWRfdmFyaWFibGVfd2FybmluZyh4KTsKLSNlbmRpZgotICAgIH0KLSAgIHByaXZhdGU6
Ci0gICAgVFQgYTsKLSAgICBUVCBiOwotICB9OwotCi0KLSAgQk9PU1RfY29uY2VwdChDb3B5Q29u
c3RydWN0aWJsZSwoVFQpKQotICB7Ci0gICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShDb3B5Q29uc3Ry
dWN0aWJsZSkgewotICAgICAgVFQgYShiKTsgICAgICAgICAgICAvLyByZXF1aXJlIGNvcHkgY29u
c3RydWN0b3IKLSAgICAgIFRUKiBwdHIgPSAmYTsgICAgICAgLy8gcmVxdWlyZSBhZGRyZXNzIG9m
IG9wZXJhdG9yCi0gICAgICBjb25zdF9jb25zdHJhaW50cyhhKTsKLSAgICAgIGlnbm9yZV91bnVz
ZWRfdmFyaWFibGVfd2FybmluZyhwdHIpOwotICAgIH0KLSAgIHByaXZhdGU6Ci0gICAgdm9pZCBj
b25zdF9jb25zdHJhaW50cyhjb25zdCBUVCYgYSkgewotICAgICAgVFQgYyhhKTsgICAgICAgICAg
ICAvLyByZXF1aXJlIGNvbnN0IGNvcHkgY29uc3RydWN0b3IKLSAgICAgIGNvbnN0IFRUKiBwdHIg
PSAmYTsgLy8gcmVxdWlyZSBjb25zdCBhZGRyZXNzIG9mIG9wZXJhdG9yCi0gICAgICBpZ25vcmVf
dW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoYyk7Ci0gICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxl
X3dhcm5pbmcocHRyKTsKLSAgICB9Ci0gICAgVFQgYjsKLSAgfTsKLQotICAvLyBUaGUgU0dJIFNU
TCB2ZXJzaW9uIG9mIEFzc2lnbmFibGUgcmVxdWlyZXMgY29weSBjb25zdHJ1Y3RvciBhbmQgb3Bl
cmF0b3I9Ci0gIEJPT1NUX2NvbmNlcHQoU0dJQXNzaWduYWJsZSwoVFQpKQotICB7Ci0gICAgQk9P
U1RfQ09OQ0VQVF9VU0FHRShTR0lBc3NpZ25hYmxlKSB7Ci0gICAgICBUVCBjKGEpOwotI2lmICFk
ZWZpbmVkKF9JVEVSQVRPUl8pIC8vIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIGJyb2tlbiBmb3IgVkMr
KyBTVEwKLSAgICAgIGEgPSBiOyAgICAgICAgICAgICAgLy8gcmVxdWlyZSBhc3NpZ25tZW50IG9w
ZXJhdG9yCi0jZW5kaWYKLSAgICAgIGNvbnN0X2NvbnN0cmFpbnRzKGIpOwotICAgICAgaWdub3Jl
X3VudXNlZF92YXJpYWJsZV93YXJuaW5nKGMpOwotICAgIH0KLSAgIHByaXZhdGU6Ci0gICAgdm9p
ZCBjb25zdF9jb25zdHJhaW50cyhjb25zdCBUVCYgeCkgewotICAgICAgVFQgYyh4KTsKLSNpZiAh
ZGVmaW5lZChfSVRFUkFUT1JfKSAvLyBiYWNrX2luc2VydF9pdGVyYXRvciBicm9rZW4gZm9yIFZD
KysgU1RMCi0gICAgICBhID0geDsgICAgICAgICAgICAgIC8vIGNvbnN0IHJlcXVpcmVkIGZvciBh
cmd1bWVudCB0byBhc3NpZ25tZW50Ci0jZW5kaWYKLSAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFi
bGVfd2FybmluZyhjKTsKLSAgICB9Ci0gICAgVFQgYTsKLSAgICBUVCBiOwotICB9OwotCi0gIEJP
T1NUX2NvbmNlcHQoQ29udmVydGlibGUsKFgpKFkpKQotICB7Ci0gICAgQk9PU1RfQ09OQ0VQVF9V
U0FHRShDb252ZXJ0aWJsZSkgewotICAgICAgWSB5ID0geDsKLSAgICAgIGlnbm9yZV91bnVzZWRf
dmFyaWFibGVfd2FybmluZyh5KTsKLSAgICB9Ci0gICBwcml2YXRlOgotICAgIFggeDsKLSAgfTsK
LQotICAvLyBUaGUgQysrIHN0YW5kYXJkIHJlcXVpcmVtZW50cyBmb3IgbWFueSBjb25jZXB0cyB0
YWxrIGFib3V0IHJldHVybgotICAvLyB0eXBlcyB0aGF0IG11c3QgYmUgImNvbnZlcnRpYmxlIHRv
IGJvb2wiLiAgVGhlIHByb2JsZW0gd2l0aCB0aGlzCi0gIC8vIHJlcXVpcmVtZW50IGlzIHRoYXQg
aXQgbGVhdmVzIHRoZSBkb29yIG9wZW4gZm9yIGV2aWwgcHJveGllcyB0aGF0Ci0gIC8vIGRlZmlu
ZSB0aGluZ3MgbGlrZSBvcGVyYXRvcnx8IHdpdGggc3RyYW5nZSByZXR1cm4gdHlwZXMuICBUd28K
LSAgLy8gcG9zc2libGUgc29sdXRpb25zIGFyZToKLSAgLy8gMSkgcmVxdWlyZSB0aGUgcmV0dXJu
IHR5cGUgdG8gYmUgZXhhY3RseSBib29sCi0gIC8vIDIpIHN0YXkgd2l0aCBjb252ZXJ0aWJsZSB0
byBib29sLCBhbmQgYWxzbwotICAvLyAgICBzcGVjaWZ5IHN0dWZmIGFib3V0IGFsbCB0aGUgbG9n
aWNhbCBvcGVyYXRvcnMuCi0gIC8vIEZvciBub3cgd2UganVzdCB0ZXN0IGZvciBjb252ZXJ0aWJs
ZSB0byBib29sLgotICB0ZW1wbGF0ZSA8Y2xhc3MgVFQ+Ci0gIHZvaWQgcmVxdWlyZV9ib29sZWFu
X2V4cHIoY29uc3QgVFQmIHQpIHsKLSAgICBib29sIHggPSB0OwotICAgIGlnbm9yZV91bnVzZWRf
dmFyaWFibGVfd2FybmluZyh4KTsKLSAgfQotCi0gIEJPT1NUX2NvbmNlcHQoRXF1YWxpdHlDb21w
YXJhYmxlLChUVCkpCi0gIHsKLSAgICBCT09TVF9DT05DRVBUX1VTQUdFKEVxdWFsaXR5Q29tcGFy
YWJsZSkgewotICAgICAgcmVxdWlyZV9ib29sZWFuX2V4cHIoYSA9PSBiKTsKLSAgICAgIHJlcXVp
cmVfYm9vbGVhbl9leHByKGEgIT0gYik7Ci0gICAgfQotICAgcHJpdmF0ZToKLSAgICBUVCBhLCBi
OwotICB9OwotCi0gIEJPT1NUX2NvbmNlcHQoTGVzc1RoYW5Db21wYXJhYmxlLChUVCkpCi0gIHsK
LSAgICBCT09TVF9DT05DRVBUX1VTQUdFKExlc3NUaGFuQ29tcGFyYWJsZSkgewotICAgICAgcmVx
dWlyZV9ib29sZWFuX2V4cHIoYSA8IGIpOwotICAgIH0KLSAgIHByaXZhdGU6Ci0gICAgVFQgYSwg
YjsKLSAgfTsKLQotICAvLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gU0dJIFNUTCdzIExlc3NUaGFu
Q29tcGFyYWJsZS4KLSAgQk9PU1RfY29uY2VwdChDb21wYXJhYmxlLChUVCkpCi0gIHsKLSAgICBC
T09TVF9DT05DRVBUX1VTQUdFKENvbXBhcmFibGUpIHsKLSAgICAgIHJlcXVpcmVfYm9vbGVhbl9l
eHByKGEgPCBiKTsKLSAgICAgIHJlcXVpcmVfYm9vbGVhbl9leHByKGEgPiBiKTsKLSAgICAgIHJl
cXVpcmVfYm9vbGVhbl9leHByKGEgPD0gYik7Ci0gICAgICByZXF1aXJlX2Jvb2xlYW5fZXhwcihh
ID49IGIpOwotICAgIH0KLSAgIHByaXZhdGU6Ci0gICAgVFQgYSwgYjsKLSAgfTsKLQotI2RlZmlu
ZSBCT09TVF9ERUZJTkVfQklOQVJZX1BSRURJQ0FURV9PUF9DT05TVFJBSU5UKE9QLE5BTUUpICAg
IFwKLSAgQk9PU1RfY29uY2VwdChOQU1FLCAoRmlyc3QpKFNlY29uZCkpICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShOQU1FKSB7
ICh2b2lkKWNvbnN0cmFpbnRzXygpOyB9ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
cHJpdmF0ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIGJvb2wgY29uc3RyYWludHNfKCkgeyByZXR1cm4gYSBPUCBiOyB9ICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICBGaXJzdCBhOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgU2Vjb25kIGI7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotI2RlZmluZSBCT09TVF9E
RUZJTkVfQklOQVJZX09QRVJBVE9SX0NPTlNUUkFJTlQoT1AsTkFNRSkgICAgXAotICBCT09TVF9j
b25jZXB0KE5BTUUsIChSZXQpKEZpcnN0KShTZWNvbmQpKSAgICAgICAgICAgICAgICAgXAotICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShOQU1FKSB7ICh2b2lkKWNvbnN0cmFpbnRzXygp
OyB9ICAgICAgICAgICAgICAgICAgICAgXAotICBwcml2YXRlOiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgUmV0IGNvbnN0cmFpbnRzXygp
IHsgcmV0dXJuIGEgT1AgYjsgfSAgICAgICAgICAgICAgICAgXAotICAgICAgRmlyc3QgYTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgU2Vjb25k
IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0K
LSAgQk9PU1RfREVGSU5FX0JJTkFSWV9QUkVESUNBVEVfT1BfQ09OU1RSQUlOVCg9PSwgRXF1YWxP
cCk7Ci0gIEJPT1NUX0RFRklORV9CSU5BUllfUFJFRElDQVRFX09QX0NPTlNUUkFJTlQoIT0sIE5v
dEVxdWFsT3ApOwotICBCT09TVF9ERUZJTkVfQklOQVJZX1BSRURJQ0FURV9PUF9DT05TVFJBSU5U
KDwsIExlc3NUaGFuT3ApOwotICBCT09TVF9ERUZJTkVfQklOQVJZX1BSRURJQ0FURV9PUF9DT05T
VFJBSU5UKDw9LCBMZXNzRXF1YWxPcCk7Ci0gIEJPT1NUX0RFRklORV9CSU5BUllfUFJFRElDQVRF
X09QX0NPTlNUUkFJTlQoPiwgR3JlYXRlclRoYW5PcCk7Ci0gIEJPT1NUX0RFRklORV9CSU5BUllf
UFJFRElDQVRFX09QX0NPTlNUUkFJTlQoPj0sIEdyZWF0ZXJFcXVhbE9wKTsKLQotICBCT09TVF9E
RUZJTkVfQklOQVJZX09QRVJBVE9SX0NPTlNUUkFJTlQoKywgUGx1c09wKTsKLSAgQk9PU1RfREVG
SU5FX0JJTkFSWV9PUEVSQVRPUl9DT05TVFJBSU5UKCosIFRpbWVzT3ApOwotICBCT09TVF9ERUZJ
TkVfQklOQVJZX09QRVJBVE9SX0NPTlNUUkFJTlQoLywgRGl2aWRlT3ApOwotICBCT09TVF9ERUZJ
TkVfQklOQVJZX09QRVJBVE9SX0NPTlNUUkFJTlQoLSwgU3VidHJhY3RPcCk7Ci0gIEJPT1NUX0RF
RklORV9CSU5BUllfT1BFUkFUT1JfQ09OU1RSQUlOVCglLCBNb2RPcCk7Ci0KLSAgLy89PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLSAgLy8gRnVuY3Rpb24gT2JqZWN0IENvbmNlcHRzCi0KLSAgQk9PU1RfY29u
Y2VwdChHZW5lcmF0b3IsKEZ1bmMpKFJldHVybikpCi0gIHsKLSAgICAgIEJPT1NUX0NPTkNFUFRf
VVNBR0UoR2VuZXJhdG9yKSB7IHRlc3QoaXNfdm9pZDxSZXR1cm4+KCkpOyB9Ci0KLSAgIHByaXZh
dGU6Ci0gICAgICB2b2lkIHRlc3QoYm9vc3Q6Om1wbDo6ZmFsc2VfKQotICAgICAgewotICAgICAg
ICAgIC8vIERvIHdlIHJlYWxseSB3YW50IGEgcmVmZXJlbmNlIGhlcmU/Ci0gICAgICAgICAgY29u
c3QgUmV0dXJuJiByID0gZigpOwotICAgICAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2Fy
bmluZyhyKTsKLSAgICAgIH0KLQotICAgICAgdm9pZCB0ZXN0KGJvb3N0OjptcGw6OnRydWVfKQot
ICAgICAgewotICAgICAgICAgIGYoKTsKLSAgICAgIH0KLQotICAgICAgRnVuYyBmOwotICB9Owot
Ci0gIEJPT1NUX2NvbmNlcHQoVW5hcnlGdW5jdGlvbiwoRnVuYykoUmV0dXJuKShBcmcpKQotICB7
Ci0gICAgICBCT09TVF9DT05DRVBUX1VTQUdFKFVuYXJ5RnVuY3Rpb24pIHsgdGVzdChpc192b2lk
PFJldHVybj4oKSk7IH0KLQotICAgcHJpdmF0ZToKLSAgICAgIHZvaWQgdGVzdChib29zdDo6bXBs
OjpmYWxzZV8pCi0gICAgICB7Ci0gICAgICAgICAgZihhcmcpOyAgICAgICAgICAgICAgIC8vICJw
cmltaW5nIHRoZSBwdW1wIiB0aGlzIHdheSBrZWVwcyBtc3ZjNiBoYXBweSAoSUNFKQotICAgICAg
ICAgIFJldHVybiByID0gZihhcmcpOwotICAgICAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVf
d2FybmluZyhyKTsKLSAgICAgIH0KLQotICAgICAgdm9pZCB0ZXN0KGJvb3N0OjptcGw6OnRydWVf
KQotICAgICAgewotICAgICAgICAgIGYoYXJnKTsKLSAgICAgIH0KLQotI2lmIChCT09TVF9XT1JL
QVJPVU5EKF9fR05VQ19fLCBCT09TVF9URVNURURfQVQoNCkgXAotICAgICAgICAgICAgICAgICAg
ICAgICYmIEJPT1NUX1dPUktBUk9VTkQoX19HTlVDX18sID4gMykpKQotICAgICAgLy8gRGVjbGFy
ZSBhIGR1bW15IGNvbnN0cnVrdG9yIHRvIG1ha2UgZ2NjIGhhcHB5LgotICAgICAgLy8gSXQgc2Vl
bXMgdGhlIGNvbXBpbGVyIGNhbiBub3QgZ2VuZXJhdGUgYSBzZW5zaWJsZSBjb25zdHJ1Y3RvciB3
aGVuIHRoaXMgaXMgaW5zdGFudGlhdGVkIHdpdGggYSByZWZlbmNlIHR5cGUuCi0gICAgICAvLyAo
d2FybmluZzogbm9uLXN0YXRpYyByZWZlcmVuY2UgImNvbnN0IGRvdWJsZSYgYm9vc3Q6OlVuYXJ5
RnVuY3Rpb248WW91ckNsYXNzSGVyZT46OmFyZyIKLSAgICAgIC8vIGluIGNsYXNzIHdpdGhvdXQg
YSBjb25zdHJ1Y3RvciBbLVd1bmluaXRpYWxpemVkXSkKLSAgICAgIFVuYXJ5RnVuY3Rpb24oKTsK
LSNlbmRpZgotCi0gICAgICBGdW5jIGY7Ci0gICAgICBBcmcgYXJnOwotICB9OwotCi0gIEJPT1NU
X2NvbmNlcHQoQmluYXJ5RnVuY3Rpb24sKEZ1bmMpKFJldHVybikoRmlyc3QpKFNlY29uZCkpCi0g
IHsKLSAgICAgIEJPT1NUX0NPTkNFUFRfVVNBR0UoQmluYXJ5RnVuY3Rpb24pIHsgdGVzdChpc192
b2lkPFJldHVybj4oKSk7IH0KLSAgIHByaXZhdGU6Ci0gICAgICB2b2lkIHRlc3QoYm9vc3Q6Om1w
bDo6ZmFsc2VfKQotICAgICAgewotICAgICAgICAgIGYoZmlyc3Qsc2Vjb25kKTsKLSAgICAgICAg
ICBSZXR1cm4gciA9IGYoZmlyc3QsIHNlY29uZCk7IC8vIHJlcXVpcmUgb3BlcmF0b3IoKQotICAg
ICAgICAgICh2b2lkKXI7Ci0gICAgICB9Ci0KLSAgICAgIHZvaWQgdGVzdChib29zdDo6bXBsOjp0
cnVlXykKLSAgICAgIHsKLSAgICAgICAgICBmKGZpcnN0LHNlY29uZCk7Ci0gICAgICB9Ci0KLSNp
ZiAoQk9PU1RfV09SS0FST1VORChfX0dOVUNfXywgQk9PU1RfVEVTVEVEX0FUKDQpIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAmJiBCT09TVF9XT1JLQVJPVU5EKF9fR05VQ19fLCA+IDMpKSkKLSAg
ICAgIC8vIERlY2xhcmUgYSBkdW1teSBjb25zdHJ1Y3RvciB0byBtYWtlIGdjYyBoYXBweS4KLSAg
ICAgIC8vIEl0IHNlZW1zIHRoZSBjb21waWxlciBjYW4gbm90IGdlbmVyYXRlIGEgc2Vuc2libGUg
Y29uc3RydWN0b3Igd2hlbiB0aGlzIGlzIGluc3RhbnRpYXRlZCB3aXRoIGEgcmVmZW5jZSB0eXBl
LgotICAgICAgLy8gKHdhcm5pbmc6IG5vbi1zdGF0aWMgcmVmZXJlbmNlICJjb25zdCBkb3VibGUm
IGJvb3N0OjpCaW5hcnlGdW5jdGlvbjxZb3VyQ2xhc3NIZXJlPjo6YXJnIgotICAgICAgLy8gaW4g
Y2xhc3Mgd2l0aG91dCBhIGNvbnN0cnVjdG9yIFstV3VuaW5pdGlhbGl6ZWRdKQotICAgICAgQmlu
YXJ5RnVuY3Rpb24oKTsKLSNlbmRpZgotCi0gICAgICBGdW5jIGY7Ci0gICAgICBGaXJzdCBmaXJz
dDsKLSAgICAgIFNlY29uZCBzZWNvbmQ7Ci0gIH07Ci0KLSAgQk9PU1RfY29uY2VwdChVbmFyeVBy
ZWRpY2F0ZSwoRnVuYykoQXJnKSkKLSAgewotICAgIEJPT1NUX0NPTkNFUFRfVVNBR0UoVW5hcnlQ
cmVkaWNhdGUpIHsKLSAgICAgIHJlcXVpcmVfYm9vbGVhbl9leHByKGYoYXJnKSk7IC8vIHJlcXVp
cmUgb3BlcmF0b3IoKSByZXR1cm5pbmcgYm9vbAotICAgIH0KLSAgIHByaXZhdGU6Ci0jaWYgKEJP
T1NUX1dPUktBUk9VTkQoX19HTlVDX18sIEJPT1NUX1RFU1RFRF9BVCg0KSBcCi0gICAgICAgICAg
ICAgICAgICAgICAgJiYgQk9PU1RfV09SS0FST1VORChfX0dOVUNfXywgPiAzKSkpCi0gICAgICAv
LyBEZWNsYXJlIGEgZHVtbXkgY29uc3RydWN0b3IgdG8gbWFrZSBnY2MgaGFwcHkuCi0gICAgICAv
LyBJdCBzZWVtcyB0aGUgY29tcGlsZXIgY2FuIG5vdCBnZW5lcmF0ZSBhIHNlbnNpYmxlIGNvbnN0
cnVjdG9yIHdoZW4gdGhpcyBpcyBpbnN0YW50aWF0ZWQgd2l0aCBhIHJlZmVuY2UgdHlwZS4KLSAg
ICAgIC8vICh3YXJuaW5nOiBub24tc3RhdGljIHJlZmVyZW5jZSAiY29uc3QgZG91YmxlJiBib29z
dDo6VW5hcnlQcmVkaWNhdGU8WW91ckNsYXNzSGVyZT46OmFyZyIKLSAgICAgIC8vIGluIGNsYXNz
IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBbLVd1bmluaXRpYWxpemVkXSkKLSAgICAgIFVuYXJ5UHJl
ZGljYXRlKCk7Ci0jZW5kaWYKLQotICAgIEZ1bmMgZjsKLSAgICBBcmcgYXJnOwotICB9OwotCi0g
IEJPT1NUX2NvbmNlcHQoQmluYXJ5UHJlZGljYXRlLChGdW5jKShGaXJzdCkoU2Vjb25kKSkKLSAg
ewotICAgIEJPT1NUX0NPTkNFUFRfVVNBR0UoQmluYXJ5UHJlZGljYXRlKSB7Ci0gICAgICByZXF1
aXJlX2Jvb2xlYW5fZXhwcihmKGEsIGIpKTsgLy8gcmVxdWlyZSBvcGVyYXRvcigpIHJldHVybmlu
ZyBib29sCi0gICAgfQotICAgcHJpdmF0ZToKLSNpZiAoQk9PU1RfV09SS0FST1VORChfX0dOVUNf
XywgQk9PU1RfVEVTVEVEX0FUKDQpIFwKLSAgICAgICAgICAgICAgICAgICAgICAmJiBCT09TVF9X
T1JLQVJPVU5EKF9fR05VQ19fLCA+IDMpKSkKLSAgICAgIC8vIERlY2xhcmUgYSBkdW1teSBjb25z
dHJ1Y3RvciB0byBtYWtlIGdjYyBoYXBweS4KLSAgICAgIC8vIEl0IHNlZW1zIHRoZSBjb21waWxl
ciBjYW4gbm90IGdlbmVyYXRlIGEgc2Vuc2libGUgY29uc3RydWN0b3Igd2hlbiB0aGlzIGlzIGlu
c3RhbnRpYXRlZCB3aXRoIGEgcmVmZW5jZSB0eXBlLgotICAgICAgLy8gKHdhcm5pbmc6IG5vbi1z
dGF0aWMgcmVmZXJlbmNlICJjb25zdCBkb3VibGUmIGJvb3N0OjpCaW5hcnlQcmVkaWNhdGU8WW91
ckNsYXNzSGVyZT46OmFyZyIKLSAgICAgIC8vIGluIGNsYXNzIHdpdGhvdXQgYSBjb25zdHJ1Y3Rv
ciBbLVd1bmluaXRpYWxpemVkXSkKLSAgICAgIEJpbmFyeVByZWRpY2F0ZSgpOwotI2VuZGlmCi0g
ICAgRnVuYyBmOwotICAgIEZpcnN0IGE7Ci0gICAgU2Vjb25kIGI7Ci0gIH07Ci0KLSAgLy8gdXNl
IHRoaXMgd2hlbiBmdW5jdG9yIGlzIHVzZWQgaW5zaWRlIGEgY29udGFpbmVyIGNsYXNzIGxpa2Ug
c3RkOjpzZXQKLSAgQk9PU1RfY29uY2VwdChDb25zdF9CaW5hcnlQcmVkaWNhdGUsKEZ1bmMpKEZp
cnN0KShTZWNvbmQpKQotICAgIDogQmluYXJ5UHJlZGljYXRlPEZ1bmMsIEZpcnN0LCBTZWNvbmQ+
Ci0gIHsKLSAgICBCT09TVF9DT05DRVBUX1VTQUdFKENvbnN0X0JpbmFyeVByZWRpY2F0ZSkgewot
ICAgICAgY29uc3RfY29uc3RyYWludHMoZik7Ci0gICAgfQotICAgcHJpdmF0ZToKLSAgICB2b2lk
IGNvbnN0X2NvbnN0cmFpbnRzKGNvbnN0IEZ1bmMmIGZ1bikgewotICAgICAgLy8gb3BlcmF0b3Io
KSBtdXN0IGJlIGEgY29uc3QgbWVtYmVyIGZ1bmN0aW9uCi0gICAgICByZXF1aXJlX2Jvb2xlYW5f
ZXhwcihmdW4oYSwgYikpOwotICAgIH0KLSNpZiAoQk9PU1RfV09SS0FST1VORChfX0dOVUNfXywg
Qk9PU1RfVEVTVEVEX0FUKDQpIFwKLSAgICAgICAgICAgICAgICAgICAgICAmJiBCT09TVF9XT1JL
QVJPVU5EKF9fR05VQ19fLCA+IDMpKSkKLSAgICAgIC8vIERlY2xhcmUgYSBkdW1teSBjb25zdHJ1
Y3RvciB0byBtYWtlIGdjYyBoYXBweS4KLSAgICAgIC8vIEl0IHNlZW1zIHRoZSBjb21waWxlciBj
YW4gbm90IGdlbmVyYXRlIGEgc2Vuc2libGUgY29uc3RydWN0b3Igd2hlbiB0aGlzIGlzIGluc3Rh
bnRpYXRlZCB3aXRoIGEgcmVmZW5jZSB0eXBlLgotICAgICAgLy8gKHdhcm5pbmc6IG5vbi1zdGF0
aWMgcmVmZXJlbmNlICJjb25zdCBkb3VibGUmIGJvb3N0OjpDb25zdF9CaW5hcnlQcmVkaWNhdGU8
WW91ckNsYXNzSGVyZT46OmFyZyIKLSAgICAgIC8vIGluIGNsYXNzIHdpdGhvdXQgYSBjb25zdHJ1
Y3RvciBbLVd1bmluaXRpYWxpemVkXSkKLSAgICAgIENvbnN0X0JpbmFyeVByZWRpY2F0ZSgpOwot
I2VuZGlmCi0KLSAgICBGdW5jIGY7Ci0gICAgRmlyc3QgYTsKLSAgICBTZWNvbmQgYjsKLSAgfTsK
LQotICBCT09TVF9jb25jZXB0KEFkYXB0YWJsZUdlbmVyYXRvciwoRnVuYykoUmV0dXJuKSkKLSAg
ICA6IEdlbmVyYXRvcjxGdW5jLCB0eXBlbmFtZSBGdW5jOjpyZXN1bHRfdHlwZT4KLSAgewotICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5jOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKLQotICAg
ICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShBZGFwdGFibGVHZW5lcmF0b3IpCi0gICAgICB7Ci0gICAg
ICAgICAgQk9PU1RfQ09OQ0VQVF9BU1NFUlQoKENvbnZlcnRpYmxlPHJlc3VsdF90eXBlLCBSZXR1
cm4+KSk7Ci0gICAgICB9Ci0gIH07Ci0KLSAgQk9PU1RfY29uY2VwdChBZGFwdGFibGVVbmFyeUZ1
bmN0aW9uLChGdW5jKShSZXR1cm4pKEFyZykpCi0gICAgOiBVbmFyeUZ1bmN0aW9uPEZ1bmMsIHR5
cGVuYW1lIEZ1bmM6OnJlc3VsdF90eXBlLCB0eXBlbmFtZSBGdW5jOjphcmd1bWVudF90eXBlPgot
ICB7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIEZ1bmM6OmFyZ3VtZW50X3R5cGUgYXJndW1lbnRf
dHlwZTsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgRnVuYzo6cmVzdWx0X3R5cGUgcmVzdWx0X3R5
cGU7Ci0KLSAgICAgIH5BZGFwdGFibGVVbmFyeUZ1bmN0aW9uKCkKLSAgICAgIHsKLSAgICAgICAg
ICBCT09TVF9DT05DRVBUX0FTU0VSVCgoQ29udmVydGlibGU8cmVzdWx0X3R5cGUsIFJldHVybj4p
KTsKLSAgICAgICAgICBCT09TVF9DT05DRVBUX0FTU0VSVCgoQ29udmVydGlibGU8QXJnLCBhcmd1
bWVudF90eXBlPikpOwotICAgICAgfQotICB9OwotCi0gIEJPT1NUX2NvbmNlcHQoQWRhcHRhYmxl
QmluYXJ5RnVuY3Rpb24sKEZ1bmMpKFJldHVybikoRmlyc3QpKFNlY29uZCkpCi0gICAgOiBCaW5h
cnlGdW5jdGlvbjwKLSAgICAgICAgICBGdW5jCi0gICAgICAgICwgdHlwZW5hbWUgRnVuYzo6cmVz
dWx0X3R5cGUKLSAgICAgICAgLCB0eXBlbmFtZSBGdW5jOjpmaXJzdF9hcmd1bWVudF90eXBlCi0g
ICAgICAgICwgdHlwZW5hbWUgRnVuYzo6c2Vjb25kX2FyZ3VtZW50X3R5cGUKLSAgICAgID4KLSAg
ewotICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5jOjpmaXJzdF9hcmd1bWVudF90eXBlIGZpcnN0
X2FyZ3VtZW50X3R5cGU7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIEZ1bmM6OnNlY29uZF9hcmd1
bWVudF90eXBlIHNlY29uZF9hcmd1bWVudF90eXBlOwotICAgICAgdHlwZWRlZiB0eXBlbmFtZSBG
dW5jOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKLQotICAgICAgfkFkYXB0YWJsZUJpbmFyeUZ1
bmN0aW9uKCkKLSAgICAgIHsKLSAgICAgICAgICBCT09TVF9DT05DRVBUX0FTU0VSVCgoQ29udmVy
dGlibGU8cmVzdWx0X3R5cGUsIFJldHVybj4pKTsKLSAgICAgICAgICBCT09TVF9DT05DRVBUX0FT
U0VSVCgoQ29udmVydGlibGU8Rmlyc3QsIGZpcnN0X2FyZ3VtZW50X3R5cGU+KSk7Ci0gICAgICAg
ICAgQk9PU1RfQ09OQ0VQVF9BU1NFUlQoKENvbnZlcnRpYmxlPFNlY29uZCwgc2Vjb25kX2FyZ3Vt
ZW50X3R5cGU+KSk7Ci0gICAgICB9Ci0gIH07Ci0KLSAgQk9PU1RfY29uY2VwdChBZGFwdGFibGVQ
cmVkaWNhdGUsKEZ1bmMpKEFyZykpCi0gICAgOiBVbmFyeVByZWRpY2F0ZTxGdW5jLCBBcmc+Ci0g
ICAgLCBBZGFwdGFibGVVbmFyeUZ1bmN0aW9uPEZ1bmMsIGJvb2wsIEFyZz4KLSAgewotICB9Owot
Ci0gIEJPT1NUX2NvbmNlcHQoQWRhcHRhYmxlQmluYXJ5UHJlZGljYXRlLChGdW5jKShGaXJzdCko
U2Vjb25kKSkKLSAgICA6IEJpbmFyeVByZWRpY2F0ZTxGdW5jLCBGaXJzdCwgU2Vjb25kPgotICAg
ICwgQWRhcHRhYmxlQmluYXJ5RnVuY3Rpb248RnVuYywgYm9vbCwgRmlyc3QsIFNlY29uZD4KLSAg
ewotICB9OwotCi0gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEl0ZXJhdG9yIENvbmNlcHRz
Ci0KLSAgQk9PU1RfY29uY2VwdChJbnB1dEl0ZXJhdG9yLChUVCkpCi0gICAgOiBBc3NpZ25hYmxl
PFRUPgotICAgICwgRXF1YWxpdHlDb21wYXJhYmxlPFRUPgotICB7Ci0gICAgICB0eXBlZGVmIHR5
cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPFRUPjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwot
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUVD46OmRpZmZlcmVu
Y2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRl
cmF0b3JfdHJhaXRzPFRUPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKLSAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8VFQ+Ojpwb2ludGVyIHBvaW50ZXI7Ci0gICAgICB0
eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPFRUPjo6aXRlcmF0b3JfY2F0ZWdv
cnkgaXRlcmF0b3JfY2F0ZWdvcnk7Ci0KLSAgICAgIEJPT1NUX0NPTkNFUFRfVVNBR0UoSW5wdXRJ
dGVyYXRvcikKLSAgICAgIHsKLSAgICAgICAgQk9PU1RfQ09OQ0VQVF9BU1NFUlQoKFNpZ25lZElu
dGVnZXI8ZGlmZmVyZW5jZV90eXBlPikpOwotICAgICAgICBCT09TVF9DT05DRVBUX0FTU0VSVCgo
Q29udmVydGlibGU8aXRlcmF0b3JfY2F0ZWdvcnksIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnPikp
OwotCi0gICAgICAgIFRUIGooaSk7Ci0gICAgICAgICh2b2lkKSppOyAgICAgICAgICAgLy8gcmVx
dWlyZSBkZXJlZmVyZW5jZSBvcGVyYXRvcgotICAgICAgICArK2o7ICAgICAgICAgICAgICAgIC8v
IHJlcXVpcmUgcHJlaW5jcmVtZW50IG9wZXJhdG9yCi0gICAgICAgIGkrKzsgICAgICAgICAgICAg
ICAgLy8gcmVxdWlyZSBwb3N0aW5jcmVtZW50IG9wZXJhdG9yCi0gICAgICB9Ci0gICBwcml2YXRl
OgotICAgIFRUIGk7Ci0gIH07Ci0KLSAgQk9PU1RfY29uY2VwdChPdXRwdXRJdGVyYXRvciwoVFQp
KFZhbHVlVCkpCi0gICAgOiBBc3NpZ25hYmxlPFRUPgotICB7Ci0gICAgQk9PU1RfQ09OQ0VQVF9V
U0FHRShPdXRwdXRJdGVyYXRvcikgewotCi0gICAgICArK2k7ICAgICAgICAgICAgICAgIC8vIHJl
cXVpcmUgcHJlaW5jcmVtZW50IG9wZXJhdG9yCi0gICAgICBpKys7ICAgICAgICAgICAgICAgIC8v
IHJlcXVpcmUgcG9zdGluY3JlbWVudCBvcGVyYXRvcgotICAgICAgKmkrKyA9IHQ7ICAgICAgICAg
ICAvLyByZXF1aXJlIHBvc3RpbmNyZW1lbnQgYW5kIGFzc2lnbm1lbnQKLSAgICB9Ci0gICBwcml2
YXRlOgotICAgIFRUIGksIGo7Ci0gICAgVmFsdWVUIHQ7Ci0gIH07Ci0KLSAgQk9PU1RfY29uY2Vw
dChGb3J3YXJkSXRlcmF0b3IsKFRUKSkKLSAgICA6IElucHV0SXRlcmF0b3I8VFQ+Ci0gIHsKLSAg
ICAgIEJPT1NUX0NPTkNFUFRfVVNBR0UoRm9yd2FyZEl0ZXJhdG9yKQotICAgICAgewotICAgICAg
ICAgIEJPT1NUX0NPTkNFUFRfQVNTRVJUKChDb252ZXJ0aWJsZTwKLSAgICAgICAgICAgICAgQk9P
U1RfREVEVUNFRF9UWVBFTkFNRSBGb3J3YXJkSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5Ci0g
ICAgICAgICAgICAsIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcKLSAgICAgICAgICA+KSk7Ci0K
LSAgICAgICAgICB0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yPFRUPjo6cmVmZXJlbmNlIHIgPSAqaTsK
LSAgICAgICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcocik7Ci0gICAgICB9Ci0K
LSAgIHByaXZhdGU6Ci0gICAgICBUVCBpOwotICB9OwotCi0gIEJPT1NUX2NvbmNlcHQoTXV0YWJs
ZV9Gb3J3YXJkSXRlcmF0b3IsKFRUKSkKLSAgICA6IEZvcndhcmRJdGVyYXRvcjxUVD4KLSAgewot
ICAgICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShNdXRhYmxlX0ZvcndhcmRJdGVyYXRvcikgewotICAg
ICAgICAqaSsrID0gKmo7ICAgICAgICAgLy8gcmVxdWlyZSBwb3N0aW5jcmVtZW50IGFuZCBhc3Np
Z25tZW50Ci0gICAgICB9Ci0gICBwcml2YXRlOgotICAgICAgVFQgaSwgajsKLSAgfTsKLQotICBC
T09TVF9jb25jZXB0KEJpZGlyZWN0aW9uYWxJdGVyYXRvciwoVFQpKQotICAgIDogRm9yd2FyZEl0
ZXJhdG9yPFRUPgotICB7Ci0gICAgICBCT09TVF9DT05DRVBUX1VTQUdFKEJpZGlyZWN0aW9uYWxJ
dGVyYXRvcikKLSAgICAgIHsKLSAgICAgICAgICBCT09TVF9DT05DRVBUX0FTU0VSVCgoQ29udmVy
dGlibGU8Ci0gICAgICAgICAgICAgIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgQmlkaXJlY3Rpb25h
bEl0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeQotICAgICAgICAgICAgLCBzdGQ6OmJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnCi0gICAgICAgICAgPikpOwotCi0gICAgICAgICAgLS1pOyAgICAg
ICAgICAgICAgICAvLyByZXF1aXJlIHByZWRlY3JlbWVudCBvcGVyYXRvcgotICAgICAgICAgIGkt
LTsgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBwb3N0ZGVjcmVtZW50IG9wZXJhdG9yCi0gICAg
ICB9Ci0gICBwcml2YXRlOgotICAgICAgVFQgaTsKLSAgfTsKLQotICBCT09TVF9jb25jZXB0KE11
dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLChUVCkpCi0gICAgOiBCaWRpcmVjdGlvbmFsSXRl
cmF0b3I8VFQ+Ci0gICAgLCBNdXRhYmxlX0ZvcndhcmRJdGVyYXRvcjxUVD4KLSAgewotICAgICAg
Qk9PU1RfQ09OQ0VQVF9VU0FHRShNdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvcikKLSAgICAg
IHsKLSAgICAgICAgICAqaS0tID0gKmo7ICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBwb3N0
ZGVjcmVtZW50IGFuZCBhc3NpZ25tZW50Ci0gICAgICB9Ci0gICBwcml2YXRlOgotICAgICAgVFQg
aSwgajsKLSAgfTsKLQotICBCT09TVF9jb25jZXB0KFJhbmRvbUFjY2Vzc0l0ZXJhdG9yLChUVCkp
Ci0gICAgOiBCaWRpcmVjdGlvbmFsSXRlcmF0b3I8VFQ+Ci0gICAgLCBDb21wYXJhYmxlPFRUPgot
ICB7Ci0gICAgICBCT09TVF9DT05DRVBUX1VTQUdFKFJhbmRvbUFjY2Vzc0l0ZXJhdG9yKQotICAg
ICAgewotICAgICAgICAgIEJPT1NUX0NPTkNFUFRfQVNTRVJUKChDb252ZXJ0aWJsZTwKLSAgICAg
ICAgICAgICAgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSBCaWRpcmVjdGlvbmFsSXRlcmF0b3I8VFQ+
OjppdGVyYXRvcl9jYXRlZ29yeQotICAgICAgICAgICAgLCBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnCi0gICAgICAgICAgPikpOwotCi0gICAgICAgICAgaSArPSBuOyAgICAgICAgICAg
ICAvLyByZXF1aXJlIGFzc2lnbm1lbnQgYWRkaXRpb24gb3BlcmF0b3IKLSAgICAgICAgICBpID0g
aSArIG47IGkgPSBuICsgaTsgLy8gcmVxdWlyZSBhZGRpdGlvbiB3aXRoIGRpZmZlcmVuY2UgdHlw
ZQotICAgICAgICAgIGkgLT0gbjsgICAgICAgICAgICAgLy8gcmVxdWlyZSBhc3NpZ25tZW50IHN1
YnRyYWN0aW9uIG9wZXJhdG9yCi0gICAgICAgICAgaSA9IGkgLSBuOyAgICAgICAgICAgICAgICAg
IC8vIHJlcXVpcmUgc3VidHJhY3Rpb24gd2l0aCBkaWZmZXJlbmNlIHR5cGUKLSAgICAgICAgICBu
ID0gaSAtIGo7ICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBkaWZmZXJlbmNlIG9wZXJhdG9y
Ci0gICAgICAgICAgKHZvaWQpaVtuXTsgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgZWxlbWVu
dCBhY2Nlc3Mgb3BlcmF0b3IKLSAgICAgIH0KLQotICAgcHJpdmF0ZToKLSAgICBUVCBhLCBiOwot
ICAgIFRUIGksIGo7Ci0gICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxUVD46OmRp
ZmZlcmVuY2VfdHlwZSBuOwotICB9OwotCi0gIEJPT1NUX2NvbmNlcHQoTXV0YWJsZV9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwoVFQpKQotICAgIDogUmFuZG9tQWNjZXNzSXRlcmF0b3I8VFQ+Ci0gICAg
LCBNdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjxUVD4KLSAgewotICAgICAgQk9PU1RfQ09O
Q0VQVF9VU0FHRShNdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yKQotICAgICAgewotICAgICAg
ICAgIGlbbl0gPSAqaTsgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIGVsZW1lbnQgYWNjZXNz
IGFuZCBhc3NpZ25tZW50Ci0gICAgICB9Ci0gICBwcml2YXRlOgotICAgIFRUIGk7Ci0gICAgdHlw
ZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8VFQ+OjpkaWZmZXJlbmNlX3R5cGUgbjsKLSAgfTsK
LQotICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBDb250YWluZXIgcwotCi0gIEJPT1NUX2Nv
bmNlcHQoQ29udGFpbmVyLChDKSkKLSAgICA6IEFzc2lnbmFibGU8Qz4KLSAgewotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgQzo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwotICAgIHR5cGVkZWYgdHlwZW5h
bWUgQzo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIEM6OnNpemVfdHlwZSBzaXplX3R5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDOjpjb25z
dF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQzo6Y29u
c3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQzo6Y29uc3Rf
aXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0KLSAgICAgIEJPT1NUX0NPTkNFUFRfVVNBR0UoQ29u
dGFpbmVyKQotICAgICAgewotICAgICAgICAgIEJPT1NUX0NPTkNFUFRfQVNTRVJUKChJbnB1dEl0
ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPikpOwotICAgICAgICAgIGNvbnN0X2NvbnN0cmFpbnRzKGMp
OwotICAgICAgfQotCi0gICBwcml2YXRlOgotICAgICAgdm9pZCBjb25zdF9jb25zdHJhaW50cyhj
b25zdCBDJiBjYykgewotICAgICAgICAgIGkgPSBjYy5iZWdpbigpOwotICAgICAgICAgIGkgPSBj
Yy5lbmQoKTsKLSAgICAgICAgICBuID0gY2Muc2l6ZSgpOwotICAgICAgICAgIG4gPSBjYy5tYXhf
c2l6ZSgpOwotICAgICAgICAgIGIgPSBjYy5lbXB0eSgpOwotICAgICAgfQotICAgICAgQyBjOwot
ICAgICAgYm9vbCBiOwotICAgICAgY29uc3RfaXRlcmF0b3IgaTsKLSAgICAgIHNpemVfdHlwZSBu
OwotICB9OwotCi0gIEJPT1NUX2NvbmNlcHQoTXV0YWJsZV9Db250YWluZXIsKEMpKQotICAgIDog
Q29udGFpbmVyPEM+Ci0gIHsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQzo6cmVmZXJlbmNlIHJl
ZmVyZW5jZTsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQzo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0g
ICAgICB0eXBlZGVmIHR5cGVuYW1lIEM6OnBvaW50ZXIgcG9pbnRlcjsKLQotICAgICAgQk9PU1Rf
Q09OQ0VQVF9VU0FHRShNdXRhYmxlX0NvbnRhaW5lcikKLSAgICAgIHsKLSAgICAgICAgICBCT09T
VF9DT05DRVBUX0FTU0VSVCgoCi0gICAgICAgICAgICAgICBBc3NpZ25hYmxlPHR5cGVuYW1lIE11
dGFibGVfQ29udGFpbmVyOjp2YWx1ZV90eXBlPikpOwotCi0gICAgICAgICAgQk9PU1RfQ09OQ0VQ
VF9BU1NFUlQoKElucHV0SXRlcmF0b3I8aXRlcmF0b3I+KSk7Ci0KLSAgICAgICAgICBpID0gYy5i
ZWdpbigpOwotICAgICAgICAgIGkgPSBjLmVuZCgpOwotICAgICAgICAgIGMuc3dhcChjMik7Ci0g
ICAgICB9Ci0KLSAgIHByaXZhdGU6Ci0gICAgICBpdGVyYXRvciBpOwotICAgICAgQyBjLCBjMjsK
LSAgfTsKLQotICBCT09TVF9jb25jZXB0KEZvcndhcmRDb250YWluZXIsKEMpKQotICAgIDogQ29u
dGFpbmVyPEM+Ci0gIHsKLSAgICAgIEJPT1NUX0NPTkNFUFRfVVNBR0UoRm9yd2FyZENvbnRhaW5l
cikKLSAgICAgIHsKLSAgICAgICAgICBCT09TVF9DT05DRVBUX0FTU0VSVCgoCi0gICAgICAgICAg
ICAgICBGb3J3YXJkSXRlcmF0b3I8Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIEZvcndh
cmRDb250YWluZXI6OmNvbnN0X2l0ZXJhdG9yCi0gICAgICAgICAgICAgICA+KSk7Ci0gICAgICB9
Ci0gIH07Ci0KLSAgQk9PU1RfY29uY2VwdChNdXRhYmxlX0ZvcndhcmRDb250YWluZXIsKEMpKQot
ICAgIDogRm9yd2FyZENvbnRhaW5lcjxDPgotICAgICwgTXV0YWJsZV9Db250YWluZXI8Qz4KLSAg
ewotICAgICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShNdXRhYmxlX0ZvcndhcmRDb250YWluZXIpCi0g
ICAgICB7Ci0gICAgICAgICAgQk9PU1RfQ09OQ0VQVF9BU1NFUlQoKAotICAgICAgICAgICAgICAg
TXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3I8Ci0gICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgTXV0
YWJsZV9Gb3J3YXJkQ29udGFpbmVyOjppdGVyYXRvcgotICAgICAgICAgICAgICAgPikpOwotICAg
ICAgfQotICB9OwotCi0gIEJPT1NUX2NvbmNlcHQoUmV2ZXJzaWJsZUNvbnRhaW5lciwoQykpCi0g
ICAgOiBGb3J3YXJkQ29udGFpbmVyPEM+Ci0gIHsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUKLSAg
ICAgICAgQzo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcgotICAgICAgY29uc3RfcmV2ZXJzZV9pdGVy
YXRvcjsKLQotICAgICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShSZXZlcnNpYmxlQ29udGFpbmVyKQot
ICAgICAgewotICAgICAgICAgIEJPT1NUX0NPTkNFUFRfQVNTRVJUKCgKLSAgICAgICAgICAgICAg
QmlkaXJlY3Rpb25hbEl0ZXJhdG9yPAotICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgUmV2ZXJz
aWJsZUNvbnRhaW5lcjo6Y29uc3RfaXRlcmF0b3I+KSk7Ci0KLSAgICAgICAgICBCT09TVF9DT05D
RVBUX0FTU0VSVCgoQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPGNvbnN0X3JldmVyc2VfaXRlcmF0b3I+
KSk7Ci0KLSAgICAgICAgICBjb25zdF9jb25zdHJhaW50cyhjKTsKLSAgICAgIH0KLSAgIHByaXZh
dGU6Ci0gICAgICB2b2lkIGNvbnN0X2NvbnN0cmFpbnRzKGNvbnN0IEMmIGNjKQotICAgICAgewot
ICAgICAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgaSA9IGNjLnJiZWdpbigpOwotICAgICAg
ICAgIGkgPSBjYy5yZW5kKCk7Ci0gICAgICB9Ci0gICAgICBDIGM7Ci0gIH07Ci0KLSAgQk9PU1Rf
Y29uY2VwdChNdXRhYmxlX1JldmVyc2libGVDb250YWluZXIsKEMpKQotICAgIDogTXV0YWJsZV9G
b3J3YXJkQ29udGFpbmVyPEM+Ci0gICAgLCBSZXZlcnNpYmxlQ29udGFpbmVyPEM+Ci0gIHsKLSAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgQzo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9y
OwotCi0gICAgICBCT09TVF9DT05DRVBUX1VTQUdFKE11dGFibGVfUmV2ZXJzaWJsZUNvbnRhaW5l
cikKLSAgICAgIHsKLSAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE11dGFibGVfRm9yd2FyZENv
bnRhaW5lcjxDPjo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgICAgICAgQk9PU1RfQ09OQ0VQVF9B
U1NFUlQoKE11dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPGl0ZXJhdG9yPikpOwotICAgICAg
ICAgIEJPT1NUX0NPTkNFUFRfQVNTRVJUKChNdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjxy
ZXZlcnNlX2l0ZXJhdG9yPikpOwotCi0gICAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciBpID0gYy5y
YmVnaW4oKTsKLSAgICAgICAgICBpID0gYy5yZW5kKCk7Ci0gICAgICB9Ci0gICBwcml2YXRlOgot
ICAgICAgQyBjOwotICB9OwotCi0gIEJPT1NUX2NvbmNlcHQoUmFuZG9tQWNjZXNzQ29udGFpbmVy
LChDKSkKLSAgICA6IFJldmVyc2libGVDb250YWluZXI8Qz4KLSAgewotICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBDOjpzaXplX3R5cGUgc2l6ZV90eXBlOwotICAgICAgdHlwZWRlZiB0eXBlbmFtZSBD
Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwotCi0gICAgICBCT09TVF9DT05DRVBU
X1VTQUdFKFJhbmRvbUFjY2Vzc0NvbnRhaW5lcikKLSAgICAgIHsKLSAgICAgICAgICBCT09TVF9D
T05DRVBUX0FTU0VSVCgoCi0gICAgICAgICAgICAgIFJhbmRvbUFjY2Vzc0l0ZXJhdG9yPAotICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgUmFuZG9tQWNjZXNzQ29udGFpbmVyOjpjb25zdF9pdGVy
YXRvcgotICAgICAgICAgICAgICA+KSk7Ci0KLSAgICAgICAgICBjb25zdF9jb25zdHJhaW50cyhj
KTsKLSAgICAgIH0KLSAgIHByaXZhdGU6Ci0gICAgICB2b2lkIGNvbnN0X2NvbnN0cmFpbnRzKGNv
bnN0IEMmIGNjKQotICAgICAgewotICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZSByID0gY2Nbbl07
Ci0gICAgICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKHIpOwotICAgICAgfQot
Ci0gICAgICBDIGM7Ci0gICAgICBzaXplX3R5cGUgbjsKLSAgfTsKLQotICBCT09TVF9jb25jZXB0
KE11dGFibGVfUmFuZG9tQWNjZXNzQ29udGFpbmVyLChDKSkKLSAgICA6IE11dGFibGVfUmV2ZXJz
aWJsZUNvbnRhaW5lcjxDPgotICAgICwgUmFuZG9tQWNjZXNzQ29udGFpbmVyPEM+Ci0gIHsKLSAg
IHByaXZhdGU6Ci0gICAgICB0eXBlZGVmIE11dGFibGVfUmFuZG9tQWNjZXNzQ29udGFpbmVyIHNl
bGY7Ci0gICBwdWJsaWM6Ci0gICAgICBCT09TVF9DT05DRVBUX1VTQUdFKE11dGFibGVfUmFuZG9t
QWNjZXNzQ29udGFpbmVyKQotICAgICAgewotICAgICAgICAgIEJPT1NUX0NPTkNFUFRfQVNTRVJU
KChNdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPHR5cGVuYW1lIHNlbGY6Oml0ZXJhdG9yPikp
OwotICAgICAgICAgIEJPT1NUX0NPTkNFUFRfQVNTRVJUKChNdXRhYmxlX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yPHR5cGVuYW1lIHNlbGY6OnJldmVyc2VfaXRlcmF0b3I+KSk7Ci0KLSAgICAgICAgICB0
eXBlbmFtZSBzZWxmOjpyZWZlcmVuY2UgciA9IGNbaV07Ci0gICAgICAgICAgaWdub3JlX3VudXNl
ZF92YXJpYWJsZV93YXJuaW5nKHIpOwotICAgICAgfQotCi0gICBwcml2YXRlOgotICAgICAgdHlw
ZW5hbWUgTXV0YWJsZV9SZXZlcnNpYmxlQ29udGFpbmVyPEM+OjpzaXplX3R5cGUgaTsKLSAgICAg
IEMgYzsKLSAgfTsKLQotICAvLyBBIFNlcXVlbmNlIGlzIGluaGVyZW50bHkgbXV0YWJsZQotICBC
T09TVF9jb25jZXB0KFNlcXVlbmNlLChTKSkKLSAgICA6IE11dGFibGVfRm9yd2FyZENvbnRhaW5l
cjxTPgotICAgICAgLy8gTWF0dCBBdXN0ZXJuJ3MgYm9vayBwdXRzIERlZmF1bHRDb25zdHJ1Y3Rp
YmxlIGhlcmUsIHRoZSBDKysKLSAgICAgIC8vIHN0YW5kYXJkIHBsYWNlcyBpdCBpbiBDb250YWlu
ZXIgLS1KR1MKLSAgICAgIC8vIC4uLiBzbyB3aHkgYXJlbid0IHdlIGZvbGxvd2luZyB0aGUgc3Rh
bmRhcmQ/ICAtLURXQQotICAgICwgRGVmYXVsdENvbnN0cnVjdGlibGU8Uz4KLSAgewotICAgICAg
Qk9PU1RfQ09OQ0VQVF9VU0FHRShTZXF1ZW5jZSkKLSAgICAgIHsKLSAgICAgICAgICBTCi0gICAg
ICAgICAgICAgIGMobiwgdCksCi0gICAgICAgICAgICAgIGMyKGZpcnN0LCBsYXN0KTsKLQotICAg
ICAgICAgIGMuaW5zZXJ0KHAsIHQpOwotICAgICAgICAgIGMuaW5zZXJ0KHAsIG4sIHQpOwotICAg
ICAgICAgIGMuaW5zZXJ0KHAsIGZpcnN0LCBsYXN0KTsKLQotICAgICAgICAgIGMuZXJhc2UocCk7
Ci0gICAgICAgICAgYy5lcmFzZShwLCBxKTsKLQotICAgICAgICAgIHR5cGVuYW1lIFNlcXVlbmNl
OjpyZWZlcmVuY2UgciA9IGMuZnJvbnQoKTsKLQotICAgICAgICAgIGlnbm9yZV91bnVzZWRfdmFy
aWFibGVfd2FybmluZyhjKTsKLSAgICAgICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5p
bmcoYzIpOwotICAgICAgICAgIGlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2FybmluZyhyKTsKLSAg
ICAgICAgICBjb25zdF9jb25zdHJhaW50cyhjKTsKLSAgICAgIH0KLSAgIHByaXZhdGU6Ci0gICAg
ICB2b2lkIGNvbnN0X2NvbnN0cmFpbnRzKGNvbnN0IFMmIGMpIHsKLSAgICAgICAgICB0eXBlbmFt
ZSBTZXF1ZW5jZTo6Y29uc3RfcmVmZXJlbmNlIHIgPSBjLmZyb250KCk7Ci0gICAgICAgICAgaWdu
b3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKHIpOwotICAgICAgfQotCi0gICAgICB0eXBlbmFt
ZSBTOjp2YWx1ZV90eXBlIHQ7Ci0gICAgICB0eXBlbmFtZSBTOjpzaXplX3R5cGUgbjsKLSAgICAg
IHR5cGVuYW1lIFM6OnZhbHVlX3R5cGUqIGZpcnN0LCAqbGFzdDsKLSAgICAgIHR5cGVuYW1lIFM6
Oml0ZXJhdG9yIHAsIHE7Ci0gIH07Ci0KLSAgQk9PU1RfY29uY2VwdChGcm9udEluc2VydGlvblNl
cXVlbmNlLChTKSkKLSAgICA6IFNlcXVlbmNlPFM+Ci0gIHsKLSAgICAgIEJPT1NUX0NPTkNFUFRf
VVNBR0UoRnJvbnRJbnNlcnRpb25TZXF1ZW5jZSkKLSAgICAgIHsKLSAgICAgICAgICBjLnB1c2hf
ZnJvbnQodCk7Ci0gICAgICAgICAgYy5wb3BfZnJvbnQoKTsKLSAgICAgIH0KLSAgIHByaXZhdGU6
Ci0gICAgICBTIGM7Ci0gICAgICB0eXBlbmFtZSBTOjp2YWx1ZV90eXBlIHQ7Ci0gIH07Ci0KLSAg
Qk9PU1RfY29uY2VwdChCYWNrSW5zZXJ0aW9uU2VxdWVuY2UsKFMpKQotICAgIDogU2VxdWVuY2U8
Uz4KLSAgewotICAgICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShCYWNrSW5zZXJ0aW9uU2VxdWVuY2Up
Ci0gICAgICB7Ci0gICAgICAgICAgYy5wdXNoX2JhY2sodCk7Ci0gICAgICAgICAgYy5wb3BfYmFj
aygpOwotICAgICAgICAgIHR5cGVuYW1lIEJhY2tJbnNlcnRpb25TZXF1ZW5jZTo6cmVmZXJlbmNl
IHIgPSBjLmJhY2soKTsKLSAgICAgICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmco
cik7Ci0gICAgICAgICAgY29uc3RfY29uc3RyYWludHMoYyk7Ci0gICAgICB9Ci0gICBwcml2YXRl
OgotICAgICAgdm9pZCBjb25zdF9jb25zdHJhaW50cyhjb25zdCBTJiBjYykgewotICAgICAgICAg
IHR5cGVuYW1lIEJhY2tJbnNlcnRpb25TZXF1ZW5jZTo6Y29uc3RfcmVmZXJlbmNlCi0gICAgICAg
ICAgICAgIHIgPSBjYy5iYWNrKCk7Ci0gICAgICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93
YXJuaW5nKHIpOwotICAgICAgfQotICAgICAgUyBjOwotICAgICAgdHlwZW5hbWUgUzo6dmFsdWVf
dHlwZSB0OwotICB9OwotCi0gIEJPT1NUX2NvbmNlcHQoQXNzb2NpYXRpdmVDb250YWluZXIsKEMp
KQotICAgIDogRm9yd2FyZENvbnRhaW5lcjxDPgotICAgICwgRGVmYXVsdENvbnN0cnVjdGlibGU8
Qz4KLSAgewotICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDOjprZXlfdHlwZSBrZXlfdHlwZTsKLSAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgQzo6a2V5X2NvbXBhcmUga2V5X2NvbXBhcmU7Ci0gICAgICB0
eXBlZGVmIHR5cGVuYW1lIEM6OnZhbHVlX2NvbXBhcmUgdmFsdWVfY29tcGFyZTsKLSAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgQzo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0KLSAgICAgIEJPT1NUX0NPTkNF
UFRfVVNBR0UoQXNzb2NpYXRpdmVDb250YWluZXIpCi0gICAgICB7Ci0gICAgICAgICAgaSA9IGMu
ZmluZChrKTsKLSAgICAgICAgICByID0gYy5lcXVhbF9yYW5nZShrKTsKLSAgICAgICAgICBjLmVy
YXNlKGspOwotICAgICAgICAgIGMuZXJhc2UoaSk7Ci0gICAgICAgICAgYy5lcmFzZShyLmZpcnN0
LCByLnNlY29uZCk7Ci0gICAgICAgICAgY29uc3RfY29uc3RyYWludHMoYyk7Ci0gICAgICAgICAg
Qk9PU1RfQ09OQ0VQVF9BU1NFUlQoKEJpbmFyeVByZWRpY2F0ZTxrZXlfY29tcGFyZSxrZXlfdHlw
ZSxrZXlfdHlwZT4pKTsKLQotICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQXNzb2NpYXRpdmVD
b250YWluZXI6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZV87Ci0gICAgICAgICAgQk9PU1RfQ09OQ0VQ
VF9BU1NFUlQoKEJpbmFyeVByZWRpY2F0ZTx2YWx1ZV9jb21wYXJlLHZhbHVlX3R5cGVfLHZhbHVl
X3R5cGVfPikpOwotICAgICAgfQotCi0gICAgICAvLyBSZWR1bmRhbnQgd2l0aCB0aGUgYmFzZSBj
b25jZXB0LCBidXQgaXQgaGVscHMgYmVsb3cuCi0gICAgICB0eXBlZGVmIHR5cGVuYW1lIEM6OmNv
bnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwotICAgcHJpdmF0ZToKLSAgICAgIHZvaWQgY29u
c3RfY29uc3RyYWludHMoY29uc3QgQyYgY2MpCi0gICAgICB7Ci0gICAgICAgICAgY2kgPSBjYy5m
aW5kKGspOwotICAgICAgICAgIG4gPSBjYy5jb3VudChrKTsKLSAgICAgICAgICBjciA9IGNjLmVx
dWFsX3JhbmdlKGspOwotICAgICAgfQotCi0gICAgICBDIGM7Ci0gICAgICBpdGVyYXRvciBpOwot
ICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiByOwotICAgICAgY29uc3RfaXRlcmF0
b3IgY2k7Ci0gICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+IGNy
OwotICAgICAgdHlwZW5hbWUgQzo6a2V5X3R5cGUgazsKLSAgICAgIHR5cGVuYW1lIEM6OnNpemVf
dHlwZSBuOwotICB9OwotCi0gIEJPT1NUX2NvbmNlcHQoVW5pcXVlQXNzb2NpYXRpdmVDb250YWlu
ZXIsKEMpKQotICAgIDogQXNzb2NpYXRpdmVDb250YWluZXI8Qz4KLSAgewotICAgICAgQk9PU1Rf
Q09OQ0VQVF9VU0FHRShVbmlxdWVBc3NvY2lhdGl2ZUNvbnRhaW5lcikKLSAgICAgIHsKLSAgICAg
ICAgICBDIGMoZmlyc3QsIGxhc3QpOwotCi0gICAgICAgICAgcG9zX2ZsYWcgPSBjLmluc2VydCh0
KTsKLSAgICAgICAgICBjLmluc2VydChmaXJzdCwgbGFzdCk7Ci0KLSAgICAgICAgICBpZ25vcmVf
dW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoYyk7Ci0gICAgICB9Ci0gICBwcml2YXRlOgotICAgICAg
c3RkOjpwYWlyPHR5cGVuYW1lIEM6Oml0ZXJhdG9yLCBib29sPiBwb3NfZmxhZzsKLSAgICAgIHR5
cGVuYW1lIEM6OnZhbHVlX3R5cGUgdDsKLSAgICAgIHR5cGVuYW1lIEM6OnZhbHVlX3R5cGUqIGZp
cnN0LCAqbGFzdDsKLSAgfTsKLQotICBCT09TVF9jb25jZXB0KE11bHRpcGxlQXNzb2NpYXRpdmVD
b250YWluZXIsKEMpKQotICAgIDogQXNzb2NpYXRpdmVDb250YWluZXI8Qz4KLSAgewotICAgICAg
Qk9PU1RfQ09OQ0VQVF9VU0FHRShNdWx0aXBsZUFzc29jaWF0aXZlQ29udGFpbmVyKQotICAgICAg
ewotICAgICAgICAgIEMgYyhmaXJzdCwgbGFzdCk7Ci0KLSAgICAgICAgICBwb3MgPSBjLmluc2Vy
dCh0KTsKLSAgICAgICAgICBjLmluc2VydChmaXJzdCwgbGFzdCk7Ci0KLSAgICAgICAgICBpZ25v
cmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoYyk7Ci0gICAgICAgICAgaWdub3JlX3VudXNlZF92
YXJpYWJsZV93YXJuaW5nKHBvcyk7Ci0gICAgICB9Ci0gICBwcml2YXRlOgotICAgICAgdHlwZW5h
bWUgQzo6aXRlcmF0b3IgcG9zOwotICAgICAgdHlwZW5hbWUgQzo6dmFsdWVfdHlwZSB0OwotICAg
ICAgdHlwZW5hbWUgQzo6dmFsdWVfdHlwZSogZmlyc3QsICpsYXN0OwotICB9OwotCi0gIEJPT1NU
X2NvbmNlcHQoU2ltcGxlQXNzb2NpYXRpdmVDb250YWluZXIsKEMpKQotICAgIDogQXNzb2NpYXRp
dmVDb250YWluZXI8Qz4KLSAgewotICAgICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShTaW1wbGVBc3Nv
Y2lhdGl2ZUNvbnRhaW5lcikKLSAgICAgIHsKLSAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEM6
OmtleV90eXBlIGtleV90eXBlOwotICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQzo6dmFsdWVf
dHlwZSB2YWx1ZV90eXBlOwotICAgICAgICAgIEJPT1NUX01QTF9BU1NFUlQoKGJvb3N0Ojppc19z
YW1lPGtleV90eXBlLHZhbHVlX3R5cGU+KSk7Ci0gICAgICB9Ci0gIH07Ci0KLSAgQk9PU1RfY29u
Y2VwdChQYWlyQXNzb2NpYXRpdmVDb250YWluZXIsKEMpKQotICAgIDogQXNzb2NpYXRpdmVDb250
YWluZXI8Qz4KLSAgewotICAgICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShQYWlyQXNzb2NpYXRpdmVD
b250YWluZXIpCi0gICAgICB7Ci0gICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDOjprZXlfdHlw
ZSBrZXlfdHlwZTsKLSAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEM6OnZhbHVlX3R5cGUgdmFs
dWVfdHlwZTsKLSAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEM6Om1hcHBlZF90eXBlIG1hcHBl
ZF90eXBlOwotICAgICAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPGNvbnN0IGtleV90eXBlLCBtYXBw
ZWRfdHlwZT4gcmVxdWlyZWRfdmFsdWVfdHlwZTsKLSAgICAgICAgICBCT09TVF9NUExfQVNTRVJU
KChib29zdDo6aXNfc2FtZTx2YWx1ZV90eXBlLHJlcXVpcmVkX3ZhbHVlX3R5cGU+KSk7Ci0gICAg
ICB9Ci0gIH07Ci0KLSAgQk9PU1RfY29uY2VwdChTb3J0ZWRBc3NvY2lhdGl2ZUNvbnRhaW5lciwo
QykpCi0gICAgOiBBc3NvY2lhdGl2ZUNvbnRhaW5lcjxDPgotICAgICwgUmV2ZXJzaWJsZUNvbnRh
aW5lcjxDPgotICB7Ci0gICAgICBCT09TVF9DT05DRVBUX1VTQUdFKFNvcnRlZEFzc29jaWF0aXZl
Q29udGFpbmVyKQotICAgICAgewotICAgICAgICAgIEMKLSAgICAgICAgICAgICAgYyhrYyksCi0g
ICAgICAgICAgICAgIGMyKGZpcnN0LCBsYXN0KSwKLSAgICAgICAgICAgICAgYzMoZmlyc3QsIGxh
c3QsIGtjKTsKLQotICAgICAgICAgIHAgPSBjLnVwcGVyX2JvdW5kKGspOwotICAgICAgICAgIHAg
PSBjLmxvd2VyX2JvdW5kKGspOwotICAgICAgICAgIHIgPSBjLmVxdWFsX3JhbmdlKGspOwotCi0g
ICAgICAgICAgYy5pbnNlcnQocCwgdCk7Ci0KLSAgICAgICAgICBpZ25vcmVfdW51c2VkX3Zhcmlh
YmxlX3dhcm5pbmcoYyk7Ci0gICAgICAgICAgaWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5n
KGMyKTsKLSAgICAgICAgICBpZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoYzMpOwotICAg
ICAgICAgIGNvbnN0X2NvbnN0cmFpbnRzKGMpOwotICAgICAgfQotCi0gICAgICB2b2lkIGNvbnN0
X2NvbnN0cmFpbnRzKGNvbnN0IEMmIGMpCi0gICAgICB7Ci0gICAgICAgICAga2MgPSBjLmtleV9j
b21wKCk7Ci0gICAgICAgICAgdmMgPSBjLnZhbHVlX2NvbXAoKTsKLQotICAgICAgICAgIGNwID0g
Yy51cHBlcl9ib3VuZChrKTsKLSAgICAgICAgICBjcCA9IGMubG93ZXJfYm91bmQoayk7Ci0gICAg
ICAgICAgY3IgPSBjLmVxdWFsX3JhbmdlKGspOwotICAgICAgfQotCi0gICBwcml2YXRlOgotICAg
ICAgdHlwZW5hbWUgQzo6a2V5X2NvbXBhcmUga2M7Ci0gICAgICB0eXBlbmFtZSBDOjp2YWx1ZV9j
b21wYXJlIHZjOwotICAgICAgdHlwZW5hbWUgQzo6dmFsdWVfdHlwZSB0OwotICAgICAgdHlwZW5h
bWUgQzo6a2V5X3R5cGUgazsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQzo6aXRlcmF0b3IgaXRl
cmF0b3I7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIEM6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0
ZXJhdG9yOwotCi0gICAgICB0eXBlZGVmIFNvcnRlZEFzc29jaWF0aXZlQ29udGFpbmVyIHNlbGY7
Ci0gICAgICBpdGVyYXRvciBwOwotICAgICAgY29uc3RfaXRlcmF0b3IgY3A7Ci0gICAgICBzdGQ6
OnBhaXI8dHlwZW5hbWUgc2VsZjo6aXRlcmF0b3IsdHlwZW5hbWUgc2VsZjo6aXRlcmF0b3I+IHI7
Ci0gICAgICBzdGQ6OnBhaXI8dHlwZW5hbWUgc2VsZjo6Y29uc3RfaXRlcmF0b3IsdHlwZW5hbWUg
c2VsZjo6Y29uc3RfaXRlcmF0b3I+IGNyOwotICAgICAgdHlwZW5hbWUgQzo6dmFsdWVfdHlwZSog
Zmlyc3QsICpsYXN0OwotICB9OwotCi0gIC8vIEhhc2hlZEFzc29jaWF0aXZlQ29udGFpbmVyCi0K
LSAgQk9PU1RfY29uY2VwdChDb2xsZWN0aW9uLChDKSkKLSAgewotICAgICAgQk9PU1RfQ09OQ0VQ
VF9VU0FHRShDb2xsZWN0aW9uKQotICAgICAgewotICAgICAgICBib29zdDo6ZnVuY3Rpb25fcmVx
dWlyZXM8Ym9vc3Q6OklucHV0SXRlcmF0b3JDb25jZXB0PGl0ZXJhdG9yPiA+KCk7Ci0gICAgICAg
IGJvb3N0OjpmdW5jdGlvbl9yZXF1aXJlczxib29zdDo6SW5wdXRJdGVyYXRvckNvbmNlcHQ8Y29u
c3RfaXRlcmF0b3I+ID4oKTsKLSAgICAgICAgYm9vc3Q6OmZ1bmN0aW9uX3JlcXVpcmVzPGJvb3N0
OjpDb3B5Q29uc3RydWN0aWJsZUNvbmNlcHQ8dmFsdWVfdHlwZT4gPigpOwotICAgICAgICBjb25z
dF9jb25zdHJhaW50cyhjKTsKLSAgICAgICAgaSA9IGMuYmVnaW4oKTsKLSAgICAgICAgaSA9IGMu
ZW5kKCk7Ci0gICAgICAgIGMuc3dhcChjKTsKLSAgICAgIH0KLQotICAgICAgdm9pZCBjb25zdF9j
b25zdHJhaW50cyhjb25zdCBDJiBjYykgewotICAgICAgICBjaSA9IGNjLmJlZ2luKCk7Ci0gICAg
ICAgIGNpID0gY2MuZW5kKCk7Ci0gICAgICAgIG4gPSBjYy5zaXplKCk7Ci0gICAgICAgIGIgPSBj
Yy5lbXB0eSgpOwotICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgQzo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwotICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDOjpp
dGVyYXRvciBpdGVyYXRvcjsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQzo6Y29uc3RfaXRlcmF0
b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIEM6OnJlZmVyZW5jZSBy
ZWZlcmVuY2U7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIEM6OmNvbnN0X3JlZmVyZW5jZSBjb25z
dF9yZWZlcmVuY2U7Ci0gICAgICAvLyB0eXBlZGVmIHR5cGVuYW1lIEM6OnBvaW50ZXIgcG9pbnRl
cjsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQzo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2Vf
dHlwZTsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKLQot
ICAgICAgQyBjOwotICAgICAgYm9vbCBiOwotICAgICAgaXRlcmF0b3IgaTsKLSAgICAgIGNvbnN0
X2l0ZXJhdG9yIGNpOwotICAgICAgc2l6ZV90eXBlIG47Ci0gIH07Ci19IC8vIG5hbWVzcGFjZSBi
b29zdAotCi0jaWYgKGRlZmluZWQgX01TQ19WRVIpCi0jIHByYWdtYSB3YXJuaW5nKCBwb3AgKQot
I2VuZGlmCi0KLSMgaW5jbHVkZSA8Ym9vc3QvY29uY2VwdC9kZXRhaWwvY29uY2VwdF91bmRlZi5o
cHA+Ci0KLSNlbmRpZiAvLyBCT09TVF9DT05DRVBUX0NIRUNLU19IUFAKLQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uZmlnLmhwcCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2NvbmZpZy5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OWJiMjdjZDVmZjY2MzBmM2ViNjE0NGJhM2FmZmI1
ZGNhYTc0ZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uZmlnLmhwcAorKysg
L2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8vICBCb29zdCBjb25maWcuaHBwIGNvbmZpZ3Vy
YXRpb24gaGVhZGVyIGZpbGUgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0KLS8v
ICAoQykgQ29weXJpZ2h0IEpvaG4gTWFkZG9jayAyMDAyLgotLy8gIFVzZSwgbW9kaWZpY2F0aW9u
IGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIAotLy8gIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIAotLy8gIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkKLQotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2NvbmZpZyBmb3IgbW9zdCBy
ZWNlbnQgdmVyc2lvbi4KLQotLy8gIEJvb3N0IGNvbmZpZy5ocHAgcG9saWN5IGFuZCByYXRpb25h
bGUgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiBtb3ZlZCB0bwotLy8gIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL2xpYnMvY29uZmlnCi0vLwotLy8gIENBVVRJT046IFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0
byBiZSBjb21wbGV0ZWx5IHN0YWJsZSAtCi0vLyAgICAgICAgICAgRE8gTk9UIE1PRElGWSBUSElT
IEZJTEUhCi0vLwotCi0jaWZuZGVmIEJPT1NUX0NPTkZJR19IUFAKLSNkZWZpbmUgQk9PU1RfQ09O
RklHX0hQUAotCi0vLyBpZiB3ZSBkb24ndCBoYXZlIGEgdXNlciBjb25maWcsIHRoZW4gdXNlIHRo
ZSBkZWZhdWx0IGxvY2F0aW9uOgotI2lmICFkZWZpbmVkKEJPT1NUX1VTRVJfQ09ORklHKSAmJiAh
ZGVmaW5lZChCT09TVF9OT19VU0VSX0NPTkZJRykKLSMgIGRlZmluZSBCT09TVF9VU0VSX0NPTkZJ
RyA8Ym9vc3QvY29uZmlnL3VzZXIuaHBwPgotI2lmIDAKLS8vIEZvciBkZXBlbmRlbmN5IHRyYWNr
ZXJzOgotIyAgaW5jbHVkZSA8Ym9vc3QvY29uZmlnL3VzZXIuaHBwPgotI2VuZGlmCi0jZW5kaWYK
LS8vIGluY2x1ZGUgaXQgZmlyc3Q6Ci0jaWZkZWYgQk9PU1RfVVNFUl9DT05GSUcKLSMgIGluY2x1
ZGUgQk9PU1RfVVNFUl9DT05GSUcKLSNlbmRpZgotCi0vLyBpZiB3ZSBkb24ndCBoYXZlIGEgY29t
cGlsZXIgY29uZmlnIHNldCwgdHJ5IGFuZCBmaW5kIG9uZToKLSNpZiAhZGVmaW5lZChCT09TVF9D
T01QSUxFUl9DT05GSUcpICYmICFkZWZpbmVkKEJPT1NUX05PX0NPTVBJTEVSX0NPTkZJRykgJiYg
IWRlZmluZWQoQk9PU1RfTk9fQ09ORklHKQotIyAgaW5jbHVkZSA8Ym9vc3QvY29uZmlnL3NlbGVj
dF9jb21waWxlcl9jb25maWcuaHBwPgotI2VuZGlmCi0vLyBpZiB3ZSBoYXZlIGEgY29tcGlsZXIg
Y29uZmlnLCBpbmNsdWRlIGl0IG5vdzoKLSNpZmRlZiBCT09TVF9DT01QSUxFUl9DT05GSUcKLSMg
IGluY2x1ZGUgQk9PU1RfQ09NUElMRVJfQ09ORklHCi0jZW5kaWYKLQotLy8gaWYgd2UgZG9uJ3Qg
aGF2ZSBhIHN0ZCBsaWJyYXJ5IGNvbmZpZyBzZXQsIHRyeSBhbmQgZmluZCBvbmU6Ci0jaWYgIWRl
ZmluZWQoQk9PU1RfU1RETElCX0NPTkZJRykgJiYgIWRlZmluZWQoQk9PU1RfTk9fU1RETElCX0NP
TkZJRykgJiYgIWRlZmluZWQoQk9PU1RfTk9fQ09ORklHKSAmJiBkZWZpbmVkKF9fY3BsdXNwbHVz
KQotIyAgaW5jbHVkZSA8Ym9vc3QvY29uZmlnL3NlbGVjdF9zdGRsaWJfY29uZmlnLmhwcD4KLSNl
bmRpZgotLy8gaWYgd2UgaGF2ZSBhIHN0ZCBsaWJyYXJ5IGNvbmZpZywgaW5jbHVkZSBpdCBub3c6
Ci0jaWZkZWYgQk9PU1RfU1RETElCX0NPTkZJRwotIyAgaW5jbHVkZSBCT09TVF9TVERMSUJfQ09O
RklHCi0jZW5kaWYKLQotLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhIHBsYXRmb3JtIGNvbmZpZyBzZXQs
IHRyeSBhbmQgZmluZCBvbmU6Ci0jaWYgIWRlZmluZWQoQk9PU1RfUExBVEZPUk1fQ09ORklHKSAm
JiAhZGVmaW5lZChCT09TVF9OT19QTEFURk9STV9DT05GSUcpICYmICFkZWZpbmVkKEJPT1NUX05P
X0NPTkZJRykKLSMgIGluY2x1ZGUgPGJvb3N0L2NvbmZpZy9zZWxlY3RfcGxhdGZvcm1fY29uZmln
LmhwcD4KLSNlbmRpZgotLy8gaWYgd2UgaGF2ZSBhIHBsYXRmb3JtIGNvbmZpZywgaW5jbHVkZSBp
dCBub3c6Ci0jaWZkZWYgQk9PU1RfUExBVEZPUk1fQ09ORklHCi0jICBpbmNsdWRlIEJPT1NUX1BM
QVRGT1JNX0NPTkZJRwotI2VuZGlmCi0KLS8vIGdldCBjb25maWcgc3VmZml4IGNvZGU6Ci0jaW5j
bHVkZSA8Ym9vc3QvY29uZmlnL3N1ZmZpeC5ocHA+Ci0KLSNpZmRlZiBCT09TVF9IQVNfUFJBR01B
X09OQ0UKLSNwcmFnbWEgb25jZQotI2VuZGlmCi0KLSNlbmRpZiAgLy8gQk9PU1RfQ09ORklHX0hQ
UApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
Y29uZmlnL2NvbXBpbGVyL2NsYW5nLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L2NvbmZpZy9jb21waWxlci9jbGFuZy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDE3NTIyOWM2NGFmYjkwOWM5ZTQ2NmQxMmJiYjlmMDZhYTA1NjVhMjUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uZmlnL2NvbXBpbGVyL2NsYW5nLmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vLyAoQykgQ29weXJpZ2h0IERvdWdsYXMg
R3JlZ29yIDIwMTAKLS8vCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBh
cmUgc3ViamVjdCB0byB0aGUKLS8vICBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZQotLy8gIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gIFNlZSBodHRwOi8v
d3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbi4KLQotLy8gQ2xhbmcgY29tcGls
ZXIgc2V0dXAuCi0KLSNkZWZpbmUgQk9PU1RfSEFTX1BSQUdNQV9PTkNFCi0KLS8vIERldGVjdGlu
ZyBgLWZtcy1leHRlbnNpb25gIGNvbXBpbGVyIGZsYWcgYXNzdW1pbmcgdGhhdCBfTVNDX1ZFUiBk
ZWZpbmVkIHdoZW4gdGhhdCBmbGFnIGlzIHVzZWQuCi0jaWYgZGVmaW5lZCAoX01TQ19WRVIpICYm
IChfX2NsYW5nX21ham9yX18gPiAzIHx8IChfX2NsYW5nX21ham9yX18gPT0gMyAmJiBfX2NsYW5n
X21pbm9yX18gPj0gNCkpCi0jICAgZGVmaW5lIEJPT1NUX0hBU19QUkFHTUFfREVURUNUX01JU01B
VENICi0jZW5kaWYKLQotLy8gV2hlbiBjb21waWxpbmcgd2l0aCBjbGFuZyBiZWZvcmUgX19oYXNf
ZXh0ZW5zaW9uIHdhcyBkZWZpbmVkLAotLy8gZXZlbiBpZiBvbmUgd3JpdGVzICdkZWZpbmVkKF9f
aGFzX2V4dGVuc2lvbikgJiYgX19oYXNfZXh0ZW5zaW9uKHh4eCknLAotLy8gY2xhbmcgcmVwb3J0
cyBhIGNvbXBpbGVyIGVycm9yLiBTbyB0aGUgb25seSB3b3JrYXJvdW5kIGZvdW5kIGlzOgotCi0j
aWZuZGVmIF9faGFzX2V4dGVuc2lvbgotI2RlZmluZSBfX2hhc19leHRlbnNpb24gX19oYXNfZmVh
dHVyZQotI2VuZGlmCi0KLSNpZm5kZWYgX19oYXNfYXR0cmlidXRlCi0jZGVmaW5lIF9faGFzX2F0
dHJpYnV0ZSh4KSAwCi0jZW5kaWYKLQotI2lmICFfX2hhc19mZWF0dXJlKGN4eF9leGNlcHRpb25z
KSAmJiAhZGVmaW5lZChCT09TVF9OT19FWENFUFRJT05TKQotIyAgZGVmaW5lIEJPT1NUX05PX0VY
Q0VQVElPTlMKLSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1cmUoY3h4X3J0dGkpICYmICFkZWZp
bmVkKEJPT1NUX05PX1JUVEkpCi0jICBkZWZpbmUgQk9PU1RfTk9fUlRUSQotI2VuZGlmCi0KLSNp
ZiAhX19oYXNfZmVhdHVyZShjeHhfcnR0aSkgJiYgIWRlZmluZWQoQk9PU1RfTk9fVFlQRUlEKQot
IyAgZGVmaW5lIEJPT1NUX05PX1RZUEVJRAotI2VuZGlmCi0KLSNpZiAhX19oYXNfZmVhdHVyZShj
eHhfdGhyZWFkX2xvY2FsKQotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX1RIUkVBRF9MT0NBTAot
I2VuZGlmCi0KLSNpZmRlZiBfX2lzX2lkZW50aWZpZXIKLSNpZiAhX19pc19pZGVudGlmaWVyKF9f
aW50NjQpICYmICFkZWZpbmVkKF9fR05VQ19fKQotIyAgZGVmaW5lIEJPT1NUX0hBU19NU19JTlQ2
NAotI2VuZGlmCi0jZW5kaWYKLQotI2lmIF9faGFzX2luY2x1ZGUoPHN0ZGludC5oPikKLSMgIGRl
ZmluZSBCT09TVF9IQVNfU1RESU5UX0gKLSNlbmRpZgotCi0KLSNkZWZpbmUgQk9PU1RfSEFTX05S
Vk8KLQotLy8gQnJhbmNoIHByZWRpY3Rpb24gaGludHMKLSNpZiAhZGVmaW5lZCAoX19jMl9fKSAm
JiBkZWZpbmVkKF9faGFzX2J1aWx0aW4pCi0jaWYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5fZXhw
ZWN0KQotI2RlZmluZSBCT09TVF9MSUtFTFkoeCkgX19idWlsdGluX2V4cGVjdCh4LCAxKQotI2Rl
ZmluZSBCT09TVF9VTkxJS0VMWSh4KSBfX2J1aWx0aW5fZXhwZWN0KHgsIDApCi0jZW5kaWYKLSNl
bmRpZgotCi0vLyBDbGFuZyBzdXBwb3J0cyAibG9uZyBsb25nIiBpbiBhbGwgY29tcGlsYXRpb24g
bW9kZXMuCi0jZGVmaW5lIEJPT1NUX0hBU19MT05HX0xPTkcKLQotLy8KLS8vIFdlIGRpc2FibGUg
dGhpcyBpZiB0aGUgY29tcGlsZXIgaXMgcmVhbGx5IG52Y2Mgd2l0aCBDKyswMyBhcyBpdAotLy8g
ZG9lc24ndCBhY3R1YWxseSBzdXBwb3J0IF9faW50MTI4IGFzIG9mIENVREFfVkVSU0lPTj03NTAw
Ci0vLyBldmVuIHRob3VnaCBpdCBkZWZpbmVzIF9fU0laRU9GX0lOVDEyOF9fLgotLy8gU2VlIGh0
dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC8xMDQxOAotLy8gICAgIGh0dHBz
Oi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC8xMTg1MgotLy8gT25seSByZS1lbmFi
bGUgdGhpcyBmb3IgbnZjYyBpZiB5b3UncmUgYWJzb2x1dGVseSBzdXJlCi0vLyBvZiB0aGUgY2ly
Y3Vtc3RhbmNlcyB1bmRlciB3aGljaCBpdCdzIHN1cHBvcnRlZC4KLS8vIFNpbWlsYXJseSBfX1NJ
WkVPRl9JTlQxMjhfXyBpcyBkZWZpbmVkIHdoZW4gdGFyZ2V0dGluZyBtc3ZjCi0vLyBjb21wYXRp
YmlsaXR5IGV2ZW4gdGhvdWdoIHRoZSByZXF1aXJlZCBzdXBwb3J0IGZ1bmN0aW9ucyBhcmUgYWJz
ZW50LgotLy8KLSNpZiBkZWZpbmVkKF9fQ1VEQUNDX18pCi0jICBpZiBkZWZpbmVkKEJPT1NUX0dD
Q19DWFgxMSkKLSMgICAgZGVmaW5lIEJPT1NUX05WQ0NfQ1hYMTEKLSMgIGVsc2UKLSMgICAgZGVm
aW5lIEJPT1NUX05WQ0NfQ1hYMDMKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19T
SVpFT0ZfSU5UMTI4X18pICYmICFkZWZpbmVkKEJPT1NUX05WQ0NfQ1hYMDMpICYmICFkZWZpbmVk
KF9NU0NfVkVSKQotIyAgZGVmaW5lIEJPT1NUX0hBU19JTlQxMjgKLSNlbmRpZgotCi0KLS8vCi0v
LyBEeW5hbWljIHNoYXJlZCBvYmplY3QgKERTTykgYW5kIGR5bmFtaWMtbGluayBsaWJyYXJ5IChE
TEwpIHN1cHBvcnQKLS8vCi0jaWYgIWRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX1dJTjMy
X18pICYmICFkZWZpbmVkKFdJTjMyKQotIyAgZGVmaW5lIEJPT1NUX1NZTUJPTF9FWFBPUlQgX19h
dHRyaWJ1dGVfXygoX192aXNpYmlsaXR5X18oImRlZmF1bHQiKSkpCi0jICBkZWZpbmUgQk9PU1Rf
U1lNQk9MX0lNUE9SVAotIyAgZGVmaW5lIEJPT1NUX1NZTUJPTF9WSVNJQkxFIF9fYXR0cmlidXRl
X18oKF9fdmlzaWJpbGl0eV9fKCJkZWZhdWx0IikpKQotI2VuZGlmCi0KLS8vCi0vLyBUaGUgQk9P
U1RfRkFMTFRIUk9VR0ggbWFjcm8gY2FuIGJlIHVzZWQgdG8gYW5ub3RhdGUgaW1wbGljaXQgZmFs
bC10aHJvdWdoCi0vLyBiZXR3ZWVuIHN3aXRjaCBsYWJlbHMuCi0vLwotI2lmIF9fY3BsdXNwbHVz
ID49IDIwMTEwM0wgJiYgZGVmaW5lZChfX2hhc193YXJuaW5nKQotIyAgaWYgX19oYXNfZmVhdHVy
ZShjeHhfYXR0cmlidXRlcykgJiYgX19oYXNfd2FybmluZygiLVdpbXBsaWNpdC1mYWxsdGhyb3Vn
aCIpCi0jICAgIGRlZmluZSBCT09TVF9GQUxMVEhST1VHSCBbW2NsYW5nOjpmYWxsdGhyb3VnaF1d
Ci0jICBlbmRpZgotI2VuZGlmCi0KLSNpZiAhX19oYXNfZmVhdHVyZShjeHhfYXV0b190eXBlKQot
IyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0FVVE9fREVDTEFSQVRJT05TCi0jICBkZWZpbmUgQk9P
U1RfTk9fQ1hYMTFfQVVUT19NVUxUSURFQ0xBUkFUSU9OUwotI2VuZGlmCi0KLS8vCi0vLyBDdXJy
ZW50bHkgY2xhbmcgb24gV2luZG93cyB1c2luZyBWQysrIFJUTCBkb2VzIG5vdCBzdXBwb3J0IEMr
KzExJ3MgY2hhcjE2X3Qgb3IgY2hhcjMyX3QKLS8vCi0jaWYgKGRlZmluZWQoX01TQ19WRVIpICYm
IChfTVNDX1ZFUiA8IDE5MDApKSB8fCAhKGRlZmluZWQoX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBY
X18pIHx8IF9fY3BsdXNwbHVzID49IDIwMTEwM0wpCi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hYMTFf
Q0hBUjE2X1QKLSMgIGRlZmluZSBCT09TVF9OT19DWFgxMV9DSEFSMzJfVAotI2VuZGlmCi0KLSNp
ZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTgwMCkgJiYgIWRlZmluZWQoX19H
TlVDX18pCi0jZGVmaW5lIEJPT1NUX0hBU19FWFBNMQotI2RlZmluZSBCT09TVF9IQVNfTE9HMVAK
LSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1cmUoY3h4X2NvbnN0ZXhwcikKLSMgIGRlZmluZSBC
T09TVF9OT19DWFgxMV9DT05TVEVYUFIKLSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1cmUoY3h4
X2RlY2x0eXBlKQotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0RFQ0xUWVBFCi0jZW5kaWYKLQot
I2lmICFfX2hhc19mZWF0dXJlKGN4eF9kZWNsdHlwZV9pbmNvbXBsZXRlX3JldHVybl90eXBlcykK
LSMgIGRlZmluZSBCT09TVF9OT19DWFgxMV9ERUNMVFlQRV9OMzI3NgotI2VuZGlmCi0KLSNpZiAh
X19oYXNfZmVhdHVyZShjeHhfZGVmYXVsdGVkX2Z1bmN0aW9ucykKLSMgIGRlZmluZSBCT09TVF9O
T19DWFgxMV9ERUZBVUxURURfRlVOQ1RJT05TCi0jZW5kaWYKLQotI2lmICFfX2hhc19mZWF0dXJl
KGN4eF9kZWxldGVkX2Z1bmN0aW9ucykKLSMgIGRlZmluZSBCT09TVF9OT19DWFgxMV9ERUxFVEVE
X0ZVTkNUSU9OUwotI2VuZGlmCi0KLSNpZiAhX19oYXNfZmVhdHVyZShjeHhfZXhwbGljaXRfY29u
dmVyc2lvbnMpCi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hYMTFfRVhQTElDSVRfQ09OVkVSU0lPTl9P
UEVSQVRPUlMKLSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1cmUoY3h4X2RlZmF1bHRfZnVuY3Rp
b25fdGVtcGxhdGVfYXJncykKLSMgIGRlZmluZSBCT09TVF9OT19DWFgxMV9GVU5DVElPTl9URU1Q
TEFURV9ERUZBVUxUX0FSR1MKLSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1cmUoY3h4X2dlbmVy
YWxpemVkX2luaXRpYWxpemVycykKLSMgIGRlZmluZSBCT09TVF9OT19DWFgxMV9IRFJfSU5JVElB
TElaRVJfTElTVAotI2VuZGlmCi0KLSNpZiAhX19oYXNfZmVhdHVyZShjeHhfbGFtYmRhcykKLSMg
IGRlZmluZSBCT09TVF9OT19DWFgxMV9MQU1CREFTCi0jZW5kaWYKLQotI2lmICFfX2hhc19mZWF0
dXJlKGN4eF9sb2NhbF90eXBlX3RlbXBsYXRlX2FyZ3MpCi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hY
MTFfTE9DQUxfQ0xBU1NfVEVNUExBVEVfUEFSQU1FVEVSUwotI2VuZGlmCi0KLSNpZiAhX19oYXNf
ZmVhdHVyZShjeHhfbm9leGNlcHQpCi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hYMTFfTk9FWENFUFQK
LSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1cmUoY3h4X251bGxwdHIpCi0jICBkZWZpbmUgQk9P
U1RfTk9fQ1hYMTFfTlVMTFBUUgotI2VuZGlmCi0KLSNpZiAhX19oYXNfZmVhdHVyZShjeHhfcmFu
Z2VfZm9yKQotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX1JBTkdFX0JBU0VEX0ZPUgotI2VuZGlm
Ci0KLSNpZiAhX19oYXNfZmVhdHVyZShjeHhfcmF3X3N0cmluZ19saXRlcmFscykKLSMgIGRlZmlu
ZSBCT09TVF9OT19DWFgxMV9SQVdfTElURVJBTFMKLSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1
cmUoY3h4X3JlZmVyZW5jZV9xdWFsaWZpZWRfZnVuY3Rpb25zKQotIyAgZGVmaW5lIEJPT1NUX05P
X0NYWDExX1JFRl9RVUFMSUZJRVJTCi0jZW5kaWYKLQotI2lmICFfX2hhc19mZWF0dXJlKGN4eF9n
ZW5lcmFsaXplZF9pbml0aWFsaXplcnMpCi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hYMTFfVU5JRklF
RF9JTklUSUFMSVpBVElPTl9TWU5UQVgKLSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1cmUoY3h4
X3J2YWx1ZV9yZWZlcmVuY2VzKQotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZF
UkVOQ0VTCi0jZW5kaWYKLQotI2lmICFfX2hhc19mZWF0dXJlKGN4eF9zdHJvbmdfZW51bXMpCi0j
ICBkZWZpbmUgQk9PU1RfTk9fQ1hYMTFfU0NPUEVEX0VOVU1TCi0jZW5kaWYKLQotI2lmICFfX2hh
c19mZWF0dXJlKGN4eF9zdGF0aWNfYXNzZXJ0KQotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX1NU
QVRJQ19BU1NFUlQKLSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1cmUoY3h4X2FsaWFzX3RlbXBs
YXRlcykKLSMgIGRlZmluZSBCT09TVF9OT19DWFgxMV9URU1QTEFURV9BTElBU0VTCi0jZW5kaWYK
LQotI2lmICFfX2hhc19mZWF0dXJlKGN4eF91bmljb2RlX2xpdGVyYWxzKQotIyAgZGVmaW5lIEJP
T1NUX05PX0NYWDExX1VOSUNPREVfTElURVJBTFMKLSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1
cmUoY3h4X3ZhcmlhZGljX3RlbXBsYXRlcykKLSMgIGRlZmluZSBCT09TVF9OT19DWFgxMV9WQVJJ
QURJQ19URU1QTEFURVMKLSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1cmUoY3h4X3VzZXJfbGl0
ZXJhbHMpCi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hYMTFfVVNFUl9ERUZJTkVEX0xJVEVSQUxTCi0j
ZW5kaWYKLQotI2lmICFfX2hhc19mZWF0dXJlKGN4eF9hbGlnbmFzKQotIyAgZGVmaW5lIEJPT1NU
X05PX0NYWDExX0FMSUdOQVMKLSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1cmUoY3h4X3RyYWls
aW5nX3JldHVybikKLSMgIGRlZmluZSBCT09TVF9OT19DWFgxMV9UUkFJTElOR19SRVNVTFRfVFlQ
RVMKLSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1cmUoY3h4X2lubGluZV9uYW1lc3BhY2VzKQot
IyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0lOTElORV9OQU1FU1BBQ0VTCi0jZW5kaWYKLQotI2lm
ICFfX2hhc19mZWF0dXJlKGN4eF9vdmVycmlkZV9jb250cm9sKQotIyAgZGVmaW5lIEJPT1NUX05P
X0NYWDExX0ZJTkFMCi0jZW5kaWYKLQotI2lmICEoX19oYXNfZmVhdHVyZShfX2N4eF9iaW5hcnlf
bGl0ZXJhbHNfXykgfHwgX19oYXNfZXh0ZW5zaW9uKF9fY3h4X2JpbmFyeV9saXRlcmFsc19fKSkK
LSMgIGRlZmluZSBCT09TVF9OT19DWFgxNF9CSU5BUllfTElURVJBTFMKLSNlbmRpZgotCi0jaWYg
IV9faGFzX2ZlYXR1cmUoX19jeHhfZGVjbHR5cGVfYXV0b19fKQotIyAgZGVmaW5lIEJPT1NUX05P
X0NYWDE0X0RFQ0xUWVBFX0FVVE8KLSNlbmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1cmUoX19jeHhf
YWdncmVnYXRlX25zZG1pX18pCi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hYMTRfQUdHUkVHQVRFX05T
RE1JCi0jZW5kaWYKLQotI2lmICFfX2hhc19mZWF0dXJlKF9fY3h4X2luaXRfY2FwdHVyZXNfXykK
LSMgIGRlZmluZSBCT09TVF9OT19DWFgxNF9JTklUSUFMSVpFRF9MQU1CREFfQ0FQVFVSRVMKLSNl
bmRpZgotCi0jaWYgIV9faGFzX2ZlYXR1cmUoX19jeHhfZ2VuZXJpY19sYW1iZGFzX18pCi0jICBk
ZWZpbmUgQk9PU1RfTk9fQ1hYMTRfR0VORVJJQ19MQU1CREFTCi0jZW5kaWYKLQotLy8gY2xhbmcg
PCAzLjUgaGFzIGEgZGVmZWN0IHdpdGggZGVwZW5kZW50IHR5cGUsIGxpa2UgZm9sbG93aW5nLgot
Ly8KLS8vICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLS8vICBjb25zdGV4cHIgdHlwZW5hbWUgZW5hYmxl
X2lmPHByZWQ8VD4gPjo6dHlwZSBmb28oVCAmKQotLy8gIHsgfSAvLyBlcnJvcjogbm8gcmV0dXJu
IHN0YXRlbWVudCBpbiBjb25zdGV4cHIgZnVuY3Rpb24KLS8vCi0vLyBUaGlzIGlzc3VlIGFsc28g
YWZmZWN0cyBDKysxMSBtb2RlLCBidXQgQysrMTEgY29uc3RleHByIHJlcXVpcmVzIHJldHVybiBz
dG10LgotLy8gVGhlcmVmb3JlIHdlIGRvbid0IGNhcmUgc3VjaCBjYXNlLgotLy8KLS8vIE5vdGUg
dGhhdCB3ZSBjYW4ndCBjaGVjayBDbGFuZyB2ZXJzaW9uIGRpcmVjdGx5IGFzIHRoZSBudW1iZXJp
bmcgc3lzdGVtIGNoYW5nZXMgZGVwZW5kaW5nIHdobydzCi0vLyBjcmVhdGluZyB0aGUgQ2xhbmcg
cmVsZWFzZSAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ib29zdG9yZy9jb25maWcvcHVsbC8zOSNp
c3N1ZWNvbW1lbnQtNTk5Mjc4NzMpCi0vLyBzbyBpbnN0ZWFkIHZlcmlmeSB0aGF0IHdlIGhhdmUg
YSBmZWF0dXJlIHRoYXQgd2FzIGludHJvZHVjZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB3b3JraW5n
IEMrKzE0Ci0vLyBjb25zdGV4cHIgKGdlbmVyaWMgbGFtYmRhJ3MgaW4gdGhpcyBjYXNlKToKLS8v
Ci0jaWYgIV9faGFzX2ZlYXR1cmUoX19jeHhfZ2VuZXJpY19sYW1iZGFzX18pIHx8ICFfX2hhc19m
ZWF0dXJlKF9fY3h4X3JlbGF4ZWRfY29uc3RleHByX18pCi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hY
MTRfQ09OU1RFWFBSCi0jZW5kaWYKLQotI2lmICFfX2hhc19mZWF0dXJlKF9fY3h4X3JldHVybl90
eXBlX2RlZHVjdGlvbl9fKQotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDE0X1JFVFVSTl9UWVBFX0RF
RFVDVElPTgotI2VuZGlmCi0KLSNpZiAhX19oYXNfZmVhdHVyZShfX2N4eF92YXJpYWJsZV90ZW1w
bGF0ZXNfXykKLSMgIGRlZmluZSBCT09TVF9OT19DWFgxNF9WQVJJQUJMRV9URU1QTEFURVMKLSNl
bmRpZgotCi0jaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCi0jZGVmaW5lIEJPT1NUX05PX0NYWDEx
X1NGSU5BRV9FWFBSCi0jZW5kaWYKLQotI2lmIF9fY3BsdXNwbHVzIDwgMjAxNDAwCi0vLyBBbGwg
dmVyc2lvbnMgd2l0aCBfX2NwbHVzcGx1cyBhYm92ZSB0aGlzIHZhbHVlIHNlZW0gdG8gc3VwcG9y
dCB0aGlzOgotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDE0X0RJR0lUX1NFUEFSQVRPUlMKLSNlbmRp
ZgotLy8KLS8vIF9fYnVpbHRpbl91bnJlYWNoYWJsZToKLSNpZiBkZWZpbmVkKF9faGFzX2J1aWx0
aW4pICYmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX3VucmVhY2hhYmxlKQotI2RlZmluZSBCT09T
VF9VTlJFQUNIQUJMRV9SRVRVUk4oeCkgX19idWlsdGluX3VucmVhY2hhYmxlKCk7Ci0jZW5kaWYK
LQotLy8gQ2xhbmcgaGFzIHN1cHBvcnRlZCB0aGUgJ3VudXNlZCcgYXR0cmlidXRlIHNpbmNlIHRo
ZSBmaXJzdCByZWxlYXNlLgotI2RlZmluZSBCT09TVF9BVFRSSUJVVEVfVU5VU0VEIF9fYXR0cmli
dXRlX18oKF9fdW51c2VkX18pKQotCi0jaWZuZGVmIEJPT1NUX0NPTVBJTEVSCi0jICBkZWZpbmUg
Qk9PU1RfQ09NUElMRVIgIkNsYW5nIHZlcnNpb24gIiBfX2NsYW5nX3ZlcnNpb25fXwotI2VuZGlm
Ci0KLS8vIE1hY3JvIHVzZWQgdG8gaWRlbnRpZnkgdGhlIENsYW5nIGNvbXBpbGVyLgotI2RlZmlu
ZSBCT09TVF9DTEFORyAxCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L2NvbmZpZy9ub190cjEvY21hdGguaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uZmlnL25vX3RyMS9jbWF0aC5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MjY4ZDg0MmE3OGMwNDUxMzYxNGRlYTkwODQ0NmIw
NjQ5NzU1ZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uZmlnL25vX3RyMS9j
bWF0aC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdo
dCBKb2huIE1hZGRvY2sgMjAwOC4KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0
aW9uIGFyZSBzdWJqZWN0IHRvIHRoZQotLy8gIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNp
b24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlCi0vLyAgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFRoZSBh
aW0gb2YgdGhpcyBoZWFkZXIgaXMganVzdCB0byBpbmNsdWRlIDxjbWF0aD4gYnV0IHRvIGRvCi0v
LyBzbyBpbiBhIHdheSB0aGF0IGRvZXMgbm90IHJlc3VsdCBpbiByZWN1cnNpdmUgaW5jbHVzaW9u
IG9mCi0vLyB0aGUgQm9vc3QgVFIxIGNvbXBvbmVudHMgaWYgYm9vc3QvdHIxL3RyMS9jbWF0aCBp
cyBpbiB0aGUKLS8vIGluY2x1ZGUgc2VhcmNoIHBhdGguICBXZSBoYXZlIHRvIGRvIHRoaXMgdG8g
YXZvaWQgY2lyY3VsYXIKLS8vIGRlcGVuZGVuY2llczoKLS8vCi0KLSNpZm5kZWYgQk9PU1RfQ09O
RklHX0NNQVRICi0jICBkZWZpbmUgQk9PU1RfQ09ORklHX0NNQVRICi0KLSMgIGlmbmRlZiBCT09T
VF9UUjFfTk9fUkVDVVJTSU9OCi0jICAgICBkZWZpbmUgQk9PU1RfVFIxX05PX1JFQ1VSU0lPTgot
IyAgICAgZGVmaW5lIEJPT1NUX0NPTkZJR19OT19DTUFUSF9SRUNVUlNJT04KLSMgIGVuZGlmCi0K
LSMgIGluY2x1ZGUgPGNtYXRoPgotCi0jICBpZmRlZiBCT09TVF9DT05GSUdfTk9fQ01BVEhfUkVD
VVJTSU9OCi0jICAgICB1bmRlZiBCT09TVF9UUjFfTk9fUkVDVVJTSU9OCi0jICAgICB1bmRlZiBC
T09TVF9DT05GSUdfTk9fQ01BVEhfUkVDVVJTSU9OCi0jICBlbmRpZgotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2NvbmZpZy9u
b190cjEvY29tcGxleC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9jb25maWcvbm9fdHIxL2NvbXBsZXguaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjYTIwMDkyMmIzY2I4OWU5YzhkZmQ1N2Q4NmM5NTBlYTM0Yjg4YTJjLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2NvbmZpZy9ub190cjEvY29tcGxleC5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSwyOCArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCBKb2huIE1hZGRvY2sgMjAw
NS4KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRv
IHRoZQotLy8gIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29t
cGFueWluZyBmaWxlCi0vLyAgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFRoZSBhaW0gb2YgdGhpcyBoZWFkZXIg
aXMganVzdCB0byBpbmNsdWRlIDxjb21wbGV4PiBidXQgdG8gZG8KLS8vIHNvIGluIGEgd2F5IHRo
YXQgZG9lcyBub3QgcmVzdWx0IGluIHJlY3Vyc2l2ZSBpbmNsdXNpb24gb2YKLS8vIHRoZSBCb29z
dCBUUjEgY29tcG9uZW50cyBpZiBib29zdC90cjEvdHIxL2NvbXBsZXggaXMgaW4gdGhlCi0vLyBp
bmNsdWRlIHNlYXJjaCBwYXRoLiAgV2UgaGF2ZSB0byBkbyB0aGlzIHRvIGF2b2lkIGNpcmN1bGFy
Ci0vLyBkZXBlbmRlbmNpZXM6Ci0vLwotCi0jaWZuZGVmIEJPT1NUX0NPTkZJR19DT01QTEVYCi0j
ICBkZWZpbmUgQk9PU1RfQ09ORklHX0NPTVBMRVgKLQotIyAgaWZuZGVmIEJPT1NUX1RSMV9OT19S
RUNVUlNJT04KLSMgICAgIGRlZmluZSBCT09TVF9UUjFfTk9fUkVDVVJTSU9OCi0jICAgICBkZWZp
bmUgQk9PU1RfQ09ORklHX05PX0NPTVBMRVhfUkVDVVJTSU9OCi0jICBlbmRpZgotCi0jICBpbmNs
dWRlIDxjb21wbGV4PgotCi0jICBpZmRlZiBCT09TVF9DT05GSUdfTk9fQ09NUExFWF9SRUNVUlNJ
T04KLSMgICAgIHVuZGVmIEJPT1NUX1RSMV9OT19SRUNVUlNJT04KLSMgICAgIHVuZGVmIEJPT1NU
X0NPTkZJR19OT19DT01QTEVYX1JFQ1VSU0lPTgotIyAgZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb25maWcvcGxh
dGZvcm0vbWFjb3MuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvY29uZmlnL3BsYXRmb3JtL21hY29zLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWJlNGUzYjNkYTJmZjQ4MTQ5YzA0MWFiMjZmMmQyNWJkOTBhMDVjMS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9jb25maWcvcGxhdGZvcm0vbWFjb3MuaHBwCisrKyAvZGV2L251
bGwKQEAgLTEsODcgKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgSm9obiBNYWRkb2NrIDIwMDEg
LSAyMDAzLiAKLS8vICAoQykgQ29weXJpZ2h0IERhcmluIEFkbGVyIDIwMDEgLSAyMDAyLiAKLS8v
ICAoQykgQ29weXJpZ2h0IEJpbGwgS2VtcGYgMjAwMi4gCi0vLyAgVXNlLCBtb2RpZmljYXRpb24g
YW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgCi0vLyAgQm9vc3QgU29mdHdhcmUg
TGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgCi0vLyAgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0
KQotCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9u
LgotCi0vLyAgTWFjIE9TIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zOgotCi0jZGVmaW5lIEJPT1NU
X1BMQVRGT1JNICJNYWMgT1MiCi0KLSNpZiBfX01BQ0hfXyAmJiAhZGVmaW5lZChfTVNMX1VTSU5H
X01TTF9DKQotCi0vLyBVc2luZyB0aGUgTWFjIE9TIFggc3lzdGVtIEJTRC1zdHlsZSBDIGxpYnJh
cnkuCi0KLSMgIGlmbmRlZiBCT09TVF9IQVNfVU5JU1REX0gKLSMgICAgZGVmaW5lIEJPT1NUX0hB
U19VTklTVERfSAotIyAgZW5kaWYKLS8vCi0vLyBCZWdpbiBieSBpbmNsdWRpbmcgb3VyIGJvaWxl
cnBsYXRlIGNvZGUgZm9yIFBPU0lYCi0vLyBmZWF0dXJlIGRldGVjdGlvbiwgdGhpcyBpcyBzYWZl
IGV2ZW4gd2hlbiB1c2luZwotLy8gdGhlIE1TTCBhcyBNZXRyb3dlcmtzIHN1cHBseSB0aGVpciBv
d24gPHVuaXN0ZC5oPgotLy8gdG8gcmVwbGFjZSB0aGUgcGxhdGZvcm0tbmF0aXZlIEJTRCBvbmUu
IEcrKyB1c2VycwotLy8gc2hvdWxkIGFsc28gYWx3YXlzIGJlIGFibGUgdG8gZG8gdGhpcyBvbiBN
YXhPUyBYLgotLy8KLSMgIGluY2x1ZGUgPGJvb3N0L2NvbmZpZy9wb3NpeF9mZWF0dXJlcy5ocHA+
Ci0jICBpZm5kZWYgQk9PU1RfSEFTX1NURElOVF9ICi0jICAgICBkZWZpbmUgQk9PU1RfSEFTX1NU
RElOVF9ICi0jICBlbmRpZgotCi0vLwotLy8gQlNEIHJ1bnRpbWUgaGFzIHB0aHJlYWRzLCBzaWdh
Y3Rpb24sIHNjaGVkX3lpZWxkIGFuZCBnZXR0aW1lb2ZkYXksCi0vLyBvZiB0aGVzZSBvbmx5IHB0
aHJlYWRzIGFyZSBhZHZlcnRpc2VkIGluIDx1bmlzdGQuaD4sIHNvIHNldCB0aGUgCi0vLyBvdGhl
ciBvcHRpb25zIGV4cGxpY2l0bHk6Ci0vLwotIyAgZGVmaW5lIEJPT1NUX0hBU19TQ0hFRF9ZSUVM
RAotIyAgZGVmaW5lIEJPT1NUX0hBU19HRVRUSU1FT0ZEQVkKLSMgIGRlZmluZSBCT09TVF9IQVNf
U0lHQUNUSU9OCi0KLSMgIGlmIChfX0dOVUNfXyA8IDMpICYmICFkZWZpbmVkKCBfX0FQUExFX0ND
X18pCi0KLS8vIEdDQyBzdHJhbmdlICJpZ25vcmUgc3RkIiBtb2RlIHdvcmtzIGJldHRlciBpZiB5
b3UgcHJldGVuZCBldmVyeXRoaW5nCi0vLyBpcyBpbiB0aGUgc3RkIG5hbWVzcGFjZSwgZm9yIHRo
ZSBtb3N0IHBhcnQuCi0KLSMgICAgZGVmaW5lIEJPT1NUX05PX1NURENfTkFNRVNQQUNFCi0jICBl
bmRpZgotCi0jICBpZiAoX19HTlVDX18gPj0gNCkKLQotLy8gQm90aCBnY2MgYW5kIGludGVsIHJl
cXVpcmUgdGhlc2UuICAKLSMgICAgZGVmaW5lIEJPT1NUX0hBU19QVEhSRUFEX01VVEVYQVRUUl9T
RVRUWVBFCi0jICAgIGRlZmluZSBCT09TVF9IQVNfTkFOT1NMRUVQCi0KLSMgIGVuZGlmCi0KLSNl
bHNlCi0KLS8vIFVzaW5nIHRoZSBNU0wgQyBsaWJyYXJ5LgotCi0vLyBXZSB3aWxsIGV2ZW50dWFs
bHkgc3VwcG9ydCB0aHJlYWRzIGluIG5vbi1DYXJib24gYnVpbGRzLCBidXQgd2UgZG8KLS8vIG5v
dCBzdXBwb3J0IHRoaXMgeWV0LgotIyAgaWYgKCBkZWZpbmVkKFRBUkdFVF9BUElfTUFDX0NBUkJP
TikgJiYgVEFSR0VUX0FQSV9NQUNfQ0FSQk9OICkgfHwgKCBkZWZpbmVkKFRBUkdFVF9DQVJCT04p
ICYmIFRBUkdFVF9DQVJCT04gKQotCi0jICBpZiAhZGVmaW5lZChCT09TVF9IQVNfUFRIUkVBRFMp
Ci0vLyBNUFRhc2tzIHN1cHBvcnQgaXMgZGVwcmVjYXRlZC9yZW1vdmVkIGZyb20gQm9vc3Q6Ci0v
LyMgICAgZGVmaW5lIEJPT1NUX0hBU19NUFRBU0tTCi0jICBlbGlmICggX19kZXN0X29zID09IF9f
bWFjX29zX3ggKQotLy8gV2UgYXJlIGRvaW5nIGEgQ2FyYm9uL01hY2gtTy9NU0wgYnVpbGQgd2hp
Y2ggaGFzIHB0aHJlYWRzLCBidXQgb25seSB0aGUKLS8vIGdldHRpbWVvZmRheSBhbmQgbm8gcG9z
aXguCi0jICBkZWZpbmUgQk9PU1RfSEFTX0dFVFRJTUVPRkRBWQotIyAgZW5kaWYKLQotI2lmZGVm
IEJPT1NUX0hBU19QVEhSRUFEUwotIyAgZGVmaW5lIEJPT1NUX0hBU19USFJFQURTCi0jZW5kaWYK
LQotLy8gVGhlIHJlbW90ZSBjYWxsIG1hbmFnZXIgZGVwZW5kcyBvbiB0aGlzLgotIyAgICBkZWZp
bmUgQk9PU1RfQklORF9FTkFCTEVfUEFTQ0FMCi0KLSMgIGVuZGlmCi0KLSNlbmRpZgotCi0KLQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29u
ZmlnL3Bvc2l4X2ZlYXR1cmVzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L2NvbmZpZy9wb3NpeF9mZWF0dXJlcy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQxMjk1NDc5N2Y5NjEyMTQ4YmNjODM3NmE5ZjgyNGVhZWM5ZDIyYzEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uZmlnL3Bvc2l4X2ZlYXR1cmVzLmhwcAorKysg
L2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IEpvaG4gTWFkZG9j
ayAyMDAxIC0gMjAwMy4gCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBh
cmUgc3ViamVjdCB0byB0aGUgCi0vLyAgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgCi0vLyAgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkg
YXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0KLS8vICBTZWUgaHR0
cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24uCi0KLS8vIEFsbCBQT1NJ
WCBmZWF0dXJlIHRlc3RzIGdvIGluIHRoaXMgZmlsZSwKLS8vIE5vdGUgdGhhdCB3ZSB0ZXN0IF9Q
T1NJWF9DX1NPVVJDRSBhbmQgX1hPUEVOX1NPVVJDRSBhcyB3ZWxsCi0vLyBfUE9TSVhfVkVSU0lP
TiBhbmQgX1hPUEVOX1ZFUlNJT046IG9uIHNvbWUgc3lzdGVtcyBQT1NJWCBBUEkncwotLy8gbWF5
IGJlIHByZXNlbnQgYnV0IG5vbmUtZnVuY3Rpb25hbCB1bmxlc3MgX1BPU0lYX0NfU09VUkNFIGFu
ZAotLy8gX1hPUEVOX1NPVVJDRSBoYXZlIGJlZW4gZGVmaW5lZCB0byB0aGUgcmlnaHQgdmFsdWUg
KGl0J3MgdXAKLS8vIHRvIHRoZSB1c2VyIHRvIGRvIHRoaXMgKmJlZm9yZSogaW5jbHVkaW5nIGFu
eSBoZWFkZXIsIGFsdGhvdWdoCi0vLyBpbiBtb3N0IGNhc2VzIHRoZSBjb21waWxlciB3aWxsIGRv
IHRoaXMgZm9yIHlvdSkuCi0KLSMgIGlmIGRlZmluZWQoQk9PU1RfSEFTX1VOSVNURF9IKQotIyAg
ICAgaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSAgICAgIC8vIFhPcGVuIGhhcyA8bmxfdHlwZXMuaD4s
IGJ1dCBpcyB0aGlzIHRoZSBjb3JyZWN0IHZlcnNpb24gY2hlY2s/Ci0jICAgICBpZiBkZWZpbmVk
KF9YT1BFTl9WRVJTSU9OKSAmJiAoX1hPUEVOX1ZFUlNJT04gPj0gMykKLSMgICAgICAgIGRlZmlu
ZSBCT09TVF9IQVNfTkxfVFlQRVNfSAotIyAgICAgZW5kaWYKLQotICAgICAgLy8gUE9TSVggdmVy
c2lvbiA2IHJlcXVpcmVzIDxzdGRpbnQuaD4KLSMgICAgIGlmIGRlZmluZWQoX1BPU0lYX1ZFUlNJ
T04pICYmIChfUE9TSVhfVkVSU0lPTiA+PSAyMDAxMDApCi0jICAgICAgICBkZWZpbmUgQk9PU1Rf
SEFTX1NURElOVF9ICi0jICAgICBlbmRpZgotCi0gICAgICAvLyBQT1NJWCB2ZXJzaW9uIDIgcmVx
dWlyZXMgPGRpcmVudC5oPgotIyAgICAgaWYgZGVmaW5lZChfUE9TSVhfVkVSU0lPTikgJiYgKF9Q
T1NJWF9WRVJTSU9OID49IDE5OTAwOUwpCi0jICAgICAgICBkZWZpbmUgQk9PU1RfSEFTX0RJUkVO
VF9ICi0jICAgICBlbmRpZgotCi0gICAgICAvLyBQT1NJWCB2ZXJzaW9uIDMgcmVxdWlyZXMgPHNp
Z25hbC5oPiB0byBoYXZlIHNpZ2FjdGlvbjoKLSMgICAgIGlmIGRlZmluZWQoX1BPU0lYX1ZFUlNJ
T04pICYmIChfUE9TSVhfVkVSU0lPTiA+PSAxOTk1MDZMKQotIyAgICAgICAgZGVmaW5lIEJPT1NU
X0hBU19TSUdBQ1RJT04KLSMgICAgIGVuZGlmCi0gICAgICAvLyBQT1NJWCBkZWZpbmVzIF9QT1NJ
WF9USFJFQURTID4gMCBmb3IgcHRocmVhZCBzdXBwb3J0LAotICAgICAgLy8gaG93ZXZlciBzb21l
IHBsYXRmb3JtcyBkZWZpbmUgX1BPU0lYX1RIUkVBRFMgd2l0aG91dAotICAgICAgLy8gYSB2YWx1
ZSwgaGVuY2UgdGhlIChfUE9TSVhfVEhSRUFEUyswID49IDApIGNoZWNrLgotICAgICAgLy8gU3Ry
aWN0bHkgc3BlYWtpbmcgdGhpcyBtYXkgY2F0Y2ggcGxhdGZvcm1zIHdpdGggYQotICAgICAgLy8g
bm9uLWZ1bmN0aW9uaW5nIHN0dWIgPHB0aHJlYWRzLmg+LCBidXQgc3VjaCBvY2N1cnJlbmNlcyBz
aG91bGQKLSAgICAgIC8vIG9jY3VyIHZlcnkgcmFyZWx5IGlmIGF0IGFsbC4KLSMgICAgIGlmIGRl
ZmluZWQoX1BPU0lYX1RIUkVBRFMpICYmIChfUE9TSVhfVEhSRUFEUyswID49IDApICYmICFkZWZp
bmVkKEJPT1NUX0hBU19XSU5USFJFQURTKSAmJiAhZGVmaW5lZChCT09TVF9IQVNfTVBUQVNLUykK
LSMgICAgICAgIGRlZmluZSBCT09TVF9IQVNfUFRIUkVBRFMKLSMgICAgIGVuZGlmCi0KLSAgICAg
IC8vIEJPT1NUX0hBU19OQU5PU0xFRVA6Ci0gICAgICAvLyBUaGlzIGlzIHByZWRpY2F0ZWQgb24g
X1BPU0lYX1RJTUVSUyBvciBfWE9QRU5fUkVBTFRJTUU6Ci0jICAgICBpZiAoZGVmaW5lZChfUE9T
SVhfVElNRVJTKSAmJiAoX1BPU0lYX1RJTUVSUyswID49IDApKSBcCi0gICAgICAgICAgICAgfHwg
KGRlZmluZWQoX1hPUEVOX1JFQUxUSU1FKSAmJiAoX1hPUEVOX1JFQUxUSU1FKzAgPj0gMCkpCi0j
ICAgICAgICBkZWZpbmUgQk9PU1RfSEFTX05BTk9TTEVFUAotIyAgICAgZW5kaWYKLQotICAgICAg
Ly8gQk9PU1RfSEFTX0NMT0NLX0dFVFRJTUU6Ci0gICAgICAvLyBUaGlzIGlzIHByZWRpY2F0ZWQg
b24gX1BPU0lYX1RJTUVSUyAoYWxzbyBvbiBfWE9QRU5fUkVBTFRJTUUKLSAgICAgIC8vIGJ1dCBh
dCBsZWFzdCBvbmUgcGxhdGZvcm0gLSBsaW51eCAtIGRlZmluZXMgdGhhdCBmbGFnIHdpdGhvdXQK
LSAgICAgIC8vIGRlZmluaW5nIGNsb2NrX2dldHRpbWUpOgotIyAgICAgaWYgKGRlZmluZWQoX1BP
U0lYX1RJTUVSUykgJiYgKF9QT1NJWF9USU1FUlMrMCA+PSAwKSkKLSMgICAgICAgIGRlZmluZSBC
T09TVF9IQVNfQ0xPQ0tfR0VUVElNRQotIyAgICAgZW5kaWYKLQotICAgICAgLy8gQk9PU1RfSEFT
X1NDSEVEX1lJRUxEOgotICAgICAgLy8gVGhpcyBpcyBwcmVkaWNhdGVkIG9uIF9QT1NJWF9QUklP
UklUWV9TQ0hFRFVMSU5HIG9yCi0gICAgICAvLyBvbiBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1ND
SEVEVUxJTkcgb3Igb24gX1hPUEVOX1JFQUxUSU1FLgotIyAgICAgaWYgZGVmaW5lZChfUE9TSVhf
UFJJT1JJVFlfU0NIRURVTElORykgJiYgKF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HKzAgPiAw
KVwKLSAgICAgICAgICAgIHx8IChkZWZpbmVkKF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURV
TElORykgJiYgKF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORyswID4gMCkpXAotICAg
ICAgICAgICAgfHwgKGRlZmluZWQoX1hPUEVOX1JFQUxUSU1FKSAmJiAoX1hPUEVOX1JFQUxUSU1F
KzAgPj0gMCkpCi0jICAgICAgICBkZWZpbmUgQk9PU1RfSEFTX1NDSEVEX1lJRUxECi0jICAgICBl
bmRpZgotCi0gICAgICAvLyBCT09TVF9IQVNfR0VUVElNRU9GREFZOgotICAgICAgLy8gQk9PU1Rf
SEFTX1BUSFJFQURfTVVURVhBVFRSX1NFVFRZUEU6Ci0gICAgICAvLyBUaGVzZSBhcmUgcHJlZGlj
YXRlZCBvbiBfWE9QRU5fVkVSU0lPTiwgYW5kIGFwcGVhcnMgdG8gYmUgZmlyc3QgcmVsZWFzZWQK
LSAgICAgIC8vIGluIGlzc3VlIDQsIHZlcnNpb24gMiAoX1hPUEVOX1ZFUlNJT04gPiA1MDApLgot
ICAgICAgLy8gTGlrZXdpc2UgZm9yIHRoZSBmdW5jdGlvbnMgbG9nMXAgYW5kIGV4cG0xLgotIyAg
ICAgaWYgZGVmaW5lZChfWE9QRU5fVkVSU0lPTikgJiYgKF9YT1BFTl9WRVJTSU9OKzAgPj0gNTAw
KQotIyAgICAgICAgZGVmaW5lIEJPT1NUX0hBU19HRVRUSU1FT0ZEQVkKLSMgICAgICAgIGlmIGRl
ZmluZWQoX1hPUEVOX1NPVVJDRSkgJiYgKF9YT1BFTl9TT1VSQ0UrMCA+PSA1MDApCi0jICAgICAg
ICAgICBkZWZpbmUgQk9PU1RfSEFTX1BUSFJFQURfTVVURVhBVFRSX1NFVFRZUEUKLSMgICAgICAg
IGVuZGlmCi0jICAgICAgICBpZm5kZWYgQk9PU1RfSEFTX0xPRzFQCi0jICAgICAgICAgICBkZWZp
bmUgQk9PU1RfSEFTX0xPRzFQCi0jICAgICAgICBlbmRpZgotIyAgICAgICAgaWZuZGVmIEJPT1NU
X0hBU19FWFBNMQotIyAgICAgICAgICAgZGVmaW5lIEJPT1NUX0hBU19FWFBNMQotIyAgICAgICAg
ZW5kaWYKLSMgICAgIGVuZGlmCi0KLSMgIGVuZGlmCi0KLQotCi0KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2NvbmZpZy9zZWxlY3RfY29tcGls
ZXJfY29uZmlnLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L2NvbmZpZy9zZWxlY3RfY29tcGlsZXJfY29uZmlnLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggN2E3NTcwODQyODFlNjMyNzIzMWZjNTdiMWVkMTdjZGMwMWJjODc0My4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb25maWcvc2VsZWN0X2NvbXBpbGVyX2NvbmZpZy5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLy8gIEJvb3N0IGNvbXBpbGVyIGNv
bmZpZ3VyYXRpb24gc2VsZWN0aW9uIGhlYWRlciBmaWxlCi0KLS8vICAoQykgQ29weXJpZ2h0IEpv
aG4gTWFkZG9jayAyMDAxIC0gMjAwMy4gCi0vLyAgKEMpIENvcHlyaWdodCBNYXJ0aW4gV2lsbGUg
MjAwMy4KLS8vICAoQykgQ29weXJpZ2h0IEd1aWxsYXVtZSBNZWxxdWlvbmQgMjAwMy4KLS8vCi0v
LyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24g
MS4wLgotLy8gIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkg
YXQKLS8vICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyAgU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnLyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbi4KLQotLy8gbG9j
YXRlIHdoaWNoIGNvbXBpbGVyIHdlIGFyZSB1c2luZyBhbmQgZGVmaW5lCi0vLyBCT09TVF9DT01Q
SUxFUl9DT05GSUcgYXMgbmVlZGVkOiAKLQotI2lmIGRlZmluZWQgX19DVURBQ0NfXwotLy8gIE5W
SURJQSBDVURBIEMrKyBjb21waWxlciBmb3IgR1BVCi0jICAgaW5jbHVkZSAiYm9vc3QvY29uZmln
L2NvbXBpbGVyL252Y2MuaHBwIgotCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19HQ0NYTUxfXykK
LS8vIEdDQy1YTUwgZW11bGF0ZXMgb3RoZXIgY29tcGlsZXJzLCBpdCBoYXMgdG8gYXBwZWFyIGZp
cnN0IGhlcmUhCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBJTEVSX0NPTkZJRyAiYm9vc3QvY29uZmln
L2NvbXBpbGVyL2djY194bWwuaHBwIgotCi0jZWxpZiBkZWZpbmVkKF9DUkFZQykKLS8vIEVERyBi
YXNlZCBDcmF5IGNvbXBpbGVyOgotIyAgIGRlZmluZSBCT09TVF9DT01QSUxFUl9DT05GSUcgImJv
b3N0L2NvbmZpZy9jb21waWxlci9jcmF5LmhwcCIKLQotI2VsaWYgZGVmaW5lZCBfX0NPTU9fXwot
Ly8gIENvbWVhdSBDKysKLSMgICBkZWZpbmUgQk9PU1RfQ09NUElMRVJfQ09ORklHICJib29zdC9j
b25maWcvY29tcGlsZXIvY29tZWF1LmhwcCIKLQotI2VsaWYgZGVmaW5lZChfX1BBVEhTQ0FMRV9f
KSAmJiAoX19QQVRIQ0NfXyA+PSA0KQotLy8gUGF0aFNjYWxlIEVLT1BhdGggY29tcGlsZXIgKGhh
cyB0byBjb21lIGJlZm9yZSBjbGFuZyBhbmQgZ2NjKQotIyAgIGRlZmluZSBCT09TVF9DT01QSUxF
Ul9DT05GSUcgImJvb3N0L2NvbmZpZy9jb21waWxlci9wYXRoc2NhbGUuaHBwIgotCi0jZWxpZiBk
ZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpIHx8IGRlZmluZWQoX19JQ0wpIHx8IGRlZmluZWQoX19J
Q0MpIHx8IGRlZmluZWQoX19FQ0MpCi0vLyAgSW50ZWwKLSMgICBkZWZpbmUgQk9PU1RfQ09NUElM
RVJfQ09ORklHICJib29zdC9jb25maWcvY29tcGlsZXIvaW50ZWwuaHBwIgotCi0jZWxpZiBkZWZp
bmVkIF9fY2xhbmdfXyAmJiAhZGVmaW5lZChfX0NVREFDQ19fKSAmJiAhZGVmaW5lZChfX2libXhs
X18pCi0vLyB3aGVuIHVzaW5nIGNsYW5nIGFuZCBjdWRhIGF0IHNhbWUgdGltZSwgeW91IHdhbnQg
dG8gYXBwZWFyIGFzIGdjYwotLy8gIENsYW5nIEMrKyBlbXVsYXRlcyBHQ0MsIHNvIGl0IGhhcyB0
byBhcHBlYXIgZWFybHkuCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBJTEVSX0NPTkZJRyAiYm9vc3Qv
Y29uZmlnL2NvbXBpbGVyL2NsYW5nLmhwcCIKLQotI2VsaWYgZGVmaW5lZCBfX0RNQ19fCi0vLyAg
RGlnaXRhbCBNYXJzIEMrKwotIyAgIGRlZmluZSBCT09TVF9DT01QSUxFUl9DT05GSUcgImJvb3N0
L2NvbmZpZy9jb21waWxlci9kaWdpdGFsbWFycy5ocHAiCi0KLSMgZWxpZiBkZWZpbmVkKF9fR05V
Q19fKSAmJiAhZGVmaW5lZChfX2libXhsX18pCi0vLyAgR05VIEMrKzoKLSMgICBkZWZpbmUgQk9P
U1RfQ09NUElMRVJfQ09ORklHICJib29zdC9jb25maWcvY29tcGlsZXIvZ2NjLmhwcCIKLQotI2Vs
aWYgZGVmaW5lZCBfX0tDQwotLy8gIEthaSBDKysKLSMgICBkZWZpbmUgQk9PU1RfQ09NUElMRVJf
Q09ORklHICJib29zdC9jb25maWcvY29tcGlsZXIva2FpLmhwcCIKLQotI2VsaWYgZGVmaW5lZCBf
X3NnaQotLy8gIFNHSSBNSVBTcHJvIEMrKwotIyAgIGRlZmluZSBCT09TVF9DT01QSUxFUl9DT05G
SUcgImJvb3N0L2NvbmZpZy9jb21waWxlci9zZ2lfbWlwc3Byby5ocHAiCi0KLSNlbGlmIGRlZmlu
ZWQgX19ERUNDWFgKLS8vICBDb21wYXEgVHJ1NjQgVW5peCBjeHgKLSMgICBkZWZpbmUgQk9PU1Rf
Q09NUElMRVJfQ09ORklHICJib29zdC9jb25maWcvY29tcGlsZXIvY29tcGFxX2N4eC5ocHAiCi0K
LSNlbGlmIGRlZmluZWQgX19naHMKLS8vICBHcmVlbmhpbGxzIEMrKwotIyAgIGRlZmluZSBCT09T
VF9DT01QSUxFUl9DT05GSUcgImJvb3N0L2NvbmZpZy9jb21waWxlci9ncmVlbmhpbGxzLmhwcCIK
LQotI2VsaWYgZGVmaW5lZCBfX0NPREVHRUFSQ19fCi0vLyAgQ29kZUdlYXIgLSBtdXN0IGJlIGNo
ZWNrZWQgZm9yIGJlZm9yZSBCb3JsYW5kCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBJTEVSX0NPTkZJ
RyAiYm9vc3QvY29uZmlnL2NvbXBpbGVyL2NvZGVnZWFyLmhwcCIKLQotI2VsaWYgZGVmaW5lZCBf
X0JPUkxBTkRDX18KLS8vICBCb3JsYW5kCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBJTEVSX0NPTkZJ
RyAiYm9vc3QvY29uZmlnL2NvbXBpbGVyL2JvcmxhbmQuaHBwIgotCi0jZWxpZiBkZWZpbmVkICBf
X01XRVJLU19fCi0vLyAgTWV0cm93ZXJrcyBDb2RlV2FycmlvcgotIyAgIGRlZmluZSBCT09TVF9D
T01QSUxFUl9DT05GSUcgImJvb3N0L2NvbmZpZy9jb21waWxlci9tZXRyb3dlcmtzLmhwcCIKLQot
I2VsaWYgZGVmaW5lZCAgX19TVU5QUk9fQ0MKLS8vICBTdW4gV29ya3Nob3AgQ29tcGlsZXIgQysr
Ci0jICAgZGVmaW5lIEJPT1NUX0NPTVBJTEVSX0NPTkZJRyAiYm9vc3QvY29uZmlnL2NvbXBpbGVy
L3N1bnByb19jYy5ocHAiCi0KLSNlbGlmIGRlZmluZWQgX19IUF9hQ0MKLS8vICBIUCBhQ0MKLSMg
ICBkZWZpbmUgQk9PU1RfQ09NUElMRVJfQ09ORklHICJib29zdC9jb25maWcvY29tcGlsZXIvaHBf
YWNjLmhwcCIKLQotI2VsaWYgZGVmaW5lZChfX01SQ19fKSB8fCBkZWZpbmVkKF9fU0NfXykKLS8v
ICBNUFcgTXJDcHAgb3IgU0NwcAotIyAgIGRlZmluZSBCT09TVF9DT01QSUxFUl9DT05GSUcgImJv
b3N0L2NvbmZpZy9jb21waWxlci9tcHcuaHBwIgotCi0jZWxpZiBkZWZpbmVkKF9faWJteGxfXykK
LS8vIElCTSBYTCBDL0MrKyBmb3IgTGludXggKExpdHRsZSBFbmRpYW4pCi0jICAgZGVmaW5lIEJP
T1NUX0NPTVBJTEVSX0NPTkZJRyAiYm9vc3QvY29uZmlnL2NvbXBpbGVyL3hsY3BwLmhwcCIKLQot
I2VsaWYgZGVmaW5lZChfX0lCTUNQUF9fKQotLy8gIElCTSBWaXN1YWwgQWdlIG9yIElCTSBYTCBD
L0MrKyBmb3IgTGludXggKEJpZyBFbmRpYW4pCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBJTEVSX0NP
TkZJRyAiYm9vc3QvY29uZmlnL2NvbXBpbGVyL3ZhY3BwLmhwcCIKLQotI2VsaWYgZGVmaW5lZChf
X1BHSSkKLS8vICBQb3J0bGFuZCBHcm91cCBJbmMuCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBJTEVS
X0NPTkZJRyAiYm9vc3QvY29uZmlnL2NvbXBpbGVyL3BnaS5ocHAiCi0KLSNlbGlmIGRlZmluZWQg
X01TQ19WRVIKLS8vICBNaWNyb3NvZnQgVmlzdWFsIEMrKwotLy8KLS8vICBNdXN0IHJlbWFpbiB0
aGUgbGFzdCAjZWxpZiBzaW5jZSBzb21lIG90aGVyIHZlbmRvcnMgKE1ldHJvd2Vya3MsIGZvcgot
Ly8gIGV4YW1wbGUpIGFsc28gI2RlZmluZSBfTVNDX1ZFUgotIyAgIGRlZmluZSBCT09TVF9DT01Q
SUxFUl9DT05GSUcgImJvb3N0L2NvbmZpZy9jb21waWxlci92aXN1YWxjLmhwcCIKLQotI2VsaWYg
ZGVmaW5lZCAoQk9PU1RfQVNTRVJUX0NPTkZJRykKLS8vIHRoaXMgbXVzdCBjb21lIGxhc3QgLSBn
ZW5lcmF0ZSBhbiBlcnJvciBpZiB3ZSBkb24ndAotLy8gcmVjb2duaXNlIHRoZSBjb21waWxlcjoK
LSMgIGVycm9yICJVbmtub3duIGNvbXBpbGVyIC0gcGxlYXNlIGNvbmZpZ3VyZSAoaHR0cDovL3d3
dy5ib29zdC5vcmcvbGlicy9jb25maWcvY29uZmlnLmh0bSNjb25maWd1cmluZykgYW5kIHJlcG9y
dCB0aGUgcmVzdWx0cyB0byB0aGUgbWFpbiBib29zdCBtYWlsaW5nIGxpc3QgKGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL21vcmUvbWFpbGluZ19saXN0cy5odG0jbWFpbikiCi0KLSNlbmRpZgotCi0jaWYg
MAotLy8KLS8vIFRoaXMgc2VjdGlvbiBhbGxvd3MgZGVwZW5kZW5jeSBzY2FubmVycyB0byBmaW5k
IGFsbCB0aGUgaGVhZGVycyB3ZSAqbWlnaHQqIGluY2x1ZGU6Ci0vLwotI2luY2x1ZGUgPGJvb3N0
L2NvbmZpZy9jb21waWxlci9nY2NfeG1sLmhwcD4KLSNpbmNsdWRlIDxib29zdC9jb25maWcvY29t
cGlsZXIvY3JheS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnL2NvbXBpbGVyL2NvbWVhdS5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnL2NvbXBpbGVyL3BhdGhzY2FsZS5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvY29uZmlnL2NvbXBpbGVyL2ludGVsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9j
b25maWcvY29tcGlsZXIvY2xhbmcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy9jb21waWxl
ci9kaWdpdGFsbWFycy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnL2NvbXBpbGVyL2djYy5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnL2NvbXBpbGVyL2thaS5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvY29uZmlnL2NvbXBpbGVyL3NnaV9taXBzcHJvLmhwcD4KLSNpbmNsdWRlIDxib29zdC9j
b25maWcvY29tcGlsZXIvY29tcGFxX2N4eC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnL2Nv
bXBpbGVyL2dyZWVuaGlsbHMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy9jb21waWxlci9j
b2RlZ2Vhci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnL2NvbXBpbGVyL2JvcmxhbmQuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy9jb21waWxlci9tZXRyb3dlcmtzLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9jb25maWcvY29tcGlsZXIvc3VucHJvX2NjLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9jb25maWcvY29tcGlsZXIvaHBfYWNjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9jb25maWcvY29t
cGlsZXIvbXB3LmhwcD4KLSNpbmNsdWRlIDxib29zdC9jb25maWcvY29tcGlsZXIvdmFjcHAuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy9jb21waWxlci9wZ2kuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L2NvbmZpZy9jb21waWxlci92aXN1YWxjLmhwcD4KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2NvbmZpZy9zZWxlY3Rf
cGxhdGZvcm1fY29uZmlnLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L2NvbmZpZy9zZWxlY3RfcGxhdGZvcm1fY29uZmlnLmhwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjJmZDgxOGI5MzU2ZjYwZmI0MWMwNTk4YWY4OGQ5M2YyMTBjNTdkMC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb25maWcvc2VsZWN0X3BsYXRmb3JtX2Nv
bmZpZy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLy8gIEJvb3N0IGNvbXBp
bGVyIGNvbmZpZ3VyYXRpb24gc2VsZWN0aW9uIGhlYWRlciBmaWxlCi0KLS8vICAoQykgQ29weXJp
Z2h0IEpvaG4gTWFkZG9jayAyMDAxIC0gMjAwMi4gCi0vLyAgKEMpIENvcHlyaWdodCBKZW5zIE1h
dXJlciAyMDAxLiAKLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBz
dWJqZWN0IHRvIHRoZSAKLS8vICBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4g
KFNlZSBhY2NvbXBhbnlpbmcgZmlsZSAKLS8vICBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vICBTZWUgaHR0cDovL3d3
dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24uCi0KLS8vIGxvY2F0ZSB3aGljaCBw
bGF0Zm9ybSB3ZSBhcmUgb24gYW5kIGRlZmluZSBCT09TVF9QTEFURk9STV9DT05GSUcgYXMgbmVl
ZGVkLgotLy8gTm90ZSB0aGF0IHdlIGRlZmluZSB0aGUgaGVhZGVycyB0byBpbmNsdWRlIHVzaW5n
ICJoZWFkZXJfbmFtZSIgbm90Ci0vLyA8aGVhZGVyX25hbWU+IGluIG9yZGVyIHRvIHByZXZlbnQg
bWFjcm8gZXhwYW5zaW9uIHdpdGhpbiB0aGUgaGVhZGVyCi0vLyBuYW1lIChmb3IgZXhhbXBsZSAi
bGludXgiIGlzIGEgbWFjcm8gb24gbGludXggc3lzdGVtcykuCi0KLSNpZiAoZGVmaW5lZChsaW51
eCkgfHwgZGVmaW5lZChfX2xpbnV4KSB8fCBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChf
X0dOVV9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpICYmICFkZWZpbmVkKF9DUkFZQykKLS8vIGxp
bnV4LCBhbHNvIG90aGVyIHBsYXRmb3JtcyAoSHVyZCBldGMpIHRoYXQgdXNlIEdMSUJDLCBzaG91
bGQgdGhlc2UgcmVhbGx5IGhhdmUgdGhlaXIgb3duIGNvbmZpZyBoZWFkZXJzIHRob3VnaD8KLSMg
IGRlZmluZSBCT09TVF9QTEFURk9STV9DT05GSUcgImJvb3N0L2NvbmZpZy9wbGF0Zm9ybS9saW51
eC5ocHAiCi0KLSNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0Rf
XykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKQotLy8g
QlNEOgotIyAgZGVmaW5lIEJPT1NUX1BMQVRGT1JNX0NPTkZJRyAiYm9vc3QvY29uZmlnL3BsYXRm
b3JtL2JzZC5ocHAiCi0KLSNlbGlmIGRlZmluZWQoc3VuKSB8fCBkZWZpbmVkKF9fc3VuKQotLy8g
c29sYXJpczoKLSMgIGRlZmluZSBCT09TVF9QTEFURk9STV9DT05GSUcgImJvb3N0L2NvbmZpZy9w
bGF0Zm9ybS9zb2xhcmlzLmhwcCIKLQotI2VsaWYgZGVmaW5lZChfX3NnaSkKLS8vIFNHSSBJcml4
OgotIyAgZGVmaW5lIEJPT1NUX1BMQVRGT1JNX0NPTkZJRyAiYm9vc3QvY29uZmlnL3BsYXRmb3Jt
L2lyaXguaHBwIgotCi0jZWxpZiBkZWZpbmVkKF9faHB1eCkKLS8vIGhwIHVuaXg6Ci0jICBkZWZp
bmUgQk9PU1RfUExBVEZPUk1fQ09ORklHICJib29zdC9jb25maWcvcGxhdGZvcm0vaHB1eC5ocHAi
Ci0KLSNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKLS8vIGN5Z3dpbiBpcyBub3Qgd2luMzI6Ci0j
ICBkZWZpbmUgQk9PU1RfUExBVEZPUk1fQ09ORklHICJib29zdC9jb25maWcvcGxhdGZvcm0vY3ln
d2luLmhwcCIKLQotI2VsaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19XSU4zMl9fKSB8
fCBkZWZpbmVkKFdJTjMyKQotLy8gd2luMzI6Ci0jICBkZWZpbmUgQk9PU1RfUExBVEZPUk1fQ09O
RklHICJib29zdC9jb25maWcvcGxhdGZvcm0vd2luMzIuaHBwIgotCi0jZWxpZiBkZWZpbmVkKF9f
SEFJS1VfXykKLS8vIEhhaWt1Ci0jICBkZWZpbmUgQk9PU1RfUExBVEZPUk1fQ09ORklHICJib29z
dC9jb25maWcvcGxhdGZvcm0vaGFpa3UuaHBwIgotCi0jZWxpZiBkZWZpbmVkKF9fQkVPU19fKQot
Ly8gQmVPUwotIyAgZGVmaW5lIEJPT1NUX1BMQVRGT1JNX0NPTkZJRyAiYm9vc3QvY29uZmlnL3Bs
YXRmb3JtL2Jlb3MuaHBwIgotCi0jZWxpZiBkZWZpbmVkKG1hY2ludG9zaCkgfHwgZGVmaW5lZChf
X0FQUExFX18pIHx8IGRlZmluZWQoX19BUFBMRV9DQ19fKQotLy8gTWFjT1MKLSMgIGRlZmluZSBC
T09TVF9QTEFURk9STV9DT05GSUcgImJvb3N0L2NvbmZpZy9wbGF0Zm9ybS9tYWNvcy5ocHAiCi0K
LSNlbGlmIGRlZmluZWQoX19JQk1DUFBfXykgfHwgZGVmaW5lZChfQUlYKQotLy8gSUJNCi0jICBk
ZWZpbmUgQk9PU1RfUExBVEZPUk1fQ09ORklHICJib29zdC9jb25maWcvcGxhdGZvcm0vYWl4Lmhw
cCIKLQotI2VsaWYgZGVmaW5lZChfX2FtaWdhb3NfXykKLS8vIEFtaWdhT1MKLSMgIGRlZmluZSBC
T09TVF9QTEFURk9STV9DT05GSUcgImJvb3N0L2NvbmZpZy9wbGF0Zm9ybS9hbWlnYW9zLmhwcCIK
LQotI2VsaWYgZGVmaW5lZChfX1FOWE5UT19fKQotLy8gUU5YOgotIyAgZGVmaW5lIEJPT1NUX1BM
QVRGT1JNX0NPTkZJRyAiYm9vc3QvY29uZmlnL3BsYXRmb3JtL3FueG50by5ocHAiCi0KLSNlbGlm
IGRlZmluZWQoX19WWFdPUktTX18pCi0vLyB2eFdvcmtzOgotIyAgZGVmaW5lIEJPT1NUX1BMQVRG
T1JNX0NPTkZJRyAiYm9vc3QvY29uZmlnL3BsYXRmb3JtL3Z4d29ya3MuaHBwIgotCi0jZWxpZiBk
ZWZpbmVkKF9fU1lNQklBTjMyX18pIAotLy8gU3ltYmlhbjogCi0jICBkZWZpbmUgQk9PU1RfUExB
VEZPUk1fQ09ORklHICJib29zdC9jb25maWcvcGxhdGZvcm0vc3ltYmlhbi5ocHAiIAotCi0jZWxp
ZiBkZWZpbmVkKF9DUkFZQykKLS8vIENyYXk6Ci0jICBkZWZpbmUgQk9PU1RfUExBVEZPUk1fQ09O
RklHICJib29zdC9jb25maWcvcGxhdGZvcm0vY3JheS5ocHAiIAotCi0jZWxpZiBkZWZpbmVkKF9f
Vk1TKSAKLS8vIFZNUzoKLSMgIGRlZmluZSBCT09TVF9QTEFURk9STV9DT05GSUcgImJvb3N0L2Nv
bmZpZy9wbGF0Zm9ybS92bXMuaHBwIiAKLQotI2VsaWYgZGVmaW5lZChfX0Nsb3VkQUJJX18pCi0v
LyBOdXhpIENsb3VkQUJJOgotIyAgZGVmaW5lIEJPT1NUX1BMQVRGT1JNX0NPTkZJRyAiYm9vc3Qv
Y29uZmlnL3BsYXRmb3JtL2Nsb3VkYWJpLmhwcCIKLSNlbHNlCi0KLSMgIGlmIGRlZmluZWQodW5p
eCkgXAotICAgICAgfHwgZGVmaW5lZChfX3VuaXgpIFwKLSAgICAgIHx8IGRlZmluZWQoX1hPUEVO
X1NPVVJDRSkgXAotICAgICAgfHwgZGVmaW5lZChfUE9TSVhfU09VUkNFKQotCi0gICAvLyBnZW5l
cmljIHVuaXggcGxhdGZvcm06Ci0KLSMgIGlmbmRlZiBCT09TVF9IQVNfVU5JU1REX0gKLSMgICAg
IGRlZmluZSBCT09TVF9IQVNfVU5JU1REX0gKLSMgIGVuZGlmCi0KLSMgIGluY2x1ZGUgPGJvb3N0
L2NvbmZpZy9wb3NpeF9mZWF0dXJlcy5ocHA+Ci0KLSMgIGVuZGlmCi0KLSMgIGlmIGRlZmluZWQg
KEJPT1NUX0FTU0VSVF9DT05GSUcpCi0gICAgICAvLyB0aGlzIG11c3QgY29tZSBsYXN0IC0gZ2Vu
ZXJhdGUgYW4gZXJyb3IgaWYgd2UgZG9uJ3QKLSAgICAgIC8vIHJlY29nbmlzZSB0aGUgcGxhdGZv
cm06Ci0jICAgICBlcnJvciAiVW5rbm93biBwbGF0Zm9ybSAtIHBsZWFzZSBjb25maWd1cmUgYW5k
IHJlcG9ydCB0aGUgcmVzdWx0cyB0byBib29zdC5vcmciCi0jICBlbmRpZgotCi0jZW5kaWYKLQot
I2lmIDAKLS8vCi0vLyBUaGlzIHNlY3Rpb24gYWxsb3dzIGRlcGVuZGVuY3kgc2Nhbm5lcnMgdG8g
ZmluZCBhbGwgdGhlIGZpbGVzIHdlICptaWdodCogaW5jbHVkZToKLS8vCi0jICBpbmNsdWRlICJi
b29zdC9jb25maWcvcGxhdGZvcm0vbGludXguaHBwIgotIyAgaW5jbHVkZSAiYm9vc3QvY29uZmln
L3BsYXRmb3JtL2JzZC5ocHAiCi0jICBpbmNsdWRlICJib29zdC9jb25maWcvcGxhdGZvcm0vc29s
YXJpcy5ocHAiCi0jICBpbmNsdWRlICJib29zdC9jb25maWcvcGxhdGZvcm0vaXJpeC5ocHAiCi0j
ICBpbmNsdWRlICJib29zdC9jb25maWcvcGxhdGZvcm0vaHB1eC5ocHAiCi0jICBpbmNsdWRlICJi
b29zdC9jb25maWcvcGxhdGZvcm0vY3lnd2luLmhwcCIKLSMgIGluY2x1ZGUgImJvb3N0L2NvbmZp
Zy9wbGF0Zm9ybS93aW4zMi5ocHAiCi0jICBpbmNsdWRlICJib29zdC9jb25maWcvcGxhdGZvcm0v
YmVvcy5ocHAiCi0jICBpbmNsdWRlICJib29zdC9jb25maWcvcGxhdGZvcm0vbWFjb3MuaHBwIgot
IyAgaW5jbHVkZSAiYm9vc3QvY29uZmlnL3BsYXRmb3JtL2FpeC5ocHAiCi0jICBpbmNsdWRlICJi
b29zdC9jb25maWcvcGxhdGZvcm0vYW1pZ2Fvcy5ocHAiCi0jICBpbmNsdWRlICJib29zdC9jb25m
aWcvcGxhdGZvcm0vcW54bnRvLmhwcCIKLSMgIGluY2x1ZGUgImJvb3N0L2NvbmZpZy9wbGF0Zm9y
bS92eHdvcmtzLmhwcCIKLSMgIGluY2x1ZGUgImJvb3N0L2NvbmZpZy9wbGF0Zm9ybS9zeW1iaWFu
LmhwcCIgCi0jICBpbmNsdWRlICJib29zdC9jb25maWcvcGxhdGZvcm0vY3JheS5ocHAiIAotIyAg
aW5jbHVkZSAiYm9vc3QvY29uZmlnL3BsYXRmb3JtL3Ztcy5ocHAiIAotIyAgaW5jbHVkZSA8Ym9v
c3QvY29uZmlnL3Bvc2l4X2ZlYXR1cmVzLmhwcD4KLQotCi0KLSNlbmRpZgotCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb25maWcvc2VsZWN0
X3N0ZGxpYl9jb25maWcuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvY29uZmlnL3NlbGVjdF9zdGRsaWJfY29uZmlnLmhwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZTI3MGE4ODEzYTc5ZDdmNDhlMDM3NjI3NGI3MzVkOTcyM2ZjMTkyZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb25maWcvc2VsZWN0X3N0ZGxpYl9jb25maWcu
aHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8vICBCb29zdCBjb21waWxlciBj
b25maWd1cmF0aW9uIHNlbGVjdGlvbiBoZWFkZXIgZmlsZQotCi0vLyAgKEMpIENvcHlyaWdodCBK
b2huIE1hZGRvY2sgMjAwMSAtIDIwMDMuIAotLy8gIChDKSBDb3B5cmlnaHQgSmVucyBNYXVyZXIg
MjAwMSAtIDIwMDIuIAotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJl
IHN1YmplY3QgdG8gdGhlIAotLy8gIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4w
LiAoU2VlIGFjY29tcGFueWluZyBmaWxlIAotLy8gIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotCi0vLyAgU2VlIGh0dHA6
Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLgotCi0vLyBsb2NhdGUgd2hp
Y2ggc3RkIGxpYiB3ZSBhcmUgdXNpbmcgYW5kIGRlZmluZSBCT09TVF9TVERMSUJfQ09ORklHIGFz
IG5lZWRlZDoKLQotLy8gRmlyc3QgaW5jbHVkZSA8Y3N0ZGRlZj4gdG8gZGV0ZXJtaW5lIGlmIHNv
bWUgdmVyc2lvbiBvZiBTVExwb3J0IGlzIGluIHVzZSBhcyB0aGUgc3RkIGxpYgotLy8gKGRvIG5v
dCByZWx5IG9uIHRoaXMgaGVhZGVyIGJlaW5nIGluY2x1ZGVkIHNpbmNlIHVzZXJzIGNhbiBzaG9y
dC1jaXJjdWl0IHRoaXMgaGVhZGVyIAotLy8gIGlmIHRoZXkga25vdyB3aG9zZSBzdGQgbGliIHRo
ZXkgYXJlIHVzaW5nLikKLSNpZmRlZiBfX2NwbHVzcGx1cwotIyAgaW5jbHVkZSA8Y3N0ZGRlZj4K
LSNlbHNlCi0jICBpbmNsdWRlIDxzdGRkZWYuaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX1NH
SV9TVExfUE9SVCkgfHwgZGVmaW5lZChfU1RMUE9SVF9WRVJTSU9OKQotLy8gU1RMUG9ydCBsaWJy
YXJ5OyB0aGlzIF9tdXN0XyBjb21lIGZpcnN0LCBvdGhlcndpc2Ugc2luY2UKLS8vIFNUTHBvcnQg
dHlwaWNhbGx5IHNpdHMgb24gdG9wIG9mIHNvbWUgb3RoZXIgbGlicmFyeSwgd2UKLS8vIGNhbiBl
bmQgdXAgZGV0ZWN0aW5nIHRoYXQgZmlyc3QgcmF0aGVyIHRoYW4gU1RMcG9ydDoKLSMgIGRlZmlu
ZSBCT09TVF9TVERMSUJfQ09ORklHICJib29zdC9jb25maWcvc3RkbGliL3N0bHBvcnQuaHBwIgot
Ci0jZWxzZQotCi0vLyBJZiBvdXIgc3RkIGxpYiB3YXMgbm90IHNvbWUgdmVyc2lvbiBvZiBTVExw
b3J0LCBhbmQgaGFzIG5vdCBvdGhlcndpc2UKLS8vIGJlZW4gZGV0ZWN0ZWQsIHRoZW4gaW5jbHVk
ZSA8dXRpbGl0eT4gYXMgaXQgaXMgYWJvdXQgCi0vLyB0aGUgc21hbGxlc3Qgb2YgdGhlIHN0ZCBs
aWIgaGVhZGVycyB0aGF0IGluY2x1ZGVzIHJlYWwgQysrIHN0dWZmLgotLy8gU29tZSBzdGQgbGli
cyBkbyBub3QgaW5jbHVkZSB0aGVpciBDKystcmVsYXRlZCBtYWNyb3MgaW4gPGNzdGRkZWY+IAot
Ly8gc28gdGhpcyBhZGRpdGlvbmFsIGluY2x1ZGUgbWFrZXMgc3VyZSB3ZSBnZXQgdGhvc2UgZGVm
aW5pdGlvbnMuCi0vLyBOb3RlOiBkbyBub3QgcmVseSBvbiB0aGlzIGhlYWRlciBiZWluZyBpbmNs
dWRlZCBzaW5jZSB1c2VycyBjYW4gc2hvcnQtY2lyY3VpdCB0aGlzIAotLy8gI2luY2x1ZGUgaWYg
dGhleSBrbm93IHdob3NlIHN0ZCBsaWIgdGhleSBhcmUgdXNpbmcuCi0jaWYgIWRlZmluZWQoX19M
SUJDT01PX18pICYmICFkZWZpbmVkKF9fU1REX1JXQ09NUElMRVJfSF9fKSAmJiAhZGVmaW5lZChf
UldTVERfVkVSKVwKLSAgICYmICFkZWZpbmVkKF9MSUJDUFBfVkVSU0lPTikgJiYgIWRlZmluZWQo
X19HTElCQ1BQX18pICYmICFkZWZpbmVkKF9fR0xJQkNYWF9fKVwKLSAgICYmICFkZWZpbmVkKF9f
U1RMX0NPTkZJR19IKSAmJiAhZGVmaW5lZChfX01TTF9DUFBfXykgJiYgIWRlZmluZWQoX19JQk1D
UFBfXylcCi0gICAmJiAhZGVmaW5lZChNU0lQTF9DT01QSUxFX0gpICYmICFkZWZpbmVkKF9ZVkFM
UykgJiYgIWRlZmluZWQoX0NQUExJQl9WRVIpCi0jaW5jbHVkZSA8dXRpbGl0eT4KLSNlbmRpZgot
Ci0jaWYgZGVmaW5lZChfX0xJQkNPTU9fXykKLS8vIENvbWVhdSBTVEw6Ci0jZGVmaW5lIEJPT1NU
X1NURExJQl9DT05GSUcgImJvb3N0L2NvbmZpZy9zdGRsaWIvbGliY29tby5ocHAiCi0KLSNlbGlm
IGRlZmluZWQoX19TVERfUldDT01QSUxFUl9IX18pIHx8IGRlZmluZWQoX1JXU1REX1ZFUikKLS8v
IFJvZ3VlIFdhdmUgbGlicmFyeToKLSMgIGRlZmluZSBCT09TVF9TVERMSUJfQ09ORklHICJib29z
dC9jb25maWcvc3RkbGliL3JvZ3Vld2F2ZS5ocHAiCi0KLSNlbGlmIGRlZmluZWQoX0xJQkNQUF9W
RVJTSU9OKQotLy8gbGliYysrCi0jICBkZWZpbmUgQk9PU1RfU1RETElCX0NPTkZJRyAiYm9vc3Qv
Y29uZmlnL3N0ZGxpYi9saWJjcHAuaHBwIgotCi0jZWxpZiBkZWZpbmVkKF9fR0xJQkNQUF9fKSB8
fCBkZWZpbmVkKF9fR0xJQkNYWF9fKQotLy8gR05VIGxpYnN0ZGMrKyAzCi0jICBkZWZpbmUgQk9P
U1RfU1RETElCX0NPTkZJRyAiYm9vc3QvY29uZmlnL3N0ZGxpYi9saWJzdGRjcHAzLmhwcCIKLQot
I2VsaWYgZGVmaW5lZChfX1NUTF9DT05GSUdfSCkKLS8vIGdlbmVyaWMgU0dJIFNUTAotIyAgZGVm
aW5lIEJPT1NUX1NURExJQl9DT05GSUcgImJvb3N0L2NvbmZpZy9zdGRsaWIvc2dpLmhwcCIKLQot
I2VsaWYgZGVmaW5lZChfX01TTF9DUFBfXykKLS8vIE1TTCBzdGFuZGFyZCBsaWI6Ci0jICBkZWZp
bmUgQk9PU1RfU1RETElCX0NPTkZJRyAiYm9vc3QvY29uZmlnL3N0ZGxpYi9tc2wuaHBwIgotCi0j
ZWxpZiBkZWZpbmVkKF9fSUJNQ1BQX18pCi0vLyB0YWtlIHRoZSBkZWZhdWx0IFZBQ1BQIHN0ZCBs
aWIKLSMgIGRlZmluZSBCT09TVF9TVERMSUJfQ09ORklHICJib29zdC9jb25maWcvc3RkbGliL3Zh
Y3BwLmhwcCIKLQotI2VsaWYgZGVmaW5lZChNU0lQTF9DT01QSUxFX0gpCi0vLyBNb2RlbmEgQysr
IHN0YW5kYXJkIGxpYnJhcnkKLSMgIGRlZmluZSBCT09TVF9TVERMSUJfQ09ORklHICJib29zdC9j
b25maWcvc3RkbGliL21vZGVuYS5ocHAiCi0KLSNlbGlmIChkZWZpbmVkKF9ZVkFMUykgJiYgIWRl
ZmluZWQoX19JQk1DUFBfXykpIHx8IGRlZmluZWQoX0NQUExJQl9WRVIpCi0vLyBEaW5rdW13YXJl
IExpYnJhcnkgKHRoaXMgaGFzIHRvIGFwcGVhciBhZnRlciBhbnkgcG9zc2libGUgcmVwbGFjZW1l
bnQgbGlicmFyaWVzKToKLSMgIGRlZmluZSBCT09TVF9TVERMSUJfQ09ORklHICJib29zdC9jb25m
aWcvc3RkbGliL2Rpbmt1bXdhcmUuaHBwIgotCi0jZWxpZiBkZWZpbmVkIChCT09TVF9BU1NFUlRf
Q09ORklHKQotLy8gdGhpcyBtdXN0IGNvbWUgbGFzdCAtIGdlbmVyYXRlIGFuIGVycm9yIGlmIHdl
IGRvbid0Ci0vLyByZWNvZ25pc2UgdGhlIGxpYnJhcnk6Ci0jICBlcnJvciAiVW5rbm93biBzdGFu
ZGFyZCBsaWJyYXJ5IC0gcGxlYXNlIGNvbmZpZ3VyZSBhbmQgcmVwb3J0IHRoZSByZXN1bHRzIHRv
IGJvb3N0Lm9yZyIKLQotI2VuZGlmCi0KLSNlbmRpZgotCi0jaWYgMAotLy8KLS8vIFRoaXMgc2Vj
dGlvbiBhbGxvd3MgZGVwZW5kZW5jeSBzY2FubmVycyB0byBmaW5kIGFsbCB0aGUgZmlsZXMgd2Ug
Km1pZ2h0KiBpbmNsdWRlOgotLy8KLSMgIGluY2x1ZGUgImJvb3N0L2NvbmZpZy9zdGRsaWIvc3Rs
cG9ydC5ocHAiCi0jICBpbmNsdWRlICJib29zdC9jb25maWcvc3RkbGliL2xpYmNvbW8uaHBwIgot
IyAgaW5jbHVkZSAiYm9vc3QvY29uZmlnL3N0ZGxpYi9yb2d1ZXdhdmUuaHBwIgotIyAgaW5jbHVk
ZSAiYm9vc3QvY29uZmlnL3N0ZGxpYi9saWJjcHAuaHBwIgotIyAgaW5jbHVkZSAiYm9vc3QvY29u
ZmlnL3N0ZGxpYi9saWJzdGRjcHAzLmhwcCIKLSMgIGluY2x1ZGUgImJvb3N0L2NvbmZpZy9zdGRs
aWIvc2dpLmhwcCIKLSMgIGluY2x1ZGUgImJvb3N0L2NvbmZpZy9zdGRsaWIvbXNsLmhwcCIKLSMg
IGluY2x1ZGUgImJvb3N0L2NvbmZpZy9zdGRsaWIvdmFjcHAuaHBwIgotIyAgaW5jbHVkZSAiYm9v
c3QvY29uZmlnL3N0ZGxpYi9tb2RlbmEuaHBwIgotIyAgaW5jbHVkZSAiYm9vc3QvY29uZmlnL3N0
ZGxpYi9kaW5rdW13YXJlLmhwcCIKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb25maWcvc3RkbGliL2xpYmNwcC5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb25maWcvc3RkbGliL2xp
YmNwcC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZWE5OTk3N2RmYWFlMDIw
OWEwOWZiMmUxMDMwYjNkZmQyNzliYWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
Y29uZmlnL3N0ZGxpYi9saWJjcHAuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAK
LS8vICAoQykgQ29weXJpZ2h0IENocmlzdG9waGVyIEplZmZlcnNvbiAyMDExLgotLy8gIFVzZSwg
bW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlCi0vLyAgQm9v
c3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUK
LS8vICBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNF
TlNFXzFfMC50eHQpCi0KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVj
ZW50IHZlcnNpb24uCi0KLS8vICBjb25maWcgZm9yIGxpYmMrKwotLy8gIE1pZ2h0IG5lZWQgbW9y
ZSBpbiBoZXJlIGxhdGVyLgotCi0jaWYgIWRlZmluZWQoX0xJQkNQUF9WRVJTSU9OKQotIyAgaW5j
bHVkZSA8Y2lzbzY0Nj4KLSMgIGlmICFkZWZpbmVkKF9MSUJDUFBfVkVSU0lPTikKLSMgICAgICBl
cnJvciAiVGhpcyBpcyBub3QgbGliYysrISIKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBC
T09TVF9TVERMSUIgImxpYmMrKyB2ZXJzaW9uICIgQk9PU1RfU1RSSU5HSVpFKF9MSUJDUFBfVkVS
U0lPTikKLQotI2RlZmluZSBCT09TVF9IQVNfVEhSRUFEUwotCi0jaWZkZWYgX0xJQkNQUF9IQVNf
Tk9fVkFSSUFESUNTCi0jICAgIGRlZmluZSBCT09TVF9OT19DWFgxMV9IRFJfVFVQTEUKLSNlbmRp
ZgotCi0vLyBCT09TVF9OT19DWFgxMV9BTExPQ0FUT1Igc2hvdWxkIGltcGx5IG5vIHN1cHBvcnQg
Zm9yIHRoZSBDKysxMQotLy8gYWxsb2NhdG9yIG1vZGVsLiBUaGUgQysrMTEgYWxsb2NhdG9yIG1v
ZGVsIHJlcXVpcmVzIGEgY29uZm9ybWluZwotLy8gc3RkOjphbGxvY2F0b3JfdHJhaXRzIHdoaWNo
IGlzIG9ubHkgcG9zc2libGUgd2l0aCBDKysxMSB0ZW1wbGF0ZQotLy8gYWxpYXNlcyBzaW5jZSBt
ZW1iZXJzIHJlYmluZF9hbGxvYyBhbmQgcmViaW5kX3RyYWl0cyByZXF1aXJlIGl0LgotI2lmIGRl
ZmluZWQoX0xJQkNQUF9IQVNfTk9fVEVNUExBVEVfQUxJQVNFUykKLSMgICAgZGVmaW5lIEJPT1NU
X05PX0NYWDExX0FMTE9DQVRPUgotI2VuZGlmCi0KLSNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwMwot
Ly8KLS8vIFRoZXNlIHR3byBhcHBlYXIgdG8gYmUgc29tZXdoYXQgdXNlYWJsZSBpbiBDKyswMyBt
b2RlLCB0aGVyZSBtYXkgYmUgb3RoZXJzLi4uCi0vLwotLy8jICBkZWZpbmUgQk9PU1RfTk9fQ1hY
MTFfSERSX0FSUkFZCi0vLyMgIGRlZmluZSBCT09TVF9OT19DWFgxMV9IRFJfRk9SV0FSRF9MSVNU
Ci0KLSMgIGRlZmluZSBCT09TVF9OT19DWFgxMV9IRFJfQ09ERUNWVAotIyAgZGVmaW5lIEJPT1NU
X05PX0NYWDExX0hEUl9DT05ESVRJT05fVkFSSUFCTEUKLSMgIGRlZmluZSBCT09TVF9OT19DWFgx
MV9IRFJfSU5JVElBTElaRVJfTElTVAotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0hEUl9NVVRF
WAotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0hEUl9SQU5ET00KLSMgIGRlZmluZSBCT09TVF9O
T19DWFgxMV9IRFJfUkFUSU8KLSMgIGRlZmluZSBCT09TVF9OT19DWFgxMV9IRFJfUkVHRVgKLSMg
IGRlZmluZSBCT09TVF9OT19DWFgxMV9IRFJfU1lTVEVNX0VSUk9SCi0jICBkZWZpbmUgQk9PU1Rf
Tk9fQ1hYMTFfSERSX1RIUkVBRAotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0hEUl9UVVBMRQot
IyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0hEUl9UWVBFSU5ERVgKLSMgIGRlZmluZSBCT09TVF9O
T19DWFgxMV9IRFJfVU5PUkRFUkVEX01BUAotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0hEUl9V
Tk9SREVSRURfU0VUCi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hYMTFfTlVNRVJJQ19MSU1JVFMKLSMg
IGRlZmluZSBCT09TVF9OT19DWFgxMV9BTExPQ0FUT1IKLSMgIGRlZmluZSBCT09TVF9OT19DWFgx
MV9TTUFSVF9QVFIKLSMgIGRlZmluZSBCT09TVF9OT19DWFgxMV9IRFJfRlVOQ1RJT05BTAotIyAg
ZGVmaW5lIEJPT1NUX05PX0NYWDExX1NURF9BTElHTgotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDEx
X0FERFJFU1NPRgotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0hEUl9BVE9NSUMKLSMgIGRlZmlu
ZSBCT09TVF9OT19DWFgxMV9BVE9NSUNfU01BUlRfUFRSCi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hY
MTFfSERSX0NIUk9OTwotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0hEUl9UWVBFX1RSQUlUUwot
IyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0hEUl9GVVRVUkUKLSNlbGlmIF9MSUJDUFBfVkVSU0lP
TiA8IDM3MDAKLS8vCi0vLyBUaGVzZSBhcHBlYXIgdG8gYmUgdW51c2FibGUvaW5jb21wbGV0ZSBz
byBmYXI6Ci0vLwotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0hEUl9BVE9NSUMKLSMgIGRlZmlu
ZSBCT09TVF9OT19DWFgxMV9BVE9NSUNfU01BUlRfUFRSCi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hY
MTFfSERSX0NIUk9OTwotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0hEUl9UWVBFX1RSQUlUUwot
IyAgZGVmaW5lIEJPT1NUX05PX0NYWDExX0hEUl9GVVRVUkUKLSNlbmRpZgotCi0KLSNpZiBfTElC
Q1BQX1ZFUlNJT04gPCAzNzAwCi0vLyBsaWJjKysgdXNlcyBhIG5vbi1zdGFuZGFyZCBtZXNzYWdl
c19iYXNlCi0jZGVmaW5lIEJPT1NUX05PX1NURF9NRVNTQUdFUwotI2VuZGlmCi0KLS8vIEMrKzE0
IGZlYXR1cmVzCi0jaWYgKF9MSUJDUFBfVkVSU0lPTiA8IDM3MDApIHx8IChfX2NwbHVzcGx1cyA8
PSAyMDE0MDJMKQotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDE0X1NURF9FWENIQU5HRQotI2VuZGlm
Ci0KLS8vIEMrKzE3IGZlYXR1cmVzCi0jaWYgKF9MSUJDUFBfVkVSU0lPTiA8IDM3MDApIHx8IChf
X2NwbHVzcGx1cyA8PSAyMDE0MDJMKQotIyAgZGVmaW5lIEJPT1NUX05PX0NYWDE3X1NURF9JTlZP
S0UKLSNlbmRpZgotI2lmIChfTElCQ1BQX1ZFUlNJT04gPCA0MDAwKSB8fCAoX19jcGx1c3BsdXMg
PD0gMjAxNDAyTCkKLSMgIGRlZmluZSBCT09TVF9OT19DWFgxN19TVERfQVBQTFkKLSNlbmRpZgot
Ci0jaWYgKF9MSUJDUFBfVkVSU0lPTiA8PSAxMTAxKSAmJiAhZGVmaW5lZChCT09TVF9OT19DWFgx
MV9USFJFQURfTE9DQUwpCi0vLyBUaGlzIGlzIGEgYml0IG9mIGEgc2xlZGdlaGFtbWVyLCBiZWNh
dXNlIHJlYWxseSBpdCdzIGp1c3QgbGliYysrYWJpIHRoYXQgaGFzIG5vCi0vLyBzdXBwb3J0IGZv
ciB0aHJlYWRfbG9jYWwsIGxlYWRpbmcgdG8gbGlua2VyIGVycm9ycyBzdWNoIGFzCi0vLyAidW5k
ZWZpbmVkIHJlZmVyZW5jZSB0byBgX19jeGFfdGhyZWFkX2F0ZXhpdCciLiAgSXQgaXMgZml4ZWQg
aW4gdGhlCi0vLyBtb3N0IHJlY2VudCByZWxlYXNlcyBvZiBsaWJjKythYmkgdGhvdWdoLi4uCi0j
ICBkZWZpbmUgQk9PU1RfTk9fQ1hYMTFfVEhSRUFEX0xPQ0FMCi0jZW5kaWYKLQotI2lmIGRlZmlu
ZWQoX19oYXNfaW5jbHVkZSkKLSNpZiAhX19oYXNfaW5jbHVkZSg8c2hhcmVkX211dGV4PikKLSMg
IGRlZmluZSBCT09TVF9OT19DWFgxNF9IRFJfU0hBUkVEX01VVEVYCi0jZWxpZiBfX2NwbHVzcGx1
cyA8PSAyMDExMDMKLSMgIGRlZmluZSBCT09TVF9OT19DWFgxNF9IRFJfU0hBUkVEX01VVEVYCi0j
ZW5kaWYKLSNlbGlmIF9fY3BsdXNwbHVzIDwgMjAxNDAyCi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hY
MTRfSERSX1NIQVJFRF9NVVRFWAotI2VuZGlmCi0KLS8vICAtLS0gZW5kIC0tLQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29uZmlnL3N1ZmZp
eC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb25maWcv
c3VmZml4LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRmOTIyM2ZiMjFjZDIx
Yjg1ZWQ1OTJkYWYxYWY3ZWNmMjkwOWZlOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9jb25maWcvc3VmZml4LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMzYgKzAsMCBAQAotLy8g
IEJvb3N0IGNvbmZpZy5ocHAgY29uZmlndXJhdGlvbiBoZWFkZXIgZmlsZSAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLy8KLS8vICBib29zdGluc3BlY3Q6bmRwcmVjYXRlZF9tYWNyb3Mg
LS0gdGVsbCB0aGUgaW5zcGVjdCB0b29sIHRvIGlnbm9yZSB0aGlzIGZpbGUKLQotLy8gIENvcHly
aWdodCAoYykgMjAwMS0yMDAzIEpvaG4gTWFkZG9jawotLy8gIENvcHlyaWdodCAoYykgMjAwMSBE
YXJpbiBBZGxlcgotLy8gIENvcHlyaWdodCAoYykgMjAwMSBQZXRlciBEaW1vdgotLy8gIENvcHly
aWdodCAoYykgMjAwMiBCaWxsIEtlbXBmCi0vLyAgQ29weXJpZ2h0IChjKSAyMDAyIEplbnMgTWF1
cmVyCi0vLyAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgRGF2aWQgQWJyYWhhbXMKLS8vICBDb3B5
cmlnaHQgKGMpIDIwMDMgR2VubmFybyBQcm90YQotLy8gIENvcHlyaWdodCAoYykgMjAwMyBFcmlj
IEZyaWVkbWFuCi0vLyAgQ29weXJpZ2h0IChjKSAyMDEwIEVyaWMgSm91cmRhbm5lYXUsIEpvZWwg
RmFsY291Ci0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuIChTZWUKLS8vIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBv
ciBjb3B5IGF0Ci0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8v
ICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLgotCi0v
LyAgQm9vc3QgY29uZmlnLmhwcCBwb2xpY3kgYW5kIHJhdGlvbmFsZSBkb2N1bWVudGF0aW9uIGhh
cyBiZWVuIG1vdmVkIHRvCi0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9jb25maWcvCi0v
LwotLy8gIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBzdGFibGUsIGFuZCByZWxhdGl2ZWx5
IHVuY2hhbmdpbmcuCi0vLyAgSXQgc2hvdWxkIGNvbnRhaW4gYm9pbGVycGxhdGUgY29kZSBvbmx5
IC0gbm8gY29tcGlsZXIgc3BlY2lmaWMKLS8vICBjb2RlIHVubGVzcyBpdCBpcyB1bmF2b2lkYWJs
ZSAtIG5vIGNoYW5nZXMgdW5sZXNzIHVuYXZvaWRhYmxlLgotCi0jaWZuZGVmIEJPT1NUX0NPTkZJ
R19TVUZGSVhfSFBQCi0jZGVmaW5lIEJPT1NUX0NPTkZJR19TVUZGSVhfSFBQCi0KLSNpZiBkZWZp
bmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPj0gNCkKLS8vCi0vLyBTb21lIEdDQy00LnggdmVy
c2lvbnMgaXNzdWUgd2FybmluZ3MgZXZlbiB3aGVuIF9fZXh0ZW5zaW9uX18gaXMgdXNlZCwKLS8v
IHNvIHVzZSB0aGlzIGFzIGEgd29ya2Fyb3VuZDoKLS8vCi0jcHJhZ21hIEdDQyBzeXN0ZW1faGVh
ZGVyCi0jZW5kaWYKLQotLy8KLS8vIGVuc3VyZSB0aGF0IHZpc2liaWxpdHkgbWFjcm9zIGFyZSBh
bHdheXMgZGVmaW5lZCwgdGh1cyBzeW1wbGlmeWluZyB1c2UKLS8vCi0jaWZuZGVmIEJPT1NUX1NZ
TUJPTF9FWFBPUlQKLSMgZGVmaW5lIEJPT1NUX1NZTUJPTF9FWFBPUlQKLSNlbmRpZgotI2lmbmRl
ZiBCT09TVF9TWU1CT0xfSU1QT1JUCi0jIGRlZmluZSBCT09TVF9TWU1CT0xfSU1QT1JUCi0jZW5k
aWYKLSNpZm5kZWYgQk9PU1RfU1lNQk9MX1ZJU0lCTEUKLSMgZGVmaW5lIEJPT1NUX1NZTUJPTF9W
SVNJQkxFCi0jZW5kaWYKLQotLy8KLS8vIGxvb2sgZm9yIGxvbmcgbG9uZyBieSBsb29raW5nIGZv
ciB0aGUgYXBwcm9wcmlhdGUgbWFjcm9zIGluIDxsaW1pdHMuaD4uCi0vLyBOb3RlIHRoYXQgd2Ug
dXNlIGxpbWl0cy5oIHJhdGhlciB0aGFuIGNsaW1pdHMgZm9yIG1heGltYWwgcG9ydGFiaWxpdHks
Ci0vLyByZW1lbWJlciB0aGF0IHNpbmNlIHRoZXNlIGp1c3QgZGVjbGFyZSBhIGJ1bmNoIG9mIG1h
Y3JvcywgdGhlcmUgc2hvdWxkIGJlCi0vLyBubyBuYW1lc3BhY2UgaXNzdWVzIGZyb20gdGhpcy4K
LS8vCi0jaWYgIWRlZmluZWQoQk9PU1RfSEFTX0xPTkdfTE9ORykgJiYgIWRlZmluZWQoQk9PU1Rf
Tk9fTE9OR19MT05HKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAmJiAhZGVmaW5lZChCT09TVF9NU1ZDKSAmJiAhZGVmaW5lZChfX0JPUkxBTkRDX18p
Ci0jIGluY2x1ZGUgPGxpbWl0cy5oPgotIyBpZiAoZGVmaW5lZChVTExPTkdfTUFYKSB8fCBkZWZp
bmVkKFVMT05HX0xPTkdfTUFYKSB8fCBkZWZpbmVkKFVMT05HTE9OR19NQVgpKQotIyAgIGRlZmlu
ZSBCT09TVF9IQVNfTE9OR19MT05HCi0jIGVsc2UKLSMgICBkZWZpbmUgQk9PU1RfTk9fTE9OR19M
T05HCi0jIGVuZGlmCi0jZW5kaWYKLQotLy8gR0NDIDMueCB3aWxsIGNsZWFuIHVwIGFsbCBvZiB0
aG9zZSBuYXN0eSBtYWNybyBkZWZpbml0aW9ucyB0aGF0Ci0vLyBCT09TVF9OT19DVFlQRV9GVU5D
VElPTlMgaXMgaW50ZW5kZWQgdG8gaGVscCB3b3JrIGFyb3VuZCwgc28gdW5kZWZpbmUKLS8vIGl0
IHVuZGVyIEdDQyAzLnguCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID49IDMp
ICYmIGRlZmluZWQoQk9PU1RfTk9fQ1RZUEVfRlVOQ1RJT05TKQotIyAgdW5kZWYgQk9PU1RfTk9f
Q1RZUEVfRlVOQ1RJT05TCi0jZW5kaWYKLQotLy8KLS8vIEFzc3VtZSBhbnkgZXh0ZW5zaW9ucyBh
cmUgaW4gbmFtZXNwYWNlIHN0ZDo6IHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlOgotLy8KLSMgIGlm
bmRlZiBCT09TVF9TVERfRVhURU5TSU9OX05BTUVTUEFDRQotIyAgICBkZWZpbmUgQk9PU1RfU1RE
X0VYVEVOU0lPTl9OQU1FU1BBQ0Ugc3RkCi0jICBlbmRpZgotCi0vLwotLy8gSWYgY3YtcXVhbGlm
aWVkIHNwZWNpYWxpemF0aW9ucyBhcmUgbm90IGFsbG93ZWQsIHRoZW4gbmVpdGhlciBhcmUgY3Yt
dm9pZCBvbmVzOgotLy8KLSMgIGlmIGRlZmluZWQoQk9PU1RfTk9fQ1ZfU1BFQ0lBTElaQVRJT05T
KSBcCi0gICAgICAmJiAhZGVmaW5lZChCT09TVF9OT19DVl9WT0lEX1NQRUNJQUxJWkFUSU9OUykK
LSMgICAgIGRlZmluZSBCT09TVF9OT19DVl9WT0lEX1NQRUNJQUxJWkFUSU9OUwotIyAgZW5kaWYK
LQotLy8KLS8vIElmIHRoZXJlIGlzIG5vIG51bWVyaWNfbGltaXRzIHRlbXBsYXRlLCB0aGVuIGl0
IGNhbid0IGhhdmUgYW55IGNvbXBpbGUgdGltZQotLy8gY29uc3RhbnRzIGVpdGhlciEKLS8vCi0j
ICBpZiBkZWZpbmVkKEJPT1NUX05PX0xJTUlUUykgXAotICAgICAgJiYgIWRlZmluZWQoQk9PU1Rf
Tk9fTElNSVRTX0NPTVBJTEVfVElNRV9DT05TVEFOVFMpCi0jICAgICBkZWZpbmUgQk9PU1RfTk9f
TElNSVRTX0NPTVBJTEVfVElNRV9DT05TVEFOVFMKLSMgICAgIGRlZmluZSBCT09TVF9OT19NU19J
TlQ2NF9OVU1FUklDX0xJTUlUUwotIyAgICAgZGVmaW5lIEJPT1NUX05PX0xPTkdfTE9OR19OVU1F
UklDX0xJTUlUUwotIyAgZW5kaWYKLQotLy8KLS8vIGlmIHRoZXJlIGlzIG5vIGxvbmcgbG9uZyB0
aGVuIHRoZXJlIGlzIG5vIHNwZWNpYWxpc2F0aW9uCi0vLyBmb3IgbnVtZXJpY19saW1pdHM8bG9u
ZyBsb25nPiBlaXRoZXI6Ci0vLwotI2lmICFkZWZpbmVkKEJPT1NUX0hBU19MT05HX0xPTkcpICYm
ICFkZWZpbmVkKEJPT1NUX05PX0xPTkdfTE9OR19OVU1FUklDX0xJTUlUUykKLSMgIGRlZmluZSBC
T09TVF9OT19MT05HX0xPTkdfTlVNRVJJQ19MSU1JVFMKLSNlbmRpZgotCi0vLwotLy8gaWYgdGhl
cmUgaXMgbm8gX19pbnQ2NCB0aGVuIHRoZXJlIGlzIG5vIHNwZWNpYWxpc2F0aW9uCi0vLyBmb3Ig
bnVtZXJpY19saW1pdHM8X19pbnQ2ND4gZWl0aGVyOgotLy8KLSNpZiAhZGVmaW5lZChCT09TVF9I
QVNfTVNfSU5UNjQpICYmICFkZWZpbmVkKEJPT1NUX05PX01TX0lOVDY0X05VTUVSSUNfTElNSVRT
KQotIyAgZGVmaW5lIEJPT1NUX05PX01TX0lOVDY0X05VTUVSSUNfTElNSVRTCi0jZW5kaWYKLQot
Ly8KLS8vIGlmIG1lbWJlciB0ZW1wbGF0ZXMgYXJlIHN1cHBvcnRlZCB0aGVuIHNvIGlzIHRoZQot
Ly8gVkM2IHN1YnNldCBvZiBtZW1iZXIgdGVtcGxhdGVzOgotLy8KLSMgIGlmICFkZWZpbmVkKEJP
T1NUX05PX01FTUJFUl9URU1QTEFURVMpIFwKLSAgICAgICAmJiAhZGVmaW5lZChCT09TVF9NU1ZD
Nl9NRU1CRVJfVEVNUExBVEVTKQotIyAgICAgZGVmaW5lIEJPT1NUX01TVkM2X01FTUJFUl9URU1Q
TEFURVMKLSMgIGVuZGlmCi0KLS8vCi0vLyBXaXRob3V0IHBhcnRpYWwgc3BlY2lhbGl6YXRpb24s
IGNhbid0IHRlc3QgZm9yIHBhcnRpYWwgc3BlY2lhbGlzYXRpb24gYnVnczoKLS8vCi0jICBpZiBk
ZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04pIFwKLSAgICAg
ICYmICFkZWZpbmVkKEJPT1NUX0JDQl9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OX0JVRykKLSMgICAg
IGRlZmluZSBCT09TVF9CQ0JfUEFSVElBTF9TUEVDSUFMSVpBVElPTl9CVUcKLSMgIGVuZGlmCi0K
LS8vCi0vLyBXaXRob3V0IHBhcnRpYWwgc3BlY2lhbGl6YXRpb24sIHdlIGNhbid0IGhhdmUgYXJy
YXktdHlwZSBwYXJ0aWFsIHNwZWNpYWxpc2F0aW9uczoKLS8vCi0jICBpZiBkZWZpbmVkKEJPT1NU
X05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04pIFwKLSAgICAgICYmICFkZWZpbmVk
KEJPT1NUX05PX0FSUkFZX1RZUEVfU1BFQ0lBTElaQVRJT05TKQotIyAgICAgZGVmaW5lIEJPT1NU
X05PX0FSUkFZX1RZUEVfU1BFQ0lBTElaQVRJT05TCi0jICBlbmRpZgotCi0vLwotLy8gV2l0aG91
dCBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uLCBzdGQ6Oml0ZXJhdG9yX3RyYWl0cyBjYW4ndCB3b3Jr
OgotLy8KLSMgIGlmIGRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpB
VElPTikgXAotICAgICAgJiYgIWRlZmluZWQoQk9PU1RfTk9fU1REX0lURVJBVE9SX1RSQUlUUykK
LSMgICAgIGRlZmluZSBCT09TVF9OT19TVERfSVRFUkFUT1JfVFJBSVRTCi0jICBlbmRpZgotCi0v
LwotLy8gV2l0aG91dCBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uLCBwYXJ0aWFsCi0vLyBzcGVjaWFs
aXphdGlvbiB3aXRoIGRlZmF1bHQgYXJncyB3b24ndCB3b3JrIGVpdGhlcjoKLS8vCi0jICBpZiBk
ZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04pIFwKLSAgICAg
ICYmICFkZWZpbmVkKEJPT1NUX05PX1BBUlRJQUxfU1BFQ0lBTElaQVRJT05fSU1QTElDSVRfREVG
QVVMVF9BUkdTKQotIyAgICAgZGVmaW5lIEJPT1NUX05PX1BBUlRJQUxfU1BFQ0lBTElaQVRJT05f
SU1QTElDSVRfREVGQVVMVF9BUkdTCi0jICBlbmRpZgotCi0vLwotLy8gV2l0aG91dCBtZW1iZXIg
dGVtcGxhdGUgc3VwcG9ydCwgd2UgY2FuJ3QgaGF2ZSB0ZW1wbGF0ZSBjb25zdHJ1Y3RvcnMKLS8v
IGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGVpdGhlcjoKLS8vCi0jICBpZiBkZWZpbmVkKEJPT1NU
X05PX01FTUJFUl9URU1QTEFURVMpIFwKLSAgICAgICYmICFkZWZpbmVkKEJPT1NUX01TVkM2X01F
TUJFUl9URU1QTEFURVMpIFwKLSAgICAgICYmICFkZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFRF9J
VEVSQVRPUl9DT05TVFJVQ1RPUlMpCi0jICAgICBkZWZpbmUgQk9PU1RfTk9fVEVNUExBVEVEX0lU
RVJBVE9SX0NPTlNUUlVDVE9SUwotIyAgZW5kaWYKLQotLy8KLS8vIFdpdGhvdXQgbWVtYmVyIHRl
bXBsYXRlIHN1cHBvcnQsIHdlIGNhbid0IGhhdmUgYSBjb25mb3JtaW5nCi0vLyBzdGQ6OmFsbG9j
YXRvciB0ZW1wbGF0ZSBlaXRoZXI6Ci0vLwotIyAgaWYgZGVmaW5lZChCT09TVF9OT19NRU1CRVJf
VEVNUExBVEVTKSBcCi0gICAgICAmJiAhZGVmaW5lZChCT09TVF9NU1ZDNl9NRU1CRVJfVEVNUExB
VEVTKSBcCi0gICAgICAmJiAhZGVmaW5lZChCT09TVF9OT19TVERfQUxMT0NBVE9SKQotIyAgICAg
ZGVmaW5lIEJPT1NUX05PX1NURF9BTExPQ0FUT1IKLSMgIGVuZGlmCi0KLS8vCi0vLyB3aXRob3V0
IEFETCBzdXBwb3J0IHRoZW4gdXNpbmcgZGVjbGFyYXRpb25zIHdpbGwgYnJlYWsgQURMIGFzIHdl
bGw6Ci0vLwotI2lmIGRlZmluZWQoQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUCkg
JiYgIWRlZmluZWQoQk9PU1RfRlVOQ1RJT05fU0NPUEVfVVNJTkdfREVDTEFSQVRJT05fQlJFQUtT
X0FETCkKLSMgIGRlZmluZSBCT09TVF9GVU5DVElPTl9TQ09QRV9VU0lOR19ERUNMQVJBVElPTl9C
UkVBS1NfQURMCi0jZW5kaWYKLQotLy8KLS8vIFdpdGhvdXQgdHlwZWlkIHN1cHBvcnQgd2UgaGF2
ZSBubyBkeW5hbWljIFJUVEkgZWl0aGVyOgotLy8KLSNpZiBkZWZpbmVkKEJPT1NUX05PX1RZUEVJ
RCkgJiYgIWRlZmluZWQoQk9PU1RfTk9fUlRUSSkKLSMgIGRlZmluZSBCT09TVF9OT19SVFRJCi0j
ZW5kaWYKLQotLy8KLS8vIElmIHdlIGhhdmUgYSBzdGFuZGFyZCBhbGxvY2F0b3IsIHRoZW4gd2Ug
aGF2ZSBhIHBhcnRpYWwgb25lIGFzIHdlbGw6Ci0vLwotI2lmICFkZWZpbmVkKEJPT1NUX05PX1NU
RF9BTExPQ0FUT1IpCi0jICBkZWZpbmUgQk9PU1RfSEFTX1BBUlRJQUxfU1REX0FMTE9DQVRPUgot
I2VuZGlmCi0KLS8vCi0vLyBXZSBjYW4ndCBoYXZlIGEgd29ya2luZyBzdGQ6OnVzZV9mYWNldCBp
ZiB0aGVyZSBpcyBubyBzdGQ6OmxvY2FsZToKLS8vCi0jICBpZiBkZWZpbmVkKEJPT1NUX05PX1NU
RF9MT0NBTEUpICYmICFkZWZpbmVkKEJPT1NUX05PX1NURF9VU0VfRkFDRVQpCi0jICAgICBkZWZp
bmUgQk9PU1RfTk9fU1REX1VTRV9GQUNFVAotIyAgZW5kaWYKLQotLy8KLS8vIFdlIGNhbid0IGhh
dmUgYSBzdGQ6Om1lc3NhZ2VzIGZhY2V0IGlmIHRoZXJlIGlzIG5vIHN0ZDo6bG9jYWxlOgotLy8K
LSMgIGlmIGRlZmluZWQoQk9PU1RfTk9fU1REX0xPQ0FMRSkgJiYgIWRlZmluZWQoQk9PU1RfTk9f
U1REX01FU1NBR0VTKQotIyAgICAgZGVmaW5lIEJPT1NUX05PX1NURF9NRVNTQUdFUwotIyAgZW5k
aWYKLQotLy8KLS8vIFdlIGNhbid0IGhhdmUgYSB3b3JraW5nIHN0ZDo6d3N0cmVhbWJ1ZiBpZiB0
aGVyZSBpcyBubyBzdGQ6OmxvY2FsZToKLS8vCi0jICBpZiBkZWZpbmVkKEJPT1NUX05PX1NURF9M
T0NBTEUpICYmICFkZWZpbmVkKEJPT1NUX05PX1NURF9XU1RSRUFNQlVGKQotIyAgICAgZGVmaW5l
IEJPT1NUX05PX1NURF9XU1RSRUFNQlVGCi0jICBlbmRpZgotCi0vLwotLy8gV2UgY2FuJ3QgaGF2
ZSBhIDxjd2N0eXBlPiBpZiB0aGVyZSBpcyBubyA8Y3djaGFyPjoKLS8vCi0jICBpZiBkZWZpbmVk
KEJPT1NUX05PX0NXQ0hBUikgJiYgIWRlZmluZWQoQk9PU1RfTk9fQ1dDVFlQRSkKLSMgICAgIGRl
ZmluZSBCT09TVF9OT19DV0NUWVBFCi0jICBlbmRpZgotCi0vLwotLy8gV2UgY2FuJ3QgaGF2ZSBh
IHN3cHJpbnRmIGlmIHRoZXJlIGlzIG5vIDxjd2NoYXI+OgotLy8KLSMgIGlmIGRlZmluZWQoQk9P
U1RfTk9fQ1dDSEFSKSAmJiAhZGVmaW5lZChCT09TVF9OT19TV1BSSU5URikKLSMgICAgIGRlZmlu
ZSBCT09TVF9OT19TV1BSSU5URgotIyAgZW5kaWYKLQotLy8KLS8vIElmIFdpbjMyIHN1cHBvcnQg
aXMgdHVybmVkIG9mZiwgdGhlbiB3ZSBtdXN0IHR1cm4gb2ZmCi0vLyB0aHJlYWRpbmcgc3VwcG9y
dCBhbHNvLCB1bmxlc3MgdGhlcmUgaXMgc29tZSBvdGhlcgotLy8gdGhyZWFkIEFQSSBlbmFibGVk
OgotLy8KLSNpZiBkZWZpbmVkKEJPT1NUX0RJU0FCTEVfV0lOMzIpICYmIGRlZmluZWQoX1dJTjMy
KSBcCi0gICAmJiAhZGVmaW5lZChCT09TVF9ESVNBQkxFX1RIUkVBRFMpICYmICFkZWZpbmVkKEJP
T1NUX0hBU19QVEhSRUFEUykKLSMgIGRlZmluZSBCT09TVF9ESVNBQkxFX1RIUkVBRFMKLSNlbmRp
ZgotCi0vLwotLy8gVHVybiBvbiB0aHJlYWRpbmcgc3VwcG9ydCBpZiB0aGUgY29tcGlsZXIgdGhp
bmtzIHRoYXQgaXQncyBpbgotLy8gbXVsdGl0aHJlYWRlZCBtb2RlLiAgV2UgcHV0IHRoaXMgaGVy
ZSBiZWNhdXNlIHRoZXJlIGFyZSBvbmx5IGEKLS8vIGxpbWl0ZWQgbnVtYmVyIG9mIG1hY3JvcyB0
aGF0IGlkZW50aWZ5IHRoaXMgKGlmIHRoZXJlJ3MgYW55IG1pc3NpbmcKLS8vIGZyb20gaGVyZSB0
aGVuIGFkZCB0byB0aGUgYXBwcm9wcmlhdGUgY29tcGlsZXIgc2VjdGlvbik6Ci0vLwotI2lmIChk
ZWZpbmVkKF9fTVRfXykgfHwgZGVmaW5lZChfTVQpIHx8IGRlZmluZWQoX1JFRU5UUkFOVCkgXAot
ICAgIHx8IGRlZmluZWQoX1BUSFJFQURTKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5l
ZChfX0RyYWdvbkZseV9fKSkgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX0hBU19USFJFQURTKQot
IyAgZGVmaW5lIEJPT1NUX0hBU19USFJFQURTCi0jZW5kaWYKLQotLy8KLS8vIFR1cm4gdGhyZWFk
aW5nIHN1cHBvcnQgb2ZmIGlmIEJPT1NUX0RJU0FCTEVfVEhSRUFEUyBpcyBkZWZpbmVkOgotLy8K
LSNpZiBkZWZpbmVkKEJPT1NUX0RJU0FCTEVfVEhSRUFEUykgJiYgZGVmaW5lZChCT09TVF9IQVNf
VEhSRUFEUykKLSMgIHVuZGVmIEJPT1NUX0hBU19USFJFQURTCi0jZW5kaWYKLQotLy8KLS8vIFR1
cm4gdGhyZWFkaW5nIHN1cHBvcnQgb2ZmIGlmIHdlIGRvbid0IHJlY29nbmlzZSB0aGUgdGhyZWFk
aW5nIEFQSToKLS8vCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfVEhSRUFEUykgJiYgIWRlZmluZWQo
Qk9PU1RfSEFTX1BUSFJFQURTKVwKLSAgICAgICYmICFkZWZpbmVkKEJPT1NUX0hBU19XSU5USFJF
QURTKSAmJiAhZGVmaW5lZChCT09TVF9IQVNfQkVUSFJFQURTKVwKLSAgICAgICYmICFkZWZpbmVk
KEJPT1NUX0hBU19NUFRBU0tTKQotIyAgdW5kZWYgQk9PU1RfSEFTX1RIUkVBRFMKLSNlbmRpZgot
Ci0vLwotLy8gVHVybiB0aHJlYWRpbmcgZGV0YWlsIG1hY3JvcyBvZmYgaWYgd2UgZG9uJ3QgKHdh
bnQgdG8pIHVzZSB0aHJlYWRpbmcKLS8vCi0jaWZuZGVmIEJPT1NUX0hBU19USFJFQURTCi0jICB1
bmRlZiBCT09TVF9IQVNfUFRIUkVBRFMKLSMgIHVuZGVmIEJPT1NUX0hBU19QVEhSRUFEX01VVEVY
QVRUUl9TRVRUWVBFCi0jICB1bmRlZiBCT09TVF9IQVNfUFRIUkVBRF9ZSUVMRAotIyAgdW5kZWYg
Qk9PU1RfSEFTX1BUSFJFQURfREVMQVlfTlAKLSMgIHVuZGVmIEJPT1NUX0hBU19XSU5USFJFQURT
Ci0jICB1bmRlZiBCT09TVF9IQVNfQkVUSFJFQURTCi0jICB1bmRlZiBCT09TVF9IQVNfTVBUQVNL
UwotI2VuZGlmCi0KLS8vCi0vLyBJZiB0aGUgY29tcGlsZXIgY2xhaW1zIHRvIGJlIEM5OSBjb25m
b3JtYW50LCB0aGVuIGl0IGhhZCBiZXR0ZXIKLS8vIGhhdmUgYSA8c3RkaW50Lmg+OgotLy8KLSMg
IGlmIGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgKF9fU1REQ19WRVJTSU9OX18gPj0gMTk5
OTAxKQotIyAgICAgZGVmaW5lIEJPT1NUX0hBU19TVERJTlRfSAotIyAgICAgaWZuZGVmIEJPT1NU
X0hBU19MT0cxUAotIyAgICAgICAgZGVmaW5lIEJPT1NUX0hBU19MT0cxUAotIyAgICAgZW5kaWYK
LSMgICAgIGlmbmRlZiBCT09TVF9IQVNfRVhQTTEKLSMgICAgICAgIGRlZmluZSBCT09TVF9IQVNf
RVhQTTEKLSMgICAgIGVuZGlmCi0jICBlbmRpZgotCi0vLwotLy8gRGVmaW5lIEJPT1NUX05PX1NM
SVNUIGFuZCBCT09TVF9OT19IQVNIIGlmIHJlcXVpcmVkLgotLy8gTm90ZSB0aGF0IHRoaXMgaXMg
Zm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG9ubHkuCi0vLwotIyAgaWYgIWRlZmluZWQoQk9P
U1RfSEFTX1NMSVNUKSAmJiAhZGVmaW5lZChCT09TVF9OT19TTElTVCkKLSMgICAgIGRlZmluZSBC
T09TVF9OT19TTElTVAotIyAgZW5kaWYKLQotIyAgaWYgIWRlZmluZWQoQk9PU1RfSEFTX0hBU0gp
ICYmICFkZWZpbmVkKEJPT1NUX05PX0hBU0gpCi0jICAgICBkZWZpbmUgQk9PU1RfTk9fSEFTSAot
IyAgZW5kaWYKLQotLy8KLS8vIFNldCBCT09TVF9TTElTVF9IRUFERVIgaWYgbm90IHNldCBhbHJl
YWR5OgotLy8KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19TTElTVCkgJiYgIWRlZmluZWQoQk9PU1Rf
U0xJU1RfSEVBREVSKQotIyAgZGVmaW5lIEJPT1NUX1NMSVNUX0hFQURFUiA8c2xpc3Q+Ci0jZW5k
aWYKLQotLy8KLS8vIFNldCBCT09TVF9IQVNIX1NFVF9IRUFERVIgaWYgbm90IHNldCBhbHJlYWR5
OgotLy8KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19IQVNIKSAmJiAhZGVmaW5lZChCT09TVF9IQVNI
X1NFVF9IRUFERVIpCi0jICBkZWZpbmUgQk9PU1RfSEFTSF9TRVRfSEVBREVSIDxoYXNoX3NldD4K
LSNlbmRpZgotCi0vLwotLy8gU2V0IEJPT1NUX0hBU0hfTUFQX0hFQURFUiBpZiBub3Qgc2V0IGFs
cmVhZHk6Ci0vLwotI2lmIGRlZmluZWQoQk9PU1RfSEFTX0hBU0gpICYmICFkZWZpbmVkKEJPT1NU
X0hBU0hfTUFQX0hFQURFUikKLSMgIGRlZmluZSBCT09TVF9IQVNIX01BUF9IRUFERVIgPGhhc2hf
bWFwPgotI2VuZGlmCi0KLS8vICBCT09TVF9IQVNfQUJJX0hFQURFUlMKLS8vICBUaGlzIG1hY3Jv
IGdldHMgc2V0IGlmIHdlIGhhdmUgaGVhZGVycyB0aGF0IGZpeCB0aGUgQUJJLAotLy8gIGFuZCBw
cmV2ZW50IE9EUiB2aW9sYXRpb25zIHdoZW4gbGlua2luZyB0byBleHRlcm5hbCBsaWJyYXJpZXM6
Ci0jaWYgZGVmaW5lZChCT09TVF9BQklfUFJFRklYKSAmJiBkZWZpbmVkKEJPT1NUX0FCSV9TVUZG
SVgpICYmICFkZWZpbmVkKEJPT1NUX0hBU19BQklfSEVBREVSUykKLSMgIGRlZmluZSBCT09TVF9I
QVNfQUJJX0hFQURFUlMKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfQUJJX0hFQURF
UlMpICYmIGRlZmluZWQoQk9PU1RfRElTQUJMRV9BQklfSEVBREVSUykKLSMgIHVuZGVmIEJPT1NU
X0hBU19BQklfSEVBREVSUwotI2VuZGlmCi0KLS8vICBCT09TVF9OT19TVERDX05BTUVTUEFDRSB3
b3JrYXJvdW5kICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0vLyAg
QmVjYXVzZSBzdGQ6OnNpemVfdCB1c2FnZSBpcyBzbyBjb21tb24sIGV2ZW4gaW4gYm9vc3QgaGVh
ZGVycyB3aGljaCBkbyBub3QKLS8vICBvdGhlcndpc2UgdXNlIHRoZSBDIGxpYnJhcnksIHRoZSA8
Y3N0ZGRlZj4gd29ya2Fyb3VuZCBpcyBpbmNsdWRlZCBoZXJlIHNvCi0vLyAgdGhhdCB1Z2x5IHdv
cmthcm91bmQgY29kZSBuZWVkIG5vdCBhcHBlYXIgaW4gbWFueSBvdGhlciBib29zdCBoZWFkZXJz
LgotLy8gIE5PVEUgV0VMTDogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIG5vbi1jb25mb3JtaW5n
IGNvbXBpbGVyczsgPGNzdGRkZWY+Ci0vLyAgbXVzdCBzdGlsbCBiZSAjaW5jbHVkZWQgaW4gdGhl
IHVzdWFsIHBsYWNlcyBzbyB0aGF0IDxjc3RkZGVmPiBpbmNsdXNpb24KLS8vICB3b3JrcyBhcyBl
eHBlY3RlZCB3aXRoIHN0YW5kYXJkIGNvbmZvcm1pbmcgY29tcGlsZXJzLiAgVGhlIHJlc3VsdGlu
ZwotLy8gIGRvdWJsZSBpbmNsdXNpb24gb2YgPGNzdGRkZWY+IGlzIGhhcm1sZXNzLgotCi0jIGlm
IGRlZmluZWQoQk9PU1RfTk9fU1REQ19OQU1FU1BBQ0UpICYmIGRlZmluZWQoX19jcGx1c3BsdXMp
Ci0jICAgaW5jbHVkZSA8Y3N0ZGRlZj4KLSAgICBuYW1lc3BhY2Ugc3RkIHsgdXNpbmcgOjpwdHJk
aWZmX3Q7IHVzaW5nIDo6c2l6ZV90OyB9Ci0jIGVuZGlmCi0KLS8vICBXb3JrYXJvdW5kIGZvciB0
aGUgdW5mb3J0dW5hdGUgbWluL21heCBtYWNyb3MgZGVmaW5lZCBieSBzb21lIHBsYXRmb3JtIGhl
YWRlcnMKLQotI2RlZmluZSBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTgotCi0jaWZu
ZGVmIEJPT1NUX1VTSU5HX1NURF9NSU4KLSMgIGRlZmluZSBCT09TVF9VU0lOR19TVERfTUlOKCkg
dXNpbmcgc3RkOjptaW4KLSNlbmRpZgotCi0jaWZuZGVmIEJPT1NUX1VTSU5HX1NURF9NQVgKLSMg
IGRlZmluZSBCT09TVF9VU0lOR19TVERfTUFYKCkgdXNpbmcgc3RkOjptYXgKLSNlbmRpZgotCi0v
LyAgQk9PU1RfTk9fU1REX01JTl9NQVggd29ya2Fyb3VuZCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCi0jICBpZiBkZWZpbmVkKEJPT1NUX05PX1NURF9NSU5f
TUFYKSAmJiBkZWZpbmVkKF9fY3BsdXNwbHVzKQotCi1uYW1lc3BhY2Ugc3RkIHsKLSAgdGVtcGxh
dGUgPGNsYXNzIF9UcD4KLSAgaW5saW5lIGNvbnN0IF9UcCYgbWluIEJPT1NUX1BSRVZFTlRfTUFD
Uk9fU1VCU1RJVFVUSU9OIChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsKLSAgICBy
ZXR1cm4gX19iIDwgX19hID8gX19iIDogX19hOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBfVHA+
Ci0gIGlubGluZSBjb25zdCBfVHAmIG1heCBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElP
TiAoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7Ci0gICAgcmV0dXJuICBfX2EgPCBf
X2IgPyBfX2IgOiBfX2E7Ci0gIH0KLX0KLQotIyAgZW5kaWYKLQotLy8gQk9PU1RfU1RBVElDX0NP
TlNUQU5UIHdvcmthcm91bmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IC8vCi0vLyBPbiBjb21waWxlcnMgd2hpY2ggZG9uJ3QgYWxsb3cgaW4tY2xhc3MgaW5pdGlhbGl6
YXRpb24gb2Ygc3RhdGljIGludGVncmFsCi0vLyBjb25zdGFudCBtZW1iZXJzLCB3ZSBtdXN0IHVz
ZSBlbnVtcyBhcyBhIHdvcmthcm91bmQgaWYgd2Ugd2FudCB0aGUgY29uc3RhbnRzCi0vLyB0byBi
ZSBhdmFpbGFibGUgYXQgY29tcGlsZS10aW1lLiBUaGlzIG1hY3JvIGdpdmVzIHVzIGEgY29udmVu
aWVudCB3YXkgdG8KLS8vIGRlY2xhcmUgc3VjaCBjb25zdGFudHMuCi0KLSMgIGlmZGVmIEJPT1NU
X05PX0lOQ0xBU1NfTUVNQkVSX0lOSVRJQUxJWkFUSU9OCi0jICAgICAgIGRlZmluZSBCT09TVF9T
VEFUSUNfQ09OU1RBTlQodHlwZSwgYXNzaWdubWVudCkgZW51bSB7IGFzc2lnbm1lbnQgfQotIyAg
ZWxzZQotIyAgICAgZGVmaW5lIEJPT1NUX1NUQVRJQ19DT05TVEFOVCh0eXBlLCBhc3NpZ25tZW50
KSBzdGF0aWMgY29uc3QgdHlwZSBhc3NpZ25tZW50Ci0jICBlbmRpZgotCi0vLyBCT09TVF9VU0Vf
RkFDRVQgLyBIQVNfRkFDRVQgd29ya2Fyb3VuZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLy8KLS8vIFdoZW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgZG9lcyBub3QgaGF2ZSBhIGNv
bmZvcm1pbmcgc3RkOjp1c2VfZmFjZXQgdGhlcmUKLS8vIGFyZSB2YXJpb3VzIHdvcmthcm91bmRz
IGF2YWlsYWJsZSwgYnV0IHRoZXkgZGlmZmVyIGZyb20gbGlicmFyeSB0byBsaWJyYXJ5LgotLy8g
VGhlIHNhbWUgcHJvYmxlbSBvY2N1cnMgd2l0aCBoYXNfZmFjZXQuCi0vLyBUaGVzZSBtYWNyb3Mg
cHJvdmlkZSBhIGNvbnNpc3RlbnQgd2F5IHRvIGFjY2VzcyBhIGxvY2FsZSdzIGZhY2V0cy4KLS8v
IFVzYWdlOgotLy8gICAgcmVwbGFjZQotLy8gICAgICAgc3RkOjp1c2VfZmFjZXQ8VHlwZT4obG9j
KTsKLS8vICAgIHdpdGgKLS8vICAgICAgIEJPT1NUX1VTRV9GQUNFVChUeXBlLCBsb2MpOwotLy8g
ICAgTm90ZSBkbyBub3QgYWRkIGEgc3RkOjogcHJlZml4IHRvIHRoZSBmcm9udCBvZiBCT09TVF9V
U0VfRkFDRVQhCi0vLyAgVXNlIGZvciBCT09TVF9IQVNfRkFDRVQgaXMgYW5hbG9nb3VzLgotCi0j
aWYgZGVmaW5lZChCT09TVF9OT19TVERfVVNFX0ZBQ0VUKQotIyAgaWZkZWYgQk9PU1RfSEFTX1RX
T19BUkdfVVNFX0ZBQ0VUCi0jICAgICBkZWZpbmUgQk9PU1RfVVNFX0ZBQ0VUKFR5cGUsIGxvYykg
c3RkOjp1c2VfZmFjZXQobG9jLCBzdGF0aWNfY2FzdDxUeXBlKj4oMCkpCi0jICAgICBkZWZpbmUg
Qk9PU1RfSEFTX0ZBQ0VUKFR5cGUsIGxvYykgc3RkOjpoYXNfZmFjZXQobG9jLCBzdGF0aWNfY2Fz
dDxUeXBlKj4oMCkpCi0jICBlbGlmIGRlZmluZWQoQk9PU1RfSEFTX01BQ1JPX1VTRV9GQUNFVCkK
LSMgICAgIGRlZmluZSBCT09TVF9VU0VfRkFDRVQoVHlwZSwgbG9jKSBzdGQ6Ol9VU0UobG9jLCBU
eXBlKQotIyAgICAgZGVmaW5lIEJPT1NUX0hBU19GQUNFVChUeXBlLCBsb2MpIHN0ZDo6X0hBUyhs
b2MsIFR5cGUpCi0jICBlbGlmIGRlZmluZWQoQk9PU1RfSEFTX1NUTFBfVVNFX0ZBQ0VUKQotIyAg
ICAgZGVmaW5lIEJPT1NUX1VTRV9GQUNFVChUeXBlLCBsb2MpICgqc3RkOjpfVXNlX2ZhY2V0PFR5
cGUgPihsb2MpKQotIyAgICAgZGVmaW5lIEJPT1NUX0hBU19GQUNFVChUeXBlLCBsb2MpIHN0ZDo6
aGFzX2ZhY2V0PCBUeXBlID4obG9jKQotIyAgZW5kaWYKLSNlbHNlCi0jICBkZWZpbmUgQk9PU1Rf
VVNFX0ZBQ0VUKFR5cGUsIGxvYykgc3RkOjp1c2VfZmFjZXQ8IFR5cGUgPihsb2MpCi0jICBkZWZp
bmUgQk9PU1RfSEFTX0ZBQ0VUKFR5cGUsIGxvYykgc3RkOjpoYXNfZmFjZXQ8IFR5cGUgPihsb2Mp
Ci0jZW5kaWYKLQotLy8gQk9PU1RfTkVTVEVEX1RFTVBMQVRFIHdvcmthcm91bmQgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLS8vIE1lbWJlciB0ZW1wbGF0ZXMg
YXJlIHN1cHBvcnRlZCBieSBzb21lIGNvbXBpbGVycyBldmVuIHRob3VnaCB0aGV5IGNhbid0IHVz
ZQotLy8gdGhlIEE6OnRlbXBsYXRlIG1lbWJlcjxVPiBzeW50YXgsIGFzIGEgd29ya2Fyb3VuZCBy
ZXBsYWNlOgotLy8KLS8vIHR5cGVkZWYgdHlwZW5hbWUgQTo6dGVtcGxhdGUgcmViaW5kPFU+IGJp
bmRlcjsKLS8vCi0vLyB3aXRoOgotLy8KLS8vIHR5cGVkZWYgdHlwZW5hbWUgQTo6Qk9PU1RfTkVT
VEVEX1RFTVBMQVRFIHJlYmluZDxVPiBiaW5kZXI7Ci0KLSNpZm5kZWYgQk9PU1RfTk9fTUVNQkVS
X1RFTVBMQVRFX0tFWVdPUkQKLSMgIGRlZmluZSBCT09TVF9ORVNURURfVEVNUExBVEUgdGVtcGxh
dGUKLSNlbHNlCi0jICBkZWZpbmUgQk9PU1RfTkVTVEVEX1RFTVBMQVRFCi0jZW5kaWYKLQotLy8g
Qk9PU1RfVU5SRUFDSEFCTEVfUkVUVVJOKHgpIHdvcmthcm91bmQgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0vLyBOb3JtYWxseSBldmFsdWF0ZXMgdG8gbm90aGluZywg
dW5sZXNzIEJPT1NUX05PX1VOUkVBQ0hBQkxFX1JFVFVSTl9ERVRFQ1RJT04KLS8vIGlzIGRlZmlu
ZWQsIGluIHdoaWNoIGNhc2UgaXQgZXZhbHVhdGVzIHRvIHJldHVybiB4OyBVc2Ugd2hlbiB5b3Ug
aGF2ZSBhIHJldHVybgotLy8gc3RhdGVtZW50IHRoYXQgY2FuIG5ldmVyIGJlIHJlYWNoZWQuCi0K
LSNpZm5kZWYgQk9PU1RfVU5SRUFDSEFCTEVfUkVUVVJOCi0jICBpZmRlZiBCT09TVF9OT19VTlJF
QUNIQUJMRV9SRVRVUk5fREVURUNUSU9OCi0jICAgICBkZWZpbmUgQk9PU1RfVU5SRUFDSEFCTEVf
UkVUVVJOKHgpIHJldHVybiB4OwotIyAgZWxzZQotIyAgICAgZGVmaW5lIEJPT1NUX1VOUkVBQ0hB
QkxFX1JFVFVSTih4KQotIyAgZW5kaWYKLSNlbmRpZgotCi0vLyBCT09TVF9ERURVQ0VEX1RZUEVO
QU1FIHdvcmthcm91bmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ly8KLS8vCi0vLyBTb21lIGNvbXBpbGVycyBkb24ndCBzdXBwb3J0IHRoZSB1c2Ugb2YgYHR5cGVu
YW1lJyBmb3IgZGVwZW5kZW50Ci0vLyB0eXBlcyBpbiBkZWR1Y2VkIGNvbnRleHRzLCBlLmcuCi0v
LwotLy8gICAgIHRlbXBsYXRlIDxjbGFzcyBUPiB2b2lkIGYoVCwgdHlwZW5hbWUgVDo6dHlwZSk7
Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXgotLy8gUmVwbGFj
ZSB0aGVzZSBkZWNsYXJhdGlvbnMgd2l0aDoKLS8vCi0vLyAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+
IHZvaWQgZihULCBCT09TVF9ERURVQ0VEX1RZUEVOQU1FIFQ6OnR5cGUpOwotCi0jaWZuZGVmIEJP
T1NUX05PX0RFRFVDRURfVFlQRU5BTUUKLSMgIGRlZmluZSBCT09TVF9ERURVQ0VEX1RZUEVOQU1F
IHR5cGVuYW1lCi0jZWxzZQotIyAgZGVmaW5lIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUKLSNlbmRp
ZgotCi0jaWZuZGVmIEJPT1NUX05PX1RZUEVOQU1FX1dJVEhfQ1RPUgotIyAgZGVmaW5lIEJPT1NU
X0NUT1JfVFlQRU5BTUUgdHlwZW5hbWUKLSNlbHNlCi0jICBkZWZpbmUgQk9PU1RfQ1RPUl9UWVBF
TkFNRQotI2VuZGlmCi0KLS8vIGxvbmcgbG9uZyB3b3JrYXJvdW5kIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0vLyBPbiBnY2MgKGFuZCBtYXliZSBvdGhlciBj
b21waWxlcnM/KSBsb25nIGxvbmcgaXMgYWx3YXkgc3VwcG9ydGVkCi0vLyBidXQgaXQncyB1c2Ug
bWF5IGdlbmVyYXRlIGVpdGhlciB3YXJuaW5ncyAod2l0aCAtYW5zaSksIG9yIGVycm9ycwotLy8g
KHdpdGggLXBlZGFudGljIC1hbnNpKSB1bmxlc3MgaXQncyB1c2UgaXMgcHJlZml4ZWQgYnkgX19l
eHRlbnNpb25fXwotLy8KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19MT05HX0xPTkcpICYmIGRlZmlu
ZWQoX19jcGx1c3BsdXMpCi1uYW1lc3BhY2UgYm9vc3R7Ci0jICBpZmRlZiBfX0dOVUNfXwotICAg
X19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBsb25nX2xvbmdfdHlwZTsKLSAgIF9fZXh0
ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxvbmdfbG9uZ190eXBlOwotIyAg
ZWxzZQotICAgdHlwZWRlZiBsb25nIGxvbmcgbG9uZ19sb25nX3R5cGU7Ci0gICB0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgbG9uZyB1bG9uZ19sb25nX3R5cGU7Ci0jICBlbmRpZgotfQotI2VuZGlmCi0v
LyBzYW1lIGFnYWluIGZvciBfX2ludDEyODoKLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19JTlQxMjgp
ICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCi1uYW1lc3BhY2UgYm9vc3R7Ci0jICBpZmRlZiBfX0dO
VUNfXwotICAgX19leHRlbnNpb25fXyB0eXBlZGVmIF9faW50MTI4IGludDEyOF90eXBlOwotICAg
X19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIF9faW50MTI4IHVpbnQxMjhfdHlwZTsKLSMg
IGVsc2UKLSAgIHR5cGVkZWYgX19pbnQxMjggaW50MTI4X3R5cGU7Ci0gICB0eXBlZGVmIHVuc2ln
bmVkIF9faW50MTI4IHVpbnQxMjhfdHlwZTsKLSMgIGVuZGlmCi19Ci0jZW5kaWYKLS8vIHNhbWUg
YWdhaW4gZm9yIF9fZmxvYXQxMjg6Ci0jaWYgZGVmaW5lZChCT09TVF9IQVNfRkxPQVQxMjgpICYm
IGRlZmluZWQoX19jcGx1c3BsdXMpCi1uYW1lc3BhY2UgYm9vc3QgewotIyAgaWZkZWYgX19HTlVD
X18KLSAgIF9fZXh0ZW5zaW9uX18gdHlwZWRlZiBfX2Zsb2F0MTI4IGZsb2F0MTI4X3R5cGU7Ci0j
ICBlbHNlCi0gICB0eXBlZGVmIF9fZmxvYXQxMjggZmxvYXQxMjhfdHlwZTsKLSMgIGVuZGlmCi19
Ci0jZW5kaWYKLQotLy8gQk9PU1RfW0FQUEVORF9dRVhQTElDSVRfVEVNUExBVEVfW05PTl9dVFlQ
RSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCi0vLyBUaGVzZSBtYWNyb3Mg
YXJlIG9ic29sZXRlLiBQb3J0IGF3YXkgYW5kIHJlbW92ZS4KLQotIyAgZGVmaW5lIEJPT1NUX0VY
UExJQ0lUX1RFTVBMQVRFX1RZUEUodCkKLSMgIGRlZmluZSBCT09TVF9FWFBMSUNJVF9URU1QTEFU
RV9UWVBFX1NQRUModCkKLSMgIGRlZmluZSBCT09TVF9FWFBMSUNJVF9URU1QTEFURV9OT05fVFlQ
RSh0LCB2KQotIyAgZGVmaW5lIEJPT1NUX0VYUExJQ0lUX1RFTVBMQVRFX05PTl9UWVBFX1NQRUMo
dCwgdikKLQotIyAgZGVmaW5lIEJPT1NUX0FQUEVORF9FWFBMSUNJVF9URU1QTEFURV9UWVBFKHQp
Ci0jICBkZWZpbmUgQk9PU1RfQVBQRU5EX0VYUExJQ0lUX1RFTVBMQVRFX1RZUEVfU1BFQyh0KQot
IyAgZGVmaW5lIEJPT1NUX0FQUEVORF9FWFBMSUNJVF9URU1QTEFURV9OT05fVFlQRSh0LCB2KQot
IyAgZGVmaW5lIEJPT1NUX0FQUEVORF9FWFBMSUNJVF9URU1QTEFURV9OT05fVFlQRV9TUEVDKHQs
IHYpCi0KLS8vIFdoZW4gQk9PU1RfTk9fU1REX1RZUEVJTkZPIGlzIGRlZmluZWQsIHdlIGNhbiBq
dXN0IGltcG9ydAotLy8gdGhlIGdsb2JhbCBkZWZpbml0aW9uIGludG8gc3RkIG5hbWVzcGFjZToK
LSNpZiBkZWZpbmVkKEJPT1NUX05PX1NURF9UWVBFSU5GTykgJiYgZGVmaW5lZChfX2NwbHVzcGx1
cykKLSNpbmNsdWRlIDx0eXBlaW5mbz4KLW5hbWVzcGFjZSBzdGR7IHVzaW5nIDo6dHlwZV9pbmZv
OyB9Ci0jZW5kaWYKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQotLy8KLS8vIEhlbHBlciBt
YWNybyBCT09TVF9TVFJJTkdJWkU6Ci0vLyBDb252ZXJ0cyB0aGUgcGFyYW1ldGVyIFggdG8gYSBz
dHJpbmcgYWZ0ZXIgbWFjcm8gcmVwbGFjZW1lbnQKLS8vIG9uIFggaGFzIGJlZW4gcGVyZm9ybWVk
LgotLy8KLSNkZWZpbmUgQk9PU1RfU1RSSU5HSVpFKFgpIEJPT1NUX0RPX1NUUklOR0laRShYKQot
I2RlZmluZSBCT09TVF9ET19TVFJJTkdJWkUoWCkgI1gKLQotLy8KLS8vIEhlbHBlciBtYWNybyBC
T09TVF9KT0lOOgotLy8gVGhlIGZvbGxvd2luZyBwaWVjZSBvZiBtYWNybyBtYWdpYyBqb2lucyB0
aGUgdHdvCi0vLyBhcmd1bWVudHMgdG9nZXRoZXIsIGV2ZW4gd2hlbiBvbmUgb2YgdGhlIGFyZ3Vt
ZW50cyBpcwotLy8gaXRzZWxmIGEgbWFjcm8gKHNlZSAxNi4zLjEgaW4gQysrIHN0YW5kYXJkKS4g
IFRoZSBrZXkKLS8vIGlzIHRoYXQgbWFjcm8gZXhwYW5zaW9uIG9mIG1hY3JvIGFyZ3VtZW50cyBk
b2VzIG5vdAotLy8gb2NjdXIgaW4gQk9PU1RfRE9fSk9JTjIgYnV0IGRvZXMgaW4gQk9PU1RfRE9f
Sk9JTi4KLS8vCi0jZGVmaW5lIEJPT1NUX0pPSU4oIFgsIFkgKSBCT09TVF9ET19KT0lOKCBYLCBZ
ICkKLSNkZWZpbmUgQk9PU1RfRE9fSk9JTiggWCwgWSApIEJPT1NUX0RPX0pPSU4yKFgsWSkKLSNk
ZWZpbmUgQk9PU1RfRE9fSk9JTjIoIFgsIFkgKSBYIyNZCi0KLS8vCi0vLyBTZXQgc29tZSBkZWZh
dWx0IHZhbHVlcyBmb3IgY29tcGlsZXIvbGlicmFyeS9wbGF0Zm9ybSBuYW1lcy4KLS8vIFRoZXNl
IGFyZSBmb3IgZGVidWdnaW5nIGNvbmZpZyBzZXR1cCBvbmx5OgotLy8KLSMgIGlmbmRlZiBCT09T
VF9DT01QSUxFUgotIyAgICAgZGVmaW5lIEJPT1NUX0NPTVBJTEVSICJVbmtub3duIElTTyBDKysg
Q29tcGlsZXIiCi0jICBlbmRpZgotIyAgaWZuZGVmIEJPT1NUX1NURExJQgotIyAgICAgZGVmaW5l
IEJPT1NUX1NURExJQiAiVW5rbm93biBJU08gc3RhbmRhcmQgbGlicmFyeSIKLSMgIGVuZGlmCi0j
ICBpZm5kZWYgQk9PU1RfUExBVEZPUk0KLSMgICAgIGlmIGRlZmluZWQodW5peCkgfHwgZGVmaW5l
ZChfX3VuaXgpIHx8IGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgXAotICAgICAgICAgfHwgZGVmaW5l
ZChfUE9TSVhfU09VUkNFKQotIyAgICAgICAgZGVmaW5lIEJPT1NUX1BMQVRGT1JNICJHZW5lcmlj
IFVuaXgiCi0jICAgICBlbHNlCi0jICAgICAgICBkZWZpbmUgQk9PU1RfUExBVEZPUk0gIlVua25v
d24iCi0jICAgICBlbmRpZgotIyAgZW5kaWYKLQotLy8KLS8vIFNldCBzb21lIGRlZmF1bHQgdmFs
dWVzIEdQVSBzdXBwb3J0Ci0vLwotIyAgaWZuZGVmIEJPT1NUX0dQVV9FTkFCTEVECi0jICBkZWZp
bmUgQk9PU1RfR1BVX0VOQUJMRUQKLSMgIGVuZGlmCi0KLS8vIEJPT1NUX1JFU1RSSUNUIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0vLyBNYWNybyB0byB1
c2UgaW4gcGxhY2Ugb2YgJ3Jlc3RyaWN0JyBrZXl3b3JkIHZhcmlhbnRzCi0jaWYgIWRlZmluZWQo
Qk9PU1RfUkVTVFJJQ1QpCi0jICBpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyAgICBkZWZpbmUgQk9P
U1RfUkVTVFJJQ1QgX19yZXN0cmljdAotIyAgICBpZiAhZGVmaW5lZChCT09TVF9OT19SRVNUUklD
VF9SRUZFUkVOQ0VTKSAmJiAoX01TQ19GVUxMX1ZFUiA8IDE5MDAyMzAyNikKLSMgICAgICBkZWZp
bmUgQk9PU1RfTk9fUkVTVFJJQ1RfUkVGRVJFTkNFUwotIyAgICBlbmRpZgotIyAgZWxpZiBkZWZp
bmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+IDMKLSAgICAgLy8gQ2xhbmcgYWxzbyBkZWZpbmVz
IF9fR05VQ19fIChhcyA0KQotIyAgICBkZWZpbmUgQk9PU1RfUkVTVFJJQ1QgX19yZXN0cmljdF9f
Ci0jICBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9SRVNUUklDVAotIyAgICBpZiAhZGVmaW5lZChC
T09TVF9OT19SRVNUUklDVF9SRUZFUkVOQ0VTKQotIyAgICAgIGRlZmluZSBCT09TVF9OT19SRVNU
UklDVF9SRUZFUkVOQ0VTCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLS8vIEJPT1NU
X0ZPUkNFSU5MSU5FIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS8vCi0vLyBNYWNybyB0byB1c2UgaW4gcGxhY2Ugb2YgJ2lubGluZScgdG8gZm9yY2UgYSBmdW5j
dGlvbiB0byBiZSBpbmxpbmUKLSNpZiAhZGVmaW5lZChCT09TVF9GT1JDRUlOTElORSkKLSMgIGlm
IGRlZmluZWQoX01TQ19WRVIpCi0jICAgIGRlZmluZSBCT09TVF9GT1JDRUlOTElORSBfX2ZvcmNl
aW5saW5lCi0jICBlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID4gMwotICAgICAv
LyBDbGFuZyBhbHNvIGRlZmluZXMgX19HTlVDX18gKGFzIDQpCi0jICAgIGRlZmluZSBCT09TVF9G
T1JDRUlOTElORSBpbmxpbmUgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKLSMg
IGVsc2UKLSMgICAgZGVmaW5lIEJPT1NUX0ZPUkNFSU5MSU5FIGlubGluZQotIyAgZW5kaWYKLSNl
bmRpZgotCi0vLyBCT09TVF9OT0lOTElORSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0vLwotLy8gTWFjcm8gdG8gdXNlIGluIHBsYWNlIG9mICdpbmxpbmUnIHRv
IHByZXZlbnQgYSBmdW5jdGlvbiB0byBiZSBpbmxpbmVkCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9J
TkxJTkUpCi0jICBpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyAgICBkZWZpbmUgQk9PU1RfTk9JTkxJ
TkUgX19kZWNsc3BlYyhub2lubGluZSkKLSMgIGVsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19H
TlVDX18gPiAzCi0gICAgIC8vIENsYW5nIGFsc28gZGVmaW5lcyBfX0dOVUNfXyAoYXMgNCkKLSMg
ICAgaWYgZGVmaW5lZChfX0NVREFDQ19fKQotICAgICAgIC8vIG52Y2MgZG9lc24ndCBhbHdheXMg
cGFyc2UgX19ub2lubGluZV9fLAotICAgICAgIC8vIHNlZTogaHR0cHM6Ly9zdm4uYm9vc3Qub3Jn
L3RyYWMvYm9vc3QvdGlja2V0LzkzOTIKLSMgICAgICBkZWZpbmUgQk9PU1RfTk9JTkxJTkUgX19h
dHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBCT09TVF9O
T0lOTElORSBfX2F0dHJpYnV0ZV9fICgoX19ub2lubGluZV9fKSkKLSMgICAgZW5kaWYKLSMgIGVs
c2UKLSMgICAgZGVmaW5lIEJPT1NUX05PSU5MSU5FCi0jICBlbmRpZgotI2VuZGlmCi0KLS8vIEJP
T1NUX05PUkVUVVJOIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS8vCi0vLyBNYWNybyB0byB1c2UgYmVmb3JlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24vZGVmaW5p
dGlvbiB0byBkZXNpZ25hdGUKLS8vIHRoZSBmdW5jdGlvbiBhcyBub3QgcmV0dXJuaW5nIG5vcm1h
bGx5IChpLmUuIHdpdGggYSByZXR1cm4gc3RhdGVtZW50Ci0vLyBvciBieSBsZWF2aW5nIHRoZSBm
dW5jdGlvbiBzY29wZSwgaWYgdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIGlzIHZvaWQpLgotI2lm
ICFkZWZpbmVkKEJPT1NUX05PUkVUVVJOKQotIyAgaWYgZGVmaW5lZChfTVNDX1ZFUikKLSMgICAg
ZGVmaW5lIEJPT1NUX05PUkVUVVJOIF9fZGVjbHNwZWMobm9yZXR1cm4pCi0jICBlbGlmIGRlZmlu
ZWQoX19HTlVDX18pCi0jICAgIGRlZmluZSBCT09TVF9OT1JFVFVSTiBfX2F0dHJpYnV0ZV9fICgo
X19ub3JldHVybl9fKSkKLSMgIGVsaWYgZGVmaW5lZChfX2hhc19hdHRyaWJ1dGUpICYmIGRlZmlu
ZWQoX19TVU5QUk9fQ0MpCi0jICAgIGlmIF9faGFzX2F0dHJpYnV0ZShub3JldHVybikKLSMgICAg
ICBkZWZpbmUgQk9PU1RfTk9SRVRVUk4gW1tub3JldHVybl1dCi0jICAgIGVuZGlmCi0jICBlbGlm
IGRlZmluZWQoX19oYXNfY3BwX2F0dHJpYnV0ZSkgCi0jICAgIGlmIF9faGFzX2NwcF9hdHRyaWJ1
dGUobm9yZXR1cm4pCi0jICAgICAgZGVmaW5lIEJPT1NUX05PUkVUVVJOIFtbbm9yZXR1cm5dXQot
IyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9SRVRV
Uk4pCi0jICBkZWZpbmUgQk9PU1RfTk9fTk9SRVRVUk4KLSMgIGRlZmluZSBCT09TVF9OT1JFVFVS
TgotI2VuZGlmCi0KLS8vIEJyYW5jaCBwcmVkaWN0aW9uIGhpbnRzCi0vLyBUaGVzZSBtYWNyb3Mg
YXJlIGludGVuZGVkIHRvIHdyYXAgY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgdGhhdCB5aWVsZCB0
cnVlIG9yIGZhbHNlCi0vLwotLy8gIGlmIChCT09TVF9MSUtFTFkodmFyID09IDEwKSkKLS8vICB7
Ci0vLyAgICAgLy8gdGhlIG1vc3QgcHJvYmFibGUgY29kZSBoZXJlCi0vLyAgfQotLy8KLSNpZiAh
ZGVmaW5lZChCT09TVF9MSUtFTFkpCi0jICBkZWZpbmUgQk9PU1RfTElLRUxZKHgpIHgKLSNlbmRp
ZgotI2lmICFkZWZpbmVkKEJPT1NUX1VOTElLRUxZKQotIyAgZGVmaW5lIEJPT1NUX1VOTElLRUxZ
KHgpIHgKLSNlbmRpZgotCi0vLyBUeXBlIGFuZCBkYXRhIGFsaWdubWVudCBzcGVjaWZpY2F0aW9u
Ci0vLwotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX0FMSUdOQVMpCi0jICBkZWZpbmUgQk9P
U1RfQUxJR05NRU5UKHgpIGFsaWduYXMoeCkKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0jICBk
ZWZpbmUgQk9PU1RfQUxJR05NRU5UKHgpIF9fZGVjbHNwZWMoYWxpZ24oeCkpCi0jZWxpZiBkZWZp
bmVkKF9fR05VQ19fKQotIyAgZGVmaW5lIEJPT1NUX0FMSUdOTUVOVCh4KSBfX2F0dHJpYnV0ZV9f
ICgoX19hbGlnbmVkX18oeCkpKQotI2Vsc2UKLSMgIGRlZmluZSBCT09TVF9OT19BTElHTk1FTlQK
LSMgIGRlZmluZSBCT09TVF9BTElHTk1FTlQoeCkKLSNlbmRpZgotCi0vLyBMYWNrIG9mIG5vbi1w
dWJsaWMgZGVmYXVsdGVkIGZ1bmN0aW9ucyBpcyBpbXBsaWVkIGJ5IHRoZSBsYWNrIG9mIGFueSBk
ZWZhdWx0ZWQgZnVuY3Rpb25zCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfTk9OX1BVQkxJ
Q19ERUZBVUxURURfRlVOQ1RJT05TKSAmJiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX0RFRkFVTFRF
RF9GVU5DVElPTlMpCi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hYMTFfTk9OX1BVQkxJQ19ERUZBVUxU
RURfRlVOQ1RJT05TCi0jZW5kaWYKLQotLy8gRGVmYXVsdGVkIGFuZCBkZWxldGVkIGZ1bmN0aW9u
IGRlY2xhcmF0aW9uIGhlbHBlcnMKLS8vIFRoZXNlIG1hY3JvcyBhcmUgaW50ZW5kZWQgdG8gYmUg
aW5zaWRlIGEgY2xhc3MgZGVmaW5pdGlvbi4KLS8vIEJPT1NUX0RFRkFVTFRFRF9GVU5DVElPTiBh
Y2NlcHRzIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhbmQgaXRzCi0vLyBib2R5LCB3aGljaCB3
aWxsIGJlIHVzZWQgaWYgdGhlIGNvbXBpbGVyIGRvZXNuJ3Qgc3VwcG9ydCBkZWZhdWx0ZWQgZnVu
Y3Rpb25zLgotLy8gQk9PU1RfREVMRVRFRF9GVU5DVElPTiBvbmx5IGFjY2VwdHMgdGhlIGZ1bmN0
aW9uIGRlY2xhcmF0aW9uLiBJdAotLy8gd2lsbCBleHBhbmQgdG8gYSBwcml2YXRlIGZ1bmN0aW9u
IGRlY2xhcmF0aW9uLCBpZiB0aGUgY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0Ci0vLyBkZWxldGVk
IGZ1bmN0aW9ucy4gQmVjYXVzZSBvZiB0aGlzIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBCT09T
VF9ERUxFVEVEX0ZVTkNUSU9OCi0vLyBpbiB0aGUgZW5kIG9mIHRoZSBjbGFzcyBkZWZpbml0aW9u
LgotLy8KLS8vICBjbGFzcyBteV9jbGFzcwotLy8gIHsKLS8vICBwdWJsaWM6Ci0vLyAgICAgIC8v
IERlZmF1bHQtY29uc3RydWN0aWJsZQotLy8gICAgICBCT09TVF9ERUZBVUxURURfRlVOQ1RJT04o
bXlfY2xhc3MoKSwge30pCi0vLyAgICAgIC8vIENvcHlpbmcgcHJvaGliaXRlZAotLy8gICAgICBC
T09TVF9ERUxFVEVEX0ZVTkNUSU9OKG15X2NsYXNzKG15X2NsYXNzIGNvbnN0JikpCi0vLyAgICAg
IEJPT1NUX0RFTEVURURfRlVOQ1RJT04obXlfY2xhc3MmIG9wZXJhdG9yPSAobXlfY2xhc3MgY29u
c3QmKSkKLS8vICB9OwotLy8KLSNpZiAhKGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfREVGQVVMVEVE
X0ZVTkNUSU9OUykgfHwgZGVmaW5lZChCT09TVF9OT19DWFgxMV9OT05fUFVCTElDX0RFRkFVTFRF
RF9GVU5DVElPTlMpKQotIyAgIGRlZmluZSBCT09TVF9ERUZBVUxURURfRlVOQ1RJT04oZnVuLCBi
b2R5KSBmdW4gPSBkZWZhdWx0OwotI2Vsc2UKLSMgICBkZWZpbmUgQk9PU1RfREVGQVVMVEVEX0ZV
TkNUSU9OKGZ1biwgYm9keSkgZnVuIGJvZHkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQk9PU1Rf
Tk9fQ1hYMTFfREVMRVRFRF9GVU5DVElPTlMpCi0jICAgZGVmaW5lIEJPT1NUX0RFTEVURURfRlVO
Q1RJT04oZnVuKSBmdW4gPSBkZWxldGU7Ci0jZWxzZQotIyAgIGRlZmluZSBCT09TVF9ERUxFVEVE
X0ZVTkNUSU9OKGZ1bikgcHJpdmF0ZTogZnVuOwotI2VuZGlmCi0KLS8vCi0vLyBTZXQgQk9PU1Rf
Tk9fREVDTFRZUEVfTjMyNzYgd2hlbiBCT09TVF9OT19ERUNMVFlQRSBpcyBkZWZpbmVkCi0vLwot
I2lmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfREVDTFRZUEUpICYmICFkZWZpbmVkKEJPT1NUX05P
X0NYWDExX0RFQ0xUWVBFX04zMjc2KQotI2RlZmluZSBCT09TVF9OT19DWFgxMV9ERUNMVFlQRV9O
MzI3NiBCT09TVF9OT19DWFgxMV9ERUNMVFlQRQotI2VuZGlmCi0KLS8vICAtLS0tLS0tLS0tLS0t
LS0tLS0tLSBEZXByZWNhdGVkIG1hY3JvcyBmb3IgMS41MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vICBUaGVzZSB3aWxsIGdvIGF3YXkgaW4gYSBmdXR1cmUgcmVsZWFzZQotCi0vLyAg
VXNlIEJPT1NUX05PX0NYWDExX0hEUl9VTk9SREVSRURfU0VUIG9yIEJPT1NUX05PX0NYWDExX0hE
Ul9VTk9SREVSRURfTUFQCi0vLyAgICAgICAgICAgaW5zdGVhZCBvZiBCT09TVF9OT19TVERfVU5P
UkRFUkVECi0jaWYgZGVmaW5lZChCT09TVF9OT19DWFgxMV9IRFJfVU5PUkRFUkVEX01BUCkgfHwg
ZGVmaW5lZCAoQk9PU1RfTk9fQ1hYMTFfSERSX1VOT1JERVJFRF9TRVQpCi0jIGlmbmRlZiBCT09T
VF9OT19DWFgxMV9TVERfVU5PUkRFUkVECi0jICBkZWZpbmUgQk9PU1RfTk9fQ1hYMTFfU1REX1VO
T1JERVJFRAotIyBlbmRpZgotI2VuZGlmCi0KLS8vICBVc2UgQk9PU1RfTk9fQ1hYMTFfSERSX0lO
SVRJQUxJWkVSX0xJU1QgaW5zdGVhZCBvZiBCT09TVF9OT19JTklUSUFMSVpFUl9MSVNUUwotI2lm
IGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfSERSX0lOSVRJQUxJWkVSX0xJU1QpICYmICFkZWZpbmVk
KEJPT1NUX05PX0lOSVRJQUxJWkVSX0xJU1RTKQotIyAgZGVmaW5lIEJPT1NUX05PX0lOSVRJQUxJ
WkVSX0xJU1RTCi0jZW5kaWYKLQotLy8gIFVzZSBCT09TVF9OT19DWFgxMV9IRFJfQVJSQVkgaW5z
dGVhZCBvZiBCT09TVF9OT18wWF9IRFJfQVJSQVkKLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NYWDEx
X0hEUl9BUlJBWSkgJiYgIWRlZmluZWQoQk9PU1RfTk9fMFhfSERSX0FSUkFZKQotIyAgZGVmaW5l
IEJPT1NUX05PXzBYX0hEUl9BUlJBWQotI2VuZGlmCi0vLyAgVXNlIEJPT1NUX05PX0NYWDExX0hE
Ul9DSFJPTk8gaW5zdGVhZCBvZiBCT09TVF9OT18wWF9IRFJfQ0hST05PCi0jaWYgZGVmaW5lZChC
T09TVF9OT19DWFgxMV9IRFJfQ0hST05PKSAmJiAhZGVmaW5lZChCT09TVF9OT18wWF9IRFJfQ0hS
T05PKQotIyAgZGVmaW5lIEJPT1NUX05PXzBYX0hEUl9DSFJPTk8KLSNlbmRpZgotLy8gIFVzZSBC
T09TVF9OT19DWFgxMV9IRFJfQ09ERUNWVCBpbnN0ZWFkIG9mIEJPT1NUX05PXzBYX0hEUl9DT0RF
Q1ZUCi0jaWYgZGVmaW5lZChCT09TVF9OT19DWFgxMV9IRFJfQ09ERUNWVCkgJiYgIWRlZmluZWQo
Qk9PU1RfTk9fMFhfSERSX0NPREVDVlQpCi0jICBkZWZpbmUgQk9PU1RfTk9fMFhfSERSX0NPREVD
VlQKLSNlbmRpZgotLy8gIFVzZSBCT09TVF9OT19DWFgxMV9IRFJfQ09ORElUSU9OX1ZBUklBQkxF
IGluc3RlYWQgb2YgQk9PU1RfTk9fMFhfSERSX0NPTkRJVElPTl9WQVJJQUJMRQotI2lmIGRlZmlu
ZWQoQk9PU1RfTk9fQ1hYMTFfSERSX0NPTkRJVElPTl9WQVJJQUJMRSkgJiYgIWRlZmluZWQoQk9P
U1RfTk9fMFhfSERSX0NPTkRJVElPTl9WQVJJQUJMRSkKLSMgIGRlZmluZSBCT09TVF9OT18wWF9I
RFJfQ09ORElUSU9OX1ZBUklBQkxFCi0jZW5kaWYKLS8vICBVc2UgQk9PU1RfTk9fQ1hYMTFfSERS
X0ZPUldBUkRfTElTVCBpbnN0ZWFkIG9mIEJPT1NUX05PXzBYX0hEUl9GT1JXQVJEX0xJU1QKLSNp
ZiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX0hEUl9GT1JXQVJEX0xJU1QpICYmICFkZWZpbmVkKEJP
T1NUX05PXzBYX0hEUl9GT1JXQVJEX0xJU1QpCi0jICBkZWZpbmUgQk9PU1RfTk9fMFhfSERSX0ZP
UldBUkRfTElTVAotI2VuZGlmCi0vLyAgVXNlIEJPT1NUX05PX0NYWDExX0hEUl9GVVRVUkUgaW5z
dGVhZCBvZiBCT09TVF9OT18wWF9IRFJfRlVUVVJFCi0jaWYgZGVmaW5lZChCT09TVF9OT19DWFgx
MV9IRFJfRlVUVVJFKSAmJiAhZGVmaW5lZChCT09TVF9OT18wWF9IRFJfRlVUVVJFKQotIyAgZGVm
aW5lIEJPT1NUX05PXzBYX0hEUl9GVVRVUkUKLSNlbmRpZgotCi0vLyAgVXNlIEJPT1NUX05PX0NY
WDExX0hEUl9JTklUSUFMSVpFUl9MSVNUCi0vLyAgaW5zdGVhZCBvZiBCT09TVF9OT18wWF9IRFJf
SU5JVElBTElaRVJfTElTVCBvciBCT09TVF9OT19JTklUSUFMSVpFUl9MSVNUUwotI2lmZGVmIEJP
T1NUX05PX0NYWDExX0hEUl9JTklUSUFMSVpFUl9MSVNUCi0jIGlmbmRlZiBCT09TVF9OT18wWF9I
RFJfSU5JVElBTElaRVJfTElTVAotIyAgZGVmaW5lIEJPT1NUX05PXzBYX0hEUl9JTklUSUFMSVpF
Ul9MSVNUCi0jIGVuZGlmCi0jIGlmbmRlZiBCT09TVF9OT19JTklUSUFMSVpFUl9MSVNUUwotIyAg
ZGVmaW5lIEJPT1NUX05PX0lOSVRJQUxJWkVSX0xJU1RTCi0jIGVuZGlmCi0jZW5kaWYKLQotLy8g
IFVzZSBCT09TVF9OT19DWFgxMV9IRFJfTVVURVggaW5zdGVhZCBvZiBCT09TVF9OT18wWF9IRFJf
TVVURVgKLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX0hEUl9NVVRFWCkgJiYgIWRlZmluZWQo
Qk9PU1RfTk9fMFhfSERSX01VVEVYKQotIyAgZGVmaW5lIEJPT1NUX05PXzBYX0hEUl9NVVRFWAot
I2VuZGlmCi0vLyAgVXNlIEJPT1NUX05PX0NYWDExX0hEUl9SQU5ET00gaW5zdGVhZCBvZiBCT09T
VF9OT18wWF9IRFJfUkFORE9NCi0jaWYgZGVmaW5lZChCT09TVF9OT19DWFgxMV9IRFJfUkFORE9N
KSAmJiAhZGVmaW5lZChCT09TVF9OT18wWF9IRFJfUkFORE9NKQotIyAgZGVmaW5lIEJPT1NUX05P
XzBYX0hEUl9SQU5ET00KLSNlbmRpZgotLy8gIFVzZSBCT09TVF9OT19DWFgxMV9IRFJfUkFUSU8g
aW5zdGVhZCBvZiBCT09TVF9OT18wWF9IRFJfUkFUSU8KLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NY
WDExX0hEUl9SQVRJTykgJiYgIWRlZmluZWQoQk9PU1RfTk9fMFhfSERSX1JBVElPKQotIyAgZGVm
aW5lIEJPT1NUX05PXzBYX0hEUl9SQVRJTwotI2VuZGlmCi0vLyAgVXNlIEJPT1NUX05PX0NYWDEx
X0hEUl9SRUdFWCBpbnN0ZWFkIG9mIEJPT1NUX05PXzBYX0hEUl9SRUdFWAotI2lmIGRlZmluZWQo
Qk9PU1RfTk9fQ1hYMTFfSERSX1JFR0VYKSAmJiAhZGVmaW5lZChCT09TVF9OT18wWF9IRFJfUkVH
RVgpCi0jICBkZWZpbmUgQk9PU1RfTk9fMFhfSERSX1JFR0VYCi0jZW5kaWYKLS8vICBVc2UgQk9P
U1RfTk9fQ1hYMTFfSERSX1NZU1RFTV9FUlJPUiBpbnN0ZWFkIG9mIEJPT1NUX05PXzBYX0hEUl9T
WVNURU1fRVJST1IKLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX0hEUl9TWVNURU1fRVJST1Ip
ICYmICFkZWZpbmVkKEJPT1NUX05PXzBYX0hEUl9TWVNURU1fRVJST1IpCi0jICBkZWZpbmUgQk9P
U1RfTk9fMFhfSERSX1NZU1RFTV9FUlJPUgotI2VuZGlmCi0vLyAgVXNlIEJPT1NUX05PX0NYWDEx
X0hEUl9USFJFQUQgaW5zdGVhZCBvZiBCT09TVF9OT18wWF9IRFJfVEhSRUFECi0jaWYgZGVmaW5l
ZChCT09TVF9OT19DWFgxMV9IRFJfVEhSRUFEKSAmJiAhZGVmaW5lZChCT09TVF9OT18wWF9IRFJf
VEhSRUFEKQotIyAgZGVmaW5lIEJPT1NUX05PXzBYX0hEUl9USFJFQUQKLSNlbmRpZgotLy8gIFVz
ZSBCT09TVF9OT19DWFgxMV9IRFJfVFVQTEUgaW5zdGVhZCBvZiBCT09TVF9OT18wWF9IRFJfVFVQ
TEUKLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX0hEUl9UVVBMRSkgJiYgIWRlZmluZWQoQk9P
U1RfTk9fMFhfSERSX1RVUExFKQotIyAgZGVmaW5lIEJPT1NUX05PXzBYX0hEUl9UVVBMRQotI2Vu
ZGlmCi0vLyAgVXNlIEJPT1NUX05PX0NYWDExX0hEUl9UWVBFX1RSQUlUUyBpbnN0ZWFkIG9mIEJP
T1NUX05PXzBYX0hEUl9UWVBFX1RSQUlUUwotI2lmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfSERS
X1RZUEVfVFJBSVRTKSAmJiAhZGVmaW5lZChCT09TVF9OT18wWF9IRFJfVFlQRV9UUkFJVFMpCi0j
ICBkZWZpbmUgQk9PU1RfTk9fMFhfSERSX1RZUEVfVFJBSVRTCi0jZW5kaWYKLS8vICBVc2UgQk9P
U1RfTk9fQ1hYMTFfSERSX1RZUEVJTkRFWCBpbnN0ZWFkIG9mIEJPT1NUX05PXzBYX0hEUl9UWVBF
SU5ERVgKLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX0hEUl9UWVBFSU5ERVgpICYmICFkZWZp
bmVkKEJPT1NUX05PXzBYX0hEUl9UWVBFSU5ERVgpCi0jICBkZWZpbmUgQk9PU1RfTk9fMFhfSERS
X1RZUEVJTkRFWAotI2VuZGlmCi0vLyAgVXNlIEJPT1NUX05PX0NYWDExX0hEUl9VTk9SREVSRURf
TUFQIGluc3RlYWQgb2YgQk9PU1RfTk9fMFhfSERSX1VOT1JERVJFRF9NQVAKLSNpZiBkZWZpbmVk
KEJPT1NUX05PX0NYWDExX0hEUl9VTk9SREVSRURfTUFQKSAmJiAhZGVmaW5lZChCT09TVF9OT18w
WF9IRFJfVU5PUkRFUkVEX01BUCkKLSMgIGRlZmluZSBCT09TVF9OT18wWF9IRFJfVU5PUkRFUkVE
X01BUAotI2VuZGlmCi0vLyAgVXNlIEJPT1NUX05PX0NYWDExX0hEUl9VTk9SREVSRURfU0VUIGlu
c3RlYWQgb2YgQk9PU1RfTk9fMFhfSERSX1VOT1JERVJFRF9TRVQKLSNpZiBkZWZpbmVkKEJPT1NU
X05PX0NYWDExX0hEUl9VTk9SREVSRURfU0VUKSAmJiAhZGVmaW5lZChCT09TVF9OT18wWF9IRFJf
VU5PUkRFUkVEX1NFVCkKLSMgIGRlZmluZSBCT09TVF9OT18wWF9IRFJfVU5PUkRFUkVEX1NFVAot
I2VuZGlmCi0KLS8vICAtLS0tLS0tLS0tLS0tLS0tLS0gRW5kIG9mIGRlcHJlY2F0ZWQgbWFjcm9z
IGZvciAxLjUwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0gRGVwcmVjYXRlZCBtYWNyb3MgZm9yIDEuNTEgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyAgVGhlc2Ugd2lsbCBnbyBhd2F5IGluIGEgZnV0dXJlIHJlbGVhc2UKLQotLy8g
IFVzZSAgICAgQk9PU1RfTk9fQ1hYMTFfQVVUT19ERUNMQVJBVElPTlMgaW5zdGVhZCBvZiAgIEJP
T1NUX05PX0FVVE9fREVDTEFSQVRJT05TCi0jaWYgZGVmaW5lZChCT09TVF9OT19DWFgxMV9BVVRP
X0RFQ0xBUkFUSU9OUykgJiYgIWRlZmluZWQoQk9PU1RfTk9fQVVUT19ERUNMQVJBVElPTlMpCi0j
ICBkZWZpbmUgQk9PU1RfTk9fQVVUT19ERUNMQVJBVElPTlMKLSNlbmRpZgotLy8gIFVzZSAgICAg
Qk9PU1RfTk9fQ1hYMTFfQVVUT19NVUxUSURFQ0xBUkFUSU9OUyBpbnN0ZWFkIG9mICAgQk9PU1Rf
Tk9fQVVUT19NVUxUSURFQ0xBUkFUSU9OUwotI2lmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfQVVU
T19NVUxUSURFQ0xBUkFUSU9OUykgJiYgIWRlZmluZWQoQk9PU1RfTk9fQVVUT19NVUxUSURFQ0xB
UkFUSU9OUykKLSMgIGRlZmluZSBCT09TVF9OT19BVVRPX01VTFRJREVDTEFSQVRJT05TCi0jZW5k
aWYKLS8vICBVc2UgICAgIEJPT1NUX05PX0NYWDExX0NIQVIxNl9UIGluc3RlYWQgb2YgICBCT09T
VF9OT19DSEFSMTZfVAotI2lmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfQ0hBUjE2X1QpICYmICFk
ZWZpbmVkKEJPT1NUX05PX0NIQVIxNl9UKQotIyAgZGVmaW5lIEJPT1NUX05PX0NIQVIxNl9UCi0j
ZW5kaWYKLS8vICBVc2UgICAgIEJPT1NUX05PX0NYWDExX0NIQVIzMl9UIGluc3RlYWQgb2YgICBC
T09TVF9OT19DSEFSMzJfVAotI2lmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfQ0hBUjMyX1QpICYm
ICFkZWZpbmVkKEJPT1NUX05PX0NIQVIzMl9UKQotIyAgZGVmaW5lIEJPT1NUX05PX0NIQVIzMl9U
Ci0jZW5kaWYKLS8vICBVc2UgICAgIEJPT1NUX05PX0NYWDExX1RFTVBMQVRFX0FMSUFTRVMgaW5z
dGVhZCBvZiAgIEJPT1NUX05PX1RFTVBMQVRFX0FMSUFTRVMKLSNpZiBkZWZpbmVkKEJPT1NUX05P
X0NYWDExX1RFTVBMQVRFX0FMSUFTRVMpICYmICFkZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFX0FM
SUFTRVMpCi0jICBkZWZpbmUgQk9PU1RfTk9fVEVNUExBVEVfQUxJQVNFUwotI2VuZGlmCi0vLyAg
VXNlICAgICBCT09TVF9OT19DWFgxMV9DT05TVEVYUFIgaW5zdGVhZCBvZiAgIEJPT1NUX05PX0NP
TlNURVhQUgotI2lmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfQ09OU1RFWFBSKSAmJiAhZGVmaW5l
ZChCT09TVF9OT19DT05TVEVYUFIpCi0jICBkZWZpbmUgQk9PU1RfTk9fQ09OU1RFWFBSCi0jZW5k
aWYKLS8vICBVc2UgICAgIEJPT1NUX05PX0NYWDExX0RFQ0xUWVBFX04zMjc2IGluc3RlYWQgb2Yg
ICBCT09TVF9OT19ERUNMVFlQRV9OMzI3NgotI2lmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfREVD
TFRZUEVfTjMyNzYpICYmICFkZWZpbmVkKEJPT1NUX05PX0RFQ0xUWVBFX04zMjc2KQotIyAgZGVm
aW5lIEJPT1NUX05PX0RFQ0xUWVBFX04zMjc2Ci0jZW5kaWYKLS8vICBVc2UgICAgIEJPT1NUX05P
X0NYWDExX0RFQ0xUWVBFIGluc3RlYWQgb2YgICBCT09TVF9OT19ERUNMVFlQRQotI2lmIGRlZmlu
ZWQoQk9PU1RfTk9fQ1hYMTFfREVDTFRZUEUpICYmICFkZWZpbmVkKEJPT1NUX05PX0RFQ0xUWVBF
KQotIyAgZGVmaW5lIEJPT1NUX05PX0RFQ0xUWVBFCi0jZW5kaWYKLS8vICBVc2UgICAgIEJPT1NU
X05PX0NYWDExX0RFRkFVTFRFRF9GVU5DVElPTlMgaW5zdGVhZCBvZiAgIEJPT1NUX05PX0RFRkFV
TFRFRF9GVU5DVElPTlMKLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX0RFRkFVTFRFRF9GVU5D
VElPTlMpICYmICFkZWZpbmVkKEJPT1NUX05PX0RFRkFVTFRFRF9GVU5DVElPTlMpCi0jICBkZWZp
bmUgQk9PU1RfTk9fREVGQVVMVEVEX0ZVTkNUSU9OUwotI2VuZGlmCi0vLyAgVXNlICAgICBCT09T
VF9OT19DWFgxMV9ERUxFVEVEX0ZVTkNUSU9OUyBpbnN0ZWFkIG9mICAgQk9PU1RfTk9fREVMRVRF
RF9GVU5DVElPTlMKLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX0RFTEVURURfRlVOQ1RJT05T
KSAmJiAhZGVmaW5lZChCT09TVF9OT19ERUxFVEVEX0ZVTkNUSU9OUykKLSMgIGRlZmluZSBCT09T
VF9OT19ERUxFVEVEX0ZVTkNUSU9OUwotI2VuZGlmCi0vLyAgVXNlICAgICBCT09TVF9OT19DWFgx
MV9FWFBMSUNJVF9DT05WRVJTSU9OX09QRVJBVE9SUyBpbnN0ZWFkIG9mICAgQk9PU1RfTk9fRVhQ
TElDSVRfQ09OVkVSU0lPTl9PUEVSQVRPUlMKLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX0VY
UExJQ0lUX0NPTlZFUlNJT05fT1BFUkFUT1JTKSAmJiAhZGVmaW5lZChCT09TVF9OT19FWFBMSUNJ
VF9DT05WRVJTSU9OX09QRVJBVE9SUykKLSMgIGRlZmluZSBCT09TVF9OT19FWFBMSUNJVF9DT05W
RVJTSU9OX09QRVJBVE9SUwotI2VuZGlmCi0vLyAgVXNlICAgICBCT09TVF9OT19DWFgxMV9FWFRF
Uk5fVEVNUExBVEUgaW5zdGVhZCBvZiAgIEJPT1NUX05PX0VYVEVSTl9URU1QTEFURQotI2lmIGRl
ZmluZWQoQk9PU1RfTk9fQ1hYMTFfRVhURVJOX1RFTVBMQVRFKSAmJiAhZGVmaW5lZChCT09TVF9O
T19FWFRFUk5fVEVNUExBVEUpCi0jICBkZWZpbmUgQk9PU1RfTk9fRVhURVJOX1RFTVBMQVRFCi0j
ZW5kaWYKLS8vICBVc2UgICAgIEJPT1NUX05PX0NYWDExX0ZVTkNUSU9OX1RFTVBMQVRFX0RFRkFV
TFRfQVJHUyBpbnN0ZWFkIG9mICAgQk9PU1RfTk9fRlVOQ1RJT05fVEVNUExBVEVfREVGQVVMVF9B
UkdTCi0jaWYgZGVmaW5lZChCT09TVF9OT19DWFgxMV9GVU5DVElPTl9URU1QTEFURV9ERUZBVUxU
X0FSR1MpICYmICFkZWZpbmVkKEJPT1NUX05PX0ZVTkNUSU9OX1RFTVBMQVRFX0RFRkFVTFRfQVJH
UykKLSMgIGRlZmluZSBCT09TVF9OT19GVU5DVElPTl9URU1QTEFURV9ERUZBVUxUX0FSR1MKLSNl
bmRpZgotLy8gIFVzZSAgICAgQk9PU1RfTk9fQ1hYMTFfTEFNQkRBUyBpbnN0ZWFkIG9mICAgQk9P
U1RfTk9fTEFNQkRBUwotI2lmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfTEFNQkRBUykgJiYgIWRl
ZmluZWQoQk9PU1RfTk9fTEFNQkRBUykKLSMgIGRlZmluZSBCT09TVF9OT19MQU1CREFTCi0jZW5k
aWYKLS8vICBVc2UgICAgIEJPT1NUX05PX0NYWDExX0xPQ0FMX0NMQVNTX1RFTVBMQVRFX1BBUkFN
RVRFUlMgaW5zdGVhZCBvZiAgIEJPT1NUX05PX0xPQ0FMX0NMQVNTX1RFTVBMQVRFX1BBUkFNRVRF
UlMKLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX0xPQ0FMX0NMQVNTX1RFTVBMQVRFX1BBUkFN
RVRFUlMpICYmICFkZWZpbmVkKEJPT1NUX05PX0xPQ0FMX0NMQVNTX1RFTVBMQVRFX1BBUkFNRVRF
UlMpCi0jICBkZWZpbmUgQk9PU1RfTk9fTE9DQUxfQ0xBU1NfVEVNUExBVEVfUEFSQU1FVEVSUwot
I2VuZGlmCi0vLyAgVXNlICAgICBCT09TVF9OT19DWFgxMV9OT0VYQ0VQVCBpbnN0ZWFkIG9mICAg
Qk9PU1RfTk9fTk9FWENFUFQKLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX05PRVhDRVBUKSAm
JiAhZGVmaW5lZChCT09TVF9OT19OT0VYQ0VQVCkKLSMgIGRlZmluZSBCT09TVF9OT19OT0VYQ0VQ
VAotI2VuZGlmCi0vLyAgVXNlICAgICBCT09TVF9OT19DWFgxMV9OVUxMUFRSIGluc3RlYWQgb2Yg
ICBCT09TVF9OT19OVUxMUFRSCi0jaWYgZGVmaW5lZChCT09TVF9OT19DWFgxMV9OVUxMUFRSKSAm
JiAhZGVmaW5lZChCT09TVF9OT19OVUxMUFRSKQotIyAgZGVmaW5lIEJPT1NUX05PX05VTExQVFIK
LSNlbmRpZgotLy8gIFVzZSAgICAgQk9PU1RfTk9fQ1hYMTFfUkFXX0xJVEVSQUxTIGluc3RlYWQg
b2YgICBCT09TVF9OT19SQVdfTElURVJBTFMKLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX1JB
V19MSVRFUkFMUykgJiYgIWRlZmluZWQoQk9PU1RfTk9fUkFXX0xJVEVSQUxTKQotIyAgZGVmaW5l
IEJPT1NUX05PX1JBV19MSVRFUkFMUwotI2VuZGlmCi0vLyAgVXNlICAgICBCT09TVF9OT19DWFgx
MV9SVkFMVUVfUkVGRVJFTkNFUyBpbnN0ZWFkIG9mICAgQk9PU1RfTk9fUlZBTFVFX1JFRkVSRU5D
RVMKLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZFUkVOQ0VTKSAmJiAhZGVm
aW5lZChCT09TVF9OT19SVkFMVUVfUkVGRVJFTkNFUykKLSMgIGRlZmluZSBCT09TVF9OT19SVkFM
VUVfUkVGRVJFTkNFUwotI2VuZGlmCi0vLyAgVXNlICAgICBCT09TVF9OT19DWFgxMV9TQ09QRURf
RU5VTVMgaW5zdGVhZCBvZiAgIEJPT1NUX05PX1NDT1BFRF9FTlVNUwotI2lmIGRlZmluZWQoQk9P
U1RfTk9fQ1hYMTFfU0NPUEVEX0VOVU1TKSAmJiAhZGVmaW5lZChCT09TVF9OT19TQ09QRURfRU5V
TVMpCi0jICBkZWZpbmUgQk9PU1RfTk9fU0NPUEVEX0VOVU1TCi0jZW5kaWYKLS8vICBVc2UgICAg
IEJPT1NUX05PX0NYWDExX1NUQVRJQ19BU1NFUlQgaW5zdGVhZCBvZiAgIEJPT1NUX05PX1NUQVRJ
Q19BU1NFUlQKLSNpZiBkZWZpbmVkKEJPT1NUX05PX0NYWDExX1NUQVRJQ19BU1NFUlQpICYmICFk
ZWZpbmVkKEJPT1NUX05PX1NUQVRJQ19BU1NFUlQpCi0jICBkZWZpbmUgQk9PU1RfTk9fU1RBVElD
X0FTU0VSVAotI2VuZGlmCi0vLyAgVXNlICAgICBCT09TVF9OT19DWFgxMV9TVERfVU5PUkRFUkVE
IGluc3RlYWQgb2YgICBCT09TVF9OT19TVERfVU5PUkRFUkVECi0jaWYgZGVmaW5lZChCT09TVF9O
T19DWFgxMV9TVERfVU5PUkRFUkVEKSAmJiAhZGVmaW5lZChCT09TVF9OT19TVERfVU5PUkRFUkVE
KQotIyAgZGVmaW5lIEJPT1NUX05PX1NURF9VTk9SREVSRUQKLSNlbmRpZgotLy8gIFVzZSAgICAg
Qk9PU1RfTk9fQ1hYMTFfVU5JQ09ERV9MSVRFUkFMUyBpbnN0ZWFkIG9mICAgQk9PU1RfTk9fVU5J
Q09ERV9MSVRFUkFMUwotI2lmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfVU5JQ09ERV9MSVRFUkFM
UykgJiYgIWRlZmluZWQoQk9PU1RfTk9fVU5JQ09ERV9MSVRFUkFMUykKLSMgIGRlZmluZSBCT09T
VF9OT19VTklDT0RFX0xJVEVSQUxTCi0jZW5kaWYKLS8vICBVc2UgICAgIEJPT1NUX05PX0NYWDEx
X1VOSUZJRURfSU5JVElBTElaQVRJT05fU1lOVEFYIGluc3RlYWQgb2YgICBCT09TVF9OT19VTklG
SUVEX0lOSVRJQUxJWkFUSU9OX1NZTlRBWAotI2lmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfVU5J
RklFRF9JTklUSUFMSVpBVElPTl9TWU5UQVgpICYmICFkZWZpbmVkKEJPT1NUX05PX1VOSUZJRURf
SU5JVElBTElaQVRJT05fU1lOVEFYKQotIyAgZGVmaW5lIEJPT1NUX05PX1VOSUZJRURfSU5JVElB
TElaQVRJT05fU1lOVEFYCi0jZW5kaWYKLS8vICBVc2UgICAgIEJPT1NUX05PX0NYWDExX1ZBUklB
RElDX1RFTVBMQVRFUyBpbnN0ZWFkIG9mICAgQk9PU1RfTk9fVkFSSUFESUNfVEVNUExBVEVTCi0j
aWYgZGVmaW5lZChCT09TVF9OT19DWFgxMV9WQVJJQURJQ19URU1QTEFURVMpICYmICFkZWZpbmVk
KEJPT1NUX05PX1ZBUklBRElDX1RFTVBMQVRFUykKLSMgIGRlZmluZSBCT09TVF9OT19WQVJJQURJ
Q19URU1QTEFURVMKLSNlbmRpZgotLy8gIFVzZSAgICAgQk9PU1RfTk9fQ1hYMTFfVkFSSUFESUNf
TUFDUk9TIGluc3RlYWQgb2YgICBCT09TVF9OT19WQVJJQURJQ19NQUNST1MKLSNpZiBkZWZpbmVk
KEJPT1NUX05PX0NYWDExX1ZBUklBRElDX01BQ1JPUykgJiYgIWRlZmluZWQoQk9PU1RfTk9fVkFS
SUFESUNfTUFDUk9TKQotIyAgZGVmaW5lIEJPT1NUX05PX1ZBUklBRElDX01BQ1JPUwotI2VuZGlm
Ci0vLyAgVXNlICAgICBCT09TVF9OT19DWFgxMV9OVU1FUklDX0xJTUlUUyBpbnN0ZWFkIG9mICAg
Qk9PU1RfTk9fTlVNRVJJQ19MSU1JVFNfTE9XRVNUCi0jaWYgZGVmaW5lZChCT09TVF9OT19DWFgx
MV9OVU1FUklDX0xJTUlUUykgJiYgIWRlZmluZWQoQk9PU1RfTk9fTlVNRVJJQ19MSU1JVFNfTE9X
RVNUKQotIyAgZGVmaW5lIEJPT1NUX05PX05VTUVSSUNfTElNSVRTX0xPV0VTVAotI2VuZGlmCi0v
LyAgLS0tLS0tLS0tLS0tLS0tLS0tIEVuZCBvZiBkZXByZWNhdGVkIG1hY3JvcyBmb3IgMS41MSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCi0KLS8vCi0vLyBIZWxwZXIgbWFjcm9zIEJP
T1NUX05PRVhDRVBULCBCT09TVF9OT0VYQ0VQVF9JRiwgQk9PU1RfTk9FWENFUFRfRVhQUgotLy8g
VGhlc2UgYWlkIHRoZSB0cmFuc2l0aW9uIHRvIEMrKzExIHdoaWxlIHN0aWxsIHN1cHBvcnRpbmcg
QysrMDMgY29tcGlsZXJzCi0vLwotI2lmZGVmIEJPT1NUX05PX0NYWDExX05PRVhDRVBUCi0jICBk
ZWZpbmUgQk9PU1RfTk9FWENFUFQKLSMgIGRlZmluZSBCT09TVF9OT0VYQ0VQVF9PUl9OT1RIUk9X
IHRocm93KCkKLSMgIGRlZmluZSBCT09TVF9OT0VYQ0VQVF9JRihQcmVkaWNhdGUpCi0jICBkZWZp
bmUgQk9PU1RfTk9FWENFUFRfRVhQUihFeHByZXNzaW9uKSBmYWxzZQotI2Vsc2UKLSMgIGRlZmlu
ZSBCT09TVF9OT0VYQ0VQVCBub2V4Y2VwdAotIyAgZGVmaW5lIEJPT1NUX05PRVhDRVBUX09SX05P
VEhST1cgbm9leGNlcHQKLSMgIGRlZmluZSBCT09TVF9OT0VYQ0VQVF9JRihQcmVkaWNhdGUpIG5v
ZXhjZXB0KChQcmVkaWNhdGUpKQotIyAgZGVmaW5lIEJPT1NUX05PRVhDRVBUX0VYUFIoRXhwcmVz
c2lvbikgbm9leGNlcHQoKEV4cHJlc3Npb24pKQotI2VuZGlmCi0vLwotLy8gSGVscGVyIG1hY3Jv
IEJPT1NUX0ZBTExUSFJPVUdICi0vLyBGYWxsYmFjayBkZWZpbml0aW9uIG9mIEJPT1NUX0ZBTExU
SFJPVUdIIG1hY3JvIHVzZWQgdG8gbWFyayBpbnRlbmRlZAotLy8gZmFsbC10aHJvdWdoIGJldHdl
ZW4gY2FzZSBsYWJlbHMgaW4gYSBzd2l0Y2ggc3RhdGVtZW50LiBXZSB1c2UgYSBkZWZpbml0aW9u
Ci0vLyB0aGF0IHJlcXVpcmVzIGEgc2VtaWNvbG9uIGFmdGVyIGl0IHRvIGF2b2lkIGF0IGxlYXN0
IG9uZSB0eXBlIG9mIG1pc3VzZSBldmVuCi0vLyBvbiB1bnN1cHBvcnRlZCBjb21waWxlcnMuCi0v
LwotI2lmbmRlZiBCT09TVF9GQUxMVEhST1VHSAotIyAgZGVmaW5lIEJPT1NUX0ZBTExUSFJPVUdI
ICgodm9pZCkwKQotI2VuZGlmCi0KLS8vCi0vLyBjb25zdGV4cHIgd29ya2Fyb3VuZHMKLS8vCi0j
aWYgZGVmaW5lZChCT09TVF9OT19DWFgxMV9DT05TVEVYUFIpCi0jZGVmaW5lIEJPT1NUX0NPTlNU
RVhQUgotI2RlZmluZSBCT09TVF9DT05TVEVYUFJfT1JfQ09OU1QgY29uc3QKLSNlbHNlCi0jZGVm
aW5lIEJPT1NUX0NPTlNURVhQUiBjb25zdGV4cHIKLSNkZWZpbmUgQk9PU1RfQ09OU1RFWFBSX09S
X0NPTlNUIGNvbnN0ZXhwcgotI2VuZGlmCi0jaWYgZGVmaW5lZChCT09TVF9OT19DWFgxNF9DT05T
VEVYUFIpCi0jZGVmaW5lIEJPT1NUX0NYWDE0X0NPTlNURVhQUgotI2Vsc2UKLSNkZWZpbmUgQk9P
U1RfQ1hYMTRfQ09OU1RFWFBSIGNvbnN0ZXhwcgotI2VuZGlmCi0KLS8vCi0vLyBVbnVzZWQgdmFy
aWFibGUvdHlwZWRlZiB3b3JrYXJvdW5kczoKLS8vCi0jaWZuZGVmIEJPT1NUX0FUVFJJQlVURV9V
TlVTRUQKLSMgIGRlZmluZSBCT09TVF9BVFRSSUJVVEVfVU5VU0VECi0jZW5kaWYKLQotI2RlZmlu
ZSBCT09TVF9TVEFUSUNfQ09OU1RFWFBSICBzdGF0aWMgQk9PU1RfQ09OU1RFWFBSX09SX0NPTlNU
Ci0KLS8vCi0vLyBTZXQgQk9PU1RfSEFTX1NUQVRJQ19BU1NFUlQgd2hlbiBCT09TVF9OT19DWFgx
MV9TVEFUSUNfQVNTRVJUIGlzIG5vdCBkZWZpbmVkCi0vLwotI2lmICFkZWZpbmVkKEJPT1NUX05P
X0NYWDExX1NUQVRJQ19BU1NFUlQpICYmICFkZWZpbmVkKEJPT1NUX0hBU19TVEFUSUNfQVNTRVJU
KQotIyAgZGVmaW5lIEJPT1NUX0hBU19TVEFUSUNfQVNTRVJUCi0jZW5kaWYKLQotLy8KLS8vIFNl
dCBCT09TVF9IQVNfUlZBTFVFX1JFRlMgd2hlbiBCT09TVF9OT19DWFgxMV9SVkFMVUVfUkVGRVJF
TkNFUyBpcyBub3QgZGVmaW5lZAotLy8KLSNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9SVkFM
VUVfUkVGRVJFTkNFUykgJiYgIWRlZmluZWQoQk9PU1RfSEFTX1JWQUxVRV9SRUZTKQotI2RlZmlu
ZSBCT09TVF9IQVNfUlZBTFVFX1JFRlMKLSNlbmRpZgotCi0vLwotLy8gU2V0IEJPT1NUX0hBU19W
QVJJQURJQ19UTVBMIHdoZW4gQk9PU1RfTk9fQ1hYMTFfVkFSSUFESUNfVEVNUExBVEVTIGlzIG5v
dCBkZWZpbmVkCi0vLwotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1ZBUklBRElDX1RFTVBM
QVRFUykgJiYgIWRlZmluZWQoQk9PU1RfSEFTX1ZBUklBRElDX1RNUEwpCi0jZGVmaW5lIEJPT1NU
X0hBU19WQVJJQURJQ19UTVBMCi0jZW5kaWYKLS8vCi0vLyBTZXQgQk9PU1RfTk9fQ1hYMTFfRklY
RURfTEVOR1RIX1ZBUklBRElDX1RFTVBMQVRFX0VYUEFOU0lPTl9QQUNLUyB3aGVuCi0vLyBCT09T
VF9OT19DWFgxMV9WQVJJQURJQ19URU1QTEFURVMgaXMgc2V0OgotLy8KLSNpZiBkZWZpbmVkKEJP
T1NUX05PX0NYWDExX1ZBUklBRElDX1RFTVBMQVRFUykgJiYgIWRlZmluZWQoQk9PU1RfTk9fQ1hY
MTFfRklYRURfTEVOR1RIX1ZBUklBRElDX1RFTVBMQVRFX0VYUEFOU0lPTl9QQUNLUykKLSMgIGRl
ZmluZSBCT09TVF9OT19DWFgxMV9GSVhFRF9MRU5HVEhfVkFSSUFESUNfVEVNUExBVEVfRVhQQU5T
SU9OX1BBQ0tTCi0jZW5kaWYKLQotLy8KLS8vIEZpbmlzaCBvZmYgd2l0aCBjaGVja3MgZm9yIG1h
Y3JvcyB0aGF0IGFyZSBkZXByaWNhdGVkIC8gbm8gbG9uZ2VyIHN1cHBvcnRlZCwKLS8vIGlmIGFu
eSBvZiB0aGVzZSBhcmUgc2V0IHRoZW4gaXQncyB2ZXJ5IGxpa2VseSB0aGF0IG11Y2ggb2YgQm9v
c3Qgd2lsbCBubwotLy8gbG9uZ2VyIHdvcmsuICBTbyBzdG9wIHdpdGggYSAjZXJyb3IgZm9yIG5v
dywgYnV0IGdpdmUgdGhlIHVzZXIgYSBjaGFuY2UKLS8vIHRvIGNvbnRpbnVlIGF0IHRoZWlyIG93
biByaXNrIGlmIHRoZXkgcmVhbGx5IHdhbnQgdG86Ci0vLwotI2lmIGRlZmluZWQoQk9PU1RfTk9f
VEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpBVElPTikgJiYgIWRlZmluZWQoQk9PU1RfQ09ORklH
X0FMTE9XX0RFUFJFQ0FURUQpCi0jICBlcnJvciAiWW91IGFyZSB1c2luZyBhIGNvbXBpbGVyIHdo
aWNoIGxhY2tzIGZlYXR1cmVzIHdoaWNoIGFyZSBub3cgYSBtaW5pbXVtIHJlcXVpcmVtZW50IGlu
IG9yZGVyIHRvIHVzZSBCb29zdCwgZGVmaW5lIEJPT1NUX0NPTkZJR19BTExPV19ERVBSRUNBVEVE
IGlmIHlvdSB3YW50IHRvIGNvbnRpbnVlIGF0IHlvdXIgb3duIHJpc2shISEiCi0jZW5kaWYKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9jb25maWcvdXNlci5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9jb25maWcvdXNlci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4
ZTc0NzZhZmQzNzJkY2FkMjg1NGRjZmYyYjVhYWJmMjcxNWE4NzMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvY29uZmlnL3VzZXIuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICsw
LDAgQEAKLS8vICBib29zdC9jb25maWcvdXNlci5ocHAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0KLS8vICAoQykgQ29weXJpZ2h0IEpvaG4g
TWFkZG9jayAyMDAxLiAKLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFy
ZSBzdWJqZWN0IHRvIHRoZSAKLS8vICBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSAKLS8vICBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vICBEbyBub3QgY2hl
Y2sgaW4gbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBmaWxlLAotLy8gIFRoaXMgZmlsZSBtYXkg
YmUgY3VzdG9taXplZCBieSB0aGUgZW5kIHVzZXIsIGJ1dCBub3QgYnkgYm9vc3QuCi0KLS8vCi0v
LyAgVXNlIHRoaXMgZmlsZSB0byBkZWZpbmUgYSBzaXRlIGFuZCBjb21waWxlciBzcGVjaWZpYwot
Ly8gIGNvbmZpZ3VyYXRpb24gcG9saWN5OgotLy8KLQotLy8gZGVmaW5lIHRoaXMgdG8gbG9jYXRl
IGEgY29tcGlsZXIgY29uZmlnIGZpbGU6Ci0vLyAjZGVmaW5lIEJPT1NUX0NPTVBJTEVSX0NPTkZJ
RyA8bXloZWFkZXI+Ci0KLS8vIGRlZmluZSB0aGlzIHRvIGxvY2F0ZSBhIHN0ZGxpYiBjb25maWcg
ZmlsZToKLS8vICNkZWZpbmUgQk9PU1RfU1RETElCX0NPTkZJRyAgIDxteWhlYWRlcj4KLQotLy8g
ZGVmaW5lIHRoaXMgdG8gbG9jYXRlIGEgcGxhdGZvcm0gY29uZmlnIGZpbGU6Ci0vLyAjZGVmaW5l
IEJPT1NUX1BMQVRGT1JNX0NPTkZJRyA8bXloZWFkZXI+Ci0KLS8vIGRlZmluZSB0aGlzIHRvIGRp
c2FibGUgY29tcGlsZXIgY29uZmlnLAotLy8gdXNlIGlmIHlvdXIgY29tcGlsZXIgY29uZmlnIGhh
cyBub3RoaW5nIHRvIHNldDoKLS8vICNkZWZpbmUgQk9PU1RfTk9fQ09NUElMRVJfQ09ORklHCi0K
LS8vIGRlZmluZSB0aGlzIHRvIGRpc2FibGUgc3RkbGliIGNvbmZpZywKLS8vIHVzZSBpZiB5b3Vy
IHN0ZGxpYiBjb25maWcgaGFzIG5vdGhpbmcgdG8gc2V0OgotLy8gI2RlZmluZSBCT09TVF9OT19T
VERMSUJfQ09ORklHCi0KLS8vIGRlZmluZSB0aGlzIHRvIGRpc2FibGUgcGxhdGZvcm0gY29uZmln
LAotLy8gdXNlIGlmIHlvdXIgcGxhdGZvcm0gY29uZmlnIGhhcyBub3RoaW5nIHRvIHNldDoKLS8v
ICNkZWZpbmUgQk9PU1RfTk9fUExBVEZPUk1fQ09ORklHCi0KLS8vIGRlZmluZSB0aGlzIHRvIGRp
c2FibGUgYWxsIGNvbmZpZyBvcHRpb25zLAotLy8gZXhjbHVkaW5nIHRoZSB1c2VyIGNvbmZpZy4g
IFVzZSBpZiB5b3VyCi0vLyBzZXR1cCBpcyBmdWxseSBJU08gY29tcGxpYW50LCBhbmQgaGFzIG5v
Ci0vLyB1c2VmdWwgZXh0ZW5zaW9ucywgb3IgZm9yIGF1dG9jb25mIGdlbmVyYXRlZAotLy8gc2V0
dXBzOgotLy8gI2RlZmluZSBCT09TVF9OT19DT05GSUcKLQotLy8gZGVmaW5lIHRoaXMgdG8gbWFr
ZSB0aGUgY29uZmlnICJvcHRpbWlzdGljIgotLy8gYWJvdXQgdW5rbm93biBjb21waWxlciB2ZXJz
aW9ucy4gIE5vcm1hbGx5Ci0vLyB1bmtub3duIGNvbXBpbGVyIHZlcnNpb25zIGFyZSBhc3N1bWVk
IHRvIGhhdmUKLS8vIGFsbCB0aGUgZGVmZWN0cyBvZiB0aGUgbGFzdCBrbm93biB2ZXJzaW9uLCBo
b3dldmVyCi0vLyBzZXR0aW5nIHRoaXMgZmxhZywgY2F1c2VzIHRoZSBjb25maWcgdG8gYXNzdW1l
Ci0vLyB0aGF0IHVua25vd24gY29tcGlsZXIgdmVyc2lvbnMgYXJlIGZ1bGx5IGNvbmZvcm1hbnQK
LS8vIHdpdGggdGhlIHN0YW5kYXJkOgotLy8gI2RlZmluZSBCT09TVF9TVFJJQ1RfQ09ORklHCi0K
LS8vIGRlZmluZSB0aGlzIHRvIGNhdXNlIHRoZSBjb25maWcgdG8gaGFsdCBjb21waWxhdGlvbgot
Ly8gd2l0aCBhbiAjZXJyb3IgaWYgaXQgZW5jb3VudGVycyBhbnl0aGluZyB1bmtub3duIC0tCi0v
LyBlaXRoZXIgYW4gdW5rbm93biBjb21waWxlciB2ZXJzaW9uIG9yIGFuIHVua25vd24KLS8vIGNv
bXBpbGVyL3BsYXRmb3JtL2xpYnJhcnk6Ci0vLyAjZGVmaW5lIEJPT1NUX0FTU0VSVF9DT05GSUcK
LQotCi0vLyBkZWZpbmUgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0aHJlYWRpbmcgc3VwcG9ydCwg
ZXZlbgotLy8gd2hlbiBhdmFpbGFibGU6Ci0vLyAjZGVmaW5lIEJPT1NUX0RJU0FCTEVfVEhSRUFE
UwotCi0vLyBkZWZpbmUgd2hlbiB5b3Ugd2FudCB0byBkaXNhYmxlIFdpbjMyIHNwZWNpZmljIGZl
YXR1cmVzCi0vLyBldmVuIHdoZW4gYXZhaWxhYmxlOgotLy8gI2RlZmluZSBCT09TVF9ESVNBQkxF
X1dJTjMyCi0KLS8vIEJPT1NUX0RJU0FCTEVfQUJJX0hFQURFUlM6IFN0b3BzIGJvb3N0IGhlYWRl
cnMgZnJvbSBpbmNsdWRpbmcgYW55IAotLy8gcHJlZml4L3N1ZmZpeCBoZWFkZXJzIHRoYXQgbm9y
bWFsbHkgY29udHJvbCB0aGluZ3MgbGlrZSBzdHJ1Y3QgCi0vLyBwYWNraW5nIGFuZCBhbGlnbm1l
bnQuIAotLy8gI2RlZmluZSBCT09TVF9ESVNBQkxFX0FCSV9IRUFERVJTCi0KLS8vIEJPT1NUX0FC
SV9QUkVGSVg6IEEgcHJlZml4IGhlYWRlciB0byBpbmNsdWRlIGluIHBsYWNlIG9mIHdoYXRldmVy
Ci0vLyBib29zdC5jb25maWcgd291bGQgbm9ybWFsbHkgc2VsZWN0LCBhbnkgcmVwbGFjZW1lbnQg
c2hvdWxkIHNldCB1cCAKLS8vIHN0cnVjdCBwYWNraW5nIGFuZCBhbGlnbm1lbnQgb3B0aW9ucyBh
cyByZXF1aXJlZC4gCi0vLyAjZGVmaW5lIEJPT1NUX0FCSV9QUkVGSVggbXktaGVhZGVyLW5hbWUK
LQotLy8gQk9PU1RfQUJJX1NVRkZJWDogQSBzdWZmaXggaGVhZGVyIHRvIGluY2x1ZGUgaW4gcGxh
Y2Ugb2Ygd2hhdGV2ZXIgCi0vLyBib29zdC5jb25maWcgd291bGQgbm9ybWFsbHkgc2VsZWN0LCBh
bnkgcmVwbGFjZW1lbnQgc2hvdWxkIHVuZG8gCi0vLyB0aGUgZWZmZWN0cyBvZiB0aGUgcHJlZml4
IGhlYWRlci4gCi0vLyAjZGVmaW5lIEJPT1NUX0FCSV9TVUZGSVggbXktaGVhZGVyLW5hbWUKLQot
Ly8gQk9PU1RfQUxMX0RZTl9MSU5LOiBGb3JjZXMgYWxsIGxpYnJhcmllcyB0aGF0IGhhdmUgc2Vw
YXJhdGUgc291cmNlLCAKLS8vIHRvIGJlIGxpbmtlZCBhcyBkbGwncyByYXRoZXIgdGhhbiBzdGF0
aWMgbGlicmFyaWVzIG9uIE1pY3Jvc29mdCBXaW5kb3dzIAotLy8gKHRoaXMgbWFjcm8gaXMgdXNl
ZCB0byB0dXJuIG9uIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBtb2RpZmllcnMsIHNvIHRoYXQgCi0v
LyB0aGUgY29tcGlsZXIga25vd3Mgd2hpY2ggc3ltYm9scyB0byBsb29rIGZvciBpbiBhIGRsbCBy
YXRoZXIgdGhhbiBpbiBhIAotLy8gc3RhdGljIGxpYnJhcnkpLiAgTm90ZSB0aGF0IHRoZXJlIG1h
eSBiZSBzb21lIGxpYnJhcmllcyB0aGF0IGNhbiBvbmx5IAotLy8gYmUgbGlua2VkIGluIG9uZSB3
YXkgKHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkpLCBpbiB0aGVzZSBjYXNlcyB0aGlzIAotLy8g
bWFjcm8gaGFzIG5vIGVmZmVjdC4KLS8vICNkZWZpbmUgQk9PU1RfQUxMX0RZTl9MSU5LCi0gCi0v
LyBCT09TVF9XSEFURVZFUl9EWU5fTElOSzogRm9yY2VzIGxpYnJhcnkgIndoYXRldmVyIiB0byBi
ZSBsaW5rZWQgYXMgYSBkbGwgCi0vLyByYXRoZXIgdGhhbiBhIHN0YXRpYyBsaWJyYXJ5IG9uIE1p
Y3Jvc29mdCBXaW5kb3dzOiByZXBsYWNlIHRoZSBXSEFURVZFUiAKLS8vIHBhcnQgb2YgdGhlIG1h
Y3JvIG5hbWUgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB0aGF0IHlvdSB3YW50IHRvIAot
Ly8gZHluYW1pY2FsbHkgbGluayB0bywgZm9yIGV4YW1wbGUgdXNlIEJPT1NUX0RBVEVfVElNRV9E
WU5fTElOSyBvciAKLS8vIEJPT1NUX1JFR0VYX0RZTl9MSU5LIGV0YyAodGhpcyBtYWNybyBpcyB1
c2VkIHRvIHR1cm4gb24gX19kZWNsc3BlYyhkbGxpbXBvcnQpIAotLy8gbW9kaWZpZXJzLCBzbyB0
aGF0IHRoZSBjb21waWxlciBrbm93cyB3aGljaCBzeW1ib2xzIHRvIGxvb2sgZm9yIGluIGEgZGxs
IAotLy8gcmF0aGVyIHRoYW4gaW4gYSBzdGF0aWMgbGlicmFyeSkuICAKLS8vIE5vdGUgdGhhdCB0
aGVyZSBtYXkgYmUgc29tZSBsaWJyYXJpZXMgdGhhdCBjYW4gb25seSAKLS8vIGJlIGxpbmtlZCBp
biBvbmUgd2F5IChzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5KSwgCi0vLyBpbiB0aGVzZSBjYXNl
cyB0aGlzIG1hY3JvIGlzIHVuc3VwcG9ydGVkLgotLy8gI2RlZmluZSBCT09TVF9XSEFURVZFUl9E
WU5fTElOSwotIAotLy8gQk9PU1RfQUxMX05PX0xJQjogVGVsbHMgdGhlIGNvbmZpZyBzeXN0ZW0g
bm90IHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0IAotLy8gd2hpY2ggbGlicmFyaWVzIHRvIGxpbmsg
YWdhaW5zdC4gIAotLy8gTm9ybWFsbHkgaWYgYSBjb21waWxlciBzdXBwb3J0cyAjcHJhZ21hIGxp
YiwgdGhlbiB0aGUgY29ycmVjdCBsaWJyYXJ5IAotLy8gYnVpbGQgdmFyaWFudCB3aWxsIGJlIGF1
dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYW5kIGxpbmtlZCBhZ2FpbnN0LCAKLS8vIHNpbXBseSBieSB0
aGUgYWN0IG9mIGluY2x1ZGluZyBvbmUgb2YgdGhhdCBsaWJyYXJ5J3MgaGVhZGVycy4gIAotLy8g
VGhpcyBtYWNybyB0dXJucyB0aGF0IGZlYXR1cmUgb2ZmLgotLy8gI2RlZmluZSBCT09TVF9BTExf
Tk9fTElCCi0gCi0vLyBCT09TVF9XSEFURVZFUl9OT19MSUI6IFRlbGxzIHRoZSBjb25maWcgc3lz
dGVtIG5vdCB0byBhdXRvbWF0aWNhbGx5IAotLy8gc2VsZWN0IHdoaWNoIGxpYnJhcnkgdG8gbGlu
ayBhZ2FpbnN0IGZvciBsaWJyYXJ5ICJ3aGF0ZXZlciIsIAotLy8gcmVwbGFjZSBXSEFURVZFUiBp
biB0aGUgbWFjcm8gbmFtZSB3aXRoIHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5OyAKLS8vIGZvciBl
eGFtcGxlIEJPT1NUX0RBVEVfVElNRV9OT19MSUIgb3IgQk9PU1RfUkVHRVhfTk9fTElCLiAgCi0v
LyBOb3JtYWxseSBpZiBhIGNvbXBpbGVyIHN1cHBvcnRzICNwcmFnbWEgbGliLCB0aGVuIHRoZSBj
b3JyZWN0IGxpYnJhcnkgCi0vLyBidWlsZCB2YXJpYW50IHdpbGwgYmUgYXV0b21hdGljYWxseSBz
ZWxlY3RlZCBhbmQgbGlua2VkIGFnYWluc3QsIHNpbXBseSAKLS8vIGJ5IHRoZSBhY3Qgb2YgaW5j
bHVkaW5nIG9uZSBvZiB0aGF0IGxpYnJhcnkncyBoZWFkZXJzLiAgVGhpcyBtYWNybyB0dXJucyAK
LS8vIHRoYXQgZmVhdHVyZSBvZmYuCi0vLyAjZGVmaW5lIEJPT1NUX1dIQVRFVkVSX05PX0xJQgot
IAotLy8gQk9PU1RfTElCX0JVSUxESUQ6IFNldCB0byB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgdmFs
dWUgcGFzc2VkIHRvIEJvb3N0LkJ1aWxkJ3MKLS8vIC0tYnVpbGRpZCBjb21tYW5kIGxpbmUgb3B0
aW9uLiAgRm9yIGV4YW1wbGUgaWYgeW91IGJ1aWx0IHVzaW5nOgotLy8KLS8vIGJqYW0gYWRkcmVz
cy1tb2RlbD02NCAtLWJ1aWxkaWQ9YW1kNjQKLS8vCi0vLyB0aGVuIGNvbXBpbGUgeW91ciBjb2Rl
IHdpdGg6Ci0vLwotLy8gLURCT09TVF9MSUJfQlVJTERJRCA9IGFtZDY0Ci0vLwotLy8gdG8gZW5z
dXJlIHRoZSBjb3JyZWN0IGxpYnJhcmllcyBhcmUgc2VsZWN0ZWQgYXQgbGluayB0aW1lLgotLy8g
I2RlZmluZSBCT09TVF9MSUJfQlVJTERJRCBhbWQ2NAotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb3JlL2FkZHJlc3NvZi5ocHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb3JlL2FkZHJlc3NvZi5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMmI0NmJlNzdkOTZmYmFmZDY0NmEyZDI5
NWMyZjE5NzQzODNlMTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29yZS9hZGRy
ZXNzb2YuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQg
KEMpIDIwMDIgQnJhZCBLaW5nIChicmFkLmtpbmdAa2l0d2FyZS5jb20pCi0gICAgICAgICAgICAg
ICAgICAgRG91Z2xhcyBHcmVnb3IgKGdyZWdvZEBjcy5ycGkuZWR1KQotCi1Db3B5cmlnaHQgKEMp
IDIwMDIsIDIwMDgsIDIwMTMgUGV0ZXIgRGltb3YKLQotQ29weXJpZ2h0IChDKSAyMDE3IEdsZW4g
Sm9zZXBoIEZlcm5hbmRlcyAoZ2xlbmpvZmVAZ21haWwuY29tKQotCi1EaXN0cmlidXRlZCB1bmRl
ciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NUX0NPUkVfQUREUkVTU09GX0hQ
UAotI2RlZmluZSBCT09TVF9DT1JFX0FERFJFU1NPRl9IUFAKLQotI2luY2x1ZGUgPGJvb3N0L2Nv
bmZpZy5ocHA+Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX01TVkNfRlVMTF9WRVIpICYmIEJPT1NUX01T
VkNfRlVMTF9WRVIgPj0gMTkwMDI0MjE1Ci0jZGVmaW5lIEJPT1NUX0NPUkVfSEFTX0JVSUxUSU5f
QUREUkVTU09GCi0jZWxpZiBkZWZpbmVkKEJPT1NUX0dDQykgJiYgQk9PU1RfR0NDID49IDcwMDAw
Ci0jZGVmaW5lIEJPT1NUX0NPUkVfSEFTX0JVSUxUSU5fQUREUkVTU09GCi0jZWxpZiBkZWZpbmVk
KF9faGFzX2J1aWx0aW4pCi0jaWYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5fYWRkcmVzc29mKQot
I2RlZmluZSBCT09TVF9DT1JFX0hBU19CVUlMVElOX0FERFJFU1NPRgotI2VuZGlmCi0jZW5kaWYK
LQotI2lmIGRlZmluZWQoQk9PU1RfQ09SRV9IQVNfQlVJTFRJTl9BRERSRVNTT0YpCi0jaWYgZGVm
aW5lZChCT09TVF9OT19DWFgxMV9DT05TVEVYUFIpCi0jZGVmaW5lIEJPT1NUX0NPUkVfTk9fQ09O
U1RFWFBSX0FERFJFU1NPRgotI2VuZGlmCi0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLXRlbXBsYXRl
PGNsYXNzIFQ+Ci1CT09TVF9DT05TVEVYUFIgaW5saW5lIFQqCi1hZGRyZXNzb2YoVCYgbykgQk9P
U1RfTk9FWENFUFQKLXsKLSAgICByZXR1cm4gX19idWlsdGluX2FkZHJlc3NvZihvKTsKLX0KLQot
fSAvKiBib29zdCAqLwotI2Vsc2UKLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvd29ya2Fyb3VuZC5o
cHA+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSBk
ZXRhaWwgewotCi10ZW1wbGF0ZTxjbGFzcyBUPgotY2xhc3MgYWRkcmVzc29mX3JlZiB7Ci1wdWJs
aWM6Ci0gICAgQk9PU1RfRk9SQ0VJTkxJTkUgYWRkcmVzc29mX3JlZihUJiBvKSBCT09TVF9OT0VY
Q0VQVAotICAgICAgICA6IG9fKG8pIHsgfQotICAgIEJPT1NUX0ZPUkNFSU5MSU5FIG9wZXJhdG9y
IFQmKCkgY29uc3QgQk9PU1RfTk9FWENFUFQgewotICAgICAgICByZXR1cm4gb187Ci0gICAgfQot
cHJpdmF0ZToKLSAgICBhZGRyZXNzb2ZfcmVmJiBvcGVyYXRvcj0oY29uc3QgYWRkcmVzc29mX3Jl
ZiYpOwotICAgIFQmIG9fOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBhZGRyZXNz
X29mIHsKLSAgICBzdGF0aWMgQk9PU1RfRk9SQ0VJTkxJTkUgVCogZ2V0KFQmIG8sIGxvbmcpIEJP
T1NUX05PRVhDRVBUIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KCYKLSAg
ICAgICAgICAgIGNvbnN0X2Nhc3Q8Y2hhciY+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9sYXRp
bGUgY2hhciY+KG8pKSk7Ci0gICAgfQotICAgIHN0YXRpYyBCT09TVF9GT1JDRUlOTElORSBUKiBn
ZXQoVCogcCwgaW50KSBCT09TVF9OT0VYQ0VQVCB7Ci0gICAgICAgIHJldHVybiBwOwotICAgIH0K
LX07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9OVUxMUFRSKQotI2lmICFkZWZpbmVk
KEJPT1NUX05PX0NYWDExX0RFQ0xUWVBFKSAmJiBcCi0gICAgKGRlZmluZWQoX19JTlRFTF9DT01Q
SUxFUikgfHwgXAotICAgICAgICAoZGVmaW5lZChfX2NsYW5nX18pICYmICFkZWZpbmVkKF9MSUJD
UFBfVkVSU0lPTikpKQotdHlwZWRlZiBkZWNsdHlwZShudWxscHRyKSBhZGRyZXNzb2ZfbnVsbF90
OwotI2Vsc2UKLXR5cGVkZWYgc3RkOjpudWxscHRyX3QgYWRkcmVzc29mX251bGxfdDsKLSNlbmRp
ZgotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgYWRkcmVzc19vZjxhZGRyZXNzb2ZfbnVsbF90PiB7Ci0g
ICAgdHlwZWRlZiBhZGRyZXNzb2ZfbnVsbF90IHR5cGU7Ci0gICAgc3RhdGljIEJPT1NUX0ZPUkNF
SU5MSU5FIHR5cGUqIGdldCh0eXBlJiBvLCBpbnQpIEJPT1NUX05PRVhDRVBUIHsKLSAgICAgICAg
cmV0dXJuICZvOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBhZGRyZXNzX29mPGNv
bnN0IGFkZHJlc3NvZl9udWxsX3Q+IHsKLSAgICB0eXBlZGVmIGNvbnN0IGFkZHJlc3NvZl9udWxs
X3QgdHlwZTsKLSAgICBzdGF0aWMgQk9PU1RfRk9SQ0VJTkxJTkUgdHlwZSogZ2V0KHR5cGUmIG8s
IGludCkgQk9PU1RfTk9FWENFUFQgewotICAgICAgICByZXR1cm4gJm87Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8Pgotc3RydWN0IGFkZHJlc3Nfb2Y8dm9sYXRpbGUgYWRkcmVzc29mX251bGxfdD4g
ewotICAgIHR5cGVkZWYgdm9sYXRpbGUgYWRkcmVzc29mX251bGxfdCB0eXBlOwotICAgIHN0YXRp
YyBCT09TVF9GT1JDRUlOTElORSB0eXBlKiBnZXQodHlwZSYgbywgaW50KSBCT09TVF9OT0VYQ0VQ
VCB7Ci0gICAgICAgIHJldHVybiAmbzsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
YWRkcmVzc19vZjxjb25zdCB2b2xhdGlsZSBhZGRyZXNzb2ZfbnVsbF90PiB7Ci0gICAgdHlwZWRl
ZiBjb25zdCB2b2xhdGlsZSBhZGRyZXNzb2ZfbnVsbF90IHR5cGU7Ci0gICAgc3RhdGljIEJPT1NU
X0ZPUkNFSU5MSU5FIHR5cGUqIGdldCh0eXBlJiBvLCBpbnQpIEJPT1NUX05PRVhDRVBUIHsKLSAg
ICAgICAgcmV0dXJuICZvOwotICAgIH0KLX07Ci0jZW5kaWYKLQotfSAvKiBkZXRhaWwgKi8KLQot
I2lmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfU0ZJTkFFX0VYUFIpIHx8IFwKLSAgICBkZWZpbmVk
KEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZFUkVOQ0VTKSB8fCBcCi0gICAgZGVmaW5lZChCT09T
VF9OT19DWFgxMV9DT05TVEVYUFIpIHx8IFwKLSAgICBkZWZpbmVkKEJPT1NUX05PX0NYWDExX0RF
Q0xUWVBFKQotI2RlZmluZSBCT09TVF9DT1JFX05PX0NPTlNURVhQUl9BRERSRVNTT0YKLQotdGVt
cGxhdGU8Y2xhc3MgVD4KLUJPT1NUX0ZPUkNFSU5MSU5FIFQqCi1hZGRyZXNzb2YoVCYgbykgQk9P
U1RfTk9FWENFUFQKLXsKLSNpZiBCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENfXywgQk9PU1Rf
VEVTVEVEX0FUKDB4NjEwKSkgfHwgXAotICAgIEJPT1NUX1dPUktBUk9VTkQoX19TVU5QUk9fQ0Ms
IDw9IDB4NTEyMCkKLSAgICByZXR1cm4gZGV0YWlsOjphZGRyZXNzX29mPFQ+OjpnZXQobywgMCk7
Ci0jZWxzZQotICAgIHJldHVybiBkZXRhaWw6OmFkZHJlc3Nfb2Y8VD46OmdldChkZXRhaWw6OmFk
ZHJlc3NvZl9yZWY8VD4obyksIDApOwotI2VuZGlmCi19Ci0KLSNpZiBCT09TVF9XT1JLQVJPVU5E
KF9fU1VOUFJPX0NDLCBCT09TVF9URVNURURfQVQoMHg1OTApKQotbmFtZXNwYWNlIGRldGFpbCB7
Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgYWRkcmVzc29mX3Jlc3VsdCB7Ci0gICAgdHlw
ZWRlZiBUKiB0eXBlOwotfTsKLQotfSAvKiBkZXRhaWwgKi8KLQotdGVtcGxhdGU8Y2xhc3MgVCwg
c3RkOjpzaXplX3QgTj4KLUJPT1NUX0ZPUkNFSU5MSU5FIHR5cGVuYW1lIGRldGFpbDo6YWRkcmVz
c29mX3Jlc3VsdDxUW05dPjo6dHlwZQotYWRkcmVzc29mKFQgKCZvKVtOXSkgQk9PU1RfTk9FWENF
UFQKLXsKLSAgICByZXR1cm4gJm87Ci19Ci0jZW5kaWYKLQotI2lmIEJPT1NUX1dPUktBUk9VTkQo
X19CT1JMQU5EQ19fLCBCT09TVF9URVNURURfQVQoMHg1NjQpKQotdGVtcGxhdGU8Y2xhc3MgVCwg
c3RkOjpzaXplX3QgTj4KLUJPT1NUX0ZPUkNFSU5MSU5FCi1UICgqYWRkcmVzc29mKFQgKCZvKVtO
XSkgQk9PU1RfTk9FWENFUFQpW05dCi17Ci0gICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKCop
W05dPigmbyk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IE4+Ci1CT09TVF9G
T1JDRUlOTElORQotY29uc3QgVCAoKmFkZHJlc3NvZihjb25zdCBUICgmbylbTl0pIEJPT1NUX05P
RVhDRVBUKVtOXQotewotICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCgqKVtOXT4o
Jm8pOwotfQotI2VuZGlmCi0jZWxzZQotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLXRlbXBsYXRlPGNs
YXNzIFQ+Ci1UJiYgYWRkcmVzc29mX2RlY2x2YWwoKSBCT09TVF9OT0VYQ0VQVDsKLQotdGVtcGxh
dGU8Y2xhc3M+Ci1zdHJ1Y3QgYWRkcmVzc29mX3ZvaWQgewotICAgIHR5cGVkZWYgdm9pZCB0eXBl
OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgRSA9IHZvaWQ+Ci1zdHJ1Y3QgYWRkcmVz
c29mX21lbWJlcl9vcGVyYXRvciB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0g
ZmFsc2U7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IGFkZHJlc3NvZl9tZW1iZXJf
b3BlcmF0b3I8VCwgdHlwZW5hbWUKLSAgICBhZGRyZXNzb2Zfdm9pZDxkZWNsdHlwZShhZGRyZXNz
b2ZfZGVjbHZhbDxUJj4oKS5vcGVyYXRvciYoKSk+Ojp0eXBlPiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHZhbHVlID0gdHJ1ZTsKLX07Ci0KLSNpZiBCT09TVF9XT1JLQVJPVU5EKEJPT1NU
X0lOVEVMLCA8IDE2MDApCi1zdHJ1Y3QgYWRkcmVzc29mX2FkZHJlc3NhYmxlIHsgfTsKLQotYWRk
cmVzc29mX2FkZHJlc3NhYmxlKgotb3BlcmF0b3ImKGFkZHJlc3NvZl9hZGRyZXNzYWJsZSYpIEJP
T1NUX05PRVhDRVBUOwotI2VuZGlmCi0KLXRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIEUgPSB2b2lk
Pgotc3RydWN0IGFkZHJlc3NvZl9ub25fbWVtYmVyX29wZXJhdG9yIHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmFsdWUgPSBmYWxzZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1
Y3QgYWRkcmVzc29mX25vbl9tZW1iZXJfb3BlcmF0b3I8VCwgdHlwZW5hbWUKLSAgICBhZGRyZXNz
b2Zfdm9pZDxkZWNsdHlwZShvcGVyYXRvciYoYWRkcmVzc29mX2RlY2x2YWw8VCY+KCkpKT46OnR5
cGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPSB0cnVlOwotfTsKLQotdGVt
cGxhdGU8Y2xhc3MgVCwgY2xhc3MgRSA9IHZvaWQ+Ci1zdHJ1Y3QgYWRkcmVzc29mX2V4cHJlc3Np
b24gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9IGZhbHNlOwotfTsKLQotdGVt
cGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBhZGRyZXNzb2ZfZXhwcmVzc2lvbjxULAotICAgIHR5cGVu
YW1lIGFkZHJlc3NvZl92b2lkPGRlY2x0eXBlKCZhZGRyZXNzb2ZfZGVjbHZhbDxUJj4oKSk+Ojp0
eXBlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0gdHJ1ZTsKLX07Ci0KLXRl
bXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgYWRkcmVzc29mX2lzX2NvbnN0ZXhwciB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0gYWRkcmVzc29mX2V4cHJlc3Npb248VD46OnZhbHVl
ICYmCi0gICAgICAgICFhZGRyZXNzb2ZfbWVtYmVyX29wZXJhdG9yPFQ+Ojp2YWx1ZSAmJgotICAg
ICAgICAhYWRkcmVzc29mX25vbl9tZW1iZXJfb3BlcmF0b3I8VD46OnZhbHVlOwotfTsKLQotdGVt
cGxhdGU8Ym9vbCBFLCBjbGFzcyBUPgotc3RydWN0IGFkZHJlc3NvZl9pZiB7IH07Ci0KLXRlbXBs
YXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgYWRkcmVzc29mX2lmPHRydWUsIFQ+IHsKLSAgICB0eXBlZGVm
IFQqIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotQk9PU1RfRk9SQ0VJTkxJTkUKLXR5
cGVuYW1lIGFkZHJlc3NvZl9pZjwhYWRkcmVzc29mX2lzX2NvbnN0ZXhwcjxUPjo6dmFsdWUsIFQ+
Ojp0eXBlCi1hZGRyZXNzb2YoVCYgbykgQk9PU1RfTk9FWENFUFQKLXsKLSAgICByZXR1cm4gYWRk
cmVzc19vZjxUPjo6Z2V0KGFkZHJlc3NvZl9yZWY8VD4obyksIDApOwotfQotCi10ZW1wbGF0ZTxj
bGFzcyBUPgotY29uc3RleHByIEJPT1NUX0ZPUkNFSU5MSU5FCi10eXBlbmFtZSBhZGRyZXNzb2Zf
aWY8YWRkcmVzc29mX2lzX2NvbnN0ZXhwcjxUPjo6dmFsdWUsIFQ+Ojp0eXBlCi1hZGRyZXNzb2Yo
VCYgbykgQk9PU1RfTk9FWENFUFQKLXsKLSAgICByZXR1cm4gJm87Ci19Ci0KLX0gLyogZGV0YWls
ICovCi0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1jb25zdGV4cHIgQk9PU1RfRk9SQ0VJTkxJTkUgVCoK
LWFkZHJlc3NvZihUJiBvKSBCT09TVF9OT0VYQ0VQVAotewotICAgIHJldHVybiBkZXRhaWw6OmFk
ZHJlc3NvZihvKTsKLX0KLSNlbmRpZgotCi19IC8qIGJvb3N0ICovCi0jZW5kaWYKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9j
b3JlL2NoZWNrZWRfZGVsZXRlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L2NvcmUvY2hlY2tlZF9kZWxldGUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiMDg2ZTAzZTg4YWY3YWUzYjM5YmNmNjliYzdlMjEyY2I2MmY1Zjg2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2NvcmUvY2hlY2tlZF9kZWxldGUuaHBwCisrKyAvZGV2
L251bGwKQEAgLTEsNjkgKzAsMCBAQAotI2lmbmRlZiBCT09TVF9DT1JFX0NIRUNLRURfREVMRVRF
X0hQUAotI2RlZmluZSBCT09TVF9DT1JFX0NIRUNLRURfREVMRVRFX0hQUAotCi0vLyBNUyBjb21w
YXRpYmxlIGNvbXBpbGVycyBzdXBwb3J0ICNwcmFnbWEgb25jZQotCi0jaWYgZGVmaW5lZChfTVND
X1ZFUikgJiYgKF9NU0NfVkVSID49IDEwMjApCi0jIHByYWdtYSBvbmNlCi0jZW5kaWYKLQotLy8K
LS8vICBib29zdC9jaGVja2VkX2RlbGV0ZS5ocHAKLS8vCi0vLyAgQ29weXJpZ2h0IChjKSAyMDAy
LCAyMDAzIFBldGVyIERpbW92Ci0vLyAgQ29weXJpZ2h0IChjKSAyMDAzIERhbmllbCBGcmV5Ci0v
LyAgQ29weXJpZ2h0IChjKSAyMDAzIEhvd2FyZCBIaW5uYW50Ci0vLwotLy8gIERpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotLy8g
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDov
L3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5i
b29zdC5vcmcvbGlicy9jb3JlL2RvYy9odG1sL2NvcmUvY2hlY2tlZF9kZWxldGUuaHRtbCBmb3Ig
ZG9jdW1lbnRhdGlvbi4KLS8vCi0KLW5hbWVzcGFjZSBib29zdAotewotCi0vLyB2ZXJpZnkgdGhh
dCB0eXBlcyBhcmUgY29tcGxldGUgZm9yIGluY3JlYXNlZCBzYWZldHkKLQotdGVtcGxhdGU8Y2xh
c3MgVD4gaW5saW5lIHZvaWQgY2hlY2tlZF9kZWxldGUoVCAqIHgpCi17Ci0gICAgLy8gaW50ZW50
aW9uYWxseSBjb21wbGV4IC0gc2ltcGxpZmljYXRpb24gY2F1c2VzIHJlZ3Jlc3Npb25zCi0gICAg
dHlwZWRlZiBjaGFyIHR5cGVfbXVzdF9iZV9jb21wbGV0ZVsgc2l6ZW9mKFQpPyAxOiAtMSBdOwot
ICAgICh2b2lkKSBzaXplb2YodHlwZV9tdXN0X2JlX2NvbXBsZXRlKTsKLSAgICBkZWxldGUgeDsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHZvaWQgY2hlY2tlZF9hcnJheV9kZWxldGUo
VCAqIHgpCi17Ci0gICAgdHlwZWRlZiBjaGFyIHR5cGVfbXVzdF9iZV9jb21wbGV0ZVsgc2l6ZW9m
KFQpPyAxOiAtMSBdOwotICAgICh2b2lkKSBzaXplb2YodHlwZV9tdXN0X2JlX2NvbXBsZXRlKTsK
LSAgICBkZWxldGUgW10geDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgVD4gc3RydWN0IGNoZWNrZWRf
ZGVsZXRlcgotewotICAgIHR5cGVkZWYgdm9pZCByZXN1bHRfdHlwZTsKLSAgICB0eXBlZGVmIFQg
KiBhcmd1bWVudF90eXBlOwotCi0gICAgdm9pZCBvcGVyYXRvcigpKFQgKiB4KSBjb25zdAotICAg
IHsKLSAgICAgICAgLy8gYm9vc3Q6OiBkaXNhYmxlcyBBREwKLSAgICAgICAgYm9vc3Q6OmNoZWNr
ZWRfZGVsZXRlKHgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBjaGVj
a2VkX2FycmF5X2RlbGV0ZXIKLXsKLSAgICB0eXBlZGVmIHZvaWQgcmVzdWx0X3R5cGU7Ci0gICAg
dHlwZWRlZiBUICogYXJndW1lbnRfdHlwZTsKLQotICAgIHZvaWQgb3BlcmF0b3IoKShUICogeCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGJvb3N0OjpjaGVja2VkX2FycmF5X2RlbGV0ZSh4KTsKLSAg
ICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgIC8vICNpZm5kZWYgQk9P
U1RfQ09SRV9DSEVDS0VEX0RFTEVURV9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2NvcmUvZW5hYmxlX2lmLmhwcCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2NvcmUvZW5hYmxlX2lmLmhwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRjZWYxZTAzNTQwNmQzMjU3MmZhYjBjNGVjYTk5NDAz
MjcyYmI5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jb3JlL2VuYWJsZV9pZi5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLy8gQm9vc3QgZW5hYmxlX2lmIGxp
YnJhcnkKLQotLy8gQ29weXJpZ2h0IDIwMDMgKGMpIFRoZSBUcnVzdGVlcyBvZiBJbmRpYW5hIFVu
aXZlcnNpdHkuCi0KLS8vIFVzZSwgbW9kaWZpY2F0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1
YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlCi0vLyBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNl
ZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gaHR0cDov
L3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyAgICBBdXRob3JzOiBKYWFra28g
SmFydmkgKGphamFydmkgYXQgb3NsLml1LmVkdSkKLS8vICAgICAgICAgICAgIEplcmVtaWFoIFdp
bGxjb2NrIChqZXdpbGxjbyBhdCBvc2wuaXUuZWR1KQotLy8gICAgICAgICAgICAgQW5kcmV3IEx1
bXNkYWluZSAobHVtcyBhdCBvc2wuaXUuZWR1KQotCi0KLSNpZm5kZWYgQk9PU1RfQ09SRV9FTkFC
TEVfSUZfSFBQCi0jZGVmaW5lIEJPT1NUX0NPUkVfRU5BQkxFX0lGX0hQUAotCi0jaW5jbHVkZSAi
Ym9vc3QvY29uZmlnLmhwcCIKLQotLy8gRXZlbiB0aGUgZGVmaW5pdGlvbiBvZiBlbmFibGVfaWYg
Y2F1c2VzIHByb2JsZW1zIG9uIHNvbWUgY29tcGlsZXJzLAotLy8gc28gaXQncyBtYWNyb2VkIG91
dCBmb3IgYWxsIGNvbXBpbGVycyB0aGF0IGRvIG5vdCBzdXBwb3J0IFNGSU5BRQotCi0jaWZuZGVm
IEJPT1NUX05PX1NGSU5BRQotCi1uYW1lc3BhY2UgYm9vc3QKLXsKLSAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgUj12b2lkPgotICBzdHJ1Y3QgZW5hYmxlX2lmX2hhc190eXBlCi0gIHsK
LSAgICB0eXBlZGVmIFIgdHlwZTsKLSAgfTsKLSAKLSAgdGVtcGxhdGUgPGJvb2wgQiwgY2xhc3Mg
VCA9IHZvaWQ+Ci0gIHN0cnVjdCBlbmFibGVfaWZfYyB7Ci0gICAgdHlwZWRlZiBUIHR5cGU7Ci0g
IH07Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gIHN0cnVjdCBlbmFibGVfaWZfYzxmYWxzZSwg
VD4ge307Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIENvbmQsIGNsYXNzIFQgPSB2b2lkPiAKLSAgc3Ry
dWN0IGVuYWJsZV9pZiA6IHB1YmxpYyBlbmFibGVfaWZfYzxDb25kOjp2YWx1ZSwgVD4ge307Ci0K
LSAgdGVtcGxhdGUgPGJvb2wgQiwgY2xhc3MgVD4KLSAgc3RydWN0IGxhenlfZW5hYmxlX2lmX2Mg
ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgVDo6dHlwZSB0eXBlOwotICB9OwotCi0gIHRlbXBsYXRl
IDxjbGFzcyBUPgotICBzdHJ1Y3QgbGF6eV9lbmFibGVfaWZfYzxmYWxzZSwgVD4ge307Ci0KLSAg
dGVtcGxhdGUgPGNsYXNzIENvbmQsIGNsYXNzIFQ+IAotICBzdHJ1Y3QgbGF6eV9lbmFibGVfaWYg
OiBwdWJsaWMgbGF6eV9lbmFibGVfaWZfYzxDb25kOjp2YWx1ZSwgVD4ge307Ci0KLQotICB0ZW1w
bGF0ZSA8Ym9vbCBCLCBjbGFzcyBUID0gdm9pZD4KLSAgc3RydWN0IGRpc2FibGVfaWZfYyB7Ci0g
ICAgdHlwZWRlZiBUIHR5cGU7Ci0gIH07Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gIHN0cnVj
dCBkaXNhYmxlX2lmX2M8dHJ1ZSwgVD4ge307Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIENvbmQsIGNs
YXNzIFQgPSB2b2lkPiAKLSAgc3RydWN0IGRpc2FibGVfaWYgOiBwdWJsaWMgZGlzYWJsZV9pZl9j
PENvbmQ6OnZhbHVlLCBUPiB7fTsKLQotICB0ZW1wbGF0ZSA8Ym9vbCBCLCBjbGFzcyBUPgotICBz
dHJ1Y3QgbGF6eV9kaXNhYmxlX2lmX2MgewotICAgIHR5cGVkZWYgdHlwZW5hbWUgVDo6dHlwZSB0
eXBlOwotICB9OwotCi0gIHRlbXBsYXRlIDxjbGFzcyBUPgotICBzdHJ1Y3QgbGF6eV9kaXNhYmxl
X2lmX2M8dHJ1ZSwgVD4ge307Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIENvbmQsIGNsYXNzIFQ+IAot
ICBzdHJ1Y3QgbGF6eV9kaXNhYmxlX2lmIDogcHVibGljIGxhenlfZGlzYWJsZV9pZl9jPENvbmQ6
OnZhbHVlLCBUPiB7fTsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2Vsc2UKLQotbmFtZXNw
YWNlIGJvb3N0IHsKLQotICBuYW1lc3BhY2UgZGV0YWlsIHsgdHlwZWRlZiB2b2lkIGVuYWJsZV9p
Zl9kZWZhdWx0X1Q7IH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgc3RydWN0IGVuYWJs
ZV9pZl9kb2VzX25vdF93b3JrX29uX3RoaXNfY29tcGlsZXI7Ci0KLSAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgUj12b2lkPgotICBzdHJ1Y3QgZW5hYmxlX2lmX2hhc190eXBlIDogZW5h
YmxlX2lmX2RvZXNfbm90X3dvcmtfb25fdGhpc19jb21waWxlcjxUPgotICB7IH07Ci0KLSAgdGVt
cGxhdGUgPGJvb2wgQiwgY2xhc3MgVCA9IGRldGFpbDo6ZW5hYmxlX2lmX2RlZmF1bHRfVD4KLSAg
c3RydWN0IGVuYWJsZV9pZl9jIDogZW5hYmxlX2lmX2RvZXNfbm90X3dvcmtfb25fdGhpc19jb21w
aWxlcjxUPgotICB7IH07Ci0KLSAgdGVtcGxhdGUgPGJvb2wgQiwgY2xhc3MgVCA9IGRldGFpbDo6
ZW5hYmxlX2lmX2RlZmF1bHRfVD4gCi0gIHN0cnVjdCBkaXNhYmxlX2lmX2MgOiBlbmFibGVfaWZf
ZG9lc19ub3Rfd29ya19vbl90aGlzX2NvbXBpbGVyPFQ+Ci0gIHsgfTsKLQotICB0ZW1wbGF0ZSA8
Ym9vbCBCLCBjbGFzcyBUID0gZGV0YWlsOjplbmFibGVfaWZfZGVmYXVsdF9UPiAKLSAgc3RydWN0
IGxhenlfZW5hYmxlX2lmX2MgOiBlbmFibGVfaWZfZG9lc19ub3Rfd29ya19vbl90aGlzX2NvbXBp
bGVyPFQ+Ci0gIHsgfTsKLQotICB0ZW1wbGF0ZSA8Ym9vbCBCLCBjbGFzcyBUID0gZGV0YWlsOjpl
bmFibGVfaWZfZGVmYXVsdF9UPiAKLSAgc3RydWN0IGxhenlfZGlzYWJsZV9pZl9jIDogZW5hYmxl
X2lmX2RvZXNfbm90X3dvcmtfb25fdGhpc19jb21waWxlcjxUPgotICB7IH07Ci0KLSAgdGVtcGxh
dGUgPGNsYXNzIENvbmQsIGNsYXNzIFQgPSBkZXRhaWw6OmVuYWJsZV9pZl9kZWZhdWx0X1Q+IAot
ICBzdHJ1Y3QgZW5hYmxlX2lmIDogZW5hYmxlX2lmX2RvZXNfbm90X3dvcmtfb25fdGhpc19jb21w
aWxlcjxUPgotICB7IH07Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIENvbmQsIGNsYXNzIFQgPSBkZXRh
aWw6OmVuYWJsZV9pZl9kZWZhdWx0X1Q+IAotICBzdHJ1Y3QgZGlzYWJsZV9pZiA6IGVuYWJsZV9p
Zl9kb2VzX25vdF93b3JrX29uX3RoaXNfY29tcGlsZXI8VD4KLSAgeyB9OwotCi0gIHRlbXBsYXRl
IDxjbGFzcyBDb25kLCBjbGFzcyBUID0gZGV0YWlsOjplbmFibGVfaWZfZGVmYXVsdF9UPiAKLSAg
c3RydWN0IGxhenlfZW5hYmxlX2lmIDogZW5hYmxlX2lmX2RvZXNfbm90X3dvcmtfb25fdGhpc19j
b21waWxlcjxUPgotICB7IH07Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIENvbmQsIGNsYXNzIFQgPSBk
ZXRhaWw6OmVuYWJsZV9pZl9kZWZhdWx0X1Q+IAotICBzdHJ1Y3QgbGF6eV9kaXNhYmxlX2lmIDog
ZW5hYmxlX2lmX2RvZXNfbm90X3dvcmtfb25fdGhpc19jb21waWxlcjxUPgotICB7IH07Ci0KLX0g
Ly8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9OT19TRklOQUUKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9j
b3JlL25vX2V4Y2VwdGlvbnNfc3VwcG9ydC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9jb3JlL25vX2V4Y2VwdGlvbnNfc3VwcG9ydC5ocHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OTdmMDFhNTI2YTRlZTJmNDdmN2MwNzY0ZjVkOWM3MTJk
YTNkMDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29yZS9ub19leGNlcHRpb25z
X3N1cHBvcnQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotI2lmbmRlZiBCT09T
VF9DT1JFX05PX0VYQ0VQVElPTlNfU1VQUE9SVF9IUFAKLSNkZWZpbmUgQk9PU1RfQ09SRV9OT19F
WENFUFRJT05TX1NVUFBPUlRfSFBQCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyAgcHJhZ21h
IG9uY2UKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIChDKSBDb3B5cmlnaHQgMjAwNCBQ
YXZlbCBWb3plbmlsZWsuCi0vLyBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlz
IHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlCi0vLyBMaWNlbnNlLCBWZXJzaW9uIDEuMC4g
KFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQKLS8vIG9yIGNvcHkgYXQgaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vCi0vLyBUaGlzIGZpbGUg
Y29udGFpbnMgaGVscGVyIG1hY3JvcyB1c2VkIHdoZW4gZXhjZXB0aW9uIHN1cHBvcnQgbWF5IGJl
Ci0vLyBkaXNhYmxlZCAoYXMgaW5kaWNhdGVkIGJ5IG1hY3JvIEJPT1NUX05PX0VYQ0VQVElPTlMp
LgotLy8KLS8vIEJlZm9yZSBwaWNraW5nIHVwIHRoZXNlIG1hY3JvcyB5b3UgbWF5IGNvbnNpZGVy
IHVzaW5nIFJBSUkgdGVjaG5pcXVlcwotLy8gdG8gZGVhbCB3aXRoIGV4Y2VwdGlvbnMgLSB0aGVp
ciBzeW50YXggY2FuIGJlIGFsd2F5cyB0aGUgc2FtZSB3aXRoIAotLy8gb3Igd2l0aG91dCBleGNl
cHRpb24gc3VwcG9ydCBlbmFibGVkLgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpbmNsdWRlIDxib29z
dC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQot
I2lmICEoZGVmaW5lZCBCT09TVF9OT19FWENFUFRJT05TKQotIyAgICBkZWZpbmUgQk9PU1RfVFJZ
IHsgdHJ5Ci0jICAgIGRlZmluZSBCT09TVF9DQVRDSCh4KSBjYXRjaCh4KQotIyAgICBkZWZpbmUg
Qk9PU1RfUkVUSFJPVyB0aHJvdzsKLSMgICAgZGVmaW5lIEJPT1NUX0NBVENIX0VORCB9Ci0jZWxz
ZQotIyAgICBpZiBCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENfXywgQk9PU1RfVEVTVEVEX0FU
KDB4NTY0KSkKLSMgICAgICAgIGRlZmluZSBCT09TVF9UUlkgeyBpZiAoIiIpCi0jICAgICAgICBk
ZWZpbmUgQk9PU1RfQ0FUQ0goeCkgZWxzZSBpZiAoISIiKQotIyAgICBlbHNlCi0jICAgICAgICBk
ZWZpbmUgQk9PU1RfVFJZIHsgaWYgKHRydWUpCi0jICAgICAgICBkZWZpbmUgQk9PU1RfQ0FUQ0go
eCkgZWxzZSBpZiAoZmFsc2UpCi0jICAgIGVuZGlmCi0jICAgIGRlZmluZSBCT09TVF9SRVRIUk9X
Ci0jICAgIGRlZmluZSBCT09TVF9DQVRDSF9FTkQgfQotI2VuZGlmCi0KLQotI2VuZGlmIApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY29yZS9u
b25jb3B5YWJsZS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9jb3JlL25vbmNvcHlhYmxlLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFl
OGMyNDRkZDRjZjk5MWJmNzcwNGU4YjA2NTlhYjgwOGY2YzhjOC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9jb3JlL25vbmNvcHlhYmxlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4
ICswLDAgQEAKLS8vICBCb29zdCBub25jb3B5YWJsZS5ocHAgaGVhZGVyIGZpbGUgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQotLy8gIChDKSBDb3B5cmlnaHQgQmVt
YW4gRGF3ZXMgMTk5OS0yMDAzLiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QKLS8vICBTb2Z0
d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZQotLy8gIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLQotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkgZm9yIGRv
Y3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfQ09SRV9OT05DT1BZQUJMRV9IUFAKLSNkZWZp
bmUgQk9PU1RfQ09SRV9OT05DT1BZQUJMRV9IUFAKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5o
cHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLS8vICBQcml2YXRlIGNvcHkgY29uc3RydWN0b3Ig
YW5kIGNvcHkgYXNzaWdubWVudCBlbnN1cmUgY2xhc3NlcyBkZXJpdmVkIGZyb20KLS8vICBjbGFz
cyBub25jb3B5YWJsZSBjYW5ub3QgYmUgY29waWVkLgotCi0vLyAgQ29udHJpYnV0ZWQgYnkgRGF2
ZSBBYnJhaGFtcwotCi1uYW1lc3BhY2Ugbm9uY29weWFibGVfICAvLyBwcm90ZWN0aW9uIGZyb20g
dW5pbnRlbmRlZCBBREwKLXsKLSAgY2xhc3Mgbm9uY29weWFibGUKLSAgewotICBwcm90ZWN0ZWQ6
Ci0jaWYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfREVGQVVMVEVEX0ZVTkNUSU9OUykgJiYgIWRl
ZmluZWQoQk9PU1RfTk9fQ1hYMTFfTk9OX1BVQkxJQ19ERUZBVUxURURfRlVOQ1RJT05TKQotICAg
ICAgQk9PU1RfQ09OU1RFWFBSIG5vbmNvcHlhYmxlKCkgPSBkZWZhdWx0OwotICAgICAgfm5vbmNv
cHlhYmxlKCkgPSBkZWZhdWx0OwotI2Vsc2UKLSAgICAgIG5vbmNvcHlhYmxlKCkge30KLSAgICAg
IH5ub25jb3B5YWJsZSgpIHt9Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9E
RUxFVEVEX0ZVTkNUSU9OUykKLSAgICAgIG5vbmNvcHlhYmxlKCBjb25zdCBub25jb3B5YWJsZSYg
KSA9IGRlbGV0ZTsKLSAgICAgIG5vbmNvcHlhYmxlJiBvcGVyYXRvcj0oIGNvbnN0IG5vbmNvcHlh
YmxlJiApID0gZGVsZXRlOwotI2Vsc2UKLSAgcHJpdmF0ZTogIC8vIGVtcGhhc2l6ZSB0aGUgZm9s
bG93aW5nIG1lbWJlcnMgYXJlIHByaXZhdGUKLSAgICAgIG5vbmNvcHlhYmxlKCBjb25zdCBub25j
b3B5YWJsZSYgKTsKLSAgICAgIG5vbmNvcHlhYmxlJiBvcGVyYXRvcj0oIGNvbnN0IG5vbmNvcHlh
YmxlJiApOwotI2VuZGlmCi0gIH07Ci19Ci0KLXR5cGVkZWYgbm9uY29weWFibGVfOjpub25jb3B5
YWJsZSBub25jb3B5YWJsZTsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmICAvLyBC
T09TVF9DT1JFX05PTkNPUFlBQkxFX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvY3N0ZGludC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9jc3RkaW50LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYmY3MDk3ZWM4Y2IwNTFlZDM2ZTgwYjEyYmYzNmFhZGQzN2FlYzk0Yy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9jc3RkaW50LmhwcAorKysgL2Rldi9udWxsCkBAIC0x
LDU0NiArMCwwIEBACi0vLyAgYm9vc3QgY3N0ZGludC5ocHAgaGVhZGVyIGZpbGUgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0KLS8vICAoQykgQ29weXJpZ2h0
IEJlbWFuIERhd2VzIDE5OTkuCi0vLyAgKEMpIENvcHlyaWdodCBKZW5zIE1hdWVyIDIwMDEKLS8v
ICAoQykgQ29weXJpZ2h0IEpvaG4gTWFkZG9jayAyMDAxCi0vLyAgRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0Ci0vLyAgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21w
YW55aW5nIGZpbGUKLS8vICBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy9pbnRlZ2VyIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAgUmV2aXNpb24gSGlzdG9yeQot
Ly8gICAzMSBPY3QgMDEgIHVzZSBCT09TVF9IQVNfTE9OR19MT05HIHRvIGNoZWNrIGZvciAibG9u
ZyBsb25nIiAoSmVucyBNLikKLS8vICAgMTYgQXByIDAxICBjaGVjayBMT05HTE9OR19NQVggd2hl
biBsb29raW5nIGZvciAibG9uZyBsb25nIiAoSmVucyBNYXVyZXIpCi0vLyAgIDIzIEphbiAwMSAg
cHJlZmVyICJsb25nIiBvdmVyICJpbnQiIGZvciBpbnQzMl90IGFuZCBpbnRtYXhfdCAoSmVucyBN
YXVyZXIpCi0vLyAgIDEyIE5vdiAwMCAgTWVyZ2VkIDxib29zdC9zdGRpbnQuaD4gKEplbnMgTWF1
cmVyKQotLy8gICAyMyBTZXAgMDAgIEFkZGVkIElOVFhYX0MgbWFjcm8gc3VwcG9ydCAoSm9obiBN
YWRkb2NrKS4KLS8vICAgMjIgU2VwIDAwICBCZXR0ZXIgNjQtYml0IHN1cHBvcnQgKEpvaG4gTWFk
ZG9jaykKLS8vICAgMjkgSnVuIDAwICBSZWltcGxlbWVudCB0byBhdm9pZCBpbmNsdWRpbmcgc3Rk
aW50Lmggd2l0aGluIG5hbWVzcGFjZSBib29zdAotLy8gICAgOCBBdWcgOTkgIEluaXRpYWwgdmVy
c2lvbiAoQmVtYW4gRGF3ZXMpCi0KLQotI2lmbmRlZiBCT09TVF9DU1RESU5UX0hQUAotI2RlZmlu
ZSBCT09TVF9DU1RESU5UX0hQUAotCi0vLwotLy8gU2luY2Ugd2UgYWx3YXlzIGRlZmluZSB0aGUg
SU5UI19DIG1hY3JvcyBhcyBwZXIgQysrMHgsCi0vLyBkZWZpbmUgX19TVERDX0NPTlNUQU5UX01B
Q1JPUyBzbyB0aGF0IDxzdGRpbnQuaD4gZG9lcyB0aGUgcmlnaHQKLS8vIHRoaW5nIGlmIHBvc3Np
YmxlLCBhbmQgc28gdGhhdCB0aGUgdXNlciBrbm93cyB0aGF0IHRoZSBtYWNyb3MKLS8vIGFyZSBh
Y3R1YWxseSBkZWZpbmVkIGFzIHBlciBDOTkuCi0vLwotI2lmbmRlZiBfX1NURENfQ09OU1RBTlRf
TUFDUk9TCi0jICBkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUwotI2VuZGlmCi0KLSNpbmNs
dWRlIDxib29zdC9jb25maWcuaHBwPgotCi0vLwotLy8gTm90ZSB0aGF0IEdMSUJDIGlzIGEgYml0
IGluY29uc2lzdGVudCBhYm91dCB3aGV0aGVyIGludDY0X3QgaXMgZGVmaW5lZCBvciBub3QKLS8v
IGRlcGVuZGluZyB1cG9uIHdoYXQgaGVhZGVycyBoYXBwZW4gdG8gaGF2ZSBiZWVuIGluY2x1ZGVk
IGZpcnN0Li4uCi0vLyBzbyB3ZSBkaXNhYmxlIHVzZSBvZiBzdGRpbnQuaCB3aGVuIEdMSUJDIGRv
ZXMgbm90IGRlZmluZSBfX0dMSUJDX0hBVkVfTE9OR19MT05HLgotLy8gU2VlIGh0dHBzOi8vc3Zu
LmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC8zNTQ4IGFuZCBodHRwOi8vc291cmNlcy5yZWRo
YXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMDk5MAotLy8KLSNpZiBkZWZpbmVkKEJP
T1NUX0hBU19TVERJTlRfSCkJCQkJCVwKLSAgJiYgKCFkZWZpbmVkKF9fR0xJQkNfXykJCQkJCVwK
LSAgICAgIHx8IGRlZmluZWQoX19HTElCQ19IQVZFX0xPTkdfTE9ORykJCQlcCi0gICAgICB8fCAo
ZGVmaW5lZChfX0dMSUJDX18pICYmICgoX19HTElCQ19fID4gMikgfHwgKChfX0dMSUJDX18gPT0g
MikgJiYgKF9fR0xJQkNfTUlOT1JfXyA+PSAxNykpKSkpCi0KLS8vIFRoZSBmb2xsb3dpbmcgI2lu
Y2x1ZGUgaXMgYW4gaW1wbGVtZW50YXRpb24gYXJ0aWZhY3Q7IG5vdCBwYXJ0IG9mIGludGVyZmFj
ZS4KLSMgaWZkZWYgX19ocHV4Ci0vLyBIUC1VWCBoYXMgYSB2YWd1ZWx5IG5pY2UgPHN0ZGludC5o
PiBpbiBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbgotIyAgIGluY2x1ZGUgPGludHR5cGVzLmg+Ci0j
ICAgaWZkZWYgX19TVERDXzMyX01PREVfXwotICAgICAgLy8gdGhpcyBpcyB0cmlnZ2VyZWQgd2l0
aCBHQ0MsIGJlY2F1c2UgaXQgZGVmaW5lcyBfX2NwbHVzcGx1cyA8IDE5OTcwN0wKLSMgICAgIGRl
ZmluZSBCT09TVF9OT19JTlQ2NF9UCi0jICAgZW5kaWYKLSMgZWxpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSB8fCBkZWZpbmVkKF9fSUJNQ1BQX18pIHx8IGRlZmluZWQoX0FJWCkKLSMgICBpbmNsdWRl
IDxpbnR0eXBlcy5oPgotIyBlbHNlCi0jICAgaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLS8vIFRoZXJl
IGlzIGEgYnVnIGluIEN5Z3dpbiB0d28gX0MgbWFjcm9zCi0jICAgaWYgZGVmaW5lZChfX1NURENf
Q09OU1RBTlRfTUFDUk9TKSAmJiBkZWZpbmVkKF9fQ1lHV0lOX18pCi0jICAgICB1bmRlZiBJTlRN
QVhfQwotIyAgICAgdW5kZWYgVUlOVE1BWF9DCi0jICAgICBkZWZpbmUgSU5UTUFYX0MoYykgYyMj
TEwKLSMgICAgIGRlZmluZSBVSU5UTUFYX0MoYykgYyMjVUxMCi0jICAgZW5kaWYKLQotIyBlbmRp
ZgotCi0jaWYgZGVmaW5lZChfX1FOWF9fKSAmJiBkZWZpbmVkKF9fRVhUX1FOWCkgCi0KLS8vIFFO
WCAoRGlua3Vtd2FyZSBzdGRsaWIpIGRlZmluZXMgdGhlc2UgYXMgbm9uLXN0YW5kYXJkIG5hbWVz
LgotLy8gUmVmbGVjdCB0byB0aGUgc3RhbmRhcmQgbmFtZXMuCi0KLXR5cGVkZWYgOjppbnRsZWFz
dDhfdCBpbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmIDo6aW50ZmFzdDhfdCBpbnRfZmFzdDhfdDsKLXR5
cGVkZWYgOjp1aW50bGVhc3Q4X3QgdWludF9sZWFzdDhfdDsKLXR5cGVkZWYgOjp1aW50ZmFzdDhf
dCB1aW50X2Zhc3Q4X3Q7Ci0KLXR5cGVkZWYgOjppbnRsZWFzdDE2X3QgaW50X2xlYXN0MTZfdDsK
LXR5cGVkZWYgOjppbnRmYXN0MTZfdCBpbnRfZmFzdDE2X3Q7Ci10eXBlZGVmIDo6dWludGxlYXN0
MTZfdCB1aW50X2xlYXN0MTZfdDsKLXR5cGVkZWYgOjp1aW50ZmFzdDE2X3QgdWludF9mYXN0MTZf
dDsKLQotdHlwZWRlZiA6OmludGxlYXN0MzJfdCBpbnRfbGVhc3QzMl90OwotdHlwZWRlZiA6Omlu
dGZhc3QzMl90IGludF9mYXN0MzJfdDsKLXR5cGVkZWYgOjp1aW50bGVhc3QzMl90IHVpbnRfbGVh
c3QzMl90OwotdHlwZWRlZiA6OnVpbnRmYXN0MzJfdCB1aW50X2Zhc3QzMl90OwotCi0jIGlmbmRl
ZiBCT09TVF9OT19JTlQ2NF9UCi0KLXR5cGVkZWYgOjppbnRsZWFzdDY0X3QgaW50X2xlYXN0NjRf
dDsKLXR5cGVkZWYgOjppbnRmYXN0NjRfdCBpbnRfZmFzdDY0X3Q7Ci10eXBlZGVmIDo6dWludGxl
YXN0NjRfdCB1aW50X2xlYXN0NjRfdDsKLXR5cGVkZWYgOjp1aW50ZmFzdDY0X3QgdWludF9mYXN0
NjRfdDsKLQotIyBlbmRpZgotCi0jZW5kaWYKLQotbmFtZXNwYWNlIGJvb3N0Ci17Ci0KLSAgdXNp
bmcgOjppbnQ4X3Q7Ci0gIHVzaW5nIDo6aW50X2xlYXN0OF90OwotICB1c2luZyA6OmludF9mYXN0
OF90OwotICB1c2luZyA6OnVpbnQ4X3Q7Ci0gIHVzaW5nIDo6dWludF9sZWFzdDhfdDsKLSAgdXNp
bmcgOjp1aW50X2Zhc3Q4X3Q7Ci0KLSAgdXNpbmcgOjppbnQxNl90OwotICB1c2luZyA6OmludF9s
ZWFzdDE2X3Q7Ci0gIHVzaW5nIDo6aW50X2Zhc3QxNl90OwotICB1c2luZyA6OnVpbnQxNl90Owot
ICB1c2luZyA6OnVpbnRfbGVhc3QxNl90OwotICB1c2luZyA6OnVpbnRfZmFzdDE2X3Q7Ci0KLSAg
dXNpbmcgOjppbnQzMl90OwotICB1c2luZyA6OmludF9sZWFzdDMyX3Q7Ci0gIHVzaW5nIDo6aW50
X2Zhc3QzMl90OwotICB1c2luZyA6OnVpbnQzMl90OwotICB1c2luZyA6OnVpbnRfbGVhc3QzMl90
OwotICB1c2luZyA6OnVpbnRfZmFzdDMyX3Q7Ci0KLSMgaWZuZGVmIEJPT1NUX05PX0lOVDY0X1QK
LQotICB1c2luZyA6OmludDY0X3Q7Ci0gIHVzaW5nIDo6aW50X2xlYXN0NjRfdDsKLSAgdXNpbmcg
OjppbnRfZmFzdDY0X3Q7Ci0gIHVzaW5nIDo6dWludDY0X3Q7Ci0gIHVzaW5nIDo6dWludF9sZWFz
dDY0X3Q7Ci0gIHVzaW5nIDo6dWludF9mYXN0NjRfdDsKLQotIyBlbmRpZgotCi0gIHVzaW5nIDo6
aW50bWF4X3Q7Ci0gIHVzaW5nIDo6dWludG1heF90OwotCi19IC8vIG5hbWVzcGFjZSBib29zdAot
Ci0jZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAoX19GcmVlQlNEX18gPD0gNCkgfHwgZGVm
aW5lZChfX29zZl9fKSB8fCBkZWZpbmVkKF9fVk1TKSB8fCBkZWZpbmVkKF9fU09MQVJJUzlfXykg
fHwgZGVmaW5lZChfX05ldEJTRF9fKQotLy8gRnJlZUJTRCBhbmQgVHJ1NjQgaGF2ZSBhbiA8aW50
dHlwZXMuaD4gdGhhdCBjb250YWlucyBtdWNoIG9mIHdoYXQgd2UgbmVlZC4KLSMgaW5jbHVkZSA8
aW50dHlwZXMuaD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotICB1c2luZyA6OmludDhfdDsKLSAg
dHlwZWRlZiBpbnQ4X3QgaW50X2xlYXN0OF90OwotICB0eXBlZGVmIGludDhfdCBpbnRfZmFzdDhf
dDsKLSAgdXNpbmcgOjp1aW50OF90OwotICB0eXBlZGVmIHVpbnQ4X3QgdWludF9sZWFzdDhfdDsK
LSAgdHlwZWRlZiB1aW50OF90IHVpbnRfZmFzdDhfdDsKLQotICB1c2luZyA6OmludDE2X3Q7Ci0g
IHR5cGVkZWYgaW50MTZfdCBpbnRfbGVhc3QxNl90OwotICB0eXBlZGVmIGludDE2X3QgaW50X2Zh
c3QxNl90OwotICB1c2luZyA6OnVpbnQxNl90OwotICB0eXBlZGVmIHVpbnQxNl90IHVpbnRfbGVh
c3QxNl90OwotICB0eXBlZGVmIHVpbnQxNl90IHVpbnRfZmFzdDE2X3Q7Ci0KLSAgdXNpbmcgOjpp
bnQzMl90OwotICB0eXBlZGVmIGludDMyX3QgaW50X2xlYXN0MzJfdDsKLSAgdHlwZWRlZiBpbnQz
Ml90IGludF9mYXN0MzJfdDsKLSAgdXNpbmcgOjp1aW50MzJfdDsKLSAgdHlwZWRlZiB1aW50MzJf
dCB1aW50X2xlYXN0MzJfdDsKLSAgdHlwZWRlZiB1aW50MzJfdCB1aW50X2Zhc3QzMl90OwotCi0j
IGlmbmRlZiBCT09TVF9OT19JTlQ2NF9UCi0KLSAgdXNpbmcgOjppbnQ2NF90OwotICB0eXBlZGVm
IGludDY0X3QgaW50X2xlYXN0NjRfdDsKLSAgdHlwZWRlZiBpbnQ2NF90IGludF9mYXN0NjRfdDsK
LSAgdXNpbmcgOjp1aW50NjRfdDsKLSAgdHlwZWRlZiB1aW50NjRfdCB1aW50X2xlYXN0NjRfdDsK
LSAgdHlwZWRlZiB1aW50NjRfdCB1aW50X2Zhc3Q2NF90OwotCi0gIHR5cGVkZWYgaW50NjRfdCBp
bnRtYXhfdDsKLSAgdHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7Ci0KLSMgZWxzZQotCi0gIHR5
cGVkZWYgaW50MzJfdCBpbnRtYXhfdDsKLSAgdHlwZWRlZiB1aW50MzJfdCB1aW50bWF4X3Q7Ci0K
LSMgZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2Vsc2UgIC8vIEJPT1NUX0hBU19T
VERJTlRfSAotCi0jIGluY2x1ZGUgPGJvb3N0L2xpbWl0cy5ocHA+IC8vIGltcGxlbWVudGF0aW9u
IGFydGlmYWN0OyBub3QgcGFydCBvZiBpbnRlcmZhY2UKLSMgaW5jbHVkZSA8bGltaXRzLmg+ICAg
ICAgICAgLy8gbmVlZGVkIGZvciBsaW1pdHMgbWFjcm9zCi0KLQotbmFtZXNwYWNlIGJvb3N0Ci17
Ci0KLS8vICBUaGVzZSBhcmUgZmFpcmx5IHNhZmUgZ3Vlc3NlcyBmb3Igc29tZSAxNi1iaXQsIGFu
ZCBtb3N0IDMyLWJpdCBhbmQgNjQtYml0Ci0vLyAgcGxhdGZvcm1zLiAgRm9yIG90aGVyIHN5c3Rl
bXMsIHRoZXkgd2lsbCBoYXZlIHRvIGJlIGhhbmQgdGFpbG9yZWQuCi0vLwotLy8gIEJlY2F1c2Ug
dGhlIGZhc3QgdHlwZXMgYXJlIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIHVuZGVjb3Jh
dGVkIHR5cGVzLAotLy8gIGl0IG1heSBiZSBwb3NzaWJsZSB0byBoYW5kIHRhaWxvciBhIG1vcmUg
ZWZmaWNpZW50IGltcGxlbWVudGF0aW9uLiAgU3VjaAotLy8gIGFuIG9wdGltaXphdGlvbiBtYXkg
YmUgaWxsdXNpb25hcnk7IG9uIHRoZSBJbnRlbCB4ODYtZmFtaWx5IDM4NiBvbiwgZm9yCi0vLyAg
ZXhhbXBsZSwgYnl0ZSBhcml0aG1ldGljIGFuZCBsb2FkL3N0b3JlcyBhcmUgYXMgZmFzdCBhcyAi
aW50IiBzaXplZCBvbmVzLgotCi0vLyAgOC1iaXQgdHlwZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0KLSMgaWYgVUNIQVJf
TUFYID09IDB4ZmYKLSAgICAgdHlwZWRlZiBzaWduZWQgY2hhciAgICAgaW50OF90OwotICAgICB0
eXBlZGVmIHNpZ25lZCBjaGFyICAgICBpbnRfbGVhc3Q4X3Q7Ci0gICAgIHR5cGVkZWYgc2lnbmVk
IGNoYXIgICAgIGludF9mYXN0OF90OwotICAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50
OF90OwotICAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50X2xlYXN0OF90OwotICAgICB0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50X2Zhc3Q4X3Q7Ci0jIGVsc2UKLSMgICAgZXJyb3Ig
ZGVmYXVsdHMgbm90IGNvcnJlY3Q7IHlvdSBtdXN0IGhhbmQgbW9kaWZ5IGJvb3N0L2NzdGRpbnQu
aHBwCi0jIGVuZGlmCi0KLS8vICAxNi1iaXQgdHlwZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQotIyBpZiBVU0hSVF9NQVgg
PT0gMHhmZmZmCi0jICBpZiBkZWZpbmVkKF9fY3JheXgxKQotICAgICAvLyBUaGUgQ3JheSBYMSBo
YXMgYSAxNi1iaXQgc2hvcnQsIGhvd2V2ZXIgaXQgaXMgbm90IHJlY29tbWVuZAotICAgICAvLyBm
b3IgdXNlIGluIHBlcmZvcm1hbmNlIGNyaXRpY2FsIGNvZGUuCi0gICAgIHR5cGVkZWYgc2hvcnQg
ICAgICAgICAgIGludDE2X3Q7Ci0gICAgIHR5cGVkZWYgc2hvcnQgICAgICAgICAgIGludF9sZWFz
dDE2X3Q7Ci0gICAgIHR5cGVkZWYgaW50ICAgICAgICAgICAgIGludF9mYXN0MTZfdDsKLSAgICAg
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgdWludDE2X3Q7Ci0gICAgIHR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgIHVpbnRfbGVhc3QxNl90OwotICAgICB0eXBlZGVmIHVuc2lnbmVkIGludCAgICB1aW50
X2Zhc3QxNl90OwotIyAgZWxzZQotICAgICB0eXBlZGVmIHNob3J0ICAgICAgICAgICBpbnQxNl90
OwotICAgICB0eXBlZGVmIHNob3J0ICAgICAgICAgICBpbnRfbGVhc3QxNl90OwotICAgICB0eXBl
ZGVmIHNob3J0ICAgICAgICAgICBpbnRfZmFzdDE2X3Q7Ci0gICAgIHR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgIHVpbnQxNl90OwotICAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICB1aW50X2xlYXN0
MTZfdDsKLSAgICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgdWludF9mYXN0MTZfdDsKLSMgIGVu
ZGlmCi0jIGVsaWYgKFVTSFJUX01BWCA9PSAweGZmZmZmZmZmKSAmJiBkZWZpbmVkKF9fTVRBX18p
Ci0gICAgICAvLyBPbiBNVEEgLyBYTVQgc2hvcnQgaXMgMzIgYml0cyB1bmxlc3MgdGhlIC1zaG9y
dDE2IGNvbXBpbGVyIGZsYWcgaXMgc3BlY2lmaWVkCi0gICAgICAvLyBNVEEgLyBYTVQgZG9lcyBz
dXBwb3J0IHRoZSBmb2xsb3dpbmcgbm9uLXN0YW5kYXJkIGludGVnZXIgdHlwZXMKLSAgICAgIHR5
cGVkZWYgX19zaG9ydDE2ICAgICAgICAgICBpbnQxNl90OwotICAgICAgdHlwZWRlZiBfX3Nob3J0
MTYgICAgICAgICAgIGludF9sZWFzdDE2X3Q7Ci0gICAgICB0eXBlZGVmIF9fc2hvcnQxNiAgICAg
ICAgICAgaW50X2Zhc3QxNl90OwotICAgICAgdHlwZWRlZiB1bnNpZ25lZCBfX3Nob3J0MTYgIHVp
bnQxNl90OwotICAgICAgdHlwZWRlZiB1bnNpZ25lZCBfX3Nob3J0MTYgIHVpbnRfbGVhc3QxNl90
OwotICAgICAgdHlwZWRlZiB1bnNpZ25lZCBfX3Nob3J0MTYgIHVpbnRfZmFzdDE2X3Q7Ci0jIGVs
aWYgKFVTSFJUX01BWCA9PSAweGZmZmZmZmZmKSAmJiBkZWZpbmVkKENSQVkpCi0gICAgIC8vIG5v
IDE2LWJpdCB0eXBlcyBvbiBDcmF5OgotICAgICB0eXBlZGVmIHNob3J0ICAgICAgICAgICBpbnRf
bGVhc3QxNl90OwotICAgICB0eXBlZGVmIHNob3J0ICAgICAgICAgICBpbnRfZmFzdDE2X3Q7Ci0g
ICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgIHVpbnRfbGVhc3QxNl90OwotICAgICB0eXBlZGVm
IHVuc2lnbmVkIHNob3J0ICB1aW50X2Zhc3QxNl90OwotIyBlbHNlCi0jICAgIGVycm9yIGRlZmF1
bHRzIG5vdCBjb3JyZWN0OyB5b3UgbXVzdCBoYW5kIG1vZGlmeSBib29zdC9jc3RkaW50LmhwcAot
IyBlbmRpZgotCi0vLyAgMzItYml0IHR5cGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0KLSMgaWYgVUlOVF9NQVggPT0gMHhm
ZmZmZmZmZgotICAgICB0eXBlZGVmIGludCAgICAgICAgICAgICBpbnQzMl90OwotICAgICB0eXBl
ZGVmIGludCAgICAgICAgICAgICBpbnRfbGVhc3QzMl90OwotICAgICB0eXBlZGVmIGludCAgICAg
ICAgICAgICBpbnRfZmFzdDMyX3Q7Ci0gICAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgIHVpbnQz
Ml90OwotICAgICB0eXBlZGVmIHVuc2lnbmVkIGludCAgICB1aW50X2xlYXN0MzJfdDsKLSAgICAg
dHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgdWludF9mYXN0MzJfdDsKLSMgZWxpZiAoVVNIUlRfTUFY
ID09IDB4ZmZmZmZmZmYpCi0gICAgIHR5cGVkZWYgc2hvcnQgICAgICAgICAgICAgaW50MzJfdDsK
LSAgICAgdHlwZWRlZiBzaG9ydCAgICAgICAgICAgICBpbnRfbGVhc3QzMl90OwotICAgICB0eXBl
ZGVmIHNob3J0ICAgICAgICAgICAgIGludF9mYXN0MzJfdDsKLSAgICAgdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCAgICB1aW50MzJfdDsKLSAgICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICB1aW50
X2xlYXN0MzJfdDsKLSAgICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICB1aW50X2Zhc3QzMl90
OwotIyBlbGlmIFVMT05HX01BWCA9PSAweGZmZmZmZmZmCi0gICAgIHR5cGVkZWYgbG9uZyAgICAg
ICAgICAgIGludDMyX3Q7Ci0gICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgIGludF9sZWFzdDMy
X3Q7Ci0gICAgIHR5cGVkZWYgbG9uZyAgICAgICAgICAgIGludF9mYXN0MzJfdDsKLSAgICAgdHlw
ZWRlZiB1bnNpZ25lZCBsb25nICAgdWludDMyX3Q7Ci0gICAgIHR5cGVkZWYgdW5zaWduZWQgbG9u
ZyAgIHVpbnRfbGVhc3QzMl90OwotICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICB1aW50X2Zh
c3QzMl90OwotIyBlbGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmZmZmZmZmZmYpICYmIGRlZmlu
ZWQoX19NVEFfXykKLSAgICAgIC8vIEludGVnZXJzIGFyZSA2NCBiaXRzIG9uIHRoZSBNVEEgLyBY
TVQKLSAgICAgIHR5cGVkZWYgX19pbnQzMiAgICAgICAgICAgaW50MzJfdDsKLSAgICAgIHR5cGVk
ZWYgX19pbnQzMiAgICAgICAgICAgaW50X2xlYXN0MzJfdDsKLSAgICAgIHR5cGVkZWYgX19pbnQz
MiAgICAgICAgICAgaW50X2Zhc3QzMl90OwotICAgICAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDMy
ICB1aW50MzJfdDsKLSAgICAgIHR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiAgdWludF9sZWFzdDMy
X3Q7Ci0gICAgICB0eXBlZGVmIHVuc2lnbmVkIF9faW50MzIgIHVpbnRfZmFzdDMyX3Q7Ci0jIGVs
c2UKLSMgICAgZXJyb3IgZGVmYXVsdHMgbm90IGNvcnJlY3Q7IHlvdSBtdXN0IGhhbmQgbW9kaWZ5
IGJvb3N0L2NzdGRpbnQuaHBwCi0jIGVuZGlmCi0KLS8vICA2NC1iaXQgdHlwZXMgKyBpbnRtYXhf
dCBhbmQgdWludG1heF90ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQot
IyBpZiBkZWZpbmVkKEJPT1NUX0hBU19MT05HX0xPTkcpICYmIFwKLSAgICFkZWZpbmVkKEJPT1NU
X01TVkMpICYmICFkZWZpbmVkKF9fQk9STEFORENfXykgJiYgXAotICAgKCFkZWZpbmVkKF9fR0xJ
QkNQUF9fKSB8fCBkZWZpbmVkKF9HTElCQ1BQX1VTRV9MT05HX0xPTkcpKSAmJiBcCi0gICAoZGVm
aW5lZChVTExPTkdfTUFYKSB8fCBkZWZpbmVkKFVMT05HX0xPTkdfTUFYKSB8fCBkZWZpbmVkKFVM
T05HTE9OR19NQVgpKQotIyAgICBpZiBkZWZpbmVkKF9faHB1eCkKLSAgICAgLy8gSFAtVVgncyB2
YWx1ZSBvZiBVTE9OR19MT05HX01BWCBpcyB1bnVzYWJsZSBpbiBwcmVwcm9jZXNzb3IgZXhwcmVz
c2lvbnMKLSMgICAgZWxpZiAoZGVmaW5lZChVTExPTkdfTUFYKSAmJiBVTExPTkdfTUFYID09IDE4
NDQ2NzQ0MDczNzA5NTUxNjE1VUxMKSB8fCAoZGVmaW5lZChVTE9OR19MT05HX01BWCkgJiYgVUxP
TkdfTE9OR19NQVggPT0gMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwpIHx8IChkZWZpbmVkKFVMT05H
TE9OR19NQVgpICYmIFVMT05HTE9OR19NQVggPT0gMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIDIqKjY0IC0gMQotIyAgICBlbHNlCi0jICAgICAgIGVycm9yIGRlZmF1bHRzIG5v
dCBjb3JyZWN0OyB5b3UgbXVzdCBoYW5kIG1vZGlmeSBib29zdC9jc3RkaW50LmhwcAotIyAgICBl
bmRpZgotCi0gICAgIHR5cGVkZWYgIDo6Ym9vc3Q6OmxvbmdfbG9uZ190eXBlICAgICAgICAgICAg
aW50bWF4X3Q7Ci0gICAgIHR5cGVkZWYgIDo6Ym9vc3Q6OnVsb25nX2xvbmdfdHlwZSAgIHVpbnRt
YXhfdDsKLSAgICAgdHlwZWRlZiAgOjpib29zdDo6bG9uZ19sb25nX3R5cGUgICAgICAgICAgICBp
bnQ2NF90OwotICAgICB0eXBlZGVmICA6OmJvb3N0Ojpsb25nX2xvbmdfdHlwZSAgICAgICAgICAg
IGludF9sZWFzdDY0X3Q7Ci0gICAgIHR5cGVkZWYgIDo6Ym9vc3Q6OmxvbmdfbG9uZ190eXBlICAg
ICAgICAgICAgaW50X2Zhc3Q2NF90OwotICAgICB0eXBlZGVmICA6OmJvb3N0Ojp1bG9uZ19sb25n
X3R5cGUgICB1aW50NjRfdDsKLSAgICAgdHlwZWRlZiAgOjpib29zdDo6dWxvbmdfbG9uZ190eXBl
ICAgdWludF9sZWFzdDY0X3Q7Ci0gICAgIHR5cGVkZWYgIDo6Ym9vc3Q6OnVsb25nX2xvbmdfdHlw
ZSAgIHVpbnRfZmFzdDY0X3Q7Ci0KLSMgZWxpZiBVTE9OR19NQVggIT0gMHhmZmZmZmZmZgotCi0j
ICAgIGlmIFVMT05HX01BWCA9PSAxODQ0Njc0NDA3MzcwOTU1MTYxNSAvLyAyKio2NCAtIDEKLSAg
ICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgICAgICBpbnRtYXhfdDsKLSAgICAgdHlwZWRlZiB1
bnNpZ25lZCBsb25nICAgICAgICB1aW50bWF4X3Q7Ci0gICAgIHR5cGVkZWYgbG9uZyAgICAgICAg
ICAgICAgICAgaW50NjRfdDsKLSAgICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgICAgICBpbnRf
bGVhc3Q2NF90OwotICAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgICAgIGludF9mYXN0NjRf
dDsKLSAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgICB1aW50NjRfdDsKLSAgICAgdHlw
ZWRlZiB1bnNpZ25lZCBsb25nICAgICAgICB1aW50X2xlYXN0NjRfdDsKLSAgICAgdHlwZWRlZiB1
bnNpZ25lZCBsb25nICAgICAgICB1aW50X2Zhc3Q2NF90OwotIyAgICBlbHNlCi0jICAgICAgIGVy
cm9yIGRlZmF1bHRzIG5vdCBjb3JyZWN0OyB5b3UgbXVzdCBoYW5kIG1vZGlmeSBib29zdC9jc3Rk
aW50LmhwcAotIyAgICBlbmRpZgotIyBlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQo
Qk9PU1RfSEFTX0xPTkdfTE9ORykKLSAgICAgX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9u
ZyAgICAgICAgICAgIGludG1heF90OwotICAgICBfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBsb25nICAgdWludG1heF90OwotICAgICBfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9u
ZyBsb25nICAgICAgICAgICAgaW50NjRfdDsKLSAgICAgX19leHRlbnNpb25fXyB0eXBlZGVmIGxv
bmcgbG9uZyAgICAgICAgICAgIGludF9sZWFzdDY0X3Q7Ci0gICAgIF9fZXh0ZW5zaW9uX18gdHlw
ZWRlZiBsb25nIGxvbmcgICAgICAgICAgICBpbnRfZmFzdDY0X3Q7Ci0gICAgIF9fZXh0ZW5zaW9u
X18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgICB1aW50NjRfdDsKLSAgICAgX19leHRlbnNp
b25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVpbnRfbGVhc3Q2NF90OwotICAgICBf
X2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nICAgdWludF9mYXN0NjRfdDsK
LSMgZWxpZiBkZWZpbmVkKEJPT1NUX0hBU19NU19JTlQ2NCkKLSAgICAgLy8KLSAgICAgLy8gd2Ug
aGF2ZSBCb3JsYW5kL0ludGVsL01pY3Jvc29mdCBfX2ludDY0OgotICAgICAvLwotICAgICB0eXBl
ZGVmIF9faW50NjQgICAgICAgICAgICAgaW50bWF4X3Q7Ci0gICAgIHR5cGVkZWYgdW5zaWduZWQg
X19pbnQ2NCAgICB1aW50bWF4X3Q7Ci0gICAgIHR5cGVkZWYgX19pbnQ2NCAgICAgICAgICAgICBp
bnQ2NF90OwotICAgICB0eXBlZGVmIF9faW50NjQgICAgICAgICAgICAgaW50X2xlYXN0NjRfdDsK
LSAgICAgdHlwZWRlZiBfX2ludDY0ICAgICAgICAgICAgIGludF9mYXN0NjRfdDsKLSAgICAgdHlw
ZWRlZiB1bnNpZ25lZCBfX2ludDY0ICAgIHVpbnQ2NF90OwotICAgICB0eXBlZGVmIHVuc2lnbmVk
IF9faW50NjQgICAgdWludF9sZWFzdDY0X3Q7Ci0gICAgIHR5cGVkZWYgdW5zaWduZWQgX19pbnQ2
NCAgICB1aW50X2Zhc3Q2NF90OwotIyBlbHNlIC8vIGFzc3VtZSBubyA2NC1iaXQgaW50ZWdlcnMK
LSMgIGRlZmluZSBCT09TVF9OT19JTlQ2NF9UCi0gICAgIHR5cGVkZWYgaW50MzJfdCAgICAgICAg
ICAgICAgaW50bWF4X3Q7Ci0gICAgIHR5cGVkZWYgdWludDMyX3QgICAgICAgICAgICAgdWludG1h
eF90OwotIyBlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0KLSNlbmRpZiAvLyBCT09T
VF9IQVNfU1RESU5UX0gKLQotLy8gaW50cHRyX3QvdWludHB0cl90IGFyZSBkZWZpbmVkIHNlcGFy
YXRlbHkgYmVjYXVzZSB0aGV5IGFyZSBvcHRpb25hbCBhbmQgbm90IHVuaXZlcnNhbGx5IGF2YWls
YWJsZQotI2lmIGRlZmluZWQoQk9PU1RfV0lORE9XUykgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkg
JiYgIWRlZmluZWQoQk9PU1RfSEFTX1NURElOVF9IKQotLy8gT2xkZXIgTVNWQyBkb24ndCBoYXZl
IHN0ZGludC5oIGFuZCBoYXZlIGludHB0cl90L3VpbnRwdHJfdCBkZWZpbmVkIGluIHN0ZGRlZi5o
Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jZW5kaWYKLQotLy8gUEdJIHNlZW1zIHRvIG5vdCBzdXBw
b3J0IGludHB0cl90L3VpbnRwdHJfdCBwcm9wZXJseS4gQk9PU1RfSEFTX1NURElOVF9IIGlzIG5v
dCBkZWZpbmVkIGZvciB0aGlzIGNvbXBpbGVyIGJ5IEJvb3N0LkNvbmZpZy4KLSNpZiAhZGVmaW5l
ZChfX1BHSUNfXykKLQotI2lmIChkZWZpbmVkKEJPT1NUX1dJTkRPV1MpICYmICFkZWZpbmVkKF9X
SU4zMl9XQ0UpKSBcCi0gICAgfHwgKGRlZmluZWQoX1hPUEVOX1VOSVgpICYmIChfWE9QRU5fVU5J
WCswID4gMCkgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykpIFwKLSAgICB8fCBkZWZpbmVkKF9fQ1lH
V0lOX18pIFwKLSAgICB8fCBkZWZpbmVkKG1hY2ludG9zaCkgfHwgZGVmaW5lZChfX0FQUExFX18p
IHx8IGRlZmluZWQoX19BUFBMRV9DQ19fKSBcCi0gICAgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykg
fHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVk
KF9fRHJhZ29uRmx5X18pIHx8IGRlZmluZWQoc3VuKQotCi1uYW1lc3BhY2UgYm9vc3QgewotICAg
IHVzaW5nIDo6aW50cHRyX3Q7Ci0gICAgdXNpbmcgOjp1aW50cHRyX3Q7Ci19Ci0jZGVmaW5lIEJP
T1NUX0hBU19JTlRQVFJfVAotCi0vLyBDbGFuZyBwcmV0ZW5kcyB0byBiZSBHQ0MsIHNvIGl0J2xs
IG1hdGNoIHRoaXMgY29uZGl0aW9uCi0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVk
KF9fSU5UUFRSX1RZUEVfXykgJiYgZGVmaW5lZChfX1VJTlRQVFJfVFlQRV9fKQotCi1uYW1lc3Bh
Y2UgYm9vc3QgewotICAgIHR5cGVkZWYgX19JTlRQVFJfVFlQRV9fIGludHB0cl90OwotICAgIHR5
cGVkZWYgX19VSU5UUFRSX1RZUEVfXyB1aW50cHRyX3Q7Ci19Ci0jZGVmaW5lIEJPT1NUX0hBU19J
TlRQVFJfVAotCi0jZW5kaWYKLQotI2VuZGlmIC8vICFkZWZpbmVkKF9fUEdJQ19fKQotCi0jZW5k
aWYgLy8gQk9PU1RfQ1NURElOVF9IUFAKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKgotCi1NYWNybyBkZWZpbml0aW9uIHNlY3Rpb246Ci0K
LUFkZGVkIDIzcmQgU2VwdGVtYmVyIDIwMDAgKEpvaG4gTWFkZG9jaykuCi1Nb2RpZmllZCAxMXRo
IFNlcHRlbWJlciAyMDAxIHRvIGJlIGV4Y2x1ZGVkIHdoZW4KLUJPT1NUX0hBU19TVERJTlRfSCBp
cyBkZWZpbmVkIChKb2huIE1hZGRvY2spLgotTW9kaWZpZWQgMTF0aCBEZWMgMjAwOSB0byBhbHdh
eXMgZGVmaW5lIHRoZQotSU5UI19DIG1hY3JvcyBpZiB0aGV5J3JlIG5vdCBhbHJlYWR5IGRlZmlu
ZWQgKEpvaG4gTWFkZG9jaykuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLQotI2lmICFkZWZpbmVkKEJPT1NUX19TVERDX0NPTlNUQU5U
X01BQ1JPU19ERUZJTkVEKSAmJiBcCi0gICAoIWRlZmluZWQoSU5UOF9DKSB8fCAhZGVmaW5lZChJ
TlQxNl9DKSB8fCAhZGVmaW5lZChJTlQzMl9DKSB8fCAhZGVmaW5lZChJTlQ2NF9DKSkKLS8vCi0v
LyBGb3IgdGhlIGZvbGxvd2luZyBjb2RlIHdlIGdldCBzZXZlcmFsIHdhcm5pbmdzIGFsb25nIHRo
ZSBsaW5lcyBvZjoKLS8vCi0vLyBib29zdC9jc3RkaW50LmhwcDo0Mjg6MzU6IGVycm9yOiB1c2Ug
b2YgQzk5IGxvbmcgbG9uZyBpbnRlZ2VyIGNvbnN0YW50Ci0vLwotLy8gU28gd2UgZGVjbGFyZSB0
aGlzIGEgc3lzdGVtIGhlYWRlciB0byBzdXBwcmVzcyB0aGVzZSB3YXJuaW5ncy4KLS8vCi0jaWYg
ZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID49IDQpCi0jcHJhZ21hIEdDQyBzeXN0ZW1f
aGVhZGVyCi0jZW5kaWYKLQotI2luY2x1ZGUgPGxpbWl0cy5oPgotIyBkZWZpbmUgQk9PU1RfX1NU
RENfQ09OU1RBTlRfTUFDUk9TX0RFRklORUQKLSMgaWYgZGVmaW5lZChCT09TVF9IQVNfTVNfSU5U
NjQpCi0vLwotLy8gQm9ybGFuZC9JbnRlbC9NaWNyb3NvZnQgY29tcGlsZXJzIGhhdmUgd2lkdGgg
c3BlY2lmaWMgc3VmZml4ZXM6Ci0vLwotI2lmbmRlZiBJTlQ4X0MKLSMgIGRlZmluZSBJTlQ4X0Mo
dmFsdWUpICAgICB2YWx1ZSMjaTgKLSNlbmRpZgotI2lmbmRlZiBJTlQxNl9DCi0jICBkZWZpbmUg
SU5UMTZfQyh2YWx1ZSkgICAgdmFsdWUjI2kxNgotI2VuZGlmCi0jaWZuZGVmIElOVDMyX0MKLSMg
IGRlZmluZSBJTlQzMl9DKHZhbHVlKSAgICB2YWx1ZSMjaTMyCi0jZW5kaWYKLSNpZm5kZWYgSU5U
NjRfQwotIyAgZGVmaW5lIElOVDY0X0ModmFsdWUpICAgIHZhbHVlIyNpNjQKLSNlbmRpZgotIyAg
aWZkZWYgX19CT1JMQU5EQ19fCi0gICAgLy8gQm9ybGFuZCBidWc6IGFwcGVuZGluZyB1aTggbWFr
ZXMgdGhlIHR5cGUgYSBzaWduZWQgY2hhcgotIyAgIGRlZmluZSBVSU5UOF9DKHZhbHVlKSAgICBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih2YWx1ZSMjdSkKLSMgIGVsc2UKLSMgICBkZWZpbmUg
VUlOVDhfQyh2YWx1ZSkgICAgdmFsdWUjI3VpOAotIyAgZW5kaWYKLSNpZm5kZWYgVUlOVDE2X0MK
LSMgIGRlZmluZSBVSU5UMTZfQyh2YWx1ZSkgICB2YWx1ZSMjdWkxNgotI2VuZGlmCi0jaWZuZGVm
IFVJTlQzMl9DCi0jICBkZWZpbmUgVUlOVDMyX0ModmFsdWUpICAgdmFsdWUjI3VpMzIKLSNlbmRp
ZgotI2lmbmRlZiBVSU5UNjRfQwotIyAgZGVmaW5lIFVJTlQ2NF9DKHZhbHVlKSAgIHZhbHVlIyN1
aTY0Ci0jZW5kaWYKLSNpZm5kZWYgSU5UTUFYX0MKLSMgIGRlZmluZSBJTlRNQVhfQyh2YWx1ZSkg
ICB2YWx1ZSMjaTY0Ci0jICBkZWZpbmUgVUlOVE1BWF9DKHZhbHVlKSAgdmFsdWUjI3VpNjQKLSNl
bmRpZgotCi0jIGVsc2UKLS8vICBkbyBpdCB0aGUgb2xkIGZhc2hpb25lZCB3YXk6Ci0KLS8vICA4
LWJpdCB0eXBlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLy8KLQotIyAgaWYgKFVDSEFSX01BWCA9PSAweGZmKSAmJiAhZGVmaW5l
ZChJTlQ4X0MpCi0jICAgZGVmaW5lIElOVDhfQyh2YWx1ZSkgc3RhdGljX2Nhc3Q8Ym9vc3Q6Omlu
dDhfdD4odmFsdWUpCi0jICAgZGVmaW5lIFVJTlQ4X0ModmFsdWUpIHN0YXRpY19jYXN0PGJvb3N0
Ojp1aW50OF90Pih2YWx1ZSMjdSkKLSMgIGVuZGlmCi0KLS8vICAxNi1iaXQgdHlwZXMgIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8K
LQotIyAgaWYgKFVTSFJUX01BWCA9PSAweGZmZmYpICYmICFkZWZpbmVkKElOVDE2X0MpCi0jICAg
ZGVmaW5lIElOVDE2X0ModmFsdWUpIHN0YXRpY19jYXN0PGJvb3N0OjppbnQxNl90Pih2YWx1ZSkK
LSMgICBkZWZpbmUgVUlOVDE2X0ModmFsdWUpIHN0YXRpY19jYXN0PGJvb3N0Ojp1aW50MTZfdD4o
dmFsdWUjI3UpCi0jICBlbmRpZgotCi0vLyAgMzItYml0IHR5cGVzICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0jaWZuZGVmIElO
VDMyX0MKLSMgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmKQotIyAgIGRlZmluZSBJTlQzMl9D
KHZhbHVlKSB2YWx1ZQotIyAgIGRlZmluZSBVSU5UMzJfQyh2YWx1ZSkgdmFsdWUjI3UKLSMgIGVs
aWYgVUxPTkdfTUFYID09IDB4ZmZmZmZmZmYKLSMgICBkZWZpbmUgSU5UMzJfQyh2YWx1ZSkgdmFs
dWUjI0wKLSMgICBkZWZpbmUgVUlOVDMyX0ModmFsdWUpIHZhbHVlIyN1TAotIyAgZW5kaWYKLSNl
bmRpZgotCi0vLyAgNjQtYml0IHR5cGVzICsgaW50bWF4X3QgYW5kIHVpbnRtYXhfdCAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0jaWZuZGVmIElOVDY0X0MKLSMgIGlmIGRl
ZmluZWQoQk9PU1RfSEFTX0xPTkdfTE9ORykgJiYgXAotICAgIChkZWZpbmVkKFVMTE9OR19NQVgp
IHx8IGRlZmluZWQoVUxPTkdfTE9OR19NQVgpIHx8IGRlZmluZWQoVUxPTkdMT05HX01BWCkgfHwg
ZGVmaW5lZChfVUxMT05HX01BWCkgfHwgZGVmaW5lZChfTExPTkdfTUFYKSkKLQotIyAgICBpZiBk
ZWZpbmVkKF9faHB1eCkKLSAgICAgICAgLy8gSFAtVVgncyB2YWx1ZSBvZiBVTE9OR19MT05HX01B
WCBpcyB1bnVzYWJsZSBpbiBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbnMKLSMgICAgICAgZGVmaW5l
IElOVDY0X0ModmFsdWUpIHZhbHVlIyNMTAotIyAgICAgICBkZWZpbmUgVUlOVDY0X0ModmFsdWUp
IHZhbHVlIyN1TEwKLSMgICAgZWxpZiAoZGVmaW5lZChVTExPTkdfTUFYKSAmJiBVTExPTkdfTUFY
ID09IDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMKSB8fCAgXAotICAgICAgICAoZGVmaW5lZChVTE9O
R19MT05HX01BWCkgJiYgVUxPTkdfTE9OR19NQVggPT0gMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwp
IHx8ICBcCi0gICAgICAgIChkZWZpbmVkKFVMT05HTE9OR19NQVgpICYmIFVMT05HTE9OR19NQVgg
PT0gMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwpIHx8IFwKLSAgICAgICAgKGRlZmluZWQoX1VMTE9O
R19NQVgpICYmIF9VTExPTkdfTUFYID09IDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMKSB8fCBcCi0g
ICAgICAgIChkZWZpbmVkKF9MTE9OR19NQVgpICYmIF9MTE9OR19NQVggPT0gOTIyMzM3MjAzNjg1
NDc3NTgwN0xMKQotCi0jICAgICAgIGRlZmluZSBJTlQ2NF9DKHZhbHVlKSB2YWx1ZSMjTEwKLSMg
ICAgICAgZGVmaW5lIFVJTlQ2NF9DKHZhbHVlKSB2YWx1ZSMjdUxMCi0jICAgIGVsc2UKLSMgICAg
ICAgZXJyb3IgZGVmYXVsdHMgbm90IGNvcnJlY3Q7IHlvdSBtdXN0IGhhbmQgbW9kaWZ5IGJvb3N0
L2NzdGRpbnQuaHBwCi0jICAgIGVuZGlmCi0jICBlbGlmIFVMT05HX01BWCAhPSAweGZmZmZmZmZm
Ci0KLSMgICAgaWYgVUxPTkdfTUFYID09IDE4NDQ2NzQ0MDczNzA5NTUxNjE1VSAvLyAyKio2NCAt
IDEKLSMgICAgICAgZGVmaW5lIElOVDY0X0ModmFsdWUpIHZhbHVlIyNMCi0jICAgICAgIGRlZmlu
ZSBVSU5UNjRfQyh2YWx1ZSkgdmFsdWUjI3VMCi0jICAgIGVsc2UKLSMgICAgICAgZXJyb3IgZGVm
YXVsdHMgbm90IGNvcnJlY3Q7IHlvdSBtdXN0IGhhbmQgbW9kaWZ5IGJvb3N0L2NzdGRpbnQuaHBw
Ci0jICAgIGVuZGlmCi0jICBlbGlmIGRlZmluZWQoQk9PU1RfSEFTX0xPTkdfTE9ORykKLSAgICAg
Ly8gVXN1YWwgbWFjcm9zIG5vdCBkZWZpbmVkLCB3b3JrIHRoaW5ncyBvdXQgZm9yIG91cnNlbHZl
czoKLSMgICAgaWYofjB1TEwgPT0gMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwpCi0jICAgICAgIGRl
ZmluZSBJTlQ2NF9DKHZhbHVlKSB2YWx1ZSMjTEwKLSMgICAgICAgZGVmaW5lIFVJTlQ2NF9DKHZh
bHVlKSB2YWx1ZSMjdUxMCi0jICAgIGVsc2UKLSMgICAgICAgZXJyb3IgZGVmYXVsdHMgbm90IGNv
cnJlY3Q7IHlvdSBtdXN0IGhhbmQgbW9kaWZ5IGJvb3N0L2NzdGRpbnQuaHBwCi0jICAgIGVuZGlm
Ci0jICBlbHNlCi0jICAgIGVycm9yIGRlZmF1bHRzIG5vdCBjb3JyZWN0OyB5b3UgbXVzdCBoYW5k
IG1vZGlmeSBib29zdC9jc3RkaW50LmhwcAotIyAgZW5kaWYKLQotIyAgaWZkZWYgQk9PU1RfTk9f
SU5UNjRfVAotIyAgIGRlZmluZSBJTlRNQVhfQyh2YWx1ZSkgSU5UMzJfQyh2YWx1ZSkKLSMgICBk
ZWZpbmUgVUlOVE1BWF9DKHZhbHVlKSBVSU5UMzJfQyh2YWx1ZSkKLSMgIGVsc2UKLSMgICBkZWZp
bmUgSU5UTUFYX0ModmFsdWUpIElOVDY0X0ModmFsdWUpCi0jICAgZGVmaW5lIFVJTlRNQVhfQyh2
YWx1ZSkgVUlOVDY0X0ModmFsdWUpCi0jICBlbmRpZgotI2VuZGlmCi0jIGVuZGlmIC8vIEJvcmxh
bmQvTWljcm9zb2Z0IHNwZWNpZmljIHdpZHRoIHN1ZmZpeGVzCi0KLSNlbmRpZiAvLyBJTlQjX0Mg
bWFjcm9zLgotCi0KLQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9jdXJyZW50X2Z1bmN0aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2N1cnJlbnRfZnVuY3Rpb24uaHBwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4Njk1NWNiMDQxYmY2MzMxM2JkNmI1ZmM4MWIyOWQzMTI2Yjk2YTlj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2N1cnJlbnRfZnVuY3Rpb24uaHBwCisr
KyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotI2lmbmRlZiBCT09TVF9DVVJSRU5UX0ZVTkNU
SU9OX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9DVVJSRU5UX0ZVTkNUSU9OX0hQUF9JTkNM
VURFRAotCi0vLyBNUyBjb21wYXRpYmxlIGNvbXBpbGVycyBzdXBwb3J0ICNwcmFnbWEgb25jZQot
Ci0jaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVSID49IDEwMjApCi0jIHByYWdtYSBv
bmNlCi0jZW5kaWYKLQotLy8KLS8vICBib29zdC9jdXJyZW50X2Z1bmN0aW9uLmhwcCAtIEJPT1NU
X0NVUlJFTlRfRlVOQ1RJT04KLS8vCi0vLyAgQ29weXJpZ2h0IChjKSAyMDAyIFBldGVyIERpbW92
IGFuZCBNdWx0aSBNZWRpYSBMdGQuCi0vLwotLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29z
dCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICBTZWUgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQKLS8vCi0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9hc3NlcnQv
Y3VycmVudF9mdW5jdGlvbi5odG1sCi0vLwotCi1uYW1lc3BhY2UgYm9vc3QKLXsKLQotbmFtZXNw
YWNlIGRldGFpbAotewotCi1pbmxpbmUgdm9pZCBjdXJyZW50X2Z1bmN0aW9uX2hlbHBlcigpCi17
Ci0KLSNpZiBkZWZpbmVkKCBCT09TVF9ESVNBQkxFX0NVUlJFTlRfRlVOQ1RJT04gKQotCi0jIGRl
ZmluZSBCT09TVF9DVVJSRU5UX0ZVTkNUSU9OICIodW5rbm93bikiCi0KLSNlbGlmIGRlZmluZWQo
X19HTlVDX18pIHx8IChkZWZpbmVkKF9fTVdFUktTX18pICYmIChfX01XRVJLU19fID49IDB4MzAw
MCkpIHx8IChkZWZpbmVkKF9fSUNDKSAmJiAoX19JQ0MgPj0gNjAwKSkgfHwgZGVmaW5lZChfX2do
c19fKQotCi0jIGRlZmluZSBCT09TVF9DVVJSRU5UX0ZVTkNUSU9OIF9fUFJFVFRZX0ZVTkNUSU9O
X18KLQotI2VsaWYgZGVmaW5lZChfX0RNQ19fKSAmJiAoX19ETUNfXyA+PSAweDgxMCkKLQotIyBk
ZWZpbmUgQk9PU1RfQ1VSUkVOVF9GVU5DVElPTiBfX1BSRVRUWV9GVU5DVElPTl9fCi0KLSNlbGlm
IGRlZmluZWQoX19GVU5DU0lHX18pCi0KLSMgZGVmaW5lIEJPT1NUX0NVUlJFTlRfRlVOQ1RJT04g
X19GVU5DU0lHX18KLQotI2VsaWYgKGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgKF9fSU5U
RUxfQ09NUElMRVIgPj0gNjAwKSkgfHwgKGRlZmluZWQoX19JQk1DUFBfXykgJiYgKF9fSUJNQ1BQ
X18gPj0gNTAwKSkKLQotIyBkZWZpbmUgQk9PU1RfQ1VSUkVOVF9GVU5DVElPTiBfX0ZVTkNUSU9O
X18KLQotI2VsaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmIChfX0JPUkxBTkRDX18gPj0gMHg1
NTApCi0KLSMgZGVmaW5lIEJPT1NUX0NVUlJFTlRfRlVOQ1RJT04gX19GVU5DX18KLQotI2VsaWYg
ZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDEp
Ci0KLSMgZGVmaW5lIEJPT1NUX0NVUlJFTlRfRlVOQ1RJT04gX19mdW5jX18KLQotI2VsaWYgZGVm
aW5lZChfX2NwbHVzcGx1cykgJiYgKF9fY3BsdXNwbHVzID49IDIwMTEwMykKLQotIyBkZWZpbmUg
Qk9PU1RfQ1VSUkVOVF9GVU5DVElPTiBfX2Z1bmNfXwotCi0jZWxzZQotCi0jIGRlZmluZSBCT09T
VF9DVVJSRU5UX0ZVTkNUSU9OICIodW5rbm93bikiCi0KLSNlbmRpZgotCi19Ci0KLX0gLy8gbmFt
ZXNwYWNlIGRldGFpbAotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gI2lmbmRl
ZiBCT09TVF9DVVJSRU5UX0ZVTkNUSU9OX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZGV0YWlsL2VuZGlhbi5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9kZXRhaWwvZW5kaWFuLmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU3NmMyNmI4OWEzZjZiMWNhNmUxMjk3
N2FlMmI3NDk2MWY4ZmU4Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9kZXRhaWwv
ZW5kaWFuLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLS8vIENvcHlyaWdodCAy
MDEzIFJlbmUgUml2ZXJhCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUg
TGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55LQotLy8gaW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0
KQotCi0jaWZuZGVmIEJPT1NUX0RFVEFJTF9FTkRJQU5fSFBQCi0jZGVmaW5lIEJPT1NUX0RFVEFJ
TF9FTkRJQU5fSFBQCi0KLS8vIFVzZSB0aGUgUHJlZGVmIGxpYnJhcnkgZm9yIHRoZSBkZXRlY3Rp
b24gb2YgZW5kaWFuZXNzLgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvZW5kaWFuX2Nv
bXBhdC5oPgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L2RldGFpbC9pbmRpcmVjdF90cmFpdHMuaHBwIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZGV0YWlsL2luZGlyZWN0X3RyYWl0cy5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyOTRlNDBmNmE5MWRlNjExMmE3MTk0OGNl
Njc0N2U2ZGE4ZjYzOWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZGV0YWlsL2lu
ZGlyZWN0X3RyYWl0cy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLy8gQ29w
eXJpZ2h0IERhdmlkIEFicmFoYW1zIDIwMDIuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9v
c3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLS8vIGFjY29tcGFueWluZyBm
aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpCi0jaWZuZGVmIElORElSRUNUX1RSQUlUU19EV0EyMDAyMTMxX0hQUAot
IyBkZWZpbmUgSU5ESVJFQ1RfVFJBSVRTX0RXQTIwMDIxMzFfSFBQCi0jIGluY2x1ZGUgPGJvb3N0
L3R5cGVfdHJhaXRzL2lzX2Z1bmN0aW9uLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaXNfcmVmZXJlbmNlLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfcG9p
bnRlci5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2NsYXNzLmhwcD4KLSMg
aW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBwPgotIyBpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9pc192b2xhdGlsZS5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2lzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvdHlw
ZV90cmFpdHMvaXNfbWVtYmVyX3BvaW50ZXIuaHBwPgotIyBpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9yZW1vdmVfY3YuaHBwPgotIyBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yZW1vdmVf
cmVmZXJlbmNlLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX3BvaW50
ZXIuaHBwPgotCi0jIGluY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQotIyBp
bmNsdWRlIDxib29zdC9tcGwvZXZhbF9pZi5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L21wbC9pZi5o
cHA+Ci0jIGluY2x1ZGUgPGJvb3N0L21wbC9ib29sLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvbXBs
L2FuZC5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L21wbC9ub3QuaHBwPgotIyBpbmNsdWRlIDxib29z
dC9tcGwvYXV4Xy9sYW1iZGFfc3VwcG9ydC5ocHA+Ci0KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFt
ZXNwYWNlIGRldGFpbCB7Ci0KLW5hbWVzcGFjZSBpbmRpcmVjdF90cmFpdHMgewotCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19yZWZlcmVuY2VfdG9fY29uc3QgOiBtcGw6OmZhbHNlXwot
ewotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfcmVmZXJlbmNlX3RvX2NvbnN0
PFQgY29uc3QmPiA6IG1wbDo6dHJ1ZV8KLXsKLX07Ci0KLSMgICBpZiBkZWZpbmVkKEJPT1NUX01T
VkMpICYmIF9NU0NfRlVMTF9WRVIgPD0gMTMxMDIxNDAgLy8gdmM3LjAxIGFscGhhIHdvcmthcm91
bmQKLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfcmVmZXJlbmNlX3RvX2NvbnN0PFQgY29u
c3Qgdm9sYXRpbGUmPiA6IG1wbDo6dHJ1ZV8KLXsKLX07Ci0jICAgZW5kaWYgCi0KLXRlbXBsYXRl
IDxjbGFzcyBUPgotc3RydWN0IGlzX3JlZmVyZW5jZV90b19mdW5jdGlvbiA6IG1wbDo6ZmFsc2Vf
Ci17Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19yZWZlcmVuY2VfdG9fZnVu
Y3Rpb248VCY+IDogaXNfZnVuY3Rpb248VD4KLXsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgot
c3RydWN0IGlzX3BvaW50ZXJfdG9fZnVuY3Rpb24gOiBtcGw6OmZhbHNlXwotewotfTsKLQotLy8g
VGhlcmUncyBubyBzdWNoIHRoaW5nIGFzIGEgcG9pbnRlci10by1jdi1mdW5jdGlvbiwgc28gd2Ug
ZG9uJ3QgbmVlZAotLy8gc3BlY2lhbGl6YXRpb25zIGZvciB0aG9zZQotdGVtcGxhdGUgPGNsYXNz
IFQ+Ci1zdHJ1Y3QgaXNfcG9pbnRlcl90b19mdW5jdGlvbjxUKj4gOiBpc19mdW5jdGlvbjxUPgot
ewotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfcmVmZXJlbmNlX3RvX21lbWJl
cl9mdW5jdGlvbl9wb2ludGVyX2ltcGwgOiBtcGw6OmZhbHNlXwotewotfTsKLQotdGVtcGxhdGUg
PGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfcmVmZXJlbmNlX3RvX21lbWJlcl9mdW5jdGlvbl9wb2ludGVy
X2ltcGw8VCY+Ci0gICAgOiBpc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlcjx0eXBlbmFtZSByZW1v
dmVfY3Y8VD46OnR5cGU+Ci17Ci19OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlz
X3JlZmVyZW5jZV90b19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlcgotICAgIDogaXNfcmVmZXJlbmNl
X3RvX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyX2ltcGw8VD4KLXsKLSAgICBCT09TVF9NUExfQVVY
X0xBTUJEQV9TVVBQT1JUKDEsaXNfcmVmZXJlbmNlX3RvX21lbWJlcl9mdW5jdGlvbl9wb2ludGVy
LChUKSkKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX3JlZmVyZW5jZV90b19m
dW5jdGlvbl9wb2ludGVyX2F1eAotICAgIDogbXBsOjphbmRfPAotICAgICAgICAgIGlzX3JlZmVy
ZW5jZTxUPgotICAgICAgICAsIGlzX3BvaW50ZXJfdG9fZnVuY3Rpb248Ci0gICAgICAgICAgICAg
IHR5cGVuYW1lIHJlbW92ZV9jdjwKLSAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHJlbW92ZV9y
ZWZlcmVuY2U8VD46OnR5cGUKLSAgICAgICAgICAgICAgPjo6dHlwZQotICAgICAgICAgID4KLSAg
ICAgID4KLXsKLSAgICAvLyBUaGVyZSdzIG5vIHN1Y2ggdGhpbmcgYXMgYSBwb2ludGVyLXRvLWN2
LWZ1bmN0aW9uLCBzbyB3ZSBkb24ndCBuZWVkIHNwZWNpYWxpemF0aW9ucyBmb3IgdGhvc2UKLX07
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX3JlZmVyZW5jZV90b19mdW5jdGlvbl9w
b2ludGVyCi0gICAgOiBtcGw6OmlmXzwKLSAgICAgICAgICBpc19yZWZlcmVuY2VfdG9fZnVuY3Rp
b248VD4KLSAgICAgICAgLCBtcGw6OmZhbHNlXwotICAgICAgICAsIGlzX3JlZmVyZW5jZV90b19m
dW5jdGlvbl9wb2ludGVyX2F1eDxUPgotICAgICA+Ojp0eXBlCi17Ci19OwotCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4KLXN0cnVjdCBpc19yZWZlcmVuY2VfdG9fbm9uX2NvbnN0Ci0gICAgOiBtcGw6OmFu
ZF88Ci0gICAgICAgICAgaXNfcmVmZXJlbmNlPFQ+Ci0gICAgICAgICwgbXBsOjpub3RfPAotICAg
ICAgICAgICAgIGlzX3JlZmVyZW5jZV90b19jb25zdDxUPgotICAgICAgICAgID4KLSAgICAgID4K
LXsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX3JlZmVyZW5jZV90b192b2xh
dGlsZSA6IG1wbDo6ZmFsc2VfCi17Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBp
c19yZWZlcmVuY2VfdG9fdm9sYXRpbGU8VCB2b2xhdGlsZSY+IDogbXBsOjp0cnVlXwotewotfTsK
LQotIyAgIGlmIGRlZmluZWQoQk9PU1RfTVNWQykgJiYgX01TQ19GVUxMX1ZFUiA8PSAxMzEwMjE0
MCAvLyB2YzcuMDEgYWxwaGEgd29ya2Fyb3VuZAotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3Qg
aXNfcmVmZXJlbmNlX3RvX3ZvbGF0aWxlPFQgY29uc3Qgdm9sYXRpbGUmPiA6IG1wbDo6dHJ1ZV8K
LXsKLX07Ci0jICAgZW5kaWYgCi0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfcmVm
ZXJlbmNlX3RvX3BvaW50ZXIgOiBtcGw6OmZhbHNlXwotewotfTsKLQotdGVtcGxhdGUgPGNsYXNz
IFQ+Ci1zdHJ1Y3QgaXNfcmVmZXJlbmNlX3RvX3BvaW50ZXI8VComPiA6IG1wbDo6dHJ1ZV8KLXsK
LX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX3JlZmVyZW5jZV90b19wb2ludGVy
PFQqIGNvbnN0Jj4gOiBtcGw6OnRydWVfCi17Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0
cnVjdCBpc19yZWZlcmVuY2VfdG9fcG9pbnRlcjxUKiB2b2xhdGlsZSY+IDogbXBsOjp0cnVlXwot
ewotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfcmVmZXJlbmNlX3RvX3BvaW50
ZXI8VCogY29uc3Qgdm9sYXRpbGUmPiA6IG1wbDo6dHJ1ZV8KLXsKLX07Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPgotc3RydWN0IGlzX3JlZmVyZW5jZV90b19jbGFzcwotICAgIDogbXBsOjphbmRfPAot
ICAgICAgICAgIGlzX3JlZmVyZW5jZTxUPgotICAgICAgICAsIGlzX2NsYXNzPAotICAgICAgICAg
ICAgICB0eXBlbmFtZSByZW1vdmVfY3Y8Ci0gICAgICAgICAgICAgICAgICB0eXBlbmFtZSByZW1v
dmVfcmVmZXJlbmNlPFQ+Ojp0eXBlCi0gICAgICAgICAgICAgID46OnR5cGUKLSAgICAgICAgICA+
Ci0gICAgICA+Ci17Ci0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgxLGlzX3JlZmVy
ZW5jZV90b19jbGFzcywoVCkpCi19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19w
b2ludGVyX3RvX2NsYXNzCi0gICAgOiBtcGw6OmFuZF88Ci0gICAgICAgICAgaXNfcG9pbnRlcjxU
PgotICAgICAgICAsIGlzX2NsYXNzPAotICAgICAgICAgICAgICB0eXBlbmFtZSByZW1vdmVfY3Y8
Ci0gICAgICAgICAgICAgICAgICB0eXBlbmFtZSByZW1vdmVfcG9pbnRlcjxUPjo6dHlwZQotICAg
ICAgICAgICAgICA+Ojp0eXBlCi0gICAgICAgICAgPgotICAgICAgPgotewotICAgIEJPT1NUX01Q
TF9BVVhfTEFNQkRBX1NVUFBPUlQoMSxpc19wb2ludGVyX3RvX2NsYXNzLChUKSkKLX07Ci0KLQot
fQotCi11c2luZyBuYW1lc3BhY2UgaW5kaXJlY3RfdHJhaXRzOwotCi19fSAvLyBuYW1lc3BhY2Ug
Ym9vc3Q6OnB5dGhvbjo6ZGV0YWlsCi0KLSNlbmRpZiAvLyBJTkRJUkVDVF9UUkFJVFNfRFdBMjAw
MjEzMV9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L2RldGFpbC9pdGVyYXRvci5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9kZXRhaWwvaXRlcmF0b3IuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyNDk4ZWY0NDhmZjc3MGI4MmRkM2M2ZmQyZGU0NmRlZDRlYmM3YmFjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2RldGFpbC9pdGVyYXRvci5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzOSArMCwwIEBACi0vLyAoQykgQ29weXJpZ2h0IERhdmlkIEFicmFoYW1zIDIwMDIu
Ci0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lv
biAxLjAuIChTZWUKLS8vIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5
IGF0Ci0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpZm5kZWYg
SVRFUkFUT1JfRFdBMTIyNjAwX0hQUF8KLSNkZWZpbmUgSVRFUkFUT1JfRFdBMTIyNjAwX0hQUF8K
LQotLy8gVGhpcyBoZWFkZXIgaXMgb2Jzb2xldGUgYW5kIHdpbGwgYmUgZGVwcmVjYXRlZC4KLQot
I2luY2x1ZGUgPGl0ZXJhdG9yPgotI2lmIGRlZmluZWQoX19TVU5QUk9fQ0MpICYmIChkZWZpbmVk
KF9fU0dJX1NUTF9QT1JUKSB8fCBkZWZpbmVkKF9TVExQT1JUX1ZFUlNJT04pKQotI2luY2x1ZGUg
PGNzdGRkZWY+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIGJvb3N0Ci17Ci0KLW5hbWVzcGFjZSBkZXRh
aWwKLXsKLQotdXNpbmcgc3RkOjppdGVyYXRvcl90cmFpdHM7Ci11c2luZyBzdGQ6OmRpc3RhbmNl
OwotCi0jaWYgZGVmaW5lZChfX1NVTlBST19DQykgJiYgKGRlZmluZWQoX19TR0lfU1RMX1BPUlQp
IHx8IGRlZmluZWQoX1NUTFBPUlRfVkVSU0lPTikpCi0vLyBzdGQ6OmRpc3RhbmNlIGZyb20gc3Rs
cG9ydCB3aXRoIE9yYWNsZSBjb21waWxlciAxMi40IGFuZCAxMi41IGZhaWxzIHRvIGRlZHVjZSB0
ZW1wbGF0ZSBwYXJhbWV0ZXJzCi0vLyB3aGVuIG9uZSBvZiB0aGUgYXJndW1lbnRzIGlzIGFuIGFy
cmF5IGFuZCB0aGUgb3RoZXIgb25lIGlzIGEgcG9pbnRlci4KLXRlbXBsYXRlPCB0eXBlbmFtZSBU
LCBzdGQ6OnNpemVfdCBOID4KLWlubGluZSB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czwg
VCogPjo6ZGlmZmVyZW5jZV90eXBlIGRpc3RhbmNlKFQgKCZsZWZ0KVtOXSwgVCogcmlnaHQpCi17
Ci0gICAgcmV0dXJuIHN0ZDo6ZGlzdGFuY2Uoc3RhdGljX2Nhc3Q8IFQqID4obGVmdCksIHJpZ2h0
KTsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotfSAvLyBuYW1lc3BhY2Ug
Ym9vc3QKLQotI2VuZGlmIC8vIElURVJBVE9SX0RXQTEyMjYwMF9IUFBfCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9kZXRhaWwvdGVtcGxhdGVk
X3N0cmVhbXMuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
ZGV0YWlsL3RlbXBsYXRlZF9zdHJlYW1zLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMWZhNmVlMzUzNDM5NzBhNjdjYzdhYWZmOTU3NDA0NDZiNWE3OTY0Yi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9kZXRhaWwvdGVtcGxhdGVkX3N0cmVhbXMuaHBwCisrKyAvZGV2
L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gYm9vc3Qg
ZGV0YWlsL3RlbXBsYXRlZF9zdHJlYW1zLmhwcCBoZWFkZXIgZmlsZQotLy8gU2VlIGh0dHA6Ly93
d3cuYm9vc3Qub3JnIGZvciB1cGRhdGVzLCBkb2N1bWVudGF0aW9uLCBhbmQgcmV2aXNpb24gaGlz
dG9yeS4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDMK
LS8vIEVyaWMgRnJpZWRtYW4KLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLS8vIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0KLSNpZm5kZWYgQk9PU1RfREVUQUlMX1RFTVBMQVRFRF9TVFJFQU1TX0hQUAot
I2RlZmluZSBCT09TVF9ERVRBSUxfVEVNUExBVEVEX1NUUkVBTVNfSFBQCi0KLSNpbmNsdWRlICJi
b29zdC9jb25maWcuaHBwIgotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAoZGV0YWlsKSBC
T09TVF9URU1QTEFURURfU1RSRUFNXyogbWFjcm9zCi0vLwotLy8gUHJvdmlkZXMgd29ya2Fyb3Vu
ZCBwbGF0Zm9ybXMgd2l0aG91dCBzdHJlYW0gY2xhc3MgdGVtcGxhdGVzLgotLy8KLQotI2lmICFk
ZWZpbmVkKEJPT1NUX05PX1NURF9MT0NBTEUpCi0KLSNkZWZpbmUgQk9PU1RfVEVNUExBVEVEX1NU
UkVBTV9URU1QTEFURShFLFQpIFwKLSAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIEUgLCB0eXBlbmFt
ZSBUID4KLQotI2RlZmluZSBCT09TVF9URU1QTEFURURfU1RSRUFNX1RFTVBMQVRFX0FMTE9DKEUs
VCxBKSBcCi0gICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBFICwgdHlwZW5hbWUgVCAsIHR5cGVuYW1l
IEEgPgotCi0jZGVmaW5lIEJPT1NUX1RFTVBMQVRFRF9TVFJFQU1fQVJHUyhFLFQpIFwKLSAgICB0
eXBlbmFtZSBFICwgdHlwZW5hbWUgVCAKLQotI2RlZmluZSBCT09TVF9URU1QTEFURURfU1RSRUFN
X0FSR1NfQUxMT0MoRSxULEEpIFwKLSAgICB0eXBlbmFtZSBFICwgdHlwZW5hbWUgVCAsIHR5cGVu
YW1lIEEgCi0KLSNkZWZpbmUgQk9PU1RfVEVNUExBVEVEX1NUUkVBTV9DT01NQSAgICAgICAgLAot
Ci0jZGVmaW5lIEJPT1NUX1RFTVBMQVRFRF9TVFJFQU1fRUxFTShFKSAgICAgIEUKLSNkZWZpbmUg
Qk9PU1RfVEVNUExBVEVEX1NUUkVBTV9UUkFJVFMoVCkgICAgVAotI2RlZmluZSBCT09TVF9URU1Q
TEFURURfU1RSRUFNX0FMTE9DKEEpICAgICBBCi0KLSNkZWZpbmUgQk9PU1RfVEVNUExBVEVEX1NU
UkVBTShYLEUsVCkgXAotICAgIEJPT1NUX0pPSU4oc3RkOjpiYXNpY18sWCk8IEUgLCBUID4KLQot
I2RlZmluZSBCT09TVF9URU1QTEFURURfU1RSRUFNX1dJVEhfQUxMT0MoWCxFLFQsQSkgXAotICAg
IEJPT1NUX0pPSU4oc3RkOjpiYXNpY18sWCk8IEUgLCBUICwgQSA+Ci0KLSNlbHNlIC8vIGRlZmlu
ZWQoQk9PU1RfTk9fU1REX0xPQ0FMRSkKLQotI2RlZmluZSBCT09TVF9URU1QTEFURURfU1RSRUFN
X1RFTVBMQVRFKEUsVCkgLyoqLwotCi0jZGVmaW5lIEJPT1NUX1RFTVBMQVRFRF9TVFJFQU1fVEVN
UExBVEVfQUxMT0MoRSxULEEpIC8qKi8KLQotI2RlZmluZSBCT09TVF9URU1QTEFURURfU1RSRUFN
X0FSR1MoRSxUKSAvKiovCi0KLSNkZWZpbmUgQk9PU1RfVEVNUExBVEVEX1NUUkVBTV9BUkdTX0FM
TE9DKEUsVCxBKSAvKiovCi0KLSNkZWZpbmUgQk9PU1RfVEVNUExBVEVEX1NUUkVBTV9DT01NQSAg
ICAgICAgLyoqLwotCi0jZGVmaW5lIEJPT1NUX1RFTVBMQVRFRF9TVFJFQU1fRUxFTShFKSAgICAg
IGNoYXIKLSNkZWZpbmUgQk9PU1RfVEVNUExBVEVEX1NUUkVBTV9UUkFJVFMoVCkgICAgc3RkOjpj
aGFyX3RyYWl0czxjaGFyPgotI2RlZmluZSBCT09TVF9URU1QTEFURURfU1RSRUFNX0FMTE9DKEEp
ICAgICBzdGQ6OmFsbG9jYXRvcjxjaGFyPgotCi0jZGVmaW5lIEJPT1NUX1RFTVBMQVRFRF9TVFJF
QU0oWCxFLFQpIFwKLSAgICBzdGQ6OlgKLQotI2RlZmluZSBCT09TVF9URU1QTEFURURfU1RSRUFN
X1dJVEhfQUxMT0MoWCxFLFQsQSkgXAotICAgIHN0ZDo6WAotCi0jZW5kaWYgLy8gQk9PU1RfTk9f
U1REX0xPQ0FMRQotCi0jZW5kaWYgLy8gQk9PU1RfREVUQUlMX1RFTVBMQVRFRF9TVFJFQU1TX0hQ
UApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
ZGV0YWlsL3dvcmthcm91bmQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvZGV0YWlsL3dvcmthcm91bmQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3NzI3YWFmMWRlYTJkMWU0ZmQzZWM3NmQxMDkwODFmMTFlMThlNDA5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI3MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgRGF2aWQgQWJyYWhhbXMgMjAwMi4KLS8v
IERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4gKFNlZQotLy8gYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQK
LS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSNpZm5kZWYgV09SS0FS
T1VORF9EV0EyMDAyMTI2X0hQUAotIyBkZWZpbmUgV09SS0FST1VORF9EV0EyMDAyMTI2X0hQUAot
Ci0vLyBDb21waWxlci9saWJyYXJ5IHZlcnNpb24gd29ya2Fyb3VuZCBtYWNybwotLy8KLS8vIFVz
YWdlOgotLy8KLS8vICAgICAjaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8IDEzMDAp
Ci0vLyAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgZVZDNCBhbmQgVkM2Ci0vLyAgICAgICAgLi4u
IC8vIHdvcmthcm91bmQgY29kZSBoZXJlCi0vLyAgICAgI2VuZGlmCi0vLwotLy8gV2hlbiBCT09T
VF9TVFJJQ1RfQ09ORklHIGlzIGRlZmluZWQsIGV4cGFuZHMgdG8gMC4gT3RoZXJ3aXNlLCB0aGUK
LS8vIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgdW5kZWZpbmVkIG9yIGV4cGFuZCB0byBhIG51bWVy
aWMKLS8vIHZhbHVlLiBUaGUgYWJvdmUgZXhwYW5kcyB0bzoKLS8vCi0vLyAgICAgKEJPT1NUX01T
VkMpICE9IDAgJiYgKEJPT1NUX01TVkMpIDwgMTMwMAotLy8KLS8vIFdoZW4gdXNlZCBmb3Igd29y
a2Fyb3VuZHMgdGhhdCBhcHBseSB0byB0aGUgbGF0ZXN0IGtub3duIHZlcnNpb24gCi0vLyBhbmQg
YWxsIGVhcmxpZXIgdmVyc2lvbnMgb2YgYSBjb21waWxlciwgdGhlIGZvbGxvd2luZyBjb252ZW50
aW9uIAotLy8gc2hvdWxkIGJlIG9ic2VydmVkOgotLy8KLS8vICAgICAjaWYgQk9PU1RfV09SS0FS
T1VORChCT09TVF9NU1ZDLCBCT09TVF9URVNURURfQVQoMTMwMSkpCi0vLwotLy8gVGhlIHZlcnNp
b24gbnVtYmVyIGluIHRoaXMgY2FzZSBjb3JyZXNwb25kcyB0byB0aGUgbGFzdCB2ZXJzaW9uIGlu
Ci0vLyB3aGljaCB0aGUgd29ya2Fyb3VuZCB3YXMga25vd24gdG8gaGF2ZSBiZWVuIHJlcXVpcmVk
LiBXaGVuCi0vLyBCT09TVF9ERVRFQ1RfT1VUREFURURfV09SS0FST1VORFMgaXMgbm90IHRoZSBk
ZWZpbmVkLCB0aGUgbWFjcm8KLS8vIEJPT1NUX1RFU1RFRF9BVCh4KSBleHBhbmRzIHRvICIhPSAw
Iiwgd2hpY2ggZWZmZWN0aXZlbHkgYWN0aXZhdGVzCi0vLyB0aGUgd29ya2Fyb3VuZCBmb3IgYW55
IHZlcnNpb24gb2YgdGhlIGNvbXBpbGVyLiBXaGVuCi0vLyBCT09TVF9ERVRFQ1RfT1VUREFURURf
V09SS0FST1VORFMgaXMgZGVmaW5lZCwgYSBjb21waWxlciB3YXJuaW5nIG9yCi0vLyBlcnJvciB3
aWxsIGJlIGlzc3VlZCBpZiB0aGUgY29tcGlsZXIgdmVyc2lvbiBleGNlZWRzIHRoZSBhcmd1bWVu
dAotLy8gdG8gQk9PU1RfVEVTVEVEX0FUKCkuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvY2F0ZSB3
b3JrYXJvdW5kcyB3aGljaAotLy8gbWF5IGJlIG9ic29sZXRlZCBieSBuZXdlciB2ZXJzaW9ucy4K
LQotIyBpZm5kZWYgQk9PU1RfU1RSSUNUX0NPTkZJRwotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmln
LmhwcD4KLQotI2lmbmRlZiBfX0JPUkxBTkRDX18KLSNkZWZpbmUgX19CT1JMQU5EQ19fX1dPUktB
Uk9VTkRfR1VBUkQgMQotI2Vsc2UKLSNkZWZpbmUgX19CT1JMQU5EQ19fX1dPUktBUk9VTkRfR1VB
UkQgMAotI2VuZGlmCi0jaWZuZGVmIF9fQ09ERUdFQVJDX18KLSNkZWZpbmUgX19DT0RFR0VBUkNf
X19XT1JLQVJPVU5EX0dVQVJEIDEKLSNlbHNlCi0jZGVmaW5lIF9fQ09ERUdFQVJDX19fV09SS0FS
T1VORF9HVUFSRCAwCi0jZW5kaWYKLSNpZm5kZWYgX01TQ19WRVIKLSNkZWZpbmUgX01TQ19WRVJf
V09SS0FST1VORF9HVUFSRCAxCi0jZWxzZQotI2RlZmluZSBfTVNDX1ZFUl9XT1JLQVJPVU5EX0dV
QVJEIDAKLSNlbmRpZgotI2lmbmRlZiBfTVNDX0ZVTExfVkVSCi0jZGVmaW5lIF9NU0NfRlVMTF9W
RVJfV09SS0FST1VORF9HVUFSRCAxCi0jZWxzZQotI2RlZmluZSBfTVNDX0ZVTExfVkVSX1dPUktB
Uk9VTkRfR1VBUkQgMAotI2VuZGlmCi0jaWZuZGVmIEJPT1NUX01TVkMKLSNkZWZpbmUgQk9PU1Rf
TVNWQ19XT1JLQVJPVU5EX0dVQVJEIDEKLSNlbHNlCi0jZGVmaW5lIEJPT1NUX01TVkNfV09SS0FS
T1VORF9HVUFSRCAwCi0jZW5kaWYKLSNpZm5kZWYgQk9PU1RfTVNWQ19GVUxMX1ZFUgotI2RlZmlu
ZSBCT09TVF9NU1ZDX0ZVTExfVkVSX1dPUktBUk9VTkRfR1VBUkQgMQotI2Vsc2UKLSNkZWZpbmUg
Qk9PU1RfTVNWQ19GVUxMX1ZFUl9XT1JLQVJPVU5EX0dVQVJEIDAKLSNlbmRpZgotI2lmbmRlZiBf
X0dOVUNfXwotI2RlZmluZSBfX0dOVUNfX19XT1JLQVJPVU5EX0dVQVJEIDEKLSNlbHNlCi0jZGVm
aW5lIF9fR05VQ19fX1dPUktBUk9VTkRfR1VBUkQgMAotI2VuZGlmCi0jaWZuZGVmIF9fR05VQ19N
SU5PUl9fCi0jZGVmaW5lIF9fR05VQ19NSU5PUl9fX1dPUktBUk9VTkRfR1VBUkQgMQotI2Vsc2UK
LSNkZWZpbmUgX19HTlVDX01JTk9SX19fV09SS0FST1VORF9HVUFSRCAwCi0jZW5kaWYKLSNpZm5k
ZWYgX19HTlVDX1BBVENITEVWRUxfXwotI2RlZmluZSBfX0dOVUNfUEFUQ0hMRVZFTF9fX1dPUktB
Uk9VTkRfR1VBUkQgMQotI2Vsc2UKLSNkZWZpbmUgX19HTlVDX1BBVENITEVWRUxfX19XT1JLQVJP
VU5EX0dVQVJEIDAKLSNlbmRpZgotI2lmbmRlZiBCT09TVF9HQ0MKLSNkZWZpbmUgQk9PU1RfR0ND
X1dPUktBUk9VTkRfR1VBUkQgMQotI2Vsc2UKLSNkZWZpbmUgQk9PU1RfR0NDX1dPUktBUk9VTkRf
R1VBUkQgMAotI2VuZGlmCi0jaWZuZGVmIF9fSUJNQ1BQX18KLSNkZWZpbmUgX19JQk1DUFBfX19X
T1JLQVJPVU5EX0dVQVJEIDEKLSNlbHNlCi0jZGVmaW5lIF9fSUJNQ1BQX19fV09SS0FST1VORF9H
VUFSRCAwCi0jZW5kaWYKLSNpZm5kZWYgX19TVU5QUk9fQ0MKLSNkZWZpbmUgX19TVU5QUk9fQ0Nf
V09SS0FST1VORF9HVUFSRCAxCi0jZWxzZQotI2RlZmluZSBfX1NVTlBST19DQ19XT1JLQVJPVU5E
X0dVQVJEIDAKLSNlbmRpZgotI2lmbmRlZiBfX0RFQ0NYWF9WRVIKLSNkZWZpbmUgX19ERUNDWFhf
VkVSX1dPUktBUk9VTkRfR1VBUkQgMQotI2Vsc2UKLSNkZWZpbmUgX19ERUNDWFhfVkVSX1dPUktB
Uk9VTkRfR1VBUkQgMAotI2VuZGlmCi0jaWZuZGVmIF9fTVdFUktTX18KLSNkZWZpbmUgX19NV0VS
S1NfX19XT1JLQVJPVU5EX0dVQVJEIDEKLSNlbHNlCi0jZGVmaW5lIF9fTVdFUktTX19fV09SS0FS
T1VORF9HVUFSRCAwCi0jZW5kaWYKLSNpZm5kZWYgX19FREdfXwotI2RlZmluZSBfX0VER19fX1dP
UktBUk9VTkRfR1VBUkQgMQotI2Vsc2UKLSNkZWZpbmUgX19FREdfX19XT1JLQVJPVU5EX0dVQVJE
IDAKLSNlbmRpZgotI2lmbmRlZiBfX0VER19WRVJTSU9OX18KLSNkZWZpbmUgX19FREdfVkVSU0lP
Tl9fX1dPUktBUk9VTkRfR1VBUkQgMQotI2Vsc2UKLSNkZWZpbmUgX19FREdfVkVSU0lPTl9fX1dP
UktBUk9VTkRfR1VBUkQgMAotI2VuZGlmCi0jaWZuZGVmIF9fSFBfYUNDCi0jZGVmaW5lIF9fSFBf
YUNDX1dPUktBUk9VTkRfR1VBUkQgMQotI2Vsc2UKLSNkZWZpbmUgX19IUF9hQ0NfV09SS0FST1VO
RF9HVUFSRCAwCi0jZW5kaWYKLSNpZm5kZWYgX19ocHhzdGQ5OAotI2RlZmluZSBfX2hweHN0ZDk4
X1dPUktBUk9VTkRfR1VBUkQgMQotI2Vsc2UKLSNkZWZpbmUgX19ocHhzdGQ5OF9XT1JLQVJPVU5E
X0dVQVJEIDAKLSNlbmRpZgotI2lmbmRlZiBfQ1JBWUMKLSNkZWZpbmUgX0NSQVlDX1dPUktBUk9V
TkRfR1VBUkQgMQotI2Vsc2UKLSNkZWZpbmUgX0NSQVlDX1dPUktBUk9VTkRfR1VBUkQgMAotI2Vu
ZGlmCi0jaWZuZGVmIF9fRE1DX18KLSNkZWZpbmUgX19ETUNfX19XT1JLQVJPVU5EX0dVQVJEIDEK
LSNlbHNlCi0jZGVmaW5lIF9fRE1DX19fV09SS0FST1VORF9HVUFSRCAwCi0jZW5kaWYKLSNpZm5k
ZWYgTVBXX0NQTFVTCi0jZGVmaW5lIE1QV19DUExVU19XT1JLQVJPVU5EX0dVQVJEIDEKLSNlbHNl
Ci0jZGVmaW5lIE1QV19DUExVU19XT1JLQVJPVU5EX0dVQVJEIDAKLSNlbmRpZgotI2lmbmRlZiBf
X0NPTU9fXwotI2RlZmluZSBfX0NPTU9fX19XT1JLQVJPVU5EX0dVQVJEIDEKLSNlbHNlCi0jZGVm
aW5lIF9fQ09NT19fX1dPUktBUk9VTkRfR1VBUkQgMAotI2VuZGlmCi0jaWZuZGVmIF9fQ09NT19W
RVJTSU9OX18KLSNkZWZpbmUgX19DT01PX1ZFUlNJT05fX19XT1JLQVJPVU5EX0dVQVJEIDEKLSNl
bHNlCi0jZGVmaW5lIF9fQ09NT19WRVJTSU9OX19fV09SS0FST1VORF9HVUFSRCAwCi0jZW5kaWYK
LSNpZm5kZWYgX19JTlRFTF9DT01QSUxFUgotI2RlZmluZSBfX0lOVEVMX0NPTVBJTEVSX1dPUktB
Uk9VTkRfR1VBUkQgMQotI2Vsc2UKLSNkZWZpbmUgX19JTlRFTF9DT01QSUxFUl9XT1JLQVJPVU5E
X0dVQVJEIDAKLSNlbmRpZgotI2lmbmRlZiBfX0lDTAotI2RlZmluZSBfX0lDTF9XT1JLQVJPVU5E
X0dVQVJEIDEKLSNlbHNlCi0jZGVmaW5lIF9fSUNMX1dPUktBUk9VTkRfR1VBUkQgMAotI2VuZGlm
Ci0jaWZuZGVmIF9DT01QSUxFUl9WRVJTSU9OCi0jZGVmaW5lIF9DT01QSUxFUl9WRVJTSU9OX1dP
UktBUk9VTkRfR1VBUkQgMQotI2Vsc2UKLSNkZWZpbmUgX0NPTVBJTEVSX1ZFUlNJT05fV09SS0FS
T1VORF9HVUFSRCAwCi0jZW5kaWYKLQotI2lmbmRlZiBfUldTVERfVkVSCi0jZGVmaW5lIF9SV1NU
RF9WRVJfV09SS0FST1VORF9HVUFSRCAxCi0jZWxzZQotI2RlZmluZSBfUldTVERfVkVSX1dPUktB
Uk9VTkRfR1VBUkQgMAotI2VuZGlmCi0jaWZuZGVmIEJPT1NUX1JXU1REX1ZFUgotI2RlZmluZSBC
T09TVF9SV1NURF9WRVJfV09SS0FST1VORF9HVUFSRCAxCi0jZWxzZQotI2RlZmluZSBCT09TVF9S
V1NURF9WRVJfV09SS0FST1VORF9HVUFSRCAwCi0jZW5kaWYKLSNpZm5kZWYgX19HTElCQ1BQX18K
LSNkZWZpbmUgX19HTElCQ1BQX19fV09SS0FST1VORF9HVUFSRCAxCi0jZWxzZQotI2RlZmluZSBf
X0dMSUJDUFBfX19XT1JLQVJPVU5EX0dVQVJEIDAKLSNlbmRpZgotI2lmbmRlZiBfR0xJQkNYWF9V
U0VfQzk5X0ZQX01BQ1JPU19EWU5BTUlDCi0jZGVmaW5lIF9HTElCQ1hYX1VTRV9DOTlfRlBfTUFD
Uk9TX0RZTkFNSUNfV09SS0FST1VORF9HVUFSRCAxCi0jZWxzZQotI2RlZmluZSBfR0xJQkNYWF9V
U0VfQzk5X0ZQX01BQ1JPU19EWU5BTUlDX1dPUktBUk9VTkRfR1VBUkQgMAotI2VuZGlmCi0jaWZu
ZGVmIF9fU0dJX1NUTF9QT1JUCi0jZGVmaW5lIF9fU0dJX1NUTF9QT1JUX1dPUktBUk9VTkRfR1VB
UkQgMQotI2Vsc2UKLSNkZWZpbmUgX19TR0lfU1RMX1BPUlRfV09SS0FST1VORF9HVUFSRCAwCi0j
ZW5kaWYKLSNpZm5kZWYgX1NUTFBPUlRfVkVSU0lPTgotI2RlZmluZSBfU1RMUE9SVF9WRVJTSU9O
X1dPUktBUk9VTkRfR1VBUkQgMQotI2Vsc2UKLSNkZWZpbmUgX1NUTFBPUlRfVkVSU0lPTl9XT1JL
QVJPVU5EX0dVQVJEIDAKLSNlbmRpZgotI2lmbmRlZiBfX0xJQkNPTU9fVkVSU0lPTl9fCi0jZGVm
aW5lIF9fTElCQ09NT19WRVJTSU9OX19fV09SS0FST1VORF9HVUFSRCAxCi0jZWxzZQotI2RlZmlu
ZSBfX0xJQkNPTU9fVkVSU0lPTl9fX1dPUktBUk9VTkRfR1VBUkQgMAotI2VuZGlmCi0jaWZuZGVm
IF9DUFBMSUJfVkVSCi0jZGVmaW5lIF9DUFBMSUJfVkVSX1dPUktBUk9VTkRfR1VBUkQgMQotI2Vs
c2UKLSNkZWZpbmUgX0NQUExJQl9WRVJfV09SS0FST1VORF9HVUFSRCAwCi0jZW5kaWYKLQotI2lm
bmRlZiBCT09TVF9JTlRFTF9DWFhfVkVSU0lPTgotI2RlZmluZSBCT09TVF9JTlRFTF9DWFhfVkVS
U0lPTl9XT1JLQVJPVU5EX0dVQVJEIDEKLSNlbHNlCi0jZGVmaW5lIEJPT1NUX0lOVEVMX0NYWF9W
RVJTSU9OX1dPUktBUk9VTkRfR1VBUkQgMAotI2VuZGlmCi0jaWZuZGVmIEJPT1NUX0lOVEVMX1dJ
TgotI2RlZmluZSBCT09TVF9JTlRFTF9XSU5fV09SS0FST1VORF9HVUFSRCAxCi0jZWxzZQotI2Rl
ZmluZSBCT09TVF9JTlRFTF9XSU5fV09SS0FST1VORF9HVUFSRCAwCi0jZW5kaWYKLSNpZm5kZWYg
Qk9PU1RfRElOS1VNV0FSRV9TVERMSUIKLSNkZWZpbmUgQk9PU1RfRElOS1VNV0FSRV9TVERMSUJf
V09SS0FST1VORF9HVUFSRCAxCi0jZWxzZQotI2RlZmluZSBCT09TVF9ESU5LVU1XQVJFX1NURExJ
Ql9XT1JLQVJPVU5EX0dVQVJEIDAKLSNlbmRpZgotI2lmbmRlZiBCT09TVF9JTlRFTAotI2RlZmlu
ZSBCT09TVF9JTlRFTF9XT1JLQVJPVU5EX0dVQVJEIDEKLSNlbHNlCi0jZGVmaW5lIEJPT1NUX0lO
VEVMX1dPUktBUk9VTkRfR1VBUkQgMAotI2VuZGlmCi0vLyBBbHdheXMgZGVmaW5lIHRvIHplcm8s
IGlmIGl0J3MgdXNlZCBpdCdsbCBiZSBkZWZpbmVkIG15IE1QTDoKLSNkZWZpbmUgQk9PU1RfTVBM
X0NGR19HQ0NfV09SS0FST1VORF9HVUFSRCAwCi0KLSMgIGRlZmluZSBCT09TVF9XT1JLQVJPVU5E
KHN5bWJvbCwgdGVzdCkgICAgICAgICAgICAgICAgXAotICAgICAgICAgKChzeW1ib2wgIyMgX1dP
UktBUk9VTkRfR1VBUkQgKyAwID09IDApICYmICAgICBcCi0gICAgICAgICAoc3ltYm9sICE9IDAp
ICYmICgxICUgKCggKHN5bWJvbCB0ZXN0KSApICsgMSkpKQotLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBeIF4gICAgICAgICAgIF4gXgotLy8gVGhlIGV4dHJhIGxldmVsIG9mIHBhcmVu
dGhlc2lzIG5lc3RpbmcgYWJvdmUsIGFsb25nIHdpdGggdGhlCi0vLyBCT09TVF9PUEVOX1BBUkVO
IGluZGlyZWN0aW9uIGJlbG93LCBpcyByZXF1aXJlZCB0byBzYXRpc2Z5IHRoZQotLy8gYnJva2Vu
IHByZXByb2Nlc3NvciBpbiBNV0NXIDguMyBhbmQgZWFybGllci4KLS8vCi0vLyBUaGUgYmFzaWMg
bWVjaGFuaXNtIHdvcmtzIGFzIGZvbGxvd3M6Ci0vLyAgICAgIChzeW1ib2wgdGVzdCkgKyAxICAg
ICAgICA9PiAgIGlmIChzeW1ib2wgdGVzdCkgdGhlbiAyIGVsc2UgMQotLy8gICAgICAxICUgKChz
eW1ib2wgdGVzdCkgKyAxKSAgPT4gICBpZiAoc3ltYm9sIHRlc3QpIHRoZW4gMSBlbHNlIDAKLS8v
Ci0vLyBUaGUgY29tcGxpY2F0aW9uIHdpdGggJSBpcyBmb3IgY29vcGVyYXRpb24gd2l0aCBCT09T
VF9URVNURURfQVQoKS4KLS8vIFdoZW4gInRlc3QiIGlzIEJPT1NUX1RFU1RFRF9BVCh4KSBhbmQK
LS8vIEJPT1NUX0RFVEVDVF9PVVREQVRFRF9XT1JLQVJPVU5EUyBpcyAjZGVmaW5lZCwKLS8vCi0v
LyAgICAgIHN5bWJvbCB0ZXN0ICAgICAgICAgICAgICA9PiAgIGlmIChzeW1ib2wgPD0geCkgdGhl
biAxIGVsc2UgLTEKLS8vICAgICAgKHN5bWJvbCB0ZXN0KSArIDEgICAgICAgID0+ICAgaWYgKHN5
bWJvbCA8PSB4KSB0aGVuIDIgZWxzZSAwCi0vLyAgICAgIDEgJSAoKHN5bWJvbCB0ZXN0KSArIDEp
ICA9PiAgIGlmIChzeW1ib2wgPD0geCkgdGhlbiAxIGVsc2UgZGl2aWRlLWJ5LXplcm8KLS8vCi0K
LSMgIGlmZGVmIEJPT1NUX0RFVEVDVF9PVVREQVRFRF9XT1JLQVJPVU5EUwotIyAgIGRlZmluZSBC
T09TVF9PUEVOX1BBUkVOICgKLSMgICBkZWZpbmUgQk9PU1RfVEVTVEVEX0FUKHZhbHVlKSAgPiB2
YWx1ZSkgPygtMSk6IEJPT1NUX09QRU5fUEFSRU4gMQotIyAgZWxzZQotIyAgIGRlZmluZSBCT09T
VF9URVNURURfQVQodmFsdWUpICE9ICgodmFsdWUpLSh2YWx1ZSkpCi0jICBlbmRpZgotCi0jIGVs
c2UKLQotIyAgZGVmaW5lIEJPT1NUX1dPUktBUk9VTkQoc3ltYm9sLCB0ZXN0KSAwCi0KLSMgZW5k
aWYgCi0KLSNlbmRpZiAvLyBXT1JLQVJPVU5EX0RXQTIwMDIxMjZfSFBQCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9leGNlcHRpb24vZXhjZXB0
aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2V4Y2Vw
dGlvbi9leGNlcHRpb24uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGZkYWY5
ZTU1MjFjNzNlYWNiZmU5NThhNDhmNGExMmI1NTNiZmEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L2V4Y2VwdGlvbi9leGNlcHRpb24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTIx
ICswLDAgQEAKLS8vQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgRW1pbCBEb3RjaGV2c2tpIGFuZCBS
ZXZlcmdlIFN0dWRpb3MsIEluYy4KLQotLy9EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0vL2ZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAu
dHh0KQotCi0jaWZuZGVmIFVVSURfMjc0REEzNjYwMDRFMTFEQ0IxRERGRTJFNTZEODk1OTMKLSNk
ZWZpbmUgVVVJRF8yNzREQTM2NjAwNEUxMURDQjFEREZFMkU1NkQ4OTU5MwotI2lmIChfX0dOVUNf
XyoxMDArX19HTlVDX01JTk9SX18+MzAxKSAmJiAhZGVmaW5lZChCT09TVF9FWENFUFRJT05fRU5B
QkxFX1dBUk5JTkdTKQotI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgotI2VuZGlmCi0jaWYgZGVm
aW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoQk9PU1RfRVhDRVBUSU9OX0VOQUJMRV9XQVJOSU5H
UykKLSNwcmFnbWEgd2FybmluZyhwdXNoLDEpCi0jZW5kaWYKLQotI2lmZGVmIEJPT1NUX0VYQ0VQ
VElPTl9NSU5JX0JPT1NUCi0jaW5jbHVkZSAgPG1lbW9yeT4KLW5hbWVzcGFjZSBib29zdCB7IG5h
bWVzcGFjZSBleGNlcHRpb25fZGV0YWlsIHsgdXNpbmcgc3RkOjpzaGFyZWRfcHRyOyB9IH0KLSNl
bHNlCi1uYW1lc3BhY2UgYm9vc3QgeyB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3Mgc2hhcmVkX3B0
cjsgfTsKLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBleGNlcHRpb25fZGV0YWlsIHsgdXNp
bmcgYm9vc3Q6OnNoYXJlZF9wdHI7IH0gfQotI2VuZGlmCi0KLW5hbWVzcGFjZQotYm9vc3QKLSAg
ICB7Ci0gICAgbmFtZXNwYWNlCi0gICAgZXhjZXB0aW9uX2RldGFpbAotICAgICAgICB7Ci0gICAg
ICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgICAgICBjbGFzcwotICAgICAgICByZWZjb3VudF9w
dHIKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHB1YmxpYzoKLQotICAgICAgICAgICAgcmVm
Y291bnRfcHRyKCk6Ci0gICAgICAgICAgICAgICAgcHhfKDApCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfnJlZmNvdW50X3B0cigpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHJlZmNvdW50X3B0ciggcmVmY291bnRfcHRyIGNvbnN0ICYgeCApOgot
ICAgICAgICAgICAgICAgIHB4Xyh4LnB4XykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgYWRkX3JlZigpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmVmY291
bnRfcHRyICYKLSAgICAgICAgICAgIG9wZXJhdG9yPSggcmVmY291bnRfcHRyIGNvbnN0ICYgeCAp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFkb3B0KHgucHhfKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB2b2lkCi0gICAgICAgICAgICBhZG9wdCggVCAqIHB4ICkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIHB4Xz1weDsKLSAgICAg
ICAgICAgICAgICBhZGRfcmVmKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBU
ICoKLSAgICAgICAgICAgIGdldCgpIGNvbnN0Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBweF87Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcml2
YXRlOgotCi0gICAgICAgICAgICBUICogcHhfOwotCi0gICAgICAgICAgICB2b2lkCi0gICAgICAg
ICAgICBhZGRfcmVmKCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoIHB4
XyApCi0gICAgICAgICAgICAgICAgICAgIHB4Xy0+YWRkX3JlZigpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdm9pZAotICAgICAgICAgICAgcmVsZWFzZSgpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmKCBweF8gJiYgcHhfLT5yZWxlYXNlKCkgKQotICAg
ICAgICAgICAgICAgICAgICBweF89MDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
OwotICAgICAgICB9Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotICAgIHRlbXBsYXRlIDxjbGFz
cyBUYWcsY2xhc3MgVD4KLSAgICBjbGFzcyBlcnJvcl9pbmZvOwotCi0gICAgdHlwZWRlZiBlcnJv
cl9pbmZvPHN0cnVjdCB0aHJvd19mdW5jdGlvbl8sY2hhciBjb25zdCAqPiB0aHJvd19mdW5jdGlv
bjsKLSAgICB0eXBlZGVmIGVycm9yX2luZm88c3RydWN0IHRocm93X2ZpbGVfLGNoYXIgY29uc3Qg
Kj4gdGhyb3dfZmlsZTsKLSAgICB0eXBlZGVmIGVycm9yX2luZm88c3RydWN0IHRocm93X2xpbmVf
LGludD4gdGhyb3dfbGluZTsKLQotICAgIHRlbXBsYXRlIDw+Ci0gICAgY2xhc3MKLSAgICBlcnJv
cl9pbmZvPHRocm93X2Z1bmN0aW9uXyxjaGFyIGNvbnN0ICo+Ci0gICAgICAgIHsKLSAgICAgICAg
cHVibGljOgotICAgICAgICB0eXBlZGVmIGNoYXIgY29uc3QgKiB2YWx1ZV90eXBlOwotICAgICAg
ICB2YWx1ZV90eXBlIHZfOwotICAgICAgICBleHBsaWNpdAotICAgICAgICBlcnJvcl9pbmZvKCB2
YWx1ZV90eXBlIHYgKToKLSAgICAgICAgICAgIHZfKHYpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICB0ZW1wbGF0ZSA8PgotICAgIGNsYXNzCi0gICAgZXJy
b3JfaW5mbzx0aHJvd19maWxlXyxjaGFyIGNvbnN0ICo+Ci0gICAgICAgIHsKLSAgICAgICAgcHVi
bGljOgotICAgICAgICB0eXBlZGVmIGNoYXIgY29uc3QgKiB2YWx1ZV90eXBlOwotICAgICAgICB2
YWx1ZV90eXBlIHZfOwotICAgICAgICBleHBsaWNpdAotICAgICAgICBlcnJvcl9pbmZvKCB2YWx1
ZV90eXBlIHYgKToKLSAgICAgICAgICAgIHZfKHYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH07Ci0KLSAgICB0ZW1wbGF0ZSA8PgotICAgIGNsYXNzCi0gICAgZXJyb3Jf
aW5mbzx0aHJvd19saW5lXyxpbnQ+Ci0gICAgICAgIHsKLSAgICAgICAgcHVibGljOgotICAgICAg
ICB0eXBlZGVmIGludCB2YWx1ZV90eXBlOwotICAgICAgICB2YWx1ZV90eXBlIHZfOwotICAgICAg
ICBleHBsaWNpdAotICAgICAgICBlcnJvcl9pbmZvKCB2YWx1ZV90eXBlIHYgKToKLSAgICAgICAg
ICAgIHZfKHYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSNp
ZiBkZWZpbmVkKF9fR05VQ19fKQotIyBpZiAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1Jf
XyA+PSAxKSB8fCAoX19HTlVDX18gPiA0KQotIyAgcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2gg
KGRlZmF1bHQpCi0jIGVuZGlmCi0jZW5kaWYKLSAgICBjbGFzcyBleGNlcHRpb247Ci0jaWYgZGVm
aW5lZChfX0dOVUNfXykKLSMgaWYgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0g
MSkgfHwgKF9fR05VQ19fID4gNCkKLSMgIHByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKLSMgZW5k
aWYKLSNlbmRpZgotCi0gICAgbmFtZXNwYWNlCi0gICAgZXhjZXB0aW9uX2RldGFpbAotICAgICAg
ICB7Ci0gICAgICAgIGNsYXNzIGVycm9yX2luZm9fYmFzZTsKLSAgICAgICAgc3RydWN0IHR5cGVf
aW5mb187Ci0KLSAgICAgICAgc3RydWN0Ci0gICAgICAgIGVycm9yX2luZm9fY29udGFpbmVyCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICB2aXJ0dWFsIGNoYXIgY29uc3QgKiBkaWFnbm9zdGlj
X2luZm9ybWF0aW9uKCBjaGFyIGNvbnN0ICogKSBjb25zdCA9IDA7Ci0gICAgICAgICAgICB2aXJ0
dWFsIHNoYXJlZF9wdHI8ZXJyb3JfaW5mb19iYXNlPiBnZXQoIHR5cGVfaW5mb18gY29uc3QgJiAp
IGNvbnN0ID0gMDsKLSAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXQoIHNoYXJlZF9wdHI8ZXJy
b3JfaW5mb19iYXNlPiBjb25zdCAmLCB0eXBlX2luZm9fIGNvbnN0ICYgKSA9IDA7Ci0gICAgICAg
ICAgICB2aXJ0dWFsIHZvaWQgYWRkX3JlZigpIGNvbnN0ID0gMDsKLSAgICAgICAgICAgIHZpcnR1
YWwgYm9vbCByZWxlYXNlKCkgY29uc3QgPSAwOwotICAgICAgICAgICAgdmlydHVhbCByZWZjb3Vu
dF9wdHI8ZXhjZXB0aW9uX2RldGFpbDo6ZXJyb3JfaW5mb19jb250YWluZXI+IGNsb25lKCkgY29u
c3QgPSAwOwotCi0gICAgICAgICAgICBwcm90ZWN0ZWQ6Ci0KLSAgICAgICAgICAgIH5lcnJvcl9p
bmZvX2NvbnRhaW5lcigpIHRocm93KCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfTsKLQotICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3M+Ci0gICAgICAg
IHN0cnVjdCBnZXRfaW5mbzsKLQotICAgICAgICB0ZW1wbGF0ZSA8PgotICAgICAgICBzdHJ1Y3Qg
Z2V0X2luZm88dGhyb3dfZnVuY3Rpb24+OwotCi0gICAgICAgIHRlbXBsYXRlIDw+Ci0gICAgICAg
IHN0cnVjdCBnZXRfaW5mbzx0aHJvd19maWxlPjsKLQotICAgICAgICB0ZW1wbGF0ZSA8PgotICAg
ICAgICBzdHJ1Y3QgZ2V0X2luZm88dGhyb3dfbGluZT47Ci0KLSAgICAgICAgdGVtcGxhdGUgPGNs
YXNzPgotICAgICAgICBzdHJ1Y3Qgc2V0X2luZm9fcnY7Ci0KLSAgICAgICAgdGVtcGxhdGUgPD4K
LSAgICAgICAgc3RydWN0IHNldF9pbmZvX3J2PHRocm93X2Z1bmN0aW9uPjsKLQotICAgICAgICB0
ZW1wbGF0ZSA8PgotICAgICAgICBzdHJ1Y3Qgc2V0X2luZm9fcnY8dGhyb3dfZmlsZT47Ci0KLSAg
ICAgICAgdGVtcGxhdGUgPD4KLSAgICAgICAgc3RydWN0IHNldF9pbmZvX3J2PHRocm93X2xpbmU+
OwotCi0gICAgICAgIGNoYXIgY29uc3QgKiBnZXRfZGlhZ25vc3RpY19pbmZvcm1hdGlvbiggZXhj
ZXB0aW9uIGNvbnN0ICYsIGNoYXIgY29uc3QgKiApOwotCi0gICAgICAgIHZvaWQgY29weV9ib29z
dF9leGNlcHRpb24oIGV4Y2VwdGlvbiAqLCBleGNlcHRpb24gY29uc3QgKiApOwotCi0gICAgICAg
IHRlbXBsYXRlIDxjbGFzcyBFLGNsYXNzIFRhZyxjbGFzcyBUPgotICAgICAgICBFIGNvbnN0ICYg
c2V0X2luZm8oIEUgY29uc3QgJiwgZXJyb3JfaW5mbzxUYWcsVD4gY29uc3QgJiApOwotCi0gICAg
ICAgIHRlbXBsYXRlIDxjbGFzcyBFPgotICAgICAgICBFIGNvbnN0ICYgc2V0X2luZm8oIEUgY29u
c3QgJiwgdGhyb3dfZnVuY3Rpb24gY29uc3QgJiApOwotCi0gICAgICAgIHRlbXBsYXRlIDxjbGFz
cyBFPgotICAgICAgICBFIGNvbnN0ICYgc2V0X2luZm8oIEUgY29uc3QgJiwgdGhyb3dfZmlsZSBj
b25zdCAmICk7Ci0KLSAgICAgICAgdGVtcGxhdGUgPGNsYXNzIEU+Ci0gICAgICAgIEUgY29uc3Qg
JiBzZXRfaW5mbyggRSBjb25zdCAmLCB0aHJvd19saW5lIGNvbnN0ICYgKTsKLSAgICAgICAgfQot
Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykKLSMgaWYgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01J
Tk9SX18gPj0gMSkgfHwgKF9fR05VQ19fID4gNCkKLSMgIHByYWdtYSBHQ0MgdmlzaWJpbGl0eSBw
dXNoIChkZWZhdWx0KQotIyBlbmRpZgotI2VuZGlmCi0gICAgY2xhc3MKLSAgICBleGNlcHRpb24K
LSAgICAgICAgewotICAgICAgICAvLzxOMzc1Nz4KLSAgICAgICAgcHVibGljOgotICAgICAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVGFnPiB2b2lkIHNldCggdHlwZW5hbWUgVGFnOjp0eXBlIGNvbnN0ICYg
KTsKLSAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFRhZz4gdHlwZW5hbWUgVGFnOjp0eXBlIGNvbnN0
ICogZ2V0KCkgY29uc3Q7Ci0gICAgICAgIC8vPC9OMzc1Nz4KLQotICAgICAgICBwcm90ZWN0ZWQ6
Ci0KLSAgICAgICAgZXhjZXB0aW9uKCk6Ci0gICAgICAgICAgICB0aHJvd19mdW5jdGlvbl8oMCks
Ci0gICAgICAgICAgICB0aHJvd19maWxlXygwKSwKLSAgICAgICAgICAgIHRocm93X2xpbmVfKC0x
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0jaWZkZWYgX19IUF9hQ0MKLSAgICAg
ICAgLy9PbiBIUCBhQ0MsIHRoaXMgcHJvdGVjdGVkIGNvcHkgY29uc3RydWN0b3IgcHJldmVudHMg
dGhyb3dpbmcgYm9vc3Q6OmV4Y2VwdGlvbi4KLSAgICAgICAgLy9PbiBhbGwgb3RoZXIgcGxhdGZv
cm1zLCB0aGUgc2FtZSBlZmZlY3QgaXMgYWNoaWV2ZWQgYnkgdGhlIHB1cmUgdmlydHVhbCBkZXN0
cnVjdG9yLgotICAgICAgICBleGNlcHRpb24oIGV4Y2VwdGlvbiBjb25zdCAmIHggKSB0aHJvdygp
OgotICAgICAgICAgICAgZGF0YV8oeC5kYXRhXyksCi0gICAgICAgICAgICB0aHJvd19mdW5jdGlv
bl8oeC50aHJvd19mdW5jdGlvbl8pLAotICAgICAgICAgICAgdGhyb3dfZmlsZV8oeC50aHJvd19m
aWxlXyksCi0gICAgICAgICAgICB0aHJvd19saW5lXyh4LnRocm93X2xpbmVfKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgdmlydHVhbCB+ZXhjZXB0aW9u
KCkgdGhyb3coKQotI2lmbmRlZiBfX0hQX2FDQwotICAgICAgICAgICAgPSAwIC8vV29ya2Fyb3Vu
ZCBmb3IgSFAgYUNDLCA9MCBpbmNvcnJlY3RseSBsZWFkcyB0byBsaW5rIGVycm9ycy4KLSNlbmRp
ZgotICAgICAgICAgICAgOwotCi0jaWYgKGRlZmluZWQoX19NV0VSS1NfXykgJiYgX19NV0VSS1Nf
Xzw9MHgzMjA3KSB8fCAoZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI8PTEzMTApCi0gICAg
ICAgIHB1YmxpYzoKLSNlbHNlCi0gICAgICAgIHByaXZhdGU6Ci0KLSAgICAgICAgdGVtcGxhdGUg
PGNsYXNzIEU+Ci0gICAgICAgIGZyaWVuZCBFIGNvbnN0ICYgZXhjZXB0aW9uX2RldGFpbDo6c2V0
X2luZm8oIEUgY29uc3QgJiwgdGhyb3dfZnVuY3Rpb24gY29uc3QgJiApOwotCi0gICAgICAgIHRl
bXBsYXRlIDxjbGFzcyBFPgotICAgICAgICBmcmllbmQgRSBjb25zdCAmIGV4Y2VwdGlvbl9kZXRh
aWw6OnNldF9pbmZvKCBFIGNvbnN0ICYsIHRocm93X2ZpbGUgY29uc3QgJiApOwotCi0gICAgICAg
IHRlbXBsYXRlIDxjbGFzcyBFPgotICAgICAgICBmcmllbmQgRSBjb25zdCAmIGV4Y2VwdGlvbl9k
ZXRhaWw6OnNldF9pbmZvKCBFIGNvbnN0ICYsIHRocm93X2xpbmUgY29uc3QgJiApOwotCi0gICAg
ICAgIHRlbXBsYXRlIDxjbGFzcyBFLGNsYXNzIFRhZyxjbGFzcyBUPgotICAgICAgICBmcmllbmQg
RSBjb25zdCAmIGV4Y2VwdGlvbl9kZXRhaWw6OnNldF9pbmZvKCBFIGNvbnN0ICYsIGVycm9yX2lu
Zm88VGFnLFQ+IGNvbnN0ICYgKTsKLQotICAgICAgICBmcmllbmQgY2hhciBjb25zdCAqIGV4Y2Vw
dGlvbl9kZXRhaWw6OmdldF9kaWFnbm9zdGljX2luZm9ybWF0aW9uKCBleGNlcHRpb24gY29uc3Qg
JiwgY2hhciBjb25zdCAqICk7Ci0KLSAgICAgICAgdGVtcGxhdGUgPGNsYXNzPgotICAgICAgICBm
cmllbmQgc3RydWN0IGV4Y2VwdGlvbl9kZXRhaWw6OmdldF9pbmZvOwotICAgICAgICBmcmllbmQg
c3RydWN0IGV4Y2VwdGlvbl9kZXRhaWw6OmdldF9pbmZvPHRocm93X2Z1bmN0aW9uPjsKLSAgICAg
ICAgZnJpZW5kIHN0cnVjdCBleGNlcHRpb25fZGV0YWlsOjpnZXRfaW5mbzx0aHJvd19maWxlPjsK
LSAgICAgICAgZnJpZW5kIHN0cnVjdCBleGNlcHRpb25fZGV0YWlsOjpnZXRfaW5mbzx0aHJvd19s
aW5lPjsKLSAgICAgICAgdGVtcGxhdGUgPGNsYXNzPgotICAgICAgICBmcmllbmQgc3RydWN0IGV4
Y2VwdGlvbl9kZXRhaWw6OnNldF9pbmZvX3J2OwotICAgICAgICBmcmllbmQgc3RydWN0IGV4Y2Vw
dGlvbl9kZXRhaWw6OnNldF9pbmZvX3J2PHRocm93X2Z1bmN0aW9uPjsKLSAgICAgICAgZnJpZW5k
IHN0cnVjdCBleGNlcHRpb25fZGV0YWlsOjpzZXRfaW5mb19ydjx0aHJvd19maWxlPjsKLSAgICAg
ICAgZnJpZW5kIHN0cnVjdCBleGNlcHRpb25fZGV0YWlsOjpzZXRfaW5mb19ydjx0aHJvd19saW5l
PjsKLSAgICAgICAgZnJpZW5kIHZvaWQgZXhjZXB0aW9uX2RldGFpbDo6Y29weV9ib29zdF9leGNl
cHRpb24oIGV4Y2VwdGlvbiAqLCBleGNlcHRpb24gY29uc3QgKiApOwotI2VuZGlmCi0gICAgICAg
IG11dGFibGUgZXhjZXB0aW9uX2RldGFpbDo6cmVmY291bnRfcHRyPGV4Y2VwdGlvbl9kZXRhaWw6
OmVycm9yX2luZm9fY29udGFpbmVyPiBkYXRhXzsKLSAgICAgICAgbXV0YWJsZSBjaGFyIGNvbnN0
ICogdGhyb3dfZnVuY3Rpb25fOwotICAgICAgICBtdXRhYmxlIGNoYXIgY29uc3QgKiB0aHJvd19m
aWxlXzsKLSAgICAgICAgbXV0YWJsZSBpbnQgdGhyb3dfbGluZV87Ci0gICAgICAgIH07Ci0jaWYg
ZGVmaW5lZChfX0dOVUNfXykKLSMgaWYgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18g
Pj0gMSkgfHwgKF9fR05VQ19fID4gNCkKLSMgIHByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKLSMg
ZW5kaWYKLSNlbmRpZgotCi0gICAgaW5saW5lCi0gICAgZXhjZXB0aW9uOjoKLSAgICB+ZXhjZXB0
aW9uKCkgdGhyb3coKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgIG5hbWVzcGFjZQotICAg
IGV4Y2VwdGlvbl9kZXRhaWwKLSAgICAgICAgewotICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgRT4K
LSAgICAgICAgRSBjb25zdCAmCi0gICAgICAgIHNldF9pbmZvKCBFIGNvbnN0ICYgeCwgdGhyb3df
ZnVuY3Rpb24gY29uc3QgJiB5ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHgudGhyb3df
ZnVuY3Rpb25fPXkudl87Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgRT4KLSAgICAgICAgRSBjb25zdCAmCi0gICAgICAgIHNl
dF9pbmZvKCBFIGNvbnN0ICYgeCwgdGhyb3dfZmlsZSBjb25zdCAmIHkgKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgeC50aHJvd19maWxlXz15LnZfOwotICAgICAgICAgICAgcmV0dXJuIHg7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGUgPGNsYXNzIEU+Ci0gICAgICAgIEUg
Y29uc3QgJgotICAgICAgICBzZXRfaW5mbyggRSBjb25zdCAmIHgsIHRocm93X2xpbmUgY29uc3Qg
JiB5ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHgudGhyb3dfbGluZV89eS52XzsKLSAg
ICAgICAgICAgIHJldHVybiB4OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLQotICAgIG5hbWVzcGFjZQotICAgIGV4Y2VwdGlvbl9kZXRhaWwKLSAgICAg
ICAgewotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jIGlmIChfX0dOVUNfXyA9PSA0ICYmIF9fR05V
Q19NSU5PUl9fID49IDEpIHx8IChfX0dOVUNfXyA+IDQpCi0jICBwcmFnbWEgR0NDIHZpc2liaWxp
dHkgcHVzaCAoZGVmYXVsdCkKLSMgZW5kaWYKLSNlbmRpZgotICAgICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVD4KLSAgICAgICAgc3RydWN0Ci0gICAgICAgIGVycm9yX2luZm9faW5qZWN0b3I6Ci0gICAg
ICAgICAgICBwdWJsaWMgVCwKLSAgICAgICAgICAgIHB1YmxpYyBleGNlcHRpb24KLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIGV4cGxpY2l0Ci0gICAgICAgICAgICBlcnJvcl9pbmZvX2luamVj
dG9yKCBUIGNvbnN0ICYgeCApOgotICAgICAgICAgICAgICAgIFQoeCkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB+ZXJyb3JfaW5mb19pbmplY3Rv
cigpIHRocm93KCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfTsKLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotIyBpZiAoX19HTlVDX18gPT0gNCAmJiBf
X0dOVUNfTUlOT1JfXyA+PSAxKSB8fCAoX19HTlVDX18gPiA0KQotIyAgcHJhZ21hIEdDQyB2aXNp
YmlsaXR5IHBvcAotIyBlbmRpZgotI2VuZGlmCi0KLSAgICAgICAgc3RydWN0IGxhcmdlX3NpemUg
eyBjaGFyIGNbMjU2XTsgfTsKLSAgICAgICAgbGFyZ2Vfc2l6ZSBkaXNwYXRjaF9ib29zdF9leGNl
cHRpb24oIGV4Y2VwdGlvbiBjb25zdCAqICk7Ci0KLSAgICAgICAgc3RydWN0IHNtYWxsX3NpemUg
eyB9OwotICAgICAgICBzbWFsbF9zaXplIGRpc3BhdGNoX2Jvb3N0X2V4Y2VwdGlvbiggdm9pZCBj
b25zdCAqICk7Ci0KLSAgICAgICAgdGVtcGxhdGUgPGNsYXNzLGludD4KLSAgICAgICAgc3RydWN0
IGVuYWJsZV9lcnJvcl9pbmZvX2hlbHBlcjsKLQotICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4K
LSAgICAgICAgc3RydWN0Ci0gICAgICAgIGVuYWJsZV9lcnJvcl9pbmZvX2hlbHBlcjxULHNpemVv
ZihsYXJnZV9zaXplKT4KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHR5cGVkZWYgVCB0eXBl
OwotICAgICAgICAgICAgfTsKLQotICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICAgICAg
c3RydWN0Ci0gICAgICAgIGVuYWJsZV9lcnJvcl9pbmZvX2hlbHBlcjxULHNpemVvZihzbWFsbF9z
aXplKT4KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHR5cGVkZWYgZXJyb3JfaW5mb19pbmpl
Y3RvcjxUPiB0eXBlOwotICAgICAgICAgICAgfTsKLQotICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KLSAgICAgICAgc3RydWN0Ci0gICAgICAgIGVuYWJsZV9lcnJvcl9pbmZvX3JldHVybl90eXBl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGVuYWJsZV9lcnJv
cl9pbmZvX2hlbHBlcjxULHNpemVvZihleGNlcHRpb25fZGV0YWlsOjpkaXNwYXRjaF9ib29zdF9l
eGNlcHRpb24oc3RhdGljX2Nhc3Q8VCAqPigwKSkpPjo6dHlwZSB0eXBlOwotICAgICAgICAgICAg
fTsKLSAgICAgICAgfQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgaW5saW5lCi0gICAg
dHlwZW5hbWUKLSAgICBleGNlcHRpb25fZGV0YWlsOjplbmFibGVfZXJyb3JfaW5mb19yZXR1cm5f
dHlwZTxUPjo6dHlwZQotICAgIGVuYWJsZV9lcnJvcl9pbmZvKCBUIGNvbnN0ICYgeCApCi0gICAg
ICAgIHsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBleGNlcHRpb25fZGV0YWlsOjplbmFibGVf
ZXJyb3JfaW5mb19yZXR1cm5fdHlwZTxUPjo6dHlwZSBydDsKLSAgICAgICAgcmV0dXJuIHJ0KHgp
OwotICAgICAgICB9Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotICAgIG5hbWVzcGFjZQotICAg
IGV4Y2VwdGlvbl9kZXRhaWwKLSAgICAgICAgewotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jIGlm
IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDEpIHx8IChfX0dOVUNfXyA+IDQp
Ci0jICBwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaCAoZGVmYXVsdCkKLSMgZW5kaWYKLSNlbmRp
ZgotICAgICAgICBjbGFzcwotICAgICAgICBjbG9uZV9iYXNlCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICBwdWJsaWM6Ci0KLSAgICAgICAgICAgIHZpcnR1YWwgY2xvbmVfYmFzZSBjb25zdCAq
IGNsb25lKCkgY29uc3QgPSAwOwotICAgICAgICAgICAgdmlydHVhbCB2b2lkIHJldGhyb3coKSBj
b25zdCA9IDA7Ci0KLSAgICAgICAgICAgIHZpcnR1YWwKLSAgICAgICAgICAgIH5jbG9uZV9iYXNl
KCkgdGhyb3coKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9OwotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jIGlmIChfX0dOVUNfXyA9PSA0ICYmIF9f
R05VQ19NSU5PUl9fID49IDEpIHx8IChfX0dOVUNfXyA+IDQpCi0jICBwcmFnbWEgR0NDIHZpc2li
aWxpdHkgcG9wCi0jIGVuZGlmCi0jZW5kaWYKLQotICAgICAgICBpbmxpbmUKLSAgICAgICAgdm9p
ZAotICAgICAgICBjb3B5X2Jvb3N0X2V4Y2VwdGlvbiggZXhjZXB0aW9uICogYSwgZXhjZXB0aW9u
IGNvbnN0ICogYiApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZWZjb3VudF9wdHI8ZXJy
b3JfaW5mb19jb250YWluZXI+IGRhdGE7Ci0gICAgICAgICAgICBpZiggZXJyb3JfaW5mb19jb250
YWluZXIgKiBkPWItPmRhdGFfLmdldCgpICkKLSAgICAgICAgICAgICAgICBkYXRhID0gZC0+Y2xv
bmUoKTsKLSAgICAgICAgICAgIGEtPnRocm93X2ZpbGVfID0gYi0+dGhyb3dfZmlsZV87Ci0gICAg
ICAgICAgICBhLT50aHJvd19saW5lXyA9IGItPnRocm93X2xpbmVfOwotICAgICAgICAgICAgYS0+
dGhyb3dfZnVuY3Rpb25fID0gYi0+dGhyb3dfZnVuY3Rpb25fOwotICAgICAgICAgICAgYS0+ZGF0
YV8gPSBkYXRhOwotICAgICAgICAgICAgfQotCi0gICAgICAgIGlubGluZQotICAgICAgICB2b2lk
Ci0gICAgICAgIGNvcHlfYm9vc3RfZXhjZXB0aW9uKCB2b2lkICosIHZvaWQgY29uc3QgKiApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotIyBp
ZiAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAxKSB8fCAoX19HTlVDX18gPiA0
KQotIyAgcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2ggKGRlZmF1bHQpCi0jIGVuZGlmCi0jZW5k
aWYKLSAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgICAgIGNsYXNzCi0gICAgICAgIGNs
b25lX2ltcGw6Ci0gICAgICAgICAgICBwdWJsaWMgVCwKLSAgICAgICAgICAgIHB1YmxpYyB2aXJ0
dWFsIGNsb25lX2Jhc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBjbG9uZV90
YWcgeyB9OwotICAgICAgICAgICAgY2xvbmVfaW1wbCggY2xvbmVfaW1wbCBjb25zdCAmIHgsIGNs
b25lX3RhZyApOgotICAgICAgICAgICAgICAgIFQoeCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgY29weV9ib29zdF9leGNlcHRpb24odGhpcywmeCk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBwdWJsaWM6Ci0KLSAgICAgICAgICAgIGV4cGxpY2l0Ci0gICAg
ICAgICAgICBjbG9uZV9pbXBsKCBUIGNvbnN0ICYgeCApOgotICAgICAgICAgICAgICAgIFQoeCkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29weV9ib29zdF9leGNlcHRpb24o
dGhpcywmeCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB+Y2xvbmVfaW1wbCgp
IHRocm93KCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBwcml2YXRlOgotCi0gICAgICAgICAgICBjbG9uZV9iYXNlIGNvbnN0ICoKLSAgICAgICAg
ICAgIGNsb25lKCkgY29uc3QKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIG5ldyBjbG9uZV9pbXBsKCp0aGlzLGNsb25lX3RhZygpKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHZvaWQKLSAgICAgICAgICAgIHJldGhyb3coKSBjb25zdAotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyp0aGlzOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotIyBp
ZiAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAxKSB8fCAoX19HTlVDX18gPiA0
KQotIyAgcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAotIyBlbmRpZgotI2VuZGlmCi0KLSAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICBpbmxpbmUKLSAgICBleGNlcHRpb25fZGV0YWlsOjpjbG9u
ZV9pbXBsPFQ+Ci0gICAgZW5hYmxlX2N1cnJlbnRfZXhjZXB0aW9uKCBUIGNvbnN0ICYgeCApCi0g
ICAgICAgIHsKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbl9kZXRhaWw6OmNsb25lX2ltcGw8VD4o
eCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5l
ZChCT09TVF9FWENFUFRJT05fRU5BQkxFX1dBUk5JTkdTKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkK
LSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBlcy9jb21wb25lbnRzLmhwcCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2NvbXBvbmVudHMu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjIyMDk4ZDU4MTU0NjY2NzkwMmIx
ZGQ5MzZjYWMyNmE0MWFhZDYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0
aW9uX3R5cGVzL2NvbXBvbmVudHMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDI0ICswLDAgQEAK
LQotLy8gKEMpIENvcHlyaWdodCBUb2JpYXMgU2Nod2luZ2VyCi0vLwotLy8gVXNlIG1vZGlmaWNh
dGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBib29zdCBTb2Z0d2FyZSBM
aWNlbnNlLAotLy8gVmVyc2lvbiAxLjAuIChTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KS4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmbmRlZiBCT09TVF9G
VF9DT01QT05FTlRTX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9GVF9DT01QT05FTlRTX0hQ
UF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZp
Zy5ocHA+Ci0KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8vbGFtYmRhX3N1cHBvcnQuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3Qv
dHlwZV90cmFpdHMvaW50ZWdyYWxfY29uc3RhbnQuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBs
L2lmLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvaW50ZWdyYWxfYy5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvbXBsL3ZlY3Rvci92ZWN0b3IwLmhwcD4KLQotI2lmIEJPT1NUX1dPUktBUk9VTkQoX19C
T1JMQU5EQ19fLCA8PSAweDU2NSkKLSMgICBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yZW1v
dmVfY3YuaHBwPgotCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2lkZW50aXR5LmhwcD4KLSMgICBp
bmNsdWRlIDxib29zdC9tcGwvYml0YW5kLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvdmVj
dG9yL3ZlY3RvcjEwLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvZnJvbnQuaHBwPgotIyAg
IGluY2x1ZGUgPGJvb3N0L21wbC9iZWdpbi5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2Fk
dmFuY2UuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9pdGVyYXRvcl9yYW5nZS5ocHA+Ci0j
ICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2pvaW50X3ZpZXcuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0
L21wbC9lcXVhbF90by5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2NvcHkuaHBwPgotIyAg
IGluY2x1ZGUgPGJvb3N0L21wbC9mcm9udF9pbnNlcnRlci5ocHA+Ci0KLSMgICBpbmNsdWRlIDxi
b29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvY2xhc3NpZmllci5ocHA+Ci0jZW5kaWYKLQotI2lm
bmRlZiBCT09TVF9GVF9OT19DVl9GVU5DX1NVUFBPUlQKLSMgICBpbmNsdWRlIDxib29zdC9tcGwv
cmVtb3ZlLmhwcD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25fdHlwZXMvY29u
ZmlnL2NvbmZpZy5ocHA+Ci0KLSMgICBpZiAgIEJPT1NUX0ZUX01BWF9BUklUWSA8IDEwCi0jICAg
ICBpbmNsdWRlIDxib29zdC9tcGwvdmVjdG9yL3ZlY3RvcjEwLmhwcD4KLSMgICBlbGlmIEJPT1NU
X0ZUX01BWF9BUklUWSA8IDIwCi0jICAgICBpbmNsdWRlIDxib29zdC9tcGwvdmVjdG9yL3ZlY3Rv
cjIwLmhwcD4KLSMgICBlbGlmIEJPT1NUX0ZUX01BWF9BUklUWSA8IDMwCi0jICAgICBpbmNsdWRl
IDxib29zdC9tcGwvdmVjdG9yL3ZlY3RvcjMwLmhwcD4KLSMgICBlbGlmIEJPT1NUX0ZUX01BWF9B
UklUWSA8IDQwCi0jICAgICBpbmNsdWRlIDxib29zdC9tcGwvdmVjdG9yL3ZlY3RvcjQwLmhwcD4K
LSMgICBlbGlmIEJPT1NUX0ZUX01BWF9BUklUWSA8IDUwCi0jICAgICBpbmNsdWRlIDxib29zdC9t
cGwvdmVjdG9yL3ZlY3RvcjUwLmhwcD4KLSMgICBlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvZnVu
Y3Rpb25fdHlwZXMvZGV0YWlsL2NsYXNzX3RyYW5zZm9ybS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
ZnVuY3Rpb25fdHlwZXMvcHJvcGVydHlfdGFncy5ocHA+Ci0KLS8vIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtCi0KLW5hbWVzcGFjZSBib29zdCAKLXsgCi0gIG5hbWVzcGFjZSBmdW5jdGlvbl90eXBlcyAK
LSAgewotCi0gICAgdXNpbmcgbXBsOjpwbGFjZWhvbGRlcnM6Ol87Ci0KLSAgICB0ZW1wbGF0ZTwg
dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ2xhc3NUeXBlVHJhbnNmb3JtID0gYWRkX3JlZmVyZW5jZTxf
PiA+IAotICAgIHN0cnVjdCBjb21wb25lbnRzOwotCi0gICAgbmFtZXNwYWNlIGRldGFpbCAKLSAg
ICB7Ci0gICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBMPiBzdHJ1Y3QgY29tcG9u
ZW50c19pbXBsOwotI2lmIEJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCA8PSAweDU2NSkK
LSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9yaWdULCB0eXBlbmFtZSBMPiBz
dHJ1Y3QgY29tcG9uZW50c19iY2M7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBDbGFzc1R5cGVUcmFuc2Zvcm0+IAotICAgIHN0cnVjdCBjb21wb25l
bnRzCi0jaWYgIUJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCA8PSAweDU2NSkKLSAgICAg
IDogZGV0YWlsOjpjb21wb25lbnRzX2ltcGw8VCwgQ2xhc3NUeXBlVHJhbnNmb3JtPgotI2Vsc2UK
LSAgICAgIDogZGV0YWlsOjpjb21wb25lbnRzX2JjYzx0eXBlbmFtZSByZW1vdmVfY3Y8VD46OnR5
cGUsVCwKLSAgICAgICAgICAgIENsYXNzVHlwZVRyYW5zZm9ybT4KLSNlbmRpZgotICAgIHsgCi0g
ICAgICB0eXBlZGVmIGNvbXBvbmVudHM8VCxDbGFzc1R5cGVUcmFuc2Zvcm0+IHR5cGU7Ci0KLSAg
ICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlQoMixjb21wb25lbnRzLChULENsYXNzVHlw
ZVRyYW5zZm9ybSkpCi0gICAgfTsKLQotLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KLQotICBuYW1l
c3BhY2UgZGV0YWlsIHsKLQotICAgIHN0cnVjdCBjb21wb25lbnRzX21wbF9zZXF1ZW5jZV90YWc7
IAotCi0gICAgc3RydWN0IGNvbXBvbmVudHNfbm9uX2Z1bmNfYmFzZQotICAgIHsKLSAgICAgIHR5
cGVkZWYgbXBsOjp2ZWN0b3IwPD4gdHlwZXM7Ci0gICAgICB0eXBlZGVmIHZvaWQgZnVuY3Rpb25f
YXJpdHk7Ci0KLSAgICAgIHR5cGVkZWYgZGV0YWlsOjpjb25zdGFudDwwPiBiaXRzOwotICAgICAg
dHlwZWRlZiBkZXRhaWw6OmNvbnN0YW50PDA+IG1hc2s7Ci0KLSAgICAgIHR5cGVkZWYgY29tcG9u
ZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsKLSAgICB9OwotCi0gICAgdGVtcGxhdGUKLSAgICA8
IHR5cGVuYW1lIENvbXBvbmVudHMKLSAgICAsIHR5cGVuYW1lIElmVGFnZ2VkCi0gICAgLCB0eXBl
bmFtZSBUaGVuVGFnCi0gICAgLCB0eXBlbmFtZSBEZWZhdWx0QmFzZSA9IGNvbXBvbmVudHNfbm9u
X2Z1bmNfYmFzZQotICAgID4KLSAgICBzdHJ1Y3QgcmV0YWdnZWRfaWYKLSAgICAgIDogbXBsOjpp
Zl8KLSAgICAgICAgPCBkZXRhaWw6OnJlcHJlc2VudHNfaW1wbDxDb21wb25lbnRzLCBJZlRhZ2dl
ZD4KLSAgICAgICAgLCBkZXRhaWw6OmNoYW5nZWRfdGFnPENvbXBvbmVudHMsSWZUYWdnZWQsVGhl
blRhZz4KLSAgICAgICAgLCBEZWZhdWx0QmFzZQotICAgICAgICA+Ojp0eXBlCi0gICAgeyB9Owot
Ci0gICAgLy8gV2UgZGV0ZWN0IHBsYWluIGZ1bmN0aW9uIHR5cGVzIGFuZCBmdW5jdGlvbiByZWZl
cmVuY2VzIGFzIGZ1bmN0aW9uIAotICAgIC8vIHBvaW50ZXJzIGJ5IHJlY3Vyc2l2ZSBpbnN0YW50
aWF0aW9uIG9mIGNvbXBvbmVudHNfaW1wbC4gCi0gICAgLy8gVGhlIHRoaXJkIHNwZWNpYWxpemF0
aW9uIG9mIGNvbXBvbmVudHNfaW1wbCBtYWtlcyBzdXJlIHRoZSByZWN1cnNpb24gCi0gICAgLy8g
dGVybWluYXRlcyAod2hlbiBhZGRpbmcgcG9pbnRlcnMpLgotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEw+Ci0gICAgc3RydWN0IGNvbXBvbmVudHNfaW1wbAotICAgICAgOiBkZXRh
aWw6OnJldGFnZ2VkX2lmCi0gICAgICAgIDwgZGV0YWlsOjpjb21wb25lbnRzX2ltcGw8VCosTD4K
LSAgICAgICAgLCBwb2ludGVyX3RhZywgLyogLS0+ICovIGZ1bmN0aW9uX3RhZyA+Ci0gICAgeyB9
OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEw+Ci0gICAgc3RydWN0IGNvbXBv
bmVudHNfaW1wbDxUJiwgTD4KLSAgICAgIDogZGV0YWlsOjpyZXRhZ2dlZF9pZgotICAgICAgICA8
IGRldGFpbDo6Y29tcG9uZW50c19pbXBsPFQqLEw+Ci0gICAgICAgICwgcG9pbnRlcl90YWcsIC8q
IC0tPiAqLyByZWZlcmVuY2VfdGFnID4KLSAgICB7IH07Ci0KLSNpZiAhQk9PU1RfRlRfTk9fQ1Zf
RlVOQ19TVVBQT1JUCi0gICAgLy8gUmV0cnkgdGhlIHR5cGUgd2l0aCBhIG1lbWJlciBwb2ludGVy
IGF0dGFjaGVkIHRvIGRldGVjdCBjdiBmdW5jdGlvbnMKLSAgICBjbGFzcyBhX2NsYXNzOwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzZSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgTD4KLSAgICBz
dHJ1Y3QgY3ZfZnVuY19iYXNlCi0gICAgICA6IGRldGFpbDo6cmV0YWdnZWRfaWY8QmFzZSxtZW1i
ZXJfcG9pbnRlcl90YWcsZnVuY3Rpb25fdGFnPgotICAgIHsKLSAgICAgIHR5cGVkZWYgdHlwZW5h
bWUKLSAgICAgICAgbXBsOjpyZW1vdmUKLSAgICAgICAgICA8IHR5cGVuYW1lIEJhc2U6OnR5cGVz
Ci0gICAgICAgICAgLCB0eXBlbmFtZSBkZXRhaWw6OmNsYXNzX3RyYW5zZm9ybTxhX2NsYXNzLEw+
Ojp0eXBlPjo6dHlwZQotICAgICAgdHlwZXM7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEw+Ci0gICAgc3RydWN0IGNvbXBvbmVudHNfaW1wbDxUKiwgTD4KLSAg
ICAgIDogbXBsOjppZl8KLSAgICAgICAgPCBkZXRhaWw6OnJlcHJlc2VudHNfaW1wbDwgZGV0YWls
Ojpjb21wb25lbnRzX2ltcGw8VCBhX2NsYXNzOjoqLCBMPgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCBtZW1iZXJfcG9pbnRlcl90YWcgPgotICAgICAgICAsIGRldGFpbDo6Y3Zf
ZnVuY19iYXNlPCBkZXRhaWw6OmNvbXBvbmVudHNfaW1wbDxUIGFfY2xhc3M6OiosIEw+LCBULCBM
PgotICAgICAgICAsIGNvbXBvbmVudHNfbm9uX2Z1bmNfYmFzZQotICAgICAgICA+Ojp0eXBlCi0g
ICAgeyB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgTD4KLSAgICBzdHJ1
Y3QgY29tcG9uZW50c19pbXBsPFQgYV9jbGFzczo6KiwgTD4KLSAgICAgIDogY29tcG9uZW50c19u
b25fZnVuY19iYXNlCi0gICAgeyB9OwotI2Vsc2UKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBMPgotICAgIHN0cnVjdCBjb21wb25lbnRzX2ltcGw8VCosIEw+Ci0gICAgICA6IGNv
bXBvbmVudHNfbm9uX2Z1bmNfYmFzZQotICAgIHsgfTsgCi0jZW5kaWYKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEw+Ci0gICAgc3RydWN0IGNvbXBvbmVudHNfaW1wbDxUKiBj
b25zdCwgTD4gCi0gICAgICA6IGNvbXBvbmVudHNfaW1wbDxUKixMPgotICAgIHsgfTsKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEw+Ci0gICAgc3RydWN0IGNvbXBvbmVudHNf
aW1wbDxUKiB2b2xhdGlsZSwgTD4gCi0gICAgICA6IGNvbXBvbmVudHNfaW1wbDxUKixMPgotICAg
IHsgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEw+Ci0gICAgc3RydWN0
IGNvbXBvbmVudHNfaW1wbDxUKiBjb25zdCB2b2xhdGlsZSwgTD4gCi0gICAgICA6IGNvbXBvbmVu
dHNfaW1wbDxUKixMPgotICAgIHsgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEw+Ci0gICAgc3RydWN0IGNvbXBvbmVudHNfaW1wbDxUIGNvbnN0LCBMPiAKLSAgICAgIDog
Y29tcG9uZW50c19pbXBsPFQsTD4KLSAgICB7IH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBMPgotICAgIHN0cnVjdCBjb21wb25lbnRzX2ltcGw8VCB2b2xhdGlsZSwgTD4g
Ci0gICAgICA6IGNvbXBvbmVudHNfaW1wbDxULEw+Ci0gICAgeyB9OwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgTD4KLSAgICBzdHJ1Y3QgY29tcG9uZW50c19pbXBsPFQgY29u
c3Qgdm9sYXRpbGUsIEw+IAotICAgICAgOiBjb21wb25lbnRzX2ltcGw8VCxMPgotICAgIHsgfTsK
LQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MgQz4KLSAgICBzdHJ1Y3QgbWVtYmVy
X29ial9wdHJfcmVzdWx0Ci0gICAgeyB0eXBlZGVmIFQgJiB0eXBlOyB9OwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgY2xhc3MgQz4KLSAgICBzdHJ1Y3QgbWVtYmVyX29ial9wdHJfcmVzdWx0
PFQsIEMgY29uc3Q+Ci0gICAgeyB0eXBlZGVmIFQgY29uc3QgJiB0eXBlOyB9OwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MgQz4KLSAgICBzdHJ1Y3QgbWVtYmVyX29ial9wdHJfcmVz
dWx0PFQsIEMgdm9sYXRpbGU+Ci0gICAgeyB0eXBlZGVmIFQgdm9sYXRpbGUgJiB0eXBlOyB9Owot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MgQz4KLSAgICBzdHJ1Y3QgbWVtYmVyX29i
al9wdHJfcmVzdWx0PFQsIEMgY29uc3Qgdm9sYXRpbGU+Ci0gICAgeyB0eXBlZGVmIFQgY29uc3Qg
dm9sYXRpbGUgJiB0eXBlOyB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MgQz4K
LSAgICBzdHJ1Y3QgbWVtYmVyX29ial9wdHJfcmVzdWx0PFQgJiwgQz4KLSAgICB7IHR5cGVkZWYg
VCAmIHR5cGU7IH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcyBDPgotICAgIHN0
cnVjdCBtZW1iZXJfb2JqX3B0cl9yZXN1bHQ8VCAmLCBDIGNvbnN0PgotICAgIHsgdHlwZWRlZiBU
ICYgdHlwZTsgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzIEM+Ci0gICAgc3Ry
dWN0IG1lbWJlcl9vYmpfcHRyX3Jlc3VsdDxUICYsIEMgdm9sYXRpbGU+Ci0gICAgeyB0eXBlZGVm
IFQgJiB0eXBlOyB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MgQz4KLSAgICBz
dHJ1Y3QgbWVtYmVyX29ial9wdHJfcmVzdWx0PFQgJiwgQyBjb25zdCB2b2xhdGlsZT4KLSAgICB7
IHR5cGVkZWYgVCAmIHR5cGU7IH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcyBD
LCB0eXBlbmFtZSBMPgotICAgIHN0cnVjdCBtZW1iZXJfb2JqX3B0cl9jb21wb25lbnRzCi0gICAg
ICA6IG1lbWJlcl9vYmplY3RfcG9pbnRlcl9iYXNlCi0gICAgewotICAgICAgdHlwZWRlZiBmdW5j
dGlvbl90eXBlczo6Y29tcG9uZW50czxUIEM6OiosIEw+IHR5cGU7Ci0gICAgICB0eXBlZGVmIGNv
bXBvbmVudHNfbXBsX3NlcXVlbmNlX3RhZyB0YWc7Ci0KLSAgICAgIHR5cGVkZWYgbXBsOjppbnRl
Z3JhbF9jPHN0ZDo6c2l6ZV90LDE+IGZ1bmN0aW9uX2FyaXR5OwotCi0gICAgICB0eXBlZGVmIG1w
bDo6dmVjdG9yMjwgdHlwZW5hbWUgZGV0YWlsOjptZW1iZXJfb2JqX3B0cl9yZXN1bHQ8VCxDPjo6
dHlwZSwKLSAgICAgICAgICB0eXBlbmFtZSBkZXRhaWw6OmNsYXNzX3RyYW5zZm9ybTxDLEw+Ojp0
eXBlID4gdHlwZXM7Ci0gICAgfTsKLQotI2lmICFCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENf
XywgPD0gMHg1NjUpCi0jICAgZGVmaW5lIEJPT1NUX0ZUX3ZhcmlhdGlvbnMgQk9PU1RfRlRfcG9p
bnRlcnxCT09TVF9GVF9tZW1iZXJfcG9pbnRlcgotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
Y2xhc3MgQywgdHlwZW5hbWUgTD4KLSAgICBzdHJ1Y3QgY29tcG9uZW50c19pbXBsPFQgQzo6Kiwg
TD4KLSAgICAgIDogbWVtYmVyX29ial9wdHJfY29tcG9uZW50czxULEMsTD4KLSAgICB7IH07Ci0K
LSNlbHNlICAKLSMgICBkZWZpbmUgQk9PU1RfRlRfdmFyaWF0aW9ucyBCT09TVF9GVF9wb2ludGVy
Ci0KLSAgICAvLyBUaGlzIHdvcmthcm91bmQgcmVtb3ZlcyB0aGUgbWVtYmVyIHBvaW50ZXIgZnJv
bSB0aGUgdHlwZSB0byBhbGxvdyAKLSAgICAvLyBkZXRlY3Rpb24gb2YgbWVtYmVyIGZ1bmN0aW9u
IHBvaW50ZXJzIHdpdGggQkNDLiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBD
LCB0eXBlbmFtZSBMPgotICAgIHN0cnVjdCBjb21wb25lbnRzX2ltcGw8VCBDOjoqLCBMPgotICAg
ICAgOiBkZXRhaWw6OnJldGFnZ2VkX2lmCi0gICAgICAgIDwgZGV0YWlsOjpjb21wb25lbnRzX2lt
cGw8dHlwZW5hbWUgYm9vc3Q6OnJlbW92ZV9jdjxUPjo6dHlwZSAqLCBMPgotICAgICAgICAsIHBv
aW50ZXJfdGFnLCAvKiAtLT4gKi8gbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXJfdGFnCi0gICAgICAg
ICwgbWVtYmVyX29ial9wdHJfY29tcG9uZW50czxULEMsTD4gPgotICAgIHsgfTsKLQotICAgIC8v
IEJDQyBsZXRzIHVzIHRlc3QgdGhlIGN2LXF1YWxpZmljYXRpb24gb2YgYSBmdW5jdGlvbiB0eXBl
IGJ5IHRlbXBsYXRlIAotICAgIC8vIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24gLSBzbyB3ZSB1c2Ug
dGhpcyBidWcgZmVhdHVyZSB0byBmaW5kIG91dCB0aGUgCi0gICAgLy8gbWVtYmVyIGZ1bmN0aW9u
J3MgY3YtcXVhbGlmaWNhdGlvbiAodW5mb3J0dW5hdGVseSB0aGVyZSBhcmUgc29tZSAKLSAgICAv
LyBpbnZpc2libGUgbW9kaWZpZXJzIHRoYXQgaW1wb3NlIHNvbWUgbGltaXRhdGlvbnMgb24gdGhl
c2UgdHlwZXMgZXZlbiBpZgotICAgIC8vIHdlIHJlbW92ZSB0aGUgcXVhbGlmaWVycywgU28gd2Ug
Y2Fubm90IGV4cGxvaXQgdGhlIHNhbWUgYnVnIHRvIG1ha2UgdGhlIAotICAgIC8vIGxpYnJhcnkg
d29yayBmb3IgY3YtcXVhbGlmaWVkIGZ1bmN0aW9uIHR5cGVzKS4KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgZW5jb2RlX2N2Ci0gICAgeyB0eXBlZGVmIGNoYXIgKCYgdHlwZSlbMV07
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgdmFsdWUgPSAxKTsgfTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgZW5jb2RlX2N2PFQgY29uc3QgKj4KLSAgICB7IHR5
cGVkZWYgY2hhciAoJiB0eXBlKVsyXTsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6ZV90
LCB2YWx1ZSA9IDIpOyB9OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBlbmNvZGVf
Y3Y8VCB2b2xhdGlsZSAqPgotICAgIHsgdHlwZWRlZiBjaGFyICgmIHR5cGUpWzNdOyBCT09TVF9T
VEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHZhbHVlID0gMyk7IH07Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IGVuY29kZV9jdjxUIGNvbnN0IHZvbGF0aWxlICo+IAotICAgIHsg
dHlwZWRlZiBjaGFyICgmIHR5cGUpWzRdOyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXpl
X3QsIHZhbHVlID0gNCk7IH07Ci0KLSAgICAvLyBGb3IgbWVtYmVyIGZ1bmN0aW9uIHBvaW50ZXJz
IHdlIGhhdmUgdG8gdXNlIGEgZnVuY3Rpb24gdGVtcGxhdGUgKHBhcnRpYWwKLSAgICAvLyB0ZW1w
bGF0ZSBzcGVjaWFsaXphdGlvbiBmb3IgYSBtZW1iZXIgcG9pbnRlciBkcm9wcyB0aGUgY3YgcXVh
bGlmaWNhdGlvbiAKLSAgICAvLyBvZiB0aGUgZnVuY3Rpb24gdHlwZSkuCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgQz4KLSAgICB0eXBlbmFtZSBlbmNvZGVfY3Y8VCAqPjo6dHlw
ZSBtZnBfY3ZfdGVzdGVyKFQgQzo6Kik7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgZW5jb2RlX21mcF9jdgotICAgIHsgCi0gICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3Rk
OjpzaXplX3QsIHZhbHVlID0gCi0gICAgICAgICAgc2l6ZW9mKGRldGFpbDo6bWZwX2N2X3Rlc3Rl
cigoVCkwTCkpKTsgCi0gICAgfTsKLQotICAgIC8vIEFzc29jaWF0ZSBiaXRzIHdpdGggdGhlIENW
IGNvZGVzIGFib3ZlLgotICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90PiBzdHJ1Y3QgY3ZfdGFnX21m
cF9pbXBsOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IGN2X3RhZ19tZnAKLSAg
ICAgIDogZGV0YWlsOjpjdl90YWdfbWZwX2ltcGwKLSAgICAgICAgPCA6OmJvb3N0OjpmdW5jdGlv
bl90eXBlczo6ZGV0YWlsOjplbmNvZGVfbWZwX2N2PFQ+Ojp2YWx1ZSA+Ci0gICAgeyB9OwotCi0g
ICAgdGVtcGxhdGU8PiBzdHJ1Y3QgY3ZfdGFnX21mcF9pbXBsPDE+IDogbm9uX2N2ICAgICAgICAg
ICAgICB7IH07Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgY3ZfdGFnX21mcF9pbXBsPDI+IDogY29u
c3Rfbm9uX3ZvbGF0aWxlICB7IH07Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgY3ZfdGFnX21mcF9p
bXBsPDM+IDogdm9sYXRpbGVfbm9uX2NvbnN0ICB7IH07Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
Y3ZfdGFnX21mcF9pbXBsPDQ+IDogY3ZfcXVhbGlmaWVkICAgICAgICB7IH07Ci0KLSAgICAvLyBN
ZXRhZnVuY3Rpb24gdG8gZGVjb2RlIHRoZSBjdiBjb2RlIGFuZCBhcHBseSBpdCB0byBhIHR5cGUu
Ci0gICAgLy8gV2UgYWRkIGEgcG9pbnRlciwgYmVjYXVzZSBvdGhlcndpc2UgY3YtcXVhbGlmaWVy
cyB3b24ndCBzdGljayAoYW5vdGhlciBidWcpLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0
ZDo6c2l6ZV90IENWPiBzdHJ1Y3QgZGVjb2RlX2N2OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IGRlY29kZV9jdjxULDE+IDogbXBsOjppZGVudGl0eTxUICo+ICAgICAgICAgIHt9
OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBkZWNvZGVfY3Y8VCwyPiA6IG1wbDo6
aWRlbnRpdHk8VCBjb25zdCAqPiAgICB7fTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgZGVjb2RlX2N2PFQsMz4gOiBtcGw6OmlkZW50aXR5PFQgdm9sYXRpbGUgKj4ge307Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IGRlY29kZV9jdjxULDQ+IAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1wbDo6aWRlbnRpdHk8VCBjb25zdCB2b2xh
dGlsZSAqPiB7fTsKLQotICAgIC8vIFRoZSBjbGFzcyB0eXBlIHRyYW5zZm9ybWF0aW9uIGNvbWVz
IGFmdGVyIGFkZGluZyBjdi1xdWFsaWZpZXJzLiBXZSBoYXZlCi0gICAgLy8gd3JhcCBpdCB0byBy
ZW1vdmUgdGhlIHBvaW50ZXIgYWRkZWQgaW4gZGVjb2RlX2N2X2ltcGwuCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgTD4gc3RydWN0IGJjY19jbGFzc190cmFuc2Zvcm1faW1wbDsK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBMPiBzdHJ1Y3QgYmNjX2NsYXNzX3Ry
YW5zZm9ybV9pbXBsPFQgKiwgTD4KLSAgICAgIDogY2xhc3NfdHJhbnNmb3JtPFQsTD4gCi0gICAg
eyB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlwZW5hbWUgTD4g
c3RydWN0IGJjY19jbGFzc190cmFuc2Zvcm0gCi0gICAgICA6IGJjY19jbGFzc190cmFuc2Zvcm1f
aW1wbAotICAgICAgICA8IHR5cGVuYW1lIGRlY29kZV9jdgotICAgICAgICAgIDwgVAotICAgICAg
ICAgICwgOjpib29zdDo6ZnVuY3Rpb25fdHlwZXM6OmRldGFpbDo6ZW5jb2RlX21mcF9jdjxEPjo6
dmFsdWUgCi0gICAgICAgICAgPjo6dHlwZQotICAgICAgICAsIEwKLSAgICAgICAgPiAKLSAgICB7
IH07Ci0KLSAgICAvLyBBZnRlciBleHRyYWN0aW5nIHRoZSBtZW1iZXIgcG9pbnRlZSBmcm9tIHRo
ZSB0eXBlIHRoZSBjbGFzcyB0eXBlIGlzIHN0aWxsCi0gICAgLy8gaW4gdGhlIHR5cGUgKHNvbWV3
aGVyZSAtLSB5b3Ugd29uJ3Qgc2VlIHdpdGggUlRUSSwgdGhhdCBpcykgYW5kIHRoYXQgdHlwZQot
ICAgIC8vIGlzIGZsYWdnZWQgdW51c2FibGUgYW5kICpub3QqIGlkZW50aWNhbCB0byB0aGUgbm9u
bWVtYmVyIGZ1bmN0aW9uIHR5cGUuCi0gICAgLy8gV2UgY2FuLCBob3dldmVyLCBkZWNvbXBvc2Ug
dGhpcyB0eXBlIHZpYSBjb21wb25lbnRzX2ltcGwgYnV0IHN1cnByaXNpbmdseQotICAgIC8vIGEg
cG9pbnRlciB0byB0aGUgY29uc3QgcXVhbGlmaWVkIGNsYXNzIHR5cGUgcG9wcyB1cCBhZ2FpbiBh
cyB0aGUgZmlyc3QgCi0gICAgLy8gcGFyYW1ldGVyIHR5cGUuIAotICAgIC8vIFdlIGhhdmUgdG8g
cmVwbGFjZSB0aGlzIHR5cGUgd2l0aCB0aGUgcHJvcGVybHkgY3YtcXVhbGlmaWVkIGFuZCAKLSAg
ICAvLyB0cmFuc2Zvcm1lZCBjbGFzcyB0eXBlLCBpbnRlZ3JhdGUgdGhlIGN2IHF1YWxpZmljYXRp
b24gaW50byB0aGUgYml0cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFtZSBN
RlAsIHR5cGVuYW1lIE9yaWdULCB0eXBlbmFtZSBMPgotICAgIHN0cnVjdCBtZnBfY29tcG9uZW50
czsKLQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzZSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg
QywgdHlwZW5hbWUgT3JpZ1QsIHR5cGVuYW1lIEw+Ci0gICAgc3RydWN0IG1mcF9jb21wb25lbnRz
PEJhc2UsVCBDOjoqLE9yaWdULEw+IAotICAgIHsKLSAgICBwcml2YXRlOgotICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBtcGw6OmZyb250PHR5cGVuYW1lIEJhc2U6OnR5cGVzPjo6dHlwZSByZXN1bHRf
dHlwZTsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpiY2NfY2xhc3NfdHJhbnNmb3Jt
PEMsT3JpZ1QsTD46OnR5cGUgY2xhc3NfdHlwZTsKLQotICAgICAgdHlwZWRlZiBtcGw6OnZlY3Rv
cjI8cmVzdWx0X3R5cGUsIGNsYXNzX3R5cGU+IHJlc3VsdF9hbmRfY2xhc3NfdHlwZTsKLQotICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSAKLSAgICAgICAgbXBsOjphZHZhbmNlCi0gICAgICAgIDwgdHlw
ZW5hbWUgbXBsOjpiZWdpbjx0eXBlbmFtZSBCYXNlOjp0eXBlcz46OnR5cGUKLSAgICAgICAgLCB0
eXBlbmFtZSBtcGw6OmlmXwotICAgICAgICAgIDwgbXBsOjplcXVhbF90bzwgdHlwZW5hbWUgZGV0
YWlsOjpjbGFzc2lmaWVyPE9yaWdUPjo6ZnVuY3Rpb25fYXJpdHkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAsIHR5cGVuYW1lIEJhc2U6OmZ1bmN0aW9uX2FyaXR5ID4KLSAgICAgICAgICAsIG1w
bDo6aW50ZWdyYWxfYzxpbnQsMj4gLCBtcGw6OmludGVncmFsX2M8aW50LDE+IAotICAgICAgICAg
ID46OnR5cGUKLSAgICAgICAgPjo6dHlwZQotICAgICAgZnJvbTsKLSAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgbXBsOjplbmQ8dHlwZW5hbWUgQmFzZTo6dHlwZXM+Ojp0eXBlIHRvOwotCi0gICAgICB0
eXBlZGVmIG1wbDo6aXRlcmF0b3JfcmFuZ2U8ZnJvbSx0bz4gcGFyYW1fdHlwZXM7Ci0KLSAgICAg
IHR5cGVkZWYgbXBsOjpqb2ludF92aWV3PCByZXN1bHRfYW5kX2NsYXNzX3R5cGUsIHBhcmFtX3R5
cGVzPiB0eXBlc192aWV3OwotICAgIHB1YmxpYzoKLQotICAgICAgdHlwZWRlZiB0eXBlbmFtZSAK
LSAgICAgICAgbXBsOjpyZXZlcnNlX2NvcHk8dHlwZXNfdmlldywgbXBsOjpmcm9udF9pbnNlcnRl
cjwgbXBsOjp2ZWN0b3IwPD4gPiA+Ojp0eXBlIAotICAgICAgdHlwZXM7Ci0KLSAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgCi0gICAgICAgIGZ1bmN0aW9uX3R5cGVzOjp0YWc8IEJhc2UsIGRldGFpbDo6
Y3ZfdGFnX21mcDxPcmlnVD4gPjo6Yml0cyAKLSAgICAgIGJpdHM7Ci0KLSAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgQmFzZTo6bWFzayBtYXNrOwotCi0gICAgICB0eXBlZGVmIHR5cGVuYW1lIGRldGFp
bDo6Y2xhc3NpZmllcjxPcmlnVD46OmZ1bmN0aW9uX2FyaXR5IGZ1bmN0aW9uX2FyaXR5OwotCi0g
ICAgICB0eXBlZGVmIGNvbXBvbmVudHNfbXBsX3NlcXVlbmNlX3RhZyB0YWc7Ci0gICAgfTsKLQot
ICAgIC8vIE5vdyBwdXQgaXQgYWxsIHRvZ2V0aGVyOiBkZXRlY3QgY3YtcXVhbGlmaWNhdGlvbiBv
ZiBmdW5jdGlvbiB0eXBlcyBhbmQgZG8KLSAgICAvLyB0aGUgd2VpcmQgdHJhbnNmb3JtYXRpb25z
IGFib3ZlIGZvciBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlcnMuCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgT3JpZ1QsIHR5cGVuYW1lIEw+Ci0gICAgc3RydWN0IGNvbXBvbmVudHNf
YmNjCi0gICAgICA6IG1wbDo6aWZfCi0gICAgICAgIDwgZGV0YWlsOjpyZXByZXNlbnRzX2ltcGw8
IGRldGFpbDo6Y29tcG9uZW50c19pbXBsPFQsTD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXJfdGFnPgotICAgICAgICAsIGRldGFpbDo6
bWZwX2NvbXBvbmVudHM8ZGV0YWlsOjpjb21wb25lbnRzX2ltcGw8VCxMPixULE9yaWdULEw+Ci0g
ICAgICAgICwgZGV0YWlsOjpjb21wb25lbnRzX2ltcGw8VCxMPgotICAgICAgICA+Ojp0eXBlCi0g
ICAgeyB9OwotCi0jZW5kaWYgLy8gZW5kIG9mIEJPUkxBTkQgV09SS0FST1VORAotCi0jZGVmaW5l
IEJPT1NUX0ZUX2FsX3BhdGggYm9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0YWlsL2NvbXBvbmVudHNf
aW1wbAotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9wcF9sb29wLmhwcD4K
LQotICB9IH0gLy8gbmFtZXNwYWNlIGZ1bmN0aW9uX3R5cGVzOjpkZXRhaWwKLQotfSAvLyBuYW1l
c3BhY2UgOjpib29zdAotCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0YWlsL2Nv
bXBvbmVudHNfYXNfbXBsX3NlcXVlbmNlLmhwcD4KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbl90
eXBlcy9kZXRhaWwvcmV0YWdfZGVmYXVsdF9jYy5ocHA+Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBl
cy9jb25maWcvY2NfbmFtZXMuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvY29uZmlnL2NjX25hbWVzLmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYWI2OWQ2NDYyNDkwNmQxNjUxZTY2MTliZjY1NTRmMzBkODZkOWVi
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBlcy9jb25maWcv
Y2NfbmFtZXMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotCi0vLyAoQykgQ29w
eXJpZ2h0IFRvYmlhcyBTY2h3aW5nZXIKLS8vCi0vLyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0
cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyBW
ZXJzaW9uIDEuMC4gKFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgot
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWZuZGVmIEJPT1NUX0ZUX0NPTkZJR19DQ19O
QU1FU19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfRlRfQ09ORklHX0NDX05BTUVTX0hQUF9J
TkNMVURFRAotCi0jZGVmaW5lIEJPT1NUX0ZUX0JVSUxUSU5fQ0NfTkFNRVMgXAotICAoKCBJTVBM
SUNJVCAgICAgICAgICAgLCBpbXBsaWNpdF9jYyAsIEJPT1NUX1BQX0VNUFRZICAgICAgICAgICAg
ICAgICkpXAotICAoKCBDREVDTCAgICAgICAgICAgICAgLCBjZGVjbF9jYyAgICAsIEJPT1NUX1BQ
X0lERU5USVRZKF9fY2RlY2wgICApICkpXAotICAoKCBTVERDQUxMICAgICAgICAgICAgLCBzdGRj
YWxsX2NjICAsIEJPT1NUX1BQX0lERU5USVRZKF9fc3RkY2FsbCApICkpXAotICAoKCBQQVNDQUwg
ICAgICAgICAgICAgLCBwYXNjYWxfY2MgICAsIEJPT1NUX1BQX0lERU5USVRZKHBhc2NhbCAgICAp
ICkpXAotICAoKCBGQVNUQ0FMTCAgICAgICAgICAgLCBmYXN0Y2FsbF9jYyAsIEJPT1NUX1BQX0lE
RU5USVRZKF9fZmFzdGNhbGwpICkpXAotICAoKCBDTFJDQUxMICAgICAgICAgICAgLCBjbHJjYWxs
X2NjICAsIEJPT1NUX1BQX0lERU5USVRZKF9fY2xyY2FsbCApICkpXAotICAoKCBUSElTQ0FMTCAg
ICAgICAgICAgLCB0aGlzY2FsbF9jYyAsIEJPT1NUX1BQX0lERU5USVRZKF9fdGhpc2NhbGwpICkp
XAotICAoKCBJTVBMSUNJVF9USElTQ0FMTCAgLCB0aGlzY2FsbF9jYyAsIEJPT1NUX1BQX0VNUFRZ
ICAgICAgICAgICAgICAgICkpIAotCi0vLyBhcHBlbmQgdXNlci1kZWZpbmVkIGNjIG5hbWVzIHRv
IGJ1aWx0aW4gb25lcwotI2lmZGVmIEJPT1NUX0ZUX0NDX05BTUVTIAotIyAgIGRlZmluZSBCT09T
VF9GVF9DQ19OQU1FU19TRVEgQk9PU1RfRlRfQlVJTFRJTl9DQ19OQU1FUyBCT09TVF9GVF9DQ19O
QU1FUwotIyAgIGRlZmluZSBCT09TVF9GVF9DQ19QUkVQUk9DRVNTSU5HIDEKLSNlbHNlCi0jICAg
ZGVmaW5lIEJPT1NUX0ZUX0NDX05BTUVTX1NFUSBCT09TVF9GVF9CVUlMVElOX0NDX05BTUVTCi0j
ZW5kaWYKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2NvbmZpZy9jb21waWxlci5ocHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBlcy9jb25m
aWcvY29tcGlsZXIuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTFjODU2NzQw
M2M4ZDVkMjIyN2E4YzQ5MWM1NGE0YTEyYjFkMTRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2NvbmZpZy9jb21waWxlci5ocHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMTYgKzAsMCBAQAotCi0vLyAoQykgQ29weXJpZ2h0IFRvYmlhcyBTY2h3aW5nZXIKLS8v
Ci0vLyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhl
IGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyBWZXJzaW9uIDEuMC4gKFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0jaWZuZGVmIEJPT1NUX0ZUX0NPTkZJR19DT01QSUxFUl9IUFBfSU5DTFVERUQKLSNkZWZpbmUg
Qk9PU1RfRlRfQ09ORklHX0NPTVBJTEVSX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Ym9vc3Qv
Y29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0KLSNp
ZiBkZWZpbmVkKEJPT1NUX01TVkMpCi0KLSMgICBpZiBCT09TVF9NU1ZDIDwgMTMxMAotIyAgICAg
ZXJyb3IgInVuc3VwcG9ydGVkIGNvbXBpbGVyIHZlcnNpb24iCi0jICAgZW5kaWYKLQotIyAgIGlm
ZGVmIEJPT1NUX0ZUX0FVVE9ERVRFQ1RfQ0FMTElOR19DT05WRU5USU9OUwotCi0gICAgICAvLyBl
bmFibGUgY2xyY2FsbCBjYWxsaW5nIGNvdmVudGlvbiAoY2FsbCB0byAuTkVUIG1hbmFnZWQgY29k
ZSkgd2hlbgotICAgICAgLy8gY29tcGlsaW5nIHdpdGggL2NsciAKLSMgICAgIGlmIEJPT1NUX01T
VkMgPj0gMTQwMCAmJiBkZWZpbmVkKF9fY3BsdXNwbHVzX2NsaSkKLSMgICAgICAgaWZuZGVmIEJP
T1NUX0ZUX0NDX0NMUkNBTEwKLSMgICAgICAgZGVmaW5lIEJPT1NUX0ZUX0NDX0NMUkNBTEwgY2Fs
bGFibGVfYnVpbHRpbgotIyAgICAgICBlbmRpZgotIyAgICAgZW5kaWYKLQotICAgICAgLy8gSW50
ZWwgeDg2IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjYWxsaW5nIGNvbnZlbnRpb25zCi0jICAgICBp
ZmRlZiBfTV9JWDg2Ci0jICAgICAgIGRlZmluZSBCT09TVF9GVF9DT01NT05fWDg2X0NDcyBjYWxs
YWJsZV9idWlsdGluCi0jICAgICAgIGlmIEJPT1NUX01TVkMgPCAxNDAwCi0gICAgICAgICAgLy8g
dmVyc2lvbiA3LjEgaXMgbWlzc2luZyBhIGtleXdvcmQgdG8gc3BlY2lmeSB0aGUgdGhpc2NhbGwg
Y2MgLi4uCi0jICAgICAgICAgaWZuZGVmIEJPT1NUX0ZUX0NDX0lNUExJQ0lUX1RISVNDQUxMCi0j
ICAgICAgICAgZGVmaW5lIEJPT1NUX0ZUX0NDX0lNUExJQ0lUX1RISVNDQUxMIG5vbl92YXJpYWRp
Y3xtZW1iZXJ8Y2FsbGFibGVfYnVpbHRpbgotIyAgICAgICAgIGlmbmRlZiBCT09TVF9GVF9DT05G
SUdfT0sKLSMgICAgICAgICAgIHByYWdtYSBtZXNzYWdlKCJJTkZPfCAvR2QgL0dyIC9HeiB3aWxs
IGNvbXBpbGVyIG9wdGlvbnMgd2lsbCBjYXVzZSIpCi0jICAgICAgICAgICBwcmFnbWEgbWVzc2Fn
ZSgiSU5GT3wgYSBjb21waWxlIGVycm9yLiIpCi0jICAgICAgICAgICBwcmFnbWEgbWVzc2FnZSgi
SU5GT3wgUmVjb25maWd1cmUgQm9vc3QuRnVuY3Rpb25UeXBlcyBpbiB0aGlzIGNhc2UuIikKLSMg
ICAgICAgICAgIHByYWdtYSBtZXNzYWdlKCJJTkZPfCBUaGlzIG1lc3NhZ2UgY2FuIGJlIHN1cHBy
ZXNzZWQgYnkgZGVmaW5pbmciKQotIyAgICAgICAgICAgcHJhZ21hIG1lc3NhZ2UoIklORk98IEJP
T1NUX0ZUX0NPTkZJR19PSy4iKQotIyAgICAgICAgIGVuZGlmCi0jICAgICAgICAgZW5kaWYKLSMg
ICAgICAgZWxzZSAKLSAgICAgICAgICAvLyAuLi5pbnRyb2R1Y2VkIGluIHZlcnNpb24gOAotIyAg
ICAgICAgIGlmbmRlZiBCT09TVF9GVF9DQ19USElTQ0FMTAotIyAgICAgICAgIGRlZmluZSBCT09T
VF9GVF9DQ19USElTQ0FMTCBub25fdmFyaWFkaWN8bWVtYmVyfGNhbGxhYmxlX2J1aWx0aW4KLSMg
ICAgICAgICBlbmRpZgotIyAgICAgICBlbmRpZgotIyAgICAgZW5kaWYKLSMgICBlbmRpZgotCi0j
ZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChCT09TVF9JTlRFTF9MSU5VWCkKLQot
IyAgIGlmIF9fR05VQ19fIDwgMwotIyAgICAgZXJyb3IgInVuc3VwcG9ydGVkIGNvbXBpbGVyIHZl
cnNpb24iCi0jICAgZW5kaWYKLQotIyAgIGlmZGVmIEJPT1NUX0ZUX0FVVE9ERVRFQ1RfQ0FMTElO
R19DT05WRU5USU9OUwotCi0jICAgICBpZiBkZWZpbmVkKF9faTM4Nl9fKQotIyAgICAgICAvLyBz
ZWUgaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0yMDQzOQotIyAg
ICAgICAvLyBzZWUgaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0y
OTMyOAotIyAgICAgICBpZiBCT09TVF9XT1JLQVJPVU5EKF9fR05VQ19fLEJPT1NUX1RFU1RFRF9B
VCg0KSkKLSMgICAgICAgICBpZm5kZWYgQk9PU1RfRlRfQ0NfSU1QTElDSVQgCi0jICAgICAgICAg
ZGVmaW5lIEJPT1NUX0ZUX0NDX0lNUExJQ0lUIG1lbWJlcnxjYWxsYWJsZV9idWlsdGluCi0jICAg
ICAgICAgZW5kaWYKLSMgICAgICAgICBkZWZpbmUgQk9PU1RfRlRfQ09NTU9OX1g4Nl9DQ3Mgbm9u
X21lbWJlcnxjYWxsYWJsZV9idWlsdGluCi0jICAgICAgIGVsc2UKLSMgICAgICAgICBkZWZpbmUg
Qk9PU1RfRlRfQ09NTU9OX1g4Nl9DQ3MgY2FsbGFibGVfYnVpbHRpbgotIyAgICAgICBlbmRpZgot
IyAgICAgZWxzZQotIyAgICAgICBpZm5kZWYgQk9PU1RfRlRfQ0NfSU1QTElDSVQKLSMgICAgICAg
ZGVmaW5lIEJPT1NUX0ZUX0NDX0lNUExJQ0lUIGNhbGxhYmxlX2J1aWx0aW4KLSMgICAgICAgZW5k
aWYKLSMgICAgIGVuZGlmCi0jICAgZW5kaWYKLQotIyAgIGlmIChkZWZpbmVkKEJPT1NUX0ZUX0ND
X0NERUNMKSB8fCBkZWZpbmVkKEJPT1NUX0ZUX0NPTU1PTl9YODZfQ0NzKSkgXAotICAgICAgICAm
JiAhZGVmaW5lZChfX2NkZWNsKQotIyAgICAgZGVmaW5lIF9fY2RlY2wgX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkKLSMgICBlbmRpZgotIyAgIGlmIChkZWZpbmVkKEJPT1NUX0ZUX0NDX1NURENB
TEwpIHx8IGRlZmluZWQoQk9PU1RfRlRfQ09NTU9OX1g4Nl9DQ3MpKSBcCi0gICAgICAgICYmICFk
ZWZpbmVkKF9fc3RkY2FsbCkKLSMgICAgIGRlZmluZSBfX3N0ZGNhbGwgX19hdHRyaWJ1dGVfXygo
X19zdGRjYWxsX18pKQotIyAgIGVuZGlmCi0jICAgaWYgKGRlZmluZWQoQk9PU1RfRlRfQ0NfRkFT
VENBTEwpIHx8IGRlZmluZWQoQk9PU1RfRlRfQ09NTU9OX1g4Nl9DQ3MpKSBcCi0gICAgICAgICYm
ICFkZWZpbmVkKF9fZmFzdGNhbGwpCi0jICAgICBkZWZpbmUgX19mYXN0Y2FsbCBfX2F0dHJpYnV0
ZV9fKChfX2Zhc3RjYWxsX18pKQotIyAgIGVuZGlmCi0KLSNlbGlmIGRlZmluZWQoX19CT1JMQU5E
Q19fKQotCi0jICAgaWYgX19CT1JMQU5EQ19fIDwgMHg1NTAKLSMgICAgIGVycm9yICJ1bnN1cHBv
cnRlZCBjb21waWxlciB2ZXJzaW9uIgotIyAgIGVsaWYgX19CT1JMQU5EQ19fID4gMHg1NjUKLSMg
ICAgIHByYWdtYSBtZXNzYWdlKCJXQVJOSU5HOiBsaWJyYXJ5IHVudGVzdGVkIHdpdGggdGhpcyBj
b21waWxlciB2ZXJzaW9uIikKLSMgICBlbmRpZgotCi0jICAgaWZkZWYgQk9PU1RfRlRfQVVUT0RF
VEVDVF9DQUxMSU5HX0NPTlZFTlRJT05TCi0jICAgICBkZWZpbmUgQk9PU1RfRlRfQ09NTU9OX1g4
Nl9DQ3MgY2FsbGFibGVfYnVpbHRpbgotIyAgIGVuZGlmCi0KLSAgICAvLyBzeW50YWN0aWMgc3Bl
Y2lhbGl0aWVzIG9mIGNjIHNwZWNpZmllcgotIyAgIGRlZmluZSBCT09TVF9GVF9TWU5UQVgocmVz
dWx0LGxwYXJlbixjY19zcGVjLHR5cGVfbW9kLG5hbWUscnBhcmVuKSBcCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQoKSBjY19zcGVjKCkgbHBhcmVuKCkgdHlwZV9tb2QoKSBuYW1lKCkg
cnBhcmVuKCkKLSNlbHNlCi0gICAgLy8gb25seSBlbmFibGUgZGVmYXVsdCBjYWxsaW5nIGNvbnZl
bnRpb24KLSMgICBkZWZpbmUgQk9PU1RfRlRfQ0NfSU1QTElDSVQgY2FsbGFibGVfYnVpbHRpbgot
I2VuZGlmCi0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2NvbmZpZy9jb25maWcuaHBwIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvY29u
ZmlnL2NvbmZpZy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzhlMWU4ZmU2
ODA5NWI0Mzk3Y2IyMjI0MTEzMDJmZjViMjM4MzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvZnVuY3Rpb25fdHlwZXMvY29uZmlnL2NvbmZpZy5ocHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1OSArMCwwIEBACi0KLS8vIChDKSBDb3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlcgotLy8KLS8v
IFVzZSBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgYm9v
c3QgU29mdHdhcmUgTGljZW5zZSwKLS8vIFZlcnNpb24gMS4wLiAoU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNp
Zm5kZWYgQk9PU1RfRlRfQ09ORklHX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9GVF9DT05G
SUdfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbl90eXBlcy9jb25maWcv
Y29tcGlsZXIuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uX3R5cGVzL2NvbmZpZy9jY19u
YW1lcy5ocHA+Ci0KLS8vIG1heGltdW0gYWxsb3dlZCBhcml0eQotI2lmbmRlZiBCT09TVF9GVF9N
QVhfQVJJVFkKLSNkZWZpbmUgQk9PU1RfRlRfTUFYX0FSSVRZIDIwCi0jZW5kaWYKLQotLy8gdGhl
IG1vc3QgY29tbW9uIGNhbGxpbmcgY29udmVudGlvbnMgZm9yIHg4NiBhcmNoaXRlY3R1cmUgY2Fu
IGJlIGVuYWJsZWQgYXQKLS8vIG9uY2UgaW4gdGhlIGNvbXBpbGVyIGNvbmZpZwotI2lmZGVmIEJP
T1NUX0ZUX0NPTU1PTl9YODZfQ0NzCi0jICAgaWZuZGVmIEJPT1NUX0ZUX0NDX0NERUNMCi0jICAg
ZGVmaW5lIEJPT1NUX0ZUX0NDX0NERUNMIEJPT1NUX0ZUX0NPTU1PTl9YODZfQ0NzCi0jICAgZW5k
aWYKLSMgICBpZm5kZWYgQk9PU1RfRlRfQ0NfU1REQ0FMTAotIyAgIGRlZmluZSBCT09TVF9GVF9D
Q19TVERDQUxMIG5vbl92YXJpYWRpY3xCT09TVF9GVF9DT01NT05fWDg2X0NDcwotIyAgIGVuZGlm
Ci0jICAgaWZuZGVmIEJPT1NUX0ZUX0NDX0ZBU1RDQUxMCi0jICAgZGVmaW5lIEJPT1NUX0ZUX0ND
X0ZBU1RDQUxMIG5vbl92YXJpYWRpY3xCT09TVF9GVF9DT01NT05fWDg2X0NDcwotIyAgIGVuZGlm
Ci0jZW5kaWYKLQotLy8gd2hlcmUgdG8gcGxhY2UgdGhlIGNjIHNwZWNpZmllciAodGhlIGNvbW1v
biB3YXkpCi0jaWZuZGVmIEJPT1NUX0ZUX1NZTlRBWAotIyAgIGRlZmluZSBCT09TVF9GVF9TWU5U
QVgocmVzdWx0LGxwYXJlbixjY19zcGVjLHR5cGVfbW9kLG5hbWUscnBhcmVuKSBcCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQoKSBscGFyZW4oKSBjY19zcGVjKCkgdHlwZV9tb2QoKSBu
YW1lKCkgcnBhcmVuKCkKLSNlbmRpZgotCi0vLyBwYXJhbSBmb3IgbnVsbGFyeSBmdW5jdGlvbnMK
LS8vIHNldCB0byAidm9pZCIgZm9yIGNvbXBpbGVycyB0aGF0IHJlcXVpcmUgbnVsbGFyeSBmdW5j
dGlvbnMgdG8gcmVhZCAKLS8vICJSICh2b2lkKSIgaW4gdGVtcGxhdGUgcGFydGlhbCBzcGVjaWFs
aXphdGlvbgotI2lmbmRlZiBCT09TVF9GVF9OVUxMQVJZX1BBUkFNCi0jZGVmaW5lIEJPT1NUX0ZU
X05VTExBUllfUEFSQU0gCi0jZW5kaWYKLQotLy8gdGhlcmUgaXMgYSBwZW5kaW5nIGRlZmVjdCBy
ZXBvcnQgb24gY3YgcXVhbGlmaWVkIGZ1bmN0aW9uIHR5cGVzLCBzbyBzdXBwb3J0Ci0vLyBmb3Ig
dGhlc2UgdHlwZXMgaXMgZGlzYWJsZWQsIHVubGVzcyBmb3IgY29tcGlsZXJzIHdoZXJlIGl0J3Mg
a25vd24gdG8gd29yawotI2lmbmRlZiBCT09TVF9GVF9OT19DVl9GVU5DX1NVUFBPUlQKLSNkZWZp
bmUgQk9PU1RfRlRfTk9fQ1ZfRlVOQ19TVVBQT1JUIDEKLSNlbmRpZgotCi0vLyBmdWxsIHByZXBy
b2Nlc3NpbmcgaW1wbGllcyBwcmVwcm9jZXNzaW5nIG9mIHRoZSBjY3MKLSNpZiBkZWZpbmVkKEJP
T1NUX0ZUX1BSRVBST0NFU1NJTkdfTU9ERSkgJiYgIWRlZmluZWQoQk9PU1RfRlRfQ0NfUFJFUFJP
Q0VTU0lORykKLSMgICBkZWZpbmUgQk9PU1RfRlRfQ0NfUFJFUFJPQ0VTU0lORyAxCi0jZW5kaWYK
LQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9jbGFzc190cmFuc2Zvcm0uaHBwIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0
YWlsL2NsYXNzX3RyYW5zZm9ybS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3
Yjk3YjNmZjdmNzcwYzIzZGNlZTI5ZDdjYWUxMDdkOTY2M2I0ZjAuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0YWlsL2NsYXNzX3RyYW5zZm9ybS5ocHAK
KysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0KLS8vIChDKSBDb3B5cmlnaHQgVG9iaWFz
IFNjaHdpbmdlcgotLy8KLS8vIFVzZSBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUg
c3ViamVjdCB0byB0aGUgYm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vIFZlcnNpb24gMS4wLiAo
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSNpZm5kZWYgQk9PU1RfRlRfREVUQUlMX0NMQVNTX1RSQU5TRk9STV9I
UFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfRlRfREVUQUlMX0NMQVNTX1RSQU5TRk9STV9IUFBf
SU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9hcHBseS5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvbXBsL2Fsd2F5cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2lkZW50aXR5LmhwcD4KLSNp
bmNsdWRlIDxib29zdC9tcGwvcGxhY2Vob2xkZXJzLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3R5
cGVfdHJhaXRzL3JlbW92ZV9jdi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvYWRk
X3BvaW50ZXIuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2FkZF9yZWZlcmVuY2Uu
aHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgZnVuY3Rpb25fdHlwZXMgeyBuYW1l
c3BhY2UgZGV0YWlsIHsKLQotdXNpbmcgbXBsOjpwbGFjZWhvbGRlcnM6Ol87Ci0KLS8vIFRyYW5z
Zm9ybWF0aW9uIG1ldGFmdW5jdGlvbiBmb3IgdGhlIGNsYXNzIHR5cGUgb2YgbWVtYmVyIGZ1bmN0
aW9uIHBvaW50ZXJzLgotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgTD4KLXN0cnVjdCBj
bGFzc190cmFuc2Zvcm0KLXsgdHlwZWRlZiB0eXBlbmFtZSBtcGw6OmFwcGx5MTxMLFQ+Ojp0eXBl
IHR5cGU7IH07Ci0KLQotLy8gV2UgY2FuIHNob3J0LWNpcmN1aXQgdGhlIG1lY2hhbmlzbSBpbXBs
ZW1lbnRlZCBpbiB0aGUgcHJpbWFyeSB0ZW1wbGF0ZSBmb3IgCi0vLyB0aGUgbW9zdCBjb21tb24g
bGFtYmRhIGV4cHJlc3Npb24gYW5kIHNhdmUgYm90aCB0aGUgInVuLWxhbWJkYWluZyIgYW5kIHRo
ZQotLy8gdHlwZSB0cmFpdHMgaW52b2NhdGlvbiAod2Uga25vdyB0aGF0IFQgY2FuIG9ubHkgYmUg
YSBjbGFzcyB0eXBlKS4KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IGNsYXNzX3RyYW5z
Zm9ybTwgVCwgbXBsOjppZGVudGl0eTxfPiA+Ci17IHR5cGVkZWYgVCB0eXBlOyB9OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgY2xhc3NfdHJhbnNmb3JtPCBULCBhZGRfcmVmZXJlbmNl
PF8+ID4gCi17IHR5cGVkZWYgVCAmIHR5cGU7IH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBjbGFzc190cmFuc2Zvcm08IFQsIGFkZF9wb2ludGVyPF8+ID4KLXsgdHlwZWRlZiBUICog
dHlwZTsgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IGNsYXNzX3RyYW5zZm9ybTwg
VCwgcmVtb3ZlX2N2PF8+ID4KLXsgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6cmVtb3ZlX2N2PFQ+
Ojp0eXBlIHR5cGU7IH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBjbGFzc190cmFu
c2Zvcm08IFQsIGFkZF9yZWZlcmVuY2U8IHJlbW92ZV9jdjxfPiA+ID4KLXsgdHlwZWRlZiB0eXBl
bmFtZSBib29zdDo6cmVtb3ZlX2N2PFQ+Ojp0eXBlICYgdHlwZTsgfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IGNsYXNzX3RyYW5zZm9ybTwgVCwgYWRkX3BvaW50ZXI8IHJlbW92ZV9j
djxfPiA+ID4KLXsgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6cmVtb3ZlX2N2PFQ+Ojp0eXBlICog
dHlwZTsgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IGNsYXNz
X3RyYW5zZm9ybTwgVCwgbXBsOjphbHdheXM8VT4gPgoteyB0eXBlZGVmIFUgdHlwZTsgfTsKLQot
Ci19IH0gfSAvLyBuYW1lc3BhY2UgOjpib29zdDo6ZnVuY3Rpb25fdHlwZXM6OmRldGFpbAotCi0j
ZW5kaWYKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0YWlsL2NvbXBvbmVudHNfYXNfbXBsX3NlcXVlbmNlLmhw
cCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5
cGVzL2RldGFpbC9jb21wb25lbnRzX2FzX21wbF9zZXF1ZW5jZS5ocHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDYzN2IxYjUyYmI1NDNmNTBkODcyOTYwZmExMzE1YmQwM2QxZDRiOTUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0YWlsL2Nv
bXBvbmVudHNfYXNfbXBsX3NlcXVlbmNlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCww
IEBACi0KLS8vIChDKSBDb3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlcgotLy8KLS8vIFVzZSBtb2Rp
ZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgYm9vc3QgU29mdHdh
cmUgTGljZW5zZSwKLS8vIFZlcnNpb24gMS4wLiAoU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkuCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZm5kZWYgQk9P
U1RfRlRfREVUQUlMX0NPTVBPTkVOVFNfQVNfTVBMX1NFUVVFTkNFX0hQUF9JTkNMVURFRAotI2Rl
ZmluZSBCT09TVF9GVF9ERVRBSUxfQ09NUE9ORU5UU19BU19NUExfU0VRVUVOQ0VfSFBQX0lOQ0xV
REVECi0KLSNpbmNsdWRlIDxib29zdC9tcGwvc2l6ZV9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L21wbC9lbXB0eV9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9mcm9udF9md2QuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L21wbC9iYWNrX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F0
X2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2JlZ2luX2VuZF9md2QuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21wbC9jbGVhcl9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9wdXNoX2Zy
b250X2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL3BvcF9mcm9udF9md2QuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9wdXNoX2JhY2tfZndkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwv
cG9wX2JhY2tfZndkLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IHNpemVfaW1wbAotPCBmdW5jdGlvbl90eXBlczo6ZGV0YWlsOjpj
b21wb25lbnRzX21wbF9zZXF1ZW5jZV90YWcgPgotewotICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUyA+
IHN0cnVjdCBhcHBseQotICAgIDogbXBsOjpzaXplIDx0eXBlbmFtZSBTOjp0eXBlcz4KLSAgeyB9
OwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IGVtcHR5X2ltcGwKLTwgZnVuY3Rpb25fdHlwZXM6OmRl
dGFpbDo6Y29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnID4KLXsKLSAgdGVtcGxhdGU8IHR5cGVu
YW1lIFMgPiBzdHJ1Y3QgYXBwbHkKLSAgICA6IG1wbDo6ZW1wdHkgPHR5cGVuYW1lIFM6OnR5cGVz
PgotICB7IH07Ci19OwotdGVtcGxhdGU8PiBzdHJ1Y3QgZnJvbnRfaW1wbAotPCBmdW5jdGlvbl90
eXBlczo6ZGV0YWlsOjpjb21wb25lbnRzX21wbF9zZXF1ZW5jZV90YWcgPgotewotICB0ZW1wbGF0
ZTwgdHlwZW5hbWUgUyA+IHN0cnVjdCBhcHBseQotICAgIDogbXBsOjpmcm9udCA8dHlwZW5hbWUg
Uzo6dHlwZXM+Ci0gIHsgfTsKLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBiYWNrX2ltcGwKLTwgZnVu
Y3Rpb25fdHlwZXM6OmRldGFpbDo6Y29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnID4KLXsKLSAg
dGVtcGxhdGU8IHR5cGVuYW1lIFMgPiBzdHJ1Y3QgYXBwbHkKLSAgICA6IG1wbDo6YmFjayA8dHlw
ZW5hbWUgUzo6dHlwZXM+Ci0gIHsgfTsKLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBhdF9pbXBsCi08
IGZ1bmN0aW9uX3R5cGVzOjpkZXRhaWw6OmNvbXBvbmVudHNfbXBsX3NlcXVlbmNlX3RhZyA+Ci17
Ci0gIHRlbXBsYXRlPCB0eXBlbmFtZSBTLCB0eXBlbmFtZSBOID4gc3RydWN0IGFwcGx5Ci0gICAg
OiBtcGw6OmF0IDx0eXBlbmFtZSBTOjp0eXBlcywgTiA+Ci0gIHsgfTsKLX07Ci10ZW1wbGF0ZTw+
IHN0cnVjdCBiZWdpbl9pbXBsCi08IGZ1bmN0aW9uX3R5cGVzOjpkZXRhaWw6OmNvbXBvbmVudHNf
bXBsX3NlcXVlbmNlX3RhZyA+Ci17Ci0gIHRlbXBsYXRlPCB0eXBlbmFtZSBTID4gc3RydWN0IGFw
cGx5Ci0gICAgOiBtcGw6OmJlZ2luIDx0eXBlbmFtZSBTOjp0eXBlcz4KLSAgeyB9OwotfTsKLXRl
bXBsYXRlPD4gc3RydWN0IGVuZF9pbXBsCi08IGZ1bmN0aW9uX3R5cGVzOjpkZXRhaWw6OmNvbXBv
bmVudHNfbXBsX3NlcXVlbmNlX3RhZyA+Ci17Ci0gIHRlbXBsYXRlPCB0eXBlbmFtZSBTID4gc3Ry
dWN0IGFwcGx5Ci0gICAgOiBtcGw6OmVuZCA8dHlwZW5hbWUgUzo6dHlwZXM+Ci0gIHsgfTsKLX07
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBjbGVhcl9pbXBsCi08IGZ1bmN0aW9uX3R5cGVzOjpkZXRhaWw6
OmNvbXBvbmVudHNfbXBsX3NlcXVlbmNlX3RhZyA+Ci17Ci0gIHRlbXBsYXRlPCB0eXBlbmFtZSBT
ID4KLSAgc3RydWN0IGFwcGx5Ci0gICAgOiBTCi0gIHsKLSAgICB0eXBlZGVmIGFwcGx5IHR5cGU7
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6OmNsZWFyPCB0eXBlbmFtZSBTOjp0eXBlcyA+Ojp0
eXBlIHR5cGVzOwotICB9OwotfTsKLXRlbXBsYXRlPD4KLXN0cnVjdCBwdXNoX2Zyb250X2ltcGwK
LTwgZnVuY3Rpb25fdHlwZXM6OmRldGFpbDo6Y29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnID4K
LXsKLSAgdGVtcGxhdGU8IHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQgPgotICBzdHJ1Y3QgYXBwbHkK
LSAgICA6IFMKLSAgeyAKLSAgICB0eXBlZGVmIGFwcGx5IHR5cGU7Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBtcGw6OnB1c2hfZnJvbnQ8IHR5cGVuYW1lIFM6OnR5cGVzLCBUID46OnR5cGUgdHlwZXM7
Ci0gIH07Ci19OwotdGVtcGxhdGU8Pgotc3RydWN0IHBvcF9mcm9udF9pbXBsCi08IGZ1bmN0aW9u
X3R5cGVzOjpkZXRhaWw6OmNvbXBvbmVudHNfbXBsX3NlcXVlbmNlX3RhZyA+Ci17Ci0gIHRlbXBs
YXRlPCB0eXBlbmFtZSBTID4KLSAgc3RydWN0IGFwcGx5Ci0gICAgOiBTCi0gIHsKLSAgICB0eXBl
ZGVmIGFwcGx5IHR5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6OnBvcF9mcm9udDwgdHlw
ZW5hbWUgUzo6dHlwZXMgPjo6dHlwZSB0eXBlczsgCi0gIH07Ci19OwotdGVtcGxhdGU8Pgotc3Ry
dWN0IHB1c2hfYmFja19pbXBsCi08IGZ1bmN0aW9uX3R5cGVzOjpkZXRhaWw6OmNvbXBvbmVudHNf
bXBsX3NlcXVlbmNlX3RhZyA+Ci17Ci0gIHRlbXBsYXRlPCB0eXBlbmFtZSBTLCB0eXBlbmFtZSBU
ID4KLSAgc3RydWN0IGFwcGx5Ci0gICAgOiBTCi0gIHsKLSAgICB0eXBlZGVmIGFwcGx5IHR5cGU7
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6OnB1c2hfYmFjazwgdHlwZW5hbWUgUzo6dHlwZXMs
IFQgPjo6dHlwZSB0eXBlczsgCi0gIH07Ci19OwotdGVtcGxhdGU8Pgotc3RydWN0IHBvcF9iYWNr
X2ltcGwKLTwgZnVuY3Rpb25fdHlwZXM6OmRldGFpbDo6Y29tcG9uZW50c19tcGxfc2VxdWVuY2Vf
dGFnID4KLXsKLSAgdGVtcGxhdGU8IHR5cGVuYW1lIFMgPgotICBzdHJ1Y3QgYXBwbHkKLSAgICA6
IFMKLSAgewotICAgIHR5cGVkZWYgYXBwbHkgdHlwZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIG1w
bDo6cG9wX2JhY2s8IHR5cGVuYW1lIFM6OnR5cGVzID46OnR5cGUgdHlwZXM7IAotICB9OwotfTsK
LQotfSB9IC8vIG5hbWVzcGFjZSA6OmJvb3N0OjptcGwKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVz
L2RldGFpbC9jb21wb25lbnRzX2ltcGwvYXJpdHkxMF8wLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9jb21wb25lbnRz
X2ltcGwvYXJpdHkxMF8wLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk2YzZh
OWY3M2M1M2EyZDEzNjM5Njk2YWU1YTVkYjVkOTZjOGE1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvY29tcG9uZW50c19pbXBsL2FyaXR5MTBf
MC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotCi0vLyAoQykgQ29weXJpZ2h0
IFRvYmlhcyBTY2h3aW5nZXIKLS8vCi0vLyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRp
b24gYXJlIHN1YmplY3QgdG8gdGhlIGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyBWZXJzaW9u
IDEuMC4gKFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBubyBpbmNsdWRlIGd1YXJkcywgdGhpcyBmaWxlIGlz
IGludGVuZGVkIGZvciBtdWx0aXBsZSBpbmNsdXNpb24KLQotLy8gaW5wdXQ6ICBCT09TVF9GVF9z
eW50YXggICAgIHR5cGUgbWFjcm8gdG8gdXNlCi0vLyBpbnB1dDogIEJPT1NUX0ZUX2NjICAgICAg
ICAgZW1wdHkgb3IgY2Mgc3BlY2lmaWVyIAotLy8gaW5wdXQ6ICBCT09TVF9GVF9lbGwgICAgICAg
IGVtcHR5IG9yICIuLi4iCi0vLyBpbnB1dDogIEJPT1NUX0ZUX2N2ICAgICAgICAgZW1wdHkgb3Ig
Y3YgcXVhbGlmaWVycwotLy8gaW5wdXQ6ICBCT09TVF9GVF9mbGFncyAgICAgIHNpbmdsZSBkZWNp
bWFsIGludGVnZXIgZW5jb2RpbmcgdGhlIGZsYWdzCi0vLyBvdXRwdXQ6IEJPT1NUX0ZUX24gICAg
ICAgICAgbnVtYmVyIG9mIGNvbXBvbmVudCB0eXBlcyAoYXJpdHkrMSkKLS8vIG91dHB1dDogQk9P
U1RfRlRfYXJpdHkgICAgICBjdXJyZW50IGFyaXR5Ci0vLyBvdXRwdXQ6IEJPT1NUX0ZUX3R5cGUg
ICAgICAgbWFjcm8gdGhhdCBleHBhbmRzIHRvIHRoZSB0eXBlCi0vLyBvdXRwdXQ6IEJPT1NUX0ZU
X3RwbGFyZ3MocCkgdGVtcGxhdGUgYXJndW1lbnRzIHdpdGggZ2l2ZW4gcHJlZml4Ci0vLyBvdXRw
dXQ6IEJPT1NUX0ZUX3BhcmFtcyhwKSAgcGFyYW1ldGVycyB3aXRoIGdpdmVuIHByZWZpeAotCi10
ZW1wbGF0ZTwgdHlwZW5hbWUgUiwgdHlwZW5hbWUgTD4KLXN0cnVjdCBjb21wb25lbnRzX2ltcGw8
Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKEJPT1NUX0ZUX251
bGxhcnlfcGFyYW0gQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4KLXsKLXR5cGVkZWYgZW5j
b2RlX2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9PU1RfRlRfY2NfaWQ+IGJpdHM7Ci10eXBlZGVmIGNv
bnN0YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4gbWFzazsKLXR5cGVkZWYgZnVuY3Rpb25fdHlwZXM6
OmNvbXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkg
KEJPT1NUX0ZUX251bGxhcnlfcGFyYW0gQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlw
ZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBs
OjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDA+IGZ1bmN0aW9uX2FyaXR5OwotdHlwZWRlZiBtcGw6
OnZlY3RvcjE8IFIgQk9PU1RfRlRfbnVsbGFyeV9wYXJhbSA+IHR5cGVzOwotfTsKLXRlbXBsYXRl
PCB0eXBlbmFtZSBSICwgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIEw+Ci1zdHJ1Y3QgY29tcG9uZW50
c19pbXBsPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMCBC
T09TVF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBMPgotewotdHlwZWRlZiBlbmNvZGVfYml0czxCT09T
VF9GVF9mbGFncyxCT09TVF9GVF9jY19pZD4gYml0czsKLXR5cGVkZWYgY29uc3RhbnQ8Qk9PU1Rf
RlRfZnVsbF9tYXNrPiBtYXNrOwotdHlwZWRlZiBmdW5jdGlvbl90eXBlczo6Y29tcG9uZW50czxC
T09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQX0VNUFRZKSAoVDAgQk9PU1RfRlRf
ZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVu
Y2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDE+IGZ1bmN0
aW9uX2FyaXR5OwotdHlwZWRlZiBtcGw6OnZlY3RvcjI8IFIgLCBUMCA+IHR5cGVzOwotfTsKLXRl
bXBsYXRlPCB0eXBlbmFtZSBSICwgdHlwZW5hbWUgVDAgLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUg
TD4KLXN0cnVjdCBjb21wb25lbnRzX2ltcGw8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBC
T09TVF9QUF9FTVBUWSkgKFQwICwgVDEgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4KLXsK
LXR5cGVkZWYgZW5jb2RlX2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9PU1RfRlRfY2NfaWQ+IGJpdHM7
Ci10eXBlZGVmIGNvbnN0YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4gbWFzazsKLXR5cGVkZWYgZnVu
Y3Rpb25fdHlwZXM6OmNvbXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09T
VF9QUF9FTVBUWSkgKFQwICwgVDEgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsK
LXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjpp
bnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDI+IGZ1bmN0aW9uX2FyaXR5OwotdHlwZWRlZiBtcGw6OnZl
Y3RvcjM8IFIgLCBUMCAsIFQxID4gdHlwZXM7Ci19OwotdGVtcGxhdGU8IHR5cGVuYW1lIFIgLCB0
eXBlbmFtZSBUMCAsIHR5cGVuYW1lIFQxICwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIEw+Ci1zdHJ1
Y3QgY29tcG9uZW50c19pbXBsPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBf
RU1QVFkpIChUMCAsIFQxICwgVDIgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4KLXsKLXR5
cGVkZWYgZW5jb2RlX2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9PU1RfRlRfY2NfaWQ+IGJpdHM7Ci10
eXBlZGVmIGNvbnN0YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4gbWFzazsKLXR5cGVkZWYgZnVuY3Rp
b25fdHlwZXM6OmNvbXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9Q
UF9FTVBUWSkgKFQwICwgVDEgLCBUMiBCT09TVF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBMPiB0eXBl
OwotdHlwZWRlZiBjb21wb25lbnRzX21wbF9zZXF1ZW5jZV90YWcgdGFnOwotdHlwZWRlZiBtcGw6
OmludGVncmFsX2M8c3RkOjpzaXplX3QsMz4gZnVuY3Rpb25fYXJpdHk7Ci10eXBlZGVmIG1wbDo6
dmVjdG9yNDwgUiAsIFQwICwgVDEgLCBUMiA+IHR5cGVzOwotfTsKLXRlbXBsYXRlPCB0eXBlbmFt
ZSBSICwgdHlwZW5hbWUgVDAgLCB0eXBlbmFtZSBUMSAsIHR5cGVuYW1lIFQyICwgdHlwZW5hbWUg
VDMsIHR5cGVuYW1lIEw+Ci1zdHJ1Y3QgY29tcG9uZW50c19pbXBsPEJPT1NUX0ZUX3N5bnRheChC
T09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMCAsIFQxICwgVDIgLCBUMyBCT09TVF9GVF9l
bGwpIEJPT1NUX0ZUX2N2LCBMPgotewotdHlwZWRlZiBlbmNvZGVfYml0czxCT09TVF9GVF9mbGFn
cyxCT09TVF9GVF9jY19pZD4gYml0czsKLXR5cGVkZWYgY29uc3RhbnQ8Qk9PU1RfRlRfZnVsbF9t
YXNrPiBtYXNrOwotdHlwZWRlZiBmdW5jdGlvbl90eXBlczo6Y29tcG9uZW50czxCT09TVF9GVF9z
eW50YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQX0VNUFRZKSAoVDAgLCBUMSAsIFQyICwgVDMgQk9P
U1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxf
c2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDQ+
IGZ1bmN0aW9uX2FyaXR5OwotdHlwZWRlZiBtcGw6OnZlY3RvcjU8IFIgLCBUMCAsIFQxICwgVDIg
LCBUMyA+IHR5cGVzOwotfTsKLXRlbXBsYXRlPCB0eXBlbmFtZSBSICwgdHlwZW5hbWUgVDAgLCB0
eXBlbmFtZSBUMSAsIHR5cGVuYW1lIFQyICwgdHlwZW5hbWUgVDMgLCB0eXBlbmFtZSBUNCwgdHlw
ZW5hbWUgTD4KLXN0cnVjdCBjb21wb25lbnRzX2ltcGw8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZU
X2NjLCBCT09TVF9QUF9FTVBUWSkgKFQwICwgVDEgLCBUMiAsIFQzICwgVDQgQk9PU1RfRlRfZWxs
KSBCT09TVF9GVF9jdiwgTD4KLXsKLXR5cGVkZWYgZW5jb2RlX2JpdHM8Qk9PU1RfRlRfZmxhZ3Ms
Qk9PU1RfRlRfY2NfaWQ+IGJpdHM7Ci10eXBlZGVmIGNvbnN0YW50PEJPT1NUX0ZUX2Z1bGxfbWFz
az4gbWFzazsKLXR5cGVkZWYgZnVuY3Rpb25fdHlwZXM6OmNvbXBvbmVudHM8Qk9PU1RfRlRfc3lu
dGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKFQwICwgVDEgLCBUMiAsIFQzICwgVDQg
Qk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19t
cGxfc2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90
LDU+IGZ1bmN0aW9uX2FyaXR5OwotdHlwZWRlZiBtcGw6OnZlY3RvcjY8IFIgLCBUMCAsIFQxICwg
VDIgLCBUMyAsIFQ0ID4gdHlwZXM7Ci19OwotdGVtcGxhdGU8IHR5cGVuYW1lIFIgLCB0eXBlbmFt
ZSBUMCAsIHR5cGVuYW1lIFQxICwgdHlwZW5hbWUgVDIgLCB0eXBlbmFtZSBUMyAsIHR5cGVuYW1l
IFQ0ICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIEw+Ci1zdHJ1Y3QgY29tcG9uZW50c19pbXBsPEJP
T1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4KLXsKLXR5cGVkZWYg
ZW5jb2RlX2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9PU1RfRlRfY2NfaWQ+IGJpdHM7Ci10eXBlZGVm
IGNvbnN0YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4gbWFzazsKLXR5cGVkZWYgZnVuY3Rpb25fdHlw
ZXM6OmNvbXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBU
WSkgKFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSBCT09TVF9GVF9lbGwpIEJPT1NUX0ZUX2N2
LCBMPiB0eXBlOwotdHlwZWRlZiBjb21wb25lbnRzX21wbF9zZXF1ZW5jZV90YWcgdGFnOwotdHlw
ZWRlZiBtcGw6OmludGVncmFsX2M8c3RkOjpzaXplX3QsNj4gZnVuY3Rpb25fYXJpdHk7Ci10eXBl
ZGVmIG1wbDo6dmVjdG9yNzwgUiAsIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSA+IHR5cGVz
OwotfTsKLXRlbXBsYXRlPCB0eXBlbmFtZSBSICwgdHlwZW5hbWUgVDAgLCB0eXBlbmFtZSBUMSAs
IHR5cGVuYW1lIFQyICwgdHlwZW5hbWUgVDMgLCB0eXBlbmFtZSBUNCAsIHR5cGVuYW1lIFQ1ICwg
dHlwZW5hbWUgVDYsIHR5cGVuYW1lIEw+Ci1zdHJ1Y3QgY29tcG9uZW50c19pbXBsPEJPT1NUX0ZU
X3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMCAsIFQxICwgVDIgLCBUMyAs
IFQ0ICwgVDUgLCBUNiBCT09TVF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBMPgotewotdHlwZWRlZiBl
bmNvZGVfYml0czxCT09TVF9GVF9mbGFncyxCT09TVF9GVF9jY19pZD4gYml0czsKLXR5cGVkZWYg
Y29uc3RhbnQ8Qk9PU1RfRlRfZnVsbF9tYXNrPiBtYXNrOwotdHlwZWRlZiBmdW5jdGlvbl90eXBl
czo6Y29tcG9uZW50czxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQX0VNUFRZ
KSAoVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgQk9PU1RfRlRfZWxsKSBCT09TVF9G
VF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsK
LXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDc+IGZ1bmN0aW9uX2FyaXR5Owot
dHlwZWRlZiBtcGw6OnZlY3Rvcjg8IFIgLCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBU
NiA+IHR5cGVzOwotfTsKLXRlbXBsYXRlPCB0eXBlbmFtZSBSICwgdHlwZW5hbWUgVDAgLCB0eXBl
bmFtZSBUMSAsIHR5cGVuYW1lIFQyICwgdHlwZW5hbWUgVDMgLCB0eXBlbmFtZSBUNCAsIHR5cGVu
YW1lIFQ1ICwgdHlwZW5hbWUgVDYgLCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgTD4KLXN0cnVjdCBj
b21wb25lbnRzX2ltcGw8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBU
WSkgKFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgQk9PU1RfRlRfZWxsKSBC
T09TVF9GVF9jdiwgTD4KLXsKLXR5cGVkZWYgZW5jb2RlX2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9P
U1RfRlRfY2NfaWQ+IGJpdHM7Ci10eXBlZGVmIGNvbnN0YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4g
bWFzazsKLXR5cGVkZWYgZnVuY3Rpb25fdHlwZXM6OmNvbXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4
KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBU
NSAsIFQ2ICwgVDcgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYg
Y29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9j
PHN0ZDo6c2l6ZV90LDg+IGZ1bmN0aW9uX2FyaXR5OwotdHlwZWRlZiBtcGw6OnZlY3Rvcjk8IFIg
LCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ID4gdHlwZXM7Ci19OwotdGVt
cGxhdGU8IHR5cGVuYW1lIFIgLCB0eXBlbmFtZSBUMCAsIHR5cGVuYW1lIFQxICwgdHlwZW5hbWUg
VDIgLCB0eXBlbmFtZSBUMyAsIHR5cGVuYW1lIFQ0ICwgdHlwZW5hbWUgVDUgLCB0eXBlbmFtZSBU
NiAsIHR5cGVuYW1lIFQ3ICwgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIEw+Ci1zdHJ1Y3QgY29tcG9u
ZW50c19pbXBsPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChU
MCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggQk9PU1RfRlRfZWxsKSBC
T09TVF9GVF9jdiwgTD4KLXsKLXR5cGVkZWYgZW5jb2RlX2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9P
U1RfRlRfY2NfaWQ+IGJpdHM7Ci10eXBlZGVmIGNvbnN0YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4g
bWFzazsKLXR5cGVkZWYgZnVuY3Rpb25fdHlwZXM6OmNvbXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4
KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBU
NSAsIFQ2ICwgVDcgLCBUOCBCT09TVF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBMPiB0eXBlOwotdHlw
ZWRlZiBjb21wb25lbnRzX21wbF9zZXF1ZW5jZV90YWcgdGFnOwotdHlwZWRlZiBtcGw6OmludGVn
cmFsX2M8c3RkOjpzaXplX3QsOT4gZnVuY3Rpb25fYXJpdHk7Ci10eXBlZGVmIG1wbDo6dmVjdG9y
MTA8IFIgLCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggPiB0eXBl
czsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlwZW5hbWUgVDEg
LCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQgLCB0eXBlbmFtZSBUNSAs
IHR5cGVuYW1lIFQ2ICwgdHlwZW5hbWUgVDcgLCB0eXBlbmFtZSBUOCAsIHR5cGVuYW1lIFQ5LCB0
eXBlbmFtZSBMPgotc3RydWN0IGNvbXBvbmVudHNfaW1wbDxCT09TVF9GVF9zeW50YXgoQk9PU1Rf
RlRfY2MsIEJPT1NUX1BQX0VNUFRZKSAoVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYg
LCBUNyAsIFQ4ICwgVDkgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4KLXsKLXR5cGVkZWYg
ZW5jb2RlX2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9PU1RfRlRfY2NfaWQ+IGJpdHM7Ci10eXBlZGVm
IGNvbnN0YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4gbWFzazsKLXR5cGVkZWYgZnVuY3Rpb25fdHlw
ZXM6OmNvbXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBU
WSkgKFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5IEJPT1NU
X0ZUX2VsbCkgQk9PU1RfRlRfY3YsIEw+IHR5cGU7Ci10eXBlZGVmIGNvbXBvbmVudHNfbXBsX3Nl
cXVlbmNlX3RhZyB0YWc7Ci10eXBlZGVmIG1wbDo6aW50ZWdyYWxfYzxzdGQ6OnNpemVfdCwxMD4g
ZnVuY3Rpb25fYXJpdHk7Ci10eXBlZGVmIG1wbDo6dmVjdG9yMTE8IFIgLCBUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSA+IHR5cGVzOwotfTsKLQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25f
dHlwZXMvZGV0YWlsL2NvbXBvbmVudHNfaW1wbC9hcml0eTEwXzEuaHBwIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0YWlsL2NvbXBv
bmVudHNfaW1wbC9hcml0eTEwXzEuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
YjA2YTk3YTc4ZjI3M2E0OTJiOTQxY2JkYWU0ZjNjOTg5M2I2ZWIzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9jb21wb25lbnRzX2ltcGwvYXJp
dHkxMF8xLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0KLS8vIChDKSBDb3B5
cmlnaHQgVG9iaWFzIFNjaHdpbmdlcgotLy8KLS8vIFVzZSBtb2RpZmljYXRpb24gYW5kIGRpc3Ry
aWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgYm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vIFZl
cnNpb24gMS4wLiAoU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIG5vIGluY2x1ZGUgZ3VhcmRzLCB0aGlzIGZp
bGUgaXMgaW50ZW5kZWQgZm9yIG11bHRpcGxlIGluY2x1c2lvbgotCi0vLyBpbnB1dDogIEJPT1NU
X0ZUX3N5bnRheCAgICAgdHlwZSBtYWNybyB0byB1c2UKLS8vIGlucHV0OiAgQk9PU1RfRlRfY2Mg
ICAgICAgICBlbXB0eSBvciBjYyBzcGVjaWZpZXIgCi0vLyBpbnB1dDogIEJPT1NUX0ZUX2VsbCAg
ICAgICAgZW1wdHkgb3IgIi4uLiIKLS8vIGlucHV0OiAgQk9PU1RfRlRfY3YgICAgICAgICBlbXB0
eSBvciBjdiBxdWFsaWZpZXJzCi0vLyBpbnB1dDogIEJPT1NUX0ZUX2ZsYWdzICAgICAgc2luZ2xl
IGRlY2ltYWwgaW50ZWdlciBlbmNvZGluZyB0aGUgZmxhZ3MKLS8vIG91dHB1dDogQk9PU1RfRlRf
biAgICAgICAgICBudW1iZXIgb2YgY29tcG9uZW50IHR5cGVzIChhcml0eSsxKQotLy8gb3V0cHV0
OiBCT09TVF9GVF9hcml0eSAgICAgIGN1cnJlbnQgYXJpdHkKLS8vIG91dHB1dDogQk9PU1RfRlRf
dHlwZSAgICAgICBtYWNybyB0aGF0IGV4cGFuZHMgdG8gdGhlIHR5cGUKLS8vIG91dHB1dDogQk9P
U1RfRlRfdHBsYXJncyhwKSB0ZW1wbGF0ZSBhcmd1bWVudHMgd2l0aCBnaXZlbiBwcmVmaXgKLS8v
IG91dHB1dDogQk9PU1RfRlRfcGFyYW1zKHApICBwYXJhbWV0ZXJzIHdpdGggZ2l2ZW4gcHJlZml4
Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBSICwgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIEw+Ci1zdHJ1
Y3QgY29tcG9uZW50c19pbXBsPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBf
RU1QVFkpICggQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4KLXsKLXR5cGVkZWYgZW5jb2Rl
X2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9PU1RfRlRfY2NfaWQ+IGJpdHM7Ci10eXBlZGVmIGNvbnN0
YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4gbWFzazsKLXR5cGVkZWYgZnVuY3Rpb25fdHlwZXM6OmNv
bXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKCBC
T09TVF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBMPiB0eXBlOwotdHlwZWRlZiBjb21wb25lbnRzX21w
bF9zZXF1ZW5jZV90YWcgdGFnOwotdHlwZWRlZiBtcGw6OmludGVncmFsX2M8c3RkOjpzaXplX3Qs
MT4gZnVuY3Rpb25fYXJpdHk7Ci10eXBlZGVmIG1wbDo6dmVjdG9yMjwgUiwgdHlwZW5hbWUgY2xh
c3NfdHJhbnNmb3JtPFQwIEJPT1NUX0ZUX2N2LCBMPiA6OnR5cGUgPiB0eXBlczsKLX07Ci10ZW1w
bGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIEw+
Ci1zdHJ1Y3QgY29tcG9uZW50c19pbXBsPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9P
U1RfUFBfRU1QVFkpIChUMSBCT09TVF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBMPgotewotdHlwZWRl
ZiBlbmNvZGVfYml0czxCT09TVF9GVF9mbGFncyxCT09TVF9GVF9jY19pZD4gYml0czsKLXR5cGVk
ZWYgY29uc3RhbnQ8Qk9PU1RfRlRfZnVsbF9tYXNrPiBtYXNrOwotdHlwZWRlZiBmdW5jdGlvbl90
eXBlczo6Y29tcG9uZW50czxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQX0VN
UFRZKSAoVDEgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29t
cG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0
ZDo6c2l6ZV90LDI+IGZ1bmN0aW9uX2FyaXR5OwotdHlwZWRlZiBtcGw6OnZlY3RvcjM8IFIsIHR5
cGVuYW1lIGNsYXNzX3RyYW5zZm9ybTxUMCBCT09TVF9GVF9jdiwgTD4gOjp0eXBlICwgVDEgPiB0
eXBlczsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlwZW5hbWUg
VDEgLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgTD4KLXN0cnVjdCBjb21wb25lbnRzX2ltcGw8Qk9P
U1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKFQxICwgVDIgQk9PU1Rf
RlRfZWxsKSBCT09TVF9GVF9jdiwgTD4KLXsKLXR5cGVkZWYgZW5jb2RlX2JpdHM8Qk9PU1RfRlRf
ZmxhZ3MsQk9PU1RfRlRfY2NfaWQ+IGJpdHM7Ci10eXBlZGVmIGNvbnN0YW50PEJPT1NUX0ZUX2Z1
bGxfbWFzaz4gbWFzazsKLXR5cGVkZWYgZnVuY3Rpb25fdHlwZXM6OmNvbXBvbmVudHM8Qk9PU1Rf
RlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKFQxICwgVDIgQk9PU1RfRlRf
ZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVu
Y2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDM+IGZ1bmN0
aW9uX2FyaXR5OwotdHlwZWRlZiBtcGw6OnZlY3RvcjQ8IFIsIHR5cGVuYW1lIGNsYXNzX3RyYW5z
Zm9ybTxUMCBCT09TVF9GVF9jdiwgTD4gOjp0eXBlICwgVDEgLCBUMiA+IHR5cGVzOwotfTsKLXRl
bXBsYXRlPCB0eXBlbmFtZSBSICwgdHlwZW5hbWUgVDAgLCB0eXBlbmFtZSBUMSAsIHR5cGVuYW1l
IFQyICwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIEw+Ci1zdHJ1Y3QgY29tcG9uZW50c19pbXBsPEJP
T1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMSAsIFQyICwgVDMg
Qk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4KLXsKLXR5cGVkZWYgZW5jb2RlX2JpdHM8Qk9P
U1RfRlRfZmxhZ3MsQk9PU1RfRlRfY2NfaWQ+IGJpdHM7Ci10eXBlZGVmIGNvbnN0YW50PEJPT1NU
X0ZUX2Z1bGxfbWFzaz4gbWFzazsKLXR5cGVkZWYgZnVuY3Rpb25fdHlwZXM6OmNvbXBvbmVudHM8
Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKFQxICwgVDIgLCBU
MyBCT09TVF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBMPiB0eXBlOwotdHlwZWRlZiBjb21wb25lbnRz
X21wbF9zZXF1ZW5jZV90YWcgdGFnOwotdHlwZWRlZiBtcGw6OmludGVncmFsX2M8c3RkOjpzaXpl
X3QsND4gZnVuY3Rpb25fYXJpdHk7Ci10eXBlZGVmIG1wbDo6dmVjdG9yNTwgUiwgdHlwZW5hbWUg
Y2xhc3NfdHJhbnNmb3JtPFQwIEJPT1NUX0ZUX2N2LCBMPiA6OnR5cGUgLCBUMSAsIFQyICwgVDMg
PiB0eXBlczsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlwZW5h
bWUgVDEgLCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQsIHR5cGVuYW1l
IEw+Ci1zdHJ1Y3QgY29tcG9uZW50c19pbXBsPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywg
Qk9PU1RfUFBfRU1QVFkpIChUMSAsIFQyICwgVDMgLCBUNCBCT09TVF9GVF9lbGwpIEJPT1NUX0ZU
X2N2LCBMPgotewotdHlwZWRlZiBlbmNvZGVfYml0czxCT09TVF9GVF9mbGFncyxCT09TVF9GVF9j
Y19pZD4gYml0czsKLXR5cGVkZWYgY29uc3RhbnQ8Qk9PU1RfRlRfZnVsbF9tYXNrPiBtYXNrOwot
dHlwZWRlZiBmdW5jdGlvbl90eXBlczo6Y29tcG9uZW50czxCT09TVF9GVF9zeW50YXgoQk9PU1Rf
RlRfY2MsIEJPT1NUX1BQX0VNUFRZKSAoVDEgLCBUMiAsIFQzICwgVDQgQk9PU1RfRlRfZWxsKSBC
T09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFn
IHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDU+IGZ1bmN0aW9uX2Fy
aXR5OwotdHlwZWRlZiBtcGw6OnZlY3RvcjY8IFIsIHR5cGVuYW1lIGNsYXNzX3RyYW5zZm9ybTxU
MCBCT09TVF9GVF9jdiwgTD4gOjp0eXBlICwgVDEgLCBUMiAsIFQzICwgVDQgPiB0eXBlczsKLX07
Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlwZW5hbWUgVDEgLCB0eXBl
bmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQgLCB0eXBlbmFtZSBUNSwgdHlwZW5h
bWUgTD4KLXN0cnVjdCBjb21wb25lbnRzX2ltcGw8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2Nj
LCBCT09TVF9QUF9FTVBUWSkgKFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgQk9PU1RfRlRfZWxsKSBC
T09TVF9GVF9jdiwgTD4KLXsKLXR5cGVkZWYgZW5jb2RlX2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9P
U1RfRlRfY2NfaWQ+IGJpdHM7Ci10eXBlZGVmIGNvbnN0YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4g
bWFzazsKLXR5cGVkZWYgZnVuY3Rpb25fdHlwZXM6OmNvbXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4
KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgQk9P
U1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxf
c2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDY+
IGZ1bmN0aW9uX2FyaXR5OwotdHlwZWRlZiBtcGw6OnZlY3Rvcjc8IFIsIHR5cGVuYW1lIGNsYXNz
X3RyYW5zZm9ybTxUMCBCT09TVF9GVF9jdiwgTD4gOjp0eXBlICwgVDEgLCBUMiAsIFQzICwgVDQg
LCBUNSA+IHR5cGVzOwotfTsKLXRlbXBsYXRlPCB0eXBlbmFtZSBSICwgdHlwZW5hbWUgVDAgLCB0
eXBlbmFtZSBUMSAsIHR5cGVuYW1lIFQyICwgdHlwZW5hbWUgVDMgLCB0eXBlbmFtZSBUNCAsIHR5
cGVuYW1lIFQ1ICwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIEw+Ci1zdHJ1Y3QgY29tcG9uZW50c19p
bXBsPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMSAsIFQy
ICwgVDMgLCBUNCAsIFQ1ICwgVDYgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4KLXsKLXR5
cGVkZWYgZW5jb2RlX2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9PU1RfRlRfY2NfaWQ+IGJpdHM7Ci10
eXBlZGVmIGNvbnN0YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4gbWFzazsKLXR5cGVkZWYgZnVuY3Rp
b25fdHlwZXM6OmNvbXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9Q
UF9FTVBUWSkgKFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiBCT09TVF9GVF9lbGwpIEJPT1NU
X0ZUX2N2LCBMPiB0eXBlOwotdHlwZWRlZiBjb21wb25lbnRzX21wbF9zZXF1ZW5jZV90YWcgdGFn
OwotdHlwZWRlZiBtcGw6OmludGVncmFsX2M8c3RkOjpzaXplX3QsNz4gZnVuY3Rpb25fYXJpdHk7
Ci10eXBlZGVmIG1wbDo6dmVjdG9yODwgUiwgdHlwZW5hbWUgY2xhc3NfdHJhbnNmb3JtPFQwIEJP
T1NUX0ZUX2N2LCBMPiA6OnR5cGUgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgPiB0eXBl
czsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlwZW5hbWUgVDEg
LCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQgLCB0eXBlbmFtZSBUNSAs
IHR5cGVuYW1lIFQ2ICwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIEw+Ci1zdHJ1Y3QgY29tcG9uZW50
c19pbXBsPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMSAs
IFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyBCT09TVF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBM
PgotewotdHlwZWRlZiBlbmNvZGVfYml0czxCT09TVF9GVF9mbGFncyxCT09TVF9GVF9jY19pZD4g
Yml0czsKLXR5cGVkZWYgY29uc3RhbnQ8Qk9PU1RfRlRfZnVsbF9tYXNrPiBtYXNrOwotdHlwZWRl
ZiBmdW5jdGlvbl90eXBlczo6Y29tcG9uZW50czxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2Ms
IEJPT1NUX1BQX0VNUFRZKSAoVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgQk9PU1Rf
RlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2Vx
dWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDg+IGZ1
bmN0aW9uX2FyaXR5OwotdHlwZWRlZiBtcGw6OnZlY3Rvcjk8IFIsIHR5cGVuYW1lIGNsYXNzX3Ry
YW5zZm9ybTxUMCBCT09TVF9GVF9jdiwgTD4gOjp0eXBlICwgVDEgLCBUMiAsIFQzICwgVDQgLCBU
NSAsIFQ2ICwgVDcgPiB0eXBlczsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1l
IFQwICwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUg
VDQgLCB0eXBlbmFtZSBUNSAsIHR5cGVuYW1lIFQ2ICwgdHlwZW5hbWUgVDcgLCB0eXBlbmFtZSBU
OCwgdHlwZW5hbWUgTD4KLXN0cnVjdCBjb21wb25lbnRzX2ltcGw8Qk9PU1RfRlRfc3ludGF4KEJP
T1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs
IFQ3ICwgVDggQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4KLXsKLXR5cGVkZWYgZW5jb2Rl
X2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9PU1RfRlRfY2NfaWQ+IGJpdHM7Ci10eXBlZGVmIGNvbnN0
YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4gbWFzazsKLXR5cGVkZWYgZnVuY3Rpb25fdHlwZXM6OmNv
bXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKFQx
ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggQk9PU1RfRlRfZWxsKSBCT09TVF9G
VF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsK
LXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDk+IGZ1bmN0aW9uX2FyaXR5Owot
dHlwZWRlZiBtcGw6OnZlY3RvcjEwPCBSLCB0eXBlbmFtZSBjbGFzc190cmFuc2Zvcm08VDAgQk9P
U1RfRlRfY3YsIEw+IDo6dHlwZSAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwg
VDggPiB0eXBlczsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlw
ZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQgLCB0eXBl
bmFtZSBUNSAsIHR5cGVuYW1lIFQ2ICwgdHlwZW5hbWUgVDcgLCB0eXBlbmFtZSBUOCAsIHR5cGVu
YW1lIFQ5LCB0eXBlbmFtZSBMPgotc3RydWN0IGNvbXBvbmVudHNfaW1wbDxCT09TVF9GVF9zeW50
YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQX0VNUFRZKSAoVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAs
IFQ2ICwgVDcgLCBUOCAsIFQ5IEJPT1NUX0ZUX2VsbCkgQk9PU1RfRlRfY3YsIEw+Ci17Ci10eXBl
ZGVmIGVuY29kZV9iaXRzPEJPT1NUX0ZUX2ZsYWdzLEJPT1NUX0ZUX2NjX2lkPiBiaXRzOwotdHlw
ZWRlZiBjb25zdGFudDxCT09TVF9GVF9mdWxsX21hc2s+IG1hc2s7Ci10eXBlZGVmIGZ1bmN0aW9u
X3R5cGVzOjpjb21wb25lbnRzPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBf
RU1QVFkpIChUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgQk9PU1Rf
RlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2Vx
dWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDEwPiBm
dW5jdGlvbl9hcml0eTsKLXR5cGVkZWYgbXBsOjp2ZWN0b3IxMTwgUiwgdHlwZW5hbWUgY2xhc3Nf
dHJhbnNmb3JtPFQwIEJPT1NUX0ZUX2N2LCBMPiA6OnR5cGUgLCBUMSAsIFQyICwgVDMgLCBUNCAs
IFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgPiB0eXBlczsKLX07Ci0KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFp
bC9jb21wb25lbnRzX2ltcGwvYXJpdHkyMF8wLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9jb21wb25lbnRzX2ltcGwv
YXJpdHkyMF8wLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZiMmNhOGE0NDJh
YTNmN2UzZGFjMDQ0ODc5ZWQxYjRmYjg3MjliMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvY29tcG9uZW50c19pbXBsL2FyaXR5MjBfMC5ocHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotCi0vLyAoQykgQ29weXJpZ2h0IFRvYmlh
cyBTY2h3aW5nZXIKLS8vCi0vLyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJl
IHN1YmplY3QgdG8gdGhlIGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyBWZXJzaW9uIDEuMC4g
KFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0vLyBubyBpbmNsdWRlIGd1YXJkcywgdGhpcyBmaWxlIGlzIGludGVu
ZGVkIGZvciBtdWx0aXBsZSBpbmNsdXNpb24KLQotLy8gaW5wdXQ6ICBCT09TVF9GVF9zeW50YXgg
ICAgIHR5cGUgbWFjcm8gdG8gdXNlCi0vLyBpbnB1dDogIEJPT1NUX0ZUX2NjICAgICAgICAgZW1w
dHkgb3IgY2Mgc3BlY2lmaWVyIAotLy8gaW5wdXQ6ICBCT09TVF9GVF9lbGwgICAgICAgIGVtcHR5
IG9yICIuLi4iCi0vLyBpbnB1dDogIEJPT1NUX0ZUX2N2ICAgICAgICAgZW1wdHkgb3IgY3YgcXVh
bGlmaWVycwotLy8gaW5wdXQ6ICBCT09TVF9GVF9mbGFncyAgICAgIHNpbmdsZSBkZWNpbWFsIGlu
dGVnZXIgZW5jb2RpbmcgdGhlIGZsYWdzCi0vLyBvdXRwdXQ6IEJPT1NUX0ZUX24gICAgICAgICAg
bnVtYmVyIG9mIGNvbXBvbmVudCB0eXBlcyAoYXJpdHkrMSkKLS8vIG91dHB1dDogQk9PU1RfRlRf
YXJpdHkgICAgICBjdXJyZW50IGFyaXR5Ci0vLyBvdXRwdXQ6IEJPT1NUX0ZUX3R5cGUgICAgICAg
bWFjcm8gdGhhdCBleHBhbmRzIHRvIHRoZSB0eXBlCi0vLyBvdXRwdXQ6IEJPT1NUX0ZUX3RwbGFy
Z3MocCkgdGVtcGxhdGUgYXJndW1lbnRzIHdpdGggZ2l2ZW4gcHJlZml4Ci0vLyBvdXRwdXQ6IEJP
T1NUX0ZUX3BhcmFtcyhwKSAgcGFyYW1ldGVycyB3aXRoIGdpdmVuIHByZWZpeAotCi0jIGluY2x1
ZGUgPGJvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9jb21wb25lbnRzX2ltcGwvYXJpdHkxMF8w
LmhwcD4KLXRlbXBsYXRlPCB0eXBlbmFtZSBSICwgdHlwZW5hbWUgVDAgLCB0eXBlbmFtZSBUMSAs
IHR5cGVuYW1lIFQyICwgdHlwZW5hbWUgVDMgLCB0eXBlbmFtZSBUNCAsIHR5cGVuYW1lIFQ1ICwg
dHlwZW5hbWUgVDYgLCB0eXBlbmFtZSBUNyAsIHR5cGVuYW1lIFQ4ICwgdHlwZW5hbWUgVDkgLCB0
eXBlbmFtZSBUMTAsIHR5cGVuYW1lIEw+Ci1zdHJ1Y3QgY29tcG9uZW50c19pbXBsPEJPT1NUX0ZU
X3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMCAsIFQxICwgVDIgLCBUMyAs
IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCBCT09TVF9GVF9lbGwpIEJPT1NUX0ZU
X2N2LCBMPgotewotdHlwZWRlZiBlbmNvZGVfYml0czxCT09TVF9GVF9mbGFncyxCT09TVF9GVF9j
Y19pZD4gYml0czsKLXR5cGVkZWYgY29uc3RhbnQ8Qk9PU1RfRlRfZnVsbF9tYXNrPiBtYXNrOwot
dHlwZWRlZiBmdW5jdGlvbl90eXBlczo6Y29tcG9uZW50czxCT09TVF9GVF9zeW50YXgoQk9PU1Rf
RlRfY2MsIEJPT1NUX1BQX0VNUFRZKSAoVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYg
LCBUNyAsIFQ4ICwgVDkgLCBUMTAgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsK
LXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjpp
bnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDExPiBmdW5jdGlvbl9hcml0eTsKLXR5cGVkZWYgbXBsOjp2
ZWN0b3IxMjwgUiAsIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAs
IFQ5ICwgVDEwID4gdHlwZXM7Ci19OwotdGVtcGxhdGU8IHR5cGVuYW1lIFIgLCB0eXBlbmFtZSBU
MCAsIHR5cGVuYW1lIFQxICwgdHlwZW5hbWUgVDIgLCB0eXBlbmFtZSBUMyAsIHR5cGVuYW1lIFQ0
ICwgdHlwZW5hbWUgVDUgLCB0eXBlbmFtZSBUNiAsIHR5cGVuYW1lIFQ3ICwgdHlwZW5hbWUgVDgg
LCB0eXBlbmFtZSBUOSAsIHR5cGVuYW1lIFQxMCAsIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgTD4K
LXN0cnVjdCBjb21wb25lbnRzX2ltcGw8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09T
VF9QUF9FTVBUWSkgKFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAs
IFQ5ICwgVDEwICwgVDExIEJPT1NUX0ZUX2VsbCkgQk9PU1RfRlRfY3YsIEw+Ci17Ci10eXBlZGVm
IGVuY29kZV9iaXRzPEJPT1NUX0ZUX2ZsYWdzLEJPT1NUX0ZUX2NjX2lkPiBiaXRzOwotdHlwZWRl
ZiBjb25zdGFudDxCT09TVF9GVF9mdWxsX21hc2s+IG1hc2s7Ci10eXBlZGVmIGZ1bmN0aW9uX3R5
cGVzOjpjb21wb25lbnRzPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1Q
VFkpIChUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQx
MCAsIFQxMSBCT09TVF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBMPiB0eXBlOwotdHlwZWRlZiBjb21w
b25lbnRzX21wbF9zZXF1ZW5jZV90YWcgdGFnOwotdHlwZWRlZiBtcGw6OmludGVncmFsX2M8c3Rk
OjpzaXplX3QsMTI+IGZ1bmN0aW9uX2FyaXR5OwotdHlwZWRlZiBtcGw6OnZlY3RvcjEzPCBSICwg
VDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBU
MTEgPiB0eXBlczsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlw
ZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQgLCB0eXBl
bmFtZSBUNSAsIHR5cGVuYW1lIFQ2ICwgdHlwZW5hbWUgVDcgLCB0eXBlbmFtZSBUOCAsIHR5cGVu
YW1lIFQ5ICwgdHlwZW5hbWUgVDEwICwgdHlwZW5hbWUgVDExICwgdHlwZW5hbWUgVDEyLCB0eXBl
bmFtZSBMPgotc3RydWN0IGNvbXBvbmVudHNfaW1wbDxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRf
Y2MsIEJPT1NUX1BQX0VNUFRZKSAoVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBU
NyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwg
TD4KLXsKLXR5cGVkZWYgZW5jb2RlX2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9PU1RfRlRfY2NfaWQ+
IGJpdHM7Ci10eXBlZGVmIGNvbnN0YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4gbWFzazsKLXR5cGVk
ZWYgZnVuY3Rpb25fdHlwZXM6OmNvbXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2Nj
LCBCT09TVF9QUF9FTVBUWSkgKFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcg
LCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyIEJPT1NUX0ZUX2VsbCkgQk9PU1RfRlRfY3YsIEw+
IHR5cGU7Ci10eXBlZGVmIGNvbXBvbmVudHNfbXBsX3NlcXVlbmNlX3RhZyB0YWc7Ci10eXBlZGVm
IG1wbDo6aW50ZWdyYWxfYzxzdGQ6OnNpemVfdCwxMz4gZnVuY3Rpb25fYXJpdHk7Ci10eXBlZGVm
IG1wbDo6dmVjdG9yMTQ8IFIgLCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3
ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiA+IHR5cGVzOwotfTsKLXRlbXBsYXRlPCB0eXBl
bmFtZSBSICwgdHlwZW5hbWUgVDAgLCB0eXBlbmFtZSBUMSAsIHR5cGVuYW1lIFQyICwgdHlwZW5h
bWUgVDMgLCB0eXBlbmFtZSBUNCAsIHR5cGVuYW1lIFQ1ICwgdHlwZW5hbWUgVDYgLCB0eXBlbmFt
ZSBUNyAsIHR5cGVuYW1lIFQ4ICwgdHlwZW5hbWUgVDkgLCB0eXBlbmFtZSBUMTAgLCB0eXBlbmFt
ZSBUMTEgLCB0eXBlbmFtZSBUMTIgLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIEw+Ci1zdHJ1Y3Qg
Y29tcG9uZW50c19pbXBsPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1Q
VFkpIChUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQx
MCAsIFQxMSAsIFQxMiAsIFQxMyBCT09TVF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBMPgotewotdHlw
ZWRlZiBlbmNvZGVfYml0czxCT09TVF9GVF9mbGFncyxCT09TVF9GVF9jY19pZD4gYml0czsKLXR5
cGVkZWYgY29uc3RhbnQ8Qk9PU1RfRlRfZnVsbF9tYXNrPiBtYXNrOwotdHlwZWRlZiBmdW5jdGlv
bl90eXBlczo6Y29tcG9uZW50czxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQ
X0VNUFRZKSAoVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkg
LCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlw
ZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBs
OjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDE0PiBmdW5jdGlvbl9hcml0eTsKLXR5cGVkZWYgbXBs
Ojp2ZWN0b3IxNTwgUiAsIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBU
OCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzID4gdHlwZXM7Ci19OwotdGVtcGxhdGU8IHR5
cGVuYW1lIFIgLCB0eXBlbmFtZSBUMCAsIHR5cGVuYW1lIFQxICwgdHlwZW5hbWUgVDIgLCB0eXBl
bmFtZSBUMyAsIHR5cGVuYW1lIFQ0ICwgdHlwZW5hbWUgVDUgLCB0eXBlbmFtZSBUNiAsIHR5cGVu
YW1lIFQ3ICwgdHlwZW5hbWUgVDggLCB0eXBlbmFtZSBUOSAsIHR5cGVuYW1lIFQxMCAsIHR5cGVu
YW1lIFQxMSAsIHR5cGVuYW1lIFQxMiAsIHR5cGVuYW1lIFQxMyAsIHR5cGVuYW1lIFQxNCwgdHlw
ZW5hbWUgTD4KLXN0cnVjdCBjb21wb25lbnRzX2ltcGw8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZU
X2NjLCBCT09TVF9QUF9FTVBUWSkgKFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwg
VDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0IEJPT1NUX0ZUX2VsbCkg
Qk9PU1RfRlRfY3YsIEw+Ci17Ci10eXBlZGVmIGVuY29kZV9iaXRzPEJPT1NUX0ZUX2ZsYWdzLEJP
T1NUX0ZUX2NjX2lkPiBiaXRzOwotdHlwZWRlZiBjb25zdGFudDxCT09TVF9GVF9mdWxsX21hc2s+
IG1hc2s7Ci10eXBlZGVmIGZ1bmN0aW9uX3R5cGVzOjpjb21wb25lbnRzPEJPT1NUX0ZUX3N5bnRh
eChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg
VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCBCT09T
VF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBMPiB0eXBlOwotdHlwZWRlZiBjb21wb25lbnRzX21wbF9z
ZXF1ZW5jZV90YWcgdGFnOwotdHlwZWRlZiBtcGw6OmludGVncmFsX2M8c3RkOjpzaXplX3QsMTU+
IGZ1bmN0aW9uX2FyaXR5OwotdHlwZWRlZiBtcGw6OnZlY3RvcjE2PCBSICwgVDAgLCBUMSAsIFQy
ICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBU
MTMgLCBUMTQgPiB0eXBlczsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQw
ICwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQg
LCB0eXBlbmFtZSBUNSAsIHR5cGVuYW1lIFQ2ICwgdHlwZW5hbWUgVDcgLCB0eXBlbmFtZSBUOCAs
IHR5cGVuYW1lIFQ5ICwgdHlwZW5hbWUgVDEwICwgdHlwZW5hbWUgVDExICwgdHlwZW5hbWUgVDEy
ICwgdHlwZW5hbWUgVDEzICwgdHlwZW5hbWUgVDE0ICwgdHlwZW5hbWUgVDE1LCB0eXBlbmFtZSBM
Pgotc3RydWN0IGNvbXBvbmVudHNfaW1wbDxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJP
T1NUX1BQX0VNUFRZKSAoVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4
ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgQk9PU1RfRlRfZWxsKSBC
T09TVF9GVF9jdiwgTD4KLXsKLXR5cGVkZWYgZW5jb2RlX2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9P
U1RfRlRfY2NfaWQ+IGJpdHM7Ci10eXBlZGVmIGNvbnN0YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4g
bWFzazsKLXR5cGVkZWYgZnVuY3Rpb25fdHlwZXM6OmNvbXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4
KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBU
NSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1
IEJPT1NUX0ZUX2VsbCkgQk9PU1RfRlRfY3YsIEw+IHR5cGU7Ci10eXBlZGVmIGNvbXBvbmVudHNf
bXBsX3NlcXVlbmNlX3RhZyB0YWc7Ci10eXBlZGVmIG1wbDo6aW50ZWdyYWxfYzxzdGQ6OnNpemVf
dCwxNj4gZnVuY3Rpb25fYXJpdHk7Ci10eXBlZGVmIG1wbDo6dmVjdG9yMTc8IFIgLCBUMCAsIFQx
ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQx
MiAsIFQxMyAsIFQxNCAsIFQxNSA+IHR5cGVzOwotfTsKLXRlbXBsYXRlPCB0eXBlbmFtZSBSICwg
dHlwZW5hbWUgVDAgLCB0eXBlbmFtZSBUMSAsIHR5cGVuYW1lIFQyICwgdHlwZW5hbWUgVDMgLCB0
eXBlbmFtZSBUNCAsIHR5cGVuYW1lIFQ1ICwgdHlwZW5hbWUgVDYgLCB0eXBlbmFtZSBUNyAsIHR5
cGVuYW1lIFQ4ICwgdHlwZW5hbWUgVDkgLCB0eXBlbmFtZSBUMTAgLCB0eXBlbmFtZSBUMTEgLCB0
eXBlbmFtZSBUMTIgLCB0eXBlbmFtZSBUMTMgLCB0eXBlbmFtZSBUMTQgLCB0eXBlbmFtZSBUMTUg
LCB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIEw+Ci1zdHJ1Y3QgY29tcG9uZW50c19pbXBsPEJPT1NU
X0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMCAsIFQxICwgVDIgLCBU
MyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAs
IFQxNCAsIFQxNSAsIFQxNiBCT09TVF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBMPgotewotdHlwZWRl
ZiBlbmNvZGVfYml0czxCT09TVF9GVF9mbGFncyxCT09TVF9GVF9jY19pZD4gYml0czsKLXR5cGVk
ZWYgY29uc3RhbnQ8Qk9PU1RfRlRfZnVsbF9tYXNrPiBtYXNrOwotdHlwZWRlZiBmdW5jdGlvbl90
eXBlczo6Y29tcG9uZW50czxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQX0VN
UFRZKSAoVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBU
MTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgQk9PU1RfRlRfZWxsKSBCT09T
VF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRh
ZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDE3PiBmdW5jdGlvbl9hcml0
eTsKLXR5cGVkZWYgbXBsOjp2ZWN0b3IxODwgUiAsIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBU
NSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1
ICwgVDE2ID4gdHlwZXM7Ci19OwotdGVtcGxhdGU8IHR5cGVuYW1lIFIgLCB0eXBlbmFtZSBUMCAs
IHR5cGVuYW1lIFQxICwgdHlwZW5hbWUgVDIgLCB0eXBlbmFtZSBUMyAsIHR5cGVuYW1lIFQ0ICwg
dHlwZW5hbWUgVDUgLCB0eXBlbmFtZSBUNiAsIHR5cGVuYW1lIFQ3ICwgdHlwZW5hbWUgVDggLCB0
eXBlbmFtZSBUOSAsIHR5cGVuYW1lIFQxMCAsIHR5cGVuYW1lIFQxMSAsIHR5cGVuYW1lIFQxMiAs
IHR5cGVuYW1lIFQxMyAsIHR5cGVuYW1lIFQxNCAsIHR5cGVuYW1lIFQxNSAsIHR5cGVuYW1lIFQx
NiAsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgTD4KLXN0cnVjdCBjb21wb25lbnRzX2ltcGw8Qk9P
U1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKFQwICwgVDEgLCBUMiAs
IFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEz
ICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3IEJPT1NUX0ZUX2VsbCkgQk9PU1RfRlRfY3YsIEw+Ci17
Ci10eXBlZGVmIGVuY29kZV9iaXRzPEJPT1NUX0ZUX2ZsYWdzLEJPT1NUX0ZUX2NjX2lkPiBiaXRz
OwotdHlwZWRlZiBjb25zdGFudDxCT09TVF9GVF9mdWxsX21hc2s+IG1hc2s7Ci10eXBlZGVmIGZ1
bmN0aW9uX3R5cGVzOjpjb21wb25lbnRzPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9P
U1RfUFBfRU1QVFkpIChUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDgg
LCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyBCT09T
VF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBMPiB0eXBlOwotdHlwZWRlZiBjb21wb25lbnRzX21wbF9z
ZXF1ZW5jZV90YWcgdGFnOwotdHlwZWRlZiBtcGw6OmludGVncmFsX2M8c3RkOjpzaXplX3QsMTg+
IGZ1bmN0aW9uX2FyaXR5OwotdHlwZWRlZiBtcGw6OnZlY3RvcjE5PCBSICwgVDAgLCBUMSAsIFQy
ICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBU
MTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgPiB0eXBlczsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5h
bWUgUiAsIHR5cGVuYW1lIFQwICwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1l
IFQzICwgdHlwZW5hbWUgVDQgLCB0eXBlbmFtZSBUNSAsIHR5cGVuYW1lIFQ2ICwgdHlwZW5hbWUg
VDcgLCB0eXBlbmFtZSBUOCAsIHR5cGVuYW1lIFQ5ICwgdHlwZW5hbWUgVDEwICwgdHlwZW5hbWUg
VDExICwgdHlwZW5hbWUgVDEyICwgdHlwZW5hbWUgVDEzICwgdHlwZW5hbWUgVDE0ICwgdHlwZW5h
bWUgVDE1ICwgdHlwZW5hbWUgVDE2ICwgdHlwZW5hbWUgVDE3ICwgdHlwZW5hbWUgVDE4LCB0eXBl
bmFtZSBMPgotc3RydWN0IGNvbXBvbmVudHNfaW1wbDxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRf
Y2MsIEJPT1NUX1BQX0VNUFRZKSAoVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBU
NyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBU
MTcgLCBUMTggQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4KLXsKLXR5cGVkZWYgZW5jb2Rl
X2JpdHM8Qk9PU1RfRlRfZmxhZ3MsQk9PU1RfRlRfY2NfaWQ+IGJpdHM7Ci10eXBlZGVmIGNvbnN0
YW50PEJPT1NUX0ZUX2Z1bGxfbWFzaz4gbWFzazsKLXR5cGVkZWYgZnVuY3Rpb25fdHlwZXM6OmNv
bXBvbmVudHM8Qk9PU1RfRlRfc3ludGF4KEJPT1NUX0ZUX2NjLCBCT09TVF9QUF9FTVBUWSkgKFQw
ICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDEx
ICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4IEJPT1NUX0ZUX2VsbCkg
Qk9PU1RfRlRfY3YsIEw+IHR5cGU7Ci10eXBlZGVmIGNvbXBvbmVudHNfbXBsX3NlcXVlbmNlX3Rh
ZyB0YWc7Ci10eXBlZGVmIG1wbDo6aW50ZWdyYWxfYzxzdGQ6OnNpemVfdCwxOT4gZnVuY3Rpb25f
YXJpdHk7Ci10eXBlZGVmIG1wbDo6dmVjdG9yMjA8IFIgLCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0
ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAs
IFQxNSAsIFQxNiAsIFQxNyAsIFQxOCA+IHR5cGVzOwotfTsKLXRlbXBsYXRlPCB0eXBlbmFtZSBS
ICwgdHlwZW5hbWUgVDAgLCB0eXBlbmFtZSBUMSAsIHR5cGVuYW1lIFQyICwgdHlwZW5hbWUgVDMg
LCB0eXBlbmFtZSBUNCAsIHR5cGVuYW1lIFQ1ICwgdHlwZW5hbWUgVDYgLCB0eXBlbmFtZSBUNyAs
IHR5cGVuYW1lIFQ4ICwgdHlwZW5hbWUgVDkgLCB0eXBlbmFtZSBUMTAgLCB0eXBlbmFtZSBUMTEg
LCB0eXBlbmFtZSBUMTIgLCB0eXBlbmFtZSBUMTMgLCB0eXBlbmFtZSBUMTQgLCB0eXBlbmFtZSBU
MTUgLCB0eXBlbmFtZSBUMTYgLCB0eXBlbmFtZSBUMTcgLCB0eXBlbmFtZSBUMTggLCB0eXBlbmFt
ZSBUMTksIHR5cGVuYW1lIEw+Ci1zdHJ1Y3QgY29tcG9uZW50c19pbXBsPEJPT1NUX0ZUX3N5bnRh
eChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg
VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQx
NSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSBCT09TVF9GVF9lbGwpIEJPT1NUX0ZUX2N2LCBMPgot
ewotdHlwZWRlZiBlbmNvZGVfYml0czxCT09TVF9GVF9mbGFncyxCT09TVF9GVF9jY19pZD4gYml0
czsKLXR5cGVkZWYgY29uc3RhbnQ8Qk9PU1RfRlRfZnVsbF9tYXNrPiBtYXNrOwotdHlwZWRlZiBm
dW5jdGlvbl90eXBlczo6Y29tcG9uZW50czxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJP
T1NUX1BQX0VNUFRZKSAoVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4
ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBU
MTggLCBUMTkgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29t
cG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0
ZDo6c2l6ZV90LDIwPiBmdW5jdGlvbl9hcml0eTsKLXR5cGVkZWYgbXBsOjp2ZWN0b3IyMTwgUiAs
IFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwg
VDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwgVDE5ID4gdHlw
ZXM7Ci19OwotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvY29tcG9uZW50c19pbXBsL2FyaXR5MjBfMS5o
cHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90
eXBlcy9kZXRhaWwvY29tcG9uZW50c19pbXBsL2FyaXR5MjBfMS5ocHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDE2ODhlNmIzZWQyZmQwZjE5MGU3NDZhMjM3ZjhiNmJmZmU1ZmMzOTEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0YWlsL2Nv
bXBvbmVudHNfaW1wbC9hcml0eTIwXzEuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAg
QEAKLQotLy8gKEMpIENvcHlyaWdodCBUb2JpYXMgU2Nod2luZ2VyCi0vLwotLy8gVXNlIG1vZGlm
aWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBib29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLAotLy8gVmVyc2lvbiAxLjAuIChTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KS4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gbm8gaW5jbHVk
ZSBndWFyZHMsIHRoaXMgZmlsZSBpcyBpbnRlbmRlZCBmb3IgbXVsdGlwbGUgaW5jbHVzaW9uCi0K
LS8vIGlucHV0OiAgQk9PU1RfRlRfc3ludGF4ICAgICB0eXBlIG1hY3JvIHRvIHVzZQotLy8gaW5w
dXQ6ICBCT09TVF9GVF9jYyAgICAgICAgIGVtcHR5IG9yIGNjIHNwZWNpZmllciAKLS8vIGlucHV0
OiAgQk9PU1RfRlRfZWxsICAgICAgICBlbXB0eSBvciAiLi4uIgotLy8gaW5wdXQ6ICBCT09TVF9G
VF9jdiAgICAgICAgIGVtcHR5IG9yIGN2IHF1YWxpZmllcnMKLS8vIGlucHV0OiAgQk9PU1RfRlRf
ZmxhZ3MgICAgICBzaW5nbGUgZGVjaW1hbCBpbnRlZ2VyIGVuY29kaW5nIHRoZSBmbGFncwotLy8g
b3V0cHV0OiBCT09TVF9GVF9uICAgICAgICAgIG51bWJlciBvZiBjb21wb25lbnQgdHlwZXMgKGFy
aXR5KzEpCi0vLyBvdXRwdXQ6IEJPT1NUX0ZUX2FyaXR5ICAgICAgY3VycmVudCBhcml0eQotLy8g
b3V0cHV0OiBCT09TVF9GVF90eXBlICAgICAgIG1hY3JvIHRoYXQgZXhwYW5kcyB0byB0aGUgdHlw
ZQotLy8gb3V0cHV0OiBCT09TVF9GVF90cGxhcmdzKHApIHRlbXBsYXRlIGFyZ3VtZW50cyB3aXRo
IGdpdmVuIHByZWZpeAotLy8gb3V0cHV0OiBCT09TVF9GVF9wYXJhbXMocCkgIHBhcmFtZXRlcnMg
d2l0aCBnaXZlbiBwcmVmaXgKLQotIyBpbmNsdWRlIDxib29zdC9mdW5jdGlvbl90eXBlcy9kZXRh
aWwvY29tcG9uZW50c19pbXBsL2FyaXR5MTBfMS5ocHA+Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAs
IHR5cGVuYW1lIFQwICwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwg
dHlwZW5hbWUgVDQgLCB0eXBlbmFtZSBUNSAsIHR5cGVuYW1lIFQ2ICwgdHlwZW5hbWUgVDcgLCB0
eXBlbmFtZSBUOCAsIHR5cGVuYW1lIFQ5ICwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBMPgotc3Ry
dWN0IGNvbXBvbmVudHNfaW1wbDxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQ
X0VNUFRZKSAoVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEw
IEJPT1NUX0ZUX2VsbCkgQk9PU1RfRlRfY3YsIEw+Ci17Ci10eXBlZGVmIGVuY29kZV9iaXRzPEJP
T1NUX0ZUX2ZsYWdzLEJPT1NUX0ZUX2NjX2lkPiBiaXRzOwotdHlwZWRlZiBjb25zdGFudDxCT09T
VF9GVF9mdWxsX21hc2s+IG1hc2s7Ci10eXBlZGVmIGZ1bmN0aW9uX3R5cGVzOjpjb21wb25lbnRz
PEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMSAsIFQyICwg
VDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgQk9PU1RfRlRfZWxsKSBCT09T
VF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRh
ZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDExPiBmdW5jdGlvbl9hcml0
eTsKLXR5cGVkZWYgbXBsOjp2ZWN0b3IxMjwgUiwgdHlwZW5hbWUgY2xhc3NfdHJhbnNmb3JtPFQw
IEJPT1NUX0ZUX2N2LCBMPiA6OnR5cGUgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBU
NyAsIFQ4ICwgVDkgLCBUMTAgPiB0eXBlczsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5
cGVuYW1lIFQwICwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlw
ZW5hbWUgVDQgLCB0eXBlbmFtZSBUNSAsIHR5cGVuYW1lIFQ2ICwgdHlwZW5hbWUgVDcgLCB0eXBl
bmFtZSBUOCAsIHR5cGVuYW1lIFQ5ICwgdHlwZW5hbWUgVDEwICwgdHlwZW5hbWUgVDExLCB0eXBl
bmFtZSBMPgotc3RydWN0IGNvbXBvbmVudHNfaW1wbDxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRf
Y2MsIEJPT1NUX1BQX0VNUFRZKSAoVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBU
OCAsIFQ5ICwgVDEwICwgVDExIEJPT1NUX0ZUX2VsbCkgQk9PU1RfRlRfY3YsIEw+Ci17Ci10eXBl
ZGVmIGVuY29kZV9iaXRzPEJPT1NUX0ZUX2ZsYWdzLEJPT1NUX0ZUX2NjX2lkPiBiaXRzOwotdHlw
ZWRlZiBjb25zdGFudDxCT09TVF9GVF9mdWxsX21hc2s+IG1hc2s7Ci10eXBlZGVmIGZ1bmN0aW9u
X3R5cGVzOjpjb21wb25lbnRzPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBf
RU1QVFkpIChUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAg
LCBUMTEgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9u
ZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6
c2l6ZV90LDEyPiBmdW5jdGlvbl9hcml0eTsKLXR5cGVkZWYgbXBsOjp2ZWN0b3IxMzwgUiwgdHlw
ZW5hbWUgY2xhc3NfdHJhbnNmb3JtPFQwIEJPT1NUX0ZUX2N2LCBMPiA6OnR5cGUgLCBUMSAsIFQy
ICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgPiB0eXBlczsK
LX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlwZW5hbWUgVDEgLCB0
eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQgLCB0eXBlbmFtZSBUNSAsIHR5
cGVuYW1lIFQ2ICwgdHlwZW5hbWUgVDcgLCB0eXBlbmFtZSBUOCAsIHR5cGVuYW1lIFQ5ICwgdHlw
ZW5hbWUgVDEwICwgdHlwZW5hbWUgVDExICwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBMPgotc3Ry
dWN0IGNvbXBvbmVudHNfaW1wbDxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQ
X0VNUFRZKSAoVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEw
ICwgVDExICwgVDEyIEJPT1NUX0ZUX2VsbCkgQk9PU1RfRlRfY3YsIEw+Ci17Ci10eXBlZGVmIGVu
Y29kZV9iaXRzPEJPT1NUX0ZUX2ZsYWdzLEJPT1NUX0ZUX2NjX2lkPiBiaXRzOwotdHlwZWRlZiBj
b25zdGFudDxCT09TVF9GVF9mdWxsX21hc2s+IG1hc2s7Ci10eXBlZGVmIGZ1bmN0aW9uX3R5cGVz
Ojpjb21wb25lbnRzPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkp
IChUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEg
LCBUMTIgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9u
ZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6
c2l6ZV90LDEzPiBmdW5jdGlvbl9hcml0eTsKLXR5cGVkZWYgbXBsOjp2ZWN0b3IxNDwgUiwgdHlw
ZW5hbWUgY2xhc3NfdHJhbnNmb3JtPFQwIEJPT1NUX0ZUX2N2LCBMPiA6OnR5cGUgLCBUMSAsIFQy
ICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgPiB0
eXBlczsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlwZW5hbWUg
VDEgLCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQgLCB0eXBlbmFtZSBU
NSAsIHR5cGVuYW1lIFQ2ICwgdHlwZW5hbWUgVDcgLCB0eXBlbmFtZSBUOCAsIHR5cGVuYW1lIFQ5
ICwgdHlwZW5hbWUgVDEwICwgdHlwZW5hbWUgVDExICwgdHlwZW5hbWUgVDEyICwgdHlwZW5hbWUg
VDEzLCB0eXBlbmFtZSBMPgotc3RydWN0IGNvbXBvbmVudHNfaW1wbDxCT09TVF9GVF9zeW50YXgo
Qk9PU1RfRlRfY2MsIEJPT1NUX1BQX0VNUFRZKSAoVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2
ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzIEJPT1NUX0ZUX2VsbCkgQk9P
U1RfRlRfY3YsIEw+Ci17Ci10eXBlZGVmIGVuY29kZV9iaXRzPEJPT1NUX0ZUX2ZsYWdzLEJPT1NU
X0ZUX2NjX2lkPiBiaXRzOwotdHlwZWRlZiBjb25zdGFudDxCT09TVF9GVF9mdWxsX21hc2s+IG1h
c2s7Ci10eXBlZGVmIGZ1bmN0aW9uX3R5cGVzOjpjb21wb25lbnRzPEJPT1NUX0ZUX3N5bnRheChC
T09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYg
LCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgQk9PU1RfRlRfZWxsKSBCT09T
VF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRh
ZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDE0PiBmdW5jdGlvbl9hcml0
eTsKLXR5cGVkZWYgbXBsOjp2ZWN0b3IxNTwgUiwgdHlwZW5hbWUgY2xhc3NfdHJhbnNmb3JtPFQw
IEJPT1NUX0ZUX2N2LCBMPiA6OnR5cGUgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBU
NyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgPiB0eXBlczsKLX07Ci10ZW1wbGF0
ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiAs
IHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQgLCB0eXBlbmFtZSBUNSAsIHR5cGVuYW1lIFQ2ICwg
dHlwZW5hbWUgVDcgLCB0eXBlbmFtZSBUOCAsIHR5cGVuYW1lIFQ5ICwgdHlwZW5hbWUgVDEwICwg
dHlwZW5hbWUgVDExICwgdHlwZW5hbWUgVDEyICwgdHlwZW5hbWUgVDEzICwgdHlwZW5hbWUgVDE0
LCB0eXBlbmFtZSBMPgotc3RydWN0IGNvbXBvbmVudHNfaW1wbDxCT09TVF9GVF9zeW50YXgoQk9P
U1RfRlRfY2MsIEJPT1NUX1BQX0VNUFRZKSAoVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwg
VDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0IEJPT1NUX0ZUX2VsbCkg
Qk9PU1RfRlRfY3YsIEw+Ci17Ci10eXBlZGVmIGVuY29kZV9iaXRzPEJPT1NUX0ZUX2ZsYWdzLEJP
T1NUX0ZUX2NjX2lkPiBiaXRzOwotdHlwZWRlZiBjb25zdGFudDxCT09TVF9GVF9mdWxsX21hc2s+
IG1hc2s7Ci10eXBlZGVmIGZ1bmN0aW9uX3R5cGVzOjpjb21wb25lbnRzPEJPT1NUX0ZUX3N5bnRh
eChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwg
VDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgQk9PU1RfRlRf
ZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVu
Y2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDE1PiBmdW5j
dGlvbl9hcml0eTsKLXR5cGVkZWYgbXBsOjp2ZWN0b3IxNjwgUiwgdHlwZW5hbWUgY2xhc3NfdHJh
bnNmb3JtPFQwIEJPT1NUX0ZUX2N2LCBMPiA6OnR5cGUgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1
ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgPiB0eXBl
czsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlwZW5hbWUgVDEg
LCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQgLCB0eXBlbmFtZSBUNSAs
IHR5cGVuYW1lIFQ2ICwgdHlwZW5hbWUgVDcgLCB0eXBlbmFtZSBUOCAsIHR5cGVuYW1lIFQ5ICwg
dHlwZW5hbWUgVDEwICwgdHlwZW5hbWUgVDExICwgdHlwZW5hbWUgVDEyICwgdHlwZW5hbWUgVDEz
ICwgdHlwZW5hbWUgVDE0ICwgdHlwZW5hbWUgVDE1LCB0eXBlbmFtZSBMPgotc3RydWN0IGNvbXBv
bmVudHNfaW1wbDxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQX0VNUFRZKSAo
VDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwg
VDEyICwgVDEzICwgVDE0ICwgVDE1IEJPT1NUX0ZUX2VsbCkgQk9PU1RfRlRfY3YsIEw+Ci17Ci10
eXBlZGVmIGVuY29kZV9iaXRzPEJPT1NUX0ZUX2ZsYWdzLEJPT1NUX0ZUX2NjX2lkPiBiaXRzOwot
dHlwZWRlZiBjb25zdGFudDxCT09TVF9GVF9mdWxsX21hc2s+IG1hc2s7Ci10eXBlZGVmIGZ1bmN0
aW9uX3R5cGVzOjpjb21wb25lbnRzPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1Rf
UFBfRU1QVFkpIChUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBU
MTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9j
diwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsKLXR5
cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDE2PiBmdW5jdGlvbl9hcml0eTsKLXR5
cGVkZWYgbXBsOjp2ZWN0b3IxNzwgUiwgdHlwZW5hbWUgY2xhc3NfdHJhbnNmb3JtPFQwIEJPT1NU
X0ZUX2N2LCBMPiA6OnR5cGUgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4
ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgPiB0eXBlczsKLX07Ci10
ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlwZW5hbWUgVDEgLCB0eXBlbmFt
ZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQgLCB0eXBlbmFtZSBUNSAsIHR5cGVuYW1l
IFQ2ICwgdHlwZW5hbWUgVDcgLCB0eXBlbmFtZSBUOCAsIHR5cGVuYW1lIFQ5ICwgdHlwZW5hbWUg
VDEwICwgdHlwZW5hbWUgVDExICwgdHlwZW5hbWUgVDEyICwgdHlwZW5hbWUgVDEzICwgdHlwZW5h
bWUgVDE0ICwgdHlwZW5hbWUgVDE1ICwgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBMPgotc3RydWN0
IGNvbXBvbmVudHNfaW1wbDxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQX0VN
UFRZKSAoVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwg
VDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2IEJPT1NUX0ZUX2VsbCkgQk9PU1RfRlRf
Y3YsIEw+Ci17Ci10eXBlZGVmIGVuY29kZV9iaXRzPEJPT1NUX0ZUX2ZsYWdzLEJPT1NUX0ZUX2Nj
X2lkPiBiaXRzOwotdHlwZWRlZiBjb25zdGFudDxCT09TVF9GVF9mdWxsX21hc2s+IG1hc2s7Ci10
eXBlZGVmIGZ1bmN0aW9uX3R5cGVzOjpjb21wb25lbnRzPEJPT1NUX0ZUX3N5bnRheChCT09TVF9G
VF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAs
IFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgQk9PU1Rf
RlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2Vx
dWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDE3PiBm
dW5jdGlvbl9hcml0eTsKLXR5cGVkZWYgbXBsOjp2ZWN0b3IxODwgUiwgdHlwZW5hbWUgY2xhc3Nf
dHJhbnNmb3JtPFQwIEJPT1NUX0ZUX2N2LCBMPiA6OnR5cGUgLCBUMSAsIFQyICwgVDMgLCBUNCAs
IFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBU
MTUgLCBUMTYgPiB0eXBlczsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQw
ICwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQg
LCB0eXBlbmFtZSBUNSAsIHR5cGVuYW1lIFQ2ICwgdHlwZW5hbWUgVDcgLCB0eXBlbmFtZSBUOCAs
IHR5cGVuYW1lIFQ5ICwgdHlwZW5hbWUgVDEwICwgdHlwZW5hbWUgVDExICwgdHlwZW5hbWUgVDEy
ICwgdHlwZW5hbWUgVDEzICwgdHlwZW5hbWUgVDE0ICwgdHlwZW5hbWUgVDE1ICwgdHlwZW5hbWUg
VDE2ICwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBMPgotc3RydWN0IGNvbXBvbmVudHNfaW1wbDxC
T09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQX0VNUFRZKSAoVDEgLCBUMiAsIFQz
ICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwg
VDE0ICwgVDE1ICwgVDE2ICwgVDE3IEJPT1NUX0ZUX2VsbCkgQk9PU1RfRlRfY3YsIEw+Ci17Ci10
eXBlZGVmIGVuY29kZV9iaXRzPEJPT1NUX0ZUX2ZsYWdzLEJPT1NUX0ZUX2NjX2lkPiBiaXRzOwot
dHlwZWRlZiBjb25zdGFudDxCT09TVF9GVF9mdWxsX21hc2s+IG1hc2s7Ci10eXBlZGVmIGZ1bmN0
aW9uX3R5cGVzOjpjb21wb25lbnRzPEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYywgQk9PU1Rf
UFBfRU1QVFkpIChUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBU
MTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgQk9PU1RfRlRfZWxs
KSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2Vf
dGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3JhbF9jPHN0ZDo6c2l6ZV90LDE4PiBmdW5jdGlv
bl9hcml0eTsKLXR5cGVkZWYgbXBsOjp2ZWN0b3IxOTwgUiwgdHlwZW5hbWUgY2xhc3NfdHJhbnNm
b3JtPFQwIEJPT1NUX0ZUX2N2LCBMPiA6OnR5cGUgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwg
VDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBU
MTYgLCBUMTcgPiB0eXBlczsKLX07Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQw
ICwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQg
LCB0eXBlbmFtZSBUNSAsIHR5cGVuYW1lIFQ2ICwgdHlwZW5hbWUgVDcgLCB0eXBlbmFtZSBUOCAs
IHR5cGVuYW1lIFQ5ICwgdHlwZW5hbWUgVDEwICwgdHlwZW5hbWUgVDExICwgdHlwZW5hbWUgVDEy
ICwgdHlwZW5hbWUgVDEzICwgdHlwZW5hbWUgVDE0ICwgdHlwZW5hbWUgVDE1ICwgdHlwZW5hbWUg
VDE2ICwgdHlwZW5hbWUgVDE3ICwgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBMPgotc3RydWN0IGNv
bXBvbmVudHNfaW1wbDxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQX0VNUFRZ
KSAoVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDEx
ICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4IEJPT1NUX0ZUX2VsbCkg
Qk9PU1RfRlRfY3YsIEw+Ci17Ci10eXBlZGVmIGVuY29kZV9iaXRzPEJPT1NUX0ZUX2ZsYWdzLEJP
T1NUX0ZUX2NjX2lkPiBiaXRzOwotdHlwZWRlZiBjb25zdGFudDxCT09TVF9GVF9mdWxsX21hc2s+
IG1hc2s7Ci10eXBlZGVmIGZ1bmN0aW9uX3R5cGVzOjpjb21wb25lbnRzPEJPT1NUX0ZUX3N5bnRh
eChCT09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwg
VDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBU
MTYgLCBUMTcgLCBUMTggQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5cGVk
ZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRlZ3Jh
bF9jPHN0ZDo6c2l6ZV90LDE5PiBmdW5jdGlvbl9hcml0eTsKLXR5cGVkZWYgbXBsOjp2ZWN0b3Iy
MDwgUiwgdHlwZW5hbWUgY2xhc3NfdHJhbnNmb3JtPFQwIEJPT1NUX0ZUX2N2LCBMPiA6OnR5cGUg
LCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEg
LCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBUMTggPiB0eXBlczsKLX07Ci10
ZW1wbGF0ZTwgdHlwZW5hbWUgUiAsIHR5cGVuYW1lIFQwICwgdHlwZW5hbWUgVDEgLCB0eXBlbmFt
ZSBUMiAsIHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQgLCB0eXBlbmFtZSBUNSAsIHR5cGVuYW1l
IFQ2ICwgdHlwZW5hbWUgVDcgLCB0eXBlbmFtZSBUOCAsIHR5cGVuYW1lIFQ5ICwgdHlwZW5hbWUg
VDEwICwgdHlwZW5hbWUgVDExICwgdHlwZW5hbWUgVDEyICwgdHlwZW5hbWUgVDEzICwgdHlwZW5h
bWUgVDE0ICwgdHlwZW5hbWUgVDE1ICwgdHlwZW5hbWUgVDE2ICwgdHlwZW5hbWUgVDE3ICwgdHlw
ZW5hbWUgVDE4ICwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBMPgotc3RydWN0IGNvbXBvbmVudHNf
aW1wbDxCT09TVF9GVF9zeW50YXgoQk9PU1RfRlRfY2MsIEJPT1NUX1BQX0VNUFRZKSAoVDEgLCBU
MiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwg
VDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwgVDE5IEJPT1NUX0ZUX2VsbCkgQk9P
U1RfRlRfY3YsIEw+Ci17Ci10eXBlZGVmIGVuY29kZV9iaXRzPEJPT1NUX0ZUX2ZsYWdzLEJPT1NU
X0ZUX2NjX2lkPiBiaXRzOwotdHlwZWRlZiBjb25zdGFudDxCT09TVF9GVF9mdWxsX21hc2s+IG1h
c2s7Ci10eXBlZGVmIGZ1bmN0aW9uX3R5cGVzOjpjb21wb25lbnRzPEJPT1NUX0ZUX3N5bnRheChC
T09TVF9GVF9jYywgQk9PU1RfUFBfRU1QVFkpIChUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYg
LCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYg
LCBUMTcgLCBUMTggLCBUMTkgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdiwgTD4gdHlwZTsKLXR5
cGVkZWYgY29tcG9uZW50c19tcGxfc2VxdWVuY2VfdGFnIHRhZzsKLXR5cGVkZWYgbXBsOjppbnRl
Z3JhbF9jPHN0ZDo6c2l6ZV90LDIwPiBmdW5jdGlvbl9hcml0eTsKLXR5cGVkZWYgbXBsOjp2ZWN0
b3IyMTwgUiwgdHlwZW5hbWUgY2xhc3NfdHJhbnNmb3JtPFQwIEJPT1NUX0ZUX2N2LCBMPiA6OnR5
cGUgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBU
MTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBUMTggLCBUMTkgPiB0eXBl
czsKLX07Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9lbmNvZGluZy9hbGlhc2VzX2RlZi5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBlcy9k
ZXRhaWwvZW5jb2RpbmcvYWxpYXNlc19kZWYuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0ZDQ4MzMxNzljMmQ0YjVkYWNmMGVmOWIxZGZjNGI0YmNmMThlODBkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9lbmNvZGluZy9hbGlh
c2VzX2RlZi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0KLS8vIChDKSBDb3B5
cmlnaHQgVG9iaWFzIFNjaHdpbmdlcgotLy8KLS8vIFVzZSBtb2RpZmljYXRpb24gYW5kIGRpc3Ry
aWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgYm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vIFZl
cnNpb24gMS4wLiAoU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIG5vIGluY2x1ZGUgZ3VhcmRzLCB0aGlzIGZp
bGUgaXMgaW50ZW5kZWQgZm9yIG11bHRpcGxlIGluY2x1c2lvbnMKLQotI2RlZmluZSBjYWxsYWJs
ZV9idWlsdGluIEJPT1NUX0ZUX2NhbGxhYmxlX2J1aWx0aW4KLSNkZWZpbmUgbWVtYmVyICAgICAg
ICAgICBCT09TVF9GVF9tZW1iZXJfcG9pbnRlcgotI2RlZmluZSBub25fbWVtYmVyICAgICAgIEJP
T1NUX0ZUX25vbl9tZW1iZXIKLSNkZWZpbmUgdmFyaWFkaWMgICAgICAgICBCT09TVF9GVF92YXJp
YWRpYwotI2RlZmluZSBub25fdmFyaWFkaWMgICAgIEJPT1NUX0ZUX25vbl92YXJpYWRpYwotCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5j
dGlvbl90eXBlcy9kZXRhaWwvZW5jb2RpbmcvYWxpYXNlc191bmRlZi5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvZW5j
b2RpbmcvYWxpYXNlc191bmRlZi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFk
NGU1NzdkODBhNmJiMzJjMjRmYmU3OTY1N2RmZjRmZTljNDc4YWIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0YWlsL2VuY29kaW5nL2FsaWFzZXNfdW5k
ZWYuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotCi0vLyAoQykgQ29weXJpZ2h0
IFRvYmlhcyBTY2h3aW5nZXIKLS8vCi0vLyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRp
b24gYXJlIHN1YmplY3QgdG8gdGhlIGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyBWZXJzaW9u
IDEuMC4gKFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBubyBpbmNsdWRlIGd1YXJkcywgdGhpcyBmaWxlIGlz
IGludGVuZGVkIGZvciBtdWx0aXBsZSBpbmNsdXNpb25zCi0KLSN1bmRlZiBjYWxsYWJsZV9idWls
dGluCi0jdW5kZWYgbWVtYmVyCi0jdW5kZWYgbm9uX21lbWJlcgotI3VuZGVmIHZhcmlhZGljCi0j
dW5kZWYgbm9uX3ZhcmlhZGljCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9lbmNvZGluZy9kZWYuaHBw
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlw
ZXMvZGV0YWlsL2VuY29kaW5nL2RlZi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDA4MDc0ZmIzOGJhMGQ2ZmM4YmQzMDEwOWZmOGQxZmUwNDU2MjY3YjEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0YWlsL2VuY29kaW5nL2RlZi5ocHAK
KysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0KLS8vIChDKSBDb3B5cmlnaHQgVG9iaWFz
IFNjaHdpbmdlcgotLy8KLS8vIFVzZSBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUg
c3ViamVjdCB0byB0aGUgYm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vIFZlcnNpb24gMS4wLiAo
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLS8vIG5vIGluY2x1ZGUgZ3VhcmRzLCB0aGlzIGZpbGUgaXMgaW50ZW5k
ZWQgZm9yIG11bHRpcGxlIGluY2x1c2lvbnMKLQotLy8gVHlwZSBlbmNvZGluZzoKLS8vCi0vLyBi
aXQgMDogY2FsbGFibGUgYnVpbHRpbgotLy8gYml0IDE6IG5vbiBtZW1iZXIKLS8vIGJpdCAyOiBu
YWtlZCBmdW5jdGlvbgotLy8gYml0IDM6IHBvaW50ZXIKLS8vIGJpdCA0OiByZWZlcmVuY2UKLS8v
IGJpdCA1OiBtZW1iZXIgcG9pbnRlcgotLy8gYml0IDY6IG1lbWJlciBmdW5jdGlvbiBwb2ludGVy
Ci0vLyBiaXQgNzogbWVtYmVyIG9iamVjdCBwb2ludGVyCi0KLSNkZWZpbmUgQk9PU1RfRlRfdHlw
ZV9tYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmYgLy8gMTExMSAxMTEx
IAotI2RlZmluZSBCT09TVF9GVF9jYWxsYWJsZV9idWlsdGluICAgICAgICAgICAgICAgICAgICAg
MHgwMDAwMDAwMSAvLyAwMDAwIDAwMDEKLSNkZWZpbmUgQk9PU1RfRlRfbm9uX21lbWJlciAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIgLy8gMDAwMCAwMDEwCi0jZGVmaW5lIEJP
T1NUX0ZUX2Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3IC8v
IDAwMDAgMDExMQotI2RlZmluZSBCT09TVF9GVF9wb2ludGVyICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwMDAwMDAwYiAvLyAwMDAwIDEwMTEKLSNkZWZpbmUgQk9PU1RfRlRfcmVmZXJl
bmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMgLy8gMDAwMSAwMDExCi0j
ZGVmaW5lIEJPT1NUX0ZUX25vbl9tZW1iZXJfY2FsbGFibGVfYnVpbHRpbiAgICAgICAgICAweDAw
MDAwMDAzIC8vIDAwMDAgMDAxMQotI2RlZmluZSBCT09TVF9GVF9tZW1iZXJfcG9pbnRlciAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMCAvLyAwMDEwIDAwMDAKLSNkZWZpbmUgQk9PU1Rf
RlRfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXIgICAgICAgICAgICAgIDB4MDAwMDAwNjEgLy8gMDEx
MCAwMDAxCi0jZGVmaW5lIEJPT1NUX0ZUX21lbWJlcl9vYmplY3RfcG9pbnRlciAgICAgICAgICAg
ICAgICAweDAwMDAwMGEzIC8vIDEwMTAgMDAwMQotI2RlZmluZSBCT09TVF9GVF9tZW1iZXJfb2Jq
ZWN0X3BvaW50ZXJfZmxhZ3MgICAgICAgICAgMHgwMDAwMDJhMwotCi0jZGVmaW5lIEJPT1NUX0ZU
X3ZhcmlhZGljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCi0jZGVmaW5l
IEJPT1NUX0ZUX25vbl92YXJpYWRpYyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAw
Ci0jZGVmaW5lIEJPT1NUX0ZUX3ZhcmlhZGljX21hc2sgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDAwMzAwCi0KLSNkZWZpbmUgQk9PU1RfRlRfY29uc3QgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgQk9PU1RfRlRfdm9sYXRpbGUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLQotI2RlZmluZSBCT09TVF9GVF9kZWZhdWx0
X2NjICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBCT09TVF9G
VF9jY19tYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZmODAwMAotCi0jZGVm
aW5lIEJPT1NUX0ZUX2tpbmRfbWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAw
MGZjIAotCi0jZGVmaW5lIEJPT1NUX0ZUX2ZsYWdzX21hc2sgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIEJPT1NUX0ZUX2Z1bGxfbWFzayAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDAwZmYwZmZmCi0KLSNkZWZpbmUgQk9PU1RfRlRfYXJpdHlfc2hpZnQg
ICAgICAgICAgICAgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIEJPT1NUX0ZUX2FyaXR5X21hc2sg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDdmMDAwMDAwCi0KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFp
bC9lbmNvZGluZy91bmRlZi5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvZW5jb2RpbmcvdW5kZWYuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTIwZDZmY2IxZTc4ODg0N2JlMWZiOTM5M2M5ZDZlMDAy
ZGMyOTcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2Rl
dGFpbC9lbmNvZGluZy91bmRlZi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0K
LS8vIChDKSBDb3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlcgotLy8KLS8vIFVzZSBtb2RpZmljYXRp
b24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgYm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwKLS8vIFZlcnNpb24gMS4wLiAoU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkuCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIG5vIGluY2x1ZGUgZ3Vh
cmRzLCB0aGlzIGZpbGUgaXMgaW50ZW5kZWQgZm9yIG11bHRpcGxlIGluY2x1c2lvbgotCi0jdW5k
ZWYgQk9PU1RfRlRfdHlwZV9tYXNrCi0jdW5kZWYgQk9PU1RfRlRfa2luZF9tYXNrCi0jdW5kZWYg
Qk9PU1RfRlRfY2FsbGFibGVfYnVpbHRpbgotI3VuZGVmIEJPT1NUX0ZUX25vbl9tZW1iZXIKLSN1
bmRlZiBCT09TVF9GVF9mdW5jdGlvbgotI3VuZGVmIEJPT1NUX0ZUX3BvaW50ZXIKLSN1bmRlZiBC
T09TVF9GVF9yZWZlcmVuY2UKLSN1bmRlZiBCT09TVF9GVF9ub25fbWVtYmVyX2NhbGxhYmxlX2J1
aWx0aW4KLSN1bmRlZiBCT09TVF9GVF9tZW1iZXJfcG9pbnRlcgotI3VuZGVmIEJPT1NUX0ZUX21l
bWJlcl9mdW5jdGlvbl9wb2ludGVyCi0jdW5kZWYgQk9PU1RfRlRfbWVtYmVyX29iamVjdF9wb2lu
dGVyCi0jdW5kZWYgQk9PU1RfRlRfbWVtYmVyX29iamVjdF9wb2ludGVyX2ZsYWdzCi0KLSN1bmRl
ZiBCT09TVF9GVF92YXJpYWRpYwotI3VuZGVmIEJPT1NUX0ZUX25vbl92YXJpYWRpYwotI3VuZGVm
IEJPT1NUX0ZUX3ZhcmlhZGljX21hc2sKLQotI3VuZGVmIEJPT1NUX0ZUX2NvbnN0Ci0jdW5kZWYg
Qk9PU1RfRlRfdm9sYXRpbGUKLQotI3VuZGVmIEJPT1NUX0ZUX2RlZmF1bHRfY2MKLSN1bmRlZiBC
T09TVF9GVF9jY19tYXNrCi0KLSN1bmRlZiBCT09TVF9GVF9mbGFnc19tYXNrCi0jdW5kZWYgQk9P
U1RfRlRfZnVsbF9tYXNrCi0KLSN1bmRlZiBCT09TVF9GVF9hcml0eV9tYXNrCi0KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5
cGVzL2RldGFpbC9wcF9hcml0eV9sb29wLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9wcF9hcml0eV9sb29wLmhwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZkYmZmNTlmMzE0YjNkZTc1NTZkNjcyZTgw
MWI5NDk2MTI5ZTcyOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90
eXBlcy9kZXRhaWwvcHBfYXJpdHlfbG9vcC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAs
MCBAQAotCi0vLyAoQykgQ29weXJpZ2h0IFRvYmlhcyBTY2h3aW5nZXIKLS8vCi0vLyBVc2UgbW9k
aWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIGJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsCi0vLyBWZXJzaW9uIDEuMC4gKFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpLgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBubyBpbmNs
dWRlIGd1YXJkcywgdGhpcyBmaWxlIGlzIGludGVuZGVkIGZvciBtdWx0aXBsZSBpbmNsdXNpb24K
LQotI2lmbmRlZiBCT09TVF9GVF9QUkVQUk9DRVNTSU5HX01PREUKLS8vIGlucHV0OiAgQk9PU1Rf
RlRfbWZwICAgICAgICAwIG9yIDEgPD0+IG1lbWJlciBmdW5jdGlvbiBwb2ludGVyPwotLy8gaW5w
dXQ6ICBCT09TVF9GVF90eXBlX25hbWUgIEJPT1NUX0ZUX3R5cGUgLS0+ICJSICgqIC4uLl90eXBl
X25hbWUpKCkiIChwYXNzMikKLSNlbmRpZgotLy8gaW5wdXQ6ICBCT09TVF9GVF9zeW50YXggICAg
IHR5cGUgbWFjcm8gdG8gdXNlCi0vLyBpbnB1dDogIEJPT1NUX0ZUX2NjICAgICAgICAgZW1wdHkg
b3IgY2Mgc3BlY2lmaWVyIAotLy8gaW5wdXQ6ICBCT09TVF9GVF9lbGwgICAgICAgIGVtcHR5IG9y
ICIuLi4iCi0vLyBpbnB1dDogIEJPT1NUX0ZUX2N2ICAgICAgICAgZW1wdHkgb3IgY3YgcXVhbGlm
aWVycwotLy8gaW5wdXQ6ICBCT09TVF9GVF9mbGFncyAgICAgIHNpbmdsZSBkZWNpbWFsIGludGVn
ZXIgZW5jb2RpbmcgdGhlIGZsYWdzCi0vLyBvdXRwdXQ6IEJPT1NUX0ZUX24gICAgICAgICAgbnVt
YmVyIG9mIGNvbXBvbmVudCB0eXBlcyAoYXJpdHkrMSkKLS8vIG91dHB1dDogQk9PU1RfRlRfYXJp
dHkgICAgICBjdXJyZW50IGFyaXR5Ci0vLyBvdXRwdXQ6IEJPT1NUX0ZUX3R5cGUgICAgICAgbWFj
cm8gdGhhdCBleHBhbmRzIHRvIHRoZSB0eXBlCi0vLyBvdXRwdXQ6IEJPT1NUX0ZUX3RwbGFyZ3Mo
cCkgdGVtcGxhdGUgYXJndW1lbnRzIHdpdGggZ2l2ZW4gcHJlZml4Ci0vLyBvdXRwdXQ6IEJPT1NU
X0ZUX3BhcmFtcyhwKSAgcGFyYW1ldGVycyB3aXRoIGdpdmVuIHByZWZpeAotCi0jaWZkZWYgX19X
QVZFX18KLSMgICBwcmFnbWEgd2F2ZSBvcHRpb24ocHJlc2VydmU6IDApCi0jZW5kaWYKLQotI2lm
bmRlZiBCT09TVF9GVF9BUklUWV9MT09QX0lTX0lURVJBVElORwotCi0jICAgZGVmaW5lIEJPT1NU
X0ZUX0FMX1BSRVBST0NFU1NFRCBcCi0gICAgICAgIEJPT1NUX0ZUX0FMX0ZJTEUoQk9PU1RfRlRf
YWxfcGF0aCxCT09TVF9GVF9GUk9NX0FSSVRZLEJPT1NUX0ZUX21mcCkKLQotIyAgIGRlZmluZSBC
T09TVF9GVF9BTF9GSUxFKGJhc2VfcGF0aCxtYXhfYXJpdHksbWZwKSBcCi0gICAgICAgIEJPT1NU
X0ZUX0FMX0ZJTEVfSShiYXNlX3BhdGgsbWF4X2FyaXR5LG1mcCkKLSMgICBkZWZpbmUgQk9PU1Rf
RlRfQUxfRklMRV9JKGJhc2VfcGF0aCxtYXhfYXJpdHksbWZwKSBcCi0gICAgICAgIDxiYXNlX3Bh
dGgvYXJpdHkgIyMgbWF4X2FyaXR5ICMjIF8gIyMgbWZwLmhwcD4KLQotIyAgIGlmICFkZWZpbmVk
KEJPT1NUX0ZUX1BSRVBST0NFU1NJTkdfTU9ERSkKLQotIyAgICAgaWYgQk9PU1RfRlRfTUFYX0FS
SVRZIDwgMTAKLSMgICAgICAgZGVmaW5lIEJPT1NUX0ZUX0ZST01fQVJJVFkgMCAKLSMgICAgIGVs
aWYgQk9PU1RfRlRfTUFYX0FSSVRZIDwgMjAKLSMgICAgICAgZGVmaW5lIEJPT1NUX0ZUX0ZST01f
QVJJVFkgMTAKLSMgICAgIGVsaWYgQk9PU1RfRlRfTUFYX0FSSVRZIDwgMzAKLSMgICAgICAgZGVm
aW5lIEJPT1NUX0ZUX0ZST01fQVJJVFkgMjAKLSMgICAgIGVsaWYgQk9PU1RfRlRfTUFYX0FSSVRZ
IDwgNDAKLSMgICAgICAgZGVmaW5lIEJPT1NUX0ZUX0ZST01fQVJJVFkgMzAKLSMgICAgIGVuZGlm
Ci0KLSMgICAgIGlmIEJPT1NUX0ZUX0ZST01fQVJJVFkKLSMgICAgICAgaW5jbHVkZSBCT09TVF9G
VF9BTF9QUkVQUk9DRVNTRUQKLSMgICAgIGVuZGlmCi0KLSMgICBlbGlmICFkZWZpbmVkKEJPT1NU
X0ZUX0ZST01fQVJJVFkpIC8vIHNpbmdsZSBwYXNzIHByZXByb2Nlc3NpbmcKLSMgICAgIGRlZmlu
ZSBCT09TVF9GVF9GUk9NX0FSSVRZIDAKLQotIyAgIGVsaWYgQk9PU1RfRlRfRlJPTV9BUklUWSA+
IDAgICAgICAgLy8gYXJpdHkyMCBpbmNsdWRlcyBhcml0eTEwCi1CT09TVF9QUF9FWFBBTkQoIykg
aW5jbHVkZSBCT09TVF9GVF9BTF9QUkVQUk9DRVNTRUQKLSMgICBlbmRpZgotCi0jICAgdW5kZWYg
Qk9PU1RfRlRfQUxfUFJFUFJPQ0VTU0VECi0KLSMgICB1bmRlZiBCT09TVF9GVF9BTF9GSUxFCi0j
ICAgdW5kZWYgQk9PU1RfRlRfQUxfRklMRV9JCi0KLSMgICBpZiBCT09TVF9GVF9NQVhfQVJJVFkg
PiBCT09TVF9GVF9GUk9NX0FSSVRZCi0KLSMgICAgIGlmbmRlZiBCT09TVF9GVF9ERVRBSUxfQVJJ
VFlfTE9PUF9IUFBfSU5DTFVERUQKLSMgICAgIGRlZmluZSBCT09TVF9GVF9ERVRBSUxfQVJJVFlf
TE9PUF9IUFBfSU5DTFVERUQKLSMgICAgICAgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3Iv
Y2F0LmhwcD4KLSMgICAgICAgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUvZWF0
LmhwcD4KLSMgICAgICAgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29udHJvbC9pZi5o
cHA+Ci0jICAgICAgICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvaW5j
LmhwcD4KLSMgICAgICAgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvZmFjaWxpdGllcy9l
bXB0eS5ocHA+Ci0jICAgICAgICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2ZhY2lsaXRp
ZXMvZXhwYW5kLmhwcD4KLSMgICAgICAgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvaXRl
cmF0aW9uL2l0ZXJhdGUuaHBwPgotIyAgICAgICAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nv
ci9yZXBldGl0aW9uL2VudW1fcGFyYW1zLmhwcD4KLSMgICAgICAgICBpbmNsdWRlIDxib29zdC9w
cmVwcm9jZXNzb3IvcmVwZXRpdGlvbi9lbnVtX3NoaWZ0ZWRfcGFyYW1zLmhwcD4KLSMgICAgICAg
ICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvcmVwZXRpdGlvbi9lbnVtX3RyYWlsaW5nX3Bh
cmFtcy5ocHA+Ci0jICAgICBlbmRpZgotCi0jICAgICBkZWZpbmUgQk9PU1RfRlRfQUxfSU5DTFVE
RV9GSUxFIDxCT09TVF9GVF9hbF9wYXRoL21hc3Rlci5ocHA+Ci0KLSMgICAgIGRlZmluZSBCT09T
VF9GVF9BUklUWV9MT09QX1BSRUZJWCAxCi0jICAgICBpbmNsdWRlIEJPT1NUX0ZUX0FMX0lOQ0xV
REVfRklMRQotIyAgICAgdW5kZWYgIEJPT1NUX0ZUX0FSSVRZX0xPT1BfUFJFRklYCi0KLSMgICAg
IGlmICFCT09TVF9QUF9JU19JVEVSQVRJTkcKLSMgICAgICAgZGVmaW5lIEJPT1NUX1BQX0ZJTEVO
QU1FXzEgQk9PU1RfRlRfQUxfSU5DTFVERV9GSUxFCi0jICAgICBlbGlmIEJPT1NUX1BQX0lURVJB
VElPTl9ERVBUSCgpID09IDEKLSMgICAgICAgZGVmaW5lIEJPT1NUX1BQX0ZJTEVOQU1FXzIgQk9P
U1RfRlRfQUxfSU5DTFVERV9GSUxFCi0jICAgICBlbHNlCi0jICAgICAgIGVycm9yICJsb29wcyBu
ZXN0ZWQgdG9vIGRlZXBseSIKLSMgICAgIGVuZGlmCi0KLSMgICAgIGRlZmluZSBCT09TVF9GVF9h
cml0eSBCT09TVF9QUF9JVEVSQVRJT04oKQotIyAgICAgZGVmaW5lIEJPT1NUX0ZUX24gICAgIEJP
T1NUX1BQX0lOQyhCT09TVF9GVF9hcml0eSkKLQotIyAgICAgZGVmaW5lIEJPT1NUX0ZUX3R5cGUg
XAotICAgICAgICAgIEJPT1NUX0ZUX3N5bnRheChCT09TVF9GVF9jYyxCT09TVF9GVF90eXBlX25h
bWUgQk9PU1RfUFBfRU1QVFkpXAotICAgICAgICAgICAgICAgKEJPT1NUX0ZUX3BhcmFtcyhCT09T
VF9QUF9FTVBUWSkgQk9PU1RfRlRfZWxsKSBCT09TVF9GVF9jdgotCi0jICAgICBkZWZpbmUgQk9P
U1RfRlRfdHBsYXJncyhwcmVmeCkgXAotICAgICAgICAgIHByZWZ4KCkgUiBCT09TVF9QUF9FTlVN
X1RSQUlMSU5HX1BBUkFNUyhCT09TVF9GVF9hcml0eSxwcmVmeCgpIFQpCi0KLSMgICAgIGlmICFC
T09TVF9GVF9tZnAKLQotIyAgICAgICBkZWZpbmUgQk9PU1RfRlRfcGFyYW1zKHByZWZ4KSBcCi0g
ICAgICAgICAgICBCT09TVF9QUF9JRihCT09TVF9GVF9hcml0eSxCT09TVF9QUF9FTlVNX1BBUkFN
UywgXAotICAgICAgICAgICAgICAgIEJPT1NUX0ZUX251bGxhcnlfcGFyYW0gQk9PU1RfUFBfVFVQ
TEVfRUFUKDIpKSggXAotICAgICAgICAgICAgICAgICAgICBCT09TVF9GVF9hcml0eSxwcmVmeCgp
IFQpIAotIyAgICAgZWxzZQotCi0jICAgICAgIGRlZmluZSBCT09TVF9GVF9wYXJhbXMocHJlZngp
IFwKLSAgICAgICAgICAgIEJPT1NUX1BQX0VOVU1fU0hJRlRFRF9QQVJBTVMoQk9PU1RfRlRfYXJp
dHkscHJlZngoKSBUKQotCi0jICAgICBlbmRpZgotCi0jICAgICBpZiAhQk9PU1RfRlRfRlJPTV9B
UklUWSAKLSMgICAgICAgZGVmaW5lIEJPT1NUX1BQX0lURVJBVElPTl9MSU1JVFMgKEJPT1NUX0ZU
X21mcCwgQk9PU1RfRlRfTUFYX0FSSVRZKQotIyAgICAgZWxzZQotIyAgICAgICBkZWZpbmUgQk9P
U1RfUFBfSVRFUkFUSU9OX0xJTUlUUyBcCi0gICAgICAgICAgICAoQk9PU1RfRlRfRlJPTV9BUklU
WSsxLCBCT09TVF9GVF9NQVhfQVJJVFkpCi0jICAgICBlbmRpZgotCi0jICAgICBkZWZpbmUgQk9P
U1RfRlRfQVJJVFlfTE9PUF9JU19JVEVSQVRJTkcgMQotIyAgICAgaW5jbHVkZSBCT09TVF9QUF9J
VEVSQVRFKCkKLSMgICAgIHVuZGVmICBCT09TVF9GVF9BUklUWV9MT09QX0lTX0lURVJBVElORwot
Ci0jICAgICB1bmRlZiBCT09TVF9GVF9hcml0eQotIyAgICAgdW5kZWYgQk9PU1RfRlRfcGFyYW1z
Ci0jICAgICB1bmRlZiBCT09TVF9GVF90cGxhcmdzCi0jICAgICB1bmRlZiBCT09TVF9GVF90eXBl
Ci0KLSMgICAgIGRlZmluZSBCT09TVF9GVF9BUklUWV9MT09QX1NVRkZJWCAxCi0jICAgICBpbmNs
dWRlIEJPT1NUX0ZUX0FMX0lOQ0xVREVfRklMRQotIyAgICAgdW5kZWYgIEJPT1NUX0ZUX0FSSVRZ
X0xPT1BfU1VGRklYCi0KLSMgICAgIHVuZGVmIEJPT1NUX0ZUX0FMX0lOQ0xVREVfRklMRQotIyAg
IGVuZGlmCi0KLSMgICB1bmRlZiBCT09TVF9GVF9GUk9NX0FSSVRZCi0KLSNlbHNlCi0jICAgZXJy
b3IgImF0dGVtcHQgdG8gbmVzdCBhcml0eSBsb29wcyIKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBlcy9k
ZXRhaWwvcHBfY2NfbG9vcC9wcmVwcm9jZXNzZWQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0YWlsL3BwX2NjX2xvb3AvcHJl
cHJvY2Vzc2VkLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE0MDc5YzZhZDIw
MTExY2Y1ZWE2YTBkZDk2ZjZjNGE0OTM0NjQ4OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvcHBfY2NfbG9vcC9wcmVwcm9jZXNzZWQuaHBwCisr
KyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLQotLy8gKEMpIENvcHlyaWdodCBUb2JpYXMg
U2Nod2luZ2VyCi0vLwotLy8gVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBz
dWJqZWN0IHRvIHRoZSBib29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gVmVyc2lvbiAxLjAuIChT
ZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLQotLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotLy8gbm8gaW5jbHVkZSBndWFyZHMsIHRoaXMgZmlsZSBpcyBpbnRlbmRl
ZCBmb3IgbXVsdGlwbGUgaW5jbHVzaW9ucwotCi0vLyB0aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGZyb20gdGhlIG1hc3Rlci5ocHAgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKLSMgZGVm
aW5lIEJPT1NUX0ZUX2NjX2lkIDEKLSMgZGVmaW5lIEJPT1NUX0ZUX2NjX25hbWUgaW1wbGljaXRf
Y2MKLSMgZGVmaW5lIEJPT1NUX0ZUX2NjIEJPT1NUX1BQX0VNUFRZCi0jIGRlZmluZSBCT09TVF9G
VF9jb25kIEJPT1NUX0ZUX0NDX0lNUExJQ0lUCi0jIGlmIEJPT1NUX0ZUX2NvbmQKLSMgZGVmaW5l
IEJPT1NUX0ZUX2NvbmZpZ192YWxpZCAxCi0jIGluY2x1ZGUgQk9PU1RfRlRfY2NfZmlsZQotIyBl
bmRpZgotIyB1bmRlZiBCT09TVF9GVF9jb25kCi0jIHVuZGVmIEJPT1NUX0ZUX2NjX25hbWUKLSMg
dW5kZWYgQk9PU1RfRlRfY2MKLSMgdW5kZWYgQk9PU1RfRlRfY2NfaWQKLSMgZGVmaW5lIEJPT1NU
X0ZUX2NjX2lkIDIKLSMgZGVmaW5lIEJPT1NUX0ZUX2NjX25hbWUgY2RlY2xfY2MKLSMgZGVmaW5l
IEJPT1NUX0ZUX2NjIEJPT1NUX1BQX0lERU5USVRZKF9fY2RlY2wgKQotIyBkZWZpbmUgQk9PU1Rf
RlRfY29uZCBCT09TVF9GVF9DQ19DREVDTAotIyBpZiBCT09TVF9GVF9jb25kCi0jIGRlZmluZSBC
T09TVF9GVF9jb25maWdfdmFsaWQgMQotIyBpbmNsdWRlIEJPT1NUX0ZUX2NjX2ZpbGUKLSMgZW5k
aWYKLSMgdW5kZWYgQk9PU1RfRlRfY29uZAotIyB1bmRlZiBCT09TVF9GVF9jY19uYW1lCi0jIHVu
ZGVmIEJPT1NUX0ZUX2NjCi0jIHVuZGVmIEJPT1NUX0ZUX2NjX2lkCi0jIGRlZmluZSBCT09TVF9G
VF9jY19pZCAzCi0jIGRlZmluZSBCT09TVF9GVF9jY19uYW1lIHN0ZGNhbGxfY2MKLSMgZGVmaW5l
IEJPT1NUX0ZUX2NjIEJPT1NUX1BQX0lERU5USVRZKF9fc3RkY2FsbCApCi0jIGRlZmluZSBCT09T
VF9GVF9jb25kIEJPT1NUX0ZUX0NDX1NURENBTEwKLSMgaWYgQk9PU1RfRlRfY29uZAotIyBkZWZp
bmUgQk9PU1RfRlRfY29uZmlnX3ZhbGlkIDEKLSMgaW5jbHVkZSBCT09TVF9GVF9jY19maWxlCi0j
IGVuZGlmCi0jIHVuZGVmIEJPT1NUX0ZUX2NvbmQKLSMgdW5kZWYgQk9PU1RfRlRfY2NfbmFtZQot
IyB1bmRlZiBCT09TVF9GVF9jYwotIyB1bmRlZiBCT09TVF9GVF9jY19pZAotIyBkZWZpbmUgQk9P
U1RfRlRfY2NfaWQgNAotIyBkZWZpbmUgQk9PU1RfRlRfY2NfbmFtZSBwYXNjYWxfY2MKLSMgZGVm
aW5lIEJPT1NUX0ZUX2NjIEJPT1NUX1BQX0lERU5USVRZKHBhc2NhbCApCi0jIGRlZmluZSBCT09T
VF9GVF9jb25kIEJPT1NUX0ZUX0NDX1BBU0NBTAotIyBpZiBCT09TVF9GVF9jb25kCi0jIGRlZmlu
ZSBCT09TVF9GVF9jb25maWdfdmFsaWQgMQotIyBpbmNsdWRlIEJPT1NUX0ZUX2NjX2ZpbGUKLSMg
ZW5kaWYKLSMgdW5kZWYgQk9PU1RfRlRfY29uZAotIyB1bmRlZiBCT09TVF9GVF9jY19uYW1lCi0j
IHVuZGVmIEJPT1NUX0ZUX2NjCi0jIHVuZGVmIEJPT1NUX0ZUX2NjX2lkCi0jIGRlZmluZSBCT09T
VF9GVF9jY19pZCA1Ci0jIGRlZmluZSBCT09TVF9GVF9jY19uYW1lIGZhc3RjYWxsX2NjCi0jIGRl
ZmluZSBCT09TVF9GVF9jYyBCT09TVF9QUF9JREVOVElUWShfX2Zhc3RjYWxsKQotIyBkZWZpbmUg
Qk9PU1RfRlRfY29uZCBCT09TVF9GVF9DQ19GQVNUQ0FMTAotIyBpZiBCT09TVF9GVF9jb25kCi0j
IGRlZmluZSBCT09TVF9GVF9jb25maWdfdmFsaWQgMQotIyBpbmNsdWRlIEJPT1NUX0ZUX2NjX2Zp
bGUKLSMgZW5kaWYKLSMgdW5kZWYgQk9PU1RfRlRfY29uZAotIyB1bmRlZiBCT09TVF9GVF9jY19u
YW1lCi0jIHVuZGVmIEJPT1NUX0ZUX2NjCi0jIHVuZGVmIEJPT1NUX0ZUX2NjX2lkCi0jIGRlZmlu
ZSBCT09TVF9GVF9jY19pZCA2Ci0jIGRlZmluZSBCT09TVF9GVF9jY19uYW1lIGNscmNhbGxfY2MK
LSMgZGVmaW5lIEJPT1NUX0ZUX2NjIEJPT1NUX1BQX0lERU5USVRZKF9fY2xyY2FsbCApCi0jIGRl
ZmluZSBCT09TVF9GVF9jb25kIEJPT1NUX0ZUX0NDX0NMUkNBTEwKLSMgaWYgQk9PU1RfRlRfY29u
ZAotIyBkZWZpbmUgQk9PU1RfRlRfY29uZmlnX3ZhbGlkIDEKLSMgaW5jbHVkZSBCT09TVF9GVF9j
Y19maWxlCi0jIGVuZGlmCi0jIHVuZGVmIEJPT1NUX0ZUX2NvbmQKLSMgdW5kZWYgQk9PU1RfRlRf
Y2NfbmFtZQotIyB1bmRlZiBCT09TVF9GVF9jYwotIyB1bmRlZiBCT09TVF9GVF9jY19pZAotIyBk
ZWZpbmUgQk9PU1RfRlRfY2NfaWQgNwotIyBkZWZpbmUgQk9PU1RfRlRfY2NfbmFtZSB0aGlzY2Fs
bF9jYwotIyBkZWZpbmUgQk9PU1RfRlRfY2MgQk9PU1RfUFBfSURFTlRJVFkoX190aGlzY2FsbCkK
LSMgZGVmaW5lIEJPT1NUX0ZUX2NvbmQgQk9PU1RfRlRfQ0NfVEhJU0NBTEwKLSMgaWYgQk9PU1Rf
RlRfY29uZAotIyBkZWZpbmUgQk9PU1RfRlRfY29uZmlnX3ZhbGlkIDEKLSMgaW5jbHVkZSBCT09T
VF9GVF9jY19maWxlCi0jIGVuZGlmCi0jIHVuZGVmIEJPT1NUX0ZUX2NvbmQKLSMgdW5kZWYgQk9P
U1RfRlRfY2NfbmFtZQotIyB1bmRlZiBCT09TVF9GVF9jYwotIyB1bmRlZiBCT09TVF9GVF9jY19p
ZAotIyBkZWZpbmUgQk9PU1RfRlRfY2NfaWQgOAotIyBkZWZpbmUgQk9PU1RfRlRfY2NfbmFtZSB0
aGlzY2FsbF9jYwotIyBkZWZpbmUgQk9PU1RfRlRfY2MgQk9PU1RfUFBfRU1QVFkKLSMgZGVmaW5l
IEJPT1NUX0ZUX2NvbmQgQk9PU1RfRlRfQ0NfSU1QTElDSVRfVEhJU0NBTEwKLSMgaWYgQk9PU1Rf
RlRfY29uZAotIyBkZWZpbmUgQk9PU1RfRlRfY29uZmlnX3ZhbGlkIDEKLSMgaW5jbHVkZSBCT09T
VF9GVF9jY19maWxlCi0jIGVuZGlmCi0jIHVuZGVmIEJPT1NUX0ZUX2NvbmQKLSMgdW5kZWYgQk9P
U1RfRlRfY2NfbmFtZQotIyB1bmRlZiBCT09TVF9GVF9jYwotIyB1bmRlZiBCT09TVF9GVF9jY19p
ZAotIyBpZm5kZWYgQk9PU1RfRlRfY29uZmlnX3ZhbGlkCi0jIGRlZmluZSBCT09TVF9GVF9jY19p
ZCAxCi0jIGRlZmluZSBCT09TVF9GVF9jY19uYW1lIGltcGxpY2l0X2NjCi0jIGRlZmluZSBCT09T
VF9GVF9jYyBCT09TVF9QUF9FTVBUWQotIyBkZWZpbmUgQk9PU1RfRlRfY29uZCAweDAwMDAwMDAx
Ci0jIGluY2x1ZGUgQk9PU1RfRlRfY2NfZmlsZQotIyB1bmRlZiBCT09TVF9GVF9jb25kCi0jIHVu
ZGVmIEJPT1NUX0ZUX2NjX25hbWUKLSMgdW5kZWYgQk9PU1RfRlRfY2MKLSMgdW5kZWYgQk9PU1Rf
RlRfY2NfaWQKLSMgZWxzZQotIyB1bmRlZiBCT09TVF9GVF9jb25maWdfdmFsaWQKLSMgZW5kaWYK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1
bmN0aW9uX3R5cGVzL2RldGFpbC9wcF9sb29wLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9wcF9sb29wLmhwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q4YzM0N2M5OWRkMjdjN2RmNTk0ZmQwOTRiZjRk
ZTc3OTZmYzE1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBl
cy9kZXRhaWwvcHBfbG9vcC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0KLS8v
IChDKSBDb3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlcgotLy8KLS8vIFVzZSBtb2RpZmljYXRpb24g
YW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgYm9vc3QgU29mdHdhcmUgTGljZW5z
ZSwKLS8vIFZlcnNpb24gMS4wLiAoU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkuCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIG5vIGluY2x1ZGUgZ3VhcmRz
LCB0aGlzIGZpbGUgaXMgaW50ZW5kZWQgZm9yIG11bHRpcGxlIGluY2x1c2lvbnMKLQotI2lmbmRl
ZiBCT09TVF9GVF9ERVRBSUxfUFBfTE9PUF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfRlRf
REVUQUlMX1BQX0xPT1BfSFBQX0lOQ0xVREVECi0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vz
c29yL2ZhY2lsaXRpZXMvZXhwYW5kLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNz
b3IvZmFjaWxpdGllcy9lbXB0eS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29y
L3B1bmN0dWF0aW9uL3BhcmVuLmhwcD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rp
b25fdHlwZXMvZGV0YWlsL2VuY29kaW5nL2RlZi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rp
b25fdHlwZXMvZGV0YWlsL2VuY29kaW5nL2FsaWFzZXNfZGVmLmhwcD4KLQotI2lmIGRlZmluZWQo
Qk9PU1RfRlRfUFJFUFJPQ0VTU0lOR19NT0RFKQotIyAgIGRlZmluZSBCT09TVF9GVF9sb29wIDxi
b29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvcHBfY2NfbG9vcC9tYXN0ZXIuaHBwPgotI2Vsc2UK
LSMgICBkZWZpbmUgQk9PU1RfRlRfbG9vcCBcCi0gICAgICAgIDxib29zdC9mdW5jdGlvbl90eXBl
cy9kZXRhaWwvcHBfY2NfbG9vcC9wcmVwcm9jZXNzZWQuaHBwPgotI2VuZGlmCi0KLSNpZiBkZWZp
bmVkKEJPT1NUX0ZUX2FsX3BhdGgpCi0KLSMgICBkZWZpbmUgQk9PU1RfRlRfY2NfZmlsZSBcCi0g
ICAgICAgIDxib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvcHBfdmFyaWF0ZV9sb29wL3ByZXBy
b2Nlc3NlZC5ocHA+Ci0jICAgZGVmaW5lIEJPT1NUX0ZUX3ZhcmlhdGVfZmlsZSBcCi0gICAgICAg
IDxib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvcHBfYXJpdHlfbG9vcC5ocHA+Ci0KLSMgICBp
Zm5kZWYgQk9PU1RfRlRfdHlwZV9mdW5jdGlvbgotIyAgIGRlZmluZSBCT09TVF9GVF90eXBlX2Z1
bmN0aW9uKGNjLG5hbWUpIEJPT1NUX0ZUX1NZTlRBWCggXAotICAgICAgUiBCT09TVF9QUF9FTVBU
WSxCT09TVF9QUF9FTVBUWSxjYyxCT09TVF9QUF9FTVBUWSxuYW1lLEJPT1NUX1BQX0VNUFRZKQot
IyAgIGVuZGlmCi0jICAgaWZuZGVmIEJPT1NUX0ZUX3R5cGVfZnVuY3Rpb25fcG9pbnRlcgotIyAg
IGRlZmluZSBCT09TVF9GVF90eXBlX2Z1bmN0aW9uX3BvaW50ZXIoY2MsbmFtZSkgQk9PU1RfRlRf
U1lOVEFYKCBcCi0gICAgICBSIEJPT1NUX1BQX0VNUFRZLEJPT1NUX1BQX0xQQVJFTixjYywqIEJP
T1NUX1BQX0VNUFRZLG5hbWUsQk9PU1RfUFBfUlBBUkVOKQotIyAgIGVuZGlmCi0jICAgaWZuZGVm
IEJPT1NUX0ZUX3R5cGVfZnVuY3Rpb25fcmVmZXJlbmNlCi0jICAgZGVmaW5lIEJPT1NUX0ZUX3R5
cGVfZnVuY3Rpb25fcmVmZXJlbmNlKGNjLG5hbWUpIEJPT1NUX0ZUX1NZTlRBWCggXAotICAgICAg
UiBCT09TVF9QUF9FTVBUWSxCT09TVF9QUF9MUEFSRU4sY2MsJiBCT09TVF9QUF9FTVBUWSxuYW1l
LEJPT1NUX1BQX1JQQVJFTikKLSMgICBlbmRpZgotIyAgIGlmbmRlZiBCT09TVF9GVF90eXBlX21l
bWJlcl9mdW5jdGlvbl9wb2ludGVyCi0jICAgZGVmaW5lIEJPT1NUX0ZUX3R5cGVfbWVtYmVyX2Z1
bmN0aW9uX3BvaW50ZXIoY2MsbmFtZSkgQk9PU1RfRlRfU1lOVEFYKCBcCi0gICAgICBSIEJPT1NU
X1BQX0VNUFRZLEJPT1NUX1BQX0xQQVJFTixjYyxUMDo6KiBCT09TVF9QUF9FTVBUWSxuYW1lLEJP
T1NUX1BQX1JQQVJFTikKLSMgICBlbmRpZgotCi0jICAgaW5jbHVkZSBCT09TVF9GVF9sb29wCi0K
LSMgICB1bmRlZiBCT09TVF9GVF90eXBlX2Z1bmN0aW9uCi0jICAgdW5kZWYgQk9PU1RfRlRfdHlw
ZV9mdW5jdGlvbl9wb2ludGVyCi0jICAgdW5kZWYgQk9PU1RfRlRfdHlwZV9mdW5jdGlvbl9yZWZl
cmVuY2UKLSMgICB1bmRlZiBCT09TVF9GVF90eXBlX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyCi0K
LSMgICB1bmRlZiBCT09TVF9GVF92YXJpYXRpb25zCi0jICAgdW5kZWYgQk9PU1RfRlRfdmFyaWF0
ZV9maWxlCi0jICAgdW5kZWYgQk9PU1RfRlRfY2NfZmlsZQotIyAgIHVuZGVmIEJPT1NUX0ZUX2Fs
X3BhdGgKLQotI2VsaWYgZGVmaW5lZChCT09TVF9GVF9jY19maWxlKQotCi0jICAgaW5jbHVkZSBC
T09TVF9GVF9sb29wCi0jICAgdW5kZWYgQk9PU1RfRlRfY2NfZmlsZQotCi0jZWxzZQotCi0jICAg
ZXJyb3IgImFyZ3VtZW50IG1pc3NpbmciCi0KLSNlbmRpZgotCi0jdW5kZWYgQk9PU1RfRlRfbG9v
cAotCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0YWlsL2VuY29kaW5nL2FsaWFz
ZXNfdW5kZWYuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9lbmNv
ZGluZy91bmRlZi5ocHA+Ci0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0YWlsL3BwX3JldGFnX2RlZmF1bHRf
Y2MvcHJlcHJvY2Vzc2VkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9wcF9yZXRhZ19kZWZhdWx0X2NjL3ByZXByb2Nl
c3NlZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNjY2ZDBmMjc3YjQ4ODU2
ZjZjOWJjZTdjZWNmMmU5ODc0YmEzYjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
ZnVuY3Rpb25fdHlwZXMvZGV0YWlsL3BwX3JldGFnX2RlZmF1bHRfY2MvcHJlcHJvY2Vzc2VkLmhw
cAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLQotLy8gKEMpIENvcHlyaWdodCBUb2Jp
YXMgU2Nod2luZ2VyCi0vLwotLy8gVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFy
ZSBzdWJqZWN0IHRvIHRoZSBib29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gVmVyc2lvbiAxLjAu
IChTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLQotLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotLy8gbm8gaW5jbHVkZSBndWFyZHMsIHRoaXMgZmlsZSBpcyBndWFy
ZGVkIGV4dGVybmFsbHkKLQotLy8gdGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBmcm9tIHRo
ZSBtYXN0ZXIuaHBwIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Ci1uYW1lc3BhY2UgYm9vc3Qg
eyBuYW1lc3BhY2UgZnVuY3Rpb25fdHlwZXMgewotbmFtZXNwYWNlIGRldGFpbAotewotdGVtcGxh
dGU8Y2xhc3MgVGFnLCBjbGFzcyBSZWZUYWc+IHN0cnVjdCBzZWxlY3Rvcl9iaXRzCi17Ci1CT09T
VF9TVEFUSUNfQ09OU1RBTlQoYml0c190LCB2YWx1ZSA9ICgKLSg6OmJvb3N0OjpmdW5jdGlvbl90
eXBlczo6ZGV0YWlsOjpiaXRzPFRhZz4gOjp2YWx1ZSAmIDB4MDAwMDgwMDApIAotfCAoOjpib29z
dDo6ZnVuY3Rpb25fdHlwZXM6OmRldGFpbDo6Yml0czxSZWZUYWc+IDo6dmFsdWUgJiA4MDIpCi0p
KTsKLX07Ci10ZW1wbGF0ZTxiaXRzX3QgU2VsZWN0b3JCaXRzPiBzdHJ1Y3QgZGVmYXVsdF9jY190
YWc7IAotdGVtcGxhdGU8Y2xhc3MgVGFnLCBjbGFzcyBSZWZUYWc+IHN0cnVjdCByZXRhZ19kZWZh
dWx0X2NjCi06IGRldGFpbDo6Y29tcG91bmRfdGFnCi08IFRhZywgZGV0YWlsOjpkZWZhdWx0X2Nj
X3RhZzwgCi06OmJvb3N0OjpmdW5jdGlvbl90eXBlczo6ZGV0YWlsOjpzZWxlY3Rvcl9iaXRzPFRh
ZyxSZWZUYWc+IDo6dmFsdWUgPiA+Ci17IH07Ci10ZW1wbGF0ZTxiaXRzX3QgU2VsZWN0b3JCaXRz
PiBzdHJ1Y3QgZGVmYXVsdF9jY190YWcKLXsKLXR5cGVkZWYgbnVsbF90YWc6OmJpdHMgYml0czsK
LXR5cGVkZWYgbnVsbF90YWc6Om1hc2sgbWFzazsKLX07Ci1jbGFzcyB0ZXN0X2NsYXNzOwotdHlw
ZWRlZiBjb25zdGFudDwweDAwZmY4MDAwPiBjY19tYXNrX2NvbnN0YW50OwotdGVtcGxhdGU8ID4g
c3RydWN0IGRlZmF1bHRfY2NfdGFnPDMzMjgyPiAKLXsKLXR5cGVkZWYgdm9pZCAoICp0ZXN0ZXIp
KCk7Ci10eXBlZGVmIG1wbDo6Yml0YW5kXzxjb21wb25lbnRzPHRlc3Rlcj4gOjpiaXRzLGNjX21h
c2tfY29uc3RhbnQ+IGJpdHM7Ci10eXBlZGVmIGNjX21hc2tfY29uc3RhbnQgbWFzazsKLX07Ci10
ZW1wbGF0ZTwgPiBzdHJ1Y3QgZGVmYXVsdF9jY190YWc8MzMwMjY+IAotewotdHlwZWRlZiB2b2lk
ICggKnRlc3RlcikoIC4uLiApOwotdHlwZWRlZiBtcGw6OmJpdGFuZF88Y29tcG9uZW50czx0ZXN0
ZXI+IDo6Yml0cyxjY19tYXNrX2NvbnN0YW50PiBiaXRzOwotdHlwZWRlZiBjY19tYXNrX2NvbnN0
YW50IG1hc2s7Ci19OwotdGVtcGxhdGU8ID4gc3RydWN0IGRlZmF1bHRfY2NfdGFnPDMzMzEyPiAK
LXsKLXR5cGVkZWYgdm9pZCAodGVzdF9jbGFzczo6ICp0ZXN0ZXIpKCk7Ci10eXBlZGVmIG1wbDo6
Yml0YW5kXzxjb21wb25lbnRzPHRlc3Rlcj4gOjpiaXRzLGNjX21hc2tfY29uc3RhbnQ+IGJpdHM7
Ci10eXBlZGVmIGNjX21hc2tfY29uc3RhbnQgbWFzazsKLX07Ci10ZW1wbGF0ZTwgPiBzdHJ1Y3Qg
ZGVmYXVsdF9jY190YWc8MzMwNTY+IAotewotdHlwZWRlZiB2b2lkICh0ZXN0X2NsYXNzOjogKnRl
c3RlcikoIC4uLiApOwotdHlwZWRlZiBtcGw6OmJpdGFuZF88Y29tcG9uZW50czx0ZXN0ZXI+IDo6
Yml0cyxjY19tYXNrX2NvbnN0YW50PiBiaXRzOwotdHlwZWRlZiBjY19tYXNrX2NvbnN0YW50IG1h
c2s7Ci19OwotfSB9IH0gCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvcHBfdGFncy9jY190YWcuaHBwIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMv
ZGV0YWlsL3BwX3RhZ3MvY2NfdGFnLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ODFmMWQ4OWU3NDMwYTM2YjA1OWI5Y2I3NjY3NTM4YWY1OGNmM2YzMy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvcHBfdGFncy9jY190YWcuaHBw
CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotCi0vLyAoQykgQ29weXJpZ2h0IFRvYmlh
cyBTY2h3aW5nZXIKLS8vCi0vLyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJl
IHN1YmplY3QgdG8gdGhlIGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyBWZXJzaW9uIDEuMC4g
KFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0vLyBubyBpbmNsdWRlIGd1YXJkcywgdGhpcyBmaWxlIGlzIGludGVu
ZGVkIGZvciBtdWx0aXBsZSBpbmNsdXNpb25zCi0KLSAgc3RydWN0IEJPT1NUX0ZUX2NjX25hbWUK
LSAgewotICAgIHR5cGVkZWYgZGV0YWlsOjplbmNvZGVfYml0czwwLEJPT1NUX0ZUX2NjX2lkPiBi
aXRzOwotICAgIHR5cGVkZWYgZGV0YWlsOjpjb25zdGFudDxCT09TVF9GVF9jY19tYXNrPiBtYXNr
OwotICB9OwotCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9wcF90YWdzL3ByZXByb2Nlc3NlZC5ocHAg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBl
cy9kZXRhaWwvcHBfdGFncy9wcmVwcm9jZXNzZWQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4MjNjM2NjMWNkZWZlN2Y0MTQ3MDcyMGFlNmRjMzNjYmM1ZGRiZTczLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9wcF90YWdzL3By
ZXByb2Nlc3NlZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0KLS8vIChDKSBD
b3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlcgotLy8KLS8vIFVzZSBtb2RpZmljYXRpb24gYW5kIGRp
c3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgYm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8v
IFZlcnNpb24gMS4wLiAoU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCku
Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIG5vIGluY2x1ZGUgZ3VhcmRzLCB0aGlz
IGZpbGUgaXMgZ3VhcmRlZCBleHRlcm5hbGx5Ci0KLS8vIHRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgZnJvbSB0aGUgbWFzdGVyLmhwcCBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeQotbmFt
ZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIGZ1bmN0aW9uX3R5cGVzIHsKLXR5cGVkZWYgZGV0YWls
Ojpwcm9wZXJ0eV90YWc8MHgwMDAwMDIwMCwweDAwMDAwMzAwPiBub25fdmFyaWFkaWM7Ci10eXBl
ZGVmIGRldGFpbDo6cHJvcGVydHlfdGFnPDB4MDAwMDAxMDAsMHgwMDAwMDMwMD4gdmFyaWFkaWM7
Ci10eXBlZGVmIGRldGFpbDo6cHJvcGVydHlfdGFnPDAsMHgwMDAwMDQwMD4gbm9uX2NvbnN0Owot
dHlwZWRlZiBkZXRhaWw6OnByb3BlcnR5X3RhZzwweDAwMDAwNDAwLDB4MDAwMDA0MDA+IGNvbnN0
X3F1YWxpZmllZDsKLXR5cGVkZWYgZGV0YWlsOjpwcm9wZXJ0eV90YWc8MCwweDAwMDAwODAwPiBu
b25fdm9sYXRpbGU7Ci10eXBlZGVmIGRldGFpbDo6cHJvcGVydHlfdGFnPDB4MDAwMDA4MDAsMHgw
MDAwMDgwMD4gdm9sYXRpbGVfcXVhbGlmaWVkOyAKLXR5cGVkZWYgZGV0YWlsOjpwcm9wZXJ0eV90
YWc8MHgwMDAwODAwMCwweDAwZmY4MDAwPiBkZWZhdWx0X2NjOwotdHlwZWRlZiBkZXRhaWw6OnBy
b3BlcnR5X3RhZzwwICwgMzA3Mj4gbm9uX2N2OwotdHlwZWRlZiBkZXRhaWw6OnByb3BlcnR5X3Rh
ZzwweDAwMDAwNDAwICwgMzA3Mj4gY29uc3Rfbm9uX3ZvbGF0aWxlOwotdHlwZWRlZiBkZXRhaWw6
OnByb3BlcnR5X3RhZzwweDAwMDAwODAwLCAzMDcyPiB2b2xhdGlsZV9ub25fY29uc3Q7Ci10eXBl
ZGVmIGRldGFpbDo6cHJvcGVydHlfdGFnPDMwNzIgLCAzMDcyPiBjdl9xdWFsaWZpZWQ7Ci1uYW1l
c3BhY2UgZGV0YWlsIHsKLXR5cGVkZWYgY29uc3RhbnQ8MHgwMGZmMGZmZj4gZnVsbF9tYXNrOwot
dGVtcGxhdGUgPGJpdHNfdCBGbGFncywgYml0c190IENDSUQ+IHN0cnVjdCBlbmNvZGVfYml0c19p
bXBsCi17Ci1CT09TVF9TVEFUSUNfQ09OU1RBTlQoIGJpdHNfdCwgdmFsdWUgPSAKLUZsYWdzIHwg
KDB4MDAwMDgwMDAgKiBDQ0lEKSA8PCAxICk7Ci19OwotdGVtcGxhdGUgPGJpdHNfdCBGbGFncywg
Yml0c190IENDSUQsIHN0ZDo6c2l6ZV90IEFyaXR5PiAKLXN0cnVjdCBlbmNvZGVfY2hhcnJfaW1w
bAotewotQk9PU1RfU1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCB2YWx1ZSA9IChzdGQ6OnNp
emVfdCkoMSsKLUZsYWdzIHwgKDB4MDAwMDgwMDAgKiBDQ0lEKSA8PCAxIHwgQXJpdHkgPDwgMjQK
LSkpOwotfTsKLXRlbXBsYXRlIDxiaXRzX3QgQml0cz4gc3RydWN0IGRlY29kZV9iaXRzCi17Ci1C
T09TVF9TVEFUSUNfQ09OU1RBTlQoYml0c190LCBmbGFncyA9IEJpdHMgJiAweDAwMDAwZmZmKTsK
LUJPT1NUX1NUQVRJQ19DT05TVEFOVChiaXRzX3QsIGNjX2lkID0gCi0oIChCaXRzICYgMHgwMGZm
MGZmZikgLyAweDAwMDA4MDAwKSA+PiAxIAotKTsKLUJPT1NUX1NUQVRJQ19DT05TVEFOVChiaXRz
X3QsIHRhZ19iaXRzID0gKEJpdHMgJiAweDAwZmYwZmZmKSk7Ci1CT09TVF9TVEFUSUNfQ09OU1RB
TlQoc3RkOjpzaXplX3QsIGFyaXR5ID0gKHN0ZDo6c2l6ZV90KQotKEJpdHMgPj4gMjQpIAotKTsK
LX07Ci10ZW1wbGF0ZSA8Yml0c190IExIU19iaXRzLCBiaXRzX3QgTEhTX21hc2ssIGJpdHNfdCBS
SFNfYml0cywgYml0c190IFJIU19tYXNrPgotc3RydWN0IHRhZ19pY2UKLXsKLUJPT1NUX1NUQVRJ
Q19DT05TVEFOVChib29sLCBtYXRjaCA9Ci1SSFNfYml0cyA9PSAoTEhTX2JpdHMgJiBSSFNfbWFz
ayAmIChSSFNfYml0cyB8IH4weDAwMDAwMGZmKSkKLSk7Ci1CT09TVF9TVEFUSUNfQ09OU1RBTlQo
Yml0c190LCBjb21iaW5lZF9iaXRzID0gCi0oTEhTX2JpdHMgJiB+UkhTX21hc2spIHwgUkhTX2Jp
dHMKLSk7Ci1CT09TVF9TVEFUSUNfQ09OU1RBTlQoYml0c190LCBjb21iaW5lZF9tYXNrID0KLUxI
U19tYXNrIHwgUkhTX21hc2sKLSk7Ci1CT09TVF9TVEFUSUNfQ09OU1RBTlQoYml0c190LCBleHRy
YWN0ZWRfYml0cyA9Ci1MSFNfYml0cyAmIFJIU19tYXNrCi0pOwotfTsKLXR5cGVkZWYgcHJvcGVy
dHlfdGFnPDB4MDAwMDAwMDEsMHgwMDAwMDBmZj4gY2FsbGFibGVfYnVpbHRpbl90YWc7Ci10eXBl
ZGVmIHByb3BlcnR5X3RhZzwweDAwMDAwMDAzLDB4MDAwMDAwZmY+IG5vbm1lbWJlcl9jYWxsYWJs
ZV9idWlsdGluX3RhZzsKLXR5cGVkZWYgcHJvcGVydHlfdGFnPDB4MDAwMDAwMDcsMHgwMDAwMDBm
Zj4gZnVuY3Rpb25fdGFnOwotdHlwZWRlZiBwcm9wZXJ0eV90YWc8MHgwMDAwMDAxMywweDAwMDAw
MGZmPiByZWZlcmVuY2VfdGFnOwotdHlwZWRlZiBwcm9wZXJ0eV90YWc8MHgwMDAwMDAwYiwweDAw
MDAwMGZmPiBwb2ludGVyX3RhZzsKLXR5cGVkZWYgcHJvcGVydHlfdGFnPDB4MDAwMDAwNjEsMHgw
MDAwMDBmZj4gbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXJfdGFnOwotdHlwZWRlZiBwcm9wZXJ0eV90
YWc8MHgwMDAwMDBhMywweDAwMDAwMGZmPiBtZW1iZXJfb2JqZWN0X3BvaW50ZXJfdGFnOwotdHlw
ZWRlZiBwcm9wZXJ0eV90YWc8MHgwMDAwMDJhMywweDAwZmYwZmZmPiBtZW1iZXJfb2JqZWN0X3Bv
aW50ZXJfYmFzZTsKLXR5cGVkZWYgcHJvcGVydHlfdGFnPDB4MDAwMDAwMjAsMHgwMDAwMDBmZj4g
bWVtYmVyX3BvaW50ZXJfdGFnOwotdHlwZWRlZiBwcm9wZXJ0eV90YWc8IDMzMjg3ICwgMTY3NDU0
NzEgPiBudl9kY2NfZnVuYzsKLXR5cGVkZWYgcHJvcGVydHlfdGFnPCAzMzM3NyAsIDE2NzQ1NDcx
ID4gbnZfZGNjX21mcDsKLX0gCi19IH0gCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvcHBfdmFyaWF0ZV9s
b29wL3ByZXByb2Nlc3NlZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvcHBfdmFyaWF0ZV9sb29wL3ByZXByb2Nlc3Nl
ZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlN2M0ZjkxZmE5MjE4OWM0N2Ri
YTEyNGY3ZmMxMWMyZmMwODdhY2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZnVu
Y3Rpb25fdHlwZXMvZGV0YWlsL3BwX3ZhcmlhdGVfbG9vcC9wcmVwcm9jZXNzZWQuaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLQotLy8gKEMpIENvcHlyaWdodCBUb2JpYXMgU2No
d2luZ2VyCi0vLwotLy8gVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJq
ZWN0IHRvIHRoZSBib29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gVmVyc2lvbiAxLjAuIChTZWUg
aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLQotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotLy8gdGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBmcm9tIHRoZSBtYXN0
ZXIuaHBwIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Ci0jIGRlZmluZSBCT09TVF9GVF9tZnAg
MAotIyBkZWZpbmUgQk9PU1RfRlRfc3ludGF4IEJPT1NUX0ZUX3R5cGVfZnVuY3Rpb24KLSMgaWYg
ISAhICg0ICYgKEJPT1NUX0ZUX3ZhcmlhdGlvbnMpKQotIyBpZiAoNTE5ICYgKEJPT1NUX0ZUX2Nv
bmQpKSA9PSAoQk9PU1RfRlRfY29uZCkKLSMgZGVmaW5lIEJPT1NUX0ZUX2VsbAotIyBkZWZpbmUg
Qk9PU1RfRlRfbnVsbGFyeV9wYXJhbSBCT09TVF9GVF9OVUxMQVJZX1BBUkFNCi0jIGRlZmluZSBC
T09TVF9GVF9jdiAKLSMgZGVmaW5lIEJPT1NUX0ZUX2ZsYWdzIDUxOQotIyBpbmNsdWRlIEJPT1NU
X0ZUX3ZhcmlhdGVfZmlsZQotIyB1bmRlZiBCT09TVF9GVF9jdgotIyB1bmRlZiBCT09TVF9GVF9l
bGwKLSMgdW5kZWYgQk9PU1RfRlRfbnVsbGFyeV9wYXJhbQotIyB1bmRlZiBCT09TVF9GVF9mbGFn
cwotIyBlbmRpZgotIyBlbmRpZgotIyBpZiAhICEgKDQgJiAoQk9PU1RfRlRfdmFyaWF0aW9ucykp
Ci0jIGlmICgyNjMgJiAoQk9PU1RfRlRfY29uZCkpID09IChCT09TVF9GVF9jb25kKQotIyBkZWZp
bmUgQk9PU1RfRlRfZWxsIC4uLgotIyBkZWZpbmUgQk9PU1RfRlRfbnVsbGFyeV9wYXJhbQotIyBk
ZWZpbmUgQk9PU1RfRlRfY3YgCi0jIGRlZmluZSBCT09TVF9GVF9mbGFncyAyNjMKLSMgaW5jbHVk
ZSBCT09TVF9GVF92YXJpYXRlX2ZpbGUKLSMgdW5kZWYgQk9PU1RfRlRfY3YKLSMgdW5kZWYgQk9P
U1RfRlRfZWxsCi0jIHVuZGVmIEJPT1NUX0ZUX251bGxhcnlfcGFyYW0KLSMgdW5kZWYgQk9PU1Rf
RlRfZmxhZ3MKLSMgZW5kaWYKLSMgZW5kaWYKLSMgaWYgIUJPT1NUX0ZUX05PX0NWX0ZVTkNfU1VQ
UE9SVAotIyBpZiAhICEgKDQgJiAoQk9PU1RfRlRfdmFyaWF0aW9ucykpCi0jIGlmICgxNTQzICYg
KEJPT1NUX0ZUX2NvbmQpKSA9PSAoQk9PU1RfRlRfY29uZCkKLSMgZGVmaW5lIEJPT1NUX0ZUX2Vs
bAotIyBkZWZpbmUgQk9PU1RfRlRfbnVsbGFyeV9wYXJhbSBCT09TVF9GVF9OVUxMQVJZX1BBUkFN
Ci0jIGRlZmluZSBCT09TVF9GVF9jdiBjb25zdAotIyBkZWZpbmUgQk9PU1RfRlRfZmxhZ3MgMTU0
MwotIyBpbmNsdWRlIEJPT1NUX0ZUX3ZhcmlhdGVfZmlsZQotIyB1bmRlZiBCT09TVF9GVF9jdgot
IyB1bmRlZiBCT09TVF9GVF9lbGwKLSMgdW5kZWYgQk9PU1RfRlRfbnVsbGFyeV9wYXJhbQotIyB1
bmRlZiBCT09TVF9GVF9mbGFncwotIyBlbmRpZgotIyBlbmRpZgotIyBpZiAhICEgKDQgJiAoQk9P
U1RfRlRfdmFyaWF0aW9ucykpCi0jIGlmICgxMjg3ICYgKEJPT1NUX0ZUX2NvbmQpKSA9PSAoQk9P
U1RfRlRfY29uZCkKLSMgZGVmaW5lIEJPT1NUX0ZUX2VsbCAuLi4KLSMgZGVmaW5lIEJPT1NUX0ZU
X251bGxhcnlfcGFyYW0KLSMgZGVmaW5lIEJPT1NUX0ZUX2N2IGNvbnN0Ci0jIGRlZmluZSBCT09T
VF9GVF9mbGFncyAxMjg3Ci0jIGluY2x1ZGUgQk9PU1RfRlRfdmFyaWF0ZV9maWxlCi0jIHVuZGVm
IEJPT1NUX0ZUX2N2Ci0jIHVuZGVmIEJPT1NUX0ZUX2VsbAotIyB1bmRlZiBCT09TVF9GVF9udWxs
YXJ5X3BhcmFtCi0jIHVuZGVmIEJPT1NUX0ZUX2ZsYWdzCi0jIGVuZGlmCi0jIGVuZGlmCi0jIGlm
ICEgISAoNCAmIChCT09TVF9GVF92YXJpYXRpb25zKSkKLSMgaWYgKDI1NjcgJiAoQk9PU1RfRlRf
Y29uZCkpID09IChCT09TVF9GVF9jb25kKQotIyBkZWZpbmUgQk9PU1RfRlRfZWxsCi0jIGRlZmlu
ZSBCT09TVF9GVF9udWxsYXJ5X3BhcmFtIEJPT1NUX0ZUX05VTExBUllfUEFSQU0KLSMgZGVmaW5l
IEJPT1NUX0ZUX2N2IHZvbGF0aWxlCi0jIGRlZmluZSBCT09TVF9GVF9mbGFncyAyNTY3Ci0jIGlu
Y2x1ZGUgQk9PU1RfRlRfdmFyaWF0ZV9maWxlCi0jIHVuZGVmIEJPT1NUX0ZUX2N2Ci0jIHVuZGVm
IEJPT1NUX0ZUX2VsbAotIyB1bmRlZiBCT09TVF9GVF9udWxsYXJ5X3BhcmFtCi0jIHVuZGVmIEJP
T1NUX0ZUX2ZsYWdzCi0jIGVuZGlmCi0jIGVuZGlmCi0jIGlmICEgISAoNCAmIChCT09TVF9GVF92
YXJpYXRpb25zKSkKLSMgaWYgKDIzMTEgJiAoQk9PU1RfRlRfY29uZCkpID09IChCT09TVF9GVF9j
b25kKQotIyBkZWZpbmUgQk9PU1RfRlRfZWxsIC4uLgotIyBkZWZpbmUgQk9PU1RfRlRfbnVsbGFy
eV9wYXJhbQotIyBkZWZpbmUgQk9PU1RfRlRfY3Ygdm9sYXRpbGUKLSMgZGVmaW5lIEJPT1NUX0ZU
X2ZsYWdzIDIzMTEKLSMgaW5jbHVkZSBCT09TVF9GVF92YXJpYXRlX2ZpbGUKLSMgdW5kZWYgQk9P
U1RfRlRfY3YKLSMgdW5kZWYgQk9PU1RfRlRfZWxsCi0jIHVuZGVmIEJPT1NUX0ZUX251bGxhcnlf
cGFyYW0KLSMgdW5kZWYgQk9PU1RfRlRfZmxhZ3MKLSMgZW5kaWYKLSMgZW5kaWYKLSMgaWYgISAh
ICg0ICYgKEJPT1NUX0ZUX3ZhcmlhdGlvbnMpKQotIyBpZiAoMzU5MSAmIChCT09TVF9GVF9jb25k
KSkgPT0gKEJPT1NUX0ZUX2NvbmQpCi0jIGRlZmluZSBCT09TVF9GVF9lbGwKLSMgZGVmaW5lIEJP
T1NUX0ZUX251bGxhcnlfcGFyYW0gQk9PU1RfRlRfTlVMTEFSWV9QQVJBTQotIyBkZWZpbmUgQk9P
U1RfRlRfY3YgY29uc3Qgdm9sYXRpbGUKLSMgZGVmaW5lIEJPT1NUX0ZUX2ZsYWdzIDM1OTEKLSMg
aW5jbHVkZSBCT09TVF9GVF92YXJpYXRlX2ZpbGUKLSMgdW5kZWYgQk9PU1RfRlRfY3YKLSMgdW5k
ZWYgQk9PU1RfRlRfZWxsCi0jIHVuZGVmIEJPT1NUX0ZUX251bGxhcnlfcGFyYW0KLSMgdW5kZWYg
Qk9PU1RfRlRfZmxhZ3MKLSMgZW5kaWYKLSMgZW5kaWYKLSMgaWYgISAhICg0ICYgKEJPT1NUX0ZU
X3ZhcmlhdGlvbnMpKQotIyBpZiAoMzMzNSAmIChCT09TVF9GVF9jb25kKSkgPT0gKEJPT1NUX0ZU
X2NvbmQpCi0jIGRlZmluZSBCT09TVF9GVF9lbGwgLi4uCi0jIGRlZmluZSBCT09TVF9GVF9udWxs
YXJ5X3BhcmFtCi0jIGRlZmluZSBCT09TVF9GVF9jdiBjb25zdCB2b2xhdGlsZQotIyBkZWZpbmUg
Qk9PU1RfRlRfZmxhZ3MgMzMzNQotIyBpbmNsdWRlIEJPT1NUX0ZUX3ZhcmlhdGVfZmlsZQotIyB1
bmRlZiBCT09TVF9GVF9jdgotIyB1bmRlZiBCT09TVF9GVF9lbGwKLSMgdW5kZWYgQk9PU1RfRlRf
bnVsbGFyeV9wYXJhbQotIyB1bmRlZiBCT09TVF9GVF9mbGFncwotIyBlbmRpZgotIyBlbmRpZgot
IyBlbmRpZgotIyB1bmRlZiBCT09TVF9GVF9zeW50YXgKLSMgZGVmaW5lIEJPT1NUX0ZUX3N5bnRh
eCBCT09TVF9GVF90eXBlX2Z1bmN0aW9uX3BvaW50ZXIKLSMgaWYgISAhICg4ICYgKEJPT1NUX0ZU
X3ZhcmlhdGlvbnMpKQotIyBpZiAoNTIzICYgKEJPT1NUX0ZUX2NvbmQpKSA9PSAoQk9PU1RfRlRf
Y29uZCkKLSMgZGVmaW5lIEJPT1NUX0ZUX2VsbAotIyBkZWZpbmUgQk9PU1RfRlRfbnVsbGFyeV9w
YXJhbSBCT09TVF9GVF9OVUxMQVJZX1BBUkFNCi0jIGRlZmluZSBCT09TVF9GVF9jdiAKLSMgZGVm
aW5lIEJPT1NUX0ZUX2ZsYWdzIDUyMwotIyBpbmNsdWRlIEJPT1NUX0ZUX3ZhcmlhdGVfZmlsZQot
IyB1bmRlZiBCT09TVF9GVF9jdgotIyB1bmRlZiBCT09TVF9GVF9lbGwKLSMgdW5kZWYgQk9PU1Rf
RlRfbnVsbGFyeV9wYXJhbQotIyB1bmRlZiBCT09TVF9GVF9mbGFncwotIyBlbmRpZgotIyBlbmRp
ZgotIyBpZiAhICEgKDggJiAoQk9PU1RfRlRfdmFyaWF0aW9ucykpCi0jIGlmICgyNjcgJiAoQk9P
U1RfRlRfY29uZCkpID09IChCT09TVF9GVF9jb25kKQotIyBkZWZpbmUgQk9PU1RfRlRfZWxsIC4u
LgotIyBkZWZpbmUgQk9PU1RfRlRfbnVsbGFyeV9wYXJhbQotIyBkZWZpbmUgQk9PU1RfRlRfY3Yg
Ci0jIGRlZmluZSBCT09TVF9GVF9mbGFncyAyNjcKLSMgaW5jbHVkZSBCT09TVF9GVF92YXJpYXRl
X2ZpbGUKLSMgdW5kZWYgQk9PU1RfRlRfY3YKLSMgdW5kZWYgQk9PU1RfRlRfZWxsCi0jIHVuZGVm
IEJPT1NUX0ZUX251bGxhcnlfcGFyYW0KLSMgdW5kZWYgQk9PU1RfRlRfZmxhZ3MKLSMgZW5kaWYK
LSMgZW5kaWYKLSMgdW5kZWYgQk9PU1RfRlRfc3ludGF4Ci0jIGRlZmluZSBCT09TVF9GVF9zeW50
YXggQk9PU1RfRlRfdHlwZV9mdW5jdGlvbl9yZWZlcmVuY2UKLSMgaWYgISAhICgxNiAmIChCT09T
VF9GVF92YXJpYXRpb25zKSkKLSMgaWYgKDUzMSAmIChCT09TVF9GVF9jb25kKSkgPT0gKEJPT1NU
X0ZUX2NvbmQpCi0jIGRlZmluZSBCT09TVF9GVF9lbGwKLSMgZGVmaW5lIEJPT1NUX0ZUX251bGxh
cnlfcGFyYW0gQk9PU1RfRlRfTlVMTEFSWV9QQVJBTQotIyBkZWZpbmUgQk9PU1RfRlRfY3YgCi0j
IGRlZmluZSBCT09TVF9GVF9mbGFncyA1MzEKLSMgaW5jbHVkZSBCT09TVF9GVF92YXJpYXRlX2Zp
bGUKLSMgdW5kZWYgQk9PU1RfRlRfY3YKLSMgdW5kZWYgQk9PU1RfRlRfZWxsCi0jIHVuZGVmIEJP
T1NUX0ZUX251bGxhcnlfcGFyYW0KLSMgdW5kZWYgQk9PU1RfRlRfZmxhZ3MKLSMgZW5kaWYKLSMg
ZW5kaWYKLSMgaWYgISAhICgxNiAmIChCT09TVF9GVF92YXJpYXRpb25zKSkKLSMgaWYgKDI3NSAm
IChCT09TVF9GVF9jb25kKSkgPT0gKEJPT1NUX0ZUX2NvbmQpCi0jIGRlZmluZSBCT09TVF9GVF9l
bGwgLi4uCi0jIGRlZmluZSBCT09TVF9GVF9udWxsYXJ5X3BhcmFtCi0jIGRlZmluZSBCT09TVF9G
VF9jdiAKLSMgZGVmaW5lIEJPT1NUX0ZUX2ZsYWdzIDI3NQotIyBpbmNsdWRlIEJPT1NUX0ZUX3Zh
cmlhdGVfZmlsZQotIyB1bmRlZiBCT09TVF9GVF9jdgotIyB1bmRlZiBCT09TVF9GVF9lbGwKLSMg
dW5kZWYgQk9PU1RfRlRfbnVsbGFyeV9wYXJhbQotIyB1bmRlZiBCT09TVF9GVF9mbGFncwotIyBl
bmRpZgotIyBlbmRpZgotIyB1bmRlZiBCT09TVF9GVF9zeW50YXgKLSMgdW5kZWYgQk9PU1RfRlRf
bWZwCi0jIGRlZmluZSBCT09TVF9GVF9tZnAgMQotIyBkZWZpbmUgQk9PU1RfRlRfc3ludGF4IEJP
T1NUX0ZUX3R5cGVfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXIKLSMgaWYgISAhICg5NiAmIChCT09T
VF9GVF92YXJpYXRpb25zKSkKLSMgaWYgKDYwOSAmIChCT09TVF9GVF9jb25kKSkgPT0gKEJPT1NU
X0ZUX2NvbmQpCi0jIGRlZmluZSBCT09TVF9GVF9lbGwKLSMgZGVmaW5lIEJPT1NUX0ZUX251bGxh
cnlfcGFyYW0gQk9PU1RfRlRfTlVMTEFSWV9QQVJBTQotIyBkZWZpbmUgQk9PU1RfRlRfY3YgCi0j
IGRlZmluZSBCT09TVF9GVF9mbGFncyA2MDkKLSMgaW5jbHVkZSBCT09TVF9GVF92YXJpYXRlX2Zp
bGUKLSMgdW5kZWYgQk9PU1RfRlRfY3YKLSMgdW5kZWYgQk9PU1RfRlRfZWxsCi0jIHVuZGVmIEJP
T1NUX0ZUX251bGxhcnlfcGFyYW0KLSMgdW5kZWYgQk9PU1RfRlRfZmxhZ3MKLSMgZW5kaWYKLSMg
ZW5kaWYKLSMgaWYgISAhICg5NiAmIChCT09TVF9GVF92YXJpYXRpb25zKSkKLSMgaWYgKDM1MyAm
IChCT09TVF9GVF9jb25kKSkgPT0gKEJPT1NUX0ZUX2NvbmQpCi0jIGRlZmluZSBCT09TVF9GVF9l
bGwgLi4uCi0jIGRlZmluZSBCT09TVF9GVF9udWxsYXJ5X3BhcmFtCi0jIGRlZmluZSBCT09TVF9G
VF9jdiAKLSMgZGVmaW5lIEJPT1NUX0ZUX2ZsYWdzIDM1MwotIyBpbmNsdWRlIEJPT1NUX0ZUX3Zh
cmlhdGVfZmlsZQotIyB1bmRlZiBCT09TVF9GVF9jdgotIyB1bmRlZiBCT09TVF9GVF9lbGwKLSMg
dW5kZWYgQk9PU1RfRlRfbnVsbGFyeV9wYXJhbQotIyB1bmRlZiBCT09TVF9GVF9mbGFncwotIyBl
bmRpZgotIyBlbmRpZgotIyBpZiAhICEgKDk2ICYgKEJPT1NUX0ZUX3ZhcmlhdGlvbnMpKQotIyBp
ZiAoMTYzMyAmIChCT09TVF9GVF9jb25kKSkgPT0gKEJPT1NUX0ZUX2NvbmQpCi0jIGRlZmluZSBC
T09TVF9GVF9lbGwKLSMgZGVmaW5lIEJPT1NUX0ZUX251bGxhcnlfcGFyYW0gQk9PU1RfRlRfTlVM
TEFSWV9QQVJBTQotIyBkZWZpbmUgQk9PU1RfRlRfY3YgY29uc3QKLSMgZGVmaW5lIEJPT1NUX0ZU
X2ZsYWdzIDE2MzMKLSMgaW5jbHVkZSBCT09TVF9GVF92YXJpYXRlX2ZpbGUKLSMgdW5kZWYgQk9P
U1RfRlRfY3YKLSMgdW5kZWYgQk9PU1RfRlRfZWxsCi0jIHVuZGVmIEJPT1NUX0ZUX251bGxhcnlf
cGFyYW0KLSMgdW5kZWYgQk9PU1RfRlRfZmxhZ3MKLSMgZW5kaWYKLSMgZW5kaWYKLSMgaWYgISAh
ICg5NiAmIChCT09TVF9GVF92YXJpYXRpb25zKSkKLSMgaWYgKDEzNzcgJiAoQk9PU1RfRlRfY29u
ZCkpID09IChCT09TVF9GVF9jb25kKQotIyBkZWZpbmUgQk9PU1RfRlRfZWxsIC4uLgotIyBkZWZp
bmUgQk9PU1RfRlRfbnVsbGFyeV9wYXJhbQotIyBkZWZpbmUgQk9PU1RfRlRfY3YgY29uc3QKLSMg
ZGVmaW5lIEJPT1NUX0ZUX2ZsYWdzIDEzNzcKLSMgaW5jbHVkZSBCT09TVF9GVF92YXJpYXRlX2Zp
bGUKLSMgdW5kZWYgQk9PU1RfRlRfY3YKLSMgdW5kZWYgQk9PU1RfRlRfZWxsCi0jIHVuZGVmIEJP
T1NUX0ZUX251bGxhcnlfcGFyYW0KLSMgdW5kZWYgQk9PU1RfRlRfZmxhZ3MKLSMgZW5kaWYKLSMg
ZW5kaWYKLSMgaWYgISAhICg5NiAmIChCT09TVF9GVF92YXJpYXRpb25zKSkKLSMgaWYgKDI2NTcg
JiAoQk9PU1RfRlRfY29uZCkpID09IChCT09TVF9GVF9jb25kKQotIyBkZWZpbmUgQk9PU1RfRlRf
ZWxsCi0jIGRlZmluZSBCT09TVF9GVF9udWxsYXJ5X3BhcmFtIEJPT1NUX0ZUX05VTExBUllfUEFS
QU0KLSMgZGVmaW5lIEJPT1NUX0ZUX2N2IHZvbGF0aWxlCi0jIGRlZmluZSBCT09TVF9GVF9mbGFn
cyAyNjU3Ci0jIGluY2x1ZGUgQk9PU1RfRlRfdmFyaWF0ZV9maWxlCi0jIHVuZGVmIEJPT1NUX0ZU
X2N2Ci0jIHVuZGVmIEJPT1NUX0ZUX2VsbAotIyB1bmRlZiBCT09TVF9GVF9udWxsYXJ5X3BhcmFt
Ci0jIHVuZGVmIEJPT1NUX0ZUX2ZsYWdzCi0jIGVuZGlmCi0jIGVuZGlmCi0jIGlmICEgISAoOTYg
JiAoQk9PU1RfRlRfdmFyaWF0aW9ucykpCi0jIGlmICgyNDAxICYgKEJPT1NUX0ZUX2NvbmQpKSA9
PSAoQk9PU1RfRlRfY29uZCkKLSMgZGVmaW5lIEJPT1NUX0ZUX2VsbCAuLi4KLSMgZGVmaW5lIEJP
T1NUX0ZUX251bGxhcnlfcGFyYW0KLSMgZGVmaW5lIEJPT1NUX0ZUX2N2IHZvbGF0aWxlCi0jIGRl
ZmluZSBCT09TVF9GVF9mbGFncyAyNDAxCi0jIGluY2x1ZGUgQk9PU1RfRlRfdmFyaWF0ZV9maWxl
Ci0jIHVuZGVmIEJPT1NUX0ZUX2N2Ci0jIHVuZGVmIEJPT1NUX0ZUX2VsbAotIyB1bmRlZiBCT09T
VF9GVF9udWxsYXJ5X3BhcmFtCi0jIHVuZGVmIEJPT1NUX0ZUX2ZsYWdzCi0jIGVuZGlmCi0jIGVu
ZGlmCi0jIGlmICEgISAoOTYgJiAoQk9PU1RfRlRfdmFyaWF0aW9ucykpCi0jIGlmICgzNjgxICYg
KEJPT1NUX0ZUX2NvbmQpKSA9PSAoQk9PU1RfRlRfY29uZCkKLSMgZGVmaW5lIEJPT1NUX0ZUX2Vs
bAotIyBkZWZpbmUgQk9PU1RfRlRfbnVsbGFyeV9wYXJhbSBCT09TVF9GVF9OVUxMQVJZX1BBUkFN
Ci0jIGRlZmluZSBCT09TVF9GVF9jdiBjb25zdCB2b2xhdGlsZQotIyBkZWZpbmUgQk9PU1RfRlRf
ZmxhZ3MgMzY4MQotIyBpbmNsdWRlIEJPT1NUX0ZUX3ZhcmlhdGVfZmlsZQotIyB1bmRlZiBCT09T
VF9GVF9jdgotIyB1bmRlZiBCT09TVF9GVF9lbGwKLSMgdW5kZWYgQk9PU1RfRlRfbnVsbGFyeV9w
YXJhbQotIyB1bmRlZiBCT09TVF9GVF9mbGFncwotIyBlbmRpZgotIyBlbmRpZgotIyBpZiAhICEg
KDk2ICYgKEJPT1NUX0ZUX3ZhcmlhdGlvbnMpKQotIyBpZiAoMzQyNSAmIChCT09TVF9GVF9jb25k
KSkgPT0gKEJPT1NUX0ZUX2NvbmQpCi0jIGRlZmluZSBCT09TVF9GVF9lbGwgLi4uCi0jIGRlZmlu
ZSBCT09TVF9GVF9udWxsYXJ5X3BhcmFtCi0jIGRlZmluZSBCT09TVF9GVF9jdiBjb25zdCB2b2xh
dGlsZQotIyBkZWZpbmUgQk9PU1RfRlRfZmxhZ3MgMzQyNQotIyBpbmNsdWRlIEJPT1NUX0ZUX3Zh
cmlhdGVfZmlsZQotIyB1bmRlZiBCT09TVF9GVF9jdgotIyB1bmRlZiBCT09TVF9GVF9lbGwKLSMg
dW5kZWYgQk9PU1RfRlRfbnVsbGFyeV9wYXJhbQotIyB1bmRlZiBCT09TVF9GVF9mbGFncwotIyBl
bmRpZgotIyBlbmRpZgotIyB1bmRlZiBCT09TVF9GVF9zeW50YXgKLSMgdW5kZWYgQk9PU1RfRlRf
bWZwCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvcmV0YWdfZGVmYXVsdF9jYy5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvcmV0
YWdfZGVmYXVsdF9jYy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4OTI2ZjZk
ZmNjYmU0ZmE5YTk4ZjI4OGNkNTAxYzZiYmNlZTFlODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvZGV0YWlsL3JldGFnX2RlZmF1bHRfY2MuaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotCi0vLyAoQykgQ29weXJpZ2h0IFRvYmlhcyBTY2h3
aW5nZXIKLS8vCi0vLyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1Ympl
Y3QgdG8gdGhlIGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyBWZXJzaW9uIDEuMC4gKFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0jaWZuZGVmIEJPT1NUX0ZUX0RFVEFJTF9SRVRBR19ERUZBVUxUX0NDX0hQUF9J
TkNMVURFRAotI2RlZmluZSBCT09TVF9GVF9ERVRBSUxfUkVUQUdfREVGQVVMVF9DQ19IUFBfSU5D
TFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9iaXRhbmQuaHBwPgotCi0jaW5jbHVkZSA8Ym9v
c3QvZnVuY3Rpb25fdHlwZXMvY29tcG9uZW50cy5ocHA+Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX0ZU
X1BSRVBST0NFU1NJTkdfTU9ERSkKLSMgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbl90eXBlcy9k
ZXRhaWwvcHBfcmV0YWdfZGVmYXVsdF9jYy9tYXN0ZXIuaHBwPgotI2Vsc2UKLSMgICBpbmNsdWRl
IDxib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvcHBfcmV0YWdfZGVmYXVsdF9jYy9wcmVwcm9j
ZXNzZWQuaHBwPgotI2VuZGlmCi0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBlcy9mdW5jdGlvbl9hcml0
eS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlv
bl90eXBlcy9mdW5jdGlvbl9hcml0eS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGE4MTAwMWJlM2ZiODk4ZDllYmEwMjA0MDJkM2U4YzQ1YWU5NzQ0NzguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvZnVuY3Rpb25fYXJpdHkuaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotCi0vLyAoQykgQ29weXJpZ2h0IFRvYmlhcyBTY2h3
aW5nZXIKLS8vCi0vLyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1Ympl
Y3QgdG8gdGhlIGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyBWZXJzaW9uIDEuMC4gKFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0jaWZuZGVmIEJPT1NUX0ZUX0ZVTkNUSU9OX0FSSVRZX0hQUF9JTkNMVURFRAot
I2RlZmluZSBCT09TVF9GVF9GVU5DVElPTl9BUklUWV9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUg
PGJvb3N0L2JsYW5rLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvaWYuaHBwPgotCi0jaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8vbGFtYmRhX3N1cHBvcnQuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3Qv
ZnVuY3Rpb25fdHlwZXMvaXNfY2FsbGFibGVfYnVpbHRpbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
ZnVuY3Rpb25fdHlwZXMvY29tcG9uZW50cy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCAKLXsgCi0g
IG5hbWVzcGFjZSBmdW5jdGlvbl90eXBlcyAKLSAgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBmdW5jdGlvbl9hcml0eQotICAgICAgOiBtcGw6OmlmXwotICAgICAgICA8IGZ1bmN0
aW9uX3R5cGVzOjppc19jYWxsYWJsZV9idWlsdGluPFQ+Ci0gICAgICAgICwgdHlwZW5hbWUgY29t
cG9uZW50czxUPjo6ZnVuY3Rpb25fYXJpdHksIGJvb3N0OjpibGFuawotICAgICAgICA+Ojp0eXBl
Ci0gICAgewotICAgICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgxLGZ1bmN0aW9uX2Fy
aXR5LChUKSkgCi0gICAgfTsKLSAgfQotfQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvZnVuY3Rpb25fdHlwZXMvaXNfY2Fs
bGFibGVfYnVpbHRpbi5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9mdW5jdGlvbl90eXBlcy9pc19jYWxsYWJsZV9idWlsdGluLmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggM2I4MjZlYTU4MDUxYzk1N2E2MTU1NGU2Yjg5YzY1YmYxZmM3YjNm
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9mdW5jdGlvbl90eXBlcy9pc19jYWxs
YWJsZV9idWlsdGluLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLQotLy8gKEMp
IENvcHlyaWdodCBUb2JpYXMgU2Nod2luZ2VyCi0vLwotLy8gVXNlIG1vZGlmaWNhdGlvbiBhbmQg
ZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBib29zdCBTb2Z0d2FyZSBMaWNlbnNlLAot
Ly8gVmVyc2lvbiAxLjAuIChTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0
KS4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmbmRlZiBCT09TVF9GVF9JU19DQUxM
QUJMRV9CVUlMVElOX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9GVF9JU19DQUxMQUJMRV9C
VUlMVElOX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbGFtYmRhX3N1
cHBvcnQuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25fdHlwZXMvY29tcG9uZW50cy5o
cHA+Ci0KLW5hbWVzcGFjZSBib29zdCAKLXsgCi0gIG5hbWVzcGFjZSBmdW5jdGlvbl90eXBlcyAK
LSAgewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBULCB0eXBlbmFtZSBUYWcgPSBudWxsX3RhZyA+
IAotICAgIHN0cnVjdCBpc19jYWxsYWJsZV9idWlsdGluCi0gICAgICA6IGZ1bmN0aW9uX3R5cGVz
OjpyZXByZXNlbnRzCi0gICAgICAgIDwgZnVuY3Rpb25fdHlwZXM6OmNvbXBvbmVudHM8VD4KLSAg
ICAgICAgLCBmdW5jdGlvbl90eXBlczo6dGFnPFRhZywgZGV0YWlsOjpjYWxsYWJsZV9idWlsdGlu
X3RhZz4gCi0gICAgICAgID4KLSAgICB7IAotICAgICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQ
UE9SVCgyLGlzX2NhbGxhYmxlX2J1aWx0aW4sKFQsVGFnKSkKLSAgICB9OwotICB9Ci19Ci0KLSNl
bmRpZgotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9mdW5jdGlvbl90eXBlcy9wcm9wZXJ0eV90YWdzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9uX3R5cGVzL3Byb3BlcnR5X3RhZ3MuaHBw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjE1OGQzNTJkMzVhZDIzMGJmMDA4Y2E4
NzQ5YjZlMWUxZDU2OTZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2Z1bmN0aW9u
X3R5cGVzL3Byb3BlcnR5X3RhZ3MuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAK
LQotLy8gKEMpIENvcHlyaWdodCBUb2JpYXMgU2Nod2luZ2VyCi0vLwotLy8gVXNlIG1vZGlmaWNh
dGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBib29zdCBTb2Z0d2FyZSBM
aWNlbnNlLAotLy8gVmVyc2lvbiAxLjAuIChTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KS4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmbmRlZiBCT09TVF9G
VF9ERVRBSUxfVEFHU19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfRlRfREVUQUlMX1RBR1Nf
SFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxjc3RkZGVmPgotCi0jaW5jbHVkZSA8Ym9vc3QvdHlw
ZV90cmFpdHMvaW50ZWdyYWxfY29uc3RhbnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9iaXR4
b3IuaHBwPgotCi0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBmdW5jdGlvbl90eXBlcyB7
IAotCi1uYW1lc3BhY2UgZGV0YWlsIAotewotICB0eXBlZGVmIGxvbmcgYml0c190OwotCi0gIHRl
bXBsYXRlPGJpdHNfdCBWYWx1ZT4gc3RydWN0IGNvbnN0YW50IAotICAgIDogYm9vc3Q6OmludGVn
cmFsX2NvbnN0YW50PGJpdHNfdCxWYWx1ZT4gCi0gIHsgfTsKLQotICB0ZW1wbGF0ZTxiaXRzX3Qg
Qml0cywgYml0c190IE1hc2s+IHN0cnVjdCBwcm9wZXJ0eV90YWcgCi0gIHsKLSAgICB0eXBlZGVm
IGNvbnN0YW50PEJpdHM+IGJpdHM7Ci0gICAgdHlwZWRlZiBjb25zdGFudDxNYXNrPiBtYXNrOwot
ICB9OwotCi0gIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBiaXRzIDogVDo6Yml0cyB7IH07
Ci0gIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBtYXNrIDogVDo6bWFzayB7IH07Ci0KLSAg
Ly8gZm9yd2FyZCBkZWNsYXJhdGlvbiwgZGVmaW5lZCBpbiBwcF90YWdzCi0gIHRlbXBsYXRlPGJp
dHNfdCBCaXRzLCBiaXRzX3QgQ0NJRD4gc3RydWN0IGVuY29kZV9iaXRzX2ltcGw7IAotCi0gIC8v
IGZvcndhcmQgZGVjbGFyYXRpb24sIGRlZmluZWQgaW4gcHBfdGFncwotICB0ZW1wbGF0ZTxiaXRz
X3QgTEhTX2JpdHMsIGJpdHNfdCBMSFNfbWFzaywgCi0gICAgICAgICAgIGJpdHNfdCBSSFNfYml0
cywgYml0c190IFJIU19tYXNrPiAKLSAgc3RydWN0IHRhZ19pY2U7Ci0gCi0gIC8vIGZvcndhcmQg
ZGVjbGFyYXRpb24sIGRlZmluZWQgaW4gcmV0YWdfZGVmYXVsdF9jYyAKLSAgdGVtcGxhdGU8Y2xh
c3MgVGFnLCBjbGFzcyBSZWdUYWcgPSBUYWc+IHN0cnVjdCByZXRhZ19kZWZhdWx0X2NjOyAKLSAK
LSAgdGVtcGxhdGU8Yml0c190IEJpdHMsIGJpdHNfdCBDQ0lEPiBzdHJ1Y3QgZW5jb2RlX2JpdHMK
LSAgICA6IGNvbnN0YW50PCAKLSAgICAgICAgOjpib29zdDo6ZnVuY3Rpb25fdHlwZXM6OmRldGFp
bDo6ZW5jb2RlX2JpdHNfaW1wbDxCaXRzLENDSUQ+Ojp2YWx1ZSAKLSAgICAgID4KLSAgeyB9Owot
Ci0gIHRlbXBsYXRlPGNsYXNzIExIUywgY2xhc3MgUkhTPiBzdHJ1Y3QgY29tcG91bmRfdGFnCi0g
IHsKLSAgICB0eXBlZGVmIGNvbnN0YW50PAotICAgICAgOjpib29zdDo6ZnVuY3Rpb25fdHlwZXM6
OmRldGFpbDo6dGFnX2ljZQotICAgICAgICA8IDo6Ym9vc3Q6OmZ1bmN0aW9uX3R5cGVzOjpkZXRh
aWw6OmJpdHM8TEhTPjo6dmFsdWUKLSAgICAgICAgLCA6OmJvb3N0OjpmdW5jdGlvbl90eXBlczo6
ZGV0YWlsOjptYXNrPExIUz46OnZhbHVlCi0gICAgICAgICwgOjpib29zdDo6ZnVuY3Rpb25fdHlw
ZXM6OmRldGFpbDo6Yml0czxSSFM+Ojp2YWx1ZQotICAgICAgICAsIDo6Ym9vc3Q6OmZ1bmN0aW9u
X3R5cGVzOjpkZXRhaWw6Om1hc2s8UkhTPjo6dmFsdWUKLSAgICAgICAgPjo6Y29tYmluZWRfYml0
cyAKLSAgICA+IGJpdHM7Ci0KLSAgICB0eXBlZGVmIGNvbnN0YW50PCAKLSAgICAgIDo6Ym9vc3Q6
OmZ1bmN0aW9uX3R5cGVzOjpkZXRhaWw6OnRhZ19pY2UKLSAgICAgICAgPCA6OmJvb3N0OjpmdW5j
dGlvbl90eXBlczo6ZGV0YWlsOjpiaXRzPExIUz46OnZhbHVlCi0gICAgICAgICwgOjpib29zdDo6
ZnVuY3Rpb25fdHlwZXM6OmRldGFpbDo6bWFzazxMSFM+Ojp2YWx1ZQotICAgICAgICAsIDo6Ym9v
c3Q6OmZ1bmN0aW9uX3R5cGVzOjpkZXRhaWw6OmJpdHM8UkhTPjo6dmFsdWUKLSAgICAgICAgLCA6
OmJvb3N0OjpmdW5jdGlvbl90eXBlczo6ZGV0YWlsOjptYXNrPFJIUz46OnZhbHVlCi0gICAgICAg
ID46OmNvbWJpbmVkX21hc2sgCi0gICAgPiBtYXNrOyAKLSAgfTsKLQotICB0ZW1wbGF0ZSA8Y2xh
c3MgQmFzZSwgY2xhc3MgUHJvcE9sZCwgY2xhc3MgUHJvcE5ldz4KLSAgc3RydWN0IGNoYW5nZWRf
dGFnCi0gICAgOiBCYXNlCi0gIHsKLSAgICB0eXBlZGVmIG1wbDo6Yml0eG9yXwotICAgICAgICA8
dHlwZW5hbWUgQmFzZTo6Yml0cywgdHlwZW5hbWUgUHJvcE9sZDo6Yml0cywgdHlwZW5hbWUgUHJv
cE5ldzo6Yml0cz4KLSAgICBiaXRzOwotICB9OwotCi0gIHRlbXBsYXRlPGNsYXNzIFRhZywgY2xh
c3MgUXVlcnlUYWc+IHN0cnVjdCByZXByZXNlbnRzX2ltcGwKLSAgICA6IGJvb3N0OjppbnRlZ3Jh
bF9jb25zdGFudDxib29sLAotICAgICAgICA6OmJvb3N0OjpmdW5jdGlvbl90eXBlczo6ZGV0YWls
Ojp0YWdfaWNlCi0gICAgICAgICAgPCA6OmJvb3N0OjpmdW5jdGlvbl90eXBlczo6ZGV0YWlsOjpi
aXRzPFRhZz46OnZhbHVlCi0gICAgICAgICAgLCA6OmJvb3N0OjpmdW5jdGlvbl90eXBlczo6ZGV0
YWlsOjptYXNrPFRhZz46OnZhbHVlCi0gICAgICAgICAgLCA6OmJvb3N0OjpmdW5jdGlvbl90eXBl
czo6ZGV0YWlsOjpiaXRzPFF1ZXJ5VGFnPjo6dmFsdWUKLSAgICAgICAgICAsIDo6Ym9vc3Q6OmZ1
bmN0aW9uX3R5cGVzOjpkZXRhaWw6Om1hc2s8UXVlcnlUYWc+Ojp2YWx1ZQotICAgICAgICAgID46
Om1hdGNoCi0gICAgICA+Ci0gIHsgfTsKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLXR5cGVk
ZWYgZGV0YWlsOjpwcm9wZXJ0eV90YWc8MCwwPiBudWxsX3RhZzsKLQotdGVtcGxhdGU8Y2xhc3Mg
VGFnMSwgY2xhc3MgVGFnMiwgY2xhc3MgVGFnMyA9IG51bGxfdGFnLCBjbGFzcyBUYWc0ID0gbnVs
bF90YWc+Ci1zdHJ1Y3QgdGFnCi0gIDogZGV0YWlsOjpjb21wb3VuZF90YWc8IGRldGFpbDo6Y29t
cG91bmRfdGFnPFRhZzEsVGFnMj4sIAotICAgICAgICBkZXRhaWw6OmNvbXBvdW5kX3RhZzxUYWcz
LFRhZzQ+ID4KLXsgfTsKLQotdGVtcGxhdGU8Y2xhc3MgVGFnMSwgY2xhc3MgVGFnMiwgY2xhc3Mg
VGFnMz4gc3RydWN0IHRhZzxUYWcxLFRhZzIsVGFnMyxudWxsX3RhZz4KLSAgOiBkZXRhaWw6OmNv
bXBvdW5kX3RhZzxkZXRhaWw6OmNvbXBvdW5kX3RhZzxUYWcxLFRhZzI+LFRhZzM+Ci17IH07Ci10
ZW1wbGF0ZTxjbGFzcyBUYWcxLCBjbGFzcyBUYWcyPiBzdHJ1Y3QgdGFnPFRhZzEsVGFnMixudWxs
X3RhZyxudWxsX3RhZz4KLSAgOiBkZXRhaWw6OmNvbXBvdW5kX3RhZzxUYWcxLFRhZzI+Ci17IH07
Ci10ZW1wbGF0ZTxjbGFzcyBUYWcxPiBzdHJ1Y3QgdGFnPFRhZzEsbnVsbF90YWcsbnVsbF90YWcs
bnVsbF90YWc+Ci0gIDogVGFnMQoteyB9OwotCi0KLXRlbXBsYXRlPGNsYXNzIFRhZywgY2xhc3Mg
UXVlcnlUYWc+IHN0cnVjdCByZXByZXNlbnRzCi0gIDogZGV0YWlsOjpyZXByZXNlbnRzX2ltcGw8
VGFnLCBkZXRhaWw6OnJldGFnX2RlZmF1bHRfY2M8UXVlcnlUYWcsVGFnPiA+Ci17IH07Ci0KLQot
dGVtcGxhdGU8Y2xhc3MgVGFnLCBjbGFzcyBRdWVyeVRhZz4gc3RydWN0IGV4dHJhY3QKLXsgCi0g
IHR5cGVkZWYgZGV0YWlsOjpjb25zdGFudDwKLSAgICA6OmJvb3N0OjpmdW5jdGlvbl90eXBlczo6
ZGV0YWlsOjp0YWdfaWNlCi0gICAgICA8IDo6Ym9vc3Q6OmZ1bmN0aW9uX3R5cGVzOjpkZXRhaWw6
OmJpdHM8VGFnPjo6dmFsdWUKLSAgICAgICwgOjpib29zdDo6ZnVuY3Rpb25fdHlwZXM6OmRldGFp
bDo6bWFzazxUYWc+Ojp2YWx1ZQotICAgICAgLCA6OmJvb3N0OjpmdW5jdGlvbl90eXBlczo6ZGV0
YWlsOjpiaXRzPFF1ZXJ5VGFnPjo6dmFsdWUKLSAgICAgICwgOjpib29zdDo6ZnVuY3Rpb25fdHlw
ZXM6OmRldGFpbDo6bWFzazxRdWVyeVRhZz46OnZhbHVlCi0gICAgICA+OjpleHRyYWN0ZWRfYml0
cyAKLSAgPiBiaXRzOwotCi0gIHR5cGVkZWYgZGV0YWlsOjpjb25zdGFudDwgCi0gICAgOjpib29z
dDo6ZnVuY3Rpb25fdHlwZXM6OmRldGFpbDo6bWFzazxRdWVyeVRhZz46OnZhbHVlCi0gID4gbWFz
azsgCi19OwotCi19IH0gLy8gbmFtZXNwYWNlIDo6Ym9vc3Q6OmZ1bmN0aW9uX3R5cGVzCi0KLSNp
bmNsdWRlIDxib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvcHBfdGFncy9wcmVwcm9jZXNzZWQu
aHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgZnVuY3Rpb25fdHlwZXMgewotI2Rl
ZmluZSBCT09TVF9GVF9jY19maWxlIDxib29zdC9mdW5jdGlvbl90eXBlcy9kZXRhaWwvcHBfdGFn
cy9jY190YWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uX3R5cGVzL2RldGFpbC9wcF9s
b29wLmhwcD4KLX0gfSAvLyBuYW1lc3BhY2UgYm9vc3Q6OmZ1bmN0aW9uX3R5cGVzCi0KLSNlbmRp
ZgotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9pbXBsaWNpdF9jYXN0LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L2ltcGxpY2l0X2Nhc3QuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
ODJkYjc2MjhlZTk2MTY2MDFkYzBkMWYwYjk3ZGVhZmJmZjFkMzA4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L2ltcGxpY2l0X2Nhc3QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzYg
KzAsMCBAQAotLy8gQ29weXJpZ2h0IERhdmlkIEFicmFoYW1zIDIwMDMuCi0vLyBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLS8v
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jaWZuZGVmIElNUExJQ0lUX0NBU1RfRFdB
MjAwMzU2X0hQUAotIyBkZWZpbmUgSU1QTElDSVRfQ0FTVF9EV0EyMDAzNTZfSFBQCi0KLW5hbWVz
cGFjZSBib29zdCB7Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotCi10ZW1wbGF0ZTxjbGFzcyBUPiBz
dHJ1Y3QgaWNhc3RfaWRlbnRpdHkKLXsKLSAgICB0eXBlZGVmIFQgdHlwZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIGRldGFpbAotCi0vLyBpbXBsZW1lbnRhdGlvbiBvcmlnaW5hbGx5IHN1Z2dlc3Rl
ZCBieSBDLiBHcmVlbiBpbgotLy8gaHR0cDovL2xpc3RzLmJvb3N0Lm9yZy9NYWlsQXJjaGl2ZXMv
Ym9vc3QvbXNnMDA4ODYucGhwCi0KLS8vIFRoZSB1c2Ugb2YgaWRlbnRpdHkgY3JlYXRlcyBhIG5v
bi1kZWR1Y2VkIGZvcm0sIHNvIHRoYXQgdGhlCi0vLyBleHBsaWNpdCB0ZW1wbGF0ZSBhcmd1bWVu
dCBtdXN0IGJlIHN1cHBsaWVkCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWlubGluZSBUIGltcGxp
Y2l0X2Nhc3QgKHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6OmljYXN0X2lkZW50aXR5PFQ+Ojp0eXBl
IHgpIHsKLSAgICByZXR1cm4geDsKLX0KLQotLy8gaW5jb21wbGV0ZSByZXR1cm4gdHlwZSBub3cg
aXMgaGVyZQotLy90ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLS8vdm9pZCBpbXBsaWNpdF9jYXN0ICgu
Li4pOwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0KLSNlbmRpZiAvLyBJTVBMSUNJVF9DQVNU
X0RXQTIwMDM1Nl9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L2ludGVnZXIuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvaW50ZWdlci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlm
YTAwMTk0ODQ1NDUyYmJiNTk5NDQ5MzY2Mzk3MGRlOTgxMTM3MmYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvaW50ZWdlci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjIgKzAsMCBA
QAotLy8gIGJvb3N0IGludGVnZXIuaHBwIGhlYWRlciBmaWxlICAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQotLy8gIENvcHlyaWdodCBCZW1hbiBEYXdlcyBh
bmQgRGFyeWxlIFdhbGtlciAxOTk5LiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0Ci0vLyAg
U29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUKLS8v
ICBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9pbnRlZ2VyIGZv
ciBkb2N1bWVudGF0aW9uLgotCi0vLyAgUmV2aXNpb24gSGlzdG9yeQotLy8gICAyMiBTZXAgMDEg
IEFkZGVkIHZhbHVlLWJhc2VkIGludGVnZXIgdGVtcGxhdGVzLiAoRGFyeWxlIFdhbGtlcikKLS8v
ICAgMDEgQXByIDAxICBNb2RpZmllZCB0byB1c2UgbmV3IDxib29zdC9saW1pdHMuaHBwPiBoZWFk
ZXIuIChKb2huIE1hZGRvY2spCi0vLyAgIDMwIEp1bCAwMCAgQWRkIHR5cGVuYW1lIHN5bnRheCBm
aXggKEplbnMgTWF1cmVyKQotLy8gICAyOCBBdWcgOTkgIEluaXRpYWwgdmVyc2lvbgotCi0jaWZu
ZGVmIEJPT1NUX0lOVEVHRVJfSFBQCi0jZGVmaW5lIEJPT1NUX0lOVEVHRVJfSFBQCi0KLSNpbmNs
dWRlIDxib29zdC9pbnRlZ2VyX2Z3ZC5ocHA+ICAvLyBzZWxmIGluY2x1ZGUKLQotI2luY2x1ZGUg
PGJvb3N0L2ludGVnZXJfdHJhaXRzLmhwcD4gIC8vIGZvciBib29zdDo6Ojpib29zdDo6aW50ZWdl
cl90cmFpdHMKLSNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPiAgICAgICAgICAvLyBmb3IgOjpz
dGQ6Om51bWVyaWNfbGltaXRzCi0jaW5jbHVkZSA8Ym9vc3QvY3N0ZGludC5ocHA+ICAgICAgICAg
Ly8gZm9yIGJvb3N0OjppbnQ2NF90IGFuZCBCT09TVF9OT19JTlRFR1JBTF9JTlQ2NF9UCi0jaW5j
bHVkZSA8Ym9vc3Qvc3RhdGljX2Fzc2VydC5ocHA+Ci0KLS8vCi0vLyBXZSBzaW1wbHkgY2Fubm90
IGluY2x1ZGUgdGhpcyBoZWFkZXIgb24gZ2NjIHdpdGhvdXQgZ2V0dGluZyBjb3Bpb3VzIHdhcm5p
bmdzIG9mIHRoZSBraW5kOgotLy8KLS8vIGJvb3N0L2ludGVnZXIuaHBwOjc3OjMwOiB3YXJuaW5n
OiB1c2Ugb2YgQzk5IGxvbmcgbG9uZyBpbnRlZ2VyIGNvbnN0YW50Ci0vLwotLy8gQW5kIHlldCB0
aGVyZSBpcyBubyBvdGhlciByZWFzb25hYmxlIGltcGxlbWVudGF0aW9uLCBzbyB3ZSBkZWNsYXJl
IHRoaXMgYSBzeXN0ZW0gaGVhZGVyCi0vLyB0byBzdXBwcmVzcyB0aGVzZSB3YXJuaW5ncy4KLS8v
Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID49IDQpCi0jcHJhZ21hIEdDQyBz
eXN0ZW1faGVhZGVyCi0jZW5kaWYKLQotbmFtZXNwYWNlIGJvb3N0Ci17Ci0KLSAgLy8gIEhlbHBl
ciB0ZW1wbGF0ZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS8vCi0KLSAgLy8gIGZhc3QgaW50ZWdlcnMgZnJvbSBsZWFzdCBpbnRlZ2Vycwot
ICAvLyAgaW50X2Zhc3RfdDw+IHdvcmtzIGNvcnJlY3RseSBmb3IgdW5zaWduZWQgdG9vLCBpbiBz
cGl0ZSBvZiB0aGUgbmFtZS4KLSAgdGVtcGxhdGU8IHR5cGVuYW1lIExlYXN0SW50ID4KLSAgc3Ry
dWN0IGludF9mYXN0X3QKLSAgewotICAgICB0eXBlZGVmIExlYXN0SW50IGZhc3Q7Ci0gICAgIHR5
cGVkZWYgZmFzdCAgICAgdHlwZTsKLSAgfTsgLy8gaW1wcyBtYXkgc3BlY2lhbGl6ZQotCi0gIG5h
bWVzcGFjZSBkZXRhaWx7Ci0KLSAgLy8gIGNvbnZlcnQgY2F0ZWdvcnkgdG8gdHlwZQotICB0ZW1w
bGF0ZTwgaW50IENhdGVnb3J5ID4gc3RydWN0IGludF9sZWFzdF9oZWxwZXIge307IC8vIGRlZmF1
bHQgaXMgZW1wdHkKLSAgdGVtcGxhdGU8IGludCBDYXRlZ29yeSA+IHN0cnVjdCB1aW50X2xlYXN0
X2hlbHBlciB7fTsgLy8gZGVmYXVsdCBpcyBlbXB0eQotCi0gIC8vICBzcGVjaWFsaXphdG9uczog
MT1sb25nLCAyPWludCwgMz1zaG9ydCwgND1zaWduZWQgY2hhciwKLSAgLy8gICAgIDY9dW5zaWdu
ZWQgbG9uZywgNz11bnNpZ25lZCBpbnQsIDg9dW5zaWduZWQgc2hvcnQsIDk9dW5zaWduZWQgY2hh
cgotICAvLyAgbm8gc3BlY2lhbGl6YXRpb25zIGZvciAwIGFuZCA1OiByZXF1ZXN0cyBmb3IgYSB0
eXBlID4gbG9uZyBhcmUgaW4gZXJyb3IKLSNpZmRlZiBCT09TVF9IQVNfTE9OR19MT05HCi0gIHRl
bXBsYXRlPD4gc3RydWN0IGludF9sZWFzdF9oZWxwZXI8MT4geyB0eXBlZGVmIGJvb3N0Ojpsb25n
X2xvbmdfdHlwZSBsZWFzdDsgfTsKLSNlbGlmIGRlZmluZWQoQk9PU1RfSEFTX01TX0lOVDY0KQot
ICB0ZW1wbGF0ZTw+IHN0cnVjdCBpbnRfbGVhc3RfaGVscGVyPDE+IHsgdHlwZWRlZiBfX2ludDY0
IGxlYXN0OyB9OwotI2VuZGlmCi0gIHRlbXBsYXRlPD4gc3RydWN0IGludF9sZWFzdF9oZWxwZXI8
Mj4geyB0eXBlZGVmIGxvbmcgbGVhc3Q7IH07Ci0gIHRlbXBsYXRlPD4gc3RydWN0IGludF9sZWFz
dF9oZWxwZXI8Mz4geyB0eXBlZGVmIGludCBsZWFzdDsgfTsKLSAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
aW50X2xlYXN0X2hlbHBlcjw0PiB7IHR5cGVkZWYgc2hvcnQgbGVhc3Q7IH07Ci0gIHRlbXBsYXRl
PD4gc3RydWN0IGludF9sZWFzdF9oZWxwZXI8NT4geyB0eXBlZGVmIHNpZ25lZCBjaGFyIGxlYXN0
OyB9OwotI2lmZGVmIEJPT1NUX0hBU19MT05HX0xPTkcKLSAgdGVtcGxhdGU8PiBzdHJ1Y3QgdWlu
dF9sZWFzdF9oZWxwZXI8MT4geyB0eXBlZGVmIGJvb3N0Ojp1bG9uZ19sb25nX3R5cGUgbGVhc3Q7
IH07Ci0jZWxpZiBkZWZpbmVkKEJPT1NUX0hBU19NU19JTlQ2NCkKLSAgdGVtcGxhdGU8PiBzdHJ1
Y3QgdWludF9sZWFzdF9oZWxwZXI8MT4geyB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgbGVhc3Q7
IH07Ci0jZW5kaWYKLSAgdGVtcGxhdGU8PiBzdHJ1Y3QgdWludF9sZWFzdF9oZWxwZXI8Mj4geyB0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgbGVhc3Q7IH07Ci0gIHRlbXBsYXRlPD4gc3RydWN0IHVpbnRf
bGVhc3RfaGVscGVyPDM+IHsgdHlwZWRlZiB1bnNpZ25lZCBpbnQgbGVhc3Q7IH07Ci0gIHRlbXBs
YXRlPD4gc3RydWN0IHVpbnRfbGVhc3RfaGVscGVyPDQ+IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCBsZWFzdDsgfTsKLSAgdGVtcGxhdGU8PiBzdHJ1Y3QgdWludF9sZWFzdF9oZWxwZXI8NT4geyB0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgbGVhc3Q7IH07Ci0KLSAgdGVtcGxhdGUgPGludCBCaXRzPgot
ICBzdHJ1Y3QgZXhhY3Rfc2lnbmVkX2Jhc2VfaGVscGVye307Ci0gIHRlbXBsYXRlIDxpbnQgQml0
cz4KLSAgc3RydWN0IGV4YWN0X3Vuc2lnbmVkX2Jhc2VfaGVscGVye307Ci0KLSAgdGVtcGxhdGUg
PD4gc3RydWN0IGV4YWN0X3NpZ25lZF9iYXNlX2hlbHBlcjxzaXplb2Yoc2lnbmVkIGNoYXIpKiBD
SEFSX0JJVD4geyB0eXBlZGVmIHNpZ25lZCBjaGFyIGV4YWN0OyB9OwotICB0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgZXhhY3RfdW5zaWduZWRfYmFzZV9oZWxwZXI8c2l6ZW9mKHVuc2lnbmVkIGNoYXIpKiBD
SEFSX0JJVD4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZXhhY3Q7IH07Ci0jaWYgVVNIUlRfTUFY
ICE9IFVDSEFSX01BWAotICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgZXhhY3Rfc2lnbmVkX2Jhc2VfaGVs
cGVyPHNpemVvZihzaG9ydCkqIENIQVJfQklUPiB7IHR5cGVkZWYgc2hvcnQgZXhhY3Q7IH07Ci0g
IHRlbXBsYXRlIDw+IHN0cnVjdCBleGFjdF91bnNpZ25lZF9iYXNlX2hlbHBlcjxzaXplb2YodW5z
aWduZWQgc2hvcnQpKiBDSEFSX0JJVD4geyB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGV4YWN0OyB9
OwotI2VuZGlmCi0jaWYgVUlOVF9NQVggIT0gVVNIUlRfTUFYCi0gIHRlbXBsYXRlIDw+IHN0cnVj
dCBleGFjdF9zaWduZWRfYmFzZV9oZWxwZXI8c2l6ZW9mKGludCkqIENIQVJfQklUPiB7IHR5cGVk
ZWYgaW50IGV4YWN0OyB9OwotICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgZXhhY3RfdW5zaWduZWRfYmFz
ZV9oZWxwZXI8c2l6ZW9mKHVuc2lnbmVkIGludCkqIENIQVJfQklUPiB7IHR5cGVkZWYgdW5zaWdu
ZWQgaW50IGV4YWN0OyB9OwotI2VuZGlmCi0jaWYgVUxPTkdfTUFYICE9IFVJTlRfTUFYICYmICgg
IWRlZmluZWQgX19USV9DT01QSUxFUl9WRVJTSU9OX18gfHwgXAotICAgICggX19USV9DT01QSUxF
Ul9WRVJTSU9OX18gPj0gNzAwMDAwMCAmJiAhZGVmaW5lZCBfX1RJXzQwQklUX0xPTkdfXyApICkK
LSAgdGVtcGxhdGUgPD4gc3RydWN0IGV4YWN0X3NpZ25lZF9iYXNlX2hlbHBlcjxzaXplb2YobG9u
ZykqIENIQVJfQklUPiB7IHR5cGVkZWYgbG9uZyBleGFjdDsgfTsKLSAgdGVtcGxhdGUgPD4gc3Ry
dWN0IGV4YWN0X3Vuc2lnbmVkX2Jhc2VfaGVscGVyPHNpemVvZih1bnNpZ25lZCBsb25nKSogQ0hB
Ul9CSVQ+IHsgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGV4YWN0OyB9OwotI2VuZGlmCi0jaWYgZGVm
aW5lZChCT09TVF9IQVNfTE9OR19MT05HKSAmJlwKLSAgICgoZGVmaW5lZChVTExPTkdfTUFYKSAm
JiAoVUxMT05HX01BWCAhPSBVTE9OR19NQVgpKSB8fFwKLSAgICAoZGVmaW5lZChVTE9OR19MT05H
X01BWCkgJiYgKFVMT05HX0xPTkdfTUFYICE9IFVMT05HX01BWCkpIHx8XAotICAgIChkZWZpbmVk
KFVMT05HTE9OR19NQVgpICYmIChVTE9OR0xPTkdfTUFYICE9IFVMT05HX01BWCkpIHx8XAotICAg
IChkZWZpbmVkKF9VTExPTkdfTUFYKSAmJiAoX1VMTE9OR19NQVggIT0gVUxPTkdfTUFYKSkpCi0g
IHRlbXBsYXRlIDw+IHN0cnVjdCBleGFjdF9zaWduZWRfYmFzZV9oZWxwZXI8c2l6ZW9mKGJvb3N0
Ojpsb25nX2xvbmdfdHlwZSkqIENIQVJfQklUPiB7IHR5cGVkZWYgYm9vc3Q6OmxvbmdfbG9uZ190
eXBlIGV4YWN0OyB9OwotICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgZXhhY3RfdW5zaWduZWRfYmFzZV9o
ZWxwZXI8c2l6ZW9mKGJvb3N0Ojp1bG9uZ19sb25nX3R5cGUpKiBDSEFSX0JJVD4geyB0eXBlZGVm
IGJvb3N0Ojp1bG9uZ19sb25nX3R5cGUgZXhhY3Q7IH07Ci0jZW5kaWYKLQotCi0gIH0gLy8gbmFt
ZXNwYWNlIGRldGFpbAotCi0gIC8vICBpbnRlZ2VyIHRlbXBsYXRlcyBzcGVjaWZ5aW5nIG51bWJl
ciBvZiBiaXRzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCi0gIC8vICBzaWduZWQK
LSAgdGVtcGxhdGU8IGludCBCaXRzID4gICAvLyBiaXRzIChpbmNsdWRpbmcgc2lnbikgcmVxdWly
ZWQKLSAgc3RydWN0IGludF90IDogcHVibGljIGJvb3N0OjpkZXRhaWw6OmV4YWN0X3NpZ25lZF9i
YXNlX2hlbHBlcjxCaXRzPgotICB7Ci0gICAgICBCT09TVF9TVEFUSUNfQVNTRVJUX01TRyhCaXRz
IDw9IChpbnQpKHNpemVvZihib29zdDo6aW50bWF4X3QpICogQ0hBUl9CSVQpLAotICAgICAgICAg
Ik5vIHN1aXRhYmxlIHNpZ25lZCBpbnRlZ2VyIHR5cGUgd2l0aCB0aGUgcmVxdWVzdGVkIG51bWJl
ciBvZiBiaXRzIGlzIGF2YWlsYWJsZS4iKTsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6
OmRldGFpbDo6aW50X2xlYXN0X2hlbHBlcgotICAgICAgICA8Ci0jaWZkZWYgQk9PU1RfSEFTX0xP
TkdfTE9ORwotICAgICAgICAgIChCaXRzIDw9IChpbnQpKHNpemVvZihib29zdDo6bG9uZ19sb25n
X3R5cGUpICogQ0hBUl9CSVQpKSArCi0jZWxzZQotICAgICAgICAgICAxICsKLSNlbmRpZgotICAg
ICAgICAgIChCaXRzLTEgPD0gOjpzdGQ6Om51bWVyaWNfbGltaXRzPGxvbmc+OjpkaWdpdHMpICsK
LSAgICAgICAgICAoQml0cy0xIDw9IDo6c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjpkaWdpdHMp
ICsKLSAgICAgICAgICAoQml0cy0xIDw9IDo6c3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46OmRp
Z2l0cykgKwotICAgICAgICAgIChCaXRzLTEgPD0gOjpzdGQ6Om51bWVyaWNfbGltaXRzPHNpZ25l
ZCBjaGFyPjo6ZGlnaXRzKQotICAgICAgICA+OjpsZWFzdCAgbGVhc3Q7Ci0gICAgICB0eXBlZGVm
IHR5cGVuYW1lIGludF9mYXN0X3Q8bGVhc3Q+Ojp0eXBlICBmYXN0OwotICB9OwotCi0gIC8vICB1
bnNpZ25lZAotICB0ZW1wbGF0ZTwgaW50IEJpdHMgPiAgIC8vIGJpdHMgcmVxdWlyZWQKLSAgc3Ry
dWN0IHVpbnRfdCA6IHB1YmxpYyBib29zdDo6ZGV0YWlsOjpleGFjdF91bnNpZ25lZF9iYXNlX2hl
bHBlcjxCaXRzPgotICB7Ci0gICAgIEJPT1NUX1NUQVRJQ19BU1NFUlRfTVNHKEJpdHMgPD0gKGlu
dCkoc2l6ZW9mKGJvb3N0Ojp1aW50bWF4X3QpICogQ0hBUl9CSVQpLAotICAgICAgICAgIk5vIHN1
aXRhYmxlIHVuc2lnbmVkIGludGVnZXIgdHlwZSB3aXRoIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9m
IGJpdHMgaXMgYXZhaWxhYmxlLiIpOwotI2lmIChkZWZpbmVkKF9fQk9STEFORENfXykgfHwgZGVm
aW5lZChfX0NPREVHRUFSX18pKSAmJiBkZWZpbmVkKEJPT1NUX05PX0lOVEVHUkFMX0lOVDY0X1Qp
Ci0gICAgIC8vIEl0J3MgcmVhbGx5IG5vdCBjbGVhciB3aHkgdGhpcyB3b3JrYXJvdW5kIHNob3Vs
ZCBiZSBuZWVkZWQuLi4gc2hydWcgSSBndWVzcyEgIEpNCi0gICAgIEJPT1NUX1NUQVRJQ19DT05T
VEFOVChpbnQsIHMgPQotICAgICAgICAgICA2ICsKLSAgICAgICAgICAoQml0cyA8PSA6OnN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz46OmRpZ2l0cykgKwotICAgICAgICAgIChCaXRz
IDw9IDo6c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjpkaWdpdHMpICsKLSAgICAg
ICAgICAoQml0cyA8PSA6OnN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+OjpkaWdp
dHMpICsKLSAgICAgICAgICAoQml0cyA8PSA6OnN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQg
Y2hhcj46OmRpZ2l0cykpOwotICAgICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6aW50X2xlYXN0
X2hlbHBlcjwgOjpib29zdDo6dWludF90PEJpdHM+OjpzPjo6bGVhc3QgbGVhc3Q7Ci0jZWxzZQot
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjp1aW50X2xlYXN0X2hlbHBlcgot
ICAgICAgICA8Ci0jaWZkZWYgQk9PU1RfSEFTX0xPTkdfTE9ORwotICAgICAgICAgIChCaXRzIDw9
IChpbnQpKHNpemVvZihib29zdDo6bG9uZ19sb25nX3R5cGUpICogQ0hBUl9CSVQpKSArCi0jZWxz
ZQotICAgICAgICAgICAxICsKLSNlbmRpZgotICAgICAgICAgIChCaXRzIDw9IDo6c3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZCBsb25nPjo6ZGlnaXRzKSArCi0gICAgICAgICAgKEJpdHMgPD0g
OjpzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46OmRpZ2l0cykgKwotICAgICAgICAg
IChCaXRzIDw9IDo6c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46OmRpZ2l0cykg
KwotICAgICAgICAgIChCaXRzIDw9IDo6c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBjaGFy
Pjo6ZGlnaXRzKQotICAgICAgICA+OjpsZWFzdCAgbGVhc3Q7Ci0jZW5kaWYKLSAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaW50X2Zhc3RfdDxsZWFzdD46OnR5cGUgIGZhc3Q7Ci0gICAgICAvLyBpbnRf
ZmFzdF90PD4gd29ya3MgY29ycmVjdGx5IGZvciB1bnNpZ25lZCB0b28sIGluIHNwaXRlIG9mIHRo
ZSBuYW1lLgotICB9OwotCi0gIC8vICBpbnRlZ2VyIHRlbXBsYXRlcyBzcGVjaWZ5aW5nIGV4dHJl
bWUgdmFsdWUgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCi0gIC8vICBzaWduZWQK
LSNpZiAhZGVmaW5lZChCT09TVF9OT19JTlRFR1JBTF9JTlQ2NF9UKSAmJiAhZGVmaW5lZChCT09T
VF9OT19JTlQ2NF9UKSAmJiBkZWZpbmVkKEJPT1NUX0hBU19MT05HX0xPTkcpCi0gIHRlbXBsYXRl
PCBib29zdDo6bG9uZ19sb25nX3R5cGUgTWF4VmFsdWUgPiAgIC8vIG1heGltdW0gdmFsdWUgdG8g
cmVxdWlyZSBzdXBwb3J0Ci0jZWxzZQotICB0ZW1wbGF0ZTwgbG9uZyBNYXhWYWx1ZSA+ICAgLy8g
bWF4aW11bSB2YWx1ZSB0byByZXF1aXJlIHN1cHBvcnQKLSNlbmRpZgotICBzdHJ1Y3QgaW50X21h
eF92YWx1ZV90Ci0gIHsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aW50
X2xlYXN0X2hlbHBlcgotICAgICAgICA8Ci0jaWYgIWRlZmluZWQoQk9PU1RfTk9fSU5URUdSQUxf
SU5UNjRfVCkgJiYgIWRlZmluZWQoQk9PU1RfTk9fSU5UNjRfVCkgJiYgZGVmaW5lZChCT09TVF9I
QVNfTE9OR19MT05HKQotICAgICAgICAgIChNYXhWYWx1ZSA8PSA6OmJvb3N0OjppbnRlZ2VyX3Ry
YWl0czxib29zdDo6bG9uZ19sb25nX3R5cGU+Ojpjb25zdF9tYXgpICsKLSNlbHNlCi0gICAgICAg
ICAgIDEgKwotI2VuZGlmCi0gICAgICAgICAgKE1heFZhbHVlIDw9IDo6Ym9vc3Q6OmludGVnZXJf
dHJhaXRzPGxvbmc+Ojpjb25zdF9tYXgpICsKLSAgICAgICAgICAoTWF4VmFsdWUgPD0gOjpib29z
dDo6aW50ZWdlcl90cmFpdHM8aW50Pjo6Y29uc3RfbWF4KSArCi0gICAgICAgICAgKE1heFZhbHVl
IDw9IDo6Ym9vc3Q6OmludGVnZXJfdHJhaXRzPHNob3J0Pjo6Y29uc3RfbWF4KSArCi0gICAgICAg
ICAgKE1heFZhbHVlIDw9IDo6Ym9vc3Q6OmludGVnZXJfdHJhaXRzPHNpZ25lZCBjaGFyPjo6Y29u
c3RfbWF4KQotICAgICAgICA+OjpsZWFzdCAgbGVhc3Q7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1l
IGludF9mYXN0X3Q8bGVhc3Q+Ojp0eXBlICBmYXN0OwotICB9OwotCi0jaWYgIWRlZmluZWQoQk9P
U1RfTk9fSU5URUdSQUxfSU5UNjRfVCkgJiYgIWRlZmluZWQoQk9PU1RfTk9fSU5UNjRfVCkgJiYg
ZGVmaW5lZChCT09TVF9IQVNfTE9OR19MT05HKQotICB0ZW1wbGF0ZTwgYm9vc3Q6OmxvbmdfbG9u
Z190eXBlIE1pblZhbHVlID4gICAvLyBtaW5pbXVtIHZhbHVlIHRvIHJlcXVpcmUgc3VwcG9ydAot
I2Vsc2UKLSAgdGVtcGxhdGU8IGxvbmcgTWluVmFsdWUgPiAgIC8vIG1pbmltdW0gdmFsdWUgdG8g
cmVxdWlyZSBzdXBwb3J0Ci0jZW5kaWYKLSAgc3RydWN0IGludF9taW5fdmFsdWVfdAotICB7Ci0g
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6OmludF9sZWFzdF9oZWxwZXIKLSAg
ICAgICAgPAotI2lmICFkZWZpbmVkKEJPT1NUX05PX0lOVEVHUkFMX0lOVDY0X1QpICYmICFkZWZp
bmVkKEJPT1NUX05PX0lOVDY0X1QpICYmIGRlZmluZWQoQk9PU1RfSEFTX0xPTkdfTE9ORykKLSAg
ICAgICAgICAoTWluVmFsdWUgPj0gOjpib29zdDo6aW50ZWdlcl90cmFpdHM8Ym9vc3Q6Omxvbmdf
bG9uZ190eXBlPjo6Y29uc3RfbWluKSArCi0jZWxzZQotICAgICAgICAgICAxICsKLSNlbmRpZgot
ICAgICAgICAgIChNaW5WYWx1ZSA+PSA6OmJvb3N0OjppbnRlZ2VyX3RyYWl0czxsb25nPjo6Y29u
c3RfbWluKSArCi0gICAgICAgICAgKE1pblZhbHVlID49IDo6Ym9vc3Q6OmludGVnZXJfdHJhaXRz
PGludD46OmNvbnN0X21pbikgKwotICAgICAgICAgIChNaW5WYWx1ZSA+PSA6OmJvb3N0OjppbnRl
Z2VyX3RyYWl0czxzaG9ydD46OmNvbnN0X21pbikgKwotICAgICAgICAgIChNaW5WYWx1ZSA+PSA6
OmJvb3N0OjppbnRlZ2VyX3RyYWl0czxzaWduZWQgY2hhcj46OmNvbnN0X21pbikKLSAgICAgICAg
Pjo6bGVhc3QgIGxlYXN0OwotICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpbnRfZmFzdF90PGxlYXN0
Pjo6dHlwZSAgZmFzdDsKLSAgfTsKLQotICAvLyAgdW5zaWduZWQKLSNpZiAhZGVmaW5lZChCT09T
VF9OT19JTlRFR1JBTF9JTlQ2NF9UKSAmJiBkZWZpbmVkKEJPT1NUX0hBU19MT05HX0xPTkcpCi0g
IHRlbXBsYXRlPCBib29zdDo6dWxvbmdfbG9uZ190eXBlIE1heFZhbHVlID4gICAvLyBtaW5pbXVt
IHZhbHVlIHRvIHJlcXVpcmUgc3VwcG9ydAotI2Vsc2UKLSAgdGVtcGxhdGU8IHVuc2lnbmVkIGxv
bmcgTWF4VmFsdWUgPiAgIC8vIG1pbmltdW0gdmFsdWUgdG8gcmVxdWlyZSBzdXBwb3J0Ci0jZW5k
aWYKLSAgc3RydWN0IHVpbnRfdmFsdWVfdAotICB7Ci0jaWYgKGRlZmluZWQoX19CT1JMQU5EQ19f
KSB8fCBkZWZpbmVkKF9fQ09ERUdFQVJfXykpCi0gICAgIC8vIEl0J3MgcmVhbGx5IG5vdCBjbGVh
ciB3aHkgdGhpcyB3b3JrYXJvdW5kIHNob3VsZCBiZSBuZWVkZWQuLi4gc2hydWcgSSBndWVzcyEg
IEpNCi0jaWYgZGVmaW5lZChCT09TVF9OT19JTlRFR1JBTF9JTlQ2NF9UKQotICAgICAgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKHVuc2lnbmVkLCB3aGljaCA9Ci0gICAgICAgICAgIDEgKwotICAgICAg
ICAgIChNYXhWYWx1ZSA8PSA6OmJvb3N0OjppbnRlZ2VyX3RyYWl0czx1bnNpZ25lZCBsb25nPjo6
Y29uc3RfbWF4KSArCi0gICAgICAgICAgKE1heFZhbHVlIDw9IDo6Ym9vc3Q6OmludGVnZXJfdHJh
aXRzPHVuc2lnbmVkIGludD46OmNvbnN0X21heCkgKwotICAgICAgICAgIChNYXhWYWx1ZSA8PSA6
OmJvb3N0OjppbnRlZ2VyX3RyYWl0czx1bnNpZ25lZCBzaG9ydD46OmNvbnN0X21heCkgKwotICAg
ICAgICAgIChNYXhWYWx1ZSA8PSA6OmJvb3N0OjppbnRlZ2VyX3RyYWl0czx1bnNpZ25lZCBjaGFy
Pjo6Y29uc3RfbWF4KSk7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6aW50X2xlYXN0
X2hlbHBlcjwgOjpib29zdDo6dWludF92YWx1ZV90PE1heFZhbHVlPjo6d2hpY2g+OjpsZWFzdCBs
ZWFzdDsKLSNlbHNlIC8vIEJPT1NUX05PX0lOVEVHUkFMX0lOVDY0X1QKLSAgICAgIEJPT1NUX1NU
QVRJQ19DT05TVEFOVCh1bnNpZ25lZCwgd2hpY2ggPQotICAgICAgICAgICAxICsKLSAgICAgICAg
ICAoTWF4VmFsdWUgPD0gOjpib29zdDo6aW50ZWdlcl90cmFpdHM8Ym9vc3Q6OnVsb25nX2xvbmdf
dHlwZT46OmNvbnN0X21heCkgKwotICAgICAgICAgIChNYXhWYWx1ZSA8PSA6OmJvb3N0OjppbnRl
Z2VyX3RyYWl0czx1bnNpZ25lZCBsb25nPjo6Y29uc3RfbWF4KSArCi0gICAgICAgICAgKE1heFZh
bHVlIDw9IDo6Ym9vc3Q6OmludGVnZXJfdHJhaXRzPHVuc2lnbmVkIGludD46OmNvbnN0X21heCkg
KwotICAgICAgICAgIChNYXhWYWx1ZSA8PSA6OmJvb3N0OjppbnRlZ2VyX3RyYWl0czx1bnNpZ25l
ZCBzaG9ydD46OmNvbnN0X21heCkgKwotICAgICAgICAgIChNYXhWYWx1ZSA8PSA6OmJvb3N0Ojpp
bnRlZ2VyX3RyYWl0czx1bnNpZ25lZCBjaGFyPjo6Y29uc3RfbWF4KSk7Ci0gICAgICB0eXBlZGVm
IHR5cGVuYW1lIGRldGFpbDo6dWludF9sZWFzdF9oZWxwZXI8IDo6Ym9vc3Q6OnVpbnRfdmFsdWVf
dDxNYXhWYWx1ZT46OndoaWNoPjo6bGVhc3QgbGVhc3Q7Ci0jZW5kaWYgLy8gQk9PU1RfTk9fSU5U
RUdSQUxfSU5UNjRfVAotI2Vsc2UKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmRldGFp
bDo6dWludF9sZWFzdF9oZWxwZXIKLSAgICAgICAgPAotI2lmICFkZWZpbmVkKEJPT1NUX05PX0lO
VEVHUkFMX0lOVDY0X1QpICYmIGRlZmluZWQoQk9PU1RfSEFTX0xPTkdfTE9ORykKLSAgICAgICAg
ICAoTWF4VmFsdWUgPD0gOjpib29zdDo6aW50ZWdlcl90cmFpdHM8Ym9vc3Q6OnVsb25nX2xvbmdf
dHlwZT46OmNvbnN0X21heCkgKwotI2Vsc2UKLSAgICAgICAgICAgMSArCi0jZW5kaWYKLSAgICAg
ICAgICAoTWF4VmFsdWUgPD0gOjpib29zdDo6aW50ZWdlcl90cmFpdHM8dW5zaWduZWQgbG9uZz46
OmNvbnN0X21heCkgKwotICAgICAgICAgIChNYXhWYWx1ZSA8PSA6OmJvb3N0OjppbnRlZ2VyX3Ry
YWl0czx1bnNpZ25lZCBpbnQ+Ojpjb25zdF9tYXgpICsKLSAgICAgICAgICAoTWF4VmFsdWUgPD0g
Ojpib29zdDo6aW50ZWdlcl90cmFpdHM8dW5zaWduZWQgc2hvcnQ+Ojpjb25zdF9tYXgpICsKLSAg
ICAgICAgICAoTWF4VmFsdWUgPD0gOjpib29zdDo6aW50ZWdlcl90cmFpdHM8dW5zaWduZWQgY2hh
cj46OmNvbnN0X21heCkKLSAgICAgICAgPjo6bGVhc3QgIGxlYXN0OwotI2VuZGlmCi0gICAgICB0
eXBlZGVmIHR5cGVuYW1lIGludF9mYXN0X3Q8bGVhc3Q+Ojp0eXBlICBmYXN0OwotICB9OwotCi0K
LX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAgLy8gQk9PU1RfSU5URUdFUl9IUFAKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludGVn
ZXIvaW50ZWdlcl9sb2cyLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L2ludGVnZXIvaW50ZWdlcl9sb2cyLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOGIzNGNlNzQ0MGE4ZWI4ODA0MDUyYjc2MjBhYTA2M2VhMGNmNmQ1Zi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRlZ2VyL2ludGVnZXJfbG9nMi5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGludGVnZXJfbG9nMi5ocHAKLS8vCi0v
LyAgIEdpdmVzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIGxvZ2FyaXRobSwgaW4gYmFzZSAyLCBv
ZiBhCi0vLyBnaXZlbiBudW1iZXIuIEJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiB0aGUgYXJndW1l
bnQgaXMgPD0gMC4KLS8vCi0vLyAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMy0yMDA0LCAyMDA4
IEdlbm5hcm8gUHJvdGEKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdh
cmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAgICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgICAgICAgICBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmbmRlZiBCT09TVF9JTlRFR0VSX0lO
VEVHRVJfTE9HMl9IUFAKLSNkZWZpbmUgQk9PU1RfSU5URUdFUl9JTlRFR0VSX0xPRzJfSFBQCi0K
LSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpZmRlZiBfX0JPUkxBTkRDX18KLSNpbmNsdWRlIDxjbGlt
aXRzPgotI2VuZGlmCi0jaW5jbHVkZSA8Ym9vc3QvbGltaXRzLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9jb25maWcuaHBwPgotCi0KLW5hbWVzcGFjZSBib29zdCB7Ci0gbmFtZXNwYWNlIGRldGFpbCB7
Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIGludCBpbnRlZ2VyX2xvZzJfaW1wbChUIHgs
IGludCBuKSB7Ci0KLSAgICAgIGludCByZXN1bHQgPSAwOwotCi0gICAgICB3aGlsZSAoeCAhPSAx
KSB7Ci0KLSAgICAgICAgICBjb25zdCBUIHQgPSBzdGF0aWNfY2FzdDxUPih4ID4+IG4pOwotICAg
ICAgICAgIGlmICh0KSB7Ci0gICAgICAgICAgICAgIHJlc3VsdCArPSBuOwotICAgICAgICAgICAg
ICB4ID0gdDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbiAvPSAyOwotCi0gICAgICB9Ci0KLSAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotCi0KLSAgLy8gaGVscGVyIHRvIGZpbmQgdGhlIG1h
eGltdW0gcG93ZXIgb2YgdHdvCi0gIC8vIGxlc3MgdGhhbiBwIChtb3JlIGludm9sdmVkIHRoYW4g
bmVjZXNzYXJ5LAotICAvLyB0byBhdm9pZCBQVFMpCi0gIC8vCi0gIHRlbXBsYXRlIDxpbnQgcCwg
aW50IG4+Ci0gIHN0cnVjdCBtYXhfcG93Ml9sZXNzIHsKLQotICAgICAgZW51bSB7IGMgPSAyKm4g
PCBwIH07Ci0KLSAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVlID0KLSAgICAg
ICAgICBjID8gKG1heF9wb3cyX2xlc3M8IGMqcCwgMipjKm4+Ojp2YWx1ZSkgOiBuKTsKLQotICB9
OwotCi0gIHRlbXBsYXRlIDw+Ci0gIHN0cnVjdCBtYXhfcG93Ml9sZXNzPDAsIDA+IHsKLQotICAg
ICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwgdmFsdWUgPSAwKTsKLSAgfTsKLQotICAvLyB0
aGlzIHRlbXBsYXRlIGlzIGhlcmUganVzdCBmb3IgQm9ybGFuZCA6KAotICAvLyB3ZSBjb3VsZCBz
aW1wbHkgcmVseSBvbiBudW1lcmljX2xpbWl0cyBidXQgc29tZXRpbWVzCi0gIC8vIEJvcmxhbmQg
dHJpZXMgdG8gdXNlIG51bWVyaWNfbGltaXRzPGNvbnN0IFQ+LCBiZWNhdXNlCi0gIC8vIG9mIGl0
cyB1c3VhbCBjb25zdC1yZWxhdGVkIHByb2JsZW1zIGluIGFyZ3VtZW50IGRlZHVjdGlvbgotICAv
LyAtIGdwcwotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgc3RydWN0IHdpZHRoIHsKLQotI2lm
ZGVmIF9fQk9STEFORENfXwotICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwgdmFsdWUg
PSBzaXplb2YoVCkgKiBDSEFSX0JJVCk7Ci0jZWxzZQotICAgICAgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGludCwgdmFsdWUgPSAoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6ZGlnaXRzKSk7Ci0jZW5k
aWYKLQotICB9OwotCi0gfSAvLyBkZXRhaWwKLQotCi0gLy8gLS0tLS0tLS0tCi0gLy8gaW50ZWdl
cl9sb2cyCi0gLy8gLS0tLS0tLS0tLS0tLS0tCi0gLy8KLSB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LSBpbnQgaW50ZWdlcl9sb2cyKFQgeCkgewotCi0gICAgIGFzc2VydCh4ID4gMCk7Ci0KLSAgICAg
Y29uc3QgaW50IG4gPSBkZXRhaWw6Om1heF9wb3cyX2xlc3M8Ci0gICAgICAgICAgICAgICAgICAg
ICBkZXRhaWw6OndpZHRoPFQ+IDo6IHZhbHVlLCA0Ci0gICAgICAgICAgICAgICAgICAgPiA6OiB2
YWx1ZTsKLQotICAgICByZXR1cm4gZGV0YWlsOjppbnRlZ2VyX2xvZzJfaW1wbCh4LCBuKTsKLQot
IH0KLQotCi0KLX0KLQotCi0KLSNlbmRpZiAvLyBpbmNsdWRlIGd1YXJkCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRlZ2VyL2ludGVnZXJf
bWFzay5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRl
Z2VyL2ludGVnZXJfbWFzay5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhY2Y3
ZjdkZmY1MzQyODU0YjI3MTkxNWE3YmYzNWYwYjJjOGM3NDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvaW50ZWdlci9pbnRlZ2VyX21hc2suaHBwCisrKyAvZGV2L251bGwKQEAgLTEs
MTI2ICswLDAgQEAKLS8vICBCb29zdCBpbnRlZ2VyL2ludGVnZXJfbWFzay5ocHAgaGVhZGVyIGZp
bGUgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0KLS8vICAoQykgQ29weXJpZ2h0
IERhcnlsZSBXYWxrZXIgMjAwMS4KLS8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLS8vICBhY2NvbXBhbnlpbmcgZmlsZSBM
SUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VO
U0VfMV8wLnR4dCkKLQotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgdXBkYXRlcywg
ZG9jdW1lbnRhdGlvbiwgYW5kIHJldmlzaW9uIGhpc3RvcnkuIAotCi0jaWZuZGVmIEJPT1NUX0lO
VEVHRVJfSU5URUdFUl9NQVNLX0hQUAotI2RlZmluZSBCT09TVF9JTlRFR0VSX0lOVEVHRVJfTUFT
S19IUFAKLQotI2luY2x1ZGUgPGJvb3N0L2ludGVnZXJfZndkLmhwcD4gIC8vIHNlbGYgaW5jbHVk
ZQotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4gICAvLyBmb3IgQk9PU1RfU1RBVElDX0NP
TlNUQU5UCi0jaW5jbHVkZSA8Ym9vc3QvaW50ZWdlci5ocHA+ICAvLyBmb3IgYm9vc3Q6OnVpbnRf
dAotCi0jaW5jbHVkZSA8Y2xpbWl0cz4gIC8vIGZvciBVQ0hBUl9NQVgsIGV0Yy4KLSNpbmNsdWRl
IDxjc3RkZGVmPiAgLy8gZm9yIHN0ZDo6c2l6ZV90Ci0KLSNpbmNsdWRlIDxib29zdC9saW1pdHMu
aHBwPiAgLy8gZm9yIHN0ZDo6bnVtZXJpY19saW1pdHMKLQotLy8KLS8vIFdlIHNpbXBseSBjYW5u
b3QgaW5jbHVkZSB0aGlzIGhlYWRlciBvbiBnY2Mgd2l0aG91dCBnZXR0aW5nIGNvcGlvdXMgd2Fy
bmluZ3Mgb2YgdGhlIGtpbmQ6Ci0vLwotLy8gYm9vc3QvaW50ZWdlci9pbnRlZ2VyX21hc2suaHBw
OjkzOjM1OiB3YXJuaW5nOiB1c2Ugb2YgQzk5IGxvbmcgbG9uZyBpbnRlZ2VyIGNvbnN0YW50Ci0v
LwotLy8gQW5kIHlldCB0aGVyZSBpcyBubyBvdGhlciByZWFzb25hYmxlIGltcGxlbWVudGF0aW9u
LCBzbyB3ZSBkZWNsYXJlIHRoaXMgYSBzeXN0ZW0gaGVhZGVyCi0vLyB0byBzdXBwcmVzcyB0aGVz
ZSB3YXJuaW5ncy4KLS8vCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID49IDQp
Ci0jcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCi0jZW5kaWYKLQotbmFtZXNwYWNlIGJvb3N0Ci17
Ci0KLQotLy8gIFNwZWNpZmllZCBzaW5nbGUtYml0IG1hc2sgY2xhc3MgZGVjbGFyYXRpb24gIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLS8vICAoTG93ZXN0IGJpdCBzdGFydHMgY291
bnRpbmcgYXQgMC4pCi0KLXRlbXBsYXRlIDwgc3RkOjpzaXplX3QgQml0ID4KLXN0cnVjdCBoaWdo
X2JpdF9tYXNrX3QKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHVpbnRfdDwoQml0ICsgMSk+Ojps
ZWFzdCAgbGVhc3Q7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSB1aW50X3Q8KEJpdCArIDEpPjo6ZmFz
dCAgIGZhc3Q7Ci0KLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoIGxlYXN0LCBoaWdoX2JpdCA9
IChsZWFzdCggMXUgKSA8PCBCaXQpICk7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKCBmYXN0
LCBoaWdoX2JpdF9mYXN0ID0gKGZhc3QoIDF1ICkgPDwgQml0KSApOwotCi0gICAgQk9PU1RfU1RB
VElDX0NPTlNUQU5UKCBzdGQ6OnNpemVfdCwgYml0X3Bvc2l0aW9uID0gQml0ICk7Ci0KLX07ICAv
LyBib29zdDo6aGlnaF9iaXRfbWFza190Ci0KLQotLy8gIFNwZWNpZmllZCBiaXQtYmxvY2sgbWFz
ayBjbGFzcyBkZWNsYXJhdGlvbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLS8v
ICBNYWtlcyBtYXNrcyBmb3IgdGhlIGxvd2VzdCBOIGJpdHMKLS8vICAoU3BlY2lhbGl6YXRpb25z
IGFyZSBuZWVkZWQgd2hlbiBOIGZpbGxzIHVwIGEgdHlwZS4pCi0KLXRlbXBsYXRlIDwgc3RkOjpz
aXplX3QgQml0cyA+Ci1zdHJ1Y3QgbG93X2JpdHNfbWFza190Ci17Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSB1aW50X3Q8Qml0cz46OmxlYXN0ICBsZWFzdDsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHVp
bnRfdDxCaXRzPjo6ZmFzdCAgIGZhc3Q7Ci0KLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoIGxl
YXN0LCBzaWdfYml0cyA9ICh+KCB+KGxlYXN0KCAwdSApKSA8PCBCaXRzICkpICk7Ci0gICAgQk9P
U1RfU1RBVElDX0NPTlNUQU5UKCBmYXN0LCBzaWdfYml0c19mYXN0ID0gZmFzdChzaWdfYml0cykg
KTsKLQotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVCggc3RkOjpzaXplX3QsIGJpdF9jb3VudCA9
IEJpdHMgKTsKLQotfTsgIC8vIGJvb3N0Ojpsb3dfYml0c19tYXNrX3QKLQotCi0jZGVmaW5lIEJP
T1NUX0xPV19CSVRTX01BU0tfU1BFQ0lBTElaRSggVHlwZSApICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPCAgPiAgc3RydWN0IGxvd19iaXRzX21hc2tfdDwg
c3RkOjpudW1lcmljX2xpbWl0czxUeXBlPjo6ZGlnaXRzID4gIHsgXAotICAgICAgdHlwZWRlZiBz
dGQ6Om51bWVyaWNfbGltaXRzPFR5cGU+ICAgICAgICAgICBsaW1pdHNfdHlwZTsgICAgICAgICAg
ICAgICAgICBcCi0gICAgICB0eXBlZGVmIHVpbnRfdDxsaW1pdHNfdHlwZTo6ZGlnaXRzPjo6bGVh
c3QgIGxlYXN0OyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHR5cGVkZWYgdWludF90
PGxpbWl0c190eXBlOjpkaWdpdHM+OjpmYXN0ICAgZmFzdDsgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKCBsZWFzdCwgc2lnX2JpdHMgPSAofigg
bGVhc3QoMHUpICkpICk7ICAgICAgICAgICAgICBcCi0gICAgICBCT09TVF9TVEFUSUNfQ09OU1RB
TlQoIGZhc3QsIHNpZ19iaXRzX2Zhc3QgPSBmYXN0KHNpZ19iaXRzKSApOyAgICAgICAgICAgIFwK
LSAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVCggc3RkOjpzaXplX3QsIGJpdF9jb3VudCA9IGxp
bWl0c190eXBlOjpkaWdpdHMgKTsgICAgXAotICB9Ci0KLSNpZmRlZiBCT09TVF9NU1ZDCi0jcHJh
Z21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyNDUpICAvLyAnaW5p
dGlhbGl6aW5nJyA6IGNvbnZlcnNpb24gZnJvbSAnaW50JyB0byAnY29uc3QgYm9vc3Q6Omxvd19i
aXRzX21hc2tfdDw4Pjo6bGVhc3QnLCBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2gKLSNlbmRpZgot
Ci1CT09TVF9MT1dfQklUU19NQVNLX1NQRUNJQUxJWkUoIHVuc2lnbmVkIGNoYXIgKTsKLQotI2lm
IFVTSFJUX01BWCA+IFVDSEFSX01BWAotQk9PU1RfTE9XX0JJVFNfTUFTS19TUEVDSUFMSVpFKCB1
bnNpZ25lZCBzaG9ydCApOwotI2VuZGlmCi0KLSNpZiBVSU5UX01BWCA+IFVTSFJUX01BWAotQk9P
U1RfTE9XX0JJVFNfTUFTS19TUEVDSUFMSVpFKCB1bnNpZ25lZCBpbnQgKTsKLSNlbmRpZgotCi0j
aWYgVUxPTkdfTUFYID4gVUlOVF9NQVgKLUJPT1NUX0xPV19CSVRTX01BU0tfU1BFQ0lBTElaRSgg
dW5zaWduZWQgbG9uZyApOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19MT05HX0xP
TkcpCi0gICAgI2lmICgoZGVmaW5lZChVTExPTkdfTUFYKSAmJiAoVUxMT05HX01BWCA+IFVMT05H
X01BWCkpIHx8XAotICAgICAgICAoZGVmaW5lZChVTE9OR19MT05HX01BWCkgJiYgKFVMT05HX0xP
TkdfTUFYID4gVUxPTkdfTUFYKSkgfHxcCi0gICAgICAgIChkZWZpbmVkKFVMT05HTE9OR19NQVgp
ICYmIChVTE9OR0xPTkdfTUFYID4gVUxPTkdfTUFYKSkgfHxcCi0gICAgICAgIChkZWZpbmVkKF9V
TExPTkdfTUFYKSAmJiAoX1VMTE9OR19NQVggPiBVTE9OR19NQVgpKSkKLSAgICBCT09TVF9MT1df
QklUU19NQVNLX1NQRUNJQUxJWkUoIGJvb3N0Ojp1bG9uZ19sb25nX3R5cGUgKTsKLSAgICAjZW5k
aWYKLSNlbGlmIGRlZmluZWQoQk9PU1RfSEFTX01TX0lOVDY0KQotICAgICNpZiAxODQ0Njc0NDA3
MzcwOTU1MTYxNXVpNjQgPiBVTE9OR19NQVgKLSAgICBCT09TVF9MT1dfQklUU19NQVNLX1NQRUNJ
QUxJWkUoIHVuc2lnbmVkIF9faW50NjQgKTsKLSAgICAjZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYg
Qk9PU1RfTVNWQwotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZgotCi0jdW5kZWYgQk9PU1Rf
TE9XX0JJVFNfTUFTS19TUEVDSUFMSVpFCi0KLQotfSAgLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLQot
I2VuZGlmICAvLyBCT09TVF9JTlRFR0VSX0lOVEVHRVJfTUFTS19IUFAKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludGVnZXIvc3RhdGljX2xv
ZzIuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50ZWdl
ci9zdGF0aWNfbG9nMi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YzdhMDAx
MjUxYTI1YTdjOWEzN2ZlZDU3MjkzMTdhOGQwZTI5MTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvaW50ZWdlci9zdGF0aWNfbG9nMi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcg
KzAsMCBAQAotLy8gLS0tLS0tLS0tLS0tLS0gQm9vc3Qgc3RhdGljX2xvZzIuaHBwIGhlYWRlciBm
aWxlICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvLwotLy8KLS8vICAgICAgICAgICAgICAgICBD
b3B5cmlnaHQgKEMpIDIwMDEgRGFyeWxlIFdhbGtlci4KLS8vICAgICAgICAgICAgICAgICBDb3B5
cmlnaHQgKEMpIDIwMDMgVmVzYSBLYXJ2b25lbi4KLS8vICAgICAgICAgICAgICAgICBDb3B5cmln
aHQgKEMpIDIwMDMgR2VubmFybyBQcm90YS4KLS8vCi0vLyAgICAgRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gICAgICAgIChTZWUg
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICAgICAgICAg
ICAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gICAgICAg
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
ICAgICAgIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludGVnZXIgZm9yIGRvY3VtZW50
YXRpb24uCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vCi0KLQotI2lmbmRlZiBCT09TVF9JTlRFR0VS
X1NUQVRJQ19MT0cyX0hQUAotI2RlZmluZSBCT09TVF9JTlRFR0VSX1NUQVRJQ19MT0cyX0hQUAot
Ci0jaW5jbHVkZSAiYm9vc3QvaW50ZWdlcl9md2QuaHBwIiAvLyBmb3IgYm9vc3Q6OmludG1heF90
Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLSBuYW1lc3BhY2UgZGV0YWlsIHsKLQotICAgICBuYW1l
c3BhY2Ugc3RhdGljX2xvZzJfaW1wbCB7Ci0KLSAgICAgLy8gY2hvb3NlX2luaXRpYWxfbjw+Ci0g
ICAgIC8vCi0gICAgIC8vIFJlY3Vyc2l2ZWx5IGRvdWJsZXMgaXRzIGludGVnZXIgYXJndW1lbnQs
IHVudGlsIGl0Ci0gICAgIC8vIGJlY29tZXMgPj0gb2YgdGhlICJ3aWR0aCIgKEM5OSwgNi4yLjYu
MnA0KSBvZgotICAgICAvLyBzdGF0aWNfbG9nMl9hcmd1bWVudF90eXBlLgotICAgICAvLwotICAg
ICAvLyBVc2VkIHRvIGdldCB0aGUgbWF4aW11bSBwb3dlciBvZiB0d28gbGVzcyB0aGVuIHRoZSB3
aWR0aC4KLSAgICAgLy8KLSAgICAgLy8gRXhhbXBsZTogaWYgb24geW91ciBwbGF0Zm9ybSBhcmd1
bWVudF90eXBlIGhhcyA0OCB2YWx1ZQotICAgICAvLyAgICAgICAgICBiaXRzIGl0IHlpZWxkcyBu
PTMyLgotICAgICAvLwotICAgICAvLyBJdCdzIGVhc3kgdG8gcHJvdmUgdGhhdCwgc3RhcnRpbmcg
ZnJvbSBzdWNoIGEgdmFsdWUKLSAgICAgLy8gb2YgbiwgdGhlIGNvcmUgYWxnb3JpdGhtIHdvcmtz
IGNvcnJlY3RseSBmb3IgYW55IHdpZHRoCi0gICAgIC8vIG9mIHN0YXRpY19sb2cyX2FyZ3VtZW50
X3R5cGUgYW5kIHRoYXQgcmVjdXJzaW9uIGFsd2F5cwotICAgICAvLyB0ZXJtaW5hdGVzIHdpdGgg
eCA9IDEgYW5kIG4gPSAwIChzZWUgdGhlIGFsZ29yaXRobSdzCi0gICAgIC8vIGludmFyaWFudCku
Ci0KLSAgICAgdHlwZWRlZiBib29zdDo6c3RhdGljX2xvZzJfYXJndW1lbnRfdHlwZSBhcmd1bWVu
dF90eXBlOwotICAgICB0eXBlZGVmIGJvb3N0OjpzdGF0aWNfbG9nMl9yZXN1bHRfdHlwZSByZXN1
bHRfdHlwZTsKLQotICAgICB0ZW1wbGF0ZSA8cmVzdWx0X3R5cGUgbj4KLSAgICAgc3RydWN0IGNo
b29zZV9pbml0aWFsX24gewotCi0gICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwg
YyA9IChhcmd1bWVudF90eXBlKDEpIDw8IG4gPDwgbikgIT0gMCk7Ci0gICAgICAgICBCT09TVF9T
VEFUSUNfQ09OU1RBTlQoCi0gICAgICAgICAgICAgcmVzdWx0X3R5cGUsCi0gICAgICAgICAgICAg
dmFsdWUgPSAhYypuICsgY2hvb3NlX2luaXRpYWxfbjwyKmMqbj46OnZhbHVlCi0gICAgICAgICAp
OwotCi0gICAgIH07Ci0KLSAgICAgdGVtcGxhdGUgPD4KLSAgICAgc3RydWN0IGNob29zZV9pbml0
aWFsX248MD4gewotICAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHJlc3VsdF90eXBlLCB2
YWx1ZSA9IDApOwotICAgICB9OwotCi0KLQotICAgICAvLyBzdGFydCBjb21wdXRpbmcgZnJvbSBu
X3plcm8gLSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvCi0gICAgIGNvbnN0IHJlc3VsdF90eXBlIG5f
emVybyA9IDE2OwotICAgICBjb25zdCByZXN1bHRfdHlwZSBpbml0aWFsX24gPSBjaG9vc2VfaW5p
dGlhbF9uPG5femVybz46OnZhbHVlOwotCi0gICAgIC8vIHN0YXRpY19sb2cyX2ltcGw8PgotICAg
ICAvLwotICAgICAvLyAqIEludmFyaWFudDoKLSAgICAgLy8gICAgICAgICAgICAgICAgIDJuCi0g
ICAgIC8vICAxIDw9IHggJiYgeCA8IDIgICAgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggcmVjdXJzaW9u
Ci0gICAgIC8vICAgICAgICAgICAgICAgICAgICAgKHNlZSBhbHNvIGNob29zZV9pbml0aWFsX248
PikKLSAgICAgLy8KLSAgICAgLy8gKiBUeXBlIHJlcXVpcmVtZW50czoKLSAgICAgLy8KLSAgICAg
Ly8gICBhcmd1bWVudF90eXBlIG1heWJlIGFueSB1bnNpZ25lZCB0eXBlIHdpdGggYXQgbGVhc3Qg
bl96ZXJvICsgMQotICAgICAvLyAgIHZhbHVlIGJpdHMuIChOb3RlOiBJZiBsYXJnZXIgdHlwZXMg
d2lsbCBiZSBzdGFuZGFyZGl6ZWQgLWUuZy4KLSAgICAgLy8gICB1bnNpZ25lZCBsb25nIGxvbmct
IHRoZW4gdGhlIGFyZ3VtZW50X3R5cGUgdHlwZWRlZiBjYW4gYmUKLSAgICAgLy8gICBjaGFuZ2Vk
IHdpdGhvdXQgYWZmZWN0aW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlLikKLSAgICAgLy8KLQotICAg
ICB0ZW1wbGF0ZSA8YXJndW1lbnRfdHlwZSB4LCByZXN1bHRfdHlwZSBuID0gaW5pdGlhbF9uPgot
ICAgICBzdHJ1Y3Qgc3RhdGljX2xvZzJfaW1wbCB7Ci0KLSAgICAgICAgIEJPT1NUX1NUQVRJQ19D
T05TVEFOVChib29sLCBjID0gKHggPj4gbikgPiAwKTsgLy8geCA+PSAyKipuID8KLSAgICAgICAg
IEJPT1NUX1NUQVRJQ19DT05TVEFOVCgKLSAgICAgICAgICAgICByZXN1bHRfdHlwZSwKLSAgICAg
ICAgICAgICB2YWx1ZSA9IGMqbiArIChzdGF0aWNfbG9nMl9pbXBsPCAoeD4+YypuKSwgbi8yID46
OnZhbHVlKQotICAgICAgICAgKTsKLQotICAgICB9OwotCi0gICAgIHRlbXBsYXRlIDw+Ci0gICAg
IHN0cnVjdCBzdGF0aWNfbG9nMl9pbXBsPDEsIDA+IHsKLSAgICAgICAgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKHJlc3VsdF90eXBlLCB2YWx1ZSA9IDApOwotICAgICB9OwotCi0gICAgIH0KLSB9IC8v
IGRldGFpbAotCi0KLQotIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gLy8gc3RhdGljX2xvZzI8eD4KLSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSB0ZW1wbGF0ZSA8c3RhdGljX2xvZzJfYXJndW1lbnRfdHlwZSB4PgotIHN0
cnVjdCBzdGF0aWNfbG9nMiB7Ci0KLSAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKAotICAgICAg
ICAgc3RhdGljX2xvZzJfcmVzdWx0X3R5cGUsCi0gICAgICAgICB2YWx1ZSA9IGRldGFpbDo6c3Rh
dGljX2xvZzJfaW1wbDo6c3RhdGljX2xvZzJfaW1wbDx4Pjo6dmFsdWUKLSAgICAgKTsKLQotIH07
Ci0KLQotIHRlbXBsYXRlIDw+Ci0gc3RydWN0IHN0YXRpY19sb2cyPDA+IHsgfTsKLQotfQotCi0K
LQotI2VuZGlmIC8vIGluY2x1ZGUgZ3VhcmQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludGVnZXJfZndkLmhwcCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludGVnZXJfZndkLmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMTA1NzdhZTI5NGRiMTcwMDg3ODhkZDdkNzkzMzVkMWNlZGMxMjE0
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRlZ2VyX2Z3ZC5ocHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLy8gIEJvb3N0IGludGVnZXJfZndkLmhwcCBoZWFk
ZXIgZmlsZSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQotLy8g
IChDKSBDb3B5cmlnaHQgRGF2ZSBBYnJhaGFtcyBhbmQgRGFyeWxlIFdhbGtlciAyMDAxLiBEaXN0
cmlidXRlZCB1bmRlciB0aGUgQm9vc3QKLS8vICBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZQotLy8gIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gIFNlZSBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9saWJzL2ludGVnZXIgZm9yIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYg
Qk9PU1RfSU5URUdFUl9GV0RfSFBQCi0jZGVmaW5lIEJPT1NUX0lOVEVHRVJfRldEX0hQUAotCi0j
aW5jbHVkZSA8Y2xpbWl0cz4gIC8vIGZvciBVQ0hBUl9NQVgsIGV0Yy4KLSNpbmNsdWRlIDxjc3Rk
ZGVmPiAgLy8gZm9yIHN0ZDo6c2l6ZV90Ci0KLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPiAg
Ly8gZm9yIEJPT1NUX05PX0lOVFJJTlNJQ19XQ0hBUl9UCi0jaW5jbHVkZSA8Ym9vc3QvbGltaXRz
LmhwcD4gIC8vIGZvciBzdGQ6Om51bWVyaWNfbGltaXRzCi0jaW5jbHVkZSA8Ym9vc3QvY3N0ZGlu
dC5ocHA+ICAvLyBGb3IgaW50bWF4X3QKLQotCi1uYW1lc3BhY2UgYm9vc3QKLXsKLQotI2lmZGVm
IEJPT1NUX05PX0lOVEVHUkFMX0lOVDY0X1QKLSAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHN0
YXRpY19sb2cyX2FyZ3VtZW50X3R5cGU7Ci0gICAgIHR5cGVkZWYgICAgICAgICAgaW50ICBzdGF0
aWNfbG9nMl9yZXN1bHRfdHlwZTsKLSAgICAgdHlwZWRlZiBsb25nICAgICAgICAgIHN0YXRpY19t
aW5fbWF4X3NpZ25lZF90eXBlOwotICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc3RhdGljX21p
bl9tYXhfdW5zaWduZWRfdHlwZTsKLSNlbHNlCi0gICAgIHR5cGVkZWYgYm9vc3Q6OnVpbnRtYXhf
dCBzdGF0aWNfbWluX21heF91bnNpZ25lZF90eXBlOwotICAgICB0eXBlZGVmIGJvb3N0OjppbnRt
YXhfdCAgc3RhdGljX21pbl9tYXhfc2lnbmVkX3R5cGU7Ci0gICAgIHR5cGVkZWYgYm9vc3Q6OnVp
bnRtYXhfdCBzdGF0aWNfbG9nMl9hcmd1bWVudF90eXBlOwotICAgICB0eXBlZGVmIGludCAgICAg
ICAgICAgICAgc3RhdGljX2xvZzJfcmVzdWx0X3R5cGU7Ci0jZW5kaWYKLQotLy8gIEZyb20gPGJv
b3N0L2NzdGRpbnQuaHBwPiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLy8KLQotLy8gT25seSBoYXMgdHlwZWRlZnMgb3IgdXNpbmcgc3RhdGVtZW50cywg
d2l0aCAjY29uZGl0aW9uYWxzCi0KLQotLy8gIEZyb20gPGJvb3N0L2ludGVnZXJfdHJhaXRzLmhw
cD4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQotdGVtcGxh
dGUgPCBjbGFzcyBUID4KLSAgICBjbGFzcyBpbnRlZ2VyX3RyYWl0czsKLQotdGVtcGxhdGUgPCAg
PgotICAgIGNsYXNzIGludGVnZXJfdHJhaXRzPCBib29sID47Ci0KLXRlbXBsYXRlIDwgID4KLSAg
ICBjbGFzcyBpbnRlZ2VyX3RyYWl0czwgY2hhciA+OwotCi10ZW1wbGF0ZSA8ICA+Ci0gICAgY2xh
c3MgaW50ZWdlcl90cmFpdHM8IHNpZ25lZCBjaGFyID47Ci0KLXRlbXBsYXRlIDwgID4KLSAgICBj
bGFzcyBpbnRlZ2VyX3RyYWl0czwgdW5zaWduZWQgY2hhciA+OwotCi0jaWZuZGVmIEJPT1NUX05P
X0lOVFJJTlNJQ19XQ0hBUl9UCi10ZW1wbGF0ZSA8ICA+Ci0gICAgY2xhc3MgaW50ZWdlcl90cmFp
dHM8IHdjaGFyX3QgPjsKLSNlbmRpZgotCi10ZW1wbGF0ZSA8ICA+Ci0gICAgY2xhc3MgaW50ZWdl
cl90cmFpdHM8IHNob3J0ID47Ci0KLXRlbXBsYXRlIDwgID4KLSAgICBjbGFzcyBpbnRlZ2VyX3Ry
YWl0czwgdW5zaWduZWQgc2hvcnQgPjsKLQotdGVtcGxhdGUgPCAgPgotICAgIGNsYXNzIGludGVn
ZXJfdHJhaXRzPCBpbnQgPjsKLQotdGVtcGxhdGUgPCAgPgotICAgIGNsYXNzIGludGVnZXJfdHJh
aXRzPCB1bnNpZ25lZCBpbnQgPjsKLQotdGVtcGxhdGUgPCAgPgotICAgIGNsYXNzIGludGVnZXJf
dHJhaXRzPCBsb25nID47Ci0KLXRlbXBsYXRlIDwgID4KLSAgICBjbGFzcyBpbnRlZ2VyX3RyYWl0
czwgdW5zaWduZWQgbG9uZyA+OwotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fSU5URUdSQUxfSU5U
NjRfVCkgJiYgIWRlZmluZWQoQk9PU1RfTk9fSU5UNjRfVCkgJiYgZGVmaW5lZChCT09TVF9IQVNf
TE9OR19MT05HKQotdGVtcGxhdGUgPCAgPgotY2xhc3MgaW50ZWdlcl90cmFpdHM8ICA6OmJvb3N0
Ojpsb25nX2xvbmdfdHlwZT47Ci0KLXRlbXBsYXRlIDwgID4KLWNsYXNzIGludGVnZXJfdHJhaXRz
PCAgOjpib29zdDo6dWxvbmdfbG9uZ190eXBlID47Ci0jZWxpZiAhZGVmaW5lZChCT09TVF9OT19J
TlRFR1JBTF9JTlQ2NF9UKSAmJiAhZGVmaW5lZChCT09TVF9OT19JTlQ2NF9UKSAmJiBkZWZpbmVk
KEJPT1NUX0hBU19NU19JTlQ2NCkKLXRlbXBsYXRlIDwgID4KLWNsYXNzIGludGVnZXJfdHJhaXRz
PF9faW50NjQ+OwotCi10ZW1wbGF0ZSA8ICA+Ci1jbGFzcyBpbnRlZ2VyX3RyYWl0czx1bnNpZ25l
ZCBfX2ludDY0PjsKLSNlbmRpZgotCi0KLS8vICBGcm9tIDxib29zdC9pbnRlZ2VyLmhwcD4gIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0KLXRlbXBs
YXRlIDwgdHlwZW5hbWUgTGVhc3RJbnQgPgotICAgIHN0cnVjdCBpbnRfZmFzdF90OwotCi10ZW1w
bGF0ZTwgaW50IEJpdHMgPgotICAgIHN0cnVjdCBpbnRfdDsKLQotdGVtcGxhdGU8IGludCBCaXRz
ID4KLSAgICBzdHJ1Y3QgdWludF90OwotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fSU5URUdSQUxf
SU5UNjRfVCkgJiYgZGVmaW5lZChCT09TVF9IQVNfTE9OR19MT05HKQotICAgIHRlbXBsYXRlPCBi
b29zdDo6bG9uZ19sb25nX3R5cGUgTWF4VmFsdWUgPiAgIC8vIG1heGltdW0gdmFsdWUgdG8gcmVx
dWlyZSBzdXBwb3J0Ci0jZWxzZQotICB0ZW1wbGF0ZTwgbG9uZyBNYXhWYWx1ZSA+ICAgLy8gbWF4
aW11bSB2YWx1ZSB0byByZXF1aXJlIHN1cHBvcnQKLSNlbmRpZgotICAgIHN0cnVjdCBpbnRfbWF4
X3ZhbHVlX3Q7Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19JTlRFR1JBTF9JTlQ2NF9UKSAmJiBk
ZWZpbmVkKEJPT1NUX0hBU19MT05HX0xPTkcpCi0gIHRlbXBsYXRlPCBib29zdDo6bG9uZ19sb25n
X3R5cGUgTWluVmFsdWUgPiAgIC8vIG1pbmltdW0gdmFsdWUgdG8gcmVxdWlyZSBzdXBwb3J0Ci0j
ZWxzZQotICB0ZW1wbGF0ZTwgbG9uZyBNaW5WYWx1ZSA+ICAgLy8gbWluaW11bSB2YWx1ZSB0byBy
ZXF1aXJlIHN1cHBvcnQKLSNlbmRpZgotICAgIHN0cnVjdCBpbnRfbWluX3ZhbHVlX3Q7Ci0KLSNp
ZiAhZGVmaW5lZChCT09TVF9OT19JTlRFR1JBTF9JTlQ2NF9UKSAmJiBkZWZpbmVkKEJPT1NUX0hB
U19MT05HX0xPTkcpCi0gIHRlbXBsYXRlPCBib29zdDo6dWxvbmdfbG9uZ190eXBlIE1heFZhbHVl
ID4gICAvLyBtYXhpbXVtIHZhbHVlIHRvIHJlcXVpcmUgc3VwcG9ydAotI2Vsc2UKLSAgdGVtcGxh
dGU8IHVuc2lnbmVkIGxvbmcgTWF4VmFsdWUgPiAgIC8vIG1heGltdW0gdmFsdWUgdG8gcmVxdWly
ZSBzdXBwb3J0Ci0jZW5kaWYKLSAgICBzdHJ1Y3QgdWludF92YWx1ZV90OwotCi0KLS8vICBGcm9t
IDxib29zdC9pbnRlZ2VyL2ludGVnZXJfbWFzay5ocHA+ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS8vCi0KLXRlbXBsYXRlIDwgc3RkOjpzaXplX3QgQml0ID4KLSAgICBzdHJ1
Y3QgaGlnaF9iaXRfbWFza190OwotCi10ZW1wbGF0ZSA8IHN0ZDo6c2l6ZV90IEJpdHMgPgotICAg
IHN0cnVjdCBsb3dfYml0c19tYXNrX3Q7Ci0KLXRlbXBsYXRlIDwgID4KLSAgICBzdHJ1Y3QgbG93
X2JpdHNfbWFza190PCA6OnN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj46OmRpZ2l0
cyA+OwotCi0vLyAgRnJvbSA8Ym9vc3QvaW50ZWdlci9zdGF0aWNfbG9nMi5ocHA+ICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCi10ZW1wbGF0ZSA8c3RhdGljX2xvZzJf
YXJndW1lbnRfdHlwZSBWYWx1ZSA+Ci0gICAgc3RydWN0IHN0YXRpY19sb2cyOwotCi10ZW1wbGF0
ZSA8PiBzdHJ1Y3Qgc3RhdGljX2xvZzI8MHU+OwotCi0KLS8vICBGcm9tIDxib29zdC9pbnRlZ2Vy
L3N0YXRpY19taW5fbWF4LmhwcD4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8v
Ci0KLXRlbXBsYXRlIDxzdGF0aWNfbWluX21heF9zaWduZWRfdHlwZSBWYWx1ZTEsIHN0YXRpY19t
aW5fbWF4X3NpZ25lZF90eXBlIFZhbHVlMj4KLSAgICBzdHJ1Y3Qgc3RhdGljX3NpZ25lZF9taW47
Ci0KLXRlbXBsYXRlIDxzdGF0aWNfbWluX21heF9zaWduZWRfdHlwZSBWYWx1ZTEsIHN0YXRpY19t
aW5fbWF4X3NpZ25lZF90eXBlIFZhbHVlMj4KLSAgICBzdHJ1Y3Qgc3RhdGljX3NpZ25lZF9tYXg7
Ci0KLXRlbXBsYXRlIDxzdGF0aWNfbWluX21heF91bnNpZ25lZF90eXBlIFZhbHVlMSwgc3RhdGlj
X21pbl9tYXhfdW5zaWduZWRfdHlwZSBWYWx1ZTI+Ci0gICAgc3RydWN0IHN0YXRpY191bnNpZ25l
ZF9taW47Ci0KLXRlbXBsYXRlIDxzdGF0aWNfbWluX21heF91bnNpZ25lZF90eXBlIFZhbHVlMSwg
c3RhdGljX21pbl9tYXhfdW5zaWduZWRfdHlwZSBWYWx1ZTI+Ci0gICAgc3RydWN0IHN0YXRpY191
bnNpZ25lZF9tYXg7Ci0KLQotLy8gIEZyb20gPGJvb3N0L2ludGVnZXIvY29tbW9uX2ZhY3Rvcl9j
dC5ocHA+Ci0KLSNpZmRlZiBCT09TVF9OT19JTlRFR1JBTF9JTlQ2NF9UCi0gICAgIHR5cGVkZWYg
dW5zaWduZWQgbG9uZyBzdGF0aWNfZ2NkX3R5cGU7Ci0jZWxzZQotICAgICB0eXBlZGVmIGJvb3N0
Ojp1aW50bWF4X3Qgc3RhdGljX2djZF90eXBlOwotI2VuZGlmCi0KLXRlbXBsYXRlIDwgc3RhdGlj
X2djZF90eXBlIFZhbHVlMSwgc3RhdGljX2djZF90eXBlIFZhbHVlMiA+Ci0gICAgc3RydWN0IHN0
YXRpY19nY2Q7Ci10ZW1wbGF0ZSA8IHN0YXRpY19nY2RfdHlwZSBWYWx1ZTEsIHN0YXRpY19nY2Rf
dHlwZSBWYWx1ZTIgPgotICAgIHN0cnVjdCBzdGF0aWNfbGNtOwotCi0KLS8vICBGcm9tIDxib29z
dC9pbnRlZ2VyL2NvbW1vbl9mYWN0b3JfcnQuaHBwPgotCi10ZW1wbGF0ZSA8IHR5cGVuYW1lIElu
dGVnZXJUeXBlID4KLSAgICBjbGFzcyBnY2RfZXZhbHVhdG9yOwotdGVtcGxhdGUgPCB0eXBlbmFt
ZSBJbnRlZ2VyVHlwZSA+Ci0gICAgY2xhc3MgbGNtX2V2YWx1YXRvcjsKLQotCi19ICAvLyBuYW1l
c3BhY2UgYm9vc3QKLQotCi0jZW5kaWYgIC8vIEJPT1NUX0lOVEVHRVJfRldEX0hQUApkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50ZWdlcl90
cmFpdHMuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50
ZWdlcl90cmFpdHMuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGViMDBkMzFl
NDc4YzhhYzAyMDIxZmQ5MGM5Nzg1YjU0NzE5ZjY1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L2ludGVnZXJfdHJhaXRzLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBA
Ci0vKiBib29zdCBpbnRlZ2VyX3RyYWl0cy5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmln
aHQgSmVucyBNYXVyZXIgMjAwMAotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8x
XzAudHh0KQotICoKLSAqICRJZCQKLSAqCi0gKiBJZGVhIGJ5IEJlbWFuIERhd2VzLCBFZCBCcmV5
LCBTdGV2ZSBDbGVhcnksIGFuZCBOYXRoYW4gTXllcnMKLSAqLwotCi0vLyAgU2VlIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL2xpYnMvaW50ZWdlciBmb3IgZG9jdW1lbnRhdGlvbi4KLQotCi0jaWZuZGVm
IEJPT1NUX0lOVEVHRVJfVFJBSVRTX0hQUAotI2RlZmluZSBCT09TVF9JTlRFR0VSX1RSQUlUU19I
UFAKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbGltaXRz
LmhwcD4KLQotLy8gVGhlc2UgYXJlIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBhbmQgbm90IHBh
cnQgb2YgdGhlIGludGVyZmFjZQotI2luY2x1ZGUgPGxpbWl0cy5oPgotLy8gd2UgbmVlZCB3Y2hh
ci5oIGZvciBXQ0hBUl9NQVgvTUlOIGJ1dCBub3QgYWxsIHBsYXRmb3JtcyBwcm92aWRlIGl0LAot
Ly8gYW5kIHNvbWUgbWF5IGhhdmUgPHdjaGFyLmg+IGJ1dCBub3QgPGN3Y2hhcj4gLi4uCi0jaWYg
IWRlZmluZWQoQk9PU1RfTk9fSU5UUklOU0lDX1dDSEFSX1QpICYmICghZGVmaW5lZChCT09TVF9O
T19DV0NIQVIpIHx8IGRlZmluZWQoc3VuKSB8fCBkZWZpbmVkKF9fc3VuKSB8fCBkZWZpbmVkKF9f
UU5YX18pKQotI2luY2x1ZGUgPHdjaGFyLmg+Ci0jZW5kaWYKLQotLy8KLS8vIFdlIHNpbXBseSBj
YW5ub3QgaW5jbHVkZSB0aGlzIGhlYWRlciBvbiBnY2Mgd2l0aG91dCBnZXR0aW5nIGNvcGlvdXMg
d2FybmluZ3Mgb2YgdGhlIGtpbmQ6Ci0vLwotLy8gLi4vLi4vLi4vYm9vc3QvaW50ZWdlcl90cmFp
dHMuaHBwOjE2NDo2Njogd2FybmluZzogdXNlIG9mIEM5OSBsb25nIGxvbmcgaW50ZWdlciBjb25z
dGFudAotLy8KLS8vIEFuZCB5ZXQgdGhlcmUgaXMgbm8gb3RoZXIgcmVhc29uYWJsZSBpbXBsZW1l
bnRhdGlvbiwgc28gd2UgZGVjbGFyZSB0aGlzIGEgc3lzdGVtIGhlYWRlcgotLy8gdG8gc3VwcHJl
c3MgdGhlc2Ugd2FybmluZ3MuCi0vLwotI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNf
XyA+PSA0KQotI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgotI2VuZGlmCi0KLW5hbWVzcGFjZSBi
b29zdCB7Ci10ZW1wbGF0ZTxjbGFzcyBUPgotY2xhc3MgaW50ZWdlcl90cmFpdHMgOiBwdWJsaWMg
c3RkOjpudW1lcmljX2xpbWl0czxUPgotewotcHVibGljOgotICBCT09TVF9TVEFUSUNfQ09OU1RB
TlQoYm9vbCwgaXNfaW50ZWdyYWwgPSBmYWxzZSk7Ci19OwotCi1uYW1lc3BhY2UgZGV0YWlsIHsK
LXRlbXBsYXRlPGNsYXNzIFQsIFQgbWluX3ZhbCwgVCBtYXhfdmFsPgotY2xhc3MgaW50ZWdlcl90
cmFpdHNfYmFzZQotewotcHVibGljOgotICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgaXNf
aW50ZWdyYWwgPSB0cnVlKTsKLSAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKFQsIGNvbnN0X21pbiA9
IG1pbl92YWwpOwotICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoVCwgY29uc3RfbWF4ID0gbWF4X3Zh
bCk7Ci19OwotCi0jaWZuZGVmIEJPT1NUX05PX0lOQ0xBU1NfTUVNQkVSX0lOSVRJQUxJWkFUSU9O
Ci0vLyAgQSBkZWZpbml0aW9uIGlzIHJlcXVpcmVkIGV2ZW4gZm9yIGludGVncmFsIHN0YXRpYyBj
b25zdGFudHMKLXRlbXBsYXRlPGNsYXNzIFQsIFQgbWluX3ZhbCwgVCBtYXhfdmFsPgotY29uc3Qg
Ym9vbCBpbnRlZ2VyX3RyYWl0c19iYXNlPFQsIG1pbl92YWwsIG1heF92YWw+Ojppc19pbnRlZ3Jh
bDsKLQotdGVtcGxhdGU8Y2xhc3MgVCwgVCBtaW5fdmFsLCBUIG1heF92YWw+Ci1jb25zdCBUIGlu
dGVnZXJfdHJhaXRzX2Jhc2U8VCwgbWluX3ZhbCwgbWF4X3ZhbD46OmNvbnN0X21pbjsKLQotdGVt
cGxhdGU8Y2xhc3MgVCwgVCBtaW5fdmFsLCBUIG1heF92YWw+Ci1jb25zdCBUIGludGVnZXJfdHJh
aXRzX2Jhc2U8VCwgbWluX3ZhbCwgbWF4X3ZhbD46OmNvbnN0X21heDsKLSNlbmRpZgotCi19IC8v
IG5hbWVzcGFjZSBkZXRhaWwKLQotdGVtcGxhdGU8PgotY2xhc3MgaW50ZWdlcl90cmFpdHM8Ym9v
bD4KLSAgOiBwdWJsaWMgc3RkOjpudW1lcmljX2xpbWl0czxib29sPiwKLSAgICBwdWJsaWMgZGV0
YWlsOjppbnRlZ2VyX3RyYWl0c19iYXNlPGJvb2wsIGZhbHNlLCB0cnVlPgoteyB9OwotCi10ZW1w
bGF0ZTw+Ci1jbGFzcyBpbnRlZ2VyX3RyYWl0czxjaGFyPgotICA6IHB1YmxpYyBzdGQ6Om51bWVy
aWNfbGltaXRzPGNoYXI+LAotICAgIHB1YmxpYyBkZXRhaWw6OmludGVnZXJfdHJhaXRzX2Jhc2U8
Y2hhciwgQ0hBUl9NSU4sIENIQVJfTUFYPgoteyB9OwotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBpbnRl
Z2VyX3RyYWl0czxzaWduZWQgY2hhcj4KLSAgOiBwdWJsaWMgc3RkOjpudW1lcmljX2xpbWl0czxz
aWduZWQgY2hhcj4sCi0gICAgcHVibGljIGRldGFpbDo6aW50ZWdlcl90cmFpdHNfYmFzZTxzaWdu
ZWQgY2hhciwgU0NIQVJfTUlOLCBTQ0hBUl9NQVg+Ci17IH07Ci0KLXRlbXBsYXRlPD4KLWNsYXNz
IGludGVnZXJfdHJhaXRzPHVuc2lnbmVkIGNoYXI+Ci0gIDogcHVibGljIHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQgY2hhcj4sCi0gICAgcHVibGljIGRldGFpbDo6aW50ZWdlcl90cmFpdHNf
YmFzZTx1bnNpZ25lZCBjaGFyLCAwLCBVQ0hBUl9NQVg+Ci17IH07Ci0KLSNpZm5kZWYgQk9PU1Rf
Tk9fSU5UUklOU0lDX1dDSEFSX1QKLXRlbXBsYXRlPD4KLWNsYXNzIGludGVnZXJfdHJhaXRzPHdj
aGFyX3Q+Ci0gIDogcHVibGljIHN0ZDo6bnVtZXJpY19saW1pdHM8d2NoYXJfdD4sCi0gICAgLy8g
RG9uJ3QgdHJ1c3QgV0NIQVJfTUlOIGFuZCBXQ0hBUl9NQVggd2l0aCBNYWMgT1MgWCdzIG5hdGl2
ZQotICAgIC8vIGxpYnJhcnk6IHRoZXkgYXJlIHdyb25nIQotI2lmIGRlZmluZWQoV0NIQVJfTUlO
KSAmJiBkZWZpbmVkKFdDSEFSX01BWCkgJiYgIWRlZmluZWQoX19BUFBMRV9fKQotICAgIHB1Ymxp
YyBkZXRhaWw6OmludGVnZXJfdHJhaXRzX2Jhc2U8d2NoYXJfdCwgV0NIQVJfTUlOLCBXQ0hBUl9N
QVg+Ci0jZWxpZiBkZWZpbmVkKF9fQk9STEFORENfXykgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8
fCBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCAoZGVmaW5lZChfX0JFT1NfXykgJiYgZGVmaW5lZChf
X0dOVUNfXykpCi0gICAgLy8gTm8gV0NIQVJfTUlOIGFuZCBXQ0hBUl9NQVgsIHdoYXJfdCBpcyBz
aG9ydCBhbmQgdW5zaWduZWQ6Ci0gICAgcHVibGljIGRldGFpbDo6aW50ZWdlcl90cmFpdHNfYmFz
ZTx3Y2hhcl90LCAwLCAweGZmZmY+Ci0jZWxpZiAoZGVmaW5lZChfX3NnaSkgJiYgKCFkZWZpbmVk
KF9fU0dJX1NUTF9QT1JUKSB8fCBfX1NHSV9TVExfUE9SVCA8IDB4NDAwKSlcCi0gICAgfHwgKGRl
ZmluZWQgX19BUFBMRV9fKVwKLSAgICB8fCAoZGVmaW5lZChfX09wZW5CU0RfXykgJiYgZGVmaW5l
ZChfX0dOVUNfXykpXAotICAgIHx8IChkZWZpbmVkKF9fTmV0QlNEX18pICYmIGRlZmluZWQoX19H
TlVDX18pKVwKLSAgICB8fCAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChfX0dOVUNf
XykpXAotICAgIHx8IChkZWZpbmVkKF9fRHJhZ29uRmx5X18pICYmIGRlZmluZWQoX19HTlVDX18p
KVwKLSAgICB8fCAoZGVmaW5lZChfX2hwdXgpICYmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dO
VUNfXyA9PSAzKSAmJiAhZGVmaW5lZChfX1NHSV9TVExfUE9SVCkpCi0gICAgLy8gTm8gV0NIQVJf
TUlOIGFuZCBXQ0hBUl9NQVgsIHdjaGFyX3QgaGFzIHRoZSBzYW1lIHJhbmdlIGFzIGludC4KLSAg
ICAvLyAgLSBTR0kgTUlQU3BybyB3aXRoIG5hdGl2ZSBsaWJyYXJ5Ci0gICAgLy8gIC0gZ2NjIDMu
eCBvbiBIUC1VWAotICAgIC8vICAtIE1hYyBPUyBYIHdpdGggbmF0aXZlIGxpYnJhcnkKLSAgICAv
LyAgLSBnY2Mgb24gRnJlZUJTRCwgT3BlbkJTRCBhbmQgTmV0QlNECi0gICAgcHVibGljIGRldGFp
bDo6aW50ZWdlcl90cmFpdHNfYmFzZTx3Y2hhcl90LCBJTlRfTUlOLCBJTlRfTUFYPgotI2Vsc2UK
LSNlcnJvciBObyBXQ0hBUl9NSU4gYW5kIFdDSEFSX01BWCBwcmVzZW50LCBwbGVhc2UgYWRqdXN0
IGludGVnZXJfdHJhaXRzPD4gZm9yIHlvdXIgY29tcGlsZXIuCi0jZW5kaWYKLXsgfTsKLSNlbmRp
ZiAvLyBCT09TVF9OT19JTlRSSU5TSUNfV0NIQVJfVAotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBpbnRl
Z2VyX3RyYWl0czxzaG9ydD4KLSAgOiBwdWJsaWMgc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD4s
Ci0gICAgcHVibGljIGRldGFpbDo6aW50ZWdlcl90cmFpdHNfYmFzZTxzaG9ydCwgU0hSVF9NSU4s
IFNIUlRfTUFYPgoteyB9OwotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBpbnRlZ2VyX3RyYWl0czx1bnNp
Z25lZCBzaG9ydD4KLSAgOiBwdWJsaWMgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9y
dD4sCi0gICAgcHVibGljIGRldGFpbDo6aW50ZWdlcl90cmFpdHNfYmFzZTx1bnNpZ25lZCBzaG9y
dCwgMCwgVVNIUlRfTUFYPgoteyB9OwotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBpbnRlZ2VyX3RyYWl0
czxpbnQ+Ci0gIDogcHVibGljIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50PiwKLSAgICBwdWJsaWMg
ZGV0YWlsOjppbnRlZ2VyX3RyYWl0c19iYXNlPGludCwgSU5UX01JTiwgSU5UX01BWD4KLXsgfTsK
LQotdGVtcGxhdGU8PgotY2xhc3MgaW50ZWdlcl90cmFpdHM8dW5zaWduZWQgaW50PgotICA6IHB1
YmxpYyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD4sCi0gICAgcHVibGljIGRldGFp
bDo6aW50ZWdlcl90cmFpdHNfYmFzZTx1bnNpZ25lZCBpbnQsIDAsIFVJTlRfTUFYPgoteyB9Owot
Ci10ZW1wbGF0ZTw+Ci1jbGFzcyBpbnRlZ2VyX3RyYWl0czxsb25nPgotICA6IHB1YmxpYyBzdGQ6
Om51bWVyaWNfbGltaXRzPGxvbmc+LAotICAgIHB1YmxpYyBkZXRhaWw6OmludGVnZXJfdHJhaXRz
X2Jhc2U8bG9uZywgTE9OR19NSU4sIExPTkdfTUFYPgoteyB9OwotCi10ZW1wbGF0ZTw+Ci1jbGFz
cyBpbnRlZ2VyX3RyYWl0czx1bnNpZ25lZCBsb25nPgotICA6IHB1YmxpYyBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkIGxvbmc+LAotICAgIHB1YmxpYyBkZXRhaWw6OmludGVnZXJfdHJhaXRz
X2Jhc2U8dW5zaWduZWQgbG9uZywgMCwgVUxPTkdfTUFYPgoteyB9OwotCi0jaWYgIWRlZmluZWQo
Qk9PU1RfTk9fSU5URUdSQUxfSU5UNjRfVCkgJiYgIWRlZmluZWQoQk9PU1RfTk9fSU5UNjRfVCkK
LSNpZiBkZWZpbmVkKFVMTE9OR19NQVgpICYmIGRlZmluZWQoQk9PU1RfSEFTX0xPTkdfTE9ORykK
LQotdGVtcGxhdGU8PgotY2xhc3MgaW50ZWdlcl90cmFpdHM8IDo6Ym9vc3Q6OmxvbmdfbG9uZ190
eXBlPgotICA6IHB1YmxpYyBzdGQ6Om51bWVyaWNfbGltaXRzPCA6OmJvb3N0Ojpsb25nX2xvbmdf
dHlwZT4sCi0gICAgcHVibGljIGRldGFpbDo6aW50ZWdlcl90cmFpdHNfYmFzZTwgOjpib29zdDo6
bG9uZ19sb25nX3R5cGUsIExMT05HX01JTiwgTExPTkdfTUFYPgoteyB9OwotCi10ZW1wbGF0ZTw+
Ci1jbGFzcyBpbnRlZ2VyX3RyYWl0czwgOjpib29zdDo6dWxvbmdfbG9uZ190eXBlPgotICA6IHB1
YmxpYyBzdGQ6Om51bWVyaWNfbGltaXRzPCA6OmJvb3N0Ojp1bG9uZ19sb25nX3R5cGU+LAotICAg
IHB1YmxpYyBkZXRhaWw6OmludGVnZXJfdHJhaXRzX2Jhc2U8IDo6Ym9vc3Q6OnVsb25nX2xvbmdf
dHlwZSwgMCwgVUxMT05HX01BWD4KLXsgfTsKLQotI2VsaWYgZGVmaW5lZChVTE9OR19MT05HX01B
WCkgJiYgZGVmaW5lZChCT09TVF9IQVNfTE9OR19MT05HKQotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBp
bnRlZ2VyX3RyYWl0czwgOjpib29zdDo6bG9uZ19sb25nX3R5cGU+ICA6IHB1YmxpYyBzdGQ6Om51
bWVyaWNfbGltaXRzPCA6OmJvb3N0Ojpsb25nX2xvbmdfdHlwZT4sICAgIHB1YmxpYyBkZXRhaWw6
OmludGVnZXJfdHJhaXRzX2Jhc2U8IDo6Ym9vc3Q6OmxvbmdfbG9uZ190eXBlLCBMT05HX0xPTkdf
TUlOLCBMT05HX0xPTkdfTUFYPnsgfTsKLXRlbXBsYXRlPD4KLWNsYXNzIGludGVnZXJfdHJhaXRz
PCA6OmJvb3N0Ojp1bG9uZ19sb25nX3R5cGU+Ci0gIDogcHVibGljIHN0ZDo6bnVtZXJpY19saW1p
dHM8IDo6Ym9vc3Q6OnVsb25nX2xvbmdfdHlwZT4sCi0gICAgcHVibGljIGRldGFpbDo6aW50ZWdl
cl90cmFpdHNfYmFzZTwgOjpib29zdDo6dWxvbmdfbG9uZ190eXBlLCAwLCBVTE9OR19MT05HX01B
WD4KLXsgfTsKLQotI2VsaWYgZGVmaW5lZChVTE9OR0xPTkdfTUFYKSAmJiBkZWZpbmVkKEJPT1NU
X0hBU19MT05HX0xPTkcpCi0KLXRlbXBsYXRlPD4KLWNsYXNzIGludGVnZXJfdHJhaXRzPCA6OmJv
b3N0Ojpsb25nX2xvbmdfdHlwZT4KLSAgOiBwdWJsaWMgc3RkOjpudW1lcmljX2xpbWl0czwgOjpi
b29zdDo6bG9uZ19sb25nX3R5cGU+LAotICAgIHB1YmxpYyBkZXRhaWw6OmludGVnZXJfdHJhaXRz
X2Jhc2U8IDo6Ym9vc3Q6OmxvbmdfbG9uZ190eXBlLCBMT05HTE9OR19NSU4sIExPTkdMT05HX01B
WD4KLXsgfTsKLQotdGVtcGxhdGU8PgotY2xhc3MgaW50ZWdlcl90cmFpdHM8IDo6Ym9vc3Q6OnVs
b25nX2xvbmdfdHlwZT4KLSAgOiBwdWJsaWMgc3RkOjpudW1lcmljX2xpbWl0czwgOjpib29zdDo6
dWxvbmdfbG9uZ190eXBlPiwKLSAgICBwdWJsaWMgZGV0YWlsOjppbnRlZ2VyX3RyYWl0c19iYXNl
PCA6OmJvb3N0Ojp1bG9uZ19sb25nX3R5cGUsIDAsIFVMT05HTE9OR19NQVg+Ci17IH07Ci0KLSNl
bGlmIGRlZmluZWQoX0xMT05HX01BWCkgJiYgZGVmaW5lZChfQzIpICYmIGRlZmluZWQoQk9PU1Rf
SEFTX0xPTkdfTE9ORykKLQotdGVtcGxhdGU8PgotY2xhc3MgaW50ZWdlcl90cmFpdHM8IDo6Ym9v
c3Q6OmxvbmdfbG9uZ190eXBlPgotICA6IHB1YmxpYyBzdGQ6Om51bWVyaWNfbGltaXRzPCA6OmJv
b3N0Ojpsb25nX2xvbmdfdHlwZT4sCi0gICAgcHVibGljIGRldGFpbDo6aW50ZWdlcl90cmFpdHNf
YmFzZTwgOjpib29zdDo6bG9uZ19sb25nX3R5cGUsIC1fTExPTkdfTUFYIC0gX0MyLCBfTExPTkdf
TUFYPgoteyB9OwotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBpbnRlZ2VyX3RyYWl0czwgOjpib29zdDo6
dWxvbmdfbG9uZ190eXBlPgotICA6IHB1YmxpYyBzdGQ6Om51bWVyaWNfbGltaXRzPCA6OmJvb3N0
Ojp1bG9uZ19sb25nX3R5cGU+LAotICAgIHB1YmxpYyBkZXRhaWw6OmludGVnZXJfdHJhaXRzX2Jh
c2U8IDo6Ym9vc3Q6OnVsb25nX2xvbmdfdHlwZSwgMCwgX1VMTE9OR19NQVg+Ci17IH07Ci0KLSNl
bGlmIGRlZmluZWQoQk9PU1RfSEFTX0xPTkdfTE9ORykKLS8vCi0vLyB3ZSBoYXZlIGxvbmcgbG9u
ZyBidXQgbm8gY29uc3RhbnRzLCB0aGlzIGhhcHBlbnMgZm9yIGV4YW1wbGUgd2l0aCBnY2MgaW4g
LWFuc2kgbW9kZSwKLS8vIHdlJ2xsIGp1c3QgaGF2ZSB0byB3b3JrIG91dCB0aGUgdmFsdWVzIGZv
ciBvdXJzZWx2ZXMgKGFzc3VtZXMgMidzIGNvbXBsaW1lbnQgcmVwcmVzZW50YXRpb24pOgotLy8K
LXRlbXBsYXRlPD4KLWNsYXNzIGludGVnZXJfdHJhaXRzPCA6OmJvb3N0Ojpsb25nX2xvbmdfdHlw
ZT4KLSAgOiBwdWJsaWMgc3RkOjpudW1lcmljX2xpbWl0czwgOjpib29zdDo6bG9uZ19sb25nX3R5
cGU+LAotICAgIHB1YmxpYyBkZXRhaWw6OmludGVnZXJfdHJhaXRzX2Jhc2U8IDo6Ym9vc3Q6Omxv
bmdfbG9uZ190eXBlLCAoMUxMIDw8IChzaXplb2YoOjpib29zdDo6bG9uZ19sb25nX3R5cGUpICog
Q0hBUl9CSVQgLSAxKSksIH4oMUxMIDw8IChzaXplb2YoOjpib29zdDo6bG9uZ19sb25nX3R5cGUp
ICogQ0hBUl9CSVQgLSAxKSk+Ci17IH07Ci0KLXRlbXBsYXRlPD4KLWNsYXNzIGludGVnZXJfdHJh
aXRzPCA6OmJvb3N0Ojp1bG9uZ19sb25nX3R5cGU+Ci0gIDogcHVibGljIHN0ZDo6bnVtZXJpY19s
aW1pdHM8IDo6Ym9vc3Q6OnVsb25nX2xvbmdfdHlwZT4sCi0gICAgcHVibGljIGRldGFpbDo6aW50
ZWdlcl90cmFpdHNfYmFzZTwgOjpib29zdDo6dWxvbmdfbG9uZ190eXBlLCAwLCB+MHVMTD4KLXsg
fTsKLQotI2VsaWYgZGVmaW5lZChCT09TVF9IQVNfTVNfSU5UNjQpCi0KLXRlbXBsYXRlPD4KLWNs
YXNzIGludGVnZXJfdHJhaXRzPCBfX2ludDY0PgotICA6IHB1YmxpYyBzdGQ6Om51bWVyaWNfbGlt
aXRzPCBfX2ludDY0PiwKLSAgICBwdWJsaWMgZGV0YWlsOjppbnRlZ2VyX3RyYWl0c19iYXNlPCBf
X2ludDY0LCBfSTY0X01JTiwgX0k2NF9NQVg+Ci17IH07Ci0KLXRlbXBsYXRlPD4KLWNsYXNzIGlu
dGVnZXJfdHJhaXRzPCB1bnNpZ25lZCBfX2ludDY0PgotICA6IHB1YmxpYyBzdGQ6Om51bWVyaWNf
bGltaXRzPCB1bnNpZ25lZCBfX2ludDY0PiwKLSAgICBwdWJsaWMgZGV0YWlsOjppbnRlZ2VyX3Ry
YWl0c19iYXNlPCB1bnNpZ25lZCBfX2ludDY0LCAwLCBfVUk2NF9NQVg+Ci17IH07Ci0KLSNlbmRp
ZgotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvKiBCT09TVF9JTlRF
R0VSX1RSQUlUU19IUFAgKi8KLQotCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9jaXJjdWxhcl9saXN0X2FsZ29yaXRobXMu
aHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZl
L2NpcmN1bGFyX2xpc3RfYWxnb3JpdGhtcy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDcyZWFlMzI2ZDFhZTMxYjNhZTc1Mzc0ZjZhMDgwYzNlYWNjZTBjMTcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2NpcmN1bGFyX2xpc3RfYWxnb3JpdGhtcy5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NjggKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LS8vCi0vLyAoQykgQ29weXJpZ2h0IE9sYWYgS3J6aWthbGxhIDIwMDQtMjAwNi4KLS8vIChDKSBD
b3B5cmlnaHQgSW9uIEdhenRhbmFnYSAgMjAwNi0yMDE0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gICAgKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gICAgICAgICAg
aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3IgZG9jdW1lbnRhdGlvbi4KLS8vCi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9DSVJDVUxBUl9MSVNU
X0FMR09SSVRITVNfSFBQCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9DSVJDVUxBUl9MSVNUX0FM
R09SSVRITVNfSFBQCi0KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL2NvbmZpZ19i
ZWdpbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2ludHJ1c2l2ZV9md2QuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvYWxnb190eXBlLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9jb3JlL25vX2V4Y2VwdGlvbnNfc3VwcG9ydC5ocHA+Ci0jaW5jbHVkZSA8Y3N0ZGRl
Zj4KLQotI2lmIGRlZmluZWQoQk9PU1RfSEFTX1BSQUdNQV9PTkNFKQotIyAgcHJhZ21hIG9uY2UK
LSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIGludHJ1c2l2ZSB7Ci0KLS8v
ISBjaXJjdWxhcl9saXN0X2FsZ29yaXRobXMgcHJvdmlkZXMgYmFzaWMgYWxnb3JpdGhtcyB0byBt
YW5pcHVsYXRlIG5vZGVzCi0vLyEgZm9ybWluZyBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlz
dC4gQW4gZW1wdHkgY2lyY3VsYXIgbGlzdCBpcyBmb3JtZWQgYnkgYSBub2RlCi0vLyEgd2hvc2Ug
cG9pbnRlcnMgcG9pbnQgdG8gaXRzZWxmLgotLy8hCi0vLyEgY2lyY3VsYXJfbGlzdF9hbGdvcml0
aG1zIGlzIGNvbmZpZ3VyZWQgd2l0aCBhIE5vZGVUcmFpdHMgY2xhc3MsIHdoaWNoIGVuY2Fwc3Vs
YXRlcyB0aGUKLS8vISBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9kZSB0byBiZSBtYW5pcHVsYXRl
ZC4gTm9kZVRyYWl0cyBtdXN0IHN1cHBvcnQgdGhlCi0vLyEgZm9sbG93aW5nIGludGVyZmFjZToK
LS8vIQotLy8hIDxiPlR5cGVkZWZzPC9iPjoKLS8vIQotLy8hIDx0dD5ub2RlPC90dD46IFRoZSB0
eXBlIG9mIHRoZSBub2RlIHRoYXQgZm9ybXMgdGhlIGNpcmN1bGFyIGxpc3QKLS8vIQotLy8hIDx0
dD5ub2RlX3B0cjwvdHQ+OiBBIHBvaW50ZXIgdG8gYSBub2RlCi0vLyEKLS8vISA8dHQ+Y29uc3Rf
bm9kZV9wdHI8L3R0PjogQSBwb2ludGVyIHRvIGEgY29uc3Qgbm9kZQotLy8hCi0vLyEgPGI+U3Rh
dGljIGZ1bmN0aW9uczwvYj46Ci0vLyEKLS8vISA8dHQ+c3RhdGljIG5vZGVfcHRyIGdldF9wcmV2
aW91cyhjb25zdF9ub2RlX3B0ciBuKTs8L3R0PgotLy8hCi0vLyEgPHR0PnN0YXRpYyB2b2lkIHNl
dF9wcmV2aW91cyhub2RlX3B0ciBuLCBub2RlX3B0ciBwcmV2KTs8L3R0PgotLy8hCi0vLyEgPHR0
PnN0YXRpYyBub2RlX3B0ciBnZXRfbmV4dChjb25zdF9ub2RlX3B0ciBuKTs8L3R0PgotLy8hCi0v
LyEgPHR0PnN0YXRpYyB2b2lkIHNldF9uZXh0KG5vZGVfcHRyIG4sIG5vZGVfcHRyIG5leHQpOzwv
dHQ+Ci10ZW1wbGF0ZTxjbGFzcyBOb2RlVHJhaXRzPgotY2xhc3MgY2lyY3VsYXJfbGlzdF9hbGdv
cml0aG1zCi17Ci0gICBwdWJsaWM6Ci0gICB0eXBlZGVmIHR5cGVuYW1lIE5vZGVUcmFpdHM6Om5v
ZGUgICAgICAgICAgICBub2RlOwotICAgdHlwZWRlZiB0eXBlbmFtZSBOb2RlVHJhaXRzOjpub2Rl
X3B0ciAgICAgICAgbm9kZV9wdHI7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIE5vZGVUcmFpdHM6OmNv
bnN0X25vZGVfcHRyICBjb25zdF9ub2RlX3B0cjsKLSAgIHR5cGVkZWYgTm9kZVRyYWl0cyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGVfdHJhaXRzOwotCi0gICAvLyEgPGI+RWZmZWN0czwv
Yj46IENvbnN0cnVjdHMgYW4gbm9uLXVzZWQgbGlzdCBlbGVtZW50LCBzbyB0aGF0Ci0gICAvLyEg
aW5pdGVkKHRoaXNfbm9kZSkgPT0gdHJ1ZQotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwv
Yj46IENvbnN0YW50Ci0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAg
Qk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIHN0YXRpYyB2b2lkIGluaXQoY29uc3Qgbm9kZV9w
dHIgJnRoaXNfbm9kZSkKLSAgIHsKLSAgICAgIGNvbnN0IG5vZGVfcHRyIG51bGxfbm9kZSgobm9k
ZV9wdHIoKSkpOwotICAgICAgTm9kZVRyYWl0czo6c2V0X25leHQodGhpc19ub2RlLCBudWxsX25v
ZGUpOwotICAgICAgTm9kZVRyYWl0czo6c2V0X3ByZXZpb3VzKHRoaXNfbm9kZSwgbnVsbF9ub2Rl
KTsKLSAgIH0KLQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBSZXR1cm5zIHRydWUgaXMgInRoaXNf
bm9kZSIgaXMgaW4gYSBub24tdXNlZCBzdGF0ZQotICAgLy8hIGFzIGlmIGl0IHdhcyBpbml0aWFs
aXplZCBieSB0aGUgImluaXQiIGZ1bmN0aW9uLgotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0
eTwvYj46IENvbnN0YW50Ci0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgot
ICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIHN0YXRpYyBib29sIGluaXRlZChjb25zdCBj
b25zdF9ub2RlX3B0ciAmdGhpc19ub2RlKQotICAgeyAgcmV0dXJuICFOb2RlVHJhaXRzOjpnZXRf
bmV4dCh0aGlzX25vZGUpOyB9Ci0KLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogQ29uc3RydWN0cyBh
biBlbXB0eSBsaXN0LCBtYWtpbmcgdGhpc19ub2RlIHRoZSBvbmx5Ci0gICAvLyEgICBub2RlIG9m
IHRoZSBjaXJjdWxhciBsaXN0OgotICAgLy8hICA8dHQ+Tm9kZVRyYWl0czo6Z2V0X25leHQodGhp
c19ub2RlKSA9PSBOb2RlVHJhaXRzOjpnZXRfcHJldmlvdXModGhpc19ub2RlKQotICAgLy8hICA9
PSB0aGlzX25vZGU8L3R0Pi4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25z
dGFudAotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIEJPT1NUX0lO
VFJVU0lWRV9GT1JDRUlOTElORSBzdGF0aWMgdm9pZCBpbml0X2hlYWRlcihjb25zdCBub2RlX3B0
ciAmdGhpc19ub2RlKQotICAgewotICAgICAgTm9kZVRyYWl0czo6c2V0X25leHQodGhpc19ub2Rl
LCB0aGlzX25vZGUpOwotICAgICAgTm9kZVRyYWl0czo6c2V0X3ByZXZpb3VzKHRoaXNfbm9kZSwg
dGhpc19ub2RlKTsKLSAgIH0KLQotCi0gICAvLyEgPGI+UmVxdWlyZXM8L2I+OiB0aGlzX25vZGUg
bXVzdCBiZSBpbiBhIGNpcmN1bGFyIGxpc3Qgb3IgYmUgYW4gZW1wdHkgY2lyY3VsYXIgbGlzdC4K
LSAgIC8vIQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBSZXR1cm5zIHRydWUgaXMgInRoaXNfbm9k
ZSIgaXMgdGhlIG9ubHkgbm9kZSBvZiBhIGNpcmN1bGFyIGxpc3Q6Ci0gICAvLyEgIDx0dD5yZXR1
cm4gTm9kZVRyYWl0czo6Z2V0X25leHQodGhpc19ub2RlKSA9PSB0aGlzX25vZGU8L3R0PgotICAg
Ly8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IENvbnN0YW50Ci0gICAvLyEKLSAgIC8vISA8
Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIHN0
YXRpYyBib29sIHVuaXF1ZShjb25zdCBjb25zdF9ub2RlX3B0ciAmdGhpc19ub2RlKQotICAgewot
ICAgICAgbm9kZV9wdHIgbmV4dCA9IE5vZGVUcmFpdHM6OmdldF9uZXh0KHRoaXNfbm9kZSk7Ci0g
ICAgICByZXR1cm4gIW5leHQgfHwgbmV4dCA9PSB0aGlzX25vZGU7Ci0gICB9Ci0KLSAgIC8vISA8
Yj5SZXF1aXJlczwvYj46IHRoaXNfbm9kZSBtdXN0IGJlIGluIGEgY2lyY3VsYXIgbGlzdCBvciBi
ZSBhbiBlbXB0eSBjaXJjdWxhciBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0czwvYj46
IFJldHVybnMgdGhlIG51bWJlciBvZiBub2RlcyBpbiBhIGNpcmN1bGFyIGxpc3QuIElmIHRoZSBj
aXJjdWxhciBsaXN0Ci0gICAvLyEgIGlzIGVtcHR5LCByZXR1cm5zIDEuCi0gICAvLyEKLSAgIC8v
ISA8Yj5Db21wbGV4aXR5PC9iPjogTGluZWFyCi0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+
OiBOb3RoaW5nLgotICAgc3RhdGljIHN0ZDo6c2l6ZV90IGNvdW50KGNvbnN0IGNvbnN0X25vZGVf
cHRyICZ0aGlzX25vZGUpCi0gICB7Ci0gICAgICBzdGQ6OnNpemVfdCByZXN1bHQgPSAwOwotICAg
ICAgY29uc3Rfbm9kZV9wdHIgcCA9IHRoaXNfbm9kZTsKLSAgICAgIGRvewotICAgICAgICAgcCA9
IE5vZGVUcmFpdHM6OmdldF9uZXh0KHApOwotICAgICAgICAgKytyZXN1bHQ7Ci0gICAgICB9d2hp
bGUgKHAgIT0gdGhpc19ub2RlKTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICB9Ci0KLSAgIC8v
ISA8Yj5SZXF1aXJlczwvYj46IHRoaXNfbm9kZSBtdXN0IGJlIGluIGEgY2lyY3VsYXIgbGlzdCBv
ciBiZSBhbiBlbXB0eSBjaXJjdWxhciBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0czwv
Yj46IFVubGlua3MgdGhlIG5vZGUgZnJvbSB0aGUgY2lyY3VsYXIgbGlzdC4KLSAgIC8vIQotICAg
Ly8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudAotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dz
PC9iPjogTm90aGluZy4KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBzdGF0aWMgbm9k
ZV9wdHIgdW5saW5rKGNvbnN0IG5vZGVfcHRyICZ0aGlzX25vZGUpCi0gICB7Ci0gICAgICBub2Rl
X3B0ciBuZXh0KE5vZGVUcmFpdHM6OmdldF9uZXh0KHRoaXNfbm9kZSkpOwotICAgICAgbm9kZV9w
dHIgcHJldihOb2RlVHJhaXRzOjpnZXRfcHJldmlvdXModGhpc19ub2RlKSk7Ci0gICAgICBOb2Rl
VHJhaXRzOjpzZXRfbmV4dChwcmV2LCBuZXh0KTsKLSAgICAgIE5vZGVUcmFpdHM6OnNldF9wcmV2
aW91cyhuZXh0LCBwcmV2KTsKLSAgICAgIHJldHVybiBuZXh0OwotICAgfQotCi0gICAvLyEgPGI+
UmVxdWlyZXM8L2I+OiBiIGFuZCBlIG11c3QgYmUgbm9kZXMgb2YgdGhlIHNhbWUgY2lyY3VsYXIg
bGlzdCBvciBhbiBlbXB0eSByYW5nZS4KLSAgIC8vIQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBV
bmxpbmtzIHRoZSBub2RlIFtiLCBlKSBmcm9tIHRoZSBjaXJjdWxhciBsaXN0LgotICAgLy8hCi0g
ICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IENvbnN0YW50Ci0gICAvLyEKLSAgIC8vISA8Yj5UaHJv
d3M8L2I+OiBOb3RoaW5nLgotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIHN0YXRpYyB2
b2lkIHVubGluayhjb25zdCBub2RlX3B0ciAmYiwgY29uc3Qgbm9kZV9wdHIgJmUpCi0gICB7Ci0g
ICAgICBpZiAoYiAhPSBlKSB7Ci0gICAgICAgICBub2RlX3B0ciBwcmV2YihOb2RlVHJhaXRzOjpn
ZXRfcHJldmlvdXMoYikpOwotICAgICAgICAgTm9kZVRyYWl0czo6c2V0X3ByZXZpb3VzKGUsIHBy
ZXZiKTsKLSAgICAgICAgIE5vZGVUcmFpdHM6OnNldF9uZXh0KHByZXZiLCBlKTsKLSAgICAgIH0K
LSAgIH0KLQotICAgLy8hIDxiPlJlcXVpcmVzPC9iPjogbnh0X25vZGUgbXVzdCBiZSBhIG5vZGUg
b2YgYSBjaXJjdWxhciBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IExpbmtz
IHRoaXNfbm9kZSBiZWZvcmUgbnh0X25vZGUgaW4gdGhlIGNpcmN1bGFyIGxpc3QuCi0gICAvLyEK
LSAgIC8vISA8Yj5Db21wbGV4aXR5PC9iPjogQ29uc3RhbnQKLSAgIC8vIQotICAgLy8hIDxiPlRo
cm93czwvYj46IE5vdGhpbmcuCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgc3RhdGlj
IHZvaWQgbGlua19iZWZvcmUoY29uc3Qgbm9kZV9wdHIgJm54dF9ub2RlLCBjb25zdCBub2RlX3B0
ciAmdGhpc19ub2RlKQotICAgewotICAgICAgbm9kZV9wdHIgcHJldihOb2RlVHJhaXRzOjpnZXRf
cHJldmlvdXMobnh0X25vZGUpKTsKLSAgICAgIE5vZGVUcmFpdHM6OnNldF9wcmV2aW91cyh0aGlz
X25vZGUsIHByZXYpOwotICAgICAgTm9kZVRyYWl0czo6c2V0X25leHQodGhpc19ub2RlLCBueHRf
bm9kZSk7Ci0gICAgICAvL254dF9ub2RlIG1pZ2h0IGJlIGFuIGFsaWFzIGZvciBwcmV2LT5uZXh0
XwotICAgICAgLy9zbyB1c2UgaXQgYmVmb3JlIE5vZGVUcmFpdHM6OnNldF9uZXh0KHByZXYsIC4u
LikKLSAgICAgIC8vaXMgY2FsbGVkIGFuZCB0aGUgcmVmZXJlbmNlIGNoYW5nZXMgaXRzIHZhbHVl
Ci0gICAgICBOb2RlVHJhaXRzOjpzZXRfcHJldmlvdXMobnh0X25vZGUsIHRoaXNfbm9kZSk7Ci0g
ICAgICBOb2RlVHJhaXRzOjpzZXRfbmV4dChwcmV2LCB0aGlzX25vZGUpOwotICAgfQotCi0gICAv
LyEgPGI+UmVxdWlyZXM8L2I+OiBwcmV2X25vZGUgbXVzdCBiZSBhIG5vZGUgb2YgYSBjaXJjdWxh
ciBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IExpbmtzIHRoaXNfbm9kZSBh
ZnRlciBwcmV2X25vZGUgaW4gdGhlIGNpcmN1bGFyIGxpc3QuCi0gICAvLyEKLSAgIC8vISA8Yj5D
b21wbGV4aXR5PC9iPjogQ29uc3RhbnQKLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwvYj46IE5v
dGhpbmcuCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgc3RhdGljIHZvaWQgbGlua19h
ZnRlcihjb25zdCBub2RlX3B0ciAmcHJldl9ub2RlLCBjb25zdCBub2RlX3B0ciAmdGhpc19ub2Rl
KQotICAgewotICAgICAgbm9kZV9wdHIgbmV4dChOb2RlVHJhaXRzOjpnZXRfbmV4dChwcmV2X25v
ZGUpKTsKLSAgICAgIE5vZGVUcmFpdHM6OnNldF9wcmV2aW91cyh0aGlzX25vZGUsIHByZXZfbm9k
ZSk7Ci0gICAgICBOb2RlVHJhaXRzOjpzZXRfbmV4dCh0aGlzX25vZGUsIG5leHQpOwotICAgICAg
Ly9wcmV2X25vZGUgbWlnaHQgYmUgYW4gYWxpYXMgZm9yIG5leHQtPm5leHRfCi0gICAgICAvL3Nv
IHVzZSBpdCBiZWZvcmUgdXBkYXRlIGl0IGJlZm9yZSBOb2RlVHJhaXRzOjpzZXRfcHJldmlvdXMo
bmV4dCwgLi4uKQotICAgICAgLy9pcyBjYWxsZWQgYW5kIHRoZSByZWZlcmVuY2UgY2hhbmdlcyBp
dCdzIHZhbHVlCi0gICAgICBOb2RlVHJhaXRzOjpzZXRfbmV4dChwcmV2X25vZGUsIHRoaXNfbm9k
ZSk7Ci0gICAgICBOb2RlVHJhaXRzOjpzZXRfcHJldmlvdXMobmV4dCwgdGhpc19ub2RlKTsKLSAg
IH0KLQotICAgLy8hIDxiPlJlcXVpcmVzPC9iPjogdGhpc19ub2RlIGFuZCBvdGhlcl9ub2RlIG11
c3QgYmUgbm9kZXMgaW5zZXJ0ZWQKLSAgIC8vISAgaW4gY2lyY3VsYXIgbGlzdHMgb3IgYmUgZW1w
dHkgY2lyY3VsYXIgbGlzdHMuCi0gICAvLyEKLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogU3dhcHMg
dGhlIHBvc2l0aW9uIG9mIHRoZSBub2RlczogdGhpc19ub2RlIGlzIGluc2VydGVkIGluCi0gICAv
LyEgICBvdGhlcl9ub2RlcyBwb3NpdGlvbiBpbiB0aGUgc2Vjb25kIGNpcmN1bGFyIGxpc3QgYW5k
IHRoZSBvdGhlcl9ub2RlIGlzIGluc2VydGVkCi0gICAvLyEgICBpbiB0aGlzX25vZGUncyBwb3Np
dGlvbiBpbiB0aGUgZmlyc3QgY2lyY3VsYXIgbGlzdC4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBs
ZXhpdHk8L2I+OiBDb25zdGFudAotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGlu
Zy4KLSAgIHN0YXRpYyB2b2lkIHN3YXBfbm9kZXMoY29uc3Qgbm9kZV9wdHIgJnRoaXNfbm9kZSwg
Y29uc3Qgbm9kZV9wdHIgJm90aGVyX25vZGUpCi0gICB7Ci0gICAgICBpZiAob3RoZXJfbm9kZSA9
PSB0aGlzX25vZGUpCi0gICAgICAgICByZXR1cm47Ci0gICAgICBib29sIHRoaXNfaW5pdGVkICA9
IGluaXRlZCh0aGlzX25vZGUpOwotICAgICAgYm9vbCBvdGhlcl9pbml0ZWQgPSBpbml0ZWQob3Ro
ZXJfbm9kZSk7Ci0gICAgICBpZih0aGlzX2luaXRlZCl7Ci0gICAgICAgICBpbml0X2hlYWRlcih0
aGlzX25vZGUpOwotICAgICAgfQotICAgICAgaWYob3RoZXJfaW5pdGVkKXsKLSAgICAgICAgIGlu
aXRfaGVhZGVyKG90aGVyX25vZGUpOwotICAgICAgfQotCi0gICAgICBub2RlX3B0ciBuZXh0X3Ro
aXMoTm9kZVRyYWl0czo6Z2V0X25leHQodGhpc19ub2RlKSk7Ci0gICAgICBub2RlX3B0ciBwcmV2
X3RoaXMoTm9kZVRyYWl0czo6Z2V0X3ByZXZpb3VzKHRoaXNfbm9kZSkpOwotICAgICAgbm9kZV9w
dHIgbmV4dF9vdGhlcihOb2RlVHJhaXRzOjpnZXRfbmV4dChvdGhlcl9ub2RlKSk7Ci0gICAgICBu
b2RlX3B0ciBwcmV2X290aGVyKE5vZGVUcmFpdHM6OmdldF9wcmV2aW91cyhvdGhlcl9ub2RlKSk7
Ci0gICAgICAvL3RoZXNlIGZpcnN0IHR3byBzd2FwcyBtdXN0IGhhcHBlbiBiZWZvcmUgdGhlIG90
aGVyIHR3bwotICAgICAgc3dhcF9wcmV2KG5leHRfdGhpcywgbmV4dF9vdGhlcik7Ci0gICAgICBz
d2FwX25leHQocHJldl90aGlzLCBwcmV2X290aGVyKTsKLSAgICAgIHN3YXBfbmV4dCh0aGlzX25v
ZGUsIG90aGVyX25vZGUpOwotICAgICAgc3dhcF9wcmV2KHRoaXNfbm9kZSwgb3RoZXJfbm9kZSk7
Ci0KLSAgICAgIGlmKHRoaXNfaW5pdGVkKXsKLSAgICAgICAgIGluaXQob3RoZXJfbm9kZSk7Ci0g
ICAgICB9Ci0gICAgICBpZihvdGhlcl9pbml0ZWQpewotICAgICAgICAgaW5pdCh0aGlzX25vZGUp
OwotICAgICAgfQotICAgfQotCi0gICAvLyEgPGI+UmVxdWlyZXM8L2I+OiBiIGFuZCBlIG11c3Qg
YmUgbm9kZXMgb2YgdGhlIHNhbWUgY2lyY3VsYXIgbGlzdCBvciBhbiBlbXB0eSByYW5nZS4KLSAg
IC8vISAgIGFuZCBwIG11c3QgYmUgYSBub2RlIG9mIGEgZGlmZmVyZW50IGNpcmN1bGFyIGxpc3Qg
b3IgbWF5IG5vdCBiZSBhbiBpdGVyYXRvciBpbgotICAgLy8gICAgW2IsIGUpLgotICAgLy8hCi0g
ICAvLyEgPGI+RWZmZWN0czwvYj46IFJlbW92ZXMgdGhlIG5vZGVzIGZyb20gW2IsIGUpIHJhbmdl
IGZyb20gdGhlaXIgY2lyY3VsYXIgbGlzdCBhbmQgaW5zZXJ0cwotICAgLy8hICAgdGhlbSBiZWZv
cmUgcCBpbiBwJ3MgY2lyY3VsYXIgbGlzdC4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8
L2I+OiBDb25zdGFudAotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAg
IHN0YXRpYyB2b2lkIHRyYW5zZmVyKGNvbnN0IG5vZGVfcHRyICZwLCBjb25zdCBub2RlX3B0ciAm
YiwgY29uc3Qgbm9kZV9wdHIgJmUpCi0gICB7Ci0gICAgICBpZiAoYiAhPSBlKSB7Ci0gICAgICAg
ICBub2RlX3B0ciBwcmV2X3AoTm9kZVRyYWl0czo6Z2V0X3ByZXZpb3VzKHApKTsKLSAgICAgICAg
IG5vZGVfcHRyIHByZXZfYihOb2RlVHJhaXRzOjpnZXRfcHJldmlvdXMoYikpOwotICAgICAgICAg
bm9kZV9wdHIgcHJldl9lKE5vZGVUcmFpdHM6OmdldF9wcmV2aW91cyhlKSk7Ci0gICAgICAgICBO
b2RlVHJhaXRzOjpzZXRfbmV4dChwcmV2X2UsIHApOwotICAgICAgICAgTm9kZVRyYWl0czo6c2V0
X3ByZXZpb3VzKHAsIHByZXZfZSk7Ci0gICAgICAgICBOb2RlVHJhaXRzOjpzZXRfbmV4dChwcmV2
X2IsIGUpOwotICAgICAgICAgTm9kZVRyYWl0czo6c2V0X3ByZXZpb3VzKGUsIHByZXZfYik7Ci0g
ICAgICAgICBOb2RlVHJhaXRzOjpzZXRfbmV4dChwcmV2X3AsIGIpOwotICAgICAgICAgTm9kZVRy
YWl0czo6c2V0X3ByZXZpb3VzKGIsIHByZXZfcCk7Ci0gICAgICB9Ci0gICB9Ci0KLSAgIC8vISA8
Yj5SZXF1aXJlczwvYj46IGkgbXVzdCBhIG5vZGUgb2YgYSBjaXJjdWxhciBsaXN0Ci0gICAvLyEg
ICBhbmQgcCBtdXN0IGJlIGEgbm9kZSBvZiBhIGRpZmZlcmVudCBjaXJjdWxhciBsaXN0LgotICAg
Ly8hCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IFJlbW92ZXMgdGhlIG5vZGUgaSBmcm9tIGl0cyBj
aXJjdWxhciBsaXN0IGFuZCBpbnNlcnRzCi0gICAvLyEgICBpdCBiZWZvcmUgcCBpbiBwJ3MgY2ly
Y3VsYXIgbGlzdC4KLSAgIC8vISAgIElmIHAgPT0gaSBvciBwID09IE5vZGVUcmFpdHM6OmdldF9u
ZXh0KGkpLCB0aGlzIGZ1bmN0aW9uIGlzIGEgbnVsbCBvcGVyYXRpb24uCi0gICAvLyEKLSAgIC8v
ISA8Yj5Db21wbGV4aXR5PC9iPjogQ29uc3RhbnQKLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwv
Yj46IE5vdGhpbmcuCi0gICBzdGF0aWMgdm9pZCB0cmFuc2Zlcihjb25zdCBub2RlX3B0ciAmcCwg
Y29uc3Qgbm9kZV9wdHIgJmkpCi0gICB7Ci0gICAgICBub2RlX3B0ciBuKE5vZGVUcmFpdHM6Omdl
dF9uZXh0KGkpKTsKLSAgICAgIGlmKG4gIT0gcCAmJiBpICE9IHApewotICAgICAgICAgbm9kZV9w
dHIgcHJldl9wKE5vZGVUcmFpdHM6OmdldF9wcmV2aW91cyhwKSk7Ci0gICAgICAgICBub2RlX3B0
ciBwcmV2X2koTm9kZVRyYWl0czo6Z2V0X3ByZXZpb3VzKGkpKTsKLSAgICAgICAgIE5vZGVUcmFp
dHM6OnNldF9uZXh0KHByZXZfcCwgaSk7Ci0gICAgICAgICBOb2RlVHJhaXRzOjpzZXRfcHJldmlv
dXMoaSwgcHJldl9wKTsKLSAgICAgICAgIE5vZGVUcmFpdHM6OnNldF9uZXh0KGksIHApOwotICAg
ICAgICAgTm9kZVRyYWl0czo6c2V0X3ByZXZpb3VzKHAsIGkpOwotICAgICAgICAgTm9kZVRyYWl0
czo6c2V0X3ByZXZpb3VzKG4sIHByZXZfaSk7Ci0gICAgICAgICBOb2RlVHJhaXRzOjpzZXRfbmV4
dChwcmV2X2ksIG4pOwotCi0gICAgICB9Ci0gICB9Ci0KLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjog
UmV2ZXJzZXMgdGhlIG9yZGVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0LgotICAgLy8hCi0gICAv
LyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8
L2I+OiBUaGlzIGZ1bmN0aW9uIGlzIGxpbmVhciB0aW1lLgotICAgc3RhdGljIHZvaWQgcmV2ZXJz
ZShjb25zdCBub2RlX3B0ciAmcCkKLSAgIHsKLSAgICAgIG5vZGVfcHRyIGYoTm9kZVRyYWl0czo6
Z2V0X25leHQocCkpOwotICAgICAgbm9kZV9wdHIgaShOb2RlVHJhaXRzOjpnZXRfbmV4dChmKSks
IGUocCk7Ci0KLSAgICAgIHdoaWxlKGkgIT0gZSkgewotICAgICAgICAgbm9kZV9wdHIgbiA9IGk7
Ci0gICAgICAgICBpID0gTm9kZVRyYWl0czo6Z2V0X25leHQoaSk7Ci0gICAgICAgICB0cmFuc2Zl
cihmLCBuLCBpKTsKLSAgICAgICAgIGYgPSBuOwotICAgICAgfQotICAgfQotCi0gICAvLyEgPGI+
RWZmZWN0czwvYj46IE1vdmVzIHRoZSBub2RlIHAgbiBwb3NpdGlvbnMgdG93YXJkcyB0aGUgZW5k
IG9mIHRoZSBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAg
IC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBMaW5lYXIgdG8gdGhlIG51bWJlciBvZiBt
b3ZlZCBwb3NpdGlvbnMuCi0gICBzdGF0aWMgdm9pZCBtb3ZlX2JhY2t3YXJkcyhjb25zdCBub2Rl
X3B0ciAmcCwgc3RkOjpzaXplX3QgbikKLSAgIHsKLSAgICAgIC8vTnVsbCBzaGlmdCwgbm90aGlu
ZyB0byBkbwotICAgICAgaWYoIW4pIHJldHVybjsKLSAgICAgIG5vZGVfcHRyIGZpcnN0ICA9IE5v
ZGVUcmFpdHM6OmdldF9uZXh0KHApOwotICAgICAgLy9zaXplKCkgPT0gMCBvciAxLCBub3RoaW5n
IHRvIGRvCi0gICAgICBpZihmaXJzdCA9PSBOb2RlVHJhaXRzOjpnZXRfcHJldmlvdXMocCkpIHJl
dHVybjsKLSAgICAgIHVubGluayhwKTsKLSAgICAgIC8vTm93IGdldCB0aGUgbmV3IGZpcnN0IG5v
ZGUKLSAgICAgIHdoaWxlKG4tLSl7Ci0gICAgICAgICBmaXJzdCA9IE5vZGVUcmFpdHM6OmdldF9u
ZXh0KGZpcnN0KTsKLSAgICAgIH0KLSAgICAgIGxpbmtfYmVmb3JlKGZpcnN0LCBwKTsKLSAgIH0K
LQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBNb3ZlcyB0aGUgbm9kZSBwIG4gcG9zaXRpb25zIHRv
d2FyZHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93
czwvYj46IE5vdGhpbmcuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4aXR5PC9iPjogTGluZWFy
IHRvIHRoZSBudW1iZXIgb2YgbW92ZWQgcG9zaXRpb25zLgotICAgc3RhdGljIHZvaWQgbW92ZV9m
b3J3YXJkKGNvbnN0IG5vZGVfcHRyICZwLCBzdGQ6OnNpemVfdCBuKQotICAgewotICAgICAgLy9O
dWxsIHNoaWZ0LCBub3RoaW5nIHRvIGRvCi0gICAgICBpZighbikgICByZXR1cm47Ci0gICAgICBu
b2RlX3B0ciBsYXN0ICA9IE5vZGVUcmFpdHM6OmdldF9wcmV2aW91cyhwKTsKLSAgICAgIC8vc2l6
ZSgpID09IDAgb3IgMSwgbm90aGluZyB0byBkbwotICAgICAgaWYobGFzdCA9PSBOb2RlVHJhaXRz
OjpnZXRfbmV4dChwKSkgICByZXR1cm47Ci0KLSAgICAgIHVubGluayhwKTsKLSAgICAgIC8vTm93
IGdldCB0aGUgbmV3IGxhc3Qgbm9kZQotICAgICAgd2hpbGUobi0tKXsKLSAgICAgICAgIGxhc3Qg
PSBOb2RlVHJhaXRzOjpnZXRfcHJldmlvdXMobGFzdCk7Ci0gICAgICB9Ci0gICAgICBsaW5rX2Fm
dGVyKGxhc3QsIHApOwotICAgfQotCi0gICAvLyEgPGI+UmVxdWlyZXM8L2I+OiBmIGFuZCBsIG11
c3QgYmUgaW4gYSBjaXJjdWxhciBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0czwvYj46
IFJldHVybnMgdGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgcmFuZ2UgW2YsIGwpLgotICAgLy8h
Ci0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IExpbmVhcgotICAgLy8hCi0gICAvLyEgPGI+VGhy
b3dzPC9iPjogTm90aGluZy4KLSAgIHN0YXRpYyBzdGQ6OnNpemVfdCBkaXN0YW5jZShjb25zdCBj
b25zdF9ub2RlX3B0ciAmZiwgY29uc3QgY29uc3Rfbm9kZV9wdHIgJmwpCi0gICB7Ci0gICAgICBj
b25zdF9ub2RlX3B0ciBpKGYpOwotICAgICAgc3RkOjpzaXplX3QgcmVzdWx0ID0gMDsKLSAgICAg
IHdoaWxlKGkgIT0gbCl7Ci0gICAgICAgICBpID0gTm9kZVRyYWl0czo6Z2V0X25leHQoaSk7Ci0g
ICAgICAgICArK3Jlc3VsdDsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICB9Ci0K
LSAgIHN0cnVjdCBzdGFibGVfcGFydGl0aW9uX2luZm8KLSAgIHsKLSAgICAgIHN0ZDo6c2l6ZV90
IG51bV8xc3RfcGFydGl0aW9uOwotICAgICAgc3RkOjpzaXplX3QgbnVtXzJuZF9wYXJ0aXRpb247
Ci0gICAgICBub2RlX3B0ciAgICBiZWdfMnN0X3BhcnRpdGlvbjsKLSAgIH07Ci0KLSAgIHRlbXBs
YXRlPGNsYXNzIFByZWQ+Ci0gICBzdGF0aWMgdm9pZCBzdGFibGVfcGFydGl0aW9uKG5vZGVfcHRy
IGJlZywgY29uc3Qgbm9kZV9wdHIgJmVuZCwgUHJlZCBwcmVkLCBzdGFibGVfcGFydGl0aW9uX2lu
Zm8gJmluZm8pCi0gICB7Ci0gICAgICBub2RlX3B0ciBiY3VyID0gbm9kZV90cmFpdHM6OmdldF9w
cmV2aW91cyhiZWcpOwotICAgICAgbm9kZV9wdHIgY3VyICA9IGJlZzsKLSAgICAgIG5vZGVfcHRy
IG5ld19mID0gZW5kOwotCi0gICAgICBzdGQ6OnNpemVfdCBudW0xID0gMCwgbnVtMiA9IDA7Ci0g
ICAgICB3aGlsZShjdXIgIT0gZW5kKXsKLSAgICAgICAgIGlmKHByZWQoY3VyKSl7Ci0gICAgICAg
ICAgICArK251bTE7Ci0gICAgICAgICAgICBiY3VyID0gY3VyOwotICAgICAgICAgICAgY3VyICA9
IG5vZGVfdHJhaXRzOjpnZXRfbmV4dChjdXIpOwotICAgICAgICAgfQotICAgICAgICAgZWxzZXsK
LSAgICAgICAgICAgICsrbnVtMjsKLSAgICAgICAgICAgIG5vZGVfcHRyIGxhc3RfdG9fcmVtb3Zl
ID0gYmN1cjsKLSAgICAgICAgICAgIG5ld19mID0gY3VyOwotICAgICAgICAgICAgYmN1ciA9IGN1
cjsKLSAgICAgICAgICAgIGN1ciAgPSBub2RlX3RyYWl0czo6Z2V0X25leHQoY3VyKTsKLSAgICAg
ICAgICAgIEJPT1NUX1RSWXsKLSAgICAgICAgICAgICAgIC8vTWFpbiBsb29wCi0gICAgICAgICAg
ICAgICB3aGlsZShjdXIgIT0gZW5kKXsKLSAgICAgICAgICAgICAgICAgIGlmKHByZWQoY3VyKSl7
IC8vTWlnaHQgdGhyb3cKLSAgICAgICAgICAgICAgICAgICAgICsrbnVtMTsKLSAgICAgICAgICAg
ICAgICAgICAgIC8vUHJvY2VzcyBjdXJyZW50IG5vZGUKLSAgICAgICAgICAgICAgICAgICAgIG5v
ZGVfdHJhaXRzOjpzZXRfbmV4dCAgICAobGFzdF90b19yZW1vdmUsIGN1cik7Ci0gICAgICAgICAg
ICAgICAgICAgICBub2RlX3RyYWl0czo6c2V0X3ByZXZpb3VzKGN1ciwgbGFzdF90b19yZW1vdmUp
OwotICAgICAgICAgICAgICAgICAgICAgbGFzdF90b19yZW1vdmUgPSBjdXI7Ci0gICAgICAgICAg
ICAgICAgICAgICBub2RlX3B0ciBueHQgPSBub2RlX3RyYWl0czo6Z2V0X25leHQoY3VyKTsKLSAg
ICAgICAgICAgICAgICAgICAgIG5vZGVfdHJhaXRzOjpzZXRfbmV4dCAgICAoYmN1ciwgbnh0KTsK
LSAgICAgICAgICAgICAgICAgICAgIG5vZGVfdHJhaXRzOjpzZXRfcHJldmlvdXMobnh0LCBiY3Vy
KTsKLSAgICAgICAgICAgICAgICAgICAgIGN1ciA9IG54dDsKLSAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgIGVsc2V7Ci0gICAgICAgICAgICAgICAgICAgICArK251bTI7Ci0g
ICAgICAgICAgICAgICAgICAgICBiY3VyID0gY3VyOwotICAgICAgICAgICAgICAgICAgICAgY3Vy
ICA9IG5vZGVfdHJhaXRzOjpnZXRfbmV4dChjdXIpOwotICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgQk9PU1RfQ0FUQ0goLi4u
KXsKLSAgICAgICAgICAgICAgIG5vZGVfdHJhaXRzOjpzZXRfbmV4dCAgICAobGFzdF90b19yZW1v
dmUsIG5ld19mKTsKLSAgICAgICAgICAgICAgIG5vZGVfdHJhaXRzOjpzZXRfcHJldmlvdXMobmV3
X2YsIGxhc3RfdG9fcmVtb3ZlKTsKLSAgICAgICAgICAgICAgIEJPT1NUX1JFVEhST1c7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBCT09TVF9DQVRDSF9FTkQKLSAgICAgICAgICAgIG5vZGVf
dHJhaXRzOjpzZXRfbmV4dChsYXN0X3RvX3JlbW92ZSwgbmV3X2YpOwotICAgICAgICAgICAgbm9k
ZV90cmFpdHM6OnNldF9wcmV2aW91cyhuZXdfZiwgbGFzdF90b19yZW1vdmUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpbmZvLm51bV8xc3RfcGFydGl0
aW9uID0gbnVtMTsKLSAgICAgIGluZm8ubnVtXzJuZF9wYXJ0aXRpb24gPSBudW0yOwotICAgICAg
aW5mby5iZWdfMnN0X3BhcnRpdGlvbiA9IG5ld19mOwotICAgfQotCi0gICBwcml2YXRlOgotICAg
Qk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIHN0YXRpYyB2b2lkIHN3YXBfcHJldihjb25zdCBu
b2RlX3B0ciAmdGhpc19ub2RlLCBjb25zdCBub2RlX3B0ciAmb3RoZXJfbm9kZSkKLSAgIHsKLSAg
ICAgIG5vZGVfcHRyIHRlbXAoTm9kZVRyYWl0czo6Z2V0X3ByZXZpb3VzKHRoaXNfbm9kZSkpOwot
ICAgICAgTm9kZVRyYWl0czo6c2V0X3ByZXZpb3VzKHRoaXNfbm9kZSwgTm9kZVRyYWl0czo6Z2V0
X3ByZXZpb3VzKG90aGVyX25vZGUpKTsKLSAgICAgIE5vZGVUcmFpdHM6OnNldF9wcmV2aW91cyhv
dGhlcl9ub2RlLCB0ZW1wKTsKLSAgIH0KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5F
IHN0YXRpYyB2b2lkIHN3YXBfbmV4dChjb25zdCBub2RlX3B0ciAmdGhpc19ub2RlLCBjb25zdCBu
b2RlX3B0ciAmb3RoZXJfbm9kZSkKLSAgIHsKLSAgICAgIG5vZGVfcHRyIHRlbXAoTm9kZVRyYWl0
czo6Z2V0X25leHQodGhpc19ub2RlKSk7Ci0gICAgICBOb2RlVHJhaXRzOjpzZXRfbmV4dCh0aGlz
X25vZGUsIE5vZGVUcmFpdHM6OmdldF9uZXh0KG90aGVyX25vZGUpKTsKLSAgICAgIE5vZGVUcmFp
dHM6OnNldF9uZXh0KG90aGVyX25vZGUsIHRlbXApOwotICAgfQotfTsKLQotLy8vIEBjb25kCi0K
LXRlbXBsYXRlPGNsYXNzIE5vZGVUcmFpdHM+Ci1zdHJ1Y3QgZ2V0X2FsZ288Q2lyY3VsYXJMaXN0
QWxnb3JpdGhtcywgTm9kZVRyYWl0cz4KLXsKLSAgIHR5cGVkZWYgY2lyY3VsYXJfbGlzdF9hbGdv
cml0aG1zPE5vZGVUcmFpdHM+IHR5cGU7Ci19OwotCi0vLy8gQGVuZGNvbmQKLQotfSAvL25hbWVz
cGFjZSBpbnRydXNpdmUKLX0gLy9uYW1lc3BhY2UgYm9vc3QKLQotI2luY2x1ZGUgPGJvb3N0L2lu
dHJ1c2l2ZS9kZXRhaWwvY29uZmlnX2VuZC5ocHA+Ci0KLSNlbmRpZiAvL0JPT1NUX0lOVFJVU0lW
RV9DSVJDVUxBUl9MSVNUX0FMR09SSVRITVNfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL2FsZ29fdHlwZS5o
cHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUv
ZGV0YWlsL2FsZ29fdHlwZS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZWM2
M2Y1NzQwM2ZlZWY2MWNhZTgwYWIzN2NjYWU4NzUzMWNmZmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9hbGdvX3R5cGUuaHBwCisrKyAvZGV2L251bGwK
QEAgLTEsNTMgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAoQykgQ29weXJp
Z2h0IElvbiBHYXp0YW5hZ2EgIDIwMTQtMjAxNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAgIChTZWUgYWNjb21w
YW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICAgICAgICAgIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5i
b29zdC5vcmcvbGlicy9pbnRydXNpdmUgZm9yIGRvY3VtZW50YXRpb24uCi0vLwotLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLQotI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVfREVUQUlMX0FMR09fVFlQRV9I
UFAKLSNkZWZpbmUgQk9PU1RfSU5UUlVTSVZFX0RFVEFJTF9BTEdPX1RZUEVfSFBQCi0KLSNpZm5k
ZWYgQk9PU1RfQ09ORklHX0hQUAotIyAgaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNlbmRp
ZgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01BX09OQ0UpCi0jICBwcmFnbWEgb25jZQot
I2VuZGlmCi0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgaW50cnVzaXZlIHsKLQotZW51
bSBhbGdvX3R5cGVzCi17Ci0gICBDaXJjdWxhckxpc3RBbGdvcml0aG1zLAotICAgQ2lyY3VsYXJT
TGlzdEFsZ29yaXRobXMsCi0gICBMaW5lYXJTTGlzdEFsZ29yaXRobXMsCi0gICBDb21tb25TTGlz
dEFsZ29yaXRobXMsCi0gICBCc1RyZWVBbGdvcml0aG1zLAotICAgUmJUcmVlQWxnb3JpdGhtcywK
LSAgIEF2bFRyZWVBbGdvcml0aG1zLAotICAgU2dUcmVlQWxnb3JpdGhtcywKLSAgIFNwbGF5VHJl
ZUFsZ29yaXRobXMsCi0gICBUcmVhcEFsZ29yaXRobXMsCi0gICBVbm9yZGVyZWRBbGdvcml0aG1z
LAotICAgVW5vcmRlcmVkQ2lyY3VsYXJTbGlzdEFsZ29yaXRobXMsCi0gICBBbnlBbGdvcml0aG0K
LX07Ci0KLXRlbXBsYXRlPGFsZ29fdHlwZXMgQWxnb1R5cGUsIGNsYXNzIE5vZGVUcmFpdHM+Ci1z
dHJ1Y3QgZ2V0X2FsZ287Ci0KLXRlbXBsYXRlPGFsZ29fdHlwZXMgQWxnb1R5cGUsIGNsYXNzIFZh
bHVlVHJhaXRzLCBjbGFzcyBOb2RlUHRyQ29tcGFyZSwgY2xhc3MgRXh0cmFDaGVja2VyPgotc3Ry
dWN0IGdldF9ub2RlX2NoZWNrZXI7Ci0KLX0gLy9uYW1lc3BhY2UgaW50cnVzaXZlCi19IC8vbmFt
ZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvL0JPT1NUX0lOVFJVU0lWRV9ERVRBSUxfQUxHT19UWVBF
X0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvaW50cnVzaXZlL2RldGFpbC9hbGdvcml0aG0uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9hbGdvcml0aG0uaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjQyMWZmYWFkNmU4NGFiNmNjZmMwY2YyZGNmNjQ2
YTQyNDU2YmQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRh
aWwvYWxnb3JpdGhtLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotLy8KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAyMDE0LTIw
MTQuCi0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLgotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8K
LS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3IgZG9jdW1lbnRh
dGlvbi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotI2lmbmRlZiBCT09TVF9JTlRSVVNJ
VkVfREVUQUlMX0FMR09SSVRITV9IUFAKLSNkZWZpbmUgQk9PU1RfSU5UUlVTSVZFX0RFVEFJTF9B
TEdPUklUSE1fSFBQCi0KLSNpZm5kZWYgQk9PU1RfQ09ORklHX0hQUAotIyAgaW5jbHVkZSA8Ym9v
c3QvY29uZmlnLmhwcD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01BX09O
Q0UpCi0jICBwcmFnbWEgb25jZQotI2VuZGlmCi0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3Bh
Y2UgaW50cnVzaXZlIHsKLQotc3RydWN0IGFsZ29fcHJlZF9lcXVhbAotewotICAgdGVtcGxhdGU8
Y2xhc3MgVD4KLSAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBUICZ4LCBjb25zdCBUICZ5KSBjb25z
dAotICAgeyAgcmV0dXJuIHggPT0geTsgIH0KLX07Ci0KLXN0cnVjdCBhbGdvX3ByZWRfbGVzcwot
ewotICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBUICZ4LCBj
b25zdCBUICZ5KSBjb25zdAotICAgeyAgcmV0dXJuIHggPCB5OyAgfQotfTsKLQotdGVtcGxhdGU8
Y2xhc3MgSW5wdXRJdDEsIGNsYXNzIElucHV0SXQyLCBjbGFzcyBCaW5hcnlQcmVkaWNhdGU+Ci1i
b29sIGFsZ29fZXF1YWwoSW5wdXRJdDEgZmlyc3QxLCBJbnB1dEl0MSBsYXN0MSwgSW5wdXRJdDIg
Zmlyc3QyLCBCaW5hcnlQcmVkaWNhdGUgcCkKLXsKLSAgICBmb3IgKDsgZmlyc3QxICE9IGxhc3Qx
OyArK2ZpcnN0MSwgKytmaXJzdDIpIHsKLSAgICAgICAgaWYgKCFwKCpmaXJzdDEsICpmaXJzdDIp
KSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIElucHV0SXQxLCBjbGFzcyBJbnB1dEl0Mj4K
LWJvb2wgYWxnb19lcXVhbChJbnB1dEl0MSBmaXJzdDEsIElucHV0SXQxIGxhc3QxLCBJbnB1dEl0
MiBmaXJzdDIpCi17ICByZXR1cm4gKGFsZ29fZXF1YWwpKGZpcnN0MSwgbGFzdDEsIGZpcnN0Miwg
YWxnb19wcmVkX2VxdWFsKCkpOyAgfQotCi10ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0MSwgY2xhc3Mg
SW5wdXRJdDIsIGNsYXNzIEJpbmFyeVByZWRpY2F0ZT4KLWJvb2wgYWxnb19lcXVhbChJbnB1dEl0
MSBmaXJzdDEsIElucHV0SXQxIGxhc3QxLCBJbnB1dEl0MiBmaXJzdDIsIElucHV0SXQyIGxhc3Qy
LCBCaW5hcnlQcmVkaWNhdGUgcHJlZCkKLXsKLSAgICBmb3IgKDsgZmlyc3QxICE9IGxhc3QxICYm
IGZpcnN0MiAhPSBsYXN0MjsgKytmaXJzdDEsICsrZmlyc3QyKQotICAgICAgICBpZiAoIXByZWQo
KmZpcnN0MSwgKmZpcnN0MikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IGZpcnN0MSA9PSBsYXN0MSAmJiBmaXJzdDIgPT0gbGFzdDI7Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IElucHV0SXQxLCBjbGFzcyBJbnB1dEl0Mj4KLWJvb2wgYWxnb19lcXVhbChJbnB1dEl0MSBmaXJz
dDEsIElucHV0SXQxIGxhc3QxLCBJbnB1dEl0MiBmaXJzdDIsIElucHV0SXQyIGxhc3QyKQoteyAg
cmV0dXJuIChhbGdvX2VxdWFsKShmaXJzdDEsIGxhc3QxLCBmaXJzdDIsIGxhc3QyLCBhbGdvX3By
ZWRfZXF1YWwoKSk7ICB9Ci0KLXRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yMSwgY2xhc3Mg
SW5wdXRJdGVyYXRvcjIsIGNsYXNzIEJpbmFyeVByZWRpY2F0ZT4KLSAgYm9vbCBhbGdvX2xleGlj
b2dyYXBoaWNhbF9jb21wYXJlIChJbnB1dEl0ZXJhdG9yMSBmaXJzdDEsIElucHV0SXRlcmF0b3Ix
IGxhc3QxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0SXRlcmF0
b3IyIGZpcnN0MiwgSW5wdXRJdGVyYXRvcjIgbGFzdDIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmluYXJ5UHJlZGljYXRlIHByZWQpCi17Ci0gICB3aGlsZSAoZmlyc3Qx
ICE9IGxhc3QxKXsKLSAgICAgIGlmIChmaXJzdDIgPT0gbGFzdDIgfHwgKmZpcnN0MiA8ICpmaXJz
dDEpIHJldHVybiBmYWxzZTsKLSAgICAgIGVsc2UgaWYgKHByZWQoKmZpcnN0MSwgKmZpcnN0Mikp
IHJldHVybiB0cnVlOwotICAgICAgKytmaXJzdDE7ICsrZmlyc3QyOwotICAgfQotICAgcmV0dXJu
IChmaXJzdDIgIT0gbGFzdDIpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcjEs
IGNsYXNzIElucHV0SXRlcmF0b3IyPgotICBib29sIGFsZ29fbGV4aWNvZ3JhcGhpY2FsX2NvbXBh
cmUgKElucHV0SXRlcmF0b3IxIGZpcnN0MSwgSW5wdXRJdGVyYXRvcjEgbGFzdDEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvcjIgZmlyc3QyLCBJbnB1
dEl0ZXJhdG9yMiBsYXN0MikKLXsgIHJldHVybiAoYWxnb19sZXhpY29ncmFwaGljYWxfY29tcGFy
ZSkoZmlyc3QxLCBsYXN0MSwgZmlyc3QyLCBsYXN0MiwgYWxnb19wcmVkX2xlc3MoKSk7ICB9Ci0K
LX0gIC8vbmFtZXNwYWNlIGludHJ1c2l2ZSB7Ci19ICAvL25hbWVzcGFjZSBib29zdCB7Ci0KLSNl
bmRpZiAgIC8vI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVfREVUQUlMX0FMR09SSVRITV9IUFAKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1
c2l2ZS9kZXRhaWwvYXJyYXlfaW5pdGlhbGl6ZXIuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9hcnJheV9pbml0aWFsaXplci5o
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNmEyNTNhZmI4MTk5ZWQ4NjcwZTQ2
MzY5NzQyYzdlMjY2NGY1MmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVz
aXZlL2RldGFpbC9hcnJheV9pbml0aWFsaXplci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NSAr
MCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdh
enRhbmFnYSAgMjAxNC0yMDE0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNv
ZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gICAgKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gICAgICAgICAgaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL2ludHJ1c2l2ZSBmb3IgZG9jdW1lbnRhdGlvbi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxfQVJSQVlfSU5JVElBTElaRVJfSFBQ
Ci0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxfQVJSQVlfSU5JVElBTElaRVJfSFBQCi0K
LSNpZm5kZWYgQk9PU1RfQ09ORklHX0hQUAotIyAgaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4K
LSNlbmRpZgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01BX09OQ0UpCi0jICBwcmFnbWEg
b25jZQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L2NvcmUvbm9fZXhjZXB0aW9uc19zdXBwb3J0LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsK
LW5hbWVzcGFjZSBpbnRydXNpdmUgewotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLS8vVGhpcyBpcyBu
b3Qgc3RhbmRhcmQsIGJ1dCBzaG91bGQgd29yayB3aXRoIGFsbCBjb21waWxlcnMKLXVuaW9uIG1h
eF9hbGlnbgotewotICAgY2hhciAgICAgICAgY2hhcl87Ci0gICBzaG9ydCAgICAgICBzaG9ydF87
Ci0gICBpbnQgICAgICAgICBpbnRfOwotICAgbG9uZyAgICAgICAgbG9uZ187Ci0gICAjaWZkZWYg
Qk9PU1RfSEFTX0xPTkdfTE9ORwotICAgOjpib29zdDo6bG9uZ19sb25nX3R5cGUgIGxvbmdfbG9u
Z187Ci0gICAjZW5kaWYKLSAgIGZsb2F0ICAgICAgIGZsb2F0XzsKLSAgIGRvdWJsZSAgICAgIGRv
dWJsZV87Ci0gICBsb25nIGRvdWJsZSBsb25nX2RvdWJsZV87Ci0gICB2b2lkICogICAgICB2b2lk
X3B0cl87Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPgotY2xhc3MgYXJy
YXlfaW5pdGlhbGl6ZXIKLXsKLSAgIHB1YmxpYzoKLSAgIHRlbXBsYXRlPGNsYXNzIENvbW1vbklu
aXRpYWxpemVyPgotICAgYXJyYXlfaW5pdGlhbGl6ZXIoY29uc3QgQ29tbW9uSW5pdGlhbGl6ZXIg
JmluaXQpCi0gICB7Ci0gICAgICBjaGFyICppbml0X2J1ZiA9IChjaGFyKilyYXdidWY7Ci0gICAg
ICBzdGQ6OnNpemVfdCBpID0gMDsKLSAgICAgIEJPT1NUX1RSWXsKLSAgICAgICAgIGZvcig7IGkg
IT0gTjsgKytpKXsKLSAgICAgICAgICAgIG5ldyhpbml0X2J1ZilUKGluaXQpOwotICAgICAgICAg
ICAgaW5pdF9idWYgKz0gc2l6ZW9mKFQpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgQk9P
U1RfQ0FUQ0goLi4uKXsKLSAgICAgICAgIHdoaWxlKGktLSl7Ci0gICAgICAgICAgICBpbml0X2J1
ZiAtPSBzaXplb2YoVCk7Ci0gICAgICAgICAgICAoKFQqKWluaXRfYnVmKS0+flQoKTsKLSAgICAg
ICAgIH0KLSAgICAgICAgIEJPT1NUX1JFVEhST1c7Ci0gICAgICB9Ci0gICAgICBCT09TVF9DQVRD
SF9FTkQKLSAgIH0KLQotICAgb3BlcmF0b3IgVCogKCkKLSAgIHsgIHJldHVybiAoVCopKHJhd2J1
Zik7ICB9Ci0KLSAgIG9wZXJhdG9yIGNvbnN0IFQqKCkgY29uc3QKLSAgIHsgIHJldHVybiAoY29u
c3QgVCopKHJhd2J1Zik7ICB9Ci0KLSAgIH5hcnJheV9pbml0aWFsaXplcigpCi0gICB7Ci0gICAg
ICBjaGFyICppbml0X2J1ZiA9IChjaGFyKilyYXdidWYgKyBOKnNpemVvZihUKTsKLSAgICAgIGZv
cihzdGQ6OnNpemVfdCBpID0gMDsgaSAhPSBOOyArK2kpewotICAgICAgICAgaW5pdF9idWYgLT0g
c2l6ZW9mKFQpOwotICAgICAgICAgKChUKilpbml0X2J1ZiktPn5UKCk7Ci0gICAgICB9Ci0gICB9
Ci0KLSAgIHByaXZhdGU6Ci0gICBkZXRhaWw6Om1heF9hbGlnbiByYXdidWZbKE4qc2l6ZW9mKFQp
LTEpL3NpemVvZihkZXRhaWw6Om1heF9hbGlnbikrMV07Ci19OwotCi19ICAvL25hbWVzcGFjZSBk
ZXRhaWx7Ci19ICAvL25hbWVzcGFjZSBpbnRydXNpdmV7Ci19ICAvL25hbWVzcGFjZSBib29zdHsK
LQotI2VuZGlmIC8vQk9PU1RfSU5UUlVTSVZFX0RFVEFJTF9BUlJBWV9JTklUSUFMSVpFUl9IUFAK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2lu
dHJ1c2l2ZS9kZXRhaWwvYXNzZXJ0LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvYXNzZXJ0LmhwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNzE5OWViMjQwYzk2MGRhYjdhMjMwNzM2MGY2ZjY4NDJhMTBlMTk2Yi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL2Fzc2VydC5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ly8KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAgMjAwNi0yMDEzCi0vLwotLy8gRGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgot
Ly8gICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAot
Ly8gICAgICAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8v
IFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3IgZG9jdW1lbnRhdGlv
bi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9E
RVRBSUxfQVNTRVJUX0hQUAotI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfREVUQUlMX0FTU0VSVF9I
UFAKLQotI2lmbmRlZiBCT09TVF9DT05GSUdfSFBQCi0jICBpbmNsdWRlIDxib29zdC9jb25maWcu
aHBwPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19QUkFHTUFfT05DRSkKLSNwcmFn
bWEgb25jZQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChCT09TVF9JTlRSVVNJVkVfSU5WQVJJQU5U
X0FTU0VSVCkKLSAgICNpbmNsdWRlIDxib29zdC9hc3NlcnQuaHBwPgotICAgI2RlZmluZSBCT09T
VF9JTlRSVVNJVkVfSU5WQVJJQU5UX0FTU0VSVCBCT09TVF9BU1NFUlQKLSNlbGlmIGRlZmluZWQo
Qk9PU1RfSU5UUlVTSVZFX0lOVkFSSUFOVF9BU1NFUlRfSU5DTFVERSkKLSAgICNpbmNsdWRlIEJP
T1NUX0lOVFJVU0lWRV9JTlZBUklBTlRfQVNTRVJUX0lOQ0xVREUKLSNlbmRpZgotCi0jaWYgIWRl
ZmluZWQoQk9PU1RfSU5UUlVTSVZFX1NBRkVfSE9PS19ERUZBVUxUX0FTU0VSVCkKLSAgICNpbmNs
dWRlIDxib29zdC9hc3NlcnQuaHBwPgotICAgI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfU0FGRV9I
T09LX0RFRkFVTFRfQVNTRVJUIEJPT1NUX0FTU0VSVAotI2VsaWYgZGVmaW5lZChCT09TVF9JTlRS
VVNJVkVfU0FGRV9IT09LX0RFRkFVTFRfQVNTRVJUX0lOQ0xVREUpCi0gICAjaW5jbHVkZSBCT09T
VF9JTlRSVVNJVkVfU0FGRV9IT09LX0RFRkFVTFRfQVNTRVJUX0lOQ0xVREUKLSNlbmRpZgotCi0j
aWYgIWRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX1NBRkVfSE9PS19ERVNUUlVDVE9SX0FTU0VSVCkK
LSAgICNpbmNsdWRlIDxib29zdC9hc3NlcnQuaHBwPgotICAgI2RlZmluZSBCT09TVF9JTlRSVVNJ
VkVfU0FGRV9IT09LX0RFU1RSVUNUT1JfQVNTRVJUIEJPT1NUX0FTU0VSVAotI2VsaWYgZGVmaW5l
ZChCT09TVF9JTlRSVVNJVkVfU0FGRV9IT09LX0RFU1RSVUNUT1JfQVNTRVJUX0lOQ0xVREUpCi0g
ICAjaW5jbHVkZSBCT09TVF9JTlRSVVNJVkVfU0FGRV9IT09LX0RFU1RSVUNUT1JfQVNTRVJUX0lO
Q0xVREUKLSNlbmRpZgotCi0jZW5kaWYgLy9CT09TVF9JTlRSVVNJVkVfREVUQUlMX0FTU0VSVF9I
UFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L2ludHJ1c2l2ZS9kZXRhaWwvY29uZmlnX2JlZ2luLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvY29uZmlnX2JlZ2luLmhwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmODYxNjgxMmNhMGUxNWEyNThjOGQyMWIx
NmZlZmU2NWY5ZjI1ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUv
ZGV0YWlsL2NvbmZpZ19iZWdpbi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAg
MjAwNi0yMDEzCi0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNF
XzFfMC50eHQgb3IgY29weSBhdAotLy8gICAgICAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1
c2l2ZSBmb3IgZG9jdW1lbnRhdGlvbi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jaWZu
ZGVmIEJPT1NUX0NPTkZJR19IUFAKLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2VuZGlm
Ci0KLSNpZmRlZiBCT09TVF9NU1ZDCi0KLSAgICNwcmFnbWEgd2FybmluZyAocHVzaCkKLSAgIC8v
Ci0gICAvLydmdW5jdGlvbicgOiByZXNvbHZlZCBvdmVybG9hZCB3YXMgZm91bmQgYnkgYXJndW1l
bnQtZGVwZW5kZW50IGxvb2t1cAotICAgLy9BIGZ1bmN0aW9uIGZvdW5kIGJ5IGFyZ3VtZW50LWRl
cGVuZGVudCBsb29rdXAgKEtvZW5pZyBsb29rdXApIHdhcyBldmVudHVhbGx5Ci0gICAvL2Nob3Nl
biBieSBvdmVybG9hZCByZXNvbHV0aW9uLgotICAgLy8KLSAgIC8vSW4gVmlzdWFsIEMrKyAuTkVU
IGFuZCBlYXJsaWVyIGNvbXBpbGVycywgYSBkaWZmZXJlbnQgZnVuY3Rpb24gd291bGQgaGF2ZQot
ICAgLy9iZWVuIGNhbGxlZC4gVG8gcGljayB0aGUgb3JpZ2luYWwgZnVuY3Rpb24sIHVzZSBhbiBl
eHBsaWNpdGx5IHF1YWxpZmllZCBuYW1lLgotICAgLy8KLQotICAgLy93YXJuaW5nIEM0Mjc1OiBu
b24gZGxsLWludGVyZmFjZSBjbGFzcyAneCcgdXNlZCBhcyBiYXNlIGZvcgotICAgLy9kbGwtaW50
ZXJmYWNlIGNsYXNzICdZJwotICAgI3ByYWdtYSB3YXJuaW5nIChkaXNhYmxlIDogNDI3NSkKLSAg
IC8vd2FybmluZyBDNDI1MTogJ3gnIDogY2xhc3MgJ3knIG5lZWRzIHRvIGhhdmUgZGxsLWludGVy
ZmFjZSB0bwotICAgLy9iZSB1c2VkIGJ5IGNsaWVudHMgb2YgY2xhc3MgJ3onCi0gICAjcHJhZ21h
IHdhcm5pbmcgKGRpc2FibGUgOiA0MjUxKQotICAgI3ByYWdtYSB3YXJuaW5nIChkaXNhYmxlIDog
NDY3NSkKLSAgICNwcmFnbWEgd2FybmluZyAoZGlzYWJsZSA6IDQ5OTYpCi0gICAjcHJhZ21hIHdh
cm5pbmcgKGRpc2FibGUgOiA0NTAzKQotICAgI3ByYWdtYSB3YXJuaW5nIChkaXNhYmxlIDogNDI4
NCkgLy8gb2RkIHJldHVybiB0eXBlIGZvciBvcGVyYXRvci0+Ci0gICAjcHJhZ21hIHdhcm5pbmcg
KGRpc2FibGUgOiA0MjQ0KSAvLyBwb3NzaWJsZSBsb3NzIG9mIGRhdGEKLSAgICNwcmFnbWEgd2Fy
bmluZyAoZGlzYWJsZSA6IDQ1MjEpIC8vLy9EaXNhYmxlICJtdWx0aXBsZSBjb3B5IGNvbnN0cnVj
dG9ycyBzcGVjaWZpZWQiCi0gICAjcHJhZ21hIHdhcm5pbmcgKGRpc2FibGUgOiA0MTI3KSAvL2Nv
bmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQKLSAgICNwcmFnbWEgd2FybmluZyAoZGlz
YWJsZSA6IDQxNDYpCi0gICAjcHJhZ21hIHdhcm5pbmcgKGRpc2FibGUgOiA0MjY3KSAvL2NvbnZl
cnNpb24gZnJvbSAnWCcgdG8gJ1knLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGEKLSAgICNwcmFnbWEg
d2FybmluZyAoZGlzYWJsZSA6IDQ1NDEpIC8vJ3R5cGVpZCcgdXNlZCBvbiBwb2x5bW9ycGhpYyB0
eXBlICdib29zdDo6ZXhjZXB0aW9uJyB3aXRoIC9HUi0KLSAgICNwcmFnbWEgd2FybmluZyAoZGlz
YWJsZSA6IDQ1MTIpIC8vJ3R5cGVpZCcgdXNlZCBvbiBwb2x5bW9ycGhpYyB0eXBlICdib29zdDo6
ZXhjZXB0aW9uJyB3aXRoIC9HUi0KLSAgICNwcmFnbWEgd2FybmluZyAoZGlzYWJsZSA6IDQ1MjIp
Ci0gICAjcHJhZ21hIHdhcm5pbmcgKGRpc2FibGUgOiA0NzA2KSAvL2Fzc2lnbm1lbnQgd2l0aGlu
IGNvbmRpdGlvbmFsIGV4cHJlc3Npb24KLSAgICNwcmFnbWEgd2FybmluZyAoZGlzYWJsZSA6IDQ3
MTApIC8vIGZ1bmN0aW9uIG5vdCBpbmxpbmVkCi0gICAjcHJhZ21hIHdhcm5pbmcgKGRpc2FibGUg
OiA0NzE0KSAvLyAiZnVuY3Rpb24iOiBtYXJrZWQgYXMgX19mb3JjZWlubGluZSBub3QgaW5saW5l
ZAotICAgI3ByYWdtYSB3YXJuaW5nIChkaXNhYmxlIDogNDcxMSkgLy8gZnVuY3Rpb24gc2VsZWN0
ZWQgZm9yIGF1dG9tYXRpYyBpbmxpbmUgZXhwYW5zaW9uCi0gICAjcHJhZ21hIHdhcm5pbmcgKGRp
c2FibGUgOiA0Nzg2KSAvLyBpZGVudGlmaWVyIHRydW5jYXRlZCBpbiBkZWJ1ZyBpbmZvCi0gICAj
cHJhZ21hIHdhcm5pbmcgKGRpc2FibGUgOiA0OTk2KSAvLyAiZnVuY3Rpb24iOiB3YXMgZGVjbGFy
ZWQgZGVwcmVjYXRlZAotI2VuZGlmCi0KLS8vI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfVVNFX0lU
RVJBVE9SX0ZBQ0FERQotLy8jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9VU0VfSVRFUkFUT1JfRU5B
QkxFX0lGX0NPTlZFUlRJQkxFCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL2NvbmZpZ19lbmQuaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9jb25m
aWdfZW5kLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA4MTQ0M2U2OWU4NTYz
MzJhMTgxNDkwZjI2MzkwNTE5MjIzZDNkMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9pbnRydXNpdmUvZGV0YWlsL2NvbmZpZ19lbmQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTUg
KzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAoQykgQ29weXJpZ2h0IElvbiBH
YXp0YW5hZ2EgIDIwMDYtMjAxMwotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAgIChTZWUgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICAgICAgICAgIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy9pbnRydXNpdmUgZm9yIGRvY3VtZW50YXRpb24uCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KLQotI2lmIGRlZmluZWQgQk9PU1RfTVNWQwotICAgI3ByYWdtYSB3YXJuaW5nIChwb3ApCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L2ludHJ1c2l2ZS9kZXRhaWwvZGVmYXVsdF9oZWFkZXJfaG9sZGVyLmhwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvZGVmYXVs
dF9oZWFkZXJfaG9sZGVyLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg4Zjhh
MGU0MWZkMmYzZjAyZjEzZGJhNDkwMjQxMWNhNDhjNDhmNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL2RlZmF1bHRfaGVhZGVyX2hvbGRlci5ocHAKKysr
IC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8v
IChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAgMjAxNC0yMDE0Ci0vLwotLy8gRGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gICAg
KFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gICAg
ICAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3IgZG9jdW1lbnRhdGlvbi4KLS8v
Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxf
REVGQVVMVF9IRUFERVJfSE9MREVSX0hQUAotI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfREVUQUlM
X0RFRkFVTFRfSEVBREVSX0hPTERFUl9IUFAKLQotI2lmbmRlZiBCT09TVF9DT05GSUdfSFBQCi0j
ICBpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJPT1NU
X0hBU19QUkFHTUFfT05DRSkKLSMgIHByYWdtYSBvbmNlCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJv
b3N0L2ludHJ1c2l2ZS9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50
cnVzaXZlL3BvaW50ZXJfdHJhaXRzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0
YWlsL3RvX3Jhd19wb2ludGVyLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSBp
bnRydXNpdmUgewotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLS8vIHRyaXZpYWwgaGVhZGVyIG5vZGUg
aG9sZGVyCi10ZW1wbGF0ZSA8IHR5cGVuYW1lIE5vZGVUcmFpdHMgPgotc3RydWN0IGRlZmF1bHRf
aGVhZGVyX2hvbGRlciA6IHB1YmxpYyBOb2RlVHJhaXRzOjpub2RlCi17Ci0gICB0eXBlZGVmIE5v
ZGVUcmFpdHMgbm9kZV90cmFpdHM7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIG5vZGVfdHJhaXRzOjpu
b2RlIG5vZGU7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIG5vZGVfdHJhaXRzOjpub2RlX3B0ciBub2Rl
X3B0cjsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgbm9kZV90cmFpdHM6OmNvbnN0X25vZGVfcHRyIGNv
bnN0X25vZGVfcHRyOwotCi0gICBkZWZhdWx0X2hlYWRlcl9ob2xkZXIoKSA6IG5vZGUoKSB7fQot
Ci0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgY29uc3Rfbm9kZV9wdHIgZ2V0X25vZGUo
KSBjb25zdAotICAgeyByZXR1cm4gcG9pbnRlcl90cmFpdHM8IGNvbnN0X25vZGVfcHRyID46OnBv
aW50ZXJfdG8oKnN0YXRpY19jYXN0PCBjb25zdCBub2RlKiA+KHRoaXMpKTsgfQotCi0gICBCT09T
VF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgbm9kZV9wdHIgZ2V0X25vZGUoKQotICAgeyByZXR1cm4g
cG9pbnRlcl90cmFpdHM8IG5vZGVfcHRyID46OnBvaW50ZXJfdG8oKnN0YXRpY19jYXN0PCBub2Rl
KiA+KHRoaXMpKTsgfQotCi0gICAvLyAodW5zYWZlKSBkb3duY2FzdCB1c2VkIHRvIGltcGxlbWVu
dCBjb250YWluZXItZnJvbS1pdGVyYXRvcgotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5F
IHN0YXRpYyBkZWZhdWx0X2hlYWRlcl9ob2xkZXIqIGdldF9ob2xkZXIoY29uc3Qgbm9kZV9wdHIg
JnApCi0gICB7IHJldHVybiBzdGF0aWNfY2FzdDwgZGVmYXVsdF9oZWFkZXJfaG9sZGVyKiA+KGJv
b3N0OjppbnRydXNpdmU6OmRldGFpbDo6dG9fcmF3X3BvaW50ZXIocCkpOyB9Ci19OwotCi0vLyB0
eXBlIGZ1bmN0aW9uIHByb2R1Y2luZyB0aGUgaGVhZGVyIG5vZGUgaG9sZGVyCi10ZW1wbGF0ZSA8
IHR5cGVuYW1lIFZhbHVlVHJhaXRzLCB0eXBlbmFtZSBIZWFkZXJIb2xkZXIgPgotc3RydWN0IGdl
dF9oZWFkZXJfaG9sZGVyX3R5cGUKLXsKLSAgIHR5cGVkZWYgSGVhZGVySG9sZGVyIHR5cGU7Ci19
OwotdGVtcGxhdGUgPCB0eXBlbmFtZSBWYWx1ZVRyYWl0cyA+Ci1zdHJ1Y3QgZ2V0X2hlYWRlcl9o
b2xkZXJfdHlwZTwgVmFsdWVUcmFpdHMsIHZvaWQgPgotewotICAgdHlwZWRlZiBkZWZhdWx0X2hl
YWRlcl9ob2xkZXI8IHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpub2RlX3RyYWl0cyA+IHR5cGU7Ci19
OwotCi19IC8vbmFtZXNwYWNlIGRldGFpbAotfSAvL25hbWVzcGFjZSBpbnRydXNpdmUKLX0gLy9u
YW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vQk9PU1RfSU5UUlVTSVZFX0RFVEFJTF9ERUZBVUxU
X0hFQURFUl9IT0xERVJfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL2Vib19mdW5jdG9yX2hvbGRlci5ocHAg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvZGV0
YWlsL2Vib19mdW5jdG9yX2hvbGRlci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDMxYjJmODEzOTgxMmYzM2ZkYzkxMTRhMzVjYmU3YWZlYTNjYjA3NWEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9lYm9fZnVuY3Rvcl9ob2xkZXIuaHBw
CisrKyAvZGV2L251bGwKQEAgLTEsMjkyICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
LwotLy8gKEMpIENvcHlyaWdodCBKb2FxdWluIE0gTG9wZXogTXVub3ogIDIwMDYtMjAxMwotLy8g
KEMpIENvcHlyaWdodCBJb24gR2F6dGFuYWdhICAgICAgICAgIDIwMTQtMjAxNAotLy8KLS8vIERp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4K
LS8vICAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQK
LS8vICAgICAgICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0v
LyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9pbnRydXNpdmUgZm9yIGRvY3VtZW50YXRp
b24uCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVf
REVUQUlMX0VCT19IT0xERVJfSFBQCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxfRUJP
X0hPTERFUl9IUFAKLQotI2lmbmRlZiBCT09TVF9DT05GSUdfSFBQCi0jICBpbmNsdWRlIDxib29z
dC9jb25maWcuaHBwPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19QUkFHTUFfT05D
RSkKLSMgIHByYWdtYSBvbmNlCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9k
ZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbW92ZS91dGlsaXR5X2NvcmUu
aHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIGludHJ1c2l2ZSB7Ci1uYW1lc3Bh
Y2UgZGV0YWlsIHsKLQotI2lmIGRlZmluZWQoQk9PU1RfTVNWQykgfHwgZGVmaW5lZChfX0JPUkxB
TkRDXykKLSNkZWZpbmUgQk9PU1RfSU5UUlVTSVZFX1RUX0RFQ0wgX19jZGVjbAotI2Vsc2UKLSNk
ZWZpbmUgQk9PU1RfSU5UUlVTSVZFX1RUX0RFQ0wKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfTVND
X0VYVEVOU0lPTlMpICYmICFkZWZpbmVkKF9fQk9STEFORF9fKSAmJiAhZGVmaW5lZChfV0lONjQp
ICYmICFkZWZpbmVkKF9NX0FSTSkgJiYgIWRlZmluZWQoVU5ERVJfQ0UpCi0jZGVmaW5lIEJPT1NU
X0lOVFJVU0lWRV9UVF9URVNUX01TQ19GVU5DX1NJR1MKLSNlbmRpZgotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLXN0cnVjdCBpc191bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb25faW1wbAoteyAgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsgfTsKLQotLy8gc2VlIGJvb3N0IHRpY2tldCAj
NDA5NAotLy8gYXZvaWQgZHVwbGljYXRlIGRlZmluaXRpb25zIG9mIGlzX3VuYXJ5X29yX2JpbmFy
eV9mdW5jdGlvbl9pbXBsCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9UVF9URVNUX01TQ19GVU5D
X1NJR1MKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFI+Ci1zdHJ1Y3QgaXNfdW5hcnlfb3JfYmluYXJ5
X2Z1bmN0aW9uX2ltcGw8UiAoKikoKT4KLXsgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1
ZTsgIH07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSPgotc3RydWN0IGlzX3VuYXJ5X29yX2JpbmFy
eV9mdW5jdGlvbl9pbXBsPFIgKCopKC4uLik+Ci17ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9
IHRydWU7ICB9OwotCi0jZWxzZSAvLyBCT09TVF9JTlRSVVNJVkVfVFRfVEVTVF9NU0NfRlVOQ19T
SUdTCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSPgotc3RydWN0IGlzX3VuYXJ5X29yX2JpbmFyeV9m
dW5jdGlvbl9pbXBsPFIgKF9fc3RkY2FsbCopKCk+Ci17ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1
ZSA9IHRydWU7ICB9OwotCi0jaWZuZGVmIF9NQU5BR0VECi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBS
Pgotc3RydWN0IGlzX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbl9pbXBsPFIgKF9fZmFzdGNhbGwq
KSgpPgoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyAgfTsKLQotI2VuZGlmCi0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBSPgotc3RydWN0IGlzX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlv
bl9pbXBsPFIgKF9fY2RlY2wqKSgpPgoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl
OyAgfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFI+Ci1zdHJ1Y3QgaXNfdW5hcnlfb3JfYmluYXJ5
X2Z1bmN0aW9uX2ltcGw8UiAoX19jZGVjbCopKC4uLik+Ci17ICBzdGF0aWMgY29uc3QgYm9vbCB2
YWx1ZSA9IHRydWU7ICB9OwotCi0jZW5kaWYKLQotLy8gc2VlIGJvb3N0IHRpY2tldCAjNDA5NAot
Ly8gYXZvaWQgZHVwbGljYXRlIGRlZmluaXRpb25zIG9mIGlzX3VuYXJ5X29yX2JpbmFyeV9mdW5j
dGlvbl9pbXBsCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9UVF9URVNUX01TQ19GVU5DX1NJR1MK
LQotdGVtcGxhdGUgPHR5cGVuYW1lIFIsIGNsYXNzIFQwPgotc3RydWN0IGlzX3VuYXJ5X29yX2Jp
bmFyeV9mdW5jdGlvbl9pbXBsPFIgKCopKFQwKT4KLXsgIHN0YXRpYyBjb25zdCBib29sIHZhbHVl
ID0gdHJ1ZTsgIH07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSLCBjbGFzcyBUMD4KLXN0cnVjdCBp
c191bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb25faW1wbDxSICgqKShUMC4uLik+Ci17ICBzdGF0aWMg
Y29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7ICB9OwotCi0jZWxzZSAvLyBCT09TVF9JTlRSVVNJVkVf
VFRfVEVTVF9NU0NfRlVOQ19TSUdTCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSLCBjbGFzcyBUMD4K
LXN0cnVjdCBpc191bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb25faW1wbDxSIChfX3N0ZGNhbGwqKShU
MCk+Ci17ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7ICB9OwotCi0jaWZuZGVmIF9N
QU5BR0VECi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSLCBjbGFzcyBUMD4KLXN0cnVjdCBpc191bmFy
eV9vcl9iaW5hcnlfZnVuY3Rpb25faW1wbDxSIChfX2Zhc3RjYWxsKikoVDApPgoteyAgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyAgfTsKLQotI2VuZGlmCi0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBSLCBjbGFzcyBUMD4KLXN0cnVjdCBpc191bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb25faW1w
bDxSIChfX2NkZWNsKikoVDApPgoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyAg
fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFIsIGNsYXNzIFQwPgotc3RydWN0IGlzX3VuYXJ5X29y
X2JpbmFyeV9mdW5jdGlvbl9pbXBsPFIgKF9fY2RlY2wqKShUMC4uLik+Ci17ICBzdGF0aWMgY29u
c3QgYm9vbCB2YWx1ZSA9IHRydWU7ICB9OwotCi0jZW5kaWYKLQotLy8gc2VlIGJvb3N0IHRpY2tl
dCAjNDA5NAotLy8gYXZvaWQgZHVwbGljYXRlIGRlZmluaXRpb25zIG9mIGlzX3VuYXJ5X29yX2Jp
bmFyeV9mdW5jdGlvbl9pbXBsCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9UVF9URVNUX01TQ19G
VU5DX1NJR1MKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFIsIGNsYXNzIFQwLCBjbGFzcyBUMT4KLXN0
cnVjdCBpc191bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb25faW1wbDxSICgqKShUMCwgVDEpPgoteyAg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyAgfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFIsIGNsYXNzIFQwLCBjbGFzcyBUMT4KLXN0cnVjdCBpc191bmFyeV9vcl9iaW5hcnlfZnVuY3Rp
b25faW1wbDxSICgqKShUMCwgVDEuLi4pPgoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0
cnVlOyAgfTsKLQotI2Vsc2UgLy8gQk9PU1RfSU5UUlVTSVZFX1RUX1RFU1RfTVNDX0ZVTkNfU0lH
UwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUiwgY2xhc3MgVDAsIGNsYXNzIFQxPgotc3RydWN0IGlz
X3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbl9pbXBsPFIgKF9fc3RkY2FsbCopKFQwLCBUMSk+Ci17
ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7ICB9OwotCi0jaWZuZGVmIF9NQU5BR0VE
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSLCBjbGFzcyBUMCwgY2xhc3MgVDE+Ci1zdHJ1Y3QgaXNf
dW5hcnlfb3JfYmluYXJ5X2Z1bmN0aW9uX2ltcGw8UiAoX19mYXN0Y2FsbCopKFQwLCBUMSk+Ci17
ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7ICB9OwotCi0jZW5kaWYKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIFIsIGNsYXNzIFQwLCBjbGFzcyBUMT4KLXN0cnVjdCBpc191bmFyeV9vcl9i
aW5hcnlfZnVuY3Rpb25faW1wbDxSIChfX2NkZWNsKikoVDAsIFQxKT4KLXsgIHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgIH07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSLCBjbGFzcyBU
MCwgY2xhc3MgVDE+Ci1zdHJ1Y3QgaXNfdW5hcnlfb3JfYmluYXJ5X2Z1bmN0aW9uX2ltcGw8UiAo
X19jZGVjbCopKFQwLCBUMS4uLik+Ci17ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7
ICB9OwotI2VuZGlmCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IGlzX3VuYXJ5X29y
X2JpbmFyeV9mdW5jdGlvbl9pbXBsPFQmPgoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBm
YWxzZTsgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBpc191bmFyeV9vcl9iaW5h
cnlfZnVuY3Rpb24gOiBpc191bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb25faW1wbDxUPgote307Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgPSBpc191bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb248
VD46OnZhbHVlPgotY2xhc3MgZWJvX2Z1bmN0b3JfaG9sZGVyCi17Ci0gICBCT09TVF9DT1BZQUJM
RV9BTkRfTU9WQUJMRShlYm9fZnVuY3Rvcl9ob2xkZXIpCi0KLSAgIHB1YmxpYzoKLSAgIHR5cGVk
ZWYgVCBmdW5jdG9yX3R5cGU7Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBlYm9f
ZnVuY3Rvcl9ob2xkZXIoKQotICAgICAgOiB0XygpCi0gICB7fQotCi0gICBCT09TVF9JTlRSVVNJ
VkVfRk9SQ0VJTkxJTkUgZXhwbGljaXQgZWJvX2Z1bmN0b3JfaG9sZGVyKGNvbnN0IFQgJnQpCi0g
ICAgICA6IHRfKHQpCi0gICB7fQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgZXhw
bGljaXQgZWJvX2Z1bmN0b3JfaG9sZGVyKEJPT1NUX1JWX1JFRihUKSB0KQotICAgICAgOiB0Xyg6
OmJvb3N0Ojptb3ZlKHQpKQotICAge30KLQotICAgdGVtcGxhdGU8Y2xhc3MgQXJnMSwgY2xhc3Mg
QXJnMj4KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBlYm9fZnVuY3Rvcl9ob2xkZXIo
Qk9PU1RfRldEX1JFRihBcmcxKSBhcmcxLCBCT09TVF9GV0RfUkVGKEFyZzIpIGFyZzIpCi0gICAg
ICA6IHRfKDo6Ym9vc3Q6OmZvcndhcmQ8QXJnMT4oYXJnMSksIDo6Ym9vc3Q6OmZvcndhcmQ8QXJn
Mj4oYXJnMikpCi0gICB7fQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgZWJvX2Z1
bmN0b3JfaG9sZGVyKGNvbnN0IGVib19mdW5jdG9yX2hvbGRlciAmeCkKLSAgICAgIDogdF8oeC50
XykKLSAgIHt9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBlYm9fZnVuY3Rvcl9o
b2xkZXIoQk9PU1RfUlZfUkVGKGVib19mdW5jdG9yX2hvbGRlcikgeCkKLSAgICAgIDogdF8oeC50
XykKLSAgIHt9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBlYm9fZnVuY3Rvcl9o
b2xkZXImIG9wZXJhdG9yPShCT09TVF9DT1BZX0FTU0lHTl9SRUYoZWJvX2Z1bmN0b3JfaG9sZGVy
KSB4KQotICAgewotICAgICAgdGhpcy0+Z2V0KCkgPSB4LmdldCgpOwotICAgICAgcmV0dXJuICp0
aGlzOwotICAgfQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgZWJvX2Z1bmN0b3Jf
aG9sZGVyJiBvcGVyYXRvcj0oQk9PU1RfUlZfUkVGKGVib19mdW5jdG9yX2hvbGRlcikgeCkKLSAg
IHsKLSAgICAgIHRoaXMtPmdldCgpID0gOjpib29zdDo6bW92ZSh4LmdldCgpKTsKLSAgICAgIHJl
dHVybiAqdGhpczsKLSAgIH0KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIGVib19m
dW5jdG9yX2hvbGRlciYgb3BlcmF0b3I9KGNvbnN0IFQgJngpCi0gICB7Ci0gICAgICB0aGlzLT5n
ZXQoKSA9IHg7Ci0gICAgICByZXR1cm4gKnRoaXM7Ci0gICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lW
RV9GT1JDRUlOTElORSBlYm9fZnVuY3Rvcl9ob2xkZXImIG9wZXJhdG9yPShCT09TVF9SVl9SRUYo
VCkgeCkKLSAgIHsKLSAgICAgIHRoaXMtPmdldCgpID0gOjpib29zdDo6bW92ZSh4KTsKLSAgICAg
IHJldHVybiAqdGhpczsKLSAgIH0KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIFQm
ICAgICAgIGdldCgpe3JldHVybiB0Xzt9Ci0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUg
Y29uc3QgVCYgZ2V0KCljb25zdHtyZXR1cm4gdF87fQotCi0gICBwcml2YXRlOgotICAgVCB0XzsK
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1jbGFzcyBlYm9fZnVuY3Rvcl9ob2xkZXI8VCwg
ZmFsc2U+Ci0gICA6ICBwdWJsaWMgVAotewotICAgQk9PU1RfQ09QWUFCTEVfQU5EX01PVkFCTEUo
ZWJvX2Z1bmN0b3JfaG9sZGVyKQotCi0gICBwdWJsaWM6Ci0gICB0eXBlZGVmIFQgZnVuY3Rvcl90
eXBlOwotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgZWJvX2Z1bmN0b3JfaG9sZGVy
KCkKLSAgICAgIDogVCgpCi0gICB7fQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUg
ZXhwbGljaXQgZWJvX2Z1bmN0b3JfaG9sZGVyKGNvbnN0IFQgJnQpCi0gICAgICA6IFQodCkKLSAg
IHt9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBleHBsaWNpdCBlYm9fZnVuY3Rv
cl9ob2xkZXIoQk9PU1RfUlZfUkVGKFQpIHQpCi0gICAgICA6IFQoOjpib29zdDo6bW92ZSh0KSkK
LSAgIHt9Ci0KLSAgIHRlbXBsYXRlPGNsYXNzIEFyZzEsIGNsYXNzIEFyZzI+Ci0gICBCT09TVF9J
TlRSVVNJVkVfRk9SQ0VJTkxJTkUgZWJvX2Z1bmN0b3JfaG9sZGVyKEJPT1NUX0ZXRF9SRUYoQXJn
MSkgYXJnMSwgQk9PU1RfRldEX1JFRihBcmcyKSBhcmcyKQotICAgICAgOiBUKDo6Ym9vc3Q6OmZv
cndhcmQ8QXJnMT4oYXJnMSksIDo6Ym9vc3Q6OmZvcndhcmQ8QXJnMj4oYXJnMikpCi0gICB7fQot
Ci0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgZWJvX2Z1bmN0b3JfaG9sZGVyKGNvbnN0
IGVib19mdW5jdG9yX2hvbGRlciAmeCkKLSAgICAgIDogVChzdGF0aWNfY2FzdDxjb25zdCBUJj4o
eCkpCi0gICB7fQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgZWJvX2Z1bmN0b3Jf
aG9sZGVyKEJPT1NUX1JWX1JFRihlYm9fZnVuY3Rvcl9ob2xkZXIpIHgpCi0gICAgICA6IFQoQk9P
U1RfTU9WRV9CQVNFKFQsIHgpKQotICAge30KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5M
SU5FIGVib19mdW5jdG9yX2hvbGRlciYgb3BlcmF0b3I9KEJPT1NUX0NPUFlfQVNTSUdOX1JFRihl
Ym9fZnVuY3Rvcl9ob2xkZXIpIHgpCi0gICB7Ci0gICAgICBjb25zdCBlYm9fZnVuY3Rvcl9ob2xk
ZXImciA9IHg7Ci0gICAgICB0aGlzLT5nZXQoKSA9IHI7Ci0gICAgICByZXR1cm4gKnRoaXM7Ci0g
ICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBlYm9fZnVuY3Rvcl9ob2xkZXIm
IG9wZXJhdG9yPShCT09TVF9SVl9SRUYoZWJvX2Z1bmN0b3JfaG9sZGVyKSB4KQotICAgewotICAg
ICAgdGhpcy0+Z2V0KCkgPSA6OmJvb3N0Ojptb3ZlKHguZ2V0KCkpOwotICAgICAgcmV0dXJuICp0
aGlzOwotICAgfQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgZWJvX2Z1bmN0b3Jf
aG9sZGVyJiBvcGVyYXRvcj0oY29uc3QgVCAmeCkKLSAgIHsKLSAgICAgIHRoaXMtPmdldCgpID0g
eDsKLSAgICAgIHJldHVybiAqdGhpczsKLSAgIH0KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNF
SU5MSU5FIGVib19mdW5jdG9yX2hvbGRlciYgb3BlcmF0b3I9KEJPT1NUX1JWX1JFRihUKSB4KQot
ICAgewotICAgICAgdGhpcy0+Z2V0KCkgPSA6OmJvb3N0Ojptb3ZlKHgpOwotICAgICAgcmV0dXJu
ICp0aGlzOwotICAgfQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgVCYgICAgICAg
Z2V0KCl7cmV0dXJuICp0aGlzO30KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBjb25z
dCBUJiBnZXQoKWNvbnN0e3JldHVybiAqdGhpczt9Ci19OwotCi19ICAvL25hbWVzcGFjZSBkZXRh
aWwgewotfSAgLy9uYW1lc3BhY2UgaW50cnVzaXZlIHsKLX0gIC8vbmFtZXNwYWNlIGJvb3N0IHsK
LQotI2VuZGlmICAgLy8jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxfRUJPX0hPTERFUl9I
UFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L2ludHJ1c2l2ZS9kZXRhaWwvZXF1YWxfdG9fdmFsdWUuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9lcXVhbF90b192YWx1ZS5o
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZDllNTMwNWMxZmJlZWYzOGEwZGVh
ZDQwZjE1ZjExZTMyNDI5NWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVz
aXZlL2RldGFpbC9lcXVhbF90b192YWx1ZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCww
IEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRh
bmFnYSAgMjAxNC0yMDE0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBM
SUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gICAgICAgICAgaHR0cDovL3d3dy5ib29zdC5v
cmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJz
L2ludHJ1c2l2ZSBmb3IgZG9jdW1lbnRhdGlvbi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ci0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxfRVFVQUxfVE9fVkFMVUVfSFBQCi0jZGVm
aW5lIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxfRVFVQUxfVE9fVkFMVUVfSFBQCi0KLSNpZm5kZWYg
Qk9PU1RfQ09ORklHX0hQUAotIyAgaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNlbmRpZgot
Ci0jaWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01BX09OQ0UpCi0jICBwcmFnbWEgb25jZQotI2Vu
ZGlmCi0KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL3dvcmthcm91bmQuaHBwPgot
Ci1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIGludHJ1c2l2ZSB7Ci1uYW1lc3BhY2UgZGV0
YWlsIHsKLQotLy9UaGlzIGZ1bmN0b3IgY29tcGFyZXMgYSBzdG9yZWQgdmFsdWUKLS8vYW5kIHRo
ZSBvbmUgcGFzc2VkIGFzIGFuIGFyZ3VtZW50Ci10ZW1wbGF0ZTxjbGFzcyBDb25zdFJlZmVyZW5j
ZT4KLWNsYXNzIGVxdWFsX3RvX3ZhbHVlCi17Ci0gICBDb25zdFJlZmVyZW5jZSB0XzsKLQotICAg
cHVibGljOgotICAgZXF1YWxfdG9fdmFsdWUoQ29uc3RSZWZlcmVuY2UgdCkKLSAgICAgIDogIHRf
KHQpCi0gICB7fQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgYm9vbCBvcGVyYXRv
cigpKENvbnN0UmVmZXJlbmNlIHQpY29uc3QKLSAgIHsgIHJldHVybiB0XyA9PSB0OyAgIH0KLX07
Ci0KLX0gIC8vbmFtZXNwYWNlIGRldGFpbHsKLX0gIC8vbmFtZXNwYWNlIGludHJ1c2l2ZXsKLX0g
IC8vbmFtZXNwYWNlIGJvb3N0ewotCi0jZW5kaWYgLy9CT09TVF9JTlRSVVNJVkVfREVUQUlMX0VR
VUFMX1RPX1ZBTFVFX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9leGNlcHRpb25fZGlzcG9zZXIuaHBwIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFp
bC9leGNlcHRpb25fZGlzcG9zZXIuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
MWM1YmYzYjY3ZmY5Y2IzZmQ5MjdkMzQ4ZTc1NzYzMmMyZTAxNzIwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvZXhjZXB0aW9uX2Rpc3Bvc2VyLmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwot
Ly8gKEMpIENvcHlyaWdodCBJb24gR2F6dGFuYWdhICAyMDE0LTIwMTQKLS8vCi0vLyBEaXN0cmli
dXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAg
ICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAg
ICAgICAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvaW50cnVzaXZlIGZvciBkb2N1bWVudGF0aW9uLgot
Ly8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNpZm5kZWYgQk9PU1RfSU5UUlVTSVZFX0RFVEFJ
TF9FWENFUFRJT05fRElTUE9TRVJfSFBQCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxf
RVhDRVBUSU9OX0RJU1BPU0VSX0hQUAotCi0jaWZuZGVmIEJPT1NUX0NPTkZJR19IUFAKLSMgIGlu
Y2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk9PU1RfSEFT
X1BSQUdNQV9PTkNFKQotIyAgcHJhZ21hIG9uY2UKLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3Qv
aW50cnVzaXZlL2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5h
bWVzcGFjZSBpbnRydXNpdmUgewotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLXRlbXBsYXRlPGNsYXNz
IENvbnRhaW5lciwgY2xhc3MgRGlzcG9zZXI+Ci1jbGFzcyBleGNlcHRpb25fZGlzcG9zZXIKLXsK
LSAgIENvbnRhaW5lciAqY29udF87Ci0gICBEaXNwb3NlciAgJmRpc3BfOwotCi0gICBleGNlcHRp
b25fZGlzcG9zZXIoY29uc3QgZXhjZXB0aW9uX2Rpc3Bvc2VyJik7Ci0gICBleGNlcHRpb25fZGlz
cG9zZXIgJm9wZXJhdG9yPShjb25zdCBleGNlcHRpb25fZGlzcG9zZXImKTsKLQotICAgcHVibGlj
OgotICAgZXhjZXB0aW9uX2Rpc3Bvc2VyKENvbnRhaW5lciAmY29udCwgRGlzcG9zZXIgJmRpc3Ap
Ci0gICAgICA6ICBjb250XygmY29udCksIGRpc3BfKGRpc3ApCi0gICB7fQotCi0gICBCT09TVF9J
TlRSVVNJVkVfRk9SQ0VJTkxJTkUgdm9pZCByZWxlYXNlKCkKLSAgIHsgIGNvbnRfID0gMDsgIH0K
LQotICAgfmV4Y2VwdGlvbl9kaXNwb3NlcigpCi0gICB7Ci0gICAgICBpZihjb250Xyl7Ci0gICAg
ICAgICBjb250Xy0+Y2xlYXJfYW5kX2Rpc3Bvc2UoZGlzcF8pOwotICAgICAgfQotICAgfQotfTsK
LQotdGVtcGxhdGU8Y2xhc3MgQ29udGFpbmVyLCBjbGFzcyBEaXNwb3NlciwgY2xhc3MgU2l6ZVR5
cGU+Ci1jbGFzcyBleGNlcHRpb25fYXJyYXlfZGlzcG9zZXIKLXsKLSAgIENvbnRhaW5lciAqY29u
dF87Ci0gICBEaXNwb3NlciAgJmRpc3BfOwotICAgU2l6ZVR5cGUgICZjb25zdHJ1Y3RlZF87Ci0K
LSAgIGV4Y2VwdGlvbl9hcnJheV9kaXNwb3Nlcihjb25zdCBleGNlcHRpb25fYXJyYXlfZGlzcG9z
ZXImKTsKLSAgIGV4Y2VwdGlvbl9hcnJheV9kaXNwb3NlciAmb3BlcmF0b3I9KGNvbnN0IGV4Y2Vw
dGlvbl9hcnJheV9kaXNwb3NlciYpOwotCi0gICBwdWJsaWM6Ci0KLSAgIGV4Y2VwdGlvbl9hcnJh
eV9kaXNwb3NlcgotICAgICAgKENvbnRhaW5lciAmY29udCwgRGlzcG9zZXIgJmRpc3AsIFNpemVU
eXBlICZjb25zdHJ1Y3RlZCkKLSAgICAgIDogIGNvbnRfKCZjb250KSwgZGlzcF8oZGlzcCksIGNv
bnN0cnVjdGVkXyhjb25zdHJ1Y3RlZCkKLSAgIHt9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JD
RUlOTElORSB2b2lkIHJlbGVhc2UoKQotICAgeyAgY29udF8gPSAwOyAgfQotCi0gICB+ZXhjZXB0
aW9uX2FycmF5X2Rpc3Bvc2VyKCkKLSAgIHsKLSAgICAgIFNpemVUeXBlIG4gPSBjb25zdHJ1Y3Rl
ZF87Ci0gICAgICBpZihjb250Xyl7Ci0gICAgICAgICB3aGlsZShuLS0pewotICAgICAgICAgICAg
Y29udF9bbl0uY2xlYXJfYW5kX2Rpc3Bvc2UoZGlzcF8pOwotICAgICAgICAgfQotICAgICAgfQot
ICAgfQotfTsKLQotfSAgLy9uYW1lc3BhY2UgZGV0YWlsewotfSAgLy9uYW1lc3BhY2UgaW50cnVz
aXZlewotfSAgLy9uYW1lc3BhY2UgYm9vc3R7Ci0KLSNlbmRpZiAvL0JPT1NUX0lOVFJVU0lWRV9E
RVRBSUxfRVhDRVBUSU9OX0RJU1BPU0VSX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9mdW5jdGlvbl9kZXRl
Y3Rvci5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRy
dXNpdmUvZGV0YWlsL2Z1bmN0aW9uX2RldGVjdG9yLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNWVjYWVhZjA3MzE0ZWFiZDE3MWJlZGM4ODk4OWRkNTU5NDY1N2RkNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL2Z1bmN0aW9uX2RldGVj
dG9yLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0vLwotLy8gKEMpIENvcHlyaWdodCBJb24gR2F6dGFuYWdhICAyMDA5LTIwMTMuCi0vLwot
Ly8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24g
MS4wLgotLy8gICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29w
eSBhdAotLy8gICAgICAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQot
Ly8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3IgZG9jdW1l
bnRhdGlvbi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gIFRoaXMgY29kZSB3YXMgbW9k
aWZpZWQgZnJvbSB0aGUgY29kZSBwb3N0ZWQgYnkgQWxleGFuZHJlIENvdXJwcm9uIGluIGhpcwot
Ly8gIGFydGljbGUgIkludGVyZmFjZSBEZXRlY3Rpb24iIGluIFRoZSBDb2RlIFByb2plY3Q6Ci0v
LyAgaHR0cDovL3d3dy5jb2RlcHJvamVjdC5jb20vS0IvYXJjaGl0ZWN0dXJlL0RldGVjdG9yLmFz
cHgKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIENvcHlyaWdodCAyMDA3IEFsZXhhbmRyZSBD
b3VycHJvbgotLy8KLS8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHJlZGlzdHJp
YnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlLAotLy8gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHly
aWdodCBub3RpY2UgYXBwZWFycyBvbiBhbGwgY29waWVzIG9mIHRoZSBzb2Z0d2FyZS4KLS8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLQotI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVfREVUQUlMX0ZVTkNU
SU9OX0RFVEVDVE9SX0hQUAotI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfREVUQUlMX0ZVTkNUSU9O
X0RFVEVDVE9SX0hQUAotCi0jaWZuZGVmIEJPT1NUX0NPTkZJR19IUFAKLSMgIGluY2x1ZGUgPGJv
b3N0L2NvbmZpZy5ocHA+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk9PU1RfSEFTX1BSQUdNQV9P
TkNFKQotIyAgcHJhZ21hIG9uY2UKLSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNw
YWNlIGludHJ1c2l2ZSB7Ci1uYW1lc3BhY2UgZnVuY3Rpb25fZGV0ZWN0b3IgewotCi0gICAgdHlw
ZWRlZiBjaGFyIE5vdEZvdW5kVHlwZTsKLSAgICBzdHJ1Y3QgU3RhdGljRnVuY3Rpb25UeXBlIHsg
Tm90Rm91bmRUeXBlIHggWzJdOyB9OwotICAgIHN0cnVjdCBOb25TdGF0aWNGdW5jdGlvblR5cGUg
eyBOb3RGb3VuZFR5cGUgeCBbM107IH07Ci0KLSAgICBlbnVtCi0gICAgICAgICB7IE5vdEZvdW5k
ICAgICAgICAgID0gMCwKLSAgICAgICAgICAgU3RhdGljRnVuY3Rpb24gICAgPSBzaXplb2YoIFN0
YXRpY0Z1bmN0aW9uVHlwZSApICAgIC0gc2l6ZW9mKCBOb3RGb3VuZFR5cGUgKSwKLSAgICAgICAg
ICAgTm9uU3RhdGljRnVuY3Rpb24gPSBzaXplb2YoIE5vblN0YXRpY0Z1bmN0aW9uVHlwZSApIC0g
c2l6ZW9mKCBOb3RGb3VuZFR5cGUgKQotICAgICAgICAgfTsKLQotfSAgLy9uYW1lc3BhY2UgYm9v
c3QgewotfSAgLy9uYW1lc3BhY2UgaW50cnVzaXZlIHsKLX0gIC8vbmFtZXNwYWNlIGZ1bmN0aW9u
X2RldGVjdG9yIHsKLQotI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfQ1JFQVRFX0ZVTkNUSU9OX0RF
VEVDVE9SKElkZW50aWZpZXIsIEluc3RhbnRpYXRpb25LZXkpIFwKLSAgIG5hbWVzcGFjZSBib29z
dCB7IFwKLSAgIG5hbWVzcGFjZSBpbnRydXNpdmUgeyBcCi0gICBuYW1lc3BhY2UgZnVuY3Rpb25f
ZGV0ZWN0b3IgeyBcCi0gICB0ZW1wbGF0ZSA8IGNsYXNzIFQsIFwKLSAgICAgICAgICAgIGNsYXNz
IE5vblN0YXRpY1R5cGUsIFwKLSAgICAgICAgICAgIGNsYXNzIE5vblN0YXRpY0NvbnN0VHlwZSwg
XAotICAgICAgICAgICAgY2xhc3MgU3RhdGljVHlwZSA+IFwKLSAgIGNsYXNzIERldGVjdE1lbWJl
cl8jI0luc3RhbnRpYXRpb25LZXlfIyNJZGVudGlmaWVyIHsgXAotICAgICAgdGVtcGxhdGUgPCBO
b25TdGF0aWNUeXBlID4gXAotICAgICAgc3RydWN0IFRlc3ROb25TdGF0aWNOb25Db25zdCA7IFwK
LSAgICAgIFwKLSAgICAgIHRlbXBsYXRlIDwgTm9uU3RhdGljQ29uc3RUeXBlID4gXAotICAgICAg
c3RydWN0IFRlc3ROb25TdGF0aWNDb25zdCA7IFwKLSAgICAgIFwKLSAgICAgIHRlbXBsYXRlIDwg
U3RhdGljVHlwZSA+IFwKLSAgICAgIHN0cnVjdCBUZXN0U3RhdGljIDsgXAotICAgICAgXAotICAg
ICAgdGVtcGxhdGUgPGNsYXNzIFUgPiBcCi0gICAgICBzdGF0aWMgTm9uU3RhdGljRnVuY3Rpb25U
eXBlIFRlc3QoIFRlc3ROb25TdGF0aWNOb25Db25zdDwmVTo6SWRlbnRpZmllcj4qLCBpbnQgKTsg
XAotICAgICAgXAotICAgICAgdGVtcGxhdGUgPGNsYXNzIFUgPiBcCi0gICAgICBzdGF0aWMgTm9u
U3RhdGljRnVuY3Rpb25UeXBlIFRlc3QoIFRlc3ROb25TdGF0aWNDb25zdDwmVTo6SWRlbnRpZmll
cj4qLCBpbnQgKTsgXAotICAgICAgXAotICAgICAgdGVtcGxhdGUgPGNsYXNzIFU+IFwKLSAgICAg
IHN0YXRpYyBTdGF0aWNGdW5jdGlvblR5cGUgVGVzdCggVGVzdFN0YXRpYzwmVTo6SWRlbnRpZmll
cj4qLCBpbnQgKTsgXAotICAgICAgXAotICAgICAgdGVtcGxhdGUgPGNsYXNzIFU+IFwKLSAgICAg
IHN0YXRpYyBOb3RGb3VuZFR5cGUgVGVzdCggLi4uICk7IFwKLSAgIHB1YmxpYyA6IFwKLSAgICAg
IHN0YXRpYyBjb25zdCBpbnQgY2hlY2sgPSBOb3RGb3VuZCArIChzaXplb2YoVGVzdDxUPigwLCAw
KSkgLSBzaXplb2YoTm90Rm91bmRUeXBlKSk7XAotICAgfTtcCi19fX0gLy9uYW1lc3BhY2UgYm9v
c3Q6OmludHJ1c2l2ZTo6ZnVuY3Rpb25fZGV0ZWN0b3IgewotCi0jZGVmaW5lIEJPT1NUX0lOVFJV
U0lWRV9ERVRFQ1RfRlVOQ1RJT04oQ2xhc3MsIEluc3RhbnRpYXRpb25LZXksIFJldHVyblR5cGUs
IElkZW50aWZpZXIsIFBhcmFtcykgXAotICAgIDo6Ym9vc3Q6OmludHJ1c2l2ZTo6ZnVuY3Rpb25f
ZGV0ZWN0b3I6OkRldGVjdE1lbWJlcl8jI0luc3RhbnRpYXRpb25LZXlfIyNJZGVudGlmaWVyPCBD
bGFzcyxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblR5
cGUgKENsYXNzOjoqKVBhcmFtcyxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJldHVyblR5cGUgKENsYXNzOjoqKVBhcmFtcyBjb25zdCxcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblR5cGUgKCopUGFyYW1zIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID46OmNoZWNrCi0KLSNlbmRpZiAgIC8v
QGlmbmRlZiBCT09TVF9JTlRSVVNJVkVfREVUQUlMX0ZVTkNUSU9OX0RFVEVDVE9SX0hQUApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVz
aXZlL2RldGFpbC9nZW5lcmljX2hvb2suaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9nZW5lcmljX2hvb2suaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzQyMWI4ODA1MDE3NTA2NTE3ZDg5NzBlNmVhZTg4MTU5
N2JlZjY5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwv
Z2VuZXJpY19ob29rLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotLy8KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAyMDA3LTIw
MTMKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuCi0vLyAgICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0Ci0vLyAgICAgICAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvaW50cnVzaXZlIGZv
ciBkb2N1bWVudGF0aW9uLgotLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNpZm5kZWYgQk9P
U1RfSU5UUlVTSVZFX0dFTkVSSUNfSE9PS19IUFAKLSNkZWZpbmUgQk9PU1RfSU5UUlVTSVZFX0dF
TkVSSUNfSE9PS19IUFAKLQotI2lmbmRlZiBCT09TVF9DT05GSUdfSFBQCi0jICBpbmNsdWRlIDxi
b29zdC9jb25maWcuaHBwPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19QUkFHTUFf
T05DRSkKLSMgIHByYWdtYSBvbmNlCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2
ZS9wb2ludGVyX3RyYWl0cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2xpbmtfbW9k
ZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9tcGwuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvYXNzZXJ0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9p
bnRydXNpdmUvZGV0YWlsL25vZGVfaG9sZGVyLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNp
dmUvZGV0YWlsL2FsZ29fdHlwZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qvc3RhdGljX2Fzc2VydC5o
cHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgaW50cnVzaXZlIHsKLQotLy8vIEBj
b25kCi0KLW5hbWVzcGFjZSBkZXRhaWwgewotCi10ZW1wbGF0ZSA8bGlua19tb2RlX3R5cGUgTGlu
a01vZGU+Ci1zdHJ1Y3QgbGlua19kaXNwYXRjaAote307Ci0KLXRlbXBsYXRlPGNsYXNzIEhvb2s+
Ci12b2lkIGRlc3RydWN0b3JfaW1wbChIb29rICZob29rLCBkZXRhaWw6OmxpbmtfZGlzcGF0Y2g8
c2FmZV9saW5rPikKLXsgIC8vSWYgdGhpcyBhc3NlcnRpb24gcmFpc2VzLCB5b3UgbWlnaHQgaGF2
ZSBkZXN0cm95ZWQgYW4gb2JqZWN0Ci0gICAvL3doaWxlIGl0IHdhcyBzdGlsbCBpbnNlcnRlZCBp
biBhIGNvbnRhaW5lciB0aGF0IGlzIGFsaXZlLgotICAgLy9JZiBzbywgcmVtb3ZlIHRoZSBvYmpl
Y3QgZnJvbSB0aGUgY29udGFpbmVyIGJlZm9yZSBkZXN0cm95aW5nIGl0LgotICAgKHZvaWQpaG9v
azsgQk9PU1RfSU5UUlVTSVZFX1NBRkVfSE9PS19ERVNUUlVDVE9SX0FTU0VSVCghaG9vay5pc19s
aW5rZWQoKSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEhvb2s+Ci12b2lkIGRlc3RydWN0b3JfaW1w
bChIb29rICZob29rLCBkZXRhaWw6OmxpbmtfZGlzcGF0Y2g8YXV0b191bmxpbms+KQoteyAgaG9v
ay51bmxpbmsoKTsgIH0KLQotdGVtcGxhdGU8Y2xhc3MgSG9vaz4KLXZvaWQgZGVzdHJ1Y3Rvcl9p
bXBsKEhvb2sgJiwgZGV0YWlsOjpsaW5rX2Rpc3BhdGNoPG5vcm1hbF9saW5rPikKLXt9Ci0KLX0g
IC8vbmFtZXNwYWNlIGRldGFpbCB7Ci0KLWVudW0gYmFzZV9ob29rX3R5cGUKLXsgIE5vQmFzZUhv
b2tJZAotLCAgTGlzdEJhc2VIb29rSWQKLSwgIFNsaXN0QmFzZUhvb2tJZAotLCAgUmJUcmVlQmFz
ZUhvb2tJZAotLCAgSGFzaEJhc2VIb29rSWQKLSwgIEF2bFRyZWVCYXNlSG9va0lkCi0sICBCc1Ry
ZWVCYXNlSG9va0lkCi0sICBUcmVhcFRyZWVCYXNlSG9va0lkCi0sICBBbnlCYXNlSG9va0lkCi19
OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBIb29rVGFncywgdW5zaWduZWQgaW50Pgotc3RydWN0IGhv
b2tfdGFnc19kZWZpbmVye307Ci0KLXRlbXBsYXRlIDxjbGFzcyBIb29rVGFncz4KLXN0cnVjdCBo
b29rX3RhZ3NfZGVmaW5lcjxIb29rVGFncywgTGlzdEJhc2VIb29rSWQ+Ci17ICB0eXBlZGVmIEhv
b2tUYWdzIGRlZmF1bHRfbGlzdF9ob29rOyAgfTsKLQotdGVtcGxhdGUgPGNsYXNzIEhvb2tUYWdz
Pgotc3RydWN0IGhvb2tfdGFnc19kZWZpbmVyPEhvb2tUYWdzLCBTbGlzdEJhc2VIb29rSWQ+Ci17
ICB0eXBlZGVmIEhvb2tUYWdzIGRlZmF1bHRfc2xpc3RfaG9vazsgIH07Ci0KLXRlbXBsYXRlIDxj
bGFzcyBIb29rVGFncz4KLXN0cnVjdCBob29rX3RhZ3NfZGVmaW5lcjxIb29rVGFncywgUmJUcmVl
QmFzZUhvb2tJZD4KLXsgIHR5cGVkZWYgSG9va1RhZ3MgZGVmYXVsdF9yYnRyZWVfaG9vazsgIH07
Ci0KLXRlbXBsYXRlIDxjbGFzcyBIb29rVGFncz4KLXN0cnVjdCBob29rX3RhZ3NfZGVmaW5lcjxI
b29rVGFncywgSGFzaEJhc2VIb29rSWQ+Ci17ICB0eXBlZGVmIEhvb2tUYWdzIGRlZmF1bHRfaGFz
aHRhYmxlX2hvb2s7ICB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgSG9va1RhZ3M+Ci1zdHJ1Y3QgaG9v
a190YWdzX2RlZmluZXI8SG9va1RhZ3MsIEF2bFRyZWVCYXNlSG9va0lkPgoteyAgdHlwZWRlZiBI
b29rVGFncyBkZWZhdWx0X2F2bHRyZWVfaG9vazsgIH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBIb29r
VGFncz4KLXN0cnVjdCBob29rX3RhZ3NfZGVmaW5lcjxIb29rVGFncywgQnNUcmVlQmFzZUhvb2tJ
ZD4KLXsgIHR5cGVkZWYgSG9va1RhZ3MgZGVmYXVsdF9ic3RyZWVfaG9vazsgIH07Ci0KLXRlbXBs
YXRlIDxjbGFzcyBIb29rVGFncz4KLXN0cnVjdCBob29rX3RhZ3NfZGVmaW5lcjxIb29rVGFncywg
QW55QmFzZUhvb2tJZD4KLXsgIHR5cGVkZWYgSG9va1RhZ3MgZGVmYXVsdF9hbnlfaG9vazsgIH07
Ci0KLXRlbXBsYXRlCi0gICA8IGNsYXNzIE5vZGVUcmFpdHMKLSAgICwgY2xhc3MgVGFnCi0gICAs
IGxpbmtfbW9kZV90eXBlIExpbmtNb2RlCi0gICAsIGJhc2VfaG9va190eXBlIEJhc2VIb29rVHlw
ZQotICAgPgotc3RydWN0IGhvb2t0YWdzX2ltcGwKLXsKLSAgIHN0YXRpYyBjb25zdCBsaW5rX21v
ZGVfdHlwZSBsaW5rX21vZGUgPSBMaW5rTW9kZTsKLSAgIHR5cGVkZWYgVGFnIHRhZzsKLSAgIHR5
cGVkZWYgTm9kZVRyYWl0cyBub2RlX3RyYWl0czsKLSAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jh
c2VfaG9vayA9ICFkZXRhaWw6OmlzX3NhbWU8VGFnLCBtZW1iZXJfdGFnPjo6dmFsdWU7Ci0gICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlbW9kZV9vcl9hdXRvdW5saW5rID0gaXNfc2FmZV9hdXRvdW5s
aW5rPGxpbmtfbW9kZT46OnZhbHVlOwotICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB0eXBl
ID0gQmFzZUhvb2tUeXBlOwotfTsKLQotLy8vIEBlbmRjb25kCi0KLXRlbXBsYXRlCi0gICA8IGJv
b3N0OjppbnRydXNpdmU6OmFsZ29fdHlwZXMgQWxnbwotICAgLCBjbGFzcyBOb2RlVHJhaXRzCi0g
ICAsIGNsYXNzIFRhZwotICAgLCBsaW5rX21vZGVfdHlwZSBMaW5rTW9kZQotICAgLCBiYXNlX2hv
b2tfdHlwZSBCYXNlSG9va1R5cGUKLSAgID4KLWNsYXNzIGdlbmVyaWNfaG9vawotICAgLy8vIEBj
b25kCi0gICAvL0lmIHRoZSBob29rIGlzIGEgYmFzZSBob29rLCBkZXJpdmUgZ2VuZXJpYyBob29r
IGZyb20gbm9kZV9ob2xkZXIKLSAgIC8vc28gdGhhdCBhIHVuaXF1ZSBiYXNlIGNsYXNzIGlzIGNy
ZWF0ZWQgdG8gY29udmVydCBmcm9tIHRoZSBub2RlCi0gICAvL3RvIHRoZSB0eXBlLiBUaGlzIG1l
Y2hhbmlzbSB3aWxsIGJlIHVzZWQgYnkgYmh0cmFpdHMuCi0gICAvLwotICAgLy9JZiB0aGUgaG9v
ayBpcyBhIG1lbWJlciBob29rLCBnZW5lcmljIGhvb2sgd2lsbCBkaXJlY3RseSBkZXJpdmUKLSAg
IC8vZnJvbSB0aGUgaG9vay4KLSAgIDogcHVibGljIGRldGFpbDo6aWZfYwotICAgICAgPCBkZXRh
aWw6OmlzX3NhbWU8VGFnLCBtZW1iZXJfdGFnPjo6dmFsdWUKLSAgICAgICwgdHlwZW5hbWUgTm9k
ZVRyYWl0czo6bm9kZQotICAgICAgLCBub2RlX2hvbGRlcjx0eXBlbmFtZSBOb2RlVHJhaXRzOjpu
b2RlLCBUYWcsIEJhc2VIb29rVHlwZT4KLSAgICAgID46OnR5cGUKLSAgIC8vSWYgdGhpcyBpcyB0
aGUgYSBkZWZhdWx0LXRhZ2dlZCBiYXNlIGhvb2sgZGVyaXZlIGZyb20gYSBjbGFzcyB0aGF0Ci0g
ICAvL3dpbGwgZGVmaW5lIGFuIHNwZWNpYWwgaW50ZXJuYWwgdHlwZWRlZi4gQ29udGFpbmVycyB3
aWxsIGJlIGFibGUgdG8gZGV0ZWN0IHRoaXMKLSAgIC8vc3BlY2lhbCB0eXBlZGVmIGFuZCBvYnRh
aW4gZ2VuZXJpY19ob29rJ3MgaW50ZXJuYWwgdHlwZXMgaW4gb3JkZXIgdG8gZGVkdWNlCi0gICAv
L3ZhbHVlX3RyYWl0cyBmb3IgdGhpcyBob29rLgotICAgLCBwdWJsaWMgaG9va190YWdzX2RlZmlu
ZXIKLSAgICAgIDwgZ2VuZXJpY19ob29rPEFsZ28sIE5vZGVUcmFpdHMsIFRhZywgTGlua01vZGUs
IEJhc2VIb29rVHlwZT4KLSAgICAgICwgZGV0YWlsOjppc19zYW1lPFRhZywgZGZ0X3RhZz46OnZh
bHVlID8gQmFzZUhvb2tUeXBlIDogTm9CYXNlSG9va0lkPgotICAgLy8vIEBlbmRjb25kCi17Ci0g
ICAvLy8gQGNvbmQKLSAgIHR5cGVkZWYgdHlwZW5hbWUgZ2V0X2FsZ288QWxnbywgTm9kZVRyYWl0
cz46OnR5cGUgIG5vZGVfYWxnb3JpdGhtczsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgbm9kZV9hbGdv
cml0aG1zOjpub2RlICAgICAgICAgICAgIG5vZGU7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIG5vZGVf
YWxnb3JpdGhtczo6bm9kZV9wdHIgICAgICAgICBub2RlX3B0cjsKLSAgIHR5cGVkZWYgdHlwZW5h
bWUgbm9kZV9hbGdvcml0aG1zOjpjb25zdF9ub2RlX3B0ciAgIGNvbnN0X25vZGVfcHRyOwotCi0g
ICBwdWJsaWM6Ci0KLSAgIHR5cGVkZWYgaG9va3RhZ3NfaW1wbAotICAgICAgPCBOb2RlVHJhaXRz
Ci0gICAgICAsIFRhZywgTGlua01vZGUsIEJhc2VIb29rVHlwZT4gICAgICAgICAgICAgICAgICBo
b29rdGFnczsKLQotICAgbm9kZV9wdHIgdGhpc19wdHIoKQotICAgeyAgcmV0dXJuIHBvaW50ZXJf
dHJhaXRzPG5vZGVfcHRyPjo6cG9pbnRlcl90byhzdGF0aWNfY2FzdDxub2RlJj4oKnRoaXMpKTsg
fQotCi0gICBjb25zdF9ub2RlX3B0ciB0aGlzX3B0cigpIGNvbnN0Ci0gICB7ICByZXR1cm4gcG9p
bnRlcl90cmFpdHM8Y29uc3Rfbm9kZV9wdHI+Ojpwb2ludGVyX3RvKHN0YXRpY19jYXN0PGNvbnN0
IG5vZGUmPigqdGhpcykpOyB9Ci0KLSAgIHB1YmxpYzoKLSAgIC8vLyBAZW5kY29uZAotCi0gICBn
ZW5lcmljX2hvb2soKQotICAgewotICAgICAgaWYoaG9va3RhZ3M6OnNhZmVtb2RlX29yX2F1dG91
bmxpbmspewotICAgICAgICAgbm9kZV9hbGdvcml0aG1zOjppbml0KHRoaXMtPnRoaXNfcHRyKCkp
OwotICAgICAgfQotICAgfQotCi0gICBnZW5lcmljX2hvb2soY29uc3QgZ2VuZXJpY19ob29rJiAp
Ci0gICB7Ci0gICAgICBpZihob29rdGFnczo6c2FmZW1vZGVfb3JfYXV0b3VubGluayl7Ci0gICAg
ICAgICBub2RlX2FsZ29yaXRobXM6OmluaXQodGhpcy0+dGhpc19wdHIoKSk7Ci0gICAgICB9Ci0g
ICB9Ci0KLSAgIGdlbmVyaWNfaG9vayYgb3BlcmF0b3I9KGNvbnN0IGdlbmVyaWNfaG9vayYgKQot
ICAgeyAgcmV0dXJuICp0aGlzOyAgfQotCi0gICB+Z2VuZXJpY19ob29rKCkKLSAgIHsKLSAgICAg
IGRlc3RydWN0b3JfaW1wbAotICAgICAgICAgKCp0aGlzLCBkZXRhaWw6OmxpbmtfZGlzcGF0Y2g8
aG9va3RhZ3M6OmxpbmtfbW9kZT4oKSk7Ci0gICB9Ci0KLSAgIHZvaWQgc3dhcF9ub2RlcyhnZW5l
cmljX2hvb2sgJm90aGVyKQotICAgewotICAgICAgbm9kZV9hbGdvcml0aG1zOjpzd2FwX25vZGVz
Ci0gICAgICAgICAodGhpcy0+dGhpc19wdHIoKSwgb3RoZXIudGhpc19wdHIoKSk7Ci0gICB9Ci0K
LSAgIGJvb2wgaXNfbGlua2VkKCkgY29uc3QKLSAgIHsKLSAgICAgIC8vaXNfbGlua2VkKCkgY2Fu
IGJlIG9ubHkgdXNlZCBpbiBzYWZlLW1vZGUgb3IgYXV0by11bmxpbmsKLSAgICAgIEJPT1NUX1NU
QVRJQ19BU1NFUlQoKCBob29rdGFnczo6c2FmZW1vZGVfb3JfYXV0b3VubGluayApKTsKLSAgICAg
IHJldHVybiAhbm9kZV9hbGdvcml0aG1zOjp1bmlxdWUodGhpcy0+dGhpc19wdHIoKSk7Ci0gICB9
Ci0KLSAgIHZvaWQgdW5saW5rKCkKLSAgIHsKLSAgICAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoKCAo
aW50KWhvb2t0YWdzOjpsaW5rX21vZGUgPT0gKGludClhdXRvX3VubGluayApKTsKLSAgICAgIG5v
ZGVfcHRyIG4odGhpcy0+dGhpc19wdHIoKSk7Ci0gICAgICBpZighbm9kZV9hbGdvcml0aG1zOjpp
bml0ZWQobikpewotICAgICAgICAgbm9kZV9hbGdvcml0aG1zOjp1bmxpbmsobik7Ci0gICAgICAg
ICBub2RlX2FsZ29yaXRobXM6OmluaXQobik7Ci0gICAgICB9Ci0gICB9Ci19OwotCi19IC8vbmFt
ZXNwYWNlIGludHJ1c2l2ZQotfSAvL25hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy9CT09TVF9J
TlRSVVNJVkVfR0VORVJJQ19IT09LX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9nZXRfdmFsdWVfdHJhaXRz
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2
ZS9kZXRhaWwvZ2V0X3ZhbHVlX3RyYWl0cy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDIyMmY4MDc4YTY0ZjE1M2U1M2U0M2RiODhjNWZkN2FjZjNjMjRiZjkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9nZXRfdmFsdWVfdHJhaXRzLmhw
cAorKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ly8KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAgMjAxNC0yMDE0Ci0vLwotLy8gRGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgot
Ly8gICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAot
Ly8gICAgICAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8v
IFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3IgZG9jdW1lbnRhdGlv
bi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9E
RVRBSUxfR0VUX1ZBTFVFX1RSQUlUU19IUFAKLSNkZWZpbmUgQk9PU1RfSU5UUlVTSVZFX0RFVEFJ
TF9HRVRfVkFMVUVfVFJBSVRTX0hQUAotCi0jaWZuZGVmIEJPT1NUX0NPTkZJR19IUFAKLSMgIGlu
Y2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk9PU1RfSEFT
X1BSQUdNQV9PTkNFKQotIyAgcHJhZ21hIG9uY2UKLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3Qv
aW50cnVzaXZlL2RldGFpbC9jb25maWdfYmVnaW4uaHBwPgotI2luY2x1ZGUgPGJvb3N0L2ludHJ1
c2l2ZS9kZXRhaWwvbXBsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL2hv
b2tfdHJhaXRzLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSBpbnRydXNpdmUg
ewotCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9ET1hZR0VOX0lOVk9LRUQKLQotdGVtcGxhdGU8
Y2xhc3MgU3VwcG9zZWRWYWx1ZVRyYWl0cz4KLXN0cnVjdCBpc19kZWZhdWx0X2hvb2tfdGFnCi17
ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOyAgfTsKLQotbmFtZXNwYWNlIGRldGFp
bHsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEJhc2VIb29rPgotc3RydWN0IGNvbmNyZXRl
X2hvb2tfYmFzZV92YWx1ZV90cmFpdHMKLXsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgQmFzZUhvb2s6
Omhvb2t0YWdzIHRhZ3M7Ci0gICB0eXBlZGVmIGJodHJhaXRzCi0gICAgICA8IFQKLSAgICAgICwg
dHlwZW5hbWUgdGFnczo6bm9kZV90cmFpdHMKLSAgICAgICwgdGFnczo6bGlua19tb2RlCi0gICAg
ICAsIHR5cGVuYW1lIHRhZ3M6OnRhZwotICAgICAgLCB0YWdzOjp0eXBlPiB0eXBlOwotfTsKLQot
dGVtcGxhdGUgPGNsYXNzIEJhc2VIb29rPgotc3RydWN0IGNvbmNyZXRlX2hvb2tfYmFzZV92YWx1
ZV90cmFpdHM8dm9pZCwgQmFzZUhvb2s+Ci17Ci0gICB0eXBlZGVmIHR5cGVuYW1lIEJhc2VIb29r
Ojpob29rdGFncyB0eXBlOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFueVRvU29t
ZUhvb2tfUHJvdG9WYWx1ZVRyYWl0cz4KLXN0cnVjdCBhbnlfaG9va19iYXNlX3ZhbHVlX3RyYWl0
cwotewotICAgLy9BbnlUb1NvbWVIb29rIHZhbHVlX3RyYWl0cyBkZXJpdmUgZnJvbSBhIGdlbmVy
aWNfaG9vawotICAgLy9UaGUgZ2VuZXJpY19ob29rIGlzIGNvbmZpZ3VyZWQgd2l0aCBhbnlfbm9k
ZV90cmFpdHMKLSAgIC8vYW5kIEFueVRvU29tZUhvb2s6OnZhbHVlX3RyYWl0cyB3aXRoIHRoZSBj
b3JyZWN0Ci0gICAvL25vZGUgdHJhaXRzIGZvciB0aGUgY29udGFpbmVyLCBzbyB1c2Ugbm9kZV90
cmFpdHMKLSAgIC8vZnJvbSBBbnlUb1NvbWVIb29rX1Byb3RvVmFsdWVUcmFpdHMgYW5kIHRoZSBy
ZXN0IG9mCi0gICAvL2VsZW1lbnRzIGZyb20gdGhlIGhvb2t0YWdzIG1lbWJlciBvZiB0aGUgZ2Vu
ZXJpY19ob29rCi0KLSAgIHR5cGVkZWYgdHlwZW5hbWUgQW55VG9Tb21lSG9va19Qcm90b1ZhbHVl
VHJhaXRzOjpiYXNpY19ob29rX3QgICAgIGJhc2ljX2hvb2tfdDsKLSAgIHR5cGVkZWYgdHlwZW5h
bWUgcG9pbnRlcl9yZWJpbmQKLSAgICAgIDwgdHlwZW5hbWUgYmFzaWNfaG9va190Ojpob29rdGFn
czo6bm9kZV90cmFpdHM6Om5vZGVfcHRyCi0gICAgICAsIHZvaWQ+Ojp0eXBlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkX3BvaW50ZXI7Ci0gICB0
eXBlZGVmIHR5cGVuYW1lIEFueVRvU29tZUhvb2tfUHJvdG9WYWx1ZVRyYWl0czo6dGVtcGxhdGUK
LSAgICAgIG5vZGVfdHJhaXRzX2Zyb21fdm9pZHB0cjx2b2lkX3BvaW50ZXI+Ojp0eXBlICAgICAg
ICAgICAgICAgICAgIG5vZGVfdHJhaXRzOwotCi0gICB0eXBlZGVmIGJodHJhaXRzCi0gICAgICA8
IFQKLSAgICAgICwgbm9kZV90cmFpdHMKLSAgICAgICwgYmFzaWNfaG9va190Ojpob29rdGFnczo6
bGlua19tb2RlCi0gICAgICAsIHR5cGVuYW1lIGJhc2ljX2hvb2tfdDo6aG9va3RhZ3M6OnRhZwot
ICAgICAgLCBiYXNpY19ob29rX3Q6Omhvb2t0YWdzOjp0eXBlCi0gICAgICA+IHR5cGU7Ci19Owot
Ci10ZW1wbGF0ZSA8Y2xhc3MgQW55VG9Tb21lSG9va19Qcm90b1ZhbHVlVHJhaXRzPgotc3RydWN0
IGFueV9ob29rX2Jhc2VfdmFsdWVfdHJhaXRzPHZvaWQsIEFueVRvU29tZUhvb2tfUHJvdG9WYWx1
ZVRyYWl0cz4KLXsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgQW55VG9Tb21lSG9va19Qcm90b1ZhbHVl
VHJhaXRzOjpiYXNpY19ob29rX3QgICAgIGJhc2ljX2hvb2tfdDsKLSAgIHR5cGVkZWYgdHlwZW5h
bWUgcG9pbnRlcl9yZWJpbmQKLSAgICAgIDwgdHlwZW5hbWUgYmFzaWNfaG9va190Ojpob29rdGFn
czo6bm9kZV90cmFpdHM6Om5vZGVfcHRyCi0gICAgICAsIHZvaWQ+Ojp0eXBlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkX3BvaW50ZXI7Ci0KLSAg
IHN0cnVjdCB0eXBlCi0gICB7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIEFueVRvU29tZUhvb2tf
UHJvdG9WYWx1ZVRyYWl0czo6dGVtcGxhdGUKLSAgICAgICAgIG5vZGVfdHJhaXRzX2Zyb21fdm9p
ZHB0cjx2b2lkX3BvaW50ZXI+Ojp0eXBlICAgICAgICAgICAgICAgIG5vZGVfdHJhaXRzOwotICAg
fTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIE1lbWJlckhvb2s+Ci1zdHJ1Y3QgZ2V0X21lbWJlcl92
YWx1ZV90cmFpdHMKLXsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgTWVtYmVySG9vazo6bWVtYmVyX3Zh
bHVlX3RyYWl0cyB0eXBlOwotfTsKLQotQk9PU1RfSU5UUlVTSVZFX0lOVEVSTkFMX1NUQVRJQ19C
T09MX0lTX1RSVUUoaW50ZXJuYWxfYW55X2hvb2ssIGlzX2FueV9ob29rKQotQk9PU1RfSU5UUlVT
SVZFX0lOVEVSTkFMX1NUQVRJQ19CT09MX0lTX1RSVUUoaW50ZXJuYWxfYmFzZV9ob29rLCBob29r
dGFnczo6aXNfYmFzZV9ob29rKQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpbnRlcm5h
bF9tZW1iZXJfdmFsdWVfdHJhaXRzCi17Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gc3RhdGljIHll
c190eXBlIHRlc3QoLi4uKTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBVPiBzdGF0aWMgbm9fdHlwZSB0
ZXN0KHR5cGVuYW1lIFU6Om1lbWJlcl92YWx1ZV90cmFpdHMqID0gMCk7Ci0gICBzdGF0aWMgY29u
c3QgYm9vbCB2YWx1ZSA9IHNpemVvZih0ZXN0PFQ+KDApKSA9PSBzaXplb2Yobm9fdHlwZSk7Ci19
OwotCi10ZW1wbGF0ZTxjbGFzcyBTdXBwb3NlZFZhbHVlVHJhaXRzLCBjbGFzcyBULCBib29sID0g
aXNfZGVmYXVsdF9ob29rX3RhZzxTdXBwb3NlZFZhbHVlVHJhaXRzPjo6dmFsdWU+Ci1zdHJ1Y3Qg
c3VwcG9zZWRfdmFsdWVfdHJhaXRzOwotCi10ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBCYXNlSG9v
aywgYm9vbCA9IGludGVybmFsX2FueV9ob29rX2Jvb2xfaXNfdHJ1ZTxCYXNlSG9vaz46OnZhbHVl
Pgotc3RydWN0IGdldF9iYXNlX3ZhbHVlX3RyYWl0czsKLQotdGVtcGxhdGU8Y2xhc3MgU3VwcG9z
ZWRWYWx1ZVRyYWl0cywgY2xhc3MgVCwgYm9vbCA9IGludGVybmFsX2Jhc2VfaG9va19ib29sX2lz
X3RydWU8U3VwcG9zZWRWYWx1ZVRyYWl0cz46OnZhbHVlPgotc3RydWN0IHN1cHBvc2VkX2Jhc2Vf
dmFsdWVfdHJhaXRzOwotCi10ZW1wbGF0ZTxjbGFzcyBTdXBwb3NlZFZhbHVlVHJhaXRzLCBib29s
ID0gaW50ZXJuYWxfbWVtYmVyX3ZhbHVlX3RyYWl0czxTdXBwb3NlZFZhbHVlVHJhaXRzPjo6dmFs
dWU+Ci1zdHJ1Y3Qgc3VwcG9zZWRfbWVtYmVyX3ZhbHVlX3RyYWl0czsKLQotdGVtcGxhdGU8Y2xh
c3MgU3VwcG9zZWRWYWx1ZVRyYWl0cywgYm9vbCA9IGludGVybmFsX2FueV9ob29rX2Jvb2xfaXNf
dHJ1ZTxTdXBwb3NlZFZhbHVlVHJhaXRzPjo6dmFsdWU+Ci1zdHJ1Y3QgYW55X29yX2NvbmNyZXRl
X3ZhbHVlX3RyYWl0czsKLQotLy9CYXNlIGFueSBob29rCi10ZW1wbGF0ZTxjbGFzcyBULCBjbGFz
cyBCYXNlSG9vaz4KLXN0cnVjdCBnZXRfYmFzZV92YWx1ZV90cmFpdHM8VCwgQmFzZUhvb2ssIHRy
dWU+Ci0gICA6IGFueV9ob29rX2Jhc2VfdmFsdWVfdHJhaXRzPFQsIEJhc2VIb29rPgote307Ci0K
LS8vTm9uLWFueSBiYXNlIGhvb2sKLXRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIEJhc2VIb29rPgot
c3RydWN0IGdldF9iYXNlX3ZhbHVlX3RyYWl0czxULCBCYXNlSG9vaywgZmFsc2U+Ci0gICA6IGNv
bmNyZXRlX2hvb2tfYmFzZV92YWx1ZV90cmFpdHM8VCwgQmFzZUhvb2s+Ci17fTsKLQotLy8uLi5J
dCdzIGEgZGVmYXVsdCBob29rCi10ZW1wbGF0ZTxjbGFzcyBTdXBwb3NlZFZhbHVlVHJhaXRzLCBj
bGFzcyBUPgotc3RydWN0IHN1cHBvc2VkX3ZhbHVlX3RyYWl0czxTdXBwb3NlZFZhbHVlVHJhaXRz
LCBULCB0cnVlPgoteyAgdHlwZWRlZiB0eXBlbmFtZSBTdXBwb3NlZFZhbHVlVHJhaXRzOjp0ZW1w
bGF0ZSBhcHBseTxUPjo6dHlwZSB0eXBlOyAgfTsKLQotLy8uLi5Ob3QgIGEgZGVmYXVsdCBob29r
Ci10ZW1wbGF0ZTxjbGFzcyBTdXBwb3NlZFZhbHVlVHJhaXRzLCBjbGFzcyBUPgotc3RydWN0IHN1
cHBvc2VkX3ZhbHVlX3RyYWl0czxTdXBwb3NlZFZhbHVlVHJhaXRzLCBULCBmYWxzZT4KLXsgIHR5
cGVkZWYgU3VwcG9zZWRWYWx1ZVRyYWl0cyB0eXBlOyAgIH07Ci0KLS8vLi4uSXQncyBhIGJhc2Ug
aG9vawotdGVtcGxhdGU8Y2xhc3MgQmFzZUhvb2ssIGNsYXNzIFQ+Ci1zdHJ1Y3Qgc3VwcG9zZWRf
YmFzZV92YWx1ZV90cmFpdHM8QmFzZUhvb2ssIFQsIHRydWU+Ci0gICA6IGdldF9iYXNlX3ZhbHVl
X3RyYWl0czxULCBCYXNlSG9vaz4KLXt9OwotCi0vLy4uLk5vdCBhIGJhc2UgaG9vaywgdHJ5IGlm
IGl0J3MgYSBtZW1iZXIgb3IgdmFsdWVfdHJhaXRzCi10ZW1wbGF0ZTxjbGFzcyBTdXBwb3NlZFZh
bHVlVHJhaXRzLCBjbGFzcyBUPgotc3RydWN0IHN1cHBvc2VkX2Jhc2VfdmFsdWVfdHJhaXRzPFN1
cHBvc2VkVmFsdWVUcmFpdHMsIFQsIGZhbHNlPgotICAgOiBzdXBwb3NlZF9tZW1iZXJfdmFsdWVf
dHJhaXRzPFN1cHBvc2VkVmFsdWVUcmFpdHM+Ci17fTsKLQotLy8uLi5JdCdzIGEgbWVtYmVyIGhv
b2sKLXRlbXBsYXRlPGNsYXNzIE1lbWJlckhvb2s+Ci1zdHJ1Y3Qgc3VwcG9zZWRfbWVtYmVyX3Zh
bHVlX3RyYWl0czxNZW1iZXJIb29rLCB0cnVlPgotICAgOiBnZXRfbWVtYmVyX3ZhbHVlX3RyYWl0
czxNZW1iZXJIb29rPgote307Ci0KLS8vLi4uTm90IGEgbWVtYmVyIGhvb2sKLXRlbXBsYXRlPGNs
YXNzIFN1cHBvc2VkVmFsdWVUcmFpdHM+Ci1zdHJ1Y3Qgc3VwcG9zZWRfbWVtYmVyX3ZhbHVlX3Ry
YWl0czxTdXBwb3NlZFZhbHVlVHJhaXRzLCBmYWxzZT4KLSAgIDogYW55X29yX2NvbmNyZXRlX3Zh
bHVlX3RyYWl0czxTdXBwb3NlZFZhbHVlVHJhaXRzPgote307Ci0KLXRlbXBsYXRlPGNsYXNzIEFu
eVRvU29tZUhvb2tfUHJvdG9WYWx1ZVRyYWl0cz4KLXN0cnVjdCBhbnlfb3JfY29uY3JldGVfdmFs
dWVfdHJhaXRzPEFueVRvU29tZUhvb2tfUHJvdG9WYWx1ZVRyYWl0cywgdHJ1ZT4KLXsKLSAgIC8v
QSBob29rIG5vZGUgKG5vbi1iYXNlLCBlLmcuOiBtZW1iZXIgb3Igb3RoZXIgdmFsdWUgdHJhaXRz
Ci0gICB0eXBlZGVmIHR5cGVuYW1lIEFueVRvU29tZUhvb2tfUHJvdG9WYWx1ZVRyYWl0czo6YmFz
aWNfaG9va190ICAgICAgICBiYXNpY19ob29rX3Q7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHBvaW50
ZXJfcmViaW5kCi0gICAgICA8dHlwZW5hbWUgYmFzaWNfaG9va190Ojpub2RlX3B0ciwgdm9pZD46
OnR5cGUgICAgICAgICAgICAgICAgICAgICB2b2lkX3BvaW50ZXI7Ci0gICB0eXBlZGVmIHR5cGVu
YW1lIEFueVRvU29tZUhvb2tfUHJvdG9WYWx1ZVRyYWl0czo6dGVtcGxhdGUKLSAgICAgIG5vZGVf
dHJhaXRzX2Zyb21fdm9pZHB0cjx2b2lkX3BvaW50ZXI+Ojp0eXBlICAgICAgICAgICAgICAgICAg
ICAgIGFueV9ub2RlX3RyYWl0czsKLQotICAgc3RydWN0IHR5cGUgOiBiYXNpY19ob29rX3QKLSAg
IHsKLSAgICAgIHR5cGVkZWYgYW55X25vZGVfdHJhaXRzIG5vZGVfdHJhaXRzOwotICAgfTsKLX07
Ci0KLXRlbXBsYXRlPGNsYXNzIFN1cHBvc2VkVmFsdWVUcmFpdHM+Ci1zdHJ1Y3QgYW55X29yX2Nv
bmNyZXRlX3ZhbHVlX3RyYWl0czxTdXBwb3NlZFZhbHVlVHJhaXRzLCBmYWxzZT4KLXsKLSAgIHR5
cGVkZWYgU3VwcG9zZWRWYWx1ZVRyYWl0cyB0eXBlOwotfTsKLQotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gIGdldF92YWx1ZV90cmFpdHMgLyBnZXRfbm9kZV90
cmFpdHMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotdGVtcGxh
dGU8Y2xhc3MgVCwgY2xhc3MgU3VwcG9zZWRWYWx1ZVRyYWl0cz4KLXN0cnVjdCBnZXRfdmFsdWVf
dHJhaXRzCi0gICA6IHN1cHBvc2VkX2Jhc2VfdmFsdWVfdHJhaXRzPHR5cGVuYW1lIHN1cHBvc2Vk
X3ZhbHVlX3RyYWl0czxTdXBwb3NlZFZhbHVlVHJhaXRzLCBUPjo6dHlwZSwgVD4KLXt9OwotCi10
ZW1wbGF0ZTxjbGFzcyBTdXBwb3NlZFZhbHVlVHJhaXRzPgotc3RydWN0IGdldF9ub2RlX3RyYWl0
cwotewotICAgdHlwZWRlZiB0eXBlbmFtZSBnZXRfdmFsdWVfdHJhaXRzPHZvaWQsIFN1cHBvc2Vk
VmFsdWVUcmFpdHM+Ojp0eXBlOjpub2RlX3RyYWl0cyB0eXBlOwotfTsKLQotfSAgLy9uYW1lc3Bh
Y2UgZGV0YWlsewotCi0jZW5kaWYgICAvL0JPT1NUX0lOVFJVU0lWRV9ET1hZR0VOX0lOVk9LRUQK
LQotfSAgLy9uYW1lc3BhY2UgaW50cnVzaXZlIHsKLX0gIC8vbmFtZXNwYWNlIGJvb3N0IHsKLQot
I2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvY29uZmlnX2VuZC5ocHA+Ci0KLSNlbmRp
ZiAgIC8vI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVfREVUQUlMX0dFVF9WQUxVRV9UUkFJVFNfSFBQ
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9p
bnRydXNpdmUvZGV0YWlsL2hvb2tfdHJhaXRzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvaG9va190cmFpdHMuaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTE2MDYxYTU0MzZkNjM5YWRjOGEwNmYzODc2NmVk
ZDIwZjA1ZDE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRh
aWwvaG9va190cmFpdHMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLwotLy8gKEMpIENvcHlyaWdodCBJb24gR2F6dGFuYWdhICAyMDA2
LTIwMTQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5z
ZSwgVmVyc2lvbiAxLjAuCi0vLyAgICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8w
LnR4dCBvciBjb3B5IGF0Ci0vLyAgICAgICAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvaW50cnVzaXZl
IGZvciBkb2N1bWVudGF0aW9uLgotLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNpZm5kZWYg
Qk9PU1RfSU5UUlVTSVZFX0RFVEFJTF9IT09LX1RSQUlUU19IUFAKLSNkZWZpbmUgQk9PU1RfSU5U
UlVTSVZFX0RFVEFJTF9IT09LX1RSQUlUU19IUFAKLQotI2lmbmRlZiBCT09TVF9DT05GSUdfSFBQ
Ci0jICBpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJP
T1NUX0hBU19QUkFHTUFfT05DRSkKLSMgIHByYWdtYSBvbmNlCi0jZW5kaWYKLQotI2luY2x1ZGUg
PGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
aW50cnVzaXZlL3BvaW50ZXJfdHJhaXRzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUv
ZGV0YWlsL3BhcmVudF9mcm9tX21lbWJlci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZl
L2xpbmtfbW9kZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9tcGwuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvdG9fcmF3X3BvaW50ZXIuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvbm9kZV9ob2xkZXIuaHBwPgotCi1uYW1l
c3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIGludHJ1c2l2ZSB7Ci0KLXRlbXBsYXRlPGNsYXNzIFQs
IGNsYXNzIE5vZGVQdHIsIGNsYXNzIFRhZywgdW5zaWduZWQgaW50IFR5cGU+Ci1zdHJ1Y3QgYmh0
cmFpdHNfYmFzZQotewotICAgcHVibGljOgotICAgdHlwZWRlZiBOb2RlUHRyICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZV9wdHI7Ci0gICB0eXBl
ZGVmIHR5cGVuYW1lIHBvaW50ZXJfdHJhaXRzPG5vZGVfcHRyPjo6ZWxlbWVudF90eXBlICAgICAg
ICAgICBub2RlOwotICAgdHlwZWRlZiBub2RlX2hvbGRlcjxub2RlLCBUYWcsIFR5cGU+ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZV9ob2xkZXJfdHlwZTsKLSAgIHR5cGVkZWYgVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlX3R5cGU7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHBvaW50ZXJfdHJhaXRzPG5vZGVfcHRyPjo6
Ci0gICAgICB0ZW1wbGF0ZSByZWJpbmRfcG9pbnRlcjxjb25zdCBub2RlPjo6dHlwZSAgICAgICAg
ICAgICAgICAgICAgICBjb25zdF9ub2RlX3B0cjsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgcG9pbnRl
cl90cmFpdHM8bm9kZV9wdHI+OjoKLSAgICAgIHRlbXBsYXRlIHJlYmluZF9wb2ludGVyPFQ+Ojp0
eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7Ci0gICB0eXBlZGVmIHR5
cGVuYW1lIHBvaW50ZXJfdHJhaXRzPG5vZGVfcHRyPjo6Ci0gICAgICB0ZW1wbGF0ZSByZWJpbmRf
cG9pbnRlcjxjb25zdCBUPjo6dHlwZSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9wb2lu
dGVyOwotICAgLy90eXBlZGVmIHR5cGVuYW1lIHBvaW50ZXJfdHJhaXRzPHBvaW50ZXI+OjpyZWZl
cmVuY2UgICAgICAgICAgICAgICByZWZlcmVuY2U7Ci0gICAvL3R5cGVkZWYgdHlwZW5hbWUgcG9p
bnRlcl90cmFpdHM8Y29uc3RfcG9pbnRlcj46OnJlZmVyZW5jZSAgICAgICAgIGNvbnN0X3JlZmVy
ZW5jZTsKLSAgIHR5cGVkZWYgVCAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKLSAgIHR5cGVkZWYgY29uc3QgVCAmICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5j
ZTsKLSAgIHR5cGVkZWYgbm9kZV9ob2xkZXJfdHlwZSAmICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVfaG9sZGVyX3JlZmVyZW5jZTsKLSAgIHR5cGVkZWYgY29uc3Qg
bm9kZV9ob2xkZXJfdHlwZSAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
X25vZGVfaG9sZGVyX3JlZmVyZW5jZTsKLSAgIHR5cGVkZWYgbm9kZSYgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVfcmVmZXJlbmNlOwotICAg
dHlwZWRlZiBjb25zdCBub2RlICYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Rfbm9kZV9yZWZlcmVuY2U7Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JD
RUlOTElORSBzdGF0aWMgcG9pbnRlciB0b192YWx1ZV9wdHIoY29uc3Qgbm9kZV9wdHIgJiBuKQot
ICAgewotICAgICAgcmV0dXJuIHBvaW50ZXJfdHJhaXRzPHBvaW50ZXI+Ojpwb2ludGVyX3RvCi0g
ICAgICAgICAoc3RhdGljX2Nhc3Q8cmVmZXJlbmNlPihzdGF0aWNfY2FzdDxub2RlX2hvbGRlcl9y
ZWZlcmVuY2U+KCpuKSkpOwotICAgfQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUg
c3RhdGljIGNvbnN0X3BvaW50ZXIgdG9fdmFsdWVfcHRyKGNvbnN0IGNvbnN0X25vZGVfcHRyICYg
bikKLSAgIHsKLSAgICAgIHJldHVybiBwb2ludGVyX3RyYWl0czxjb25zdF9wb2ludGVyPjo6cG9p
bnRlcl90bwotICAgICAgICAgKHN0YXRpY19jYXN0PGNvbnN0X3JlZmVyZW5jZT4oc3RhdGljX2Nh
c3Q8Y29uc3Rfbm9kZV9ob2xkZXJfcmVmZXJlbmNlPigqbikpKTsKLSAgIH0KLQotICAgQk9PU1Rf
SU5UUlVTSVZFX0ZPUkNFSU5MSU5FIHN0YXRpYyBub2RlX3B0ciB0b19ub2RlX3B0cihyZWZlcmVu
Y2UgdmFsdWUpCi0gICB7Ci0gICAgICByZXR1cm4gcG9pbnRlcl90cmFpdHM8bm9kZV9wdHI+Ojpw
b2ludGVyX3RvCi0gICAgICAgICAoc3RhdGljX2Nhc3Q8bm9kZV9yZWZlcmVuY2U+KHN0YXRpY19j
YXN0PG5vZGVfaG9sZGVyX3JlZmVyZW5jZT4odmFsdWUpKSk7Ci0gICB9Ci0KLSAgIEJPT1NUX0lO
VFJVU0lWRV9GT1JDRUlOTElORSBzdGF0aWMgY29uc3Rfbm9kZV9wdHIgdG9fbm9kZV9wdHIoY29u
c3RfcmVmZXJlbmNlIHZhbHVlKQotICAgewotICAgICAgcmV0dXJuIHBvaW50ZXJfdHJhaXRzPGNv
bnN0X25vZGVfcHRyPjo6cG9pbnRlcl90bwotICAgICAgICAgKHN0YXRpY19jYXN0PGNvbnN0X25v
ZGVfcmVmZXJlbmNlPihzdGF0aWNfY2FzdDxjb25zdF9ub2RlX2hvbGRlcl9yZWZlcmVuY2U+KHZh
bHVlKSkpOwotICAgfQotfTsKLQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgTm9kZVRyYWl0cywg
bGlua19tb2RlX3R5cGUgTGlua01vZGUsIGNsYXNzIFRhZywgdW5zaWduZWQgaW50IFR5cGU+Ci1z
dHJ1Y3QgYmh0cmFpdHMKLSAgIDogcHVibGljIGJodHJhaXRzX2Jhc2U8VCwgdHlwZW5hbWUgTm9k
ZVRyYWl0czo6bm9kZV9wdHIsIFRhZywgVHlwZT4KLXsKLSAgIHN0YXRpYyBjb25zdCBsaW5rX21v
ZGVfdHlwZSBsaW5rX21vZGUgPSBMaW5rTW9kZTsKLSAgIHR5cGVkZWYgTm9kZVRyYWl0cyBub2Rl
X3RyYWl0czsKLX07Ci0KLQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgSG9vaywgSG9vayBUOjoq
IFA+Ci1zdHJ1Y3QgbWh0cmFpdHMKLXsKLSAgIHB1YmxpYzoKLSAgIHR5cGVkZWYgSG9vayAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tfdHlw
ZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgaG9va190eXBlOjpob29rdGFnczo6bm9kZV90cmFpdHMg
ICAgICAgICAgICAgICAgIG5vZGVfdHJhaXRzOwotICAgdHlwZWRlZiB0eXBlbmFtZSBub2RlX3Ry
YWl0czo6bm9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTsKLSAgIHR5cGVk
ZWYgVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlX3R5cGU7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIG5vZGVfdHJhaXRzOjpub2RlX3B0
ciAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlX3B0cjsKLSAgIHR5cGVkZWYgdHlwZW5h
bWUgbm9kZV90cmFpdHM6OmNvbnN0X25vZGVfcHRyICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
X25vZGVfcHRyOwotICAgdHlwZWRlZiB0eXBlbmFtZSBwb2ludGVyX3RyYWl0czxub2RlX3B0cj46
OgotICAgICAgdGVtcGxhdGUgcmViaW5kX3BvaW50ZXI8VD46OnR5cGUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcG9pbnRlcjsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgcG9pbnRlcl90cmFp
dHM8bm9kZV9wdHI+OjoKLSAgICAgIHRlbXBsYXRlIHJlYmluZF9wb2ludGVyPGNvbnN0IFQ+Ojp0
eXBlICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X3BvaW50ZXI7Ci0gICB0eXBlZGVmIFQg
JiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWZlcmVuY2U7Ci0gICB0eXBlZGVmIGNvbnN0IFQgJiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7Ci0gICB0eXBlZGVmIG5vZGUm
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
X3JlZmVyZW5jZTsKLSAgIHR5cGVkZWYgY29uc3Qgbm9kZSAmICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X25vZGVfcmVmZXJlbmNlOwotICAgdHlwZWRl
ZiBob29rX3R5cGUmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaG9va19yZWZlcmVuY2U7Ci0gICB0eXBlZGVmIGNvbnN0IGhvb2tfdHlwZSAmICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9ob29rX3JlZmVyZW5jZTsKLQot
ICAgc3RhdGljIGNvbnN0IGxpbmtfbW9kZV90eXBlIGxpbmtfbW9kZSA9IEhvb2s6Omhvb2t0YWdz
OjpsaW5rX21vZGU7Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBzdGF0aWMgbm9k
ZV9wdHIgdG9fbm9kZV9wdHIocmVmZXJlbmNlIHZhbHVlKQotICAgewotICAgICAgcmV0dXJuIHBv
aW50ZXJfdHJhaXRzPG5vZGVfcHRyPjo6cG9pbnRlcl90bwotICAgICAgICAgKHN0YXRpY19jYXN0
PG5vZGVfcmVmZXJlbmNlPihzdGF0aWNfY2FzdDxob29rX3JlZmVyZW5jZT4odmFsdWUuKlApKSk7
Ci0gICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBzdGF0aWMgY29uc3Rfbm9k
ZV9wdHIgdG9fbm9kZV9wdHIoY29uc3RfcmVmZXJlbmNlIHZhbHVlKQotICAgewotICAgICAgcmV0
dXJuIHBvaW50ZXJfdHJhaXRzPGNvbnN0X25vZGVfcHRyPjo6cG9pbnRlcl90bwotICAgICAgICAg
KHN0YXRpY19jYXN0PGNvbnN0X25vZGVfcmVmZXJlbmNlPihzdGF0aWNfY2FzdDxjb25zdF9ob29r
X3JlZmVyZW5jZT4odmFsdWUuKlApKSk7Ci0gICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JD
RUlOTElORSBzdGF0aWMgcG9pbnRlciB0b192YWx1ZV9wdHIoY29uc3Qgbm9kZV9wdHIgJiBuKQot
ICAgewotICAgICAgcmV0dXJuIHBvaW50ZXJfdHJhaXRzPHBvaW50ZXI+Ojpwb2ludGVyX3RvCi0g
ICAgICAgICAoKmRldGFpbDo6cGFyZW50X2Zyb21fbWVtYmVyPFQsIEhvb2s+Ci0gICAgICAgICAg
ICAoc3RhdGljX2Nhc3Q8SG9vayo+KGJvb3N0OjppbnRydXNpdmU6OmRldGFpbDo6dG9fcmF3X3Bv
aW50ZXIobikpLCBQKSk7Ci0gICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBz
dGF0aWMgY29uc3RfcG9pbnRlciB0b192YWx1ZV9wdHIoY29uc3QgY29uc3Rfbm9kZV9wdHIgJiBu
KQotICAgewotICAgICAgcmV0dXJuIHBvaW50ZXJfdHJhaXRzPGNvbnN0X3BvaW50ZXI+Ojpwb2lu
dGVyX3RvCi0gICAgICAgICAoKmRldGFpbDo6cGFyZW50X2Zyb21fbWVtYmVyPFQsIEhvb2s+Ci0g
ICAgICAgICAgICAoc3RhdGljX2Nhc3Q8Y29uc3QgSG9vayo+KGJvb3N0OjppbnRydXNpdmU6OmRl
dGFpbDo6dG9fcmF3X3BvaW50ZXIobikpLCBQKSk7Ci0gICB9Ci19OwotCi0KLXRlbXBsYXRlPGNs
YXNzIEZ1bmN0b3I+Ci1zdHJ1Y3QgZmh0cmFpdHMKLXsKLSAgIHB1YmxpYzoKLSAgIHR5cGVkZWYg
dHlwZW5hbWUgRnVuY3Rvcjo6aG9va190eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhvb2tfdHlwZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgRnVuY3Rvcjo6aG9va19wdHIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tfcHRyOwotICAgdHlwZWRlZiB0eXBlbmFtZSBG
dW5jdG9yOjpjb25zdF9ob29rX3B0ciAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaG9v
a19wdHI7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIGhvb2tfdHlwZTo6aG9va3RhZ3M6Om5vZGVfdHJh
aXRzICAgICAgICAgICAgICAgICBub2RlX3RyYWl0czsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgbm9k
ZV90cmFpdHM6Om5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU7Ci0gICB0
eXBlZGVmIHR5cGVuYW1lIEZ1bmN0b3I6OnZhbHVlX3R5cGUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZV90eXBlOwotICAgdHlwZWRlZiB0eXBlbmFtZSBub2RlX3RyYWl0czo6bm9k
ZV9wdHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZV9wdHI7Ci0gICB0eXBlZGVmIHR5
cGVuYW1lIG5vZGVfdHJhaXRzOjpjb25zdF9ub2RlX3B0ciAgICAgICAgICAgICAgICAgICAgICBj
b25zdF9ub2RlX3B0cjsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgcG9pbnRlcl90cmFpdHM8bm9kZV9w
dHI+OjoKLSAgICAgIHRlbXBsYXRlIHJlYmluZF9wb2ludGVyPHZhbHVlX3R5cGU+Ojp0eXBlICAg
ICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHBvaW50ZXJf
dHJhaXRzPG5vZGVfcHRyPjo6Ci0gICAgICB0ZW1wbGF0ZSByZWJpbmRfcG9pbnRlcjxjb25zdCB2
YWx1ZV90eXBlPjo6dHlwZSAgICAgICAgICAgICAgICBjb25zdF9wb2ludGVyOwotICAgdHlwZWRl
ZiB2YWx1ZV90eXBlICYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVmZXJlbmNlOwotICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlICYgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlOwotICAgc3RhdGljIGNv
bnN0IGxpbmtfbW9kZV90eXBlIGxpbmtfbW9kZSA9IGhvb2tfdHlwZTo6aG9va3RhZ3M6Omxpbmtf
bW9kZTsKLQotICAgc3RhdGljIG5vZGVfcHRyIHRvX25vZGVfcHRyKHJlZmVyZW5jZSB2YWx1ZSkK
LSAgIHsgIHJldHVybiBzdGF0aWNfY2FzdDxub2RlKj4oYm9vc3Q6OmludHJ1c2l2ZTo6ZGV0YWls
Ojp0b19yYXdfcG9pbnRlcihGdW5jdG9yOjp0b19ob29rX3B0cih2YWx1ZSkpKTsgIH0KLQotICAg
c3RhdGljIGNvbnN0X25vZGVfcHRyIHRvX25vZGVfcHRyKGNvbnN0X3JlZmVyZW5jZSB2YWx1ZSkK
LSAgIHsgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBub2RlKj4oYm9vc3Q6OmludHJ1c2l2ZTo6
ZGV0YWlsOjp0b19yYXdfcG9pbnRlcihGdW5jdG9yOjp0b19ob29rX3B0cih2YWx1ZSkpKTsgIH0K
LQotICAgc3RhdGljIHBvaW50ZXIgdG9fdmFsdWVfcHRyKGNvbnN0IG5vZGVfcHRyICYgbikKLSAg
IHsgIHJldHVybiBGdW5jdG9yOjp0b192YWx1ZV9wdHIodG9faG9va19wdHIobikpOyAgfQotCi0g
ICBzdGF0aWMgY29uc3RfcG9pbnRlciB0b192YWx1ZV9wdHIoY29uc3QgY29uc3Rfbm9kZV9wdHIg
JiBuKQotICAgeyAgcmV0dXJuIEZ1bmN0b3I6OnRvX3ZhbHVlX3B0cih0b19ob29rX3B0cihuKSk7
ICB9Ci0KLSAgIHByaXZhdGU6Ci0gICBzdGF0aWMgaG9va19wdHIgdG9faG9va19wdHIoY29uc3Qg
bm9kZV9wdHIgJiBuKQotICAgeyAgcmV0dXJuIGhvb2tfcHRyKCYqc3RhdGljX2Nhc3Q8aG9va190
eXBlKj4oJipuKSk7ICB9Ci0KLSAgIHN0YXRpYyBjb25zdF9ob29rX3B0ciB0b19ob29rX3B0cihj
b25zdCBjb25zdF9ub2RlX3B0ciAmIG4pCi0gICB7ICByZXR1cm4gY29uc3RfaG9va19wdHIoJipz
dGF0aWNfY2FzdDxjb25zdCBob29rX3R5cGUqPigmKm4pKTsgIH0KLX07Ci0KLQotfSAvL25hbWVz
cGFjZSBpbnRydXNpdmUKLX0gLy9uYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vQk9PU1RfSU5U
UlVTSVZFX0RFVEFJTF9IT09LX1RSQUlUU19IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvaWl0ZXJhdG9yLmhw
cCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9k
ZXRhaWwvaWl0ZXJhdG9yLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFiMWRl
MmJiMTI0MGZkOTgwNDM5MjVjNTVlNjg2YmJjZTRhNjc4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL2lpdGVyYXRvci5ocHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjIgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAoQykgQ29weXJp
Z2h0IElvbiBHYXp0YW5hZ2EgIDIwMDYtMjAxNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAgIChTZWUgYWNjb21w
YW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICAgICAgICAgIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5i
b29zdC5vcmcvbGlicy9pbnRydXNpdmUgZm9yIGRvY3VtZW50YXRpb24uCi0vLwotLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLQotI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVfREVUQUlMX0lJVEVSQVRPUl9I
UFAKLSNkZWZpbmUgQk9PU1RfSU5UUlVTSVZFX0RFVEFJTF9JSVRFUkFUT1JfSFBQCi0KLSNpZm5k
ZWYgQk9PU1RfQ09ORklHX0hQUAotIyAgaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNlbmRp
ZgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01BX09OQ0UpCi0jICBwcmFnbWEgb25jZQot
I2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL3dvcmthcm91bmQuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvaXRlcmF0b3IuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L2ludHJ1c2l2ZS9wb2ludGVyX3RyYWl0cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
aW50cnVzaXZlL2RldGFpbC9tcGwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRh
aWwvaXNfc3RhdGVmdWxfdmFsdWVfdHJhaXRzLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5h
bWVzcGFjZSBpbnRydXNpdmUgewotCi10ZW1wbGF0ZTxjbGFzcyBWYWx1ZVRyYWl0cz4KLXN0cnVj
dCB2YWx1ZV90cmFpdHNfcG9pbnRlcnMKLXsKLSAgIHR5cGVkZWYgQk9PU1RfSU5UUlVTSVZFX09C
VEFJTl9UWVBFX1dJVEhfREVGQVVMVAotICAgICAgKGJvb3N0OjppbnRydXNpdmU6OmRldGFpbDo6
Ci0gICAgICAsIFZhbHVlVHJhaXRzLCB2YWx1ZV90cmFpdHNfcHRyCi0gICAgICAsIHR5cGVuYW1l
IGJvb3N0OjppbnRydXNpdmU6OnBvaW50ZXJfdHJhaXRzPHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpu
b2RlX3RyYWl0czo6bm9kZV9wdHI+Ojp0ZW1wbGF0ZQotICAgICAgICAgcmViaW5kX3BvaW50ZXI8
VmFsdWVUcmFpdHM+Ojp0eXBlKSAgIHZhbHVlX3RyYWl0c19wdHI7Ci0KLSAgIHR5cGVkZWYgdHlw
ZW5hbWUgYm9vc3Q6OmludHJ1c2l2ZTo6cG9pbnRlcl90cmFpdHM8dmFsdWVfdHJhaXRzX3B0cj46
OnRlbXBsYXRlCi0gICAgICByZWJpbmRfcG9pbnRlcjxWYWx1ZVRyYWl0cyBjb25zdD46OnR5cGUg
Y29uc3RfdmFsdWVfdHJhaXRzX3B0cjsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFZhbHVlVHJhaXRz
LCBib29sIElzQ29uc3QsIGNsYXNzIENhdGVnb3J5Pgotc3RydWN0IGlpdGVyYXRvcgotewotICAg
dHlwZWRlZiBWYWx1ZVRyYWl0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVfdHJhaXRzOwotICAgdHlwZWRlZiB0eXBlbmFtZSB2YWx1ZV90cmFpdHM6Om5vZGVf
dHJhaXRzICAgICAgICAgICAgICAgICAgbm9kZV90cmFpdHM7Ci0gICB0eXBlZGVmIHR5cGVuYW1l
IG5vZGVfdHJhaXRzOjpub2RlICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOwotICAgdHlw
ZWRlZiB0eXBlbmFtZSBub2RlX3RyYWl0czo6bm9kZV9wdHIgICAgICAgICAgICAgICAgICAgICAg
bm9kZV9wdHI7Ci0gICB0eXBlZGVmIDo6Ym9vc3Q6OmludHJ1c2l2ZTo6cG9pbnRlcl90cmFpdHM8
bm9kZV9wdHI+ICAgICAgICBub2RlcG9pbnRlcl90cmFpdHNfdDsKLSAgIHR5cGVkZWYgdHlwZW5h
bWUgbm9kZXBvaW50ZXJfdHJhaXRzX3Q6OnRlbXBsYXRlCi0gICAgICByZWJpbmRfcG9pbnRlcjx2
b2lkPjo6dHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkX3BvaW50ZXI7Ci0g
ICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjp2YWx1ZV90eXBlICAgICAgICAgICAgICAg
ICAgICB2YWx1ZV90eXBlOwotICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6cG9pbnRl
ciAgICAgICAgICAgICAgICAgICAgICAgbm9uY29uc3RfcG9pbnRlcjsKLSAgIHR5cGVkZWYgdHlw
ZW5hbWUgVmFsdWVUcmFpdHM6OmNvbnN0X3BvaW50ZXIgICAgICAgICAgICAgICAgIHllc2NvbnN0
X3BvaW50ZXI7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6OmludHJ1c2l2ZTo6cG9pbnRl
cl90cmFpdHMKLSAgICAgIDxub25jb25zdF9wb2ludGVyPjo6cmVmZXJlbmNlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vbmNvbnN0X3JlZmVyZW5jZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUg
Ojpib29zdDo6aW50cnVzaXZlOjpwb2ludGVyX3RyYWl0cwotICAgICAgPHllc2NvbnN0X3BvaW50
ZXI+OjpyZWZlcmVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzY29uc3RfcmVmZXJl
bmNlOwotICAgdHlwZWRlZiB0eXBlbmFtZSBub2RlcG9pbnRlcl90cmFpdHNfdDo6ZGlmZmVyZW5j
ZV90eXBlICAgICAgZGlmZmVyZW5jZV90eXBlOwotICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6
OmlmX2MKLSAgICAgIDxJc0NvbnN0LCB5ZXNjb25zdF9wb2ludGVyLCBub25jb25zdF9wb2ludGVy
Pjo6dHlwZSAgICAgIHBvaW50ZXI7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6aWZfYwot
ICAgICAgPElzQ29uc3QsIHllc2NvbnN0X3JlZmVyZW5jZSwgbm9uY29uc3RfcmVmZXJlbmNlPjo6
dHlwZSAgcmVmZXJlbmNlOwotICAgdHlwZWRlZiBpdGVyYXRvcgotICAgICAgICAgPCBDYXRlZ29y
eQotICAgICAgICAgLCB2YWx1ZV90eXBlCi0gICAgICAgICAsIGRpZmZlcmVuY2VfdHlwZQotICAg
ICAgICAgLCBwb2ludGVyCi0gICAgICAgICAsIHJlZmVyZW5jZQotICAgICAgICAgPiBpdGVyYXRv
cl90eXBlOwotICAgdHlwZWRlZiB0eXBlbmFtZSB2YWx1ZV90cmFpdHNfcG9pbnRlcnMKLSAgICAg
IDxWYWx1ZVRyYWl0cz46OnZhbHVlX3RyYWl0c19wdHIgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlX3RyYWl0c19wdHI7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX3RyYWl0c19wb2lu
dGVycwotICAgICAgPFZhbHVlVHJhaXRzPjo6Y29uc3RfdmFsdWVfdHJhaXRzX3B0ciAgICAgICAg
ICAgICAgICAgICAgY29uc3RfdmFsdWVfdHJhaXRzX3B0cjsKLSAgIHN0YXRpYyBjb25zdCBib29s
IHN0YXRlZnVsX3ZhbHVlX3RyYWl0cyA9Ci0gICAgICBkZXRhaWw6OmlzX3N0YXRlZnVsX3ZhbHVl
X3RyYWl0czx2YWx1ZV90cmFpdHM+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIE5vZGVQ
dHIsIGNsYXNzIFN0b3JlZFBvaW50ZXIsIGJvb2wgU3RhdGVmdWxWYWx1ZVRyYWl0cyA9IHRydWU+
Ci1zdHJ1Y3QgaWl0ZXJhdG9yX21lbWJlcnMKLXsKLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNF
SU5MSU5FIGlpdGVyYXRvcl9tZW1iZXJzKCkKLSAgICAgIDogbm9kZXB0cl8oKS8vVmFsdWUgaW5p
dGlhbGl6YXRpb24gdG8gYWNoaWV2ZSAibnVsbCBpdGVyYXRvcnMiIChOMzY0NCkKLSAgIHt9Ci0K
LSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBpaXRlcmF0b3JfbWVtYmVycyhjb25zdCBO
b2RlUHRyICZuX3B0ciwgY29uc3QgU3RvcmVkUG9pbnRlciAmZGF0YSkKLSAgICAgIDogIG5vZGVw
dHJfKG5fcHRyKSwgcHRyXyhkYXRhKQotICAge30KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNF
SU5MSU5FIFN0b3JlZFBvaW50ZXIgZ2V0X3B0cigpIGNvbnN0Ci0gICB7ICByZXR1cm4gcHRyXzsg
IH0KLQotICAgTm9kZVB0ciBub2RlcHRyXzsKLSAgIFN0b3JlZFBvaW50ZXIgcHRyXzsKLX07Ci0K
LXRlbXBsYXRlPGNsYXNzIE5vZGVQdHIsIGNsYXNzIFN0b3JlZFBvaW50ZXI+Ci1zdHJ1Y3QgaWl0
ZXJhdG9yX21lbWJlcnM8Tm9kZVB0ciwgU3RvcmVkUG9pbnRlciwgZmFsc2U+Ci17Ci0gICBCT09T
VF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgaWl0ZXJhdG9yX21lbWJlcnMoKQotICAgICAgOiBub2Rl
cHRyXygpLy9WYWx1ZSBpbml0aWFsaXphdGlvbiB0byBhY2hpZXZlICJudWxsIGl0ZXJhdG9ycyIg
KE4zNjQ0KQotICAge30KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIGlpdGVyYXRv
cl9tZW1iZXJzKGNvbnN0IE5vZGVQdHIgJm5fcHRyLCBjb25zdCBTdG9yZWRQb2ludGVyICYpCi0g
ICAgICA6IG5vZGVwdHJfKG5fcHRyKQotICAge30KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNF
SU5MSU5FIFN0b3JlZFBvaW50ZXIgZ2V0X3B0cigpIGNvbnN0Ci0gICB7ICByZXR1cm4gU3RvcmVk
UG9pbnRlcigpOyAgfQotCi0gICBOb2RlUHRyIG5vZGVwdHJfOwotfTsKLQotfSAvL25hbWVzcGFj
ZSBpbnRydXNpdmUKLX0gLy9uYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vQk9PU1RfSU5UUlVT
SVZFX0RFVEFJTF9JSVRFUkFUT1JfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL2lzX3N0YXRlZnVsX3ZhbHVl
X3RyYWl0cy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9p
bnRydXNpdmUvZGV0YWlsL2lzX3N0YXRlZnVsX3ZhbHVlX3RyYWl0cy5ocHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGU0M2Y2ZDM0MGFjYzlhMjU5MTc5ZDczOWMyZTk5MGQ3ODk0OWFl
ZTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9pc19z
dGF0ZWZ1bF92YWx1ZV90cmFpdHMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAot
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAoQykgQ29weXJpZ2h0IElvbiBHYXp0YW5hZ2Eg
IDIwMDktMjAxMy4KLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUg
TGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAgICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgICAgICAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvaW50
cnVzaXZlIGZvciBkb2N1bWVudGF0aW9uLgotLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNp
Zm5kZWYgQk9PU1RfSU5UUlVTSVZFX0RFVEFJTF9JU19TVEFURUZVTF9WQUxVRV9UUkFJVFNfSFBQ
Ci0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxfSVNfU1RBVEVGVUxfVkFMVUVfVFJBSVRT
X0hQUAotCi0jaWZuZGVmIEJPT1NUX0NPTkZJR19IUFAKLSMgIGluY2x1ZGUgPGJvb3N0L2NvbmZp
Zy5ocHA+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk9PU1RfSEFTX1BSQUdNQV9PTkNFKQotIyAg
cHJhZ21hIG9uY2UKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKF9NU0NfVkVS
IDw9IDEzMTApCi0KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL21wbC5ocHA+Ci0K
LW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgaW50cnVzaXZlIHsKLW5hbWVzcGFjZSBkZXRh
aWwgewotCi10ZW1wbGF0ZTxjbGFzcyBWYWx1ZVRyYWl0cz4KLXN0cnVjdCBpc19zdGF0ZWZ1bF92
YWx1ZV90cmFpdHMKLXsKLSAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gIWRldGFpbDo6aXNf
ZW1wdHk8VmFsdWVUcmFpdHM+Ojp2YWx1ZTsKLX07Ci0KLX19fQotCi0jZWxzZQotCi0jaW5jbHVk
ZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9mdW5jdGlvbl9kZXRlY3Rvci5ocHA+Ci0KLUJPT1NU
X0lOVFJVU0lWRV9DUkVBVEVfRlVOQ1RJT05fREVURUNUT1IodG9fbm9kZV9wdHIsIGJvb3N0X2lu
dHJ1c2l2ZSkKLUJPT1NUX0lOVFJVU0lWRV9DUkVBVEVfRlVOQ1RJT05fREVURUNUT1IodG9fdmFs
dWVfcHRyLCBib29zdF9pbnRydXNpdmUpCi0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2Ug
aW50cnVzaXZlIHsKLW5hbWVzcGFjZSBkZXRhaWwgewotCi10ZW1wbGF0ZTxjbGFzcyBWYWx1ZVRy
YWl0cz4KLXN0cnVjdCBpc19zdGF0ZWZ1bF92YWx1ZV90cmFpdHMKLXsKLSAgIHR5cGVkZWYgdHlw
ZW5hbWUgVmFsdWVUcmFpdHM6Om5vZGVfcHRyICAgICAgIG5vZGVfcHRyOwotICAgdHlwZWRlZiB0
eXBlbmFtZSBWYWx1ZVRyYWl0czo6cG9pbnRlciAgICAgICAgcG9pbnRlcjsKLSAgIHR5cGVkZWYg
dHlwZW5hbWUgVmFsdWVUcmFpdHM6OnZhbHVlX3R5cGUgICAgIHZhbHVlX3R5cGU7Ci0gICB0eXBl
ZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpjb25zdF9ub2RlX3B0ciBjb25zdF9ub2RlX3B0cjsK
LSAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUcmFpdHM6OmNvbnN0X3BvaW50ZXIgIGNvbnN0X3Bv
aW50ZXI7Ci0KLSAgIHR5cGVkZWYgVmFsdWVUcmFpdHMgdmFsdWVfdHJhaXRzOwotCi0gICBzdGF0
aWMgY29uc3QgYm9vbCB2YWx1ZSA9Ci0gICAgICAoYm9vc3Q6OmludHJ1c2l2ZTo6ZnVuY3Rpb25f
ZGV0ZWN0b3I6Ok5vblN0YXRpY0Z1bmN0aW9uID09Ci0gICAgICAgICAoQk9PU1RfSU5UUlVTSVZF
X0RFVEVDVF9GVU5DVElPTihWYWx1ZVRyYWl0cywgYm9vc3RfaW50cnVzaXZlLCBub2RlX3B0ciwg
dG9fbm9kZV9wdHIsICh2YWx1ZV90eXBlJikgKSkpCi0gICAgICB8fAotICAgICAgKGJvb3N0Ojpp
bnRydXNpdmU6OmZ1bmN0aW9uX2RldGVjdG9yOjpOb25TdGF0aWNGdW5jdGlvbiA9PQotICAgICAg
ICAgKEJPT1NUX0lOVFJVU0lWRV9ERVRFQ1RfRlVOQ1RJT04oVmFsdWVUcmFpdHMsIGJvb3N0X2lu
dHJ1c2l2ZSwgcG9pbnRlciwgdG9fdmFsdWVfcHRyLCAobm9kZV9wdHIpICkpKQotICAgICAgfHwK
LSAgICAgIChib29zdDo6aW50cnVzaXZlOjpmdW5jdGlvbl9kZXRlY3Rvcjo6Tm9uU3RhdGljRnVu
Y3Rpb24gPT0KLSAgICAgICAgIChCT09TVF9JTlRSVVNJVkVfREVURUNUX0ZVTkNUSU9OKFZhbHVl
VHJhaXRzLCBib29zdF9pbnRydXNpdmUsIGNvbnN0X25vZGVfcHRyLCB0b19ub2RlX3B0ciwgKGNv
bnN0IHZhbHVlX3R5cGUmKSApKSkKLSAgICAgIHx8Ci0gICAgICAoYm9vc3Q6OmludHJ1c2l2ZTo6
ZnVuY3Rpb25fZGV0ZWN0b3I6Ok5vblN0YXRpY0Z1bmN0aW9uID09Ci0gICAgICAgICAoQk9PU1Rf
SU5UUlVTSVZFX0RFVEVDVF9GVU5DVElPTihWYWx1ZVRyYWl0cywgYm9vc3RfaW50cnVzaXZlLCBj
b25zdF9wb2ludGVyLCB0b192YWx1ZV9wdHIsIChjb25zdF9ub2RlX3B0cikgKSkpCi0gICAgICA7
Ci19OwotCi19fX0KLQotI2VuZGlmCi0KLSNlbmRpZiAgIC8vQGlmbmRlZiBCT09TVF9JTlRSVVNJ
VkVfREVUQUlMX0lTX1NUQVRFRlVMX1ZBTFVFX1RSQUlUU19IUFAKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvaXRl
cmF0b3IuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50
cnVzaXZlL2RldGFpbC9pdGVyYXRvci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDJhZTZhYmI3ZDAzNWUzYWM2ZWE3ZTM5NTc5MjFjNzg1NDVlMWU4NTQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9pdGVyYXRvci5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAoQykg
Q29weXJpZ2h0IElvbiBHYXp0YW5hZ2EgIDIwMTQtMjAxNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAgIChTZWUg
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICAgICAgICAg
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDov
L3d3dy5ib29zdC5vcmcvbGlicy9pbnRydXNpdmUgZm9yIGRvY3VtZW50YXRpb24uCi0vLwotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLQotI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVfREVUQUlMX0lURVJB
VE9SX0hQUAotI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfREVUQUlMX0lURVJBVE9SX0hQUAotCi0j
aWZuZGVmIEJPT1NUX0NPTkZJR19IUFAKLSMgIGluY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0j
ZW5kaWYKLQotI2lmIGRlZmluZWQoQk9PU1RfSEFTX1BSQUdNQV9PTkNFKQotIyAgcHJhZ21hIG9u
Y2UKLSNlbmRpZgotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNp
dmUvZGV0YWlsL3N0ZF9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwv
d29ya2Fyb3VuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbW92ZS9kZXRhaWwvaXRlcmF0b3JfdHJh
aXRzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tb3ZlL2RldGFpbC9tZXRhX3V0aWxzX2NvcmUuaHBw
PgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIGludHJ1c2l2ZSB7Ci0KLXVzaW5nIGJv
b3N0Ojptb3ZlbGliOjppdGVyYXRvcl90cmFpdHM7Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
LyAgICBpdGVyYXRvcgotLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXRlbXBsYXRlPGNsYXNzIENhdGVn
b3J5LCBjbGFzcyBULCBjbGFzcyBEaWZmZXJlbmNlLCBjbGFzcyBQb2ludGVyLCBjbGFzcyBSZWZl
cmVuY2U+Ci1zdHJ1Y3QgaXRlcmF0b3IKLXsKLSAgIHR5cGVkZWYgQ2F0ZWdvcnkgICAgIGl0ZXJh
dG9yX2NhdGVnb3J5OwotICAgdHlwZWRlZiBUICAgICAgICAgICAgdmFsdWVfdHlwZTsKLSAgIHR5
cGVkZWYgRGlmZmVyZW5jZSAgIGRpZmZlcmVuY2VfdHlwZTsKLSAgIHR5cGVkZWYgUG9pbnRlciAg
ICAgIHBvaW50ZXI7Ci0gICB0eXBlZGVmIFJlZmVyZW5jZSAgICByZWZlcmVuY2U7Ci19OwotCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICBpdGVyYXRvcl9b
ZGlzfGVuXWFibGVfaWZfdGFnCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi10ZW1wbGF0ZTxjbGFzcyBJLCBjbGFzcyBUYWcsIGNsYXNzIFIgPSB2b2lkPgotc3RydWN0
IGl0ZXJhdG9yX2VuYWJsZV9pZl90YWcKLSAgIDogOjpib29zdDo6bW92ZV9kZXRhaWw6OmVuYWJs
ZV9pZl9jCi0gICAgICA8IDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjppc19zYW1lCi0gICAgICAgICA8
IHR5cGVuYW1lIGJvb3N0OjppbnRydXNpdmU6Oml0ZXJhdG9yX3RyYWl0czxJPjo6aXRlcmF0b3Jf
Y2F0ZWdvcnkgCi0gICAgICAgICAsIFRhZwotICAgICAgICAgPjo6dmFsdWUKLSAgICAgICAgICwg
Uj4KLXt9OwotCi10ZW1wbGF0ZTxjbGFzcyBJLCBjbGFzcyBUYWcsIGNsYXNzIFIgPSB2b2lkPgot
c3RydWN0IGl0ZXJhdG9yX2Rpc2FibGVfaWZfdGFnCi0gICA6IDo6Ym9vc3Q6Om1vdmVfZGV0YWls
OjplbmFibGVfaWZfYwotICAgICAgPCAhOjpib29zdDo6bW92ZV9kZXRhaWw6OmlzX3NhbWUKLSAg
ICAgICAgIDwgdHlwZW5hbWUgYm9vc3Q6OmludHJ1c2l2ZTo6aXRlcmF0b3JfdHJhaXRzPEk+Ojpp
dGVyYXRvcl9jYXRlZ29yeSAKLSAgICAgICAgICwgVGFnCi0gICAgICAgICA+Ojp2YWx1ZQotICAg
ICAgICAgLCBSPgote307Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KLS8vICAgIGl0ZXJhdG9yX1tkaXN8ZW5dYWJsZV9pZl90YWdfZGlmZmVyZW5jZV90eXBlCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZTxjbGFzcyBJ
LCBjbGFzcyBUYWc+Ci1zdHJ1Y3QgaXRlcmF0b3JfZW5hYmxlX2lmX3RhZ19kaWZmZXJlbmNlX3R5
cGUKLSAgIDogaXRlcmF0b3JfZW5hYmxlX2lmX3RhZzxJLCBUYWcsIHR5cGVuYW1lIGJvb3N0Ojpp
bnRydXNpdmU6Oml0ZXJhdG9yX3RyYWl0czxJPjo6ZGlmZmVyZW5jZV90eXBlPgote307Ci0KLXRl
bXBsYXRlPGNsYXNzIEksIGNsYXNzIFRhZz4KLXN0cnVjdCBpdGVyYXRvcl9kaXNhYmxlX2lmX3Rh
Z19kaWZmZXJlbmNlX3R5cGUKLSAgIDogaXRlcmF0b3JfZGlzYWJsZV9pZl90YWc8SSwgVGFnLCB0
eXBlbmFtZSBib29zdDo6aW50cnVzaXZlOjppdGVyYXRvcl90cmFpdHM8ST46OmRpZmZlcmVuY2Vf
dHlwZT4KLXt9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgYWR2YW5jZQotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLXRlbXBsYXRlPGNsYXNzIElucHV0SXQsIGNsYXNzIERpc3RhbmNlPgot
dHlwZW5hbWUgaXRlcmF0b3JfZW5hYmxlX2lmX3RhZzxJbnB1dEl0LCBzdGQ6OmlucHV0X2l0ZXJh
dG9yX3RhZz46OnR5cGUKLSAgIGl0ZXJhdG9yX2FkdmFuY2UoSW5wdXRJdCYgaXQsIERpc3RhbmNl
IG4pCi17Ci0gICB3aGlsZShuLS0pCi0JICAgKytpdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgSW5w
dXRJdCwgY2xhc3MgRGlzdGFuY2U+Ci10eXBlbmFtZSBpdGVyYXRvcl9lbmFibGVfaWZfdGFnPElu
cHV0SXQsIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWc+Ojp0eXBlCi0gICBpdGVyYXRvcl9hZHZh
bmNlKElucHV0SXQmIGl0LCBEaXN0YW5jZSBuKQotewotICAgd2hpbGUobi0tKQotCSAgICsraXQ7
Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIElucHV0SXQsIGNsYXNzIERpc3RhbmNlPgotdHlwZW5hbWUg
aXRlcmF0b3JfZW5hYmxlX2lmX3RhZzxJbnB1dEl0LCBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnPjo6dHlwZQotICAgaXRlcmF0b3JfYWR2YW5jZShJbnB1dEl0JiBpdCwgRGlzdGFuY2Ug
bikKLXsKLSAgIGZvciAoOyAwIDwgbjsgLS1uKQotCSAgICsraXQ7Ci0gICBmb3IgKDsgbiA8IDA7
ICsrbikKLQkgICAtLWl0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0LCBjbGFzcyBEaXN0
YW5jZT4KLUJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSB0eXBlbmFtZSBpdGVyYXRvcl9lbmFi
bGVfaWZfdGFnPElucHV0SXQsIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWc+Ojp0eXBl
Ci0gICBpdGVyYXRvcl9hZHZhbmNlKElucHV0SXQmIGl0LCBEaXN0YW5jZSBuKQotewotICAgaXQg
Kz0gbjsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgIGRpc3RhbmNlCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdD4gaW5saW5lCi10eXBlbmFtZSBp
dGVyYXRvcl9kaXNhYmxlX2lmX3RhZ19kaWZmZXJlbmNlX3R5cGUKLSAgIDxJbnB1dEl0LCBzdGQ6
OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPjo6dHlwZQotICAgICAgaXRlcmF0b3JfZGlzdGFu
Y2UoSW5wdXRJdCBmaXJzdCwgSW5wdXRJdCBsYXN0KQotewotICAgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPElucHV0SXQ+OjpkaWZmZXJlbmNlX3R5cGUgb2ZmID0gMDsKLSAgIHdoaWxlKGZpcnN0
ICE9IGxhc3QpewotCSAgICsrb2ZmOwotICAgICAgKytmaXJzdDsKLSAgIH0KLSAgIHJldHVybiBv
ZmY7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIElucHV0SXQ+Ci1CT09TVF9JTlRSVVNJVkVfRk9SQ0VJ
TkxJTkUgdHlwZW5hbWUgaXRlcmF0b3JfZW5hYmxlX2lmX3RhZ19kaWZmZXJlbmNlX3R5cGUKLSAg
IDxJbnB1dEl0LCBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPjo6dHlwZQotICAgICAg
aXRlcmF0b3JfZGlzdGFuY2UoSW5wdXRJdCBmaXJzdCwgSW5wdXRJdCBsYXN0KQotewotICAgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPElucHV0SXQ+OjpkaWZmZXJlbmNlX3R5cGUgb2ZmID0gbGFz
dCAtIGZpcnN0OwotICAgcmV0dXJuIG9mZjsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgST4KLUJPT1NU
X0lOVFJVU0lWRV9GT1JDRUlOTElORSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8ST46OnBvaW50
ZXIgaXRlcmF0b3JfYXJyb3dfcmVzdWx0KGNvbnN0IEkgJmkpCi17ICByZXR1cm4gaS5vcGVyYXRv
ci0+KCk7ICB9Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1CT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJ
TkUgVCAqIGl0ZXJhdG9yX2Fycm93X3Jlc3VsdChUICpwKQoteyAgcmV0dXJuIHA7ICAgfQotCi19
IC8vbmFtZXNwYWNlIGludHJ1c2l2ZQotfSAvL25hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy9C
T09TVF9JTlRSVVNJVkVfREVUQUlMX0lURVJBVE9SX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9rZXlfbm9k
ZXB0cl9jb21wLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L2ludHJ1c2l2ZS9kZXRhaWwva2V5X25vZGVwdHJfY29tcC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGJkYzAyNWU1YWIzYWM5NGIxMjFhNTA3YTkzMzFhZTUxOWQyYjlhY2UuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9rZXlfbm9kZXB0
cl9jb21wLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotLy8KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAgMjAxNC0yMDE0Ci0v
LwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNp
b24gMS4wLgotLy8gICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdAotLy8gICAgICAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0
KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3IgZG9j
dW1lbnRhdGlvbi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jaWZuZGVmIEJPT1NUX0lO
VFJVU0lWRV9ERVRBSUxfS0VZX05PREVQVFJfQ09NUF9IUFAKLSNkZWZpbmUgQk9PU1RfSU5UUlVT
SVZFX0RFVEFJTF9LRVlfTk9ERVBUUl9DT01QX0hQUAotCi0jaWZuZGVmIEJPT1NUX0NPTkZJR19I
UFAKLSMgIGluY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQo
Qk9PU1RfSEFTX1BSQUdNQV9PTkNFKQotIyAgcHJhZ21hIG9uY2UKLSNlbmRpZgotCi0jaW5jbHVk
ZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9tcGwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2ludHJ1
c2l2ZS9kZXRhaWwvZWJvX2Z1bmN0b3JfaG9sZGVyLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRy
dXNpdmUvZGV0YWlsL3RyZWVfdmFsdWVfY29tcGFyZS5ocHA+Ci0KLQotbmFtZXNwYWNlIGJvb3N0
IHsKLW5hbWVzcGFjZSBpbnRydXNpdmUgewotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLXRlbXBsYXRl
IDwgY2xhc3MgS2V5VHlwZUtleUNvbXBhcmUKLSAgICAgICAgICwgY2xhc3MgVmFsdWVUcmFpdHMK
LSAgICAgICAgICwgY2xhc3MgS2V5T2ZWYWx1ZQotICAgICAgICAgPgotc3RydWN0IGtleV9ub2Rl
cHRyX2NvbXBfdHlwZXMKLXsKLSAgIHR5cGVkZWYgVmFsdWVUcmFpdHMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlX3RyYWl0czsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgdmFs
dWVfdHJhaXRzOjp2YWx1ZV90eXBlICAgICAgICAgICAgIHZhbHVlX3R5cGU7Ci0gICB0eXBlZGVm
IHR5cGVuYW1lIHZhbHVlX3RyYWl0czo6bm9kZV9wdHIgICAgICAgICAgICAgICBub2RlX3B0cjsK
LSAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfdHJhaXRzOjpjb25zdF9ub2RlX3B0ciAgICAgICAg
IGNvbnN0X25vZGVfcHRyOwotICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmlmX2MKLSAgICAg
ICAgICAgIDwgZGV0YWlsOjppc19zYW1lPEtleU9mVmFsdWUsIHZvaWQ+Ojp2YWx1ZQotICAgICAg
ICAgICAgLCBkZXRhaWw6OmlkZW50aXR5PHZhbHVlX3R5cGU+Ci0gICAgICAgICAgICAsIEtleU9m
VmFsdWUKLSAgICAgICAgICAgID46OnR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtleV9vZl92YWx1ZTsKLSAgIHR5cGVkZWYgdHJlZV92YWx1ZV9jb21wYXJlCi0gICAg
ICA8dHlwZW5hbWUgVmFsdWVUcmFpdHM6OnBvaW50ZXIsIEtleVR5cGVLZXlDb21wYXJlLCBrZXlf
b2ZfdmFsdWU+ICAgICAgYmFzZV90OwotfTsKLQotLy9UaGlzIGZ1bmN0aW9uIG9iamVjdCB0cmFu
c2Zvcm1zIGEga2V5IGNvbXBhcmlzb24gdHlwZSB0bwotLy9hIGZ1bmN0aW9uIHRoYXQgY2FuIGNv
bXBhcmUgbm9kZXMgb3Igbm9kZXMgd2l0aCBub2RlcyBvciBrZXlzLgotdGVtcGxhdGUgPCBjbGFz
cyBLZXlUeXBlS2V5Q29tcGFyZQotICAgICAgICAgLCBjbGFzcyBWYWx1ZVRyYWl0cwotICAgICAg
ICAgLCBjbGFzcyBLZXlPZlZhbHVlID0gdm9pZAotICAgICAgICAgPgotc3RydWN0IGtleV9ub2Rl
cHRyX2NvbXAKLSAgIC8vVXNlIHB1YmxpYyBpbmhlcml0YW5jZSB0byBhdm9pZCBNU1ZDIGJ1Z3Mg
d2l0aCBjbG9zdXJlcwotICAgOiAgcHVibGljIGtleV9ub2RlcHRyX2NvbXBfdHlwZXM8S2V5VHlw
ZUtleUNvbXBhcmUsIFZhbHVlVHJhaXRzLCBLZXlPZlZhbHVlPjo6YmFzZV90Ci17Ci1wcml2YXRl
OgotICAgc3RydWN0IHNmaW5hZV90eXBlOwotCi1wdWJsaWM6Ci0gICB0eXBlZGVmIGtleV9ub2Rl
cHRyX2NvbXBfdHlwZXM8S2V5VHlwZUtleUNvbXBhcmUsIFZhbHVlVHJhaXRzLCBLZXlPZlZhbHVl
PiB0eXBlc190OwotICAgdHlwZWRlZiB0eXBlbmFtZSB0eXBlc190Ojp2YWx1ZV90cmFpdHMgICAg
ICAgICAgdmFsdWVfdHJhaXRzOwotICAgdHlwZWRlZiB0eXBlbmFtZSB0eXBlc190Ojp2YWx1ZV90
eXBlICAgICAgICAgICAgdmFsdWVfdHlwZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgdHlwZXNfdDo6
bm9kZV9wdHIgICAgICAgICAgICAgIG5vZGVfcHRyOwotICAgdHlwZWRlZiB0eXBlbmFtZSB0eXBl
c190Ojpjb25zdF9ub2RlX3B0ciAgICAgICAgY29uc3Rfbm9kZV9wdHI7Ci0gICB0eXBlZGVmIHR5
cGVuYW1lIHR5cGVzX3Q6OmJhc2VfdCAgICAgICAgICAgICAgICBiYXNlX3Q7Ci0gICB0eXBlZGVm
IHR5cGVuYW1lIHR5cGVzX3Q6OmtleV9vZl92YWx1ZSAgICAgICAgICBrZXlfb2ZfdmFsdWU7Ci0K
LSAgIHRlbXBsYXRlIDxjbGFzcyBQMT4KLSAgIHN0cnVjdCBpc19zYW1lX29yX25vZGVwdHJfY29u
dmVydGlibGUKLSAgIHsKLSAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhbWVfdHlwZSA9IGlzX3Nh
bWU8UDEsY29uc3Rfbm9kZV9wdHI+Ojp2YWx1ZSB8fCBpc19zYW1lPFAxLG5vZGVfcHRyPjo6dmFs
dWU7Ci0gICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHNhbWVfdHlwZSB8fCBpc19jb252
ZXJ0aWJsZTxQMSwgY29uc3Rfbm9kZV9wdHI+Ojp2YWx1ZTsKLSAgIH07Ci0KLSAgIGJhc2VfdCBi
YXNlKCkgY29uc3QKLSAgIHsgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBiYXNlX3QmPigqdGhp
cyk7IH0KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIGtleV9ub2RlcHRyX2NvbXAo
S2V5VHlwZUtleUNvbXBhcmUga2NvbXAsIGNvbnN0IFZhbHVlVHJhaXRzICp0cmFpdHMpCi0gICAg
ICA6ICBiYXNlX3Qoa2NvbXApLCB0cmFpdHNfKHRyYWl0cykKLSAgIHt9Ci0KLSAgIC8vcHJlZChw
bm9kZSkKLSAgIHRlbXBsYXRlPGNsYXNzIFQxPgotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5M
SU5FIGJvb2wgb3BlcmF0b3IoKShjb25zdCBUMSAmdDEsIHR5cGVuYW1lIGVuYWJsZV9pZl9jPCBp
c19zYW1lX29yX25vZGVwdHJfY29udmVydGlibGU8VDE+Ojp2YWx1ZSwgc2ZpbmFlX3R5cGUqID46
OnR5cGUgPSAwKSBjb25zdAotICAgeyAgcmV0dXJuIGJhc2UoKS5nZXQoKShrZXlfb2ZfdmFsdWUo
KSgqdHJhaXRzXy0+dG9fdmFsdWVfcHRyKHQxKSkpOyAgfQotCi0gICAvL29wZXJhdG9yKCkgMiBh
cmcKLSAgIC8vcHJlZChwbm9kZSwgcG5vZGUpCi0gICB0ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3Mg
VDI+Ci0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgYm9vbCBvcGVyYXRvcigpCi0gICAg
ICAoY29uc3QgVDEgJnQxLCBjb25zdCBUMiAmdDIsIHR5cGVuYW1lIGVuYWJsZV9pZl9jPCBpc19z
YW1lX29yX25vZGVwdHJfY29udmVydGlibGU8VDE+Ojp2YWx1ZSAmJiBpc19zYW1lX29yX25vZGVw
dHJfY29udmVydGlibGU8VDI+Ojp2YWx1ZSwgc2ZpbmFlX3R5cGUqID46OnR5cGUgPSAwKSBjb25z
dAotICAgeyAgcmV0dXJuIGJhc2UoKSgqdHJhaXRzXy0+dG9fdmFsdWVfcHRyKHQxKSwgKnRyYWl0
c18tPnRvX3ZhbHVlX3B0cih0MikpOyAgfQotCi0gICAvL3ByZWQocG5vZGUsIGtleSkKLSAgIHRl
bXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMj4KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElO
RSBib29sIG9wZXJhdG9yKCkKLSAgICAgIChjb25zdCBUMSAmdDEsIGNvbnN0IFQyICZ0MiwgdHlw
ZW5hbWUgZW5hYmxlX2lmX2M8IGlzX3NhbWVfb3Jfbm9kZXB0cl9jb252ZXJ0aWJsZTxUMT46OnZh
bHVlICYmICFpc19zYW1lX29yX25vZGVwdHJfY29udmVydGlibGU8VDI+Ojp2YWx1ZSwgc2ZpbmFl
X3R5cGUqID46OnR5cGUgPSAwKSBjb25zdAotICAgeyAgcmV0dXJuIGJhc2UoKSgqdHJhaXRzXy0+
dG9fdmFsdWVfcHRyKHQxKSwgdDIpOyAgfQotCi0gICAvL3ByZWQoa2V5LCBwbm9kZSkKLSAgIHRl
bXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMj4KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElO
RSBib29sIG9wZXJhdG9yKCkKLSAgICAgIChjb25zdCBUMSAmdDEsIGNvbnN0IFQyICZ0MiwgdHlw
ZW5hbWUgZW5hYmxlX2lmX2M8ICFpc19zYW1lX29yX25vZGVwdHJfY29udmVydGlibGU8VDE+Ojp2
YWx1ZSAmJiBpc19zYW1lX29yX25vZGVwdHJfY29udmVydGlibGU8VDI+Ojp2YWx1ZSwgc2ZpbmFl
X3R5cGUqID46OnR5cGUgPSAwKSBjb25zdAotICAgeyAgcmV0dXJuIGJhc2UoKSh0MSwgKnRyYWl0
c18tPnRvX3ZhbHVlX3B0cih0MikpOyAgfQotCi0gICAvL3ByZWQoa2V5LCBrZXkpCi0gICB0ZW1w
bGF0ZTxjbGFzcyBUMSwgY2xhc3MgVDI+Ci0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUg
Ym9vbCBvcGVyYXRvcigpCi0gICAgICAoY29uc3QgVDEgJnQxLCBjb25zdCBUMiAmdDIsIHR5cGVu
YW1lIGVuYWJsZV9pZl9jPCAhaXNfc2FtZV9vcl9ub2RlcHRyX2NvbnZlcnRpYmxlPFQxPjo6dmFs
dWUgJiYgIWlzX3NhbWVfb3Jfbm9kZXB0cl9jb252ZXJ0aWJsZTxUMj46OnZhbHVlLCBzZmluYWVf
dHlwZSogPjo6dHlwZSA9IDApIGNvbnN0Ci0gICB7ICByZXR1cm4gYmFzZSgpKHQxLCB0Mik7ICB9
Ci0KLSAgIGNvbnN0IFZhbHVlVHJhaXRzICpjb25zdCB0cmFpdHNfOwotfTsKLQotfSAgLy9uYW1l
c3BhY2UgZGV0YWlsewotfSAgLy9uYW1lc3BhY2UgaW50cnVzaXZlewotfSAgLy9uYW1lc3BhY2Ug
Ym9vc3R7Ci0KLSNlbmRpZiAvL0JPT1NUX0lOVFJVU0lWRV9ERVRBSUxfS0VZX05PREVQVFJfQ09N
UF9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L2ludHJ1c2l2ZS9kZXRhaWwvbGlzdF9pdGVyYXRvci5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL2xpc3RfaXRlcmF0b3Iu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzVmMTYxNjc1OGZlODEwZDBmOWIw
NjI5NzZkMWEwMGRiZGUyMzQxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1
c2l2ZS9kZXRhaWwvbGlzdF9pdGVyYXRvci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAs
MCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAoQykgQ29weXJpZ2h0IE9sYWYgS3J6
aWthbGxhIDIwMDQtMjAwNi4KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAgMjAwNi0y
MDEzCi0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLgotLy8gICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50
eHQgb3IgY29weSBhdAotLy8gICAgICAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8x
XzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBm
b3IgZG9jdW1lbnRhdGlvbi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jaWZuZGVmIEJP
T1NUX0lOVFJVU0lWRV9MSVNUX0lURVJBVE9SX0hQUAotI2RlZmluZSBCT09TVF9JTlRSVVNJVkVf
TElTVF9JVEVSQVRPUl9IUFAKLQotI2lmbmRlZiBCT09TVF9DT05GSUdfSFBQCi0jICBpbmNsdWRl
IDxib29zdC9jb25maWcuaHBwPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19QUkFH
TUFfT05DRSkKLSMgIHByYWdtYSBvbmNlCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L2ludHJ1
c2l2ZS9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2Rl
dGFpbC9zdGRfZndkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL2lpdGVy
YXRvci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9tcGwuaHBwPgotCi1u
YW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIGludHJ1c2l2ZSB7Ci0KLS8vIGxpc3RfaXRlcmF0
b3IgcHJvdmlkZXMgc29tZSBiYXNpYyBmdW5jdGlvbnMgZm9yIGEKLS8vIG5vZGUgb3JpZW50ZWQg
YmlkaXJlY3Rpb25hbCBpdGVyYXRvcjoKLXRlbXBsYXRlPGNsYXNzIFZhbHVlVHJhaXRzLCBib29s
IElzQ29uc3Q+Ci1jbGFzcyBsaXN0X2l0ZXJhdG9yCi17Ci0gICBwcml2YXRlOgotICAgdHlwZWRl
ZiBpaXRlcmF0b3IKLSAgICAgIDxWYWx1ZVRyYWl0cywgSXNDb25zdCwgc3RkOjpiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZz4gdHlwZXNfdDsKLQotICAgc3RhdGljIGNvbnN0IGJvb2wgc3RhdGVm
dWxfdmFsdWVfdHJhaXRzID0gICAgICAgICAgICAgICAgdHlwZXNfdDo6c3RhdGVmdWxfdmFsdWVf
dHJhaXRzOwotCi0gICB0eXBlZGVmIFZhbHVlVHJhaXRzICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZV90cmFpdHM7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHR5cGVzX3Q6
Om5vZGVfdHJhaXRzICAgICAgICAgICAgICAgICAgICBub2RlX3RyYWl0czsKLQotICAgdHlwZWRl
ZiB0eXBlbmFtZSB0eXBlc190Ojpub2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTsK
LSAgIHR5cGVkZWYgdHlwZW5hbWUgdHlwZXNfdDo6bm9kZV9wdHIgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVfcHRyOwotICAgdHlwZWRlZiB0eXBlbmFtZSB0eXBlc190Ojpjb25zdF92YWx1ZV90
cmFpdHNfcHRyICAgICAgICAgY29uc3RfdmFsdWVfdHJhaXRzX3B0cjsKLQotICAgcHVibGljOgot
ICAgdHlwZWRlZiB0eXBlbmFtZSB0eXBlc190OjppdGVyYXRvcl90eXBlOjpkaWZmZXJlbmNlX3R5
cGUgICAgZGlmZmVyZW5jZV90eXBlOwotICAgdHlwZWRlZiB0eXBlbmFtZSB0eXBlc190OjppdGVy
YXRvcl90eXBlOjp2YWx1ZV90eXBlICAgICAgICAgdmFsdWVfdHlwZTsKLSAgIHR5cGVkZWYgdHlw
ZW5hbWUgdHlwZXNfdDo6aXRlcmF0b3JfdHlwZTo6cG9pbnRlciAgICAgICAgICAgIHBvaW50ZXI7
Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHR5cGVzX3Q6Oml0ZXJhdG9yX3R5cGU6OnJlZmVyZW5jZSAg
ICAgICAgICByZWZlcmVuY2U7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHR5cGVzX3Q6Oml0ZXJhdG9y
X3R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5ICBpdGVyYXRvcl9jYXRlZ29yeTsKLQotICAgQk9PU1Rf
SU5UUlVTSVZFX0ZPUkNFSU5MSU5FIGxpc3RfaXRlcmF0b3IoKQotICAge30KLQotICAgQk9PU1Rf
SU5UUlVTSVZFX0ZPUkNFSU5MSU5FIGV4cGxpY2l0IGxpc3RfaXRlcmF0b3IoY29uc3Qgbm9kZV9w
dHIgJiBub2RlcHRyLCBjb25zdCBjb25zdF92YWx1ZV90cmFpdHNfcHRyICZ0cmFpdHNfcHRyKQot
ICAgICAgOiBtZW1iZXJzXyhub2RlcHRyLCB0cmFpdHNfcHRyKQotICAge30KLQotICAgQk9PU1Rf
SU5UUlVTSVZFX0ZPUkNFSU5MSU5FIGxpc3RfaXRlcmF0b3IobGlzdF9pdGVyYXRvcjxWYWx1ZVRy
YWl0cywgZmFsc2U+IGNvbnN0JiBvdGhlcikKLSAgICAgIDogIG1lbWJlcnNfKG90aGVyLnBvaW50
ZWRfbm9kZSgpLCBvdGhlci5nZXRfdmFsdWVfdHJhaXRzKCkpCi0gICB7fQotCi0gICBCT09TVF9J
TlRSVVNJVkVfRk9SQ0VJTkxJTkUgY29uc3Qgbm9kZV9wdHIgJnBvaW50ZWRfbm9kZSgpIGNvbnN0
Ci0gICB7IHJldHVybiBtZW1iZXJzXy5ub2RlcHRyXzsgfQotCi0gICBCT09TVF9JTlRSVVNJVkVf
Rk9SQ0VJTkxJTkUgbGlzdF9pdGVyYXRvciAmb3BlcmF0b3I9KGNvbnN0IG5vZGVfcHRyICZub2Rl
KQotICAgeyAgbWVtYmVyc18ubm9kZXB0cl8gPSBub2RlOyAgcmV0dXJuIHN0YXRpY19jYXN0PGxp
c3RfaXRlcmF0b3ImPigqdGhpcyk7ICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElO
RSBjb25zdF92YWx1ZV90cmFpdHNfcHRyIGdldF92YWx1ZV90cmFpdHMoKSBjb25zdAotICAgeyAg
cmV0dXJuIG1lbWJlcnNfLmdldF9wdHIoKTsgfQotCi0gICBwdWJsaWM6Ci0gICBCT09TVF9JTlRS
VVNJVkVfRk9SQ0VJTkxJTkUgbGlzdF9pdGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICB7Ci0gICAg
ICBub2RlX3B0ciBwID0gbm9kZV90cmFpdHM6OmdldF9uZXh0KG1lbWJlcnNfLm5vZGVwdHJfKTsK
LSAgICAgIG1lbWJlcnNfLm5vZGVwdHJfID0gcDsKLSAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxs
aXN0X2l0ZXJhdG9yJj4gKCp0aGlzKTsKLSAgIH0KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNF
SU5MSU5FIGxpc3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCi0gICB7Ci0gICAgICBsaXN0X2l0
ZXJhdG9yIHJlc3VsdCAoKnRoaXMpOwotICAgICAgbWVtYmVyc18ubm9kZXB0cl8gPSBub2RlX3Ry
YWl0czo6Z2V0X25leHQobWVtYmVyc18ubm9kZXB0cl8pOwotICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgIH0KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIGxpc3RfaXRlcmF0b3ImIG9w
ZXJhdG9yLS0oKQotICAgewotICAgICAgbWVtYmVyc18ubm9kZXB0cl8gPSBub2RlX3RyYWl0czo6
Z2V0X3ByZXZpb3VzKG1lbWJlcnNfLm5vZGVwdHJfKTsKLSAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxsaXN0X2l0ZXJhdG9yJj4gKCp0aGlzKTsKLSAgIH0KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZP
UkNFSU5MSU5FIGxpc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCi0gICB7Ci0gICAgICBsaXN0
X2l0ZXJhdG9yIHJlc3VsdCAoKnRoaXMpOwotICAgICAgbWVtYmVyc18ubm9kZXB0cl8gPSBub2Rl
X3RyYWl0czo6Z2V0X3ByZXZpb3VzKG1lbWJlcnNfLm5vZGVwdHJfKTsKLSAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBmcmllbmQgYm9v
bCBvcGVyYXRvcj09IChjb25zdCBsaXN0X2l0ZXJhdG9yJiBsLCBjb25zdCBsaXN0X2l0ZXJhdG9y
JiByKQotICAgeyAgcmV0dXJuIGwucG9pbnRlZF9ub2RlKCkgPT0gci5wb2ludGVkX25vZGUoKTsg
ICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBmcmllbmQgYm9vbCBvcGVyYXRv
ciE9IChjb25zdCBsaXN0X2l0ZXJhdG9yJiBsLCBjb25zdCBsaXN0X2l0ZXJhdG9yJiByKQotICAg
eyAgcmV0dXJuICEobCA9PSByKTsgfQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUg
cmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0Ci0gICB7ICByZXR1cm4gKm9wZXJhdG9yLT4oKTsg
ICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBwb2ludGVyIG9wZXJhdG9yLT4o
KSBjb25zdAotICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3JfYXJyb3coZGV0YWlsOjpib29sXzxz
dGF0ZWZ1bF92YWx1ZV90cmFpdHM+KCkpOyB9Ci0KLSAgIGxpc3RfaXRlcmF0b3I8VmFsdWVUcmFp
dHMsIGZhbHNlPiB1bmNvbnN0KCkgY29uc3QKLSAgIHsgIHJldHVybiBsaXN0X2l0ZXJhdG9yPFZh
bHVlVHJhaXRzLCBmYWxzZT4odGhpcy0+cG9pbnRlZF9ub2RlKCksIHRoaXMtPmdldF92YWx1ZV90
cmFpdHMoKSk7ICAgfQotCi0gICBwcml2YXRlOgotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5M
SU5FIHBvaW50ZXIgb3BlcmF0b3JfYXJyb3coZGV0YWlsOjpmYWxzZV8pIGNvbnN0Ci0gICB7IHJl
dHVybiBWYWx1ZVRyYWl0czo6dG9fdmFsdWVfcHRyKG1lbWJlcnNfLm5vZGVwdHJfKTsgfQotCi0g
ICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgcG9pbnRlciBvcGVyYXRvcl9hcnJvdyhkZXRh
aWw6OnRydWVfKSBjb25zdAotICAgeyByZXR1cm4gdGhpcy0+Z2V0X3ZhbHVlX3RyYWl0cygpLT50
b192YWx1ZV9wdHIobWVtYmVyc18ubm9kZXB0cl8pOyB9Ci0KLSAgIGlpdGVyYXRvcl9tZW1iZXJz
PG5vZGVfcHRyLCBjb25zdF92YWx1ZV90cmFpdHNfcHRyLCBzdGF0ZWZ1bF92YWx1ZV90cmFpdHM+
IG1lbWJlcnNfOwotfTsKLQotfSAvL25hbWVzcGFjZSBpbnRydXNpdmUKLX0gLy9uYW1lc3BhY2Ug
Ym9vc3QKLQotI2VuZGlmIC8vQk9PU1RfSU5UUlVTSVZFX0xJU1RfSVRFUkFUT1JfSFBQCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNp
dmUvZGV0YWlsL2xpc3Rfbm9kZS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL2xpc3Rfbm9kZS5ocHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGMzYjQ4NDcwMTE2NWJiNjYwM2ZiZmMyZmVkMTMxYzg0YmE3MjRkYzAu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9saXN0X25v
ZGUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KLS8vCi0vLyAoQykgQ29weXJpZ2h0IE9sYWYgS3J6aWthbGxhIDIwMDQtMjAwNi4KLS8vIChD
KSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAgMjAwNi0yMDEzCi0vLwotLy8gRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gICAgKFNl
ZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gICAgICAg
ICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3IgZG9jdW1lbnRhdGlvbi4KLS8vCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9MSVNUX05PREVf
SFBQCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9MSVNUX05PREVfSFBQCi0KLSNpZm5kZWYgQk9P
U1RfQ09ORklHX0hQUAotIyAgaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNlbmRpZgotCi0j
aWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01BX09OQ0UpCi0jICBwcmFnbWEgb25jZQotI2VuZGlm
Ci0KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL3dvcmthcm91bmQuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9wb2ludGVyX3JlYmluZC5ocHA+Ci0KLW5hbWVzcGFjZSBi
b29zdCB7Ci1uYW1lc3BhY2UgaW50cnVzaXZlIHsKLQotLy8gbGlzdF9ub2RlX3RyYWl0cyBjYW4g
YmUgdXNlZCB3aXRoIGNpcmN1bGFyX2xpc3RfYWxnb3JpdGhtcyBhbmQgc3VwcGxpZXMKLS8vIGEg
bGlzdF9ub2RlIGhvbGRpbmcgdGhlIHBvaW50ZXJzIG5lZWRlZCBmb3IgYSBkb3VibGUtbGlua2Vk
IGxpc3QKLS8vIGl0IGlzIHVzZWQgYnkgbGlzdF9kZXJpdmVkX25vZGUgYW5kIGxpc3RfbWVtYmVy
X25vZGUKLQotdGVtcGxhdGU8Y2xhc3MgVm9pZFBvaW50ZXI+Ci1zdHJ1Y3QgbGlzdF9ub2RlCi17
Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHBvaW50ZXJfcmViaW5kPFZvaWRQb2ludGVyLCBsaXN0X25v
ZGU+Ojp0eXBlICBub2RlX3B0cjsKLSAgIG5vZGVfcHRyIG5leHRfOwotICAgbm9kZV9wdHIgcHJl
dl87Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBWb2lkUG9pbnRlcj4KLXN0cnVjdCBsaXN0X25vZGVf
dHJhaXRzCi17Ci0gICB0eXBlZGVmIGxpc3Rfbm9kZTxWb2lkUG9pbnRlcj4gICAgICBub2RlOwot
ICAgdHlwZWRlZiB0eXBlbmFtZSBub2RlOjpub2RlX3B0ciAgICAgbm9kZV9wdHI7Ci0gICB0eXBl
ZGVmIHR5cGVuYW1lIHBvaW50ZXJfcmViaW5kPFZvaWRQb2ludGVyLCBjb25zdCBub2RlPjo6dHlw
ZSAgIGNvbnN0X25vZGVfcHRyOwotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgc3Rh
dGljIG5vZGVfcHRyIGdldF9wcmV2aW91cyhjb25zdCBjb25zdF9ub2RlX3B0ciAmIG4pCi0gICB7
ICByZXR1cm4gbi0+cHJldl87ICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBz
dGF0aWMgbm9kZV9wdHIgZ2V0X3ByZXZpb3VzKGNvbnN0IG5vZGVfcHRyICYgbikKLSAgIHsgIHJl
dHVybiBuLT5wcmV2XzsgIH0KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIHN0YXRp
YyB2b2lkIHNldF9wcmV2aW91cyhjb25zdCBub2RlX3B0ciAmIG4sIGNvbnN0IG5vZGVfcHRyICYg
cHJldikKLSAgIHsgIG4tPnByZXZfID0gcHJldjsgIH0KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZP
UkNFSU5MSU5FIHN0YXRpYyBub2RlX3B0ciBnZXRfbmV4dChjb25zdCBjb25zdF9ub2RlX3B0ciAm
IG4pCi0gICB7ICByZXR1cm4gbi0+bmV4dF87ICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JD
RUlOTElORSBzdGF0aWMgbm9kZV9wdHIgZ2V0X25leHQoY29uc3Qgbm9kZV9wdHIgJiBuKQotICAg
eyAgcmV0dXJuIG4tPm5leHRfOyAgfQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUg
c3RhdGljIHZvaWQgc2V0X25leHQoY29uc3Qgbm9kZV9wdHIgJiBuLCBjb25zdCBub2RlX3B0ciAm
IG5leHQpCi0gICB7ICBuLT5uZXh0XyA9IG5leHQ7ICB9Ci19OwotCi19IC8vbmFtZXNwYWNlIGlu
dHJ1c2l2ZQotfSAvL25hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy9CT09TVF9JTlRSVVNJVkVf
TElTVF9OT0RFX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9taW5pbWFsX2xlc3NfZXF1YWxfaGVhZGVyLmhw
cCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9k
ZXRhaWwvbWluaW1hbF9sZXNzX2VxdWFsX2hlYWRlci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDVlOGExOWRlYmY5ZWM5MWIzMmFhMjMxMTQwNTBlODU0ZjdkNWRjN2IuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9taW5pbWFsX2xlc3Nf
ZXF1YWxfaGVhZGVyLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0vLwotLy8gKEMpIENvcHlyaWdodCBJb24gR2F6dGFuYWdhICAyMDE0LTIw
MTUKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuCi0vLyAgICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0Ci0vLyAgICAgICAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvaW50cnVzaXZlIGZv
ciBkb2N1bWVudGF0aW9uLgotLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jaWZuZGVmIEJPT1NU
X0lOVFJVU0lWRV9ERVRBSUxfTUlOSU1BTF9MRVNTX0VRVUFMX0hFQURFUl9IUFAKLSNkZWZpbmUg
Qk9PU1RfSU5UUlVTSVZFX0RFVEFJTF9NSU5JTUFMX0xFU1NfRVFVQUxfSEVBREVSX0hQUAotIwot
I2lmbmRlZiBCT09TVF9DT05GSUdfSFBQCi0jICBpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgot
I2VuZGlmCi0jCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01BX09OQ0UpCi0jICBwcmFnbWEg
b25jZQotI2VuZGlmCi0jCi0jLy9UcnkgdG8gYXZvaWQgaW5jbHVkaW5nIDxmdW5jdGlvbmFsPiwg
YXMgaXQncyBxdWl0ZSBiaWcgaW4gQysrMTEKLSNpZiBkZWZpbmVkKEJPT1NUX0dOVV9TVERMSUIp
Ci0jICBpbmNsdWRlIDxiaXRzL3N0bF9mdW5jdGlvbi5oPgotI2Vsc2UKLSMgIGluY2x1ZGUgPGZ1
bmN0aW9uYWw+ICAgIC8vRmFsbGJhY2sKLSNlbmRpZgotIwotI2VuZGlmIC8vQk9PU1RfSU5UUlVT
SVZFX0RFVEFJTF9NSU5JTUFMX0xFU1NfRVFVQUxfSEVBREVSX0hQUApkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9t
cGwuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVz
aXZlL2RldGFpbC9tcGwuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDIyN2Ex
NmZkNTQ2YjI2YzY4NTM0MzYyMmJmNzZiNjRmM2FhODhhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvbXBsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIw
NiArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIChDKSBDb3B5cmlnaHQgSW9u
IEdhenRhbmFnYSAgICAgICAgMjAwNi0yMDE0Ci0vLyAoQykgQ29weXJpZ2h0IE1pY3Jvc29mdCBD
b3Jwb3JhdGlvbiAgMjAxNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0
d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUg
TElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICAgICAgICAgIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy9pbnRydXNpdmUgZm9yIGRvY3VtZW50YXRpb24uCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LQotI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVfREVUQUlMX01QTF9IUFAKLSNkZWZpbmUgQk9PU1Rf
SU5UUlVTSVZFX0RFVEFJTF9NUExfSFBQCi0KLSNpZm5kZWYgQk9PU1RfQ09ORklHX0hQUAotIyAg
aW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCT09TVF9I
QVNfUFJBR01BX09OQ0UpCi0jICBwcmFnbWEgb25jZQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29z
dC9pbnRydXNpdmUvZGV0YWlsL2NvbmZpZ19iZWdpbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbW92
ZS9kZXRhaWwvdHlwZV90cmFpdHMuaHBwPgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLW5hbWVzcGFj
ZSBib29zdCB7Ci1uYW1lc3BhY2UgaW50cnVzaXZlIHsKLW5hbWVzcGFjZSBkZXRhaWwgewotICAg
Ci11c2luZyBib29zdDo6bW92ZV9kZXRhaWw6OmlzX3NhbWU7Ci11c2luZyBib29zdDo6bW92ZV9k
ZXRhaWw6OmFkZF9jb25zdDsKLXVzaW5nIGJvb3N0Ojptb3ZlX2RldGFpbDo6cmVtb3ZlX2NvbnN0
OwotdXNpbmcgYm9vc3Q6Om1vdmVfZGV0YWlsOjpyZW1vdmVfY3Y7Ci11c2luZyBib29zdDo6bW92
ZV9kZXRhaWw6OnJlbW92ZV9yZWZlcmVuY2U7Ci11c2luZyBib29zdDo6bW92ZV9kZXRhaWw6OmFk
ZF9yZWZlcmVuY2U7Ci11c2luZyBib29zdDo6bW92ZV9kZXRhaWw6OnJlbW92ZV9wb2ludGVyOwot
dXNpbmcgYm9vc3Q6Om1vdmVfZGV0YWlsOjphZGRfcG9pbnRlcjsKLXVzaW5nIGJvb3N0Ojptb3Zl
X2RldGFpbDo6dHJ1ZV90eXBlOwotdXNpbmcgYm9vc3Q6Om1vdmVfZGV0YWlsOjpmYWxzZV90eXBl
OwotdXNpbmcgYm9vc3Q6Om1vdmVfZGV0YWlsOjplbmFibGVfaWZfYzsKLXVzaW5nIGJvb3N0Ojpt
b3ZlX2RldGFpbDo6ZW5hYmxlX2lmOwotdXNpbmcgYm9vc3Q6Om1vdmVfZGV0YWlsOjpkaXNhYmxl
X2lmX2M7Ci11c2luZyBib29zdDo6bW92ZV9kZXRhaWw6OmRpc2FibGVfaWY7Ci11c2luZyBib29z
dDo6bW92ZV9kZXRhaWw6OmlzX2NvbnZlcnRpYmxlOwotdXNpbmcgYm9vc3Q6Om1vdmVfZGV0YWls
OjppZl9jOwotdXNpbmcgYm9vc3Q6Om1vdmVfZGV0YWlsOjppZl87Ci11c2luZyBib29zdDo6bW92
ZV9kZXRhaWw6OmlzX2NvbnN0OwotdXNpbmcgYm9vc3Q6Om1vdmVfZGV0YWlsOjppZGVudGl0eTsK
LXVzaW5nIGJvb3N0Ojptb3ZlX2RldGFpbDo6YWxpZ25tZW50X29mOwotdXNpbmcgYm9vc3Q6Om1v
dmVfZGV0YWlsOjppc19lbXB0eTsKLXVzaW5nIGJvb3N0Ojptb3ZlX2RldGFpbDo6YWRkcmVzc29m
OwotdXNpbmcgYm9vc3Q6Om1vdmVfZGV0YWlsOjppbnRlZ3JhbF9jb25zdGFudDsKLXVzaW5nIGJv
b3N0Ojptb3ZlX2RldGFpbDo6ZW5hYmxlX2lmX2NvbnZlcnRpYmxlOwotdXNpbmcgYm9vc3Q6Om1v
dmVfZGV0YWlsOjpkaXNhYmxlX2lmX2NvbnZlcnRpYmxlOwotdXNpbmcgYm9vc3Q6Om1vdmVfZGV0
YWlsOjpib29sXzsKLXVzaW5nIGJvb3N0Ojptb3ZlX2RldGFpbDo6dHJ1ZV87Ci11c2luZyBib29z
dDo6bW92ZV9kZXRhaWw6OmZhbHNlXzsKLXVzaW5nIGJvb3N0Ojptb3ZlX2RldGFpbDo6eWVzX3R5
cGU7Ci11c2luZyBib29zdDo6bW92ZV9kZXRhaWw6Om5vX3R5cGU7Ci11c2luZyBib29zdDo6bW92
ZV9kZXRhaWw6OmFwcGx5OwotdXNpbmcgYm9vc3Q6Om1vdmVfZGV0YWlsOjpldmFsX2lmX2M7Ci11
c2luZyBib29zdDo6bW92ZV9kZXRhaWw6OmV2YWxfaWY7Ci11c2luZyBib29zdDo6bW92ZV9kZXRh
aWw6OnVudm9pZF9yZWY7Ci11c2luZyBib29zdDo6bW92ZV9kZXRhaWw6OmFkZF9jb25zdF9pZl9j
OwotCi10ZW1wbGF0ZTxzdGQ6OnNpemVfdCBTPgotc3RydWN0IGxzX3plcm9zCi17Ci0gICBzdGF0
aWMgY29uc3Qgc3RkOjpzaXplX3QgdmFsdWUgPSAoUyAmIHN0ZDo6c2l6ZV90KDEpKSA/IDAgOiAo
MSArIGxzX3plcm9zPChTPj4xdSk+Ojp2YWx1ZSk7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
bHNfemVyb3M8MD4KLXsKLSAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCB2YWx1ZSA9IDA7Ci19
OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgbHNfemVyb3M8MT4KLXsKLSAgIHN0YXRpYyBjb25zdCBz
dGQ6OnNpemVfdCB2YWx1ZSA9IDA7Ci19OwotCi0vLyBJbmZyYXN0cnVjdHVyZSBmb3IgcHJvdmlk
aW5nIGEgZGVmYXVsdCB0eXBlIGZvciBUOjpUTkFNRSBpZiBhYnNlbnQuCi0jZGVmaW5lIEJPT1NU
X0lOVFJVU0lWRV9JTlNUQU5USUFURV9ERUZBVUxUX1RZUEVfVE1QTFQoVE5BTUUpICAgICBcCi0g
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRGVmYXVsdFR5cGU+ICAgICAgICAgICAg
ICAgICAgICBcCi0gICBzdHJ1Y3QgYm9vc3RfaW50cnVzaXZlX2RlZmF1bHRfdHlwZV8gIyMgVE5B
TUUgICAgICAgICAgICAgICAgICBcCi0gICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgWD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBzdGF0
aWMgY2hhciB0ZXN0KGludCwgdHlwZW5hbWUgWDo6VE5BTUUqKTsgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgWD4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBzdGF0aWMgaW50IHRlc3QoLi4uKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBz
dHJ1Y3QgRGVmYXVsdFdyYXAgeyB0eXBlZGVmIERlZmF1bHRUeXBlIFROQU1FOyB9OyAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9ICgxID09IHNp
emVvZih0ZXN0PFQ+KDAsIDApKSk7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB0eXBlZGVmIHR5
cGVuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICA6OmJvb3N0OjppbnRydXNpdmU6OmRldGFpbDo6aWZfYyAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICA8dmFsdWUsIFQsIERlZmF1bHRXcmFwPjo6dHlwZTo6VE5BTUUg
dHlwZTsgICAgICAgICAgICBcCi0gICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAvLwotCi0jZGVmaW5lIEJPT1NUX0lO
VFJVU0lWRV9PQlRBSU5fVFlQRV9XSVRIX0RFRkFVTFQoSU5TVEFOVElBVElPTl9OU19QUkVGSVgs
IFQsIFROQU1FLCBUSU1QTCkgICBcCi0gICAgICB0eXBlbmFtZSBJTlNUQU5USUFUSU9OX05TX1BS
RUZJWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICBib29zdF9pbnRydXNpdmVfZGVmYXVsdF90eXBlXyAjIyBUTkFNRTwgVCwg
VElNUEwgPjo6dHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0vLwotCi0jZGVmaW5l
IEJPT1NUX0lOVFJVU0lWRV9JTlNUQU5USUFURV9FVkFMX0RFRkFVTFRfVFlQRV9UTVBMVChUTkFN
RSlcCi0gICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRGVmYXVsdFR5cGU+ICAgICAg
ICAgICAgICAgICAgICBcCi0gICBzdHJ1Y3QgYm9vc3RfaW50cnVzaXZlX2V2YWxfZGVmYXVsdF90
eXBlXyAjIyBUTkFNRSAgICAgICAgICAgICBcCi0gICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgWD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICBzdGF0aWMgY2hhciB0ZXN0KGludCwgdHlwZW5hbWUgWDo6VE5BTUUqKTsgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgWD4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBzdGF0aWMgaW50IHRlc3QoLi4u
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICBzdHJ1Y3QgRGVmYXVsdFdyYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICB7IHR5cGVkZWYgdHlwZW5hbWUgRGVmYXVsdFR5cGU6OnR5cGUgVE5B
TUU7IH07ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBzdGF0aWMgY29uc3QgYm9v
bCB2YWx1ZSA9ICgxID09IHNpemVvZih0ZXN0PFQ+KDAsIDApKSk7ICAgICBcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICA6OmJvb3N0OjppbnRydXNpdmU6OmRldGFpbDo6ZXZhbF9p
Zl9jICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICA8IHZhbHVlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAsIDo6Ym9v
c3Q6OmludHJ1c2l2ZTo6ZGV0YWlsOjppZGVudGl0eTxUPiAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICAsIDo6Ym9vc3Q6OmludHJ1c2l2ZTo6ZGV0YWlsOjppZGVudGl0eTxEZWZhdWx0V3JhcD4g
ICBcCi0gICAgICAgICAgICA+Ojp0eXBlOjpUTkFNRSB0eXBlOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0vLwotCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lW
RV9PQlRBSU5fVFlQRV9XSVRIX0VWQUxfREVGQVVMVChJTlNUQU5USUFUSU9OX05TX1BSRUZJWCwg
VCwgVE5BTUUsIFRJTVBMKSBcCi0gICAgICB0eXBlbmFtZSBJTlNUQU5USUFUSU9OX05TX1BSRUZJ
WCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICBib29zdF9pbnRydXNpdmVfZXZhbF9kZWZhdWx0X3R5cGVfICMjIFROQU1F
PCBULCBUSU1QTCA+Ojp0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0vLwotCi0jZGVm
aW5lIEJPT1NUX0lOVFJVU0lWRV9JTlRFUk5BTF9TVEFUSUNfQk9PTF9JU19UUlVFKFRSQUlUU19Q
UkVGSVgsIFRZUEVERUZfVE9fRklORCkgXAotdGVtcGxhdGUgPGNsYXNzIFQ+XAotc3RydWN0IFRS
QUlUU19QUkVGSVgjI19ib29sXAote1wKLSAgIHRlbXBsYXRlPGJvb2wgQWRkPlwKLSAgIHN0cnVj
dCB0d29fb3JfdGhyZWUge3llc190eXBlIF9bMiArIEFkZF07fTtcCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVT4gc3RhdGljIHllc190eXBlIHRlc3QoLi4uKTtcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVT4g
c3RhdGljIHR3b19vcl90aHJlZTxVOjpUWVBFREVGX1RPX0ZJTkQ+IHRlc3QgKGludCk7XAotICAg
c3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IHZhbHVlID0gc2l6ZW9mKHRlc3Q8VD4oMCkpO1wKLX07
XAotXAotdGVtcGxhdGUgPGNsYXNzIFQ+XAotc3RydWN0IFRSQUlUU19QUkVGSVgjI19ib29sX2lz
X3RydWVcCi17XAotICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBUUkFJVFNfUFJFRklYIyNf
Ym9vbDxUPjo6dmFsdWUgPiBzaXplb2YoeWVzX3R5cGUpKjI7XAotfTtcCi0vLwotCi0jZGVmaW5l
IEJPT1NUX0lOVFJVU0lWRV9IQVNfU1RBVElDX01FTUJFUl9GVU5DX1NJR05BVFVSRShUUkFJVFNf
TkFNRSwgRlVOQ19OQU1FKSBcCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBTaWdu
YXR1cmU+IFwKLSAgY2xhc3MgVFJBSVRTX05BTUUgXAotICB7IFwKLSAgcHJpdmF0ZTogXAotICB0
ZW1wbGF0ZTxTaWduYXR1cmU+IHN0cnVjdCBoZWxwZXI7XAotICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBcCi0gIHN0YXRpYyA6OmJvb3N0OjppbnRydXNpdmU6OmRldGFpbDo6eWVzX3R5cGUgdGVzdCho
ZWxwZXI8JlQ6OkZVTkNfTkFNRT4qKTsgXAotICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
Ojpib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6Om5vX3R5cGUgdGVzdCguLi4pOyBcCi0gIHB1Ymxp
YzogXAotICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHNpemVvZih0ZXN0PFU+KDApKSA9PSBz
aXplb2YoOjpib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6Onllc190eXBlKTsgXAotICB9OyBcCi0v
LwotCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9IQVNfTUVNQkVSX0ZVTkNfQ0FMTEVEKFRSQUlU
U19OQU1FLCBGVU5DX05BTUUpIFwKLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPiBcCi1zdHJ1Y3Qg
VFJBSVRTX05BTUUgXAoteyBcCi0gICBzdHJ1Y3QgQmFzZU1peGluIFwKLSAgIHsgXAotICAgICAg
dm9pZCBGVU5DX05BTUUoKTsgXAotICAgfTsgXAotICAgc3RydWN0IEJhc2UgOiBwdWJsaWMgVHlw
ZSwgcHVibGljIEJhc2VNaXhpbiB7IEJhc2UoKTsgfTsgXAotICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQsIFQgdD4gY2xhc3MgSGVscGVye307IFwKLSAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBcCi0g
ICBzdGF0aWMgOjpib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6Om5vX3R5cGUgIHRlc3QoVSosIEhl
bHBlcjx2b2lkIChCYXNlTWl4aW46OiopKCksICZVOjpGVU5DX05BTUU+KiA9IDApOyBcCi0gICBz
dGF0aWMgOjpib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6Onllc190eXBlIHRlc3QoLi4uKTsgXAot
ICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YoOjpib29zdDo6aW50cnVzaXZlOjpk
ZXRhaWw6Onllc190eXBlKSA9PSBzaXplb2YodGVzdCgoQmFzZSopKDApKSk7IFwKLX07XAotLy8K
LQotI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfSEFTX01FTUJFUl9GVU5DX0NBTExFRF9JR05PUkVf
U0lHTkFUVVJFKFRSQUlUU19OQU1FLCBGVU5DX05BTUUpIFwKLUJPT1NUX0lOVFJVU0lWRV9IQVNf
TUVNQkVSX0ZVTkNfQ0FMTEVEKFRSQUlUU19OQU1FIyNfaWdub3JlX3NpZ25hdHVyZSwgRlVOQ19O
QU1FKSBcCi1cCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZSwgY2xhc3M+IFwKLXN0cnVjdCBUUkFJ
VFNfTkFNRSBcCi0gICA6IHB1YmxpYyBUUkFJVFNfTkFNRSMjX2lnbm9yZV9zaWduYXR1cmU8VHlw
ZT4gXAote307XAotLy8KLQotfSAvL25hbWVzcGFjZSBkZXRhaWwKLX0gLy9uYW1lc3BhY2UgaW50
cnVzaXZlCi19IC8vbmFtZXNwYWNlIGJvb3N0Ci0KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUv
ZGV0YWlsL2NvbmZpZ19lbmQuaHBwPgotCi0jZW5kaWYgLy9CT09TVF9JTlRSVVNJVkVfREVUQUlM
X01QTF9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvbm9kZV9ob2xkZXIuaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9ub2RlX2hvbGRlci5o
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZGFiZWYyZGZhZTViZDdjMWY4M2E2
NTMyN2VlNjI4YzIyOGIwODIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVz
aXZlL2RldGFpbC9ub2RlX2hvbGRlci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBA
Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFn
YSAgMjAxNC0yMDE0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gICAgICAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcv
TElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2lu
dHJ1c2l2ZSBmb3IgZG9jdW1lbnRhdGlvbi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0j
aWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxfTk9ERV9IT0xERVJfSFBQCi0jZGVmaW5lIEJP
T1NUX0lOVFJVU0lWRV9ERVRBSUxfTk9ERV9IT0xERVJfSFBQCi0KLSNpZm5kZWYgQk9PU1RfQ09O
RklHX0hQUAotIyAgaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNlbmRpZgotCi0jaWYgZGVm
aW5lZChCT09TVF9IQVNfUFJBR01BX09OQ0UpCi0jICBwcmFnbWEgb25jZQotI2VuZGlmCi0KLW5h
bWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgaW50cnVzaXZlIHsKLQotdGVtcGxhdGU8Y2xhc3Mg
Tm9kZSwgY2xhc3MgVGFnLCB1bnNpZ25lZCBpbnQ+Ci1zdHJ1Y3Qgbm9kZV9ob2xkZXIKLSAgIDog
IHB1YmxpYyBOb2RlCi17fTsKLQotfSAgLy9uYW1lc3BhY2UgaW50cnVzaXZlewotfSAgLy9uYW1l
c3BhY2UgYm9vc3R7Ci0KLSNlbmRpZiAvL0JPT1NUX0lOVFJVU0lWRV9ERVRBSUxfTk9ERV9IT0xE
RVJfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9pbnRydXNpdmUvZGV0YWlsL3BhcmVudF9mcm9tX21lbWJlci5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL3BhcmVudF9m
cm9tX21lbWJlci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NTIyOWFiNDc0
YTBkODJkMTNkZjNmYTVhYmVkMmU0YTgwNGE0ZjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9wYXJlbnRfZnJvbV9tZW1iZXIuaHBwCisrKyAvZGV2L251
bGwKQEAgLTEsMTIxICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gKEMpIENv
cHlyaWdodCBJb24gR2F6dGFuYWdhICAyMDA3LTIwMTMKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRl
ciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAgICAoU2VlIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgICAgICAgICBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL2xpYnMvaW50cnVzaXZlIGZvciBkb2N1bWVudGF0aW9uLgotLy8KLS8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxfUEFSRU5UX0ZS
T01fTUVNQkVSX0hQUAotI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfREVUQUlMX1BBUkVOVF9GUk9N
X01FTUJFUl9IUFAKLQotI2lmbmRlZiBCT09TVF9DT05GSUdfSFBQCi0jICBpbmNsdWRlIDxib29z
dC9jb25maWcuaHBwPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19QUkFHTUFfT05D
RSkKLSMgIHByYWdtYSBvbmNlCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9k
ZXRhaWwvY29uZmlnX2JlZ2luLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWls
L3dvcmthcm91bmQuaHBwPgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLSNpZiBkZWZpbmVkKF9NU0Nf
VkVSKQotICAgI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfTVNWQ19BQklfUFRSX1RPX01FTUJFUgot
ICAgI2luY2x1ZGUgPGJvb3N0L3N0YXRpY19hc3NlcnQuaHBwPgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBib29zdCB7Ci1uYW1lc3BhY2UgaW50cnVzaXZlIHsKLW5hbWVzcGFjZSBkZXRhaWwgewotCi10
ZW1wbGF0ZTxjbGFzcyBQYXJlbnQsIGNsYXNzIE1lbWJlcj4KLUJPT1NUX0lOVFJVU0lWRV9GT1JD
RUlOTElORSBzdGQ6OnB0cmRpZmZfdCBvZmZzZXRfZnJvbV9wb2ludGVyX3RvX21lbWJlcihjb25z
dCBNZW1iZXIgUGFyZW50OjoqIHB0cl90b19tZW1iZXIpCi17Ci0gICAvL1RoZSBpbXBsZW1lbnRh
dGlvbiBvZiBhIHBvaW50ZXIgdG8gbWVtYmVyIGlzIGNvbXBpbGVyIGRlcGVuZGVudC4KLSAgICNp
ZiBkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9NU1ZDX0FCSV9QVFJfVE9fTUVNQkVSKQotCi0gICAv
L01TVkMgY29tcGxpYW50IGNvbXBpbGVycyB1c2UgdGhlaXIgdGhlIGZpcnN0IDMyIGJpdHMgYXMg
b2Zmc2V0IChldmVuIGluIDY0IGJpdCBtb2RlKQotICAgdW5pb24gY2FzdGVyX3VuaW9uCi0gICB7
Ci0gICAgICBjb25zdCBNZW1iZXIgUGFyZW50OjoqIHB0cl90b19tZW1iZXI7Ci0gICAgICBpbnQg
b2Zmc2V0OwotICAgfSBjYXN0ZXI7Ci0KLSAgIC8vTVNWQyBBQkkgY2FuIHVzZSB1cCB0byAzIGlu
dDMyIHRvIHJlcHJlc2VudCBwb2ludGVyIHRvIG1lbWJlciBkYXRhCi0gICAvL3dpdGggdmlydHVh
bCBiYXNlIGNsYXNzZXMsIGluIHRob3NlIGNhc2VzIHRoZXJlIGlzIG5vIHNpbXBsZSB0bwotICAg
Ly9vYnRhaW4gdGhlIGFkZHJlc3Mgb2YgdGhlIHBhcmVudC4gU28gc3RhdGljIGFzc2VydCB0byBh
dm9pZCBydW50aW1lIGVycm9ycwotICAgQk9PU1RfU1RBVElDX0FTU0VSVCggc2l6ZW9mKGNhc3Rl
cikgPT0gc2l6ZW9mKGludCkgKTsKLQotICAgY2FzdGVyLnB0cl90b19tZW1iZXIgPSBwdHJfdG9f
bWVtYmVyOwotICAgcmV0dXJuIHN0ZDo6cHRyZGlmZl90KGNhc3Rlci5vZmZzZXQpOwotICAgLy9B
ZGRpdGlvbmFsIGluZm8gb24gTVNWQyBiZWhhdmlvdXIgZm9yIHRoZSBmdXR1cmUuIEZvciAyLzMg
aW50IHB0ci10by1tZW1iZXIKLSAgIC8vdHlwZXMgZGVyZWZlcmVuY2Ugc2VlbXMgdG8gYmU6Ci0g
ICAvLwotICAgLy8gdmJvZmZzZXQgPSBbY29tcGlsZV90aW1lX29mZnNldCBpZiAyLWludCBwdHIy
bWVtYl0gLwotICAgLy8gICAgICAgICAgICBbcHRyMm1lbWIuaTMyWzJdIGlmIDMtaW50IHB0cjJt
ZW1iXS4KLSAgIC8vIHZidGFibGUgPSAqKHRoaXMgKyB2Ym9mZnNldCk7Ci0gICAvLyBhZGogPSB2
YnRhYmxlW3B0cjJtZW1iLmkzMlsxXV07Ci0gICAvLyB2YXIgPSBhZGogKyAodGhpcyArIHZib2Zm
c2V0KSArIHB0cjJtZW1iLmkzMlswXTsKLSAgIC8vCi0gICAvL1RvIHJldmVyc2UgdGhlIG9wZXJh
dGlvbiB3ZSBuZWVkIHRvCi0gICAvLyAtIG9idGFpbiB2Ym9mZnNldCAoaW4gMi1pbnQgcHRyMm1l
bWIgaW1wbGVtZW50YXRpb24gb25seSkKLSAgIC8vIC0gR28gdG8gUGFyZW50J3MgdmJ0YWJsZSBh
bmQgb2J0YWluIGFkanVzdG1lbnQgYXQgaW5kZXggcHRyMm1lbWIuaTMyWzFdCi0gICAvLyAtIHBh
cmVudCA9IG1lbWJlciAtIGFkaiAtIHZib2Zmc2V0IC0gcHRyMm1lbWIuaTMyWzBdCi0gICAvLwot
ICAgLy9FdmVuIGFjY2Vzc2luZyB0byBSVFRJIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIG9idGFp
biB0aGlzIGluZm9ybWF0aW9uCi0gICAvL3NvIGFueW9uZSB3aG8gdGhpbmtzIGl0J3MgcG9zc2li
bGUsIHBsZWFzZSBzZW5kIGEgcGF0Y2guCi0KLSAgIC8vVGhpcyB3b3JrcyB3aXRoIGdjYywgbXN2
YywgYWMrKywgaWJtY3BwCi0gICAjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAgIHx8IGRlZmluZWQo
X19IUF9hQ0MpIHx8IGRlZmluZWQoQk9PU1RfSU5URUwpIHx8IFwKLSAgICAgICAgIGRlZmluZWQo
X19JQk1DUFBfXykgfHwgZGVmaW5lZChfX0RFQ0NYWCkKLSAgIGNvbnN0IFBhcmVudCAqIGNvbnN0
IHBhcmVudCA9IDA7Ci0gICBjb25zdCBjaGFyICpjb25zdCBtZW1iZXIgPSBzdGF0aWNfY2FzdDxj
b25zdCBjaGFyKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCYocGFyZW50LT4qcHRyX3RvX21l
bWJlcikpKTsKLSAgIHJldHVybiBzdGQ6OnB0cmRpZmZfdChtZW1iZXIgLSBzdGF0aWNfY2FzdDxj
b25zdCBjaGFyKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KHBhcmVudCkpKTsKLSAgICNlbHNl
Ci0gICAvL1RoaXMgaXMgdGhlIHRyYWRpdGlvbmFsIEMtZnJvbnQgYXBwcm9hY2g6IF9fTVdFUktT
X18sIF9fRE1DX18sIF9fU1VOUFJPX0NDCi0gICB1bmlvbiBjYXN0ZXJfdW5pb24KLSAgIHsKLSAg
ICAgIGNvbnN0IE1lbWJlciBQYXJlbnQ6OiogcHRyX3RvX21lbWJlcjsKLSAgICAgIHN0ZDo6cHRy
ZGlmZl90IG9mZnNldDsKLSAgIH0gY2FzdGVyOwotICAgY2FzdGVyLnB0cl90b19tZW1iZXIgPSBw
dHJfdG9fbWVtYmVyOwotICAgcmV0dXJuIGNhc3Rlci5vZmZzZXQgLSAxOwotICAgI2VuZGlmCi19
Ci0KLXRlbXBsYXRlPGNsYXNzIFBhcmVudCwgY2xhc3MgTWVtYmVyPgotQk9PU1RfSU5UUlVTSVZF
X0ZPUkNFSU5MSU5FIFBhcmVudCAqcGFyZW50X2Zyb21fbWVtYmVyKE1lbWJlciAqbWVtYmVyLCBj
b25zdCBNZW1iZXIgUGFyZW50OjoqIHB0cl90b19tZW1iZXIpCi17Ci0gICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UGFyZW50Kj4KLSAgICAgICgKLSAgICAgICAgIHN0YXRpY19jYXN0PHZvaWQqPgotICAg
ICAgICAgKAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YXRpY19jYXN0PHZvaWQq
PihtZW1iZXIpKSAtIG9mZnNldF9mcm9tX3BvaW50ZXJfdG9fbWVtYmVyKHB0cl90b19tZW1iZXIp
Ci0gICAgICAgICApCi0gICAgICApOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBQYXJlbnQsIGNsYXNz
IE1lbWJlcj4KLUJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBjb25zdCBQYXJlbnQgKnBhcmVu
dF9mcm9tX21lbWJlcihjb25zdCBNZW1iZXIgKm1lbWJlciwgY29uc3QgTWVtYmVyIFBhcmVudDo6
KiBwdHJfdG9fbWVtYmVyKQotewotICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFBhcmVudCo+
Ci0gICAgICAoCi0gICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4KLSAgICAgICAgICgK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzdGF0aWNfY2FzdDxjb25zdCB2
b2lkKj4obWVtYmVyKSkgLSBvZmZzZXRfZnJvbV9wb2ludGVyX3RvX21lbWJlcihwdHJfdG9fbWVt
YmVyKQotICAgICAgICAgKQotICAgICAgKTsKLX0KLQotfSAgLy9uYW1lc3BhY2UgZGV0YWlsIHsK
LX0gIC8vbmFtZXNwYWNlIGludHJ1c2l2ZSB7Ci19ICAvL25hbWVzcGFjZSBib29zdCB7Ci0KLSNp
bmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL2NvbmZpZ19lbmQuaHBwPgotCi0jZW5kaWYg
ICAvLyNpZm5kZWYgQk9PU1RfSU5UUlVTSVZFX0RFVEFJTF9QQVJFTlRfRlJPTV9NRU1CRVJfSFBQ
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9p
bnRydXNpdmUvZGV0YWlsL3BvaW50ZXJfZWxlbWVudC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL3BvaW50ZXJfZWxlbWVudC5o
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMjZlM2NmMGI0ZDBjZDRlOTk1Mjlh
YmY3NDgwZmQ2MDNlMDBkMWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVz
aXZlL2RldGFpbC9wb2ludGVyX2VsZW1lbnQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICsw
LDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdh
enRhbmFnYSAyMDE0LTIwMTQuIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdAotLy8gU29mdHdh
cmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUKLS8vIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9pbnRydXNpdmUgZm9yIGRv
Y3VtZW50YXRpb24uCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNpZm5kZWYgQk9PU1Rf
SU5UUlVTSVZFX0RFVEFJTF9QT0lOVEVSX0VMRU1FTlRfSFBQCi0jZGVmaW5lIEJPT1NUX0lOVFJV
U0lWRV9ERVRBSUxfUE9JTlRFUl9FTEVNRU5UX0hQUAotCi0jaWZuZGVmIEJPT1NUX0NPTkZJR19I
UFAKLSMgIGluY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQo
Qk9PU1RfSEFTX1BSQUdNQV9PTkNFKQotIyAgcHJhZ21hIG9uY2UKLSNlbmRpZgotCi0jaWZuZGVm
IEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxfV09SS0FST1VORF9IUFAKLSNpbmNsdWRlIDxib29zdC9p
bnRydXNpdmUvZGV0YWlsL3dvcmthcm91bmQuaHBwPgotI2VuZGlmICAgLy9CT09TVF9JTlRSVVNJ
VkVfREVUQUlMX1dPUktBUk9VTkRfSFBQCi0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2Ug
aW50cnVzaXZlIHsKLW5hbWVzcGFjZSBkZXRhaWx7Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LS8vc3RydWN0IGZpcnN0X3BhcmFtCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBzdHJ1Y3QgZmlyc3RfcGFyYW0KLXsgIHR5cGVkZWYgdm9pZCB0eXBlOyAg
IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9WQVJJQURJQ19URU1QTEFURVMpCi0K
LSAgIHRlbXBsYXRlIDx0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLi4uPiBjbGFzcyBUZW1w
bGF0ZUNsYXNzLCB0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgotICAgc3RydWN0IGZpcnN0
X3BhcmFtPCBUZW1wbGF0ZUNsYXNzPFQsIEFyZ3MuLi4+ID4KLSAgIHsKLSAgICAgIHR5cGVkZWYg
VCB0eXBlOwotICAgfTsKLQotI2Vsc2UgLy9DKyswMyBjb21waWxlcnMKLQotICAgdGVtcGxhdGUg
PCB0ZW1wbGF0ZSAgLy8wYXJnCi0gICAgICAgICAgICAgICA8Y2xhc3MKLSAgICAgICAgICAgICAg
ID4gY2xhc3MgVGVtcGxhdGVDbGFzcywgY2xhc3MgVAotICAgICAgICAgICAgPgotICAgc3RydWN0
IGZpcnN0X3BhcmFtCi0gICAgICA8IFRlbXBsYXRlQ2xhc3M8VD4gPgotICAgeyAgdHlwZWRlZiBU
IHR5cGU7ICAgfTsKLQotICAgdGVtcGxhdGUgPCB0ZW1wbGF0ZSAgLy8xYXJnCi0gICAgICAgICAg
ICAgICA8Y2xhc3MsY2xhc3MKLSAgICAgICAgICAgICAgID4gY2xhc3MgVGVtcGxhdGVDbGFzcywg
Y2xhc3MgVAotICAgICAgICAgICAgLCBjbGFzcyBQMD4KLSAgIHN0cnVjdCBmaXJzdF9wYXJhbQot
ICAgICAgPCBUZW1wbGF0ZUNsYXNzPFQsIFAwPiA+Ci0gICB7ICB0eXBlZGVmIFQgdHlwZTsgICB9
OwotCi0gICB0ZW1wbGF0ZSA8IHRlbXBsYXRlICAvLzJhcmcKLSAgICAgICAgICAgICAgIDxjbGFz
cyxjbGFzcyxjbGFzcwotICAgICAgICAgICAgICAgPiBjbGFzcyBUZW1wbGF0ZUNsYXNzLCBjbGFz
cyBUCi0gICAgICAgICAgICAsIGNsYXNzIFAwLCBjbGFzcyBQMT4KLSAgIHN0cnVjdCBmaXJzdF9w
YXJhbQotICAgICAgPCBUZW1wbGF0ZUNsYXNzPFQsIFAwLCBQMT4gPgotICAgeyAgdHlwZWRlZiBU
IHR5cGU7ICAgfTsKLQotICAgdGVtcGxhdGUgPCB0ZW1wbGF0ZSAgLy8zYXJnCi0gICAgICAgICAg
ICAgICA8Y2xhc3MsY2xhc3MsY2xhc3MsY2xhc3MKLSAgICAgICAgICAgICAgID4gY2xhc3MgVGVt
cGxhdGVDbGFzcywgY2xhc3MgVAotICAgICAgICAgICAgLCBjbGFzcyBQMCwgY2xhc3MgUDEsIGNs
YXNzIFAyPgotICAgc3RydWN0IGZpcnN0X3BhcmFtCi0gICAgICA8IFRlbXBsYXRlQ2xhc3M8VCwg
UDAsIFAxLCBQMj4gPgotICAgeyAgdHlwZWRlZiBUIHR5cGU7ICAgfTsKLQotICAgdGVtcGxhdGUg
PCB0ZW1wbGF0ZSAgLy80YXJnCi0gICAgICAgICAgICAgICA8Y2xhc3MsY2xhc3MsY2xhc3MsY2xh
c3MsY2xhc3MKLSAgICAgICAgICAgICAgID4gY2xhc3MgVGVtcGxhdGVDbGFzcywgY2xhc3MgVAot
ICAgICAgICAgICAgLCBjbGFzcyBQMCwgY2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMz4KLSAg
IHN0cnVjdCBmaXJzdF9wYXJhbQotICAgICAgPCBUZW1wbGF0ZUNsYXNzPFQsIFAwLCBQMSwgUDIs
IFAzPiA+Ci0gICB7ICB0eXBlZGVmIFQgdHlwZTsgICB9OwotCi0gICB0ZW1wbGF0ZSA8IHRlbXBs
YXRlICAvLzVhcmcKLSAgICAgICAgICAgICAgIDxjbGFzcyxjbGFzcyxjbGFzcyxjbGFzcyxjbGFz
cyxjbGFzcwotICAgICAgICAgICAgICAgPiBjbGFzcyBUZW1wbGF0ZUNsYXNzLCBjbGFzcyBUCi0g
ICAgICAgICAgICAsIGNsYXNzIFAwLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCBjbGFz
cyBQND4KLSAgIHN0cnVjdCBmaXJzdF9wYXJhbQotICAgICAgPCBUZW1wbGF0ZUNsYXNzPFQsIFAw
LCBQMSwgUDIsIFAzLCBQND4gPgotICAgeyAgdHlwZWRlZiBUIHR5cGU7ICAgfTsKLQotICAgdGVt
cGxhdGUgPCB0ZW1wbGF0ZSAgLy82YXJnCi0gICAgICAgICAgICAgICA8Y2xhc3MsY2xhc3MsY2xh
c3MsY2xhc3MsY2xhc3MsY2xhc3MsY2xhc3MKLSAgICAgICAgICAgICAgID4gY2xhc3MgVGVtcGxh
dGVDbGFzcywgY2xhc3MgVAotICAgICAgICAgICAgLCBjbGFzcyBQMCwgY2xhc3MgUDEsIGNsYXNz
IFAyLCBjbGFzcyBQMywgY2xhc3MgUDQsIGNsYXNzIFA1PgotICAgc3RydWN0IGZpcnN0X3BhcmFt
Ci0gICAgICA8IFRlbXBsYXRlQ2xhc3M8VCwgUDAsIFAxLCBQMiwgUDMsIFA0LCBQNT4gPgotICAg
eyAgdHlwZWRlZiBUIHR5cGU7ICAgfTsKLQotICAgdGVtcGxhdGUgPCB0ZW1wbGF0ZSAgLy83YXJn
Ci0gICAgICAgICAgICAgICA8Y2xhc3MsY2xhc3MsY2xhc3MsY2xhc3MsY2xhc3MsY2xhc3MsY2xh
c3MsY2xhc3MKLSAgICAgICAgICAgICAgID4gY2xhc3MgVGVtcGxhdGVDbGFzcywgY2xhc3MgVAot
ICAgICAgICAgICAgLCBjbGFzcyBQMCwgY2xhc3MgUDEsIGNsYXNzIFAyLCBjbGFzcyBQMywgY2xh
c3MgUDQsIGNsYXNzIFA1LCBjbGFzcyBQNj4KLSAgIHN0cnVjdCBmaXJzdF9wYXJhbQotICAgICAg
PCBUZW1wbGF0ZUNsYXNzPFQsIFAwLCBQMSwgUDIsIFAzLCBQNCwgUDUsIFA2PiA+Ci0gICB7ICB0
eXBlZGVmIFQgdHlwZTsgICB9OwotCi0gICB0ZW1wbGF0ZSA8IHRlbXBsYXRlICAvLzhhcmcKLSAg
ICAgICAgICAgICAgIDxjbGFzcyxjbGFzcyxjbGFzcyxjbGFzcyxjbGFzcyxjbGFzcyxjbGFzcyxj
bGFzcyxjbGFzcwotICAgICAgICAgICAgICAgPiBjbGFzcyBUZW1wbGF0ZUNsYXNzLCBjbGFzcyBU
Ci0gICAgICAgICAgICAsIGNsYXNzIFAwLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCBj
bGFzcyBQNCwgY2xhc3MgUDUsIGNsYXNzIFA2LCBjbGFzcyBQNz4KLSAgIHN0cnVjdCBmaXJzdF9w
YXJhbQotICAgICAgPCBUZW1wbGF0ZUNsYXNzPFQsIFAwLCBQMSwgUDIsIFAzLCBQNCwgUDUsIFA2
LCBQNz4gPgotICAgeyAgdHlwZWRlZiBUIHR5cGU7ICAgfTsKLQotICAgdGVtcGxhdGUgPCB0ZW1w
bGF0ZSAgLy85YXJnCi0gICAgICAgICAgICAgICA8Y2xhc3MsY2xhc3MsY2xhc3MsY2xhc3MsY2xh
c3MsY2xhc3MsY2xhc3MsY2xhc3MsY2xhc3MsY2xhc3MKLSAgICAgICAgICAgICAgID4gY2xhc3Mg
VGVtcGxhdGVDbGFzcywgY2xhc3MgVAotICAgICAgICAgICAgLCBjbGFzcyBQMCwgY2xhc3MgUDEs
IGNsYXNzIFAyLCBjbGFzcyBQMywgY2xhc3MgUDQsIGNsYXNzIFA1LCBjbGFzcyBQNiwgY2xhc3Mg
UDcsIGNsYXNzIFA4PgotICAgc3RydWN0IGZpcnN0X3BhcmFtCi0gICAgICA8IFRlbXBsYXRlQ2xh
c3M8VCwgUDAsIFAxLCBQMiwgUDMsIFA0LCBQNSwgUDYsIFA3LCBQOD4gPgotICAgeyAgdHlwZWRl
ZiBUIHR5cGU7ICAgfTsKLQotI2VuZGlmICAgLy8hZGVmaW5lZChCT09TVF9OT19DWFgxMV9WQVJJ
QURJQ19URU1QTEFURVMpCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IGhhc19pbnRl
cm5hbF9wb2ludGVyX2VsZW1lbnQKLXsKLSAgIHRlbXBsYXRlIDx0eXBlbmFtZSBYPgotICAgc3Rh
dGljIGNoYXIgdGVzdChpbnQsIHR5cGVuYW1lIFg6OmVsZW1lbnRfdHlwZSopOwotCi0gICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgWD4KLSAgIHN0YXRpYyBpbnQgdGVzdCguLi4pOwotCi0gICBzdGF0aWMg
Y29uc3QgYm9vbCB2YWx1ZSA9ICgxID09IHNpemVvZih0ZXN0PFQ+KDAsIDApKSk7Ci19OwotCi10
ZW1wbGF0ZTxjbGFzcyBQdHIsIGJvb2wgPSBoYXNfaW50ZXJuYWxfcG9pbnRlcl9lbGVtZW50PFB0
cj46OnZhbHVlPgotc3RydWN0IHBvaW50ZXJfZWxlbWVudF9pbXBsCi17Ci0gICB0eXBlZGVmIHR5
cGVuYW1lIFB0cjo6ZWxlbWVudF90eXBlIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBQdHI+
Ci1zdHJ1Y3QgcG9pbnRlcl9lbGVtZW50X2ltcGw8UHRyLCBmYWxzZT4KLXsKLSAgIHR5cGVkZWYg
dHlwZW5hbWUgYm9vc3Q6OmludHJ1c2l2ZTo6ZGV0YWlsOjpmaXJzdF9wYXJhbTxQdHI+Ojp0eXBl
IHR5cGU7Ci19OwotCi19ICAvL25hbWVzcGFjZSBkZXRhaWx7Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBQdHI+Ci1zdHJ1Y3QgcG9pbnRlcl9lbGVtZW50Ci17Ci0gICB0eXBlZGVmIHR5cGVuYW1lIDo6
Ym9vc3Q6OmludHJ1c2l2ZTo6ZGV0YWlsOjpwb2ludGVyX2VsZW1lbnRfaW1wbDxQdHI+Ojp0eXBl
IHR5cGU7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBwb2ludGVyX2VsZW1l
bnQ8VCo+Ci17ICB0eXBlZGVmIFQgdHlwZTsgfTsKLQotfSAgLy9uYW1lc3BhY2UgY29udGFpbmVy
IHsKLX0gIC8vbmFtZXNwYWNlIGJvb3N0IHsKLQotI2VuZGlmIC8vIGRlZmluZWQoQk9PU1RfSU5U
UlVTSVZFX0RFVEFJTF9QT0lOVEVSX0VMRU1FTlRfSFBQKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9yZXZlcnNl
X2l0ZXJhdG9yLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L2ludHJ1c2l2ZS9kZXRhaWwvcmV2ZXJzZV9pdGVyYXRvci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDU3NjMxZmViNWQ0Y2JiOGQyYzQ0Mzc5ZDQxYWY4ZGVhYmM3OGJkZWUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9yZXZlcnNlX2l0
ZXJhdG9yLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotLy8KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAgMjAxNC0yMDE0Ci0v
LwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNp
b24gMS4wLgotLy8gICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdAotLy8gICAgICAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0
KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3IgZG9j
dW1lbnRhdGlvbi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jaWZuZGVmIEJPT1NUX0lO
VFJVU0lWRV9ERVRBSUxfUkVWRVJTRV9JVEVSQVRPUl9IUFAKLSNkZWZpbmUgQk9PU1RfSU5UUlVT
SVZFX0RFVEFJTF9SRVZFUlNFX0lURVJBVE9SX0hQUAotCi0jaWZuZGVmIEJPT1NUX0NPTkZJR19I
UFAKLSMgIGluY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQo
Qk9PU1RfSEFTX1BSQUdNQV9PTkNFKQotIyAgcHJhZ21hIG9uY2UKLSNlbmRpZgotCi0jaW5jbHVk
ZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9jb25maWdfYmVnaW4uaHBwPgotI2luY2x1ZGUgPGJv
b3N0L2ludHJ1c2l2ZS9kZXRhaWwvaXRlcmF0b3IuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2ludHJ1
c2l2ZS9kZXRhaWwvbXBsLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSBpbnRy
dXNpdmUgewotCi10ZW1wbGF0ZTxjbGFzcyBJdD4KLWNsYXNzIHJldmVyc2VfaXRlcmF0b3IKLXsK
LSAgIHB1YmxpYzoKLSAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmludHJ1c2l2ZTo6aXRlcmF0
b3JfdHJhaXRzPEl0Pjo6cG9pbnRlciAgICAgICAgICAgICBwb2ludGVyOwotICAgdHlwZWRlZiB0
eXBlbmFtZSBib29zdDo6aW50cnVzaXZlOjppdGVyYXRvcl90cmFpdHM8SXQ+OjpyZWZlcmVuY2Ug
ICAgICAgICAgIHJlZmVyZW5jZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmludHJ1c2l2
ZTo6aXRlcmF0b3JfdHJhaXRzPEl0Pjo6ZGlmZmVyZW5jZV90eXBlICAgICBkaWZmZXJlbmNlX3R5
cGU7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0OjppbnRydXNpdmU6Oml0ZXJhdG9yX3RyYWl0
czxJdD46Oml0ZXJhdG9yX2NhdGVnb3J5ICAgaXRlcmF0b3JfY2F0ZWdvcnk7Ci0gICB0eXBlZGVm
IHR5cGVuYW1lIGJvb3N0OjppbnRydXNpdmU6Oml0ZXJhdG9yX3RyYWl0czxJdD46OnZhbHVlX3R5
cGUgICAgICAgICAgdmFsdWVfdHlwZTsKLQotCi0gICB0eXBlZGVmIEl0IGl0ZXJhdG9yX3R5cGU7
Ci0KLSAgIHJldmVyc2VfaXRlcmF0b3IoKQotICAgICAgOiBtX2N1cnJlbnQoKSAgLy9WYWx1ZSBp
bml0aWFsaXphdGlvbiB0byBhY2hpZXZlICJudWxsIGl0ZXJhdG9ycyIgKE4zNjQ0KQotICAge30K
LQotICAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihJdCByKQotICAgICAgOiBtX2N1cnJlbnQo
cikKLSAgIHt9Ci0KLSAgIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvciYg
cikKLSAgICAgIDogbV9jdXJyZW50KHIuYmFzZSgpKQotICAge30KLQotICAgdGVtcGxhdGU8Y2xh
c3MgT3RoZXJJdD4KLSAgIHJldmVyc2VfaXRlcmF0b3IoIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
T3RoZXJJdD4mIHIKLSAgICAgICAgICAgICAgICAgICAsIHR5cGVuYW1lIGJvb3N0OjppbnRydXNp
dmU6OmRldGFpbDo6ZW5hYmxlX2lmX2NvbnZlcnRpYmxlPE90aGVySXQsIEl0Pjo6dHlwZSogPTAK
LSAgICAgICAgICAgICAgICAgICApCi0gICAgICA6IG1fY3VycmVudChyLmJhc2UoKSkKLSAgIHt9
Ci0KLSAgIHJldmVyc2VfaXRlcmF0b3IgJiBvcGVyYXRvcj0oIGNvbnN0IHJldmVyc2VfaXRlcmF0
b3ImIHIpCi0gICB7ICBtX2N1cnJlbnQgPSByLmJhc2UoKTsgICByZXR1cm4gKnRoaXM7ICB9Ci0K
LSAgIHRlbXBsYXRlPGNsYXNzIE90aGVySXQ+Ci0gICB0eXBlbmFtZSBib29zdDo6aW50cnVzaXZl
OjpkZXRhaWw6OmVuYWJsZV9pZl9jb252ZXJ0aWJsZTxPdGhlckl0LCBJdCwgcmV2ZXJzZV9pdGVy
YXRvciAmPjo6dHlwZQotICAgICAgICAgb3BlcmF0b3I9KCBjb25zdCByZXZlcnNlX2l0ZXJhdG9y
PE90aGVySXQ+JiByKQotICAgeyAgbV9jdXJyZW50ID0gci5iYXNlKCk7ICAgcmV0dXJuICp0aGlz
OyAgfQotCi0gICBJdCBiYXNlKCkgY29uc3QKLSAgIHsgIHJldHVybiBtX2N1cnJlbnQ7ICB9Ci0K
LSAgIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdAotICAgewotICAgICAgSXQgdGVtcChtX2N1
cnJlbnQpOwotICAgICAgLS10ZW1wOwotICAgICAgcmVmZXJlbmNlIHIgPSAqdGVtcDsKLSAgICAg
IHJldHVybiByOwotICAgfQotCi0gICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdAotICAgewot
ICAgICAgSXQgdGVtcChtX2N1cnJlbnQpOwotICAgICAgLS10ZW1wOwotICAgICAgcmV0dXJuIGl0
ZXJhdG9yX2Fycm93X3Jlc3VsdCh0ZW1wKTsKLSAgIH0KLQotICAgcmVmZXJlbmNlIG9wZXJhdG9y
W10oZGlmZmVyZW5jZV90eXBlIG9mZikgY29uc3QKLSAgIHsKLSAgICAgIHJldHVybiB0aGlzLT5t
X2N1cnJlbnRbLW9mZiAtIDFdOwotICAgfQotCi0gICByZXZlcnNlX2l0ZXJhdG9yJiBvcGVyYXRv
cisrKCkKLSAgIHsKLSAgICAgIC0tbV9jdXJyZW50OwotICAgICAgcmV0dXJuICp0aGlzOwotICAg
fQotCi0gICByZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KQotICAgewotICAgICAgcmV2
ZXJzZV9pdGVyYXRvciB0ZW1wKCgqdGhpcykpOwotICAgICAgLS1tX2N1cnJlbnQ7Ci0gICAgICBy
ZXR1cm4gdGVtcDsKLSAgIH0KLQotICAgcmV2ZXJzZV9pdGVyYXRvciYgb3BlcmF0b3ItLSgpCi0g
ICB7Ci0gICAgICArK21fY3VycmVudDsKLSAgICAgIHJldHVybiAqdGhpczsKLSAgIH0KLQotICAg
cmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvci0tKGludCkKLSAgIHsKLSAgICAgIHJldmVyc2VfaXRl
cmF0b3IgdGVtcCgoKnRoaXMpKTsKLSAgICAgICsrbV9jdXJyZW50OwotICAgICAgcmV0dXJuIHRl
bXA7Ci0gICB9Ci0KLSAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVy
YXRvciYgbCwgY29uc3QgcmV2ZXJzZV9pdGVyYXRvciYgcikKLSAgIHsgIHJldHVybiBsLm1fY3Vy
cmVudCA9PSByLm1fY3VycmVudDsgIH0KLQotICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25z
dCByZXZlcnNlX2l0ZXJhdG9yJiBsLCBjb25zdCByZXZlcnNlX2l0ZXJhdG9yJiByKQotICAgeyAg
cmV0dXJuIGwubV9jdXJyZW50ICE9IHIubV9jdXJyZW50OyAgfQotCi0gICBmcmllbmQgYm9vbCBv
cGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvciYgbCwgY29uc3QgcmV2ZXJzZV9pdGVyYXRv
ciYgcikKLSAgIHsgIHJldHVybiBsLm1fY3VycmVudCA+IHIubV9jdXJyZW50OyAgfQotCi0gICBm
cmllbmQgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImIGwsIGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3ImIHIpCi0gICB7ICByZXR1cm4gbC5tX2N1cnJlbnQgPj0gci5tX2N1cnJl
bnQ7ICB9Ci0KLSAgIGZyaWVuZCBib29sIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9y
JiBsLCBjb25zdCByZXZlcnNlX2l0ZXJhdG9yJiByKQotICAgeyAgcmV0dXJuIGwubV9jdXJyZW50
IDwgci5tX2N1cnJlbnQ7ICB9Ci0KLSAgIGZyaWVuZCBib29sIG9wZXJhdG9yPj0oY29uc3QgcmV2
ZXJzZV9pdGVyYXRvciYgbCwgY29uc3QgcmV2ZXJzZV9pdGVyYXRvciYgcikKLSAgIHsgIHJldHVy
biBsLm1fY3VycmVudCA8PSByLm1fY3VycmVudDsgIH0KLQotICAgcmV2ZXJzZV9pdGVyYXRvciYg
b3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgb2ZmKQotICAgeyAgbV9jdXJyZW50IC09IG9mZjsg
cmV0dXJuICp0aGlzOyAgfQotCi0gICByZXZlcnNlX2l0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZl
cmVuY2VfdHlwZSBvZmYpCi0gICB7ICBtX2N1cnJlbnQgKz0gb2ZmOyByZXR1cm4gKnRoaXM7ICB9
Ci0KLSAgIGZyaWVuZCByZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yKyhyZXZlcnNlX2l0ZXJhdG9y
IGwsIGRpZmZlcmVuY2VfdHlwZSBvZmYpCi0gICB7ICByZXR1cm4gKGwgKz0gb2ZmKTsgIH0KLQot
ICAgZnJpZW5kIHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBvZmYs
IHJldmVyc2VfaXRlcmF0b3IgcikKLSAgIHsgIHJldHVybiAociArPSBvZmYpOyAgIH0KLQotICAg
ZnJpZW5kIHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3ItKHJldmVyc2VfaXRlcmF0b3IgbCwgZGlm
ZmVyZW5jZV90eXBlIG9mZikKLSAgIHsgIHJldHVybiAobC09IG9mZik7ICB9Ci0KLSAgIGZyaWVu
ZCBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImIGwsIGNv
bnN0IHJldmVyc2VfaXRlcmF0b3ImIHIpCi0gICB7ICByZXR1cm4gci5tX2N1cnJlbnQgLSBsLm1f
Y3VycmVudDsgIH0KLQotICAgcHJpdmF0ZToKLSAgIEl0IG1fY3VycmVudDsgICAvLyB0aGUgd3Jh
cHBlZCBpdGVyYXRvcgotfTsKLQotfSAvL25hbWVzcGFjZSBpbnRydXNpdmUgewotfSAvL25hbWVz
cGFjZSBib29zdCB7Ci0KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL2NvbmZpZ19l
bmQuaHBwPgotCi0jZW5kaWYgLy9CT09TVF9JTlRSVVNJVkVfREVUQUlMX1JFVkVSU0VfSVRFUkFU
T1JfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9pbnRydXNpdmUvZGV0YWlsL3NpbXBsZV9kaXNwb3NlcnMuaHBwIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9zaW1wbGVfZGlz
cG9zZXJzLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQyMGIyODFiMDQ5YjY0
ODk1NzIxOGE3OWVhNjJhMWQxMjdkNmUxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9pbnRydXNpdmUvZGV0YWlsL3NpbXBsZV9kaXNwb3NlcnMuaHBwCisrKyAvZGV2L251bGwKQEAg
LTEsNTAgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAoQykgQ29weXJpZ2h0
IElvbiBHYXp0YW5hZ2EgIDIwMTQtMjAxNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBC
b29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAgIChTZWUgYWNjb21wYW55
aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICAgICAgICAgIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29z
dC5vcmcvbGlicy9pbnRydXNpdmUgZm9yIGRvY3VtZW50YXRpb24uCi0vLwotLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLQotI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVfREVUQUlMX1NJTVBMRV9ESVNQT1NF
UlNfSFBQCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxfU0lNUExFX0RJU1BPU0VSU19I
UFAKLQotI2lmbmRlZiBCT09TVF9DT05GSUdfSFBQCi0jICBpbmNsdWRlIDxib29zdC9jb25maWcu
aHBwPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19QUkFHTUFfT05DRSkKLSMgIHBy
YWdtYSBvbmNlCi0jZW5kaWYKLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSBpbnRydXNp
dmUgewotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLWNsYXNzIG51bGxfZGlzcG9zZXIKLXsKLSAgIHB1
YmxpYzoKLSAgIHRlbXBsYXRlIDxjbGFzcyBQb2ludGVyPgotICAgdm9pZCBvcGVyYXRvcigpKFBv
aW50ZXIpCi0gICB7fQotfTsKLQotdGVtcGxhdGU8Y2xhc3MgTm9kZUFsZ29yaXRobXM+Ci1jbGFz
cyBpbml0X2Rpc3Bvc2VyCi17Ci0gICB0eXBlZGVmIHR5cGVuYW1lIE5vZGVBbGdvcml0aG1zOjpu
b2RlX3B0ciBub2RlX3B0cjsKLQotICAgcHVibGljOgotICAgdm9pZCBvcGVyYXRvcigpKGNvbnN0
IG5vZGVfcHRyICYgcCkKLSAgIHsgIE5vZGVBbGdvcml0aG1zOjppbml0KHApOyAgIH0KLX07Ci0K
LX0gIC8vbmFtZXNwYWNlIGRldGFpbHsKLX0gIC8vbmFtZXNwYWNlIGludHJ1c2l2ZXsKLX0gIC8v
bmFtZXNwYWNlIGJvb3N0ewotCi0jZW5kaWYgLy9CT09TVF9JTlRSVVNJVkVfREVUQUlMX1NJTVBM
RV9ESVNQT1NFUlNfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL3NpemVfaG9sZGVyLmhwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvc2l6ZV9o
b2xkZXIuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDE0ZGM1MDQ5OTRkMjZm
YTE4N2IyODhmN2U1OThkYWE4OWMzODdjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L2ludHJ1c2l2ZS9kZXRhaWwvc2l6ZV9ob2xkZXIuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsOTEg
KzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAoQykgQ29weXJpZ2h0IElvbiBH
YXp0YW5hZ2EgIDIwMTQtMjAxNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICAgIChTZWUgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICAgICAgICAgIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy9pbnRydXNpdmUgZm9yIGRvY3VtZW50YXRpb24uCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KLQotI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVfREVUQUlMX1NJWkVfSE9MREVSX0hQUAotI2Rl
ZmluZSBCT09TVF9JTlRSVVNJVkVfREVUQUlMX1NJWkVfSE9MREVSX0hQUAotCi0jaWZuZGVmIEJP
T1NUX0NPTkZJR19IUFAKLSMgIGluY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jZW5kaWYKLQot
I2lmIGRlZmluZWQoQk9PU1RfSEFTX1BSQUdNQV9PTkNFKQotIyAgcHJhZ21hIG9uY2UKLSNlbmRp
ZgotCi0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQot
bmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSBpbnRydXNpdmUgewotbmFtZXNwYWNlIGRldGFp
bCB7Ci0KLXRlbXBsYXRlPGJvb2wgQ29uc3RhbnRTaXplLCBjbGFzcyBTaXplVHlwZSwgY2xhc3Mg
VGFnID0gdm9pZD4KLXN0cnVjdCBzaXplX2hvbGRlcgotewotICAgc3RhdGljIGNvbnN0IGJvb2wg
Y29uc3RhbnRfdGltZV9zaXplID0gQ29uc3RhbnRTaXplOwotICAgdHlwZWRlZiBTaXplVHlwZSAg
c2l6ZV90eXBlOwotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgU2l6ZVR5cGUgZ2V0
X3NpemUoKSBjb25zdAotICAgeyAgcmV0dXJuIHNpemVfOyAgfQotCi0gICBCT09TVF9JTlRSVVNJ
VkVfRk9SQ0VJTkxJTkUgdm9pZCBzZXRfc2l6ZShTaXplVHlwZSBzaXplKQotICAgeyAgc2l6ZV8g
PSBzaXplOyB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSB2b2lkIGRlY3JlbWVu
dCgpCi0gICB7ICAtLXNpemVfOyB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSB2
b2lkIGluY3JlbWVudCgpCi0gICB7ICArK3NpemVfOyB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9G
T1JDRUlOTElORSB2b2lkIGluY3JlYXNlKFNpemVUeXBlIG4pCi0gICB7ICBzaXplXyArPSBuOyB9
Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSB2b2lkIGRlY3JlYXNlKFNpemVUeXBl
IG4pCi0gICB7ICBzaXplXyAtPSBuOyB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElO
RSB2b2lkIHN3YXAoc2l6ZV9ob2xkZXIgJm90aGVyKQotICAgeyAgU2l6ZVR5cGUgdG1wKHNpemVf
KTsgc2l6ZV8gPSBvdGhlci5zaXplXzsgb3RoZXIuc2l6ZV8gPSB0bXA7IH0KLQotICAgU2l6ZVR5
cGUgc2l6ZV87Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBTaXplVHlwZSwgY2xhc3MgVGFnPgotc3Ry
dWN0IHNpemVfaG9sZGVyPGZhbHNlLCBTaXplVHlwZSwgVGFnPgotewotICAgc3RhdGljIGNvbnN0
IGJvb2wgY29uc3RhbnRfdGltZV9zaXplID0gZmFsc2U7Ci0gICB0eXBlZGVmIFNpemVUeXBlICBz
aXplX3R5cGU7Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBzaXplX3R5cGUgZ2V0
X3NpemUoKSBjb25zdAotICAgeyAgcmV0dXJuIDA7ICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9G
T1JDRUlOTElORSB2b2lkIHNldF9zaXplKHNpemVfdHlwZSkKLSAgIHt9Ci0KLSAgIEJPT1NUX0lO
VFJVU0lWRV9GT1JDRUlOTElORSB2b2lkIGRlY3JlbWVudCgpCi0gICB7fQotCi0gICBCT09TVF9J
TlRSVVNJVkVfRk9SQ0VJTkxJTkUgdm9pZCBpbmNyZW1lbnQoKQotICAge30KLQotICAgQk9PU1Rf
SU5UUlVTSVZFX0ZPUkNFSU5MSU5FIHZvaWQgaW5jcmVhc2UoU2l6ZVR5cGUpCi0gICB7fQotCi0g
ICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgdm9pZCBkZWNyZWFzZShTaXplVHlwZSkKLSAg
IHt9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSB2b2lkIHN3YXAoc2l6ZV9ob2xk
ZXIpe30KLX07Ci0KLX0gIC8vbmFtZXNwYWNlIGRldGFpbHsKLX0gIC8vbmFtZXNwYWNlIGludHJ1
c2l2ZXsKLX0gIC8vbmFtZXNwYWNlIGJvb3N0ewotCi0jZW5kaWYgLy9CT09TVF9JTlRSVVNJVkVf
REVUQUlMX1NJWkVfSE9MREVSX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC9zdGRfZndkLmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvc3Rk
X2Z3ZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxOTNlYThlZDFmMjFmMDY0
YjUwMTRhNzc1MjNkOTY4NTNhODdjYWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
aW50cnVzaXZlL2RldGFpbC9zdGRfZndkLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAg
QEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRh
bmFnYSAyMDE0LTIwMTQuIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdAotLy8gU29mdHdhcmUg
TGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUKLS8vIExJQ0VOU0Vf
MV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK
LS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9jb250YWluZXIgZm9yIGRvY3Vt
ZW50YXRpb24uCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNpZm5kZWYgQk9PU1RfSU5U
UlVTSVZFX0RFVEFJTF9TVERfRldEX0hQUAotI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfREVUQUlM
X1NURF9GV0RfSFBQCi0KLSNpZm5kZWYgQk9PU1RfQ09ORklHX0hQUAotIyAgaW5jbHVkZSA8Ym9v
c3QvY29uZmlnLmhwcD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01BX09O
Q0UpCi0jICBwcmFnbWEgb25jZQotI2VuZGlmCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8g
ICAgICAgICAgICAgICAgICAgICAgICBTdGFuZGFyZCBwcmVkZWNsYXJhdGlvbnMKLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotCi0jaW5jbHVkZSA8Ym9vc3QvbW92ZS9kZXRhaWwvc3RkX25zX2JlZ2lu
LmhwcD4KLUJPT1NUX01PVkVfU1REX05TX0JFRwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0
IGxlc3M7Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgZXF1YWxfdG87Ci0KLXN0cnVjdCBp
bnB1dF9pdGVyYXRvcl90YWc7Ci1zdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWc7Ci1zdHJ1Y3Qg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWc7Ci1zdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRv
cl90YWc7Ci0KLUJPT1NUX01PVkVfU1REX05TX0VORAotI2luY2x1ZGUgPGJvb3N0L21vdmUvZGV0
YWlsL3N0ZF9uc19lbmQuaHBwPgotCi0jZW5kaWYgLy8jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9E
RVRBSUxfU1REX0ZXRF9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvdG9fcmF3X3BvaW50ZXIuaHBwIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC90
b19yYXdfcG9pbnRlci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYTg4NDk1
OWQ5NjAzYjg1NjAxOWYwOGJjMjE5Njc5ZDY2ZjNkOWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC90b19yYXdfcG9pbnRlci5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSw0NyArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIChDKSBDb3B5
cmlnaHQgSW9uIEdhenRhbmFnYSAgMjAxNC0yMDE0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gICAgKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gICAgICAgICAgaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3IgZG9jdW1lbnRhdGlvbi4KLS8vCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxfVE9fUkFXX1BP
SU5URVJfSFBQCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9ERVRBSUxfVE9fUkFXX1BPSU5URVJf
SFBQCi0KLSNpZm5kZWYgQk9PU1RfQ09ORklHX0hQUAotIyAgaW5jbHVkZSA8Ym9vc3QvY29uZmln
LmhwcD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01BX09OQ0UpCi0jICBw
cmFnbWEgb25jZQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL2Nv
bmZpZ19iZWdpbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC93b3JrYXJv
dW5kLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL3BvaW50ZXJfZWxlbWVu
dC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgaW50cnVzaXZlIHsKLW5hbWVz
cGFjZSBkZXRhaWwgewotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLUJPT1NUX0lOVFJVU0lWRV9GT1JD
RUlOTElORSBUKiB0b19yYXdfcG9pbnRlcihUKiBwKQoteyAgcmV0dXJuIHA7IH0KLQotdGVtcGxh
dGUgPGNsYXNzIFBvaW50ZXI+Ci1CT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgdHlwZW5hbWUg
Ym9vc3Q6OmludHJ1c2l2ZTo6cG9pbnRlcl9lbGVtZW50PFBvaW50ZXI+Ojp0eXBlKgotdG9fcmF3
X3BvaW50ZXIoY29uc3QgUG9pbnRlciAmcCkKLXsgIHJldHVybiBib29zdDo6aW50cnVzaXZlOjpk
ZXRhaWw6OnRvX3Jhd19wb2ludGVyKHAub3BlcmF0b3ItPigpKTsgIH0KLQotfSAvL25hbWVzcGFj
ZSBkZXRhaWwKLX0gLy9uYW1lc3BhY2UgaW50cnVzaXZlCi19IC8vbmFtZXNwYWNlIGJvb3N0Ci0K
LSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL2NvbmZpZ19lbmQuaHBwPgotCi0jZW5k
aWYgLy9CT09TVF9JTlRSVVNJVkVfREVUQUlMX1VUSUxJVElFU19IUFAKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwv
dHJlZV92YWx1ZV9jb21wYXJlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvdHJlZV92YWx1ZV9jb21wYXJlLmhwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhmNTk2ZmM5NjE1MzM3YjljOTFlOWI3ODA4YmY3OGEx
NWM3YTQzMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWls
L3RyZWVfdmFsdWVfY29tcGFyZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAot
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gKEMpIENvcHlyaWdodCBJb24gR2F6dGFuYWdh
IDIwMTUtMjAxNS4gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0Ci0vLyBTb2Z0d2FyZSBMaWNl
bnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZQotLy8gTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8K
LS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2NvbnRhaW5lciBmb3IgZG9jdW1lbnRh
dGlvbi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSNpZm5kZWYgQk9PU1RfSU5UUlVTSVZF
X0RFVEFJTF9UUkVFX1ZBTFVFX0NPTVBBUkVfSFBQCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9E
RVRBSUxfVFJFRV9WQUxVRV9DT01QQVJFX0hQUAotCi0jaWZuZGVmIEJPT1NUX0NPTkZJR19IUFAK
LSMgIGluY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk9P
U1RfSEFTX1BSQUdNQV9PTkNFKQotIyAgcHJhZ21hIG9uY2UKLSNlbmRpZgotCi0jaW5jbHVkZSA8
Ym9vc3QvaW50cnVzaXZlL2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLSNpbmNsdWRlIDxib29zdC9p
bnRydXNpdmUvZGV0YWlsL21wbC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFp
bC9lYm9fZnVuY3Rvcl9ob2xkZXIuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9wb2lu
dGVyX3RyYWl0cy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdHsKLW5hbWVzcGFjZSBpbnRydXNpdmV7
Ci0KLS8vTmVlZGVkIHRvIHN1cHBvcnQgc21hcnQgcmVmZXJlbmNlcyB0byB2YWx1ZSB0eXBlcwot
dGVtcGxhdGUgPGNsYXNzIEZyb20sIGNsYXNzIFZhbHVlUHRyPgotc3RydWN0IGRpc2FibGVfaWZf
c21hcnRyZWZfdG8KLSAgIDogZGV0YWlsOjpkaXNhYmxlX2lmX2MgCi0gICAgICA8ICBkZXRhaWw6
OmlzX3NhbWUKLSAgICAgICAgICAgIDxGcm9tLCB0eXBlbmFtZSBwb2ludGVyX3RyYWl0cwotICAg
ICAgICAgICAgICAgPFZhbHVlUHRyPgotICAgICAgICAgICAgICAgICAgOjpyZWZlcmVuY2U+Ojp2
YWx1ZQotICAgICAgfHwgZGV0YWlsOjppc19zYW1lCi0gICAgICAgICAgICA8RnJvbSwgdHlwZW5h
bWUgcG9pbnRlcl90cmFpdHMKLSAgICAgICAgICAgICAgICAgICAgIDwgdHlwZW5hbWUgcG9pbnRl
cl9yZWJpbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxWYWx1ZVB0ciwgY29uc3QgdHlw
ZW5hbWUgcG9pbnRlcl9lbGVtZW50PFZhbHVlUHRyPjo6dHlwZT46OnR5cGU+Ci0gICAgICAgICAg
ICAgICAgICA6OnJlZmVyZW5jZT46OnZhbHVlCi0gICAgICA+Ci17fTsKLQotLy9UaGlzIGZ1bmN0
aW9uIG9iamVjdCB0YWtlcyBhIEtleUNvbXBhcmUgZnVuY3Rpb24gb2JqZWN0Ci0vL2FuZCBjb21w
YXJlcyB2YWx1ZXMgdGhhdCBjb250YWlucyBrZXlzIHVzaW5nIEtleU9mVmFsdWUKLXRlbXBsYXRl
PCBjbGFzcyBWYWx1ZVB0ciwgY2xhc3MgS2V5Q29tcGFyZSwgY2xhc3MgS2V5T2ZWYWx1ZQotICAg
ICAgICAsIGJvb2wgPSBib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6OmlzX3NhbWU8dHlwZW5hbWUg
cG9pbnRlcl9lbGVtZW50PFZhbHVlUHRyPjo6dHlwZSwgdHlwZW5hbWUgS2V5T2ZWYWx1ZTo6dHlw
ZT46OnZhbHVlID4KLXN0cnVjdCB0cmVlX3ZhbHVlX2NvbXBhcmUKLSAgIDogIHB1YmxpYyBib29z
dDo6aW50cnVzaXZlOjpkZXRhaWw6OmVib19mdW5jdG9yX2hvbGRlcjxLZXlDb21wYXJlPgotewot
ICAgdHlwZWRlZiB0eXBlbmFtZSBwb2ludGVyX2VsZW1lbnQ8VmFsdWVQdHI+Ojp0eXBlICAgdmFs
dWVfdHlwZTsKLSAgIHR5cGVkZWYgS2V5Q29tcGFyZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtleV9jb21wYXJlOwotICAgdHlwZWRlZiBLZXlPZlZhbHVlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga2V5X29mX3ZhbHVlOwotICAgdHlwZWRlZiB0eXBlbmFtZSBLZXlP
ZlZhbHVlOjp0eXBlICAgICAgICAgICAgICAgICAga2V5X3R5cGU7Ci0KLSAgIHR5cGVkZWYgYm9v
c3Q6OmludHJ1c2l2ZTo6ZGV0YWlsOjplYm9fZnVuY3Rvcl9ob2xkZXI8S2V5Q29tcGFyZT4gYmFz
ZV90OwotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgdHJlZV92YWx1ZV9jb21wYXJl
KCkKLSAgICAgIDogIGJhc2VfdCgpCi0gICB7fQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJ
TkxJTkUgZXhwbGljaXQgdHJlZV92YWx1ZV9jb21wYXJlKGNvbnN0IGtleV9jb21wYXJlICZrY29t
cCkKLSAgICAgIDogIGJhc2VfdChrY29tcCkKLSAgIHt9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9G
T1JDRUlOTElORSB0cmVlX3ZhbHVlX2NvbXBhcmUgKGNvbnN0IHRyZWVfdmFsdWVfY29tcGFyZSAm
eCkKLSAgICAgIDogIGJhc2VfdCh4LmJhc2VfdDo6Z2V0KCkpCi0gICB7fQotCi0gICBCT09TVF9J
TlRSVVNJVkVfRk9SQ0VJTkxJTkUgdHJlZV92YWx1ZV9jb21wYXJlICZvcGVyYXRvcj0oY29uc3Qg
dHJlZV92YWx1ZV9jb21wYXJlICZ4KQotICAgeyAgdGhpcy0+YmFzZV90OjpnZXQoKSA9IHguYmFz
ZV90OjpnZXQoKTsgICByZXR1cm4gKnRoaXM7ICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JD
RUlOTElORSB0cmVlX3ZhbHVlX2NvbXBhcmUgJm9wZXJhdG9yPShjb25zdCBrZXlfY29tcGFyZSAm
eCkKLSAgIHsgIHRoaXMtPmJhc2VfdDo6Z2V0KCkgPSB4OyAgIHJldHVybiAqdGhpczsgIH0KLQot
ICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIGNvbnN0IGtleV9jb21wYXJlICZrZXlfY29t
cCgpIGNvbnN0Ci0gICB7ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qga2V5X2NvbXBhcmUgJj4o
KnRoaXMpOyAgfQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IGtleV90eXBlICZrZXkxLCBjb25zdCBrZXlfdHlwZSAma2V5MikgY29uc3QKLSAg
IHsgIHJldHVybiB0aGlzLT5rZXlfY29tcCgpKGtleTEsIGtleTIpOyAgfQotCi0gICBCT09TVF9J
TlRSVVNJVkVfRk9SQ0VJTkxJTkUgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUgJnZh
bHVlMSwgY29uc3QgdmFsdWVfdHlwZSAmdmFsdWUyKSBjb25zdAotICAgeyAgcmV0dXJuIHRoaXMt
PmtleV9jb21wKCkoS2V5T2ZWYWx1ZSgpKHZhbHVlMSksIEtleU9mVmFsdWUoKSh2YWx1ZTIpKTsg
IH0KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBrZXlfdHlwZSAma2V5MSwgY29uc3QgdmFsdWVfdHlwZSAmdmFsdWUyKSBjb25zdAotICAgeyAg
cmV0dXJuIHRoaXMtPmtleV9jb21wKCkoa2V5MSwgS2V5T2ZWYWx1ZSgpKHZhbHVlMikpOyAgfQot
Ci0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZh
bHVlX3R5cGUgJnZhbHVlMSwgY29uc3Qga2V5X3R5cGUgJmtleTIpIGNvbnN0Ci0gICB7ICByZXR1
cm4gdGhpcy0+a2V5X2NvbXAoKShLZXlPZlZhbHVlKCkodmFsdWUxKSwga2V5Mik7ICB9Ci0KLSAg
IHRlbXBsYXRlPGNsYXNzIFU+Ci0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgYm9vbCBv
cGVyYXRvcigpKCBjb25zdCBrZXlfdHlwZSAma2V5MSwgY29uc3QgVSAmbm9ua2V5MgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdHlwZW5hbWUgZGlzYWJs
ZV9pZl9zbWFydHJlZl90bzxVLCBWYWx1ZVB0cj46OnR5cGUqID0gMCkgY29uc3QKLSAgIHsgIHJl
dHVybiB0aGlzLT5rZXlfY29tcCgpKGtleTEsIG5vbmtleTIpOyAgfQotCi0gICB0ZW1wbGF0ZTxj
bGFzcyBVPgotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIGJvb2wgb3BlcmF0b3IoKSgg
Y29uc3QgVSAmbm9ua2V5MSwgY29uc3Qga2V5X3R5cGUgJmtleTIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHR5cGVuYW1lIGRpc2FibGVfaWZfc21hcnRy
ZWZfdG88VSwgVmFsdWVQdHI+Ojp0eXBlKiA9IDApIGNvbnN0Ci0gICB7ICByZXR1cm4gdGhpcy0+
a2V5X2NvbXAoKShub25rZXkxLCBrZXkyKTsgIH0KLQotICAgdGVtcGxhdGU8Y2xhc3MgVT4KLSAg
IEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBib29sIG9wZXJhdG9yKCkoIGNvbnN0IHZhbHVl
X3R5cGUgJnZhbHVlMSwgY29uc3QgVSAmbm9udmFsdWUyCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCB0eXBlbmFtZSBkaXNhYmxlX2lmX3NtYXJ0cmVmX3Rv
PFUsIFZhbHVlUHRyPjo6dHlwZSogPSAwKSBjb25zdAotICAgeyAgcmV0dXJuIHRoaXMtPmtleV9j
b21wKCkoS2V5T2ZWYWx1ZSgpKHZhbHVlMSksIG5vbnZhbHVlMik7ICB9Ci0KLSAgIHRlbXBsYXRl
PGNsYXNzIFU+Ci0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgYm9vbCBvcGVyYXRvcigp
KCBjb25zdCBVICZub252YWx1ZTEsIGNvbnN0IHZhbHVlX3R5cGUgJnZhbHVlMgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdHlwZW5hbWUgZGlzYWJsZV9p
Zl9zbWFydHJlZl90bzxVLCBWYWx1ZVB0cj46OnR5cGUqID0gMCkgY29uc3QKLSAgIHsgIHJldHVy
biB0aGlzLT5rZXlfY29tcCgpKG5vbnZhbHVlMSwgS2V5T2ZWYWx1ZSgpKHZhbHVlMikpOyAgfQot
fTsKLQotdGVtcGxhdGU8Y2xhc3MgVmFsdWVQdHIsIGNsYXNzIEtleUNvbXBhcmUsIGNsYXNzIEtl
eU9mVmFsdWU+Ci1zdHJ1Y3QgdHJlZV92YWx1ZV9jb21wYXJlPFZhbHVlUHRyLCBLZXlDb21wYXJl
LCBLZXlPZlZhbHVlLCB0cnVlPgotICAgOiAgcHVibGljIGJvb3N0OjppbnRydXNpdmU6OmRldGFp
bDo6ZWJvX2Z1bmN0b3JfaG9sZGVyPEtleUNvbXBhcmU+Ci17Ci0gICB0eXBlZGVmIHR5cGVuYW1l
IHBvaW50ZXJfZWxlbWVudDxWYWx1ZVB0cj46OnR5cGUgICB2YWx1ZV90eXBlOwotICAgdHlwZWRl
ZiBLZXlDb21wYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2NvbXBhcmU7
Ci0gICB0eXBlZGVmIEtleU9mVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
ZXlfb2ZfdmFsdWU7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIEtleU9mVmFsdWU6OnR5cGUgICAgICAg
ICAgICAgICAgICBrZXlfdHlwZTsKLQotICAgdHlwZWRlZiBib29zdDo6aW50cnVzaXZlOjpkZXRh
aWw6OmVib19mdW5jdG9yX2hvbGRlcjxLZXlDb21wYXJlPiBiYXNlX3Q7Ci0KLQotICAgQk9PU1Rf
SU5UUlVTSVZFX0ZPUkNFSU5MSU5FIHRyZWVfdmFsdWVfY29tcGFyZSgpCi0gICAgICA6ICBiYXNl
X3QoKQotICAge30KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIGV4cGxpY2l0IHRy
ZWVfdmFsdWVfY29tcGFyZShjb25zdCBrZXlfY29tcGFyZSAma2NvbXApCi0gICAgICA6ICBiYXNl
X3Qoa2NvbXApCi0gICB7fQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgdHJlZV92
YWx1ZV9jb21wYXJlIChjb25zdCB0cmVlX3ZhbHVlX2NvbXBhcmUgJngpCi0gICAgICA6ICBiYXNl
X3QoeC5iYXNlX3Q6OmdldCgpKQotICAge30KLQotICAgQk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5M
SU5FIHRyZWVfdmFsdWVfY29tcGFyZSAmb3BlcmF0b3I9KGNvbnN0IHRyZWVfdmFsdWVfY29tcGFy
ZSAmeCkKLSAgIHsgIHRoaXMtPmJhc2VfdDo6Z2V0KCkgPSB4LmJhc2VfdDo6Z2V0KCk7ICAgcmV0
dXJuICp0aGlzOyAgfQotCi0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgdHJlZV92YWx1
ZV9jb21wYXJlICZvcGVyYXRvcj0oY29uc3Qga2V5X2NvbXBhcmUgJngpCi0gICB7ICB0aGlzLT5i
YXNlX3Q6OmdldCgpID0geDsgICByZXR1cm4gKnRoaXM7ICB9Ci0KLSAgIEJPT1NUX0lOVFJVU0lW
RV9GT1JDRUlOTElORSBjb25zdCBrZXlfY29tcGFyZSAma2V5X2NvbXAoKSBjb25zdAotICAgeyAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGtleV9jb21wYXJlICY+KCp0aGlzKTsgIH0KLQotICAg
Qk9PU1RfSU5UUlVTSVZFX0ZPUkNFSU5MSU5FIGJvb2wgb3BlcmF0b3IoKShjb25zdCBrZXlfdHlw
ZSAma2V5MSwgY29uc3Qga2V5X3R5cGUgJmtleTIpIGNvbnN0Ci0gICB7ICByZXR1cm4gdGhpcy0+
a2V5X2NvbXAoKShrZXkxLCBrZXkyKTsgIH0KLQotICAgdGVtcGxhdGU8Y2xhc3MgVT4KLSAgIEJP
T1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBib29sIG9wZXJhdG9yKCkoIGNvbnN0IGtleV90eXBl
ICZrZXkxLCBjb25zdCBVICZub25rZXkyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCB0eXBlbmFtZSBkaXNhYmxlX2lmX3NtYXJ0cmVmX3RvPFUsIFZhbHVl
UHRyPjo6dHlwZSogPSAwKSBjb25zdAotICAgeyAgcmV0dXJuIHRoaXMtPmtleV9jb21wKCkoa2V5
MSwgbm9ua2V5Mik7ICB9Ci0KLSAgIHRlbXBsYXRlPGNsYXNzIFU+Ci0gICBCT09TVF9JTlRSVVNJ
VkVfRk9SQ0VJTkxJTkUgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFUgJm5vbmtleTEsIGNvbnN0IGtl
eV90eXBlICZrZXkyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCB0eXBlbmFtZSBkaXNhYmxlX2lmX3NtYXJ0cmVmX3RvPFUsIFZhbHVlUHRyPjo6dHlwZSog
PSAwKSBjb25zdAotICAgeyAgcmV0dXJuIHRoaXMtPmtleV9jb21wKCkobm9ua2V5MSwga2V5Mik7
ICB9Ci19OwotCi19ICAvL25hbWVzcGFjZSBpbnRydXNpdmV7Ci19ICAvL25hbWVzcGFjZSBib29z
dHsKLQotI2VuZGlmICAgLy8jaWZkZWYgQk9PU1RfSU5UUlVTSVZFX0RFVEFJTF9UUkVFX1ZBTFVF
X0NPTVBBUkVfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL3VuY2FzdC5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvZGV0YWlsL3VuY2FzdC5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkYjk3Yjc0NTcxMTU3ZmVlMWI5ZjJjNGIxOWJh
MWViN2ZhMTkwYzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2Rl
dGFpbC91bmNhc3QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLS8vCi0vLyAoQykgQ29weXJpZ2h0IElvbiBHYXp0YW5hZ2EgIDIwMDYtMjAx
NAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4KLS8vICAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0
IG9yIGNvcHkgYXQKLS8vICAgICAgICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9pbnRydXNpdmUgZm9y
IGRvY3VtZW50YXRpb24uCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotI2lmbmRlZiBCT09T
VF9JTlRSVVNJVkVfREVUQUlMX1VOQ0FTVF9IUFAKLSNkZWZpbmUgQk9PU1RfSU5UUlVTSVZFX0RF
VEFJTF9VTkNBU1RfSFBQCi0KLSNpZm5kZWYgQk9PU1RfQ09ORklHX0hQUAotIyAgaW5jbHVkZSA8
Ym9vc3QvY29uZmlnLmhwcD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01B
X09OQ0UpCi0jICBwcmFnbWEgb25jZQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9pbnRydXNp
dmUvZGV0YWlsL2NvbmZpZ19iZWdpbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL3Bv
aW50ZXJfdHJhaXRzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL21wbC5o
cHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgaW50cnVzaXZlIHsKLW5hbWVzcGFj
ZSBkZXRhaWwgewotCi10ZW1wbGF0ZTxjbGFzcyBDb25zdE5vZGVQdHI+Ci1zdHJ1Y3QgdW5jYXN0
X3R5cGVzCi17Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHBvaW50ZXJfdHJhaXRzPENvbnN0Tm9kZVB0
cj46OmVsZW1lbnRfdHlwZSBlbGVtZW50X3R5cGU7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHJlbW92
ZV9jb25zdDxlbGVtZW50X3R5cGU+Ojp0eXBlICAgICAgICAgICBub25fY29uc3RfdHlwZTsKLSAg
IHR5cGVkZWYgdHlwZW5hbWUgcG9pbnRlcl90cmFpdHM8Q29uc3ROb2RlUHRyPjo6Ci0gICAgICB0
ZW1wbGF0ZSByZWJpbmRfcG9pbnRlcjxub25fY29uc3RfdHlwZT46OnR5cGUgICAgICAgICAgICBu
b25fY29uc3RfcG9pbnRlcjsKLSAgIHR5cGVkZWYgcG9pbnRlcl90cmFpdHM8bm9uX2NvbnN0X3Bv
aW50ZXI+ICAgICAgICAgICAgICAgICAgIG5vbl9jb25zdF90cmFpdHM7Ci19OwotCi10ZW1wbGF0
ZTxjbGFzcyBDb25zdE5vZGVQdHI+Ci1zdGF0aWMgdHlwZW5hbWUgdW5jYXN0X3R5cGVzPENvbnN0
Tm9kZVB0cj46Om5vbl9jb25zdF9wb2ludGVyCi0gICB1bmNhc3QoY29uc3QgQ29uc3ROb2RlUHRy
ICYgcHRyKQotewotICAgcmV0dXJuIHVuY2FzdF90eXBlczxDb25zdE5vZGVQdHI+Ojpub25fY29u
c3RfdHJhaXRzOjpjb25zdF9jYXN0X2Zyb20ocHRyKTsKLX0KLQotfSAvL25hbWVzcGFjZSBkZXRh
aWwgewotfSAvL25hbWVzcGFjZSBpbnRydXNpdmUKLX0gLy9uYW1lc3BhY2UgYm9vc3QKLQotI2lu
Y2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvY29uZmlnX2VuZC5ocHA+Ci0KLSNlbmRpZiAv
L0JPT1NUX0lOVFJVU0lWRV9ERVRBSUxfVVRJTElUSUVTX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC93b3Jr
YXJvdW5kLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2lu
dHJ1c2l2ZS9kZXRhaWwvd29ya2Fyb3VuZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDU5NGFjMGIyZTU0NDQ1N2FjYWZmY2NmMTA4YTM4NzBlZjNiZTE5YTUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2RldGFpbC93b3JrYXJvdW5kLmhwcAorKysg
L2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8v
IChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAyMDA1LTIwMTMuIERpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCb29zdAotLy8gU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21w
YW55aW5nIGZpbGUKLS8vIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy9pbnRlcnByb2Nlc3MgZm9yIGRvY3VtZW50YXRpb24uCi0vLwotLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCi0KLSNpZm5kZWYgQk9PU1RfSU5UUlVTSVZFX0RFVEFJTF9XT1JLQVJPVU5EX0hQUAot
I2RlZmluZSBCT09TVF9JTlRSVVNJVkVfREVUQUlMX1dPUktBUk9VTkRfSFBQCi0KLSNpZm5kZWYg
Qk9PU1RfQ09ORklHX0hQUAotIyAgaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNlbmRpZgot
Ci0jaWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01BX09OQ0UpCi0jICBwcmFnbWEgb25jZQotI2Vu
ZGlmCi0KLSNpZm5kZWYgQk9PU1RfQ09ORklHX0hQUAotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5o
cHA+Ci0jZW5kaWYKLQotI2lmICAgICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZF
UkVOQ0VTKSAmJiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9WQVJJQURJQ19URU1QTEFURVMpCi0g
ICAjZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9QRVJGRUNUX0ZPUldBUkRJTkcKLSNlbmRpZgotCi0v
L01hY3JvcyBmb3IgZG9jdW1lbnRhdGlvbiBwdXJwb3Nlcy4gRm9yIGNvZGUsIGV4cGFuZHMgdG8g
dGhlIGFyZ3VtZW50Ci0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9JTVBERUYoVFlQRSkgVFlQRQot
I2RlZmluZSBCT09TVF9JTlRSVVNJVkVfU0VFRE9DKFRZUEUpIFRZUEUKLSNkZWZpbmUgQk9PU1Rf
SU5UUlVTSVZFX0RPQzFTVChUWVBFMSwgVFlQRTIpIFRZUEUyCi0jZGVmaW5lIEJPT1NUX0lOVFJV
U0lWRV9JICwKLSNkZWZpbmUgQk9PU1RfSU5UUlVTSVZFX0RPQ0lHTihUMSkgVDEKLQotI2RlZmlu
ZSBCT09TVF9JTlRSVVNJVkVfRElTQUJMRV9GT1JDRUlOTElORQotCi0jaWYgZGVmaW5lZChCT09T
VF9JTlRSVVNJVkVfRElTQUJMRV9GT1JDRUlOTElORSkKLSAgICNkZWZpbmUgQk9PU1RfSU5UUlVT
SVZFX0ZPUkNFSU5MSU5FIGlubGluZQotI2VsaWYgZGVmaW5lZChCT09TVF9JTlRSVVNJVkVfRk9S
Q0VJTkxJTkVfSVNfQk9PU1RfRk9SQ0VMSU5FKQotICAgI2RlZmluZSBCT09TVF9JTlRSVVNJVkVf
Rk9SQ0VJTkxJTkUgQk9PU1RfRk9SQ0VJTkxJTkUKLSNlbGlmIGRlZmluZWQoQk9PU1RfTVNWQykg
JiYgZGVmaW5lZChfREVCVUcpCi0gICAvLyJfX2ZvcmNlaW5saW5lIiBhbmQgTVNWQyBzZWVtcyB0
byBoYXZlIHNvbWUgYnVncyBpbiBkZWJ1ZyBtb2RlCi0gICAjZGVmaW5lIEJPT1NUX0lOVFJVU0lW
RV9GT1JDRUlOTElORSBpbmxpbmUKLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVD
X18gPCA0KSB8fCAoX19HTlVDX18gPT0gNCAmJiAoX19HTlVDX01JTk9SX18gPCA1KSkpCi0gICAv
L09sZGVyIEdDQ3MgaGF2ZSBwcm9ibGVtcyB3aXRoIGZvcmNlaW5saW5lCi0gICAjZGVmaW5lIEJP
T1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBpbmxpbmUKLSNlbHNlCi0gICAjZGVmaW5lIEJPT1NU
X0lOVFJVU0lWRV9GT1JDRUlOTElORSBCT09TVF9GT1JDRUlOTElORQotI2VuZGlmCi0KLSNlbmRp
ZiAgIC8vI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVfREVUQUlMX1dPUktBUk9VTkRfSFBQCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNp
dmUvaW50cnVzaXZlX2Z3ZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9pbnRydXNpdmUvaW50cnVzaXZlX2Z3ZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGY1MTI3NmQ2MzZlMGRkNmZhYTY3NjUxZTczNGE5NDMzMGNlYmZjMjcuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2ludHJ1c2l2ZV9md2QuaHBwCisr
KyAvZGV2L251bGwKQEAgLTEsNzYzICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwot
Ly8gKEMpIENvcHlyaWdodCBJb24gR2F6dGFuYWdhICAyMDA3LTIwMTMKLS8vCi0vLyBEaXN0cmli
dXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAg
ICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAg
ICAgICAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvaW50cnVzaXZlIGZvciBkb2N1bWVudGF0aW9uLgot
Ly8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNpZm5kZWYgQk9PU1RfSU5UUlVTSVZFX0ZXRF9I
UFAKLSNkZWZpbmUgQk9PU1RfSU5UUlVTSVZFX0ZXRF9IUFAKLQotI2lmbmRlZiBCT09TVF9DT05G
SUdfSFBQCi0jICBpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2VuZGlmCi0jCi0jaWZuZGVm
IEJPT1NUX0NTVERJTlRfSFBQCi0jICBpbmNsdWRlIDxib29zdC9jc3RkaW50LmhwcD4KLSNlbmRp
ZgotIwotI2lmIGRlZmluZWQoQk9PU1RfSEFTX1BSQUdNQV9PTkNFKQotIyAgcHJhZ21hIG9uY2UK
LSNlbmRpZgotCi0vLyEgXGZpbGUKLS8vISBUaGlzIGhlYWRlciBmaWxlIGZvcndhcmQgZGVjbGFy
ZXMgbW9zdCBJbnRydXNpdmUgY2xhc3Nlcy4KLS8vIQotLy8hIEl0IGZvcndhcmQgZGVjbGFyZXMg
dGhlIGZvbGxvd2luZyBjb250YWluZXJzIGFuZCBob29rczoKLS8vISAgIC0gYm9vc3Q6OmludHJ1
c2l2ZTo6c2xpc3QgLyBib29zdDo6aW50cnVzaXZlOjpzbGlzdF9iYXNlX2hvb2sgLyBib29zdDo6
aW50cnVzaXZlOjpzbGlzdF9tZW1iZXJfaG9vawotLy8hICAgLSBib29zdDo6aW50cnVzaXZlOjps
aXN0IC8gYm9vc3Q6OmludHJ1c2l2ZTo6bGlzdF9iYXNlX2hvb2sgLyBib29zdDo6aW50cnVzaXZl
OjpsaXN0X21lbWJlcl9ob29rCi0vLyEgICAtIGJvb3N0OjppbnRydXNpdmU6OmJzdHJlZSAvIGJv
b3N0OjppbnRydXNpdmU6OmJzX3NldCAvIGJvb3N0OjppbnRydXNpdmU6OmJzX211bHRpc2V0IC8K
LS8vISAgICAgIGJvb3N0OjppbnRydXNpdmU6OmJzX3NldF9iYXNlX2hvb2sgLyBib29zdDo6aW50
cnVzaXZlOjpic19zZXRfbWVtYmVyX2hvb2sKLS8vISAgIC0gYm9vc3Q6OmludHJ1c2l2ZTo6cmJ0
cmVlIC8gYm9vc3Q6OmludHJ1c2l2ZTo6c2V0IC8gYm9vc3Q6OmludHJ1c2l2ZTo6bXVsdGlzZXQg
LwotLy8hICAgICAgYm9vc3Q6OmludHJ1c2l2ZTo6c2V0X2Jhc2VfaG9vayAvIGJvb3N0OjppbnRy
dXNpdmU6OnNldF9tZW1iZXJfaG9vawotLy8hICAgLSBib29zdDo6aW50cnVzaXZlOjphdmx0cmVl
IC8gYm9vc3Q6OmludHJ1c2l2ZTo6YXZsX3NldCAvIGJvb3N0OjppbnRydXNpdmU6OmF2bF9tdWx0
aXNldCAvCi0vLyEgICAgICBib29zdDo6aW50cnVzaXZlOjphdmxfc2V0X2Jhc2VfaG9vayAvIGJv
b3N0OjppbnRydXNpdmU6OmF2bF9zZXRfbWVtYmVyX2hvb2sKLS8vISAgIC0gYm9vc3Q6OmludHJ1
c2l2ZTo6c3BsYXl0cmVlIC8gYm9vc3Q6OmludHJ1c2l2ZTo6c3BsYXlfc2V0IC8gYm9vc3Q6Omlu
dHJ1c2l2ZTo6c3BsYXlfbXVsdGlzZXQKLS8vISAgIC0gYm9vc3Q6OmludHJ1c2l2ZTo6c2d0cmVl
IC8gYm9vc3Q6OmludHJ1c2l2ZTo6c2dfc2V0IC8gYm9vc3Q6OmludHJ1c2l2ZTo6c2dfbXVsdGlz
ZXQKLS8vISAgIC0gYm9vc3Q6OmludHJ1c2l2ZTo6dHJlYXAgLyBib29zdDo6aW50cnVzaXZlOjp0
cmVhcF9zZXQgLyBib29zdDo6aW50cnVzaXZlOjp0cmVhcF9tdWx0aXNldAotLy8hICAgLSBib29z
dDo6aW50cnVzaXZlOjpoYXNodGFibGUgLyBib29zdDo6aW50cnVzaXZlOjp1bm9yZGVyZWRfc2V0
IC8gYm9vc3Q6OmludHJ1c2l2ZTo6dW5vcmRlcmVkX211bHRpc2V0IC8KLS8vISAgICAgIGJvb3N0
OjppbnRydXNpdmU6OnVub3JkZXJlZF9zZXRfYmFzZV9ob29rIC8gYm9vc3Q6OmludHJ1c2l2ZTo6
dW5vcmRlcmVkX3NldF9tZW1iZXJfaG9vayAvCi0vLyEgICAtIGJvb3N0OjppbnRydXNpdmU6OmFu
eV9iYXNlX2hvb2sgLyBib29zdDo6aW50cnVzaXZlOjphbnlfbWVtYmVyX2hvb2sKLS8vIQotLy8h
IEl0IGZvcndhcmQgZGVjbGFyZXMgdGhlIGZvbGxvd2luZyBjb250YWluZXIgb3IgaG9vayBvcHRp
b25zOgotLy8hICAgLSBib29zdDo6aW50cnVzaXZlOjpjb25zdGFudF90aW1lX3NpemUgLyBib29z
dDo6aW50cnVzaXZlOjpzaXplX3R5cGUgLyBib29zdDo6aW50cnVzaXZlOjpjb21wYXJlIC8gYm9v
c3Q6OmludHJ1c2l2ZTo6ZXF1YWwKLS8vISAgIC0gYm9vc3Q6OmludHJ1c2l2ZTo6ZmxvYXRpbmdf
cG9pbnQgLyBib29zdDo6aW50cnVzaXZlOjpwcmlvcml0eSAvIGJvb3N0OjppbnRydXNpdmU6Omhh
c2gKLS8vISAgIC0gYm9vc3Q6OmludHJ1c2l2ZTo6dmFsdWVfdHJhaXRzIC8gYm9vc3Q6OmludHJ1
c2l2ZTo6bWVtYmVyX2hvb2sgLyBib29zdDo6aW50cnVzaXZlOjpmdW5jdGlvbl9ob29rIC8gYm9v
c3Q6OmludHJ1c2l2ZTo6YmFzZV9ob29rCi0vLyEgICAtIGJvb3N0OjppbnRydXNpdmU6OnZvaWRf
cG9pbnRlciAvIGJvb3N0OjppbnRydXNpdmU6OnRhZyAvIGJvb3N0OjppbnRydXNpdmU6Omxpbmtf
bW9kZQotLy8hICAgLSBib29zdDo6aW50cnVzaXZlOjpvcHRpbWl6ZV9zaXplIC8gYm9vc3Q6Omlu
dHJ1c2l2ZTo6bGluZWFyIC8gYm9vc3Q6OmludHJ1c2l2ZTo6Y2FjaGVfbGFzdAotLy8hICAgLSBi
b29zdDo6aW50cnVzaXZlOjpidWNrZXRfdHJhaXRzIC8gYm9vc3Q6OmludHJ1c2l2ZTo6c3RvcmVf
aGFzaCAvIGJvb3N0OjppbnRydXNpdmU6Om9wdGltaXplX211bHRpa2V5Ci0vLyEgICAtIGJvb3N0
OjppbnRydXNpdmU6OnBvd2VyXzJfYnVja2V0cyAvIGJvb3N0OjppbnRydXNpdmU6OmNhY2hlX2Jl
Z2luIC8gYm9vc3Q6OmludHJ1c2l2ZTo6Y29tcGFyZV9oYXNoIC8gYm9vc3Q6OmludHJ1c2l2ZTo6
aW5jcmVtZW50YWwKLS8vIQotLy8hIEl0IGZvcndhcmQgZGVjbGFyZXMgdGhlIGZvbGxvd2luZyB2
YWx1ZSB0cmFpdHMgdXRpbGl0aWVzOgotLy8hICAgLSBib29zdDo6aW50cnVzaXZlOjp2YWx1ZV90
cmFpdHMgLyBib29zdDo6aW50cnVzaXZlOjpkZXJpdmF0aW9uX3ZhbHVlX3RyYWl0cyAvCi0vLyEg
ICAgICBib29zdDo6aW50cnVzaXZlOjp0cml2aWFsX3ZhbHVlX3RyYWl0cwotLy8hCi0vLyEgRmlu
YWxseSBpdCBmb3J3YXJkIGRlY2xhcmVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIHV0
aWxpdGllczoKLS8vISAgIC0gYm9vc3Q6OmludHJ1c2l2ZTo6cG9pbnRlcl9wbHVzX2JpdHMgLyBi
b29zdDo6aW50cnVzaXZlOjpwcmlvcml0eV9jb21wYXJlLgotCi0jaWYgIWRlZmluZWQoQk9PU1Rf
SU5UUlVTSVZFX0RPWFlHRU5fSU5WT0tFRCkKLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVk
ZSA8Ym9vc3QvaW50cnVzaXZlL2xpbmtfbW9kZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVz
aXZlL2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFj
ZSBpbnRydXNpdmUgewotCi0jaWYgIWRlZmluZWQoQk9PU1RfSU5URVJQUk9DRVNTX0RPWFlHRU5f
SU5WT0tFRCkKLSMgIGlmZGVmIEJPT1NUX0hBU19JTlRQVFJfVAotICAgICAgdXNpbmcgOjpib29z
dDo6dWludHB0cl90OwotIyAgZWxzZQotICAgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCB1aW50cHRy
X3Q7Ci0jICBlbmRpZgotI2VuZGlmCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8v
ICAgICBOb2RlIGFsZ29yaXRobXMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLy9B
bGdvcml0aG1zIHByZWRlY2xhcmF0aW9ucwotdGVtcGxhdGU8Y2xhc3MgTm9kZVRyYWl0cz4KLWNs
YXNzIGNpcmN1bGFyX2xpc3RfYWxnb3JpdGhtczsKLQotdGVtcGxhdGU8Y2xhc3MgTm9kZVRyYWl0
cz4KLWNsYXNzIGNpcmN1bGFyX3NsaXN0X2FsZ29yaXRobXM7Ci0KLXRlbXBsYXRlPGNsYXNzIE5v
ZGVUcmFpdHM+Ci1jbGFzcyBsaW5lYXJfc2xpc3RfYWxnb3JpdGhtczsKLQotdGVtcGxhdGU8Y2xh
c3MgTm9kZVRyYWl0cz4KLWNsYXNzIGJzdHJlZV9hbGdvcml0aG1zOwotCi10ZW1wbGF0ZTxjbGFz
cyBOb2RlVHJhaXRzPgotY2xhc3MgcmJ0cmVlX2FsZ29yaXRobXM7Ci0KLXRlbXBsYXRlPGNsYXNz
IE5vZGVUcmFpdHM+Ci1jbGFzcyBhdmx0cmVlX2FsZ29yaXRobXM7Ci0KLXRlbXBsYXRlPGNsYXNz
IE5vZGVUcmFpdHM+Ci1jbGFzcyBzZ3RyZWVfYWxnb3JpdGhtczsKLQotdGVtcGxhdGU8Y2xhc3Mg
Tm9kZVRyYWl0cz4KLWNsYXNzIHNwbGF5dHJlZV9hbGdvcml0aG1zOwotCi10ZW1wbGF0ZTxjbGFz
cyBOb2RlVHJhaXRzPgotY2xhc3MgdHJlYXBfYWxnb3JpdGhtczsKLQotLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotLy8gICAgICAgQ29udGFpbmVycwotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotCi0vL3NsaXN0Ci0jaWYgIWRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX1ZBUklBRElD
X1RFTVBMQVRFUykKLXRlbXBsYXRlCi0gICA8IGNsYXNzIFQKLSAgICwgY2xhc3MgTzEgID0gdm9p
ZAotICAgLCBjbGFzcyBPMiAgPSB2b2lkCi0gICAsIGNsYXNzIE8zICA9IHZvaWQKLSAgICwgY2xh
c3MgTzQgID0gdm9pZAotICAgLCBjbGFzcyBPNSAgPSB2b2lkCi0gICAsIGNsYXNzIE82ICA9IHZv
aWQKLSAgID4KLSNlbHNlCi10ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyAuLi5PcHRpb25zPgotI2Vu
ZGlmCi1jbGFzcyBzbGlzdDsKLQotI2lmICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJ
Q19URU1QTEFURVMpCi10ZW1wbGF0ZQotICAgPCBjbGFzcyBPMSAgPSB2b2lkCi0gICAsIGNsYXNz
IE8yICA9IHZvaWQKLSAgICwgY2xhc3MgTzMgID0gdm9pZAotICAgPgotI2Vsc2UKLXRlbXBsYXRl
PGNsYXNzIC4uLk9wdGlvbnM+Ci0jZW5kaWYKLWNsYXNzIHNsaXN0X2Jhc2VfaG9vazsKLQotI2lm
ICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19URU1QTEFURVMpCi10ZW1wbGF0ZQot
ICAgPCBjbGFzcyBPMSAgPSB2b2lkCi0gICAsIGNsYXNzIE8yICA9IHZvaWQKLSAgICwgY2xhc3Mg
TzMgID0gdm9pZAotICAgPgotI2Vsc2UKLXRlbXBsYXRlPGNsYXNzIC4uLk9wdGlvbnM+Ci0jZW5k
aWYKLWNsYXNzIHNsaXN0X21lbWJlcl9ob29rOwotCi0vL2xpc3QKLSNpZiAhZGVmaW5lZChCT09T
VF9JTlRSVVNJVkVfVkFSSUFESUNfVEVNUExBVEVTKQotdGVtcGxhdGUKLSAgIDwgY2xhc3MgVAot
ICAgLCBjbGFzcyBPMSAgPSB2b2lkCi0gICAsIGNsYXNzIE8yICA9IHZvaWQKLSAgICwgY2xhc3Mg
TzMgID0gdm9pZAotICAgLCBjbGFzcyBPNCAgPSB2b2lkCi0gICA+Ci0jZWxzZQotdGVtcGxhdGU8
Y2xhc3MgVCwgY2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRpZgotY2xhc3MgbGlzdDsKLQotI2lmICFk
ZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19URU1QTEFURVMpCi10ZW1wbGF0ZQotICAg
PCBjbGFzcyBPMSAgPSB2b2lkCi0gICAsIGNsYXNzIE8yICA9IHZvaWQKLSAgICwgY2xhc3MgTzMg
ID0gdm9pZAotICAgPgotI2Vsc2UKLXRlbXBsYXRlPGNsYXNzIC4uLk9wdGlvbnM+Ci0jZW5kaWYK
LWNsYXNzIGxpc3RfYmFzZV9ob29rOwotCi0jaWYgIWRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX1ZB
UklBRElDX1RFTVBMQVRFUykKLXRlbXBsYXRlCi0gICA8IGNsYXNzIE8xICA9IHZvaWQKLSAgICwg
Y2xhc3MgTzIgID0gdm9pZAotICAgLCBjbGFzcyBPMyAgPSB2b2lkCi0gICA+Ci0jZWxzZQotdGVt
cGxhdGU8Y2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRpZgotY2xhc3MgbGlzdF9tZW1iZXJfaG9vazsK
LQotLy9yYnRyZWUvc2V0L211bHRpc2V0Ci0jaWYgIWRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX1ZB
UklBRElDX1RFTVBMQVRFUykKLXRlbXBsYXRlCi0gICA8IGNsYXNzIFQKLSAgICwgY2xhc3MgTzEg
ID0gdm9pZAotICAgLCBjbGFzcyBPMiAgPSB2b2lkCi0gICAsIGNsYXNzIE8zICA9IHZvaWQKLSAg
ICwgY2xhc3MgTzQgID0gdm9pZAotICAgLCBjbGFzcyBPNSAgPSB2b2lkCi0gICAsIGNsYXNzIE82
ICA9IHZvaWQKLSAgID4KLSNlbHNlCi10ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyAuLi5PcHRpb25z
PgotI2VuZGlmCi1jbGFzcyByYnRyZWU7Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9JTlRSVVNJVkVf
VkFSSUFESUNfVEVNUExBVEVTKQotdGVtcGxhdGUKLSAgIDwgY2xhc3MgVAotICAgLCBjbGFzcyBP
MSAgPSB2b2lkCi0gICAsIGNsYXNzIE8yICA9IHZvaWQKLSAgICwgY2xhc3MgTzMgID0gdm9pZAot
ICAgLCBjbGFzcyBPNCAgPSB2b2lkCi0gICAsIGNsYXNzIE81ICA9IHZvaWQKLSAgICwgY2xhc3Mg
TzYgID0gdm9pZAotICAgPgotI2Vsc2UKLXRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIC4uLk9wdGlv
bnM+Ci0jZW5kaWYKLWNsYXNzIHNldDsKLQotI2lmICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9W
QVJJQURJQ19URU1QTEFURVMpCi10ZW1wbGF0ZQotICAgPCBjbGFzcyBUCi0gICAsIGNsYXNzIE8x
ICA9IHZvaWQKLSAgICwgY2xhc3MgTzIgID0gdm9pZAotICAgLCBjbGFzcyBPMyAgPSB2b2lkCi0g
ICAsIGNsYXNzIE80ICA9IHZvaWQKLSAgICwgY2xhc3MgTzUgID0gdm9pZAotICAgLCBjbGFzcyBP
NiAgPSB2b2lkCi0gICA+Ci0jZWxzZQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgLi4uT3B0aW9u
cz4KLSNlbmRpZgotY2xhc3MgbXVsdGlzZXQ7Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9JTlRSVVNJ
VkVfVkFSSUFESUNfVEVNUExBVEVTKQotdGVtcGxhdGUKLSAgIDwgY2xhc3MgTzEgID0gdm9pZAot
ICAgLCBjbGFzcyBPMiAgPSB2b2lkCi0gICAsIGNsYXNzIE8zICA9IHZvaWQKLSAgICwgY2xhc3Mg
TzQgID0gdm9pZAotICAgPgotI2Vsc2UKLXRlbXBsYXRlPGNsYXNzIC4uLk9wdGlvbnM+Ci0jZW5k
aWYKLWNsYXNzIHNldF9iYXNlX2hvb2s7Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9JTlRSVVNJVkVf
VkFSSUFESUNfVEVNUExBVEVTKQotdGVtcGxhdGUKLSAgIDwgY2xhc3MgTzEgID0gdm9pZAotICAg
LCBjbGFzcyBPMiAgPSB2b2lkCi0gICAsIGNsYXNzIE8zICA9IHZvaWQKLSAgICwgY2xhc3MgTzQg
ID0gdm9pZAotICAgPgotI2Vsc2UKLXRlbXBsYXRlPGNsYXNzIC4uLk9wdGlvbnM+Ci0jZW5kaWYK
LWNsYXNzIHNldF9tZW1iZXJfaG9vazsKLQotLy9zcGxheXRyZWUvc3BsYXlfc2V0L3NwbGF5X211
bHRpc2V0Ci0jaWYgIWRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX1ZBUklBRElDX1RFTVBMQVRFUykK
LXRlbXBsYXRlCi0gICA8IGNsYXNzIFQKLSAgICwgY2xhc3MgTzEgID0gdm9pZAotICAgLCBjbGFz
cyBPMiAgPSB2b2lkCi0gICAsIGNsYXNzIE8zICA9IHZvaWQKLSAgICwgY2xhc3MgTzQgID0gdm9p
ZAotICAgLCBjbGFzcyBPNSAgPSB2b2lkCi0gICAsIGNsYXNzIE82ICA9IHZvaWQKLSAgID4KLSNl
bHNlCi10ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyAuLi5PcHRpb25zPgotI2VuZGlmCi1jbGFzcyBz
cGxheXRyZWU7Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9JTlRSVVNJVkVfVkFSSUFESUNfVEVNUExB
VEVTKQotdGVtcGxhdGUKLSAgIDwgY2xhc3MgVAotICAgLCBjbGFzcyBPMSAgPSB2b2lkCi0gICAs
IGNsYXNzIE8yICA9IHZvaWQKLSAgICwgY2xhc3MgTzMgID0gdm9pZAotICAgLCBjbGFzcyBPNCAg
PSB2b2lkCi0gICAsIGNsYXNzIE81ICA9IHZvaWQKLSAgICwgY2xhc3MgTzYgID0gdm9pZAotICAg
PgotI2Vsc2UKLXRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIC4uLk9wdGlvbnM+Ci0jZW5kaWYKLWNs
YXNzIHNwbGF5X3NldDsKLQotI2lmICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19U
RU1QTEFURVMpCi10ZW1wbGF0ZQotICAgPCBjbGFzcyBUCi0gICAsIGNsYXNzIE8xICA9IHZvaWQK
LSAgICwgY2xhc3MgTzIgID0gdm9pZAotICAgLCBjbGFzcyBPMyAgPSB2b2lkCi0gICAsIGNsYXNz
IE80ICA9IHZvaWQKLSAgICwgY2xhc3MgTzUgID0gdm9pZAotICAgLCBjbGFzcyBPNiAgPSB2b2lk
Ci0gICA+Ci0jZWxzZQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRp
ZgotY2xhc3Mgc3BsYXlfbXVsdGlzZXQ7Ci0KLS8vYXZsdHJlZS9hdmxfc2V0L2F2bF9tdWx0aXNl
dAotI2lmICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19URU1QTEFURVMpCi10ZW1w
bGF0ZQotICAgPCBjbGFzcyBUCi0gICAsIGNsYXNzIE8xICA9IHZvaWQKLSAgICwgY2xhc3MgTzIg
ID0gdm9pZAotICAgLCBjbGFzcyBPMyAgPSB2b2lkCi0gICAsIGNsYXNzIE80ICA9IHZvaWQKLSAg
ICwgY2xhc3MgTzUgID0gdm9pZAotICAgLCBjbGFzcyBPNiAgPSB2b2lkCi0gICA+Ci0jZWxzZQot
dGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRpZgotY2xhc3MgYXZsdHJl
ZTsKLQotI2lmICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19URU1QTEFURVMpCi10
ZW1wbGF0ZQotICAgPCBjbGFzcyBUCi0gICAsIGNsYXNzIE8xICA9IHZvaWQKLSAgICwgY2xhc3Mg
TzIgID0gdm9pZAotICAgLCBjbGFzcyBPMyAgPSB2b2lkCi0gICAsIGNsYXNzIE80ICA9IHZvaWQK
LSAgICwgY2xhc3MgTzUgID0gdm9pZAotICAgLCBjbGFzcyBPNiAgPSB2b2lkCi0gICA+Ci0jZWxz
ZQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRpZgotY2xhc3MgYXZs
X3NldDsKLQotI2lmICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19URU1QTEFURVMp
Ci10ZW1wbGF0ZQotICAgPCBjbGFzcyBUCi0gICAsIGNsYXNzIE8xICA9IHZvaWQKLSAgICwgY2xh
c3MgTzIgID0gdm9pZAotICAgLCBjbGFzcyBPMyAgPSB2b2lkCi0gICAsIGNsYXNzIE80ICA9IHZv
aWQKLSAgICwgY2xhc3MgTzUgID0gdm9pZAotICAgLCBjbGFzcyBPNiAgPSB2b2lkCi0gICA+Ci0j
ZWxzZQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRpZgotY2xhc3Mg
YXZsX211bHRpc2V0OwotCi0jaWYgIWRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX1ZBUklBRElDX1RF
TVBMQVRFUykKLXRlbXBsYXRlCi0gICA8IGNsYXNzIE8xICA9IHZvaWQKLSAgICwgY2xhc3MgTzIg
ID0gdm9pZAotICAgLCBjbGFzcyBPMyAgPSB2b2lkCi0gICAsIGNsYXNzIE80ICA9IHZvaWQKLSAg
ID4KLSNlbHNlCi10ZW1wbGF0ZTxjbGFzcyAuLi5PcHRpb25zPgotI2VuZGlmCi1jbGFzcyBhdmxf
c2V0X2Jhc2VfaG9vazsKLQotI2lmICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19U
RU1QTEFURVMpCi10ZW1wbGF0ZQotICAgPCBjbGFzcyBPMSAgPSB2b2lkCi0gICAsIGNsYXNzIE8y
ICA9IHZvaWQKLSAgICwgY2xhc3MgTzMgID0gdm9pZAotICAgLCBjbGFzcyBPNCAgPSB2b2lkCi0g
ICA+Ci0jZWxzZQotdGVtcGxhdGU8Y2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRpZgotY2xhc3MgYXZs
X3NldF9tZW1iZXJfaG9vazsKLQotCi0vL3RyZWFwL3RyZWFwX3NldC90cmVhcF9tdWx0aXNldAot
I2lmICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19URU1QTEFURVMpCi10ZW1wbGF0
ZQotICAgPCBjbGFzcyBUCi0gICAsIGNsYXNzIE8xICA9IHZvaWQKLSAgICwgY2xhc3MgTzIgID0g
dm9pZAotICAgLCBjbGFzcyBPMyAgPSB2b2lkCi0gICAsIGNsYXNzIE80ICA9IHZvaWQKLSAgICwg
Y2xhc3MgTzUgID0gdm9pZAotICAgLCBjbGFzcyBPNiAgPSB2b2lkCi0gICA+Ci0jZWxzZQotdGVt
cGxhdGU8Y2xhc3MgVCwgY2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRpZgotY2xhc3MgdHJlYXA7Ci0K
LSNpZiAhZGVmaW5lZChCT09TVF9JTlRSVVNJVkVfVkFSSUFESUNfVEVNUExBVEVTKQotdGVtcGxh
dGUKLSAgIDwgY2xhc3MgVAotICAgLCBjbGFzcyBPMSAgPSB2b2lkCi0gICAsIGNsYXNzIE8yICA9
IHZvaWQKLSAgICwgY2xhc3MgTzMgID0gdm9pZAotICAgLCBjbGFzcyBPNCAgPSB2b2lkCi0gICAs
IGNsYXNzIE81ICA9IHZvaWQKLSAgICwgY2xhc3MgTzYgID0gdm9pZAotICAgPgotI2Vsc2UKLXRl
bXBsYXRlPGNsYXNzIFQsIGNsYXNzIC4uLk9wdGlvbnM+Ci0jZW5kaWYKLWNsYXNzIHRyZWFwX3Nl
dDsKLQotI2lmICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19URU1QTEFURVMpCi10
ZW1wbGF0ZQotICAgPCBjbGFzcyBUCi0gICAsIGNsYXNzIE8xICA9IHZvaWQKLSAgICwgY2xhc3Mg
TzIgID0gdm9pZAotICAgLCBjbGFzcyBPMyAgPSB2b2lkCi0gICAsIGNsYXNzIE80ICA9IHZvaWQK
LSAgICwgY2xhc3MgTzUgID0gdm9pZAotICAgLCBjbGFzcyBPNiAgPSB2b2lkCi0gICA+Ci0jZWxz
ZQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRpZgotY2xhc3MgdHJl
YXBfbXVsdGlzZXQ7Ci0KLS8vc2d0cmVlL3NnX3NldC9zZ19tdWx0aXNldAotI2lmICFkZWZpbmVk
KEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19URU1QTEFURVMpCi10ZW1wbGF0ZQotICAgPCBjbGFz
cyBUCi0gICAsIGNsYXNzIE8xICA9IHZvaWQKLSAgICwgY2xhc3MgTzIgID0gdm9pZAotICAgLCBj
bGFzcyBPMyAgPSB2b2lkCi0gICAsIGNsYXNzIE80ICA9IHZvaWQKLSAgICwgY2xhc3MgTzUgID0g
dm9pZAotICAgLCBjbGFzcyBPNiAgPSB2b2lkCi0gICA+Ci0jZWxzZQotdGVtcGxhdGU8Y2xhc3Mg
VCwgY2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRpZgotY2xhc3Mgc2d0cmVlOwotCi0jaWYgIWRlZmlu
ZWQoQk9PU1RfSU5UUlVTSVZFX1ZBUklBRElDX1RFTVBMQVRFUykKLXRlbXBsYXRlCi0gICA8IGNs
YXNzIFQKLSAgICwgY2xhc3MgTzEgID0gdm9pZAotICAgLCBjbGFzcyBPMiAgPSB2b2lkCi0gICAs
IGNsYXNzIE8zICA9IHZvaWQKLSAgICwgY2xhc3MgTzQgID0gdm9pZAotICAgLCBjbGFzcyBPNSAg
PSB2b2lkCi0gICAsIGNsYXNzIE82ICA9IHZvaWQKLSAgID4KLSNlbHNlCi10ZW1wbGF0ZTxjbGFz
cyBULCBjbGFzcyAuLi5PcHRpb25zPgotI2VuZGlmCi1jbGFzcyBzZ19zZXQ7Ci0KLSNpZiAhZGVm
aW5lZChCT09TVF9JTlRSVVNJVkVfVkFSSUFESUNfVEVNUExBVEVTKQotdGVtcGxhdGUKLSAgIDwg
Y2xhc3MgVAotICAgLCBjbGFzcyBPMSAgPSB2b2lkCi0gICAsIGNsYXNzIE8yICA9IHZvaWQKLSAg
ICwgY2xhc3MgTzMgID0gdm9pZAotICAgLCBjbGFzcyBPNCAgPSB2b2lkCi0gICAsIGNsYXNzIE81
ICA9IHZvaWQKLSAgICwgY2xhc3MgTzYgID0gdm9pZAotICAgPgotI2Vsc2UKLXRlbXBsYXRlPGNs
YXNzIFQsIGNsYXNzIC4uLk9wdGlvbnM+Ci0jZW5kaWYKLWNsYXNzIHNnX211bHRpc2V0OwotCi0j
aWYgIWRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX1ZBUklBRElDX1RFTVBMQVRFUykKLXRlbXBsYXRl
Ci0gICA8IGNsYXNzIFQKLSAgICwgY2xhc3MgTzEgID0gdm9pZAotICAgLCBjbGFzcyBPMiAgPSB2
b2lkCi0gICAsIGNsYXNzIE8zICA9IHZvaWQKLSAgICwgY2xhc3MgTzQgID0gdm9pZAotICAgLCBj
bGFzcyBPNSAgPSB2b2lkCi0gICAsIGNsYXNzIE82ICA9IHZvaWQKLSAgID4KLSNlbHNlCi10ZW1w
bGF0ZTxjbGFzcyBULCBjbGFzcyAuLi5PcHRpb25zPgotI2VuZGlmCi1jbGFzcyBic3RyZWU7Ci0K
LSNpZiAhZGVmaW5lZChCT09TVF9JTlRSVVNJVkVfVkFSSUFESUNfVEVNUExBVEVTKQotdGVtcGxh
dGUKLSAgIDwgY2xhc3MgVAotICAgLCBjbGFzcyBPMSAgPSB2b2lkCi0gICAsIGNsYXNzIE8yICA9
IHZvaWQKLSAgICwgY2xhc3MgTzMgID0gdm9pZAotICAgLCBjbGFzcyBPNCAgPSB2b2lkCi0gICAs
IGNsYXNzIE81ICA9IHZvaWQKLSAgICwgY2xhc3MgTzYgID0gdm9pZAotICAgPgotI2Vsc2UKLXRl
bXBsYXRlPGNsYXNzIFQsIGNsYXNzIC4uLk9wdGlvbnM+Ci0jZW5kaWYKLWNsYXNzIGJzX3NldDsK
LQotI2lmICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19URU1QTEFURVMpCi10ZW1w
bGF0ZQotICAgPCBjbGFzcyBUCi0gICAsIGNsYXNzIE8xICA9IHZvaWQKLSAgICwgY2xhc3MgTzIg
ID0gdm9pZAotICAgLCBjbGFzcyBPMyAgPSB2b2lkCi0gICAsIGNsYXNzIE80ICA9IHZvaWQKLSAg
ICwgY2xhc3MgTzUgID0gdm9pZAotICAgLCBjbGFzcyBPNiAgPSB2b2lkCi0gICA+Ci0jZWxzZQot
dGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRpZgotY2xhc3MgYnNfbXVs
dGlzZXQ7Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9JTlRSVVNJVkVfVkFSSUFESUNfVEVNUExBVEVT
KQotdGVtcGxhdGUKLSAgIDwgY2xhc3MgTzEgID0gdm9pZAotICAgLCBjbGFzcyBPMiAgPSB2b2lk
Ci0gICAsIGNsYXNzIE8zICA9IHZvaWQKLSAgID4KLSNlbHNlCi10ZW1wbGF0ZTxjbGFzcyAuLi5P
cHRpb25zPgotI2VuZGlmCi1jbGFzcyBic19zZXRfYmFzZV9ob29rOwotCi0jaWYgIWRlZmluZWQo
Qk9PU1RfSU5UUlVTSVZFX1ZBUklBRElDX1RFTVBMQVRFUykKLXRlbXBsYXRlCi0gICA8IGNsYXNz
IE8xICA9IHZvaWQKLSAgICwgY2xhc3MgTzIgID0gdm9pZAotICAgLCBjbGFzcyBPMyAgPSB2b2lk
Ci0gICA+Ci0jZWxzZQotdGVtcGxhdGU8Y2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRpZgotY2xhc3Mg
YnNfc2V0X21lbWJlcl9ob29rOwotCi0vL2hhc2h0YWJsZS91bm9yZGVyZWRfc2V0L3Vub3JkZXJl
ZF9tdWx0aXNldAotCi0jaWYgIWRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX1ZBUklBRElDX1RFTVBM
QVRFUykKLXRlbXBsYXRlCi0gICA8IGNsYXNzIFQKLSAgICwgY2xhc3MgTzEgID0gdm9pZAotICAg
LCBjbGFzcyBPMiAgPSB2b2lkCi0gICAsIGNsYXNzIE8zICA9IHZvaWQKLSAgICwgY2xhc3MgTzQg
ID0gdm9pZAotICAgLCBjbGFzcyBPNSAgPSB2b2lkCi0gICAsIGNsYXNzIE82ICA9IHZvaWQKLSAg
ICwgY2xhc3MgTzcgID0gdm9pZAotICAgLCBjbGFzcyBPOCAgPSB2b2lkCi0gICAsIGNsYXNzIE85
ICA9IHZvaWQKLSAgICwgY2xhc3MgTzEwID0gdm9pZAotICAgPgotI2Vsc2UKLXRlbXBsYXRlPGNs
YXNzIFQsIGNsYXNzIC4uLk9wdGlvbnM+Ci0jZW5kaWYKLWNsYXNzIGhhc2h0YWJsZTsKLQotI2lm
ICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19URU1QTEFURVMpCi10ZW1wbGF0ZQot
ICAgPCBjbGFzcyBUCi0gICAsIGNsYXNzIE8xICA9IHZvaWQKLSAgICwgY2xhc3MgTzIgID0gdm9p
ZAotICAgLCBjbGFzcyBPMyAgPSB2b2lkCi0gICAsIGNsYXNzIE80ICA9IHZvaWQKLSAgICwgY2xh
c3MgTzUgID0gdm9pZAotICAgLCBjbGFzcyBPNiAgPSB2b2lkCi0gICAsIGNsYXNzIE83ICA9IHZv
aWQKLSAgICwgY2xhc3MgTzggID0gdm9pZAotICAgLCBjbGFzcyBPOSAgPSB2b2lkCi0gICAsIGNs
YXNzIE8xMCA9IHZvaWQKLSAgID4KLSNlbHNlCi10ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyAuLi5P
cHRpb25zPgotI2VuZGlmCi1jbGFzcyB1bm9yZGVyZWRfc2V0OwotCi0jaWYgIWRlZmluZWQoQk9P
U1RfSU5UUlVTSVZFX1ZBUklBRElDX1RFTVBMQVRFUykKLXRlbXBsYXRlCi0gICA8IGNsYXNzIFQK
LSAgICwgY2xhc3MgTzEgID0gdm9pZAotICAgLCBjbGFzcyBPMiAgPSB2b2lkCi0gICAsIGNsYXNz
IE8zICA9IHZvaWQKLSAgICwgY2xhc3MgTzQgID0gdm9pZAotICAgLCBjbGFzcyBPNSAgPSB2b2lk
Ci0gICAsIGNsYXNzIE82ICA9IHZvaWQKLSAgICwgY2xhc3MgTzcgID0gdm9pZAotICAgLCBjbGFz
cyBPOCAgPSB2b2lkCi0gICAsIGNsYXNzIE85ICA9IHZvaWQKLSAgICwgY2xhc3MgTzEwID0gdm9p
ZAotICAgPgotI2Vsc2UKLXRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIC4uLk9wdGlvbnM+Ci0jZW5k
aWYKLWNsYXNzIHVub3JkZXJlZF9tdWx0aXNldDsKLQotI2lmICFkZWZpbmVkKEJPT1NUX0lOVFJV
U0lWRV9WQVJJQURJQ19URU1QTEFURVMpCi10ZW1wbGF0ZQotICAgPCBjbGFzcyBPMSAgPSB2b2lk
Ci0gICAsIGNsYXNzIE8yICA9IHZvaWQKLSAgICwgY2xhc3MgTzMgID0gdm9pZAotICAgLCBjbGFz
cyBPNCAgPSB2b2lkCi0gICA+Ci0jZWxzZQotdGVtcGxhdGU8Y2xhc3MgLi4uT3B0aW9ucz4KLSNl
bmRpZgotY2xhc3MgdW5vcmRlcmVkX3NldF9iYXNlX2hvb2s7Ci0KLSNpZiAhZGVmaW5lZChCT09T
VF9JTlRSVVNJVkVfVkFSSUFESUNfVEVNUExBVEVTKQotdGVtcGxhdGUKLSAgIDwgY2xhc3MgTzEg
ID0gdm9pZAotICAgLCBjbGFzcyBPMiAgPSB2b2lkCi0gICAsIGNsYXNzIE8zICA9IHZvaWQKLSAg
ICwgY2xhc3MgTzQgID0gdm9pZAotICAgPgotI2Vsc2UKLXRlbXBsYXRlPGNsYXNzIC4uLk9wdGlv
bnM+Ci0jZW5kaWYKLWNsYXNzIHVub3JkZXJlZF9zZXRfbWVtYmVyX2hvb2s7Ci0KLSNpZiAhZGVm
aW5lZChCT09TVF9JTlRSVVNJVkVfVkFSSUFESUNfVEVNUExBVEVTKQotdGVtcGxhdGUKLSAgIDwg
Y2xhc3MgTzEgID0gdm9pZAotICAgLCBjbGFzcyBPMiAgPSB2b2lkCi0gICAsIGNsYXNzIE8zICA9
IHZvaWQKLSAgID4KLSNlbHNlCi10ZW1wbGF0ZTxjbGFzcyAuLi5PcHRpb25zPgotI2VuZGlmCi1j
bGFzcyBhbnlfYmFzZV9ob29rOwotCi0jaWYgIWRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX1ZBUklB
RElDX1RFTVBMQVRFUykKLXRlbXBsYXRlCi0gICA8IGNsYXNzIE8xICA9IHZvaWQKLSAgICwgY2xh
c3MgTzIgID0gdm9pZAotICAgLCBjbGFzcyBPMyAgPSB2b2lkCi0gICA+Ci0jZWxzZQotdGVtcGxh
dGU8Y2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRpZgotY2xhc3MgYW55X21lbWJlcl9ob29rOwotCi0v
L09wdGlvbnMKLQotdGVtcGxhdGU8Ym9vbCBFbmFibGVkPgotc3RydWN0IGNvbnN0YW50X3RpbWVf
c2l6ZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZVR5cGU+Ci1zdHJ1Y3Qgc2l6ZV90eXBlOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb21wYXJlPgotc3RydWN0IGNvbXBhcmU7Ci0KLXRlbXBsYXRl
PGJvb2wgRW5hYmxlZD4KLXN0cnVjdCBmbG9hdGluZ19wb2ludDsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgRXF1YWw+Ci1zdHJ1Y3QgZXF1YWw7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByaW9yaXR5Pgot
c3RydWN0IHByaW9yaXR5OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoPgotc3RydWN0IGhhc2g7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHJhaXRzPiBzdHJ1Y3QgdmFsdWVfdHJhaXRzOwot
Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgUGFyZW50Ci0gICAgICAgICwgdHlwZW5hbWUgTWVtYmVySG9v
awotICAgICAgICAsIE1lbWJlckhvb2sgUGFyZW50OjoqIFB0clRvTWVtYmVyPgotc3RydWN0IG1l
bWJlcl9ob29rOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotc3RydWN0IGZ1bmN0aW9u
X2hvb2s7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2VIb29rPgotc3RydWN0IGJhc2VfaG9vazsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVm9pZFBvaW50ZXI+Ci1zdHJ1Y3Qgdm9pZF9wb2ludGVyOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUYWc+Ci1zdHJ1Y3QgdGFnOwotCi10ZW1wbGF0ZTxsaW5rX21v
ZGVfdHlwZSBMaW5rVHlwZT4KLXN0cnVjdCBsaW5rX21vZGU7Ci0KLXRlbXBsYXRlPGJvb2wgRW5h
YmxlZD4gc3RydWN0Ci1vcHRpbWl6ZV9zaXplOwotCi10ZW1wbGF0ZTxib29sIEVuYWJsZWQ+Ci1z
dHJ1Y3QgbGluZWFyOwotCi10ZW1wbGF0ZTxib29sIEVuYWJsZWQ+Ci1zdHJ1Y3QgY2FjaGVfbGFz
dDsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQnVja2V0VHJhaXRzPgotc3RydWN0IGJ1Y2tldF90cmFp
dHM7Ci0KLXRlbXBsYXRlPGJvb2wgRW5hYmxlZD4KLXN0cnVjdCBzdG9yZV9oYXNoOwotCi10ZW1w
bGF0ZTxib29sIEVuYWJsZWQ+Ci1zdHJ1Y3Qgb3B0aW1pemVfbXVsdGlrZXk7Ci0KLXRlbXBsYXRl
PGJvb2wgRW5hYmxlZD4KLXN0cnVjdCBwb3dlcl8yX2J1Y2tldHM7Ci0KLXRlbXBsYXRlPGJvb2wg
RW5hYmxlZD4KLXN0cnVjdCBjYWNoZV9iZWdpbjsKLQotdGVtcGxhdGU8Ym9vbCBFbmFibGVkPgot
c3RydWN0IGNvbXBhcmVfaGFzaDsKLQotdGVtcGxhdGU8Ym9vbCBFbmFibGVkPgotc3RydWN0IGlu
Y3JlbWVudGFsOwotCi0vL1ZhbHVlIHRyYWl0cwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVRy
YWl0cz4KLXN0cnVjdCB2YWx1ZV90cmFpdHM7Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBQYXJlbnQK
LSAgICAgICAgLCB0eXBlbmFtZSBNZW1iZXJIb29rCi0gICAgICAgICwgTWVtYmVySG9vayBQYXJl
bnQ6OiogUHRyVG9NZW1iZXI+Ci1zdHJ1Y3QgbWVtYmVyX2hvb2s7Ci0KLXRlbXBsYXRlPCB0eXBl
bmFtZSBGdW5jdG9yPgotc3RydWN0IGZ1bmN0aW9uX2hvb2s7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IEJhc2VIb29rPgotc3RydWN0IGJhc2VfaG9vazsKLQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3Mg
Tm9kZVRyYWl0cywgbGlua19tb2RlX3R5cGUgTGlua01vZGUgPSBzYWZlX2xpbms+Ci1zdHJ1Y3Qg
ZGVyaXZhdGlvbl92YWx1ZV90cmFpdHM7Ci0KLXRlbXBsYXRlPGNsYXNzIE5vZGVUcmFpdHMsIGxp
bmtfbW9kZV90eXBlIExpbmtNb2RlID0gbm9ybWFsX2xpbms+Ci1zdHJ1Y3QgdHJpdmlhbF92YWx1
ZV90cmFpdHM7Ci0KLS8vQWRkaXRpb25hbCB1dGlsaXRpZXMKLQotdGVtcGxhdGU8dHlwZW5hbWUg
Vm9pZFBvaW50ZXIsIHN0ZDo6c2l6ZV90IEFsaWdubWVudD4KLXN0cnVjdCBtYXhfcG9pbnRlcl9w
bHVzX2JpdHM7Ci0KLXRlbXBsYXRlPHN0ZDo6c2l6ZV90IEFsaWdubWVudD4KLXN0cnVjdCBtYXhf
cG9pbnRlcl9wbHVzX2JpdHM8dm9pZCAqLCBBbGlnbm1lbnQ+OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBQb2ludGVyLCBzdGQ6OnNpemVfdCBOdW1CaXRzPgotc3RydWN0IHBvaW50ZXJfcGx1c19iaXRz
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOdW1CaXRzPgotc3RydWN0IHBv
aW50ZXJfcGx1c19iaXRzPFQgKiwgTnVtQml0cz47Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFB0cj4K
LXN0cnVjdCBwb2ludGVyX3RyYWl0czsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBw
b2ludGVyX3RyYWl0czxUICo+OwotCi19ICAvL25hbWVzcGFjZSBpbnRydXNpdmUgewotfSAgLy9u
YW1lc3BhY2UgYm9vc3QgewotCi0jZW5kaWYgICAvLyNpZiAhZGVmaW5lZChCT09TVF9JTlRSVVNJ
VkVfRE9YWUdFTl9JTlZPS0VEKQotCi0jZW5kaWYgICAvLyNpZm5kZWYgQk9PU1RfSU5UUlVTSVZF
X0ZXRF9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L2ludHJ1c2l2ZS9saW5rX21vZGUuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2xpbmtfbW9kZS5ocHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDRiYTRkYWZmN2Q3YTUyMTJiMzE0ODZhNmVhY2RhNjdjZTZiOWZjYjcu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2xpbmtfbW9kZS5ocHAK
KysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8K
LS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAgMjAwNi0yMDEzCi0vLwotLy8gRGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8g
ICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8g
ICAgICAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNl
ZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3IgZG9jdW1lbnRhdGlvbi4K
LS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9MSU5L
X01PREVfSFBQCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9MSU5LX01PREVfSFBQCi0KLSNpZiBk
ZWZpbmVkKEJPT1NUX0hBU19QUkFHTUFfT05DRSkKLSMgIHByYWdtYSBvbmNlCi0jZW5kaWYKLQot
bmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSBpbnRydXNpdmUgewotCi0vLyFUaGlzIGVudW1l
cmF0aW9uIGRlZmluZXMgdGhlIHR5cGUgb2YgdmFsdWVfdHJhaXRzIHRoYXQgY2FuIGJlIGRlZmlu
ZWQKLS8vIWZvciBCb29zdC5JbnRydXNpdmUgY29udGFpbmVycwotZW51bSBsaW5rX21vZGVfdHlw
ZXsKLSAgIC8vIUlmIHRoaXMgbGlua2luZyBwb2xpY3kgaXMgc3BlY2lmaWVkIGluIGEgdmFsdWVf
dHJhaXRzIGNsYXNzCi0gICAvLyFhcyB0aGUgbGlua19tb2RlLCBjb250YWluZXJzCi0gICAvLyFj
b25maWd1cmVkIHdpdGggc3VjaCB2YWx1ZV90cmFpdHMgd29uJ3Qgc2V0IHRoZSBob29rcwotICAg
Ly8hb2YgdGhlIGVyYXNlZCB2YWx1ZXMgdG8gYSBkZWZhdWx0IHN0YXRlLiBDb250YWluZXJzIGFs
c28gd29uJ3QKLSAgIC8vIWNoZWNrIHRoYXQgdGhlIGhvb2tzIG9mIHRoZSBuZXcgdmFsdWVzIGFy
ZSBkZWZhdWx0IGluaXRpYWxpemVkLgotICAgbm9ybWFsX2xpbmssCi0KLSAgIC8vIUlmIHRoaXMg
bGlua2luZyBwb2xpY3kgaXMgc3BlY2lmaWVkIGluIGEgdmFsdWVfdHJhaXRzIGNsYXNzCi0gICAv
LyFhcyB0aGUgbGlua19tb2RlLCBjb250YWluZXJzCi0gICAvLyFjb25maWd1cmVkIHdpdGggc3Vj
aCB2YWx1ZV90cmFpdHMgd2lsbCBzZXQgdGhlIGhvb2tzCi0gICAvLyFvZiB0aGUgZXJhc2VkIHZh
bHVlcyB0byBhIGRlZmF1bHQgc3RhdGUuIENvbnRhaW5lcnMgYWxzbyB3aWxsCi0gICAvLyFjaGVj
ayB0aGF0IHRoZSBob29rcyBvZiB0aGUgbmV3IHZhbHVlcyBhcmUgZGVmYXVsdCBpbml0aWFsaXpl
ZC4KLSAgIHNhZmVfbGluaywKLQotICAgLy8hU2FtZSBhcyAic2FmZV9saW5rIiBidXQgdGhlIHVz
ZXIgdHlwZSBpcyBhbiBhdXRvLXVubGluawotICAgLy8hdHlwZSwgc28gdGhlIGNvbnRhaW5lcnMg
d2l0aCBjb25zdGFudC10aW1lIHNpemUgZmVhdHVyZXMgd29uJ3QgYmUKLSAgIC8vIWNvbXBhdGli
bGUgd2l0aCB2YWx1ZV90cmFpdHMgY29uZmlndXJlZCB3aXRoIHRoaXMgcG9saWN5LgotICAgLy8h
Q29udGFpbmVycyBhbHNvIGtub3cgdGhhdCB0aGUgYSB2YWx1ZSBjYW4gYmUgc2lsZW50bHkgZXJh
c2VkIGZyb20KLSAgIC8vIXRoZSBjb250YWluZXIgd2l0aG91dCB1c2luZyBhbnkgZnVuY3Rpb24g
cHJvdmlkZWQgYnkgdGhlIGNvbnRhaW5lcnMuCi0gICBhdXRvX3VubGluawotfTsKLQotI2lmbmRl
ZiBCT09TVF9JTlRSVVNJVkVfRE9YWUdFTl9JTlZPS0VECi0KLXRlbXBsYXRlIDxsaW5rX21vZGVf
dHlwZSBsaW5rX21vZGU+Ci1zdHJ1Y3QgaXNfc2FmZV9hdXRvdW5saW5rCi17Ci0gICBzdGF0aWMg
Y29uc3QgYm9vbCB2YWx1ZSA9Ci0gICAgICAoaW50KWxpbmtfbW9kZSA9PSAoaW50KWF1dG9fdW5s
aW5rICAgfHwKLSAgICAgIChpbnQpbGlua19tb2RlID09IChpbnQpc2FmZV9saW5rOwotfTsKLQot
I2VuZGlmICAgLy9CT09TVF9JTlRSVVNJVkVfRE9YWUdFTl9JTlZPS0VECi0KLX0gLy9uYW1lc3Bh
Y2UgaW50cnVzaXZlCi19IC8vbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvL0JPT1NUX0lOVFJV
U0lWRV9MSU5LX01PREVfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvbGlzdC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvbGlzdC5ocHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGE5NTVjNDQxZWZjM2E0YWYxMTJmNThiNzY5NTM5MTdmZmEyMzVkZWQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2xpc3QuaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTUwOSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8v
IChDKSBDb3B5cmlnaHQgT2xhZiBLcnppa2FsbGEgMjAwNC0yMDA2LgotLy8gKEMpIENvcHlyaWdo
dCBJb24gR2F6dGFuYWdhICAyMDA2LTIwMTQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAgICAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgICAgICAgICBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL2xpYnMvaW50cnVzaXZlIGZvciBkb2N1bWVudGF0aW9uLgotLy8KLS8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0KLSNpZm5kZWYgQk9PU1RfSU5UUlVTSVZFX0xJU1RfSFBQCi0jZGVmaW5lIEJP
T1NUX0lOVFJVU0lWRV9MSVNUX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFp
bC9jb25maWdfYmVnaW4uaHBwPgotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9pbnRydXNpdmVf
ZndkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL2Fzc2VydC5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2xpc3RfaG9vay5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
aW50cnVzaXZlL2NpcmN1bGFyX2xpc3RfYWxnb3JpdGhtcy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
aW50cnVzaXZlL3BvaW50ZXJfdHJhaXRzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUv
ZGV0YWlsL21wbC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2xpbmtfbW9kZS5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9nZXRfdmFsdWVfdHJhaXRzLmhwcD4K
LSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL2lzX3N0YXRlZnVsX3ZhbHVlX3RyYWl0
cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9kZWZhdWx0X2hlYWRlcl9o
b2xkZXIuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvcmV2ZXJzZV9pdGVy
YXRvci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC91bmNhc3QuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvbGlzdF9pdGVyYXRvci5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9hcnJheV9pbml0aWFsaXplci5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9leGNlcHRpb25fZGlzcG9zZXIuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvZXF1YWxfdG9fdmFsdWUuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwva2V5X25vZGVwdHJfY29tcC5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9zaW1wbGVfZGlzcG9zZXJzLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9pbnRydXNpdmUvZGV0YWlsL3NpemVfaG9sZGVyLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9pbnRydXNpdmUvZGV0YWlsL2FsZ29yaXRobS5ocHA+Ci0KLSNpbmNsdWRlIDxib29zdC9tb3Zl
L3V0aWxpdHlfY29yZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qvc3RhdGljX2Fzc2VydC5ocHA+Ci0K
LSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL21pbmltYWxfbGVzc19lcXVhbF9oZWFk
ZXIuaHBwPi8vc3RkOjpsZXNzCi0jaW5jbHVkZSA8Y3N0ZGRlZj4gICAvL3N0ZDo6c2l6ZV90LCBl
dGMuCi0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19QUkFHTUFfT05DRSkKLSMgIHByYWdtYSBvbmNl
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSBpbnRydXNpdmUgewotCi0v
Ly8gQGNvbmQKLQotc3RydWN0IGRlZmF1bHRfbGlzdF9ob29rX2FwcGxpZXIKLXsgIHRlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgYXBwbHl7IHR5cGVkZWYgdHlwZW5hbWUgVDo6ZGVmYXVsdF9saXN0
X2hvb2sgdHlwZTsgIH07ICB9OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgaXNfZGVmYXVsdF9ob29r
X3RhZzxkZWZhdWx0X2xpc3RfaG9va19hcHBsaWVyPgoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFs
dWUgPSB0cnVlOyAgfTsKLQotc3RydWN0IGxpc3RfZGVmYXVsdHMKLXsKLSAgIHR5cGVkZWYgZGVm
YXVsdF9saXN0X2hvb2tfYXBwbGllciBwcm90b192YWx1ZV90cmFpdHM7Ci0gICBzdGF0aWMgY29u
c3QgYm9vbCBjb25zdGFudF90aW1lX3NpemUgPSB0cnVlOwotICAgdHlwZWRlZiBzdGQ6OnNpemVf
dCBzaXplX3R5cGU7Ci0gICB0eXBlZGVmIHZvaWQgaGVhZGVyX2hvbGRlcl90eXBlOwotfTsKLQot
Ly8vIEBlbmRjb25kCi0KLS8vISBUaGUgY2xhc3MgdGVtcGxhdGUgbGlzdCBpcyBhbiBpbnRydXNp
dmUgY29udGFpbmVyIHRoYXQgbWltaWNzIG1vc3Qgb2YgdGhlCi0vLyEgaW50ZXJmYWNlIG9mIHN0
ZDo6bGlzdCBhcyBkZXNjcmliZWQgaW4gdGhlIEMrKyBzdGFuZGFyZC4KLS8vIQotLy8hIFRoZSB0
ZW1wbGF0ZSBwYXJhbWV0ZXIgXGMgVCBpcyB0aGUgdHlwZSB0byBiZSBtYW5hZ2VkIGJ5IHRoZSBj
b250YWluZXIuCi0vLyEgVGhlIHVzZXIgY2FuIHNwZWNpZnkgYWRkaXRpb25hbCBvcHRpb25zIGFu
ZCBpZiBubyBvcHRpb25zIGFyZSBwcm92aWRlZAotLy8hIGRlZmF1bHQgb3B0aW9ucyBhcmUgdXNl
ZC4KLS8vIQotLy8hIFRoZSBjb250YWluZXIgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBvcHRpb25z
OgotLy8hIFxjIGJhc2VfaG9vazw+L21lbWJlcl9ob29rPD4vdmFsdWVfdHJhaXRzPD4sCi0vLyEg
XGMgY29uc3RhbnRfdGltZV9zaXplPD4gYW5kIFxjIHNpemVfdHlwZTw+LgotI2lmIGRlZmluZWQo
Qk9PU1RfSU5UUlVTSVZFX0RPWFlHRU5fSU5WT0tFRCkKLXRlbXBsYXRlPGNsYXNzIFQsIGNsYXNz
IC4uLk9wdGlvbnM+Ci0jZWxzZQotdGVtcGxhdGUgPGNsYXNzIFZhbHVlVHJhaXRzLCBjbGFzcyBT
aXplVHlwZSwgYm9vbCBDb25zdGFudFRpbWVTaXplLCB0eXBlbmFtZSBIZWFkZXJIb2xkZXI+Ci0j
ZW5kaWYKLWNsYXNzIGxpc3RfaW1wbAotewotICAgLy9QdWJsaWMgdHlwZWRlZnMKLSAgIHB1Ymxp
YzoKLSAgIHR5cGVkZWYgVmFsdWVUcmFpdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlX3RyYWl0czsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVf
dHJhaXRzOjpwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7Ci0gICB0
eXBlZGVmIHR5cGVuYW1lIHZhbHVlX3RyYWl0czo6Y29uc3RfcG9pbnRlciAgICAgICAgICAgICAg
ICAgICAgICBjb25zdF9wb2ludGVyOwotICAgdHlwZWRlZiB0eXBlbmFtZSBwb2ludGVyX3RyYWl0
czxwb2ludGVyPjo6ZWxlbWVudF90eXBlICAgICAgICAgICAgdmFsdWVfdHlwZTsKLSAgIHR5cGVk
ZWYgdHlwZW5hbWUgcG9pbnRlcl90cmFpdHM8cG9pbnRlcj46OnJlZmVyZW5jZSAgICAgICAgICAg
ICAgIHJlZmVyZW5jZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgcG9pbnRlcl90cmFpdHM8Y29uc3Rf
cG9pbnRlcj46OnJlZmVyZW5jZSAgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKLSAgIHR5cGVkZWYg
dHlwZW5hbWUgcG9pbnRlcl90cmFpdHM8cG9pbnRlcj46OmRpZmZlcmVuY2VfdHlwZSAgICAgICAg
IGRpZmZlcmVuY2VfdHlwZTsKLSAgIHR5cGVkZWYgU2l6ZVR5cGUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKLSAgIHR5cGVkZWYgbGlz
dF9pdGVyYXRvcjx2YWx1ZV90cmFpdHMsIGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgIGl0
ZXJhdG9yOwotICAgdHlwZWRlZiBsaXN0X2l0ZXJhdG9yPHZhbHVlX3RyYWl0cywgdHJ1ZT4gICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7Ci0gICB0eXBlZGVmIGJvb3N0Ojpp
bnRydXNpdmU6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+ICAgICAgICAgICAgICByZXZlcnNl
X2l0ZXJhdG9yOwotICAgdHlwZWRlZiBib29zdDo6aW50cnVzaXZlOjpyZXZlcnNlX2l0ZXJhdG9y
PGNvbnN0X2l0ZXJhdG9yPiAgICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKLSAgIHR5cGVk
ZWYgdHlwZW5hbWUgdmFsdWVfdHJhaXRzOjpub2RlX3RyYWl0cyAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVfdHJhaXRzOwotICAgdHlwZWRlZiB0eXBlbmFtZSBub2RlX3RyYWl0czo6bm9kZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUg
bm9kZV90cmFpdHM6Om5vZGVfcHRyICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVfcHRy
OwotICAgdHlwZWRlZiB0eXBlbmFtZSBub2RlX3RyYWl0czo6Y29uc3Rfbm9kZV9wdHIgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Rfbm9kZV9wdHI7Ci0gICB0eXBlZGVmIGNpcmN1bGFyX2xpc3Rf
YWxnb3JpdGhtczxub2RlX3RyYWl0cz4gICAgICAgICAgICAgICAgICAgICBub2RlX2FsZ29yaXRo
bXM7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6Z2V0X2hlYWRlcl9ob2xkZXJfdHlwZQot
ICAgICAgPCB2YWx1ZV90cmFpdHMsIEhlYWRlckhvbGRlciA+Ojp0eXBlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVhZGVyX2hvbGRlcl90eXBlOwotCi0gICBzdGF0aWMgY29uc3QgYm9vbCBj
b25zdGFudF90aW1lX3NpemUgPSBDb25zdGFudFRpbWVTaXplOwotICAgc3RhdGljIGNvbnN0IGJv
b2wgc3RhdGVmdWxfdmFsdWVfdHJhaXRzID0gZGV0YWlsOjppc19zdGF0ZWZ1bF92YWx1ZV90cmFp
dHM8dmFsdWVfdHJhaXRzPjo6dmFsdWU7Ci0gICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfY29udGFp
bmVyX2Zyb21faXRlcmF0b3IgPQotICAgICAgICBkZXRhaWw6OmlzX3NhbWU8IGhlYWRlcl9ob2xk
ZXJfdHlwZSwgZGV0YWlsOjpkZWZhdWx0X2hlYWRlcl9ob2xkZXI8IG5vZGVfdHJhaXRzID4gPjo6
dmFsdWU7Ci0KLSAgIC8vLyBAY29uZAotCi0gICBwcml2YXRlOgotICAgdHlwZWRlZiBkZXRhaWw6
OnNpemVfaG9sZGVyPGNvbnN0YW50X3RpbWVfc2l6ZSwgc2l6ZV90eXBlPiAgICAgICAgICBzaXpl
X3RyYWl0czsKLQotICAgLy9ub25jb3B5YWJsZQotICAgQk9PU1RfTU9WQUJMRV9CVVRfTk9UX0NP
UFlBQkxFKGxpc3RfaW1wbCkKLQotICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZW1vZGVfb3JfYXV0
b3VubGluayA9IGlzX3NhZmVfYXV0b3VubGluazx2YWx1ZV90cmFpdHM6OmxpbmtfbW9kZT46OnZh
bHVlOwotCi0gICAvL0NvbnN0YW50LXRpbWUgc2l6ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBhdXRv
LXVubGluayBob29rcyEKLSAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoIShjb25zdGFudF90aW1lX3Np
emUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICgoaW50KXZhbHVlX3RyYWl0czo6bGlua19t
b2RlID09IChpbnQpYXV0b191bmxpbmspCi0gICAgICAgICAgICAgICAgICAgICAgKSk7Ci0KLSAg
IG5vZGVfcHRyIGdldF9yb290X25vZGUoKQotICAgeyByZXR1cm4gZGF0YV8ucm9vdF9wbHVzX3Np
emVfLm1faGVhZGVyLmdldF9ub2RlKCk7IH0KLQotICAgY29uc3Rfbm9kZV9wdHIgZ2V0X3Jvb3Rf
bm9kZSgpIGNvbnN0Ci0gICB7IHJldHVybiBkYXRhXy5yb290X3BsdXNfc2l6ZV8ubV9oZWFkZXIu
Z2V0X25vZGUoKTsgfQotCi0gICBzdHJ1Y3Qgcm9vdF9wbHVzX3NpemUgOiBwdWJsaWMgc2l6ZV90
cmFpdHMKLSAgIHsKLSAgICAgIGhlYWRlcl9ob2xkZXJfdHlwZSBtX2hlYWRlcjsKLSAgIH07Ci0K
LSAgIHN0cnVjdCBkYXRhX3QgOiBwdWJsaWMgdmFsdWVfdHJhaXRzCi0gICB7Ci0gICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGxpc3RfaW1wbDo6dmFsdWVfdHJhaXRzIHZhbHVlX3RyYWl0czsKLSAgICAg
IGV4cGxpY2l0IGRhdGFfdChjb25zdCB2YWx1ZV90cmFpdHMgJnZhbF90cmFpdHMpCi0gICAgICAg
ICA6ICB2YWx1ZV90cmFpdHModmFsX3RyYWl0cykKLSAgICAgIHt9Ci0KLSAgICAgIHJvb3RfcGx1
c19zaXplIHJvb3RfcGx1c19zaXplXzsKLSAgIH0gZGF0YV87Ci0KLSAgIHNpemVfdHJhaXRzICZw
cml2X3NpemVfdHJhaXRzKCkKLSAgIHsgIHJldHVybiBkYXRhXy5yb290X3BsdXNfc2l6ZV87ICB9
Ci0KLSAgIGNvbnN0IHNpemVfdHJhaXRzICZwcml2X3NpemVfdHJhaXRzKCkgY29uc3QKLSAgIHsg
IHJldHVybiBkYXRhXy5yb290X3BsdXNfc2l6ZV87ICB9Ci0KLSAgIGNvbnN0IHZhbHVlX3RyYWl0
cyAmcHJpdl92YWx1ZV90cmFpdHMoKSBjb25zdAotICAgeyAgcmV0dXJuIGRhdGFfOyAgfQotCi0g
ICB2YWx1ZV90cmFpdHMgJnByaXZfdmFsdWVfdHJhaXRzKCkKLSAgIHsgIHJldHVybiBkYXRhXzsg
IH0KLQotICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6aW50cnVzaXZlOjp2YWx1ZV90cmFpdHNf
cG9pbnRlcnMKLSAgICAgIDxWYWx1ZVRyYWl0cz46OmNvbnN0X3ZhbHVlX3RyYWl0c19wdHIgY29u
c3RfdmFsdWVfdHJhaXRzX3B0cjsKLQotICAgY29uc3RfdmFsdWVfdHJhaXRzX3B0ciBwcml2X3Zh
bHVlX3RyYWl0c19wdHIoKSBjb25zdAotICAgeyAgcmV0dXJuIHBvaW50ZXJfdHJhaXRzPGNvbnN0
X3ZhbHVlX3RyYWl0c19wdHI+Ojpwb2ludGVyX3RvKHRoaXMtPnByaXZfdmFsdWVfdHJhaXRzKCkp
OyAgfQotCi0gICAvLy8gQGVuZGNvbmQKLQotICAgcHVibGljOgotCi0gICAvLyEgPGI+RWZmZWN0
czwvYj46IGNvbnN0cnVjdHMgYW4gZW1wdHkgbGlzdC4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBs
ZXhpdHk8L2I+OiBDb25zdGFudAotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogSWYgdmFs
dWVfdHJhaXRzOjpub2RlX3RyYWl0czo6bm9kZQotICAgLy8hICAgY29uc3RydWN0b3IgdGhyb3dz
ICh0aGlzIGRvZXMgbm90IGhhcHBlbiB3aXRoIHByZWRlZmluZWQgQm9vc3QuSW50cnVzaXZlIGhv
b2tzKS4KLSAgIGxpc3RfaW1wbCgpCi0gICAgICA6ICBkYXRhXyh2YWx1ZV90cmFpdHMoKSkKLSAg
IHsKLSAgICAgIHRoaXMtPnByaXZfc2l6ZV90cmFpdHMoKS5zZXRfc2l6ZShzaXplX3R5cGUoMCkp
OwotICAgICAgbm9kZV9hbGdvcml0aG1zOjppbml0X2hlYWRlcih0aGlzLT5nZXRfcm9vdF9ub2Rl
KCkpOwotICAgfQotCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IGNvbnN0cnVjdHMgYW4gZW1wdHkg
bGlzdC4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudAotICAgLy8h
Ci0gICAvLyEgPGI+VGhyb3dzPC9iPjogSWYgdmFsdWVfdHJhaXRzOjpub2RlX3RyYWl0czo6bm9k
ZQotICAgLy8hICAgY29uc3RydWN0b3IgdGhyb3dzICh0aGlzIGRvZXMgbm90IGhhcHBlbiB3aXRo
IHByZWRlZmluZWQgQm9vc3QuSW50cnVzaXZlIGhvb2tzKS4KLSAgIGV4cGxpY2l0IGxpc3RfaW1w
bChjb25zdCB2YWx1ZV90cmFpdHMgJnZfdHJhaXRzKQotICAgICAgOiAgZGF0YV8odl90cmFpdHMp
Ci0gICB7Ci0gICAgICB0aGlzLT5wcml2X3NpemVfdHJhaXRzKCkuc2V0X3NpemUoc2l6ZV90eXBl
KDApKTsKLSAgICAgIG5vZGVfYWxnb3JpdGhtczo6aW5pdF9oZWFkZXIodGhpcy0+Z2V0X3Jvb3Rf
bm9kZSgpKTsKLSAgIH0KLQotICAgLy8hIDxiPlJlcXVpcmVzPC9iPjogRGVyZWZlcmVuY2luZyBp
dGVyYXRvciBtdXN0IHlpZWxkIGFuIGx2YWx1ZSBvZiB0eXBlIHZhbHVlX3R5cGUuCi0gICAvLyEK
LSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogQ29uc3RydWN0cyBhIGxpc3QgZXF1YWwgdG8gdGhlIHJh
bmdlIFtmaXJzdCxsYXN0KS4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBMaW5l
YXIgaW4gZGlzdGFuY2UoYiwgZSkuIE5vIGNvcHkgY29uc3RydWN0b3JzIGFyZSBjYWxsZWQuCi0g
ICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBJZiB2YWx1ZV90cmFpdHM6Om5vZGVfdHJhaXRz
Ojpub2RlCi0gICAvLyEgICBjb25zdHJ1Y3RvciB0aHJvd3MgKHRoaXMgZG9lcyBub3QgaGFwcGVu
IHdpdGggcHJlZGVmaW5lZCBCb29zdC5JbnRydXNpdmUgaG9va3MpLgotICAgdGVtcGxhdGU8Y2xh
c3MgSXRlcmF0b3I+Ci0gICBsaXN0X2ltcGwoSXRlcmF0b3IgYiwgSXRlcmF0b3IgZSwgY29uc3Qg
dmFsdWVfdHJhaXRzICZ2X3RyYWl0cyA9IHZhbHVlX3RyYWl0cygpKQotICAgICAgOiAgZGF0YV8o
dl90cmFpdHMpCi0gICB7Ci0gICAgICAvL25vdGhyb3csIG5vIG5lZWQgdG8gcm9sbGJhY2sgdG8g
cmVsZWFzZSBlbGVtZW50cyBvbiBleGNlcHRpb24KLSAgICAgIHRoaXMtPnByaXZfc2l6ZV90cmFp
dHMoKS5zZXRfc2l6ZShzaXplX3R5cGUoMCkpOwotICAgICAgbm9kZV9hbGdvcml0aG1zOjppbml0
X2hlYWRlcih0aGlzLT5nZXRfcm9vdF9ub2RlKCkpOwotICAgICAgLy9ub3Rocm93LCBubyBuZWVk
IHRvIHJvbGxiYWNrIHRvIHJlbGVhc2UgZWxlbWVudHMgb24gZXhjZXB0aW9uCi0gICAgICB0aGlz
LT5pbnNlcnQodGhpcy0+Y2VuZCgpLCBiLCBlKTsKLSAgIH0KLQotICAgLy8hIDxiPkVmZmVjdHM8
L2I+OiB0by1kbwotICAgLy8hCi0gICBsaXN0X2ltcGwoQk9PU1RfUlZfUkVGKGxpc3RfaW1wbCkg
eCkKLSAgICAgIDogZGF0YV8oOjpib29zdDo6bW92ZSh4LnByaXZfdmFsdWVfdHJhaXRzKCkpKQot
ICAgewotICAgICAgdGhpcy0+cHJpdl9zaXplX3RyYWl0cygpLnNldF9zaXplKHNpemVfdHlwZSgw
KSk7Ci0gICAgICBub2RlX2FsZ29yaXRobXM6OmluaXRfaGVhZGVyKHRoaXMtPmdldF9yb290X25v
ZGUoKSk7Ci0gICAgICAvL25vdGhyb3csIG5vIG5lZWQgdG8gcm9sbGJhY2sgdG8gcmVsZWFzZSBl
bGVtZW50cyBvbiBleGNlcHRpb24KLSAgICAgIHRoaXMtPnN3YXAoeCk7Ci0gICB9Ci0KLSAgIC8v
ISA8Yj5FZmZlY3RzPC9iPjogdG8tZG8KLSAgIC8vIQotICAgbGlzdF9pbXBsJiBvcGVyYXRvcj0o
Qk9PU1RfUlZfUkVGKGxpc3RfaW1wbCkgeCkKLSAgIHsgIHRoaXMtPnN3YXAoeCk7IHJldHVybiAq
dGhpczsgIH0KLQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBJZiBpdCdzIG5vdCBhIHNhZmUtbW9k
ZSBvciBhbiBhdXRvLXVubGluayB2YWx1ZV90eXBlCi0gICAvLyEgICB0aGUgZGVzdHJ1Y3RvciBk
b2VzIG5vdGhpbmcKLSAgIC8vISAgIChpZS4gbm8gY29kZSBpcyBnZW5lcmF0ZWQpLiBPdGhlcndp
c2UgaXQgZGV0YWNoZXMgYWxsIGVsZW1lbnRzIGZyb20gdGhpcy4KLSAgIC8vISAgIEluIHRoaXMg
Y2FzZSB0aGUgb2JqZWN0cyBpbiB0aGUgbGlzdCBhcmUgbm90IGRlbGV0ZWQgKGkuZS4gbm8gZGVz
dHJ1Y3RvcnMKLSAgIC8vISAgIGFyZSBjYWxsZWQpLCBidXQgdGhlIGhvb2tzIGFjY29yZGluZyB0
byB0aGUgVmFsdWVUcmFpdHMgdGVtcGxhdGUgcGFyYW1ldGVyCi0gICAvLyEgICBhcmUgc2V0IHRv
IHRoZWlyIGRlZmF1bHQgdmFsdWUuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4aXR5PC9iPjog
TGluZWFyIHRvIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QsIGlmCi0gICAvLyEg
ICBpdCdzIGEgc2FmZS1tb2RlIG9yIGF1dG8tdW5saW5rIHZhbHVlIC4gT3RoZXJ3aXNlIGNvbnN0
YW50LgotICAgfmxpc3RfaW1wbCgpCi0gICB7Ci0gICAgICBpZihpc19zYWZlX2F1dG91bmxpbms8
VmFsdWVUcmFpdHM6OmxpbmtfbW9kZT46OnZhbHVlKXsKLSAgICAgICAgIHRoaXMtPmNsZWFyKCk7
Ci0gICAgICAgICBub2RlX2FsZ29yaXRobXM6OmluaXQodGhpcy0+Z2V0X3Jvb3Rfbm9kZSgpKTsK
LSAgICAgIH0KLSAgIH0KLQotICAgLy8hIDxiPlJlcXVpcmVzPC9iPjogdmFsdWUgbXVzdCBiZSBh
biBsdmFsdWUuCi0gICAvLyEKLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogSW5zZXJ0cyB0aGUgdmFs
dWUgaW4gdGhlIGJhY2sgb2YgdGhlIGxpc3QuCi0gICAvLyEgICBObyBjb3B5IGNvbnN0cnVjdG9y
cyBhcmUgY2FsbGVkLgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAg
IC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudC4KLSAgIC8vIQotICAgLy8h
IDxiPk5vdGU8L2I+OiBEb2VzIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIGl0ZXJhdG9ycyBh
bmQgcmVmZXJlbmNlcy4KLSAgIHZvaWQgcHVzaF9iYWNrKHJlZmVyZW5jZSB2YWx1ZSkKLSAgIHsK
LSAgICAgIG5vZGVfcHRyIHRvX2luc2VydCA9IHByaXZfdmFsdWVfdHJhaXRzKCkudG9fbm9kZV9w
dHIodmFsdWUpOwotICAgICAgQk9PU1RfSU5UUlVTSVZFX1NBRkVfSE9PS19ERUZBVUxUX0FTU0VS
VCghc2FmZW1vZGVfb3JfYXV0b3VubGluayB8fCBub2RlX2FsZ29yaXRobXM6OmluaXRlZCh0b19p
bnNlcnQpKTsKLSAgICAgIG5vZGVfYWxnb3JpdGhtczo6bGlua19iZWZvcmUodGhpcy0+Z2V0X3Jv
b3Rfbm9kZSgpLCB0b19pbnNlcnQpOwotICAgICAgdGhpcy0+cHJpdl9zaXplX3RyYWl0cygpLmlu
Y3JlbWVudCgpOwotICAgfQotCi0gICAvLyEgPGI+UmVxdWlyZXM8L2I+OiB2YWx1ZSBtdXN0IGJl
IGFuIGx2YWx1ZS4KLSAgIC8vIQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBJbnNlcnRzIHRoZSB2
YWx1ZSBpbiB0aGUgZnJvbnQgb2YgdGhlIGxpc3QuCi0gICAvLyEgICBObyBjb3B5IGNvbnN0cnVj
dG9ycyBhcmUgY2FsbGVkLgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4K
LSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudC4KLSAgIC8vIQotICAg
Ly8hIDxiPk5vdGU8L2I+OiBEb2VzIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIGl0ZXJhdG9y
cyBhbmQgcmVmZXJlbmNlcy4KLSAgIHZvaWQgcHVzaF9mcm9udChyZWZlcmVuY2UgdmFsdWUpCi0g
ICB7Ci0gICAgICBub2RlX3B0ciB0b19pbnNlcnQgPSBwcml2X3ZhbHVlX3RyYWl0cygpLnRvX25v
ZGVfcHRyKHZhbHVlKTsKLSAgICAgIEJPT1NUX0lOVFJVU0lWRV9TQUZFX0hPT0tfREVGQVVMVF9B
U1NFUlQoIXNhZmVtb2RlX29yX2F1dG91bmxpbmsgfHwgbm9kZV9hbGdvcml0aG1zOjppbml0ZWQo
dG9faW5zZXJ0KSk7Ci0gICAgICBub2RlX2FsZ29yaXRobXM6OmxpbmtfYmVmb3JlKG5vZGVfdHJh
aXRzOjpnZXRfbmV4dCh0aGlzLT5nZXRfcm9vdF9ub2RlKCkpLCB0b19pbnNlcnQpOwotICAgICAg
dGhpcy0+cHJpdl9zaXplX3RyYWl0cygpLmluY3JlbWVudCgpOwotICAgfQotCi0gICAvLyEgPGI+
RWZmZWN0czwvYj46IEVyYXNlcyB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBsaXN0LgotICAgLy8h
ICAgTm8gZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZC4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwv
Yj46IE5vdGhpbmcuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4aXR5PC9iPjogQ29uc3RhbnQu
Ci0gICAvLyEKLSAgIC8vISA8Yj5Ob3RlPC9iPjogSW52YWxpZGF0ZXMgdGhlIGl0ZXJhdG9ycyAo
YnV0IG5vdCB0aGUgcmVmZXJlbmNlcykgdG8gdGhlIGVyYXNlZCBlbGVtZW50LgotICAgdm9pZCBw
b3BfYmFjaygpCi0gICB7ICByZXR1cm4gdGhpcy0+cG9wX2JhY2tfYW5kX2Rpc3Bvc2UoZGV0YWls
OjpudWxsX2Rpc3Bvc2VyKCkpOyAgIH0KLQotICAgLy8hIDxiPlJlcXVpcmVzPC9iPjogRGlzcG9z
ZXI6Om9wZXJhdG9yKCkocG9pbnRlcikgc2hvdWxkbid0IHRocm93LgotICAgLy8hCi0gICAvLyEg
PGI+RWZmZWN0czwvYj46IEVyYXNlcyB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBsaXN0LgotICAg
Ly8hICAgTm8gZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZC4KLSAgIC8vISAgIERpc3Bvc2VyOjpvcGVy
YXRvcigpKHBvaW50ZXIpIGlzIGNhbGxlZCBmb3IgdGhlIHJlbW92ZWQgZWxlbWVudC4KLSAgIC8v
IQotICAgLy8hIDxiPlRocm93czwvYj46IE5vdGhpbmcuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21w
bGV4aXR5PC9iPjogQ29uc3RhbnQuCi0gICAvLyEKLSAgIC8vISA8Yj5Ob3RlPC9iPjogSW52YWxp
ZGF0ZXMgdGhlIGl0ZXJhdG9ycyB0byB0aGUgZXJhc2VkIGVsZW1lbnQuCi0gICB0ZW1wbGF0ZTxj
bGFzcyBEaXNwb3Nlcj4KLSAgIHZvaWQgcG9wX2JhY2tfYW5kX2Rpc3Bvc2UoRGlzcG9zZXIgZGlz
cG9zZXIpCi0gICB7Ci0gICAgICBub2RlX3B0ciB0b19lcmFzZSA9IG5vZGVfdHJhaXRzOjpnZXRf
cHJldmlvdXModGhpcy0+Z2V0X3Jvb3Rfbm9kZSgpKTsKLSAgICAgIG5vZGVfYWxnb3JpdGhtczo6
dW5saW5rKHRvX2VyYXNlKTsKLSAgICAgIHRoaXMtPnByaXZfc2l6ZV90cmFpdHMoKS5kZWNyZW1l
bnQoKTsKLSAgICAgIGlmKHNhZmVtb2RlX29yX2F1dG91bmxpbmspCi0gICAgICAgICBub2RlX2Fs
Z29yaXRobXM6OmluaXQodG9fZXJhc2UpOwotICAgICAgZGlzcG9zZXIocHJpdl92YWx1ZV90cmFp
dHMoKS50b192YWx1ZV9wdHIodG9fZXJhc2UpKTsKLSAgIH0KLQotICAgLy8hIDxiPkVmZmVjdHM8
L2I+OiBFcmFzZXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGxpc3QuCi0gICAvLyEgICBObyBk
ZXN0cnVjdG9ycyBhcmUgY2FsbGVkLgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90
aGluZy4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudC4KLSAgIC8v
IQotICAgLy8hIDxiPk5vdGU8L2I+OiBJbnZhbGlkYXRlcyB0aGUgaXRlcmF0b3JzIChidXQgbm90
IHRoZSByZWZlcmVuY2VzKSB0byB0aGUgZXJhc2VkIGVsZW1lbnQuCi0gICB2b2lkIHBvcF9mcm9u
dCgpCi0gICB7ICByZXR1cm4gdGhpcy0+cG9wX2Zyb250X2FuZF9kaXNwb3NlKGRldGFpbDo6bnVs
bF9kaXNwb3NlcigpKTsgICB9Ci0KLSAgIC8vISA8Yj5SZXF1aXJlczwvYj46IERpc3Bvc2VyOjpv
cGVyYXRvcigpKHBvaW50ZXIpIHNob3VsZG4ndCB0aHJvdy4KLSAgIC8vIQotICAgLy8hIDxiPkVm
ZmVjdHM8L2I+OiBFcmFzZXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGxpc3QuCi0gICAvLyEg
ICBObyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkLgotICAgLy8hICAgRGlzcG9zZXI6Om9wZXJhdG9y
KCkocG9pbnRlcikgaXMgY2FsbGVkIGZvciB0aGUgcmVtb3ZlZCBlbGVtZW50LgotICAgLy8hCi0g
ICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhp
dHk8L2I+OiBDb25zdGFudC4KLSAgIC8vIQotICAgLy8hIDxiPk5vdGU8L2I+OiBJbnZhbGlkYXRl
cyB0aGUgaXRlcmF0b3JzIHRvIHRoZSBlcmFzZWQgZWxlbWVudC4KLSAgIHRlbXBsYXRlPGNsYXNz
IERpc3Bvc2VyPgotICAgdm9pZCBwb3BfZnJvbnRfYW5kX2Rpc3Bvc2UoRGlzcG9zZXIgZGlzcG9z
ZXIpCi0gICB7Ci0gICAgICBub2RlX3B0ciB0b19lcmFzZSA9IG5vZGVfdHJhaXRzOjpnZXRfbmV4
dCh0aGlzLT5nZXRfcm9vdF9ub2RlKCkpOwotICAgICAgbm9kZV9hbGdvcml0aG1zOjp1bmxpbmso
dG9fZXJhc2UpOwotICAgICAgdGhpcy0+cHJpdl9zaXplX3RyYWl0cygpLmRlY3JlbWVudCgpOwot
ICAgICAgaWYoc2FmZW1vZGVfb3JfYXV0b3VubGluaykKLSAgICAgICAgIG5vZGVfYWxnb3JpdGht
czo6aW5pdCh0b19lcmFzZSk7Ci0gICAgICBkaXNwb3Nlcihwcml2X3ZhbHVlX3RyYWl0cygpLnRv
X3ZhbHVlX3B0cih0b19lcmFzZSkpOwotICAgfQotCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IFJl
dHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGxpc3QuCi0gICAv
LyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAgLy8hCi0gICAvLyEgPGI+Q29t
cGxleGl0eTwvYj46IENvbnN0YW50LgotICAgcmVmZXJlbmNlIGZyb250KCkKLSAgIHsgcmV0dXJu
ICpwcml2X3ZhbHVlX3RyYWl0cygpLnRvX3ZhbHVlX3B0cihub2RlX3RyYWl0czo6Z2V0X25leHQo
dGhpcy0+Z2V0X3Jvb3Rfbm9kZSgpKSk7IH0KLQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBSZXR1
cm5zIGEgY29uc3RfcmVmZXJlbmNlIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBsaXN0Lgot
ICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8vIQotICAgLy8hIDxi
PkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudC4KLSAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNv
bnN0Ci0gICB7IHJldHVybiAqcHJpdl92YWx1ZV90cmFpdHMoKS50b192YWx1ZV9wdHIobm9kZV90
cmFpdHM6OmdldF9uZXh0KHRoaXMtPmdldF9yb290X25vZGUoKSkpOyB9Ci0KLSAgIC8vISA8Yj5F
ZmZlY3RzPC9iPjogUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgbGFzdCBlbGVtZW50IG9mIHRo
ZSBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8vIQot
ICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudC4KLSAgIHJlZmVyZW5jZSBiYWNrKCkK
LSAgIHsgcmV0dXJuICpwcml2X3ZhbHVlX3RyYWl0cygpLnRvX3ZhbHVlX3B0cihub2RlX3RyYWl0
czo6Z2V0X3ByZXZpb3VzKHRoaXMtPmdldF9yb290X25vZGUoKSkpOyB9Ci0KLSAgIC8vISA8Yj5F
ZmZlY3RzPC9iPjogUmV0dXJucyBhIGNvbnN0X3JlZmVyZW5jZSB0byB0aGUgbGFzdCBlbGVtZW50
IG9mIHRoZSBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAg
IC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudC4KLSAgIGNvbnN0X3JlZmVy
ZW5jZSBiYWNrKCkgY29uc3QKLSAgIHsgcmV0dXJuICpwcml2X3ZhbHVlX3RyYWl0cygpLnRvX3Zh
bHVlX3B0cihkZXRhaWw6OnVuY2FzdChub2RlX3RyYWl0czo6Z2V0X3ByZXZpb3VzKHRoaXMtPmdl
dF9yb290X25vZGUoKSkpKTsgfQotCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IFJldHVybnMgYW4g
aXRlcmF0b3IgdG8gdGhlIGZpcnN0IGVsZW1lbnQgY29udGFpbmVkIGluIHRoZSBsaXN0LgotICAg
Ly8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8vIQotICAgLy8hIDxiPkNv
bXBsZXhpdHk8L2I+OiBDb25zdGFudC4KLSAgIGl0ZXJhdG9yIGJlZ2luKCkKLSAgIHsgcmV0dXJu
IGl0ZXJhdG9yKG5vZGVfdHJhaXRzOjpnZXRfbmV4dCh0aGlzLT5nZXRfcm9vdF9ub2RlKCkpLCB0
aGlzLT5wcml2X3ZhbHVlX3RyYWl0c19wdHIoKSk7IH0KLQotICAgLy8hIDxiPkVmZmVjdHM8L2I+
OiBSZXR1cm5zIGEgY29uc3RfaXRlcmF0b3IgdG8gdGhlIGZpcnN0IGVsZW1lbnQgY29udGFpbmVk
IGluIHRoZSBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAg
IC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudC4KLSAgIGNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QKLSAgIHsgcmV0dXJuIHRoaXMtPmNiZWdpbigpOyB9Ci0KLSAgIC8v
ISA8Yj5FZmZlY3RzPC9iPjogUmV0dXJucyBhIGNvbnN0X2l0ZXJhdG9yIHRvIHRoZSBmaXJzdCBl
bGVtZW50IGNvbnRhaW5lZCBpbiB0aGUgbGlzdC4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwv
Yj46IE5vdGhpbmcuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4aXR5PC9iPjogQ29uc3RhbnQu
Ci0gICBjb25zdF9pdGVyYXRvciBjYmVnaW4oKSBjb25zdAotICAgeyByZXR1cm4gY29uc3RfaXRl
cmF0b3Iobm9kZV90cmFpdHM6OmdldF9uZXh0KHRoaXMtPmdldF9yb290X25vZGUoKSksIHRoaXMt
PnByaXZfdmFsdWVfdHJhaXRzX3B0cigpKTsgfQotCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IFJl
dHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KLSAgIC8vIQotICAgLy8h
IDxiPlRocm93czwvYj46IE5vdGhpbmcuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4aXR5PC9i
PjogQ29uc3RhbnQuCi0gICBpdGVyYXRvciBlbmQoKQotICAgeyByZXR1cm4gaXRlcmF0b3IodGhp
cy0+Z2V0X3Jvb3Rfbm9kZSgpLCB0aGlzLT5wcml2X3ZhbHVlX3RyYWl0c19wdHIoKSk7IH0KLQot
ICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBSZXR1cm5zIGEgY29uc3RfaXRlcmF0b3IgdG8gdGhlIGVu
ZCBvZiB0aGUgbGlzdC4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwvYj46IE5vdGhpbmcuCi0g
ICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4aXR5PC9iPjogQ29uc3RhbnQuCi0gICBjb25zdF9pdGVy
YXRvciBlbmQoKSBjb25zdAotICAgeyByZXR1cm4gdGhpcy0+Y2VuZCgpOyB9Ci0KLSAgIC8vISA8
Yj5FZmZlY3RzPC9iPjogUmV0dXJucyBhIGNvbnN0YW50IGl0ZXJhdG9yIHRvIHRoZSBlbmQgb2Yg
dGhlIGxpc3QuCi0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAgLy8h
Ci0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IENvbnN0YW50LgotICAgY29uc3RfaXRlcmF0b3Ig
Y2VuZCgpIGNvbnN0Ci0gICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihkZXRhaWw6OnVuY2FzdCh0
aGlzLT5nZXRfcm9vdF9ub2RlKCkpLCB0aGlzLT5wcml2X3ZhbHVlX3RyYWl0c19wdHIoKSk7IH0K
LQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBSZXR1cm5zIGEgcmV2ZXJzZV9pdGVyYXRvciBwb2lu
dGluZyB0byB0aGUgYmVnaW5uaW5nCi0gICAvLyEgb2YgdGhlIHJldmVyc2VkIGxpc3QuCi0gICAv
LyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAgLy8hCi0gICAvLyEgPGI+Q29t
cGxleGl0eTwvYj46IENvbnN0YW50LgotICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQotICAg
eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KLQotICAgLy8hIDxiPkVm
ZmVjdHM8L2I+OiBSZXR1cm5zIGEgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBwb2ludGluZyB0byB0
aGUgYmVnaW5uaW5nCi0gICAvLyEgb2YgdGhlIHJldmVyc2VkIGxpc3QuCi0gICAvLyEKLSAgIC8v
ISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwv
Yj46IENvbnN0YW50LgotICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAot
ICAgeyByZXR1cm4gdGhpcy0+Y3JiZWdpbigpOyB9Ci0KLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjog
UmV0dXJucyBhIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGJlZ2lubmlu
ZwotICAgLy8hIG9mIHRoZSByZXZlcnNlZCBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dz
PC9iPjogTm90aGluZy4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFu
dC4KLSAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY3JiZWdpbigpIGNvbnN0Ci0gICB7IHJldHVy
biBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQotCi0gICAvLyEgPGI+RWZmZWN0czwv
Yj46IFJldHVybnMgYSByZXZlcnNlX2l0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQKLSAgIC8v
ISBvZiB0aGUgcmV2ZXJzZWQgbGlzdC4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwvYj46IE5v
dGhpbmcuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4aXR5PC9iPjogQ29uc3RhbnQuCi0gICBy
ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQotICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdp
bigpKTsgfQotCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IFJldHVybnMgYSBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQKLSAgIC8vISBvZiB0aGUgcmV2ZXJzZWQgbGlz
dC4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwvYj46IE5vdGhpbmcuCi0gICAvLyEKLSAgIC8v
ISA8Yj5Db21wbGV4aXR5PC9iPjogQ29uc3RhbnQuCi0gICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
IHJlbmQoKSBjb25zdAotICAgeyByZXR1cm4gdGhpcy0+Y3JlbmQoKTsgfQotCi0gICAvLyEgPGI+
RWZmZWN0czwvYj46IFJldHVybnMgYSBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHBvaW50aW5nIHRv
IHRoZSBlbmQKLSAgIC8vISBvZiB0aGUgcmV2ZXJzZWQgbGlzdC4KLSAgIC8vIQotICAgLy8hIDxi
PlRocm93czwvYj46IE5vdGhpbmcuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4aXR5PC9iPjog
Q29uc3RhbnQuCi0gICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNyZW5kKCkgY29uc3QKLSAgIHsg
cmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KLQotICAgLy8h
IDxiPlByZWNvbmRpdGlvbjwvYj46IGVuZF9pdGVyYXRvciBtdXN0IGJlIGEgdmFsaWQgZW5kIGl0
ZXJhdG9yCi0gICAvLyEgICBvZiBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0czwvYj46
IFJldHVybnMgYSBjb25zdCByZWZlcmVuY2UgdG8gdGhlIGxpc3QgYXNzb2NpYXRlZCB0byB0aGUg
ZW5kIGl0ZXJhdG9yCi0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAg
Ly8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IENvbnN0YW50LgotICAgc3RhdGljIGxpc3Rf
aW1wbCAmY29udGFpbmVyX2Zyb21fZW5kX2l0ZXJhdG9yKGl0ZXJhdG9yIGVuZF9pdGVyYXRvcikK
LSAgIHsgIHJldHVybiBsaXN0X2ltcGw6OnByaXZfY29udGFpbmVyX2Zyb21fZW5kX2l0ZXJhdG9y
KGVuZF9pdGVyYXRvcik7ICAgfQotCi0gICAvLyEgPGI+UHJlY29uZGl0aW9uPC9iPjogZW5kX2l0
ZXJhdG9yIG11c3QgYmUgYSB2YWxpZCBlbmQgY29uc3RfaXRlcmF0b3IKLSAgIC8vISAgIG9mIGxp
c3QuCi0gICAvLyEKLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogUmV0dXJucyBhIGNvbnN0IHJlZmVy
ZW5jZSB0byB0aGUgbGlzdCBhc3NvY2lhdGVkIHRvIHRoZSBlbmQgaXRlcmF0b3IKLSAgIC8vIQot
ICAgLy8hIDxiPlRocm93czwvYj46IE5vdGhpbmcuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4
aXR5PC9iPjogQ29uc3RhbnQuCi0gICBzdGF0aWMgY29uc3QgbGlzdF9pbXBsICZjb250YWluZXJf
ZnJvbV9lbmRfaXRlcmF0b3IoY29uc3RfaXRlcmF0b3IgZW5kX2l0ZXJhdG9yKQotICAgeyAgcmV0
dXJuIGxpc3RfaW1wbDo6cHJpdl9jb250YWluZXJfZnJvbV9lbmRfaXRlcmF0b3IoZW5kX2l0ZXJh
dG9yKTsgICB9Ci0KLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogUmV0dXJucyB0aGUgbnVtYmVyIG9m
IHRoZSBlbGVtZW50cyBjb250YWluZWQgaW4gdGhlIGxpc3QuCi0gICAvLyEKLSAgIC8vISA8Yj5U
aHJvd3M8L2I+OiBOb3RoaW5nLgotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IExp
bmVhciB0byB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgbGlzdC4KLSAg
IC8vISAgIGlmIGNvbnN0YW50LXRpbWUgc2l6ZSBvcHRpb24gaXMgZGlzYWJsZWQuIENvbnN0YW50
IHRpbWUgb3RoZXJ3aXNlLgotICAgLy8hCi0gICAvLyEgPGI+Tm90ZTwvYj46IERvZXMgbm90IGFm
ZmVjdCB0aGUgdmFsaWRpdHkgb2YgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzLgotICAgc2l6ZV90
eXBlIHNpemUoKSBjb25zdAotICAgewotICAgICAgaWYoY29uc3RhbnRfdGltZV9zaXplKQotICAg
ICAgICAgcmV0dXJuIHRoaXMtPnByaXZfc2l6ZV90cmFpdHMoKS5nZXRfc2l6ZSgpOwotICAgICAg
ZWxzZQotICAgICAgICAgcmV0dXJuIG5vZGVfYWxnb3JpdGhtczo6Y291bnQodGhpcy0+Z2V0X3Jv
b3Rfbm9kZSgpKSAtIDE7Ci0gICB9Ci0KLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogUmV0dXJucyB0
cnVlIGlmIHRoZSBsaXN0IGNvbnRhaW5zIG5vIGVsZW1lbnRzLgotICAgLy8hCi0gICAvLyEgPGI+
VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBD
b25zdGFudC4KLSAgIC8vIQotICAgLy8hIDxiPk5vdGU8L2I+OiBEb2VzIG5vdCBhZmZlY3QgdGhl
IHZhbGlkaXR5IG9mIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcy4KLSAgIGJvb2wgZW1wdHkoKSBj
b25zdAotICAgeyAgcmV0dXJuIG5vZGVfYWxnb3JpdGhtczo6dW5pcXVlKHRoaXMtPmdldF9yb290
X25vZGUoKSk7ICAgfQotCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IFN3YXBzIHRoZSBlbGVtZW50
cyBvZiB4IGFuZCAqdGhpcy4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwvYj46IE5vdGhpbmcu
Ci0gICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4aXR5PC9iPjogQ29uc3RhbnQuCi0gICAvLyEKLSAg
IC8vISA8Yj5Ob3RlPC9iPjogRG9lcyBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiBpdGVyYXRv
cnMgYW5kIHJlZmVyZW5jZXMuCi0gICB2b2lkIHN3YXAobGlzdF9pbXBsJiBvdGhlcikKLSAgIHsK
LSAgICAgIG5vZGVfYWxnb3JpdGhtczo6c3dhcF9ub2Rlcyh0aGlzLT5nZXRfcm9vdF9ub2RlKCks
IG90aGVyLmdldF9yb290X25vZGUoKSk7Ci0gICAgICB0aGlzLT5wcml2X3NpemVfdHJhaXRzKCku
c3dhcChvdGhlci5wcml2X3NpemVfdHJhaXRzKCkpOwotICAgfQotCi0gICAvLyEgPGI+RWZmZWN0
czwvYj46IE1vdmVzIGJhY2t3YXJkcyBhbGwgdGhlIGVsZW1lbnRzLCBzbyB0aGF0IHRoZSBmaXJz
dAotICAgLy8hICAgZWxlbWVudCBiZWNvbWVzIHRoZSBzZWNvbmQsIHRoZSBzZWNvbmQgYmVjb21l
cyB0aGUgdGhpcmQuLi4KLSAgIC8vISAgIHRoZSBsYXN0IGVsZW1lbnQgYmVjb21lcyB0aGUgZmly
c3Qgb25lLgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8vIQot
ICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBMaW5lYXIgdG8gdGhlIG51bWJlciBvZiBzaGlmdHMu
Ci0gICAvLyEKLSAgIC8vISA8Yj5Ob3RlPC9iPjogRG9lcyBub3QgYWZmZWN0IHRoZSB2YWxpZGl0
eSBvZiBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMuCi0gICB2b2lkIHNoaWZ0X2JhY2t3YXJkcyhz
aXplX3R5cGUgbiA9IDEpCi0gICB7ICBub2RlX2FsZ29yaXRobXM6Om1vdmVfZm9yd2FyZCh0aGlz
LT5nZXRfcm9vdF9ub2RlKCksIG4pOyAgfQotCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IE1vdmVz
IGZvcndhcmQgYWxsIHRoZSBlbGVtZW50cywgc28gdGhhdCB0aGUgc2Vjb25kCi0gICAvLyEgICBl
bGVtZW50IGJlY29tZXMgdGhlIGZpcnN0LCB0aGUgdGhpcmQgYmVjb21lcyB0aGUgc2Vjb25kLi4u
Ci0gICAvLyEgICB0aGUgZmlyc3QgZWxlbWVudCBiZWNvbWVzIHRoZSBsYXN0IG9uZS4KLSAgIC8v
IQotICAgLy8hIDxiPlRocm93czwvYj46IE5vdGhpbmcuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21w
bGV4aXR5PC9iPjogTGluZWFyIHRvIHRoZSBudW1iZXIgb2Ygc2hpZnRzLgotICAgLy8hCi0gICAv
LyEgPGI+Tm90ZTwvYj46IERvZXMgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgaXRlcmF0b3Jz
IGFuZCByZWZlcmVuY2VzLgotICAgdm9pZCBzaGlmdF9mb3J3YXJkKHNpemVfdHlwZSBuID0gMSkK
LSAgIHsgIG5vZGVfYWxnb3JpdGhtczo6bW92ZV9iYWNrd2FyZHModGhpcy0+Z2V0X3Jvb3Rfbm9k
ZSgpLCBuKTsgIH0KLQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBFcmFzZXMgdGhlIGVsZW1lbnQg
cG9pbnRlZCBieSBpIG9mIHRoZSBsaXN0LgotICAgLy8hICAgTm8gZGVzdHJ1Y3RvcnMgYXJlIGNh
bGxlZC4KLSAgIC8vIQotICAgLy8hIDxiPlJldHVybnM8L2I+OiB0aGUgZmlyc3QgZWxlbWVudCBy
ZW1haW5pbmcgYmV5b25kIHRoZSByZW1vdmVkIGVsZW1lbnQsCi0gICAvLyEgICBvciBlbmQoKSBp
ZiBubyBzdWNoIGVsZW1lbnQgZXhpc3RzLgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjog
Tm90aGluZy4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudC4KLSAg
IC8vIQotICAgLy8hIDxiPk5vdGU8L2I+OiBJbnZhbGlkYXRlcyB0aGUgaXRlcmF0b3JzIChidXQg
bm90IHRoZSByZWZlcmVuY2VzKSB0byB0aGUKLSAgIC8vISAgIGVyYXNlZCBlbGVtZW50LgotICAg
aXRlcmF0b3IgZXJhc2UoY29uc3RfaXRlcmF0b3IgaSkKLSAgIHsgIHJldHVybiB0aGlzLT5lcmFz
ZV9hbmRfZGlzcG9zZShpLCBkZXRhaWw6Om51bGxfZGlzcG9zZXIoKSk7ICB9Ci0KLSAgIC8vISA8
Yj5SZXF1aXJlczwvYj46IGIgYW5kIGUgbXVzdCBiZSB2YWxpZCBpdGVyYXRvcnMgdG8gZWxlbWVu
dHMgaW4gKnRoaXMuCi0gICAvLyEKLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogRXJhc2VzIHRoZSBl
bGVtZW50IHJhbmdlIHBvaW50ZWQgYnkgYiBhbmQgZQotICAgLy8hIE5vIGRlc3RydWN0b3JzIGFy
ZSBjYWxsZWQuCi0gICAvLyEKLSAgIC8vISA8Yj5SZXR1cm5zPC9iPjogdGhlIGZpcnN0IGVsZW1l
bnQgcmVtYWluaW5nIGJleW9uZCB0aGUgcmVtb3ZlZCBlbGVtZW50cywKLSAgIC8vISAgIG9yIGVu
ZCgpIGlmIG5vIHN1Y2ggZWxlbWVudCBleGlzdHMuCi0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8
L2I+OiBOb3RoaW5nLgotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IExpbmVhciB0
byB0aGUgbnVtYmVyIG9mIGVyYXNlZCBlbGVtZW50cyBpZiBpdCdzIGEgc2FmZS1tb2RlCi0gICAv
LyEgICBvciBhdXRvLXVubGluayB2YWx1ZSwgb3IgY29uc3RhbnQtdGltZSBzaXplIGlzIGVuYWJs
ZWQuIENvbnN0YW50LXRpbWUgb3RoZXJ3aXNlLgotICAgLy8hCi0gICAvLyEgPGI+Tm90ZTwvYj46
IEludmFsaWRhdGVzIHRoZSBpdGVyYXRvcnMgKGJ1dCBub3QgdGhlIHJlZmVyZW5jZXMpIHRvIHRo
ZQotICAgLy8hICAgZXJhc2VkIGVsZW1lbnRzLgotICAgaXRlcmF0b3IgZXJhc2UoY29uc3RfaXRl
cmF0b3IgYiwgY29uc3RfaXRlcmF0b3IgZSkKLSAgIHsKLSAgICAgIGlmKHNhZmVtb2RlX29yX2F1
dG91bmxpbmsgfHwgY29uc3RhbnRfdGltZV9zaXplKXsKLSAgICAgICAgIHJldHVybiB0aGlzLT5l
cmFzZV9hbmRfZGlzcG9zZShiLCBlLCBkZXRhaWw6Om51bGxfZGlzcG9zZXIoKSk7Ci0gICAgICB9
Ci0gICAgICBlbHNlewotICAgICAgICAgbm9kZV9hbGdvcml0aG1zOjp1bmxpbmsoYi5wb2ludGVk
X25vZGUoKSwgZS5wb2ludGVkX25vZGUoKSk7Ci0gICAgICAgICByZXR1cm4gZS51bmNvbnN0KCk7
Ci0gICAgICB9Ci0gICB9Ci0KLSAgIC8vISA8Yj5SZXF1aXJlczwvYj46IGIgYW5kIGUgbXVzdCBi
ZSB2YWxpZCBpdGVyYXRvcnMgdG8gZWxlbWVudHMgaW4gKnRoaXMuCi0gICAvLyEgICBuIG11c3Qg
YmUgZGlzdGFuY2UoYiwgZSkuCi0gICAvLyEKLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogRXJhc2Vz
IHRoZSBlbGVtZW50IHJhbmdlIHBvaW50ZWQgYnkgYiBhbmQgZQotICAgLy8hIE5vIGRlc3RydWN0
b3JzIGFyZSBjYWxsZWQuCi0gICAvLyEKLSAgIC8vISA8Yj5SZXR1cm5zPC9iPjogdGhlIGZpcnN0
IGVsZW1lbnQgcmVtYWluaW5nIGJleW9uZCB0aGUgcmVtb3ZlZCBlbGVtZW50cywKLSAgIC8vISAg
IG9yIGVuZCgpIGlmIG5vIHN1Y2ggZWxlbWVudCBleGlzdHMuCi0gICAvLyEKLSAgIC8vISA8Yj5U
aHJvd3M8L2I+OiBOb3RoaW5nLgotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IExp
bmVhciB0byB0aGUgbnVtYmVyIG9mIGVyYXNlZCBlbGVtZW50cyBpZiBpdCdzIGEgc2FmZS1tb2Rl
Ci0gICAvLyEgICBvciBhdXRvLXVubGluayB2YWx1ZSBpcyBlbmFibGVkLiBDb25zdGFudC10aW1l
IG90aGVyd2lzZS4KLSAgIC8vIQotICAgLy8hIDxiPk5vdGU8L2I+OiBJbnZhbGlkYXRlcyB0aGUg
aXRlcmF0b3JzIChidXQgbm90IHRoZSByZWZlcmVuY2VzKSB0byB0aGUKLSAgIC8vISAgIGVyYXNl
ZCBlbGVtZW50cy4KLSAgIGl0ZXJhdG9yIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIGIsIGNvbnN0X2l0
ZXJhdG9yIGUsIHNpemVfdHlwZSBuKQotICAgewotICAgICAgQk9PU1RfSU5UUlVTSVZFX0lOVkFS
SUFOVF9BU1NFUlQobm9kZV9hbGdvcml0aG1zOjpkaXN0YW5jZShiLnBvaW50ZWRfbm9kZSgpLCBl
LnBvaW50ZWRfbm9kZSgpKSA9PSBuKTsKLSAgICAgIGlmKHNhZmVtb2RlX29yX2F1dG91bmxpbmsg
fHwgY29uc3RhbnRfdGltZV9zaXplKXsKLSAgICAgICAgIHJldHVybiB0aGlzLT5lcmFzZV9hbmRf
ZGlzcG9zZShiLCBlLCBkZXRhaWw6Om51bGxfZGlzcG9zZXIoKSk7Ci0gICAgICB9Ci0gICAgICBl
bHNlewotICAgICAgICAgaWYoY29uc3RhbnRfdGltZV9zaXplKXsKLSAgICAgICAgICAgIHRoaXMt
PnByaXZfc2l6ZV90cmFpdHMoKS5kZWNyZWFzZShuKTsKLSAgICAgICAgIH0KLSAgICAgICAgIG5v
ZGVfYWxnb3JpdGhtczo6dW5saW5rKGIucG9pbnRlZF9ub2RlKCksIGUucG9pbnRlZF9ub2RlKCkp
OwotICAgICAgICAgcmV0dXJuIGUudW5jb25zdCgpOwotICAgICAgfQotICAgfQotCi0gICAvLyEg
PGI+UmVxdWlyZXM8L2I+OiBEaXNwb3Nlcjo6b3BlcmF0b3IoKShwb2ludGVyKSBzaG91bGRuJ3Qg
dGhyb3cuCi0gICAvLyEKLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogRXJhc2VzIHRoZSBlbGVtZW50
IHBvaW50ZWQgYnkgaSBvZiB0aGUgbGlzdC4KLSAgIC8vISAgIE5vIGRlc3RydWN0b3JzIGFyZSBj
YWxsZWQuCi0gICAvLyEgICBEaXNwb3Nlcjo6b3BlcmF0b3IoKShwb2ludGVyKSBpcyBjYWxsZWQg
Zm9yIHRoZSByZW1vdmVkIGVsZW1lbnQuCi0gICAvLyEKLSAgIC8vISA8Yj5SZXR1cm5zPC9iPjog
dGhlIGZpcnN0IGVsZW1lbnQgcmVtYWluaW5nIGJleW9uZCB0aGUgcmVtb3ZlZCBlbGVtZW50LAot
ICAgLy8hICAgb3IgZW5kKCkgaWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cy4KLSAgIC8vIQotICAg
Ly8hIDxiPlRocm93czwvYj46IE5vdGhpbmcuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4aXR5
PC9iPjogQ29uc3RhbnQuCi0gICAvLyEKLSAgIC8vISA8Yj5Ob3RlPC9iPjogSW52YWxpZGF0ZXMg
dGhlIGl0ZXJhdG9ycyB0byB0aGUgZXJhc2VkIGVsZW1lbnQuCi0gICB0ZW1wbGF0ZSA8Y2xhc3Mg
RGlzcG9zZXI+Ci0gICBpdGVyYXRvciBlcmFzZV9hbmRfZGlzcG9zZShjb25zdF9pdGVyYXRvciBp
LCBEaXNwb3NlciBkaXNwb3NlcikKLSAgIHsKLSAgICAgIG5vZGVfcHRyIHRvX2VyYXNlKGkucG9p
bnRlZF9ub2RlKCkpOwotICAgICAgKytpOwotICAgICAgbm9kZV9hbGdvcml0aG1zOjp1bmxpbmso
dG9fZXJhc2UpOwotICAgICAgdGhpcy0+cHJpdl9zaXplX3RyYWl0cygpLmRlY3JlbWVudCgpOwot
ICAgICAgaWYoc2FmZW1vZGVfb3JfYXV0b3VubGluaykKLSAgICAgICAgIG5vZGVfYWxnb3JpdGht
czo6aW5pdCh0b19lcmFzZSk7Ci0gICAgICBkaXNwb3Nlcih0aGlzLT5wcml2X3ZhbHVlX3RyYWl0
cygpLnRvX3ZhbHVlX3B0cih0b19lcmFzZSkpOwotICAgICAgcmV0dXJuIGkudW5jb25zdCgpOwot
ICAgfQotCi0gICAjaWYgIWRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX0RPWFlHRU5fSU5WT0tFRCkK
LSAgIHRlbXBsYXRlPGNsYXNzIERpc3Bvc2VyPgotICAgaXRlcmF0b3IgZXJhc2VfYW5kX2Rpc3Bv
c2UoaXRlcmF0b3IgaSwgRGlzcG9zZXIgZGlzcG9zZXIpCi0gICB7ICByZXR1cm4gdGhpcy0+ZXJh
c2VfYW5kX2Rpc3Bvc2UoY29uc3RfaXRlcmF0b3IoaSksIGRpc3Bvc2VyKTsgICB9Ci0gICAjZW5k
aWYKLQotICAgLy8hIDxiPlJlcXVpcmVzPC9iPjogRGlzcG9zZXI6Om9wZXJhdG9yKCkocG9pbnRl
cikgc2hvdWxkbid0IHRocm93LgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IEVyYXNl
cyB0aGUgZWxlbWVudCByYW5nZSBwb2ludGVkIGJ5IGIgYW5kIGUKLSAgIC8vISAgIE5vIGRlc3Ry
dWN0b3JzIGFyZSBjYWxsZWQuCi0gICAvLyEgICBEaXNwb3Nlcjo6b3BlcmF0b3IoKShwb2ludGVy
KSBpcyBjYWxsZWQgZm9yIHRoZSByZW1vdmVkIGVsZW1lbnRzLgotICAgLy8hCi0gICAvLyEgPGI+
UmV0dXJuczwvYj46IHRoZSBmaXJzdCBlbGVtZW50IHJlbWFpbmluZyBiZXlvbmQgdGhlIHJlbW92
ZWQgZWxlbWVudHMsCi0gICAvLyEgICBvciBlbmQoKSBpZiBubyBzdWNoIGVsZW1lbnQgZXhpc3Rz
LgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8vIQotICAgLy8h
IDxiPkNvbXBsZXhpdHk8L2I+OiBMaW5lYXIgdG8gdGhlIG51bWJlciBvZiBlbGVtZW50cyBlcmFz
ZWQuCi0gICAvLyEKLSAgIC8vISA8Yj5Ob3RlPC9iPjogSW52YWxpZGF0ZXMgdGhlIGl0ZXJhdG9y
cyB0byB0aGUgZXJhc2VkIGVsZW1lbnRzLgotICAgdGVtcGxhdGUgPGNsYXNzIERpc3Bvc2VyPgot
ICAgaXRlcmF0b3IgZXJhc2VfYW5kX2Rpc3Bvc2UoY29uc3RfaXRlcmF0b3IgYiwgY29uc3RfaXRl
cmF0b3IgZSwgRGlzcG9zZXIgZGlzcG9zZXIpCi0gICB7Ci0gICAgICBub2RlX3B0ciBicChiLnBv
aW50ZWRfbm9kZSgpKSwgZXAoZS5wb2ludGVkX25vZGUoKSk7Ci0gICAgICBub2RlX2FsZ29yaXRo
bXM6OnVubGluayhicCwgZXApOwotICAgICAgd2hpbGUoYnAgIT0gZXApewotICAgICAgICAgbm9k
ZV9wdHIgdG9fZXJhc2UoYnApOwotICAgICAgICAgYnAgPSBub2RlX3RyYWl0czo6Z2V0X25leHQo
YnApOwotICAgICAgICAgaWYoc2FmZW1vZGVfb3JfYXV0b3VubGluaykKLSAgICAgICAgICAgIG5v
ZGVfYWxnb3JpdGhtczo6aW5pdCh0b19lcmFzZSk7Ci0gICAgICAgICBkaXNwb3Nlcihwcml2X3Zh
bHVlX3RyYWl0cygpLnRvX3ZhbHVlX3B0cih0b19lcmFzZSkpOwotICAgICAgICAgdGhpcy0+cHJp
dl9zaXplX3RyYWl0cygpLmRlY3JlbWVudCgpOwotICAgICAgfQotICAgICAgcmV0dXJuIGUudW5j
b25zdCgpOwotICAgfQotCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IEVyYXNlcyBhbGwgdGhlIGVs
ZW1lbnRzIG9mIHRoZSBjb250YWluZXIuCi0gICAvLyEgICBObyBkZXN0cnVjdG9ycyBhcmUgY2Fs
bGVkLgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8vIQotICAg
Ly8hIDxiPkNvbXBsZXhpdHk8L2I+OiBMaW5lYXIgdG8gdGhlIG51bWJlciBvZiBlbGVtZW50cyBv
ZiB0aGUgbGlzdC4KLSAgIC8vISAgIGlmIGl0J3MgYSBzYWZlLW1vZGUgb3IgYXV0by11bmxpbmsg
dmFsdWVfdHlwZS4gQ29uc3RhbnQgdGltZSBvdGhlcndpc2UuCi0gICAvLyEKLSAgIC8vISA8Yj5O
b3RlPC9iPjogSW52YWxpZGF0ZXMgdGhlIGl0ZXJhdG9ycyAoYnV0IG5vdCB0aGUgcmVmZXJlbmNl
cykgdG8gdGhlIGVyYXNlZCBlbGVtZW50cy4KLSAgIHZvaWQgY2xlYXIoKQotICAgewotICAgICAg
aWYoc2FmZW1vZGVfb3JfYXV0b3VubGluayl7Ci0gICAgICAgICB0aGlzLT5jbGVhcl9hbmRfZGlz
cG9zZShkZXRhaWw6Om51bGxfZGlzcG9zZXIoKSk7Ci0gICAgICB9Ci0gICAgICBlbHNlewotICAg
ICAgICAgbm9kZV9hbGdvcml0aG1zOjppbml0X2hlYWRlcih0aGlzLT5nZXRfcm9vdF9ub2RlKCkp
OwotICAgICAgICAgdGhpcy0+cHJpdl9zaXplX3RyYWl0cygpLnNldF9zaXplKHNpemVfdHlwZSgw
KSk7Ci0gICAgICB9Ci0gICB9Ci0KLSAgIC8vISA8Yj5SZXF1aXJlczwvYj46IERpc3Bvc2VyOjpv
cGVyYXRvcigpKHBvaW50ZXIpIHNob3VsZG4ndCB0aHJvdy4KLSAgIC8vIQotICAgLy8hIDxiPkVm
ZmVjdHM8L2I+OiBFcmFzZXMgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGUgY29udGFpbmVyLgotICAg
Ly8hICAgTm8gZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZC4KLSAgIC8vISAgIERpc3Bvc2VyOjpvcGVy
YXRvcigpKHBvaW50ZXIpIGlzIGNhbGxlZCBmb3IgdGhlIHJlbW92ZWQgZWxlbWVudHMuCi0gICAv
LyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAgLy8hCi0gICAvLyEgPGI+Q29t
cGxleGl0eTwvYj46IExpbmVhciB0byB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoZSBsaXN0
LgotICAgLy8hCi0gICAvLyEgPGI+Tm90ZTwvYj46IEludmFsaWRhdGVzIHRoZSBpdGVyYXRvcnMg
dG8gdGhlIGVyYXNlZCBlbGVtZW50cy4KLSAgIHRlbXBsYXRlIDxjbGFzcyBEaXNwb3Nlcj4KLSAg
IHZvaWQgY2xlYXJfYW5kX2Rpc3Bvc2UoRGlzcG9zZXIgZGlzcG9zZXIpCi0gICB7Ci0gICAgICBj
b25zdF9pdGVyYXRvciBpdCh0aGlzLT5iZWdpbigpKSwgaXRlbmQodGhpcy0+ZW5kKCkpOwotICAg
ICAgd2hpbGUoaXQgIT0gaXRlbmQpewotICAgICAgICAgbm9kZV9wdHIgdG9fZXJhc2UoaXQucG9p
bnRlZF9ub2RlKCkpOwotICAgICAgICAgKytpdDsKLSAgICAgICAgIGlmKHNhZmVtb2RlX29yX2F1
dG91bmxpbmspCi0gICAgICAgICAgICBub2RlX2FsZ29yaXRobXM6OmluaXQodG9fZXJhc2UpOwot
ICAgICAgICAgZGlzcG9zZXIocHJpdl92YWx1ZV90cmFpdHMoKS50b192YWx1ZV9wdHIodG9fZXJh
c2UpKTsKLSAgICAgIH0KLSAgICAgIG5vZGVfYWxnb3JpdGhtczo6aW5pdF9oZWFkZXIodGhpcy0+
Z2V0X3Jvb3Rfbm9kZSgpKTsKLSAgICAgIHRoaXMtPnByaXZfc2l6ZV90cmFpdHMoKS5zZXRfc2l6
ZSgwKTsKLSAgIH0KLQotICAgLy8hIDxiPlJlcXVpcmVzPC9iPjogRGlzcG9zZXI6Om9wZXJhdG9y
KCkocG9pbnRlcikgc2hvdWxkbid0IHRocm93LgotICAgLy8hICAgQ2xvbmVyIHNob3VsZCB5aWVs
ZCB0byBub2RlcyBlcXVpdmFsZW50IHRvIHRoZSBvcmlnaW5hbCBub2Rlcy4KLSAgIC8vIQotICAg
Ly8hIDxiPkVmZmVjdHM8L2I+OiBFcmFzZXMgYWxsIHRoZSBlbGVtZW50cyBmcm9tICp0aGlzCi0g
ICAvLyEgICBjYWxsaW5nIERpc3Bvc2VyOjpvcGVyYXRvcigpKHBvaW50ZXIpLCBjbG9uZXMgYWxs
IHRoZQotICAgLy8hICAgZWxlbWVudHMgZnJvbSBzcmMgY2FsbGluZyBDbG9uZXI6Om9wZXJhdG9y
KCkoY29uc3RfcmVmZXJlbmNlICkKLSAgIC8vISAgIGFuZCBpbnNlcnRzIHRoZW0gb24gKnRoaXMu
Ci0gICAvLyEKLSAgIC8vISAgIElmIGNsb25lciB0aHJvd3MsIGFsbCBjbG9uZWQgZWxlbWVudHMg
YXJlIHVubGlua2VkIGFuZCBkaXNwb3NlZAotICAgLy8hICAgY2FsbGluZyBEaXNwb3Nlcjo6b3Bl
cmF0b3IoKShwb2ludGVyKS4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBMaW5l
YXIgdG8gZXJhc2VkIHBsdXMgaW5zZXJ0ZWQgZWxlbWVudHMuCi0gICAvLyEKLSAgIC8vISA8Yj5U
aHJvd3M8L2I+OiBJZiBjbG9uZXIgdGhyb3dzLiBCYXNpYyBndWFyYW50ZWUuCi0gICB0ZW1wbGF0
ZSA8Y2xhc3MgQ2xvbmVyLCBjbGFzcyBEaXNwb3Nlcj4KLSAgIHZvaWQgY2xvbmVfZnJvbShjb25z
dCBsaXN0X2ltcGwgJnNyYywgQ2xvbmVyIGNsb25lciwgRGlzcG9zZXIgZGlzcG9zZXIpCi0gICB7
Ci0gICAgICB0aGlzLT5jbGVhcl9hbmRfZGlzcG9zZShkaXNwb3Nlcik7Ci0gICAgICBkZXRhaWw6
OmV4Y2VwdGlvbl9kaXNwb3NlcjxsaXN0X2ltcGwsIERpc3Bvc2VyPgotICAgICAgICAgcm9sbGJh
Y2soKnRoaXMsIGRpc3Bvc2VyKTsKLSAgICAgIGNvbnN0X2l0ZXJhdG9yIGIoc3JjLmJlZ2luKCkp
LCBlKHNyYy5lbmQoKSk7Ci0gICAgICBmb3IoOyBiICE9IGU7ICsrYil7Ci0gICAgICAgICB0aGlz
LT5wdXNoX2JhY2soKmNsb25lcigqYikpOwotICAgICAgfQotICAgICAgcm9sbGJhY2sucmVsZWFz
ZSgpOwotICAgfQotCi0gICAvLyEgPGI+UmVxdWlyZXM8L2I+OiBEaXNwb3Nlcjo6b3BlcmF0b3Io
KShwb2ludGVyKSBzaG91bGRuJ3QgdGhyb3cuCi0gICAvLyEgICBDbG9uZXIgc2hvdWxkIHlpZWxk
IHRvIG5vZGVzIGVxdWl2YWxlbnQgdG8gdGhlIG9yaWdpbmFsIG5vZGVzLgotICAgLy8hCi0gICAv
LyEgPGI+RWZmZWN0czwvYj46IEVyYXNlcyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gKnRoaXMKLSAg
IC8vISAgIGNhbGxpbmcgRGlzcG9zZXI6Om9wZXJhdG9yKCkocG9pbnRlciksIGNsb25lcyBhbGwg
dGhlCi0gICAvLyEgICBlbGVtZW50cyBmcm9tIHNyYyBjYWxsaW5nIENsb25lcjo6b3BlcmF0b3Io
KShyZWZlcmVuY2UpCi0gICAvLyEgICBhbmQgaW5zZXJ0cyB0aGVtIG9uICp0aGlzLgotICAgLy8h
Ci0gICAvLyEgICBJZiBjbG9uZXIgdGhyb3dzLCBhbGwgY2xvbmVkIGVsZW1lbnRzIGFyZSB1bmxp
bmtlZCBhbmQgZGlzcG9zZWQKLSAgIC8vISAgIGNhbGxpbmcgRGlzcG9zZXI6Om9wZXJhdG9yKCko
cG9pbnRlcikuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4aXR5PC9iPjogTGluZWFyIHRvIGVy
YXNlZCBwbHVzIGluc2VydGVkIGVsZW1lbnRzLgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9i
PjogSWYgY2xvbmVyIHRocm93cy4gQmFzaWMgZ3VhcmFudGVlLgotICAgdGVtcGxhdGUgPGNsYXNz
IENsb25lciwgY2xhc3MgRGlzcG9zZXI+Ci0gICB2b2lkIGNsb25lX2Zyb20oQk9PU1RfUlZfUkVG
KGxpc3RfaW1wbCkgc3JjLCBDbG9uZXIgY2xvbmVyLCBEaXNwb3NlciBkaXNwb3NlcikKLSAgIHsK
LSAgICAgIHRoaXMtPmNsZWFyX2FuZF9kaXNwb3NlKGRpc3Bvc2VyKTsKLSAgICAgIGRldGFpbDo6
ZXhjZXB0aW9uX2Rpc3Bvc2VyPGxpc3RfaW1wbCwgRGlzcG9zZXI+Ci0gICAgICAgICByb2xsYmFj
aygqdGhpcywgZGlzcG9zZXIpOwotICAgICAgaXRlcmF0b3IgYihzcmMuYmVnaW4oKSksIGUoc3Jj
LmVuZCgpKTsKLSAgICAgIGZvcig7IGIgIT0gZTsgKytiKXsKLSAgICAgICAgIHRoaXMtPnB1c2hf
YmFjaygqY2xvbmVyKCpiKSk7Ci0gICAgICB9Ci0gICAgICByb2xsYmFjay5yZWxlYXNlKCk7Ci0g
ICB9Ci0KLSAgIC8vISA8Yj5SZXF1aXJlczwvYj46IHZhbHVlIG11c3QgYmUgYW4gbHZhbHVlIGFu
ZCBwIG11c3QgYmUgYSB2YWxpZCBpdGVyYXRvciBvZiAqdGhpcy4KLSAgIC8vIQotICAgLy8hIDxi
PkVmZmVjdHM8L2I+OiBJbnNlcnRzIHRoZSB2YWx1ZSBiZWZvcmUgdGhlIHBvc2l0aW9uIHBvaW50
ZWQgYnkgcC4KLSAgIC8vIQotICAgLy8hIDxiPlJldHVybnM8L2I+OiBBbiBpdGVyYXRvciB0byB0
aGUgaW5zZXJ0ZWQgZWxlbWVudC4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwvYj46IE5vdGhp
bmcuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4aXR5PC9iPjogQ29uc3RhbnQgdGltZS4gTm8g
Y29weSBjb25zdHJ1Y3RvcnMgYXJlIGNhbGxlZC4KLSAgIC8vIQotICAgLy8hIDxiPk5vdGU8L2I+
OiBEb2VzIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNl
cy4KLSAgIGl0ZXJhdG9yIGluc2VydChjb25zdF9pdGVyYXRvciBwLCByZWZlcmVuY2UgdmFsdWUp
Ci0gICB7Ci0gICAgICBub2RlX3B0ciB0b19pbnNlcnQgPSB0aGlzLT5wcml2X3ZhbHVlX3RyYWl0
cygpLnRvX25vZGVfcHRyKHZhbHVlKTsKLSAgICAgIEJPT1NUX0lOVFJVU0lWRV9TQUZFX0hPT0tf
REVGQVVMVF9BU1NFUlQoIXNhZmVtb2RlX29yX2F1dG91bmxpbmsgfHwgbm9kZV9hbGdvcml0aG1z
Ojppbml0ZWQodG9faW5zZXJ0KSk7Ci0gICAgICBub2RlX2FsZ29yaXRobXM6OmxpbmtfYmVmb3Jl
KHAucG9pbnRlZF9ub2RlKCksIHRvX2luc2VydCk7Ci0gICAgICB0aGlzLT5wcml2X3NpemVfdHJh
aXRzKCkuaW5jcmVtZW50KCk7Ci0gICAgICByZXR1cm4gaXRlcmF0b3IodG9faW5zZXJ0LCB0aGlz
LT5wcml2X3ZhbHVlX3RyYWl0c19wdHIoKSk7Ci0gICB9Ci0KLSAgIC8vISA8Yj5SZXF1aXJlczwv
Yj46IERlcmVmZXJlbmNpbmcgaXRlcmF0b3IgbXVzdCB5aWVsZAotICAgLy8hICAgYW4gbHZhbHVl
IG9mIHR5cGUgdmFsdWVfdHlwZSBhbmQgcCBtdXN0IGJlIGEgdmFsaWQgaXRlcmF0b3Igb2YgKnRo
aXMuCi0gICAvLyEKLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogSW5zZXJ0cyB0aGUgcmFuZ2UgcG9p
bnRlZCBieSBiIGFuZCBlIGJlZm9yZSB0aGUgcG9zaXRpb24gcC4KLSAgIC8vISAgIE5vIGNvcHkg
Y29uc3RydWN0b3JzIGFyZSBjYWxsZWQuCi0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBO
b3RoaW5nLgotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IExpbmVhciB0byB0aGUg
bnVtYmVyIG9mIGVsZW1lbnRzIGluc2VydGVkLgotICAgLy8hCi0gICAvLyEgPGI+Tm90ZTwvYj46
IERvZXMgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2Vz
LgotICAgdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+Ci0gICB2b2lkIGluc2VydChjb25zdF9pdGVy
YXRvciBwLCBJdGVyYXRvciBiLCBJdGVyYXRvciBlKQotICAgewotICAgICAgZm9yICg7IGIgIT0g
ZTsgKytiKQotICAgICAgICAgdGhpcy0+aW5zZXJ0KHAsICpiKTsKLSAgIH0KLQotICAgLy8hIDxi
PlJlcXVpcmVzPC9iPjogRGVyZWZlcmVuY2luZyBpdGVyYXRvciBtdXN0IHlpZWxkCi0gICAvLyEg
ICBhbiBsdmFsdWUgb2YgdHlwZSB2YWx1ZV90eXBlLgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0
czwvYj46IENsZWFycyB0aGUgbGlzdCBhbmQgaW5zZXJ0cyB0aGUgcmFuZ2UgcG9pbnRlZCBieSBi
IGFuZCBlLgotICAgLy8hICAgTm8gZGVzdHJ1Y3RvcnMgb3IgY29weSBjb25zdHJ1Y3RvcnMgYXJl
IGNhbGxlZC4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwvYj46IE5vdGhpbmcuCi0gICAvLyEK
LSAgIC8vISA8Yj5Db21wbGV4aXR5PC9iPjogTGluZWFyIHRvIHRoZSBudW1iZXIgb2YgZWxlbWVu
dHMgaW5zZXJ0ZWQgcGx1cwotICAgLy8hICAgbGluZWFyIHRvIHRoZSBlbGVtZW50cyBjb250YWlu
ZWQgaW4gdGhlIGxpc3QgaWYgaXQncyBhIHNhZmUtbW9kZQotICAgLy8hICAgb3IgYXV0by11bmxp
bmsgdmFsdWUuCi0gICAvLyEgICBMaW5lYXIgdG8gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbnNl
cnRlZCBpbiB0aGUgbGlzdCBvdGhlcndpc2UuCi0gICAvLyEKLSAgIC8vISA8Yj5Ob3RlPC9iPjog
SW52YWxpZGF0ZXMgdGhlIGl0ZXJhdG9ycyAoYnV0IG5vdCB0aGUgcmVmZXJlbmNlcykKLSAgIC8v
ISAgIHRvIHRoZSBlcmFzZWQgZWxlbWVudHMuCi0gICB0ZW1wbGF0ZTxjbGFzcyBJdGVyYXRvcj4K
LSAgIHZvaWQgYXNzaWduKEl0ZXJhdG9yIGIsIEl0ZXJhdG9yIGUpCi0gICB7Ci0gICAgICB0aGlz
LT5jbGVhcigpOwotICAgICAgdGhpcy0+aW5zZXJ0KHRoaXMtPmNlbmQoKSwgYiwgZSk7Ci0gICB9
Ci0KLSAgIC8vISA8Yj5SZXF1aXJlczwvYj46IERpc3Bvc2VyOjpvcGVyYXRvcigpKHBvaW50ZXIp
IHNob3VsZG4ndCB0aHJvdy4KLSAgIC8vIQotICAgLy8hIDxiPlJlcXVpcmVzPC9iPjogRGVyZWZl
cmVuY2luZyBpdGVyYXRvciBtdXN0IHlpZWxkCi0gICAvLyEgICBhbiBsdmFsdWUgb2YgdHlwZSB2
YWx1ZV90eXBlLgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IENsZWFycyB0aGUgbGlz
dCBhbmQgaW5zZXJ0cyB0aGUgcmFuZ2UgcG9pbnRlZCBieSBiIGFuZCBlLgotICAgLy8hICAgTm8g
ZGVzdHJ1Y3RvcnMgb3IgY29weSBjb25zdHJ1Y3RvcnMgYXJlIGNhbGxlZC4KLSAgIC8vISAgIERp
c3Bvc2VyOjpvcGVyYXRvcigpKHBvaW50ZXIpIGlzIGNhbGxlZCBmb3IgdGhlIHJlbW92ZWQgZWxl
bWVudHMuCi0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAgLy8hCi0g
ICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IExpbmVhciB0byB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz
IGluc2VydGVkIHBsdXMKLSAgIC8vISAgIGxpbmVhciB0byB0aGUgZWxlbWVudHMgY29udGFpbmVk
IGluIHRoZSBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+Tm90ZTwvYj46IEludmFsaWRhdGVzIHRo
ZSBpdGVyYXRvcnMgKGJ1dCBub3QgdGhlIHJlZmVyZW5jZXMpCi0gICAvLyEgICB0byB0aGUgZXJh
c2VkIGVsZW1lbnRzLgotICAgdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3IsIGNsYXNzIERpc3Bvc2Vy
PgotICAgdm9pZCBkaXNwb3NlX2FuZF9hc3NpZ24oRGlzcG9zZXIgZGlzcG9zZXIsIEl0ZXJhdG9y
IGIsIEl0ZXJhdG9yIGUpCi0gICB7Ci0gICAgICB0aGlzLT5jbGVhcl9hbmRfZGlzcG9zZShkaXNw
b3Nlcik7Ci0gICAgICB0aGlzLT5pbnNlcnQodGhpcy0+Y2VuZCgpLCBiLCBlKTsKLSAgIH0KLQot
ICAgLy8hIDxiPlJlcXVpcmVzPC9iPjogcCBtdXN0IGJlIGEgdmFsaWQgaXRlcmF0b3Igb2YgKnRo
aXMuCi0gICAvLyEKLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogVHJhbnNmZXJzIGFsbCB0aGUgZWxl
bWVudHMgb2YgbGlzdCB4IHRvIHRoaXMgbGlzdCwgYmVmb3JlIHRoZQotICAgLy8hICAgdGhlIGVs
ZW1lbnQgcG9pbnRlZCBieSBwLiBObyBkZXN0cnVjdG9ycyBvciBjb3B5IGNvbnN0cnVjdG9ycyBh
cmUgY2FsbGVkLgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8v
IQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudC4KLSAgIC8vIQotICAgLy8hIDxi
Pk5vdGU8L2I+OiBJdGVyYXRvcnMgb2YgdmFsdWVzIG9idGFpbmVkIGZyb20gbGlzdCB4IG5vdyBw
b2ludCB0byBlbGVtZW50cyBvZgotICAgLy8hICAgIHRoaXMgbGlzdC4gSXRlcmF0b3JzIG9mIHRo
aXMgbGlzdCBhbmQgYWxsIHRoZSByZWZlcmVuY2VzIGFyZSBub3QgaW52YWxpZGF0ZWQuCi0gICB2
b2lkIHNwbGljZShjb25zdF9pdGVyYXRvciBwLCBsaXN0X2ltcGwmIHgpCi0gICB7Ci0gICAgICBp
ZigheC5lbXB0eSgpKXsKLSAgICAgICAgIG5vZGVfYWxnb3JpdGhtczo6dHJhbnNmZXIKLSAgICAg
ICAgICAgIChwLnBvaW50ZWRfbm9kZSgpLCB4LmJlZ2luKCkucG9pbnRlZF9ub2RlKCksIHguZW5k
KCkucG9pbnRlZF9ub2RlKCkpOwotICAgICAgICAgc2l6ZV90cmFpdHMgJnRoaXN0ID0gdGhpcy0+
cHJpdl9zaXplX3RyYWl0cygpOwotICAgICAgICAgc2l6ZV90cmFpdHMgJnh0ID0geC5wcml2X3Np
emVfdHJhaXRzKCk7Ci0gICAgICAgICB0aGlzdC5pbmNyZWFzZSh4dC5nZXRfc2l6ZSgpKTsKLSAg
ICAgICAgIHh0LnNldF9zaXplKHNpemVfdHlwZSgwKSk7Ci0gICAgICB9Ci0gICB9Ci0KLSAgIC8v
ISA8Yj5SZXF1aXJlczwvYj46IHAgbXVzdCBiZSBhIHZhbGlkIGl0ZXJhdG9yIG9mICp0aGlzLgot
ICAgLy8hICAgbmV3X2VsZSBtdXN0IHBvaW50IHRvIGFuIGVsZW1lbnQgY29udGFpbmVkIGluIGxp
c3QgeC4KLSAgIC8vIQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBUcmFuc2ZlcnMgdGhlIHZhbHVl
IHBvaW50ZWQgYnkgbmV3X2VsZSwgZnJvbSBsaXN0IHggdG8gdGhpcyBsaXN0LAotICAgLy8hICAg
YmVmb3JlIHRoZSBlbGVtZW50IHBvaW50ZWQgYnkgcC4gTm8gZGVzdHJ1Y3RvcnMgb3IgY29weSBj
b25zdHJ1Y3RvcnMgYXJlIGNhbGxlZC4KLSAgIC8vISAgIElmIHAgPT0gbmV3X2VsZSBvciBwID09
ICsrbmV3X2VsZSwgdGhpcyBmdW5jdGlvbiBpcyBhIG51bGwgb3BlcmF0aW9uLgotICAgLy8hCi0g
ICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhp
dHk8L2I+OiBDb25zdGFudC4KLSAgIC8vIQotICAgLy8hIDxiPk5vdGU8L2I+OiBJdGVyYXRvcnMg
b2YgdmFsdWVzIG9idGFpbmVkIGZyb20gbGlzdCB4IG5vdyBwb2ludCB0byBlbGVtZW50cyBvZiB0
aGlzCi0gICAvLyEgICBsaXN0LiBJdGVyYXRvcnMgb2YgdGhpcyBsaXN0IGFuZCBhbGwgdGhlIHJl
ZmVyZW5jZXMgYXJlIG5vdCBpbnZhbGlkYXRlZC4KLSAgIHZvaWQgc3BsaWNlKGNvbnN0X2l0ZXJh
dG9yIHAsIGxpc3RfaW1wbCZ4LCBjb25zdF9pdGVyYXRvciBuZXdfZWxlKQotICAgewotICAgICAg
bm9kZV9hbGdvcml0aG1zOjp0cmFuc2ZlcihwLnBvaW50ZWRfbm9kZSgpLCBuZXdfZWxlLnBvaW50
ZWRfbm9kZSgpKTsKLSAgICAgIHgucHJpdl9zaXplX3RyYWl0cygpLmRlY3JlbWVudCgpOwotICAg
ICAgdGhpcy0+cHJpdl9zaXplX3RyYWl0cygpLmluY3JlbWVudCgpOwotICAgfQotCi0gICAvLyEg
PGI+UmVxdWlyZXM8L2I+OiBwIG11c3QgYmUgYSB2YWxpZCBpdGVyYXRvciBvZiAqdGhpcy4KLSAg
IC8vISAgIGYgYW5kIGUgbXVzdCBwb2ludCB0byBlbGVtZW50cyBjb250YWluZWQgaW4gbGlzdCB4
LgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IFRyYW5zZmVycyB0aGUgcmFuZ2UgcG9p
bnRlZCBieSBmIGFuZCBlIGZyb20gbGlzdCB4IHRvIHRoaXMgbGlzdCwKLSAgIC8vISAgIGJlZm9y
ZSB0aGUgZWxlbWVudCBwb2ludGVkIGJ5IHAuIE5vIGRlc3RydWN0b3JzIG9yIGNvcHkgY29uc3Ry
dWN0b3JzIGFyZSBjYWxsZWQuCi0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5n
LgotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IExpbmVhciB0byB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzIHRyYW5zZmVycmVkCi0gICAvLyEgICBpZiBjb25zdGFudC10aW1lIHNpemUg
b3B0aW9uIGlzIGVuYWJsZWQuIENvbnN0YW50LXRpbWUgb3RoZXJ3aXNlLgotICAgLy8hCi0gICAv
LyEgPGI+Tm90ZTwvYj46IEl0ZXJhdG9ycyBvZiB2YWx1ZXMgb2J0YWluZWQgZnJvbSBsaXN0IHgg
bm93IHBvaW50IHRvIGVsZW1lbnRzIG9mIHRoaXMKLSAgIC8vISAgIGxpc3QuIEl0ZXJhdG9ycyBv
ZiB0aGlzIGxpc3QgYW5kIGFsbCB0aGUgcmVmZXJlbmNlcyBhcmUgbm90IGludmFsaWRhdGVkLgot
ICAgdm9pZCBzcGxpY2UoY29uc3RfaXRlcmF0b3IgcCwgbGlzdF9pbXBsJngsIGNvbnN0X2l0ZXJh
dG9yIGYsIGNvbnN0X2l0ZXJhdG9yIGUpCi0gICB7Ci0gICAgICBpZihjb25zdGFudF90aW1lX3Np
emUpCi0gICAgICAgICB0aGlzLT5zcGxpY2UocCwgeCwgZiwgZSwgbm9kZV9hbGdvcml0aG1zOjpk
aXN0YW5jZShmLnBvaW50ZWRfbm9kZSgpLCBlLnBvaW50ZWRfbm9kZSgpKSk7Ci0gICAgICBlbHNl
Ci0gICAgICAgICB0aGlzLT5zcGxpY2UocCwgeCwgZiwgZSwgMSk7Ly9pbnRydXNpdmU6Oml0ZXJh
dG9yX2Rpc3RhbmNlIGlzIGEgZHVtbXkgdmFsdWUKLSAgIH0KLQotICAgLy8hIDxiPlJlcXVpcmVz
PC9iPjogcCBtdXN0IGJlIGEgdmFsaWQgaXRlcmF0b3Igb2YgKnRoaXMuCi0gICAvLyEgICBmIGFu
ZCBlIG11c3QgcG9pbnQgdG8gZWxlbWVudHMgY29udGFpbmVkIGluIGxpc3QgeC4KLSAgIC8vISAg
IG4gPT0gZGlzdGFuY2UoZiwgZSkKLSAgIC8vIQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBUcmFu
c2ZlcnMgdGhlIHJhbmdlIHBvaW50ZWQgYnkgZiBhbmQgZSBmcm9tIGxpc3QgeCB0byB0aGlzIGxp
c3QsCi0gICAvLyEgICBiZWZvcmUgdGhlIGVsZW1lbnQgcG9pbnRlZCBieSBwLiBObyBkZXN0cnVj
dG9ycyBvciBjb3B5IGNvbnN0cnVjdG9ycyBhcmUgY2FsbGVkLgotICAgLy8hCi0gICAvLyEgPGI+
VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBD
b25zdGFudC4KLSAgIC8vIQotICAgLy8hIDxiPk5vdGU8L2I+OiBJdGVyYXRvcnMgb2YgdmFsdWVz
IG9idGFpbmVkIGZyb20gbGlzdCB4IG5vdyBwb2ludCB0byBlbGVtZW50cyBvZiB0aGlzCi0gICAv
LyEgICBsaXN0LiBJdGVyYXRvcnMgb2YgdGhpcyBsaXN0IGFuZCBhbGwgdGhlIHJlZmVyZW5jZXMg
YXJlIG5vdCBpbnZhbGlkYXRlZC4KLSAgIHZvaWQgc3BsaWNlKGNvbnN0X2l0ZXJhdG9yIHAsIGxp
c3RfaW1wbCZ4LCBjb25zdF9pdGVyYXRvciBmLCBjb25zdF9pdGVyYXRvciBlLCBzaXplX3R5cGUg
bikKLSAgIHsKLSAgICAgIGlmKG4pewotICAgICAgICAgaWYoY29uc3RhbnRfdGltZV9zaXplKXsK
LSAgICAgICAgICAgIEJPT1NUX0lOVFJVU0lWRV9JTlZBUklBTlRfQVNTRVJUKG4gPT0gbm9kZV9h
bGdvcml0aG1zOjpkaXN0YW5jZShmLnBvaW50ZWRfbm9kZSgpLCBlLnBvaW50ZWRfbm9kZSgpKSk7
Ci0gICAgICAgICAgICBub2RlX2FsZ29yaXRobXM6OnRyYW5zZmVyKHAucG9pbnRlZF9ub2RlKCks
IGYucG9pbnRlZF9ub2RlKCksIGUucG9pbnRlZF9ub2RlKCkpOwotICAgICAgICAgICAgc2l6ZV90
cmFpdHMgJnRoaXN0ID0gdGhpcy0+cHJpdl9zaXplX3RyYWl0cygpOwotICAgICAgICAgICAgc2l6
ZV90cmFpdHMgJnh0ID0geC5wcml2X3NpemVfdHJhaXRzKCk7Ci0gICAgICAgICAgICB0aGlzdC5p
bmNyZWFzZShuKTsKLSAgICAgICAgICAgIHh0LmRlY3JlYXNlKG4pOwotICAgICAgICAgfQotICAg
ICAgICAgZWxzZXsKLSAgICAgICAgICAgIG5vZGVfYWxnb3JpdGhtczo6dHJhbnNmZXIocC5wb2lu
dGVkX25vZGUoKSwgZi5wb2ludGVkX25vZGUoKSwgZS5wb2ludGVkX25vZGUoKSk7Ci0gICAgICAg
ICB9Ci0gICAgICB9Ci0gICB9Ci0KLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogVGhpcyBmdW5jdGlv
biBzb3J0cyB0aGUgbGlzdCAqdGhpcyBhY2NvcmRpbmcgdG8gc3RkOjpsZXNzPHZhbHVlX3R5cGU+
LgotICAgLy8hICAgVGhlIHNvcnQgaXMgc3RhYmxlLCB0aGF0IGlzLCB0aGUgcmVsYXRpdmUgb3Jk
ZXIgb2YgZXF1aXZhbGVudCBlbGVtZW50cyBpcyBwcmVzZXJ2ZWQuCi0gICAvLyEKLSAgIC8vISA8
Yj5UaHJvd3M8L2I+OiBJZiB2YWx1ZV90cmFpdHM6Om5vZGVfdHJhaXRzOjpub2RlCi0gICAvLyEg
ICBjb25zdHJ1Y3RvciB0aHJvd3MgKHRoaXMgZG9lcyBub3QgaGFwcGVuIHdpdGggcHJlZGVmaW5l
ZCBCb29zdC5JbnRydXNpdmUgaG9va3MpCi0gICAvLyEgICBvciBzdGQ6Omxlc3M8dmFsdWVfdHlw
ZT4gdGhyb3dzLiBCYXNpYyBndWFyYW50ZWUuCi0gICAvLyEKLSAgIC8vISA8Yj5Ob3RlczwvYj46
IEl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyBhcmUgbm90IGludmFsaWRhdGVkLgotICAgLy8hCi0g
ICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IFRoZSBudW1iZXIgb2YgY29tcGFyaXNvbnMgaXMgYXBw
cm94aW1hdGVseSBOIGxvZyBOLCB3aGVyZSBOCi0gICAvLyEgICBpcyB0aGUgbGlzdCdzIHNpemUu
Ci0gICB2b2lkIHNvcnQoKQotICAgeyAgdGhpcy0+c29ydChzdGQ6Omxlc3M8dmFsdWVfdHlwZT4o
KSk7ICB9Ci0KLSAgIC8vISA8Yj5SZXF1aXJlczwvYj46IHAgbXVzdCBiZSBhIGNvbXBhcmlzb24g
ZnVuY3Rpb24gdGhhdCBpbmR1Y2VzIGEgc3RyaWN0IHdlYWsgb3JkZXJpbmcKLSAgIC8vIQotICAg
Ly8hIDxiPkVmZmVjdHM8L2I+OiBUaGlzIGZ1bmN0aW9uIHNvcnRzIHRoZSBsaXN0ICp0aGlzIGFj
Y29yZGluZyB0byBwLiBUaGUgc29ydCBpcwotICAgLy8hICAgc3RhYmxlLCB0aGF0IGlzLCB0aGUg
cmVsYXRpdmUgb3JkZXIgb2YgZXF1aXZhbGVudCBlbGVtZW50cyBpcyBwcmVzZXJ2ZWQuCi0gICAv
LyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBJZiB2YWx1ZV90cmFpdHM6Om5vZGVfdHJhaXRzOjpu
b2RlCi0gICAvLyEgICBjb25zdHJ1Y3RvciB0aHJvd3MgKHRoaXMgZG9lcyBub3QgaGFwcGVuIHdp
dGggcHJlZGVmaW5lZCBCb29zdC5JbnRydXNpdmUgaG9va3MpCi0gICAvLyEgICBvciB0aGUgcHJl
ZGljYXRlIHRocm93cy4gQmFzaWMgZ3VhcmFudGVlLgotICAgLy8hCi0gICAvLyEgPGI+Tm90ZXM8
L2I+OiBUaGlzIHdvbid0IHRocm93IGlmIGxpc3RfYmFzZV9ob29rPD4gb3IKLSAgIC8vISAgIGxp
c3RfbWVtYmVyX2hvb2sgYXJlIHVzZWQuCi0gICAvLyEgICBJdGVyYXRvcnMgYW5kIHJlZmVyZW5j
ZXMgYXJlIG5vdCBpbnZhbGlkYXRlZC4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+
OiBUaGUgbnVtYmVyIG9mIGNvbXBhcmlzb25zIGlzIGFwcHJveGltYXRlbHkgTiBsb2cgTiwgd2hl
cmUgTgotICAgLy8hICAgaXMgdGhlIGxpc3QncyBzaXplLgotICAgdGVtcGxhdGU8Y2xhc3MgUHJl
ZGljYXRlPgotICAgdm9pZCBzb3J0KFByZWRpY2F0ZSBwKQotICAgewotICAgICAgaWYobm9kZV90
cmFpdHM6OmdldF9uZXh0KHRoaXMtPmdldF9yb290X25vZGUoKSkKLSAgICAgICAgICE9IG5vZGVf
dHJhaXRzOjpnZXRfcHJldmlvdXModGhpcy0+Z2V0X3Jvb3Rfbm9kZSgpKSl7Ci0gICAgICAgICBs
aXN0X2ltcGwgY2FycnkodGhpcy0+cHJpdl92YWx1ZV90cmFpdHMoKSk7Ci0gICAgICAgICBkZXRh
aWw6OmFycmF5X2luaXRpYWxpemVyPGxpc3RfaW1wbCwgNjQ+IGNvdW50ZXIodGhpcy0+cHJpdl92
YWx1ZV90cmFpdHMoKSk7Ci0gICAgICAgICBpbnQgZmlsbCA9IDA7Ci0gICAgICAgICB3aGlsZSgh
dGhpcy0+ZW1wdHkoKSl7Ci0gICAgICAgICAgICBjYXJyeS5zcGxpY2UoY2FycnkuY2JlZ2luKCks
ICp0aGlzLCB0aGlzLT5jYmVnaW4oKSk7Ci0gICAgICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAg
ICAgICB3aGlsZShpIDwgZmlsbCAmJiAhY291bnRlcltpXS5lbXB0eSgpKSB7Ci0gICAgICAgICAg
ICAgICBjb3VudGVyW2ldLm1lcmdlKGNhcnJ5LCBwKTsKLSAgICAgICAgICAgICAgIGNhcnJ5LnN3
YXAoY291bnRlcltpKytdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhcnJ5LnN3YXAo
Y291bnRlcltpXSk7Ci0gICAgICAgICAgICBpZihpID09IGZpbGwpCi0gICAgICAgICAgICAgICAr
K2ZpbGw7Ci0gICAgICAgICB9Ci0gICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGZpbGw7ICsr
aSkKLSAgICAgICAgICAgIGNvdW50ZXJbaV0ubWVyZ2UoY291bnRlcltpLTFdLCBwKTsKLSAgICAg
ICAgIHRoaXMtPnN3YXAoY291bnRlcltmaWxsLTFdKTsKLSAgICAgIH0KLSAgIH0KLQotICAgLy8h
IDxiPkVmZmVjdHM8L2I+OiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIG9mIHgncyBlbGVtZW50
cyBhbmQgaW5zZXJ0cyB0aGVtCi0gICAvLyEgICBpbiBvcmRlciBpbnRvICp0aGlzIGFjY29yZGlu
ZyB0byBzdGQ6Omxlc3M8dmFsdWVfdHlwZT4uIFRoZSBtZXJnZSBpcyBzdGFibGU7Ci0gICAvLyEg
ICB0aGF0IGlzLCBpZiBhbiBlbGVtZW50IGZyb20gKnRoaXMgaXMgZXF1aXZhbGVudCB0byBvbmUg
ZnJvbSB4LCB0aGVuIHRoZSBlbGVtZW50Ci0gICAvLyEgICBmcm9tICp0aGlzIHdpbGwgcHJlY2Vk
ZSB0aGUgb25lIGZyb20geC4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwvYj46IElmIHN0ZDo6
bGVzczx2YWx1ZV90eXBlPiB0aHJvd3MuIEJhc2ljIGd1YXJhbnRlZS4KLSAgIC8vIQotICAgLy8h
IDxiPkNvbXBsZXhpdHk8L2I+OiBUaGlzIGZ1bmN0aW9uIGlzIGxpbmVhciB0aW1lOiBpdCBwZXJm
b3JtcyBhdCBtb3N0Ci0gICAvLyEgICBzaXplKCkgKyB4LnNpemUoKSAtIDEgY29tcGFyaXNvbnMu
Ci0gICAvLyEKLSAgIC8vISA8Yj5Ob3RlPC9iPjogSXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzIGFy
ZSBub3QgaW52YWxpZGF0ZWQKLSAgIHZvaWQgbWVyZ2UobGlzdF9pbXBsJiB4KQotICAgeyB0aGlz
LT5tZXJnZSh4LCBzdGQ6Omxlc3M8dmFsdWVfdHlwZT4oKSk7IH0KLQotICAgLy8hIDxiPlJlcXVp
cmVzPC9iPjogcCBtdXN0IGJlIGEgY29tcGFyaXNvbiBmdW5jdGlvbiB0aGF0IGluZHVjZXMgYSBz
dHJpY3Qgd2VhawotICAgLy8hICAgb3JkZXJpbmcgYW5kIGJvdGggKnRoaXMgYW5kIHggbXVzdCBi
ZSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoYXQgb3JkZXJpbmcKLSAgIC8vISAgIFRoZSBsaXN0cyB4
IGFuZCAqdGhpcyBtdXN0IGJlIGRpc3RpbmN0LgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0czwv
Yj46IFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbGwgb2YgeCdzIGVsZW1lbnRzIGFuZCBpbnNlcnRz
IHRoZW0KLSAgIC8vISAgIGluIG9yZGVyIGludG8gKnRoaXMuIFRoZSBtZXJnZSBpcyBzdGFibGU7
IHRoYXQgaXMsIGlmIGFuIGVsZW1lbnQgZnJvbSAqdGhpcyBpcwotICAgLy8hICAgZXF1aXZhbGVu
dCB0byBvbmUgZnJvbSB4LCB0aGVuIHRoZSBlbGVtZW50IGZyb20gKnRoaXMgd2lsbCBwcmVjZWRl
IHRoZSBvbmUgZnJvbSB4LgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogSWYgdGhlIHBy
ZWRpY2F0ZSB0aHJvd3MuIEJhc2ljIGd1YXJhbnRlZS4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBs
ZXhpdHk8L2I+OiBUaGlzIGZ1bmN0aW9uIGlzIGxpbmVhciB0aW1lOiBpdCBwZXJmb3JtcyBhdCBt
b3N0Ci0gICAvLyEgICBzaXplKCkgKyB4LnNpemUoKSAtIDEgY29tcGFyaXNvbnMuCi0gICAvLyEK
LSAgIC8vISA8Yj5Ob3RlPC9iPjogSXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzIGFyZSBub3QgaW52
YWxpZGF0ZWQuCi0gICB0ZW1wbGF0ZTxjbGFzcyBQcmVkaWNhdGU+Ci0gICB2b2lkIG1lcmdlKGxp
c3RfaW1wbCYgeCwgUHJlZGljYXRlIHApCi0gICB7Ci0gICAgICBjb25zdF9pdGVyYXRvciBlKHRo
aXMtPmNlbmQoKSksIGV4KHguY2VuZCgpKTsKLSAgICAgIGNvbnN0X2l0ZXJhdG9yIGIodGhpcy0+
Y2JlZ2luKCkpOwotICAgICAgd2hpbGUoIXguZW1wdHkoKSl7Ci0gICAgICAgICBjb25zdF9pdGVy
YXRvciBpeCh4LmNiZWdpbigpKTsKLSAgICAgICAgIHdoaWxlIChiICE9IGUgJiYgIXAoKml4LCAq
YikpewotICAgICAgICAgICAgKytiOwotICAgICAgICAgfQotICAgICAgICAgaWYoYiA9PSBlKXsK
LSAgICAgICAgICAgIC8vTm93IHRyYW5zZmVyIHRoZSByZXN0IHRvIHRoZSBlbmQgb2YgdGhlIGNv
bnRhaW5lcgotICAgICAgICAgICAgdGhpcy0+c3BsaWNlKGUsIHgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICB9Ci0gICAgICAgICBlbHNlewotICAgICAgICAgICAgc2l6ZV90eXBlIG4o
MCk7Ci0gICAgICAgICAgICBkb3sKLSAgICAgICAgICAgICAgICsraXg7ICsrbjsKLSAgICAgICAg
ICAgIH0gd2hpbGUoaXggIT0gZXggJiYgcCgqaXgsICpiKSk7Ci0gICAgICAgICAgICB0aGlzLT5z
cGxpY2UoYiwgeCwgeC5iZWdpbigpLCBpeCwgbik7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICB9
Ci0KLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogUmV2ZXJzZXMgdGhlIG9yZGVyIG9mIGVsZW1lbnRz
IGluIHRoZSBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAg
IC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBUaGlzIGZ1bmN0aW9uIGlzIGxpbmVhciB0
aW1lLgotICAgLy8hCi0gICAvLyEgPGI+Tm90ZTwvYj46IEl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNl
cyBhcmUgbm90IGludmFsaWRhdGVkCi0gICB2b2lkIHJldmVyc2UoKQotICAgeyAgbm9kZV9hbGdv
cml0aG1zOjpyZXZlcnNlKHRoaXMtPmdldF9yb290X25vZGUoKSk7ICAgfQotCi0gICAvLyEgPGI+
RWZmZWN0czwvYj46IFJlbW92ZXMgYWxsIHRoZSBlbGVtZW50cyB0aGF0IGNvbXBhcmUgZXF1YWwg
dG8gdmFsdWUuCi0gICAvLyEgICBObyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkLgotICAgLy8hCi0g
ICAvLyEgPGI+VGhyb3dzPC9iPjogSWYgc3RkOjplcXVhbF90bzx2YWx1ZV90eXBlPiB0aHJvd3Mu
IEJhc2ljIGd1YXJhbnRlZS4KLSAgIC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBMaW5l
YXIgdGltZS4gSXQgcGVyZm9ybXMgZXhhY3RseSBzaXplKCkgY29tcGFyaXNvbnMgZm9yIGVxdWFs
aXR5LgotICAgLy8hCi0gICAvLyEgPGI+Tm90ZTwvYj46IFRoZSByZWxhdGl2ZSBvcmRlciBvZiBl
bGVtZW50cyB0aGF0IGFyZSBub3QgcmVtb3ZlZCBpcyB1bmNoYW5nZWQsCi0gICAvLyEgICBhbmQg
aXRlcmF0b3JzIHRvIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCByZW1vdmVkIHJlbWFpbiB2YWxpZC4K
LSAgIHZvaWQgcmVtb3ZlKGNvbnN0X3JlZmVyZW5jZSB2YWx1ZSkKLSAgIHsgIHRoaXMtPnJlbW92
ZV9pZihkZXRhaWw6OmVxdWFsX3RvX3ZhbHVlPGNvbnN0X3JlZmVyZW5jZT4odmFsdWUpKTsgIH0K
LQotICAgLy8hIDxiPlJlcXVpcmVzPC9iPjogRGlzcG9zZXI6Om9wZXJhdG9yKCkocG9pbnRlcikg
c2hvdWxkbid0IHRocm93LgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IFJlbW92ZXMg
YWxsIHRoZSBlbGVtZW50cyB0aGF0IGNvbXBhcmUgZXF1YWwgdG8gdmFsdWUuCi0gICAvLyEgICBE
aXNwb3Nlcjo6b3BlcmF0b3IoKShwb2ludGVyKSBpcyBjYWxsZWQgZm9yIGV2ZXJ5IHJlbW92ZWQg
ZWxlbWVudC4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwvYj46IElmIHN0ZDo6ZXF1YWxfdG88
dmFsdWVfdHlwZT4gdGhyb3dzLiBCYXNpYyBndWFyYW50ZWUuCi0gICAvLyEKLSAgIC8vISA8Yj5D
b21wbGV4aXR5PC9iPjogTGluZWFyIHRpbWUuIEl0IHBlcmZvcm1zIGV4YWN0bHkgc2l6ZSgpIGNv
bXBhcmlzb25zIGZvciBlcXVhbGl0eS4KLSAgIC8vIQotICAgLy8hIDxiPk5vdGU8L2I+OiBUaGUg
cmVsYXRpdmUgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUgbm90IHJlbW92ZWQgaXMgdW5jaGFu
Z2VkLAotICAgLy8hICAgYW5kIGl0ZXJhdG9ycyB0byBlbGVtZW50cyB0aGF0IGFyZSBub3QgcmVt
b3ZlZCByZW1haW4gdmFsaWQuCi0gICB0ZW1wbGF0ZTxjbGFzcyBEaXNwb3Nlcj4KLSAgIHZvaWQg
cmVtb3ZlX2FuZF9kaXNwb3NlKGNvbnN0X3JlZmVyZW5jZSB2YWx1ZSwgRGlzcG9zZXIgZGlzcG9z
ZXIpCi0gICB7ICB0aGlzLT5yZW1vdmVfYW5kX2Rpc3Bvc2VfaWYoZGV0YWlsOjplcXVhbF90b192
YWx1ZTxjb25zdF9yZWZlcmVuY2U+KHZhbHVlKSwgZGlzcG9zZXIpOyAgfQotCi0gICAvLyEgPGI+
RWZmZWN0czwvYj46IFJlbW92ZXMgYWxsIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggYSBzcGVjaWZp
ZWQKLSAgIC8vISAgIHByZWRpY2F0ZSBpcyBzYXRpc2ZpZWQuIE5vIGRlc3RydWN0b3JzIGFyZSBj
YWxsZWQuCi0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBJZiBwcmVkIHRocm93cy4gQmFz
aWMgZ3VhcmFudGVlLgotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IExpbmVhciB0
aW1lLiBJdCBwZXJmb3JtcyBleGFjdGx5IHNpemUoKSBjYWxscyB0byB0aGUgcHJlZGljYXRlLgot
ICAgLy8hCi0gICAvLyEgPGI+Tm90ZTwvYj46IFRoZSByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50
cyB0aGF0IGFyZSBub3QgcmVtb3ZlZCBpcyB1bmNoYW5nZWQsCi0gICAvLyEgICBhbmQgaXRlcmF0
b3JzIHRvIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCByZW1vdmVkIHJlbWFpbiB2YWxpZC4KLSAgIHRl
bXBsYXRlPGNsYXNzIFByZWQ+Ci0gICB2b2lkIHJlbW92ZV9pZihQcmVkIHByZWQpCi0gICB7Ci0g
ICAgICBjb25zdCBub2RlX3B0ciByb290X25vZGUgPSB0aGlzLT5nZXRfcm9vdF9ub2RlKCk7Ci0g
ICAgICB0eXBlbmFtZSBub2RlX2FsZ29yaXRobXM6OnN0YWJsZV9wYXJ0aXRpb25faW5mbyBpbmZv
OwotICAgICAgbm9kZV9hbGdvcml0aG1zOjpzdGFibGVfcGFydGl0aW9uCi0gICAgICAgICAobm9k
ZV90cmFpdHM6OmdldF9uZXh0KHJvb3Rfbm9kZSksIHJvb3Rfbm9kZSwgZGV0YWlsOjprZXlfbm9k
ZXB0cl9jb21wPFByZWQsIHZhbHVlX3RyYWl0cz4ocHJlZCwgJnRoaXMtPnByaXZfdmFsdWVfdHJh
aXRzKCkpLCBpbmZvKTsKLSAgICAgIC8vSW52YXJpYW50cyBwcmVzZXJ2ZWQgYnkgc3RhYmxlX3Bh
cnRpdGlvbiBzbyBlcmFzZSBjYW4gYmUgc2FmZWx5IGNhbGxlZAotICAgICAgLy9UaGUgZmlyc3Qg
ZWxlbWVudCBtaWdodCBoYXZlIGNoYW5nZWQgc28gY2FsY3VsYXRlIGl0IGFnYWluCi0gICAgICB0
aGlzLT5lcmFzZSggY29uc3RfaXRlcmF0b3Iobm9kZV90cmFpdHM6OmdldF9uZXh0KHJvb3Rfbm9k
ZSksIHRoaXMtPnByaXZfdmFsdWVfdHJhaXRzX3B0cigpKQotICAgICAgICAgICAgICAgICAsIGNv
bnN0X2l0ZXJhdG9yKGluZm8uYmVnXzJzdF9wYXJ0aXRpb24sIHRoaXMtPnByaXZfdmFsdWVfdHJh
aXRzX3B0cigpKQotICAgICAgICAgICAgICAgICAsIGluZm8ubnVtXzFzdF9wYXJ0aXRpb24pOwot
ICAgfQotCi0gICAvLyEgPGI+UmVxdWlyZXM8L2I+OiBEaXNwb3Nlcjo6b3BlcmF0b3IoKShwb2lu
dGVyKSBzaG91bGRuJ3QgdGhyb3cuCi0gICAvLyEKLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogUmVt
b3ZlcyBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHNwZWNpZmllZAotICAgLy8hICAgcHJl
ZGljYXRlIGlzIHNhdGlzZmllZC4KLSAgIC8vISAgIERpc3Bvc2VyOjpvcGVyYXRvcigpKHBvaW50
ZXIpIGlzIGNhbGxlZCBmb3IgZXZlcnkgcmVtb3ZlZCBlbGVtZW50LgotICAgLy8hCi0gICAvLyEg
PGI+VGhyb3dzPC9iPjogSWYgcHJlZCB0aHJvd3MuIEJhc2ljIGd1YXJhbnRlZS4KLSAgIC8vIQot
ICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBMaW5lYXIgdGltZS4gSXQgcGVyZm9ybXMgZXhhY3Rs
eSBzaXplKCkgY29tcGFyaXNvbnMgZm9yIGVxdWFsaXR5LgotICAgLy8hCi0gICAvLyEgPGI+Tm90
ZTwvYj46IFRoZSByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50cyB0aGF0IGFyZSBub3QgcmVtb3Zl
ZCBpcyB1bmNoYW5nZWQsCi0gICAvLyEgICBhbmQgaXRlcmF0b3JzIHRvIGVsZW1lbnRzIHRoYXQg
YXJlIG5vdCByZW1vdmVkIHJlbWFpbiB2YWxpZC4KLSAgIHRlbXBsYXRlPGNsYXNzIFByZWQsIGNs
YXNzIERpc3Bvc2VyPgotICAgdm9pZCByZW1vdmVfYW5kX2Rpc3Bvc2VfaWYoUHJlZCBwcmVkLCBE
aXNwb3NlciBkaXNwb3NlcikKLSAgIHsKLSAgICAgIGNvbnN0IG5vZGVfcHRyIHJvb3Rfbm9kZSA9
IHRoaXMtPmdldF9yb290X25vZGUoKTsKLSAgICAgIHR5cGVuYW1lIG5vZGVfYWxnb3JpdGhtczo6
c3RhYmxlX3BhcnRpdGlvbl9pbmZvIGluZm87Ci0gICAgICBub2RlX2FsZ29yaXRobXM6OnN0YWJs
ZV9wYXJ0aXRpb24KLSAgICAgICAgIChub2RlX3RyYWl0czo6Z2V0X25leHQocm9vdF9ub2RlKSwg
cm9vdF9ub2RlLCBkZXRhaWw6OmtleV9ub2RlcHRyX2NvbXA8UHJlZCwgdmFsdWVfdHJhaXRzPihw
cmVkLCAmdGhpcy0+cHJpdl92YWx1ZV90cmFpdHMoKSksIGluZm8pOwotICAgICAgLy9JbnZhcmlh
bnRzIHByZXNlcnZlZCBieSBzdGFibGVfcGFydGl0aW9uIHNvIGVyYXNlIGNhbiBiZSBzYWZlbHkg
Y2FsbGVkCi0gICAgICAvL1RoZSBmaXJzdCBlbGVtZW50IG1pZ2h0IGhhdmUgY2hhbmdlZCBzbyBj
YWxjdWxhdGUgaXQgYWdhaW4KLSAgICAgIHRoaXMtPmVyYXNlX2FuZF9kaXNwb3NlKCBjb25zdF9p
dGVyYXRvcihub2RlX3RyYWl0czo6Z2V0X25leHQocm9vdF9ub2RlKSwgdGhpcy0+cHJpdl92YWx1
ZV90cmFpdHNfcHRyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgY29uc3RfaXRl
cmF0b3IoaW5mby5iZWdfMnN0X3BhcnRpdGlvbiwgdGhpcy0+cHJpdl92YWx1ZV90cmFpdHNfcHRy
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZGlzcG9zZXIpOwotICAgfQotCi0g
ICAvLyEgPGI+RWZmZWN0czwvYj46IFJlbW92ZXMgYWRqYWNlbnQgZHVwbGljYXRlIGVsZW1lbnRz
IG9yIGFkamFjZW50Ci0gICAvLyEgICBlbGVtZW50cyB0aGF0IGFyZSBlcXVhbCBmcm9tIHRoZSBs
aXN0LiBObyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkLgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dz
PC9iPjogSWYgc3RkOjplcXVhbF90bzx2YWx1ZV90eXBlIHRocm93cy4gQmFzaWMgZ3VhcmFudGVl
LgotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IExpbmVhciB0aW1lIChzaXplKCkt
MSBjb21wYXJpc29ucyBjYWxscyB0byBwcmVkKCkpLgotICAgLy8hCi0gICAvLyEgPGI+Tm90ZTwv
Yj46IFRoZSByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50cyB0aGF0IGFyZSBub3QgcmVtb3ZlZCBp
cyB1bmNoYW5nZWQsCi0gICAvLyEgICBhbmQgaXRlcmF0b3JzIHRvIGVsZW1lbnRzIHRoYXQgYXJl
IG5vdCByZW1vdmVkIHJlbWFpbiB2YWxpZC4KLSAgIHZvaWQgdW5pcXVlKCkKLSAgIHsgIHRoaXMt
PnVuaXF1ZV9hbmRfZGlzcG9zZShzdGQ6OmVxdWFsX3RvPHZhbHVlX3R5cGU+KCksIGRldGFpbDo6
bnVsbF9kaXNwb3NlcigpKTsgIH0KLQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBSZW1vdmVzIGFk
amFjZW50IGR1cGxpY2F0ZSBlbGVtZW50cyBvciBhZGphY2VudAotICAgLy8hICAgZWxlbWVudHMg
dGhhdCBzYXRpc2Z5IHNvbWUgYmluYXJ5IHByZWRpY2F0ZSBmcm9tIHRoZSBsaXN0LgotICAgLy8h
ICAgTm8gZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZC4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwv
Yj46IElmIHByZWQgdGhyb3dzLiBCYXNpYyBndWFyYW50ZWUuCi0gICAvLyEKLSAgIC8vISA8Yj5D
b21wbGV4aXR5PC9iPjogTGluZWFyIHRpbWUgKHNpemUoKS0xIGNvbXBhcmlzb25zIGVxdWFsaXR5
IGNvbXBhcmlzb25zKS4KLSAgIC8vIQotICAgLy8hIDxiPk5vdGU8L2I+OiBUaGUgcmVsYXRpdmUg
b3JkZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUgbm90IHJlbW92ZWQgaXMgdW5jaGFuZ2VkLAotICAg
Ly8hICAgYW5kIGl0ZXJhdG9ycyB0byBlbGVtZW50cyB0aGF0IGFyZSBub3QgcmVtb3ZlZCByZW1h
aW4gdmFsaWQuCi0gICB0ZW1wbGF0ZTxjbGFzcyBCaW5hcnlQcmVkaWNhdGU+Ci0gICB2b2lkIHVu
aXF1ZShCaW5hcnlQcmVkaWNhdGUgcHJlZCkKLSAgIHsgIHRoaXMtPnVuaXF1ZV9hbmRfZGlzcG9z
ZShwcmVkLCBkZXRhaWw6Om51bGxfZGlzcG9zZXIoKSk7ICB9Ci0KLSAgIC8vISA8Yj5SZXF1aXJl
czwvYj46IERpc3Bvc2VyOjpvcGVyYXRvcigpKHBvaW50ZXIpIHNob3VsZG4ndCB0aHJvdy4KLSAg
IC8vIQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBSZW1vdmVzIGFkamFjZW50IGR1cGxpY2F0ZSBl
bGVtZW50cyBvciBhZGphY2VudAotICAgLy8hICAgZWxlbWVudHMgdGhhdCBhcmUgZXF1YWwgZnJv
bSB0aGUgbGlzdC4KLSAgIC8vISAgIERpc3Bvc2VyOjpvcGVyYXRvcigpKHBvaW50ZXIpIGlzIGNh
bGxlZCBmb3IgZXZlcnkgcmVtb3ZlZCBlbGVtZW50LgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dz
PC9iPjogSWYgc3RkOjplcXVhbF90bzx2YWx1ZV90eXBlIHRocm93cy4gQmFzaWMgZ3VhcmFudGVl
LgotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IExpbmVhciB0aW1lIChzaXplKCkt
MSkgY29tcGFyaXNvbnMgZXF1YWxpdHkgY29tcGFyaXNvbnMuCi0gICAvLyEKLSAgIC8vISA8Yj5O
b3RlPC9iPjogVGhlIHJlbGF0aXZlIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCByZW1v
dmVkIGlzIHVuY2hhbmdlZCwKLSAgIC8vISAgIGFuZCBpdGVyYXRvcnMgdG8gZWxlbWVudHMgdGhh
dCBhcmUgbm90IHJlbW92ZWQgcmVtYWluIHZhbGlkLgotICAgdGVtcGxhdGU8Y2xhc3MgRGlzcG9z
ZXI+Ci0gICB2b2lkIHVuaXF1ZV9hbmRfZGlzcG9zZShEaXNwb3NlciBkaXNwb3NlcikKLSAgIHsg
IHRoaXMtPnVuaXF1ZV9hbmRfZGlzcG9zZShzdGQ6OmVxdWFsX3RvPHZhbHVlX3R5cGU+KCksIGRp
c3Bvc2VyKTsgIH0KLQotICAgLy8hIDxiPlJlcXVpcmVzPC9iPjogRGlzcG9zZXI6Om9wZXJhdG9y
KCkocG9pbnRlcikgc2hvdWxkbid0IHRocm93LgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0czwv
Yj46IFJlbW92ZXMgYWRqYWNlbnQgZHVwbGljYXRlIGVsZW1lbnRzIG9yIGFkamFjZW50Ci0gICAv
LyEgICBlbGVtZW50cyB0aGF0IHNhdGlzZnkgc29tZSBiaW5hcnkgcHJlZGljYXRlIGZyb20gdGhl
IGxpc3QuCi0gICAvLyEgICBEaXNwb3Nlcjo6b3BlcmF0b3IoKShwb2ludGVyKSBpcyBjYWxsZWQg
Zm9yIGV2ZXJ5IHJlbW92ZWQgZWxlbWVudC4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwvYj46
IElmIHByZWQgdGhyb3dzLiBCYXNpYyBndWFyYW50ZWUuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21w
bGV4aXR5PC9iPjogTGluZWFyIHRpbWUgKHNpemUoKS0xKSBjb21wYXJpc29ucyBlcXVhbGl0eSBj
b21wYXJpc29ucy4KLSAgIC8vIQotICAgLy8hIDxiPk5vdGU8L2I+OiBUaGUgcmVsYXRpdmUgb3Jk
ZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUgbm90IHJlbW92ZWQgaXMgdW5jaGFuZ2VkLAotICAgLy8h
ICAgYW5kIGl0ZXJhdG9ycyB0byBlbGVtZW50cyB0aGF0IGFyZSBub3QgcmVtb3ZlZCByZW1haW4g
dmFsaWQuCi0gICB0ZW1wbGF0ZTxjbGFzcyBCaW5hcnlQcmVkaWNhdGUsIGNsYXNzIERpc3Bvc2Vy
PgotICAgdm9pZCB1bmlxdWVfYW5kX2Rpc3Bvc2UoQmluYXJ5UHJlZGljYXRlIHByZWQsIERpc3Bv
c2VyIGRpc3Bvc2VyKQotICAgewotICAgICAgY29uc3RfaXRlcmF0b3IgaXRlbmQodGhpcy0+Y2Vu
ZCgpKTsKLSAgICAgIGNvbnN0X2l0ZXJhdG9yIGN1cih0aGlzLT5jYmVnaW4oKSk7Ci0KLSAgICAg
IGlmKGN1ciAhPSBpdGVuZCl7Ci0gICAgICAgICBjb25zdF9pdGVyYXRvciBhZnRlcihjdXIpOwot
ICAgICAgICAgKythZnRlcjsKLSAgICAgICAgIHdoaWxlKGFmdGVyICE9IGl0ZW5kKXsKLSAgICAg
ICAgICAgIGlmKHByZWQoKmN1ciwgKmFmdGVyKSl7Ci0gICAgICAgICAgICAgICBhZnRlciA9IHRo
aXMtPmVyYXNlX2FuZF9kaXNwb3NlKGFmdGVyLCBkaXNwb3Nlcik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICAgY3VyID0gYWZ0ZXI7Ci0gICAgICAgICAg
ICAgICArK2FmdGVyOwotICAgICAgICAgICAgfQotICAgICAgICAgfQotICAgICAgfQotICAgfQot
Ci0gICAvLyEgPGI+UmVxdWlyZXM8L2I+OiB2YWx1ZSBtdXN0IGJlIGEgcmVmZXJlbmNlIHRvIGEg
dmFsdWUgaW5zZXJ0ZWQgaW4gYSBsaXN0LgotICAgLy8hCi0gICAvLyEgPGI+RWZmZWN0czwvYj46
IFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGNvbnN0X2l0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBl
bGVtZW50Ci0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAgLy8hCi0g
ICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IENvbnN0YW50IHRpbWUuCi0gICAvLyEKLSAgIC8vISA8
Yj5Ob3RlPC9iPjogSXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzIGFyZSBub3QgaW52YWxpZGF0ZWQu
Ci0gICAvLyEgICBUaGlzIHN0YXRpYyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgb25seSBpZiB0aGUg
PGk+dmFsdWUgdHJhaXRzPC9pPgotICAgLy8hICAgaXMgc3RhdGVsZXNzLgotICAgc3RhdGljIGl0
ZXJhdG9yIHNfaXRlcmF0b3JfdG8ocmVmZXJlbmNlIHZhbHVlKQotICAgewotICAgICAgQk9PU1Rf
U1RBVElDX0FTU0VSVCgoIXN0YXRlZnVsX3ZhbHVlX3RyYWl0cykpOwotICAgICAgQk9PU1RfSU5U
UlVTSVZFX0lOVkFSSUFOVF9BU1NFUlQoIW5vZGVfYWxnb3JpdGhtczo6aW5pdGVkKHZhbHVlX3Ry
YWl0czo6dG9fbm9kZV9wdHIodmFsdWUpKSk7Ci0gICAgICByZXR1cm4gaXRlcmF0b3IodmFsdWVf
dHJhaXRzOjp0b19ub2RlX3B0cih2YWx1ZSksIGNvbnN0X3ZhbHVlX3RyYWl0c19wdHIoKSk7Ci0g
ICB9Ci0KLSAgIC8vISA8Yj5SZXF1aXJlczwvYj46IHZhbHVlIG11c3QgYmUgYSBjb25zdCByZWZl
cmVuY2UgdG8gYSB2YWx1ZSBpbnNlcnRlZCBpbiBhIGxpc3QuCi0gICAvLyEKLSAgIC8vISA8Yj5F
ZmZlY3RzPC9iPjogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRv
IHRoZSBlbGVtZW50LgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAg
IC8vIQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudCB0aW1lLgotICAgLy8hCi0g
ICAvLyEgPGI+Tm90ZTwvYj46IEl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyBhcmUgbm90IGludmFs
aWRhdGVkLgotICAgLy8hICAgVGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIG9ubHkg
aWYgdGhlIDxpPnZhbHVlIHRyYWl0czwvaT4KLSAgIC8vISAgIGlzIHN0YXRlbGVzcy4KLSAgIHN0
YXRpYyBjb25zdF9pdGVyYXRvciBzX2l0ZXJhdG9yX3RvKGNvbnN0X3JlZmVyZW5jZSB2YWx1ZSkK
LSAgIHsKLSAgICAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoKCFzdGF0ZWZ1bF92YWx1ZV90cmFpdHMp
KTsKLSAgICAgIHJlZmVyZW5jZSByID0qZGV0YWlsOjp1bmNhc3QocG9pbnRlcl90cmFpdHM8Y29u
c3RfcG9pbnRlcj46OnBvaW50ZXJfdG8odmFsdWUpKTsKLSAgICAgIEJPT1NUX0lOVFJVU0lWRV9J
TlZBUklBTlRfQVNTRVJUKCFub2RlX2FsZ29yaXRobXM6OmluaXRlZCh2YWx1ZV90cmFpdHM6OnRv
X25vZGVfcHRyKHIpKSk7Ci0gICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IodmFsdWVfdHJhaXRz
Ojp0b19ub2RlX3B0cihyKSwgY29uc3RfdmFsdWVfdHJhaXRzX3B0cigpKTsKLSAgIH0KLQotICAg
Ly8hIDxiPlJlcXVpcmVzPC9iPjogdmFsdWUgbXVzdCBiZSBhIHJlZmVyZW5jZSB0byBhIHZhbHVl
IGluc2VydGVkIGluIGEgbGlzdC4KLSAgIC8vIQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBUaGlz
IGZ1bmN0aW9uIHJldHVybnMgYSBjb25zdF9pdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVu
dAotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8vIQotICAgLy8h
IDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudCB0aW1lLgotICAgLy8hCi0gICAvLyEgPGI+Tm90
ZTwvYj46IEl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyBhcmUgbm90IGludmFsaWRhdGVkLgotICAg
aXRlcmF0b3IgaXRlcmF0b3JfdG8ocmVmZXJlbmNlIHZhbHVlKQotICAgewotICAgICAgQk9PU1Rf
SU5UUlVTSVZFX0lOVkFSSUFOVF9BU1NFUlQoIW5vZGVfYWxnb3JpdGhtczo6aW5pdGVkKHRoaXMt
PnByaXZfdmFsdWVfdHJhaXRzKCkudG9fbm9kZV9wdHIodmFsdWUpKSk7Ci0gICAgICByZXR1cm4g
aXRlcmF0b3IodGhpcy0+cHJpdl92YWx1ZV90cmFpdHMoKS50b19ub2RlX3B0cih2YWx1ZSksIHRo
aXMtPnByaXZfdmFsdWVfdHJhaXRzX3B0cigpKTsKLSAgIH0KLQotICAgLy8hIDxiPlJlcXVpcmVz
PC9iPjogdmFsdWUgbXVzdCBiZSBhIGNvbnN0IHJlZmVyZW5jZSB0byBhIHZhbHVlIGluc2VydGVk
IGluIGEgbGlzdC4KLSAgIC8vIQotICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBUaGlzIGZ1bmN0aW9u
IHJldHVybnMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQuCi0gICAvLyEKLSAg
IC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0
eTwvYj46IENvbnN0YW50IHRpbWUuCi0gICAvLyEKLSAgIC8vISA8Yj5Ob3RlPC9iPjogSXRlcmF0
b3JzIGFuZCByZWZlcmVuY2VzIGFyZSBub3QgaW52YWxpZGF0ZWQuCi0gICBjb25zdF9pdGVyYXRv
ciBpdGVyYXRvcl90byhjb25zdF9yZWZlcmVuY2UgdmFsdWUpIGNvbnN0Ci0gICB7Ci0gICAgICBy
ZWZlcmVuY2UgciA9ICpkZXRhaWw6OnVuY2FzdChwb2ludGVyX3RyYWl0czxjb25zdF9wb2ludGVy
Pjo6cG9pbnRlcl90byh2YWx1ZSkpOwotICAgICAgQk9PU1RfSU5UUlVTSVZFX0lOVkFSSUFOVF9B
U1NFUlQoIW5vZGVfYWxnb3JpdGhtczo6aW5pdGVkKHRoaXMtPnByaXZfdmFsdWVfdHJhaXRzKCku
dG9fbm9kZV9wdHIocikpKTsKLSAgICAgIHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLT5wcml2
X3ZhbHVlX3RyYWl0cygpLnRvX25vZGVfcHRyKHIpLCB0aGlzLT5wcml2X3ZhbHVlX3RyYWl0c19w
dHIoKSk7Ci0gICB9Ci0KLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogQXNzZXJ0cyB0aGUgaW50ZWdy
aXR5IG9mIHRoZSBjb250YWluZXIuCi0gICAvLyEKLSAgIC8vISA8Yj5Db21wbGV4aXR5PC9iPjog
TGluZWFyIHRpbWUuCi0gICAvLyEKLSAgIC8vISA8Yj5Ob3RlPC9iPjogVGhlIG1ldGhvZCBoYXMg
bm8gZWZmZWN0IHdoZW4gYXNzZXJ0cyBhcmUgdHVybmVkIG9mZiAoZS5nLiwgd2l0aCBOREVCVUcp
LgotICAgLy8hICAgRXhwZXJpbWVudGFsIGZ1bmN0aW9uLCBpbnRlcmZhY2UgbWlnaHQgY2hhbmdl
IGluIGZ1dHVyZSB2ZXJzaW9ucy4KLSAgIHZvaWQgY2hlY2soKSBjb25zdAotICAgewotICAgICAg
Y29uc3Rfbm9kZV9wdHIgaGVhZGVyX3B0ciA9IGdldF9yb290X25vZGUoKTsKLSAgICAgIC8vIGhl
YWRlcidzIG5leHQgYW5kIHByZXYgYXJlIG5ldmVyIG51bGwKLSAgICAgIEJPT1NUX0lOVFJVU0lW
RV9JTlZBUklBTlRfQVNTRVJUKG5vZGVfdHJhaXRzOjpnZXRfbmV4dChoZWFkZXJfcHRyKSk7Ci0g
ICAgICBCT09TVF9JTlRSVVNJVkVfSU5WQVJJQU5UX0FTU0VSVChub2RlX3RyYWl0czo6Z2V0X3By
ZXZpb3VzKGhlYWRlcl9wdHIpKTsKLSAgICAgIC8vIGhlYWRlcidzIG5leHQgYW5kIHByZXYgZWl0
aGVyIGJvdGggcG9pbnQgdG8gaGVhZGVyIChlbXB0eSBsaXN0KSBvciBuZWl0aGVyIGRvZXMKLSAg
ICAgIEJPT1NUX0lOVFJVU0lWRV9JTlZBUklBTlRfQVNTRVJUKChub2RlX3RyYWl0czo6Z2V0X25l
eHQoaGVhZGVyX3B0cikgPT0gaGVhZGVyX3B0cikKLSAgICAgICAgID09IChub2RlX3RyYWl0czo6
Z2V0X3ByZXZpb3VzKGhlYWRlcl9wdHIpID09IGhlYWRlcl9wdHIpKTsKLSAgICAgIGlmIChub2Rl
X3RyYWl0czo6Z2V0X25leHQoaGVhZGVyX3B0cikgPT0gaGVhZGVyX3B0cikKLSAgICAgIHsKLSAg
ICAgICAgIGlmIChjb25zdGFudF90aW1lX3NpemUpCi0gICAgICAgICAgICBCT09TVF9JTlRSVVNJ
VkVfSU5WQVJJQU5UX0FTU0VSVCh0aGlzLT5wcml2X3NpemVfdHJhaXRzKCkuZ2V0X3NpemUoKSA9
PSAwKTsKLSAgICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIHNpemVfdCBub2RlX2NvdW50
ID0gMDsKLSAgICAgIGNvbnN0X25vZGVfcHRyIHAgPSBoZWFkZXJfcHRyOwotICAgICAgd2hpbGUg
KHRydWUpCi0gICAgICB7Ci0gICAgICAgICBjb25zdF9ub2RlX3B0ciBuZXh0X3AgPSBub2RlX3Ry
YWl0czo6Z2V0X25leHQocCk7Ci0gICAgICAgICBCT09TVF9JTlRSVVNJVkVfSU5WQVJJQU5UX0FT
U0VSVChuZXh0X3ApOwotICAgICAgICAgQk9PU1RfSU5UUlVTSVZFX0lOVkFSSUFOVF9BU1NFUlQo
bm9kZV90cmFpdHM6OmdldF9wcmV2aW91cyhuZXh0X3ApID09IHApOwotICAgICAgICAgcCA9IG5l
eHRfcDsKLSAgICAgICAgIGlmIChwID09IGhlYWRlcl9wdHIpIGJyZWFrOwotICAgICAgICAgKytu
b2RlX2NvdW50OwotICAgICAgfQotICAgICAgaWYgKGNvbnN0YW50X3RpbWVfc2l6ZSkKLSAgICAg
ICAgIEJPT1NUX0lOVFJVU0lWRV9JTlZBUklBTlRfQVNTRVJUKHRoaXMtPnByaXZfc2l6ZV90cmFp
dHMoKS5nZXRfc2l6ZSgpID09IG5vZGVfY291bnQpOwotICAgfQotCi0gICBmcmllbmQgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGxpc3RfaW1wbCAmeCwgY29uc3QgbGlzdF9pbXBsICZ5KQotICAgewot
ICAgICAgaWYoY29uc3RhbnRfdGltZV9zaXplICYmIHguc2l6ZSgpICE9IHkuc2l6ZSgpKXsKLSAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiA6OmJvb3N0OjppbnRy
dXNpdmU6OmFsZ29fZXF1YWwoeC5jYmVnaW4oKSwgeC5jZW5kKCksIHkuY2JlZ2luKCksIHkuY2Vu
ZCgpKTsKLSAgIH0KLQotICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBsaXN0X2ltcGwg
JngsIGNvbnN0IGxpc3RfaW1wbCAmeSkKLSAgIHsgIHJldHVybiAhKHggPT0geSk7IH0KLQotICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGxpc3RfaW1wbCAmeCwgY29uc3QgbGlzdF9pbXBs
ICZ5KQotICAgeyAgcmV0dXJuIDo6Ym9vc3Q6OmludHJ1c2l2ZTo6YWxnb19sZXhpY29ncmFwaGlj
YWxfY29tcGFyZSh4LmJlZ2luKCksIHguZW5kKCksIHkuYmVnaW4oKSwgeS5lbmQoKSk7ICB9Ci0K
LSAgIGZyaWVuZCBib29sIG9wZXJhdG9yPihjb25zdCBsaXN0X2ltcGwgJngsIGNvbnN0IGxpc3Rf
aW1wbCAmeSkKLSAgIHsgIHJldHVybiB5IDwgeDsgIH0KLQotICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I8PShjb25zdCBsaXN0X2ltcGwgJngsIGNvbnN0IGxpc3RfaW1wbCAmeSkKLSAgIHsgIHJldHVy
biAhKHkgPCB4KTsgIH0KLQotICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdCBsaXN0X2lt
cGwgJngsIGNvbnN0IGxpc3RfaW1wbCAmeSkKLSAgIHsgIHJldHVybiAhKHggPCB5KTsgIH0KLQot
ICAgZnJpZW5kIHZvaWQgc3dhcChsaXN0X2ltcGwgJngsIGxpc3RfaW1wbCAmeSkKLSAgIHsgIHgu
c3dhcCh5KTsgIH0KLQotICAgLy8vIEBjb25kCi0KLSAgIHByaXZhdGU6Ci0gICBzdGF0aWMgbGlz
dF9pbXBsICZwcml2X2NvbnRhaW5lcl9mcm9tX2VuZF9pdGVyYXRvcihjb25zdCBjb25zdF9pdGVy
YXRvciAmZW5kX2l0ZXJhdG9yKQotICAgewotICAgICAgQk9PU1RfU1RBVElDX0FTU0VSVCgoaGFz
X2NvbnRhaW5lcl9mcm9tX2l0ZXJhdG9yKSk7Ci0gICAgICBub2RlX3B0ciBwID0gZW5kX2l0ZXJh
dG9yLnBvaW50ZWRfbm9kZSgpOwotICAgICAgaGVhZGVyX2hvbGRlcl90eXBlKiBoID0gaGVhZGVy
X2hvbGRlcl90eXBlOjpnZXRfaG9sZGVyKHApOwotICAgICAgcm9vdF9wbHVzX3NpemUqIHIgPSBk
ZXRhaWw6OnBhcmVudF9mcm9tX21lbWJlcgotICAgICAgICAgPCByb290X3BsdXNfc2l6ZSwgaGVh
ZGVyX2hvbGRlcl90eXBlPihoLCAmcm9vdF9wbHVzX3NpemU6Om1faGVhZGVyKTsKLSAgICAgIGRh
dGFfdCAqZCA9IGRldGFpbDo6cGFyZW50X2Zyb21fbWVtYmVyPGRhdGFfdCwgcm9vdF9wbHVzX3Np
emU+Ci0gICAgICAgICAoIHIsICZkYXRhX3Q6OnJvb3RfcGx1c19zaXplXyk7Ci0gICAgICBsaXN0
X2ltcGwgKnMgID0gZGV0YWlsOjpwYXJlbnRfZnJvbV9tZW1iZXI8bGlzdF9pbXBsLCBkYXRhX3Q+
KGQsICZsaXN0X2ltcGw6OmRhdGFfKTsKLSAgICAgIHJldHVybiAqczsKLSAgIH0KLSAgIC8vLyBA
ZW5kY29uZAotfTsKLQotCi0vLyEgSGVscGVyIG1ldGFmdW5jdGlvbiB0byBkZWZpbmUgYSBcYyBs
aXN0IHRoYXQgeWllbGRzIHRvIHRoZSBzYW1lIHR5cGUgd2hlbiB0aGUKLS8vISBzYW1lIG9wdGlv
bnMgKGVpdGhlciBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHkpIGFyZSB1c2VkLgotI2lmIGRlZmlu
ZWQoQk9PU1RfSU5UUlVTSVZFX0RPWFlHRU5fSU5WT0tFRCkgfHwgZGVmaW5lZChCT09TVF9JTlRS
VVNJVkVfVkFSSUFESUNfVEVNUExBVEVTKQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgLi4uT3B0
aW9ucz4KLSNlbHNlCi10ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBPMSA9IHZvaWQsIGNsYXNzIE8y
ID0gdm9pZCwgY2xhc3MgTzMgPSB2b2lkLCBjbGFzcyBPNCA9IHZvaWQ+Ci0jZW5kaWYKLXN0cnVj
dCBtYWtlX2xpc3QKLXsKLSAgIC8vLyBAY29uZAotICAgdHlwZWRlZiB0eXBlbmFtZSBwYWNrX29w
dGlvbnMKLSAgICAgIDwgbGlzdF9kZWZhdWx0cywKLSAgICAgICAgICNpZiAhZGVmaW5lZChCT09T
VF9JTlRSVVNJVkVfVkFSSUFESUNfVEVNUExBVEVTKQotICAgICAgICAgTzEsIE8yLCBPMywgTzQK
LSAgICAgICAgICNlbHNlCi0gICAgICAgICBPcHRpb25zLi4uCi0gICAgICAgICAjZW5kaWYKLSAg
ICAgID46OnR5cGUgcGFja2VkX29wdGlvbnM7Ci0KLSAgIHR5cGVkZWYgdHlwZW5hbWUgZGV0YWls
OjpnZXRfdmFsdWVfdHJhaXRzCi0gICAgICA8VCwgdHlwZW5hbWUgcGFja2VkX29wdGlvbnM6OnBy
b3RvX3ZhbHVlX3RyYWl0cz46OnR5cGUgdmFsdWVfdHJhaXRzOwotICAgdHlwZWRlZiBsaXN0X2lt
cGwKLSAgICAgIDwKLSAgICAgICAgIHZhbHVlX3RyYWl0cywKLSAgICAgICAgIHR5cGVuYW1lIHBh
Y2tlZF9vcHRpb25zOjpzaXplX3R5cGUsCi0gICAgICAgICBwYWNrZWRfb3B0aW9uczo6Y29uc3Rh
bnRfdGltZV9zaXplLAotICAgICAgICAgdHlwZW5hbWUgcGFja2VkX29wdGlvbnM6OmhlYWRlcl9o
b2xkZXJfdHlwZQotICAgICAgPiBpbXBsZW1lbnRhdGlvbl9kZWZpbmVkOwotICAgLy8vIEBlbmRj
b25kCi0gICB0eXBlZGVmIGltcGxlbWVudGF0aW9uX2RlZmluZWQgdHlwZTsKLX07Ci0KLQotI2lm
bmRlZiBCT09TVF9JTlRSVVNJVkVfRE9YWUdFTl9JTlZPS0VECi0KLSNpZiAhZGVmaW5lZChCT09T
VF9JTlRSVVNJVkVfVkFSSUFESUNfVEVNUExBVEVTKQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3Mg
TzEsIGNsYXNzIE8yLCBjbGFzcyBPMywgY2xhc3MgTzQ+Ci0jZWxzZQotdGVtcGxhdGU8Y2xhc3Mg
VCwgY2xhc3MgLi4uT3B0aW9ucz4KLSNlbmRpZgotY2xhc3MgbGlzdAotICAgOiAgcHVibGljIG1h
a2VfbGlzdDxULAotICAgICAgI2lmICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19U
RU1QTEFURVMpCi0gICAgICBPMSwgTzIsIE8zLCBPNAotICAgICAgI2Vsc2UKLSAgICAgIE9wdGlv
bnMuLi4KLSAgICAgICNlbmRpZgotICAgPjo6dHlwZQotewotICAgdHlwZWRlZiB0eXBlbmFtZSBt
YWtlX2xpc3QKLSAgICAgIDxULAotICAgICAgI2lmICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9W
QVJJQURJQ19URU1QTEFURVMpCi0gICAgICBPMSwgTzIsIE8zLCBPNAotICAgICAgI2Vsc2UKLSAg
ICAgIE9wdGlvbnMuLi4KLSAgICAgICNlbmRpZgotICAgICAgPjo6dHlwZSAgICAgIEJhc2U7Ci0g
ICAvL0Fzc2VydCBpZiBwYXNzZWQgdmFsdWUgdHJhaXRzIGFyZSBjb21wYXRpYmxlIHdpdGggdGhl
IHR5cGUKLSAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoKGRldGFpbDo6aXNfc2FtZTx0eXBlbmFtZSBC
YXNlOjp2YWx1ZV90cmFpdHM6OnZhbHVlX3R5cGUsIFQ+Ojp2YWx1ZSkpOwotICAgQk9PU1RfTU9W
QUJMRV9CVVRfTk9UX0NPUFlBQkxFKGxpc3QpCi0KLSAgIHB1YmxpYzoKLSAgIHR5cGVkZWYgdHlw
ZW5hbWUgQmFzZTo6dmFsdWVfdHJhaXRzICAgICAgICAgIHZhbHVlX3RyYWl0czsKLSAgIHR5cGVk
ZWYgdHlwZW5hbWUgQmFzZTo6aXRlcmF0b3IgICAgICAgICAgICAgIGl0ZXJhdG9yOwotICAgdHlw
ZWRlZiB0eXBlbmFtZSBCYXNlOjpjb25zdF9pdGVyYXRvciAgICAgICAgY29uc3RfaXRlcmF0b3I7
Ci0KLSAgIGxpc3QoKQotICAgICAgOiAgQmFzZSgpCi0gICB7fQotCi0gICBleHBsaWNpdCBsaXN0
KGNvbnN0IHZhbHVlX3RyYWl0cyAmdl90cmFpdHMpCi0gICAgICA6ICBCYXNlKHZfdHJhaXRzKQot
ICAge30KLQotICAgdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+Ci0gICBsaXN0KEl0ZXJhdG9yIGIs
IEl0ZXJhdG9yIGUsIGNvbnN0IHZhbHVlX3RyYWl0cyAmdl90cmFpdHMgPSB2YWx1ZV90cmFpdHMo
KSkKLSAgICAgIDogIEJhc2UoYiwgZSwgdl90cmFpdHMpCi0gICB7fQotCi0gICBsaXN0KEJPT1NU
X1JWX1JFRihsaXN0KSB4KQotICAgICAgOiAgQmFzZShCT09TVF9NT1ZFX0JBU0UoQmFzZSwgeCkp
Ci0gICB7fQotCi0gICBsaXN0JiBvcGVyYXRvcj0oQk9PU1RfUlZfUkVGKGxpc3QpIHgpCi0gICB7
ICByZXR1cm4gc3RhdGljX2Nhc3Q8bGlzdCAmPih0aGlzLT5CYXNlOjpvcGVyYXRvcj0oQk9PU1Rf
TU9WRV9CQVNFKEJhc2UsIHgpKSk7ICB9Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBDbG9uZXIsIGNs
YXNzIERpc3Bvc2VyPgotICAgdm9pZCBjbG9uZV9mcm9tKGNvbnN0IGxpc3QgJnNyYywgQ2xvbmVy
IGNsb25lciwgRGlzcG9zZXIgZGlzcG9zZXIpCi0gICB7ICBCYXNlOjpjbG9uZV9mcm9tKHNyYywg
Y2xvbmVyLCBkaXNwb3Nlcik7ICB9Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBDbG9uZXIsIGNsYXNz
IERpc3Bvc2VyPgotICAgdm9pZCBjbG9uZV9mcm9tKEJPT1NUX1JWX1JFRihsaXN0KSBzcmMsIENs
b25lciBjbG9uZXIsIERpc3Bvc2VyIGRpc3Bvc2VyKQotICAgeyAgQmFzZTo6Y2xvbmVfZnJvbShC
T09TVF9NT1ZFX0JBU0UoQmFzZSwgc3JjKSwgY2xvbmVyLCBkaXNwb3Nlcik7ICB9Ci0KLSAgIHN0
YXRpYyBsaXN0ICZjb250YWluZXJfZnJvbV9lbmRfaXRlcmF0b3IoaXRlcmF0b3IgZW5kX2l0ZXJh
dG9yKQotICAgeyAgcmV0dXJuIHN0YXRpY19jYXN0PGxpc3QgJj4oQmFzZTo6Y29udGFpbmVyX2Zy
b21fZW5kX2l0ZXJhdG9yKGVuZF9pdGVyYXRvcikpOyAgIH0KLQotICAgc3RhdGljIGNvbnN0IGxp
c3QgJmNvbnRhaW5lcl9mcm9tX2VuZF9pdGVyYXRvcihjb25zdF9pdGVyYXRvciBlbmRfaXRlcmF0
b3IpCi0gICB7ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgbGlzdCAmPihCYXNlOjpjb250YWlu
ZXJfZnJvbV9lbmRfaXRlcmF0b3IoZW5kX2l0ZXJhdG9yKSk7ICAgfQotfTsKLQotI2VuZGlmCi0K
LX0gLy9uYW1lc3BhY2UgaW50cnVzaXZlCi19IC8vbmFtZXNwYWNlIGJvb3N0Ci0KLSNpbmNsdWRl
IDxib29zdC9pbnRydXNpdmUvZGV0YWlsL2NvbmZpZ19lbmQuaHBwPgotCi0jZW5kaWYgLy9CT09T
VF9JTlRSVVNJVkVfTElTVF9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9saXN0X2hvb2suaHBwIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2xpc3RfaG9vay5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MmU0ZTIwZDdkYzBiMmYzNjA3NmVjNWZhNTUz
YThmMWI2YTc1NWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL2xp
c3RfaG9vay5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyODkgKzAsMCBAQAotLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLS8vCi0vLyAoQykgQ29weXJpZ2h0IE9sYWYgS3J6aWthbGxhIDIwMDQtMjAwNi4K
LS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAgMjAwNi0yMDEzCi0vLwotLy8gRGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8g
ICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8g
ICAgICAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNl
ZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3IgZG9jdW1lbnRhdGlvbi4K
LS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9MSVNU
X0hPT0tfSFBQCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9MSVNUX0hPT0tfSFBQCi0KLSNpbmNs
dWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL2NvbmZpZ19iZWdpbi5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvaW50cnVzaXZlL2ludHJ1c2l2ZV9md2QuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvaW50
cnVzaXZlL2RldGFpbC9saXN0X25vZGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9j
aXJjdWxhcl9saXN0X2FsZ29yaXRobXMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9v
cHRpb25zLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL2dlbmVyaWNfaG9v
ay5ocHA+Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19QUkFHTUFfT05DRSkKLSMgIHByYWdtYSBv
bmNlCi0jZW5kaWYKLQotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIGludHJ1c2l2ZSB7
Ci0KLS8vISBIZWxwZXIgbWV0YWZ1bmN0aW9uIHRvIGRlZmluZSBhIFxjIFxjIGxpc3RfYmFzZV9o
b29rIHRoYXQgeWllbGRzIHRvIHRoZSBzYW1lCi0vLyEgdHlwZSB3aGVuIHRoZSBzYW1lIG9wdGlv
bnMgKGVpdGhlciBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHkpIGFyZSB1c2VkLgotI2lmIGRlZmlu
ZWQoQk9PU1RfSU5UUlVTSVZFX0RPWFlHRU5fSU5WT0tFRCkgfHwgZGVmaW5lZChCT09TVF9JTlRS
VVNJVkVfVkFSSUFESUNfVEVNUExBVEVTKQotdGVtcGxhdGU8Y2xhc3MgLi4uT3B0aW9ucz4KLSNl
bHNlCi10ZW1wbGF0ZTxjbGFzcyBPMSA9IHZvaWQsIGNsYXNzIE8yID0gdm9pZCwgY2xhc3MgTzMg
PSB2b2lkPgotI2VuZGlmCi1zdHJ1Y3QgbWFrZV9saXN0X2Jhc2VfaG9vawotewotICAgLy8vIEBj
b25kCi0gICB0eXBlZGVmIHR5cGVuYW1lIHBhY2tfb3B0aW9ucwotICAgICAgPCBob29rX2RlZmF1
bHRzLAotICAgICAgI2lmICFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19URU1QTEFU
RVMpCi0gICAgICBPMSwgTzIsIE8zCi0gICAgICAjZWxzZQotICAgICAgT3B0aW9ucy4uLgotICAg
ICAgI2VuZGlmCi0gICAgICA+Ojp0eXBlIHBhY2tlZF9vcHRpb25zOwotCi0gICB0eXBlZGVmIGdl
bmVyaWNfaG9vawotICAgPCBDaXJjdWxhckxpc3RBbGdvcml0aG1zCi0gICAsIGxpc3Rfbm9kZV90
cmFpdHM8dHlwZW5hbWUgcGFja2VkX29wdGlvbnM6OnZvaWRfcG9pbnRlcj4KLSAgICwgdHlwZW5h
bWUgcGFja2VkX29wdGlvbnM6OnRhZwotICAgLCBwYWNrZWRfb3B0aW9uczo6bGlua19tb2RlCi0g
ICAsIExpc3RCYXNlSG9va0lkCi0gICA+IGltcGxlbWVudGF0aW9uX2RlZmluZWQ7Ci0gICAvLy8g
QGVuZGNvbmQKLSAgIHR5cGVkZWYgaW1wbGVtZW50YXRpb25fZGVmaW5lZCB0eXBlOwotfTsKLQot
Ly8hIERlcml2ZSBhIGNsYXNzIGZyb20gdGhpcyBob29rIGluIG9yZGVyIHRvIHN0b3JlIG9iamVj
dHMgb2YgdGhhdCBjbGFzcwotLy8hIGluIGFuIGxpc3QuCi0vLyEKLS8vISBUaGUgaG9vayBhZG1p
dHMgdGhlIGZvbGxvd2luZyBvcHRpb25zOiBcYyB0YWc8PiwgXGMgdm9pZF9wb2ludGVyPD4gYW5k
Ci0vLyEgXGMgbGlua19tb2RlPD4uCi0vLyEKLS8vISBcYyB0YWc8PiBkZWZpbmVzIGEgdGFnIHRv
IGlkZW50aWZ5IHRoZSBub2RlLgotLy8hIFRoZSBzYW1lIHRhZyB2YWx1ZSBjYW4gYmUgdXNlZCBp
biBkaWZmZXJlbnQgY2xhc3NlcywgYnV0IGlmIGEgY2xhc3MgaXMKLS8vISBkZXJpdmVkIGZyb20g
bW9yZSB0aGFuIG9uZSBcYyBsaXN0X2Jhc2VfaG9vaywgdGhlbiBlYWNoIFxjIGxpc3RfYmFzZV9o
b29rIG5lZWRzIGl0cwotLy8hIHVuaXF1ZSB0YWcuCi0vLyEKLS8vISBcYyBsaW5rX21vZGU8PiB3
aWxsIHNwZWNpZnkgdGhlIGxpbmtpbmcgbW9kZSBvZiB0aGUgaG9vayAoXGMgbm9ybWFsX2xpbmss
Ci0vLyEgXGMgYXV0b191bmxpbmsgb3IgXGMgc2FmZV9saW5rKS4KLS8vIQotLy8hIFxjIHZvaWRf
cG9pbnRlcjw+IGlzIHRoZSBwb2ludGVyIHR5cGUgdGhhdCB3aWxsIGJlIHVzZWQgaW50ZXJuYWxs
eSBpbiB0aGUgaG9vawotLy8hIGFuZCB0aGUgY29udGFpbmVyIGNvbmZpZ3VyZWQgdG8gdXNlIHRo
aXMgaG9vay4KLSNpZiBkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9ET1hZR0VOX0lOVk9LRUQpIHx8
IGRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX1ZBUklBRElDX1RFTVBMQVRFUykKLXRlbXBsYXRlPGNs
YXNzIC4uLk9wdGlvbnM+Ci0jZWxzZQotdGVtcGxhdGU8Y2xhc3MgTzEsIGNsYXNzIE8yLCBjbGFz
cyBPMz4KLSNlbmRpZgotY2xhc3MgbGlzdF9iYXNlX2hvb2sKLSAgIDogIHB1YmxpYyBtYWtlX2xp
c3RfYmFzZV9ob29rCi0gICAgICAjaWYgIWRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX1ZBUklBRElD
X1RFTVBMQVRFUykKLSAgICAgIDxPMSwgTzIsIE8zPgotICAgICAgI2Vsc2UKLSAgICAgIDxPcHRp
b25zLi4uPgotICAgICAgI2VuZGlmCi0gICAgICA6OnR5cGUKLXsKLSAgICNpZiBkZWZpbmVkKEJP
T1NUX0lOVFJVU0lWRV9ET1hZR0VOX0lOVk9LRUQpCi0gICBwdWJsaWM6Ci0gICAvLyEgPGI+RWZm
ZWN0czwvYj46IElmIGxpbmtfbW9kZSBpcyBcYyBhdXRvX3VubGluayBvciBcYyBzYWZlX2xpbmsK
LSAgIC8vISAgIGluaXRpYWxpemVzIHRoZSBub2RlIHRvIGFuIHVubGlua2VkIHN0YXRlLgotICAg
Ly8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIGxpc3RfYmFzZV9ob29rKCk7
Ci0KLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogSWYgbGlua19tb2RlIGlzIFxjIGF1dG9fdW5saW5r
IG9yIFxjIHNhZmVfbGluawotICAgLy8hICAgaW5pdGlhbGl6ZXMgdGhlIG5vZGUgdG8gYW4gdW5s
aW5rZWQgc3RhdGUuIFRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLgotICAgLy8hCi0gICAvLyEgPGI+
VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIC8vIQotICAgLy8hIDxiPlJhdGlvbmFsZTwvYj46IFBy
b3ZpZGluZyBhIGNvcHktY29uc3RydWN0b3IKLSAgIC8vISAgIG1ha2VzIGNsYXNzZXMgdXNpbmcg
dGhlIGhvb2sgU1RMLWNvbXBsaWFudCB3aXRob3V0IGZvcmNpbmcgdGhlCi0gICAvLyEgICB1c2Vy
IHRvIGRvIHNvbWUgYWRkaXRpb25hbCB3b3JrLiBcYyBzd2FwIGNhbiBiZSB1c2VkIHRvIGVtdWxh
dGUKLSAgIC8vISAgIG1vdmUtc2VtYW50aWNzLgotICAgbGlzdF9iYXNlX2hvb2soY29uc3QgbGlz
dF9iYXNlX2hvb2smICk7Ci0KLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogRW1wdHkgZnVuY3Rpb24u
IFRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLgotICAgLy8hCi0gICAvLyEgPGI+VGhyb3dzPC9iPjog
Tm90aGluZy4KLSAgIC8vIQotICAgLy8hIDxiPlJhdGlvbmFsZTwvYj46IFByb3ZpZGluZyBhbiBh
c3NpZ25tZW50IG9wZXJhdG9yCi0gICAvLyEgICBtYWtlcyBjbGFzc2VzIHVzaW5nIHRoZSBob29r
IFNUTC1jb21wbGlhbnQgd2l0aG91dCBmb3JjaW5nIHRoZQotICAgLy8hICAgdXNlciB0byBkbyBz
b21lIGFkZGl0aW9uYWwgd29yay4gXGMgc3dhcCBjYW4gYmUgdXNlZCB0byBlbXVsYXRlCi0gICAv
LyEgICBtb3ZlLXNlbWFudGljcy4KLSAgIGxpc3RfYmFzZV9ob29rJiBvcGVyYXRvcj0oY29uc3Qg
bGlzdF9iYXNlX2hvb2smICk7Ci0KLSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogSWYgbGlua19tb2Rl
IGlzIFxjIG5vcm1hbF9saW5rLCB0aGUgZGVzdHJ1Y3RvciBkb2VzCi0gICAvLyEgICBub3RoaW5n
IChpZS4gbm8gY29kZSBpcyBnZW5lcmF0ZWQpLiBJZiBsaW5rX21vZGUgaXMgXGMgc2FmZV9saW5r
IGFuZCB0aGUKLSAgIC8vISAgIG9iamVjdCBpcyBzdG9yZWQgaW4gYW4gbGlzdCBhbiBhc3NlcnRp
b24gaXMgcmFpc2VkLiBJZiBsaW5rX21vZGUgaXMKLSAgIC8vISAgIFxjIGF1dG9fdW5saW5rIGFu
ZCBcYyBpc19saW5rZWQoKSBpcyB0cnVlLCB0aGUgbm9kZSBpcyB1bmxpbmtlZC4KLSAgIC8vIQot
ICAgLy8hIDxiPlRocm93czwvYj46IE5vdGhpbmcuCi0gICB+bGlzdF9iYXNlX2hvb2soKTsKLQot
ICAgLy8hIDxiPkVmZmVjdHM8L2I+OiBTd2FwcGluZyB0d28gbm9kZXMgc3dhcHMgdGhlIHBvc2l0
aW9uIG9mIHRoZSBlbGVtZW50cwotICAgLy8hICAgcmVsYXRlZCB0byB0aG9zZSBub2RlcyBpbiBv
bmUgb3IgdHdvIGNvbnRhaW5lcnMuIFRoYXQgaXMsIGlmIHRoZSBub2RlCi0gICAvLyEgICB0aGlz
IGlzIHBhcnQgb2YgdGhlIGVsZW1lbnQgZTEsIHRoZSBub2RlIHggaXMgcGFydCBvZiB0aGUgZWxl
bWVudCBlMgotICAgLy8hICAgYW5kIGJvdGggZWxlbWVudHMgYXJlIGluY2x1ZGVkIGluIHRoZSBj
b250YWluZXJzIHMxIGFuZCBzMiwgdGhlbiBhZnRlcgotICAgLy8hICAgdGhlIHN3YXAtb3BlcmF0
aW9uIGUxIGlzIGluIHMyIGF0IHRoZSBwb3NpdGlvbiBvZiBlMiBhbmQgZTIgaXMgaW4gczEKLSAg
IC8vISAgIGF0IHRoZSBwb3NpdGlvbiBvZiBlMS4gSWYgb25lIGVsZW1lbnQgaXMgbm90IGluIGEg
Y29udGFpbmVyLCB0aGVuCi0gICAvLyEgICBhZnRlciB0aGUgc3dhcC1vcGVyYXRpb24gdGhlIG90
aGVyIGVsZW1lbnQgaXMgbm90IGluIGEgY29udGFpbmVyLgotICAgLy8hICAgSXRlcmF0b3JzIHRv
IGUxIGFuZCBlMiByZWxhdGVkIHRvIHRob3NlIG5vZGVzIGFyZSBpbnZhbGlkYXRlZC4KLSAgIC8v
IQotICAgLy8hIDxiPkNvbXBsZXhpdHk8L2I+OiBDb25zdGFudAotICAgLy8hCi0gICAvLyEgPGI+
VGhyb3dzPC9iPjogTm90aGluZy4KLSAgIHZvaWQgc3dhcF9ub2RlcyhsaXN0X2Jhc2VfaG9vayAm
b3RoZXIpOwotCi0gICAvLyEgPGI+UHJlY29uZGl0aW9uPC9iPjogbGlua19tb2RlIG11c3QgYmUg
XGMgc2FmZV9saW5rIG9yIFxjIGF1dG9fdW5saW5rLgotICAgLy8hCi0gICAvLyEgPGI+UmV0dXJu
czwvYj46IHRydWUsIGlmIHRoZSBub2RlIGJlbG9uZ3MgdG8gYSBjb250YWluZXIsIGZhbHNlCi0g
ICAvLyEgICBvdGhlcndpc2UuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gdGVzdCB3aGV0
aGVyIFxjIGxpc3Q6Oml0ZXJhdG9yX3RvCi0gICAvLyEgICB3aWxsIHJldHVybiBhIHZhbGlkIGl0
ZXJhdG9yLgotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IENvbnN0YW50Ci0gICBi
b29sIGlzX2xpbmtlZCgpIGNvbnN0OwotCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IFJlbW92ZXMg
dGhlIG5vZGUgaWYgaXQncyBpbnNlcnRlZCBpbiBhIGNvbnRhaW5lci4KLSAgIC8vISAgIFRoaXMg
ZnVuY3Rpb24gaXMgb25seSBhbGxvd2VkIGlmIGxpbmtfbW9kZSBpcyBcYyBhdXRvX3VubGluay4K
LSAgIC8vIQotICAgLy8hIDxiPlRocm93czwvYj46IE5vdGhpbmcuCi0gICB2b2lkIHVubGluaygp
OwotICAgI2VuZGlmCi19OwotCi0vLyEgSGVscGVyIG1ldGFmdW5jdGlvbiB0byBkZWZpbmUgYSBc
YyBcYyBsaXN0X21lbWJlcl9ob29rIHRoYXQgeWllbGRzIHRvIHRoZSBzYW1lCi0vLyEgdHlwZSB3
aGVuIHRoZSBzYW1lIG9wdGlvbnMgKGVpdGhlciBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHkpIGFy
ZSB1c2VkLgotI2lmIGRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX0RPWFlHRU5fSU5WT0tFRCkgfHwg
ZGVmaW5lZChCT09TVF9JTlRSVVNJVkVfVkFSSUFESUNfVEVNUExBVEVTKQotdGVtcGxhdGU8Y2xh
c3MgLi4uT3B0aW9ucz4KLSNlbHNlCi10ZW1wbGF0ZTxjbGFzcyBPMSA9IHZvaWQsIGNsYXNzIE8y
ID0gdm9pZCwgY2xhc3MgTzMgPSB2b2lkPgotI2VuZGlmCi1zdHJ1Y3QgbWFrZV9saXN0X21lbWJl
cl9ob29rCi17Ci0gICAvLy8gQGNvbmQKLSAgIHR5cGVkZWYgdHlwZW5hbWUgcGFja19vcHRpb25z
Ci0gICAgICA8IGhvb2tfZGVmYXVsdHMsCi0gICAgICAjaWYgIWRlZmluZWQoQk9PU1RfSU5UUlVT
SVZFX1ZBUklBRElDX1RFTVBMQVRFUykKLSAgICAgIE8xLCBPMiwgTzMKLSAgICAgICNlbHNlCi0g
ICAgICBPcHRpb25zLi4uCi0gICAgICAjZW5kaWYKLSAgICAgID46OnR5cGUgcGFja2VkX29wdGlv
bnM7Ci0KLSAgIHR5cGVkZWYgZ2VuZXJpY19ob29rCi0gICA8IENpcmN1bGFyTGlzdEFsZ29yaXRo
bXMKLSAgICwgbGlzdF9ub2RlX3RyYWl0czx0eXBlbmFtZSBwYWNrZWRfb3B0aW9uczo6dm9pZF9w
b2ludGVyPgotICAgLCBtZW1iZXJfdGFnCi0gICAsIHBhY2tlZF9vcHRpb25zOjpsaW5rX21vZGUK
LSAgICwgTm9CYXNlSG9va0lkCi0gICA+IGltcGxlbWVudGF0aW9uX2RlZmluZWQ7Ci0gICAvLy8g
QGVuZGNvbmQKLSAgIHR5cGVkZWYgaW1wbGVtZW50YXRpb25fZGVmaW5lZCB0eXBlOwotfTsKLQot
Ly8hIFN0b3JlIHRoaXMgaG9vayBpbiBhIGNsYXNzIHRvIGJlIGluc2VydGVkCi0vLyEgaW4gYW4g
bGlzdC4KLS8vIQotLy8hIFRoZSBob29rIGFkbWl0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6IFxj
IHZvaWRfcG9pbnRlcjw+IGFuZAotLy8hIFxjIGxpbmtfbW9kZTw+LgotLy8hCi0vLyEgXGMgbGlu
a19tb2RlPD4gd2lsbCBzcGVjaWZ5IHRoZSBsaW5raW5nIG1vZGUgb2YgdGhlIGhvb2sgKFxjIG5v
cm1hbF9saW5rLAotLy8hIFxjIGF1dG9fdW5saW5rIG9yIFxjIHNhZmVfbGluaykuCi0vLyEKLS8v
ISBcYyB2b2lkX3BvaW50ZXI8PiBpcyB0aGUgcG9pbnRlciB0eXBlIHRoYXQgd2lsbCBiZSB1c2Vk
IGludGVybmFsbHkgaW4gdGhlIGhvb2sKLS8vISBhbmQgdGhlIGNvbnRhaW5lciBjb25maWd1cmVk
IHRvIHVzZSB0aGlzIGhvb2suCi0jaWYgZGVmaW5lZChCT09TVF9JTlRSVVNJVkVfRE9YWUdFTl9J
TlZPS0VEKSB8fCBkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19URU1QTEFURVMpCi10
ZW1wbGF0ZTxjbGFzcyAuLi5PcHRpb25zPgotI2Vsc2UKLXRlbXBsYXRlPGNsYXNzIE8xLCBjbGFz
cyBPMiwgY2xhc3MgTzM+Ci0jZW5kaWYKLWNsYXNzIGxpc3RfbWVtYmVyX2hvb2sKLSAgIDogIHB1
YmxpYyBtYWtlX2xpc3RfbWVtYmVyX2hvb2sKLSAgICAgICNpZiAhZGVmaW5lZChCT09TVF9JTlRS
VVNJVkVfVkFSSUFESUNfVEVNUExBVEVTKQotICAgICAgPE8xLCBPMiwgTzM+Ci0gICAgICAjZWxz
ZQotICAgICAgPE9wdGlvbnMuLi4+Ci0gICAgICAjZW5kaWYKLSAgICAgIDo6dHlwZQotewotICAg
I2lmIGRlZmluZWQoQk9PU1RfSU5UUlVTSVZFX0RPWFlHRU5fSU5WT0tFRCkKLSAgIHB1YmxpYzoK
LSAgIC8vISA8Yj5FZmZlY3RzPC9iPjogSWYgbGlua19tb2RlIGlzIFxjIGF1dG9fdW5saW5rIG9y
IFxjIHNhZmVfbGluawotICAgLy8hICAgaW5pdGlhbGl6ZXMgdGhlIG5vZGUgdG8gYW4gdW5saW5r
ZWQgc3RhdGUuCi0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAgbGlz
dF9tZW1iZXJfaG9vaygpOwotCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IElmIGxpbmtfbW9kZSBp
cyBcYyBhdXRvX3VubGluayBvciBcYyBzYWZlX2xpbmsKLSAgIC8vISAgIGluaXRpYWxpemVzIHRo
ZSBub2RlIHRvIGFuIHVubGlua2VkIHN0YXRlLiBUaGUgYXJndW1lbnQgaXMgaWdub3JlZC4KLSAg
IC8vIQotICAgLy8hIDxiPlRocm93czwvYj46IE5vdGhpbmcuCi0gICAvLyEKLSAgIC8vISA8Yj5S
YXRpb25hbGU8L2I+OiBQcm92aWRpbmcgYSBjb3B5LWNvbnN0cnVjdG9yCi0gICAvLyEgICBtYWtl
cyBjbGFzc2VzIHVzaW5nIHRoZSBob29rIFNUTC1jb21wbGlhbnQgd2l0aG91dCBmb3JjaW5nIHRo
ZQotICAgLy8hICAgdXNlciB0byBkbyBzb21lIGFkZGl0aW9uYWwgd29yay4gXGMgc3dhcCBjYW4g
YmUgdXNlZCB0byBlbXVsYXRlCi0gICAvLyEgICBtb3ZlLXNlbWFudGljcy4KLSAgIGxpc3RfbWVt
YmVyX2hvb2soY29uc3QgbGlzdF9tZW1iZXJfaG9vayYgKTsKLQotICAgLy8hIDxiPkVmZmVjdHM8
L2I+OiBFbXB0eSBmdW5jdGlvbi4gVGhlIGFyZ3VtZW50IGlzIGlnbm9yZWQuCi0gICAvLyEKLSAg
IC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAgLy8hCi0gICAvLyEgPGI+UmF0aW9uYWxl
PC9iPjogUHJvdmlkaW5nIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IKLSAgIC8vISAgIG1ha2VzIGNs
YXNzZXMgdXNpbmcgdGhlIGhvb2sgU1RMLWNvbXBsaWFudCB3aXRob3V0IGZvcmNpbmcgdGhlCi0g
ICAvLyEgICB1c2VyIHRvIGRvIHNvbWUgYWRkaXRpb25hbCB3b3JrLiBcYyBzd2FwIGNhbiBiZSB1
c2VkIHRvIGVtdWxhdGUKLSAgIC8vISAgIG1vdmUtc2VtYW50aWNzLgotICAgbGlzdF9tZW1iZXJf
aG9vayYgb3BlcmF0b3I9KGNvbnN0IGxpc3RfbWVtYmVyX2hvb2smICk7Ci0KLSAgIC8vISA8Yj5F
ZmZlY3RzPC9iPjogSWYgbGlua19tb2RlIGlzIFxjIG5vcm1hbF9saW5rLCB0aGUgZGVzdHJ1Y3Rv
ciBkb2VzCi0gICAvLyEgICBub3RoaW5nIChpZS4gbm8gY29kZSBpcyBnZW5lcmF0ZWQpLiBJZiBs
aW5rX21vZGUgaXMgXGMgc2FmZV9saW5rIGFuZCB0aGUKLSAgIC8vISAgIG9iamVjdCBpcyBzdG9y
ZWQgaW4gYW4gbGlzdCBhbiBhc3NlcnRpb24gaXMgcmFpc2VkLiBJZiBsaW5rX21vZGUgaXMKLSAg
IC8vISAgIFxjIGF1dG9fdW5saW5rIGFuZCBcYyBpc19saW5rZWQoKSBpcyB0cnVlLCB0aGUgbm9k
ZSBpcyB1bmxpbmtlZC4KLSAgIC8vIQotICAgLy8hIDxiPlRocm93czwvYj46IE5vdGhpbmcuCi0g
ICB+bGlzdF9tZW1iZXJfaG9vaygpOwotCi0gICAvLyEgPGI+RWZmZWN0czwvYj46IFN3YXBwaW5n
IHR3byBub2RlcyBzd2FwcyB0aGUgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnRzCi0gICAvLyEgICBy
ZWxhdGVkIHRvIHRob3NlIG5vZGVzIGluIG9uZSBvciB0d28gY29udGFpbmVycy4gVGhhdCBpcywg
aWYgdGhlIG5vZGUKLSAgIC8vISAgIHRoaXMgaXMgcGFydCBvZiB0aGUgZWxlbWVudCBlMSwgdGhl
IG5vZGUgeCBpcyBwYXJ0IG9mIHRoZSBlbGVtZW50IGUyCi0gICAvLyEgICBhbmQgYm90aCBlbGVt
ZW50cyBhcmUgaW5jbHVkZWQgaW4gdGhlIGNvbnRhaW5lcnMgczEgYW5kIHMyLCB0aGVuIGFmdGVy
Ci0gICAvLyEgICB0aGUgc3dhcC1vcGVyYXRpb24gZTEgaXMgaW4gczIgYXQgdGhlIHBvc2l0aW9u
IG9mIGUyIGFuZCBlMiBpcyBpbiBzMQotICAgLy8hICAgYXQgdGhlIHBvc2l0aW9uIG9mIGUxLiBJ
ZiBvbmUgZWxlbWVudCBpcyBub3QgaW4gYSBjb250YWluZXIsIHRoZW4KLSAgIC8vISAgIGFmdGVy
IHRoZSBzd2FwLW9wZXJhdGlvbiB0aGUgb3RoZXIgZWxlbWVudCBpcyBub3QgaW4gYSBjb250YWlu
ZXIuCi0gICAvLyEgICBJdGVyYXRvcnMgdG8gZTEgYW5kIGUyIHJlbGF0ZWQgdG8gdGhvc2Ugbm9k
ZXMgYXJlIGludmFsaWRhdGVkLgotICAgLy8hCi0gICAvLyEgPGI+Q29tcGxleGl0eTwvYj46IENv
bnN0YW50Ci0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+OiBOb3RoaW5nLgotICAgdm9pZCBz
d2FwX25vZGVzKGxpc3RfbWVtYmVyX2hvb2sgJm90aGVyKTsKLQotICAgLy8hIDxiPlByZWNvbmRp
dGlvbjwvYj46IGxpbmtfbW9kZSBtdXN0IGJlIFxjIHNhZmVfbGluayBvciBcYyBhdXRvX3VubGlu
ay4KLSAgIC8vIQotICAgLy8hIDxiPlJldHVybnM8L2I+OiB0cnVlLCBpZiB0aGUgbm9kZSBiZWxv
bmdzIHRvIGEgY29udGFpbmVyLCBmYWxzZQotICAgLy8hICAgb3RoZXJ3aXNlLiBUaGlzIGZ1bmN0
aW9uIGNhbiBiZSB1c2VkIHRvIHRlc3Qgd2hldGhlciBcYyBsaXN0OjppdGVyYXRvcl90bwotICAg
Ly8hICAgd2lsbCByZXR1cm4gYSB2YWxpZCBpdGVyYXRvci4KLSAgIC8vIQotICAgLy8hIDxiPkNv
bXBsZXhpdHk8L2I+OiBDb25zdGFudAotICAgYm9vbCBpc19saW5rZWQoKSBjb25zdDsKLQotICAg
Ly8hIDxiPkVmZmVjdHM8L2I+OiBSZW1vdmVzIHRoZSBub2RlIGlmIGl0J3MgaW5zZXJ0ZWQgaW4g
YSBjb250YWluZXIuCi0gICAvLyEgICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYWxsb3dlZCBpZiBs
aW5rX21vZGUgaXMgXGMgYXV0b191bmxpbmsuCi0gICAvLyEKLSAgIC8vISA8Yj5UaHJvd3M8L2I+
OiBOb3RoaW5nLgotICAgdm9pZCB1bmxpbmsoKTsKLSAgICNlbmRpZgotfTsKLQotfSAvL25hbWVz
cGFjZSBpbnRydXNpdmUKLX0gLy9uYW1lc3BhY2UgYm9vc3QKLQotI2luY2x1ZGUgPGJvb3N0L2lu
dHJ1c2l2ZS9kZXRhaWwvY29uZmlnX2VuZC5ocHA+Ci0KLSNlbmRpZiAvL0JPT1NUX0lOVFJVU0lW
RV9MSVNUX0hPT0tfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9pbnRydXNpdmUvb3B0aW9ucy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvb3B0aW9ucy5ocHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDY1MjNmZmI1NzQyNGY2YTQyNWI2ZGNkYTMzOWE3YzJlMTdkYTM1
ZDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL29wdGlvbnMuaHBw
CisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
LwotLy8gKEMpIENvcHlyaWdodCBJb24gR2F6dGFuYWdhICAyMDA3LTIwMTQKLS8vCi0vLyBEaXN0
cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0v
LyAgICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0v
LyAgICAgICAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8g
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvaW50cnVzaXZlIGZvciBkb2N1bWVudGF0aW9u
LgotLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNpZm5kZWYgQk9PU1RfSU5UUlVTSVZFX09Q
VElPTlNfSFBQCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9PUFRJT05TX0hQUAotCi0jaW5jbHVk
ZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9jb25maWdfYmVnaW4uaHBwPgotI2luY2x1ZGUgPGJv
b3N0L2ludHJ1c2l2ZS9pbnRydXNpdmVfZndkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNp
dmUvbGlua19tb2RlLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvcGFja19vcHRpb25z
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvZGV0YWlsL21wbC5ocHA+Ci0KLSNpZiBk
ZWZpbmVkKEJPT1NUX0hBU19QUkFHTUFfT05DRSkKLSMgIHByYWdtYSBvbmNlCi0jZW5kaWYKLQot
bmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSBpbnRydXNpdmUgewotCi0jaWZuZGVmIEJPT1NU
X0lOVFJVU0lWRV9ET1hZR0VOX0lOVk9LRUQKLQotc3RydWN0IGVtcHR5Ci17fTsKLQotdGVtcGxh
dGU8Y2xhc3MgRnVuY3Rvcj4KLXN0cnVjdCBmaHRyYWl0czsKLQotdGVtcGxhdGU8Y2xhc3MgVCwg
Y2xhc3MgSG9vaywgSG9vayBUOjoqIFA+Ci1zdHJ1Y3QgbWh0cmFpdHM7Ci0KLXN0cnVjdCBkZnRf
dGFnOwotc3RydWN0IG1lbWJlcl90YWc7Ci0KLXRlbXBsYXRlPGNsYXNzIFN1cHBvc2VkVmFsdWVU
cmFpdHM+Ci1zdHJ1Y3QgaXNfZGVmYXVsdF9ob29rX3RhZzsKLQotI2VuZGlmICAgLy8jaWZuZGVm
IEJPT1NUX0lOVFJVU0lWRV9ET1hZR0VOX0lOVk9LRUQKLQotLy8hVGhpcyBvcHRpb24gc2V0dGVy
IHNwZWNpZmllcyBpZiB0aGUgaW50cnVzaXZlCi0vLyFjb250YWluZXIgc3RvcmVzIGl0cyBzaXpl
IGFzIGEgbWVtYmVyIHRvCi0vLyFvYnRhaW4gY29uc3RhbnQtdGltZSBzaXplKCkgbWVtYmVyLgot
Qk9PU1RfSU5UUlVTSVZFX09QVElPTl9DT05TVEFOVChjb25zdGFudF90aW1lX3NpemUsIGJvb2ws
IEVuYWJsZWQsIGNvbnN0YW50X3RpbWVfc2l6ZSkKLQotLy8hVGhpcyBvcHRpb24gc2V0dGVyIHNw
ZWNpZmllcyBhIGNvbnRhaW5lciBoZWFkZXIgaG9sZGVyIHR5cGUKLUJPT1NUX0lOVFJVU0lWRV9P
UFRJT05fVFlQRShoZWFkZXJfaG9sZGVyX3R5cGUsIEhlYWRlckhvbGRlciwgSGVhZGVySG9sZGVy
LCBoZWFkZXJfaG9sZGVyX3R5cGUpCi0KLS8vIVRoaXMgb3B0aW9uIHNldHRlciBzcGVjaWZpZXMg
dGhlIHR5cGUgdGhhdAotLy8hdGhlIGNvbnRhaW5lciB3aWxsIHVzZSB0byBzdG9yZSBpdHMgc2l6
ZS4KLUJPT1NUX0lOVFJVU0lWRV9PUFRJT05fVFlQRShzaXplX3R5cGUsIFNpemVUeXBlLCBTaXpl
VHlwZSwgc2l6ZV90eXBlKQotCi0vLyFUaGlzIG9wdGlvbiBzZXR0ZXIgc3BlY2lmaWVzIHRoZSBz
dHJpY3Qgd2VhayBvcmRlcmluZwotLy8hY29tcGFyaXNvbiBmdW5jdG9yIGZvciB0aGUgdmFsdWUg
dHlwZQotQk9PU1RfSU5UUlVTSVZFX09QVElPTl9UWVBFKGNvbXBhcmUsIENvbXBhcmUsIENvbXBh
cmUsIGNvbXBhcmUpCi0KLS8vIVRoaXMgb3B0aW9uIHNldHRlciBzcGVjaWZpZXMgYSBmdW5jdGlv
biBvYmplY3QKLS8vIXRoYXQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRoZSBrZXkgb2YgYW4gYXNz
b2NpYXRpdmUKLS8vIWNvbnRhaW5lciBhbmQgYW4gb3BlcmF0b3IgdG8gb2J0YWluIGl0IGZyb20g
YSB2YWx1ZSB0eXBlLgotLy8hCi0vLyFUaGlzIGZ1bmN0aW9uIG9iamVjdCBtdXN0IHRoZSBkZWZp
bmUgYSBgdHlwZWAgbWVtYmVyIHR5cGVkZWYgYW5kCi0vLyFhIG1lbWJlciB3aXRoIHNpZ25hdHVy
ZSBgdHlwZSBbY29uc3QmXSBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUgJikgY29uc3RgCi0v
LyF0aGF0IHdpbGwgcmV0dXJuIHRoZSBrZXkgZnJvbSBhIHZhbHVlX3R5cGUgb2YgYW4gYXNzb2Np
YXRpdmUgY29udGFpbmVyCi1CT09TVF9JTlRSVVNJVkVfT1BUSU9OX1RZUEUoa2V5X29mX3ZhbHVl
LCBLZXlPZlZhbHVlLCBLZXlPZlZhbHVlLCBrZXlfb2ZfdmFsdWUpCi0KLS8vIVRoaXMgb3B0aW9u
IHNldHRlciBmb3Igc2NhcGVnb2F0IGNvbnRhaW5lcnMgc3BlY2lmaWVzIGlmCi0vLyF0aGUgaW50
cnVzaXZlIHNjYXBlZ29hdCBjb250YWluZXIgc2hvdWxkIHVzZSBhIG5vbi12YXJpYWJsZQotLy8h
YWxwaGEgdmFsdWUgdGhhdCBkb2VzIG5vdCBuZWVkIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMu
Ci0vLyEKLS8vIUlmIGFjdGl2YXRlZCwgdGhlIGZpeGVkIGFscGhhIHZhbHVlIGlzIDEvc3FydCgy
KS4gVGhpcwotLy8hb3B0aW9uIGFsc28gc2F2ZXMgc29tZSBzcGFjZSBpbiB0aGUgY29udGFpbmVy
IHNpbmNlCi0vLyF0aGUgYWxwaGEgdmFsdWUgYW5kIHNvbWUgYWRkaXRpb25hbCBkYXRhIGRvZXMg
bm90IG5lZWQKLS8vIXRvIGJlIHN0b3JlZCBpbiB0aGUgY29udGFpbmVyLgotLy8hCi0vLyFJZiB0
aGUgdXNlciBvbmx5IG5lZWRzIGFuIGFscGhhIHZhbHVlIG5lYXIgMS9zcXJ0KDIpLCB0aGlzCi0v
LyFvcHRpb24gYWxzbyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBzaW5jZSBhdm9pZHMgbG9nYXJpdGht
Ci0vLyFhbmQgZGl2aXNpb24gb3BlcmF0aW9ucyB3aGVuIHJlYmFsYW5jaW5nIHRoZSB0cmVlLgot
Qk9PU1RfSU5UUlVTSVZFX09QVElPTl9DT05TVEFOVChmbG9hdGluZ19wb2ludCwgYm9vbCwgRW5h
YmxlZCwgZmxvYXRpbmdfcG9pbnQpCi0KLS8vIVRoaXMgb3B0aW9uIHNldHRlciBzcGVjaWZpZXMg
dGhlIGVxdWFsaXR5Ci0vLyFmdW5jdG9yIGZvciB0aGUgdmFsdWUgdHlwZQotQk9PU1RfSU5UUlVT
SVZFX09QVElPTl9UWVBFKGVxdWFsLCBFcXVhbCwgRXF1YWwsIGVxdWFsKQotCi0vLyFUaGlzIG9w
dGlvbiBzZXR0ZXIgc3BlY2lmaWVzIHRoZSBwcmlvcml0eSBjb21wYXJpc29uCi0vLyFmdW5jdG9y
IGZvciB0aGUgdmFsdWUgdHlwZQotQk9PU1RfSU5UUlVTSVZFX09QVElPTl9UWVBFKHByaW9yaXR5
LCBQcmlvcml0eSwgUHJpb3JpdHksIHByaW9yaXR5KQotCi0vLyFUaGlzIG9wdGlvbiBzZXR0ZXIg
c3BlY2lmaWVzIHRoZSBoYXNoCi0vLyFmdW5jdG9yIGZvciB0aGUgdmFsdWUgdHlwZQotQk9PU1Rf
SU5UUlVTSVZFX09QVElPTl9UWVBFKGhhc2gsIEhhc2gsIEhhc2gsIGhhc2gpCi0KLS8vIVRoaXMg
b3B0aW9uIHNldHRlciBzcGVjaWZpZXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0eXBl
Ci0vLyF0byBiZSBtYW5hZ2VkIGJ5IHRoZSBjb250YWluZXIgKHRoZSB2YWx1ZSB0eXBlKSBhbmQg
dGhlIG5vZGUgdG8gYmUKLS8vIXVzZWQgaW4gdGhlIG5vZGUgYWxnb3JpdGhtcy4gSXQgYWxzbyBz
cGVjaWZpZXMgdGhlIGxpbmtpbmcgcG9saWN5LgotQk9PU1RfSU5UUlVTSVZFX09QVElPTl9UWVBF
KHZhbHVlX3RyYWl0cywgVmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzLCBwcm90b192YWx1ZV90cmFp
dHMpCi0KLS8vI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfQ09NTUEgLAotLy8jZGVmaW5lIEJPT1NU
X0lOVFJVU0lWRV9MRVNTIDwKLS8vI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfTU9SRSA+Ci0vL0JP
T1NUX0lOVFJVU0lWRV9PUFRJT05fVFlQRSAobWVtYmVyX2hvb2ssIFBhcmVudCBCT09TVF9JTlRS
VVNJVkVfQ09NTUEgY2xhc3MgTWVtYmVySG9vayBCT09TVF9JTlRSVVNJVkVfQ09NTUEgTWVtYmVy
SG9vayBQYXJlbnQ6OiogUHRyVG9NZW1iZXIgLCBtaHRyYWl0cyBCT09TVF9JTlRSVVNJVkVfTEVT
UyBQYXJlbnQgQk9PU1RfSU5UUlVTSVZFX0NPTU1BIE1lbWJlckhvb2sgQk9PU1RfSU5UUlVTSVZF
X0NPTU1BIFB0clRvTWVtYmVyIEJPT1NUX0lOVFJVU0lWRV9NT1JFICwgcHJvdG9fdmFsdWVfdHJh
aXRzKQotLy90ZW1wbGF0ZTwgY2xhc3MgUGFyZW50ICwgY2xhc3MgTWVtYmVySG9vayAsIE1lbWJl
ckhvb2sgUGFyZW50OjoqIFB0clRvTWVtYmVyPgotLy9zdHJ1Y3QgbWVtYmVyX2hvb2sgewotLy8g
ICB0ZW1wbGF0ZTxjbGFzcyBCYXNlPiBzdHJ1Y3QgcGFjayA6IEJhc2UgewotLy8gICAgICB0eXBl
ZGVmIG1odHJhaXRzIDwgUGFyZW50ICwgTWVtYmVySG9vayAsIFB0clRvTWVtYmVyID4gcHJvdG9f
dmFsdWVfdHJhaXRzOwotLy8gICB9OwotLy99OwotLy8KLS8vI3VuZGVmIEJPT1NUX0lOVFJVU0lW
RV9DT01NQQotLy8jdW5kZWYgQk9PU1RfSU5UUlVTSVZFX0xFU1MKLS8vI3VuZGVmIEJPT1NUX0lO
VFJVU0lWRV9NT1JFCi0KLS8vIVRoaXMgb3B0aW9uIHNldHRlciBzcGVjaWZpZXMgdGhlIG1lbWJl
ciBob29rIHRoZQotLy8hY29udGFpbmVyIG11c3QgdXNlLgotdGVtcGxhdGU8IHR5cGVuYW1lIFBh
cmVudAotICAgICAgICAsIHR5cGVuYW1lIE1lbWJlckhvb2sKLSAgICAgICAgLCBNZW1iZXJIb29r
IFBhcmVudDo6KiBQdHJUb01lbWJlcj4KLXN0cnVjdCBtZW1iZXJfaG9vawotewotLy8gQGNvbmQK
LS8vICAgdHlwZWRlZiB0eXBlbmFtZSBNZW1iZXJIb29rOjpob29rdGFnczo6bm9kZV90cmFpdHMg
bm9kZV90cmFpdHM7Ci0vLyAgIHR5cGVkZWYgdHlwZW5hbWUgbm9kZV90cmFpdHM6Om5vZGUgbm9k
ZV90eXBlOwotLy8gICB0eXBlZGVmIG5vZGVfdHlwZSBQYXJlbnQ6OiogUHRyMk1lbU5vZGU7Ci0v
LyAgIHR5cGVkZWYgbWh0cmFpdHMKLS8vICAgICAgPCBQYXJlbnQKLS8vICAgICAgLCBub2RlX3Ry
YWl0cwotLy8gICAgICAvL1RoaXMgY2FzdCBpcyByZWFsbHkgdWdseSBidXQgbmVjZXNzYXJ5IHRv
IHJlZHVjZSB0ZW1wbGF0ZSBibG9hdC4KLS8vICAgICAgLy9TaW5jZSB3ZSBjb250cm9sIHRoZSBs
YXlvdXQgYmV0d2VlbiB0aGUgaG9vayBhbmQgdGhlIG5vZGUsIGFuZCB0aGVyZSBpcwotLy8gICAg
ICAvL2Fsd2F5cyBzaW5nbGUgaW5oZXJpdGFuY2UsIHRoZSBvZmZzZXQgb2YgdGhlIG5vZGUgaXMg
ZXhhY3RseSB0aGUgb2Zmc2V0IG9mCi0vLyAgICAgIC8vdGhlIGhvb2suIFNpbmNlIHRoZSBub2Rl
IHR5cGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIG1lbWJlciBob29rcywgdGhpcyBzYXZlcwotLy8g
ICAgICAvL3F1aXRlIGEgbG90IG9mIHN5bWJvbCBzdHVmZi4KLS8vICAgICAgLCAoUHRyMk1lbU5v
ZGUpUHRyVG9NZW1iZXIKLS8vICAgICAgLCBNZW1iZXJIb29rOjpob29rdGFnczo6bGlua19tb2Rl
PiBtZW1iZXJfdmFsdWVfdHJhaXRzOwotICAgdHlwZWRlZiBtaHRyYWl0cyA8UGFyZW50LCBNZW1i
ZXJIb29rLCBQdHJUb01lbWJlcj4gbWVtYmVyX3ZhbHVlX3RyYWl0czsKLSAgIHRlbXBsYXRlPGNs
YXNzIEJhc2U+Ci0gICBzdHJ1Y3QgcGFjayA6IEJhc2UKLSAgIHsKLSAgICAgIHR5cGVkZWYgbWVt
YmVyX3ZhbHVlX3RyYWl0cyBwcm90b192YWx1ZV90cmFpdHM7Ci0gICB9OwotLy8vIEBlbmRjb25k
Ci19OwotCi0vLyFUaGlzIG9wdGlvbiBzZXR0ZXIgc3BlY2lmaWVzIHRoZSBmdW5jdGlvbiBvYmpl
Y3QgdGhhdCB3aWxsCi0vLyFiZSB1c2VkIHRvIGNvbnZlcnQgYmV0d2VlbiB2YWx1ZXMgdG8gYmUg
aW5zZXJ0ZWQgaW4gYSBjb250YWluZXIKLS8vIWFuZCB0aGUgaG9vayB0byBiZSB1c2VkIGZvciB0
aGF0IHB1cnBvc2UuCi1CT09TVF9JTlRSVVNJVkVfT1BUSU9OX1RZUEUoZnVuY3Rpb25faG9vaywg
RnVuY3RvciwgZmh0cmFpdHM8RnVuY3Rvcj4sIHByb3RvX3ZhbHVlX3RyYWl0cykKLQotLy8hVGhp
cyBvcHRpb24gc2V0dGVyIHNwZWNpZmllcyB0aGF0IHRoZSBjb250YWluZXIKLS8vIW11c3QgdXNl
IHRoZSBzcGVjaWZpZWQgYmFzZSBob29rCi1CT09TVF9JTlRSVVNJVkVfT1BUSU9OX1RZUEUoYmFz
ZV9ob29rLCBCYXNlSG9vaywgQmFzZUhvb2ssIHByb3RvX3ZhbHVlX3RyYWl0cykKLQotLy8hVGhp
cyBvcHRpb24gc2V0dGVyIHNwZWNpZmllcyB0aGUgdHlwZSBvZgotLy8hYSB2b2lkIHBvaW50ZXIu
IFRoaXMgd2lsbCBpbnN0cnVjdCB0aGUgaG9vawotLy8hdG8gdXNlIHRoaXMgdHlwZSBvZiBwb2lu
dGVyIGluc3RlYWQgb2YgdGhlCi0vLyFkZWZhdWx0IG9uZQotQk9PU1RfSU5UUlVTSVZFX09QVElP
Tl9UWVBFKHZvaWRfcG9pbnRlciwgVm9pZFBvaW50ZXIsIFZvaWRQb2ludGVyLCB2b2lkX3BvaW50
ZXIpCi0KLS8vIVRoaXMgb3B0aW9uIHNldHRlciBzcGVjaWZpZXMgdGhlIHR5cGUgb2YKLS8vIXRo
ZSB0YWcgb2YgYSBiYXNlIGhvb2suIEEgdHlwZSBjYW5ub3QgaGF2ZSB0d28KLS8vIWJhc2UgaG9v
a3Mgb2YgdGhlIHNhbWUgdHlwZSwgc28gYSB0YWcgY2FuIGJlIHVzZWQKLS8vIXRvIGRpZmZlcmVu
dGlhdGUgdHdvIGJhc2UgaG9va3Mgd2l0aCBvdGhlcndpc2Ugc2FtZSB0eXBlCi1CT09TVF9JTlRS
VVNJVkVfT1BUSU9OX1RZUEUodGFnLCBUYWcsIFRhZywgdGFnKQotCi0vLyFUaGlzIG9wdGlvbiBz
ZXR0ZXIgc3BlY2lmaWVzIHRoZSBsaW5rIG1vZGUKLS8vIShub3JtYWxfbGluaywgc2FmZV9saW5r
IG9yIGF1dG9fdW5saW5rKQotQk9PU1RfSU5UUlVTSVZFX09QVElPTl9DT05TVEFOVChsaW5rX21v
ZGUsIGxpbmtfbW9kZV90eXBlLCBMaW5rVHlwZSwgbGlua19tb2RlKQotCi0vLyFUaGlzIG9wdGlv
biBzZXR0ZXIgc3BlY2lmaWVzIGlmIHRoZSBob29rCi0vLyFzaG91bGQgYmUgb3B0aW1pemVkIGZv
ciBzaXplIGluc3RlYWQgb2YgZm9yIHNwZWVkLgotQk9PU1RfSU5UUlVTSVZFX09QVElPTl9DT05T
VEFOVChvcHRpbWl6ZV9zaXplLCBib29sLCBFbmFibGVkLCBvcHRpbWl6ZV9zaXplKQotCi0vLyFU
aGlzIG9wdGlvbiBzZXR0ZXIgc3BlY2lmaWVzIGlmIHRoZSBzbGlzdCBjb250YWluZXIgc2hvdWxk
Ci0vLyF1c2UgYSBsaW5lYXIgaW1wbGVtZW50YXRpb24gaW5zdGVhZCBvZiBhIGNpcmN1bGFyIG9u
ZS4KLUJPT1NUX0lOVFJVU0lWRV9PUFRJT05fQ09OU1RBTlQobGluZWFyLCBib29sLCBFbmFibGVk
LCBsaW5lYXIpCi0KLS8vIUlmIHRydWUsIHNsaXN0IGFsc28gc3RvcmVzIGEgcG9pbnRlciB0byB0
aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBzaW5nbHkgbGlua2VkIGxpc3QuCi0vLyFUaGlzIGFsbG93
cyBPKDEpIHN3YXAgYW5kIHNwbGljZV9hZnRlcihpdGVyYXRvciwgc2xpc3QgJikgZm9yIGNpcmN1
bGFyIHNsaXN0cyBhbmQgbWFrZXMKLS8vIXBvc3NpYmxlIG5ldyBmdW5jdGlvbnMgbGlrZSBwdXNo
X2JhY2socmVmZXJlbmNlKSBhbmQgYmFjaygpLgotQk9PU1RfSU5UUlVTSVZFX09QVElPTl9DT05T
VEFOVChjYWNoZV9sYXN0LCBib29sLCBFbmFibGVkLCBjYWNoZV9sYXN0KQotCi0vLyFUaGlzIG9w
dGlvbiBzZXR0ZXIgc3BlY2lmaWVzIHRoZSBidWNrZXQgdHJhaXRzCi0vLyFjbGFzcyBmb3IgdW5v
cmRlcmVkIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMuIFdoZW4gdGhpcyBvcHRpb24gaXMgc3BlY2lm
aWVkLAotLy8haW5zdGVhZCBvZiB1c2luZyB0aGUgZGVmYXVsdCBidWNrZXQgdHJhaXRzLCBhIHVz
ZXIgZGVmaW5lZCBob2xkZXIgd2lsbCBiZSBkZWZpbmVkCi1CT09TVF9JTlRSVVNJVkVfT1BUSU9O
X1RZUEUoYnVja2V0X3RyYWl0cywgQnVja2V0VHJhaXRzLCBCdWNrZXRUcmFpdHMsIGJ1Y2tldF90
cmFpdHMpCi0KLS8vIVRoaXMgb3B0aW9uIHNldHRlciBzcGVjaWZpZXMgaWYgdGhlIHVub3JkZXJl
ZCBob29rCi0vLyFzaG91bGQgb2ZmZXIgcm9vbSB0byBzdG9yZSB0aGUgaGFzaCB2YWx1ZS4KLS8v
IVN0b3JpbmcgdGhlIGhhc2ggaW4gdGhlIGhvb2sgd2lsbCBzcGVlZCB1cCByZWhhc2hpbmcKLS8v
IXByb2Nlc3NlcyBpbiBhcHBsaWNhdGlvbnMgd2hlcmUgcmVoYXNoaW5nIGlzIGZyZXF1ZW50LAot
Ly8hcmVoYXNoaW5nIG1pZ2h0IHRocm93IG9yIHRoZSB2YWx1ZSBpcyBoZWF2eSB0byBoYXNoLgot
Qk9PU1RfSU5UUlVTSVZFX09QVElPTl9DT05TVEFOVChzdG9yZV9oYXNoLCBib29sLCBFbmFibGVk
LCBzdG9yZV9oYXNoKQotCi0vLyFUaGlzIG9wdGlvbiBzZXR0ZXIgc3BlY2lmaWVzIGlmIHRoZSB1
bm9yZGVyZWQgaG9vawotLy8hc2hvdWxkIG9mZmVyIHJvb20gdG8gc3RvcmUgYW5vdGhlciBsaW5r
IHRvIGFub3RoZXIgbm9kZQotLy8hd2l0aCB0aGUgc2FtZSBrZXkuCi0vLyFTdG9yaW5nIHRoaXMg
bGluayB3aWxsIHNwZWVkIHVwIGxvb2t1cHMgYW5kIGluc2VydGlvbnMgb24KLS8vIXVub3JkZXJl
ZF9tdWx0aXNldCBjb250YWluZXJzIHdpdGggYSBncmVhdCBudW1iZXIgb2YgZWxlbWVudHMKLS8v
IXdpdGggdGhlIHNhbWUga2V5LgotQk9PU1RfSU5UUlVTSVZFX09QVElPTl9DT05TVEFOVChvcHRp
bWl6ZV9tdWx0aWtleSwgYm9vbCwgRW5hYmxlZCwgb3B0aW1pemVfbXVsdGlrZXkpCi0KLS8vIVRo
aXMgb3B0aW9uIHNldHRlciBzcGVjaWZpZXMgaWYgdGhlIGJ1Y2tldCBhcnJheSB3aWxsIGJlIGFs
d2F5cyBwb3dlciBvZiB0d28uCi0vLyFUaGlzIGFsbG93cyB1c2luZyBtYXNrcyBpbnN0ZWFkIG9m
IHRoZSBkZWZhdWx0IG1vZHVsbyBvcGVyYXRpb24gdG8gZGV0ZXJtaW5lCi0vLyF0aGUgYnVja2V0
IG51bWJlciBmcm9tIHRoZSBoYXNoIHZhbHVlLCBsZWFkaW5nIHRvIGJldHRlciBwZXJmb3JtYW5j
ZS4KLS8vIUluIGRlYnVnIG1vZGUsIGlmIHBvd2VyIG9mIHR3byBidWNrZXRzIG1vZGUgaXMgYWN0
aXZhdGVkLCB0aGUgYnVja2V0IGxlbmd0aAotLy8hd2lsbCBiZSBjaGVja2VkIHdpdGggYXNzZXJ0
aW9ucy4KLUJPT1NUX0lOVFJVU0lWRV9PUFRJT05fQ09OU1RBTlQocG93ZXJfMl9idWNrZXRzLCBi
b29sLCBFbmFibGVkLCBwb3dlcl8yX2J1Y2tldHMpCi0KLS8vIVRoaXMgb3B0aW9uIHNldHRlciBz
cGVjaWZpZXMgaWYgdGhlIGNvbnRhaW5lciB3aWxsIGNhY2hlIGEgcG9pbnRlciB0byB0aGUgZmly
c3QKLS8vIW5vbi1lbXB0eSBidWNrZXQgc28gdGhhdCBiZWdpbigpIGlzIGFsd2F5cyBjb25zdGFu
dC10aW1lLgotLy8hVGhpcyBpcyBzcGVjaWFsbHkgaGVscGZ1bCB3aGVuIHdlIGNhbiBoYXZlIGNv
bnRhaW5lcnMgd2l0aCBhIGZldyBlbGVtZW50cwotLy8hYnV0IHdpdGggYmlnIGJ1Y2tldCBhcnJh
eXMgKHRoYXQgaXMsIGhhc2h0YWJsZXMgd2l0aCBsb3cgbG9hZCBmYWN0b3JzKS4KLUJPT1NUX0lO
VFJVU0lWRV9PUFRJT05fQ09OU1RBTlQoY2FjaGVfYmVnaW4sIGJvb2wsIEVuYWJsZWQsIGNhY2hl
X2JlZ2luKQotCi0vLyFUaGlzIG9wdGlvbiBzZXR0ZXIgc3BlY2lmaWVzIGlmIHRoZSBjb250YWlu
ZXIgd2lsbCBjb21wYXJlIHRoZSBoYXNoIHZhbHVlCi0vLyFiZWZvcmUgY29tcGFyaW5nIG9iamVj
dHMuIFRoaXMgb3B0aW9uIGNhbid0IGJlIHNwZWNpZmllZCBpZiBzdG9yZV9oYXNoPD4KLS8vIWlz
IG5vdCB0cnVlLgotLy8hVGhpcyBpcyBzcGVjaWFsbHkgaGVscGZ1bCB3aGVuIHdlIGhhdmUgY29u
dGFpbmVycyB3aXRoIGEgaGlnaCBsb2FkIGZhY3Rvci4KLS8vIWFuZCB0aGUgY29tcGFyaXNvbiBm
dW5jdGlvbiBpcyBtdWNoIG1vcmUgZXhwZW5zaXZlIHRoYXQgY29tcGFyaW5nIGFscmVhZHkKLS8v
IXN0b3JlZCBoYXNoIHZhbHVlcy4KLUJPT1NUX0lOVFJVU0lWRV9PUFRJT05fQ09OU1RBTlQoY29t
cGFyZV9oYXNoLCBib29sLCBFbmFibGVkLCBjb21wYXJlX2hhc2gpCi0KLS8vIVRoaXMgb3B0aW9u
IHNldHRlciBzcGVjaWZpZXMgaWYgdGhlIGhhc2ggY29udGFpbmVyIHdpbGwgdXNlIGluY3JlbWVu
dGFsCi0vLyFoYXNoaW5nLiBXaXRoIGluY3JlbWVudGFsIGhhc2hpbmcgdGhlIGNvc3Qgb2YgaGFz
aCB0YWJsZSBleHBhbnNpb24gaXMgc3ByZWFkCi0vLyFvdXQgYWNyb3NzIGVhY2ggaGFzaCB0YWJs
ZSBpbnNlcnRpb24gb3BlcmF0aW9uLCBhcyBvcHBvc2VkIHRvIGJlIGluY3VycmVkIGFsbCBhdCBv
bmNlLgotLy8hVGhlcmVmb3JlIGxpbmVhciBoYXNoaW5nIGlzIHdlbGwgc3VpdGVkIGZvciBpbnRl
cmFjdGl2ZSBhcHBsaWNhdGlvbnMgb3IgcmVhbC10aW1lCi0vLyFhcHBwbGljYXRpb25zIHdoZXJl
IHRoZSB3b3JzdC1jYXNlIGluc2VydGlvbiB0aW1lIG9mIG5vbi1pbmNyZW1lbnRhbCBoYXNoIGNv
bnRhaW5lcnMKLS8vIShyZWhhc2hpbmcgdGhlIHdob2xlIGJ1Y2tldCBhcnJheSkgaXMgbm90IGFk
bWlzaWJsZS4KLUJPT1NUX0lOVFJVU0lWRV9PUFRJT05fQ09OU1RBTlQoaW5jcmVtZW50YWwsIGJv
b2wsIEVuYWJsZWQsIGluY3JlbWVudGFsKQotCi0vLy8gQGNvbmQKLQotc3RydWN0IGhvb2tfZGVm
YXVsdHMKLXsKLSAgIHR5cGVkZWYgdm9pZCogdm9pZF9wb2ludGVyOwotICAgc3RhdGljIGNvbnN0
IGxpbmtfbW9kZV90eXBlIGxpbmtfbW9kZSA9IHNhZmVfbGluazsKLSAgIHR5cGVkZWYgZGZ0X3Rh
ZyB0YWc7Ci0gICBzdGF0aWMgY29uc3QgYm9vbCBvcHRpbWl6ZV9zaXplID0gZmFsc2U7Ci0gICBz
dGF0aWMgY29uc3QgYm9vbCBzdG9yZV9oYXNoID0gZmFsc2U7Ci0gICBzdGF0aWMgY29uc3QgYm9v
bCBsaW5lYXIgPSBmYWxzZTsKLSAgIHN0YXRpYyBjb25zdCBib29sIG9wdGltaXplX211bHRpa2V5
ID0gZmFsc2U7Ci19OwotCi0vLy8gQGVuZGNvbmQKLQotfSAgLy9uYW1lc3BhY2UgaW50cnVzaXZl
IHsKLX0gIC8vbmFtZXNwYWNlIGJvb3N0IHsKLQotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9k
ZXRhaWwvY29uZmlnX2VuZC5ocHA+Ci0KLSNlbmRpZiAgIC8vI2lmbmRlZiBCT09TVF9JTlRSVVNJ
VkVfT1BUSU9OU19IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9wYWNrX29wdGlvbnMuaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL3BhY2tfb3B0aW9ucy5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NDI0M2Y2NjFjMTFjODEwYTBmZDY3N2IyZWYy
YzliMzcwMzI2NzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL3Bh
Y2tfb3B0aW9ucy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNzQgKzAsMCBAQAotLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLS8vCi0vLyAoQykgQ29weXJpZ2h0IElvbiBHYXp0YW5hZ2EgIDIwMTMtMjAx
MwotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4KLS8vICAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0
IG9yIGNvcHkgYXQKLS8vICAgICAgICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9pbnRydXNpdmUgZm9y
IGRvY3VtZW50YXRpb24uCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotI2lmbmRlZiBCT09T
VF9JTlRSVVNJVkVfUEFDS19PUFRJT05TX0hQUAotI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfUEFD
S19PUFRJT05TX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC9jb25maWdf
YmVnaW4uaHBwPgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01BX09OQ0UpCi0jICBwcmFn
bWEgb25jZQotI2VuZGlmCi0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgaW50cnVzaXZl
IHsKLQotI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVfRE9YWUdFTl9JTlZPS0VECi0KLSNpZiAhZGVm
aW5lZChCT09TVF9JTlRSVVNJVkVfVkFSSUFESUNfVEVNUExBVEVTKQotCi10ZW1wbGF0ZTxjbGFz
cyBQcmV2LCBjbGFzcyBOZXh0Pgotc3RydWN0IGRvX3BhY2sKLXsKLSAgIC8vVXNlICJwYWNrIiBt
ZW1iZXIgdGVtcGxhdGUgdG8gcGFjayBvcHRpb25zCi0gICB0eXBlZGVmIHR5cGVuYW1lIE5leHQ6
OnRlbXBsYXRlIHBhY2s8UHJldj4gdHlwZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFByZXY+Ci1z
dHJ1Y3QgZG9fcGFjazxQcmV2LCB2b2lkPgotewotICAgLy9Bdm9pZCBwYWNraW5nICJ2b2lkIiB0
byBzaG9ydGVuIHRlbXBsYXRlIG5hbWVzCi0gICB0eXBlZGVmIFByZXYgdHlwZTsKLX07Ci0KLXRl
bXBsYXRlCi0gICA8IGNsYXNzIERlZmF1bHRPcHRpb25zCi0gICAsIGNsYXNzIE8xICAgICAgICAg
PSB2b2lkCi0gICAsIGNsYXNzIE8yICAgICAgICAgPSB2b2lkCi0gICAsIGNsYXNzIE8zICAgICAg
ICAgPSB2b2lkCi0gICAsIGNsYXNzIE80ICAgICAgICAgPSB2b2lkCi0gICAsIGNsYXNzIE81ICAg
ICAgICAgPSB2b2lkCi0gICAsIGNsYXNzIE82ICAgICAgICAgPSB2b2lkCi0gICAsIGNsYXNzIE83
ICAgICAgICAgPSB2b2lkCi0gICAsIGNsYXNzIE84ICAgICAgICAgPSB2b2lkCi0gICAsIGNsYXNz
IE85ICAgICAgICAgPSB2b2lkCi0gICAsIGNsYXNzIE8xMCAgICAgICAgPSB2b2lkCi0gICAsIGNs
YXNzIE8xMSAgICAgICAgPSB2b2lkCi0gICA+Ci1zdHJ1Y3QgcGFja19vcHRpb25zCi17Ci0gICAv
LyBqb2luIG9wdGlvbnMKLSAgIHR5cGVkZWYKLSAgICAgIHR5cGVuYW1lIGRvX3BhY2sKLSAgICAg
IDwgIHR5cGVuYW1lIGRvX3BhY2sKLSAgICAgICAgIDwgIHR5cGVuYW1lIGRvX3BhY2sKLSAgICAg
ICAgICAgIDwgIHR5cGVuYW1lIGRvX3BhY2sKLSAgICAgICAgICAgICAgIDwgIHR5cGVuYW1lIGRv
X3BhY2sKLSAgICAgICAgICAgICAgICAgIDwgIHR5cGVuYW1lIGRvX3BhY2sKLSAgICAgICAgICAg
ICAgICAgICAgIDwgIHR5cGVuYW1lIGRvX3BhY2sKLSAgICAgICAgICAgICAgICAgICAgICAgIDwg
IHR5cGVuYW1lIGRvX3BhY2sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgIHR5cGVuYW1l
IGRvX3BhY2sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgIHR5cGVuYW1lIGRvX3Bh
Y2sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgIHR5cGVuYW1lIGRvX3BhY2sK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgRGVmYXVsdE9wdGlvbnMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgTzEKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID46OnR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgTzIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID46OnR5cGUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgTzMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID46OnR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICwgTzQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgID46OnR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICwgTzUKLSAg
ICAgICAgICAgICAgICAgICAgICAgID46OnR5cGUKLSAgICAgICAgICAgICAgICAgICAgICwgTzYK
LSAgICAgICAgICAgICAgICAgICAgID46OnR5cGUKLSAgICAgICAgICAgICAgICAgICwgTzcKLSAg
ICAgICAgICAgICAgICAgID46OnR5cGUKLSAgICAgICAgICAgICAgICwgTzgKLSAgICAgICAgICAg
ICAgID46OnR5cGUKLSAgICAgICAgICAgICwgTzkKLSAgICAgICAgICAgID46OnR5cGUKLSAgICAg
ICAgICwgTzEwCi0gICAgICAgICA+Ojp0eXBlCi0gICAgICAsIE8xMQotICAgICAgPjo6dHlwZQot
ICAgdHlwZTsKLX07Ci0jZWxzZQotCi0vL2luZGV4X3R1cGxlCi10ZW1wbGF0ZTxpbnQuLi4gSW5k
ZXhlcz4KLXN0cnVjdCBpbmRleF90dXBsZXt9OwotCi0vL2J1aWxkX251bWJlcl9zZXEKLXRlbXBs
YXRlPHN0ZDo6c2l6ZV90IE51bSwgdHlwZW5hbWUgVHVwbGUgPSBpbmRleF90dXBsZTw+ID4KLXN0
cnVjdCBidWlsZF9udW1iZXJfc2VxOwotCi10ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOdW0sIGludC4u
LiBJbmRleGVzPgotc3RydWN0IGJ1aWxkX251bWJlcl9zZXE8TnVtLCBpbmRleF90dXBsZTxJbmRl
eGVzLi4uPiA+Ci0gICA6IGJ1aWxkX251bWJlcl9zZXE8TnVtIC0gMSwgaW5kZXhfdHVwbGU8SW5k
ZXhlcy4uLiwgc2l6ZW9mLi4uKEluZGV4ZXMpPiA+Ci17fTsKLQotdGVtcGxhdGU8aW50Li4uIElu
ZGV4ZXM+Ci1zdHJ1Y3QgYnVpbGRfbnVtYmVyX3NlcTwwLCBpbmRleF90dXBsZTxJbmRleGVzLi4u
PiA+Ci17ICB0eXBlZGVmIGluZGV4X3R1cGxlPEluZGV4ZXMuLi4+IHR5cGU7ICB9OwotCi10ZW1w
bGF0ZTxjbGFzcyAuLi5UeXBlcz4KLXN0cnVjdCB0eXBlbGlzdAote307Ci0KLS8vaW52ZXJ0X3R5
cGVsaXN0Ci10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IGludmVydF90eXBlbGlzdDsKLQotdGVt
cGxhdGU8aW50IEksIHR5cGVuYW1lIFR1cGxlPgotc3RydWN0IHR5cGVsaXN0X2VsZW1lbnQ7Ci0K
LXRlbXBsYXRlPGludCBJLCB0eXBlbmFtZSBIZWFkLCB0eXBlbmFtZS4uLiBUYWlsPgotc3RydWN0
IHR5cGVsaXN0X2VsZW1lbnQ8SSwgdHlwZWxpc3Q8SGVhZCwgVGFpbC4uLj4gPgotewotICAgdHlw
ZWRlZiB0eXBlbmFtZSB0eXBlbGlzdF9lbGVtZW50PEktMSwgdHlwZWxpc3Q8VGFpbC4uLj4gPjo6
dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSGVhZCwgdHlwZW5hbWUuLi4gVGFp
bD4KLXN0cnVjdCB0eXBlbGlzdF9lbGVtZW50PDAsIHR5cGVsaXN0PEhlYWQsIFRhaWwuLi4+ID4K
LXsKLSAgIHR5cGVkZWYgSGVhZCB0eXBlOwotfTsKLQotdGVtcGxhdGU8aW50IC4uLkludHMsIGNs
YXNzIC4uLlR5cGVzPgotdHlwZWxpc3Q8dHlwZW5hbWUgdHlwZWxpc3RfZWxlbWVudDwoc2l6ZW9m
Li4uKFR5cGVzKSAtIDEpIC0gSW50cywgdHlwZWxpc3Q8VHlwZXMuLi4+ID46OnR5cGUuLi4+Ci0g
ICBpbnZlcnRlZF90eXBlbGlzdChpbmRleF90dXBsZTxJbnRzLi4uPiwgdHlwZWxpc3Q8VHlwZXMu
Li4+KQotewotICAgcmV0dXJuIHR5cGVsaXN0PHR5cGVuYW1lIHR5cGVsaXN0X2VsZW1lbnQ8KHNp
emVvZi4uLihUeXBlcykgLSAxKSAtIEludHMsIHR5cGVsaXN0PFR5cGVzLi4uPiA+Ojp0eXBlLi4u
PigpOwotfQotCi0vL3NpemVvZl90eXBlbGlzdAotdGVtcGxhdGU8Y2xhc3MgVHlwZWxpc3Q+Ci1z
dHJ1Y3Qgc2l6ZW9mX3R5cGVsaXN0OwotCi10ZW1wbGF0ZTxjbGFzcyAuLi5UeXBlcz4KLXN0cnVj
dCBzaXplb2ZfdHlwZWxpc3Q8IHR5cGVsaXN0PFR5cGVzLi4uPiA+Ci17Ci0gICBzdGF0aWMgY29u
c3Qgc3RkOjpzaXplX3QgdmFsdWUgPSBzaXplb2YuLi4oVHlwZXMpOwotfTsKLQotLy9pbnZlcnRf
dHlwZWxpc3RfaW1wbAotdGVtcGxhdGU8Y2xhc3MgVHlwZWxpc3QsIGNsYXNzIEluZGV4ZXM+Ci1z
dHJ1Y3QgaW52ZXJ0X3R5cGVsaXN0X2ltcGw7Ci0KLQotdGVtcGxhdGU8Y2xhc3MgVHlwZWxpc3Qs
IGludCAuLi5JbnRzPgotc3RydWN0IGludmVydF90eXBlbGlzdF9pbXBsPCBUeXBlbGlzdCwgaW5k
ZXhfdHVwbGU8SW50cy4uLj4gPgotewotICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IGxhc3Rf
aWR4ID0gc2l6ZW9mX3R5cGVsaXN0PFR5cGVsaXN0Pjo6dmFsdWUgLSAxOwotICAgdHlwZWRlZiB0
eXBlbGlzdAotICAgICAgPHR5cGVuYW1lIHR5cGVsaXN0X2VsZW1lbnQ8bGFzdF9pZHggLSBJbnRz
LCBUeXBlbGlzdD46OnR5cGUuLi4+IHR5cGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBUeXBlbGlz
dCwgaW50IEludD4KLXN0cnVjdCBpbnZlcnRfdHlwZWxpc3RfaW1wbDwgVHlwZWxpc3QsIGluZGV4
X3R1cGxlPEludD4gPgotewotICAgdHlwZWRlZiBUeXBlbGlzdCB0eXBlOwotfTsKLQotdGVtcGxh
dGU8Y2xhc3MgVHlwZWxpc3Q+Ci1zdHJ1Y3QgaW52ZXJ0X3R5cGVsaXN0X2ltcGw8IFR5cGVsaXN0
LCBpbmRleF90dXBsZTw+ID4KLXsKLSAgIHR5cGVkZWYgVHlwZWxpc3QgdHlwZTsKLX07Ci0KLS8v
aW52ZXJ0X3R5cGVsaXN0Ci10ZW1wbGF0ZTxjbGFzcyBUeXBlbGlzdD4KLXN0cnVjdCBpbnZlcnRf
dHlwZWxpc3Q7Ci0KLXRlbXBsYXRlPGNsYXNzIC4uLlR5cGVzPgotc3RydWN0IGludmVydF90eXBl
bGlzdDwgdHlwZWxpc3Q8VHlwZXMuLi4+ID4KLXsKLSAgIHR5cGVkZWYgdHlwZWxpc3Q8VHlwZXMu
Li4+IHR5cGVsaXN0X3Q7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIGJ1aWxkX251bWJlcl9zZXE8c2l6
ZW9mLi4uKFR5cGVzKT46OnR5cGUgaW5kZXhlc190OwotICAgdHlwZWRlZiB0eXBlbmFtZSBpbnZl
cnRfdHlwZWxpc3RfaW1wbDx0eXBlbGlzdF90LCBpbmRleGVzX3Q+Ojp0eXBlIHR5cGU7Ci19Owot
Ci0vL0RvIHBhY2sKLXRlbXBsYXRlPGNsYXNzIFR5cGVsaXN0Pgotc3RydWN0IGRvX3BhY2s7Ci0K
LXRlbXBsYXRlPD4KLXN0cnVjdCBkb19wYWNrPHR5cGVsaXN0PD4gPjsKLQotdGVtcGxhdGU8Y2xh
c3MgUHJldj4KLXN0cnVjdCBkb19wYWNrPHR5cGVsaXN0PFByZXY+ID4KLXsKLSAgIHR5cGVkZWYg
UHJldiB0eXBlOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgUHJldiwgY2xhc3MgTGFzdD4KLXN0cnVj
dCBkb19wYWNrPHR5cGVsaXN0PFByZXYsIExhc3Q+ID4KLXsKLSAgIHR5cGVkZWYgdHlwZW5hbWUg
UHJldjo6dGVtcGxhdGUgcGFjazxMYXN0PiB0eXBlOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgUHJl
diwgY2xhc3MgLi4uT3RoZXJzPgotc3RydWN0IGRvX3BhY2s8dHlwZWxpc3Q8UHJldiwgT3RoZXJz
Li4uPiA+Ci17Ci0gICB0eXBlZGVmIHR5cGVuYW1lIFByZXY6OnRlbXBsYXRlIHBhY2sKLSAgICAg
IDx0eXBlbmFtZSBkb19wYWNrPHR5cGVsaXN0PE90aGVycy4uLj4gPjo6dHlwZT4gdHlwZTsKLX07
Ci0KLQotdGVtcGxhdGU8Y2xhc3MgRGVmYXVsdE9wdGlvbnMsIGNsYXNzIC4uLk9wdGlvbnM+Ci1z
dHJ1Y3QgcGFja19vcHRpb25zCi17Ci0gICB0eXBlZGVmIHR5cGVsaXN0PERlZmF1bHRPcHRpb25z
LCBPcHRpb25zLi4uPiB0eXBlbGlzdF90OwotICAgdHlwZWRlZiB0eXBlbmFtZSBpbnZlcnRfdHlw
ZWxpc3Q8dHlwZWxpc3RfdD46OnR5cGUgaW52ZXJ0ZWRfdHlwZWxpc3Q7Ci0gICB0eXBlZGVmIHR5
cGVuYW1lIGRvX3BhY2s8aW52ZXJ0ZWRfdHlwZWxpc3Q+Ojp0eXBlIHR5cGU7Ci19OwotCi0jZW5k
aWYgICAvLyFkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9WQVJJQURJQ19URU1QTEFURVMpCi0KLSNk
ZWZpbmUgQk9PU1RfSU5UUlVTSVZFX09QVElPTl9UWVBFKE9QVElPTl9OQU1FLCBUWVBFLCBUWVBF
REVGX0VYUFIsIFRZUEVERUZfTkFNRSkgXAotdGVtcGxhdGU8IGNsYXNzIFRZUEU+IFwKLXN0cnVj
dCBPUFRJT05fTkFNRSBcCi17IFwKLSAgIHRlbXBsYXRlPGNsYXNzIEJhc2U+IFwKLSAgIHN0cnVj
dCBwYWNrIDogQmFzZSBcCi0gICB7IFwKLSAgICAgIHR5cGVkZWYgVFlQRURFRl9FWFBSIFRZUEVE
RUZfTkFNRTsgXAotICAgfTsgXAotfTsgXAotLy8KLQotI2RlZmluZSBCT09TVF9JTlRSVVNJVkVf
T1BUSU9OX0NPTlNUQU5UKE9QVElPTl9OQU1FLCBUWVBFLCBWQUxVRSwgQ09OU1RBTlRfTkFNRSkg
XAotdGVtcGxhdGU8IFRZUEUgVkFMVUU+IFwKLXN0cnVjdCBPUFRJT05fTkFNRSBcCi17IFwKLSAg
IHRlbXBsYXRlPGNsYXNzIEJhc2U+IFwKLSAgIHN0cnVjdCBwYWNrIDogQmFzZSBcCi0gICB7IFwK
LSAgICAgIHN0YXRpYyBjb25zdCBUWVBFIENPTlNUQU5UX05BTUUgPSBWQUxVRTsgXAotICAgfTsg
XAotfTsgXAotLy8KLQotI2Vsc2UgICAgLy8jaWZuZGVmIEJPT1NUX0lOVFJVU0lWRV9ET1hZR0VO
X0lOVk9LRUQKLQotLy8hIFRoaXMgY2xhc3MgaXMgYSB1dGlsaXR5IHRoYXQgdGFrZXM6Ci0vLyEg
ICAtIGEgZGVmYXVsdCBvcHRpb25zIGNsYXNzIGRlZmluaW5nIGluaXRpYWwgc3RhdGljIGNvbnN0
YW50Ci0vLyEgICBhbmQgdHlwZWRlZnMKLS8vISAgIC0gc2V2ZXJhbCBvcHRpb25zIGRlZmluZWQg
d2l0aCBCT09TVF9JTlRSVVNJVkVfT1BUSU9OX0NPTlNUQU5UIGFuZAotLy8hIEJPT1NUX0lOVFJV
U0lWRV9PUFRJT05fVFlQRQotLy8hCi0vLyEgYW5kIHBhY2tzIHRoZW0gdG9nZXRoZXIgaW4gYSBu
ZXcgdHlwZSB0aGF0IGRlZmluZXMgYWxsIG9wdGlvbnMgYXMKLS8vISBtZW1iZXIgdHlwZWRlZnMg
b3Igc3RhdGljIGNvbnN0YW50IHZhbHVlcy4gR2l2ZW4gb3B0aW9ucyBvZiBmb3JtOgotLy8hCi0v
LyEgXGNvZGUKLS8vISAgIEJPT1NUX0lOVFJVU0lWRV9PUFRJT05fVFlQRShteV9wb2ludGVyLCBW
b2lkUG9pbnRlciwgVm9pZFBvaW50ZXIsIG15X3BvaW50ZXJfdHlwZSkKLS8vISAgIEJPT1NUX0lO
VFJVU0lWRV9PUFRJT05fQ09OU1RBTlQoaW5jcmVtZW50YWwsIGJvb2wsIEVuYWJsZWQsIGlzX2lu
Y3JlbWVudGFsKQotLy8hIFxlbmRjb2RlCi0vLyEKLS8vISB0aGUgZm9sbG93aW5nIGV4cHJlc3Np
b24KLS8vIQotLy8hIFxjb2RlCi0vLyEKLS8vISBzdHJ1Y3QgZGVmYXVsdF9vcHRpb25zCi0vLyEg
ewotLy8hICAgdHlwZWRlZiBsb25nICAgICAgaW50X3R5cGU7Ci0vLyEgICBzdGF0aWMgY29uc3Qg
aW50ICBpbnRfY29uc3RhbnQgPSAtMTsKLS8vISB9OwotLy8hCi0vLyEgcGFja19vcHRpb25zPCBk
ZWZhdWx0X29wdGlvbnMsIG15X3BvaW50ZXI8dm9pZCo+LCBpbmNyZW1lbnRhbDx0cnVlPiA+Ojp0
eXBlCi0vLyEgXGVuZGNvZGUKLS8vIQotLy8hIHdpbGwgY3JlYXRlIGEgdHlwZSB0aGF0IHdpbGwg
Y29udGFpbiB0aGUgZm9sbG93aW5nIHR5cGVkZWZzL2NvbnN0YW50cwotLy8hCi0vLyEgXGNvZGUK
LS8vISAgIHN0cnVjdCB1bnNwZWNpZmllZF90eXBlCi0vLyEgICB7Ci0vLyEgICAgICAvL0RlZmF1
bHQgb3B0aW9ucwotLy8hICAgICAgdHlwZWRlZiBsb25nICAgICAgaW50X3R5cGU7Ci0vLyEgICAg
ICBzdGF0aWMgY29uc3QgaW50ICBpbnRfY29uc3RhbnQgID0gLTE7Ci0vLyEKLS8vISAgICAgIC8v
UGFja2VkIG9wdGlvbnMgKHdpbGwgb3Zld3JpdGUgYW55IGRlZmF1bHQgb3B0aW9uKQotLy8hICAg
ICAgdHlwZWRlZiB2b2lkKiAgICAgbXlfcG9pbnRlcl90eXBlOwotLy8hICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaW5jcmVtZW50YWwgPSB0cnVlOwotLy8hICAgfTsKLS8vISBcZW5kY29kZQot
Ly8hCi0vLyEgSWYgYW4gb3B0aW9uIGlzIHNwZWNpZmllZCBpbiB0aGUgZGVmYXVsdCBvcHRpb25z
IGFyZ3VtZW50IGFuZCBsYXRlcgotLy8hIHJlZGVmaW5lZCBhcyBhbiBvcHRpb24sIHRoZSBsYXN0
IGRlZmluaXRpb24gd2lsbCBwcmV2YWlsLgotdGVtcGxhdGU8Y2xhc3MgRGVmYXVsdE9wdGlvbnMs
IGNsYXNzIC4uLk9wdGlvbnM+Ci1zdHJ1Y3QgcGFja19vcHRpb25zCi17Ci0gICB0eXBlZGVmIHVu
c3BlY2lmaWVkX3R5cGUgdHlwZTsKLX07Ci0KLS8vISBEZWZpbmVzIGFuIG9wdGlvbiBjbGFzcyBv
ZiBuYW1lIE9QVElPTl9OQU1FIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHR5cGUKLS8v
ISBvZiB0eXBlIFRZUEUuLi4KLS8vIQotLy8hIFxjb2RlCi0vLyEgc3RydWN0IE9QVElPTl9OQU1F
PGNsYXNzIFRZUEU+Ci0vLyEgeyAgdW5zcGVjaWZpZWRfY29udGVudCAgfTsKLS8vISBcZW5kY29k
ZQotLy8hCi0vLyEgLi4udGhhdCBhZnRlciBiZWluZyBjb21iaW5lZCB3aXRoCi0vLyEgPGNvZGU+
Ym9vc3Q6OmludHJ1c2l2ZTo6cGFja19vcHRpb25zPC9jb2RlPiwKLS8vISB3aWxsIHR5cGVkZWYg
VFlQRSBhcyBhIHR5cGVkZWYgb2YgbmFtZSBUWVBFREVGX05BTUUuIEV4YW1wbGU6Ci0vLyEKLS8v
ISBcY29kZQotLy8hICAgLy9baW5jbHVkZXMgYW5kIG5hbWVzcGFjZXMgb21pdHRlZCBmb3IgYnJl
dml0eV0KLS8vIQotLy8hICAgLy9UaGlzIG1hY3JvIHdpbGwgY3JlYXRlIHRoZSBmb2xsb3dpbmcg
Y2xhc3M6Ci0vLyEgICAvLyAgICB0ZW1wbGF0ZTxjbGFzcyBWb2lkUG9pbnRlcj4KLS8vISAgIC8v
ICAgIHN0cnVjdCBteV9wb2ludGVyCi0vLyEgICAvLyAgICB7IHVuc3BlY2lmaWVkX2NvbnRlbnQg
fTsKLS8vISAgIEJPT1NUX0lOVFJVU0lWRV9PUFRJT05fVFlQRShteV9wb2ludGVyLCBWb2lkUG9p
bnRlciwgYm9vc3Q6OnJlbW92ZV9wb2ludGVyPFZvaWRQb2ludGVyPjo6dHlwZSwgbXlfcG9pbnRl
cl90eXBlKQotLy8hCi0vLyEgICBzdHJ1Y3QgZW1wdHlfZGVmYXVsdHt9OwotLy8hCi0vLyEgICB0
eXBlZGVmIHBhY2tfb3B0aW9uczwgZW1wdHlfZGVmYXVsdCwgdHlwZW5hbWUgbXlfcG9pbnRlcjx2
b2lkKj4gPjo6dHlwZTo6bXlfcG9pbnRlcl90eXBlIHR5cGU7Ci0vLyEKLS8vISAgIEJPT1NUX1NU
QVRJQ19BU1NFUlQoKCBib29zdDo6aXNfc2FtZTx0eXBlLCB2b2lkPjo6dmFsdWUgKSk7Ci0vLyEK
LS8vISBcZW5kY29kZQotI2RlZmluZSBCT09TVF9JTlRSVVNJVkVfT1BUSU9OX1RZUEUoT1BUSU9O
X05BTUUsIFRZUEUsIFRZUEVERUZfRVhQUiwgVFlQRURFRl9OQU1FKQotCi0vLyEgRGVmaW5lcyBh
biBvcHRpb24gY2xhc3Mgb2YgbmFtZSBPUFRJT05fTkFNRSB0aGF0IGNhbiBiZSB1c2VkIHRvIHNw
ZWNpZnkgYSBjb25zdGFudAotLy8hIG9mIHR5cGUgVFlQRSB3aXRoIHZhbHVlIFZBTFVFLi4uCi0v
LyEKLS8vISBcY29kZQotLy8hIHN0cnVjdCBPUFRJT05fTkFNRTxUWVBFIFZBTFVFPgotLy8hIHsg
IHVuc3BlY2lmaWVkX2NvbnRlbnQgIH07Ci0vLyEgXGVuZGNvZGUKLS8vIQotLy8hIC4uLnRoYXQg
YWZ0ZXIgYmVpbmcgY29tYmluZWQgd2l0aAotLy8hIDxjb2RlPmJvb3N0OjppbnRydXNpdmU6OnBh
Y2tfb3B0aW9uczwvY29kZT4sCi0vLyEgd2lsbCBjb250YWluIGEgQ09OU1RBTlRfTkFNRSBzdGF0
aWMgY29uc3RhbnQgb2YgdmFsdWUgVkFMVUUuIEV4YW1wbGU6Ci0vLyEKLS8vISBcY29kZQotLy8h
ICAgLy9baW5jbHVkZXMgYW5kIG5hbWVzcGFjZXMgb21pdHRlZCBmb3IgYnJldml0eV0KLS8vIQot
Ly8hICAgLy9UaGlzIG1hY3JvIHdpbGwgY3JlYXRlIHRoZSBmb2xsb3dpbmcgY2xhc3M6Ci0vLyEg
ICAvLyAgICB0ZW1wbGF0ZTxib29sIEVuYWJsZWQ+Ci0vLyEgICAvLyAgICBzdHJ1Y3QgaW5jcmVt
ZW50YWwKLS8vISAgIC8vICAgIHsgdW5zcGVjaWZpZWRfY29udGVudCB9OwotLy8hICAgQk9PU1Rf
SU5UUlVTSVZFX09QVElPTl9DT05TVEFOVChpbmNyZW1lbnRhbCwgYm9vbCwgRW5hYmxlZCwgaXNf
aW5jcmVtZW50YWwpCi0vLyEKLS8vISAgIHN0cnVjdCBlbXB0eV9kZWZhdWx0e307Ci0vLyEKLS8v
ISAgIGNvbnN0IGJvb2wgaXNfaW5jcmVtZW50YWwgPSBwYWNrX29wdGlvbnM8IGVtcHR5X2RlZmF1
bHQsIGluY3JlbWVudGFsPHRydWU+ID46OnR5cGU6OmlzX2luY3JlbWVudGFsOwotLy8hCi0vLyEg
ICBCT09TVF9TVEFUSUNfQVNTRVJUKCggaXNfaW5jcmVtZW50YWwgPT0gdHJ1ZSApKTsKLS8vIQot
Ly8hIFxlbmRjb2RlCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9PUFRJT05fQ09OU1RBTlQoT1BU
SU9OX05BTUUsIFRZUEUsIFZBTFVFLCBDT05TVEFOVF9OQU1FKQotCi0jZW5kaWYgICAvLyNpZm5k
ZWYgQk9PU1RfSU5UUlVTSVZFX0RPWFlHRU5fSU5WT0tFRAotCi0KLX0gIC8vbmFtZXNwYWNlIGlu
dHJ1c2l2ZSB7Ci19ICAvL25hbWVzcGFjZSBib29zdCB7Ci0KLSNpbmNsdWRlIDxib29zdC9pbnRy
dXNpdmUvZGV0YWlsL2NvbmZpZ19lbmQuaHBwPgotCi0jZW5kaWYgICAvLyNpZm5kZWYgQk9PU1Rf
SU5UUlVTSVZFX1BBQ0tfT1BUSU9OU19IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2ludHJ1c2l2ZS9wb2ludGVyX3JlYmluZC5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvcG9pbnRl
cl9yZWJpbmQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTkyZTA2ZTFkZWI0
ZWVjYTk4M2Y2MzgzOTk0NWQxZTMyYTY4MGFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L2ludHJ1c2l2ZS9wb2ludGVyX3JlYmluZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODgg
KzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gKEMpIENvcHlyaWdodCBJb24g
R2F6dGFuYWdhIDIwMTQtMjAxNC4gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0Ci0vLyBTb2Z0
d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZQotLy8gTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAu
dHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3Ig
ZG9jdW1lbnRhdGlvbi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotI2lmbmRlZiBCT09T
VF9JTlRSVVNJVkVfUE9JTlRFUl9SRUJJTkRfSFBQCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9Q
T0lOVEVSX1JFQklORF9IUFAKLQotI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVfREVUQUlMX1dPUktB
Uk9VTkRfSFBQCi0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFpbC93b3JrYXJvdW5kLmhw
cD4KLSNlbmRpZiAgIC8vQk9PU1RfSU5UUlVTSVZFX0RFVEFJTF9XT1JLQVJPVU5EX0hQUAotCi0j
aWZuZGVmIEJPT1NUX0NPTkZJR19IUFAKLSMgIGluY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0j
ZW5kaWYKLQotI2lmIGRlZmluZWQoQk9PU1RfSEFTX1BSQUdNQV9PTkNFKQotIyAgcHJhZ21hIG9u
Y2UKLSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIGludHJ1c2l2ZSB7Ci0K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy9zdHJ1Y3QgcG9pbnRlcl9yZWJpbmRfbW9k
ZQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUHRyLCB0
eXBlbmFtZSBVPgotc3RydWN0IHBvaW50ZXJfaGFzX3JlYmluZAotewotICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFY+IHN0cnVjdCBhbnkKLSAgIHsgIGFueShjb25zdCBWJikgeyB9IH07Ci0KLSAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBYPgotICAgc3RhdGljIGNoYXIgdGVzdChpbnQsIHR5cGVuYW1lIFg6
OnRlbXBsYXRlIHJlYmluZDxVPiopOwotCi0gICB0ZW1wbGF0ZSA8dHlwZW5hbWUgWD4KLSAgIHN0
YXRpYyBpbnQgdGVzdChhbnk8aW50Piwgdm9pZCopOwotCi0gICBzdGF0aWMgY29uc3QgYm9vbCB2
YWx1ZSA9ICgxID09IHNpemVvZih0ZXN0PFB0cj4oMCwgMCkpKTsKLX07Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBQdHIsIHR5cGVuYW1lIFU+Ci1zdHJ1Y3QgcG9pbnRlcl9oYXNfcmViaW5kX290aGVy
Ci17Ci0gICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVj4gc3RydWN0IGFueQotICAgeyAgYW55KGNvbnN0
IFYmKSB7IH0gfTsKLQotICAgdGVtcGxhdGUgPHR5cGVuYW1lIFg+Ci0gICBzdGF0aWMgY2hhciB0
ZXN0KGludCwgdHlwZW5hbWUgWDo6dGVtcGxhdGUgcmViaW5kPFU+OjpvdGhlciopOwotCi0gICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgWD4KLSAgIHN0YXRpYyBpbnQgdGVzdChhbnk8aW50Piwgdm9pZCop
OwotCi0gICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9ICgxID09IHNpemVvZih0ZXN0PFB0cj4o
MCwgMCkpKTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBQdHIsIHR5cGVuYW1lIFU+Ci1zdHJ1
Y3QgcG9pbnRlcl9yZWJpbmRfbW9kZQotewotICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBy
ZWJpbmQgPSAgICAgICAodW5zaWduZWQgaW50KXBvaW50ZXJfaGFzX3JlYmluZDxQdHIsIFU+Ojp2
YWx1ZTsKLSAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmViaW5kX290aGVyID0gKHVuc2ln
bmVkIGludClwb2ludGVyX2hhc19yZWJpbmRfb3RoZXI8UHRyLCBVPjo6dmFsdWU7Ci0gICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgaW50IG1vZGUgPSAgICAgICAgIHJlYmluZCArIHJlYmluZCpyZWJp
bmRfb3RoZXI7Ci19OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vc3RydWN0IHBvaW50
ZXJfcmViaW5kZXIKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGUgPHR5cGVuYW1l
IFB0ciwgdHlwZW5hbWUgVSwgdW5zaWduZWQgaW50IFJlYmluZE1vZGU+Ci1zdHJ1Y3QgcG9pbnRl
cl9yZWJpbmRlcjsKLQotLy8gSW1wbGVtZW50YXRpb24gb2YgcG9pbnRlcl9yZWJpbmRlcjxVPjo6
dHlwZSBpZiBQdHIgaGFzCi0vLyBpdHMgb3duIHJlYmluZDxVPjo6b3RoZXIgdHlwZSAoQysrMDMp
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgUHRyLCB0eXBlbmFtZSBVPgotc3RydWN0IHBvaW50ZXJfcmVi
aW5kZXI8IFB0ciwgVSwgMnUgPgotewotICAgdHlwZWRlZiB0eXBlbmFtZSBQdHI6OnRlbXBsYXRl
IHJlYmluZDxVPjo6b3RoZXIgdHlwZTsKLX07Ci0KLS8vIEltcGxlbWVudGF0aW9uIG9mIHBvaW50
ZXJfcmViaW5kZXI8VT46OnR5cGUgaWYgUHRyIGhhcwotLy8gaXRzIG93biByZWJpbmQgdGVtcGxh
dGUuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUHRyLCB0eXBlbmFtZSBVPgotc3RydWN0IHBvaW50ZXJf
cmViaW5kZXI8IFB0ciwgVSwgMXUgPgotewotICAgdHlwZWRlZiB0eXBlbmFtZSBQdHI6OnRlbXBs
YXRlIHJlYmluZDxVPiB0eXBlOwotfTsKLQotLy8gU3BlY2lhbGl6YXRpb24gb2YgcG9pbnRlcl9y
ZWJpbmRlciBpZiBQdHIgZG9lcyBub3QKLS8vIGhhdmUgaXRzIG93biByZWJpbmQgdGVtcGxhdGUg
YnV0IGhhcyBhIHRoZSBmb3JtIFB0cjxBLCBBbi4uLj4sCi0vLyB3aGVyZSBBbi4uLiBjb21wcmlz
ZXMgemVybyBvciBtb3JlIHR5cGUgcGFyYW1ldGVycy4KLS8vIE1hbnkgdHlwZXMgZml0IHRoaXMg
Zm9ybSwgaGVuY2UgbWFueSBwb2ludGVycyB3aWxsIGdldCBhCi0vLyByZWFzb25hYmxlIGRlZmF1
bHQgZm9yIHJlYmluZC4KLSNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9WQVJJQURJQ19URU1Q
TEFURVMpCi0KLXRlbXBsYXRlIDx0ZW1wbGF0ZSA8Y2xhc3MsIGNsYXNzLi4uPiBjbGFzcyBQdHIs
IHR5cGVuYW1lIEEsIGNsYXNzLi4uIEFuLCBjbGFzcyBVPgotc3RydWN0IHBvaW50ZXJfcmViaW5k
ZXI8UHRyPEEsIEFuLi4uPiwgVSwgMHUgPgotewotICAgdHlwZWRlZiBQdHI8VSwgQW4uLi4+IHR5
cGU7Ci19OwotCi0vL05lZWRlZCBmb3Igbm9uLWNvbmZvcm1pbmcgY29tcGlsZXJzIGxpa2UgR0ND
IDQuMwotdGVtcGxhdGUgPHRlbXBsYXRlIDxjbGFzcz4gY2xhc3MgUHRyLCB0eXBlbmFtZSBBLCBj
bGFzcyBVPgotc3RydWN0IHBvaW50ZXJfcmViaW5kZXI8UHRyPEE+LCBVLCAwdSA+Ci17Ci0gICB0
eXBlZGVmIFB0cjxVPiB0eXBlOwotfTsKLQotI2Vsc2UgLy9DKyswMyBjb21waWxlcnMKLQotdGVt
cGxhdGUgPHRlbXBsYXRlIDxjbGFzcz4gY2xhc3MgUHRyICAvLzBhcmcKLSAgICAgICAgICwgdHlw
ZW5hbWUgQQotICAgICAgICAgLCBjbGFzcyBVPgotc3RydWN0IHBvaW50ZXJfcmViaW5kZXI8UHRy
PEE+LCBVLCAwdT4KLXsgIHR5cGVkZWYgUHRyPFU+IHR5cGU7ICAgfTsKLQotdGVtcGxhdGUgPHRl
bXBsYXRlIDxjbGFzcywgY2xhc3M+IGNsYXNzIFB0ciAgLy8xYXJnCi0gICAgICAgICAsIHR5cGVu
YW1lIEEsIGNsYXNzIFAwCi0gICAgICAgICAsIGNsYXNzIFU+Ci1zdHJ1Y3QgcG9pbnRlcl9yZWJp
bmRlcjxQdHI8QSwgUDA+LCBVLCAwdT4KLXsgIHR5cGVkZWYgUHRyPFUsIFAwPiB0eXBlOyAgIH07
Ci0KLXRlbXBsYXRlIDx0ZW1wbGF0ZSA8Y2xhc3MsIGNsYXNzLCBjbGFzcz4gY2xhc3MgUHRyICAv
LzJhcmcKLSAgICAgICAgICwgdHlwZW5hbWUgQSwgY2xhc3MgUDAsIGNsYXNzIFAxCi0gICAgICAg
ICAsIGNsYXNzIFU+Ci1zdHJ1Y3QgcG9pbnRlcl9yZWJpbmRlcjxQdHI8QSwgUDAsIFAxPiwgVSwg
MHU+Ci17ICB0eXBlZGVmIFB0cjxVLCBQMCwgUDE+IHR5cGU7ICAgfTsKLQotdGVtcGxhdGUgPHRl
bXBsYXRlIDxjbGFzcywgY2xhc3MsIGNsYXNzLCBjbGFzcz4gY2xhc3MgUHRyICAvLzNhcmcKLSAg
ICAgICAgICwgdHlwZW5hbWUgQSwgY2xhc3MgUDAsIGNsYXNzIFAxLCBjbGFzcyBQMgotICAgICAg
ICAgLCBjbGFzcyBVPgotc3RydWN0IHBvaW50ZXJfcmViaW5kZXI8UHRyPEEsIFAwLCBQMSwgUDI+
LCBVLCAwdT4KLXsgIHR5cGVkZWYgUHRyPFUsIFAwLCBQMSwgUDI+IHR5cGU7ICAgfTsKLQotdGVt
cGxhdGUgPHRlbXBsYXRlIDxjbGFzcywgY2xhc3MsIGNsYXNzLCBjbGFzcywgY2xhc3M+IGNsYXNz
IFB0ciAgLy80YXJnCi0gICAgICAgICAsIHR5cGVuYW1lIEEsIGNsYXNzIFAwLCBjbGFzcyBQMSwg
Y2xhc3MgUDIsIGNsYXNzIFAzCi0gICAgICAgICAsIGNsYXNzIFU+Ci1zdHJ1Y3QgcG9pbnRlcl9y
ZWJpbmRlcjxQdHI8QSwgUDAsIFAxLCBQMiwgUDM+LCBVLCAwdT4KLXsgIHR5cGVkZWYgUHRyPFUs
IFAwLCBQMSwgUDIsIFAzPiB0eXBlOyAgIH07Ci0KLXRlbXBsYXRlIDx0ZW1wbGF0ZSA8Y2xhc3Ms
IGNsYXNzLCBjbGFzcywgY2xhc3MsIGNsYXNzLCBjbGFzcz4gY2xhc3MgUHRyICAvLzVhcmcKLSAg
ICAgICAgICwgdHlwZW5hbWUgQSwgY2xhc3MgUDAsIGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3Mg
UDMsIGNsYXNzIFA0Ci0gICAgICAgICAsIGNsYXNzIFU+Ci1zdHJ1Y3QgcG9pbnRlcl9yZWJpbmRl
cjxQdHI8QSwgUDAsIFAxLCBQMiwgUDMsIFA0PiwgVSwgMHU+Ci17ICB0eXBlZGVmIFB0cjxVLCBQ
MCwgUDEsIFAyLCBQMywgUDQ+IHR5cGU7ICAgfTsKLQotdGVtcGxhdGUgPHRlbXBsYXRlIDxjbGFz
cywgY2xhc3MsIGNsYXNzLCBjbGFzcywgY2xhc3MsIGNsYXNzLCBjbGFzcz4gY2xhc3MgUHRyICAv
LzZhcmcKLSAgICAgICAgICwgdHlwZW5hbWUgQSwgY2xhc3MgUDAsIGNsYXNzIFAxLCBjbGFzcyBQ
MiwgY2xhc3MgUDMsIGNsYXNzIFA0LCBjbGFzcyBQNQotICAgICAgICAgLCBjbGFzcyBVPgotc3Ry
dWN0IHBvaW50ZXJfcmViaW5kZXI8UHRyPEEsIFAwLCBQMSwgUDIsIFAzLCBQNCwgUDU+LCBVLCAw
dT4KLXsgIHR5cGVkZWYgUHRyPFUsIFAwLCBQMSwgUDIsIFAzLCBQNCwgUDU+IHR5cGU7ICAgfTsK
LQotdGVtcGxhdGUgPHRlbXBsYXRlIDxjbGFzcywgY2xhc3MsIGNsYXNzLCBjbGFzcywgY2xhc3Ms
IGNsYXNzLCBjbGFzcywgY2xhc3M+IGNsYXNzIFB0ciAgLy83YXJnCi0gICAgICAgICAsIHR5cGVu
YW1lIEEsIGNsYXNzIFAwLCBjbGFzcyBQMSwgY2xhc3MgUDIsIGNsYXNzIFAzLCBjbGFzcyBQNCwg
Y2xhc3MgUDUsIGNsYXNzIFA2Ci0gICAgICAgICAsIGNsYXNzIFU+Ci1zdHJ1Y3QgcG9pbnRlcl9y
ZWJpbmRlcjxQdHI8QSwgUDAsIFAxLCBQMiwgUDMsIFA0LCBQNSwgUDY+LCBVLCAwdT4KLXsgIHR5
cGVkZWYgUHRyPFUsIFAwLCBQMSwgUDIsIFAzLCBQNCwgUDUsIFA2PiB0eXBlOyAgIH07Ci0KLXRl
bXBsYXRlIDx0ZW1wbGF0ZSA8Y2xhc3MsIGNsYXNzLCBjbGFzcywgY2xhc3MsIGNsYXNzLCBjbGFz
cywgY2xhc3MsIGNsYXNzLCBjbGFzcz4gY2xhc3MgUHRyICAvLzhhcmcKLSAgICAgICAgICwgdHlw
ZW5hbWUgQSwgY2xhc3MgUDAsIGNsYXNzIFAxLCBjbGFzcyBQMiwgY2xhc3MgUDMsIGNsYXNzIFA0
LCBjbGFzcyBQNSwgY2xhc3MgUDYsIGNsYXNzIFA3Ci0gICAgICAgICAsIGNsYXNzIFU+Ci1zdHJ1
Y3QgcG9pbnRlcl9yZWJpbmRlcjxQdHI8QSwgUDAsIFAxLCBQMiwgUDMsIFA0LCBQNSwgUDYsIFA3
PiwgVSwgMHU+Ci17ICB0eXBlZGVmIFB0cjxVLCBQMCwgUDEsIFAyLCBQMywgUDQsIFA1LCBQNiwg
UDc+IHR5cGU7ICAgfTsKLQotdGVtcGxhdGUgPHRlbXBsYXRlIDxjbGFzcywgY2xhc3MsIGNsYXNz
LCBjbGFzcywgY2xhc3MsIGNsYXNzLCBjbGFzcywgY2xhc3MsIGNsYXNzLCBjbGFzcz4gY2xhc3Mg
UHRyICAvLzlhcmcKLSAgICAgICAgICwgdHlwZW5hbWUgQSwgY2xhc3MgUDAsIGNsYXNzIFAxLCBj
bGFzcyBQMiwgY2xhc3MgUDMsIGNsYXNzIFA0LCBjbGFzcyBQNSwgY2xhc3MgUDYsIGNsYXNzIFA3
LCBjbGFzcyBQOAotICAgICAgICAgLCBjbGFzcyBVPgotc3RydWN0IHBvaW50ZXJfcmViaW5kZXI8
UHRyPEEsIFAwLCBQMSwgUDIsIFAzLCBQNCwgUDUsIFA2LCBQNywgUDg+LCBVLCAwdT4KLXsgIHR5
cGVkZWYgUHRyPFUsIFAwLCBQMSwgUDIsIFAzLCBQNCwgUDUsIFA2LCBQNywgUDg+IHR5cGU7ICAg
fTsKLQotI2VuZGlmICAgLy8hZGVmaW5lZChCT09TVF9OT19DWFgxMV9WQVJJQURJQ19URU1QTEFU
RVMpCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBQdHIsIHR5cGVuYW1lIFU+Ci1zdHJ1Y3QgcG9pbnRl
cl9yZWJpbmQKLSAgIDogcHVibGljIHBvaW50ZXJfcmViaW5kZXI8UHRyLCBVLCBwb2ludGVyX3Jl
YmluZF9tb2RlPFB0ciwgVT46Om1vZGU+Ci17fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+Ci1zdHJ1Y3QgcG9pbnRlcl9yZWJpbmQ8VCosIFU+Ci17ICB0eXBlZGVmIFUqIHR5
cGU7IH07Ci0KLX0gIC8vbmFtZXNwYWNlIGNvbnRhaW5lciB7Ci19ICAvL25hbWVzcGFjZSBib29z
dCB7Ci0KLSNlbmRpZiAvLyBkZWZpbmVkKEJPT1NUX0lOVFJVU0lWRV9QT0lOVEVSX1JFQklORF9I
UFApCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9pbnRydXNpdmUvcG9pbnRlcl90cmFpdHMuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvaW50cnVzaXZlL3BvaW50ZXJfdHJhaXRzLmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNWJhZjVlODA3Y2VjNDg0Yzk3NzhmNTY1ZGQzZmQwMDZjY2Q4
YjVhNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pbnRydXNpdmUvcG9pbnRlcl90
cmFpdHMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzE4ICswLDAgQEAKLS8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotLy8KLS8vIChDKSBDb3B5cmlnaHQgUGFibG8gSGFscGVybiAyMDA5LiBEaXN0cmli
dXRlZCB1bmRlciB0aGUgQm9vc3QKLS8vIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAo
U2VlIGFjY29tcGFueWluZyBmaWxlCi0vLyBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0vLwotLy8gKEMpIENvcHlyaWdodCBJb24gR2F6dGFuYWdhIDIwMTEtMjAxNC4gRGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIEJvb3N0Ci0vLyBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4g
KFNlZSBhY2NvbXBhbnlpbmcgZmlsZQotLy8gTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9saWJzL2ludHJ1c2l2ZSBmb3IgZG9jdW1lbnRhdGlvbi4KLS8vCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLQotI2lmbmRlZiBCT09TVF9JTlRSVVNJVkVfUE9JTlRFUl9UUkFJVFNf
SFBQCi0jZGVmaW5lIEJPT1NUX0lOVFJVU0lWRV9QT0lOVEVSX1RSQUlUU19IUFAKLQotI2luY2x1
ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRhaWwvY29uZmlnX2JlZ2luLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9pbnRydXNpdmUvZGV0YWlsL3dvcmthcm91bmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2lu
dHJ1c2l2ZS9wb2ludGVyX3JlYmluZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2Rl
dGFpbC9wb2ludGVyX2VsZW1lbnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS9kZXRh
aWwvbXBsLmhwcD4KLSNpbmNsdWRlIDxjc3RkZGVmPgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNf
UFJBR01BX09OQ0UpCi0jICBwcmFnbWEgb25jZQotI2VuZGlmCi0KLW5hbWVzcGFjZSBib29zdCB7
Ci1uYW1lc3BhY2UgaW50cnVzaXZlIHsKLW5hbWVzcGFjZSBkZXRhaWwgewotCi0jaWYgIWRlZmlu
ZWQoQk9PU1RfTVNWQykgfHwgKEJPT1NUX01TVkMgPiAxMzEwKQotQk9PU1RfSU5UUlVTSVZFX0hB
U19TVEFUSUNfTUVNQkVSX0ZVTkNfU0lHTkFUVVJFKGhhc19tZW1iZXJfZnVuY3Rpb25fY2FsbGFi
bGVfd2l0aF9wb2ludGVyX3RvLCBwb2ludGVyX3RvKQotQk9PU1RfSU5UUlVTSVZFX0hBU19TVEFU
SUNfTUVNQkVSX0ZVTkNfU0lHTkFUVVJFKGhhc19tZW1iZXJfZnVuY3Rpb25fY2FsbGFibGVfd2l0
aF9keW5hbWljX2Nhc3RfZnJvbSwgZHluYW1pY19jYXN0X2Zyb20pCi1CT09TVF9JTlRSVVNJVkVf
SEFTX1NUQVRJQ19NRU1CRVJfRlVOQ19TSUdOQVRVUkUoaGFzX21lbWJlcl9mdW5jdGlvbl9jYWxs
YWJsZV93aXRoX3N0YXRpY19jYXN0X2Zyb20sIHN0YXRpY19jYXN0X2Zyb20pCi1CT09TVF9JTlRS
VVNJVkVfSEFTX1NUQVRJQ19NRU1CRVJfRlVOQ19TSUdOQVRVUkUoaGFzX21lbWJlcl9mdW5jdGlv
bl9jYWxsYWJsZV93aXRoX2NvbnN0X2Nhc3RfZnJvbSwgY29uc3RfY2FzdF9mcm9tKQotI2Vsc2UK
LUJPT1NUX0lOVFJVU0lWRV9IQVNfTUVNQkVSX0ZVTkNfQ0FMTEVEX0lHTk9SRV9TSUdOQVRVUkUo
aGFzX21lbWJlcl9mdW5jdGlvbl9jYWxsYWJsZV93aXRoX3BvaW50ZXJfdG8sIHBvaW50ZXJfdG8p
Ci1CT09TVF9JTlRSVVNJVkVfSEFTX01FTUJFUl9GVU5DX0NBTExFRF9JR05PUkVfU0lHTkFUVVJF
KGhhc19tZW1iZXJfZnVuY3Rpb25fY2FsbGFibGVfd2l0aF9keW5hbWljX2Nhc3RfZnJvbSwgZHlu
YW1pY19jYXN0X2Zyb20pCi1CT09TVF9JTlRSVVNJVkVfSEFTX01FTUJFUl9GVU5DX0NBTExFRF9J
R05PUkVfU0lHTkFUVVJFKGhhc19tZW1iZXJfZnVuY3Rpb25fY2FsbGFibGVfd2l0aF9zdGF0aWNf
Y2FzdF9mcm9tLCBzdGF0aWNfY2FzdF9mcm9tKQotQk9PU1RfSU5UUlVTSVZFX0hBU19NRU1CRVJf
RlVOQ19DQUxMRURfSUdOT1JFX1NJR05BVFVSRShoYXNfbWVtYmVyX2Z1bmN0aW9uX2NhbGxhYmxl
X3dpdGhfY29uc3RfY2FzdF9mcm9tLCBjb25zdF9jYXN0X2Zyb20pCi0jZW5kaWYKLQotQk9PU1Rf
SU5UUlVTSVZFX0lOU1RBTlRJQVRFX0VWQUxfREVGQVVMVF9UWVBFX1RNUExUKGVsZW1lbnRfdHlw
ZSkKLUJPT1NUX0lOVFJVU0lWRV9JTlNUQU5USUFURV9ERUZBVUxUX1RZUEVfVE1QTFQoZGlmZmVy
ZW5jZV90eXBlKQotQk9PU1RfSU5UUlVTSVZFX0lOU1RBTlRJQVRFX0RFRkFVTFRfVFlQRV9UTVBM
VChyZWZlcmVuY2UpCi1CT09TVF9JTlRSVVNJVkVfSU5TVEFOVElBVEVfREVGQVVMVF9UWVBFX1RN
UExUKHZhbHVlX3RyYWl0c19wdHIpCi0KLX0gIC8vbmFtZXNwYWNlIGRldGFpbCB7Ci0KLQotLy8h
IHBvaW50ZXJfdHJhaXRzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBDKysxMSBzdGQ6OnBvaW50
ZXJfdHJhaXRzIGNsYXNzIHdpdGggc29tZQotLy8hIGV4dGVuc2lvbnMgbGlrZSBjYXN0aW5ncy4K
LS8vIQotLy8hIHBvaW50ZXJfdHJhaXRzIHN1cHBsaWVzIGEgdW5pZm9ybSBpbnRlcmZhY2UgdG8g
Y2VydGFpbiBhdHRyaWJ1dGVzIG9mIHBvaW50ZXItbGlrZSB0eXBlcy4KLS8vIQotLy8hIDxiPk5v
dGU8L2I+OiBXaGVuIGRlZmluaW5nIGEgY3VzdG9tIGZhbWlseSBvZiBwb2ludGVycyBvciByZWZl
cmVuY2VzIHRvIGJlIHVzZWQgd2l0aCBCSQotLy8hIGxpYnJhcnksIG1ha2Ugc3VyZSB0aGUgcHVi
bGljIHN0YXRpYyBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhY2Nlc3NlZCB0aHJvdWdoCi0vLyEgdGhl
IGBwb2ludGVyX3RyYWl0c2AgaW50ZXJmYWNlIChgKl9jYXN0X2Zyb21gIGFuZCBgcG9pbnRlcl90
b2ApIGNhbgotLy8hIHByb3Blcmx5IGNvbnZlcnQgYmV0d2VlbiBjb25zdCBhbmQgbm9uY29uc3Qg
cmVmZXJyZWQgbWVtYmVyIHR5cGVzCi0vLyEgPGI+d2l0aG91dCB0aGUgdXNlIG9mIGltcGxpY2l0
IGNvbnN0cnVjdG9yIGNhbGxzPC9iPi4gSXQgaXMgc3VnZ2VzdGVkIHRoZXNlCi0vLyEgY29udmVy
c2lvbnMgYmUgaW1wbGVtZW50ZWQgYXMgZnVuY3Rpb24gdGVtcGxhdGVzLCB3aGVyZSB0aGUgdGVt
cGxhdGUKLS8vISBhcmd1bWVudCBpcyB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGJlaW5nIGNvbnZl
cnRlZCBmcm9tLgotdGVtcGxhdGUgPHR5cGVuYW1lIFB0cj4KLXN0cnVjdCBwb2ludGVyX3RyYWl0
cwotewotICAgI2lmZGVmIEJPT1NUX0lOVFJVU0lWRV9ET1hZR0VOX0lOVk9LRUQKLSAgICAgIC8v
IVRoZSBwb2ludGVyIHR5cGUKLSAgICAgIC8vIXF1ZXJpZWQgYnkgdGhpcyBwb2ludGVyX3RyYWl0
cyBpbnN0YW50aWF0aW9uCi0gICAgICB0eXBlZGVmIFB0ciAgICAgICAgICAgICBwb2ludGVyOwot
Ci0gICAgICAvLyFQdHI6OmVsZW1lbnRfdHlwZSBpZiBzdWNoIGEgdHlwZSBleGlzdHM7IG90aGVy
d2lzZSwgVCBpZiBQdHIgaXMgYSBjbGFzcwotICAgICAgLy8hdGVtcGxhdGUgaW5zdGFudGlhdGlv
biBvZiB0aGUgZm9ybSBTb21lUG9pbnRlcjxULCBBcmdzPiwgd2hlcmUgQXJncyBpcyB6ZXJvIG9y
Ci0gICAgICAvLyFtb3JlIHR5cGUgYXJndW1lbnRzIDsgb3RoZXJ3aXNlICwgdGhlIHNwZWNpYWxp
emF0aW9uIGlzIGlsbC1mb3JtZWQuCi0gICAgICB0eXBlZGVmIHVuc3BlY2lmaWVkX3R5cGUgZWxl
bWVudF90eXBlOwotCi0gICAgICAvLyFQdHI6OmRpZmZlcmVuY2VfdHlwZSBpZiBzdWNoIGEgdHlw
ZSBleGlzdHM7IG90aGVyd2lzZSwKLSAgICAgIC8vIXN0ZDo6cHRyZGlmZl90LgotICAgICAgdHlw
ZWRlZiB1bnNwZWNpZmllZF90eXBlIGRpZmZlcmVuY2VfdHlwZTsKLQotICAgICAgLy8hUHRyOjpy
ZWJpbmQ8VT4gaWYgc3VjaCBhIHR5cGUgZXhpc3RzOyBvdGhlcndpc2UsIFNvbWVQb2ludGVyPFUs
IEFyZ3M+IGlmIFB0ciBpcwotICAgICAgLy8hYSBjbGFzcyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9u
IG9mIHRoZSBmb3JtIFNvbWVQb2ludGVyPFQsIEFyZ3M+LCB3aGVyZSBBcmdzIGlzIHplcm8gb3IK
LSAgICAgIC8vIW1vcmUgdHlwZSBhcmd1bWVudHMgOyBvdGhlcndpc2UsIHRoZSBpbnN0YW50aWF0
aW9uIG9mIHJlYmluZCBpcyBpbGwtZm9ybWVkLgotICAgICAgLy8hCi0gICAgICAvLyFGb3IgcG9y
dGFibGUgY29kZSBmb3IgQysrMDMgYW5kIEMrKzExLCA8cHJlPnR5cGVuYW1lIHJlYmluZF9wb2lu
dGVyPFU+Ojp0eXBlPC9wcmU+Ci0gICAgICAvLyFzaGFsbCBiZSB1c2VkIGluc3RlYWQgb2YgcmVi
aW5kPFU+IHRvIG9idGFpbiBhIHBvaW50ZXIgdG8gVS4KLSAgICAgIHRlbXBsYXRlIDxjbGFzcyBV
PiB1c2luZyByZWJpbmQgPSB1bnNwZWNpZmllZDsKLQotICAgICAgLy8hUHRyOjpyZWZlcmVuY2Ug
aWYgc3VjaCBhIHR5cGUgZXhpc3RzIChub24tc3RhbmRhcmQgZXh0ZW5zaW9uKTsgb3RoZXJ3aXNl
LCBlbGVtZW50X3R5cGUgJgotICAgICAgLy8hCi0gICAgICB0eXBlZGVmIHVuc3BlY2lmaWVkX3R5
cGUgcmVmZXJlbmNlOwotICAgI2Vsc2UKLSAgICAgIHR5cGVkZWYgUHRyICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7Ci0g
ICAgICAvLwotICAgICAgdHlwZWRlZiBCT09TVF9JTlRSVVNJVkVfT0JUQUlOX1RZUEVfV0lUSF9F
VkFMX0RFRkFVTFQKLSAgICAgICAgICggYm9vc3Q6OmludHJ1c2l2ZTo6ZGV0YWlsOjosIFB0ciwg
ZWxlbWVudF90eXBlCi0gICAgICAgICAsIGJvb3N0OjppbnRydXNpdmU6OmRldGFpbDo6Zmlyc3Rf
cGFyYW08UHRyPikgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X3R5cGU7Ci0gICAgICAv
LwotICAgICAgdHlwZWRlZiBCT09TVF9JTlRSVVNJVkVfT0JUQUlOX1RZUEVfV0lUSF9ERUZBVUxU
Ci0gICAgICAgICAoYm9vc3Q6OmludHJ1c2l2ZTo6ZGV0YWlsOjosIFB0ciwgZGlmZmVyZW5jZV90
eXBlLCBzdGQ6OnB0cmRpZmZfdCkgICBkaWZmZXJlbmNlX3R5cGU7Ci0KLSAgICAgIHR5cGVkZWYg
Qk9PU1RfSU5UUlVTSVZFX09CVEFJTl9UWVBFX1dJVEhfREVGQVVMVAotICAgICAgICAgKGJvb3N0
OjppbnRydXNpdmU6OmRldGFpbDo6LCBQdHIsIHJlZmVyZW5jZSwgdHlwZW5hbWUgYm9vc3Q6Omlu
dHJ1c2l2ZTo6ZGV0YWlsOjp1bnZvaWRfcmVmPGVsZW1lbnRfdHlwZT46OnR5cGUpICAgcmVmZXJl
bmNlOwotICAgICAgLy8KLSAgICAgIHRlbXBsYXRlIDxjbGFzcyBVPiBzdHJ1Y3QgcmViaW5kX3Bv
aW50ZXIKLSAgICAgIHsKLSAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmludHJ1c2l2
ZTo6cG9pbnRlcl9yZWJpbmQ8UHRyLCBVPjo6dHlwZSAgdHlwZTsKLSAgICAgIH07Ci0KLSAgICAg
ICNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9URU1QTEFURV9BTElBU0VTKQotICAgICAgICAg
dGVtcGxhdGUgPGNsYXNzIFU+IHVzaW5nIHJlYmluZCA9IHR5cGVuYW1lIGJvb3N0OjppbnRydXNp
dmU6OnBvaW50ZXJfcmViaW5kPFB0ciwgVT46OnR5cGU7Ci0gICAgICAjZW5kaWYKLSAgICNlbmRp
ZiAgIC8vI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1RFTVBMQVRFX0FMSUFTRVMpCi0KLSAg
IC8vISA8Yj5SZW1hcms8L2I+OiBJZiBlbGVtZW50X3R5cGUgaXMgKHBvc3NpYmx5IGN2LXF1YWxp
ZmllZCkgdm9pZCwgciB0eXBlIGlzIHVuc3BlY2lmaWVkOyBvdGhlcndpc2UsCi0gICAvLyEgICBp
dCBpcyBlbGVtZW50X3R5cGUgJi4KLSAgIC8vIQotICAgLy8hIDxiPlJldHVybnM8L2I+OiBBIGRl
cmVmZXJlbmNlYWJsZSBwb2ludGVyIHRvIHIgb2J0YWluZWQgYnkgY2FsbGluZyBQdHI6OnBvaW50
ZXJfdG8ocmVmZXJlbmNlKS4KLSAgIC8vISAgIE5vbi1zdGFuZGFyZCBleHRlbnNpb246IElmIHN1
Y2ggZnVuY3Rpb24gZG9lcyBub3QgZXhpc3QsIHJldHVybnMgcG9pbnRlcihhZGRyZXNzb2Yocikp
OwotICAgLy8hCi0gICAvLyEgPGI+Tm90ZTwvYj46IEZvciBub24tY29uZm9ybWluZyBjb21waWxl
cnMgb25seSB0aGUgZXhpc3RlbmNlIG9mIGEgbWVtYmVyIGZ1bmN0aW9uIGNhbGxlZAotICAgLy8h
ICAgPGNvZGU+cG9pbnRlcl90bzwvY29kZT4gaXMgY2hlY2tlZC4KLSAgIHN0YXRpYyBwb2ludGVy
IHBvaW50ZXJfdG8ocmVmZXJlbmNlIHIpCi0gICB7Ci0gICAgICAvL05vbi1zdGFuZGFyZCBleHRl
bnNpb24sIGl0IGRvZXMgbm90IHJlcXVpcmUgUHRyOjpwb2ludGVyX3RvLiBJZiBub3QgcHJlc2Vu
dAotICAgICAgLy90cmllcyB0byBjb252ZXJ0cyAmciB0byBwb2ludGVyLgotICAgICAgY29uc3Qg
Ym9vbCB2YWx1ZSA9IGJvb3N0OjppbnRydXNpdmU6OmRldGFpbDo6Ci0gICAgICAgICBoYXNfbWVt
YmVyX2Z1bmN0aW9uX2NhbGxhYmxlX3dpdGhfcG9pbnRlcl90bwotICAgICAgICAgICAgPFB0ciwg
UHRyICgqKShyZWZlcmVuY2UpPjo6dmFsdWU7Ci0gICAgICBib29zdDo6aW50cnVzaXZlOjpkZXRh
aWw6OmJvb2xfPHZhbHVlPiBmbGFnOwotICAgICAgcmV0dXJuIHBvaW50ZXJfdHJhaXRzOjpwcml2
X3BvaW50ZXJfdG8oZmxhZywgcik7Ci0gICB9Ci0KLSAgIC8vISA8Yj5SZW1hcms8L2I+OiBOb24t
c3RhbmRhcmQgZXh0ZW5zaW9uLgotICAgLy8hCi0gICAvLyEgPGI+UmV0dXJuczwvYj46IEEgZGVy
ZWZlcmVuY2VhYmxlIHBvaW50ZXIgdG8gciBvYnRhaW5lZCBieSBjYWxsaW5nIHRoZSBzdGF0aWMg
dGVtcGxhdGUgZnVuY3Rpb24KLSAgIC8vISAgIFB0cjo6c3RhdGljX2Nhc3RfZnJvbShVUHByL2Nv
bnN0IFVQcHIgJikuCi0gICAvLyEgICBJZiBzdWNoIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0LCBy
ZXR1cm5zIHBvaW50ZXJfdG8oc3RhdGljX2Nhc3Q8ZWxlbWVudF90eXBlJj4oKnVwdHIpKQotICAg
Ly8hCi0gICAvLyEgPGI+Tm90ZTwvYj46IEZvciBub24tY29uZm9ybWluZyBjb21waWxlcnMgb25s
eSB0aGUgZXhpc3RlbmNlIG9mIGEgbWVtYmVyIGZ1bmN0aW9uIGNhbGxlZAotICAgLy8hICAgPGNv
ZGU+c3RhdGljX2Nhc3RfZnJvbTwvY29kZT4gaXMgY2hlY2tlZC4KLSAgIHRlbXBsYXRlPGNsYXNz
IFVQdHI+Ci0gICBzdGF0aWMgcG9pbnRlciBzdGF0aWNfY2FzdF9mcm9tKGNvbnN0IFVQdHIgJnVw
dHIpCi0gICB7Ci0gICAgICB0eXBlZGVmIGNvbnN0IFVQdHIgJlJlZkFyZzsKLSAgICAgIGNvbnN0
IGJvb2wgdmFsdWUgPSBib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6OgotICAgICAgICAgaGFzX21l
bWJlcl9mdW5jdGlvbl9jYWxsYWJsZV93aXRoX3N0YXRpY19jYXN0X2Zyb20KLSAgICAgICAgICAg
IDxwb2ludGVyLCBwb2ludGVyKCopKFJlZkFyZyk+Ojp2YWx1ZQotICAgICAgICAgfHwgYm9vc3Q6
OmludHJ1c2l2ZTo6ZGV0YWlsOjoKLSAgICAgICAgICAgICAgIGhhc19tZW1iZXJfZnVuY3Rpb25f
Y2FsbGFibGVfd2l0aF9zdGF0aWNfY2FzdF9mcm9tCi0gICAgICAgICAgICAgICAgICA8cG9pbnRl
ciwgcG9pbnRlcigqKShVUHRyKT46OnZhbHVlOwotICAgICAgcmV0dXJuIHBvaW50ZXJfdHJhaXRz
Ojpwcml2X3N0YXRpY19jYXN0X2Zyb20oYm9vc3Q6OmludHJ1c2l2ZTo6ZGV0YWlsOjpib29sXzx2
YWx1ZT4oKSwgdXB0cik7Ci0gICB9Ci0KLSAgIC8vISA8Yj5SZW1hcms8L2I+OiBOb24tc3RhbmRh
cmQgZXh0ZW5zaW9uLgotICAgLy8hCi0gICAvLyEgPGI+UmV0dXJuczwvYj46IEEgZGVyZWZlcmVu
Y2VhYmxlIHBvaW50ZXIgdG8gciBvYnRhaW5lZCBieSBjYWxsaW5nIHRoZSBzdGF0aWMgdGVtcGxh
dGUgZnVuY3Rpb24KLSAgIC8vISAgIFB0cjo6Y29uc3RfY2FzdF9mcm9tPFVQdHI+KFVQcHIvY29u
c3QgVVBwciAmKS4KLSAgIC8vISAgIElmIHN1Y2ggZnVuY3Rpb24gZG9lcyBub3QgZXhpc3QsIHJl
dHVybnMgcG9pbnRlcl90byhjb25zdF9jYXN0PGVsZW1lbnRfdHlwZSY+KCp1cHRyKSkKLSAgIC8v
IQotICAgLy8hIDxiPk5vdGU8L2I+OiBGb3Igbm9uLWNvbmZvcm1pbmcgY29tcGlsZXJzIG9ubHkg
dGhlIGV4aXN0ZW5jZSBvZiBhIG1lbWJlciBmdW5jdGlvbiBjYWxsZWQKLSAgIC8vISAgIDxjb2Rl
PmNvbnN0X2Nhc3RfZnJvbTwvY29kZT4gaXMgY2hlY2tlZC4KLSAgIHRlbXBsYXRlPGNsYXNzIFVQ
dHI+Ci0gICBzdGF0aWMgcG9pbnRlciBjb25zdF9jYXN0X2Zyb20oY29uc3QgVVB0ciAmdXB0cikK
LSAgIHsKLSAgICAgIHR5cGVkZWYgY29uc3QgVVB0ciAmUmVmQXJnOwotICAgICAgY29uc3QgYm9v
bCB2YWx1ZSA9IGJvb3N0OjppbnRydXNpdmU6OmRldGFpbDo6Ci0gICAgICAgICBoYXNfbWVtYmVy
X2Z1bmN0aW9uX2NhbGxhYmxlX3dpdGhfY29uc3RfY2FzdF9mcm9tCi0gICAgICAgICAgICA8cG9p
bnRlciwgcG9pbnRlcigqKShSZWZBcmcpPjo6dmFsdWUKLSAgICAgICAgIHx8IGJvb3N0OjppbnRy
dXNpdmU6OmRldGFpbDo6Ci0gICAgICAgICAgICAgICBoYXNfbWVtYmVyX2Z1bmN0aW9uX2NhbGxh
YmxlX3dpdGhfY29uc3RfY2FzdF9mcm9tCi0gICAgICAgICAgICAgICAgICA8cG9pbnRlciwgcG9p
bnRlcigqKShVUHRyKT46OnZhbHVlOwotICAgICAgcmV0dXJuIHBvaW50ZXJfdHJhaXRzOjpwcml2
X2NvbnN0X2Nhc3RfZnJvbShib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6OmJvb2xfPHZhbHVlPigp
LCB1cHRyKTsKLSAgIH0KLQotICAgLy8hIDxiPlJlbWFyazwvYj46IE5vbi1zdGFuZGFyZCBleHRl
bnNpb24uCi0gICAvLyEKLSAgIC8vISA8Yj5SZXR1cm5zPC9iPjogQSBkZXJlZmVyZW5jZWFibGUg
cG9pbnRlciB0byByIG9idGFpbmVkIGJ5IGNhbGxpbmcgdGhlIHN0YXRpYyB0ZW1wbGF0ZSBmdW5j
dGlvbgotICAgLy8hICAgUHRyOjpkeW5hbWljX2Nhc3RfZnJvbTxVUHRyPihVUHByL2NvbnN0IFVQ
cHIgJikuCi0gICAvLyEgICBJZiBzdWNoIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0LCByZXR1cm5z
IHBvaW50ZXJfdG8oKmR5bmFtaWNfY2FzdDxlbGVtZW50X3R5cGUqPigmKnVwdHIpKQotICAgLy8h
Ci0gICAvLyEgPGI+Tm90ZTwvYj46IEZvciBub24tY29uZm9ybWluZyBjb21waWxlcnMgb25seSB0
aGUgZXhpc3RlbmNlIG9mIGEgbWVtYmVyIGZ1bmN0aW9uIGNhbGxlZAotICAgLy8hICAgPGNvZGU+
ZHluYW1pY19jYXN0X2Zyb208L2NvZGU+IGlzIGNoZWNrZWQuCi0gICB0ZW1wbGF0ZTxjbGFzcyBV
UHRyPgotICAgc3RhdGljIHBvaW50ZXIgZHluYW1pY19jYXN0X2Zyb20oY29uc3QgVVB0ciAmdXB0
cikKLSAgIHsKLSAgICAgIHR5cGVkZWYgY29uc3QgVVB0ciAmUmVmQXJnOwotICAgICAgY29uc3Qg
Ym9vbCB2YWx1ZSA9IGJvb3N0OjppbnRydXNpdmU6OmRldGFpbDo6Ci0gICAgICAgICBoYXNfbWVt
YmVyX2Z1bmN0aW9uX2NhbGxhYmxlX3dpdGhfZHluYW1pY19jYXN0X2Zyb20KLSAgICAgICAgICAg
IDxwb2ludGVyLCBwb2ludGVyKCopKFJlZkFyZyk+Ojp2YWx1ZQotICAgICAgICAgfHwgYm9vc3Q6
OmludHJ1c2l2ZTo6ZGV0YWlsOjoKLSAgICAgICAgICAgICAgIGhhc19tZW1iZXJfZnVuY3Rpb25f
Y2FsbGFibGVfd2l0aF9keW5hbWljX2Nhc3RfZnJvbQotICAgICAgICAgICAgICAgICAgPHBvaW50
ZXIsIHBvaW50ZXIoKikoVVB0cik+Ojp2YWx1ZTsKLSAgICAgIHJldHVybiBwb2ludGVyX3RyYWl0
czo6cHJpdl9keW5hbWljX2Nhc3RfZnJvbShib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6OmJvb2xf
PHZhbHVlPigpLCB1cHRyKTsKLSAgIH0KLQotICAgLy8vQGNvbmQKLSAgIHByaXZhdGU6Ci0gICAv
L3ByaXZfdG9fcmF3X3BvaW50ZXIKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgc3RhdGljIFQq
IHRvX3Jhd19wb2ludGVyKFQqIHApCi0gICB7ICByZXR1cm4gcDsgfQotCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgUG9pbnRlcj4KLSAgIHN0YXRpYyB0eXBlbmFtZSBwb2ludGVyX3RyYWl0czxQb2ludGVy
Pjo6ZWxlbWVudF90eXBlKgotICAgICAgdG9fcmF3X3BvaW50ZXIoY29uc3QgUG9pbnRlciAmcCkK
LSAgIHsgIHJldHVybiBwb2ludGVyX3RyYWl0czo6dG9fcmF3X3BvaW50ZXIocC5vcGVyYXRvci0+
KCkpOyAgfQotCi0gICAvL3ByaXZfcG9pbnRlcl90bwotICAgc3RhdGljIHBvaW50ZXIgcHJpdl9w
b2ludGVyX3RvKGJvb3N0OjppbnRydXNpdmU6OmRldGFpbDo6dHJ1ZV8sIHJlZmVyZW5jZSByKQot
ICAgeyByZXR1cm4gUHRyOjpwb2ludGVyX3RvKHIpOyB9Ci0KLSAgIHN0YXRpYyBwb2ludGVyIHBy
aXZfcG9pbnRlcl90byhib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6OmZhbHNlXywgcmVmZXJlbmNl
IHIpCi0gICB7IHJldHVybiBwb2ludGVyKGJvb3N0OjppbnRydXNpdmU6OmRldGFpbDo6YWRkcmVz
c29mKHIpKTsgfQotCi0gICAvL3ByaXZfc3RhdGljX2Nhc3RfZnJvbQotICAgdGVtcGxhdGU8Y2xh
c3MgVVB0cj4KLSAgIHN0YXRpYyBwb2ludGVyIHByaXZfc3RhdGljX2Nhc3RfZnJvbShib29zdDo6
aW50cnVzaXZlOjpkZXRhaWw6OnRydWVfLCBjb25zdCBVUHRyICZ1cHRyKQotICAgeyByZXR1cm4g
UHRyOjpzdGF0aWNfY2FzdF9mcm9tKHVwdHIpOyB9Ci0KLSAgIHRlbXBsYXRlPGNsYXNzIFVQdHI+
Ci0gICBzdGF0aWMgcG9pbnRlciBwcml2X3N0YXRpY19jYXN0X2Zyb20oYm9vc3Q6OmludHJ1c2l2
ZTo6ZGV0YWlsOjpmYWxzZV8sIGNvbnN0IFVQdHIgJnVwdHIpCi0gICB7ICByZXR1cm4gdXB0ciA/
IHBvaW50ZXJfdG8oKnN0YXRpY19jYXN0PGVsZW1lbnRfdHlwZSo+KHRvX3Jhd19wb2ludGVyKHVw
dHIpKSkgOiBwb2ludGVyKCk7ICB9Ci0KLSAgIC8vcHJpdl9jb25zdF9jYXN0X2Zyb20KLSAgIHRl
bXBsYXRlPGNsYXNzIFVQdHI+Ci0gICBzdGF0aWMgcG9pbnRlciBwcml2X2NvbnN0X2Nhc3RfZnJv
bShib29zdDo6aW50cnVzaXZlOjpkZXRhaWw6OnRydWVfLCBjb25zdCBVUHRyICZ1cHRyKQotICAg
eyByZXR1cm4gUHRyOjpjb25zdF9jYXN0X2Zyb20odXB0cik7IH0KLQotICAgdGVtcGxhdGU8Y2xh
c3MgVVB0cj4KLSAgIHN0YXRpYyBwb2ludGVyIHByaXZfY29uc3RfY2FzdF9mcm9tKGJvb3N0Ojpp
bnRydXNpdmU6OmRldGFpbDo6ZmFsc2VfLCBjb25zdCBVUHRyICZ1cHRyKQotICAgeyAgcmV0dXJu
IHVwdHIgPyBwb2ludGVyX3RvKGNvbnN0X2Nhc3Q8ZWxlbWVudF90eXBlJj4oKnVwdHIpKSA6IHBv
aW50ZXIoKTsgIH0KLQotICAgLy9wcml2X2R5bmFtaWNfY2FzdF9mcm9tCi0gICB0ZW1wbGF0ZTxj
bGFzcyBVUHRyPgotICAgc3RhdGljIHBvaW50ZXIgcHJpdl9keW5hbWljX2Nhc3RfZnJvbShib29z
dDo6aW50cnVzaXZlOjpkZXRhaWw6OnRydWVfLCBjb25zdCBVUHRyICZ1cHRyKQotICAgeyByZXR1
cm4gUHRyOjpkeW5hbWljX2Nhc3RfZnJvbSh1cHRyKTsgfQotCi0gICB0ZW1wbGF0ZTxjbGFzcyBV
UHRyPgotICAgc3RhdGljIHBvaW50ZXIgcHJpdl9keW5hbWljX2Nhc3RfZnJvbShib29zdDo6aW50
cnVzaXZlOjpkZXRhaWw6OmZhbHNlXywgY29uc3QgVVB0ciAmdXB0cikKLSAgIHsgIHJldHVybiB1
cHRyID8gcG9pbnRlcl90byhkeW5hbWljX2Nhc3Q8ZWxlbWVudF90eXBlJj4oKnVwdHIpKSA6IHBv
aW50ZXIoKTsgIH0KLSAgIC8vL0BlbmRjb25kCi19OwotCi0vLy9AY29uZAotCi0vLyBSZW1vdmUg
Y3YgcXVhbGlmaWNhdGlvbiBmcm9tIFB0ciBwYXJhbWV0ZXIgdG8gcG9pbnRlcl90cmFpdHM6Ci10
ZW1wbGF0ZSA8dHlwZW5hbWUgUHRyPgotc3RydWN0IHBvaW50ZXJfdHJhaXRzPGNvbnN0IFB0cj4g
OiBwb2ludGVyX3RyYWl0czxQdHI+IHt9OwotdGVtcGxhdGUgPHR5cGVuYW1lIFB0cj4KLXN0cnVj
dCBwb2ludGVyX3RyYWl0czx2b2xhdGlsZSBQdHI+IDogcG9pbnRlcl90cmFpdHM8UHRyPiB7IH07
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgUHRyPgotc3RydWN0IHBvaW50ZXJfdHJhaXRzPGNvbnN0IHZv
bGF0aWxlIFB0cj4gOiBwb2ludGVyX3RyYWl0czxQdHI+IHsgfTsKLS8vIFJlbW92ZSByZWZlcmVu
Y2UgZnJvbSBQdHIgcGFyYW1ldGVyIHRvIHBvaW50ZXJfdHJhaXRzOgotdGVtcGxhdGUgPHR5cGVu
YW1lIFB0cj4KLXN0cnVjdCBwb2ludGVyX3RyYWl0czxQdHImPiA6IHBvaW50ZXJfdHJhaXRzPFB0
cj4geyB9OwotCi0vLy9AZW5kY29uZAotCi0vLyEgU3BlY2lhbGl6YXRpb24gb2YgcG9pbnRlcl90
cmFpdHMgZm9yIHJhdyBwb2ludGVycwotLy8hCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVj
dCBwb2ludGVyX3RyYWl0czxUKj4KLXsKLSAgIHR5cGVkZWYgVCAgICAgICAgICAgIGVsZW1lbnRf
dHlwZTsKLSAgIHR5cGVkZWYgVCogICAgICAgICAgIHBvaW50ZXI7Ci0gICB0eXBlZGVmIHN0ZDo6
cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKLQotICAgI2lmZGVmIEJPT1NUX0lOVFJVU0lWRV9E
T1hZR0VOX0lOVk9LRUQKLSAgICAgIHR5cGVkZWYgVCAmICAgICAgICAgIHJlZmVyZW5jZTsKLSAg
ICAgIC8vIXR5cGVkZWYgZm9yIDxwcmU+VSAqPC9wcmU+Ci0gICAgICAvLyEKLSAgICAgIC8vIUZv
ciBwb3J0YWJsZSBjb2RlIGZvciBDKyswMyBhbmQgQysrMTEsIDxwcmU+dHlwZW5hbWUgcmViaW5k
X3BvaW50ZXI8VT46OnR5cGU8L3ByZT4KLSAgICAgIC8vIXNoYWxsIGJlIHVzZWQgaW5zdGVhZCBv
ZiByZWJpbmQ8VT4gdG8gb2J0YWluIGEgcG9pbnRlciB0byBVLgotICAgICAgdGVtcGxhdGUgPGNs
YXNzIFU+IHVzaW5nIHJlYmluZCA9IFUqOwotICAgI2Vsc2UKLSAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgYm9vc3Q6OmludHJ1c2l2ZTo6ZGV0YWlsOjp1bnZvaWRfcmVmPGVsZW1lbnRfdHlwZT46OnR5
cGUgcmVmZXJlbmNlOwotICAgICAgI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1RFTVBMQVRF
X0FMSUFTRVMpCi0gICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gdXNpbmcgcmViaW5kID0gVSo7
Ci0gICAgICAjZW5kaWYKLSAgICNlbmRpZgotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gc3RydWN0
IHJlYmluZF9wb2ludGVyCi0gICB7ICB0eXBlZGVmIFUqIHR5cGU7ICB9OwotCi0gICAvLyEgPGI+
UmV0dXJuczwvYj46IGFkZHJlc3NvZihyKQotICAgLy8hCi0gICBCT09TVF9JTlRSVVNJVkVfRk9S
Q0VJTkxJTkUgc3RhdGljIHBvaW50ZXIgcG9pbnRlcl90byhyZWZlcmVuY2UgcikKLSAgIHsgcmV0
dXJuIGJvb3N0OjppbnRydXNpdmU6OmRldGFpbDo6YWRkcmVzc29mKHIpOyB9Ci0KLSAgIC8vISA8
Yj5SZXR1cm5zPC9iPjogc3RhdGljX2Nhc3Q8cG9pbnRlcj4odXB0cikKLSAgIC8vIQotICAgdGVt
cGxhdGU8Y2xhc3MgVT4KLSAgIEJPT1NUX0lOVFJVU0lWRV9GT1JDRUlOTElORSBzdGF0aWMgcG9p
bnRlciBzdGF0aWNfY2FzdF9mcm9tKFUgKnVwdHIpCi0gICB7ICByZXR1cm4gc3RhdGljX2Nhc3Q8
cG9pbnRlcj4odXB0cik7ICB9Ci0KLSAgIC8vISA8Yj5SZXR1cm5zPC9iPjogY29uc3RfY2FzdDxw
b2ludGVyPih1cHRyKQotICAgLy8hCi0gICB0ZW1wbGF0ZTxjbGFzcyBVPgotICAgQk9PU1RfSU5U
UlVTSVZFX0ZPUkNFSU5MSU5FIHN0YXRpYyBwb2ludGVyIGNvbnN0X2Nhc3RfZnJvbShVICp1cHRy
KQotICAgeyAgcmV0dXJuIGNvbnN0X2Nhc3Q8cG9pbnRlcj4odXB0cik7ICB9Ci0KLSAgIC8vISA8
Yj5SZXR1cm5zPC9iPjogZHluYW1pY19jYXN0PHBvaW50ZXI+KHVwdHIpCi0gICAvLyEKLSAgIHRl
bXBsYXRlPGNsYXNzIFU+Ci0gICBCT09TVF9JTlRSVVNJVkVfRk9SQ0VJTkxJTkUgc3RhdGljIHBv
aW50ZXIgZHluYW1pY19jYXN0X2Zyb20oVSAqdXB0cikKLSAgIHsgIHJldHVybiBkeW5hbWljX2Nh
c3Q8cG9pbnRlcj4odXB0cik7ICB9Ci19OwotCi19ICAvL25hbWVzcGFjZSBjb250YWluZXIgewot
fSAgLy9uYW1lc3BhY2UgYm9vc3QgewotCi0jaW5jbHVkZSA8Ym9vc3QvaW50cnVzaXZlL2RldGFp
bC9jb25maWdfZW5kLmhwcD4KLQotI2VuZGlmIC8vICEgZGVmaW5lZChCT09TVF9JTlRSVVNJVkVf
UE9JTlRFUl9UUkFJVFNfSFBQKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvaXRlcmF0b3IuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvaXRlcmF0b3IuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjOWM2MTk3OTUwYjA5OWJmODFhMGYzMTgyNWNhYmQwODljODZkZmMzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2l0ZXJhdG9yLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIw
ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IEJlbWFuIERhd2VzIDIwMDAuIERpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdAotLy8gIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2Vl
IGFjY29tcGFueWluZyBmaWxlCi0vLyAgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDov
L3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaWZuZGVmIEJPT1NUX0lURVJBVE9S
X0hQUAotI2RlZmluZSBCT09TVF9JVEVSQVRPUl9IUFAKLQotLy8gVGhpcyBoZWFkZXIgaXMgb2Jz
b2xldGUgYW5kIHdpbGwgYmUgZGVwcmVjYXRlZC4KLQotI2luY2x1ZGUgPGl0ZXJhdG9yPgotI2lu
Y2x1ZGUgPGNzdGRkZWY+ICAgICAgICAgICAvLyBzdGQ6OnB0cmRpZmZfdAotCi1uYW1lc3BhY2Ug
Ym9vc3QKLXsKLQotdXNpbmcgc3RkOjppdGVyYXRvcjsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QK
LQotI2VuZGlmIC8vIEJPT1NUX0lURVJBVE9SX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaXRlcmF0b3IvZGV0YWlsL2NvbmZpZ19kZWYu
aHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaXRlcmF0b3Iv
ZGV0YWlsL2NvbmZpZ19kZWYuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTdl
NzVhNzZkNDM3MDUyMTYzYWY5YzFkMDg3M2VmZjMxMzQ5NzBlLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L2l0ZXJhdG9yL2RldGFpbC9jb25maWdfZGVmLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEyOCArMCwwIEBACi0vLyAoQykgQ29weXJpZ2h0IERhdmlkIEFicmFoYW1zIDIwMDIu
Ci0vLyAoQykgQ29weXJpZ2h0IEplcmVteSBTaWVrICAgIDIwMDIuCi0vLyAoQykgQ29weXJpZ2h0
IFRob21hcyBXaXR0ICAgIDIwMDIuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLS8vIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0KLS8vIG5vIGluY2x1ZGUgZ3VhcmQgbXVsdGlwbGUgaW5jbHVzaW9uIGludGVu
ZGVkCi0KLS8vCi0vLyBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgdGhlIGJ1
bGsgb2YgdGhpcyBpcwotLy8gYXZhaWxhYmxlIGluIGJvb3N0IGNvbmZpZy4KLS8vIDIzLzAyLzAz
IHRodwotLy8KLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+IC8vIGZvciBwcmlvcgotI2lu
Y2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQotI2lmZGVmIEJPT1NUX0lURVJB
VE9SX0NPTkZJR19ERUYKLSMgZXJyb3IgeW91IGhhdmUgbmVzdGVkIGNvbmZpZ19kZWYgI2luY2x1
c2lvbi4KLSNlbHNlIAotIyBkZWZpbmUgQk9PU1RfSVRFUkFUT1JfQ09ORklHX0RFRgotI2VuZGlm
IAotCi0vLyBXZSBlbmFibGUgdGhpcyBhbHdheXMgbm93LiAgT3RoZXJ3aXNlLCB0aGUgc2ltcGxl
IGNhc2UgaW4KLS8vIGxpYnMvaXRlcmF0b3IvdGVzdC9jb25zdGFudF9pdGVyYXRvcl9hcnJvdy5j
cHAgZmFpbHMgdG8gY29tcGlsZQotLy8gYmVjYXVzZSB0aGUgb3BlcmF0b3ItPiByZXR1cm4gaXMg
aW1wcm9wZXJseSBkZWR1Y2VkIGFzIGEgbm9uLWNvbnN0Ci0vLyBwb2ludGVyLgotI2lmIDEgfHwg
ZGVmaW5lZChCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OKSAgICAgICAg
ICAgXAotICAgIHx8IEJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCBCT09TVF9URVNURURf
QVQoMHg1MzEpKQotCi0vLyBSZWNhbGwgdGhhdCBpbiBnZW5lcmFsLCBjb21waWxlcnMgd2l0aG91
dCBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uCi0vLyBjYW4ndCBzdHJpcCBjb25zdG5lc3MuICBDb25z
aWRlciBjb3VudGluZ19pdGVyYXRvciwgd2hpY2ggbm9ybWFsbHkKLS8vIHBhc3NlcyBhIGNvbnN0
IFZhbHVlIHRvIGl0ZXJhdG9yX2ZhY2FkZS4gIEFzIGEgcmVzdWx0LCBhbnkgY29kZQotLy8gd2hp
Y2ggbWFrZXMgYSBzdGQ6OnZlY3RvciBvZiB0aGUgaXRlcmF0b3IncyB2YWx1ZV90eXBlIHdpbGwg
ZmFpbAotLy8gd2hlbiBpdHMgYWxsb2NhdG9yIGRlY2xhcmVzIGZ1bmN0aW9ucyBvdmVybG9hZGVk
IG9uIHJlZmVyZW5jZSBhbmQKLS8vIGNvbnN0X3JlZmVyZW5jZSAodGhlIHNhbWUgdHlwZSkuCi0v
LwotLy8gRnVydGhlcm1vcmUsIEJvcmxhbmQgNS41LjEgZHJvcHMgY29uc3RuZXNzIGluIGVub3Vn
aCB3YXlzIHRoYXQgd2UKLS8vIGVuZCB1cCB1c2luZyBhIHByb3h5IGZvciBvcGVyYXRvcltdIHdo
ZW4gd2Ugb3RoZXJ3aXNlIHNob3VsZG4ndC4KLS8vIFVzaW5nIHJlZmVyZW5jZSBjb25zdG5lc3Mg
Z2l2ZXMgaXQgYW4gZXh0cmEgaGludCB0aGF0IGl0IGNhbgotLy8gcmV0dXJuIHRoZSB2YWx1ZV90
eXBlIGZyb20gb3BlcmF0b3JbXSBkaXJlY3RseSwgYnV0IGlzIG5vdAotLy8gc3RyaWN0bHkgbmVj
ZXNzYXJ5LiAgTm90IHN1cmUgaG93IGJlc3QgdG8gcmVzb2x2ZSB0aGlzIG9uZS4KLQotIyBkZWZp
bmUgQk9PU1RfSVRFUkFUT1JfUkVGX0NPTlNUTkVTU19LSUxMU19XUklUQUJJTElUWSAxCi0KLSNl
bmRpZgotCi0jaWYgQk9PU1RfV09SS0FST1VORChfX0JPUkxBTkRDX18sIEJPT1NUX1RFU1RFRF9B
VCgweDVBMCkpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB8fCAoQk9PU1RfV09SS0FST1VO
RChCT09TVF9JTlRFTF9DWFhfVkVSU0lPTiwgPD0gNzAwKSAmJiBkZWZpbmVkKF9NU0NfVkVSKSkg
XAotICAgIHx8IEJPT1NUX1dPUktBUk9VTkQoX19ERUNDWFhfVkVSLCBCT09TVF9URVNURURfQVQo
NjA1OTAwNDIpKSAgICAgICAgICAgICAgICBcCi0gICAgfHwgQk9PU1RfV09SS0FST1VORChfX1NV
TlBST19DQywgQk9PU1RfVEVTVEVEX0FUKDB4NTkwKSkKLSAgICAKLSMgZGVmaW5lIEJPT1NUX05P
X0xWQUxVRV9SRVRVUk5fREVURUNUSU9OCi0KLSMgaWYgMCAvLyB0ZXN0IGNvZGUKLSAgc3RydWN0
IHYgIHt9OwotCi0gIHR5cGVkZWYgIGNoYXIgKCZubylbM107Ci0KLSAgdGVtcGxhdGUgPGNsYXNz
IFQ+Ci0gIG5vIGZvbyhUIGNvbnN0JiwgLi4uKTsKLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAg
Y2hhciBmb28oVCYsIGludCk7Ci0KLQotICBzdHJ1Y3QgdmFsdWVfaXRlcmF0b3IKLSAgewotICAg
ICAgdiBvcGVyYXRvciooKSBjb25zdDsKLSAgfTsKLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAg
c3RydWN0IGx2YWx1ZV9kZXJlZl9oZWxwZXIKLSAgewotICAgICAgc3RhdGljIFQmIHg7Ci0gICAg
ICBlbnVtIHsgdmFsdWUgPSAoc2l6ZW9mKGZvbygqeCwwKSkgPT0gMSkgfTsKLSAgfTsKLQotICBp
bnQgejJbKGx2YWx1ZV9kZXJlZl9oZWxwZXI8dio+Ojp2YWx1ZSA9PSAxKSA/IDEgOiAtMV07Ci0g
IGludCB6WyhsdmFsdWVfZGVyZWZfaGVscGVyPHZhbHVlX2l0ZXJhdG9yPjo6dmFsdWUpID09IDEg
PyAtMSA6IDEgXTsKLSMgZW5kaWYgCi0KLSNlbmRpZgotCi0jaWYgQk9PU1RfV09SS0FST1VORChf
X01XRVJLU19fLCA8PTB4MjQwNykKLSMgIGRlZmluZSBCT09TVF9OT19JU19DT05WRVJUSUJMRSAv
LyAiaXNfY29udmVydGlibGUgZG9lc24ndCB3b3JrIGZvciBzaW1wbGUgdHlwZXMiCi0jZW5kaWYK
LQotI2lmIEJPT1NUX1dPUktBUk9VTkQoX19HTlVDX18sID09IDMpICYmIEJPT1NUX1dPUktBUk9V
TkQoX19HTlVDX01JTk9SX18sIDwgNCkgJiYgIWRlZmluZWQoX19FREdfVkVSU0lPTl9fKSAgIFwK
LSAgICB8fCBCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENfXywgQk9PU1RfVEVTVEVEX0FUKDB4
NTUxKSkKLSMgIGRlZmluZSBCT09TVF9OT19JU19DT05WRVJUSUJMRV9URU1QTEFURSAvLyBUaGUg
Zm9sbG93aW5nIHByb2dyYW0gZmFpbHMgdG8gY29tcGlsZToKLQotIyAgaWYgMCAvLyB0ZXN0IGNv
ZGUKLSAgICAjaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfY29udmVydGlibGUuaHBwPgot
ICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgIHN0cnVjdCBmb28KLSAgICB7Ci0gICAgICAgIGZv
byhUKTsKLQotICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4KLSAgICAgICAgZm9vKGZvbzxVPiBj
b25zdCYgb3RoZXIpIDogcChvdGhlci5wKSB7IH0KLQotICAgICAgICBUIHA7Ci0gICAgfTsKLQot
ICAgIGJvb2wgeCA9IGJvb3N0Ojppc19jb252ZXJ0aWJsZTxmb288aW50IGNvbnN0Kj4sIGZvbzxp
bnQqPiA+Ojp2YWx1ZTsKLSMgIGVuZGlmCi0KLSNlbmRpZgotCi0KLSNpZiAhZGVmaW5lZChCT09T
VF9NU1ZDKSAmJiAoZGVmaW5lZChCT09TVF9OT19TRklOQUUpIHx8IGRlZmluZWQoQk9PU1RfTk9f
SVNfQ09OVkVSVElCTEUpIHx8IGRlZmluZWQoQk9PU1RfTk9fSVNfQ09OVkVSVElCTEVfVEVNUExB
VEUpKQotIyBkZWZpbmUgQk9PU1RfTk9fU1RSSUNUX0lURVJBVE9SX0lOVEVST1BFUkFCSUxJVFkK
LSNlbmRpZiAKLQotIyBpZiBCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENfXywgQk9PU1RfVEVT
VEVEX0FUKDB4NTY0KSkKLQotLy8gR0NDLTIuOTUgKG9ic29sZXRlKSBlYWdlcmx5IGluc3RhbnRp
YXRlcyB0ZW1wbGF0ZWQgY29uc3RydWN0b3JzIGFuZCBjb252ZXJzaW9uCi0vLyBvcGVyYXRvcnMg
aW4gY29udmVydGliaWxpdHkgY2hlY2tzLCBjYXVzaW5nIHByZW1hdHVyZSBlcnJvcnMuCi0vLwot
Ly8gQm9ybGFuZCdzIHByb2JsZW1zIGFyZSBoYXJkZXIgdG8gZGlhZ25vc2UgZHVlIHRvIGxhY2sg
b2YgYW4KLS8vIGluc3RhbnRpYXRpb24gc3RhY2sgYmFja3RyYWNlLiAgVGhleSBtYXkgYmUgZHVl
IGluIHBhcnQgdG8gdGhlIGZhY3QKLS8vIHRoYXQgaXQgZHJvcHMgY3YtcXVhbGlmaWNhdGlvbiB3
aWxseS1uaWxseSBpbiB0ZW1wbGF0ZXMuCi0jICBkZWZpbmUgQk9PU1RfTk9fT05FX1dBWV9JVEVS
QVRPUl9JTlRFUk9QCi0jIGVuZGlmIAotCi0vLyBubyBpbmNsdWRlIGd1YXJkOyBtdWx0aXBsZSBp
bmNsdXNpb24gaW50ZW5kZWQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L2l0ZXJhdG9yL2RldGFpbC9jb25maWdfdW5kZWYuaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaXRlcmF0b3IvZGV0YWlsL2NvbmZp
Z191bmRlZi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMWI4ZDcwOGM1ZjBm
NTFiMDk3MTQxYjU3ZTI0ZDRiMTI3ZjRiMzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvaXRlcmF0b3IvZGV0YWlsL2NvbmZpZ191bmRlZi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
NCArMCwwIEBACi0vLyAoQykgQ29weXJpZ2h0IFRob21hcyBXaXR0ICAgIDIwMDIuCi0vLyBEaXN0
cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChT
ZWUKLS8vIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vIG5vIGluY2x1ZGUgZ3Vh
cmQgbXVsdGlwbGUgaW5jbHVzaW9uIGludGVuZGVkCi0KLS8vCi0vLyBUaGlzIGlzIGEgdGVtcG9y
YXJ5IHdvcmthcm91bmQgdW50aWwgdGhlIGJ1bGsgb2YgdGhpcyBpcwotLy8gYXZhaWxhYmxlIGlu
IGJvb3N0IGNvbmZpZy4KLS8vIDIzLzAyLzAzIHRodwotLy8KLQotI3VuZGVmIEJPT1NUX05PX0lT
X0NPTlZFUlRJQkxFCi0jdW5kZWYgQk9PU1RfTk9fSVNfQ09OVkVSVElCTEVfVEVNUExBVEUKLSN1
bmRlZiBCT09TVF9OT19TVFJJQ1RfSVRFUkFUT1JfSU5URVJPUEVSQUJJTElUWQotI3VuZGVmIEJP
T1NUX05PX0xWQUxVRV9SRVRVUk5fREVURUNUSU9OCi0jdW5kZWYgQk9PU1RfTk9fT05FX1dBWV9J
VEVSQVRPUl9JTlRFUk9QCi0KLSNpZmRlZiBCT09TVF9JVEVSQVRPUl9DT05GSUdfREVGCi0jIHVu
ZGVmIEJPT1NUX0lURVJBVE9SX0NPTkZJR19ERUYKLSNlbHNlCi0jIGVycm9yIG1pc3Npbmcgb3Ig
bmVzdGVkICNpbmNsdWRlIGNvbmZpZ19kZWYKLSNlbmRpZiAKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2l0ZXJhdG9yL2RldGFpbC9lbmFibGVf
aWYuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaXRlcmF0
b3IvZGV0YWlsL2VuYWJsZV9pZi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3
MWY1ZmU4MWQ0ZjYwM2Q3MTAxZDI4MzFmMGFlZWYxODAyYTgwMjIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvaXRlcmF0b3IvZGV0YWlsL2VuYWJsZV9pZi5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSw4MyArMCwwIEBACi0vLyAoQykgQ29weXJpZ2h0IERhdmlkIEFicmFoYW1zIDIwMDIu
Ci0vLyAoQykgQ29weXJpZ2h0IEplcmVteSBTaWVrICAgIDIwMDIuCi0vLyAoQykgQ29weXJpZ2h0
IFRob21hcyBXaXR0ICAgIDIwMDIuCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLS8vIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0jaWZuZGVmIEJPT1NUX0VOQUJMRV9JRl8yMzAyMjAwM1RIV19IUFAKLSNkZWZp
bmUgQk9PU1RfRU5BQkxFX0lGXzIzMDIyMDAzVEhXX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvZGV0
YWlsL3dvcmthcm91bmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9pZGVudGl0eS5ocHA+Ci0K
LSNpbmNsdWRlIDxib29zdC9pdGVyYXRvci9kZXRhaWwvY29uZmlnX2RlZi5ocHA+Ci0KLS8vCi0v
LyBCb29zdCBpdGVyYXRvcnMgdXNlcyBpdHMgb3duIGVuYWJsZV9pZiBjYXVzZSB3ZSBuZWVkCi0v
LyBzcGVjaWFsIHNlbWFudGljcyBmb3IgZGVmaWNpZW50IGNvbXBpbGVycy4KLS8vIDIzLzAyLzAz
IHRodwotLy8KLQotbmFtZXNwYWNlIGJvb3N0Ci17Ci0KLSAgbmFtZXNwYWNlIGl0ZXJhdG9ycwot
ICB7Ci0gICAgLy8KLSAgICAvLyBCYXNlIG1hY2hpbmVyeSBmb3IgYWxsIGtpbmRzIG9mIGVuYWJs
ZSBpZgotICAgIC8vCi0gICAgdGVtcGxhdGU8Ym9vbD4KLSAgICBzdHJ1Y3QgZW5hYmxlZAotICAg
IHsKLSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICBzdHJ1Y3QgYmFzZQotICAgICAg
ewotICAgICAgICB0eXBlZGVmIFQgdHlwZTsKLSAgICAgIH07Ci0gICAgfTsKLQotICAgIC8vCi0g
ICAgLy8gRm9yIGNvbXBpbGVycyB0aGF0IGRvbid0IHN1cHBvcnQgIlN1YnN0aXR1dGlvbiBGYWls
dXJlIElzIE5vdCBBbiBFcnJvciIKLSAgICAvLyBlbmFibGVfaWYgZmFsbHMgYmFjayB0byBhbHdh
eXMgZW5hYmxlZC4gU2VlIGNvbW1lbnRzCi0gICAgLy8gb24gb3BlcmF0b3IgaW1wbGVtZW50YXRp
b24gZm9yIGNvbnNlcXVlbmNlcy4KLSAgICAvLwotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3Qg
ZW5hYmxlZDxmYWxzZT4KLSAgICB7Ci0gICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAg
c3RydWN0IGJhc2UKLSAgICAgIHsKLSNpZmRlZiBCT09TVF9OT19TRklOQUUKLQotICAgICAgICB0
eXBlZGVmIFQgdHlwZTsKLQotICAgICAgICAvLyBUaGlzIHdheSB0byBkbyBpdCB3b3VsZCBnaXZl
IGEgbmljZSBlcnJvciBtZXNzYWdlIGNvbnRhaW5pbmcKLSAgICAgICAgLy8gaW52YWxpZCBvdmVy
bG9hZCwgYnV0IGhhcyB0aGUgYmlnIGRpc2FkdmFudGFnZSB0aGF0Ci0gICAgICAgIC8vIHRoZXJl
IGlzIG5vIHJlZmVyZW5jZSB0byB1c2VyIGNvZGUgaW4gdGhlIGVycm9yIG1lc3NhZ2UuCi0gICAg
ICAgIC8vCi0gICAgICAgIC8vIHN0cnVjdCBpbnZhbGlkX292ZXJsb2FkOwotICAgICAgICAvLyB0
eXBlZGVmIGludmFsaWRfb3ZlcmxvYWQgdHlwZTsKLSAgICAgICAgLy8KLSNlbmRpZgotICAgICAg
fTsKLSAgICB9OwotCi0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29uZCwKLSAgICAgICAgICAgICAg
Y2xhc3MgUmV0dXJuPgotICAgIHN0cnVjdCBlbmFibGVfaWYKLSMgaWYgIWRlZmluZWQoQk9PU1Rf
Tk9fU0ZJTkFFKSAmJiAhZGVmaW5lZChCT09TVF9OT19JU19DT05WRVJUSUJMRSkKLSAgICAgIDog
ZW5hYmxlZDwoQ29uZDo6dmFsdWUpPjo6dGVtcGxhdGUgYmFzZTxSZXR1cm4+Ci0jIGVsc2UKLSAg
ICAgIDogbXBsOjppZGVudGl0eTxSZXR1cm4+Ci0jIGVuZGlmCi0gICAgewotICAgIH07Ci0KLSAg
fSAvLyBuYW1lc3BhY2UgaXRlcmF0b3JzCi0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNpbmNs
dWRlIDxib29zdC9pdGVyYXRvci9kZXRhaWwvY29uZmlnX3VuZGVmLmhwcD4KLQotI2VuZGlmIC8v
IEJPT1NUX0VOQUJMRV9JRl8yMzAyMjAwM1RIV19IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2l0ZXJhdG9yL2RldGFpbC9mYWNhZGVfaXRl
cmF0b3JfY2F0ZWdvcnkuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvaXRlcmF0b3IvZGV0YWlsL2ZhY2FkZV9pdGVyYXRvcl9jYXRlZ29yeS5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZmRmNDQ2YjBkNDQ1NWRjYWZmZjg1ZDg3YmE3Yjc4
NjFjODAyYjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaXRlcmF0b3IvZGV0YWls
L2ZhY2FkZV9pdGVyYXRvcl9jYXRlZ29yeS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAs
MCBAQAotLy8gQ29weXJpZ2h0IERhdmlkIEFicmFoYW1zIDIwMDMuIFVzZSwgbW9kaWZpY2F0aW9u
IGFuZCBkaXN0cmlidXRpb24gaXMKLS8vIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotLy8gZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0j
aWZuZGVmIEZBQ0FERV9JVEVSQVRPUl9DQVRFR09SWV9EV0EyMDAzMTExOF9IUFAKLSMgZGVmaW5l
IEZBQ0FERV9JVEVSQVRPUl9DQVRFR09SWV9EV0EyMDAzMTExOF9IUFAKLQotIyBpbmNsdWRlIDxi
b29zdC9pdGVyYXRvci9pdGVyYXRvcl9jYXRlZ29yaWVzLmhwcD4KLQotIyBpbmNsdWRlIDxib29z
dC9tcGwvb3IuaHBwPiAgLy8gdXNlZCBpbiBpdGVyYXRvcl90YWcgaW5oZXJpdGFuY2UgbG9naWMK
LSMgaW5jbHVkZSA8Ym9vc3QvbXBsL2FuZC5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L21wbC9pZi5o
cHA+Ci0jIGluY2x1ZGUgPGJvb3N0L21wbC9ldmFsX2lmLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3Qv
bXBsL2lkZW50aXR5LmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvbXBsL2Fzc2VydC5ocHA+Ci0KLSMg
aW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0
L3R5cGVfdHJhaXRzL2lzX2NvbnN0LmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
aXNfcmVmZXJlbmNlLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfY29udmVy
dGlibGUuaHBwPgotCi0jIGluY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgot
Ci0jIGluY2x1ZGUgPGJvb3N0L2l0ZXJhdG9yL2RldGFpbC9jb25maWdfZGVmLmhwcD4gLy8gdHJ5
IHRvIGtlZXAgdGhpcyBsYXN0Ci0KLSMgaWZkZWYgQk9PU1RfSVRFUkFUT1JfUkVGX0NPTlNUTkVT
U19LSUxMU19XUklUQUJJTElUWQotIyAgaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2luZGlyZWN0X3Ry
YWl0cy5ocHA+Ci0jIGVuZGlmCi0KLS8vCi0vLyBpdGVyYXRvcl9jYXRlZ29yeSBkZWR1Y3Rpb24g
Zm9yIGl0ZXJhdG9yX2ZhY2FkZQotLy8KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSBp
dGVyYXRvcnMgewotCi0vLyBmb3J3YXJkIGRlY2xhcmF0aW9uCi1zdHJ1Y3QgdXNlX2RlZmF1bHQ7
Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotCi1zdHJ1Y3QgaW5wdXRfb3V0cHV0X2l0ZXJhdG9yX3Rh
ZwotICA6IHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnCi17Ci0gICAgLy8gVXNpbmcgaW5oZXJpdGFu
Y2UgZm9yIG9ubHkgaW5wdXRfaXRlcmF0b3JfdGFnIGhlbHBzIHRvIGF2b2lkCi0gICAgLy8gYW1i
aWd1aXRpZXMgd2hlbiBhIHN0ZGxpYiBpbXBsZW1lbnRhdGlvbiBkaXNwYXRjaGVzIG9uIGEKLSAg
ICAvLyBmdW5jdGlvbiB3aGljaCBpcyBvdmVybG9hZGVkIG9uIGJvdGggaW5wdXRfaXRlcmF0b3Jf
dGFnIGFuZAotICAgIC8vIG91dHB1dF9pdGVyYXRvcl90YWcsIGFzIFNUTFBvcnQgZG9lcywgaW4g
aXRzIF9fdmFsaWRfcmFuZ2UKLSAgICAvLyBmdW5jdGlvbi4gIEkgY2xhaW0gaXQncyBiZXR0ZXIg
dG8gYXZvaWQgdGhlIGFtYmlndWl0eSBpbiB0aGVzZQotICAgIC8vIGNhc2VzLgotICAgIG9wZXJh
dG9yIHN0ZDo6b3V0cHV0X2l0ZXJhdG9yX3RhZygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gc3RkOjpvdXRwdXRfaXRlcmF0b3JfdGFnKCk7Ci0gICAgfQotfTsKLQotLy8KLS8vIFRydWUg
aWZmIHRoZSB1c2VyIGhhcyBleHBsaWNpdGx5IGRpc2FibGVkIHdyaXRhYmlsaXR5IG9mIHRoaXMK
LS8vIGl0ZXJhdG9yLiAgUGFzcyB0aGUgaXRlcmF0b3JfZmFjYWRlJ3MgVmFsdWUgcGFyYW1ldGVy
IGFuZCBpdHMKLS8vIG5lc3RlZCA6OnJlZmVyZW5jZSB0eXBlLgotLy8KLXRlbXBsYXRlIDxjbGFz
cyBWYWx1ZVBhcmFtLCBjbGFzcyBSZWZlcmVuY2U+Ci1zdHJ1Y3QgaXRlcmF0b3Jfd3JpdGFiaWxp
dHlfZGlzYWJsZWQKLSMgaWZkZWYgQk9PU1RfSVRFUkFUT1JfUkVGX0NPTlNUTkVTU19LSUxMU19X
UklUQUJJTElUWSAvLyBBZGRpbmcgVGhvbWFzJyBsb2dpYz8KLSAgOiBtcGw6Om9yXzwKLSAgICAg
ICAgaXNfY29uc3Q8UmVmZXJlbmNlPgotICAgICAgLCBib29zdDo6ZGV0YWlsOjppbmRpcmVjdF90
cmFpdHM6OmlzX3JlZmVyZW5jZV90b19jb25zdDxSZWZlcmVuY2U+Ci0gICAgICAsIGlzX2NvbnN0
PFZhbHVlUGFyYW0+Ci0gICAgPgotIyBlbHNlCi0gIDogaXNfY29uc3Q8VmFsdWVQYXJhbT4KLSMg
ZW5kaWYKLXt9OwotCi0KLS8vCi0vLyBDb252ZXJ0IGFuIGl0ZXJhdG9yX2ZhY2FkZSdzIHRyYXZl
cnNhbCBjYXRlZ29yeSwgVmFsdWUgcGFyYW1ldGVyLAotLy8gYW5kIDo6cmVmZXJlbmNlIHR5cGUg
dG8gYW4gYXBwcm9wcmlhdGUgb2xkLXN0eWxlIGNhdGVnb3J5LgotLy8KLS8vIER1ZSB0byBjaGFu
Z2VzZXQgMjE2ODMsIHRoaXMgbm93IG5ldmVyIHJlc3VsdHMgaW4gYSBjYXRlZ29yeSBjb252ZXJ0
aWJsZQotLy8gdG8gb3V0cHV0X2l0ZXJhdG9yX3RhZy4KLS8vCi0vLyBDaGFuZ2UgYXQ6IGh0dHBz
Oi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L2NoYW5nZXNldC8yMTY4MwotdGVtcGxhdGUgPGNs
YXNzIFRyYXZlcnNhbCwgY2xhc3MgVmFsdWVQYXJhbSwgY2xhc3MgUmVmZXJlbmNlPgotc3RydWN0
IGl0ZXJhdG9yX2ZhY2FkZV9kZWZhdWx0X2NhdGVnb3J5Ci0gIDogbXBsOjpldmFsX2lmPAotICAg
ICAgICBtcGw6OmFuZF88Ci0gICAgICAgICAgICBpc19yZWZlcmVuY2U8UmVmZXJlbmNlPgotICAg
ICAgICAgICwgaXNfY29udmVydGlibGU8VHJhdmVyc2FsLGZvcndhcmRfdHJhdmVyc2FsX3RhZz4K
LSAgICAgICAgPgotICAgICAgLCBtcGw6OmV2YWxfaWY8Ci0gICAgICAgICAgICBpc19jb252ZXJ0
aWJsZTxUcmF2ZXJzYWwscmFuZG9tX2FjY2Vzc190cmF2ZXJzYWxfdGFnPgotICAgICAgICAgICwg
bXBsOjppZGVudGl0eTxzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPgotICAgICAgICAg
ICwgbXBsOjppZl88Ci0gICAgICAgICAgICAgICAgaXNfY29udmVydGlibGU8VHJhdmVyc2FsLGJp
ZGlyZWN0aW9uYWxfdHJhdmVyc2FsX3RhZz4KLSAgICAgICAgICAgICAgLCBzdGQ6OmJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnCi0gICAgICAgICAgICAgICwgc3RkOjpmb3J3YXJkX2l0ZXJhdG9y
X3RhZwotICAgICAgICAgICAgPgotICAgICAgICA+Ci0gICAgICAsIHR5cGVuYW1lIG1wbDo6ZXZh
bF9pZjwKLSAgICAgICAgICAgIG1wbDo6YW5kXzwKLSAgICAgICAgICAgICAgICBpc19jb252ZXJ0
aWJsZTxUcmF2ZXJzYWwsIHNpbmdsZV9wYXNzX3RyYXZlcnNhbF90YWc+Ci0KLSAgICAgICAgICAg
ICAgICAvLyBjaGVjayBmb3IgcmVhZGFiaWxpdHkKLSAgICAgICAgICAgICAgLCBpc19jb252ZXJ0
aWJsZTxSZWZlcmVuY2UsIFZhbHVlUGFyYW0+Ci0gICAgICAgICAgICA+Ci0gICAgICAgICAgLCBt
cGw6OmlkZW50aXR5PHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnPgotICAgICAgICAgICwgbXBsOjpp
ZGVudGl0eTxUcmF2ZXJzYWw+Ci0gICAgICAgID4KLSAgICA+Ci17Ci19OwotCi0vLyBUcnVlIGlm
ZiBUIGlzIGNvbnZlcnRpYmxlIHRvIGFuIG9sZC1zdHlsZSBpdGVyYXRvciBjYXRlZ29yeS4KLXRl
bXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX2l0ZXJhdG9yX2NhdGVnb3J5Ci0gIDogbXBsOjpv
cl88Ci0gICAgICAgIGlzX2NvbnZlcnRpYmxlPFQsc3RkOjppbnB1dF9pdGVyYXRvcl90YWc+Ci0g
ICAgICAsIGlzX2NvbnZlcnRpYmxlPFQsc3RkOjpvdXRwdXRfaXRlcmF0b3JfdGFnPgotICAgID4K
LXsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX2l0ZXJhdG9yX3RyYXZlcnNh
bAotICA6IGlzX2NvbnZlcnRpYmxlPFQsaW5jcmVtZW50YWJsZV90cmF2ZXJzYWxfdGFnPgote307
Ci0KLS8vCi0vLyBBIGNvbXBvc2l0ZSBpdGVyYXRvcl9jYXRlZ29yeSB0YWcgY29udmVydGlibGUg
dG8gQ2F0ZWdvcnkgKGEgcHVyZQotLy8gb2xkLXN0eWxlIGNhdGVnb3J5KSBhbmQgVHJhdmVyc2Fs
IChhIHB1cmUgdHJhdmVyc2FsIHRhZykuCi0vLyBUcmF2ZXJzYWwgbXVzdCBiZSBhIHN0cmljdCBp
bmNyZWFzZSBvZiB0aGUgdHJhdmVyc2FsIHBvd2VyIGdpdmVuIGJ5Ci0vLyBDYXRlZ29yeS4KLS8v
Ci10ZW1wbGF0ZSA8Y2xhc3MgQ2F0ZWdvcnksIGNsYXNzIFRyYXZlcnNhbD4KLXN0cnVjdCBpdGVy
YXRvcl9jYXRlZ29yeV93aXRoX3RyYXZlcnNhbAotICA6IENhdGVnb3J5LCBUcmF2ZXJzYWwKLXsK
LSAgICAvLyBNYWtlIHN1cmUgdGhpcyBpc24ndCB1c2VkIHRvIGJ1aWxkIGFueSBjYXRlZ29yaWVz
IHdoZXJlCi0gICAgLy8gY29udmVydGliaWxpdHkgdG8gVHJhdmVyc2FsIGlzIHJlZHVuZGFudC4g
IFNob3VsZCBqdXN0IHVzZSB0aGUKLSAgICAvLyBDYXRlZ29yeSBlbGVtZW50IGluIHRoYXQgY2Fz
ZS4KLSAgICBCT09TVF9NUExfQVNTRVJUX05PVCgoCi0gICAgICAgIGlzX2NvbnZlcnRpYmxlPAot
ICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl9jYXRlZ29yeV90b190cmF2ZXJzYWw8Q2F0
ZWdvcnk+Ojp0eXBlCi0gICAgICAgICAgICAsIFRyYXZlcnNhbAotICAgICAgICAgID4pKTsKLQot
ICAgIEJPT1NUX01QTF9BU1NFUlQoKGlzX2l0ZXJhdG9yX2NhdGVnb3J5PENhdGVnb3J5PikpOwot
ICAgIEJPT1NUX01QTF9BU1NFUlRfTk9UKChpc19pdGVyYXRvcl9jYXRlZ29yeTxUcmF2ZXJzYWw+
KSk7Ci0gICAgQk9PU1RfTVBMX0FTU0VSVF9OT1QoKGlzX2l0ZXJhdG9yX3RyYXZlcnNhbDxDYXRl
Z29yeT4pKTsKLSMgIGlmICFCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01TVkMsIEJPT1NUX1RFU1RF
RF9BVCgxMzEwKSkKLSAgICBCT09TVF9NUExfQVNTRVJUKChpc19pdGVyYXRvcl90cmF2ZXJzYWw8
VHJhdmVyc2FsPikpOwotIyAgZW5kaWYKLX07Ci0KLS8vIENvbXB1dGVzIGFuIGl0ZXJhdG9yX2Nh
dGVnb3J5IHRhZyB3aG9zZSB0cmF2ZXJzYWwgaXMgVHJhdmVyc2FsIGFuZAotLy8gd2hpY2ggaXMg
YXBwcm9wcmlhdGUgZm9yIGFuIGl0ZXJhdG9yCi10ZW1wbGF0ZSA8Y2xhc3MgVHJhdmVyc2FsLCBj
bGFzcyBWYWx1ZVBhcmFtLCBjbGFzcyBSZWZlcmVuY2U+Ci1zdHJ1Y3QgZmFjYWRlX2l0ZXJhdG9y
X2NhdGVnb3J5X2ltcGwKLXsKLSAgICBCT09TVF9NUExfQVNTRVJUX05PVCgoaXNfaXRlcmF0b3Jf
Y2F0ZWdvcnk8VHJhdmVyc2FsPikpOwotCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl9m
YWNhZGVfZGVmYXVsdF9jYXRlZ29yeTwKLSAgICAgICAgVHJhdmVyc2FsLFZhbHVlUGFyYW0sUmVm
ZXJlbmNlCi0gICAgPjo6dHlwZSBjYXRlZ29yeTsKLQotICAgIHR5cGVkZWYgdHlwZW5hbWUgbXBs
OjppZl88Ci0gICAgICAgIGlzX3NhbWU8Ci0gICAgICAgICAgICBUcmF2ZXJzYWwKLSAgICAgICAg
ICAsIHR5cGVuYW1lIGl0ZXJhdG9yX2NhdGVnb3J5X3RvX3RyYXZlcnNhbDxjYXRlZ29yeT46OnR5
cGUKLSAgICAgICAgPgotICAgICAgLCBjYXRlZ29yeQotICAgICAgLCBpdGVyYXRvcl9jYXRlZ29y
eV93aXRoX3RyYXZlcnNhbDxjYXRlZ29yeSxUcmF2ZXJzYWw+Ci0gICAgPjo6dHlwZSB0eXBlOwot
fTsKLQotLy8KLS8vIENvbXB1dGUgYW4gaXRlcmF0b3JfY2F0ZWdvcnkgZm9yIGl0ZXJhdG9yX2Zh
Y2FkZQotLy8KLXRlbXBsYXRlIDxjbGFzcyBDYXRlZ29yeU9yVHJhdmVyc2FsLCBjbGFzcyBWYWx1
ZVBhcmFtLCBjbGFzcyBSZWZlcmVuY2U+Ci1zdHJ1Y3QgZmFjYWRlX2l0ZXJhdG9yX2NhdGVnb3J5
Ci0gIDogbXBsOjpldmFsX2lmPAotICAgICAgICBpc19pdGVyYXRvcl9jYXRlZ29yeTxDYXRlZ29y
eU9yVHJhdmVyc2FsPgotICAgICAgLCBtcGw6OmlkZW50aXR5PENhdGVnb3J5T3JUcmF2ZXJzYWw+
IC8vIG9sZC1zdHlsZSBjYXRlZ29yaWVzIGFyZSBmaW5lIGFzLWlzCi0gICAgICAsIGZhY2FkZV9p
dGVyYXRvcl9jYXRlZ29yeV9pbXBsPENhdGVnb3J5T3JUcmF2ZXJzYWwsVmFsdWVQYXJhbSxSZWZl
cmVuY2U+Ci0gICAgPgotewotfTsKLQotfX19IC8vIG5hbWVzcGFjZSBib29zdDo6aXRlcmF0b3Jz
OjpkZXRhaWwKLQotIyBpbmNsdWRlIDxib29zdC9pdGVyYXRvci9kZXRhaWwvY29uZmlnX3VuZGVm
LmhwcD4KLQotI2VuZGlmIC8vIEZBQ0FERV9JVEVSQVRPUl9DQVRFR09SWV9EV0EyMDAzMTExOF9I
UFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L2l0ZXJhdG9yL2ludGVyb3BlcmFibGUuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvaXRlcmF0b3IvaW50ZXJvcGVyYWJsZS5ocHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDZmM2M4NzJhMjdiYTdkN2Q0ODRlMWM4YzNkYjUzYTVmNWZmNTYxODIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvaXRlcmF0b3IvaW50ZXJvcGVyYWJsZS5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vLyAoQykgQ29weXJpZ2h0IERhdmlk
IEFicmFoYW1zIDIwMDIuCi0vLyAoQykgQ29weXJpZ2h0IEplcmVteSBTaWVrICAgIDIwMDIuCi0v
LyAoQykgQ29weXJpZ2h0IFRob21hcyBXaXR0ICAgIDIwMDIuCi0vLyBEaXN0cmlidXRlZCB1bmRl
ciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLS8vIGFjY29t
cGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jaWZuZGVmIEJPT1NUX0lOVEVST1BFUkFCTEVfMjMw
MjIwMDNUSFdfSFBQCi0jIGRlZmluZSBCT09TVF9JTlRFUk9QRVJBQkxFXzIzMDIyMDAzVEhXX0hQ
UAotCi0jIGluY2x1ZGUgPGJvb3N0L21wbC9ib29sLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvbXBs
L29yLmhwcD4KLQotIyBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jb252ZXJ0aWJsZS5o
cHA+Ci0KLSMgaW5jbHVkZSA8Ym9vc3QvaXRlcmF0b3IvZGV0YWlsL2NvbmZpZ19kZWYuaHBwPiAv
LyBtdXN0IGFwcGVhciBsYXN0Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgaXRlcmF0
b3JzIHsKLQotICAvLwotICAvLyBNZXRhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVy
IHR3bwotICAvLyBpdGVyYXRvciB0eXBlcyBhcmUgY29uc2lkZXJlZCBpbnRlcm9wZXJhYmxlLgot
ICAvLwotICAvLyBUd28gaXRlcmF0b3IgdHlwZXMgQSxCIGFyZSBjb25zaWRlcmVkIGludGVyb3Bl
cmFibGUgaWYgZWl0aGVyCi0gIC8vIEEgaXMgY29udmVydGlibGUgdG8gQiBvciB2aWNlIHZlcnNh
LgotICAvLyBUaGlzIGludGVyb3BlcmFiaWxpdHkgZGVmaW5pdGlvbiBpcyBpbiBzeW5jIHdpdGgg
dGhlCi0gIC8vIHN0YW5kYXJkcyByZXF1aXJlbWVudHMgb24gY29uc3RhbnQvbXV0YWJsZSBjb250
YWluZXIKLSAgLy8gaXRlcmF0b3JzICgyMy4xIFtsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50c10p
LgotICAvLwotICAvLyBGb3IgY29tcGlsZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpc19jb252ZXJ0
aWJsZQotICAvLyBpc19pbnRlcm9wZXJhYmxlIGdpdmVzIGZhbHNlIHBvc2l0aXZlcy4gU2VlIGNv
bW1lbnRzCi0gIC8vIG9uIG9wZXJhdG9yIGltcGxlbWVudGF0aW9uIGZvciBjb25zZXF1ZW5jZXMu
Ci0gIC8vCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBBLCB0eXBlbmFtZSBCPgotICBzdHJ1Y3QgaXNf
aW50ZXJvcGVyYWJsZQotIyBpZmRlZiBCT09TVF9OT19TVFJJQ1RfSVRFUkFUT1JfSU5URVJPUEVS
QUJJTElUWQotICAgIDogbXBsOjp0cnVlXwotIyBlbHNlCi0gICAgOiBtcGw6Om9yXzwKLSAgICAg
ICAgICBpc19jb252ZXJ0aWJsZTwgQSwgQiA+Ci0gICAgICAgICwgaXNfY29udmVydGlibGU8IEIs
IEEgPiA+Ci0jIGVuZGlmCi0gIHsKLSAgfTsKLQotfSAvLyBuYW1lc3BhY2UgaXRlcmF0b3JzCi0K
LXVzaW5nIGl0ZXJhdG9yczo6aXNfaW50ZXJvcGVyYWJsZTsKLQotfSAvLyBuYW1lc3BhY2UgYm9v
c3QKLQotIyBpbmNsdWRlIDxib29zdC9pdGVyYXRvci9kZXRhaWwvY29uZmlnX3VuZGVmLmhwcD4K
LQotI2VuZGlmIC8vIEJPT1NUX0lOVEVST1BFUkFCTEVfMjMwMjIwMDNUSFdfSFBQCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pdGVyYXRvci9p
dGVyYXRvcl9hZGFwdG9yLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L2l0ZXJhdG9yL2l0ZXJhdG9yX2FkYXB0b3IuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4N2NmZDA1ODNmY2IyMWJkZmEwY2Y2MjkwNzU4NDkzNjhkMDRkZDM1Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2l0ZXJhdG9yL2l0ZXJhdG9yX2FkYXB0b3IuaHBw
CisrKyAvZGV2L251bGwKQEAgLTEsMzYwICswLDAgQEAKLS8vIChDKSBDb3B5cmlnaHQgRGF2aWQg
QWJyYWhhbXMgMjAwMi4KLS8vIChDKSBDb3B5cmlnaHQgSmVyZW15IFNpZWsgICAgMjAwMi4KLS8v
IChDKSBDb3B5cmlnaHQgVGhvbWFzIFdpdHQgICAgMjAwMi4KLS8vIERpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotLy8gYWNjb21w
YW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSNpZm5kZWYgQk9PU1RfSVRFUkFUT1JfQURBUFRPUl8y
MzAyMjAwM1RIV19IUFAKLSNkZWZpbmUgQk9PU1RfSVRFUkFUT1JfQURBUFRPUl8yMzAyMjAwM1RI
V19IUFAKLQotI2luY2x1ZGUgPGJvb3N0L3N0YXRpY19hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L2l0ZXJhdG9yLmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvaXRlcmF0b3IuaHBwPgot
Ci0jaW5jbHVkZSA8Ym9vc3QvaXRlcmF0b3IvaXRlcmF0b3JfY2F0ZWdvcmllcy5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvaXRlcmF0b3IvaXRlcmF0b3JfZmFjYWRlLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9pdGVyYXRvci9kZXRhaWwvZW5hYmxlX2lmLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L21wbC9h
bmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9ub3QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21w
bC9vci5ocHA+Ci0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcD4KLSNp
bmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jb252ZXJ0aWJsZS5ocHA+Ci0KLSNpZmRlZiBC
T09TVF9JVEVSQVRPUl9SRUZfQ09OU1RORVNTX0tJTExTX1dSSVRBQklMSVRZCi0jIGluY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9yZWZlcmVuY2UuaHBwPgotI2VuZGlmCi0KLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9hZGRfcmVmZXJlbmNlLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9pdGVyYXRvci9kZXRhaWwvY29uZmlnX2RlZi5ocHA+Ci0KLSNpbmNsdWRlIDxib29zdC9pdGVy
YXRvci9pdGVyYXRvcl90cmFpdHMuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNl
IGl0ZXJhdG9ycyB7Ci0KLSAgLy8gVXNlZCBhcyBhIGRlZmF1bHQgdGVtcGxhdGUgYXJndW1lbnQg
aW50ZXJuYWxseSwgbWVyZWx5IHRvCi0gIC8vIGluZGljYXRlICJ1c2UgdGhlIGRlZmF1bHQiLCB0
aGlzIGNhbiBhbHNvIGJlIHBhc3NlZCBieSB1c2VycwotICAvLyBleHBsaWNpdGx5IGluIG9yZGVy
IHRvIHNwZWNpZnkgdGhhdCB0aGUgZGVmYXVsdCBzaG91bGQgYmUgdXNlZC4KLSAgc3RydWN0IHVz
ZV9kZWZhdWx0OwotCi19IC8vIG5hbWVzcGFjZSBpdGVyYXRvcnMKLQotdXNpbmcgaXRlcmF0b3Jz
Ojp1c2VfZGVmYXVsdDsKLQotLy8gdGhlIGluY29tcGxldGVuZXNzIG9mIHVzZV9kZWZhdWx0IGNh
dXNlcyBtYXNzaXZlIHByb2JsZW1zIGZvcgotLy8gaXNfY29udmVydGlibGUgKG5hdHVyYWxseSku
ICBUaGlzIHdvcmthcm91bmQgaXMgZm9ydHVuYXRlbHkgbm90Ci0vLyBuZWVkZWQgZm9yIHZjNi92
YzcuCi10ZW1wbGF0ZTxjbGFzcyBUbz4KLXN0cnVjdCBpc19jb252ZXJ0aWJsZTx1c2VfZGVmYXVs
dCxUbz4KLSAgOiBtcGw6OmZhbHNlXyB7fTsKLQotbmFtZXNwYWNlIGl0ZXJhdG9ycyB7Ci0KLSAg
bmFtZXNwYWNlIGRldGFpbAotICB7Ci0KLSAgICAvLwotICAgIC8vIFJlc3VsdCB0eXBlIHVzZWQg
aW4gZW5hYmxlX2lmX2NvbnZlcnRpYmxlIG1ldGEgZnVuY3Rpb24uCi0gICAgLy8gVGhpcyBjYW4g
YmUgYW4gaW5jb21wbGV0ZSB0eXBlLCBhcyBvbmx5IHBvaW50ZXJzIHRvCi0gICAgLy8gZW5hYmxl
X2lmX2NvbnZlcnRpYmxlPCAuLi4gPjo6dHlwZSBhcmUgdXNlZC4KLSAgICAvLyBXZSBjb3VsZCBo
YXZlIHVzZWQgdm9pZCBmb3IgdGhpcywgYnV0IGNvbnZlcnNpb24gdG8KLSAgICAvLyB2b2lkKiBp
cyBqdXN0IHRvIGVhc3kuCi0gICAgLy8KLSAgICBzdHJ1Y3QgZW5hYmxlX3R5cGU7Ci0gIH0KLQot
Ci0gIC8vCi0gIC8vIGVuYWJsZV9pZiBmb3IgdXNlIGluIGFkYXB0ZWQgaXRlcmF0b3JzIGNvbnN0
cnVjdG9ycy4KLSAgLy8KLSAgLy8gSW4gb3JkZXIgdG8gcHJvdmlkZSBpbnRlcm9wZXJhYmlsaXR5
IGJldHdlZW4gYWRhcHRlZCBjb25zdGFudCBhbmQKLSAgLy8gbXV0YWJsZSBpdGVyYXRvcnMsIGFk
YXB0ZWQgaXRlcmF0b3JzIHdpbGwgdXN1YWxseSBwcm92aWRlIHRlbXBsYXRlZAotICAvLyBjb252
ZXJzaW9uIGNvbnN0cnVjdG9ycyBvZiB0aGUgZm9sbG93aW5nIGZvcm0KLSAgLy8KLSAgLy8gdGVt
cGxhdGUgPGNsYXNzIEJhc2VJdGVyYXRvcj4KLSAgLy8gY2xhc3MgYWRhcHRlZF9pdGVyYXRvciA6
Ci0gIC8vICAgcHVibGljIGl0ZXJhdG9yX2FkYXB0b3I8IGFkYXB0ZWRfaXRlcmF0b3I8SXRlcmF0
b3I+LCBJdGVyYXRvciA+Ci0gIC8vIHsKLSAgLy8gcHVibGljOgotICAvLwotICAvLyAgIC4uLgot
ICAvLwotICAvLyAgIHRlbXBsYXRlIDxjbGFzcyBPdGhlckl0ZXJhdG9yPgotICAvLyAgIGFkYXB0
ZWRfaXRlcmF0b3IoCi0gIC8vICAgICAgIE90aGVySXRlcmF0b3IgY29uc3QmIGl0Ci0gIC8vICAg
ICAsIHR5cGVuYW1lIGVuYWJsZV9pZl9jb252ZXJ0aWJsZTxPdGhlckl0ZXJhdG9yLCBJdGVyYXRv
cj46OnR5cGUqID0gMCk7Ci0gIC8vCi0gIC8vICAgLi4uCi0gIC8vIH07Ci0gIC8vCi0gIC8vIGVu
YWJsZV9pZl9jb252ZXJ0aWJsZSBpcyB1c2VkIHRvIHJlbW92ZSB0aG9zZSBvdmVybG9hZHMgZnJv
bSB0aGUgb3ZlcmxvYWQKLSAgLy8gc2V0IHRoYXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZC4gRm9y
IGFsbCBwcmFjdGljYWwgcHVycG9zZXMgb25seSBvdmVybG9hZHMKLSAgLy8gZm9yIGNvbnN0YW50
L211dGFibGUgaW50ZXJhY3Rpb24gd2lsbCByZW1haW4uIFRoaXMgaGFzIHRoZSBhZHZhbnRhZ2Ug
dGhhdAotICAvLyBtZXRhIGZ1bmN0aW9ucyBsaWtlIGJvb3N0Ojppc19jb252ZXJ0aWJsZSBkbyBu
b3QgcmV0dXJuIGZhbHNlIHBvc2l0aXZlcywKLSAgLy8gYXMgdGhleSBjYW4gb25seSBsb29rIGF0
IHRoZSBzaWduYXR1cmUgb2YgdGhlIGNvbnZlcnNpb24gY29uc3RydWN0b3IKLSAgLy8gYW5kIG5v
dCBhdCB0aGUgYWN0dWFsIGluc3RhbnRpYXRpb24uCi0gIC8vCi0gIC8vIGVuYWJsZV9pZl9pbnRl
cm9wZXJhYmxlIGNhbiBiZSBzYWZlbHkgdXNlZCBpbiB1c2VyIGNvZGUuIEl0IGZhbGxzIGJhY2sg
dG8KLSAgLy8gYWx3YXlzIGVuYWJsZWQgZm9yIGNvbXBpbGVycyB0aGF0IGRvbid0IHN1cHBvcnQg
ZW5hYmxlX2lmIG9yIGlzX2NvbnZlcnRpYmxlLgotICAvLyBUaGVyZSBpcyBubyBuZWVkIGZvciBj
b21waWxlciBzcGVjaWZpYyB3b3JrYXJvdW5kcyBpbiB1c2VyIGNvZGUuCi0gIC8vCi0gIC8vIFRo
ZSBvcGVyYXRvcnMgaW1wbGVtZW50YXRpb24gcmVsaWVzIG9uIGJvb3N0Ojppc19jb252ZXJ0aWJs
ZSBub3QgcmV0dXJuaW5nCi0gIC8vIGZhbHNlIHBvc2l0aXZlcyBmb3IgdXNlci9saWJyYXJ5IGRl
ZmluZWQgaXRlcmF0b3IgdHlwZXMuIFNlZSBjb21tZW50cwotICAvLyBvbiBvcGVyYXRvciBpbXBs
ZW1lbnRhdGlvbiBmb3IgY29uc2VxdWVuY2VzLgotICAvLwotIyAgaWYgZGVmaW5lZChCT09TVF9O
T19JU19DT05WRVJUSUJMRSkgfHwgZGVmaW5lZChCT09TVF9OT19TRklOQUUpCi0KLSAgdGVtcGxh
dGUgPGNsYXNzIEZyb20sIGNsYXNzIFRvPgotICBzdHJ1Y3QgZW5hYmxlX2lmX2NvbnZlcnRpYmxl
Ci0gIHsKLSAgICAgIHR5cGVkZWYgYm9vc3Q6Oml0ZXJhdG9yczo6ZGV0YWlsOjplbmFibGVfdHlw
ZSB0eXBlOwotICB9OwotCi0jICBlbGlmIEJPT1NUX1dPUktBUk9VTkQoX01TQ19GVUxMX1ZFUiwg
Qk9PU1RfVEVTVEVEX0FUKDEzMTAyMjkyKSkKLQotICAvLyBGb3Igc29tZSByZWFzb24gdmM3LjEg
bmVlZHMgdXMgdG8gImN1dCBvZmYiIGluc3RhbnRpYXRpb24KLSAgLy8gb2YgaXNfY29udmVydGli
bGUgaW4gYSBmZXcgY2FzZXMuCi0gIHRlbXBsYXRlPHR5cGVuYW1lIEZyb20sIHR5cGVuYW1lIFRv
PgotICBzdHJ1Y3QgZW5hYmxlX2lmX2NvbnZlcnRpYmxlCi0gICAgOiBpdGVyYXRvcnM6OmVuYWJs
ZV9pZjwKLSAgICAgICAgbXBsOjpvcl88Ci0gICAgICAgICAgICBpc19zYW1lPEZyb20sVG8+Ci0g
ICAgICAgICAgLCBpc19jb252ZXJ0aWJsZTxGcm9tLCBUbz4KLSAgICAgICAgPgotICAgICAgLCBi
b29zdDo6aXRlcmF0b3JzOjpkZXRhaWw6OmVuYWJsZV90eXBlCi0gICAgPgotICB7fTsKLQotIyAg
ZWxzZQotCi0gIHRlbXBsYXRlPHR5cGVuYW1lIEZyb20sIHR5cGVuYW1lIFRvPgotICBzdHJ1Y3Qg
ZW5hYmxlX2lmX2NvbnZlcnRpYmxlCi0gICAgOiBpdGVyYXRvcnM6OmVuYWJsZV9pZjwKLSAgICAg
ICAgICBpc19jb252ZXJ0aWJsZTxGcm9tLCBUbz4KLSAgICAgICAgLCBib29zdDo6aXRlcmF0b3Jz
OjpkZXRhaWw6OmVuYWJsZV90eXBlCi0gICAgICA+Ci0gIHt9OwotCi0jIGVuZGlmCi0KLSAgLy8K
LSAgLy8gRGVmYXVsdCB0ZW1wbGF0ZSBhcmd1bWVudCBoYW5kbGluZyBmb3IgaXRlcmF0b3JfYWRh
cHRvcgotICAvLwotICBuYW1lc3BhY2UgZGV0YWlsCi0gIHsKLSAgICAvLyBJZiBUIGlzIHVzZV9k
ZWZhdWx0LCByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnZva2luZwotICAgIC8vIERlZmF1bHROdWxs
YXJ5Rm4sIG90aGVyd2lzZSByZXR1cm4gVC4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
RGVmYXVsdE51bGxhcnlGbj4KLSAgICBzdHJ1Y3QgaWFfZGZsdF9oZWxwCi0gICAgICA6IG1wbDo6
ZXZhbF9pZjwKLSAgICAgICAgICAgIGlzX3NhbWU8VCwgdXNlX2RlZmF1bHQ+Ci0gICAgICAgICAg
LCBEZWZhdWx0TnVsbGFyeUZuCi0gICAgICAgICAgLCBtcGw6OmlkZW50aXR5PFQ+Ci0gICAgICAg
ID4KLSAgICB7Ci0gICAgfTsKLQotICAgIC8vIEEgbWV0YWZ1bmN0aW9uIHdoaWNoIGNvbXB1dGVz
IGFuIGl0ZXJhdG9yX2FkYXB0b3IncyBiYXNlIGNsYXNzLAotICAgIC8vIGEgc3BlY2lhbGl6YXRp
b24gb2YgaXRlcmF0b3JfZmFjYWRlLgotICAgIHRlbXBsYXRlIDwKLSAgICAgICAgY2xhc3MgRGVy
aXZlZAotICAgICAgLCBjbGFzcyBCYXNlCi0gICAgICAsIGNsYXNzIFZhbHVlCi0gICAgICAsIGNs
YXNzIFRyYXZlcnNhbAotICAgICAgLCBjbGFzcyBSZWZlcmVuY2UKLSAgICAgICwgY2xhc3MgRGlm
ZmVyZW5jZQotICAgID4KLSAgICBzdHJ1Y3QgaXRlcmF0b3JfYWRhcHRvcl9iYXNlCi0gICAgewot
ICAgICAgICB0eXBlZGVmIGl0ZXJhdG9yX2ZhY2FkZTwKLSAgICAgICAgICAgIERlcml2ZWQKLQot
IyBpZmRlZiBCT09TVF9JVEVSQVRPUl9SRUZfQ09OU1RORVNTX0tJTExTX1dSSVRBQklMSVRZCi0g
ICAgICAgICAgLCB0eXBlbmFtZSBib29zdDo6aXRlcmF0b3JzOjpkZXRhaWw6OmlhX2RmbHRfaGVs
cDwKLSAgICAgICAgICAgICAgICBWYWx1ZQotICAgICAgICAgICAgICAsIG1wbDo6ZXZhbF9pZjwK
LSAgICAgICAgICAgICAgICAgICAgaXNfc2FtZTxSZWZlcmVuY2UsdXNlX2RlZmF1bHQ+Ci0gICAg
ICAgICAgICAgICAgICAsIGl0ZXJhdG9yX3ZhbHVlPEJhc2U+Ci0gICAgICAgICAgICAgICAgICAs
IHJlbW92ZV9yZWZlcmVuY2U8UmVmZXJlbmNlPgotICAgICAgICAgICAgICAgID4KLSAgICAgICAg
ICAgID46OnR5cGUKLSMgZWxzZQotICAgICAgICAgICwgdHlwZW5hbWUgYm9vc3Q6Oml0ZXJhdG9y
czo6ZGV0YWlsOjppYV9kZmx0X2hlbHA8Ci0gICAgICAgICAgICAgICAgVmFsdWUsIGl0ZXJhdG9y
X3ZhbHVlPEJhc2U+Ci0gICAgICAgICAgICA+Ojp0eXBlCi0jIGVuZGlmCi0KLSAgICAgICAgICAs
IHR5cGVuYW1lIGJvb3N0OjppdGVyYXRvcnM6OmRldGFpbDo6aWFfZGZsdF9oZWxwPAotICAgICAg
ICAgICAgICAgIFRyYXZlcnNhbAotICAgICAgICAgICAgICAsIGl0ZXJhdG9yX3RyYXZlcnNhbDxC
YXNlPgotICAgICAgICAgICAgPjo6dHlwZQotCi0gICAgICAgICAgLCB0eXBlbmFtZSBib29zdDo6
aXRlcmF0b3JzOjpkZXRhaWw6OmlhX2RmbHRfaGVscDwKLSAgICAgICAgICAgICAgICBSZWZlcmVu
Y2UKLSAgICAgICAgICAgICAgLCBtcGw6OmV2YWxfaWY8Ci0gICAgICAgICAgICAgICAgICAgIGlz
X3NhbWU8VmFsdWUsdXNlX2RlZmF1bHQ+Ci0gICAgICAgICAgICAgICAgICAsIGl0ZXJhdG9yX3Jl
ZmVyZW5jZTxCYXNlPgotICAgICAgICAgICAgICAgICAgLCBhZGRfcmVmZXJlbmNlPFZhbHVlPgot
ICAgICAgICAgICAgICAgID4KLSAgICAgICAgICAgID46OnR5cGUKLQotICAgICAgICAgICwgdHlw
ZW5hbWUgYm9vc3Q6Oml0ZXJhdG9yczo6ZGV0YWlsOjppYV9kZmx0X2hlbHA8Ci0gICAgICAgICAg
ICAgICAgRGlmZmVyZW5jZSwgaXRlcmF0b3JfZGlmZmVyZW5jZTxCYXNlPgotICAgICAgICAgICAg
Pjo6dHlwZQotICAgICAgICA+Ci0gICAgICAgIHR5cGU7Ci0gICAgfTsKLQotICAgIC8vIHdvcmth
cm91bmQgZm9yIGFDKysgQ1IgSkFHYWYzMzUxMgotICAgIHRlbXBsYXRlIDxjbGFzcyBUcjEsIGNs
YXNzIFRyMj4KLSAgICBpbmxpbmUgdm9pZCBpdGVyYXRvcl9hZGFwdG9yX2Fzc2VydF90cmF2ZXJz
YWwgKCkKLSAgICB7Ci0gICAgICBCT09TVF9TVEFUSUNfQVNTRVJUKChpc19jb252ZXJ0aWJsZTxU
cjEsIFRyMj46OnZhbHVlKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8KLSAgLy8gSXRlcmF0b3IgQWRh
cHRvcgotICAvLwotICAvLyBUaGUgcGFyYW1ldGVyIG9yZGVyaW5nIGNoYW5nZWQgc2xpZ2h0bHkg
d2l0aCByZXNwZWN0IHRvIGZvcm1lcgotICAvLyB2ZXJzaW9ucyBvZiBpdGVyYXRvcl9hZGFwdG9y
IFRoZSBpZGVhIGlzIHRoYXQgd2hlbiB0aGUgdXNlciBuZWVkcwotICAvLyB0byBmaWRkbGUgd2l0
aCB0aGUgcmVmZXJlbmNlIHR5cGUgaXQgaXMgaGlnaGx5IGxpa2VseSB0aGF0IHRoZQotICAvLyBp
dGVyYXRvciBjYXRlZ29yeSBoYXMgdG8gYmUgYWRqdXN0ZWQgYXMgd2VsbC4gIEFueSBvZiB0aGUK
LSAgLy8gZm9sbG93aW5nIGZvdXIgdGVtcGxhdGUgYXJndW1lbnRzIG1heSBiZSBvbW1pdHRlZCBv
ciBleHBsaWNpdGx5Ci0gIC8vIHJlcGxhY2VkIGJ5IHVzZV9kZWZhdWx0LgotICAvLwotICAvLyAg
IFZhbHVlIC0gaWYgc3VwcGxpZWQsIHRoZSB2YWx1ZV90eXBlIG9mIHRoZSByZXN1bHRpbmcgaXRl
cmF0b3IsIHVubGVzcwotICAvLyAgICAgIGNvbnN0LiBJZiBjb25zdCwgYSBjb25mb3JtaW5nIGNv
bXBpbGVyIHN0cmlwcyBjb25zdG5lc3MgZm9yIHRoZQotICAvLyAgICAgIHZhbHVlX3R5cGUuIElm
IG5vdCBzdXBwbGllZCwgaXRlcmF0b3JfdHJhaXRzPEJhc2U+Ojp2YWx1ZV90eXBlIGlzIHVzZWQK
LSAgLy8KLSAgLy8gICBDYXRlZ29yeSAtIHRoZSB0cmF2ZXJzYWwgY2F0ZWdvcnkgb2YgdGhlIHJl
c3VsdGluZyBpdGVyYXRvci4gSWYgbm90Ci0gIC8vICAgICAgc3VwcGxpZWQsIGl0ZXJhdG9yX3Ry
YXZlcnNhbDxCYXNlPjo6dHlwZSBpcyB1c2VkLgotICAvLwotICAvLyAgIFJlZmVyZW5jZSAtIHRo
ZSByZWZlcmVuY2UgdHlwZSBvZiB0aGUgcmVzdWx0aW5nIGl0ZXJhdG9yLCBhbmQgaW4KLSAgLy8g
ICAgICBwYXJ0aWN1bGFyLCB0aGUgcmVzdWx0IHR5cGUgb2Ygb3BlcmF0b3IqKCkuIElmIG5vdCBz
dXBwbGllZCBidXQKLSAgLy8gICAgICBWYWx1ZSBpcyBzdXBwbGllZCwgVmFsdWUmIGlzIHVzZWQu
IE90aGVyd2lzZQotICAvLyAgICAgIGl0ZXJhdG9yX3RyYWl0czxCYXNlPjo6cmVmZXJlbmNlIGlz
IHVzZWQuCi0gIC8vCi0gIC8vICAgRGlmZmVyZW5jZSAtIHRoZSBkaWZmZXJlbmNlX3R5cGUgb2Yg
dGhlIHJlc3VsdGluZyBpdGVyYXRvci4gSWYgbm90Ci0gIC8vICAgICAgc3VwcGxpZWQsIGl0ZXJh
dG9yX3RyYWl0czxCYXNlPjo6ZGlmZmVyZW5jZV90eXBlIGlzIHVzZWQuCi0gIC8vCi0gIHRlbXBs
YXRlIDwKLSAgICAgIGNsYXNzIERlcml2ZWQKLSAgICAsIGNsYXNzIEJhc2UKLSAgICAsIGNsYXNz
IFZhbHVlICAgICAgICA9IHVzZV9kZWZhdWx0Ci0gICAgLCBjbGFzcyBUcmF2ZXJzYWwgICAgPSB1
c2VfZGVmYXVsdAotICAgICwgY2xhc3MgUmVmZXJlbmNlICAgID0gdXNlX2RlZmF1bHQKLSAgICAs
IGNsYXNzIERpZmZlcmVuY2UgICA9IHVzZV9kZWZhdWx0Ci0gID4KLSAgY2xhc3MgaXRlcmF0b3Jf
YWRhcHRvcgotICAgIDogcHVibGljIGJvb3N0OjppdGVyYXRvcnM6OmRldGFpbDo6aXRlcmF0b3Jf
YWRhcHRvcl9iYXNlPAotICAgICAgICBEZXJpdmVkLCBCYXNlLCBWYWx1ZSwgVHJhdmVyc2FsLCBS
ZWZlcmVuY2UsIERpZmZlcmVuY2UKLSAgICAgID46OnR5cGUKLSAgewotICAgICAgZnJpZW5kIGNs
YXNzIGl0ZXJhdG9yX2NvcmVfYWNjZXNzOwotCi0gICBwcm90ZWN0ZWQ6Ci0gICAgICB0eXBlZGVm
IHR5cGVuYW1lIGJvb3N0OjppdGVyYXRvcnM6OmRldGFpbDo6aXRlcmF0b3JfYWRhcHRvcl9iYXNl
PAotICAgICAgICAgIERlcml2ZWQsIEJhc2UsIFZhbHVlLCBUcmF2ZXJzYWwsIFJlZmVyZW5jZSwg
RGlmZmVyZW5jZQotICAgICAgPjo6dHlwZSBzdXBlcl90OwotICAgcHVibGljOgotICAgICAgaXRl
cmF0b3JfYWRhcHRvcigpIHt9Ci0KLSAgICAgIGV4cGxpY2l0IGl0ZXJhdG9yX2FkYXB0b3IoQmFz
ZSBjb25zdCAmaXRlcikKLSAgICAgICAgICA6IG1faXRlcmF0b3IoaXRlcikKLSAgICAgIHsKLSAg
ICAgIH0KLQotICAgICAgdHlwZWRlZiBCYXNlIGJhc2VfdHlwZTsKLQotICAgICAgQmFzZSBjb25z
dCYgYmFzZSgpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1faXRlcmF0b3I7IH0KLQotICAgcHJv
dGVjdGVkOgotICAgICAgLy8gZm9yIGNvbnZlbmllbmNlIGluIGRlcml2ZWQgY2xhc3NlcwotICAg
ICAgdHlwZWRlZiBpdGVyYXRvcl9hZGFwdG9yPERlcml2ZWQsQmFzZSxWYWx1ZSxUcmF2ZXJzYWws
UmVmZXJlbmNlLERpZmZlcmVuY2U+IGl0ZXJhdG9yX2FkYXB0b3JfOwotCi0gICAgICAvLwotICAg
ICAgLy8gbHZhbHVlIGFjY2VzcyB0byB0aGUgQmFzZSBvYmplY3QgZm9yIERlcml2ZWQKLSAgICAg
IC8vCi0gICAgICBCYXNlIGNvbnN0JiBiYXNlX3JlZmVyZW5jZSgpIGNvbnN0Ci0gICAgICAgIHsg
cmV0dXJuIG1faXRlcmF0b3I7IH0KLQotICAgICAgQmFzZSYgYmFzZV9yZWZlcmVuY2UoKQotICAg
ICAgICB7IHJldHVybiBtX2l0ZXJhdG9yOyB9Ci0KLSAgIHByaXZhdGU6Ci0gICAgICAvLwotICAg
ICAgLy8gQ29yZSBpdGVyYXRvciBpbnRlcmZhY2UgZm9yIGl0ZXJhdG9yX2ZhY2FkZS4gIFRoaXMg
aXMgcHJpdmF0ZQotICAgICAgLy8gdG8gcHJldmVudCB0ZW1wdGF0aW9uIGZvciBEZXJpdmVkIGNs
YXNzZXMgdG8gdXNlIGl0LCB3aGljaAotICAgICAgLy8gd2lsbCBvZnRlbiByZXN1bHQgaW4gYW4g
ZXJyb3IuICBEZXJpdmVkIGNsYXNzZXMgc2hvdWxkIHVzZQotICAgICAgLy8gYmFzZV9yZWZlcmVu
Y2UoKSwgYWJvdmUsIHRvIGdldCBkaXJlY3QgYWNjZXNzIHRvIG1faXRlcmF0b3IuCi0gICAgICAv
LwotICAgICAgdHlwZW5hbWUgc3VwZXJfdDo6cmVmZXJlbmNlIGRlcmVmZXJlbmNlKCkgY29uc3QK
LSAgICAgICAgeyByZXR1cm4gKm1faXRlcmF0b3I7IH0KLQotICAgICAgdGVtcGxhdGUgPAotICAg
ICAgY2xhc3MgT3RoZXJEZXJpdmVkLCBjbGFzcyBPdGhlckl0ZXJhdG9yLCBjbGFzcyBWLCBjbGFz
cyBDLCBjbGFzcyBSLCBjbGFzcyBECi0gICAgICA+Ci0gICAgICBib29sIGVxdWFsKGl0ZXJhdG9y
X2FkYXB0b3I8T3RoZXJEZXJpdmVkLCBPdGhlckl0ZXJhdG9yLCBWLCBDLCBSLCBEPiBjb25zdCYg
eCkgY29uc3QKLSAgICAgIHsKLSAgICAgICAgLy8gTWF5YmUgcmVhZGQgd2l0aCBzYW1lX2Rpc3Rh
bmNlCi0gICAgICAgIC8vICAgICAgICAgICBCT09TVF9TVEFUSUNfQVNTRVJUKAotICAgICAgICAv
LyAgICAgICAgICAgICAgIChkZXRhaWw6OnNhbWVfY2F0ZWdvcnlfYW5kX2RpZmZlcmVuY2U8RGVy
aXZlZCxPdGhlckRlcml2ZWQ+Ojp2YWx1ZSkKLSAgICAgICAgLy8gICAgICAgICAgICAgICApOwot
ICAgICAgICAgIHJldHVybiBtX2l0ZXJhdG9yID09IHguYmFzZSgpOwotICAgICAgfQotCi0gICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX2NhdGVnb3J5X3RvX3RyYXZlcnNhbDwKLSAgICAg
ICAgICB0eXBlbmFtZSBzdXBlcl90OjppdGVyYXRvcl9jYXRlZ29yeQotICAgICAgPjo6dHlwZSBt
eV90cmF2ZXJzYWw7Ci0KLSMgZGVmaW5lIEJPT1NUX0lURVJBVE9SX0FEQVBUT1JfQVNTRVJUX1RS
QVZFUlNBTChjYXQpIFwKLSAgICAgIGJvb3N0OjppdGVyYXRvcnM6OmRldGFpbDo6aXRlcmF0b3Jf
YWRhcHRvcl9hc3NlcnRfdHJhdmVyc2FsPG15X3RyYXZlcnNhbCwgY2F0PigpOwotCi0gICAgICB2
b2lkIGFkdmFuY2UodHlwZW5hbWUgc3VwZXJfdDo6ZGlmZmVyZW5jZV90eXBlIG4pCi0gICAgICB7
Ci0gICAgICAgICAgQk9PU1RfSVRFUkFUT1JfQURBUFRPUl9BU1NFUlRfVFJBVkVSU0FMKHJhbmRv
bV9hY2Nlc3NfdHJhdmVyc2FsX3RhZykKLSAgICAgICAgICBtX2l0ZXJhdG9yICs9IG47Ci0gICAg
ICB9Ci0KLSAgICAgIHZvaWQgaW5jcmVtZW50KCkgeyArK21faXRlcmF0b3I7IH0KLQotICAgICAg
dm9pZCBkZWNyZW1lbnQoKQotICAgICAgewotICAgICAgICAgIEJPT1NUX0lURVJBVE9SX0FEQVBU
T1JfQVNTRVJUX1RSQVZFUlNBTChiaWRpcmVjdGlvbmFsX3RyYXZlcnNhbF90YWcpCi0gICAgICAg
ICAgIC0tbV9pdGVyYXRvcjsKLSAgICAgIH0KLQotICAgICAgdGVtcGxhdGUgPAotICAgICAgICAg
IGNsYXNzIE90aGVyRGVyaXZlZCwgY2xhc3MgT3RoZXJJdGVyYXRvciwgY2xhc3MgViwgY2xhc3Mg
QywgY2xhc3MgUiwgY2xhc3MgRAotICAgICAgPgotICAgICAgdHlwZW5hbWUgc3VwZXJfdDo6ZGlm
ZmVyZW5jZV90eXBlIGRpc3RhbmNlX3RvKAotICAgICAgICAgIGl0ZXJhdG9yX2FkYXB0b3I8T3Ro
ZXJEZXJpdmVkLCBPdGhlckl0ZXJhdG9yLCBWLCBDLCBSLCBEPiBjb25zdCYgeSkgY29uc3QKLSAg
ICAgIHsKLSAgICAgICAgICBCT09TVF9JVEVSQVRPUl9BREFQVE9SX0FTU0VSVF9UUkFWRVJTQUwo
cmFuZG9tX2FjY2Vzc190cmF2ZXJzYWxfdGFnKQotICAgICAgICAgIC8vIE1heWJlIHJlYWRkIHdp
dGggc2FtZV9kaXN0YW5jZQotICAgICAgICAgIC8vICAgICAgICAgICBCT09TVF9TVEFUSUNfQVNT
RVJUKAotICAgICAgICAgIC8vICAgICAgICAgICAgICAgKGRldGFpbDo6c2FtZV9jYXRlZ29yeV9h
bmRfZGlmZmVyZW5jZTxEZXJpdmVkLE90aGVyRGVyaXZlZD46OnZhbHVlKQotICAgICAgICAgIC8v
ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICByZXR1cm4geS5iYXNlKCkgLSBtX2l0ZXJhdG9y
OwotICAgICAgfQotCi0jIHVuZGVmIEJPT1NUX0lURVJBVE9SX0FEQVBUT1JfQVNTRVJUX1RSQVZF
UlNBTAotCi0gICBwcml2YXRlOiAvLyBkYXRhIG1lbWJlcnMKLSAgICAgIEJhc2UgbV9pdGVyYXRv
cjsKLSAgfTsKLQotfSAvLyBuYW1lc3BhY2UgaXRlcmF0b3JzCi0KLXVzaW5nIGl0ZXJhdG9yczo6
aXRlcmF0b3JfYWRhcHRvcjsKLXVzaW5nIGl0ZXJhdG9yczo6ZW5hYmxlX2lmX2NvbnZlcnRpYmxl
OwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jaW5jbHVkZSA8Ym9vc3QvaXRlcmF0b3IvZGV0
YWlsL2NvbmZpZ191bmRlZi5ocHA+Ci0KLSNlbmRpZiAvLyBCT09TVF9JVEVSQVRPUl9BREFQVE9S
XzIzMDIyMDAzVEhXX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvaXRlcmF0b3IvaXRlcmF0b3JfY2F0ZWdvcmllcy5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pdGVyYXRvci9pdGVyYXRvcl9jYXRl
Z29yaWVzLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEyMDJjOTkzYWNkY2Zk
ZDEzZjk0NDMwZWI2MjBhNWM2MDlkOWI5NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9pdGVyYXRvci9pdGVyYXRvcl9jYXRlZ29yaWVzLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIx
NSArMCwwIEBACi0vLyAoQykgQ29weXJpZ2h0IEplcmVteSBTaWVrIDIwMDIuCi0vLyBEaXN0cmli
dXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUK
LS8vIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpZm5kZWYgQk9PU1RfSVRFUkFU
T1JfQ0FURUdPUklFU19IUFAKLSMgZGVmaW5lIEJPT1NUX0lURVJBVE9SX0NBVEVHT1JJRVNfSFBQ
Ci0KLSMgaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvZGV0YWls
L2l0ZXJhdG9yLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvaXRlcmF0b3IvZGV0YWlsL2NvbmZpZ19k
ZWYuaHBwPgotCi0jIGluY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQotIyBp
bmNsdWRlIDxib29zdC9tcGwvZXZhbF9pZi5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L21wbC9pZGVu
dGl0eS5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L21wbC9wbGFjZWhvbGRlcnMuaHBwPgotIyBpbmNs
dWRlIDxib29zdC9tcGwvYXV4Xy9sYW1iZGFfc3VwcG9ydC5ocHA+Ci0KLSMgaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvaXNfY29udmVydGlibGUuaHBwPgotCi0jIGluY2x1ZGUgPGJvb3N0L3N0
YXRpY19hc3NlcnQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIGl0ZXJhdG9y
cyB7Ci0KLS8vCi0vLyBUcmF2ZXJzYWwgQ2F0ZWdvcmllcwotLy8KLQotc3RydWN0IG5vX3RyYXZl
cnNhbF90YWcge307Ci0KLXN0cnVjdCBpbmNyZW1lbnRhYmxlX3RyYXZlcnNhbF90YWcKLSAgOiBu
b190cmF2ZXJzYWxfdGFnCi17Ci0vLyAgICAgaW5jcmVtZW50YWJsZV90cmF2ZXJzYWxfdGFnKCkg
e30KLS8vICAgICBpbmNyZW1lbnRhYmxlX3RyYXZlcnNhbF90YWcoc3RkOjpvdXRwdXRfaXRlcmF0
b3JfdGFnIGNvbnN0Jikge307Ci19OwotCi1zdHJ1Y3Qgc2luZ2xlX3Bhc3NfdHJhdmVyc2FsX3Rh
ZwotICA6IGluY3JlbWVudGFibGVfdHJhdmVyc2FsX3RhZwotewotLy8gICAgIHNpbmdsZV9wYXNz
X3RyYXZlcnNhbF90YWcoKSB7fQotLy8gICAgIHNpbmdsZV9wYXNzX3RyYXZlcnNhbF90YWcoc3Rk
OjppbnB1dF9pdGVyYXRvcl90YWcgY29uc3QmKSB7fTsKLX07Ci0KLXN0cnVjdCBmb3J3YXJkX3Ry
YXZlcnNhbF90YWcKLSAgOiBzaW5nbGVfcGFzc190cmF2ZXJzYWxfdGFnCi17Ci0vLyAgICAgZm9y
d2FyZF90cmF2ZXJzYWxfdGFnKCkge30KLS8vICAgICBmb3J3YXJkX3RyYXZlcnNhbF90YWcoc3Rk
Ojpmb3J3YXJkX2l0ZXJhdG9yX3RhZyBjb25zdCYpIHt9OwotfTsKLQotc3RydWN0IGJpZGlyZWN0
aW9uYWxfdHJhdmVyc2FsX3RhZwotICA6IGZvcndhcmRfdHJhdmVyc2FsX3RhZwotewotLy8gICAg
IGJpZGlyZWN0aW9uYWxfdHJhdmVyc2FsX3RhZygpIHt9OwotLy8gICAgIGJpZGlyZWN0aW9uYWxf
dHJhdmVyc2FsX3RhZyhzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGNvbnN0Jikge307
Ci19OwotCi1zdHJ1Y3QgcmFuZG9tX2FjY2Vzc190cmF2ZXJzYWxfdGFnCi0gIDogYmlkaXJlY3Rp
b25hbF90cmF2ZXJzYWxfdGFnCi17Ci0vLyAgICAgcmFuZG9tX2FjY2Vzc190cmF2ZXJzYWxfdGFn
KCkge307Ci0vLyAgICAgcmFuZG9tX2FjY2Vzc190cmF2ZXJzYWxfdGFnKHN0ZDo6cmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcl90YWcgY29uc3QmKSB7fTsKLX07Ci0KLW5hbWVzcGFjZSBkZXRhaWwKLXsK
LSAgLy8KLSAgLy8gQ29udmVydCBhICJzdHJpY3RseSBvbGQtc3R5bGUiIGl0ZXJhdG9yIGNhdGVn
b3J5IHRvIGEgdHJhdmVyc2FsCi0gIC8vIHRhZy4gIFRoaXMgaXMgYnJva2VuIG91dCBpbnRvIGEg
c2VwYXJhdGUgbWV0YWZ1bmN0aW9uIHRvIHJlZHVjZQotICAvLyB0aGUgY29zdCBvZiBpbnN0YW50
aWF0aW5nIGl0ZXJhdG9yX2NhdGVnb3J5X3RvX3RyYXZlcnNhbCwgYmVsb3csCi0gIC8vIGZvciBu
ZXctc3R5bGUgdHlwZXMuCi0gIC8vCi0gIHRlbXBsYXRlIDxjbGFzcyBDYXQ+Ci0gIHN0cnVjdCBv
bGRfY2F0ZWdvcnlfdG9fdHJhdmVyc2FsCi0gICAgOiBtcGw6OmV2YWxfaWY8Ci0gICAgICAgICAg
aXNfY29udmVydGlibGU8Q2F0LHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWc+Ci0gICAg
ICAgICwgbXBsOjppZGVudGl0eTxyYW5kb21fYWNjZXNzX3RyYXZlcnNhbF90YWc+Ci0gICAgICAg
ICwgbXBsOjpldmFsX2lmPAotICAgICAgICAgICAgICBpc19jb252ZXJ0aWJsZTxDYXQsc3RkOjpi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZz4KLSAgICAgICAgICAgICwgbXBsOjppZGVudGl0eTxi
aWRpcmVjdGlvbmFsX3RyYXZlcnNhbF90YWc+Ci0gICAgICAgICAgICAsIG1wbDo6ZXZhbF9pZjwK
LSAgICAgICAgICAgICAgICAgIGlzX2NvbnZlcnRpYmxlPENhdCxzdGQ6OmZvcndhcmRfaXRlcmF0
b3JfdGFnPgotICAgICAgICAgICAgICAgICwgbXBsOjppZGVudGl0eTxmb3J3YXJkX3RyYXZlcnNh
bF90YWc+Ci0gICAgICAgICAgICAgICAgLCBtcGw6OmV2YWxfaWY8Ci0gICAgICAgICAgICAgICAg
ICAgICAgaXNfY29udmVydGlibGU8Q2F0LHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnPgotICAgICAg
ICAgICAgICAgICAgICAsIG1wbDo6aWRlbnRpdHk8c2luZ2xlX3Bhc3NfdHJhdmVyc2FsX3RhZz4K
LSAgICAgICAgICAgICAgICAgICAgLCBtcGw6OmV2YWxfaWY8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGlzX2NvbnZlcnRpYmxlPENhdCxzdGQ6Om91dHB1dF9pdGVyYXRvcl90YWc+Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAsIG1wbDo6aWRlbnRpdHk8aW5jcmVtZW50YWJsZV90cmF2ZXJz
YWxfdGFnPgotICAgICAgICAgICAgICAgICAgICAgICAgLCB2b2lkCi0gICAgICAgICAgICAgICAg
ICAgICAgPgotICAgICAgICAgICAgICAgICAgPgotICAgICAgICAgICAgICA+Ci0gICAgICAgICAg
PgotICAgICAgPgotICB7fTsKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLS8vCi0vLyBDb252
ZXJ0IGFuIGl0ZXJhdG9yIGNhdGVnb3J5IGludG8gYSB0cmF2ZXJzYWwgdGFnCi0vLwotdGVtcGxh
dGUgPGNsYXNzIENhdD4KLXN0cnVjdCBpdGVyYXRvcl9jYXRlZ29yeV90b190cmF2ZXJzYWwKLSAg
OiBtcGw6OmV2YWxfaWY8IC8vIGlmIGFscmVhZHkgY29udmVydGlibGUgdG8gYSB0cmF2ZXJzYWwg
dGFnLCB3ZSdyZSBkb25lLgotICAgICAgICBpc19jb252ZXJ0aWJsZTxDYXQsaW5jcmVtZW50YWJs
ZV90cmF2ZXJzYWxfdGFnPgotICAgICAgLCBtcGw6OmlkZW50aXR5PENhdD4KLSAgICAgICwgYm9v
c3Q6Oml0ZXJhdG9yczo6ZGV0YWlsOjpvbGRfY2F0ZWdvcnlfdG9fdHJhdmVyc2FsPENhdD4KLSAg
ICA+Ci17fTsKLQotLy8gVHJhaXQgdG8gZ2V0IGFuIGl0ZXJhdG9yJ3MgdHJhdmVyc2FsIGNhdGVn
b3J5Ci10ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3IgPSBtcGw6Ol8xPgotc3RydWN0IGl0ZXJhdG9y
X3RyYXZlcnNhbAotICA6IGl0ZXJhdG9yX2NhdGVnb3J5X3RvX3RyYXZlcnNhbDwKLSAgICAgICAg
dHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6aXRlcmF0
b3JfY2F0ZWdvcnkKLSAgICA+Ci17fTsKLQotIyBpZmRlZiBCT09TVF9NUExfQ0ZHX05PX0ZVTExf
TEFNQkRBX1NVUFBPUlQKLS8vIEhhY2sgYmVjYXVzZSBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQ
T1JUIGRvZXNuJ3Qgc2VlbSB0byB3b3JrCi0vLyBvdXQgd2VsbC4gIEluc3RhbnRpYXRpbmcgdGhl
IG5lc3RlZCBhcHBseSB0ZW1wbGF0ZSBhbHNvCi0vLyByZXF1aXJlcyBpbnN0YW50aWF0aW5nIGl0
ZXJhdG9yX3RyYWl0cyBvbiB0aGUKLS8vIHBsYWNlaG9sZGVyLiBJbnN0ZWFkIHdlIGp1c3Qgc3Bl
Y2lhbGl6ZSBpdCBhcyBhIG1ldGFmdW5jdGlvbgotLy8gY2xhc3MuCi10ZW1wbGF0ZSA8Pgotc3Ry
dWN0IGl0ZXJhdG9yX3RyYXZlcnNhbDxtcGw6Ol8xPgotewotICAgIHRlbXBsYXRlIDxjbGFzcyBU
PgotICAgIHN0cnVjdCBhcHBseSA6IGl0ZXJhdG9yX3RyYXZlcnNhbDxUPgotICAgIHt9OwotfTsK
LXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaXRlcmF0b3JfdHJhdmVyc2FsPG1wbDo6Xz4KLSAgOiBpdGVy
YXRvcl90cmF2ZXJzYWw8bXBsOjpfMT4KLXt9OwotIyBlbmRpZgotCi0vLwotLy8gQ29udmVydCBh
biBpdGVyYXRvciB0cmF2ZXJzYWwgdG8gb25lIG9mIHRoZSB0cmF2ZXJzYWwgdGFncy4KLS8vCi10
ZW1wbGF0ZSA8Y2xhc3MgVHJhdmVyc2FsPgotc3RydWN0IHB1cmVfdHJhdmVyc2FsX3RhZwotICA6
IG1wbDo6ZXZhbF9pZjwKLSAgICAgICAgaXNfY29udmVydGlibGU8VHJhdmVyc2FsLHJhbmRvbV9h
Y2Nlc3NfdHJhdmVyc2FsX3RhZz4KLSAgICAgICwgbXBsOjppZGVudGl0eTxyYW5kb21fYWNjZXNz
X3RyYXZlcnNhbF90YWc+Ci0gICAgICAsIG1wbDo6ZXZhbF9pZjwKLSAgICAgICAgICAgIGlzX2Nv
bnZlcnRpYmxlPFRyYXZlcnNhbCxiaWRpcmVjdGlvbmFsX3RyYXZlcnNhbF90YWc+Ci0gICAgICAg
ICAgLCBtcGw6OmlkZW50aXR5PGJpZGlyZWN0aW9uYWxfdHJhdmVyc2FsX3RhZz4KLSAgICAgICAg
ICAsIG1wbDo6ZXZhbF9pZjwKLSAgICAgICAgICAgICAgICBpc19jb252ZXJ0aWJsZTxUcmF2ZXJz
YWwsZm9yd2FyZF90cmF2ZXJzYWxfdGFnPgotICAgICAgICAgICAgICAsIG1wbDo6aWRlbnRpdHk8
Zm9yd2FyZF90cmF2ZXJzYWxfdGFnPgotICAgICAgICAgICAgICAsIG1wbDo6ZXZhbF9pZjwKLSAg
ICAgICAgICAgICAgICAgICAgaXNfY29udmVydGlibGU8VHJhdmVyc2FsLHNpbmdsZV9wYXNzX3Ry
YXZlcnNhbF90YWc+Ci0gICAgICAgICAgICAgICAgICAsIG1wbDo6aWRlbnRpdHk8c2luZ2xlX3Bh
c3NfdHJhdmVyc2FsX3RhZz4KLSAgICAgICAgICAgICAgICAgICwgbXBsOjpldmFsX2lmPAotICAg
ICAgICAgICAgICAgICAgICAgICAgaXNfY29udmVydGlibGU8VHJhdmVyc2FsLGluY3JlbWVudGFi
bGVfdHJhdmVyc2FsX3RhZz4KLSAgICAgICAgICAgICAgICAgICAgICAsIG1wbDo6aWRlbnRpdHk8
aW5jcmVtZW50YWJsZV90cmF2ZXJzYWxfdGFnPgotICAgICAgICAgICAgICAgICAgICAgICwgdm9p
ZAotICAgICAgICAgICAgICAgICAgICA+Ci0gICAgICAgICAgICAgICAgPgotICAgICAgICAgICAg
PgotICAgICAgICA+Ci0gICAgPgotewotfTsKLQotLy8KLS8vIFRyYWl0IHRvIHJldHJpZXZlIG9u
ZSBvZiB0aGUgaXRlcmF0b3IgdHJhdmVyc2FsIHRhZ3MgZnJvbSB0aGUgaXRlcmF0b3IgY2F0ZWdv
cnkgb3IgdHJhdmVyc2FsLgotLy8KLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciA9IG1wbDo6XzE+
Ci1zdHJ1Y3QgcHVyZV9pdGVyYXRvcl90cmF2ZXJzYWwKLSAgOiBwdXJlX3RyYXZlcnNhbF90YWc8
dHlwZW5hbWUgaXRlcmF0b3JfdHJhdmVyc2FsPEl0ZXJhdG9yPjo6dHlwZT4KLXt9OwotCi0jIGlm
ZGVmIEJPT1NUX01QTF9DRkdfTk9fRlVMTF9MQU1CREFfU1VQUE9SVAotdGVtcGxhdGUgPD4KLXN0
cnVjdCBwdXJlX2l0ZXJhdG9yX3RyYXZlcnNhbDxtcGw6Ol8xPgotewotICAgIHRlbXBsYXRlIDxj
bGFzcyBUPgotICAgIHN0cnVjdCBhcHBseSA6IHB1cmVfaXRlcmF0b3JfdHJhdmVyc2FsPFQ+Ci0g
ICAge307Ci19OwotdGVtcGxhdGUgPD4KLXN0cnVjdCBwdXJlX2l0ZXJhdG9yX3RyYXZlcnNhbDxt
cGw6Ol8+Ci0gIDogcHVyZV9pdGVyYXRvcl90cmF2ZXJzYWw8bXBsOjpfMT4KLXt9OwotIyBlbmRp
ZgotCi19IC8vIG5hbWVzcGFjZSBpdGVyYXRvcnMKLQotdXNpbmcgaXRlcmF0b3JzOjpub190cmF2
ZXJzYWxfdGFnOwotdXNpbmcgaXRlcmF0b3JzOjppbmNyZW1lbnRhYmxlX3RyYXZlcnNhbF90YWc7
Ci11c2luZyBpdGVyYXRvcnM6OnNpbmdsZV9wYXNzX3RyYXZlcnNhbF90YWc7Ci11c2luZyBpdGVy
YXRvcnM6OmZvcndhcmRfdHJhdmVyc2FsX3RhZzsKLXVzaW5nIGl0ZXJhdG9yczo6YmlkaXJlY3Rp
b25hbF90cmF2ZXJzYWxfdGFnOwotdXNpbmcgaXRlcmF0b3JzOjpyYW5kb21fYWNjZXNzX3RyYXZl
cnNhbF90YWc7Ci11c2luZyBpdGVyYXRvcnM6Oml0ZXJhdG9yX2NhdGVnb3J5X3RvX3RyYXZlcnNh
bDsKLXVzaW5nIGl0ZXJhdG9yczo6aXRlcmF0b3JfdHJhdmVyc2FsOwotCi0vLyBUaGlzIGltcG9y
dCBpcyBuZWVkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBCb29zdC5SYW5nZToK
LS8vIGJvb3N0L3JhbmdlL2RldGFpbC9kZW1vdGVfaXRlcmF0b3JfdHJhdmVyc2FsX3RhZy5ocHAK
LS8vIEl0IHNob3VsZCBiZSByZW1vdmVkIHdoZW4gdGhhdCBoZWFkZXIgaXMgZml4ZWQuCi1uYW1l
c3BhY2UgZGV0YWlsIHsKLXVzaW5nIGl0ZXJhdG9yczo6cHVyZV90cmF2ZXJzYWxfdGFnOwotfSAv
LyBuYW1lc3BhY2UgZGV0YWlsCi0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNpbmNsdWRlIDxi
b29zdC9pdGVyYXRvci9kZXRhaWwvY29uZmlnX3VuZGVmLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NU
X0lURVJBVE9SX0NBVEVHT1JJRVNfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9pdGVyYXRvci9pdGVyYXRvcl9jb25jZXB0cy5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pdGVyYXRvci9pdGVyYXRv
cl9jb25jZXB0cy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhOWY3ZDYzOTg2
NDZmOTg1MTk2NzRkNGViYzQ5NTBiYTIxMTMwZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvaXRlcmF0b3IvaXRlcmF0b3JfY29uY2VwdHMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEs
Mjc1ICswLDAgQEAKLS8vIChDKSBDb3B5cmlnaHQgSmVyZW15IFNpZWsgMjAwMi4KLS8vIERpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNl
ZQotLy8gYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vIGh0
dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2lmbmRlZiBCT09TVF9JVEVS
QVRPUl9DT05DRVBUU19IUFAKLSNkZWZpbmUgQk9PU1RfSVRFUkFUT1JfQ09OQ0VQVFNfSFBQCi0K
LSNpbmNsdWRlIDxib29zdC9jb25jZXB0X2NoZWNrLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pdGVy
YXRvci9pdGVyYXRvcl9jYXRlZ29yaWVzLmhwcD4KLQotLy8gVXNlIGJvb3N0OjpkZXRhaWw6Oml0
ZXJhdG9yX3RyYWl0cyB0byB3b3JrIGFyb3VuZCBzb21lIE1TVkMvRGlua3Vtd2FyZSBwcm9ibGVt
cy4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvaXRlcmF0b3IuaHBwPgotCi0jaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
aXNfaW50ZWdyYWwuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2Jvb2wuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21wbC9pZi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2FuZC5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvbXBsL29yLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3N0YXRpY19hc3NlcnQu
aHBwPgotCi0vLyBVc2UgYm9vc3QvbGltaXRzIHRvIHdvcmsgYXJvdW5kIG1pc3NpbmcgbGltaXRz
IGhlYWRlcnMgb24gc29tZSBjb21waWxlcnMKLSNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNp
bmNsdWRlIDxib29zdC9jb25jZXB0L2RldGFpbC9jb25jZXB0X2RlZi5ocHA+Ci0KLW5hbWVzcGFj
ZSBib29zdF9jb25jZXB0cwotewotICAvLyBVc2VkIGEgZGlmZmVyZW50IG5hbWVzcGFjZSBoZXJl
IChpbnN0ZWFkIG9mICJib29zdCIpIHNvIHRoYXQgdGhlCi0gIC8vIGNvbmNlcHQgZGVzY3JpcHRp
b25zIGRvIG5vdCB0YWtlIGZvciBncmFudGVkIHRoZSBuYW1lcyBpbgotICAvLyBuYW1lc3BhY2Ug
Ym9vc3QuCi0KLSAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSXRlcmF0b3IgQWNjZXNzIENv
bmNlcHRzCi0KLSAgQk9PU1RfY29uY2VwdChSZWFkYWJsZUl0ZXJhdG9yLChJdGVyYXRvcikpCi0g
ICAgOiBib29zdDo6QXNzaWduYWJsZTxJdGVyYXRvcj4KLSAgICAsIGJvb3N0OjpDb3B5Q29uc3Ry
dWN0aWJsZTxJdGVyYXRvcj4KLQotICB7Ci0gICAgICB0eXBlZGVmIEJPT1NUX0RFRFVDRURfVFlQ
RU5BTUUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6dmFsdWVfdHlw
ZSB2YWx1ZV90eXBlOwotICAgICAgdHlwZWRlZiBCT09TVF9ERURVQ0VEX1RZUEVOQU1FIGJvb3N0
OjpkZXRhaWw6Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7
Ci0KLSAgICAgIEJPT1NUX0NPTkNFUFRfVVNBR0UoUmVhZGFibGVJdGVyYXRvcikKLSAgICAgIHsK
LQotICAgICAgICAgIHZhbHVlX3R5cGUgdiA9ICppOwotICAgICAgICAgIGJvb3N0OjppZ25vcmVf
dW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcodik7Ci0gICAgICB9Ci0gIHByaXZhdGU6Ci0gICAgICBJ
dGVyYXRvciBpOwotICB9OwotCi0gIHRlbXBsYXRlIDwKLSAgICAgIHR5cGVuYW1lIEl0ZXJhdG9y
Ci0gICAgLCB0eXBlbmFtZSBWYWx1ZVR5cGUgPSBCT09TVF9ERURVQ0VEX1RZUEVOQU1FIGJvb3N0
OjpkZXRhaWw6Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnZhbHVlX3R5cGUKLSAgPgotICBz
dHJ1Y3QgV3JpdGFibGVJdGVyYXRvcgotICAgIDogYm9vc3Q6OkNvcHlDb25zdHJ1Y3RpYmxlPEl0
ZXJhdG9yPgotICB7Ci0gICAgICBCT09TVF9DT05DRVBUX1VTQUdFKFdyaXRhYmxlSXRlcmF0b3Ip
Ci0gICAgICB7Ci0gICAgICAgICAgKmkgPSB2OwotICAgICAgfQotICBwcml2YXRlOgotICAgICAg
VmFsdWVUeXBlIHY7Ci0gICAgICBJdGVyYXRvciBpOwotICB9OwotCi0gIHRlbXBsYXRlIDwKLSAg
ICAgIHR5cGVuYW1lIEl0ZXJhdG9yCi0gICAgLCB0eXBlbmFtZSBWYWx1ZVR5cGUgPSBCT09TVF9E
RURVQ0VEX1RZUEVOQU1FIGJvb3N0OjpkZXRhaWw6Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46
OnZhbHVlX3R5cGUKLSAgPgotICBzdHJ1Y3QgV3JpdGFibGVJdGVyYXRvckNvbmNlcHQgOiBXcml0
YWJsZUl0ZXJhdG9yPEl0ZXJhdG9yLFZhbHVlVHlwZT4ge307Ci0KLSAgQk9PU1RfY29uY2VwdChT
d2FwcGFibGVJdGVyYXRvciwoSXRlcmF0b3IpKQotICB7Ci0gICAgICBCT09TVF9DT05DRVBUX1VT
QUdFKFN3YXBwYWJsZUl0ZXJhdG9yKQotICAgICAgewotICAgICAgICAgIHN0ZDo6aXRlcl9zd2Fw
KGkxLCBpMik7Ci0gICAgICB9Ci0gIHByaXZhdGU6Ci0gICAgICBJdGVyYXRvciBpMTsKLSAgICAg
IEl0ZXJhdG9yIGkyOwotICB9OwotCi0gIEJPT1NUX2NvbmNlcHQoTHZhbHVlSXRlcmF0b3IsKEl0
ZXJhdG9yKSkKLSAgewotICAgICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjppdGVy
YXRvcl90cmFpdHM8SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7Ci0KLSAgICAgIEJP
T1NUX0NPTkNFUFRfVVNBR0UoTHZhbHVlSXRlcmF0b3IpCi0gICAgICB7Ci0gICAgICAgIHZhbHVl
X3R5cGUmIHIgPSBjb25zdF9jYXN0PHZhbHVlX3R5cGUmPigqaSk7Ci0gICAgICAgIGJvb3N0Ojpp
Z25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcocik7Ci0gICAgICB9Ci0gIHByaXZhdGU6Ci0g
ICAgICBJdGVyYXRvciBpOwotICB9OwotCi0KLSAgLy89PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8g
SXRlcmF0b3IgVHJhdmVyc2FsIENvbmNlcHRzCi0KLSAgQk9PU1RfY29uY2VwdChJbmNyZW1lbnRh
YmxlSXRlcmF0b3IsKEl0ZXJhdG9yKSkKLSAgICA6IGJvb3N0OjpBc3NpZ25hYmxlPEl0ZXJhdG9y
PgotICAgICwgYm9vc3Q6OkNvcHlDb25zdHJ1Y3RpYmxlPEl0ZXJhdG9yPgotICB7Ci0gICAgICB0
eXBlZGVmIHR5cGVuYW1lIGJvb3N0OjppdGVyYXRvcl90cmF2ZXJzYWw8SXRlcmF0b3I+Ojp0eXBl
IHRyYXZlcnNhbF9jYXRlZ29yeTsKLQotICAgICAgQk9PU1RfQ09OQ0VQVF9BU1NFUlQoKAotICAg
ICAgICBib29zdDo6Q29udmVydGlibGU8Ci0gICAgICAgICAgICB0cmF2ZXJzYWxfY2F0ZWdvcnkK
LSAgICAgICAgICAsIGJvb3N0OjppbmNyZW1lbnRhYmxlX3RyYXZlcnNhbF90YWcKLSAgICAgICAg
PikpOwotCi0gICAgICBCT09TVF9DT05DRVBUX1VTQUdFKEluY3JlbWVudGFibGVJdGVyYXRvcikK
LSAgICAgIHsKLSAgICAgICAgICArK2k7Ci0gICAgICAgICAgKHZvaWQpaSsrOwotICAgICAgfQot
ICBwcml2YXRlOgotICAgICAgSXRlcmF0b3IgaTsKLSAgfTsKLQotICBCT09TVF9jb25jZXB0KFNp
bmdsZVBhc3NJdGVyYXRvciwoSXRlcmF0b3IpKQotICAgIDogSW5jcmVtZW50YWJsZUl0ZXJhdG9y
PEl0ZXJhdG9yPgotICAgICwgYm9vc3Q6OkVxdWFsaXR5Q29tcGFyYWJsZTxJdGVyYXRvcj4KLQot
ICB7Ci0gICAgICBCT09TVF9DT05DRVBUX0FTU0VSVCgoCi0gICAgICAgICAgYm9vc3Q6OkNvbnZl
cnRpYmxlPAotICAgICAgICAgICAgIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgU2luZ2xlUGFzc0l0
ZXJhdG9yOjp0cmF2ZXJzYWxfY2F0ZWdvcnkKLSAgICAgICAgICAgLCBib29zdDo6c2luZ2xlX3Bh
c3NfdHJhdmVyc2FsX3RhZwotICAgICAgICAgID4gKSk7Ci0gIH07Ci0KLSAgQk9PU1RfY29uY2Vw
dChGb3J3YXJkVHJhdmVyc2FsLChJdGVyYXRvcikpCi0gICAgOiBTaW5nbGVQYXNzSXRlcmF0b3I8
SXRlcmF0b3I+Ci0gICAgLCBib29zdDo6RGVmYXVsdENvbnN0cnVjdGlibGU8SXRlcmF0b3I+Ci0g
IHsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRz
PEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKLQotICAgICAgQk9P
U1RfTVBMX0FTU0VSVCgoYm9vc3Q6OmlzX2ludGVncmFsPGRpZmZlcmVuY2VfdHlwZT4pKTsKLSAg
ICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oc3RkOjpudW1lcmljX2xpbWl0czxkaWZmZXJl
bmNlX3R5cGU+Ojppc19zaWduZWQsID09LCB0cnVlKTsKLQotICAgICAgQk9PU1RfQ09OQ0VQVF9B
U1NFUlQoKAotICAgICAgICAgIGJvb3N0OjpDb252ZXJ0aWJsZTwKLSAgICAgICAgICAgICBCT09T
VF9ERURVQ0VEX1RZUEVOQU1FIEZvcndhcmRUcmF2ZXJzYWw6OnRyYXZlcnNhbF9jYXRlZ29yeQot
ICAgICAgICAgICAsIGJvb3N0Ojpmb3J3YXJkX3RyYXZlcnNhbF90YWcKLSAgICAgICAgICA+ICkp
OwotICB9OwotCi0gIEJPT1NUX2NvbmNlcHQoQmlkaXJlY3Rpb25hbFRyYXZlcnNhbCwoSXRlcmF0
b3IpKQotICAgIDogRm9yd2FyZFRyYXZlcnNhbDxJdGVyYXRvcj4KLSAgewotICAgICAgQk9PU1Rf
Q09OQ0VQVF9BU1NFUlQoKAotICAgICAgICAgIGJvb3N0OjpDb252ZXJ0aWJsZTwKLSAgICAgICAg
ICAgICBCT09TVF9ERURVQ0VEX1RZUEVOQU1FIEJpZGlyZWN0aW9uYWxUcmF2ZXJzYWw6OnRyYXZl
cnNhbF9jYXRlZ29yeQotICAgICAgICAgICAsIGJvb3N0OjpiaWRpcmVjdGlvbmFsX3RyYXZlcnNh
bF90YWcKLSAgICAgICAgICA+ICkpOwotCi0gICAgICBCT09TVF9DT05DRVBUX1VTQUdFKEJpZGly
ZWN0aW9uYWxUcmF2ZXJzYWwpCi0gICAgICB7Ci0gICAgICAgICAgLS1pOwotICAgICAgICAgICh2
b2lkKWktLTsKLSAgICAgIH0KLSAgIHByaXZhdGU6Ci0gICAgICBJdGVyYXRvciBpOwotICB9Owot
Ci0gIEJPT1NUX2NvbmNlcHQoUmFuZG9tQWNjZXNzVHJhdmVyc2FsLChJdGVyYXRvcikpCi0gICAg
OiBCaWRpcmVjdGlvbmFsVHJhdmVyc2FsPEl0ZXJhdG9yPgotICB7Ci0gICAgICBCT09TVF9DT05D
RVBUX0FTU0VSVCgoCi0gICAgICAgICAgYm9vc3Q6OkNvbnZlcnRpYmxlPAotICAgICAgICAgICAg
IEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgUmFuZG9tQWNjZXNzVHJhdmVyc2FsOjp0cmF2ZXJzYWxf
Y2F0ZWdvcnkKLSAgICAgICAgICAgLCBib29zdDo6cmFuZG9tX2FjY2Vzc190cmF2ZXJzYWxfdGFn
Ci0gICAgICAgICAgPiApKTsKLQotICAgICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShSYW5kb21BY2Nl
c3NUcmF2ZXJzYWwpCi0gICAgICB7Ci0gICAgICAgICAgaSArPSBuOwotICAgICAgICAgIGkgPSBp
ICsgbjsKLSAgICAgICAgICBpID0gbiArIGk7Ci0gICAgICAgICAgaSAtPSBuOwotICAgICAgICAg
IGkgPSBpIC0gbjsKLSAgICAgICAgICBuID0gaSAtIGo7Ci0gICAgICB9Ci0KLSAgIHByaXZhdGU6
Ci0gICAgICB0eXBlbmFtZSBCaWRpcmVjdGlvbmFsVHJhdmVyc2FsPEl0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlIG47Ci0gICAgICBJdGVyYXRvciBpLCBqOwotICB9OwotCi0gIC8vPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0gIC8vIEl0ZXJhdG9yIEludGVyb3BlcmFiaWxpdHkKLQotICBuYW1lc3BhY2Ug
ZGV0YWlsCi0gIHsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcmF0b3IxLCB0eXBlbmFtZSBJ
dGVyYXRvcjI+Ci0gICAgdm9pZCBpbnRlcm9wX3NpbmdsZV9wYXNzX2NvbnN0cmFpbnRzKEl0ZXJh
dG9yMSBjb25zdCYgaTEsIEl0ZXJhdG9yMiBjb25zdCYgaTIpCi0gICAgewotICAgICAgICBib29s
IGI7Ci0gICAgICAgIGIgPSBpMSA9PSBpMjsKLSAgICAgICAgYiA9IGkxICE9IGkyOwotCi0gICAg
ICAgIGIgPSBpMiA9PSBpMTsKLSAgICAgICAgYiA9IGkyICE9IGkxOwotICAgICAgICBib29zdDo6
aWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKGIpOwotICAgIH0KLQotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBJdGVyYXRvcjEsIHR5cGVuYW1lIEl0ZXJhdG9yMj4KLSAgICB2b2lkIGludGVy
b3BfcmFuZF9hY2Nlc3NfY29uc3RyYWludHMoCi0gICAgICAgIEl0ZXJhdG9yMSBjb25zdCYgaTEs
IEl0ZXJhdG9yMiBjb25zdCYgaTIsCi0gICAgICAgIGJvb3N0OjpyYW5kb21fYWNjZXNzX3RyYXZl
cnNhbF90YWcsIGJvb3N0OjpyYW5kb21fYWNjZXNzX3RyYXZlcnNhbF90YWcpCi0gICAgewotICAg
ICAgICBib29sIGI7Ci0gICAgICAgIHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6Oml0ZXJhdG9yX3Ry
YWl0czxJdGVyYXRvcjI+OjpkaWZmZXJlbmNlX3R5cGUgbjsKLSAgICAgICAgYiA9IGkxIDwgIGky
OwotICAgICAgICBiID0gaTEgPD0gaTI7Ci0gICAgICAgIGIgPSBpMSA+ICBpMjsKLSAgICAgICAg
YiA9IGkxID49IGkyOwotICAgICAgICBuID0gaTEgLSAgaTI7Ci0KLSAgICAgICAgYiA9IGkyIDwg
IGkxOwotICAgICAgICBiID0gaTIgPD0gaTE7Ci0gICAgICAgIGIgPSBpMiA+ICBpMTsKLSAgICAg
ICAgYiA9IGkyID49IGkxOwotICAgICAgICBuID0gaTIgLSAgaTE7Ci0gICAgICAgIGJvb3N0Ojpp
Z25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoYik7Ci0gICAgICAgIGJvb3N0OjppZ25vcmVf
dW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcobik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEl0ZXJhdG9yMSwgdHlwZW5hbWUgSXRlcmF0b3IyPgotICAgIHZvaWQgaW50ZXJvcF9yYW5k
X2FjY2Vzc19jb25zdHJhaW50cygKLSAgICAgICAgSXRlcmF0b3IxIGNvbnN0JiwgSXRlcmF0b3Iy
IGNvbnN0JiwKLSAgICAgICAgYm9vc3Q6OnNpbmdsZV9wYXNzX3RyYXZlcnNhbF90YWcsIGJvb3N0
OjpzaW5nbGVfcGFzc190cmF2ZXJzYWxfdGFnKQotICAgIHsgfQotCi0gIH0gLy8gbmFtZXNwYWNl
IGRldGFpbAotCi0gIEJPT1NUX2NvbmNlcHQoSW50ZXJvcGVyYWJsZUl0ZXJhdG9yLChJdGVyYXRv
cikoQ29uc3RJdGVyYXRvcikpCi0gIHsKLSAgIHByaXZhdGU6Ci0gICAgICB0eXBlZGVmIHR5cGVu
YW1lIGJvb3N0OjppdGVyYXRvcnM6OnB1cmVfaXRlcmF0b3JfdHJhdmVyc2FsPEl0ZXJhdG9yPjo6
dHlwZSB0cmF2ZXJzYWxfY2F0ZWdvcnk7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0Ojpp
dGVyYXRvcnM6OnB1cmVfaXRlcmF0b3JfdHJhdmVyc2FsPENvbnN0SXRlcmF0b3I+Ojp0eXBlIGNv
bnN0X3RyYXZlcnNhbF9jYXRlZ29yeTsKLQotICAgcHVibGljOgotICAgICAgQk9PU1RfQ09OQ0VQ
VF9BU1NFUlQoKFNpbmdsZVBhc3NJdGVyYXRvcjxJdGVyYXRvcj4pKTsKLSAgICAgIEJPT1NUX0NP
TkNFUFRfQVNTRVJUKChTaW5nbGVQYXNzSXRlcmF0b3I8Q29uc3RJdGVyYXRvcj4pKTsKLQotICAg
ICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShJbnRlcm9wZXJhYmxlSXRlcmF0b3IpCi0gICAgICB7Ci0g
ICAgICAgICAgZGV0YWlsOjppbnRlcm9wX3NpbmdsZV9wYXNzX2NvbnN0cmFpbnRzKGksIGNpKTsK
LSAgICAgICAgICBkZXRhaWw6OmludGVyb3BfcmFuZF9hY2Nlc3NfY29uc3RyYWludHMoaSwgY2ks
IHRyYXZlcnNhbF9jYXRlZ29yeSgpLCBjb25zdF90cmF2ZXJzYWxfY2F0ZWdvcnkoKSk7Ci0KLSAg
ICAgICAgICBjaSA9IGk7Ci0gICAgICB9Ci0KLSAgIHByaXZhdGU6Ci0gICAgICBJdGVyYXRvciAg
ICAgIGk7Ci0gICAgICBDb25zdEl0ZXJhdG9yIGNpOwotICB9OwotCi19IC8vIG5hbWVzcGFjZSBi
b29zdF9jb25jZXB0cwotCi0jaW5jbHVkZSA8Ym9vc3QvY29uY2VwdC9kZXRhaWwvY29uY2VwdF91
bmRlZi5ocHA+Ci0KLSNlbmRpZiAvLyBCT09TVF9JVEVSQVRPUl9DT05DRVBUU19IUFAKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2l0ZXJhdG9y
L2l0ZXJhdG9yX2ZhY2FkZS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9pdGVyYXRvci9pdGVyYXRvcl9mYWNhZGUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3YjExZDBhZWMxZWMzY2ZjN2M2YzRlNGY2OTMyM2UyNTY3ZDA1ODM0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2l0ZXJhdG9yL2l0ZXJhdG9yX2ZhY2FkZS5ocHAK
KysrIC9kZXYvbnVsbApAQCAtMSw5ODAgKzAsMCBAQAotLy8gKEMpIENvcHlyaWdodCBEYXZpZCBB
YnJhaGFtcyAyMDAyLgotLy8gKEMpIENvcHlyaWdodCBKZXJlbXkgU2llayAgICAyMDAyLgotLy8g
KEMpIENvcHlyaWdodCBUaG9tYXMgV2l0dCAgICAyMDAyLgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0vLyBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotI2lmbmRlZiBCT09TVF9JVEVSQVRPUl9GQUNBREVfMjMw
MjIwMDNUSFdfSFBQCi0jZGVmaW5lIEJPT1NUX0lURVJBVE9SX0ZBQ0FERV8yMzAyMjAwM1RIV19I
UFAKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaXRlcmF0
b3IuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2l0ZXJhdG9yL2ludGVyb3BlcmFibGUuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L2l0ZXJhdG9yL2l0ZXJhdG9yX3RyYWl0cy5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvaXRlcmF0b3IvaXRlcmF0b3JfY2F0ZWdvcmllcy5ocHA+Ci0KLSNpbmNsdWRlIDxib29zdC9p
dGVyYXRvci9kZXRhaWwvZmFjYWRlX2l0ZXJhdG9yX2NhdGVnb3J5LmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9pdGVyYXRvci9kZXRhaWwvZW5hYmxlX2lmLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3N0
YXRpY19hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3V0aWxpdHkvYWRkcmVzc29mLmhwcD4K
LQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2FkZF9jb25zdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvYWRkX3BvaW50ZXIuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2FkZF9sdmFs
dWVfcmVmZXJlbmNlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY29u
c3QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9yZWZlcmVuY2UuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnZlcnRpYmxlLmhwcD4KLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19wb2QuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBs
L2V2YWxfaWYuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9pZi5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvbXBsL29yLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYW5kLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9tcGwvbm90LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYWx3YXlzLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9tcGwvYXBwbHkuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9pZGVudGl0eS5o
cHA+Ci0KLSNpbmNsdWRlIDxib29zdC9pdGVyYXRvci9kZXRhaWwvY29uZmlnX2RlZi5ocHA+IC8v
IHRoaXMgZ29lcyBsYXN0Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgaXRlcmF0b3Jz
IHsKLQotICAvLyBUaGlzIGZvcndhcmQgZGVjbGFyYXRpb24gaXMgcmVxdWlyZWQgZm9yIHRoZSBm
cmllbmQgZGVjbGFyYXRpb24KLSAgLy8gaW4gaXRlcmF0b3JfY29yZV9hY2Nlc3MKLSAgdGVtcGxh
dGUgPGNsYXNzIEksIGNsYXNzIFYsIGNsYXNzIFRDLCBjbGFzcyBSLCBjbGFzcyBEPiBjbGFzcyBp
dGVyYXRvcl9mYWNhZGU7Ci0KLSAgbmFtZXNwYWNlIGRldGFpbAotICB7Ci0gICAgLy8gQSBiaW5h
cnkgbWV0YWZ1bmN0aW9uIGNsYXNzIHRoYXQgYWx3YXlzIHJldHVybnMgYm9vbC4gIFZDNgotICAg
IC8vIElDRXMgb24gbXBsOjphbHdheXM8Ym9vbD4sIHByb2JhYmx5IGJlY2F1c2Ugb2YgdGhlIGRl
ZmF1bHQKLSAgICAvLyBwYXJhbWV0ZXJzLgotICAgIHN0cnVjdCBhbHdheXNfYm9vbDIKLSAgICB7
Ci0gICAgICAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgotICAgICAgICBzdHJ1Y3QgYXBw
bHkKLSAgICAgICAgewotICAgICAgICAgICAgdHlwZWRlZiBib29sIHR5cGU7Ci0gICAgICAgIH07
Ci0gICAgfTsKLQotICAgIC8vIFRoZSB0eXBlIHRyYWl0IGNoZWNrcyBpZiB0aGUgY2F0ZWdvcnkg
b3IgdHJhdmVyc2FsIGlzIGF0IGxlYXN0IGFzIGFkdmFuY2VkIGFzIHRoZSBzcGVjaWZpZWQgcmVx
dWlyZWQgdHJhdmVyc2FsCi0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIENhdGVnb3J5T3JUcmF2ZXJz
YWwsIHR5cGVuYW1lIFJlcXVpcmVkID4KLSAgICBzdHJ1Y3QgaXNfdHJhdmVyc2FsX2F0X2xlYXN0
IDoKLSAgICAgICAgcHVibGljIGJvb3N0Ojppc19jb252ZXJ0aWJsZTwgdHlwZW5hbWUgaXRlcmF0
b3JfY2F0ZWdvcnlfdG9fdHJhdmVyc2FsPCBDYXRlZ29yeU9yVHJhdmVyc2FsID46OnR5cGUsIFJl
cXVpcmVkID4KLSAgICB7fTsKLQotICAgIC8vCi0gICAgLy8gZW5hYmxlIGlmIGZvciB1c2UgaW4g
b3BlcmF0b3IgaW1wbGVtZW50YXRpb24uCi0gICAgLy8KLSAgICB0ZW1wbGF0ZSA8Ci0gICAgICAg
IGNsYXNzIEZhY2FkZTEKLSAgICAgICwgY2xhc3MgRmFjYWRlMgotICAgICAgLCBjbGFzcyBSZXR1
cm4KLSAgICA+Ci0gICAgc3RydWN0IGVuYWJsZV9pZl9pbnRlcm9wZXJhYmxlIDoKLSAgICAgICAg
cHVibGljIGJvb3N0OjppdGVyYXRvcnM6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgIGlzX2ludGVy
b3BlcmFibGU8IEZhY2FkZTEsIEZhY2FkZTIgPgotICAgICAgICAgICwgUmV0dXJuCi0gICAgICAg
ID4KLSAgICB7fTsKLQotICAgIC8vCi0gICAgLy8gZW5hYmxlIGlmIGZvciB1c2UgaW4gaW1wbGVt
ZW50YXRpb24gb2Ygb3BlcmF0b3JzIHNwZWNpZmljIGZvciByYW5kb20gYWNjZXNzIHRyYXZlcnNh
bC4KLSAgICAvLwotICAgIHRlbXBsYXRlIDwKLSAgICAgICAgY2xhc3MgRmFjYWRlMQotICAgICAg
LCBjbGFzcyBGYWNhZGUyCi0gICAgICAsIGNsYXNzIFJldHVybgotICAgID4KLSAgICBzdHJ1Y3Qg
ZW5hYmxlX2lmX2ludGVyb3BlcmFibGVfYW5kX3JhbmRvbV9hY2Nlc3NfdHJhdmVyc2FsIDoKLSAg
ICAgICAgcHVibGljIGJvb3N0OjppdGVyYXRvcnM6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgIG1w
bDo6YW5kXzwKLSAgICAgICAgICAgICAgICBpc19pbnRlcm9wZXJhYmxlPCBGYWNhZGUxLCBGYWNh
ZGUyID4KLSAgICAgICAgICAgICAgLCBpc190cmF2ZXJzYWxfYXRfbGVhc3Q8IHR5cGVuYW1lIGl0
ZXJhdG9yX2NhdGVnb3J5PCBGYWNhZGUxID46OnR5cGUsIHJhbmRvbV9hY2Nlc3NfdHJhdmVyc2Fs
X3RhZyA+Ci0gICAgICAgICAgICAgICwgaXNfdHJhdmVyc2FsX2F0X2xlYXN0PCB0eXBlbmFtZSBp
dGVyYXRvcl9jYXRlZ29yeTwgRmFjYWRlMiA+Ojp0eXBlLCByYW5kb21fYWNjZXNzX3RyYXZlcnNh
bF90YWcgPgotICAgICAgICAgICAgPgotICAgICAgICAgICwgUmV0dXJuCi0gICAgICAgID4KLSAg
ICB7fTsKLQotICAgIC8vCi0gICAgLy8gR2VuZXJhdGVzIGFzc29jaWF0ZWQgdHlwZXMgZm9yIGFu
IGl0ZXJhdG9yX2ZhY2FkZSB3aXRoIHRoZQotICAgIC8vIGdpdmVuIHBhcmFtZXRlcnMuCi0gICAg
Ly8KLSAgICB0ZW1wbGF0ZSA8Ci0gICAgICAgIGNsYXNzIFZhbHVlUGFyYW0KLSAgICAgICwgY2xh
c3MgQ2F0ZWdvcnlPclRyYXZlcnNhbAotICAgICAgLCBjbGFzcyBSZWZlcmVuY2UKLSAgICAgICwg
Y2xhc3MgRGlmZmVyZW5jZQotICAgID4KLSAgICBzdHJ1Y3QgaXRlcmF0b3JfZmFjYWRlX3R5cGVz
Ci0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGZhY2FkZV9pdGVyYXRvcl9jYXRlZ29y
eTwKLSAgICAgICAgICAgIENhdGVnb3J5T3JUcmF2ZXJzYWwsIFZhbHVlUGFyYW0sIFJlZmVyZW5j
ZQotICAgICAgICA+Ojp0eXBlIGl0ZXJhdG9yX2NhdGVnb3J5OwotCi0gICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgcmVtb3ZlX2NvbnN0PFZhbHVlUGFyYW0+Ojp0eXBlIHZhbHVlX3R5cGU7Ci0KLSAg
ICAgICAgLy8gTm90IHRoZSByZWFsIGFzc29jaWF0ZWQgcG9pbnRlciB0eXBlCi0gICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgbXBsOjpldmFsX2lmPAotICAgICAgICAgICAgYm9vc3Q6Oml0ZXJhdG9y
czo6ZGV0YWlsOjppdGVyYXRvcl93cml0YWJpbGl0eV9kaXNhYmxlZDxWYWx1ZVBhcmFtLFJlZmVy
ZW5jZT4KLSAgICAgICAgICAsIGFkZF9wb2ludGVyPGNvbnN0IHZhbHVlX3R5cGU+Ci0gICAgICAg
ICAgLCBhZGRfcG9pbnRlcjx2YWx1ZV90eXBlPgotICAgICAgICA+Ojp0eXBlIHBvaW50ZXI7Ci0K
LSMgaWYgZGVmaW5lZChCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICYmIChCT09TVF9XT1JLQVJPVU5EKF9TVExQ
T1JUX1ZFUlNJT04sIEJPT1NUX1RFU1RFRF9BVCgweDQ1MikpICAgICAgICAgICAgICBcCi0gICAg
ICAgIHx8IEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfRElOS1VNV0FSRV9TVERMSUIsIEJPT1NUX1RF
U1RFRF9BVCgzMTApKSkgICAgIFwKLSAgICB8fCBCT09TVF9XT1JLQVJPVU5EKEJPT1NUX1JXU1RE
X1ZFUiwgQk9PU1RfVEVTVEVEX0FUKDB4MjAxMDEpKSAgICAgICAgICAgICAgXAotICAgIHx8IEJP
T1NUX1dPUktBUk9VTkQoQk9PU1RfRElOS1VNV0FSRV9TVERMSUIsIDw9IDMxMCkKLQotICAgICAg
ICAvLyBUbyBpbnRlcm9wZXJhdGUgd2l0aCBzb21lIGJyb2tlbiBsaWJyYXJ5L2NvbXBpbGVyCi0g
ICAgICAgIC8vIGNvbWJpbmF0aW9ucywgdXNlci1kZWZpbmVkIGl0ZXJhdG9ycyBtdXN0IGJlIGRl
cml2ZWQgZnJvbQotICAgICAgICAvLyBzdGQ6Oml0ZXJhdG9yLiAgSXQgaXMgcG9zc2libGUgdG8g
aW1wbGVtZW50IGEgc3RhbmRhcmQKLSAgICAgICAgLy8gbGlicmFyeSBmb3IgYnJva2VuIGNvbXBp
bGVycyB3aXRob3V0IHRoaXMgbGltaXRhdGlvbi4KLSMgIGRlZmluZSBCT09TVF9JVEVSQVRPUl9G
QUNBREVfTkVFRFNfSVRFUkFUT1JfQkFTRSAxCi0KLSAgICAgICAgdHlwZWRlZgotICAgICAgICAg
ICBpdGVyYXRvcjxpdGVyYXRvcl9jYXRlZ29yeSwgdmFsdWVfdHlwZSwgRGlmZmVyZW5jZSwgcG9p
bnRlciwgUmVmZXJlbmNlPgotICAgICAgICBiYXNlOwotIyBlbmRpZgotICAgIH07Ci0KLSAgICAv
LyBpdGVyYXRvcnMgd2hvc2UgZGVyZWZlcmVuY2Ugb3BlcmF0b3JzIHJlZmVyZW5jZSB0aGUgc2Ft
ZSB2YWx1ZQotICAgIC8vIGZvciBhbGwgaXRlcmF0b3JzIGludG8gdGhlIHNhbWUgc2VxdWVuY2Ug
KGxpa2UgbWFueSBpbnB1dAotICAgIC8vIGl0ZXJhdG9ycykgbmVlZCBoZWxwIHdpdGggdGhlaXIg
cG9zdGZpeCArKzogdGhlIHJlZmVyZW5jZWQKLSAgICAvLyB2YWx1ZSBtdXN0IGJlIHJlYWQgYW5k
IHN0b3JlZCBhd2F5IGJlZm9yZSB0aGUgaW5jcmVtZW50IG9jY3VycwotICAgIC8vIHNvIHRoYXQg
KmErKyB5aWVsZHMgdGhlIG9yaWdpbmFsbHkgcmVmZXJlbmNlZCBlbGVtZW50IGFuZCBub3QKLSAg
ICAvLyB0aGUgbmV4dCBvbmUuCi0gICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yPgotICAgIGNs
YXNzIHBvc3RmaXhfaW5jcmVtZW50X3Byb3h5Ci0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3ZhbHVlPEl0ZXJhdG9yPjo6dHlwZSB2YWx1ZV90eXBlOwotICAgICBwdWJs
aWM6Ci0gICAgICAgIGV4cGxpY2l0IHBvc3RmaXhfaW5jcmVtZW50X3Byb3h5KEl0ZXJhdG9yIGNv
bnN0JiB4KQotICAgICAgICAgIDogc3RvcmVkX3ZhbHVlKCp4KQotICAgICAgICB7fQotCi0gICAg
ICAgIC8vIFJldHVybmluZyBhIG11dGFibGUgcmVmZXJlbmNlIGFsbG93cyBub25zZW5zZSBsaWtl
Ci0gICAgICAgIC8vICgqcisrKS5tdXRhdGUoKSwgYnV0IGl0IGltcG9zZXMgZmV3ZXIgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlCi0gICAgICAgIC8vIGJlaGF2aW9yIG9mIHRoZSB2YWx1ZV90eXBlLiAg
SW4gcGFydGljdWxhciwgcmVjYWxsIHRoYXQKLSAgICAgICAgLy8gKCpyKS5tdXRhdGUoKSBpcyBs
ZWdhbCBpZiBvcGVyYXRvciogcmV0dXJucyBieSB2YWx1ZS4KLSAgICAgICAgdmFsdWVfdHlwZSYK
LSAgICAgICAgb3BlcmF0b3IqKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IHRoaXMtPnN0b3JlZF92YWx1ZTsKLSAgICAgICAgfQotICAgICBwcml2YXRlOgotICAgICAgICBt
dXRhYmxlIHZhbHVlX3R5cGUgc3RvcmVkX3ZhbHVlOwotICAgIH07Ci0KLSAgICAvLwotICAgIC8v
IEluIGdlbmVyYWwsIHdlIGNhbid0IGRldGVybWluZSB0aGF0IHN1Y2ggYW4gaXRlcmF0b3IgaXNu
J3QKLSAgICAvLyB3cml0YWJsZSAtLSB3ZSBhbHNvIG5lZWQgdG8gc3RvcmUgYSBjb3B5IG9mIHRo
ZSBvbGQgaXRlcmF0b3Igc28KLSAgICAvLyB0aGF0IGl0IGNhbiBiZSB3cml0dGVuIGludG8uCi0g
ICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yPgotICAgIGNsYXNzIHdyaXRhYmxlX3Bvc3RmaXhf
aW5jcmVtZW50X3Byb3h5Ci0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3ZhbHVlPEl0ZXJhdG9yPjo6dHlwZSB2YWx1ZV90eXBlOwotICAgICBwdWJsaWM6Ci0gICAgICAg
IGV4cGxpY2l0IHdyaXRhYmxlX3Bvc3RmaXhfaW5jcmVtZW50X3Byb3h5KEl0ZXJhdG9yIGNvbnN0
JiB4KQotICAgICAgICAgIDogc3RvcmVkX3ZhbHVlKCp4KQotICAgICAgICAgICwgc3RvcmVkX2l0
ZXJhdG9yKHgpCi0gICAgICAgIHt9Ci0KLSAgICAgICAgLy8gRGVyZWZlcmVuY2luZyBtdXN0IHJl
dHVybiBhIHByb3h5IHNvIHRoYXQgYm90aCAqcisrID0gbyBhbmQKLSAgICAgICAgLy8gdmFsdWVf
dHlwZSgqcisrKSBjYW4gd29yay4gIEluIHRoaXMgY2FzZSwgKnIgaXMgdGhlIHNhbWUgYXMKLSAg
ICAgICAgLy8gKnIrKywgYW5kIHRoZSBjb252ZXJzaW9uIG9wZXJhdG9yIGJlbG93IGlzIHVzZWQg
dG8gZW5zdXJlCi0gICAgICAgIC8vIHJlYWRhYmlsaXR5LgotICAgICAgICB3cml0YWJsZV9wb3N0
Zml4X2luY3JlbWVudF9wcm94eSBjb25zdCYKLSAgICAgICAgb3BlcmF0b3IqKCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gUHJvdmlkZXMgcmVhZGFiaWxpdHkgb2YgKnIrKwotICAgICAgICBvcGVyYXRvciB2YWx1ZV90
eXBlJigpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdG9yZWRfdmFsdWU7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQcm92aWRlcyB3cml0YWJpbGl0eSBvZiAqcisrCi0g
ICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgICAgICBUIGNvbnN0JiBvcGVyYXRvcj0oVCBj
b25zdCYgeCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgKnRoaXMtPnN0b3JlZF9pdGVy
YXRvciA9IHg7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IFRoaXMgb3ZlcmxvYWQganVzdCBpbiBjYXNlIG9ubHkgbm9uLWNvbnN0IG9iamVjdHMgYXJlIHdy
aXRhYmxlCi0gICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgICAgICBUJiBvcGVyYXRvcj0o
VCYgeCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgKnRoaXMtPnN0b3JlZF9pdGVyYXRv
ciA9IHg7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFBy
b3ZpZGVzIFgocisrKQotICAgICAgICBvcGVyYXRvciBJdGVyYXRvciBjb25zdCYoKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RvcmVkX2l0ZXJhdG9yOwotICAgICAgICB9
Ci0KLSAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSB2YWx1ZV90eXBlIHN0b3JlZF92YWx1
ZTsKLSAgICAgICAgSXRlcmF0b3Igc3RvcmVkX2l0ZXJhdG9yOwotICAgIH07Ci0KLSMgaWZkZWYg
Qk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpBVElPTgotCi0gICAgdGVtcGxhdGUg
PGNsYXNzIFJlZmVyZW5jZSwgY2xhc3MgVmFsdWU+Ci0gICAgc3RydWN0IGlzX25vbl9wcm94eV9y
ZWZlcmVuY2VfaW1wbAotICAgIHsKLSAgICAgICAgc3RhdGljIFJlZmVyZW5jZSByOwotCi0gICAg
ICAgIHRlbXBsYXRlIDxjbGFzcyBSPgotICAgICAgICBzdGF0aWMgdHlwZW5hbWUgbXBsOjppZl88
Ci0gICAgICAgICAgICBpc19jb252ZXJ0aWJsZTwKLSAgICAgICAgICAgICAgICBSIGNvbnN0IHZv
bGF0aWxlKgotICAgICAgICAgICAgICAsIFZhbHVlIGNvbnN0IHZvbGF0aWxlKgotICAgICAgICAg
ICAgPgotICAgICAgICAgICwgY2hhclsxXQotICAgICAgICAgICwgY2hhclsyXQotICAgICAgICA+
Ojp0eXBlJiBoZWxwZXIoUiBjb25zdCYpOwotCi0gICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFO
VChib29sLCB2YWx1ZSA9IHNpemVvZihoZWxwZXIocikpID09IDEpOwotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZSA8Y2xhc3MgUmVmZXJlbmNlLCBjbGFzcyBWYWx1ZT4KLSAgICBzdHJ1Y3QgaXNfbm9u
X3Byb3h5X3JlZmVyZW5jZQotICAgICAgOiBtcGw6OmJvb2xfPAotICAgICAgICAgICAgaXNfbm9u
X3Byb3h5X3JlZmVyZW5jZV9pbXBsPFJlZmVyZW5jZSwgVmFsdWU+Ojp2YWx1ZQotICAgICAgICA+
Ci0gICAge307Ci0jIGVsc2UKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgUmVmZXJlbmNlLCBjbGFzcyBW
YWx1ZT4KLSAgICBzdHJ1Y3QgaXNfbm9uX3Byb3h5X3JlZmVyZW5jZQotICAgICAgOiBpc19jb252
ZXJ0aWJsZTwKLSAgICAgICAgICAgIHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8UmVmZXJlbmNl
Pjo6dHlwZQotICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUqCi0gICAgICAgICAgLCBWYWx1ZSBj
b25zdCB2b2xhdGlsZSoKLSAgICAgICAgPgotICAgIHt9OwotIyBlbmRpZgotCi0gICAgLy8gQSBt
ZXRhZnVuY3Rpb24gdG8gY2hvb3NlIHRoZSByZXN1bHQgdHlwZSBvZiBwb3N0Zml4ICsrCi0gICAg
Ly8KLSAgICAvLyBCZWNhdXNlIHRoZSBDKys5OCBpbnB1dCBpdGVyYXRvciByZXF1aXJlbWVudHMg
c2F5IHRoYXQgKnIrKyBoYXMKLSAgICAvLyB0eXBlIFQgKHZhbHVlX3R5cGUpLCBpbXBsZW1lbnRh
dGlvbnMgb2Ygc29tZSBzdGFuZGFyZAotICAgIC8vIGFsZ29yaXRobXMgbGlrZSBsZXhpY29ncmFw
aGljYWxfY29tcGFyZSBtYXkgdXNlIGNvbnN0cnVjdGlvbnMKLSAgICAvLyBsaWtlOgotICAgIC8v
Ci0gICAgLy8gICAgICAgICAgKnIrKyA8ICpzKysKLSAgICAvLwotICAgIC8vIElmICpyKysgcmV0
dXJucyBhIHByb3h5IChhcyByZXF1aXJlZCBpZiByIGlzIHdyaXRhYmxlIGJ1dCBub3QKLSAgICAv
LyBtdWx0aXBhc3MpLCB0aGlzIHNvcnQgb2YgZXhwcmVzc2lvbiB3aWxsIGZhaWwgdW5sZXNzIHRo
ZSBwcm94eQotICAgIC8vIHN1cHBvcnRzIHRoZSBvcGVyYXRvcjwuICBTaW5jZSB0aGVyZSBhcmUg
YW55IG51bWJlciBvZiBzdWNoCi0gICAgLy8gb3BlcmF0aW9ucywgd2UncmUgbm90IGdvaW5nIHRv
IHRyeSB0byBzdXBwb3J0IHRoZW0uICBUaGVyZWZvcmUsCi0gICAgLy8gZXZlbiBpZiByKysgcmV0
dXJucyBhIHByb3h5LCAqcisrIHdpbGwgb25seSByZXR1cm4gYSBwcm94eSBpZgotICAgIC8vICpy
IGFsc28gcmV0dXJucyBhIHByb3h5LgotICAgIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xh
c3MgVmFsdWUsIGNsYXNzIFJlZmVyZW5jZSwgY2xhc3MgQ2F0ZWdvcnlPclRyYXZlcnNhbD4KLSAg
ICBzdHJ1Y3QgcG9zdGZpeF9pbmNyZW1lbnRfcmVzdWx0Ci0gICAgICA6IG1wbDo6ZXZhbF9pZjwK
LSAgICAgICAgICAgIG1wbDo6YW5kXzwKLSAgICAgICAgICAgICAgICAvLyBBIHByb3h5IGlzIG9u
bHkgbmVlZGVkIGZvciByZWFkYWJsZSBpdGVyYXRvcnMKLSAgICAgICAgICAgICAgICBpc19jb252
ZXJ0aWJsZTwKLSAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlCi0gICAgICAgICAgICAgICAg
ICAgIC8vIFVzZSBhZGRfbHZhbHVlX3JlZmVyZW5jZSB0byBmb3JtIGByZWZlcmVuY2UgdG8gVmFs
dWVgIGR1ZSB0bwotICAgICAgICAgICAgICAgICAgICAvLyBzb21lIChzdHJpY3QpIEMrKzAzIGNv
bXBpbGVycyAoZS5nLiBgZ2NjIC1zdGQ9YysrMDNgKSByZWplY3QKLSAgICAgICAgICAgICAgICAg
ICAgLy8gJ3JlZmVyZW5jZS10by1yZWZlcmVuY2UnIGluIHRoZSB0ZW1wbGF0ZSB3aGljaCBkZXNj
cmliZWQgaW4gQ1dHCi0gICAgICAgICAgICAgICAgICAgIC8vIERSMTA2LgotICAgICAgICAgICAg
ICAgICAgICAvLyBodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9KdGMxL3NjMjIvd2cyMS9kb2NzL2N3
Z19kZWZlY3RzLmh0bWwjMTA2Ci0gICAgICAgICAgICAgICAgICAsIHR5cGVuYW1lIGFkZF9sdmFs
dWVfcmVmZXJlbmNlPFZhbHVlIGNvbnN0Pjo6dHlwZQotICAgICAgICAgICAgICAgID4KLQotICAg
ICAgICAgICAgICAgIC8vIE5vIG11bHRpcGFzcyBpdGVyYXRvciBjYW4gaGF2ZSB2YWx1ZXMgdGhh
dCBkaXNhcHBlYXIKLSAgICAgICAgICAgICAgICAvLyBiZWZvcmUgcG9zaXRpb25zIGNhbiBiZSBy
ZS12aXNpdGVkCi0gICAgICAgICAgICAgICwgbXBsOjpub3RfPAotICAgICAgICAgICAgICAgICAg
ICBpc19jb252ZXJ0aWJsZTwKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJh
dG9yX2NhdGVnb3J5X3RvX3RyYXZlcnNhbDxDYXRlZ29yeU9yVHJhdmVyc2FsPjo6dHlwZQotICAg
ICAgICAgICAgICAgICAgICAgICwgZm9yd2FyZF90cmF2ZXJzYWxfdGFnCi0gICAgICAgICAgICAg
ICAgICAgID4KLSAgICAgICAgICAgICAgICA+Ci0gICAgICAgICAgICA+Ci0gICAgICAgICAgLCBt
cGw6OmlmXzwKLSAgICAgICAgICAgICAgICBpc19ub25fcHJveHlfcmVmZXJlbmNlPFJlZmVyZW5j
ZSxWYWx1ZT4KLSAgICAgICAgICAgICAgLCBwb3N0Zml4X2luY3JlbWVudF9wcm94eTxJdGVyYXRv
cj4KLSAgICAgICAgICAgICAgLCB3cml0YWJsZV9wb3N0Zml4X2luY3JlbWVudF9wcm94eTxJdGVy
YXRvcj4KLSAgICAgICAgICAgID4KLSAgICAgICAgICAsIG1wbDo6aWRlbnRpdHk8SXRlcmF0b3I+
Ci0gICAgICAgID4KLSAgICB7fTsKLQotICAgIC8vIG9wZXJhdG9yLT4oKSBuZWVkcyBzcGVjaWFs
IHN1cHBvcnQgZm9yIGlucHV0IGl0ZXJhdG9ycyB0byBzdHJpY3RseSBtZWV0IHRoZQotICAgIC8v
IHN0YW5kYXJkJ3MgcmVxdWlyZW1lbnRzLiBJZiAqaSBpcyBub3QgYSByZWZlcmVuY2UgdHlwZSwg
d2UgbXVzdCBzdGlsbAotICAgIC8vIHByb2R1Y2UgYW4gbHZhbHVlIHRvIHdoaWNoIGEgcG9pbnRl
ciBjYW4gYmUgZm9ybWVkLiAgV2UgZG8gdGhhdCBieQotICAgIC8vIHJldHVybmluZyBhIHByb3h5
IG9iamVjdCBjb250YWluaW5nIGFuIGluc3RhbmNlIG9mIHRoZSByZWZlcmVuY2Ugb2JqZWN0Lgot
ICAgIHRlbXBsYXRlIDxjbGFzcyBSZWZlcmVuY2UsIGNsYXNzIFBvaW50ZXI+Ci0gICAgc3RydWN0
IG9wZXJhdG9yX2Fycm93X2Rpc3BhdGNoIC8vIHByb3h5IHJlZmVyZW5jZXMKLSAgICB7Ci0gICAg
ICAgIHN0cnVjdCBwcm94eQotICAgICAgICB7Ci0gICAgICAgICAgICBleHBsaWNpdCBwcm94eShS
ZWZlcmVuY2UgY29uc3QgJiB4KSA6IG1fcmVmKHgpIHt9Ci0gICAgICAgICAgICBSZWZlcmVuY2Uq
IG9wZXJhdG9yLT4oKSB7IHJldHVybiBib29zdDo6YWRkcmVzc29mKG1fcmVmKTsgfQotICAgICAg
ICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBuZWVkZWQgZm9yIE1XQ1cgYW5kIEJDQywgd2hpY2gg
d29uJ3QgY2FsbAotICAgICAgICAgICAgLy8gb3BlcmF0b3ItPiBhZ2FpbiBhdXRvbWF0aWNhbGx5
IHBlciAxMy4zLjEuMiBwYXJhIDgKLSAgICAgICAgICAgIG9wZXJhdG9yIFJlZmVyZW5jZSooKSB7
IHJldHVybiBib29zdDo6YWRkcmVzc29mKG1fcmVmKTsgfQotICAgICAgICAgICAgUmVmZXJlbmNl
IG1fcmVmOwotICAgICAgICB9OwotICAgICAgICB0eXBlZGVmIHByb3h5IHJlc3VsdF90eXBlOwot
ICAgICAgICBzdGF0aWMgcmVzdWx0X3R5cGUgYXBwbHkoUmVmZXJlbmNlIGNvbnN0ICYgeCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdF90eXBlKHgpOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBQb2ludGVyPgotICAgIHN0cnVj
dCBvcGVyYXRvcl9hcnJvd19kaXNwYXRjaDxUJiwgUG9pbnRlcj4gLy8gInJlYWwiIHJlZmVyZW5j
ZXMKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgUG9pbnRlciByZXN1bHRfdHlwZTsKLSAgICAgICAg
c3RhdGljIHJlc3VsdF90eXBlIGFwcGx5KFQmIHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBib29zdDo6YWRkcmVzc29mKHgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIEEg
cHJveHkgcmV0dXJuIHR5cGUgZm9yIG9wZXJhdG9yW10sIG5lZWRlZCB0byBkZWFsIHdpdGgKLSAg
ICAvLyBpdGVyYXRvcnMgdGhhdCBtYXkgaW52YWxpZGF0ZSByZWZlcmVudHMgdXBvbiBkZXN0cnVj
dGlvbi4KLSAgICAvLyBDb25zaWRlciB0aGUgdGVtcG9yYXJ5IGl0ZXJhdG9yIGluICooYSArIG4p
Ci0gICAgdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yPgotICAgIGNsYXNzIG9wZXJhdG9yX2JyYWNr
ZXRzX3Byb3h5Ci0gICAgewotICAgICAgICAvLyBJdGVyYXRvciBpcyBhY3R1YWxseSBhbiBpdGVy
YXRvcl9mYWNhZGUsIHNvIHdlIGRvIG5vdCBoYXZlIHRvCi0gICAgICAgIC8vIGdvIHRocm91Z2gg
aXRlcmF0b3JfdHJhaXRzIHRvIGFjY2VzcyB0aGUgdHJhaXRzLgotICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIEl0ZXJhdG9yOjpyZWZlcmVuY2UgIHJlZmVyZW5jZTsKLSAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBJdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwotCi0gICAgIHB1YmxpYzoK
LSAgICAgICAgb3BlcmF0b3JfYnJhY2tldHNfcHJveHkoSXRlcmF0b3IgY29uc3QmIGl0ZXIpCi0g
ICAgICAgICAgOiBtX2l0ZXIoaXRlcikKLSAgICAgICAge30KLQotICAgICAgICBvcGVyYXRvciBy
ZWZlcmVuY2UoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKm1faXRlcjsK
LSAgICAgICAgfQotCi0gICAgICAgIG9wZXJhdG9yX2JyYWNrZXRzX3Byb3h5JiBvcGVyYXRvcj0o
dmFsdWVfdHlwZSBjb25zdCYgdmFsKQotICAgICAgICB7Ci0gICAgICAgICAgICAqbV9pdGVyID0g
dmFsOwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KLSAgICAgcHJpdmF0
ZToKLSAgICAgICAgSXRlcmF0b3IgbV9pdGVyOwotICAgIH07Ci0KLSAgICAvLyBBIG1ldGFmdW5j
dGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciBvcGVyYXRvcltdIG11c3QgcmV0dXJuIGEKLSAg
ICAvLyBwcm94eSwgb3Igd2hldGhlciBpdCBjYW4gc2ltcGx5IHJldHVybiBhIGNvcHkgb2YgdGhl
IHZhbHVlX3R5cGUuCi0gICAgdGVtcGxhdGUgPGNsYXNzIFZhbHVlVHlwZSwgY2xhc3MgUmVmZXJl
bmNlPgotICAgIHN0cnVjdCB1c2Vfb3BlcmF0b3JfYnJhY2tldHNfcHJveHkKLSAgICAgIDogbXBs
Ojpub3RfPAotICAgICAgICAgICAgbXBsOjphbmRfPAotICAgICAgICAgICAgICAgIC8vIFJlYWxs
eSB3ZSB3YW50IGFuIGlzX2NvcHlfY29uc3RydWN0aWJsZSB0cmFpdCBoZXJlLAotICAgICAgICAg
ICAgICAgIC8vIGJ1dCBpc19QT0Qgd2lsbCBoYXZlIHRvIHN1ZmZpY2UgaW4gdGhlIG1lYW50aW1l
LgotICAgICAgICAgICAgICAgIGJvb3N0Ojppc19QT0Q8VmFsdWVUeXBlPgotICAgICAgICAgICAg
ICAsIGl0ZXJhdG9yX3dyaXRhYmlsaXR5X2Rpc2FibGVkPFZhbHVlVHlwZSxSZWZlcmVuY2U+Ci0g
ICAgICAgICAgICA+Ci0gICAgICAgID4KLSAgICB7fTsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBJ
dGVyYXRvciwgY2xhc3MgVmFsdWUsIGNsYXNzIFJlZmVyZW5jZT4KLSAgICBzdHJ1Y3Qgb3BlcmF0
b3JfYnJhY2tldHNfcmVzdWx0Ci0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1wbDo6
aWZfPAotICAgICAgICAgICAgdXNlX29wZXJhdG9yX2JyYWNrZXRzX3Byb3h5PFZhbHVlLFJlZmVy
ZW5jZT4KLSAgICAgICAgICAsIG9wZXJhdG9yX2JyYWNrZXRzX3Byb3h5PEl0ZXJhdG9yPgotICAg
ICAgICAgICwgVmFsdWUKLSAgICAgICAgPjo6dHlwZSB0eXBlOwotICAgIH07Ci0KLSAgICB0ZW1w
bGF0ZSA8Y2xhc3MgSXRlcmF0b3I+Ci0gICAgb3BlcmF0b3JfYnJhY2tldHNfcHJveHk8SXRlcmF0
b3I+IG1ha2Vfb3BlcmF0b3JfYnJhY2tldHNfcmVzdWx0KEl0ZXJhdG9yIGNvbnN0JiBpdGVyLCBt
cGw6OnRydWVfKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhdG9yX2JyYWNrZXRzX3Byb3h5
PEl0ZXJhdG9yPihpdGVyKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+
Ci0gICAgdHlwZW5hbWUgSXRlcmF0b3I6OnZhbHVlX3R5cGUgbWFrZV9vcGVyYXRvcl9icmFja2V0
c19yZXN1bHQoSXRlcmF0b3IgY29uc3QmIGl0ZXIsIG1wbDo6ZmFsc2VfKQotICAgIHsKLSAgICAg
IHJldHVybiAqaXRlcjsKLSAgICB9Ci0KLSAgICBzdHJ1Y3QgY2hvb3NlX2RpZmZlcmVuY2VfdHlw
ZQotICAgIHsKLSAgICAgICAgdGVtcGxhdGUgPGNsYXNzIEkxLCBjbGFzcyBJMj4KLSAgICAgICAg
c3RydWN0IGFwcGx5Ci0gICAgICAgICAgOgotIyBpZmRlZiBCT09TVF9OT19PTkVfV0FZX0lURVJB
VE9SX0lOVEVST1AKLSAgICAgICAgICBpdGVyYXRvcl9kaWZmZXJlbmNlPEkxPgotIyBlbHNlCi0g
ICAgICAgICAgbXBsOjpldmFsX2lmPAotICAgICAgICAgICAgICBpc19jb252ZXJ0aWJsZTxJMixJ
MT4KLSAgICAgICAgICAgICwgaXRlcmF0b3JfZGlmZmVyZW5jZTxJMT4KLSAgICAgICAgICAgICwg
aXRlcmF0b3JfZGlmZmVyZW5jZTxJMj4KLSAgICAgICAgICA+Ci0jIGVuZGlmCi0gICAgICAgIHt9
OwotCi0gICAgfTsKLQotICAgIHRlbXBsYXRlIDwKLSAgICAgICAgY2xhc3MgRGVyaXZlZAotICAg
ICAgLCBjbGFzcyBWYWx1ZQotICAgICAgLCBjbGFzcyBDYXRlZ29yeU9yVHJhdmVyc2FsCi0gICAg
ICAsIGNsYXNzIFJlZmVyZW5jZQotICAgICAgLCBjbGFzcyBEaWZmZXJlbmNlCi0gICAgICAsIGJv
b2wgSXNCaWRpcmVjdGlvbmFsVHJhdmVyc2FsCi0gICAgICAsIGJvb2wgSXNSYW5kb21BY2Nlc3NU
cmF2ZXJzYWwKLSAgICA+Ci0gICAgY2xhc3MgaXRlcmF0b3JfZmFjYWRlX2Jhc2U7Ci0KLSAgfSAv
LyBuYW1lc3BhY2UgZGV0YWlsCi0KLQotICAvLyBNYWNyb3Mgd2hpY2ggZGVzY3JpYmUgdGhlIGRl
Y2xhcmF0aW9ucyBvZiBiaW5hcnkgb3BlcmF0b3JzCi0jIGlmZGVmIEJPT1NUX05PX1NUUklDVF9J
VEVSQVRPUl9JTlRFUk9QRVJBQklMSVRZCi0jICBkZWZpbmUgQk9PU1RfSVRFUkFUT1JfRkFDQURF
X0lOVEVST1BfSEVBRF9JTVBMKHByZWZpeCwgb3AsIHJlc3VsdF90eXBlLCBlbmFibGVyKSAgICAg
ICBcCi0gICAgdGVtcGxhdGUgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjbGFzcyBEZXJpdmVkMSwgY2xhc3Mg
VjEsIGNsYXNzIFRDMSwgY2xhc3MgUmVmZXJlbmNlMSwgY2xhc3MgRGlmZmVyZW5jZTEgXAotICAg
ICAgLCBjbGFzcyBEZXJpdmVkMiwgY2xhc3MgVjIsIGNsYXNzIFRDMiwgY2xhc3MgUmVmZXJlbmNl
MiwgY2xhc3MgRGlmZmVyZW5jZTIgXAotICAgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBwcmVmaXgg
dHlwZW5hbWUgbXBsOjphcHBseTI8cmVzdWx0X3R5cGUsRGVyaXZlZDEsRGVyaXZlZDI+Ojp0eXBl
IFwKLSAgICBvcGVyYXRvciBvcCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGl0ZXJhdG9yX2ZhY2FkZTxEZXJpdmVk
MSwgVjEsIFRDMSwgUmVmZXJlbmNlMSwgRGlmZmVyZW5jZTE+IGNvbnN0JiBsaHMgICBcCi0gICAg
ICAsIGl0ZXJhdG9yX2ZhY2FkZTxEZXJpdmVkMiwgVjIsIFRDMiwgUmVmZXJlbmNlMiwgRGlmZmVy
ZW5jZTI+IGNvbnN0JiByaHMpCi0jIGVsc2UKLSMgIGRlZmluZSBCT09TVF9JVEVSQVRPUl9GQUNB
REVfSU5URVJPUF9IRUFEX0lNUEwocHJlZml4LCBvcCwgcmVzdWx0X3R5cGUsIGVuYWJsZXIpICAg
XAotICAgIHRlbXBsYXRlIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjbGFzcyBEZXJpdmVkMSwgY2xhc3MgVjEsIGNs
YXNzIFRDMSwgY2xhc3MgUmVmZXJlbmNlMSwgY2xhc3MgRGlmZmVyZW5jZTEgXAotICAgICAgLCBj
bGFzcyBEZXJpdmVkMiwgY2xhc3MgVjIsIGNsYXNzIFRDMiwgY2xhc3MgUmVmZXJlbmNlMiwgY2xh
c3MgRGlmZmVyZW5jZTIgXAotICAgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHByZWZpeCB0eXBlbmFtZSBl
bmFibGVyPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBEZXJpdmVkMSwgRGVyaXZlZDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgLCB0eXBlbmFtZSBtcGw6OmFwcGx5MjxyZXN1bHRfdHlwZSxE
ZXJpdmVkMSxEZXJpdmVkMj46OnR5cGUgICAgICAgXAotICAgID46OnR5cGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG9w
ZXJhdG9yIG9wKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICBpdGVyYXRvcl9mYWNhZGU8RGVyaXZlZDEsIFYxLCBUQzEsIFJl
ZmVyZW5jZTEsIERpZmZlcmVuY2UxPiBjb25zdCYgbGhzICAgXAotICAgICAgLCBpdGVyYXRvcl9m
YWNhZGU8RGVyaXZlZDIsIFYyLCBUQzIsIFJlZmVyZW5jZTIsIERpZmZlcmVuY2UyPiBjb25zdCYg
cmhzKQotIyBlbmRpZgotCi0jICBkZWZpbmUgQk9PU1RfSVRFUkFUT1JfRkFDQURFX0lOVEVST1Bf
SEVBRChwcmVmaXgsIG9wLCByZXN1bHRfdHlwZSkgICAgICAgXAotICAgIEJPT1NUX0lURVJBVE9S
X0ZBQ0FERV9JTlRFUk9QX0hFQURfSU1QTChwcmVmaXgsIG9wLCByZXN1bHRfdHlwZSwgYm9vc3Q6
Oml0ZXJhdG9yczo6ZGV0YWlsOjplbmFibGVfaWZfaW50ZXJvcGVyYWJsZSkKLQotIyAgZGVmaW5l
IEJPT1NUX0lURVJBVE9SX0ZBQ0FERV9JTlRFUk9QX1JBTkRPTV9BQ0NFU1NfSEVBRChwcmVmaXgs
IG9wLCByZXN1bHRfdHlwZSkgICAgICAgXAotICAgIEJPT1NUX0lURVJBVE9SX0ZBQ0FERV9JTlRF
Uk9QX0hFQURfSU1QTChwcmVmaXgsIG9wLCByZXN1bHRfdHlwZSwgYm9vc3Q6Oml0ZXJhdG9yczo6
ZGV0YWlsOjplbmFibGVfaWZfaW50ZXJvcGVyYWJsZV9hbmRfcmFuZG9tX2FjY2Vzc190cmF2ZXJz
YWwpCi0KLSMgIGRlZmluZSBCT09TVF9JVEVSQVRPUl9GQUNBREVfUExVU19IRUFEKHByZWZpeCxh
cmdzKSAgICAgICAgICAgICAgXAotICAgIHRlbXBsYXRlIDxjbGFzcyBEZXJpdmVkLCBjbGFzcyBW
LCBjbGFzcyBUQywgY2xhc3MgUiwgY2xhc3MgRD4gICBcCi0gICAgcHJlZml4IHR5cGVuYW1lIGJv
b3N0OjppdGVyYXRvcnM6OmVuYWJsZV9pZjwgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
Ym9vc3Q6Oml0ZXJhdG9yczo6ZGV0YWlsOjppc190cmF2ZXJzYWxfYXRfbGVhc3Q8IFRDLCBib29z
dDo6aXRlcmF0b3JzOjpyYW5kb21fYWNjZXNzX3RyYXZlcnNhbF90YWcgPiwgIFwKLSAgICAgICAg
RGVyaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgID46OnR5cGUgb3BlcmF0b3IrIGFyZ3MKLQotICAvLwotICAvLyBIZWxwZXIgY2xh
c3MgZm9yIGdyYW50aW5nIGFjY2VzcyB0byB0aGUgaXRlcmF0b3IgY29yZSBpbnRlcmZhY2UuCi0g
IC8vCi0gIC8vIFRoZSBzaW1wbGUgY29yZSBpbnRlcmZhY2UgaXMgdXNlZCBieSBpdGVyYXRvcl9m
YWNhZGUuIFRoZSBjb3JlCi0gIC8vIGludGVyZmFjZSBvZiBhIHVzZXIvbGlicmFyeSBkZWZpbmVk
IGl0ZXJhdG9yIHR5cGUgc2hvdWxkIG5vdCBiZSBtYWRlIHB1YmxpYwotICAvLyBzbyB0aGF0IGl0
IGRvZXMgbm90IGNsdXR0ZXIgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIEluc3RlYWQgaXRlcmF0b3Jf
Y29yZV9hY2Nlc3MKLSAgLy8gc2hvdWxkIGJlIG1hZGUgZnJpZW5kIHNvIHRoYXQgaXRlcmF0b3Jf
ZmFjYWRlIGNhbiBhY2Nlc3MgdGhlIGNvcmUKLSAgLy8gaW50ZXJmYWNlIHRocm91Z2ggaXRlcmF0
b3JfY29yZV9hY2Nlc3MuCi0gIC8vCi0gIGNsYXNzIGl0ZXJhdG9yX2NvcmVfYWNjZXNzCi0gIHsK
LSMgaWYgZGVmaW5lZChCT09TVF9OT19NRU1CRVJfVEVNUExBVEVfRlJJRU5EUykKLSAgICAgIC8v
IFRhc3RlbGVzcyBhcyB0aGlzIG1heSBzZWVtLCBtYWtpbmcgYWxsIG1lbWJlcnMgcHVibGljIGFs
bG93cyBtZW1iZXIgdGVtcGxhdGVzCi0gICAgICAvLyB0byB3b3JrIGluIHRoZSBhYnNlbmNlIG9m
IG1lbWJlciB0ZW1wbGF0ZSBmcmllbmRzLgotICAgcHVibGljOgotIyBlbHNlCi0KLSAgICAgIHRl
bXBsYXRlIDxjbGFzcyBJLCBjbGFzcyBWLCBjbGFzcyBUQywgY2xhc3MgUiwgY2xhc3MgRD4gZnJp
ZW5kIGNsYXNzIGl0ZXJhdG9yX2ZhY2FkZTsKLSAgICAgIHRlbXBsYXRlIDxjbGFzcyBJLCBjbGFz
cyBWLCBjbGFzcyBUQywgY2xhc3MgUiwgY2xhc3MgRCwgYm9vbCBJc0JpZGlyZWN0aW9uYWxUcmF2
ZXJzYWwsIGJvb2wgSXNSYW5kb21BY2Nlc3NUcmF2ZXJzYWw+Ci0gICAgICBmcmllbmQgY2xhc3Mg
ZGV0YWlsOjppdGVyYXRvcl9mYWNhZGVfYmFzZTsKLQotIyAgZGVmaW5lIEJPT1NUX0lURVJBVE9S
X0ZBQ0FERV9SRUxBVElPTihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgIEJPT1NUX0lURVJBVE9SX0ZBQ0FERV9JTlRFUk9QX0hFQUQoZnJpZW5kLG9wLCBib29zdDo6
aXRlcmF0b3JzOjpkZXRhaWw6OmFsd2F5c19ib29sMik7Ci0KLSAgICAgIEJPT1NUX0lURVJBVE9S
X0ZBQ0FERV9SRUxBVElPTig9PSkKLSAgICAgIEJPT1NUX0lURVJBVE9SX0ZBQ0FERV9SRUxBVElP
TighPSkKLQotIyAgdW5kZWYgQk9PU1RfSVRFUkFUT1JfRkFDQURFX1JFTEFUSU9OCi0KLSMgIGRl
ZmluZSBCT09TVF9JVEVSQVRPUl9GQUNBREVfUkFORE9NX0FDQ0VTU19SRUxBVElPTihvcCkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIEJPT1NUX0lURVJBVE9SX0ZBQ0FE
RV9JTlRFUk9QX1JBTkRPTV9BQ0NFU1NfSEVBRChmcmllbmQsb3AsIGJvb3N0OjppdGVyYXRvcnM6
OmRldGFpbDo6YWx3YXlzX2Jvb2wyKTsKLQotICAgICAgQk9PU1RfSVRFUkFUT1JfRkFDQURFX1JB
TkRPTV9BQ0NFU1NfUkVMQVRJT04oPCkKLSAgICAgIEJPT1NUX0lURVJBVE9SX0ZBQ0FERV9SQU5E
T01fQUNDRVNTX1JFTEFUSU9OKD4pCi0gICAgICBCT09TVF9JVEVSQVRPUl9GQUNBREVfUkFORE9N
X0FDQ0VTU19SRUxBVElPTig8PSkKLSAgICAgIEJPT1NUX0lURVJBVE9SX0ZBQ0FERV9SQU5ET01f
QUNDRVNTX1JFTEFUSU9OKD49KQotCi0jICB1bmRlZiBCT09TVF9JVEVSQVRPUl9GQUNBREVfUkFO
RE9NX0FDQ0VTU19SRUxBVElPTgotCi0gICAgICBCT09TVF9JVEVSQVRPUl9GQUNBREVfSU5URVJP
UF9SQU5ET01fQUNDRVNTX0hFQUQoCi0gICAgICAgICAgZnJpZW5kLCAtLCBib29zdDo6aXRlcmF0
b3JzOjpkZXRhaWw6OmNob29zZV9kaWZmZXJlbmNlX3R5cGUpCi0gICAgICA7Ci0KLSAgICAgIEJP
T1NUX0lURVJBVE9SX0ZBQ0FERV9QTFVTX0hFQUQoCi0gICAgICAgICAgZnJpZW5kIGlubGluZQot
ICAgICAgICAsIChpdGVyYXRvcl9mYWNhZGU8RGVyaXZlZCwgViwgVEMsIFIsIEQ+IGNvbnN0Jgot
ICAgICAgICAsIHR5cGVuYW1lIERlcml2ZWQ6OmRpZmZlcmVuY2VfdHlwZSkKLSAgICAgICkKLSAg
ICAgIDsKLQotICAgICAgQk9PU1RfSVRFUkFUT1JfRkFDQURFX1BMVVNfSEVBRCgKLSAgICAgICAg
ICBmcmllbmQgaW5saW5lCi0gICAgICAgICwgKHR5cGVuYW1lIERlcml2ZWQ6OmRpZmZlcmVuY2Vf
dHlwZQotICAgICAgICAsIGl0ZXJhdG9yX2ZhY2FkZTxEZXJpdmVkLCBWLCBUQywgUiwgRD4gY29u
c3QmKQotICAgICAgKQotICAgICAgOwotCi0jIGVuZGlmCi0KLSAgICAgIHRlbXBsYXRlIDxjbGFz
cyBGYWNhZGU+Ci0gICAgICBzdGF0aWMgdHlwZW5hbWUgRmFjYWRlOjpyZWZlcmVuY2UgZGVyZWZl
cmVuY2UoRmFjYWRlIGNvbnN0JiBmKQotICAgICAgewotICAgICAgICAgIHJldHVybiBmLmRlcmVm
ZXJlbmNlKCk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBsYXRlIDxjbGFzcyBGYWNhZGU+Ci0gICAg
ICBzdGF0aWMgdm9pZCBpbmNyZW1lbnQoRmFjYWRlJiBmKQotICAgICAgewotICAgICAgICAgIGYu
aW5jcmVtZW50KCk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBsYXRlIDxjbGFzcyBGYWNhZGU+Ci0g
ICAgICBzdGF0aWMgdm9pZCBkZWNyZW1lbnQoRmFjYWRlJiBmKQotICAgICAgewotICAgICAgICAg
IGYuZGVjcmVtZW50KCk7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBsYXRlIDxjbGFzcyBGYWNhZGUx
LCBjbGFzcyBGYWNhZGUyPgotICAgICAgc3RhdGljIGJvb2wgZXF1YWwoRmFjYWRlMSBjb25zdCYg
ZjEsIEZhY2FkZTIgY29uc3QmIGYyLCBtcGw6OnRydWVfKQotICAgICAgewotICAgICAgICAgIHJl
dHVybiBmMS5lcXVhbChmMik7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBsYXRlIDxjbGFzcyBGYWNh
ZGUxLCBjbGFzcyBGYWNhZGUyPgotICAgICAgc3RhdGljIGJvb2wgZXF1YWwoRmFjYWRlMSBjb25z
dCYgZjEsIEZhY2FkZTIgY29uc3QmIGYyLCBtcGw6OmZhbHNlXykKLSAgICAgIHsKLSAgICAgICAg
ICByZXR1cm4gZjIuZXF1YWwoZjEpOwotICAgICAgfQotCi0gICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
RmFjYWRlPgotICAgICAgc3RhdGljIHZvaWQgYWR2YW5jZShGYWNhZGUmIGYsIHR5cGVuYW1lIEZh
Y2FkZTo6ZGlmZmVyZW5jZV90eXBlIG4pCi0gICAgICB7Ci0gICAgICAgICAgZi5hZHZhbmNlKG4p
OwotICAgICAgfQotCi0gICAgICB0ZW1wbGF0ZSA8Y2xhc3MgRmFjYWRlMSwgY2xhc3MgRmFjYWRl
Mj4KLSAgICAgIHN0YXRpYyB0eXBlbmFtZSBGYWNhZGUxOjpkaWZmZXJlbmNlX3R5cGUgZGlzdGFu
Y2VfZnJvbSgKLSAgICAgICAgICBGYWNhZGUxIGNvbnN0JiBmMSwgRmFjYWRlMiBjb25zdCYgZjIs
IG1wbDo6dHJ1ZV8pCi0gICAgICB7Ci0gICAgICAgICAgcmV0dXJuIC1mMS5kaXN0YW5jZV90byhm
Mik7Ci0gICAgICB9Ci0KLSAgICAgIHRlbXBsYXRlIDxjbGFzcyBGYWNhZGUxLCBjbGFzcyBGYWNh
ZGUyPgotICAgICAgc3RhdGljIHR5cGVuYW1lIEZhY2FkZTI6OmRpZmZlcmVuY2VfdHlwZSBkaXN0
YW5jZV9mcm9tKAotICAgICAgICAgIEZhY2FkZTEgY29uc3QmIGYxLCBGYWNhZGUyIGNvbnN0JiBm
MiwgbXBsOjpmYWxzZV8pCi0gICAgICB7Ci0gICAgICAgICAgcmV0dXJuIGYyLmRpc3RhbmNlX3Rv
KGYxKTsKLSAgICAgIH0KLQotICAgICAgLy8KLSAgICAgIC8vIEN1cmlvdXNseSBSZWN1cnJpbmcg
VGVtcGxhdGUgaW50ZXJmYWNlLgotICAgICAgLy8KLSAgICAgIHRlbXBsYXRlIDxjbGFzcyBJLCBj
bGFzcyBWLCBjbGFzcyBUQywgY2xhc3MgUiwgY2xhc3MgRD4KLSAgICAgIHN0YXRpYyBJJiBkZXJp
dmVkKGl0ZXJhdG9yX2ZhY2FkZTxJLFYsVEMsUixEPiYgZmFjYWRlKQotICAgICAgewotICAgICAg
ICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8SSo+KCZmYWNhZGUpOwotICAgICAgfQotCi0gICAgICB0
ZW1wbGF0ZSA8Y2xhc3MgSSwgY2xhc3MgViwgY2xhc3MgVEMsIGNsYXNzIFIsIGNsYXNzIEQ+Ci0g
ICAgICBzdGF0aWMgSSBjb25zdCYgZGVyaXZlZChpdGVyYXRvcl9mYWNhZGU8SSxWLFRDLFIsRD4g
Y29uc3QmIGZhY2FkZSkKLSAgICAgIHsKLSAgICAgICAgICByZXR1cm4gKnN0YXRpY19jYXN0PEkg
Y29uc3QqPigmZmFjYWRlKTsKLSAgICAgIH0KLQotICAgICAgLy8gb2JqZWN0cyBvZiB0aGlzIGNs
YXNzIGFyZSB1c2VsZXNzCi0gICAgICBCT09TVF9ERUxFVEVEX0ZVTkNUSU9OKGl0ZXJhdG9yX2Nv
cmVfYWNjZXNzKCkpCi0gIH07Ci0KLSAgbmFtZXNwYWNlIGRldGFpbCB7Ci0KLSAgICAvLyBJbXBs
ZW1lbnRhdGlvbiBmb3IgZm9yd2FyZCB0cmF2ZXJzYWwgaXRlcmF0b3JzCi0gICAgdGVtcGxhdGUg
PAotICAgICAgICBjbGFzcyBEZXJpdmVkCi0gICAgICAsIGNsYXNzIFZhbHVlCi0gICAgICAsIGNs
YXNzIENhdGVnb3J5T3JUcmF2ZXJzYWwKLSAgICAgICwgY2xhc3MgUmVmZXJlbmNlCi0gICAgICAs
IGNsYXNzIERpZmZlcmVuY2UKLSAgICA+Ci0gICAgY2xhc3MgaXRlcmF0b3JfZmFjYWRlX2Jhc2U8
IERlcml2ZWQsIFZhbHVlLCBDYXRlZ29yeU9yVHJhdmVyc2FsLCBSZWZlcmVuY2UsIERpZmZlcmVu
Y2UsIGZhbHNlLCBmYWxzZSA+Ci0jIGlmZGVmIEJPT1NUX0lURVJBVE9SX0ZBQ0FERV9ORUVEU19J
VEVSQVRPUl9CQVNFCi0gICAgICAgIDogcHVibGljIGJvb3N0OjppdGVyYXRvcnM6OmRldGFpbDo6
aXRlcmF0b3JfZmFjYWRlX3R5cGVzPAotICAgICAgICAgICAgIFZhbHVlLCBDYXRlZ29yeU9yVHJh
dmVyc2FsLCBSZWZlcmVuY2UsIERpZmZlcmVuY2UKLSAgICAgICAgICA+OjpiYXNlCi0jICB1bmRl
ZiBCT09TVF9JVEVSQVRPUl9GQUNBREVfTkVFRFNfSVRFUkFUT1JfQkFTRQotIyBlbmRpZgotICAg
IHsKLSAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIGJvb3N0OjppdGVyYXRvcnM6OmRldGFp
bDo6aXRlcmF0b3JfZmFjYWRlX3R5cGVzPAotICAgICAgICAgICAgVmFsdWUsIENhdGVnb3J5T3JU
cmF2ZXJzYWwsIFJlZmVyZW5jZSwgRGlmZmVyZW5jZQotICAgICAgICA+IGFzc29jaWF0ZWRfdHlw
ZXM7Ci0KLSAgICAgICAgdHlwZWRlZiBib29zdDo6aXRlcmF0b3JzOjpkZXRhaWw6Om9wZXJhdG9y
X2Fycm93X2Rpc3BhdGNoPAotICAgICAgICAgICAgUmVmZXJlbmNlCi0gICAgICAgICAgLCB0eXBl
bmFtZSBhc3NvY2lhdGVkX3R5cGVzOjpwb2ludGVyCi0gICAgICAgID4gb3BlcmF0b3JfYXJyb3df
ZGlzcGF0Y2hfOwotCi0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFzc29j
aWF0ZWRfdHlwZXM6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKLSAgICAgICAgdHlwZWRlZiBSZWZl
cmVuY2UgcmVmZXJlbmNlOwotICAgICAgICB0eXBlZGVmIERpZmZlcmVuY2UgZGlmZmVyZW5jZV90
eXBlOwotCi0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgb3BlcmF0b3JfYXJyb3dfZGlzcGF0Y2hf
OjpyZXN1bHRfdHlwZSBwb2ludGVyOwotCi0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXNzb2Np
YXRlZF90eXBlczo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7Ci0KLSAgICBw
dWJsaWM6Ci0gICAgICAgIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdAotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gaXRlcmF0b3JfY29yZV9hY2Nlc3M6OmRlcmVmZXJlbmNlKHRoaXMt
PmRlcml2ZWQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwb2ludGVyIG9wZXJhdG9yLT4oKSBj
b25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0b3JfYXJyb3dfZGlzcGF0
Y2hfOjphcHBseSgqdGhpcy0+ZGVyaXZlZCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIERlcml2
ZWQmIG9wZXJhdG9yKysoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpdGVyYXRvcl9jb3JlX2Fj
Y2Vzczo6aW5jcmVtZW50KHRoaXMtPmRlcml2ZWQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhp
cy0+ZGVyaXZlZCgpOwotICAgICAgICB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIC8vCi0g
ICAgICAgIC8vIEN1cmlvdXNseSBSZWN1cnJpbmcgVGVtcGxhdGUgaW50ZXJmYWNlLgotICAgICAg
ICAvLwotICAgICAgICBEZXJpdmVkJiBkZXJpdmVkKCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICpzdGF0aWNfY2FzdDxEZXJpdmVkKj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBEZXJpdmVkIGNvbnN0JiBkZXJpdmVkKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICpzdGF0aWNfY2FzdDxEZXJpdmVkIGNvbnN0Kj4odGhpcyk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgLy8gSW1wbGVtZW50YXRpb24gZm9yIGJpZGlyZWN0aW9uYWwgdHJhdmVyc2Fs
IGl0ZXJhdG9ycwotICAgIHRlbXBsYXRlIDwKLSAgICAgICAgY2xhc3MgRGVyaXZlZAotICAgICAg
LCBjbGFzcyBWYWx1ZQotICAgICAgLCBjbGFzcyBDYXRlZ29yeU9yVHJhdmVyc2FsCi0gICAgICAs
IGNsYXNzIFJlZmVyZW5jZQotICAgICAgLCBjbGFzcyBEaWZmZXJlbmNlCi0gICAgPgotICAgIGNs
YXNzIGl0ZXJhdG9yX2ZhY2FkZV9iYXNlPCBEZXJpdmVkLCBWYWx1ZSwgQ2F0ZWdvcnlPclRyYXZl
cnNhbCwgUmVmZXJlbmNlLCBEaWZmZXJlbmNlLCB0cnVlLCBmYWxzZSA+IDoKLSAgICAgICAgcHVi
bGljIGl0ZXJhdG9yX2ZhY2FkZV9iYXNlPCBEZXJpdmVkLCBWYWx1ZSwgQ2F0ZWdvcnlPclRyYXZl
cnNhbCwgUmVmZXJlbmNlLCBEaWZmZXJlbmNlLCBmYWxzZSwgZmFsc2UgPgotICAgIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIERlcml2ZWQmIG9wZXJhdG9yLS0oKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpdGVyYXRvcl9jb3JlX2FjY2Vzczo6ZGVjcmVtZW50KHRoaXMtPmRlcml2ZWQoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gdGhpcy0+ZGVyaXZlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
RGVyaXZlZCBvcGVyYXRvci0tKGludCkKLSAgICAgICAgewotICAgICAgICAgICAgRGVyaXZlZCB0
bXAodGhpcy0+ZGVyaXZlZCgpKTsKLSAgICAgICAgICAgIC0tKnRoaXM7Ci0gICAgICAgICAgICBy
ZXR1cm4gdG1wOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIEltcGxlbWVudGF0aW9uIGZv
ciByYW5kb20gYWNjZXNzIHRyYXZlcnNhbCBpdGVyYXRvcnMKLSAgICB0ZW1wbGF0ZSA8Ci0gICAg
ICAgIGNsYXNzIERlcml2ZWQKLSAgICAgICwgY2xhc3MgVmFsdWUKLSAgICAgICwgY2xhc3MgQ2F0
ZWdvcnlPclRyYXZlcnNhbAotICAgICAgLCBjbGFzcyBSZWZlcmVuY2UKLSAgICAgICwgY2xhc3Mg
RGlmZmVyZW5jZQotICAgID4KLSAgICBjbGFzcyBpdGVyYXRvcl9mYWNhZGVfYmFzZTwgRGVyaXZl
ZCwgVmFsdWUsIENhdGVnb3J5T3JUcmF2ZXJzYWwsIFJlZmVyZW5jZSwgRGlmZmVyZW5jZSwgdHJ1
ZSwgdHJ1ZSA+IDoKLSAgICAgICAgcHVibGljIGl0ZXJhdG9yX2ZhY2FkZV9iYXNlPCBEZXJpdmVk
LCBWYWx1ZSwgQ2F0ZWdvcnlPclRyYXZlcnNhbCwgUmVmZXJlbmNlLCBEaWZmZXJlbmNlLCB0cnVl
LCBmYWxzZSA+Ci0gICAgewotICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgaXRlcmF0b3Jf
ZmFjYWRlX2Jhc2U8IERlcml2ZWQsIFZhbHVlLCBDYXRlZ29yeU9yVHJhdmVyc2FsLCBSZWZlcmVu
Y2UsIERpZmZlcmVuY2UsIHRydWUsIGZhbHNlID4gYmFzZV90eXBlOwotCi0gICAgcHVibGljOgot
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsK
LSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZm
ZXJlbmNlX3R5cGU7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVuYW1lIGJvb3N0OjppdGVy
YXRvcnM6OmRldGFpbDo6b3BlcmF0b3JfYnJhY2tldHNfcmVzdWx0PERlcml2ZWQsIFZhbHVlLCBy
ZWZlcmVuY2U+Ojp0eXBlCi0gICAgICAgIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIG4pIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHR5cGVkZWYgYm9vc3Q6Oml0ZXJhdG9yczo6ZGV0
YWlsOjp1c2Vfb3BlcmF0b3JfYnJhY2tldHNfcHJveHk8VmFsdWUsIFJlZmVyZW5jZT4gdXNlX3By
b3h5OwotCi0gICAgICAgICAgICByZXR1cm4gYm9vc3Q6Oml0ZXJhdG9yczo6ZGV0YWlsOjptYWtl
X29wZXJhdG9yX2JyYWNrZXRzX3Jlc3VsdDxEZXJpdmVkPigKLSAgICAgICAgICAgICAgICB0aGlz
LT5kZXJpdmVkKCkgKyBuCi0gICAgICAgICAgICAgICwgdXNlX3Byb3h5KCkKLSAgICAgICAgICAg
ICk7Ci0gICAgICAgIH0KLQotICAgICAgICBEZXJpdmVkJiBvcGVyYXRvcis9KGRpZmZlcmVuY2Vf
dHlwZSBuKQotICAgICAgICB7Ci0gICAgICAgICAgICBpdGVyYXRvcl9jb3JlX2FjY2Vzczo6YWR2
YW5jZSh0aGlzLT5kZXJpdmVkKCksIG4pOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmRlcml2
ZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIERlcml2ZWQmIG9wZXJhdG9yLT0oZGlmZmVyZW5j
ZV90eXBlIG4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGl0ZXJhdG9yX2NvcmVfYWNjZXNzOjph
ZHZhbmNlKHRoaXMtPmRlcml2ZWQoKSwgLW4pOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmRl
cml2ZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIERlcml2ZWQgb3BlcmF0b3ItKGRpZmZlcmVu
Y2VfdHlwZSB4KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBEZXJpdmVkIHJlc3VsdCh0
aGlzLT5kZXJpdmVkKCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAtPSB4OwotICAgICAg
ICB9Ci0gICAgfTsKLQotICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotICAvLwotICAvLyBpdGVy
YXRvcl9mYWNhZGUgLSB1c2UgYXMgYSBwdWJsaWMgYmFzZSBjbGFzcyBmb3IgZGVmaW5pbmcgbmV3
Ci0gIC8vIHN0YW5kYXJkLWNvbmZvcm1pbmcgaXRlcmF0b3JzLgotICAvLwotICB0ZW1wbGF0ZSA8
Ci0gICAgICBjbGFzcyBEZXJpdmVkICAgICAgICAgICAgIC8vIFRoZSBkZXJpdmVkIGl0ZXJhdG9y
IHR5cGUgYmVpbmcgY29uc3RydWN0ZWQKLSAgICAsIGNsYXNzIFZhbHVlCi0gICAgLCBjbGFzcyBD
YXRlZ29yeU9yVHJhdmVyc2FsCi0gICAgLCBjbGFzcyBSZWZlcmVuY2UgICA9IFZhbHVlJgotICAg
ICwgY2xhc3MgRGlmZmVyZW5jZSAgPSBzdGQ6OnB0cmRpZmZfdAotICA+Ci0gIGNsYXNzIGl0ZXJh
dG9yX2ZhY2FkZSA6Ci0gICAgICBwdWJsaWMgZGV0YWlsOjppdGVyYXRvcl9mYWNhZGVfYmFzZTwK
LSAgICAgICAgICBEZXJpdmVkLAotICAgICAgICAgIFZhbHVlLAotICAgICAgICAgIENhdGVnb3J5
T3JUcmF2ZXJzYWwsCi0gICAgICAgICAgUmVmZXJlbmNlLAotICAgICAgICAgIERpZmZlcmVuY2Us
Ci0gICAgICAgICAgZGV0YWlsOjppc190cmF2ZXJzYWxfYXRfbGVhc3Q8IENhdGVnb3J5T3JUcmF2
ZXJzYWwsIGJpZGlyZWN0aW9uYWxfdHJhdmVyc2FsX3RhZyA+Ojp2YWx1ZSwKLSAgICAgICAgICBk
ZXRhaWw6OmlzX3RyYXZlcnNhbF9hdF9sZWFzdDwgQ2F0ZWdvcnlPclRyYXZlcnNhbCwgcmFuZG9t
X2FjY2Vzc190cmF2ZXJzYWxfdGFnID46OnZhbHVlCi0gICAgICA+Ci0gIHsKLSAgcHJvdGVjdGVk
OgotICAgICAgLy8gRm9yIHVzZSBieSBkZXJpdmVkIGNsYXNzZXMKLSAgICAgIHR5cGVkZWYgaXRl
cmF0b3JfZmFjYWRlPERlcml2ZWQsVmFsdWUsQ2F0ZWdvcnlPclRyYXZlcnNhbCxSZWZlcmVuY2Us
RGlmZmVyZW5jZT4gaXRlcmF0b3JfZmFjYWRlXzsKLSAgfTsKLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
SSwgY2xhc3MgViwgY2xhc3MgVEMsIGNsYXNzIFIsIGNsYXNzIEQ+Ci0gIGlubGluZSB0eXBlbmFt
ZSBib29zdDo6aXRlcmF0b3JzOjpkZXRhaWw6OnBvc3RmaXhfaW5jcmVtZW50X3Jlc3VsdDxJLFYs
UixUQz46OnR5cGUKLSAgb3BlcmF0b3IrKygKLSAgICAgIGl0ZXJhdG9yX2ZhY2FkZTxJLFYsVEMs
UixEPiYgaQotICAgICwgaW50Ci0gICkKLSAgewotICAgICAgdHlwZW5hbWUgYm9vc3Q6Oml0ZXJh
dG9yczo6ZGV0YWlsOjpwb3N0Zml4X2luY3JlbWVudF9yZXN1bHQ8SSxWLFIsVEM+Ojp0eXBlCi0g
ICAgICAgICAgdG1wKCpzdGF0aWNfY2FzdDxJKj4oJmkpKTsKLQotICAgICAgKytpOwotCi0gICAg
ICByZXR1cm4gdG1wOwotICB9Ci0KLQotICAvLwotICAvLyBDb21wYXJpc29uIG9wZXJhdG9yIGlt
cGxlbWVudGF0aW9uLiBUaGUgbGlicmFyeSBzdXBwbGllZCBvcGVyYXRvcnMKLSAgLy8gZW5hYmxl
cyB0aGUgdXNlciB0byBwcm92aWRlIGZ1bGx5IGludGVyb3BlcmFibGUgY29uc3RhbnQvbXV0YWJs
ZQotICAvLyBpdGVyYXRvciB0eXBlcy4gSS5lLiB0aGUgbGlicmFyeSBwcm92aWRlcyBhbGwgb3Bl
cmF0b3JzCi0gIC8vIGZvciBhbGwgbXV0YWJsZS9jb25zdGFudCBpdGVyYXRvciBjb21iaW5hdGlv
bnMuCi0gIC8vCi0gIC8vIE5vdGUgdGhvdWdoIHRoYXQgdGhpcyBraW5kIG9mIGludGVyb3BlcmFi
aWxpdHkgZm9yIGNvbnN0YW50L211dGFibGUKLSAgLy8gaXRlcmF0b3JzIGlzIG5vdCByZXF1aXJl
ZCBieSB0aGUgc3RhbmRhcmQgZm9yIGNvbnRhaW5lciBpdGVyYXRvcnMuCi0gIC8vIEFsbCB0aGUg
c3RhbmRhcmQgYXNrcyBmb3IgaXMgYSBjb252ZXJzaW9uIG11dGFibGUgLT4gY29uc3RhbnQuCi0g
IC8vIE1vc3Qgc3RhbmRhcmQgbGlicmFyeSBpbXBsZW1lbnRhdGlvbnMgbm93YWRheXMgcHJvdmlk
ZSBmdWxseSBpbnRlcm9wZXJhYmxlCi0gIC8vIGl0ZXJhdG9yIGltcGxlbWVudGF0aW9ucywgYnV0
IHRoZXJlIGFyZSBzdGlsbCBoZWF2aWx5IHVzZWQgaW1wbGVtZW50YXRpb25zCi0gIC8vIHRoYXQg
ZG8gbm90IHByb3ZpZGUgdGhlbS4gKEFjdHVhbGx5IGl0J3MgZXZlbiB3b3JzZSwgdGhleSBkbyBu
b3QgcHJvdmlkZQotICAvLyB0aGVtIGZvciBvbmx5IGEgZmV3IGl0ZXJhdG9ycy4pCi0gIC8vCi0g
IC8vID8/IE1heWJlIGEgQk9PU1RfSVRFUkFUT1JfTk9fRlVMTF9JTlRFUk9QRVJBQklMSVRZIG1h
Y3JvIHNob3VsZAotICAvLyAgICBlbmFibGUgdGhlIHVzZXIgdG8gdHVybiBvZmYgbWl4ZWQgdHlw
ZSBvcGVyYXRvcnMKLSAgLy8KLSAgLy8gVGhlIGxpYnJhcnkgdGFrZXMgY2FyZSB0byBwcm92aWRl
IG9ubHkgdGhlIHJpZ2h0IG9wZXJhdG9yIG92ZXJsb2Fkcy4KLSAgLy8gSS5lLgotICAvLwotICAv
LyBib29sIG9wZXJhdG9yPT0oSXRlcmF0b3IsICAgICAgSXRlcmF0b3IpOwotICAvLyBib29sIG9w
ZXJhdG9yPT0oQ29uc3RJdGVyYXRvciwgSXRlcmF0b3IpOwotICAvLyBib29sIG9wZXJhdG9yPT0o
SXRlcmF0b3IsICAgICAgQ29uc3RJdGVyYXRvcik7Ci0gIC8vIGJvb2wgb3BlcmF0b3I9PShDb25z
dEl0ZXJhdG9yLCBDb25zdEl0ZXJhdG9yKTsKLSAgLy8KLSAgLy8gICAuLi4KLSAgLy8KLSAgLy8g
SW4gb3JkZXIgdG8gZG8gc28gaXQgdXNlcyBjKysgaWRpb21zIHRoYXQgYXJlIG5vdCB5ZXQgd2lk
ZWx5IHN1cHBvcnRlZAotICAvLyBieSBjdXJyZW50IGNvbXBpbGVyIHJlbGVhc2VzLiBUaGUgbGli
cmFyeSBpcyBkZXNpZ25lZCB0byBkZWdyYWRlIGdyYWNlZnVsbHkKLSAgLy8gaW4gdGhlIGZhY2Ug
b2YgY29tcGlsZXIgZGVmaWNpZW5jaWVzLiBJbiBnZW5lcmFsIGNvbXBpbGVyCi0gIC8vIGRlZmlj
aWVuY2llcyByZXN1bHQgaW4gbGVzcyBzdHJpY3QgZXJyb3IgY2hlY2tpbmcgYW5kIG1vcmUgb2Jz
Y3VyZQotICAvLyBlcnJvciBtZXNzYWdlcywgZnVuY3Rpb25hbGl0eSBpcyBub3QgYWZmZWN0ZWQu
Ci0gIC8vCi0gIC8vIEZvciBmdWxsIG9wZXJhdGlvbiBjb21waWxlciBzdXBwb3J0IGZvciAiU3Vi
c3RpdHV0aW9uIEZhaWx1cmUgSXMgTm90IEFuIEVycm9yIgotICAvLyAoYWthLiBlbmFibGVfaWYp
IGFuZCBib29zdDo6aXNfY29udmVydGlibGUgaXMgcmVxdWlyZWQuCi0gIC8vCi0gIC8vIFRoZSBm
b2xsb3dpbmcgcHJvYmxlbXMgb2NjdXIgaWYgc3VwcG9ydCBpcyBsYWNraW5nLgotICAvLwotICAv
LyBQc2V1ZG8gY29kZQotICAvLwotICAvLyAtLS0tLS0tLS0tLS0tLS0KLSAgLy8gQWRhcHRvckE8
SXRlcmF0b3IxPiBhMTsKLSAgLy8gQWRhcHRvckE8SXRlcmF0b3IyPiBhMjsKLSAgLy8KLSAgLy8g
Ly8gVGhpcyB3aWxsIHJlc3VsdCBpbiBhIG5vIHN1Y2ggb3ZlcmxvYWQgZXJyb3IgaW4gZnVsbCBv
cGVyYXRpb24KLSAgLy8gLy8gSWYgZW5hYmxlX2lmIG9yIGlzX2NvbnZlcnRpYmxlIGlzIG5vdCBz
dXBwb3J0ZWQKLSAgLy8gLy8gVGhlIGluc3RhbnRpYXRpb24gd2lsbCBmYWlsIHdpdGggYW4gZXJy
b3IgaG9wZWZ1bGx5IGluZGljYXRpbmcgdGhhdAotICAvLyAvLyB0aGVyZSBpcyBubyBvcGVyYXRv
cj09IGZvciBJdGVyYXRvcjEsIEl0ZXJhdG9yMgotICAvLyAvLyBUaGUgc2FtZSB3aWxsIGhhcHBl
biBpZiBubyBlbmFibGVfaWYgaXMgdXNlZCB0byByZW1vdmUKLSAgLy8gLy8gZmFsc2Ugb3Zlcmxv
YWRzIGZyb20gdGhlIHRlbXBsYXRlZCBjb252ZXJzaW9uIGNvbnN0cnVjdG9yCi0gIC8vIC8vIG9m
IEFkYXB0b3JBLgotICAvLwotICAvLyBhMSA9PSBhMjsKLSAgLy8gLS0tLS0tLS0tLS0tLS0tLQot
ICAvLwotICAvLyBBZGFwdG9yQTxJdGVyYXRvcj4gYTsKLSAgLy8gQWRhcHRvckI8SXRlcmF0b3I+
IGI7Ci0gIC8vCi0gIC8vIC8vIFRoaXMgd2lsbCByZXN1bHQgaW4gYSBubyBzdWNoIG92ZXJsb2Fk
IGVycm9yIGluIGZ1bGwgb3BlcmF0aW9uCi0gIC8vIC8vIElmIGVuYWJsZV9pZiBpcyBub3Qgc3Vw
cG9ydGVkIHRoZSBzdGF0aWMgYXNzZXJ0IHVzZWQKLSAgLy8gLy8gaW4gdGhlIG9wZXJhdG9yIGlt
cGxlbWVudGF0aW9uIHdpbGwgZmFpbC4KLSAgLy8gLy8gVGhpcyB3aWxsIGFjY2lkZW50bHkgd29y
ayBpZiBpc19jb252ZXJ0aWJsZSBpcyBub3Qgc3VwcG9ydGVkLgotICAvLwotICAvLyBhID09IGI7
Ci0gIC8vIC0tLS0tLS0tLS0tLS0tLS0KLSAgLy8KLQotIyBpZmRlZiBCT09TVF9OT19PTkVfV0FZ
X0lURVJBVE9SX0lOVEVST1AKLSMgIGRlZmluZSBCT09TVF9JVEVSQVRPUl9DT05WRVJUSUJMRShh
LGIpIG1wbDo6dHJ1ZV8oKQotIyBlbHNlCi0jICBkZWZpbmUgQk9PU1RfSVRFUkFUT1JfQ09OVkVS
VElCTEUoYSxiKSBpc19jb252ZXJ0aWJsZTxhLGI+KCkKLSMgZW5kaWYKLQotIyBkZWZpbmUgQk9P
U1RfSVRFUkFUT1JfRkFDQURFX0lOVEVST1Aob3AsIHJlc3VsdF90eXBlLCByZXR1cm5fcHJlZml4
LCBiYXNlX29wKSBcCi0gIEJPT1NUX0lURVJBVE9SX0ZBQ0FERV9JTlRFUk9QX0hFQUQoaW5saW5l
LCBvcCwgcmVzdWx0X3R5cGUpICAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgLyogRm9yIHRob3NlIGNvbXBpbGVycyB0aGF0IGRvIG5vdCBzdXBwb3J0
IGVuYWJsZV9pZiAqLyAgICAgICAgICAgICAgICAgICBcCi0gICAgICBCT09TVF9TVEFUSUNfQVNT
RVJUKCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICBpc19pbnRlcm9wZXJhYmxlPCBEZXJpdmVkMSwgRGVyaXZlZDIgPjo6dmFs
dWUgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICByZXR1cm5fcHJlZml4IGl0ZXJhdG9yX2NvcmVfYWNjZXNzOjpiYXNlX29wKCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAqc3RhdGljX2Nhc3Q8RGVyaXZlZDEg
Y29uc3QqPigmbGhzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAsICpzdGF0aWNfY2FzdDxEZXJpdmVkMiBjb25zdCo+KCZyaHMpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICwgQk9PU1RfSVRFUkFUT1JfQ09OVkVSVElCTEUo
RGVyaXZlZDIsRGVyaXZlZDEpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICB9Ci0KLSMgZGVmaW5lIEJPT1NUX0lURVJBVE9SX0ZBQ0FERV9SRUxB
VElPTihvcCwgcmV0dXJuX3ByZWZpeCwgYmFzZV9vcCkgXAotICBCT09TVF9JVEVSQVRPUl9GQUNB
REVfSU5URVJPUCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBv
cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAsIGJvb3N0OjppdGVyYXRvcnM6OmRldGFpbDo6YWx3YXlzX2Jvb2wyICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgLCByZXR1cm5fcHJlZml4ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAsIGJhc2Vf
b3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICApCi0KLSAgQk9PU1RfSVRFUkFUT1JfRkFDQURFX1JFTEFUSU9OKD09LCByZXR1cm4sIGVx
dWFsKQotICBCT09TVF9JVEVSQVRPUl9GQUNBREVfUkVMQVRJT04oIT0sIHJldHVybiAhLCBlcXVh
bCkKLQotIyB1bmRlZiBCT09TVF9JVEVSQVRPUl9GQUNBREVfUkVMQVRJT04KLQotCi0jIGRlZmlu
ZSBCT09TVF9JVEVSQVRPUl9GQUNBREVfSU5URVJPUF9SQU5ET01fQUNDRVNTKG9wLCByZXN1bHRf
dHlwZSwgcmV0dXJuX3ByZWZpeCwgYmFzZV9vcCkgXAotICBCT09TVF9JVEVSQVRPUl9GQUNBREVf
SU5URVJPUF9SQU5ET01fQUNDRVNTX0hFQUQoaW5saW5lLCBvcCwgcmVzdWx0X3R5cGUpICAgICAg
ICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgLyogRm9yIHRo
b3NlIGNvbXBpbGVycyB0aGF0IGRvIG5vdCBzdXBwb3J0IGVuYWJsZV9pZiAqLyAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICBCT09TVF9TVEFUSUNfQVNTRVJUKCggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBpc19pbnRlcm9w
ZXJhYmxlPCBEZXJpdmVkMSwgRGVyaXZlZDIgPjo6dmFsdWUgJiYgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgIGJvb3N0OjppdGVyYXRvcnM6OmRldGFpbDo6aXNfdHJhdmVyc2FsX2F0
X2xlYXN0PCB0eXBlbmFtZSBpdGVyYXRvcl9jYXRlZ29yeTwgRGVyaXZlZDEgPjo6dHlwZSwgcmFu
ZG9tX2FjY2Vzc190cmF2ZXJzYWxfdGFnID46OnZhbHVlICYmIFwKLSAgICAgICAgICBib29zdDo6
aXRlcmF0b3JzOjpkZXRhaWw6OmlzX3RyYXZlcnNhbF9hdF9sZWFzdDwgdHlwZW5hbWUgaXRlcmF0
b3JfY2F0ZWdvcnk8IERlcml2ZWQyID46OnR5cGUsIHJhbmRvbV9hY2Nlc3NfdHJhdmVyc2FsX3Rh
ZyA+Ojp2YWx1ZSBcCi0gICAgICApKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJldHVybl9wcmVm
aXggaXRlcmF0b3JfY29yZV9hY2Nlc3M6OmJhc2Vfb3AoICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICpzdGF0aWNfY2FzdDxEZXJpdmVkMSBjb25zdCo+KCZsaHMpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICwgKnN0YXRpY19jYXN0
PERlcml2ZWQyIGNvbnN0Kj4oJnJocykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgLCBCT09TVF9JVEVSQVRPUl9DT05WRVJUSUJMRShEZXJpdmVkMixEZXJpdmVk
MSkgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IH0KLQotIyBkZWZpbmUgQk9PU1RfSVRFUkFUT1JfRkFDQURFX1JBTkRPTV9BQ0NFU1NfUkVMQVRJ
T04ob3AsIHJldHVybl9wcmVmaXgsIGJhc2Vfb3ApIFwKLSAgQk9PU1RfSVRFUkFUT1JfRkFDQURF
X0lOVEVST1BfUkFORE9NX0FDQ0VTUyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICBvcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAsIGJvb3N0OjppdGVyYXRvcnM6OmRldGFpbDo6YWx3YXlz
X2Jvb2wyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgLCByZXR1cm5f
cHJlZml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAsIGJhc2Vfb3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICApCi0KLSAgQk9PU1RfSVRFUkFUT1JfRkFDQURFX1JBTkRPTV9BQ0NF
U1NfUkVMQVRJT04oPCwgcmV0dXJuIDAgPiwgZGlzdGFuY2VfZnJvbSkKLSAgQk9PU1RfSVRFUkFU
T1JfRkFDQURFX1JBTkRPTV9BQ0NFU1NfUkVMQVRJT04oPiwgcmV0dXJuIDAgPCwgZGlzdGFuY2Vf
ZnJvbSkKLSAgQk9PU1RfSVRFUkFUT1JfRkFDQURFX1JBTkRPTV9BQ0NFU1NfUkVMQVRJT04oPD0s
IHJldHVybiAwID49LCBkaXN0YW5jZV9mcm9tKQotICBCT09TVF9JVEVSQVRPUl9GQUNBREVfUkFO
RE9NX0FDQ0VTU19SRUxBVElPTig+PSwgcmV0dXJuIDAgPD0sIGRpc3RhbmNlX2Zyb20pCi0KLSMg
dW5kZWYgQk9PU1RfSVRFUkFUT1JfRkFDQURFX1JBTkRPTV9BQ0NFU1NfUkVMQVRJT04KLQotICAv
LyBvcGVyYXRvci0gcmVxdWlyZXMgYW4gYWRkaXRpb25hbCBwYXJ0IGluIHRoZSBzdGF0aWMgYXNz
ZXJ0aW9uCi0gIEJPT1NUX0lURVJBVE9SX0ZBQ0FERV9JTlRFUk9QX1JBTkRPTV9BQ0NFU1MoCi0g
ICAgICAtCi0gICAgLCBib29zdDo6aXRlcmF0b3JzOjpkZXRhaWw6OmNob29zZV9kaWZmZXJlbmNl
X3R5cGUKLSAgICAsIHJldHVybgotICAgICwgZGlzdGFuY2VfZnJvbQotICApCi0KLSMgdW5kZWYg
Qk9PU1RfSVRFUkFUT1JfRkFDQURFX0lOVEVST1AKLSMgdW5kZWYgQk9PU1RfSVRFUkFUT1JfRkFD
QURFX0lOVEVST1BfUkFORE9NX0FDQ0VTUwotCi0jIGRlZmluZSBCT09TVF9JVEVSQVRPUl9GQUNB
REVfUExVUyhhcmdzKSAgICAgICAgICAgXAotICBCT09TVF9JVEVSQVRPUl9GQUNBREVfUExVU19I
RUFEKGlubGluZSwgYXJncykgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBEZXJpdmVkIHRtcChzdGF0aWNfY2FzdDxEZXJp
dmVkIGNvbnN0Jj4oaSkpOyAgXAotICAgICAgcmV0dXJuIHRtcCArPSBuOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgfQotCi0gIEJPT1NUX0lURVJBVE9SX0ZBQ0FERV9QTFVTKCgK
LSAgICAgIGl0ZXJhdG9yX2ZhY2FkZTxEZXJpdmVkLCBWLCBUQywgUiwgRD4gY29uc3QmIGkKLSAg
ICAsIHR5cGVuYW1lIERlcml2ZWQ6OmRpZmZlcmVuY2VfdHlwZSBuCi0gICkpCi0KLSAgQk9PU1Rf
SVRFUkFUT1JfRkFDQURFX1BMVVMoKAotICAgICAgdHlwZW5hbWUgRGVyaXZlZDo6ZGlmZmVyZW5j
ZV90eXBlIG4KLSAgICAsIGl0ZXJhdG9yX2ZhY2FkZTxEZXJpdmVkLCBWLCBUQywgUiwgRD4gY29u
c3QmIGkKLSAgKSkKLQotIyB1bmRlZiBCT09TVF9JVEVSQVRPUl9GQUNBREVfUExVUwotIyB1bmRl
ZiBCT09TVF9JVEVSQVRPUl9GQUNBREVfUExVU19IRUFECi0KLSMgdW5kZWYgQk9PU1RfSVRFUkFU
T1JfRkFDQURFX0lOVEVST1BfSEVBRAotIyB1bmRlZiBCT09TVF9JVEVSQVRPUl9GQUNBREVfSU5U
RVJPUF9SQU5ET01fQUNDRVNTX0hFQUQKLSMgdW5kZWYgQk9PU1RfSVRFUkFUT1JfRkFDQURFX0lO
VEVST1BfSEVBRF9JTVBMCi0KLX0gLy8gbmFtZXNwYWNlIGl0ZXJhdG9ycwotCi11c2luZyBpdGVy
YXRvcnM6Oml0ZXJhdG9yX2NvcmVfYWNjZXNzOwotdXNpbmcgaXRlcmF0b3JzOjppdGVyYXRvcl9m
YWNhZGU7Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNpbmNsdWRlIDxib29zdC9pdGVyYXRv
ci9kZXRhaWwvY29uZmlnX3VuZGVmLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX0lURVJBVE9SX0ZB
Q0FERV8yMzAyMjAwM1RIV19IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L2l0ZXJhdG9yL2l0ZXJhdG9yX3RyYWl0cy5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9pdGVyYXRvci9pdGVyYXRvcl90cmFp
dHMuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTVmMWUwZDYwNDUwNGQ1YTA3
YjZiNTQ0NDBkZTg0Y2RkOTViYzZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L2l0
ZXJhdG9yL2l0ZXJhdG9yX3RyYWl0cy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBA
Ci0vLyBDb3B5cmlnaHQgRGF2aWQgQWJyYWhhbXMgMjAwMy4KLS8vIERpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotLy8gYWNjb21w
YW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSNpZm5kZWYgSVRFUkFUT1JfVFJBSVRTX0RXQTIwMDM0
N19IUFAKLSMgZGVmaW5lIElURVJBVE9SX1RSQUlUU19EV0EyMDAzNDdfSFBQCi0KLSMgaW5jbHVk
ZSA8Ym9vc3QvZGV0YWlsL2l0ZXJhdG9yLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL3dv
cmthcm91bmQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIGl0ZXJhdG9ycyB7
Ci0KLS8vIE1hY3JvIGZvciBzdXBwb3J0aW5nIG9sZCBjb21waWxlcnMsIG5vIGxvbmdlciBuZWVk
ZWQgYnV0IGtlcHQKLS8vIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAoaXQgd2FzIGRvY3Vt
ZW50ZWQpLgotI2RlZmluZSBCT09TVF9JVEVSQVRPUl9DQVRFR09SWSBpdGVyYXRvcl9jYXRlZ29y
eQotCi0KLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4KLXN0cnVjdCBpdGVyYXRvcl92YWx1ZQot
ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEl0
ZXJhdG9yPjo6dmFsdWVfdHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9y
Pgotc3RydWN0IGl0ZXJhdG9yX3JlZmVyZW5jZQotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9v
c3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6cmVmZXJlbmNlIHR5cGU7Ci19
OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4KLXN0cnVjdCBpdGVyYXRvcl9wb2ludGVy
Ci17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjppdGVyYXRvcl90cmFpdHM8
SXRlcmF0b3I+Ojpwb2ludGVyIHR5cGU7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+
Ci1zdHJ1Y3QgaXRlcmF0b3JfZGlmZmVyZW5jZQotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9v
c3Q6OmRldGFpbDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIHR5
cGU7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+Ci1zdHJ1Y3QgaXRlcmF0b3JfY2F0
ZWdvcnkKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0OjpkZXRhaWw6Oml0ZXJhdG9yX3Ry
YWl0czxJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IHR5cGU7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBpdGVyYXRvcnMKLQotdXNpbmcgaXRlcmF0b3JzOjppdGVyYXRvcl92YWx1ZTsKLXVzaW5n
IGl0ZXJhdG9yczo6aXRlcmF0b3JfcmVmZXJlbmNlOwotdXNpbmcgaXRlcmF0b3JzOjppdGVyYXRv
cl9wb2ludGVyOwotdXNpbmcgaXRlcmF0b3JzOjppdGVyYXRvcl9kaWZmZXJlbmNlOwotdXNpbmcg
aXRlcmF0b3JzOjppdGVyYXRvcl9jYXRlZ29yeTsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQot
I2VuZGlmIC8vIElURVJBVE9SX1RSQUlUU19EV0EyMDAzNDdfSFBQCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9saW1pdHMuaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbGltaXRzLmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNDdkODE1NTYxMThjNDEyZTYwNzhhZmJiMDMyYjk1NTU2NGRh
MDU3MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9saW1pdHMuaHBwCisrKyAvZGV2
L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgSm9obiBtYWRkb2Nr
IDE5OTkuIAotLy8gIChDKSBEYXZpZCBBYnJhaGFtcyAyMDAyLiAgRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0Ci0vLyAgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21w
YW55aW5nIGZpbGUKLS8vICBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gdXNlIHRoaXMgaGVhZGVyIGFzIGEgd29y
a2Fyb3VuZCBmb3IgbWlzc2luZyA8bGltaXRzPgotCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL2xpYnMvY29tcGF0aWJpbGl0eS9pbmRleC5odG1sIGZvciBkb2N1bWVudGF0aW9uLgotCi0j
aWZuZGVmIEJPT1NUX0xJTUlUUwotI2RlZmluZSBCT09TVF9MSU1JVFMKLQotI2luY2x1ZGUgPGJv
b3N0L2NvbmZpZy5ocHA+Ci0KLSNpZmRlZiBCT09TVF9OT19MSU1JVFMKLSMgIGVycm9yICJUaGVy
ZSBpcyBubyBzdGQ6Om51bWVyaWNfbGltaXRzIHN1cHBwb3J0IGF2YWlsYWJsZS4iCi0jZWxzZQot
IyBpbmNsdWRlIDxsaW1pdHM+Ci0jZW5kaWYKLQotI2lmIChkZWZpbmVkKEJPT1NUX0hBU19MT05H
X0xPTkcpICYmIGRlZmluZWQoQk9PU1RfTk9fTE9OR19MT05HX05VTUVSSUNfTElNSVRTKSkgXAot
ICAgICAgfHwgKGRlZmluZWQoQk9PU1RfSEFTX01TX0lOVDY0KSAmJiBkZWZpbmVkKEJPT1NUX05P
X01TX0lOVDY0X05VTUVSSUNfTElNSVRTKSkKLS8vIEFkZCBtaXNzaW5nIHNwZWNpYWxpemF0aW9u
cyBmb3IgbnVtZXJpY19saW1pdHM6Ci0jaWZkZWYgQk9PU1RfSEFTX01TX0lOVDY0Ci0jICBkZWZp
bmUgQk9PU1RfTExUIF9faW50NjQKLSMgIGRlZmluZSBCT09TVF9VTExUIHVuc2lnbmVkIF9faW50
NjQKLSNlbHNlCi0jICBkZWZpbmUgQk9PU1RfTExUICA6OmJvb3N0Ojpsb25nX2xvbmdfdHlwZQot
IyAgZGVmaW5lIEJPT1NUX1VMTFQgIDo6Ym9vc3Q6OnVsb25nX2xvbmdfdHlwZQotI2VuZGlmCi0K
LSNpbmNsdWRlIDxjbGltaXRzPiAgLy8gZm9yIENIQVJfQklUCi0KLW5hbWVzcGFjZSBzdGQKLXsK
LSAgdGVtcGxhdGU8PgotICBjbGFzcyBudW1lcmljX2xpbWl0czxCT09TVF9MTFQ+IAotICB7Ci0g
ICBwdWJsaWM6Ci0KLSAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCBpc19zcGVjaWFs
aXplZCA9IHRydWUpOwotI2lmZGVmIEJPT1NUX0hBU19NU19JTlQ2NAotICAgICAgc3RhdGljIEJP
T1NUX0xMVCBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCl7IHJldHVybiAw
eDgwMDAwMDAwMDAwMDAwMDBpNjQ7IH0KLSAgICAgIHN0YXRpYyBCT09TVF9MTFQgbWF4IEJPT1NU
X1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpeyByZXR1cm4gMHg3RkZGRkZGRkZGRkZGRkZG
aTY0OyB9Ci0jZWxpZiBkZWZpbmVkKExMT05HX01BWCkKLSAgICAgIHN0YXRpYyBCT09TVF9MTFQg
bWluIEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpeyByZXR1cm4gTExPTkdfTUlO
OyB9Ci0gICAgICBzdGF0aWMgQk9PU1RfTExUIG1heCBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNU
SVRVVElPTiAoKXsgcmV0dXJuIExMT05HX01BWDsgfQotI2VsaWYgZGVmaW5lZChMT05HTE9OR19N
QVgpCi0gICAgICBzdGF0aWMgQk9PU1RfTExUIG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNU
SVRVVElPTiAoKXsgcmV0dXJuIExPTkdMT05HX01JTjsgfQotICAgICAgc3RhdGljIEJPT1NUX0xM
VCBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCl7IHJldHVybiBMT05HTE9O
R19NQVg7IH0KLSNlbHNlCi0gICAgICBzdGF0aWMgQk9PU1RfTExUIG1pbiBCT09TVF9QUkVWRU5U
X01BQ1JPX1NVQlNUSVRVVElPTiAoKXsgcmV0dXJuIDFMTCA8PCAoc2l6ZW9mKEJPT1NUX0xMVCkg
KiBDSEFSX0JJVCAtIDEpOyB9Ci0gICAgICBzdGF0aWMgQk9PU1RfTExUIG1heCBCT09TVF9QUkVW
RU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKXsgcmV0dXJuIH4obWluKSgpOyB9Ci0jZW5kaWYKLSAg
ICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIGRpZ2l0cyA9IHNpemVvZihCT09TVF9MTFQp
ICogQ0hBUl9CSVQgLTEpOwotICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwgZGlnaXRz
MTAgPSAoQ0hBUl9CSVQgKiBzaXplb2YgKEJPT1NUX0xMVCkgLSAxKSAqIDMwMUwgLyAxMDAwKTsK
LSAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCBpc19zaWduZWQgPSB0cnVlKTsKLSAg
ICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCBpc19pbnRlZ2VyID0gdHJ1ZSk7Ci0gICAg
ICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgaXNfZXhhY3QgPSB0cnVlKTsKLSAgICAgIEJP
T1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHJhZGl4ID0gMik7Ci0gICAgICBzdGF0aWMgQk9PU1Rf
TExUIGVwc2lsb24oKSB0aHJvdygpIHsgcmV0dXJuIDA7IH07Ci0gICAgICBzdGF0aWMgQk9PU1Rf
TExUIHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7IHJldHVybiAwOyB9OwotCi0gICAgICBCT09TVF9T
VEFUSUNfQ09OU1RBTlQoaW50LCBtaW5fZXhwb25lbnQgPSAwKTsKLSAgICAgIEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChpbnQsIG1pbl9leHBvbmVudDEwID0gMCk7Ci0gICAgICBCT09TVF9TVEFUSUNf
Q09OU1RBTlQoaW50LCBtYXhfZXhwb25lbnQgPSAwKTsKLSAgICAgIEJPT1NUX1NUQVRJQ19DT05T
VEFOVChpbnQsIG1heF9leHBvbmVudDEwID0gMCk7Ci0KLSAgICAgIEJPT1NUX1NUQVRJQ19DT05T
VEFOVChib29sLCBoYXNfaW5maW5pdHkgPSBmYWxzZSk7Ci0gICAgICBCT09TVF9TVEFUSUNfQ09O
U1RBTlQoYm9vbCwgaGFzX3F1aWV0X05hTiA9IGZhbHNlKTsKLSAgICAgIEJPT1NUX1NUQVRJQ19D
T05TVEFOVChib29sLCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlKTsKLSAgICAgIEJPT1NUX1NU
QVRJQ19DT05TVEFOVChib29sLCBoYXNfZGVub3JtID0gZmFsc2UpOwotICAgICAgQk9PU1RfU1RB
VElDX0NPTlNUQU5UKGJvb2wsIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlKTsKLSAgICAgIHN0YXRp
YyBCT09TVF9MTFQgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIDA7IH07Ci0gICAgICBzdGF0
aWMgQk9PU1RfTExUIHF1aWV0X05hTigpIHRocm93KCkgeyByZXR1cm4gMDsgfTsKLSAgICAgIHN0
YXRpYyBCT09TVF9MTFQgc2lnbmFsaW5nX05hTigpIHRocm93KCkgeyByZXR1cm4gMDsgfTsKLSAg
ICAgIHN0YXRpYyBCT09TVF9MTFQgZGVub3JtX21pbigpIHRocm93KCkgeyByZXR1cm4gMDsgfTsK
LQotICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIGlzX2llYzU1OSA9IGZhbHNlKTsK
LSAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCBpc19ib3VuZGVkID0gdHJ1ZSk7Ci0g
ICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgaXNfbW9kdWxvID0gdHJ1ZSk7Ci0KLSAg
ICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB0cmFwcyA9IGZhbHNlKTsKLSAgICAgIEJP
T1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZSk7Ci0gICAg
ICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoZmxvYXRfcm91bmRfc3R5bGUsIHJvdW5kX3N0eWxlID0g
cm91bmRfdG93YXJkX3plcm8pOwotICAgICAgCi0gIH07Ci0KLSAgdGVtcGxhdGU8PgotICBjbGFz
cyBudW1lcmljX2xpbWl0czxCT09TVF9VTExUPiAKLSAgewotICAgcHVibGljOgotCi0gICAgICBC
T09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlKTsKLSNpZmRl
ZiBCT09TVF9IQVNfTVNfSU5UNjQKLSAgICAgIHN0YXRpYyBCT09TVF9VTExUIG1pbiBCT09TVF9Q
UkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKXsgcmV0dXJuIDB1aTY0OyB9Ci0gICAgICBzdGF0
aWMgQk9PU1RfVUxMVCBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCl7IHJl
dHVybiAweEZGRkZGRkZGRkZGRkZGRkZ1aTY0OyB9Ci0jZWxpZiBkZWZpbmVkKFVMTE9OR19NQVgp
ICYmIGRlZmluZWQoVUxMT05HX01JTikKLSAgICAgIHN0YXRpYyBCT09TVF9VTExUIG1pbiBCT09T
VF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKXsgcmV0dXJuIFVMTE9OR19NSU47IH0KLSAg
ICAgIHN0YXRpYyBCT09TVF9VTExUIG1heCBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElP
TiAoKXsgcmV0dXJuIFVMTE9OR19NQVg7IH0KLSNlbGlmIGRlZmluZWQoVUxPTkdMT05HX01BWCkg
JiYgZGVmaW5lZChVTE9OR0xPTkdfTUlOKQotICAgICAgc3RhdGljIEJPT1NUX1VMTFQgbWluIEJP
T1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpeyByZXR1cm4gVUxPTkdMT05HX01JTjsg
fQotICAgICAgc3RhdGljIEJPT1NUX1VMTFQgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJ
VFVUSU9OICgpeyByZXR1cm4gVUxPTkdMT05HX01BWDsgfQotI2Vsc2UKLSAgICAgIHN0YXRpYyBC
T09TVF9VTExUIG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKXsgcmV0dXJu
IDB1TEw7IH0KLSAgICAgIHN0YXRpYyBCT09TVF9VTExUIG1heCBCT09TVF9QUkVWRU5UX01BQ1JP
X1NVQlNUSVRVVElPTiAoKXsgcmV0dXJuIH4wdUxMOyB9Ci0jZW5kaWYKLSAgICAgIEJPT1NUX1NU
QVRJQ19DT05TVEFOVChpbnQsIGRpZ2l0cyA9IHNpemVvZihCT09TVF9MTFQpICogQ0hBUl9CSVQp
OwotICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwgZGlnaXRzMTAgPSAoQ0hBUl9CSVQg
KiBzaXplb2YgKEJPT1NUX0xMVCkpICogMzAxTCAvIDEwMDApOwotICAgICAgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKGJvb2wsIGlzX3NpZ25lZCA9IGZhbHNlKTsKLSAgICAgIEJPT1NUX1NUQVRJQ19D
T05TVEFOVChib29sLCBpc19pbnRlZ2VyID0gdHJ1ZSk7Ci0gICAgICBCT09TVF9TVEFUSUNfQ09O
U1RBTlQoYm9vbCwgaXNfZXhhY3QgPSB0cnVlKTsKLSAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFO
VChpbnQsIHJhZGl4ID0gMik7Ci0gICAgICBzdGF0aWMgQk9PU1RfVUxMVCBlcHNpbG9uKCkgdGhy
b3coKSB7IHJldHVybiAwOyB9OwotICAgICAgc3RhdGljIEJPT1NUX1VMTFQgcm91bmRfZXJyb3Io
KSB0aHJvdygpIHsgcmV0dXJuIDA7IH07Ci0KLSAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChp
bnQsIG1pbl9leHBvbmVudCA9IDApOwotICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwg
bWluX2V4cG9uZW50MTAgPSAwKTsKLSAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIG1h
eF9leHBvbmVudCA9IDApOwotICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwgbWF4X2V4
cG9uZW50MTAgPSAwKTsKLQotICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIGhhc19p
bmZpbml0eSA9IGZhbHNlKTsKLSAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCBoYXNf
cXVpZXRfTmFOID0gZmFsc2UpOwotICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIGhh
c19zaWduYWxpbmdfTmFOID0gZmFsc2UpOwotICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJv
b2wsIGhhc19kZW5vcm0gPSBmYWxzZSk7Ci0gICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9v
bCwgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2UpOwotICAgICAgc3RhdGljIEJPT1NUX1VMTFQgaW5m
aW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIDA7IH07Ci0gICAgICBzdGF0aWMgQk9PU1RfVUxMVCBx
dWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIDA7IH07Ci0gICAgICBzdGF0aWMgQk9PU1RfVUxM
VCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVybiAwOyB9OwotICAgICAgc3RhdGljIEJP
T1NUX1VMTFQgZGVub3JtX21pbigpIHRocm93KCkgeyByZXR1cm4gMDsgfTsKLQotICAgICAgQk9P
U1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIGlzX2llYzU1OSA9IGZhbHNlKTsKLSAgICAgIEJPT1NU
X1NUQVRJQ19DT05TVEFOVChib29sLCBpc19ib3VuZGVkID0gdHJ1ZSk7Ci0gICAgICBCT09TVF9T
VEFUSUNfQ09OU1RBTlQoYm9vbCwgaXNfbW9kdWxvID0gdHJ1ZSk7Ci0KLSAgICAgIEJPT1NUX1NU
QVRJQ19DT05TVEFOVChib29sLCB0cmFwcyA9IGZhbHNlKTsKLSAgICAgIEJPT1NUX1NUQVRJQ19D
T05TVEFOVChib29sLCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZSk7Ci0gICAgICBCT09TVF9TVEFU
SUNfQ09OU1RBTlQoZmxvYXRfcm91bmRfc3R5bGUsIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJk
X3plcm8pOwotICAgICAgCi0gIH07Ci19Ci0jZW5kaWYgCi0KLSNlbmRpZgotCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tYXRoL3BvbGljaWVz
L3BvbGljeS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
YXRoL3BvbGljaWVzL3BvbGljeS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMx
ZTFhN2JlNGE0YWZkNjg4OGQxZjRiMTkwMTAxZDA1Y2JmZmQxYzIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvbWF0aC9wb2xpY2llcy9wb2xpY3kuaHBwCisrKyAvZGV2L251bGwKQEAg
LTEsMTA0MCArMCwwIEBACi0vLyAgQ29weXJpZ2h0IEpvaG4gTWFkZG9jayAyMDA3LgotLy8gIFVz
ZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlCi0vLyAg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZp
bGUKLS8vICBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpCi0KLSNpZm5kZWYgQk9PU1RfTUFUSF9QT0xJQ1lfSFBQCi0jZGVmaW5l
IEJPT1NUX01BVEhfUE9MSUNZX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2xpc3QuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L21wbC9jb250YWlucy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2lm
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvZmluZF9pZi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL3JlbW92ZV9pZi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL3ZlY3Rvci5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvbXBsL3B1c2hfYmFjay5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F0Lmhw
cD4KLSNpbmNsdWRlIDxib29zdC9tcGwvc2l6ZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2Nv
bXBhcmlzb24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L3N0YXRpY19hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2Fzc2Vy
dC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbWF0aC90b29scy9jb25maWcuaHBwPgotI2luY2x1ZGUg
PGxpbWl0cz4KLS8vIFNhZGx5IHdlIGRvIG5lZWQgdGhlIC5oIHZlcnNpb25zIG9mIHRoZXNlIHRv
IGJlIHN1cmUgb2YgZ2V0dGluZwotLy8gRkxUX01BTlRfRElHIGV0Yy4KLSNpbmNsdWRlIDxsaW1p
dHMuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRl
IDxtYXRoLmg+Ci0KLW5hbWVzcGFjZSBib29zdHsgbmFtZXNwYWNlIG1hdGh7IAotCi1uYW1lc3Bh
Y2UgdG9vbHN7Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotQk9PU1RfTUFUSF9DT05TVEVYUFIgaW50
IGRpZ2l0cyhCT09TVF9NQVRIX0VYUExJQ0lUX1RFTVBMQVRFX1RZUEUoVCkpIEJPT1NUX05PRVhD
RVBUOwotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1CT09TVF9NQVRIX0NPTlNURVhQUiBUIGVwc2lsb24o
Qk9PU1RfTUFUSF9FWFBMSUNJVF9URU1QTEFURV9UWVBFKFQpKSBCT09TVF9NQVRIX05PRVhDRVBU
KFQpOwotCi19Ci0KLW5hbWVzcGFjZSBwb2xpY2llc3sKLQotLy8KLS8vIERlZmluZSBtYWNyb3Mg
Zm9yIG91ciBkZWZhdWx0IHBvbGljaWVzLCBpZiB0aGV5J3JlIG5vdCBkZWZpbmVkIGFscmVhZHk6
Ci0vLwotLy8gU3BlY2lhbCBjYXNlcyBmb3IgZXhjZXB0aW9ucyBkaXNhYmxlZCBmaXJzdDoKLS8v
Ci0jaWZkZWYgQk9PU1RfTk9fRVhDRVBUSU9OUwotIyAgaWZuZGVmIEJPT1NUX01BVEhfRE9NQUlO
X0VSUk9SX1BPTElDWQotIyAgICBkZWZpbmUgQk9PU1RfTUFUSF9ET01BSU5fRVJST1JfUE9MSUNZ
IGVycm5vX29uX2Vycm9yCi0jICBlbmRpZgotIyAgaWZuZGVmIEJPT1NUX01BVEhfUE9MRV9FUlJP
Ul9QT0xJQ1kKLSMgICAgIGRlZmluZSBCT09TVF9NQVRIX1BPTEVfRVJST1JfUE9MSUNZIGVycm5v
X29uX2Vycm9yCi0jICBlbmRpZgotIyAgaWZuZGVmIEJPT1NUX01BVEhfT1ZFUkZMT1dfRVJST1Jf
UE9MSUNZCi0jICAgICBkZWZpbmUgQk9PU1RfTUFUSF9PVkVSRkxPV19FUlJPUl9QT0xJQ1kgZXJy
bm9fb25fZXJyb3IKLSMgIGVuZGlmCi0jICBpZm5kZWYgQk9PU1RfTUFUSF9FVkFMVUFUSU9OX0VS
Uk9SX1BPTElDWQotIyAgICAgZGVmaW5lIEJPT1NUX01BVEhfRVZBTFVBVElPTl9FUlJPUl9QT0xJ
Q1kgZXJybm9fb25fZXJyb3IKLSMgIGVuZGlmCi0jICBpZm5kZWYgQk9PU1RfTUFUSF9ST1VORElO
R19FUlJPUl9QT0xJQ1kKLSMgICAgIGRlZmluZSBCT09TVF9NQVRIX1JPVU5ESU5HX0VSUk9SX1BP
TElDWSBlcnJub19vbl9lcnJvcgotIyAgZW5kaWYKLSNlbmRpZgotLy8KLS8vIFRoZW4gdGhlIHJl
Z3VsYXIgY2FzZXM6Ci0vLwotI2lmbmRlZiBCT09TVF9NQVRIX0RPTUFJTl9FUlJPUl9QT0xJQ1kK
LSNkZWZpbmUgQk9PU1RfTUFUSF9ET01BSU5fRVJST1JfUE9MSUNZIHRocm93X29uX2Vycm9yCi0j
ZW5kaWYKLSNpZm5kZWYgQk9PU1RfTUFUSF9QT0xFX0VSUk9SX1BPTElDWQotI2RlZmluZSBCT09T
VF9NQVRIX1BPTEVfRVJST1JfUE9MSUNZIHRocm93X29uX2Vycm9yCi0jZW5kaWYKLSNpZm5kZWYg
Qk9PU1RfTUFUSF9PVkVSRkxPV19FUlJPUl9QT0xJQ1kKLSNkZWZpbmUgQk9PU1RfTUFUSF9PVkVS
RkxPV19FUlJPUl9QT0xJQ1kgdGhyb3dfb25fZXJyb3IKLSNlbmRpZgotI2lmbmRlZiBCT09TVF9N
QVRIX0VWQUxVQVRJT05fRVJST1JfUE9MSUNZCi0jZGVmaW5lIEJPT1NUX01BVEhfRVZBTFVBVElP
Tl9FUlJPUl9QT0xJQ1kgdGhyb3dfb25fZXJyb3IKLSNlbmRpZgotI2lmbmRlZiBCT09TVF9NQVRI
X1JPVU5ESU5HX0VSUk9SX1BPTElDWQotI2RlZmluZSBCT09TVF9NQVRIX1JPVU5ESU5HX0VSUk9S
X1BPTElDWSB0aHJvd19vbl9lcnJvcgotI2VuZGlmCi0jaWZuZGVmIEJPT1NUX01BVEhfVU5ERVJG
TE9XX0VSUk9SX1BPTElDWQotI2RlZmluZSBCT09TVF9NQVRIX1VOREVSRkxPV19FUlJPUl9QT0xJ
Q1kgaWdub3JlX2Vycm9yCi0jZW5kaWYKLSNpZm5kZWYgQk9PU1RfTUFUSF9ERU5PUk1fRVJST1Jf
UE9MSUNZCi0jZGVmaW5lIEJPT1NUX01BVEhfREVOT1JNX0VSUk9SX1BPTElDWSBpZ25vcmVfZXJy
b3IKLSNlbmRpZgotI2lmbmRlZiBCT09TVF9NQVRIX0lOREVURVJNSU5BVEVfUkVTVUxUX0VSUk9S
X1BPTElDWQotI2RlZmluZSBCT09TVF9NQVRIX0lOREVURVJNSU5BVEVfUkVTVUxUX0VSUk9SX1BP
TElDWSBpZ25vcmVfZXJyb3IKLSNlbmRpZgotI2lmbmRlZiBCT09TVF9NQVRIX0RJR0lUUzEwX1BP
TElDWQotI2RlZmluZSBCT09TVF9NQVRIX0RJR0lUUzEwX1BPTElDWSAwCi0jZW5kaWYKLSNpZm5k
ZWYgQk9PU1RfTUFUSF9QUk9NT1RFX0ZMT0FUX1BPTElDWQotI2RlZmluZSBCT09TVF9NQVRIX1BS
T01PVEVfRkxPQVRfUE9MSUNZIHRydWUKLSNlbmRpZgotI2lmbmRlZiBCT09TVF9NQVRIX1BST01P
VEVfRE9VQkxFX1BPTElDWQotI2lmZGVmIEJPT1NUX01BVEhfTk9fTE9OR19ET1VCTEVfTUFUSF9G
VU5DVElPTlMKLSNkZWZpbmUgQk9PU1RfTUFUSF9QUk9NT1RFX0RPVUJMRV9QT0xJQ1kgZmFsc2UK
LSNlbHNlCi0jZGVmaW5lIEJPT1NUX01BVEhfUFJPTU9URV9ET1VCTEVfUE9MSUNZIHRydWUKLSNl
bmRpZgotI2VuZGlmCi0jaWZuZGVmIEJPT1NUX01BVEhfRElTQ1JFVEVfUVVBTlRJTEVfUE9MSUNZ
Ci0jZGVmaW5lIEJPT1NUX01BVEhfRElTQ1JFVEVfUVVBTlRJTEVfUE9MSUNZIGludGVnZXJfcm91
bmRfb3V0d2FyZHMKLSNlbmRpZgotI2lmbmRlZiBCT09TVF9NQVRIX0FTU0VSVF9VTkRFRklORURf
UE9MSUNZCi0jZGVmaW5lIEJPT1NUX01BVEhfQVNTRVJUX1VOREVGSU5FRF9QT0xJQ1kgdHJ1ZQot
I2VuZGlmCi0jaWZuZGVmIEJPT1NUX01BVEhfTUFYX1NFUklFU19JVEVSQVRJT05fUE9MSUNZCi0j
ZGVmaW5lIEJPT1NUX01BVEhfTUFYX1NFUklFU19JVEVSQVRJT05fUE9MSUNZIDEwMDAwMDAKLSNl
bmRpZgotI2lmbmRlZiBCT09TVF9NQVRIX01BWF9ST09UX0lURVJBVElPTl9QT0xJQ1kKLSNkZWZp
bmUgQk9PU1RfTUFUSF9NQVhfUk9PVF9JVEVSQVRJT05fUE9MSUNZIDIwMAotI2VuZGlmCi0KLSNp
ZiAhZGVmaW5lZChfX0JPUkxBTkRDX18pCi0jZGVmaW5lIEJPT1NUX01BVEhfTUVUQV9JTlQodHlw
ZSwgbmFtZSwgRGVmYXVsdClcCi0gICB0ZW1wbGF0ZSA8dHlwZSBOID0gRGVmYXVsdD4gc3RydWN0
IG5hbWUgOiBwdWJsaWMgYm9vc3Q6Om1wbDo6aW50XzxOPnt9O1wKLSAgIG5hbWVzcGFjZSBkZXRh
aWx7XAotICAgdGVtcGxhdGUgPHR5cGUgTj5cCi0gICBjaGFyIHRlc3RfaXNfdmFsaWRfYXJnKGNv
bnN0IG5hbWU8Tj4qKTtcCi0gICBjaGFyIHRlc3RfaXNfZGVmYXVsdF9hcmcoY29uc3QgbmFtZTxE
ZWZhdWx0PiopO1wKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfIyNuYW1lIyNfaW1w
XAotICAge1wKLSAgICAgIHRlbXBsYXRlIDx0eXBlIE4+IHN0YXRpYyBjaGFyIHRlc3QoY29uc3Qg
bmFtZTxOPiopO1wKLSAgICAgIHN0YXRpYyBkb3VibGUgdGVzdCguLi4pO1wKLSAgICAgIEJPT1NU
X1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHNpemVvZih0ZXN0KHN0YXRpY19jYXN0PFQq
PigwKSkpID09IDEpO1wKLSAgIH07XAotICAgfVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1
Y3QgaXNfIyNuYW1lIDogcHVibGljIGJvb3N0OjptcGw6OmJvb2xfPCA6OmJvb3N0OjptYXRoOjpw
b2xpY2llczo6ZGV0YWlsOjppc18jI25hbWUjI19pbXA8VD46OnZhbHVlPnt9OwotCi0jZGVmaW5l
IEJPT1NUX01BVEhfTUVUQV9CT09MKG5hbWUsIERlZmF1bHQpXAotICAgdGVtcGxhdGUgPGJvb2wg
TiA9IERlZmF1bHQ+IHN0cnVjdCBuYW1lIDogcHVibGljIGJvb3N0OjptcGw6OmJvb2xfPE4+e307
XAotICAgbmFtZXNwYWNlIGRldGFpbHtcCi0gICB0ZW1wbGF0ZSA8Ym9vbCBOPlwKLSAgIGNoYXIg
dGVzdF9pc192YWxpZF9hcmcoY29uc3QgbmFtZTxOPiopO1wKLSAgIGNoYXIgdGVzdF9pc19kZWZh
dWx0X2FyZyhjb25zdCBuYW1lPERlZmF1bHQ+Kik7XAotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0
cnVjdCBpc18jI25hbWUjI19pbXBcCi0gICB7XAotICAgICAgdGVtcGxhdGUgPGJvb2wgTj4gc3Rh
dGljIGNoYXIgdGVzdChjb25zdCBuYW1lPE4+Kik7XAotICAgICAgc3RhdGljIGRvdWJsZSB0ZXN0
KC4uLik7XAotICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gc2l6ZW9m
KHRlc3Qoc3RhdGljX2Nhc3Q8VCo+KDApKSkgPT0gMSk7XAotICAgfTtcCi0gICB9XAotICAgdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc18jI25hbWUgOiBwdWJsaWMgYm9vc3Q6Om1wbDo6Ym9v
bF88IDo6Ym9vc3Q6Om1hdGg6OnBvbGljaWVzOjpkZXRhaWw6OmlzXyMjbmFtZSMjX2ltcDxUPjo6
dmFsdWU+e307Ci0jZWxzZQotI2RlZmluZSBCT09TVF9NQVRIX01FVEFfSU5UKFR5cGUsIG5hbWUs
IERlZmF1bHQpXAotICAgdGVtcGxhdGUgPFR5cGUgTiA9IERlZmF1bHQ+IHN0cnVjdCBuYW1lIDog
cHVibGljIGJvb3N0OjptcGw6OmludF88Tj57fTtcCi0gICBuYW1lc3BhY2UgZGV0YWlse1wKLSAg
IHRlbXBsYXRlIDxUeXBlIE4+XAotICAgY2hhciB0ZXN0X2lzX3ZhbGlkX2FyZyhjb25zdCBuYW1l
PE4+Kik7XAotICAgY2hhciB0ZXN0X2lzX2RlZmF1bHRfYXJnKGNvbnN0IG5hbWU8RGVmYXVsdD4q
KTtcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzXyMjbmFtZSMjX3Rlc3RlclwKLSAg
IHtcCi0gICAgICB0ZW1wbGF0ZSA8VHlwZSBOPiBzdGF0aWMgY2hhciB0ZXN0KGNvbnN0IG5hbWU8
Tj4mKTtcCi0gICAgICBzdGF0aWMgZG91YmxlIHRlc3QoLi4uKTtcCi0gICB9O1wKLSAgIHRlbXBs
YXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfIyNuYW1lIyNfaW1wXAotICAge1wKLSAgICAgIHN0YXRp
YyBUIGluc3Q7XAotICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gc2l6
ZW9mKCA6OmJvb3N0OjptYXRoOjpwb2xpY2llczo6ZGV0YWlsOjppc18jI25hbWUjI190ZXN0ZXI8
VD46OnRlc3QoaW5zdCkpID09IDEpO1wKLSAgIH07XAotICAgfVwKLSAgIHRlbXBsYXRlIDxjbGFz
cyBUPiBzdHJ1Y3QgaXNfIyNuYW1lIDogcHVibGljIGJvb3N0OjptcGw6OmJvb2xfPCA6OmJvb3N0
OjptYXRoOjpwb2xpY2llczo6ZGV0YWlsOjppc18jI25hbWUjI19pbXA8VD46OnZhbHVlPlwKLSAg
IHtcCi0gICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gc3RydWN0IGFwcGx5eyB0eXBlZGVmIGlzXyMj
bmFtZTxVPiB0eXBlOyB9O1wKLSAgIH07Ci0KLSNkZWZpbmUgQk9PU1RfTUFUSF9NRVRBX0JPT0wo
bmFtZSwgRGVmYXVsdClcCi0gICB0ZW1wbGF0ZSA8Ym9vbCBOID0gRGVmYXVsdD4gc3RydWN0IG5h
bWUgOiBwdWJsaWMgYm9vc3Q6Om1wbDo6Ym9vbF88Tj57fTtcCi0gICBuYW1lc3BhY2UgZGV0YWls
e1wKLSAgIHRlbXBsYXRlIDxib29sIE4+XAotICAgY2hhciB0ZXN0X2lzX3ZhbGlkX2FyZyhjb25z
dCBuYW1lPE4+Kik7XAotICAgY2hhciB0ZXN0X2lzX2RlZmF1bHRfYXJnKGNvbnN0IG5hbWU8RGVm
YXVsdD4qKTtcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzXyMjbmFtZSMjX3Rlc3Rl
clwKLSAgIHtcCi0gICAgICB0ZW1wbGF0ZSA8Ym9vbCBOPiBzdGF0aWMgY2hhciB0ZXN0KGNvbnN0
IG5hbWU8Tj4mKTtcCi0gICAgICBzdGF0aWMgZG91YmxlIHRlc3QoLi4uKTtcCi0gICB9O1wKLSAg
IHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfIyNuYW1lIyNfaW1wXAotICAge1wKLSAgICAg
IHN0YXRpYyBUIGluc3Q7XAotICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVl
ID0gc2l6ZW9mKCA6OmJvb3N0OjptYXRoOjpwb2xpY2llczo6ZGV0YWlsOjppc18jI25hbWUjI190
ZXN0ZXI8VD46OnRlc3QoaW5zdCkpID09IDEpO1wKLSAgIH07XAotICAgfVwKLSAgIHRlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgaXNfIyNuYW1lIDogcHVibGljIGJvb3N0OjptcGw6OmJvb2xfPCA6
OmJvb3N0OjptYXRoOjpwb2xpY2llczo6ZGV0YWlsOjppc18jI25hbWUjI19pbXA8VD46OnZhbHVl
PlwKLSAgIHtcCi0gICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gc3RydWN0IGFwcGx5eyB0eXBlZGVm
IGlzXyMjbmFtZTxVPiB0eXBlOyAgfTtcCi0gICB9OwotI2VuZGlmCi0vLwotLy8gQmVnaW4gYnkg
ZGVmaW5pbmcgcG9saWN5IHR5cGVzIGZvciBlcnJvciBoYW5kbGluZzoKLS8vCi1lbnVtIGVycm9y
X3BvbGljeV90eXBlCi17Ci0gICB0aHJvd19vbl9lcnJvciA9IDAsCi0gICBlcnJub19vbl9lcnJv
ciA9IDEsCi0gICBpZ25vcmVfZXJyb3IgPSAyLAotICAgdXNlcl9lcnJvciA9IDMKLX07Ci0KLUJP
T1NUX01BVEhfTUVUQV9JTlQoZXJyb3JfcG9saWN5X3R5cGUsIGRvbWFpbl9lcnJvciwgQk9PU1Rf
TUFUSF9ET01BSU5fRVJST1JfUE9MSUNZKQotQk9PU1RfTUFUSF9NRVRBX0lOVChlcnJvcl9wb2xp
Y3lfdHlwZSwgcG9sZV9lcnJvciwgQk9PU1RfTUFUSF9QT0xFX0VSUk9SX1BPTElDWSkKLUJPT1NU
X01BVEhfTUVUQV9JTlQoZXJyb3JfcG9saWN5X3R5cGUsIG92ZXJmbG93X2Vycm9yLCBCT09TVF9N
QVRIX09WRVJGTE9XX0VSUk9SX1BPTElDWSkKLUJPT1NUX01BVEhfTUVUQV9JTlQoZXJyb3JfcG9s
aWN5X3R5cGUsIHVuZGVyZmxvd19lcnJvciwgQk9PU1RfTUFUSF9VTkRFUkZMT1dfRVJST1JfUE9M
SUNZKQotQk9PU1RfTUFUSF9NRVRBX0lOVChlcnJvcl9wb2xpY3lfdHlwZSwgZGVub3JtX2Vycm9y
LCBCT09TVF9NQVRIX0RFTk9STV9FUlJPUl9QT0xJQ1kpCi1CT09TVF9NQVRIX01FVEFfSU5UKGVy
cm9yX3BvbGljeV90eXBlLCBldmFsdWF0aW9uX2Vycm9yLCBCT09TVF9NQVRIX0VWQUxVQVRJT05f
RVJST1JfUE9MSUNZKQotQk9PU1RfTUFUSF9NRVRBX0lOVChlcnJvcl9wb2xpY3lfdHlwZSwgcm91
bmRpbmdfZXJyb3IsIEJPT1NUX01BVEhfUk9VTkRJTkdfRVJST1JfUE9MSUNZKQotQk9PU1RfTUFU
SF9NRVRBX0lOVChlcnJvcl9wb2xpY3lfdHlwZSwgaW5kZXRlcm1pbmF0ZV9yZXN1bHRfZXJyb3Is
IEJPT1NUX01BVEhfSU5ERVRFUk1JTkFURV9SRVNVTFRfRVJST1JfUE9MSUNZKQotCi0vLwotLy8g
UG9saWN5IHR5cGVzIGZvciBpbnRlcm5hbCBwcm9tb3Rpb246Ci0vLwotQk9PU1RfTUFUSF9NRVRB
X0JPT0wocHJvbW90ZV9mbG9hdCwgQk9PU1RfTUFUSF9QUk9NT1RFX0ZMT0FUX1BPTElDWSkKLUJP
T1NUX01BVEhfTUVUQV9CT09MKHByb21vdGVfZG91YmxlLCBCT09TVF9NQVRIX1BST01PVEVfRE9V
QkxFX1BPTElDWSkKLUJPT1NUX01BVEhfTUVUQV9CT09MKGFzc2VydF91bmRlZmluZWQsIEJPT1NU
X01BVEhfQVNTRVJUX1VOREVGSU5FRF9QT0xJQ1kpCi0vLwotLy8gUG9saWN5IHR5cGVzIGZvciBk
aXNjcmV0ZSBxdWFudGlsZXM6Ci0vLwotZW51bSBkaXNjcmV0ZV9xdWFudGlsZV9wb2xpY3lfdHlw
ZQotewotICAgcmVhbCwKLSAgIGludGVnZXJfcm91bmRfb3V0d2FyZHMsCi0gICBpbnRlZ2VyX3Jv
dW5kX2lud2FyZHMsCi0gICBpbnRlZ2VyX3JvdW5kX2Rvd24sCi0gICBpbnRlZ2VyX3JvdW5kX3Vw
LAotICAgaW50ZWdlcl9yb3VuZF9uZWFyZXN0Ci19OwotCi1CT09TVF9NQVRIX01FVEFfSU5UKGRp
c2NyZXRlX3F1YW50aWxlX3BvbGljeV90eXBlLCBkaXNjcmV0ZV9xdWFudGlsZSwgQk9PU1RfTUFU
SF9ESVNDUkVURV9RVUFOVElMRV9QT0xJQ1kpCi0vLwotLy8gUHJlY2lzaW9uOgotLy8KLUJPT1NU
X01BVEhfTUVUQV9JTlQoaW50LCBkaWdpdHMxMCwgQk9PU1RfTUFUSF9ESUdJVFMxMF9QT0xJQ1kp
Ci1CT09TVF9NQVRIX01FVEFfSU5UKGludCwgZGlnaXRzMiwgMCkKLS8vCi0vLyBJdGVyYXRpb25z
OgotLy8KLUJPT1NUX01BVEhfTUVUQV9JTlQodW5zaWduZWQgbG9uZywgbWF4X3Nlcmllc19pdGVy
YXRpb25zLCBCT09TVF9NQVRIX01BWF9TRVJJRVNfSVRFUkFUSU9OX1BPTElDWSkKLUJPT1NUX01B
VEhfTUVUQV9JTlQodW5zaWduZWQgbG9uZywgbWF4X3Jvb3RfaXRlcmF0aW9ucywgQk9PU1RfTUFU
SF9NQVhfUk9PVF9JVEVSQVRJT05fUE9MSUNZKQotLy8KLS8vIERlZmluZSB0aGUgbmFtZXMgZm9y
IGVhY2ggcG9zc2libGUgcG9saWN5OgotLy8KLSNkZWZpbmUgQk9PU1RfTUFUSF9QQVJBTUVURVIo
bmFtZSlcCi0gICBCT09TVF9QQVJBTUVURVJfVEVNUExBVEVfS0VZV09SRChuYW1lIyNfbmFtZSlc
Ci0gICBCT09TVF9QQVJBTUVURVJfTkFNRShuYW1lIyNfbmFtZSkKLQotc3RydWN0IGRlZmF1bHRf
cG9saWN5e307Ci0KLW5hbWVzcGFjZSBkZXRhaWx7Ci0vLwotLy8gVHJhaXQgdG8gd29yayBvdXQg
Yml0cyBwcmVjaXNpb24gZnJvbSBkaWdpdHMxMCBhbmQgZGlnaXRzMjoKLS8vCi10ZW1wbGF0ZSA8
Y2xhc3MgRGlnaXRzMTAsIGNsYXNzIERpZ2l0czI+Ci1zdHJ1Y3QgcHJlY2lzaW9uCi17Ci0gICAv
LwotICAgLy8gTm93IHdvcmsgb3V0IHRoZSBwcmVjaXNpb246Ci0gICAvLwotICAgdHlwZWRlZiB0
eXBlbmFtZSBtcGw6OmlmX2M8Ci0gICAgICAoRGlnaXRzMTA6OnZhbHVlID09IDApLAotICAgICAg
ZGlnaXRzMjwwPiwKLSAgICAgIGRpZ2l0czI8KChEaWdpdHMxMDo6dmFsdWUgKyAxKSAqIDEwMDBM
KSAvIDMwMUw+Ci0gICA+Ojp0eXBlIGRpZ2l0czJfdHlwZTsKLXB1YmxpYzoKLSNpZmRlZiBfX0JP
UkxBTkRDX18KLSAgIHR5cGVkZWYgdHlwZW5hbWUgbXBsOjppZl9jPAotICAgICAgKERpZ2l0czI6
OnZhbHVlID4gOjpib29zdDo6bWF0aDo6cG9saWNpZXM6OmRldGFpbDo6cHJlY2lzaW9uPERpZ2l0
czEwLERpZ2l0czI+OjpkaWdpdHMyX3R5cGU6OnZhbHVlKSwKLSAgICAgIERpZ2l0czIsIGRpZ2l0
czJfdHlwZT46OnR5cGUgdHlwZTsKLSNlbHNlCi0gICB0eXBlZGVmIHR5cGVuYW1lIG1wbDo6aWZf
YzwKLSAgICAgIChEaWdpdHMyOjp2YWx1ZSA+IGRpZ2l0czJfdHlwZTo6dmFsdWUpLAotICAgICAg
RGlnaXRzMiwgZGlnaXRzMl90eXBlPjo6dHlwZSB0eXBlOwotI2VuZGlmCi19OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgQSwgY2xhc3MgQiwgYm9vbCBiPgotc3RydWN0IHNlbGVjdF9yZXN1bHQKLXsKLSAg
IHR5cGVkZWYgQSB0eXBlOwotfTsKLXRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgotc3RydWN0
IHNlbGVjdF9yZXN1bHQ8QSwgQiwgZmFsc2U+Ci17Ci0gICB0eXBlZGVmIHR5cGVuYW1lIG1wbDo6
ZGVyZWY8Qj46OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBTZXEsIGNsYXNzIFBy
ZWQsIGNsYXNzIERlZmF1bHRUeXBlPgotc3RydWN0IGZpbmRfYXJnCi17Ci1wcml2YXRlOgotICAg
dHlwZWRlZiB0eXBlbmFtZSBtcGw6OmZpbmRfaWY8U2VxLCBQcmVkPjo6dHlwZSBpdGVyOwotICAg
dHlwZWRlZiB0eXBlbmFtZSBtcGw6OmVuZDxTZXE+Ojp0eXBlIGVuZF90eXBlOwotcHVibGljOgot
ICAgdHlwZWRlZiB0eXBlbmFtZSBzZWxlY3RfcmVzdWx0PAotICAgICAgRGVmYXVsdFR5cGUsIGl0
ZXIsCi0gICAgICA6OmJvb3N0Ojppc19zYW1lPGl0ZXIsIGVuZF90eXBlPjo6dmFsdWU+Ojp0eXBl
IHR5cGU7Ci19OwotCi1kb3VibGUgdGVzdF9pc192YWxpZF9hcmcoLi4uKTsKLWRvdWJsZSB0ZXN0
X2lzX2RlZmF1bHRfYXJnKC4uLik7Ci1jaGFyIHRlc3RfaXNfdmFsaWRfYXJnKGNvbnN0IGRlZmF1
bHRfcG9saWN5Kik7Ci1jaGFyIHRlc3RfaXNfZGVmYXVsdF9hcmcoY29uc3QgZGVmYXVsdF9wb2xp
Y3kqKTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfdmFsaWRfcG9saWN5X2ltcCAK
LXsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHNpemVvZig6OmJvb3N0
OjptYXRoOjpwb2xpY2llczo6ZGV0YWlsOjp0ZXN0X2lzX3ZhbGlkX2FyZyhzdGF0aWNfY2FzdDxU
Kj4oMCkpKSA9PSAxKTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX2RlZmF1
bHRfcG9saWN5X2ltcAotewotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0g
c2l6ZW9mKDo6Ym9vc3Q6Om1hdGg6OnBvbGljaWVzOjpkZXRhaWw6OnRlc3RfaXNfZGVmYXVsdF9h
cmcoc3RhdGljX2Nhc3Q8VCo+KDApKSkgPT0gMSk7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
c3RydWN0IGlzX3ZhbGlkX3BvbGljeSAKLTogcHVibGljIG1wbDo6Ym9vbF88IAotICAgOjpib29z
dDo6bWF0aDo6cG9saWNpZXM6OmRldGFpbDo6aXNfdmFsaWRfcG9saWN5X2ltcDxUPjo6dmFsdWU+
Ci17fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19kZWZhdWx0X3BvbGljeSAKLTog
cHVibGljIG1wbDo6Ym9vbF88IAotICAgOjpib29zdDo6bWF0aDo6cG9saWNpZXM6OmRldGFpbDo6
aXNfZGVmYXVsdF9wb2xpY3lfaW1wPFQ+Ojp2YWx1ZT4KLXsKLSAgIHRlbXBsYXRlIDxjbGFzcyBV
PgotICAgc3RydWN0IGFwcGx5Ci0gICB7Ci0gICAgICB0eXBlZGVmIGlzX2RlZmF1bHRfcG9saWN5
PFU+IHR5cGU7Ci0gICB9OwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFNlcSwgY2xhc3MgVCwgaW50
IE4+Ci1zdHJ1Y3QgYXBwZW5kX04KLXsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgbXBsOjpwdXNoX2Jh
Y2s8U2VxLCBUPjo6dHlwZSBuZXdfc2VxOwotICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBlbmRfTjxu
ZXdfc2VxLCBULCBOLTE+Ojp0eXBlIHR5cGU7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgU2VxLCBj
bGFzcyBUPgotc3RydWN0IGFwcGVuZF9OPFNlcSwgVCwgMD4KLXsKLSAgIHR5cGVkZWYgU2VxIHR5
cGU7Ci19OwotCi0vLwotLy8gVHJhaXRzIGNsYXNzIHRvIHdvcmsgb3V0IHdoYXQgdGVtcGxhdGUg
cGFyYW1ldGVycyBvdXIgZGVmYXVsdAotLy8gcG9saWN5PD4gY2xhc3Mgd2lsbCBoYXZlIHdoZW4g
bW9kaWZpZWQgZm9yIGZvcndhcmRpbmc6Ci0vLwotdGVtcGxhdGUgPGJvb2wgZiwgYm9vbCBkPgot
c3RydWN0IGRlZmF1bHRfYXJncwotewotICAgdHlwZWRlZiBwcm9tb3RlX2Zsb2F0PGZhbHNlPiBh
cmcxOwotICAgdHlwZWRlZiBwcm9tb3RlX2RvdWJsZTxmYWxzZT4gYXJnMjsKLX07Ci0KLXRlbXBs
YXRlIDw+Ci1zdHJ1Y3QgZGVmYXVsdF9hcmdzPGZhbHNlLCBmYWxzZT4KLXsKLSAgIHR5cGVkZWYg
ZGVmYXVsdF9wb2xpY3kgYXJnMTsKLSAgIHR5cGVkZWYgZGVmYXVsdF9wb2xpY3kgYXJnMjsKLX07
Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgZGVmYXVsdF9hcmdzPHRydWUsIGZhbHNlPgotewotICAg
dHlwZWRlZiBwcm9tb3RlX2Zsb2F0PGZhbHNlPiBhcmcxOwotICAgdHlwZWRlZiBkZWZhdWx0X3Bv
bGljeSBhcmcyOwotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBkZWZhdWx0X2FyZ3M8ZmFsc2Us
IHRydWU+Ci17Ci0gICB0eXBlZGVmIHByb21vdGVfZG91YmxlPGZhbHNlPiBhcmcxOwotICAgdHlw
ZWRlZiBkZWZhdWx0X3BvbGljeSBhcmcyOwotfTsKLQotdHlwZWRlZiBkZWZhdWx0X2FyZ3M8Qk9P
U1RfTUFUSF9QUk9NT1RFX0ZMT0FUX1BPTElDWSwgQk9PU1RfTUFUSF9QUk9NT1RFX0RPVUJMRV9Q
T0xJQ1k+OjphcmcxIGZvcndhcmRpbmdfYXJnMTsKLXR5cGVkZWYgZGVmYXVsdF9hcmdzPEJPT1NU
X01BVEhfUFJPTU9URV9GTE9BVF9QT0xJQ1ksIEJPT1NUX01BVEhfUFJPTU9URV9ET1VCTEVfUE9M
SUNZPjo6YXJnMiBmb3J3YXJkaW5nX2FyZzI7Ci0KLX0gLy8gZGV0YWlsCi0vLwotLy8gTm93IGRl
ZmluZSB0aGUgcG9saWN5IHR5cGUgd2l0aCBlbm91Z2ggYXJndW1lbnRzIHRvIGhhbmRsZSBhbGwK
LS8vIHRoZSBwb2xpY2llczoKLS8vCi10ZW1wbGF0ZSA8Y2xhc3MgQTEgPSBkZWZhdWx0X3BvbGlj
eSwgCi0gICAgICAgICAgY2xhc3MgQTIgPSBkZWZhdWx0X3BvbGljeSwgCi0gICAgICAgICAgY2xh
c3MgQTMgPSBkZWZhdWx0X3BvbGljeSwKLSAgICAgICAgICBjbGFzcyBBNCA9IGRlZmF1bHRfcG9s
aWN5LAotICAgICAgICAgIGNsYXNzIEE1ID0gZGVmYXVsdF9wb2xpY3ksCi0gICAgICAgICAgY2xh
c3MgQTYgPSBkZWZhdWx0X3BvbGljeSwKLSAgICAgICAgICBjbGFzcyBBNyA9IGRlZmF1bHRfcG9s
aWN5LAotICAgICAgICAgIGNsYXNzIEE4ID0gZGVmYXVsdF9wb2xpY3ksCi0gICAgICAgICAgY2xh
c3MgQTkgPSBkZWZhdWx0X3BvbGljeSwKLSAgICAgICAgICBjbGFzcyBBMTAgPSBkZWZhdWx0X3Bv
bGljeSwKLSAgICAgICAgICBjbGFzcyBBMTEgPSBkZWZhdWx0X3BvbGljeSwKLSAgICAgICAgICBj
bGFzcyBBMTIgPSBkZWZhdWx0X3BvbGljeSwKLSAgICAgICAgICBjbGFzcyBBMTMgPSBkZWZhdWx0
X3BvbGljeT4KLXN0cnVjdCBwb2xpY3kKLXsKLXByaXZhdGU6Ci0gICAvLwotICAgLy8gVmFsaWRh
dGUgYWxsIG91ciBhcmd1bWVudHM6Ci0gICAvLwotICAgQk9PU1RfU1RBVElDX0FTU0VSVCg6OmJv
b3N0OjptYXRoOjpwb2xpY2llczo6ZGV0YWlsOjppc192YWxpZF9wb2xpY3k8QTE+Ojp2YWx1ZSk7
Ci0gICBCT09TVF9TVEFUSUNfQVNTRVJUKDo6Ym9vc3Q6Om1hdGg6OnBvbGljaWVzOjpkZXRhaWw6
OmlzX3ZhbGlkX3BvbGljeTxBMj46OnZhbHVlKTsKLSAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoOjpi
b29zdDo6bWF0aDo6cG9saWNpZXM6OmRldGFpbDo6aXNfdmFsaWRfcG9saWN5PEEzPjo6dmFsdWUp
OwotICAgQk9PU1RfU1RBVElDX0FTU0VSVCg6OmJvb3N0OjptYXRoOjpwb2xpY2llczo6ZGV0YWls
Ojppc192YWxpZF9wb2xpY3k8QTQ+Ojp2YWx1ZSk7Ci0gICBCT09TVF9TVEFUSUNfQVNTRVJUKDo6
Ym9vc3Q6Om1hdGg6OnBvbGljaWVzOjpkZXRhaWw6OmlzX3ZhbGlkX3BvbGljeTxBNT46OnZhbHVl
KTsKLSAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoOjpib29zdDo6bWF0aDo6cG9saWNpZXM6OmRldGFp
bDo6aXNfdmFsaWRfcG9saWN5PEE2Pjo6dmFsdWUpOwotICAgQk9PU1RfU1RBVElDX0FTU0VSVCg6
OmJvb3N0OjptYXRoOjpwb2xpY2llczo6ZGV0YWlsOjppc192YWxpZF9wb2xpY3k8QTc+Ojp2YWx1
ZSk7Ci0gICBCT09TVF9TVEFUSUNfQVNTRVJUKDo6Ym9vc3Q6Om1hdGg6OnBvbGljaWVzOjpkZXRh
aWw6OmlzX3ZhbGlkX3BvbGljeTxBOD46OnZhbHVlKTsKLSAgIEJPT1NUX1NUQVRJQ19BU1NFUlQo
Ojpib29zdDo6bWF0aDo6cG9saWNpZXM6OmRldGFpbDo6aXNfdmFsaWRfcG9saWN5PEE5Pjo6dmFs
dWUpOwotICAgQk9PU1RfU1RBVElDX0FTU0VSVCg6OmJvb3N0OjptYXRoOjpwb2xpY2llczo6ZGV0
YWlsOjppc192YWxpZF9wb2xpY3k8QTEwPjo6dmFsdWUpOwotICAgQk9PU1RfU1RBVElDX0FTU0VS
VCg6OmJvb3N0OjptYXRoOjpwb2xpY2llczo6ZGV0YWlsOjppc192YWxpZF9wb2xpY3k8QTExPjo6
dmFsdWUpOwotICAgQk9PU1RfU1RBVElDX0FTU0VSVCg6OmJvb3N0OjptYXRoOjpwb2xpY2llczo6
ZGV0YWlsOjppc192YWxpZF9wb2xpY3k8QTEyPjo6dmFsdWUpOwotICAgQk9PU1RfU1RBVElDX0FT
U0VSVCg6OmJvb3N0OjptYXRoOjpwb2xpY2llczo6ZGV0YWlsOjppc192YWxpZF9wb2xpY3k8QTEz
Pjo6dmFsdWUpOwotICAgLy8KLSAgIC8vIFR5cGVsaXN0IG9mIHRoZSBhcmd1bWVudHM6Ci0gICAv
LwotICAgdHlwZWRlZiBtcGw6Omxpc3Q8QTEsQTIsQTMsQTQsQTUsQTYsQTcsQTgsQTksQTEwLEEx
MSxBMTIsQTEzPiBhcmdfbGlzdDsKLQotcHVibGljOgotICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRh
aWw6OmZpbmRfYXJnPGFyZ19saXN0LCBpc19kb21haW5fZXJyb3I8bXBsOjpfMT4sIGRvbWFpbl9l
cnJvcjw+ID46OnR5cGUgZG9tYWluX2Vycm9yX3R5cGU7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIGRl
dGFpbDo6ZmluZF9hcmc8YXJnX2xpc3QsIGlzX3BvbGVfZXJyb3I8bXBsOjpfMT4sIHBvbGVfZXJy
b3I8PiA+Ojp0eXBlIHBvbGVfZXJyb3JfdHlwZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgZGV0YWls
OjpmaW5kX2FyZzxhcmdfbGlzdCwgaXNfb3ZlcmZsb3dfZXJyb3I8bXBsOjpfMT4sIG92ZXJmbG93
X2Vycm9yPD4gPjo6dHlwZSBvdmVyZmxvd19lcnJvcl90eXBlOwotICAgdHlwZWRlZiB0eXBlbmFt
ZSBkZXRhaWw6OmZpbmRfYXJnPGFyZ19saXN0LCBpc191bmRlcmZsb3dfZXJyb3I8bXBsOjpfMT4s
IHVuZGVyZmxvd19lcnJvcjw+ID46OnR5cGUgdW5kZXJmbG93X2Vycm9yX3R5cGU7Ci0gICB0eXBl
ZGVmIHR5cGVuYW1lIGRldGFpbDo6ZmluZF9hcmc8YXJnX2xpc3QsIGlzX2Rlbm9ybV9lcnJvcjxt
cGw6Ol8xPiwgZGVub3JtX2Vycm9yPD4gPjo6dHlwZSBkZW5vcm1fZXJyb3JfdHlwZTsKLSAgIHR5
cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpmaW5kX2FyZzxhcmdfbGlzdCwgaXNfZXZhbHVhdGlvbl9l
cnJvcjxtcGw6Ol8xPiwgZXZhbHVhdGlvbl9lcnJvcjw+ID46OnR5cGUgZXZhbHVhdGlvbl9lcnJv
cl90eXBlOwotICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmZpbmRfYXJnPGFyZ19saXN0LCBp
c19yb3VuZGluZ19lcnJvcjxtcGw6Ol8xPiwgcm91bmRpbmdfZXJyb3I8PiA+Ojp0eXBlIHJvdW5k
aW5nX2Vycm9yX3R5cGU7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6ZmluZF9hcmc8YXJn
X2xpc3QsIGlzX2luZGV0ZXJtaW5hdGVfcmVzdWx0X2Vycm9yPG1wbDo6XzE+LCBpbmRldGVybWlu
YXRlX3Jlc3VsdF9lcnJvcjw+ID46OnR5cGUgaW5kZXRlcm1pbmF0ZV9yZXN1bHRfZXJyb3JfdHlw
ZTsKLXByaXZhdGU6Ci0gICAvLwotICAgLy8gTm93IHdvcmsgb3V0IHRoZSBwcmVjaXNpb246Ci0g
ICAvLwotICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmZpbmRfYXJnPGFyZ19saXN0LCBpc19k
aWdpdHMxMDxtcGw6Ol8xPiwgZGlnaXRzMTA8PiA+Ojp0eXBlIGRpZ2l0czEwX3R5cGU7Ci0gICB0
eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6ZmluZF9hcmc8YXJnX2xpc3QsIGlzX2RpZ2l0czI8bXBs
OjpfMT4sIGRpZ2l0czI8PiA+Ojp0eXBlIGJpdHNfcHJlY2lzaW9uX3R5cGU7Ci1wdWJsaWM6Ci0g
ICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6cHJlY2lzaW9uPGRpZ2l0czEwX3R5cGUsIGJpdHNf
cHJlY2lzaW9uX3R5cGU+Ojp0eXBlIHByZWNpc2lvbl90eXBlOwotICAgLy8KLSAgIC8vIEludGVy
bmFsIHByb21vdGlvbjoKLSAgIC8vCi0gICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6ZmluZF9h
cmc8YXJnX2xpc3QsIGlzX3Byb21vdGVfZmxvYXQ8bXBsOjpfMT4sIHByb21vdGVfZmxvYXQ8PiA+
Ojp0eXBlIHByb21vdGVfZmxvYXRfdHlwZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpm
aW5kX2FyZzxhcmdfbGlzdCwgaXNfcHJvbW90ZV9kb3VibGU8bXBsOjpfMT4sIHByb21vdGVfZG91
YmxlPD4gPjo6dHlwZSBwcm9tb3RlX2RvdWJsZV90eXBlOwotICAgLy8KLSAgIC8vIERpc2NyZXRl
IHF1YW50aWxlczoKLSAgIC8vCi0gICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6ZmluZF9hcmc8
YXJnX2xpc3QsIGlzX2Rpc2NyZXRlX3F1YW50aWxlPG1wbDo6XzE+LCBkaXNjcmV0ZV9xdWFudGls
ZTw+ID46OnR5cGUgZGlzY3JldGVfcXVhbnRpbGVfdHlwZTsKLSAgIC8vCi0gICAvLyBNYXRoZW1h
dGljYWxseSB1bmRlZmluZWQgcHJvcGVydGllczoKLSAgIC8vCi0gICB0eXBlZGVmIHR5cGVuYW1l
IGRldGFpbDo6ZmluZF9hcmc8YXJnX2xpc3QsIGlzX2Fzc2VydF91bmRlZmluZWQ8bXBsOjpfMT4s
IGFzc2VydF91bmRlZmluZWQ8PiA+Ojp0eXBlIGFzc2VydF91bmRlZmluZWRfdHlwZTsKLSAgIC8v
Ci0gICAvLyBNYXggaXRlcmF0aW9uczoKLSAgIC8vCi0gICB0eXBlZGVmIHR5cGVuYW1lIGRldGFp
bDo6ZmluZF9hcmc8YXJnX2xpc3QsIGlzX21heF9zZXJpZXNfaXRlcmF0aW9uczxtcGw6Ol8xPiwg
bWF4X3Nlcmllc19pdGVyYXRpb25zPD4gPjo6dHlwZSBtYXhfc2VyaWVzX2l0ZXJhdGlvbnNfdHlw
ZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpmaW5kX2FyZzxhcmdfbGlzdCwgaXNfbWF4
X3Jvb3RfaXRlcmF0aW9uczxtcGw6Ol8xPiwgbWF4X3Jvb3RfaXRlcmF0aW9uczw+ID46OnR5cGUg
bWF4X3Jvb3RfaXRlcmF0aW9uc190eXBlOwotfTsKLS8vCi0vLyBUaGVzZSBmdWxsIHNwZWNpYWxp
emF0aW9ucyBhcmUgZGVmaW5lZCB0byByZWR1Y2UgdGhlIGFtb3VudCBvZgotLy8gdGVtcGxhdGUg
aW5zdGFudGlhdGlvbnMgdGhhdCBoYXZlIHRvIHRha2UgcGxhY2Ugd2hlbiB1c2luZyB0aGUgZGVm
YXVsdAotLy8gcG9saWNpZXMsIHRoZXkgaGF2ZSBxdWl0ZSBhIGxhcmdlIGltcGFjdCBvbiBjb21w
aWxlIHRpbWVzOgotLy8KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgcG9saWN5PGRlZmF1bHRfcG9saWN5
LCBkZWZhdWx0X3BvbGljeSwgZGVmYXVsdF9wb2xpY3ksIGRlZmF1bHRfcG9saWN5LCBkZWZhdWx0
X3BvbGljeSwgZGVmYXVsdF9wb2xpY3ksIGRlZmF1bHRfcG9saWN5LCBkZWZhdWx0X3BvbGljeSwg
ZGVmYXVsdF9wb2xpY3ksIGRlZmF1bHRfcG9saWN5LCBkZWZhdWx0X3BvbGljeT4KLXsKLXB1Ymxp
YzoKLSAgIHR5cGVkZWYgZG9tYWluX2Vycm9yPD4gZG9tYWluX2Vycm9yX3R5cGU7Ci0gICB0eXBl
ZGVmIHBvbGVfZXJyb3I8PiBwb2xlX2Vycm9yX3R5cGU7Ci0gICB0eXBlZGVmIG92ZXJmbG93X2Vy
cm9yPD4gb3ZlcmZsb3dfZXJyb3JfdHlwZTsKLSAgIHR5cGVkZWYgdW5kZXJmbG93X2Vycm9yPD4g
dW5kZXJmbG93X2Vycm9yX3R5cGU7Ci0gICB0eXBlZGVmIGRlbm9ybV9lcnJvcjw+IGRlbm9ybV9l
cnJvcl90eXBlOwotICAgdHlwZWRlZiBldmFsdWF0aW9uX2Vycm9yPD4gZXZhbHVhdGlvbl9lcnJv
cl90eXBlOwotICAgdHlwZWRlZiByb3VuZGluZ19lcnJvcjw+IHJvdW5kaW5nX2Vycm9yX3R5cGU7
Ci0gICB0eXBlZGVmIGluZGV0ZXJtaW5hdGVfcmVzdWx0X2Vycm9yPD4gaW5kZXRlcm1pbmF0ZV9y
ZXN1bHRfZXJyb3JfdHlwZTsKLSNpZiBCT09TVF9NQVRIX0RJR0lUUzEwX1BPTElDWSA9PSAwCi0g
ICB0eXBlZGVmIGRpZ2l0czI8PiBwcmVjaXNpb25fdHlwZTsKLSNlbHNlCi0gICB0eXBlZGVmIGRl
dGFpbDo6cHJlY2lzaW9uPGRpZ2l0czEwPD4sIGRpZ2l0czI8PiA+Ojp0eXBlIHByZWNpc2lvbl90
eXBlOwotI2VuZGlmCi0gICB0eXBlZGVmIHByb21vdGVfZmxvYXQ8PiBwcm9tb3RlX2Zsb2F0X3R5
cGU7Ci0gICB0eXBlZGVmIHByb21vdGVfZG91YmxlPD4gcHJvbW90ZV9kb3VibGVfdHlwZTsKLSAg
IHR5cGVkZWYgZGlzY3JldGVfcXVhbnRpbGU8PiBkaXNjcmV0ZV9xdWFudGlsZV90eXBlOwotICAg
dHlwZWRlZiBhc3NlcnRfdW5kZWZpbmVkPD4gYXNzZXJ0X3VuZGVmaW5lZF90eXBlOwotICAgdHlw
ZWRlZiBtYXhfc2VyaWVzX2l0ZXJhdGlvbnM8PiBtYXhfc2VyaWVzX2l0ZXJhdGlvbnNfdHlwZTsK
LSAgIHR5cGVkZWYgbWF4X3Jvb3RfaXRlcmF0aW9uczw+IG1heF9yb290X2l0ZXJhdGlvbnNfdHlw
ZTsKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgcG9saWN5PGRldGFpbDo6Zm9yd2FyZGluZ19h
cmcxLCBkZXRhaWw6OmZvcndhcmRpbmdfYXJnMiwgZGVmYXVsdF9wb2xpY3ksIGRlZmF1bHRfcG9s
aWN5LCBkZWZhdWx0X3BvbGljeSwgZGVmYXVsdF9wb2xpY3ksIGRlZmF1bHRfcG9saWN5LCBkZWZh
dWx0X3BvbGljeSwgZGVmYXVsdF9wb2xpY3ksIGRlZmF1bHRfcG9saWN5LCBkZWZhdWx0X3BvbGlj
eT4KLXsKLXB1YmxpYzoKLSAgIHR5cGVkZWYgZG9tYWluX2Vycm9yPD4gZG9tYWluX2Vycm9yX3R5
cGU7Ci0gICB0eXBlZGVmIHBvbGVfZXJyb3I8PiBwb2xlX2Vycm9yX3R5cGU7Ci0gICB0eXBlZGVm
IG92ZXJmbG93X2Vycm9yPD4gb3ZlcmZsb3dfZXJyb3JfdHlwZTsKLSAgIHR5cGVkZWYgdW5kZXJm
bG93X2Vycm9yPD4gdW5kZXJmbG93X2Vycm9yX3R5cGU7Ci0gICB0eXBlZGVmIGRlbm9ybV9lcnJv
cjw+IGRlbm9ybV9lcnJvcl90eXBlOwotICAgdHlwZWRlZiBldmFsdWF0aW9uX2Vycm9yPD4gZXZh
bHVhdGlvbl9lcnJvcl90eXBlOwotICAgdHlwZWRlZiByb3VuZGluZ19lcnJvcjw+IHJvdW5kaW5n
X2Vycm9yX3R5cGU7Ci0gICB0eXBlZGVmIGluZGV0ZXJtaW5hdGVfcmVzdWx0X2Vycm9yPD4gaW5k
ZXRlcm1pbmF0ZV9yZXN1bHRfZXJyb3JfdHlwZTsKLSNpZiBCT09TVF9NQVRIX0RJR0lUUzEwX1BP
TElDWSA9PSAwCi0gICB0eXBlZGVmIGRpZ2l0czI8PiBwcmVjaXNpb25fdHlwZTsKLSNlbHNlCi0g
ICB0eXBlZGVmIGRldGFpbDo6cHJlY2lzaW9uPGRpZ2l0czEwPD4sIGRpZ2l0czI8PiA+Ojp0eXBl
IHByZWNpc2lvbl90eXBlOwotI2VuZGlmCi0gICB0eXBlZGVmIHByb21vdGVfZmxvYXQ8ZmFsc2U+
IHByb21vdGVfZmxvYXRfdHlwZTsKLSAgIHR5cGVkZWYgcHJvbW90ZV9kb3VibGU8ZmFsc2U+IHBy
b21vdGVfZG91YmxlX3R5cGU7Ci0gICB0eXBlZGVmIGRpc2NyZXRlX3F1YW50aWxlPD4gZGlzY3Jl
dGVfcXVhbnRpbGVfdHlwZTsKLSAgIHR5cGVkZWYgYXNzZXJ0X3VuZGVmaW5lZDw+IGFzc2VydF91
bmRlZmluZWRfdHlwZTsKLSAgIHR5cGVkZWYgbWF4X3Nlcmllc19pdGVyYXRpb25zPD4gbWF4X3Nl
cmllc19pdGVyYXRpb25zX3R5cGU7Ci0gICB0eXBlZGVmIG1heF9yb290X2l0ZXJhdGlvbnM8PiBt
YXhfcm9vdF9pdGVyYXRpb25zX3R5cGU7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUG9saWN5LCAK
LSAgICAgICAgICBjbGFzcyBBMSA9IGRlZmF1bHRfcG9saWN5LCAKLSAgICAgICAgICBjbGFzcyBB
MiA9IGRlZmF1bHRfcG9saWN5LCAKLSAgICAgICAgICBjbGFzcyBBMyA9IGRlZmF1bHRfcG9saWN5
LAotICAgICAgICAgIGNsYXNzIEE0ID0gZGVmYXVsdF9wb2xpY3ksCi0gICAgICAgICAgY2xhc3Mg
QTUgPSBkZWZhdWx0X3BvbGljeSwKLSAgICAgICAgICBjbGFzcyBBNiA9IGRlZmF1bHRfcG9saWN5
LAotICAgICAgICAgIGNsYXNzIEE3ID0gZGVmYXVsdF9wb2xpY3ksCi0gICAgICAgICAgY2xhc3Mg
QTggPSBkZWZhdWx0X3BvbGljeSwKLSAgICAgICAgICBjbGFzcyBBOSA9IGRlZmF1bHRfcG9saWN5
LAotICAgICAgICAgIGNsYXNzIEExMCA9IGRlZmF1bHRfcG9saWN5LAotICAgICAgICAgIGNsYXNz
IEExMSA9IGRlZmF1bHRfcG9saWN5LAotICAgICAgICAgIGNsYXNzIEExMiA9IGRlZmF1bHRfcG9s
aWN5LAotICAgICAgICAgIGNsYXNzIEExMyA9IGRlZmF1bHRfcG9saWN5Pgotc3RydWN0IG5vcm1h
bGlzZQotewotcHJpdmF0ZToKLSAgIHR5cGVkZWYgbXBsOjpsaXN0PEExLEEyLEEzLEE0LEE1LEE2
LEE3LEE4LEE5LEExMCxBMTEsQTEyLEExMz4gYXJnX2xpc3Q7Ci0gICB0eXBlZGVmIHR5cGVuYW1l
IGRldGFpbDo6ZmluZF9hcmc8YXJnX2xpc3QsIGlzX2RvbWFpbl9lcnJvcjxtcGw6Ol8xPiwgdHlw
ZW5hbWUgUG9saWN5Ojpkb21haW5fZXJyb3JfdHlwZSA+Ojp0eXBlIGRvbWFpbl9lcnJvcl90eXBl
OwotICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmZpbmRfYXJnPGFyZ19saXN0LCBpc19wb2xl
X2Vycm9yPG1wbDo6XzE+LCB0eXBlbmFtZSBQb2xpY3k6OnBvbGVfZXJyb3JfdHlwZSA+Ojp0eXBl
IHBvbGVfZXJyb3JfdHlwZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpmaW5kX2FyZzxh
cmdfbGlzdCwgaXNfb3ZlcmZsb3dfZXJyb3I8bXBsOjpfMT4sIHR5cGVuYW1lIFBvbGljeTo6b3Zl
cmZsb3dfZXJyb3JfdHlwZSA+Ojp0eXBlIG92ZXJmbG93X2Vycm9yX3R5cGU7Ci0gICB0eXBlZGVm
IHR5cGVuYW1lIGRldGFpbDo6ZmluZF9hcmc8YXJnX2xpc3QsIGlzX3VuZGVyZmxvd19lcnJvcjxt
cGw6Ol8xPiwgdHlwZW5hbWUgUG9saWN5Ojp1bmRlcmZsb3dfZXJyb3JfdHlwZSA+Ojp0eXBlIHVu
ZGVyZmxvd19lcnJvcl90eXBlOwotICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmZpbmRfYXJn
PGFyZ19saXN0LCBpc19kZW5vcm1fZXJyb3I8bXBsOjpfMT4sIHR5cGVuYW1lIFBvbGljeTo6ZGVu
b3JtX2Vycm9yX3R5cGUgPjo6dHlwZSBkZW5vcm1fZXJyb3JfdHlwZTsKLSAgIHR5cGVkZWYgdHlw
ZW5hbWUgZGV0YWlsOjpmaW5kX2FyZzxhcmdfbGlzdCwgaXNfZXZhbHVhdGlvbl9lcnJvcjxtcGw6
Ol8xPiwgdHlwZW5hbWUgUG9saWN5OjpldmFsdWF0aW9uX2Vycm9yX3R5cGUgPjo6dHlwZSBldmFs
dWF0aW9uX2Vycm9yX3R5cGU7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6ZmluZF9hcmc8
YXJnX2xpc3QsIGlzX3JvdW5kaW5nX2Vycm9yPG1wbDo6XzE+LCB0eXBlbmFtZSBQb2xpY3k6OnJv
dW5kaW5nX2Vycm9yX3R5cGUgPjo6dHlwZSByb3VuZGluZ19lcnJvcl90eXBlOwotICAgdHlwZWRl
ZiB0eXBlbmFtZSBkZXRhaWw6OmZpbmRfYXJnPGFyZ19saXN0LCBpc19pbmRldGVybWluYXRlX3Jl
c3VsdF9lcnJvcjxtcGw6Ol8xPiwgdHlwZW5hbWUgUG9saWN5OjppbmRldGVybWluYXRlX3Jlc3Vs
dF9lcnJvcl90eXBlID46OnR5cGUgaW5kZXRlcm1pbmF0ZV9yZXN1bHRfZXJyb3JfdHlwZTsKLSAg
IC8vCi0gICAvLyBOb3cgd29yayBvdXQgdGhlIHByZWNpc2lvbjoKLSAgIC8vCi0gICB0eXBlZGVm
IHR5cGVuYW1lIGRldGFpbDo6ZmluZF9hcmc8YXJnX2xpc3QsIGlzX2RpZ2l0czEwPG1wbDo6XzE+
LCBkaWdpdHMxMDw+ID46OnR5cGUgZGlnaXRzMTBfdHlwZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUg
ZGV0YWlsOjpmaW5kX2FyZzxhcmdfbGlzdCwgaXNfZGlnaXRzMjxtcGw6Ol8xPiwgdHlwZW5hbWUg
UG9saWN5OjpwcmVjaXNpb25fdHlwZSA+Ojp0eXBlIGJpdHNfcHJlY2lzaW9uX3R5cGU7Ci0gICB0
eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6cHJlY2lzaW9uPGRpZ2l0czEwX3R5cGUsIGJpdHNfcHJl
Y2lzaW9uX3R5cGU+Ojp0eXBlIHByZWNpc2lvbl90eXBlOwotICAgLy8KLSAgIC8vIEludGVybmFs
IHByb21vdGlvbjoKLSAgIC8vCi0gICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6ZmluZF9hcmc8
YXJnX2xpc3QsIGlzX3Byb21vdGVfZmxvYXQ8bXBsOjpfMT4sIHR5cGVuYW1lIFBvbGljeTo6cHJv
bW90ZV9mbG9hdF90eXBlID46OnR5cGUgcHJvbW90ZV9mbG9hdF90eXBlOwotICAgdHlwZWRlZiB0
eXBlbmFtZSBkZXRhaWw6OmZpbmRfYXJnPGFyZ19saXN0LCBpc19wcm9tb3RlX2RvdWJsZTxtcGw6
Ol8xPiwgdHlwZW5hbWUgUG9saWN5Ojpwcm9tb3RlX2RvdWJsZV90eXBlID46OnR5cGUgcHJvbW90
ZV9kb3VibGVfdHlwZTsKLSAgIC8vCi0gICAvLyBEaXNjcmV0ZSBxdWFudGlsZXM6Ci0gICAvLwot
ICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmZpbmRfYXJnPGFyZ19saXN0LCBpc19kaXNjcmV0
ZV9xdWFudGlsZTxtcGw6Ol8xPiwgdHlwZW5hbWUgUG9saWN5OjpkaXNjcmV0ZV9xdWFudGlsZV90
eXBlID46OnR5cGUgZGlzY3JldGVfcXVhbnRpbGVfdHlwZTsKLSAgIC8vCi0gICAvLyBNYXRoZW1h
dGljYWxseSB1bmRlZmluZWQgcHJvcGVydGllczoKLSAgIC8vCi0gICB0eXBlZGVmIHR5cGVuYW1l
IGRldGFpbDo6ZmluZF9hcmc8YXJnX2xpc3QsIGlzX2Fzc2VydF91bmRlZmluZWQ8bXBsOjpfMT4s
IHR5cGVuYW1lIFBvbGljeTo6YXNzZXJ0X3VuZGVmaW5lZF90eXBlID46OnR5cGUgYXNzZXJ0X3Vu
ZGVmaW5lZF90eXBlOwotICAgLy8KLSAgIC8vIE1heCBpdGVyYXRpb25zOgotICAgLy8KLSAgIHR5
cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpmaW5kX2FyZzxhcmdfbGlzdCwgaXNfbWF4X3Nlcmllc19p
dGVyYXRpb25zPG1wbDo6XzE+LCB0eXBlbmFtZSBQb2xpY3k6Om1heF9zZXJpZXNfaXRlcmF0aW9u
c190eXBlPjo6dHlwZSBtYXhfc2VyaWVzX2l0ZXJhdGlvbnNfdHlwZTsKLSAgIHR5cGVkZWYgdHlw
ZW5hbWUgZGV0YWlsOjpmaW5kX2FyZzxhcmdfbGlzdCwgaXNfbWF4X3Jvb3RfaXRlcmF0aW9uczxt
cGw6Ol8xPiwgdHlwZW5hbWUgUG9saWN5OjptYXhfcm9vdF9pdGVyYXRpb25zX3R5cGU+Ojp0eXBl
IG1heF9yb290X2l0ZXJhdGlvbnNfdHlwZTsKLSAgIC8vCi0gICAvLyBEZWZpbmUgYSB0eXBlbGlz
dCBvZiB0aGUgcG9saWNpZXM6Ci0gICAvLwotICAgdHlwZWRlZiBtcGw6OnZlY3RvcjwKLSAgICAg
IGRvbWFpbl9lcnJvcl90eXBlLAotICAgICAgcG9sZV9lcnJvcl90eXBlLAotICAgICAgb3ZlcmZs
b3dfZXJyb3JfdHlwZSwKLSAgICAgIHVuZGVyZmxvd19lcnJvcl90eXBlLAotICAgICAgZGVub3Jt
X2Vycm9yX3R5cGUsCi0gICAgICBldmFsdWF0aW9uX2Vycm9yX3R5cGUsCi0gICAgICByb3VuZGlu
Z19lcnJvcl90eXBlLAotICAgICAgaW5kZXRlcm1pbmF0ZV9yZXN1bHRfZXJyb3JfdHlwZSwKLSAg
ICAgIHByZWNpc2lvbl90eXBlLAotICAgICAgcHJvbW90ZV9mbG9hdF90eXBlLAotICAgICAgcHJv
bW90ZV9kb3VibGVfdHlwZSwKLSAgICAgIGRpc2NyZXRlX3F1YW50aWxlX3R5cGUsCi0gICAgICBh
c3NlcnRfdW5kZWZpbmVkX3R5cGUsCi0gICAgICBtYXhfc2VyaWVzX2l0ZXJhdGlvbnNfdHlwZSwK
LSAgICAgIG1heF9yb290X2l0ZXJhdGlvbnNfdHlwZT4gcmVzdWx0X2xpc3Q7Ci0gICAvLwotICAg
Ly8gUmVtb3ZlIGFsbCB0aGUgcG9saWNpZXMgdGhhdCBhcmUgdGhlIHNhbWUgYXMgdGhlIGRlZmF1
bHQ6Ci0gICAvLwotICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6OnJlbW92ZV9pZjxyZXN1bHRfbGlz
dCwgZGV0YWlsOjppc19kZWZhdWx0X3BvbGljeTxtcGw6Ol8+ID46OnR5cGUgcmVkdWNlZF9saXN0
OwotICAgLy8KLSAgIC8vIFBhZCBvdXQgdGhlIGxpc3Qgd2l0aCBkZWZhdWx0czoKLSAgIC8vCi0g
ICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6YXBwZW5kX048cmVkdWNlZF9saXN0LCBkZWZhdWx0
X3BvbGljeSwgKDE0IC0gOjpib29zdDo6bXBsOjpzaXplPHJlZHVjZWRfbGlzdD46OnZhbHVlKT46
OnR5cGUgcmVzdWx0X3R5cGU7Ci1wdWJsaWM6Ci0gICB0eXBlZGVmIHBvbGljeTwKLSAgICAgIHR5
cGVuYW1lIG1wbDo6YXQ8cmVzdWx0X3R5cGUsIG1wbDo6aW50XzwwPiA+Ojp0eXBlLAotICAgICAg
dHlwZW5hbWUgbXBsOjphdDxyZXN1bHRfdHlwZSwgbXBsOjppbnRfPDE+ID46OnR5cGUsCi0gICAg
ICB0eXBlbmFtZSBtcGw6OmF0PHJlc3VsdF90eXBlLCBtcGw6OmludF88Mj4gPjo6dHlwZSwKLSAg
ICAgIHR5cGVuYW1lIG1wbDo6YXQ8cmVzdWx0X3R5cGUsIG1wbDo6aW50XzwzPiA+Ojp0eXBlLAot
ICAgICAgdHlwZW5hbWUgbXBsOjphdDxyZXN1bHRfdHlwZSwgbXBsOjppbnRfPDQ+ID46OnR5cGUs
Ci0gICAgICB0eXBlbmFtZSBtcGw6OmF0PHJlc3VsdF90eXBlLCBtcGw6OmludF88NT4gPjo6dHlw
ZSwKLSAgICAgIHR5cGVuYW1lIG1wbDo6YXQ8cmVzdWx0X3R5cGUsIG1wbDo6aW50Xzw2PiA+Ojp0
eXBlLAotICAgICAgdHlwZW5hbWUgbXBsOjphdDxyZXN1bHRfdHlwZSwgbXBsOjppbnRfPDc+ID46
OnR5cGUsCi0gICAgICB0eXBlbmFtZSBtcGw6OmF0PHJlc3VsdF90eXBlLCBtcGw6OmludF88OD4g
Pjo6dHlwZSwKLSAgICAgIHR5cGVuYW1lIG1wbDo6YXQ8cmVzdWx0X3R5cGUsIG1wbDo6aW50Xzw5
PiA+Ojp0eXBlLAotICAgICAgdHlwZW5hbWUgbXBsOjphdDxyZXN1bHRfdHlwZSwgbXBsOjppbnRf
PDEwPiA+Ojp0eXBlLAotICAgICAgdHlwZW5hbWUgbXBsOjphdDxyZXN1bHRfdHlwZSwgbXBsOjpp
bnRfPDExPiA+Ojp0eXBlLAotICAgICAgdHlwZW5hbWUgbXBsOjphdDxyZXN1bHRfdHlwZSwgbXBs
OjppbnRfPDEyPiA+Ojp0eXBlID4gdHlwZTsKLX07Ci0vLwotLy8gRnVsbCBzcGVjaWFsaXNhdGlv
biB0byBzcGVlZCB1cCBjb21waWxhdGlvbiBvZiB0aGUgY29tbW9uIGNhc2U6Ci0vLwotdGVtcGxh
dGUgPD4KLXN0cnVjdCBub3JtYWxpc2U8cG9saWN5PD4sIAotICAgICAgICAgIHByb21vdGVfZmxv
YXQ8ZmFsc2U+LCAKLSAgICAgICAgICBwcm9tb3RlX2RvdWJsZTxmYWxzZT4sIAotICAgICAgICAg
IGRpc2NyZXRlX3F1YW50aWxlPD4sCi0gICAgICAgICAgYXNzZXJ0X3VuZGVmaW5lZDw+LAotICAg
ICAgICAgIGRlZmF1bHRfcG9saWN5LAotICAgICAgICAgIGRlZmF1bHRfcG9saWN5LAotICAgICAg
ICAgIGRlZmF1bHRfcG9saWN5LAotICAgICAgICAgIGRlZmF1bHRfcG9saWN5LAotICAgICAgICAg
IGRlZmF1bHRfcG9saWN5LAotICAgICAgICAgIGRlZmF1bHRfcG9saWN5LAotICAgICAgICAgIGRl
ZmF1bHRfcG9saWN5PgotewotICAgdHlwZWRlZiBwb2xpY3k8ZGV0YWlsOjpmb3J3YXJkaW5nX2Fy
ZzEsIGRldGFpbDo6Zm9yd2FyZGluZ19hcmcyPiB0eXBlOwotfTsKLQotdGVtcGxhdGUgPD4KLXN0
cnVjdCBub3JtYWxpc2U8cG9saWN5PGRldGFpbDo6Zm9yd2FyZGluZ19hcmcxLCBkZXRhaWw6OmZv
cndhcmRpbmdfYXJnMj4sCi0gICAgICAgICAgcHJvbW90ZV9mbG9hdDxmYWxzZT4sCi0gICAgICAg
ICAgcHJvbW90ZV9kb3VibGU8ZmFsc2U+LAotICAgICAgICAgIGRpc2NyZXRlX3F1YW50aWxlPD4s
Ci0gICAgICAgICAgYXNzZXJ0X3VuZGVmaW5lZDw+LAotICAgICAgICAgIGRlZmF1bHRfcG9saWN5
LAotICAgICAgICAgIGRlZmF1bHRfcG9saWN5LAotICAgICAgICAgIGRlZmF1bHRfcG9saWN5LAot
ICAgICAgICAgIGRlZmF1bHRfcG9saWN5LAotICAgICAgICAgIGRlZmF1bHRfcG9saWN5LAotICAg
ICAgICAgIGRlZmF1bHRfcG9saWN5LAotICAgICAgICAgIGRlZmF1bHRfcG9saWN5PgotewotICAg
dHlwZWRlZiBwb2xpY3k8ZGV0YWlsOjpmb3J3YXJkaW5nX2FyZzEsIGRldGFpbDo6Zm9yd2FyZGlu
Z19hcmcyPiB0eXBlOwotfTsKLQotaW5saW5lIEJPT1NUX01BVEhfQ09OU1RFWFBSIHBvbGljeTw+
IG1ha2VfcG9saWN5KCkgQk9PU1RfTk9FWENFUFQKLXsgcmV0dXJuIHBvbGljeTw+KCk7IH0KLQot
dGVtcGxhdGUgPGNsYXNzIEExPgotaW5saW5lIEJPT1NUX01BVEhfQ09OU1RFWFBSIHR5cGVuYW1l
IG5vcm1hbGlzZTxwb2xpY3k8PiwgQTE+Ojp0eXBlIG1ha2VfcG9saWN5KGNvbnN0IEExJikgQk9P
U1RfTk9FWENFUFQKLXsgCi0gICB0eXBlZGVmIHR5cGVuYW1lIG5vcm1hbGlzZTxwb2xpY3k8Piwg
QTE+Ojp0eXBlIHJlc3VsdF90eXBlOwotICAgcmV0dXJuIHJlc3VsdF90eXBlKCk7IAotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNsYXNzIEEyPgotaW5saW5lIEJPT1NUX01BVEhfQ09OU1RFWFBS
IHR5cGVuYW1lIG5vcm1hbGlzZTxwb2xpY3k8PiwgQTEsIEEyPjo6dHlwZSBtYWtlX3BvbGljeShj
b25zdCBBMSYsIGNvbnN0IEEyJikgQk9PU1RfTk9FWENFUFQKLXsgCi0gICB0eXBlZGVmIHR5cGVu
YW1lIG5vcm1hbGlzZTxwb2xpY3k8PiwgQTEsIEEyPjo6dHlwZSByZXN1bHRfdHlwZTsKLSAgIHJl
dHVybiByZXN1bHRfdHlwZSgpOyAKLX0KLQotdGVtcGxhdGUgPGNsYXNzIEExLCBjbGFzcyBBMiwg
Y2xhc3MgQTM+Ci1pbmxpbmUgQk9PU1RfTUFUSF9DT05TVEVYUFIgdHlwZW5hbWUgbm9ybWFsaXNl
PHBvbGljeTw+LCBBMSwgQTIsIEEzPjo6dHlwZSBtYWtlX3BvbGljeShjb25zdCBBMSYsIGNvbnN0
IEEyJiwgY29uc3QgQTMmKSBCT09TVF9OT0VYQ0VQVAoteyAKLSAgIHR5cGVkZWYgdHlwZW5hbWUg
bm9ybWFsaXNlPHBvbGljeTw+LCBBMSwgQTIsIEEzPjo6dHlwZSByZXN1bHRfdHlwZTsKLSAgIHJl
dHVybiByZXN1bHRfdHlwZSgpOyAKLX0KLQotdGVtcGxhdGUgPGNsYXNzIEExLCBjbGFzcyBBMiwg
Y2xhc3MgQTMsIGNsYXNzIEE0PgotaW5saW5lIEJPT1NUX01BVEhfQ09OU1RFWFBSIHR5cGVuYW1l
IG5vcm1hbGlzZTxwb2xpY3k8PiwgQTEsIEEyLCBBMywgQTQ+Ojp0eXBlIG1ha2VfcG9saWN5KGNv
bnN0IEExJiwgY29uc3QgQTImLCBjb25zdCBBMyYsIGNvbnN0IEE0JikgQk9PU1RfTk9FWENFUFQK
LXsgCi0gICB0eXBlZGVmIHR5cGVuYW1lIG5vcm1hbGlzZTxwb2xpY3k8PiwgQTEsIEEyLCBBMywg
QTQ+Ojp0eXBlIHJlc3VsdF90eXBlOwotICAgcmV0dXJuIHJlc3VsdF90eXBlKCk7IAotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNsYXNzIEEyLCBjbGFzcyBBMywgY2xhc3MgQTQsIGNsYXNzIEE1
PgotaW5saW5lIEJPT1NUX01BVEhfQ09OU1RFWFBSIHR5cGVuYW1lIG5vcm1hbGlzZTxwb2xpY3k8
PiwgQTEsIEEyLCBBMywgQTQsIEE1Pjo6dHlwZSBtYWtlX3BvbGljeShjb25zdCBBMSYsIGNvbnN0
IEEyJiwgY29uc3QgQTMmLCBjb25zdCBBNCYsIGNvbnN0IEE1JikgQk9PU1RfTk9FWENFUFQKLXsg
Ci0gICB0eXBlZGVmIHR5cGVuYW1lIG5vcm1hbGlzZTxwb2xpY3k8PiwgQTEsIEEyLCBBMywgQTQs
IEE1Pjo6dHlwZSByZXN1bHRfdHlwZTsKLSAgIHJldHVybiByZXN1bHRfdHlwZSgpOyAKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIEExLCBjbGFzcyBBMiwgY2xhc3MgQTMsIGNsYXNzIEE0LCBjbGFzcyBB
NSwgY2xhc3MgQTY+Ci1pbmxpbmUgQk9PU1RfTUFUSF9DT05TVEVYUFIgdHlwZW5hbWUgbm9ybWFs
aXNlPHBvbGljeTw+LCBBMSwgQTIsIEEzLCBBNCwgQTUsIEE2Pjo6dHlwZSBtYWtlX3BvbGljeShj
b25zdCBBMSYsIGNvbnN0IEEyJiwgY29uc3QgQTMmLCBjb25zdCBBNCYsIGNvbnN0IEE1JiwgY29u
c3QgQTYmKSBCT09TVF9OT0VYQ0VQVAoteyAKLSAgIHR5cGVkZWYgdHlwZW5hbWUgbm9ybWFsaXNl
PHBvbGljeTw+LCBBMSwgQTIsIEEzLCBBNCwgQTUsIEE2Pjo6dHlwZSByZXN1bHRfdHlwZTsKLSAg
IHJldHVybiByZXN1bHRfdHlwZSgpOyAKLX0KLQotdGVtcGxhdGUgPGNsYXNzIEExLCBjbGFzcyBB
MiwgY2xhc3MgQTMsIGNsYXNzIEE0LCBjbGFzcyBBNSwgY2xhc3MgQTYsIGNsYXNzIEE3PgotaW5s
aW5lIEJPT1NUX01BVEhfQ09OU1RFWFBSIHR5cGVuYW1lIG5vcm1hbGlzZTxwb2xpY3k8PiwgQTEs
IEEyLCBBMywgQTQsIEE1LCBBNiwgQTc+Ojp0eXBlIG1ha2VfcG9saWN5KGNvbnN0IEExJiwgY29u
c3QgQTImLCBjb25zdCBBMyYsIGNvbnN0IEE0JiwgY29uc3QgQTUmLCBjb25zdCBBNiYsIGNvbnN0
IEE3JikgQk9PU1RfTk9FWENFUFQKLXsgCi0gICB0eXBlZGVmIHR5cGVuYW1lIG5vcm1hbGlzZTxw
b2xpY3k8PiwgQTEsIEEyLCBBMywgQTQsIEE1LCBBNiwgQTc+Ojp0eXBlIHJlc3VsdF90eXBlOwot
ICAgcmV0dXJuIHJlc3VsdF90eXBlKCk7IAotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNsYXNz
IEEyLCBjbGFzcyBBMywgY2xhc3MgQTQsIGNsYXNzIEE1LCBjbGFzcyBBNiwgY2xhc3MgQTcsIGNs
YXNzIEE4PgotaW5saW5lIEJPT1NUX01BVEhfQ09OU1RFWFBSIHR5cGVuYW1lIG5vcm1hbGlzZTxw
b2xpY3k8PiwgQTEsIEEyLCBBMywgQTQsIEE1LCBBNiwgQTcsIEE4Pjo6dHlwZSBtYWtlX3BvbGlj
eShjb25zdCBBMSYsIGNvbnN0IEEyJiwgY29uc3QgQTMmLCBjb25zdCBBNCYsIGNvbnN0IEE1Jiwg
Y29uc3QgQTYmLCBjb25zdCBBNyYsIGNvbnN0IEE4JikgQk9PU1RfTk9FWENFUFQKLXsgCi0gICB0
eXBlZGVmIHR5cGVuYW1lIG5vcm1hbGlzZTxwb2xpY3k8PiwgQTEsIEEyLCBBMywgQTQsIEE1LCBB
NiwgQTcsIEE4Pjo6dHlwZSByZXN1bHRfdHlwZTsKLSAgIHJldHVybiByZXN1bHRfdHlwZSgpOyAK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIEExLCBjbGFzcyBBMiwgY2xhc3MgQTMsIGNsYXNzIEE0LCBj
bGFzcyBBNSwgY2xhc3MgQTYsIGNsYXNzIEE3LCBjbGFzcyBBOCwgY2xhc3MgQTk+Ci1pbmxpbmUg
Qk9PU1RfTUFUSF9DT05TVEVYUFIgdHlwZW5hbWUgbm9ybWFsaXNlPHBvbGljeTw+LCBBMSwgQTIs
IEEzLCBBNCwgQTUsIEE2LCBBNywgQTgsIEE5Pjo6dHlwZSBtYWtlX3BvbGljeShjb25zdCBBMSYs
IGNvbnN0IEEyJiwgY29uc3QgQTMmLCBjb25zdCBBNCYsIGNvbnN0IEE1JiwgY29uc3QgQTYmLCBj
b25zdCBBNyYsIGNvbnN0IEE4JiwgY29uc3QgQTkmKSBCT09TVF9OT0VYQ0VQVAoteyAKLSAgIHR5
cGVkZWYgdHlwZW5hbWUgbm9ybWFsaXNlPHBvbGljeTw+LCBBMSwgQTIsIEEzLCBBNCwgQTUsIEE2
LCBBNywgQTgsIEE5Pjo6dHlwZSByZXN1bHRfdHlwZTsKLSAgIHJldHVybiByZXN1bHRfdHlwZSgp
OyAKLX0KLQotdGVtcGxhdGUgPGNsYXNzIEExLCBjbGFzcyBBMiwgY2xhc3MgQTMsIGNsYXNzIEE0
LCBjbGFzcyBBNSwgY2xhc3MgQTYsIGNsYXNzIEE3LCBjbGFzcyBBOCwgY2xhc3MgQTksIGNsYXNz
IEExMD4KLWlubGluZSBCT09TVF9NQVRIX0NPTlNURVhQUiB0eXBlbmFtZSBub3JtYWxpc2U8cG9s
aWN5PD4sIEExLCBBMiwgQTMsIEE0LCBBNSwgQTYsIEE3LCBBOCwgQTksIEExMD46OnR5cGUgbWFr
ZV9wb2xpY3koY29uc3QgQTEmLCBjb25zdCBBMiYsIGNvbnN0IEEzJiwgY29uc3QgQTQmLCBjb25z
dCBBNSYsIGNvbnN0IEE2JiwgY29uc3QgQTcmLCBjb25zdCBBOCYsIGNvbnN0IEE5JiwgY29uc3Qg
QTEwJikgQk9PU1RfTk9FWENFUFQKLXsgCi0gICB0eXBlZGVmIHR5cGVuYW1lIG5vcm1hbGlzZTxw
b2xpY3k8PiwgQTEsIEEyLCBBMywgQTQsIEE1LCBBNiwgQTcsIEE4LCBBOSwgQTEwPjo6dHlwZSBy
ZXN1bHRfdHlwZTsKLSAgIHJldHVybiByZXN1bHRfdHlwZSgpOyAKLX0KLQotdGVtcGxhdGUgPGNs
YXNzIEExLCBjbGFzcyBBMiwgY2xhc3MgQTMsIGNsYXNzIEE0LCBjbGFzcyBBNSwgY2xhc3MgQTYs
IGNsYXNzIEE3LCBjbGFzcyBBOCwgY2xhc3MgQTksIGNsYXNzIEExMCwgY2xhc3MgQTExPgotaW5s
aW5lIEJPT1NUX01BVEhfQ09OU1RFWFBSIHR5cGVuYW1lIG5vcm1hbGlzZTxwb2xpY3k8PiwgQTEs
IEEyLCBBMywgQTQsIEE1LCBBNiwgQTcsIEE4LCBBOSwgQTEwLCBBMTE+Ojp0eXBlIG1ha2VfcG9s
aWN5KGNvbnN0IEExJiwgY29uc3QgQTImLCBjb25zdCBBMyYsIGNvbnN0IEE0JiwgY29uc3QgQTUm
LCBjb25zdCBBNiYsIGNvbnN0IEE3JiwgY29uc3QgQTgmLCBjb25zdCBBOSYsIGNvbnN0IEExMCYs
IGNvbnN0IEExMSYpIEJPT1NUX05PRVhDRVBUCi17Ci0gICB0eXBlZGVmIHR5cGVuYW1lIG5vcm1h
bGlzZTxwb2xpY3k8PiwgQTEsIEEyLCBBMywgQTQsIEE1LCBBNiwgQTcsIEE4LCBBOSwgQTEwLCBB
MTE+Ojp0eXBlIHJlc3VsdF90eXBlOwotICAgcmV0dXJuIHJlc3VsdF90eXBlKCk7Ci19Ci0KLS8v
Ci0vLyBUcmFpdHMgY2xhc3MgdG8gaGFuZGxlIGludGVybmFsIHByb21vdGlvbjoKLS8vCi10ZW1w
bGF0ZSA8Y2xhc3MgUmVhbCwgY2xhc3MgUG9saWN5Pgotc3RydWN0IGV2YWx1YXRpb24KLXsKLSAg
IHR5cGVkZWYgUmVhbCB0eXBlOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFBvbGljeT4KLXN0cnVj
dCBldmFsdWF0aW9uPGZsb2F0LCBQb2xpY3k+Ci17Ci0gICB0eXBlZGVmIHR5cGVuYW1lIG1wbDo6
aWZfPHR5cGVuYW1lIFBvbGljeTo6cHJvbW90ZV9mbG9hdF90eXBlLCBkb3VibGUsIGZsb2F0Pjo6
dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFBvbGljeT4KLXN0cnVjdCBldmFsdWF0
aW9uPGRvdWJsZSwgUG9saWN5PgotewotICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6OmlmXzx0eXBl
bmFtZSBQb2xpY3k6OnByb21vdGVfZG91YmxlX3R5cGUsIGxvbmcgZG91YmxlLCBkb3VibGU+Ojp0
eXBlIHR5cGU7Ci19OwotCi0jaWZkZWYgQk9PU1RfTk9fTElNSVRTX0NPTVBJTEVfVElNRV9DT05T
VEFOVFMKLQotdGVtcGxhdGUgPGNsYXNzIFJlYWw+Ci1zdHJ1Y3QgYmFzaWNfZGlnaXRzIDogcHVi
bGljIG1wbDo6aW50XzwwPnsgfTsKLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgYmFzaWNfZGlnaXRzPGZs
b2F0PiA6IHB1YmxpYyBtcGw6OmludF88RkxUX01BTlRfRElHPnsgfTsKLXRlbXBsYXRlIDw+Ci1z
dHJ1Y3QgYmFzaWNfZGlnaXRzPGRvdWJsZT4gOiBwdWJsaWMgbXBsOjppbnRfPERCTF9NQU5UX0RJ
Rz57IH07Ci10ZW1wbGF0ZSA8Pgotc3RydWN0IGJhc2ljX2RpZ2l0czxsb25nIGRvdWJsZT4gOiBw
dWJsaWMgbXBsOjppbnRfPExEQkxfTUFOVF9ESUc+eyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUmVh
bCwgY2xhc3MgUG9saWN5Pgotc3RydWN0IHByZWNpc2lvbgotewotICAgQk9PU1RfU1RBVElDX0FT
U0VSVCggOjpzdGQ6Om51bWVyaWNfbGltaXRzPFJlYWw+OjpyYWRpeCA9PSAyKTsKLSAgIHR5cGVk
ZWYgdHlwZW5hbWUgUG9saWN5OjpwcmVjaXNpb25fdHlwZSBwcmVjaXNpb25fdHlwZTsKLSAgIHR5
cGVkZWYgYmFzaWNfZGlnaXRzPFJlYWw+IGRpZ2l0c190OwotICAgdHlwZWRlZiB0eXBlbmFtZSBt
cGw6OmlmXzwKLSAgICAgIG1wbDo6ZXF1YWxfdG88ZGlnaXRzX3QsIG1wbDo6aW50XzwwPiA+LAot
ICAgICAgLy8gUG9zc2libHkgdW5rbm93biBwcmVjaXNpb246Ci0gICAgICBwcmVjaXNpb25fdHlw
ZSwKLSAgICAgIHR5cGVuYW1lIG1wbDo6aWZfPAotICAgICAgICAgbXBsOjpvcl88bXBsOjpsZXNz
X2VxdWFsPGRpZ2l0c190LCBwcmVjaXNpb25fdHlwZT4sIG1wbDo6bGVzc19lcXVhbDxwcmVjaXNp
b25fdHlwZSwgbXBsOjppbnRfPDA+ID4gPiwKLSAgICAgICAgIC8vIERlZmF1bHQgY2FzZSwgZnVs
bCBwcmVjaXNpb24gZm9yIFJlYWxUeXBlOgotICAgICAgICAgZGlnaXRzMjwgOjpzdGQ6Om51bWVy
aWNfbGltaXRzPFJlYWw+OjpkaWdpdHM+LAotICAgICAgICAgLy8gVXNlciBjdXN0b21pc2VkIHBy
ZWNpc2lvbjoKLSAgICAgICAgIHByZWNpc2lvbl90eXBlCi0gICAgICA+Ojp0eXBlCi0gICA+Ojp0
eXBlIHR5cGU7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUG9saWN5Pgotc3RydWN0IHByZWNpc2lv
bjxmbG9hdCwgUG9saWN5PgotewotICAgdHlwZWRlZiBkaWdpdHMyPEZMVF9NQU5UX0RJRz4gdHlw
ZTsKLX07Ci10ZW1wbGF0ZSA8Y2xhc3MgUG9saWN5Pgotc3RydWN0IHByZWNpc2lvbjxkb3VibGUs
IFBvbGljeT4KLXsKLSAgIHR5cGVkZWYgZGlnaXRzMjxEQkxfTUFOVF9ESUc+IHR5cGU7Ci19Owot
dGVtcGxhdGUgPGNsYXNzIFBvbGljeT4KLXN0cnVjdCBwcmVjaXNpb248bG9uZyBkb3VibGUsIFBv
bGljeT4KLXsKLSAgIHR5cGVkZWYgZGlnaXRzMjxMREJMX01BTlRfRElHPiB0eXBlOwotfTsKLQot
I2Vsc2UKLQotdGVtcGxhdGUgPGNsYXNzIFJlYWwsIGNsYXNzIFBvbGljeT4KLXN0cnVjdCBwcmVj
aXNpb24KLXsKLSAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoKDo6c3RkOjpudW1lcmljX2xpbWl0czxS
ZWFsPjo6cmFkaXggPT0gMikgfHwgKCg6OnN0ZDo6bnVtZXJpY19saW1pdHM8UmVhbD46OmlzX3Nw
ZWNpYWxpemVkID09IDApIHx8ICg6OnN0ZDo6bnVtZXJpY19saW1pdHM8UmVhbD46OmRpZ2l0cyA9
PSAwKSkpOwotI2lmbmRlZiBfX0JPUkxBTkRDX18KLSAgIHR5cGVkZWYgdHlwZW5hbWUgUG9saWN5
OjpwcmVjaXNpb25fdHlwZSBwcmVjaXNpb25fdHlwZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgbXBs
OjppZl9jPAotICAgICAgKCg6OnN0ZDo6bnVtZXJpY19saW1pdHM8UmVhbD46OmlzX3NwZWNpYWxp
emVkID09IDApIHx8ICg6OnN0ZDo6bnVtZXJpY19saW1pdHM8UmVhbD46OmRpZ2l0cyA9PSAwKSks
Ci0gICAgICAvLyBQb3NzaWJseSB1bmtub3duIHByZWNpc2lvbjoKLSAgICAgIHByZWNpc2lvbl90
eXBlLAotICAgICAgdHlwZW5hbWUgbXBsOjppZl9jPAotICAgICAgICAgKCg6OnN0ZDo6bnVtZXJp
Y19saW1pdHM8UmVhbD46OmRpZ2l0cyA8PSBwcmVjaXNpb25fdHlwZTo6dmFsdWUpIAotICAgICAg
ICAgfHwgKFBvbGljeTo6cHJlY2lzaW9uX3R5cGU6OnZhbHVlIDw9IDApKSwKLSAgICAgICAgIC8v
IERlZmF1bHQgY2FzZSwgZnVsbCBwcmVjaXNpb24gZm9yIFJlYWxUeXBlOgotICAgICAgICAgZGln
aXRzMjwgOjpzdGQ6Om51bWVyaWNfbGltaXRzPFJlYWw+OjpkaWdpdHM+LAotICAgICAgICAgLy8g
VXNlciBjdXN0b21pc2VkIHByZWNpc2lvbjoKLSAgICAgICAgIHByZWNpc2lvbl90eXBlCi0gICAg
ICA+Ojp0eXBlCi0gICA+Ojp0eXBlIHR5cGU7Ci0jZWxzZQotICAgdHlwZWRlZiB0eXBlbmFtZSBQ
b2xpY3k6OnByZWNpc2lvbl90eXBlIHByZWNpc2lvbl90eXBlOwotICAgdHlwZWRlZiBtcGw6Omlu
dF88IDo6c3RkOjpudW1lcmljX2xpbWl0czxSZWFsPjo6ZGlnaXRzPiBkaWdpdHNfdDsKLSAgIHR5
cGVkZWYgbXBsOjpib29sXzwgOjpzdGQ6Om51bWVyaWNfbGltaXRzPFJlYWw+Ojppc19zcGVjaWFs
aXplZD4gc3BlY190OwotICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6OmlmXzwKLSAgICAgIG1wbDo6
b3JfPG1wbDo6ZXF1YWxfdG88c3BlY190LCBtcGw6OmZhbHNlXz4sIG1wbDo6ZXF1YWxfdG88ZGln
aXRzX3QsIG1wbDo6aW50XzwwPiA+ID4sCi0gICAgICAvLyBQb3NzaWJseSB1bmtub3duIHByZWNp
c2lvbjoKLSAgICAgIHByZWNpc2lvbl90eXBlLAotICAgICAgdHlwZW5hbWUgbXBsOjppZl88Ci0g
ICAgICAgICBtcGw6Om9yXzxtcGw6Omxlc3NfZXF1YWw8ZGlnaXRzX3QsIHByZWNpc2lvbl90eXBl
PiwgbXBsOjpsZXNzX2VxdWFsPHByZWNpc2lvbl90eXBlLCBtcGw6OmludF88MD4gPiA+LAotICAg
ICAgICAgLy8gRGVmYXVsdCBjYXNlLCBmdWxsIHByZWNpc2lvbiBmb3IgUmVhbFR5cGU6Ci0gICAg
ICAgICBkaWdpdHMyPCA6OnN0ZDo6bnVtZXJpY19saW1pdHM8UmVhbD46OmRpZ2l0cz4sCi0gICAg
ICAgICAvLyBVc2VyIGN1c3RvbWlzZWQgcHJlY2lzaW9uOgotICAgICAgICAgcHJlY2lzaW9uX3R5
cGUKLSAgICAgID46OnR5cGUKLSAgID46OnR5cGUgdHlwZTsKLSNlbmRpZgotfTsKLQotI2VuZGlm
Ci0KLSNpZmRlZiBCT09TVF9NQVRIX1VTRV9GTE9BVDEyOAotCi10ZW1wbGF0ZSA8Y2xhc3MgUG9s
aWN5Pgotc3RydWN0IHByZWNpc2lvbjxCT09TVF9NQVRIX0ZMT0FUMTI4X1RZUEUsIFBvbGljeT4K
LXsKLSAgIHR5cGVkZWYgbXBsOjppbnRfPDExMz4gdHlwZTsKLX07Ci0KLSNlbmRpZgotCi1uYW1l
c3BhY2UgZGV0YWlsewotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotaW5saW5l
IEJPT1NUX01BVEhfQ09OU1RFWFBSIGludCBkaWdpdHNfaW1wKG1wbDo6dHJ1ZV8gY29uc3QmKSBC
T09TVF9OT0VYQ0VQVAotewotI2lmbmRlZiBCT09TVF9OT19MSU1JVFNfQ09NUElMRV9USU1FX0NP
TlNUQU5UUwotICAgQk9PU1RfU1RBVElDX0FTU0VSVCggOjpzdGQ6Om51bWVyaWNfbGltaXRzPFQ+
Ojppc19zcGVjaWFsaXplZCk7Ci0jZWxzZQotICAgQk9PU1RfQVNTRVJUKDo6c3RkOjpudW1lcmlj
X2xpbWl0czxUPjo6aXNfc3BlY2lhbGl6ZWQpOwotI2VuZGlmCi0gICB0eXBlZGVmIHR5cGVuYW1l
IGJvb3N0OjptYXRoOjpwb2xpY2llczo6cHJlY2lzaW9uPFQsIFBvbGljeT46OnR5cGUgcF90Owot
ICAgcmV0dXJuIHBfdDo6dmFsdWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBQb2xp
Y3k+Ci1pbmxpbmUgQk9PU1RfTUFUSF9DT05TVEVYUFIgaW50IGRpZ2l0c19pbXAobXBsOjpmYWxz
ZV8gY29uc3QmKSBCT09TVF9OT0VYQ0VQVAotewotICAgcmV0dXJuIHRvb2xzOjpkaWdpdHM8VD4o
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBQb2xpY3k+Ci1pbmxpbmUgQk9PU1RfTUFUSF9DT05TVEVYUFIgaW50IGRpZ2l0cyhCT09TVF9N
QVRIX0VYUExJQ0lUX1RFTVBMQVRFX1RZUEUoVCkpIEJPT1NUX05PRVhDRVBUCi17Ci0gICB0eXBl
ZGVmIG1wbDo6Ym9vbF88IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3NwZWNpYWxpemVkID4g
dGFnX3R5cGU7Ci0gICByZXR1cm4gZGV0YWlsOjpkaWdpdHNfaW1wPFQsIFBvbGljeT4odGFnX3R5
cGUoKSk7Ci19Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotaW5saW5lIEJPT1NU
X01BVEhfQ09OU1RFWFBSIGludCBkaWdpdHNfYmFzZTEwKEJPT1NUX01BVEhfRVhQTElDSVRfVEVN
UExBVEVfVFlQRShUKSkgQk9PU1RfTk9FWENFUFQKLXsKLSAgIHJldHVybiBib29zdDo6bWF0aDo6
cG9saWNpZXM6OmRpZ2l0czxULCBQb2xpY3k+KCkgKiAzMDEgLyAxMDAwTDsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIFBvbGljeT4KLWlubGluZSBCT09TVF9NQVRIX0NPTlNURVhQUiB1bnNpZ25lZCBs
b25nIGdldF9tYXhfc2VyaWVzX2l0ZXJhdGlvbnMoKSBCT09TVF9OT0VYQ0VQVAotewotICAgdHlw
ZWRlZiB0eXBlbmFtZSBQb2xpY3k6Om1heF9zZXJpZXNfaXRlcmF0aW9uc190eXBlIGl0ZXJfdHlw
ZTsKLSAgIHJldHVybiBpdGVyX3R5cGU6OnZhbHVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUG9s
aWN5PgotaW5saW5lIEJPT1NUX01BVEhfQ09OU1RFWFBSIHVuc2lnbmVkIGxvbmcgZ2V0X21heF9y
b290X2l0ZXJhdGlvbnMoKSBCT09TVF9OT0VYQ0VQVAotewotICAgdHlwZWRlZiB0eXBlbmFtZSBQ
b2xpY3k6Om1heF9yb290X2l0ZXJhdGlvbnNfdHlwZSBpdGVyX3R5cGU7Ci0gICByZXR1cm4gaXRl
cl90eXBlOjp2YWx1ZTsKLX0KLQotbmFtZXNwYWNlIGRldGFpbHsKLQotdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIERpZ2l0cywgY2xhc3MgU21hbGwsIGNsYXNzIERlZmF1bHQ+Ci1zdHJ1Y3Qgc2Vy
aWVzX2ZhY3Rvcl9jYWxjCi17Ci0gICBzdGF0aWMgVCBnZXQoKSBCT09TVF9NQVRIX05PRVhDRVBU
KFQpCi0gICB7Ci0gICAgICByZXR1cm4gbGRleHAoVCgxLjApLCAxIC0gRGlnaXRzOjp2YWx1ZSk7
Ci0gICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRGlnaXRzPgotc3RydWN0IHNl
cmllc19mYWN0b3JfY2FsYzxULCBEaWdpdHMsIG1wbDo6dHJ1ZV8sIG1wbDo6dHJ1ZV8+Ci17Ci0g
ICBzdGF0aWMgQk9PU1RfTUFUSF9DT05TVEVYUFIgVCBnZXQoKSBCT09TVF9NQVRIX05PRVhDRVBU
KFQpCi0gICB7Ci0gICAgICByZXR1cm4gYm9vc3Q6Om1hdGg6OnRvb2xzOjplcHNpbG9uPFQ+KCk7
Ci0gICB9Ci19OwotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIERpZ2l0cz4KLXN0cnVjdCBzZXJp
ZXNfZmFjdG9yX2NhbGM8VCwgRGlnaXRzLCBtcGw6OnRydWVfLCBtcGw6OmZhbHNlXz4KLXsKLSAg
IHN0YXRpYyBCT09TVF9NQVRIX0NPTlNURVhQUiBUIGdldCgpIEJPT1NUX01BVEhfTk9FWENFUFQo
VCkKLSAgIHsKLSAgICAgIHJldHVybiAxIC8gc3RhdGljX2Nhc3Q8VD4oc3RhdGljX2Nhc3Q8Ym9v
c3Q6OnVpbnRtYXhfdD4oMXUpIDw8IChEaWdpdHM6OnZhbHVlIC0gMSkpOwotICAgfQotfTsKLXRl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBEaWdpdHM+Ci1zdHJ1Y3Qgc2VyaWVzX2ZhY3Rvcl9jYWxj
PFQsIERpZ2l0cywgbXBsOjpmYWxzZV8sIG1wbDo6dHJ1ZV8+Ci17Ci0gICBzdGF0aWMgQk9PU1Rf
TUFUSF9DT05TVEVYUFIgVCBnZXQoKSBCT09TVF9NQVRIX05PRVhDRVBUKFQpCi0gICB7Ci0gICAg
ICByZXR1cm4gYm9vc3Q6Om1hdGg6OnRvb2xzOjplcHNpbG9uPFQ+KCk7Ci0gICB9Ci19OwotCi10
ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotaW5saW5lIEJPT1NUX01BVEhfQ09OU1RF
WFBSIFQgZ2V0X2Vwc2lsb25faW1wKG1wbDo6dHJ1ZV8gY29uc3QmKSBCT09TVF9NQVRIX05PRVhD
RVBUKFQpCi17Ci0jaWZuZGVmIEJPT1NUX05PX0xJTUlUU19DT01QSUxFX1RJTUVfQ09OU1RBTlRT
Ci0gICBCT09TVF9TVEFUSUNfQVNTRVJUKCA6OnN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3Nw
ZWNpYWxpemVkKTsKLSAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoIDo6c3RkOjpudW1lcmljX2xpbWl0
czxUPjo6cmFkaXggPT0gMik7Ci0jZWxzZQotICAgQk9PU1RfQVNTRVJUKDo6c3RkOjpudW1lcmlj
X2xpbWl0czxUPjo6aXNfc3BlY2lhbGl6ZWQpOwotICAgQk9PU1RfQVNTRVJUKDo6c3RkOjpudW1l
cmljX2xpbWl0czxUPjo6cmFkaXggPT0gMik7Ci0jZW5kaWYKLSAgIHR5cGVkZWYgdHlwZW5hbWUg
Ym9vc3Q6Om1hdGg6OnBvbGljaWVzOjpwcmVjaXNpb248VCwgUG9saWN5Pjo6dHlwZSBwX3Q7Ci0g
ICB0eXBlZGVmIG1wbDo6Ym9vbF88cF90Ojp2YWx1ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGJv
b3N0Ojp1aW50bWF4X3Q+OjpkaWdpdHM+IGlzX3NtYWxsX2ludDsKLSAgIHR5cGVkZWYgbXBsOjpi
b29sXzxwX3Q6OnZhbHVlID49IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmRpZ2l0cz4gaXNfZGVm
YXVsdF92YWx1ZTsKLSAgIHJldHVybiBzZXJpZXNfZmFjdG9yX2NhbGM8VCwgcF90LCBpc19zbWFs
bF9pbnQsIGlzX2RlZmF1bHRfdmFsdWU+OjpnZXQoKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQs
IGNsYXNzIFBvbGljeT4KLWlubGluZSBCT09TVF9NQVRIX0NPTlNURVhQUiBUIGdldF9lcHNpbG9u
X2ltcChtcGw6OmZhbHNlXyBjb25zdCYpIEJPT1NUX01BVEhfTk9FWENFUFQoVCkKLXsKLSAgIHJl
dHVybiB0b29sczo6ZXBzaWxvbjxUPigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQot
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFBvbGljeT4KLWlubGluZSBCT09TVF9NQVRIX0NPTlNU
RVhQUiBUIGdldF9lcHNpbG9uKEJPT1NUX01BVEhfRVhQTElDSVRfVEVNUExBVEVfVFlQRShUKSkg
Qk9PU1RfTUFUSF9OT0VYQ0VQVChUKQotewotICAgdHlwZWRlZiBtcGw6OmJvb2xfPCAoc3RkOjpu
dW1lcmljX2xpbWl0czxUPjo6aXNfc3BlY2lhbGl6ZWQgJiYgKHN0ZDo6bnVtZXJpY19saW1pdHM8
VD46OnJhZGl4ID09IDIpKSA+IHRhZ190eXBlOwotICAgcmV0dXJuIGRldGFpbDo6Z2V0X2Vwc2ls
b25faW1wPFQsIFBvbGljeT4odGFnX3R5cGUoKSk7Ci19Ci0KLW5hbWVzcGFjZSBkZXRhaWx7Ci0K
LXRlbXBsYXRlIDxjbGFzcyBBMSwgCi0gICAgICAgICAgY2xhc3MgQTIsIAotICAgICAgICAgIGNs
YXNzIEEzLAotICAgICAgICAgIGNsYXNzIEE0LAotICAgICAgICAgIGNsYXNzIEE1LAotICAgICAg
ICAgIGNsYXNzIEE2LAotICAgICAgICAgIGNsYXNzIEE3LAotICAgICAgICAgIGNsYXNzIEE4LAot
ICAgICAgICAgIGNsYXNzIEE5LAotICAgICAgICAgIGNsYXNzIEExMCwKLSAgICAgICAgICBjbGFz
cyBBMTE+Ci1jaGFyIHRlc3RfaXNfcG9saWN5KGNvbnN0IHBvbGljeTxBMSxBMixBMyxBNCxBNSxB
NixBNyxBOCxBOSxBMTAsQTExPiopOwotZG91YmxlIHRlc3RfaXNfcG9saWN5KC4uLik7Ci0KLXRl
bXBsYXRlIDxjbGFzcyBQPgotc3RydWN0IGlzX3BvbGljeV9pbXAKLXsKLSAgIEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChib29sLCB2YWx1ZSA9IChzaXplb2YoOjpib29zdDo6bWF0aDo6cG9saWNpZXM6
OmRldGFpbDo6dGVzdF9pc19wb2xpY3koc3RhdGljX2Nhc3Q8UCo+KDApKSkgPT0gMSkpOwotfTsK
LQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgUD4KLXN0cnVjdCBpc19wb2xpY3kgOiBwdWJsaWMgbXBs
Ojpib29sXzwgOjpib29zdDo6bWF0aDo6cG9saWNpZXM6OmRldGFpbDo6aXNfcG9saWN5X2ltcDxQ
Pjo6dmFsdWU+IHt9OwotCi0vLwotLy8gSGVscGVyIHRyYWl0cyBjbGFzcyBmb3IgZGlzdHJpYnV0
aW9uIGVycm9yIGhhbmRsaW5nOgotLy8KLXRlbXBsYXRlIDxjbGFzcyBQb2xpY3k+Ci1zdHJ1Y3Qg
Y29uc3RydWN0b3JfZXJyb3JfY2hlY2sKLXsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgUG9saWN5Ojpk
b21haW5fZXJyb3JfdHlwZSBkb21haW5fZXJyb3JfdHlwZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUg
bXBsOjppZl9jPAotICAgICAgKGRvbWFpbl9lcnJvcl90eXBlOjp2YWx1ZSA9PSB0aHJvd19vbl9l
cnJvcikgfHwgKGRvbWFpbl9lcnJvcl90eXBlOjp2YWx1ZSA9PSB1c2VyX2Vycm9yKSB8fCAoZG9t
YWluX2Vycm9yX3R5cGU6OnZhbHVlID09IGVycm5vX29uX2Vycm9yKSwKLSAgICAgIG1wbDo6dHJ1
ZV8sCi0gICAgICBtcGw6OmZhbHNlXz46OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFz
cyBQb2xpY3k+Ci1zdHJ1Y3QgbWV0aG9kX2Vycm9yX2NoZWNrCi17Ci0gICB0eXBlZGVmIHR5cGVu
YW1lIFBvbGljeTo6ZG9tYWluX2Vycm9yX3R5cGUgZG9tYWluX2Vycm9yX3R5cGU7Ci0gICB0eXBl
ZGVmIHR5cGVuYW1lIG1wbDo6aWZfYzwKLSAgICAgIChkb21haW5fZXJyb3JfdHlwZTo6dmFsdWUg
PT0gdGhyb3dfb25fZXJyb3IpICYmIChkb21haW5fZXJyb3JfdHlwZTo6dmFsdWUgIT0gdXNlcl9l
cnJvciksCi0gICAgICBtcGw6OmZhbHNlXywKLSAgICAgIG1wbDo6dHJ1ZV8+Ojp0eXBlIHR5cGU7
Ci19OwotLy8KLS8vIERvZXMgdGhlIFBvbGljeSBldmVyIHRocm93IG9uIGVycm9yPwotLy8KLXRl
bXBsYXRlIDxjbGFzcyBQb2xpY3k+Ci1zdHJ1Y3QgaXNfbm9leGNlcHRfZXJyb3JfcG9saWN5Ci17
Ci0gICB0eXBlZGVmIHR5cGVuYW1lIFBvbGljeTo6ZG9tYWluX2Vycm9yX3R5cGUgICAgICAgICAg
ICAgICB0MTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgUG9saWN5Ojpwb2xlX2Vycm9yX3R5cGUgICAg
ICAgICAgICAgICAgIHQyOwotICAgdHlwZWRlZiB0eXBlbmFtZSBQb2xpY3k6Om92ZXJmbG93X2Vy
cm9yX3R5cGUgICAgICAgICAgICAgdDM7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIFBvbGljeTo6dW5k
ZXJmbG93X2Vycm9yX3R5cGUgICAgICAgICAgICB0NDsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgUG9s
aWN5OjpkZW5vcm1fZXJyb3JfdHlwZSAgICAgICAgICAgICAgIHQ1OwotICAgdHlwZWRlZiB0eXBl
bmFtZSBQb2xpY3k6OmV2YWx1YXRpb25fZXJyb3JfdHlwZSAgICAgICAgICAgdDY7Ci0gICB0eXBl
ZGVmIHR5cGVuYW1lIFBvbGljeTo6cm91bmRpbmdfZXJyb3JfdHlwZSAgICAgICAgICAgICB0NzsK
LSAgIHR5cGVkZWYgdHlwZW5hbWUgUG9saWN5OjppbmRldGVybWluYXRlX3Jlc3VsdF9lcnJvcl90
eXBlIHQ4OwotCi0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSAKLSAgICAg
ICgodDE6OnZhbHVlICE9IHRocm93X29uX2Vycm9yKSAmJiAodDE6OnZhbHVlICE9IHVzZXJfZXJy
b3IpCi0gICAgICAmJiAodDI6OnZhbHVlICE9IHRocm93X29uX2Vycm9yKSAmJiAodDI6OnZhbHVl
ICE9IHVzZXJfZXJyb3IpCi0gICAgICAmJiAodDM6OnZhbHVlICE9IHRocm93X29uX2Vycm9yKSAm
JiAodDM6OnZhbHVlICE9IHVzZXJfZXJyb3IpCi0gICAgICAmJiAodDQ6OnZhbHVlICE9IHRocm93
X29uX2Vycm9yKSAmJiAodDQ6OnZhbHVlICE9IHVzZXJfZXJyb3IpCi0gICAgICAmJiAodDU6OnZh
bHVlICE9IHRocm93X29uX2Vycm9yKSAmJiAodDU6OnZhbHVlICE9IHVzZXJfZXJyb3IpCi0gICAg
ICAmJiAodDY6OnZhbHVlICE9IHRocm93X29uX2Vycm9yKSAmJiAodDY6OnZhbHVlICE9IHVzZXJf
ZXJyb3IpCi0gICAgICAmJiAodDc6OnZhbHVlICE9IHRocm93X29uX2Vycm9yKSAmJiAodDc6OnZh
bHVlICE9IHVzZXJfZXJyb3IpCi0gICAgICAmJiAodDg6OnZhbHVlICE9IHRocm93X29uX2Vycm9y
KSAmJiAodDg6OnZhbHVlICE9IHVzZXJfZXJyb3IpKSk7Ci19OwotCi19fX0gLy8gbmFtZXNwYWNl
cwotCi0jZW5kaWYgLy8gQk9PU1RfTUFUSF9QT0xJQ1lfSFBQCi0KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21hdGgvc3BlY2lhbF9mdW5jdGlv
bnMvZGV0YWlsL2ZwX3RyYWl0cy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tYXRoL3NwZWNpYWxfZnVuY3Rpb25zL2RldGFpbC9mcF90cmFpdHMuaHBwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWRjNTE2OWFhZmI4NTNjZmEzODI4MmI4MDFi
ODFhODU3ZDBhY2E1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21hdGgvc3BlY2lh
bF9mdW5jdGlvbnMvZGV0YWlsL2ZwX3RyYWl0cy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw1ODAg
KzAsMCBAQAotLy8gZnBfdHJhaXRzLmhwcAotCi0jaWZuZGVmIEJPT1NUX01BVEhfRlBfVFJBSVRT
X0hQUAotI2RlZmluZSBCT09TVF9NQVRIX0ZQX1RSQUlUU19IUFAKLQotLy8gQ29weXJpZ2h0IChj
KSAyMDA2IEpvaGFuIFJhZGUKLQotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQKLS8vIG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8x
XzAudHh0KQotCi0vKgotVG8gc3VwcG9ydCBvbGQgY29tcGlsZXJzLCBjYXJlIGhhcyBiZWVuIHRh
a2VuIHRvIGF2b2lkIHBhcnRpYWwgdGVtcGxhdGUKLXNwZWNpYWxpemF0aW9uIGFuZCBtZXRhIGZ1
bmN0aW9uIGZvcndhcmRpbmcuCi1XaXRoIHRoZXNlIHRlY2huaXF1ZXMsIHRoZSBjb2RlIGNvdWxk
IGJlIHNpbXBsaWZpZWQuCi0qLwotCi0jaWYgZGVmaW5lZChfX3ZtcykgJiYgZGVmaW5lZChfX0RF
Q0NYWCkgJiYgIV9fSUVFRV9GTE9BVAotLy8gVGhlIFZBWCBmbG9hdGluZyBwb2ludCBmb3JtYXRz
IGFyZSB1c2VkIChmb3IgZmxvYXQgYW5kIGRvdWJsZSkKLSMgICBkZWZpbmUgQk9PU1RfRlBDTEFT
U0lGWV9WQVhfRk9STUFUCi0jZW5kaWYKLQotI2luY2x1ZGUgPGNzdHJpbmc+Ci0KLSNpbmNsdWRl
IDxib29zdC9hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2NzdGRpbnQuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L2RldGFpbC9lbmRpYW4uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3N0YXRpY19hc3Nl
cnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Zsb2F0aW5nX3BvaW50Lmhw
cD4KLQotI2lmZGVmIEJPT1NUX05PX1NURENfTkFNRVNQQUNFCi0gIG5hbWVzcGFjZSBzdGR7IHVz
aW5nIDo6bWVtY3B5OyB9Ci0jZW5kaWYKLQotI2lmbmRlZiBGUF9OT1JNQUwKLQotI2RlZmluZSBG
UF9aRVJPICAgICAgICAwCi0jZGVmaW5lIEZQX05PUk1BTCAgICAgIDEKLSNkZWZpbmUgRlBfSU5G
SU5JVEUgICAgMgotI2RlZmluZSBGUF9OQU4gICAgICAgICAzCi0jZGVmaW5lIEZQX1NVQk5PUk1B
TCAgIDQKLQotI2Vsc2UKLQotI2RlZmluZSBCT09TVF9IQVNfRlBDTEFTU0lGWQotCi0jaWZuZGVm
IGZwY2xhc3NpZnkKLSMgIGlmIChkZWZpbmVkKF9fR0xJQkNQUF9fKSB8fCBkZWZpbmVkKF9fR0xJ
QkNYWF9fKSkgXAotICAgICAgICAgJiYgZGVmaW5lZChfR0xJQkNYWF9VU0VfQzk5X01BVEgpIFwK
LSAgICAgICAgICYmICEoZGVmaW5lZChfR0xJQkNYWF9VU0VfQzk5X0ZQX01BQ1JPU19EWU5BTUlD
KSBcCi0gICAgICAgICAmJiAoX0dMSUJDWFhfVVNFX0M5OV9GUF9NQUNST1NfRFlOQU1JQyAhPSAw
KSkKLSMgICAgIGlmZGVmIF9TVExQX1ZFTkRPUl9DU1RECi0jICAgICAgICBpZiBfU1RMUE9SVF9W
RVJTSU9OID49IDB4NTIwCi0jICAgICAgICAgICBkZWZpbmUgQk9PU1RfRlBDTEFTU0lGWV9QUkVG
SVggOjpfX3N0ZF9hbGlhczo6IAotIyAgICAgICAgZWxzZQotIyAgICAgICAgICAgZGVmaW5lIEJP
T1NUX0ZQQ0xBU1NJRllfUFJFRklYIDo6X1NUTFBfVkVORE9SX0NTVEQ6OiAKLSMgICAgICAgIGVu
ZGlmCi0jICAgICBlbHNlCi0jICAgICAgICBkZWZpbmUgQk9PU1RfRlBDTEFTU0lGWV9QUkVGSVgg
OjpzdGQ6OgotIyAgICAgZW5kaWYKLSMgIGVsc2UKLSMgICAgIHVuZGVmIEJPT1NUX0hBU19GUENM
QVNTSUZZCi0jICAgICBkZWZpbmUgQk9PU1RfRlBDTEFTU0lGWV9QUkVGSVgKLSMgIGVuZGlmCi0j
ZWxpZiAoZGVmaW5lZChfX0hQX2FDQykgJiYgIWRlZmluZWQoX19ocHBhKSkKLS8vIGFDQyA2IGFw
cGVhcnMgdG8gZG8gIiNkZWZpbmUgZnBjbGFzc2lmeSBmcGNsYXNzaWZ5IiB3aGljaCBtZXNzZXMg
dXMgdXAgYSBiaXQhCi0jICBkZWZpbmUgQk9PU1RfRlBDTEFTU0lGWV9QUkVGSVggOjoKLSNlbHNl
Ci0jICBkZWZpbmUgQk9PU1RfRlBDTEFTU0lGWV9QUkVGSVgKLSNlbmRpZgotCi0jaWZkZWYgX19N
SU5HVzMyX18KLSMgIHVuZGVmIEJPT1NUX0hBU19GUENMQVNTSUZZCi0jZW5kaWYKLQotI2VuZGlm
Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVz
cGFjZSBtYXRoIHsKLW5hbWVzcGFjZSBkZXRhaWwgewotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0vKiAKLVRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgdXNlZCB0byB0YWcgdGhlIGRpZmZl
cmVudCBtZXRob2RzIHRoYXQgYXJlIHVzZWQKLWZvciBmbG9hdGluZyBwb2ludCBjbGFzc2lmaWNh
dGlvbgotKi8KLQotc3RydWN0IG5hdGl2ZV90YWcge307Ci10ZW1wbGF0ZSA8Ym9vbCBoYXNfbGlt
aXRzPgotc3RydWN0IGdlbmVyaWNfdGFnIHt9Owotc3RydWN0IGllZWVfdGFnIHt9Owotc3RydWN0
IGllZWVfY29weV9hbGxfYml0c190YWcgOiBwdWJsaWMgaWVlZV90YWcge307Ci1zdHJ1Y3QgaWVl
ZV9jb3B5X2xlYWRpbmdfYml0c190YWcgOiBwdWJsaWMgaWVlZV90YWcge307Ci0KLSNpZmRlZiBC
T09TVF9OT19MSU1JVFNfQ09NUElMRV9USU1FX0NPTlNUQU5UUwotLy8KLS8vIFRoZXNlIGhlbHBl
ciBmdW5jdGlvbnMgYXJlIHVzZWQgb25seSB3aGVuIG51bWVyaWNfbGltaXRzPD4KLS8vIG1lbWJl
cnMgYXJlIG5vdCBjb21waWxlIHRpbWUgY29uc3RhbnRzOgotLy8KLWlubGluZSBib29sIGlzX2dl
bmVyaWNfdGFnX2ZhbHNlKGNvbnN0IGdlbmVyaWNfdGFnPGZhbHNlPiopCi17Ci0gICByZXR1cm4g
dHJ1ZTsKLX0KLWlubGluZSBib29sIGlzX2dlbmVyaWNfdGFnX2ZhbHNlKGNvbnN0IHZvaWQqKQot
ewotICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLS8qCi1Nb3N0IHByb2Nlc3NvcnMgc3VwcG9ydCB0aHJlZSBkaWZmZXJlbnQgZmxvYXRpbmcg
cG9pbnQgcHJlY2lzaW9uczoKLXNpbmdsZSBwcmVjaXNpb24gKDMyIGJpdHMpLCBkb3VibGUgcHJl
Y2lzaW9uICg2NCBiaXRzKQotYW5kIGV4dGVuZGVkIGRvdWJsZSBwcmVjaXNpb24gKDgwIC0gMTI4
IGJpdHMsIGRlcGVuZGluZyBvbiB0aGUgcHJvY2Vzc29yKQotCi1Ob3RlIHRoYXQgdGhlIEMrKyB0
eXBlIGxvbmcgZG91YmxlIGNhbiBiZSBpbXBsZW1lbnRlZAotYm90aCBhcyBkb3VibGUgcHJlY2lz
aW9uIGFuZCBleHRlbmRlZCBkb3VibGUgcHJlY2lzaW9uLgotKi8KLQotc3RydWN0IHVua25vd25f
cHJlY2lzaW9ue307Ci1zdHJ1Y3Qgc2luZ2xlX3ByZWNpc2lvbiB7fTsKLXN0cnVjdCBkb3VibGVf
cHJlY2lzaW9uIHt9Owotc3RydWN0IGV4dGVuZGVkX2RvdWJsZV9wcmVjaXNpb24ge307Ci0KLS8v
IG5hdGl2ZV90YWcgdmVyc2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10ZW1wbGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgZnBf
dHJhaXRzX25hdGl2ZQotewotICAgIHR5cGVkZWYgbmF0aXZlX3RhZyBtZXRob2Q7Ci19OwotCi0v
LyBnZW5lcmljX3RhZyB2ZXJzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4g
c3RydWN0IGZwX3RyYWl0c19ub25fbmF0aXZlCi17Ci0jaWZuZGVmIEJPT1NUX05PX0xJTUlUU19D
T01QSUxFX1RJTUVfQ09OU1RBTlRTCi0gICB0eXBlZGVmIGdlbmVyaWNfdGFnPHN0ZDo6bnVtZXJp
Y19saW1pdHM8VD46OmlzX3NwZWNpYWxpemVkPiBtZXRob2Q7Ci0jZWxzZQotICAgdHlwZWRlZiBn
ZW5lcmljX3RhZzxmYWxzZT4gbWV0aG9kOwotI2VuZGlmCi19OwotCi0vLyBpZWVlX3RhZyB2ZXJz
aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotLyoKLVRoZXNlIHNwZWNpYWxpemF0aW9ucyBvZiBmcF90cmFpdHNfbm9u
X25hdGl2ZSBjb250YWluIGluZm9ybWF0aW9uIG5lZWRlZAotdG8gInBhcnNlIiB0aGUgYmluYXJ5
IHJlcHJlc2VudGF0aW9uIG9mIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLgotCi1UeXBlZGVmIG1l
bWJlcnM6Ci0KLSAgYml0cyAtLSB0aGUgdGFyZ2V0IHR5cGUgd2hlbiBjb3B5aW5nIHRoZSBsZWFk
aW5nIGJ5dGVzIG9mIGEgZmxvYXRpbmcKLSAgICAgIHBvaW50IG51bWJlci4gSXQgaXMgYSB0eXBl
ZGVmIGZvciB1aW50MzJfdCBvciB1aW50NjRfdC4KLQotICBtZXRob2QgLS0gdGVsbHMgdXMgd2hl
dGhlciBhbGwgYnl0ZXMgYXJlIGNvcGllZCBvciBub3QuCi0gICAgICBJdCBpcyBhIHR5cGVkZWYg
Zm9yIGllZWVfY29weV9hbGxfYml0c190YWcgb3IgaWVlZV9jb3B5X2xlYWRpbmdfYml0c190YWcu
Ci0KLVN0YXRpYyBkYXRhIG1lbWJlcnM6Ci0KLSAgc2lnbiwgZXhwb25lbnQsIGZsYWcsIHNpZ25p
ZmljYW5kIC0tIGJpdCBtYXNrcyB0aGF0IGdpdmUgdGhlIG1lYW5pbmcgb2YgdGhlCi0gIGJpdHMg
aW4gdGhlIGxlYWRpbmcgYnl0ZXMuCi0KLVN0YXRpYyBmdW5jdGlvbiBtZW1iZXJzOgotCi0gIGdl
dF9iaXRzKCksIHNldF9iaXRzKCkgLS0gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGxlYWRpbmcgYnl0
ZXMuCi0KLSovCi0KLS8vIGllZWVfdGFnIHZlcnNpb24sIGZsb2F0ICgzMiBiaXRzKSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWZuZGVmIEJPT1NU
X0ZQQ0xBU1NJRllfVkFYX0ZPUk1BVAotCi10ZW1wbGF0ZTw+IHN0cnVjdCBmcF90cmFpdHNfbm9u
X25hdGl2ZTxmbG9hdCwgc2luZ2xlX3ByZWNpc2lvbj4KLXsKLSAgICB0eXBlZGVmIGllZWVfY29w
eV9hbGxfYml0c190YWcgbWV0aG9kOwotCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHVpbnQz
Ml90LCBzaWduICAgICAgICA9IDB4ODAwMDAwMDB1KTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RB
TlQodWludDMyX3QsIGV4cG9uZW50ICAgID0gMHg3ZjgwMDAwMCk7Ci0gICAgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKHVpbnQzMl90LCBmbGFnICAgICAgICA9IDB4MDAwMDAwMDApOwotICAgIEJPT1NU
X1NUQVRJQ19DT05TVEFOVCh1aW50MzJfdCwgc2lnbmlmaWNhbmQgPSAweDAwN2ZmZmZmKTsKLQot
ICAgIHR5cGVkZWYgdWludDMyX3QgYml0czsKLSAgICBzdGF0aWMgdm9pZCBnZXRfYml0cyhmbG9h
dCB4LCB1aW50MzJfdCYgYSkgeyBzdGQ6Om1lbWNweSgmYSwgJngsIDQpOyB9Ci0gICAgc3RhdGlj
IHZvaWQgc2V0X2JpdHMoZmxvYXQmIHgsIHVpbnQzMl90IGEpIHsgc3RkOjptZW1jcHkoJngsICZh
LCA0KTsgfQotfTsKLQotLy8gaWVlZV90YWcgdmVyc2lvbiwgZG91YmxlICg2NCBiaXRzKSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiBkZWZpbmVk
KEJPT1NUX05PX0lOVDY0X1QpIHx8IGRlZmluZWQoQk9PU1RfTk9fSU5DTEFTU19NRU1CRVJfSU5J
VElBTElaQVRJT04pIFwKLSAgIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9f
Q09ERUdFQVJfXykKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgZnBfdHJhaXRzX25vbl9uYXRpdmU8ZG91
YmxlLCBkb3VibGVfcHJlY2lzaW9uPgotewotICAgIHR5cGVkZWYgaWVlZV9jb3B5X2xlYWRpbmdf
Yml0c190YWcgbWV0aG9kOwotCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHVpbnQzMl90LCBz
aWduICAgICAgICA9IDB4ODAwMDAwMDB1KTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQodWlu
dDMyX3QsIGV4cG9uZW50ICAgID0gMHg3ZmYwMDAwMCk7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKHVpbnQzMl90LCBmbGFnICAgICAgICA9IDApOwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFO
VCh1aW50MzJfdCwgc2lnbmlmaWNhbmQgPSAweDAwMGZmZmZmKTsKLQotICAgIHR5cGVkZWYgdWlu
dDMyX3QgYml0czsKLQotICAgIHN0YXRpYyB2b2lkIGdldF9iaXRzKGRvdWJsZSB4LCB1aW50MzJf
dCYgYSkKLSAgICB7Ci0gICAgICAgIHN0ZDo6bWVtY3B5KCZhLCByZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPigmeCkgKyBvZmZzZXRfLCA0KTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgdm9pZCBzZXRfYml0cyhkb3VibGUmIHgsIHVpbnQzMl90IGEpCi0gICAgewotICAgICAgICBz
dGQ6Om1lbWNweShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPigmeCkgKyBvZmZzZXRf
LCAmYSwgNCk7Ci0gICAgfQotCi1wcml2YXRlOgotCi0jaWYgZGVmaW5lZChCT09TVF9CSUdfRU5E
SUFOKQotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIG9mZnNldF8gPSAwKTsKLSNlbGlm
IGRlZmluZWQoQk9PU1RfTElUVExFX0VORElBTikKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQo
aW50LCBvZmZzZXRfID0gNCk7Ci0jZWxzZQotICAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoZmFsc2Up
OwotI2VuZGlmCi19OwotCi0vLy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi0jZWxzZQotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBmcF90cmFpdHNfbm9uX25hdGl2ZTxkb3VibGUsIGRvdWJsZV9wcmVjaXNp
b24+Ci17Ci0gICAgdHlwZWRlZiBpZWVlX2NvcHlfYWxsX2JpdHNfdGFnIG1ldGhvZDsKLQotICAg
IHN0YXRpYyBjb25zdCB1aW50NjRfdCBzaWduICAgICA9ICgodWludDY0X3QpMHg4MDAwMDAwMHUp
IDw8IDMyOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBleHBvbmVudCA9ICgodWludDY0X3Qp
MHg3ZmYwMDAwMCkgPDwgMzI7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGZsYWcgICAgID0g
MDsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qgc2lnbmlmaWNhbmQKLSAgICAgICAgPSAoKCh1
aW50NjRfdCkweDAwMGZmZmZmKSA8PCAzMikgKyAoKHVpbnQ2NF90KTB4ZmZmZmZmZmZ1KTsKLQot
ICAgIHR5cGVkZWYgdWludDY0X3QgYml0czsKLSAgICBzdGF0aWMgdm9pZCBnZXRfYml0cyhkb3Vi
bGUgeCwgdWludDY0X3QmIGEpIHsgc3RkOjptZW1jcHkoJmEsICZ4LCA4KTsgfQotICAgIHN0YXRp
YyB2b2lkIHNldF9iaXRzKGRvdWJsZSYgeCwgdWludDY0X3QgYSkgeyBzdGQ6Om1lbWNweSgmeCwg
JmEsIDgpOyB9Ci19OwotCi0jZW5kaWYKLQotI2VuZGlmICAvLyAjaWZuZGVmIEJPT1NUX0ZQQ0xB
U1NJRllfVkFYX0ZPUk1BVAotCi0vLyBsb25nIGRvdWJsZSAoNjQgYml0cykgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWYgZGVmaW5l
ZChCT09TVF9OT19JTlQ2NF9UKSB8fCBkZWZpbmVkKEJPT1NUX05PX0lOQ0xBU1NfTUVNQkVSX0lO
SVRJQUxJWkFUSU9OKVwKLSAgIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9f
Q09ERUdFQVJfXykKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgZnBfdHJhaXRzX25vbl9uYXRpdmU8bG9u
ZyBkb3VibGUsIGRvdWJsZV9wcmVjaXNpb24+Ci17Ci0gICAgdHlwZWRlZiBpZWVlX2NvcHlfbGVh
ZGluZ19iaXRzX3RhZyBtZXRob2Q7Ci0KLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQodWludDMy
X3QsIHNpZ24gICAgICAgID0gMHg4MDAwMDAwMHUpOwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFO
VCh1aW50MzJfdCwgZXhwb25lbnQgICAgPSAweDdmZjAwMDAwKTsKLSAgICBCT09TVF9TVEFUSUNf
Q09OU1RBTlQodWludDMyX3QsIGZsYWcgICAgICAgID0gMCk7Ci0gICAgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKHVpbnQzMl90LCBzaWduaWZpY2FuZCA9IDB4MDAwZmZmZmYpOwotCi0gICAgdHlwZWRl
ZiB1aW50MzJfdCBiaXRzOwotCi0gICAgc3RhdGljIHZvaWQgZ2V0X2JpdHMobG9uZyBkb3VibGUg
eCwgdWludDMyX3QmIGEpCi0gICAgewotICAgICAgICBzdGQ6Om1lbWNweSgmYSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJngpICsgb2Zmc2V0XywgNCk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIHZvaWQgc2V0X2JpdHMobG9uZyBkb3VibGUmIHgsIHVpbnQzMl90IGEpCi0g
ICAgewotICAgICAgICBzdGQ6Om1lbWNweShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIq
PigmeCkgKyBvZmZzZXRfLCAmYSwgNCk7Ci0gICAgfQotCi1wcml2YXRlOgotCi0jaWYgZGVmaW5l
ZChCT09TVF9CSUdfRU5ESUFOKQotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIG9mZnNl
dF8gPSAwKTsKLSNlbGlmIGRlZmluZWQoQk9PU1RfTElUVExFX0VORElBTikKLSAgICBCT09TVF9T
VEFUSUNfQ09OU1RBTlQoaW50LCBvZmZzZXRfID0gNCk7Ci0jZWxzZQotICAgIEJPT1NUX1NUQVRJ
Q19BU1NFUlQoZmFsc2UpOwotI2VuZGlmCi19OwotCi0vLy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgot
Ci0jZWxzZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBmcF90cmFpdHNfbm9uX25hdGl2ZTxsb25nIGRv
dWJsZSwgZG91YmxlX3ByZWNpc2lvbj4KLXsKLSAgICB0eXBlZGVmIGllZWVfY29weV9hbGxfYml0
c190YWcgbWV0aG9kOwotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHNpZ24gICAgID0gKHVp
bnQ2NF90KTB4ODAwMDAwMDB1IDw8IDMyOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBleHBv
bmVudCA9ICh1aW50NjRfdCkweDdmZjAwMDAwIDw8IDMyOwotICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBmbGFnICAgICA9IDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHNpZ25pZmljYW5k
Ci0gICAgICAgID0gKCh1aW50NjRfdCkweDAwMGZmZmZmIDw8IDMyKSArICh1aW50NjRfdCkweGZm
ZmZmZmZmdTsKLQotICAgIHR5cGVkZWYgdWludDY0X3QgYml0czsKLSAgICBzdGF0aWMgdm9pZCBn
ZXRfYml0cyhsb25nIGRvdWJsZSB4LCB1aW50NjRfdCYgYSkgeyBzdGQ6Om1lbWNweSgmYSwgJngs
IDgpOyB9Ci0gICAgc3RhdGljIHZvaWQgc2V0X2JpdHMobG9uZyBkb3VibGUmIHgsIHVpbnQ2NF90
IGEpIHsgc3RkOjptZW1jcHkoJngsICZhLCA4KTsgfQotfTsKLQotI2VuZGlmCi0KLQotLy8gbG9u
ZyBkb3VibGUgKD42NCBiaXRzKSwgeDg2IGFuZCB4NjQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9faTM4
Nl9fKSB8fCBkZWZpbmVkKF9NX0lYODYpIFwKLSAgICB8fCBkZWZpbmVkKF9fYW1kNjQpIHx8IGRl
ZmluZWQoX19hbWQ2NF9fKSAgfHwgZGVmaW5lZChfTV9BTUQ2NCkgXAotICAgIHx8IGRlZmluZWQo
X194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9YNjQpCi0KLS8v
IEludGVsIGV4dGVuZGVkIGRvdWJsZSBwcmVjaXNpb24gZm9ybWF0ICg4MCBiaXRzKQotCi10ZW1w
bGF0ZTw+Ci1zdHJ1Y3QgZnBfdHJhaXRzX25vbl9uYXRpdmU8bG9uZyBkb3VibGUsIGV4dGVuZGVk
X2RvdWJsZV9wcmVjaXNpb24+Ci17Ci0gICAgdHlwZWRlZiBpZWVlX2NvcHlfbGVhZGluZ19iaXRz
X3RhZyBtZXRob2Q7Ci0KLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQodWludDMyX3QsIHNpZ24g
ICAgICAgID0gMHg4MDAwMDAwMHUpOwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVCh1aW50MzJf
dCwgZXhwb25lbnQgICAgPSAweDdmZmYwMDAwKTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQo
dWludDMyX3QsIGZsYWcgICAgICAgID0gMHgwMDAwODAwMCk7Ci0gICAgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKHVpbnQzMl90LCBzaWduaWZpY2FuZCA9IDB4MDAwMDdmZmYpOwotCi0gICAgdHlwZWRl
ZiB1aW50MzJfdCBiaXRzOwotCi0gICAgc3RhdGljIHZvaWQgZ2V0X2JpdHMobG9uZyBkb3VibGUg
eCwgdWludDMyX3QmIGEpCi0gICAgewotICAgICAgICBzdGQ6Om1lbWNweSgmYSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJngpICsgNiwgNCk7Ci0gICAgfQotCi0gICAg
c3RhdGljIHZvaWQgc2V0X2JpdHMobG9uZyBkb3VibGUmIHgsIHVpbnQzMl90IGEpCi0gICAgewot
ICAgICAgICBzdGQ6Om1lbWNweShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPigmeCkg
KyA2LCAmYSwgNCk7Ci0gICAgfQotfTsKLQotCi0vLyBsb25nIGRvdWJsZSAoPjY0IGJpdHMpLCBJ
dGFuaXVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0j
ZWxpZiBkZWZpbmVkKF9faWE2NCkgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfTV9J
QTY0KQotCi0vLyBUaGUgZmxvYXRpbmcgcG9pbnQgZm9ybWF0IGlzIHVua25vd24gYXQgY29tcGls
ZSB0aW1lCi0vLyBObyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiBpcyBwcm92aWRlZC4KLS8vIFRo
ZSBnZW5lcmljX3RhZyBkZWZpbml0aW9uIGlzIHVzZWQuCi0KLS8vIFRoZSBJdGFuaXVtIHN1cHBv
cnRzIGJvdGgKLS8vIHRoZSBJbnRlbCBleHRlbmRlZCBkb3VibGUgcHJlY2lzaW9uIGZvcm1hdCAo
ODAgYml0cykgYW5kCi0vLyB0aGUgSUVFRSBleHRlbmRlZCBkb3VibGUgcHJlY2lzaW9uIGZvcm1h
dCB3aXRoIDE1IGV4cG9uZW50IGJpdHMgKDEyOCBiaXRzKS4KLQotI2VsaWYgZGVmaW5lZChfX0dO
VUNfXykgJiYgKExEQkxfTUFOVF9ESUcgPT0gMTA2KQotCi0vLwotLy8gRGVmaW5lIG5vdGhpbmcg
aGVyZSBhbmQgZmFsbCB0aG91Z2ggdG8gZ2VuZXJpY190YWc6Ci0vLyBXZSBoYXZlIEdDQydzICJk
b3VibGUgZG91YmxlIiBpbiBlZmZlY3QsIGFuZCBhbnkgYXR0ZW1wdAotLy8gdG8gaGFuZGxlIGl0
IHZpYSBiaXQtZmlkZGxpbmcgaXMgcHJldHR5IG11Y2ggZG9vbWVkIHRvIGZhaWwuLi4KLS8vCi0K
LS8vIGxvbmcgZG91YmxlICg+NjQgYml0cyksIFBvd2VyUEMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNlbGlmIGRlZmluZWQoX19wb3dlcnBjKSB8fCBk
ZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fUE9XRVJQQ19fKSBcCi0gICAgfHwgZGVm
aW5lZChfX3BwYykgfHwgZGVmaW5lZChfX3BwY19fKSB8fCBkZWZpbmVkKF9fUFBDX18pCi0KLS8v
IFBvd2VyUEMgZXh0ZW5kZWQgZG91YmxlIHByZWNpc2lvbiBmb3JtYXQgKDEyOCBiaXRzKQotCi10
ZW1wbGF0ZTw+Ci1zdHJ1Y3QgZnBfdHJhaXRzX25vbl9uYXRpdmU8bG9uZyBkb3VibGUsIGV4dGVu
ZGVkX2RvdWJsZV9wcmVjaXNpb24+Ci17Ci0gICAgdHlwZWRlZiBpZWVlX2NvcHlfbGVhZGluZ19i
aXRzX3RhZyBtZXRob2Q7Ci0KLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQodWludDMyX3QsIHNp
Z24gICAgICAgID0gMHg4MDAwMDAwMHUpOwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVCh1aW50
MzJfdCwgZXhwb25lbnQgICAgPSAweDdmZjAwMDAwKTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RB
TlQodWludDMyX3QsIGZsYWcgICAgICAgID0gMHgwMDAwMDAwMCk7Ci0gICAgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKHVpbnQzMl90LCBzaWduaWZpY2FuZCA9IDB4MDAwZmZmZmYpOwotCi0gICAgdHlw
ZWRlZiB1aW50MzJfdCBiaXRzOwotCi0gICAgc3RhdGljIHZvaWQgZ2V0X2JpdHMobG9uZyBkb3Vi
bGUgeCwgdWludDMyX3QmIGEpCi0gICAgewotICAgICAgICBzdGQ6Om1lbWNweSgmYSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJngpICsgb2Zmc2V0XywgNCk7Ci0gICAg
fQotCi0gICAgc3RhdGljIHZvaWQgc2V0X2JpdHMobG9uZyBkb3VibGUmIHgsIHVpbnQzMl90IGEp
Ci0gICAgewotICAgICAgICBzdGQ6Om1lbWNweShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNo
YXIqPigmeCkgKyBvZmZzZXRfLCAmYSwgNCk7Ci0gICAgfQotCi1wcml2YXRlOgotCi0jaWYgZGVm
aW5lZChCT09TVF9CSUdfRU5ESUFOKQotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIG9m
ZnNldF8gPSAwKTsKLSNlbGlmIGRlZmluZWQoQk9PU1RfTElUVExFX0VORElBTikKLSAgICBCT09T
VF9TVEFUSUNfQ09OU1RBTlQoaW50LCBvZmZzZXRfID0gMTIpOwotI2Vsc2UKLSAgICBCT09TVF9T
VEFUSUNfQVNTRVJUKGZhbHNlKTsKLSNlbmRpZgotfTsKLQotCi0vLyBsb25nIGRvdWJsZSAoPjY0
IGJpdHMpLCBNb3Rvcm9sYSA2OEsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0jZWxpZiBkZWZpbmVkKF9fbTY4aykgfHwgZGVmaW5lZChfX202OGtfXykgXAotICAg
IHx8IGRlZmluZWQoX19tYzY4MDAwKSB8fCBkZWZpbmVkKF9fbWM2ODAwMF9fKSBcCi0KLS8vIE1v
dG9yb2xhIGV4dGVuZGVkIGRvdWJsZSBwcmVjaXNpb24gZm9ybWF0ICg5NiBiaXRzKQotCi0vLyBJ
dCBpcyB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIEludGVsIGV4dGVuZGVkIGRvdWJsZSBwcmVjaXNp
b24gZm9ybWF0LAotLy8gZXhjZXB0IHRoYXQgMSkgaXQgaXMgYmlnLWVuZGlhbiwgMikgdGhlIDNy
ZCBhbmQgNHRoIGJ5dGUgYXJlIHBhZGRpbmcsIGFuZAotLy8gMykgdGhlIGZsYWcgYml0IGlzIG5v
dCBzZXQgZm9yIGluZmluaXR5Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBmcF90cmFpdHNfbm9uX25h
dGl2ZTxsb25nIGRvdWJsZSwgZXh0ZW5kZWRfZG91YmxlX3ByZWNpc2lvbj4KLXsKLSAgICB0eXBl
ZGVmIGllZWVfY29weV9sZWFkaW5nX2JpdHNfdGFnIG1ldGhvZDsKLQotICAgIEJPT1NUX1NUQVRJ
Q19DT05TVEFOVCh1aW50MzJfdCwgc2lnbiAgICAgICAgPSAweDgwMDAwMDAwdSk7Ci0gICAgQk9P
U1RfU1RBVElDX0NPTlNUQU5UKHVpbnQzMl90LCBleHBvbmVudCAgICA9IDB4N2ZmZjAwMDApOwot
ICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVCh1aW50MzJfdCwgZmxhZyAgICAgICAgPSAweDAwMDA4
MDAwKTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQodWludDMyX3QsIHNpZ25pZmljYW5kID0g
MHgwMDAwN2ZmZik7Ci0KLSAgICAvLyBjb3B5IDFzdCwgMm5kLCA1dGggYW5kIDZ0aCBieXRlLiAz
cmQgYW5kIDR0aCBieXRlIGFyZSBwYWRkaW5nLgotCi0gICAgdHlwZWRlZiB1aW50MzJfdCBiaXRz
OwotCi0gICAgc3RhdGljIHZvaWQgZ2V0X2JpdHMobG9uZyBkb3VibGUgeCwgdWludDMyX3QmIGEp
Ci0gICAgewotICAgICAgICBzdGQ6Om1lbWNweSgmYSwgJngsIDIpOwotICAgICAgICBzdGQ6Om1l
bWNweShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPigmYSkgKyAyLAotICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJngpICsgNCwgMik7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgc2V0X2JpdHMobG9uZyBkb3VibGUmIHgsIHVpbnQz
Ml90IGEpCi0gICAgewotICAgICAgICBzdGQ6Om1lbWNweSgmeCwgJmEsIDIpOwotICAgICAgICBz
dGQ6Om1lbWNweShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPigmeCkgKyA0LAotICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJmEpICsg
MiwgMik7Ci0gICAgfQotfTsKLQotCi0vLyBsb25nIGRvdWJsZSAoPjY0IGJpdHMpLCBBbGwgb3Ro
ZXIgcHJvY2Vzc29ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZWxzZQot
Ci0vLyBJRUVFIGV4dGVuZGVkIGRvdWJsZSBwcmVjaXNpb24gZm9ybWF0IHdpdGggMTUgZXhwb25l
bnQgYml0cyAoMTI4IGJpdHMpCi0KLXRlbXBsYXRlPD4KLXN0cnVjdCBmcF90cmFpdHNfbm9uX25h
dGl2ZTxsb25nIGRvdWJsZSwgZXh0ZW5kZWRfZG91YmxlX3ByZWNpc2lvbj4KLXsKLSAgICB0eXBl
ZGVmIGllZWVfY29weV9sZWFkaW5nX2JpdHNfdGFnIG1ldGhvZDsKLQotICAgIEJPT1NUX1NUQVRJ
Q19DT05TVEFOVCh1aW50MzJfdCwgc2lnbiAgICAgICAgPSAweDgwMDAwMDAwdSk7Ci0gICAgQk9P
U1RfU1RBVElDX0NPTlNUQU5UKHVpbnQzMl90LCBleHBvbmVudCAgICA9IDB4N2ZmZjAwMDApOwot
ICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVCh1aW50MzJfdCwgZmxhZyAgICAgICAgPSAweDAwMDAw
MDAwKTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQodWludDMyX3QsIHNpZ25pZmljYW5kID0g
MHgwMDAwZmZmZik7Ci0KLSAgICB0eXBlZGVmIHVpbnQzMl90IGJpdHM7Ci0KLSAgICBzdGF0aWMg
dm9pZCBnZXRfYml0cyhsb25nIGRvdWJsZSB4LCB1aW50MzJfdCYgYSkKLSAgICB7Ci0gICAgICAg
IHN0ZDo6bWVtY3B5KCZhLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigm
eCkgKyBvZmZzZXRfLCA0KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXRfYml0cyhsb25n
IGRvdWJsZSYgeCwgdWludDMyX3QgYSkKLSAgICB7Ci0gICAgICAgIHN0ZDo6bWVtY3B5KHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KCZ4KSArIG9mZnNldF8sICZhLCA0KTsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX0JJR19FTkRJQU4pCi0gICAgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKGludCwgb2Zmc2V0XyA9IDApOwotI2VsaWYgZGVmaW5lZChCT09TVF9M
SVRUTEVfRU5ESUFOKQotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIG9mZnNldF8gPSAx
Mik7Ci0jZWxzZQotICAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoZmFsc2UpOwotI2VuZGlmCi19Owot
Ci0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gc2l6ZV90b19wcmVjaXNp
b24gaXMgYSB0eXBlIHN3aXRjaCBmb3IgY29udmVydGluZyBhIEMrKyBmbG9hdGluZyBwb2ludCB0
eXBlCi0vLyB0byB0aGUgY29ycmVzcG9uZGluZyBwcmVjaXNpb24gdHlwZS4KLQotdGVtcGxhdGU8
aW50IG4sIGJvb2wgZnA+IHN0cnVjdCBzaXplX3RvX3ByZWNpc2lvbgotewotICAgdHlwZWRlZiB1
bmtub3duX3ByZWNpc2lvbiB0eXBlOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qgc2l6ZV90b19w
cmVjaXNpb248NCwgdHJ1ZT4KLXsKLSAgICB0eXBlZGVmIHNpbmdsZV9wcmVjaXNpb24gdHlwZTsK
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IHNpemVfdG9fcHJlY2lzaW9uPDgsIHRydWU+Ci17Ci0g
ICAgdHlwZWRlZiBkb3VibGVfcHJlY2lzaW9uIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBzaXplX3RvX3ByZWNpc2lvbjwxMCwgdHJ1ZT4KLXsKLSAgICB0eXBlZGVmIGV4dGVuZGVkX2Rv
dWJsZV9wcmVjaXNpb24gdHlwZTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IHNpemVfdG9fcHJl
Y2lzaW9uPDEyLCB0cnVlPgotewotICAgIHR5cGVkZWYgZXh0ZW5kZWRfZG91YmxlX3ByZWNpc2lv
biB0eXBlOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qgc2l6ZV90b19wcmVjaXNpb248MTYsIHRy
dWU+Ci17Ci0gICAgdHlwZWRlZiBleHRlbmRlZF9kb3VibGVfcHJlY2lzaW9uIHR5cGU7Ci19Owot
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZpZ3VyZSBvdXQgd2hldGhlciB0byB1
c2UgbmF0aXZlIGNsYXNzaWZpY2F0aW9uIGZ1bmN0aW9ucyBiYXNlZCBvbgotLy8gd2hldGhlciBU
IGlzIGEgYnVpbHQgaW4gZmxvYXRpbmcgcG9pbnQgdHlwZSBvciBub3Q6Ci0vLwotdGVtcGxhdGUg
PGNsYXNzIFQ+Ci1zdHJ1Y3Qgc2VsZWN0X25hdGl2ZQotewotICAgIHR5cGVkZWYgQk9PU1RfREVE
VUNFRF9UWVBFTkFNRSBzaXplX3RvX3ByZWNpc2lvbjxzaXplb2YoVCksIDo6Ym9vc3Q6OmlzX2Zs
b2F0aW5nX3BvaW50PFQ+Ojp2YWx1ZT46OnR5cGUgcHJlY2lzaW9uOwotICAgIHR5cGVkZWYgZnBf
dHJhaXRzX25vbl9uYXRpdmU8VCwgcHJlY2lzaW9uPiB0eXBlOwotfTsKLXRlbXBsYXRlPD4KLXN0
cnVjdCBzZWxlY3RfbmF0aXZlPGZsb2F0PgotewotICAgIHR5cGVkZWYgZnBfdHJhaXRzX25hdGl2
ZTxmbG9hdD4gdHlwZTsKLX07Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qgc2VsZWN0X25hdGl2ZTxkb3Vi
bGU+Ci17Ci0gICAgdHlwZWRlZiBmcF90cmFpdHNfbmF0aXZlPGRvdWJsZT4gdHlwZTsKLX07Ci10
ZW1wbGF0ZTw+Ci1zdHJ1Y3Qgc2VsZWN0X25hdGl2ZTxsb25nIGRvdWJsZT4KLXsKLSAgICB0eXBl
ZGVmIGZwX3RyYWl0c19uYXRpdmU8bG9uZyBkb3VibGU+IHR5cGU7Ci19OwotCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0vLyBmcF90cmFpdHMgaXMgYSB0eXBlIHN3aXRjaCB0aGF0IHNlbGVj
dHMgdGhlIHJpZ2h0IGZwX3RyYWl0c19ub25fbmF0aXZlCi0KLSNpZiAoZGVmaW5lZChCT09TVF9N
QVRIX1VTRV9DOTkpICYmICEoZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fIDwgNCkpKSBc
Ci0gICAmJiAhZGVmaW5lZChfX2hwdXgpIFwKLSAgICYmICFkZWZpbmVkKF9fREVDQ1hYKVwKLSAg
ICYmICFkZWZpbmVkKF9fb3NmX18pIFwKLSAgICYmICFkZWZpbmVkKF9fU0dJX1NUTF9QT1JUKSAm
JiAhZGVmaW5lZChfU1RMUE9SVF9WRVJTSU9OKVwKLSAgICYmICFkZWZpbmVkKF9fRkFTVF9NQVRI
X18pXAotICAgJiYgIWRlZmluZWQoQk9PU1RfTUFUSF9ESVNBQkxFX1NURF9GUENMQVNTSUZZKVwK
LSAgICYmICFkZWZpbmVkKEJPT1NUX0lOVEVMKVwKLSAgICYmICFkZWZpbmVkKHN1bikKLSMgIGRl
ZmluZSBCT09TVF9NQVRIX1VTRV9TVERfRlBDTEFTU0lGWQotI2VuZGlmCi0KLXRlbXBsYXRlPGNs
YXNzIFQ+IHN0cnVjdCBmcF90cmFpdHMKLXsKLSAgICB0eXBlZGVmIEJPT1NUX0RFRFVDRURfVFlQ
RU5BTUUgc2l6ZV90b19wcmVjaXNpb248c2l6ZW9mKFQpLCA6OmJvb3N0Ojppc19mbG9hdGluZ19w
b2ludDxUPjo6dmFsdWU+Ojp0eXBlIHByZWNpc2lvbjsKLSNpZiBkZWZpbmVkKEJPT1NUX01BVEhf
VVNFX1NURF9GUENMQVNTSUZZKSAmJiAhZGVmaW5lZChCT09TVF9NQVRIX0RJU0FCTEVfU1REX0ZQ
Q0xBU1NJRlkpCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBzZWxlY3RfbmF0aXZlPFQ+Ojp0eXBlIHR5
cGU7Ci0jZWxzZQotICAgIHR5cGVkZWYgZnBfdHJhaXRzX25vbl9uYXRpdmU8VCwgcHJlY2lzaW9u
PiB0eXBlOwotI2VuZGlmCi0gICAgdHlwZWRlZiBmcF90cmFpdHNfbm9uX25hdGl2ZTxULCBwcmVj
aXNpb24+IHNpZ25fY2hhbmdlX3R5cGU7Ci19OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci19ICAgLy8gbmFtZXNwYWNlIGRldGFpbAotfSAgIC8vIG5hbWVzcGFjZSBtYXRoCi19ICAgLy8g
bmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbWF0aC9zcGVjaWFsX2Z1bmN0aW9ucy9kZXRhaWwvcm91
bmRfZndkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21h
dGgvc3BlY2lhbF9mdW5jdGlvbnMvZGV0YWlsL3JvdW5kX2Z3ZC5ocHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDhjNDVhN2Q3NWE0Mzg1ZDNiMWM3YjM1MDlhM2QwYTZkYjc5YTkzZjgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbWF0aC9zcGVjaWFsX2Z1bmN0aW9ucy9k
ZXRhaWwvcm91bmRfZndkLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8vIENv
cHlyaWdodCBKb2huIE1hZGRvY2sgMjAwOC4KLQotLy8gVXNlLCBtb2RpZmljYXRpb24gYW5kIGRp
c3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUKLS8vIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLgotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQK
LS8vIG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0j
aWZuZGVmIEJPT1NUX01BVEhfU1BFQ0lBTF9ST1VORF9GV0RfSFBQCi0jZGVmaW5lIEJPT1NUX01B
VEhfU1BFQ0lBTF9ST1VORF9GV0RfSFBQCi0KLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L21hdGgvdG9vbHMvcHJvbW90aW9uLmhwcD4KLQotI2lmZGVmIF9NU0Nf
VkVSCi0jcHJhZ21hIG9uY2UKLSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3QKLXsKLSAgIG5hbWVz
cGFjZSBtYXRoCi0gICB7IAotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5Pgot
ICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSB0cnVuYyhjb25zdCBUJiB2
LCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIHR5cGVuYW1l
IHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgdHJ1bmMoY29uc3QgVCYgdik7Ci0gICB0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgaW50IGl0cnVuYyhjb25zdCBUJiB2LCBj
b25zdCBQb2xpY3kmIHBvbCk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIGludCBpdHJ1bmMo
Y29uc3QgVCYgdik7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgbG9u
ZyBsdHJ1bmMoY29uc3QgVCYgdiwgY29uc3QgUG9saWN5JiBwb2wpOwotICAgdGVtcGxhdGUgPGNs
YXNzIFQ+Ci0gICBsb25nIGx0cnVuYyhjb25zdCBUJiB2KTsKLSNpZmRlZiBCT09TVF9IQVNfTE9O
R19MT05HCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgYm9vc3Q6Omxv
bmdfbG9uZ190eXBlIGxsdHJ1bmMoY29uc3QgVCYgdiwgY29uc3QgUG9saWN5JiBwb2wpOwotICAg
dGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICBib29zdDo6bG9uZ19sb25nX3R5cGUgbGx0cnVuYyhjb25z
dCBUJiB2KTsKLSNlbmRpZgotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFBvbGljeT4KLSAg
IHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgcm91bmQoY29uc3QgVCYgdiwg
Y29uc3QgUG9saWN5JiBwb2wpOwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICB0eXBlbmFtZSB0
b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIHJvdW5kKGNvbnN0IFQmIHYpOwotICAgdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFBvbGljeT4KLSAgIGludCBpcm91bmQoY29uc3QgVCYgdiwgY29u
c3QgUG9saWN5JiBwb2wpOwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICBpbnQgaXJvdW5kKGNv
bnN0IFQmIHYpOwotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFBvbGljeT4KLSAgIGxvbmcg
bHJvdW5kKGNvbnN0IFQmIHYsIGNvbnN0IFBvbGljeSYgcG9sKTsKLSAgIHRlbXBsYXRlIDxjbGFz
cyBUPgotICAgbG9uZyBscm91bmQoY29uc3QgVCYgdik7Ci0jaWZkZWYgQk9PU1RfSEFTX0xPTkdf
TE9ORwotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFBvbGljeT4KLSAgIGJvb3N0Ojpsb25n
X2xvbmdfdHlwZSBsbHJvdW5kKGNvbnN0IFQmIHYsIGNvbnN0IFBvbGljeSYgcG9sKTsKLSAgIHRl
bXBsYXRlIDxjbGFzcyBUPgotICAgYm9vc3Q6OmxvbmdfbG9uZ190eXBlIGxscm91bmQoY29uc3Qg
VCYgdik7Ci0jZW5kaWYKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBQb2xpY3k+Ci0gICBU
IG1vZGYoY29uc3QgVCYgdiwgVCogaXBhcnQsIGNvbnN0IFBvbGljeSYgcG9sKTsKLSAgIHRlbXBs
YXRlIDxjbGFzcyBUPgotICAgVCBtb2RmKGNvbnN0IFQmIHYsIFQqIGlwYXJ0KTsKLSAgIHRlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBQb2xpY3k+Ci0gICBUIG1vZGYoY29uc3QgVCYgdiwgaW50KiBp
cGFydCwgY29uc3QgUG9saWN5JiBwb2wpOwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICBUIG1v
ZGYoY29uc3QgVCYgdiwgaW50KiBpcGFydCk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
UG9saWN5PgotICAgVCBtb2RmKGNvbnN0IFQmIHYsIGxvbmcqIGlwYXJ0LCBjb25zdCBQb2xpY3km
IHBvbCk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIFQgbW9kZihjb25zdCBUJiB2LCBsb25n
KiBpcGFydCk7Ci0jaWZkZWYgQk9PU1RfSEFTX0xPTkdfTE9ORwotICAgdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIFBvbGljeT4KLSAgIFQgbW9kZihjb25zdCBUJiB2LCBib29zdDo6bG9uZ19sb25n
X3R5cGUqIGlwYXJ0LCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4K
LSAgIFQgbW9kZihjb25zdCBUJiB2LCBib29zdDo6bG9uZ19sb25nX3R5cGUqIGlwYXJ0KTsKLSNl
bmRpZgotCi0gICB9Ci19Ci0KLSN1bmRlZiBCT09TVF9NQVRIX1NURF9VU0lORwotI2RlZmluZSBC
T09TVF9NQVRIX1NURF9VU0lORyBCT09TVF9NQVRIX1NURF9VU0lOR19DT1JFXAotICAgdXNpbmcg
Ym9vc3Q6Om1hdGg6OnJvdW5kO1wKLSAgIHVzaW5nIGJvb3N0OjptYXRoOjppcm91bmQ7XAotICAg
dXNpbmcgYm9vc3Q6Om1hdGg6Omxyb3VuZDtcCi0gICB1c2luZyBib29zdDo6bWF0aDo6dHJ1bmM7
XAotICAgdXNpbmcgYm9vc3Q6Om1hdGg6Oml0cnVuYztcCi0gICB1c2luZyBib29zdDo6bWF0aDo6
bHRydW5jO1wKLSAgIHVzaW5nIGJvb3N0OjptYXRoOjptb2RmOwotCi0KLSNlbmRpZiAvLyBCT09T
VF9NQVRIX1NQRUNJQUxfUk9VTkRfRldEX0hQUAotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tYXRoL3NwZWNpYWxfZnVuY3Rpb25zL2ZwY2xh
c3NpZnkuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbWF0
aC9zcGVjaWFsX2Z1bmN0aW9ucy9mcGNsYXNzaWZ5LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDgzZTExMWM0OGMwNTcwMzk1ZWM0ZTA3Nzk2YzA1YzZkM2UyMGY2Mi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tYXRoL3NwZWNpYWxfZnVuY3Rpb25zL2ZwY2xhc3Np
ZnkuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjQwICswLDAgQEAKLS8vICBDb3B5cmlnaHQgSm9o
biBNYWRkb2NrIDIwMDUtMjAwOC4KLS8vICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBKb2hhbiBS
YWRlCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0
byB0aGUKLS8vICBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZQotLy8gIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2lmbmRlZiBCT09TVF9NQVRIX0ZQQ0xBU1NJ
RllfSFBQCi0jZGVmaW5lIEJPT1NUX01BVEhfRlBDTEFTU0lGWV9IUFAKLQotI2lmZGVmIF9NU0Nf
VkVSCi0jcHJhZ21hIG9uY2UKLSNlbmRpZgotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUg
PGJvb3N0L2NvbmZpZy9ub190cjEvY21hdGguaHBwPgotI2luY2x1ZGUgPGJvb3N0L2xpbWl0cy5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbWF0aC90b29scy9yZWFsX2Nhc3QuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Zsb2F0aW5nX3BvaW50LmhwcD4KLSNpbmNsdWRlIDxib29z
dC9tYXRoL3NwZWNpYWxfZnVuY3Rpb25zL21hdGhfZndkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9t
YXRoL3NwZWNpYWxfZnVuY3Rpb25zL2RldGFpbC9mcF90cmFpdHMuaHBwPgotLyohCi0gIFxmaWxl
IGZwY2xhc3NpZnkuaHBwCi0gIFxicmllZiBDbGFzc2lmeSBmbG9hdGluZy1wb2ludCB2YWx1ZSBh
cyBub3JtYWwsIHN1Ym5vcm1hbCwgemVybywgaW5maW5pdGUsIG9yIE5hTi4KLSAgXHZlcnNpb24g
MS4wCi0gIFxhdXRob3IgSm9obiBNYWRkb2NrCi0gKi8KLQotLyoKLQotMS4gSWYgdGhlIHBsYXRm
b3JtIGlzIEM5OSBjb21wbGlhbnQsIHRoZW4gdGhlIG5hdGl2ZSBmbG9hdGluZyBwb2ludAotY2xh
c3NpZmljYXRpb24gZnVuY3Rpb25zIGFyZSB1c2VkLiAgSG93ZXZlciwgbm90ZSB0aGF0IHdlIG11
c3Qgb25seQotZGVmaW5lIHRoZSBmdW5jdGlvbnMgd2hpY2ggY2FsbCBzdGQ6OmZwY2xhc3NpZnkg
ZXRjIGlmIHRoYXQgZnVuY3Rpb24KLXJlYWxseSBkb2VzIGV4aXN0OiBvdGhlcndpc2UgYSBjb21w
aWxlciBtYXkgcmVqZWN0IHRoZSBjb2RlIGV2ZW4gdGhvdWdoCi10aGUgdGVtcGxhdGUgaXMgbmV2
ZXIgaW5zdGFudGlhdGVkLgotCi0yLiBJZiB0aGUgcGxhdGZvcm0gaXMgbm90IEM5OSBjb21wbGlh
bnQsIGFuZCB0aGUgYmluYXJ5IGZvcm1hdCBmb3IKLWEgZmxvYXRpbmcgcG9pbnQgdHlwZSAoZmxv
YXQsIGRvdWJsZSBvciBsb25nIGRvdWJsZSkgY2FuIGJlIGRldGVybWluZWQKLWF0IGNvbXBpbGUg
dGltZSwgdGhlbiB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSBpcyB1c2VkOgotCi0gICAgICAgIElm
IGFsbCBleHBvbmVudCBiaXRzLCB0aGUgZmxhZyBiaXQgKGlmIHRoZXJlIGlzIG9uZSksCi0gICAg
ICAgIGFuZCBhbGwgc2lnbmlmaWNhbmQgYml0cyBhcmUgMCwgdGhlbiB0aGUgbnVtYmVyIGlzIHpl
cm8uCi0KLSAgICAgICAgSWYgYWxsIGV4cG9uZW50IGJpdHMgYW5kIHRoZSBmbGFnIGJpdCAoaWYg
dGhlcmUgaXMgb25lKSBhcmUgMCwKLSAgICAgICAgYW5kIGF0IGxlYXN0IG9uZSBzaWduaWZpY2Fu
ZCBiaXQgaXMgMSwgdGhlbiB0aGUgbnVtYmVyIGlzIHN1Ym5vcm1hbC4KLQotICAgICAgICBJZiBh
bGwgZXhwb25lbnQgYml0cyBhcmUgMSBhbmQgYWxsIHNpZ25pZmljYW5kIGJpdHMgYXJlIDAsCi0g
ICAgICAgIHRoZW4gdGhlIG51bWJlciBpcyBpbmZpbml0eS4KLQotICAgICAgICBJZiBhbGwgZXhw
b25lbnQgYml0cyBhcmUgMSBhbmQgYXQgbGVhc3Qgb25lIHNpZ25pZmljYW5kIGJpdCBpcyAxLAot
ICAgICAgICB0aGVuIHRoZSBudW1iZXIgaXMgYSBub3QtYS1udW1iZXIuCi0KLSAgICAgICAgT3Ro
ZXJ3aXNlIHRoZSBudW1iZXIgaXMgbm9ybWFsLgotCi0gICAgICAgIFRoaXMgYWxnb3JpdGhtIHdv
cmtzIGZvciB0aGUgSUVFRSA3NTQgcmVwcmVzZW50YXRpb24sCi0gICAgICAgIGFuZCBhbHNvIGZv
ciBzZXZlcmFsIG5vbiBJRUVFIDc1NCBmb3JtYXRzLgotCi0gICAgTW9zdCBmb3JtYXRzIGhhdmUg
dGhlIHN0cnVjdHVyZQotICAgICAgICBzaWduIGJpdCArIGV4cG9uZW50IGJpdHMgKyBzaWduaWZp
Y2FuZCBiaXRzLgotCi0gICAgQSBmZXcgaGF2ZSB0aGUgc3RydWN0dXJlCi0gICAgICAgIHNpZ24g
Yml0ICsgZXhwb25lbnQgYml0cyArIGZsYWcgYml0ICsgc2lnbmlmaWNhbmQgYml0cy4KLSAgICBU
aGUgZmxhZyBiaXQgaXMgMCBmb3IgemVybyBhbmQgc3Vibm9ybWFsIG51bWJlcnMsCi0gICAgICAg
IGFuZCAxIGZvciBub3JtYWwgbnVtYmVycyBhbmQgTmFOLgotICAgICAgICBJdCBpcyAwIChNb3Rv
cm9sYSA2OEspIG9yIDEgKEludGVsKSBmb3IgaW5maW5pdHkuCi0KLSAgICBUbyBnZXQgdGhlIGJp
dHMsIHRoZSBmb3VyIG9yIGVpZ2h0IG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZXMgYXJlIGNvcGllZAot
ICAgIGludG8gYW4gdWludDMyX3Qgb3IgdWludDY0X3QgYW5kIGJpdCBtYXNrcyBhcmUgYXBwbGll
ZC4KLSAgICBUaGlzIGNvdmVycyBhbGwgdGhlIGV4cG9uZW50IGJpdHMgYW5kIHRoZSBmbGFnIGJp
dCAoaWYgdGhlcmUgaXMgb25lKSwKLSAgICBidXQgbm90IGFsd2F5cyBhbGwgdGhlIHNpZ25pZmlj
YW5kIGJpdHMuCi0gICAgU29tZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IGhhdmUgdHdvIGltcGxl
bWVudGF0aW9ucywKLSAgICBkZXBlbmRpbmcgb24gd2hldGhlciBhbGwgdGhlIHNpZ25pZmljYW5k
IGJpdHMgYXJlIGNvcGllZCBvciBub3QuCi0KLTMuIElmIHRoZSBwbGF0Zm9ybSBpcyBub3QgQzk5
IGNvbXBsaWFudCwgYW5kIHRoZSBiaW5hcnkgZm9ybWF0IGZvcgotYSBmbG9hdGluZyBwb2ludCB0
eXBlIChmbG9hdCwgZG91YmxlIG9yIGxvbmcgZG91YmxlKSBjYW4gbm90IGJlIGRldGVybWluZWQK
LWF0IGNvbXBpbGUgdGltZSwgdGhlbiBjb21wYXJpc29uIHdpdGggc3RkOjpudW1lcmljX2xpbWl0
cyB2YWx1ZXMKLWlzIHVzZWQuCi0KLSovCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZp
bmVkKF9fQk9STEFORENfXykKLSNpbmNsdWRlIDxmbG9hdC5oPgotI2VuZGlmCi0jaWZkZWYgQk9P
U1RfTUFUSF9VU0VfRkxPQVQxMjgKLSNpZmRlZiBfX2hhc19pbmNsdWRlCi0jaWYgIF9faGFzX2lu
Y2x1ZGUoInF1YWRtYXRoLmgiKQotI2luY2x1ZGUgInF1YWRtYXRoLmgiCi0jZGVmaW5lIEJPT1NU
X01BVEhfSEFTX1FVQURNQVRIX0gKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQotI2lmZGVmIEJP
T1NUX05PX1NURENfTkFNRVNQQUNFCi0gIG5hbWVzcGFjZSBzdGR7IHVzaW5nIDo6YWJzOyB1c2lu
ZyA6OmZhYnM7IH0KLSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3R7Ci0KLS8vCi0vLyBUaGlzIG11
c3Qgbm90IGJlIGxvY2F0ZWQgaW4gYW55IG5hbWVzcGFjZSB1bmRlciBib29zdDo6bWF0aAotLy8g
b3RoZXJ3aXNlIHdlIGNhbiBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wIGlmIGlzbmFuIGlzCi0v
LyBhICNkZWZpbmUgZm9yICJpc25hbiIgIQotLy8KLW5hbWVzcGFjZSBtYXRoX2RldGFpbHsKLQot
I2lmZGVmIEJPT1NUX01TVkMKLSNwcmFnbWEgd2FybmluZyhwdXNoKQotI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6NDgwMCkKLSNlbmRpZgotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWlubGluZSBib29s
IGlzX25hbl9oZWxwZXIoVCB0LCBjb25zdCBib29zdDo6dHJ1ZV90eXBlJikKLXsKLSNpZmRlZiBp
c25hbgotICAgcmV0dXJuIGlzbmFuKHQpOwotI2VsaWYgZGVmaW5lZChCT09TVF9NQVRIX0RJU0FC
TEVfU1REX0ZQQ0xBU1NJRlkpIHx8ICFkZWZpbmVkKEJPT1NUX0hBU19GUENMQVNTSUZZKQotICAg
KHZvaWQpdDsKLSAgIHJldHVybiBmYWxzZTsKLSNlbHNlIC8vIEJPT1NUX0hBU19GUENMQVNTSUZZ
Ci0gICByZXR1cm4gKEJPT1NUX0ZQQ0xBU1NJRllfUFJFRklYIGZwY2xhc3NpZnkodCkgPT0gKGlu
dClGUF9OQU4pOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBCT09TVF9NU1ZDCi0jcHJhZ21hIHdhcm5p
bmcocG9wKQotI2VuZGlmCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotaW5saW5lIGJvb2wgaXNfbmFu
X2hlbHBlcihULCBjb25zdCBib29zdDo6ZmFsc2VfdHlwZSYpCi17Ci0gICByZXR1cm4gZmFsc2U7
Ci19Ci0jaWYgZGVmaW5lZChCT09TVF9NQVRIX1VTRV9GTE9BVDEyOCkgCi0jaWYgZGVmaW5lZChC
T09TVF9NQVRIX0hBU19RVUFETUFUSF9IKQotaW5saW5lIGJvb2wgaXNfbmFuX2hlbHBlcihfX2Zs
b2F0MTI4IGYsIGNvbnN0IGJvb3N0Ojp0cnVlX3R5cGUmKSB7IHJldHVybiA6OmlzbmFucShmKTsg
fQotaW5saW5lIGJvb2wgaXNfbmFuX2hlbHBlcihfX2Zsb2F0MTI4IGYsIGNvbnN0IGJvb3N0Ojpm
YWxzZV90eXBlJikgeyByZXR1cm4gOjppc25hbnEoZik7IH0KLSNlbGlmIGRlZmluZWQoQk9PU1Rf
R05VX1NURExJQikgJiYgQk9PU1RfR05VX1NURExJQiAmJiBcCi0gICAgICBfR0xJQkNYWF9VU0Vf
Qzk5X01BVEggJiYgIV9HTElCQ1hYX1VTRV9DOTlfRlBfTUFDUk9TX0RZTkFNSUMKLWlubGluZSBi
b29sIGlzX25hbl9oZWxwZXIoX19mbG9hdDEyOCBmLCBjb25zdCBib29zdDo6dHJ1ZV90eXBlJikg
eyByZXR1cm4gc3RkOjppc25hbihzdGF0aWNfY2FzdDxkb3VibGU+KGYpKTsgfQotaW5saW5lIGJv
b2wgaXNfbmFuX2hlbHBlcihfX2Zsb2F0MTI4IGYsIGNvbnN0IGJvb3N0OjpmYWxzZV90eXBlJikg
eyByZXR1cm4gc3RkOjppc25hbihzdGF0aWNfY2FzdDxkb3VibGU+KGYpKTsgfQotI2Vsc2UKLWlu
bGluZSBib29sIGlzX25hbl9oZWxwZXIoX19mbG9hdDEyOCBmLCBjb25zdCBib29zdDo6dHJ1ZV90
eXBlJikgeyByZXR1cm4gOjppc25hbihzdGF0aWNfY2FzdDxkb3VibGU+KGYpKTsgfQotaW5saW5l
IGJvb2wgaXNfbmFuX2hlbHBlcihfX2Zsb2F0MTI4IGYsIGNvbnN0IGJvb3N0OjpmYWxzZV90eXBl
JikgeyByZXR1cm4gOjppc25hbihzdGF0aWNfY2FzdDxkb3VibGU+KGYpKTsgfQotI2VuZGlmCi0j
ZW5kaWYKLX0KLQotbmFtZXNwYWNlIG1hdGh7Ci0KLW5hbWVzcGFjZSBkZXRhaWx7Ci0KLSNpZmRl
ZiBCT09TVF9NQVRIX1VTRV9TVERfRlBDTEFTU0lGWQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1pbmxp
bmUgaW50IGZwY2xhc3NpZnlfaW1wIEJPT1NUX05PX01BQ1JPX0VYUEFORChUIHQsIGNvbnN0IG5h
dGl2ZV90YWcmKQotewotICAgcmV0dXJuIChzdGQ6OmZwY2xhc3NpZnkpKHQpOwotfQotI2VuZGlm
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotaW5saW5lIGludCBmcGNsYXNzaWZ5X2ltcCBCT09TVF9O
T19NQUNST19FWFBBTkQoVCB0LCBjb25zdCBnZW5lcmljX3RhZzx0cnVlPiYpCi17Ci0gICBCT09T
VF9NQVRIX0lOU1RSVU1FTlRfVkFSSUFCTEUodCk7Ci0KLSAgIC8vIHdoZW5ldmVyIHBvc3NpYmxl
IGNoZWNrIGZvciBOYW4ncyBmaXJzdDoKLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19GUENMQVNTSUZZ
KSAgJiYgIWRlZmluZWQoQk9PU1RfTUFUSF9ESVNBQkxFX1NURF9GUENMQVNTSUZZKQotICAgaWYo
Ojpib29zdDo6bWF0aF9kZXRhaWw6OmlzX25hbl9oZWxwZXIodCwgOjpib29zdDo6aXNfZmxvYXRp
bmdfcG9pbnQ8VD4oKSkpCi0gICAgICByZXR1cm4gRlBfTkFOOwotI2VsaWYgZGVmaW5lZChpc25h
bikKLSAgIGlmKGJvb3N0OjptYXRoX2RldGFpbDo6aXNfbmFuX2hlbHBlcih0LCA6OmJvb3N0Ojpp
c19mbG9hdGluZ19wb2ludDxUPigpKSkKLSAgICAgIHJldHVybiBGUF9OQU47Ci0jZWxpZiBkZWZp
bmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKLSAgIGlmKDo6X2lzbmFuKGJv
b3N0OjptYXRoOjp0b29sczo6cmVhbF9jYXN0PGRvdWJsZT4odCkpKQotICAgICAgcmV0dXJuIEZQ
X05BTjsKLSNlbmRpZgotICAgLy8gc3RkOjpmYWJzIGJyb2tlbiBvbiBhIGZldyBzeXN0ZW1zIGVz
cGVjaWFsbHkgZm9yIGxvbmcgbG9uZyEhISEKLSAgIFQgYXQgPSAodCA8IFQoMCkpID8gLXQgOiB0
OwotCi0gICAvLyBVc2UgYSBwcm9jZXNzIG9mIGV4Y2x1c2lvbiB0byBmaWd1cmUgb3V0Ci0gICAv
LyB3aGF0IGtpbmQgb2YgdHlwZSB3ZSBoYXZlLCB0aGlzIHJlbGllcyBvbgotICAgLy8gSUVFRSBj
b25mb3JtaW5nIHJlYWxzIHRoYXQgd2lsbCB0cmVhdAotICAgLy8gTmFuJ3MgYXMgdW5vcmRlcmVk
LiAgU29tZSBjb21waWxlcnMKLSAgIC8vIGRvbid0IGRvIHRoaXMgb25jZSBvcHRpbWlzYXRpb25z
IGFyZQotICAgLy8gdHVybmVkIG9uLCBoZW5jZSB0aGUgY2hlY2sgZm9yIG5hbidzIGFib3ZlLgot
ICAgaWYoYXQgPD0gKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCkoKSkKLSAgIHsKLSAgICAg
IGlmKGF0ID49IChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4pKCkpCi0gICAgICAgICByZXR1
cm4gRlBfTk9STUFMOwotICAgICAgcmV0dXJuIChhdCAhPSAwKSA/IEZQX1NVQk5PUk1BTCA6IEZQ
X1pFUk87Ci0gICB9Ci0gICBlbHNlIGlmKGF0ID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1h
eCkoKSkKLSAgICAgIHJldHVybiBGUF9JTkZJTklURTsKLSAgIHJldHVybiBGUF9OQU47Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPgotaW5saW5lIGludCBmcGNsYXNzaWZ5X2ltcCBCT09TVF9OT19N
QUNST19FWFBBTkQoVCB0LCBjb25zdCBnZW5lcmljX3RhZzxmYWxzZT4mKQotewotI2lmZGVmIEJP
T1NUX05PX0xJTUlUU19DT01QSUxFX1RJTUVfQ09OU1RBTlRTCi0gICBpZihzdGQ6Om51bWVyaWNf
bGltaXRzPFQ+Ojppc19zcGVjaWFsaXplZCkKLSAgICAgIHJldHVybiBmcGNsYXNzaWZ5X2ltcCh0
LCBnZW5lcmljX3RhZzx0cnVlPigpKTsKLSNlbmRpZgotICAgLy8KLSAgIC8vIEFuIHVua25vd24g
dHlwZSB3aXRoIG5vIG51bWVyaWNfbGltaXRzIHN1cHBvcnQsCi0gICAvLyBzbyB3aGF0IGFyZSB3
ZSBzdXBwb3NlZCB0byBkbyB3ZSBkbyBoZXJlPwotICAgLy8KLSAgIEJPT1NUX01BVEhfSU5TVFJV
TUVOVF9WQVJJQUJMRSh0KTsKLQotICAgcmV0dXJuIHQgPT0gMCA/IEZQX1pFUk8gOiBGUF9OT1JN
QUw7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1pbnQgZnBjbGFzc2lmeV9pbXAgQk9PU1RfTk9f
TUFDUk9fRVhQQU5EKFQgeCwgaWVlZV9jb3B5X2FsbF9iaXRzX3RhZykKLXsKLSAgIHR5cGVkZWYg
Qk9PU1RfREVEVUNFRF9UWVBFTkFNRSBmcF90cmFpdHM8VD46OnR5cGUgdHJhaXRzOwotCi0gICBC
T09TVF9NQVRIX0lOU1RSVU1FTlRfVkFSSUFCTEUoeCk7Ci0KLSAgIEJPT1NUX0RFRFVDRURfVFlQ
RU5BTUUgdHJhaXRzOjpiaXRzIGE7Ci0gICB0cmFpdHM6OmdldF9iaXRzKHgsYSk7Ci0gICBCT09T
VF9NQVRIX0lOU1RSVU1FTlRfVkFSSUFCTEUoYSk7Ci0gICBhICY9IHRyYWl0czo6ZXhwb25lbnQg
fCB0cmFpdHM6OmZsYWcgfCB0cmFpdHM6OnNpZ25pZmljYW5kOwotICAgQk9PU1RfTUFUSF9JTlNU
UlVNRU5UX1ZBUklBQkxFKCh0cmFpdHM6OmV4cG9uZW50IHwgdHJhaXRzOjpmbGFnIHwgdHJhaXRz
OjpzaWduaWZpY2FuZCkpOwotICAgQk9PU1RfTUFUSF9JTlNUUlVNRU5UX1ZBUklBQkxFKGEpOwot
Ci0gICBpZihhIDw9IHRyYWl0czo6c2lnbmlmaWNhbmQpIHsKLSAgICAgIGlmKGEgPT0gMCkKLSAg
ICAgICAgIHJldHVybiBGUF9aRVJPOwotICAgICAgZWxzZQotICAgICAgICAgcmV0dXJuIEZQX1NV
Qk5PUk1BTDsKLSAgIH0KLQotICAgaWYoYSA8IHRyYWl0czo6ZXhwb25lbnQpIHJldHVybiBGUF9O
T1JNQUw7Ci0KLSAgIGEgJj0gdHJhaXRzOjpzaWduaWZpY2FuZDsKLSAgIGlmKGEgPT0gMCkgcmV0
dXJuIEZQX0lORklOSVRFOwotCi0gICByZXR1cm4gRlBfTkFOOwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBUPgotaW50IGZwY2xhc3NpZnlfaW1wIEJPT1NUX05PX01BQ1JPX0VYUEFORChUIHgsIGllZWVf
Y29weV9sZWFkaW5nX2JpdHNfdGFnKQotewotICAgdHlwZWRlZiBCT09TVF9ERURVQ0VEX1RZUEVO
QU1FIGZwX3RyYWl0czxUPjo6dHlwZSB0cmFpdHM7Ci0KLSAgIEJPT1NUX01BVEhfSU5TVFJVTUVO
VF9WQVJJQUJMRSh4KTsKLQotICAgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSB0cmFpdHM6OmJpdHMg
YTsKLSAgIHRyYWl0czo6Z2V0X2JpdHMoeCxhKTsKLSAgIGEgJj0gdHJhaXRzOjpleHBvbmVudCB8
IHRyYWl0czo6ZmxhZyB8IHRyYWl0czo6c2lnbmlmaWNhbmQ7Ci0KLSAgIGlmKGEgPD0gdHJhaXRz
OjpzaWduaWZpY2FuZCkgewotICAgICAgaWYoeCA9PSAwKQotICAgICAgICAgcmV0dXJuIEZQX1pF
Uk87Ci0gICAgICBlbHNlCi0gICAgICAgICByZXR1cm4gRlBfU1VCTk9STUFMOwotICAgfQotCi0g
ICBpZihhIDwgdHJhaXRzOjpleHBvbmVudCkgcmV0dXJuIEZQX05PUk1BTDsKLQotICAgYSAmPSB0
cmFpdHM6OnNpZ25pZmljYW5kOwotICAgdHJhaXRzOjpzZXRfYml0cyh4LGEpOwotICAgaWYoeCA9
PSAwKSByZXR1cm4gRlBfSU5GSU5JVEU7Ci0KLSAgIHJldHVybiBGUF9OQU47Ci19Ci0KLSNpZiBk
ZWZpbmVkKEJPT1NUX01BVEhfVVNFX1NURF9GUENMQVNTSUZZKSAmJiAoZGVmaW5lZChCT09TVF9N
QVRIX05PX05BVElWRV9MT05HX0RPVUJMRV9GUF9DTEFTU0lGWSkgfHwgZGVmaW5lZChCT09TVF9N
QVRIX05PX0xPTkdfRE9VQkxFX01BVEhfRlVOQ1RJT05TKSkKLWlubGluZSBpbnQgZnBjbGFzc2lm
eV9pbXAgQk9PU1RfTk9fTUFDUk9fRVhQQU5EKGxvbmcgZG91YmxlIHQsIGNvbnN0IG5hdGl2ZV90
YWcmKQotewotICAgcmV0dXJuIGJvb3N0OjptYXRoOjpkZXRhaWw6OmZwY2xhc3NpZnlfaW1wKHQs
IGdlbmVyaWNfdGFnPHRydWU+KCkpOwotfQotI2VuZGlmCi0KLX0gIC8vIG5hbWVzcGFjZSBkZXRh
aWwKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1pbmxpbmUgaW50IGZwY2xhc3NpZnkgQk9PU1RfTk9f
TUFDUk9fRVhQQU5EKFQgdCkKLXsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpmcF90cmFp
dHM8VD46OnR5cGUgdHJhaXRzOwotICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHM6Om1ldGhvZCBt
ZXRob2Q7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3NfcGVybWlzc2l2
ZTxUPjo6dHlwZSB2YWx1ZV90eXBlOwotI2lmZGVmIEJPT1NUX05PX0xJTUlUU19DT01QSUxFX1RJ
TUVfQ09OU1RBTlRTCi0gICBpZihzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19zcGVjaWFsaXpl
ZCAmJiBkZXRhaWw6OmlzX2dlbmVyaWNfdGFnX2ZhbHNlKHN0YXRpY19jYXN0PG1ldGhvZCo+KDAp
KSkKLSAgICAgIHJldHVybiBkZXRhaWw6OmZwY2xhc3NpZnlfaW1wKHN0YXRpY19jYXN0PHZhbHVl
X3R5cGU+KHQpLCBkZXRhaWw6OmdlbmVyaWNfdGFnPHRydWU+KCkpOwotICAgcmV0dXJuIGRldGFp
bDo6ZnBjbGFzc2lmeV9pbXAoc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4odCksIG1ldGhvZCgpKTsK
LSNlbHNlCi0gICByZXR1cm4gZGV0YWlsOjpmcGNsYXNzaWZ5X2ltcChzdGF0aWNfY2FzdDx2YWx1
ZV90eXBlPih0KSwgbWV0aG9kKCkpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBCT09TVF9NQVRIX05P
X0xPTkdfRE9VQkxFX01BVEhfRlVOQ1RJT05TCi10ZW1wbGF0ZSA8PgotaW5saW5lIGludCBmcGNs
YXNzaWZ5PGxvbmcgZG91YmxlPiBCT09TVF9OT19NQUNST19FWFBBTkQobG9uZyBkb3VibGUgdCkK
LXsKLSAgIHR5cGVkZWYgZGV0YWlsOjpmcF90cmFpdHM8bG9uZyBkb3VibGU+Ojp0eXBlIHRyYWl0
czsKLSAgIHR5cGVkZWYgdHJhaXRzOjptZXRob2QgbWV0aG9kOwotICAgdHlwZWRlZiBsb25nIGRv
dWJsZSB2YWx1ZV90eXBlOwotI2lmZGVmIEJPT1NUX05PX0xJTUlUU19DT01QSUxFX1RJTUVfQ09O
U1RBTlRTCi0gICBpZihzdGQ6Om51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6aXNfc3BlY2lh
bGl6ZWQgJiYgZGV0YWlsOjppc19nZW5lcmljX3RhZ19mYWxzZShzdGF0aWNfY2FzdDxtZXRob2Qq
PigwKSkpCi0gICAgICByZXR1cm4gZGV0YWlsOjpmcGNsYXNzaWZ5X2ltcChzdGF0aWNfY2FzdDx2
YWx1ZV90eXBlPih0KSwgZGV0YWlsOjpnZW5lcmljX3RhZzx0cnVlPigpKTsKLSAgIHJldHVybiBk
ZXRhaWw6OmZwY2xhc3NpZnlfaW1wKHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+KHQpLCBtZXRob2Qo
KSk7Ci0jZWxzZQotICAgcmV0dXJuIGRldGFpbDo6ZnBjbGFzc2lmeV9pbXAoc3RhdGljX2Nhc3Q8
dmFsdWVfdHlwZT4odCksIG1ldGhvZCgpKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBkZXRhaWwgewotCi0jaWZkZWYgQk9PU1RfTUFUSF9VU0VfU1REX0ZQQ0xBU1NJRlkKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBUPgotICAgIGlubGluZSBib29sIGlzZmluaXRlX2ltcGwoVCB4LCBuYXRp
dmVfdGFnIGNvbnN0JikKLSAgICB7Ci0gICAgICAgIHJldHVybiAoc3RkOjppc2Zpbml0ZSkoeCk7
Ci0gICAgfQotI2VuZGlmCi0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIGlubGluZSBib29s
IGlzZmluaXRlX2ltcGwoVCB4LCBnZW5lcmljX3RhZzx0cnVlPiBjb25zdCYpCi0gICAgewotICAg
ICAgICByZXR1cm4geCA+PSAtKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCkoKQotICAgICAg
ICAgICAgJiYgeCA8PSAoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KSgpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgaW5saW5lIGJvb2wgaXNmaW5pdGVfaW1wbChUIHgs
IGdlbmVyaWNfdGFnPGZhbHNlPiBjb25zdCYpCi0gICAgewotI2lmZGVmIEJPT1NUX05PX0xJTUlU
U19DT01QSUxFX1RJTUVfQ09OU1RBTlRTCi0gICAgICBpZihzdGQ6Om51bWVyaWNfbGltaXRzPFQ+
Ojppc19zcGVjaWFsaXplZCkKLSAgICAgICAgIHJldHVybiBpc2Zpbml0ZV9pbXBsKHgsIGdlbmVy
aWNfdGFnPHRydWU+KCkpOwotI2VuZGlmCi0gICAgICAgKHZvaWQpeDsgLy8gd2FybmluZyBzdXBw
cmVzc2lvbi4KLSAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFz
cyBUPgotICAgIGlubGluZSBib29sIGlzZmluaXRlX2ltcGwoVCB4LCBpZWVlX3RhZyBjb25zdCYp
Ci0gICAgewotICAgICAgICB0eXBlZGVmIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgZGV0YWlsOjpm
cF90cmFpdHM8VD46OnR5cGUgdHJhaXRzOwotICAgICAgICBCT09TVF9ERURVQ0VEX1RZUEVOQU1F
IHRyYWl0czo6Yml0cyBhOwotICAgICAgICB0cmFpdHM6OmdldF9iaXRzKHgsYSk7Ci0gICAgICAg
IGEgJj0gdHJhaXRzOjpleHBvbmVudDsKLSAgICAgICAgcmV0dXJuIGEgIT0gdHJhaXRzOjpleHBv
bmVudDsKLSAgICB9Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX01BVEhfVVNFX1NURF9GUENMQVNTSUZZ
KSAmJiBkZWZpbmVkKEJPT1NUX01BVEhfTk9fTkFUSVZFX0xPTkdfRE9VQkxFX0ZQX0NMQVNTSUZZ
KQotaW5saW5lIGJvb2wgaXNmaW5pdGVfaW1wbCBCT09TVF9OT19NQUNST19FWFBBTkQobG9uZyBk
b3VibGUgdCwgY29uc3QgbmF0aXZlX3RhZyYpCi17Ci0gICByZXR1cm4gYm9vc3Q6Om1hdGg6OmRl
dGFpbDo6aXNmaW5pdGVfaW1wbCh0LCBnZW5lcmljX3RhZzx0cnVlPigpKTsKLX0KLSNlbmRpZgot
Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1pbmxpbmUgYm9vbCAoaXNmaW5pdGUpKFQgeCkKLXsg
Ly8hPCBcYnJpZWYgcmV0dXJuIHRydWUgaWYgZmxvYXRpbmctcG9pbnQgdHlwZSB0IGlzIGZpbml0
ZS4KLSAgIHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpmcF90cmFpdHM8VD46OnR5cGUgdHJhaXRz
OwotICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHM6Om1ldGhvZCBtZXRob2Q7Ci0gICAvLyB0eXBl
ZGVmIHR5cGVuYW1lIGJvb3N0Ojppc19mbG9hdGluZ19wb2ludDxUPjo6dHlwZSBmcF90YWc7Ci0g
ICB0eXBlZGVmIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3NfcGVybWlzc2l2ZTxUPjo6dHlw
ZSB2YWx1ZV90eXBlOwotICAgcmV0dXJuIGRldGFpbDo6aXNmaW5pdGVfaW1wbChzdGF0aWNfY2Fz
dDx2YWx1ZV90eXBlPih4KSwgbWV0aG9kKCkpOwotfQotCi0jaWZkZWYgQk9PU1RfTUFUSF9OT19M
T05HX0RPVUJMRV9NQVRIX0ZVTkNUSU9OUwotdGVtcGxhdGU8PgotaW5saW5lIGJvb2wgKGlzZmlu
aXRlKShsb25nIGRvdWJsZSB4KQoteyAvLyE8IFxicmllZiByZXR1cm4gdHJ1ZSBpZiBmbG9hdGlu
Zy1wb2ludCB0eXBlIHQgaXMgZmluaXRlLgotICAgdHlwZWRlZiBkZXRhaWw6OmZwX3RyYWl0czxs
b25nIGRvdWJsZT46OnR5cGUgdHJhaXRzOwotICAgdHlwZWRlZiB0cmFpdHM6Om1ldGhvZCBtZXRo
b2Q7Ci0gICAvL3R5cGVkZWYgYm9vc3Q6OmlzX2Zsb2F0aW5nX3BvaW50PGxvbmcgZG91YmxlPjo6
dHlwZSBmcF90YWc7Ci0gICB0eXBlZGVmIGxvbmcgZG91YmxlIHZhbHVlX3R5cGU7Ci0gICByZXR1
cm4gZGV0YWlsOjppc2Zpbml0ZV9pbXBsKHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+KHgpLCBtZXRo
b2QoKSk7Ci19Ci0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbmFtZXNwYWNl
IGRldGFpbCB7Ci0KLSNpZmRlZiBCT09TVF9NQVRIX1VTRV9TVERfRlBDTEFTU0lGWQotICAgIHRl
bXBsYXRlPGNsYXNzIFQ+Ci0gICAgaW5saW5lIGJvb2wgaXNub3JtYWxfaW1wbChUIHgsIG5hdGl2
ZV90YWcgY29uc3QmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChzdGQ6Omlzbm9ybWFsKSh4KTsK
LSAgICB9Ci0jZW5kaWYKLQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgaW5saW5lIGJvb2wg
aXNub3JtYWxfaW1wbChUIHgsIGdlbmVyaWNfdGFnPHRydWU+IGNvbnN0JikKLSAgICB7Ci0gICAg
ICAgIGlmKHggPCAwKSB4ID0gLXg7Ci0gICAgICAgIHJldHVybiB4ID49IChzdGQ6Om51bWVyaWNf
bGltaXRzPFQ+OjptaW4pKCkKLSAgICAgICAgICAgICYmIHggPD0gKHN0ZDo6bnVtZXJpY19saW1p
dHM8VD46Om1heCkoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIGlubGlu
ZSBib29sIGlzbm9ybWFsX2ltcGwoVCB4LCBnZW5lcmljX3RhZzxmYWxzZT4gY29uc3QmKQotICAg
IHsKLSNpZmRlZiBCT09TVF9OT19MSU1JVFNfQ09NUElMRV9USU1FX0NPTlNUQU5UUwotICAgICAg
aWYoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNfc3BlY2lhbGl6ZWQpCi0gICAgICAgICByZXR1
cm4gaXNub3JtYWxfaW1wbCh4LCBnZW5lcmljX3RhZzx0cnVlPigpKTsKLSNlbmRpZgotICAgICAg
IHJldHVybiAhKHggPT0gMCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICBp
bmxpbmUgYm9vbCBpc25vcm1hbF9pbXBsKFQgeCwgaWVlZV90YWcgY29uc3QmKQotICAgIHsKLSAg
ICAgICAgdHlwZWRlZiBCT09TVF9ERURVQ0VEX1RZUEVOQU1FIGRldGFpbDo6ZnBfdHJhaXRzPFQ+
Ojp0eXBlIHRyYWl0czsKLSAgICAgICAgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSB0cmFpdHM6OmJp
dHMgYTsKLSAgICAgICAgdHJhaXRzOjpnZXRfYml0cyh4LGEpOwotICAgICAgICBhICY9IHRyYWl0
czo6ZXhwb25lbnQgfCB0cmFpdHM6OmZsYWc7Ci0gICAgICAgIHJldHVybiAoYSAhPSAwKSAmJiAo
YSA8IHRyYWl0czo6ZXhwb25lbnQpOwotICAgIH0KLQotI2lmIGRlZmluZWQoQk9PU1RfTUFUSF9V
U0VfU1REX0ZQQ0xBU1NJRlkpICYmIGRlZmluZWQoQk9PU1RfTUFUSF9OT19OQVRJVkVfTE9OR19E
T1VCTEVfRlBfQ0xBU1NJRlkpCi1pbmxpbmUgYm9vbCBpc25vcm1hbF9pbXBsIEJPT1NUX05PX01B
Q1JPX0VYUEFORChsb25nIGRvdWJsZSB0LCBjb25zdCBuYXRpdmVfdGFnJikKLXsKLSAgIHJldHVy
biBib29zdDo6bWF0aDo6ZGV0YWlsOjppc25vcm1hbF9pbXBsKHQsIGdlbmVyaWNfdGFnPHRydWU+
KCkpOwotfQotI2VuZGlmCi0KLX0KLQotdGVtcGxhdGU8Y2xhc3MgVD4KLWlubGluZSBib29sIChp
c25vcm1hbCkoVCB4KQotewotICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmZwX3RyYWl0czxU
Pjo6dHlwZSB0cmFpdHM7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0czo6bWV0aG9kIG1ldGhv
ZDsKLSAgIC8vdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnR5
cGUgZnBfdGFnOwotICAgdHlwZWRlZiB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzX3Blcm1p
c3NpdmU8VD46OnR5cGUgdmFsdWVfdHlwZTsKLSAgIHJldHVybiBkZXRhaWw6Omlzbm9ybWFsX2lt
cGwoc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oeCksIG1ldGhvZCgpKTsKLX0KLQotI2lmZGVmIEJP
T1NUX01BVEhfTk9fTE9OR19ET1VCTEVfTUFUSF9GVU5DVElPTlMKLXRlbXBsYXRlPD4KLWlubGlu
ZSBib29sIChpc25vcm1hbCkobG9uZyBkb3VibGUgeCkKLXsKLSAgIHR5cGVkZWYgZGV0YWlsOjpm
cF90cmFpdHM8bG9uZyBkb3VibGU+Ojp0eXBlIHRyYWl0czsKLSAgIHR5cGVkZWYgdHJhaXRzOjpt
ZXRob2QgbWV0aG9kOwotICAgLy90eXBlZGVmIGJvb3N0Ojppc19mbG9hdGluZ19wb2ludDxsb25n
IGRvdWJsZT46OnR5cGUgZnBfdGFnOwotICAgdHlwZWRlZiBsb25nIGRvdWJsZSB2YWx1ZV90eXBl
OwotICAgcmV0dXJuIGRldGFpbDo6aXNub3JtYWxfaW1wbChzdGF0aWNfY2FzdDx2YWx1ZV90eXBl
Pih4KSwgbWV0aG9kKCkpOwotfQotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LW5hbWVzcGFjZSBkZXRhaWwgewotCi0jaWZkZWYgQk9PU1RfTUFUSF9VU0VfU1REX0ZQQ0xBU1NJ
RlkKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIGlubGluZSBib29sIGlzaW5mX2ltcGwoVCB4
LCBuYXRpdmVfdGFnIGNvbnN0JikKLSAgICB7Ci0gICAgICAgIHJldHVybiAoc3RkOjppc2luZiko
eCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIGlubGluZSBi
b29sIGlzaW5mX2ltcGwoVCB4LCBnZW5lcmljX3RhZzx0cnVlPiBjb25zdCYpCi0gICAgewotICAg
ICAgICAodm9pZCl4OyAvLyBpbiBjYXNlIHRoZSBjb21waWxlciB0aGlua3MgdGhhdCB4IGlzIHVu
dXNlZCBiZWNhdXNlIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Omhhc19pbmZpbml0eSBpcyBmYWxz
ZQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aGFzX2luZmluaXR5Ci0g
ICAgICAgICAgICAmJiAoIHggPT0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aW5maW5pdHkoKQot
ICAgICAgICAgICAgICAgICB8fCB4ID09IC1zdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjppbmZpbml0
eSgpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIGlubGluZSBib29sIGlz
aW5mX2ltcGwoVCB4LCBnZW5lcmljX3RhZzxmYWxzZT4gY29uc3QmKQotICAgIHsKLSNpZmRlZiBC
T09TVF9OT19MSU1JVFNfQ09NUElMRV9USU1FX0NPTlNUQU5UUwotICAgICAgaWYoc3RkOjpudW1l
cmljX2xpbWl0czxUPjo6aXNfc3BlY2lhbGl6ZWQpCi0gICAgICAgICByZXR1cm4gaXNpbmZfaW1w
bCh4LCBnZW5lcmljX3RhZzx0cnVlPigpKTsKLSNlbmRpZgotICAgICAgICAodm9pZCl4OyAvLyB3
YXJuaW5nIHN1cHByZXNzaW9uLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgICBpbmxpbmUgYm9vbCBpc2luZl9pbXBsKFQgeCwgaWVlZV9j
b3B5X2FsbF9iaXRzX3RhZyBjb25zdCYpCi0gICAgewotICAgICAgICB0eXBlZGVmIEJPT1NUX0RF
RFVDRURfVFlQRU5BTUUgZnBfdHJhaXRzPFQ+Ojp0eXBlIHRyYWl0czsKLQotICAgICAgICBCT09T
VF9ERURVQ0VEX1RZUEVOQU1FIHRyYWl0czo6Yml0cyBhOwotICAgICAgICB0cmFpdHM6OmdldF9i
aXRzKHgsYSk7Ci0gICAgICAgIGEgJj0gdHJhaXRzOjpleHBvbmVudCB8IHRyYWl0czo6c2lnbmlm
aWNhbmQ7Ci0gICAgICAgIHJldHVybiBhID09IHRyYWl0czo6ZXhwb25lbnQ7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICBpbmxpbmUgYm9vbCBpc2luZl9pbXBsKFQgeCwgaWVl
ZV9jb3B5X2xlYWRpbmdfYml0c190YWcgY29uc3QmKQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBC
T09TVF9ERURVQ0VEX1RZUEVOQU1FIGZwX3RyYWl0czxUPjo6dHlwZSB0cmFpdHM7Ci0KLSAgICAg
ICAgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSB0cmFpdHM6OmJpdHMgYTsKLSAgICAgICAgdHJhaXRz
OjpnZXRfYml0cyh4LGEpOwotICAgICAgICBhICY9IHRyYWl0czo6ZXhwb25lbnQgfCB0cmFpdHM6
OnNpZ25pZmljYW5kOwotICAgICAgICBpZihhICE9IHRyYWl0czo6ZXhwb25lbnQpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdHJhaXRzOjpzZXRfYml0cyh4LDApOwotICAg
ICAgICByZXR1cm4geCA9PSAwOwotICAgIH0KLQotI2lmIGRlZmluZWQoQk9PU1RfTUFUSF9VU0Vf
U1REX0ZQQ0xBU1NJRlkpICYmIGRlZmluZWQoQk9PU1RfTUFUSF9OT19OQVRJVkVfTE9OR19ET1VC
TEVfRlBfQ0xBU1NJRlkpCi1pbmxpbmUgYm9vbCBpc2luZl9pbXBsIEJPT1NUX05PX01BQ1JPX0VY
UEFORChsb25nIGRvdWJsZSB0LCBjb25zdCBuYXRpdmVfdGFnJikKLXsKLSAgIHJldHVybiBib29z
dDo6bWF0aDo6ZGV0YWlsOjppc2luZl9pbXBsKHQsIGdlbmVyaWNfdGFnPHRydWU+KCkpOwotfQot
I2VuZGlmCi0KLX0gICAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1p
bmxpbmUgYm9vbCAoaXNpbmYpKFQgeCkKLXsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpm
cF90cmFpdHM8VD46OnR5cGUgdHJhaXRzOwotICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHM6Om1l
dGhvZCBtZXRob2Q7Ci0gICAvLyB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0Ojppc19mbG9hdGluZ19w
b2ludDxUPjo6dHlwZSBmcF90YWc7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3Rl
X2FyZ3NfcGVybWlzc2l2ZTxUPjo6dHlwZSB2YWx1ZV90eXBlOwotICAgcmV0dXJuIGRldGFpbDo6
aXNpbmZfaW1wbChzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPih4KSwgbWV0aG9kKCkpOwotfQotCi0j
aWZkZWYgQk9PU1RfTUFUSF9OT19MT05HX0RPVUJMRV9NQVRIX0ZVTkNUSU9OUwotdGVtcGxhdGU8
PgotaW5saW5lIGJvb2wgKGlzaW5mKShsb25nIGRvdWJsZSB4KQotewotICAgdHlwZWRlZiBkZXRh
aWw6OmZwX3RyYWl0czxsb25nIGRvdWJsZT46OnR5cGUgdHJhaXRzOwotICAgdHlwZWRlZiB0cmFp
dHM6Om1ldGhvZCBtZXRob2Q7Ci0gICAvL3R5cGVkZWYgYm9vc3Q6OmlzX2Zsb2F0aW5nX3BvaW50
PGxvbmcgZG91YmxlPjo6dHlwZSBmcF90YWc7Ci0gICB0eXBlZGVmIGxvbmcgZG91YmxlIHZhbHVl
X3R5cGU7Ci0gICByZXR1cm4gZGV0YWlsOjppc2luZl9pbXBsKHN0YXRpY19jYXN0PHZhbHVlX3R5
cGU+KHgpLCBtZXRob2QoKSk7Ci19Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKEJPT1NUX01BVEhfVVNF
X0ZMT0FUMTI4KSAmJiBkZWZpbmVkKEJPT1NUX01BVEhfSEFTX1FVQURNQVRIX0gpCi10ZW1wbGF0
ZTw+Ci1pbmxpbmUgYm9vbCAoaXNpbmYpKF9fZmxvYXQxMjggeCkKLXsKLSAgIHJldHVybiA6Omlz
aW5mcSh4KTsKLX0KLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1uYW1lc3Bh
Y2UgZGV0YWlsIHsKLQotI2lmZGVmIEJPT1NUX01BVEhfVVNFX1NURF9GUENMQVNTSUZZCi0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgICBpbmxpbmUgYm9vbCBpc25hbl9pbXBsKFQgeCwgbmF0aXZl
X3RhZyBjb25zdCYpCi0gICAgewotICAgICAgICByZXR1cm4gKHN0ZDo6aXNuYW4pKHgpOwotICAg
IH0KLSNlbmRpZgotCi0gICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICBpbmxpbmUgYm9vbCBpc25h
bl9pbXBsKFQgeCwgZ2VuZXJpY190YWc8dHJ1ZT4gY29uc3QmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Omhhc19pbmZpbml0eQotICAgICAgICAgICAgPyAh
KHggPD0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aW5maW5pdHkoKSkKLSAgICAgICAgICAgIDog
eCAhPSB4OwotICAgIH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgaW5saW5lIGJvb2wg
aXNuYW5faW1wbChUIHgsIGdlbmVyaWNfdGFnPGZhbHNlPiBjb25zdCYpCi0gICAgewotI2lmZGVm
IEJPT1NUX05PX0xJTUlUU19DT01QSUxFX1RJTUVfQ09OU1RBTlRTCi0gICAgICBpZihzdGQ6Om51
bWVyaWNfbGltaXRzPFQ+Ojppc19zcGVjaWFsaXplZCkKLSAgICAgICAgIHJldHVybiBpc25hbl9p
bXBsKHgsIGdlbmVyaWNfdGFnPHRydWU+KCkpOwotI2VuZGlmCi0gICAgICAgICh2b2lkKXg7IC8v
IHdhcm5pbmcgc3VwcHJlc3Npb24KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgaW5saW5lIGJvb2wgaXNuYW5faW1wbChUIHgsIGllZWVf
Y29weV9hbGxfYml0c190YWcgY29uc3QmKQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBCT09TVF9E
RURVQ0VEX1RZUEVOQU1FIGZwX3RyYWl0czxUPjo6dHlwZSB0cmFpdHM7Ci0KLSAgICAgICAgQk9P
U1RfREVEVUNFRF9UWVBFTkFNRSB0cmFpdHM6OmJpdHMgYTsKLSAgICAgICAgdHJhaXRzOjpnZXRf
Yml0cyh4LGEpOwotICAgICAgICBhICY9IHRyYWl0czo6ZXhwb25lbnQgfCB0cmFpdHM6OnNpZ25p
ZmljYW5kOwotICAgICAgICByZXR1cm4gYSA+IHRyYWl0czo6ZXhwb25lbnQ7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICBpbmxpbmUgYm9vbCBpc25hbl9pbXBsKFQgeCwgaWVl
ZV9jb3B5X2xlYWRpbmdfYml0c190YWcgY29uc3QmKQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBC
T09TVF9ERURVQ0VEX1RZUEVOQU1FIGZwX3RyYWl0czxUPjo6dHlwZSB0cmFpdHM7Ci0KLSAgICAg
ICAgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSB0cmFpdHM6OmJpdHMgYTsKLSAgICAgICAgdHJhaXRz
OjpnZXRfYml0cyh4LGEpOwotCi0gICAgICAgIGEgJj0gdHJhaXRzOjpleHBvbmVudCB8IHRyYWl0
czo6c2lnbmlmaWNhbmQ7Ci0gICAgICAgIGlmKGEgPCB0cmFpdHM6OmV4cG9uZW50KQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGEgJj0gdHJhaXRzOjpzaWduaWZpY2FuZDsK
LSAgICAgICAgdHJhaXRzOjpzZXRfYml0cyh4LGEpOwotICAgICAgICByZXR1cm4geCAhPSAwOwot
ICAgIH0KLQotfSAgIC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotdGVtcGxhdGU8Y2xhc3MgVD4KLWlu
bGluZSBib29sIChpc25hbikoVCB4KQoteyAvLyE8IFxicmllZiByZXR1cm4gdHJ1ZSBpZiBmbG9h
dGluZy1wb2ludCB0eXBlIHQgaXMgTmFOIChOb3QgQSBOdW1iZXIpLgotICAgdHlwZWRlZiB0eXBl
bmFtZSBkZXRhaWw6OmZwX3RyYWl0czxUPjo6dHlwZSB0cmFpdHM7Ci0gICB0eXBlZGVmIHR5cGVu
YW1lIHRyYWl0czo6bWV0aG9kIG1ldGhvZDsKLSAgIC8vIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6
OmlzX2Zsb2F0aW5nX3BvaW50PFQ+Ojp0eXBlIGZwX3RhZzsKLSAgIHJldHVybiBkZXRhaWw6Omlz
bmFuX2ltcGwoeCwgbWV0aG9kKCkpOwotfQotCi0jaWZkZWYgaXNuYW4KLXRlbXBsYXRlIDw+IGlu
bGluZSBib29sIGlzbmFuIEJPT1NUX05PX01BQ1JPX0VYUEFORDxmbG9hdD4oZmxvYXQgdCl7IHJl
dHVybiA6OmJvb3N0OjptYXRoX2RldGFpbDo6aXNfbmFuX2hlbHBlcih0LCBib29zdDo6dHJ1ZV90
eXBlKCkpOyB9Ci10ZW1wbGF0ZSA8PiBpbmxpbmUgYm9vbCBpc25hbiBCT09TVF9OT19NQUNST19F
WFBBTkQ8ZG91YmxlPihkb3VibGUgdCl7IHJldHVybiA6OmJvb3N0OjptYXRoX2RldGFpbDo6aXNf
bmFuX2hlbHBlcih0LCBib29zdDo6dHJ1ZV90eXBlKCkpOyB9Ci10ZW1wbGF0ZSA8PiBpbmxpbmUg
Ym9vbCBpc25hbiBCT09TVF9OT19NQUNST19FWFBBTkQ8bG9uZyBkb3VibGU+KGxvbmcgZG91Ymxl
IHQpeyByZXR1cm4gOjpib29zdDo6bWF0aF9kZXRhaWw6OmlzX25hbl9oZWxwZXIodCwgYm9vc3Q6
OnRydWVfdHlwZSgpKTsgfQotI2VsaWYgZGVmaW5lZChCT09TVF9NQVRIX05PX0xPTkdfRE9VQkxF
X01BVEhfRlVOQ1RJT05TKQotdGVtcGxhdGU8PgotaW5saW5lIGJvb2wgKGlzbmFuKShsb25nIGRv
dWJsZSB4KQoteyAvLyE8IFxicmllZiByZXR1cm4gdHJ1ZSBpZiBmbG9hdGluZy1wb2ludCB0eXBl
IHQgaXMgTmFOIChOb3QgQSBOdW1iZXIpLgotICAgdHlwZWRlZiBkZXRhaWw6OmZwX3RyYWl0czxs
b25nIGRvdWJsZT46OnR5cGUgdHJhaXRzOwotICAgdHlwZWRlZiB0cmFpdHM6Om1ldGhvZCBtZXRo
b2Q7Ci0gICAvL3R5cGVkZWYgYm9vc3Q6OmlzX2Zsb2F0aW5nX3BvaW50PGxvbmcgZG91YmxlPjo6
dHlwZSBmcF90YWc7Ci0gICByZXR1cm4gZGV0YWlsOjppc25hbl9pbXBsKHgsIG1ldGhvZCgpKTsK
LX0KLSNlbmRpZgotI2lmIGRlZmluZWQoQk9PU1RfTUFUSF9VU0VfRkxPQVQxMjgpICYmIGRlZmlu
ZWQoQk9PU1RfTUFUSF9IQVNfUVVBRE1BVEhfSCkKLXRlbXBsYXRlPD4KLWlubGluZSBib29sIChp
c25hbikoX19mbG9hdDEyOCB4KQotewotICAgcmV0dXJuIDo6aXNuYW5xKHgpOwotfQotI2VuZGlm
Ci0KLX0gLy8gbmFtZXNwYWNlIG1hdGgKLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAv
LyBCT09TVF9NQVRIX0ZQQ0xBU1NJRllfSFBQCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21hdGgvc3BlY2lhbF9mdW5jdGlvbnMvbWF0aF9m
d2QuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbWF0aC9z
cGVjaWFsX2Z1bmN0aW9ucy9tYXRoX2Z3ZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGVmYjhmMDY3YWNlODk4NmM1ZDgyOTllYWVjN2M4NTdiZTQ5NTQwNjEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbWF0aC9zcGVjaWFsX2Z1bmN0aW9ucy9tYXRoX2Z3ZC5ocHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNTk3ICswLDAgQEAKLS8vIG1hdGhfZndkLmhwcAotCi0vLyBU
T0RPIHJldmlzZSBjb21wbGV0ZWx5IGZvciBuZXcgZGlzdHJpYnV0aW9uIGNsYXNzZXMuCi0KLS8v
IENvcHlyaWdodCBQYXVsIEEuIEJyaXN0b3cgMjAwNi4KLS8vIENvcHlyaWdodCBKb2huIE1hZGRv
Y2sgMjAwNi4KLQotLy8gVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3Vi
amVjdCB0byB0aGUKLS8vIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8g
KFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQKLS8vIG9yIGNvcHkgYXQgaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0vLyBPbW5pYnVzIGxpc3Qgb2Yg
Zm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgbWF0aCBzcGVjaWFsIGZ1bmN0aW9ucy4KLQotLy8gSVQg
PSBJbnRlZ2VyIHR5cGUuCi0vLyBSVCA9IFJlYWwgdHlwZSAoYnVpbHQtaW4gZmxvYXRpbmctcG9p
bnQgdHlwZXMsIGZsb2F0LCBkb3VibGUsIGxvbmcgZG91YmxlKSAmIFVzZXIgRGVmaW5lZCBUeXBl
cwotLy8gQVQgPSBJbnRlZ2VyIG9yIFJlYWwgdHlwZQotCi0jaWZuZGVmIEJPT1NUX01BVEhfU1BF
Q0lBTF9NQVRIX0ZXRF9IUFAKLSNkZWZpbmUgQk9PU1RfTUFUSF9TUEVDSUFMX01BVEhfRldEX0hQ
UAotCi0jaWZkZWYgX01TQ19WRVIKLSNwcmFnbWEgb25jZQotI2VuZGlmCi0KLSNpbmNsdWRlIDxi
b29zdC9tYXRoL3NwZWNpYWxfZnVuY3Rpb25zL2RldGFpbC9yb3VuZF9md2QuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21hdGgvdG9vbHMvcHJvbW90aW9uLmhwcD4gLy8gZm9yIGFyZ3VtZW50IHByb21v
dGlvbi4KLSNpbmNsdWRlIDxib29zdC9tYXRoL3BvbGljaWVzL3BvbGljeS5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvbXBsL2NvbXBhcmlzb24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3V0aWxpdHkvZW5h
YmxlX2lmLmhwcD4KLSNpbmNsdWRlIDxib29zdC9jb25maWcvbm9fdHIxL2NvbXBsZXguaHBwPgot
Ci0jZGVmaW5lIEJPT1NUX05PX01BQ1JPX0VYUEFORCAvKiovCi0KLW5hbWVzcGFjZSBib29zdAot
ewotICAgbmFtZXNwYWNlIG1hdGgKLSAgIHsgLy8gTWF0aCBmdW5jdGlvbnMgKGluIHJvdWdobHkg
YWxwaGFiZXRpYyBvcmRlcikuCi0KLSAgIC8vIEJldGEgZnVuY3Rpb25zLgotICAgdGVtcGxhdGUg
PGNsYXNzIFJUMSwgY2xhc3MgUlQyPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxS
VDEsIFJUMj46OnR5cGUKLSAgICAgICAgIGJldGEoUlQxIGEsIFJUMiBiKTsgLy8gQmV0YSBmdW5j
dGlvbiAoMiBhcmd1bWVudHMpLgotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgUlQxLCBjbGFzcyBSVDIs
IGNsYXNzIEE+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFJUMSwgUlQyLCBBPjo6
dHlwZQotICAgICAgICAgYmV0YShSVDEgYSwgUlQyIGIsIEEgeCk7IC8vIEJldGEgZnVuY3Rpb24g
KDMgYXJndW1lbnRzKS4KLQotICAgdGVtcGxhdGUgPGNsYXNzIFJUMSwgY2xhc3MgUlQyLCBjbGFz
cyBSVDMsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQx
LCBSVDIsIFJUMz46OnR5cGUKLSAgICAgICAgIGJldGEoUlQxIGEsIFJUMiBiLCBSVDMgeCwgY29u
c3QgUG9saWN5JiBwb2wpOyAvLyBCZXRhIGZ1bmN0aW9uICgzIGFyZ3VtZW50cykuCi0KLSAgIHRl
bXBsYXRlIDxjbGFzcyBSVDEsIGNsYXNzIFJUMiwgY2xhc3MgUlQzPgotICAgdHlwZW5hbWUgdG9v
bHM6OnByb21vdGVfYXJnczxSVDEsIFJUMiwgUlQzPjo6dHlwZQotICAgICAgICAgYmV0YWMoUlQx
IGEsIFJUMiBiLCBSVDMgeCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBSVDEsIGNsYXNzIFJUMiwg
Y2xhc3MgUlQzLCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdz
PFJUMSwgUlQyLCBSVDM+Ojp0eXBlCi0gICAgICAgICBiZXRhYyhSVDEgYSwgUlQyIGIsIFJUMyB4
LCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBSVDEsIGNsYXNzIFJU
MiwgY2xhc3MgUlQzPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxSVDEsIFJUMiwg
UlQzPjo6dHlwZQotICAgICAgICAgaWJldGEoUlQxIGEsIFJUMiBiLCBSVDMgeCk7IC8vIEluY29t
cGxldGUgYmV0YSBmdW5jdGlvbi4KLQotICAgdGVtcGxhdGUgPGNsYXNzIFJUMSwgY2xhc3MgUlQy
LCBjbGFzcyBSVDMsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2Fy
Z3M8UlQxLCBSVDIsIFJUMz46OnR5cGUKLSAgICAgICAgIGliZXRhKFJUMSBhLCBSVDIgYiwgUlQz
IHgsIGNvbnN0IFBvbGljeSYgcG9sKTsgLy8gSW5jb21wbGV0ZSBiZXRhIGZ1bmN0aW9uLgotCi0g
ICB0ZW1wbGF0ZSA8Y2xhc3MgUlQxLCBjbGFzcyBSVDIsIGNsYXNzIFJUMz4KLSAgIHR5cGVuYW1l
IHRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQxLCBSVDIsIFJUMz46OnR5cGUKLSAgICAgICAgIGliZXRh
YyhSVDEgYSwgUlQyIGIsIFJUMyB4KTsgLy8gSW5jb21wbGV0ZSBiZXRhIGNvbXBsZW1lbnQgZnVu
Y3Rpb24uCi0KLSAgIHRlbXBsYXRlIDxjbGFzcyBSVDEsIGNsYXNzIFJUMiwgY2xhc3MgUlQzLCBj
bGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFJUMSwgUlQyLCBS
VDM+Ojp0eXBlCi0gICAgICAgICBpYmV0YWMoUlQxIGEsIFJUMiBiLCBSVDMgeCwgY29uc3QgUG9s
aWN5JiBwb2wpOyAvLyBJbmNvbXBsZXRlIGJldGEgY29tcGxlbWVudCBmdW5jdGlvbi4KLQotICAg
dGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0PgotICAgdHlw
ZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDIsIFQzLCBUND46OnR5cGUKLSAgICAgICAg
IGliZXRhX2ludihUMSBhLCBUMiBiLCBUMyBwLCBUNCogcHkpOwotCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMywgY2xhc3MgVDQsIGNsYXNzIFBvbGljeT4KLSAgIHR5
cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyLCBUMywgVDQ+Ojp0eXBlCi0gICAgICAg
ICBpYmV0YV9pbnYoVDEgYSwgVDIgYiwgVDMgcCwgVDQqIHB5LCBjb25zdCBQb2xpY3kmIHBvbCk7
Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBSVDEsIGNsYXNzIFJUMiwgY2xhc3MgUlQzPgotICAgdHlw
ZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxSVDEsIFJUMiwgUlQzPjo6dHlwZQotICAgICAgICAg
aWJldGFfaW52KFJUMSBhLCBSVDIgYiwgUlQzIHApOyAvLyBJbmNvbXBsZXRlIGJldGEgaW52ZXJz
ZSBmdW5jdGlvbi4KLQotICAgdGVtcGxhdGUgPGNsYXNzIFJUMSwgY2xhc3MgUlQyLCBjbGFzcyBS
VDMsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQxLCBS
VDIsIFJUMz46OnR5cGUKLSAgICAgICAgIGliZXRhX2ludihSVDEgYSwgUlQyIGIsIFJUMyBwLCBj
b25zdCBQb2xpY3kmKTsgLy8gSW5jb21wbGV0ZSBiZXRhIGludmVyc2UgZnVuY3Rpb24uCi0KLSAg
IHRlbXBsYXRlIDxjbGFzcyBSVDEsIGNsYXNzIFJUMiwgY2xhc3MgUlQzPgotICAgdHlwZW5hbWUg
dG9vbHM6OnByb21vdGVfYXJnczxSVDEsIFJUMiwgUlQzPjo6dHlwZQotICAgICAgICAgaWJldGFf
aW52YShSVDEgYSwgUlQyIGIsIFJUMyBwKTsgLy8gSW5jb21wbGV0ZSBiZXRhIGludmVyc2UgZnVu
Y3Rpb24uCi0KLSAgIHRlbXBsYXRlIDxjbGFzcyBSVDEsIGNsYXNzIFJUMiwgY2xhc3MgUlQzLCBj
bGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFJUMSwgUlQyLCBS
VDM+Ojp0eXBlCi0gICAgICAgICBpYmV0YV9pbnZhKFJUMSBhLCBSVDIgYiwgUlQzIHAsIGNvbnN0
IFBvbGljeSYpOyAvLyBJbmNvbXBsZXRlIGJldGEgaW52ZXJzZSBmdW5jdGlvbi4KLQotICAgdGVt
cGxhdGUgPGNsYXNzIFJUMSwgY2xhc3MgUlQyLCBjbGFzcyBSVDM+Ci0gICB0eXBlbmFtZSB0b29s
czo6cHJvbW90ZV9hcmdzPFJUMSwgUlQyLCBSVDM+Ojp0eXBlCi0gICAgICAgICBpYmV0YV9pbnZi
KFJUMSBhLCBSVDIgYiwgUlQzIHApOyAvLyBJbmNvbXBsZXRlIGJldGEgaW52ZXJzZSBmdW5jdGlv
bi4KLQotICAgdGVtcGxhdGUgPGNsYXNzIFJUMSwgY2xhc3MgUlQyLCBjbGFzcyBSVDMsIGNsYXNz
IFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQxLCBSVDIsIFJUMz46
OnR5cGUKLSAgICAgICAgIGliZXRhX2ludmIoUlQxIGEsIFJUMiBiLCBSVDMgcCwgY29uc3QgUG9s
aWN5Jik7IC8vIEluY29tcGxldGUgYmV0YSBpbnZlcnNlIGZ1bmN0aW9uLgotCi0gICB0ZW1wbGF0
ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMywgY2xhc3MgVDQ+Ci0gICB0eXBlbmFtZSB0
b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMiwgVDMsIFQ0Pjo6dHlwZQotICAgICAgICAgaWJldGFj
X2ludihUMSBhLCBUMiBiLCBUMyBxLCBUNCogcHkpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEs
IGNsYXNzIFQyLCBjbGFzcyBUMywgY2xhc3MgVDQsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1l
IHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyLCBUMywgVDQ+Ojp0eXBlCi0gICAgICAgICBpYmV0
YWNfaW52KFQxIGEsIFQyIGIsIFQzIHEsIFQ0KiBweSwgY29uc3QgUG9saWN5JiBwb2wpOwotCi0g
ICB0ZW1wbGF0ZSA8Y2xhc3MgUlQxLCBjbGFzcyBSVDIsIGNsYXNzIFJUMz4KLSAgIHR5cGVuYW1l
IHRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQxLCBSVDIsIFJUMz46OnR5cGUKLSAgICAgICAgIGliZXRh
Y19pbnYoUlQxIGEsIFJUMiBiLCBSVDMgcSk7IC8vIEluY29tcGxldGUgYmV0YSBjb21wbGVtZW50
IGludmVyc2UgZnVuY3Rpb24uCi0KLSAgIHRlbXBsYXRlIDxjbGFzcyBSVDEsIGNsYXNzIFJUMiwg
Y2xhc3MgUlQzLCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdz
PFJUMSwgUlQyLCBSVDM+Ojp0eXBlCi0gICAgICAgICBpYmV0YWNfaW52KFJUMSBhLCBSVDIgYiwg
UlQzIHEsIGNvbnN0IFBvbGljeSYpOyAvLyBJbmNvbXBsZXRlIGJldGEgY29tcGxlbWVudCBpbnZl
cnNlIGZ1bmN0aW9uLgotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgUlQxLCBjbGFzcyBSVDIsIGNsYXNz
IFJUMz4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQxLCBSVDIsIFJUMz46OnR5
cGUKLSAgICAgICAgIGliZXRhY19pbnZhKFJUMSBhLCBSVDIgYiwgUlQzIHEpOyAvLyBJbmNvbXBs
ZXRlIGJldGEgY29tcGxlbWVudCBpbnZlcnNlIGZ1bmN0aW9uLgotCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgUlQxLCBjbGFzcyBSVDIsIGNsYXNzIFJUMywgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUg
dG9vbHM6OnByb21vdGVfYXJnczxSVDEsIFJUMiwgUlQzPjo6dHlwZQotICAgICAgICAgaWJldGFj
X2ludmEoUlQxIGEsIFJUMiBiLCBSVDMgcSwgY29uc3QgUG9saWN5Jik7IC8vIEluY29tcGxldGUg
YmV0YSBjb21wbGVtZW50IGludmVyc2UgZnVuY3Rpb24uCi0KLSAgIHRlbXBsYXRlIDxjbGFzcyBS
VDEsIGNsYXNzIFJUMiwgY2xhc3MgUlQzPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJn
czxSVDEsIFJUMiwgUlQzPjo6dHlwZQotICAgICAgICAgaWJldGFjX2ludmIoUlQxIGEsIFJUMiBi
LCBSVDMgcSk7IC8vIEluY29tcGxldGUgYmV0YSBjb21wbGVtZW50IGludmVyc2UgZnVuY3Rpb24u
Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBSVDEsIGNsYXNzIFJUMiwgY2xhc3MgUlQzLCBjbGFzcyBQ
b2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFJUMSwgUlQyLCBSVDM+Ojp0
eXBlCi0gICAgICAgICBpYmV0YWNfaW52YihSVDEgYSwgUlQyIGIsIFJUMyBxLCBjb25zdCBQb2xp
Y3kmKTsgLy8gSW5jb21wbGV0ZSBiZXRhIGNvbXBsZW1lbnQgaW52ZXJzZSBmdW5jdGlvbi4KLQot
ICAgdGVtcGxhdGUgPGNsYXNzIFJUMSwgY2xhc3MgUlQyLCBjbGFzcyBSVDM+Ci0gICB0eXBlbmFt
ZSB0b29sczo6cHJvbW90ZV9hcmdzPFJUMSwgUlQyLCBSVDM+Ojp0eXBlCi0gICAgICAgICBpYmV0
YV9kZXJpdmF0aXZlKFJUMSBhLCBSVDIgYiwgUlQzIHgpOyAgLy8gZGVyaXZhdGl2ZSBvZiBpbmNv
bXBsZXRlIGJldGEKLQotICAgdGVtcGxhdGUgPGNsYXNzIFJUMSwgY2xhc3MgUlQyLCBjbGFzcyBS
VDMsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQxLCBS
VDIsIFJUMz46OnR5cGUKLSAgICAgICAgIGliZXRhX2Rlcml2YXRpdmUoUlQxIGEsIFJUMiBiLCBS
VDMgeCwgY29uc3QgUG9saWN5JiBwb2wpOyAgLy8gZGVyaXZhdGl2ZSBvZiBpbmNvbXBsZXRlIGJl
dGEKLQotICAgLy8gQmlub21pYWw6Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5
PgotICAgVCBiaW5vbWlhbF9jb2VmZmljaWVudCh1bnNpZ25lZCBuLCB1bnNpZ25lZCBrLCBjb25z
dCBQb2xpY3kmIHBvbCk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIFQgYmlub21pYWxfY29l
ZmZpY2llbnQodW5zaWduZWQgbiwgdW5zaWduZWQgayk7Ci0KLSAgIC8vIGVyZiAmIGVyZmMgZXJy
b3IgZnVuY3Rpb25zLgotICAgdGVtcGxhdGUgPGNsYXNzIFJUPiAvLyBFcnJvciBmdW5jdGlvbi4K
LSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQ+Ojp0eXBlIGVyZihSVCB6KTsKLSAg
IHRlbXBsYXRlIDxjbGFzcyBSVCwgY2xhc3MgUG9saWN5PiAvLyBFcnJvciBmdW5jdGlvbi4KLSAg
IHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQ+Ojp0eXBlIGVyZihSVCB6LCBjb25zdCBQ
b2xpY3kmKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFJUPi8vIEVycm9yIGZ1bmN0aW9uIGNvbXBs
ZW1lbnQuCi0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFJUPjo6dHlwZSBlcmZjKFJU
IHopOwotICAgdGVtcGxhdGUgPGNsYXNzIFJULCBjbGFzcyBQb2xpY3k+Ly8gRXJyb3IgZnVuY3Rp
b24gY29tcGxlbWVudC4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQ+Ojp0eXBl
IGVyZmMoUlQgeiwgY29uc3QgUG9saWN5Jik7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBSVD4vLyBF
cnJvciBmdW5jdGlvbiBpbnZlcnNlLgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxS
VD46OnR5cGUgZXJmX2ludihSVCB6KTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBSVCwgY2xhc3MgUG9s
aWN5Pi8vIEVycm9yIGZ1bmN0aW9uIGludmVyc2UuCi0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90
ZV9hcmdzPFJUPjo6dHlwZSBlcmZfaW52KFJUIHosIGNvbnN0IFBvbGljeSYgcG9sKTsKLQotICAg
dGVtcGxhdGUgPGNsYXNzIFJUPi8vIEVycm9yIGZ1bmN0aW9uIGNvbXBsZW1lbnQgaW52ZXJzZS4K
LSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQ+Ojp0eXBlIGVyZmNfaW52KFJUIHop
OwotICAgdGVtcGxhdGUgPGNsYXNzIFJULCBjbGFzcyBQb2xpY3k+Ly8gRXJyb3IgZnVuY3Rpb24g
Y29tcGxlbWVudCBpbnZlcnNlLgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxSVD46
OnR5cGUgZXJmY19pbnYoUlQgeiwgY29uc3QgUG9saWN5JiBwb2wpOwotCi0gICAvLyBQb2x5bm9t
aWFsczoKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFQzPgotICAgdHlw
ZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDIsIFQzPjo6dHlwZQotICAgICAgICAgbGVn
ZW5kcmVfbmV4dCh1bnNpZ25lZCBsLCBUMSB4LCBUMiBQbCwgVDMgUGxtMSk7Ci0KLSAgIHRlbXBs
YXRlIDxjbGFzcyBUPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZQot
ICAgICAgICAgbGVnZW5kcmVfcChpbnQgbCwgVCB4KTsKLSNpZiAhQk9PU1RfV09SS0FST1VORChC
T09TVF9NU1ZDLCA8PSAxMzEwKQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFBvbGljeT4K
LSAgIHR5cGVuYW1lIGJvb3N0OjplbmFibGVfaWZfYzxwb2xpY2llczo6aXNfcG9saWN5PFBvbGlj
eT46OnZhbHVlLCB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlPjo6dHlwZQot
ICAgICAgICAgbGVnZW5kcmVfcChpbnQgbCwgVCB4LCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0jZW5k
aWYKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJn
czxUPjo6dHlwZQotICAgICAgICAgbGVnZW5kcmVfcSh1bnNpZ25lZCBsLCBUIHgpOwotI2lmICFC
T09TVF9XT1JLQVJPVU5EKEJPT1NUX01TVkMsIDw9IDEzMTApCi0gICB0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgYm9vc3Q6OmVuYWJsZV9pZl9jPHBvbGljaWVz
Ojppc19wb2xpY3k8UG9saWN5Pjo6dmFsdWUsIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8
VD46OnR5cGU+Ojp0eXBlCi0gICAgICAgICBsZWdlbmRyZV9xKHVuc2lnbmVkIGwsIFQgeCwgY29u
c3QgUG9saWN5JiBwb2wpOwotI2VuZGlmCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQy
LCBjbGFzcyBUMz4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyLCBUMz46
OnR5cGUKLSAgICAgICAgIGxlZ2VuZHJlX25leHQodW5zaWduZWQgbCwgdW5zaWduZWQgbSwgVDEg
eCwgVDIgUGwsIFQzIFBsbTEpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIHR5cGVuYW1l
IHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUKLSAgICAgICAgIGxlZ2VuZHJlX3AoaW50IGws
IGludCBtLCBUIHgpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAg
dHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZQotICAgICAgICAgbGVnZW5kcmVf
cChpbnQgbCwgaW50IG0sIFQgeCwgY29uc3QgUG9saWN5JiBwb2wpOwotCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMz4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3Rl
X2FyZ3M8VDEsIFQyLCBUMz46OnR5cGUKLSAgICAgICAgIGxhZ3VlcnJlX25leHQodW5zaWduZWQg
biwgVDEgeCwgVDIgTG4sIFQzIExubTEpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNz
IFQyLCBjbGFzcyBUMz4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyLCBU
Mz46OnR5cGUKLSAgICAgIGxhZ3VlcnJlX25leHQodW5zaWduZWQgbiwgdW5zaWduZWQgbCwgVDEg
eCwgVDIgUGwsIFQzIFBsbTEpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIHR5cGVuYW1l
IHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUKLSAgICAgIGxhZ3VlcnJlKHVuc2lnbmVkIG4s
IFQgeCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFt
ZSB0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlCi0gICAgICBsYWd1ZXJyZSh1bnNpZ25lZCBu
LCB1bnNpZ25lZCBtLCBUIHgsIGNvbnN0IFBvbGljeSYgcG9sKTsKLQotICAgdGVtcGxhdGUgPGNs
YXNzIFQxLCBjbGFzcyBUMj4KLSAgIHN0cnVjdCBsYWd1ZXJyZV9yZXN1bHQKLSAgIHsKLSAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgbXBsOjppZl88Ci0gICAgICAgICBwb2xpY2llczo6aXNfcG9saWN5
PFQyPiwKLSAgICAgICAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDE+Ojp0eXBlLAot
ICAgICAgICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUMj46OnR5cGUKLSAgICAgID46
OnR5cGUgdHlwZTsKLSAgIH07Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+Ci0g
ICB0eXBlbmFtZSBsYWd1ZXJyZV9yZXN1bHQ8VDEsIFQyPjo6dHlwZQotICAgICAgbGFndWVycmUo
dW5zaWduZWQgbiwgVDEgbSwgVDIgeCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgdHlw
ZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZQotICAgICAgaGVybWl0ZSh1bnNpZ25l
ZCBuLCBUIHgpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgdHlw
ZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZQotICAgICAgaGVybWl0ZSh1bnNpZ25l
ZCBuLCBUIHgsIGNvbnN0IFBvbGljeSYgcG9sKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBj
bGFzcyBUMiwgY2xhc3MgVDM+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBU
MiwgVDM+Ojp0eXBlCi0gICAgICBoZXJtaXRlX25leHQodW5zaWduZWQgbiwgVDEgeCwgVDIgSG4s
IFQzIEhubTEpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgotICAgc3RkOjpj
b21wbGV4PHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZT4KLSAgICAg
ICAgIHNwaGVyaWNhbF9oYXJtb25pYyh1bnNpZ25lZCBuLCBpbnQgbSwgVDEgdGhldGEsIFQyIHBo
aSk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFBvbGljeT4KLSAg
IHN0ZDo6Y29tcGxleDx0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMj46OnR5cGU+
Ci0gICAgICBzcGhlcmljYWxfaGFybW9uaWModW5zaWduZWQgbiwgaW50IG0sIFQxIHRoZXRhLCBU
MiBwaGksIGNvbnN0IFBvbGljeSYgcG9sKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFz
cyBUMj4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZQotICAg
ICAgICAgc3BoZXJpY2FsX2hhcm1vbmljX3IodW5zaWduZWQgbiwgaW50IG0sIFQxIHRoZXRhLCBU
MiBwaGkpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBQb2xpY3k+
Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMj46OnR5cGUKLSAgICAgIHNw
aGVyaWNhbF9oYXJtb25pY19yKHVuc2lnbmVkIG4sIGludCBtLCBUMSB0aGV0YSwgVDIgcGhpLCBj
b25zdCBQb2xpY3kmIHBvbCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+Ci0g
ICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMj46OnR5cGUKLSAgICAgICAgIHNw
aGVyaWNhbF9oYXJtb25pY19pKHVuc2lnbmVkIG4sIGludCBtLCBUMSB0aGV0YSwgVDIgcGhpKTsK
LQotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgUG9saWN5PgotICAgdHlw
ZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDI+Ojp0eXBlCi0gICAgICBzcGhlcmljYWxf
aGFybW9uaWNfaSh1bnNpZ25lZCBuLCBpbnQgbSwgVDEgdGhldGEsIFQyIHBoaSwgY29uc3QgUG9s
aWN5JiBwb2wpOwotCi0gICAvLyBFbGxpcHRpYyBpbnRlZ3JhbHM6Ci0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMz4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2Fy
Z3M8VDEsIFQyLCBUMz46OnR5cGUKLSAgICAgICAgIGVsbGludF9yZihUMSB4LCBUMiB5LCBUMyB6
KTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFBv
bGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyLCBUMz46OnR5cGUK
LSAgICAgICAgIGVsbGludF9yZihUMSB4LCBUMiB5LCBUMyB6LCBjb25zdCBQb2xpY3kmIHBvbCk7
Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFQzPgotICAgdHlwZW5h
bWUgdG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDIsIFQzPjo6dHlwZQotICAgICAgICAgZWxsaW50
X3JkKFQxIHgsIFQyIHksIFQzIHopOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQy
LCBjbGFzcyBUMywgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJn
czxUMSwgVDIsIFQzPjo6dHlwZQotICAgICAgICAgZWxsaW50X3JkKFQxIHgsIFQyIHksIFQzIHos
IGNvbnN0IFBvbGljeSYgcG9sKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4K
LSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZQotICAgICAgICAg
ZWxsaW50X3JjKFQxIHgsIFQyIHkpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQy
LCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMj46
OnR5cGUKLSAgICAgICAgIGVsbGludF9yYyhUMSB4LCBUMiB5LCBjb25zdCBQb2xpY3kmIHBvbCk7
Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFQzLCBjbGFzcyBUND4K
LSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyLCBUMywgVDQ+Ojp0eXBlCi0g
ICAgICAgICBlbGxpbnRfcmooVDEgeCwgVDIgeSwgVDMgeiwgVDQgcCk7Ci0KLSAgIHRlbXBsYXRl
IDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFQzLCBjbGFzcyBUNCwgY2xhc3MgUG9saWN5Pgot
ICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDIsIFQzLCBUND46OnR5cGUKLSAg
ICAgICAgIGVsbGludF9yaihUMSB4LCBUMiB5LCBUMyB6LCBUNCBwLCBjb25zdCBQb2xpY3kmIHBv
bCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFQzPgotICAgdHlw
ZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDIsIFQzPjo6dHlwZQotICAgICAgZWxsaW50
X3JnKFQxIHgsIFQyIHksIFQzIHopOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQy
LCBjbGFzcyBUMywgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJn
czxUMSwgVDIsIFQzPjo6dHlwZQotICAgICAgZWxsaW50X3JnKFQxIHgsIFQyIHksIFQzIHosIGNv
bnN0IFBvbGljeSYgcG9sKTsKLQotICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICB0eXBlbmFt
ZSB0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIGVsbGludF8yKFQgayk7Ci0KLSAgIHRlbXBs
YXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdz
PFQxLCBUMj46OnR5cGUgZWxsaW50XzIoVDEgaywgVDIgcGhpKTsKLQotICAgdGVtcGxhdGUgPGNs
YXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21v
dGVfYXJnczxUMSwgVDI+Ojp0eXBlIGVsbGludF8yKFQxIGssIFQyIHBoaSwgY29uc3QgUG9saWN5
JiBwb2wpOwotCi0gICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgIHR5cGVuYW1lIHRvb2xzOjpw
cm9tb3RlX2FyZ3M8VD46OnR5cGUgZWxsaW50XzEoVCBrKTsKLQotICAgdGVtcGxhdGUgPGNsYXNz
IFQxLCBjbGFzcyBUMj4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6
dHlwZSBlbGxpbnRfMShUMSBrLCBUMiBwaGkpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNs
YXNzIFQyLCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQx
LCBUMj46OnR5cGUgZWxsaW50XzEoVDEgaywgVDIgcGhpLCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0K
LSAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJn
czxUPjo6dHlwZSBlbGxpbnRfZChUIGspOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNz
IFQyPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDI+Ojp0eXBlIGVsbGlu
dF9kKFQxIGssIFQyIHBoaSk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNs
YXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlw
ZSBlbGxpbnRfZChUMSBrLCBUMiBwaGksIGNvbnN0IFBvbGljeSYgcG9sKTsKLQotICAgdGVtcGxh
dGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8
VDEsIFQyPjo6dHlwZSBqYWNvYmlfemV0YShUMSBrLCBUMiBwaGkpOwotCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJv
bW90ZV9hcmdzPFQxLCBUMj46OnR5cGUgamFjb2JpX3pldGEoVDEgaywgVDIgcGhpLCBjb25zdCBQ
b2xpY3kmIHBvbCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+Ci0gICB0eXBl
bmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMj46OnR5cGUgaGV1bWFuX2xhbWJkYShUMSBr
LCBUMiBwaGkpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBQb2xp
Y3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMj46OnR5cGUgaGV1bWFu
X2xhbWJkYShUMSBrLCBUMiBwaGksIGNvbnN0IFBvbGljeSYgcG9sKTsKLQotICAgbmFtZXNwYWNl
IGRldGFpbHsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzIFY+Ci0gICBz
dHJ1Y3QgZWxsaW50XzNfcmVzdWx0Ci0gICB7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIG1wbDo6
aWZfPAotICAgICAgICAgcG9saWNpZXM6OmlzX3BvbGljeTxWPiwKLSAgICAgICAgIHR5cGVuYW1l
IHRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46OnR5cGUsCi0gICAgICAgICB0eXBlbmFtZSB0b29s
czo6cHJvbW90ZV9hcmdzPFQsIFUsIFY+Ojp0eXBlCi0gICAgICA+Ojp0eXBlIHR5cGU7Ci0gICB9
OwotCi0gICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEs
IGNsYXNzIFQyLCBjbGFzcyBUMz4KLSAgIHR5cGVuYW1lIGRldGFpbDo6ZWxsaW50XzNfcmVzdWx0
PFQxLCBUMiwgVDM+Ojp0eXBlIGVsbGludF8zKFQxIGssIFQyIHYsIFQzIHBoaSk7Ci0KLSAgIHRl
bXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFQzLCBjbGFzcyBQb2xpY3k+Ci0gICB0
eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMiwgVDM+Ojp0eXBlIGVsbGludF8zKFQx
IGssIFQyIHYsIFQzIHBoaSwgY29uc3QgUG9saWN5JiBwb2wpOwotCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVDEsIGNsYXNzIFQyPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDI+
Ojp0eXBlIGVsbGludF8zKFQxIGssIFQyIHYpOwotCi0gICAvLyBGYWN0b3JpYWwgZnVuY3Rpb25z
LgotICAgLy8gTm90ZTogbm90IGZvciBpbnRlZ3JhbCB0eXBlcywgYXQgcHJlc2VudC4KLSAgIHRl
bXBsYXRlIDxjbGFzcyBSVD4KLSAgIHN0cnVjdCBtYXhfZmFjdG9yaWFsOwotICAgdGVtcGxhdGUg
PGNsYXNzIFJUPgotICAgUlQgZmFjdG9yaWFsKHVuc2lnbmVkIGludCk7Ci0gICB0ZW1wbGF0ZSA8
Y2xhc3MgUlQsIGNsYXNzIFBvbGljeT4KLSAgIFJUIGZhY3RvcmlhbCh1bnNpZ25lZCBpbnQsIGNv
bnN0IFBvbGljeSYgcG9sKTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBSVD4KLSAgIFJUIHVuY2hlY2tl
ZF9mYWN0b3JpYWwodW5zaWduZWQgaW50IEJPT1NUX01BVEhfQVBQRU5EX0VYUExJQ0lUX1RFTVBM
QVRFX1RZUEUoUlQpKTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBSVD4KLSAgIFJUIGRvdWJsZV9mYWN0
b3JpYWwodW5zaWduZWQgaSk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgUlQsIGNsYXNzIFBvbGljeT4K
LSAgIFJUIGRvdWJsZV9mYWN0b3JpYWwodW5zaWduZWQgaSwgY29uc3QgUG9saWN5JiBwb2wpOwot
Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgUlQ+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdz
PFJUPjo6dHlwZSBmYWxsaW5nX2ZhY3RvcmlhbChSVCB4LCB1bnNpZ25lZCBuKTsKLQotICAgdGVt
cGxhdGUgPGNsYXNzIFJULCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90
ZV9hcmdzPFJUPjo6dHlwZSBmYWxsaW5nX2ZhY3RvcmlhbChSVCB4LCB1bnNpZ25lZCBuLCBjb25z
dCBQb2xpY3kmIHBvbCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBSVD4KLSAgIHR5cGVuYW1lIHRv
b2xzOjpwcm9tb3RlX2FyZ3M8UlQ+Ojp0eXBlIHJpc2luZ19mYWN0b3JpYWwoUlQgeCwgaW50IG4p
OwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgUlQsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRv
b2xzOjpwcm9tb3RlX2FyZ3M8UlQ+Ojp0eXBlIHJpc2luZ19mYWN0b3JpYWwoUlQgeCwgaW50IG4s
IGNvbnN0IFBvbGljeSYgcG9sKTsKLQotICAgLy8gR2FtbWEgZnVuY3Rpb25zLgotICAgdGVtcGxh
dGUgPGNsYXNzIFJUPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxSVD46OnR5cGUg
dGdhbW1hKFJUIHopOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgUlQ+Ci0gICB0eXBlbmFtZSB0b29s
czo6cHJvbW90ZV9hcmdzPFJUPjo6dHlwZSB0Z2FtbWExcG0xKFJUIHopOwotCi0gICB0ZW1wbGF0
ZSA8Y2xhc3MgUlQsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2Fy
Z3M8UlQ+Ojp0eXBlIHRnYW1tYTFwbTEoUlQgeiwgY29uc3QgUG9saWN5JiBwb2wpOwotCi0gICB0
ZW1wbGF0ZSA8Y2xhc3MgUlQxLCBjbGFzcyBSVDI+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90
ZV9hcmdzPFJUMSwgUlQyPjo6dHlwZSB0Z2FtbWEoUlQxIGEsIFJUMiB6KTsKLQotICAgdGVtcGxh
dGUgPGNsYXNzIFJUMSwgY2xhc3MgUlQyLCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29s
czo6cHJvbW90ZV9hcmdzPFJUMSwgUlQyPjo6dHlwZSB0Z2FtbWEoUlQxIGEsIFJUMiB6LCBjb25z
dCBQb2xpY3kmIHBvbCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBSVD4KLSAgIHR5cGVuYW1lIHRv
b2xzOjpwcm9tb3RlX2FyZ3M8UlQ+Ojp0eXBlIGxnYW1tYShSVCB6LCBpbnQqIHNpZ24pOwotCi0g
ICB0ZW1wbGF0ZSA8Y2xhc3MgUlQsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpw
cm9tb3RlX2FyZ3M8UlQ+Ojp0eXBlIGxnYW1tYShSVCB6LCBpbnQqIHNpZ24sIGNvbnN0IFBvbGlj
eSYgcG9sKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFJUPgotICAgdHlwZW5hbWUgdG9vbHM6OnBy
b21vdGVfYXJnczxSVD46OnR5cGUgbGdhbW1hKFJUIHgpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3Mg
UlQsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQ+Ojp0
eXBlIGxnYW1tYShSVCB4LCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFz
cyBSVDEsIGNsYXNzIFJUMj4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQxLCBS
VDI+Ojp0eXBlIHRnYW1tYV9sb3dlcihSVDEgYSwgUlQyIHopOwotCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgUlQxLCBjbGFzcyBSVDIsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9t
b3RlX2FyZ3M8UlQxLCBSVDI+Ojp0eXBlIHRnYW1tYV9sb3dlcihSVDEgYSwgUlQyIHosIGNvbnN0
IFBvbGljeSYpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgUlQxLCBjbGFzcyBSVDI+Ci0gICB0eXBl
bmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFJUMSwgUlQyPjo6dHlwZSBnYW1tYV9xKFJUMSBhLCBS
VDIgeik7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBSVDEsIGNsYXNzIFJUMiwgY2xhc3MgUG9saWN5
PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxSVDEsIFJUMj46OnR5cGUgZ2FtbWFf
cShSVDEgYSwgUlQyIHosIGNvbnN0IFBvbGljeSYpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgUlQx
LCBjbGFzcyBSVDI+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFJUMSwgUlQyPjo6
dHlwZSBnYW1tYV9wKFJUMSBhLCBSVDIgeik7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBSVDEsIGNs
YXNzIFJUMiwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxS
VDEsIFJUMj46OnR5cGUgZ2FtbWFfcChSVDEgYSwgUlQyIHosIGNvbnN0IFBvbGljeSYpOwotCi0g
ICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21v
dGVfYXJnczxUMSwgVDI+Ojp0eXBlIHRnYW1tYV9kZWx0YV9yYXRpbyhUMSB6LCBUMiBkZWx0YSk7
Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFBvbGljeT4KLSAgIHR5
cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZSB0Z2FtbWFfZGVsdGFfcmF0
aW8oVDEgeiwgVDIgZGVsdGEsIGNvbnN0IFBvbGljeSYpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3Mg
VDEsIGNsYXNzIFQyPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDI+Ojp0
eXBlIHRnYW1tYV9yYXRpbyhUMSBhLCBUMiBiKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBj
bGFzcyBUMiwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxU
MSwgVDI+Ojp0eXBlIHRnYW1tYV9yYXRpbyhUMSBhLCBUMiBiLCBjb25zdCBQb2xpY3kmKTsKLQot
ICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9t
b3RlX2FyZ3M8VDEsIFQyPjo6dHlwZSBnYW1tYV9wX2Rlcml2YXRpdmUoVDEgYSwgVDIgeCk7Ci0K
LSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVu
YW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZSBnYW1tYV9wX2Rlcml2YXRpdmUo
VDEgYSwgVDIgeCwgY29uc3QgUG9saWN5Jik7Ci0KLSAgIC8vIGdhbW1hIGludmVyc2UuCi0gICB0
ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVf
YXJnczxUMSwgVDI+Ojp0eXBlIGdhbW1hX3BfaW52KFQxIGEsIFQyIHApOwotCi0gICB0ZW1wbGF0
ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6
cHJvbW90ZV9hcmdzPFQxLCBUMj46OnR5cGUgZ2FtbWFfcF9pbnZhKFQxIGEsIFQyIHAsIGNvbnN0
IFBvbGljeSYpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgotICAgdHlwZW5h
bWUgdG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDI+Ojp0eXBlIGdhbW1hX3BfaW52YShUMSBhLCBU
MiBwKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgUG9saWN5Pgot
ICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDI+Ojp0eXBlIGdhbW1hX3BfaW52
KFQxIGEsIFQyIHAsIGNvbnN0IFBvbGljeSYpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNs
YXNzIFQyPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDI+Ojp0eXBlIGdh
bW1hX3FfaW52KFQxIGEsIFQyIHEpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQy
LCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMj46
OnR5cGUgZ2FtbWFfcV9pbnYoVDEgYSwgVDIgcSwgY29uc3QgUG9saWN5Jik7Ci0KLSAgIHRlbXBs
YXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdz
PFQxLCBUMj46OnR5cGUgZ2FtbWFfcV9pbnZhKFQxIGEsIFQyIHEpOwotCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJv
bW90ZV9hcmdzPFQxLCBUMj46OnR5cGUgZ2FtbWFfcV9pbnZhKFQxIGEsIFQyIHEsIGNvbnN0IFBv
bGljeSYpOwotCi0gICAvLyBkaWdhbW1hOgotICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICB0eXBl
bmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIGRpZ2FtbWEoVCB4KTsKLQotICAgdGVt
cGxhdGUgPGNsYXNzIFQsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3Rl
X2FyZ3M8VD46OnR5cGUgZGlnYW1tYShUIHgsIGNvbnN0IFBvbGljeSYpOwotCi0gICAvLyB0cmln
YW1tYToKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVf
YXJnczxUPjo6dHlwZSB0cmlnYW1tYShUIHgpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgUG9saWN5PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSB0cmln
YW1tYShUIHgsIGNvbnN0IFBvbGljeSYpOwotCi0gICAvLyBwb2x5Z2FtbWE6Ci0gICB0ZW1wbGF0
ZSA8Y2xhc3MgVD4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgcG9s
eWdhbW1hKGludCBuLCBUIHgpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5
PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSBwb2x5Z2FtbWEoaW50
IG4sIFQgeCwgY29uc3QgUG9saWN5Jik7Ci0KLSAgIC8vIEh5cG90ZW51c2UgZnVuY3Rpb24gc3Fy
dCh4IF4gMiArIHkgXiAyKS4KLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+Ci0gICB0
eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMj46OnR5cGUKLSAgICAgICAgIGh5cG90
KFQxIHgsIFQyIHkpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBQ
b2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMj46OnR5cGUKLSAg
ICAgICAgIGh5cG90KFQxIHgsIFQyIHksIGNvbnN0IFBvbGljeSYpOwotCi0gICAvLyBjYnJ0IC0g
Y3ViZSByb290LgotICAgdGVtcGxhdGUgPGNsYXNzIFJUPgotICAgdHlwZW5hbWUgdG9vbHM6OnBy
b21vdGVfYXJnczxSVD46OnR5cGUgY2JydChSVCB6KTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFJU
LCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFJUPjo6dHlw
ZSBjYnJ0KFJUIHosIGNvbnN0IFBvbGljeSYpOwotCi0gICAvLyBsb2cxcCBpcyBsb2coeCArIDEp
Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8
VD46OnR5cGUgbG9nMXAoVCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBQb2xpY3k+
Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIGxvZzFwKFQsIGNvbnN0
IFBvbGljeSYpOwotCi0gICAvLyBsb2cxcG14IGlzIGxvZyh4ICsgMSkgLSB4Ci0gICB0ZW1wbGF0
ZSA8Y2xhc3MgVD4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgbG9n
MXBteChUKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVu
YW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgbG9nMXBteChULCBjb25zdCBQb2xpY3km
KTsKLQotICAgLy8gRXhwICh4KSBtaW51cyAxIGZ1bmN0aW9ucy4KLSAgIHRlbXBsYXRlIDxjbGFz
cyBUPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSBleHBtMShUKTsK
LQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xz
Ojpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgZXhwbTEoVCwgY29uc3QgUG9saWN5Jik7Ci0KLSAgIC8v
IFBvd2VyIC0gMQotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KLSAgIHR5cGVuYW1l
IHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZQotICAgICAgICAgcG93bTEoY29uc3Qg
VDEgYSwgY29uc3QgVDIgeik7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNs
YXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlw
ZQotICAgICAgICAgcG93bTEoY29uc3QgVDEgYSwgY29uc3QgVDIgeiwgY29uc3QgUG9saWN5Jik7
Ci0KLSAgIC8vIHNxcnQoMSt4KSAtIDEKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgdHlwZW5h
bWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSBzcXJ0MXBtMShjb25zdCBUJiB2YWwpOwot
Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgdG9vbHM6
OnByb21vdGVfYXJnczxUPjo6dHlwZSBzcXJ0MXBtMShjb25zdCBUJiB2YWwsIGNvbnN0IFBvbGlj
eSYpOwotCi0gICAvLyBzaW51cyBjYXJkaW5hbHM6Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAg
IHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgc2luY19waShUIHgpOwotCi0g
ICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgdG9vbHM6OnBy
b21vdGVfYXJnczxUPjo6dHlwZSBzaW5jX3BpKFQgeCwgY29uc3QgUG9saWN5Jik7Ci0KLSAgIHRl
bXBsYXRlIDxjbGFzcyBUPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlw
ZSBzaW5oY19waShUIHgpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5Pgot
ICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSBzaW5oY19waShUIHgsIGNv
bnN0IFBvbGljeSYpOwotCi0gICAvLyBpbnZlcnNlIGh5cGVyYm9saWNzOgotICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgYXNp
bmgoVCB4KTsKLQotICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MgUG9saWN5PgotICAgdHlw
ZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSBhc2luaChUIHgsIGNvbnN0IFBvbGlj
eSYpOwotCi0gICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21v
dGVfYXJnczxUPjo6dHlwZSBhY29zaChUIHgpOwotCi0gICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBj
bGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIGFj
b3NoKFQgeCwgY29uc3QgUG9saWN5Jik7Ci0KLSAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICB0
eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIGF0YW5oKFQgeCk7Ci0KLSAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9t
b3RlX2FyZ3M8VD46OnR5cGUgYXRhbmgoVCB4LCBjb25zdCBQb2xpY3kmKTsKLQotICAgbmFtZXNw
YWNlIGRldGFpbHsKLQotICAgICAgdHlwZWRlZiBtcGw6OmludF88MD4gYmVzc2VsX25vX2ludF90
YWc7ICAgICAgLy8gTm8gaW50ZWdlciBvcHRpbWlzYXRpb24gcG9zc2libGUuCi0gICAgICB0eXBl
ZGVmIG1wbDo6aW50XzwxPiBiZXNzZWxfbWF5YmVfaW50X3RhZzsgICAvLyBNYXliZSBpbnRlZ2Vy
IG9wdGltaXNhdGlvbi4KLSAgICAgIHR5cGVkZWYgbXBsOjppbnRfPDI+IGJlc3NlbF9pbnRfdGFn
OyAgICAgICAgIC8vIERlZmluaXRlIGludGVnZXIgb3B0aW1pc3RhaW9uLgotCi0gICAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBQb2xpY3k+Ci0gICAgICBzdHJ1Y3QgYmVz
c2VsX3RyYWl0cwotICAgICAgewotICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6OmlmXzwK
LSAgICAgICAgICAgIGlzX2ludGVncmFsPFQxPiwKLSAgICAgICAgICAgIHR5cGVuYW1lIHRvb2xz
Ojpwcm9tb3RlX2FyZ3M8VDI+Ojp0eXBlLAotICAgICAgICAgICAgdHlwZW5hbWUgdG9vbHM6OnBy
b21vdGVfYXJnczxUMSwgVDI+Ojp0eXBlCi0gICAgICAgICA+Ojp0eXBlIHJlc3VsdF90eXBlOwot
Ci0gICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHBvbGljaWVzOjpwcmVjaXNpb248cmVzdWx0X3R5
cGUsIFBvbGljeT46OnR5cGUgcHJlY2lzaW9uX3R5cGU7Ci0KLSAgICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgbXBsOjppZl88Ci0gICAgICAgICAgICBtcGw6Om9yXzwKLSAgICAgICAgICAgICAgIG1w
bDo6bGVzc19lcXVhbDxwcmVjaXNpb25fdHlwZSwgbXBsOjppbnRfPDA+ID4sCi0gICAgICAgICAg
ICAgICBtcGw6OmdyZWF0ZXI8cHJlY2lzaW9uX3R5cGUsIG1wbDo6aW50Xzw2ND4gPiA+LAotICAg
ICAgICAgICAgYmVzc2VsX25vX2ludF90YWcsCi0gICAgICAgICAgICB0eXBlbmFtZSBtcGw6Omlm
XzwKLSAgICAgICAgICAgICAgIGlzX2ludGVncmFsPFQxPiwKLSAgICAgICAgICAgICAgIGJlc3Nl
bF9pbnRfdGFnLAotICAgICAgICAgICAgICAgYmVzc2VsX21heWJlX2ludF90YWcKLSAgICAgICAg
ICAgID46OnR5cGUKLSAgICAgICAgID46OnR5cGUgb3B0aW1pc2F0aW9uX3RhZzsKLSAgICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgbXBsOjppZl88Ci0gICAgICAgICAgICBtcGw6Om9yXzwKLSAgICAg
ICAgICAgICAgIG1wbDo6bGVzc19lcXVhbDxwcmVjaXNpb25fdHlwZSwgbXBsOjppbnRfPDA+ID4s
Ci0gICAgICAgICAgICAgICBtcGw6OmdyZWF0ZXI8cHJlY2lzaW9uX3R5cGUsIG1wbDo6aW50Xzwx
MTM+ID4gPiwKLSAgICAgICAgICAgIGJlc3NlbF9ub19pbnRfdGFnLAotICAgICAgICAgICAgdHlw
ZW5hbWUgbXBsOjppZl88Ci0gICAgICAgICAgICAgICBpc19pbnRlZ3JhbDxUMT4sCi0gICAgICAg
ICAgICAgICBiZXNzZWxfaW50X3RhZywKLSAgICAgICAgICAgICAgIGJlc3NlbF9tYXliZV9pbnRf
dGFnCi0gICAgICAgICAgICA+Ojp0eXBlCi0gICAgICAgICA+Ojp0eXBlIG9wdGltaXNhdGlvbl90
YWcxMjg7Ci0gICAgICB9OwotICAgfSAvLyBkZXRhaWwKLQotICAgLy8gQmVzc2VsIGZ1bmN0aW9u
czoKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFBvbGljeT4KLSAgIHR5
cGVuYW1lIGRldGFpbDo6YmVzc2VsX3RyYWl0czxUMSwgVDIsIFBvbGljeT46OnJlc3VsdF90eXBl
IGN5bF9iZXNzZWxfaihUMSB2LCBUMiB4LCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0gICB0ZW1wbGF0
ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSBkZXRhaWw6
OmJlc3NlbF90cmFpdHM8VDEsIFQyLCBQb2xpY3k+OjpyZXN1bHRfdHlwZSBjeWxfYmVzc2VsX2pf
cHJpbWUoVDEgdiwgVDIgeCwgY29uc3QgUG9saWN5JiBwb2wpOwotCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVDEsIGNsYXNzIFQyPgotICAgdHlwZW5hbWUgZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQxLCBU
MiwgcG9saWNpZXM6OnBvbGljeTw+ID46OnJlc3VsdF90eXBlIGN5bF9iZXNzZWxfaihUMSB2LCBU
MiB4KTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+Ci0gICB0eXBlbmFtZSBkZXRh
aWw6OmJlc3NlbF90cmFpdHM8VDEsIFQyLCBwb2xpY2llczo6cG9saWN5PD4gPjo6cmVzdWx0X3R5
cGUgY3lsX2Jlc3NlbF9qX3ByaW1lKFQxIHYsIFQyIHgpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQsIFQs
IFBvbGljeT46OnJlc3VsdF90eXBlIHNwaF9iZXNzZWwodW5zaWduZWQgdiwgVCB4LCBjb25zdCBQ
b2xpY3kmIHBvbCk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgdHlw
ZW5hbWUgZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQsIFQsIFBvbGljeT46OnJlc3VsdF90eXBlIHNw
aF9iZXNzZWxfcHJpbWUodW5zaWduZWQgdiwgVCB4LCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0KLSAg
IHRlbXBsYXRlIDxjbGFzcyBUPgotICAgdHlwZW5hbWUgZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQs
IFQsIHBvbGljaWVzOjpwb2xpY3k8PiA+OjpyZXN1bHRfdHlwZSBzcGhfYmVzc2VsKHVuc2lnbmVk
IHYsIFQgeCk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIHR5cGVuYW1lIGRldGFpbDo6YmVz
c2VsX3RyYWl0czxULCBULCBwb2xpY2llczo6cG9saWN5PD4gPjo6cmVzdWx0X3R5cGUgc3BoX2Jl
c3NlbF9wcmltZSh1bnNpZ25lZCB2LCBUIHgpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNs
YXNzIFQyLCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSBkZXRhaWw6OmJlc3NlbF90cmFpdHM8
VDEsIFQyLCBQb2xpY3k+OjpyZXN1bHRfdHlwZSBjeWxfYmVzc2VsX2koVDEgdiwgVDIgeCwgY29u
c3QgUG9saWN5JiBwb2wpOwotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3Mg
UG9saWN5PgotICAgdHlwZW5hbWUgZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQxLCBUMiwgUG9saWN5
Pjo6cmVzdWx0X3R5cGUgY3lsX2Jlc3NlbF9pX3ByaW1lKFQxIHYsIFQyIHgsIGNvbnN0IFBvbGlj
eSYgcG9sKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KLSAgIHR5cGVuYW1l
IGRldGFpbDo6YmVzc2VsX3RyYWl0czxUMSwgVDIsIHBvbGljaWVzOjpwb2xpY3k8PiA+OjpyZXN1
bHRfdHlwZSBjeWxfYmVzc2VsX2koVDEgdiwgVDIgeCk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEs
IGNsYXNzIFQyPgotICAgdHlwZW5hbWUgZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQxLCBUMiwgcG9s
aWNpZXM6OnBvbGljeTw+ID46OnJlc3VsdF90eXBlIGN5bF9iZXNzZWxfaV9wcmltZShUMSB2LCBU
MiB4KTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgUG9saWN5Pgot
ICAgdHlwZW5hbWUgZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQxLCBUMiwgUG9saWN5Pjo6cmVzdWx0
X3R5cGUgY3lsX2Jlc3NlbF9rKFQxIHYsIFQyIHgsIGNvbnN0IFBvbGljeSYgcG9sKTsKLSAgIHRl
bXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIGRl
dGFpbDo6YmVzc2VsX3RyYWl0czxUMSwgVDIsIFBvbGljeT46OnJlc3VsdF90eXBlIGN5bF9iZXNz
ZWxfa19wcmltZShUMSB2LCBUMiB4LCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0KLSAgIHRlbXBsYXRl
IDxjbGFzcyBUMSwgY2xhc3MgVDI+Ci0gICB0eXBlbmFtZSBkZXRhaWw6OmJlc3NlbF90cmFpdHM8
VDEsIFQyLCBwb2xpY2llczo6cG9saWN5PD4gPjo6cmVzdWx0X3R5cGUgY3lsX2Jlc3NlbF9rKFQx
IHYsIFQyIHgpOwotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KLSAgIHR5cGVuYW1l
IGRldGFpbDo6YmVzc2VsX3RyYWl0czxUMSwgVDIsIHBvbGljaWVzOjpwb2xpY3k8PiA+OjpyZXN1
bHRfdHlwZSBjeWxfYmVzc2VsX2tfcHJpbWUoVDEgdiwgVDIgeCk7Ci0KLSAgIHRlbXBsYXRlIDxj
bGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIGRldGFpbDo6YmVz
c2VsX3RyYWl0czxUMSwgVDIsIFBvbGljeT46OnJlc3VsdF90eXBlIGN5bF9uZXVtYW5uKFQxIHYs
IFQyIHgsIGNvbnN0IFBvbGljeSYgcG9sKTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3Mg
VDIsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIGRldGFpbDo6YmVzc2VsX3RyYWl0czxUMSwg
VDIsIFBvbGljeT46OnJlc3VsdF90eXBlIGN5bF9uZXVtYW5uX3ByaW1lKFQxIHYsIFQyIHgsIGNv
bnN0IFBvbGljeSYgcG9sKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KLSAg
IHR5cGVuYW1lIGRldGFpbDo6YmVzc2VsX3RyYWl0czxUMSwgVDIsIHBvbGljaWVzOjpwb2xpY3k8
PiA+OjpyZXN1bHRfdHlwZSBjeWxfbmV1bWFubihUMSB2LCBUMiB4KTsKLSAgIHRlbXBsYXRlIDxj
bGFzcyBUMSwgY2xhc3MgVDI+Ci0gICB0eXBlbmFtZSBkZXRhaWw6OmJlc3NlbF90cmFpdHM8VDEs
IFQyLCBwb2xpY2llczo6cG9saWN5PD4gPjo6cmVzdWx0X3R5cGUgY3lsX25ldW1hbm5fcHJpbWUo
VDEgdiwgVDIgeCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBQb2xpY3k+Ci0gICB0
eXBlbmFtZSBkZXRhaWw6OmJlc3NlbF90cmFpdHM8VCwgVCwgUG9saWN5Pjo6cmVzdWx0X3R5cGUg
c3BoX25ldW1hbm4odW5zaWduZWQgdiwgVCB4LCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0gICB0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgZGV0YWlsOjpiZXNzZWxf
dHJhaXRzPFQsIFQsIFBvbGljeT46OnJlc3VsdF90eXBlIHNwaF9uZXVtYW5uX3ByaW1lKHVuc2ln
bmVkIHYsIFQgeCwgY29uc3QgUG9saWN5JiBwb2wpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4K
LSAgIHR5cGVuYW1lIGRldGFpbDo6YmVzc2VsX3RyYWl0czxULCBULCBwb2xpY2llczo6cG9saWN5
PD4gPjo6cmVzdWx0X3R5cGUgc3BoX25ldW1hbm4odW5zaWduZWQgdiwgVCB4KTsKLSAgIHRlbXBs
YXRlIDxjbGFzcyBUPgotICAgdHlwZW5hbWUgZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQsIFQsIHBv
bGljaWVzOjpwb2xpY3k8PiA+OjpyZXN1bHRfdHlwZSBzcGhfbmV1bWFubl9wcmltZSh1bnNpZ25l
ZCB2LCBUIHgpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgdHlw
ZW5hbWUgZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQsIFQsIFBvbGljeT46OnJlc3VsdF90eXBlIGN5
bF9iZXNzZWxfal96ZXJvKFQgdiwgaW50IG0sIGNvbnN0IFBvbGljeSYgcG9sKTsKLQotICAgdGVt
cGxhdGUgPGNsYXNzIFQ+Ci0gICB0eXBlbmFtZSBkZXRhaWw6OmJlc3NlbF90cmFpdHM8VCwgVCwg
cG9saWNpZXM6OnBvbGljeTw+ID46OnJlc3VsdF90eXBlIGN5bF9iZXNzZWxfal96ZXJvKFQgdiwg
aW50IG0pOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+Ci0g
ICBPdXRwdXRJdGVyYXRvciBjeWxfYmVzc2VsX2pfemVybyhUIHYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBzdGFydF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbnVtYmVyX29mX3plcm9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRJ
dGVyYXRvciBvdXRfaXQpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgT3V0cHV0SXRl
cmF0b3IsIGNsYXNzIFBvbGljeT4KLSAgIE91dHB1dEl0ZXJhdG9yIGN5bF9iZXNzZWxfal96ZXJv
KFQgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0X2luZGV4LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJfb2ZfemVyb3MsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIE91dHB1dEl0ZXJhdG9yIG91dF9pdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUG9saWN5Jik7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBQ
b2xpY3k+Ci0gICB0eXBlbmFtZSBkZXRhaWw6OmJlc3NlbF90cmFpdHM8VCwgVCwgUG9saWN5Pjo6
cmVzdWx0X3R5cGUgY3lsX25ldW1hbm5femVybyhUIHYsIGludCBtLCBjb25zdCBQb2xpY3kmIHBv
bCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgdHlwZW5hbWUgZGV0YWlsOjpiZXNzZWxf
dHJhaXRzPFQsIFQsIHBvbGljaWVzOjpwb2xpY3k8PiA+OjpyZXN1bHRfdHlwZSBjeWxfbmV1bWFu
bl96ZXJvKFQgdiwgaW50IG0pOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgT3V0cHV0
SXRlcmF0b3I+Ci0gICBPdXRwdXRJdGVyYXRvciBjeWxfbmV1bWFubl96ZXJvKFQgdiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbnVtYmVyX29mX3plcm9zLAotICAgICAgICAgICAgICAgICAgICAgICAg
IE91dHB1dEl0ZXJhdG9yIG91dF9pdCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBP
dXRwdXRJdGVyYXRvciwgY2xhc3MgUG9saWN5PgotICAgT3V0cHV0SXRlcmF0b3IgY3lsX25ldW1h
bm5femVybyhUIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0X2luZGV4LAot
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlcl9vZl96ZXJvcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBPdXRwdXRJdGVyYXRvciBvdXRfaXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUG9saWN5Jik7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xh
c3MgVDI+Ci0gICBzdGQ6OmNvbXBsZXg8dHlwZW5hbWUgZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQx
LCBUMiwgcG9saWNpZXM6OnBvbGljeTw+ID46OnJlc3VsdF90eXBlPiBjeWxfaGFua2VsXzEoVDEg
diwgVDIgeCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFBvbGlj
eT4KLSAgIHN0ZDo6Y29tcGxleDx0eXBlbmFtZSBkZXRhaWw6OmJlc3NlbF90cmFpdHM8VDEsIFQy
LCBQb2xpY3k+OjpyZXN1bHRfdHlwZT4gY3lsX2hhbmtlbF8xKFQxIHYsIFQyIHgsIGNvbnN0IFBv
bGljeSYgcG9sKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgUG9s
aWN5PgotICAgc3RkOjpjb21wbGV4PHR5cGVuYW1lIGRldGFpbDo6YmVzc2VsX3RyYWl0czxUMSwg
VDIsIFBvbGljeT46OnJlc3VsdF90eXBlPiBjeWxfaGFua2VsXzIoVDEgdiwgVDIgeCwgY29uc3Qg
UG9saWN5JiBwb2wpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgotICAgc3Rk
Ojpjb21wbGV4PHR5cGVuYW1lIGRldGFpbDo6YmVzc2VsX3RyYWl0czxUMSwgVDIsIHBvbGljaWVz
Ojpwb2xpY3k8PiA+OjpyZXN1bHRfdHlwZT4gY3lsX2hhbmtlbF8yKFQxIHYsIFQyIHgpOwotCi0g
ICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBQb2xpY3k+Ci0gICBzdGQ6OmNv
bXBsZXg8dHlwZW5hbWUgZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQxLCBUMiwgUG9saWN5Pjo6cmVz
dWx0X3R5cGU+IHNwaF9oYW5rZWxfMShUMSB2LCBUMiB4LCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0K
LSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+Ci0gICBzdGQ6OmNvbXBsZXg8dHlwZW5h
bWUgZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQxLCBUMiwgcG9saWNpZXM6OnBvbGljeTw+ID46OnJl
c3VsdF90eXBlPiBzcGhfaGFua2VsXzEoVDEgdiwgVDIgeCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFz
cyBUMSwgY2xhc3MgVDIsIGNsYXNzIFBvbGljeT4KLSAgIHN0ZDo6Y29tcGxleDx0eXBlbmFtZSBk
ZXRhaWw6OmJlc3NlbF90cmFpdHM8VDEsIFQyLCBQb2xpY3k+OjpyZXN1bHRfdHlwZT4gc3BoX2hh
bmtlbF8yKFQxIHYsIFQyIHgsIGNvbnN0IFBvbGljeSYgcG9sKTsKLQotICAgdGVtcGxhdGUgPGNs
YXNzIFQxLCBjbGFzcyBUMj4KLSAgIHN0ZDo6Y29tcGxleDx0eXBlbmFtZSBkZXRhaWw6OmJlc3Nl
bF90cmFpdHM8VDEsIFQyLCBwb2xpY2llczo6cG9saWN5PD4gPjo6cmVzdWx0X3R5cGU+IHNwaF9o
YW5rZWxfMihUMSB2LCBUMiB4KTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFBvbGlj
eT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgYWlyeV9haShUIHgs
IGNvbnN0IFBvbGljeSYpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIHR5cGVuYW1lIHRv
b2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgYWlyeV9haShUIHgpOwotCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxU
Pjo6dHlwZSBhaXJ5X2JpKFQgeCwgY29uc3QgUG9saWN5Jik7Ci0KLSAgIHRlbXBsYXRlIDxjbGFz
cyBUPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSBhaXJ5X2JpKFQg
eCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0
b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIGFpcnlfYWlfcHJpbWUoVCB4LCBjb25zdCBQb2xp
Y3kmKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90
ZV9hcmdzPFQ+Ojp0eXBlIGFpcnlfYWlfcHJpbWUoVCB4KTsKLQotICAgdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5
cGUgYWlyeV9iaV9wcmltZShUIHgsIGNvbnN0IFBvbGljeSYpOwotCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVD4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgYWlyeV9iaV9w
cmltZShUIHgpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIFQgYWlyeV9haV96ZXJvKGlu
dCBtKTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBQb2xpY3k+Ci0gICBUIGFpcnlfYWlf
emVybyhpbnQgbSwgY29uc3QgUG9saWN5Jik7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBPdXRwdXRJ
dGVyYXRvcj4KLSAgIE91dHB1dEl0ZXJhdG9yIGFpcnlfYWlfemVybygKLSAgICAgICAgICAgICAg
ICAgICAgIGludCBzdGFydF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51
bWJlcl9vZl96ZXJvcywKLSAgICAgICAgICAgICAgICAgICAgIE91dHB1dEl0ZXJhdG9yIG91dF9p
dCk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgT3V0cHV0SXRlcmF0b3IsIGNsYXNzIFBvbGljeT4KLSAg
IE91dHB1dEl0ZXJhdG9yIGFpcnlfYWlfemVybygKLSAgICAgICAgICAgICAgICAgICAgIGludCBz
dGFydF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlcl9vZl96ZXJv
cywKLSAgICAgICAgICAgICAgICAgICAgIE91dHB1dEl0ZXJhdG9yIG91dF9pdCwKLSAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFBvbGljeSYpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAg
IFQgYWlyeV9iaV96ZXJvKGludCBtKTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBQb2xp
Y3k+Ci0gICBUIGFpcnlfYmlfemVybyhpbnQgbSwgY29uc3QgUG9saWN5Jik7Ci0KLSAgIHRlbXBs
YXRlIDxjbGFzcyBPdXRwdXRJdGVyYXRvcj4KLSAgIE91dHB1dEl0ZXJhdG9yIGFpcnlfYmlfemVy
bygKLSAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydF9pbmRleCwKLSAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG51bWJlcl9vZl96ZXJvcywKLSAgICAgICAgICAgICAgICAgICAgIE91
dHB1dEl0ZXJhdG9yIG91dF9pdCk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgT3V0cHV0SXRlcmF0b3Is
IGNsYXNzIFBvbGljeT4KLSAgIE91dHB1dEl0ZXJhdG9yIGFpcnlfYmlfemVybygKLSAgICAgICAg
ICAgICAgICAgICAgIGludCBzdGFydF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG51bWJlcl9vZl96ZXJvcywKLSAgICAgICAgICAgICAgICAgICAgIE91dHB1dEl0ZXJhdG9y
IG91dF9pdCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBvbGljeSYpOwotCi0gICB0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVf
YXJnczxUPjo6dHlwZSBzaW5fcGkoVCB4LCBjb25zdCBQb2xpY3kmKTsKLQotICAgdGVtcGxhdGUg
PGNsYXNzIFQ+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIHNpbl9w
aShUIHgpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5h
bWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSBjb3NfcGkoVCB4LCBjb25zdCBQb2xpY3km
KTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9h
cmdzPFQ+Ojp0eXBlIGNvc19waShUIHgpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIGlu
dCBmcGNsYXNzaWZ5IEJPT1NUX05PX01BQ1JPX0VYUEFORChUIHQpOwotCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4KLSAgIGJvb2wgaXNmaW5pdGUgQk9PU1RfTk9fTUFDUk9fRVhQQU5EKFQgeik7Ci0K
LSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgYm9vbCBpc2luZiBCT09TVF9OT19NQUNST19FWFBB
TkQoVCB0KTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICBib29sIGlzbmFuIEJPT1NUX05P
X01BQ1JPX0VYUEFORChUIHQpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIGJvb2wgaXNu
b3JtYWwgQk9PU1RfTk9fTUFDUk9fRVhQQU5EKFQgdCk7Ci0KLSAgIHRlbXBsYXRlPGNsYXNzIFQ+
Ci0gICBpbnQgc2lnbmJpdCBCT09TVF9OT19NQUNST19FWFBBTkQoVCB4KTsKLQotICAgdGVtcGxh
dGUgPGNsYXNzIFQ+Ci0gICBpbnQgc2lnbiBCT09TVF9OT19NQUNST19FWFBBTkQoY29uc3QgVCYg
eik7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgotICAgdHlwZW5hbWUgdG9vbHM6
OnByb21vdGVfYXJnc19wZXJtaXNzaXZlPFQsIFU+Ojp0eXBlIGNvcHlzaWduIEJPT1NUX05PX01B
Q1JPX0VYUEFORChjb25zdCBUJiB4LCBjb25zdCBVJiB5KTsKLQotICAgdGVtcGxhdGUgPGNsYXNz
IFQ+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzX3Blcm1pc3NpdmU8VD46OnR5cGUg
Y2hhbmdlc2lnbiBCT09TVF9OT19NQUNST19FWFBBTkQoY29uc3QgVCYgeik7Ci0KLSAgIC8vIEV4
cG9uZW50aWFsIGludGVncmFsczoKLSAgIG5hbWVzcGFjZSBkZXRhaWx7Ci0KLSAgIHRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBVPgotICAgc3RydWN0IGV4cGludF9yZXN1bHQKLSAgIHsKLSAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgbXBsOjppZl88Ci0gICAgICAgICBwb2xpY2llczo6aXNfcG9saWN5
PFU+LAotICAgICAgICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSwKLSAg
ICAgICAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VT46OnR5cGUKLSAgICAgID46OnR5
cGUgdHlwZTsKLSAgIH07Ci0KLSAgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAotCi0gICB0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJn
czxUPjo6dHlwZSBleHBpbnQodW5zaWduZWQgbiwgVCB6LCBjb25zdCBQb2xpY3kmKTsKLQotICAg
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+Ci0gICB0eXBlbmFtZSBkZXRhaWw6OmV4cGludF9y
ZXN1bHQ8VCwgVT46OnR5cGUgZXhwaW50KFQgY29uc3QgeiwgVSBjb25zdCB1KTsKLQotICAgdGVt
cGxhdGUgPGNsYXNzIFQ+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBl
IGV4cGludChUIHopOwotCi0gICAvLyBaZXRhOgotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgemV0YShU
IHMsIGNvbnN0IFBvbGljeSYpOwotCi0gICAvLyBPd2VuJ3MgVCBmdW5jdGlvbjoKLSAgIHRlbXBs
YXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xz
Ojpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZSBvd2Vuc190KFQxIGgsIFQyIGEsIGNvbnN0IFBv
bGljeSYgcG9sKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KLSAgIHR5cGVu
YW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZSBvd2Vuc190KFQxIGgsIFQyIGEp
OwotCi0gICAvLyBKYWNvYmkgRnVuY3Rpb25zOgotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IFUsIGNsYXNzIFYsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2Fy
Z3M8VCwgVSwgVj46OnR5cGUgamFjb2JpX2VsbGlwdGljKFQgaywgVSB0aGV0YSwgViogcGNuLCBW
KiBwZG4sIGNvbnN0IFBvbGljeSYpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwg
Y2xhc3MgVj4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVSwgVj46OnR5cGUg
amFjb2JpX2VsbGlwdGljKFQgaywgVSB0aGV0YSwgViogcGNuID0gMCwgViogcGRuID0gMCk7Ci0K
LSAgIHRlbXBsYXRlIDxjbGFzcyBVLCBjbGFzcyBULCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFt
ZSB0b29sczo6cHJvbW90ZV9hcmdzPFQsIFU+Ojp0eXBlIGphY29iaV9zbihVIGssIFQgdGhldGEs
IGNvbnN0IFBvbGljeSYgcG9sKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzIFQ+Ci0g
ICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQsIFU+Ojp0eXBlIGphY29iaV9zbihVIGss
IFQgdGhldGEpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MgUG9saWN5
PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxULCBVPjo6dHlwZSBqYWNvYmlfY24o
VCBrLCBVIHRoZXRhLCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBVPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxULCBVPjo6dHlwZSBq
YWNvYmlfY24oVCBrLCBVIHRoZXRhKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUs
IGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46OnR5
cGUgamFjb2JpX2RuKFQgaywgVSB0aGV0YSwgY29uc3QgUG9saWN5JiBwb2wpOwotCi0gICB0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8
VCwgVT46OnR5cGUgamFjb2JpX2RuKFQgaywgVSB0aGV0YSk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBVLCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9h
cmdzPFQsIFU+Ojp0eXBlIGphY29iaV9jZChUIGssIFUgdGhldGEsIGNvbnN0IFBvbGljeSYgcG9s
KTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+Ci0gICB0eXBlbmFtZSB0b29sczo6
cHJvbW90ZV9hcmdzPFQsIFU+Ojp0eXBlIGphY29iaV9jZChUIGssIFUgdGhldGEpOwotCi0gICB0
ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgdG9v
bHM6OnByb21vdGVfYXJnczxULCBVPjo6dHlwZSBqYWNvYmlfZGMoVCBrLCBVIHRoZXRhLCBjb25z
dCBQb2xpY3kmIHBvbCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgotICAgdHlw
ZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxULCBVPjo6dHlwZSBqYWNvYmlfZGMoVCBrLCBVIHRo
ZXRhKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzIFBvbGljeT4KLSAg
IHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46OnR5cGUgamFjb2JpX25zKFQgaywg
VSB0aGV0YSwgY29uc3QgUG9saWN5JiBwb2wpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgVT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46OnR5cGUgamFjb2Jp
X25zKFQgaywgVSB0aGV0YSk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVLCBjbGFz
cyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQsIFU+Ojp0eXBlIGph
Y29iaV9zZChUIGssIFUgdGhldGEsIGNvbnN0IFBvbGljeSYgcG9sKTsKLQotICAgdGVtcGxhdGUg
PGNsYXNzIFQsIGNsYXNzIFU+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQsIFU+
Ojp0eXBlIGphY29iaV9zZChUIGssIFUgdGhldGEpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgVSwgY2xhc3MgUG9saWN5PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxU
LCBVPjo6dHlwZSBqYWNvYmlfZHMoVCBrLCBVIHRoZXRhLCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0K
LSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21v
dGVfYXJnczxULCBVPjo6dHlwZSBqYWNvYmlfZHMoVCBrLCBVIHRoZXRhKTsKLQotICAgdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpw
cm9tb3RlX2FyZ3M8VCwgVT46OnR5cGUgamFjb2JpX25jKFQgaywgVSB0aGV0YSwgY29uc3QgUG9s
aWN5JiBwb2wpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KLSAgIHR5cGVuYW1l
IHRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46OnR5cGUgamFjb2JpX25jKFQgaywgVSB0aGV0YSk7
Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVLCBjbGFzcyBQb2xpY3k+Ci0gICB0eXBl
bmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQsIFU+Ojp0eXBlIGphY29iaV9uZChUIGssIFUgdGhl
dGEsIGNvbnN0IFBvbGljeSYgcG9sKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+
Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQsIFU+Ojp0eXBlIGphY29iaV9uZChU
IGssIFUgdGhldGEpOwotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MgUG9s
aWN5PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxULCBVPjo6dHlwZSBqYWNvYmlf
c2MoVCBrLCBVIHRoZXRhLCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBVPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxULCBVPjo6dHlw
ZSBqYWNvYmlfc2MoVCBrLCBVIHRoZXRhKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IFUsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46
OnR5cGUgamFjb2JpX2NzKFQgaywgVSB0aGV0YSwgY29uc3QgUG9saWN5JiBwb2wpOwotCi0gICB0
ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2Fy
Z3M8VCwgVT46OnR5cGUgamFjb2JpX2NzKFQgaywgVSB0aGV0YSk7Ci0KLQotICAgdGVtcGxhdGUg
PGNsYXNzIFQ+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIHpldGEo
VCBzKTsKLQotICAgLy8gcG93OgotICAgdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBULCBjbGFz
cyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIHBvdyhU
IGJhc2UsIGNvbnN0IFBvbGljeSYgcG9saWN5KTsKLQotICAgdGVtcGxhdGUgPGludCBOLCB0eXBl
bmFtZSBUPgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSBwb3coVCBi
YXNlKTsKLQotICAgLy8gbmV4dDoKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVLCBjbGFz
cyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQsIFU+Ojp0eXBlIG5l
eHRhZnRlcihjb25zdCBUJiwgY29uc3QgVSYsIGNvbnN0IFBvbGljeSYpOwotICAgdGVtcGxhdGUg
PGNsYXNzIFQsIGNsYXNzIFU+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQsIFU+
Ojp0eXBlIG5leHRhZnRlcihjb25zdCBUJiwgY29uc3QgVSYpOwotICAgdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5
cGUgZmxvYXRfbmV4dChjb25zdCBUJiwgY29uc3QgUG9saWN5Jik7Ci0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVD4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgZmxvYXRfbmV4
dChjb25zdCBUJik7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUG9saWN5PgotICAgdHlw
ZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSBmbG9hdF9wcmlvcihjb25zdCBUJiwg
Y29uc3QgUG9saWN5Jik7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIHR5cGVuYW1lIHRvb2xz
Ojpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgZmxvYXRfcHJpb3IoY29uc3QgVCYpOwotICAgdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzIFBvbGljeT4KLSAgIHR5cGVuYW1lIHRvb2xzOjpw
cm9tb3RlX2FyZ3M8VCwgVT46OnR5cGUgZmxvYXRfZGlzdGFuY2UoY29uc3QgVCYsIGNvbnN0IFUm
LCBjb25zdCBQb2xpY3kmKTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgotICAgdHlw
ZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxULCBVPjo6dHlwZSBmbG9hdF9kaXN0YW5jZShjb25z
dCBUJiwgY29uc3QgVSYpOwotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFBvbGljeT4KLSAg
IHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgZmxvYXRfYWR2YW5jZShUIHZh
bCwgaW50IGRpc3RhbmNlLCBjb25zdCBQb2xpY3kmIHBvbCk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KLSAgIHR5cGVuYW1lIHRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgZmxvYXRfYWR2YW5j
ZShjb25zdCBUJiB2YWwsIGludCBkaXN0YW5jZSk7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBj
bGFzcyBQb2xpY3k+Ci0gICB0eXBlbmFtZSB0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIHVs
cChjb25zdCBUJiB2YWwsIGNvbnN0IFBvbGljeSYgcG9sKTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBU
PgotICAgdHlwZW5hbWUgdG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSB1bHAoY29uc3QgVCYg
dmFsKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+Ci0gICB0eXBlbmFtZSB0b29s
czo6cHJvbW90ZV9hcmdzPFQsIFU+Ojp0eXBlIHJlbGF0aXZlX2RpZmZlcmVuY2UoY29uc3QgVCYs
IGNvbnN0IFUmKTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgotICAgdHlwZW5hbWUg
dG9vbHM6OnByb21vdGVfYXJnczxULCBVPjo6dHlwZSBlcHNpbG9uX2RpZmZlcmVuY2UoY29uc3Qg
VCYsIGNvbnN0IFUmKTsKLQotICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgIFQgdW5jaGVja2VkX2Jl
cm5vdWxsaV9iMm4oY29uc3Qgc3RkOjpzaXplX3Qgbik7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgUG9saWN5PgotICAgVCBiZXJub3VsbGlfYjJuKGNvbnN0IGludCBpLCBjb25zdCBQb2xp
Y3kgJnBvbCk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIFQgYmVybm91bGxpX2Iybihjb25z
dCBpbnQgaSk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgT3V0cHV0SXRlcmF0b3IsIGNs
YXNzIFBvbGljeT4KLSAgIE91dHB1dEl0ZXJhdG9yIGJlcm5vdWxsaV9iMm4oY29uc3QgaW50IHN0
YXJ0X2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgbnVtYmVyX29mX2Jlcm5vdWxsaXNfYjJuLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgT3V0cHV0SXRlcmF0b3Igb3V0X2l0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUG9saWN5JiBwb2wpOwotICAgdGVtcGxhdGUg
PGNsYXNzIFQsIGNsYXNzIE91dHB1dEl0ZXJhdG9yPgotICAgT3V0cHV0SXRlcmF0b3IgYmVybm91
bGxpX2Iybihjb25zdCBpbnQgc3RhcnRfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJfb2ZfYmVybm91bGxpc19iMm4sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRJdGVyYXRvciBvdXRf
aXQpOwotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFBvbGljeT4KLSAgIFQgdGFuZ2VudF90
Mm4oY29uc3QgaW50IGksIGNvbnN0IFBvbGljeSAmcG9sKTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBU
PgotICAgVCB0YW5nZW50X3Qybihjb25zdCBpbnQgaSk7Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgT3V0cHV0SXRlcmF0b3IsIGNsYXNzIFBvbGljeT4KLSAgIE91dHB1dEl0ZXJhdG9yIHRh
bmdlbnRfdDJuKGNvbnN0IGludCBzdGFydF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlcl9vZl9iZXJub3VsbGlzX2IybiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dEl0ZXJhdG9yIG91
dF9pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBvbGlj
eSYgcG9sKTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBPdXRwdXRJdGVyYXRvcj4KLSAg
IE91dHB1dEl0ZXJhdG9yIHRhbmdlbnRfdDJuKGNvbnN0IGludCBzdGFydF9pbmRleCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlcl9v
Zl9iZXJub3VsbGlzX2IybiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE91dHB1dEl0ZXJhdG9yIG91dF9pdCk7Ci0KLSAgICB9IC8vIG5hbWVzcGFjZSBtYXRoCi19IC8v
IG5hbWVzcGFjZSBib29zdAotCi0jaWZkZWYgQk9PU1RfSEFTX0xPTkdfTE9ORwotI2RlZmluZSBC
T09TVF9NQVRIX0RFVEFJTF9MTF9GVU5DKFBvbGljeSlcCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVD5cCi0gICBpbmxpbmUgVCBtb2RmKGNvbnN0IFQmIHYsIGJvb3N0Ojpsb25nX2xvbmdfdHlw
ZSogaXBhcnQpeyB1c2luZyBib29zdDo6bWF0aDo6bW9kZjsgcmV0dXJuIG1vZGYodiwgaXBhcnQs
IFBvbGljeSgpKTsgfVwKLSAgIFwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPlwKLSAgIGlubGluZSBi
b29zdDo6bG9uZ19sb25nX3R5cGUgbGx0cnVuYyhjb25zdCBUJiB2KXsgdXNpbmcgYm9vc3Q6Om1h
dGg6OmxsdHJ1bmM7IHJldHVybiBsbHRydW5jKHYsIFBvbGljeSgpKTsgfVwKLSAgIFwKLSAgIHRl
bXBsYXRlIDxjbGFzcyBUPlwKLSAgIGlubGluZSBib29zdDo6bG9uZ19sb25nX3R5cGUgbGxyb3Vu
ZChjb25zdCBUJiB2KXsgdXNpbmcgYm9vc3Q6Om1hdGg6Omxscm91bmQ7IHJldHVybiBsbHJvdW5k
KHYsIFBvbGljeSgpKTsgfVwKLQotI2Vsc2UKLSNkZWZpbmUgQk9PU1RfTUFUSF9ERVRBSUxfTExf
RlVOQyhQb2xpY3kpCi0jZW5kaWYKLQotI2RlZmluZSBCT09TVF9NQVRIX0RFQ0xBUkVfU1BFQ0lB
TF9GVU5DVElPTlMoUG9saWN5KVwKLSAgIFwKLSAgIEJPT1NUX01BVEhfREVUQUlMX0xMX0ZVTkMo
UG9saWN5KVwKLSAgIFwKLSAgIHRlbXBsYXRlIDxjbGFzcyBSVDEsIGNsYXNzIFJUMj5cCi0gICBp
bmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQxLCBSVDI+
Ojp0eXBlIFwKLSAgIGJldGEoUlQxIGEsIFJUMiBiKSB7IHJldHVybiA6OmJvb3N0OjptYXRoOjpi
ZXRhKGEsIGIsIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBSVDEsIGNsYXNz
IFJUMiwgY2xhc3MgQT5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpw
cm9tb3RlX2FyZ3M8UlQxLCBSVDIsIEE+Ojp0eXBlIFwKLSAgIGJldGEoUlQxIGEsIFJUMiBiLCBB
IHgpeyByZXR1cm4gOjpib29zdDo6bWF0aDo6YmV0YShhLCBiLCB4LCBQb2xpY3koKSk7IH1cCi1c
Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgUlQxLCBjbGFzcyBSVDIsIGNsYXNzIFJUMz5cCi0gICBpbmxp
bmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQxLCBSVDIsIFJU
Mz46OnR5cGUgXAotICAgYmV0YWMoUlQxIGEsIFJUMiBiLCBSVDMgeCkgeyByZXR1cm4gOjpib29z
dDo6bWF0aDo6YmV0YWMoYSwgYiwgeCwgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNs
YXNzIFJUMSwgY2xhc3MgUlQyLCBjbGFzcyBSVDM+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0
OjptYXRoOjp0b29sczo6cHJvbW90ZV9hcmdzPFJUMSwgUlQyLCBSVDM+Ojp0eXBlIFwKLSAgIGli
ZXRhKFJUMSBhLCBSVDIgYiwgUlQzIHgpeyByZXR1cm4gOjpib29zdDo6bWF0aDo6aWJldGEoYSwg
YiwgeCwgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFJUMSwgY2xhc3MgUlQy
LCBjbGFzcyBSVDM+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJv
bW90ZV9hcmdzPFJUMSwgUlQyLCBSVDM+Ojp0eXBlIFwKLSAgIGliZXRhYyhSVDEgYSwgUlQyIGIs
IFJUMyB4KXsgcmV0dXJuIDo6Ym9vc3Q6Om1hdGg6OmliZXRhYyhhLCBiLCB4LCBQb2xpY3koKSk7
IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMywgY2xhc3Mg
VDQ+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJvbW90ZV9hcmdz
PFQxLCBUMiwgVDMsIFQ0Pjo6dHlwZSAgXAotICAgaWJldGFfaW52KFQxIGEsIFQyIGIsIFQzIHAs
IFQ0KiBweSl7IHJldHVybiA6OmJvb3N0OjptYXRoOjppYmV0YV9pbnYoYSwgYiwgcCwgcHksIFBv
bGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBSVDEsIGNsYXNzIFJUMiwgY2xhc3Mg
UlQzPlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21vdGVfYXJn
czxSVDEsIFJUMiwgUlQzPjo6dHlwZSBcCi0gICBpYmV0YV9pbnYoUlQxIGEsIFJUMiBiLCBSVDMg
cCl7IHJldHVybiA6OmJvb3N0OjptYXRoOjppYmV0YV9pbnYoYSwgYiwgcCwgUG9saWN5KCkpOyB9
XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0
PlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21vdGVfYXJnczxU
MSwgVDIsIFQzLCBUND46OnR5cGUgXAotICAgaWJldGFjX2ludihUMSBhLCBUMiBiLCBUMyBxLCBU
NCogcHkpeyByZXR1cm4gOjpib29zdDo6bWF0aDo6aWJldGFjX2ludihhLCBiLCBxLCBweSwgUG9s
aWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFJUMSwgY2xhc3MgUlQyLCBjbGFzcyBS
VDM+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJvbW90ZV9hcmdz
PFJUMSwgUlQyLCBSVDM+Ojp0eXBlIFwKLSAgIGliZXRhX2ludmEoUlQxIGEsIFJUMiBiLCBSVDMg
cCl7IHJldHVybiA6OmJvb3N0OjptYXRoOjppYmV0YV9pbnZhKGEsIGIsIHAsIFBvbGljeSgpKTsg
fVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFQzPlwKLSAgIGlu
bGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDIsIFQz
Pjo6dHlwZSBcCi0gICBpYmV0YWNfaW52YShUMSBhLCBUMiBiLCBUMyBxKXsgcmV0dXJuIDo6Ym9v
c3Q6Om1hdGg6OmliZXRhY19pbnZhKGEsIGIsIHEsIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBs
YXRlIDxjbGFzcyBSVDEsIGNsYXNzIFJUMiwgY2xhc3MgUlQzPlwKLSAgIGlubGluZSB0eXBlbmFt
ZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21vdGVfYXJnczxSVDEsIFJUMiwgUlQzPjo6dHlwZSBc
Ci0gICBpYmV0YV9pbnZiKFJUMSBhLCBSVDIgYiwgUlQzIHApeyByZXR1cm4gOjpib29zdDo6bWF0
aDo6aWJldGFfaW52YihhLCBiLCBwLCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMz5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1h
dGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyLCBUMz46OnR5cGUgXAotICAgaWJldGFjX2lu
dmIoVDEgYSwgVDIgYiwgVDMgcSl7IHJldHVybiA6OmJvb3N0OjptYXRoOjppYmV0YWNfaW52Yihh
LCBiLCBxLCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgUlQxLCBjbGFzcyBS
VDIsIGNsYXNzIFJUMz5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpw
cm9tb3RlX2FyZ3M8UlQxLCBSVDIsIFJUMz46OnR5cGUgXAotICAgaWJldGFjX2ludihSVDEgYSwg
UlQyIGIsIFJUMyBxKXsgcmV0dXJuIDo6Ym9vc3Q6Om1hdGg6OmliZXRhY19pbnYoYSwgYiwgcSwg
UG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFJUMSwgY2xhc3MgUlQyLCBjbGFz
cyBSVDM+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJvbW90ZV9h
cmdzPFJUMSwgUlQyLCBSVDM+Ojp0eXBlIFwKLSAgIGliZXRhX2Rlcml2YXRpdmUoUlQxIGEsIFJU
MiBiLCBSVDMgeCl7IHJldHVybiA6OmJvb3N0OjptYXRoOjppYmV0YV9kZXJpdmF0aXZlKGEsIGIs
IHgsIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBUIGJpbm9taWFsX2Nv
ZWZmaWNpZW50KHVuc2lnbmVkIG4sIHVuc2lnbmVkIGspeyByZXR1cm4gOjpib29zdDo6bWF0aDo6
Ymlub21pYWxfY29lZmZpY2llbnQ8VCwgUG9saWN5PihuLCBrLCBQb2xpY3koKSk7IH1cCi1cCi0g
ICB0ZW1wbGF0ZSA8Y2xhc3MgUlQ+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0
b29sczo6cHJvbW90ZV9hcmdzPFJUPjo6dHlwZSBlcmYoUlQgeikgeyByZXR1cm4gOjpib29zdDo6
bWF0aDo6ZXJmKHosIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBSVD5cCi0g
ICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQ+Ojp0
eXBlIGVyZmMoUlQgeil7IHJldHVybiA6OmJvb3N0OjptYXRoOjplcmZjKHosIFBvbGljeSgpKTsg
fVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBSVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6
Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQ+Ojp0eXBlIGVyZl9pbnYoUlQgeikgeyByZXR1
cm4gOjpib29zdDo6bWF0aDo6ZXJmX2ludih6LCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0
ZSA8Y2xhc3MgUlQ+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJv
bW90ZV9hcmdzPFJUPjo6dHlwZSBlcmZjX2ludihSVCB6KXsgcmV0dXJuIDo6Ym9vc3Q6Om1hdGg6
OmVyZmNfaW52KHosIFBvbGljeSgpKTsgfVwKLVwKLSAgIHVzaW5nIGJvb3N0OjptYXRoOjpsZWdl
bmRyZV9uZXh0O1wKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPlwKLSAgIGlubGluZSB0eXBlbmFt
ZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSBcCi0gICBsZWdlbmRy
ZV9wKGludCBsLCBUIHgpeyByZXR1cm4gOjpib29zdDo6bWF0aDo6bGVnZW5kcmVfcChsLCB4LCBQ
b2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD5cCi0gICBpbmxpbmUgdHlwZW5h
bWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgXAotICAgbGVnZW5k
cmVfcSh1bnNpZ25lZCBsLCBUIHgpeyByZXR1cm4gOjpib29zdDo6bWF0aDo6bGVnZW5kcmVfcShs
LCB4LCBQb2xpY3koKSk7IH1cCi1cCi0gICB1c2luZyA6OmJvb3N0OjptYXRoOjpsZWdlbmRyZV9u
ZXh0O1wKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29z
dDo6bWF0aDo6dG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSBcCi0gICBsZWdlbmRyZV9wKGlu
dCBsLCBpbnQgbSwgVCB4KXsgcmV0dXJuIDo6Ym9vc3Q6Om1hdGg6OmxlZ2VuZHJlX3AobCwgbSwg
eCwgUG9saWN5KCkpOyB9XAotXAotICAgdXNpbmcgOjpib29zdDo6bWF0aDo6bGFndWVycmVfbmV4
dDtcCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6
Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgXAotICAgbGFndWVycmUodW5zaWdu
ZWQgbiwgVCB4KXsgcmV0dXJuIDo6Ym9vc3Q6Om1hdGg6OmxhZ3VlcnJlKG4sIHgsIFBvbGljeSgp
KTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+XAotICAgaW5saW5lIHR5
cGVuYW1lIGJvb3N0OjptYXRoOjpsYWd1ZXJyZV9yZXN1bHQ8VDEsIFQyPjo6dHlwZSBcCi0gICBs
YWd1ZXJyZSh1bnNpZ25lZCBuLCBUMSBtLCBUMiB4KSB7IHJldHVybiA6OmJvb3N0OjptYXRoOjps
YWd1ZXJyZShuLCBtLCB4LCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD5c
Ci0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46
OnR5cGUgXAotICAgaGVybWl0ZSh1bnNpZ25lZCBuLCBUIHgpeyByZXR1cm4gOjpib29zdDo6bWF0
aDo6aGVybWl0ZShuLCB4LCBQb2xpY3koKSk7IH1cCi1cCi0gICB1c2luZyBib29zdDo6bWF0aDo6
aGVybWl0ZV9uZXh0O1wKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+XAotICAg
aW5saW5lIHN0ZDo6Y29tcGxleDx0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21vdGVf
YXJnczxUMSwgVDI+Ojp0eXBlPiBcCi0gICBzcGhlcmljYWxfaGFybW9uaWModW5zaWduZWQgbiwg
aW50IG0sIFQxIHRoZXRhLCBUMiBwaGkpeyByZXR1cm4gYm9vc3Q6Om1hdGg6OnNwaGVyaWNhbF9o
YXJtb25pYyhuLCBtLCB0aGV0YSwgcGhpLCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgVDEsIGNsYXNzIFQyPlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9v
bHM6OnByb21vdGVfYXJnczxUMSwgVDI+Ojp0eXBlIFwKLSAgIHNwaGVyaWNhbF9oYXJtb25pY19y
KHVuc2lnbmVkIG4sIGludCBtLCBUMSB0aGV0YSwgVDIgcGhpKXsgcmV0dXJuIDo6Ym9vc3Q6Om1h
dGg6OnNwaGVyaWNhbF9oYXJtb25pY19yKG4sIG0sIHRoZXRhLCBwaGksIFBvbGljeSgpKTsgfVwK
LVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+XAotICAgaW5saW5lIHR5cGVuYW1l
IGJvb3N0OjptYXRoOjp0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMj46OnR5cGUgXAotICAgc3Bo
ZXJpY2FsX2hhcm1vbmljX2kodW5zaWduZWQgbiwgaW50IG0sIFQxIHRoZXRhLCBUMiBwaGkpeyBy
ZXR1cm4gYm9vc3Q6Om1hdGg6OnNwaGVyaWNhbF9oYXJtb25pY19pKG4sIG0sIHRoZXRhLCBwaGks
IFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNz
IFBvbGljeT5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3Rl
X2FyZ3M8VDEsIFQyPjo6dHlwZSBcCi0gICAgICBzcGhlcmljYWxfaGFybW9uaWNfaSh1bnNpZ25l
ZCBuLCBpbnQgbSwgVDEgdGhldGEsIFQyIHBoaSwgY29uc3QgUG9saWN5JiBwb2wpO1wKLVwKLSAg
IHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFQzPlwKLSAgIGlubGluZSB0eXBl
bmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDIsIFQzPjo6dHlwZSBc
Ci0gICBlbGxpbnRfcmYoVDEgeCwgVDIgeSwgVDMgeil7IHJldHVybiA6OmJvb3N0OjptYXRoOjpl
bGxpbnRfcmYoeCwgeSwgeiwgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFQx
LCBjbGFzcyBUMiwgY2xhc3MgVDM+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0
b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMiwgVDM+Ojp0eXBlIFwKLSAgIGVsbGludF9yZChUMSB4
LCBUMiB5LCBUMyB6KXsgcmV0dXJuIDo6Ym9vc3Q6Om1hdGg6OmVsbGludF9yZCh4LCB5LCB6LCBQ
b2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPlwKLSAgIGlu
bGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDI+Ojp0
eXBlIFwKLSAgIGVsbGludF9yYyhUMSB4LCBUMiB5KXsgcmV0dXJuIDo6Ym9vc3Q6Om1hdGg6OmVs
bGludF9yYyh4LCB5LCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNs
YXNzIFQyLCBjbGFzcyBUMywgY2xhc3MgVDQ+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0Ojpt
YXRoOjp0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMiwgVDMsIFQ0Pjo6dHlwZSBcCi0gICBlbGxp
bnRfcmooVDEgeCwgVDIgeSwgVDMgeiwgVDQgcCl7IHJldHVybiBib29zdDo6bWF0aDo6ZWxsaW50
X3JqKHgsIHksIHosIHAsIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwg
Y2xhc3MgVDIsIGNsYXNzIFQzPlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9v
bHM6OnByb21vdGVfYXJnczxUMSwgVDIsIFQzPjo6dHlwZSBcCi0gICBlbGxpbnRfcmcoVDEgeCwg
VDIgeSwgVDMgeil7IHJldHVybiA6OmJvb3N0OjptYXRoOjplbGxpbnRfcmcoeCwgeSwgeiwgUG9s
aWN5KCkpOyB9XAotICAgXAotICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+XAotICAgaW5saW5lIHR5
cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIGVsbGludF8y
KFQgayl7IHJldHVybiBib29zdDo6bWF0aDo6ZWxsaW50XzIoaywgUG9saWN5KCkpOyB9XAotXAot
ICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9v
c3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZSBlbGxpbnRfMihUMSBr
LCBUMiBwaGkpeyByZXR1cm4gYm9vc3Q6Om1hdGg6OmVsbGludF8yKGssIHBoaSwgUG9saWN5KCkp
OyB9XAotXAotICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+XAotICAgaW5saW5lIHR5cGVuYW1lIGJv
b3N0OjptYXRoOjp0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIGVsbGludF9kKFQgayl7IHJl
dHVybiBib29zdDo6bWF0aDo6ZWxsaW50X2QoaywgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxh
dGUgPGNsYXNzIFQxLCBjbGFzcyBUMj5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6
OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZSBlbGxpbnRfZChUMSBrLCBUMiBwaGkp
eyByZXR1cm4gYm9vc3Q6Om1hdGg6OmVsbGludF9kKGssIHBoaSwgUG9saWN5KCkpOyB9XAotXAot
ICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9v
c3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZSBqYWNvYmlfemV0YShU
MSBrLCBUMiBwaGkpeyByZXR1cm4gYm9vc3Q6Om1hdGg6OmphY29iaV96ZXRhKGssIHBoaSwgUG9s
aWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj5cCi0gICBpbmxp
bmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlw
ZSBoZXVtYW5fbGFtYmRhKFQxIGssIFQyIHBoaSl7IHJldHVybiBib29zdDo6bWF0aDo6aGV1bWFu
X2xhbWJkYShrLCBwaGksIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21vdGVfYXJnczxU
Pjo6dHlwZSBlbGxpbnRfMShUIGspeyByZXR1cm4gYm9vc3Q6Om1hdGg6OmVsbGludF8xKGssIFBv
bGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+XAotICAgaW5s
aW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMj46OnR5
cGUgZWxsaW50XzEoVDEgaywgVDIgcGhpKXsgcmV0dXJuIGJvb3N0OjptYXRoOjplbGxpbnRfMShr
LCBwaGksIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIs
IGNsYXNzIFQzPlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21v
dGVfYXJnczxUMSwgVDIsIFQzPjo6dHlwZSBlbGxpbnRfMyhUMSBrLCBUMiB2LCBUMyBwaGkpeyBy
ZXR1cm4gYm9vc3Q6Om1hdGg6OmVsbGludF8zKGssIHYsIHBoaSwgUG9saWN5KCkpOyB9XAotXAot
ICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9v
c3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZSBlbGxpbnRfMyhUMSBr
LCBUMiB2KXsgcmV0dXJuIGJvb3N0OjptYXRoOjplbGxpbnRfMyhrLCB2LCBQb2xpY3koKSk7IH1c
Ci1cCi0gICB1c2luZyBib29zdDo6bWF0aDo6bWF4X2ZhY3RvcmlhbDtcCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgUlQ+XAotICAgaW5saW5lIFJUIGZhY3RvcmlhbCh1bnNpZ25lZCBpbnQgaSkgeyByZXR1
cm4gYm9vc3Q6Om1hdGg6OmZhY3RvcmlhbDxSVD4oaSwgUG9saWN5KCkpOyB9XAotICAgdXNpbmcg
Ym9vc3Q6Om1hdGg6OnVuY2hlY2tlZF9mYWN0b3JpYWw7XAotICAgdGVtcGxhdGUgPGNsYXNzIFJU
PlwKLSAgIGlubGluZSBSVCBkb3VibGVfZmFjdG9yaWFsKHVuc2lnbmVkIGkpeyByZXR1cm4gYm9v
c3Q6Om1hdGg6OmRvdWJsZV9mYWN0b3JpYWw8UlQ+KGksIFBvbGljeSgpKTsgfVwKLSAgIHRlbXBs
YXRlIDxjbGFzcyBSVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpw
cm9tb3RlX2FyZ3M8UlQ+Ojp0eXBlIGZhbGxpbmdfZmFjdG9yaWFsKFJUIHgsIHVuc2lnbmVkIG4p
eyByZXR1cm4gYm9vc3Q6Om1hdGg6OmZhbGxpbmdfZmFjdG9yaWFsKHgsIG4sIFBvbGljeSgpKTsg
fVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBSVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1h
dGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQ+Ojp0eXBlIHJpc2luZ19mYWN0b3JpYWwoUlQgeCwg
dW5zaWduZWQgbil7IHJldHVybiBib29zdDo6bWF0aDo6cmlzaW5nX2ZhY3RvcmlhbCh4LCBuLCBQ
b2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgUlQ+XAotICAgaW5saW5lIHR5cGVu
YW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJvbW90ZV9hcmdzPFJUPjo6dHlwZSB0Z2FtbWEoUlQg
eil7IHJldHVybiBib29zdDo6bWF0aDo6dGdhbW1hKHosIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRl
bXBsYXRlIDxjbGFzcyBSVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xz
Ojpwcm9tb3RlX2FyZ3M8UlQ+Ojp0eXBlIHRnYW1tYTFwbTEoUlQgeil7IHJldHVybiBib29zdDo6
bWF0aDo6dGdhbW1hMXBtMSh6LCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3Mg
UlQxLCBjbGFzcyBSVDI+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6
cHJvbW90ZV9hcmdzPFJUMSwgUlQyPjo6dHlwZSB0Z2FtbWEoUlQxIGEsIFJUMiB6KXsgcmV0dXJu
IGJvb3N0OjptYXRoOjp0Z2FtbWEoYSwgeiwgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUg
PGNsYXNzIFJUPlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21v
dGVfYXJnczxSVD46OnR5cGUgbGdhbW1hKFJUIHosIGludCogc2lnbil7IHJldHVybiBib29zdDo6
bWF0aDo6bGdhbW1hKHosIHNpZ24sIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFz
cyBSVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2Fy
Z3M8UlQ+Ojp0eXBlIGxnYW1tYShSVCB4KXsgcmV0dXJuIGJvb3N0OjptYXRoOjpsZ2FtbWEoeCwg
UG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFJUMSwgY2xhc3MgUlQyPlwKLSAg
IGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21vdGVfYXJnczxSVDEsIFJU
Mj46OnR5cGUgdGdhbW1hX2xvd2VyKFJUMSBhLCBSVDIgeil7IHJldHVybiBib29zdDo6bWF0aDo6
dGdhbW1hX2xvd2VyKGEsIHosIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBS
VDEsIGNsYXNzIFJUMj5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpw
cm9tb3RlX2FyZ3M8UlQxLCBSVDI+Ojp0eXBlIGdhbW1hX3EoUlQxIGEsIFJUMiB6KXsgcmV0dXJu
IGJvb3N0OjptYXRoOjpnYW1tYV9xKGEsIHosIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRl
IDxjbGFzcyBSVDEsIGNsYXNzIFJUMj5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6
OnRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQxLCBSVDI+Ojp0eXBlIGdhbW1hX3AoUlQxIGEsIFJUMiB6
KXsgcmV0dXJuIGJvb3N0OjptYXRoOjpnYW1tYV9wKGEsIHosIFBvbGljeSgpKTsgfVwKLVwKLSAg
IHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0
OjptYXRoOjp0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMj46OnR5cGUgdGdhbW1hX2RlbHRhX3Jh
dGlvKFQxIHosIFQyIGRlbHRhKXsgcmV0dXJuIGJvb3N0OjptYXRoOjp0Z2FtbWFfZGVsdGFfcmF0
aW8oeiwgZGVsdGEsIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xh
c3MgVDI+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJvbW90ZV9h
cmdzPFQxLCBUMj46OnR5cGUgdGdhbW1hX3JhdGlvKFQxIGEsIFQyIGIpIHsgcmV0dXJuIGJvb3N0
OjptYXRoOjp0Z2FtbWFfcmF0aW8oYSwgYiwgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUg
PGNsYXNzIFQxLCBjbGFzcyBUMj5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRv
b2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZSBnYW1tYV9wX2Rlcml2YXRpdmUoVDEgYSwg
VDIgeCl7IHJldHVybiBib29zdDo6bWF0aDo6Z2FtbWFfcF9kZXJpdmF0aXZlKGEsIHgsIFBvbGlj
eSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+XAotICAgaW5saW5l
IHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJvbW90ZV9hcmdzPFQxLCBUMj46OnR5cGUg
Z2FtbWFfcF9pbnYoVDEgYSwgVDIgcCl7IHJldHVybiBib29zdDo6bWF0aDo6Z2FtbWFfcF9pbnYo
YSwgcCwgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj5c
Ci0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEs
IFQyPjo6dHlwZSBnYW1tYV9wX2ludmEoVDEgYSwgVDIgcCl7IHJldHVybiBib29zdDo6bWF0aDo6
Z2FtbWFfcF9pbnZhKGEsIHAsIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBU
MSwgY2xhc3MgVDI+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJv
bW90ZV9hcmdzPFQxLCBUMj46OnR5cGUgZ2FtbWFfcV9pbnYoVDEgYSwgVDIgcSl7IHJldHVybiBi
b29zdDo6bWF0aDo6Z2FtbWFfcV9pbnYoYSwgcSwgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxh
dGUgPGNsYXNzIFQxLCBjbGFzcyBUMj5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6
OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VDEsIFQyPjo6dHlwZSBnYW1tYV9xX2ludmEoVDEgYSwgVDIg
cSl7IHJldHVybiBib29zdDo6bWF0aDo6Z2FtbWFfcV9pbnZhKGEsIHEsIFBvbGljeSgpKTsgfVwK
LVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0
aDo6dG9vbHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSBkaWdhbW1hKFQgeCl7IHJldHVybiBib29z
dDo6bWF0aDo6ZGlnYW1tYSh4LCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3Mg
VD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8
VD46OnR5cGUgdHJpZ2FtbWEoVCB4KXsgcmV0dXJuIGJvb3N0OjptYXRoOjp0cmlnYW1tYSh4LCBQ
b2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD5cCi0gICBpbmxpbmUgdHlwZW5h
bWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgcG9seWdhbW1hKGlu
dCBuLCBUIHgpeyByZXR1cm4gYm9vc3Q6Om1hdGg6OnBvbHlnYW1tYShuLCB4LCBQb2xpY3koKSk7
IH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPlwKLSAgIGlubGluZSB0
eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21vdGVfYXJnczxUMSwgVDI+Ojp0eXBlIFwK
LSAgIGh5cG90KFQxIHgsIFQyIHkpeyByZXR1cm4gYm9vc3Q6Om1hdGg6Omh5cG90KHgsIHksIFBv
bGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBSVD5cCi0gICBpbmxpbmUgdHlwZW5h
bWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8UlQ+Ojp0eXBlIGNicnQoUlQgeil7
IHJldHVybiBib29zdDo6bWF0aDo6Y2JydCh6LCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0
ZSA8Y2xhc3MgVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9t
b3RlX2FyZ3M8VD46OnR5cGUgbG9nMXAoVCB4KXsgcmV0dXJuIGJvb3N0OjptYXRoOjpsb2cxcCh4
LCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD5cCi0gICBpbmxpbmUgdHlw
ZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgbG9nMXBteChU
IHgpeyByZXR1cm4gYm9vc3Q6Om1hdGg6OmxvZzFwbXgoeCwgUG9saWN5KCkpOyB9XAotXAotICAg
dGVtcGxhdGUgPGNsYXNzIFQ+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29s
czo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIGV4cG0xKFQgeCl7IHJldHVybiBib29zdDo6bWF0aDo6
ZXhwbTEoeCwgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBU
Mj5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8
VDEsIFQyPjo6dHlwZSBcCi0gICBwb3dtMShjb25zdCBUMSBhLCBjb25zdCBUMiB6KXsgcmV0dXJu
IGJvb3N0OjptYXRoOjpwb3dtMShhLCB6LCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3Rl
X2FyZ3M8VD46OnR5cGUgc3FydDFwbTEoY29uc3QgVCYgdmFsKXsgcmV0dXJuIGJvb3N0OjptYXRo
OjpzcXJ0MXBtMSh2YWwsIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPlwK
LSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21vdGVfYXJnczxUPjo6
dHlwZSBzaW5jX3BpKFQgeCl7IHJldHVybiBib29zdDo6bWF0aDo6c2luY19waSh4LCBQb2xpY3ko
KSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9v
c3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgc2luaGNfcGkoVCB4KXsgcmV0
dXJuIGJvb3N0OjptYXRoOjpzaW5oY19waSh4LCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnBy
b21vdGVfYXJnczxUPjo6dHlwZSBhc2luaChjb25zdCBUIHgpeyByZXR1cm4gYm9vc3Q6Om1hdGg6
OmFzaW5oKHgsIFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+XAotICAg
aW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBl
IGFjb3NoKGNvbnN0IFQgeCl7IHJldHVybiBib29zdDo6bWF0aDo6YWNvc2goeCwgUG9saWN5KCkp
OyB9XAotXAotICAgdGVtcGxhdGU8dHlwZW5hbWUgVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9v
c3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgYXRhbmgoY29uc3QgVCB4KXsg
cmV0dXJuIGJvb3N0OjptYXRoOjphdGFuaCh4LCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0
ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6
ZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQxLCBUMiwgUG9saWN5ID46OnJlc3VsdF90eXBlIGN5bF9i
ZXNzZWxfaihUMSB2LCBUMiB4KVwKLSAgIHsgcmV0dXJuIGJvb3N0OjptYXRoOjpjeWxfYmVzc2Vs
X2oodiwgeCwgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBU
Mj5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OmRldGFpbDo6YmVzc2VsX3RyYWl0
czxUMSwgVDIsIFBvbGljeSA+OjpyZXN1bHRfdHlwZSBjeWxfYmVzc2VsX2pfcHJpbWUoVDEgdiwg
VDIgeClcCi0gICB7IHJldHVybiBib29zdDo6bWF0aDo6Y3lsX2Jlc3NlbF9qX3ByaW1lKHYsIHgs
IFBvbGljeSgpKTsgfVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPlwKLSAgIGlubGluZSB0eXBl
bmFtZSBib29zdDo6bWF0aDo6ZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQsIFQsIFBvbGljeSA+Ojpy
ZXN1bHRfdHlwZSBzcGhfYmVzc2VsKHVuc2lnbmVkIHYsIFQgeClcCi0gICB7IHJldHVybiBib29z
dDo6bWF0aDo6c3BoX2Jlc3NlbCh2LCB4LCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OmRldGFpbDo6YmVzc2Vs
X3RyYWl0czxULCBULCBQb2xpY3kgPjo6cmVzdWx0X3R5cGUgc3BoX2Jlc3NlbF9wcmltZSh1bnNp
Z25lZCB2LCBUIHgpXAotICAgeyByZXR1cm4gYm9vc3Q6Om1hdGg6OnNwaF9iZXNzZWxfcHJpbWUo
diwgeCwgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj5c
Ci0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OmRldGFpbDo6YmVzc2VsX3RyYWl0czxU
MSwgVDIsIFBvbGljeSA+OjpyZXN1bHRfdHlwZSBcCi0gICBjeWxfYmVzc2VsX2koVDEgdiwgVDIg
eCkgeyByZXR1cm4gYm9vc3Q6Om1hdGg6OmN5bF9iZXNzZWxfaSh2LCB4LCBQb2xpY3koKSk7IH1c
Ci1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPlwKLSAgIGlubGluZSB0eXBlbmFt
ZSBib29zdDo6bWF0aDo6ZGV0YWlsOjpiZXNzZWxfdHJhaXRzPFQxLCBUMiwgUG9saWN5ID46OnJl
c3VsdF90eXBlIFwKLSAgIGN5bF9iZXNzZWxfaV9wcmltZShUMSB2LCBUMiB4KSB7IHJldHVybiBi
b29zdDo6bWF0aDo6Y3lsX2Jlc3NlbF9pX3ByaW1lKHYsIHgsIFBvbGljeSgpKTsgfVwKLVwKLSAg
IHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0
OjptYXRoOjpkZXRhaWw6OmJlc3NlbF90cmFpdHM8VDEsIFQyLCBQb2xpY3kgPjo6cmVzdWx0X3R5
cGUgXAotICAgY3lsX2Jlc3NlbF9rKFQxIHYsIFQyIHgpIHsgcmV0dXJuIGJvb3N0OjptYXRoOjpj
eWxfYmVzc2VsX2sodiwgeCwgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFQx
LCBjbGFzcyBUMj5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OmRldGFpbDo6YmVz
c2VsX3RyYWl0czxUMSwgVDIsIFBvbGljeSA+OjpyZXN1bHRfdHlwZSBcCi0gICBjeWxfYmVzc2Vs
X2tfcHJpbWUoVDEgdiwgVDIgeCkgeyByZXR1cm4gYm9vc3Q6Om1hdGg6OmN5bF9iZXNzZWxfa19w
cmltZSh2LCB4LCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNz
IFQyPlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6ZGV0YWlsOjpiZXNzZWxfdHJh
aXRzPFQxLCBUMiwgUG9saWN5ID46OnJlc3VsdF90eXBlIFwKLSAgIGN5bF9uZXVtYW5uKFQxIHYs
IFQyIHgpeyByZXR1cm4gYm9vc3Q6Om1hdGg6OmN5bF9uZXVtYW5uKHYsIHgsIFBvbGljeSgpKTsg
fVwKLVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+XAotICAgaW5saW5lIHR5cGVu
YW1lIGJvb3N0OjptYXRoOjpkZXRhaWw6OmJlc3NlbF90cmFpdHM8VDEsIFQyLCBQb2xpY3kgPjo6
cmVzdWx0X3R5cGUgXAotICAgY3lsX25ldW1hbm5fcHJpbWUoVDEgdiwgVDIgeCl7IHJldHVybiBi
b29zdDo6bWF0aDo6Y3lsX25ldW1hbm5fcHJpbWUodiwgeCwgUG9saWN5KCkpOyB9XAotXAotICAg
dGVtcGxhdGUgPGNsYXNzIFQ+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjpkZXRh
aWw6OmJlc3NlbF90cmFpdHM8VCwgVCwgUG9saWN5ID46OnJlc3VsdF90eXBlIFwKLSAgIHNwaF9u
ZXVtYW5uKHVuc2lnbmVkIHYsIFQgeCl7IHJldHVybiBib29zdDo6bWF0aDo6c3BoX25ldW1hbm4o
diwgeCwgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFQ+XAotICAgaW5saW5l
IHR5cGVuYW1lIGJvb3N0OjptYXRoOjpkZXRhaWw6OmJlc3NlbF90cmFpdHM8VCwgVCwgUG9saWN5
ID46OnJlc3VsdF90eXBlIFwKLSAgIHNwaF9uZXVtYW5uX3ByaW1lKHVuc2lnbmVkIHYsIFQgeCl7
IHJldHVybiBib29zdDo6bWF0aDo6c3BoX25ldW1hbm5fcHJpbWUodiwgeCwgUG9saWN5KCkpOyB9
XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFQ+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0Ojpt
YXRoOjpkZXRhaWw6OmJlc3NlbF90cmFpdHM8VCwgVCwgUG9saWN5ID46OnJlc3VsdF90eXBlIGN5
bF9iZXNzZWxfal96ZXJvKFQgdiwgaW50IG0pXAotICAgeyByZXR1cm4gYm9vc3Q6Om1hdGg6OmN5
bF9iZXNzZWxfal96ZXJvKHYsIG0sIFBvbGljeSgpKTsgfVwKLVwKLXRlbXBsYXRlIDxjbGFzcyBP
dXRwdXRJdGVyYXRvciwgY2xhc3MgVD5cCi0gICBpbmxpbmUgdm9pZCBjeWxfYmVzc2VsX2pfemVy
byhUIHYsXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0X2luZGV4
LFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlcl9vZl96
ZXJvcyxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRJdGVyYXRvciBv
dXRfaXQpXAotICAgeyBib29zdDo6bWF0aDo6Y3lsX2Jlc3NlbF9qX3plcm8odiwgc3RhcnRfaW5k
ZXgsIG51bWJlcl9vZl96ZXJvcywgb3V0X2l0LCBQb2xpY3koKSk7IH1cCi1cCi0gICB0ZW1wbGF0
ZSA8Y2xhc3MgVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OmRldGFpbDo6YmVz
c2VsX3RyYWl0czxULCBULCBQb2xpY3kgPjo6cmVzdWx0X3R5cGUgY3lsX25ldW1hbm5femVybyhU
IHYsIGludCBtKVwKLSAgIHsgcmV0dXJuIGJvb3N0OjptYXRoOjpjeWxfbmV1bWFubl96ZXJvKHYs
IG0sIFBvbGljeSgpKTsgfVwKLVwKLXRlbXBsYXRlIDxjbGFzcyBPdXRwdXRJdGVyYXRvciwgY2xh
c3MgVD5cCi0gICBpbmxpbmUgdm9pZCBjeWxfbmV1bWFubl96ZXJvKFQgdixcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydF9pbmRleCxcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlcl9vZl96ZXJvcyxcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE91dHB1dEl0ZXJhdG9yIG91dF9pdClcCi0gICB7IGJvb3N0Ojpt
YXRoOjpjeWxfbmV1bWFubl96ZXJvKHYsIHN0YXJ0X2luZGV4LCBudW1iZXJfb2ZfemVyb3MsIG91
dF9pdCwgUG9saWN5KCkpOyB9XAotXAotICAgdGVtcGxhdGUgPGNsYXNzIFQ+XAotICAgaW5saW5l
IHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0eXBlIHNpbl9w
aShUIHgpeyByZXR1cm4gYm9vc3Q6Om1hdGg6OnNpbl9waSh4KTsgfVwKLVwKLSAgIHRlbXBsYXRl
IDxjbGFzcyBUPlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21v
dGVfYXJnczxUPjo6dHlwZSBjb3NfcGkoVCB4KXsgcmV0dXJuIGJvb3N0OjptYXRoOjpjb3NfcGko
eCk7IH1cCi1cCi0gICB1c2luZyBib29zdDo6bWF0aDo6ZnBjbGFzc2lmeTtcCi0gICB1c2luZyBi
b29zdDo6bWF0aDo6aXNmaW5pdGU7XAotICAgdXNpbmcgYm9vc3Q6Om1hdGg6OmlzaW5mO1wKLSAg
IHVzaW5nIGJvb3N0OjptYXRoOjppc25hbjtcCi0gICB1c2luZyBib29zdDo6bWF0aDo6aXNub3Jt
YWw7XAotICAgdXNpbmcgYm9vc3Q6Om1hdGg6OnNpZ25iaXQ7XAotICAgdXNpbmcgYm9vc3Q6Om1h
dGg6OnNpZ247XAotICAgdXNpbmcgYm9vc3Q6Om1hdGg6OmNvcHlzaWduO1wKLSAgIHVzaW5nIGJv
b3N0OjptYXRoOjpjaGFuZ2VzaWduO1wKLSAgIFwKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBVPlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9vbHM6OnByb21vdGVfYXJn
czxULFU+Ojp0eXBlIGV4cGludChUIGNvbnN0JiB6LCBVIGNvbnN0JiB1KVwKLSAgIHsgcmV0dXJu
IGJvb3N0OjptYXRoOjpleHBpbnQoeiwgdSwgUG9saWN5KCkpOyB9XAotICAgXAotICAgdGVtcGxh
dGUgPGNsYXNzIFQ+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJv
bW90ZV9hcmdzPFQ+Ojp0eXBlIGV4cGludChUIHopeyByZXR1cm4gYm9vc3Q6Om1hdGg6OmV4cGlu
dCh6LCBQb2xpY3koKSk7IH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD5cCi0gICBpbmxp
bmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgemV0
YShUIHMpeyByZXR1cm4gYm9vc3Q6Om1hdGg6OnpldGEocywgUG9saWN5KCkpOyB9XAotICAgXAot
ICAgdGVtcGxhdGUgPGNsYXNzIFQ+XAotICAgaW5saW5lIFQgcm91bmQoY29uc3QgVCYgdil7IHVz
aW5nIGJvb3N0OjptYXRoOjpyb3VuZDsgcmV0dXJuIHJvdW5kKHYsIFBvbGljeSgpKTsgfVwKLSAg
IFwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPlwKLSAgIGlubGluZSBpbnQgaXJvdW5kKGNvbnN0IFQm
IHYpeyB1c2luZyBib29zdDo6bWF0aDo6aXJvdW5kOyByZXR1cm4gaXJvdW5kKHYsIFBvbGljeSgp
KTsgfVwKLSAgIFwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPlwKLSAgIGlubGluZSBsb25nIGxyb3Vu
ZChjb25zdCBUJiB2KXsgdXNpbmcgYm9vc3Q6Om1hdGg6Omxyb3VuZDsgcmV0dXJuIGxyb3VuZCh2
LCBQb2xpY3koKSk7IH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD5cCi0gICBpbmxpbmUg
VCB0cnVuYyhjb25zdCBUJiB2KXsgdXNpbmcgYm9vc3Q6Om1hdGg6OnRydW5jOyByZXR1cm4gdHJ1
bmModiwgUG9saWN5KCkpOyB9XAotICAgXAotICAgdGVtcGxhdGUgPGNsYXNzIFQ+XAotICAgaW5s
aW5lIGludCBpdHJ1bmMoY29uc3QgVCYgdil7IHVzaW5nIGJvb3N0OjptYXRoOjppdHJ1bmM7IHJl
dHVybiBpdHJ1bmModiwgUG9saWN5KCkpOyB9XAotICAgXAotICAgdGVtcGxhdGUgPGNsYXNzIFQ+
XAotICAgaW5saW5lIGxvbmcgbHRydW5jKGNvbnN0IFQmIHYpeyB1c2luZyBib29zdDo6bWF0aDo6
bHRydW5jOyByZXR1cm4gbHRydW5jKHYsIFBvbGljeSgpKTsgfVwKLSAgIFwKLSAgIHRlbXBsYXRl
IDxjbGFzcyBUPlwKLSAgIGlubGluZSBUIG1vZGYoY29uc3QgVCYgdiwgVCogaXBhcnQpeyB1c2lu
ZyBib29zdDo6bWF0aDo6bW9kZjsgcmV0dXJuIG1vZGYodiwgaXBhcnQsIFBvbGljeSgpKTsgfVwK
LSAgIFwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPlwKLSAgIGlubGluZSBUIG1vZGYoY29uc3QgVCYg
diwgaW50KiBpcGFydCl7IHVzaW5nIGJvb3N0OjptYXRoOjptb2RmOyByZXR1cm4gbW9kZih2LCBp
cGFydCwgUG9saWN5KCkpOyB9XAotICAgXAotICAgdGVtcGxhdGUgPGNsYXNzIFQ+XAotICAgaW5s
aW5lIFQgbW9kZihjb25zdCBUJiB2LCBsb25nKiBpcGFydCl7IHVzaW5nIGJvb3N0OjptYXRoOjpt
b2RmOyByZXR1cm4gbW9kZih2LCBpcGFydCwgUG9saWN5KCkpOyB9XAotICAgXAotICAgdGVtcGxh
dGUgPGludCBOLCBjbGFzcyBUPlwKLSAgIGlubGluZSB0eXBlbmFtZSBib29zdDo6bWF0aDo6dG9v
bHM6OnByb21vdGVfYXJnczxUPjo6dHlwZSBwb3coVCB2KXsgcmV0dXJuIGJvb3N0OjptYXRoOjpw
b3c8Tj4odiwgUG9saWN5KCkpOyB9XAotICAgXAotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFQgbmV4
dGFmdGVyKGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIpeyByZXR1cm4gYm9vc3Q6Om1hdGg6Om5leHRh
ZnRlcihhLCBiLCBQb2xpY3koKSk7IH1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gVCBmbG9hdF9u
ZXh0KGNvbnN0IFQmIGEpeyByZXR1cm4gYm9vc3Q6Om1hdGg6OmZsb2F0X25leHQoYSwgUG9saWN5
KCkpOyB9XAotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFQgZmxvYXRfcHJpb3IoY29uc3QgVCYgYSl7
IHJldHVybiBib29zdDo6bWF0aDo6ZmxvYXRfcHJpb3IoYSwgUG9saWN5KCkpOyB9XAotICAgdGVt
cGxhdGUgPGNsYXNzIFQ+IFQgZmxvYXRfZGlzdGFuY2UoY29uc3QgVCYgYSwgY29uc3QgVCYgYil7
IHJldHVybiBib29zdDo6bWF0aDo6ZmxvYXRfZGlzdGFuY2UoYSwgYiwgUG9saWN5KCkpOyB9XAot
ICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFQgdWxwKGNvbnN0IFQmIGEpeyByZXR1cm4gYm9vc3Q6Om1h
dGg6OnVscChhLCBQb2xpY3koKSk7IH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgUlQxLCBj
bGFzcyBSVDI+XAotICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJvbW90
ZV9hcmdzPFJUMSwgUlQyPjo6dHlwZSBvd2Vuc190KFJUMSBhLCBSVDIgeil7IHJldHVybiBib29z
dDo6bWF0aDo6b3dlbnNfdChhLCB6LCBQb2xpY3koKSk7IH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgVDEsIGNsYXNzIFQyPlwKLSAgIGlubGluZSBzdGQ6OmNvbXBsZXg8dHlwZW5hbWUgYm9v
c3Q6Om1hdGg6OmRldGFpbDo6YmVzc2VsX3RyYWl0czxUMSwgVDIsIFBvbGljeSA+OjpyZXN1bHRf
dHlwZT4gY3lsX2hhbmtlbF8xKFQxIHYsIFQyIHgpXAotICAgeyAgcmV0dXJuIGJvb3N0OjptYXRo
OjpjeWxfaGFua2VsXzEodiwgeCwgUG9saWN5KCkpOyB9XAotICAgXAotICAgdGVtcGxhdGUgPGNs
YXNzIFQxLCBjbGFzcyBUMj5cCi0gICBpbmxpbmUgc3RkOjpjb21wbGV4PHR5cGVuYW1lIGJvb3N0
OjptYXRoOjpkZXRhaWw6OmJlc3NlbF90cmFpdHM8VDEsIFQyLCBQb2xpY3kgPjo6cmVzdWx0X3R5
cGU+IGN5bF9oYW5rZWxfMihUMSB2LCBUMiB4KVwKLSAgIHsgcmV0dXJuIGJvb3N0OjptYXRoOjpj
eWxfaGFua2VsXzIodiwgeCwgUG9saWN5KCkpOyB9XAotICAgXAotICAgdGVtcGxhdGUgPGNsYXNz
IFQxLCBjbGFzcyBUMj5cCi0gICBpbmxpbmUgc3RkOjpjb21wbGV4PHR5cGVuYW1lIGJvb3N0Ojpt
YXRoOjpkZXRhaWw6OmJlc3NlbF90cmFpdHM8VDEsIFQyLCBQb2xpY3kgPjo6cmVzdWx0X3R5cGU+
IHNwaF9oYW5rZWxfMShUMSB2LCBUMiB4KVwKLSAgIHsgcmV0dXJuIGJvb3N0OjptYXRoOjpzcGhf
aGFua2VsXzEodiwgeCwgUG9saWN5KCkpOyB9XAotICAgXAotICAgdGVtcGxhdGUgPGNsYXNzIFQx
LCBjbGFzcyBUMj5cCi0gICBpbmxpbmUgc3RkOjpjb21wbGV4PHR5cGVuYW1lIGJvb3N0OjptYXRo
OjpkZXRhaWw6OmJlc3NlbF90cmFpdHM8VDEsIFQyLCBQb2xpY3kgPjo6cmVzdWx0X3R5cGU+IHNw
aF9oYW5rZWxfMihUMSB2LCBUMiB4KVwKLSAgIHsgcmV0dXJuIGJvb3N0OjptYXRoOjpzcGhfaGFu
a2VsXzIodiwgeCwgUG9saWN5KCkpOyB9XAotICAgXAotICAgdGVtcGxhdGUgPGNsYXNzIFQ+XAot
ICAgaW5saW5lIHR5cGVuYW1lIGJvb3N0OjptYXRoOjp0b29sczo6cHJvbW90ZV9hcmdzPFQ+Ojp0
eXBlIGphY29iaV9lbGxpcHRpYyhUIGssIFQgdGhldGEsIFQqIHBjbiwgVCogcGRuKVwKLSAgIHsg
cmV0dXJuIGJvb3N0OjptYXRoOjpqYWNvYmlfZWxsaXB0aWMoaywgdGhldGEsIHBjbiwgcGRuLCBQ
b2xpY3koKSk7IH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3MgVD5cCi0gICBp
bmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46OnR5
cGUgamFjb2JpX3NuKFUgaywgVCB0aGV0YSlcCi0gICB7IHJldHVybiBib29zdDo6bWF0aDo6amFj
b2JpX3NuKGssIHRoZXRhLCBQb2xpY3koKSk7IH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MgVT5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9t
b3RlX2FyZ3M8VCwgVT46OnR5cGUgamFjb2JpX2NuKFQgaywgVSB0aGV0YSlcCi0gICB7IHJldHVy
biBib29zdDo6bWF0aDo6amFjb2JpX2NuKGssIHRoZXRhLCBQb2xpY3koKSk7IH1cCi0gICBcCi0g
ICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6
Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46OnR5cGUgamFjb2JpX2RuKFQgaywgVSB0
aGV0YSlcCi0gICB7IHJldHVybiBib29zdDo6bWF0aDo6amFjb2JpX2RuKGssIHRoZXRhLCBQb2xp
Y3koKSk7IH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT5cCi0gICBpbmxp
bmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46OnR5cGUg
amFjb2JpX2NkKFQgaywgVSB0aGV0YSlcCi0gICB7IHJldHVybiBib29zdDo6bWF0aDo6amFjb2Jp
X2NkKGssIHRoZXRhLCBQb2xpY3koKSk7IH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgVT5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3Rl
X2FyZ3M8VCwgVT46OnR5cGUgamFjb2JpX2RjKFQgaywgVSB0aGV0YSlcCi0gICB7IHJldHVybiBi
b29zdDo6bWF0aDo6amFjb2JpX2RjKGssIHRoZXRhLCBQb2xpY3koKSk7IH1cCi0gICBcCi0gICB0
ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1h
dGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46OnR5cGUgamFjb2JpX25zKFQgaywgVSB0aGV0
YSlcCi0gICB7IHJldHVybiBib29zdDo6bWF0aDo6amFjb2JpX25zKGssIHRoZXRhLCBQb2xpY3ko
KSk7IH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT5cCi0gICBpbmxpbmUg
dHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46OnR5cGUgamFj
b2JpX3NkKFQgaywgVSB0aGV0YSlcCi0gICB7IHJldHVybiBib29zdDo6bWF0aDo6amFjb2JpX3Nk
KGssIHRoZXRhLCBQb2xpY3koKSk7IH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgVT5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2Fy
Z3M8VCwgVT46OnR5cGUgamFjb2JpX2RzKFQgaywgVSB0aGV0YSlcCi0gICB7IHJldHVybiBib29z
dDo6bWF0aDo6amFjb2JpX2RzKGssIHRoZXRhLCBQb2xpY3koKSk7IH1cCi0gICBcCi0gICB0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6
OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46OnR5cGUgamFjb2JpX25jKFQgaywgVSB0aGV0YSlc
Ci0gICB7IHJldHVybiBib29zdDo6bWF0aDo6amFjb2JpX25jKGssIHRoZXRhLCBQb2xpY3koKSk7
IH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT5cCi0gICBpbmxpbmUgdHlw
ZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46OnR5cGUgamFjb2Jp
X25kKFQgaywgVSB0aGV0YSlcCi0gICB7IHJldHVybiBib29zdDo6bWF0aDo6amFjb2JpX25kKGss
IHRoZXRhLCBQb2xpY3koKSk7IH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
VT5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8
VCwgVT46OnR5cGUgamFjb2JpX3NjKFQgaywgVSB0aGV0YSlcCi0gICB7IHJldHVybiBib29zdDo6
bWF0aDo6amFjb2JpX3NjKGssIHRoZXRhLCBQb2xpY3koKSk7IH1cCi0gICBcCi0gICB0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgVT5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRv
b2xzOjpwcm9tb3RlX2FyZ3M8VCwgVT46OnR5cGUgamFjb2JpX2NzKFQgaywgVSB0aGV0YSlcCi0g
ICB7IHJldHVybiBib29zdDo6bWF0aDo6amFjb2JpX2NzKGssIHRoZXRhLCBQb2xpY3koKSk7IH1c
Ci0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6
Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgYWlyeV9haShUIHgpXAotICAgeyAg
cmV0dXJuIGJvb3N0OjptYXRoOjphaXJ5X2FpKHgsIFBvbGljeSgpKTsgIH1cCi0gICBcCi0gICB0
ZW1wbGF0ZSA8Y2xhc3MgVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xz
Ojpwcm9tb3RlX2FyZ3M8VD46OnR5cGUgYWlyeV9iaShUIHgpXAotICAgeyAgcmV0dXJuIGJvb3N0
OjptYXRoOjphaXJ5X2JpKHgsIFBvbGljeSgpKTsgIH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2Fy
Z3M8VD46OnR5cGUgYWlyeV9haV9wcmltZShUIHgpXAotICAgeyAgcmV0dXJuIGJvb3N0OjptYXRo
OjphaXJ5X2FpX3ByaW1lKHgsIFBvbGljeSgpKTsgIH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVD5cCi0gICBpbmxpbmUgdHlwZW5hbWUgYm9vc3Q6Om1hdGg6OnRvb2xzOjpwcm9tb3RlX2Fy
Z3M8VD46OnR5cGUgYWlyeV9iaV9wcmltZShUIHgpXAotICAgeyAgcmV0dXJuIGJvb3N0OjptYXRo
OjphaXJ5X2JpX3ByaW1lKHgsIFBvbGljeSgpKTsgIH1cCi0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVD5cCi0gICBpbmxpbmUgVCBhaXJ5X2FpX3plcm8oaW50IG0pXAotICAgeyByZXR1cm4gYm9v
c3Q6Om1hdGg6OmFpcnlfYWlfemVybzxUPihtLCBQb2xpY3koKSk7IH1cCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgVCwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+XAotICAgT3V0cHV0SXRlcmF0b3IgYWlyeV9h
aV96ZXJvKGludCBzdGFydF9pbmRleCwgdW5zaWduZWQgbnVtYmVyX29mX3plcm9zLCBPdXRwdXRJ
dGVyYXRvciBvdXRfaXQpXAotICAgeyByZXR1cm4gYm9vc3Q6Om1hdGg6OmFpcnlfYWlfemVybzxU
PihzdGFydF9pbmRleCwgbnVtYmVyX29mX3plcm9zLCBvdXRfaXQsIFBvbGljeSgpKTsgfVwKLSAg
IFwKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPlwKLSAgIGlubGluZSBUIGFpcnlfYmlfemVybyhpbnQg
bSlcCi0gICB7IHJldHVybiBib29zdDo6bWF0aDo6YWlyeV9iaV96ZXJvPFQ+KG0sIFBvbGljeSgp
KTsgfVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBPdXRwdXRJdGVyYXRvcj5cCi0gICBP
dXRwdXRJdGVyYXRvciBhaXJ5X2JpX3plcm8oaW50IHN0YXJ0X2luZGV4LCB1bnNpZ25lZCBudW1i
ZXJfb2ZfemVyb3MsIE91dHB1dEl0ZXJhdG9yIG91dF9pdClcCi0gICB7IHJldHVybiBib29zdDo6
bWF0aDo6YWlyeV9iaV96ZXJvPFQ+KHN0YXJ0X2luZGV4LCBudW1iZXJfb2ZfemVyb3MsIG91dF9p
dCwgUG9saWN5KCkpOyB9XAotICAgXAotICAgdGVtcGxhdGUgPGNsYXNzIFQ+XAotICAgVCBiZXJu
b3VsbGlfYjJuKGNvbnN0IGludCBpKVwKLSAgIHsgcmV0dXJuIGJvb3N0OjptYXRoOjpiZXJub3Vs
bGlfYjJuPFQ+KGksIFBvbGljeSgpKTsgfVwKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBP
dXRwdXRJdGVyYXRvcj5cCi0gICBPdXRwdXRJdGVyYXRvciBiZXJub3VsbGlfYjJuKGludCBzdGFy
dF9pbmRleCwgdW5zaWduZWQgbnVtYmVyX29mX2Jlcm5vdWxsaXNfYjJuLCBPdXRwdXRJdGVyYXRv
ciBvdXRfaXQpXAotICAgeyByZXR1cm4gYm9vc3Q6Om1hdGg6OmJlcm5vdWxsaV9iMm48VD4oc3Rh
cnRfaW5kZXgsIG51bWJlcl9vZl9iZXJub3VsbGlzX2Iybiwgb3V0X2l0LCBQb2xpY3koKSk7IH1c
Ci0gICBcCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD5cCi0gICBUIHRhbmdlbnRfdDJuKGNvbnN0IGlu
dCBpKVwKLSAgIHsgcmV0dXJuIGJvb3N0OjptYXRoOjp0YW5nZW50X3QybjxUPihpLCBQb2xpY3ko
KSk7IH1cCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+XAotICAg
T3V0cHV0SXRlcmF0b3IgdGFuZ2VudF90Mm4oaW50IHN0YXJ0X2luZGV4LCB1bnNpZ25lZCBudW1i
ZXJfb2ZfYmVybm91bGxpc19iMm4sIE91dHB1dEl0ZXJhdG9yIG91dF9pdClcCi0gICB7IHJldHVy
biBib29zdDo6bWF0aDo6dGFuZ2VudF90Mm48VD4oc3RhcnRfaW5kZXgsIG51bWJlcl9vZl9iZXJu
b3VsbGlzX2Iybiwgb3V0X2l0LCBQb2xpY3koKSk7IH1cCi0gICBcCi0KLQotCi0KLQotI2VuZGlm
IC8vIEJPT1NUX01BVEhfU1BFQ0lBTF9NQVRIX0ZXRF9IUFAKLQotCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tYXRoL3Rvb2xzL2NvbmZpZy5o
cHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tYXRoL3Rvb2xz
L2NvbmZpZy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMzFmYWNiOTg1NjZl
ZGRkMGNkNTdjNGQwNDM1NjIxMjllNTk1YmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvbWF0aC90b29scy9jb25maWcuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDU4ICswLDAgQEAK
LS8vICBDb3B5cmlnaHQgKGMpIDIwMDYtNyBKb2huIE1hZGRvY2sKLS8vICBVc2UsIG1vZGlmaWNh
dGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZQotLy8gIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlCi0vLyAgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAu
dHh0KQotCi0jaWZuZGVmIEJPT1NUX01BVEhfVE9PTFNfQ09ORklHX0hQUAotI2RlZmluZSBCT09T
VF9NQVRIX1RPT0xTX0NPTkZJR19IUFAKLQotI2lmZGVmIF9NU0NfVkVSCi0jcHJhZ21hIG9uY2UK
LSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9w
cmVkZWYuaD4KLSNpbmNsdWRlIDxib29zdC9jc3RkaW50LmhwcD4gLy8gZm9yIGJvb3N0Ojp1aW50
bWF4X3QKLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvdHlwZV90cmFpdHMvaXNfaW50ZWdyYWwuaHBwPgotI2luY2x1ZGUgPGFsZ29yaXRobT4g
IC8vIGZvciBtaW4gYW5kIG1heAotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy9ub190cjEvY21hdGgu
aHBwPgotI2luY2x1ZGUgPGNsaW1pdHM+Ci0jaW5jbHVkZSA8Y2Zsb2F0PgotI2lmIChkZWZpbmVk
KG1hY2ludG9zaCkgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19BUFBMRV9DQ19f
KSkKLSMgIGluY2x1ZGUgPG1hdGguaD4KLSNlbmRpZgotI2lmbmRlZiBCT09TVF9OT19MSU1JVFNf
Q09NUElMRV9USU1FX0NPTlNUQU5UUwotIyAgaW5jbHVkZSA8bGltaXRzPgotI2VuZGlmCi0KLSNp
bmNsdWRlIDxib29zdC9tYXRoL3Rvb2xzL3VzZXIuaHBwPgotCi0jaWYgKGRlZmluZWQoX19DWUdX
SU5fXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSBcCi0g
ICB8fCAoZGVmaW5lZChfX2hwcGEpICYmICFkZWZpbmVkKF9fT3BlbkJTRF9fKSkgfHwgKGRlZmlu
ZWQoX19OT19MT05HX0RPVUJMRV9NQVRIKSAmJiAoREJMX01BTlRfRElHICE9IExEQkxfTUFOVF9E
SUcpKSkgXAotICAgJiYgIWRlZmluZWQoQk9PU1RfTUFUSF9OT19MT05HX0RPVUJMRV9NQVRIX0ZV
TkNUSU9OUykKLS8vIyAgZGVmaW5lIEJPT1NUX01BVEhfTk9fTE9OR19ET1VCTEVfTUFUSF9GVU5D
VElPTlMKLSNlbmRpZgotI2lmIEJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCBCT09TVF9U
RVNURURfQVQoMHg1ODIpKQotLy8KLS8vIEJvcmxhbmQgcG9zdCA1LjguMiB1c2VzIERpbmt1bXdh
cmUncyBzdGQgQyBsaWIgd2hpY2gKLS8vIGRvZXNuJ3QgaGF2ZSB0cnVlIGxvbmcgZG91YmxlIHBy
ZWNpc2lvbi4gIEVhcmxpZXIKLS8vIHZlcnNpb25zIGFyZSBwcm9ibGVtYXRpYyB0b286Ci0vLwot
IyAgZGVmaW5lIEJPT1NUX01BVEhfTk9fUkVBTF9DT05DRVBUX1RFU1RTCi0jICBkZWZpbmUgQk9P
U1RfTUFUSF9OT19MT05HX0RPVUJMRV9NQVRIX0ZVTkNUSU9OUwotIyAgZGVmaW5lIEJPT1NUX01B
VEhfQ09OVFJPTF9GUCBfY29udHJvbDg3KE1DV19FTSxNQ1dfRU0pCi0jICBpbmNsdWRlIDxmbG9h
dC5oPgotI2VuZGlmCi0jaWZkZWYgX19JQk1DUFBfXwotLy8KLS8vIEZvciByZWFzb25zIEkgZG9u
J3QgdW5zZXJzdGFuZCwgdGhlIHRlc3RzIHdpdGggSU1CJ3MgY29tcGlsZXIgYWxsCi0vLyBwYXNz
IGF0IGxvbmcgZG91YmxlIHByZWNpc2lvbiwgYnV0IGZhaWwgd2l0aCByZWFsX2NvbmNlcHQsIHRo
b3NlIHRlc3RzCi0vLyBhcmUgZGlzYWJsZWQgZm9yIG5vdy4gIChKTSAyMDEyKS4KLSMgIGRlZmlu
ZSBCT09TVF9NQVRIX05PX1JFQUxfQ09OQ0VQVF9URVNUUwotI2VuZGlmCi0jaWZkZWYgc3VuCi0v
LyBBbnkgdXNlIG9mIF9fZmxvYXQxMjggaW4gcHJvZ3JhbSBzdGFydHVwIGNvZGUgY2F1c2VzIGEg
c2VnZmF1bHQgICh0ZXN0ZWQgSk0gMjAxNSwgU29sYXJpcyAxMSkuCi0jICBkZWZpbmUgQk9PU1Rf
TUFUSF9ESVNBQkxFX0ZMT0FUMTI4Ci0jZW5kaWYKLSNpZmRlZiBfX0hBSUtVX18KLS8vCi0vLyBO
b3Qgc3VyZSB3aGF0J3MgdXAgd2l0aCB0aGUgbWF0aCBkZXRlY3Rpb24gb24gSGFpa3UsIGJ1dCBs
aW5raW5nIGZhaWxzIHdpdGgKLS8vIGZsb2F0MTI4IGNvZGUgZW5hYmxlZCwgYW5kIHdlIGRvbid0
IGhhdmUgYW4gaW1wbGVtZW50YXRpb24gb2YgX19leHBsLCBzbwotLy8gZGlzYWJsaW5nIGxvbmcg
ZG91YmxlIGZ1bmN0aW9ucyBmb3Igbm93IGFzIHdlbGwuCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9E
SVNBQkxFX0ZMT0FUMTI4Ci0jICBkZWZpbmUgQk9PU1RfTUFUSF9OT19MT05HX0RPVUJMRV9NQVRI
X0ZVTkNUSU9OUwotI2VuZGlmCi0jaWYgKGRlZmluZWQobWFjaW50b3NoKSB8fCBkZWZpbmVkKF9f
QVBQTEVfXykgfHwgZGVmaW5lZChfX0FQUExFX0NDX18pKSAmJiAoKExEQkxfTUFOVF9ESUcgPT0g
MTA2KSB8fCAoX19MREJMX01BTlRfRElHX18gPT0gMTA2KSkgJiYgIWRlZmluZWQoQk9PU1RfTUFU
SF9OT19MT05HX0RPVUJMRV9NQVRIX0ZVTkNUSU9OUykKLS8vCi0vLyBEYXJ3aW4ncyByYXRoZXIg
c3RyYW5nZSAiZG91YmxlIGRvdWJsZSIgaXMgcmF0aGVyIGhhcmQgdG8KLS8vIHN1cHBvcnQsIGl0
IHNob3VsZCBiZSBwb3NzaWJsZSBnaXZlbiBlbm91Z2ggZWZmb3J0IHRob3VnaC4uLgotLy8KLSMg
IGRlZmluZSBCT09TVF9NQVRIX05PX0xPTkdfRE9VQkxFX01BVEhfRlVOQ1RJT05TCi0jZW5kaWYK
LSNpZiBkZWZpbmVkKHVuaXgpICYmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgKF9fSU5U
RUxfQ09NUElMRVIgPD0gMTAwMCkgJiYgIWRlZmluZWQoQk9PU1RfTUFUSF9OT19MT05HX0RPVUJM
RV9NQVRIX0ZVTkNUSU9OUykKLS8vCi0vLyBJbnRlbCBjb21waWxlciBwcmlvciB0byB2ZXJzaW9u
IDEwIGhhcyBzcG9yYWRpYyBwcm9ibGVtcwotLy8gY2FsbGluZyB0aGUgbG9uZyBkb3VibGUgb3Zl
cmxvYWRzIG9mIHRoZSBzdGQgbGliIG1hdGggZnVuY3Rpb25zOgotLy8gY2FsbGluZyA6OnBvd2wg
aXMgT0ssIGJ1dCBzdGQ6OnBvdyhsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpIAotLy8gbWF5IHNl
Z2ZhdWx0IGRlcGVuZGluZyB1cG9uIHRoZSB2YWx1ZSBvZiB0aGUgYXJndW1lbnRzIHBhc3NlZCAK
LS8vIGFuZCB0aGUgc3BlY2lmaWMgTGludXggZGlzdHJpYnV0aW9uLgotLy8KLS8vIFdlJ2xsIGJl
IGNvbnNlcnZhdGl2ZSBhbmQgZGlzYWJsZSBsb25nIGRvdWJsZSBzdXBwb3J0IGZvciB0aGlzIGNv
bXBpbGVyLgotLy8KLS8vIENvbW1lbnQgb3V0IHRoaXMgI2RlZmluZSBhbmQgdHJ5IGJ1aWxkaW5n
IHRoZSB0ZXN0cyB0byBkZXRlcm1pbmUgd2hldGhlcgotLy8geW91ciBJbnRlbCBjb21waWxlciB2
ZXJzaW9uIGhhcyB0aGlzIGlzc3VlIG9yIG5vdC4KLS8vCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9O
T19MT05HX0RPVUJMRV9NQVRIX0ZVTkNUSU9OUwotI2VuZGlmCi0jaWYgZGVmaW5lZCh1bml4KSAm
JiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCi0vLwotLy8gSW50ZWwgY29tcGlsZXIgaGFzIHNw
b3JhZGljIGlzc3VlcyBjb21waWxpbmcgc3RkOjpmcGNsYXNzaWZ5IGRlcGVuZGluZyBvbgotLy8g
dGhlIGV4YWN0IE9TIHZlcnNpb24gdXNlZC4gIFVzZSBvdXIgb3duIGNvZGUgZm9yIHRoaXMgYXMg
d2Uga25vdyBpdCB3b3JrcwotLy8gd2VsbCBvbiBJbnRlbCBwcm9jZXNzb3JzOgotLy8KLSNkZWZp
bmUgQk9PU1RfTUFUSF9ESVNBQkxFX1NURF9GUENMQVNTSUZZCi0jZW5kaWYKLQotI2lmIGRlZmlu
ZWQoQk9PU1RfTVNWQykgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkKLSAgIC8vIEJldHRlciBzYWZl
IHRoYW4gc29ycnksIG91ciB0ZXN0cyBkb24ndCBzdXBwb3J0IGhhcmR3YXJlIGV4Y2VwdGlvbnM6
Ci0jICBkZWZpbmUgQk9PU1RfTUFUSF9DT05UUk9MX0ZQIF9jb250cm9sODcoTUNXX0VNLE1DV19F
TSkKLSNlbmRpZgotCi0jaWZkZWYgX19JQk1DUFBfXwotIyAgZGVmaW5lIEJPT1NUX01BVEhfTk9f
REVEVUNFRF9GVU5DVElPTl9QT0lOVEVSUwotI2VuZGlmCi0KLSNpZiAoZGVmaW5lZChfX1NURENf
VkVSU0lPTl9fKSAmJiAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDEpKQotIyAgZGVmaW5lIEJP
T1NUX01BVEhfVVNFX0M5OQotI2VuZGlmCi0KLSNpZiAoZGVmaW5lZChfX2hwdXgpICYmICFkZWZp
bmVkKF9faHBwYSkpCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9VU0VfQzk5Ci0jZW5kaWYKLQotI2lm
IGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0M5OSkKLSMgIGRlZmlu
ZSBCT09TVF9NQVRIX1VTRV9DOTkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfTElCQ1BQX1ZFUlNJ
T04pICYmICFkZWZpbmVkKF9NU0NfVkVSKQotIyAgZGVmaW5lIEJPT1NUX01BVEhfVVNFX0M5OQot
I2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19IUF9hQ0MpIHx8
IGRlZmluZWQoQk9PU1RfSU5URUwpIFwKLSAgfHwgZGVmaW5lZChCT09TVF9OT19OQVRJVkVfTE9O
R19ET1VCTEVfRlBfQ0xBU1NJRlkpIFwKLSAgfHwgKGRlZmluZWQoX19HTlVDX18pICYmICFkZWZp
bmVkKEJPT1NUX01BVEhfVVNFX0M5OSkpXAotICB8fCBkZWZpbmVkKEJPT1NUX01BVEhfTk9fTE9O
R19ET1VCTEVfTUFUSF9GVU5DVElPTlMpCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9OT19OQVRJVkVf
TE9OR19ET1VCTEVfRlBfQ0xBU1NJRlkKLSNlbmRpZgotCi0jaWYgQk9PU1RfV09SS0FST1VORChf
X1NVTlBST19DQywgPD0gMHg1OTApCi0KLSMgIGluY2x1ZGUgImJvb3N0L3R5cGUuaHBwIgotIyAg
aW5jbHVkZSAiYm9vc3Qvbm9uX3R5cGUuaHBwIgotCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9FWFBM
SUNJVF9URU1QTEFURV9UWVBFKHQpICAgICAgICAgYm9vc3Q6OnR5cGU8dD4qID0gMAotIyAgZGVm
aW5lIEJPT1NUX01BVEhfRVhQTElDSVRfVEVNUExBVEVfVFlQRV9TUEVDKHQpICAgIGJvb3N0Ojp0
eXBlPHQ+KgotIyAgZGVmaW5lIEJPT1NUX01BVEhfRVhQTElDSVRfVEVNUExBVEVfTk9OX1RZUEUo
dCwgdikgIGJvb3N0Ojpub25fdHlwZTx0LCB2PiogPSAwCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9F
WFBMSUNJVF9URU1QTEFURV9OT05fVFlQRV9TUEVDKHQsIHYpICBib29zdDo6bm9uX3R5cGU8dCwg
dj4qCi0KLSMgIGRlZmluZSBCT09TVF9NQVRIX0FQUEVORF9FWFBMSUNJVF9URU1QTEFURV9UWVBF
KHQpICAgICAgICAgXAotICAgICAgICAgICAgICwgQk9PU1RfTUFUSF9FWFBMSUNJVF9URU1QTEFU
RV9UWVBFKHQpCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9BUFBFTkRfRVhQTElDSVRfVEVNUExBVEVf
VFlQRV9TUEVDKHQpICAgIFwKLSAgICAgICAgICAgICAsIEJPT1NUX01BVEhfRVhQTElDSVRfVEVN
UExBVEVfVFlQRV9TUEVDKHQpCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9BUFBFTkRfRVhQTElDSVRf
VEVNUExBVEVfTk9OX1RZUEUodCwgdikgIFwKLSAgICAgICAgICAgICAsIEJPT1NUX01BVEhfRVhQ
TElDSVRfVEVNUExBVEVfTk9OX1RZUEUodCwgdikKLSMgIGRlZmluZSBCT09TVF9NQVRIX0FQUEVO
RF9FWFBMSUNJVF9URU1QTEFURV9OT05fVFlQRV9TUEVDKHQsIHYpICBcCi0gICAgICAgICAgICAg
LCBCT09TVF9NQVRIX0VYUExJQ0lUX1RFTVBMQVRFX05PTl9UWVBFX1NQRUModCwgdikKLQotI2Vs
c2UKLQotLy8gbm8gd29ya2Fyb3VuZCBuZWVkZWQ6IGV4cGFuZCB0byBub3RoaW5nCi0KLSMgIGRl
ZmluZSBCT09TVF9NQVRIX0VYUExJQ0lUX1RFTVBMQVRFX1RZUEUodCkKLSMgIGRlZmluZSBCT09T
VF9NQVRIX0VYUExJQ0lUX1RFTVBMQVRFX1RZUEVfU1BFQyh0KQotIyAgZGVmaW5lIEJPT1NUX01B
VEhfRVhQTElDSVRfVEVNUExBVEVfTk9OX1RZUEUodCwgdikKLSMgIGRlZmluZSBCT09TVF9NQVRI
X0VYUExJQ0lUX1RFTVBMQVRFX05PTl9UWVBFX1NQRUModCwgdikKLQotIyAgZGVmaW5lIEJPT1NU
X01BVEhfQVBQRU5EX0VYUExJQ0lUX1RFTVBMQVRFX1RZUEUodCkKLSMgIGRlZmluZSBCT09TVF9N
QVRIX0FQUEVORF9FWFBMSUNJVF9URU1QTEFURV9UWVBFX1NQRUModCkKLSMgIGRlZmluZSBCT09T
VF9NQVRIX0FQUEVORF9FWFBMSUNJVF9URU1QTEFURV9OT05fVFlQRSh0LCB2KQotIyAgZGVmaW5l
IEJPT1NUX01BVEhfQVBQRU5EX0VYUExJQ0lUX1RFTVBMQVRFX05PTl9UWVBFX1NQRUModCwgdikK
LQotCi0jZW5kaWYgLy8gX19TVU5QUk9fQ0MKLQotI2lmIChkZWZpbmVkKF9fU1VOUFJPX0NDKSB8
fCBkZWZpbmVkKF9faHBwYSkgfHwgZGVmaW5lZChfX0dOVUNfXykpICYmICFkZWZpbmVkKEJPT1NU
X01BVEhfU01BTExfQ09OU1RBTlQpCi0vLyBTdW4ncyBjb21waWxlciBlbWl0cyBhIGhhcmQgZXJy
b3IgaWYgYSBjb25zdGFudCB1bmRlcmZsb3dzLAotLy8gYXMgZG9lcyBhQ0Mgb24gUEEtUklTQywg
d2hpbGUgZ2NjIGlzc3VlcyBhIGxhcmdlIG51bWJlciBvZiB3YXJuaW5nczoKLSMgIGRlZmluZSBC
T09TVF9NQVRIX1NNQUxMX0NPTlNUQU5UKHgpIDAuMAotI2Vsc2UKLSMgIGRlZmluZSBCT09TVF9N
QVRIX1NNQUxMX0NPTlNUQU5UKHgpIHgKLSNlbmRpZgotCi0KLSNpZiBCT09TVF9XT1JLQVJPVU5E
KEJPT1NUX01TVkMsIDwgMTQwMCkKLS8vCi0vLyBEZWZpbmUgaWYgY29uc3RhbnRzIHRvbyBsYXJn
ZSBmb3IgYSBmbG9hdCBjYXVzZSAiYmFkIgotLy8gdmFsdWVzIHRvIGJlIHN0b3JlZCBpbiB0aGUg
ZGF0YSwgcmF0aGVyIHRoYW4gaW5maW5pdHkKLS8vIG9yIGEgc3VpdGFibHkgbGFyZ2UgdmFsdWUu
Ci0vLwotIyAgZGVmaW5lIEJPT1NUX01BVEhfQlVHR1lfTEFSR0VfRkxPQVRfQ09OU1RBTlRTCi0j
ZW5kaWYKLS8vCi0vLyBUdW5lIHBlcmZvcm1hbmNlIG9wdGlvbnMgZm9yIHNwZWNpZmljIGNvbXBp
bGVyczoKLS8vCi0jaWZkZWYgQk9PU1RfTVNWQwotIyAgZGVmaW5lIEJPT1NUX01BVEhfUE9MWV9N
RVRIT0QgMgotIyAgZGVmaW5lIEJPT1NUX01BVEhfUkFUSU9OQUxfTUVUSE9EIDEKLSNlbGlmIGRl
ZmluZWQoQk9PU1RfSU5URUwpCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9QT0xZX01FVEhPRCAyCi0j
ICBkZWZpbmUgQk9PU1RfTUFUSF9SQVRJT05BTF9NRVRIT0QgMQotI2VsaWYgZGVmaW5lZChfX0dO
VUNfXykKLSNpZiBfX0dOVUNfXyA8IDQKLSMgIGRlZmluZSBCT09TVF9NQVRIX1BPTFlfTUVUSE9E
IDMKLSMgIGRlZmluZSBCT09TVF9NQVRIX1JBVElPTkFMX01FVEhPRCAzCi0jICBkZWZpbmUgQk9P
U1RfTUFUSF9JTlRfVEFCTEVfVFlQRShSVCwgSVQpIFJUCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9J
TlRfVkFMVUVfU1VGRklYKFJWLCBTVUYpIFJWIyMuMEwKLSNlbHNlCi0jICBkZWZpbmUgQk9PU1Rf
TUFUSF9QT0xZX01FVEhPRCAzCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9SQVRJT05BTF9NRVRIT0Qg
MQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk9PU1RfTk9fTE9OR19MT05HKSAmJiAh
ZGVmaW5lZChCT09TVF9NQVRIX0lOVF9UQUJMRV9UWVBFKQotIyAgZGVmaW5lIEJPT1NUX01BVEhf
SU5UX1RBQkxFX1RZUEUoUlQsIElUKSBSVAotIyAgZGVmaW5lIEJPT1NUX01BVEhfSU5UX1ZBTFVF
X1NVRkZJWChSViwgU1VGKSBSViMjLjBMCi0jZW5kaWYKLQotLy8KLS8vIGNvbnN0ZXhwciBzdXBw
b3J0LCBlYXJseSBHQ0MgaW1wbGVtZW50YXRpb25zIGNhbid0IGNvcGUgc28gZGlzYWJsZQotLy8g
Y29uc3RleHByIGZvciB0aGVtOgotLy8KLSNpZiAhZGVmaW5lZChfX2NsYW5nKSAmJiBkZWZpbmVk
KF9fR05VQ19fKQotI2lmIChfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5PUl9fKSA8IDQ5MAot
IyAgZGVmaW5lIEJPT1NUX01BVEhfRElTQUJMRV9DT05TVEVYUFIKLSNlbmRpZgotI2VuZGlmCi0K
LSNpZmRlZiBCT09TVF9NQVRIX0RJU0FCTEVfQ09OU1RFWFBSCi0jICBkZWZpbmUgQk9PU1RfTUFU
SF9DT05TVEVYUFIKLSNlbHNlCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9DT05TVEVYUFIgQk9PU1Rf
Q09OU1RFWFBSCi0jZW5kaWYKLQotLy8KLS8vIG5vZXhjZXB0IHN1cHBvcnQ6Ci0vLwotI2lmbmRl
ZiBCT09TVF9OT19DWFgxMV9OT0VYQ0VQVAotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9IRFJfVFlQ
RV9UUkFJVFMKLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSMgIGRlZmluZSBCT09TVF9NQVRIX05P
RVhDRVBUKFQpIG5vZXhjZXB0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVlKQotIyAg
ZGVmaW5lIEJPT1NUX01BVEhfSVNfRkxPQVQoVCkgKHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46
OnZhbHVlKQotI2Vsc2UKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19mbG9hdGluZ19w
b2ludC5ocHA+Ci0jICBkZWZpbmUgQk9PU1RfTUFUSF9OT0VYQ0VQVChUKSBub2V4Y2VwdChib29z
dDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVlKQotIyAgZGVmaW5lIEJPT1NUX01BVEhfSVNf
RkxPQVQoVCkgKGJvb3N0Ojppc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWUpCi0jZW5kaWYKLSNl
bHNlCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9OT0VYQ0VQVChUKQotIyAgZGVmaW5lIEJPT1NUX01B
VEhfSVNfRkxPQVQoVCkgZmFsc2UKLSNlbmRpZgotCi0vLwotLy8gVGhlIG1heGltdW0gb3JkZXIg
b2YgcG9seW5vbWlhbCB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkIAotLy8gdmlhIGFuIHVucm9sbGVk
IHNwZWNpYWxpc2F0aW9uOgotLy8KLSNpZm5kZWYgQk9PU1RfTUFUSF9NQVhfUE9MWV9PUkRFUgot
IyAgZGVmaW5lIEJPT1NUX01BVEhfTUFYX1BPTFlfT1JERVIgMjAKLSNlbmRpZiAKLS8vCi0vLyBT
ZXQgdGhlIG1ldGhvZCB1c2VkIHRvIGV2YWx1YXRlIHBvbHlub21pYWxzIGFuZCByYXRpb25hbHM6
Ci0vLwotI2lmbmRlZiBCT09TVF9NQVRIX1BPTFlfTUVUSE9ECi0jICBkZWZpbmUgQk9PU1RfTUFU
SF9QT0xZX01FVEhPRCAyCi0jZW5kaWYgCi0jaWZuZGVmIEJPT1NUX01BVEhfUkFUSU9OQUxfTUVU
SE9ECi0jICBkZWZpbmUgQk9PU1RfTUFUSF9SQVRJT05BTF9NRVRIT0QgMQotI2VuZGlmIAotLy8K
LS8vIGRlY2lkZSB3aGV0aGVyIHRvIHN0b3JlIGNvbnN0YW50cyBhcyBpbnRlZ2VycyBvciByZWFs
czoKLS8vCi0jaWZuZGVmIEJPT1NUX01BVEhfSU5UX1RBQkxFX1RZUEUKLSMgIGRlZmluZSBCT09T
VF9NQVRIX0lOVF9UQUJMRV9UWVBFKFJULCBJVCkgSVQKLSNlbmRpZgotI2lmbmRlZiBCT09TVF9N
QVRIX0lOVF9WQUxVRV9TVUZGSVgKLSMgIGRlZmluZSBCT09TVF9NQVRIX0lOVF9WQUxVRV9TVUZG
SVgoUlYsIFNVRikgUlYjI1NVRgotI2VuZGlmCi0vLwotLy8gQW5kIHRoZW4gdGhlIGFjdHVhbCBj
b25maWd1cmF0aW9uOgotLy8KLSNpZiBkZWZpbmVkKF9HTElCQ1hYX1VTRV9GTE9BVDEyOCkgJiYg
ZGVmaW5lZChCT09TVF9HQ0MpICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgXAotICAgJiYg
IWRlZmluZWQoQk9PU1RfTUFUSF9ESVNBQkxFX0ZMT0FUMTI4KSB8fCBkZWZpbmVkKEJPT1NUX01B
VEhfVVNFX0ZMT0FUMTI4KQotLy8KLS8vIE9ubHkgZW5hYmxlIHRoaXMgd2hlbiB0aGUgY29tcGls
ZXIgcmVhbGx5IGlzIEdDQyBhcyBjbGFuZyBhbmQgcHJvYmFibHkgCi0vLyBpbnRlbCB0b28gZG9u
J3Qgc3VwcG9ydCBfX2Zsb2F0MTI4IHlldCA6LSgKLS8vCi0jaWZuZGVmIEJPT1NUX01BVEhfVVNF
X0ZMT0FUMTI4Ci0jICBkZWZpbmUgQk9PU1RfTUFUSF9VU0VfRkxPQVQxMjgKLSNlbmRpZgotCi0j
ICBpZiBkZWZpbmVkKEJPT1NUX0lOVEVMKSAmJiBkZWZpbmVkKEJPT1NUX0lOVEVMX0NYWF9WRVJT
SU9OKSAmJiAoQk9PU1RfSU5URUxfQ1hYX1ZFUlNJT04gPj0gMTMxMCkgJiYgZGVmaW5lZChfX0dO
VUNfXykKLSMgICAgaWYgKF9fR05VQ19fID4gNCkgfHwgKChfX0dOVUNfXyA9PSA0KSAmJiAoX19H
TlVDX01JTk9SX18gPj0gNikpCi0jICAgICAgZGVmaW5lIEJPT1NUX01BVEhfRkxPQVQxMjhfVFlQ
RSBfX2Zsb2F0MTI4Ci0jICAgIGVuZGlmCi0jICBlbGlmIGRlZmluZWQoX19HTlVDX18pCi0jICAg
ICAgZGVmaW5lIEJPT1NUX01BVEhfRkxPQVQxMjhfVFlQRSBfX2Zsb2F0MTI4Ci0jICBlbmRpZgot
Ci0jICBpZm5kZWYgQk9PU1RfTUFUSF9GTE9BVDEyOF9UWVBFCi0jICAgICAgZGVmaW5lIEJPT1NU
X01BVEhfRkxPQVQxMjhfVFlQRSBfUXVhZAotIyAgZW5kaWYKLSNlbmRpZgotLy8KLS8vIENoZWNr
IGZvciBXaW5DRSB3aXRoIG5vIGlvc3RyZWFtIHN1cHBvcnQ6Ci0vLwotI2lmIGRlZmluZWQoX1dJ
TjMyX1dDRSkgJiYgIWRlZmluZWQoX19TR0lfU1RMX1BPUlQpCi0jICBkZWZpbmUgQk9PU1RfTUFU
SF9OT19MRVhJQ0FMX0NBU1QKLSNlbmRpZgotCi0vLwotLy8gSGVscGVyIG1hY3JvIGZvciBjb250
cm9sbGluZyB0aGUgRlAgYmVoYXZpb3VyOgotLy8KLSNpZm5kZWYgQk9PU1RfTUFUSF9DT05UUk9M
X0ZQCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9DT05UUk9MX0ZQCi0jZW5kaWYKLS8vCi0vLyBIZWxw
ZXIgbWFjcm8gZm9yIHVzaW5nIHN0YXRlbWVudHM6Ci0vLwotI2RlZmluZSBCT09TVF9NQVRIX1NU
RF9VU0lOR19DT1JFIFwKLSAgIHVzaW5nIHN0ZDo6YWJzO1wKLSAgIHVzaW5nIHN0ZDo6YWNvcztc
Ci0gICB1c2luZyBzdGQ6OmNvcztcCi0gICB1c2luZyBzdGQ6OmZtb2Q7XAotICAgdXNpbmcgc3Rk
Ojptb2RmO1wKLSAgIHVzaW5nIHN0ZDo6dGFuO1wKLSAgIHVzaW5nIHN0ZDo6YXNpbjtcCi0gICB1
c2luZyBzdGQ6OmNvc2g7XAotICAgdXNpbmcgc3RkOjpmcmV4cDtcCi0gICB1c2luZyBzdGQ6OnBv
dztcCi0gICB1c2luZyBzdGQ6OnRhbmg7XAotICAgdXNpbmcgc3RkOjphdGFuO1wKLSAgIHVzaW5n
IHN0ZDo6ZXhwO1wKLSAgIHVzaW5nIHN0ZDo6bGRleHA7XAotICAgdXNpbmcgc3RkOjpzaW47XAot
ICAgdXNpbmcgc3RkOjphdGFuMjtcCi0gICB1c2luZyBzdGQ6OmZhYnM7XAotICAgdXNpbmcgc3Rk
Ojpsb2c7XAotICAgdXNpbmcgc3RkOjpzaW5oO1wKLSAgIHVzaW5nIHN0ZDo6Y2VpbDtcCi0gICB1
c2luZyBzdGQ6OmZsb29yO1wKLSAgIHVzaW5nIHN0ZDo6bG9nMTA7XAotICAgdXNpbmcgc3RkOjpz
cXJ0OwotCi0jZGVmaW5lIEJPT1NUX01BVEhfU1REX1VTSU5HIEJPT1NUX01BVEhfU1REX1VTSU5H
X0NPUkUKLQotbmFtZXNwYWNlIGJvb3N0eyBuYW1lc3BhY2UgbWF0aHsKLW5hbWVzcGFjZSB0b29s
cwotewotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWlubGluZSBUIG1heCBCT09TVF9QUkVWRU5UX01B
Q1JPX1NVQlNUSVRVVElPTihUIGEsIFQgYiwgVCBjKSBCT09TVF9NQVRIX05PRVhDRVBUKFQpCi17
Ci0gICByZXR1cm4gKHN0ZDo6bWF4KSgoc3RkOjptYXgpKGEsIGIpLCBjKTsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIFQ+Ci1pbmxpbmUgVCBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJ
T04oVCBhLCBUIGIsIFQgYywgVCBkKSBCT09TVF9NQVRIX05PRVhDRVBUKFQpCi17Ci0gICByZXR1
cm4gKHN0ZDo6bWF4KSgoc3RkOjptYXgpKGEsIGIpLCAoc3RkOjptYXgpKGMsIGQpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgdG9vbHMKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIHN1cHByZXNz
X3VudXNlZF92YXJpYWJsZV93YXJuaW5nKGNvbnN0IFQmKSBCT09TVF9NQVRIX05PRVhDRVBUKFQp
Ci17Ci19Ci0KLW5hbWVzcGFjZSBkZXRhaWx7Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0
IGlzX2ludGVnZXJfZm9yX3JvdW5kaW5nCi17Ci0gICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9
IGJvb3N0Ojppc19pbnRlZ3JhbDxUPjo6dmFsdWUKLSNpZm5kZWYgQk9PU1RfTk9fTElNSVRTX0NP
TVBJTEVfVElNRV9DT05TVEFOVFMKLSAgICAgIHx8IChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojpp
c19zcGVjaWFsaXplZCAmJiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19pbnRlZ2VyKQotI2Vu
ZGlmCi0gICAgICA7Ci19OwotCi19Ci0KLX19IC8vIG5hbWVzcGFjZSBib29zdCBuYW1lc3BhY2Ug
bWF0aAotCi0jaWZkZWYgX19HTElCQ19QUkVSRVEKLSMgIGlmIF9fR0xJQkNfUFJFUkVRKDIsMTQp
Ci0jICAgICBkZWZpbmUgQk9PU1RfTUFUSF9IQVZFX0ZJWEVEX0dMSUJDCi0jICBlbmRpZgotI2Vu
ZGlmCi0KLSNpZiAoKGRlZmluZWQoX19saW51eF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKSAm
JiAhZGVmaW5lZChCT09TVF9NQVRIX0hBVkVfRklYRURfR0xJQkMpKSB8fCBkZWZpbmVkKF9fUU5Y
X18pIHx8IGRlZmluZWQoX19JQk1DUFBfXykpICYmICFkZWZpbmVkKEJPT1NUX05PX0ZFTlZfSCkK
LS8vCi0vLyBUaGlzIGNvZGUgd2FzIGludHJvZHVjZWQgaW4gcmVzcG9uc2UgdG8gdGhpcyBnbGli
YyBidWc6IGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjQ0
NQotLy8gQmFzaWNhbGx5IHBvd2wgYW5kIGV4cGwgY2FuIHJldHVybiBnYXJiYWdlIHdoZW4gdGhl
IHJlc3VsdCBpcyBzbWFsbCBhbmQgY2VydGFpbiBleGNlcHRpb24gZmxhZ3MgYXJlIHNldAotLy8g
b24gZW50cmFuY2UgdG8gdGhlc2UgZnVuY3Rpb25zLiAgVGhpcyBhcHBlYXJzIHRvIGhhdmUgYmVl
biBmaXhlZCBpbiBHbGliYyAyLjE0IChNYXkgMjAxMSkuCi0vLyBNdWNoIG1vcmUgaW5mb3JtYXRp
b24gaW4gdGhpcyBtZXNzYWdlIHRocmVhZDogaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9mb3J1
bS8jIXRvcGljL2Jvb3N0LWxpc3QvWlQ5OXd0SUZsYjQKLS8vCi0KLSAgICNpbmNsdWRlIDxib29z
dC9kZXRhaWwvZmVudi5ocHA+Ci0KLSMgIGlmZGVmIEZFX0FMTF9FWENFUFQKLQotbmFtZXNwYWNl
IGJvb3N0eyBuYW1lc3BhY2UgbWF0aHsKLSAgIG5hbWVzcGFjZSBkZXRhaWwKLSAgIHsKLSAgIHN0
cnVjdCBmcHVfZ3VhcmQKLSAgIHsKLSAgICAgIGZwdV9ndWFyZCgpCi0gICAgICB7Ci0gICAgICAg
ICBmZWdldGV4Y2VwdGZsYWcoJm1fZmxhZ3MsIEZFX0FMTF9FWENFUFQpOwotICAgICAgICAgZmVj
bGVhcmV4Y2VwdChGRV9BTExfRVhDRVBUKTsKLSAgICAgIH0KLSAgICAgIH5mcHVfZ3VhcmQoKQot
ICAgICAgewotICAgICAgICAgZmVzZXRleGNlcHRmbGFnKCZtX2ZsYWdzLCBGRV9BTExfRVhDRVBU
KTsKLSAgICAgIH0KLSAgIHByaXZhdGU6Ci0gICAgICBmZXhjZXB0X3QgbV9mbGFnczsKLSAgIH07
Ci0KLSAgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAotICAgfX0gLy8gbmFtZXNwYWNlcwotCi0jICAg
IGRlZmluZSBCT09TVF9GUFVfRVhDRVBUSU9OX0dVQVJEIGJvb3N0OjptYXRoOjpkZXRhaWw6OmZw
dV9ndWFyZCBsb2NhbF9ndWFyZF9vYmplY3Q7Ci0jICAgIGRlZmluZSBCT09TVF9NQVRIX0lOU1RS
VU1FTlRfRlBVIGRveyBmZXhjZXB0X3QgY3B1X2ZsYWdzOyBmZWdldGV4Y2VwdGZsYWcoJmNwdV9m
bGFncywgRkVfQUxMX0VYQ0VQVCk7IEJPT1NUX01BVEhfSU5TVFJVTUVOVF9WQVJJQUJMRShjcHVf
ZmxhZ3MpOyB9IHdoaWxlKDApOyAKLQotIyAgZWxzZQotCi0jICAgIGRlZmluZSBCT09TVF9GUFVf
RVhDRVBUSU9OX0dVQVJECi0jICAgIGRlZmluZSBCT09TVF9NQVRIX0lOU1RSVU1FTlRfRlBVCi0K
LSMgIGVuZGlmCi0KLSNlbHNlIC8vIEFsbCBvdGhlciBwbGF0Zm9ybXMuCi0jICBkZWZpbmUgQk9P
U1RfRlBVX0VYQ0VQVElPTl9HVUFSRAotIyAgZGVmaW5lIEJPT1NUX01BVEhfSU5TVFJVTUVOVF9G
UFUKLSNlbmRpZgotCi0jaWZkZWYgQk9PU1RfTUFUSF9JTlNUUlVNRU5UCi0KLSMgIGluY2x1ZGUg
PGlvc3RyZWFtPgotIyAgaW5jbHVkZSA8aW9tYW5pcD4KLSMgIGluY2x1ZGUgPHR5cGVpbmZvPgot
Ci0jICBkZWZpbmUgQk9PU1RfTUFUSF9JTlNUUlVNRU5UX0NPREUoeCkgXAotICAgICAgc3RkOjpj
b3V0IDw8IHN0ZDo6c2V0cHJlY2lzaW9uKDM1KSA8PCBfX0ZJTEVfXyA8PCAiOiIgPDwgX19MSU5F
X18gPDwgIiAiIDw8IHggPDwgc3RkOjplbmRsOwotIyAgZGVmaW5lIEJPT1NUX01BVEhfSU5TVFJV
TUVOVF9WQVJJQUJMRShuYW1lKSBCT09TVF9NQVRIX0lOU1RSVU1FTlRfQ09ERShCT09TVF9TVFJJ
TkdJWkUobmFtZSkgPDwgIiA9ICIgPDwgbmFtZSkKLQotI2Vsc2UKLQotIyAgZGVmaW5lIEJPT1NU
X01BVEhfSU5TVFJVTUVOVF9DT0RFKHgpCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9JTlNUUlVNRU5U
X1ZBUklBQkxFKG5hbWUpCi0KLSNlbmRpZgotCi0vLwotLy8gVGhyZWFkIGxvY2FsIHN0b3JhZ2U6
Ci0vLwotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1RIUkVBRF9MT0NBTCkgJiYgIWRlZmlu
ZWQoQk9PU1RfSU5URUwpCi0jICBkZWZpbmUgQk9PU1RfTUFUSF9USFJFQURfTE9DQUwgdGhyZWFk
X2xvY2FsCi0jZWxzZQotIyAgZGVmaW5lIEJPT1NUX01BVEhfVEhSRUFEX0xPQ0FMCi0jZW5kaWYK
LQotI2VuZGlmIC8vIEJPT1NUX01BVEhfVE9PTFNfQ09ORklHX0hQUAotCi0KLQotCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tYXRoL3Rvb2xz
L3Byb21vdGlvbi5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9tYXRoL3Rvb2xzL3Byb21vdGlvbi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQ5NGQ3Zjk5ZTIwYTEzMmI0NmM2NDg1MmNmNjI5MmNjYTRjYTQ3OGYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbWF0aC90b29scy9wcm9tb3Rpb24uaHBwCisrKyAvZGV2L251bGwK
QEAgLTEsMTgyICswLDAgQEAKLS8vIGJvb3N0XG1hdGhcdG9vbHNccHJvbW90aW9uLmhwcAotCi0v
LyBDb3B5cmlnaHQgSm9obiBNYWRkb2NrIDIwMDYuCi0vLyBDb3B5cmlnaHQgUGF1bCBBLiBCcmlz
dG93IDIwMDYuCi0KLS8vIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1
YmplY3QgdG8gdGhlCi0vLyBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8v
IChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0Ci0vLyBvciBjb3B5IGF0IGh0
dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gUHJvbW90ZSBhcmd1bWVu
dHMgZnVuY3Rpb25zIHRvIGFsbG93IG1hdGggZnVuY3Rpb25zIHRvIGhhdmUgYXJndW1lbnRzCi0v
LyBwcm92aWRlZCBhcyBpbnRlZ2VyIE9SIHJlYWwgKGZsb2F0aW5nLXBvaW50LCBidWlsdC1pbiBv
ciBVRFQpCi0vLyAoY2FsbGVkIEFyaXRobWV0aWNUeXBlIGluIGZ1bmN0aW9ucyB0aGF0IHVzZSBw
cm9tb3Rpb24pCi0vLyB0aGF0IGhlbHAgdG8gcmVkdWNlIHRoZSByaXNrIG9mIGNyZWF0aW5nIG11
bHRpcGxlIGluc3RhbnRpYXRpb25zLgotLy8gQWxsb3dzIGNyZWF0aW9uIG9mIGFuIGlubGluZSB3
cmFwcGVyIHRoYXQgZm9yd2FyZHMgdG8gYSBmb28oUlQsIFJUKSBmdW5jdGlvbiwKLS8vIHNvIHlv
dSBuZXZlciBnZXQgdG8gaW5zdGFudGlhdGUgYW55IG1peGVkIGZvbyhSVCwgSVQpIGZ1bmN0aW9u
cy4KLQotI2lmbmRlZiBCT09TVF9NQVRIX1BST01PVElPTl9IUFAKLSNkZWZpbmUgQk9PU1RfTUFU
SF9QUk9NT1RJT05fSFBQCi0KLSNpZmRlZiBfTVNDX1ZFUgotI3ByYWdtYSBvbmNlCi0jZW5kaWYK
LQotLy8gQm9vc3QgdHlwZSB0cmFpdHM6Ci0jaW5jbHVkZSA8Ym9vc3QvbWF0aC90b29scy9jb25m
aWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Zsb2F0aW5nX3BvaW50Lmhw
cD4gLy8gZm9yIGJvb3N0Ojppc19mbG9hdGluZ19wb2ludDsKLSNpbmNsdWRlIDxib29zdC90eXBl
X3RyYWl0cy9pc19pbnRlZ3JhbC5ocHA+IC8vIGZvciBib29zdDo6aXNfaW50ZWdyYWwKLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jb252ZXJ0aWJsZS5ocHA+IC8vIGZvciBib29zdDo6
aXNfY29udmVydGlibGUKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcD4v
LyBmb3IgYm9vc3Q6OmlzX3NhbWUKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yZW1vdmVf
Y3YuaHBwPi8vIGZvciBib29zdDo6cmVtb3ZlX2N2Ci0vLyBCb29zdCBUZW1wbGF0ZSBtZXRhIHBy
b2dyYW1taW5nOgotI2luY2x1ZGUgPGJvb3N0L21wbC9pZi5ocHA+IC8vIGZvciBib29zdDo6bXBs
OjppZl9jLgotI2luY2x1ZGUgPGJvb3N0L21wbC9hbmQuaHBwPiAvLyBmb3IgYm9vc3Q6Om1wbDo6
aWZfYy4KLSNpbmNsdWRlIDxib29zdC9tcGwvb3IuaHBwPiAvLyBmb3IgYm9vc3Q6Om1wbDo6aWZf
Yy4KLSNpbmNsdWRlIDxib29zdC9tcGwvbm90LmhwcD4gLy8gZm9yIGJvb3N0OjptcGw6OmlmX2Mu
Ci0KLSNpZmRlZiBCT09TVF9NQVRIX05PX0xPTkdfRE9VQkxFX01BVEhfRlVOQ1RJT05TCi0jaW5j
bHVkZSA8Ym9vc3Qvc3RhdGljX2Fzc2VydC5ocHA+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIGJvb3N0
Ci17Ci0gIG5hbWVzcGFjZSBtYXRoCi0gIHsKLSAgICBuYW1lc3BhY2UgdG9vbHMKLSAgICB7Ci0g
ICAgICAvLyBJZiBlaXRoZXIgVDEgb3IgVDIgaXMgYW4gaW50ZWdlciB0eXBlLAotICAgICAgLy8g
cHJldGVuZCBpdCB3YXMgYSBkb3VibGUgKGZvciB0aGUgcHVycG9zZXMgb2YgZnVydGhlciBhbmFs
eXNpcykuCi0gICAgICAvLyBUaGVuIHBpY2sgdGhlIHdpZGVyIG9mIHRoZSB0d28gZmxvYXRpbmct
cG9pbnQgdHlwZXMKLSAgICAgIC8vIGFzIHRoZSBhY3R1YWwgc2lnbmF0dXJlIHRvIGZvcndhcmQg
dG8uCi0gICAgICAvLyBGb3IgZXhhbXBsZToKLSAgICAgIC8vIGZvbyhpbnQsIHNob3J0KSAtPiBk
b3VibGUgZm9vKGRvdWJsZSwgZG91YmxlKTsKLSAgICAgIC8vIGZvbyhpbnQsIGZsb2F0KSAtPiBk
b3VibGUgZm9vKGRvdWJsZSwgZG91YmxlKTsKLSAgICAgIC8vIE5vdGU6IE5PVCBmbG9hdCBmb28o
ZmxvYXQsIGZsb2F0KQotICAgICAgLy8gZm9vKGludCwgZG91YmxlKSAtPiBmb28oZG91YmxlLCBk
b3VibGUpOwotICAgICAgLy8gZm9vKGRvdWJsZSwgZmxvYXQpIC0+IGRvdWJsZSBmb28oZG91Ymxl
LCBkb3VibGUpOwotICAgICAgLy8gZm9vKGRvdWJsZSwgZmxvYXQpIC0+IGRvdWJsZSBmb28oZG91
YmxlLCBkb3VibGUpOwotICAgICAgLy8gZm9vKGFueS1pbnQtb3ItZmxvYXQtdHlwZSwgbG9uZyBk
b3VibGUpIC0+IGZvbyhsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOwotICAgICAgLy8gYnV0IE9O
TFkgZmxvYXQgZm9vKGZsb2F0LCBmbG9hdCkgaXMgdW5jaGFuZ2VkLgotICAgICAgLy8gU28gdGhl
IG9ubHkgd2F5IHRvIGdldCBhbiBlbnRpcmVseSBmbG9hdCB2ZXJzaW9uIGlzIHRvIGNhbGwgZm9v
KDEuRiwgMi5GKSwKLSAgICAgIC8vIEJ1dCBzaW5jZSBtb3N0IChhbGw/KSB0aGUgbWF0aCBmdW5j
dGlvbnMgY29udmVydCB0byBkb3VibGUgaW50ZXJuYWxseSwKLSAgICAgIC8vIHByb2JhYmx5IHRo
ZXJlIHdvdWxkIG5vdCBiZSB0aGUgaG9wZWQtZm9yIGdhaW4gYnkgdXNpbmcgZmxvYXQgaGVyZS4K
LQotICAgICAgLy8gVGhpcyBmb2xsb3dzIHRoZSBDLWNvbXBhdGlibGUgY29udmVyc2lvbiBydWxl
cyBvZiBwb3csIGV0YwotICAgICAgLy8gd2hlcmUgcG93KGludCwgZmxvYXQpIGlzIGNvbnZlcnRl
ZCB0byBwb3coZG91YmxlLCBkb3VibGUpLgotCi0gICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAg
ICAgIHN0cnVjdCBwcm9tb3RlX2FyZwotICAgICAgeyAvLyBJZiBUIGlzIGludGVncmFsIHR5cGUs
IHRoZW4gcHJvbW90ZSB0byBkb3VibGUuCi0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbXBsOjpp
Zl88aXNfaW50ZWdyYWw8VD4sIGRvdWJsZSwgVD46OnR5cGUgdHlwZTsKLSAgICAgIH07Ci0gICAg
ICAvLyBUaGVzZSBmdWxsIHNwZWNpYWxpc2F0aW9ucyByZWR1Y2UgbXBsOjppZl8gdXNhZ2UgYW5k
IHNwZWVkIHVwCi0gICAgICAvLyBjb21waWxhdGlvbjoKLSAgICAgIHRlbXBsYXRlIDw+IHN0cnVj
dCBwcm9tb3RlX2FyZzxmbG9hdD4geyB0eXBlZGVmIGZsb2F0IHR5cGU7IH07Ci0gICAgICB0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgcHJvbW90ZV9hcmc8ZG91YmxlPnsgdHlwZWRlZiBkb3VibGUgdHlwZTsg
fTsKLSAgICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBwcm9tb3RlX2FyZzxsb25nIGRvdWJsZT4geyB0
eXBlZGVmIGxvbmcgZG91YmxlIHR5cGU7IH07Ci0gICAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgcHJv
bW90ZV9hcmc8aW50PiB7ICB0eXBlZGVmIGRvdWJsZSB0eXBlOyB9OwotCi0gICAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgotICAgICAgc3RydWN0IHByb21vdGVfYXJnc18yCi0gICAg
ICB7IC8vIFByb21vdGUsIGlmIG5lY2Vzc2FyeSwgJiBwaWNrIHRoZSB3aWRlciBvZiB0aGUgdHdv
IGZsb2F0aW5nLXBvaW50IHR5cGVzLgotICAgICAgICAvLyBmb3IgYm90aCBwYXJhbWV0ZXIgdHlw
ZXMsIGlmIGludGVncmFsIHByb21vdGUgdG8gZG91YmxlLgotICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIHByb21vdGVfYXJnPFQxPjo6dHlwZSBUMVA7IC8vIFQxIHBlcmhhcHMgcHJvbW90ZWQuCi0g
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcHJvbW90ZV9hcmc8VDI+Ojp0eXBlIFQyUDsgLy8gVDIg
cGVyaGFwcyBwcm9tb3RlZC4KLQotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1wbDo6aWZfPAot
ICAgICAgICAgIHR5cGVuYW1lIG1wbDo6YW5kXzxpc19mbG9hdGluZ19wb2ludDxUMVA+LCBpc19m
bG9hdGluZ19wb2ludDxUMlA+ID46OnR5cGUsIC8vIGJvdGggVDFQIGFuZCBUMlAgYXJlIGZsb2F0
aW5nLXBvaW50PwotI2lmZGVmIEJPT1NUX01BVEhfVVNFX0ZMT0FUMTI4Ci0gICAgICAgICAgIHR5
cGVuYW1lIG1wbDo6aWZfPCB0eXBlbmFtZSBtcGw6Om9yXzxpc19zYW1lPF9fZmxvYXQxMjgsIFQx
UD4sIGlzX3NhbWU8X19mbG9hdDEyOCwgVDJQPiA+Ojp0eXBlLCAvLyBlaXRoZXIgbG9uZyBkb3Vi
bGU/Ci0gICAgICAgICAgICBfX2Zsb2F0MTI4LAotI2VuZGlmCi0gICAgICAgICAgICAgdHlwZW5h
bWUgbXBsOjppZl88IHR5cGVuYW1lIG1wbDo6b3JfPGlzX3NhbWU8bG9uZyBkb3VibGUsIFQxUD4s
IGlzX3NhbWU8bG9uZyBkb3VibGUsIFQyUD4gPjo6dHlwZSwgLy8gZWl0aGVyIGxvbmcgZG91Ymxl
PwotICAgICAgICAgICAgICAgbG9uZyBkb3VibGUsIC8vIHRoZW4gcmVzdWx0IHR5cGUgaXMgbG9u
ZyBkb3VibGUuCi0gICAgICAgICAgICAgICB0eXBlbmFtZSBtcGw6OmlmXzwgdHlwZW5hbWUgbXBs
Ojpvcl88aXNfc2FtZTxkb3VibGUsIFQxUD4sIGlzX3NhbWU8ZG91YmxlLCBUMlA+ID46OnR5cGUs
IC8vIGVpdGhlciBkb3VibGU/Ci0gICAgICAgICAgICAgICAgICBkb3VibGUsIC8vIHJlc3VsdCB0
eXBlIGlzIGRvdWJsZS4KLSAgICAgICAgICAgICAgICAgIGZsb2F0IC8vIGVsc2UgcmVzdWx0IHR5
cGUgaXMgZmxvYXQuCi0gICAgICAgICAgICAgPjo6dHlwZQotI2lmZGVmIEJPT1NUX01BVEhfVVNF
X0ZMT0FUMTI4Ci0gICAgICAgICAgICAgPjo6dHlwZQotI2VuZGlmCi0gICAgICAgICAgICAgPjo6
dHlwZSwKLSAgICAgICAgICAvLyBlbHNlIG9uZSBvciB0aGUgb3RoZXIgaXMgYSB1c2VyLWRlZmlu
ZWQgdHlwZToKLSAgICAgICAgICB0eXBlbmFtZSBtcGw6OmlmXzwgdHlwZW5hbWUgbXBsOjphbmRf
PG1wbDo6bm90Xzxpc19mbG9hdGluZ19wb2ludDxUMlA+ID4sIDo6Ym9vc3Q6OmlzX2NvbnZlcnRp
YmxlPFQxUCwgVDJQPiA+LCBUMlAsIFQxUD46OnR5cGU+Ojp0eXBlIHR5cGU7Ci0gICAgICB9OyAv
LyBwcm9tb3RlX2FyZzIKLSAgICAgIC8vIFRoZXNlIGZ1bGwgc3BlY2lhbGlzYXRpb25zIHJlZHVj
ZSBtcGw6OmlmXyB1c2FnZSBhbmQgc3BlZWQgdXAKLSAgICAgIC8vIGNvbXBpbGF0aW9uOgotICAg
ICAgdGVtcGxhdGUgPD4gc3RydWN0IHByb21vdGVfYXJnc18yPGZsb2F0LCBmbG9hdD4geyB0eXBl
ZGVmIGZsb2F0IHR5cGU7IH07Ci0gICAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgcHJvbW90ZV9hcmdz
XzI8ZG91YmxlLCBkb3VibGU+eyB0eXBlZGVmIGRvdWJsZSB0eXBlOyB9OwotICAgICAgdGVtcGxh
dGUgPD4gc3RydWN0IHByb21vdGVfYXJnc18yPGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZT4geyB0
eXBlZGVmIGxvbmcgZG91YmxlIHR5cGU7IH07Ci0gICAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgcHJv
bW90ZV9hcmdzXzI8aW50LCBpbnQ+IHsgIHR5cGVkZWYgZG91YmxlIHR5cGU7IH07Ci0gICAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgcHJvbW90ZV9hcmdzXzI8aW50LCBmbG9hdD4geyAgdHlwZWRlZiBk
b3VibGUgdHlwZTsgfTsKLSAgICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBwcm9tb3RlX2FyZ3NfMjxm
bG9hdCwgaW50PiB7ICB0eXBlZGVmIGRvdWJsZSB0eXBlOyB9OwotICAgICAgdGVtcGxhdGUgPD4g
c3RydWN0IHByb21vdGVfYXJnc18yPGludCwgZG91YmxlPiB7ICB0eXBlZGVmIGRvdWJsZSB0eXBl
OyB9OwotICAgICAgdGVtcGxhdGUgPD4gc3RydWN0IHByb21vdGVfYXJnc18yPGRvdWJsZSwgaW50
PiB7ICB0eXBlZGVmIGRvdWJsZSB0eXBlOyB9OwotICAgICAgdGVtcGxhdGUgPD4gc3RydWN0IHBy
b21vdGVfYXJnc18yPGludCwgbG9uZyBkb3VibGU+IHsgIHR5cGVkZWYgbG9uZyBkb3VibGUgdHlw
ZTsgfTsKLSAgICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBwcm9tb3RlX2FyZ3NfMjxsb25nIGRvdWJs
ZSwgaW50PiB7ICB0eXBlZGVmIGxvbmcgZG91YmxlIHR5cGU7IH07Ci0gICAgICB0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgcHJvbW90ZV9hcmdzXzI8ZmxvYXQsIGRvdWJsZT4geyAgdHlwZWRlZiBkb3VibGUg
dHlwZTsgfTsKLSAgICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBwcm9tb3RlX2FyZ3NfMjxkb3VibGUs
IGZsb2F0PiB7ICB0eXBlZGVmIGRvdWJsZSB0eXBlOyB9OwotICAgICAgdGVtcGxhdGUgPD4gc3Ry
dWN0IHByb21vdGVfYXJnc18yPGZsb2F0LCBsb25nIGRvdWJsZT4geyAgdHlwZWRlZiBsb25nIGRv
dWJsZSB0eXBlOyB9OwotICAgICAgdGVtcGxhdGUgPD4gc3RydWN0IHByb21vdGVfYXJnc18yPGxv
bmcgZG91YmxlLCBmbG9hdD4geyAgdHlwZWRlZiBsb25nIGRvdWJsZSB0eXBlOyB9OwotICAgICAg
dGVtcGxhdGUgPD4gc3RydWN0IHByb21vdGVfYXJnc18yPGRvdWJsZSwgbG9uZyBkb3VibGU+IHsg
IHR5cGVkZWYgbG9uZyBkb3VibGUgdHlwZTsgfTsKLSAgICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBw
cm9tb3RlX2FyZ3NfMjxsb25nIGRvdWJsZSwgZG91YmxlPiB7ICB0eXBlZGVmIGxvbmcgZG91Ymxl
IHR5cGU7IH07Ci0KLSAgICAgIHRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI9ZmxvYXQsIGNs
YXNzIFQzPWZsb2F0LCBjbGFzcyBUND1mbG9hdCwgY2xhc3MgVDU9ZmxvYXQsIGNsYXNzIFQ2PWZs
b2F0PgotICAgICAgc3RydWN0IHByb21vdGVfYXJncwotICAgICAgewotICAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBwcm9tb3RlX2FyZ3NfMjwKLSAgICAgICAgICAgIHR5cGVuYW1lIHJlbW92ZV9j
djxUMT46OnR5cGUsCi0gICAgICAgICAgICB0eXBlbmFtZSBwcm9tb3RlX2FyZ3NfMjwKLSAgICAg
ICAgICAgICAgIHR5cGVuYW1lIHJlbW92ZV9jdjxUMj46OnR5cGUsCi0gICAgICAgICAgICAgICB0
eXBlbmFtZSBwcm9tb3RlX2FyZ3NfMjwKLSAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHJlbW92
ZV9jdjxUMz46OnR5cGUsCi0gICAgICAgICAgICAgICAgICB0eXBlbmFtZSBwcm9tb3RlX2FyZ3Nf
MjwKLSAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHJlbW92ZV9jdjxUND46OnR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBwcm9tb3RlX2FyZ3NfMjwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIHJlbW92ZV9jdjxUNT46OnR5cGUsIHR5cGVuYW1lIHJlbW92
ZV9jdjxUNj46OnR5cGUKLSAgICAgICAgICAgICAgICAgICAgID46OnR5cGUKLSAgICAgICAgICAg
ICAgICAgID46OnR5cGUKLSAgICAgICAgICAgICAgID46OnR5cGUKLSAgICAgICAgICAgID46OnR5
cGUKLSAgICAgICAgID46OnR5cGUgdHlwZTsKLQotI2lmZGVmIEJPT1NUX01BVEhfTk9fTE9OR19E
T1VCTEVfTUFUSF9GVU5DVElPTlMKLSAgICAgICAgIC8vCi0gICAgICAgICAvLyBHdWFyZCBhZ2Fp
bnN0IHVzZSBvZiBsb25nIGRvdWJsZSBpZiBpdCdzIG5vdCBzdXBwb3J0ZWQ6Ci0gICAgICAgICAv
LwotICAgICAgICAgQk9PU1RfU1RBVElDX0FTU0VSVF9NU0coKDAgPT0gOjpib29zdDo6aXNfc2Ft
ZTx0eXBlLCBsb25nIGRvdWJsZT46OnZhbHVlKSwgIlNvcnJ5LCBidXQgdGhpcyBwbGF0Zm9ybSBk
b2VzIG5vdCBoYXZlIHN1ZmZpY2llbnQgbG9uZyBkb3VibGUgc3VwcG9ydCBmb3IgdGhlIHNwZWNp
YWwgZnVuY3Rpb25zIHRvIGJlIHJlbGlhYmx5IGltcGxlbWVudGVkLiIpOwotI2VuZGlmCi0gICAg
ICB9OwotCi0gICAgICAvLwotICAgICAgLy8gVGhpcyBzdHJ1Y3QgaXMgdGhlIHNhbWUgYXMgYWJv
dmUsIGJ1dCBoYXMgbm8gc3RhdGljIGFzc2VydCBvbiBsb25nIGRvdWJsZSB1c2FnZSwKLSAgICAg
IC8vIGl0IHNob3VsZCBiZSB1c2VkIG9ubHkgb24gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGltcGxl
bWVudGVkIGZvciBsb25nIGRvdWJsZQotICAgICAgLy8gZXZlbiB3aGVuIHN0ZCBsaWIgc3VwcG9y
dCBpcyBtaXNzaW5nIG9yIGJyb2tlbiBmb3IgdGhhdCB0eXBlLgotICAgICAgLy8KLSAgICAgIHRl
bXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI9ZmxvYXQsIGNsYXNzIFQzPWZsb2F0LCBjbGFzcyBU
ND1mbG9hdCwgY2xhc3MgVDU9ZmxvYXQsIGNsYXNzIFQ2PWZsb2F0PgotICAgICAgc3RydWN0IHBy
b21vdGVfYXJnc19wZXJtaXNzaXZlCi0gICAgICB7Ci0gICAgICAgICB0eXBlZGVmIHR5cGVuYW1l
IHByb21vdGVfYXJnc18yPAotICAgICAgICAgICAgdHlwZW5hbWUgcmVtb3ZlX2N2PFQxPjo6dHlw
ZSwKLSAgICAgICAgICAgIHR5cGVuYW1lIHByb21vdGVfYXJnc18yPAotICAgICAgICAgICAgICAg
dHlwZW5hbWUgcmVtb3ZlX2N2PFQyPjo6dHlwZSwKLSAgICAgICAgICAgICAgIHR5cGVuYW1lIHBy
b21vdGVfYXJnc18yPAotICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgcmVtb3ZlX2N2PFQzPjo6
dHlwZSwKLSAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHByb21vdGVfYXJnc18yPAotICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgcmVtb3ZlX2N2PFQ0Pjo6dHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIHByb21vdGVfYXJnc18yPAotICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgcmVtb3ZlX2N2PFQ1Pjo6dHlwZSwgdHlwZW5hbWUgcmVtb3ZlX2N2PFQ2Pjo6
dHlwZQotICAgICAgICAgICAgICAgICAgICAgPjo6dHlwZQotICAgICAgICAgICAgICAgICAgPjo6
dHlwZQotICAgICAgICAgICAgICAgPjo6dHlwZQotICAgICAgICAgICAgPjo6dHlwZQotICAgICAg
ICAgPjo6dHlwZSB0eXBlOwotICAgICAgfTsKLQotICAgIH0gLy8gbmFtZXNwYWNlIHRvb2xzCi0g
IH0gLy8gbmFtZXNwYWNlIG1hdGgKLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBC
T09TVF9NQVRIX1BST01PVElPTl9IUFAKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbWF0aC90b29scy9yZWFsX2Nhc3QuaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbWF0aC90b29scy9yZWFsX2Nhc3Qu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzNlNjAyNTliOGFiNTI0ZTU3MTkx
OTMzNGExODMyN2FjZjE2YTRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21hdGgv
dG9vbHMvcmVhbF9jYXN0LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8vICBD
b3B5cmlnaHQgSm9obiBNYWRkb2NrIDIwMDYuCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRp
c3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUKLS8vICBCb29zdCBTb2Z0d2FyZSBMaWNlbnNl
LCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZQotLy8gIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotI2lm
bmRlZiBCT09TVF9NQVRIX1RPT0xTX1JFQUxfQ0FTVF9IUFAKLSNkZWZpbmUgQk9PU1RfTUFUSF9U
T09MU19SRUFMX0NBU1RfSFBQCi0KLSNpbmNsdWRlIDxib29zdC9tYXRoL3Rvb2xzL2NvbmZpZy5o
cHA+Ci0KLSNpZmRlZiBfTVNDX1ZFUgotI3ByYWdtYSBvbmNlCi0jZW5kaWYKLQotbmFtZXNwYWNl
IGJvb3N0eyBuYW1lc3BhY2UgbWF0aAotewotICBuYW1lc3BhY2UgdG9vbHMKLSAgewotICAgIHRl
bXBsYXRlIDxjbGFzcyBUbywgY2xhc3MgVD4KLSAgICBpbmxpbmUgQk9PU1RfTUFUSF9DT05TVEVY
UFIgVG8gcmVhbF9jYXN0KFQgdCkgQk9PU1RfTk9FWENFUFRfSUYoQk9PU1RfTUFUSF9JU19GTE9B
VChUKSAmJiBCT09TVF9NQVRIX0lTX0ZMT0FUKFRvKSkKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFRvPih0KTsKLSAgICB9Ci0gIH0gLy8gbmFtZXNwYWNlIHRvb2xzCi19IC8vIG5h
bWVzcGFjZSBtYXRoCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfTUFU
SF9UT09MU19SRUFMX0NBU1RfSFBQCi0KLQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tYXRoL3Rvb2xzL3VzZXIuaHBwIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbWF0aC90b29scy91c2VyLmhwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhhN2U1M2Q5ZWIxOTBjZGI4NzJlMzQwZTNhYjUx
NDc5YTY0Y2RkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tYXRoL3Rvb2xzL3Vz
ZXIuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8vIENvcHlyaWdodCBKb2hu
IE1hZGRvY2sgMjAwNy4KLS8vIENvcHlyaWdodCBQYXVsIEEuIEJyaXN0b3cgMjAwNy4KLQotLy8g
VXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUKLS8v
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQKLS8vIG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5v
cmcvTElDRU5TRV8xXzAudHh0KQotCi0jaWZuZGVmIEJPT1NUX01BVEhfVE9PTFNfVVNFUl9IUFAK
LSNkZWZpbmUgQk9PU1RfTUFUSF9UT09MU19VU0VSX0hQUAotCi0jaWZkZWYgX01TQ19WRVIKLSNw
cmFnbWEgb25jZQotI2VuZGlmCi0KLS8vIFRoaXMgZmlsZSBjYW4gYmUgbW9kaWZpZWQgYnkgdGhl
IHVzZXIgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHBvbGljaWVzLgotLy8gU2VlICJDaGFuZ2luZyB0
aGUgUG9saWN5IERlZmF1bHRzIiBpbiBkb2N1bWVudGF0aW9uLgotCi0vLyBkZWZpbmUgdGhpcyBp
ZiB0aGUgcGxhdGZvcm0gaGFzIG5vIGxvbmcgZG91YmxlIGZ1bmN0aW9ucywKLS8vIG9yIGlmIHRo
ZSBsb25nIGRvdWJsZSB2ZXJzaW9ucyBoYXZlIG9ubHkgZG91YmxlIHByZWNpc2lvbjoKLS8vCi0v
LyAjZGVmaW5lIEJPT1NUX01BVEhfTk9fTE9OR19ET1VCTEVfTUFUSF9GVU5DVElPTlMKLS8vCi0v
LyBQZXJmb3JtYW5jZSB0dW5pbmcgb3B0aW9uczoKLS8vCi0vLyAjZGVmaW5lIEJPT1NUX01BVEhf
UE9MWV9NRVRIT0QgMwotLy8gI2RlZmluZSBCT09TVF9NQVRIX1JBVElPTkFMX01FVEhPRCAzCi0v
LwotLy8gVGhlIG1heGltdW0gb3JkZXIgb2YgcG9seW5vbWlhbCB0aGF0IHdpbGwgYmUgZXZhbHVh
dGVkCi0vLyB2aWEgYW4gdW5yb2xsZWQgc3BlY2lhbGlzYXRpb246Ci0vLwotLy8gI2RlZmluZSBC
T09TVF9NQVRIX01BWF9QT0xZX09SREVSIDE3Ci0vLwotLy8gZGVjaWRlIHdoZXRoZXIgdG8gc3Rv
cmUgY29uc3RhbnRzIGFzIGludGVnZXJzIG9yIHJlYWxzOgotLy8KLS8vICNkZWZpbmUgQk9PU1Rf
TUFUSF9JTlRfVEFCTEVfVFlQRShSVCwgSVQpIElUCi0KLS8vCi0vLyBEZWZhdWx0IHBvbGljaWVz
IGZvbGxvdzoKLS8vCi0vLyBEb21haW4gZXJyb3JzOgotLy8KLS8vICNkZWZpbmUgQk9PU1RfTUFU
SF9ET01BSU5fRVJST1JfUE9MSUNZIHRocm93X29uX2Vycm9yCi0vLwotLy8gUG9sZSBlcnJvcnM6
Ci0vLwotLy8gI2RlZmluZSBCT09TVF9NQVRIX1BPTEVfRVJST1JfUE9MSUNZIHRocm93X29uX2Vy
cm9yCi0vLwotLy8gT3ZlcmZsb3cgRXJyb3JzOgotLy8KLS8vICNkZWZpbmUgQk9PU1RfTUFUSF9P
VkVSRkxPV19FUlJPUl9QT0xJQ1kgdGhyb3dfb25fZXJyb3IKLS8vCi0vLyBJbnRlcm5hbCBFdmFs
dWF0aW9uIEVycm9yczoKLS8vCi0vLyAjZGVmaW5lIEJPT1NUX01BVEhfRVZBTFVBVElPTl9FUlJP
Ul9QT0xJQ1kgdGhyb3dfb25fZXJyb3IKLS8vCi0vLyBVbmRlcmZvdzoKLS8vCi0vLyAjZGVmaW5l
IEJPT1NUX01BVEhfVU5ERVJGTE9XX0VSUk9SX1BPTElDWSBpZ25vcmVfZXJyb3IKLS8vCi0vLyBE
ZW5vcm1zOgotLy8KLS8vICNkZWZpbmUgQk9PU1RfTUFUSF9ERU5PUk1fRVJST1JfUE9MSUNZIGln
bm9yZV9lcnJvcgotLy8KLS8vIE1heCBkaWdpdHMgdG8gdXNlIGZvciBpbnRlcm5hbCBjYWxjdWxh
dGlvbnM6Ci0vLwotLy8gI2RlZmluZSBCT09TVF9NQVRIX0RJR0lUUzEwX1BPTElDWSAwCi0vLwot
Ly8gUHJvbW90ZSBmbG9hdHMgdG8gZG91YmxlcyBpbnRlcm5hbGx5PwotLy8KLS8vICNkZWZpbmUg
Qk9PU1RfTUFUSF9QUk9NT1RFX0ZMT0FUX1BPTElDWSB0cnVlCi0vLwotLy8gUHJvbW90ZSBkb3Vi
bGVzIHRvIGxvbmcgZG91YmxlIGludGVybmFsbHk6Ci0vLwotLy8gI2RlZmluZSBCT09TVF9NQVRI
X1BST01PVEVfRE9VQkxFX1BPTElDWSB0cnVlCi0vLwotLy8gV2hhdCBkbyBkaXNjcmV0ZSBxdWFu
dGlsZXMgcmV0dXJuPwotLy8KLS8vICNkZWZpbmUgQk9PU1RfTUFUSF9ESVNDUkVURV9RVUFOVElM
RV9QT0xJQ1kgaW50ZWdlcl9yb3VuZF9vdXR3YXJkcwotLy8KLS8vIElmIGEgZnVuY3Rpb24gaXMg
bWF0aGVtYXRpY2FsbHkgdW5kZWZpbmVkCi0vLyAoZm9yIGV4YW1wbGUgdGhlIENhdWNoeSBkaXN0
cmlidXRpb24gaGFzIG5vIG1lYW4pLAotLy8gdGhlbiBkbyB3ZSBzdG9wIHRoZSBjb2RlIGZyb20g
Y29tcGlsaW5nPwotLy8KLS8vICNkZWZpbmUgQk9PU1RfTUFUSF9BU1NFUlRfVU5ERUZJTkVEX1BP
TElDWSB0cnVlCi0vLwotLy8gTWF4aW11bSBzZXJpZXMgaXRlcnN0aW9ucyBwZXJtaXR0ZWQ6Ci0v
LwotLy8gI2RlZmluZSBCT09TVF9NQVRIX01BWF9TRVJJRVNfSVRFUkFUSU9OX1BPTElDWSAxMDAw
MDAwCi0vLwotLy8gTWF4aW11bSByb290IGZpbmRpbmcgc3RlcHMgcGVybWl0dGVkOgotLy8KLS8v
IGRlZmluZSBCT09TVF9NQVRIX01BWF9ST09UX0lURVJBVElPTl9QT0xJQ1kgMjAwCi0vLwotLy8g
RW5hYmxlIHVzZSBvZiBfX2Zsb2F0MTI4IGluIG51bWVyaWMgY29uc3RhbnRzOgotLy8KLS8vICNk
ZWZpbmUgQk9PU1RfTUFUSF9VU0VfRkxPQVQxMjgKLS8vCi0vLyBEaXNhYmxlIHVzZSBvZiBfX2Zs
b2F0MTI4IGluIG51bWVyaWNfY29uc3RhbnRzIGV2ZW4gaWYgdGhlIGNvbXBpbGVyIGxvb2tzIHRv
IHN1cHBvcnQgaXQ6Ci0vLwotLy8gI2RlZmluZSBCT09TVF9NQVRIX0RJU0FCTEVfRkxPQVQxMjgK
LQotI2VuZGlmIC8vIEJPT1NUX01BVEhfVE9PTFNfVVNFUl9IUFAKLQotCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tb3ZlL2NvcmUuaHBwIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbW92ZS9jb3JlLmhwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRkOGE4YzI3MTdkNzllY2QwMzZlZWUwNzQy
MTNhM2I4M2FjYTE4Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tb3ZlL2NvcmUu
aHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTAyICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotLy8KLS8vIChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAyMDEyLTIwMTIuCi0vLyBEaXN0
cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0v
LyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL2xpYnMvbW92ZSBmb3IgZG9jdW1lbnRhdGlvbi4KLS8vCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLQotLy8hIFxmaWxlCi0vLyEgVGhpcyBoZWFkZXIgaW1wbGVtZW50cyBtYWNy
b3MgdG8gZGVmaW5lIG1vdmFibGUgY2xhc3NlcyBhbmQKLS8vISBtb3ZlLWF3YXJlIGZ1bmN0aW9u
cwotCi0jaWZuZGVmIEJPT1NUX01PVkVfQ09SRV9IUFAKLSNkZWZpbmUgQk9PU1RfTU9WRV9DT1JF
X0hQUAotCi0jaWZuZGVmIEJPT1NUX0NPTkZJR19IUFAKLSMgIGluY2x1ZGUgPGJvb3N0L2NvbmZp
Zy5ocHA+Ci0jZW5kaWYKLSMKLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19QUkFHTUFfT05DRSkKLSMg
IHByYWdtYSBvbmNlCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L21vdmUvZGV0YWlsL2NvbmZp
Z19iZWdpbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbW92ZS9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+
Ci0KLS8vIEBjb25kCi0KLS8vYm9vc3RfbW92ZV9ub19jb3B5X2NvbnN0cnVjdG9yX29yX2Fzc2ln
biB0eXBlZGVmCi0vL3VzZWQgdG8gZGV0ZWN0IG5vbmNvcHlhYmxlIHR5cGVzIGZvciBvdGhlciBC
b29zdCBsaWJyYXJpZXMuCi0jaWYgZGVmaW5lZChCT09TVF9OT19DWFgxMV9ERUxFVEVEX0ZVTkNU
SU9OUykgfHwgZGVmaW5lZChCT09TVF9OT19DWFgxMV9SVkFMVUVfUkVGRVJFTkNFUykKLSAgICNk
ZWZpbmUgQk9PU1RfTU9WRV9JTVBMX05PX0NPUFlfQ1RPUl9PUl9BU1NJR04oVFlQRSkgXAotICAg
ICAgcHJpdmF0ZTpcCi0gICAgICBUWVBFKFRZUEUgJik7XAotICAgICAgVFlQRSYgb3BlcmF0b3I9
KFRZUEUgJik7XAotICAgICAgcHVibGljOlwKLSAgICAgIHR5cGVkZWYgaW50IGJvb3N0X21vdmVf
bm9fY29weV9jb25zdHJ1Y3Rvcl9vcl9hc3NpZ247IFwKLSAgICAgIHByaXZhdGU6XAotICAgLy8K
LSNlbHNlCi0gICAjZGVmaW5lIEJPT1NUX01PVkVfSU1QTF9OT19DT1BZX0NUT1JfT1JfQVNTSUdO
KFRZUEUpIFwKLSAgICAgIHB1YmxpYzpcCi0gICAgICBUWVBFKFRZUEUgY29uc3QgJikgPSBkZWxl
dGU7XAotICAgICAgVFlQRSYgb3BlcmF0b3I9KFRZUEUgY29uc3QgJikgPSBkZWxldGU7XAotICAg
ICAgcHVibGljOlwKLSAgICAgIHR5cGVkZWYgaW50IGJvb3N0X21vdmVfbm9fY29weV9jb25zdHJ1
Y3Rvcl9vcl9hc3NpZ247IFwKLSAgICAgIHByaXZhdGU6XAotICAgLy8KLSNlbmRpZiAgIC8vQk9P
U1RfTk9fQ1hYMTFfREVMRVRFRF9GVU5DVElPTlMKLQotLy8gQGVuZGNvbmQKLQotI2lmIGRlZmlu
ZWQoQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMpICYmICFkZWZpbmVkKEJPT1NUX01P
VkVfRE9YWUdFTl9JTlZPS0VEKQotCi0gICAjaW5jbHVkZSA8Ym9vc3QvbW92ZS9kZXRhaWwvdHlw
ZV90cmFpdHMuaHBwPgotCi0gICAjaWYgZGVmaW5lZChCT09TVF9NT1ZFX0FERFJFU1NfU0FOSVRJ
WkVSX09OKQotICAgICAgI2RlZmluZSBCT09TVF9NT1ZFX1RPX1JWX0NBU1QoUlZfVFlQRSwgQVJH
KSByZWludGVycHJldF9jYXN0PFJWX1RZUEU+KEFSRykKLSAgICNlbHNlCi0gICAgICAjZGVmaW5l
IEJPT1NUX01PVkVfVE9fUlZfQ0FTVChSVl9UWVBFLCBBUkcpIHN0YXRpY19jYXN0PFJWX1RZUEU+
KEFSRykKLSAgICNlbmRpZgotCi0gICAvL01vdmUgZW11bGF0aW9uIHJ2IGJyZWFrcyBzdGFuZGFy
ZCBhbGlhc2luZyBydWxlcyBzbyBhZGQgd29ya2Fyb3VuZHMgZm9yIHNvbWUgY29tcGlsZXJzCi0g
ICAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID49IDQpICYmIFwKLSAgICAgIChc
Ci0gICAgICAgICBkZWZpbmVkKEJPT1NUX0dDQykgfHwgICBcCi0gICAgICAgICAoZGVmaW5lZChC
T09TVF9JTlRFTCkgJiYgKEJPT1NUX0lOVEVMX0NYWF9WRVJTSU9OID49IDEzMDApKSBcCi0gICAg
ICApCi0gICAgICAjZGVmaW5lIEJPT1NUX01PVkVfQVRUUklCVVRFX01BWV9BTElBUyBfX2F0dHJp
YnV0ZV9fKChfX21heV9hbGlhc19fKSkKLSAgICNlbHNlCi0gICAgICAjZGVmaW5lIEJPT1NUX01P
VkVfQVRUUklCVVRFX01BWV9BTElBUwotICAgI2VuZGlmCi0KLSAgIG5hbWVzcGFjZSBib29zdCB7
Ci0KLSAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgLy8KLSAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBydgotICAgLy8KLSAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
ICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICBjbGFzcyBydgotICAgICAgOiBwdWJsaWMgOjpib29z
dDo6bW92ZV9kZXRhaWw6OmlmX2MKLSAgICAgICAgIDwgOjpib29zdDo6bW92ZV9kZXRhaWw6Omlz
X2NsYXNzPFQ+Ojp2YWx1ZQotICAgICAgICAgLCBUCi0gICAgICAgICAsIDo6Ym9vc3Q6Om1vdmVf
ZGV0YWlsOjpuYXQKLSAgICAgICAgID46OnR5cGUKLSAgIHsKLSAgICAgIHJ2KCk7Ci0gICAgICB+
cnYoKSB0aHJvdygpOwotICAgICAgcnYocnYgY29uc3QmKTsKLSAgICAgIHZvaWQgb3BlcmF0b3I9
KHJ2IGNvbnN0Jik7Ci0gICB9IEJPT1NUX01PVkVfQVRUUklCVVRFX01BWV9BTElBUzsKLQotCi0g
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgIC8vCi0gICAvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpc19ydgotICAgLy8KLSAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0gICBuYW1l
c3BhY2UgbW92ZV9kZXRhaWwgewotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIHN0cnVjdCBp
c19ydgotICAgICAgICAvL0Rlcml2ZSBmcm9tIGludGVncmFsIGNvbnN0YW50IGJlY2F1c2Ugc29t
ZSBCb29zdCBjb2RlIGFzc3VtbWVzIGl0IGhhcwotICAgICAgICAvL2EgInR5cGUiIGludGVybmFs
IHR5cGVkZWYKLSAgICAgIDogaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgOjpib29zdDo6bW92ZV9k
ZXRhaWw6OmlzX3J2X2ltcGw8VD46OnZhbHVlID4KLSAgIHt9OwotCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVD4KLSAgIHN0cnVjdCBpc19ub3RfcnYKLSAgIHsKLSAgICAgIHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gIWlzX3J2PFQ+Ojp2YWx1ZTsKLSAgIH07Ci0KLSAgIH0gIC8vbmFtZXNwYWNlIG1v
dmVfZGV0YWlsIHsKLQotICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAvLwotICAgLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX21vdmVfZW11bGF0aW9uX2VuYWJsZWQKLSAg
IC8vCi0gICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICBz
dHJ1Y3QgaGFzX21vdmVfZW11bGF0aW9uX2VuYWJsZWQKLSAgICAgIDogOjpib29zdDo6bW92ZV9k
ZXRhaWw6Omhhc19tb3ZlX2VtdWxhdGlvbl9lbmFibGVkX2ltcGw8VD4KLSAgIHt9OwotCi0gICB0
ZW1wbGF0ZTxjbGFzcyBUPgotICAgc3RydWN0IGhhc19tb3ZlX2VtdWxhdGlvbl9kaXNhYmxlZAot
ICAgewotICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAhOjpib29zdDo6bW92ZV9kZXRh
aWw6Omhhc19tb3ZlX2VtdWxhdGlvbl9lbmFibGVkX2ltcGw8VD46OnZhbHVlOwotICAgfTsKLQot
ICAgfSAgLy9uYW1lc3BhY2UgYm9vc3QgewotCi0gICAjZGVmaW5lIEJPT1NUX1JWX1JFRihUWVBF
KVwKLSAgICAgIDo6Ym9vc3Q6OnJ2PCBUWVBFID4mIFwKLSAgIC8vCi0KLSAgICNkZWZpbmUgQk9P
U1RfUlZfUkVGXzJfVEVNUExfQVJHUyhUWVBFLCBBUkcxLCBBUkcyKVwKLSAgICAgIDo6Ym9vc3Q6
OnJ2PCBUWVBFPEFSRzEsIEFSRzI+ID4mIFwKLSAgIC8vCi0KLSAgICNkZWZpbmUgQk9PU1RfUlZf
UkVGXzNfVEVNUExfQVJHUyhUWVBFLCBBUkcxLCBBUkcyLCBBUkczKVwKLSAgICAgIDo6Ym9vc3Q6
OnJ2PCBUWVBFPEFSRzEsIEFSRzIsIEFSRzM+ID4mIFwKLSAgIC8vCi0KLSAgICNkZWZpbmUgQk9P
U1RfUlZfUkVGX0JFR1wKLSAgICAgIDo6Ym9vc3Q6OnJ2PCAgIFwKLSAgIC8vCi0KLSAgICNkZWZp
bmUgQk9PU1RfUlZfUkVGX0VORFwKLSAgICAgID4mIFwKLSAgIC8vCi0KLSAgICNkZWZpbmUgQk9P
U1RfUlZfUkVGX0JFR19JRl9DWFgxMSBcCi0gICAgICBcCi0gICAvLwotCi0gICAjZGVmaW5lIEJP
T1NUX1JWX1JFRl9FTkRfSUZfQ1hYMTEgXAotICAgICAgXAotICAgLy8KLQotICAgI2RlZmluZSBC
T09TVF9GV0RfUkVGKFRZUEUpXAotICAgICAgY29uc3QgVFlQRSAmIFwKLSAgIC8vCi0KLSAgICNk
ZWZpbmUgQk9PU1RfQ09QWV9BU1NJR05fUkVGKFRZUEUpXAotICAgICAgY29uc3QgOjpib29zdDo6
cnY8IFRZUEUgPiYgXAotICAgLy8KLQotICAgI2RlZmluZSBCT09TVF9DT1BZX0FTU0lHTl9SRUZf
QkVHIFwKLSAgICAgIGNvbnN0IDo6Ym9vc3Q6OnJ2PCAgXAotICAgLy8KLQotICAgI2RlZmluZSBC
T09TVF9DT1BZX0FTU0lHTl9SRUZfRU5EIFwKLSAgICAgID4mIFwKLSAgIC8vCi0KLSAgICNkZWZp
bmUgQk9PU1RfQ09QWV9BU1NJR05fUkVGXzJfVEVNUExfQVJHUyhUWVBFLCBBUkcxLCBBUkcyKVwK
LSAgICAgIGNvbnN0IDo6Ym9vc3Q6OnJ2PCBUWVBFPEFSRzEsIEFSRzI+ID4mIFwKLSAgIC8vCi0K
LSAgICNkZWZpbmUgQk9PU1RfQ09QWV9BU1NJR05fUkVGXzNfVEVNUExfQVJHUyhUWVBFLCBBUkcx
LCBBUkcyLCBBUkczKVwKLSAgICAgIGNvbnN0IDo6Ym9vc3Q6OnJ2PCBUWVBFPEFSRzEsIEFSRzIs
IEFSRzM+ID4mIFwKLSAgIC8vCi0KLSAgICNkZWZpbmUgQk9PU1RfQ0FUQ0hfQ09OU1RfUkxWQUxV
RShUWVBFKVwKLSAgICAgIGNvbnN0IDo6Ym9vc3Q6OnJ2PCBUWVBFID4mIFwKLSAgIC8vCi0KLSAg
IG5hbWVzcGFjZSBib29zdCB7Ci0gICBuYW1lc3BhY2UgbW92ZV9kZXRhaWwgewotCi0gICB0ZW1w
bGF0ZSA8Y2xhc3MgUmV0LCBjbGFzcyBUPgotICAgQk9PU1RfTU9WRV9GT1JDRUlOTElORSB0eXBl
bmFtZSA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6ZW5hYmxlX2lmX2MKLSAgICAgIDwgIDo6Ym9vc3Q6
Om1vdmVfZGV0YWlsOjppc19sdmFsdWVfcmVmZXJlbmNlPFJldD46OnZhbHVlIHx8Ci0gICAgICAg
ICE6OmJvb3N0OjpoYXNfbW92ZV9lbXVsYXRpb25fZW5hYmxlZDxUPjo6dmFsdWUKLSAgICAgICwg
VCY+Ojp0eXBlCi0gICAgICAgICBtb3ZlX3JldHVybihUJiB4KSBCT09TVF9OT0VYQ0VQVAotICAg
ewotICAgICAgcmV0dXJuIHg7Ci0gICB9Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBSZXQsIGNsYXNz
IFQ+Ci0gICBCT09TVF9NT1ZFX0ZPUkNFSU5MSU5FIHR5cGVuYW1lIDo6Ym9vc3Q6Om1vdmVfZGV0
YWlsOjplbmFibGVfaWZfYwotICAgICAgPCAhOjpib29zdDo6bW92ZV9kZXRhaWw6OmlzX2x2YWx1
ZV9yZWZlcmVuY2U8UmV0Pjo6dmFsdWUgJiYKLSAgICAgICAgIDo6Ym9vc3Q6Omhhc19tb3ZlX2Vt
dWxhdGlvbl9lbmFibGVkPFQ+Ojp2YWx1ZQotICAgICAgLCA6OmJvb3N0OjpydjxUPiY+Ojp0eXBl
Ci0gICAgICAgICBtb3ZlX3JldHVybihUJiB4KSBCT09TVF9OT0VYQ0VQVAotICAgewotICAgICAg
cmV0dXJuICpCT09TVF9NT1ZFX1RPX1JWX0NBU1QoOjpib29zdDo6cnY8VD4qLCA6OmJvb3N0Ojpt
b3ZlX2RldGFpbDo6YWRkcmVzc29mKHgpKTsKLSAgIH0KLQotICAgdGVtcGxhdGUgPGNsYXNzIFJl
dCwgY2xhc3MgVD4KLSAgIEJPT1NUX01PVkVfRk9SQ0VJTkxJTkUgdHlwZW5hbWUgOjpib29zdDo6
bW92ZV9kZXRhaWw6OmVuYWJsZV9pZl9jCi0gICAgICA8ICE6OmJvb3N0Ojptb3ZlX2RldGFpbDo6
aXNfbHZhbHVlX3JlZmVyZW5jZTxSZXQ+Ojp2YWx1ZSAmJgotICAgICAgICAgOjpib29zdDo6aGFz
X21vdmVfZW11bGF0aW9uX2VuYWJsZWQ8VD46OnZhbHVlCi0gICAgICAsIDo6Ym9vc3Q6OnJ2PFQ+
Jj46OnR5cGUKLSAgICAgICAgIG1vdmVfcmV0dXJuKDo6Ym9vc3Q6OnJ2PFQ+JiB4KSBCT09TVF9O
T0VYQ0VQVAotICAgewotICAgICAgcmV0dXJuIHg7Ci0gICB9Ci0KLSAgIH0gIC8vbmFtZXNwYWNl
IG1vdmVfZGV0YWlsIHsKLSAgIH0gIC8vbmFtZXNwYWNlIGJvb3N0IHsKLQotICAgI2RlZmluZSBC
T09TVF9NT1ZFX1JFVChSRVRfVFlQRSwgUkVGKVwKLSAgICAgIGJvb3N0Ojptb3ZlX2RldGFpbDo6
bW92ZV9yZXR1cm48IFJFVF9UWVBFID4oUkVGKQotICAgLy8KLQotICAgI2RlZmluZSBCT09TVF9N
T1ZFX0JBU0UoQkFTRV9UWVBFLCBBUkcpIFwKLSAgICAgIDo6Ym9vc3Q6Om1vdmUoKEJBU0VfVFlQ
RSYpKEFSRykpCi0gICAvLwotCi0gICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgIC8vCi0gICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICBCT09TVF9NT1ZBQkxFX0JVVF9OT1RfQ09QWUFCTEUK
LSAgIC8vCi0gICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICNkZWZpbmUgQk9PU1RfTU9WQUJM
RV9CVVRfTk9UX0NPUFlBQkxFKFRZUEUpXAotICAgICAgQk9PU1RfTU9WRV9JTVBMX05PX0NPUFlf
Q1RPUl9PUl9BU1NJR04oVFlQRSlcCi0gICAgICBwdWJsaWM6XAotICAgICAgQk9PU1RfTU9WRV9G
T1JDRUlOTElORSBvcGVyYXRvciA6OmJvb3N0OjpydjxUWVBFPiYoKSBcCi0gICAgICB7ICByZXR1
cm4gKkJPT1NUX01PVkVfVE9fUlZfQ0FTVCg6OmJvb3N0OjpydjxUWVBFPiosIHRoaXMpOyAgfVwK
LSAgICAgIEJPT1NUX01PVkVfRk9SQ0VJTkxJTkUgb3BlcmF0b3IgY29uc3QgOjpib29zdDo6cnY8
VFlQRT4mKCkgY29uc3QgXAotICAgICAgeyAgcmV0dXJuICpCT09TVF9NT1ZFX1RPX1JWX0NBU1Qo
Y29uc3QgOjpib29zdDo6cnY8VFlQRT4qLCB0aGlzKTsgIH1cCi0gICAgICBwcml2YXRlOlwKLSAg
IC8vCi0KLSAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgLy8KLSAgIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgIEJPT1NUX0NPUFlBQkxFX0FORF9NT1ZBQkxFCi0gICAvLwotICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0KLSAgICNkZWZpbmUgQk9PU1RfQ09QWUFCTEVfQU5EX01PVkFCTEUo
VFlQRSlcCi0gICAgICBwdWJsaWM6XAotICAgICAgQk9PU1RfTU9WRV9GT1JDRUlOTElORSBUWVBF
JiBvcGVyYXRvcj0oVFlQRSAmdClcCi0gICAgICB7ICB0aGlzLT5vcGVyYXRvcj0oY29uc3RfY2Fz
dDxjb25zdCBUWVBFJj4odCkpOyByZXR1cm4gKnRoaXM7fVwKLSAgICAgIHB1YmxpYzpcCi0gICAg
ICBCT09TVF9NT1ZFX0ZPUkNFSU5MSU5FIG9wZXJhdG9yIDo6Ym9vc3Q6OnJ2PFRZUEU+JigpIFwK
LSAgICAgIHsgIHJldHVybiAqQk9PU1RfTU9WRV9UT19SVl9DQVNUKDo6Ym9vc3Q6OnJ2PFRZUEU+
KiwgdGhpcyk7ICB9XAotICAgICAgQk9PU1RfTU9WRV9GT1JDRUlOTElORSBvcGVyYXRvciBjb25z
dCA6OmJvb3N0OjpydjxUWVBFPiYoKSBjb25zdCBcCi0gICAgICB7ICByZXR1cm4gKkJPT1NUX01P
VkVfVE9fUlZfQ0FTVChjb25zdCA6OmJvb3N0OjpydjxUWVBFPiosIHRoaXMpOyAgfVwKLSAgICAg
IHByaXZhdGU6XAotICAgLy8KLQotICAgI2RlZmluZSBCT09TVF9DT1BZQUJMRV9BTkRfTU9WQUJM
RV9BTFQoVFlQRSlcCi0gICAgICBwdWJsaWM6XAotICAgICAgQk9PU1RfTU9WRV9GT1JDRUlOTElO
RSBvcGVyYXRvciA6OmJvb3N0OjpydjxUWVBFPiYoKSBcCi0gICAgICB7ICByZXR1cm4gKkJPT1NU
X01PVkVfVE9fUlZfQ0FTVCg6OmJvb3N0OjpydjxUWVBFPiosIHRoaXMpOyAgfVwKLSAgICAgIEJP
T1NUX01PVkVfRk9SQ0VJTkxJTkUgb3BlcmF0b3IgY29uc3QgOjpib29zdDo6cnY8VFlQRT4mKCkg
Y29uc3QgXAotICAgICAgeyAgcmV0dXJuICpCT09TVF9NT1ZFX1RPX1JWX0NBU1QoY29uc3QgOjpi
b29zdDo6cnY8VFlQRT4qLCB0aGlzKTsgIH1cCi0gICAgICBwcml2YXRlOlwKLSAgIC8vCi0KLSAg
IG5hbWVzcGFjZSBib29zdHsKLSAgIG5hbWVzcGFjZSBtb3ZlX2RldGFpbHsKLQotICAgdGVtcGxh
dGU8IGNsYXNzIFQ+Ci0gICBzdHJ1Y3QgZm9yd2FyZF90eXBlCi0gICB7IHR5cGVkZWYgY29uc3Qg
VCAmdHlwZTsgfTsKLQotICAgdGVtcGxhdGU8IGNsYXNzIFQ+Ci0gICBzdHJ1Y3QgZm9yd2FyZF90
eXBlPCBib29zdDo6cnY8VD4gPgotICAgeyB0eXBlZGVmIFQgdHlwZTsgfTsKLQotICAgfX0KLQot
I2Vsc2UgICAgLy9CT09TVF9OT19DWFgxMV9SVkFMVUVfUkVGRVJFTkNFUwotCi0gICAvLyEgVGhp
cyBtYWNybyBtYXJrcyBhIHR5cGUgYXMgbW92YWJsZSBidXQgbm90IGNvcHlhYmxlLCBkaXNhYmxp
bmcgY29weSBjb25zdHJ1Y3Rpb24KLSAgIC8vISBhbmQgYXNzaWdubWVudC4gVGhlIHVzZXIgd2ls
bCBuZWVkIHRvIHdyaXRlIGEgbW92ZSBjb25zdHJ1Y3Rvci9hc3NpZ25tZW50IGFzIGV4cGxhaW5l
ZAotICAgLy8hIGluIHRoZSBkb2N1bWVudGF0aW9uIHRvIGZ1bGx5IHdyaXRlIGEgbW92YWJsZSBi
dXQgbm90IGNvcHlhYmxlIGNsYXNzLgotICAgI2RlZmluZSBCT09TVF9NT1ZBQkxFX0JVVF9OT1Rf
Q09QWUFCTEUoVFlQRSlcCi0gICAgICBCT09TVF9NT1ZFX0lNUExfTk9fQ09QWV9DVE9SX09SX0FT
U0lHTihUWVBFKVwKLSAgICAgIHB1YmxpYzpcCi0gICAgICB0eXBlZGVmIGludCBib29zdF9tb3Zl
X2VtdWxhdGlvbl90O1wKLSAgICAgIHByaXZhdGU6XAotICAgLy8KLQotICAgLy8hIFRoaXMgbWFj
cm8gbWFya3MgYSB0eXBlIGFzIGNvcHlhYmxlIGFuZCBtb3ZhYmxlLgotICAgLy8hIFRoZSB1c2Vy
IHdpbGwgbmVlZCB0byB3cml0ZSBhIG1vdmUgY29uc3RydWN0b3IvYXNzaWdubWVudCBhbmQgYSBj
b3B5IGFzc2lnbm1lbnQKLSAgIC8vISBhcyBleHBsYWluZWQgaW4gdGhlIGRvY3VtZW50YXRpb24g
dG8gZnVsbHkgd3JpdGUgYSBjb3B5YWJsZSBhbmQgbW92YWJsZSBjbGFzcy4KLSAgICNkZWZpbmUg
Qk9PU1RfQ09QWUFCTEVfQU5EX01PVkFCTEUoVFlQRSlcCi0gICAvLwotCi0gICAjaWYgIWRlZmlu
ZWQoQk9PU1RfTU9WRV9ET1hZR0VOX0lOVk9LRUQpCi0gICAjZGVmaW5lIEJPT1NUX0NPUFlBQkxF
X0FORF9NT1ZBQkxFX0FMVChUWVBFKVwKLSAgIC8vCi0gICAjZW5kaWYgICAvLyNpZiAhZGVmaW5l
ZChCT09TVF9NT1ZFX0RPWFlHRU5fSU5WT0tFRCkKLQotICAgbmFtZXNwYWNlIGJvb3N0IHsKLQot
ICAgLy8hVGhpcyB0cmFpdCB5aWVsZHMgdG8gYSBjb21waWxlLXRpbWUgdHJ1ZSBib29sZWFuIGlm
IFQgd2FzIG1hcmtlZCBhcwotICAgLy8hQk9PU1RfTU9WQUJMRV9CVVRfTk9UX0NPUFlBQkxFIG9y
IEJPT1NUX0NPUFlBQkxFX0FORF9NT1ZBQkxFIGFuZAotICAgLy8hcnZhbHVlIHJlZmVyZW5jZXMg
YXJlIG5vdCBhdmFpbGFibGUgb24gdGhlIHBsYXRmb3JtLiBGYWxzZSBvdGhlcndpc2UuCi0gICB0
ZW1wbGF0ZTxjbGFzcyBUPgotICAgc3RydWN0IGhhc19tb3ZlX2VtdWxhdGlvbl9lbmFibGVkCi0g
ICB7Ci0gICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwotICAgfTsKLQotICAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgIHN0cnVjdCBoYXNfbW92ZV9lbXVsYXRpb25fZGlzYWJsZWQK
LSAgIHsKLSAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKLSAgIH07Ci0KLSAg
IH0gIC8vbmFtZXNwYWNlIGJvb3N0ewotCi0gICAvLyFUaGlzIG1hY3JvIGlzIHVzZWQgdG8gYWNo
aWV2ZSBwb3J0YWJsZSBzeW50YXggaW4gbW92ZQotICAgLy8hY29uc3RydWN0b3JzIGFuZCBhc3Np
Z25tZW50cyBmb3IgY2xhc3NlcyBtYXJrZWQgYXMKLSAgIC8vIUJPT1NUX0NPUFlBQkxFX0FORF9N
T1ZBQkxFIG9yIEJPT1NUX01PVkFCTEVfQlVUX05PVF9DT1BZQUJMRQotICAgI2RlZmluZSBCT09T
VF9SVl9SRUYoVFlQRSlcCi0gICAgICBUWVBFICYmIFwKLSAgIC8vCi0KLSAgIC8vIVRoaXMgbWFj
cm8gaXMgdXNlZCB0byBhY2hpZXZlIHBvcnRhYmxlIHN5bnRheCBpbiBtb3ZlCi0gICAvLyFjb25z
dHJ1Y3RvcnMgYW5kIGFzc2lnbm1lbnRzIGZvciB0ZW1wbGF0ZSBjbGFzc2VzIG1hcmtlZCBhcwot
ICAgLy8hQk9PU1RfQ09QWUFCTEVfQU5EX01PVkFCTEUgb3IgQk9PU1RfTU9WQUJMRV9CVVRfTk9U
X0NPUFlBQkxFLgotICAgLy8hQXMgbWFjcm9zIGhhdmUgcHJvYmxlbXMgd2l0aCBjb21tYS1zZXBh
cmF0ZWQgdGVtcGxhdGUgYXJndW1lbnRzLAotICAgLy8hdGhlIHRlbXBsYXRlIGFyZ3VtZW50IG11
c3QgYmUgcHJlY2VkZWQgd2l0aCBCT09TVF9SVl9SRUZfQkVHCi0gICAvLyFhbmQgZW5kZWQgd2l0
aCBCT09TVF9SVl9SRUZfRU5ECi0gICAjZGVmaW5lIEJPT1NUX1JWX1JFRl9CRUdcCi0gICAgICAg
ICBcCi0gICAvLwotCi0gICAvLyFUaGlzIG1hY3JvIGlzIHVzZWQgdG8gYWNoaWV2ZSBwb3J0YWJs
ZSBzeW50YXggaW4gbW92ZQotICAgLy8hY29uc3RydWN0b3JzIGFuZCBhc3NpZ25tZW50cyBmb3Ig
dGVtcGxhdGUgY2xhc3NlcyBtYXJrZWQgYXMKLSAgIC8vIUJPT1NUX0NPUFlBQkxFX0FORF9NT1ZB
QkxFIG9yIEJPT1NUX01PVkFCTEVfQlVUX05PVF9DT1BZQUJMRS4KLSAgIC8vIUFzIG1hY3JvcyBo
YXZlIHByb2JsZW1zIHdpdGggY29tbWEtc2VwYXJhdGVkIHRlbXBsYXRlIGFyZ3VtZW50cywKLSAg
IC8vIXRoZSB0ZW1wbGF0ZSBhcmd1bWVudCBtdXN0IGJlIHByZWNlZGVkIHdpdGggQk9PU1RfUlZf
UkVGX0JFRwotICAgLy8hYW5kIGVuZGVkIHdpdGggQk9PU1RfUlZfUkVGX0VORAotICAgI2RlZmlu
ZSBCT09TVF9SVl9SRUZfRU5EXAotICAgICAgJiYgXAotICAgLy8KLQotICAgLy8hVGhpcyBtYWNy
byBleHBhbmRzIHRvIEJPT1NUX1JWX1JFRl9CRUcgaWYgQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JF
RkVSRU5DRVMKLSAgIC8vIWlzIG5vdCBkZWZpbmVkLCBlbXB0eSBvdGhlcndpc2UKLSAgICNkZWZp
bmUgQk9PU1RfUlZfUkVGX0JFR19JRl9DWFgxMSBcCi0gICAgICBCT09TVF9SVl9SRUZfQkVHIFwK
LSAgIC8vCi0KLSAgIC8vIVRoaXMgbWFjcm8gZXhwYW5kcyB0byBCT09TVF9SVl9SRUZfRU5EIGlm
IEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZFUkVOQ0VTCi0gICAvLyFpcyBub3QgZGVmaW5lZCwg
ZW1wdHkgb3RoZXJ3aXNlCi0gICAjZGVmaW5lIEJPT1NUX1JWX1JFRl9FTkRfSUZfQ1hYMTEgXAot
ICAgICAgQk9PU1RfUlZfUkVGX0VORCBcCi0gICAvLwotCi0gICAvLyFUaGlzIG1hY3JvIGlzIHVz
ZWQgdG8gYWNoaWV2ZSBwb3J0YWJsZSBzeW50YXggaW4gY29weQotICAgLy8hYXNzaWdubWVudCBm
b3IgY2xhc3NlcyBtYXJrZWQgYXMgQk9PU1RfQ09QWUFCTEVfQU5EX01PVkFCTEUuCi0gICAjZGVm
aW5lIEJPT1NUX0NPUFlfQVNTSUdOX1JFRihUWVBFKVwKLSAgICAgIGNvbnN0IFRZUEUgJiBcCi0g
ICAvLwotCi0gICAvLyEgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGltcGxlbWVudCBwb3J0YWJsZSBw
ZXJmZWN0IGZvcndhcmRpbmcKLSAgIC8vISBhcyBleHBsYWluZWQgaW4gdGhlIGRvY3VtZW50YXRp
b24uCi0gICAjZGVmaW5lIEJPT1NUX0ZXRF9SRUYoVFlQRSlcCi0gICAgICBUWVBFICYmIFwKLSAg
IC8vCi0KLSAgICNpZiAhZGVmaW5lZChCT09TVF9NT1ZFX0RPWFlHRU5fSU5WT0tFRCkKLQotICAg
I2RlZmluZSBCT09TVF9SVl9SRUZfMl9URU1QTF9BUkdTKFRZUEUsIEFSRzEsIEFSRzIpXAotICAg
ICAgVFlQRTxBUkcxLCBBUkcyPiAmJiBcCi0gICAvLwotCi0gICAjZGVmaW5lIEJPT1NUX1JWX1JF
Rl8zX1RFTVBMX0FSR1MoVFlQRSwgQVJHMSwgQVJHMiwgQVJHMylcCi0gICAgICBUWVBFPEFSRzEs
IEFSRzIsIEFSRzM+ICYmIFwKLSAgIC8vCi0KLSAgICNkZWZpbmUgQk9PU1RfQ09QWV9BU1NJR05f
UkVGX0JFRyBcCi0gICAgICBjb25zdCBcCi0gICAvLwotCi0gICAjZGVmaW5lIEJPT1NUX0NPUFlf
QVNTSUdOX1JFRl9FTkQgXAotICAgICAgJiBcCi0gICAvLwotCi0gICAjZGVmaW5lIEJPT1NUX0NP
UFlfQVNTSUdOX1JFRl8yX1RFTVBMX0FSR1MoVFlQRSwgQVJHMSwgQVJHMilcCi0gICAgICBjb25z
dCBUWVBFPEFSRzEsIEFSRzI+ICYgXAotICAgLy8KLQotICAgI2RlZmluZSBCT09TVF9DT1BZX0FT
U0lHTl9SRUZfM19URU1QTF9BUkdTKFRZUEUsIEFSRzEsIEFSRzIsIEFSRzMpXAotICAgICAgY29u
c3QgVFlQRTxBUkcxLCBBUkcyLCBBUkczPiYgXAotICAgLy8KLQotICAgI2RlZmluZSBCT09TVF9D
QVRDSF9DT05TVF9STFZBTFVFKFRZUEUpXAotICAgICAgY29uc3QgVFlQRSAmIFwKLSAgIC8vCi0K
LSAgICNlbmRpZiAgIC8vI2lmICFkZWZpbmVkKEJPT1NUX01PVkVfRE9YWUdFTl9JTlZPS0VEKQot
Ci0gICAjaWYgIWRlZmluZWQoQk9PU1RfTU9WRV9NU1ZDX0FVVE9fTU9WRV9SRVRVUk5fQlVHKSB8
fCBkZWZpbmVkKEJPT1NUX01PVkVfRE9YWUdFTl9JTlZPS0VEKQotCi0gICAgICAvLyFUaGlzIG1h
Y3JvIGlzIHVzZWQgdG8gYWNoaWV2ZSBwb3J0YWJsZSBtb3ZlIHJldHVybiBzZW1hbnRpY3MuCi0g
ICAgICAvLyFUaGUgQysrMTEgU3RhbmRhcmQgYWxsb3dzIGltcGxpY2l0IG1vdmUgcmV0dXJucyB3
aGVuIHRoZSBvYmplY3QgdG8gYmUgcmV0dXJuZWQKLSAgICAgIC8vIWlzIGRlc2lnbmF0ZWQgYnkg
YSBsdmFsdWUgYW5kOgotICAgICAgLy8hICAgLSBUaGUgY3JpdGVyaWEgZm9yIGVsaXNpb24gb2Yg
YSBjb3B5IG9wZXJhdGlvbiBhcmUgbWV0IE9SCi0gICAgICAvLyEgICAtIFRoZSBjcml0ZXJpYSB3
b3VsZCBiZSBtZXQgc2F2ZSBmb3IgdGhlIGZhY3QgdGhhdCB0aGUgc291cmNlIG9iamVjdCBpcyBh
IGZ1bmN0aW9uIHBhcmFtZXRlcgotICAgICAgLy8hCi0gICAgICAvLyFGb3IgQysrMTEgY29uZm9y
bWluZyBjb21waWxlcnMgdGhpcyBtYWNyb3Mgb25seSB5aWVsZHMgdG8gUkVGOgotICAgICAgLy8h
IDxjb2RlPnJldHVybiBCT09TVF9NT1ZFX1JFVChSRVRfVFlQRSwgUkVGKTs8L2NvZGU+IC0+IDxj
b2RlPnJldHVybiBSRUY7PC9jb2RlPgotICAgICAgLy8hCi0gICAgICAvLyFGb3IgY29tcGlsZXJz
IHdpdGhvdXQgcnZhbHVlIHJlZmVyZW5jZXMKLSAgICAgIC8vIXRoaXMgbWFjcm8gZG9lcyBhbiBl
eHBsaWNpdCBtb3ZlIGlmIHRoZSBtb3ZlIGVtdWxhdGlvbiBpcyBhY3RpdmF0ZWQKLSAgICAgIC8v
IWFuZCB0aGUgcmV0dXJuIHR5cGUgKFJFVF9UWVBFKSBpcyBub3QgYSByZWZlcmVuY2UuCi0gICAg
ICAvLyEKLSAgICAgIC8vIUZvciBub24tY29uZm9ybWluZyBjb21waWxlcnMgd2l0aCBydmFsdWUg
cmVmZXJlbmNlcyBsaWtlIFZpc3VhbCAyMDEwICYgMjAxMiwKLSAgICAgIC8vIWFuIGV4cGxpY2l0
IG1vdmUgaXMgcGVyZm9ybWVkIGlmIFJFVF9UWVBFIGlzIG5vdCBhIHJlZmVyZW5jZS4KLSAgICAg
IC8vIQotICAgICAgLy8hIDxiPkNhdXRpb248L2I+OiBXaGVuIHVzaW5nIHRoaXMgbWFjcm8gaW4g
bm9uLWNvbmZvcm1pbmcgb3IgQysrMDMKLSAgICAgIC8vIWNvbXBpbGVycywgYSBtb3ZlIHdpbGwg
YmUgcGVyZm9ybWVkIGV2ZW4gaWYgdGhlIEMrKzExIHN0YW5kYXJkIGRvZXMgbm90IGFsbG93IGl0
Ci0gICAgICAvLyEoZS5nLiByZXR1cm5pbmcgYSBzdGF0aWMgdmFyaWFibGUpLiBUaGUgdXNlciBp
cyByZXNwb25zaWJsZSBmb3IgdXNpbmcgdGhpcyBtYWNybwotICAgICAgLy8hb25seSB0byByZXR1
cm4gbG9jYWwgb2JqZWN0cyB0aGF0IG1ldCBDKysxMSBjcml0ZXJpYS4KLSAgICAgICNkZWZpbmUg
Qk9PU1RfTU9WRV9SRVQoUkVUX1RZUEUsIFJFRilcCi0gICAgICAgICBSRUYKLSAgICAgIC8vCi0K
LSAgICNlbHNlIC8vIWRlZmluZWQoQk9PU1RfTU9WRV9NU1ZDX0FVVE9fTU9WRV9SRVRVUk5fQlVH
KSB8fCBkZWZpbmVkKEJPT1NUX01PVkVfRE9YWUdFTl9JTlZPS0VEKQotCi0gICAgICAjaW5jbHVk
ZSA8Ym9vc3QvbW92ZS9kZXRhaWwvbWV0YV91dGlscy5ocHA+Ci0KLSAgICAgIG5hbWVzcGFjZSBi
b29zdCB7Ci0gICAgICBuYW1lc3BhY2UgbW92ZV9kZXRhaWwgewotCi0gICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgUmV0LCBjbGFzcyBUPgotICAgICAgQk9PU1RfTU9WRV9GT1JDRUlOTElORSB0eXBlbmFt
ZSA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6ZW5hYmxlX2lmX2MKLSAgICAgICAgIDwgIDo6Ym9vc3Q6
Om1vdmVfZGV0YWlsOjppc19sdmFsdWVfcmVmZXJlbmNlPFJldD46OnZhbHVlCi0gICAgICAgICAs
IFQmPjo6dHlwZQotICAgICAgICAgICAgbW92ZV9yZXR1cm4oVCYgeCkgQk9PU1RfTk9FWENFUFQK
LSAgICAgIHsKLSAgICAgICAgIHJldHVybiB4OwotICAgICAgfQotCi0gICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgUmV0LCBjbGFzcyBUPgotICAgICAgQk9PU1RfTU9WRV9GT1JDRUlOTElORSB0eXBlbmFt
ZSA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6ZW5hYmxlX2lmX2MKLSAgICAgICAgIDwgITo6Ym9vc3Q6
Om1vdmVfZGV0YWlsOjppc19sdmFsdWVfcmVmZXJlbmNlPFJldD46OnZhbHVlCi0gICAgICAgICAs
IFJldCAmJiA+Ojp0eXBlCi0gICAgICAgICAgICBtb3ZlX3JldHVybihUJiYgdCkgQk9PU1RfTk9F
WENFUFQKLSAgICAgIHsKLSAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDwgUmV0JiYgPih0KTsK
LSAgICAgIH0KLQotICAgICAgfSAgLy9uYW1lc3BhY2UgbW92ZV9kZXRhaWwgewotICAgICAgfSAg
Ly9uYW1lc3BhY2UgYm9vc3QgewotCi0gICAgICAjZGVmaW5lIEJPT1NUX01PVkVfUkVUKFJFVF9U
WVBFLCBSRUYpXAotICAgICAgICAgYm9vc3Q6Om1vdmVfZGV0YWlsOjptb3ZlX3JldHVybjwgUkVU
X1RZUEUgPihSRUYpCi0gICAgICAvLwotCi0gICAjZW5kaWYgICAvLyFkZWZpbmVkKEJPT1NUX01P
VkVfTVNWQ19BVVRPX01PVkVfUkVUVVJOX0JVRykgfHwgZGVmaW5lZChCT09TVF9NT1ZFX0RPWFlH
RU5fSU5WT0tFRCkKLQotICAgLy8hVGhpcyBtYWNybyBpcyB1c2VkIHRvIGFjaGlldmUgcG9ydGFi
bGUgb3B0aW1hbCBtb3ZlIGNvbnN0cnVjdG9ycy4KLSAgIC8vIQotICAgLy8hV2hlbiBpbXBsZW1l
bnRpbmcgdGhlIG1vdmUgY29uc3RydWN0b3IsIGluIEMrKzAzIGNvbXBpbGVycyB0aGUgbW92ZWQt
ZnJvbSBhcmd1bWVudCBtdXN0IGJlCi0gICAvLyFjYXN0IHRvIHRoZSBiYXNlIHR5cGUgYmVmb3Jl
IGNhbGxpbmcgYDo6Ym9vc3Q6Om1vdmUoKWAgZHVlIHRvIHJ2YWx1ZSByZWZlcmVuY2UgbGltaXRh
dGlvbnMuCi0gICAvLyEKLSAgIC8vIUluIEMrKzExIGNvbXBpbGVycyB0aGUgY2FzdCBmcm9tIGEg
cnZhbHVlIHJlZmVyZW5jZSBvZiBhIGRlcml2ZWQgdHlwZSB0byBhIHJ2YWx1ZSByZWZlcmVuY2Ug
b2YKLSAgIC8vIWEgYmFzZSB0eXBlIGlzIGltcGxpY2l0LgotICAgI2RlZmluZSBCT09TVF9NT1ZF
X0JBU0UoQkFTRV9UWVBFLCBBUkcpIFwKLSAgICAgIDo6Ym9vc3Q6Om1vdmUoKEJBU0VfVFlQRSYp
KEFSRykpCi0gICAvLwotCi0gICBuYW1lc3BhY2UgYm9vc3QgewotICAgbmFtZXNwYWNlIG1vdmVf
ZGV0YWlsIHsKLQotICAgdGVtcGxhdGU8IGNsYXNzIFQ+IHN0cnVjdCBmb3J3YXJkX3R5cGUgeyB0
eXBlZGVmIFQgdHlwZTsgfTsKLQotICAgfX0KLQotI2VuZGlmICAgLy9CT09TVF9OT19DWFgxMV9S
VkFMVUVfUkVGRVJFTkNFUwotCi0jaW5jbHVkZSA8Ym9vc3QvbW92ZS9kZXRhaWwvY29uZmlnX2Vu
ZC5ocHA+Ci0KLSNlbmRpZiAvLyNpZm5kZWYgQk9PU1RfTU9WRV9DT1JFX0hQUApkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbW92ZS9kZXRhaWwv
Y29uZmlnX2JlZ2luLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21vdmUvZGV0YWlsL2NvbmZpZ19iZWdpbi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDYzN2ViMTU4YmQxYTYzY2QxZWZiMmE4MzlhOTc4YjI1ZDQzYWE1MDcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbW92ZS9kZXRhaWwvY29uZmlnX2JlZ2luLmhwcAorKysg
L2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8v
IChDKSBDb3B5cmlnaHQgSW9uIEdhenRhbmFnYSAyMDEyLTIwMTIuIERpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCb29zdAotLy8gU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21w
YW55aW5nIGZpbGUKLS8vIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy9tb3ZlIGZvciBkb2N1bWVudGF0aW9uLgotLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
I2lmbmRlZiBCT09TVF9DT05GSUdfSFBQCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNl
bmRpZgotCi0jaWZkZWYgQk9PU1RfTVNWQwotIyAgcHJhZ21hIHdhcm5pbmcgKHB1c2gpCi0jICBw
cmFnbWEgd2FybmluZyAoZGlzYWJsZSA6IDQzMjQpIC8vIHN0cnVjdHVyZSB3YXMgcGFkZGVkIGR1
ZSB0byBfX2RlY2xzcGVjKGFsaWduKCkpCi0jICBwcmFnbWEgd2FybmluZyAoZGlzYWJsZSA6IDQ2
NzUpIC8vICJmdW5jdGlvbiI6ICByZXNvbHZlZCBvdmVybG9hZCB3YXMgZm91bmQgYnkgYXJndW1l
bnQtZGVwZW5kZW50IGxvb2t1cAotIyAgcHJhZ21hIHdhcm5pbmcgKGRpc2FibGUgOiA0OTk2KSAv
LyAiZnVuY3Rpb24iOiB3YXMgZGVjbGFyZWQgZGVwcmVjYXRlZCAoX0NSVF9TRUNVUkVfTk9fREVQ
UkVDQVRFL19TQ0xfU0VDVVJFX05PX1dBUk5JTkdTKQotIyAgcHJhZ21hIHdhcm5pbmcgKGRpc2Fi
bGUgOiA0NzE0KSAvLyAiZnVuY3Rpb24iOiBtYXJrZWQgYXMgX19mb3JjZWlubGluZSBub3QgaW5s
aW5lZAotIyAgcHJhZ21hIHdhcm5pbmcgKGRpc2FibGUgOiA0MTI3KSAvLyBjb25kaXRpb25hbCBl
eHByZXNzaW9uIGlzIGNvbnN0YW50Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21vdmUvZGV0YWlsL2NvbmZpZ19lbmQuaHBwIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbW92ZS9kZXRhaWwvY29u
ZmlnX2VuZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYTk5ZTkzYzlkYWI2
NzEyYjBhOTBjNTBmYjZhYzNiODhmZjU0ODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvbW92ZS9kZXRhaWwvY29uZmlnX2VuZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCww
IEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAoQykgQ29weXJpZ2h0IElvbiBHYXp0
YW5hZ2EgMjAxMi0yMDEyLiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QKLS8vIFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlCi0vLyBMSUNFTlNF
XzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQp
Ci0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbW92ZSBmb3IgZG9jdW1lbnRh
dGlvbi4KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSNpZiBkZWZpbmVkIEJPT1NUX01TVkMK
LSMgIHByYWdtYSB3YXJuaW5nIChwb3ApCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21vdmUvZGV0YWlsL2l0ZXJhdG9yX3RyYWl0
cy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tb3ZlL2Rl
dGFpbC9pdGVyYXRvcl90cmFpdHMuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1
ZmZjYjJjZjA1NjY0NTU0OWRjNzQ2N2IyMWQwNGI2MWI5MzU1M2RjLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21vdmUvZGV0YWlsL2l0ZXJhdG9yX3RyYWl0cy5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSw3NyArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAoQykg
Q29weXJpZ2h0IElvbiBHYXp0YW5hZ2EgMjAxNC0yMDE0LgotLy8gRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gKFNlZSBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL21vdmUgZm9yIGRvY3VtZW50YXRpb24uCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0K
LS8vISBcZmlsZQotCi0jaWZuZGVmIEJPT1NUX01PVkVfREVUQUlMX0lURVJBVE9SX1RSQUlUU19I
UFAKLSNkZWZpbmUgQk9PU1RfTU9WRV9ERVRBSUxfSVRFUkFUT1JfVFJBSVRTX0hQUAotCi0jaWZu
ZGVmIEJPT1NUX0NPTkZJR19IUFAKLSMgIGluY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jZW5k
aWYKLSMKLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19QUkFHTUFfT05DRSkKLSMgIHByYWdtYSBvbmNl
Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8Ym9vc3QvbW92ZS9kZXRh
aWwvdHlwZV90cmFpdHMuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvbW92ZS9kZXRhaWwvc3RkX25z
X2JlZ2luLmhwcD4KLUJPT1NUX01PVkVfU1REX05TX0JFRwotCi1zdHJ1Y3QgaW5wdXRfaXRlcmF0
b3JfdGFnOwotc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnOwotc3RydWN0IGJpZGlyZWN0aW9u
YWxfaXRlcmF0b3JfdGFnOwotc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnOwotc3Ry
dWN0IG91dHB1dF9pdGVyYXRvcl90YWc7Ci0KLUJPT1NUX01PVkVfU1REX05TX0VORAotI2luY2x1
ZGUgPGJvb3N0L21vdmUvZGV0YWlsL3N0ZF9uc19lbmQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3R7
ICBuYW1lc3BhY2UgbW92ZWxpYnsKLQotdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+Ci1zdHJ1Y3Qg
aXRlcmF0b3JfdHJhaXRzCi17Ci0gICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9yOjpkaWZmZXJl
bmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJhdG9y
Ojp2YWx1ZV90eXBlICAgICAgICB2YWx1ZV90eXBlOwotICAgdHlwZWRlZiB0eXBlbmFtZSBJdGVy
YXRvcjo6cG9pbnRlciAgICAgICAgICAgcG9pbnRlcjsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgSXRl
cmF0b3I6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUg
SXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwotICAgdHlwZWRl
ZiB0eXBlbmFtZSBib29zdDo6bW92ZV9kZXRhaWw6Om1ha2VfdW5zaWduZWQ8ZGlmZmVyZW5jZV90
eXBlPjo6dHlwZSBzaXplX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IGl0
ZXJhdG9yX3RyYWl0czxUKj4KLXsKLSAgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgICAgICAgICAg
ICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKLSAgIHR5cGVkZWYgVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7Ci0gICB0eXBlZGVmIFQqICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb2ludGVyOwotICAgdHlwZWRlZiBUJiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVmZXJlbmNlOwotICAgdHlwZWRlZiBzdGQ6OnJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnICAgaXRlcmF0b3JfY2F0ZWdvcnk7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIGJv
b3N0Ojptb3ZlX2RldGFpbDo6bWFrZV91bnNpZ25lZDxkaWZmZXJlbmNlX3R5cGU+Ojp0eXBlIHNp
emVfdHlwZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXRlcmF0b3JfdHJhaXRz
PGNvbnN0IFQqPgotewotICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAg
ICAgZGlmZmVyZW5jZV90eXBlOwotICAgdHlwZWRlZiBUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWVfdHlwZTsKLSAgIHR5cGVkZWYgY29uc3QgVCogICAgICAgICAgICAgICAg
ICAgICAgICAgIHBvaW50ZXI7Ci0gICB0eXBlZGVmIGNvbnN0IFQmICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWZlcmVuY2U7Ci0gICB0eXBlZGVmIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRv
cl90YWcgICBpdGVyYXRvcl9jYXRlZ29yeTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6Om1v
dmVfZGV0YWlsOjptYWtlX3Vuc2lnbmVkPGRpZmZlcmVuY2VfdHlwZT46OnR5cGUgc2l6ZV90eXBl
OwotfTsKLQotfX0gLy9uYW1lc3BhY2UgYm9vc3QgeyAgbmFtZXNwYWNlIG1vdmVsaWJ7Ci0KLSNl
bmRpZiAvLyNpZm5kZWYgQk9PU1RfTU9WRV9ERVRBSUxfSVRFUkFUT1JfVFJBSVRTX0hQUApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbW92ZS9k
ZXRhaWwvbWV0YV91dGlscy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tb3ZlL2RldGFpbC9tZXRhX3V0aWxzLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTQ1Mzk0Yzk3ZDZmNTljYjQ1M2Q3ZDVhNDRhZGIwYzhmMDY4YTFiMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tb3ZlL2RldGFpbC9tZXRhX3V0aWxzLmhwcAorKysg
L2Rldi9udWxsCkBAIC0xLDU4NSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0v
LyAoQykgQ29weXJpZ2h0IElvbiBHYXp0YW5hZ2EgMjAxMi0yMDE1LgotLy8gRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gaHR0cDovL3d3
dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9saWJzL21vdmUgZm9yIGRvY3VtZW50YXRpb24uCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0KLS8vISBcZmlsZQotCi0jaWZuZGVmIEJPT1NUX01PVkVfREVUQUlMX01FVEFfVVRJTFNf
SFBQCi0jZGVmaW5lIEJPT1NUX01PVkVfREVUQUlMX01FVEFfVVRJTFNfSFBQCi0KLSNpZiBkZWZp
bmVkKEJPT1NUX0hBU19QUkFHTUFfT05DRSkKLSMgIHByYWdtYSBvbmNlCi0jZW5kaWYKLSNpbmNs
dWRlIDxib29zdC9tb3ZlL2RldGFpbC9jb25maWdfYmVnaW4uaHBwPgotI2luY2x1ZGUgPGJvb3N0
L21vdmUvZGV0YWlsL3dvcmthcm91bmQuaHBwPiAgLy9mb3JjZWlubGluZQotI2luY2x1ZGUgPGJv
b3N0L21vdmUvZGV0YWlsL21ldGFfdXRpbHNfY29yZS5ocHA+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4g
ICAvL2ZvciBzdGQ6OnNpemVfdAotCi0vL1NtYWxsIG1ldGEtdHlwZXRyYWl0cyB0byBzdXBwb3J0
IG1vdmUKLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotLy9Gb3J3YXJkIGRlY2xhcmUgYm9vc3Q6OnJ2
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgcnY7Ci0KLW5hbWVzcGFjZSBtb3ZlX2RldGFpbCB7
Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICAgICAgICBp
c19kaWZmZXJlbnQKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1w
bGF0ZTxjbGFzcyBULCBjbGFzcyBVPgotc3RydWN0IGlzX2RpZmZlcmVudAotewotICAgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSAhaXNfc2FtZTxULCBVPjo6dmFsdWU7Ci19OwotCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgICAgICAgYXBwbHkKLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZTxjbGFzcyBGLCBj
bGFzcyBQYXJhbT4KLXN0cnVjdCBhcHBseQotewotICAgdHlwZWRlZiB0eXBlbmFtZSBGOjp0ZW1w
bGF0ZSBhcHBseTxQYXJhbT46OnR5cGUgdHlwZTsKLX07Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICAgICAgICAgICBib29sXwotLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotdGVtcGxhdGU8IGJvb2wgQ18gPgotc3RydWN0IGJv
b2xfIDogaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgQ18+Ci17Ci0gICAgIG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiBDXzsgfQotICAgYm9vbCBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1
cm4gQ187IH0KLX07Ci0KLXR5cGVkZWYgYm9vbF88dHJ1ZT4gICAgICAgIHRydWVfOwotdHlwZWRl
ZiBib29sXzxmYWxzZT4gICAgICAgZmFsc2VfOwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotLy8gICAgICAgICAgICAgIG5hdAotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLXN0cnVjdCBuYXR7fTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICAgICAgIHllc190eXBlL25vX3R5cGUKLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10eXBlZGVmIGNoYXIgeWVzX3R5cGU7Ci0K
LXN0cnVjdCBub190eXBlCi17Ci0gICBjaGFyIF9bMl07Ci19OwotCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgICAgICBuYXRpZnkKLS8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IG5h
dGlmeXt9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAg
ICAgICAgcmVtb3ZlX3JlZmVyZW5jZQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgcmVtb3ZlX3JlZmVyZW5jZQotewotICAg
dHlwZWRlZiBUIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IHJlbW92ZV9y
ZWZlcmVuY2U8VCY+Ci17Ci0gICB0eXBlZGVmIFQgdHlwZTsKLX07Ci0KLSNpZm5kZWYgQk9PU1Rf
Tk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMKLQotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBy
ZW1vdmVfcmVmZXJlbmNlPFQmJj4KLXsKLSAgIHR5cGVkZWYgVCB0eXBlOwotfTsKLQotI2Vsc2UK
LQotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCByZW1vdmVfcmVmZXJlbmNlPCBydjxUPiA+Ci17
Ci0gICB0eXBlZGVmIFQgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgcmVt
b3ZlX3JlZmVyZW5jZTwgcnY8VD4gJj4KLXsKLSAgIHR5cGVkZWYgVCB0eXBlOwotfTsKLQotdGVt
cGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCByZW1vdmVfcmVmZXJlbmNlPCBjb25zdCBydjxUPiAmPgot
ewotICAgdHlwZWRlZiBUIHR5cGU7Ci19OwotCi0jZW5kaWYKLQotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICAgICAgICAgIHJlbW92ZV9wb2ludGVyCi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi10ZW1wbGF0ZTwgY2xhc3MgVCA+
IHN0cnVjdCByZW1vdmVfcG9pbnRlciAgICAgICAgICAgICAgICAgICAgeyB0eXBlZGVmIFQgdHlw
ZTsgICB9OwotdGVtcGxhdGU8IGNsYXNzIFQgPiBzdHJ1Y3QgcmVtb3ZlX3BvaW50ZXI8VCo+ICAg
ICAgICAgICAgICAgIHsgdHlwZWRlZiBUIHR5cGU7ICAgfTsKLXRlbXBsYXRlPCBjbGFzcyBUID4g
c3RydWN0IHJlbW92ZV9wb2ludGVyPFQqIGNvbnN0PiAgICAgICAgICB7IHR5cGVkZWYgVCB0eXBl
OyAgIH07Ci10ZW1wbGF0ZTwgY2xhc3MgVCA+IHN0cnVjdCByZW1vdmVfcG9pbnRlcjxUKiB2b2xh
dGlsZT4gICAgICAgeyB0eXBlZGVmIFQgdHlwZTsgICB9OwotdGVtcGxhdGU8IGNsYXNzIFQgPiBz
dHJ1Y3QgcmVtb3ZlX3BvaW50ZXI8VCogY29uc3Qgdm9sYXRpbGU+IHsgdHlwZWRlZiBUIHR5cGU7
ICAgfTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICAg
ICAgICAgIGFkZF9wb2ludGVyCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotdGVtcGxhdGU8IGNsYXNzIFQgPgotc3RydWN0IGFkZF9wb2ludGVyCi17Ci0gICB0eXBlZGVm
IHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUqIHR5cGU7Ci19OwotCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgICAgICAgYWRkX2NvbnN0
Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Y2xhc3Mg
VD4KLXN0cnVjdCBhZGRfY29uc3QKLXsKLSAgIHR5cGVkZWYgY29uc3QgVCB0eXBlOwotfTsKLQot
dGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBhZGRfY29uc3Q8VCY+Ci17Ci0gICB0eXBlZGVmIGNv
bnN0IFQmIHR5cGU7Ci19OwotCi0jaWZuZGVmIEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZFUkVO
Q0VTCi0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgYWRkX2NvbnN0PFQmJj4KLXsKLSAgIHR5
cGVkZWYgVCYmIHR5cGU7Ci19OwotCi0jZW5kaWYKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vICAgICAgYWRkX2x2YWx1ZV9yZWZlcmVuY2UKLS8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IGFk
ZF9sdmFsdWVfcmVmZXJlbmNlCi17ICB0eXBlZGVmIFQmIHR5cGU7ICB9OwotCi10ZW1wbGF0ZTxj
bGFzcyBUPiBzdHJ1Y3QgYWRkX2x2YWx1ZV9yZWZlcmVuY2U8VCY+ICAgICAgICAgICAgICAgICB7
ICB0eXBlZGVmIFQmIHR5cGU7ICB9OwotdGVtcGxhdGU8PiAgICAgICAgc3RydWN0IGFkZF9sdmFs
dWVfcmVmZXJlbmNlPHZvaWQ+ICAgICAgICAgICAgICAgeyAgdHlwZWRlZiB2b2lkIHR5cGU7ICAg
fTsKLXRlbXBsYXRlPD4gICAgICAgIHN0cnVjdCBhZGRfbHZhbHVlX3JlZmVyZW5jZTxjb25zdCB2
b2lkPiAgICAgICAgIHsgIHR5cGVkZWYgY29uc3Qgdm9pZCB0eXBlOyAgfTsKLXRlbXBsYXRlPD4g
ICAgICAgIHN0cnVjdCBhZGRfbHZhbHVlX3JlZmVyZW5jZTx2b2xhdGlsZSB2b2lkPiAgICAgIHsg
IHR5cGVkZWYgdm9sYXRpbGUgdm9pZCB0eXBlOyAgIH07Ci10ZW1wbGF0ZTw+ICAgICAgICBzdHJ1
Y3QgYWRkX2x2YWx1ZV9yZWZlcmVuY2U8Y29uc3Qgdm9sYXRpbGUgdm9pZD57ICB0eXBlZGVmIGNv
bnN0IHZvbGF0aWxlIHZvaWQgdHlwZTsgICB9OwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0
IGFkZF9jb25zdF9sdmFsdWVfcmVmZXJlbmNlCi17Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHJlbW92
ZV9yZWZlcmVuY2U8VD46OnR5cGUgICAgICAgICB0X3VucmVmZXJlbmNlZDsKLSAgIHR5cGVkZWYg
dHlwZW5hbWUgYWRkX2NvbnN0PHRfdW5yZWZlcmVuY2VkPjo6dHlwZSAgIHRfdW5yZWZlcmVuY2Vk
X2NvbnN0OwotICAgdHlwZWRlZiB0eXBlbmFtZSBhZGRfbHZhbHVlX3JlZmVyZW5jZQotICAgICAg
PHRfdW5yZWZlcmVuY2VkX2NvbnN0Pjo6dHlwZSAgICAgICAgICAgICAgICAgICAgdHlwZTsKLX07
Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICAgICAgICAg
ICBpc19sdmFsdWVfcmVmZXJlbmNlCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBpc19sdmFsdWVfcmVmZXJlbmNlCi17Ci0g
ICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNz
IFQ+Ci1zdHJ1Y3QgaXNfbHZhbHVlX3JlZmVyZW5jZTxUJj4KLXsKLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9IHRydWU7Ci19OwotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0vLyAgICAgICAgICAgICBpZGVudGl0eQotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlkZW50aXR5Ci17
Ci0gICB0eXBlZGVmIFQgdHlwZTsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgYWRkX2NvbnN0X2x2YWx1
ZV9yZWZlcmVuY2U8VD46OnR5cGUgcmVmZXJlbmNlOwotICAgcmVmZXJlbmNlIG9wZXJhdG9yKCko
cmVmZXJlbmNlIHQpCi0gICB7ICByZXR1cm4gdDsgICB9Ci19OwotCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgICAgaXNfY2xhc3Nfb3JfdW5pb24KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZTxjbGFzcyBUPgot
c3RydWN0IGlzX2NsYXNzX29yX3VuaW9uCi17Ci0gICBzdHJ1Y3QgdHdvY2hhciB7IGNoYXIgZHVt
bXlbMl07IH07Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVT4KLSAgIHN0YXRpYyBjaGFyIGlzX2NsYXNz
X29yX3VuaW9uX3Rlc3Rlcih2b2lkKFU6OiopKHZvaWQpKTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBV
PgotICAgc3RhdGljIHR3b2NoYXIgaXNfY2xhc3Nfb3JfdW5pb25fdGVzdGVyKC4uLik7Ci0gICBz
dGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHNpemVvZihpc19jbGFzc19vcl91bmlvbl90ZXN0ZXI8
VD4oMCkpID09IHNpemVvZihjaGFyKTsKLX07Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0vLyAgICAgICAgICAgICBhZGRyZXNzb2YKLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IGFkZHJfaW1w
bF9yZWYKLXsKLSAgIFQgJiB2XzsKLSAgIEJPT1NUX01PVkVfRk9SQ0VJTkxJTkUgYWRkcl9pbXBs
X3JlZiggVCAmIHYgKTogdl8oIHYgKSB7fQotICAgQk9PU1RfTU9WRV9GT1JDRUlOTElORSBvcGVy
YXRvciBUJiAoKSBjb25zdCB7IHJldHVybiB2XzsgfQotCi0gICBwcml2YXRlOgotICAgYWRkcl9p
bXBsX3JlZiAmIG9wZXJhdG9yPShjb25zdCBhZGRyX2ltcGxfcmVmICYpOwotfTsKLQotdGVtcGxh
dGU8Y2xhc3MgVD4KLXN0cnVjdCBhZGRyZXNzb2ZfaW1wbAotewotICAgQk9PU1RfTU9WRV9GT1JD
RUlOTElORSBzdGF0aWMgVCAqIGYoIFQgJiB2LCBsb25nICkKLSAgIHsKLSAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFQqPigKLSAgICAgICAgICZjb25zdF9jYXN0PGNoYXImPihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHZvbGF0aWxlIGNoYXIgJj4odikpKTsKLSAgIH0KLQotICAgQk9PU1Rf
TU9WRV9GT1JDRUlOTElORSBzdGF0aWMgVCAqIGYoIFQgKiB2LCBpbnQgKQotICAgeyAgcmV0dXJu
IHY7ICB9Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotQk9PU1RfTU9WRV9GT1JDRUlOTElORSBU
ICogYWRkcmVzc29mKCBUICYgdiApCi17Ci0gICByZXR1cm4gOjpib29zdDo6bW92ZV9kZXRhaWw6
OmFkZHJlc3NvZl9pbXBsPFQ+OjpmCi0gICAgICAoIDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjphZGRy
X2ltcGxfcmVmPFQ+KCB2ICksIDAgKTsKLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLS8vICAgICAgICAgIGhhc19wb2ludGVyX3R5cGUKLS8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBoYXNf
cG9pbnRlcl90eXBlCi17Ci0gICBzdHJ1Y3QgdHdvIHsgY2hhciBjWzJdOyB9OwotICAgdGVtcGxh
dGUgPGNsYXNzIFU+IHN0YXRpYyB0d28gdGVzdCguLi4pOwotICAgdGVtcGxhdGUgPGNsYXNzIFU+
IHN0YXRpYyBjaGFyIHRlc3QodHlwZW5hbWUgVTo6cG9pbnRlciogPSAwKTsKLSAgIHN0YXRpYyBj
b25zdCBib29sIHZhbHVlID0gc2l6ZW9mKHRlc3Q8VD4oMCkpID09IDE7Ci19OwotCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgICAgIGlzX2NvbnZlcnRp
YmxlCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotI2lmIGRlZmluZWQo
X01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNDAwKQotCi0vL3VzZSBpbnRyaW5zaWMgc2luY2Ug
aW4gTVNWQwotLy9vdmVyYWxpZ25lZCB0eXBlcyBjYW4ndCBnbyB0aHJvdWdoIGVsbGlwc2lzCi10
ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KLXN0cnVjdCBpc19jb252ZXJ0aWJsZQotewotICAg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBfX2lzX2NvbnZlcnRpYmxlX3RvKFQsIFUpOwotfTsK
LQotI2Vsc2UKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+Ci1jbGFzcyBpc19jb252ZXJ0
aWJsZQotewotICAgdHlwZWRlZiB0eXBlbmFtZSBhZGRfbHZhbHVlX3JlZmVyZW5jZTxUPjo6dHlw
ZSB0X3JlZmVyZW5jZTsKLSAgIHR5cGVkZWYgY2hhciB0cnVlX3Q7Ci0gICBjbGFzcyBmYWxzZV90
IHsgY2hhciBkdW1teVsyXTsgfTsKLSAgIHN0YXRpYyBmYWxzZV90IGRpc3BhdGNoKC4uLik7Ci0g
ICBzdGF0aWMgdHJ1ZV90ICBkaXNwYXRjaChVKTsKLSAgIHN0YXRpYyB0X3JlZmVyZW5jZSAgICAg
ICB0cmlnZ2VyKCk7Ci0gICBwdWJsaWM6Ci0gICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHNp
emVvZihkaXNwYXRjaCh0cmlnZ2VyKCkpKSA9PSBzaXplb2YodHJ1ZV90KTsKLX07Ci0KLSNlbmRp
ZgotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgYm9vbCBJc1NhbWUgPSBpc19zYW1lPFQs
IFU+Ojp2YWx1ZT4KLXN0cnVjdCBpc19zYW1lX29yX2NvbnZlcnRpYmxlCi0gICA6IGlzX2NvbnZl
cnRpYmxlPFQsIFU+Ci17fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+Ci1zdHJ1Y3Qg
aXNfc2FtZV9vcl9jb252ZXJ0aWJsZTxULCBVLCB0cnVlPgotewotICAgc3RhdGljIGNvbnN0IGJv
b2wgdmFsdWUgPSB0cnVlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICBib29sIEMKLSAgICAsIHR5
cGVuYW1lIEYxCi0gICAgLCB0eXBlbmFtZSBGMgotICAgID4KLXN0cnVjdCBldmFsX2lmX2MKLSAg
ICA6IGlmX2M8QyxGMSxGMj46OnR5cGUKLXt9OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1l
IEMKLSAgICAsIHR5cGVuYW1lIFQxCi0gICAgLCB0eXBlbmFtZSBUMgotICAgID4KLXN0cnVjdCBl
dmFsX2lmCi0gICAgOiBpZl88QyxUMSxUMj46OnR5cGUKLXt9OwotCi0KLSNpZiBkZWZpbmVkKEJP
T1NUX0dDQykgJiYgKEJPT1NUX0dDQyA8PSA0MDAwMCkKLSNkZWZpbmUgQk9PU1RfTU9WRV9IRUxQ
RVJTX1JFVFVSTl9TRklOQUVfQlJPS0VOCi0jZW5kaWYKLQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xh
c3MgVSwgY2xhc3MgUiA9IHZvaWQ+Ci1zdHJ1Y3QgZW5hYmxlX2lmX2NvbnZlcnRpYmxlCi0gICA6
IGVuYWJsZV9pZjwgaXNfY29udmVydGlibGU8VCwgVT4sIFI+Ci17fTsKLQotdGVtcGxhdGU8Y2xh
c3MgVCwgY2xhc3MgVSwgY2xhc3MgUiA9IHZvaWQ+Ci1zdHJ1Y3QgZGlzYWJsZV9pZl9jb252ZXJ0
aWJsZQotICAgOiBkaXNhYmxlX2lmPCBpc19jb252ZXJ0aWJsZTxULCBVPiwgUj4KLXt9OwotCi10
ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVLCBjbGFzcyBSID0gdm9pZD4KLXN0cnVjdCBlbmFibGVf
aWZfc2FtZV9vcl9jb252ZXJ0aWJsZQotICAgOiBlbmFibGVfaWY8IGlzX3NhbWVfb3JfY29udmVy
dGlibGU8VCwgVT4sIFI+Ci17fTsKLQotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3Mg
UiA9IHZvaWQ+Ci1zdHJ1Y3QgZGlzYWJsZV9pZl9zYW1lX29yX2NvbnZlcnRpYmxlCi0gICA6IGRp
c2FibGVfaWY8IGlzX3NhbWVfb3JfY29udmVydGlibGU8VCwgVT4sIFI+Ci17fTsKLQotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgYW5kXwotLy8K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Ym9vbCwgY2xhc3MgQiA9IHRydWVfLCBj
bGFzcyBDID0gdHJ1ZV8sIGNsYXNzIEQgPSB0cnVlXz4KLXN0cnVjdCBhbmRfaW1wbAotICAgOiBh
bmRfaW1wbDxCOjp2YWx1ZSwgQywgRD4KLXt9OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgYW5kX2lt
cGw8dHJ1ZSwgdHJ1ZV8sIHRydWVfLCB0cnVlXz4KLXsKLSAgIHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gdHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEIsIGNsYXNzIEMsIGNsYXNzIEQ+Ci1z
dHJ1Y3QgYW5kX2ltcGw8ZmFsc2UsIEIsIEMsIEQ+Ci17Ci0gICBzdGF0aWMgY29uc3QgYm9vbCB2
YWx1ZSA9IGZhbHNlOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgQyA9
IHRydWVfLCBjbGFzcyBEID0gdHJ1ZV8+Ci1zdHJ1Y3QgYW5kXwotICAgOiBhbmRfaW1wbDxBOjp2
YWx1ZSwgQiwgQywgRD4KLXt9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcl8KLS8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXRl
bXBsYXRlPGJvb2wsIGNsYXNzIEIgPSBmYWxzZV8sIGNsYXNzIEMgPSBmYWxzZV8sIGNsYXNzIEQg
PSBmYWxzZV8+Ci1zdHJ1Y3Qgb3JfaW1wbAotICAgOiBvcl9pbXBsPEI6OnZhbHVlLCBDLCBEPgot
e307Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBvcl9pbXBsPGZhbHNlLCBmYWxzZV8sIGZhbHNlXywg
ZmFsc2VfPgotewotICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKLX07Ci0KLXRl
bXBsYXRlPGNsYXNzIEIsIGNsYXNzIEMsIGNsYXNzIEQ+Ci1zdHJ1Y3Qgb3JfaW1wbDx0cnVlLCBC
LCBDLCBEPgotewotICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOwotfTsKLQotdGVt
cGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgQyA9IGZhbHNlXywgY2xhc3MgRCA9IGZhbHNl
Xz4KLXN0cnVjdCBvcl8KLSAgIDogb3JfaW1wbDxBOjp2YWx1ZSwgQiwgQywgRD4KLXt9OwotCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICBub3Rf
Ci0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IG5v
dF8KLXsKLSAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gIVQ6OnZhbHVlOwotfTsKLQotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gZW5hYmxlX2lmX2FuZCAvIGRpc2FibGVfaWZfYW5k
IC8gZW5hYmxlX2lmX29yIC8gZGlzYWJsZV9pZl9vcgotLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotCi10ZW1wbGF0ZTxjbGFzcyBSLCBjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBDID0gdHJ1ZV8s
IGNsYXNzIEQgPSB0cnVlXz4KLXN0cnVjdCBlbmFibGVfaWZfYW5kCi0gICA6IGVuYWJsZV9pZl9j
PCBhbmRfPEEsIEIsIEMsIEQ+Ojp2YWx1ZSwgUj4KLXt9OwotCi10ZW1wbGF0ZTxjbGFzcyBSLCBj
bGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBDID0gdHJ1ZV8sIGNsYXNzIEQgPSB0cnVlXz4KLXN0cnVj
dCBkaXNhYmxlX2lmX2FuZAotICAgOiBkaXNhYmxlX2lmX2M8IGFuZF88QSwgQiwgQywgRD46OnZh
bHVlLCBSPgote307Ci0KLXRlbXBsYXRlPGNsYXNzIFIsIGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNz
IEMgPSBmYWxzZV8sIGNsYXNzIEQgPSBmYWxzZV8+Ci1zdHJ1Y3QgZW5hYmxlX2lmX29yCi0gICA6
IGVuYWJsZV9pZl9jPCBvcl88QSwgQiwgQywgRD46OnZhbHVlLCBSPgote307Ci0KLXRlbXBsYXRl
PGNsYXNzIFIsIGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIEMgPSBmYWxzZV8sIGNsYXNzIEQgPSBm
YWxzZV8+Ci1zdHJ1Y3QgZGlzYWJsZV9pZl9vcgotICAgOiBkaXNhYmxlX2lmX2M8IG9yXzxBLCBC
LCBDLCBEPjo6dmFsdWUsIFI+Ci17fTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8g
ICAgICAgICAgICAgICAgICAgICAgaGFzX21vdmVfZW11bGF0aW9uX2VuYWJsZWRfaW1wbAotLy8K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBoYXNfbW92
ZV9lbXVsYXRpb25fZW5hYmxlZF9pbXBsCi0gICA6IGlzX2NvbnZlcnRpYmxlPCBULCA6OmJvb3N0
OjpydjxUPiYgPgote307Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgaGFzX21vdmVfZW11
bGF0aW9uX2VuYWJsZWRfaW1wbDxUJj4KLXsgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFs
c2U7ICB9OwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IGhhc19tb3ZlX2VtdWxhdGlvbl9l
bmFibGVkX2ltcGw8IDo6Ym9vc3Q6OnJ2PFQ+ID4KLXsgIHN0YXRpYyBjb25zdCBib29sIHZhbHVl
ID0gZmFsc2U7ICB9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpc19ydl9pbXBsCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0K
LXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX3J2X2ltcGwKLXsgIHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gZmFsc2U7ICB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19y
dl9pbXBsPCBydjxUPiA+Ci17ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7ICB9Owot
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19ydl9pbXBsPCBjb25zdCBydjxUPiA+Ci17
ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7ICB9OwotCi0vLyBDb2RlIGZyb20gSmVm
ZnJleSBMZWUgSGVsbHJ1bmcsIG1hbnkgdGhhbmtzCi0KLXRlbXBsYXRlPCBjbGFzcyBUID4KLXN0
cnVjdCBpc19ydmFsdWVfcmVmZXJlbmNlCi17ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZh
bHNlOyAgfTsKLQotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9SVkFMVUVfUkVGRVJFTkNFUwotCi10
ZW1wbGF0ZTwgY2xhc3MgVCA+Ci1zdHJ1Y3QgaXNfcnZhbHVlX3JlZmVyZW5jZTwgVCYmID4KLXsg
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgIH07Ci0KLSNlbHNlIC8vICNpZm5kZWYg
Qk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMKLQotdGVtcGxhdGU8IGNsYXNzIFQgPgot
c3RydWN0IGlzX3J2YWx1ZV9yZWZlcmVuY2U8IGJvb3N0OjpydjxUPiYgPgoteyAgc3RhdGljIGNv
bnN0IGJvb2wgdmFsdWUgPSB0cnVlOyAgfTsKLQotdGVtcGxhdGU8IGNsYXNzIFQgPgotc3RydWN0
IGlzX3J2YWx1ZV9yZWZlcmVuY2U8IGNvbnN0IGJvb3N0OjpydjxUPiYgPgoteyAgc3RhdGljIGNv
bnN0IGJvb2wgdmFsdWUgPSB0cnVlOyAgfTsKLQotI2VuZGlmIC8vICNpZm5kZWYgQk9PU1RfTk9f
Q1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMKLQotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9SVkFMVUVf
UkVGRVJFTkNFUwotCi10ZW1wbGF0ZTwgY2xhc3MgVCA+Ci1zdHJ1Y3QgYWRkX3J2YWx1ZV9yZWZl
cmVuY2UKLXsgdHlwZWRlZiBUJiYgdHlwZTsgfTsKLQotI2Vsc2UgLy8gI2lmbmRlZiBCT09TVF9O
T19DWFgxMV9SVkFMVUVfUkVGRVJFTkNFUwotCi1uYW1lc3BhY2UgZGV0YWlsX2FkZF9ydmFsdWVf
cmVmZXJlbmNlCi17Ci0gICB0ZW1wbGF0ZTwgY2xhc3MgVAotICAgICAgICAgICAgLCBib29sIGVt
dWxhdGlvbiA9IGhhc19tb3ZlX2VtdWxhdGlvbl9lbmFibGVkX2ltcGw8VD46OnZhbHVlCi0gICAg
ICAgICAgICAsIGJvb2wgcnYgICAgICAgID0gaXNfcnZfaW1wbDxUPjo6dmFsdWUgID4KLSAgIHN0
cnVjdCBhZGRfcnZhbHVlX3JlZmVyZW5jZV9pbXBsIHsgdHlwZWRlZiBUIHR5cGU7IH07Ci0KLSAg
IHRlbXBsYXRlPCBjbGFzcyBULCBib29sIGVtdWxhdGlvbj4KLSAgIHN0cnVjdCBhZGRfcnZhbHVl
X3JlZmVyZW5jZV9pbXBsPCBULCBlbXVsYXRpb24sIHRydWUgPiB7IHR5cGVkZWYgVCAmIHR5cGU7
IH07Ci0KLSAgIHRlbXBsYXRlPCBjbGFzcyBULCBib29sIHJ2ID4KLSAgIHN0cnVjdCBhZGRfcnZh
bHVlX3JlZmVyZW5jZV9pbXBsPCBULCB0cnVlLCBydiA+IHsgdHlwZWRlZiA6OmJvb3N0OjpydjxU
PiYgdHlwZTsgfTsKLX0gLy8gbmFtZXNwYWNlIGRldGFpbF9hZGRfcnZhbHVlX3JlZmVyZW5jZQot
Ci10ZW1wbGF0ZTwgY2xhc3MgVCA+Ci1zdHJ1Y3QgYWRkX3J2YWx1ZV9yZWZlcmVuY2UKLSAgIDog
ZGV0YWlsX2FkZF9ydmFsdWVfcmVmZXJlbmNlOjphZGRfcnZhbHVlX3JlZmVyZW5jZV9pbXBsPFQ+
Ci17IH07Ci0KLXRlbXBsYXRlPCBjbGFzcyBUID4KLXN0cnVjdCBhZGRfcnZhbHVlX3JlZmVyZW5j
ZTxUICY+Ci17ICB0eXBlZGVmIFQgJiB0eXBlOyB9OwotCi0jZW5kaWYgLy8gI2lmbmRlZiBCT09T
VF9OT19DWFgxMV9SVkFMVUVfUkVGRVJFTkNFUwotCi10ZW1wbGF0ZTwgY2xhc3MgVCA+IHN0cnVj
dCByZW1vdmVfcnZhbHVlX3JlZmVyZW5jZSB7IHR5cGVkZWYgVCB0eXBlOyB9OwotCi0jaWZuZGVm
IEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZFUkVOQ0VTCi0gICB0ZW1wbGF0ZTwgY2xhc3MgVCA+
IHN0cnVjdCByZW1vdmVfcnZhbHVlX3JlZmVyZW5jZTwgVCYmID4gICAgICAgICAgICAgICAgICB7
IHR5cGVkZWYgVCB0eXBlOyB9OwotI2Vsc2UgLy8gI2lmbmRlZiBCT09TVF9OT19DWFgxMV9SVkFM
VUVfUkVGRVJFTkNFUwotICAgdGVtcGxhdGU8IGNsYXNzIFQgPiBzdHJ1Y3QgcmVtb3ZlX3J2YWx1
ZV9yZWZlcmVuY2U8IHJ2PFQ+ID4gICAgICAgICAgICAgICAgeyB0eXBlZGVmIFQgdHlwZTsgfTsK
LSAgIHRlbXBsYXRlPCBjbGFzcyBUID4gc3RydWN0IHJlbW92ZV9ydmFsdWVfcmVmZXJlbmNlPCBj
b25zdCBydjxUPiA+ICAgICAgICAgIHsgdHlwZWRlZiBUIHR5cGU7IH07Ci0gICB0ZW1wbGF0ZTwg
Y2xhc3MgVCA+IHN0cnVjdCByZW1vdmVfcnZhbHVlX3JlZmVyZW5jZTwgdm9sYXRpbGUgcnY8VD4g
PiAgICAgICB7IHR5cGVkZWYgVCB0eXBlOyB9OwotICAgdGVtcGxhdGU8IGNsYXNzIFQgPiBzdHJ1
Y3QgcmVtb3ZlX3J2YWx1ZV9yZWZlcmVuY2U8IGNvbnN0IHZvbGF0aWxlIHJ2PFQ+ID4geyB0eXBl
ZGVmIFQgdHlwZTsgfTsKLSAgIHRlbXBsYXRlPCBjbGFzcyBUID4gc3RydWN0IHJlbW92ZV9ydmFs
dWVfcmVmZXJlbmNlPCBydjxUPiYgPiAgICAgICAgICAgICAgIHsgdHlwZWRlZiBUIHR5cGU7IH07
Ci0gICB0ZW1wbGF0ZTwgY2xhc3MgVCA+IHN0cnVjdCByZW1vdmVfcnZhbHVlX3JlZmVyZW5jZTwg
Y29uc3QgcnY8VD4mID4gICAgICAgICB7IHR5cGVkZWYgVCB0eXBlOyB9OwotICAgdGVtcGxhdGU8
IGNsYXNzIFQgPiBzdHJ1Y3QgcmVtb3ZlX3J2YWx1ZV9yZWZlcmVuY2U8IHZvbGF0aWxlIHJ2PFQ+
JiA+ICAgICAgeyB0eXBlZGVmIFQgdHlwZTsgfTsKLSAgIHRlbXBsYXRlPCBjbGFzcyBUID4gc3Ry
dWN0IHJlbW92ZV9ydmFsdWVfcmVmZXJlbmNlPCBjb25zdCB2b2xhdGlsZSBydjxUPiYgPnsgdHlw
ZWRlZiBUIHR5cGU7IH07Ci0jZW5kaWYgLy8gI2lmbmRlZiBCT09TVF9OT19DWFgxMV9SVkFMVUVf
UkVGRVJFTkNFUwotCi0vLyBJZGVhcyBmcm9tIEJvb3N0Lk1vdmUgcmV2aWV3LCBKZWZmcmV5IExl
ZSBIZWxscnVuZzoKLS8vCi0vLy0gVHlwZVRyYWl0cyBtZXRhZnVuY3Rpb25zIGlzX2x2YWx1ZV9y
ZWZlcmVuY2UsIGFkZF9sdmFsdWVfcmVmZXJlbmNlLCBhbmQgcmVtb3ZlX2x2YWx1ZV9yZWZlcmVu
Y2UgPwotLy8gIFBlcmhhcHMgYWRkX3JlZmVyZW5jZSBhbmQgcmVtb3ZlX3JlZmVyZW5jZSBjYW4g
YmUgbW9kaWZpZWQgc28gdGhhdCB0aGV5IGJlaGF2ZSB3cnQgZW11bGF0ZWQgcnZhbHVlCi0vLyAg
cmVmZXJlbmNlcyB0aGUgc2FtZSBhcyB3cnQgcmVhbCBydmFsdWUgcmVmZXJlbmNlcywgaS5lLiwg
YWRkX3JlZmVyZW5jZTwgcnY8VD4mID4gLT4gVCYgcmF0aGVyIHRoYW4KLS8vICBydjxUPiYgKHNp
bmNlIFQmJiAmIC0+IFQmKS4KLS8vCi0vLy0gQWRkJ2wgVHlwZVRyYWl0cyBoYXNfW3RyaXZpYWxf
XW1vdmVfe2NvbnN0cnVjdG9yLGFzc2lnbn0uLi4/Ci0vLwotLy8tIEFuIGFzX2x2YWx1ZShUJiB4
KSBmdW5jdGlvbiwgd2hpY2ggYW1vdW50cyB0byBhbiBpZGVudGl0eSBvcGVyYXRpb24gaW4gQysr
MHgsIGJ1dCBzdHJpcHMgZW11bGF0ZWQKLS8vICBydmFsdWUgcmVmZXJlbmNlcyBpbiBDKyswMy4g
IFRoaXMgbWF5IGJlIG5lY2Vzc2FyeSB0byBwcmV2ZW50ICJhY2NpZGVudGFsIG1vdmVzIi4KLQot
fSAgLy9uYW1lc3BhY2UgbW92ZV9kZXRhaWwgewotfSAgLy9uYW1lc3BhY2UgYm9vc3QgewotCi0j
aW5jbHVkZSA8Ym9vc3QvbW92ZS9kZXRhaWwvY29uZmlnX2VuZC5ocHA+Ci0KLSNlbmRpZiAvLyNp
Zm5kZWYgQk9PU1RfTU9WRV9ERVRBSUxfTUVUQV9VVElMU19IUFAKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21vdmUvZGV0YWlsL21ldGFfdXRp
bHNfY29yZS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
b3ZlL2RldGFpbC9tZXRhX3V0aWxzX2NvcmUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0MGRiYjZlZmMzZGRiYWUwYzkwYjRkYzY2M2M1NDc2YmM1Mjg4NjI3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21vdmUvZGV0YWlsL21ldGFfdXRpbHNfY29yZS5ocHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwot
Ly8gKEMpIENvcHlyaWdodCBJb24gR2F6dGFuYWdhIDIwMTUtMjAxNS4KLS8vIERpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vIChTZWUg
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29z
dC5vcmcvbGlicy9tb3ZlIGZvciBkb2N1bWVudGF0aW9uLgotLy8KLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotCi0vLyEgXGZpbGUKLQotI2lmbmRlZiBCT09TVF9NT1ZFX0RFVEFJTF9NRVRBX1VUSUxT
X0NPUkVfSFBQCi0jZGVmaW5lIEJPT1NUX01PVkVfREVUQUlMX01FVEFfVVRJTFNfQ09SRV9IUFAK
LQotI2lmbmRlZiBCT09TVF9DT05GSUdfSFBQCi0jICBpbmNsdWRlIDxib29zdC9jb25maWcuaHBw
PgotI2VuZGlmCi0jCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01BX09OQ0UpCi0jICBwcmFn
bWEgb25jZQotI2VuZGlmCi0KLS8vU21hbGwgbWV0YS10eXBldHJhaXRzIHRvIHN1cHBvcnQgbW92
ZQotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIG1vdmVfZGV0YWlsIHsKLQotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICAgICAgICAgIGlmX2MKLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZTxib29sIEMsIHR5
cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KLXN0cnVjdCBpZl9jCi17Ci0gICB0eXBlZGVmIFQxIHR5
cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+Ci1zdHJ1Y3QgaWZf
YzxmYWxzZSxUMSxUMj4KLXsKLSAgIHR5cGVkZWYgVDIgdHlwZTsKLX07Ci0KLS8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICAgICAgICAgICBpZl8KLS8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDIsIHR5cGVuYW1lIFQzPgotc3RydWN0IGlmXyA6IGlmX2M8MCAhPSBUMTo6dmFsdWUs
IFQyLCBUMz4KLXt9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ly8gICAgICAgICAgZW5hYmxlX2lmX2MKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCi10ZW1wbGF0ZSA8Ym9vbCBCLCBjbGFzcyBUID0gdm9pZD4KLXN0cnVjdCBlbmFibGVf
aWZfYwotewotICAgdHlwZWRlZiBUIHR5cGU7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0
cnVjdCBlbmFibGVfaWZfYzxmYWxzZSwgVD4ge307Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLyAgICAgICAgICAgZW5hYmxlX2lmCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGUgPGNsYXNzIENvbmQsIGNsYXNzIFQgPSB2
b2lkPgotc3RydWN0IGVuYWJsZV9pZiA6IGVuYWJsZV9pZl9jPENvbmQ6OnZhbHVlLCBUPiB7fTsK
LQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICAgICAgIGRp
c2FibGVfaWZfYwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXRlbXBs
YXRlIDxib29sIEIsIGNsYXNzIFQgPSB2b2lkPgotc3RydWN0IGRpc2FibGVfaWZfYwotICAgOiBl
bmFibGVfaWZfYzwhQiwgVD4KLXt9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotLy8gICAgICAgICAgZGlzYWJsZV9pZgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLXRlbXBsYXRlIDxjbGFzcyBDb25kLCBjbGFzcyBUID0gdm9pZD4KLXN0
cnVjdCBkaXNhYmxlX2lmIDogZW5hYmxlX2lmX2M8IUNvbmQ6OnZhbHVlLCBUPiB7fTsKLQotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICAgICAgIGludGVncmFs
X2NvbnN0YW50Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxh
dGU8Y2xhc3MgVCwgVCB2Pgotc3RydWN0IGludGVncmFsX2NvbnN0YW50Ci17Ci0gICBzdGF0aWMg
Y29uc3QgVCB2YWx1ZSA9IHY7Ci0gICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKLSAgIHR5cGVkZWYg
aW50ZWdyYWxfY29uc3RhbnQ8VCwgdj4gdHlwZTsKLQotICAgICBvcGVyYXRvciBUKCkgY29uc3Qg
eyByZXR1cm4gdmFsdWU7IH0KLSAgIFQgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJuIHZhbHVl
OyB9Ci19OwotCi10eXBlZGVmIGludGVncmFsX2NvbnN0YW50PGJvb2wsIHRydWUgPiAgdHJ1ZV90
eXBlOwotdHlwZWRlZiBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBmYWxzZSA+IGZhbHNlX3R5cGU7
Ci0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICAgICAg
ICAgIGlzX3NhbWUKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1w
bGF0ZTxjbGFzcyBULCBjbGFzcyBVPgotc3RydWN0IGlzX3NhbWUKLXsKLSAgIHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gZmFsc2U7Ci19OwotIAotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBp
c19zYW1lPFQsIFQ+Ci17Ci0gICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7Ci19Owot
Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgIGVuYWJs
ZV9pZl9zYW1lCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzIFIgPSB2b2lkPgotc3RydWN0IGVuYWJsZV9pZl9z
YW1lIDogZW5hYmxlX2lmPGlzX3NhbWU8VCwgVT4sIFI+IHt9OwotCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgIGRpc2FibGVfaWZfc2FtZQotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBVLCBjbGFzcyBSID0gdm9pZD4KLXN0cnVjdCBkaXNhYmxlX2lmX3NhbWUgOiBkaXNhYmxlX2lm
PGlzX3NhbWU8VCwgVT4sIFI+IHt9OwotCi19ICAvL25hbWVzcGFjZSBtb3ZlX2RldGFpbCB7Ci19
ICAvL25hbWVzcGFjZSBib29zdCB7Ci0KLSNlbmRpZiAvLyNpZm5kZWYgQk9PU1RfTU9WRV9ERVRB
SUxfTUVUQV9VVElMU19DT1JFX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbW92ZS9kZXRhaWwvc3RkX25zX2JlZ2luLmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21vdmUvZGV0YWlsL3N0ZF9uc19i
ZWdpbi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NjhlNjFhMTVlODhmZGFk
NGU5NDQyMjM1NjE2ZWI2MjJkNWNjOGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bW92ZS9kZXRhaWwvc3RkX25zX2JlZ2luLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAg
QEAKLSMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSMvLwotIy8vIChDKSBDb3B5cmlnaHQgSW9uIEdh
enRhbmFnYSAyMDE1LTIwMTUuCi0jLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotIy8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSMvLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0jLy8KLSMvLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tb3ZlIGZv
ciBkb2N1bWVudGF0aW9uLgotIy8vCi0jLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jCi0jaWYgZGVm
aW5lZChfTElCQ1BQX1ZFUlNJT04pCi0gICAjaWYgZGVmaW5lZChfX2NsYW5nX18pCi0gICAgICAj
ZGVmaW5lIEJPT1NUX01PVkVfU1REX05TX0dDQ19ESUFHTk9TVElDX1BVU0gKLSAgICAgICNwcmFn
bWEgR0NDIGRpYWdub3N0aWMgcHVzaAotICAgICAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25v
cmVkICItV2MrKzExLWV4dGVuc2lvbnMiCi0gICAjZW5kaWYKLSAgICNkZWZpbmUgQk9PU1RfTU9W
RV9TVERfTlNfQkVHIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX1NURAotICAgI2RlZmluZSBCT09T
VF9NT1ZFX1NURF9OU19FTkQgX0xJQkNQUF9FTkRfTkFNRVNQQUNFX1NURAotI2VsaWYgZGVmaW5l
ZChCT09TVF9HTlVfU1RETElCKSAmJiBkZWZpbmVkKF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9W
RVJTSU9OKSAgLy9HQ0MgPj0gNC42Ci0gICAjZGVmaW5lIEJPT1NUX01PVkVfU1REX05TX0JFRyBu
YW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkgeyBfR0xJQkNYWF9CRUdJ
Tl9OQU1FU1BBQ0VfVkVSU0lPTgotICAgI2RlZmluZSBCT09TVF9NT1ZFX1NURF9OU19FTkQgX0dM
SUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OICB9IC8vIG5hbWVzcGFjZQotI2VsaWYgZGVmaW5l
ZChCT09TVF9HTlVfU1RETElCKSAmJiBkZWZpbmVkKF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRSkg
IC8vR0NDID49IDQuMgotICAgI2RlZmluZSBCT09TVF9NT1ZFX1NURF9OU19CRUcgX0dMSUJDWFhf
QkVHSU5fTkFNRVNQQUNFKHN0ZCkKLSAgICNkZWZpbmUgQk9PU1RfTU9WRV9TVERfTlNfRU5EIF9H
TElCQ1hYX0VORF9OQU1FU1BBQ0UKLSNlbHNlCi0gICAjZGVmaW5lIEJPT1NUX01PVkVfU1REX05T
X0JFRyBuYW1lc3BhY2Ugc3RkewotICAgI2RlZmluZSBCT09TVF9NT1ZFX1NURF9OU19FTkQgfQot
I2VuZGlmCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21vdmUvZGV0YWlsL3N0ZF9uc19lbmQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbW92ZS9kZXRhaWwvc3RkX25zX2VuZC5ocHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NzUwNTk5NWJiNWMxODM5ZjYxOGM5OWRiYWEzODJmNjU3
ZjY5ZjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbW92ZS9kZXRhaWwvc3RkX25z
X2VuZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCi0jLy8KLSMvLyAoQykgQ29weXJpZ2h0IElvbiBHYXp0YW5hZ2EgMjAxNS0yMDE1Lgot
Iy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4KLSMvLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5
IGF0Ci0jLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotIy8vCi0jLy8g
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbW92ZSBmb3IgZG9jdW1lbnRhdGlvbi4KLSMv
LwotIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotI2lmZGVmIEJPT1NUX01PVkVfU1REX05TX0dDQ19E
SUFHTk9TVElDX1BVU0gKLSAgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCi0gICAjdW5kZWYg
Qk9PU1RfTU9WRV9TVERfTlNfR0NDX0RJQUdOT1NUSUNfUFVTSAotI2VuZGlmICAgLy9CT09TVF9N
T1ZFX1NURF9OU19HQ0NfRElBR05PU1RJQ19QVVNICmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tb3ZlL2RldGFpbC90eXBlX3RyYWl0cy5ocHAg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tb3ZlL2RldGFpbC90
eXBlX3RyYWl0cy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNWQ4Mzg4ZTRh
YjBkZDNhZDNjYzZkZGIxNGRiN2YxMGFkNGQ0ZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbW92ZS9kZXRhaWwvdHlwZV90cmFpdHMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTA3
MiArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIChDKSBDb3B5cmlnaHQgSm9obiBN
YWRkb2NrIDIwMDAuCi0vLyAoQykgQ29weXJpZ2h0IElvbiBHYXp0YW5hZ2EgMjAwNS0yMDE1Lgot
Ly8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJz
aW9uIDEuMC4KLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBT
ZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tb3ZlIGZvciBkb2N1bWVudGF0aW9uLgotLy8K
LS8vIFRoZSBhbGlnbm1lbnQgYW5kIFR5cGUgdHJhaXRzIGltcGxlbWVudGF0aW9uIGNvbWVzIGZy
b20KLS8vIEpvaG4gTWFkZG9jaydzIFR5cGVUcmFpdHMgbGlicmFyeS4KLS8vCi0vLyBTb21lIG90
aGVyIHRyaWNrcyBjb21lIGZyb20gSG93YXJkIEhpbm5hbnQncyBwYXBlcnMgYW5kIFN0YWNrT3Zl
cmZsb3cgcmVwbGllcwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jaWZuZGVmIEJPT1NUX01PVkVf
REVUQUlMX1RZUEVfVFJBSVRTX0hQUAotI2RlZmluZSBCT09TVF9NT1ZFX0RFVEFJTF9UWVBFX1RS
QUlUU19IUFAKLQotI2lmbmRlZiBCT09TVF9DT05GSUdfSFBQCi0jICBpbmNsdWRlIDxib29zdC9j
b25maWcuaHBwPgotI2VuZGlmCi0jCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfUFJBR01BX09OQ0Up
Ci0jICBwcmFnbWEgb25jZQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9tb3ZlL2RldGFpbC9j
b25maWdfYmVnaW4uaHBwPgotI2luY2x1ZGUgPGJvb3N0L21vdmUvZGV0YWlsL3dvcmthcm91bmQu
aHBwPgotCi0vLyBtb3ZlL2RldGFpbAotI2luY2x1ZGUgPGJvb3N0L21vdmUvZGV0YWlsL21ldGFf
dXRpbHMuaHBwPgotLy8gb3RoZXIKLSNpbmNsdWRlIDxib29zdC9hc3NlcnQuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L3N0YXRpY19hc3NlcnQuaHBwPgotLy8gc3RkCi0jaW5jbHVkZSA8Y3N0ZGRlZj4K
LQotLy9Vc2Ugb2YgQm9vc3QuVHlwZVRyYWl0cyBsZWFkcyB0byBsb25nIHByZXByb2Nlc3NlZCBz
b3VyY2UgY29kZSBkdWUgdG8KLS8vTVBMIGRlcGVuZGVuY2llcy4gV2UnbGwgdXNlIGludHJpbnNp
Y3MgZGlyZWN0bHkgYW5kIG1ha2Ugb3Igb3duCi0vL3NpbXBsaWZpZWQgdmVyc2lvbiBvZiBUeXBl
VHJhaXRzLgotLy9JZiBzb21lZGF5IEJvb3N0LlR5cGVUcmFpdHMgZGVwZW5kZW5jaWVzIGFyZSBt
aW5pbWl6ZWQsIHdlIHNob3VsZAotLy9yZXZpc2l0IHRoaXMgZmlsZSByZWRpcmVjdGluZyBjb2Rl
IHRvIEJvb3N0LlR5cGVUcmFpdHMgdHJhaXRzLgotCi0vL1RoZXNlIHRyYWl0cyBkb24ndCBjYXJl
IGFib3V0IHZvbGF0aWxlLCByZWZlcmVuY2Ugb3Igb3RoZXIgY2hlY2tzCi0vL21hZGUgYnkgQm9v
c3QuVHlwZVRyYWl0cyBiZWNhdXNlIG5vIHZvbGF0aWxlIG9yIHJlZmVyZW5jZSB0eXBlcwotLy9j
YW4gYmUgaG9sZCBpbiBCb29zdC5Db250YWluZXJzLiBUaGlzIGhlbHBzIHRvIGF2b2lkIGFueSBC
b29zdC5UeXBlVHJhaXRzCi0vL2RlcGVuZGVuY3kuCi0KLS8vIEhlbHBlciBtYWNyb3MgZm9yIGJ1
aWx0aW4gY29tcGlsZXIgc3VwcG9ydC4KLS8vIElmIHlvdXIgY29tcGlsZXIgaGFzIGJ1aWx0aW4g
c3VwcG9ydCBmb3IgYW55IG9mIHRoZSBmb2xsb3dpbmcKLS8vIHRyYWl0cyBjb25jZXB0cywgdGhl
biByZWRlZmluZSB0aGUgYXBwcm9wcmlhdGUgbWFjcm9zIHRvIHBpY2sKLS8vIHVwIG9uIHRoZSBj
b21waWxlciBzdXBwb3J0OgotLy8KLS8vICh0aGVzZSBzaG91bGQgbGFyZ2VseSBpZ25vcmUgY3Yt
cXVhbGlmaWVycykKLS8vIEJPT1NUX01PVkVfSVNfUE9EKFQpIHNob3VsZCBldmFsdWF0ZSB0byB0
cnVlIGlmIFQgaXMgYSBQT0QgdHlwZQotLy8gQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9DT05TVFJV
Q1RPUihUKSBzaG91bGQgZXZhbHVhdGUgdG8gdHJ1ZSBpZiAiVCB4OyIgaGFzIG5vIGVmZmVjdAot
Ly8gQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9DT1BZKFQpIHNob3VsZCBldmFsdWF0ZSB0byB0cnVl
IGlmIFQodCkgPD09PiBtZW1jcHkKLS8vIChOb3RlOiB0aGlzIHRyYWl0IGRvZXMgbm90IGd1YXJh
bnRlZSBUIGlzIGNvcHkgY29uc3RydWN0aWJsZSwgdGhlIGNvcHkgY29uc3RydWN0b3IgY291bGQg
YmUgZGVsZXRlZCBidXQgc3RpbGwgYmUgdHJpdmlhbCkKLS8vIEJPT1NUX01PVkVfSEFTX1RSSVZJ
QUxfTU9WRV9DT05TVFJVQ1RPUihUKSBzaG91bGQgZXZhbHVhdGUgdG8gdHJ1ZSBpZiBUKGJvb3N0
Ojptb3ZlKHQpKSA8PT0+IG1lbWNweQotLy8gQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9BU1NJR04o
VCkgc2hvdWxkIGV2YWx1YXRlIHRvIHRydWUgaWYgdCA9IHUgPD09PiBtZW1jcHkKLS8vIChOb3Rl
OiB0aGlzIHRyYWl0IGRvZXMgbm90IGd1YXJhbnRlZSBUIGlzIGFzc2lnbmFibGUgLCB0aGUgY29w
eSBhc3NpZ25tZW4gY291bGQgYmUgZGVsZXRlZCBidXQgc3RpbGwgYmUgdHJpdmlhbCkKLS8vIEJP
T1NUX01PVkVfSEFTX1RSSVZJQUxfTU9WRV9BU1NJR04oVCkgc2hvdWxkIGV2YWx1YXRlIHRvIHRy
dWUgaWYgdCA9IGJvb3N0Ojptb3ZlKHUpIDw9PT4gbWVtY3B5Ci0vLyBCT09TVF9NT1ZFX0hBU19U
UklWSUFMX0RFU1RSVUNUT1IoVCkgc2hvdWxkIGV2YWx1YXRlIHRvIHRydWUgaWYgflQoKSBoYXMg
bm8gZWZmZWN0Ci0vLyBCT09TVF9NT1ZFX0hBU19OT1RIUk9XX0NPTlNUUlVDVE9SKFQpIHNob3Vs
ZCBldmFsdWF0ZSB0byB0cnVlIGlmICJUIHg7IiBjYW4gbm90IHRocm93Ci0vLyBCT09TVF9NT1ZF
X0hBU19OT1RIUk9XX0NPUFkoVCkgc2hvdWxkIGV2YWx1YXRlIHRvIHRydWUgaWYgVCh0KSBjYW4g
bm90IHRocm93Ci0vLyBCT09TVF9NT1ZFX0hBU19OT1RIUk9XX0FTU0lHTihUKSBzaG91bGQgZXZh
bHVhdGUgdG8gdHJ1ZSBpZiB0ID0gdSBjYW4gbm90IHRocm93Ci0vLyBCT09TVF9NT1ZFX0lTX0VO
VU0oVCkgc2hvdWxkIGV2YWx1YXRlIHRvIHRydWUgaXQgdCBpcyBhIHVuaW9uIHR5cGUuCi0vLwot
Ly8gVGhlIGZvbGxvd2luZyBjYW4gYWxzbyBiZSBkZWZpbmVkOiB3aGVuIGRldGVjdGVkIG91ciBp
bXBsZW1lbnRhdGlvbiBpcyBncmVhdGx5IHNpbXBsaWZpZWQuCi0vLwotLy8gQk9PU1RfQUxJR05N
RU5UX09GKFQpIHNob3VsZCBldmFsdWF0ZSB0byB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBv
ZiB0eXBlIFQuCi0KLSNpZiBkZWZpbmVkKF9fTVNMX0NQUF9fKSAmJiAoX19NU0xfQ1BQX18gPj0g
MHg4MDAwKQotICAgIC8vIE1ldHJvd2Vya3MgY29tcGlsZXIgaXMgYWNxdWlyaW5nIGludHJpbnNp
YyB0eXBlIHRyYWl0cyBzdXBwb3J0Ci0gICAgLy8gcG9zdCB2ZXJzaW9uIDguICBXZSBob29rIGlu
dG8gdGhlIHB1Ymxpc2hlZCBpbnRlcmZhY2UgdG8gcGljayB1cAotICAgIC8vIHVzZXIgZGVmaW5l
ZCBzcGVjaWFsaXphdGlvbnMgYXMgd2VsbCBhcyBjb21waWxlciBpbnRyaW5zaWNzIGFzCi0gICAg
Ly8gYW5kIHdoZW4gdGhleSBiZWNvbWUgYXZhaWxhYmxlOgotIyAgIGluY2x1ZGUgPG1zbF91dGls
aXR5PgotIyAgIGRlZmluZSBCT09TVF9NT1ZFX0lTX1VOSU9OKFQpIEJPT1NUX1NURF9FWFRFTlNJ
T05fTkFNRVNQQUNFOjppc191bmlvbjxUPjo6dmFsdWUKLSMgICBkZWZpbmUgQk9PU1RfTU9WRV9J
U19QT0QoVCkgQk9PU1RfU1REX0VYVEVOU0lPTl9OQU1FU1BBQ0U6OmlzX1BPRDxUPjo6dmFsdWUK
LSMgICBkZWZpbmUgQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9DT05TVFJVQ1RPUihUKSBCT09TVF9T
VERfRVhURU5TSU9OX05BTUVTUEFDRTo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jdG9yPFQ+Ojp2YWx1
ZQotIyAgIGRlZmluZSBCT09TVF9NT1ZFX0hBU19UUklWSUFMX0NPUFkoVCkgQk9PU1RfU1REX0VY
VEVOU0lPTl9OQU1FU1BBQ0U6Omhhc190cml2aWFsX2NvcHlfY3RvcjxUPjo6dmFsdWUKLSMgICBk
ZWZpbmUgQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9BU1NJR04oVCkgQk9PU1RfU1REX0VYVEVOU0lP
Tl9OQU1FU1BBQ0U6Omhhc190cml2aWFsX2Fzc2lnbm1lbnQ8VD46OnZhbHVlCi0jICAgZGVmaW5l
IEJPT1NUX01PVkVfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihUKSBCT09TVF9TVERfRVhURU5TSU9O
X05BTUVTUEFDRTo6aGFzX3RyaXZpYWxfZHRvcjxUPjo6dmFsdWUKLSNlbmRpZgotCi0jaWYgKGRl
ZmluZWQoQk9PU1RfTVNWQykgJiYgZGVmaW5lZChCT09TVF9NU1ZDX0ZVTExfVkVSKSAmJiAoQk9P
U1RfTVNWQ19GVUxMX1ZFUiA+PTE0MDA1MDIxNSkpXAotICAgICAgICAgfHwgKGRlZmluZWQoQk9P
U1RfSU5URUwpICYmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNTAwKSkKLSMg
ICBkZWZpbmUgQk9PU1RfTU9WRV9JU19VTklPTihUKSBfX2lzX3VuaW9uKFQpCi0jICAgZGVmaW5l
IEJPT1NUX01PVkVfSVNfUE9EKFQpICAgICAgICAgICAgICAgICAgICAoX19pc19wb2QoVCkgJiYg
X19oYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcihUKSkKLSMgICBkZWZpbmUgQk9PU1RfTU9WRV9JU19F
TVBUWShUKSAgICAgICAgICAgICAgICAgIF9faXNfZW1wdHkoVCkKLSMgICBkZWZpbmUgQk9PU1Rf
TU9WRV9IQVNfVFJJVklBTF9DT05TVFJVQ1RPUihUKSAgIF9faGFzX3RyaXZpYWxfY29uc3RydWN0
b3IoVCkKLSMgICBkZWZpbmUgQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9DT1BZKFQpICAgICAgICAg
IChfX2hhc190cml2aWFsX2NvcHkoVCl8fCA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6aXNfcG9kPFQ+
Ojp2YWx1ZSkKLSMgICBkZWZpbmUgQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9BU1NJR04oVCkgICAg
ICAgIChfX2hhc190cml2aWFsX2Fzc2lnbihUKSB8fCA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6aXNf
cG9kPFQ+Ojp2YWx1ZSkKLSMgICBkZWZpbmUgQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9ERVNUUlVD
VE9SKFQpICAgIChfX2hhc190cml2aWFsX2Rlc3RydWN0b3IoVCkgfHwgOjpib29zdDo6bW92ZV9k
ZXRhaWw6OmlzX3BvZDxUPjo6dmFsdWUpCi0jICAgZGVmaW5lIEJPT1NUX01PVkVfSEFTX05PVEhS
T1dfQ09OU1RSVUNUT1IoVCkgICAoX19oYXNfbm90aHJvd19jb25zdHJ1Y3RvcihUKSB8fCA6OmJv
b3N0Ojptb3ZlX2RldGFpbDo6aXNfdHJpdmlhbGx5X2RlZmF1bHRfY29uc3RydWN0aWJsZTxUPjo6
dmFsdWUpCi0jICAgZGVmaW5lIEJPT1NUX01PVkVfSEFTX05PVEhST1dfQ09QWShUKSAgICAgICAg
ICAoX19oYXNfbm90aHJvd19jb3B5KFQpIHx8IDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjppc190cml2
aWFsbHlfY29weV9jb25zdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSkKLSMgICBkZWZpbmUgQk9PU1RfTU9W
RV9IQVNfTk9USFJPV19BU1NJR04oVCkgICAgICAgIChfX2hhc19ub3Rocm93X2Fzc2lnbihUKSB8
fCA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6aXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZTxUPjo6
dmFsdWUpCi0KLSMgICBkZWZpbmUgQk9PU1RfTU9WRV9JU19FTlVNKFQpIF9faXNfZW51bShUKQot
IyAgIGlmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxNzAwKQotIyAgICAgICBk
ZWZpbmUgQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9NT1ZFX0NPTlNUUlVDVE9SKFQpICAgKF9faGFz
X3RyaXZpYWxfbW92ZV9jb25zdHJ1Y3RvcihUKSB8fCA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6aXNf
cG9kPFQ+Ojp2YWx1ZSkKLSMgICAgICAgZGVmaW5lIEJPT1NUX01PVkVfSEFTX1RSSVZJQUxfTU9W
RV9BU1NJR04oVCkgICAgICAgIChfX2hhc190cml2aWFsX21vdmVfYXNzaWduKFQpIHx8IDo6Ym9v
c3Q6Om1vdmVfZGV0YWlsOjppc19wb2Q8VD46OnZhbHVlKQotIyAgIGVuZGlmCi0jZW5kaWYKLQot
I2lmIGRlZmluZWQoQk9PU1RfQ0xBTkcpICYmIGRlZmluZWQoX19oYXNfZmVhdHVyZSkKLQotIyAg
IGlmIF9faGFzX2ZlYXR1cmUoaXNfdW5pb24pCi0jICAgICBkZWZpbmUgQk9PU1RfTU9WRV9JU19V
TklPTihUKSBfX2lzX3VuaW9uKFQpCi0jICAgZW5kaWYKLSMgICBpZiAoIWRlZmluZWQoX19HTElC
Q1hYX18pIHx8IChfX0dMSUJDWFhfXyA+PSAyMDA4MDMwNiAmJiBfX0dMSUJDWFhfXyAhPSAyMDA4
MDUxOSkpICYmIF9faGFzX2ZlYXR1cmUoaXNfcG9kKQotIyAgICAgZGVmaW5lIEJPT1NUX01PVkVf
SVNfUE9EKFQpIF9faXNfcG9kKFQpCi0jICAgZW5kaWYKLSMgICBpZiAoIWRlZmluZWQoX19HTElC
Q1hYX18pIHx8IChfX0dMSUJDWFhfXyA+PSAyMDA4MDMwNiAmJiBfX0dMSUJDWFhfXyAhPSAyMDA4
MDUxOSkpICYmIF9faGFzX2ZlYXR1cmUoaXNfZW1wdHkpCi0jICAgICBkZWZpbmUgQk9PU1RfTU9W
RV9JU19FTVBUWShUKSBfX2lzX2VtcHR5KFQpCi0jICAgZW5kaWYKLSMgICBpZiBfX2hhc19mZWF0
dXJlKGhhc190cml2aWFsX2NvbnN0cnVjdG9yKQotIyAgICAgZGVmaW5lIEJPT1NUX01PVkVfSEFT
X1RSSVZJQUxfQ09OU1RSVUNUT1IoVCkgX19oYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcihUKQotIyAg
IGVuZGlmCi0jICAgaWYgX19oYXNfZmVhdHVyZShoYXNfdHJpdmlhbF9jb3B5KQotIyAgICAgZGVm
aW5lIEJPT1NUX01PVkVfSEFTX1RSSVZJQUxfQ09QWShUKSBfX2hhc190cml2aWFsX2NvcHkoVCkK
LSMgICBlbmRpZgotIyAgIGlmIF9faGFzX2ZlYXR1cmUoaGFzX3RyaXZpYWxfYXNzaWduKQotIyAg
ICAgZGVmaW5lIEJPT1NUX01PVkVfSEFTX1RSSVZJQUxfQVNTSUdOKFQpIChfX2hhc190cml2aWFs
X2Fzc2lnbihUKSApCi0jICAgZW5kaWYKLSMgICBpZiBfX2hhc19mZWF0dXJlKGhhc190cml2aWFs
X2Rlc3RydWN0b3IpCi0jICAgICBkZWZpbmUgQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9ERVNUUlVD
VE9SKFQpIF9faGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcihUKQotIyAgIGVuZGlmCi0jICAgaWYgX19o
YXNfZmVhdHVyZShoYXNfbm90aHJvd19jb25zdHJ1Y3RvcikKLSMgICAgIGRlZmluZSBCT09TVF9N
T1ZFX0hBU19OT1RIUk9XX0NPTlNUUlVDVE9SKFQpIF9faGFzX25vdGhyb3dfY29uc3RydWN0b3Io
VCkKLSMgICBlbmRpZgotIyAgIGlmIF9faGFzX2ZlYXR1cmUoaGFzX25vdGhyb3dfY29weSkKLSMg
ICAgIGRlZmluZSBCT09TVF9NT1ZFX0hBU19OT1RIUk9XX0NPUFkoVCkgKF9faGFzX25vdGhyb3df
Y29weShUKSkKLSMgICBlbmRpZgotIyAgIGlmIF9faGFzX2ZlYXR1cmUoaXNfbm90aHJvd19jb3B5
X2Fzc2lnbmFibGUpCi0jICAgICBkZWZpbmUgQk9PU1RfTU9WRV9IQVNfTk9USFJPV19BU1NJR04o
VCkgKF9faGFzX25vdGhyb3dfYXNzaWduKFQpKQotIyAgIGVuZGlmCi0jICAgaWYgX19oYXNfZmVh
dHVyZShpc19lbnVtKQotIyAgICAgZGVmaW5lIEJPT1NUX01PVkVfSVNfRU5VTShUKSBfX2lzX2Vu
dW0oVCkKLSMgICBlbmRpZgotIyAgIGlmIF9faGFzX2ZlYXR1cmUoaGFzX3RyaXZpYWxfbW92ZV9j
b25zdHJ1Y3RvcikKLSMgICAgIGRlZmluZSBCT09TVF9NT1ZFX0hBU19UUklWSUFMX01PVkVfQ09O
U1RSVUNUT1IoVCkgX19oYXNfdHJpdmlhbF9tb3ZlX2NvbnN0cnVjdG9yKFQpCi0jICAgZW5kaWYK
LSMgICBpZiBfX2hhc19mZWF0dXJlKGhhc190cml2aWFsX21vdmVfYXNzaWduKQotIyAgICAgZGVm
aW5lIEJPT1NUX01PVkVfSEFTX1RSSVZJQUxfTU9WRV9BU1NJR04oVCkgX19oYXNfdHJpdmlhbF9t
b3ZlX2Fzc2lnbihUKQotIyAgIGVuZGlmCi0jICAgZGVmaW5lIEJPT1NUX01PVkVfQUxJR05NRU5U
X09GKFQpIF9fYWxpZ25vZihUKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAo
KF9fR05VQ19fID4gNCkgfHwgKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0g
MykgJiYgIWRlZmluZWQoX19HQ0NYTUxfXykpKSAmJiAhZGVmaW5lZChCT09TVF9DTEFORykKLQot
I2lmZGVmIEJPT1NUX0lOVEVMCi0jICBkZWZpbmUgQk9PU1RfTU9WRV9JTlRFTF9UVF9PUFRTIHx8
IDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjppc19wb2Q8VD46OnZhbHVlCi0jZWxzZQotIyAgZGVmaW5l
IEJPT1NUX01PVkVfSU5URUxfVFRfT1BUUwotI2VuZGlmCi0KLSMgICBkZWZpbmUgQk9PU1RfTU9W
RV9JU19VTklPTihUKSBfX2lzX3VuaW9uKFQpCi0jICAgZGVmaW5lIEJPT1NUX01PVkVfSVNfUE9E
KFQpIF9faXNfcG9kKFQpCi0jICAgZGVmaW5lIEJPT1NUX01PVkVfSVNfRU1QVFkoVCkgX19pc19l
bXB0eShUKQotIyAgIGRlZmluZSBCT09TVF9NT1ZFX0hBU19UUklWSUFMX0NPTlNUUlVDVE9SKFQp
ICgoX19oYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcihUKSBCT09TVF9NT1ZFX0lOVEVMX1RUX09QVFMp
KQotIyAgIGRlZmluZSBCT09TVF9NT1ZFX0hBU19UUklWSUFMX0NPUFkoVCkgKChfX2hhc190cml2
aWFsX2NvcHkoVCkgQk9PU1RfTU9WRV9JTlRFTF9UVF9PUFRTKSkKLSMgICBkZWZpbmUgQk9PU1Rf
TU9WRV9IQVNfVFJJVklBTF9BU1NJR04oVCkgKChfX2hhc190cml2aWFsX2Fzc2lnbihUKSBCT09T
VF9NT1ZFX0lOVEVMX1RUX09QVFMpICkKLSMgICBkZWZpbmUgQk9PU1RfTU9WRV9IQVNfVFJJVklB
TF9ERVNUUlVDVE9SKFQpIChfX2hhc190cml2aWFsX2Rlc3RydWN0b3IoVCkgQk9PU1RfTU9WRV9J
TlRFTF9UVF9PUFRTKQotIyAgIGRlZmluZSBCT09TVF9NT1ZFX0hBU19OT1RIUk9XX0NPTlNUUlVD
VE9SKFQpIChfX2hhc19ub3Rocm93X2NvbnN0cnVjdG9yKFQpIEJPT1NUX01PVkVfSU5URUxfVFRf
T1BUUykKLSMgICBkZWZpbmUgQk9PU1RfTU9WRV9IQVNfTk9USFJPV19DT1BZKFQpICgoX19oYXNf
bm90aHJvd19jb3B5KFQpIEJPT1NUX01PVkVfSU5URUxfVFRfT1BUUykpCi0jICAgZGVmaW5lIEJP
T1NUX01PVkVfSEFTX05PVEhST1dfQVNTSUdOKFQpICgoX19oYXNfbm90aHJvd19hc3NpZ24oVCkg
Qk9PU1RfTU9WRV9JTlRFTF9UVF9PUFRTKSkKLQotIyAgIGRlZmluZSBCT09TVF9NT1ZFX0lTX0VO
VU0oVCkgX19pc19lbnVtKFQpCi0jICAgaWYgKCFkZWZpbmVkKHVuaXgpICYmICFkZWZpbmVkKF9f
dW5peF9fKSkgfHwgZGVmaW5lZChfX0xQNjRfXykKLSAgICAgIC8vIEdDQyBzb21ldGltZXMgbGll
cyBhYm91dCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzCi0gICAgICAvLyBvZiB0eXBlIGRvdWJsZSBv
biAzMi1iaXQgdW5peCBwbGF0Zm9ybXMsIHVzZSB0aGUKLSAgICAgIC8vIG9sZCBpbXBsZW1lbnRh
dGlvbiBpbnN0ZWFkIGluIHRoYXQgY2FzZToKLSMgICAgIGRlZmluZSBCT09TVF9NT1ZFX0FMSUdO
TUVOVF9PRihUKSBfX2FsaWdub2ZfXyhUKQotIyAgIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmlu
ZWQoX19naHNfXykgJiYgKF9fR0hTX1ZFUlNJT05fTlVNQkVSID49IDYwMCkKLQotIyAgIGRlZmlu
ZSBCT09TVF9NT1ZFX0lTX1VOSU9OKFQpIF9faXNfdW5pb24oVCkKLSMgICBkZWZpbmUgQk9PU1Rf
TU9WRV9JU19QT0QoVCkgX19pc19wb2QoVCkKLSMgICBkZWZpbmUgQk9PU1RfTU9WRV9JU19FTVBU
WShUKSBfX2lzX2VtcHR5KFQpCi0jICAgZGVmaW5lIEJPT1NUX01PVkVfSEFTX1RSSVZJQUxfQ09O
U1RSVUNUT1IoVCkgX19oYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcihUKQotIyAgIGRlZmluZSBCT09T
VF9NT1ZFX0hBU19UUklWSUFMX0NPUFkoVCkgKF9faGFzX3RyaXZpYWxfY29weShUKSkKLSMgICBk
ZWZpbmUgQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9BU1NJR04oVCkgKF9faGFzX3RyaXZpYWxfYXNz
aWduKFQpKQotIyAgIGRlZmluZSBCT09TVF9NT1ZFX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoVCkg
X19oYXNfdHJpdmlhbF9kZXN0cnVjdG9yKFQpCi0jICAgZGVmaW5lIEJPT1NUX01PVkVfSEFTX05P
VEhST1dfQ09OU1RSVUNUT1IoVCkgX19oYXNfbm90aHJvd19jb25zdHJ1Y3RvcihUKQotIyAgIGRl
ZmluZSBCT09TVF9NT1ZFX0hBU19OT1RIUk9XX0NPUFkoVCkgKF9faGFzX25vdGhyb3dfY29weShU
KSkKLSMgICBkZWZpbmUgQk9PU1RfTU9WRV9IQVNfTk9USFJPV19BU1NJR04oVCkgKF9faGFzX25v
dGhyb3dfYXNzaWduKFQpKQotCi0jICAgZGVmaW5lIEJPT1NUX01PVkVfSVNfRU5VTShUKSBfX2lz
X2VudW0oVCkKLSMgICBkZWZpbmUgQk9PU1RfTU9WRV9BTElHTk1FTlRfT0YoVCkgX19hbGlnbm9m
X18oVCkKLSNlbmRpZgotCi0jIGlmIGRlZmluZWQoX19DT0RFR0VBUkNfXykKLSMgICBkZWZpbmUg
Qk9PU1RfTU9WRV9JU19VTklPTihUKSBfX2lzX3VuaW9uKFQpCi0jICAgZGVmaW5lIEJPT1NUX01P
VkVfSVNfUE9EKFQpIF9faXNfcG9kKFQpCi0jICAgZGVmaW5lIEJPT1NUX01PVkVfSVNfRU1QVFko
VCkgX19pc19lbXB0eShUKQotIyAgIGRlZmluZSBCT09TVF9NT1ZFX0hBU19UUklWSUFMX0NPTlNU
UlVDVE9SKFQpIChfX2hhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3IoVCkpCi0jICAgZGVm
aW5lIEJPT1NUX01PVkVfSEFTX1RSSVZJQUxfQ09QWShUKSAoX19oYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yKFQpKQotIyAgIGRlZmluZSBCT09TVF9NT1ZFX0hBU19UUklWSUFMX0FTU0lHTihU
KSAoX19oYXNfdHJpdmlhbF9hc3NpZ24oVCkpCi0jICAgZGVmaW5lIEJPT1NUX01PVkVfSEFTX1RS
SVZJQUxfREVTVFJVQ1RPUihUKSAoX19oYXNfdHJpdmlhbF9kZXN0cnVjdG9yKFQpKQotIyAgIGRl
ZmluZSBCT09TVF9NT1ZFX0hBU19OT1RIUk9XX0NPTlNUUlVDVE9SKFQpIChfX2hhc19ub3Rocm93
X2RlZmF1bHRfY29uc3RydWN0b3IoVCkpCi0jICAgZGVmaW5lIEJPT1NUX01PVkVfSEFTX05PVEhS
T1dfQ09QWShUKSAoX19oYXNfbm90aHJvd19jb3B5X2NvbnN0cnVjdG9yKFQpKQotIyAgIGRlZmlu
ZSBCT09TVF9NT1ZFX0hBU19OT1RIUk9XX0FTU0lHTihUKSAoX19oYXNfbm90aHJvd19hc3NpZ24o
VCkpCi0KLSMgICBkZWZpbmUgQk9PU1RfTU9WRV9JU19FTlVNKFQpIF9faXNfZW51bShUKQotIyAg
IGRlZmluZSBCT09TVF9NT1ZFX0FMSUdOTUVOVF9PRihUKSBhbGlnbm9mKFQpCi0KLSNlbmRpZgot
Ci0vL0ZhbGxiYWNrIGRlZmluaXRpb25zCi0KLSNpZmRlZiBCT09TVF9NT1ZFX0lTX1VOSU9OCi0g
ICAjZGVmaW5lIEJPT1NUX01PVkVfSVNfVU5JT05fSU1QTChUKSBCT09TVF9NT1ZFX0lTX1VOSU9O
KFQpCi0jZWxzZQotICAgI2RlZmluZSBCT09TVF9NT1ZFX0lTX1VOSU9OX0lNUEwoVCkgZmFsc2UK
LSNlbmRpZgotCi0jaWZkZWYgQk9PU1RfTU9WRV9JU19QT0QKLSAgIC8vaW4gc29tZSBjb21waWxl
cnMgdGhlIGludHJpbnNpYyBpcyBsaW1pdGVkIHRvIGNsYXNzIHR5cGVzIHNvIGFkZCBzY2FsYXIg
YW5kIHZvaWQKLSAgICNkZWZpbmUgQk9PU1RfTU9WRV9JU19QT0RfSU1QTChUKSAoOjpib29zdDo6
bW92ZV9kZXRhaWw6OmlzX3NjYWxhcjxUPjo6dmFsdWUgfHxcCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjppc192b2lkPFQ+Ojp2YWx1
ZSAgIHx8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PU1RfTU9W
RV9JU19QT0QoVCkpCi0jZWxzZQotICAgI2RlZmluZSBCT09TVF9NT1ZFX0lTX1BPRF9JTVBMKFQp
IFwKLSAgICAgICg6OmJvb3N0Ojptb3ZlX2RldGFpbDo6aXNfc2NhbGFyPFQ+Ojp2YWx1ZSB8fCA6
OmJvb3N0Ojptb3ZlX2RldGFpbDo6aXNfdm9pZDxUPjo6dmFsdWUpCi0jZW5kaWYKLQotI2lmZGVm
IEJPT1NUX01PVkVfSVNfRU1QVFkKLSAgICNkZWZpbmUgQk9PU1RfTU9WRV9JU19FTVBUWV9JTVBM
KFQpIEJPT1NUX01PVkVfSVNfRU1QVFkoVCkKLSNlbHNlCi0gICAjZGVmaW5lIEJPT1NUX01PVkVf
SVNfRU1QVFlfSU1QTChUKSAgICA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6aXNfZW1wdHlfbm9uaW50
cmluc2ljPFQ+Ojp2YWx1ZQotI2VuZGlmCi0KLSNpZmRlZiBCT09TVF9NT1ZFX0hBU19UUklWSUFM
X0NPUFkKLSAgICNkZWZpbmUgQk9PU1RfTU9WRV9JU19UUklWSUFMTFlfQ09QWV9DT05TVFJVQ1RJ
QkxFKFQpICAgOjpib29zdDo6bW92ZV9kZXRhaWw6OmlzX3BvZDxUPjo6dmFsdWUgfHxcCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDo6
Ym9vc3Q6Om1vdmVfZGV0YWlsOjppc19jb3B5X2NvbnN0cnVjdGlibGU8VD46OnZhbHVlICYmXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCT09TVF9NT1ZFX0hBU19UUklWSUFMX0NPUFkoVCkpCi0jZWxzZQotICAgI2RlZmluZSBCT09T
VF9NT1ZFX0lTX1RSSVZJQUxMWV9DT1BZX0NPTlNUUlVDVElCTEUoVCkgICA6OmJvb3N0Ojptb3Zl
X2RldGFpbDo6aXNfcG9kPFQ+Ojp2YWx1ZQotI2VuZGlmCi0KLSNpZmRlZiBCT09TVF9NT1ZFX0hB
U19UUklWSUFMX0NPTlNUUlVDVE9SCi0gICAjZGVmaW5lIEJPT1NUX01PVkVfSVNfVFJJVklBTExZ
X0RFRkFVTFRfQ09OU1RSVUNUSUJMRShUKSAgQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9DT05TVFJV
Q1RPUihUKQotI2Vsc2UKLSAgICNkZWZpbmUgQk9PU1RfTU9WRV9JU19UUklWSUFMTFlfREVGQVVM
VF9DT05TVFJVQ1RJQkxFKFQpICA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6aXNfcG9kPFQ+Ojp2YWx1
ZQotI2VuZGlmCi0KLSNpZmRlZiBCT09TVF9NT1ZFX0hBU19UUklWSUFMX01PVkVfQ09OU1RSVUNU
T1IKLSAgICNkZWZpbmUgQk9PU1RfTU9WRV9JU19UUklWSUFMTFlfTU9WRV9DT05TVFJVQ1RJQkxF
KFQpICAgQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9NT1ZFX0NPTlNUUlVDVE9SKFQpCi0jZWxzZQot
ICAgI2RlZmluZSBCT09TVF9NT1ZFX0lTX1RSSVZJQUxMWV9NT1ZFX0NPTlNUUlVDVElCTEUoVCkg
ICA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6aXNfcG9kPFQ+Ojp2YWx1ZQotI2VuZGlmCi0KLSNpZmRl
ZiBCT09TVF9NT1ZFX0hBU19UUklWSUFMX0FTU0lHTgotICAgI2RlZmluZSBCT09TVF9NT1ZFX0lT
X1RSSVZJQUxMWV9DT1BZX0FTU0lHTkFCTEUoVCkgOjpib29zdDo6bW92ZV9kZXRhaWw6OmlzX3Bv
ZDxUPjo6dmFsdWUgfHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoIDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjppc19jb3B5X2Fzc2lnbmFibGU8
VD46OnZhbHVlICYmXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9BU1NJR04oVCkpCi0jZWxzZQot
ICAgI2RlZmluZSBCT09TVF9NT1ZFX0lTX1RSSVZJQUxMWV9DT1BZX0FTU0lHTkFCTEUoVCkgOjpi
b29zdDo6bW92ZV9kZXRhaWw6OmlzX3BvZDxUPjo6dmFsdWUKLSNlbmRpZgotCi0jaWZkZWYgQk9P
U1RfTU9WRV9IQVNfVFJJVklBTF9NT1ZFX0FTU0lHTgotICAgI2RlZmluZSBCT09TVF9NT1ZFX0lT
X1RSSVZJQUxMWV9NT1ZFX0FTU0lHTkFCTEUoVCkgIEJPT1NUX01PVkVfSEFTX1RSSVZJQUxfTU9W
RV9BU1NJR04oVCkKLSNlbHNlCi0gICAjZGVmaW5lIEJPT1NUX01PVkVfSVNfVFJJVklBTExZX01P
VkVfQVNTSUdOQUJMRShUKSAgOjpib29zdDo6bW92ZV9kZXRhaWw6OmlzX3BvZDxUPjo6dmFsdWUK
LSNlbmRpZgotCi0jaWZkZWYgQk9PU1RfTU9WRV9IQVNfVFJJVklBTF9ERVNUUlVDVE9SCi0gICAj
ZGVmaW5lIEJPT1NUX01PVkVfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShUKSAgIEJPT1NUX01P
VkVfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihUKQotI2Vsc2UKLSAgICNkZWZpbmUgQk9PU1RfTU9W
RV9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKFQpICAgOjpib29zdDo6bW92ZV9kZXRhaWw6Omlz
X3BvZDxUPjo6dmFsdWUKLSNlbmRpZgotCi0jaWZkZWYgQk9PU1RfTU9WRV9IQVNfTk9USFJPV19D
T05TVFJVQ1RPUgotICAgI2RlZmluZSBCT09TVF9NT1ZFX0lTX05PVEhST1dfREVGQVVMVF9DT05T
VFJVQ1RJQkxFKFQpICBCT09TVF9NT1ZFX0hBU19OT1RIUk9XX0NPTlNUUlVDVE9SKFQpCi0jZWxz
ZQotICAgI2RlZmluZSBCT09TVF9NT1ZFX0lTX05PVEhST1dfREVGQVVMVF9DT05TVFJVQ1RJQkxF
KFQpICA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6aXNfcG9kPFQ+Ojp2YWx1ZQotI2VuZGlmCi0KLSNp
ZmRlZiBCT09TVF9NT1ZFX0hBU19OT1RIUk9XX0NPUFkKLSAgICNkZWZpbmUgQk9PU1RfTU9WRV9J
U19OT1RIUk9XX0NPUFlfQ09OU1RSVUNUSUJMRShUKSAgIEJPT1NUX01PVkVfSEFTX05PVEhST1df
Q09QWShUKQotI2Vsc2UKLSAgICNkZWZpbmUgQk9PU1RfTU9WRV9JU19OT1RIUk9XX0NPUFlfQ09O
U1RSVUNUSUJMRShUKSAgIDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjppc19wb2Q8VD46OnZhbHVlCi0j
ZW5kaWYKLQotI2lmZGVmIEJPT1NUX01PVkVfSEFTX05PVEhST1dfTU9WRQotICAgI2RlZmluZSBC
T09TVF9NT1ZFX0lTX05PVEhST1dfTU9WRV9DT05TVFJVQ1RJQkxFKFQpICAgQk9PU1RfTU9WRV9I
QVNfTk9USFJPV19NT1ZFKFQpCi0jZWxzZQotICAgI2RlZmluZSBCT09TVF9NT1ZFX0lTX05PVEhS
T1dfTU9WRV9DT05TVFJVQ1RJQkxFKFQpICAgOjpib29zdDo6bW92ZV9kZXRhaWw6OmlzX3BvZDxU
Pjo6dmFsdWUKLSNlbmRpZgotCi0jaWZkZWYgQk9PU1RfTU9WRV9IQVNfTk9USFJPV19BU1NJR04K
LSAgICNkZWZpbmUgQk9PU1RfTU9WRV9JU19OT1RIUk9XX0NPUFlfQVNTSUdOQUJMRShUKSBCT09T
VF9NT1ZFX0hBU19OT1RIUk9XX0FTU0lHTihUKQotI2Vsc2UKLSAgICNkZWZpbmUgQk9PU1RfTU9W
RV9JU19OT1RIUk9XX0NPUFlfQVNTSUdOQUJMRShUKSA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6aXNf
cG9kPFQ+Ojp2YWx1ZQotI2VuZGlmCi0KLSNpZmRlZiBCT09TVF9NT1ZFX0hBU19OT1RIUk9XX01P
VkVfQVNTSUdOCi0gICAjZGVmaW5lIEJPT1NUX01PVkVfSVNfTk9USFJPV19NT1ZFX0FTU0lHTkFC
TEUoVCkgQk9PU1RfTU9WRV9IQVNfTk9USFJPV19NT1ZFX0FTU0lHTihUKQotI2Vsc2UKLSAgICNk
ZWZpbmUgQk9PU1RfTU9WRV9JU19OT1RIUk9XX01PVkVfQVNTSUdOQUJMRShUKSA6OmJvb3N0Ojpt
b3ZlX2RldGFpbDo6aXNfcG9kPFQ+Ojp2YWx1ZQotI2VuZGlmCi0KLSNpZmRlZiBCT09TVF9NT1ZF
X0lTX0VOVU0KLSAgICNkZWZpbmUgQk9PU1RfTU9WRV9JU19FTlVNX0lNUEwoVCkgICBCT09TVF9N
T1ZFX0lTX0VOVU0oVCkKLSNlbHNlCi0gICAjZGVmaW5lIEJPT1NUX01PVkVfSVNfRU5VTV9JTVBM
KFQpICAgOjpib29zdDo6bW92ZV9kZXRhaWw6OmlzX2VudW1fbm9uaW50cmluc2ljPFQ+Ojp2YWx1
ZQotI2VuZGlmCi0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgbW92ZV9kZXRhaWwgewot
Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgaXNfcmVmZXJlbmNlCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBpc19yZWZlcmVu
Y2UKLXsgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7IH07Ci0KLXRlbXBsYXRlPGNs
YXNzIFQ+Ci1zdHJ1Y3QgaXNfcmVmZXJlbmNlPFQmPgoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFs
dWUgPSB0cnVlOyB9OwotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVS
RU5DRVMpCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IGlzX3JlZmVyZW5jZTxUJiY+Ci17ICBz
dGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Ci0jZW5kaWYKLQotLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vICAgIGlzX3BvaW50ZXIKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IGlzX3BvaW50ZXIKLXsgIHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gZmFsc2U7IH07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNf
cG9pbnRlcjxUKj4KLXsgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKLQotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICAgIGlzX2NvbnN0Ci0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBpc19jb25zdAoteyAgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsgfTsKLQotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0
cnVjdCBpc19jb25zdDxjb25zdCBUPgoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl
OyB9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgdW52b2lkX3JlZgot
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
dW52b2lkX3JlZiA6IGFkZF9sdmFsdWVfcmVmZXJlbmNlPFQ+e307Ci10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgdW52b2lkX3JlZjx2b2lkPiAgICAgICAgICAgICAgICB7IHR5cGVkZWYgdW52b2lkX3JlZiAm
IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgdW52b2lkX3JlZjxjb25zdCB2b2lkPiAgICAg
ICAgICB7IHR5cGVkZWYgdW52b2lkX3JlZiAmIHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
dW52b2lkX3JlZjx2b2xhdGlsZSB2b2lkPiAgICAgICB7IHR5cGVkZWYgdW52b2lkX3JlZiAmIHR5
cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgdW52b2lkX3JlZjxjb25zdCB2b2xhdGlsZSB2b2lk
PiB7IHR5cGVkZWYgdW52b2lkX3JlZiAmIHR5cGU7IH07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
Pgotc3RydWN0IGFkZF9yZWZlcmVuY2UgOiBhZGRfbHZhbHVlX3JlZmVyZW5jZTxUPgote307Ci0K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICBhZGRfY29uc3RfcmVmZXJlbmNlCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgYWRk
X2NvbnN0X3JlZmVyZW5jZQoteyAgdHlwZWRlZiBjb25zdCBUICZ0eXBlOyAgIH07Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUPgotc3RydWN0IGFkZF9jb25zdF9yZWZlcmVuY2U8VCY+Ci17ICB0eXBlZGVm
IFQmIHR5cGU7ICAgfTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgIGFkZF9j
b25zdF9pZl9jCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Y2xhc3MgVCwg
Ym9vbCBBZGQ+Ci1zdHJ1Y3QgYWRkX2NvbnN0X2lmX2MKLSAgIDogaWZfYzxBZGQsIHR5cGVuYW1l
IGFkZF9jb25zdDxUPjo6dHlwZSwgVD4KLXt9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotLy8gICAgcmVtb3ZlX2NvbnN0Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxh
dGU8Y2xhc3MgVD4KLXN0cnVjdCByZW1vdmVfY29uc3QKLXsgIHR5cGVkZWYgVCB0eXBlOyAgIH07
Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgcmVtb3ZlX2NvbnN0PCBjb25zdCBUPgoteyAg
dHlwZWRlZiBUIHR5cGU7ICAgfTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAg
IHJlbW92ZV9jdgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCByZW1vdmVfY3YgICAgICAgICAgICAgICAgICAgIHsgIHR5cGVkZWYgVCB0eXBl
OyAgIH07Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgcmVtb3ZlX2N2PGNvbnN0IFQ+ICAg
ICAgICAgICB7ICB0eXBlZGVmIFQgdHlwZTsgICB9OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IHJlbW92ZV9jdjxjb25zdCB2b2xhdGlsZSBUPiAgeyAgdHlwZWRlZiBUIHR5cGU7ICAgfTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCByZW1vdmVfY3Y8dm9sYXRpbGUgVD4gICAgICAg
IHsgIHR5cGVkZWYgVCB0eXBlOyAgIH07Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
LyAgICBtYWtlX3Vuc2lnbmVkCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGUg
PGNsYXNzIFQ+Ci1zdHJ1Y3QgbWFrZV91bnNpZ25lZF9pbXBsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7ICB0eXBlZGVmIFQgdHlwZTsgICB9OwotdGVtcGxhdGUgPD4g
c3RydWN0IG1ha2VfdW5zaWduZWRfaW1wbDxzaWduZWQgY2hhcj4gICAgICAgICAgICAgICAgeyAg
dHlwZWRlZiB1bnNpZ25lZCBjaGFyICB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IG1ha2Vf
dW5zaWduZWRfaW1wbDxzaWduZWQgc2hvcnQ+ICAgICAgICAgICAgICAgeyAgdHlwZWRlZiB1bnNp
Z25lZCBzaG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IG1ha2VfdW5zaWduZWRfaW1w
bDxzaWduZWQgaW50PiAgICAgICAgICAgICAgICAgeyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICB0
eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IG1ha2VfdW5zaWduZWRfaW1wbDxzaWduZWQgbG9u
Zz4gICAgICAgICAgICAgICAgeyAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICB0eXBlOyB9OwotI2lm
ZGVmIEJPT1NUX0hBU19MT05HX0xPTkcKLXRlbXBsYXRlIDw+IHN0cnVjdCBtYWtlX3Vuc2lnbmVk
X2ltcGw8IDo6Ym9vc3Q6OmxvbmdfbG9uZ190eXBlID4gIHsgIHR5cGVkZWYgOjpib29zdDo6dWxv
bmdfbG9uZ190eXBlIHR5cGU7IH07Ci0jZW5kaWYKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1
Y3QgbWFrZV91bnNpZ25lZAotICAgOiBtYWtlX3Vuc2lnbmVkX2ltcGw8dHlwZW5hbWUgcmVtb3Zl
X2N2PFQ+Ojp0eXBlPgote307Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICBp
c19mbG9hdGluZ19wb2ludAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXRlbXBsYXRlPGNs
YXNzIFQ+IHN0cnVjdCBpc19mbG9hdGluZ19wb2ludF9jdiAgICAgICAgICAgICAgIHsgIHN0YXRp
YyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7IH07Ci10ZW1wbGF0ZTw+ICAgICAgICBzdHJ1Y3Qg
aXNfZmxvYXRpbmdfcG9pbnRfY3Y8ZmxvYXQ+ICAgICAgICB7ICBzdGF0aWMgY29uc3QgYm9vbCB2
YWx1ZSA9IHRydWU7IH07Ci10ZW1wbGF0ZTw+ICAgICAgICBzdHJ1Y3QgaXNfZmxvYXRpbmdfcG9p
bnRfY3Y8ZG91YmxlPiAgICAgICB7ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07
Ci10ZW1wbGF0ZTw+ICAgICAgICBzdHJ1Y3QgaXNfZmxvYXRpbmdfcG9pbnRfY3Y8bG9uZyBkb3Vi
bGU+ICB7ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Ci0KLXRlbXBsYXRlPGNs
YXNzIFQ+Ci1zdHJ1Y3QgaXNfZmxvYXRpbmdfcG9pbnQKLSAgIDogaXNfZmxvYXRpbmdfcG9pbnRf
Y3Y8dHlwZW5hbWUgcmVtb3ZlX2N2PFQ+Ojp0eXBlPgote307Ci0KLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0vLyAgICBpc19pbnRlZ3JhbAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LXRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBpc19pbnRlZ3JhbF9jdiAgICAgICAgICAgICAgICAg
ICAgeyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsgfTsKLXRlbXBsYXRlPD4gc3Ry
dWN0IGlzX2ludGVncmFsX2N2PCAgICAgICAgICAgICAgICAgICAgIGJvb2w+eyAgc3RhdGljIGNv
bnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWxf
Y3Y8ICAgICAgICAgICAgICAgICAgICAgY2hhcj57ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9
IHRydWU7IH07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbF9jdjwgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyPnsgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKLXRlbXBs
YXRlPD4gc3RydWN0IGlzX2ludGVncmFsX2N2PCAgICAgICAgICAgICAgc2lnbmVkIGNoYXI+eyAg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwotI2lmbmRlZiBCT09TVF9OT19DWFgx
MV9DSEFSMTZfVAotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWxfY3Y8ICAgICAgICAgICAg
ICAgICBjaGFyMTZfdD57ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Ci0jZW5k
aWYKLSNpZm5kZWYgQk9PU1RfTk9fQ1hYMTFfQ0hBUjMyX1QKLXRlbXBsYXRlPD4gc3RydWN0IGlz
X2ludGVncmFsX2N2PCAgICAgICAgICAgICAgICAgY2hhcjMyX3Q+eyAgc3RhdGljIGNvbnN0IGJv
b2wgdmFsdWUgPSB0cnVlOyB9OwotI2VuZGlmCi0jaWZuZGVmIEJPT1NUX05PX0lOVFJJTlNJQ19X
Q0hBUl9UCi10ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbF9jdjwgICAgICAgICAgICAgICAg
ICB3Y2hhcl90PnsgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKLSNlbmRpZgot
dGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWxfY3Y8ICAgICAgICAgICAgICAgICAgICBzaG9y
dD57ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Ci10ZW1wbGF0ZTw+IHN0cnVj
dCBpc19pbnRlZ3JhbF9jdjwgICAgICAgICAgIHVuc2lnbmVkIHNob3J0PnsgIHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsX2N2
PCAgICAgICAgICAgICAgICAgICAgICBpbnQ+eyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0
cnVlOyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWxfY3Y8ICAgICAgICAgICAgIHVu
c2lnbmVkIGludD57ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Ci10ZW1wbGF0
ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbF9jdjwgICAgICAgICAgICAgICAgICAgICBsb25nPnsgIHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IGlzX2lu
dGVncmFsX2N2PCAgICAgICAgICAgIHVuc2lnbmVkIGxvbmc+eyAgc3RhdGljIGNvbnN0IGJvb2wg
dmFsdWUgPSB0cnVlOyB9OwotI2lmZGVmIEJPT1NUX0hBU19MT05HX0xPTkcKLXRlbXBsYXRlPD4g
c3RydWN0IGlzX2ludGVncmFsX2N2PCA6OmJvb3N0OjogbG9uZ19sb25nX3R5cGU+eyAgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdy
YWxfY3Y8IDo6Ym9vc3Q6OnVsb25nX2xvbmdfdHlwZT57ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1
ZSA9IHRydWU7IH07Ci0jZW5kaWYKLQotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBpc19pbnRl
Z3JhbAotICAgOiBwdWJsaWMgaXNfaW50ZWdyYWxfY3Y8dHlwZW5hbWUgcmVtb3ZlX2N2PFQ+Ojp0
eXBlPgote307Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAg
ICAgICAgICByZW1vdmVfYWxsX2V4dGVudHMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCByZW1vdmVfYWxsX2V4dGVudHMK
LXsgIHR5cGVkZWYgVCB0eXBlO307Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IHJlbW92
ZV9hbGxfZXh0ZW50czxUW10+Ci17ICB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9hbGxfZXh0ZW50
czxUPjo6dHlwZSB0eXBlOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4K
LXN0cnVjdCByZW1vdmVfYWxsX2V4dGVudHM8VFtOXT4KLXsgIHR5cGVkZWYgdHlwZW5hbWUgcmVt
b3ZlX2FsbF9leHRlbnRzPFQ+Ojp0eXBlIHR5cGU7fTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLS8vICAgIGlzX3NjYWxhcgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXRlbXBs
YXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfc2NhbGFyCi17ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1
ZSA9IGlzX2ludGVncmFsPFQ+Ojp2YWx1ZSB8fCBpc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWU7
IH07Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICAgICBpc192b2lkCi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBpc192b2lk
X2N2Ci17ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOyB9OwotCi10ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgaXNfdm9pZF9jdjx2b2lkPgoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0
cnVlOyB9OwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IGlzX3ZvaWQKLSAgIDogaXNfdm9p
ZF9jdjx0eXBlbmFtZSByZW1vdmVfY3Y8VD46OnR5cGU+Ci17fTsKLQotLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICAgICAgIGlzX2FycmF5Ci0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBp
c19hcnJheQoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsgfTsKLQotdGVtcGxh
dGU8Y2xhc3MgVD4KLXN0cnVjdCBpc19hcnJheTxUW10+Ci17ICBzdGF0aWMgY29uc3QgYm9vbCB2
YWx1ZSA9IHRydWU7ICB9OwotCi10ZW1wbGF0ZTxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPgotc3Ry
dWN0IGlzX2FycmF5PFRbTl0+Ci17ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7ICB9
OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgICAg
IGlzX21lbWJlcl9wb2ludGVyCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotdGVtcGxhdGUgPGNsYXNzIFQ+ICAgICAgICAgc3RydWN0IGlzX21lbWJlcl9wb2ludGVyX2N2
ICAgICAgICAgeyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsgfTsKLXRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBVPnN0cnVjdCBpc19tZW1iZXJfcG9pbnRlcl9jdjxUIFU6Oio+IHsg
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+
Ci1zdHJ1Y3QgaXNfbWVtYmVyX3BvaW50ZXIKLSAgICA6IGlzX21lbWJlcl9wb2ludGVyX2N2PHR5
cGVuYW1lIHJlbW92ZV9jdjxUPjo6dHlwZT4KLXt9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgICAgaXNfbnVsbHB0cl90Ci0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNf
bnVsbHB0cl90X2N2Ci17ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOyB9OwotCi0j
aWYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfTlVMTFBUUikKLXRlbXBsYXRlIDw+Ci1zdHJ1Y3Qg
aXNfbnVsbHB0cl90X2N2Ci0gICAjaWYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfREVDTFRZUEUp
Ci0gICA8ZGVjbHR5cGUobnVsbHB0cik+Ci0gICAjZWxzZQotICAgPHN0ZDo6bnVsbHB0cl90Pgot
ICAgI2VuZGlmCi17ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Ci0jZW5kaWYK
LQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfbnVsbHB0cl90Ci0gICA6IGlzX251bGxw
dHJfdF9jdjx0eXBlbmFtZSByZW1vdmVfY3Y8VD46OnR5cGU+Ci17fTsKLQotLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICAgICAgIGlzX2Z1bmN0aW9uCi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy9JbnNwaXJlZCBieSBsaWJjKyss
IHRoYW5rcyB0byBIb3dhcmQgSGlubmFudAotLy9Gb3IgYSBmdW5jdGlvbiB0byBwb2ludGVyIGFu
IGx2YWx1ZSBvZiBmdW5jdGlvbiB0eXBlIFQgY2FuIGJlIGltcGxpY2l0bHkgY29udmVydGVkIHRv
IGEgcHJ2YWx1ZQotLy9wb2ludGVyIHRvIHRoYXQgZnVuY3Rpb24uIFRoaXMgZG9lcyBub3QgYXBw
bHkgdG8gbm9uLXN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIGJlY2F1c2UgbHZhbHVlcwotLy90aGF0
IHJlZmVyIHRvIG5vbi1zdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyBkbyBub3QgZXhpc3QuCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19yZWZlcmVuY2VfY29udmVydGlibGVfdG9fcG9pbnRl
cgotewotICAgc3RydWN0IHR3b2NoYXIgeyBjaGFyIGR1bW15WzJdOyB9OwotICAgdGVtcGxhdGUg
PGNsYXNzIFU+IHN0YXRpYyBjaGFyICAgIHRlc3QoVSopOwotICAgdGVtcGxhdGUgPGNsYXNzIFU+
IHN0YXRpYyB0d29jaGFyIHRlc3QoLi4uKTsKLSAgIHN0YXRpYyBUJiBzb3VyY2UoKTsKLSAgIHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKGNoYXIpID09IHNpemVvZih0ZXN0PFQ+KHNv
dXJjZSgpKSk7Ci19OwotLy9GaWx0ZXIgb3V0OgotLy8gLSBjbGFzcyB0eXBlcyB0aGF0IG1pZ2h0
IGhhdmUgaW1wbGljaXQgY29udmVyc2lvbnMKLS8vIC0gdm9pZCAodG8gYXZvaWQgZm9ybWluZyBh
IHJlZmVyZW5jZSB0byB2b2lkIGxhdGVyKQotLy8gLSByZWZlcmVuY2VzIChlLmcuOiBmaWx0ZXJp
bmcgcmVmZXJlbmNlIHRvIGZ1bmN0aW9ucykKLS8vIC0gbnVsbHB0cl90IChjb252ZXJ0aWJsZSB0
byBwb2ludGVyKQotdGVtcGxhdGUgPCBjbGFzcyBUCi0gICAgICAgICAsIGJvb2wgRmlsdGVyID0g
aXNfY2xhc3Nfb3JfdW5pb248VD46OnZhbHVlICB8fAotICAgICAgICAgICAgICAgICAgICAgICAg
IGlzX3ZvaWQ8VD46OnZhbHVlICAgICAgICAgICAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBpc19yZWZlcmVuY2U8VD46OnZhbHVlICAgICAgIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgaXNfbnVsbHB0cl90PFQ+Ojp2YWx1ZSAgICAgICA+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25faW1w
bAoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBpc19yZWZlcmVuY2VfY29udmVydGlibGVf
dG9fcG9pbnRlcjxUPjo6dmFsdWU7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlz
X2Z1bmN0aW9uX2ltcGw8VCwgdHJ1ZT4KLXsgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFs
c2U7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX2Z1bmN0aW9uCi0gICA6IGlz
X2Z1bmN0aW9uX2ltcGw8VD4KLXt9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotLy8gICAgICAgaXNfdW5pb24KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IGlzX3VuaW9uX25vZXh0ZW50c19j
dgoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBCT09TVF9NT1ZFX0lTX1VOSU9OX0lNUEwo
VCk7IH07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfdW5pb24KLSAgIDogaXNfdW5p
b25fbm9leHRlbnRzX2N2PHR5cGVuYW1lIHJlbW92ZV9jdjx0eXBlbmFtZSByZW1vdmVfYWxsX2V4
dGVudHM8VD46OnR5cGU+Ojp0eXBlPgote307Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0vLyAgICAgICAgICAgICBpc19jbGFzcwotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX2NsYXNz
Ci17Ci0gICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGlzX2NsYXNzX29yX3VuaW9uPFQ+Ojp2
YWx1ZSAmJiAhIGlzX3VuaW9uPFQ+Ojp2YWx1ZTsKLX07Ci0KLQotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICAgICAgICAgIGlzX2FyaXRobWV0aWMKLS8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0
cnVjdCBpc19hcml0aG1ldGljCi17Ci0gICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGlzX2Zs
b2F0aW5nX3BvaW50PFQ+Ojp2YWx1ZSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
c19pbnRlZ3JhbDxUPjo6dmFsdWU7Ci19OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotLy8gICAgaXNfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXIKLS8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBp
c19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlcl9jdgotewotICAgc3RhdGljIGNvbnN0IGJvb2wgdmFs
dWUgPSBmYWxzZTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBDPgotc3RydWN0IGlz
X21lbWJlcl9mdW5jdGlvbl9wb2ludGVyX2N2PFQgQzo6Kj4KLSAgIDogaXNfZnVuY3Rpb248VD4K
LXt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19tZW1iZXJfZnVuY3Rpb25fcG9p
bnRlcgotICAgIDogaXNfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXJfY3Y8dHlwZW5hbWUgcmVtb3Zl
X2N2PFQ+Ojp0eXBlPgote307Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0vLyAgICAgICAgICAgICBpc19lbnVtCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotI2lmICFkZWZpbmVkKEJPT1NUX01PVkVfSVNfRU5VTSkKLS8vQmFzZWQgb24g
KGh0dHA6Ly9ob3dhcmRoaW5uYW50LmdpdGh1Yi5pby9UeXBlSGllYXJjaHkucGRmKQotdGVtcGxh
dGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfZW51bV9ub25pbnRyaW5zaWMKLXsKLSAgIHN0YXRpYyBj
b25zdCBib29sIHZhbHVlID0gICFpc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSAgICAgJiYKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICFpc19yZWZlcmVuY2U8VD46OnZhbHVlICAgICAgJiYK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc19jbGFzc19vcl91bmlvbjxUPjo6dmFs
dWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc19hcnJheTxUPjo6dmFsdWUg
ICAgICAgICAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc192b2lkPFQ+Ojp2
YWx1ZSAgICAgICAgICAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc19udWxs
cHRyX3Q8VD46OnZhbHVlICAgICAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFp
c19tZW1iZXJfcG9pbnRlcjxUPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICFpc19wb2ludGVyPFQ+Ojp2YWx1ZSAgICAgICAgJiYKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICFpc19mdW5jdGlvbjxUPjo6dmFsdWU7Ci19OwotI2VuZGlmCi0KLXRlbXBsYXRl
IDxjbGFzcyBUPgotc3RydWN0IGlzX2VudW0KLXsgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g
Qk9PU1RfTU9WRV9JU19FTlVNX0lNUEwoVCk7ICB9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgaXNfcG9kCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBpc19wb2Rfbm9leHRl
bnRzX2N2ICAvL2ZvciBub24tYysrMTEgY29tcGlsZXJzLCBhIHNhZmUgZmFsbGJhY2sKLXsgIHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gQk9PU1RfTU9WRV9JU19QT0RfSU1QTChUKTsgfTsKLQot
dGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBpc19wb2QKLSAgIDogaXNfcG9kX25vZXh0ZW50c19j
djx0eXBlbmFtZSByZW1vdmVfY3Y8dHlwZW5hbWUgcmVtb3ZlX2FsbF9leHRlbnRzPFQ+Ojp0eXBl
Pjo6dHlwZT4KLXt9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ly8gICAgICAgICAgICAgaXNfZW1wdHkKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCi0jaWYgIWRlZmluZWQoQk9PU1RfTU9WRV9JU19FTVBUWSkKLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci1zdHJ1Y3QgZW1wdHlfaGVscGVyX3QxIDogcHVibGljIFQKLXsKLSAgIGVtcHR5
X2hlbHBlcl90MSgpOyAgLy8gaGggY29tcGlsZXIgYnVnIHdvcmthcm91bmQKLSAgIGludCBpWzI1
Nl07Ci0gICBwcml2YXRlOgotCi0gICBlbXB0eV9oZWxwZXJfdDEoY29uc3QgZW1wdHlfaGVscGVy
X3QxJik7Ci0gICBlbXB0eV9oZWxwZXJfdDEmIG9wZXJhdG9yPShjb25zdCBlbXB0eV9oZWxwZXJf
dDEmKTsKLX07Ci0KLXN0cnVjdCBlbXB0eV9oZWxwZXJfdDIgeyBpbnQgaVsyNTZdOyB9OwotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbCBJc0NsYXNzID0gaXNfY2xhc3M8VD46OnZhbHVlID4K
LXN0cnVjdCBpc19lbXB0eV9ub25pbnRyaW5zaWMKLXsKLSAgIHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gZmFsc2U7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBpc19lbXB0
eV9ub25pbnRyaW5zaWM8VCwgdHJ1ZT4KLXsKLSAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g
c2l6ZW9mKGVtcHR5X2hlbHBlcl90MTxUPikgPT0gc2l6ZW9mKGVtcHR5X2hlbHBlcl90Mik7Ci19
OwotI2VuZGlmCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX2VtcHR5Ci17ICBzdGF0
aWMgY29uc3QgYm9vbCB2YWx1ZSA9IEJPT1NUX01PVkVfSVNfRU1QVFlfSU1QTChUKTsgIH07Ci0K
LQotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBoYXNfYm9vc3RfbW92ZV9ub19jb3B5X2NvbnN0
cnVjdG9yX29yX2Fzc2lnbl90eXBlCi17Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVT4KLSAgIHN0YXRp
YyB5ZXNfdHlwZSB0ZXN0KHR5cGVuYW1lIFU6OmJvb3N0X21vdmVfbm9fY29weV9jb25zdHJ1Y3Rv
cl9vcl9hc3NpZ24qKTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFU+Ci0gICBzdGF0aWMgbm9fdHlw
ZSB0ZXN0KC4uLik7Ci0KLSAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKHRlc3Q8
VD4oMCkpID09IHNpemVvZih5ZXNfdHlwZSk7Ci19OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgaXNfY29weV9jb25zdHJ1Y3RpYmxlCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NY
WDExX0RFTEVURURfRlVOQ1RJT05TKSAmJiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9ERUNMVFlQ
RSkgXAotICAgJiYgIWRlZmluZWQoQk9PU1RfSU5URUxfQ1hYX1ZFUlNJT04pICYmIFwKLSAgICAg
ICEoZGVmaW5lZChCT09TVF9NU1ZDKSAmJiBfTVNDX1ZFUiA9PSAxODAwKQotI2RlZmluZSBCT09T
VF9NT1ZFX1RUX0NYWDExX0lTX0NPUFlfQ09OU1RSVUNUSUJMRQotI2VuZGlmCi0KLXRlbXBsYXRl
PGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfY29weV9jb25zdHJ1Y3RpYmxlCi17Ci0gICAvLyBJbnRlbCBj
b21waWxlciBoYXMgcHJvYmxlbXMgd2l0aCBTRklOQUUgZm9yIGNvcHkgY29uc3RydWN0b3JzIGFu
ZCBkZWxldGVkIGZ1bmN0aW9uczoKLSAgIC8vCi0gICAvLyBlcnJvcjogZnVuY3Rpb24gKmZ1bmN0
aW9uX25hbWUqIGNhbm5vdCBiZSByZWZlcmVuY2VkIC0tIGl0IGlzIGEgZGVsZXRlZCBmdW5jdGlv
bgotICAgLy8gc3RhdGljIHllc190eXBlIHRlc3QoVSYsIGRlY2x0eXBlKFUoYm9vc3Q6OmRlY2x2
YWw8VSY+KCkpKSogPSAwKTsKLSAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBeIAotICAgLy8gTVNWQyAxMi4wIChWaXN1YWwgMjAxMykg
aGFzIHByb2JsZW1zIHdoZW4gdGhlIGNvcHkgY29uc3RydWN0b3IgaGFzIGJlZW4gZGVsZXRlZC4g
U2VlOgotICAgLy8gaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vVmlzdWFsU3R1ZGlvL2Zl
ZWRiYWNrL2RldGFpbHMvODAwMzI4L3N0ZC1pcy1jb3B5LWNvbnN0cnVjdGlibGUtaXMtYnJva2Vu
Ci0gICAjaWYgZGVmaW5lZChCT09TVF9NT1ZFX1RUX0NYWDExX0lTX0NPUFlfQ09OU1RSVUNUSUJM
RSkKLSAgICAgIHRlbXBsYXRlPGNsYXNzIFU+IHN0YXRpYyB0eXBlbmFtZSBhZGRfcmVmZXJlbmNl
PFU+Ojp0eXBlIHNvdXJjZSgpOwotICAgICAgc3RhdGljIG5vX3R5cGUgdGVzdCguLi4pOwotICAg
ICAgI2lmZGVmIEJPT1NUX05PX0NYWDExX0RFQ0xUWVBFCi0gICAgICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVT4KLSAgICAgICAgIHN0YXRpYyB5ZXNfdHlwZSB0ZXN0KFUmLCBib29sXzxzaXplb2YoVShz
b3VyY2U8VT4oKSkpPiogPSAwKTsKLSAgICAgICNlbHNlCi0gICAgICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVT4KLSAgICAgICAgIHN0YXRpYyB5ZXNfdHlwZSB0ZXN0KFUmLCBkZWNsdHlwZShVKHNvdXJj
ZTxVPigpKSkqID0gMCk7Ci0gICAgICAjZW5kaWYKLSAgICAgIHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gc2l6ZW9mKHRlc3Qoc291cmNlPFQ+KCkpKSA9PSBzaXplb2YoeWVzX3R5cGUpOwotICAg
I2Vsc2UKLSAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gIWhhc19ib29zdF9tb3ZlX25vX2Nv
cHlfY29uc3RydWN0b3Jfb3JfYXNzaWduX3R5cGU8VD46OnZhbHVlOwotICAgI2VuZGlmCi19Owot
Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICAgICBpc19j
b3B5X2Fzc2lnbmFibGUKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0j
aWYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfREVMRVRFRF9GVU5DVElPTlMpICYmICFkZWZpbmVk
KEJPT1NUX05PX0NYWDExX0RFQ0xUWVBFKSBcCi0gICAmJiAhZGVmaW5lZChCT09TVF9JTlRFTF9D
WFhfVkVSU0lPTikgJiYgXAotICAgICAgIShkZWZpbmVkKEJPT1NUX01TVkMpICYmIF9NU0NfVkVS
ID09IDE4MDApCi0jZGVmaW5lIEJPT1NUX01PVkVfVFRfQ1hYMTFfSVNfQ09QWV9BU1NJR05BQkxF
Ci0jZW5kaWYKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfY29weV9hc3NpZ25hYmxl
Ci17Ci0vLyBJbnRlbCBjb21waWxlciBoYXMgcHJvYmxlbXMgd2l0aCBTRklOQUUgZm9yIGNvcHkg
Y29uc3RydWN0b3JzIGFuZCBkZWxldGVkIGZ1bmN0aW9uczoKLS8vCi0vLyBlcnJvcjogZnVuY3Rp
b24gKmZ1bmN0aW9uX25hbWUqIGNhbm5vdCBiZSByZWZlcmVuY2VkIC0tIGl0IGlzIGEgZGVsZXRl
ZCBmdW5jdGlvbgotLy8gc3RhdGljIGJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUgdGVzdChU
MSYsIGRlY2x0eXBlKFQxKGJvb3N0OjpkZWNsdmFsPFQxJj4oKSkpKiA9IDApOwotLy8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gCi0vLwot
Ly8gTVNWQyAxMi4wIChWaXN1YWwgMjAxMykgaGFzIHByb2JsZW1zIHdoZW4gdGhlIGNvcHkgY29u
c3RydWN0b3IgaGFzIGJlZW4gZGVsZXRlZC4gU2VlOgotLy8gaHR0cHM6Ly9jb25uZWN0Lm1pY3Jv
c29mdC5jb20vVmlzdWFsU3R1ZGlvL2ZlZWRiYWNrL2RldGFpbHMvODAwMzI4L3N0ZC1pcy1jb3B5
LWNvbnN0cnVjdGlibGUtaXMtYnJva2VuCi0jaWYgZGVmaW5lZChCT09TVF9NT1ZFX1RUX0NYWDEx
X0lTX0NPUFlfQVNTSUdOQUJMRSkKLSAgIHR5cGVkZWYgY2hhciB5ZXNfdHlwZTsKLSAgIHN0cnVj
dCBub190eXBlIHsgY2hhciBkdW1teVsyXTsgfTsKLSAgIAotICAgdGVtcGxhdGUgPGNsYXNzIFU+
ICAgc3RhdGljIHR5cGVuYW1lIGFkZF9yZWZlcmVuY2U8VT46OnR5cGUgc291cmNlKCk7Ci0gICB0
ZW1wbGF0ZSA8Y2xhc3MgVT4gICBzdGF0aWMgZGVjbHR5cGUoc291cmNlPFUmPigpID0gc291cmNl
PGNvbnN0IFUmPigpLCB5ZXNfdHlwZSgpICkgdGVzdChpbnQpOwotICAgdGVtcGxhdGUgPGNsYXNz
PiAgICAgc3RhdGljIG5vX3R5cGUgdGVzdCguLi4pOwotCi0gICBzdGF0aWMgY29uc3QgYm9vbCB2
YWx1ZSA9IHNpemVvZih0ZXN0PFQ+KDApKSA9PSBzaXplb2YoeWVzX3R5cGUpOwotI2Vsc2UKLSAg
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gIWhhc19ib29zdF9tb3ZlX25vX2NvcHlfY29uc3Ry
dWN0b3Jfb3JfYXNzaWduX3R5cGU8VD46OnZhbHVlOwotI2VuZGlmCi19OwotCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgaXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXRlbXBsYXRl
PGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZQoteyAgc3RhdGljIGNv
bnN0IGJvb2wgdmFsdWUgPSBCT09TVF9NT1ZFX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoVCk7
IH07Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICAgICBp
c190cml2aWFsbHlfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBpc190cml2aWFsbHlf
ZGVmYXVsdF9jb25zdHJ1Y3RpYmxlCi17ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IEJPT1NU
X01PVkVfSVNfVFJJVklBTExZX0RFRkFVTFRfQ09OU1RSVUNUSUJMRShUKTsgfTsKLQotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgICAgIGlzX3RyaXZpYWxseV9j
b3B5X2NvbnN0cnVjdGlibGUKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5X2NvbnN0cnVjdGli
bGUKLXsKLSAgIC8vSW4gc2V2ZXJhbCBjb21waWxlcnMgQk9PU1RfTU9WRV9JU19UUklWSUFMTFlf
Q09QWV9DT05TVFJVQ1RJQkxFIHJldHVybiB0cnVlIGV2ZW4gd2l0aAotICAgLy9kZWxldGVkIGNv
cHkgY29uc3RydWN0b3JzIHNvIG1ha2Ugc3VyZSB0aGUgdHlwZSBpcyBjb3B5IGNvbnN0cnVjdGli
bGUuCi0gICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IEJPT1NUX01PVkVfSVNfVFJJVklBTExZ
X0NPUFlfQ09OU1RSVUNUSUJMRShUKTsKLX07Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0vLyAgICAgICBpc190cml2aWFsbHlfbW92ZV9jb25zdHJ1Y3RpYmxlCi0v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Y2xhc3MgVD4K
LXN0cnVjdCBpc190cml2aWFsbHlfbW92ZV9jb25zdHJ1Y3RpYmxlCi17IHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gQk9PU1RfTU9WRV9JU19UUklWSUFMTFlfTU9WRV9DT05TVFJVQ1RJQkxFKFQp
OyB9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAg
aXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfdHJpdmlhbGx5X2NvcHlf
YXNzaWduYWJsZQotewotICAgLy9JbiBzZXZlcmFsIGNvbXBpbGVycyBCT09TVF9NT1ZFX0lTX1RS
SVZJQUxMWV9DT1BZX0NPTlNUUlVDVElCTEUgcmV0dXJuIHRydWUgZXZlbiB3aXRoCi0gICAvL2Rl
bGV0ZWQgY29weSBjb25zdHJ1Y3RvcnMgc28gbWFrZSBzdXJlIHRoZSB0eXBlIGlzIGNvcHkgY29u
c3RydWN0aWJsZS4KLSAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gQk9PU1RfTU9WRV9JU19U
UklWSUFMTFlfQ09QWV9BU1NJR05BQkxFKFQpOwotfTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAg
aXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfdHJpdmlhbGx5X21vdmVf
YXNzaWduYWJsZQoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBCT09TVF9NT1ZFX0lTX1RS
SVZJQUxMWV9NT1ZFX0FTU0lHTkFCTEUoVCk7ICB9OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgaXNfbm90aHJvd19kZWZhdWx0X2NvbnN0cnVjdGli
bGUKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10ZW1wbGF0ZTxjbGFz
cyBUPgotc3RydWN0IGlzX25vdGhyb3dfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlCi0gICA6IGlzX3Bv
ZDxUPgoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBCT09TVF9NT1ZFX0lTX05PVEhST1df
REVGQVVMVF9DT05TVFJVQ1RJQkxFKFQpOyAgfTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLS8vICAgIGlzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlCi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0
cnVjdCBpc19ub3Rocm93X2NvcHlfY29uc3RydWN0aWJsZQoteyAgc3RhdGljIGNvbnN0IGJvb2wg
dmFsdWUgPSBCT09TVF9NT1ZFX0lTX05PVEhST1dfQ09QWV9DT05TVFJVQ1RJQkxFKFQpOyAgfTsK
LQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgIGlzX25vdGhy
b3dfbW92ZV9jb25zdHJ1Y3RpYmxlCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBpc19ub3Rocm93X21vdmVfY29uc3RydWN0
aWJsZQoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBCT09TVF9NT1ZFX0lTX05PVEhST1df
TU9WRV9DT05TVFJVQ1RJQkxFKFQpOyAgfTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLS8vICAgICAgIGlzX25vdGhyb3dfY29weV9hc3NpZ25hYmxlCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVj
dCBpc19ub3Rocm93X2NvcHlfYXNzaWduYWJsZQoteyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg
PSBCT09TVF9NT1ZFX0lTX05PVEhST1dfQ09QWV9BU1NJR05BQkxFKFQpOyAgfTsKLQotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAgIGlzX25vdGhyb3dfbW92ZV9h
c3NpZ25hYmxlCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdGVtcGxh
dGU8Y2xhc3MgVD4KLXN0cnVjdCBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZQoteyAgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSBCT09TVF9NT1ZFX0lTX05PVEhST1dfTU9WRV9BU1NJR05BQkxF
KFQpOyAgfTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vICAg
IGlzX25vdGhyb3dfc3dhcHBhYmxlCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotdGVtcGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBpc19ub3Rocm93X3N3YXBwYWJsZQotewot
ICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBpc19lbXB0eTxUPjo6dmFsdWUgfHwgaXNfcG9k
PFQ+Ojp2YWx1ZTsKLX07Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0vLyAgICAgICBhbGlnbm1lbnRfb2YKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBhbGlnbm1lbnRfb2ZfaGFjawot
ewotICAgVCB0MTsKLSAgIGNoYXIgYzsKLSAgIFQgdDI7Ci0gICBhbGlnbm1lbnRfb2ZfaGFjaygp
OwotfTsKLQotdGVtcGxhdGUgPHVuc2lnbmVkIEEsIHVuc2lnbmVkIFM+Ci1zdHJ1Y3QgYWxpZ25t
ZW50X2xvZ2ljCi17ICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgdmFsdWUgPSBBIDwgUyA/IEEg
OiBTOyB9OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+Ci1zdHJ1Y3QgYWxpZ25tZW50X29mX2lt
cGwKLSNpZiBkZWZpbmVkKEJPT1NUX01TVkMpICYmIChCT09TVF9NU1ZDID49IDE0MDApCi0gICAg
Ly8gV2l0aCBNU1ZDIGJvdGggdGhlIG5hdGl2ZSBfX2FsaWdub2Ygb3BlcmF0b3IKLSAgICAvLyBh
bmQgb3VyIG93biBsb2dpYyBnZXRzIHRoaW5ncyB3cm9uZyBmcm9tIHRpbWUgdG8gdGltZSA6LSgK
LSAgICAvLyBVc2luZyBhIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gc2VlbXMgdG8gbWFrZSB0aGUg
bW9zdCBvZiBhIGJhZCBqb2I6Ci0gICA6IGFsaWdubWVudF9sb2dpYzwgc2l6ZW9mKGFsaWdubWVu
dF9vZl9oYWNrPFQ+KSAtIDIqc2l6ZW9mKFQpLCBfX2FsaWdub2YoVCk+Ci17fTsKLSNlbGlmICFk
ZWZpbmVkKEJPT1NUX01PVkVfQUxJR05NRU5UX09GKQotICAgOiBhbGlnbm1lbnRfbG9naWM8IHNp
emVvZihhbGlnbm1lbnRfb2ZfaGFjazxUPikgLSAyKnNpemVvZihUKSwgc2l6ZW9mKFQpPgote307
Ci0jZWxzZQoteyAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IHZhbHVlID0gQk9PU1RfTU9WRV9B
TElHTk1FTlRfT0YoVCk7ICB9OwotI2VuZGlmCi0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUID4KLXN0
cnVjdCBhbGlnbm1lbnRfb2YKLSAgIDogYWxpZ25tZW50X29mX2ltcGw8VD4KLXt9OwotCi1jbGFz
cyBhbGlnbm1lbnRfZHVtbXk7Ci10eXBlZGVmIHZvaWQgKCpmdW5jdGlvbl9wdHIpKCk7Ci10eXBl
ZGVmIGludCAoYWxpZ25tZW50X2R1bW15OjoqbWVtYmVyX3B0cik7Ci10eXBlZGVmIGludCAoYWxp
Z25tZW50X2R1bW15OjoqbWVtYmVyX2Z1bmN0aW9uX3B0cikoKTsKLXN0cnVjdCBhbGlnbm1lbnRf
c3RydWN0Ci17ICBsb25nIGRvdWJsZSBkdW1teVs0XTsgIH07Ci0KLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0vLyAgICBtYXhfYWxpZ25fdAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLS8vVGhpcyBpcyBub3Qgc3RhbmRhcmQsIGJ1dCBzaG91bGQgd29yayB3aXRoIGFsbCBj
b21waWxlcnMKLXVuaW9uIG1heF9hbGlnbgotewotICAgY2hhciAgICAgICAgY2hhcl87Ci0gICBz
aG9ydCAgICAgICBzaG9ydF87Ci0gICBpbnQgICAgICAgICBpbnRfOwotICAgbG9uZyAgICAgICAg
bG9uZ187Ci0gICAjaWZkZWYgQk9PU1RfSEFTX0xPTkdfTE9ORwotICAgOjpib29zdDo6bG9uZ19s
b25nX3R5cGUgICBsb25nX2xvbmdfOwotICAgI2VuZGlmCi0gICBmbG9hdCAgICAgICBmbG9hdF87
Ci0gICBkb3VibGUgICAgICBkb3VibGVfOwotICAgdm9pZCAqICAgICAgdm9pZF9wdHJfOwotICAg
bG9uZyBkb3VibGUgbG9uZ19kb3VibGVfWzRdOwotICAgYWxpZ25tZW50X2R1bW15ICp1bmtub3du
X2NsYXNzX3B0cl87Ci0gICBmdW5jdGlvbl9wdHIgZnVuY3Rpb25fcHRyXzsKLSAgIG1lbWJlcl9m
dW5jdGlvbl9wdHIgbWVtYmVyX2Z1bmN0aW9uX3B0cl87Ci0gICBhbGlnbm1lbnRfc3RydWN0IGFs
aWdubWVudF9zdHJ1Y3RfOwotfTsKLQotdHlwZWRlZiB1bmlvbiBtYXhfYWxpZ24gbWF4X2FsaWdu
X3Q7Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyAgICBhbGlnbmVkX3N0b3Jh
Z2UKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSNpZiAhZGVmaW5lZChCT09TVF9O
T19BTElHTk1FTlQpCi0KLXRlbXBsYXRlPHN0ZDo6c2l6ZV90IExlbiwgc3RkOjpzaXplX3QgQWxp
Z24+Ci1zdHJ1Y3QgYWxpZ25lZF9zdG9yYWdlX2ltcGw7Ci0KLSNkZWZpbmUgQk9PU1RfTU9WRV9B
TElHTkVEX1NUT1JBR0VfV0lUSF9CT09TVF9BTElHTk1FTlQoQSlcCi10ZW1wbGF0ZTxzdGQ6OnNp
emVfdCBMZW4+XAotc3RydWN0IEJPT1NUX0FMSUdOTUVOVChBKSBhbGlnbmVkX3N0b3JhZ2VfaW1w
bDxMZW4sIEE+XAote1wKLSAgIGNoYXIgZHVtbXlbTGVuXTtcCi0gICB0eXBlZGVmIGFsaWduZWRf
c3RvcmFnZV9pbXBsPExlbiwgQT4gdHlwZTtcCi19O1wKLS8vCi0KLS8vVXAgdG8gNEsgYWxpZ25t
ZW50ICh0eXBpY2FsIHBhZ2Ugc2l6ZSkKLUJPT1NUX01PVkVfQUxJR05FRF9TVE9SQUdFX1dJVEhf
Qk9PU1RfQUxJR05NRU5UKDB4MSkKLUJPT1NUX01PVkVfQUxJR05FRF9TVE9SQUdFX1dJVEhfQk9P
U1RfQUxJR05NRU5UKDB4MikKLUJPT1NUX01PVkVfQUxJR05FRF9TVE9SQUdFX1dJVEhfQk9PU1Rf
QUxJR05NRU5UKDB4NCkKLUJPT1NUX01PVkVfQUxJR05FRF9TVE9SQUdFX1dJVEhfQk9PU1RfQUxJ
R05NRU5UKDB4OCkKLUJPT1NUX01PVkVfQUxJR05FRF9TVE9SQUdFX1dJVEhfQk9PU1RfQUxJR05N
RU5UKDB4MTApCi1CT09TVF9NT1ZFX0FMSUdORURfU1RPUkFHRV9XSVRIX0JPT1NUX0FMSUdOTUVO
VCgweDIwKQotQk9PU1RfTU9WRV9BTElHTkVEX1NUT1JBR0VfV0lUSF9CT09TVF9BTElHTk1FTlQo
MHg0MCkKLUJPT1NUX01PVkVfQUxJR05FRF9TVE9SQUdFX1dJVEhfQk9PU1RfQUxJR05NRU5UKDB4
ODApCi1CT09TVF9NT1ZFX0FMSUdORURfU1RPUkFHRV9XSVRIX0JPT1NUX0FMSUdOTUVOVCgweDEw
MCkKLUJPT1NUX01PVkVfQUxJR05FRF9TVE9SQUdFX1dJVEhfQk9PU1RfQUxJR05NRU5UKDB4MjAw
KQotQk9PU1RfTU9WRV9BTElHTkVEX1NUT1JBR0VfV0lUSF9CT09TVF9BTElHTk1FTlQoMHg0MDAp
Ci1CT09TVF9NT1ZFX0FMSUdORURfU1RPUkFHRV9XSVRIX0JPT1NUX0FMSUdOTUVOVCgweDgwMCkK
LUJPT1NUX01PVkVfQUxJR05FRF9TVE9SQUdFX1dJVEhfQk9PU1RfQUxJR05NRU5UKDB4MTAwMCkK
LQotI3VuZGVmIEJPT1NUX01PVkVfQUxJR05FRF9TVE9SQUdFX1dJVEhfQk9PU1RfQUxJR05NRU5U
Ci0KLSNlbHNlIC8vQk9PU1RfTk9fQUxJR05NRU5UCi0KLXRlbXBsYXRlPGNsYXNzIFQsIHN0ZDo6
c2l6ZV90IExlbj4KLXVuaW9uIGFsaWduZWRfdW5pb24KLXsgICAKLSAgIFQgYWxpZ25lcjsKLSAg
IGNoYXIgZHVtbXlbTGVuXTsKLX07Ci0KLXRlbXBsYXRlPHN0ZDo6c2l6ZV90IExlbiwgc3RkOjpz
aXplX3QgQWxpZ24sIGNsYXNzIFQsIGJvb2wgT2s+Ci1zdHJ1Y3QgYWxpZ25lZF9uZXh0OwotCi10
ZW1wbGF0ZTxzdGQ6OnNpemVfdCBMZW4sIHN0ZDo6c2l6ZV90IEFsaWduLCBjbGFzcyBUPgotc3Ry
dWN0IGFsaWduZWRfbmV4dDxMZW4sIEFsaWduLCBULCB0cnVlPgotewotICAgQk9PU1RfU1RBVElD
X0FTU0VSVCgoYWxpZ25tZW50X29mPFQ+Ojp2YWx1ZSA9PSBBbGlnbikpOwotICAgdHlwZWRlZiBh
bGlnbmVkX3VuaW9uPFQsIExlbj4gdHlwZTsKLX07Ci0KLS8vRW5kIG9mIHNlYXJjaCBkZWZhdWx0
cyB0byBtYXhfYWxpZ25fdAotdGVtcGxhdGU8c3RkOjpzaXplX3QgTGVuLCBzdGQ6OnNpemVfdCBB
bGlnbj4KLXN0cnVjdCBhbGlnbmVkX25leHQ8TGVuLCBBbGlnbiwgbWF4X2FsaWduX3QsIGZhbHNl
PgoteyAgIHR5cGVkZWYgYWxpZ25lZF91bmlvbjxtYXhfYWxpZ25fdCwgTGVuPiB0eXBlOyAgIH07
Ci0KLS8vTm93IGRlZmluZSBhIHNlYXJjaCBsaXN0IHRocm91Z2ggdHlwZXMKLSNkZWZpbmUgQk9P
U1RfTU9WRV9BTElHTkVEX05FWFRfU1RFUChUWVBFLCBORVhUX1RZUEUpXAotICAgdGVtcGxhdGU8
c3RkOjpzaXplX3QgTGVuLCBzdGQ6OnNpemVfdCBBbGlnbj5cCi0gICBzdHJ1Y3QgYWxpZ25lZF9u
ZXh0PExlbiwgQWxpZ24sIFRZUEUsIGZhbHNlPlwKLSAgICAgIDogYWxpZ25lZF9uZXh0PExlbiwg
QWxpZ24sIE5FWFRfVFlQRSwgQWxpZ24gPT0gYWxpZ25tZW50X29mPE5FWFRfVFlQRT46OnZhbHVl
PlwKLSAgIHt9O1wKLSAgIC8vCi0gICBCT09TVF9NT1ZFX0FMSUdORURfTkVYVF9TVEVQKGxvbmcg
ZG91YmxlLCBtYXhfYWxpZ25fdCkKLSAgIEJPT1NUX01PVkVfQUxJR05FRF9ORVhUX1NURVAoZG91
YmxlLCBsb25nIGRvdWJsZSkKLSAgICNpZmRlZiBCT09TVF9IQVNfTE9OR19MT05HCi0gICAgICBC
T09TVF9NT1ZFX0FMSUdORURfTkVYVF9TVEVQKDo6Ym9vc3Q6OmxvbmdfbG9uZ190eXBlLCBkb3Vi
bGUpCi0gICAgICBCT09TVF9NT1ZFX0FMSUdORURfTkVYVF9TVEVQKGxvbmcsIDo6Ym9vc3Q6Omxv
bmdfbG9uZ190eXBlKQotICAgI2Vsc2UKLSAgICAgIEJPT1NUX01PVkVfQUxJR05FRF9ORVhUX1NU
RVAobG9uZywgZG91YmxlKQotICAgI2VuZGlmCi0gICBCT09TVF9NT1ZFX0FMSUdORURfTkVYVF9T
VEVQKGludCwgbG9uZykKLSAgIEJPT1NUX01PVkVfQUxJR05FRF9ORVhUX1NURVAoc2hvcnQsIGlu
dCkKLSAgIEJPT1NUX01PVkVfQUxJR05FRF9ORVhUX1NURVAoY2hhciwgc2hvcnQpCi0jdW5kZWYg
Qk9PU1RfTU9WRV9BTElHTkVEX05FWFRfU1RFUAotCi10ZW1wbGF0ZTxzdGQ6OnNpemVfdCBMZW4s
IHN0ZDo6c2l6ZV90IEFsaWduPgotc3RydWN0IGFsaWduZWRfc3RvcmFnZV9pbXBsCi0gICA6IGFs
aWduZWRfbmV4dDxMZW4sIEFsaWduLCBjaGFyLCBBbGlnbiA9PSBhbGlnbm1lbnRfb2Y8Y2hhcj46
OnZhbHVlPgote307Ci0KLSNlbmRpZgotCi10ZW1wbGF0ZTxzdGQ6OnNpemVfdCBMZW4sIHN0ZDo6
c2l6ZV90IEFsaWduID0gYWxpZ25tZW50X29mPG1heF9hbGlnbl90Pjo6dmFsdWU+Ci1zdHJ1Y3Qg
YWxpZ25lZF9zdG9yYWdlCi17Ci0gICAvL1Nhbml0eSBjaGVja3MgZm9yIGlucHV0IHBhcmFtZXRl
cnMKLSAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoQWxpZ24gPiAwKTsKLQotICAgLy9TYW5pdHkgY2hl
Y2tzIGZvciBvdXRwdXQgdHlwZQotICAgdHlwZWRlZiB0eXBlbmFtZSBhbGlnbmVkX3N0b3JhZ2Vf
aW1wbDxMZW4gPyBMZW4gOiAxLCBBbGlnbj46OnR5cGUgdHlwZTsKLSAgIHN0YXRpYyBjb25zdCBz
dGQ6OnNpemVfdCB2YWx1ZSA9IGFsaWdubWVudF9vZjx0eXBlPjo6dmFsdWU7Ci0gICBCT09TVF9T
VEFUSUNfQVNTRVJUKHZhbHVlID49IEFsaWduKTsKLSAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoKHZh
bHVlICUgQWxpZ24pID09IDApOwotCi0gICAvL0p1c3QgaW4gY2FzZSBzb21lb25lIGluc3RhbnRp
YXRlcyBhbGlnbmVkX3N0b3JhZ2UKLSAgIC8vaW5zdGVhZCBvZiBhbGlnbmVkX3N0b3JhZ2U6OnR5
cGUgKHR5cGljYWwgZXJyb3IpLgotICAgcHJpdmF0ZToKLSAgIGFsaWduZWRfc3RvcmFnZSgpOwot
fTsKLQotfSAgLy9uYW1lc3BhY2UgbW92ZV9kZXRhaWwgewotfSAgLy9uYW1lc3BhY2UgYm9vc3Qg
ewotCi0jaW5jbHVkZSA8Ym9vc3QvbW92ZS9kZXRhaWwvY29uZmlnX2VuZC5ocHA+Ci0KLSNlbmRp
ZiAgIC8vI2lmbmRlZiBCT09TVF9NT1ZFX0RFVEFJTF9UWVBFX1RSQUlUU19IUFAKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21vdmUvZGV0YWls
L3dvcmthcm91bmQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvbW92ZS9kZXRhaWwvd29ya2Fyb3VuZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDFkMTZmMjQzMzIxMGFlZTY0ZDFiNDdlYmQwODhhMjM3NjQzYjg1YjMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbW92ZS9kZXRhaWwvd29ya2Fyb3VuZC5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2OSArMCwwIEBACi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyAoQykg
Q29weXJpZ2h0IElvbiBHYXp0YW5hZ2EgMjAxNC0yMDE0LiBEaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QKLS8vIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWlu
ZyBmaWxlCi0vLyBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMv
aW50ZXJwcm9jZXNzIGZvciBkb2N1bWVudGF0aW9uLgotLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotCi0jaWZuZGVmIEJPT1NUX01PVkVfREVUQUlMX1dPUktBUk9VTkRfSFBQCi0jZGVmaW5lIEJP
T1NUX01PVkVfREVUQUlMX1dPUktBUk9VTkRfSFBQCi0KLSNpZm5kZWYgQk9PU1RfQ09ORklHX0hQ
UAotIyAgaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNlbmRpZgotIwotI2lmIGRlZmluZWQo
Qk9PU1RfSEFTX1BSQUdNQV9PTkNFKQotIyAgcHJhZ21hIG9uY2UKLSNlbmRpZgotCi0jaWYgICAg
IWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMpICYmICFkZWZpbmVkKEJP
T1NUX05PX0NYWDExX1ZBUklBRElDX1RFTVBMQVRFUykKLSAgICNkZWZpbmUgQk9PU1RfTU9WRV9Q
RVJGRUNUX0ZPUldBUkRJTkcKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX2hhc19mZWF0dXJlKQot
ICAgI2RlZmluZSBCT09TVF9NT1ZFX0hBU19GRUFUVVJFIF9faGFzX2ZlYXR1cmUKLSNlbHNlCi0g
ICAjZGVmaW5lIEJPT1NUX01PVkVfSEFTX0ZFQVRVUkUoeCkgMAotI2VuZGlmCi0KLSNpZiBCT09T
VF9NT1ZFX0hBU19GRUFUVVJFKGFkZHJlc3Nfc2FuaXRpemVyKSB8fCBkZWZpbmVkKF9fU0FOSVRJ
WkVfQUREUkVTU19fKQotICAgI2RlZmluZSBCT09TVF9NT1ZFX0FERFJFU1NfU0FOSVRJWkVSX09O
Ci0jZW5kaWYKLQotLy9NYWNyb3MgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMuIEZvciBjb2Rl
LCBleHBhbmRzIHRvIHRoZSBhcmd1bWVudAotI2RlZmluZSBCT09TVF9NT1ZFX0lNUERFRihUWVBF
KSBUWVBFCi0jZGVmaW5lIEJPT1NUX01PVkVfU0VFRE9DKFRZUEUpIFRZUEUKLSNkZWZpbmUgQk9P
U1RfTU9WRV9ET0MwUFRSKFRZUEUpIFRZUEUKLSNkZWZpbmUgQk9PU1RfTU9WRV9ET0MxU1QoVFlQ
RTEsIFRZUEUyKSBUWVBFMgotI2RlZmluZSBCT09TVF9NT1ZFX0kgLAotI2RlZmluZSBCT09TVF9N
T1ZFX0RPQ0lHTihUMSkgVDEKLQotI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA9
PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPCA1KSAmJiAhZGVmaW5lZChfX2NsYW5nX18pCi0gICAv
L1ByZS1zdGFuZGFyZCBydmFsdWUgYmluZGluZyBydWxlcwotICAgI2RlZmluZSBCT09TVF9NT1ZF
X09MRF9SVkFMVUVfUkVGX0JJTkRJTkdfUlVMRVMKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYm
IChfTVNDX1ZFUiA9PSAxNjAwKQotICAgLy9TdGFuZGFyZCBydmFsdWUgYmluZGluZyBydWxlcyBi
dXQgd2l0aCBzb21lIGJ1Z3MKLSAgICNkZWZpbmUgQk9PU1RfTU9WRV9NU1ZDXzEwX01FTUJFUl9S
VkFMVUVfUkVGX0JVRwotICAgI2RlZmluZSBCT09TVF9NT1ZFX01TVkNfQVVUT19NT1ZFX1JFVFVS
Tl9CVUcKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA9PSAxNzAwKQotICAg
I2RlZmluZSBCT09TVF9NT1ZFX01TVkNfQVVUT19NT1ZFX1JFVFVSTl9CVUcKLSNlbmRpZgotCi0j
aWYgZGVmaW5lZChCT09TVF9NT1ZFX0RJU0FCTEVfRk9SQ0VJTkxJTkUpCi0gICAjZGVmaW5lIEJP
T1NUX01PVkVfRk9SQ0VJTkxJTkUgaW5saW5lCi0jZWxpZiBkZWZpbmVkKEJPT1NUX01PVkVfRk9S
Q0VJTkxJTkVfSVNfQk9PU1RfRk9SQ0VMSU5FKQotICAgI2RlZmluZSBCT09TVF9NT1ZFX0ZPUkNF
SU5MSU5FIEJPT1NUX0ZPUkNFSU5MSU5FCi0jZWxpZiBkZWZpbmVkKEJPT1NUX01TVkMpICYmIGRl
ZmluZWQoX0RFQlVHKQotICAgLy8iX19mb3JjZWlubGluZSIgYW5kIE1TVkMgc2VlbXMgdG8gaGF2
ZSBzb21lIGJ1Z3MgaW4gZGVidWcgbW9kZQotICAgI2RlZmluZSBCT09TVF9NT1ZFX0ZPUkNFSU5M
SU5FIGlubGluZQotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA8IDQpIHx8
IChfX0dOVUNfXyA9PSA0ICYmIChfX0dOVUNfTUlOT1JfXyA8IDUpKSkKLSAgIC8vT2xkZXIgR0ND
cyBoYXZlIHByb2JsZW1zIHdpdGggZm9yY2VpbmxpbmUKLSAgICNkZWZpbmUgQk9PU1RfTU9WRV9G
T1JDRUlOTElORSBpbmxpbmUKLSNlbHNlCi0gICAjZGVmaW5lIEJPT1NUX01PVkVfRk9SQ0VJTkxJ
TkUgQk9PU1RfRk9SQ0VJTkxJTkUKLSNlbmRpZgotCi0jZW5kaWYgICAvLyNpZm5kZWYgQk9PU1Rf
TU9WRV9ERVRBSUxfV09SS0FST1VORF9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21vdmUvdXRpbGl0eV9jb3JlLmhwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21vdmUvdXRpbGl0eV9jb3JlLmhwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUwNDJhOWJiMTU2OGNlMjViZDEzMzk4Zjgx
NmI1ZjFlOWIzMjM1ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tb3ZlL3V0aWxp
dHlfY29yZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMTggKzAsMCBAQAotLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0vLwotLy8gKEMpIENvcHlyaWdodCBJb24gR2F6dGFuYWdhIDIwMTItMjAxMi4K
LS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4KLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkg
YXQKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUg
aHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tb3ZlIGZvciBkb2N1bWVudGF0aW9uLgotLy8KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotCi0vLyEgXGZpbGUKLS8vISBUaGlzIGhlYWRlciBkZWZpbmVz
IGNvcmUgdXRpbGl0aWVzIHRvIGVhc2UgdGhlIGRldmVsb3BtZW50Ci0vLyEgb2YgbW92ZS1hd2Fy
ZSBmdW5jdGlvbnMuIFRoaXMgaGVhZGVyIG1pbmltaXplcyBkZXBlbmRlbmNpZXMKLS8vISBmcm9t
IG90aGVyIGxpYnJhcmllcy4KLQotI2lmbmRlZiBCT09TVF9NT1ZFX01PVkVfVVRJTElUWV9DT1JF
X0hQUAotI2RlZmluZSBCT09TVF9NT1ZFX01PVkVfVVRJTElUWV9DT1JFX0hQUAotCi0jaWZuZGVm
IEJPT1NUX0NPTkZJR19IUFAKLSMgIGluY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jZW5kaWYK
LSMKLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19QUkFHTUFfT05DRSkKLSMgIHByYWdtYSBvbmNlCi0j
ZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L21vdmUvZGV0YWlsL2NvbmZpZ19iZWdpbi5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvbW92ZS9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+ICAvL2ZvcmNlaW5saW5l
Ci0jaW5jbHVkZSA8Ym9vc3QvbW92ZS9jb3JlLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tb3ZlL2Rl
dGFpbC9tZXRhX3V0aWxzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9zdGF0aWNfYXNzZXJ0LmhwcD4K
LQotI2lmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMpICYmICFkZWZp
bmVkKEJPT1NUX01PVkVfRE9YWUdFTl9JTlZPS0VEKQotCi0gICBuYW1lc3BhY2UgYm9vc3Qgewot
Ci0gICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgc3RydWN0IGVuYWJsZV9tb3ZlX3V0aWxpdHlfZW11
bGF0aW9uCi0gICB7Ci0gICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7Ci0gICB9
OwotICAgIAotICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAvLwotICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbW92ZSgpCi0gICAvLwotICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgQk9PU1RfTU9WRV9GT1JDRUlOTElORSB0eXBl
bmFtZSA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6ZW5hYmxlX2lmX2FuZAotICAgICAgPCBUICYKLSAg
ICAgICwgZW5hYmxlX21vdmVfdXRpbGl0eV9lbXVsYXRpb248VD4KLSAgICAgICwgaGFzX21vdmVf
ZW11bGF0aW9uX2Rpc2FibGVkPFQ+Ci0gICAgICA+Ojp0eXBlCi0gICAgICAgICBtb3ZlKFQmIHgp
IEJPT1NUX05PRVhDRVBUCi0gICB7Ci0gICAgICByZXR1cm4geDsKLSAgIH0KLQotICAgdGVtcGxh
dGUgPGNsYXNzIFQ+Ci0gICBCT09TVF9NT1ZFX0ZPUkNFSU5MSU5FIHR5cGVuYW1lIDo6Ym9vc3Q6
Om1vdmVfZGV0YWlsOjplbmFibGVfaWZfYW5kCi0gICAgICA8IHJ2PFQ+JgotICAgICAgLCBlbmFi
bGVfbW92ZV91dGlsaXR5X2VtdWxhdGlvbjxUPgotICAgICAgLCBoYXNfbW92ZV9lbXVsYXRpb25f
ZW5hYmxlZDxUPgotICAgICAgPjo6dHlwZQotICAgICAgICAgbW92ZShUJiB4KSBCT09TVF9OT0VY
Q0VQVAotICAgewotICAgICAgcmV0dXJuICpCT09TVF9NT1ZFX1RPX1JWX0NBU1QoOjpib29zdDo6
cnY8VD4qLCA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6YWRkcmVzc29mKHgpICk7Ci0gICB9Ci0KLSAg
IHRlbXBsYXRlIDxjbGFzcyBUPgotICAgQk9PU1RfTU9WRV9GT1JDRUlOTElORSB0eXBlbmFtZSA6
OmJvb3N0Ojptb3ZlX2RldGFpbDo6ZW5hYmxlX2lmX2FuZAotICAgICAgPCBydjxUPiYKLSAgICAg
ICwgZW5hYmxlX21vdmVfdXRpbGl0eV9lbXVsYXRpb248VD4KLSAgICAgICwgaGFzX21vdmVfZW11
bGF0aW9uX2VuYWJsZWQ8VD4KLSAgICAgID46OnR5cGUKLSAgICAgICAgIG1vdmUocnY8VD4mIHgp
IEJPT1NUX05PRVhDRVBUCi0gICB7Ci0gICAgICByZXR1cm4geDsKLSAgIH0KLQotICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0gICAvLwotICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yd2FyZCgpCi0gICAvLwotICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgIHRlbXBsYXRl
IDxjbGFzcyBUPgotICAgQk9PU1RfTU9WRV9GT1JDRUlOTElORSB0eXBlbmFtZSA6OmJvb3N0Ojpt
b3ZlX2RldGFpbDo6ZW5hYmxlX2lmX2FuZAotICAgICAgPCBUICYKLSAgICAgICwgZW5hYmxlX21v
dmVfdXRpbGl0eV9lbXVsYXRpb248VD4KLSAgICAgICwgOjpib29zdDo6bW92ZV9kZXRhaWw6Omlz
X3J2PFQ+Ci0gICAgICA+Ojp0eXBlCi0gICAgICAgICBmb3J3YXJkKGNvbnN0IHR5cGVuYW1lIDo6
Ym9vc3Q6Om1vdmVfZGV0YWlsOjppZGVudGl0eTxUPjo6dHlwZSAmeCkgQk9PU1RfTk9FWENFUFQK
LSAgIHsKLSAgICAgIHJldHVybiBjb25zdF9jYXN0PFQmPih4KTsKLSAgIH0KLQotICAgdGVtcGxh
dGUgPGNsYXNzIFQ+Ci0gICBCT09TVF9NT1ZFX0ZPUkNFSU5MSU5FIHR5cGVuYW1lIDo6Ym9vc3Q6
Om1vdmVfZGV0YWlsOjplbmFibGVfaWZfYW5kCi0gICAgICA8IGNvbnN0IFQgJgotICAgICAgLCBl
bmFibGVfbW92ZV91dGlsaXR5X2VtdWxhdGlvbjxUPgotICAgICAgLCA6OmJvb3N0Ojptb3ZlX2Rl
dGFpbDo6aXNfbm90X3J2PFQ+Ci0gICAgICA+Ojp0eXBlCi0gICAgICAgICBmb3J3YXJkKGNvbnN0
IHR5cGVuYW1lIDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjppZGVudGl0eTxUPjo6dHlwZSAmeCkgQk9P
U1RfTk9FWENFUFQKLSAgIHsKLSAgICAgIHJldHVybiB4OwotICAgfQotCi0gICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLSAgIC8vCi0gICAvLyAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVfaWZf
bm90X2x2YWx1ZV9yZWZlcmVuY2UoKQotICAgLy8KLSAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIEJPT1NUX01PVkVfRk9SQ0VJTkxJTkUgdHlwZW5h
bWUgOjpib29zdDo6bW92ZV9kZXRhaWw6OmVuYWJsZV9pZl9hbmQKLSAgICAgIDwgVCAmCi0gICAg
ICAsIGVuYWJsZV9tb3ZlX3V0aWxpdHlfZW11bGF0aW9uPFQ+Ci0gICAgICAsIDo6Ym9vc3Q6Om1v
dmVfZGV0YWlsOjppc19ydjxUPgotICAgICAgPjo6dHlwZQotICAgICAgICAgbW92ZV9pZl9ub3Rf
bHZhbHVlX3JlZmVyZW5jZShjb25zdCB0eXBlbmFtZSA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6aWRl
bnRpdHk8VD46OnR5cGUgJngpIEJPT1NUX05PRVhDRVBUCi0gICB7Ci0gICAgICByZXR1cm4gY29u
c3RfY2FzdDxUJj4oeCk7Ci0gICB9Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgQk9PU1Rf
TU9WRV9GT1JDRUlOTElORSB0eXBlbmFtZSA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6ZW5hYmxlX2lm
X2FuZAotICAgICAgPCB0eXBlbmFtZSA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6YWRkX2x2YWx1ZV9y
ZWZlcmVuY2U8VD46OnR5cGUKLSAgICAgICwgZW5hYmxlX21vdmVfdXRpbGl0eV9lbXVsYXRpb248
VD4KLSAgICAgICwgOjpib29zdDo6bW92ZV9kZXRhaWw6OmlzX25vdF9ydjxUPgotICAgICAgLCA6
OmJvb3N0Ojptb3ZlX2RldGFpbDo6b3JfCi0gICAgICAgICA8IDo6Ym9vc3Q6Om1vdmVfZGV0YWls
Ojppc19sdmFsdWVfcmVmZXJlbmNlPFQ+Ci0gICAgICAgICAsIGhhc19tb3ZlX2VtdWxhdGlvbl9k
aXNhYmxlZDxUPgotICAgICAgICAgPgotICAgICAgPjo6dHlwZQotICAgICAgICAgbW92ZV9pZl9u
b3RfbHZhbHVlX3JlZmVyZW5jZSh0eXBlbmFtZSA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6cmVtb3Zl
X3JlZmVyZW5jZTxUPjo6dHlwZSAmeCkgQk9PU1RfTk9FWENFUFQKLSAgIHsKLSAgICAgIHJldHVy
biB4OwotICAgfQotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIEJPT1NUX01PVkVfRk9SQ0VJ
TkxJTkUgdHlwZW5hbWUgOjpib29zdDo6bW92ZV9kZXRhaWw6OmVuYWJsZV9pZl9hbmQKLSAgICAg
IDwgcnY8VD4mCi0gICAgICAsIGVuYWJsZV9tb3ZlX3V0aWxpdHlfZW11bGF0aW9uPFQ+Ci0gICAg
ICAsIDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjppc19ub3RfcnY8VD4KLSAgICAgICwgOjpib29zdDo6
bW92ZV9kZXRhaWw6OmFuZF8KLSAgICAgICAgIDwgOjpib29zdDo6bW92ZV9kZXRhaWw6Om5vdF88
IDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjppc19sdmFsdWVfcmVmZXJlbmNlPFQ+ID4KLSAgICAgICAg
ICwgaGFzX21vdmVfZW11bGF0aW9uX2VuYWJsZWQ8VD4KLSAgICAgICAgID4KLSAgICAgID46OnR5
cGUKLSAgICAgICAgIG1vdmVfaWZfbm90X2x2YWx1ZV9yZWZlcmVuY2UodHlwZW5hbWUgOjpib29z
dDo6bW92ZV9kZXRhaWw6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUgJngpIEJPT1NUX05PRVhD
RVBUCi0gICB7Ci0gICAgICByZXR1cm4gbW92ZSh4KTsKLSAgIH0KLQotICAgfSAgLy9uYW1lc3Bh
Y2UgYm9vc3QKLQotI2Vsc2UgICAgLy8jaWYgZGVmaW5lZChCT09TVF9OT19DWFgxMV9SVkFMVUVf
UkVGRVJFTkNFUykgJiYgIWRlZmluZWQoQk9PU1RfTU9WRV9ET1hZR0VOX0lOVk9LRUQpCi0KLSAg
ICNpZiBkZWZpbmVkKEJPT1NUX01PVkVfVVNFX1NUQU5EQVJEX0xJQlJBUllfTU9WRSkKLSAgICAg
ICNpbmNsdWRlIDx1dGlsaXR5PgotCi0gICAgICBuYW1lc3BhY2UgYm9vc3R7Ci0KLSAgICAgIHVz
aW5nIDo6c3RkOjptb3ZlOwotICAgICAgdXNpbmcgOjpzdGQ6OmZvcndhcmQ7Ci0KLSAgICAgIH0g
IC8vbmFtZXNwYWNlIGJvb3N0Ci0KLSAgICNlbHNlIC8vIUJPT1NUX01PVkVfVVNFX1NUQU5EQVJE
X0xJQlJBUllfTU9WRQotCi0gICAgICBuYW1lc3BhY2UgYm9vc3QgewotCi0gICAgICAvLyEgVGhp
cyB0cmFpdCdzIGludGVybmFsIGJvb2xlYW4gYHZhbHVlYCBpcyBmYWxzZSBpbiBjb21waWxlcnMg
d2l0aCBydmFsdWUgcmVmZXJlbmNlcwotICAgICAgLy8hIGFuZCB0cnVlIGluIGNvbXBpbGVycyB3
aXRob3V0IHJ2YWx1ZSByZWZlcmVuY2VzLgotICAgICAgLy8hCi0gICAgICAvLyEgQSB1c2VyIGNh
biBzcGVjaWFsaXplIHRoaXMgdHJhaXQgZm9yIGEgdHlwZSBUIHRvIGZhbHNlIHRvIFNGSU5BRSBv
dXQgYG1vdmVgIGFuZCBgZm9yd2FyZGAKLSAgICAgIC8vISBzbyB0aGF0IHRoZSB1c2VyIGNhbiBk
ZWZpbmUgYSBkaWZmZXJlbnQgbW92ZSBlbXVsYXRpb24gZm9yIHRoYXQgdHlwZSBpbiBuYW1lc3Bh
Y2UgYm9vc3QKLSAgICAgIC8vISAoZS5nLiBhbm90aGVyIEJvb3N0IGxpYnJhcnkgZm9yIGl0cyB0
eXBlcykgYW5kIGF2b2lkIGFueSBvdmVybG9hZCBhbWJpZ3VpdHkuCi0gICAgICB0ZW1wbGF0ZTxj
bGFzcyBUPgotICAgICAgc3RydWN0IGVuYWJsZV9tb3ZlX3V0aWxpdHlfZW11bGF0aW9uCi0gICAg
ICB7Ci0gICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwotICAgICAgfTsK
LQotICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgICAvLwotICAgICAgLy8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZQotICAgICAgLy8KLSAgICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotCi0gICAgICAjaWYgZGVmaW5lZChCT09TVF9NT1ZFX0RPWFlHRU5fSU5W
T0tFRCkKLSAgICAgICAgIC8vISBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgd2F5IHRvIGNvbnZl
cnQgYSByZWZlcmVuY2UgaW50byBhIHJ2YWx1ZSByZWZlcmVuY2UKLSAgICAgICAgIC8vISBpbiBj
b21waWxlcnMgd2l0aCBydmFsdWUgcmVmZXJlbmNlcy4gRm9yIG90aGVyIGNvbXBpbGVycyBpZiBg
VGAgaXMgQm9vc3QuTW92ZQotICAgICAgICAgLy8hIGVuYWJsZWQgdHlwZSB0aGVuIGl0IGNvbnZl
cnRzIGBUJmAgaW50byA8dHQ+Ojpib29zdDo6cnY8VD4gJjwvdHQ+IHNvIHRoYXQKLSAgICAgICAg
IC8vISBtb3ZlIGVtdWxhdGlvbiBpcyBhY3RpdmF0ZWQsIGVsc2UgaXQgcmV0dXJucyBgVCAmYC4K
LSAgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgICAgICAgcnZhbHVlX3JlZmVyZW5jZSBt
b3ZlKGlucHV0X3JlZmVyZW5jZSkgbm9leGNlcHQ7Ci0KLSAgICAgICNlbGlmIGRlZmluZWQoQk9P
U1RfTU9WRV9PTERfUlZBTFVFX1JFRl9CSU5ESU5HX1JVTEVTKQotCi0gICAgICAgICAvL09sZCBt
b3ZlIGFwcHJvYWNoLCBsdmFsdWVzIGNvdWxkIGJpbmQgdG8gcnZhbHVlIHJlZmVyZW5jZXMKLSAg
ICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgICAgICAgQk9PU1RfTU9WRV9GT1JDRUlOTElO
RSB0eXBlbmFtZSA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlw
ZSAmJiBtb3ZlKFQmJiB0KSBCT09TVF9OT0VYQ0VQVAotICAgICAgICAgeyAgcmV0dXJuIHQ7ICAg
fQotCi0gICAgICAjZWxzZSAvL0JPT1NUX01PVkVfT0xEX1JWQUxVRV9SRUZfQklORElOR19SVUxF
UwotCi0gICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICAgICAgIEJPT1NUX01PVkVfRk9S
Q0VJTkxJTkUgdHlwZW5hbWUgOjpib29zdDo6bW92ZV9kZXRhaWw6OnJlbW92ZV9yZWZlcmVuY2U8
VD46OnR5cGUgJiYgbW92ZShUJiYgdCkgQk9PU1RfTk9FWENFUFQKLSAgICAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHR5cGVuYW1lIDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjpyZW1vdmVfcmVmZXJl
bmNlPFQ+Ojp0eXBlICYmPih0KTsgfQotCi0gICAgICAjZW5kaWYgICAvL0JPT1NUX01PVkVfT0xE
X1JWQUxVRV9SRUZfQklORElOR19SVUxFUwotCi0gICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LSAgICAgIC8vCi0gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkCi0gICAgICAvLwotICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQotICAgICAgI2lm
IGRlZmluZWQoQk9PU1RfTU9WRV9ET1hZR0VOX0lOVk9LRUQpCi0gICAgICAgICAvLyEgVGhpcyBm
dW5jdGlvbiBwcm92aWRlcyBsaW1pdGVkIGZvcm0gb2YgZm9yd2FyZGluZyB0aGF0IGlzIHVzdWFs
bHkgZW5vdWdoIGZvcgotICAgICAgICAgLy8hIGluLXBsYWNlIGNvbnN0cnVjdGlvbiBhbmQgYXZv
aWRzIHRoZSBleHBvbmVudGlhbCBvdmVybG9hZGluZyBmb3IKLSAgICAgICAgIC8vISBhY2hpZXZl
IHRoZSBsaW1pdGVkIGZvcndhcmRpbmcgaW4gQysrMDMuCi0gICAgICAgICAvLyEKLSAgICAgICAg
IC8vISBGb3IgY29tcGlsZXJzIHdpdGggcnZhbHVlIHJlZmVyZW5jZXMgdGhpcyBmdW5jdGlvbiBw
cm92aWRlcyBwZXJmZWN0IGZvcndhcmRpbmcuCi0gICAgICAgICAvLyEKLSAgICAgICAgIC8vISBP
dGhlcndpc2U6Ci0gICAgICAgICAvLyEgKiBJZiBpbnB1dF9yZWZlcmVuY2UgYmluZHMgdG8gY29u
c3QgOjpib29zdDo6cnY8VD4gJiB0aGVuIGl0IG91dHB1dF9yZWZlcmVuY2UgaXMKLSAgICAgICAg
IC8vISAgIDo6Ym9vc3Q6OnJ2PFQ+ICYKLSAgICAgICAgIC8vIQotICAgICAgICAgLy8hICogRWxz
ZSwgb3V0cHV0X3JlZmVyZW5jZSBpcyBlcXVhbCB0byBpbnB1dF9yZWZlcmVuY2UuCi0gICAgICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gb3V0cHV0X3JlZmVyZW5jZSBmb3J3YXJkKGlucHV0X3JlZmVy
ZW5jZSkgbm9leGNlcHQ7Ci0gICAgICAjZWxpZiBkZWZpbmVkKEJPT1NUX01PVkVfT0xEX1JWQUxV
RV9SRUZfQklORElOR19SVUxFUykKLQotICAgICAgICAgLy9PbGQgbW92ZSBhcHByb2FjaCwgbHZh
bHVlcyBjb3VsZCBiaW5kIHRvIHJ2YWx1ZSByZWZlcmVuY2VzCi0KLSAgICAgICAgIHRlbXBsYXRl
IDxjbGFzcyBUPgotICAgICAgICAgQk9PU1RfTU9WRV9GT1JDRUlOTElORSBUJiYgZm9yd2FyZCh0
eXBlbmFtZSA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6aWRlbnRpdHk8VD46OnR5cGUmJiB0KSBCT09T
VF9OT0VYQ0VQVAotICAgICAgICAgeyAgcmV0dXJuIHQ7ICAgfQotCi0gICAgICAjZWxzZSAvL09s
ZCBtb3ZlCi0KLSAgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgICAgICAgQk9PU1RfTU9W
RV9GT1JDRUlOTElORSBUJiYgZm9yd2FyZCh0eXBlbmFtZSA6OmJvb3N0Ojptb3ZlX2RldGFpbDo6
cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSYgdCkgQk9PU1RfTk9FWENFUFQKLSAgICAgICAgIHsg
IHJldHVybiBzdGF0aWNfY2FzdDxUJiY+KHQpOyAgIH0KLQotICAgICAgICAgdGVtcGxhdGUgPGNs
YXNzIFQ+Ci0gICAgICAgICBCT09TVF9NT1ZFX0ZPUkNFSU5MSU5FIFQmJiBmb3J3YXJkKHR5cGVu
YW1lIDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlJiYgdCkg
Qk9PU1RfTk9FWENFUFQKLSAgICAgICAgIHsKLSAgICAgICAgICAgIC8vImJvb3N0Ojpmb3J3YXJk
PFQ+IGVycm9yOiAnVCcgaXMgYSBsdmFsdWUgcmVmZXJlbmNlLCBjYW4ndCBmb3J3YXJkIGFzIHJ2
YWx1ZS4iOwotICAgICAgICAgICAgQk9PU1RfU1RBVElDX0FTU0VSVCghYm9vc3Q6Om1vdmVfZGV0
YWlsOjppc19sdmFsdWVfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VCYmPih0KTsKLSAgICAgICAgIH0KLQotICAgICAgI2VuZGlmICAgLy9CT09T
VF9NT1ZFX0RPWFlHRU5fSU5WT0tFRAotCi0gICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAg
ICAgIC8vCi0gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlX2lmX25vdF9sdmFs
dWVfcmVmZXJlbmNlCi0gICAgICAvLwotICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQot
ICAgICAgI2lmIGRlZmluZWQoQk9PU1RfTU9WRV9ET1hZR0VOX0lOVk9LRUQpCi0gICAgICAgICAv
LyEgPGI+RWZmZWN0czwvYj46IENhbGxzIGBib29zdDo6bW92ZWAgaWYgYGlucHV0X3JlZmVyZW5j
ZWAgaXMgbm90IGEgbHZhbHVlIHJlZmVyZW5jZS4KLSAgICAgICAgIC8vISAgIE90aGVyd2lzZSBy
ZXR1cm5zIHRoZSByZWZlcmVuY2UKLSAgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBvdXRwdXRf
cmVmZXJlbmNlIG1vdmVfaWZfbm90X2x2YWx1ZV9yZWZlcmVuY2UoaW5wdXRfcmVmZXJlbmNlKSBu
b2V4Y2VwdDsKLSAgICAgICNlbGlmIGRlZmluZWQoQk9PU1RfTU9WRV9PTERfUlZBTFVFX1JFRl9C
SU5ESU5HX1JVTEVTKQotCi0gICAgICAgICAvL09sZCBtb3ZlIGFwcHJvYWNoLCBsdmFsdWVzIGNv
dWxkIGJpbmQgdG8gcnZhbHVlIHJlZmVyZW5jZXMKLQotICAgICAgICAgdGVtcGxhdGUgPGNsYXNz
IFQ+Ci0gICAgICAgICBCT09TVF9NT1ZFX0ZPUkNFSU5MSU5FIFQmJiBtb3ZlX2lmX25vdF9sdmFs
dWVfcmVmZXJlbmNlKHR5cGVuYW1lIDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjppZGVudGl0eTxUPjo6
dHlwZSYmIHQpIEJPT1NUX05PRVhDRVBUCi0gICAgICAgICB7ICByZXR1cm4gdDsgICB9Ci0KLSAg
ICAgICNlbHNlIC8vT2xkIG1vdmUKLQotICAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAg
ICAgICBCT09TVF9NT1ZFX0ZPUkNFSU5MSU5FIFQmJiBtb3ZlX2lmX25vdF9sdmFsdWVfcmVmZXJl
bmNlKHR5cGVuYW1lIDo6Ym9vc3Q6Om1vdmVfZGV0YWlsOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0
eXBlJiB0KSBCT09TVF9OT0VYQ0VQVAotICAgICAgICAgeyAgcmV0dXJuIHN0YXRpY19jYXN0PFQm
Jj4odCk7ICAgfQotCi0gICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICAgICAgIEJPT1NU
X01PVkVfRk9SQ0VJTkxJTkUgVCYmIG1vdmVfaWZfbm90X2x2YWx1ZV9yZWZlcmVuY2UodHlwZW5h
bWUgOjpib29zdDo6bW92ZV9kZXRhaWw6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUmJiB0KSBC
T09TVF9OT0VYQ0VQVAotICAgICAgICAgewotICAgICAgICAgICAgLy8iYm9vc3Q6OmZvcndhcmQ8
VD4gZXJyb3I6ICdUJyBpcyBhIGx2YWx1ZSByZWZlcmVuY2UsIGNhbid0IGZvcndhcmQgYXMgcnZh
bHVlLiI7Ci0gICAgICAgICAgICBCT09TVF9TVEFUSUNfQVNTRVJUKCFib29zdDo6bW92ZV9kZXRh
aWw6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUJiY+KHQpOwotICAgICAgICAgfQotCi0gICAgICAjZW5kaWYgICAvL0JPT1NU
X01PVkVfRE9YWUdFTl9JTlZPS0VECi0KLSAgICAgIH0gIC8vbmFtZXNwYWNlIGJvb3N0IHsKLQot
ICAgI2VuZGlmICAgLy8jaWYgZGVmaW5lZChCT09TVF9NT1ZFX1VTRV9TVEFOREFSRF9MSUJSQVJZ
X01PVkUpCi0KLSNlbmRpZiAgIC8vQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMKLQot
I2lmICFkZWZpbmVkKEJPT1NUX01PVkVfRE9YWUdFTl9JTlZPS0VEKQotCi1uYW1lc3BhY2UgYm9v
c3R7Ci1uYW1lc3BhY2UgbW92ZV9kZXRhaWx7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdHlw
ZW5hbWUgYm9vc3Q6Om1vdmVfZGV0YWlsOjphZGRfcnZhbHVlX3JlZmVyZW5jZTxUPjo6dHlwZSBk
ZWNsdmFsKCk7Ci0KLX0gIC8vbmFtZXNwYWNlIG1vdmVfZGV0YWlsewotfSAgLy9uYW1lc3BhY2Ug
Ym9vc3R7Ci0KLSNlbmRpZiAgIC8vI2lmICFkZWZpbmVkKEJPT1NUX01PVkVfRE9YWUdFTl9JTlZP
S0VEKQotCi0KLSNpbmNsdWRlIDxib29zdC9tb3ZlL2RldGFpbC9jb25maWdfZW5kLmhwcD4KLQot
I2VuZGlmIC8vI2lmbmRlZiBCT09TVF9NT1ZFX01PVkVfVVRJTElUWV9DT1JFX0hQUApkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL08xX3Np
emUuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL08x
X3NpemUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGJkM2E3NDU5ZjAyNGMy
ZTY5NDY1YmZmZTU3MGExYjdlOThkODFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L21wbC9PMV9zaXplLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLQotI2lmbmRl
ZiBCT09TVF9NUExfTzFfU0laRV9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX08xX1NJ
WkVfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAw
NAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBv
ciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8K
LS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4K
LQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9t
cGwvTzFfc2l6ZV9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9zZXF1ZW5jZV90YWcuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL08xX3NpemVfaW1wbC5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvbXBsL2F1eF8vbmFfc3BlYy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbGFt
YmRhX3N1cHBvcnQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQot
Ly8gcmV0dXJucyBzZXF1ZW5jZSBzaXplIGlmIGl0J3MgYW4gTygxKSBvcGVyYXRpb247IG90aGVy
d2lzZSByZXR1cm5zIC0xCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhf
TkFfUEFSQU0oU2VxdWVuY2UpCi0gICAgPgotc3RydWN0IE8xX3NpemUKLSAgICA6IE8xX3NpemVf
aW1wbDwgdHlwZW5hbWUgc2VxdWVuY2VfdGFnPFNlcXVlbmNlPjo6dHlwZSA+Ci0gICAgICAgIDo6
dGVtcGxhdGUgYXBwbHk8IFNlcXVlbmNlID4KLXsKLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9T
VVBQT1JUKDEsIE8xX3NpemUsIChTZXF1ZW5jZSkpCi19OwotCi1CT09TVF9NUExfQVVYX05BX1NQ
RUMoMSwgTzFfc2l6ZSkKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9PMV9TSVpFX0hQUF9J
TkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL08xX3NpemVfZndkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L21wbC9PMV9zaXplX2Z3ZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGM4NGE3YTU2YWUxM2RiMDU2NjEzNzVjODE1NzhhMjVhYTFkYWUxZjMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL08xX3NpemVfZndkLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI0ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfTzFfU0laRV9GV0RfSFBQX0lO
Q0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9PMV9TSVpFX0ZXRF9IUFBfSU5DTFVERUQKLQotLy8g
Q29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUg
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQK
LS8vICRSZXZpc2lvbiQKLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRl
bXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3QgTzFfc2l6ZV9pbXBsOwotdGVtcGxhdGU8IHR5
cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IE8xX3NpemU7Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09T
VF9NUExfTzFfU0laRV9GV0RfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYWR2YW5jZS5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYWR2YW5jZS5ocHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZjYwMDQxN2Y4MDJkYmE1NDBhZGM5ODkwYTA4ZTliM2E2
Nzc1MWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2FkdmFuY2UuaHBwCisr
KyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9BRFZBTkNF
X0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQURWQU5DRV9IUFBfSU5DTFVERUQKLQot
Ly8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChT
ZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0
ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9hZHZhbmNlX2Z3ZC5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2xlc3MuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9uZWdh
dGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9sb25nLmhwcD4KLSNpbmNsdWRlIDxib29zdC9t
cGwvaWYuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC90YWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L21wbC9hcHBseV93cmFwLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9hZHZhbmNlX2Zv
cndhcmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2FkdmFuY2VfYmFja3dhcmQuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ZhbHVlX3drbmQuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L21wbC9hdXhfL25hX3NwZWMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL250dHBf
ZGVjbC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi0vLyBkZWZh
dWx0IGltcGxlbWVudGF0aW9uIGZvciBmb3J3YXJkL2JpZGlyZWN0aW9uYWwgaXRlcmF0b3JzCi10
ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4KLXN0cnVjdCBhZHZhbmNlX2ltcGwKLXsKLSAgICB0ZW1w
bGF0ZTwgdHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIE4gPiBzdHJ1Y3QgYXBwbHkKLSAgICB7
Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbGVzczwgTixsb25nXzwwPiA+Ojp0eXBlIGJhY2t3
YXJkXzsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpZl88IGJhY2t3YXJkXywgbmVnYXRlPE4+
LCBOID46OnR5cGUgb2Zmc2V0XzsKLQotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGlmXzwKLSAg
ICAgICAgICAgICAgYmFja3dhcmRfCi0gICAgICAgICAgICAsIGF1eDo6YWR2YW5jZV9iYWNrd2Fy
ZDwgQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05EKG9mZnNldF8pOjp2YWx1ZSA+Ci0gICAgICAgICAg
ICAsIGF1eDo6YWR2YW5jZV9mb3J3YXJkPCBCT09TVF9NUExfQVVYX1ZBTFVFX1dLTkQob2Zmc2V0
Xyk6OnZhbHVlID4KLSAgICAgICAgICAgID46OnR5cGUgZl87Ci0KLSAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBhcHBseV93cmFwMTxmXyxJdGVyYXRvcj46OnR5cGUgdHlwZTsKLSAgICB9OwotfTsK
LQotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oSXRl
cmF0b3IpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKE4pCi0gICAgPgot
c3RydWN0IGFkdmFuY2UKLSAgICA6IGFkdmFuY2VfaW1wbDwgdHlwZW5hbWUgdGFnPEl0ZXJhdG9y
Pjo6dHlwZSA+Ci0gICAgICAgIDo6dGVtcGxhdGUgYXBwbHk8SXRlcmF0b3IsTj4KLXsKLX07Ci0K
LXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgSXRlcmF0b3IKLSAgICAsIEJPT1NUX01QTF9BVVhf
TlRUUF9ERUNMKGxvbmcsIE4pCi0gICAgPgotc3RydWN0IGFkdmFuY2VfYwotICAgIDogYWR2YW5j
ZV9pbXBsPCB0eXBlbmFtZSB0YWc8SXRlcmF0b3I+Ojp0eXBlID4KLSAgICAgICAgOjp0ZW1wbGF0
ZSBhcHBseTxJdGVyYXRvcixsb25nXzxOPiA+Ci17Ci19OwotCi1CT09TVF9NUExfQVVYX05BX1NQ
RUMoMiwgYWR2YW5jZSkKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9BRFZBTkNFX0hQUF9J
TkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL2FkdmFuY2VfZndkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L21wbC9hZHZhbmNlX2Z3ZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDgwMzg0MTAxOWQzNThlYWU2Y2ZiNWE2ODIwZTMyNjYwYzFjMzllMGUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2FkdmFuY2VfZndkLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI4ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQURWQU5DRV9GV0RfSFBQX0lO
Q0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BRFZBTkNFX0ZXRF9IUFBfSU5DTFVERUQKLQotLy8g
Q29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUg
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQK
LS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbW1vbl9uYW1lX3dr
bmQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotQk9PU1RfTVBM
X0FVWF9DT01NT05fTkFNRV9XS05EKGFkdmFuY2UpCi0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUYWcg
PiBzdHJ1Y3QgYWR2YW5jZV9pbXBsOwotdGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBl
bmFtZSBOID4gc3RydWN0IGFkdmFuY2U7Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQURW
QU5DRV9GV0RfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYWx3YXlzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hbHdheXMuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1ZmU3MTMyMWUxMDRkNmZjMDQzMTBkZGJjYTdkMjFmZTJjNGZlODMxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hbHdheXMuaHBwCisrKyAvZGV2L251bGwK
QEAgLTEsMzggKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9BTFdBWVNfSFBQX0lOQ0xVREVE
Ci0jZGVmaW5lIEJPT1NUX01QTF9BTFdBWVNfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBB
bGVrc2V5IEd1cnRvdm95IDIwMDEtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBC
b29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5v
cmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJz
L21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNp
b24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZGVmYXVsdF9wYXJh
bXMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9tcGwvYXV4Xy9hcml0eV9zcGVjLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNl
IG1wbCB7Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBWYWx1ZSA+IHN0cnVjdCBhbHdheXMKLXsKLSAg
ICB0ZW1wbGF0ZTwKLSAgICAgICAgQk9PU1RfTVBMX1BQX0RFRkFVTFRfUEFSQU1TKEJPT1NUX01Q
TF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFksIHR5cGVuYW1lIFQsIG5hKQotICAgICAgICA+Ci0g
ICAgc3RydWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIFZhbHVlIHR5cGU7Ci0gICAg
fTsKLX07Ci0KLUJPT1NUX01QTF9BVVhfQVJJVFlfU1BFQygwLCBhbHdheXMpCi0KLX19Ci0KLSNl
bmRpZiAvLyBCT09TVF9NUExfQUxXQVlTX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2FuZC5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYW5kLmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNDU0YWFmMmU5NjkxMmU0MmRkZDJiZDRlY2JhNWI2YmVlN2Qw
ZjFhMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYW5kLmhwcAorKysgL2Rl
di9udWxsCkBAIC0xLDYwICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQU5EX0hQUF9JTkNM
VURFRAotI2RlZmluZSBCT09TVF9NUExfQU5EX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQg
QWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlz
aW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3VzZV9wcmVwcm9jZXNzZWQu
aHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVS
UykgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi0KLSMg
ICBpbmNsdWRlIDxib29zdC9tcGwvYm9vbC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1
eF8vbmVzdGVkX3R5cGVfd2tuZC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbmFf
c3BlYy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbGFtYmRhX3N1cHBvcnQuaHBw
PgotCi0vLyBhZ3VydCwgMTkvbWF5LzA0OiB3b3JrYXJvdW5kIGEgY29uZmxpY3Qgd2l0aCA8aXNv
NjQ2Lmg+IGhlYWRlcidzIAotLy8gJ29yJyBhbmQgJ2FuZCcgbWFjcm9zLCBzZWUgaHR0cDovL3Rp
bnl1cmwuY29tLzNldDY5OyAnZGVmaW5lZChhbmQpJwotLy8gaGFzIHRvIGJlIGNoZWNrZWQgaW4g
YSBzZXBhcmF0ZSBjb25kaXRpb24sIG90aGVyd2lzZSBHQ0MgY29tcGxhaW5zIAotLy8gYWJvdXQg
J2FuZCcgYmVpbmcgYW4gYWx0ZXJuYXRpdmUgdG9rZW4KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKSAm
JiAhZGVmaW5lZChfX2NsYW5nX18pCi0jaWZuZGVmIF9fR0NDWE1MX18KLSNpZiBkZWZpbmVkKGFu
ZCkgCi0jICAgcHJhZ21hIHB1c2hfbWFjcm8oImFuZCIpCi0jICAgdW5kZWYgYW5kCi0jICAgZGVm
aW5lIGFuZCh4KQotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0jICAgZGVmaW5lIEJPT1NUX01Q
TF9QUkVQUk9DRVNTRURfSEVBREVSIGFuZC5ocHAKLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4
Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHA+Ci0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAh
ZGVmaW5lZChfX2NsYW5nX18pCi0jaWZuZGVmIF9fR0NDWE1MX18KLSNpZiBkZWZpbmVkKGFuZCkg
Ci0jICAgcHJhZ21hIHBvcF9tYWNybygiYW5kIikKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQot
I2Vsc2UKLQotIyAgIGRlZmluZSBBVVg3NzgwNzZfT1BfTkFNRSBhbmRfCi0jICAgZGVmaW5lIEFV
WDc3ODA3Nl9PUF9WQUxVRTEgZmFsc2UKLSMgICBkZWZpbmUgQVVYNzc4MDc2X09QX1ZBTFVFMiB0
cnVlCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbG9naWNhbF9vcC5ocHA+Ci0KLSNlbmRp
ZiAvLyBCT09TVF9NUExfQ0ZHX05PX1BSRVBST0NFU1NFRF9IRUFERVJTCi0jZW5kaWYgLy8gQk9P
U1RfTVBMX0FORF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hcHBseS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXBwbHkuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1ODFlYjY4MTBlMmRhZGMyZmVkZWZhODc2ODZhYWJmZTUyZGJjMTZjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hcHBseS5ocHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyMjkgKzAsMCBAQAotCi0jaWYgIWRlZmluZWQoQk9PU1RfUFBfSVNfSVRFUkFUSU5HKQot
Ci0vLy8vLyBoZWFkZXIgYm9keQotCi0jaWZuZGVmIEJPT1NUX01QTF9BUFBMWV9IUFBfSU5DTFVE
RUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FQUExZX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQg
QWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlz
aW9uJAotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX1BSRVBST0NFU1NJTkdfTU9ERSkKLSMgICBp
bmNsdWRlIDxib29zdC9tcGwvYXBwbHlfZndkLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwv
YXBwbHlfd3JhcC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL3BsYWNlaG9sZGVycy5ocHA+
Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2xhbWJkYS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F1eF8vbmEuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2xhbWJkYV9zdXBw
b3J0LmhwcD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3VzZV9w
cmVwcm9jZXNzZWQuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19QUkVQUk9D
RVNTRURfSEVBREVSUykgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5H
X01PREUpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BSRVBST0NFU1NFRF9IRUFERVIgYXBwbHku
aHBwCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBw
PgotCi0jZWxzZQotCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2xpbWl0cy9hcml0eS5ocHA+Ci0j
ICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL3BhcmFtcy5ocHA+Ci0jICAg
aW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL2RlZmF1bHRfcGFyYW1zLmhwcD4K
LSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvcGFydGlhbF9zcGVjX3Bh
cmFtcy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL2VudW0u
aHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9sYW1iZGEuaHBwPgotIyAg
IGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9kdHAuaHBwPgotIyAgIGluY2x1ZGUgPGJv
b3N0L21wbC9hdXhfL250dHBfZGVjbC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8v
Y29uZmlnL2V0aS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL21zdmMu
aHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5kLmhwcD4K
LQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb21tYV9pZi5ocHA+Ci0jICAgaW5j
bHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2luYy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJl
cHJvY2Vzc29yL2l0ZXJhdGUuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9j
YXQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotLy8gbG9jYWwg
bWFjcm9zLCAjdW5kZWYtaW5lZCBhdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIKLSMgICBkZWZpbmUg
QVVYNzc4MDc2X0FQUExZX1BBUkFNUyhwYXJhbSkgXAotICAgIEJPT1NUX01QTF9QUF9QQVJBTVMo
IFwKLSAgICAgICAgICBCT09TVF9NUExfTElNSVRfTUVUQUZVTkNUSU9OX0FSSVRZIFwKLSAgICAg
ICAgLCBwYXJhbSBcCi0gICAgICAgICkgXAotICAgIC8qKi8KLQotIyAgIGRlZmluZSBBVVg3Nzgw
NzZfQVBQTFlfREVGX1BBUkFNUyhwYXJhbSwgdmFsdWUpIFwKLSAgICBCT09TVF9NUExfUFBfREVG
QVVMVF9QQVJBTVMoIFwKLSAgICAgICAgICBCT09TVF9NUExfTElNSVRfTUVUQUZVTkNUSU9OX0FS
SVRZIFwKLSAgICAgICAgLCBwYXJhbSBcCi0gICAgICAgICwgdmFsdWUgXAotICAgICAgICApIFwK
LSAgICAvKiovCi0KLSMgICBkZWZpbmUgQVVYNzc4MDc2X0FQUExZX05fUEFSQU1TKG4sIHBhcmFt
KSBcCi0gICAgQk9PU1RfTVBMX1BQX1BBUkFNUyhuLCBwYXJhbSkgXAotICAgIC8qKi8KLQotIyAg
IGRlZmluZSBBVVg3NzgwNzZfQVBQTFlfTl9DT01NQV9QQVJBTVMobiwgcGFyYW0pIFwKLSAgICBC
T09TVF9QUF9DT01NQV9JRihuKSBcCi0gICAgQk9PU1RfTVBMX1BQX1BBUkFNUyhuLCBwYXJhbSkg
XAotICAgIC8qKi8KLQotIyAgIGRlZmluZSBBVVg3NzgwNzZfQVBQTFlfTl9QQVJUSUFMX1NQRUNf
UEFSQU1TKG4sIHBhcmFtLCBkZWYpIFwKLSAgICBCT09TVF9QUF9DT01NQV9JRihuKSBcCi0gICAg
Qk9PU1RfTVBMX1BQX1BBUlRJQUxfU1BFQ19QQVJBTVMobiwgcGFyYW0sIGRlZikgXAotICAgIC8q
Ki8KLSAgICAKLSMgICBkZWZpbmUgQVVYNzc4MDc2X0FQUExZX05fU1BFQ19QQVJBTVMobiwgcGFy
YW0pIFwKLSAgICBCT09TVF9NUExfUFBfRU5VTShCT09TVF9QUF9JTkMobiksIHBhcmFtKSBcCi0g
ICAgLyoqLwotCi0KLSNkZWZpbmUgQk9PU1RfUFBfSVRFUkFUSU9OX1BBUkFNU18xIFwKLSAgICAo
MywoMCwgQk9PU1RfTVBMX0xJTUlUX01FVEFGVU5DVElPTl9BUklUWSwgPGJvb3N0L21wbC9hcHBs
eS5ocHA+KSkKLSNpbmNsdWRlIEJPT1NUX1BQX0lURVJBVEUoKQotCi0jICAgaWYgIWRlZmluZWQo
Qk9PU1RfTVBMX0NGR19OT19BUFBMWV9URU1QTEFURSkKLS8vIHJlYWwgQysrIHZlcnNpb24gaXMg
YWxyZWFkeSB0YWtlbiBjYXJlIG9mCi0jICAgaWYgZGVmaW5lZChCT09TVF9OT19URU1QTEFURV9Q
QVJUSUFMX1NQRUNJQUxJWkFUSU9OKQotCi1uYW1lc3BhY2UgYXV4IHsKLS8vIGFwcGx5X2NvdW50
X2FyZ3MKLSNkZWZpbmUgQVVYNzc4MDc2X0NPVU5UX0FSR1NfUFJFRklYIGFwcGx5Ci0jZGVmaW5l
IEFVWDc3ODA3Nl9DT1VOVF9BUkdTX0RFRkFVTFQgbmEKLSNkZWZpbmUgQVVYNzc4MDc2X0NPVU5U
X0FSR1NfQVJJVFkgQk9PU1RfTVBMX0xJTUlUX01FVEFGVU5DVElPTl9BUklUWQotI2luY2x1ZGUg
PGJvb3N0L21wbC9hdXhfL2NvdW50X2FyZ3MuaHBwPgotfQotCi0KLXRlbXBsYXRlPAotICAgICAg
dHlwZW5hbWUgRiwgQVVYNzc4MDc2X0FQUExZX0RFRl9QQVJBTVModHlwZW5hbWUgVCwgbmEpCi0g
ICAgPgotc3RydWN0IGFwcGx5Ci0gICAgOiBhdXg6OmFwcGx5X2Nob29zZXI8IAotICAgICAgICAg
IGF1eDo6YXBwbHlfY291bnRfYXJnczwgQVVYNzc4MDc2X0FQUExZX1BBUkFNUyhUKSA+Ojp2YWx1
ZQotICAgICAgICA+Ojp0ZW1wbGF0ZSByZXN1bHRfPCBGLCBBVVg3NzgwNzZfQVBQTFlfUEFSQU1T
KFQpID46OnR5cGUKLXsKLX07Ci0KLSMgICBlbmRpZiAvLyBCT09TVF9OT19URU1QTEFURV9QQVJU
SUFMX1NQRUNJQUxJWkFUSU9OCi0jICAgZW5kaWYgLy8gQk9PU1RfTVBMX0NGR19OT19BUFBMWV9U
RU1QTEFURQotCi0jICAgdW5kZWYgQVVYNzc4MDc2X0FQUExZX05fU1BFQ19QQVJBTVMKLSMgICB1
bmRlZiBBVVg3NzgwNzZfQVBQTFlfTl9QQVJUSUFMX1NQRUNfUEFSQU1TCi0jICAgdW5kZWYgQVVY
Nzc4MDc2X0FQUExZX05fQ09NTUFfUEFSQU1TCi0jICAgdW5kZWYgQVVYNzc4MDc2X0FQUExZX05f
UEFSQU1TCi0jICAgdW5kZWYgQVVYNzc4MDc2X0FQUExZX0RFRl9QQVJBTVMKLSMgICB1bmRlZiBB
VVg3NzgwNzZfQVBQTFlfUEFSQU1TCi0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQ0ZHX05P
X1BSRVBST0NFU1NFRF9IRUFERVJTCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FQUExZX0hQUF9JTkNM
VURFRAotCi0vLy8vLyBpdGVyYXRpb24sIGRlcHRoID09IDEKLQotLy8gRm9yIGdjYyA0LjQgY29t
cGF0YWJpbGl0eSwgd2UgbXVzdCBpbmNsdWRlIHRoZQotLy8gQk9PU1RfUFBfSVRFUkFUSU9OX0RF
UFRIIHRlc3QgaW5zaWRlIGFuICNlbHNlIGNsYXVzZS4KLSNlbHNlIC8vIEJPT1NUX1BQX0lTX0lU
RVJBVElORwotI2lmIEJPT1NUX1BQX0lURVJBVElPTl9ERVBUSCgpID09IDEKLQotIyAgIGRlZmlu
ZSBpXyBCT09TVF9QUF9GUkFNRV9JVEVSQVRJT04oMSkKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBl
bmFtZSBGIEFVWDc3ODA3Nl9BUFBMWV9OX0NPTU1BX1BBUkFNUyhpXywgdHlwZW5hbWUgVCkKLSAg
ICA+Ci1zdHJ1Y3QgQk9PU1RfUFBfQ0FUKGFwcGx5LGlfKQotI2lmICFCT09TVF9XT1JLQVJPVU5E
KEJPT1NUX01TVkMsIDwgMTMwMCkKLSAgICA6IEJPT1NUX1BQX0NBVChhcHBseV93cmFwLGlfKTwg
Ci0gICAgICAgICAgdHlwZW5hbWUgbGFtYmRhPEY+Ojp0eXBlCi0gICAgICAgIEFVWDc3ODA3Nl9B
UFBMWV9OX0NPTU1BX1BBUkFNUyhpXywgVCkKLSAgICAgICAgPgotewotI2Vsc2UKLXsKLSAgICB0
eXBlZGVmIHR5cGVuYW1lIEJPT1NUX1BQX0NBVChhcHBseV93cmFwLGlfKTwgCi0gICAgICAgICAg
dHlwZW5hbWUgbGFtYmRhPEY+Ojp0eXBlCi0gICAgICAgIEFVWDc3ODA3Nl9BUFBMWV9OX0NPTU1B
X1BBUkFNUyhpXywgVCkKLSAgICAgICAgPjo6dHlwZSB0eXBlOwotI2VuZGlmCi0gICAgQk9PU1Rf
TVBMX0FVWF9MQU1CREFfU1VQUE9SVCgKLSAgICAgICAgICBCT09TVF9QUF9JTkMoaV8pCi0gICAg
ICAgICwgQk9PU1RfUFBfQ0FUKGFwcGx5LGlfKQotICAgICAgICAsIChGIEFVWDc3ODA3Nl9BUFBM
WV9OX0NPTU1BX1BBUkFNUyhpXyxUKSkKLSAgICAgICAgKQotfTsKLQotCi0jaWYgZGVmaW5lZChC
T09TVF9NUExfQ0ZHX01TVkNfRVRJX0JVRykKLS8vLyB3b3JrYXJvdW5kIGZvciBFVEkgYnVnCi10
ZW1wbGF0ZTw+Ci1zdHJ1Y3QgQk9PU1RfUFBfQ0FUKGFwcGx5LGlfKTxBVVg3NzgwNzZfQVBQTFlf
Tl9TUEVDX1BBUkFNUyhpXywgaW50KT4KLXsKLSAgICB0eXBlZGVmIGludCB0eXBlOwotfTsKLSNl
bmRpZgotCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19BUFBMWV9URU1QTEFURSkK
LSMgICBpZiAhZGVmaW5lZChCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9O
KQotCi0jaWYgaV8gPT0gQk9PU1RfTVBMX0xJTUlUX01FVEFGVU5DVElPTl9BUklUWQotLy8vIHBy
aW1hcnkgdGVtcGxhdGUgKG5vdCBhIHNwZWNpYWxpemF0aW9uISkKLXRlbXBsYXRlPAotICAgICAg
dHlwZW5hbWUgRiBBVVg3NzgwNzZfQVBQTFlfTl9DT01NQV9QQVJBTVMoaV8sIHR5cGVuYW1lIFQp
Ci0gICAgPgotc3RydWN0IGFwcGx5Ci0gICAgOiBCT09TVF9QUF9DQVQoYXBwbHksaV8pPCBGIEFV
WDc3ODA3Nl9BUFBMWV9OX0NPTU1BX1BBUkFNUyhpXywgVCkgPgotewotfTsKLSNlbHNlCi10ZW1w
bGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYgQVVYNzc4MDc2X0FQUExZX05fQ09NTUFfUEFSQU1TKGlf
LCB0eXBlbmFtZSBUKQotICAgID4KLXN0cnVjdCBhcHBseTwgRiBBVVg3NzgwNzZfQVBQTFlfTl9Q
QVJUSUFMX1NQRUNfUEFSQU1TKGlfLCBULCBuYSkgPgotICAgIDogQk9PU1RfUFBfQ0FUKGFwcGx5
LGlfKTwgRiBBVVg3NzgwNzZfQVBQTFlfTl9DT01NQV9QQVJBTVMoaV8sIFQpID4KLXsKLX07Ci0j
ZW5kaWYKLQotIyAgIGVsc2UgLy8gQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpB
VElPTgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19BUFBMWV9URU1QTEFURSkKLW5h
bWVzcGFjZSBhdXggewotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgYXBwbHlfY2hvb3NlcjxpXz4KLXsK
LSAgICB0ZW1wbGF0ZTwKLSAgICAgICAgICB0eXBlbmFtZSBGLCBBVVg3NzgwNzZfQVBQTFlfUEFS
QU1TKHR5cGVuYW1lIFQpCi0gICAgICAgID4KLSAgICBzdHJ1Y3QgcmVzdWx0XwotICAgIHsKLSAg
ICAgICAgdHlwZWRlZiBCT09TVF9QUF9DQVQoYXBwbHksaV8pPAotICAgICAgICAgICAgICBGIEFV
WDc3ODA3Nl9BUFBMWV9OX0NPTU1BX1BBUkFNUyhpXywgVCkKLSAgICAgICAgICAgID4gdHlwZTsK
LSAgICB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgYXV4Ci0jZW5kaWYKLQotIyAgIGVuZGlmIC8v
IEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04KLSMgICBlbmRpZiAvLyBC
T09TVF9NUExfQ0ZHX05PX0FQUExZX1RFTVBMQVRFCi0KLSMgICB1bmRlZiBpXwotCi0jZW5kaWYg
Ly8gQk9PU1RfUFBfSVRFUkFUSU9OX0RFUFRIKCkKLSNlbmRpZiAvLyBCT09TVF9QUF9JU19JVEVS
QVRJTkcKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21wbC9hcHBseV9md2QuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2FwcGx5X2Z3ZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDVmNWZhNzg5MTYwMWZlYmRkNzNjYzhlZTAzNWVjMTY0OGFiNTIxNGQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2FwcGx5X2Z3ZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MDcgKzAsMCBAQAotCi0jaWYgIWRlZmluZWQoQk9PU1RfUFBfSVNfSVRFUkFUSU5HKQotCi0vLy8v
LyBoZWFkZXIgYm9keQotCi0jaWZuZGVmIEJPT1NUX01QTF9BUFBMWV9GV0RfSFBQX0lOQ0xVREVE
Ci0jZGVmaW5lIEJPT1NUX01QTF9BUFBMWV9GV0RfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdo
dCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2
aXNpb24kCi0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotIyAg
IGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hLmhwcD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9v
c3QvbXBsL2F1eF8vY29uZmlnL3VzZV9wcmVwcm9jZXNzZWQuaHBwPgotCi0jaWYgIWRlZmluZWQo
Qk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVSUykgXAotICAgICYmICFkZWZpbmVk
KEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BS
RVBST0NFU1NFRF9IRUFERVIgYXBwbHlfZndkLmhwcAotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9h
dXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcD4KLQotI2Vsc2UKLQotIyAgIGluY2x1ZGUgPGJv
b3N0L21wbC9saW1pdHMvYXJpdHkuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3By
ZXByb2Nlc3Nvci9wYXJhbXMuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ByZXBy
b2Nlc3Nvci9kZWZhdWx0X3BhcmFtcy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8v
Y29uZmlnL2N0cHMuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL250dHBfZGVjbC5o
cHA+Ci0KLSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29tbWFfaWYuaHBwPgotIyAg
IGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9pdGVyYXRlLmhwcD4KLSMgICBpbmNsdWRlIDxi
b29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcD4KLQotLy8gYWd1cnQsIDE1L2phbi8wMjogdG9wLWxl
dmVsICdhcHBseScgdGVtcGxhdGUgZ2l2ZXMgYW4gSUNFIG9uIE1TVkMKLS8vIChmb3Iga25vd24g
cmVhc29ucykKLSNpZiBCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01TVkMsIDwgMTMwMCkKLSMgICBk
ZWZpbmUgQk9PU1RfTVBMX0NGR19OT19BUFBMWV9URU1QTEFURQotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi0vLyBsb2NhbCBtYWNybywgI3VuZGVmLWluZWQg
YXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9BUFBMWV9ERUZf
UEFSQU1TKHBhcmFtLCB2YWx1ZSkgXAotICAgIEJPT1NUX01QTF9QUF9ERUZBVUxUX1BBUkFNUygg
XAotICAgICAgICAgIEJPT1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkgXAotICAgICAg
ICAsIHBhcmFtIFwKLSAgICAgICAgLCB2YWx1ZSBcCi0gICAgICAgICkgXAotICAgIC8qKi8KLQot
IyAgIGRlZmluZSBBVVg3NzgwNzZfQVBQTFlfTl9DT01NQV9QQVJBTVMobiwgcGFyYW0pIFwKLSAg
ICBCT09TVF9QUF9DT01NQV9JRihuKSBcCi0gICAgQk9PU1RfTVBMX1BQX1BBUkFNUyhuLCBwYXJh
bSkgXAotICAgIC8qKi8KLQotIyAgIGlmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fQVBQTFlf
VEVNUExBVEUpCi0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJ
QUxJWkFUSU9OKQotLy8gZm9yd2FyZCBkZWNsYXJhdGlvbgotdGVtcGxhdGU8Ci0gICAgICB0eXBl
bmFtZSBGLCBBVVg3NzgwNzZfQVBQTFlfREVGX1BBUkFNUyh0eXBlbmFtZSBULCBuYSkKLSAgICA+
Ci1zdHJ1Y3QgYXBwbHk7Ci0jZWxzZQotbmFtZXNwYWNlIGF1eCB7Ci10ZW1wbGF0ZTwgQk9PU1Rf
QVVYX05UVFBfREVDTChpbnQsIGFyaXR5XykgPiBzdHJ1Y3QgYXBwbHlfY2hvb3NlcjsKLX0KLSNl
bmRpZgotCi0jICAgZW5kaWYgLy8gQk9PU1RfTVBMX0NGR19OT19BUFBMWV9URU1QTEFURQotCi0j
ZGVmaW5lIEJPT1NUX1BQX0lURVJBVElPTl9QQVJBTVNfMSBcCi0gICAgKDMsKDAsIEJPT1NUX01Q
TF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFksIDxib29zdC9tcGwvYXBwbHlfZndkLmhwcD4pKQot
I2luY2x1ZGUgQk9PU1RfUFBfSVRFUkFURSgpCi0KLQotIyAgIHVuZGVmIEFVWDc3ODA3Nl9BUFBM
WV9OX0NPTU1BX1BBUkFNUwotIyAgIHVuZGVmIEFVWDc3ODA3Nl9BUFBMWV9ERUZfUEFSQU1TCi0K
LX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQ0ZHX05PX1BSRVBST0NFU1NFRF9IRUFERVJTCi0j
ZW5kaWYgLy8gQk9PU1RfTVBMX0FQUExZX0ZXRF9IUFBfSU5DTFVERUQKLQotLy8vLy8gaXRlcmF0
aW9uCi0KLSNlbHNlCi0jZGVmaW5lIGlfIEJPT1NUX1BQX0ZSQU1FX0lURVJBVElPTigxKQotCi10
ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYgQVVYNzc4MDc2X0FQUExZX05fQ09NTUFfUEFSQU1T
KGlfLCB0eXBlbmFtZSBUKQotICAgID4KLXN0cnVjdCBCT09TVF9QUF9DQVQoYXBwbHksaV8pOwot
Ci0jdW5kZWYgaV8KLSNlbmRpZiAvLyBCT09TVF9QUF9JU19JVEVSQVRJTkcKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hcHBseV93cmFw
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hcHBs
eV93cmFwLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgwNzc3OWNmYTExZjJj
YTY0MzkzMmRiYjNiM2Y2MGE3NDY1NjIyYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9tcGwvYXBwbHlfd3JhcC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotCi0j
aWYgIWRlZmluZWQoQk9PU1RfUFBfSVNfSVRFUkFUSU5HKQotCi0vLy8vLyBoZWFkZXIgYm9keQot
Ci0jaWZuZGVmIEJPT1NUX01QTF9BUFBMWV9XUkFQX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09T
VF9NUExfQVBQTFlfV1JBUF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3Vy
dG92b3kgMjAwMC0yMDA4Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBk
b2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2lm
ICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi0jICAgaW5jbHVkZSA8Ym9v
c3QvbXBsL2F1eF8vYXJpdHkuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2hhc19h
cHBseS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbmEuaHBwPgotIyAgIGluY2x1
ZGUgPGJvb3N0L21wbC9hdXhfL21zdmNfbmV2ZXJfdHJ1ZS5ocHA+Ci0jZW5kaWYKLQotI2luY2x1
ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy91c2VfcHJlcHJvY2Vzc2VkLmhwcD4KLQotI2lmICFk
ZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMpIFwKLSAgICAmJiAh
ZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotCi0jICAgZGVmaW5lIEJPT1NU
X01QTF9QUkVQUk9DRVNTRURfSEVBREVSIGFwcGx5X3dyYXAuaHBwCi0jICAgaW5jbHVkZSA8Ym9v
c3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwPgotCi0jZWxzZQotCi0jICAgaW5j
bHVkZSA8Ym9vc3QvbXBsL2xpbWl0cy9hcml0eS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBs
L2F1eF8vcHJlcHJvY2Vzc29yL3BhcmFtcy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1
eF8vcHJlcHJvY2Vzc29yL2VudW0uaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3By
ZXByb2Nlc3Nvci9hZGQuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9i
Y2MuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9jdHBzLmhwcD4KLSMg
ICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvZHRwLmhwcD4KLSMgICBpbmNsdWRlIDxi
b29zdC9tcGwvYXV4Xy9jb25maWcvZXRpLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4
Xy9jb25maWcvbXN2Yy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3dv
cmthcm91bmQuaHBwPgotCi0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbW1hX2lm
LmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9hbmQuaHBwPgot
IyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9pbmMuaHBwPgotIyAgIGluY2x1ZGUgPGJv
b3N0L3ByZXByb2Nlc3Nvci9pdGVyYXRlLmhwcD4KLQotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1l
c3BhY2UgbXBsIHsKLQotLy8gbG9jYWwgbWFjcm9zLCAjdW5kZWYtaW5lZCBhdCB0aGUgZW5kIG9m
IHRoZSBoZWFkZXIKLSMgICBkZWZpbmUgQVVYNzc4MDc2X0FQUExZX1dSQVBfUEFSQU1TKG4sIHBh
cmFtKSBcCi0gICAgQk9PU1RfTVBMX1BQX1BBUkFNUyhuLCBwYXJhbSkgXAotICAgIC8qKi8KLQot
IyAgIGRlZmluZSBBVVg3NzgwNzZfQVBQTFlfV1JBUF9TUEVDX1BBUkFNUyhuLCBwYXJhbSkgXAot
ICAgIEJPT1NUX01QTF9QUF9FTlVNKEJPT1NUX1BQX0lOQyhuKSwgcGFyYW0pIFwKLSAgICAvKiov
Ci0KLQotI2RlZmluZSBCT09TVF9QUF9JVEVSQVRJT05fUEFSQU1TXzEgXAotICAgICgzLCgwLCBC
T09TVF9NUExfTElNSVRfTUVUQUZVTkNUSU9OX0FSSVRZLCA8Ym9vc3QvbXBsL2FwcGx5X3dyYXAu
aHBwPikpCi0jaW5jbHVkZSBCT09TVF9QUF9JVEVSQVRFKCkKLQotCi0jICAgdW5kZWYgQVVYNzc4
MDc2X0FQUExZX1dSQVBfU1BFQ19QQVJBTVMKLSMgICB1bmRlZiBBVVg3NzgwNzZfQVBQTFlfV1JB
UF9QQVJBTVMKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VE
X0hFQURFUlMKLSNlbmRpZiAvLyBCT09TVF9NUExfQVBQTFlfV1JBUF9IUFBfSU5DTFVERUQKLQot
Ly8vLy8gaXRlcmF0aW9uLCBkZXB0aCA9PSAxCi0KLS8vIEZvciBnY2MgNC40IGNvbXBhdGFiaWxp
dHksIHdlIG11c3QgaW5jbHVkZSB0aGUKLS8vIEJPT1NUX1BQX0lURVJBVElPTl9ERVBUSCB0ZXN0
IGluc2lkZSBhbiAjZWxzZSBjbGF1c2UuCi0jZWxzZSAvLyBCT09TVF9QUF9JU19JVEVSQVRJTkcK
LSNpZiBCT09TVF9QUF9JVEVSQVRJT05fREVQVEgoKSA9PSAxCi0KLSMgICBkZWZpbmUgaV8gQk9P
U1RfUFBfRlJBTUVfSVRFUkFUSU9OKDEpCi0KLSMgICBpZiBCT09TVF9XT1JLQVJPVU5EKEJPT1NU
X01TVkMsIDwgMTMwMCkKLS8vIE1TVkMgdmVyc2lvbgotCi0jZGVmaW5lIEFVWDc3ODA3Nl9NU1ZD
X0RUV19OQU1FIEJPT1NUX1BQX0NBVChtc3ZjX2FwcGx5LGlfKQotI2RlZmluZSBBVVg3NzgwNzZf
TVNWQ19EVFdfT1JJR0lOQUxfTkFNRSBhcHBseQotI2RlZmluZSBBVVg3NzgwNzZfTVNWQ19EVFdf
QVJJVFkgaV8KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9tc3ZjX2R0dy5ocHA+Ci0KLXRlbXBs
YXRlPAotICAgICAgdHlwZW5hbWUgRiBCT09TVF9QUF9DT01NQV9JRihpXykgQVVYNzc4MDc2X0FQ
UExZX1dSQVBfUEFSQU1TKGlfLCB0eXBlbmFtZSBUKQotICAgID4KLXN0cnVjdCBCT09TVF9QUF9D
QVQoYXBwbHlfd3JhcCxpXykKLXsKLSAgICAvLyBNZXRhZnVuY3Rpb24gZm9yd2FyZGluZyBjb25m
dXNlcyB2YzYKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEJPT1NUX1BQX0NBVChtc3ZjX2FwcGx5LGlf
KTxGPjo6dGVtcGxhdGUgcmVzdWx0XzwKLSAgICAgICAgICBBVVg3NzgwNzZfQVBQTFlfV1JBUF9Q
QVJBTVMoaV8sIFQpCi0gICAgICAgID46OnR5cGUgdHlwZTsKLX07Ci0KLSMgICBlbGlmIGRlZmlu
ZWQoQk9PU1RfTVBMX0NGR19CUk9LRU5fREVGQVVMVF9QQVJBTUVURVJTX0lOX05FU1RFRF9URU1Q
TEFURVMpCi0vLyBNV0NXL0JvcmxhbmQgdmVyc2lvbgotCi10ZW1wbGF0ZTwKLSAgICAgIGludCBO
LCB0eXBlbmFtZSBGIEJPT1NUX1BQX0NPTU1BX0lGKGlfKSBBVVg3NzgwNzZfQVBQTFlfV1JBUF9Q
QVJBTVMoaV8sIHR5cGVuYW1lIFQpCi0gICAgPgotc3RydWN0IEJPT1NUX1BQX0NBVChhcHBseV93
cmFwX2ltcGwsaV8pOwotCi0jZGVmaW5lIEJPT1NUX1BQX0lURVJBVElPTl9QQVJBTVNfMiBcCi0g
ICAgKDMsKDAsIEJPT1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkgLSBpXywgPGJvb3N0
L21wbC9hcHBseV93cmFwLmhwcD4pKQotI2luY2x1ZGUgQk9PU1RfUFBfSVRFUkFURSgpCi0KLXRl
bXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiBCT09TVF9QUF9DT01NQV9JRihpXykgQVVYNzc4MDc2
X0FQUExZX1dSQVBfUEFSQU1TKGlfLCB0eXBlbmFtZSBUKQotICAgID4KLXN0cnVjdCBCT09TVF9Q
UF9DQVQoYXBwbHlfd3JhcCxpXykKLSAgICA6IEJPT1NUX1BQX0NBVChhcHBseV93cmFwX2ltcGws
aV8pPAotICAgICAgICAgIDo6Ym9vc3Q6Om1wbDo6YXV4Ojphcml0eTxGLGlfPjo6dmFsdWUKLSAg
ICAgICAgLCBGCi0gICAgICAgIEJPT1NUX1BQX0NPTU1BX0lGKGlfKSBBVVg3NzgwNzZfQVBQTFlf
V1JBUF9QQVJBTVMoaV8sIFQpCi0gICAgICAgID46OnR5cGUKLXsKLX07Ci0KLSMgICBlbHNlCi0v
LyBJU085OCBDKyssIHdpdGggbWlub3IgY29uY2Vzc2lvbiB0byB2YzcKLQotdGVtcGxhdGU8Ci0g
ICAgICB0eXBlbmFtZSBGIEJPT1NUX1BQX0NPTU1BX0lGKGlfKSBBVVg3NzgwNzZfQVBQTFlfV1JB
UF9QQVJBTVMoaV8sIHR5cGVuYW1lIFQpCi0jaWYgaV8gPT0gMAotICAgICwgdHlwZW5hbWUgaGFz
X2FwcGx5XyA9IHR5cGVuYW1lIGF1eDo6aGFzX2FwcGx5PEY+Ojp0eXBlCi0jZW5kaWYKLSAgICA+
Ci1zdHJ1Y3QgQk9PU1RfUFBfQ0FUKGFwcGx5X3dyYXAsaV8pCi0vLyBtZXRhZnVuY3Rpb24gZm9y
d2FyZGluZyBjb25mdXNlcyBNU1ZDIDcuMAotI2lmICFCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01T
VkMsID09IDEzMDApCi0gICAgOiBGOjp0ZW1wbGF0ZSBhcHBseTwgQVVYNzc4MDc2X0FQUExZX1dS
QVBfUEFSQU1TKGlfLCBUKSA+Ci17Ci0jZWxzZQoteyAgICAKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IEY6OnRlbXBsYXRlIGFwcGx5PAotICAgICAgICAgQVVYNzc4MDc2X0FQUExZX1dSQVBfUEFSQU1T
KGlfLCBUKQotICAgICAgICA+Ojp0eXBlIHR5cGU7Ci0jZW5kaWYKLX07Ci0KLSNpZiBpXyA9PSAw
ICYmICFkZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04pCi10
ZW1wbGF0ZTwgdHlwZW5hbWUgRiA+Ci1zdHJ1Y3QgQk9PU1RfUFBfQ0FUKGFwcGx5X3dyYXAsaV8p
PEYsdHJ1ZV8+Ci0gICAgOiBGOjphcHBseQotewotfTsKLSNlbmRpZgotCi0jICAgZW5kaWYgLy8g
d29ya2Fyb3VuZHMKLQotI2lmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19NU1ZDX0VUSV9CVUcpCi0v
Ly8gd29ya2Fyb3VuZCBmb3IgRVRJIGJ1ZwotdGVtcGxhdGU8Pgotc3RydWN0IEJPT1NUX1BQX0NB
VChhcHBseV93cmFwLGlfKTxBVVg3NzgwNzZfQVBQTFlfV1JBUF9TUEVDX1BBUkFNUyhpXywgaW50
KT4KLXsKLSAgICB0eXBlZGVmIGludCB0eXBlOwotfTsKLSNlbmRpZgotCi0jICAgdW5kZWYgaV8K
LQotLy8vLy8gaXRlcmF0aW9uLCBkZXB0aCA9PSAyCi0KLSNlbGlmIEJPT1NUX1BQX0lURVJBVElP
Tl9ERVBUSCgpID09IDIKLQotIyAgIGRlZmluZSBqXyBCT09TVF9QUF9GUkFNRV9JVEVSQVRJT04o
MikKLQotI2lmIGlfID09IDAgJiYgal8gPT0gMCBcCi0gICAgJiYgZGVmaW5lZChCT09TVF9NUExf
Q0ZHX0JDQzU5MF9XT1JLQVJPVU5EUykgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdf
Tk9fSEFTX0FQUExZKQotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgRiwgYm9vbCBGX2hhc19hcHBseSA+
Ci1zdHJ1Y3QgYXBwbHlfd3JhcF9pbXBsMF9iY2IgewotICAgIHR5cGVkZWYgdHlwZW5hbWUgRjo6
dGVtcGxhdGUgYXBwbHk8IG5hID4gdHlwZTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBGID4K
LXN0cnVjdCBhcHBseV93cmFwX2ltcGwwX2JjYjwgRiwgdHJ1ZSA+IHsKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIEY6OmFwcGx5IHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYg
Qk9PU1RfUFBfQ09NTUFfSUYoaV8pIEFVWDc3ODA3Nl9BUFBMWV9XUkFQX1BBUkFNUyhpXywgdHlw
ZW5hbWUgVCkKLSAgICA+Ci1zdHJ1Y3QgQk9PU1RfUFBfQ0FUKGFwcGx5X3dyYXBfaW1wbCxpXyk8
Ci0gICAgICAgICAgQk9PU1RfTVBMX1BQX0FERChpXywgal8pCi0gICAgICAgICwgRgotICAgICAg
ICBCT09TVF9QUF9DT01NQV9JRihpXykgQVVYNzc4MDc2X0FQUExZX1dSQVBfUEFSQU1TKGlfLCBU
KQotICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiBhcHBseV93cmFwX2ltcGwwX2JjYjwgRiwgYXV4
OjpoYXNfYXBwbHk8IEYgPjo6dmFsdWUgPjo6dHlwZSB0eXBlOwotfTsKLSNlbHNlCi0KLXRlbXBs
YXRlPAotICAgICAgdHlwZW5hbWUgRiBCT09TVF9QUF9DT01NQV9JRihpXykgQVVYNzc4MDc2X0FQ
UExZX1dSQVBfUEFSQU1TKGlfLCB0eXBlbmFtZSBUKQotICAgID4KLXN0cnVjdCBCT09TVF9QUF9D
QVQoYXBwbHlfd3JhcF9pbXBsLGlfKTwKLSAgICAgICAgICBCT09TVF9NUExfUFBfQUREKGlfLCBq
XykKLSAgICAgICAgLCBGCi0gICAgICAgIEJPT1NUX1BQX0NPTU1BX0lGKGlfKSBBVVg3NzgwNzZf
QVBQTFlfV1JBUF9QQVJBTVMoaV8sIFQpCi0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIEY6OnRlbXBsYXRlIGFwcGx5PAotICAgICAgICAgIEFVWDc3ODA3Nl9BUFBMWV9XUkFQX1BB
UkFNUyhpXywgVCkKLSNpZiBpXyA9PSAwICYmIGpfID09IDAKLS8vLyBzaW5jZSB0aGUgZGVmYXVs
dHMgYXJlICJsb3N0Iiwgd2UgaGF2ZSB0byBwYXNzICpzb21ldGhpbmcqIGV2ZW4gZm9yIG51bGxh
cnkKLS8vLyBtZXRhZnVuY3Rpb24gY2xhc3NlcwotICAgICAgICBuYQotI2Vsc2UKLSAgICAgICAg
Qk9PU1RfUFBfQ09NTUFfSUYoQk9PU1RfUFBfQU5EKGlfLCBqXykpIEJPT1NUX01QTF9QUF9FTlVN
KGpfLCBuYSkKLSNlbmRpZgotICAgICAgICA+IHR5cGU7Ci19OwotCi0jZW5kaWYKLQotIyAgIHVu
ZGVmIGpfCi0KLSNlbmRpZiAvLyBCT09TVF9QUF9JVEVSQVRJT05fREVQVEgoKQotI2VuZGlmIC8v
IEJPT1NUX1BQX0lTX0lURVJBVElORwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2FyZy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXJnLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjUxYWRmYWVhYjkzMzMxY2EzMTFjMWU2MDMzYzY4MzViZTA3Y2Q2Zi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXJnLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEz
MSArMCwwIEBACi0KLSNpZiAhZGVmaW5lZChCT09TVF9QUF9JU19JVEVSQVRJTkcpCi0KLS8vLy8v
IGhlYWRlciBib2R5Ci0KLSNpZm5kZWYgQk9PU1RfTVBMX0FSR19IUFBfSU5DTFVERUQKLSNkZWZp
bmUgQk9PU1RfTVBMX0FSR19IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IFBldGVyIERpbW92
IDIwMDEtMjAwMgotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMS0yMDA0Ci0vLwot
Ly8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24g
MS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkg
YXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAk
SWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9Q
UkVQUk9DRVNTSU5HX01PREUpCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2FyZ19md2QuaHBwPgot
IyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9t
cGwvYXV4Xy9uYV9hc3NlcnQuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2FyaXR5
X3NwZWMuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2FyZ190eXBlZGVmLmhwcD4K
LSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3N0YXRpY19jb25zdGFu
dC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3VzZV9wcmVwcm9jZXNzZWQu
aHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVS
UykgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi0KLSMg
ICBkZWZpbmUgQk9PU1RfTVBMX1BSRVBST0NFU1NFRF9IRUFERVIgYXJnLmhwcAotIyAgIGluY2x1
ZGUgPGJvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcD4KLQotI2Vsc2UKLQot
IyAgIGluY2x1ZGUgPGJvb3N0L21wbC9saW1pdHMvYXJpdHkuaHBwPgotIyAgIGluY2x1ZGUgPGJv
b3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9kZWZhdWx0X3BhcmFtcy5ocHA+Ci0jICAgaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL3BhcmFtcy5ocHA+Ci0jICAgaW5jbHVkZSA8
Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2xhbWJkYS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBs
L2F1eF8vY29uZmlnL2R0cC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbnR0cF9k
ZWNsLmhwcD4KLQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9pdGVyYXRlLmhwcD4K
LSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvaW5jLmhwcD4KLSMgICBpbmNsdWRlIDxi
b29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcD4KLQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9O
QU1FU1BBQ0VfT1BFTgotCi0vLyBsb2NhbCBtYWNybywgI3VuZGVmLWluZWQgYXQgdGhlIGVuZCBv
ZiB0aGUgaGVhZGVyCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19ERUZBVUxUX1BBUkFN
RVRFUlNfSU5fTkVTVEVEX1RFTVBMQVRFUykKLSMgICBkZWZpbmUgQVVYNzc4MDc2X0FSR19OX0RF
RkFVTFRfUEFSQU1TKHBhcmFtLHZhbHVlKSBcCi0gICAgQk9PU1RfTVBMX1BQX0RFRkFVTFRfUEFS
QU1TKCBcCi0gICAgICAgICAgQk9PU1RfTVBMX0xJTUlUX01FVEFGVU5DVElPTl9BUklUWSBcCi0g
ICAgICAgICwgcGFyYW0gXAotICAgICAgICAsIHZhbHVlIFwKLSAgICAgICAgKSBcCi0gICAgLyoq
LwotI2Vsc2UKLSMgICBkZWZpbmUgQVVYNzc4MDc2X0FSR19OX0RFRkFVTFRfUEFSQU1TKHBhcmFt
LHZhbHVlKSBcCi0gICAgQk9PU1RfTVBMX1BQX1BBUkFNUyggXAotICAgICAgICAgIEJPT1NUX01Q
TF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkgXAotICAgICAgICAsIHBhcmFtIFwKLSAgICAgICAg
KSBcCi0gICAgLyoqLwotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfUFBfSVRFUkFUSU9OX1BBUkFN
U18xIFwKLSAgICAoMywoMCwgQk9PU1RfTVBMX0xJTUlUX01FVEFGVU5DVElPTl9BUklUWSwgPGJv
b3N0L21wbC9hcmcuaHBwPikpCi0jaW5jbHVkZSBCT09TVF9QUF9JVEVSQVRFKCkKLQotCi0jICAg
dW5kZWYgQVVYNzc4MDc2X0FSR19OX0RFRkFVTFRfUEFSQU1TCi0KLUJPT1NUX01QTF9BVVhfTk9O
VFlQRV9BUklUWV9TUEVDKDEsaW50LGFyZykKLQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9O
QU1FU1BBQ0VfQ0xPU0UKLQotI2VuZGlmIC8vIEJPT1NUX01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VE
X0hFQURFUlMKLSNlbmRpZiAvLyBCT09TVF9NUExfQVJHX0hQUF9JTkNMVURFRAotCi0vLy8vLyBp
dGVyYXRpb24KLQotI2Vsc2UKLSNkZWZpbmUgaV8gQk9PU1RfUFBfRlJBTUVfSVRFUkFUSU9OKDEp
Ci0KLSNpZiBpXyA+IDAKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgYXJnPGlfPgotewotICAgIEJPT1NU
X1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVlID0gaV8pOwotICAgIHR5cGVkZWYgYXJnPEJPT1NU
X1BQX0lOQyhpXyk+IG5leHQ7Ci0gICAgQk9PU1RfTVBMX0FVWF9BUkdfVFlQRURFRihuYSwgdGFn
KQotICAgIEJPT1NUX01QTF9BVVhfQVJHX1RZUEVERUYobmEsIHR5cGUpCi0KLSAgICB0ZW1wbGF0
ZTwKLSAgICAgICAgICBBVVg3NzgwNzZfQVJHX05fREVGQVVMVF9QQVJBTVModHlwZW5hbWUgVSwg
bmEpCi0gICAgICAgID4KLSAgICBzdHJ1Y3QgYXBwbHkKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYg
Qk9PU1RfUFBfQ0FUKFUsaV8pIHR5cGU7Ci0gICAgICAgIEJPT1NUX01QTF9BVVhfQVNTRVJUX05P
VF9OQSh0eXBlKTsKLSAgICB9OwotfTsKLQotI2Vsc2UKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgYXJn
PC0xPgotewotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVlID0gLTEpOwotICAg
IEJPT1NUX01QTF9BVVhfQVJHX1RZUEVERUYobmEsIHRhZykKLSAgICBCT09TVF9NUExfQVVYX0FS
R19UWVBFREVGKG5hLCB0eXBlKQotCi0gICAgdGVtcGxhdGU8Ci0gICAgICAgICAgQVVYNzc4MDc2
X0FSR19OX0RFRkFVTFRfUEFSQU1TKHR5cGVuYW1lIFUsIG5hKQotICAgICAgICA+Ci0gICAgc3Ry
dWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIFUxIHR5cGU7Ci0gICAgICAgIEJPT1NU
X01QTF9BVVhfQVNTRVJUX05PVF9OQSh0eXBlKTsKLSAgICB9OwotfTsKLQotI2VuZGlmIC8vIGlf
ID4gMAotCi0jdW5kZWYgaV8KLSNlbmRpZiAvLyBCT09TVF9QUF9JU19JVEVSQVRJTkcKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hcmdf
ZndkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9h
cmdfZndkLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM0NmRjMzU1NTkwZjZh
MDNiMWUzYmQ4YzAyZGMwMDkxYTRhYTAyOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9tcGwvYXJnX2Z3ZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0KLSNpZm5k
ZWYgQk9PU1RfTVBMX0FSR19GV0RfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BUkdf
RldEX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgUGV0ZXIgRGltb3YgMjAwMS0yMDAyCi0v
LyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAxLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNl
ZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5i
b29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRl
JAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vYWRsX2JhcnJpZXIu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL250dHBfZGVjbC5ocHA+Ci0KLUJPT1NUX01Q
TF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFX09QRU4KLQotdGVtcGxhdGU8IEJPT1NUX01QTF9B
VVhfTlRUUF9ERUNMKGludCwgTikgPiBzdHJ1Y3QgYXJnOwotCi1CT09TVF9NUExfQVVYX0FETF9C
QVJSSUVSX05BTUVTUEFDRV9DTE9TRQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9ERUNMKGFy
ZykKLQotI2VuZGlmIC8vIEJPT1NUX01QTF9BUkdfRldEX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2Fzc2VydC5o
cHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXNzZXJ0
LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4NjBhNGNhZTJmMGIxOGYzYzg4
NjU5YWFlMWQ2NmZjZWEyYmJmMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwv
YXNzZXJ0LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzOSArMCwwIEBACi0KLSNpZm5kZWYgQk9P
U1RfTVBMX0FTU0VSVF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FTU0VSVF9IUFBf
SU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA2Ci0vLwot
Ly8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24g
MS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkg
YXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAk
SWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9ub3Qu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ZhbHVlX3drbmQuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L21wbC9hdXhfL25lc3RlZF90eXBlX3drbmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21w
bC9hdXhfL3llc19uby5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbmEuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9hdXhfL2FkbF9iYXJyaWVyLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0
L21wbC9hdXhfL2NvbmZpZy9udHRwLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25m
aWcvZHRwLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvZ2NjLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvbXN2Yy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F1eF8vY29uZmlnL2dwdS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmln
L3N0YXRpY19jb25zdGFudC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3Bw
X2NvdW50ZXIuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5k
LmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgotCi0jaW5jbHVk
ZSA8Ym9vc3QvY29uZmlnLmhwcD4gLy8gbWFrZSBzdXJlICdzaXplX3QnIGlzIHBsYWNlZCBpbnRv
ICdzdGQnCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLQotI2lmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1Rf
TVNWQywgPT0gMTcwMCkKLSNpbmNsdWRlIDxib29zdC9tcGwvaWYuaHBwPgotI2VuZGlmCi0KLSNp
ZiBCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENfXywgQk9PU1RfVEVTVEVEX0FUKDB4NjEwKSkg
XAotICAgIHx8IChCT09TVF9NUExfQ0ZHX0dDQyAhPSAwKSBcCi0gICAgfHwgQk9PU1RfV09SS0FS
T1VORChfX0lCTUNQUF9fLCA8PSA2MDApCi0jICAgZGVmaW5lIEJPT1NUX01QTF9DRkdfQVNTRVJU
X1VTRV9SRUxBVElPTl9OQU1FUwotI2VuZGlmCi0KLSNpZiBCT09TVF9XT1JLQVJPVU5EKF9fTVdF
UktTX18sIDwgMHgzMjAyKSBcCi0gICAgfHwgQk9PU1RfV09SS0FST1VORChfX0VER19WRVJTSU9O
X18sIDw9IDIzOCkgXAotICAgIHx8IEJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCBCT09T
VF9URVNURURfQVQoMHg2MTApKSBcCi0gICAgfHwgQk9PU1RfV09SS0FST1VORChfX0RNQ19fLCBC
T09TVF9URVNURURfQVQoMHg4NDApKQotIyAgIGRlZmluZSBCT09TVF9NUExfQ0ZHX0FTU0VSVF9C
Uk9LRU5fUE9JTlRFUl9UT19QT0lOVEVSX1RPX01FTUJFUgotI2VuZGlmCi0KLS8vIGFndXJ0LCAx
MC9ub3YvMDY6IHVzZSBlbnVtcyBmb3IgQm9ybGFuZCAod2hpY2ggY2Fubm90IGNvcGUgd2l0aCBz
dGF0aWMgY29uc3RhbnRzKSAKLS8vIGFuZCBHQ0MgKHdoaWNoIGlzc3VlcyAidW51c2VkIHZhcmlh
YmxlIiB3YXJuaW5ncyB3aGVuIHN0YXRpYyBjb25zdGFudHMgYXJlIHVzZWQgCi0vLyBhdCBhIGZ1
bmN0aW9uIHNjb3BlKQotI2lmIEJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCBCT09TVF9U
RVNURURfQVQoMHg2MTApKSBcCi0gICAgfHwgKEJPT1NUX01QTF9DRkdfR0NDICE9IDApIHx8IChC
T09TVF9NUExfQ0ZHX0dQVSAhPSAwKQotIyAgIGRlZmluZSBCT09TVF9NUExfQVVYX0FTU0VSVF9D
T05TVEFOVChULCBleHByKSBlbnVtIHsgZXhwciB9Ci0jZWxzZQotIyAgIGRlZmluZSBCT09TVF9N
UExfQVVYX0FTU0VSVF9DT05TVEFOVChULCBleHByKSBCT09TVF9TVEFUSUNfQ09OU1RBTlQoVCwg
ZXhwcikKLSNlbmRpZgotCi0KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFX09Q
RU4KLQotc3RydWN0IGZhaWxlZCB7fTsKLQotLy8gYWd1cnQsIDI0L2F1Zy8wNDogTVNWQyA3LjEg
d29ya2Fyb3VuZCBoZXJlIGFuZCBiZWxvdzogcmV0dXJuL2FjY2VwdCAKLS8vICdhc3NlcnQ8ZmFs
c2U+JyBieSByZWZlcmVuY2U7IGNhbid0IGFwcGx5IGl0IHVuY29uZGl0aW9uYWxseSAtLSBhcHBh
cmVudGx5IGl0Ci0vLyBkZWdyYWRlcyB0aGUgcXVhbGl0eSBvZiBHQ0MgZGlhZ25vc3RpY3MKLSNp
ZiBCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01TVkMsID09IDEzMTApCi0jICAgZGVmaW5lIEFVWDc3
ODA3Nl9BU1NFUlRfQVJHKHgpIHgmCi0jZWxzZQotIyAgIGRlZmluZSBBVVg3NzgwNzZfQVNTRVJU
X0FSRyh4KSB4Ci0jZW5kaWYKLQotdGVtcGxhdGU8IGJvb2wgQyA+ICBzdHJ1Y3QgYXNzZXJ0ICAg
ICAgICB7IHR5cGVkZWYgdm9pZCogdHlwZTsgfTsKLXRlbXBsYXRlPD4gICAgICAgICAgc3RydWN0
IGFzc2VydDxmYWxzZT4geyB0eXBlZGVmIEFVWDc3ODA3Nl9BU1NFUlRfQVJHKGFzc2VydCkgdHlw
ZTsgfTsKLQotdGVtcGxhdGU8IGJvb2wgQyA+Ci1pbnQgYXNzZXJ0aW9uX2ZhaWxlZCggdHlwZW5h
bWUgYXNzZXJ0PEM+Ojp0eXBlICk7Ci0KLXRlbXBsYXRlPCBib29sIEMgPgotc3RydWN0IGFzc2Vy
dGlvbgotewotICAgIHN0YXRpYyBpbnQgZmFpbGVkKCBhc3NlcnQ8ZmFsc2U+ICk7Ci19OwotCi10
ZW1wbGF0ZTw+Ci1zdHJ1Y3QgYXNzZXJ0aW9uPHRydWU+Ci17Ci0gICAgc3RhdGljIGludCBmYWls
ZWQoIHZvaWQqICk7Ci19OwotCi1zdHJ1Y3QgYXNzZXJ0XwotewotI2lmICFkZWZpbmVkKEJPT1NU
X01QTF9DRkdfTk9fREVGQVVMVF9QQVJBTUVURVJTX0lOX05FU1RFRF9URU1QTEFURVMpCi0gICAg
dGVtcGxhdGU8IHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiA9IG5hLCB0eXBlbmFtZSBUMyA9IG5h
LCB0eXBlbmFtZSBUNCA9IG5hID4gc3RydWN0IHR5cGVzIHt9OwotI2VuZGlmCi0gICAgc3RhdGlj
IGFzc2VydF8gY29uc3QgYXJnOwotICAgIGVudW0gcmVsYXRpb25zIHsgZXF1YWwgPSAxLCBub3Rf
ZXF1YWwsIGdyZWF0ZXIsIGdyZWF0ZXJfZXF1YWwsIGxlc3MsIGxlc3NfZXF1YWwgfTsKLX07Ci0K
LQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfQVNTRVJUX1VTRV9SRUxBVElPTl9OQU1FUykK
LQotYm9vbCBvcGVyYXRvcj09KCBmYWlsZWQsIGZhaWxlZCApOwotYm9vbCBvcGVyYXRvciE9KCBm
YWlsZWQsIGZhaWxlZCApOwotYm9vbCBvcGVyYXRvcj4oIGZhaWxlZCwgZmFpbGVkICk7Ci1ib29s
IG9wZXJhdG9yPj0oIGZhaWxlZCwgZmFpbGVkICk7Ci1ib29sIG9wZXJhdG9yPCggZmFpbGVkLCBm
YWlsZWQgKTsKLWJvb2wgb3BlcmF0b3I8PSggZmFpbGVkLCBmYWlsZWQgKTsKLQotI2lmIGRlZmlu
ZWQoX19FREdfVkVSU0lPTl9fKQotdGVtcGxhdGU8IGJvb2wgKCopKGZhaWxlZCwgZmFpbGVkKSwg
bG9uZyB4LCBsb25nIHkgPiBzdHJ1Y3QgYXNzZXJ0X3JlbGF0aW9uIHt9OwotIyAgIGRlZmluZSBC
T09TVF9NUExfQVVYX0FTU0VSVF9SRUxBVElPTih4LCB5LCByKSBhc3NlcnRfcmVsYXRpb248cix4
LHk+Ci0jZWxzZQotdGVtcGxhdGU8IEJPT1NUX01QTF9BVVhfTlRUUF9ERUNMKGxvbmcsIHgpLCBC
T09TVF9NUExfQVVYX05UVFBfREVDTChsb25nLCB5KSwgYm9vbCAoKikoZmFpbGVkLCBmYWlsZWQp
ID4gCi1zdHJ1Y3QgYXNzZXJ0X3JlbGF0aW9uIHt9OwotIyAgIGRlZmluZSBCT09TVF9NUExfQVVY
X0FTU0VSVF9SRUxBVElPTih4LCB5LCByKSBhc3NlcnRfcmVsYXRpb248eCx5LHI+Ci0jZW5kaWYK
LQotI2Vsc2UgLy8gQk9PU1RfTVBMX0NGR19BU1NFUlRfVVNFX1JFTEFUSU9OX05BTUVTCi0KLWJv
b3N0OjptcGw6OmF1eDo6d2VpZ2h0ZWRfdGFnPDE+Ojp0eXBlIG9wZXJhdG9yPT0oIGFzc2VydF8s
IGFzc2VydF8gKTsKLWJvb3N0OjptcGw6OmF1eDo6d2VpZ2h0ZWRfdGFnPDI+Ojp0eXBlIG9wZXJh
dG9yIT0oIGFzc2VydF8sIGFzc2VydF8gKTsKLWJvb3N0OjptcGw6OmF1eDo6d2VpZ2h0ZWRfdGFn
PDM+Ojp0eXBlIG9wZXJhdG9yPiggIGFzc2VydF8sIGFzc2VydF8gKTsKLWJvb3N0OjptcGw6OmF1
eDo6d2VpZ2h0ZWRfdGFnPDQ+Ojp0eXBlIG9wZXJhdG9yPj0oIGFzc2VydF8sIGFzc2VydF8gKTsK
LWJvb3N0OjptcGw6OmF1eDo6d2VpZ2h0ZWRfdGFnPDU+Ojp0eXBlIG9wZXJhdG9yPCggYXNzZXJ0
XywgYXNzZXJ0XyApOwotYm9vc3Q6Om1wbDo6YXV4Ojp3ZWlnaHRlZF90YWc8Nj46OnR5cGUgb3Bl
cmF0b3I8PSggYXNzZXJ0XywgYXNzZXJ0XyApOwotCi10ZW1wbGF0ZTwgYXNzZXJ0Xzo6cmVsYXRp
b25zIHIsIGxvbmcgeCwgbG9uZyB5ID4gc3RydWN0IGFzc2VydF9yZWxhdGlvbiB7fTsKLQotI2Vu
ZGlmIAotCi0jaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA9PSAxNzAwKQotCi10ZW1w
bGF0ZTxjbGFzcyBQcmVkPgotc3RydWN0IGV4dHJhY3RfYXNzZXJ0X3ByZWQ7Ci0KLXRlbXBsYXRl
PGNsYXNzIFByZWQ+Ci1zdHJ1Y3QgZXh0cmFjdF9hc3NlcnRfcHJlZDx2b2lkKFByZWQpPiB7IHR5
cGVkZWYgUHJlZCB0eXBlOyB9OwotCi10ZW1wbGF0ZTxjbGFzcyBQcmVkPgotc3RydWN0IGV2YWxf
YXNzZXJ0IHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGV4dHJhY3RfYXNzZXJ0X3ByZWQ8UHJlZD46
OnR5cGUgUDsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFA6OnR5cGUgcF90eXBlOwotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgOjpib29zdDo6bXBsOjppZl9jPHBfdHlwZTo6dmFsdWUsCi0gICAgICAgIEFV
WDc3ODA3Nl9BU1NFUlRfQVJHKGFzc2VydDxmYWxzZT4pLAotICAgICAgICBmYWlsZWQgKioqKioq
KioqKioqIFA6OioqKioqKioqKioqKgotICAgID46OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRl
PGNsYXNzIFByZWQ+Ci1zdHJ1Y3QgZXZhbF9hc3NlcnRfbm90IHsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIGV4dHJhY3RfYXNzZXJ0X3ByZWQ8UHJlZD46OnR5cGUgUDsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIFA6OnR5cGUgcF90eXBlOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgOjpib29zdDo6bXBsOjpp
Zl9jPCFwX3R5cGU6OnZhbHVlLAotICAgICAgICBBVVg3NzgwNzZfQVNTRVJUX0FSRyhhc3NlcnQ8
ZmFsc2U+KSwKLSAgICAgICAgZmFpbGVkICoqKioqKioqKioqKiA6OmJvb3N0OjptcGw6Om5vdF88
UD46OioqKioqKioqKioqKgotICAgID46OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBl
bmFtZSBUID4KLVQgbWFrZV9hc3NlcnRfYXJnKCk7Ci0KLSNlbGlmICFkZWZpbmVkKEJPT1NUX01Q
TF9DRkdfQVNTRVJUX0JST0tFTl9QT0lOVEVSX1RPX1BPSU5URVJfVE9fTUVNQkVSKQotCi10ZW1w
bGF0ZTwgYm9vbCA+IHN0cnVjdCBhc3NlcnRfYXJnX3ByZWRfaW1wbCB7IHR5cGVkZWYgaW50IHR5
cGU7IH07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBhc3NlcnRfYXJnX3ByZWRfaW1wbDx0cnVlPiB7IHR5
cGVkZWYgdm9pZCogdHlwZTsgfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFAgPiBzdHJ1Y3QgYXNz
ZXJ0X2FyZ19wcmVkCi17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBQOjp0eXBlIHBfdHlwZTsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIGFzc2VydF9hcmdfcHJlZF9pbXBsPCBwX3R5cGU6OnZhbHVlID46
OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBQID4gc3RydWN0IGFzc2VydF9h
cmdfcHJlZF9ub3QKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFA6OnR5cGUgcF90eXBlOwotICAg
IEJPT1NUX01QTF9BVVhfQVNTRVJUX0NPTlNUQU5UKCBib29sLCBwID0gIXBfdHlwZTo6dmFsdWUg
KTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFzc2VydF9hcmdfcHJlZF9pbXBsPHA+Ojp0eXBlIHR5
cGU7Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgUHJlZCA+Ci1mYWlsZWQgKioqKioqKioqKioq
IChQcmVkOjoqKioqKioqKioqKiogCi0gICAgICBhc3NlcnRfYXJnKCB2b2lkICgqKShQcmVkKSwg
dHlwZW5hbWUgYXNzZXJ0X2FyZ19wcmVkPFByZWQ+Ojp0eXBlICkKLSAgICApOwotCi10ZW1wbGF0
ZTwgdHlwZW5hbWUgUHJlZCA+Ci1mYWlsZWQgKioqKioqKioqKioqIChib29zdDo6bXBsOjpub3Rf
PFByZWQ+OjoqKioqKioqKioqKiogCi0gICAgICBhc3NlcnRfbm90X2FyZyggdm9pZCAoKikoUHJl
ZCksIHR5cGVuYW1lIGFzc2VydF9hcmdfcHJlZF9ub3Q8UHJlZD46OnR5cGUgKQotICAgICk7Ci0K
LXRlbXBsYXRlPCB0eXBlbmFtZSBQcmVkID4KLUFVWDc3ODA3Nl9BU1NFUlRfQVJHKGFzc2VydDxm
YWxzZT4pCi1hc3NlcnRfYXJnKCB2b2lkICgqKShQcmVkKSwgdHlwZW5hbWUgYXNzZXJ0X2FyZ19w
cmVkX25vdDxQcmVkPjo6dHlwZSApOwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgUHJlZCA+Ci1BVVg3
NzgwNzZfQVNTRVJUX0FSRyhhc3NlcnQ8ZmFsc2U+KQotYXNzZXJ0X25vdF9hcmcoIHZvaWQgKCop
KFByZWQpLCB0eXBlbmFtZSBhc3NlcnRfYXJnX3ByZWQ8UHJlZD46OnR5cGUgKTsKLQotCi0jZWxz
ZSAvLyBCT09TVF9NUExfQ0ZHX0FTU0VSVF9CUk9LRU5fUE9JTlRFUl9UT19QT0lOVEVSX1RPX01F
TUJFUgotICAgICAgICAKLXRlbXBsYXRlPCBib29sIGMsIHR5cGVuYW1lIFByZWQgPiBzdHJ1Y3Qg
YXNzZXJ0X2FyZ190eXBlX2ltcGwKLXsKLSAgICB0eXBlZGVmIGZhaWxlZCAgICAgICoqKioqKioq
KioqKiBQcmVkOjoqIG13Y3c4M193a25kOwotICAgIHR5cGVkZWYgbXdjdzgzX3drbmQgKioqKioq
KioqKioqKiB0eXBlOwotfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFByZWQgPiBzdHJ1Y3QgYXNz
ZXJ0X2FyZ190eXBlX2ltcGw8dHJ1ZSxQcmVkPgotewotICAgIHR5cGVkZWYgQVVYNzc4MDc2X0FT
U0VSVF9BUkcoYXNzZXJ0PGZhbHNlPikgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBQ
cmVkID4gc3RydWN0IGFzc2VydF9hcmdfdHlwZQotICAgIDogYXNzZXJ0X2FyZ190eXBlX2ltcGw8
IEJPT1NUX01QTF9BVVhfVkFMVUVfV0tORChCT09TVF9NUExfQVVYX05FU1RFRF9UWVBFX1dLTkQo
UHJlZCkpOjp2YWx1ZSwgUHJlZCA+Ci17Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgUHJlZCA+
Ci10eXBlbmFtZSBhc3NlcnRfYXJnX3R5cGU8UHJlZD46OnR5cGUgCi1hc3NlcnRfYXJnKHZvaWQg
KCopKFByZWQpLCBpbnQpOwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgUHJlZCA+Ci10eXBlbmFtZSBh
c3NlcnRfYXJnX3R5cGU8IGJvb3N0OjptcGw6Om5vdF88UHJlZD4gPjo6dHlwZSAKLWFzc2VydF9u
b3RfYXJnKHZvaWQgKCopKFByZWQpLCBpbnQpOwotCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfTVBM
X0NGR19BU1NFUlRfVVNFX1JFTEFUSU9OX05BTUVTKQotdGVtcGxhdGU8IGxvbmcgeCwgbG9uZyB5
LCBib29sICgqcikoZmFpbGVkLCBmYWlsZWQpID4KLXR5cGVuYW1lIGFzc2VydF9hcmdfdHlwZV9p
bXBsPCBmYWxzZSxCT09TVF9NUExfQVVYX0FTU0VSVF9SRUxBVElPTih4LHkscikgPjo6dHlwZQot
YXNzZXJ0X3JlbF9hcmcoIEJPT1NUX01QTF9BVVhfQVNTRVJUX1JFTEFUSU9OKHgseSxyKSApOwot
IyAgIGVsc2UKLXRlbXBsYXRlPCBhc3NlcnRfOjpyZWxhdGlvbnMgciwgbG9uZyB4LCBsb25nIHkg
PgotdHlwZW5hbWUgYXNzZXJ0X2FyZ190eXBlX2ltcGw8IGZhbHNlLGFzc2VydF9yZWxhdGlvbjxy
LHgseT4gPjo6dHlwZQotYXNzZXJ0X3JlbF9hcmcoIGFzc2VydF9yZWxhdGlvbjxyLHgseT4gKTsK
LSMgICBlbmRpZgotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0NGR19BU1NFUlRfQlJPS0VOX1BPSU5U
RVJfVE9fUE9JTlRFUl9UT19NRU1CRVIKLQotI3VuZGVmIEFVWDc3ODA3Nl9BU1NFUlRfQVJHCi0K
LUJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFX0NMT1NFCi0KLSNpZiBCT09TVF9X
T1JLQVJPVU5EKEJPT1NUX01TVkMsID09IDE3MDApCi0KLS8vIEJPT1NUX01QTF9BU1NFUlQoKHBy
ZWQ8eCwuLi4+KSkKLQotI2RlZmluZSBCT09TVF9NUExfQVNTRVJUKHByZWQpIFwKLUJPT1NUX01Q
TF9BVVhfQVNTRVJUX0NPTlNUQU5UKCBcCi0gICAgICBzdGQ6OnNpemVfdCBcCi0gICAgLCBCT09T
VF9QUF9DQVQobXBsX2Fzc2VydGlvbl9pbl9saW5lXyxCT09TVF9NUExfQVVYX1BQX0NPVU5URVIo
KSkgPSBzaXplb2YoIFwKLSAgICAgICAgICBib29zdDo6bXBsOjphc3NlcnRpb25fZmFpbGVkPGZh
bHNlPiggXAotICAgICAgICAgICAgICBib29zdDo6bXBsOjptYWtlX2Fzc2VydF9hcmc8IFwKLSAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIGJvb3N0OjptcGw6OmV2YWxfYXNzZXJ0PHZvaWQgcHJl
ZD46OnR5cGUgXAotICAgICAgICAgICAgICAgID4oKSBcCi0gICAgICAgICAgICApIFwKLSAgICAg
ICAgKSBcCi0gICAgKSBcCi0vKiovCi0KLS8vIEJPT1NUX01QTF9BU1NFUlRfTk9UKChwcmVkPHgs
Li4uPikpCi0KLSNkZWZpbmUgQk9PU1RfTVBMX0FTU0VSVF9OT1QocHJlZCkgXAotQk9PU1RfTVBM
X0FVWF9BU1NFUlRfQ09OU1RBTlQoIFwKLSAgICAgIHN0ZDo6c2l6ZV90IFwKLSAgICAsIEJPT1NU
X1BQX0NBVChtcGxfYXNzZXJ0aW9uX2luX2xpbmVfLEJPT1NUX01QTF9BVVhfUFBfQ09VTlRFUigp
KSA9IHNpemVvZiggXAotICAgICAgICAgIGJvb3N0OjptcGw6OmFzc2VydGlvbl9mYWlsZWQ8ZmFs
c2U+KCBcCi0gICAgICAgICAgICAgIGJvb3N0OjptcGw6Om1ha2VfYXNzZXJ0X2FyZzwgXAotICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgYm9vc3Q6Om1wbDo6ZXZhbF9hc3NlcnRfbm90PHZvaWQg
cHJlZD46OnR5cGUgXAotICAgICAgICAgICAgICAgID4oKSBcCi0gICAgICAgICAgICApIFwKLSAg
ICAgICAgKSBcCi0gICAgKSBcCi0vKiovCi0KLSNlbHNlCi0KLS8vIEJPT1NUX01QTF9BU1NFUlQo
KHByZWQ8eCwuLi4+KSkKLQotI2RlZmluZSBCT09TVF9NUExfQVNTRVJUKHByZWQpIFwKLUJPT1NU
X01QTF9BVVhfQVNTRVJUX0NPTlNUQU5UKCBcCi0gICAgICBzdGQ6OnNpemVfdCBcCi0gICAgLCBC
T09TVF9QUF9DQVQobXBsX2Fzc2VydGlvbl9pbl9saW5lXyxCT09TVF9NUExfQVVYX1BQX0NPVU5U
RVIoKSkgPSBzaXplb2YoIFwKLSAgICAgICAgICBib29zdDo6bXBsOjphc3NlcnRpb25fZmFpbGVk
PGZhbHNlPiggXAotICAgICAgICAgICAgICBib29zdDo6bXBsOjphc3NlcnRfYXJnKCAodm9pZCAo
KikgcHJlZCkwLCAxICkgXAotICAgICAgICAgICAgKSBcCi0gICAgICAgICkgXAotICAgICkgXAot
LyoqLwotCi0vLyBCT09TVF9NUExfQVNTRVJUX05PVCgocHJlZDx4LC4uLj4pKQotCi0jaWYgQk9P
U1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8PSAxMzAwKQotIyAgIGRlZmluZSBCT09TVF9NUExf
QVNTRVJUX05PVChwcmVkKSBcCi1lbnVtIHsgXAotICAgICAgQk9PU1RfUFBfQ0FUKG1wbF9hc3Nl
cnRpb25faW5fbGluZV8sQk9PU1RfTVBMX0FVWF9QUF9DT1VOVEVSKCkpID0gc2l6ZW9mKCBcCi0g
ICAgICAgICAgYm9vc3Q6Om1wbDo6YXNzZXJ0aW9uPGZhbHNlPjo6ZmFpbGVkKCBcCi0gICAgICAg
ICAgICAgIGJvb3N0OjptcGw6OmFzc2VydF9ub3RfYXJnKCAodm9pZCAoKikgcHJlZCkwLCAxICkg
XAotICAgICAgICAgICAgKSBcCi0gICAgICAgICkgXAotfVwKLS8qKi8KLSNlbHNlCi0jICAgZGVm
aW5lIEJPT1NUX01QTF9BU1NFUlRfTk9UKHByZWQpIFwKLUJPT1NUX01QTF9BVVhfQVNTRVJUX0NP
TlNUQU5UKCBcCi0gICAgICBzdGQ6OnNpemVfdCBcCi0gICAgLCBCT09TVF9QUF9DQVQobXBsX2Fz
c2VydGlvbl9pbl9saW5lXyxCT09TVF9NUExfQVVYX1BQX0NPVU5URVIoKSkgPSBzaXplb2YoIFwK
LSAgICAgICAgICBib29zdDo6bXBsOjphc3NlcnRpb25fZmFpbGVkPGZhbHNlPiggXAotICAgICAg
ICAgICAgICBib29zdDo6bXBsOjphc3NlcnRfbm90X2FyZyggKHZvaWQgKCopIHByZWQpMCwgMSAp
IFwKLSAgICAgICAgICAgICkgXAotICAgICAgICApIFwKLSAgICkgXAotLyoqLwotI2VuZGlmCi0K
LSNlbmRpZgotCi0vLyBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKHgsID09fCE9fDw9fDx8Pj18
PiwgeSkKLQotI2lmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19BU1NFUlRfVVNFX1JFTEFUSU9OX05B
TUVTKQotCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19BU1NFUlRfQlJPS0VOX1BPSU5U
RVJfVE9fUE9JTlRFUl9UT19NRU1CRVIpCi0vLyBhZ3VydCwgOS9ub3YvMDY6ICdlbnVtJyBiZWxv
dyBpcyBhIHdvcmthcm91bmQgZm9yIGdjYyA0LjAuNC80LjEuMSBidWdzICMyOTUyMiBhbmQgIzI5
NTE4Ci0jICAgZGVmaW5lIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT05fSU1QTChjb3VudGVyLCB4
LCByZWwsIHkpICAgICAgXAotZW51bSB7IEJPT1NUX1BQX0NBVChtcGxfYXNzZXJ0X3JlbF92YWx1
ZSxjb3VudGVyKSA9ICh4IHJlbCB5KSB9OyBcCi1CT09TVF9NUExfQVVYX0FTU0VSVF9DT05TVEFO
VCggXAotICAgICAgc3RkOjpzaXplX3QgXAotICAgICwgQk9PU1RfUFBfQ0FUKG1wbF9hc3NlcnRp
b25faW5fbGluZV8sY291bnRlcikgPSBzaXplb2YoIFwKLSAgICAgICAgYm9vc3Q6Om1wbDo6YXNz
ZXJ0aW9uX2ZhaWxlZDxCT09TVF9QUF9DQVQobXBsX2Fzc2VydF9yZWxfdmFsdWUsY291bnRlcik+
KCBcCi0gICAgICAgICAgICAoYm9vc3Q6Om1wbDo6ZmFpbGVkICoqKioqKioqKioqKiAoIGJvb3N0
OjptcGw6OmFzc2VydF9yZWxhdGlvbjwgXAotICAgICAgICAgICAgICAgICAgYm9vc3Q6Om1wbDo6
YXNzZXJ0Xzo6cmVsYXRpb25zKCBzaXplb2YoIFwKLSAgICAgICAgICAgICAgICAgICAgICBib29z
dDo6bXBsOjphc3NlcnRfOjphcmcgcmVsIGJvb3N0OjptcGw6OmFzc2VydF86OmFyZyBcCi0gICAg
ICAgICAgICAgICAgICAgICkgKSBcCi0gICAgICAgICAgICAgICAgLCB4IFwKLSAgICAgICAgICAg
ICAgICAsIHkgXAotICAgICAgICAgICAgICAgID46OioqKioqKioqKioqKikpIDAgKSBcCi0gICAg
ICAgICkgXAotICAgICkgXAotLyoqLwotIyAgIGVsc2UKLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FT
U0VSVF9SRUxBVElPTl9JTVBMKGNvdW50ZXIsIHgsIHJlbCwgeSkgICAgXAotQk9PU1RfTVBMX0FV
WF9BU1NFUlRfQ09OU1RBTlQoIFwKLSAgICAgIHN0ZDo6c2l6ZV90IFwKLSAgICAsIEJPT1NUX1BQ
X0NBVChtcGxfYXNzZXJ0X3JlbCxjb3VudGVyKSA9IHNpemVvZiggXAotICAgICAgICAgIGJvb3N0
OjptcGw6OmFzc2VydF86OmFyZyByZWwgYm9vc3Q6Om1wbDo6YXNzZXJ0Xzo6YXJnIFwKLSAgICAg
ICAgKSBcCi0gICAgKTsgXAotQk9PU1RfTVBMX0FVWF9BU1NFUlRfQ09OU1RBTlQoIGJvb2wsIEJP
T1NUX1BQX0NBVChtcGxfYXNzZXJ0X3JlbF92YWx1ZSxjb3VudGVyKSA9ICh4IHJlbCB5KSApOyBc
Ci1CT09TVF9NUExfQVVYX0FTU0VSVF9DT05TVEFOVCggXAotICAgICAgc3RkOjpzaXplX3QgXAot
ICAgICwgQk9PU1RfUFBfQ0FUKG1wbF9hc3NlcnRpb25faW5fbGluZV8sY291bnRlcikgPSBzaXpl
b2YoIFwKLSAgICAgICAgYm9vc3Q6Om1wbDo6YXNzZXJ0aW9uX2ZhaWxlZDxCT09TVF9QUF9DQVQo
bXBsX2Fzc2VydF9yZWxfdmFsdWUsY291bnRlcik+KCBcCi0gICAgICAgICAgICAgIGJvb3N0Ojpt
cGw6OmFzc2VydF9yZWxfYXJnKCBib29zdDo6bXBsOjphc3NlcnRfcmVsYXRpb248IFwKLSAgICAg
ICAgICAgICAgICAgIGJvb3N0OjptcGw6OmFzc2VydF86OnJlbGF0aW9ucyhCT09TVF9QUF9DQVQo
bXBsX2Fzc2VydF9yZWwsY291bnRlcikpIFwKLSAgICAgICAgICAgICAgICAsIHggXAotICAgICAg
ICAgICAgICAgICwgeSBcCi0gICAgICAgICAgICAgICAgPigpICkgXAotICAgICAgICAgICAgKSBc
Ci0gICAgICAgICkgXAotICAgICkgXAotLyoqLwotIyAgIGVuZGlmCi0KLSMgICBkZWZpbmUgQk9P
U1RfTVBMX0FTU0VSVF9SRUxBVElPTih4LCByZWwsIHkpIFwKLUJPT1NUX01QTF9BU1NFUlRfUkVM
QVRJT05fSU1QTChCT09TVF9NUExfQVVYX1BQX0NPVU5URVIoKSwgeCwgcmVsLCB5KSBcCi0vKiov
Ci0KLSNlbHNlIC8vICFCT09TVF9NUExfQ0ZHX0FTU0VSVF9VU0VfUkVMQVRJT05fTkFNRVMKLQot
IyAgIGlmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19BU1NFUlRfQlJPS0VOX1BPSU5URVJfVE9fUE9J
TlRFUl9UT19NRU1CRVIpCi0jICAgZGVmaW5lIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oeCwg
cmVsLCB5KSBcCi1CT09TVF9NUExfQVVYX0FTU0VSVF9DT05TVEFOVCggXAotICAgICAgc3RkOjpz
aXplX3QgXAotICAgICwgQk9PU1RfUFBfQ0FUKG1wbF9hc3NlcnRpb25faW5fbGluZV8sQk9PU1Rf
TVBMX0FVWF9QUF9DT1VOVEVSKCkpID0gc2l6ZW9mKCBcCi0gICAgICAgIGJvb3N0OjptcGw6OmFz
c2VydGlvbl9mYWlsZWQ8KHggcmVsIHkpPiggYm9vc3Q6Om1wbDo6YXNzZXJ0X3JlbF9hcmcoIFwK
LSAgICAgICAgICAgICAgYm9vc3Q6Om1wbDo6Qk9PU1RfTVBMX0FVWF9BU1NFUlRfUkVMQVRJT04o
eCx5LCgmYm9vc3Q6Om1wbDo6b3BlcmF0b3IgcmVsKSkoKSBcCi0gICAgICAgICAgICApICkgXAot
ICAgICAgICApIFwKLSAgICApIFwKLS8qKi8KLSMgICBlbHNlCi0jICAgZGVmaW5lIEJPT1NUX01Q
TF9BU1NFUlRfUkVMQVRJT04oeCwgcmVsLCB5KSBcCi1CT09TVF9NUExfQVVYX0FTU0VSVF9DT05T
VEFOVCggXAotICAgICAgc3RkOjpzaXplX3QgXAotICAgICwgQk9PU1RfUFBfQ0FUKG1wbF9hc3Nl
cnRpb25faW5fbGluZV8sQk9PU1RfTVBMX0FVWF9QUF9DT1VOVEVSKCkpID0gc2l6ZW9mKCBcCi0g
ICAgICAgIGJvb3N0OjptcGw6OmFzc2VydGlvbl9mYWlsZWQ8KHggcmVsIHkpPiggKGJvb3N0Ojpt
cGw6OmZhaWxlZCAqKioqKioqKioqKiogKCBcCi0gICAgICAgICAgICBib29zdDo6bXBsOjpCT09T
VF9NUExfQVVYX0FTU0VSVF9SRUxBVElPTih4LHksKCZib29zdDo6bXBsOjpvcGVyYXRvciByZWwp
KTo6KioqKioqKioqKioqKSkwICkgXAotICAgICAgICApIFwKLSAgICApIFwKLS8qKi8KLSMgICBl
bmRpZgotCi0jZW5kaWYKLQotCi0vLyBCT09TVF9NUExfQVNTRVJUX01TRyggKHByZWQ8eCwuLi4+
Ojp2YWx1ZSksIFVTRVJfUFJPVklERURfTUVTU0FHRSwgKHR5cGVzPHgsLi4uPikgKSAKLQotI2lm
IEJPT1NUX1dPUktBUk9VTkQoX19NV0VSS1NfXywgQk9PU1RfVEVTVEVEX0FUKDB4MzIwMikpCi0j
ICAgZGVmaW5lIEJPT1NUX01QTF9BU1NFUlRfTVNHX0lNUEwoIGNvdW50ZXIsIGMsIG1zZywgdHlw
ZXNfICkgXAotc3RydWN0IG1zZzsgXAotdHlwZWRlZiBzdHJ1Y3QgQk9PU1RfUFBfQ0FUKG1zZyxj
b3VudGVyKSA6IGJvb3N0OjptcGw6OmFzc2VydF8gXAoteyBcCi0gICAgdXNpbmcgYm9vc3Q6Om1w
bDo6YXNzZXJ0Xzo6dHlwZXM7IFwKLSAgICBzdGF0aWMgYm9vc3Q6Om1wbDo6ZmFpbGVkICoqKioq
KioqKioqKiAobXNnOjoqKioqKioqKioqKiogYXNzZXJ0X2FyZygpKSB0eXBlc18gXAotICAgIHsg
cmV0dXJuIDA7IH0gXAotfSBCT09TVF9QUF9DQVQobXBsX2Fzc2VydF9hcmcsY291bnRlcik7IFwK
LUJPT1NUX01QTF9BVVhfQVNTRVJUX0NPTlNUQU5UKCBcCi0gICAgICBzdGQ6OnNpemVfdCBcCi0g
ICAgLCBCT09TVF9QUF9DQVQobXBsX2Fzc2VydGlvbl9pbl9saW5lXyxjb3VudGVyKSA9IHNpemVv
ZiggXAotICAgICAgICBib29zdDo6bXBsOjphc3NlcnRpb248KGMpPjo6ZmFpbGVkKCBCT09TVF9Q
UF9DQVQobXBsX2Fzc2VydF9hcmcsY291bnRlcik6OmFzc2VydF9hcmcoKSApIFwKLSAgICAgICAg
KSBcCi0gICAgKSBcCi0vKiovCi0jZWxzZQotIyAgIGRlZmluZSBCT09TVF9NUExfQVNTRVJUX01T
R19JTVBMKCBjb3VudGVyLCBjLCBtc2csIHR5cGVzXyApICBcCi1zdHJ1Y3QgbXNnOyBcCi10eXBl
ZGVmIHN0cnVjdCBCT09TVF9QUF9DQVQobXNnLGNvdW50ZXIpIDogYm9vc3Q6Om1wbDo6YXNzZXJ0
XyBcCi17IFwKLSAgICBzdGF0aWMgYm9vc3Q6Om1wbDo6ZmFpbGVkICoqKioqKioqKioqKiAobXNn
OjoqKioqKioqKioqKiogYXNzZXJ0X2FyZygpKSB0eXBlc18gXAotICAgIHsgcmV0dXJuIDA7IH0g
XAotfSBCT09TVF9QUF9DQVQobXBsX2Fzc2VydF9hcmcsY291bnRlcik7IFwKLUJPT1NUX01QTF9B
VVhfQVNTRVJUX0NPTlNUQU5UKCBcCi0gICAgICBzdGQ6OnNpemVfdCBcCi0gICAgLCBCT09TVF9Q
UF9DQVQobXBsX2Fzc2VydGlvbl9pbl9saW5lXyxjb3VudGVyKSA9IHNpemVvZiggXAotICAgICAg
ICBib29zdDo6bXBsOjphc3NlcnRpb25fZmFpbGVkPChjKT4oIEJPT1NUX1BQX0NBVChtcGxfYXNz
ZXJ0X2FyZyxjb3VudGVyKTo6YXNzZXJ0X2FyZygpICkgXAotICAgICAgICApIFwKLSAgICApIFwK
LS8qKi8KLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX01QTF9BU1NFUlRfTVNHKCBjLCBtc2csIHR5
cGVzXyApIFwKLUJPT1NUX01QTF9BU1NFUlRfTVNHX0lNUEwoIEJPT1NUX01QTF9BVVhfUFBfQ09V
TlRFUigpLCBjLCBtc2csIHR5cGVzXyApIFwKLS8qKi8KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9B
U1NFUlRfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9tcGwvYXQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvbXBsL2F0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YWE5MGU1OWMxNjdlZjhmMGJkMTBhYzJiZjViMTc5ODA5MmE5ZjQ2Zi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9tcGwvYXQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBA
QAotCi0jaWZuZGVmIEJPT1NUX01QTF9BVF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBM
X0FUX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIw
MDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8v
Ci0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24u
Ci0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F0X2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vYXRfaW1wbC5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvbXBsL2xvbmcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9zZXF1ZW5j
ZV90YWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hX3NwZWMuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21wbC9hdXhfL2xhbWJkYV9zdXBwb3J0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9t
cGwvYXV4Xy9udHRwX2RlY2wuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBs
IHsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKFNl
cXVlbmNlKQotICAgICwgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShOKQotICAgID4K
LXN0cnVjdCBhdAotICAgIDogYXRfaW1wbDwgdHlwZW5hbWUgc2VxdWVuY2VfdGFnPFNlcXVlbmNl
Pjo6dHlwZSA+Ci0gICAgICAgIDo6dGVtcGxhdGUgYXBwbHk8IFNlcXVlbmNlLE4gPgotewotICAg
IEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlQoMixhdCwoU2VxdWVuY2UsTikpCi19OwotCi10
ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFNlcXVlbmNlCi0gICAgLCBCT09TVF9NUExfQVVYX05U
VFBfREVDTChsb25nLCBOKQotICAgID4KLXN0cnVjdCBhdF9jCi0gICAgOiBhdF9pbXBsPCB0eXBl
bmFtZSBzZXF1ZW5jZV90YWc8U2VxdWVuY2U+Ojp0eXBlID4KLSAgICAgICAgOjp0ZW1wbGF0ZSBh
cHBseTwgU2VxdWVuY2UsbXBsOjpsb25nXzxOPiA+Ci17Ci19OwotCi1CT09TVF9NUExfQVVYX05B
X1NQRUMoMiwgYXQpCi0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQVRfSFBQX0lOQ0xVREVE
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
cGwvYXRfZndkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L21wbC9hdF9md2QuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWFhZTM4MzUx
ZTczNWNmODkwMjViMzllZWQyMDhhMmI0N2RhZWY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9hdF9md2QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotCi0j
aWZuZGVmIEJPT1NUX01QTF9BVF9GV0RfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9B
VF9GV0RfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAt
MjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNl
LCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQot
Ly8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlv
bi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLW5hbWVzcGFjZSBib29z
dCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4gc3RydWN0IGF0
X2ltcGw7Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UsIHR5cGVuYW1lIE4gPiBzdHJ1Y3Qg
YXQ7Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQVRfRldEX0hQUF9JTkNMVURFRApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1
eF8vTzFfc2l6ZV9pbXBsLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9hdXhfL08xX3NpemVfaW1wbC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDNiY2JkMGY3ODdjOWVhNTI2ZTRlMWVlZDA5NDE5OTY5ZmYwODE2Y2MuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vTzFfc2l6ZV9pbXBsLmhwcAorKysgL2Rl
di9udWxsCkBAIC0xLDg3ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfTzFfU0laRV9JTVBM
X0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfTzFfU0laRV9JTVBMX0hQUF9JTkNMVURF
RAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0
cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAot
Ly8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8v
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDov
L3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8v
ICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL08xX3NpemVfZndk
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvbG9uZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBs
L2lmLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9oYXNfc2l6ZS5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2ZvcndhcmRpbmcuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L21wbC9hdXhfL2NvbmZpZy9zdGF0aWNfY29uc3RhbnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21w
bC9hdXhfL2NvbmZpZy9tc3ZjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcv
d29ya2Fyb3VuZC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi0v
LyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIC0gcmV0dXJucyAnU2VxdWVuY2U6OnNpemUnIGlmIHNl
cXVlbmNlIGhhcyBhICdzaXplJwotLy8gbWVtYmVyLCBhbmQgLTEgb3RoZXJ3aXNlOyBjb25yZXRl
IHNlcXVlbmNlcyBtaWdodCBvdmVycmlkZSBpdCBieSAKLS8vIHNwZWNpYWxpemluZyBlaXRoZXIg
dGhlICdPMV9zaXplX2ltcGwnIG9yIHRoZSBwcmltYXJ5ICdPMV9zaXplJyB0ZW1wbGF0ZQotCi0j
ICAgaWYgIUJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPCAxMzAwKSBcCi0gICAgJiYgIUJP
T1NUX1dPUktBUk9VTkQoX19NV0VSS1NfXywgQk9PU1RfVEVTVEVEX0FUKDB4MzAwMykpCi0KLW5h
bWVzcGFjZSBhdXggewotdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IE8xX3Np
emVfaW1wbAotICAgIDogU2VxdWVuY2U6OnNpemUKLXsKLX07Ci19Ci0KLXRlbXBsYXRlPCB0eXBl
bmFtZSBUYWcgPgotc3RydWN0IE8xX3NpemVfaW1wbAotewotICAgIHRlbXBsYXRlPCB0eXBlbmFt
ZSBTZXF1ZW5jZSA+IHN0cnVjdCBhcHBseQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9f
TkVTVEVEX0ZPUldBUkRJTkcpCi0gICAgICAgIDogaWZfPAotICAgICAgICAgICAgICBhdXg6Omhh
c19zaXplPFNlcXVlbmNlPgotICAgICAgICAgICAgLCBhdXg6Ok8xX3NpemVfaW1wbDxTZXF1ZW5j
ZT4KLSAgICAgICAgICAgICwgbG9uZ188LTE+Ci0gICAgICAgICAgICA+Ojp0eXBlCi0gICAgewot
I2Vsc2UKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaWZfPAotICAgICAgICAgICAg
ICBhdXg6Omhhc19zaXplPFNlcXVlbmNlPgotICAgICAgICAgICAgLCBhdXg6Ok8xX3NpemVfaW1w
bDxTZXF1ZW5jZT4KLSAgICAgICAgICAgICwgbG9uZ188LTE+Ci0gICAgICAgICAgICA+Ojp0eXBl
IHR5cGU7Ci0KLSAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGxvbmcsIHZhbHVlID0KLSAg
ICAgICAgICAgICAgKGlmXzwKLSAgICAgICAgICAgICAgICAgIGF1eDo6aGFzX3NpemU8U2VxdWVu
Y2U+Ci0gICAgICAgICAgICAgICAgLCBhdXg6Ok8xX3NpemVfaW1wbDxTZXF1ZW5jZT4KLSAgICAg
ICAgICAgICAgICAsIGxvbmdfPC0xPgotICAgICAgICAgICAgICAgID46OnR5cGU6OnZhbHVlKQot
ICAgICAgICAgICAgKTsKLSNlbmRpZgotICAgIH07Ci19OwotCi0jICAgZWxzZSAvLyBCT09TVF9N
U1ZDCi0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPgotc3RydWN0IE8xX3NpemVfaW1wbAotewot
ICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBhcHBseQotICAgICAgICA6
IGxvbmdfPC0xPgotICAgICAgICB7Ci0gICAgICAgIH07Ci19OwotCi0jICAgZW5kaWYKLQotfX0K
LQotI2VuZGlmIC8vIEJPT1NUX01QTF9PMV9TSVpFX0lNUExfSFBQX0lOQ0xVREVECmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9h
ZGxfYmFycmllci5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9tcGwvYXV4Xy9hZGxfYmFycmllci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDM5NjhjMjQyYWRiMzBlMGI3M2FjNjZmYTYyYzg5OWRlN2Q1NDc5NDguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vYWRsX2JhcnJpZXIuaHBwCisrKyAvZGV2L251bGwK
QEAgLTEsNDggKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfSFBQ
X0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfSFBQX0lOQ0xVREVE
Ci0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDItMjAwNAotLy8KLS8vIERpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0v
LyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8g
aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8g
JERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcv
YWRsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvZ2NjLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHA+Ci0KLSNpZiAhZGVmaW5l
ZChCT09TVF9NUExfQ0ZHX05PX0FETF9CQVJSSUVSX05BTUVTUEFDRSkKLQotIyAgIGRlZmluZSBC
T09TVF9NUExfQVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRSBtcGxfCi0jICAgZGVmaW5lIEJPT1NU
X01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFX09QRU4gbmFtZXNwYWNlIG1wbF8gewotIyAg
IGRlZmluZSBCT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRV9DTE9TRSB9Ci0jICAg
ZGVmaW5lIEJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfREVDTCh0eXBlKSBcCi0gICAgbmFtZXNw
YWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IFwKLSAgICB1c2luZyA6OkJPT1NUX01QTF9BVVhf
QURMX0JBUlJJRVJfTkFNRVNQQUNFOjp0eXBlOyBcCi0gICAgfSB9IFwKLS8qKi8KLQotI2lmICFk
ZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi1uYW1lc3BhY2UgQk9PU1RfTVBM
X0FVWF9BRExfQkFSUklFUl9OQU1FU1BBQ0UgeyBuYW1lc3BhY2UgYXV4IHt9IH0KLW5hbWVzcGFj
ZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyB1c2luZyBuYW1lc3BhY2UgQk9PU1RfTVBMX0FVWF9B
RExfQkFSUklFUl9OQU1FU1BBQ0U7IAotbmFtZXNwYWNlIGF1eCB7IHVzaW5nIG5hbWVzcGFjZSBC
T09TVF9NUExfQVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRTo6YXV4OyB9Ci19fQotI2VuZGlmCi0K
LSNlbHNlIC8vIEJPT1NUX01QTF9DRkdfTk9fQURMX0JBUlJJRVJfTkFNRVNQQUNFCi0KLSMgICBk
ZWZpbmUgQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1FU1BBQ0UgYm9vc3Q6Om1wbAotIyAg
IGRlZmluZSBCT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRV9PUEVOIG5hbWVzcGFj
ZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotIyAgIGRlZmluZSBCT09TVF9NUExfQVVYX0FETF9C
QVJSSUVSX05BTUVTUEFDRV9DTE9TRSB9fQotIyAgIGRlZmluZSBCT09TVF9NUExfQVVYX0FETF9C
QVJSSUVSX0RFQ0wodHlwZSkgLyoqLwotCi0jZW5kaWYKLQotI2VuZGlmIC8vIEJPT1NUX01QTF9B
VVhfQURMX0JBUlJJRVJfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9hZHZhbmNlX2JhY2t3YXJkLmhwcCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2FkdmFu
Y2VfYmFja3dhcmQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjU2NzkzMjEx
ODY3NTg4NDY2MTA1YWEyOGQ5ZTk0NTNkNTAwN2YyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9hdXhfL2FkdmFuY2VfYmFja3dhcmQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEs
MTI4ICswLDAgQEAKLQotI2lmICFkZWZpbmVkKEJPT1NUX1BQX0lTX0lURVJBVElORykKLQotLy8v
Ly8gaGVhZGVyIGJvZHkKLQotI2lmbmRlZiBCT09TVF9NUExfQVVYNzc4MDc2X0FEVkFOQ0VfQkFD
S1dBUkRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVg3NzgwNzZfQURWQU5DRV9C
QUNLV0FSRF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAw
MC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQp
Ci0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0
aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2lmICFkZWZpbmVk
KEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL3By
aW9yLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXBwbHlfd3JhcC5ocHA+Ci0jZW5kaWYK
LQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy91c2VfcHJlcHJvY2Vzc2VkLmhwcD4K
LQotI2lmICAgICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMp
IFwKLSAgICAmJiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotCi0jICAg
ZGVmaW5lIEJPT1NUX01QTF9QUkVQUk9DRVNTRURfSEVBREVSIGFkdmFuY2VfYmFja3dhcmQuaHBw
Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwPgot
Ci0jZWxzZQotCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2xpbWl0cy91bnJvbGxpbmcuaHBwPgot
IyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL250dHBfZGVjbC5ocHA+Ci0jICAgaW5jbHVkZSA8
Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2V0aS5ocHA+Ci0KLSMgICBpbmNsdWRlIDxib29zdC9wcmVw
cm9jZXNzb3IvaXRlcmF0ZS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2Nh
dC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2luYy5ocHA+Ci0KLW5hbWVz
cGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4IHsKLQotLy8gZm9yd2Fy
ZCBkZWNsYXJhdGlvbgotdGVtcGxhdGU8IEJPT1NUX01QTF9BVVhfTlRUUF9ERUNMKGxvbmcsIE4p
ID4gc3RydWN0IGFkdmFuY2VfYmFja3dhcmQ7Ci0KLSMgICBkZWZpbmUgQk9PU1RfUFBfSVRFUkFU
SU9OX1BBUkFNU18xIFwKLSAgICAoMywoMCwgQk9PU1RfTVBMX0xJTUlUX1VOUk9MTElORywgPGJv
b3N0L21wbC9hdXhfL2FkdmFuY2VfYmFja3dhcmQuaHBwPikpCi0jICAgaW5jbHVkZSBCT09TVF9Q
UF9JVEVSQVRFKCkKLQotLy8gaW1wbGVtZW50YXRpb24gZm9yIE4gdGhhdCBleGNlZWRzIEJPT1NU
X01QTF9MSU1JVF9VTlJPTExJTkcKLXRlbXBsYXRlPCBCT09TVF9NUExfQVVYX05UVFBfREVDTChs
b25nLCBOKSA+Ci1zdHJ1Y3QgYWR2YW5jZV9iYWNrd2FyZAotewotICAgIHRlbXBsYXRlPCB0eXBl
bmFtZSBJdGVyYXRvciA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBhcHBseV93cmFwMTwKLSAgICAgICAgICAgICAgYWR2YW5jZV9iYWNrd2FyZDxCT09TVF9N
UExfTElNSVRfVU5ST0xMSU5HPgotICAgICAgICAgICAgLCBJdGVyYXRvcgotICAgICAgICAgICAg
Pjo6dHlwZSBjaHVua19yZXN1bHRfOwotCi0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHlf
d3JhcDE8Ci0gICAgICAgICAgICAgIGFkdmFuY2VfYmFja3dhcmQ8KAotICAgICAgICAgICAgICAg
IChOIC0gQk9PU1RfTVBMX0xJTUlUX1VOUk9MTElORykgPCAwCi0gICAgICAgICAgICAgICAgICAg
ID8gMAotICAgICAgICAgICAgICAgICAgICA6IE4gLSBCT09TVF9NUExfTElNSVRfVU5ST0xMSU5H
Ci0gICAgICAgICAgICAgICAgICAgICk+Ci0gICAgICAgICAgICAsIGNodW5rX3Jlc3VsdF8KLSAg
ICAgICAgICAgID46OnR5cGUgdHlwZTsKLSAgICB9OwotfTsKLQotfX19Ci0KLSNlbmRpZiAvLyBC
T09TVF9NUExfQ0ZHX05PX1BSRVBST0NFU1NFRF9IRUFERVJTCi0jZW5kaWYgLy8gQk9PU1RfTVBM
X0FVWDc3ODA3Nl9BRFZBTkNFX0JBQ0tXQVJEX0hQUF9JTkNMVURFRAotCi0vLy8vLyBpdGVyYXRp
b24sIGRlcHRoID09IDEKLQotLy8gRm9yIGdjYyA0LjQgY29tcGF0YWJpbGl0eSwgd2UgbXVzdCBp
bmNsdWRlIHRoZQotLy8gQk9PU1RfUFBfSVRFUkFUSU9OX0RFUFRIIHRlc3QgaW5zaWRlIGFuICNl
bHNlIGNsYXVzZS4KLSNlbHNlIC8vIEJPT1NUX1BQX0lTX0lURVJBVElORwotI2lmIEJPT1NUX1BQ
X0lURVJBVElPTl9ERVBUSCgpID09IDEKLSNkZWZpbmUgaV8gQk9PU1RfUFBfRlJBTUVfSVRFUkFU
SU9OKDEpCi0KLXRlbXBsYXRlPD4KLXN0cnVjdCBhZHZhbmNlX2JhY2t3YXJkPCBCT09TVF9QUF9G
UkFNRV9JVEVSQVRJT04oMSkgPgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJdGVyYXRvciA+
IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBJdGVyYXRvciBpdGVyMDsKLQot
I2lmIGlfID4gMAotIyAgIGRlZmluZSBCT09TVF9QUF9JVEVSQVRJT05fUEFSQU1TXzIgXAotICAg
ICgzLCgxLCBCT09TVF9QUF9GUkFNRV9JVEVSQVRJT04oMSksIDxib29zdC9tcGwvYXV4Xy9hZHZh
bmNlX2JhY2t3YXJkLmhwcD4pKQotIyAgIGluY2x1ZGUgQk9PU1RfUFBfSVRFUkFURSgpCi0jZW5k
aWYKLQotICAgICAgICB0eXBlZGVmIEJPT1NUX1BQX0NBVChpdGVyLEJPT1NUX1BQX0ZSQU1FX0lU
RVJBVElPTigxKSkgdHlwZTsKLSAgICB9OwotCi0jaWYgZGVmaW5lZChCT09TVF9NUExfQ0ZHX01T
VkNfNjBfRVRJX0JVRykKLSAgICAvLy8gRVRJIHdvcmthcm91bmQKLSAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBhcHBseTxpbnQ+Ci0gICAgewotICAgICAgICB0eXBlZGVmIGludCB0eXBlOwotICAgIH07
Ci0jZW5kaWYKLX07Ci0KLSN1bmRlZiBpXwotCi0vLy8vLyBpdGVyYXRpb24sIGRlcHRoID09IDIK
LQotI2VsaWYgQk9PU1RfUFBfSVRFUkFUSU9OX0RFUFRIKCkgPT0gMgotCi0jICAgZGVmaW5lIEFV
WDc3ODA3Nl9JVEVSXzAgQk9PU1RfUFBfQ0FUKGl0ZXIsQk9PU1RfUFBfREVDKEJPT1NUX1BQX0ZS
QU1FX0lURVJBVElPTigyKSkpCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9JVEVSXzEgQk9PU1RfUFBf
Q0FUKGl0ZXIsQk9PU1RfUFBfRlJBTUVfSVRFUkFUSU9OKDIpKQotCi0gICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgcHJpb3I8QVVYNzc4MDc2X0lURVJfMD46OnR5cGUgQVVYNzc4MDc2X0lURVJfMTsK
LSAgICAgICAgCi0jICAgdW5kZWYgQVVYNzc4MDc2X0lURVJfMQotIyAgIHVuZGVmIEFVWDc3ODA3
Nl9JVEVSXzAKLQotI2VuZGlmIC8vIEJPT1NUX1BQX0lURVJBVElPTl9ERVBUSCgpCi0jZW5kaWYg
Ly8gQk9PU1RfUFBfSVNfSVRFUkFUSU5HCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9hZHZhbmNlX2ZvcndhcmQuaHBwIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vYWR2YW5jZV9m
b3J3YXJkLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJiMDEwMWM2N2IxNDE5
ZDk4MzVlZDlkYzVmYTFmMWUwY2EwMDk2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9tcGwvYXV4Xy9hZHZhbmNlX2ZvcndhcmQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICsw
LDAgQEAKLQotI2lmICFkZWZpbmVkKEJPT1NUX1BQX0lTX0lURVJBVElORykKLQotLy8vLy8gaGVh
ZGVyIGJvZHkKLQotI2lmbmRlZiBCT09TVF9NUExfQVVYX0FEVkFOQ0VfRk9SV0FSRF9IUFBfSU5D
TFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9BRFZBTkNFX0ZPUldBUkRfSFBQX0lOQ0xVREVE
Ci0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0v
LyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8g
aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8g
JERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VT
U0lOR19NT0RFKQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9uZXh0LmhwcD4KLSMgICBpbmNsdWRl
IDxib29zdC9tcGwvYXBwbHlfd3JhcC5ocHA+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L21w
bC9hdXhfL2NvbmZpZy91c2VfcHJlcHJvY2Vzc2VkLmhwcD4KLQotI2lmICAgICFkZWZpbmVkKEJP
T1NUX01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMpIFwKLSAgICAmJiAhZGVmaW5lZChC
T09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9QUkVQ
Uk9DRVNTRURfSEVBREVSIGFkdmFuY2VfZm9yd2FyZC5ocHAKLSMgICBpbmNsdWRlIDxib29zdC9t
cGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHA+Ci0KLSNlbHNlCi0KLSMgICBpbmNsdWRl
IDxib29zdC9tcGwvbGltaXRzL3Vucm9sbGluZy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBs
L2F1eF8vbnR0cF9kZWNsLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcv
ZXRpLmhwcD4KLQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9pdGVyYXRlLmhwcD4K
LSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcD4KLSMgICBpbmNsdWRlIDxi
b29zdC9wcmVwcm9jZXNzb3IvaW5jLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNl
IG1wbCB7IG5hbWVzcGFjZSBhdXggewotCi0vLyBmb3J3YXJkIGRlY2xhcmF0aW9uCi10ZW1wbGF0
ZTwgQk9PU1RfTVBMX0FVWF9OVFRQX0RFQ0wobG9uZywgTikgPiBzdHJ1Y3QgYWR2YW5jZV9mb3J3
YXJkOwotCi0jICAgZGVmaW5lIEJPT1NUX1BQX0lURVJBVElPTl9QQVJBTVNfMSBcCi0gICAgKDMs
KDAsIEJPT1NUX01QTF9MSU1JVF9VTlJPTExJTkcsIDxib29zdC9tcGwvYXV4Xy9hZHZhbmNlX2Zv
cndhcmQuaHBwPikpCi0jICAgaW5jbHVkZSBCT09TVF9QUF9JVEVSQVRFKCkKLQotLy8gaW1wbGVt
ZW50YXRpb24gZm9yIE4gdGhhdCBleGNlZWRzIEJPT1NUX01QTF9MSU1JVF9VTlJPTExJTkcKLXRl
bXBsYXRlPCBCT09TVF9NUExfQVVYX05UVFBfREVDTChsb25nLCBOKSA+IAotc3RydWN0IGFkdmFu
Y2VfZm9yd2FyZAotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJdGVyYXRvciA+IHN0cnVjdCBh
cHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseV93cmFwMTwKLSAgICAg
ICAgICAgICAgYWR2YW5jZV9mb3J3YXJkPEJPT1NUX01QTF9MSU1JVF9VTlJPTExJTkc+Ci0gICAg
ICAgICAgICAsIEl0ZXJhdG9yCi0gICAgICAgICAgICA+Ojp0eXBlIGNodW5rX3Jlc3VsdF87Ci0K
LSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseV93cmFwMTwKLSAgICAgICAgICAgICAgYWR2
YW5jZV9mb3J3YXJkPCgKLSAgICAgICAgICAgICAgICAoTiAtIEJPT1NUX01QTF9MSU1JVF9VTlJP
TExJTkcpIDwgMAotICAgICAgICAgICAgICAgICAgICA/IDAKLSAgICAgICAgICAgICAgICAgICAg
OiBOIC0gQk9PU1RfTVBMX0xJTUlUX1VOUk9MTElORwotICAgICAgICAgICAgICAgICAgICApPgot
ICAgICAgICAgICAgLCBjaHVua19yZXN1bHRfCi0gICAgICAgICAgICA+Ojp0eXBlIHR5cGU7Ci0g
ICAgfTsKLX07Ci0KLX19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNT
RURfSEVBREVSUwotI2VuZGlmIC8vIEJPT1NUX01QTF9BVVhfQURWQU5DRV9GT1JXQVJEX0hQUF9J
TkNMVURFRAotCi0vLy8vLyBpdGVyYXRpb24sIGRlcHRoID09IDEKLQotLy8gRm9yIGdjYyA0LjQg
Y29tcGF0YWJpbGl0eSwgd2UgbXVzdCBpbmNsdWRlIHRoZQotLy8gQk9PU1RfUFBfSVRFUkFUSU9O
X0RFUFRIIHRlc3QgaW5zaWRlIGFuICNlbHNlIGNsYXVzZS4KLSNlbHNlIC8vIEJPT1NUX1BQX0lT
X0lURVJBVElORwotI2lmIEJPT1NUX1BQX0lURVJBVElPTl9ERVBUSCgpID09IDEKLSNkZWZpbmUg
aV8gQk9PU1RfUFBfRlJBTUVfSVRFUkFUSU9OKDEpCi0KLXRlbXBsYXRlPD4KLXN0cnVjdCBhZHZh
bmNlX2ZvcndhcmQ8IEJPT1NUX1BQX0ZSQU1FX0lURVJBVElPTigxKSA+Ci17Ci0gICAgdGVtcGxh
dGU8IHR5cGVuYW1lIEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBl
ZGVmIEl0ZXJhdG9yIGl0ZXIwOwotCi0jaWYgaV8gPiAwCi0jICAgZGVmaW5lIEJPT1NUX1BQX0lU
RVJBVElPTl9QQVJBTVNfMiBcCi0gICAgKDMsKDEsIGlfLCA8Ym9vc3QvbXBsL2F1eF8vYWR2YW5j
ZV9mb3J3YXJkLmhwcD4pKQotIyAgIGluY2x1ZGUgQk9PU1RfUFBfSVRFUkFURSgpCi0jZW5kaWYK
LSAgICAgICAgdHlwZWRlZiBCT09TVF9QUF9DQVQoaXRlcixpXykgdHlwZTsKLSAgICB9OwotCi0j
aWYgZGVmaW5lZChCT09TVF9NUExfQ0ZHX01TVkNfNjBfRVRJX0JVRykKLSAgICAvLy8gRVRJIHdv
cmthcm91bmQKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBhcHBseTxpbnQ+Ci0gICAgewotICAgICAg
ICB0eXBlZGVmIGludCB0eXBlOwotICAgIH07Ci0jZW5kaWYKLX07Ci0KLSN1bmRlZiBpXwotCi0v
Ly8vLyBpdGVyYXRpb24sIGRlcHRoID09IDIKLQotI2VsaWYgQk9PU1RfUFBfSVRFUkFUSU9OX0RF
UFRIKCkgPT0gMgotCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9JVEVSXzAgQk9PU1RfUFBfQ0FUKGl0
ZXIsQk9PU1RfUFBfREVDKEJPT1NUX1BQX0ZSQU1FX0lURVJBVElPTigyKSkpCi0jICAgZGVmaW5l
IEFVWDc3ODA3Nl9JVEVSXzEgQk9PU1RfUFBfQ0FUKGl0ZXIsQk9PU1RfUFBfRlJBTUVfSVRFUkFU
SU9OKDIpKQotCi0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbmV4dDxBVVg3NzgwNzZfSVRFUl8w
Pjo6dHlwZSBBVVg3NzgwNzZfSVRFUl8xOwotICAgICAgICAKLSMgICB1bmRlZiBBVVg3NzgwNzZf
SVRFUl8xCi0jICAgdW5kZWYgQVVYNzc4MDc2X0lURVJfMAotCi0jZW5kaWYgLy8gQk9PU1RfUFBf
SVRFUkFUSU9OX0RFUFRIKCkKLSNlbmRpZiAvLyBCT09TVF9QUF9JU19JVEVSQVRJTkcKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhf
L2FyZ190eXBlZGVmLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21wbC9hdXhfL2FyZ190eXBlZGVmLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMzYyZGIxNjAwNmE5ZTI1ZGZiNmM0ZmE0YTk5MDg5ZGQwMDQ2ZGNjMi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9hcmdfdHlwZWRlZi5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzMSArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9BUkdfVFlQRURFRl9I
UFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9BUkdfVFlQRURFRl9IUFBfSU5DTFVE
RUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMS0yMDA0Ci0vLwotLy8gRGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAK
LS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0v
LyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0v
LyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZp
Zy9sYW1iZGEuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5k
LmhwcD4KLQotI2lmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19GVUxMX0xBTUJEQV9TVVBQT1JU
KSBcCi0gICAgfHwgQk9PU1RfV09SS0FST1VORChfX0RNQ19fLCBCT09TVF9URVNURURfQVQoMHg4
NDApKQotICAgIAotIyAgIGRlZmluZSBCT09TVF9NUExfQVVYX0FSR19UWVBFREVGKFQsIG5hbWUp
IHR5cGVkZWYgVCBuYW1lOwotCi0jZWxzZQotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9BVVhfQVJH
X1RZUEVERUYoVCwgbmFtZSkgLyoqLwotCi0jZW5kaWYKLQotI2VuZGlmIC8vIEJPT1NUX01QTF9B
VVhfQVJHX1RZUEVERUZfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9hcml0aG1ldGljX29wLmhwcCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2FyaXRobWV0
aWNfb3AuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTcxZGI1ZGI2MzVkZjJi
YmZjNjdhNDI5MjI4ZWQyNTUwNTUwNzAxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L21wbC9hdXhfL2FyaXRobWV0aWNfb3AuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBA
QAotCi0vLyBOTyBJTkNMVURFIEdVQVJEUywgVEhFIEhFQURFUiBJUyBJTlRFTkRFRCBGT1IgTVVM
VElQTEUgSU5DTFVTSU9OCi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAw
NAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBv
ciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8K
LS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4K
LQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpZiAhZGVmaW5lZChCT09T
VF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9pbnRlZ3Jh
bF9jLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9sYXJnZXN0X2ludC5ocHA+Ci0j
ICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vdmFsdWVfd2tuZC5ocHA+Ci0jZW5kaWYKLQotI2lm
ICFkZWZpbmVkKEFVWDc3ODA3Nl9PUF9QUkVGSVgpCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9PUF9Q
UkVGSVggQVVYNzc4MDc2X09QX05BTUUKLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1
eF8vbnVtZXJpY19vcC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3N0YXRp
Y19jb25zdGFudC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3VzZV9wcmVw
cm9jZXNzZWQuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNT
RURfSEVBREVSUykgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01P
REUpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BSRVBST0NFU1NFRF9IRUFERVIgQVVYNzc4MDc2
X09QX1BSRUZJWC5ocHAKLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXBy
b2Nlc3NlZC5ocHA+Ci0KLSNlbHNlCi0KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25m
aWcvd29ya2Fyb3VuZC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NhdC5o
cHA+Ci0KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLSNpZiBkZWZpbmVk
KEJPT1NUX01QTF9DRkdfTk9fTkVTVEVEX1ZBTFVFX0FSSVRITUVUSUMpCi1uYW1lc3BhY2UgYXV4
IHsKLXRlbXBsYXRlPCB0eXBlbmFtZSBULCBUIG4xLCBUIG4yID4KLXN0cnVjdCBCT09TVF9QUF9D
QVQoQVVYNzc4MDc2X09QX1BSRUZJWCxfd2tuZCkKLXsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RB
TlQoVCwgdmFsdWUgPSAobjEgQVVYNzc4MDc2X09QX1RPS0VOIG4yKSk7Ci0gICAgdHlwZWRlZiBp
bnRlZ3JhbF9jPFQsdmFsdWU+IHR5cGU7Ci19OwotfQotI2VuZGlmCi0KLXRlbXBsYXRlPD4KLXN0
cnVjdCBBVVg3NzgwNzZfT1BfSU1QTF9OQU1FPGludGVncmFsX2NfdGFnLGludGVncmFsX2NfdGFn
PgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBOMSwgdHlwZW5hbWUgTjIgPiBzdHJ1Y3QgYXBw
bHkKLSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX05FU1RFRF9WQUxVRV9BUklUSE1FVElD
KQotICAgICAgICA6IGludGVncmFsX2M8Ci0gICAgICAgICAgICAgIHR5cGVuYW1lIGF1eDo6bGFy
Z2VzdF9pbnQ8Ci0gICAgICAgICAgICAgICAgICB0eXBlbmFtZSBOMTo6dmFsdWVfdHlwZQotICAg
ICAgICAgICAgICAgICwgdHlwZW5hbWUgTjI6OnZhbHVlX3R5cGUKLSAgICAgICAgICAgICAgICA+
Ojp0eXBlCi0gICAgICAgICAgICAsICggQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05EKE4xKTo6dmFs
dWUKLSAgICAgICAgICAgICAgICAgIEFVWDc3ODA3Nl9PUF9UT0tFTiBCT09TVF9NUExfQVVYX1ZB
TFVFX1dLTkQoTjIpOjp2YWx1ZQotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgID4KLSNl
bHNlCi0gICAgICAgIDogYXV4OjpCT09TVF9QUF9DQVQoQVVYNzc4MDc2X09QX1BSRUZJWCxfd2tu
ZCk8Ci0gICAgICAgICAgICAgIHR5cGVuYW1lIGF1eDo6bGFyZ2VzdF9pbnQ8Ci0gICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBOMTo6dmFsdWVfdHlwZQotICAgICAgICAgICAgICAgICwgdHlwZW5h
bWUgTjI6OnZhbHVlX3R5cGUKLSAgICAgICAgICAgICAgICA+Ojp0eXBlCi0gICAgICAgICAgICAs
IE4xOjp2YWx1ZQotICAgICAgICAgICAgLCBOMjo6dmFsdWUKLSAgICAgICAgICAgID46OnR5cGUK
LSNlbmRpZgotICAgIHsKLSAgICB9OwotfTsKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9D
RkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMKLQotI3VuZGVmIEFVWDc3ODA3Nl9PUF9UQUdfTkFN
RQotI3VuZGVmIEFVWDc3ODA3Nl9PUF9JTVBMX05BTUUKLSN1bmRlZiBBVVg3NzgwNzZfT1BfQVJJ
VFkKLSN1bmRlZiBBVVg3NzgwNzZfT1BfUFJFRklYCi0jdW5kZWYgQVVYNzc4MDc2X09QX05BTUUK
LSN1bmRlZiBBVVg3NzgwNzZfT1BfVE9LRU4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2FyaXR5LmhwcCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2FyaXR5LmhwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEzYWI0YWRlZDg4YTllZjA4MDllZWI3M2EwYWQzZTU0
ZGM4MTFmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9hcml0eS5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FV
WF9BUklUWV9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9BUklUWV9IUFBfSU5D
TFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMS0yMDA0Ci0vLwotLy8g
RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4w
LiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQg
Ci0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0
dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQk
Ci0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2Nv
bmZpZy9kdHAuaHBwPgotCi0jaWYgZGVmaW5lZChCT09TVF9NUExfQ0ZHX0JST0tFTl9ERUZBVUxU
X1BBUkFNRVRFUlNfSU5fTkVTVEVEX1RFTVBMQVRFUykKLQotIyAgIGluY2x1ZGUgPGJvb3N0L21w
bC9hdXhfL250dHBfZGVjbC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmln
L3N0YXRpY19jb25zdGFudC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwg
eyBuYW1lc3BhY2UgYXV4IHsKLQotLy8gYWd1cnQsIDE1L21hci8wMjogaXQncyBwb3NzaWJsZSB0
byBpbXBsZW1lbnQgdGhlIHRlbXBsYXRlIHNvIHRoYXQgaXQgd2lsbCAKLS8vICJqdXN0IHdvcmsi
IGFuZCBkbyBub3QgcmVxdWlyZSBhbnkgc3BlY2lhbGl6YXRpb24sIGJ1dCBub3Qgb24gdGhlIGNv
bXBpbGVycwotLy8gdGhhdCByZXF1aXJlIHRoZSBhcml0eSB3b3JrYXJvdW5kIGluIHRoZSBmaXJz
dCBwbGFjZQotdGVtcGxhdGU8IHR5cGVuYW1lIEYsIEJPT1NUX01QTF9BVVhfTlRUUF9ERUNMKGlu
dCwgTikgPgotc3RydWN0IGFyaXR5Ci17Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwg
dmFsdWUgPSBOKTsKLX07Ci0KLX19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0NGR19CUk9LRU5f
REVGQVVMVF9QQVJBTUVURVJTX0lOX05FU1RFRF9URU1QTEFURVMKLQotI2VuZGlmIC8vIEJPT1NU
X01QTF9BVVhfQVJJVFlfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9hcml0eV9zcGVjLmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2FyaXR5X3NwZWMu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzgyMjE0MjhkMzYyYzlmMTM3OGM1
YWVkY2ViYjUxMTc2MjI4YTQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9h
dXhfL2FyaXR5X3NwZWMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotCi0jaWZu
ZGVmIEJPT1NUX01QTF9BVVhfQVJJVFlfU1BFQ19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1Rf
TVBMX0FVWF9BUklUWV9TUEVDX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBH
dXJ0b3ZveSAyMDAxLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBM
SUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VO
U0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9y
IGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0j
aW5jbHVkZSA8Ym9vc3QvbXBsL2ludC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2xpbWl0cy9h
cml0eS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2R0cC5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL3BhcmFtcy5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvbXBsL2F1eF8vYXJpdHkuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3RlbXBs
YXRlX2FyaXR5X2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3R0cC5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2xhbWJkYS5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3N0YXRpY19jb25zdGFudC5ocHA+Ci0KLSNpZiBkZWZp
bmVkKEJPT1NUX01QTF9DRkdfQlJPS0VOX0RFRkFVTFRfUEFSQU1FVEVSU19JTl9ORVNURURfVEVN
UExBVEVTKQotIyAgIGRlZmluZSBCT09TVF9NUExfQVVYX05PTlRZUEVfQVJJVFlfU1BFQyhpLHR5
cGUsbmFtZSkgXAotbmFtZXNwYWNlIGF1eCB7IFwKLXRlbXBsYXRlPCBCT09TVF9NUExfQVVYX05U
VFBfREVDTChpbnQsIE4pLCBCT09TVF9NUExfUFBfUEFSQU1TKGksdHlwZSBUKSA+IFwKLXN0cnVj
dCBhcml0eTwgXAotICAgICAgbmFtZTwgQk9PU1RfTVBMX1BQX1BBUkFNUyhpLFQpID4gXAotICAg
ICwgTiBcCi0gICAgPiBcCi17IFwKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50IFwKLSAg
ICAgICAgLCB2YWx1ZSA9IEJPT1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkgXAotICAg
ICAgICApOyBcCi19OyBcCi19IFwKLS8qKi8KLSNlbHNlCi0jICAgZGVmaW5lIEJPT1NUX01QTF9B
VVhfTk9OVFlQRV9BUklUWV9TUEVDKGksdHlwZSxuYW1lKSAvKiovCi0jZW5kaWYKLQotIyAgIGRl
ZmluZSBCT09TVF9NUExfQVVYX0FSSVRZX1NQRUMoaSxuYW1lKSBcCi0gICAgQk9PU1RfTVBMX0FV
WF9OT05UWVBFX0FSSVRZX1NQRUMoaSx0eXBlbmFtZSxuYW1lKSBcCi0vKiovCi0KLQotI2lmIGRl
ZmluZWQoQk9PU1RfTVBMX0NGR19FWFRFTkRFRF9URU1QTEFURV9QQVJBTUVURVJTX01BVENISU5H
KSBcCi0gICAgJiYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19GVUxMX0xBTUJEQV9TVVBQT1JU
KQotIyAgIGRlZmluZSBCT09TVF9NUExfQVVYX1RFTVBMQVRFX0FSSVRZX1NQRUMoaSwgbmFtZSkg
XAotbmFtZXNwYWNlIGF1eCB7IFwKLXRlbXBsYXRlPCBCT09TVF9NUExfUFBfUEFSQU1TKGksdHlw
ZW5hbWUgVCkgPiBcCi1zdHJ1Y3QgdGVtcGxhdGVfYXJpdHk8IG5hbWU8Qk9PU1RfTVBMX1BQX1BB
UkFNUyhpLFQpPiA+IFwKLSAgICA6IGludF88aT4gXAoteyBcCi19OyBcCi19IFwKLS8qKi8KLSNl
bHNlCi0jICAgZGVmaW5lIEJPT1NUX01QTF9BVVhfVEVNUExBVEVfQVJJVFlfU1BFQyhpLCBuYW1l
KSAvKiovCi0jZW5kaWYKLQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9BUklUWV9TUEVDX0hQ
UF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2F1eF8vYXRfaW1wbC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9hdF9pbXBsLmhwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOTIzOTM3NDgwZWE1YmFlY2I1Mjg2M2NmZjUzZjg2Yjk0MmFkY2FhNC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9hdF9pbXBsLmhwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQVVYX0FUX0lNUExf
SFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfQVRfSU1QTF9IUFBfSU5DTFVERUQK
LQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8v
IChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAk
RGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9iZWdpbl9lbmQuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L21wbC9hZHZhbmNlLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwv
ZGVyZWYuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3RyYWl0c19sYW1iZGFfc3BlYy5o
cHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi0vLyBkZWZhdWx0IGlt
cGxlbWVudGF0aW9uOyBjb25yZXRlIHNlcXVlbmNlcyBtaWdodCBvdmVycmlkZSBpdCBieSAKLS8v
IHNwZWNpYWxpemluZyBlaXRoZXIgdGhlICdhdF9pbXBsJyBvciB0aGUgcHJpbWFyeSAnYXQnIHRl
bXBsYXRlCi0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPgotc3RydWN0IGF0X2ltcGwKLXsKLSAg
ICB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UsIHR5cGVuYW1lIE4gPiBzdHJ1Y3QgYXBwbHkK
LSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYWR2YW5jZTwKLSAgICAgICAgICAgICAg
dHlwZW5hbWUgYmVnaW48U2VxdWVuY2U+Ojp0eXBlCi0gICAgICAgICAgICAsIE4KLSAgICAgICAg
ICAgID46OnR5cGUgaXRlcl87Ci0KLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBkZXJlZjxpdGVy
Xz46OnR5cGUgdHlwZTsKLSAgICB9OwotfTsKLQotQk9PU1RfTVBMX0FMR09SSVRNX1RSQUlUU19M
QU1CREFfU1BFQygyLCBhdF9pbXBsKQotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9B
VF9JTVBMX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vYmVnaW5fZW5kX2ltcGwuaHBwIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vYmVnaW5fZW5kX2ltcGwu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGI3MGRkMTAxODIxZDU0MjIwODBi
ZDNjZTJlNTA5NWNkMTMxNzRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9h
dXhfL2JlZ2luX2VuZF9pbXBsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0K
LSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9CRUdJTl9FTkRfSU1QTF9IUFBfSU5DTFVERUQKLSNkZWZp
bmUgQk9PU1RfTVBMX0FVWF9CRUdJTl9FTkRfSU1QTF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJp
Z2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gKFNlZSBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJl
dmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2JlZ2luX2VuZF9md2QuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21wbC9zZXF1ZW5jZV90YWdfZndkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwv
dm9pZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2V2YWxfaWYuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L21wbC9hdXhfL2hhc19iZWdpbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbmEu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3RyYWl0c19sYW1iZGFfc3BlYy5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2V0aS5ocHA+Ci0KLW5hbWVzcGFjZSBib29z
dCB7IG5hbWVzcGFjZSBtcGwgewotCi0KLW5hbWVzcGFjZSBhdXggeyAKLQotdGVtcGxhdGU8IHR5
cGVuYW1lIFNlcXVlbmNlID4gCi1zdHJ1Y3QgYmVnaW5fdHlwZSAKLXsgCi0gICAgdHlwZWRlZiB0
eXBlbmFtZSBTZXF1ZW5jZTo6YmVnaW4gdHlwZTsgCi19OwotdGVtcGxhdGU8IHR5cGVuYW1lIFNl
cXVlbmNlID4gCi1zdHJ1Y3QgZW5kX3R5cGUKLXsgCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBTZXF1
ZW5jZTo6ZW5kIHR5cGU7IAotfTsKLQotfQotCi0vLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uOyBj
b25yZXRlIHNlcXVlbmNlcyBtaWdodCBvdmVycmlkZSBpdCBieSAKLS8vIHNwZWNpYWxpemluZyBl
aXRoZXIgdGhlICdiZWdpbl9pbXBsL2VuZF9pbXBsJyBvciB0aGUgcHJpbWFyeSAKLS8vICdiZWdp
bi9lbmQnIHRlbXBsYXRlcwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4KLXN0cnVjdCBiZWdp
bl9pbXBsCi17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IGFwcGx5
Ci0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGV2YWxfaWY8YXV4OjpoYXNfYmVnaW48
U2VxdWVuY2UsIHRydWVfPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1eDo6
YmVnaW5fdHlwZTxTZXF1ZW5jZT4sIHZvaWRfPjo6dHlwZSB0eXBlOwotICAgIH07Ci19OwotCi10
ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4KLXN0cnVjdCBlbmRfaW1wbAotewotICAgIHRlbXBsYXRl
PCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBldmFsX2lmPGF1eDo6aGFzX2JlZ2luPFNlcXVlbmNlLCB0cnVlXz4sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXg6OmVuZF90eXBlPFNlcXVlbmNlPiwgdm9p
ZF8+Ojp0eXBlIHR5cGU7Ci0gICAgfTsKLX07Ci0KLS8vIHNwZWNpYWxpemUgJ2JlZ2luX3RyYWl0
L2VuZF90cmFpdCcgZm9yIHR3byBwcmUtZGVmaW5lZCB0YWdzCi0KLSMgICBkZWZpbmUgQVVYNzc4
MDc2X0lNUExfU1BFQyhuYW1lLCB0YWcsIHJlc3VsdCkgXAotdGVtcGxhdGU8PiBcCi1zdHJ1Y3Qg
bmFtZSMjX2ltcGw8dGFnPiBcCi17IFwKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2Ug
PiBzdHJ1Y3QgYXBwbHkgXAotICAgIHsgXAotICAgICAgICB0eXBlZGVmIHJlc3VsdCB0eXBlOyBc
Ci0gICAgfTsgXAotfTsgXAotLyoqLwotCi0vLyBhIHNlcXVlbmNlIHdpdGggbmVzdGVkICdiZWdp
bi9lbmQnIHR5cGVkZWZzOyBqdXN0IHF1ZXJ5IHRoZW0KLUFVWDc3ODA3Nl9JTVBMX1NQRUMoYmVn
aW4sIG5lc3RlZF9iZWdpbl9lbmRfdGFnLCB0eXBlbmFtZSBTZXF1ZW5jZTo6YmVnaW4pCi1BVVg3
NzgwNzZfSU1QTF9TUEVDKGVuZCwgbmVzdGVkX2JlZ2luX2VuZF90YWcsIHR5cGVuYW1lIFNlcXVl
bmNlOjplbmQpCi0KLS8vIGlmIGEgdHlwZSAnVCcgZG9lcyBub3QgY29udGFpbiAnYmVnaW4vZW5k
JyBvciAndGFnJyBtZW1iZXJzIAotLy8gYW5kIGRvZXNuJ3Qgc3BlY2lhbGl6ZSBlaXRoZXIgJ2Jl
Z2luL2VuZCcgb3IgJ2JlZ2luX2ltcGwvZW5kX2ltcGwnIAotLy8gdGVtcGxhdGVzLCB0aGVuIHdl
IGVuZCB1cCBoZXJlCi1BVVg3NzgwNzZfSU1QTF9TUEVDKGJlZ2luLCBub25fc2VxdWVuY2VfdGFn
LCB2b2lkXykKLUFVWDc3ODA3Nl9JTVBMX1NQRUMoZW5kLCBub25fc2VxdWVuY2VfdGFnLCB2b2lk
XykKLUFVWDc3ODA3Nl9JTVBMX1NQRUMoYmVnaW4sIG5hLCB2b2lkXykKLUFVWDc3ODA3Nl9JTVBM
X1NQRUMoZW5kLCBuYSwgdm9pZF8pCi0KLSMgICB1bmRlZiBBVVg3NzgwNzZfSU1QTF9TUEVDCi0K
LQotQk9PU1RfTVBMX0FMR09SSVRNX1RSQUlUU19MQU1CREFfU1BFQ19JTVBMKDEsYmVnaW5faW1w
bCkKLUJPT1NUX01QTF9BTEdPUklUTV9UUkFJVFNfTEFNQkRBX1NQRUNfSU1QTCgxLGVuZF9pbXBs
KQotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9CRUdJTl9FTkRfSU1QTF9IUFBfSU5D
TFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21wbC9hdXhfL2NsZWFyX2ltcGwuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY2xlYXJfaW1wbC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDIwYjI3MGMwY2VhMzY2NDg3NzczYzk4Y2QxYWZlMWQ5Y2M4YTMxMjkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY2xlYXJfaW1wbC5ocHAKKysr
IC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9DTEVB
Ul9JTVBMX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX0NMRUFSX0lNUExfSFBQ
X0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8K
LS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5
IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNl
ZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8g
JElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvY2xl
YXJfZndkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy90cmFpdHNfbGFtYmRhX3NwZWMu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9ldGkuaHBwPgotCi1uYW1lc3Bh
Y2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotLy8gbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlv
bjsgdGhlIGRlZmluaXRpb24gaXMgbmVlZGVkIHRvIG1ha2UgTVNWQyBoYXBweQotCi10ZW1wbGF0
ZTwgdHlwZW5hbWUgVGFnID4KLXN0cnVjdCBjbGVhcl9pbXBsCi17Ci0gICAgdGVtcGxhdGU8IHR5
cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IGFwcGx5OwotfTsKLQotQk9PU1RfTVBMX0FMR09SSVRN
X1RSQUlUU19MQU1CREFfU1BFQygxLCBjbGVhcl9pbXBsKQotCi19fQotCi0jZW5kaWYgLy8gQk9P
U1RfTVBMX0FVWF9DTEVBUl9JTVBMX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY29tbW9uX25hbWVfd2tu
ZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4
Xy9jb21tb25fbmFtZV93a25kLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA3
NThiMjQzZWQ2MmUxZjY5YTM0ODY0YzZlNmU4NGU4YmYyYzk5OC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb21tb25fbmFtZV93a25kLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDM0ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQVVYX0NPTU1PTl9OQU1FX1dL
TkRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfQ09NTU9OX05BTUVfV0tORF9I
UFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMi0yMDA0Ci0v
LwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNp
b24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8g
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0v
LyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9h
dXhfL2NvbmZpZy93b3JrYXJvdW5kLmhwcD4KLQotI2lmIEJPT1NUX1dPUktBUk9VTkQoX19CT1JM
QU5EQ19fLCA8IDB4NTYxKQotLy8gYWd1cnQsIDEyL25vdi8wMjogdG8gc3VwcHJlc3MgdGhlIGJv
Z3VzICJDYW5ub3QgaGF2ZSBib3RoIGEgdGVtcGxhdGUgY2xhc3MgCi0vLyBhbmQgZnVuY3Rpb24g
bmFtZWQgJ3h4eCciIGRpYWdub3N0aWMKLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FVWF9DT01NT05f
TkFNRV9XS05EKG5hbWUpIFwKLW5hbWVzcGFjZSBuYW1lXyMjd2tuZCB7IFwKLXRlbXBsYXRlPCB0
eXBlbmFtZSA+IHZvaWQgbmFtZSgpOyBcCi19IFwKLS8qKi8KLQotI2Vsc2UKLQotIyAgIGRlZmlu
ZSBCT09TVF9NUExfQVVYX0NPTU1PTl9OQU1FX1dLTkQobmFtZSkgLyoqLwotCi0jZW5kaWYgLy8g
X19CT1JMQU5EQ19fCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfQVVYX0NPTU1PTl9OQU1FX1dLTkRf
SFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvYXV4Xy9jb21wYXJpc29uX29wLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbXBhcmlzb25fb3AuaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGY3MmQzMDBhN2ZkNjkwM2QyZmE5MjliODJhMzll
ZGZhZTMxZWRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbXBh
cmlzb25fb3AuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotCi0vLyBOTyBJTkNM
VURFIEdVQVJEUywgVEhFIEhFQURFUiBJUyBJTlRFTkRFRCBGT1IgTVVMVElQTEUgSU5DTFVTSU9O
Ci0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0v
LyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8g
aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8g
JERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VT
U0lOR19NT0RFKQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9ib29sLmhwcD4KLSMgICBpbmNsdWRl
IDxib29zdC9tcGwvYXV4Xy92YWx1ZV93a25kLmhwcD4KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQo
QVVYNzc4MDc2X09QX1BSRUZJWCkKLSMgICBkZWZpbmUgQVVYNzc4MDc2X09QX1BSRUZJWCBBVVg3
NzgwNzZfT1BfTkFNRQotI2VuZGlmCi0KLSNkZWZpbmUgQVVYNzc4MDc2X09QX0FSSVRZIDIKLQot
I2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL251bWVyaWNfb3AuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L21wbC9hdXhfL2NvbmZpZy9zdGF0aWNfY29uc3RhbnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21w
bC9hdXhfL2NvbmZpZy91c2VfcHJlcHJvY2Vzc2VkLmhwcD4KLQotI2lmICFkZWZpbmVkKEJPT1NU
X01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMpIFwKLSAgICAmJiAhZGVmaW5lZChCT09T
VF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9QUkVQUk9D
RVNTRURfSEVBREVSIEFVWDc3ODA3Nl9PUF9QUkVGSVguaHBwCi0jICAgaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwPgotCi0jZWxzZQotCi0jICAgaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2ludGVncmFsLmhwcD4KLSMgICBpbmNsdWRlIDxib29z
dC9wcmVwcm9jZXNzb3IvY2F0LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1w
bCB7Ci0KLS8vIE1TVkMgd29ya2Fyb3VuZDogaW1wbGVtZW50IGxlc3MgaW4gdGVybXMgb2YgZ3Jl
YXRlcgotI2lmIDAgQVVYNzc4MDc2X09QX1RPS0VOIDEgJiYgISgxIEFVWDc3ODA3Nl9PUF9UT0tF
TiAwKSAmJiAhKDAgQVVYNzc4MDc2X09QX1RPS0VOIDApCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9P
UChOMSwgTjIpIFwKLSAgICAoIEJPT1NUX01QTF9BVVhfVkFMVUVfV0tORChOMik6OnZhbHVlID4g
Qk9PU1RfTVBMX0FVWF9WQUxVRV9XS05EKE4xKTo6dmFsdWUgKSBcCi0vKiovCi0jZWxzZQotIyAg
IGRlZmluZSBBVVg3NzgwNzZfT1AoTjEsIE4yKSBcCi0gICAgKCBCT09TVF9NUExfQVVYX1ZBTFVF
X1dLTkQoTjEpOjp2YWx1ZSBcCi0gICAgICAgICAgQVVYNzc4MDc2X09QX1RPS0VOIEJPT1NUX01Q
TF9BVVhfVkFMVUVfV0tORChOMik6OnZhbHVlIFwKLSAgICAgICAgKSBcCi0vKiovCi0jZW5kaWYK
LQotdGVtcGxhdGU8Pgotc3RydWN0IEFVWDc3ODA3Nl9PUF9JTVBMX05BTUU8aW50ZWdyYWxfY190
YWcsaW50ZWdyYWxfY190YWc+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIE4xLCB0eXBlbmFt
ZSBOMiA+IHN0cnVjdCBhcHBseQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fTkVTVEVE
X1ZBTFVFX0FSSVRITUVUSUMpCi0gICAgICAgIDogYm9vbF88IEFVWDc3ODA3Nl9PUChOMSwgTjIp
ID4KLSAgICB7Ci0jZWxzZQotICAgIHsKLSAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJv
b2wsIHZhbHVlID0gQVVYNzc4MDc2X09QKE4xLCBOMikpOwotICAgICAgICB0eXBlZGVmIGJvb2xf
PHZhbHVlPiB0eXBlOwotI2VuZGlmCi0gICAgfTsKLX07Ci0KLSN1bmRlZiBBVVg3NzgwNzZfT1AK
LQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMK
LQotI3VuZGVmIEFVWDc3ODA3Nl9PUF9UQUdfTkFNRQotI3VuZGVmIEFVWDc3ODA3Nl9PUF9JTVBM
X05BTUUKLSN1bmRlZiBBVVg3NzgwNzZfT1BfQVJJVFkKLSN1bmRlZiBBVVg3NzgwNzZfT1BfUFJF
RklYCi0jdW5kZWYgQVVYNzc4MDc2X09QX05BTUUKLSN1bmRlZiBBVVg3NzgwNzZfT1BfVE9LRU4K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21w
bC9hdXhfL2NvbmZpZy9hZGwuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2FkbC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGU5YmRmMTE1NmIwZWIyNDA0NDdhOWE4MzgwNDA5NTlmNGU2MDhlMDAuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2FkbC5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0MCArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9DT05GSUdfQURM
X0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX0NPTkZJR19BRExfSFBQX0lOQ0xV
REVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDItMjAwNAotLy8KLS8vIERp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4g
Ci0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAot
Ly8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAot
Ly8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25m
aWcvbXN2Yy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2ludGVsLmhwcD4K
LSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvZ2NjLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9tcGwvYXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHA+Ci0KLS8vIGFndXJ0LCAyNS9hcHIvMDQ6
IHRlY2huaWNhbGx5LCB0aGUgQURMIHdvcmthcm91bmQgaXMgb25seSBuZWVkZWQgZm9yIEdDQywK
LS8vIGJ1dCBwdXR0aW5nIGV2ZXJ5dGhpbmcgZXhwZWN0IHB1YmxpYywgdXNlci1zcGVjaWFsaXph
YmxlIG1ldGFmdW5jdGlvbnMgaW50bwotLy8gYSBzZXBhcmF0ZSBnbG9iYWwgbmFtZXNwYWNlIGhh
cyBhIG5pY2Ugc2lkZSBlZmZlY3Qgb2YgcmVkdWNpbmcgdGhlIGxlbmd0aCAKLS8vIG9mIHRlbXBs
YXRlIGluc3RhbnRpYXRpb24gc3ltYm9scywgc28gd2UgYXBwbHkgdGhlIHdvcmthcm91bmQgb24g
YWxsIAotLy8gcGxhdGZvcm1zIHRoYXQgY2FuIGhhbmRsZSBpdAotCi0jaWYgIWRlZmluZWQoQk9P
U1RfTVBMX0NGR19OT19BRExfQkFSUklFUl9OQU1FU1BBQ0UpIFwKLSAgICAmJiAoICAgQk9PU1Rf
V09SS0FST1VORChCT09TVF9NU1ZDLCBCT09TVF9URVNURURfQVQoMTQwMCkpIFwKLSAgICAgICAg
fHwgQk9PU1RfV09SS0FST1VORChfX0JPUkxBTkRDX18sIEJPT1NUX1RFU1RFRF9BVCgweDYxMCkp
IFwKLSAgICAgICAgfHwgQk9PU1RfV09SS0FST1VORChfX0RNQ19fLCBCT09TVF9URVNURURfQVQo
MHg4NDApKSBcCi0gICAgICAgIHx8IEJPT1NUX1dPUktBUk9VTkQoX19NV0VSS1NfXywgQk9PU1Rf
VEVTVEVEX0FUKDB4MzIwMikpIFwKLSAgICAgICAgfHwgQk9PU1RfV09SS0FST1VORChCT09TVF9J
TlRFTF9DWFhfVkVSU0lPTiwgQk9PU1RfVEVTVEVEX0FUKDgxMCkpIFwKLSAgICAgICAgKQotCi0j
ICAgZGVmaW5lIEJPT1NUX01QTF9DRkdfTk9fQURMX0JBUlJJRVJfTkFNRVNQQUNFCi0KLSNlbmRp
ZgotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9DT05GSUdfQURMX0hQUF9JTkNMVURFRApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1
eF8vY29uZmlnL2FycmF5cy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tcGwvYXV4Xy9jb25maWcvYXJyYXlzLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTllYTY4YWQ2Nzg5MDBmY2FmNDkwYzE0ZjI4MmU0Y2E3NTkzZTM1Ni4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvYXJyYXlzLmhwcAorKysg
L2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQVVYX0NPTkZJ
R19BUlJBWVNfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfQ09ORklHX0FSUkFZ
U19IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMy0yMDA0
Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZl
cnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9y
IGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwot
Ly8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgot
Ci0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21w
bC9hdXhfL2NvbmZpZy9tc3ZjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcv
d29ya2Fyb3VuZC5ocHA+Ci0KLSNpZiAgICAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX0RFUEVO
REVOVF9BUlJBWV9UWVBFUykgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNT
SU5HX01PREUpIFwKLSAgICAmJiAoIEJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCBCT09T
VF9URVNURURfQVQoMHg2MTApKSBcCi0gICAgICAgIHx8IEJPT1NUX1dPUktBUk9VTkQoQk9PU1Rf
TVNWQywgPD0gMTMwMCkgXAotICAgICAgICApCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0NGR19O
T19ERVBFTkRFTlRfQVJSQVlfVFlQRVMKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBCT09TVF9NUExf
QVVYX0NPTkZJR19BUlJBWVNfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvYmNjLmhwcCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9i
Y2MuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTQ5NDFhNTk4MzQ4NjgwMjFh
NzdmOTAxOTE3YzI2ODUwN2QzN2Q3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21w
bC9hdXhfL2NvbmZpZy9iY2MuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotCi0j
aWZuZGVmIEJPT1NUX01QTF9BVVhfQ09ORklHX0JDQ19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9P
U1RfTVBMX0FVWF9DT05GSUdfQkNDX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3Nl
eSBHdXJ0b3ZveSAyMDA4Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBk
b2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZTogMjAwNC0wOS0wMiAxMDo0MTozNyAt
MDUwMCAoVGh1LCAwMiBTZXAgMjAwNCkgJAotLy8gJFJldmlzaW9uOiAyNDg3NCAkCi0KLSNpbmNs
dWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHA+Ci0KLSNpZiAgICAhZGVm
aW5lZChCT09TVF9NUExfQ0ZHX0JDQzU5MF9XT1JLQVJPVU5EUykgXAotICAgICYmICFkZWZpbmVk
KEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpIFwKLSAgICAmJiBCT09TVF9XT1JLQVJPVU5E
KF9fQk9STEFORENfXywgPj0gMHg1OTApIFwKLSAgICAmJiBCT09TVF9XT1JLQVJPVU5EKF9fQk9S
TEFORENfXywgQk9PU1RfVEVTVEVEX0FUKDB4NjEwKSkKLQotIyAgIGRlZmluZSBCT09TVF9NUExf
Q0ZHX0JDQzU5MF9XT1JLQVJPVU5EUwotCi0jZW5kaWYKLQotI2VuZGlmIC8vIEJPT1NUX01QTF9B
VVhfQ09ORklHX0JDQ19IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9iaW5kLmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9iaW5k
LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBiY2I5NGI4YjQzZWQwOTRlMTZm
ZTFiZjc0ZTIxMTBlYWFmYTRmOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwv
YXV4Xy9jb25maWcvYmluZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0KLSNp
Zm5kZWYgQk9PU1RfTVBMX0FVWF9DT05GSUdfQklORF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9P
U1RfTVBMX0FVWF9DT05GSUdfQklORF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IERhdmlk
IEFicmFoYW1zIDIwMDIKLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDItMjAwNAot
Ly8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJz
aW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8v
IFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQot
Ly8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwv
YXV4Xy9jb25maWcvbXN2Yy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3dv
cmthcm91bmQuaHBwPgotCi0jaWYgICAgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19CSU5EX1RF
TVBMQVRFKSBcCi0gICAgJiYgIWRlZmluZWQoQk9PU1RfTVBMX1BSRVBST0NFU1NJTkdfTU9ERSkg
XAotICAgICYmICggICBCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01TVkMsIDw9IDEzMDApIFwKLSAg
ICAgICAgfHwgQk9PU1RfV09SS0FST1VORChfX0JPUkxBTkRDX18sIEJPT1NUX1RFU1RFRF9BVCgw
eDYxMCkpIFwKLSAgICAgICAgKQotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9DRkdfTk9fQklORF9U
RU1QTEFURQotCi0jZW5kaWYKLQotLy8jZGVmaW5lIEJPT1NUX01QTF9DRkdfTk9fVU5OQU1FRF9Q
TEFDRUhPTERFUl9TVVBQT1JUCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfQVVYX0NPTkZJR19CSU5E
X0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2NvbXBpbGVyLmhwcCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9jb21waWxlci5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkM2UzYjY2MjJmZDUwYzQ5MDA2ODkwZTBj
NzFiMTQ2ZjUxYTE4ZjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8v
Y29uZmlnL2NvbXBpbGVyLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLQotI2lm
bmRlZiBCT09TVF9NUExfQVVYX0NPTkZJR19DT01QSUxFUl9IUFBfSU5DTFVERUQKLSNkZWZpbmUg
Qk9PU1RfTVBMX0FVWF9DT05GSUdfQ09NUElMRVJfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdo
dCBBbGVrc2V5IEd1cnRvdm95IDIwMDEtMjAwOAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2
aXNpb24kCi0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX0NPTVBJTEVSX0RJUikKLQotIyAg
IGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9kdHAuaHBwPgotIyAgIGluY2x1ZGUgPGJv
b3N0L21wbC9hdXhfL2NvbmZpZy90dHAuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhf
L2NvbmZpZy9jdHBzLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvbXN2
Yy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2djYy5ocHA+Ci0jICAg
aW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3dvcmthcm91bmQuaHBwPgotCi0jICAgaWYg
Qk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8IDEzMDApCi0jICAgICAgIGRlZmluZSBCT09T
VF9NUExfQ0ZHX0NPTVBJTEVSX0RJUiBtc3ZjNjAKLQotIyAgIGVsaWYgQk9PU1RfV09SS0FST1VO
RChCT09TVF9NU1ZDLCA9PSAxMzAwKQotIyAgICAgICBkZWZpbmUgQk9PU1RfTVBMX0NGR19DT01Q
SUxFUl9ESVIgbXN2YzcwCi0KLSMgICBlbGlmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVBMX0NG
R19HQ0MsIEJPT1NUX1RFU1RFRF9BVCgweDAzMDQpKQotIyAgICAgICBkZWZpbmUgQk9PU1RfTVBM
X0NGR19DT01QSUxFUl9ESVIgZ2NjCi0KLSMgICBlbGlmIEJPT1NUX1dPUktBUk9VTkQoX19CT1JM
QU5EQ19fLCBCT09TVF9URVNURURfQVQoMHg2MTApKQotIyAgICAgICBpZiAhZGVmaW5lZChCT09T
VF9NUExfQ0ZHX05PX0RFRkFVTFRfUEFSQU1FVEVSU19JTl9ORVNURURfVEVNUExBVEVTKQotIyAg
ICAgICAgICAgZGVmaW5lIEJPT1NUX01QTF9DRkdfQ09NUElMRVJfRElSIGJjYzU1MQotIyAgICAg
ICBlbGlmIEJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCA+PSAweDU5MCkKLSMgICAgICAg
ICAgIGRlZmluZSBCT09TVF9NUExfQ0ZHX0NPTVBJTEVSX0RJUiBiY2MKLSMgICAgICAgZWxzZQot
IyAgICAgICAgICAgZGVmaW5lIEJPT1NUX01QTF9DRkdfQ09NUElMRVJfRElSIGJjY19wcmU1OTAK
LSMgICAgICAgZW5kaWYKLQotIyAgIGVsaWYgQk9PU1RfV09SS0FST1VORChfX0RNQ19fLCBCT09T
VF9URVNURURfQVQoMHg4NDApKQotIyAgICAgICBkZWZpbmUgQk9PU1RfTVBMX0NGR19DT01QSUxF
Ul9ESVIgZG1jCi0KLSMgICBlbGlmIGRlZmluZWQoX19NV0VSS1NfXykKLSMgICAgICAgaWYgZGVm
aW5lZChCT09TVF9NUExfQ0ZHX0JST0tFTl9ERUZBVUxUX1BBUkFNRVRFUlNfSU5fTkVTVEVEX1RF
TVBMQVRFUykKLSMgICAgICAgICAgIGRlZmluZSBCT09TVF9NUExfQ0ZHX0NPTVBJTEVSX0RJUiBt
d2N3Ci0jICAgICAgIGVsc2UKLSMgICAgICAgICAgIGRlZmluZSBCT09TVF9NUExfQ0ZHX0NPTVBJ
TEVSX0RJUiBwbGFpbgotIyAgICAgICBlbmRpZgotCi0jICAgZWxpZiBkZWZpbmVkKEJPT1NUX05P
X1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04pCi0jICAgICAgIGRlZmluZSBCT09TVF9N
UExfQ0ZHX0NPTVBJTEVSX0RJUiBub19jdHBzCi0KLSMgICBlbGlmIGRlZmluZWQoQk9PU1RfTVBM
X0NGR19OT19URU1QTEFURV9URU1QTEFURV9QQVJBTUVURVJTKQotIyAgICAgICBkZWZpbmUgQk9P
U1RfTVBMX0NGR19DT01QSUxFUl9ESVIgbm9fdHRwCi0KLSMgICBlbHNlCi0jICAgICAgIGRlZmlu
ZSBCT09TVF9NUExfQ0ZHX0NPTVBJTEVSX0RJUiBwbGFpbgotIyAgIGVuZGlmCi0KLSNlbmRpZiAv
LyBCT09TVF9NUExfQ0ZHX0NPTVBJTEVSX0RJUgotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9D
T05GSUdfQ09NUElMRVJfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvY3Rwcy5ocHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvY3Rw
cy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNzhmNDdmZmRhNTA5Y2E0ZGE4
MjQ1ZjI3MDgyNjcxMGUyNWE5MTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L2F1eF8vY29uZmlnL2N0cHMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotCi0j
aWZuZGVmIEJPT1NUX01QTF9BVVhfQ09ORklHX0NUUFNfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJP
T1NUX01QTF9BVVhfQ09ORklHX0NUUFNfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVr
c2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29z
dCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBm
aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcv
TElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21w
bCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24k
Ci0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLQotI2lmICAgICFkZWZpbmVkKEJPT1NUX01QTF9DRkdf
Tk9fTk9OVFlQRV9URU1QTEFURV9QQVJUSUFMX1NQRUMpIFwKLSAgICAmJiAhZGVmaW5lZChCT09T
VF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKSBcCi0gICAgJiYgQk9PU1RfV09SS0FST1VORChfX0JP
UkxBTkRDX18sIDwgMHg1ODIpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0NGR19OT19OT05UWVBF
X1RFTVBMQVRFX1BBUlRJQUxfU1BFQwotCi0jZW5kaWYKLQotLy8gQk9PU1RfTk9fVEVNUExBVEVf
UEFSVElBTF9TUEVDSUFMSVpBVElPTiBpcyBkZWZpbmVkIGluIDxib29zdC9jb25maWcuaHBwPgot
Ci0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9DT05GSUdfQ1RQU19IUFBfSU5DTFVERUQKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhf
L2NvbmZpZy9kdHAuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvbXBsL2F1eF8vY29uZmlnL2R0cC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQzNzliNmIyZmNmNjMzODliMzcwODljYjNmYTQwYTdjNmY2NjlhMmUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2R0cC5ocHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0NiArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9DT05GSUdfRFRQX0hQUF9J
TkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX0NPTkZJR19EVFBfSFBQX0lOQ0xVREVECi0K
LS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDEtMjAwNAotLy8KLS8vIERpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAo
U2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERh
dGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvd29y
a2Fyb3VuZC5ocHA+Ci0KLS8vIE1XQ1cgNy54LTguMCAibG9zdHMiIGRlZmF1bHQgdGVtcGxhdGUg
cGFyYW1ldGVycyBvZiBuZXN0ZWQgY2xhc3MgCi0vLyB0ZW1wbGF0ZXMgd2hlbiB0aGVpciBvd25l
ciBjbGFzc2VzIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIG90aGVyIAotLy8gdGVtcGxhdGVz
OyBCb3JsYW5kIDUuNS4xICJmb3JnZXRzIiB0aGVtIGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nIChp
ZiAKLS8vIHRoZSBvd25lciBjbGFzcyBpcyBhIGNsYXNzIHRlbXBsYXRlKSwgYW5kIEJvcmxhbmQg
NS42IGlzbid0IGV2ZW4KLS8vIGFibGUgdG8gY29tcGlsZSBhIGRlZmluaXRpb24gb2YgbmVzdGVk
IGNsYXNzIHRlbXBsYXRlIHdpdGggRFRQCi0KLSNpZiAgICAhZGVmaW5lZChCT09TVF9NUExfQ0ZH
X05PX0RFRkFVTFRfUEFSQU1FVEVSU19JTl9ORVNURURfVEVNUExBVEVTKSBcCi0gICAgJiYgIWRl
ZmluZWQoQk9PU1RfTVBMX1BSRVBST0NFU1NJTkdfTU9ERSkgXAotICAgICYmIEJPT1NUX1dPUktB
Uk9VTkQoX19CT1JMQU5EQ19fLCA+PSAweDU2MCkgXAotICAgICYmIEJPT1NUX1dPUktBUk9VTkQo
X19CT1JMQU5EQ19fLCBCT09TVF9URVNURURfQVQoMHg2MTApKQotCi0jICAgZGVmaW5lIEJPT1NU
X01QTF9DRkdfTk9fREVGQVVMVF9QQVJBTUVURVJTX0lOX05FU1RFRF9URU1QTEFURVMKLQotI2Vu
ZGlmCi0KLQotI2lmICAgICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfQlJPS0VOX0RFRkFVTFRfUEFS
QU1FVEVSU19JTl9ORVNURURfVEVNUExBVEVTKSBcCi0gICAgJiYgIWRlZmluZWQoQk9PU1RfTVBM
X1BSRVBST0NFU1NJTkdfTU9ERSkgXAotICAgICYmICggICBCT09TVF9XT1JLQVJPVU5EKF9fTVdF
UktTX18sIDw9IDB4MzAwMSkgXAotICAgICAgICB8fCBCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFO
RENfXywgQk9PU1RfVEVTVEVEX0FUKDB4NjEwKSkgXAotICAgICAgICB8fCBkZWZpbmVkKEJPT1NU
X01QTF9DRkdfTk9fREVGQVVMVF9QQVJBTUVURVJTX0lOX05FU1RFRF9URU1QTEFURVMpIFwKLSAg
ICAgICAgKQotICAgICAgICAKLSMgICBkZWZpbmUgQk9PU1RfTVBMX0NGR19CUk9LRU5fREVGQVVM
VF9QQVJBTUVURVJTX0lOX05FU1RFRF9URU1QTEFURVMKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBC
T09TVF9NUExfQVVYX0NPTkZJR19EVFBfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvZXRpLmhw
cCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2Nv
bmZpZy9ldGkuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTlkNDMzZDM1OTU4
YTFjNDZmYmRjMTYyZTUyZmExYTE3NWVkYmY5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21wbC9hdXhfL2NvbmZpZy9ldGkuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBA
QAotCi0jaWZuZGVmIEJPT1NUX01QTF9BVVhfQ09ORklHX0VUSV9IUFBfSU5DTFVERUQKLSNkZWZp
bmUgQk9PU1RfTVBMX0FVWF9DT05GSUdfRVRJX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQg
QWxla3NleSBHdXJ0b3ZveSAyMDAxLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlz
aW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL21zdmMuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5kLmhwcD4KLQotLy8gZmxhZ3MgZm9y
IE1TVkMgNi41J3Mgc28tY2FsbGVkICJlYXJseSB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uIGJ1ZyIK
LSNpZiAgICAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX01TVkNfNjBfRVRJX0JVRykgXAotICAgICYm
ICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpIFwKLSAgICAmJiBCT09TVF9X
T1JLQVJPVU5EKEJPT1NUX01TVkMsIDwgMTMwMCkKLQotIyAgIGRlZmluZSBCT09TVF9NUExfQ0ZH
X01TVkNfNjBfRVRJX0JVRwotCi0jZW5kaWYKLQotI2lmICAgICFkZWZpbmVkKEJPT1NUX01QTF9D
RkdfTVNWQ183MF9FVElfQlVHKSBcCi0gICAgJiYgIWRlZmluZWQoQk9PU1RfTVBMX1BSRVBST0NF
U1NJTkdfTU9ERSkgXAotICAgICYmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPT0gMTMw
MCkKLQotIyAgIGRlZmluZSBCT09TVF9NUExfQ0ZHX01TVkNfNzBfRVRJX0JVRwotCi0jZW5kaWYK
LQotI2lmICAgICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTVNWQ19FVElfQlVHKSBcCi0gICAgJiYg
IWRlZmluZWQoQk9PU1RfTVBMX1BSRVBST0NFU1NJTkdfTU9ERSkgXAotICAgICYmICggZGVmaW5l
ZChCT09TVF9NUExfQ0ZHX01TVkNfNjBfRVRJX0JVRykgXAotICAgICAgICB8fCBkZWZpbmVkKEJP
T1NUX01QTF9DRkdfTVNWQ183MF9FVElfQlVHKSBcCi0gICAgICAgICkKLQotIyAgIGRlZmluZSBC
T09TVF9NUExfQ0ZHX01TVkNfRVRJX0JVRwotCi0jZW5kaWYKLQotI2VuZGlmIC8vIEJPT1NUX01Q
TF9BVVhfQ09ORklHX0VUSV9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9mb3J3YXJkaW5nLmhw
cCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2Nv
bmZpZy9mb3J3YXJkaW5nLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQyOTZh
ZDk2MTJmODhjN2FhYzc5NzY0MzRjOTBjYzAwNGQ3YzM2Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvZm9yd2FyZGluZy5ocHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyNyArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9DT05GSUdfRk9SV0FSRElO
R19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9DT05GSUdfRk9SV0FSRElOR19I
UFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwNAotLy8KLS8v
IERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0
IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElk
JAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9j
b25maWcvd29ya2Fyb3VuZC5ocHA+Ci0KLSNpZiAgICAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05P
X05FU1RFRF9GT1JXQVJESU5HKSBcCi0gICAgJiYgIWRlZmluZWQoQk9PU1RfTVBMX1BSRVBST0NF
U1NJTkdfTU9ERSkgXAotICAgICYmIEJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCBCT09T
VF9URVNURURfQVQoMHg2MTApKQotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9DRkdfTk9fTkVTVEVE
X0ZPUldBUkRJTkcKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfQVVYX0NPTkZJR19G
T1JXQVJESU5HX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2djYy5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvZ2NjLmhwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgwNDk1ZGUxN2QyMTNhYzlkZmQ4ZTY2Mzdh
MGYxMmE5MTQ2M2Q1YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9j
b25maWcvZ2NjLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLQotI2lmbmRlZiBC
T09TVF9NUExfQVVYX0NPTkZJR19HQ0NfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9B
VVhfQ09ORklHX0dDQ19IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92
b3kgMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNl
bnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8w
LnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0
KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRh
dGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpZiBkZWZpbmVk
KF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0VER19WRVJTSU9OX18pCi0jICAgZGVmaW5lIEJPT1NU
X01QTF9DRkdfR0NDICgoX19HTlVDX18gPDwgOCkgfCBfX0dOVUNfTUlOT1JfXykKLSNlbHNlCi0j
ICAgZGVmaW5lIEJPT1NUX01QTF9DRkdfR0NDIDAKLSNlbmRpZgotCi0jZW5kaWYgLy8gQk9PU1Rf
TVBMX0FVWF9DT05GSUdfR0NDX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2dwdS5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcv
Z3B1LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU1ZWQ3ODRjNDUwNTA0MjY3
MmIzZTU4NGJhM2EzNjZjZDYxZDM0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
cGwvYXV4Xy9jb25maWcvZ3B1LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLQot
I2lmbmRlZiBCT09TVF9NUExfQVVYX0NPTkZJR19HUFVfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJP
T1NUX01QTF9BVVhfQ09ORklHX0dQVV9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEVyaWMg
TmllYmxlciAyMDE0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNF
XzFfMC50eHQgb3IgY29weSBhdAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAu
dHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1l
bnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRl
IDxib29zdC9jb25maWcuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19HUFVfRU5B
QkxFRCkgXAotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9DRkdfR1BVX0VOQUJMRUQgQk9PU1RfR1BV
X0VOQUJMRUQKLQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIF9fQ1VEQUNDX18KLQotIyAgICBkZWZp
bmUgQk9PU1RfTVBMX0NGR19HUFUgMQotCi0jZWxzZQotCi0jICAgIGRlZmluZSBCT09TVF9NUExf
Q0ZHX0dQVSAwCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9DT05GSUdfR1BV
X0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2hhc19hcHBseS5ocHAgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvaGFzX2FwcGx5Lmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRjMDFjNjY0NzRiMzRhYzMyYjkyNTUz
YmM0OTBiMTczMTk4M2MxMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4
Xy9jb25maWcvaGFzX2FwcGx5LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLQot
I2lmbmRlZiBCT09TVF9NUExfQVVYX0NPTkZJR19IQVNfQVBQTFlfSFBQX0lOQ0xVREVECi0jZGVm
aW5lIEJPT1NUX01QTF9BVVhfQ09ORklHX0hBU19BUFBMWV9IUFBfSU5DTFVERUQKLQotLy8gQ29w
eXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2
aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvaGFzX3h4eC5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL21zdmMuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5kLmhwcD4KLQotI2lmICFkZWZpbmVkKEJPT1NUX01Q
TF9DRkdfTk9fSEFTX0FQUExZKSBcCi0gICAgJiYgKCAgIGRlZmluZWQoQk9PU1RfTVBMX0NGR19O
T19IQVNfWFhYKSBcCi0gICAgICAgIHx8IEJPT1NUX1dPUktBUk9VTkQoX19FREdfVkVSU0lPTl9f
LCA8IDMwMCkgXAotICAgICAgICB8fCBCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01TVkMsIDw9IDEz
MDApIFwKLSAgICAgICAgfHwgQk9PU1RfV09SS0FST1VORChfX01XRVJLU19fLCBCT09TVF9URVNU
RURfQVQoMHgzMjAyKSkgXAotICAgICAgICApCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0NGR19O
T19IQVNfQVBQTFkKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfQVVYX0NPTkZJR19I
QVNfQVBQTFlfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvaGFzX3h4eC5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvaGFzX3h4
eC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZjJmOGMyM2UwMDI4OWViZjRk
NWI0YTRkYWQ0NWNmMTBiODVhMGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L2F1eF8vY29uZmlnL2hhc194eHguaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAot
Ci0jaWZuZGVmIEJPT1NUX01QTF9BVVhfQ09ORklHX0hBU19YWFhfSFBQX0lOQ0xVREVECi0jZGVm
aW5lIEJPT1NUX01QTF9BVVhfQ09ORklHX0hBU19YWFhfSFBQX0lOQ0xVREVECi0KLS8vIENvcHly
aWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDItMjAwNAotLy8gQ29weXJpZ2h0IERhdmlkIEFicmFo
YW1zIDIwMDItMjAwMwotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8x
XzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9j
dW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNs
dWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvb3ZlcmxvYWRfcmVzb2x1dGlvbi5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3dvcmthcm91bmQuaHBwPgotCi0vLyBhZ3VydCwg
MTEvamFuLzAzOiBzaWduYWxzIGEgc3R1Yi1vbmx5ICdoYXNfeHh4JyBpbXBsZW1lbnRhdGlvbgot
Ci0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19IQVNfWFhYKSBcCi0gICAgJiYgKCAgIGRl
ZmluZWQoQk9PU1RfTVBMX0NGR19CUk9LRU5fT1ZFUkxPQURfUkVTT0xVVElPTikgXAotICAgICAg
ICB8fCBCT09TVF9XT1JLQVJPVU5EKF9fR05VQ19fLCA8PSAyKSBcCi0gICAgICAgIHx8IEJPT1NU
X1dPUktBUk9VTkQoX19ETUNfXywgQk9PU1RfVEVTVEVEX0FUKDB4ODQwKSkgXAotICAgICAgICAp
Ci0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0NGR19OT19IQVNfWFhYCi0jICAgZGVmaW5lIEJPT1NU
X01QTF9DRkdfTk9fSEFTX1hYWF9URU1QTEFURQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIEJPT1NU
X01QTF9BVVhfQ09ORklHX0hBU19YWFhfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvaW50ZWdy
YWwuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1
eF8vY29uZmlnL2ludGVncmFsLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ0
NTQyZDljMzQyODg4ZmNhZTA5NWFhMjQxYTljMjkyZjRiODQyOC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvaW50ZWdyYWwuaHBwCisrKyAvZGV2L251bGwK
QEAgLTEsMzggKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9BVVhfQ09ORklHX0lOVEVHUkFM
X0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX0NPTkZJR19JTlRFR1JBTF9IUFBf
SU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwNAotLy8KLS8vIERp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4g
Ci0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAot
Ly8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAot
Ly8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25m
aWcvbXN2Yy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3dvcmthcm91bmQu
aHBwPgotCi0jaWYgICAgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19CQ0NfSU5URUdSQUxfQ09OU1RB
TlRTKSBcCi0gICAgJiYgIWRlZmluZWQoQk9PU1RfTVBMX1BSRVBST0NFU1NJTkdfTU9ERSkgXAot
ICAgICYmIEJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCBCT09TVF9URVNURURfQVQoMHg2
MTApKQotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9DRkdfQkNDX0lOVEVHUkFMX0NPTlNUQU5UUwot
Ci0jZW5kaWYKLQotI2lmICAgICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fTkVTVEVEX1ZBTFVF
X0FSSVRITUVUSUMpIFwKLSAgICAmJiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19N
T0RFKSBcCi0gICAgJiYgKCBCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01TVkMsIDw9IDEzMDApIFwK
LSAgICAgICAgfHwgQk9PU1RfV09SS0FST1VORChfX0VER19WRVJTSU9OX18sIDw9IDIzOCkgXAot
ICAgICAgICApCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0NGR19OT19ORVNURURfVkFMVUVfQVJJ
VEhNRVRJQwotCi0jZW5kaWYKLQotI2VuZGlmIC8vIEJPT1NUX01QTF9BVVhfQ09ORklHX0lOVEVH
UkFMX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2ludGVsLmhwcCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9pbnRlbC5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZDkxNTkxNzM5NmMzMzE5ODVkNWU2NmEzZjRh
Y2YwNDM5Mzg3NDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY29u
ZmlnL2ludGVsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLQotI2lmbmRlZiBC
T09TVF9NUExfQVVYX0NPTkZJR19JTlRFTF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBM
X0FVWF9DT05GSUdfSU5URUxfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1
cnRvdm95IDIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUg
TGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNF
XzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3Vt
ZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0KLS8vIEJP
T1NUX0lOVEVMX0NYWF9WRVJTSU9OIGlzIGRlZmluZWQgaGVyZToKLSNpbmNsdWRlIDxib29zdC9j
b25maWcuaHBwPgotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9DT05GSUdfSU5URUxfSFBQX0lO
Q0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9tcGwvYXV4Xy9jb25maWcvbGFtYmRhLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9sYW1iZGEuaHBwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5M2ZiYWZlMDcxM2I4NGE4NGYyYTU1NWZkNGZiMGUxY2RkMWMy
ZGUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9sYW1i
ZGEuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01Q
TF9BVVhfQ09ORklHX0xBTUJEQV9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9D
T05GSUdfTEFNQkRBX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3Zv
eSAyMDAyLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUg
TGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNF
XzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3Vt
ZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3R0cC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1
eF8vY29uZmlnL2N0cHMuaHBwPgotCi0vLyBhZ3VydCwgMTUvamFuLzAyOiBmdWxsLWZsZWRnZWQg
aW1wbGVtZW50YXRpb24gcmVxdWlyZXMgYm90aCAKLS8vIHRlbXBsYXRlIHRlbXBsYXRlIHBhcmFt
ZXRlcnMgX2FuZF8gcGFydGlhbCBzcGVjaWFsaXphdGlvbgotCi0jaWYgICAgIWRlZmluZWQoQk9P
U1RfTVBMX0NGR19OT19GVUxMX0xBTUJEQV9TVVBQT1JUKSBcCi0gICAgJiYgKCAgIGRlZmluZWQo
Qk9PU1RfTVBMX0NGR19OT19URU1QTEFURV9URU1QTEFURV9QQVJBTUVURVJTKSBcCi0gICAgICAg
IHx8IGRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpBVElPTikgXAot
ICAgICAgICApCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0NGR19OT19GVUxMX0xBTUJEQV9TVVBQ
T1JUCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9DT05GSUdfTEFNQkRBX0hQ
UF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL21zdmMuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL21zdmMuaHBwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4YTZiOTI0NjI3N2E1YzhlN2QwZWUwYmYyZmE1MzljYjc5NDdh
MThhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9tc3Zj
LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExf
QVVYX0NPTkZJR19NU1ZDX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX0NPTkZJ
R19NU1ZDX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAy
LTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5z
ZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50
eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK
LS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRp
b24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0KLS8vIEJPT1NUX01T
VkMgaXMgZGVmaW5lZCBoZXJlOgotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0KLSNlbmRp
ZiAvLyBCT09TVF9NUExfQVVYX0NPTkZJR19NU1ZDX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY29uZmln
L21zdmNfdHlwZW5hbWUuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL2F1eF8vY29uZmlnL21zdmNfdHlwZW5hbWUuaHBwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmZWVkYzE2ZGI4Nzc4ZWU1NThhZGQ1Y2ZlM2MxNTJiNzg2Zjc5MTM2Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9tc3ZjX3R5cGVu
YW1lLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9N
UExfQVVYX0NPTkZJR19NU1ZDX1RZUEVOQU1FX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9N
UExfQVVYX0NPTkZJR19NU1ZDX1RZUEVOQU1FX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQg
QWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlz
aW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL21zdmMuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5kLmhwcD4KLQotI2lmIEJPT1NUX1dP
UktBUk9VTkQoQk9PU1RfTVNWQywgPD0gMTMwMCkKLSMgICBkZWZpbmUgQk9PU1RfTVNWQ19UWVBF
TkFNRQotI2Vsc2UKLSMgICBkZWZpbmUgQk9PU1RfTVNWQ19UWVBFTkFNRSB0eXBlbmFtZQotI2Vu
ZGlmCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfQVVYX0NPTkZJR19NU1ZDX1RZUEVOQU1FX0hQUF9J
TkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL2F1eF8vY29uZmlnL250dHAuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL250dHAuaHBwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxMTEyNWE5YmZmYzNmODE3MzAwNGIzNjc3NmFlZDFiNGY2NzRiNDdj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9udHRwLmhw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQVVY
X0NPTkZJR19OVFRQX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX0NPTkZJR19O
VFRQX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAxLTIw
MDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8v
Ci0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24u
Ci0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F1eF8vY29uZmlnL21zdmMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZp
Zy93b3JrYXJvdW5kLmhwcD4KLQotLy8gTVNWQyA2LjUgSUNFLXMgb24gdGhlIGNvZGUgYXMgc2lt
cGxlIGFzIHRoaXMgKHNlZSAiYXV4Xy9udHRwX2RlY2wuaHBwIgotLy8gZm9yIGEgd29ya2Fyb3Vu
ZCk6Ci0vLwotLy8gICAgbmFtZXNwYWNlIHN0ZCB7Ci0vLyAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUg
Q2hhciA+IHN0cnVjdCBzdHJpbmc7Ci0vLyAgICB9Ci0vLwotLy8gICAgdm9pZCBmb28oc3RkOjpz
dHJpbmc8Y2hhcj4pOwotLy8KLS8vICAgIG5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwg
ewotLy8gICAgdGVtcGxhdGU8IGludCA+IHN0cnVjdCBhcmc7Ci0vLyAgICB9fQotCi0jaWYgICAg
IWRlZmluZWQoQk9PU1RfTVBMX0NGR19OVFRQX0JVRykgXAotICAgICYmICFkZWZpbmVkKEJPT1NU
X01QTF9QUkVQUk9DRVNTSU5HX01PREUpIFwKLSAgICAmJiBCT09TVF9XT1JLQVJPVU5EKEJPT1NU
X01TVkMsIDwgMTMwMCkKLQotIyAgIGRlZmluZSBCT09TVF9NUExfQ0ZHX05UVFBfQlVHCi0KLSNl
bmRpZgotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9DT05GSUdfTlRUUF9IUFBfSU5DTFVERUQK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21w
bC9hdXhfL2NvbmZpZy9vdmVybG9hZF9yZXNvbHV0aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9vdmVybG9hZF9yZXNvbHV0
aW9uLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFlNDQ4NmU5YmM4MzZlMzVi
ZTNkOWY2NzQ0MmEyMDRmZGI4NmIzZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
cGwvYXV4Xy9jb25maWcvb3ZlcmxvYWRfcmVzb2x1dGlvbi5ocHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyOSArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9DT05GSUdfT1ZFUkxPQURfUkVT
T0xVVElPTl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9DT05GSUdfT1ZFUkxP
QURfUkVTT0xVVElPTl9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92
b3kgMjAwMi0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1
bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1
ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5kLmhwcD4KLQotI2lmICAgICFkZWZp
bmVkKEJPT1NUX01QTF9DRkdfQlJPS0VOX09WRVJMT0FEX1JFU09MVVRJT04pIFwKLSAgICAmJiAh
ZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKSBcCi0gICAgJiYgKCAgIEJPT1NU
X1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCA8IDB4NTkwKSBcCi0gICAgICAgIHx8IEJPT1NUX1dP
UktBUk9VTkQoX19NV0VSS1NfXywgPCAweDMwMDEpIFwKLSAgICAgICAgKQotCi0jICAgZGVmaW5l
IEJPT1NUX01QTF9DRkdfQlJPS0VOX09WRVJMT0FEX1JFU09MVVRJT04KLQotI2VuZGlmCi0KLSNl
bmRpZiAvLyBCT09TVF9NUExfQVVYX0NPTkZJR19PVkVSTE9BRF9SRVNPTFVUSU9OX0hQUF9JTkNM
VURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvbXBsL2F1eF8vY29uZmlnL3BwX2NvdW50ZXIuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL3BwX2NvdW50ZXIuaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2ZiOGQ2NmM2MjQwMjJkZmRiNTZmMDFkOWZjMDhk
NzM3MWRlMzZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZp
Zy9wcF9jb3VudGVyLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLQotI2lmbmRl
ZiBCT09TVF9NUExfQVVYX0NPTkZJR19QUF9DT1VOVEVSX0hQUF9JTkNMVURFRAotI2RlZmluZSBC
T09TVF9NUExfQVVYX0NPTkZJR19QUF9DT1VOVEVSX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmln
aHQgQWxla3NleSBHdXJ0b3ZveSAyMDA2Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJv
b3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMv
bXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lv
biQKLQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9BVVhfUFBfQ09VTlRFUikKLSMgICBpbmNsdWRl
IDxib29zdC9tcGwvYXV4Xy9jb25maWcvbXN2Yy5ocHA+Ci0jICAgaWYgQk9PU1RfV09SS0FST1VO
RChCT09TVF9NU1ZDLCA+PSAxMzAwKQotIyAgICAgICBkZWZpbmUgQk9PU1RfTVBMX0FVWF9QUF9D
T1VOVEVSKCkgX19DT1VOVEVSX18KLSMgICBlbHNlCi0jICAgICAgIGRlZmluZSBCT09TVF9NUExf
QVVYX1BQX0NPVU5URVIoKSBfX0xJTkVfXwotIyAgIGVuZGlmCi0jZW5kaWYKLQotI2VuZGlmIC8v
IEJPT1NUX01QTF9BVVhfQ09ORklHX1BQX0NPVU5URVJfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25m
aWcvcHJlcHJvY2Vzc29yLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9wcmVwcm9jZXNzb3IuaHBwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4MmViYzY4ZmUwYzVmZDk0MzljYTFhMWUyYjM1Nzc4MWMwMmY3NDIxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9wcmVwcm9jZXNz
b3IuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01Q
TF9BVVhfQ09ORklHX1BSRVBST0NFU1NPUl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBM
X0FVWF9DT05GSUdfUFJFUFJPQ0VTU09SX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxl
a3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9v
c3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9t
cGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9u
JAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3dvcmthcm91bmQuaHBwPgotCi0j
aWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19CUk9LRU5fUFBfTUFDUk9fRVhQQU5TSU9OKSBcCi0g
ICAgJiYgKCAgIEJPT1NUX1dPUktBUk9VTkQoX19NV0VSS1NfXywgPD0gMHgzMDAzKSBcCi0gICAg
ICAgIHx8IEJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCA8IDB4NTgyKSBcCi0gICAgICAg
IHx8IEJPT1NUX1dPUktBUk9VTkQoX19JQk1DUFBfXywgQk9PU1RfVEVTVEVEX0FUKDUwMikpIFwK
LSAgICAgICAgKQotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9DRkdfQlJPS0VOX1BQX01BQ1JPX0VY
UEFOU0lPTgotCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fT1dOX1BQ
X1BSSU1JVElWRVMpCi0jICAgZGVmaW5lIEJPT1NUX01QTF9DRkdfTk9fT1dOX1BQX1BSSU1JVElW
RVMKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTkVFRFNfVE9LRU5fUEFTVElOR19PUF9G
T1JfVE9LRU5TX0pVWFRBUE9TSU5HKSBcCi0gICAgJiYgQk9PU1RfV09SS0FST1VORChfX0RNQ19f
LCBCT09TVF9URVNURURfQVQoMHg4NDApKQotIyAgIGRlZmluZSBCT09TVF9ORUVEU19UT0tFTl9Q
QVNUSU5HX09QX0ZPUl9UT0tFTlNfSlVYVEFQT1NJTkcKLSNlbmRpZgotCi0KLSNlbmRpZiAvLyBC
T09TVF9NUExfQVVYX0NPTkZJR19QUkVQUk9DRVNTT1JfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25m
aWcvc3RhdGljX2NvbnN0YW50LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9zdGF0aWNfY29uc3RhbnQuaHBwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlY2UzOGZiMGU5OWViNDVhNzg5M2IwM2UyYjAyNzExYzc3ZmFl
MGQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9zdGF0
aWNfY29uc3RhbnQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotCi0jaWZuZGVm
IEJPT1NUX01QTF9BVVhfQ09ORklHX1NUQVRJQ19DT05TVEFOVF9IUFBfSU5DTFVERUQKLSNkZWZp
bmUgQk9PU1RfTVBMX0FVWF9DT05GSUdfU1RBVElDX0NPTlNUQU5UX0hQUF9JTkNMVURFRAotCi0v
LyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNl
ZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5i
b29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRl
JAotLy8gJFJldmlzaW9uJAotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX1BSRVBST0NFU1NJTkdf
TU9ERSkKLS8vIEJPT1NUX1NUQVRJQ19DT05TVEFOVCBpcyBkZWZpbmVkIGhlcmU6Ci0jICAgaW5j
bHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNlbHNlCi0vLyB1bmRlZiB0aGUgbWFjcm8gZm9yIHRo
ZSBwcmVwcm9jZXNzaW5nIG1vZGUKLSMgICB1bmRlZiBCT09TVF9TVEFUSUNfQ09OU1RBTlQKLSNl
bmRpZgotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9DT05GSUdfU1RBVElDX0NPTlNUQU5UX0hQ
UF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL3R0cC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvdHRwLmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggM2FmZjNmODRkZjA1ZGMwNThmZWUyNmExNThlNWFjMmNhOGI0ODNk
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvdHRwLmhw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQVVY
X0NPTkZJR19UVFBfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfQ09ORklHX1RU
UF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0
Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZl
cnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9y
IGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwot
Ly8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgot
Ci0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21w
bC9hdXhfL2NvbmZpZy9tc3ZjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcv
Z2NjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHA+
Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX1RFTVBMQVRFX1RFTVBMQVRFX1BBUkFN
RVRFUlMpIFwKLSAgICAmJiAoIGRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVfVEVNUExBVEVTKSBc
Ci0gICAgICB8fCBCT09TVF9XT1JLQVJPVU5EKCBfX0JPUkxBTkRDX18sIEJPT1NUX1RFU1RFRF9B
VCggMHg1OTApICkgXAotICAgICAgICkKLQotIyAgIGRlZmluZSBCT09TVF9NUExfQ0ZHX05PX1RF
TVBMQVRFX1RFTVBMQVRFX1BBUkFNRVRFUlMKLQotI2VuZGlmCi0KLQotI2lmICAgICFkZWZpbmVk
KEJPT1NUX01QTF9DRkdfRVhURU5ERURfVEVNUExBVEVfUEFSQU1FVEVSU19NQVRDSElORykgXAot
ICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpIFwKLSAgICAmJiAo
ICAgQk9PU1RfV09SS0FST1VORChCT09TVF9NUExfQ0ZHX0dDQywgQk9PU1RfVEVTVEVEX0FUKDB4
MDMwMikpIFwKLSAgICAgICAgfHwgQk9PU1RfV09SS0FST1VORChfX0JPUkxBTkRDX18sIEJPT1NU
X1RFU1RFRF9BVCgweDYxMCkpIFwKLSAgICAgICAgKQotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9D
RkdfRVhURU5ERURfVEVNUExBVEVfUEFSQU1FVEVSU19NQVRDSElORwotCi0jZW5kaWYKLQotI2Vu
ZGlmIC8vIEJPT1NUX01QTF9BVVhfQ09ORklHX1RUUF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZp
Zy90eXBlb2YuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL2F1eF8vY29uZmlnL3R5cGVvZi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGNkZTYxNzljNjdjNzY1MzhlNTdkODYyMGJjYTNjYTA2NDM4ZWVmNTguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY29uZmlnL3R5cGVvZi5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzOCArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9DT05GSUdfVFlQRU9G
X0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX0NPTkZJR19UWVBFT0ZfSFBQX0lO
Q0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDMtMjAwNAotLy8KLS8v
IERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0
IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElk
JAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9j
b25maWcvZ2NjLmhwcD4KLQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfSEFTX1RZUEVPRikg
XAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpIFwKLSAgICAm
JiAoICAgZGVmaW5lZChCT09TVF9NUExfQ0ZHX0dDQykgJiYgQk9PU1RfTVBMX0NGR19HQ0MgPj0g
MHgwMzAyIFwKLSAgICAgICAgfHwgZGVmaW5lZChfX01XRVJLU19fKSAmJiBfX01XRVJLU19fID49
IDB4MzAwMCBcCi0gICAgICAgICkKLQotIyAgIGRlZmluZSBCT09TVF9NUExfQ0ZHX0hBU19UWVBF
T0YKLQotI2VuZGlmCi0KLQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfVFlQRU9GX0JBU0VE
X1NFUVVFTkNFUykgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01P
REUpIFwKLSAgICAmJiBkZWZpbmVkKEJPT1NUX01QTF9DRkdfSEFTX1RZUEVPRikKLQotIyAgIGRl
ZmluZSBCT09TVF9NUExfQ0ZHX1RZUEVPRl9CQVNFRF9TRVFVRU5DRVMKLQotI2VuZGlmCi0KLSNl
bmRpZiAvLyBCT09TVF9NUExfQVVYX0NPTkZJR19UWVBFT0ZfSFBQX0lOQ0xVREVECmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9j
b25maWcvdXNlX3ByZXByb2Nlc3NlZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb25maWcvdXNlX3ByZXByb2Nlc3NlZC5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZDVjNjA3NTU5MDQ5Njk5ZmMwNmEzZWY5YWYyZGZj
MWZmM2FkMGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vY29uZmln
L3VzZV9wcmVwcm9jZXNzZWQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotCi0j
aWZuZGVmIEJPT1NUX01QTF9BVVhfQ09ORklHX1VTRV9QUkVQUk9DRVNTRURfSFBQX0lOQ0xVREVE
Ci0jZGVmaW5lIEJPT1NUX01QTF9BVVhfQ09ORklHX1VTRV9QUkVQUk9DRVNTRURfSFBQX0lOQ0xV
REVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4g
Ci0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAot
Ly8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAot
Ly8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLS8vICNkZWZpbmUgQk9PU1RfTVBMX0NGR19OT19Q
UkVQUk9DRVNTRURfSEVBREVSUwotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9DT05GSUdfVVNF
X1BSRVBST0NFU1NFRF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5kLmhwcCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbmZp
Zy93b3JrYXJvdW5kLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjNjMyOTgy
ZGZjZDgxNDYwNzZlZmNmNGZiNmMyMDgzY2ZlZjZjZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tcGwvYXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxOSArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9DT05GSUdfV09SS0FST1VORF9I
UFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9DT05GSUdfV09SS0FST1VORF9IUFBf
SU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMi0yMDA0Ci0vLwot
Ly8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24g
MS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkg
YXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAk
SWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC93
b3JrYXJvdW5kLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9BVVhfQ09ORklHX1dPUktBUk9V
TkRfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvYXV4Xy9jb250YWluc19pbXBsLmhwcCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2NvbnRhaW5zX2ltcGwuaHBwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODBjYWVhZmVkYzAzNTQ5ZGU4NjAwOTllZWM0
NmY3NWMxNDQyNjM4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2Nv
bnRhaW5zX2ltcGwuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotCi0jaWZuZGVm
IEJPT1NUX01QTF9BVVhfQ09OVEFJTlNfSU1QTF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1Rf
TVBMX0FVWF9DT05UQUlOU19JTVBMX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgRXJpYyBG
cmllZG1hbiAyMDAyCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDA0Ci0vLwotLy8g
RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4w
LiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQg
Ci0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0
dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQk
Ci0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9jb250YWlu
c19md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9iZWdpbl9lbmQuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L21wbC9maW5kLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvbm90LmhwcD4KLSNpbmNs
dWRlIDxib29zdC9tcGwvYXV4Xy90cmFpdHNfbGFtYmRhX3NwZWMuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L21wbC9hdXhfL2NvbmZpZy9mb3J3YXJkaW5nLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwv
YXV4Xy9jb25maWcvc3RhdGljX2NvbnN0YW50LmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2lzX3NhbWUuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsK
LQotdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+Ci1zdHJ1Y3QgY29udGFpbnNfaW1wbAotewotICAg
IHRlbXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSwgdHlwZW5hbWUgVCA+IHN0cnVjdCBhcHBseQot
I2lmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fTkVTVEVEX0ZPUldBUkRJTkcpCi0gICAgICAg
IDogbm90XzwgaXNfc2FtZTwKLSAgICAgICAgICAgICAgdHlwZW5hbWUgZmluZDxTZXF1ZW5jZSxU
Pjo6dHlwZQotICAgICAgICAgICAgLCB0eXBlbmFtZSBlbmQ8U2VxdWVuY2U+Ojp0eXBlCi0gICAg
ICAgICAgICA+ID4KLSAgICB7Ci0jZWxzZQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBub3RfPCBp
c19zYW1lPAotICAgICAgICAgICAgICB0eXBlbmFtZSBmaW5kPFNlcXVlbmNlLFQ+Ojp0eXBlCi0g
ICAgICAgICAgICAsIHR5cGVuYW1lIGVuZDxTZXF1ZW5jZT46OnR5cGUKLSAgICAgICAgICAgID4g
PiB0eXBlOwotCi0gICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IAot
ICAgICAgICAgICAgICAobm90XzwgaXNfc2FtZTwKLSAgICAgICAgICAgICAgICAgIHR5cGVuYW1l
IGZpbmQ8U2VxdWVuY2UsVD46OnR5cGUKLSAgICAgICAgICAgICAgICAsIHR5cGVuYW1lIGVuZDxT
ZXF1ZW5jZT46OnR5cGUKLSAgICAgICAgICAgICAgICA+ID46OnZhbHVlKQotICAgICAgICAgICAg
KTsKLSNlbmRpZgotICAgIH07Ci19OwotCi1CT09TVF9NUExfQUxHT1JJVE1fVFJBSVRTX0xBTUJE
QV9TUEVDKDIsY29udGFpbnNfaW1wbCkKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9BVVhf
Q09OVEFJTlNfSU1QTF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2ZpbmRfaWZfcHJlZC5ocHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9maW5kX2lmX3By
ZWQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDdkODlkNmM3ZjA0ZDI0OGRj
MWI3NGE3ZDY4NzRkNTAxYmVkNzEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21w
bC9hdXhfL2ZpbmRfaWZfcHJlZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0K
LSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9GSU5EX0lGX1BSRURfSFBQX0lOQ0xVREVECi0jZGVmaW5l
IEJPT1NUX01QTF9BVVhfRklORF9JRl9QUkVEX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQg
QWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vIENvcHlyaWdodCBFcmljIEZyaWVkbWFuIDIw
MDIKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8v
Ci0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24u
Ci0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9pdGVyX2FwcGx5LmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9tcGwvbm90LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5h
bWVzcGFjZSBhdXggewotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgUHJlZGljYXRlID4KLXN0cnVjdCBm
aW5kX2lmX3ByZWQKLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgSXRlcmF0b3IgPgotICAgIHN0
cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBub3RfPCBhdXg6Oml0ZXJfYXBwbHkx
PFByZWRpY2F0ZSxJdGVyYXRvcj4gPiB0eXBlOwotICAgIH07Ci19OwotCi19fX0KLQotI2VuZGlm
IC8vIEJPT1NUX01QTF9BVVhfRklORF9JRl9QUkVEX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vZm9sZF9p
bXBsLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9h
dXhfL2ZvbGRfaW1wbC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3Yzg4YzVi
MjkwMDcxYTMwYmMyNDJlYjI3OTA2N2ViN2M3Yjg2ZWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2F1eF8vZm9sZF9pbXBsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICsw
LDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQVVYX0ZPTERfSU1QTF9IUFBfSU5DTFVERUQKLSNk
ZWZpbmUgQk9PU1RfTVBMX0FVWF9GT0xEX0lNUExfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdo
dCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2
aXNpb24kCi0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotIyAg
IGluY2x1ZGUgPGJvb3N0L21wbC9uZXh0X3ByaW9yLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9t
cGwvYXBwbHkuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9kZXJlZi5ocHA+Ci0jICAgaW5j
bHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2N0cHMuaHBwPgotIyAgIGlmIGRlZmluZWQoQk9P
U1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpBVElPTikKLSMgICAgICAgaW5jbHVkZSA8
Ym9vc3QvbXBsL2lmLmhwcD4KLSMgICAgICAgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNf
c2FtZS5ocHA+Ci0jICAgZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8v
Y29uZmlnL3VzZV9wcmVwcm9jZXNzZWQuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NG
R19OT19QUkVQUk9DRVNTRURfSEVBREVSUykgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9Q
UkVQUk9DRVNTSU5HX01PREUpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BSRVBST0NFU1NFRF9I
RUFERVIgZm9sZF9pbXBsLmhwcAotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2luY2x1ZGVf
cHJlcHJvY2Vzc2VkLmhwcD4KLQotI2Vsc2UKLQotIyAgIGRlZmluZSBBVVg3NzgwNzZfRk9MRF9J
TVBMX09QKGl0ZXIpIHR5cGVuYW1lIGRlcmVmPGl0ZXI+Ojp0eXBlCi0jICAgZGVmaW5lIEFVWDc3
ODA3Nl9GT0xEX0lNUExfTkFNRV9QUkVGSVggZm9sZAotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9h
dXhfL2ZvbGRfaW1wbF9ib2R5LmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9DRkdfTk9fUFJF
UFJPQ0VTU0VEX0hFQURFUlMKLSNlbmRpZiAvLyBCT09TVF9NUExfQVVYX0ZPTERfSU1QTF9IUFBf
SU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9hdXhfL2Z1bGxfbGFtYmRhLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2Z1bGxfbGFtYmRhLmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTE4YWZmNWMwOWYzMTdkMjJlNTgxNmM1MzcwOTIzNWVjYWM3Yzk5
Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9mdWxsX2xhbWJkYS5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTQgKzAsMCBAQAotCi0jaWYgIWRlZmluZWQoQk9PU1Rf
UFBfSVNfSVRFUkFUSU5HKQotCi0vLy8vLyBoZWFkZXIgYm9keQotCi0jaWZuZGVmIEJPT1NUX01Q
TF9BVVhfRlVMTF9MQU1CREFfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfRlVM
TF9MQU1CREFfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIw
MDEtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNl
bnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8w
LnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0
KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRh
dGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpZiAhZGVmaW5l
ZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9s
YW1iZGFfZndkLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYmluZF9md2QuaHBwPgotIyAg
IGluY2x1ZGUgPGJvb3N0L21wbC9wcm90ZWN0LmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwv
cXVvdGUuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hcmcuaHBwPgotIyAgIGluY2x1ZGUg
PGJvb3N0L21wbC9ib29sLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvaW50X2Z3ZC5ocHA+
Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vdGVtcGxhdGVfYXJpdHkuaHBwPgotIyAgIGlu
Y2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hX3NwZWMuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21w
bC9hdXhfL2NvbmZpZy90dHAuaHBwPgotIyAgIGlmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19FWFRF
TkRFRF9URU1QTEFURV9QQVJBTUVURVJTX01BVENISU5HKQotIyAgICAgICBpbmNsdWRlIDxib29z
dC9tcGwvaWYuaHBwPgotIyAgIGVuZGlmCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9h
dXhfL2xhbWJkYV9hcml0eV9wYXJhbS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29u
ZmlnL3VzZV9wcmVwcm9jZXNzZWQuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19O
T19QUkVQUk9DRVNTRURfSEVBREVSUykgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQ
Uk9DRVNTSU5HX01PREUpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BSRVBST0NFU1NFRF9IRUFE
RVIgZnVsbF9sYW1iZGEuaHBwCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vaW5jbHVkZV9w
cmVwcm9jZXNzZWQuaHBwPgotCi0jZWxzZQotCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2xpbWl0
cy9hcml0eS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL2Rl
ZmF1bHRfcGFyYW1zLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNz
b3IvcGFyYW1zLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3Iv
ZW51bS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL3JlcGVh
dC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2RtY19hbWJpZ3VvdXNf
Y3Rwcy5ocHA+Ci0KLSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvaXRlcmF0ZS5ocHA+
Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbW1hX2lmLmhwcD4KLSMgICBpbmNs
dWRlIDxib29zdC9wcmVwcm9jZXNzb3IvaW5jLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9wcmVw
cm9jZXNzb3IvY2F0LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0K
LS8vIGxvY2FsIG1hY3JvcywgI3VuZGVmLWluZWQgYXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyCi0j
ICAgZGVmaW5lIEFVWDc3ODA3Nl9MQU1CREFfUEFSQU1TKGlfLCBwYXJhbSkgXAotICAgIEJPT1NU
X01QTF9QUF9QQVJBTVMoaV8sIHBhcmFtKSBcCi0gICAgLyoqLwotCi0jICAgZGVmaW5lIEFVWDc3
ODA3Nl9CSU5EX1BBUkFNUyhwYXJhbSkgXAotICAgIEJPT1NUX01QTF9QUF9QQVJBTVMoIFwKLSAg
ICAgICAgICBCT09TVF9NUExfTElNSVRfTUVUQUZVTkNUSU9OX0FSSVRZIFwKLSAgICAgICAgLCBw
YXJhbSBcCi0gICAgICAgICkgXAotICAgIC8qKi8KLQotIyAgIGRlZmluZSBBVVg3NzgwNzZfQklO
RF9OX1BBUkFNUyhpXywgcGFyYW0pIFwKLSAgICBCT09TVF9QUF9DT01NQV9JRihpXykgXAotICAg
IEJPT1NUX01QTF9QUF9QQVJBTVMoaV8sIHBhcmFtKSBcCi0gICAgLyoqLwotCi0jICAgZGVmaW5l
IEFVWDc3ODA3Nl9BUklUWV9QQVJBTShwYXJhbSkgXAotICAgIEJPT1NUX01QTF9BVVhfTEFNQkRB
X0FSSVRZX1BBUkFNKHBhcmFtKSBcCi0gICAgLyoqLwotCi0KLSNkZWZpbmUgbl8gQk9PU1RfTVBM
X0xJTUlUX01FVEFGVU5DVElPTl9BUklUWQotbmFtZXNwYWNlIGF1eCB7Ci0KLXRlbXBsYXRlPAot
ICAgICAgQk9PU1RfTVBMX1BQX0RFRkFVTFRfUEFSQU1TKG5fLGJvb2wgQyxmYWxzZSkKLSAgICA+
Ci1zdHJ1Y3QgbGFtYmRhX29yCi0gICAgOiB0cnVlXwotewotfTsKLQotdGVtcGxhdGU8Pgotc3Ry
dWN0IGxhbWJkYV9vcjwgQk9PU1RfTVBMX1BQX0VOVU0obl8sZmFsc2UpID4KLSAgICA6IGZhbHNl
XwotewotfTsKLQotfSAvLyBuYW1lc3BhY2UgYXV4Ci0jdW5kZWYgbl8KLQotdGVtcGxhdGU8Ci0g
ICAgICB0eXBlbmFtZSBUCi0gICAgLCB0eXBlbmFtZSBUYWcKLSAgICBBVVg3NzgwNzZfQVJJVFlf
UEFSQU0odHlwZW5hbWUgQXJpdHkpCi0gICAgPgotc3RydWN0IGxhbWJkYQotewotICAgIHR5cGVk
ZWYgZmFsc2VfIGlzX2xlOwotICAgIHR5cGVkZWYgVCByZXN1bHRfOwotICAgIHR5cGVkZWYgVCB0
eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUCi0gICAgPgotc3RydWN0IGlz
X2xhbWJkYV9leHByZXNzaW9uCi0gICAgOiBsYW1iZGE8VD46OmlzX2xlCi17Ci19OwotCi0KLXRl
bXBsYXRlPCBpbnQgTiwgdHlwZW5hbWUgVGFnID4KLXN0cnVjdCBsYW1iZGE8IGFyZzxOPixUYWcg
QVVYNzc4MDc2X0FSSVRZX1BBUkFNKGludF88LTE+KSA+Ci17Ci0gICAgdHlwZWRlZiB0cnVlXyBp
c19sZTsKLSAgICB0eXBlZGVmIG1wbDo6YXJnPE4+IHJlc3VsdF87IC8vIHF1YWxpZmllZCBmb3Ig
dGhlIHNha2Ugb2YgTUlQU3BybyA3LjQxCi0gICAgdHlwZWRlZiBtcGw6OnByb3RlY3Q8cmVzdWx0
Xz4gdHlwZTsgCi19OwotCi0KLSNkZWZpbmUgQk9PU1RfUFBfSVRFUkFUSU9OX1BBUkFNU18xIFwK
LSAgICAoMywoMCwgQk9PU1RfTVBMX0xJTUlUX01FVEFGVU5DVElPTl9BUklUWSwgPGJvb3N0L21w
bC9hdXhfL2Z1bGxfbGFtYmRhLmhwcD4pKQotI2luY2x1ZGUgQk9PU1RfUFBfSVRFUkFURSgpCi0K
LS8vLyBzcGVjaWFsIGNhc2UgZm9yICdwcm90ZWN0JwotdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFRhZyA+Ci1zdHJ1Y3QgbGFtYmRhPCBtcGw6OnByb3RlY3Q8VD4sVGFnIEFVWDc3ODA3
Nl9BUklUWV9QQVJBTShpbnRfPDE+KSA+Ci17Ci0gICAgdHlwZWRlZiBmYWxzZV8gaXNfbGU7Ci0g
ICAgdHlwZWRlZiBtcGw6OnByb3RlY3Q8VD4gcmVzdWx0XzsKLSAgICB0eXBlZGVmIHJlc3VsdF8g
dHlwZTsKLX07Ci0KLS8vLyBzcGVjaWFsaXphdGlvbnMgZm9yIHRoZSBtYWluICdiaW5kJyBmb3Jt
Ci10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIEFVWDc3ODA3Nl9CSU5EX1BBUkFNUyh0eXBl
bmFtZSBUKQotICAgICwgdHlwZW5hbWUgVGFnCi0gICAgPgotc3RydWN0IGxhbWJkYTwKLSAgICAg
ICAgICBiaW5kPEYsQVVYNzc4MDc2X0JJTkRfUEFSQU1TKFQpPgotICAgICAgICAsIFRhZwotICAg
ICAgICBBVVg3NzgwNzZfQVJJVFlfUEFSQU0oaW50XzxCT09TVF9QUF9JTkMoQk9PU1RfTVBMX0xJ
TUlUX01FVEFGVU5DVElPTl9BUklUWSk+KQotICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiBmYWxz
ZV8gaXNfbGU7Ci0gICAgdHlwZWRlZiBiaW5kPEYsIEFVWDc3ODA3Nl9CSU5EX1BBUkFNUyhUKT4g
cmVzdWx0XzsKLSAgICB0eXBlZGVmIHJlc3VsdF8gdHlwZTsKLX07Ci0KLQotI2lmIGRlZmluZWQo
Qk9PU1RfTVBMX0NGR19FWFRFTkRFRF9URU1QTEFURV9QQVJBTUVURVJTX01BVENISU5HKQotCi10
ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYKLSAgICAsIHR5cGVuYW1lIFRhZzEKLSAgICAsIHR5
cGVuYW1lIFRhZzIKLSAgICAsIHR5cGVuYW1lIEFyaXR5Ci0gICAgPgotc3RydWN0IGxhbWJkYTwK
LSAgICAgICAgICBsYW1iZGE8RixUYWcxLEFyaXR5PgotICAgICAgICAsIFRhZzIKLSAgICAgICAg
LCBpbnRfPDM+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIGxhbWJkYTwgRixUYWcyID4gbDE7
Ci0gICAgdHlwZWRlZiBsYW1iZGE8IFRhZzEsVGFnMiA+IGwyOwotCi0gICAgdHlwZWRlZiB0eXBl
bmFtZSBsMTo6aXNfbGUgaXNfbGU7Ci0gICAgdHlwZWRlZiBiaW5kMTwgcXVvdGUxPGF1eDo6dGVt
cGxhdGVfYXJpdHk+LCB0eXBlbmFtZSBsMTo6cmVzdWx0XyA+IGFyaXR5XzsKLSAgICB0eXBlZGVm
IGxhbWJkYTwgdHlwZW5hbWUgaWZfPGlzX2xlLGFyaXR5XyxBcml0eT46OnR5cGUsVGFnMiA+IGwz
OwotICAgIAotICAgIHR5cGVkZWYgYXV4OjpsZV9yZXN1bHQzPGlzX2xlLCBUYWcyLCBtcGw6Omxh
bWJkYSwgbDEsIGwyLCBsMz4gbGVfcmVzdWx0XzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGxlX3Jl
c3VsdF86OnJlc3VsdF8gcmVzdWx0XzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGxlX3Jlc3VsdF86
OnR5cGUgdHlwZTsKLX07Ci0KLSNlbGlmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfRE1DX0FNQklH
VU9VU19DVFBTKQotCi0vLy8gd29ya2Fyb3VuZCBmb3IgTVdDVyA4LjMrL0VERyA8IDMwMywgbGVh
ZHMgdG8gYW1iaWd1aXR5IG9uIERpZ2l0YWwgTWFycwotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFt
ZSBGLCB0eXBlbmFtZSBUYWcxLCB0eXBlbmFtZSBUYWcyCi0gICAgPgotc3RydWN0IGxhbWJkYTwK
LSAgICAgICAgICBsYW1iZGE8IEYsVGFnMSA+Ci0gICAgICAgICwgVGFnMgotICAgICAgICA+Ci17
Ci0gICAgdHlwZWRlZiBsYW1iZGE8IEYsVGFnMiA+IGwxOwotICAgIHR5cGVkZWYgbGFtYmRhPCBU
YWcxLFRhZzIgPiBsMjsKLSAgICAKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGwxOjppc19sZSBpc19s
ZTsKLSAgICB0eXBlZGVmIGF1eDo6bGVfcmVzdWx0Mjxpc19sZSwgVGFnMiwgbXBsOjpsYW1iZGEs
IGwxLCBsMj4gbGVfcmVzdWx0XzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGxlX3Jlc3VsdF86OnJl
c3VsdF8gcmVzdWx0XzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGxlX3Jlc3VsdF86OnR5cGUgdHlw
ZTsKLX07Ci0KLSNlbmRpZgotCi0jICAgdW5kZWYgQVVYNzc4MDc2X0FSSVRZX1BBUkFNCi0jICAg
dW5kZWYgQVVYNzc4MDc2X0JJTkRfTl9QQVJBTVMKLSMgICB1bmRlZiBBVVg3NzgwNzZfQklORF9Q
QVJBTVMKLSMgICB1bmRlZiBBVVg3NzgwNzZfTEFNQkRBX1BBUkFNUwotCi0jaWYgIWRlZmluZWQo
Qk9PU1RfTVBMX0NGR19FWFRFTkRFRF9URU1QTEFURV9QQVJBTUVURVJTX01BVENISU5HKQotQk9P
U1RfTVBMX0FVWF9OQV9TUEVDKDIsIGxhbWJkYSkKLSNlbHNlCi1CT09TVF9NUExfQVVYX05BX1NQ
RUMyKDIsIDMsIGxhbWJkYSkKLSNlbmRpZgotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0NG
R19OT19QUkVQUk9DRVNTRURfSEVBREVSUwotI2VuZGlmIC8vIEJPT1NUX01QTF9BVVhfRlVMTF9M
QU1CREFfSFBQX0lOQ0xVREVECi0KLS8vLy8vIGl0ZXJhdGlvbiwgZGVwdGggPT0gMQotCi0vLyBG
b3IgZ2NjIDQuNCBjb21wYXRhYmlsaXR5LCB3ZSBtdXN0IGluY2x1ZGUgdGhlCi0vLyBCT09TVF9Q
UF9JVEVSQVRJT05fREVQVEggdGVzdCBpbnNpZGUgYW4gI2Vsc2UgY2xhdXNlLgotI2Vsc2UgLy8g
Qk9PU1RfUFBfSVNfSVRFUkFUSU5HCi0jaWYgQk9PU1RfUFBfSVRFUkFUSU9OX0RFUFRIKCkgPT0g
MQotI2RlZmluZSBpXyBCT09TVF9QUF9GUkFNRV9JVEVSQVRJT04oMSkKLQotI2lmIGlfID4gMAot
Ci1uYW1lc3BhY2UgYXV4IHsKLQotIyAgIGRlZmluZSBBVVg3NzgwNzZfUkVTVUxUKHVudXNlZCwg
aV8sIFQpIFwKLSAgICBCT09TVF9QUF9DT01NQV9JRihpXykgXAotICAgIHR5cGVuYW1lIEJPT1NU
X1BQX0NBVChULCBCT09TVF9QUF9JTkMoaV8pKTo6cmVzdWx0XyBcCi0gICAgLyoqLwotCi0jICAg
ZGVmaW5lIEFVWDc3ODA3Nl9UWVBFKHVudXNlZCwgaV8sIFQpIFwKLSAgICBCT09TVF9QUF9DT01N
QV9JRihpXykgXAotICAgIHR5cGVuYW1lIEJPT1NUX1BQX0NBVChULCBCT09TVF9QUF9JTkMoaV8p
KTo6dHlwZSBcCi0gICAgLyoqLwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIElzTEUsIHR5
cGVuYW1lIFRhZwotICAgICwgdGVtcGxhdGU8IEFVWDc3ODA3Nl9MQU1CREFfUEFSQU1TKGlfLCB0
eXBlbmFtZSBQKSA+IGNsYXNzIEYKLSAgICAsIEFVWDc3ODA3Nl9MQU1CREFfUEFSQU1TKGlfLCB0
eXBlbmFtZSBMKQotICAgID4KLXN0cnVjdCBCT09TVF9QUF9DQVQobGVfcmVzdWx0LGlfKQotewot
ICAgIHR5cGVkZWYgRjwKLSAgICAgICAgICBCT09TVF9NUExfUFBfUkVQRUFUKGlfLCBBVVg3Nzgw
NzZfVFlQRSwgTCkKLSAgICAgICAgPiByZXN1bHRfOwotICAgIAotICAgIHR5cGVkZWYgcmVzdWx0
XyB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUYWcKLSAgICAsIHRlbXBs
YXRlPCBBVVg3NzgwNzZfTEFNQkRBX1BBUkFNUyhpXywgdHlwZW5hbWUgUCkgPiBjbGFzcyBGCi0g
ICAgLCBBVVg3NzgwNzZfTEFNQkRBX1BBUkFNUyhpXywgdHlwZW5hbWUgTCkKLSAgICA+Ci1zdHJ1
Y3QgQk9PU1RfUFBfQ0FUKGxlX3Jlc3VsdCxpXyk8IHRydWVfLFRhZyxGLEFVWDc3ODA3Nl9MQU1C
REFfUEFSQU1TKGlfLCBMKSA+Ci17Ci0gICAgdHlwZWRlZiBCT09TVF9QUF9DQVQoYmluZCxpXyk8
Ci0gICAgICAgICAgQk9PU1RfUFBfQ0FUKHF1b3RlLGlfKTxGLFRhZz4KLSAgICAgICAgLCBCT09T
VF9NUExfUFBfUkVQRUFUKGlfLCBBVVg3NzgwNzZfUkVTVUxULCBMKQotICAgICAgICA+IHJlc3Vs
dF87Ci0KLSAgICB0eXBlZGVmIG1wbDo6cHJvdGVjdDxyZXN1bHRfPiB0eXBlOwotfTsKLQotIyAg
IHVuZGVmIEFVWDc3ODA3Nl9UWVBFCi0jICAgdW5kZWYgQVVYNzc4MDc2X1JFU1VMVAotCi19IC8v
IG5hbWVzcGFjZSBhdXgKLQotCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9MQU1CREFfVFlQRURFRih1
bnVzZWQsIGlfLCBUKSBcCi0gICAgdHlwZWRlZiBsYW1iZGE8IEJPT1NUX1BQX0NBVChULCBCT09T
VF9QUF9JTkMoaV8pKSwgVGFnID4gXAotICAgICAgICBCT09TVF9QUF9DQVQobCxCT09TVF9QUF9J
TkMoaV8pKTsgXAotLyoqLwotCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9JU19MRV9UWVBFREVGKHVu
dXNlZCwgaV8sIHVudXNlZDIpIFwKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEJPT1NUX1BQX0NBVChs
LEJPT1NUX1BQX0lOQyhpXykpOjppc19sZSBcCi0gICAgICAgIEJPT1NUX1BQX0NBVChpc19sZSxC
T09TVF9QUF9JTkMoaV8pKTsgXAotLyoqLwotCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9JU19MQU1C
REFfRVhQUih1bnVzZWQsIGlfLCB1bnVzZWQyKSBcCi0gICAgQk9PU1RfUFBfQ09NTUFfSUYoaV8p
IFwKLSAgICBCT09TVF9QUF9DQVQoaXNfbGUsQk9PU1RfUFBfSU5DKGlfKSk6OnZhbHVlIFwKLS8q
Ki8KLQotdGVtcGxhdGU8Ci0gICAgICB0ZW1wbGF0ZTwgQVVYNzc4MDc2X0xBTUJEQV9QQVJBTVMo
aV8sIHR5cGVuYW1lIFApID4gY2xhc3MgRgotICAgICwgQVVYNzc4MDc2X0xBTUJEQV9QQVJBTVMo
aV8sIHR5cGVuYW1lIFQpCi0gICAgLCB0eXBlbmFtZSBUYWcKLSAgICA+Ci1zdHJ1Y3QgbGFtYmRh
PCAKLSAgICAgICAgICBGPEFVWDc3ODA3Nl9MQU1CREFfUEFSQU1TKGlfLCBUKT4KLSAgICAgICAg
LCBUYWcKLSAgICAgICAgQVVYNzc4MDc2X0FSSVRZX1BBUkFNKGludF88aV8+KQotICAgICAgICA+
Ci17Ci0gICAgQk9PU1RfTVBMX1BQX1JFUEVBVChpXywgQVVYNzc4MDc2X0xBTUJEQV9UWVBFREVG
LCBUKQotICAgIEJPT1NUX01QTF9QUF9SRVBFQVQoaV8sIEFVWDc3ODA3Nl9JU19MRV9UWVBFREVG
LCB1bnVzZWQpCi0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6bGFtYmRhX29yPAotICAgICAg
ICAgIEJPT1NUX01QTF9QUF9SRVBFQVQoaV8sIEFVWDc3ODA3Nl9JU19MQU1CREFfRVhQUiwgdW51
c2VkKQotICAgICAgICA+Ojp0eXBlIGlzX2xlOwotCi0gICAgdHlwZWRlZiBhdXg6OkJPT1NUX1BQ
X0NBVChsZV9yZXN1bHQsaV8pPAotICAgICAgICAgIGlzX2xlLCBUYWcsIEYsIEFVWDc3ODA3Nl9M
QU1CREFfUEFSQU1TKGlfLCBsKQotICAgICAgICA+IGxlX3Jlc3VsdF87Ci0gICAgCi0gICAgdHlw
ZWRlZiB0eXBlbmFtZSBsZV9yZXN1bHRfOjpyZXN1bHRfIHJlc3VsdF87Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBsZV9yZXN1bHRfOjp0eXBlIHR5cGU7Ci19OwotCi0KLSMgICB1bmRlZiBBVVg3Nzgw
NzZfSVNfTEFNQkRBX0VYUFIKLSMgICB1bmRlZiBBVVg3NzgwNzZfSVNfTEVfVFlQRURFRgotIyAg
IHVuZGVmIEFVWDc3ODA3Nl9MQU1CREFfVFlQRURFRgotCi0jZW5kaWYgLy8gaV8gPiAwCi0KLXRl
bXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiBBVVg3NzgwNzZfQklORF9OX1BBUkFNUyhpXywgdHlw
ZW5hbWUgVCkKLSAgICAsIHR5cGVuYW1lIFRhZwotICAgID4KLXN0cnVjdCBsYW1iZGE8Ci0gICAg
ICAgICAgQk9PU1RfUFBfQ0FUKGJpbmQsaV8pPEYgQVVYNzc4MDc2X0JJTkRfTl9QQVJBTVMoaV8s
IFQpPgotICAgICAgICAsIFRhZwotICAgICAgICBBVVg3NzgwNzZfQVJJVFlfUEFSQU0oaW50XzxC
T09TVF9QUF9JTkMoaV8pPikKLSAgICAgICAgPgotewotICAgIHR5cGVkZWYgZmFsc2VfIGlzX2xl
OwotICAgIHR5cGVkZWYgQk9PU1RfUFBfQ0FUKGJpbmQsaV8pPAotICAgICAgICAgIEYKLSAgICAg
ICAgQVVYNzc4MDc2X0JJTkRfTl9QQVJBTVMoaV8sIFQpCi0gICAgICAgID4gcmVzdWx0XzsKLSAg
ICAgICAgCi0gICAgdHlwZWRlZiByZXN1bHRfIHR5cGU7Ci19OwotCi0jdW5kZWYgaV8KLSNlbmRp
ZiAvLyBCT09TVF9QUF9JVEVSQVRJT05fREVQVEgoKQotI2VuZGlmIC8vIEJPT1NUX1BQX0lTX0lU
RVJBVElORwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL2F1eF8vaGFzX2FwcGx5LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2hhc19hcHBseS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDljMTZhMzU0OTgyZmQxOGM2OTA5MjFmNzZhYWJjNzVjMGFhNDY5ZmQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vaGFzX2FwcGx5LmhwcAorKysg
L2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQVVYX0hBU19B
UFBMWV9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9IQVNfQVBQTFlfSFBQX0lO
Q0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDQKLS8vCi0vLyBEaXN0
cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAot
Ly8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8v
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDov
L3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8v
ICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2hhc194eHguaHBw
PgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9oYXNfYXBwbHkuaHBwPgotCi1uYW1l
c3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFtZXNwYWNlIGF1eCB7Ci0jaWYgIWRlZmlu
ZWQoQk9PU1RfTVBMX0NGR19OT19IQVNfQVBQTFkpCi1CT09TVF9NUExfSEFTX1hYWF9UUkFJVF9O
QU1FRF9ERUYoaGFzX2FwcGx5LCBhcHBseSwgZmFsc2UpCi0jZWxzZQotdGVtcGxhdGU8IHR5cGVu
YW1lIFQsIHR5cGVuYW1lIGZhbGxiYWNrXyA9IGZhbHNlXyA+Ci1zdHJ1Y3QgaGFzX2FwcGx5Ci0g
ICAgOiBmYWxsYmFja18KLXsKLX07Ci0jZW5kaWYKLX19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBM
X0FVWF9IQVNfQVBQTFlfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9oYXNfYmVnaW4uaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vaGFzX2JlZ2luLmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVlNDE1Y2JiOTk4OWVlODg5ZjQ3M2U4
NzQyYzhmNzI5ZThhMWVhZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4
Xy9oYXNfYmVnaW4uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotCi0jaWZuZGVm
IEJPT1NUX01QTF9BVVhfSEFTX0JFR0lOX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExf
QVVYX0hBU19CRUdJTl9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92
b3kgMjAwMi0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1
bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1
ZGUgPGJvb3N0L21wbC9oYXNfeHh4LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNl
IG1wbCB7IG5hbWVzcGFjZSBhdXggewotQk9PU1RfTVBMX0hBU19YWFhfVFJBSVRfTkFNRURfREVG
KGhhc19iZWdpbiwgYmVnaW4sIHRydWUpCi19fX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9BVVhf
SEFTX0JFR0lOX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vaGFzX3NpemUuaHBwIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vaGFzX3NpemUuaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjI5OTEzZjliYWU1YmNmNDQ1NmM0ZDA1ODdjYmVh
YTA0MzYyMWQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2hhc19z
aXplLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9N
UExfQVVYX0hBU19TSVpFX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX0hBU19T
SVpFX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAyLTIw
MDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8v
Ci0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24u
Ci0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2hhc194eHguaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFt
ZXNwYWNlIGF1eCB7Ci1CT09TVF9NUExfSEFTX1hYWF9UUkFJVF9ERUYoc2l6ZSkKLX19fQotCi0j
ZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9IQVNfU0laRV9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2hhc190
YWcuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1
eF8vaGFzX3RhZy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MTJhNzZhZjY3
MGQ5YzQ4ODYxZjA0MDEzY2RkYzNmZDk5ODRlOGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL2F1eF8vaGFzX3RhZy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBA
Ci0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9IQVNfVEFHX0hQUF9JTkNMVURFRAotI2RlZmluZSBC
T09TVF9NUExfQVVYX0hBU19UQUdfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5
IEd1cnRvdm95IDIwMDItMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxl
IExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBm
b3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0K
LSNpbmNsdWRlIDxib29zdC9tcGwvaGFzX3h4eC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5h
bWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4IHsKLUJPT1NUX01QTF9IQVNfWFhYX1RSQUlUX05B
TUVEX0RFRihoYXNfdGFnLCB0YWcsIGZhbHNlKQotfX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExf
QVVYX0hBU19UQUdfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9oYXNfdHlwZS5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9oYXNfdHlwZS5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NDRlZjViMDYyNTEzYTEyMTVhMDc4Njg5M2U3
NzBhYjI2MGM0NDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vaGFz
X3R5cGUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NU
X01QTF9BVVhfSEFTX1RZUEVfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfSEFT
X1RZUEVfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDIt
MjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNl
LCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQot
Ly8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlv
bi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29z
dC9tcGwvaGFzX3h4eC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBu
YW1lc3BhY2UgYXV4IHsKLUJPT1NUX01QTF9IQVNfWFhYX1RSQUlUX05BTUVEX0RFRihoYXNfdHlw
ZSwgdHlwZSwgdHJ1ZSkKLX19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9IQVNfVFlQRV9I
UFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vz
c2VkLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEzNDM0YzhlYmI4OGYwNmNm
ZjFlZmE4YThlYTI0Y2M2NjM4ZTA1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
cGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MiAr
MCwwIEBACi0KLS8vIE5PIElOQ0xVREUgR1VBUkRTLCBUSEUgSEVBREVSIElTIElOVEVOREVEIEZP
UiBNVUxUSVBMRSBJTkNMVVNJT04KLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAw
MC0yMDA2Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQp
Ci0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0
aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJv
b3N0L21wbC9hdXhfL2NvbmZpZy9jb21waWxlci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1
eF8vY29uZmlnL3ByZXByb2Nlc3Nvci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29u
ZmlnL3dvcmthcm91bmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9zdHJpbmdpemUuaHBwPgotCi0jaWYgIWRl
ZmluZWQoQk9PU1RfTkVFRFNfVE9LRU5fUEFTVElOR19PUF9GT1JfVE9LRU5TX0pVWFRBUE9TSU5H
KQotIyAgIGRlZmluZSBBVVg3NzgwNzZfUFJFUFJPQ0VTU0VEX0hFQURFUiBcCi0gICAgQk9PU1Rf
TVBMX0NGR19DT01QSUxFUl9ESVIvQk9PU1RfTVBMX1BSRVBST0NFU1NFRF9IRUFERVIgXAotLyoq
LwotI2Vsc2UKLSMgICBkZWZpbmUgQVVYNzc4MDc2X1BSRVBST0NFU1NFRF9IRUFERVIgXAotICAg
IEJPT1NUX1BQX0NBVChCT09TVF9NUExfQ0ZHX0NPTVBJTEVSX0RJUiwvKSMjQk9PU1RfTVBMX1BS
RVBST0NFU1NFRF9IRUFERVIgXAotLyoqLwotI2VuZGlmCi0KLSNpZiBCT09TVF9XT1JLQVJPVU5E
KF9fSUJNQ1BQX18sIEJPT1NUX1RFU1RFRF9BVCg3MDApKQotIyAgIGRlZmluZSBBVVg3NzgwNzZf
SU5DTFVERV9TVFJJTkcgQk9PU1RfUFBfU1RSSU5HSVpFKGJvb3N0L21wbC9hdXhfL3ByZXByb2Nl
c3NlZC9BVVg3NzgwNzZfUFJFUFJPQ0VTU0VEX0hFQURFUikKLSMgICBpbmNsdWRlIEFVWDc3ODA3
Nl9JTkNMVURFX1NUUklORwotIyAgIHVuZGVmIEFVWDc3ODA3Nl9JTkNMVURFX1NUUklORwotI2Vs
c2UKLSMgICBpbmNsdWRlIEJPT1NUX1BQX1NUUklOR0laRShib29zdC9tcGwvYXV4Xy9wcmVwcm9j
ZXNzZWQvQVVYNzc4MDc2X1BSRVBST0NFU1NFRF9IRUFERVIpCi0jZW5kaWYKLQotIyAgIHVuZGVm
IEFVWDc3ODA3Nl9QUkVQUk9DRVNTRURfSEVBREVSCi0KLSN1bmRlZiBCT09TVF9NUExfUFJFUFJP
Q0VTU0VEX0hFQURFUgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvbXBsL2F1eF8vaW5zZXJ0ZXJfYWxnb3JpdGhtLmhwcCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2luc2VydGVyX2FsZ29yaXRo
bS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYWU4MTYxYzdkNmM3MWYxNDZk
YjI4NDdlMDcyOWFlOGYxODQyYTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L2F1eF8vaW5zZXJ0ZXJfYWxnb3JpdGhtLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCww
IEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9JTlNFUlRFUl9BTEdPUklUSE1fSFBQX0lOQ0xV
REVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfSU5TRVJURVJfQUxHT1JJVEhNX0hQUF9JTkNMVURF
RAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAzLTIwMDQKLS8vIENvcHlyaWdo
dCBEYXZpZCBBYnJhaGFtcyAyMDAzLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlz
aW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2JhY2tfaW5zZXJ0ZXIuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L21wbC9mcm9udF9pbnNlcnRlci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL3B1c2hf
YmFjay5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL3B1c2hfZnJvbnQuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L21wbC9iYWNrX2luc2VydGVyLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvZnJvbnRf
aW5zZXJ0ZXIuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9jbGVhci5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvbXBsL2V2YWxfaWYuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9pZi5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvbXBsL2F1eF8vbmEuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2Nv
bW1vbl9uYW1lX3drbmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hX3NwZWMuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9wYXJhbXMuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9kZWZhdWx0X3BhcmFtcy5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2N0cHMuaHBwPgotCi0jaW5jbHVkZSA8Ym9v
c3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvZGVjLmhwcD4KLQotI2lmICFkZWZpbmVkKEJPT1NU
X05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04pCi0KLSMgICBkZWZpbmUgQk9PU1Rf
TVBMX0FVWF9JTlNFUlRFUl9BTEdPUklUSE1fREVGKGFyaXR5LCBuYW1lKSBcCi1CT09TVF9NUExf
QVVYX0NPTU1PTl9OQU1FX1dLTkQobmFtZSkgXAotdGVtcGxhdGU8IFwKLSAgICAgIEJPT1NUX01Q
TF9QUF9ERUZBVUxUX1BBUkFNUyhhcml0eSwgdHlwZW5hbWUgUCwgbmEpIFwKLSAgICA+IFwKLXN0
cnVjdCBuYW1lIFwKLSAgICA6IGF1eDo6bmFtZSMjX2ltcGw8Qk9PU1RfTVBMX1BQX1BBUkFNUyhh
cml0eSwgUCk+IFwKLXsgXAotfTsgXAotXAotdGVtcGxhdGU8IFwKLSAgICAgIEJPT1NUX01QTF9Q
UF9QQVJBTVMoQk9PU1RfUFBfREVDKGFyaXR5KSwgdHlwZW5hbWUgUCkgXAotICAgID4gXAotc3Ry
dWN0IG5hbWU8IEJPT1NUX01QTF9QUF9QQVJBTVMoQk9PU1RfUFBfREVDKGFyaXR5KSwgUCksbmEg
PiBcCi0gICAgOiBpZl88IGhhc19wdXNoX2JhY2s8IHR5cGVuYW1lIGNsZWFyPFAxPjo6dHlwZT4g
XAotICAgICAgICAsIGF1eDo6bmFtZSMjX2ltcGw8IFwKLSAgICAgICAgICAgICAgQk9PU1RfTVBM
X1BQX1BBUkFNUyhCT09TVF9QUF9ERUMoYXJpdHkpLCBQKSBcCi0gICAgICAgICAgICAsIGJhY2tf
aW5zZXJ0ZXI8IHR5cGVuYW1lIGNsZWFyPFAxPjo6dHlwZSA+IFwKLSAgICAgICAgICAgID4gXAot
ICAgICAgICAsIGF1eDo6cmV2ZXJzZV8jI25hbWUjI19pbXBsPCBcCi0gICAgICAgICAgICAgIEJP
T1NUX01QTF9QUF9QQVJBTVMoQk9PU1RfUFBfREVDKGFyaXR5KSwgUCkgXAotICAgICAgICAgICAg
LCBmcm9udF9pbnNlcnRlcjwgdHlwZW5hbWUgY2xlYXI8UDE+Ojp0eXBlID4gXAotICAgICAgICAg
ICAgPiBcCi0gICAgICAgID46OnR5cGUgXAoteyBcCi19OyBcCi1cCi10ZW1wbGF0ZTwgXAotICAg
ICAgQk9PU1RfTVBMX1BQX0RFRkFVTFRfUEFSQU1TKGFyaXR5LCB0eXBlbmFtZSBQLCBuYSkgXAot
ICAgID4gXAotc3RydWN0IHJldmVyc2VfIyNuYW1lIFwKLSAgICA6IGF1eDo6cmV2ZXJzZV8jI25h
bWUjI19pbXBsPEJPT1NUX01QTF9QUF9QQVJBTVMoYXJpdHksIFApPiBcCi17IFwKLX07IFwKLVwK
LXRlbXBsYXRlPCBcCi0gICAgICBCT09TVF9NUExfUFBfUEFSQU1TKEJPT1NUX1BQX0RFQyhhcml0
eSksIHR5cGVuYW1lIFApIFwKLSAgICA+IFwKLXN0cnVjdCByZXZlcnNlXyMjbmFtZTwgQk9PU1Rf
TVBMX1BQX1BBUkFNUyhCT09TVF9QUF9ERUMoYXJpdHkpLCBQKSxuYSA+IFwKLSAgICA6IGlmXzwg
aGFzX3B1c2hfYmFjazxQMT4gXAotICAgICAgICAsIGF1eDo6cmV2ZXJzZV8jI25hbWUjI19pbXBs
PCBcCi0gICAgICAgICAgICAgIEJPT1NUX01QTF9QUF9QQVJBTVMoQk9PU1RfUFBfREVDKGFyaXR5
KSwgUCkgXAotICAgICAgICAgICAgLCBiYWNrX2luc2VydGVyPCB0eXBlbmFtZSBjbGVhcjxQMT46
OnR5cGUgPiBcCi0gICAgICAgICAgICA+IFwKLSAgICAgICAgLCBhdXg6Om5hbWUjI19pbXBsPCBc
Ci0gICAgICAgICAgICAgIEJPT1NUX01QTF9QUF9QQVJBTVMoQk9PU1RfUFBfREVDKGFyaXR5KSwg
UCkgXAotICAgICAgICAgICAgLCBmcm9udF9pbnNlcnRlcjwgdHlwZW5hbWUgY2xlYXI8UDE+Ojp0
eXBlID4gXAotICAgICAgICAgICAgPiBcCi0gICAgICAgID46OnR5cGUgXAoteyBcCi19OyBcCi1C
T09TVF9NUExfQVVYX05BX1NQRUMoYXJpdHksIG5hbWUpIFwKLUJPT1NUX01QTF9BVVhfTkFfU1BF
Qyhhcml0eSwgcmV2ZXJzZV8jI25hbWUpIFwKLS8qKi8KLQotI2Vsc2UKLQotIyAgIGRlZmluZSBC
T09TVF9NUExfQVVYX0lOU0VSVEVSX0FMR09SSVRITV9ERUYoYXJpdHksIG5hbWUpIFwKLUJPT1NU
X01QTF9BVVhfQ09NTU9OX05BTUVfV0tORChuYW1lKSBcCi10ZW1wbGF0ZTwgXAotICAgICAgQk9P
U1RfTVBMX1BQX1BBUkFNUyhCT09TVF9QUF9ERUMoYXJpdHkpLCB0eXBlbmFtZSBQKSBcCi0gICAg
PiBcCi1zdHJ1Y3QgZGVmXyMjbmFtZSMjX2ltcGwgXAotICAgIDogaWZfPCBoYXNfcHVzaF9iYWNr
PFAxPiBcCi0gICAgICAgICwgYXV4OjpuYW1lIyNfaW1wbDwgXAotICAgICAgICAgICAgICBCT09T
VF9NUExfUFBfUEFSQU1TKEJPT1NUX1BQX0RFQyhhcml0eSksIFApIFwKLSAgICAgICAgICAgICwg
YmFja19pbnNlcnRlcjwgdHlwZW5hbWUgY2xlYXI8UDE+Ojp0eXBlID4gXAotICAgICAgICAgICAg
PiBcCi0gICAgICAgICwgYXV4OjpyZXZlcnNlXyMjbmFtZSMjX2ltcGw8IFwKLSAgICAgICAgICAg
ICAgQk9PU1RfTVBMX1BQX1BBUkFNUyhCT09TVF9QUF9ERUMoYXJpdHkpLCBQKSBcCi0gICAgICAg
ICAgICAsIGZyb250X2luc2VydGVyPCB0eXBlbmFtZSBjbGVhcjxQMT46OnR5cGUgPiBcCi0gICAg
ICAgICAgICA+IFwKLSAgICAgICAgPjo6dHlwZSBcCi17IFwKLX07IFwKLVwKLXRlbXBsYXRlPCBc
Ci0gICAgICBCT09TVF9NUExfUFBfREVGQVVMVF9QQVJBTVMoYXJpdHksIHR5cGVuYW1lIFAsIG5h
KSBcCi0gICAgPiBcCi1zdHJ1Y3QgbmFtZSBcCi17IFwKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGV2
YWxfaWY8IFwKLSAgICAgICAgICBpc19uYTxCT09TVF9QUF9DQVQoUCwgYXJpdHkpPiBcCi0gICAg
ICAgICwgZGVmXyMjbmFtZSMjX2ltcGw8Qk9PU1RfTVBMX1BQX1BBUkFNUyhCT09TVF9QUF9ERUMo
YXJpdHkpLCBQKT4gXAotICAgICAgICAsIGF1eDo6bmFtZSMjX2ltcGw8Qk9PU1RfTVBMX1BQX1BB
UkFNUyhhcml0eSwgUCk+IFwKLSAgICAgICAgPjo6dHlwZSB0eXBlOyBcCi19OyBcCi1cCi10ZW1w
bGF0ZTwgXAotICAgICAgQk9PU1RfTVBMX1BQX1BBUkFNUyhCT09TVF9QUF9ERUMoYXJpdHkpLCB0
eXBlbmFtZSBQKSBcCi0gICAgPiBcCi1zdHJ1Y3QgZGVmX3JldmVyc2VfIyNuYW1lIyNfaW1wbCBc
Ci0gICAgOiBpZl88IGhhc19wdXNoX2JhY2s8UDE+IFwKLSAgICAgICAgLCBhdXg6OnJldmVyc2Vf
IyNuYW1lIyNfaW1wbDwgXAotICAgICAgICAgICAgICBCT09TVF9NUExfUFBfUEFSQU1TKEJPT1NU
X1BQX0RFQyhhcml0eSksIFApIFwKLSAgICAgICAgICAgICwgYmFja19pbnNlcnRlcjwgdHlwZW5h
bWUgY2xlYXI8UDE+Ojp0eXBlID4gXAotICAgICAgICAgICAgPiBcCi0gICAgICAgICwgYXV4Ojpu
YW1lIyNfaW1wbDwgXAotICAgICAgICAgICAgICBCT09TVF9NUExfUFBfUEFSQU1TKEJPT1NUX1BQ
X0RFQyhhcml0eSksIFApIFwKLSAgICAgICAgICAgICwgZnJvbnRfaW5zZXJ0ZXI8IHR5cGVuYW1l
IGNsZWFyPFAxPjo6dHlwZSA+IFwKLSAgICAgICAgICAgID4gXAotICAgICAgICA+Ojp0eXBlIFwK
LXsgXAotfTsgXAotdGVtcGxhdGU8IFwKLSAgICAgIEJPT1NUX01QTF9QUF9ERUZBVUxUX1BBUkFN
Uyhhcml0eSwgdHlwZW5hbWUgUCwgbmEpIFwKLSAgICA+IFwKLXN0cnVjdCByZXZlcnNlXyMjbmFt
ZSBcCi17IFwKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGV2YWxfaWY8IFwKLSAgICAgICAgICBpc19u
YTxCT09TVF9QUF9DQVQoUCwgYXJpdHkpPiBcCi0gICAgICAgICwgZGVmX3JldmVyc2VfIyNuYW1l
IyNfaW1wbDxCT09TVF9NUExfUFBfUEFSQU1TKEJPT1NUX1BQX0RFQyhhcml0eSksIFApPiBcCi0g
ICAgICAgICwgYXV4OjpyZXZlcnNlXyMjbmFtZSMjX2ltcGw8Qk9PU1RfTVBMX1BQX1BBUkFNUyhh
cml0eSwgUCk+IFwKLSAgICAgICAgPjo6dHlwZSB0eXBlOyBcCi19OyBcCi1CT09TVF9NUExfQVVY
X05BX1NQRUMoYXJpdHksIG5hbWUpIFwKLUJPT1NUX01QTF9BVVhfTkFfU1BFQyhhcml0eSwgcmV2
ZXJzZV8jI25hbWUpIFwKLS8qKi8KLQotI2VuZGlmIC8vIEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJ
QUxfU1BFQ0lBTElaQVRJT04KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9BVVhfSU5TRVJURVJfQUxH
T1JJVEhNX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vaW50ZWdyYWxfd3JhcHBlci5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9pbnRlZ3JhbF93cmFw
cGVyLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJjMDVmN2U5NmVlNDgyZmUz
YmM4ZTJjY2U0M2U1N2I5M2RiZTE5MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
cGwvYXV4Xy9pbnRlZ3JhbF93cmFwcGVyLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAg
QEAKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA2Ci0vLwotLy8gRGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAK
LS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0v
LyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0v
LyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotLy8gTk8gSU5DTFVERSBHVUFSRFMsIFRIRSBIRUFE
RVIgSVMgSU5URU5ERUQgRk9SIE1VTFRJUExFIElOQ0xVU0lPTiEKLQotI2luY2x1ZGUgPGJvb3N0
L21wbC9pbnRlZ3JhbF9jX3RhZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vc3RhdGlj
X2Nhc3QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL250dHBfZGVjbC5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3N0YXRpY19jb25zdGFudC5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3dvcmthcm91bmQuaHBwPgotCi0jaW5jbHVkZSA8Ym9v
c3QvcHJlcHJvY2Vzc29yL2NhdC5ocHA+Ci0KLSNpZiAhZGVmaW5lZChBVVhfV1JBUFBFUl9OQU1F
KQotIyAgIGRlZmluZSBBVVhfV1JBUFBFUl9OQU1FIEJPT1NUX1BQX0NBVChBVVhfV1JBUFBFUl9W
QUxVRV9UWVBFLF8pCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEFVWF9XUkFQUEVSX1BBUkFNUykK
LSMgICBkZWZpbmUgQVVYX1dSQVBQRVJfUEFSQU1TKE4pIEJPT1NUX01QTF9BVVhfTlRUUF9ERUNM
KEFVWF9XUkFQUEVSX1ZBTFVFX1RZUEUsIE4pCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEFVWF9X
UkFQUEVSX0lOU1QpCi0jICAgaWYgQk9PU1RfV09SS0FST1VORChfX01XRVJLU19fLCA8PSAweDI0
MDcpCi0jICAgICAgIGRlZmluZSBBVVhfV1JBUFBFUl9JTlNUKHZhbHVlKSBBVVhfV1JBUFBFUl9O
QU1FPCB2YWx1ZSA+Ci0jICAgZWxzZSAKLSMgICAgICAgZGVmaW5lIEFVWF9XUkFQUEVSX0lOU1Qo
dmFsdWUpIEJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFOjpBVVhfV1JBUFBFUl9O
QU1FPCB2YWx1ZSA+Ci0jICAgZW5kaWYKLSNlbmRpZgotCi1CT09TVF9NUExfQVVYX0FETF9CQVJS
SUVSX05BTUVTUEFDRV9PUEVOCi0KLXRlbXBsYXRlPCBBVVhfV1JBUFBFUl9QQVJBTVMoTikgPgot
c3RydWN0IEFVWF9XUkFQUEVSX05BTUUKLXsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoQVVY
X1dSQVBQRVJfVkFMVUVfVFlQRSwgdmFsdWUgPSBOKTsKLS8vIGFndXJ0LCAwOC9tYXIvMDM6IFNH
SSBNSVBTcHJvIEMrKyB3b3JrYXJvdW5kLCBoYXZlIHRvICNpZmRlZiBiZWNhdXNlIHNvbWUgCi0v
LyBvdGhlciBjb21waWxlcnMgKGUuZy4gTVNWQykgYXJlIG5vdCBwYXJ0aWN1bGFyeSBoYXBweSBh
Ym91dCBpdAotI2lmIEJPT1NUX1dPUktBUk9VTkQoX19FREdfVkVSU0lPTl9fLCA8PSAyMzgpCi0g
ICAgdHlwZWRlZiBzdHJ1Y3QgQVVYX1dSQVBQRVJfTkFNRSB0eXBlOwotI2Vsc2UKLSAgICB0eXBl
ZGVmIEFVWF9XUkFQUEVSX05BTUUgdHlwZTsKLSNlbmRpZgotICAgIHR5cGVkZWYgQVVYX1dSQVBQ
RVJfVkFMVUVfVFlQRSB2YWx1ZV90eXBlOwotICAgIHR5cGVkZWYgaW50ZWdyYWxfY190YWcgdGFn
OwotCi0vLyBoYXZlIHRvICNpZmRlZiBoZXJlOiBzb21lIGNvbXBpbGVycyBkb24ndCBsaWtlIHRo
ZSAnTiArIDEnIGZvcm0gKE1TVkMpLAotLy8gd2hpbGUgc29tZSBvdGhlciBkb24ndCBsaWtlICd2
YWx1ZSArIDEnIChCb3JsYW5kKSwgYW5kIHNvbWUgZG9uJ3QgbGlrZQotLy8gZWl0aGVyCi0jaWYg
Qk9PU1RfV09SS0FST1VORChfX0VER19WRVJTSU9OX18sIDw9IDI0MykKLSBwcml2YXRlOgotICAg
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChBVVhfV1JBUFBFUl9WQUxVRV9UWVBFLCBuZXh0X3ZhbHVl
ID0gQk9PU1RfTVBMX0FVWF9TVEFUSUNfQ0FTVChBVVhfV1JBUFBFUl9WQUxVRV9UWVBFLCAoTiAr
IDEpKSk7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKEFVWF9XUkFQUEVSX1ZBTFVFX1RZUEUs
IHByaW9yX3ZhbHVlID0gQk9PU1RfTVBMX0FVWF9TVEFUSUNfQ0FTVChBVVhfV1JBUFBFUl9WQUxV
RV9UWVBFLCAoTiAtIDEpKSk7Ci0gcHVibGljOgotICAgIHR5cGVkZWYgQVVYX1dSQVBQRVJfSU5T
VChuZXh0X3ZhbHVlKSBuZXh0OwotICAgIHR5cGVkZWYgQVVYX1dSQVBQRVJfSU5TVChwcmlvcl92
YWx1ZSkgcHJpb3I7Ci0jZWxpZiBCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENfXywgQk9PU1Rf
VEVTVEVEX0FUKDB4NTYxKSkgXAotICAgIHx8IEJPT1NUX1dPUktBUk9VTkQoX19JQk1DUFBfXywg
Qk9PU1RfVEVTVEVEX0FUKDUwMikpIFwKLSAgICB8fCAoQk9PU1RfV09SS0FST1VORChfX0hQX2FD
QywgPD0gNTM4MDApICYmIChCT09TVF9XT1JLQVJPVU5EKF9faHB4c3RkOTgsICE9IDEpKSkKLSAg
ICB0eXBlZGVmIEFVWF9XUkFQUEVSX0lOU1QoIEJPT1NUX01QTF9BVVhfU1RBVElDX0NBU1QoQVVY
X1dSQVBQRVJfVkFMVUVfVFlQRSwgKE4gKyAxKSkgKSBuZXh0OwotICAgIHR5cGVkZWYgQVVYX1dS
QVBQRVJfSU5TVCggQk9PU1RfTVBMX0FVWF9TVEFUSUNfQ0FTVChBVVhfV1JBUFBFUl9WQUxVRV9U
WVBFLCAoTiAtIDEpKSApIHByaW9yOwotI2Vsc2UKLSAgICB0eXBlZGVmIEFVWF9XUkFQUEVSX0lO
U1QoIEJPT1NUX01QTF9BVVhfU1RBVElDX0NBU1QoQVVYX1dSQVBQRVJfVkFMVUVfVFlQRSwgKHZh
bHVlICsgMSkpICkgbmV4dDsKLSAgICB0eXBlZGVmIEFVWF9XUkFQUEVSX0lOU1QoIEJPT1NUX01Q
TF9BVVhfU1RBVElDX0NBU1QoQVVYX1dSQVBQRVJfVkFMVUVfVFlQRSwgKHZhbHVlIC0gMSkpICkg
cHJpb3I7Ci0jZW5kaWYKLQotICAgIC8vIGVuYWJsZXMgdW5pZm9ybSBmdW5jdGlvbiBjYWxsIHN5
bnRheCBmb3IgZmFtaWxpZXMgb2Ygb3ZlcmxvYWRlZCAKLSAgICAvLyBmdW5jdGlvbnMgdGhhdCBy
ZXR1cm4gb2JqZWN0cyBvZiBib3RoIGFyaXRobWV0aWMgKCdpbnQnLCAnbG9uZycsCi0gICAgLy8g
J2RvdWJsZScsIGV0Yy4pIGFuZCB3cmFwcGVkIGludGVncmFsIHR5cGVzIChmb3IgYW4gZXhhbXBs
ZSwgc2VlIAotICAgIC8vICJtcGwvZXhhbXBsZS9wb3dlci5jcHAiKQotICAgIEJPT1NUX0NPTlNU
RVhQUiBvcGVyYXRvciBBVVhfV1JBUFBFUl9WQUxVRV9UWVBFKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8QVVYX1dSQVBQRVJfVkFMVUVfVFlQRT4odGhpcy0+dmFsdWUpOyB9IAotfTsKLQot
I2lmICFkZWZpbmVkKEJPT1NUX05PX0lOQ0xBU1NfTUVNQkVSX0lOSVRJQUxJWkFUSU9OKQotdGVt
cGxhdGU8IEFVWF9XUkFQUEVSX1BBUkFNUyhOKSA+Ci1BVVhfV1JBUFBFUl9WQUxVRV9UWVBFIGNv
bnN0IEFVWF9XUkFQUEVSX0lOU1QoTik6OnZhbHVlOwotI2VuZGlmCi0KLUJPT1NUX01QTF9BVVhf
QURMX0JBUlJJRVJfTkFNRVNQQUNFX0NMT1NFCi0KLSN1bmRlZiBBVVhfV1JBUFBFUl9OQU1FCi0j
dW5kZWYgQVVYX1dSQVBQRVJfUEFSQU1TCi0jdW5kZWYgQVVYX1dSQVBQRVJfSU5TVAotI3VuZGVm
IEFVWF9XUkFQUEVSX1ZBTFVFX1RZUEUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2lzX21zdmNfZXRpX2FyZy5ocHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9pc19tc3ZjX2V0
aV9hcmcuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTg5OTQwYmFkOWMyMTQw
NDU3MTRlMTg0ZWRjZDhlYWJkMjE1NTdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L21wbC9hdXhfL2lzX21zdmNfZXRpX2FyZy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCww
IEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9JU19NU1ZDX0VUSV9BUkdfSFBQX0lOQ0xVREVE
Ci0jZGVmaW5lIEJPT1NUX01QTF9BVVhfSVNfTVNWQ19FVElfQVJHX0hQUF9JTkNMVURFRAotCi0v
LyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAxLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNl
ZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5i
b29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRl
JAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8veWVzX25vLmhwcD4K
LSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvZXRpLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9tcGwvYXV4Xy9jb25maWcvc3RhdGljX2NvbnN0YW50LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0
IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggewotCi0jaWYgZGVmaW5lZChCT09TVF9N
UExfQ0ZHX01TVkNfRVRJX0JVRykKLQotI2lmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19NU1ZDXzYw
X0VUSV9CVUcpCi0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUID4KLXN0cnVjdCBpc19tc3ZjX2V0aV9h
cmcKLXsgCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gZmFsc2UpOwot
fTsKLQotI2Vsc2UgLy8gQk9PU1RfTVBMX0NGR19NU1ZDXzYwX0VUSV9CVUcKLQotc3RydWN0IGV0
aV9pbnRfY29udmVydGlibGUKLXsKLSAgICBldGlfaW50X2NvbnZlcnRpYmxlKGludCk7Ci19Owot
Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+Ci1zdHJ1Y3QgaXNfbXN2Y19ldGlfYXJnCi17IAotICAg
IHN0YXRpYyBub190YWcgdGVzdCguLi4pOwotICAgIHN0YXRpYyB5ZXNfdGFnIHRlc3QoZXRpX2lu
dF9jb252ZXJ0aWJsZSk7Ci0gICAgc3RhdGljIFQmIGdldCgpOwotCi0gICAgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gCi0gICAgICAgICAgc2l6ZW9mKHRlc3QoZ2V0KCkpKSA9
PSBzaXplb2YoeWVzX3RhZykKLSAgICAgICAgKTsKLX07Ci0KLSNlbmRpZgotCi10ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgaXNfbXN2Y19ldGlfYXJnPGludD4KLXsgCi0gICAgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7Ci19OwotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0NGR19N
U1ZDX0VUSV9CVUcKLQotfX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQVVYX0lTX01TVkNfRVRJ
X0FSR19IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2l0ZXJfYXBwbHkuaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vaXRlcl9hcHBseS5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZGZkZmFkZDVlOTgyODFjYmJjYzA2NGIxNTQyNjc0
MTUxYjBhYTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vaXRlcl9h
cHBseS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1Rf
TVBMX0lURVJfQVBQTFlfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9JVEVSX0FQUExZ
X0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAyLTIwMDQK
LS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVy
c2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0v
LyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0K
LS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBs
L2FwcGx5LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvZGVyZWYuaHBwPgotCi1uYW1lc3BhY2Ug
Ym9vc3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFtZXNwYWNlIGF1eCB7Ci0KLXRlbXBsYXRlPAotICAg
ICAgdHlwZW5hbWUgRgotICAgICwgdHlwZW5hbWUgSXRlcmF0b3IKLSAgICA+Ci1zdHJ1Y3QgaXRl
cl9hcHBseTEKLSAgICA6IGFwcGx5MTwgRix0eXBlbmFtZSBkZXJlZjxJdGVyYXRvcj46OnR5cGUg
PgotewotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGCi0gICAgLCB0eXBlbmFtZSBJ
dGVyYXRvcjEKLSAgICAsIHR5cGVuYW1lIEl0ZXJhdG9yMgotICAgID4KLXN0cnVjdCBpdGVyX2Fw
cGx5MgotICAgIDogYXBwbHkyPAotICAgICAgICAgIEYKLSAgICAgICAgLCB0eXBlbmFtZSBkZXJl
ZjxJdGVyYXRvcjE+Ojp0eXBlCi0gICAgICAgICwgdHlwZW5hbWUgZGVyZWY8SXRlcmF0b3IyPjo6
dHlwZQotICAgICAgICA+Ci17Ci19OwotCi19fX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9JVEVS
X0FQUExZX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vaXRlcl9mb2xkX2lmX2ltcGwuaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vaXRlcl9mb2xkX2lm
X2ltcGwuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzcyZTgzZGU0NDRkMTFm
NmU5YWY4MDIxZTEwOTRmMGNkMDAwNmVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L21wbC9hdXhfL2l0ZXJfZm9sZF9pZl9pbXBsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxMCAr
MCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9JVEVSX0ZPTERfSUZfSU1QTF9IUFBfSU5D
TFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9JVEVSX0ZPTERfSUZfSU1QTF9IUFBfSU5DTFVE
RUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMS0yMDA0Ci0vLyBDb3B5cmln
aHQgRGF2aWQgQWJyYWhhbXMgMjAwMS0yMDAyCi0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55
aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xp
YnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZp
c2lvbiQKLQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi0jICAg
aW5jbHVkZSA8Ym9vc3QvbXBsL2lkZW50aXR5LmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwv
bmV4dC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2lmLmhwcD4KLSMgICBpbmNsdWRlIDxi
b29zdC9tcGwvYXBwbHkuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ZhbHVlX3dr
bmQuaHBwPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvdXNlX3By
ZXByb2Nlc3NlZC5ocHA+Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX1BSRVBST0NF
U1NFRF9IRUFERVJTKSBcCi0gICAgJiYgIWRlZmluZWQoQk9PU1RfTVBMX1BSRVBST0NFU1NJTkdf
TU9ERSkKLQotIyAgIGRlZmluZSBCT09TVF9NUExfUFJFUFJPQ0VTU0VEX0hFQURFUiBpdGVyX2Zv
bGRfaWZfaW1wbC5ocHAKLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXBy
b2Nlc3NlZC5ocHA+Ci0KLSNlbHNlCi0KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvbGltaXRzL3Vu
cm9sbGluZy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0aWMv
c3ViLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvcmVwZWF0LmhwcD4KLSMg
ICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvaW5jLmhwcD4KLSMgICBpbmNsdWRlIDxib29z
dC9wcmVwcm9jZXNzb3IvZGVjLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3Iv
Y2F0LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBh
dXggewotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgSXRlcmF0b3IsIHR5cGVuYW1lIFN0YXRlID4KLXN0
cnVjdCBpdGVyX2ZvbGRfaWZfbnVsbF9zdGVwCi17Ci0gICAgdHlwZWRlZiBTdGF0ZSBzdGF0ZTsK
LSAgICB0eXBlZGVmIEl0ZXJhdG9yIGl0ZXJhdG9yOwotfTsKLQotdGVtcGxhdGU8IGJvb2wgPgot
c3RydWN0IGl0ZXJfZm9sZF9pZl9zdGVwX2ltcGwKLXsKLSAgICB0ZW1wbGF0ZTwKLSAgICAgICAg
ICB0eXBlbmFtZSBJdGVyYXRvcgotICAgICAgICAsIHR5cGVuYW1lIFN0YXRlCi0gICAgICAgICwg
dHlwZW5hbWUgU3RhdGVPcAotICAgICAgICAsIHR5cGVuYW1lIEl0ZXJhdG9yT3AKLSAgICAgICAg
PgotICAgIHN0cnVjdCByZXN1bHRfCi0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFw
cGx5MjxTdGF0ZU9wLFN0YXRlLEl0ZXJhdG9yPjo6dHlwZSBzdGF0ZTsKLSAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBJdGVyYXRvck9wOjp0eXBlIGl0ZXJhdG9yOwotICAgIH07Ci19OwotCi10ZW1w
bGF0ZTw+Ci1zdHJ1Y3QgaXRlcl9mb2xkX2lmX3N0ZXBfaW1wbDxmYWxzZT4KLXsKLSAgICB0ZW1w
bGF0ZTwKLSAgICAgICAgICB0eXBlbmFtZSBJdGVyYXRvcgotICAgICAgICAsIHR5cGVuYW1lIFN0
YXRlCi0gICAgICAgICwgdHlwZW5hbWUgU3RhdGVPcAotICAgICAgICAsIHR5cGVuYW1lIEl0ZXJh
dG9yT3AKLSAgICAgICAgPgotICAgIHN0cnVjdCByZXN1bHRfCi0gICAgewotICAgICAgICB0eXBl
ZGVmIFN0YXRlIHN0YXRlOwotICAgICAgICB0eXBlZGVmIEl0ZXJhdG9yIGl0ZXJhdG9yOwotICAg
IH07Ci19OwotCi0vLyBhZ3VydCwgMjUvanVuLzAyOiBNU1ZDIDYuNSB3b3JrYXJvdW5kLCBoYWQg
dG8gZ2V0IHJpZCBvZiBpbmhlcml0YW5jZSAKLS8vIGhlcmUgYW5kIGluICdpdGVyX2ZvbGRfaWZf
YmFja3dhcmRfc3RlcCcsIGJlY2F1c2Ugc29tZXRpbWVzIGl0IGludGVyZmVyZWQgCi0vLyB3aXRo
IHRoZSAiZWFybHkgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiBidWciIGluIF9yZWFsbHlfIHVnbHkg
d2F5cwotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBJdGVyYXRvcgotICAgICwgdHlwZW5hbWUg
U3RhdGUKLSAgICAsIHR5cGVuYW1lIEZvcndhcmRPcAotICAgICwgdHlwZW5hbWUgUHJlZGljYXRl
Ci0gICAgPgotc3RydWN0IGl0ZXJfZm9sZF9pZl9mb3J3YXJkX3N0ZXAKLXsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIGFwcGx5MjxQcmVkaWNhdGUsU3RhdGUsSXRlcmF0b3I+Ojp0eXBlIG5vdF9sYXN0
OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcl9mb2xkX2lmX3N0ZXBfaW1wbDwKLSAgICAgICAg
ICBCT09TVF9NUExfQVVYX01TVkNfVkFMVUVfV0tORChub3RfbGFzdCk6OnZhbHVlCi0gICAgICAg
ID46OnRlbXBsYXRlIHJlc3VsdF88IEl0ZXJhdG9yLFN0YXRlLEZvcndhcmRPcCxtcGw6Om5leHQ8
SXRlcmF0b3I+ID4gaW1wbF87Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIGltcGxfOjpzdGF0ZSBz
dGF0ZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGltcGxfOjppdGVyYXRvciBpdGVyYXRvcjsKLX07
Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgSXRlcmF0b3IKLSAgICAsIHR5cGVuYW1lIFN0
YXRlCi0gICAgLCB0eXBlbmFtZSBCYWNrd2FyZE9wCi0gICAgLCB0eXBlbmFtZSBQcmVkaWNhdGUK
LSAgICA+Ci1zdHJ1Y3QgaXRlcl9mb2xkX2lmX2JhY2t3YXJkX3N0ZXAKLXsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIGFwcGx5MjxQcmVkaWNhdGUsU3RhdGUsSXRlcmF0b3I+Ojp0eXBlIG5vdF9sYXN0
OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcl9mb2xkX2lmX3N0ZXBfaW1wbDwKLSAgICAgICAg
ICBCT09TVF9NUExfQVVYX01TVkNfVkFMVUVfV0tORChub3RfbGFzdCk6OnZhbHVlCi0gICAgICAg
ID46OnRlbXBsYXRlIHJlc3VsdF88IEl0ZXJhdG9yLFN0YXRlLEJhY2t3YXJkT3AsaWRlbnRpdHk8
SXRlcmF0b3I+ID4gaW1wbF87Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIGltcGxfOjpzdGF0ZSBz
dGF0ZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGltcGxfOjppdGVyYXRvciBpdGVyYXRvcjsKLX07
Ci0KLQotLy8gbG9jYWwgbWFjcm9zLCAjdW5kZWYtaW5lZCBhdCB0aGUgZW5kIG9mIHRoZSBoZWFk
ZXIKLQotIyAgIGRlZmluZSBBVVhfSVRFUl9GT0xEX0ZPUldBUkRfU1RFUCh1bnVzZWQsIGksIHVu
dXNlZDIpIFwKLSAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pZl9mb3J3YXJkX3N0ZXA8IFwKLSAgICAg
ICAgICB0eXBlbmFtZSBCT09TVF9QUF9DQVQoZm9yd2FyZF9zdGVwLGkpOjppdGVyYXRvciBcCi0g
ICAgICAgICwgdHlwZW5hbWUgQk9PU1RfUFBfQ0FUKGZvcndhcmRfc3RlcCxpKTo6c3RhdGUgXAot
ICAgICAgICAsIEZvcndhcmRPcCBcCi0gICAgICAgICwgRm9yd2FyZFByZWRpY2F0ZSBcCi0gICAg
ICAgID4gQk9PU1RfUFBfQ0FUKGZvcndhcmRfc3RlcCwgQk9PU1RfUFBfSU5DKGkpKTsgXAotICAg
IC8qKi8KLQotIyAgIGRlZmluZSBBVVhfSVRFUl9GT0xEX0JBQ0tXQVJEX1NURVBfRlVOQyhpKSBc
Ci0gICAgdHlwZWRlZiBpdGVyX2ZvbGRfaWZfYmFja3dhcmRfc3RlcDwgXAotICAgICAgICAgIHR5
cGVuYW1lIEJPT1NUX1BQX0NBVChmb3J3YXJkX3N0ZXAsQk9PU1RfUFBfREVDKGkpKTo6aXRlcmF0
b3IgXAotICAgICAgICAsIHR5cGVuYW1lIEJPT1NUX1BQX0NBVChiYWNrd2FyZF9zdGVwLGkpOjpz
dGF0ZSBcCi0gICAgICAgICwgQmFja3dhcmRPcCBcCi0gICAgICAgICwgQmFja3dhcmRQcmVkaWNh
dGUgXAotICAgICAgICA+IEJPT1NUX1BQX0NBVChiYWNrd2FyZF9zdGVwLEJPT1NUX1BQX0RFQyhp
KSk7IFwKLSAgICAvKiovCi0KLSMgICBkZWZpbmUgQVVYX0lURVJfRk9MRF9CQUNLV0FSRF9TVEVQ
KHVudXNlZCwgaSwgdW51c2VkMikgXAotICAgIEFVWF9JVEVSX0ZPTERfQkFDS1dBUkRfU1RFUF9G
VU5DKCBcCi0gICAgICAgIEJPT1NUX1BQX1NVQl9EKDEsQk9PU1RfTVBMX0xJTUlUX1VOUk9MTElO
RyxpKSBcCi0gICAgICAgICkgXAotICAgIC8qKi8KLQotIyAgIGRlZmluZSBBVVhfTEFTVF9GT1JX
QVJEX1NURVAgXAotICAgIEJPT1NUX1BQX0NBVChmb3J3YXJkX3N0ZXAsIEJPT1NUX01QTF9MSU1J
VF9VTlJPTExJTkcpIFwKLSAgICAvKiovCi0KLSMgICBkZWZpbmUgQVVYX0xBU1RfQkFDS1dBUkRf
U1RFUCBcCi0gICAgQk9PU1RfUFBfQ0FUKGJhY2t3YXJkX3N0ZXAsIEJPT1NUX01QTF9MSU1JVF9V
TlJPTExJTkcpIFwKLSAgICAvKiovCi0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgSXRlcmF0
b3IKLSAgICAsIHR5cGVuYW1lIFN0YXRlCi0gICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKLSAgICAs
IHR5cGVuYW1lIEZvcndhcmRQcmVkaWNhdGUKLSAgICAsIHR5cGVuYW1lIEJhY2t3YXJkT3AKLSAg
ICAsIHR5cGVuYW1lIEJhY2t3YXJkUHJlZGljYXRlCi0gICAgPgotc3RydWN0IGl0ZXJfZm9sZF9p
Zl9pbXBsCi17Ci0gcHJpdmF0ZToKLSAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pZl9udWxsX3N0ZXA8
SXRlcmF0b3IsU3RhdGU+IGZvcndhcmRfc3RlcDA7Ci0gICAgQk9PU1RfUFBfUkVQRUFUKAotICAg
ICAgICAgIEJPT1NUX01QTF9MSU1JVF9VTlJPTExJTkcKLSAgICAgICAgLCBBVVhfSVRFUl9GT0xE
X0ZPUldBUkRfU1RFUAotICAgICAgICAsIHVudXNlZAotICAgICAgICApCi0gICAgCi0gICAgdHlw
ZWRlZiB0eXBlbmFtZSBpZl88Ci0gICAgICAgICAgdHlwZW5hbWUgQVVYX0xBU1RfRk9SV0FSRF9T
VEVQOjpub3RfbGFzdAotICAgICAgICAsIGl0ZXJfZm9sZF9pZl9pbXBsPAotICAgICAgICAgICAg
ICB0eXBlbmFtZSBBVVhfTEFTVF9GT1JXQVJEX1NURVA6Oml0ZXJhdG9yCi0gICAgICAgICAgICAs
IHR5cGVuYW1lIEFVWF9MQVNUX0ZPUldBUkRfU1RFUDo6c3RhdGUKLSAgICAgICAgICAgICwgRm9y
d2FyZE9wCi0gICAgICAgICAgICAsIEZvcndhcmRQcmVkaWNhdGUKLSAgICAgICAgICAgICwgQmFj
a3dhcmRPcAotICAgICAgICAgICAgLCBCYWNrd2FyZFByZWRpY2F0ZQotICAgICAgICAgICAgPgot
ICAgICAgICAsIGl0ZXJfZm9sZF9pZl9udWxsX3N0ZXA8Ci0gICAgICAgICAgICAgIHR5cGVuYW1l
IEFVWF9MQVNUX0ZPUldBUkRfU1RFUDo6aXRlcmF0b3IKLSAgICAgICAgICAgICwgdHlwZW5hbWUg
QVVYX0xBU1RfRk9SV0FSRF9TVEVQOjpzdGF0ZQotICAgICAgICAgICAgPgotICAgICAgICA+Ojp0
eXBlIEFVWF9MQVNUX0JBQ0tXQVJEX1NURVA7Ci0KLSAgICBCT09TVF9QUF9SRVBFQVQoCi0gICAg
ICAgICAgQk9PU1RfTVBMX0xJTUlUX1VOUk9MTElORwotICAgICAgICAsIEFVWF9JVEVSX0ZPTERf
QkFDS1dBUkRfU1RFUAotICAgICAgICAsIHVudXNlZAotICAgICAgICApCi0KLSBwdWJsaWM6Ci0g
ICAgdHlwZWRlZiB0eXBlbmFtZSBiYWNrd2FyZF9zdGVwMDo6c3RhdGUgc3RhdGU7Ci0gICAgdHlw
ZWRlZiB0eXBlbmFtZSBBVVhfTEFTVF9CQUNLV0FSRF9TVEVQOjppdGVyYXRvciBpdGVyYXRvcjsK
LX07Ci0KLSMgICB1bmRlZiBBVVhfTEFTVF9CQUNLV0FSRF9TVEVQCi0jICAgdW5kZWYgQVVYX0xB
U1RfRk9SV0FSRF9TVEVQCi0jICAgdW5kZWYgQVVYX0lURVJfRk9MRF9CQUNLV0FSRF9TVEVQCi0j
ICAgdW5kZWYgQVVYX0lURVJfRk9MRF9CQUNLV0FSRF9TVEVQX0ZVTkMKLSMgICB1bmRlZiBBVVhf
SVRFUl9GT0xEX0ZPUldBUkRfU1RFUAotCi19fX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9DRkdf
Tk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMKLSNlbmRpZiAvLyBCT09TVF9NUExfQVVYX0lURVJfRk9M
RF9JRl9JTVBMX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vaXRlcl9mb2xkX2ltcGwuaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vaXRlcl9mb2xkX2lt
cGwuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGQyOTIyZjUxYTQzOTQ2MDg4
OWE3MGY2NDdhNGNlZTc4YzIxZTZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21w
bC9hdXhfL2l0ZXJfZm9sZF9pbXBsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAK
LQotI2lmbmRlZiBCT09TVF9NUExfQVVYX0lURVJfRk9MRF9JTVBMX0hQUF9JTkNMVURFRAotI2Rl
ZmluZSBCT09TVF9NUExfQVVYX0lURVJfRk9MRF9JTVBMX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5
cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRl
ciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5v
cmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8g
JFJldmlzaW9uJAotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX1BSRVBST0NFU1NJTkdfTU9ERSkK
LSMgICBpbmNsdWRlIDxib29zdC9tcGwvbmV4dF9wcmlvci5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9v
c3QvbXBsL2FwcGx5LmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvY3Rw
cy5ocHA+Ci0jICAgaWYgZGVmaW5lZChCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJ
WkFUSU9OKQotIyAgICAgICBpbmNsdWRlIDxib29zdC9tcGwvaWYuaHBwPgotIyAgICAgICBpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcD4KLSMgICBlbmRpZgotI2VuZGlmCi0K
LSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvdXNlX3ByZXByb2Nlc3NlZC5ocHA+Ci0K
LSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX1BSRVBST0NFU1NFRF9IRUFERVJTKSBcCi0g
ICAgJiYgIWRlZmluZWQoQk9PU1RfTVBMX1BSRVBST0NFU1NJTkdfTU9ERSkKLQotIyAgIGRlZmlu
ZSBCT09TVF9NUExfUFJFUFJPQ0VTU0VEX0hFQURFUiBpdGVyX2ZvbGRfaW1wbC5ocHAKLSMgICBp
bmNsdWRlIDxib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHA+Ci0KLSNlbHNl
Ci0KLSMgICBkZWZpbmUgQVVYNzc4MDc2X0ZPTERfSU1QTF9PUChpdGVyKSBpdGVyCi0jICAgZGVm
aW5lIEFVWDc3ODA3Nl9GT0xEX0lNUExfTkFNRV9QUkVGSVggaXRlcl9mb2xkCi0jICAgaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8vZm9sZF9pbXBsX2JvZHkuaHBwPgotCi0jZW5kaWYgLy8gQk9PU1Rf
TVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVSUwotI2VuZGlmIC8vIEJPT1NUX01QTF9BVVhf
SVRFUl9GT0xEX0lNUExfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9sYW1iZGFfYXJpdHlfcGFyYW0uaHBw
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vbGFt
YmRhX2FyaXR5X3BhcmFtLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNjZmNk
NGYxNzEzZTY3YWViMDNjOWJhNDY5OTNkMjUzYTQyMjA3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvYXV4Xy9sYW1iZGFfYXJpdHlfcGFyYW0uaHBwCisrKyAvZGV2L251bGwK
QEAgLTEsMjUgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9BVVhfTEFNQkRBX0FSSVRZX1BB
UkFNX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX0xBTUJEQV9BUklUWV9QQVJB
TV9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMS0yMDA0
Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZl
cnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9y
IGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwot
Ly8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgot
Ci0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21w
bC9hdXhfL2NvbmZpZy90dHAuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19FWFRF
TkRFRF9URU1QTEFURV9QQVJBTUVURVJTX01BVENISU5HKQotIyAgIGRlZmluZSBCT09TVF9NUExf
QVVYX0xBTUJEQV9BUklUWV9QQVJBTShwYXJhbSkgICAgCi0jZWxzZQotIyAgIGRlZmluZSBCT09T
VF9NUExfQVVYX0xBTUJEQV9BUklUWV9QQVJBTShwYXJhbSkgLCBwYXJhbQotI2VuZGlmCi0KLSNl
bmRpZiAvLyBCT09TVF9NUExfQVVYX0xBTUJEQV9BUklUWV9QQVJBTV9IUFBfSU5DTFVERUQKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9h
dXhfL2xhbWJkYV9zcGVjLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9hdXhfL2xhbWJkYV9zcGVjLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNmZmYWNjMGE2ZGIyYWQxNDJiMjVmNmUzMTZmYjZmOTIzNWRkN2EwOC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9sYW1iZGFfc3BlYy5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0OSArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1BF
Q19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1BFQ19IUFBfSU5D
TFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMS0yMDA3Ci0vLwotLy8g
RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4w
LiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQg
Ci0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0
dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQk
Ci0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC92b2lkLmhw
cD4KLSNpbmNsdWRlIDxib29zdC9tcGwvbGFtYmRhX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2ludF9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9w
YXJhbXMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2xhbWJkYV9hcml0eV9wYXJhbS5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2xhbWJkYS5ocHA+Ci0KLSNpZiAh
ZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX0ZVTExfTEFNQkRBX1NVUFBPUlQpCi0KLSMgICBkZWZp
bmUgQk9PU1RfTVBMX0FVWF9QQVNTX1RIUk9VR0hfTEFNQkRBX1NQRUMoaSwgbmFtZSkgXAotdGVt
cGxhdGU8IFwKLSAgICAgIEJPT1NUX01QTF9QUF9QQVJBTVMoaSwgdHlwZW5hbWUgVCkgXAotICAg
ICwgdHlwZW5hbWUgVGFnIFwKLSAgICA+IFwKLXN0cnVjdCBsYW1iZGE8IFwKLSAgICAgIG5hbWU8
IEJPT1NUX01QTF9QUF9QQVJBTVMoaSwgVCkgPiBcCi0gICAgLCBUYWcgXAotICAgIEJPT1NUX01Q
TF9BVVhfTEFNQkRBX0FSSVRZX1BBUkFNKGludF88aT4pIFwKLSAgICA+IFwKLXsgXAotICAgIHR5
cGVkZWYgZmFsc2VfIGlzX2xlOyBcCi0gICAgdHlwZWRlZiBuYW1lPCBCT09TVF9NUExfUFBfUEFS
QU1TKGksIFQpID4gcmVzdWx0XzsgXAotICAgIHR5cGVkZWYgcmVzdWx0XyB0eXBlOyBcCi19OyBc
Ci0vKiovCi0KLSNlbHNlCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FVWF9QQVNTX1RIUk9VR0hf
TEFNQkRBX1NQRUMoaSwgbmFtZSkgLyoqLwotCi0jZW5kaWYKLQotI2VuZGlmIC8vIEJPT1NUX01Q
TF9BVVhfTEFNQkRBX1NQRUNfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9sYW1iZGFfc3VwcG9ydC5ocHAg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9sYW1i
ZGFfc3VwcG9ydC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMmFmNTg1ODM1
NWJkNWIzMzgwZGM4YTgzNzYyYmVhMGEzMDhjYzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL2F1eF8vbGFtYmRhX3N1cHBvcnQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTY5
ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUX0hQUF9JTkNM
VURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUX0hQUF9JTkNMVURFRAot
Ci0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAxLTIwMDQKLS8vCi0vLyBEaXN0cmli
dXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8g
KFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0
dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3
dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICRE
YXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2xh
bWJkYS5ocHA+Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX0ZVTExfTEFNQkRBX1NV
UFBPUlQpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVF9TUEVDKGks
IG5hbWUsIHBhcmFtcykgLyoqLwotIyAgIGRlZmluZSBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQ
T1JUKGksbmFtZSxwYXJhbXMpIC8qKi8KLQotI2Vsc2UKLQotIyAgIGluY2x1ZGUgPGJvb3N0L21w
bC9pbnRfZndkLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy95ZXNfbm8uaHBwPgot
IyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hX2Z3ZC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9v
c3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL3BhcmFtcy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F1eF8vcHJlcHJvY2Vzc29yL2VudW0uaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9h
dXhfL2NvbmZpZy9tc3ZjLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcv
d29ya2Fyb3VuZC5ocHA+Ci0KLSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUv
dG9fbGlzdC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2xpc3QvZm9yX2Vh
Y2hfaS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2luYy5ocHA+Ci0jICAg
aW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHA+Ci0KLSMgICBkZWZpbmUgQk9PU1Rf
TVBMX0FVWF9MQU1CREFfU1VQUE9SVF9BUkdfVFlQRURFRl9GVU5DKFIsdHlwZWRlZl8saSxwYXJh
bSkgXAotICAgIHR5cGVkZWZfIHBhcmFtIEJPT1NUX1BQX0NBVChhcmcsQk9PU1RfUFBfSU5DKGkp
KTsgXAotICAgIC8qKi8KLQotLy8gYWd1cnQsIDA3L21hci8wMzogcmVzdG9yZSBhbiBvbGQgcmV2
aXNpb24gZm9yIHRoZSBzYWtlIG9mIFNHSSBNSVBTcHJvIEMrKwotI2lmIEJPT1NUX1dPUktBUk9V
TkQoX19FREdfVkVSU0lPTl9fLCA8PSAyMzgpIAotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9BVVhf
TEFNQkRBX1NVUFBPUlQoaSwgbmFtZSwgcGFyYW1zKSBcCi0gICAgdHlwZWRlZiBCT09TVF9NUExf
QVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRTo6aW50XzxpPiBhcml0eTsgXAotICAgIEJPT1NUX1BQ
X0xJU1RfRk9SX0VBQ0hfSV9SKCBcCi0gICAgICAgICAgMSBcCi0gICAgICAgICwgQk9PU1RfTVBM
X0FVWF9MQU1CREFfU1VQUE9SVF9BUkdfVFlQRURFRl9GVU5DIFwKLSAgICAgICAgLCB0eXBlZGVm
IFwKLSAgICAgICAgLCBCT09TVF9QUF9UVVBMRV9UT19MSVNUKGkscGFyYW1zKSBcCi0gICAgICAg
ICkgXAotICAgIHN0cnVjdCByZWJpbmQgXAotICAgIHsgXAotICAgICAgICB0ZW1wbGF0ZTwgQk9P
U1RfTVBMX1BQX1BBUkFNUyhpLHR5cGVuYW1lIFUpID4gc3RydWN0IGFwcGx5IFwKLSAgICAgICAg
ICAgIDogbmFtZTwgQk9PU1RfTVBMX1BQX1BBUkFNUyhpLFUpID4gXAotICAgICAgICB7IFwKLSAg
ICAgICAgfTsgXAotICAgIH07IFwKLSAgICAvKiovCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FV
WF9MQU1CREFfU1VQUE9SVF9TUEVDKGksIG5hbWUsIHBhcmFtcykgXAotICAgIEJPT1NUX01QTF9B
VVhfTEFNQkRBX1NVUFBPUlQoaSwgbmFtZSwgcGFyYW1zKSBcCi0gICAgLyoqLwotCi0jZWxpZiBC
T09TVF9XT1JLQVJPVU5EKF9fRURHX1ZFUlNJT05fXywgPD0gMjQ0KSAmJiAhZGVmaW5lZChCT09T
VF9JTlRFTF9DWFhfVkVSU0lPTikKLS8vIGFndXJ0LCAxOC9qYW4vMDM6IG9sZCBFREctYmFzZWQg
Y29tcGlsZXJzIGFjdHVhbGx5IGVuZm9yY2UgMTEuNCBwYXJhIDkKLS8vIChpbiBzdHJpY3QgbW9k
ZSksIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgCi0vLyBNU1ZD
LW9wdGltaXplZCBpbXBsZW1lbnRhdGlvbgotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9BVVhfTEFN
QkRBX1NVUFBPUlRfU1BFQyhpLCBuYW1lLCBwYXJhbXMpIFwKLSAgICB0eXBlZGVmIEJPT1NUX01Q
TF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFOjppbnRfPGk+IGFyaXR5OyBcCi0gICAgQk9PU1Rf
UFBfTElTVF9GT1JfRUFDSF9JX1IoIFwKLSAgICAgICAgICAxIFwKLSAgICAgICAgLCBCT09TVF9N
UExfQVVYX0xBTUJEQV9TVVBQT1JUX0FSR19UWVBFREVGX0ZVTkMgXAotICAgICAgICAsIHR5cGVk
ZWYgXAotICAgICAgICAsIEJPT1NUX1BQX1RVUExFX1RPX0xJU1QoaSxwYXJhbXMpIFwKLSAgICAg
ICAgKSBcCi0gICAgc3RydWN0IHJlYmluZDsgXAotLyoqLwotCi0jICAgZGVmaW5lIEJPT1NUX01Q
TF9BVVhfTEFNQkRBX1NVUFBPUlQoaSwgbmFtZSwgcGFyYW1zKSBcCi0gICAgQk9PU1RfTVBMX0FV
WF9MQU1CREFfU1VQUE9SVF9TUEVDKGksIG5hbWUsIHBhcmFtcykgXAotfTsgXAotdGVtcGxhdGU8
IEJPT1NUX01QTF9QUF9QQVJBTVMoaSx0eXBlbmFtZSBUKSA+IFwKLXN0cnVjdCBuYW1lPEJPT1NU
X01QTF9QUF9QQVJBTVMoaSxUKT46OnJlYmluZCBcCi17IFwKLSAgICB0ZW1wbGF0ZTwgQk9PU1Rf
TVBMX1BQX1BBUkFNUyhpLHR5cGVuYW1lIFUpID4gc3RydWN0IGFwcGx5IFwKLSAgICAgICAgOiBu
YW1lPCBCT09TVF9NUExfUFBfUEFSQU1TKGksVSkgPiBcCi0gICAgeyBcCi0gICAgfTsgXAotLyoq
LwotCi0jZWxzZSAvLyBfX0VER19WRVJTSU9OX18KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNw
YWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggewotdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3Qg
aGFzX3JlYmluZF90YWc7Ci19fX0KLQotIyAgIGRlZmluZSBCT09TVF9NUExfQVVYX0xBTUJEQV9T
VVBQT1JUX1NQRUMoaSwgbmFtZSwgcGFyYW1zKSBcCi0gICAgdHlwZWRlZiBCT09TVF9NUExfQVVY
X0FETF9CQVJSSUVSX05BTUVTUEFDRTo6aW50XzxpPiBhcml0eTsgXAotICAgIEJPT1NUX1BQX0xJ
U1RfRk9SX0VBQ0hfSV9SKCBcCi0gICAgICAgICAgMSBcCi0gICAgICAgICwgQk9PU1RfTVBMX0FV
WF9MQU1CREFfU1VQUE9SVF9BUkdfVFlQRURFRl9GVU5DIFwKLSAgICAgICAgLCB0eXBlZGVmIFwK
LSAgICAgICAgLCBCT09TVF9QUF9UVVBMRV9UT19MSVNUKGkscGFyYW1zKSBcCi0gICAgICAgICkg
XAotICAgIGZyaWVuZCBjbGFzcyBCT09TVF9QUF9DQVQobmFtZSxfcmViaW5kKTsgXAotICAgIHR5
cGVkZWYgQk9PU1RfUFBfQ0FUKG5hbWUsX3JlYmluZCkgcmViaW5kOyBcCi0vKiovCi0KLSNpZiBC
T09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENfXywgQk9PU1RfVEVTVEVEX0FUKDB4NjEwKSkKLSMg
ICBkZWZpbmUgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVF9IQVNfUkVCSU5EKGksIG5hbWUs
IHBhcmFtcykgXAotdGVtcGxhdGU8IEJPT1NUX01QTF9QUF9QQVJBTVMoaSx0eXBlbmFtZSBUKSA+
IFwKLTo6Ym9vc3Q6Om1wbDo6YXV4Ojp5ZXNfdGFnIG9wZXJhdG9yfCggXAotICAgICAgOjpib29z
dDo6bXBsOjphdXg6Omhhc19yZWJpbmRfdGFnPGludD4gXAotICAgICwgbmFtZTxCT09TVF9NUExf
UFBfUEFSQU1TKGksVCk+KiBcCi0gICAgKTsgXAotOjpib29zdDo6bXBsOjphdXg6Om5vX3RhZyBv
cGVyYXRvcnwoIFwKLSAgICAgIDo6Ym9vc3Q6Om1wbDo6YXV4OjpoYXNfcmViaW5kX3RhZzxpbnQ+
IFwKLSAgICAsIG5hbWU8IEJPT1NUX01QTF9QUF9FTlVNKGksOjpib29zdDo6bXBsOjpuYSkgPiog
XAotICAgICk7IFwKLS8qKi8KLSNlbGlmICFCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01TVkMsIDwg
MTMwMCkKLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVF9IQVNfUkVCSU5E
KGksIG5hbWUsIHBhcmFtcykgXAotdGVtcGxhdGU8IEJPT1NUX01QTF9QUF9QQVJBTVMoaSx0eXBl
bmFtZSBUKSA+IFwKLTo6Ym9vc3Q6Om1wbDo6YXV4Ojp5ZXNfdGFnIG9wZXJhdG9yfCggXAotICAg
ICAgOjpib29zdDo6bXBsOjphdXg6Omhhc19yZWJpbmRfdGFnPGludD4gXAotICAgICwgOjpib29z
dDo6bXBsOjphdXg6Omhhc19yZWJpbmRfdGFnPCBuYW1lPEJPT1NUX01QTF9QUF9QQVJBTVMoaSxU
KT4gPiogXAotICAgICk7IFwKLS8qKi8KLSNlbHNlCi0jICAgZGVmaW5lIEJPT1NUX01QTF9BVVhf
TEFNQkRBX1NVUFBPUlRfSEFTX1JFQklORChpLCBuYW1lLCBwYXJhbXMpIC8qKi8KLSNlbmRpZgot
Ci0jICAgaWYgIWRlZmluZWQoX19CT1JMQU5EQ19fKQotIyAgIGRlZmluZSBCT09TVF9NUExfQVVY
X0xBTUJEQV9TVVBQT1JUKGksIG5hbWUsIHBhcmFtcykgXAotICAgIEJPT1NUX01QTF9BVVhfTEFN
QkRBX1NVUFBPUlRfU1BFQyhpLCBuYW1lLCBwYXJhbXMpIFwKLX07IFwKLUJPT1NUX01QTF9BVVhf
TEFNQkRBX1NVUFBPUlRfSEFTX1JFQklORChpLCBuYW1lLCBwYXJhbXMpIFwKLWNsYXNzIEJPT1NU
X1BQX0NBVChuYW1lLF9yZWJpbmQpIFwKLXsgXAotIHB1YmxpYzogXAotICAgIHRlbXBsYXRlPCBC
T09TVF9NUExfUFBfUEFSQU1TKGksdHlwZW5hbWUgVSkgPiBzdHJ1Y3QgYXBwbHkgXAotICAgICAg
ICA6IG5hbWU8IEJPT1NUX01QTF9QUF9QQVJBTVMoaSxVKSA+IFwKLSAgICB7IFwKLSAgICB9OyBc
Ci0vKiovCi0jICAgZWxzZQotIyAgIGRlZmluZSBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JU
KGksIG5hbWUsIHBhcmFtcykgXAotICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlRfU1BF
QyhpLCBuYW1lLCBwYXJhbXMpIFwKLX07IFwKLUJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlRf
SEFTX1JFQklORChpLCBuYW1lLCBwYXJhbXMpIFwKLWNsYXNzIEJPT1NUX1BQX0NBVChuYW1lLF9y
ZWJpbmQpIFwKLXsgXAotIHB1YmxpYzogXAotICAgIHRlbXBsYXRlPCBCT09TVF9NUExfUFBfUEFS
QU1TKGksdHlwZW5hbWUgVSkgPiBzdHJ1Y3QgYXBwbHkgXAotICAgIHsgXAotICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIG5hbWU8IEJPT1NUX01QTF9QUF9QQVJBTVMoaSxVKSA+Ojp0eXBlIHR5cGU7
IFwKLSAgICB9OyBcCi0vKiovCi0jICAgZW5kaWYgLy8gX19CT1JMQU5EQ19fCi0KLSNlbmRpZiAv
LyBfX0VER19WRVJTSU9OX18KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9DRkdfTk9fRlVMTF9MQU1C
REFfU1VQUE9SVAotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVF9IUFBf
SU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9hdXhfL2xhcmdlc3RfaW50LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL2xhcmdlc3RfaW50LmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZmVhYTFlY2E3MjYxZjg5MDFiMzg5Nzg5MTBkYjI5YTU4NDdmODc2
Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9sYXJnZXN0X2ludC5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FV
WF9MQVJHRVNUX0lOVF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9MQVJHRVNU
X0lOVF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0y
MDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0
IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0v
LwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9u
LgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0
L21wbC9pZi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2ludC5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvbXBsL2F1eF8vY29uZmlnL2ludGVncmFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9jb25maWcu
aHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFtZXNwYWNlIGF1eCB7
Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGludGVncmFsX3Jhbms7Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IGludGVncmFsX3Jhbms8Ym9vbD4gICAgICAgICAgIDogaW50XzwxPiB7fTsK
LXRlbXBsYXRlPD4gc3RydWN0IGludGVncmFsX3Jhbms8c2lnbmVkIGNoYXI+ICAgIDogaW50Xzwy
PiB7fTsKLXRlbXBsYXRlPD4gc3RydWN0IGludGVncmFsX3Jhbms8Y2hhcj4gICAgICAgICAgIDog
aW50XzwzPiB7fTsKLXRlbXBsYXRlPD4gc3RydWN0IGludGVncmFsX3Jhbms8dW5zaWduZWQgY2hh
cj4gIDogaW50Xzw0PiB7fTsKLSNpZiAhZGVmaW5lZChCT09TVF9OT19JTlRSSU5TSUNfV0NIQVJf
VCkKLXRlbXBsYXRlPD4gc3RydWN0IGludGVncmFsX3Jhbms8d2NoYXJfdD4gICAgICAgIDogaW50
Xzw1PiB7fTsKLSNlbmRpZgotdGVtcGxhdGU8PiBzdHJ1Y3QgaW50ZWdyYWxfcmFuazxzaG9ydD4g
ICAgICAgICAgOiBpbnRfPDY+IHt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaW50ZWdyYWxfcmFuazx1
bnNpZ25lZCBzaG9ydD4gOiBpbnRfPDc+IHt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaW50ZWdyYWxf
cmFuazxpbnQ+ICAgICAgICAgICAgOiBpbnRfPDg+IHt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaW50
ZWdyYWxfcmFuazx1bnNpZ25lZCBpbnQ+ICAgOiBpbnRfPDk+IHt9OwotdGVtcGxhdGU8PiBzdHJ1
Y3QgaW50ZWdyYWxfcmFuazxsb25nPiAgICAgICAgICAgOiBpbnRfPDEwPiB7fTsKLXRlbXBsYXRl
PD4gc3RydWN0IGludGVncmFsX3Jhbms8dW5zaWduZWQgbG9uZz4gIDogaW50XzwxMT4ge307Ci0K
LSNpZiBkZWZpbmVkKEJPT1NUX0hBU19MT05HX0xPTkcpCi10ZW1wbGF0ZTw+IHN0cnVjdCBpbnRl
Z3JhbF9yYW5rPGxvbmdfbG9uZ190eXBlPiA6IGludF88MTI+IHt9OwotdGVtcGxhdGU8PiBzdHJ1
Y3QgaW50ZWdyYWxfcmFuazx1bG9uZ19sb25nX3R5cGU+OiBpbnRfPDEzPiB7fTsKLSNlbmRpZgot
Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyID4gc3RydWN0IGxhcmdlc3RfaW50
Ci0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19ORVNURURfVkFMVUVfQVJJVEhNRVRJQykK
LSAgICA6IGlmX2M8IAotICAgICAgICAgICggaW50ZWdyYWxfcmFuazxUMT46OnZhbHVlID49IGlu
dGVncmFsX3Jhbms8VDI+Ojp2YWx1ZSApCi0gICAgICAgICwgVDEKLSAgICAgICAgLCBUMgotICAg
ICAgICA+Ci17Ci0jZWxzZQotewotICAgIGVudW0geyByYW5rMSA9IGludGVncmFsX3Jhbms8VDE+
Ojp2YWx1ZSB9OwotICAgIGVudW0geyByYW5rMiA9IGludGVncmFsX3Jhbms8VDI+Ojp2YWx1ZSB9
OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgaWZfYzwgKHJhbmsxID49IHJhbmsyKSxUMSxUMiA+Ojp0
eXBlIHR5cGU7Ci0jZW5kaWYKLX07Ci0KLX19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9M
QVJHRVNUX0lOVF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL21zdmNfZXRpX2Jhc2UuaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vbXN2Y19ldGlfYmFz
ZS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOGFjZTY5NjQ0NTA2MmViYWJl
ZjE0MzI4MzhkMmYzNmIyYmY3ODkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L2F1eF8vbXN2Y19ldGlfYmFzZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0K
LSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9NU1ZDX0VUSV9CQVNFX0hQUF9JTkNMVURFRAotI2RlZmlu
ZSBCT09TVF9NUExfQVVYX01TVkNfRVRJX0JBU0VfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdo
dCBBbGVrc2V5IEd1cnRvdm95IDIwMDEtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2
aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9pc19tc3ZjX2V0aV9hcmcuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9ldGkuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L21wbC9hdXhfL2NvbmZpZy9nY2MuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZp
Zy93b3JrYXJvdW5kLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5h
bWVzcGFjZSBhdXggewotCi0jaWYgZGVmaW5lZChCT09TVF9NUExfQ0ZHX01TVkNfNzBfRVRJX0JV
RykKLQotdGVtcGxhdGU8IGJvb2wgPiBzdHJ1Y3QgbXN2Y19ldGlfYmFzZV9pbXBsCi17Ci0gICAg
dGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcmVzdWx0XwotICAgICAgICA6IFQKLSAgICB7
Ci0gICAgICAgIHR5cGVkZWYgVCB0eXBlOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBtc3ZjX2V0aV9iYXNlX2ltcGw8dHJ1ZT4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+
IHN0cnVjdCByZXN1bHRfCi0gICAgewotICAgICAgICB0eXBlZGVmIHJlc3VsdF8gdHlwZTsKLSAg
ICAgICAgdHlwZWRlZiByZXN1bHRfIGZpcnN0OwotICAgICAgICB0eXBlZGVmIHJlc3VsdF8gc2Vj
b25kOwotICAgICAgICB0eXBlZGVmIHJlc3VsdF8gdGFnOwotICAgICAgICBlbnVtIHsgdmFsdWUg
PSAwIH07Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IG1zdmNf
ZXRpX2Jhc2UKLSAgICA6IG1zdmNfZXRpX2Jhc2VfaW1wbDwgaXNfbXN2Y19ldGlfYXJnPFQ+Ojp2
YWx1ZSA+Ci0gICAgICAgIDo6dGVtcGxhdGUgcmVzdWx0XzxUPgotewotfTsKLQotI2Vsc2UgLy8g
IUJPT1NUX01QTF9DRkdfTVNWQ183MF9FVElfQlVHCi0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUID4g
c3RydWN0IG1zdmNfZXRpX2Jhc2UKLSAgICA6IFQKLXsKLSNpZiBCT09TVF9XT1JLQVJPVU5EKEJP
T1NUX01QTF9DRkdfR0NDLCBCT09TVF9URVNURURfQVQoMHgwMzA0KSkKLSAgICBtc3ZjX2V0aV9i
YXNlKCk7Ci0jZW5kaWYKLSAgICB0eXBlZGVmIFQgdHlwZTsKLX07Ci0KLSNlbmRpZiAKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgbXN2Y19ldGlfYmFzZTxpbnQ+Ci17Ci0gICAgdHlwZWRlZiBtc3ZjX2V0
aV9iYXNlIHR5cGU7Ci0gICAgdHlwZWRlZiBtc3ZjX2V0aV9iYXNlIGZpcnN0OwotICAgIHR5cGVk
ZWYgbXN2Y19ldGlfYmFzZSBzZWNvbmQ7Ci0gICAgdHlwZWRlZiBtc3ZjX2V0aV9iYXNlIHRhZzsK
LSAgICBlbnVtIHsgdmFsdWUgPSAwIH07Ci19OwotCi19fX0KLQotI2VuZGlmIC8vIEJPT1NUX01Q
TF9BVVhfTVNWQ19FVElfQkFTRV9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL21zdmNfbmV2ZXJfdHJ1ZS5o
cHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9t
c3ZjX25ldmVyX3RydWUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGY5Yjgx
MTcyODQyZGFkZTJiYWNlNzM5MTMyZGQyZTg3MzBlOTgwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L21wbC9hdXhfL21zdmNfbmV2ZXJfdHJ1ZS5ocHAKKysrIC9kZXYvbnVsbApAQCAt
MSwzNCArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9NU1ZDX05FVkVSX1RSVUVfSFBQ
X0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfTVNWQ19ORVZFUl9UUlVFX0hQUF9JTkNM
VURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBE
aXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAu
IAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAK
LS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0
cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQK
LS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29u
ZmlnL21zdmMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5k
LmhwcD4KLQotI2lmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPD0gMTMwMCkKLQotbmFt
ZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggewotCi10ZW1wbGF0
ZTwgdHlwZW5hbWUgVCA+Ci1zdHJ1Y3QgbXN2Y19uZXZlcl90cnVlCi17Ci0gICAgZW51bSB7IHZh
bHVlID0gZmFsc2UgfTsKLX07Ci0KLX19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVNWQwotCi0jZW5k
aWYgLy8gQk9PU1RfTVBMX0FVWF9NU1ZDX05FVkVSX1RSVUVfSFBQX0lOQ0xVREVECmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9t
c3ZjX3R5cGUuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL2F1eF8vbXN2Y190eXBlLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVh
MjQ0ZjMxOWVlMjI0NGJjZmNlYWVkOWZkYzQ3NmQ4NjdmOWEyZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvYXV4Xy9tc3ZjX3R5cGUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEs
NjIgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9BVVhfTVNWQ19UWVBFX0hQUF9JTkNMVURF
RAotI2RlZmluZSBCT09TVF9NUExfQVVYX01TVkNfVFlQRV9IUFBfSU5DTFVERUQKLQotLy8gQ29w
eXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMS0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNj
b21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8v
ICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9ldGkuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2lzX21zdmNfZXRpX2FyZy5ocHA+Ci0KLW5hbWVzcGFj
ZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4IHsKLQotI2lmIGRlZmluZWQo
Qk9PU1RfTVBMX0NGR19NU1ZDXzcwX0VUSV9CVUcpCi0KLXRlbXBsYXRlPCBib29sID4gc3RydWN0
IG1zdmNfdHlwZV9pbXBsCi17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcmVz
dWx0XwotICAgIHsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUOjp0eXBlIHR5cGU7Ci0gICAg
fTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IG1zdmNfdHlwZV9pbXBsPHRydWU+Ci17Ci0gICAg
dGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcmVzdWx0XwotICAgIHsKLSAgICAgICAgdHlw
ZWRlZiByZXN1bHRfIHR5cGU7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUID4g
c3RydWN0IG1zdmNfdHlwZQotICAgIDogbXN2Y190eXBlX2ltcGw8IGlzX21zdmNfZXRpX2FyZzxU
Pjo6dmFsdWUgPgotICAgICAgICA6OnRlbXBsYXRlIHJlc3VsdF88VD4KLXsKLX07Ci0KLSNlbHNl
IC8vIEJPT1NUX01QTF9DRkdfTVNWQ183MF9FVElfQlVHCi0KLXRlbXBsYXRlPCB0eXBlbmFtZSBU
ID4gc3RydWN0IG1zdmNfdHlwZSAKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFQ6OnR5cGUgdHlw
ZTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IG1zdmNfdHlwZTxpbnQ+Ci17Ci0gICAgdHlwZWRl
ZiBpbnQgdHlwZTsKLX07Ci0KLSNlbmRpZgotCi19fX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9B
VVhfTVNWQ19UWVBFX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vbmEuaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vbmEuaHBwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmMDc5YzFlNzhjZDllYzc1NTY4NWY3YWJhM2M0NzIxZmI1MTdjYjM1
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL25hLmhwcAorKysgL2Rl
di9udWxsCkBAIC0xLDk1ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQVVYX05BX0hQUF9J
TkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX05BX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5
cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAxLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRl
ciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5v
cmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8g
JFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2Jvb2wuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L21wbC9hdXhfL25hX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmln
L21zdmMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9jdHBzLmhwcD4KLQot
bmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBU
ID4KLXN0cnVjdCBpc19uYQotICAgIDogZmFsc2VfCi17Ci0jaWYgQk9PU1RfV09SS0FST1VORChC
T09TVF9NU1ZDLCA8IDEzMDApCi0gICAgdXNpbmcgZmFsc2VfOjp2YWx1ZTsKLSNlbmRpZgotfTsK
LQotdGVtcGxhdGU8Pgotc3RydWN0IGlzX25hPG5hPgotICAgIDogdHJ1ZV8KLXsKLSNpZiBCT09T
VF9XT1JLQVJPVU5EKEJPT1NUX01TVkMsIDwgMTMwMCkKLSAgICB1c2luZyB0cnVlXzo6dmFsdWU7
Ci0jZW5kaWYKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUID4KLXN0cnVjdCBpc19ub3RfbmEK
LSAgICA6IHRydWVfCi17Ci0jaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8IDEzMDAp
Ci0gICAgdXNpbmcgdHJ1ZV86OnZhbHVlOwotI2VuZGlmCi19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgaXNfbm90X25hPG5hPgotICAgIDogZmFsc2VfCi17Ci0jaWYgQk9PU1RfV09SS0FST1VORChC
T09TVF9NU1ZDLCA8IDEzMDApCi0gICAgdXNpbmcgZmFsc2VfOjp2YWx1ZTsKLSNlbmRpZgotfTsK
LQotI2lmICFkZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04p
Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgVSA+IHN0cnVjdCBpZl9uYQotewotICAg
IHR5cGVkZWYgVCB0eXBlOwotfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFUgPiBzdHJ1Y3QgaWZf
bmE8bmEsVT4KLXsKLSAgICB0eXBlZGVmIFUgdHlwZTsKLX07Ci0jZWxzZQotdGVtcGxhdGU8IHR5
cGVuYW1lIFQgPiBzdHJ1Y3QgaWZfbmFfaW1wbAotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBV
ID4gc3RydWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIFQgdHlwZTsKLSAgICB9Owot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgaWZfbmFfaW1wbDxuYT4KLXsKLSAgICB0ZW1wbGF0ZTwg
dHlwZW5hbWUgVSA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBVIHR5cGU7
Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBULCB0eXBlbmFtZSBVID4gc3RydWN0
IGlmX25hCi0gICAgOiBpZl9uYV9pbXBsPFQ+Ojp0ZW1wbGF0ZSBhcHBseTxVPgotewotfTsKLSNl
bmRpZgotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9OQV9IUFBfSU5DTFVERUQKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9h
dXhfL25hX2Fzc2VydC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9tcGwvYXV4Xy9uYV9hc3NlcnQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxOTgzYzA5MDYxZTQwMTA3MTFkNDY0NjViMDQ1Y2FjMDUyMTAxYjcyLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL25hX2Fzc2VydC5ocHAKKysrIC9kZXYvbnVsbApA
QCAtMSwzNCArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9OQV9BU1NFUlRfSFBQX0lO
Q0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfTkFfQVNTRVJUX0hQUF9JTkNMVURFRAotCi0v
LyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAxLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNl
ZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5i
b29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRl
JAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbmEuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9tc3ZjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9t
cGwvYXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHA+Ci0KLSNpZiAhQk9PU1RfV09SS0FST1VORChf
TVNDX0ZVTExfVkVSLCA8PSAxNDAwNTA2MDEpICAgIFwKLSAgICAmJiAhQk9PU1RfV09SS0FST1VO
RChfX0VER19WRVJTSU9OX18sIDw9IDI0MykKLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXNzZXJ0
LmhwcD4KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FVWF9BU1NFUlRfTk9UX05BKHgpIFwKLSAgICBC
T09TVF9NUExfQVNTRVJUX05PVCgoYm9vc3Q6Om1wbDo6aXNfbmE8dHlwZT4pKSBcCi0vKiovCi0j
ZWxzZQotIyAgIGluY2x1ZGUgPGJvb3N0L3N0YXRpY19hc3NlcnQuaHBwPgotIyAgIGRlZmluZSBC
T09TVF9NUExfQVVYX0FTU0VSVF9OT1RfTkEoeCkgXAotICAgIEJPT1NUX1NUQVRJQ19BU1NFUlQo
IWJvb3N0OjptcGw6OmlzX25hPHg+Ojp2YWx1ZSkgXAotLyoqLwotI2VuZGlmCi0KLSNlbmRpZiAv
LyBCT09TVF9NUExfQVVYX05BX0FTU0VSVF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL25hX2Z3ZC5ocHAg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9uYV9m
d2QuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mzg4MjQxOTM5N2VlNzkyZjhj
MDVhZGRlOTRkYzkzNDVmNTA4NzFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21w
bC9hdXhfL25hX2Z3ZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0KLSNpZm5k
ZWYgQk9PU1RfTVBMX0FVWF9OQV9GV0RfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9B
VVhfTkFfRldEX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAy
MDAxLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50
YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8
Ym9vc3QvbXBsL2F1eF8vYWRsX2JhcnJpZXIuaHBwPgotCi1CT09TVF9NUExfQVVYX0FETF9CQVJS
SUVSX05BTUVTUEFDRV9PUEVOCi0KLS8vIG4uYS4gPT0gbm90IGF2YWlsYWJsZQotc3RydWN0IG5h
Ci17Ci0gICAgdHlwZWRlZiBuYSB0eXBlOwotICAgIGVudW0geyB2YWx1ZSA9IDAgfTsKLX07Ci0K
LUJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFX0NMT1NFCi1CT09TVF9NUExfQVVY
X0FETF9CQVJSSUVSX0RFQ0wobmEpCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfQVVYX05BX0ZXRF9I
UFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L21wbC9hdXhfL25hX3NwZWMuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vbmFfc3BlYy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQwNTJmY2UxOGVhNzYxMDE5YWQxNzI5YTBlNDg3YzI2MGJkMDI4MWQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vbmFfc3BlYy5ocHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9BVVhfTkFfU1BF
Q19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9OQV9TUEVDX0hQUF9JTkNMVURF
RAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAxLTIwMDQKLS8vCi0vLyBEaXN0
cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAot
Ly8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8v
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDov
L3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8v
ICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX1BSRVBST0NF
U1NJTkdfTU9ERSkKLSMgICBpbmNsdWRlIDxib29zdC9tcGwvbGFtYmRhX2Z3ZC5ocHA+Ci0jICAg
aW5jbHVkZSA8Ym9vc3QvbXBsL2ludC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2Jvb2wu
aHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hLmhwcD4KLSMgICBpbmNsdWRlIDxi
b29zdC9tcGwvYXV4Xy9hcml0eS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vdGVt
cGxhdGVfYXJpdHlfZndkLmhwcD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8v
cHJlcHJvY2Vzc29yL3BhcmFtcy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vcHJlcHJv
Y2Vzc29yL2VudW0uaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9k
ZWZfcGFyYW1zX3RhaWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2xhbWJkYV9hcml0
eV9wYXJhbS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2R0cC5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2V0aS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F1eF8vbnR0cF9kZWNsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcv
dHRwLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvbGFtYmRhLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvb3ZlcmxvYWRfcmVzb2x1dGlvbi5ocHA+Ci0K
LQotI2RlZmluZSBCT09TVF9NUExfQVVYX05BX1BBUkFNUyhpKSBcCi0gICAgQk9PU1RfTVBMX1BQ
X0VOVU0oaSwgbmEpIFwKLS8qKi8KLQotI2lmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19CUk9LRU5f
REVGQVVMVF9QQVJBTUVURVJTX0lOX05FU1RFRF9URU1QTEFURVMpCi0jICAgZGVmaW5lIEJPT1NU
X01QTF9BVVhfTkFfU1BFQ19BUklUWShpLCBuYW1lKSBcCi1uYW1lc3BhY2UgYXV4IHsgXAotdGVt
cGxhdGU8IEJPT1NUX01QTF9BVVhfTlRUUF9ERUNMKGludCwgTikgPiBcCi1zdHJ1Y3QgYXJpdHk8
IFwKLSAgICAgICAgICBuYW1lPCBCT09TVF9NUExfQVVYX05BX1BBUkFNUyhpKSA+IFwKLSAgICAg
ICAgLCBOIFwKLSAgICAgICAgPiBcCi0gICAgOiBpbnRfPCBCT09TVF9NUExfTElNSVRfTUVUQUZV
TkNUSU9OX0FSSVRZID4gXAoteyBcCi19OyBcCi19IFwKLS8qKi8KLSNlbHNlCi0jICAgZGVmaW5l
IEJPT1NUX01QTF9BVVhfTkFfU1BFQ19BUklUWShpLCBuYW1lKSAvKiovCi0jZW5kaWYKLQotI2Rl
ZmluZSBCT09TVF9NUExfQVVYX05BX1NQRUNfTUFJTihpLCBuYW1lKSBcCi10ZW1wbGF0ZTw+IFwK
LXN0cnVjdCBuYW1lPCBCT09TVF9NUExfQVVYX05BX1BBUkFNUyhpKSA+IFwKLXsgXAotICAgIHRl
bXBsYXRlPCBcCi0gICAgICAgICAgQk9PU1RfTVBMX1BQX1BBUkFNUyhpLCB0eXBlbmFtZSBUKSBc
Ci0gICAgICAgIEJPT1NUX01QTF9QUF9ORVNURURfREVGX1BBUkFNU19UQUlMKGksIHR5cGVuYW1l
IFQsIG5hKSBcCi0gICAgICAgID4gXAotICAgIHN0cnVjdCBhcHBseSBcCi0gICAgICAgIDogbmFt
ZTwgQk9PU1RfTVBMX1BQX1BBUkFNUyhpLCBUKSA+IFwKLSAgICB7IFwKLSAgICB9OyBcCi19OyBc
Ci0vKiovCi0KLSNpZiBkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fRlVMTF9MQU1CREFfU1VQUE9S
VCkKLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FVWF9OQV9TUEVDX0xBTUJEQShpLCBuYW1lKSBcCi10
ZW1wbGF0ZTw+IFwKLXN0cnVjdCBsYW1iZGE8IFwKLSAgICAgIG5hbWU8IEJPT1NUX01QTF9BVVhf
TkFfUEFSQU1TKGkpID4gXAotICAgICwgdm9pZF8gXAotICAgICwgdHJ1ZV8gXAotICAgID4gXAot
eyBcCi0gICAgdHlwZWRlZiBmYWxzZV8gaXNfbGU7IFwKLSAgICB0eXBlZGVmIG5hbWU8IEJPT1NU
X01QTF9BVVhfTkFfUEFSQU1TKGkpID4gdHlwZTsgXAotfTsgXAotdGVtcGxhdGU8PiBcCi1zdHJ1
Y3QgbGFtYmRhPCBcCi0gICAgICBuYW1lPCBCT09TVF9NUExfQVVYX05BX1BBUkFNUyhpKSA+IFwK
LSAgICAsIHZvaWRfIFwKLSAgICAsIGZhbHNlXyBcCi0gICAgPiBcCi17IFwKLSAgICB0eXBlZGVm
IGZhbHNlXyBpc19sZTsgXAotICAgIHR5cGVkZWYgbmFtZTwgQk9PU1RfTVBMX0FVWF9OQV9QQVJB
TVMoaSkgPiB0eXBlOyBcCi19OyBcCi0vKiovCi0jZWxzZQotIyAgIGRlZmluZSBCT09TVF9NUExf
QVVYX05BX1NQRUNfTEFNQkRBKGksIG5hbWUpIFwKLXRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBc
Ci1zdHJ1Y3QgbGFtYmRhPCBcCi0gICAgICBuYW1lPCBCT09TVF9NUExfQVVYX05BX1BBUkFNUyhp
KSA+IFwKLSAgICAsIFRhZyBcCi0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfQVJJVFlfUEFSQU0o
aW50XzwtMT4pIFwKLSAgICA+IFwKLXsgXAotICAgIHR5cGVkZWYgZmFsc2VfIGlzX2xlOyBcCi0g
ICAgdHlwZWRlZiBuYW1lPCBCT09TVF9NUExfQVVYX05BX1BBUkFNUyhpKSA+IHJlc3VsdF87IFwK
LSAgICB0eXBlZGVmIG5hbWU8IEJPT1NUX01QTF9BVVhfTkFfUEFSQU1TKGkpID4gdHlwZTsgXAot
fTsgXAotLyoqLwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJPT1NUX01QTF9DRkdfRVhURU5ERURf
VEVNUExBVEVfUEFSQU1FVEVSU19NQVRDSElORykgXAotICAgIHx8IGRlZmluZWQoQk9PU1RfTVBM
X0NGR19OT19GVUxMX0xBTUJEQV9TVVBQT1JUKSBcCi0gICAgICAgICYmIGRlZmluZWQoQk9PU1Rf
TVBMX0NGR19CUk9LRU5fT1ZFUkxPQURfUkVTT0xVVElPTikKLSMgICBkZWZpbmUgQk9PU1RfTVBM
X0FVWF9OQV9TUEVDX1RFTVBMQVRFX0FSSVRZKGksIGosIG5hbWUpIFwKLW5hbWVzcGFjZSBhdXgg
eyBcCi10ZW1wbGF0ZTwgQk9PU1RfTVBMX1BQX1BBUkFNUyhqLCB0eXBlbmFtZSBUKSA+IFwKLXN0
cnVjdCB0ZW1wbGF0ZV9hcml0eTwgXAotICAgICAgICAgIG5hbWU8IEJPT1NUX01QTF9QUF9QQVJB
TVMoaiwgVCkgPiBcCi0gICAgICAgID4gXAotICAgIDogaW50XzxqPiBcCi17IFwKLX07IFwKLVwK
LXRlbXBsYXRlPD4gXAotc3RydWN0IHRlbXBsYXRlX2FyaXR5PCBcCi0gICAgICAgICAgbmFtZTwg
Qk9PU1RfTVBMX1BQX0VOVU0oaSwgbmEpID4gXAotICAgICAgICA+IFwKLSAgICA6IGludF88LTE+
IFwKLXsgXAotfTsgXAotfSBcCi0vKiovCi0jZWxzZQotIyAgIGRlZmluZSBCT09TVF9NUExfQVVY
X05BX1NQRUNfVEVNUExBVEVfQVJJVFkoaSwgaiwgbmFtZSkgLyoqLwotI2VuZGlmCi0KLSNpZiBk
ZWZpbmVkKEJPT1NUX01QTF9DRkdfTVNWQ19FVElfQlVHKQotIyAgIGRlZmluZSBCT09TVF9NUExf
QVVYX05BX1NQRUNfRVRJKGksIG5hbWUpIFwKLXRlbXBsYXRlPD4gXAotc3RydWN0IG5hbWU8IEJP
T1NUX01QTF9QUF9FTlVNKGksIGludCkgPiBcCi17IFwKLSAgICB0eXBlZGVmIGludCB0eXBlOyBc
Ci0gICAgZW51bSB7IHZhbHVlID0gMCB9OyBcCi19OyBcCi0vKiovCi0jZWxzZQotIyAgIGRlZmlu
ZSBCT09TVF9NUExfQVVYX05BX1NQRUNfRVRJKGksIG5hbWUpIC8qKi8KLSNlbmRpZgotCi0jZGVm
aW5lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0ocGFyYW0pIHBhcmFtID0gbmEKLQotI2RlZmluZSBC
T09TVF9NUExfQVVYX05BX1NQRUNfTk9fRVRJKGksIG5hbWUpIFwKLUJPT1NUX01QTF9BVVhfTkFf
U1BFQ19NQUlOKGksIG5hbWUpIFwKLUJPT1NUX01QTF9BVVhfTkFfU1BFQ19MQU1CREEoaSwgbmFt
ZSkgXAotQk9PU1RfTVBMX0FVWF9OQV9TUEVDX0FSSVRZKGksIG5hbWUpIFwKLUJPT1NUX01QTF9B
VVhfTkFfU1BFQ19URU1QTEFURV9BUklUWShpLCBpLCBuYW1lKSBcCi0vKiovCi0KLSNkZWZpbmUg
Qk9PU1RfTVBMX0FVWF9OQV9TUEVDKGksIG5hbWUpIFwKLUJPT1NUX01QTF9BVVhfTkFfU1BFQ19O
T19FVEkoaSwgbmFtZSkgXAotQk9PU1RfTVBMX0FVWF9OQV9TUEVDX0VUSShpLCBuYW1lKSBcCi0v
KiovCi0KLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9OQV9TUEVDMihpLCBqLCBuYW1lKSBcCi1CT09T
VF9NUExfQVVYX05BX1NQRUNfTUFJTihpLCBuYW1lKSBcCi1CT09TVF9NUExfQVVYX05BX1NQRUNf
RVRJKGksIG5hbWUpIFwKLUJPT1NUX01QTF9BVVhfTkFfU1BFQ19MQU1CREEoaSwgbmFtZSkgXAot
Qk9PU1RfTVBMX0FVWF9OQV9TUEVDX0FSSVRZKGksIG5hbWUpIFwKLUJPT1NUX01QTF9BVVhfTkFf
U1BFQ19URU1QTEFURV9BUklUWShpLCBqLCBuYW1lKSBcCi0vKiovCi0KLQotI2VuZGlmIC8vIEJP
T1NUX01QTF9BVVhfTkFfU1BFQ19IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL25lc3RlZF90eXBlX3drbmQu
aHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8v
bmVzdGVkX3R5cGVfd2tuZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMDdh
YmRiYzU0YjQyYTUzZTViNTY3MTVhZTE5YTE2NTRmODI3ZTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvbXBsL2F1eF8vbmVzdGVkX3R5cGVfd2tuZC5ocHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0OCArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9ORVNURURfVFlQRV9XS05E
X0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX05FU1RFRF9UWVBFX1dLTkRfSFBQ
X0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8K
LS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5
IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNl
ZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8g
JElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4
Xy9jb25maWcvZ2NjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvd29ya2Fy
b3VuZC5ocHA+Ci0KLSNpZiBCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01QTF9DRkdfR0NDLCBCT09T
VF9URVNURURfQVQoMHgwMzAyKSkgXAotICAgIHx8IEJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5E
Q19fLCBCT09TVF9URVNURURfQVQoMHg1NjEpKSBcCi0gICAgfHwgQk9PU1RfV09SS0FST1VORChf
X1NVTlBST19DQywgQk9PU1RfVEVTVEVEX0FUKDB4NTMwKSkgXAotICAgIHx8IEJPT1NUX1dPUktB
Uk9VTkQoX19ETUNfXywgQk9PU1RfVEVTVEVEX0FUKDB4ODQwKSkKLQotbmFtZXNwYWNlIGJvb3N0
IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggewotdGVtcGxhdGU8IHR5cGVuYW1lIFQg
PiBzdHJ1Y3QgbmVzdGVkX3R5cGVfd2tuZAotICAgIDogVDo6dHlwZQotewotfTsKLX19fQotCi0j
aWYgQk9PU1RfV09SS0FST1VORChfX0RNQ19fLCBCT09TVF9URVNURURfQVQoMHg4NDApKQotIyAg
IGRlZmluZSBCT09TVF9NUExfQVVYX05FU1RFRF9UWVBFX1dLTkQoVCkgXAotICAgIGF1eDo6bmVz
dGVkX3R5cGVfd2tuZDxUPiBcCi0vKiovCi0jZWxzZQotIyAgIGRlZmluZSBCT09TVF9NUExfQVVY
X05FU1RFRF9UWVBFX1dLTkQoVCkgXAotICAgIDo6Ym9vc3Q6Om1wbDo6YXV4OjpuZXN0ZWRfdHlw
ZV93a25kPFQ+IFwKLS8qKi8KLSNlbmRpZgotCi0jZWxzZSAvLyAhQk9PU1RfTVBMX0NGR19HQ0Mg
ZXQgYWwuCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FVWF9ORVNURURfVFlQRV9XS05EKFQpIFQ6
OnR5cGUKLQotI2VuZGlmIAotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9ORVNURURfVFlQRV9X
S05EX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vbnR0cF9kZWNsLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL250dHBfZGVjbC5ocHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMzQ0ZDg3NGQ3MjFlN2VlOTY2NGNlMGNmNGEwNTZhMTE1
Y2YxZjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vbnR0cF9kZWNs
LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExf
QVVYX05UVFBfREVDTF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9OVFRQX0RF
Q0xfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDEtMjAw
NAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBv
ciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8K
LS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4K
LQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9t
cGwvYXV4Xy9jb25maWcvbnR0cC5ocHA+Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX01QTF9DRkdfTlRU
UF9CVUcpCi0KLXR5cGVkZWYgYm9vbCAgICAgICAgX21wbF9udHRwX2Jvb2w7Ci10eXBlZGVmIGlu
dCAgICAgICAgIF9tcGxfbnR0cF9pbnQ7Ci10eXBlZGVmIHVuc2lnbmVkICAgIF9tcGxfbnR0cF91
bnNpZ25lZDsKLXR5cGVkZWYgbG9uZyAgICAgICAgX21wbF9udHRwX2xvbmc7Ci0KLSMgICBpbmNs
dWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcD4KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FV
WF9OVFRQX0RFQ0woVCwgeCkgQk9PU1RfUFBfQ0FUKF9tcGxfbnR0cF8sVCkgeCAvKiovCi0KLSNl
bHNlCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FVWF9OVFRQX0RFQ0woVCwgeCkgVCB4IC8qKi8K
LQotI2VuZGlmCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfQVVYX05UVFBfREVDTF9IUFBfSU5DTFVE
RUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L21wbC9hdXhfL251bWVyaWNfY2FzdF91dGlscy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9udW1lcmljX2Nhc3RfdXRpbHMuaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2FjODVhOTlkNzRmMGE3YTZlZmZkNGE4Njg0Nzhl
YTY3N2IxZmM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL251bWVy
aWNfY2FzdF91dGlscy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0KLSNpZm5k
ZWYgQk9PU1RfTVBMX0FVWF9OVU1FUklDX0NBU1RfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NU
X01QTF9BVVhfTlVNRVJJQ19DQVNUX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3Nl
eSBHdXJ0b3ZveSAyMDAzLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwg
Zm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAot
Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL251bWVyaWNfY2FzdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2FwcGx5X3dyYXAuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9mb3J3
YXJkaW5nLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFj
ZSBhdXggewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYKLSAgICAsIHR5cGVuYW1lIFRh
ZzEKLSAgICAsIHR5cGVuYW1lIFRhZzIKLSAgICA+Ci1zdHJ1Y3QgY2FzdDFzdF9pbXBsCi17Ci0g
ICAgdGVtcGxhdGU8IHR5cGVuYW1lIE4xLCB0eXBlbmFtZSBOMiA+IHN0cnVjdCBhcHBseQotI2lm
ICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fTkVTVEVEX0ZPUldBUkRJTkcpCi0gICAgICAgIDog
YXBwbHlfd3JhcDI8IAotICAgICAgICAgICAgICBGCi0gICAgICAgICAgICAsIHR5cGVuYW1lIGFw
cGx5X3dyYXAxPCBCT09TVF9NUExfQVVYX05VTUVSSUNfQ0FTVDxUYWcxLFRhZzI+LE4xID46OnR5
cGUKLSAgICAgICAgICAgICwgTjIKLSAgICAgICAgICAgID4KLSAgICB7Ci0jZWxzZQotICAgIHsK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5X3dyYXAyPCAKLSAgICAgICAgICAgICAgRgotICAg
ICAgICAgICAgLCB0eXBlbmFtZSBhcHBseV93cmFwMTwgQk9PU1RfTVBMX0FVWF9OVU1FUklDX0NB
U1Q8VGFnMSxUYWcyPixOMSA+Ojp0eXBlCi0gICAgICAgICAgICAsIE4yCi0gICAgICAgICAgICA+
Ojp0eXBlIHR5cGU7Ci0jZW5kaWYKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBl
bmFtZSBGCi0gICAgLCB0eXBlbmFtZSBUYWcxCi0gICAgLCB0eXBlbmFtZSBUYWcyCi0gICAgPgot
c3RydWN0IGNhc3QybmRfaW1wbAotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBOMSwgdHlwZW5h
bWUgTjIgPiBzdHJ1Y3QgYXBwbHkKLSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX05FU1RF
RF9GT1JXQVJESU5HKQotICAgICAgICA6IGFwcGx5X3dyYXAyPCAKLSAgICAgICAgICAgICAgRgot
ICAgICAgICAgICAgLCBOMQotICAgICAgICAgICAgLCB0eXBlbmFtZSBhcHBseV93cmFwMTwgQk9P
U1RfTVBMX0FVWF9OVU1FUklDX0NBU1Q8VGFnMixUYWcxPixOMiA+Ojp0eXBlCi0gICAgICAgICAg
ICA+Ci0gICAgewotI2Vsc2UKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHlf
d3JhcDI8IAotICAgICAgICAgICAgICBGCi0gICAgICAgICAgICAsIE4xCi0gICAgICAgICAgICAs
IHR5cGVuYW1lIGFwcGx5X3dyYXAxPCBCT09TVF9NUExfQVVYX05VTUVSSUNfQ0FTVDxUYWcyLFRh
ZzE+LE4yID46OnR5cGUKLSAgICAgICAgICAgID46OnR5cGUgdHlwZTsKLSNlbmRpZgotICAgIH07
Ci19OwotCi19fX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9BVVhfTlVNRVJJQ19DQVNUX0hQUF9J
TkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL2F1eF8vbnVtZXJpY19vcC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9udW1lcmljX29wLmhwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNTQ5MjU1NzAxMzZlODRiMjEzMjQxYzY1Nzk2ZDRlNDU3OTlmMWNkMS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9udW1lcmljX29wLmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDMxNSArMCwwIEBACi0KLSNpZiAhZGVmaW5lZChCT09TVF9QUF9J
U19JVEVSQVRJTkcpCi0KLS8vLy8vIGhlYWRlciBib2R5Ci0KLS8vIE5PIElOQ0xVREUgR1VBUkRT
LCBUSEUgSEVBREVSIElTIElOVEVOREVEIEZPUiBNVUxUSVBMRSBJTkNMVVNJT04hCi0KLS8vIENv
cHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3
dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0v
LyAkUmV2aXNpb24kCi0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RF
KQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9udW1lcmljX2Nhc3QuaHBwPgotIyAgIGluY2x1ZGUg
PGJvb3N0L21wbC9hcHBseV93cmFwLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvaWYuaHBw
PgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC90YWcuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21w
bC9hdXhfL251bWVyaWNfY2FzdF91dGlscy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1
eF8vbmEuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hX3NwZWMuaHBwPgotIyAg
IGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2xhbWJkYV9zdXBwb3J0LmhwcD4KLSMgICBpbmNsdWRl
IDxib29zdC9tcGwvYXV4Xy9tc3ZjX2V0aV9iYXNlLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9t
cGwvYXV4Xy92YWx1ZV93a25kLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25m
aWcvZXRpLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9udHRwX2RlY2wuaHBwPgot
I2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvc3RhdGljX2NvbnN0YW50
LmhwcD4KLQotI2lmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVS
UykgXAotICAgIHx8IGRlZmluZWQoQk9PU1RfTVBMX1BSRVBST0NFU1NJTkdfTU9ERSkKLQotIyAg
IGluY2x1ZGUgPGJvb3N0L21wbC9saW1pdHMvYXJpdHkuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0
L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9wYXJ0aWFsX3NwZWNfcGFyYW1zLmhwcD4KLSMgICBpbmNs
dWRlIDxib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZGVmX3BhcmFtc190YWlsLmhwcD4KLSMg
ICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvcmVwZWF0LmhwcD4KLSMgICBp
bmNsdWRlIDxib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZXh0X3BhcmFtcy5ocHA+Ci0jICAg
aW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL3BhcmFtcy5ocHA+Ci0jICAgaW5j
bHVkZSA8Ym9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL2VudW0uaHBwPgotIyAgIGluY2x1ZGUg
PGJvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9hZGQuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0
L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9zdWIuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9h
dXhfL2NvbmZpZy9jdHBzLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcv
ZXRpLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvbXN2Yy5ocHA+Ci0j
ICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3dvcmthcm91bmQuaHBwPgotCi0jICAg
aW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2RlYy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3Qv
cHJlcHJvY2Vzc29yL2luYy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2l0
ZXJhdGUuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgotCi0K
LSNpZiAhZGVmaW5lZChBVVg3NzgwNzZfT1BfQVJJVFkpCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9P
UF9BUklUWSBCT09TVF9NUExfTElNSVRfTUVUQUZVTkNUSU9OX0FSSVRZCi0jZW5kaWYKLQotI2lm
ICFkZWZpbmVkKEFVWDc3ODA3Nl9PUF9JTVBMX05BTUUpCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9P
UF9JTVBMX05BTUUgQk9PU1RfUFBfQ0FUKEFVWDc3ODA3Nl9PUF9QUkVGSVgsX2ltcGwpCi0jZW5k
aWYKLQotI2lmICFkZWZpbmVkKEFVWDc3ODA3Nl9PUF9UQUdfTkFNRSkKLSMgICBkZWZpbmUgQVVY
Nzc4MDc2X09QX1RBR19OQU1FIEJPT1NUX1BQX0NBVChBVVg3NzgwNzZfT1BfUFJFRklYLF90YWcp
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRl
PCAKLSAgICAgIHR5cGVuYW1lIFRhZzEKLSAgICAsIHR5cGVuYW1lIFRhZzIKLSNpZiBCT09TVF9X
T1JLQVJPVU5EKEJPT1NUX01TVkMsIDw9IDEzMDApCi0gICAgLCBCT09TVF9NUExfQVVYX05UVFBf
REVDTChpbnQsIHRhZzFfKSA9IEJPT1NUX01QTF9BVVhfTVNWQ19WQUxVRV9XS05EKFRhZzEpOjp2
YWx1ZSAKLSAgICAsIEJPT1NUX01QTF9BVVhfTlRUUF9ERUNMKGludCwgdGFnMl8pID0gQk9PU1Rf
TVBMX0FVWF9NU1ZDX1ZBTFVFX1dLTkQoVGFnMik6OnZhbHVlIAotICAgID4KLXN0cnVjdCBBVVg3
NzgwNzZfT1BfSU1QTF9OQU1FCi0gICAgOiBpZl9jPAotICAgICAgICAgICggdGFnMV8gPiB0YWcy
XyApCi0jZWxzZQotICAgID4KLXN0cnVjdCBBVVg3NzgwNzZfT1BfSU1QTF9OQU1FCi0gICAgOiBp
Zl9jPAotICAgICAgICAgICggQk9PU1RfTVBMX0FVWF9ORVNURURfVkFMVUVfV0tORChpbnQsIFRh
ZzEpCi0gICAgICAgICAgICAgID4gQk9PU1RfTVBMX0FVWF9ORVNURURfVkFMVUVfV0tORChpbnQs
IFRhZzIpCi0gICAgICAgICAgICApCi0jZW5kaWYKLSAgICAgICAgLCBhdXg6OmNhc3QybmRfaW1w
bDwgQVVYNzc4MDc2X09QX0lNUExfTkFNRTxUYWcxLFRhZzE+LFRhZzEsVGFnMiA+Ci0gICAgICAg
ICwgYXV4OjpjYXN0MXN0X2ltcGw8IEFVWDc3ODA3Nl9PUF9JTVBMX05BTUU8VGFnMixUYWcyPixU
YWcxLFRhZzIgPgotICAgICAgICA+Ojp0eXBlCi17Ci19OwotCi0vLy8gZm9yIERpZ2l0YWwgTWFy
cyBDKysvY29tcGlsZXJzIHdpdGggbm8gQ1RQUy9UVFAgc3VwcG9ydAotdGVtcGxhdGU8PiBzdHJ1
Y3QgQVVYNzc4MDc2X09QX0lNUExfTkFNRTxuYSxuYT4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5h
bWUgVTEsIHR5cGVuYW1lIFUyID4gc3RydWN0IGFwcGx5IAotICAgIHsKLSAgICAgICAgdHlwZWRl
ZiBhcHBseSB0eXBlOwotICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1ZSA9
IDApOwotICAgIH07Ci19OwotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVfUEFSVElB
TF9TUEVDSUFMSVpBVElPTikKLXRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3QgQVVYNzc4
MDc2X09QX0lNUExfTkFNRTxuYSxUYWc+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFUxLCB0
eXBlbmFtZSBVMiA+IHN0cnVjdCBhcHBseSAKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgYXBwbHkg
dHlwZTsKLSAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwgdmFsdWUgPSAwKTsKLSAg
ICB9OwotfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBBVVg3NzgwNzZfT1Bf
SU1QTF9OQU1FPFRhZyxuYT4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1l
IFUyID4gc3RydWN0IGFwcGx5IAotICAgIHsKLSAgICAgICAgdHlwZWRlZiBhcHBseSB0eXBlOwot
ICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1ZSA9IDApOwotICAgIH07Ci19
OwotI2Vsc2UKLXRlbXBsYXRlPD4gc3RydWN0IEFVWDc3ODA3Nl9PUF9JTVBMX05BTUU8bmEsaW50
ZWdyYWxfY190YWc+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFUxLCB0eXBlbmFtZSBVMiA+
IHN0cnVjdCBhcHBseSAKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgYXBwbHkgdHlwZTsKLSAgICAg
ICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwgdmFsdWUgPSAwKTsKLSAgICB9OwotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQVVYNzc4MDc2X09QX0lNUExfTkFNRTxpbnRlZ3JhbF9jX3RhZyxu
YT4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyID4gc3RydWN0IGFw
cGx5IAotICAgIHsKLSAgICAgICAgdHlwZWRlZiBhcHBseSB0eXBlOwotICAgICAgICBCT09TVF9T
VEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1ZSA9IDApOwotICAgIH07Ci19OwotI2VuZGlmCi0KLQot
I2lmIGRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpBVElPTikgXAot
ICAgICYmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPj0gMTMwMCkKLXRlbXBsYXRlPCB0
eXBlbmFtZSBUID4gc3RydWN0IEFVWDc3ODA3Nl9PUF9UQUdfTkFNRQotICAgIDogdGFnPFQsbmE+
Ci17Ci19OwotI2Vsc2UKLXRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IEFVWDc3ODA3Nl9P
UF9UQUdfTkFNRQotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgVDo6dGFnIHR5cGU7Ci19OwotI2Vu
ZGlmCi0KLQotI2lmIEFVWDc3ODA3Nl9PUF9BUklUWSAhPSAyCi0KLSMgICBpZiAhZGVmaW5lZChC
T09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OKQotCi0jICAgZGVmaW5lIEFV
WDc3ODA3Nl9PUF9SSUdIVF9PUEVSQU5EKHVudXNlZCwgaSwgTikgLCBCT09TVF9QUF9DQVQoTiwg
Qk9PU1RfTVBMX1BQX0FERChpLCAyKSk+Ci0jICAgZGVmaW5lIEFVWDc3ODA3Nl9PUF9OX0NBTExT
KGksIE4pIFwKLSAgICBCT09TVF9NUExfUFBfUkVQRUFUKCBCT09TVF9QUF9ERUMoaSksIEJPT1NU
X01QTF9QUF9SRVBFQVRfSURFTlRJVFlfRlVOQywgQVVYNzc4MDc2X09QX05BTUU8ICkgXAotICAg
IE4xIEJPT1NUX01QTF9QUF9SRVBFQVQoIEJPT1NUX01QTF9QUF9TVUIoaSwgMSksIEFVWDc3ODA3
Nl9PUF9SSUdIVF9PUEVSQU5ELCBOICkgXAotLyoqLwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVu
YW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oTjEpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9NUExf
QVVYX05BX1BBUkFNKE4yKQotICAgIEJPT1NUX01QTF9QUF9ERUZfUEFSQU1TX1RBSUwoMiwgdHlw
ZW5hbWUgTiwgbmEpCi0gICAgPgotc3RydWN0IEFVWDc3ODA3Nl9PUF9OQU1FCi0gICAgOiBBVVg3
NzgwNzZfT1BfTl9DQUxMUyhBVVg3NzgwNzZfT1BfQVJJVFksIE4pCi17Ci0gICAgQk9PU1RfTVBM
X0FVWF9MQU1CREFfU1VQUE9SVCgKLSAgICAgICAgICBBVVg3NzgwNzZfT1BfQVJJVFkKLSAgICAg
ICAgLCBBVVg3NzgwNzZfT1BfTkFNRQotICAgICAgICAsICggQk9PU1RfTVBMX1BQX1BBUkFNUyhB
VVg3NzgwNzZfT1BfQVJJVFksIE4pICkKLSAgICAgICAgKQotfTsKLQotI2RlZmluZSBCT09TVF9Q
UF9JVEVSQVRJT05fUEFSQU1TXzEgXAotICAgICgzLCggQk9PU1RfUFBfREVDKEFVWDc3ODA3Nl9P
UF9BUklUWSksIDIsIDxib29zdC9tcGwvYXV4Xy9udW1lcmljX29wLmhwcD4gKSkKLSNpbmNsdWRl
IEJPT1NUX1BQX0lURVJBVEUoKQotCi0jICAgdW5kZWYgQVVYNzc4MDc2X09QX05fQ0FMTFMKLSMg
ICB1bmRlZiBBVVg3NzgwNzZfT1BfUklHSFRfT1BFUkFORAotCi0jICAgZWxzZSAvLyBCT09TVF9O
T19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OCi0KLS8vLyBmb3J3YXJkIGRlY2xhcmF0
aW9uCi10ZW1wbGF0ZTwgCi0gICAgICB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKE4x
KQotICAgICwgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShOMikKLSAgICA+Ci1zdHJ1
Y3QgQk9PU1RfUFBfQ0FUKEFVWDc3ODA3Nl9PUF9OQU1FLDIpOwotCi10ZW1wbGF0ZTwKLSAgICAg
IHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oTjEpCi0gICAgLCB0eXBlbmFtZSBCT09T
VF9NUExfQVVYX05BX1BBUkFNKE4yKQotICAgIEJPT1NUX01QTF9QUF9ERUZfUEFSQU1TX1RBSUwo
MiwgdHlwZW5hbWUgTiwgbmEpCi0gICAgPgotc3RydWN0IEFVWDc3ODA3Nl9PUF9OQU1FCi0jaWYg
Qk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA9PSAxMzAwKQotICAgIDogYXV4Ojptc3ZjX2V0
aV9iYXNlPCB0eXBlbmFtZSBpZl88Ci0jZWxzZQotICAgIDogaWZfPAotI2VuZGlmCi0gICAgICAg
ICAgaXNfbmE8TjM+Ci0gICAgICAgICwgQk9PU1RfUFBfQ0FUKEFVWDc3ODA3Nl9PUF9OQU1FLDIp
PE4xLE4yPgotICAgICAgICAsIEFVWDc3ODA3Nl9PUF9OQU1FPAotICAgICAgICAgICAgICBCT09T
VF9QUF9DQVQoQVVYNzc4MDc2X09QX05BTUUsMik8TjEsTjI+Ci0gICAgICAgICAgICAsIEJPT1NU
X01QTF9QUF9FWFRfUEFSQU1TKDMsIEJPT1NUX1BQX0lOQyhBVVg3NzgwNzZfT1BfQVJJVFkpLCBO
KQotICAgICAgICAgICAgPgotICAgICAgICA+Ojp0eXBlCi0jaWYgQk9PU1RfV09SS0FST1VORChC
T09TVF9NU1ZDLCA9PSAxMzAwKQotICAgID4KLSNlbmRpZgotewotICAgIEJPT1NUX01QTF9BVVhf
TEFNQkRBX1NVUFBPUlQoCi0gICAgICAgICAgQVVYNzc4MDc2X09QX0FSSVRZCi0gICAgICAgICwg
QVVYNzc4MDc2X09QX05BTUUKLSAgICAgICAgLCAoIEJPT1NUX01QTF9QUF9QQVJBTVMoQVVYNzc4
MDc2X09QX0FSSVRZLCBOKSApCi0gICAgICAgICkKLX07Ci0KLXRlbXBsYXRlPCAKLSAgICAgIHR5
cGVuYW1lIE4xCi0gICAgLCB0eXBlbmFtZSBOMgotICAgID4KLXN0cnVjdCBCT09TVF9QUF9DQVQo
QVVYNzc4MDc2X09QX05BTUUsMikKLQotI2VuZGlmCi0KLSNlbHNlIC8vIEFVWDc3ODA3Nl9PUF9B
UklUWSA9PSAyCi0KLXRlbXBsYXRlPCAKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFf
UEFSQU0oTjEpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKE4yKQotICAg
ID4KLXN0cnVjdCBBVVg3NzgwNzZfT1BfTkFNRQotCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEJP
T1NUX01QTF9DRkdfTVNWQ19FVElfQlVHKQotICAgIDogQVVYNzc4MDc2X09QX0lNUExfTkFNRTwK
LSAgICAgICAgICB0eXBlbmFtZSBBVVg3NzgwNzZfT1BfVEFHX05BTUU8TjE+Ojp0eXBlCi0gICAg
ICAgICwgdHlwZW5hbWUgQVVYNzc4MDc2X09QX1RBR19OQU1FPE4yPjo6dHlwZQotICAgICAgICA+
Ojp0ZW1wbGF0ZSBhcHBseTxOMSxOMj46OnR5cGUKLSNlbHNlCi0gICAgOiBhdXg6Om1zdmNfZXRp
X2Jhc2U8IHR5cGVuYW1lIGFwcGx5X3dyYXAyPAotICAgICAgICAgIEFVWDc3ODA3Nl9PUF9JTVBM
X05BTUU8Ci0gICAgICAgICAgICAgIHR5cGVuYW1lIEFVWDc3ODA3Nl9PUF9UQUdfTkFNRTxOMT46
OnR5cGUKLSAgICAgICAgICAgICwgdHlwZW5hbWUgQVVYNzc4MDc2X09QX1RBR19OQU1FPE4yPjo6
dHlwZQotICAgICAgICAgICAgPgotICAgICAgICAsIE4xCi0gICAgICAgICwgTjIKLSAgICAgICAg
Pjo6dHlwZSA+Ojp0eXBlCi0jZW5kaWYKLXsKLSNpZiBBVVg3NzgwNzZfT1BfQVJJVFkgIT0gMgot
Ci0jICAgaWYgIWRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpBVElP
TikKLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUX1NQRUMoCi0gICAgICAgICAgQVVY
Nzc4MDc2X09QX0FSSVRZCi0gICAgICAgICwgQVVYNzc4MDc2X09QX05BTUUKLSAgICAgICAgLCAo
IEJPT1NUX01QTF9QUF9QQVJUSUFMX1NQRUNfUEFSQU1TKDIsIE4sIG5hKSApCi0gICAgICAgICkK
LSMgICBlbHNlCi0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgyLCBCT09TVF9QUF9D
QVQoQVVYNzc4MDc2X09QX05BTUUsMiksIChOMSwgTjIpKQotIyAgIGVuZGlmCi0KLSNlbHNlCi0g
ICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgyLCBBVVg3NzgwNzZfT1BfTkFNRSwgKE4x
LCBOMikpCi0jZW5kaWYKLX07Ci0KLUJPT1NUX01QTF9BVVhfTkFfU1BFQzIoMiwgQVVYNzc4MDc2
X09QX0FSSVRZLCBBVVg3NzgwNzZfT1BfTkFNRSkKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01Q
TF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMKLQotLy8vLy8gaXRlcmF0aW9uLCBkZXB0aCA9
PSAxCi0KLS8vIEZvciBnY2MgNC40IGNvbXBhdGFiaWxpdHksIHdlIG11c3QgaW5jbHVkZSB0aGUK
LS8vIEJPT1NUX1BQX0lURVJBVElPTl9ERVBUSCB0ZXN0IGluc2lkZSBhbiAjZWxzZSBjbGF1c2Uu
Ci0jZWxzZSAvLyBCT09TVF9QUF9JU19JVEVSQVRJTkcKLSNpZiBCT09TVF9QUF9JVEVSQVRJT05f
REVQVEgoKSA9PSAxCi0KLSMgICBkZWZpbmUgaV8gQk9PU1RfUFBfRlJBTUVfSVRFUkFUSU9OKDEp
Ci0KLXRlbXBsYXRlPAotICAgICAgQk9PU1RfTVBMX1BQX1BBUkFNUyhpXywgdHlwZW5hbWUgTikK
LSAgICA+Ci1zdHJ1Y3QgQVVYNzc4MDc2X09QX05BTUU8Qk9PU1RfTVBMX1BQX1BBUlRJQUxfU1BF
Q19QQVJBTVMoaV8sIE4sIG5hKT4KLSNpZiBpXyAhPSAyCi0gICAgOiBBVVg3NzgwNzZfT1BfTl9D
QUxMUyhpXywgTikKLXsKLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUX1NQRUMoCi0g
ICAgICAgICAgQVVYNzc4MDc2X09QX0FSSVRZCi0gICAgICAgICwgQVVYNzc4MDc2X09QX05BTUUK
LSAgICAgICAgLCAoIEJPT1NUX01QTF9QUF9QQVJUSUFMX1NQRUNfUEFSQU1TKGlfLCBOLCBuYSkg
KQotICAgICAgICApCi19OwotI2VuZGlmCi0KLSMgICB1bmRlZiBpXwotCi0jZW5kaWYgLy8gQk9P
U1RfUFBfSVRFUkFUSU9OX0RFUFRIKCkKLSNlbmRpZiAvLyBCT09TVF9QUF9JU19JVEVSQVRJTkcK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21w
bC9hdXhfL3ByZXByb2Nlc3NlZC9nY2MvYWR2YW5jZV9iYWNrd2FyZC5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2Nj
L2FkdmFuY2VfYmFja3dhcmQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmRl
OTRjZWExYWQ2YWE2NDJkYjg5MWNhOWUwOGI2OGU1YmNjNjg1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9nY2MvYWR2YW5jZV9iYWNrd2FyZC5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0KLS8vIENvcHlyaWdodCBBbGVrc2V5
IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxl
IExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotLy8KLQotLy8gUHJlcHJvY2Vzc2VkIHZlcnNpb24gb2YgImJvb3N0L21w
bC9hdXhfL2FkdmFuY2VfYmFja3dhcmQuaHBwIiBoZWFkZXIKLS8vIC0tIERPIE5PVCBtb2RpZnkg
YnkgaGFuZCEKLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBh
dXggewotCi10ZW1wbGF0ZTwgbG9uZyBOID4gc3RydWN0IGFkdmFuY2VfYmFja3dhcmQ7Ci10ZW1w
bGF0ZTw+Ci1zdHJ1Y3QgYWR2YW5jZV9iYWNrd2FyZDwwPgotewotICAgIHRlbXBsYXRlPCB0eXBl
bmFtZSBJdGVyYXRvciA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBJdGVy
YXRvciBpdGVyMDsKLSAgICAgICAgdHlwZWRlZiBpdGVyMCB0eXBlOwotICAgIH07Ci19OwotCi10
ZW1wbGF0ZTw+Ci1zdHJ1Y3QgYWR2YW5jZV9iYWNrd2FyZDwxPgotewotICAgIHRlbXBsYXRlPCB0
eXBlbmFtZSBJdGVyYXRvciA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBJ
dGVyYXRvciBpdGVyMDsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBwcmlvcjxpdGVyMD46OnR5
cGUgaXRlcjE7Ci0gICAgICAgIHR5cGVkZWYgaXRlcjEgdHlwZTsKLSAgICB9OwotfTsKLQotdGVt
cGxhdGU8Pgotc3RydWN0IGFkdmFuY2VfYmFja3dhcmQ8Mj4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlw
ZW5hbWUgSXRlcmF0b3IgPiBzdHJ1Y3QgYXBwbHkKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgSXRl
cmF0b3IgaXRlcjA7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcHJpb3I8aXRlcjA+Ojp0eXBl
IGl0ZXIxOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHByaW9yPGl0ZXIxPjo6dHlwZSBpdGVy
MjsKLSAgICAgICAgdHlwZWRlZiBpdGVyMiB0eXBlOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgYWR2YW5jZV9iYWNrd2FyZDwzPgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJ
dGVyYXRvciA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBJdGVyYXRvciBp
dGVyMDsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBwcmlvcjxpdGVyMD46OnR5cGUgaXRlcjE7
Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcHJpb3I8aXRlcjE+Ojp0eXBlIGl0ZXIyOwotICAg
ICAgICB0eXBlZGVmIHR5cGVuYW1lIHByaW9yPGl0ZXIyPjo6dHlwZSBpdGVyMzsKLSAgICAgICAg
dHlwZWRlZiBpdGVyMyB0eXBlOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgYWR2
YW5jZV9iYWNrd2FyZDw0PgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJdGVyYXRvciA+IHN0
cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBJdGVyYXRvciBpdGVyMDsKLSAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBwcmlvcjxpdGVyMD46OnR5cGUgaXRlcjE7Ci0gICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgcHJpb3I8aXRlcjE+Ojp0eXBlIGl0ZXIyOwotICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIHByaW9yPGl0ZXIyPjo6dHlwZSBpdGVyMzsKLSAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBwcmlvcjxpdGVyMz46OnR5cGUgaXRlcjQ7Ci0gICAgICAgIHR5cGVkZWYgaXRlcjQgdHlw
ZTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8IGxvbmcgTiA+Ci1zdHJ1Y3QgYWR2YW5jZV9iYWNr
d2FyZAotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJdGVyYXRvciA+IHN0cnVjdCBhcHBseQot
ICAgIHsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseV93cmFwMTwKLSAgICAgICAgICAg
ICAgYWR2YW5jZV9iYWNrd2FyZDw0PgotICAgICAgICAgICAgLCBJdGVyYXRvcgotICAgICAgICAg
ICAgPjo6dHlwZSBjaHVua19yZXN1bHRfOwotCi0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBw
bHlfd3JhcDE8Ci0gICAgICAgICAgICAgIGFkdmFuY2VfYmFja3dhcmQ8KAotICAgICAgICAgICAg
ICAgIChOIC0gNCkgPCAwCi0gICAgICAgICAgICAgICAgICAgID8gMAotICAgICAgICAgICAgICAg
ICAgICA6IE4gLSA0Ci0gICAgICAgICAgICAgICAgICAgICk+Ci0gICAgICAgICAgICAsIGNodW5r
X3Jlc3VsdF8KLSAgICAgICAgICAgID46OnR5cGUgdHlwZTsKLSAgICB9OwotfTsKLQotfX19Ci0K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21w
bC9hdXhfL3ByZXByb2Nlc3NlZC9nY2MvYWR2YW5jZV9mb3J3YXJkLmhwcCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9nY2Mv
YWR2YW5jZV9mb3J3YXJkLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEzN2Nj
NzJhZjFlMDM0Yzc4MzM3N2UyNzQ2ZGQ0NTEyMzlhNmM2NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2FkdmFuY2VfZm9yd2FyZC5ocHAK
KysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1
cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0
d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotLy8KLQotLy8gUHJlcHJvY2Vzc2VkIHZlcnNpb24gb2YgImJvb3N0L21wbC9h
dXhfL2FkdmFuY2VfZm9yd2FyZC5ocHAiIGhlYWRlcgotLy8gLS0gRE8gTk9UIG1vZGlmeSBieSBo
YW5kIQotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFtZXNwYWNlIGF1eCB7
Ci0KLXRlbXBsYXRlPCBsb25nIE4gPiBzdHJ1Y3QgYWR2YW5jZV9mb3J3YXJkOwotdGVtcGxhdGU8
Pgotc3RydWN0IGFkdmFuY2VfZm9yd2FyZDwwPgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJ
dGVyYXRvciA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBJdGVyYXRvciBp
dGVyMDsKLSAgICAgICAgdHlwZWRlZiBpdGVyMCB0eXBlOwotICAgIH07Ci19OwotCi10ZW1wbGF0
ZTw+Ci1zdHJ1Y3QgYWR2YW5jZV9mb3J3YXJkPDE+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1l
IEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIEl0ZXJhdG9y
IGl0ZXIwOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIG5leHQ8aXRlcjA+Ojp0eXBlIGl0ZXIx
OwotICAgICAgICB0eXBlZGVmIGl0ZXIxIHR5cGU7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPD4K
LXN0cnVjdCBhZHZhbmNlX2ZvcndhcmQ8Mj4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgSXRl
cmF0b3IgPiBzdHJ1Y3QgYXBwbHkKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgSXRlcmF0b3IgaXRl
cjA7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbmV4dDxpdGVyMD46OnR5cGUgaXRlcjE7Ci0g
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbmV4dDxpdGVyMT46OnR5cGUgaXRlcjI7Ci0gICAgICAg
IHR5cGVkZWYgaXRlcjIgdHlwZTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IGFk
dmFuY2VfZm9yd2FyZDwzPgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJdGVyYXRvciA+IHN0
cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBJdGVyYXRvciBpdGVyMDsKLSAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBuZXh0PGl0ZXIwPjo6dHlwZSBpdGVyMTsKLSAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBuZXh0PGl0ZXIxPjo6dHlwZSBpdGVyMjsKLSAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBuZXh0PGl0ZXIyPjo6dHlwZSBpdGVyMzsKLSAgICAgICAgdHlwZWRlZiBpdGVyMyB0
eXBlOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgYWR2YW5jZV9mb3J3YXJkPDQ+
Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5Ci0gICAg
ewotICAgICAgICB0eXBlZGVmIEl0ZXJhdG9yIGl0ZXIwOwotICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIG5leHQ8aXRlcjA+Ojp0eXBlIGl0ZXIxOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIG5l
eHQ8aXRlcjE+Ojp0eXBlIGl0ZXIyOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIG5leHQ8aXRl
cjI+Ojp0eXBlIGl0ZXIzOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIG5leHQ8aXRlcjM+Ojp0
eXBlIGl0ZXI0OwotICAgICAgICB0eXBlZGVmIGl0ZXI0IHR5cGU7Ci0gICAgfTsKLX07Ci0KLXRl
bXBsYXRlPCBsb25nIE4gPgotc3RydWN0IGFkdmFuY2VfZm9yd2FyZAotewotICAgIHRlbXBsYXRl
PCB0eXBlbmFtZSBJdGVyYXRvciA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBhcHBseV93cmFwMTwKLSAgICAgICAgICAgICAgYWR2YW5jZV9mb3J3YXJkPDQ+
Ci0gICAgICAgICAgICAsIEl0ZXJhdG9yCi0gICAgICAgICAgICA+Ojp0eXBlIGNodW5rX3Jlc3Vs
dF87Ci0KLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseV93cmFwMTwKLSAgICAgICAgICAg
ICAgYWR2YW5jZV9mb3J3YXJkPCgKLSAgICAgICAgICAgICAgICAoTiAtIDQpIDwgMAotICAgICAg
ICAgICAgICAgICAgICA/IDAKLSAgICAgICAgICAgICAgICAgICAgOiBOIC0gNAotICAgICAgICAg
ICAgICAgICAgICApPgotICAgICAgICAgICAgLCBjaHVua19yZXN1bHRfCi0gICAgICAgICAgICA+
Ojp0eXBlIHR5cGU7Ci0gICAgfTsKLX07Ci0KLX19fQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2Nj
L2FuZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwv
YXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2FuZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAxMGFkMWZjODQ5Y2I5NmFiODRkMGNhMDJlYTVmOWQwZGQ2MTNkMmEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9hbmQuaHBwCisr
KyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0
b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdh
cmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkKLS8vCi0KLS8vIFByZXByb2Nlc3NlZCB2ZXJzaW9uIG9mICJib29zdC9tcGwvYW5k
LmhwcCIgaGVhZGVyCi0vLyAtLSBETyBOT1QgbW9kaWZ5IGJ5IGhhbmQhCi0KLW5hbWVzcGFjZSBi
b29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi1uYW1lc3BhY2UgYXV4IHsKLQotdGVtcGxhdGU8IGJv
b2wgQ18sIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0
ID4KLXN0cnVjdCBhbmRfaW1wbAotICAgIDogZmFsc2VfCi17Ci19OwotCi10ZW1wbGF0ZTwgdHlw
ZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQgPgotc3RydWN0
IGFuZF9pbXBsPCB0cnVlLFQxLFQyLFQzLFQ0ID4KLSAgICA6IGFuZF9pbXBsPAotICAgICAgICAg
IEJPT1NUX01QTF9BVVhfTkVTVEVEX1RZUEVfV0tORChUMSk6OnZhbHVlCi0gICAgICAgICwgVDIs
IFQzLCBUNAotICAgICAgICAsIHRydWVfCi0gICAgICAgID4KLXsKLX07Ci0KLXRlbXBsYXRlPD4K
LXN0cnVjdCBhbmRfaW1wbDwKLSAgICAgICAgICB0cnVlCi0gICAgICAgICwgdHJ1ZV8sIHRydWVf
LCB0cnVlXywgdHJ1ZV8KLSAgICAgICAgPgotICAgIDogdHJ1ZV8KLXsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIGF1eAotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFf
UEFSQU0oVDEpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKFQyKQotICAg
ICwgdHlwZW5hbWUgVDMgPSB0cnVlXywgdHlwZW5hbWUgVDQgPSB0cnVlXywgdHlwZW5hbWUgVDUg
PSB0cnVlXwotICAgID4KLXN0cnVjdCBhbmRfCi0KLSAgICA6IGF1eDo6YW5kX2ltcGw8Ci0gICAg
ICAgICAgQk9PU1RfTVBMX0FVWF9ORVNURURfVFlQRV9XS05EKFQxKTo6dmFsdWUKLSAgICAgICAg
LCBUMiwgVDMsIFQ0LCBUNQotICAgICAgICA+Ci0KLXsKLSAgICBCT09TVF9NUExfQVVYX0xBTUJE
QV9TVVBQT1JUKAotICAgICAgICAgIDUKLSAgICAgICAgLCBhbmRfCi0gICAgICAgICwgKCBUMSwg
VDIsIFQzLCBUNCwgVDUpCi0gICAgICAgICkKLX07Ci0KLUJPT1NUX01QTF9BVVhfTkFfU1BFQzIo
Ci0gICAgICAyCi0gICAgLCA1Ci0gICAgLCBhbmRfCi0gICAgKQotCi19fQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJv
Y2Vzc2VkL2djYy9hcHBseS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2FwcGx5LmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTA4ZWFjY2YwM2EyZGQ5MzExNGZlZTIwMGQyOTBjYzg5M2I2OTBh
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQv
Z2NjL2FwcGx5LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0KLS8vIENvcHly
aWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29t
cGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLQotLy8gUHJlcHJvY2Vzc2VkIHZlcnNpb24g
b2YgImJvb3N0L21wbC9hcHBseS5ocHAiIGhlYWRlcgotLy8gLS0gRE8gTk9UIG1vZGlmeSBieSBo
YW5kIQotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8Ci0g
ICAgICB0eXBlbmFtZSBGCi0gICAgPgotc3RydWN0IGFwcGx5MAotCi0gICAgOiBhcHBseV93cmFw
MDwKLSAgICAgICAgICB0eXBlbmFtZSBsYW1iZGE8Rj46OnR5cGUKLSAgICAgICAKLSAgICAgICAg
PgotewotICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlQoCi0gICAgICAgICAgMQotICAg
ICAgICAsIGFwcGx5MAotICAgICAgICAsIChGICkKLSAgICAgICAgKQotfTsKLQotdGVtcGxhdGU8
Ci0gICAgICB0eXBlbmFtZSBGCi0gICAgPgotc3RydWN0IGFwcGx5PCBGLG5hLG5hLG5hLG5hLG5h
ID4KLSAgICA6IGFwcGx5MDxGPgotewotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBG
LCB0eXBlbmFtZSBUMQotICAgID4KLXN0cnVjdCBhcHBseTEKLQotICAgIDogYXBwbHlfd3JhcDE8
Ci0gICAgICAgICAgdHlwZW5hbWUgbGFtYmRhPEY+Ojp0eXBlCi0gICAgICAgICwgVDEKLSAgICAg
ICAgPgotewotICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlQoCi0gICAgICAgICAgMgot
ICAgICAgICAsIGFwcGx5MQotICAgICAgICAsIChGLCBUMSkKLSAgICAgICAgKQotfTsKLQotdGVt
cGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMQotICAgID4KLXN0cnVjdCBhcHBs
eTwgRixUMSxuYSxuYSxuYSxuYSA+Ci0gICAgOiBhcHBseTE8IEYsVDEgPgotewotfTsKLQotdGVt
cGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIKLSAgICA+
Ci1zdHJ1Y3QgYXBwbHkyCi0KLSAgICA6IGFwcGx5X3dyYXAyPAotICAgICAgICAgIHR5cGVuYW1l
IGxhbWJkYTxGPjo6dHlwZQotICAgICAgICAsIFQxLCBUMgotICAgICAgICA+Ci17Ci0gICAgQk9P
U1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgKLSAgICAgICAgICAzCi0gICAgICAgICwgYXBwbHky
Ci0gICAgICAgICwgKEYsIFQxLCBUMikKLSAgICAgICAgKQotfTsKLQotdGVtcGxhdGU8Ci0gICAg
ICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIKLSAgICA+Ci1zdHJ1Y3QgYXBw
bHk8IEYsVDEsVDIsbmEsbmEsbmEgPgotICAgIDogYXBwbHkyPCBGLFQxLFQyID4KLXsKLX07Ci0K
LXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0
eXBlbmFtZSBUMwotICAgID4KLXN0cnVjdCBhcHBseTMKLQotICAgIDogYXBwbHlfd3JhcDM8Ci0g
ICAgICAgICAgdHlwZW5hbWUgbGFtYmRhPEY+Ojp0eXBlCi0gICAgICAgICwgVDEsIFQyLCBUMwot
ICAgICAgICA+Ci17Ci0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgKLSAgICAgICAg
ICA0Ci0gICAgICAgICwgYXBwbHkzCi0gICAgICAgICwgKEYsIFQxLCBUMiwgVDMpCi0gICAgICAg
ICkKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVu
YW1lIFQyLCB0eXBlbmFtZSBUMwotICAgID4KLXN0cnVjdCBhcHBseTwgRixUMSxUMixUMyxuYSxu
YSA+Ci0gICAgOiBhcHBseTM8IEYsVDEsVDIsVDMgPgotewotfTsKLQotdGVtcGxhdGU8Ci0gICAg
ICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBl
bmFtZSBUNAotICAgID4KLXN0cnVjdCBhcHBseTQKLQotICAgIDogYXBwbHlfd3JhcDQ8Ci0gICAg
ICAgICAgdHlwZW5hbWUgbGFtYmRhPEY+Ojp0eXBlCi0gICAgICAgICwgVDEsIFQyLCBUMywgVDQK
LSAgICAgICAgPgotewotICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlQoCi0gICAgICAg
ICAgNQotICAgICAgICAsIGFwcGx5NAotICAgICAgICAsIChGLCBUMSwgVDIsIFQzLCBUNCkKLSAg
ICAgICAgKQotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwg
dHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgID4KLXN0cnVjdCBhcHBs
eTwgRixUMSxUMixUMyxUNCxuYSA+Ci0gICAgOiBhcHBseTQ8IEYsVDEsVDIsVDMsVDQgPgotewot
fTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUg
VDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUKLSAgICA+Ci1z
dHJ1Y3QgYXBwbHk1Ci0KLSAgICA6IGFwcGx5X3dyYXA1PAotICAgICAgICAgIHR5cGVuYW1lIGxh
bWJkYTxGPjo6dHlwZQotICAgICAgICAsIFQxLCBUMiwgVDMsIFQ0LCBUNQotICAgICAgICA+Ci17
Ci0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgKLSAgICAgICAgICA2Ci0gICAgICAg
ICwgYXBwbHk1Ci0gICAgICAgICwgKEYsIFQxLCBUMiwgVDMsIFQ0LCBUNSkKLSAgICAgICAgKQot
fTsKLQotLy8vIHByaW1hcnkgdGVtcGxhdGUgKG5vdCBhIHNwZWNpYWxpemF0aW9uISkKLQotdGVt
cGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVu
YW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUKLSAgICA+Ci1zdHJ1Y3QgYXBw
bHkKLSAgICA6IGFwcGx5NTwgRixUMSxUMixUMyxUNCxUNSA+Ci17Ci19OwotCi19fQotCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4
Xy9wcmVwcm9jZXNzZWQvZ2NjL2FwcGx5X2Z3ZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2FwcGx5X2Z3ZC5o
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZWQ1ZDUxMzAxMWQ3YWI1OWJiMjcz
OTVkZTg1ODFkNGZkZGI1MDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1
eF8vcHJlcHJvY2Vzc2VkL2djYy9hcHBseV9md2QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTIg
KzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0v
LyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0KLS8vIFBy
ZXByb2Nlc3NlZCB2ZXJzaW9uIG9mICJib29zdC9tcGwvYXBwbHlfZndkLmhwcCIgaGVhZGVyCi0v
LyAtLSBETyBOT1QgbW9kaWZ5IGJ5IGhhbmQhCi0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFj
ZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxID0gbmEs
IHR5cGVuYW1lIFQyID0gbmEsIHR5cGVuYW1lIFQzID0gbmEKLSAgICAsIHR5cGVuYW1lIFQ0ID0g
bmEsIHR5cGVuYW1lIFQ1ID0gbmEKLSAgICA+Ci1zdHJ1Y3QgYXBwbHk7Ci0KLXRlbXBsYXRlPAot
ICAgICAgdHlwZW5hbWUgRgotICAgID4KLXN0cnVjdCBhcHBseTA7Ci0KLXRlbXBsYXRlPAotICAg
ICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEKLSAgICA+Ci1zdHJ1Y3QgYXBwbHkxOwotCi10ZW1w
bGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMgotICAgID4K
LXN0cnVjdCBhcHBseTI7Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMwotICAgID4KLXN0cnVjdCBhcHBseTM7Ci0KLXRl
bXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBl
bmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICA+Ci1zdHJ1Y3QgYXBwbHk0OwotCi10ZW1wbGF0ZTwK
LSAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMs
IHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBUNQotICAgID4KLXN0cnVjdCBhcHBseTU7Ci0K
LX19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9nY2MvYXBwbHlfd3JhcC5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2Nj
L2FwcGx5X3dyYXAuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGQ1MWExYTU4
NzZhNzFlZmQyODRiY2RiNDcyOTg5NWJiNzEwZDM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9nY2MvYXBwbHlfd3JhcC5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSw4NCArMCwwIEBACi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIw
MDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNl
bnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8w
LnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0
KQotLy8KLQotLy8gUHJlcHJvY2Vzc2VkIHZlcnNpb24gb2YgImJvb3N0L21wbC9hcHBseV93cmFw
LmhwcCIgaGVhZGVyCi0vLyAtLSBETyBOT1QgbW9kaWZ5IGJ5IGhhbmQhCi0KLW5hbWVzcGFjZSBi
b29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYKLQot
ICAgICwgdHlwZW5hbWUgaGFzX2FwcGx5XyA9IHR5cGVuYW1lIGF1eDo6aGFzX2FwcGx5PEY+Ojp0
eXBlCi0KLSAgICA+Ci1zdHJ1Y3QgYXBwbHlfd3JhcDAKLQotICAgIDogRjo6dGVtcGxhdGUgYXBw
bHk8ICA+Ci17Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgRiA+Ci1zdHJ1Y3QgYXBwbHlfd3Jh
cDA8IEYsdHJ1ZV8gPgotICAgIDogRjo6YXBwbHkKLXsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAg
dHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEKLQotICAgID4KLXN0cnVjdCBhcHBseV93cmFwMQotCi0g
ICAgOiBGOjp0ZW1wbGF0ZSBhcHBseTxUMT4KLXsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlw
ZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyCi0KLSAgICA+Ci1zdHJ1Y3QgYXBwbHlf
d3JhcDIKLQotICAgIDogRjo6dGVtcGxhdGUgYXBwbHk8IFQxLFQyID4KLXsKLX07Ci0KLXRlbXBs
YXRlPAotICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFt
ZSBUMwotCi0gICAgPgotc3RydWN0IGFwcGx5X3dyYXAzCi0KLSAgICA6IEY6OnRlbXBsYXRlIGFw
cGx5PCBUMSxUMixUMyA+Ci17Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIHR5
cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0KLSAgICA+
Ci1zdHJ1Y3QgYXBwbHlfd3JhcDQKLQotICAgIDogRjo6dGVtcGxhdGUgYXBwbHk8IFQxLFQyLFQz
LFQ0ID4KLXsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEs
IHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1
Ci0KLSAgICA+Ci1zdHJ1Y3QgYXBwbHlfd3JhcDUKLQotICAgIDogRjo6dGVtcGxhdGUgYXBwbHk8
IFQxLFQyLFQzLFQ0LFQ1ID4KLXsKLX07Ci0KLX19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9nY2Mv
YXJnLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9h
dXhfL3ByZXByb2Nlc3NlZC9nY2MvYXJnLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNmYyZjhhODA3MDlmZmZlMjVjNTc0MTUzMDIyM2RhZmM4N2FkM2VmYy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2FyZy5ocHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgUGV0ZXIgRGltb3Yg
MjAwMS0yMDAyCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAxLTIwMDQKLS8vCi0v
LyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0KLS8vIFBy
ZXByb2Nlc3NlZCB2ZXJzaW9uIG9mICJib29zdC9tcGwvYXJnLmhwcCIgaGVhZGVyCi0vLyAtLSBE
TyBOT1QgbW9kaWZ5IGJ5IGhhbmQhCi0KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQ
QUNFX09QRU4KLXRlbXBsYXRlPD4gc3RydWN0IGFyZzwgLTEgPgotewotICAgIEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChpbnQsIHZhbHVlICA9IC0xKTsKLSAgICBCT09TVF9NUExfQVVYX0FSR19UWVBF
REVGKG5hLCB0YWcpCi0gICAgQk9PU1RfTVBMX0FVWF9BUkdfVFlQRURFRihuYSwgdHlwZSkKLQot
ICAgIHRlbXBsYXRlPAotICAgICAgICAgIHR5cGVuYW1lIFUxID0gbmEsIHR5cGVuYW1lIFUyID0g
bmEsIHR5cGVuYW1lIFUzID0gbmEKLSAgICAgICAgLCB0eXBlbmFtZSBVNCA9IG5hLCB0eXBlbmFt
ZSBVNSA9IG5hCi0gICAgICAgID4KLSAgICBzdHJ1Y3QgYXBwbHkKLSAgICB7Ci0gICAgICAgIHR5
cGVkZWYgVTEgdHlwZTsKLSAgICAgICAgQk9PU1RfTVBMX0FVWF9BU1NFUlRfTk9UX05BKHR5cGUp
OwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBhcmc8MT4KLXsKLSAgICBCT09TVF9T
VEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1ZSAgPSAxKTsKLSAgICB0eXBlZGVmIGFyZzwyPiBuZXh0
OwotICAgIEJPT1NUX01QTF9BVVhfQVJHX1RZUEVERUYobmEsIHRhZykKLSAgICBCT09TVF9NUExf
QVVYX0FSR19UWVBFREVGKG5hLCB0eXBlKQotCi0gICAgdGVtcGxhdGU8Ci0gICAgICAgICAgdHlw
ZW5hbWUgVTEgPSBuYSwgdHlwZW5hbWUgVTIgPSBuYSwgdHlwZW5hbWUgVTMgPSBuYQotICAgICAg
ICAsIHR5cGVuYW1lIFU0ID0gbmEsIHR5cGVuYW1lIFU1ID0gbmEKLSAgICAgICAgPgotICAgIHN0
cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBVMSB0eXBlOwotICAgICAgICBCT09T
VF9NUExfQVVYX0FTU0VSVF9OT1RfTkEodHlwZSk7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IGFyZzwyPgotewotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVlICA9
IDIpOwotICAgIHR5cGVkZWYgYXJnPDM+IG5leHQ7Ci0gICAgQk9PU1RfTVBMX0FVWF9BUkdfVFlQ
RURFRihuYSwgdGFnKQotICAgIEJPT1NUX01QTF9BVVhfQVJHX1RZUEVERUYobmEsIHR5cGUpCi0K
LSAgICB0ZW1wbGF0ZTwKLSAgICAgICAgICB0eXBlbmFtZSBVMSA9IG5hLCB0eXBlbmFtZSBVMiA9
IG5hLCB0eXBlbmFtZSBVMyA9IG5hCi0gICAgICAgICwgdHlwZW5hbWUgVTQgPSBuYSwgdHlwZW5h
bWUgVTUgPSBuYQotICAgICAgICA+Ci0gICAgc3RydWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0
eXBlZGVmIFUyIHR5cGU7Ci0gICAgICAgIEJPT1NUX01QTF9BVVhfQVNTRVJUX05PVF9OQSh0eXBl
KTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgYXJnPDM+Ci17Ci0gICAgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKGludCwgdmFsdWUgID0gMyk7Ci0gICAgdHlwZWRlZiBhcmc8ND4gbmV4
dDsKLSAgICBCT09TVF9NUExfQVVYX0FSR19UWVBFREVGKG5hLCB0YWcpCi0gICAgQk9PU1RfTVBM
X0FVWF9BUkdfVFlQRURFRihuYSwgdHlwZSkKLQotICAgIHRlbXBsYXRlPAotICAgICAgICAgIHR5
cGVuYW1lIFUxID0gbmEsIHR5cGVuYW1lIFUyID0gbmEsIHR5cGVuYW1lIFUzID0gbmEKLSAgICAg
ICAgLCB0eXBlbmFtZSBVNCA9IG5hLCB0eXBlbmFtZSBVNSA9IG5hCi0gICAgICAgID4KLSAgICBz
dHJ1Y3QgYXBwbHkKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgVTMgdHlwZTsKLSAgICAgICAgQk9P
U1RfTVBMX0FVWF9BU1NFUlRfTk9UX05BKHR5cGUpOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBhcmc8ND4KLXsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1ZSAg
PSA0KTsKLSAgICB0eXBlZGVmIGFyZzw1PiBuZXh0OwotICAgIEJPT1NUX01QTF9BVVhfQVJHX1RZ
UEVERUYobmEsIHRhZykKLSAgICBCT09TVF9NUExfQVVYX0FSR19UWVBFREVGKG5hLCB0eXBlKQot
Ci0gICAgdGVtcGxhdGU8Ci0gICAgICAgICAgdHlwZW5hbWUgVTEgPSBuYSwgdHlwZW5hbWUgVTIg
PSBuYSwgdHlwZW5hbWUgVTMgPSBuYQotICAgICAgICAsIHR5cGVuYW1lIFU0ID0gbmEsIHR5cGVu
YW1lIFU1ID0gbmEKLSAgICAgICAgPgotICAgIHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAg
dHlwZWRlZiBVNCB0eXBlOwotICAgICAgICBCT09TVF9NUExfQVVYX0FTU0VSVF9OT1RfTkEodHlw
ZSk7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IGFyZzw1PgotewotICAgIEJPT1NU
X1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVlICA9IDUpOwotICAgIHR5cGVkZWYgYXJnPDY+IG5l
eHQ7Ci0gICAgQk9PU1RfTVBMX0FVWF9BUkdfVFlQRURFRihuYSwgdGFnKQotICAgIEJPT1NUX01Q
TF9BVVhfQVJHX1RZUEVERUYobmEsIHR5cGUpCi0KLSAgICB0ZW1wbGF0ZTwKLSAgICAgICAgICB0
eXBlbmFtZSBVMSA9IG5hLCB0eXBlbmFtZSBVMiA9IG5hLCB0eXBlbmFtZSBVMyA9IG5hCi0gICAg
ICAgICwgdHlwZW5hbWUgVTQgPSBuYSwgdHlwZW5hbWUgVTUgPSBuYQotICAgICAgICA+Ci0gICAg
c3RydWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIFU1IHR5cGU7Ci0gICAgICAgIEJP
T1NUX01QTF9BVVhfQVNTRVJUX05PVF9OQSh0eXBlKTsKLSAgICB9OwotfTsKLQotQk9PU1RfTVBM
X0FVWF9OT05UWVBFX0FSSVRZX1NQRUMoMSxpbnQsIGFyZykKLQotQk9PU1RfTVBMX0FVWF9BRExf
QkFSUklFUl9OQU1FU1BBQ0VfQ0xPU0UKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9nY2MvYmluZC5ocHAg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVw
cm9jZXNzZWQvZ2NjL2JpbmQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTk1
MTNhNjQ5YTY0MThiYWQyYzY4OTllMDFhM2ZmOWYyMzEwYzdmLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9nY2MvYmluZC5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSw1NjEgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgUGV0ZXIgRGltb3YgMjAwMQot
Ly8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMS0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChT
ZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotCi0vLyBQcmVwcm9jZXNzZWQg
dmVyc2lvbiBvZiAiYm9vc3QvbXBsL2JpbmQuaHBwIiBoZWFkZXIKLS8vIC0tIERPIE5PVCBtb2Rp
ZnkgYnkgaGFuZCEKLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLW5hbWVz
cGFjZSBhdXggewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUxLCB0
eXBlbmFtZSBVMiwgdHlwZW5hbWUgVTMsIHR5cGVuYW1lIFU0Ci0gICAgLCB0eXBlbmFtZSBVNQot
ICAgID4KLXN0cnVjdCByZXNvbHZlX2JpbmRfYXJnCi17Ci0gICAgdHlwZWRlZiBUIHR5cGU7Ci19
OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQKLSAgICAsIHR5cGVuYW1lIEFyZwotICAg
ID4KLXN0cnVjdCByZXBsYWNlX3VubmFtZWRfYXJnCi17Ci0gICAgdHlwZWRlZiBBcmcgbmV4dDsK
LSAgICB0eXBlZGVmIFQgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgQXJn
Ci0gICAgPgotc3RydWN0IHJlcGxhY2VfdW5uYW1lZF9hcmc8IGFyZzwgLTEgPiwgQXJnID4KLXsK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIEFyZzo6bmV4dCBuZXh0OwotICAgIHR5cGVkZWYgQXJnIHR5
cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIGludCBOLCB0eXBlbmFtZSBVMSwgdHlwZW5hbWUg
VTIsIHR5cGVuYW1lIFUzLCB0eXBlbmFtZSBVNCwgdHlwZW5hbWUgVTUKLSAgICA+Ci1zdHJ1Y3Qg
cmVzb2x2ZV9iaW5kX2FyZzwgYXJnPE4+LCBVMSwgVTIsIFUzLCBVNCwgVTUgPgotewotICAgIHR5
cGVkZWYgdHlwZW5hbWUgYXBwbHlfd3JhcDU8bXBsOjphcmc8Tj4sIFUxLCBVMiwgVTMsIFU0LCBV
NT46OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiwgdHlwZW5h
bWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVu
YW1lIFQ1LCB0eXBlbmFtZSBVMSwgdHlwZW5hbWUgVTIsIHR5cGVuYW1lIFUzLCB0eXBlbmFtZSBV
NAotICAgICwgdHlwZW5hbWUgVTUKLSAgICA+Ci1zdHJ1Y3QgcmVzb2x2ZV9iaW5kX2FyZzwgYmlu
ZDwgRixUMSxUMixUMyxUNCxUNSA+LCBVMSwgVTIsIFUzLCBVNCwgVTUgPgotewotICAgIHR5cGVk
ZWYgYmluZDwgRixUMSxUMixUMyxUNCxUNSA+IGZfOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBw
bHlfd3JhcDU8IGZfLFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdHlwZTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIGF1eAotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYKLSAgICA+Ci1zdHJ1Y3Qg
YmluZDAKLXsKLSAgICB0ZW1wbGF0ZTwKLSAgICAgICAgICB0eXBlbmFtZSBVMSA9IG5hLCB0eXBl
bmFtZSBVMiA9IG5hLCB0eXBlbmFtZSBVMyA9IG5hCi0gICAgICAgICwgdHlwZW5hbWUgVTQgPSBu
YSwgdHlwZW5hbWUgVTUgPSBuYQotICAgICAgICA+Ci0gICAgc3RydWN0IGFwcGx5Ci0gICAgewot
ICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwg
RiwgbXBsOjphcmc8MT4gPiByMDsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMDo6dHlwZSBh
MDsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMDo6bmV4dCBuMTsKLSAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGEwLFUxLFUyLFUzLFU0LFU1ID46OnR5
cGUgZl87Ci0gICAgICAgIC8vLwotICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgYXBwbHlfd3JhcDA8Ci0gICAgICAgICAgICAgIGZfCi0gICAgICAgICAgICA+Ojp0eXBlIHR5
cGU7Ci0KLSAgICB9OwotfTsKLQotbmFtZXNwYWNlIGF1eCB7Ci0KLXRlbXBsYXRlPAotICAgICAg
dHlwZW5hbWUgRiwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyLCB0eXBlbmFtZSBVMywgdHlwZW5h
bWUgVTQKLSAgICAsIHR5cGVuYW1lIFU1Ci0gICAgPgotc3RydWN0IHJlc29sdmVfYmluZF9hcmc8
Ci0gICAgICBiaW5kMDxGPiwgVTEsIFUyLCBVMywgVTQsIFU1Ci0gICAgPgotewotICAgIHR5cGVk
ZWYgYmluZDA8Rj4gZl87Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseV93cmFwNTwgZl8sVTEs
VTIsVTMsVTQsVTUgPjo6dHlwZSB0eXBlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgYXV4Ci0KLUJP
T1NUX01QTF9BVVhfQVJJVFlfU1BFQygxLCBiaW5kMCkKLUJPT1NUX01QTF9BVVhfVEVNUExBVEVf
QVJJVFlfU1BFQygxLCBiaW5kMCkKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGCi0gICAg
Pgotc3RydWN0IGJpbmQ8IEYsbmEsbmEsbmEsbmEsbmEgPgotICAgIDogYmluZDA8Rj4KLXsKLX07
Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEKLSAgICA+Ci1zdHJ1
Y3QgYmluZDEKLXsKLSAgICB0ZW1wbGF0ZTwKLSAgICAgICAgICB0eXBlbmFtZSBVMSA9IG5hLCB0
eXBlbmFtZSBVMiA9IG5hLCB0eXBlbmFtZSBVMyA9IG5hCi0gICAgICAgICwgdHlwZW5hbWUgVTQg
PSBuYSwgdHlwZW5hbWUgVTUgPSBuYQotICAgICAgICA+Ci0gICAgc3RydWN0IGFwcGx5Ci0gICAg
ewotICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2Fy
ZzwgRiwgbXBsOjphcmc8MT4gPiByMDsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMDo6dHlw
ZSBhMDsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMDo6bmV4dCBuMTsKLSAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGEwLFUxLFUyLFUzLFU0LFU1ID46
OnR5cGUgZl87Ci0gICAgICAgIC8vLwotICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5h
bWVkX2FyZzwgVDEsbjEgPiByMTsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMTo6dHlwZSBh
MTsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMTo6bmV4dCBuMjsKLSAgICAgICAgdHlwZWRl
ZiBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGExLFUxLFUyLFUzLFU0LFU1ID4gdDE7Ci0gICAgICAg
IC8vLwotICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHlfd3JhcDE8
Ci0gICAgICAgICAgICAgIGZfCi0gICAgICAgICAgICAsIHR5cGVuYW1lIHQxOjp0eXBlCi0gICAg
ICAgICAgICA+Ojp0eXBlIHR5cGU7Ci0KLSAgICB9OwotfTsKLQotbmFtZXNwYWNlIGF1eCB7Ci0K
LXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFUxLCB0
eXBlbmFtZSBVMiwgdHlwZW5hbWUgVTMKLSAgICAsIHR5cGVuYW1lIFU0LCB0eXBlbmFtZSBVNQot
ICAgID4KLXN0cnVjdCByZXNvbHZlX2JpbmRfYXJnPAotICAgICAgYmluZDE8IEYsVDEgPiwgVTEs
IFUyLCBVMywgVTQsIFU1Ci0gICAgPgotewotICAgIHR5cGVkZWYgYmluZDE8IEYsVDEgPiBmXzsK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5X3dyYXA1PCBmXyxVMSxVMixVMyxVNCxVNSA+Ojp0
eXBlIHR5cGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBhdXgKLQotQk9PU1RfTVBMX0FVWF9BUklU
WV9TUEVDKDIsIGJpbmQxKQotQk9PU1RfTVBMX0FVWF9URU1QTEFURV9BUklUWV9TUEVDKDIsIGJp
bmQxKQotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxCi0gICAgPgot
c3RydWN0IGJpbmQ8IEYsVDEsbmEsbmEsbmEsbmEgPgotICAgIDogYmluZDE8IEYsVDEgPgotewot
fTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUg
VDIKLSAgICA+Ci1zdHJ1Y3QgYmluZDIKLXsKLSAgICB0ZW1wbGF0ZTwKLSAgICAgICAgICB0eXBl
bmFtZSBVMSA9IG5hLCB0eXBlbmFtZSBVMiA9IG5hLCB0eXBlbmFtZSBVMyA9IG5hCi0gICAgICAg
ICwgdHlwZW5hbWUgVTQgPSBuYSwgdHlwZW5hbWUgVTUgPSBuYQotICAgICAgICA+Ci0gICAgc3Ry
dWN0IGFwcGx5Ci0gICAgewotICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIGF1eDo6cmVw
bGFjZV91bm5hbWVkX2FyZzwgRiwgbXBsOjphcmc8MT4gPiByMDsKLSAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSByMDo6dHlwZSBhMDsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMDo6bmV4dCBu
MTsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGEwLFUx
LFUyLFUzLFU0LFU1ID46OnR5cGUgZl87Ci0gICAgICAgIC8vLwotICAgICAgICB0eXBlZGVmIGF1
eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgVDEsbjEgPiByMTsKLSAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSByMTo6dHlwZSBhMTsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMTo6bmV4dCBuMjsK
LSAgICAgICAgdHlwZWRlZiBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGExLFUxLFUyLFUzLFU0LFU1
ID4gdDE7Ci0gICAgICAgIC8vLwotICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVk
X2FyZzwgVDIsbjIgPiByMjsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMjo6dHlwZSBhMjsK
LSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMjo6bmV4dCBuMzsKLSAgICAgICAgdHlwZWRlZiBh
dXg6OnJlc29sdmVfYmluZF9hcmc8IGEyLFUxLFUyLFUzLFU0LFU1ID4gdDI7Ci0gICAgICAgIC8v
LwotICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHlfd3JhcDI8Ci0g
ICAgICAgICAgICAgIGZfCi0gICAgICAgICAgICAsIHR5cGVuYW1lIHQxOjp0eXBlLCB0eXBlbmFt
ZSB0Mjo6dHlwZQotICAgICAgICAgICAgPjo6dHlwZSB0eXBlOwotCi0gICAgfTsKLX07Ci0KLW5h
bWVzcGFjZSBhdXggewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQx
LCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyCi0gICAgLCB0eXBlbmFtZSBV
MywgdHlwZW5hbWUgVTQsIHR5cGVuYW1lIFU1Ci0gICAgPgotc3RydWN0IHJlc29sdmVfYmluZF9h
cmc8Ci0gICAgICBiaW5kMjwgRixUMSxUMiA+LCBVMSwgVTIsIFUzLCBVNCwgVTUKLSAgICA+Ci17
Ci0gICAgdHlwZWRlZiBiaW5kMjwgRixUMSxUMiA+IGZfOwotICAgIHR5cGVkZWYgdHlwZW5hbWUg
YXBwbHlfd3JhcDU8IGZfLFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdHlwZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIGF1eAotCi1CT09TVF9NUExfQVVYX0FSSVRZX1NQRUMoMywgYmluZDIpCi1CT09T
VF9NUExfQVVYX1RFTVBMQVRFX0FSSVRZX1NQRUMoMywgYmluZDIpCi0KLXRlbXBsYXRlPAotICAg
ICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyCi0gICAgPgotc3RydWN0IGJp
bmQ8IEYsVDEsVDIsbmEsbmEsbmEgPgotICAgIDogYmluZDI8IEYsVDEsVDIgPgotewotfTsKLQot
dGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5
cGVuYW1lIFQzCi0gICAgPgotc3RydWN0IGJpbmQzCi17Ci0gICAgdGVtcGxhdGU8Ci0gICAgICAg
ICAgdHlwZW5hbWUgVTEgPSBuYSwgdHlwZW5hbWUgVTIgPSBuYSwgdHlwZW5hbWUgVTMgPSBuYQot
ICAgICAgICAsIHR5cGVuYW1lIFU0ID0gbmEsIHR5cGVuYW1lIFU1ID0gbmEKLSAgICAgICAgPgot
ICAgIHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBh
dXg6OnJlcGxhY2VfdW5uYW1lZF9hcmc8IEYsIG1wbDo6YXJnPDE+ID4gcjA7Ci0gICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgcjA6OnR5cGUgYTA7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjA6
Om5leHQgbjE7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJn
PCBhMCxVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIGZfOwotICAgICAgICAvLy8KLSAgICAgICAgdHlw
ZWRlZiBhdXg6OnJlcGxhY2VfdW5uYW1lZF9hcmc8IFQxLG4xID4gcjE7Ci0gICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgcjE6OnR5cGUgYTE7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjE6Om5l
eHQgbjI7Ci0gICAgICAgIHR5cGVkZWYgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBhMSxVMSxVMixV
MyxVNCxVNSA+IHQxOwotICAgICAgICAvLy8KLSAgICAgICAgdHlwZWRlZiBhdXg6OnJlcGxhY2Vf
dW5uYW1lZF9hcmc8IFQyLG4yID4gcjI7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjI6OnR5
cGUgYTI7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjI6Om5leHQgbjM7Ci0gICAgICAgIHR5
cGVkZWYgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBhMixVMSxVMixVMyxVNCxVNSA+IHQyOwotICAg
ICAgICAvLy8KLSAgICAgICAgdHlwZWRlZiBhdXg6OnJlcGxhY2VfdW5uYW1lZF9hcmc8IFQzLG4z
ID4gcjM7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjM6OnR5cGUgYTM7Ci0gICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgcjM6Om5leHQgbjQ7Ci0gICAgICAgIHR5cGVkZWYgYXV4OjpyZXNvbHZl
X2JpbmRfYXJnPCBhMyxVMSxVMixVMyxVNCxVNSA+IHQzOwotICAgICAgICAvLy8KLSAgICAgcHVi
bGljOgotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5X3dyYXAzPAotICAgICAgICAgICAg
ICBmXwotICAgICAgICAgICAgLCB0eXBlbmFtZSB0MTo6dHlwZSwgdHlwZW5hbWUgdDI6OnR5cGUs
IHR5cGVuYW1lIHQzOjp0eXBlCi0gICAgICAgICAgICA+Ojp0eXBlIHR5cGU7Ci0KLSAgICB9Owot
fTsKLQotbmFtZXNwYWNlIGF1eCB7Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiwgdHlw
ZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVTEKLSAgICAsIHR5
cGVuYW1lIFUyLCB0eXBlbmFtZSBVMywgdHlwZW5hbWUgVTQsIHR5cGVuYW1lIFU1Ci0gICAgPgot
c3RydWN0IHJlc29sdmVfYmluZF9hcmc8Ci0gICAgICBiaW5kMzwgRixUMSxUMixUMyA+LCBVMSwg
VTIsIFUzLCBVNCwgVTUKLSAgICA+Ci17Ci0gICAgdHlwZWRlZiBiaW5kMzwgRixUMSxUMixUMyA+
IGZfOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHlfd3JhcDU8IGZfLFUxLFUyLFUzLFU0LFU1
ID46OnR5cGUgdHlwZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGF1eAotCi1CT09TVF9NUExfQVVY
X0FSSVRZX1NQRUMoNCwgYmluZDMpCi1CT09TVF9NUExfQVVYX1RFTVBMQVRFX0FSSVRZX1NQRUMo
NCwgYmluZDMpCi0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5
cGVuYW1lIFQyLCB0eXBlbmFtZSBUMwotICAgID4KLXN0cnVjdCBiaW5kPCBGLFQxLFQyLFQzLG5h
LG5hID4KLSAgICA6IGJpbmQzPCBGLFQxLFQyLFQzID4KLXsKLX07Ci0KLXRlbXBsYXRlPAotICAg
ICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlw
ZW5hbWUgVDQKLSAgICA+Ci1zdHJ1Y3QgYmluZDQKLXsKLSAgICB0ZW1wbGF0ZTwKLSAgICAgICAg
ICB0eXBlbmFtZSBVMSA9IG5hLCB0eXBlbmFtZSBVMiA9IG5hLCB0eXBlbmFtZSBVMyA9IG5hCi0g
ICAgICAgICwgdHlwZW5hbWUgVTQgPSBuYSwgdHlwZW5hbWUgVTUgPSBuYQotICAgICAgICA+Ci0g
ICAgc3RydWN0IGFwcGx5Ci0gICAgewotICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIGF1
eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgRiwgbXBsOjphcmc8MT4gPiByMDsKLSAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSByMDo6dHlwZSBhMDsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMDo6
bmV4dCBuMTsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OnJlc29sdmVfYmluZF9hcmc8
IGEwLFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgZl87Ci0gICAgICAgIC8vLwotICAgICAgICB0eXBl
ZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgVDEsbjEgPiByMTsKLSAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSByMTo6dHlwZSBhMTsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMTo6bmV4
dCBuMjsKLSAgICAgICAgdHlwZWRlZiBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGExLFUxLFUyLFUz
LFU0LFU1ID4gdDE7Ci0gICAgICAgIC8vLwotICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91
bm5hbWVkX2FyZzwgVDIsbjIgPiByMjsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMjo6dHlw
ZSBhMjsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMjo6bmV4dCBuMzsKLSAgICAgICAgdHlw
ZWRlZiBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGEyLFUxLFUyLFUzLFU0LFU1ID4gdDI7Ci0gICAg
ICAgIC8vLwotICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgVDMsbjMg
PiByMzsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMzo6dHlwZSBhMzsKLSAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSByMzo6bmV4dCBuNDsKLSAgICAgICAgdHlwZWRlZiBhdXg6OnJlc29sdmVf
YmluZF9hcmc8IGEzLFUxLFUyLFUzLFU0LFU1ID4gdDM7Ci0gICAgICAgIC8vLwotICAgICAgICB0
eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgVDQsbjQgPiByNDsKLSAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSByNDo6dHlwZSBhNDsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByNDo6
bmV4dCBuNTsKLSAgICAgICAgdHlwZWRlZiBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGE0LFUxLFUy
LFUzLFU0LFU1ID4gdDQ7Ci0gICAgICAgIC8vLwotICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgYXBwbHlfd3JhcDQ8Ci0gICAgICAgICAgICAgIGZfCi0gICAgICAgICAgICAs
IHR5cGVuYW1lIHQxOjp0eXBlLCB0eXBlbmFtZSB0Mjo6dHlwZSwgdHlwZW5hbWUgdDM6OnR5cGUK
LSAgICAgICAgICAgICwgdHlwZW5hbWUgdDQ6OnR5cGUKLSAgICAgICAgICAgID46OnR5cGUgdHlw
ZTsKLQotICAgIH07Ci19OwotCi1uYW1lc3BhY2UgYXV4IHsKLQotdGVtcGxhdGU8Ci0gICAgICB0
eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFt
ZSBUNAotICAgICwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyLCB0eXBlbmFtZSBVMywgdHlwZW5h
bWUgVTQsIHR5cGVuYW1lIFU1Ci0gICAgPgotc3RydWN0IHJlc29sdmVfYmluZF9hcmc8Ci0gICAg
ICBiaW5kNDwgRixUMSxUMixUMyxUNCA+LCBVMSwgVTIsIFUzLCBVNCwgVTUKLSAgICA+Ci17Ci0g
ICAgdHlwZWRlZiBiaW5kNDwgRixUMSxUMixUMyxUNCA+IGZfOwotICAgIHR5cGVkZWYgdHlwZW5h
bWUgYXBwbHlfd3JhcDU8IGZfLFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdHlwZTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIGF1eAotCi1CT09TVF9NUExfQVVYX0FSSVRZX1NQRUMoNSwgYmluZDQpCi1C
T09TVF9NUExfQVVYX1RFTVBMQVRFX0FSSVRZX1NQRUMoNSwgYmluZDQpCi0KLXRlbXBsYXRlPAot
ICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywg
dHlwZW5hbWUgVDQKLSAgICA+Ci1zdHJ1Y3QgYmluZDwgRixUMSxUMixUMyxUNCxuYSA+Ci0gICAg
OiBiaW5kNDwgRixUMSxUMixUMyxUNCA+Ci17Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVu
YW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0
Ci0gICAgLCB0eXBlbmFtZSBUNQotICAgID4KLXN0cnVjdCBiaW5kNQotewotICAgIHRlbXBsYXRl
PAotICAgICAgICAgIHR5cGVuYW1lIFUxID0gbmEsIHR5cGVuYW1lIFUyID0gbmEsIHR5cGVuYW1l
IFUzID0gbmEKLSAgICAgICAgLCB0eXBlbmFtZSBVNCA9IG5hLCB0eXBlbmFtZSBVNSA9IG5hCi0g
ICAgICAgID4KLSAgICBzdHJ1Y3QgYXBwbHkKLSAgICB7Ci0gICAgIHByaXZhdGU6Ci0gICAgICAg
IHR5cGVkZWYgYXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBGLCBtcGw6OmFyZzwxPiA+IHIwOwot
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIwOjp0eXBlIGEwOwotICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIHIwOjpuZXh0IG4xOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6cmVzb2x2
ZV9iaW5kX2FyZzwgYTAsVTEsVTIsVTMsVTQsVTUgPjo6dHlwZSBmXzsKLSAgICAgICAgLy8vCi0g
ICAgICAgIHR5cGVkZWYgYXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBUMSxuMSA+IHIxOwotICAg
ICAgICB0eXBlZGVmIHR5cGVuYW1lIHIxOjp0eXBlIGExOwotICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIHIxOjpuZXh0IG4yOwotICAgICAgICB0eXBlZGVmIGF1eDo6cmVzb2x2ZV9iaW5kX2FyZzwg
YTEsVTEsVTIsVTMsVTQsVTUgPiB0MTsKLSAgICAgICAgLy8vCi0gICAgICAgIHR5cGVkZWYgYXV4
OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBUMixuMiA+IHIyOwotICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIHIyOjp0eXBlIGEyOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIyOjpuZXh0IG4zOwot
ICAgICAgICB0eXBlZGVmIGF1eDo6cmVzb2x2ZV9iaW5kX2FyZzwgYTIsVTEsVTIsVTMsVTQsVTUg
PiB0MjsKLSAgICAgICAgLy8vCi0gICAgICAgIHR5cGVkZWYgYXV4OjpyZXBsYWNlX3VubmFtZWRf
YXJnPCBUMyxuMyA+IHIzOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIzOjp0eXBlIGEzOwot
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIzOjpuZXh0IG40OwotICAgICAgICB0eXBlZGVmIGF1
eDo6cmVzb2x2ZV9iaW5kX2FyZzwgYTMsVTEsVTIsVTMsVTQsVTUgPiB0MzsKLSAgICAgICAgLy8v
Ci0gICAgICAgIHR5cGVkZWYgYXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBUNCxuNCA+IHI0Owot
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHI0Ojp0eXBlIGE0OwotICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIHI0OjpuZXh0IG41OwotICAgICAgICB0eXBlZGVmIGF1eDo6cmVzb2x2ZV9iaW5kX2Fy
ZzwgYTQsVTEsVTIsVTMsVTQsVTUgPiB0NDsKLSAgICAgICAgLy8vCi0gICAgICAgIHR5cGVkZWYg
YXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBUNSxuNSA+IHI1OwotICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIHI1Ojp0eXBlIGE1OwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHI1OjpuZXh0IG42
OwotICAgICAgICB0eXBlZGVmIGF1eDo6cmVzb2x2ZV9iaW5kX2FyZzwgYTUsVTEsVTIsVTMsVTQs
VTUgPiB0NTsKLSAgICAgICAgLy8vCi0gICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBhcHBseV93cmFwNTwKLSAgICAgICAgICAgICAgZl8KLSAgICAgICAgICAgICwgdHlwZW5h
bWUgdDE6OnR5cGUsIHR5cGVuYW1lIHQyOjp0eXBlLCB0eXBlbmFtZSB0Mzo6dHlwZQotICAgICAg
ICAgICAgLCB0eXBlbmFtZSB0NDo6dHlwZSwgdHlwZW5hbWUgdDU6OnR5cGUKLSAgICAgICAgICAg
ID46OnR5cGUgdHlwZTsKLQotICAgIH07Ci19OwotCi1uYW1lc3BhY2UgYXV4IHsKLQotdGVtcGxh
dGU8Ci0gICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1l
IFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFUxLCB0eXBlbmFt
ZSBVMiwgdHlwZW5hbWUgVTMsIHR5cGVuYW1lIFU0Ci0gICAgLCB0eXBlbmFtZSBVNQotICAgID4K
LXN0cnVjdCByZXNvbHZlX2JpbmRfYXJnPAotICAgICAgYmluZDU8IEYsVDEsVDIsVDMsVDQsVDUg
PiwgVTEsIFUyLCBVMywgVTQsIFU1Ci0gICAgPgotewotICAgIHR5cGVkZWYgYmluZDU8IEYsVDEs
VDIsVDMsVDQsVDUgPiBmXzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5X3dyYXA1PCBmXyxV
MSxVMixVMyxVNCxVNSA+Ojp0eXBlIHR5cGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBhdXgKLQot
Qk9PU1RfTVBMX0FVWF9BUklUWV9TUEVDKDYsIGJpbmQ1KQotQk9PU1RfTVBMX0FVWF9URU1QTEFU
RV9BUklUWV9TUEVDKDYsIGJpbmQ1KQotCi0vLy8gcHJpbWFyeSB0ZW1wbGF0ZSAobm90IGEgc3Bl
Y2lhbGl6YXRpb24hKQotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQx
LCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBU
NQotICAgID4KLXN0cnVjdCBiaW5kCi0gICAgOiBiaW5kNTwgRixUMSxUMixUMyxUNCxUNSA+Ci17
Ci19OwotCi0vLy8gaWZfL2V2YWxfaWYgc3BlY2lhbGl6YXRpb25zCi10ZW1wbGF0ZTwgdGVtcGxh
dGU8IHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMgPiBjbGFzcyBGLCB0eXBl
bmFtZSBUYWcgPgotc3RydWN0IHF1b3RlMzsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFQxLCB0eXBl
bmFtZSBUMiwgdHlwZW5hbWUgVDMgPiBzdHJ1Y3QgaWZfOwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5
cGVuYW1lIFRhZywgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMwotICAgID4K
LXN0cnVjdCBiaW5kMzwKLSAgICAgIHF1b3RlMzwgaWZfLFRhZyA+Ci0gICAgLCBUMSwgVDIsIFQz
Ci0gICAgPgotewotICAgIHRlbXBsYXRlPAotICAgICAgICAgIHR5cGVuYW1lIFUxID0gbmEsIHR5
cGVuYW1lIFUyID0gbmEsIHR5cGVuYW1lIFUzID0gbmEKLSAgICAgICAgLCB0eXBlbmFtZSBVNCA9
IG5hLCB0eXBlbmFtZSBVNSA9IG5hCi0gICAgICAgID4KLSAgICBzdHJ1Y3QgYXBwbHkKLSAgICB7
Ci0gICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgbXBsOjphcmc8MT4gbjE7Ci0gICAgICAg
IHR5cGVkZWYgYXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBUMSxuMSA+IHIxOwotICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIHIxOjp0eXBlIGExOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIx
OjpuZXh0IG4yOwotICAgICAgICB0eXBlZGVmIGF1eDo6cmVzb2x2ZV9iaW5kX2FyZzwgYTEsVTEs
VTIsVTMsVTQsVTUgPiB0MTsKLSAgICAgICAgLy8vCi0gICAgICAgIHR5cGVkZWYgYXV4OjpyZXBs
YWNlX3VubmFtZWRfYXJnPCBUMixuMiA+IHIyOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIy
Ojp0eXBlIGEyOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIyOjpuZXh0IG4zOwotICAgICAg
ICB0eXBlZGVmIGF1eDo6cmVzb2x2ZV9iaW5kX2FyZzwgYTIsVTEsVTIsVTMsVTQsVTUgPiB0MjsK
LSAgICAgICAgLy8vCi0gICAgICAgIHR5cGVkZWYgYXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBU
MyxuMyA+IHIzOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIzOjp0eXBlIGEzOwotICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIHIzOjpuZXh0IG40OwotICAgICAgICB0eXBlZGVmIGF1eDo6cmVz
b2x2ZV9iaW5kX2FyZzwgYTMsVTEsVTIsVTMsVTQsVTUgPiB0MzsKLSAgICAgICAgLy8vCi0gICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaWZfPAotICAgICAgICAgICAgICB0eXBlbmFtZSB0MTo6dHlw
ZQotICAgICAgICAgICAgLCB0MiwgdDMKLSAgICAgICAgICAgID46OnR5cGUgZl87Ci0KLSAgICAg
cHVibGljOgotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGZfOjp0eXBlIHR5cGU7Ci0gICAgfTsK
LX07Ci0KLXRlbXBsYXRlPAotICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBU
MiwgdHlwZW5hbWUgVDMgPiBjbGFzcyBGLCB0eXBlbmFtZSBUYWcKLSAgICA+Ci1zdHJ1Y3QgcXVv
dGUzOwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMyA+
IHN0cnVjdCBldmFsX2lmOwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFRhZywgdHlwZW5h
bWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMwotICAgID4KLXN0cnVjdCBiaW5kMzwKLSAg
ICAgIHF1b3RlMzwgZXZhbF9pZixUYWcgPgotICAgICwgVDEsIFQyLCBUMwotICAgID4KLXsKLSAg
ICB0ZW1wbGF0ZTwKLSAgICAgICAgICB0eXBlbmFtZSBVMSA9IG5hLCB0eXBlbmFtZSBVMiA9IG5h
LCB0eXBlbmFtZSBVMyA9IG5hCi0gICAgICAgICwgdHlwZW5hbWUgVTQgPSBuYSwgdHlwZW5hbWUg
VTUgPSBuYQotICAgICAgICA+Ci0gICAgc3RydWN0IGFwcGx5Ci0gICAgewotICAgICBwcml2YXRl
OgotICAgICAgICB0eXBlZGVmIG1wbDo6YXJnPDE+IG4xOwotICAgICAgICB0eXBlZGVmIGF1eDo6
cmVwbGFjZV91bm5hbWVkX2FyZzwgVDEsbjEgPiByMTsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSByMTo6dHlwZSBhMTsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMTo6bmV4dCBuMjsKLSAg
ICAgICAgdHlwZWRlZiBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGExLFUxLFUyLFUzLFU0LFU1ID4g
dDE7Ci0gICAgICAgIC8vLwotICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2Fy
ZzwgVDIsbjIgPiByMjsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMjo6dHlwZSBhMjsKLSAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMjo6bmV4dCBuMzsKLSAgICAgICAgdHlwZWRlZiBhdXg6
OnJlc29sdmVfYmluZF9hcmc8IGEyLFUxLFUyLFUzLFU0LFU1ID4gdDI7Ci0gICAgICAgIC8vLwot
ICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgVDMsbjMgPiByMzsKLSAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMzo6dHlwZSBhMzsKLSAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSByMzo6bmV4dCBuNDsKLSAgICAgICAgdHlwZWRlZiBhdXg6OnJlc29sdmVfYmluZF9hcmc8
IGEzLFUxLFUyLFUzLFU0LFU1ID4gdDM7Ci0gICAgICAgIC8vLwotICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIGV2YWxfaWY8Ci0gICAgICAgICAgICAgIHR5cGVuYW1lIHQxOjp0eXBlCi0gICAgICAg
ICAgICAsIHQyLCB0MwotICAgICAgICAgICAgPjo6dHlwZSBmXzsKLQotICAgICBwdWJsaWM6Ci0g
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZl86OnR5cGUgdHlwZTsKLSAgICB9OwotfTsKLQotfX0K
LQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9iaW5kX2Z3ZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2JpbmRf
ZndkLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRhNTA2MGZmOGI3YTY4NzVm
OTZlZWZiODFlNDgwYWVlMDU0Njg3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
cGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2JpbmRfZndkLmhwcAorKysgL2Rldi9udWxsCkBAIC0x
LDUyICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0v
LwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNp
b24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotCi0v
LyBQcmVwcm9jZXNzZWQgdmVyc2lvbiBvZiAiYm9vc3QvbXBsL2JpbmRfZndkLmhwcCIgaGVhZGVy
Ci0vLyAtLSBETyBOT1QgbW9kaWZ5IGJ5IGhhbmQhCi0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVz
cGFjZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxID0g
bmEsIHR5cGVuYW1lIFQyID0gbmEsIHR5cGVuYW1lIFQzID0gbmEKLSAgICAsIHR5cGVuYW1lIFQ0
ID0gbmEsIHR5cGVuYW1lIFQ1ID0gbmEKLSAgICA+Ci1zdHJ1Y3QgYmluZDsKLQotdGVtcGxhdGU8
Ci0gICAgICB0eXBlbmFtZSBGCi0gICAgPgotc3RydWN0IGJpbmQwOwotCi10ZW1wbGF0ZTwKLSAg
ICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxCi0gICAgPgotc3RydWN0IGJpbmQxOwotCi10ZW1w
bGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMgotICAgID4K
LXN0cnVjdCBiaW5kMjsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBU
MSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzCi0gICAgPgotc3RydWN0IGJpbmQzOwotCi10ZW1w
bGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h
bWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgPgotc3RydWN0IGJpbmQ0OwotCi10ZW1wbGF0ZTwKLSAg
ICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5
cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBUNQotICAgID4KLXN0cnVjdCBiaW5kNTsKLQotfX0K
LQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9iaXRhbmQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9iaXRhbmQu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmJmNTRlYTI2ZDQyYjQ4NWZiODNl
Y2M4OGQzZjY1YzZlYjdlMDQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9h
dXhfL3ByZXByb2Nlc3NlZC9nY2MvYml0YW5kLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NyAr
MCwwIEBACi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8gQ29w
eXJpZ2h0IEphYXAgU3V0ZXIgMjAwMwotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29z
dCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBm
aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcv
TElDRU5TRV8xXzAudHh0KQotLy8KLQotLy8gUHJlcHJvY2Vzc2VkIHZlcnNpb24gb2YgImJvb3N0
L21wbC9iaXRhbmQuaHBwIiBoZWFkZXIKLS8vIC0tIERPIE5PVCBtb2RpZnkgYnkgaGFuZCEKLQot
bmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPAotICAgICAgdHlw
ZW5hbWUgVGFnMQotICAgICwgdHlwZW5hbWUgVGFnMgotICAgID4KLXN0cnVjdCBiaXRhbmRfaW1w
bAotICAgIDogaWZfYzwKLSAgICAgICAgICAoIEJPT1NUX01QTF9BVVhfTkVTVEVEX1ZBTFVFX1dL
TkQoaW50LCBUYWcxKQotICAgICAgICAgICAgICA+IEJPT1NUX01QTF9BVVhfTkVTVEVEX1ZBTFVF
X1dLTkQoaW50LCBUYWcyKQotICAgICAgICAgICAgKQotCi0gICAgICAgICwgYXV4OjpjYXN0Mm5k
X2ltcGw8IGJpdGFuZF9pbXBsPCBUYWcxLFRhZzEgPixUYWcxLCBUYWcyID4KLSAgICAgICAgLCBh
dXg6OmNhc3Qxc3RfaW1wbDwgYml0YW5kX2ltcGw8IFRhZzIsVGFnMiA+LFRhZzEsIFRhZzIgPgot
ICAgICAgICA+Ojp0eXBlCi17Ci19OwotCi0vLy8gZm9yIERpZ2l0YWwgTWFycyBDKysvY29tcGls
ZXJzIHdpdGggbm8gQ1RQUy9UVFAgc3VwcG9ydAotdGVtcGxhdGU8PiBzdHJ1Y3QgYml0YW5kX2lt
cGw8IG5hLG5hID4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyID4g
c3RydWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIGFwcGx5IHR5cGU7Ci0gICAgICAg
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVlICA9IDApOwotICAgIH07Ci19OwotCi10
ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4gc3RydWN0IGJpdGFuZF9pbXBsPCBuYSxUYWcgPgotewot
ICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBVMSwgdHlwZW5hbWUgVTIgPiBzdHJ1Y3QgYXBwbHkKLSAg
ICB7Ci0gICAgICAgIHR5cGVkZWYgYXBwbHkgdHlwZTsKLSAgICAgICAgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKGludCwgdmFsdWUgID0gMCk7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFt
ZSBUYWcgPiBzdHJ1Y3QgYml0YW5kX2ltcGw8IFRhZyxuYSA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5
cGVuYW1lIFUxLCB0eXBlbmFtZSBVMiA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlw
ZWRlZiBhcHBseSB0eXBlOwotICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1
ZSAgPSAwKTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgYml0
YW5kX3RhZwotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgVDo6dGFnIHR5cGU7Ci19OwotCi10ZW1w
bGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oTjEpCi0gICAgLCB0
eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKE4yKQotICAgICwgdHlwZW5hbWUgTjMgPSBu
YSwgdHlwZW5hbWUgTjQgPSBuYSwgdHlwZW5hbWUgTjUgPSBuYQotICAgID4KLXN0cnVjdCBiaXRh
bmRfCi0gICAgOiBiaXRhbmRfPCBiaXRhbmRfPCBiaXRhbmRfPCBiaXRhbmRfPCBOMSxOMiA+LCBO
Mz4sIE40PiwgTjU+Ci17Ci0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgKLSAgICAg
ICAgICA1Ci0gICAgICAgICwgYml0YW5kXwotICAgICAgICAsICggTjEsIE4yLCBOMywgTjQsIE41
ICkKLSAgICAgICAgKQotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBOMSwgdHlwZW5h
bWUgTjIsIHR5cGVuYW1lIE4zLCB0eXBlbmFtZSBONAotICAgID4KLXN0cnVjdCBiaXRhbmRfPCBO
MSxOMixOMyxONCxuYSA+Ci0KLSAgICA6IGJpdGFuZF88IGJpdGFuZF88IGJpdGFuZF88IE4xLE4y
ID4sIE4zPiwgTjQ+Ci17Ci0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVF9TUEVDKAot
ICAgICAgICAgIDUKLSAgICAgICAgLCBiaXRhbmRfCi0gICAgICAgICwgKCBOMSwgTjIsIE4zLCBO
NCwgbmEgKQotICAgICAgICApCi19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIE4xLCB0
eXBlbmFtZSBOMiwgdHlwZW5hbWUgTjMKLSAgICA+Ci1zdHJ1Y3QgYml0YW5kXzwgTjEsTjIsTjMs
bmEsbmEgPgotCi0gICAgOiBiaXRhbmRfPCBiaXRhbmRfPCBOMSxOMiA+LCBOMz4KLXsKLSAgICBC
T09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUX1NQRUMoCi0gICAgICAgICAgNQotICAgICAgICAs
IGJpdGFuZF8KLSAgICAgICAgLCAoIE4xLCBOMiwgTjMsIG5hLCBuYSApCi0gICAgICAgICkKLX07
Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgTjEsIHR5cGVuYW1lIE4yCi0gICAgPgotc3Ry
dWN0IGJpdGFuZF88IE4xLE4yLG5hLG5hLG5hID4KLSAgICA6IGJpdGFuZF9pbXBsPAotICAgICAg
ICAgIHR5cGVuYW1lIGJpdGFuZF90YWc8TjE+Ojp0eXBlCi0gICAgICAgICwgdHlwZW5hbWUgYml0
YW5kX3RhZzxOMj46OnR5cGUKLSAgICAgICAgPjo6dGVtcGxhdGUgYXBwbHk8IE4xLE4yID46OnR5
cGUKLXsKLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUX1NQRUMoCi0gICAgICAgICAg
NQotICAgICAgICAsIGJpdGFuZF8KLSAgICAgICAgLCAoIE4xLCBOMiwgbmEsIG5hLCBuYSApCi0g
ICAgICAgICkKLQotfTsKLQotQk9PU1RfTVBMX0FVWF9OQV9TUEVDMigyLCA1LCBiaXRhbmRfKQot
Ci19fQotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLXRlbXBsYXRlPD4KLXN0
cnVjdCBiaXRhbmRfaW1wbDwgaW50ZWdyYWxfY190YWcsaW50ZWdyYWxfY190YWcgPgotewotICAg
IHRlbXBsYXRlPCB0eXBlbmFtZSBOMSwgdHlwZW5hbWUgTjIgPiBzdHJ1Y3QgYXBwbHkKLQotICAg
ICAgICA6IGludGVncmFsX2M8Ci0gICAgICAgICAgICAgIHR5cGVuYW1lIGF1eDo6bGFyZ2VzdF9p
bnQ8Ci0gICAgICAgICAgICAgICAgICB0eXBlbmFtZSBOMTo6dmFsdWVfdHlwZQotICAgICAgICAg
ICAgICAgICwgdHlwZW5hbWUgTjI6OnZhbHVlX3R5cGUKLSAgICAgICAgICAgICAgICA+Ojp0eXBl
Ci0gICAgICAgICAgICAsICggQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05EKE4xKTo6dmFsdWUKLSAg
ICAgICAgICAgICAgICAgICYgQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05EKE4yKTo6dmFsdWUKLSAg
ICAgICAgICAgICAgICApCi0gICAgICAgICAgICA+Ci0gICAgewotICAgIH07Ci19OwotCi19fQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9iaXR4b3IuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9iaXR4b3IuaHBw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzE5MzkxNTFkMDI1NWQ2Y2I0MTQ2YmYz
MTlhYWM1ZWIxY2YwZTFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhf
L3ByZXByb2Nlc3NlZC9nY2MvYml0eG9yLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCww
IEBACi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8gQ29weXJp
Z2h0IEphYXAgU3V0ZXIgMjAwMwotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxl
IExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotLy8KLQotLy8gUHJlcHJvY2Vzc2VkIHZlcnNpb24gb2YgImJvb3N0L21w
bC9iaXR4b3IuaHBwIiBoZWFkZXIKLS8vIC0tIERPIE5PVCBtb2RpZnkgYnkgaGFuZCEKLQotbmFt
ZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5h
bWUgVGFnMQotICAgICwgdHlwZW5hbWUgVGFnMgotICAgID4KLXN0cnVjdCBiaXR4b3JfaW1wbAot
ICAgIDogaWZfYzwKLSAgICAgICAgICAoIEJPT1NUX01QTF9BVVhfTkVTVEVEX1ZBTFVFX1dLTkQo
aW50LCBUYWcxKQotICAgICAgICAgICAgICA+IEJPT1NUX01QTF9BVVhfTkVTVEVEX1ZBTFVFX1dL
TkQoaW50LCBUYWcyKQotICAgICAgICAgICAgKQotCi0gICAgICAgICwgYXV4OjpjYXN0Mm5kX2lt
cGw8IGJpdHhvcl9pbXBsPCBUYWcxLFRhZzEgPixUYWcxLCBUYWcyID4KLSAgICAgICAgLCBhdXg6
OmNhc3Qxc3RfaW1wbDwgYml0eG9yX2ltcGw8IFRhZzIsVGFnMiA+LFRhZzEsIFRhZzIgPgotICAg
ICAgICA+Ojp0eXBlCi17Ci19OwotCi0vLy8gZm9yIERpZ2l0YWwgTWFycyBDKysvY29tcGlsZXJz
IHdpdGggbm8gQ1RQUy9UVFAgc3VwcG9ydAotdGVtcGxhdGU8PiBzdHJ1Y3QgYml0eG9yX2ltcGw8
IG5hLG5hID4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyID4gc3Ry
dWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIGFwcGx5IHR5cGU7Ci0gICAgICAgIEJP
T1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVlICA9IDApOwotICAgIH07Ci19OwotCi10ZW1w
bGF0ZTwgdHlwZW5hbWUgVGFnID4gc3RydWN0IGJpdHhvcl9pbXBsPCBuYSxUYWcgPgotewotICAg
IHRlbXBsYXRlPCB0eXBlbmFtZSBVMSwgdHlwZW5hbWUgVTIgPiBzdHJ1Y3QgYXBwbHkKLSAgICB7
Ci0gICAgICAgIHR5cGVkZWYgYXBwbHkgdHlwZTsKLSAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGludCwgdmFsdWUgID0gMCk7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBU
YWcgPiBzdHJ1Y3QgYml0eG9yX2ltcGw8IFRhZyxuYSA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVu
YW1lIFUxLCB0eXBlbmFtZSBVMiA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRl
ZiBhcHBseSB0eXBlOwotICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1ZSAg
PSAwKTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgYml0eG9y
X3RhZwotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgVDo6dGFnIHR5cGU7Ci19OwotCi10ZW1wbGF0
ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oTjEpCi0gICAgLCB0eXBl
bmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKE4yKQotICAgICwgdHlwZW5hbWUgTjMgPSBuYSwg
dHlwZW5hbWUgTjQgPSBuYSwgdHlwZW5hbWUgTjUgPSBuYQotICAgID4KLXN0cnVjdCBiaXR4b3Jf
Ci0gICAgOiBiaXR4b3JfPCBiaXR4b3JfPCBiaXR4b3JfPCBiaXR4b3JfPCBOMSxOMiA+LCBOMz4s
IE40PiwgTjU+Ci17Ci0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgKLSAgICAgICAg
ICA1Ci0gICAgICAgICwgYml0eG9yXwotICAgICAgICAsICggTjEsIE4yLCBOMywgTjQsIE41ICkK
LSAgICAgICAgKQotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBOMSwgdHlwZW5hbWUg
TjIsIHR5cGVuYW1lIE4zLCB0eXBlbmFtZSBONAotICAgID4KLXN0cnVjdCBiaXR4b3JfPCBOMSxO
MixOMyxONCxuYSA+Ci0KLSAgICA6IGJpdHhvcl88IGJpdHhvcl88IGJpdHhvcl88IE4xLE4yID4s
IE4zPiwgTjQ+Ci17Ci0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVF9TUEVDKAotICAg
ICAgICAgIDUKLSAgICAgICAgLCBiaXR4b3JfCi0gICAgICAgICwgKCBOMSwgTjIsIE4zLCBONCwg
bmEgKQotICAgICAgICApCi19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIE4xLCB0eXBl
bmFtZSBOMiwgdHlwZW5hbWUgTjMKLSAgICA+Ci1zdHJ1Y3QgYml0eG9yXzwgTjEsTjIsTjMsbmEs
bmEgPgotCi0gICAgOiBiaXR4b3JfPCBiaXR4b3JfPCBOMSxOMiA+LCBOMz4KLXsKLSAgICBCT09T
VF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUX1NQRUMoCi0gICAgICAgICAgNQotICAgICAgICAsIGJp
dHhvcl8KLSAgICAgICAgLCAoIE4xLCBOMiwgTjMsIG5hLCBuYSApCi0gICAgICAgICkKLX07Ci0K
LXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgTjEsIHR5cGVuYW1lIE4yCi0gICAgPgotc3RydWN0
IGJpdHhvcl88IE4xLE4yLG5hLG5hLG5hID4KLSAgICA6IGJpdHhvcl9pbXBsPAotICAgICAgICAg
IHR5cGVuYW1lIGJpdHhvcl90YWc8TjE+Ojp0eXBlCi0gICAgICAgICwgdHlwZW5hbWUgYml0eG9y
X3RhZzxOMj46OnR5cGUKLSAgICAgICAgPjo6dGVtcGxhdGUgYXBwbHk8IE4xLE4yID46OnR5cGUK
LXsKLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUX1NQRUMoCi0gICAgICAgICAgNQot
ICAgICAgICAsIGJpdHhvcl8KLSAgICAgICAgLCAoIE4xLCBOMiwgbmEsIG5hLCBuYSApCi0gICAg
ICAgICkKLQotfTsKLQotQk9PU1RfTVBMX0FVWF9OQV9TUEVDMigyLCA1LCBiaXR4b3JfKQotCi19
fQotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLXRlbXBsYXRlPD4KLXN0cnVj
dCBiaXR4b3JfaW1wbDwgaW50ZWdyYWxfY190YWcsaW50ZWdyYWxfY190YWcgPgotewotICAgIHRl
bXBsYXRlPCB0eXBlbmFtZSBOMSwgdHlwZW5hbWUgTjIgPiBzdHJ1Y3QgYXBwbHkKLQotICAgICAg
ICA6IGludGVncmFsX2M8Ci0gICAgICAgICAgICAgIHR5cGVuYW1lIGF1eDo6bGFyZ2VzdF9pbnQ8
Ci0gICAgICAgICAgICAgICAgICB0eXBlbmFtZSBOMTo6dmFsdWVfdHlwZQotICAgICAgICAgICAg
ICAgICwgdHlwZW5hbWUgTjI6OnZhbHVlX3R5cGUKLSAgICAgICAgICAgICAgICA+Ojp0eXBlCi0g
ICAgICAgICAgICAsICggQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05EKE4xKTo6dmFsdWUKLSAgICAg
ICAgICAgICAgICAgIF4gQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05EKE4yKTo6dmFsdWUKLSAgICAg
ICAgICAgICAgICApCi0gICAgICAgICAgICA+Ci0gICAgewotICAgIH07Ci19OwotCi19fQpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1
eF8vcHJlcHJvY2Vzc2VkL2djYy9lcXVhbF90by5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2VxdWFsX3RvLmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJjOTk0NTg5ZjRjYmM5ZDhhZjFjNzA0
OTZmYTE1ZTZhMmNlMDdiOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4
Xy9wcmVwcm9jZXNzZWQvZ2NjL2VxdWFsX3RvLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICsw
LDAgQEAKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8g
RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4w
LiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQg
Ci0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotCi0vLyBQcmVw
cm9jZXNzZWQgdmVyc2lvbiBvZiAiYm9vc3QvbXBsL2VxdWFsX3RvLmhwcCIgaGVhZGVyCi0vLyAt
LSBETyBOT1QgbW9kaWZ5IGJ5IGhhbmQhCi0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBt
cGwgewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFRhZzEKLSAgICAsIHR5cGVuYW1lIFRh
ZzIKLSAgICA+Ci1zdHJ1Y3QgZXF1YWxfdG9faW1wbAotICAgIDogaWZfYzwKLSAgICAgICAgICAo
IEJPT1NUX01QTF9BVVhfTkVTVEVEX1ZBTFVFX1dLTkQoaW50LCBUYWcxKQotICAgICAgICAgICAg
ICA+IEJPT1NUX01QTF9BVVhfTkVTVEVEX1ZBTFVFX1dLTkQoaW50LCBUYWcyKQotICAgICAgICAg
ICAgKQotCi0gICAgICAgICwgYXV4OjpjYXN0Mm5kX2ltcGw8IGVxdWFsX3RvX2ltcGw8IFRhZzEs
VGFnMSA+LFRhZzEsIFRhZzIgPgotICAgICAgICAsIGF1eDo6Y2FzdDFzdF9pbXBsPCBlcXVhbF90
b19pbXBsPCBUYWcyLFRhZzIgPixUYWcxLCBUYWcyID4KLSAgICAgICAgPjo6dHlwZQotewotfTsK
LQotLy8vIGZvciBEaWdpdGFsIE1hcnMgQysrL2NvbXBpbGVycyB3aXRoIG5vIENUUFMvVFRQIHN1
cHBvcnQKLXRlbXBsYXRlPD4gc3RydWN0IGVxdWFsX3RvX2ltcGw8IG5hLG5hID4KLXsKLSAgICB0
ZW1wbGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyID4gc3RydWN0IGFwcGx5Ci0gICAgewot
ICAgICAgICB0eXBlZGVmIGFwcGx5IHR5cGU7Ci0gICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFO
VChpbnQsIHZhbHVlICA9IDApOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVGFn
ID4gc3RydWN0IGVxdWFsX3RvX2ltcGw8IG5hLFRhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVu
YW1lIFUxLCB0eXBlbmFtZSBVMiA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRl
ZiBhcHBseSB0eXBlOwotICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1ZSAg
PSAwKTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBlcXVh
bF90b19pbXBsPCBUYWcsbmEgPgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBVMSwgdHlwZW5h
bWUgVTIgPiBzdHJ1Y3QgYXBwbHkKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgYXBwbHkgdHlwZTsK
LSAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwgdmFsdWUgID0gMCk7Ci0gICAgfTsK
LX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGVxdWFsX3RvX3RhZwotewotICAg
IHR5cGVkZWYgdHlwZW5hbWUgVDo6dGFnIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5
cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oTjEpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9N
UExfQVVYX05BX1BBUkFNKE4yKQotICAgID4KLXN0cnVjdCBlcXVhbF90bwotCi0gICAgOiBlcXVh
bF90b19pbXBsPAotICAgICAgICAgIHR5cGVuYW1lIGVxdWFsX3RvX3RhZzxOMT46OnR5cGUKLSAg
ICAgICAgLCB0eXBlbmFtZSBlcXVhbF90b190YWc8TjI+Ojp0eXBlCi0gICAgICAgID46OnRlbXBs
YXRlIGFwcGx5PCBOMSxOMiA+Ojp0eXBlCi17Ci0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQ
UE9SVCgyLCBlcXVhbF90bywgKE4xLCBOMikpCi0KLX07Ci0KLUJPT1NUX01QTF9BVVhfTkFfU1BF
QzIoMiwgMiwgZXF1YWxfdG8pCi0KLX19Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBt
cGwgewotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgZXF1YWxfdG9faW1wbDwgaW50ZWdyYWxfY190YWcs
aW50ZWdyYWxfY190YWcgPgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBOMSwgdHlwZW5hbWUg
TjIgPiBzdHJ1Y3QgYXBwbHkKLQotICAgICAgICA6IGJvb2xfPCAoIEJPT1NUX01QTF9BVVhfVkFM
VUVfV0tORChOMSk6OnZhbHVlICA9PSBCT09TVF9NUExfQVVYX1ZBTFVFX1dLTkQoTjIpOjp2YWx1
ZSApID4KLSAgICB7Ci0gICAgfTsKLX07Ci0KLX19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2Zv
bGRfaW1wbC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
cGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2ZvbGRfaW1wbC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDllN2EyOTMwMGQ2NWJhMzc0ZTg3N2E2MTQwNjQ0NTAyYjA3NDZjMTUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9m
b2xkX2ltcGwuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTgwICswLDAgQEAKLQotLy8gQ29weXJp
Z2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21w
YW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotCi0vLyBQcmVwcm9jZXNzZWQgdmVyc2lvbiBv
ZiAiYm9vc3QvbXBsL2F1eF8vZm9sZF9pbXBsLmhwcCIgaGVhZGVyCi0vLyAtLSBETyBOT1QgbW9k
aWZ5IGJ5IGhhbmQhCi0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3Bh
Y2UgYXV4IHsKLQotLy8vIGZvcndhcmQgZGVjbGFyYXRpb24KLQotdGVtcGxhdGU8Ci0gICAgICBp
bnQgTgotICAgICwgdHlwZW5hbWUgRmlyc3QKLSAgICAsIHR5cGVuYW1lIExhc3QKLSAgICAsIHR5
cGVuYW1lIFN0YXRlCi0gICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKLSAgICA+Ci1zdHJ1Y3QgZm9s
ZF9pbXBsOwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEZpcnN0Ci0gICAgLCB0eXBlbmFt
ZSBMYXN0Ci0gICAgLCB0eXBlbmFtZSBTdGF0ZQotICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCi0g
ICAgPgotc3RydWN0IGZvbGRfaW1wbDwgMCxGaXJzdCxMYXN0LFN0YXRlLEZvcndhcmRPcCA+Ci17
Ci0gICAgdHlwZWRlZiBGaXJzdCBpdGVyMDsKLSAgICB0eXBlZGVmIFN0YXRlIHN0YXRlMDsKLSAg
ICB0eXBlZGVmIHN0YXRlMCBzdGF0ZTsKLSAgICB0eXBlZGVmIGl0ZXIwIGl0ZXJhdG9yOwotfTsK
LQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGaXJzdAotICAgICwgdHlwZW5hbWUgTGFzdAot
ICAgICwgdHlwZW5hbWUgU3RhdGUKLSAgICAsIHR5cGVuYW1lIEZvcndhcmRPcAotICAgID4KLXN0
cnVjdCBmb2xkX2ltcGw8IDEsRmlyc3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgotewotICAgIHR5
cGVkZWYgRmlyc3QgaXRlcjA7Ci0gICAgdHlwZWRlZiBTdGF0ZSBzdGF0ZTA7Ci0gICAgdHlwZWRl
ZiB0eXBlbmFtZSBhcHBseTI8IEZvcndhcmRPcCwgc3RhdGUwLCB0eXBlbmFtZSBkZXJlZjxpdGVy
MD46OnR5cGUgPjo6dHlwZSBzdGF0ZTE7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6Om5leHQ8
aXRlcjA+Ojp0eXBlIGl0ZXIxOwotICAgIAotCi0gICAgdHlwZWRlZiBzdGF0ZTEgc3RhdGU7Ci0g
ICAgdHlwZWRlZiBpdGVyMSBpdGVyYXRvcjsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5h
bWUgRmlyc3QKLSAgICAsIHR5cGVuYW1lIExhc3QKLSAgICAsIHR5cGVuYW1lIFN0YXRlCi0gICAg
LCB0eXBlbmFtZSBGb3J3YXJkT3AKLSAgICA+Ci1zdHJ1Y3QgZm9sZF9pbXBsPCAyLEZpcnN0LExh
c3QsU3RhdGUsRm9yd2FyZE9wID4KLXsKLSAgICB0eXBlZGVmIEZpcnN0IGl0ZXIwOwotICAgIHR5
cGVkZWYgU3RhdGUgc3RhdGUwOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHkyPCBGb3J3YXJk
T3AsIHN0YXRlMCwgdHlwZW5hbWUgZGVyZWY8aXRlcjA+Ojp0eXBlID46OnR5cGUgc3RhdGUxOwot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgbXBsOjpuZXh0PGl0ZXIwPjo6dHlwZSBpdGVyMTsKLSAgICB0
eXBlZGVmIHR5cGVuYW1lIGFwcGx5MjwgRm9yd2FyZE9wLCBzdGF0ZTEsIHR5cGVuYW1lIGRlcmVm
PGl0ZXIxPjo6dHlwZSA+Ojp0eXBlIHN0YXRlMjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIG1wbDo6
bmV4dDxpdGVyMT46OnR5cGUgaXRlcjI7Ci0gICAgCi0KLSAgICB0eXBlZGVmIHN0YXRlMiBzdGF0
ZTsKLSAgICB0eXBlZGVmIGl0ZXIyIGl0ZXJhdG9yOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0
eXBlbmFtZSBGaXJzdAotICAgICwgdHlwZW5hbWUgTGFzdAotICAgICwgdHlwZW5hbWUgU3RhdGUK
LSAgICAsIHR5cGVuYW1lIEZvcndhcmRPcAotICAgID4KLXN0cnVjdCBmb2xkX2ltcGw8IDMsRmly
c3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgotewotICAgIHR5cGVkZWYgRmlyc3QgaXRlcjA7Ci0g
ICAgdHlwZWRlZiBTdGF0ZSBzdGF0ZTA7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseTI8IEZv
cndhcmRPcCwgc3RhdGUwLCB0eXBlbmFtZSBkZXJlZjxpdGVyMD46OnR5cGUgPjo6dHlwZSBzdGF0
ZTE7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6Om5leHQ8aXRlcjA+Ojp0eXBlIGl0ZXIxOwot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHkyPCBGb3J3YXJkT3AsIHN0YXRlMSwgdHlwZW5hbWUg
ZGVyZWY8aXRlcjE+Ojp0eXBlID46OnR5cGUgc3RhdGUyOwotICAgIHR5cGVkZWYgdHlwZW5hbWUg
bXBsOjpuZXh0PGl0ZXIxPjo6dHlwZSBpdGVyMjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5
MjwgRm9yd2FyZE9wLCBzdGF0ZTIsIHR5cGVuYW1lIGRlcmVmPGl0ZXIyPjo6dHlwZSA+Ojp0eXBl
IHN0YXRlMzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIG1wbDo6bmV4dDxpdGVyMj46OnR5cGUgaXRl
cjM7Ci0gICAgCi0KLSAgICB0eXBlZGVmIHN0YXRlMyBzdGF0ZTsKLSAgICB0eXBlZGVmIGl0ZXIz
IGl0ZXJhdG9yOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGaXJzdAotICAgICwg
dHlwZW5hbWUgTGFzdAotICAgICwgdHlwZW5hbWUgU3RhdGUKLSAgICAsIHR5cGVuYW1lIEZvcndh
cmRPcAotICAgID4KLXN0cnVjdCBmb2xkX2ltcGw8IDQsRmlyc3QsTGFzdCxTdGF0ZSxGb3J3YXJk
T3AgPgotewotICAgIHR5cGVkZWYgRmlyc3QgaXRlcjA7Ci0gICAgdHlwZWRlZiBTdGF0ZSBzdGF0
ZTA7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseTI8IEZvcndhcmRPcCwgc3RhdGUwLCB0eXBl
bmFtZSBkZXJlZjxpdGVyMD46OnR5cGUgPjo6dHlwZSBzdGF0ZTE7Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBtcGw6Om5leHQ8aXRlcjA+Ojp0eXBlIGl0ZXIxOwotICAgIHR5cGVkZWYgdHlwZW5hbWUg
YXBwbHkyPCBGb3J3YXJkT3AsIHN0YXRlMSwgdHlwZW5hbWUgZGVyZWY8aXRlcjE+Ojp0eXBlID46
OnR5cGUgc3RhdGUyOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgbXBsOjpuZXh0PGl0ZXIxPjo6dHlw
ZSBpdGVyMjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5MjwgRm9yd2FyZE9wLCBzdGF0ZTIs
IHR5cGVuYW1lIGRlcmVmPGl0ZXIyPjo6dHlwZSA+Ojp0eXBlIHN0YXRlMzsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIG1wbDo6bmV4dDxpdGVyMj46OnR5cGUgaXRlcjM7Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBhcHBseTI8IEZvcndhcmRPcCwgc3RhdGUzLCB0eXBlbmFtZSBkZXJlZjxpdGVyMz46OnR5
cGUgPjo6dHlwZSBzdGF0ZTQ7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6Om5leHQ8aXRlcjM+
Ojp0eXBlIGl0ZXI0OwotICAgIAotCi0gICAgdHlwZWRlZiBzdGF0ZTQgc3RhdGU7Ci0gICAgdHlw
ZWRlZiBpdGVyNCBpdGVyYXRvcjsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgaW50IE4KLSAgICAs
IHR5cGVuYW1lIEZpcnN0Ci0gICAgLCB0eXBlbmFtZSBMYXN0Ci0gICAgLCB0eXBlbmFtZSBTdGF0
ZQotICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCi0gICAgPgotc3RydWN0IGZvbGRfaW1wbAotewot
ICAgIHR5cGVkZWYgZm9sZF9pbXBsPAotICAgICAgICAgIDQKLSAgICAgICAgLCBGaXJzdAotICAg
ICAgICAsIExhc3QKLSAgICAgICAgLCBTdGF0ZQotICAgICAgICAsIEZvcndhcmRPcAotICAgICAg
ICA+IGNodW5rXzsKLQotICAgIHR5cGVkZWYgZm9sZF9pbXBsPAotICAgICAgICAgICggKE4gLSA0
KSA8IDAgPyAwIDogTiAtIDQgKQotICAgICAgICAsIHR5cGVuYW1lIGNodW5rXzo6aXRlcmF0b3IK
LSAgICAgICAgLCBMYXN0Ci0gICAgICAgICwgdHlwZW5hbWUgY2h1bmtfOjpzdGF0ZQotICAgICAg
ICAsIEZvcndhcmRPcAotICAgICAgICA+IHJlc187Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIHJl
c186OnN0YXRlIHN0YXRlOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzXzo6aXRlcmF0b3IgaXRl
cmF0b3I7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEZpcnN0Ci0gICAgLCB0eXBl
bmFtZSBMYXN0Ci0gICAgLCB0eXBlbmFtZSBTdGF0ZQotICAgICwgdHlwZW5hbWUgRm9yd2FyZE9w
Ci0gICAgPgotc3RydWN0IGZvbGRfaW1wbDwgLTEsRmlyc3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3Ag
PgotICAgIDogZm9sZF9pbXBsPAotICAgICAgICAgIC0xCi0gICAgICAgICwgdHlwZW5hbWUgbXBs
OjpuZXh0PEZpcnN0Pjo6dHlwZQotICAgICAgICAsIExhc3QKLSAgICAgICAgLCB0eXBlbmFtZSBh
cHBseTI8Rm9yd2FyZE9wLFN0YXRlLCB0eXBlbmFtZSBkZXJlZjxGaXJzdD46OnR5cGU+Ojp0eXBl
Ci0gICAgICAgICwgRm9yd2FyZE9wCi0gICAgICAgID4KLXsKLX07Ci0KLXRlbXBsYXRlPAotICAg
ICAgdHlwZW5hbWUgTGFzdAotICAgICwgdHlwZW5hbWUgU3RhdGUKLSAgICAsIHR5cGVuYW1lIEZv
cndhcmRPcAotICAgID4KLXN0cnVjdCBmb2xkX2ltcGw8IC0xLExhc3QsTGFzdCxTdGF0ZSxGb3J3
YXJkT3AgPgotewotICAgIHR5cGVkZWYgU3RhdGUgc3RhdGU7Ci0gICAgdHlwZWRlZiBMYXN0IGl0
ZXJhdG9yOwotfTsKLQotfX19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2Z1bGxfbGFtYmRhLmhw
cCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3By
ZXByb2Nlc3NlZC9nY2MvZnVsbF9sYW1iZGEuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlM2VlZjcxYjFlYTA4ZGQ4YmE4NjdiZTZhNzdmOTBlNTc0ODVjNjE2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9nY2MvZnVsbF9sYW1i
ZGEuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTU4ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IEFs
ZWtzZXkgR3VydG92b3kgMjAwMS0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJv
b3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpCi0vLwotCi0vLyBQcmVwcm9jZXNzZWQgdmVyc2lvbiBvZiAiYm9v
c3QvbXBsL2F1eF8vZnVsbF9sYW1iZGEuaHBwIiBoZWFkZXIKLS8vIC0tIERPIE5PVCBtb2RpZnkg
YnkgaGFuZCEKLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLW5hbWVzcGFj
ZSBhdXggewotCi10ZW1wbGF0ZTwKLSAgICAgIGJvb2wgQzEgPSBmYWxzZSwgYm9vbCBDMiA9IGZh
bHNlLCBib29sIEMzID0gZmFsc2UsIGJvb2wgQzQgPSBmYWxzZQotICAgICwgYm9vbCBDNSA9IGZh
bHNlCi0gICAgPgotc3RydWN0IGxhbWJkYV9vcgotICAgIDogdHJ1ZV8KLXsKLX07Ci0KLXRlbXBs
YXRlPD4KLXN0cnVjdCBsYW1iZGFfb3I8IGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlID4K
LSAgICA6IGZhbHNlXwotewotfTsKLQotfSAvLyBuYW1lc3BhY2UgYXV4Ci0KLXRlbXBsYXRlPAot
ICAgICAgdHlwZW5hbWUgVAotICAgICwgdHlwZW5hbWUgVGFnCi0gICAgLCB0eXBlbmFtZSBBcml0
eQotICAgID4KLXN0cnVjdCBsYW1iZGEKLXsKLSAgICB0eXBlZGVmIGZhbHNlXyBpc19sZTsKLSAg
ICB0eXBlZGVmIFQgcmVzdWx0XzsKLSAgICB0eXBlZGVmIFQgdHlwZTsKLX07Ci0KLXRlbXBsYXRl
PAotICAgICAgdHlwZW5hbWUgVAotICAgID4KLXN0cnVjdCBpc19sYW1iZGFfZXhwcmVzc2lvbgot
ICAgIDogbGFtYmRhPFQ+Ojppc19sZQotewotfTsKLQotdGVtcGxhdGU8IGludCBOLCB0eXBlbmFt
ZSBUYWcgPgotc3RydWN0IGxhbWJkYTwgYXJnPE4+LFRhZywgaW50XzwgLTEgPiA+Ci17Ci0gICAg
dHlwZWRlZiB0cnVlXyBpc19sZTsKLSAgICB0eXBlZGVmIG1wbDo6YXJnPE4+IHJlc3VsdF87IC8v
IHF1YWxpZmllZCBmb3IgdGhlIHNha2Ugb2YgTUlQU3BybyA3LjQxCi0gICAgdHlwZWRlZiBtcGw6
OnByb3RlY3Q8cmVzdWx0Xz4gdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUg
RgotICAgICwgdHlwZW5hbWUgVGFnCi0gICAgPgotc3RydWN0IGxhbWJkYTwKLSAgICAgICAgICBi
aW5kMDxGPgotICAgICAgICAsIFRhZwotICAgICAgICAsIGludF88MT4KLSAgICAgICAgPgotewot
ICAgIHR5cGVkZWYgZmFsc2VfIGlzX2xlOwotICAgIHR5cGVkZWYgYmluZDA8Ci0gICAgICAgICAg
RgotICAgICAgICA+IHJlc3VsdF87Ci0KLSAgICB0eXBlZGVmIHJlc3VsdF8gdHlwZTsKLX07Ci0K
LW5hbWVzcGFjZSBhdXggewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIElzTEUsIHR5cGVu
YW1lIFRhZwotICAgICwgdGVtcGxhdGU8IHR5cGVuYW1lIFAxID4gY2xhc3MgRgotICAgICwgdHlw
ZW5hbWUgTDEKLSAgICA+Ci1zdHJ1Y3QgbGVfcmVzdWx0MQotewotICAgIHR5cGVkZWYgRjwKLSAg
ICAgICAgICB0eXBlbmFtZSBMMTo6dHlwZQotICAgICAgICA+IHJlc3VsdF87Ci0KLSAgICB0eXBl
ZGVmIHJlc3VsdF8gdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVGFnCi0g
ICAgLCB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEgPiBjbGFzcyBGCi0gICAgLCB0eXBlbmFtZSBMMQot
ICAgID4KLXN0cnVjdCBsZV9yZXN1bHQxPCB0cnVlXyxUYWcsRixMMSA+Ci17Ci0gICAgdHlwZWRl
ZiBiaW5kMTwKLSAgICAgICAgICBxdW90ZTE8IEYsVGFnID4KLSAgICAgICAgLCB0eXBlbmFtZSBM
MTo6cmVzdWx0XwotICAgICAgICA+IHJlc3VsdF87Ci0KLSAgICB0eXBlZGVmIG1wbDo6cHJvdGVj
dDxyZXN1bHRfPiB0eXBlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgYXV4Ci0KLXRlbXBsYXRlPAot
ICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFAxID4gY2xhc3MgRgotICAgICwgdHlwZW5hbWUgVDEK
LSAgICAsIHR5cGVuYW1lIFRhZwotICAgID4KLXN0cnVjdCBsYW1iZGE8Ci0gICAgICAgICAgRjxU
MT4KLSAgICAgICAgLCBUYWcKLSAgICAgICAgLCBpbnRfPDE+Ci0gICAgICAgID4KLXsKLSAgICB0
eXBlZGVmIGxhbWJkYTwgVDEsVGFnID4gbDE7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBsMTo6aXNf
bGUgaXNfbGUxOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpsYW1iZGFfb3I8Ci0gICAgICAg
ICAgaXNfbGUxOjp2YWx1ZQotICAgICAgICA+Ojp0eXBlIGlzX2xlOwotCi0gICAgdHlwZWRlZiBh
dXg6OmxlX3Jlc3VsdDE8Ci0gICAgICAgICAgaXNfbGUsIFRhZywgRiwgbDEKLSAgICAgICAgPiBs
ZV9yZXN1bHRfOwotCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBsZV9yZXN1bHRfOjpyZXN1bHRfIHJl
c3VsdF87Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBsZV9yZXN1bHRfOjp0eXBlIHR5cGU7Ci19Owot
Ci10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxCi0gICAgLCB0eXBlbmFt
ZSBUYWcKLSAgICA+Ci1zdHJ1Y3QgbGFtYmRhPAotICAgICAgICAgIGJpbmQxPCBGLFQxID4KLSAg
ICAgICAgLCBUYWcKLSAgICAgICAgLCBpbnRfPDI+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVm
IGZhbHNlXyBpc19sZTsKLSAgICB0eXBlZGVmIGJpbmQxPAotICAgICAgICAgIEYKLSAgICAgICAg
LCBUMQotICAgICAgICA+IHJlc3VsdF87Ci0KLSAgICB0eXBlZGVmIHJlc3VsdF8gdHlwZTsKLX07
Ci0KLW5hbWVzcGFjZSBhdXggewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIElzTEUsIHR5
cGVuYW1lIFRhZwotICAgICwgdGVtcGxhdGU8IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiA+IGNs
YXNzIEYKLSAgICAsIHR5cGVuYW1lIEwxLCB0eXBlbmFtZSBMMgotICAgID4KLXN0cnVjdCBsZV9y
ZXN1bHQyCi17Ci0gICAgdHlwZWRlZiBGPAotICAgICAgICAgIHR5cGVuYW1lIEwxOjp0eXBlLCB0
eXBlbmFtZSBMMjo6dHlwZQotICAgICAgICA+IHJlc3VsdF87Ci0KLSAgICB0eXBlZGVmIHJlc3Vs
dF8gdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVGFnCi0gICAgLCB0ZW1w
bGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyID4gY2xhc3MgRgotICAgICwgdHlwZW5hbWUg
TDEsIHR5cGVuYW1lIEwyCi0gICAgPgotc3RydWN0IGxlX3Jlc3VsdDI8IHRydWVfLFRhZyxGLEwx
LEwyID4KLXsKLSAgICB0eXBlZGVmIGJpbmQyPAotICAgICAgICAgIHF1b3RlMjwgRixUYWcgPgot
ICAgICAgICAsIHR5cGVuYW1lIEwxOjpyZXN1bHRfLCB0eXBlbmFtZSBMMjo6cmVzdWx0XwotICAg
ICAgICA+IHJlc3VsdF87Ci0KLSAgICB0eXBlZGVmIG1wbDo6cHJvdGVjdDxyZXN1bHRfPiB0eXBl
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgYXV4Ci0KLXRlbXBsYXRlPAotICAgICAgdGVtcGxhdGU8
IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiA+IGNsYXNzIEYKLSAgICAsIHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMgotICAgICwgdHlwZW5hbWUgVGFnCi0gICAgPgotc3RydWN0IGxhbWJkYTwKLSAg
ICAgICAgICBGPCBUMSxUMiA+Ci0gICAgICAgICwgVGFnCi0gICAgICAgICwgaW50XzwyPgotICAg
ICAgICA+Ci17Ci0gICAgdHlwZWRlZiBsYW1iZGE8IFQxLFRhZyA+IGwxOwotICAgIHR5cGVkZWYg
bGFtYmRhPCBUMixUYWcgPiBsMjsKLSAgICAKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGwxOjppc19s
ZSBpc19sZTE7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBsMjo6aXNfbGUgaXNfbGUyOwotICAgIAot
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OmxhbWJkYV9vcjwKLSAgICAgICAgICBpc19sZTE6
OnZhbHVlLCBpc19sZTI6OnZhbHVlCi0gICAgICAgID46OnR5cGUgaXNfbGU7Ci0KLSAgICB0eXBl
ZGVmIGF1eDo6bGVfcmVzdWx0MjwKLSAgICAgICAgICBpc19sZSwgVGFnLCBGLCBsMSwgbDIKLSAg
ICAgICAgPiBsZV9yZXN1bHRfOwotCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBsZV9yZXN1bHRfOjpy
ZXN1bHRfIHJlc3VsdF87Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBsZV9yZXN1bHRfOjp0eXBlIHR5
cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBl
bmFtZSBUMgotICAgICwgdHlwZW5hbWUgVGFnCi0gICAgPgotc3RydWN0IGxhbWJkYTwKLSAgICAg
ICAgICBiaW5kMjwgRixUMSxUMiA+Ci0gICAgICAgICwgVGFnCi0gICAgICAgICwgaW50XzwzPgot
ICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiBmYWxzZV8gaXNfbGU7Ci0gICAgdHlwZWRlZiBiaW5k
MjwKLSAgICAgICAgICBGCi0gICAgICAgICwgVDEsIFQyCi0gICAgICAgID4gcmVzdWx0XzsKLQot
ICAgIHR5cGVkZWYgcmVzdWx0XyB0eXBlOwotfTsKLQotbmFtZXNwYWNlIGF1eCB7Ci0KLXRlbXBs
YXRlPAotICAgICAgdHlwZW5hbWUgSXNMRSwgdHlwZW5hbWUgVGFnCi0gICAgLCB0ZW1wbGF0ZTwg
dHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMyA+IGNsYXNzIEYKLSAgICAsIHR5
cGVuYW1lIEwxLCB0eXBlbmFtZSBMMiwgdHlwZW5hbWUgTDMKLSAgICA+Ci1zdHJ1Y3QgbGVfcmVz
dWx0MwotewotICAgIHR5cGVkZWYgRjwKLSAgICAgICAgICB0eXBlbmFtZSBMMTo6dHlwZSwgdHlw
ZW5hbWUgTDI6OnR5cGUsIHR5cGVuYW1lIEwzOjp0eXBlCi0gICAgICAgID4gcmVzdWx0XzsKLQot
ICAgIHR5cGVkZWYgcmVzdWx0XyB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFt
ZSBUYWcKLSAgICAsIHRlbXBsYXRlPCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1l
IFAzID4gY2xhc3MgRgotICAgICwgdHlwZW5hbWUgTDEsIHR5cGVuYW1lIEwyLCB0eXBlbmFtZSBM
MwotICAgID4KLXN0cnVjdCBsZV9yZXN1bHQzPCB0cnVlXyxUYWcsRixMMSxMMixMMyA+Ci17Ci0g
ICAgdHlwZWRlZiBiaW5kMzwKLSAgICAgICAgICBxdW90ZTM8IEYsVGFnID4KLSAgICAgICAgLCB0
eXBlbmFtZSBMMTo6cmVzdWx0XywgdHlwZW5hbWUgTDI6OnJlc3VsdF8sIHR5cGVuYW1lIEwzOjpy
ZXN1bHRfCi0gICAgICAgID4gcmVzdWx0XzsKLQotICAgIHR5cGVkZWYgbXBsOjpwcm90ZWN0PHJl
c3VsdF8+IHR5cGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBhdXgKLQotdGVtcGxhdGU8Ci0gICAg
ICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMyA+IGNsYXNz
IEYKLSAgICAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMKLSAgICAsIHR5
cGVuYW1lIFRhZwotICAgID4KLXN0cnVjdCBsYW1iZGE8Ci0gICAgICAgICAgRjwgVDEsVDIsVDMg
PgotICAgICAgICAsIFRhZwotICAgICAgICAsIGludF88Mz4KLSAgICAgICAgPgotewotICAgIHR5
cGVkZWYgbGFtYmRhPCBUMSxUYWcgPiBsMTsKLSAgICB0eXBlZGVmIGxhbWJkYTwgVDIsVGFnID4g
bDI7Ci0gICAgdHlwZWRlZiBsYW1iZGE8IFQzLFRhZyA+IGwzOwotICAgIAotICAgIHR5cGVkZWYg
dHlwZW5hbWUgbDE6OmlzX2xlIGlzX2xlMTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGwyOjppc19s
ZSBpc19sZTI7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBsMzo6aXNfbGUgaXNfbGUzOwotICAgIAot
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OmxhbWJkYV9vcjwKLSAgICAgICAgICBpc19sZTE6
OnZhbHVlLCBpc19sZTI6OnZhbHVlLCBpc19sZTM6OnZhbHVlCi0gICAgICAgID46OnR5cGUgaXNf
bGU7Ci0KLSAgICB0eXBlZGVmIGF1eDo6bGVfcmVzdWx0MzwKLSAgICAgICAgICBpc19sZSwgVGFn
LCBGLCBsMSwgbDIsIGwzCi0gICAgICAgID4gbGVfcmVzdWx0XzsKLQotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgbGVfcmVzdWx0Xzo6cmVzdWx0XyByZXN1bHRfOwotICAgIHR5cGVkZWYgdHlwZW5hbWUg
bGVfcmVzdWx0Xzo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBG
LCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzCi0gICAgLCB0eXBlbmFtZSBU
YWcKLSAgICA+Ci1zdHJ1Y3QgbGFtYmRhPAotICAgICAgICAgIGJpbmQzPCBGLFQxLFQyLFQzID4K
LSAgICAgICAgLCBUYWcKLSAgICAgICAgLCBpbnRfPDQ+Ci0gICAgICAgID4KLXsKLSAgICB0eXBl
ZGVmIGZhbHNlXyBpc19sZTsKLSAgICB0eXBlZGVmIGJpbmQzPAotICAgICAgICAgIEYKLSAgICAg
ICAgLCBUMSwgVDIsIFQzCi0gICAgICAgID4gcmVzdWx0XzsKLQotICAgIHR5cGVkZWYgcmVzdWx0
XyB0eXBlOwotfTsKLQotbmFtZXNwYWNlIGF1eCB7Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5h
bWUgSXNMRSwgdHlwZW5hbWUgVGFnCi0gICAgLCB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVu
YW1lIFAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgUDQgPiBjbGFzcyBGCi0gICAgLCB0eXBlbmFt
ZSBMMSwgdHlwZW5hbWUgTDIsIHR5cGVuYW1lIEwzLCB0eXBlbmFtZSBMNAotICAgID4KLXN0cnVj
dCBsZV9yZXN1bHQ0Ci17Ci0gICAgdHlwZWRlZiBGPAotICAgICAgICAgIHR5cGVuYW1lIEwxOjp0
eXBlLCB0eXBlbmFtZSBMMjo6dHlwZSwgdHlwZW5hbWUgTDM6OnR5cGUKLSAgICAgICAgLCB0eXBl
bmFtZSBMNDo6dHlwZQotICAgICAgICA+IHJlc3VsdF87Ci0KLSAgICB0eXBlZGVmIHJlc3VsdF8g
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVGFnCi0gICAgLCB0ZW1wbGF0
ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgUDQgPiBj
bGFzcyBGCi0gICAgLCB0eXBlbmFtZSBMMSwgdHlwZW5hbWUgTDIsIHR5cGVuYW1lIEwzLCB0eXBl
bmFtZSBMNAotICAgID4KLXN0cnVjdCBsZV9yZXN1bHQ0PCB0cnVlXyxUYWcsRixMMSxMMixMMyxM
NCA+Ci17Ci0gICAgdHlwZWRlZiBiaW5kNDwKLSAgICAgICAgICBxdW90ZTQ8IEYsVGFnID4KLSAg
ICAgICAgLCB0eXBlbmFtZSBMMTo6cmVzdWx0XywgdHlwZW5hbWUgTDI6OnJlc3VsdF8sIHR5cGVu
YW1lIEwzOjpyZXN1bHRfCi0gICAgICAgICwgdHlwZW5hbWUgTDQ6OnJlc3VsdF8KLSAgICAgICAg
PiByZXN1bHRfOwotCi0gICAgdHlwZWRlZiBtcGw6OnByb3RlY3Q8cmVzdWx0Xz4gdHlwZTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIGF1eAotCi10ZW1wbGF0ZTwKLSAgICAgIHRlbXBsYXRlPCB0eXBl
bmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNCA+IGNsYXNzIEYK
LSAgICAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0
Ci0gICAgLCB0eXBlbmFtZSBUYWcKLSAgICA+Ci1zdHJ1Y3QgbGFtYmRhPAotICAgICAgICAgIEY8
IFQxLFQyLFQzLFQ0ID4KLSAgICAgICAgLCBUYWcKLSAgICAgICAgLCBpbnRfPDQ+Ci0gICAgICAg
ID4KLXsKLSAgICB0eXBlZGVmIGxhbWJkYTwgVDEsVGFnID4gbDE7Ci0gICAgdHlwZWRlZiBsYW1i
ZGE8IFQyLFRhZyA+IGwyOwotICAgIHR5cGVkZWYgbGFtYmRhPCBUMyxUYWcgPiBsMzsKLSAgICB0
eXBlZGVmIGxhbWJkYTwgVDQsVGFnID4gbDQ7Ci0gICAgCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBs
MTo6aXNfbGUgaXNfbGUxOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgbDI6OmlzX2xlIGlzX2xlMjsK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIGwzOjppc19sZSBpc19sZTM7Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBsNDo6aXNfbGUgaXNfbGU0OwotICAgIAotCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6
OmxhbWJkYV9vcjwKLSAgICAgICAgICBpc19sZTE6OnZhbHVlLCBpc19sZTI6OnZhbHVlLCBpc19s
ZTM6OnZhbHVlLCBpc19sZTQ6OnZhbHVlCi0gICAgICAgID46OnR5cGUgaXNfbGU7Ci0KLSAgICB0
eXBlZGVmIGF1eDo6bGVfcmVzdWx0NDwKLSAgICAgICAgICBpc19sZSwgVGFnLCBGLCBsMSwgbDIs
IGwzLCBsNAotICAgICAgICA+IGxlX3Jlc3VsdF87Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIGxl
X3Jlc3VsdF86OnJlc3VsdF8gcmVzdWx0XzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGxlX3Jlc3Vs
dF86OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiwgdHlwZW5h
bWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVu
YW1lIFRhZwotICAgID4KLXN0cnVjdCBsYW1iZGE8Ci0gICAgICAgICAgYmluZDQ8IEYsVDEsVDIs
VDMsVDQgPgotICAgICAgICAsIFRhZwotICAgICAgICAsIGludF88NT4KLSAgICAgICAgPgotewot
ICAgIHR5cGVkZWYgZmFsc2VfIGlzX2xlOwotICAgIHR5cGVkZWYgYmluZDQ8Ci0gICAgICAgICAg
RgotICAgICAgICAsIFQxLCBUMiwgVDMsIFQ0Ci0gICAgICAgID4gcmVzdWx0XzsKLQotICAgIHR5
cGVkZWYgcmVzdWx0XyB0eXBlOwotfTsKLQotbmFtZXNwYWNlIGF1eCB7Ci0KLXRlbXBsYXRlPAot
ICAgICAgdHlwZW5hbWUgSXNMRSwgdHlwZW5hbWUgVGFnCi0gICAgLCB0ZW1wbGF0ZTwgdHlwZW5h
bWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIFA1
ID4gY2xhc3MgRgotICAgICwgdHlwZW5hbWUgTDEsIHR5cGVuYW1lIEwyLCB0eXBlbmFtZSBMMywg
dHlwZW5hbWUgTDQsIHR5cGVuYW1lIEw1Ci0gICAgPgotc3RydWN0IGxlX3Jlc3VsdDUKLXsKLSAg
ICB0eXBlZGVmIEY8Ci0gICAgICAgICAgdHlwZW5hbWUgTDE6OnR5cGUsIHR5cGVuYW1lIEwyOjp0
eXBlLCB0eXBlbmFtZSBMMzo6dHlwZQotICAgICAgICAsIHR5cGVuYW1lIEw0Ojp0eXBlLCB0eXBl
bmFtZSBMNTo6dHlwZQotICAgICAgICA+IHJlc3VsdF87Ci0KLSAgICB0eXBlZGVmIHJlc3VsdF8g
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVGFnCi0gICAgLCB0ZW1wbGF0
ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgUDQsIHR5
cGVuYW1lIFA1ID4gY2xhc3MgRgotICAgICwgdHlwZW5hbWUgTDEsIHR5cGVuYW1lIEwyLCB0eXBl
bmFtZSBMMywgdHlwZW5hbWUgTDQsIHR5cGVuYW1lIEw1Ci0gICAgPgotc3RydWN0IGxlX3Jlc3Vs
dDU8IHRydWVfLFRhZyxGLEwxLEwyLEwzLEw0LEw1ID4KLXsKLSAgICB0eXBlZGVmIGJpbmQ1PAot
ICAgICAgICAgIHF1b3RlNTwgRixUYWcgPgotICAgICAgICAsIHR5cGVuYW1lIEwxOjpyZXN1bHRf
LCB0eXBlbmFtZSBMMjo6cmVzdWx0XywgdHlwZW5hbWUgTDM6OnJlc3VsdF8KLSAgICAgICAgLCB0
eXBlbmFtZSBMNDo6cmVzdWx0XywgdHlwZW5hbWUgTDU6OnJlc3VsdF8KLSAgICAgICAgPiByZXN1
bHRfOwotCi0gICAgdHlwZWRlZiBtcGw6OnByb3RlY3Q8cmVzdWx0Xz4gdHlwZTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIGF1eAotCi10ZW1wbGF0ZTwKLSAgICAgIHRlbXBsYXRlPAotICAgICAgICAg
IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIFA0Ci0gICAg
ICAgICwgdHlwZW5hbWUgUDUKLSAgICAgICAgPgotICAgICAgY2xhc3MgRgotICAgICwgdHlwZW5h
bWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1
Ci0gICAgLCB0eXBlbmFtZSBUYWcKLSAgICA+Ci1zdHJ1Y3QgbGFtYmRhPAotICAgICAgICAgIEY8
IFQxLFQyLFQzLFQ0LFQ1ID4KLSAgICAgICAgLCBUYWcKLSAgICAgICAgLCBpbnRfPDU+Ci0gICAg
ICAgID4KLXsKLSAgICB0eXBlZGVmIGxhbWJkYTwgVDEsVGFnID4gbDE7Ci0gICAgdHlwZWRlZiBs
YW1iZGE8IFQyLFRhZyA+IGwyOwotICAgIHR5cGVkZWYgbGFtYmRhPCBUMyxUYWcgPiBsMzsKLSAg
ICB0eXBlZGVmIGxhbWJkYTwgVDQsVGFnID4gbDQ7Ci0gICAgdHlwZWRlZiBsYW1iZGE8IFQ1LFRh
ZyA+IGw1OwotICAgIAotICAgIHR5cGVkZWYgdHlwZW5hbWUgbDE6OmlzX2xlIGlzX2xlMTsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIGwyOjppc19sZSBpc19sZTI7Ci0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBsMzo6aXNfbGUgaXNfbGUzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgbDQ6OmlzX2xlIGlzX2xl
NDsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGw1Ojppc19sZSBpc19sZTU7Ci0gICAgCi0KLSAgICB0
eXBlZGVmIHR5cGVuYW1lIGF1eDo6bGFtYmRhX29yPAotICAgICAgICAgIGlzX2xlMTo6dmFsdWUs
IGlzX2xlMjo6dmFsdWUsIGlzX2xlMzo6dmFsdWUsIGlzX2xlNDo6dmFsdWUKLSAgICAgICAgLCBp
c19sZTU6OnZhbHVlCi0gICAgICAgID46OnR5cGUgaXNfbGU7Ci0KLSAgICB0eXBlZGVmIGF1eDo6
bGVfcmVzdWx0NTwKLSAgICAgICAgICBpc19sZSwgVGFnLCBGLCBsMSwgbDIsIGwzLCBsNCwgbDUK
LSAgICAgICAgPiBsZV9yZXN1bHRfOwotCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBsZV9yZXN1bHRf
OjpyZXN1bHRfIHJlc3VsdF87Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBsZV9yZXN1bHRfOjp0eXBl
IHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBUNQot
ICAgICwgdHlwZW5hbWUgVGFnCi0gICAgPgotc3RydWN0IGxhbWJkYTwKLSAgICAgICAgICBiaW5k
NTwgRixUMSxUMixUMyxUNCxUNSA+Ci0gICAgICAgICwgVGFnCi0gICAgICAgICwgaW50Xzw2Pgot
ICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiBmYWxzZV8gaXNfbGU7Ci0gICAgdHlwZWRlZiBiaW5k
NTwKLSAgICAgICAgICBGCi0gICAgICAgICwgVDEsIFQyLCBUMywgVDQsIFQ1Ci0gICAgICAgID4g
cmVzdWx0XzsKLQotICAgIHR5cGVkZWYgcmVzdWx0XyB0eXBlOwotfTsKLQotLy8vIHNwZWNpYWwg
Y2FzZSBmb3IgJ3Byb3RlY3QnCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgVGFnID4K
LXN0cnVjdCBsYW1iZGE8IG1wbDo6cHJvdGVjdDxUPixUYWcsIGludF88MT4gPgotewotICAgIHR5
cGVkZWYgZmFsc2VfIGlzX2xlOwotICAgIHR5cGVkZWYgbXBsOjpwcm90ZWN0PFQ+IHJlc3VsdF87
Ci0gICAgdHlwZWRlZiByZXN1bHRfIHR5cGU7Ci19OwotCi0vLy8gc3BlY2lhbGl6YXRpb25zIGZv
ciB0aGUgbWFpbiAnYmluZCcgZm9ybQotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIHR5
cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0
eXBlbmFtZSBUNQotICAgICwgdHlwZW5hbWUgVGFnCi0gICAgPgotc3RydWN0IGxhbWJkYTwKLSAg
ICAgICAgICBiaW5kPCBGLFQxLFQyLFQzLFQ0LFQ1ID4KLSAgICAgICAgLCBUYWcKLSAgICAgICAg
LCBpbnRfPDY+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIGZhbHNlXyBpc19sZTsKLSAgICB0
eXBlZGVmIGJpbmQ8IEYsVDEsVDIsVDMsVDQsVDUgPiByZXN1bHRfOwotICAgIHR5cGVkZWYgcmVz
dWx0XyB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGCi0gICAgLCB0eXBl
bmFtZSBUYWcxCi0gICAgLCB0eXBlbmFtZSBUYWcyCi0gICAgLCB0eXBlbmFtZSBBcml0eQotICAg
ID4KLXN0cnVjdCBsYW1iZGE8Ci0gICAgICAgICAgbGFtYmRhPCBGLFRhZzEsQXJpdHkgPgotICAg
ICAgICAsIFRhZzIKLSAgICAgICAgLCBpbnRfPDM+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVm
IGxhbWJkYTwgRixUYWcyID4gbDE7Ci0gICAgdHlwZWRlZiBsYW1iZGE8IFRhZzEsVGFnMiA+IGwy
OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgbDE6OmlzX2xlIGlzX2xlOwotICAgIHR5cGVkZWYgYmlu
ZDE8IHF1b3RlMTxhdXg6OnRlbXBsYXRlX2FyaXR5PiwgdHlwZW5hbWUgbDE6OnJlc3VsdF8gPiBh
cml0eV87Ci0gICAgdHlwZWRlZiBsYW1iZGE8IHR5cGVuYW1lIGlmXzwgaXNfbGUsYXJpdHlfLEFy
aXR5ID46OnR5cGUsIFRhZzIgPiBsMzsKLSAgICB0eXBlZGVmIGF1eDo6bGVfcmVzdWx0Mzxpc19s
ZSwgVGFnMiwgbXBsOjpsYW1iZGEsIGwxLCBsMiwgbDM+IGxlX3Jlc3VsdF87Ci0gICAgdHlwZWRl
ZiB0eXBlbmFtZSBsZV9yZXN1bHRfOjpyZXN1bHRfIHJlc3VsdF87Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBsZV9yZXN1bHRfOjp0eXBlIHR5cGU7Ci19OwotCi1CT09TVF9NUExfQVVYX05BX1NQRUMy
KDIsIDMsIGxhbWJkYSkKLQotfX0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9ncmVhdGVyLmhw
cCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3By
ZXByb2Nlc3NlZC9nY2MvZ3JlYXRlci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDE0ZDhlMDhiZmYwMzZmZGU0OGM1Y2M5MmQ5YjE4MjdkMDYzMjgyZmQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9ncmVhdGVyLmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3Vy
dG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0vLwotCi0vLyBQcmVwcm9jZXNzZWQgdmVyc2lvbiBvZiAiYm9vc3QvbXBsL2dy
ZWF0ZXIuaHBwIiBoZWFkZXIKLS8vIC0tIERPIE5PVCBtb2RpZnkgYnkgaGFuZCEKLQotbmFtZXNw
YWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUg
VGFnMQotICAgICwgdHlwZW5hbWUgVGFnMgotICAgID4KLXN0cnVjdCBncmVhdGVyX2ltcGwKLSAg
ICA6IGlmX2M8Ci0gICAgICAgICAgKCBCT09TVF9NUExfQVVYX05FU1RFRF9WQUxVRV9XS05EKGlu
dCwgVGFnMSkKLSAgICAgICAgICAgICAgPiBCT09TVF9NUExfQVVYX05FU1RFRF9WQUxVRV9XS05E
KGludCwgVGFnMikKLSAgICAgICAgICAgICkKLQotICAgICAgICAsIGF1eDo6Y2FzdDJuZF9pbXBs
PCBncmVhdGVyX2ltcGw8IFRhZzEsVGFnMSA+LFRhZzEsIFRhZzIgPgotICAgICAgICAsIGF1eDo6
Y2FzdDFzdF9pbXBsPCBncmVhdGVyX2ltcGw8IFRhZzIsVGFnMiA+LFRhZzEsIFRhZzIgPgotICAg
ICAgICA+Ojp0eXBlCi17Ci19OwotCi0vLy8gZm9yIERpZ2l0YWwgTWFycyBDKysvY29tcGlsZXJz
IHdpdGggbm8gQ1RQUy9UVFAgc3VwcG9ydAotdGVtcGxhdGU8PiBzdHJ1Y3QgZ3JlYXRlcl9pbXBs
PCBuYSxuYSA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFUxLCB0eXBlbmFtZSBVMiA+IHN0
cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBhcHBseSB0eXBlOwotICAgICAgICBC
T09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1ZSAgPSAwKTsKLSAgICB9OwotfTsKLQotdGVt
cGxhdGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBncmVhdGVyX2ltcGw8IG5hLFRhZyA+Ci17Ci0g
ICAgdGVtcGxhdGU8IHR5cGVuYW1lIFUxLCB0eXBlbmFtZSBVMiA+IHN0cnVjdCBhcHBseQotICAg
IHsKLSAgICAgICAgdHlwZWRlZiBhcHBseSB0eXBlOwotICAgICAgICBCT09TVF9TVEFUSUNfQ09O
U1RBTlQoaW50LCB2YWx1ZSAgPSAwKTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1l
IFRhZyA+IHN0cnVjdCBncmVhdGVyX2ltcGw8IFRhZyxuYSA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5
cGVuYW1lIFUxLCB0eXBlbmFtZSBVMiA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlw
ZWRlZiBhcHBseSB0eXBlOwotICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1
ZSAgPSAwKTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgZ3Jl
YXRlcl90YWcKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFQ6OnRhZyB0eXBlOwotfTsKLQotdGVt
cGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKE4xKQotICAgICwg
dHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShOMikKLSAgICA+Ci1zdHJ1Y3QgZ3JlYXRl
cgotCi0gICAgOiBncmVhdGVyX2ltcGw8Ci0gICAgICAgICAgdHlwZW5hbWUgZ3JlYXRlcl90YWc8
TjE+Ojp0eXBlCi0gICAgICAgICwgdHlwZW5hbWUgZ3JlYXRlcl90YWc8TjI+Ojp0eXBlCi0gICAg
ICAgID46OnRlbXBsYXRlIGFwcGx5PCBOMSxOMiA+Ojp0eXBlCi17Ci0gICAgQk9PU1RfTVBMX0FV
WF9MQU1CREFfU1VQUE9SVCgyLCBncmVhdGVyLCAoTjEsIE4yKSkKLQotfTsKLQotQk9PU1RfTVBM
X0FVWF9OQV9TUEVDMigyLCAyLCBncmVhdGVyKQotCi19fQotCi1uYW1lc3BhY2UgYm9vc3QgeyBu
YW1lc3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8Pgotc3RydWN0IGdyZWF0ZXJfaW1wbDwgaW50ZWdy
YWxfY190YWcsaW50ZWdyYWxfY190YWcgPgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBOMSwg
dHlwZW5hbWUgTjIgPiBzdHJ1Y3QgYXBwbHkKLQotICAgICAgICA6IGJvb2xfPCAoIEJPT1NUX01Q
TF9BVVhfVkFMVUVfV0tORChOMSk6OnZhbHVlID4gQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05EKE4y
KTo6dmFsdWUgKSA+Ci0gICAgewotICAgIH07Ci19OwotCi19fQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2Vk
L2djYy9ncmVhdGVyX2VxdWFsLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9nY2MvZ3JlYXRlcl9lcXVhbC5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MDNmOTE4NGEwMzQzZjlmYTEzOGM4YjZkNzA0
ZGFiM2IxMmQ1ZGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJl
cHJvY2Vzc2VkL2djYy9ncmVhdGVyX2VxdWFsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICsw
LDAgQEAKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8g
RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4w
LiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQg
Ci0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotCi0vLyBQcmVw
cm9jZXNzZWQgdmVyc2lvbiBvZiAiYm9vc3QvbXBsL2dyZWF0ZXJfZXF1YWwuaHBwIiBoZWFkZXIK
LS8vIC0tIERPIE5PVCBtb2RpZnkgYnkgaGFuZCEKLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNw
YWNlIG1wbCB7Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVGFnMQotICAgICwgdHlwZW5h
bWUgVGFnMgotICAgID4KLXN0cnVjdCBncmVhdGVyX2VxdWFsX2ltcGwKLSAgICA6IGlmX2M8Ci0g
ICAgICAgICAgKCBCT09TVF9NUExfQVVYX05FU1RFRF9WQUxVRV9XS05EKGludCwgVGFnMSkKLSAg
ICAgICAgICAgICAgPiBCT09TVF9NUExfQVVYX05FU1RFRF9WQUxVRV9XS05EKGludCwgVGFnMikK
LSAgICAgICAgICAgICkKLQotICAgICAgICAsIGF1eDo6Y2FzdDJuZF9pbXBsPCBncmVhdGVyX2Vx
dWFsX2ltcGw8IFRhZzEsVGFnMSA+LFRhZzEsIFRhZzIgPgotICAgICAgICAsIGF1eDo6Y2FzdDFz
dF9pbXBsPCBncmVhdGVyX2VxdWFsX2ltcGw8IFRhZzIsVGFnMiA+LFRhZzEsIFRhZzIgPgotICAg
ICAgICA+Ojp0eXBlCi17Ci19OwotCi0vLy8gZm9yIERpZ2l0YWwgTWFycyBDKysvY29tcGlsZXJz
IHdpdGggbm8gQ1RQUy9UVFAgc3VwcG9ydAotdGVtcGxhdGU8PiBzdHJ1Y3QgZ3JlYXRlcl9lcXVh
bF9pbXBsPCBuYSxuYSA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFUxLCB0eXBlbmFtZSBV
MiA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBhcHBseSB0eXBlOwotICAg
ICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1ZSAgPSAwKTsKLSAgICB9OwotfTsK
LQotdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBncmVhdGVyX2VxdWFsX2ltcGw8IG5h
LFRhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFUxLCB0eXBlbmFtZSBVMiA+IHN0cnVj
dCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBhcHBseSB0eXBlOwotICAgICAgICBCT09T
VF9TVEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1ZSAgPSAwKTsKLSAgICB9OwotfTsKLQotdGVtcGxh
dGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBncmVhdGVyX2VxdWFsX2ltcGw8IFRhZyxuYSA+Ci17
Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFUxLCB0eXBlbmFtZSBVMiA+IHN0cnVjdCBhcHBseQot
ICAgIHsKLSAgICAgICAgdHlwZWRlZiBhcHBseSB0eXBlOwotICAgICAgICBCT09TVF9TVEFUSUNf
Q09OU1RBTlQoaW50LCB2YWx1ZSAgPSAwKTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8IHR5cGVu
YW1lIFQgPiBzdHJ1Y3QgZ3JlYXRlcl9lcXVhbF90YWcKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IFQ6OnRhZyB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09TVF9NUExf
QVVYX05BX1BBUkFNKE4xKQotICAgICwgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShO
MikKLSAgICA+Ci1zdHJ1Y3QgZ3JlYXRlcl9lcXVhbAotCi0gICAgOiBncmVhdGVyX2VxdWFsX2lt
cGw8Ci0gICAgICAgICAgdHlwZW5hbWUgZ3JlYXRlcl9lcXVhbF90YWc8TjE+Ojp0eXBlCi0gICAg
ICAgICwgdHlwZW5hbWUgZ3JlYXRlcl9lcXVhbF90YWc8TjI+Ojp0eXBlCi0gICAgICAgID46OnRl
bXBsYXRlIGFwcGx5PCBOMSxOMiA+Ojp0eXBlCi17Ci0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFf
U1VQUE9SVCgyLCBncmVhdGVyX2VxdWFsLCAoTjEsIE4yKSkKLQotfTsKLQotQk9PU1RfTVBMX0FV
WF9OQV9TUEVDMigyLCAyLCBncmVhdGVyX2VxdWFsKQotCi19fQotCi1uYW1lc3BhY2UgYm9vc3Qg
eyBuYW1lc3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8Pgotc3RydWN0IGdyZWF0ZXJfZXF1YWxfaW1w
bDwgaW50ZWdyYWxfY190YWcsaW50ZWdyYWxfY190YWcgPgotewotICAgIHRlbXBsYXRlPCB0eXBl
bmFtZSBOMSwgdHlwZW5hbWUgTjIgPiBzdHJ1Y3QgYXBwbHkKLQotICAgICAgICA6IGJvb2xfPCAo
IEJPT1NUX01QTF9BVVhfVkFMVUVfV0tORChOMSk6OnZhbHVlID49IEJPT1NUX01QTF9BVVhfVkFM
VUVfV0tORChOMik6OnZhbHVlICkgPgotICAgIHsKLSAgICB9OwotfTsKLQotfX0KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3By
ZXByb2Nlc3NlZC9nY2MvaXRlcl9mb2xkX2lmX2ltcGwuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9pdGVyX2Zv
bGRfaWZfaW1wbC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NTE3OTU4NGQz
ZTc0OTIyMDQ4YWMzYWZiYjg1NDFlMzM3Zjc5MTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9pdGVyX2ZvbGRfaWZfaW1wbC5ocHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0
b3ZveSAyMDAxLTIwMDQKLS8vIENvcHlyaWdodCBEYXZpZCBBYnJhaGFtcyAyMDAxLTIwMDIKLS8v
Ci0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lv
biAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29w
eSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0KLS8v
IFByZXByb2Nlc3NlZCB2ZXJzaW9uIG9mICJib29zdC9tcGwvYXV4Xy9pdGVyX2ZvbGRfaWZfaW1w
bC5ocHAiIGhlYWRlcgotLy8gLS0gRE8gTk9UIG1vZGlmeSBieSBoYW5kIQotCi1uYW1lc3BhY2Ug
Ym9vc3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFtZXNwYWNlIGF1eCB7Ci0KLXRlbXBsYXRlPCB0eXBl
bmFtZSBJdGVyYXRvciwgdHlwZW5hbWUgU3RhdGUgPgotc3RydWN0IGl0ZXJfZm9sZF9pZl9udWxs
X3N0ZXAKLXsKLSAgICB0eXBlZGVmIFN0YXRlIHN0YXRlOwotICAgIHR5cGVkZWYgSXRlcmF0b3Ig
aXRlcmF0b3I7Ci19OwotCi10ZW1wbGF0ZTwgYm9vbCA+Ci1zdHJ1Y3QgaXRlcl9mb2xkX2lmX3N0
ZXBfaW1wbAotewotICAgIHRlbXBsYXRlPAotICAgICAgICAgIHR5cGVuYW1lIEl0ZXJhdG9yCi0g
ICAgICAgICwgdHlwZW5hbWUgU3RhdGUKLSAgICAgICAgLCB0eXBlbmFtZSBTdGF0ZU9wCi0gICAg
ICAgICwgdHlwZW5hbWUgSXRlcmF0b3JPcAotICAgICAgICA+Ci0gICAgc3RydWN0IHJlc3VsdF8K
LSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHkyPCBTdGF0ZU9wLFN0YXRlLEl0
ZXJhdG9yID46OnR5cGUgc3RhdGU7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3JP
cDo6dHlwZSBpdGVyYXRvcjsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IGl0ZXJf
Zm9sZF9pZl9zdGVwX2ltcGw8ZmFsc2U+Ci17Ci0gICAgdGVtcGxhdGU8Ci0gICAgICAgICAgdHlw
ZW5hbWUgSXRlcmF0b3IKLSAgICAgICAgLCB0eXBlbmFtZSBTdGF0ZQotICAgICAgICAsIHR5cGVu
YW1lIFN0YXRlT3AKLSAgICAgICAgLCB0eXBlbmFtZSBJdGVyYXRvck9wCi0gICAgICAgID4KLSAg
ICBzdHJ1Y3QgcmVzdWx0XwotICAgIHsKLSAgICAgICAgdHlwZWRlZiBTdGF0ZSBzdGF0ZTsKLSAg
ICAgICAgdHlwZWRlZiBJdGVyYXRvciBpdGVyYXRvcjsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8
Ci0gICAgICB0eXBlbmFtZSBJdGVyYXRvcgotICAgICwgdHlwZW5hbWUgU3RhdGUKLSAgICAsIHR5
cGVuYW1lIEZvcndhcmRPcAotICAgICwgdHlwZW5hbWUgUHJlZGljYXRlCi0gICAgPgotc3RydWN0
IGl0ZXJfZm9sZF9pZl9mb3J3YXJkX3N0ZXAKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5
MjwgUHJlZGljYXRlLFN0YXRlLEl0ZXJhdG9yID46OnR5cGUgbm90X2xhc3Q7Ci0gICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyX2ZvbGRfaWZfc3RlcF9pbXBsPAotICAgICAgICAgIEJPT1NUX01QTF9B
VVhfTVNWQ19WQUxVRV9XS05EKG5vdF9sYXN0KTo6dmFsdWUKLSAgICAgICAgPjo6dGVtcGxhdGUg
cmVzdWx0XzwgSXRlcmF0b3IsU3RhdGUsRm9yd2FyZE9wLCBtcGw6Om5leHQ8SXRlcmF0b3I+ID4g
aW1wbF87Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIGltcGxfOjpzdGF0ZSBzdGF0ZTsKLSAgICB0
eXBlZGVmIHR5cGVuYW1lIGltcGxfOjppdGVyYXRvciBpdGVyYXRvcjsKLX07Ci0KLXRlbXBsYXRl
PAotICAgICAgdHlwZW5hbWUgSXRlcmF0b3IKLSAgICAsIHR5cGVuYW1lIFN0YXRlCi0gICAgLCB0
eXBlbmFtZSBCYWNrd2FyZE9wCi0gICAgLCB0eXBlbmFtZSBQcmVkaWNhdGUKLSAgICA+Ci1zdHJ1
Y3QgaXRlcl9mb2xkX2lmX2JhY2t3YXJkX3N0ZXAKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFw
cGx5MjwgUHJlZGljYXRlLFN0YXRlLEl0ZXJhdG9yID46OnR5cGUgbm90X2xhc3Q7Ci0gICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyX2ZvbGRfaWZfc3RlcF9pbXBsPAotICAgICAgICAgIEJPT1NUX01Q
TF9BVVhfTVNWQ19WQUxVRV9XS05EKG5vdF9sYXN0KTo6dmFsdWUKLSAgICAgICAgPjo6dGVtcGxh
dGUgcmVzdWx0XzwgSXRlcmF0b3IsU3RhdGUsQmFja3dhcmRPcCwgaWRlbnRpdHk8SXRlcmF0b3I+
ID4gaW1wbF87Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIGltcGxfOjpzdGF0ZSBzdGF0ZTsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIGltcGxfOjppdGVyYXRvciBpdGVyYXRvcjsKLX07Ci0KLXRlbXBs
YXRlPAotICAgICAgdHlwZW5hbWUgSXRlcmF0b3IKLSAgICAsIHR5cGVuYW1lIFN0YXRlCi0gICAg
LCB0eXBlbmFtZSBGb3J3YXJkT3AKLSAgICAsIHR5cGVuYW1lIEZvcndhcmRQcmVkaWNhdGUKLSAg
ICAsIHR5cGVuYW1lIEJhY2t3YXJkT3AKLSAgICAsIHR5cGVuYW1lIEJhY2t3YXJkUHJlZGljYXRl
Ci0gICAgPgotc3RydWN0IGl0ZXJfZm9sZF9pZl9pbXBsCi17Ci0gcHJpdmF0ZToKLSAgICB0eXBl
ZGVmIGl0ZXJfZm9sZF9pZl9udWxsX3N0ZXA8IEl0ZXJhdG9yLFN0YXRlID4gZm9yd2FyZF9zdGVw
MDsKLSAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pZl9mb3J3YXJkX3N0ZXA8IHR5cGVuYW1lIGZvcndh
cmRfc3RlcDA6Oml0ZXJhdG9yLCB0eXBlbmFtZSBmb3J3YXJkX3N0ZXAwOjpzdGF0ZSwgRm9yd2Fy
ZE9wLCBGb3J3YXJkUHJlZGljYXRlID4gZm9yd2FyZF9zdGVwMTsKLSAgICB0eXBlZGVmIGl0ZXJf
Zm9sZF9pZl9mb3J3YXJkX3N0ZXA8IHR5cGVuYW1lIGZvcndhcmRfc3RlcDE6Oml0ZXJhdG9yLCB0
eXBlbmFtZSBmb3J3YXJkX3N0ZXAxOjpzdGF0ZSwgRm9yd2FyZE9wLCBGb3J3YXJkUHJlZGljYXRl
ID4gZm9yd2FyZF9zdGVwMjsKLSAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pZl9mb3J3YXJkX3N0ZXA8
IHR5cGVuYW1lIGZvcndhcmRfc3RlcDI6Oml0ZXJhdG9yLCB0eXBlbmFtZSBmb3J3YXJkX3N0ZXAy
OjpzdGF0ZSwgRm9yd2FyZE9wLCBGb3J3YXJkUHJlZGljYXRlID4gZm9yd2FyZF9zdGVwMzsKLSAg
ICB0eXBlZGVmIGl0ZXJfZm9sZF9pZl9mb3J3YXJkX3N0ZXA8IHR5cGVuYW1lIGZvcndhcmRfc3Rl
cDM6Oml0ZXJhdG9yLCB0eXBlbmFtZSBmb3J3YXJkX3N0ZXAzOjpzdGF0ZSwgRm9yd2FyZE9wLCBG
b3J3YXJkUHJlZGljYXRlID4gZm9yd2FyZF9zdGVwNDsKLSAgICAKLQotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaWZfPAotICAgICAgICAgIHR5cGVuYW1lIGZvcndhcmRfc3RlcDQ6Om5vdF9sYXN0Ci0g
ICAgICAgICwgaXRlcl9mb2xkX2lmX2ltcGw8Ci0gICAgICAgICAgICAgIHR5cGVuYW1lIGZvcndh
cmRfc3RlcDQ6Oml0ZXJhdG9yCi0gICAgICAgICAgICAsIHR5cGVuYW1lIGZvcndhcmRfc3RlcDQ6
OnN0YXRlCi0gICAgICAgICAgICAsIEZvcndhcmRPcAotICAgICAgICAgICAgLCBGb3J3YXJkUHJl
ZGljYXRlCi0gICAgICAgICAgICAsIEJhY2t3YXJkT3AKLSAgICAgICAgICAgICwgQmFja3dhcmRQ
cmVkaWNhdGUKLSAgICAgICAgICAgID4KLSAgICAgICAgLCBpdGVyX2ZvbGRfaWZfbnVsbF9zdGVw
PAotICAgICAgICAgICAgICB0eXBlbmFtZSBmb3J3YXJkX3N0ZXA0OjppdGVyYXRvcgotICAgICAg
ICAgICAgLCB0eXBlbmFtZSBmb3J3YXJkX3N0ZXA0OjpzdGF0ZQotICAgICAgICAgICAgPgotICAg
ICAgICA+Ojp0eXBlIGJhY2t3YXJkX3N0ZXA0OwotCi0gICAgdHlwZWRlZiBpdGVyX2ZvbGRfaWZf
YmFja3dhcmRfc3RlcDwgdHlwZW5hbWUgZm9yd2FyZF9zdGVwMzo6aXRlcmF0b3IsIHR5cGVuYW1l
IGJhY2t3YXJkX3N0ZXA0OjpzdGF0ZSwgQmFja3dhcmRPcCwgQmFja3dhcmRQcmVkaWNhdGUgPiBi
YWNrd2FyZF9zdGVwMzsKLSAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pZl9iYWNrd2FyZF9zdGVwPCB0
eXBlbmFtZSBmb3J3YXJkX3N0ZXAyOjppdGVyYXRvciwgdHlwZW5hbWUgYmFja3dhcmRfc3RlcDM6
OnN0YXRlLCBCYWNrd2FyZE9wLCBCYWNrd2FyZFByZWRpY2F0ZSA+IGJhY2t3YXJkX3N0ZXAyOwot
ICAgIHR5cGVkZWYgaXRlcl9mb2xkX2lmX2JhY2t3YXJkX3N0ZXA8IHR5cGVuYW1lIGZvcndhcmRf
c3RlcDE6Oml0ZXJhdG9yLCB0eXBlbmFtZSBiYWNrd2FyZF9zdGVwMjo6c3RhdGUsIEJhY2t3YXJk
T3AsIEJhY2t3YXJkUHJlZGljYXRlID4gYmFja3dhcmRfc3RlcDE7Ci0gICAgdHlwZWRlZiBpdGVy
X2ZvbGRfaWZfYmFja3dhcmRfc3RlcDwgdHlwZW5hbWUgZm9yd2FyZF9zdGVwMDo6aXRlcmF0b3Is
IHR5cGVuYW1lIGJhY2t3YXJkX3N0ZXAxOjpzdGF0ZSwgQmFja3dhcmRPcCwgQmFja3dhcmRQcmVk
aWNhdGUgPiBiYWNrd2FyZF9zdGVwMDsKLSAgICAKLQotIHB1YmxpYzoKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIGJhY2t3YXJkX3N0ZXAwOjpzdGF0ZSBzdGF0ZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IGJhY2t3YXJkX3N0ZXA0OjppdGVyYXRvciBpdGVyYXRvcjsKLX07Ci0KLX19fQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJl
cHJvY2Vzc2VkL2djYy9pdGVyX2ZvbGRfaW1wbC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2l0ZXJfZm9sZF9p
bXBsLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA1NzkwZTg2ZDY5YmI4MzJm
N2RmYzZmZTk0YjY2NTc4ZWU0NmIzMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
cGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2l0ZXJfZm9sZF9pbXBsLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDE4MCArMCwwIEBACi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAt
MjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNl
LCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQot
Ly8KLQotLy8gUHJlcHJvY2Vzc2VkIHZlcnNpb24gb2YgImJvb3N0L21wbC9hdXhfL2l0ZXJfZm9s
ZF9pbXBsLmhwcCIgaGVhZGVyCi0vLyAtLSBETyBOT1QgbW9kaWZ5IGJ5IGhhbmQhCi0KLW5hbWVz
cGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4IHsKLQotLy8vIGZvcndh
cmQgZGVjbGFyYXRpb24KLQotdGVtcGxhdGU8Ci0gICAgICBpbnQgTgotICAgICwgdHlwZW5hbWUg
Rmlyc3QKLSAgICAsIHR5cGVuYW1lIExhc3QKLSAgICAsIHR5cGVuYW1lIFN0YXRlCi0gICAgLCB0
eXBlbmFtZSBGb3J3YXJkT3AKLSAgICA+Ci1zdHJ1Y3QgaXRlcl9mb2xkX2ltcGw7Ci0KLXRlbXBs
YXRlPAotICAgICAgdHlwZW5hbWUgRmlyc3QKLSAgICAsIHR5cGVuYW1lIExhc3QKLSAgICAsIHR5
cGVuYW1lIFN0YXRlCi0gICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKLSAgICA+Ci1zdHJ1Y3QgaXRl
cl9mb2xkX2ltcGw8IDAsRmlyc3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgotewotICAgIHR5cGVk
ZWYgRmlyc3QgaXRlcjA7Ci0gICAgdHlwZWRlZiBTdGF0ZSBzdGF0ZTA7Ci0gICAgdHlwZWRlZiBz
dGF0ZTAgc3RhdGU7Ci0gICAgdHlwZWRlZiBpdGVyMCBpdGVyYXRvcjsKLX07Ci0KLXRlbXBsYXRl
PAotICAgICAgdHlwZW5hbWUgRmlyc3QKLSAgICAsIHR5cGVuYW1lIExhc3QKLSAgICAsIHR5cGVu
YW1lIFN0YXRlCi0gICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKLSAgICA+Ci1zdHJ1Y3QgaXRlcl9m
b2xkX2ltcGw8IDEsRmlyc3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgotewotICAgIHR5cGVkZWYg
Rmlyc3QgaXRlcjA7Ci0gICAgdHlwZWRlZiBTdGF0ZSBzdGF0ZTA7Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBhcHBseTI8IEZvcndhcmRPcCxzdGF0ZTAsaXRlcjAgPjo6dHlwZSBzdGF0ZTE7Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBtcGw6Om5leHQ8aXRlcjA+Ojp0eXBlIGl0ZXIxOwotICAgIAotCi0g
ICAgdHlwZWRlZiBzdGF0ZTEgc3RhdGU7Ci0gICAgdHlwZWRlZiBpdGVyMSBpdGVyYXRvcjsKLX07
Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRmlyc3QKLSAgICAsIHR5cGVuYW1lIExhc3QK
LSAgICAsIHR5cGVuYW1lIFN0YXRlCi0gICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKLSAgICA+Ci1z
dHJ1Y3QgaXRlcl9mb2xkX2ltcGw8IDIsRmlyc3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgotewot
ICAgIHR5cGVkZWYgRmlyc3QgaXRlcjA7Ci0gICAgdHlwZWRlZiBTdGF0ZSBzdGF0ZTA7Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBhcHBseTI8IEZvcndhcmRPcCxzdGF0ZTAsaXRlcjAgPjo6dHlwZSBz
dGF0ZTE7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6Om5leHQ8aXRlcjA+Ojp0eXBlIGl0ZXIx
OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHkyPCBGb3J3YXJkT3Asc3RhdGUxLGl0ZXIxID46
OnR5cGUgc3RhdGUyOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgbXBsOjpuZXh0PGl0ZXIxPjo6dHlw
ZSBpdGVyMjsKLSAgICAKLQotICAgIHR5cGVkZWYgc3RhdGUyIHN0YXRlOwotICAgIHR5cGVkZWYg
aXRlcjIgaXRlcmF0b3I7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEZpcnN0Ci0g
ICAgLCB0eXBlbmFtZSBMYXN0Ci0gICAgLCB0eXBlbmFtZSBTdGF0ZQotICAgICwgdHlwZW5hbWUg
Rm9yd2FyZE9wCi0gICAgPgotc3RydWN0IGl0ZXJfZm9sZF9pbXBsPCAzLEZpcnN0LExhc3QsU3Rh
dGUsRm9yd2FyZE9wID4KLXsKLSAgICB0eXBlZGVmIEZpcnN0IGl0ZXIwOwotICAgIHR5cGVkZWYg
U3RhdGUgc3RhdGUwOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHkyPCBGb3J3YXJkT3Asc3Rh
dGUwLGl0ZXIwID46OnR5cGUgc3RhdGUxOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgbXBsOjpuZXh0
PGl0ZXIwPjo6dHlwZSBpdGVyMTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5MjwgRm9yd2Fy
ZE9wLHN0YXRlMSxpdGVyMSA+Ojp0eXBlIHN0YXRlMjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIG1w
bDo6bmV4dDxpdGVyMT46OnR5cGUgaXRlcjI7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseTI8
IEZvcndhcmRPcCxzdGF0ZTIsaXRlcjIgPjo6dHlwZSBzdGF0ZTM7Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBtcGw6Om5leHQ8aXRlcjI+Ojp0eXBlIGl0ZXIzOwotICAgIAotCi0gICAgdHlwZWRlZiBz
dGF0ZTMgc3RhdGU7Ci0gICAgdHlwZWRlZiBpdGVyMyBpdGVyYXRvcjsKLX07Ci0KLXRlbXBsYXRl
PAotICAgICAgdHlwZW5hbWUgRmlyc3QKLSAgICAsIHR5cGVuYW1lIExhc3QKLSAgICAsIHR5cGVu
YW1lIFN0YXRlCi0gICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKLSAgICA+Ci1zdHJ1Y3QgaXRlcl9m
b2xkX2ltcGw8IDQsRmlyc3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgotewotICAgIHR5cGVkZWYg
Rmlyc3QgaXRlcjA7Ci0gICAgdHlwZWRlZiBTdGF0ZSBzdGF0ZTA7Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBhcHBseTI8IEZvcndhcmRPcCxzdGF0ZTAsaXRlcjAgPjo6dHlwZSBzdGF0ZTE7Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBtcGw6Om5leHQ8aXRlcjA+Ojp0eXBlIGl0ZXIxOwotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgYXBwbHkyPCBGb3J3YXJkT3Asc3RhdGUxLGl0ZXIxID46OnR5cGUgc3RhdGUy
OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgbXBsOjpuZXh0PGl0ZXIxPjo6dHlwZSBpdGVyMjsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5MjwgRm9yd2FyZE9wLHN0YXRlMixpdGVyMiA+Ojp0eXBl
IHN0YXRlMzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIG1wbDo6bmV4dDxpdGVyMj46OnR5cGUgaXRl
cjM7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseTI8IEZvcndhcmRPcCxzdGF0ZTMsaXRlcjMg
Pjo6dHlwZSBzdGF0ZTQ7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6Om5leHQ8aXRlcjM+Ojp0
eXBlIGl0ZXI0OwotICAgIAotCi0gICAgdHlwZWRlZiBzdGF0ZTQgc3RhdGU7Ci0gICAgdHlwZWRl
ZiBpdGVyNCBpdGVyYXRvcjsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgaW50IE4KLSAgICAsIHR5
cGVuYW1lIEZpcnN0Ci0gICAgLCB0eXBlbmFtZSBMYXN0Ci0gICAgLCB0eXBlbmFtZSBTdGF0ZQot
ICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCi0gICAgPgotc3RydWN0IGl0ZXJfZm9sZF9pbXBsCi17
Ci0gICAgdHlwZWRlZiBpdGVyX2ZvbGRfaW1wbDwKLSAgICAgICAgICA0Ci0gICAgICAgICwgRmly
c3QKLSAgICAgICAgLCBMYXN0Ci0gICAgICAgICwgU3RhdGUKLSAgICAgICAgLCBGb3J3YXJkT3AK
LSAgICAgICAgPiBjaHVua187Ci0KLSAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pbXBsPAotICAgICAg
ICAgICggKE4gLSA0KSA8IDAgPyAwIDogTiAtIDQgKQotICAgICAgICAsIHR5cGVuYW1lIGNodW5r
Xzo6aXRlcmF0b3IKLSAgICAgICAgLCBMYXN0Ci0gICAgICAgICwgdHlwZW5hbWUgY2h1bmtfOjpz
dGF0ZQotICAgICAgICAsIEZvcndhcmRPcAotICAgICAgICA+IHJlc187Ci0KLSAgICB0eXBlZGVm
IHR5cGVuYW1lIHJlc186OnN0YXRlIHN0YXRlOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzXzo6
aXRlcmF0b3IgaXRlcmF0b3I7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEZpcnN0
Ci0gICAgLCB0eXBlbmFtZSBMYXN0Ci0gICAgLCB0eXBlbmFtZSBTdGF0ZQotICAgICwgdHlwZW5h
bWUgRm9yd2FyZE9wCi0gICAgPgotc3RydWN0IGl0ZXJfZm9sZF9pbXBsPCAtMSxGaXJzdCxMYXN0
LFN0YXRlLEZvcndhcmRPcCA+Ci0gICAgOiBpdGVyX2ZvbGRfaW1wbDwKLSAgICAgICAgICAtMQot
ICAgICAgICAsIHR5cGVuYW1lIG1wbDo6bmV4dDxGaXJzdD46OnR5cGUKLSAgICAgICAgLCBMYXN0
Ci0gICAgICAgICwgdHlwZW5hbWUgYXBwbHkyPCBGb3J3YXJkT3AsU3RhdGUsRmlyc3QgPjo6dHlw
ZQotICAgICAgICAsIEZvcndhcmRPcAotICAgICAgICA+Ci17Ci19OwotCi10ZW1wbGF0ZTwKLSAg
ICAgIHR5cGVuYW1lIExhc3QKLSAgICAsIHR5cGVuYW1lIFN0YXRlCi0gICAgLCB0eXBlbmFtZSBG
b3J3YXJkT3AKLSAgICA+Ci1zdHJ1Y3QgaXRlcl9mb2xkX2ltcGw8IC0xLExhc3QsTGFzdCxTdGF0
ZSxGb3J3YXJkT3AgPgotewotICAgIHR5cGVkZWYgU3RhdGUgc3RhdGU7Ci0gICAgdHlwZWRlZiBM
YXN0IGl0ZXJhdG9yOwotfTsKLQotfX19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2xlc3MuaHBw
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJl
cHJvY2Vzc2VkL2djYy9sZXNzLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZl
M2NkMTdjNDkxOTA2YjdiNGUxZDZjYmY4NzAxNDAyZmM3ZDQyMi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL2xlc3MuaHBwCisrKyAvZGV2
L251bGwKQEAgLTEsOTQgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAy
MDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkKLS8vCi0KLS8vIFByZXByb2Nlc3NlZCB2ZXJzaW9uIG9mICJib29zdC9tcGwvbGVzcy5ocHAi
IGhlYWRlcgotLy8gLS0gRE8gTk9UIG1vZGlmeSBieSBoYW5kIQotCi1uYW1lc3BhY2UgYm9vc3Qg
eyBuYW1lc3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUYWcxCi0gICAg
LCB0eXBlbmFtZSBUYWcyCi0gICAgPgotc3RydWN0IGxlc3NfaW1wbAotICAgIDogaWZfYzwKLSAg
ICAgICAgICAoIEJPT1NUX01QTF9BVVhfTkVTVEVEX1ZBTFVFX1dLTkQoaW50LCBUYWcxKQotICAg
ICAgICAgICAgICA+IEJPT1NUX01QTF9BVVhfTkVTVEVEX1ZBTFVFX1dLTkQoaW50LCBUYWcyKQot
ICAgICAgICAgICAgKQotCi0gICAgICAgICwgYXV4OjpjYXN0Mm5kX2ltcGw8IGxlc3NfaW1wbDwg
VGFnMSxUYWcxID4sVGFnMSwgVGFnMiA+Ci0gICAgICAgICwgYXV4OjpjYXN0MXN0X2ltcGw8IGxl
c3NfaW1wbDwgVGFnMixUYWcyID4sVGFnMSwgVGFnMiA+Ci0gICAgICAgID46OnR5cGUKLXsKLX07
Ci0KLS8vLyBmb3IgRGlnaXRhbCBNYXJzIEMrKy9jb21waWxlcnMgd2l0aCBubyBDVFBTL1RUUCBz
dXBwb3J0Ci10ZW1wbGF0ZTw+IHN0cnVjdCBsZXNzX2ltcGw8IG5hLG5hID4KLXsKLSAgICB0ZW1w
bGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyID4gc3RydWN0IGFwcGx5Ci0gICAgewotICAg
ICAgICB0eXBlZGVmIGFwcGx5IHR5cGU7Ci0gICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChp
bnQsIHZhbHVlICA9IDApOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4g
c3RydWN0IGxlc3NfaW1wbDwgbmEsVGFnID4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVTEs
IHR5cGVuYW1lIFUyID4gc3RydWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIGFwcGx5
IHR5cGU7Ci0gICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVlICA9IDApOwot
ICAgIH07Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4gc3RydWN0IGxlc3NfaW1wbDwg
VGFnLG5hID4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyID4gc3Ry
dWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIGFwcGx5IHR5cGU7Ci0gICAgICAgIEJP
T1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVlICA9IDApOwotICAgIH07Ci19OwotCi10ZW1w
bGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBsZXNzX3RhZwotewotICAgIHR5cGVkZWYgdHlwZW5h
bWUgVDo6dGFnIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01Q
TF9BVVhfTkFfUEFSQU0oTjEpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFN
KE4yKQotICAgID4KLXN0cnVjdCBsZXNzCi0KLSAgICA6IGxlc3NfaW1wbDwKLSAgICAgICAgICB0
eXBlbmFtZSBsZXNzX3RhZzxOMT46OnR5cGUKLSAgICAgICAgLCB0eXBlbmFtZSBsZXNzX3RhZzxO
Mj46OnR5cGUKLSAgICAgICAgPjo6dGVtcGxhdGUgYXBwbHk8IE4xLE4yID46OnR5cGUKLXsKLSAg
ICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUKDIsIGxlc3MsIChOMSwgTjIpKQotCi19Owot
Ci1CT09TVF9NUExfQVVYX05BX1NQRUMyKDIsIDIsIGxlc3MpCi0KLX19Ci0KLW5hbWVzcGFjZSBi
b29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgbGVzc19pbXBsPCBp
bnRlZ3JhbF9jX3RhZyxpbnRlZ3JhbF9jX3RhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1l
IE4xLCB0eXBlbmFtZSBOMiA+IHN0cnVjdCBhcHBseQotCi0gICAgICAgIDogYm9vbF88ICggQk9P
U1RfTVBMX0FVWF9WQUxVRV9XS05EKE4yKTo6dmFsdWUgPiBCT09TVF9NUExfQVVYX1ZBTFVFX1dL
TkQoTjEpOjp2YWx1ZSApID4KLSAgICB7Ci0gICAgfTsKLX07Ci0KLX19CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9j
ZXNzZWQvZ2NjL2xlc3NfZXF1YWwuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9sZXNzX2VxdWFsLmhwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EyODk0ZjZmOTNmZWRhZmRlZWIyNmIyNzUwYmE4
ODFjMGFmZDc2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVw
cm9jZXNzZWQvZ2NjL2xlc3NfZXF1YWwuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBA
QAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0
cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAot
Ly8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8v
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0KLS8vIFByZXByb2Nl
c3NlZCB2ZXJzaW9uIG9mICJib29zdC9tcGwvbGVzc19lcXVhbC5ocHAiIGhlYWRlcgotLy8gLS0g
RE8gTk9UIG1vZGlmeSBieSBoYW5kIQotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBs
IHsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUYWcxCi0gICAgLCB0eXBlbmFtZSBUYWcy
Ci0gICAgPgotc3RydWN0IGxlc3NfZXF1YWxfaW1wbAotICAgIDogaWZfYzwKLSAgICAgICAgICAo
IEJPT1NUX01QTF9BVVhfTkVTVEVEX1ZBTFVFX1dLTkQoaW50LCBUYWcxKQotICAgICAgICAgICAg
ICA+IEJPT1NUX01QTF9BVVhfTkVTVEVEX1ZBTFVFX1dLTkQoaW50LCBUYWcyKQotICAgICAgICAg
ICAgKQotCi0gICAgICAgICwgYXV4OjpjYXN0Mm5kX2ltcGw8IGxlc3NfZXF1YWxfaW1wbDwgVGFn
MSxUYWcxID4sVGFnMSwgVGFnMiA+Ci0gICAgICAgICwgYXV4OjpjYXN0MXN0X2ltcGw8IGxlc3Nf
ZXF1YWxfaW1wbDwgVGFnMixUYWcyID4sVGFnMSwgVGFnMiA+Ci0gICAgICAgID46OnR5cGUKLXsK
LX07Ci0KLS8vLyBmb3IgRGlnaXRhbCBNYXJzIEMrKy9jb21waWxlcnMgd2l0aCBubyBDVFBTL1RU
UCBzdXBwb3J0Ci10ZW1wbGF0ZTw+IHN0cnVjdCBsZXNzX2VxdWFsX2ltcGw8IG5hLG5hID4KLXsK
LSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyID4gc3RydWN0IGFwcGx5Ci0g
ICAgewotICAgICAgICB0eXBlZGVmIGFwcGx5IHR5cGU7Ci0gICAgICAgIEJPT1NUX1NUQVRJQ19D
T05TVEFOVChpbnQsIHZhbHVlICA9IDApOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5h
bWUgVGFnID4gc3RydWN0IGxlc3NfZXF1YWxfaW1wbDwgbmEsVGFnID4KLXsKLSAgICB0ZW1wbGF0
ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyID4gc3RydWN0IGFwcGx5Ci0gICAgewotICAgICAg
ICB0eXBlZGVmIGFwcGx5IHR5cGU7Ci0gICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQs
IHZhbHVlICA9IDApOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4gc3Ry
dWN0IGxlc3NfZXF1YWxfaW1wbDwgVGFnLG5hID4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUg
VTEsIHR5cGVuYW1lIFUyID4gc3RydWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIGFw
cGx5IHR5cGU7Ci0gICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVlICA9IDAp
OwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBsZXNzX2VxdWFs
X3RhZwotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgVDo6dGFnIHR5cGU7Ci19OwotCi10ZW1wbGF0
ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oTjEpCi0gICAgLCB0eXBl
bmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKE4yKQotICAgID4KLXN0cnVjdCBsZXNzX2VxdWFs
Ci0KLSAgICA6IGxlc3NfZXF1YWxfaW1wbDwKLSAgICAgICAgICB0eXBlbmFtZSBsZXNzX2VxdWFs
X3RhZzxOMT46OnR5cGUKLSAgICAgICAgLCB0eXBlbmFtZSBsZXNzX2VxdWFsX3RhZzxOMj46OnR5
cGUKLSAgICAgICAgPjo6dGVtcGxhdGUgYXBwbHk8IE4xLE4yID46OnR5cGUKLXsKLSAgICBCT09T
VF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUKDIsIGxlc3NfZXF1YWwsIChOMSwgTjIpKQotCi19Owot
Ci1CT09TVF9NUExfQVVYX05BX1NQRUMyKDIsIDIsIGxlc3NfZXF1YWwpCi0KLX19Ci0KLW5hbWVz
cGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgbGVzc19l
cXVhbF9pbXBsPCBpbnRlZ3JhbF9jX3RhZyxpbnRlZ3JhbF9jX3RhZyA+Ci17Ci0gICAgdGVtcGxh
dGU8IHR5cGVuYW1lIE4xLCB0eXBlbmFtZSBOMiA+IHN0cnVjdCBhcHBseQotCi0gICAgICAgIDog
Ym9vbF88ICggQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05EKE4xKTo6dmFsdWUgPD0gQk9PU1RfTVBM
X0FVWF9WQUxVRV9XS05EKE4yKTo6dmFsdWUgKSA+Ci0gICAgewotICAgIH07Ci19OwotCi19fQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9saXN0LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9nY2MvbGlzdC5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlOGFkNTNkMjEyMmQ1ZDhjYTgxMWZjNDViOWUw
YzFmNDU2ZjhkMWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJl
cHJvY2Vzc2VkL2djYy9saXN0LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyMyArMCwwIEBACi0K
LS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAo
U2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLQotLy8gUHJlcHJvY2Vzc2Vk
IHZlcnNpb24gb2YgImJvb3N0L21wbC9saXN0LmhwcCIgaGVhZGVyCi0vLyAtLSBETyBOT1QgbW9k
aWZ5IGJ5IGhhbmQhCi0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1w
bGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwID0gbmEsIHR5cGVuYW1lIFQxID0gbmEsIHR5cGVuYW1l
IFQyID0gbmEsIHR5cGVuYW1lIFQzID0gbmEKLSAgICAsIHR5cGVuYW1lIFQ0ID0gbmEsIHR5cGVu
YW1lIFQ1ID0gbmEsIHR5cGVuYW1lIFQ2ID0gbmEsIHR5cGVuYW1lIFQ3ID0gbmEKLSAgICAsIHR5
cGVuYW1lIFQ4ID0gbmEsIHR5cGVuYW1lIFQ5ID0gbmEsIHR5cGVuYW1lIFQxMCA9IG5hLCB0eXBl
bmFtZSBUMTEgPSBuYQotICAgICwgdHlwZW5hbWUgVDEyID0gbmEsIHR5cGVuYW1lIFQxMyA9IG5h
LCB0eXBlbmFtZSBUMTQgPSBuYQotICAgICwgdHlwZW5hbWUgVDE1ID0gbmEsIHR5cGVuYW1lIFQx
NiA9IG5hLCB0eXBlbmFtZSBUMTcgPSBuYQotICAgICwgdHlwZW5hbWUgVDE4ID0gbmEsIHR5cGVu
YW1lIFQxOSA9IG5hCi0gICAgPgotc3RydWN0IGxpc3Q7Ci0KLXRlbXBsYXRlPAotICAgICAKLSAg
ICA+Ci1zdHJ1Y3QgbGlzdDwKLSAgICAgICAgICBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwg
bmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEKLSAgICAgICAgLCBuYSwgbmEs
IG5hCi0gICAgICAgID4KLSAgICA6IGxpc3QwPCAgPgotewotICAgIHR5cGVkZWYgbGlzdDA8ICA+
Ojp0eXBlIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwCi0gICAgPgot
c3RydWN0IGxpc3Q8Ci0gICAgICAgICAgVDAsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBu
YSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hCi0gICAgICAgICwgbmEsIG5hLCBuYQot
ICAgICAgICA+Ci0gICAgOiBsaXN0MTxUMD4KLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGxpc3Qx
PFQwPjo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlw
ZW5hbWUgVDEKLSAgICA+Ci1zdHJ1Y3QgbGlzdDwKLSAgICAgICAgICBUMCwgVDEsIG5hLCBuYSwg
bmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEKLSAgICAg
ICAgLCBuYSwgbmEsIG5hCi0gICAgICAgID4KLSAgICA6IGxpc3QyPCBUMCxUMSA+Ci17Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBsaXN0MjwgVDAsVDEgPjo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxh
dGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyCi0gICAgPgot
c3RydWN0IGxpc3Q8Ci0gICAgICAgICAgVDAsIFQxLCBUMiwgbmEsIG5hLCBuYSwgbmEsIG5hLCBu
YSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hCi0gICAgICAgICwgbmEsIG5hLCBuYQot
ICAgICAgICA+Ci0gICAgOiBsaXN0MzwgVDAsVDEsVDIgPgotewotICAgIHR5cGVkZWYgdHlwZW5h
bWUgbGlzdDM8IFQwLFQxLFQyID46OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAg
dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMKLSAgICA+
Ci1zdHJ1Y3QgbGlzdDwKLSAgICAgICAgICBUMCwgVDEsIFQyLCBUMywgbmEsIG5hLCBuYSwgbmEs
IG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEKLSAgICAgICAgLCBuYSwgbmEsIG5h
Ci0gICAgICAgID4KLSAgICA6IGxpc3Q0PCBUMCxUMSxUMixUMyA+Ci17Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBsaXN0NDwgVDAsVDEsVDIsVDMgPjo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8
Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBU
MywgdHlwZW5hbWUgVDQKLSAgICA+Ci1zdHJ1Y3QgbGlzdDwKLSAgICAgICAgICBUMCwgVDEsIFQy
LCBUMywgVDQsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEK
LSAgICAgICAgLCBuYSwgbmEsIG5hCi0gICAgICAgID4KLSAgICA6IGxpc3Q1PCBUMCxUMSxUMixU
MyxUNCA+Ci17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBsaXN0NTwgVDAsVDEsVDIsVDMsVDQgPjo6
dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1l
IFQ1Ci0gICAgPgotc3RydWN0IGxpc3Q8Ci0gICAgICAgICAgVDAsIFQxLCBUMiwgVDMsIFQ0LCBU
NSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hCi0gICAgICAgICwg
bmEsIG5hLCBuYQotICAgICAgICA+Ci0gICAgOiBsaXN0NjwgVDAsVDEsVDIsVDMsVDQsVDUgPgot
ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgbGlzdDY8IFQwLFQxLFQyLFQzLFQ0LFQ1ID46OnR5cGUg
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBUNSwg
dHlwZW5hbWUgVDYKLSAgICA+Ci1zdHJ1Y3QgbGlzdDwKLSAgICAgICAgICBUMCwgVDEsIFQyLCBU
MywgVDQsIFQ1LCBUNiwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEKLSAg
ICAgICAgLCBuYSwgbmEsIG5hCi0gICAgICAgID4KLSAgICA6IGxpc3Q3PCBUMCxUMSxUMixUMyxU
NCxUNSxUNiA+Ci17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBsaXN0NzwgVDAsVDEsVDIsVDMsVDQs
VDUsVDYgPjo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwg
dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAs
IHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcKLSAgICA+Ci1zdHJ1Y3QgbGlz
dDwKLSAgICAgICAgICBUMCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIG5hLCBuYSwgbmEs
IG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEKLSAgICAgICAgLCBuYSwgbmEsIG5hCi0gICAgICAgID4K
LSAgICA6IGxpc3Q4PCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyA+Ci17Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBsaXN0ODwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcgPjo6dHlwZSB0eXBlOwotfTsK
LQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQy
LCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBU
NiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4Ci0gICAgPgotc3RydWN0IGxpc3Q8Ci0gICAgICAg
ICAgVDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgbmEsIG5hLCBuYSwgbmEsIG5h
LCBuYSwgbmEsIG5hCi0gICAgICAgICwgbmEsIG5hLCBuYQotICAgICAgICA+Ci0gICAgOiBsaXN0
OTwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDggPgotewotICAgIHR5cGVkZWYgdHlwZW5hbWUg
bGlzdDk8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4ID46OnR5cGUgdHlwZTsKLX07Ci0KLXRl
bXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlw
ZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5
cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDkKLSAgICA+Ci1zdHJ1Y3QgbGlzdDwK
LSAgICAgICAgICBUMCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgbmEsIG5h
LCBuYSwgbmEsIG5hLCBuYSwgbmEKLSAgICAgICAgLCBuYSwgbmEsIG5hCi0gICAgICAgID4KLSAg
ICA6IGxpc3QxMDwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDkgPgotewotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgbGlzdDEwPCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSA+Ojp0eXBl
IHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwg
dHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUs
IHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAg
LCB0eXBlbmFtZSBUMTAKLSAgICA+Ci1zdHJ1Y3QgbGlzdDwKLSAgICAgICAgICBUMCwgVDEsIFQy
LCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5h
Ci0gICAgICAgICwgbmEsIG5hLCBuYQotICAgICAgICA+Ci0gICAgOiBsaXN0MTE8IFQwLFQxLFQy
LFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCA+Ci17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBsaXN0
MTE8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCA+Ojp0eXBlIHR5cGU7Ci19Owot
Ci10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIs
IHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2
LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBlbmFtZSBU
MTAsIHR5cGVuYW1lIFQxMQotICAgID4KLXN0cnVjdCBsaXN0PAotICAgICAgICAgIFQwLCBUMSwg
VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgbmEsIG5hLCBuYSwgbmEK
LSAgICAgICAgLCBuYSwgbmEsIG5hLCBuYQotICAgICAgICA+Ci0gICAgOiBsaXN0MTI8IFQwLFQx
LFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEgPgotewotICAgIHR5cGVkZWYgdHlwZW5h
bWUgbGlzdDEyPCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExID46OnR5cGUg
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBUNSwg
dHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDkKLSAgICAs
IHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIKLSAgICA+Ci1zdHJ1Y3Qg
bGlzdDwKLSAgICAgICAgICBUMCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwg
VDEwLCBUMTEsIFQxMiwgbmEsIG5hLCBuYQotICAgICAgICAsIG5hLCBuYSwgbmEsIG5hCi0gICAg
ICAgID4KLSAgICA6IGxpc3QxMzwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQx
MSxUMTIgPgotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgbGlzdDEzPCBUMCxUMSxUMixUMyxUNCxU
NSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMiA+Ojp0eXBlIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwK
LSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQz
LCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBU
NywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1l
IFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMKLSAgICA+Ci1zdHJ1Y3QgbGlzdDwKLSAg
ICAgICAgICBUMCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEs
IFQxMiwgVDEzLCBuYSwgbmEKLSAgICAgICAgLCBuYSwgbmEsIG5hLCBuYQotICAgICAgICA+Ci0g
ICAgOiBsaXN0MTQ8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQx
MyA+Ci17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBsaXN0MTQ8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2
LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyA+Ojp0eXBlIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwK
LSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQz
LCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBU
NywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1l
IFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNAotICAgID4KLXN0
cnVjdCBsaXN0PAotICAgICAgICAgIFQwLCBUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgs
IFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgbmEKLSAgICAgICAgLCBuYSwgbmEsIG5hLCBu
YQotICAgICAgICA+Ci0gICAgOiBsaXN0MTU8Ci0gICAgICAgICAgVDAsIFQxLCBUMiwgVDMsIFQ0
LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0Ci0gICAgICAgID4K
LXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGxpc3QxNTwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcs
VDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCA+Ojp0eXBlIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwK
LSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQz
LCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBU
NywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1l
IFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNAotICAgICwgdHlw
ZW5hbWUgVDE1Ci0gICAgPgotc3RydWN0IGxpc3Q8Ci0gICAgICAgICAgVDAsIFQxLCBUMiwgVDMs
IFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0Ci0gICAgICAg
ICwgVDE1LCBuYSwgbmEsIG5hLCBuYQotICAgICAgICA+Ci0gICAgOiBsaXN0MTY8Ci0gICAgICAg
ICAgVDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIs
IFQxMywgVDE0Ci0gICAgICAgICwgVDE1Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIGxpc3QxNjwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEz
LFQxNCxUMTUgPjo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBU
MCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAg
ICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0
eXBlbmFtZSBUOQotICAgICwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQx
MiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQKLSAgICAsIHR5cGVuYW1lIFQxNSwgdHlwZW5h
bWUgVDE2Ci0gICAgPgotc3RydWN0IGxpc3Q8Ci0gICAgICAgICAgVDAsIFQxLCBUMiwgVDMsIFQ0
LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0Ci0gICAgICAgICwg
VDE1LCBUMTYsIG5hLCBuYSwgbmEKLSAgICAgICAgPgotICAgIDogbGlzdDE3PAotICAgICAgICAg
IFQwLCBUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBU
MTMsIFQxNAotICAgICAgICAsIFQxNSwgVDE2Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIGxpc3QxNzwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIs
VDEzLFQxNCxUMTUsVDE2ID46OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlw
ZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1l
IFQ0Ci0gICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFt
ZSBUOCwgdHlwZW5hbWUgVDkKLSAgICAsIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0eXBl
bmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0Ci0gICAgLCB0eXBlbmFtZSBUMTUs
IHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3Ci0gICAgPgotc3RydWN0IGxpc3Q8Ci0gICAgICAg
ICAgVDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIs
IFQxMywgVDE0Ci0gICAgICAgICwgVDE1LCBUMTYsIFQxNywgbmEsIG5hCi0gICAgICAgID4KLSAg
ICA6IGxpc3QxODwKLSAgICAgICAgICBUMCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4
LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQKLSAgICAgICAgLCBUMTUsIFQxNiwgVDE3Ci0g
ICAgICAgID4KLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGxpc3QxODwgVDAsVDEsVDIsVDMsVDQs
VDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyA+Ojp0eXBlIHR5
cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5
cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0
eXBlbmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5
cGVuYW1lIFQxNAotICAgICwgdHlwZW5hbWUgVDE1LCB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQx
NywgdHlwZW5hbWUgVDE4Ci0gICAgPgotc3RydWN0IGxpc3Q8Ci0gICAgICAgICAgVDAsIFQxLCBU
MiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0Ci0g
ICAgICAgICwgVDE1LCBUMTYsIFQxNywgVDE4LCBuYQotICAgICAgICA+Ci0gICAgOiBsaXN0MTk8
Ci0gICAgICAgICAgVDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwg
VDExLCBUMTIsIFQxMywgVDE0Ci0gICAgICAgICwgVDE1LCBUMTYsIFQxNywgVDE4Ci0gICAgICAg
ID4KLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGxpc3QxOTwgVDAsVDEsVDIsVDMsVDQsVDUsVDYs
VDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTggPjo6dHlwZSB0eXBl
OwotfTsKLQotLy8vIHByaW1hcnkgdGVtcGxhdGUgKG5vdCBhIHNwZWNpYWxpemF0aW9uISkKLQot
dGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0
eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwg
dHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOQotICAgICwgdHlwZW5hbWUgVDEw
LCB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQK
LSAgICAsIHR5cGVuYW1lIFQxNSwgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1l
IFQxOCwgdHlwZW5hbWUgVDE5Ci0gICAgPgotc3RydWN0IGxpc3QKLSAgICA6IGxpc3QyMDwKLSAg
ICAgICAgICBUMCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEs
IFQxMiwgVDEzLCBUMTQKLSAgICAgICAgLCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOQotICAgICAg
ICA+Ci17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBsaXN0MjA8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2
LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNixUMTcsVDE4LFQxOSA+Ojp0eXBl
IHR5cGU7Ci19OwotCi19fQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL21pbnVzLmhwcCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nl
c3NlZC9nY2MvbWludXMuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWQ0OTEz
NzY2MDk3NDljMmRmODExNDAyMTBjNWIwN2FmMjUyYzk0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9nY2MvbWludXMuaHBwCisrKyAvZGV2L251
bGwKQEAgLTEsMTQ2ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAw
MC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQp
Ci0vLwotCi0vLyBQcmVwcm9jZXNzZWQgdmVyc2lvbiBvZiAiYm9vc3QvbXBsL21pbnVzLmhwcCIg
aGVhZGVyCi0vLyAtLSBETyBOT1QgbW9kaWZ5IGJ5IGhhbmQhCi0KLW5hbWVzcGFjZSBib29zdCB7
IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFRhZzEKLSAgICAs
IHR5cGVuYW1lIFRhZzIKLSAgICA+Ci1zdHJ1Y3QgbWludXNfaW1wbAotICAgIDogaWZfYzwKLSAg
ICAgICAgICAoIEJPT1NUX01QTF9BVVhfTkVTVEVEX1ZBTFVFX1dLTkQoaW50LCBUYWcxKQotICAg
ICAgICAgICAgICA+IEJPT1NUX01QTF9BVVhfTkVTVEVEX1ZBTFVFX1dLTkQoaW50LCBUYWcyKQot
ICAgICAgICAgICAgKQotCi0gICAgICAgICwgYXV4OjpjYXN0Mm5kX2ltcGw8IG1pbnVzX2ltcGw8
IFRhZzEsVGFnMSA+LFRhZzEsIFRhZzIgPgotICAgICAgICAsIGF1eDo6Y2FzdDFzdF9pbXBsPCBt
aW51c19pbXBsPCBUYWcyLFRhZzIgPixUYWcxLCBUYWcyID4KLSAgICAgICAgPjo6dHlwZQotewot
fTsKLQotLy8vIGZvciBEaWdpdGFsIE1hcnMgQysrL2NvbXBpbGVycyB3aXRoIG5vIENUUFMvVFRQ
IHN1cHBvcnQKLXRlbXBsYXRlPD4gc3RydWN0IG1pbnVzX2ltcGw8IG5hLG5hID4KLXsKLSAgICB0
ZW1wbGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyID4gc3RydWN0IGFwcGx5Ci0gICAgewot
ICAgICAgICB0eXBlZGVmIGFwcGx5IHR5cGU7Ci0gICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFO
VChpbnQsIHZhbHVlICA9IDApOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVGFn
ID4gc3RydWN0IG1pbnVzX2ltcGw8IG5hLFRhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1l
IFUxLCB0eXBlbmFtZSBVMiA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBh
cHBseSB0eXBlOwotICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1ZSAgPSAw
KTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBtaW51c19p
bXBsPCBUYWcsbmEgPgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBVMSwgdHlwZW5hbWUgVTIg
PiBzdHJ1Y3QgYXBwbHkKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgYXBwbHkgdHlwZTsKLSAgICAg
ICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwgdmFsdWUgID0gMCk7Ci0gICAgfTsKLX07Ci0K
LXRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IG1pbnVzX3RhZwotewotICAgIHR5cGVkZWYg
dHlwZW5hbWUgVDo6dGFnIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJP
T1NUX01QTF9BVVhfTkFfUEFSQU0oTjEpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05B
X1BBUkFNKE4yKQotICAgICwgdHlwZW5hbWUgTjMgPSBuYSwgdHlwZW5hbWUgTjQgPSBuYSwgdHlw
ZW5hbWUgTjUgPSBuYQotICAgID4KLXN0cnVjdCBtaW51cwotICAgIDogbWludXM8IG1pbnVzPCBt
aW51czwgbWludXM8IE4xLE4yID4sIE4zPiwgTjQ+LCBONT4KLXsKLSAgICBCT09TVF9NUExfQVVY
X0xBTUJEQV9TVVBQT1JUKAotICAgICAgICAgIDUKLSAgICAgICAgLCBtaW51cwotICAgICAgICAs
ICggTjEsIE4yLCBOMywgTjQsIE41ICkKLSAgICAgICAgKQotfTsKLQotdGVtcGxhdGU8Ci0gICAg
ICB0eXBlbmFtZSBOMSwgdHlwZW5hbWUgTjIsIHR5cGVuYW1lIE4zLCB0eXBlbmFtZSBONAotICAg
ID4KLXN0cnVjdCBtaW51czwgTjEsTjIsTjMsTjQsbmEgPgotCi0gICAgOiBtaW51czwgbWludXM8
IG1pbnVzPCBOMSxOMiA+LCBOMz4sIE40PgotewotICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NV
UFBPUlRfU1BFQygKLSAgICAgICAgICA1Ci0gICAgICAgICwgbWludXMKLSAgICAgICAgLCAoIE4x
LCBOMiwgTjMsIE40LCBuYSApCi0gICAgICAgICkKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlw
ZW5hbWUgTjEsIHR5cGVuYW1lIE4yLCB0eXBlbmFtZSBOMwotICAgID4KLXN0cnVjdCBtaW51czwg
TjEsTjIsTjMsbmEsbmEgPgotCi0gICAgOiBtaW51czwgbWludXM8IE4xLE4yID4sIE4zPgotewot
ICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlRfU1BFQygKLSAgICAgICAgICA1Ci0gICAg
ICAgICwgbWludXMKLSAgICAgICAgLCAoIE4xLCBOMiwgTjMsIG5hLCBuYSApCi0gICAgICAgICkK
LX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgTjEsIHR5cGVuYW1lIE4yCi0gICAgPgot
c3RydWN0IG1pbnVzPCBOMSxOMixuYSxuYSxuYSA+Ci0gICAgOiBtaW51c19pbXBsPAotICAgICAg
ICAgIHR5cGVuYW1lIG1pbnVzX3RhZzxOMT46OnR5cGUKLSAgICAgICAgLCB0eXBlbmFtZSBtaW51
c190YWc8TjI+Ojp0eXBlCi0gICAgICAgID46OnRlbXBsYXRlIGFwcGx5PCBOMSxOMiA+Ojp0eXBl
Ci17Ci0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVF9TUEVDKAotICAgICAgICAgIDUK
LSAgICAgICAgLCBtaW51cwotICAgICAgICAsICggTjEsIE4yLCBuYSwgbmEsIG5hICkKLSAgICAg
ICAgKQotCi19OwotCi1CT09TVF9NUExfQVVYX05BX1NQRUMyKDIsIDUsIG1pbnVzKQotCi19fQot
Ci1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLXRlbXBsYXRlPD4KLXN0cnVjdCBt
aW51c19pbXBsPCBpbnRlZ3JhbF9jX3RhZyxpbnRlZ3JhbF9jX3RhZyA+Ci17Ci0gICAgdGVtcGxh
dGU8IHR5cGVuYW1lIE4xLCB0eXBlbmFtZSBOMiA+IHN0cnVjdCBhcHBseQotCi0gICAgICAgIDog
aW50ZWdyYWxfYzwKLSAgICAgICAgICAgICAgdHlwZW5hbWUgYXV4OjpsYXJnZXN0X2ludDwKLSAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIE4xOjp2YWx1ZV90eXBlCi0gICAgICAgICAgICAgICAg
LCB0eXBlbmFtZSBOMjo6dmFsdWVfdHlwZQotICAgICAgICAgICAgICAgID46OnR5cGUKLSAgICAg
ICAgICAgICwgKCBCT09TVF9NUExfQVVYX1ZBTFVFX1dLTkQoTjEpOjp2YWx1ZQotICAgICAgICAg
ICAgICAgICAgLSBCT09TVF9NUExfQVVYX1ZBTFVFX1dLTkQoTjIpOjp2YWx1ZQotICAgICAgICAg
ICAgICAgICkKLSAgICAgICAgICAgID4KLSAgICB7Ci0gICAgfTsKLX07Ci0KLX19CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9w
cmVwcm9jZXNzZWQvZ2NjL25vdF9lcXVhbF90by5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL25vdF9lcXVhbF90
by5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YjIxYjFlMjJkNDY1NWU4MzNm
ZmU4YzlhYTIyMjM0NTFhZDRlODkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9ub3RfZXF1YWxfdG8uaHBwCisrKyAvZGV2L251bGwKQEAg
LTEsOTQgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQK
LS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVy
c2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0K
LS8vIFByZXByb2Nlc3NlZCB2ZXJzaW9uIG9mICJib29zdC9tcGwvbm90X2VxdWFsX3RvLmhwcCIg
aGVhZGVyCi0vLyAtLSBETyBOT1QgbW9kaWZ5IGJ5IGhhbmQhCi0KLW5hbWVzcGFjZSBib29zdCB7
IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFRhZzEKLSAgICAs
IHR5cGVuYW1lIFRhZzIKLSAgICA+Ci1zdHJ1Y3Qgbm90X2VxdWFsX3RvX2ltcGwKLSAgICA6IGlm
X2M8Ci0gICAgICAgICAgKCBCT09TVF9NUExfQVVYX05FU1RFRF9WQUxVRV9XS05EKGludCwgVGFn
MSkKLSAgICAgICAgICAgICAgPiBCT09TVF9NUExfQVVYX05FU1RFRF9WQUxVRV9XS05EKGludCwg
VGFnMikKLSAgICAgICAgICAgICkKLQotICAgICAgICAsIGF1eDo6Y2FzdDJuZF9pbXBsPCBub3Rf
ZXF1YWxfdG9faW1wbDwgVGFnMSxUYWcxID4sVGFnMSwgVGFnMiA+Ci0gICAgICAgICwgYXV4Ojpj
YXN0MXN0X2ltcGw8IG5vdF9lcXVhbF90b19pbXBsPCBUYWcyLFRhZzIgPixUYWcxLCBUYWcyID4K
LSAgICAgICAgPjo6dHlwZQotewotfTsKLQotLy8vIGZvciBEaWdpdGFsIE1hcnMgQysrL2NvbXBp
bGVycyB3aXRoIG5vIENUUFMvVFRQIHN1cHBvcnQKLXRlbXBsYXRlPD4gc3RydWN0IG5vdF9lcXVh
bF90b19pbXBsPCBuYSxuYSA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFUxLCB0eXBlbmFt
ZSBVMiA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBhcHBseSB0eXBlOwot
ICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1ZSAgPSAwKTsKLSAgICB9Owot
fTsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBub3RfZXF1YWxfdG9faW1wbDwg
bmEsVGFnID4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyID4gc3Ry
dWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIGFwcGx5IHR5cGU7Ci0gICAgICAgIEJP
T1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVlICA9IDApOwotICAgIH07Ci19OwotCi10ZW1w
bGF0ZTwgdHlwZW5hbWUgVGFnID4gc3RydWN0IG5vdF9lcXVhbF90b19pbXBsPCBUYWcsbmEgPgot
ewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBVMSwgdHlwZW5hbWUgVTIgPiBzdHJ1Y3QgYXBwbHkK
LSAgICB7Ci0gICAgICAgIHR5cGVkZWYgYXBwbHkgdHlwZTsKLSAgICAgICAgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKGludCwgdmFsdWUgID0gMCk7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBl
bmFtZSBUID4gc3RydWN0IG5vdF9lcXVhbF90b190YWcKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IFQ6OnRhZyB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09TVF9NUExf
QVVYX05BX1BBUkFNKE4xKQotICAgICwgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShO
MikKLSAgICA+Ci1zdHJ1Y3Qgbm90X2VxdWFsX3RvCi0KLSAgICA6IG5vdF9lcXVhbF90b19pbXBs
PAotICAgICAgICAgIHR5cGVuYW1lIG5vdF9lcXVhbF90b190YWc8TjE+Ojp0eXBlCi0gICAgICAg
ICwgdHlwZW5hbWUgbm90X2VxdWFsX3RvX3RhZzxOMj46OnR5cGUKLSAgICAgICAgPjo6dGVtcGxh
dGUgYXBwbHk8IE4xLE4yID46OnR5cGUKLXsKLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQ
T1JUKDIsIG5vdF9lcXVhbF90bywgKE4xLCBOMikpCi0KLX07Ci0KLUJPT1NUX01QTF9BVVhfTkFf
U1BFQzIoMiwgMiwgbm90X2VxdWFsX3RvKQotCi19fQotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1l
c3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8Pgotc3RydWN0IG5vdF9lcXVhbF90b19pbXBsPCBpbnRl
Z3JhbF9jX3RhZyxpbnRlZ3JhbF9jX3RhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIE4x
LCB0eXBlbmFtZSBOMiA+IHN0cnVjdCBhcHBseQotCi0gICAgICAgIDogYm9vbF88ICggQk9PU1Rf
TVBMX0FVWF9WQUxVRV9XS05EKE4xKTo6dmFsdWUgIT0gQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05E
KE4yKTo6dmFsdWUgKSA+Ci0gICAgewotICAgIH07Ci19OwotCi19fQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vz
c2VkL2djYy9vci5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL29yLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzFlMWFhYTRlNjBjZmU4Y2I3M2YwZTFlZTlkYzUwNmUwMjA0YWZmNS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL29yLmhw
cAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkg
R3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNv
ZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUg
TElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNF
TlNFXzFfMC50eHQpCi0vLwotCi0vLyBQcmVwcm9jZXNzZWQgdmVyc2lvbiBvZiAiYm9vc3QvbXBs
L29yLmhwcCIgaGVhZGVyCi0vLyAtLSBETyBOT1QgbW9kaWZ5IGJ5IGhhbmQhCi0KLW5hbWVzcGFj
ZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi1uYW1lc3BhY2UgYXV4IHsKLQotdGVtcGxhdGU8
IGJvb2wgQ18sIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1l
IFQ0ID4KLXN0cnVjdCBvcl9pbXBsCi0gICAgOiB0cnVlXwotewotfTsKLQotdGVtcGxhdGU8IHR5
cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0ID4KLXN0cnVj
dCBvcl9pbXBsPCBmYWxzZSxUMSxUMixUMyxUNCA+Ci0gICAgOiBvcl9pbXBsPAotICAgICAgICAg
IEJPT1NUX01QTF9BVVhfTkVTVEVEX1RZUEVfV0tORChUMSk6OnZhbHVlCi0gICAgICAgICwgVDIs
IFQzLCBUNAotICAgICAgICAsIGZhbHNlXwotICAgICAgICA+Ci17Ci19OwotCi10ZW1wbGF0ZTw+
Ci1zdHJ1Y3Qgb3JfaW1wbDwKLSAgICAgICAgICBmYWxzZQotICAgICAgICAsIGZhbHNlXywgZmFs
c2VfLCBmYWxzZV8sIGZhbHNlXwotICAgICAgICA+Ci0gICAgOiBmYWxzZV8KLXsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIGF1eAotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9B
VVhfTkFfUEFSQU0oVDEpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKFQy
KQotICAgICwgdHlwZW5hbWUgVDMgPSBmYWxzZV8sIHR5cGVuYW1lIFQ0ID0gZmFsc2VfLCB0eXBl
bmFtZSBUNSA9IGZhbHNlXwotICAgID4KLXN0cnVjdCBvcl8KLQotICAgIDogYXV4Ojpvcl9pbXBs
PAotICAgICAgICAgIEJPT1NUX01QTF9BVVhfTkVTVEVEX1RZUEVfV0tORChUMSk6OnZhbHVlCi0g
ICAgICAgICwgVDIsIFQzLCBUNCwgVDUKLSAgICAgICAgPgotCi17Ci0gICAgQk9PU1RfTVBMX0FV
WF9MQU1CREFfU1VQUE9SVCgKLSAgICAgICAgICA1Ci0gICAgICAgICwgb3JfCi0gICAgICAgICwg
KCBUMSwgVDIsIFQzLCBUNCwgVDUpCi0gICAgICAgICkKLX07Ci0KLUJPT1NUX01QTF9BVVhfTkFf
U1BFQzIoCi0gICAgICAyCi0gICAgLCA1Ci0gICAgLCBvcl8KLSAgICApCi0KLX19CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9w
cmVwcm9jZXNzZWQvZ2NjL3BsYWNlaG9sZGVycy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL3BsYWNlaG9sZGVy
cy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmOTczNjRiOWJhMWM0MDg2NDUw
NjVkODk2NWY3NGMxMDVlODZkM2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9wbGFjZWhvbGRlcnMuaHBwCisrKyAvZGV2L251bGwKQEAg
LTEsMTA1ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMS0yMDA0
Ci0vLyBDb3B5cmlnaHQgUGV0ZXIgRGltb3YgMjAwMS0yMDAzCi0vLwotLy8gRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUg
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotCi0vLyBQcmVwcm9jZXNzZWQgdmVy
c2lvbiBvZiAiYm9vc3QvbXBsL3BsYWNlaG9sZGVycy5ocHAiIGhlYWRlcgotLy8gLS0gRE8gTk9U
IG1vZGlmeSBieSBoYW5kIQotCi1CT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRV9P
UEVOCi10eXBlZGVmIGFyZzwgLTEgPiBfOwotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1F
U1BBQ0VfQ0xPU0UKLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi1CT09TVF9N
UExfQVVYX0FSR19BRExfQkFSUklFUl9ERUNMKF8pCi0KLW5hbWVzcGFjZSBwbGFjZWhvbGRlcnMg
ewotdXNpbmcgQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1FU1BBQ0U6Ol87Ci19Ci0KLX19
Ci0KLS8vLyBhZ3VydCwgMTcvbWFyLzAyOiBvbmUgbW9yZSBwbGFjZWhvbGRlciBmb3IgdGhlIGxh
c3QgJ2FwcGx5IycgCi0vLy8gc3BlY2lhbGl6YXRpb24KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJ
RVJfTkFNRVNQQUNFX09QRU4KLXR5cGVkZWYgYXJnPDE+IF8xOwotCi1CT09TVF9NUExfQVVYX0FE
TF9CQVJSSUVSX05BTUVTUEFDRV9DTE9TRQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1w
bCB7Ci0KLUJPT1NUX01QTF9BVVhfQVJHX0FETF9CQVJSSUVSX0RFQ0woXzEpCi0KLW5hbWVzcGFj
ZSBwbGFjZWhvbGRlcnMgewotdXNpbmcgQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1FU1BB
Q0U6Ol8xOwotfQotCi19fQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1FU1BBQ0VfT1BF
TgotdHlwZWRlZiBhcmc8Mj4gXzI7Ci0KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQ
QUNFX0NMT1NFCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotQk9PU1RfTVBM
X0FVWF9BUkdfQURMX0JBUlJJRVJfREVDTChfMikKLQotbmFtZXNwYWNlIHBsYWNlaG9sZGVycyB7
Ci11c2luZyBCT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRTo6XzI7Ci19Ci0KLX19
Ci1CT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRV9PUEVOCi10eXBlZGVmIGFyZzwz
PiBfMzsKLQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1FU1BBQ0VfQ0xPU0UKLW5hbWVz
cGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi1CT09TVF9NUExfQVVYX0FSR19BRExfQkFS
UklFUl9ERUNMKF8zKQotCi1uYW1lc3BhY2UgcGxhY2Vob2xkZXJzIHsKLXVzaW5nIEJPT1NUX01Q
TF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFOjpfMzsKLX0KLQotfX0KLUJPT1NUX01QTF9BVVhf
QURMX0JBUlJJRVJfTkFNRVNQQUNFX09QRU4KLXR5cGVkZWYgYXJnPDQ+IF80OwotCi1CT09TVF9N
UExfQVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRV9DTE9TRQotbmFtZXNwYWNlIGJvb3N0IHsgbmFt
ZXNwYWNlIG1wbCB7Ci0KLUJPT1NUX01QTF9BVVhfQVJHX0FETF9CQVJSSUVSX0RFQ0woXzQpCi0K
LW5hbWVzcGFjZSBwbGFjZWhvbGRlcnMgewotdXNpbmcgQk9PU1RfTVBMX0FVWF9BRExfQkFSUklF
Ul9OQU1FU1BBQ0U6Ol80OwotfQotCi19fQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1F
U1BBQ0VfT1BFTgotdHlwZWRlZiBhcmc8NT4gXzU7Ci0KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJ
RVJfTkFNRVNQQUNFX0NMT1NFCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQot
Qk9PU1RfTVBMX0FVWF9BUkdfQURMX0JBUlJJRVJfREVDTChfNSkKLQotbmFtZXNwYWNlIHBsYWNl
aG9sZGVycyB7Ci11c2luZyBCT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRTo6XzU7
Ci19Ci0KLX19Ci1CT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRV9PUEVOCi10eXBl
ZGVmIGFyZzw2PiBfNjsKLQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1FU1BBQ0VfQ0xP
U0UKLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi1CT09TVF9NUExfQVVYX0FS
R19BRExfQkFSUklFUl9ERUNMKF82KQotCi1uYW1lc3BhY2UgcGxhY2Vob2xkZXJzIHsKLXVzaW5n
IEJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFOjpfNjsKLX0KLQotfX0KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhf
L3ByZXByb2Nlc3NlZC9nY2MvcGx1cy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL3BsdXMuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWY2ZWU3OWE1Y2RmZDE1MzU0ZWQ2ODNiOTQ5NDhmNTEz
MmEyZjVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nl
c3NlZC9nY2MvcGx1cy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotCi0vLyBD
b3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1
bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0KLS8vIFByZXByb2Nlc3NlZCB2ZXJz
aW9uIG9mICJib29zdC9tcGwvcGx1cy5ocHAiIGhlYWRlcgotLy8gLS0gRE8gTk9UIG1vZGlmeSBi
eSBoYW5kIQotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8
Ci0gICAgICB0eXBlbmFtZSBUYWcxCi0gICAgLCB0eXBlbmFtZSBUYWcyCi0gICAgPgotc3RydWN0
IHBsdXNfaW1wbAotICAgIDogaWZfYzwKLSAgICAgICAgICAoIEJPT1NUX01QTF9BVVhfTkVTVEVE
X1ZBTFVFX1dLTkQoaW50LCBUYWcxKQotICAgICAgICAgICAgICA+IEJPT1NUX01QTF9BVVhfTkVT
VEVEX1ZBTFVFX1dLTkQoaW50LCBUYWcyKQotICAgICAgICAgICAgKQotCi0gICAgICAgICwgYXV4
OjpjYXN0Mm5kX2ltcGw8IHBsdXNfaW1wbDwgVGFnMSxUYWcxID4sVGFnMSwgVGFnMiA+Ci0gICAg
ICAgICwgYXV4OjpjYXN0MXN0X2ltcGw8IHBsdXNfaW1wbDwgVGFnMixUYWcyID4sVGFnMSwgVGFn
MiA+Ci0gICAgICAgID46OnR5cGUKLXsKLX07Ci0KLS8vLyBmb3IgRGlnaXRhbCBNYXJzIEMrKy9j
b21waWxlcnMgd2l0aCBubyBDVFBTL1RUUCBzdXBwb3J0Ci10ZW1wbGF0ZTw+IHN0cnVjdCBwbHVz
X2ltcGw8IG5hLG5hID4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUy
ID4gc3RydWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIGFwcGx5IHR5cGU7Ci0gICAg
ICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVlICA9IDApOwotICAgIH07Ci19Owot
Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4gc3RydWN0IHBsdXNfaW1wbDwgbmEsVGFnID4KLXsK
LSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyID4gc3RydWN0IGFwcGx5Ci0g
ICAgewotICAgICAgICB0eXBlZGVmIGFwcGx5IHR5cGU7Ci0gICAgICAgIEJPT1NUX1NUQVRJQ19D
T05TVEFOVChpbnQsIHZhbHVlICA9IDApOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5h
bWUgVGFnID4gc3RydWN0IHBsdXNfaW1wbDwgVGFnLG5hID4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlw
ZW5hbWUgVTEsIHR5cGVuYW1lIFUyID4gc3RydWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBl
ZGVmIGFwcGx5IHR5cGU7Ci0gICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVl
ICA9IDApOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBwbHVz
X3RhZwotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgVDo6dGFnIHR5cGU7Ci19OwotCi10ZW1wbGF0
ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oTjEpCi0gICAgLCB0eXBl
bmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKE4yKQotICAgICwgdHlwZW5hbWUgTjMgPSBuYSwg
dHlwZW5hbWUgTjQgPSBuYSwgdHlwZW5hbWUgTjUgPSBuYQotICAgID4KLXN0cnVjdCBwbHVzCi0g
ICAgOiBwbHVzPCBwbHVzPCBwbHVzPCBwbHVzPCBOMSxOMiA+LCBOMz4sIE40PiwgTjU+Ci17Ci0g
ICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgKLSAgICAgICAgICA1Ci0gICAgICAgICwg
cGx1cwotICAgICAgICAsICggTjEsIE4yLCBOMywgTjQsIE41ICkKLSAgICAgICAgKQotfTsKLQot
dGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBOMSwgdHlwZW5hbWUgTjIsIHR5cGVuYW1lIE4zLCB0
eXBlbmFtZSBONAotICAgID4KLXN0cnVjdCBwbHVzPCBOMSxOMixOMyxONCxuYSA+Ci0KLSAgICA6
IHBsdXM8IHBsdXM8IHBsdXM8IE4xLE4yID4sIE4zPiwgTjQ+Ci17Ci0gICAgQk9PU1RfTVBMX0FV
WF9MQU1CREFfU1VQUE9SVF9TUEVDKAotICAgICAgICAgIDUKLSAgICAgICAgLCBwbHVzCi0gICAg
ICAgICwgKCBOMSwgTjIsIE4zLCBONCwgbmEgKQotICAgICAgICApCi19OwotCi10ZW1wbGF0ZTwK
LSAgICAgIHR5cGVuYW1lIE4xLCB0eXBlbmFtZSBOMiwgdHlwZW5hbWUgTjMKLSAgICA+Ci1zdHJ1
Y3QgcGx1czwgTjEsTjIsTjMsbmEsbmEgPgotCi0gICAgOiBwbHVzPCBwbHVzPCBOMSxOMiA+LCBO
Mz4KLXsKLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUX1NQRUMoCi0gICAgICAgICAg
NQotICAgICAgICAsIHBsdXMKLSAgICAgICAgLCAoIE4xLCBOMiwgTjMsIG5hLCBuYSApCi0gICAg
ICAgICkKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgTjEsIHR5cGVuYW1lIE4yCi0g
ICAgPgotc3RydWN0IHBsdXM8IE4xLE4yLG5hLG5hLG5hID4KLSAgICA6IHBsdXNfaW1wbDwKLSAg
ICAgICAgICB0eXBlbmFtZSBwbHVzX3RhZzxOMT46OnR5cGUKLSAgICAgICAgLCB0eXBlbmFtZSBw
bHVzX3RhZzxOMj46OnR5cGUKLSAgICAgICAgPjo6dGVtcGxhdGUgYXBwbHk8IE4xLE4yID46OnR5
cGUKLXsKLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUX1NQRUMoCi0gICAgICAgICAg
NQotICAgICAgICAsIHBsdXMKLSAgICAgICAgLCAoIE4xLCBOMiwgbmEsIG5hLCBuYSApCi0gICAg
ICAgICkKLQotfTsKLQotQk9PU1RfTVBMX0FVWF9OQV9TUEVDMigyLCA1LCBwbHVzKQotCi19fQot
Ci1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLXRlbXBsYXRlPD4KLXN0cnVjdCBw
bHVzX2ltcGw8IGludGVncmFsX2NfdGFnLGludGVncmFsX2NfdGFnID4KLXsKLSAgICB0ZW1wbGF0
ZTwgdHlwZW5hbWUgTjEsIHR5cGVuYW1lIE4yID4gc3RydWN0IGFwcGx5Ci0KLSAgICAgICAgOiBp
bnRlZ3JhbF9jPAotICAgICAgICAgICAgICB0eXBlbmFtZSBhdXg6Omxhcmdlc3RfaW50PAotICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgTjE6OnZhbHVlX3R5cGUKLSAgICAgICAgICAgICAgICAs
IHR5cGVuYW1lIE4yOjp2YWx1ZV90eXBlCi0gICAgICAgICAgICAgICAgPjo6dHlwZQotICAgICAg
ICAgICAgLCAoIEJPT1NUX01QTF9BVVhfVkFMVUVfV0tORChOMSk6OnZhbHVlCi0gICAgICAgICAg
ICAgICAgICArIEJPT1NUX01QTF9BVVhfVkFMVUVfV0tORChOMik6OnZhbHVlCi0gICAgICAgICAg
ICAgICAgKQotICAgICAgICAgICAgPgotICAgIHsKLSAgICB9OwotfTsKLQotfX0KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3By
ZXByb2Nlc3NlZC9nY2MvcXVvdGUuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2djYy9xdW90ZS5ocHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMGYwOTM5NjVhMTM5YzFiODdiMDJlOWNiYjcyODYwMmEz
ZWUxMWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vz
c2VkL2djYy9xdW90ZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotCi0vLyBD
b3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1
bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0KLS8vIFByZXByb2Nlc3NlZCB2ZXJz
aW9uIG9mICJib29zdC9tcGwvcXVvdGUuaHBwIiBoZWFkZXIKLS8vIC0tIERPIE5PVCBtb2RpZnkg
YnkgaGFuZCEKLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRl
PCB0eXBlbmFtZSBULCBib29sIGhhc190eXBlXyA+Ci1zdHJ1Y3QgcXVvdGVfaW1wbAotewotICAg
IHR5cGVkZWYgdHlwZW5hbWUgVDo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1l
IFQgPgotc3RydWN0IHF1b3RlX2ltcGw8IFQsZmFsc2UgPgotewotICAgIHR5cGVkZWYgVCB0eXBl
OwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEgPiBjbGFzcyBG
Ci0gICAgLCB0eXBlbmFtZSBUYWcgPSB2b2lkXwotICAgID4KLXN0cnVjdCBxdW90ZTEKLXsKLSAg
ICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVTEgPiBzdHJ1Y3QgYXBwbHkKLQotICAgICAgICA6IHF1b3Rl
X2ltcGw8Ci0gICAgICAgICAgICAgIEY8VTE+Ci0gICAgICAgICAgICAsIGF1eDo6aGFzX3R5cGU8
IEY8VTE+ID46OnZhbHVlCi0gICAgICAgICAgICA+Ci0KLSAgICB7Ci0gICAgfTsKLX07Ci0KLXRl
bXBsYXRlPAotICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiA+IGNsYXNz
IEYKLSAgICAsIHR5cGVuYW1lIFRhZyA9IHZvaWRfCi0gICAgPgotc3RydWN0IHF1b3RlMgotewot
ICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBVMSwgdHlwZW5hbWUgVTIgPiBzdHJ1Y3QgYXBwbHkKLQot
ICAgICAgICA6IHF1b3RlX2ltcGw8Ci0gICAgICAgICAgICAgIEY8IFUxLFUyID4KLSAgICAgICAg
ICAgICwgYXV4OjpoYXNfdHlwZTwgRjwgVTEsVTIgPiA+Ojp2YWx1ZQotICAgICAgICAgICAgPgot
Ci0gICAgewotICAgIH07Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHRlbXBsYXRlPCB0eXBlbmFt
ZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzID4gY2xhc3MgRgotICAgICwgdHlwZW5hbWUg
VGFnID0gdm9pZF8KLSAgICA+Ci1zdHJ1Y3QgcXVvdGUzCi17Ci0gICAgdGVtcGxhdGU8IHR5cGVu
YW1lIFUxLCB0eXBlbmFtZSBVMiwgdHlwZW5hbWUgVTMgPiBzdHJ1Y3QgYXBwbHkKLQotICAgICAg
ICA6IHF1b3RlX2ltcGw8Ci0gICAgICAgICAgICAgIEY8IFUxLFUyLFUzID4KLSAgICAgICAgICAg
ICwgYXV4OjpoYXNfdHlwZTwgRjwgVTEsVTIsVTMgPiA+Ojp2YWx1ZQotICAgICAgICAgICAgPgot
Ci0gICAgewotICAgIH07Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHRlbXBsYXRlPCB0eXBlbmFt
ZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNCA+IGNsYXNzIEYKLSAg
ICAsIHR5cGVuYW1lIFRhZyA9IHZvaWRfCi0gICAgPgotc3RydWN0IHF1b3RlNAotewotICAgIHRl
bXBsYXRlPAotICAgICAgICAgIHR5cGVuYW1lIFUxLCB0eXBlbmFtZSBVMiwgdHlwZW5hbWUgVTMs
IHR5cGVuYW1lIFU0Ci0gICAgICAgID4KLSAgICBzdHJ1Y3QgYXBwbHkKLQotICAgICAgICA6IHF1
b3RlX2ltcGw8Ci0gICAgICAgICAgICAgIEY8IFUxLFUyLFUzLFU0ID4KLSAgICAgICAgICAgICwg
YXV4OjpoYXNfdHlwZTwgRjwgVTEsVTIsVTMsVTQgPiA+Ojp2YWx1ZQotICAgICAgICAgICAgPgot
Ci0gICAgewotICAgIH07Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHRlbXBsYXRlPAotICAgICAg
ICAgIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIFA0Ci0g
ICAgICAgICwgdHlwZW5hbWUgUDUKLSAgICAgICAgPgotICAgICAgY2xhc3MgRgotICAgICwgdHlw
ZW5hbWUgVGFnID0gdm9pZF8KLSAgICA+Ci1zdHJ1Y3QgcXVvdGU1Ci17Ci0gICAgdGVtcGxhdGU8
Ci0gICAgICAgICAgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyLCB0eXBlbmFtZSBVMywgdHlwZW5h
bWUgVTQKLSAgICAgICAgLCB0eXBlbmFtZSBVNQotICAgICAgICA+Ci0gICAgc3RydWN0IGFwcGx5
Ci0KLSAgICAgICAgOiBxdW90ZV9pbXBsPAotICAgICAgICAgICAgICBGPCBVMSxVMixVMyxVNCxV
NSA+Ci0gICAgICAgICAgICAsIGF1eDo6aGFzX3R5cGU8IEY8IFUxLFUyLFUzLFU0LFU1ID4gPjo6
dmFsdWUKLSAgICAgICAgICAgID4KLQotICAgIHsKLSAgICB9OwotfTsKLQotfX0KLQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8v
cHJlcHJvY2Vzc2VkL2djYy9yZXZlcnNlX2ZvbGRfaW1wbC5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL3JldmVy
c2VfZm9sZF9pbXBsLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ2ODY4NGM5
MWUxZGI0NWE5YzMyZDQ0MDBlZTM1NTIwM2M4NTVmMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL3JldmVyc2VfZm9sZF9pbXBsLmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1
cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0
d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotLy8KLQotLy8gUHJlcHJvY2Vzc2VkIHZlcnNpb24gb2YgImJvb3N0L21wbC9h
dXhfL3JldmVyc2VfZm9sZF9pbXBsLmhwcCIgaGVhZGVyCi0vLyAtLSBETyBOT1QgbW9kaWZ5IGJ5
IGhhbmQhCi0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4
IHsKLQotLy8vIGZvcndhcmQgZGVjbGFyYXRpb24KLQotdGVtcGxhdGU8Ci0gICAgICBsb25nIE4K
LSAgICAsIHR5cGVuYW1lIEZpcnN0Ci0gICAgLCB0eXBlbmFtZSBMYXN0Ci0gICAgLCB0eXBlbmFt
ZSBTdGF0ZQotICAgICwgdHlwZW5hbWUgQmFja3dhcmRPcAotICAgICwgdHlwZW5hbWUgRm9yd2Fy
ZE9wCi0gICAgPgotc3RydWN0IHJldmVyc2VfZm9sZF9pbXBsOwotCi10ZW1wbGF0ZTwKLSAgICAg
IHR5cGVuYW1lIEZpcnN0Ci0gICAgLCB0eXBlbmFtZSBMYXN0Ci0gICAgLCB0eXBlbmFtZSBTdGF0
ZQotICAgICwgdHlwZW5hbWUgQmFja3dhcmRPcAotICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCi0g
ICAgPgotc3RydWN0IHJldmVyc2VfZm9sZF9pbXBsPCAwLEZpcnN0LExhc3QsU3RhdGUsQmFja3dh
cmRPcCxGb3J3YXJkT3AgPgotewotICAgIHR5cGVkZWYgRmlyc3QgaXRlcjA7Ci0gICAgdHlwZWRl
ZiBTdGF0ZSBmd2Rfc3RhdGUwOwotICAgIHR5cGVkZWYgZndkX3N0YXRlMCBia3dkX3N0YXRlMDsK
LSAgICB0eXBlZGVmIGJrd2Rfc3RhdGUwIHN0YXRlOwotICAgIHR5cGVkZWYgaXRlcjAgaXRlcmF0
b3I7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEZpcnN0Ci0gICAgLCB0eXBlbmFt
ZSBMYXN0Ci0gICAgLCB0eXBlbmFtZSBTdGF0ZQotICAgICwgdHlwZW5hbWUgQmFja3dhcmRPcAot
ICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCi0gICAgPgotc3RydWN0IHJldmVyc2VfZm9sZF9pbXBs
PCAxLEZpcnN0LExhc3QsU3RhdGUsQmFja3dhcmRPcCxGb3J3YXJkT3AgPgotewotICAgIHR5cGVk
ZWYgRmlyc3QgaXRlcjA7Ci0gICAgdHlwZWRlZiBTdGF0ZSBmd2Rfc3RhdGUwOwotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgYXBwbHkyPCBGb3J3YXJkT3AsIGZ3ZF9zdGF0ZTAsIHR5cGVuYW1lIGRlcmVm
PGl0ZXIwPjo6dHlwZSA+Ojp0eXBlIGZ3ZF9zdGF0ZTE7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBt
cGw6Om5leHQ8aXRlcjA+Ojp0eXBlIGl0ZXIxOwotICAgIAotCi0gICAgdHlwZWRlZiBmd2Rfc3Rh
dGUxIGJrd2Rfc3RhdGUxOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHkyPCBCYWNrd2FyZE9w
LCBia3dkX3N0YXRlMSwgdHlwZW5hbWUgZGVyZWY8aXRlcjA+Ojp0eXBlID46OnR5cGUgYmt3ZF9z
dGF0ZTA7Ci0gICAgdHlwZWRlZiBia3dkX3N0YXRlMCBzdGF0ZTsKLSAgICB0eXBlZGVmIGl0ZXIx
IGl0ZXJhdG9yOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGaXJzdAotICAgICwg
dHlwZW5hbWUgTGFzdAotICAgICwgdHlwZW5hbWUgU3RhdGUKLSAgICAsIHR5cGVuYW1lIEJhY2t3
YXJkT3AKLSAgICAsIHR5cGVuYW1lIEZvcndhcmRPcAotICAgID4KLXN0cnVjdCByZXZlcnNlX2Zv
bGRfaW1wbDwgMixGaXJzdCxMYXN0LFN0YXRlLEJhY2t3YXJkT3AsRm9yd2FyZE9wID4KLXsKLSAg
ICB0eXBlZGVmIEZpcnN0IGl0ZXIwOwotICAgIHR5cGVkZWYgU3RhdGUgZndkX3N0YXRlMDsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5MjwgRm9yd2FyZE9wLCBmd2Rfc3RhdGUwLCB0eXBlbmFt
ZSBkZXJlZjxpdGVyMD46OnR5cGUgPjo6dHlwZSBmd2Rfc3RhdGUxOwotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgbXBsOjpuZXh0PGl0ZXIwPjo6dHlwZSBpdGVyMTsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IGFwcGx5MjwgRm9yd2FyZE9wLCBmd2Rfc3RhdGUxLCB0eXBlbmFtZSBkZXJlZjxpdGVyMT46OnR5
cGUgPjo6dHlwZSBmd2Rfc3RhdGUyOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgbXBsOjpuZXh0PGl0
ZXIxPjo6dHlwZSBpdGVyMjsKLSAgICAKLQotICAgIHR5cGVkZWYgZndkX3N0YXRlMiBia3dkX3N0
YXRlMjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5MjwgQmFja3dhcmRPcCwgYmt3ZF9zdGF0
ZTIsIHR5cGVuYW1lIGRlcmVmPGl0ZXIxPjo6dHlwZSA+Ojp0eXBlIGJrd2Rfc3RhdGUxOwotICAg
IHR5cGVkZWYgdHlwZW5hbWUgYXBwbHkyPCBCYWNrd2FyZE9wLCBia3dkX3N0YXRlMSwgdHlwZW5h
bWUgZGVyZWY8aXRlcjA+Ojp0eXBlID46OnR5cGUgYmt3ZF9zdGF0ZTA7Ci0gICAgCi0KLSAgICB0
eXBlZGVmIGJrd2Rfc3RhdGUwIHN0YXRlOwotICAgIHR5cGVkZWYgaXRlcjIgaXRlcmF0b3I7Ci19
OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEZpcnN0Ci0gICAgLCB0eXBlbmFtZSBMYXN0
Ci0gICAgLCB0eXBlbmFtZSBTdGF0ZQotICAgICwgdHlwZW5hbWUgQmFja3dhcmRPcAotICAgICwg
dHlwZW5hbWUgRm9yd2FyZE9wCi0gICAgPgotc3RydWN0IHJldmVyc2VfZm9sZF9pbXBsPCAzLEZp
cnN0LExhc3QsU3RhdGUsQmFja3dhcmRPcCxGb3J3YXJkT3AgPgotewotICAgIHR5cGVkZWYgRmly
c3QgaXRlcjA7Ci0gICAgdHlwZWRlZiBTdGF0ZSBmd2Rfc3RhdGUwOwotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgYXBwbHkyPCBGb3J3YXJkT3AsIGZ3ZF9zdGF0ZTAsIHR5cGVuYW1lIGRlcmVmPGl0ZXIw
Pjo6dHlwZSA+Ojp0eXBlIGZ3ZF9zdGF0ZTE7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6Om5l
eHQ8aXRlcjA+Ojp0eXBlIGl0ZXIxOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHkyPCBGb3J3
YXJkT3AsIGZ3ZF9zdGF0ZTEsIHR5cGVuYW1lIGRlcmVmPGl0ZXIxPjo6dHlwZSA+Ojp0eXBlIGZ3
ZF9zdGF0ZTI7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6Om5leHQ8aXRlcjE+Ojp0eXBlIGl0
ZXIyOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHkyPCBGb3J3YXJkT3AsIGZ3ZF9zdGF0ZTIs
IHR5cGVuYW1lIGRlcmVmPGl0ZXIyPjo6dHlwZSA+Ojp0eXBlIGZ3ZF9zdGF0ZTM7Ci0gICAgdHlw
ZWRlZiB0eXBlbmFtZSBtcGw6Om5leHQ8aXRlcjI+Ojp0eXBlIGl0ZXIzOwotICAgIAotCi0gICAg
dHlwZWRlZiBmd2Rfc3RhdGUzIGJrd2Rfc3RhdGUzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBw
bHkyPCBCYWNrd2FyZE9wLCBia3dkX3N0YXRlMywgdHlwZW5hbWUgZGVyZWY8aXRlcjI+Ojp0eXBl
ID46OnR5cGUgYmt3ZF9zdGF0ZTI7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseTI8IEJhY2t3
YXJkT3AsIGJrd2Rfc3RhdGUyLCB0eXBlbmFtZSBkZXJlZjxpdGVyMT46OnR5cGUgPjo6dHlwZSBi
a3dkX3N0YXRlMTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5MjwgQmFja3dhcmRPcCwgYmt3
ZF9zdGF0ZTEsIHR5cGVuYW1lIGRlcmVmPGl0ZXIwPjo6dHlwZSA+Ojp0eXBlIGJrd2Rfc3RhdGUw
OwotICAgIAotCi0gICAgdHlwZWRlZiBia3dkX3N0YXRlMCBzdGF0ZTsKLSAgICB0eXBlZGVmIGl0
ZXIzIGl0ZXJhdG9yOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGaXJzdAotICAg
ICwgdHlwZW5hbWUgTGFzdAotICAgICwgdHlwZW5hbWUgU3RhdGUKLSAgICAsIHR5cGVuYW1lIEJh
Y2t3YXJkT3AKLSAgICAsIHR5cGVuYW1lIEZvcndhcmRPcAotICAgID4KLXN0cnVjdCByZXZlcnNl
X2ZvbGRfaW1wbDwgNCxGaXJzdCxMYXN0LFN0YXRlLEJhY2t3YXJkT3AsRm9yd2FyZE9wID4KLXsK
LSAgICB0eXBlZGVmIEZpcnN0IGl0ZXIwOwotICAgIHR5cGVkZWYgU3RhdGUgZndkX3N0YXRlMDsK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5MjwgRm9yd2FyZE9wLCBmd2Rfc3RhdGUwLCB0eXBl
bmFtZSBkZXJlZjxpdGVyMD46OnR5cGUgPjo6dHlwZSBmd2Rfc3RhdGUxOwotICAgIHR5cGVkZWYg
dHlwZW5hbWUgbXBsOjpuZXh0PGl0ZXIwPjo6dHlwZSBpdGVyMTsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIGFwcGx5MjwgRm9yd2FyZE9wLCBmd2Rfc3RhdGUxLCB0eXBlbmFtZSBkZXJlZjxpdGVyMT46
OnR5cGUgPjo6dHlwZSBmd2Rfc3RhdGUyOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgbXBsOjpuZXh0
PGl0ZXIxPjo6dHlwZSBpdGVyMjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5MjwgRm9yd2Fy
ZE9wLCBmd2Rfc3RhdGUyLCB0eXBlbmFtZSBkZXJlZjxpdGVyMj46OnR5cGUgPjo6dHlwZSBmd2Rf
c3RhdGUzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgbXBsOjpuZXh0PGl0ZXIyPjo6dHlwZSBpdGVy
MzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5MjwgRm9yd2FyZE9wLCBmd2Rfc3RhdGUzLCB0
eXBlbmFtZSBkZXJlZjxpdGVyMz46OnR5cGUgPjo6dHlwZSBmd2Rfc3RhdGU0OwotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgbXBsOjpuZXh0PGl0ZXIzPjo6dHlwZSBpdGVyNDsKLSAgICAKLQotICAgIHR5
cGVkZWYgZndkX3N0YXRlNCBia3dkX3N0YXRlNDsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5
MjwgQmFja3dhcmRPcCwgYmt3ZF9zdGF0ZTQsIHR5cGVuYW1lIGRlcmVmPGl0ZXIzPjo6dHlwZSA+
Ojp0eXBlIGJrd2Rfc3RhdGUzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHkyPCBCYWNrd2Fy
ZE9wLCBia3dkX3N0YXRlMywgdHlwZW5hbWUgZGVyZWY8aXRlcjI+Ojp0eXBlID46OnR5cGUgYmt3
ZF9zdGF0ZTI7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseTI8IEJhY2t3YXJkT3AsIGJrd2Rf
c3RhdGUyLCB0eXBlbmFtZSBkZXJlZjxpdGVyMT46OnR5cGUgPjo6dHlwZSBia3dkX3N0YXRlMTsK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5MjwgQmFja3dhcmRPcCwgYmt3ZF9zdGF0ZTEsIHR5
cGVuYW1lIGRlcmVmPGl0ZXIwPjo6dHlwZSA+Ojp0eXBlIGJrd2Rfc3RhdGUwOwotICAgIAotCi0g
ICAgdHlwZWRlZiBia3dkX3N0YXRlMCBzdGF0ZTsKLSAgICB0eXBlZGVmIGl0ZXI0IGl0ZXJhdG9y
OwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICBsb25nIE4KLSAgICAsIHR5cGVuYW1lIEZpcnN0Ci0g
ICAgLCB0eXBlbmFtZSBMYXN0Ci0gICAgLCB0eXBlbmFtZSBTdGF0ZQotICAgICwgdHlwZW5hbWUg
QmFja3dhcmRPcAotICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCi0gICAgPgotc3RydWN0IHJldmVy
c2VfZm9sZF9pbXBsCi17Ci0gICAgdHlwZWRlZiBGaXJzdCBpdGVyMDsKLSAgICB0eXBlZGVmIFN0
YXRlIGZ3ZF9zdGF0ZTA7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseTI8IEZvcndhcmRPcCwg
ZndkX3N0YXRlMCwgdHlwZW5hbWUgZGVyZWY8aXRlcjA+Ojp0eXBlID46OnR5cGUgZndkX3N0YXRl
MTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIG1wbDo6bmV4dDxpdGVyMD46OnR5cGUgaXRlcjE7Ci0g
ICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseTI8IEZvcndhcmRPcCwgZndkX3N0YXRlMSwgdHlwZW5h
bWUgZGVyZWY8aXRlcjE+Ojp0eXBlID46OnR5cGUgZndkX3N0YXRlMjsKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIG1wbDo6bmV4dDxpdGVyMT46OnR5cGUgaXRlcjI7Ci0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBhcHBseTI8IEZvcndhcmRPcCwgZndkX3N0YXRlMiwgdHlwZW5hbWUgZGVyZWY8aXRlcjI+Ojp0
eXBlID46OnR5cGUgZndkX3N0YXRlMzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIG1wbDo6bmV4dDxp
dGVyMj46OnR5cGUgaXRlcjM7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseTI8IEZvcndhcmRP
cCwgZndkX3N0YXRlMywgdHlwZW5hbWUgZGVyZWY8aXRlcjM+Ojp0eXBlID46OnR5cGUgZndkX3N0
YXRlNDsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIG1wbDo6bmV4dDxpdGVyMz46OnR5cGUgaXRlcjQ7
Ci0gICAgCi0KLSAgICB0eXBlZGVmIHJldmVyc2VfZm9sZF9pbXBsPAotICAgICAgICAgICggKE4g
LSA0KSA8IDAgPyAwIDogTiAtIDQgKQotICAgICAgICAsIGl0ZXI0Ci0gICAgICAgICwgTGFzdAot
ICAgICAgICAsIGZ3ZF9zdGF0ZTQKLSAgICAgICAgLCBCYWNrd2FyZE9wCi0gICAgICAgICwgRm9y
d2FyZE9wCi0gICAgICAgID4gbmVzdGVkX2NodW5rOwotCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBu
ZXN0ZWRfY2h1bms6OnN0YXRlIGJrd2Rfc3RhdGU0OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBw
bHkyPCBCYWNrd2FyZE9wLCBia3dkX3N0YXRlNCwgdHlwZW5hbWUgZGVyZWY8aXRlcjM+Ojp0eXBl
ID46OnR5cGUgYmt3ZF9zdGF0ZTM7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseTI8IEJhY2t3
YXJkT3AsIGJrd2Rfc3RhdGUzLCB0eXBlbmFtZSBkZXJlZjxpdGVyMj46OnR5cGUgPjo6dHlwZSBi
a3dkX3N0YXRlMjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFwcGx5MjwgQmFja3dhcmRPcCwgYmt3
ZF9zdGF0ZTIsIHR5cGVuYW1lIGRlcmVmPGl0ZXIxPjo6dHlwZSA+Ojp0eXBlIGJrd2Rfc3RhdGUx
OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwbHkyPCBCYWNrd2FyZE9wLCBia3dkX3N0YXRlMSwg
dHlwZW5hbWUgZGVyZWY8aXRlcjA+Ojp0eXBlID46OnR5cGUgYmt3ZF9zdGF0ZTA7Ci0gICAgCi0K
LSAgICB0eXBlZGVmIGJrd2Rfc3RhdGUwIHN0YXRlOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgbmVz
dGVkX2NodW5rOjppdGVyYXRvciBpdGVyYXRvcjsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlw
ZW5hbWUgRmlyc3QKLSAgICAsIHR5cGVuYW1lIExhc3QKLSAgICAsIHR5cGVuYW1lIFN0YXRlCi0g
ICAgLCB0eXBlbmFtZSBCYWNrd2FyZE9wCi0gICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKLSAgICA+
Ci1zdHJ1Y3QgcmV2ZXJzZV9mb2xkX2ltcGw8IC0xLEZpcnN0LExhc3QsU3RhdGUsQmFja3dhcmRP
cCxGb3J3YXJkT3AgPgotewotICAgIHR5cGVkZWYgcmV2ZXJzZV9mb2xkX2ltcGw8Ci0gICAgICAg
ICAgLTEKLSAgICAgICAgLCB0eXBlbmFtZSBtcGw6Om5leHQ8Rmlyc3Q+Ojp0eXBlCi0gICAgICAg
ICwgTGFzdAotICAgICAgICAsIHR5cGVuYW1lIGFwcGx5MjxGb3J3YXJkT3AsU3RhdGUsIHR5cGVu
YW1lIGRlcmVmPEZpcnN0Pjo6dHlwZT46OnR5cGUKLSAgICAgICAgLCBCYWNrd2FyZE9wCi0gICAg
ICAgICwgRm9yd2FyZE9wCi0gICAgICAgID4gbmVzdGVkX3N0ZXA7Ci0KLSAgICB0eXBlZGVmIHR5
cGVuYW1lIGFwcGx5MjwKLSAgICAgICAgICBCYWNrd2FyZE9wCi0gICAgICAgICwgdHlwZW5hbWUg
bmVzdGVkX3N0ZXA6OnN0YXRlCi0gICAgICAgICwgdHlwZW5hbWUgZGVyZWY8Rmlyc3Q+Ojp0eXBl
Ci0gICAgICAgID46OnR5cGUgc3RhdGU7Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIG5lc3RlZF9z
dGVwOjppdGVyYXRvciBpdGVyYXRvcjsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUg
TGFzdAotICAgICwgdHlwZW5hbWUgU3RhdGUKLSAgICAsIHR5cGVuYW1lIEJhY2t3YXJkT3AKLSAg
ICAsIHR5cGVuYW1lIEZvcndhcmRPcAotICAgID4KLXN0cnVjdCByZXZlcnNlX2ZvbGRfaW1wbDwg
LTEsTGFzdCxMYXN0LFN0YXRlLEJhY2t3YXJkT3AsRm9yd2FyZE9wID4KLXsKLSAgICB0eXBlZGVm
IFN0YXRlIHN0YXRlOwotICAgIHR5cGVkZWYgTGFzdCBpdGVyYXRvcjsKLX07Ci0KLX19fQpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1
eF8vcHJlcHJvY2Vzc2VkL2djYy90ZW1wbGF0ZV9hcml0eS5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL3RlbXBs
YXRlX2FyaXR5LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFlYzRiOGE4ZTE3
ZmExYmE4MmRlY2RhNzA3ZTc0MWYxMzM3MDg3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvZ2NjL3RlbXBsYXRlX2FyaXR5LmhwcAorKysgL2Rl
di9udWxsCkBAIC0xLDk3ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kg
MjAwMS0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpCi0vLwotCi0vLyAqUHJlcHJvY2Vzc2VkKiB2ZXJzaW9uIG9mIHRoZSBtYWluICJ0ZW1wbGF0
ZV9hcml0eS5ocHAiIGhlYWRlcgotLy8gLS0gRE8gTk9UIG1vZGlmeSBieSBoYW5kIQotCi1uYW1l
c3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFtZXNwYWNlIGF1eCB7Ci10ZW1wbGF0ZTwg
aW50IE4gPiBzdHJ1Y3QgYXJpdHlfdGFnCi17Ci0gICAgdHlwZWRlZiBjaGFyICgmdHlwZSlbTiAr
IDFdOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICBpbnQgQzEsIGludCBDMiwgaW50IEMzLCBpbnQg
QzQsIGludCBDNSwgaW50IEM2Ci0gICAgPgotc3RydWN0IG1heF9hcml0eQotewotICAgIEJPT1NU
X1NUQVRJQ19DT05TVEFOVChpbnQsIHZhbHVlID0KLSAgICAgICAgICAoIEM2ID4gMCA/IEM2IDog
KCBDNSA+IDAgPyBDNSA6ICggQzQgPiAwID8gQzQgOiAoIEMzID4gMCA/IEMzIDogKCBDMiA+IDAg
PyBDMiA6ICggQzEgPiAwID8gQzEgOiAtMSApICkgKSApICkgKQotICAgICAgICApOwotfTsKLQot
YXJpdHlfdGFnPDA+Ojp0eXBlIGFyaXR5X2hlbHBlciguLi4pOwotCi10ZW1wbGF0ZTwKLSAgICAg
IHRlbXBsYXRlPCB0eXBlbmFtZSBQMSA+IGNsYXNzIEYKLSAgICAsIHR5cGVuYW1lIFQxCi0gICAg
PgotdHlwZW5hbWUgYXJpdHlfdGFnPDE+Ojp0eXBlCi1hcml0eV9oZWxwZXIodHlwZV93cmFwcGVy
PCBGPFQxPiA+LCBhcml0eV90YWc8MT4pOwotCi10ZW1wbGF0ZTwKLSAgICAgIHRlbXBsYXRlPCB0
eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIgPiBjbGFzcyBGCi0gICAgLCB0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDIKLSAgICA+Ci10eXBlbmFtZSBhcml0eV90YWc8Mj46OnR5cGUKLWFyaXR5X2hlbHBl
cih0eXBlX3dyYXBwZXI8IEY8IFQxLFQyID4gPiwgYXJpdHlfdGFnPDI+KTsKLQotdGVtcGxhdGU8
Ci0gICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMyA+
IGNsYXNzIEYKLSAgICAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMKLSAg
ICA+Ci10eXBlbmFtZSBhcml0eV90YWc8Mz46OnR5cGUKLWFyaXR5X2hlbHBlcih0eXBlX3dyYXBw
ZXI8IEY8IFQxLFQyLFQzID4gPiwgYXJpdHlfdGFnPDM+KTsKLQotdGVtcGxhdGU8Ci0gICAgICB0
ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUg
UDQgPiBjbGFzcyBGCi0gICAgLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQz
LCB0eXBlbmFtZSBUNAotICAgID4KLXR5cGVuYW1lIGFyaXR5X3RhZzw0Pjo6dHlwZQotYXJpdHlf
aGVscGVyKHR5cGVfd3JhcHBlcjwgRjwgVDEsVDIsVDMsVDQgPiA+LCBhcml0eV90YWc8ND4pOwot
Ci10ZW1wbGF0ZTwKLSAgICAgIHRlbXBsYXRlPAotICAgICAgICAgIHR5cGVuYW1lIFAxLCB0eXBl
bmFtZSBQMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIFA0Ci0gICAgICAgICwgdHlwZW5hbWUgUDUK
LSAgICAgICAgPgotICAgICAgY2xhc3MgRgotICAgICwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQy
LCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1Ci0gICAgPgotdHlwZW5hbWUg
YXJpdHlfdGFnPDU+Ojp0eXBlCi1hcml0eV9oZWxwZXIodHlwZV93cmFwcGVyPCBGPCBUMSxUMixU
MyxUNCxUNSA+ID4sIGFyaXR5X3RhZzw1Pik7Ci0KLXRlbXBsYXRlPAotICAgICAgdGVtcGxhdGU8
Ci0gICAgICAgICAgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlwZW5h
bWUgUDQKLSAgICAgICAgLCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgUDYKLSAgICAgICAgPgotICAg
ICAgY2xhc3MgRgotICAgICwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywg
dHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1Ci0gICAgLCB0eXBlbmFtZSBUNgotICAgID4KLXR5cGVu
YW1lIGFyaXR5X3RhZzw2Pjo6dHlwZQotYXJpdHlfaGVscGVyKHR5cGVfd3JhcHBlcjwgRjwgVDEs
VDIsVDMsVDQsVDUsVDYgPiA+LCBhcml0eV90YWc8Nj4pOwotdGVtcGxhdGU8IHR5cGVuYW1lIEYs
IGludCBOID4KLXN0cnVjdCB0ZW1wbGF0ZV9hcml0eV9pbXBsCi17Ci0gICAgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKGludCwgdmFsdWUgPQotICAgICAgICAgIHNpemVvZig6OmJvb3N0OjptcGw6OmF1
eDo6YXJpdHlfaGVscGVyKHR5cGVfd3JhcHBlcjxGPigpLCBhcml0eV90YWc8Tj4oKSkpIC0gMQot
ICAgICAgICApOwotfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIEYgPgotc3RydWN0IHRlbXBsYXRl
X2FyaXR5Ci17Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwgdmFsdWUgID0gKAotICAg
ICAgICAgIG1heF9hcml0eTwgdGVtcGxhdGVfYXJpdHlfaW1wbDwgRiwxID46OnZhbHVlLCB0ZW1w
bGF0ZV9hcml0eV9pbXBsPCBGLDIgPjo6dmFsdWUsIHRlbXBsYXRlX2FyaXR5X2ltcGw8IEYsMyA+
Ojp2YWx1ZSwgdGVtcGxhdGVfYXJpdHlfaW1wbDwgRiw0ID46OnZhbHVlLCB0ZW1wbGF0ZV9hcml0
eV9pbXBsPCBGLDUgPjo6dmFsdWUsIHRlbXBsYXRlX2FyaXR5X2ltcGw8IEYsNiA+Ojp2YWx1ZSA+
Ojp2YWx1ZQotICAgICAgICApKTsKLSAgICB0eXBlZGVmIG1wbDo6aW50Xzx2YWx1ZT4gdHlwZTsK
LX07Ci0KLX19fQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2djYy92ZWN0b3IuaHBwIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL2dj
Yy92ZWN0b3IuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmE5NTY1YTUzN2Jl
OGY2MTdmNTg2OTExNzE0Mzc5MDQ0YTM0ZjAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9nY2MvdmVjdG9yLmhwcAorKysgL2Rldi9udWxsCkBA
IC0xLDMyMyArMCwwIEBACi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAw
NAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBv
ciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8K
LQotLy8gUHJlcHJvY2Vzc2VkIHZlcnNpb24gb2YgImJvb3N0L21wbC92ZWN0b3IuaHBwIiBoZWFk
ZXIKLS8vIC0tIERPIE5PVCBtb2RpZnkgYnkgaGFuZCEKLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFt
ZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAgPSBuYSwgdHlwZW5h
bWUgVDEgPSBuYSwgdHlwZW5hbWUgVDIgPSBuYSwgdHlwZW5hbWUgVDMgPSBuYQotICAgICwgdHlw
ZW5hbWUgVDQgPSBuYSwgdHlwZW5hbWUgVDUgPSBuYSwgdHlwZW5hbWUgVDYgPSBuYSwgdHlwZW5h
bWUgVDcgPSBuYQotICAgICwgdHlwZW5hbWUgVDggPSBuYSwgdHlwZW5hbWUgVDkgPSBuYSwgdHlw
ZW5hbWUgVDEwID0gbmEsIHR5cGVuYW1lIFQxMSA9IG5hCi0gICAgLCB0eXBlbmFtZSBUMTIgPSBu
YSwgdHlwZW5hbWUgVDEzID0gbmEsIHR5cGVuYW1lIFQxNCA9IG5hCi0gICAgLCB0eXBlbmFtZSBU
MTUgPSBuYSwgdHlwZW5hbWUgVDE2ID0gbmEsIHR5cGVuYW1lIFQxNyA9IG5hCi0gICAgLCB0eXBl
bmFtZSBUMTggPSBuYSwgdHlwZW5hbWUgVDE5ID0gbmEKLSAgICA+Ci1zdHJ1Y3QgdmVjdG9yOwot
Ci10ZW1wbGF0ZTwKLSAgICAgCi0gICAgPgotc3RydWN0IHZlY3RvcjwKLSAgICAgICAgICBuYSwg
bmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBu
YSwgbmEKLSAgICAgICAgLCBuYSwgbmEsIG5hCi0gICAgICAgID4KLSAgICA6IHZlY3RvcjA8ICA+
Ci17Ci0gICAgdHlwZWRlZiB2ZWN0b3IwPCAgPjo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8
Ci0gICAgICB0eXBlbmFtZSBUMAotICAgID4KLXN0cnVjdCB2ZWN0b3I8Ci0gICAgICAgICAgVDAs
IG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwg
bmEsIG5hCi0gICAgICAgICwgbmEsIG5hLCBuYQotICAgICAgICA+Ci0gICAgOiB2ZWN0b3IxPFQw
PgotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgdmVjdG9yMTxUMD46OnR5cGUgdHlwZTsKLX07Ci0K
LXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxCi0gICAgPgotc3RydWN0
IHZlY3RvcjwKLSAgICAgICAgICBUMCwgVDEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBu
YSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEKLSAgICAgICAgLCBuYSwgbmEsIG5hCi0gICAg
ICAgID4KLSAgICA6IHZlY3RvcjI8IFQwLFQxID4KLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHZl
Y3RvcjI8IFQwLFQxID46OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5h
bWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMgotICAgID4KLXN0cnVjdCB2ZWN0b3I8Ci0g
ICAgICAgICAgVDAsIFQxLCBUMiwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwg
bmEsIG5hLCBuYSwgbmEsIG5hCi0gICAgICAgICwgbmEsIG5hLCBuYQotICAgICAgICA+Ci0gICAg
OiB2ZWN0b3IzPCBUMCxUMSxUMiA+Ci17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSB2ZWN0b3IzPCBU
MCxUMSxUMiA+Ojp0eXBlIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQw
LCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzCi0gICAgPgotc3RydWN0IHZl
Y3RvcjwKLSAgICAgICAgICBUMCwgVDEsIFQyLCBUMywgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwg
bmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEKLSAgICAgICAgLCBuYSwgbmEsIG5hCi0gICAgICAg
ID4KLSAgICA6IHZlY3RvcjQ8IFQwLFQxLFQyLFQzID4KLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IHZlY3RvcjQ8IFQwLFQxLFQyLFQzID46OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAg
ICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5
cGVuYW1lIFQ0Ci0gICAgPgotc3RydWN0IHZlY3RvcjwKLSAgICAgICAgICBUMCwgVDEsIFQyLCBU
MywgVDQsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEKLSAg
ICAgICAgLCBuYSwgbmEsIG5hCi0gICAgICAgID4KLSAgICA6IHZlY3RvcjU8IFQwLFQxLFQyLFQz
LFQ0ID4KLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHZlY3RvcjU8IFQwLFQxLFQyLFQzLFQ0ID46
OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1l
IFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFt
ZSBUNQotICAgID4KLXN0cnVjdCB2ZWN0b3I8Ci0gICAgICAgICAgVDAsIFQxLCBUMiwgVDMsIFQ0
LCBUNSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hCi0gICAgICAg
ICwgbmEsIG5hLCBuYQotICAgICAgICA+Ci0gICAgOiB2ZWN0b3I2PCBUMCxUMSxUMixUMyxUNCxU
NSA+Ci17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSB2ZWN0b3I2PCBUMCxUMSxUMixUMyxUNCxUNSA+
Ojp0eXBlIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFt
ZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5h
bWUgVDUsIHR5cGVuYW1lIFQ2Ci0gICAgPgotc3RydWN0IHZlY3RvcjwKLSAgICAgICAgICBUMCwg
VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBu
YSwgbmEKLSAgICAgICAgLCBuYSwgbmEsIG5hCi0gICAgICAgID4KLSAgICA6IHZlY3Rvcjc8IFQw
LFQxLFQyLFQzLFQ0LFQ1LFQ2ID4KLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHZlY3Rvcjc8IFQw
LFQxLFQyLFQzLFQ0LFQ1LFQ2ID46OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAg
dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVu
YW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3Ci0gICAg
Pgotc3RydWN0IHZlY3RvcjwKLSAgICAgICAgICBUMCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwg
VDcsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEKLSAgICAgICAgLCBuYSwgbmEs
IG5hCi0gICAgICAgID4KLSAgICA6IHZlY3Rvcjg8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3ID4K
LXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHZlY3Rvcjg8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3
ID46OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAsIHR5cGVu
YW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBl
bmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOAotICAgID4KLXN0
cnVjdCB2ZWN0b3I8Ci0gICAgICAgICAgVDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBU
OCwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hCi0gICAgICAgICwgbmEsIG5hLCBuYQot
ICAgICAgICA+Ci0gICAgOiB2ZWN0b3I5PCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCA+Ci17
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSB2ZWN0b3I5PCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxU
OCA+Ojp0eXBlIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBl
bmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlw
ZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1l
IFQ5Ci0gICAgPgotc3RydWN0IHZlY3RvcjwKLSAgICAgICAgICBUMCwgVDEsIFQyLCBUMywgVDQs
IFQ1LCBUNiwgVDcsIFQ4LCBUOSwgbmEsIG5hLCBuYSwgbmEsIG5hLCBuYSwgbmEKLSAgICAgICAg
LCBuYSwgbmEsIG5hCi0gICAgICAgID4KLSAgICA6IHZlY3RvcjEwPCBUMCxUMSxUMixUMyxUNCxU
NSxUNixUNyxUOCxUOSA+Ci17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSB2ZWN0b3IxMDwgVDAsVDEs
VDIsVDMsVDQsVDUsVDYsVDcsVDgsVDkgPjo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0g
ICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywg
dHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcs
IHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOQotICAgICwgdHlwZW5hbWUgVDEwCi0gICAgPgotc3Ry
dWN0IHZlY3RvcjwKLSAgICAgICAgICBUMCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4
LCBUOSwgVDEwLCBuYSwgbmEsIG5hLCBuYSwgbmEsIG5hCi0gICAgICAgICwgbmEsIG5hLCBuYQot
ICAgICAgICA+Ci0gICAgOiB2ZWN0b3IxMTwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDks
VDEwID4KLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHZlY3RvcjExPCBUMCxUMSxUMixUMyxUNCxU
NSxUNixUNyxUOCxUOSxUMTAgPjo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0
eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5h
bWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVu
YW1lIFQ4LCB0eXBlbmFtZSBUOQotICAgICwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEKLSAg
ICA+Ci1zdHJ1Y3QgdmVjdG9yPAotICAgICAgICAgIFQwLCBUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2
LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgbmEsIG5hLCBuYSwgbmEKLSAgICAgICAgLCBuYSwgbmEs
IG5hLCBuYQotICAgICAgICA+Ci0gICAgOiB2ZWN0b3IxMjwgVDAsVDEsVDIsVDMsVDQsVDUsVDYs
VDcsVDgsVDksVDEwLFQxMSA+Ci17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSB2ZWN0b3IxMjwgVDAs
VDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSA+Ojp0eXBlIHR5cGU7Ci19OwotCi10
ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5
cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0
eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBlbmFtZSBUMTAs
IHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyCi0gICAgPgotc3RydWN0IHZlY3RvcjwKLSAgICAg
ICAgICBUMCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQx
MiwgbmEsIG5hLCBuYQotICAgICAgICAsIG5hLCBuYSwgbmEsIG5hCi0gICAgICAgID4KLSAgICA6
IHZlY3RvcjEzPCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMiA+Ci17
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSB2ZWN0b3IxMzwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcs
VDgsVDksVDEwLFQxMSxUMTIgPjo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0
eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5h
bWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVu
YW1lIFQ4LCB0eXBlbmFtZSBUOQotICAgICwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5
cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzCi0gICAgPgotc3RydWN0IHZlY3RvcjwKLSAgICAgICAg
ICBUMCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwg
VDEzLCBuYSwgbmEKLSAgICAgICAgLCBuYSwgbmEsIG5hLCBuYQotICAgICAgICA+Ci0gICAgOiB2
ZWN0b3IxNDwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzID4K
LXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHZlY3RvcjE0PCBUMCxUMSxUMixUMyxUNCxUNSxUNixU
NyxUOCxUOSxUMTAsVDExLFQxMixUMTMgPjo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0g
ICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywg
dHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcs
IHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOQotICAgICwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBU
MTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQKLSAgICA+Ci1zdHJ1
Y3QgdmVjdG9yPAotICAgICAgICAgIFQwLCBUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgs
IFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgbmEKLSAgICAgICAgLCBuYSwgbmEsIG5hLCBu
YQotICAgICAgICA+Ci0gICAgOiB2ZWN0b3IxNTwKLSAgICAgICAgICBUMCwgVDEsIFQyLCBUMywg
VDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQKLSAgICAgICAg
PgotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgdmVjdG9yMTU8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2
LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQgPjo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxh
dGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFt
ZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5h
bWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOQotICAgICwgdHlwZW5hbWUgVDEwLCB0eXBl
bmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQKLSAgICAs
IHR5cGVuYW1lIFQxNQotICAgID4KLXN0cnVjdCB2ZWN0b3I8Ci0gICAgICAgICAgVDAsIFQxLCBU
MiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0Ci0g
ICAgICAgICwgVDE1LCBuYSwgbmEsIG5hLCBuYQotICAgICAgICA+Ci0gICAgOiB2ZWN0b3IxNjwK
LSAgICAgICAgICBUMCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBU
MTEsIFQxMiwgVDEzLCBUMTQKLSAgICAgICAgLCBUMTUKLSAgICAgICAgPgotewotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgdmVjdG9yMTY8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxU
MTEsVDEyLFQxMyxUMTQsVDE1ID46OnR5cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAg
dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVu
YW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBl
bmFtZSBUOCwgdHlwZW5hbWUgVDkKLSAgICAsIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0
eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0Ci0gICAgLCB0eXBlbmFtZSBU
MTUsIHR5cGVuYW1lIFQxNgotICAgID4KLXN0cnVjdCB2ZWN0b3I8Ci0gICAgICAgICAgVDAsIFQx
LCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0
Ci0gICAgICAgICwgVDE1LCBUMTYsIG5hLCBuYSwgbmEKLSAgICAgICAgPgotICAgIDogdmVjdG9y
MTc8Ci0gICAgICAgICAgVDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQx
MCwgVDExLCBUMTIsIFQxMywgVDE0Ci0gICAgICAgICwgVDE1LCBUMTYKLSAgICAgICAgPgotewot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgdmVjdG9yMTc8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4
LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQsVDE1LFQxNiA+Ojp0eXBlIHR5cGU7Ci19OwotCi10ZW1w
bGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVu
YW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBl
bmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBlbmFtZSBUMTAsIHR5
cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNAotICAg
ICwgdHlwZW5hbWUgVDE1LCB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNwotICAgID4KLXN0cnVj
dCB2ZWN0b3I8Ci0gICAgICAgICAgVDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwg
VDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0Ci0gICAgICAgICwgVDE1LCBUMTYsIFQxNywgbmEs
IG5hCi0gICAgICAgID4KLSAgICA6IHZlY3RvcjE4PAotICAgICAgICAgIFQwLCBUMSwgVDIsIFQz
LCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNAotICAgICAg
ICAsIFQxNSwgVDE2LCBUMTcKLSAgICAgICAgPgotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgdmVj
dG9yMTg8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQs
VDE1LFQxNixUMTcgPjo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFt
ZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQK
LSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4
LCB0eXBlbmFtZSBUOQotICAgICwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5cGVuYW1l
IFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQKLSAgICAsIHR5cGVuYW1lIFQxNSwgdHlw
ZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOAotICAgID4KLXN0cnVjdCB2ZWN0
b3I8Ci0gICAgICAgICAgVDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQx
MCwgVDExLCBUMTIsIFQxMywgVDE0Ci0gICAgICAgICwgVDE1LCBUMTYsIFQxNywgVDE4LCBuYQot
ICAgICAgICA+Ci0gICAgOiB2ZWN0b3IxOTwKLSAgICAgICAgICBUMCwgVDEsIFQyLCBUMywgVDQs
IFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQKLSAgICAgICAgLCBU
MTUsIFQxNiwgVDE3LCBUMTgKLSAgICAgICAgPgotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgdmVj
dG9yMTk8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQxMCxUMTEsVDEyLFQxMyxUMTQs
VDE1LFQxNixUMTcsVDE4ID46OnR5cGUgdHlwZTsKLX07Ci0KLS8vLyBwcmltYXJ5IHRlbXBsYXRl
IChub3QgYSBzcGVjaWFsaXphdGlvbiEpCi0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAs
IHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAg
LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlw
ZW5hbWUgVDkKLSAgICAsIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIs
IHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0Ci0gICAgLCB0eXBlbmFtZSBUMTUsIHR5cGVuYW1l
IFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOQotICAgID4KLXN0
cnVjdCB2ZWN0b3IKLSAgICA6IHZlY3RvcjIwPAotICAgICAgICAgIFQwLCBUMSwgVDIsIFQzLCBU
NCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNAotICAgICAgICAs
IFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIHZlY3RvcjIwPCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixU
MTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTkgPjo6dHlwZSB0eXBlOwotfTsKLQotfX0KLQpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1
eF8vcHJlcHJvY2Vzc29yL2RlZl9wYXJhbXNfdGFpbC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZGVmX3BhcmFtc190
YWlsLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiMzk4OWQxYzkwN2EwMTAy
NzkzODMzOGFjN2RjNzMwYWVmYjk2Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
cGwvYXV4Xy9wcmVwcm9jZXNzb3IvZGVmX3BhcmFtc190YWlsLmhwcAorKysgL2Rldi9udWxsCkBA
IC0xLDEwNSArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9QUkVQUk9DRVNTT1JfREVG
X1BBUkFNU19UQUlMX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX1BSRVBST0NF
U1NPUl9ERUZfUEFSQU1TX1RBSUxfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5
IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxl
IExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBm
b3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0K
LSNpbmNsdWRlIDxib29zdC9tcGwvbGltaXRzL2FyaXR5LmhwcD4KLSNpbmNsdWRlIDxib29zdC9t
cGwvYXV4Xy9jb25maWcvZHRwLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcv
cHJlcHJvY2Vzc29yLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb21tYV9p
Zi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2xvZ2ljYWwvYW5kLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvaWRlbnRpdHkuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L3ByZXByb2Nlc3Nvci9lbXB0eS5ocHA+Ci0KLS8vIEJPT1NUX01QTF9QUF9ERUZfUEFSQU1TX1RB
SUwoMSxULHZhbHVlKTogLCBUMSA9IHZhbHVlLCAuLiwgVG4gPSB2YWx1ZQotLy8gQk9PU1RfTVBM
X1BQX0RFRl9QQVJBTVNfVEFJTCgyLFQsdmFsdWUpOiAsIFQyID0gdmFsdWUsIC4uLCBUbiA9IHZh
bHVlCi0vLyBCT09TVF9NUExfUFBfREVGX1BBUkFNU19UQUlMKG4sVCx2YWx1ZSk6IDxub3RoaW5n
PgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19PV05fUFBfUFJJTUlUSVZFUykKLQot
IyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9maWx0ZXJfcGFyYW1zLmhw
cD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3Ivc3ViLmhwcD4KLQot
IyAgIGRlZmluZSBCT09TVF9NUExfUFBfREVGX1BBUkFNU19UQUlMX0lNUEwoaSwgcGFyYW0sIHZh
bHVlX2Z1bmMpIFwKLSAgICBCT09TVF9NUExfUFBfREVGX1BBUkFNU19UQUlMX0RFTEFZXzEoIFwK
LSAgICAgICAgICBpIFwKLSAgICAgICAgLCBCT09TVF9NUExfUFBfU1VCKEJPT1NUX01QTF9MSU1J
VF9NRVRBRlVOQ1RJT05fQVJJVFksaSkgXAotICAgICAgICAsIHBhcmFtIFwKLSAgICAgICAgLCB2
YWx1ZV9mdW5jIFwKLSAgICAgICAgKSBcCi0gICAgLyoqLwotCi0jICAgZGVmaW5lIEJPT1NUX01Q
TF9QUF9ERUZfUEFSQU1TX1RBSUxfREVMQVlfMShpLCBuLCBwYXJhbSwgdmFsdWVfZnVuYykgXAot
ICAgIEJPT1NUX01QTF9QUF9ERUZfUEFSQU1TX1RBSUxfREVMQVlfMihpLG4scGFyYW0sdmFsdWVf
ZnVuYykgXAotICAgIC8qKi8KLQotIyAgIGRlZmluZSBCT09TVF9NUExfUFBfREVGX1BBUkFNU19U
QUlMX0RFTEFZXzIoaSwgbiwgcGFyYW0sIHZhbHVlX2Z1bmMpIFwKLSAgICBCT09TVF9QUF9DT01N
QV9JRihCT09TVF9QUF9BTkQoaSxuKSkgXAotICAgIEJPT1NUX01QTF9QUF9ERUZfUEFSQU1TX1RB
SUxfIyNpKG4scGFyYW0sdmFsdWVfZnVuYykgXAotICAgIC8qKi8KLQotIyAgIGRlZmluZSBCT09T
VF9NUExfUFBfREVGX1BBUkFNU19UQUlMXzAoaSxwLHYpIEJPT1NUX01QTF9QUF9GSUxURVJfUEFS
QU1TXyMjaShwIyMxIHYoKSxwIyMyIHYoKSxwIyMzIHYoKSxwIyM0IHYoKSxwIyM1IHYoKSxwIyM2
IHYoKSxwIyM3IHYoKSxwIyM4IHYoKSxwIyM5IHYoKSkKLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BQ
X0RFRl9QQVJBTVNfVEFJTF8xKGkscCx2KSBCT09TVF9NUExfUFBfRklMVEVSX1BBUkFNU18jI2ko
cCMjMiB2KCkscCMjMyB2KCkscCMjNCB2KCkscCMjNSB2KCkscCMjNiB2KCkscCMjNyB2KCkscCMj
OCB2KCkscCMjOSB2KCkscDEpCi0jICAgZGVmaW5lIEJPT1NUX01QTF9QUF9ERUZfUEFSQU1TX1RB
SUxfMihpLHAsdikgQk9PU1RfTVBMX1BQX0ZJTFRFUl9QQVJBTVNfIyNpKHAjIzMgdigpLHAjIzQg
digpLHAjIzUgdigpLHAjIzYgdigpLHAjIzcgdigpLHAjIzggdigpLHAjIzkgdigpLHAxLHAyKQot
IyAgIGRlZmluZSBCT09TVF9NUExfUFBfREVGX1BBUkFNU19UQUlMXzMoaSxwLHYpIEJPT1NUX01Q
TF9QUF9GSUxURVJfUEFSQU1TXyMjaShwIyM0IHYoKSxwIyM1IHYoKSxwIyM2IHYoKSxwIyM3IHYo
KSxwIyM4IHYoKSxwIyM5IHYoKSxwMSxwMixwMykKLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BQX0RF
Rl9QQVJBTVNfVEFJTF80KGkscCx2KSBCT09TVF9NUExfUFBfRklMVEVSX1BBUkFNU18jI2kocCMj
NSB2KCkscCMjNiB2KCkscCMjNyB2KCkscCMjOCB2KCkscCMjOSB2KCkscDEscDIscDMscDQpCi0j
ICAgZGVmaW5lIEJPT1NUX01QTF9QUF9ERUZfUEFSQU1TX1RBSUxfNShpLHAsdikgQk9PU1RfTVBM
X1BQX0ZJTFRFUl9QQVJBTVNfIyNpKHAjIzYgdigpLHAjIzcgdigpLHAjIzggdigpLHAjIzkgdigp
LHAxLHAyLHAzLHA0LHA1KQotIyAgIGRlZmluZSBCT09TVF9NUExfUFBfREVGX1BBUkFNU19UQUlM
XzYoaSxwLHYpIEJPT1NUX01QTF9QUF9GSUxURVJfUEFSQU1TXyMjaShwIyM3IHYoKSxwIyM4IHYo
KSxwIyM5IHYoKSxwMSxwMixwMyxwNCxwNSxwNikKLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BQX0RF
Rl9QQVJBTVNfVEFJTF83KGkscCx2KSBCT09TVF9NUExfUFBfRklMVEVSX1BBUkFNU18jI2kocCMj
OCB2KCkscCMjOSB2KCkscDEscDIscDMscDQscDUscDYscDcpCi0jICAgZGVmaW5lIEJPT1NUX01Q
TF9QUF9ERUZfUEFSQU1TX1RBSUxfOChpLHAsdikgQk9PU1RfTVBMX1BQX0ZJTFRFUl9QQVJBTVNf
IyNpKHAjIzkgdigpLHAxLHAyLHAzLHA0LHA1LHA2LHA3LHA4KQotIyAgIGRlZmluZSBCT09TVF9N
UExfUFBfREVGX1BBUkFNU19UQUlMXzkoaSxwLHYpIEJPT1NUX01QTF9QUF9GSUxURVJfUEFSQU1T
XyMjaShwMSxwMixwMyxwNCxwNSxwNixwNyxwOCxwOSkKLQotI2Vsc2UKLQotIyAgIGluY2x1ZGUg
PGJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2FkZC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9v
c3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvc3ViLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9w
cmVwcm9jZXNzb3IvaW5jLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvdHVw
bGUvZWxlbS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3JlcGVhdC5ocHA+
Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHA+Ci0KLSMgICBkZWZpbmUg
Qk9PU1RfTVBMX1BQX0FVWF9UQUlMX1BBUkFNX0ZVTkModW51c2VkLCBpLCBvcCkgXAotICAgICwg
Qk9PU1RfUFBfQ0FUKCBcCi0gICAgICAgICAgQk9PU1RfUFBfVFVQTEVfRUxFTSgzLCAxLCBvcCkg
XAotICAgICAgICAsIEJPT1NUX1BQX0FERF9EKDEsIGksIEJPT1NUX1BQX0lOQyhCT09TVF9QUF9U
VVBMRV9FTEVNKDMsIDAsIG9wKSkpIFwKLSAgICAgICAgKSBCT09TVF9QUF9UVVBMRV9FTEVNKDMs
IDIsIG9wKSgpIFwKLSAgICAvKiovCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BQX0RFRl9QQVJB
TVNfVEFJTF9JTVBMKGksIHBhcmFtLCB2YWx1ZV9mdW5jKSBcCi0gICAgQk9PU1RfUFBfUkVQRUFU
KCBcCi0gICAgICAgICAgQk9PU1RfUFBfU1VCX0QoMSwgQk9PU1RfTVBMX0xJTUlUX01FVEFGVU5D
VElPTl9BUklUWSwgaSkgXAotICAgICAgICAsIEJPT1NUX01QTF9QUF9BVVhfVEFJTF9QQVJBTV9G
VU5DIFwKLSAgICAgICAgLCAoaSwgcGFyYW0sIHZhbHVlX2Z1bmMpIFwKLSAgICAgICAgKSBcCi0g
ICAgLyoqLwotCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfQ0ZHX05PX09XTl9QUF9QUklNSVRJVkVT
Ci0KLSNkZWZpbmUgQk9PU1RfTVBMX1BQX0RFRl9QQVJBTVNfVEFJTChpLCBwYXJhbSwgdmFsdWUp
IFwKLSAgICBCT09TVF9NUExfUFBfREVGX1BBUkFNU19UQUlMX0lNUEwoaSwgcGFyYW0sIEJPT1NU
X1BQX0lERU5USVRZKD12YWx1ZSkpIFwKLSAgICAvKiovCi0KLSNpZiAhZGVmaW5lZChCT09TVF9N
UExfQ0ZHX05PX0RFRkFVTFRfUEFSQU1FVEVSU19JTl9ORVNURURfVEVNUExBVEVTKQotIyAgIGRl
ZmluZSBCT09TVF9NUExfUFBfTkVTVEVEX0RFRl9QQVJBTVNfVEFJTChpLCBwYXJhbSwgdmFsdWUp
IFwKLSAgICBCT09TVF9NUExfUFBfREVGX1BBUkFNU19UQUlMX0lNUEwoaSwgcGFyYW0sIEJPT1NU
X1BQX0lERU5USVRZKD12YWx1ZSkpIFwKLSAgICAvKiovCi0jZWxzZQotIyAgIGRlZmluZSBCT09T
VF9NUExfUFBfTkVTVEVEX0RFRl9QQVJBTVNfVEFJTChpLCBwYXJhbSwgdmFsdWUpIFwKLSAgICBC
T09TVF9NUExfUFBfREVGX1BBUkFNU19UQUlMX0lNUEwoaSwgcGFyYW0sIEJPT1NUX1BQX0VNUFRZ
KSBcCi0gICAgLyoqLwotI2VuZGlmCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfQVVYX1BSRVBST0NF
U1NPUl9ERUZfUEFSQU1TX1RBSUxfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZGVm
YXVsdF9wYXJhbXMuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL2RlZmF1bHRfcGFyYW1zLmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzM1NDhjNmM5YjY0NjIzODZkMjdmYTcwNDg3Y2FhYzQyMmNkZmY2
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3Iv
ZGVmYXVsdF9wYXJhbXMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotCi0jaWZu
ZGVmIEJPT1NUX01QTF9BVVhfUFJFUFJPQ0VTU09SX0RFRkFVTFRfUEFSQU1TX0hQUF9JTkNMVURF
RAotI2RlZmluZSBCT09TVF9NUExfQVVYX1BSRVBST0NFU1NPUl9ERUZBVUxUX1BBUkFNU19IUFBf
SU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMi0yMDA0Ci0vLwot
Ly8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24g
MS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkg
YXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAk
SWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhf
L2NvbmZpZy9wcmVwcm9jZXNzb3IuaHBwPgotCi0vLyBCT09TVF9NUExfUFBfREVGQVVMVF9QQVJB
TVMoMCxULGludCk6IDxub3RoaW5nPgotLy8gQk9PU1RfTVBMX1BQX0RFRkFVTFRfUEFSQU1TKDEs
VCxpbnQpOiBUMSA9IGludAotLy8gQk9PU1RfTVBMX1BQX0RFRkFVTFRfUEFSQU1TKDIsVCxpbnQp
OiBUMSA9IGludCwgVDIgPSBpbnQKLS8vIEJPT1NUX01QTF9QUF9ERUZBVUxUX1BBUkFNUyhuLFQs
aW50KTogVDEgPSBpbnQsIFQyID0gaW50LCAuLiwgVG4gPSBpbnQKLQotI2lmICFkZWZpbmVkKEJP
T1NUX01QTF9DRkdfTk9fT1dOX1BQX1BSSU1JVElWRVMpCi0KLSMgICBpbmNsdWRlIDxib29zdC9w
cmVwcm9jZXNzb3IvY2F0LmhwcD4KLQotIyAgIGRlZmluZSBCT09TVF9NUExfUFBfREVGQVVMVF9Q
QVJBTVMobixwLHYpIFwKLSAgICBCT09TVF9QUF9DQVQoQk9PU1RfTVBMX1BQX0RFRkFVTFRfUEFS
QU1TXyxuKShwLHYpIFwKLSAgICAvKiovCi0gICAgCi0jICAgZGVmaW5lIEJPT1NUX01QTF9QUF9E
RUZBVUxUX1BBUkFNU18wKHAsdikKLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BQX0RFRkFVTFRfUEFS
QU1TXzEocCx2KSBwIyMxPXYKLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BQX0RFRkFVTFRfUEFSQU1T
XzIocCx2KSBwIyMxPXYscCMjMj12Ci0jICAgZGVmaW5lIEJPT1NUX01QTF9QUF9ERUZBVUxUX1BB
UkFNU18zKHAsdikgcCMjMT12LHAjIzI9dixwIyMzPXYKLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BQ
X0RFRkFVTFRfUEFSQU1TXzQocCx2KSBwIyMxPXYscCMjMj12LHAjIzM9dixwIyM0PXYKLSMgICBk
ZWZpbmUgQk9PU1RfTVBMX1BQX0RFRkFVTFRfUEFSQU1TXzUocCx2KSBwIyMxPXYscCMjMj12LHAj
IzM9dixwIyM0PXYscCMjNT12Ci0jICAgZGVmaW5lIEJPT1NUX01QTF9QUF9ERUZBVUxUX1BBUkFN
U182KHAsdikgcCMjMT12LHAjIzI9dixwIyMzPXYscCMjND12LHAjIzU9dixwIyM2PXYKLSMgICBk
ZWZpbmUgQk9PU1RfTVBMX1BQX0RFRkFVTFRfUEFSQU1TXzcocCx2KSBwIyMxPXYscCMjMj12LHAj
IzM9dixwIyM0PXYscCMjNT12LHAjIzY9dixwIyM3PXYKLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BQ
X0RFRkFVTFRfUEFSQU1TXzgocCx2KSBwIyMxPXYscCMjMj12LHAjIzM9dixwIyM0PXYscCMjNT12
LHAjIzY9dixwIyM3PXYscCMjOD12Ci0jICAgZGVmaW5lIEJPT1NUX01QTF9QUF9ERUZBVUxUX1BB
UkFNU185KHAsdikgcCMjMT12LHAjIzI9dixwIyMzPXYscCMjND12LHAjIzU9dixwIyM2PXYscCMj
Nz12LHAjIzg9dixwIyM5PXYKLQotI2Vsc2UKLQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nl
c3Nvci90dXBsZS9lbGVtLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29t
bWFfaWYuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9yZXBlYXQuaHBwPgot
IyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9pbmMuaHBwPgotIyAgIGluY2x1ZGUgPGJv
b3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9QUF9BVVhf
REVGQVVMVF9QQVJBTV9GVU5DKHVudXNlZCwgaSwgcHYpIFwKLSAgICBCT09TVF9QUF9DT01NQV9J
RihpKSBcCi0gICAgQk9PU1RfUFBfQ0FUKCBCT09TVF9QUF9UVVBMRV9FTEVNKDIsMCxwdiksIEJP
T1NUX1BQX0lOQyhpKSApIFwKLSAgICAgICAgPSBCT09TVF9QUF9UVVBMRV9FTEVNKDIsMSxwdikg
XAotICAgIC8qKi8KLQotIyAgIGRlZmluZSBCT09TVF9NUExfUFBfREVGQVVMVF9QQVJBTVMobiwg
cGFyYW0sIHZhbHVlKSBcCi0gICAgQk9PU1RfUFBfUkVQRUFUKCBcCi0gICAgICAgICAgbiBcCi0g
ICAgICAgICwgQk9PU1RfTVBMX1BQX0FVWF9ERUZBVUxUX1BBUkFNX0ZVTkMgXAotICAgICAgICAs
IChwYXJhbSx2YWx1ZSkgXAotICAgICAgICApIFwKLSAgICAvKiovCi0KLSNlbmRpZgotCi0jZW5k
aWYgLy8gQk9PU1RfTVBMX0FVWF9QUkVQUk9DRVNTT1JfREVGQVVMVF9QQVJBTVNfSFBQX0lOQ0xV
REVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZW51bS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZW51bS5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YzVlNmE4ZjZiYWRiODBkNGMxNWU4N2JhMmFkMDFj
M2UxODVkMTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHJlcHJv
Y2Vzc29yL2VudW0uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotCi0jaWZuZGVm
IEJPT1NUX01QTF9BVVhfUFJFUFJPQ0VTU09SX0VOVU1fSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJP
T1NUX01QTF9BVVhfUFJFUFJPQ0VTU09SX0VOVU1fSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdo
dCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2
aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvcHJlcHJvY2Vzc29yLmhw
cD4KLQotLy8gQk9PU1RfTVBMX1BQX0VOVU0oMCxpbnQpOiA8bm90aGluZz4KLS8vIEJPT1NUX01Q
TF9QUF9FTlVNKDEsaW50KTogaW50Ci0vLyBCT09TVF9NUExfUFBfRU5VTSgyLGludCk6IGludCwg
aW50Ci0vLyBCT09TVF9NUExfUFBfRU5VTShuLGludCk6IGludCwgaW50LCAuLiwgaW50Ci0KLSNp
ZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX09XTl9QUF9QUklNSVRJVkVTKQotCi0jICAgaW5j
bHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHA+Ci0KLSMgICBkZWZpbmUgQk9PU1RfTVBM
X1BQX0VOVU0obiwgcGFyYW0pIFwKLSAgICBCT09TVF9QUF9DQVQoQk9PU1RfTVBMX1BQX0VOVU1f
LG4pKHBhcmFtKSBcCi0gICAgLyoqLwotICAgIAotIyAgIGRlZmluZSBCT09TVF9NUExfUFBfRU5V
TV8wKHApCi0jICAgZGVmaW5lIEJPT1NUX01QTF9QUF9FTlVNXzEocCkgcAotIyAgIGRlZmluZSBC
T09TVF9NUExfUFBfRU5VTV8yKHApIHAscAotIyAgIGRlZmluZSBCT09TVF9NUExfUFBfRU5VTV8z
KHApIHAscCxwCi0jICAgZGVmaW5lIEJPT1NUX01QTF9QUF9FTlVNXzQocCkgcCxwLHAscAotIyAg
IGRlZmluZSBCT09TVF9NUExfUFBfRU5VTV81KHApIHAscCxwLHAscAotIyAgIGRlZmluZSBCT09T
VF9NUExfUFBfRU5VTV82KHApIHAscCxwLHAscCxwCi0jICAgZGVmaW5lIEJPT1NUX01QTF9QUF9F
TlVNXzcocCkgcCxwLHAscCxwLHAscAotIyAgIGRlZmluZSBCT09TVF9NUExfUFBfRU5VTV84KHAp
IHAscCxwLHAscCxwLHAscAotIyAgIGRlZmluZSBCT09TVF9NUExfUFBfRU5VTV85KHApIHAscCxw
LHAscCxwLHAscCxwCi0KLSNlbHNlCi0KLSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3Iv
Y29tbWFfaWYuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9yZXBlYXQuaHBw
PgotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9QUF9BVVhfRU5VTV9GVU5DKHVudXNlZCwgaSwgcGFy
YW0pIFwKLSAgICBCT09TVF9QUF9DT01NQV9JRihpKSBwYXJhbSBcCi0gICAgLyoqLwotCi0jICAg
ZGVmaW5lIEJPT1NUX01QTF9QUF9FTlVNKG4sIHBhcmFtKSBcCi0gICAgQk9PU1RfUFBfUkVQRUFU
KCBcCi0gICAgICAgICAgbiBcCi0gICAgICAgICwgQk9PU1RfTVBMX1BQX0FVWF9FTlVNX0ZVTkMg
XAotICAgICAgICAsIHBhcmFtIFwKLSAgICAgICAgKSBcCi0gICAgLyoqLwotCi0jZW5kaWYKLQot
I2VuZGlmIC8vIEJPT1NUX01QTF9BVVhfUFJFUFJPQ0VTU09SX0VOVU1fSFBQX0lOQ0xVREVECmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwv
YXV4Xy9wcmVwcm9jZXNzb3IvcGFyYW1zLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9wYXJhbXMuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2FkMzIxOTAzZjQxZjhjODZmZGJiZDc5ZTkwOTQ1NmEx
MjllM2QyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nl
c3Nvci9wYXJhbXMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotCi0jaWZuZGVm
IEJPT1NUX01QTF9BVVhfUFJFUFJPQ0VTU09SX1BBUkFNU19IUFBfSU5DTFVERUQKLSNkZWZpbmUg
Qk9PU1RfTVBMX0FVWF9QUkVQUk9DRVNTT1JfUEFSQU1TX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5
cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRl
ciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5v
cmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8g
JFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3ByZXByb2Nlc3Nv
ci5ocHA+Ci0KLS8vIEJPT1NUX01QTF9QUF9QQVJBTVMoMCxUKTogPG5vdGhpbmc+Ci0vLyBCT09T
VF9NUExfUFBfUEFSQU1TKDEsVCk6IFQxCi0vLyBCT09TVF9NUExfUFBfUEFSQU1TKDIsVCk6IFQx
LCBUMgotLy8gQk9PU1RfTVBMX1BQX1BBUkFNUyhuLFQpOiBUMSwgVDIsIC4uLCBUbgotCi0jaWYg
IWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19PV05fUFBfUFJJTUlUSVZFUykKLQotIyAgIGluY2x1
ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9Q
UF9QQVJBTVMobixwKSBcCi0gICAgQk9PU1RfUFBfQ0FUKEJPT1NUX01QTF9QUF9QQVJBTVNfLG4p
KHApIFwKLSAgICAvKiovCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BQX1BBUkFNU18wKHApCi0j
ICAgZGVmaW5lIEJPT1NUX01QTF9QUF9QQVJBTVNfMShwKSBwIyMxCi0jICAgZGVmaW5lIEJPT1NU
X01QTF9QUF9QQVJBTVNfMihwKSBwIyMxLHAjIzIKLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BQX1BB
UkFNU18zKHApIHAjIzEscCMjMixwIyMzCi0jICAgZGVmaW5lIEJPT1NUX01QTF9QUF9QQVJBTVNf
NChwKSBwIyMxLHAjIzIscCMjMyxwIyM0Ci0jICAgZGVmaW5lIEJPT1NUX01QTF9QUF9QQVJBTVNf
NShwKSBwIyMxLHAjIzIscCMjMyxwIyM0LHAjIzUKLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BQX1BB
UkFNU182KHApIHAjIzEscCMjMixwIyMzLHAjIzQscCMjNSxwIyM2Ci0jICAgZGVmaW5lIEJPT1NU
X01QTF9QUF9QQVJBTVNfNyhwKSBwIyMxLHAjIzIscCMjMyxwIyM0LHAjIzUscCMjNixwIyM3Ci0j
ICAgZGVmaW5lIEJPT1NUX01QTF9QUF9QQVJBTVNfOChwKSBwIyMxLHAjIzIscCMjMyxwIyM0LHAj
IzUscCMjNixwIyM3LHAjIzgKLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BQX1BBUkFNU185KHApIHAj
IzEscCMjMixwIyMzLHAjIzQscCMjNSxwIyM2LHAjIzcscCMjOCxwIyM5Ci0KLSNlbHNlCi0KLSMg
ICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29tbWFfaWYuaHBwPgotIyAgIGluY2x1ZGUg
PGJvb3N0L3ByZXByb2Nlc3Nvci9yZXBlYXQuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXBy
b2Nlc3Nvci9pbmMuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBw
PgotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9QUF9BVVhfUEFSQU1fRlVOQyh1bnVzZWQsIGksIHBh
cmFtKSBcCi0gICAgQk9PU1RfUFBfQ09NTUFfSUYoaSkgXAotICAgIEJPT1NUX1BQX0NBVChwYXJh
bSwgQk9PU1RfUFBfSU5DKGkpKSBcCi0gICAgLyoqLwotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9Q
UF9QQVJBTVMobiwgcGFyYW0pIFwKLSAgICBCT09TVF9QUF9SRVBFQVQoIFwKLSAgICAgICAgICBu
IFwKLSAgICAgICAgLCBCT09TVF9NUExfUFBfQVVYX1BBUkFNX0ZVTkMgXAotICAgICAgICAsIHBh
cmFtIFwKLSAgICAgICAgKSBcCi0gICAgLyoqLwotCi0jZW5kaWYgCi0KLSNlbmRpZiAvLyBCT09T
VF9NUExfQVVYX1BSRVBST0NFU1NPUl9QQVJBTVNfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wdXNoX2Jh
Y2tfaW1wbC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
cGwvYXV4Xy9wdXNoX2JhY2tfaW1wbC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDI3ZTdhNjA0NDM0NWYwMTA4Njk1MmQyNWM2ZWZkZTBiNjg4YmU5MzQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcHVzaF9iYWNrX2ltcGwuaHBwCisrKyAvZGV2L251
bGwKQEAgLTEsNzAgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9BVVhfUFVTSF9CQUNLX0lN
UExfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfUFVTSF9CQUNLX0lNUExfSFBQ
X0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwOAotLy8K
LS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5
IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNl
ZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8g
JElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvcHVz
aF9iYWNrX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2Fzc2VydC5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8vaGFzX3R5cGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhf
L3RyYWl0c19sYW1iZGFfc3BlYy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmln
L2ZvcndhcmRpbmcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9zdGF0aWNf
Y29uc3RhbnQuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHA+
Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi1zdHJ1Y3QgaGFzX3B1c2hf
YmFja19hcmcge307Ci0KLS8vIGFndXJ0IDA1L2ZlYi8wNDogbm8gZGVmYXVsdCBpbXBsZW1lbnRh
dGlvbjsgdGhlIHN0dWIgZGVmaW5pdGlvbiBpcyBuZWVkZWQgCi0vLyB0byBlbmFibGUgdGhlIGRl
ZmF1bHQgJ2hhc19wdXNoX2JhY2snIGltcGxlbWVudGF0aW9uIGJlbG93Ci10ZW1wbGF0ZTwgdHlw
ZW5hbWUgVGFnID4KLXN0cnVjdCBwdXNoX2JhY2tfaW1wbAotewotICAgIHRlbXBsYXRlPCB0eXBl
bmFtZSBTZXF1ZW5jZSwgdHlwZW5hbWUgVCA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAg
Ly8gc2hvdWxkIGJlIGluc3RhbnRpYXRlZCBvbmx5IGluIHRoZSBjb250ZXh0IG9mICdoYXNfcHVz
aF9iYWNrX2ltcGwnOwotICAgICAgICAvLyBpZiB5b3UndmUgZ290IGFuIGFzc2VydCBoZXJlLCB5
b3UgYXJlIHJlcXVlc3RpbmcgYSAncHVzaF9iYWNrJyAKLSAgICAgICAgLy8gc3BlY2lhbGl6YXRp
b24gdGhhdCBkb2Vzbid0IGV4aXN0LgotICAgICAgICBCT09TVF9NUExfQVNTRVJUX01TRygKLSAg
ICAgICAgICAgICAgKCBib29zdDo6aXNfc2FtZTwgVCwgaGFzX3B1c2hfYmFja19hcmcgPjo6dmFs
dWUgKQotICAgICAgICAgICAgLCBSRVFVRVNURURfUFVTSF9CQUNLX1NQRUNJQUxJWkFUSU9OX0ZP
Ul9TRVFVRU5DRV9ET0VTX05PVF9FWElTVAotICAgICAgICAgICAgLCAoIFNlcXVlbmNlICkKLSAg
ICAgICAgICAgICk7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPgotc3Ry
dWN0IGhhc19wdXNoX2JhY2tfaW1wbAotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBTZXEgPiBz
dHJ1Y3QgYXBwbHkKLSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX05FU1RFRF9GT1JXQVJE
SU5HKQotICAgICAgICA6IGF1eDo6aGFzX3R5cGU8IHB1c2hfYmFjazwgU2VxLCBoYXNfcHVzaF9i
YWNrX2FyZyA+ID4KLSAgICB7Ci0jZWxzZQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBhdXg6Omhh
c190eXBlPCBwdXNoX2JhY2s8IFNlcSwgaGFzX3B1c2hfYmFja19hcmcgPiA+IHR5cGU7Ci0gICAg
ICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IAotICAgICAgICAgICAgICAo
YXV4OjpoYXNfdHlwZTwgcHVzaF9iYWNrPCBTZXEsIGhhc19wdXNoX2JhY2tfYXJnID4gPjo6dmFs
dWUpCi0gICAgICAgICAgICApOwotI2VuZGlmCi0gICAgfTsKLX07Ci0KLUJPT1NUX01QTF9BTEdP
UklUTV9UUkFJVFNfTEFNQkRBX1NQRUMoMiwgcHVzaF9iYWNrX2ltcGwpCi1CT09TVF9NUExfQUxH
T1JJVE1fVFJBSVRTX0xBTUJEQV9TUEVDKDEsIGhhc19wdXNoX2JhY2tfaW1wbCkKLQotfX0KLQot
I2VuZGlmIC8vIEJPT1NUX01QTF9BVVhfUFVTSF9CQUNLX0lNUExfSFBQX0lOQ0xVREVECmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4
Xy9wdXNoX2Zyb250X2ltcGwuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2F1eF8vcHVzaF9mcm9udF9pbXBsLmhwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNWI4M2VlNzY0NTQ4MzMxY2FmMGEwMTg0OTA2NGVmMTExOTI5NGQ5ZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9wdXNoX2Zyb250X2ltcGwuaHBw
CisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9BVVhf
UFVTSF9GUk9OVF9JTVBMX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX1BVU0hf
RlJPTlRfSU1QTF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kg
MjAwMC0yMDA4Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVu
dGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUg
PGJvb3N0L21wbC9wdXNoX2Zyb250X2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2Fzc2Vy
dC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vaGFzX3R5cGUuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L21wbC9hdXhfL3RyYWl0c19sYW1iZGFfc3BlYy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F1eF8vY29uZmlnL2ZvcndhcmRpbmcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhf
L2NvbmZpZy9zdGF0aWNfY29uc3RhbnQuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaXNfc2FtZS5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi1z
dHJ1Y3QgaGFzX3B1c2hfZnJvbnRfYXJnIHt9OwotCi0vLyBhZ3VydCAwNS9mZWIvMDQ6IG5vIGRl
ZmF1bHQgaW1wbGVtZW50YXRpb247IHRoZSBzdHViIGRlZmluaXRpb24gaXMgbmVlZGVkIAotLy8g
dG8gZW5hYmxlIHRoZSBkZWZhdWx0ICdoYXNfcHVzaF9mcm9udCcgaW1wbGVtZW50YXRpb24gYmVs
b3cKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+Ci1zdHJ1Y3QgcHVzaF9mcm9udF9pbXBsCi17
Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlLCB0eXBlbmFtZSBUID4gc3RydWN0IGFw
cGx5Ci0gICAgewotICAgICAgICAvLyBzaG91bGQgYmUgaW5zdGFudGlhdGVkIG9ubHkgaW4gdGhl
IGNvbnRleHQgb2YgJ2hhc19wdXNoX2Zyb250X2ltcGwnOwotICAgICAgICAvLyBpZiB5b3UndmUg
Z290IGFuIGFzc2VydCBoZXJlLCB5b3UgYXJlIHJlcXVlc3RpbmcgYSAncHVzaF9mcm9udCcgCi0g
ICAgICAgIC8vIHNwZWNpYWxpemF0aW9uIHRoYXQgZG9lc24ndCBleGlzdC4KLSAgICAgICAgQk9P
U1RfTVBMX0FTU0VSVF9NU0coCi0gICAgICAgICAgICAgICggYm9vc3Q6OmlzX3NhbWU8IFQsIGhh
c19wdXNoX2Zyb250X2FyZyA+Ojp2YWx1ZSApCi0gICAgICAgICAgICAsIFJFUVVFU1RFRF9QVVNI
X0ZST05UX1NQRUNJQUxJWkFUSU9OX0ZPUl9TRVFVRU5DRV9ET0VTX05PVF9FWElTVAotICAgICAg
ICAgICAgLCAoIFNlcXVlbmNlICkKLSAgICAgICAgICAgICk7Ci0gICAgfTsKLX07Ci0KLXRlbXBs
YXRlPCB0eXBlbmFtZSBUYWcgPgotc3RydWN0IGhhc19wdXNoX2Zyb250X2ltcGwKLXsKLSAgICB0
ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxID4gc3RydWN0IGFwcGx5Ci0jaWYgIWRlZmluZWQoQk9PU1Rf
TVBMX0NGR19OT19ORVNURURfRk9SV0FSRElORykKLSAgICAgICAgOiBhdXg6Omhhc190eXBlPCBw
dXNoX2Zyb250PCBTZXEsIGhhc19wdXNoX2Zyb250X2FyZyA+ID4KLSAgICB7Ci0jZWxzZQotICAg
IHsKLSAgICAgICAgdHlwZWRlZiBhdXg6Omhhc190eXBlPCBwdXNoX2Zyb250PCBTZXEsIGhhc19w
dXNoX2Zyb250X2FyZyA+ID4gdHlwZTsKLSAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJv
b2wsIHZhbHVlID0gCi0gICAgICAgICAgICAgIChhdXg6Omhhc190eXBlPCBwdXNoX2Zyb250PCBT
ZXEsIGhhc19wdXNoX2Zyb250X2FyZyA+ID46OnZhbHVlKQotICAgICAgICAgICAgKTsKLSNlbmRp
ZgotICAgIH07Ci19OwotCi1CT09TVF9NUExfQUxHT1JJVE1fVFJBSVRTX0xBTUJEQV9TUEVDKDIs
IHB1c2hfZnJvbnRfaW1wbCkKLUJPT1NUX01QTF9BTEdPUklUTV9UUkFJVFNfTEFNQkRBX1NQRUMo
MSwgaGFzX3B1c2hfZnJvbnRfaW1wbCkKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9BVVhf
UFVTSF9GUk9OVF9JTVBMX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcmV2ZXJzZV9mb2xkX2ltcGwuaHBw
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vcmV2
ZXJzZV9mb2xkX2ltcGwuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjdhMzVm
YTEzOWUyNDUyNTAxZmI3NTQ2ZDU5NjU0YmQxMTcyZWM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L21wbC9hdXhfL3JldmVyc2VfZm9sZF9pbXBsLmhwcAorKysgL2Rldi9udWxsCkBA
IC0xLDQ0ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQVVYX1JFVkVSU0VfRk9MRF9JTVBM
X0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQVVYX1JFVkVSU0VfRk9MRF9JTVBMX0hQ
UF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8v
Ci0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lv
biAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29w
eSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBT
ZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8v
ICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBM
X1BSRVBST0NFU1NJTkdfTU9ERSkKLSMgICBpbmNsdWRlIDxib29zdC9tcGwvbmV4dF9wcmlvci5o
cHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2RlcmVmLmhwcD4KLSMgICBpbmNsdWRlIDxib29z
dC9tcGwvYXBwbHkuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9jdHBz
LmhwcD4KLSMgICBpZiBkZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTEla
QVRJT04pIFwKLSAgICB8fCBkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fTk9OVFlQRV9URU1QTEFU
RV9QQVJUSUFMX1NQRUMpCi0jICAgICAgIGluY2x1ZGUgPGJvb3N0L21wbC9pZi5ocHA+Ci0jICAg
ICAgIGluY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgotIyAgIGVuZGlmCi0j
ZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy91c2VfcHJlcHJvY2Vzc2Vk
LmhwcD4KLQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURF
UlMpIFwKLSAgICAmJiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotCi0j
ICAgZGVmaW5lIEJPT1NUX01QTF9QUkVQUk9DRVNTRURfSEVBREVSIHJldmVyc2VfZm9sZF9pbXBs
LmhwcAotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhw
cD4KLQotI2Vsc2UKLQotIyAgIGRlZmluZSBBVVg3NzgwNzZfRk9MRF9JTVBMX09QKGl0ZXIpIHR5
cGVuYW1lIGRlcmVmPGl0ZXI+Ojp0eXBlCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9GT0xEX0lNUExf
TkFNRV9QUkVGSVggcmV2ZXJzZV9mb2xkCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vcmV2
ZXJzZV9mb2xkX2ltcGxfYm9keS5ocHA+Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQ0ZHX05PX1BS
RVBST0NFU1NFRF9IRUFERVJTCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9SRVZFUlNFX0ZPTERf
SU1QTF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3NpemVfaW1wbC5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9zaXplX2ltcGwuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGY1ZWU5MTg5NTEzMzk5NjQzYjhmZWUyYzlhY2Y3OTk5
MzlmODg4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3NpemVfaW1w
bC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBM
X0FVWF9TSVpFX0lNUExfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfU0laRV9J
TVBMX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIw
MDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8v
Ci0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24u
Ci0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL3NpemVfZndkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYmVnaW5fZW5kLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9tcGwvZGlzdGFuY2UuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhf
L3RyYWl0c19sYW1iZGFfc3BlYy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmln
L3dvcmthcm91bmQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQot
Ly8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbjsgY29ucmV0ZSBzZXF1ZW5jZXMgbWlnaHQgb3ZlcnJp
ZGUgaXQgYnkgCi0vLyBzcGVjaWFsaXppbmcgZWl0aGVyIHRoZSAnc2l6ZV9pbXBsJyBvciB0aGUg
cHJpbWFyeSAnc2l6ZScgdGVtcGxhdGUKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+Ci1zdHJ1
Y3Qgc2l6ZV9pbXBsCi17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0
IGFwcGx5Ci0jaWYgIUJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCBCT09TVF9URVNURURf
QVQoMHg1NjEpKQotICAgICAgICA6IGRpc3RhbmNlPAotICAgICAgICAgICAgICB0eXBlbmFtZSBi
ZWdpbjxTZXF1ZW5jZT46OnR5cGUKLSAgICAgICAgICAgICwgdHlwZW5hbWUgZW5kPFNlcXVlbmNl
Pjo6dHlwZQotICAgICAgICAgICAgPgotICAgIHsKLSNlbHNlCi0gICAgewotICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGRpc3RhbmNlPAotICAgICAgICAgICAgICB0eXBlbmFtZSBiZWdpbjxTZXF1
ZW5jZT46OnR5cGUKLSAgICAgICAgICAgICwgdHlwZW5hbWUgZW5kPFNlcXVlbmNlPjo6dHlwZQot
ICAgICAgICAgICAgPjo6dHlwZSB0eXBlOwotI2VuZGlmCi0gICAgfTsKLX07Ci0KLUJPT1NUX01Q
TF9BTEdPUklUTV9UUkFJVFNfTEFNQkRBX1NQRUMoMSwgc2l6ZV9pbXBsKQotCi19fQotCi0jZW5k
aWYgLy8gQk9PU1RfTVBMX0FVWF9TSVpFX0lNUExfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy9zdGF0aWNf
Y2FzdC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwv
YXV4Xy9zdGF0aWNfY2FzdC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MmQx
YzdjOWIzZjQxYTE3ZTUzYjRjNDc2ZjZhNmM3OTU3Zjk5ZjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvbXBsL2F1eF8vc3RhdGljX2Nhc3QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEs
MjcgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9BVVhfU1RBVElDX0NBU1RfSFBQX0lOQ0xV
REVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfU1RBVElDX0NBU1RfSFBQX0lOQ0xVREVECi0KLS8v
IENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDEtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2Vl
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDov
L3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUk
Ci0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvd29ya2Fy
b3VuZC5ocHA+Ci0KLSNpZiBCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENfXywgQk9PU1RfVEVT
VEVEX0FUKDB4NTYxKSkgXAotIHx8IEJPT1NUX1dPUktBUk9VTkQoX19HTlVDX18sIDwgMykgXAot
IHx8IEJPT1NUX1dPUktBUk9VTkQoX19NV0VSS1NfXywgPD0gMHgzMDAxKQotIyAgIGRlZmluZSBC
T09TVF9NUExfQVVYX1NUQVRJQ19DQVNUKFQsIGV4cHIpIChUKShleHByKQotI2Vsc2UKLSMgICBk
ZWZpbmUgQk9PU1RfTVBMX0FVWF9TVEFUSUNfQ0FTVChULCBleHByKSBzdGF0aWNfY2FzdDxUPihl
eHByKQotI2VuZGlmCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfQVVYX1NUQVRJQ19DQVNUX0hQUF9J
TkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL2F1eF8vdGVtcGxhdGVfYXJpdHkuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vdGVtcGxhdGVfYXJpdHkuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDExMTU5ODI1NjdmYjEzNzFjMDhhY2FlZTRjNjkyNDAw
ZDE0NWI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3RlbXBsYXRl
X2FyaXR5LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0KLSNpZiAhZGVmaW5l
ZChCT09TVF9QUF9JU19JVEVSQVRJTkcpCi0KLS8vLy8vIGhlYWRlciBib2R5Ci0KLSNpZm5kZWYg
Qk9PU1RfTVBMX0FVWF9URU1QTEFURV9BUklUWV9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1Rf
TVBMX0FVWF9URU1QTEFURV9BUklUWV9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtz
ZXkgR3VydG92b3kgMjAwMS0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBs
IGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQK
LQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy90dHAuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L21wbC9hdXhfL2NvbmZpZy9sYW1iZGEuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBM
X1BSRVBST0NFU1NJTkdfTU9ERSkKLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy90ZW1wbGF0
ZV9hcml0eV9md2QuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9pbnQuaHBwPgotIyAgIGlm
ICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fRlVMTF9MQU1CREFfU1VQUE9SVCkKLSMgICBpZiBk
ZWZpbmVkKEJPT1NUX01QTF9DRkdfRVhURU5ERURfVEVNUExBVEVfUEFSQU1FVEVSU19NQVRDSElO
RykKLSMgICAgICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vdHlwZV93cmFwcGVyLmhwcD4KLSMg
ICBlbmRpZgotIyAgIGVsc2UKLSMgICAgICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vaGFzX3Jl
YmluZC5ocHA+Ci0jICAgZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8v
Y29uZmlnL3N0YXRpY19jb25zdGFudC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29u
ZmlnL3VzZV9wcmVwcm9jZXNzZWQuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19O
T19QUkVQUk9DRVNTRURfSEVBREVSUykgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQ
Uk9DRVNTSU5HX01PREUpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BSRVBST0NFU1NFRF9IRUFE
RVIgdGVtcGxhdGVfYXJpdHkuaHBwCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vaW5jbHVk
ZV9wcmVwcm9jZXNzZWQuaHBwPgotCi0jZWxzZQotCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfTVBM
X0NGR19OT19GVUxMX0xBTUJEQV9TVVBQT1JUKQotIyAgIGlmIGRlZmluZWQoQk9PU1RfTVBMX0NG
R19FWFRFTkRFRF9URU1QTEFURV9QQVJBTUVURVJTX01BVENISU5HKQotCi0jICAgaW5jbHVkZSA8
Ym9vc3QvbXBsL2xpbWl0cy9hcml0eS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8v
cHJlcHJvY2Vzc29yL3JhbmdlLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9wcmVw
cm9jZXNzb3IvcmVwZWF0LmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9wcmVwcm9j
ZXNzb3IvcGFyYW1zLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9udHRwX2RlY2wu
aHBwPgotCi0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3NlcS9mb2xkX2xlZnQuaHBw
PgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb21tYV9pZi5ocHA+Ci0jICAgaW5j
bHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2l0ZXJhdGUuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0
L3ByZXByb2Nlc3Nvci9pbmMuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9j
YXQuaHBwPgotCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9BUklUWSBCT09TVF9QUF9JTkMoQk9PU1Rf
TVBMX0xJTUlUX01FVEFGVU5DVElPTl9BUklUWSkKLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNw
YWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggewotCi10ZW1wbGF0ZTwgQk9PU1RfTVBMX0FVWF9OVFRQ
X0RFQ0woaW50LCBOKSA+IHN0cnVjdCBhcml0eV90YWcKLXsKLSAgICB0eXBlZGVmIGNoYXIgKCZ0
eXBlKVtOICsgMV07Ci19OwotCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9NQVhfQVJJVFlfT1AodW51
c2VkLCBzdGF0ZSwgaV8pIFwKLSAgICAoIEJPT1NUX1BQX0NBVChDLGlfKSA+IDAgPyBCT09TVF9Q
UF9DQVQoQyxpXykgOiBzdGF0ZSApIFwKLS8qKi8KLQotdGVtcGxhdGU8Ci0gICAgICBCT09TVF9N
UExfUFBfUEFSQU1TKEFVWDc3ODA3Nl9BUklUWSwgQk9PU1RfTVBMX0FVWF9OVFRQX0RFQ0woaW50
LCBDKSkKLSAgICA+Ci1zdHJ1Y3QgbWF4X2FyaXR5Ci17Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGludCwgdmFsdWUgPSAKLSAgICAgICAgICBCT09TVF9QUF9TRVFfRk9MRF9MRUZUKAotICAg
ICAgICAgICAgICBBVVg3NzgwNzZfTUFYX0FSSVRZX09QCi0gICAgICAgICAgICAsIC0xCi0gICAg
ICAgICAgICAsIEJPT1NUX01QTF9QUF9SQU5HRSgxLCBBVVg3NzgwNzZfQVJJVFkpCi0gICAgICAg
ICAgICApCi0gICAgICAgICk7Ci19OwotCi0jICAgdW5kZWYgQVVYNzc4MDc2X01BWF9BUklUWV9P
UAotCi1hcml0eV90YWc8MD46OnR5cGUgYXJpdHlfaGVscGVyKC4uLik7Ci0KLSMgICBkZWZpbmUg
Qk9PU1RfUFBfSVRFUkFUSU9OX0xJTUlUUyAoMSwgQVVYNzc4MDc2X0FSSVRZKQotIyAgIGRlZmlu
ZSBCT09TVF9QUF9GSUxFTkFNRV8xIDxib29zdC9tcGwvYXV4Xy90ZW1wbGF0ZV9hcml0eS5ocHA+
Ci0jICAgaW5jbHVkZSBCT09TVF9QUF9JVEVSQVRFKCkKLQotdGVtcGxhdGU8IHR5cGVuYW1lIEYs
IEJPT1NUX01QTF9BVVhfTlRUUF9ERUNMKGludCwgTikgPgotc3RydWN0IHRlbXBsYXRlX2FyaXR5
X2ltcGwKLXsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCB2YWx1ZSA9IAotICAgICAg
ICAgIHNpemVvZig6OmJvb3N0OjptcGw6OmF1eDo6YXJpdHlfaGVscGVyKHR5cGVfd3JhcHBlcjxG
PigpLGFyaXR5X3RhZzxOPigpKSkgLSAxCi0gICAgICAgICk7Ci19OwotCi0jICAgZGVmaW5lIEFV
WDc3ODA3Nl9URU1QTEFURV9BUklUWV9JTVBMX0lOVk9DQVRJT04odW51c2VkLCBpXywgRikgXAot
ICAgIEJPT1NUX1BQX0NPTU1BX0lGKGlfKSB0ZW1wbGF0ZV9hcml0eV9pbXBsPEYsQk9PU1RfUFBf
SU5DKGlfKT46OnZhbHVlIFwKLS8qKi8KLQotdGVtcGxhdGU8IHR5cGVuYW1lIEYgPgotc3RydWN0
IHRlbXBsYXRlX2FyaXR5Ci17Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwgdmFsdWUg
PSAoCi0gICAgICAgICAgbWF4X2FyaXR5PCBCT09TVF9NUExfUFBfUkVQRUFUKAotICAgICAgICAg
ICAgICBBVVg3NzgwNzZfQVJJVFkKLSAgICAgICAgICAgICwgQVVYNzc4MDc2X1RFTVBMQVRFX0FS
SVRZX0lNUExfSU5WT0NBVElPTgotICAgICAgICAgICAgLCBGCi0gICAgICAgICAgICApID46OnZh
bHVlCi0gICAgICAgICkpOwotICAgICAgICAKLSAgICB0eXBlZGVmIG1wbDo6aW50Xzx2YWx1ZT4g
dHlwZTsKLX07Ci0KLSMgICB1bmRlZiBBVVg3NzgwNzZfVEVNUExBVEVfQVJJVFlfSU1QTF9JTlZP
Q0FUSU9OCi0KLSMgICB1bmRlZiBBVVg3NzgwNzZfQVJJVFkKLQotfX19Ci0KLSMgICBlbmRpZiAv
LyBCT09TVF9NUExfQ0ZHX0VYVEVOREVEX1RFTVBMQVRFX1BBUkFNRVRFUlNfTUFUQ0hJTkcKLSMg
ICBlbHNlIC8vIEJPT1NUX01QTF9DRkdfTk9fRlVMTF9MQU1CREFfU1VQUE9SVAotCi0jICAgaW5j
bHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2V0aS5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7
IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4IHsKLQotdGVtcGxhdGU8IGJvb2wgPgotc3Ry
dWN0IHRlbXBsYXRlX2FyaXR5X2ltcGwKLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgRiA+IHN0
cnVjdCByZXN1bHRfCi0gICAgICAgIDogbXBsOjppbnRfPC0xPgotICAgIHsKLSAgICB9OwotfTsK
LQotdGVtcGxhdGU8Pgotc3RydWN0IHRlbXBsYXRlX2FyaXR5X2ltcGw8dHJ1ZT4KLXsKLSAgICB0
ZW1wbGF0ZTwgdHlwZW5hbWUgRiA+IHN0cnVjdCByZXN1bHRfCi0gICAgICAgIDogRjo6YXJpdHkK
LSAgICB7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBGID4KLXN0cnVjdCB0ZW1w
bGF0ZV9hcml0eQotICAgIDogdGVtcGxhdGVfYXJpdHlfaW1wbDwgOjpib29zdDo6bXBsOjphdXg6
Omhhc19yZWJpbmQ8Rj46OnZhbHVlID4KLSAgICAgICAgOjp0ZW1wbGF0ZSByZXN1bHRfPEY+Ci17
Ci19OwotCi0jaWYgZGVmaW5lZChCT09TVF9NUExfQ0ZHX01TVkNfRVRJX0JVRykKLXRlbXBsYXRl
PD4KLXN0cnVjdCB0ZW1wbGF0ZV9hcml0eTxpbnQ+Ci0gICAgOiBtcGw6OmludF88LTE+Ci17Ci19
OwotI2VuZGlmCi0KLX19fQotCi0jICAgZW5kaWYgLy8gQk9PU1RfTVBMX0NGR19OT19GVUxMX0xB
TUJEQV9TVVBQT1JUCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfQ0ZHX05PX1BSRVBST0NFU1NFRF9I
RUFERVJTCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9URU1QTEFURV9BUklUWV9IUFBfSU5DTFVE
RUQKLQotLy8vLy8gaXRlcmF0aW9uCi0KLSNlbHNlCi0jZGVmaW5lIGlfIEJPT1NUX1BQX0ZSQU1F
X0lURVJBVElPTigxKQotCi10ZW1wbGF0ZTwKLSAgICAgIHRlbXBsYXRlPCBCT09TVF9NUExfUFBf
UEFSQU1TKGlfLCB0eXBlbmFtZSBQKSA+IGNsYXNzIEYKLSAgICAsIEJPT1NUX01QTF9QUF9QQVJB
TVMoaV8sIHR5cGVuYW1lIFQpCi0gICAgPgotdHlwZW5hbWUgYXJpdHlfdGFnPGlfPjo6dHlwZQot
YXJpdHlfaGVscGVyKHR5cGVfd3JhcHBlcjwgRjxCT09TVF9NUExfUFBfUEFSQU1TKGlfLCBUKT4g
PiwgYXJpdHlfdGFnPGlfPik7Ci0KLSN1bmRlZiBpXwotI2VuZGlmIC8vIEJPT1NUX1BQX0lTX0lU
RVJBVElORwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL2F1eF8vdGVtcGxhdGVfYXJpdHlfZndkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3RlbXBsYXRlX2FyaXR5X2Z3ZC5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZDYzYTM5NjE2YzA3MjdkMDJkM2MwZjA1
Mzc5NTkxYTE1ZmE4NDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8v
dGVtcGxhdGVfYXJpdHlfZndkLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLQot
I2lmbmRlZiBCT09TVF9NUExfQVVYX1RFTVBMQVRFX0FSSVRZX0ZXRF9IUFBfSU5DTFVERUQKLSNk
ZWZpbmUgQk9PU1RfTVBMX0FVWF9URU1QTEFURV9BUklUWV9GV0RfSFBQX0lOQ0xVREVECi0KLS8v
IENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDEtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2Vl
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDov
L3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUk
Ci0vLyAkUmV2aXNpb24kCi0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1l
c3BhY2UgYXV4IHsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIEYgPiBzdHJ1Y3QgdGVtcGxhdGVfYXJp
dHk7Ci0KLX19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9URU1QTEFURV9BUklUWV9GV0Rf
SFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvYXV4Xy90cmFpdHNfbGFtYmRhX3NwZWMuaHBwIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vdHJhaXRzX2xhbWJkYV9zcGVj
LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE3ZmYyNmI1OGU4ZDhmNzY4MjJl
NGZlYzZkZGQxYzhkNTkxZmNjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwv
YXV4Xy90cmFpdHNfbGFtYmRhX3NwZWMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBA
QAotCi0jaWZuZGVmIEJPT1NUX01QTF9BVVhfVFJBSVRTX0xBTUJEQV9TUEVDX0hQUF9JTkNMVURF
RAotI2RlZmluZSBCT09TVF9NUExfQVVYX1RSQUlUU19MQU1CREFfU1BFQ19IUFBfSU5DTFVERUQK
LQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA4Ci0vLwotLy8gRGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8v
IChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAk
RGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9zZXF1ZW5jZV90YWdf
ZndkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvdm9pZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F1eF8vcHJlcHJvY2Vzc29yL3BhcmFtcy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1
eF8vY29uZmlnL2xhbWJkYS5ocHA+Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX0ZV
TExfTEFNQkRBX1NVUFBPUlQpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FMR09SSVRNX1RSQUlU
U19MQU1CREFfU1BFQ19JTVBMKGksIHRyYWl0KSAvKiovCi0KLSNlbGlmICFkZWZpbmVkKEJPT1NU
X01QTF9DRkdfTVNWQ19FVElfQlVHKQotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9BTEdPUklUTV9U
UkFJVFNfTEFNQkRBX1NQRUNfSU1QTChpLCB0cmFpdCkgXAotdGVtcGxhdGU8PiBzdHJ1Y3QgdHJh
aXQ8dm9pZF8+IFwKLXsgXAotICAgIHRlbXBsYXRlPCBCT09TVF9NUExfUFBfUEFSQU1TKGksIHR5
cGVuYW1lIFQpID4gc3RydWN0IGFwcGx5IFwKLSAgICB7IFwKLSAgICB9OyBcCi19OyBcCi0vKiov
Ci0KLSNlbHNlCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FMR09SSVRNX1RSQUlUU19MQU1CREFf
U1BFQ19JTVBMKGksIHRyYWl0KSBcCi10ZW1wbGF0ZTw+IHN0cnVjdCB0cmFpdDx2b2lkXz4gXAot
eyBcCi0gICAgdGVtcGxhdGU8IEJPT1NUX01QTF9QUF9QQVJBTVMoaSwgdHlwZW5hbWUgVCkgPiBz
dHJ1Y3QgYXBwbHkgXAotICAgIHsgXAotICAgIH07IFwKLX07IFwKLXRlbXBsYXRlPD4gc3RydWN0
IHRyYWl0PGludD4gXAoteyBcCi0gICAgdGVtcGxhdGU8IEJPT1NUX01QTF9QUF9QQVJBTVMoaSwg
dHlwZW5hbWUgVCkgPiBzdHJ1Y3QgYXBwbHkgXAotICAgIHsgXAotICAgICAgICB0eXBlZGVmIGlu
dCB0eXBlOyBcCi0gICAgfTsgXAotfTsgXAotLyoqLwotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0NG
R19OT19GVUxMX0xBTUJEQV9TVVBQT1JUCi0KLQotI2RlZmluZSBCT09TVF9NUExfQUxHT1JJVE1f
VFJBSVRTX0xBTUJEQV9TUEVDKGksIHRyYWl0KSBcCi0gICAgQk9PU1RfTVBMX0FMR09SSVRNX1RS
QUlUU19MQU1CREFfU1BFQ19JTVBMKGksIHRyYWl0KSBcCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
dHJhaXQ8bm9uX3NlcXVlbmNlX3RhZz4ge307IFwKLS8qKi8KLQotI2VuZGlmIC8vIEJPT1NUX01Q
TF9BVVhfVFJBSVRTX0xBTUJEQV9TUEVDX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8vdHlwZV93cmFwcGVy
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhf
L3R5cGVfd3JhcHBlci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYWMzMDc5
YTlhMzUyNGVkNmIzZmI1M2JjMzIyZTY2Y2Q4N2ExMWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2F1eF8vdHlwZV93cmFwcGVyLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3
ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQVVYX1RZUEVfV1JBUFBFUl9IUFBfSU5DTFVE
RUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9UWVBFX1dSQVBQRVJfSFBQX0lOQ0xVREVECi0KLS8v
IENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8gQ29weXJpZ2h0IFBldGVy
IERpbW92IDIwMDAtMjAwMwotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0
d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3Ig
ZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNp
bmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvY3Rwcy5ocHA+Ci0KLW5hbWVzcGFjZSBib29z
dCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4IHsKLQotdGVtcGxhdGU8IHR5cGVuYW1l
IFQgPiBzdHJ1Y3QgdHlwZV93cmFwcGVyCi17Ci0gICAgdHlwZWRlZiBUIHR5cGU7Ci19OwotCi0j
aWYgIWRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpBVElPTikKLS8v
IGFndXJ0IDA4L21heS8wMzogYSBjb21wbGljYXRlZCB3YXkgdG8gZXh0cmFjdCB0aGUgd3JhcHBl
ZCB0eXBlOyBuZWVkIGl0IAotLy8gbW9zdGx5IGZvciB0aGUgc2FrZSBvZiBHQ0MgKDMuMi54KSwg
d2hpY2ggSUNFcyBpZiB5b3UgdHJ5IHRvIGV4dHJhY3QgdGhlIAotLy8gbmVzdGVkICd0eXBlJyBm
cm9tICd0eXBlX3dyYXBwZXI8VD4nIHdoZW4gdGhlIGxhdHRlciB3YXMgdGhlIHJlc3VsdCBvZiBh
Ci0vLyAndHlwZW9mJyBleHByZXNzaW9uCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCB3
cmFwcGVkX3R5cGU7Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHdyYXBwZWRfdHlw
ZTwgdHlwZV93cmFwcGVyPFQ+ID4KLXsKLSAgICB0eXBlZGVmIFQgdHlwZTsKLX07Ci0jZWxzZQot
dGVtcGxhdGU8IHR5cGVuYW1lIFcgPiBzdHJ1Y3Qgd3JhcHBlZF90eXBlCi17Ci0gICAgdHlwZWRl
ZiB0eXBlbmFtZSBXOjp0eXBlIHR5cGU7Ci19OwotI2VuZGlmCi0KLX19fQotCi0jZW5kaWYgLy8g
Qk9PU1RfTVBMX0FVWF9UWVBFX1dSQVBQRVJfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYXV4Xy92YWx1ZV93a25k
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhf
L3ZhbHVlX3drbmQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2ZlZmRlMDIx
OTAwNTgwZGI3ODA3NzdmYzhlZjA1OThlNWVlY2ZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9hdXhfL3ZhbHVlX3drbmQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAs
MCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9BVVhfVkFMVUVfV0tORF9IUFBfSU5DTFVERUQKLSNk
ZWZpbmUgQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05EX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmln
aHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0
aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJl
dmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vc3RhdGljX2Nhc3QuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9pbnRlZ3JhbC5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvbXBsL2F1eF8vY29uZmlnL2V0aS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29u
ZmlnL3dvcmthcm91bmQuaHBwPgotCi0jaWYgZGVmaW5lZChCT09TVF9NUExfQ0ZHX0JDQ19JTlRF
R1JBTF9DT05TVEFOVFMpIFwKLSAgICB8fCBkZWZpbmVkKEJPT1NUX01QTF9DRkdfTVNWQ182MF9F
VElfQlVHKQotCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2ludC5ocHA+Ci0KLW5hbWVzcGFjZSBi
b29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4IHsKLXRlbXBsYXRlPCB0eXBlbmFt
ZSBDXyA+IHN0cnVjdCB2YWx1ZV93a25kCi0gICAgOiBDXwotewotfTsKLQotI2lmIGRlZmluZWQo
Qk9PU1RfTVBMX0NGR19NU1ZDXzYwX0VUSV9CVUcpCi10ZW1wbGF0ZTw+IHN0cnVjdCB2YWx1ZV93
a25kPGludD4KLSAgICA6IGludF88MT4KLXsKLSAgICB1c2luZyBpbnRfPDE+Ojp2YWx1ZTsKLX07
Ci0jZW5kaWYKLX19fQotCi0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX01TVkNfNjBfRVRJ
X0JVRykKLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05EKEMpIFwKLSAgICA6OkJP
T1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFOjphdXg6OnZhbHVlX3drbmQ8IEMgPiBc
Ci0vKiovCi0jICAgIGRlZmluZSBCT09TVF9NUExfQVVYX01TVkNfVkFMVUVfV0tORChDKSBCT09T
VF9NUExfQVVYX1ZBTFVFX1dLTkQoQykKLSNlbHNlCi0jICAgZGVmaW5lIEJPT1NUX01QTF9BVVhf
VkFMVUVfV0tORChDKSBDCi0jICAgZGVmaW5lIEJPT1NUX01QTF9BVVhfTVNWQ19WQUxVRV9XS05E
KEMpIFwKLSAgICA6OmJvb3N0OjptcGw6OmF1eDo6dmFsdWVfd2tuZDwgQyA+IFwKLS8qKi8KLSNl
bmRpZgotCi0jZWxzZSAvLyBCT09TVF9NUExfQ0ZHX0JDQ19JTlRFR1JBTF9DT05TVEFOVFMKLQot
IyAgIGRlZmluZSBCT09TVF9NUExfQVVYX1ZBTFVFX1dLTkQoQykgQwotIyAgIGRlZmluZSBCT09T
VF9NUExfQVVYX01TVkNfVkFMVUVfV0tORChDKSBDCi0KLSNlbmRpZgotCi0jaWYgQk9PU1RfV09S
S0FST1VORChfX0VER19WRVJTSU9OX18sIDw9IDIzOCkKLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FV
WF9ORVNURURfVkFMVUVfV0tORChULCBDKSBcCi0gICAgQk9PU1RfTVBMX0FVWF9TVEFUSUNfQ0FT
VChULCBDOjp2YWx1ZSkgXAotLyoqLwotI2Vsc2UKLSMgICBkZWZpbmUgQk9PU1RfTVBMX0FVWF9O
RVNURURfVkFMVUVfV0tORChULCBDKSBcCi0gICAgQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05EKEMp
Ojp2YWx1ZSBcCi0vKiovCi0jZW5kaWYKLQotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2Ug
bXBsIHsgbmFtZXNwYWNlIGF1eCB7Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHZh
bHVlX3R5cGVfd2tuZAotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgVDo6dmFsdWVfdHlwZSB0eXBl
OwotfTsKLQotI2lmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19NU1ZDX0VUSV9CVUcpCi10ZW1wbGF0
ZTw+IHN0cnVjdCB2YWx1ZV90eXBlX3drbmQ8aW50PgotewotICAgIHR5cGVkZWYgaW50IHR5cGU7
Ci19OwotI2VuZGlmCi0KLX19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05E
X0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvbXBsL2F1eF8veWVzX25vLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9hdXhfL3llc19uby5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDIxYTE4YTIxYzI4NzNjMzE5OGI0MTFkYzZkYzNlZDVhNjcyYWE4YTMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2F1eF8veWVzX25vLmhwcAorKysgL2Rl
di9udWxsCkBAIC0xLDU4ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQVVYX1lFU19OT19I
UFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0FVWF9ZRVNfTk9fSFBQX0lOQ0xVREVECi0K
LS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAo
U2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERh
dGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9udHRwX2RlY2wu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9hcnJheXMuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9tc3ZjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwv
YXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHA+Ci0KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNw
YWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggewotCi10eXBlZGVmIGNoYXIgKCZub190YWcpWzFdOwot
dHlwZWRlZiBjaGFyICgmeWVzX3RhZylbMl07Ci0KLXRlbXBsYXRlPCBib29sIENfID4gc3RydWN0
IHllc19ub190YWcKLXsKLSAgICB0eXBlZGVmIG5vX3RhZyB0eXBlOwotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgeWVzX25vX3RhZzx0cnVlPgotewotICAgIHR5cGVkZWYgeWVzX3RhZyB0eXBlOwot
fTsKLQotCi10ZW1wbGF0ZTwgQk9PU1RfTVBMX0FVWF9OVFRQX0RFQ0wobG9uZywgbikgPiBzdHJ1
Y3Qgd2VpZ2h0ZWRfdGFnCi17Ci0jaWYgIUJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPCAx
MzAwKQotICAgIHR5cGVkZWYgY2hhciAoJnR5cGUpW25dOwotI2Vsc2UKLSAgICBjaGFyIGJ1Zltu
XTsKLSAgICB0eXBlZGVmIHdlaWdodGVkX3RhZyB0eXBlOwotI2VuZGlmCi19OwotCi0jaWYgZGVm
aW5lZChCT09TVF9NUExfQ0ZHX05PX0RFUEVOREVOVF9BUlJBWV9UWVBFUykKLXRlbXBsYXRlPD4g
c3RydWN0IHdlaWdodGVkX3RhZzwwPgotewotICAgIHR5cGVkZWYgY2hhciAoJnR5cGUpWzFdOwot
fTsKLSNlbmRpZgotCi19fX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9BVVhfWUVTX05PX0hQUF9J
TkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL2JhY2tfZndkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L21wbC9iYWNrX2Z3ZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDExOTcyMmMzMWFiNjQzZTkwYzU5ODc3NGEwNWJkMGI4YTk3NTMxOTQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2JhY2tfZndkLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0
ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQkFDS19GV0RfSFBQX0lOQ0xVREVECi0jZGVm
aW5lIEJPT1NUX01QTF9CQUNLX0ZXRF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtz
ZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBs
IGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQK
LQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPCB0eXBlbmFt
ZSBUYWcgPiBzdHJ1Y3QgYmFja19pbXBsOwotdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4g
c3RydWN0IGJhY2s7Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQkFDS19GV0RfSFBQX0lO
Q0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9tcGwvYmFja19pbnNlcnRlci5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvYmFja19pbnNlcnRlci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDhmYzQwODNjM2E5NWU4MjNlN2Q1Y2Q0MmM1MTBjNmU4Y2U2YjQ4NzYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2JhY2tfaW5zZXJ0ZXIuaHBwCisrKyAvZGV2
L251bGwKQEAgLTEsMzQgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9CQUNLX0lOU0VSVEVS
X0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQkFDS19JTlNFUlRFUl9IUFBfSU5DTFVE
RUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMy0yMDA0Ci0vLyBDb3B5cmln
aHQgRGF2aWQgQWJyYWhhbXMgMjAwMy0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55
aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xp
YnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZp
c2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9wdXNoX2JhY2suaHBwPgotI2luY2x1ZGUgPGJv
b3N0L21wbC9pbnNlcnRlci5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgbXBs
IHsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBTZXF1ZW5jZQotICAgID4KLXN0cnVjdCBi
YWNrX2luc2VydGVyCi0gICAgOiBpbnNlcnRlcjwgU2VxdWVuY2UscHVzaF9iYWNrPD4gPgotewot
fTsKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9CQUNLX0lOU0VSVEVSX0hQUF9JTkNMVURF
RApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL2JlZ2luX2VuZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9tcGwvYmVnaW5fZW5kLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcw
NzRhZmQyMDUzZWE5NmNmMmVjNGQ3OGQ5MzdmZGY1MjZmOTFmYy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvYmVnaW5fZW5kLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICsw
LDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQkVHSU5fRU5EX0hQUF9JTkNMVURFRAotI2RlZmlu
ZSBCT09TVF9NUExfQkVHSU5fRU5EX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3Nl
eSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwg
Zm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAot
Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2JlZ2luX2VuZF9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L21wbC9hdXhfL2JlZ2luX2VuZF9pbXBsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvc2VxdWVu
Y2VfdGFnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9uYV9zcGVjLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9tcGwvYXV4Xy9sYW1iZGFfc3VwcG9ydC5ocHA+Ci0KLW5hbWVzcGFjZSBib29z
dCB7IG5hbWVzcGFjZSBtcGwgewotCi0vLyBhZ3VydCwgMTMvc2VwLzAyOiBzd2l0Y2hlZCBmcm9t
IGluaGVyaXRhbmNlIHRvIHR5cGVkZWY7IE1TVkMgaXMgbW9yZQotLy8gaGFwcHkgdGhpcyB3YXkg
KGxlc3MgRVRJLXJlbGF0ZWQgZXJyb3JzKSwgYW5kIGl0IGRvZXNuJ3QgYWZmZWN0IAotLy8gYW55
dGhpbmcgZWxzZQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BB
UkFNKFNlcXVlbmNlKQotICAgID4KLXN0cnVjdCBiZWdpbgotewotICAgIHR5cGVkZWYgdHlwZW5h
bWUgc2VxdWVuY2VfdGFnPFNlcXVlbmNlPjo6dHlwZSB0YWdfOwotICAgIHR5cGVkZWYgdHlwZW5h
bWUgYmVnaW5faW1wbDwgdGFnXyA+Ci0gICAgICAgIDo6dGVtcGxhdGUgYXBwbHk8IFNlcXVlbmNl
ID46OnR5cGUgdHlwZTsKLQotICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlQoMSxiZWdp
biwoU2VxdWVuY2UpKQotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09TVF9NUExf
QVVYX05BX1BBUkFNKFNlcXVlbmNlKQotICAgID4KLXN0cnVjdCBlbmQKLXsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIHNlcXVlbmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgdGFnXzsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIGVuZF9pbXBsPCB0YWdfID4KLSAgICAgICAgOjp0ZW1wbGF0ZSBhcHBseTwgU2Vx
dWVuY2UgPjo6dHlwZSB0eXBlOwotCi0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgx
LGVuZCwoU2VxdWVuY2UpKQotfTsKLQotQk9PU1RfTVBMX0FVWF9OQV9TUEVDKDEsIGJlZ2luKQot
Qk9PU1RfTVBMX0FVWF9OQV9TUEVDKDEsIGVuZCkKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01Q
TF9CRUdJTl9FTkRfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYmVnaW5fZW5kX2Z3ZC5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYmVnaW5fZW5kX2Z3ZC5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZWY5ZWZlYzQzNGI5Nzc2Y2FlYTE1OWM4Y2Qx
NWVjZWJmYzc3ZjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2JlZ2luX2Vu
ZF9md2QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NU
X01QTF9CRUdJTl9FTkRfRldEX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQkVHSU5f
RU5EX0ZXRF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAw
MC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQp
Ci0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0
aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotbmFtZXNwYWNlIGJv
b3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3Qg
YmVnaW5faW1wbDsKLXRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3QgZW5kX2ltcGw7Ci0K
LXRlbXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBiZWdpbjsKLXRlbXBsYXRlPCB0
eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBlbmQ7Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9N
UExfQkVHSU5fRU5EX0ZXRF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9iaW5kLmhwcCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9iaW5kLmhwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjNlZTNmMjdlMmVmYzYzODA0ZDkxNjRiZWI0YjlkMjc3ZDllYTgwZC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYmluZC5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSw1NTEgKzAsMCBAQAotCi0jaWYgIWRlZmluZWQoQk9PU1RfUFBfSVNfSVRFUkFUSU5H
KQotCi0vLy8vLyBoZWFkZXIgYm9keQotCi0jaWZuZGVmIEJPT1NUX01QTF9CSU5EX0hQUF9JTkNM
VURFRAotI2RlZmluZSBCT09TVF9NUExfQklORF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0
IFBldGVyIERpbW92IDIwMDEKLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDEtMjAw
NAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBv
ciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8K
LS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4K
LQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpZiAhZGVmaW5lZChCT09T
VF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9iaW5kX2Z3
ZC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL3BsYWNlaG9sZGVycy5ocHA+Ci0jICAgaW5j
bHVkZSA8Ym9vc3QvbXBsL25leHQuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9wcm90ZWN0
LmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXBwbHlfd3JhcC5ocHA+Ci0jICAgaW5jbHVk
ZSA8Ym9vc3QvbXBsL2xpbWl0cy9hcml0eS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1
eF8vbmEuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2FyaXR5X3NwZWMuaHBwPgot
IyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3R5cGVfd3JhcHBlci5ocHA+Ci0jICAgaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8veWVzX25vLmhwcD4KLSMgICBpZiBkZWZpbmVkKEJPT1NUX05PX1RF
TVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04pCi0jICAgICAgIGluY2x1ZGUgPGJvb3N0L3R5
cGVfdHJhaXRzL2lzX3JlZmVyZW5jZS5ocHA+Ci0jICAgZW5kaWYgCi0jZW5kaWYKLQotI2luY2x1
ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9iaW5kLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwv
YXV4Xy9jb25maWcvc3RhdGljX2NvbnN0YW50LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4
Xy9jb25maWcvdXNlX3ByZXByb2Nlc3NlZC5ocHA+Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExf
Q0ZHX05PX1BSRVBST0NFU1NFRF9IRUFERVJTKSBcCi0gICAgJiYgIWRlZmluZWQoQk9PU1RfTVBM
X1BSRVBST0NFU1NJTkdfTU9ERSkKLQotIyAgIGlmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19V
Tk5BTUVEX1BMQUNFSE9MREVSX1NVUFBPUlQpCi0jICAgICAgIGRlZmluZSBCT09TVF9NUExfUFJF
UFJPQ0VTU0VEX0hFQURFUiBiYXNpY19iaW5kLmhwcAotIyAgIGVsc2UKLSMgICAgICAgZGVmaW5l
IEJPT1NUX01QTF9QUkVQUk9DRVNTRURfSEVBREVSIGJpbmQuaHBwCi0jICAgZW5kaWYKLSMgICBp
bmNsdWRlIDxib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHA+Ci0KLSNlbHNl
Ci0KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvcGFyYW1zLmhwcD4K
LSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZGVmYXVsdF9wYXJhbXMu
aHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9kZWZfcGFyYW1z
X3RhaWwuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9wYXJ0
aWFsX3NwZWNfcGFyYW1zLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9wcmVwcm9j
ZXNzb3IvZXh0X3BhcmFtcy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vcHJlcHJv
Y2Vzc29yL3JlcGVhdC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vz
c29yL2VudW0uaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9h
ZGQuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9kbWNfYW1iaWd1b3Vz
X2N0cHMuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9jdHBzLmhwcD4K
LSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvdHRwLmhwcD4KLSMgICBpbmNsdWRl
IDxib29zdC9tcGwvYXV4Xy9jb25maWcvZHRwLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwv
YXV4Xy9udHRwX2RlY2wuaHBwPgotCi0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2l0
ZXJhdGUuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb21tYV9pZi5ocHA+
Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHA+Ci0jICAgaW5jbHVkZSA8
Ym9vc3QvcHJlcHJvY2Vzc29yL2luYy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFj
ZSBtcGwgewotCi0vLyBsb2NhbCBtYWNyb3MsICN1bmRlZi1pbmVkIGF0IHRoZSBlbmQgb2YgdGhl
IGhlYWRlcgotIyAgIGRlZmluZSBBVVg3NzgwNzZfQVBQTFkgXAotICAgIEJPT1NUX1BQX0NBVChh
cHBseV93cmFwLEJPT1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkpIFwKLSAgICAvKiov
Ci0KLSMgICBpZiBkZWZpbmVkKEJPT1NUX01QTF9DRkdfRE1DX0FNQklHVU9VU19DVFBTKQotIyAg
ICAgICBkZWZpbmUgQVVYNzc4MDc2X0RNQ19QQVJBTSgpICwgaW50IGR1bW15XwotIyAgIGVsc2UK
LSMgICAgICAgZGVmaW5lIEFVWDc3ODA3Nl9ETUNfUEFSQU0oKQotIyAgIGVuZGlmCi0KLSMgICBk
ZWZpbmUgQVVYNzc4MDc2X0JJTkRfUEFSQU1TKHBhcmFtKSBcCi0gICAgQk9PU1RfTVBMX1BQX1BB
UkFNUyggXAotICAgICAgICAgIEJPT1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkgXAot
ICAgICAgICAsIHBhcmFtIFwKLSAgICAgICAgKSBcCi0gICAgLyoqLwotCi0jICAgZGVmaW5lIEFV
WDc3ODA3Nl9CSU5EX0RFRkFVTFRfUEFSQU1TKHBhcmFtLCB2YWx1ZSkgXAotICAgIEJPT1NUX01Q
TF9QUF9ERUZBVUxUX1BBUkFNUyggXAotICAgICAgICAgIEJPT1NUX01QTF9MSU1JVF9NRVRBRlVO
Q1RJT05fQVJJVFkgXAotICAgICAgICAsIHBhcmFtIFwKLSAgICAgICAgLCB2YWx1ZSBcCi0gICAg
ICAgICkgXAotICAgIC8qKi8KLQotIyAgIGRlZmluZSBBVVg3NzgwNzZfQklORF9OX1BBUkFNUyhu
LCBwYXJhbSkgXAotICAgIEJPT1NUX1BQX0NPTU1BX0lGKG4pIEJPT1NUX01QTF9QUF9QQVJBTVMo
biwgcGFyYW0pIFwKLSAgICAvKiovCi0KLSMgICBkZWZpbmUgQVVYNzc4MDc2X0JJTkRfTl9TUEVD
X1BBUkFNUyhuLCBwYXJhbSwgZGVmKSBcCi0gICAgQk9PU1RfUFBfQ09NTUFfSUYobikgXAotICAg
IEJPT1NUX01QTF9QUF9QQVJUSUFMX1NQRUNfUEFSQU1TKG4sIHBhcmFtLCBkZWYpIFwKLSAgICAv
KiovCi0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX0RFRkFVTFRfUEFSQU1FVEVSU19J
Tl9ORVNURURfVEVNUExBVEVTKQotIyAgIGRlZmluZSBBVVg3NzgwNzZfQklORF9ORVNURURfREVG
QVVMVF9QQVJBTVMocGFyYW0sIHZhbHVlKSBcCi0gICAgQVVYNzc4MDc2X0JJTkRfREVGQVVMVF9Q
QVJBTVMocGFyYW0sIHZhbHVlKSBcCi0gICAgLyoqLwotI2Vsc2UKLSMgICBkZWZpbmUgQVVYNzc4
MDc2X0JJTkRfTkVTVEVEX0RFRkFVTFRfUEFSQU1TKHBhcmFtLCB2YWx1ZSkgXAotICAgIEFVWDc3
ODA3Nl9CSU5EX1BBUkFNUyhwYXJhbSkgXAotICAgIC8qKi8KLSNlbmRpZgotCi1uYW1lc3BhY2Ug
YXV4IHsKLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTEla
QVRJT04pCi0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVCwgQVVYNzc4MDc2X0JJTkRfUEFS
QU1TKHR5cGVuYW1lIFUpCi0gICAgPgotc3RydWN0IHJlc29sdmVfYmluZF9hcmcKLXsKLSAgICB0
eXBlZGVmIFQgdHlwZTsKLX07Ci0KLSMgICBpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX1VO
TkFNRURfUExBQ0VIT0xERVJfU1VQUE9SVCkKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBU
Ci0gICAgLCB0eXBlbmFtZSBBcmcKLSAgICA+Ci1zdHJ1Y3QgcmVwbGFjZV91bm5hbWVkX2FyZwot
ewotICAgIHR5cGVkZWYgQXJnIG5leHQ7Ci0gICAgdHlwZWRlZiBUIHR5cGU7Ci19OwotCi10ZW1w
bGF0ZTwKLSAgICAgIHR5cGVuYW1lIEFyZwotICAgID4KLXN0cnVjdCByZXBsYWNlX3VubmFtZWRf
YXJnPCBhcmc8LTE+LEFyZyA+Ci17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBBcmc6Om5leHQgbmV4
dDsKLSAgICB0eXBlZGVmIEFyZyB0eXBlOwotfTsKLQotIyAgIGVuZGlmIC8vIEJPT1NUX01QTF9D
RkdfTk9fVU5OQU1FRF9QTEFDRUhPTERFUl9TVVBQT1JUCi0KLXRlbXBsYXRlPAotICAgICAgQk9P
U1RfTVBMX0FVWF9OVFRQX0RFQ0woaW50LCBOKSwgQVVYNzc4MDc2X0JJTkRfUEFSQU1TKHR5cGVu
YW1lIFUpCi0gICAgPgotc3RydWN0IHJlc29sdmVfYmluZF9hcmc8IGFyZzxOPixBVVg3NzgwNzZf
QklORF9QQVJBTVMoVSkgPgotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgQVVYNzc4MDc2X0FQUExZ
PG1wbDo6YXJnPE4+LCBBVVg3NzgwNzZfQklORF9QQVJBTVMoVSk+Ojp0eXBlIHR5cGU7Ci19Owot
Ci0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19CSU5EX1RFTVBMQVRFKQotdGVtcGxhdGU8
Ci0gICAgICB0eXBlbmFtZSBGLCBBVVg3NzgwNzZfQklORF9QQVJBTVModHlwZW5hbWUgVCksIEFV
WDc3ODA3Nl9CSU5EX1BBUkFNUyh0eXBlbmFtZSBVKQotICAgID4KLXN0cnVjdCByZXNvbHZlX2Jp
bmRfYXJnPCBiaW5kPEYsQVVYNzc4MDc2X0JJTkRfUEFSQU1TKFQpPixBVVg3NzgwNzZfQklORF9Q
QVJBTVMoVSkgPgotewotICAgIHR5cGVkZWYgYmluZDxGLEFVWDc3ODA3Nl9CSU5EX1BBUkFNUyhU
KT4gZl87Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBBVVg3NzgwNzZfQVBQTFk8Zl8sIEFVWDc3ODA3
Nl9CSU5EX1BBUkFNUyhVKT46OnR5cGUgdHlwZTsKLX07Ci0jZW5kaWYKLQotI2Vsc2UgLy8gQk9P
U1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpBVElPTgotCi0vLyBhZ3VydCwgMTUvamFu
LzAyOiBpdCdzIG5vdCBhIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBmdW5jdGlvbiBjbGFzcywg
YW5kIAotLy8gTVNWQzYuNSBoYXMgcHJvYmxlbXMgd2l0aCAnYXBwbHknIG5hbWUgaGVyZSAodGhl
IGNvZGUgY29tcGlsZXMsIGJ1dCBkb2Vzbid0Ci0vLyB3b3JrKSwgc28gSSB3ZW50IHdpdGggdGhl
ICdyZXN1bHRfJyBoZXJlLCBhbmQgaW4gYWxsIG90aGVyIHNpbWlsYXIgY2FzZXMKLXRlbXBsYXRl
PCBib29sID4KLXN0cnVjdCByZXNvbHZlX2FyZ19pbXBsCi17Ci0gICAgdGVtcGxhdGU8IHR5cGVu
YW1lIFQsIEFVWDc3ODA3Nl9CSU5EX1BBUkFNUyh0eXBlbmFtZSBVKSA+IHN0cnVjdCByZXN1bHRf
Ci0gICAgewotICAgICAgICB0eXBlZGVmIFQgdHlwZTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8
PiAKLXN0cnVjdCByZXNvbHZlX2FyZ19pbXBsPHRydWU+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVu
YW1lIFQsIEFVWDc3ODA3Nl9CSU5EX1BBUkFNUyh0eXBlbmFtZSBVKSA+IHN0cnVjdCByZXN1bHRf
Ci0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFVWDc3ODA3Nl9BUFBMWTwKLSAgICAg
ICAgICAgICAgVAotICAgICAgICAgICAgLCBBVVg3NzgwNzZfQklORF9QQVJBTVMoVSkKLSAgICAg
ICAgICAgID46OnR5cGUgdHlwZTsKLSAgICB9OwotfTsKLQotLy8gZm9yICdyZXNvbHZlX2JpbmRf
YXJnJwotdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfYmluZF90ZW1wbGF0ZTsKLQot
dGVtcGxhdGU8IAotICAgICAgdHlwZW5hbWUgVCwgQVVYNzc4MDc2X0JJTkRfUEFSQU1TKHR5cGVu
YW1lIFUpCi0gICAgPgotc3RydWN0IHJlc29sdmVfYmluZF9hcmcKLSAgICA6IHJlc29sdmVfYXJn
X2ltcGw8IGlzX2JpbmRfdGVtcGxhdGU8VD46OnZhbHVlID4KLSAgICAgICAgICAgIDo6dGVtcGxh
dGUgcmVzdWx0XzwgVCxBVVg3NzgwNzZfQklORF9QQVJBTVMoVSkgPgotewotfTsKLQotIyAgIGlm
ICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fVU5OQU1FRF9QTEFDRUhPTERFUl9TVVBQT1JUKQot
Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IAotc3RydWN0IHJlcGxhY2VfdW5uYW1lZF9hcmdfaW1w
bAotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBBcmcgPiBzdHJ1Y3QgcmVzdWx0XwotICAgIHsK
LSAgICAgICAgdHlwZWRlZiBBcmcgbmV4dDsKLSAgICAgICAgdHlwZWRlZiBUIHR5cGU7Ci0gICAg
fTsKLX07Ci0KLXRlbXBsYXRlPD4gCi1zdHJ1Y3QgcmVwbGFjZV91bm5hbWVkX2FyZ19pbXBsPCBh
cmc8LTE+ID4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgQXJnID4gc3RydWN0IHJlc3VsdF8K
LSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbmV4dDxBcmc+Ojp0eXBlIG5leHQ7Ci0g
ICAgICAgIHR5cGVkZWYgQXJnIHR5cGU7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFt
ZSBULCB0eXBlbmFtZSBBcmcgPiAKLXN0cnVjdCByZXBsYWNlX3VubmFtZWRfYXJnCi0gICAgOiBy
ZXBsYWNlX3VubmFtZWRfYXJnX2ltcGw8VD46OnRlbXBsYXRlIHJlc3VsdF88QXJnPgotewotfTsK
LQotIyAgIGVuZGlmIC8vIEJPT1NUX01QTF9DRkdfTk9fVU5OQU1FRF9QTEFDRUhPTERFUl9TVVBQ
T1JUCi0KLS8vIGFndXJ0LCAxMC9tYXIvMDI6IHRoZSBmb3J3YXJkIGRlY2xhcmF0aW9uIGhhcyB0
byBhcHBlYXIgYmVmb3JlIGFueSBvZgotLy8gJ2lzX2JpbmRfaGVscGVyJyBvdmVybG9hZHMsIG90
aGVyd2lzZSBNU1ZDNi41IGlzc3VlcyBhbiBJQ0Ugb24gaXQKLXRlbXBsYXRlPCBCT09TVF9NUExf
QVVYX05UVFBfREVDTChpbnQsIGFyaXR5XykgPiBzdHJ1Y3QgYmluZF9jaG9vc2VyOwotCi1hdXg6
Om5vX3RhZyBpc19iaW5kX2hlbHBlciguLi4pOwotdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBhdXg6
Om5vX3RhZyBpc19iaW5kX2hlbHBlcihwcm90ZWN0PFQ+Kik7Ci0KLS8vIG92ZXJsb2FkIGZvciAi
bWFpbiIgZm9ybQotLy8gYWd1cnQsIDE1L21hci8wMjogTVNWQyA2LjUgZmFpbHMgdG8gcHJvcGVy
bHkgcmVzb2x2ZSB0aGUgb3ZlcmxvYWQgCi0vLyBpbiBjYXNlIGlmIHdlIHVzZSAnYXV4Ojp0eXBl
X3dyYXBwZXI8IGJpbmQ8Li4uPiA+JyBoZXJlLCBhbmQgYWxsIAotLy8gJ2JpbmQnIGluc3RhbnRp
YXRpb25zIGZvcm0gYSBjb21wbGV0ZSB0eXBlIGFueXdheQotI2lmICFkZWZpbmVkKEJPT1NUX01Q
TF9DRkdfTk9fQklORF9URU1QTEFURSkKLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiwgQVVY
Nzc4MDc2X0JJTkRfUEFSQU1TKHR5cGVuYW1lIFQpCi0gICAgPgotYXV4Ojp5ZXNfdGFnIGlzX2Jp
bmRfaGVscGVyKGJpbmQ8RixBVVg3NzgwNzZfQklORF9QQVJBTVMoVCk+Kik7Ci0jZW5kaWYKLQot
dGVtcGxhdGU8IEJPT1NUX01QTF9BVVhfTlRUUF9ERUNMKGludCwgTikgPgotYXV4Ojp5ZXNfdGFn
IGlzX2JpbmRfaGVscGVyKGFyZzxOPiopOwotCi10ZW1wbGF0ZTwgYm9vbCBpc19yZWZfID0gdHJ1
ZSA+Ci1zdHJ1Y3QgaXNfYmluZF90ZW1wbGF0ZV9pbXBsCi17Ci0gICAgdGVtcGxhdGU8IHR5cGVu
YW1lIFQgPiBzdHJ1Y3QgcmVzdWx0XwotICAgIHsKLSAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGJvb2wsIHZhbHVlID0gZmFsc2UpOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgaXNfYmluZF90ZW1wbGF0ZV9pbXBsPGZhbHNlPgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFt
ZSBUID4gc3RydWN0IHJlc3VsdF8KLSAgICB7Ci0gICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFO
VChib29sLCB2YWx1ZSA9IAotICAgICAgICAgICAgICBzaXplb2YoYXV4Ojppc19iaW5kX2hlbHBl
cihzdGF0aWNfY2FzdDxUKj4oMCkpKSAKLSAgICAgICAgICAgICAgICA9PSBzaXplb2YoYXV4Ojp5
ZXNfdGFnKQotICAgICAgICAgICAgKTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1l
IFQgPiBzdHJ1Y3QgaXNfYmluZF90ZW1wbGF0ZQotICAgIDogaXNfYmluZF90ZW1wbGF0ZV9pbXBs
PCA6OmJvb3N0OjpkZXRhaWw6OmlzX3JlZmVyZW5jZV9pbXBsPFQ+Ojp2YWx1ZSA+Ci0gICAgICAg
IDo6dGVtcGxhdGUgcmVzdWx0XzxUPgotewotfTsKLQotI2VuZGlmIC8vIEJPT1NUX05PX1RFTVBM
QVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04KLQotfSAvLyBuYW1lc3BhY2UgYXV4Ci0KLQotI2Rl
ZmluZSBCT09TVF9QUF9JVEVSQVRJT05fUEFSQU1TXzEgXAotICAgICgzLCgwLCBCT09TVF9NUExf
TElNSVRfTUVUQUZVTkNUSU9OX0FSSVRZLCA8Ym9vc3QvbXBsL2JpbmQuaHBwPikpCi0jaW5jbHVk
ZSBCT09TVF9QUF9JVEVSQVRFKCkKLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFX1BB
UlRJQUxfU1BFQ0lBTElaQVRJT04pIFwKLSAgICAmJiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05P
X1RFTVBMQVRFX1RFTVBMQVRFX1BBUkFNRVRFUlMpCi0vLy8gaWZfL2V2YWxfaWYgc3BlY2lhbGl6
YXRpb25zCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9TUEVDX05BTUUgaWZfCi0jICAgZGVmaW5lIEJP
T1NUX1BQX0lURVJBVElPTl9QQVJBTVNfMSAoMywoMywgMywgPGJvb3N0L21wbC9iaW5kLmhwcD4p
KQotIyAgIGluY2x1ZGUgQk9PU1RfUFBfSVRFUkFURSgpCi0KLSNpZiAhZGVmaW5lZChCT09TVF9N
UExfQ0ZHX0RNQ19BTUJJR1VPVVNfQ1RQUykKLSMgICBkZWZpbmUgQVVYNzc4MDc2X1NQRUNfTkFN
RSBldmFsX2lmCi0jICAgZGVmaW5lIEJPT1NUX1BQX0lURVJBVElPTl9QQVJBTVNfMSAoMywoMywg
MywgPGJvb3N0L21wbC9iaW5kLmhwcD4pKQotIyAgIGluY2x1ZGUgQk9PU1RfUFBfSVRFUkFURSgp
Ci0jZW5kaWYKLSNlbmRpZgotCi0vLyByZWFsIEMrKyB2ZXJzaW9uIGlzIGFscmVhZHkgdGFrZW4g
Y2FyZSBvZgotI2lmIGRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpB
VElPTikgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fQklORF9URU1QTEFURSkK
LQotbmFtZXNwYWNlIGF1eCB7Ci0vLyBhcHBseV9jb3VudF9hcmdzCi0jZGVmaW5lIEFVWDc3ODA3
Nl9DT1VOVF9BUkdTX1BSRUZJWCBiaW5kCi0jZGVmaW5lIEFVWDc3ODA3Nl9DT1VOVF9BUkdTX0RF
RkFVTFQgbmEKLSNkZWZpbmUgQVVYNzc4MDc2X0NPVU5UX0FSR1NfQVJJVFkgQk9PU1RfTVBMX0xJ
TUlUX01FVEFGVU5DVElPTl9BUklUWQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvdW50X2Fy
Z3MuaHBwPgotfQotCi0vLyBiaW5kCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYsIEFVWDc3
ODA3Nl9CSU5EX1BBUkFNUyh0eXBlbmFtZSBUKSBBVVg3NzgwNzZfRE1DX1BBUkFNKCkKLSAgICA+
Ci1zdHJ1Y3QgYmluZAotICAgIDogYXV4OjpiaW5kX2Nob29zZXI8Ci0gICAgICAgICAgYXV4Ojpi
aW5kX2NvdW50X2FyZ3M8QVVYNzc4MDc2X0JJTkRfUEFSQU1TKFQpPjo6dmFsdWUKLSAgICAgICAg
Pjo6dGVtcGxhdGUgcmVzdWx0XzwgRixBVVg3NzgwNzZfQklORF9QQVJBTVMoVCkgPjo6dHlwZQot
ewotfTsKLQotQk9PU1RfTVBMX0FVWF9BUklUWV9TUEVDKAotICAgICAgQk9PU1RfUFBfSU5DKEJP
T1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkpCi0gICAgLCBiaW5kCi0gICAgKQotCi1C
T09TVF9NUExfQVVYX1RFTVBMQVRFX0FSSVRZX1NQRUMoCi0gICAgICBCT09TVF9QUF9JTkMoQk9P
U1RfTVBMX0xJTUlUX01FVEFGVU5DVElPTl9BUklUWSkKLSAgICAsIGJpbmQKLSAgICApCi0KLQot
I2VuZGlmIC8vIEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04KLQotIyAg
IHVuZGVmIEFVWDc3ODA3Nl9CSU5EX05FU1RFRF9ERUZBVUxUX1BBUkFNUwotIyAgIHVuZGVmIEFV
WDc3ODA3Nl9CSU5EX05fU1BFQ19QQVJBTVMKLSMgICB1bmRlZiBBVVg3NzgwNzZfQklORF9OX1BB
UkFNUwotIyAgIHVuZGVmIEFVWDc3ODA3Nl9CSU5EX0RFRkFVTFRfUEFSQU1TCi0jICAgdW5kZWYg
QVVYNzc4MDc2X0JJTkRfUEFSQU1TCi0jICAgdW5kZWYgQVVYNzc4MDc2X0RNQ19QQVJBTQotIyAg
IHVuZGVmIEFVWDc3ODA3Nl9BUFBMWQotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0NGR19O
T19QUkVQUk9DRVNTRURfSEVBREVSUwotI2VuZGlmIC8vIEJPT1NUX01QTF9CSU5EX0hQUF9JTkNM
VURFRAotCi0vLy8vLyBpdGVyYXRpb24sIGRlcHRoID09IDEKLQotLy8gRm9yIGdjYyA0LjQgY29t
cGF0YWJpbGl0eSwgd2UgbXVzdCBpbmNsdWRlIHRoZQotLy8gQk9PU1RfUFBfSVRFUkFUSU9OX0RF
UFRIIHRlc3QgaW5zaWRlIGFuICNlbHNlIGNsYXVzZS4KLSNlbHNlIC8vIEJPT1NUX1BQX0lTX0lU
RVJBVElORwotI2lmIEJPT1NUX1BQX0lURVJBVElPTl9ERVBUSCgpID09IDEKLQotIyAgIGRlZmlu
ZSBpXyBCT09TVF9QUF9GUkFNRV9JVEVSQVRJT04oMSkKLQotI2lmIGRlZmluZWQoQVVYNzc4MDc2
X1NQRUNfTkFNRSkKLQotLy8gbGF6eSBtZXRhZnVuY3Rpb24gc3BlY2lhbGl6YXRpb24KLXRlbXBs
YXRlPCB0ZW1wbGF0ZTwgQk9PU1RfTVBMX1BQX1BBUkFNUyhpXywgdHlwZW5hbWUgVCkgPiBjbGFz
cyBGLCB0eXBlbmFtZSBUYWcgPgotc3RydWN0IEJPT1NUX1BQX0NBVChxdW90ZSxpXyk7Ci0KLXRl
bXBsYXRlPCBCT09TVF9NUExfUFBfUEFSQU1TKGlfLCB0eXBlbmFtZSBUKSA+IHN0cnVjdCBBVVg3
NzgwNzZfU1BFQ19OQU1FOwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFRhZyBBVVg3Nzgw
NzZfQklORF9OX1BBUkFNUyhpXywgdHlwZW5hbWUgVCkKLSAgICA+Ci1zdHJ1Y3QgQk9PU1RfUFBf
Q0FUKGJpbmQsaV8pPCAKLSAgICAgIEJPT1NUX1BQX0NBVChxdW90ZSxpXyk8QVVYNzc4MDc2X1NQ
RUNfTkFNRSxUYWc+Ci0gICAgQVVYNzc4MDc2X0JJTkRfTl9QQVJBTVMoaV8sVCkKLSAgICA+Ci17
Ci0gICAgdGVtcGxhdGU8Ci0gICAgICAgICAgQVVYNzc4MDc2X0JJTkRfTkVTVEVEX0RFRkFVTFRf
UEFSQU1TKHR5cGVuYW1lIFUsIG5hKQotICAgICAgICA+Ci0gICAgc3RydWN0IGFwcGx5Ci0gICAg
ewotICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIG1wbDo6YXJnPDE+IG4xOwotIyAgICAg
ICBkZWZpbmUgQk9PU1RfUFBfSVRFUkFUSU9OX1BBUkFNU18yICgzLCgxLCBpXywgPGJvb3N0L21w
bC9iaW5kLmhwcD4pKQotIyAgICAgICBpbmNsdWRlIEJPT1NUX1BQX0lURVJBVEUoKQotCi0gICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgQVVYNzc4MDc2X1NQRUNfTkFNRTwKLSAgICAgICAgICAgICAg
dHlwZW5hbWUgdDE6OnR5cGUKLSAgICAgICAgICAgICwgQk9PU1RfTVBMX1BQX0VYVF9QQVJBTVMo
MiwgQk9PU1RfUFBfSU5DKGlfKSwgdCkKLSAgICAgICAgICAgID46OnR5cGUgZl87Ci0KLSAgICAg
cHVibGljOgotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGZfOjp0eXBlIHR5cGU7Ci0gICAgfTsK
LX07Ci0KLSN1bmRlZiBBVVg3NzgwNzZfU1BFQ19OQU1FCi0KLSNlbHNlIC8vIEFVWDc3ODA3Nl9T
UEVDX05BTUUKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGIEFVWDc3ODA3Nl9CSU5EX05f
UEFSQU1TKGlfLCB0eXBlbmFtZSBUKSBBVVg3NzgwNzZfRE1DX1BBUkFNKCkKLSAgICA+Ci1zdHJ1
Y3QgQk9PU1RfUFBfQ0FUKGJpbmQsaV8pCi17Ci0gICAgdGVtcGxhdGU8Ci0gICAgICAgICAgQVVY
Nzc4MDc2X0JJTkRfTkVTVEVEX0RFRkFVTFRfUEFSQU1TKHR5cGVuYW1lIFUsIG5hKQotICAgICAg
ICA+Ci0gICAgc3RydWN0IGFwcGx5Ci0gICAgewotICAgICBwcml2YXRlOgotIyAgIGlmICFkZWZp
bmVkKEJPT1NUX01QTF9DRkdfTk9fVU5OQU1FRF9QTEFDRUhPTERFUl9TVVBQT1JUKQotCi0gICAg
ICAgIHR5cGVkZWYgYXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBGLG1wbDo6YXJnPDE+ID4gcjA7
Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjA6OnR5cGUgYTA7Ci0gICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgcjA6Om5leHQgbjE7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNv
bHZlX2JpbmRfYXJnPGEwLEFVWDc3ODA3Nl9CSU5EX1BBUkFNUyhVKT46OnR5cGUgZl87Ci0gICAg
ICAgIC8vLwotIyAgIGVsc2UKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OnJlc29sdmVf
YmluZF9hcmc8RixBVVg3NzgwNzZfQklORF9QQVJBTVMoVSk+Ojp0eXBlIGZfOwotCi0jICAgZW5k
aWYgLy8gQk9PU1RfTVBMX0NGR19OT19VTk5BTUVEX1BMQUNFSE9MREVSX1NVUFBPUlQKLQotIyAg
IGlmIGlfID4gMAotIyAgICAgICBkZWZpbmUgQk9PU1RfUFBfSVRFUkFUSU9OX1BBUkFNU18yICgz
LCgxLCBpXywgPGJvb3N0L21wbC9iaW5kLmhwcD4pKQotIyAgICAgICBpbmNsdWRlIEJPT1NUX1BQ
X0lURVJBVEUoKQotIyAgIGVuZGlmCi0KLSAgICAgcHVibGljOgotCi0jICAgZGVmaW5lIEFVWDc3
ODA3Nl9BUkcodW51c2VkLCBpXywgdCkgXAotICAgIEJPT1NUX1BQX0NPTU1BX0lGKGlfKSBcCi0g
ICAgdHlwZW5hbWUgQk9PU1RfUFBfQ0FUKHQsQk9PU1RfUFBfSU5DKGlfKSk6OnR5cGUgXAotLyoq
LwotCi0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQk9PU1RfUFBfQ0FUKGFwcGx5X3dyYXAsaV8p
PAotICAgICAgICAgICAgICBmXyAKLSAgICAgICAgICAgIEJPT1NUX1BQX0NPTU1BX0lGKGlfKSBC
T09TVF9NUExfUFBfUkVQRUFUKGlfLCBBVVg3NzgwNzZfQVJHLCB0KQotICAgICAgICAgICAgPjo6
dHlwZSB0eXBlOwotCi0jICAgdW5kZWYgQVVYNzc4MDc2X0FSRwotICAgIH07Ci19OwotCi1uYW1l
c3BhY2UgYXV4IHsKLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BF
Q0lBTElaQVRJT04pCi0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiBBVVg3NzgwNzZfQklO
RF9OX1BBUkFNUyhpXywgdHlwZW5hbWUgVCksIEFVWDc3ODA3Nl9CSU5EX1BBUkFNUyh0eXBlbmFt
ZSBVKQotICAgID4KLXN0cnVjdCByZXNvbHZlX2JpbmRfYXJnPAotICAgICAgQk9PU1RfUFBfQ0FU
KGJpbmQsaV8pPEYgQVVYNzc4MDc2X0JJTkRfTl9QQVJBTVMoaV8sVCk+LEFVWDc3ODA3Nl9CSU5E
X1BBUkFNUyhVKQotICAgID4KLXsKLSAgICB0eXBlZGVmIEJPT1NUX1BQX0NBVChiaW5kLGlfKTxG
IEFVWDc3ODA3Nl9CSU5EX05fUEFSQU1TKGlfLFQpPiBmXzsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IEFVWDc3ODA3Nl9BUFBMWTxmXywgQVVYNzc4MDc2X0JJTkRfUEFSQU1TKFUpPjo6dHlwZSB0eXBl
OwotfTsKLQotI2Vsc2UKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBGIEFVWDc3ODA3Nl9C
SU5EX05fUEFSQU1TKGlfLCB0eXBlbmFtZSBUKQotICAgID4KLWF1eDo6eWVzX3RhZwotaXNfYmlu
ZF9oZWxwZXIoQk9PU1RfUFBfQ0FUKGJpbmQsaV8pPEYgQVVYNzc4MDc2X0JJTkRfTl9QQVJBTVMo
aV8sVCk+Kik7Ci0KLSNlbmRpZiAvLyBCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJ
WkFUSU9OCi0KLX0gLy8gbmFtZXNwYWNlIGF1eAotCi1CT09TVF9NUExfQVVYX0FSSVRZX1NQRUMo
Qk9PU1RfUFBfSU5DKGlfKSwgQk9PU1RfUFBfQ0FUKGJpbmQsaV8pKQotQk9PU1RfTVBMX0FVWF9U
RU1QTEFURV9BUklUWV9TUEVDKEJPT1NUX1BQX0lOQyhpXyksIEJPT1NUX1BQX0NBVChiaW5kLGlf
KSkKLQotIyAgIGlmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fQklORF9URU1QTEFURSkKLSMg
ICBpZiAhZGVmaW5lZChCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OKQot
ICAgIAotI2lmIGlfID09IEJPT1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkKLS8vLyBw
cmltYXJ5IHRlbXBsYXRlIChub3QgYSBzcGVjaWFsaXphdGlvbiEpCi10ZW1wbGF0ZTwKLSAgICAg
IHR5cGVuYW1lIEYgQVVYNzc4MDc2X0JJTkRfTl9QQVJBTVMoaV8sIHR5cGVuYW1lIFQpIEFVWDc3
ODA3Nl9ETUNfUEFSQU0oKQotICAgID4KLXN0cnVjdCBiaW5kCi0gICAgOiBCT09TVF9QUF9DQVQo
YmluZCxpXyk8RiBBVVg3NzgwNzZfQklORF9OX1BBUkFNUyhpXyxUKSA+Ci17Ci19OwotI2Vsc2UK
LXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgRiBBVVg3NzgwNzZfQklORF9OX1BBUkFNUyhpXywg
dHlwZW5hbWUgVCkgQVVYNzc4MDc2X0RNQ19QQVJBTSgpCi0gICAgPgotc3RydWN0IGJpbmQ8IEYg
QVVYNzc4MDc2X0JJTkRfTl9TUEVDX1BBUkFNUyhpXywgVCwgbmEpID4KLSAgICA6IEJPT1NUX1BQ
X0NBVChiaW5kLGlfKTxGIEFVWDc3ODA3Nl9CSU5EX05fUEFSQU1TKGlfLFQpID4KLXsKLX07Ci0j
ZW5kaWYKLQotIyAgIGVsc2UgLy8gQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpB
VElPTgotCi1uYW1lc3BhY2UgYXV4IHsKLQotdGVtcGxhdGU8Pgotc3RydWN0IGJpbmRfY2hvb3Nl
cjxpXz4KLXsKLSAgICB0ZW1wbGF0ZTwKLSAgICAgICAgICB0eXBlbmFtZSBGLCBBVVg3NzgwNzZf
QklORF9QQVJBTVModHlwZW5hbWUgVCkKLSAgICAgICAgPgotICAgIHN0cnVjdCByZXN1bHRfCi0g
ICAgewotICAgICAgICB0eXBlZGVmIEJPT1NUX1BQX0NBVChiaW5kLGlfKTwgRiBBVVg3NzgwNzZf
QklORF9OX1BBUkFNUyhpXyxUKSA+IHR5cGU7Ci0gICAgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IGF1eAotCi0jICAgZW5kaWYgLy8gQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpB
VElPTgotIyAgIGVuZGlmIC8vIEJPT1NUX01QTF9DRkdfTk9fQklORF9URU1QTEFURQotCi0jZW5k
aWYgLy8gQVVYNzc4MDc2X1NQRUNfTkFNRQotCi0jICAgdW5kZWYgaV8KLQotLy8vLy8gaXRlcmF0
aW9uLCBkZXB0aCA9PSAyCi0KLSNlbGlmIEJPT1NUX1BQX0lURVJBVElPTl9ERVBUSCgpID09IDIK
LQotIyAgIGRlZmluZSBqXyBCT09TVF9QUF9GUkFNRV9JVEVSQVRJT04oMikKLSMgICBpZiAhZGVm
aW5lZChCT09TVF9NUExfQ0ZHX05PX1VOTkFNRURfUExBQ0VIT0xERVJfU1VQUE9SVCkKLQotICAg
ICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgQk9PU1RfUFBfQ0FUKFQsal8p
LEJPT1NUX1BQX0NBVChuLGpfKSA+IEJPT1NUX1BQX0NBVChyLGpfKTsKLSAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBCT09TVF9QUF9DQVQocixqXyk6OnR5cGUgQk9PU1RfUFBfQ0FUKGEsal8pOwot
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEJPT1NUX1BQX0NBVChyLGpfKTo6bmV4dCBCT09TVF9Q
UF9DQVQobixCT09TVF9QUF9JTkMoal8pKTsKLSAgICAgICAgdHlwZWRlZiBhdXg6OnJlc29sdmVf
YmluZF9hcmc8Qk9PU1RfUFBfQ0FUKGEsal8pLCBBVVg3NzgwNzZfQklORF9QQVJBTVMoVSk+IEJP
T1NUX1BQX0NBVCh0LGpfKTsKLSAgICAgICAgLy8vCi0jICAgZWxzZQotICAgICAgICB0eXBlZGVm
IGF1eDo6cmVzb2x2ZV9iaW5kX2FyZzwgQk9PU1RfUFBfQ0FUKFQsal8pLEFVWDc3ODA3Nl9CSU5E
X1BBUkFNUyhVKT4gQk9PU1RfUFBfQ0FUKHQsal8pOwotCi0jICAgZW5kaWYKLSMgICB1bmRlZiBq
XwotCi0jZW5kaWYgLy8gQk9PU1RfUFBfSVRFUkFUSU9OX0RFUFRIKCkKLSNlbmRpZiAvLyBCT09T
VF9QUF9JU19JVEVSQVRJTkcKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC9iaW5kX2Z3ZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvYmluZF9md2QuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0NzQ2ZWRkNjBiM2M1YmJlZDdhYmQzN2JjODU4NmJhMTQyNTkzM2NlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9iaW5kX2Z3ZC5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSw5OSArMCwwIEBACi0KLSNpZiAhZGVmaW5lZChCT09TVF9QUF9JU19JVEVSQVRJTkcp
Ci0KLS8vLy8vIGhlYWRlciBib2R5Ci0KLSNpZm5kZWYgQk9PU1RfTVBMX0JJTkRfRldEX0hQUF9J
TkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQklORF9GV0RfSFBQX0lOQ0xVREVECi0KLS8vIENv
cHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3
dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0v
LyAkUmV2aXNpb24kCi0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RF
KQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hLmhwcD4KLSNlbmRpZgotCi0jaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2JpbmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9h
dXhfL2NvbmZpZy91c2VfcHJlcHJvY2Vzc2VkLmhwcD4KLQotI2lmICFkZWZpbmVkKEJPT1NUX01Q
TF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMpIFwKLSAgICAmJiAhZGVmaW5lZChCT09TVF9N
UExfUFJFUFJPQ0VTU0lOR19NT0RFKQotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9QUkVQUk9DRVNT
RURfSEVBREVSIGJpbmRfZndkLmhwcAotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2luY2x1
ZGVfcHJlcHJvY2Vzc2VkLmhwcD4KLQotI2Vsc2UKLQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9s
aW1pdHMvYXJpdHkuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nv
ci9wYXJhbXMuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9k
ZWZhdWx0X3BhcmFtcy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2Rt
Y19hbWJpZ3VvdXNfY3Rwcy5ocHA+Ci0KLSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3Iv
Y29tbWFfaWYuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9pdGVyYXRlLmhw
cD4KLSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcD4KLQotbmFtZXNwYWNl
IGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLS8vIGxvY2FsIG1hY3JvcywgI3VuZGVmLWluZWQg
YXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyCi0KLSMgICBpZiBkZWZpbmVkKEJPT1NUX01QTF9DRkdf
RE1DX0FNQklHVU9VU19DVFBTKQotIyAgICAgICBkZWZpbmUgQVVYNzc4MDc2X0RNQ19QQVJBTSgp
ICwgaW50IGR1bW15XyA9IDAKLSMgICBlbHNlCi0jICAgICAgIGRlZmluZSBBVVg3NzgwNzZfRE1D
X1BBUkFNKCkKLSMgICBlbmRpZgotCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9CSU5EX0RFRkFVTFRf
UEFSQU1TKHBhcmFtLCB2YWx1ZSkgXAotICAgIEJPT1NUX01QTF9QUF9ERUZBVUxUX1BBUkFNUygg
XAotICAgICAgICAgIEJPT1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkgXAotICAgICAg
ICAsIHBhcmFtIFwKLSAgICAgICAgLCB2YWx1ZSBcCi0gICAgICAgICkgXAotICAgIEFVWDc3ODA3
Nl9ETUNfUEFSQU0oKSBcCi0gICAgLyoqLwotCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9CSU5EX05f
UEFSQU1TKG4sIHBhcmFtKSBcCi0gICAgQk9PU1RfUFBfQ09NTUFfSUYobikgQk9PU1RfTVBMX1BQ
X1BBUkFNUyhuLCBwYXJhbSkgXAotICAgIEFVWDc3ODA3Nl9ETUNfUEFSQU0oKSBcCi0gICAgLyoq
LwotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19CSU5EX1RFTVBMQVRFKQotdGVtcGxh
dGU8Ci0gICAgICB0eXBlbmFtZSBGLCBBVVg3NzgwNzZfQklORF9ERUZBVUxUX1BBUkFNUyh0eXBl
bmFtZSBULCBuYSkKLSAgICA+Ci1zdHJ1Y3QgYmluZDsKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NU
X1BQX0lURVJBVElPTl9QQVJBTVNfMSBcCi0gICAgKDMsKDAsIEJPT1NUX01QTF9MSU1JVF9NRVRB
RlVOQ1RJT05fQVJJVFksIDxib29zdC9tcGwvYmluZF9md2QuaHBwPikpCi0jaW5jbHVkZSBCT09T
VF9QUF9JVEVSQVRFKCkKLQotIyAgIHVuZGVmIEFVWDc3ODA3Nl9CSU5EX05fUEFSQU1TCi0jICAg
dW5kZWYgQVVYNzc4MDc2X0JJTkRfREVGQVVMVF9QQVJBTVMKLSMgICB1bmRlZiBBVVg3NzgwNzZf
RE1DX1BBUkFNCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURf
SEVBREVSUwotI2VuZGlmIC8vIEJPT1NUX01QTF9CSU5EX0ZXRF9IUFBfSU5DTFVERUQKLQotLy8v
Ly8gaXRlcmF0aW9uCi0KLSNlbHNlCi0jZGVmaW5lIGlfIEJPT1NUX1BQX0ZSQU1FX0lURVJBVElP
TigxKQotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEYgQVVYNzc4MDc2X0JJTkRfTl9QQVJB
TVMoaV8sIHR5cGVuYW1lIFQpCi0gICAgPgotc3RydWN0IEJPT1NUX1BQX0NBVChiaW5kLGlfKTsK
LQotI3VuZGVmIGlfCi0jZW5kaWYgLy8gQk9PU1RfUFBfSVNfSVRFUkFUSU5HCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYml0YW5kLmhw
cCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9iaXRhbmQu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzMxYzc5Mjk1ODhjYTJiZTY0YTY4
NzI0ZGU2MzhhYzE5ZmFmN2MxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9i
aXRhbmQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NU
X01QTF9CSVRBTkRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9CSVRBTkRfSFBQX0lO
Q0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwOQotLy8gQ29w
eXJpZ2h0IEphYXAgU3V0ZXIgMjAwMwotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29z
dCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBm
aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcv
TElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21w
bCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24k
Ci0KLS8vIGFndXJ0LCAyMy9qYW4vMTA6IHdvcmthcm91bmQgYSBjb25mbGljdCB3aXRoIDxpc282
NDYuaD4gaGVhZGVyJ3MgCi0vLyBtYWNyb3MsIHNlZSBodHRwOi8vdGlueXVybC5jb20veWN3ZHhj
bzsgJ2RlZmluZWQoYml0YW5kKScKLS8vIGhhcyB0byBiZSBjaGVja2VkIGluIGEgc2VwYXJhdGUg
Y29uZGl0aW9uLCBvdGhlcndpc2UgR0NDIGNvbXBsYWlucyAKLS8vIGFib3V0ICdiaXRhbmQnIGJl
aW5nIGFuIGFsdGVybmF0aXZlIHRva2VuCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmlu
ZWQoX19jbGFuZ19fKQotI2lmbmRlZiBfX0dDQ1hNTF9fCi0jaWYgZGVmaW5lZChiaXRhbmQpCi0j
ICAgcHJhZ21hIHB1c2hfbWFjcm8oImJpdGFuZCIpCi0jICAgdW5kZWYgYml0YW5kCi0jICAgZGVm
aW5lIGJpdGFuZCh4KQotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIEFVWDc3ODA3
Nl9PUF9OQU1FICAgYml0YW5kXwotI2RlZmluZSBBVVg3NzgwNzZfT1BfUFJFRklYIGJpdGFuZAot
I2RlZmluZSBBVVg3NzgwNzZfT1BfVE9LRU4gICYKLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9h
cml0aG1ldGljX29wLmhwcD4KLQotI2lmIGRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9f
Y2xhbmdfXykKLSNpZm5kZWYgX19HQ0NYTUxfXwotI2lmIGRlZmluZWQoYml0YW5kKQotIyAgIHBy
YWdtYSBwb3BfbWFjcm8oImJpdGFuZCIpCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLSNlbmRp
ZiAvLyBCT09TVF9NUExfQklUQU5EX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2JpdHhvci5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYml0eG9yLmhwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y5OGYxNzM3MGEzMmM3MWYyZWI5OTNlYWI0MjFiZTYz
ODVlNzhlYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYml0eG9yLmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQklUWE9S
X0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQklUWE9SX0hQUF9JTkNMVURFRAotCi0v
LyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vIENvcHlyaWdodCBKYWFw
IFN1dGVyIDIwMDMKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUg
TGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNF
XzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3Vt
ZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jZGVmaW5l
IEFVWDc3ODA3Nl9PUF9OQU1FICAgYml0eG9yXwotI2RlZmluZSBBVVg3NzgwNzZfT1BfUFJFRklY
IGJpdHhvcgotI2RlZmluZSBBVVg3NzgwNzZfT1BfVE9LRU4gIF4KLSNpbmNsdWRlIDxib29zdC9t
cGwvYXV4Xy9hcml0aG1ldGljX29wLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9CSVRYT1Jf
SFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvYm9vbC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvYm9vbC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBh
NjE4MGNlZGYwYjQ2ZjM2NWE2MWE1YjM5NDA4N2ViMzUxMjRmODEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvbXBsL2Jvb2wuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBA
QAotCi0jaWZuZGVmIEJPT1NUX01QTF9CT09MX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9N
UExfQk9PTF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAw
MC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQp
Ci0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0
aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJv
b3N0L21wbC9ib29sX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2ludGVncmFsX2NfdGFn
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvc3RhdGljX2NvbnN0YW50Lmhw
cD4KLQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1FU1BBQ0VfT1BFTgotCi10ZW1wbGF0
ZTwgYm9vbCBDXyA+IHN0cnVjdCBib29sXwotewotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChi
b29sLCB2YWx1ZSA9IENfKTsKLSAgICB0eXBlZGVmIGludGVncmFsX2NfdGFnIHRhZzsKLSAgICB0
eXBlZGVmIGJvb2xfIHR5cGU7Ci0gICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7Ci0gICAgQk9P
U1RfQ09OU1RFWFBSIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiB0aGlzLT52YWx1ZTsg
fQotfTsKLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX0lOQ0xBU1NfTUVNQkVSX0lOSVRJQUxJWkFU
SU9OKQotdGVtcGxhdGU8IGJvb2wgQ18gPgotYm9vbCBjb25zdCBib29sXzxDXz46OnZhbHVlOwot
I2VuZGlmCi0KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFX0NMT1NFCi0KLSNl
bmRpZiAvLyBCT09TVF9NUExfQk9PTF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9ib29sX2Z3ZC5ocHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvYm9vbF9md2QuaHBwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjI5MjUyODQ4N2UzMDQ5MjM5ZDFjMTRkNzYy
YWI2OTEzY2ZmNmNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9ib29sX2Z3
ZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBM
X0JPT0xfRldEX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfQk9PTF9GV0RfSFBQX0lO
Q0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8v
IERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0
IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElk
JAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9h
ZGxfYmFycmllci5ocHA+Ci0KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFX09Q
RU4KLQotdGVtcGxhdGU8IGJvb2wgQ18gPiBzdHJ1Y3QgYm9vbF87Ci0KLS8vIHNob3JjdXRzCi10
eXBlZGVmIGJvb2xfPHRydWU+IHRydWVfOwotdHlwZWRlZiBib29sXzxmYWxzZT4gZmFsc2VfOwot
Ci1CT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRV9DTE9TRQotCi1CT09TVF9NUExf
QVVYX0FETF9CQVJSSUVSX0RFQ0woYm9vbF8pCi1CT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX0RF
Q0wodHJ1ZV8pCi1CT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX0RFQ0woZmFsc2VfKQotCi0jZW5k
aWYgLy8gQk9PU1RfTVBMX0JPT0xfRldEX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2NsZWFyLmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9jbGVhci5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2Yjk1ZWRmNGI3NTc2MTEwMTI3NjRmZWFjNGIzZjM1
OWNjNzE3YjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2NsZWFyLmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQ0xFQVJf
SFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9DTEVBUl9IUFBfSU5DTFVERUQKLQotLy8g
Q29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUg
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQK
LS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9jbGVhcl9md2QuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NsZWFyX2ltcGwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21w
bC9zZXF1ZW5jZV90YWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hX3NwZWMuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2xhbWJkYV9zdXBwb3J0LmhwcD4KLQotbmFtZXNw
YWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUg
Qk9PU1RfTVBMX0FVWF9OQV9QQVJBTShTZXF1ZW5jZSkKLSAgICA+Ci1zdHJ1Y3QgY2xlYXIKLSAg
ICA6IGNsZWFyX2ltcGw8IHR5cGVuYW1lIHNlcXVlbmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgot
ICAgICAgICA6OnRlbXBsYXRlIGFwcGx5PCBTZXF1ZW5jZSA+Ci17Ci0gICAgQk9PU1RfTVBMX0FV
WF9MQU1CREFfU1VQUE9SVCgxLGNsZWFyLChTZXF1ZW5jZSkpCi19OwotCi1CT09TVF9NUExfQVVY
X05BX1NQRUMoMSwgY2xlYXIpCi0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQ0xFQVJfSFBQ
X0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tcGwvY2xlYXJfZndkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L21wbC9jbGVhcl9md2QuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkMTRhMWQyYjI0ODdiZjU1YzMxYWUxNmUyZjNmN2IzMzY3YjM0NTgxLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9jbGVhcl9md2QuaHBwCisrKyAvZGV2L251bGwKQEAg
LTEsMjQgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9DTEVBUl9GV0RfSFBQX0lOQ0xVREVE
Ci0jZGVmaW5lIEJPT1NUX01QTF9DTEVBUl9GV0RfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdo
dCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2
aXNpb24kCi0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwg
dHlwZW5hbWUgVGFnID4gc3RydWN0IGNsZWFyX2ltcGw7Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgU2Vx
dWVuY2UgPiBzdHJ1Y3QgY2xlYXI7Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQ0xFQVJf
RldEX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvbXBsL2NvbXBhcmlzb24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2NvbXBhcmlzb24uaHBwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5OWRjYTlkZDgwOTUwMzY0MTJjMzkzNTQyYTkyYTYyMDRhMzBmYTI3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9jb21wYXJpc29uLmhwcAorKysgL2Rl
di9udWxsCkBAIC0xLDI0ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfQ09NUEFSSVNPTl9I
UFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0NPTVBBUklTT05fSFBQX0lOQ0xVREVECi0K
LS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAo
U2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERh
dGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvZXF1YWxfdG8uaHBwPgot
I2luY2x1ZGUgPGJvb3N0L21wbC9ub3RfZXF1YWxfdG8uaHBwPgotI2luY2x1ZGUgPGJvb3N0L21w
bC9sZXNzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvZ3JlYXRlci5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvbXBsL2xlc3NfZXF1YWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9ncmVhdGVyX2Vx
dWFsLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9DT01QQVJJU09OX0hQUF9JTkNMVURFRApk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L2NvbnRhaW5zLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L21wbC9jb250YWlucy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYzJhYTRm
OGJjZGFmNTlhZDQ5Y2Y2OTA4Nzc1NTI1NjJkYTVhZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2NvbnRhaW5zLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAK
LQotI2lmbmRlZiBCT09TVF9NUExfQ09OVEFJTlNfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NU
X01QTF9DT05UQUlOU19IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEVyaWMgRnJpZWRtYW4g
MjAwMgotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwNAotLy8KLS8vIERpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAo
U2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERh
dGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvY29udGFpbnNfZndkLmhw
cD4KLSNpbmNsdWRlIDxib29zdC9tcGwvc2VxdWVuY2VfdGFnLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9tcGwvYXV4Xy9jb250YWluc19pbXBsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9u
YV9zcGVjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9sYW1iZGFfc3VwcG9ydC5ocHA+
Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAgICAg
IHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oU2VxdWVuY2UpCi0gICAgLCB0eXBlbmFt
ZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKFQpCi0gICAgPgotc3RydWN0IGNvbnRhaW5zCi0gICAg
OiBjb250YWluc19pbXBsPCB0eXBlbmFtZSBzZXF1ZW5jZV90YWc8U2VxdWVuY2U+Ojp0eXBlID4K
LSAgICAgICAgOjp0ZW1wbGF0ZSBhcHBseTwgU2VxdWVuY2UsVCA+Ci17Ci0gICAgQk9PU1RfTVBM
X0FVWF9MQU1CREFfU1VQUE9SVCgyLGNvbnRhaW5zLChTZXF1ZW5jZSxUKSkKLX07Ci0KLUJPT1NU
X01QTF9BVVhfTkFfU1BFQygyLCBjb250YWlucykKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01Q
TF9DT05UQUlOU19IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9jb250YWluc19md2QuaHBwIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2NvbnRhaW5zX2Z3ZC5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YzY2NzI4NWRmY2QzNmIyM2ViNzI5MTA1ZWQ5Yjcw
ODUxZjgxZTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2NvbnRhaW5zX2Z3
ZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBM
X0NPTlRBSU5TX0ZXRF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0NPTlRBSU5TX0ZX
RF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEVyaWMgRnJpZWRtYW4gMjAwMgotLy8gQ29w
eXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2
aXNpb24kCi0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwg
dHlwZW5hbWUgVGFnID4gc3RydWN0IGNvbnRhaW5zX2ltcGw7Ci10ZW1wbGF0ZTwgdHlwZW5hbWUg
U2VxdWVuY2UsIHR5cGVuYW1lIFQgPiBzdHJ1Y3QgY29udGFpbnM7Ci0KLX19Ci0KLSNlbmRpZiAv
LyBCT09TVF9NUExfQ09OVEFJTlNfRldEX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2RlcmVmLmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9kZXJlZi5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMDVlYzkwMzhkOGQyYjAzYjhlMmUzMmZhMWUwZTg2
ZTk1ZjhhMzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2RlcmVmLmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfREVSRUZf
SFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9ERVJFRl9IUFBfSU5DTFVERUQKLQotLy8g
Q29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMi0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUg
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQK
LS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL21zdmNfdHlwZS5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbmFfc3BlYy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F1eF8vbGFtYmRhX3N1cHBvcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2Nv
bmZpZy9ldGkuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotdGVt
cGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKEl0ZXJhdG9yKQot
ICAgID4KLXN0cnVjdCBkZXJlZgotewotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTVNWQ183
MF9FVElfQlVHKQotICAgIHR5cGVkZWYgdHlwZW5hbWUgSXRlcmF0b3I6OnR5cGUgdHlwZTsKLSNl
bHNlCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6Om1zdmNfdHlwZTxJdGVyYXRvcj46OnR5cGUg
dHlwZTsKLSNlbmRpZgotICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlQoMSxkZXJlZiwo
SXRlcmF0b3IpKQotfTsKLQotQk9PU1RfTVBMX0FVWF9OQV9TUEVDKDEsIGRlcmVmKQotCi19fQot
Ci0jZW5kaWYgLy8gQk9PU1RfTVBMX0RFUkVGX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2Rpc3RhbmNlLmhwcCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9kaXN0YW5jZS5o
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZjRmMzM1MTBjMzY4MzczZjFmNTkz
OTBmNWRhMzQyMTU5MTUwOWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2Rp
c3RhbmNlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLQotI2lmbmRlZiBCT09T
VF9NUExfRElTVEFOQ0VfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9ESVNUQU5DRV9I
UFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0v
LwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNp
b24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8g
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0v
LyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9k
aXN0YW5jZV9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9pdGVyX2ZvbGQuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9pdGVyYXRvcl9yYW5nZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBs
L2xvbmcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9uZXh0LmhwcD4KLSNpbmNsdWRlIDxib29z
dC9tcGwvdGFnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXBwbHlfd3JhcC5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvbXBsL2F1eF8vbXN2Y19ldGlfYmFzZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F1eF8vdmFsdWVfd2tuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbmFfc3Bl
Yy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2ZvcndhcmRpbmcuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9zdGF0aWNfY29uc3RhbnQuaHBwPgotCi0K
LW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi0vLyBkZWZhdWx0IGltcGxlbWVu
dGF0aW9uIGZvciBmb3J3YXJkL2JpZGlyZWN0aW9uYWwgaXRlcmF0b3JzCi10ZW1wbGF0ZTwgdHlw
ZW5hbWUgVGFnID4gc3RydWN0IGRpc3RhbmNlX2ltcGwKLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5h
bWUgRmlyc3QsIHR5cGVuYW1lIExhc3QgPiBzdHJ1Y3QgYXBwbHkKLSNpZiAhZGVmaW5lZChCT09T
VF9NUExfQ0ZHX05PX05FU1RFRF9GT1JXQVJESU5HKQotICAgICAgICA6IGF1eDo6bXN2Y19ldGlf
YmFzZTwgdHlwZW5hbWUgaXRlcl9mb2xkPAotICAgICAgICAgICAgICBpdGVyYXRvcl9yYW5nZTxG
aXJzdCxMYXN0PgotICAgICAgICAgICAgLCBtcGw6OmxvbmdfPDA+Ci0gICAgICAgICAgICAsIG5l
eHQ8PgotICAgICAgICAgICAgPjo6dHlwZSA+Ci0gICAgewotI2Vsc2UKLSAgICB7Ci0gICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcl9mb2xkPAotICAgICAgICAgICAgICBpdGVyYXRvcl9yYW5n
ZTxGaXJzdCxMYXN0PgotICAgICAgICAgICAgLCBtcGw6OmxvbmdfPDA+Ci0gICAgICAgICAgICAs
IG5leHQ8PgotICAgICAgICAgICAgPjo6dHlwZSB0eXBlOwotICAgICAgICAKLSAgICAgICAgQk9P
U1RfU1RBVElDX0NPTlNUQU5UKGxvbmcsIHZhbHVlID0KLSAgICAgICAgICAgICAgKGl0ZXJfZm9s
ZDwKLSAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3JhbmdlPEZpcnN0LExhc3Q+Ci0gICAgICAg
ICAgICAgICAgLCBtcGw6OmxvbmdfPDA+Ci0gICAgICAgICAgICAgICAgLCBuZXh0PD4KLSAgICAg
ICAgICAgICAgICA+Ojp0eXBlOjp2YWx1ZSkKLSAgICAgICAgICAgICk7Ci0jZW5kaWYKLSAgICB9
OwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFN
KEZpcnN0KQotICAgICwgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShMYXN0KQotICAg
ID4KLXN0cnVjdCBkaXN0YW5jZQotICAgIDogZGlzdGFuY2VfaW1wbDwgdHlwZW5hbWUgdGFnPEZp
cnN0Pjo6dHlwZSA+Ci0gICAgICAgIDo6dGVtcGxhdGUgYXBwbHk8Rmlyc3QsIExhc3Q+Ci17Ci0g
ICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgyLCBkaXN0YW5jZSwgKEZpcnN0LCBMYXN0
KSkKLX07Ci0KLUJPT1NUX01QTF9BVVhfTkFfU1BFQygyLCBkaXN0YW5jZSkKLQotfX0KLQotI2Vu
ZGlmIC8vIEJPT1NUX01QTF9ESVNUQU5DRV9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9kaXN0YW5jZV9md2QuaHBw
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2Rpc3RhbmNl
X2Z3ZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OWE3YzUxNDBjOTVhZDNh
NGNhZmI0ZWE2OWQwMzliMzFmODFhMzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL2Rpc3RhbmNlX2Z3ZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0KLSNp
Zm5kZWYgQk9PU1RfTVBMX0RJU1RBTkNFX0ZXRF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1Rf
TVBMX0RJU1RBTkNFX0ZXRF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3Vy
dG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBk
b2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbW1vbl9uYW1lX3drbmQuaHBwPgotCi1uYW1lc3BhY2Ug
Ym9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotQk9PU1RfTVBMX0FVWF9DT01NT05fTkFNRV9XS05E
KGRpc3RhbmNlKQotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4gc3RydWN0IGRpc3RhbmNlX2lt
cGw7Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgRmlyc3QsIHR5cGVuYW1lIExhc3QgPiBzdHJ1Y3QgZGlz
dGFuY2U7Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfRElTVEFOQ0VfRldEX0hQUF9JTkNM
VURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvbXBsL2VtcHR5X2Z3ZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tcGwvZW1wdHlfZndkLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NTUxYzk2NjBhYmEwOGEyZjE4MGViMWVkZTdiMDhiMjU2NWNlN2ExZi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9tcGwvZW1wdHlfZndkLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0
ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfRU1QVFlfRldEX0hQUF9JTkNMVURFRAotI2Rl
ZmluZSBCT09TVF9NUExfRU1QVFlfRldEX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxl
a3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9v
c3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9t
cGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9u
JAotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8IHR5cGVu
YW1lIFRhZyA+IHN0cnVjdCBlbXB0eV9pbXBsOwotdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNl
ID4gc3RydWN0IGVtcHR5OwotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0VNUFRZX0ZXRF9I
UFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L21wbC9lcXVhbF90by5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvZXF1YWxfdG8uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1ZGZjODdkYmUyYWUzNjZmYjI3MTgzYzc4OTA4ODcyMzk5MGJhMGEyLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9lcXVhbF90by5ocHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyMSArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0VRVUFMX1RPX0hQUF9JTkNMVURFRAot
I2RlZmluZSBCT09TVF9NUExfRVFVQUxfVE9fSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBB
bGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBC
b29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5v
cmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJz
L21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNp
b24kCi0KLSNkZWZpbmUgQVVYNzc4MDc2X09QX05BTUUgZXF1YWxfdG8KLSNkZWZpbmUgQVVYNzc4
MDc2X09QX1RPS0VOID09Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29tcGFyaXNvbl9vcC5o
cHA+Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfRVFVQUxfVE9fSFBQX0lOQ0xVREVECmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvZXZhbF9p
Zi5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvZXZh
bF9pZi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OTI3MDNmZDg2YzcyOGEz
M2ZlMmJjZDFlZmEyYzEzMzZlMzNkZTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL2V2YWxfaWYuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotCi0jaWZuZGVm
IEJPT1NUX01QTF9FVkFMX0lGX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfRVZBTF9J
Rl9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0
Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZl
cnNpb24gMS4wLgotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8v
IFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQot
Ly8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwv
aWYuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hX3NwZWMuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L21wbC9hdXhfL2xhbWJkYV9zdXBwb3J0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwv
YXV4Xy9jb25maWcvbXN2Yy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2dj
Yy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3dvcmthcm91bmQuaHBwPgot
Ci1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8Ci0gICAgICB0
eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKEMpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9N
UExfQVVYX05BX1BBUkFNKEYxKQotICAgICwgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJB
TShGMikKLSAgICA+Ci1zdHJ1Y3QgZXZhbF9pZgotI2lmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1Rf
TVNWQywgPD0gMTMwMCkgXAotICAgICB8fCAoIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVBMX0NG
R19HQ0MsID49IDB4MDMwMCkgXAotICAgICAgICAmJiBCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01Q
TF9DRkdfR0NDLCBCT09TVF9URVNURURfQVQoMHgwMzA0KSkgXAotICAgICAgICApCi17Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBpZl88QyxGMSxGMj46OnR5cGUgZl87Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBmXzo6dHlwZSB0eXBlOwotI2Vsc2UKLSAgICA6IGlmXzxDLEYxLEYyPjo6dHlwZQotewot
I2VuZGlmCi0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgzLGV2YWxfaWYsKEMsRjEs
RjIpKQotfTsKLQotLy8gKGFsbW9zdCkgY29weSAmIHBhc3RlIGluIG9yZGVyIHRvIHNhdmUgb25l
IG1vcmUKLS8vIHJlY3Vyc2l2ZWx5IG5lc3RlZCB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uIHRvIHVz
ZXIKLXRlbXBsYXRlPAotICAgICAgYm9vbCBDCi0gICAgLCB0eXBlbmFtZSBGMQotICAgICwgdHlw
ZW5hbWUgRjIKLSAgICA+Ci1zdHJ1Y3QgZXZhbF9pZl9jCi0jaWYgQk9PU1RfV09SS0FST1VORChC
T09TVF9NU1ZDLCA8PSAxMzAwKSBcCi0gICAgIHx8ICggQk9PU1RfV09SS0FST1VORChCT09TVF9N
UExfQ0ZHX0dDQywgPj0gMHgwMzAwKSBcCi0gICAgICAgICYmIEJPT1NUX1dPUktBUk9VTkQoQk9P
U1RfTVBMX0NGR19HQ0MsIEJPT1NUX1RFU1RFRF9BVCgweDAzMDQpKSBcCi0gICAgICAgICkKLXsK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIGlmX2M8QyxGMSxGMj46OnR5cGUgZl87Ci0gICAgdHlwZWRl
ZiB0eXBlbmFtZSBmXzo6dHlwZSB0eXBlOwotI2Vsc2UKLSAgICA6IGlmX2M8QyxGMSxGMj46OnR5
cGUKLXsKLSNlbmRpZgotfTsKLQotQk9PU1RfTVBMX0FVWF9OQV9TUEVDKDMsIGV2YWxfaWYpCi0K
LX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfRVZBTF9JRl9IUFBfSU5DTFVERUQKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9maW5kLmhw
cCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9maW5kLmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFhOGIwZWI4OTdmNjE1ZjBjMjllNjUw
NTc3MzEzMDM2MDVjZDIxOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvZmlu
ZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBM
X0ZJTkRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9GSU5EX0hQUF9JTkNMVURFRAot
Ci0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDIKLS8vCi0vLyBEaXN0cmli
dXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8g
KFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0
dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3
dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICRE
YXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2ZpbmRfaWYuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L21wbC9zYW1lX2FzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4
Xy9uYV9zcGVjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9sYW1iZGFfc3VwcG9ydC5o
cHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAg
ICAgIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oU2VxdWVuY2UpCi0gICAgLCB0eXBl
bmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKFQpCi0gICAgPgotc3RydWN0IGZpbmQKLSAgICA6
IGZpbmRfaWY8IFNlcXVlbmNlLHNhbWVfYXM8VD4gPgotewotICAgIEJPT1NUX01QTF9BVVhfTEFN
QkRBX1NVUFBPUlQoMixmaW5kLChTZXF1ZW5jZSxUKSkKLX07Ci0KLUJPT1NUX01QTF9BVVhfTkFf
U1BFQygyLCBmaW5kKQotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0ZJTkRfSFBQX0lOQ0xV
REVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9tcGwvZmluZF9pZi5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9tcGwvZmluZF9pZi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYTAw
N2U3N2U2ODkzZDkxY2I2YTIwYjBjYjE1NmVlNDNhNjFiNjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvbXBsL2ZpbmRfaWYuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBA
QAotCi0jaWZuZGVmIEJPT1NUX01QTF9GSU5EX0lGX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09T
VF9NUExfRklORF9JRl9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92
b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1
bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1
ZGUgPGJvb3N0L21wbC9hdXhfL2ZpbmRfaWZfcHJlZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBs
L2FyZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2l0ZXJfZm9sZF9pZi5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8vY29tbW9uX25hbWVfd2tuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F1eF8vbmFfc3BlYy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbGFtYmRhX3N1
cHBvcnQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotQk9PU1Rf
TVBMX0FVWF9DT01NT05fTkFNRV9XS05EKGZpbmRfaWYpCi0KLXRlbXBsYXRlPAotICAgICAgdHlw
ZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShTZXF1ZW5jZSkKLSAgICAsIHR5cGVuYW1lIEJP
T1NUX01QTF9BVVhfTkFfUEFSQU0oUHJlZGljYXRlKQotICAgID4KLXN0cnVjdCBmaW5kX2lmCi17
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyX2ZvbGRfaWY8Ci0gICAgICAgICAgU2VxdWVuY2UK
LSAgICAgICAgLCB2b2lkCi0gICAgICAgICwgbXBsOjphcmc8MT4gLy8gaWdub3JlCi0gICAgICAg
ICwgcHJvdGVjdDwgYXV4OjpmaW5kX2lmX3ByZWQ8UHJlZGljYXRlPiA+Ci0gICAgICAgID46OnR5
cGUgcmVzdWx0XzsKLQotICAgIHR5cGVkZWYgdHlwZW5hbWUgc2Vjb25kPHJlc3VsdF8+Ojp0eXBl
IHR5cGU7Ci0KLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUKDIsZmluZF9pZiwoU2Vx
dWVuY2UsUHJlZGljYXRlKSkKLX07Ci0KLUJPT1NUX01QTF9BVVhfTkFfU1BFQygyLGZpbmRfaWYp
Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfRklORF9JRl9IUFBfSU5DTFVERUQKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9mb2xk
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9mb2xk
LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJjNjdlZjNkNjZlMjJlYWFhZmM4
ZDQ1YjY3MmQ0YWE0ZmJjOTg5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwv
Zm9sZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1Rf
TVBMX0ZPTERfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9GT0xEX0hQUF9JTkNMVURF
RAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAxLTIwMDQKLS8vIENvcHlyaWdo
dCBEYXZpZCBBYnJhaGFtcyAyMDAxLTIwMDIKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlz
aW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2JlZ2luX2VuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvbXBsL08xX3NpemUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2ZvbGRfaW1wbC5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbmFfc3BlYy5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvbXBsL2F1eF8vbGFtYmRhX3N1cHBvcnQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1l
c3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05B
X1BBUkFNKFNlcXVlbmNlKQotICAgICwgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShT
dGF0ZSkKLSAgICAsIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oRm9yd2FyZE9wKQot
ICAgID4KLXN0cnVjdCBmb2xkCi17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OmZvbGRfaW1w
bDwKLSAgICAgICAgICA6OmJvb3N0OjptcGw6Ok8xX3NpemU8U2VxdWVuY2U+Ojp2YWx1ZQotICAg
ICAgICAsIHR5cGVuYW1lIGJlZ2luPFNlcXVlbmNlPjo6dHlwZQotICAgICAgICAsIHR5cGVuYW1l
IGVuZDxTZXF1ZW5jZT46OnR5cGUKLSAgICAgICAgLCBTdGF0ZQotICAgICAgICAsIEZvcndhcmRP
cAotICAgICAgICA+OjpzdGF0ZSB0eXBlOwotCi0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQ
UE9SVCgzLGZvbGQsKFNlcXVlbmNlLFN0YXRlLEZvcndhcmRPcCkpCi19OwotCi1CT09TVF9NUExf
QVVYX05BX1NQRUMoMywgZm9sZCkKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9GT0xEX0hQ
UF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2Zyb250X2Z3ZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvZnJvbnRfZndkLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjAxMjgyYTc3YmJkZmNiMzk4MTJkNDI1YjMyM2ZjNDA2ZDgxMThiNy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvZnJvbnRfZndkLmhwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI0ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfRlJPTlRfRldEX0hQUF9JTkNMVURF
RAotI2RlZmluZSBCT09TVF9NUExfRlJPTlRfRldEX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmln
aHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0
aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJl
dmlzaW9uJAotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8
IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBmcm9udF9pbXBsOwotdGVtcGxhdGU8IHR5cGVuYW1lIFNl
cXVlbmNlID4gc3RydWN0IGZyb250OwotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0ZST05U
X0ZXRF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC9mcm9udF9pbnNlcnRlci5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvZnJvbnRfaW5zZXJ0ZXIuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTZiMTk3ZWY4MDk4ZWViZjI0OGI1ZDA2ODg0ZDgwOWJi
YTJmMzMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9mcm9udF9pbnNlcnRl
ci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBM
X0ZST05UX0lOU0VSVEVSX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfRlJPTlRfSU5T
RVJURVJfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDMt
MjAwNAotLy8gQ29weXJpZ2h0IERhdmlkIEFicmFoYW1zIDIwMDMtMjAwNAotLy8KLS8vIERpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0v
LyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8g
aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8g
JERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvcHVzaF9mcm9udC5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2luc2VydGVyLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0
IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgU2VxdWVuY2UK
LSAgICA+Ci1zdHJ1Y3QgZnJvbnRfaW5zZXJ0ZXIKLSAgICA6IGluc2VydGVyPCBTZXF1ZW5jZSxw
dXNoX2Zyb250PD4gPgotewotfTsKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9GUk9OVF9J
TlNFUlRFUl9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9ncmVhdGVyLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9ncmVhdGVyLmhwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjFmMGEyY2YxM2IxODU1YjA0MTRkODlhMTJkN2Q4N2VlZjBkN2ExMi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvZ3JlYXRlci5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMSArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0dSRUFURVJfSFBQX0lOQ0xV
REVECi0jZGVmaW5lIEJPT1NUX01QTF9HUkVBVEVSX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmln
aHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0
aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJl
dmlzaW9uJAotCi0jZGVmaW5lIEFVWDc3ODA3Nl9PUF9OQU1FIGdyZWF0ZXIKLSNkZWZpbmUgQVVY
Nzc4MDc2X09QX1RPS0VOID4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb21wYXJpc29uX29w
LmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9HUkVBVEVSX0hQUF9JTkNMVURFRApkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2dyZWF0
ZXJfZXF1YWwuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL2dyZWF0ZXJfZXF1YWwuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTA2
YTYyZThlNGVhZDAyMDg1NTAwNzU1ZjlmZDViNDYyZDcwNDUzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L21wbC9ncmVhdGVyX2VxdWFsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIx
ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfR1JFQVRFUl9FUVVBTF9IUFBfSU5DTFVERUQK
LSNkZWZpbmUgQk9PU1RfTVBMX0dSRUFURVJfRVFVQUxfSFBQX0lOQ0xVREVECi0KLS8vIENvcHly
aWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29t
cGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAk
UmV2aXNpb24kCi0KLSNkZWZpbmUgQVVYNzc4MDc2X09QX05BTUUgZ3JlYXRlcl9lcXVhbAotI2Rl
ZmluZSBBVVg3NzgwNzZfT1BfVE9LRU4gPj0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb21w
YXJpc29uX29wLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9HUkVBVEVSX0VRVUFMX0hQUF9J
TkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL2hhc194eHguaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2hhc194eHguaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
MmU2N2RkY2E0YzkwYmM2MzVmNzQzZDUxZjFmODgyZDZjMjg1NjQzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC9oYXNfeHh4LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDY0NyAr
MCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0hBU19YWFhfSFBQX0lOQ0xVREVECi0jZGVmaW5l
IEJPT1NUX01QTF9IQVNfWFhYX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBH
dXJ0b3ZveSAyMDAyLTIwMDYKLS8vIENvcHlyaWdodCBEYXZpZCBBYnJhaGFtcyAyMDAyLTIwMDMK
LS8vIENvcHlyaWdodCBEYW5pZWwgV2Fsa2VyIDIwMDcKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRl
ciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5v
cmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8g
JFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2Jvb2wuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L21wbC9hdXhfL25hX3NwZWMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3R5cGVf
d3JhcHBlci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8veWVzX25vLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvZ2NjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwv
YXV4Xy9jb25maWcvaGFzX3h4eC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmln
L21zdmNfdHlwZW5hbWUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9tc3Zj
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvc3RhdGljX2NvbnN0YW50Lmhw
cD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHA+Ci0KLSNp
bmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvYXJyYXkvZWxlbS5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvcHJlcHJvY2Vzc29yL2NhdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2Nv
bnRyb2wvaWYuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL2Vu
dW1fcGFyYW1zLmhwcD4KLSNpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvcmVwZXRpdGlvbi9l
bnVtX3RyYWlsaW5nX3BhcmFtcy5ocHA+Ci0KLSNpZiBCT09TVF9XT1JLQVJPVU5EKCBfX0JPUkxB
TkRDX18sIEJPT1NUX1RFU1RFRF9BVCgweDU5MCkgKQotIyBpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9pc19jbGFzcy5ocHA+Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdf
Tk9fSEFTX1hYWCkKLQotIyAgIGlmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPD0gMTMw
MCkKLQotLy8gYWd1cnQsIDExL3NlcC8wMjogTVNWQy1zcGVjaWZpYyB2ZXJzaW9uICg8IDcuMSks
IGJhc2VkIG9uIGEgVVNFTkVUIAotLy8gbmV3c2dyb3VwJ3MgcG9zdGluZyBieSBKb2huIE1hZHNl
biAoY29tcC5sYW5nLmMrKy5tb2RlcmF0ZWQsIAotLy8gMTk5OS0xMS0xMiAxOToxNzowNiBHTVQp
OyB0aGUgY29kZSBpcyBfbm90XyBzdGFuZGFyZC1jb25mb3JtaW5nLCBidXQgCi0vLyBpdCB3b3Jr
cyB3YXkgbW9yZSByZWxpYWJseSB0aGFuIHRoZSBTRklOQUUtYmFzZWQgaW1wbGVtZW50YXRpb24K
LQotLy8gTW9kaWZpZWQgZHdhIDgvT2N0LzAyIHRvIGhhbmRsZSByZWZlcmVuY2UgdHlwZXMuCi0K
LSMgICBpbmNsdWRlIDxib29zdC9tcGwvaWYuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9i
b29sLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBh
dXggewotCi1zdHJ1Y3QgaGFzX3h4eF90YWc7Ci0KLSNpZiBCT09TVF9XT1JLQVJPVU5EKEJPT1NU
X01TVkMsID09IDEzMDApCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVSA+IHN0cnVjdCBtc3ZjX2luY29t
cGxldGVfYXJyYXkKLXsKLSAgICB0eXBlZGVmIGNoYXIgKCZ0eXBlKVtzaXplb2YoVSkgKyAxXTsK
LX07Ci0jZW5kaWYKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFQgPgotc3RydWN0IG1zdmNfaXNfaW5j
b21wbGV0ZQotewotICAgIC8vIE1TVkMgaXMgY2FwYWJsZSBvZiBzb21lIGtpbmRzIG9mIFNGSU5B
RS4gIElmIFUgaXMgYW4gaW5jb21wbGV0ZQotICAgIC8vIHR5cGUsIGl0IHdvbid0IHBpY2sgdGhl
IHNlY29uZCBvdmVybG9hZAotICAgIHN0YXRpYyBjaGFyIHRlc3RlciguLi4pOwotCi0jaWYgQk9P
U1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA9PSAxMzAwKQotICAgIHRlbXBsYXRlPCB0eXBlbmFt
ZSBVID4KLSAgICBzdGF0aWMgdHlwZW5hbWUgbXN2Y19pbmNvbXBsZXRlX2FycmF5PFU+Ojp0eXBl
IHRlc3Rlcih0eXBlX3dyYXBwZXI8VT4pOwotI2Vsc2UKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUg
VSA+Ci0gICAgc3RhdGljIGNoYXIgKCYgdGVzdGVyKHR5cGVfd3JhcHBlcjxVPikgKVtzaXplb2Yo
VSkrMV07Ci0jZW5kaWYgCi0gICAgCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZh
bHVlID0gCi0gICAgICAgICAgc2l6ZW9mKHRlc3Rlcih0eXBlX3dyYXBwZXI8VD4oKSkpID09IDEK
LSAgICAgICAgKTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBtc3ZjX2lzX2luY29tcGxldGU8
aW50PgotewotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IGZhbHNlKTsK
LX07Ci0KLX19fQotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9IQVNfWFhYX1RSQUlUX05BTUVEX0RF
Rl8odHJhaXQsIG5hbWUsIGRlZmF1bHRfKSBcCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgdHlwZW5h
bWUgbmFtZSA9IDo6Ym9vc3Q6Om1wbDo6YXV4OjpoYXNfeHh4X3RhZyA+IFwKLXN0cnVjdCBCT09T
VF9QUF9DQVQodHJhaXQsX2ltcGwpIDogVCBcCi17IFwKLSAgICBzdGF0aWMgYm9vc3Q6Om1wbDo6
YXV4Ojpub190YWcgXAotICAgIHRlc3Qodm9pZCgqKSg6OmJvb3N0OjptcGw6OmF1eDo6aGFzX3h4
eF90YWcpKTsgXAotICAgIFwKLSAgICBzdGF0aWMgYm9vc3Q6Om1wbDo6YXV4Ojp5ZXNfdGFnIHRl
c3QoLi4uKTsgXAotICAgIFwKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUg
PSBcCi0gICAgICAgICAgc2l6ZW9mKHRlc3Qoc3RhdGljX2Nhc3Q8dm9pZCgqKShuYW1lKT4oMCkp
KSBcCi0gICAgICAgICAgICAhPSBzaXplb2YoYm9vc3Q6Om1wbDo6YXV4Ojpub190YWcpIFwKLSAg
ICAgICAgKTsgXAotICAgIHR5cGVkZWYgYm9vc3Q6Om1wbDo6Ym9vbF88dmFsdWU+IHR5cGU7IFwK
LX07IFwKLVwKLXRlbXBsYXRlPCB0eXBlbmFtZSBULCB0eXBlbmFtZSBmYWxsYmFja18gPSBib29z
dDo6bXBsOjpib29sXzxkZWZhdWx0Xz4gPiBcCi1zdHJ1Y3QgdHJhaXQgXAotICAgIDogYm9vc3Q6
Om1wbDo6aWZfYzwgXAotICAgICAgICAgIGJvb3N0OjptcGw6OmF1eDo6bXN2Y19pc19pbmNvbXBs
ZXRlPFQ+Ojp2YWx1ZSBcCi0gICAgICAgICwgYm9vc3Q6Om1wbDo6Ym9vbF88ZmFsc2U+IFwKLSAg
ICAgICAgLCBCT09TVF9QUF9DQVQodHJhaXQsX2ltcGwpPFQ+IFwKLSAgICAgICAgPjo6dHlwZSBc
Ci17IFwKLX07IFwKLVwKLUJPT1NUX01QTF9BVVhfSEFTX1hYWF9UUkFJVF9TUEVDKHRyYWl0LCB2
b2lkKSBcCi1CT09TVF9NUExfQVVYX0hBU19YWFhfVFJBSVRfU1BFQyh0cmFpdCwgYm9vbCkgXAot
Qk9PU1RfTVBMX0FVWF9IQVNfWFhYX1RSQUlUX1NQRUModHJhaXQsIGNoYXIpIFwKLUJPT1NUX01Q
TF9BVVhfSEFTX1hYWF9UUkFJVF9TUEVDKHRyYWl0LCBzaWduZWQgY2hhcikgXAotQk9PU1RfTVBM
X0FVWF9IQVNfWFhYX1RSQUlUX1NQRUModHJhaXQsIHVuc2lnbmVkIGNoYXIpIFwKLUJPT1NUX01Q
TF9BVVhfSEFTX1hYWF9UUkFJVF9TUEVDKHRyYWl0LCBzaWduZWQgc2hvcnQpIFwKLUJPT1NUX01Q
TF9BVVhfSEFTX1hYWF9UUkFJVF9TUEVDKHRyYWl0LCB1bnNpZ25lZCBzaG9ydCkgXAotQk9PU1Rf
TVBMX0FVWF9IQVNfWFhYX1RSQUlUX1NQRUModHJhaXQsIHNpZ25lZCBpbnQpIFwKLUJPT1NUX01Q
TF9BVVhfSEFTX1hYWF9UUkFJVF9TUEVDKHRyYWl0LCB1bnNpZ25lZCBpbnQpIFwKLUJPT1NUX01Q
TF9BVVhfSEFTX1hYWF9UUkFJVF9TUEVDKHRyYWl0LCBzaWduZWQgbG9uZykgXAotQk9PU1RfTVBM
X0FVWF9IQVNfWFhYX1RSQUlUX1NQRUModHJhaXQsIHVuc2lnbmVkIGxvbmcpIFwKLUJPT1NUX01Q
TF9BVVhfSEFTX1hYWF9UUkFJVF9TUEVDKHRyYWl0LCBmbG9hdCkgXAotQk9PU1RfTVBMX0FVWF9I
QVNfWFhYX1RSQUlUX1NQRUModHJhaXQsIGRvdWJsZSkgXAotQk9PU1RfTVBMX0FVWF9IQVNfWFhY
X1RSQUlUX1NQRUModHJhaXQsIGxvbmcgZG91YmxlKSBcCi0vKiovCi0KLSMgICBkZWZpbmUgQk9P
U1RfTVBMX0FVWF9IQVNfWFhYX1RSQUlUX1NQRUModHJhaXQsIFQpIFwKLXRlbXBsYXRlPD4gc3Ry
dWN0IHRyYWl0PFQ+IFwKLXsgXAotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1
ZSA9IGZhbHNlKTsgXAotICAgIHR5cGVkZWYgYm9vc3Q6Om1wbDo6Ym9vbF88ZmFsc2U+IHR5cGU7
IFwKLX07IFwKLS8qKi8KLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX0lOVFJJTlNJQ19XQ0hBUl9U
KQotIyAgIGRlZmluZSBCT09TVF9NUExfSEFTX1hYWF9UUkFJVF9OQU1FRF9ERUYodHJhaXQsIG5h
bWUsIHVudXNlZCkgXAotICAgIEJPT1NUX01QTF9IQVNfWFhYX1RSQUlUX05BTUVEX0RFRl8odHJh
aXQsIG5hbWUsIHVudXNlZCkgXAotICAgIEJPT1NUX01QTF9BVVhfSEFTX1hYWF9UUkFJVF9TUEVD
KHRyYWl0LCB3Y2hhcl90KSBcCi0vKiovCi0jZWxzZQotIyAgIGRlZmluZSBCT09TVF9NUExfSEFT
X1hYWF9UUkFJVF9OQU1FRF9ERUYodHJhaXQsIG5hbWUsIHVudXNlZCkgXAotICAgIEJPT1NUX01Q
TF9IQVNfWFhYX1RSQUlUX05BTUVEX0RFRl8odHJhaXQsIG5hbWUsIHVudXNlZCkgXAotLyoqLwot
I2VuZGlmCi0KLQotLy8gU0ZJTkFFLWJhc2VkIGltcGxlbWVudGF0aW9ucyBiZWxvdyBhcmUgZGVy
aXZlZCBmcm9tIGEgVVNFTkVUIG5ld3Nncm91cCdzIAotLy8gcG9zdGluZyBieSBSYW5pIFNoYXJv
bmkgKGNvbXAubGFuZy5jKysubW9kZXJhdGVkLCAyMDAyLTAzLTE3IDA3OjQ1OjA5IFBTVCkKLQot
IyAgIGVsaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8PSAxNDAwKSBcCi0gICAgICB8
fCAoQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCBCT09TVF9URVNURURfQVQoMTgwMCkpICYm
IGRlZmluZWQoX19DVURBQ0NfXykpIFwKLSAgICAgIHx8IEJPT1NUX1dPUktBUk9VTkQoX19JQk1D
UFBfXywgPD0gNzAwKQotCi0vLyBNU1ZDIDcuMSAmIE1TVkMgOC4wICYgVkFDUFAKLQotLy8gYWd1
cnQsIDE1L2p1bi8wNTogcmVwbGFjZSBvdmVybG9hZC1iYXNlZCBTRklOQUUgaW1wbGVtZW50YXRp
b24gd2l0aCBTRklOQUUKLS8vIGFwcGxpZWQgdG8gcGFydGlhbCBzcGVjaWFsaXphdGlvbiB0byBm
aXggc29tZSBhcHBhcmVudGx5IHJhbmRvbSBmYWlsdXJlcyAKLS8vICh0aGFua3MgdG8gRGFuaWVs
IFdhbGxpbiBmb3IgcmVzZWFyY2hpbmcgdGhpcyEpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0hB
U19YWFhfVFJBSVRfTkFNRURfREVGKHRyYWl0LCBuYW1lLCBkZWZhdWx0XykgXAotdGVtcGxhdGU8
IHR5cGVuYW1lIFQgPiBcCi1zdHJ1Y3QgQk9PU1RfUFBfQ0FUKHRyYWl0LCBfbXN2Y19zZmluYWVf
aGVscGVyKSBcCi17IFwKLSAgICB0eXBlZGVmIHZvaWQgdHlwZTsgXAotfTtcCi1cCi10ZW1wbGF0
ZTwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgVSA9IHZvaWQgPiBcCi1zdHJ1Y3QgQk9PU1RfUFBfQ0FU
KHRyYWl0LF9pbXBsXykgXAoteyBcCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZh
bHVlID0gZmFsc2UpOyBcCi0gICAgdHlwZWRlZiBib29zdDo6bXBsOjpib29sXzx2YWx1ZT4gdHlw
ZTsgXAotfTsgXAotXAotdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBcCi1zdHJ1Y3QgQk9PU1RfUFBf
Q0FUKHRyYWl0LF9pbXBsXyk8IFwKLSAgICAgIFQgXAotICAgICwgdHlwZW5hbWUgQk9PU1RfUFBf
Q0FUKHRyYWl0LCBfbXN2Y19zZmluYWVfaGVscGVyKTwgdHlwZW5hbWUgVDo6bmFtZSA+Ojp0eXBl
IFwKLSAgICA+IFwKLXsgXAotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9
IHRydWUpOyBcCi0gICAgdHlwZWRlZiBib29zdDo6bXBsOjpib29sXzx2YWx1ZT4gdHlwZTsgXAot
fTsgXAotXAotdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHR5cGVuYW1lIGZhbGxiYWNrXyA9IGJvb3N0
OjptcGw6OmJvb2xfPGRlZmF1bHRfPiA+IFwKLXN0cnVjdCB0cmFpdCBcCi0gICAgOiBCT09TVF9Q
UF9DQVQodHJhaXQsX2ltcGxfKTxUPiBcCi17IFwKLX07IFwKLS8qKi8KLQotIyAgIGVsaWYgQk9P
U1RfV09SS0FST1VORCggX19CT1JMQU5EQ19fLCBCT09TVF9URVNURURfQVQoMHg1OTApICkKLQot
IyAgIGRlZmluZSBCT09TVF9NUExfSEFTX1hYWF9UUkFJVF9OQU1FRF9CQ0JfREVGKHRyYWl0LCB0
cmFpdF90ZXN0ZXIsIG5hbWUsIGRlZmF1bHRfKSBcCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgYm9v
bCBJU19DTEFTUyA+IFwKLXN0cnVjdCB0cmFpdF90ZXN0ZXIgXAoteyBcCi0gICAgQk9PU1RfU1RB
VElDX0NPTlNUQU5UKCBib29sLCAgdmFsdWUgPSBmYWxzZSApOyBcCi19OyBcCi10ZW1wbGF0ZTwg
dHlwZW5hbWUgVCA+IFwKLXN0cnVjdCB0cmFpdF90ZXN0ZXI8IFQsIHRydWUgPiBcCi17IFwKLSAg
ICBzdHJ1Y3QgdHJhaXRfdGVzdGVyX2ltcGwgXAotICAgIHsgXAotICAgICAgICB0ZW1wbGF0ZSA8
IGNsYXNzIFUgPiBcCi0gICAgICAgIHN0YXRpYyBpbnQgIHJlc29sdmUoIGJvb3N0OjptcGw6OmF1
eDo6dHlwZV93cmFwcGVyPFU+IGNvbnN0IHZvbGF0aWxlICogXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCBib29zdDo6bXBsOjphdXg6OnR5cGVfd3JhcHBlcjx0eXBlbmFtZSBVOjpuYW1l
ID4qID0gMCApOyBcCi0gICAgICAgIHN0YXRpYyBjaGFyIHJlc29sdmUoIC4uLiApOyBcCi0gICAg
fTsgXAotICAgIHR5cGVkZWYgYm9vc3Q6Om1wbDo6YXV4Ojp0eXBlX3dyYXBwZXI8VD4gdF87IFwK
LSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoIGJvb2wsIHZhbHVlID0gKCBzaXplb2YoIHRyYWl0
X3Rlc3Rlcl9pbXBsOjpyZXNvbHZlKCBzdGF0aWNfY2FzdDwgdF8gKiA+KDApICkgKSA9PSBzaXpl
b2YoaW50KSApICk7IFwKLX07IFwKLXRlbXBsYXRlPCB0eXBlbmFtZSBULCB0eXBlbmFtZSBmYWxs
YmFja18gPSBib29zdDo6bXBsOjpib29sXzxkZWZhdWx0Xz4gPiBcCi1zdHJ1Y3QgdHJhaXQgICAg
ICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEJPT1NUX1NUQVRJQ19DT05T
VEFOVCggYm9vbCwgdmFsdWUgPSAodHJhaXRfdGVzdGVyPCBULCBib29zdDo6aXNfY2xhc3M8IFQg
Pjo6dmFsdWUgPjo6dmFsdWUpICk7ICAgICBcCi0gICAgdHlwZWRlZiBib29zdDo6bXBsOjpib29s
XzwgdHJhaXQ8IFQsIGZhbGxiYWNrXyA+Ojp2YWx1ZSA+IHR5cGU7IFwKLX07Ci0KLSMgICBkZWZp
bmUgQk9PU1RfTVBMX0hBU19YWFhfVFJBSVRfTkFNRURfREVGKHRyYWl0LCBuYW1lLCBkZWZhdWx0
XykgXAotICAgIEJPT1NUX01QTF9IQVNfWFhYX1RSQUlUX05BTUVEX0JDQl9ERUYoIHRyYWl0IFwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBCT09TVF9QUF9DQVQo
dHJhaXQsX3Rlc3RlcikgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgbmFtZSAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgZGVmYXVsdF8gKSBcCi0vKiovCi0KLSMgICBlbHNlIC8vIG90aGVyIFNGSU5BRS1j
YXBhYmxlIGNvbXBpbGVycwotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9IQVNfWFhYX1RSQUlUX05B
TUVEX0RFRih0cmFpdCwgbmFtZSwgZGVmYXVsdF8pIFwKLXRlbXBsYXRlPCB0eXBlbmFtZSBULCB0
eXBlbmFtZSBmYWxsYmFja18gPSBib29zdDo6bXBsOjpib29sXzxkZWZhdWx0Xz4gPiBcCi1zdHJ1
Y3QgdHJhaXQgXAoteyBcCi0gICAgc3RydWN0IGdjY18zXzJfd2tuZCBcCi0gICAgeyBcCi0gICAg
ICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBVID4gXAotICAgICAgICBzdGF0aWMgYm9vc3Q6Om1wbDo6
YXV4Ojp5ZXNfdGFnIHRlc3QoIFwKLSAgICAgICAgICAgICAgYm9vc3Q6Om1wbDo6YXV4Ojp0eXBl
X3dyYXBwZXI8VT4gY29uc3Qgdm9sYXRpbGUqIFwKLSAgICAgICAgICAgICwgYm9vc3Q6Om1wbDo6
YXV4Ojp0eXBlX3dyYXBwZXI8Qk9PU1RfTVNWQ19UWVBFTkFNRSBVOjpuYW1lPiogPSAwIFwKLSAg
ICAgICAgICAgICk7IFwKLSAgICBcCi0gICAgICAgIHN0YXRpYyBib29zdDo6bXBsOjphdXg6Om5v
X3RhZyB0ZXN0KC4uLik7IFwKLSAgICB9OyBcCi0gICAgXAotICAgIHR5cGVkZWYgYm9vc3Q6Om1w
bDo6YXV4Ojp0eXBlX3dyYXBwZXI8VD4gdF87IFwKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQo
Ym9vbCwgdmFsdWUgPSBcCi0gICAgICAgICAgc2l6ZW9mKGdjY18zXzJfd2tuZDo6dGVzdChzdGF0
aWNfY2FzdDx0Xyo+KDApKSkgXAotICAgICAgICAgICAgPT0gc2l6ZW9mKGJvb3N0OjptcGw6OmF1
eDo6eWVzX3RhZykgXAotICAgICAgICApOyBcCi0gICAgdHlwZWRlZiBib29zdDo6bXBsOjpib29s
Xzx2YWx1ZT4gdHlwZTsgXAotfTsgXAotLyoqLwotCi0jICAgZW5kaWYgLy8gQk9PU1RfV09SS0FS
T1VORChCT09TVF9NU1ZDLCA8PSAxMzAwKQotCi0KLSNlbHNlIC8vIEJPT1NUX01QTF9DRkdfTk9f
SEFTX1hYWAotCi0vLyBwbGFjZWhvbGRlciBpbXBsZW1lbnRhdGlvbgotCi0jICAgZGVmaW5lIEJP
T1NUX01QTF9IQVNfWFhYX1RSQUlUX05BTUVEX0RFRih0cmFpdCwgbmFtZSwgZGVmYXVsdF8pIFwK
LXRlbXBsYXRlPCB0eXBlbmFtZSBULCB0eXBlbmFtZSBmYWxsYmFja18gPSBib29zdDo6bXBsOjpi
b29sXzxkZWZhdWx0Xz4gPiBcCi1zdHJ1Y3QgdHJhaXQgXAoteyBcCi0gICAgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gZmFsbGJhY2tfOjp2YWx1ZSk7IFwKLSAgICB0eXBlZGVm
IGZhbGxiYWNrXyB0eXBlOyBcCi19OyBcCi0vKiovCi0KLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NU
X01QTF9IQVNfWFhYX1RSQUlUX0RFRihuYW1lKSBcCi0gICAgQk9PU1RfTVBMX0hBU19YWFhfVFJB
SVRfTkFNRURfREVGKEJPT1NUX1BQX0NBVChoYXNfLG5hbWUpLCBuYW1lLCBmYWxzZSkgXAotLyoq
LwotCi0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX0hBU19YWFhfVEVNUExBVEUpCi0K
LS8vIENyZWF0ZSBhIGJvb2xlYW4gTWV0YWZ1bmN0aW9uIHRvIGRldGVjdCBhIG5lc3RlZCB0ZW1w
bGF0ZQotLy8gbWVtYmVyLiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGEgVVNFTkVU
IG5ld3Nncm91cCdzCi0vLyBwb3N0aW5nIGJ5IEFsZWtzZXkgR3VydG92b3kgKGNvbXAubGFuZy5j
KysubW9kZXJhdGVkLCAyMDAyLTAzLTE5KSwKLS8vIFJhbmkgU2hhcm9uaSdzIFVTRU5FVCBwb3N0
aW5nIGNpdGVkIGFib3ZlLCB0aGUgbm9uLXRlbXBsYXRlIGhhc194eHgKLS8vIGltcGxlbWVudGF0
aW9ucyBhYm92ZSwgYW5kIGRpc2N1c3Npb24gb24gdGhlIEJvb3N0IG1haWxpbmcgbGlzdC4KLQot
IyAgIGlmICFkZWZpbmVkKEJPT1NUX01QTF9IQVNfWFhYX05PX1dSQVBQRURfVFlQRVMpCi0jICAg
ICBpZiBCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01TVkMsIDw9IDE0MDApCi0jICAgICAgIGRlZmlu
ZSBCT09TVF9NUExfSEFTX1hYWF9OT19XUkFQUEVEX1RZUEVTIDEKLSMgICAgIGVsc2UKLSMgICAg
ICAgZGVmaW5lIEJPT1NUX01QTF9IQVNfWFhYX05PX1dSQVBQRURfVFlQRVMgMAotIyAgICAgZW5k
aWYKLSMgICBlbmRpZgotCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfTVBMX0hBU19YWFhfTk9fRVhQ
TElDSVRfVEVTVF9GVU5DVElPTikKLSMgICAgIGlmIChkZWZpbmVkKEJPT1NUX05PX0VYUExJQ0lU
X0ZVTkNUSU9OX1RFTVBMQVRFX0FSR1VNRU5UUykpCi0jICAgICAgIGRlZmluZSBCT09TVF9NUExf
SEFTX1hYWF9OT19FWFBMSUNJVF9URVNUX0ZVTkNUSU9OIDEKLSMgICAgIGVsc2UKLSMgICAgICAg
ZGVmaW5lIEJPT1NUX01QTF9IQVNfWFhYX05PX0VYUExJQ0lUX1RFU1RfRlVOQ1RJT04gMAotIyAg
ICAgZW5kaWYKLSMgICBlbmRpZgotCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfTVBMX0hBU19YWFhf
TkVFRFNfVEVNUExBVEVfU0ZJTkFFKQotIyAgICAgaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9N
U1ZDLCA8PSAxNDAwKQotIyAgICAgICBkZWZpbmUgQk9PU1RfTVBMX0hBU19YWFhfTkVFRFNfVEVN
UExBVEVfU0ZJTkFFIDEKLSMgICAgIGVsc2UKLSMgICAgICAgZGVmaW5lIEJPT1NUX01QTF9IQVNf
WFhYX05FRURTX1RFTVBMQVRFX1NGSU5BRSAwCi0jICAgICBlbmRpZgotIyAgIGVuZGlmCi0KLS8v
IE5PVEU6IE1hbnkgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gbWFjcm9zIHRha2UgYSBCb29zdC5Q
cmVwcm9jZXNzb3IKLS8vIGFycmF5IGFyZ3VtZW50IGNhbGxlZCBhcmdzIHdoaWNoIGlzIG9mIHRo
ZSBmb2xsb3dpbmcgZm9ybS4KLS8vICAgICAgICAgICAoIDQsICggdHJhaXQsIG5hbWUsIG1heF9h
cml0eSwgZGVmYXVsdF8gKSApCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX0hBU19NRU1CRVJfSU5U
Uk9TUEVDVElPTl9OQU1FKGFyZ3MpIFwKLSAgICAgIEJPT1NUX1BQX0NBVChCT09TVF9QUF9BUlJB
WV9FTEVNKDAsIGFyZ3MpICwgX2ludHJvc3BlY3QpIFwKLSAgICAvKiovCi0KLSMgICBkZWZpbmUg
Qk9PU1RfTVBMX0hBU19NRU1CRVJfSU5UUk9TUEVDVElPTl9TVUJTVElUVVRFX05BTUUoYXJncywg
bikgXAotICAgICAgQk9PU1RfUFBfQ0FUKEJPT1NUX1BQX0NBVChCT09TVF9QUF9BUlJBWV9FTEVN
KDAsIGFyZ3MpICwgX3N1YnN0aXR1dGUpLCBuKSBcCi0gICAgLyoqLwotCi0jICAgZGVmaW5lIEJP
T1NUX01QTF9IQVNfTUVNQkVSX0lOVFJPU1BFQ1RJT05fVEVTVF9OQU1FKGFyZ3MpIFwKLSAgICAg
IEJPT1NUX1BQX0NBVChCT09TVF9QUF9BUlJBWV9FTEVNKDAsIGFyZ3MpICwgX3Rlc3QpIFwKLSAg
ICAvKiovCi0KLS8vIFRoYW5rcyB0byBHdWlsbGF1bWUgTWVscXVpb25kIGZvciBwb2ludGluZyBv
dXQgdGhlIG5lZWQgZm9yIHRoZQotLy8gInN1YnN0aXR1dGUiIHRlbXBsYXRlIGFzIGFuIGFyZ3Vt
ZW50IHRvIHRoZSBvdmVybG9hZGVkIHRlc3QKLS8vIGZ1bmN0aW9ucyB0byBnZXQgU0ZJTkFFIHRv
IHdvcmsgZm9yIG1lbWJlciB0ZW1wbGF0ZXMgd2l0aCB0aGUKLS8vIGNvcnJlY3QgbmFtZSBidXQg
ZGlmZmVyZW50IG51bWJlciBvZiBhcmd1bWVudHMuCi0jICAgZGVmaW5lIEJPT1NUX01QTF9IQVNf
TUVNQkVSX01VTFRJX1NVQlNUSVRVVEUoeiwgbiwgYXJncykgXAotICAgICAgdGVtcGxhdGU8IFwK
LSAgICAgICAgICB0ZW1wbGF0ZTwgQk9PU1RfUFBfRU5VTV9QQVJBTVMoQk9PU1RfUFBfSU5DKG4p
LCB0eXBlbmFtZSBWKSA+IGNsYXNzIFYgXAotICAgICAgID4gXAotICAgICAgc3RydWN0IEJPT1NU
X01QTF9IQVNfTUVNQkVSX0lOVFJPU1BFQ1RJT05fU1VCU1RJVFVURV9OQU1FKGFyZ3MsIG4pIHsg
XAotICAgICAgfTsgXAotICAgIC8qKi8KLQotIyAgIGRlZmluZSBCT09TVF9NUExfSEFTX01FTUJF
Ul9TVUJTVElUVVRFKGFyZ3MsIHN1YnN0aXR1dGVfbWFjcm8pIFwKLSAgICAgIEJPT1NUX1BQX1JF
UEVBVCggXAotICAgICAgICAgIEJPT1NUX1BQX0FSUkFZX0VMRU0oMiwgYXJncykgXAotICAgICAg
ICAsIEJPT1NUX01QTF9IQVNfTUVNQkVSX01VTFRJX1NVQlNUSVRVVEUgXAotICAgICAgICAsIGFy
Z3MgXAotICAgICAgKSBcCi0gICAgLyoqLwotCi0jICAgaWYgIUJPT1NUX01QTF9IQVNfWFhYX05P
X0VYUExJQ0lUX1RFU1RfRlVOQ1RJT04KLSMgICAgIGRlZmluZSBCT09TVF9NUExfSEFTX01FTUJF
Ul9SRUpFQ1QoYXJncywgbWVtYmVyX21hY3JvKSBcCi0gICAgICAgIHRlbXBsYXRlPCB0eXBlbmFt
ZSBWID4gXAotICAgICAgICBzdGF0aWMgYm9vc3Q6Om1wbDo6YXV4Ojpub190YWcgXAotICAgICAg
ICBCT09TVF9NUExfSEFTX01FTUJFUl9JTlRST1NQRUNUSU9OX1RFU1RfTkFNRShhcmdzKSguLi4p
OyBcCi0gICAgICAvKiovCi0jICAgZWxzZQotIyAgICAgZGVmaW5lIEJPT1NUX01QTF9IQVNfTUVN
QkVSX1JFSkVDVChhcmdzLCBtZW1iZXJfbWFjcm8pIFwKLSAgICAgICAgc3RhdGljIGJvb3N0Ojpt
cGw6OmF1eDo6bm9fdGFnIFwKLSAgICAgICAgQk9PU1RfTVBMX0hBU19NRU1CRVJfSU5UUk9TUEVD
VElPTl9URVNUX05BTUUoYXJncykoLi4uKTsgXAotICAgICAgLyoqLwotIyAgIGVuZGlmCi0KLSMg
ICBpZiAhQk9PU1RfTVBMX0hBU19YWFhfTk9fV1JBUFBFRF9UWVBFUwotIyAgICAgZGVmaW5lIEJP
T1NUX01QTF9IQVNfTUVNQkVSX01VTFRJX0FDQ0VQVCh6LCBuLCBhcmdzKSBcCi0gICAgICAgIHRl
bXBsYXRlPCB0eXBlbmFtZSBWID4gXAotICAgICAgICBzdGF0aWMgYm9vc3Q6Om1wbDo6YXV4Ojp5
ZXNfdGFnIFwKLSAgICAgICAgQk9PU1RfTVBMX0hBU19NRU1CRVJfSU5UUk9TUEVDVElPTl9URVNU
X05BTUUoYXJncykoIFwKLSAgICAgICAgICAgIGJvb3N0OjptcGw6OmF1eDo6dHlwZV93cmFwcGVy
PCBWID4gY29uc3Qgdm9sYXRpbGUqIFwKLSAgICAgICAgICAsIEJPT1NUX01QTF9IQVNfTUVNQkVS
X0lOVFJPU1BFQ1RJT05fU1VCU1RJVFVURV9OQU1FKGFyZ3MsIG4pIDwgXAotICAgICAgICAgICAg
ICAgIFY6OnRlbXBsYXRlIEJPT1NUX1BQX0FSUkFZX0VMRU0oMSwgYXJncykgXAotICAgICAgICAg
ICAgPiogPSAwIFwKLSAgICAgICAgKTsgXAotICAgICAgLyoqLwotIyAgICAgZGVmaW5lIEJPT1NU
X01QTF9IQVNfTUVNQkVSX0FDQ0VQVChhcmdzLCBtZW1iZXJfbWFjcm8pIFwKLSAgICAgICAgQk9P
U1RfUFBfUkVQRUFUKCBcCi0gICAgICAgICAgICBCT09TVF9QUF9BUlJBWV9FTEVNKDIsIGFyZ3Mp
IFwKLSAgICAgICAgICAsIEJPT1NUX01QTF9IQVNfTUVNQkVSX01VTFRJX0FDQ0VQVCBcCi0gICAg
ICAgICAgLCBhcmdzIFwKLSAgICAgICAgKSBcCi0gICAgICAvKiovCi0jICAgZWxzZQotIyAgICAg
ZGVmaW5lIEJPT1NUX01QTF9IQVNfTUVNQkVSX0FDQ0VQVChhcmdzLCBtZW1iZXJfbWFjcm8pIFwK
LSAgICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFYgPiBcCi0gICAgICAgIHN0YXRpYyBib29zdDo6
bXBsOjphdXg6Onllc190YWcgXAotICAgICAgICBCT09TVF9NUExfSEFTX01FTUJFUl9JTlRST1NQ
RUNUSU9OX1RFU1RfTkFNRShhcmdzKSggXAotICAgICAgICAgICAgViBjb25zdCB2b2xhdGlsZSog
XAotICAgICAgICAgICwgbWVtYmVyX21hY3JvKGFyZ3MsIFYsIFQpKiA9IDAgXAotICAgICAgICAp
OyBcCi0gICAgICAvKiovCi0jICAgZW5kaWYKLQotIyAgIGlmICFCT09TVF9NUExfSEFTX1hYWF9O
T19FWFBMSUNJVF9URVNUX0ZVTkNUSU9OCi0jICAgICBkZWZpbmUgQk9PU1RfTVBMX0hBU19NRU1C
RVJfVEVTVChhcmdzKSBcCi0gICAgICAgICAgc2l6ZW9mKEJPT1NUX01QTF9IQVNfTUVNQkVSX0lO
VFJPU1BFQ1RJT05fVEVTVF9OQU1FKGFyZ3MpPCBVID4oMCkpIFwKLSAgICAgICAgICAgICAgPT0g
c2l6ZW9mKGJvb3N0OjptcGw6OmF1eDo6eWVzX3RhZykgXAotICAgICAgLyoqLwotIyAgIGVsc2UK
LSMgICAgIGlmICFCT09TVF9NUExfSEFTX1hYWF9OT19XUkFQUEVEX1RZUEVTCi0jICAgICAgIGRl
ZmluZSBCT09TVF9NUExfSEFTX01FTUJFUl9URVNUKGFyZ3MpIFwKLSAgICAgICAgICBzaXplb2Yo
IFwKLSAgICAgICAgICAgICAgQk9PU1RfTVBMX0hBU19NRU1CRVJfSU5UUk9TUEVDVElPTl9URVNU
X05BTUUoYXJncykoIFwKLSAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PCBib29zdDo6bXBs
OjphdXg6OnR5cGVfd3JhcHBlcjwgVSA+KiA+KDApIFwKLSAgICAgICAgICAgICAgKSBcCi0gICAg
ICAgICAgKSA9PSBzaXplb2YoYm9vc3Q6Om1wbDo6YXV4Ojp5ZXNfdGFnKSBcCi0gICAgICAgIC8q
Ki8KLSMgICAgIGVsc2UKLSMgICAgICAgZGVmaW5lIEJPT1NUX01QTF9IQVNfTUVNQkVSX1RFU1Qo
YXJncykgXAotICAgICAgICAgIHNpemVvZiggXAotICAgICAgICAgICAgICBCT09TVF9NUExfSEFT
X01FTUJFUl9JTlRST1NQRUNUSU9OX1RFU1RfTkFNRShhcmdzKSggXAotICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8IFUqID4oMCkgXAotICAgICAgICAgICAgICApIFwKLSAgICAgICAgICAp
ID09IHNpemVvZihib29zdDo6bXBsOjphdXg6Onllc190YWcpIFwKLSAgICAgICAgLyoqLwotIyAg
ICAgZW5kaWYKLSMgICBlbmRpZgotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9IQVNfTUVNQkVSX0lO
VFJPU1BFQ1QoIFwKLSAgICAgICAgICAgICAgIGFyZ3MsIHN1YnN0aXR1dGVfbWFjcm8sIG1lbWJl
cl9tYWNybyBcCi0gICAgICAgICAgICkgXAotICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFUgPiBc
Ci0gICAgICBzdHJ1Y3QgQk9PU1RfTVBMX0hBU19NRU1CRVJfSU5UUk9TUEVDVElPTl9OQU1FKGFy
Z3MpIHsgXAotICAgICAgICAgIEJPT1NUX01QTF9IQVNfTUVNQkVSX1NVQlNUSVRVVEUoYXJncywg
c3Vic3RpdHV0ZV9tYWNybykgXAotICAgICAgICAgIEJPT1NUX01QTF9IQVNfTUVNQkVSX1JFSkVD
VChhcmdzLCBtZW1iZXJfbWFjcm8pIFwKLSAgICAgICAgICBCT09TVF9NUExfSEFTX01FTUJFUl9B
Q0NFUFQoYXJncywgbWVtYmVyX21hY3JvKSBcCi0gICAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKCBcCi0gICAgICAgICAgICAgIGJvb2wsIHZhbHVlID0gQk9PU1RfTVBMX0hBU19NRU1CRVJf
VEVTVChhcmdzKSBcCi0gICAgICAgICAgKTsgXAotICAgICAgICAgIHR5cGVkZWYgYm9vc3Q6Om1w
bDo6Ym9vbF88IHZhbHVlID4gdHlwZTsgXAotICAgICAgfTsgXAotICAgIC8qKi8KLQotIyAgIGRl
ZmluZSBCT09TVF9NUExfSEFTX01FTUJFUl9JTVBMRU1FTlRBVElPTiggXAotICAgICAgICAgICAg
ICAgYXJncywgaW50cm9zcGVjdF9tYWNybywgc3Vic3RpdHV0ZV9tYWNybywgbWVtYmVyX21hY3Jv
IFwKLSAgICAgICAgICAgKSBcCi0gICAgICB0ZW1wbGF0ZTwgXAotICAgICAgICAgIHR5cGVuYW1l
IFQgXAotICAgICAgICAsIHR5cGVuYW1lIGZhbGxiYWNrXyBcCi0gICAgICAgICAgICAgID0gYm9v
c3Q6Om1wbDo6Ym9vbF88IEJPT1NUX1BQX0FSUkFZX0VMRU0oMywgYXJncykgPiBcCi0gICAgICA+
IFwKLSAgICAgIGNsYXNzIEJPT1NUX1BQX0FSUkFZX0VMRU0oMCwgYXJncykgeyBcCi0gICAgICAg
ICAgaW50cm9zcGVjdF9tYWNybyhhcmdzLCBzdWJzdGl0dXRlX21hY3JvLCBtZW1iZXJfbWFjcm8p
IFwKLSAgICAgIHB1YmxpYzogXAotICAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlIFwK
LSAgICAgICAgICAgICAgPSBCT09TVF9NUExfSEFTX01FTUJFUl9JTlRST1NQRUNUSU9OX05BTUUo
YXJncyk8IFQgPjo6dmFsdWU7IFwKLSAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEJPT1NUX01Q
TF9IQVNfTUVNQkVSX0lOVFJPU1BFQ1RJT05fTkFNRShhcmdzKTwgXAotICAgICAgICAgICAgICBU
IFwKLSAgICAgICAgICA+Ojp0eXBlIHR5cGU7IFwKLSAgICAgIH07IFwKLSAgICAvKiovCi0KLS8v
IEJPT1NUX01QTF9IQVNfTUVNQkVSX1dJVEhfRlVOQ1RJT05fU0ZJTkFFIGV4cGFuZHMgdG8gdGhl
IGZ1bGwKLS8vIGltcGxlbWVudGF0aW9uIG9mIHRoZSBmdW5jdGlvbi1iYXNlZCBtZXRhZnVuY3Rp
b24uIENvbXBpbGUgd2l0aCAtRQotLy8gdG8gc2VlIHRoZSBwcmVwcm9jZXNzb3Igb3V0cHV0IGZv
ciB0aGlzIG1hY3JvLgotIyAgIGRlZmluZSBCT09TVF9NUExfSEFTX01FTUJFUl9XSVRIX0ZVTkNU
SU9OX1NGSU5BRSggXAotICAgICAgICAgICAgICAgYXJncywgc3Vic3RpdHV0ZV9tYWNybywgbWVt
YmVyX21hY3JvIFwKLSAgICAgICAgICAgKSBcCi0gICAgICBCT09TVF9NUExfSEFTX01FTUJFUl9J
TVBMRU1FTlRBVElPTiggXAotICAgICAgICAgIGFyZ3MgXAotICAgICAgICAsIEJPT1NUX01QTF9I
QVNfTUVNQkVSX0lOVFJPU1BFQ1QgXAotICAgICAgICAsIHN1YnN0aXR1dGVfbWFjcm8gXAotICAg
ICAgICAsIG1lbWJlcl9tYWNybyBcCi0gICAgICApIFwKLSAgICAvKiovCi0KLSMgICBpZiBCT09T
VF9NUExfSEFTX1hYWF9ORUVEU19URU1QTEFURV9TRklOQUUKLQotIyAgICAgaWYgIWRlZmluZWQo
Qk9PU1RfTVBMX0hBU19YWFhfTkVFRFNfTkFNRVNQQUNFX0xFVkVMX1NVQlNUSVRVVEUpCi0jICAg
ICAgIGlmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPD0gMTQwMCkKLSMgICAgICAgICBk
ZWZpbmUgQk9PU1RfTVBMX0hBU19YWFhfTkVFRFNfTkFNRVNQQUNFX0xFVkVMX1NVQlNUSVRVVEUg
MQotIyAgICAgICBlbmRpZgotIyAgICAgZW5kaWYKLQotIyAgICAgaWYgIUJPT1NUX01QTF9IQVNf
WFhYX05FRURTX05BTUVTUEFDRV9MRVZFTF9TVUJTVElUVVRFCi0jICAgICAgIGRlZmluZSBCT09T
VF9NUExfSEFTX01FTUJFUl9JTlRST1NQRUNUSU9OX1NVQlNUSVRVVEVfTkFNRV9XSVRIX1RFTVBM
QVRFX1NGSU5BRSggXAotICAgICAgICAgICAgICAgICAgIGFyZ3MsIG4gXAotICAgICAgICAgICAg
ICAgKSBcCi0gICAgICAgICAgQk9PU1RfTVBMX0hBU19NRU1CRVJfSU5UUk9TUEVDVElPTl9TVUJT
VElUVVRFX05BTUUoYXJncywgbikgXAotICAgICAgICAvKiovCi0jICAgICBlbHNlCi0jICAgICAg
IGRlZmluZSBCT09TVF9NUExfSEFTX01FTUJFUl9JTlRST1NQRUNUSU9OX1NVQlNUSVRVVEVfTkFN
RV9XSVRIX1RFTVBMQVRFX1NGSU5BRSggXAotICAgICAgICAgICAgICAgICAgIGFyZ3MsIG4gXAot
ICAgICAgICAgICAgICAgKSBcCi0gICAgICAgICAgQk9PU1RfUFBfQ0FUKCBcCi0gICAgICAgICAg
ICAgIGJvb3N0X21wbF9oYXNfeHh4XyBcCi0gICAgICAgICAgICAsIEJPT1NUX01QTF9IQVNfTUVN
QkVSX0lOVFJPU1BFQ1RJT05fU1VCU1RJVFVURV9OQU1FKGFyZ3MsIG4pIFwKLSAgICAgICAgICAp
IFwKLSAgICAgICAgLyoqLwotIyAgICAgZW5kaWYKLQotIyAgICAgZGVmaW5lIEJPT1NUX01QTF9I
QVNfTUVNQkVSX0lOVFJPU1BFQ1RJT05fU1VCU1RJVFVURV9UQUdfTkFNRSggXAotICAgICAgICAg
ICAgICAgICBhcmdzIFwKLSAgICAgICAgICAgICApIFwKLSAgICAgICAgQk9PU1RfUFBfQ0FUKCBc
Ci0gICAgICAgICAgICBCT09TVF9NUExfSEFTX01FTUJFUl9JTlRST1NQRUNUSU9OX1NVQlNUSVRV
VEVfTkFNRV9XSVRIX1RFTVBMQVRFX1NGSU5BRSggXAotICAgICAgICAgICAgICAgIGFyZ3MsIDAg
XAotICAgICAgICAgICAgKSBcCi0gICAgICAgICAgLCBfdGFnIFwKLSAgICAgICAgKSBcCi0gICAg
ICAvKiovCi0KLSMgICAgIGRlZmluZSBCT09TVF9NUExfSEFTX01FTUJFUl9NVUxUSV9TVUJTVElU
VVRFX1dJVEhfVEVNUExBVEVfU0ZJTkFFKCBcCi0gICAgICAgICAgICAgICAgIHosIG4sIGFyZ3Mg
XAotICAgICAgICAgICAgICkgXAotICAgICAgICB0ZW1wbGF0ZTwgXAotICAgICAgICAgICAgIHRl
bXBsYXRlPCBCT09TVF9QUF9FTlVNX1BBUkFNUyhCT09TVF9QUF9JTkMobiksIHR5cGVuYW1lIFUp
ID4gY2xhc3MgVSBcCi0gICAgICAgID4gXAotICAgICAgICBzdHJ1Y3QgQk9PU1RfTVBMX0hBU19N
RU1CRVJfSU5UUk9TUEVDVElPTl9TVUJTVElUVVRFX05BTUVfV0lUSF9URU1QTEFURV9TRklOQUUo
IFwKLSAgICAgICAgICAgICAgICBhcmdzLCBuIFwKLSAgICAgICAgICAgICAgICkgeyBcCi0gICAg
ICAgICAgICB0eXBlZGVmIFwKLSAgICAgICAgICAgICAgICBCT09TVF9NUExfSEFTX01FTUJFUl9J
TlRST1NQRUNUSU9OX1NVQlNUSVRVVEVfVEFHX05BTUUoYXJncykgXAotICAgICAgICAgICAgICAg
IHR5cGU7IFwKLSAgICAgICAgfTsgXAotICAgICAgLyoqLwotCi0jICAgICBkZWZpbmUgQk9PU1Rf
TVBMX0hBU19NRU1CRVJfU1VCU1RJVFVURV9XSVRIX1RFTVBMQVRFX1NGSU5BRSggXAotICAgICAg
ICAgICAgICAgICBhcmdzLCBzdWJzdGl0dXRlX21hY3JvIFwKLSAgICAgICAgICAgICApIFwKLSAg
ICAgICAgdHlwZWRlZiB2b2lkIFwKLSAgICAgICAgICAgIEJPT1NUX01QTF9IQVNfTUVNQkVSX0lO
VFJPU1BFQ1RJT05fU1VCU1RJVFVURV9UQUdfTkFNRShhcmdzKTsgXAotICAgICAgICBCT09TVF9Q
UF9SRVBFQVQoIFwKLSAgICAgICAgICAgIEJPT1NUX1BQX0FSUkFZX0VMRU0oMiwgYXJncykgXAot
ICAgICAgICAgICwgQk9PU1RfTVBMX0hBU19NRU1CRVJfTVVMVElfU1VCU1RJVFVURV9XSVRIX1RF
TVBMQVRFX1NGSU5BRSBcCi0gICAgICAgICAgLCBhcmdzIFwKLSAgICAgICAgKSBcCi0gICAgICAv
KiovCi0KLSMgICAgIGRlZmluZSBCT09TVF9NUExfSEFTX01FTUJFUl9SRUpFQ1RfV0lUSF9URU1Q
TEFURV9TRklOQUUoIFwKLSAgICAgICAgICAgICAgICAgYXJncywgbWVtYmVyX21hY3JvIFwKLSAg
ICAgICAgICAgICApIFwKLSAgICAgICAgdGVtcGxhdGU8IFwKLSAgICAgICAgICAgIHR5cGVuYW1l
IFUgXAotICAgICAgICAgICwgdHlwZW5hbWUgViBcCi0gICAgICAgICAgICAgICAgPSBCT09TVF9N
UExfSEFTX01FTUJFUl9JTlRST1NQRUNUSU9OX1NVQlNUSVRVVEVfVEFHX05BTUUoYXJncykgXAot
ICAgICAgICA+IFwKLSAgICAgICAgc3RydWN0IEJPT1NUX01QTF9IQVNfTUVNQkVSX0lOVFJPU1BF
Q1RJT05fVEVTVF9OQU1FKGFyZ3MpIHsgXAotICAgICAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGJvb2wsIHZhbHVlID0gZmFsc2UpOyBcCi0gICAgICAgICAgICB0eXBlZGVmIGJvb3N0Ojpt
cGw6OmJvb2xfPCB2YWx1ZSA+IHR5cGU7IFwKLSAgICAgICAgfTsgXAotICAgICAgLyoqLwotCi0j
ICAgICBkZWZpbmUgQk9PU1RfTVBMX0hBU19NRU1CRVJfTVVMVElfQUNDRVBUX1dJVEhfVEVNUExB
VEVfU0ZJTkFFKCBcCi0gICAgICAgICAgICAgICAgIHosIG4sIGFyZ3MgXAotICAgICAgICAgICAg
ICkgXAotICAgICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVSA+IFwKLSAgICAgICAgc3RydWN0IEJP
T1NUX01QTF9IQVNfTUVNQkVSX0lOVFJPU1BFQ1RJT05fVEVTVF9OQU1FKGFyZ3MpPCBcCi0gICAg
ICAgICAgICBVIFwKLSAgICAgICAgICAsIHR5cGVuYW1lIFwKLSAgICAgICAgICAgICAgICBCT09T
VF9NUExfSEFTX01FTUJFUl9JTlRST1NQRUNUSU9OX1NVQlNUSVRVVEVfTkFNRV9XSVRIX1RFTVBM
QVRFX1NGSU5BRSggXAotICAgICAgICAgICAgICAgICAgICBhcmdzLCBuIFwKLSAgICAgICAgICAg
ICAgICApPCBcCi0gICAgICAgICAgICAgICAgICAgIEJPT1NUX01TVkNfVFlQRU5BTUUgVTo6Qk9P
U1RfUFBfQVJSQVlfRUxFTSgxLCBhcmdzKTwgPiBcCi0gICAgICAgICAgICAgICAgPjo6dHlwZSBc
Ci0gICAgICAgID4geyBcCi0gICAgICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwg
dmFsdWUgPSB0cnVlKTsgXAotICAgICAgICAgICAgdHlwZWRlZiBib29zdDo6bXBsOjpib29sXzwg
dmFsdWUgPiB0eXBlOyBcCi0gICAgICAgIH07IFwKLSAgICAgIC8qKi8KLQotIyAgICAgZGVmaW5l
IEJPT1NUX01QTF9IQVNfTUVNQkVSX0FDQ0VQVF9XSVRIX1RFTVBMQVRFX1NGSU5BRSggXAotICAg
ICAgICAgICAgICAgICBhcmdzLCBtZW1iZXJfbWFjcm8gXAotICAgICAgICAgICAgICkgXAotICAg
ICAgICBCT09TVF9QUF9SRVBFQVQoIFwKLSAgICAgICAgICAgIEJPT1NUX1BQX0FSUkFZX0VMRU0o
MiwgYXJncykgXAotICAgICAgICAgICwgQk9PU1RfTVBMX0hBU19NRU1CRVJfTVVMVElfQUNDRVBU
X1dJVEhfVEVNUExBVEVfU0ZJTkFFIFwKLSAgICAgICAgICAsIGFyZ3MgXAotICAgICAgICApIFwK
LSAgICAgIC8qKi8KLQotIyAgICAgZGVmaW5lIEJPT1NUX01QTF9IQVNfTUVNQkVSX0lOVFJPU1BF
Q1RfV0lUSF9URU1QTEFURV9TRklOQUUoIFwKLSAgICAgICAgICAgICAgICAgYXJncywgc3Vic3Rp
dHV0ZV9tYWNybywgbWVtYmVyX21hY3JvIFwKLSAgICAgICAgICAgICApIFwKLSAgICAgICAgQk9P
U1RfTVBMX0hBU19NRU1CRVJfUkVKRUNUX1dJVEhfVEVNUExBVEVfU0ZJTkFFKGFyZ3MsIG1lbWJl
cl9tYWNybykgXAotICAgICAgICBCT09TVF9NUExfSEFTX01FTUJFUl9BQ0NFUFRfV0lUSF9URU1Q
TEFURV9TRklOQUUoYXJncywgbWVtYmVyX21hY3JvKSBcCi0gICAgICAgIHRlbXBsYXRlPCB0eXBl
bmFtZSBVID4gXAotICAgICAgICBzdHJ1Y3QgQk9PU1RfTVBMX0hBU19NRU1CRVJfSU5UUk9TUEVD
VElPTl9OQU1FKGFyZ3MpIFwKLSAgICAgICAgICAgIDogQk9PU1RfTVBMX0hBU19NRU1CRVJfSU5U
Uk9TUEVDVElPTl9URVNUX05BTUUoYXJncyk8IFUgPiB7IFwKLSAgICAgICAgfTsgXAotICAgICAg
LyoqLwotIAotLy8gQk9PU1RfTVBMX0hBU19NRU1CRVJfV0lUSF9URU1QTEFURV9TRklOQUUgZXhw
YW5kcyB0byB0aGUgZnVsbAotLy8gaW1wbGVtZW50YXRpb24gb2YgdGhlIHRlbXBsYXRlLWJhc2Vk
IG1ldGFmdW5jdGlvbi4gQ29tcGlsZSB3aXRoIC1FCi0vLyB0byBzZWUgdGhlIHByZXByb2Nlc3Nv
ciBvdXRwdXQgZm9yIHRoaXMgbWFjcm8uCi0vLwotLy8gTm90ZSB0aGF0IGlmIEJPT1NUX01QTF9I
QVNfWFhYX05FRURTX05BTUVTUEFDRV9MRVZFTF9TVUJTVElUVVRFIGlzCi0vLyBkZWZpbmVkIEJP
T1NUX01QTF9IQVNfTUVNQkVSX1NVQlNUSVRVVEVfV0lUSF9URU1QTEFURV9TRklOQUUgbmVlZHMK
LS8vIHRvIGJlIGV4cGFuZGVkIGF0IG5hbWVzcGFjZSBsZXZlbCBiZWZvcmUKLS8vIEJPT1NUX01Q
TF9IQVNfTUVNQkVSX1dJVEhfVEVNUExBVEVfU0ZJTkFFIGNhbiBiZSB1c2VkLgotIyAgICAgZGVm
aW5lIEJPT1NUX01QTF9IQVNfTUVNQkVSX1dJVEhfVEVNUExBVEVfU0ZJTkFFKCBcCi0gICAgICAg
ICAgICAgICAgIGFyZ3MsIHN1YnN0aXR1dGVfbWFjcm8sIG1lbWJlcl9tYWNybyBcCi0gICAgICAg
ICAgICAgKSBcCi0gICAgICAgIEJPT1NUX01QTF9IQVNfTUVNQkVSX1NVQlNUSVRVVEVfV0lUSF9U
RU1QTEFURV9TRklOQUUoIFwKLSAgICAgICAgICAgIGFyZ3MsIHN1YnN0aXR1dGVfbWFjcm8gXAot
ICAgICAgICApIFwKLSAgICAgICAgQk9PU1RfTVBMX0hBU19NRU1CRVJfSU1QTEVNRU5UQVRJT04o
IFwKLSAgICAgICAgICAgIGFyZ3MgXAotICAgICAgICAgICwgQk9PU1RfTVBMX0hBU19NRU1CRVJf
SU5UUk9TUEVDVF9XSVRIX1RFTVBMQVRFX1NGSU5BRSBcCi0gICAgICAgICAgLCBzdWJzdGl0dXRl
X21hY3JvIFwKLSAgICAgICAgICAsIG1lbWJlcl9tYWNybyBcCi0gICAgICAgICkgXAotICAgICAg
LyoqLwotCi0jICAgZW5kaWYgLy8gQk9PU1RfTVBMX0hBU19YWFhfTkVFRFNfVEVNUExBVEVfU0ZJ
TkFFCi0KLS8vIE5vdGU6IEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHRoZSBwYXJhbWV0
ZXIgYW5kIGFjY2VzcyBtYWNyb3MKLS8vIGFyZSBubyBsb25nZXIgZXhwYW5kZWQuCi0jICAgaWYg
IUJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPD0gMTQwMCkKLSMgICAgIGRlZmluZSBCT09T
VF9NUExfSEFTX1hYWF9URU1QTEFURV9OQU1FRF9ERUYodHJhaXQsIG5hbWUsIGRlZmF1bHRfKSBc
Ci0gICAgICAgIEJPT1NUX01QTF9IQVNfTUVNQkVSX1dJVEhfRlVOQ1RJT05fU0ZJTkFFKCBcCi0g
ICAgICAgICAgICAoIDQsICggdHJhaXQsIG5hbWUsIEJPT1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJ
T05fQVJJVFksIGRlZmF1bHRfICkgKSBcCi0gICAgICAgICAgLCBCT09TVF9NUExfSEFTX01FTUJF
Ul9URU1QTEFURV9TVUJTVElUVVRFX1BBUkFNRVRFUiBcCi0gICAgICAgICAgLCBCT09TVF9NUExf
SEFTX01FTUJFUl9URU1QTEFURV9BQ0NFU1MgXAotICAgICAgICApIFwKLSAgICAgIC8qKi8KLSMg
ICBlbHNlCi0jICAgICBkZWZpbmUgQk9PU1RfTVBMX0hBU19YWFhfVEVNUExBVEVfTkFNRURfREVG
KHRyYWl0LCBuYW1lLCBkZWZhdWx0XykgXAotICAgICAgICBCT09TVF9NUExfSEFTX01FTUJFUl9X
SVRIX1RFTVBMQVRFX1NGSU5BRSggXAotICAgICAgICAgICAgKCA0LCAoIHRyYWl0LCBuYW1lLCBC
T09TVF9NUExfTElNSVRfTUVUQUZVTkNUSU9OX0FSSVRZLCBkZWZhdWx0XyApICkgXAotICAgICAg
ICAgICwgQk9PU1RfTVBMX0hBU19NRU1CRVJfVEVNUExBVEVfU1VCU1RJVFVURV9QQVJBTUVURVIg
XAotICAgICAgICAgICwgQk9PU1RfTVBMX0hBU19NRU1CRVJfVEVNUExBVEVfQUNDRVNTIFwKLSAg
ICAgICAgKSBcCi0gICAgICAvKiovCi0jICAgZW5kaWYKLQotI2Vsc2UgLy8gQk9PU1RfTVBMX0NG
R19OT19IQVNfWFhYX1RFTVBMQVRFCi0KLS8vIHBsYWNlaG9sZGVyIGltcGxlbWVudGF0aW9uCi0K
LSMgICBkZWZpbmUgQk9PU1RfTVBMX0hBU19YWFhfVEVNUExBVEVfTkFNRURfREVGKHRyYWl0LCBu
YW1lLCBkZWZhdWx0XykgXAotICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQgXAotICAgICAgICAg
ICAgICAsIHR5cGVuYW1lIGZhbGxiYWNrXyA9IGJvb3N0OjptcGw6OmJvb2xfPCBkZWZhdWx0XyA+
ID4gXAotICAgICAgc3RydWN0IHRyYWl0IHsgXAotICAgICAgICAgIEJPT1NUX1NUQVRJQ19DT05T
VEFOVChib29sLCB2YWx1ZSA9IGZhbGxiYWNrXzo6dmFsdWUpOyBcCi0gICAgICAgICAgdHlwZWRl
ZiBmYWxsYmFja18gdHlwZTsgXAotICAgICAgfTsgXAotICAgIC8qKi8KLQotI2VuZGlmIC8vIEJP
T1NUX01QTF9DRkdfTk9fSEFTX1hYWF9URU1QTEFURQotCi0jICAgZGVmaW5lIEJPT1NUX01QTF9I
QVNfWFhYX1RFTVBMQVRFX0RFRihuYW1lKSBcCi0gICAgICBCT09TVF9NUExfSEFTX1hYWF9URU1Q
TEFURV9OQU1FRF9ERUYoIFwKLSAgICAgICAgICBCT09TVF9QUF9DQVQoaGFzXywgbmFtZSksIG5h
bWUsIGZhbHNlIFwKLSAgICAgICkgXAotICAgIC8qKi8KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9I
QVNfWFhYX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2lkZW50aXR5LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9pZGVudGl0eS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDE5MGQyZjUzZjZmN2E3NDcyMmI5NDY5YmNkNWFmY2RjNjVlM2Y0OGQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2lkZW50aXR5LmhwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ1ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfSURFTlRJVFlfSFBQX0lO
Q0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9JREVOVElUWV9IUFBfSU5DTFVERUQKLQotLy8gQ29w
eXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNj
b21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8v
ICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hX3NwZWMuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9hdXhfL2xhbWJkYV9zdXBwb3J0LmhwcD4KLQotbmFtZXNwYWNlIGJv
b3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgQk9PU1Rf
TVBMX0FVWF9OQV9QQVJBTShUKQotICAgID4KLXN0cnVjdCBpZGVudGl0eQotewotICAgIHR5cGVk
ZWYgVCB0eXBlOwotICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlQoMSwgaWRlbnRpdHks
IChUKSkKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9Q
QVJBTShUKQotICAgID4KLXN0cnVjdCBtYWtlX2lkZW50aXR5Ci17Ci0gICAgdHlwZWRlZiBpZGVu
dGl0eTxUPiB0eXBlOwotICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlQoMSwgbWFrZV9p
ZGVudGl0eSwgKFQpKQotfTsKLQotQk9PU1RfTVBMX0FVWF9OQV9TUEVDX05PX0VUSSgxLCBpZGVu
dGl0eSkKLUJPT1NUX01QTF9BVVhfTkFfU1BFQ19OT19FVEkoMSwgbWFrZV9pZGVudGl0eSkKLQot
fX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9JREVOVElUWV9IUFBfSU5DTFVERUQKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9pZi5ocHAg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvaWYuaHBwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmJkZjZjNjkyMjU4YjM1ZTgxMjZlOTVhOGYw
NjdiNTQzZThhYzA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9pZi5ocHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9JRl9I
UFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0lGX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5
cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRl
ciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5v
cmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8g
JFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vdmFsdWVfd2tuZC5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vc3RhdGljX2Nhc3QuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L21wbC9hdXhfL25hX3NwZWMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2xhbWJkYV9z
dXBwb3J0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvaW50ZWdyYWwuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9jdHBzLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9tcGwvYXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7
IG5hbWVzcGFjZSBtcGwgewotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVfUEFSVElB
TF9TUEVDSUFMSVpBVElPTikKLQotdGVtcGxhdGU8Ci0gICAgICBib29sIEMKLSAgICAsIHR5cGVu
YW1lIFQxCi0gICAgLCB0eXBlbmFtZSBUMgotICAgID4KLXN0cnVjdCBpZl9jCi17Ci0gICAgdHlw
ZWRlZiBUMSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMQotICAgICwg
dHlwZW5hbWUgVDIKLSAgICA+Ci1zdHJ1Y3QgaWZfYzxmYWxzZSxUMSxUMj4KLXsKLSAgICB0eXBl
ZGVmIFQyIHR5cGU7Ci19OwotCi0vLyBhZ3VydCwgMDUvc2VwLzA0OiBub25kZXNjcmlwdGl2ZSBw
YXJhbWV0ZXIgbmFtZXMgZm9yIHRoZSBzYWtlIG9mIERpZ2l0YWxNYXJzCi0vLyAoYW5kIHBvc3Np
Ymx5IE1XQ1cgPCA4LjApOyBzZWUgaHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmNvbXAu
bGliLmJvb3N0LmRldmVsLzEwODk1OQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09TVF9N
UExfQVVYX05BX1BBUkFNKFQxKQotICAgICwgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJB
TShUMikKLSAgICAsIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oVDMpCi0gICAgPgot
c3RydWN0IGlmXwotewotIHByaXZhdGU6Ci0gICAgLy8gYWd1cnQsIDAyL2phbi8wMzogdHdvLXN0
ZXAgJ3R5cGUnIGRlZmluaXRpb24gZm9yIHRoZSBzYWtlIG9mIGFDQyAKLSAgICB0eXBlZGVmIGlm
X2M8Ci0jaWYgZGVmaW5lZChCT09TVF9NUExfQ0ZHX0JDQ19JTlRFR1JBTF9DT05TVEFOVFMpCi0g
ICAgICAgICAgQk9PU1RfTVBMX0FVWF9WQUxVRV9XS05EKFQxKTo6dmFsdWUKLSNlbHNlCi0gICAg
ICAgICAgQk9PU1RfTVBMX0FVWF9TVEFUSUNfQ0FTVChib29sLCBCT09TVF9NUExfQVVYX1ZBTFVF
X1dLTkQoVDEpOjp2YWx1ZSkKLSNlbmRpZgotICAgICAgICAsIFQyCi0gICAgICAgICwgVDMKLSAg
ICAgICAgPiBhbG1vc3RfdHlwZV87Ci0gCi0gcHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUg
YWxtb3N0X3R5cGVfOjp0eXBlIHR5cGU7Ci0gICAgCi0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFf
U1VQUE9SVCgzLGlmXywoVDEsVDIsVDMpKQotfTsKLQotI2Vsc2UKLQotLy8gbm8gcGFydGlhbCBj
bGFzcyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbgotCi1uYW1lc3BhY2UgYXV4IHsKLQotdGVtcGxh
dGU8IGJvb2wgQyA+Ci1zdHJ1Y3QgaWZfaW1wbAotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBU
MSwgdHlwZW5hbWUgVDIgPiBzdHJ1Y3QgcmVzdWx0XwotICAgIHsKLSAgICAgICAgdHlwZWRlZiBU
MSB0eXBlOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgaWZfaW1wbDxmYWxzZT4K
LXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyID4gc3RydWN0IHJlc3Vs
dF8KLSAgICB7IAotICAgICAgICB0eXBlZGVmIFQyIHR5cGU7Ci0gICAgfTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIGF1eAotCi10ZW1wbGF0ZTwKLSAgICAgIGJvb2wgQ18KLSAgICAsIHR5cGVuYW1l
IFQxCi0gICAgLCB0eXBlbmFtZSBUMgotICAgID4KLXN0cnVjdCBpZl9jCi17Ci0gICAgdHlwZWRl
ZiB0eXBlbmFtZSBhdXg6OmlmX2ltcGw8IENfID4KLSAgICAgICAgOjp0ZW1wbGF0ZSByZXN1bHRf
PFQxLFQyPjo6dHlwZSB0eXBlOwotfTsKLQotLy8gKGFsbW9zdCkgY29weSAmIHBhc3RlIGluIG9y
ZGVyIHRvIHNhdmUgb25lIG1vcmUgCi0vLyByZWN1cnNpdmVseSBuZXN0ZWQgdGVtcGxhdGUgaW5z
dGFudGlhdGlvbiB0byB1c2VyCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9B
VVhfTkFfUEFSQU0oQ18pCi0gICAgLCB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKFQx
KQotICAgICwgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShUMikKLSAgICA+Ci1zdHJ1
Y3QgaWZfCi17Ci0gICAgZW51bSB7IG1zdmNfd2tuZF8gPSBCT09TVF9NUExfQVVYX01TVkNfVkFM
VUVfV0tORChDXyk6OnZhbHVlIH07Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6aWZfaW1w
bDwgQk9PU1RfTVBMX0FVWF9TVEFUSUNfQ0FTVChib29sLCBtc3ZjX3drbmRfKSA+Ci0gICAgICAg
IDo6dGVtcGxhdGUgcmVzdWx0XzxUMSxUMj46OnR5cGUgdHlwZTsKLQotICAgIEJPT1NUX01QTF9B
VVhfTEFNQkRBX1NVUFBPUlQoMyxpZl8sKENfLFQxLFQyKSkKLX07Ci0KLSNlbmRpZiAvLyBCT09T
VF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OCi0KLUJPT1NUX01QTF9BVVhfTkFf
U1BFQygzLCBpZl8pCi0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfSUZfSFBQX0lOQ0xVREVE
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
cGwvaW5zZXJ0ZXIuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvbXBsL2luc2VydGVyLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY0ZGY3
ZjY5MmFhYzRkMWY3YzhjMzM3MDk2MWJjMjA1N2MyNjQwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvaW5zZXJ0ZXIuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBA
QAotCi0jaWZuZGVmIEJPT1NUX01QTF9JTlNFUlRFUl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9P
U1RfTVBMX0lOU0VSVEVSX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0
b3ZveSAyMDAzLTIwMDQKLS8vIENvcHlyaWdodCBEYXZpZCBBYnJhaGFtcyAyMDAzLTIwMDQKLS8v
Ci0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lv
biAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29w
eSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBT
ZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8v
ICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1l
c3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBTZXF1ZW5jZQotICAgICwg
dHlwZW5hbWUgT3BlcmF0aW9uCi0gICAgPgotc3RydWN0IGluc2VydGVyCi17Ci0gICAgdHlwZWRl
ZiBTZXF1ZW5jZSAgICBzdGF0ZTsKLSAgICB0eXBlZGVmIE9wZXJhdGlvbiAgIG9wZXJhdGlvbjsK
LX07Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfSU5TRVJURVJfSFBQX0lOQ0xVREVECmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwv
aW50LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9p
bnQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2ZhMGE3NjVmNTJlYWU5Nzkw
MjE0Y2JmMzMxN2NhMjEzZGNkZjI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21w
bC9pbnQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NU
X01QTF9JTlRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9JTlRfSFBQX0lOQ0xVREVE
Ci0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0v
LyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8g
aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8g
JERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvaW50X2Z3ZC5ocHA+
Ci0KLSNkZWZpbmUgQVVYX1dSQVBQRVJfVkFMVUVfVFlQRSBpbnQKLSNpbmNsdWRlIDxib29zdC9t
cGwvYXV4Xy9pbnRlZ3JhbF93cmFwcGVyLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9JTlRf
SFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvaW50X2Z3ZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvaW50X2Z3ZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAzZDIwYzFjZDZmMjk4OWM1MDM5ZjBhNTE1ZmFlMzdlNjA2MzA0ZDIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2ludF9md2QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEs
MjcgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9JTlRfRldEX0hQUF9JTkNMVURFRAotI2Rl
ZmluZSBCT09TVF9NUExfSU5UX0ZXRF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtz
ZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBs
IGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQK
LQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2FkbF9iYXJyaWVyLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9tcGwvYXV4Xy9udHRwX2RlY2wuaHBwPgotCi1CT09TVF9NUExfQVVYX0FETF9CQVJSSUVS
X05BTUVTUEFDRV9PUEVOCi0KLXRlbXBsYXRlPCBCT09TVF9NUExfQVVYX05UVFBfREVDTChpbnQs
IE4pID4gc3RydWN0IGludF87Ci0KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNF
X0NMT1NFCi1CT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX0RFQ0woaW50XykKLQotI2VuZGlmIC8v
IEJPT1NUX01QTF9JTlRfRldEX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2ludGVncmFsX2MuaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2ludGVncmFsX2MuaHBwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTY5MmRjYWI2NDAxZDc5NjhkYmIxMmI1YjQ2
Y2UyYTU0ODA5MDYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9pbnRlZ3Jh
bF9jLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9N
UExfSU5URUdSQUxfQ19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0lOVEVHUkFMX0Nf
SFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNgot
Ly8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJz
aW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8v
IFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQot
Ly8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwv
aW50ZWdyYWxfY19md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9jdHBz
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvc3RhdGljX2NvbnN0YW50Lmhw
cD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHA+Ci0KLSNp
ZiBCT09TVF9XT1JLQVJPVU5EKF9fSFBfYUNDLCA8PSA1MzgwMCkKLS8vIHRoZSB0eXBlIG9mIG5v
bi10eXBlIHRlbXBsYXRlIGFyZ3VtZW50cyBtYXkgbm90IGRlcGVuZCBvbiB0ZW1wbGF0ZSBhcmd1
bWVudHMKLSMgICBkZWZpbmUgQVVYX1dSQVBQRVJfUEFSQU1TKE4pIHR5cGVuYW1lIFQsIGxvbmcg
TgotI2Vsc2UKLSMgICBkZWZpbmUgQVVYX1dSQVBQRVJfUEFSQU1TKE4pIHR5cGVuYW1lIFQsIFQg
TgotI2VuZGlmCi0KLSNkZWZpbmUgQVVYX1dSQVBQRVJfTkFNRSBpbnRlZ3JhbF9jCi0jZGVmaW5l
IEFVWF9XUkFQUEVSX1ZBTFVFX1RZUEUgVAotI2RlZmluZSBBVVhfV1JBUFBFUl9JTlNUKHZhbHVl
KSBBVVhfV1JBUFBFUl9OQU1FPCBULCB2YWx1ZSA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8v
aW50ZWdyYWxfd3JhcHBlci5ocHA+Ci0KLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRF
X1BBUlRJQUxfU1BFQ0lBTElaQVRJT04pIFwKLSAmJiAhQk9PU1RfV09SS0FST1VORChfX0JPUkxB
TkRDX18sIDw9IDB4NTUxKQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1FU1BBQ0VfT1BF
TgotLy8gJ2Jvb2wnIGNvbnN0YW50IGRvZXNuJ3QgaGF2ZSAnbmV4dCcvJ3ByaW9yJyBtZW1iZXJz
Ci10ZW1wbGF0ZTwgYm9vbCBDID4KLXN0cnVjdCBpbnRlZ3JhbF9jPGJvb2wsIEM+Ci17Ci0gICAg
Qk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gQyk7Ci0gICAgdHlwZWRlZiBpbnRl
Z3JhbF9jX3RhZyB0YWc7Ci0gICAgdHlwZWRlZiBpbnRlZ3JhbF9jIHR5cGU7Ci0gICAgdHlwZWRl
ZiBib29sIHZhbHVlX3R5cGU7Ci0gICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIHRo
aXMtPnZhbHVlOyB9Ci19OwotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1FU1BBQ0VfQ0xP
U0UKLSNlbmRpZgotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0lOVEVHUkFMX0NfSFBQX0lOQ0xVREVE
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
cGwvaW50ZWdyYWxfY19md2QuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2ludGVncmFsX2NfZndkLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDVlMzExZGFhMTgxZTJmYmE1MWRlNTlkZmExOGY5MjMyZTMwNDc1Yy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvaW50ZWdyYWxfY19md2QuaHBwCisrKyAvZGV2L251
bGwKQEAgLTEsMzIgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9JTlRFR1JBTF9DX0ZXRF9I
UFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0lOVEVHUkFMX0NfRldEX0hQUF9JTkNMVURF
RAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDYKLS8vCi0vLyBEaXN0
cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAot
Ly8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8v
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDov
L3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8v
ICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmln
L3dvcmthcm91bmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2FkbF9iYXJyaWVyLmhw
cD4KLQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1FU1BBQ0VfT1BFTgotCi0jaWYgQk9P
U1RfV09SS0FST1VORChfX0hQX2FDQywgPD0gNTM4MDApCi0vLyB0aGUgdHlwZSBvZiBub24tdHlw
ZSB0ZW1wbGF0ZSBhcmd1bWVudHMgbWF5IG5vdCBkZXBlbmQgb24gdGVtcGxhdGUgYXJndW1lbnRz
Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgbG9uZyBOID4gc3RydWN0IGludGVncmFsX2M7Ci0jZWxz
ZQotdGVtcGxhdGU8IHR5cGVuYW1lIFQsIFQgTiA+IHN0cnVjdCBpbnRlZ3JhbF9jOwotI2VuZGlm
Ci0KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFX0NMT1NFCi1CT09TVF9NUExf
QVVYX0FETF9CQVJSSUVSX0RFQ0woaW50ZWdyYWxfYykKLQotI2VuZGlmIC8vIEJPT1NUX01QTF9J
TlRFR1JBTF9DX0ZXRF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9pbnRlZ3JhbF9jX3RhZy5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvaW50ZWdyYWxfY190YWcuaHBw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjA0NjkyMGY4ZjEyYmU0OTRlZGMyNzZk
ODFmOThmN2E3MzRmZDI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9pbnRl
Z3JhbF9jX3RhZy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0KLSNpZm5kZWYg
Qk9PU1RfTVBMX0lOVEVHUkFMX0NfVEFHX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExf
SU5URUdSQUxfQ19UQUdfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRv
dm95IDIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50
YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0KLSNpbmNsdWRl
IDxib29zdC9tcGwvYXV4Xy9hZGxfYmFycmllci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1
eF8vY29uZmlnL3N0YXRpY19jb25zdGFudC5ocHA+Ci0KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJ
RVJfTkFNRVNQQUNFX09QRU4KLXN0cnVjdCBpbnRlZ3JhbF9jX3RhZyB7IEJPT1NUX1NUQVRJQ19D
T05TVEFOVChpbnQsIHZhbHVlID0gMCk7IH07Ci1CT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX05B
TUVTUEFDRV9DTE9TRQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9ERUNMKGludGVncmFsX2Nf
dGFnKQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0lOVEVHUkFMX0NfVEFHX0hQUF9JTkNMVURFRApk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L2l0ZXJfZm9sZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9tcGwvaXRlcl9mb2xkLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI1NmI3
OTA0MDUyMGNiZmRkNTM1NjQxOGZjMTNhYjk4ZTYyZWY2OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvaXRlcl9mb2xkLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAg
QEAKLQotI2lmbmRlZiBCT09TVF9NUExfSVRFUl9GT0xEX0hQUF9JTkNMVURFRAotI2RlZmluZSBC
T09TVF9NUExfSVRFUl9GT0xEX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBH
dXJ0b3ZveSAyMDAxLTIwMDQKLS8vIENvcHlyaWdodCBEYXZpZCBBYnJhaGFtcyAyMDAxLTIwMDIK
LS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVy
c2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0v
LyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0K
LS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBs
L2JlZ2luX2VuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL08xX3NpemUuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21wbC9sYW1iZGEuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2l0ZXJf
Zm9sZF9pbXBsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9uYV9zcGVjLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9tcGwvYXV4Xy9sYW1iZGFfc3VwcG9ydC5ocHA+Ci0KLW5hbWVzcGFjZSBi
b29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NU
X01QTF9BVVhfTkFfUEFSQU0oU2VxdWVuY2UpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9NUExfQVVY
X05BX1BBUkFNKFN0YXRlKQotICAgICwgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShG
b3J3YXJkT3ApCi0gICAgPgotc3RydWN0IGl0ZXJfZm9sZAotewotICAgIHR5cGVkZWYgdHlwZW5h
bWUgYXV4OjppdGVyX2ZvbGRfaW1wbDwKLSAgICAgICAgICA6OmJvb3N0OjptcGw6Ok8xX3NpemU8
U2VxdWVuY2U+Ojp2YWx1ZQotICAgICAgICAsIHR5cGVuYW1lIGJlZ2luPFNlcXVlbmNlPjo6dHlw
ZQotICAgICAgICAsIHR5cGVuYW1lIGVuZDxTZXF1ZW5jZT46OnR5cGUKLSAgICAgICAgLCBTdGF0
ZQotICAgICAgICAsIHR5cGVuYW1lIGxhbWJkYTxGb3J3YXJkT3A+Ojp0eXBlCi0gICAgICAgID46
OnN0YXRlIHR5cGU7Ci0KLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUKDMsaXRlcl9m
b2xkLChTZXF1ZW5jZSxTdGF0ZSxGb3J3YXJkT3ApKQotfTsKLQotQk9PU1RfTVBMX0FVWF9OQV9T
UEVDKDMsIGl0ZXJfZm9sZCkKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9JVEVSX0ZPTERf
SFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvaXRlcl9mb2xkX2lmLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9pdGVyX2ZvbGRfaWYuaHBwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMTE1YjdiMjI0NDJhNjY4MTA1YTk3YTg4ZWEzNmFiODU1ZjY5OTU0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9pdGVyX2ZvbGRfaWYuaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfSVRFUl9GT0xE
X0lGX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfSVRFUl9GT0xEX0lGX0hQUF9JTkNM
VURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAzLTIwMDQKLS8vIENvcHly
aWdodCBFcmljIEZyaWVkbWFuIDIwMDMKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9v
c3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9t
cGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9u
JAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2JlZ2luX2VuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2xvZ2ljYWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hbHdheXMuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21wbC9ldmFsX2lmLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvaWYuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L21wbC9wYWlyLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXBwbHku
aHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2l0ZXJfZm9sZF9pZl9pbXBsLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9tcGwvYXV4Xy9uYV9zcGVjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwv
YXV4Xy9sYW1iZGFfc3VwcG9ydC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmln
L2ZvcndhcmRpbmcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJv
dW5kLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgotCi1u
YW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotbmFtZXNwYWNlIGF1eCB7Ci0KLXRl
bXBsYXRlPCB0eXBlbmFtZSBQcmVkaWNhdGUsIHR5cGVuYW1lIExhc3RJdGVyYXRvciA+Ci1zdHJ1
Y3QgaXRlcl9mb2xkX2lmX3ByZWQKLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgU3RhdGUsIHR5
cGVuYW1lIEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5Ci0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NG
R19OT19ORVNURURfRk9SV0FSRElORykKLSAgICAgICAgOiBhbmRfPAotICAgICAgICAgICAgICBu
b3RfPCBpc19zYW1lPEl0ZXJhdG9yLExhc3RJdGVyYXRvcj4gPgotICAgICAgICAgICAgLCBhcHBs
eTE8UHJlZGljYXRlLEl0ZXJhdG9yPgotICAgICAgICAgICAgPgotICAgIHsKLSNlbHNlCi0gICAg
ewotICAgICAgICB0eXBlZGVmIGFuZF88Ci0gICAgICAgICAgICAgIG5vdF88IGlzX3NhbWU8SXRl
cmF0b3IsTGFzdEl0ZXJhdG9yPiA+Ci0gICAgICAgICAgICAsIGFwcGx5MTxQcmVkaWNhdGUsSXRl
cmF0b3I+Ci0gICAgICAgICAgICA+IHR5cGU7Ci0jZW5kaWYKLSAgICB9OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgYXV4Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9O
QV9QQVJBTShTZXF1ZW5jZSkKLSAgICAsIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0o
U3RhdGUpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKEZvcndhcmRPcCkK
LSAgICAsIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oRm9yd2FyZFByZWRpY2F0ZSkK
LSAgICAsIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oQmFja3dhcmRPcCkKLSAgICAs
IHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oQmFja3dhcmRQcmVkaWNhdGUpCi0gICAg
Pgotc3RydWN0IGl0ZXJfZm9sZF9pZgotewotCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBiZWdpbjxT
ZXF1ZW5jZT46OnR5cGUgZmlyc3RfOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgZW5kPFNlcXVlbmNl
Pjo6dHlwZSBsYXN0XzsKLQotICAgIHR5cGVkZWYgdHlwZW5hbWUgZXZhbF9pZjwKLSAgICAgICAg
ICBpc19uYTxCYWNrd2FyZFByZWRpY2F0ZT4KLSAgICAgICAgLCBpZl88IGlzX25hPEJhY2t3YXJk
T3A+LCBhbHdheXM8ZmFsc2VfPiwgYWx3YXlzPHRydWVfPiA+Ci0gICAgICAgICwgaWRlbnRpdHk8
QmFja3dhcmRQcmVkaWNhdGU+Ci0gICAgICAgID46OnR5cGUgYmFja3dhcmRfcHJlZF87Ci0KLS8v
IGN3cHJvOCBkb2Vzbid0IGxpa2UgJ2N1dC1vZmYnIHR5cGUgaGVyZSAodXNlIHR5cGVkZWYgaW5z
dGVhZCkKLSNpZiAhQk9PU1RfV09SS0FST1VORChfX01XRVJLU19fLCBCT09TVF9URVNURURfQVQo
MHgzMDAzKSkgJiYgIUJPT1NUX1dPUktBUk9VTkQoX19JQk1DUFBfXywgQk9PU1RfVEVTVEVEX0FU
KDYwMCkpCi0gICAgc3RydWN0IHJlc3VsdF8gOgotI2Vsc2UKLSAgICB0eXBlZGVmCi0jZW5kaWYK
LSAgICAgICAgYXV4OjppdGVyX2ZvbGRfaWZfaW1wbDwKLSAgICAgICAgICBmaXJzdF8KLSAgICAg
ICAgLCBTdGF0ZQotICAgICAgICAsIEZvcndhcmRPcAotICAgICAgICAsIHByb3RlY3Q8IGF1eDo6
aXRlcl9mb2xkX2lmX3ByZWQ8IEZvcndhcmRQcmVkaWNhdGUsbGFzdF8gPiA+Ci0gICAgICAgICwg
QmFja3dhcmRPcAotICAgICAgICAsIGJhY2t3YXJkX3ByZWRfCi0gICAgICAgID4KLSNpZiAhQk9P
U1RfV09SS0FST1VORChfX01XRVJLU19fLCBCT09TVF9URVNURURfQVQoMHgzMDAzKSkgJiYgIUJP
T1NUX1dPUktBUk9VTkQoX19JQk1DUFBfXywgQk9PU1RfVEVTVEVEX0FUKDYwMCkpCi0gICAgeyB9
OwotI2Vsc2UKLSAgICByZXN1bHRfOwotI2VuZGlmCi0KLXB1YmxpYzoKLQotICAgIHR5cGVkZWYg
cGFpcjwKLSAgICAgICAgICB0eXBlbmFtZSByZXN1bHRfOjpzdGF0ZQotICAgICAgICAsIHR5cGVu
YW1lIHJlc3VsdF86Oml0ZXJhdG9yCi0gICAgICAgID4gdHlwZTsKLQotICAgIEJPT1NUX01QTF9B
VVhfTEFNQkRBX1NVUFBPUlQoCi0gICAgICAgICAgNgotICAgICAgICAsIGl0ZXJfZm9sZF9pZgot
ICAgICAgICAsIChTZXF1ZW5jZSxTdGF0ZSxGb3J3YXJkT3AsRm9yd2FyZFByZWRpY2F0ZSxCYWNr
d2FyZE9wLEJhY2t3YXJkUHJlZGljYXRlKQotICAgICAgICApCi19OwotCi1CT09TVF9NUExfQVVY
X05BX1NQRUMoNiwgaXRlcl9mb2xkX2lmKQotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0lU
RVJfRk9MRF9JRl9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9pdGVyYXRvcl9yYW5nZS5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvaXRlcmF0b3JfcmFuZ2UuaHBwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjM3ZTIyNDFhNDEwOTEyNTcwN2Y3YWZkNzU0
MjRhM2ExYzRmNzQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9pdGVyYXRv
cl9yYW5nZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0KLSNpZm5kZWYgQk9P
U1RfTVBMX0lURVJBVE9SX1JBTkdFX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfSVRF
UkFUT1JfUkFOR0VfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95
IDIwMDEtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBM
aWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Vf
MV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAu
dHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1l
bnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRl
IDxib29zdC9tcGwvYXV4Xy9uYV9zcGVjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9s
YW1iZGFfc3VwcG9ydC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewot
Ci1zdHJ1Y3QgaXRlcmF0b3JfcmFuZ2VfdGFnOwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1l
IEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oRmlyc3QpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9NUExf
QVVYX05BX1BBUkFNKExhc3QpCi0gICAgPgotc3RydWN0IGl0ZXJhdG9yX3JhbmdlCi17Ci0gICAg
dHlwZWRlZiBpdGVyYXRvcl9yYW5nZV90YWcgdGFnOwotICAgIHR5cGVkZWYgaXRlcmF0b3JfcmFu
Z2UgdHlwZTsKLSAgICB0eXBlZGVmIEZpcnN0IGJlZ2luOwotICAgIHR5cGVkZWYgTGFzdCBlbmQ7
Ci0KLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUKDIsaXRlcmF0b3JfcmFuZ2UsKEZp
cnN0LExhc3QpKQotfTsKLQotQk9PU1RfTVBMX0FVWF9OQV9TUEVDKDIsIGl0ZXJhdG9yX3Jhbmdl
KQotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0lURVJBVE9SX1JBTkdFX0hQUF9JTkNMVURF
RApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL2l0ZXJhdG9yX3RhZ3MuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2l0ZXJhdG9yX3RhZ3MuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3YzMxMTZhYjQ1YmM2NmQ5ODMzNmM3MGFiZTRkMzEwNDhkNzdkNGI3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9pdGVyYXRvcl90YWdzLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI3ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfSVRFUkFUT1JfVEFHX0hQUF9J
TkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfSVRFUkFUT1JfVEFHX0hQUF9JTkNMVURFRAotCi0v
LyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNl
ZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5i
b29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRl
JAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2ludC5ocHA+Ci0KLW5hbWVz
cGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi1zdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90
YWcgICAgICAgOiBpbnRfPDA+IHsgdHlwZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB0eXBlOyB9
Owotc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogaW50XzwxPiB7IHR5cGVkZWYg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgdHlwZTsgfTsKLXN0cnVjdCByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZyA6IGludF88Mj4geyB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnIHR5cGU7IH07Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfSVRFUkFUT1JfVEFHX0hQ
UF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2xhbWJkYS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvbGFtYmRhLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Y2M4ZjYwNzVjZTUxZjliMjAyMzNjY2MwM2ZjYTkyYThiMGQ4ZTM0NC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9tcGwvbGFtYmRhLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICsw
LDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfTEFNQkRBX0hQUF9JTkNMVURFRAotI2RlZmluZSBC
T09TVF9NUExfTEFNQkRBX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0
b3ZveSAyMDAxLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdh
cmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRv
Y3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5j
bHVkZSA8Ym9vc3QvbXBsL2xhbWJkYV9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9iaW5k
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvbGFtYmRhLmhwcD4KLQotI2lm
ICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fRlVMTF9MQU1CREFfU1VQUE9SVCkKLSMgICBpbmNs
dWRlIDxib29zdC9tcGwvYXV4Xy9mdWxsX2xhbWJkYS5ocHA+Ci0jZWxzZQotIyAgIGluY2x1ZGUg
PGJvb3N0L21wbC9hdXhfL2xhbWJkYV9ub19jdHBzLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9t
cGwvYXV4Xy9sYW1iZGFfc3VwcG9ydC5ocHA+Ci0jICAgZGVmaW5lIEJPT1NUX01QTF9DRkdfTk9f
SU1QTElDSVRfTUVUQUZVTkNUSU9OUwotI2VuZGlmCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfTEFN
QkRBX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvbXBsL2xhbWJkYV9md2QuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xhbWJkYV9md2QuaHBwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1N2IwNDI2NDEwN2Q2Y2U1NzFkYjljYzNjY2U3YzgzNzFhZjQwZjAxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9sYW1iZGFfZndkLmhwcAorKysgL2Rl
di9udWxsCkBAIC0xLDU3ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfTEFNQkRBX0ZXRF9I
UFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0xBTUJEQV9GV0RfSFBQX0lOQ0xVREVECi0K
LS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDEtMjAwNAotLy8KLS8vIERpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAo
U2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERh
dGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvdm9pZF9md2QuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4
Xy9jb25maWcvbGFtYmRhLmhwcD4KLQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fRlVM
TF9MQU1CREFfU1VQUE9SVCkKLQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9pbnQuaHBwPgotIyAg
IGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2xhbWJkYV9hcml0eV9wYXJhbS5ocHA+Ci0jICAgaW5j
bHVkZSA8Ym9vc3QvbXBsL2F1eF8vdGVtcGxhdGVfYXJpdHlfZndkLmhwcD4KLQotbmFtZXNwYWNl
IGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPCAKLSAgICAgIHR5cGVuYW1lIFQg
PSBuYQotICAgICwgdHlwZW5hbWUgVGFnID0gdm9pZF8KLSAgICBCT09TVF9NUExfQVVYX0xBTUJE
QV9BUklUWV9QQVJBTSgKLSAgICAgICAgICB0eXBlbmFtZSBBcml0eSA9IGludF88IGF1eDo6dGVt
cGxhdGVfYXJpdHk8VD46OnZhbHVlID4KLSAgICAgICAgKQotICAgID4KLXN0cnVjdCBsYW1iZGE7
Ci0KLX19Ci0KLSNlbHNlIC8vIEJPT1NUX01QTF9DRkdfTk9fRlVMTF9MQU1CREFfU1VQUE9SVAot
Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2Jvb2wuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBu
YW1lc3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8IAotICAgICAgdHlwZW5hbWUgVCA9IG5hCi0gICAg
LCB0eXBlbmFtZSBUYWcgPSB2b2lkXwotICAgICwgdHlwZW5hbWUgUHJvdGVjdCA9IHRydWVfCi0g
ICAgPiAKLXN0cnVjdCBsYW1iZGE7Ci0KLX19Ci0KLSNlbmRpZgotCi0jZW5kaWYgLy8gQk9PU1Rf
TVBMX0xBTUJEQV9GV0RfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGVzcy5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGVzcy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDYzZGE1YWE0ZWZhM2VkZjZiMjFjNTU2OTg4YjkyNWNmZTA5OTc3MzQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xlc3MuaHBwCisrKyAvZGV2L251bGwK
QEAgLTEsMjEgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9MRVNTX0hQUF9JTkNMVURFRAot
I2RlZmluZSBCT09TVF9NUExfTEVTU19IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtz
ZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBs
IGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQK
LQotI2RlZmluZSBBVVg3NzgwNzZfT1BfTkFNRSBsZXNzCi0jZGVmaW5lIEFVWDc3ODA3Nl9PUF9U
T0tFTiA8Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29tcGFyaXNvbl9vcC5ocHA+Ci0KLSNl
bmRpZiAvLyBCT09TVF9NUExfTEVTU19IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9sZXNzX2VxdWFsLmhwcCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9sZXNzX2VxdWFsLmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q2NjhjMjc5MDc2ZTllMmU4ODg2MDI2
ZDgzMjRhMmI5MDAzOWQwYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGVz
c19lcXVhbC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0KLSNpZm5kZWYgQk9P
U1RfTVBMX0xFU1NfRVFVQUxfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9MRVNTX0VR
VUFMX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIw
MDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8v
Ci0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24u
Ci0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jZGVmaW5lIEFVWDc3ODA3
Nl9PUF9OQU1FIGxlc3NfZXF1YWwKLSNkZWZpbmUgQVVYNzc4MDc2X09QX1RPS0VOIDw9Ci0jaW5j
bHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29tcGFyaXNvbl9vcC5ocHA+Ci0KLSNlbmRpZiAvLyBCT09T
VF9NUExfTEVTU19FUVVBTF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9saW1pdHMvYXJpdHkuaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xpbWl0cy9hcml0eS5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjM2ViMzYyY2U3OTBjM2ZkYWE2MTJhMDhl
M2ZkMjM3MmNhMmQyYWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xpbWl0
cy9hcml0eS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0KLSNpZm5kZWYgQk9P
U1RfTVBMX0xJTUlUU19BUklUWV9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0xJTUlU
U19BUklUWV9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAw
MC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQp
Ci0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0
aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2lmICFkZWZpbmVk
KEJPT1NUX01QTF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkpCi0jICAgZGVmaW5lIEJPT1NUX01Q
TF9MSU1JVF9NRVRBRlVOQ1RJT05fQVJJVFkgNQotI2VuZGlmCi0KLSNlbmRpZiAvLyBCT09TVF9N
UExfTElNSVRTX0FSSVRZX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xpbWl0cy9saXN0LmhwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9saW1pdHMvbGlzdC5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMmQ2YTdiODEzNjhhM2RkOWNjZjEzYjFjOGQ0
YTIxNjJjNmFjNmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xpbWl0cy9s
aXN0LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9N
UExfTElNSVRTX0xJU1RfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9MSU1JVFNfTElT
VF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0
Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZl
cnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9y
IGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwot
Ly8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgot
Ci0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2lmICFkZWZpbmVkKEJPT1NU
X01QTF9MSU1JVF9MSVNUX1NJWkUpCi0jICAgZGVmaW5lIEJPT1NUX01QTF9MSU1JVF9MSVNUX1NJ
WkUgMjAKLSNlbmRpZgotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0xJTUlUU19MSVNUX0hQUF9JTkNM
VURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvbXBsL2xpbWl0cy92ZWN0b3IuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvbXBsL2xpbWl0cy92ZWN0b3IuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5MDA3NTg5MTY4Yzc3NDc2MDU4ODFkMjIxNTlkOTA2Yjc5ZGRhMjQzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9saW1pdHMvdmVjdG9yLmhwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDIxICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfTElNSVRTX1ZFQ1RPUl9I
UFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0xJTUlUU19WRUNUT1JfSFBQX0lOQ0xVREVE
Ci0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0v
LyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8g
aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8g
JERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfTElNSVRfVkVD
VE9SX1NJWkUpCi0jICAgZGVmaW5lIEJPT1NUX01QTF9MSU1JVF9WRUNUT1JfU0laRSAyMAotI2Vu
ZGlmCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfTElNSVRTX1ZFQ1RPUl9IUFBfSU5DTFVERUQKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9s
aXN0LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9s
aXN0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZmOGE0ZGRkOGE0ZjM3ZDBj
Y2RlZWRhY2RlYmM5NTY0NjFjNjViNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9t
cGwvbGlzdC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0KLSNpZm5kZWYgQk9P
U1RfTVBMX0xJU1RfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9MSVNUX0hQUF9JTkNM
VURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBE
aXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAu
IAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAK
LS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0
cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQK
LS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX1BSRVBS
T0NFU1NJTkdfTU9ERSkKLSMgICBpbmNsdWRlIDxib29zdC9tcGwvbGltaXRzL2xpc3QuaHBwPgot
IyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9t
cGwvYXV4Xy9jb25maWcvcHJlcHJvY2Vzc29yLmhwcD4KLQotIyAgIGluY2x1ZGUgPGJvb3N0L3By
ZXByb2Nlc3Nvci9pbmMuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQu
aHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9zdHJpbmdpemUuaHBwPgotCi0j
aWYgIWRlZmluZWQoQk9PU1RfTkVFRFNfVE9LRU5fUEFTVElOR19PUF9GT1JfVE9LRU5TX0pVWFRB
UE9TSU5HKQotIyAgIGRlZmluZSBBVVg3NzgwNzZfTElTVF9IRUFERVIgXAotICAgIEJPT1NUX1BQ
X0NBVChsaXN0LEJPT1NUX01QTF9MSU1JVF9MSVNUX1NJWkUpLmhwcCBcCi0gICAgLyoqLwotI2Vs
c2UKLSMgICBkZWZpbmUgQVVYNzc4MDc2X0xJU1RfSEVBREVSIFwKLSAgICBCT09TVF9QUF9DQVQo
bGlzdCxCT09TVF9NUExfTElNSVRfTElTVF9TSVpFKSMjLmhwcCBcCi0gICAgLyoqLwotI2VuZGlm
Ci0KLSMgICBpbmNsdWRlIEJPT1NUX1BQX1NUUklOR0laRShib29zdC9tcGwvbGlzdC9BVVg3Nzgw
NzZfTElTVF9IRUFERVIpCi0jICAgdW5kZWYgQVVYNzc4MDc2X0xJU1RfSEVBREVSCi0jZW5kaWYK
LQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy91c2VfcHJlcHJvY2Vzc2VkLmhwcD4K
LQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMpIFwK
LSAgICAmJiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotCi0jICAgZGVm
aW5lIEJPT1NUX01QTF9QUkVQUk9DRVNTRURfSEVBREVSIGxpc3QuaHBwCi0jICAgaW5jbHVkZSA8
Ym9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwPgotCi0jZWxzZQotCi0jICAg
aW5jbHVkZSA8Ym9vc3QvbXBsL2xpbWl0cy9saXN0LmhwcD4KLQotIyAgIGRlZmluZSBBVVg3Nzgw
NzZfU0VRVUVOQ0VfTkFNRSBsaXN0Ci0jICAgZGVmaW5lIEFVWDc3ODA3Nl9TRVFVRU5DRV9MSU1J
VCBCT09TVF9NUExfTElNSVRfTElTVF9TSVpFCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8v
c2VxdWVuY2Vfd3JhcHBlci5ocHA+Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQ0ZHX05PX1BSRVBS
T0NFU1NFRF9IRUFERVJTCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0xJU1RfSFBQX0lOQ0xVREVECmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwv
bGlzdC9hdXhfL08xX3NpemUuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2xpc3QvYXV4Xy9PMV9zaXplLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggY2NiYzNmMWIzMjBmMjg5MWEzZDg5MjQzZjI3ZjUwMjcyYTQ5ODU4Mi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGlzdC9hdXhfL08xX3NpemUuaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9MSVNUX0FVWF9P
MV9TSVpFX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfTElTVF9BVVhfTzFfU0laRV9I
UFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0v
LwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNp
b24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8g
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0v
LyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9P
MV9zaXplX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2xpc3QvYXV4Xy90YWcuaHBwPgot
Ci1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8Pgotc3RydWN0
IE8xX3NpemVfaW1wbDwgYXV4OjpsaXN0X3RhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1l
IExpc3QgPiBzdHJ1Y3QgYXBwbHkKLSAgICAgICAgOiBMaXN0OjpzaXplCi0gICAgewotICAgIH07
Ci19OwotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0xJU1RfQVVYX08xX1NJWkVfSFBQX0lO
Q0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9tcGwvbGlzdC9hdXhfL2JlZ2luX2VuZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGlzdC9hdXhfL2JlZ2luX2VuZC5ocHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NjhiZWUyMWMyMTJiMTMyOGU0OTA5Y2ViZDFlN2U5N2Ex
MTYzMzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xpc3QvYXV4Xy9iZWdp
bl9lbmQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NU
X01QTF9MSVNUX0FVWF9CRUdJTl9FTkRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9M
SVNUX0FVWF9CRUdJTl9FTkRfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1
cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0
d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3Ig
ZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNp
bmNsdWRlIDxib29zdC9tcGwvYmVnaW5fZW5kX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBs
L2xpc3QvYXV4Xy9pdGVyYXRvci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2xpc3QvYXV4Xy90
YWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9saXN0L2F1eF8vaXRlbS5ocHA+Ci0KLW5hbWVz
cGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgYmVnaW5f
aW1wbDwgYXV4OjpsaXN0X3RhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIExpc3QgPiBz
dHJ1Y3QgYXBwbHkKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgbF9pdGVyPHR5cGVuYW1lIExpc3Q6
OnR5cGU+IHR5cGU7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBlbmRfaW1wbDwg
YXV4OjpsaXN0X3RhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lID4gc3RydWN0IGFwcGx5
Ci0gICAgewotICAgICAgICB0eXBlZGVmIGxfaXRlcjxsX2VuZD4gdHlwZTsKLSAgICB9OwotfTsK
LQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9MSVNUX0FVWF9CRUdJTl9FTkRfSFBQX0lOQ0xV
REVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9tcGwvbGlzdC9hdXhfL2NsZWFyLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L21wbC9saXN0L2F1eF8vY2xlYXIuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiMTYxNjJmN2MwNzQ1YmZhMDVkNzdmOTY3MmNlNWU2NDI5M2JkZDJmLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9saXN0L2F1eF8vY2xlYXIuaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9MSVNUX0FVWF9D
TEVBUl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0xJU1RfQVVYX0NMRUFSX0hQUF9J
TkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0v
LyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUg
aHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJ
ZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2NsZWFy
X2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2xpc3QvYXV4Xy9pdGVtLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9tcGwvbGlzdC9hdXhfL3RhZy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5h
bWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgY2xlYXJfaW1wbDwgYXV4OjpsaXN0
X3RhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIExpc3QgPiBzdHJ1Y3QgYXBwbHkKLSAg
ICB7Ci0gICAgICAgIHR5cGVkZWYgbF9lbmQgdHlwZTsKLSAgICB9OwotfTsKLQotfX0KLQotI2Vu
ZGlmIC8vIEJPT1NUX01QTF9MSVNUX0FVWF9DTEVBUl9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9saXN0L2F1eF8v
ZW1wdHkuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L2xpc3QvYXV4Xy9lbXB0eS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1Zjky
NDM5NDdjOGE3YWNmZmVjNzhiYzI1ZjRhMjZkMmEwNDQ0N2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvbXBsL2xpc3QvYXV4Xy9lbXB0eS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
NCArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0xJU1RfQVVYX0VNUFRZX0hQUF9JTkNMVURF
RAotI2RlZmluZSBCT09TVF9NUExfTElTVF9BVVhfRU1QVFlfSFBQX0lOQ0xVREVECi0KLS8vIENv
cHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3
dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0v
LyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvZW1wdHlfZndkLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9tcGwvbm90LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvbGlzdC9hdXhfL3Rh
Zy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgZW1wdHlfaW1wbDwgYXV4OjpsaXN0X3RhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5
cGVuYW1lIExpc3QgPiBzdHJ1Y3QgYXBwbHkKLSAgICAgICAgOiBub3RfPHR5cGVuYW1lIExpc3Q6
OnNpemU+Ci0gICAgewotICAgIH07Ci19OwotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0xJ
U1RfQVVYX0VNUFRZX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xpc3QvYXV4Xy9mcm9udC5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGlzdC9hdXhfL2Zyb250Lmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJlYTFmZDM0MjZlY2RhMjlhNzc4ODli
NmQyNGU3YjM3MDg2NGNmZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGlz
dC9hdXhfL2Zyb250LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLQotI2lmbmRl
ZiBCT09TVF9NUExfTElTVF9BVVhfRlJPTlRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01Q
TF9MSVNUX0FVWF9GUk9OVF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3Vy
dG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBk
b2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9mcm9udF9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9saXN0
L2F1eF8vdGFnLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRl
bXBsYXRlPD4KLXN0cnVjdCBmcm9udF9pbXBsPCBhdXg6Omxpc3RfdGFnID4KLXsKLSAgICB0ZW1w
bGF0ZTwgdHlwZW5hbWUgTGlzdCA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBMaXN0OjppdGVtIHR5cGU7Ci0gICAgfTsKLX07Ci0KLX19Ci0KLSNlbmRpZiAv
LyBCT09TVF9NUExfTElTVF9BVVhfRlJPTlRfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGlzdC9hdXhfL2luY2x1
ZGVfcHJlcHJvY2Vzc2VkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9saXN0L2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0ZjdjYWIyNjA5MTdkYWNmZTEwNGNiYWY5MmRhMzZmZjFjYTk4
YWI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9saXN0L2F1eF8vaW5jbHVk
ZV9wcmVwcm9jZXNzZWQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotCi0vLyBD
b3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAxLTIwMDYKLS8vCi0vLyBEaXN0cmlidXRlZCB1
bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29z
dC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAot
Ly8gJFJldmlzaW9uJAotCi0vLyBOTyBJTkNMVURFIEdVQVJEUywgVEhFIEhFQURFUiBJUyBJTlRF
TkRFRCBGT1IgTVVMVElQTEUgSU5DTFVTSU9OIQotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8v
Y29uZmlnL3dvcmthcm91bmQuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2Nh
dC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3N0cmluZ2l6ZS5ocHA+Ci0KLSMg
ICBkZWZpbmUgQVVYNzc4MDc2X0hFQURFUiBcCi0gICAgYXV4Xy9wcmVwcm9jZXNzZWQvcGxhaW4v
Qk9PU1RfTVBMX1BSRVBST0NFU1NFRF9IRUFERVIgXAotLyoqLwotCi0jaWYgQk9PU1RfV09SS0FS
T1VORChfX0lCTUNQUF9fLCBCT09TVF9URVNURURfQVQoNzAwKSkKLSMgICBkZWZpbmUgQVVYNzc4
MDc2X0lOQ0xVREVfU1RSSU5HIEJPT1NUX1BQX1NUUklOR0laRShib29zdC9tcGwvbGlzdC9BVVg3
NzgwNzZfSEVBREVSKQotIyAgIGluY2x1ZGUgQVVYNzc4MDc2X0lOQ0xVREVfU1RSSU5HCi0jICAg
dW5kZWYgQVVYNzc4MDc2X0lOQ0xVREVfU1RSSU5HCi0jZWxzZQotIyAgIGluY2x1ZGUgQk9PU1Rf
UFBfU1RSSU5HSVpFKGJvb3N0L21wbC9saXN0L0FVWDc3ODA3Nl9IRUFERVIpCi0jZW5kaWYKLQot
IyAgIHVuZGVmIEFVWDc3ODA3Nl9IRUFERVIKLQotI3VuZGVmIEJPT1NUX01QTF9QUkVQUk9DRVNT
RURfSEVBREVSCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tcGwvbGlzdC9hdXhfL2l0ZW0uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xpc3QvYXV4Xy9pdGVtLmhwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggODUwNWRlYjI4NDgwMGViYjJhNjgxNmFlM2JkM2RmYzZlMDc4MjExOS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGlzdC9hdXhfL2l0ZW0uaHBwCisr
KyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9MSVNUX0FV
WF9OT0RFX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfTElTVF9BVVhfTk9ERV9IUFBf
SU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwot
Ly8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24g
MS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkg
YXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAk
SWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9sb25n
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvbGlzdC9hdXhfL3RhZy5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvbXBsL2F1eF8vY29uZmlnL21zdmMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhf
L2NvbmZpZy93b3JrYXJvdW5kLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1w
bCB7Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgU2l6ZQotICAgICwgdHlwZW5hbWUgVAot
ICAgICwgdHlwZW5hbWUgTmV4dAotICAgID4KLXN0cnVjdCBsX2l0ZW0KLXsKLS8vIGFndXJ0LCAx
Ny9qdWwvMDM6IHRvIGZhY2lsaXRhdGUgdGhlIGRlZmljaWVudCAnaXNfc2VxdWVuY2UnIGltcGxl
bWVudGF0aW9uIAotI2lmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPD0gMTMwMCkKLSAg
ICB0eXBlZGVmIGludCBiZWdpbjsKLSNlbmRpZgotICAgIHR5cGVkZWYgYXV4OjpsaXN0X3RhZyB0
YWc7Ci0gICAgdHlwZWRlZiBsX2l0ZW0gdHlwZTsKLQotICAgIHR5cGVkZWYgU2l6ZSBzaXplOwot
ICAgIHR5cGVkZWYgVCBpdGVtOwotICAgIHR5cGVkZWYgTmV4dCBuZXh0OwotfTsKLQotc3RydWN0
IGxfZW5kCi17Ci0jaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8PSAxMzAwKQotICAg
IHR5cGVkZWYgaW50IGJlZ2luOwotI2VuZGlmCi0gICAgdHlwZWRlZiBhdXg6Omxpc3RfdGFnIHRh
ZzsKLSAgICB0eXBlZGVmIGxfZW5kIHR5cGU7Ci0gICAgdHlwZWRlZiBsb25nXzwwPiBzaXplOwot
fTsKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9MSVNUX0FVWF9OT0RFX0hQUF9JTkNMVURF
RApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL2xpc3QvYXV4Xy9pdGVyYXRvci5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvbGlzdC9hdXhfL2l0ZXJhdG9yLmhwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNmI1ZWE3ODYzMDU3ZDNiNzdjZTI3ZTcxMDYyMzMyMmI0ZDczMWFmMC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGlzdC9hdXhfL2l0ZXJhdG9yLmhw
cAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfTElT
VF9BVVhfSVRFUkFUT1JfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9MSVNUX0FVWF9J
VEVSQVRPUl9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAw
MC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQp
Ci0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0
aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJv
b3N0L21wbC9pdGVyYXRvcl90YWdzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvbmV4dF9wcmlv
ci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2RlcmVmLmhwcD4KLSNpbmNsdWRlIDxib29zdC9t
cGwvbGlzdC9hdXhfL2l0ZW0uaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hLmhwcD4K
LSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9sYW1iZGFfc3BlYy5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvbXBsL2F1eF8vY29uZmlnL2N0cHMuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3Bh
Y2UgbXBsIHsKLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lB
TElaQVRJT04pCi0KLXRlbXBsYXRlPCB0eXBlbmFtZSBOb2RlID4KLXN0cnVjdCBsX2l0ZXIKLXsK
LSAgICB0eXBlZGVmIGF1eDo6bF9pdGVyX3RhZyB0YWc7Ci0gICAgdHlwZWRlZiBmb3J3YXJkX2l0
ZXJhdG9yX3RhZyBjYXRlZ29yeTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBOb2RlID4KLXN0
cnVjdCBkZXJlZjwgbF9pdGVyPE5vZGU+ID4KLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGU6
Oml0ZW0gdHlwZTsKLX07Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBOb2RlID4KLXN0cnVjdCBuZXh0
PCBsX2l0ZXI8Tm9kZT4gPgotewotICAgIHR5cGVkZWYgbF9pdGVyPCB0eXBlbmFtZSBOb2RlOjpu
ZXh0ID4gdHlwZTsKLX07Ci0KLSNlbHNlIC8vIEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BF
Q0lBTElaQVRJT04KLQotdGVtcGxhdGU8IHR5cGVuYW1lIE5vZGUgPgotc3RydWN0IGxfaXRlcgot
ewotICAgIHR5cGVkZWYgYXV4OjpsX2l0ZXJfdGFnIHRhZzsKLSAgICB0eXBlZGVmIGZvcndhcmRf
aXRlcmF0b3JfdGFnIGNhdGVnb3J5OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgTm9kZTo6aXRlbSB0
eXBlOwotICAgIHR5cGVkZWYgbF9pdGVyPCB0eXBlbmFtZSBtcGw6Om5leHQ8Tm9kZT46OnR5cGUg
PiBuZXh0OwotfTsKLQotI2VuZGlmCi0KLQotdGVtcGxhdGU8PiBzdHJ1Y3QgbF9pdGVyPGxfZW5k
PgotewotICAgIHR5cGVkZWYgYXV4OjpsX2l0ZXJfdGFnIHRhZzsKLSAgICB0eXBlZGVmIGZvcndh
cmRfaXRlcmF0b3JfdGFnIGNhdGVnb3J5OwotI2lmIGRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVf
UEFSVElBTF9TUEVDSUFMSVpBVElPTikKLSAgICB0eXBlZGVmIG5hIHR5cGU7Ci0gICAgdHlwZWRl
ZiBsX2l0ZXIgbmV4dDsKLSNlbmRpZgotfTsKLQotQk9PU1RfTVBMX0FVWF9QQVNTX1RIUk9VR0hf
TEFNQkRBX1NQRUMoMSwgbF9pdGVyKQotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0xJU1Rf
QVVYX0lURVJBVE9SX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xpc3QvYXV4Xy9wb3BfZnJvbnQuaHBwIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xpc3QvYXV4Xy9wb3Bf
ZnJvbnQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmEwNDE0NTY5MjU4OGVl
YTYzZjY1Mzc5NmJiOGRjYjU4MmMyNGIzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L21wbC9saXN0L2F1eF8vcG9wX2Zyb250LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAg
QEAKLQotI2lmbmRlZiBCT09TVF9NUExfTElTVF9BVVhfUE9QX0ZST05UX0hQUF9JTkNMVURFRAot
I2RlZmluZSBCT09TVF9NUExfTElTVF9BVVhfUE9QX0ZST05UX0hQUF9JTkNMVURFRAotCi0vLyBD
b3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1
bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29z
dC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAot
Ly8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL3BvcF9mcm9udF9md2QuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L21wbC9uZXh0X3ByaW9yLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwv
bGlzdC9hdXhfL3RhZy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewot
Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgcG9wX2Zyb250X2ltcGw8IGF1eDo6bGlzdF90YWcgPgotewot
ICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBMaXN0ID4gc3RydWN0IGFwcGx5Ci0gICAgewotICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIG1wbDo6bmV4dDxMaXN0Pjo6dHlwZSB0eXBlOwotICAgIH07Ci19
OwotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0xJU1RfQVVYX1BPUF9GUk9OVF9IUFBfSU5D
TFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21wbC9saXN0L2F1eF8vcHJlcHJvY2Vzc2VkL3BsYWluL2xpc3QxMC5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGlzdC9hdXhfL3ByZXByb2Nl
c3NlZC9wbGFpbi9saXN0MTAuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTM2
OGQyYzE4YWFmODRhNWM3NGEzMGRlZWY1YTI0NDBkMGI3NDA2Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L21wbC9saXN0L2F1eF8vcHJlcHJvY2Vzc2VkL3BsYWluL2xpc3QxMC5ocHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBH
dXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBM
SUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VO
U0VfMV8wLnR4dCkKLS8vCi0KLS8vIFByZXByb2Nlc3NlZCB2ZXJzaW9uIG9mICJib29zdC9tcGwv
bGlzdC9saXN0MTAuaHBwIiBoZWFkZXIKLS8vIC0tIERPIE5PVCBtb2RpZnkgYnkgaGFuZCEKLQot
bmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPAotICAgICAgdHlw
ZW5hbWUgVDAKLSAgICA+Ci1zdHJ1Y3QgbGlzdDEKLSAgICA6IGxfaXRlbTwKLSAgICAgICAgICBs
b25nXzwxPgotICAgICAgICAsIFQwCi0gICAgICAgICwgbF9lbmQKLSAgICAgICAgPgotewotICAg
IHR5cGVkZWYgbGlzdDEgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAs
IHR5cGVuYW1lIFQxCi0gICAgPgotc3RydWN0IGxpc3QyCi0gICAgOiBsX2l0ZW08Ci0gICAgICAg
ICAgbG9uZ188Mj4KLSAgICAgICAgLCBUMAotICAgICAgICAsIGxpc3QxPFQxPgotICAgICAgICA+
Ci17Ci0gICAgdHlwZWRlZiBsaXN0MiB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBl
bmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyCi0gICAgPgotc3RydWN0IGxpc3QzCi0g
ICAgOiBsX2l0ZW08Ci0gICAgICAgICAgbG9uZ188Mz4KLSAgICAgICAgLCBUMAotICAgICAgICAs
IGxpc3QyPCBUMSxUMiA+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIGxpc3QzIHR5cGU7Ci19
OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUg
VDIsIHR5cGVuYW1lIFQzCi0gICAgPgotc3RydWN0IGxpc3Q0Ci0gICAgOiBsX2l0ZW08Ci0gICAg
ICAgICAgbG9uZ188ND4KLSAgICAgICAgLCBUMAotICAgICAgICAsIGxpc3QzPCBUMSxUMixUMyA+
Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIGxpc3Q0IHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwK
LSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQz
LCB0eXBlbmFtZSBUNAotICAgID4KLXN0cnVjdCBsaXN0NQotICAgIDogbF9pdGVtPAotICAgICAg
ICAgIGxvbmdfPDU+Ci0gICAgICAgICwgVDAKLSAgICAgICAgLCBsaXN0NDwgVDEsVDIsVDMsVDQg
PgotICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiBsaXN0NSB0eXBlOwotfTsKLQotdGVtcGxhdGU8
Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBU
MywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1Ci0gICAgPgotc3RydWN0IGxpc3Q2Ci0g
ICAgOiBsX2l0ZW08Ci0gICAgICAgICAgbG9uZ188Nj4KLSAgICAgICAgLCBUMAotICAgICAgICAs
IGxpc3Q1PCBUMSxUMixUMyxUNCxUNSA+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIGxpc3Q2
IHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwg
dHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUs
IHR5cGVuYW1lIFQ2Ci0gICAgPgotc3RydWN0IGxpc3Q3Ci0gICAgOiBsX2l0ZW08Ci0gICAgICAg
ICAgbG9uZ188Nz4KLSAgICAgICAgLCBUMAotICAgICAgICAsIGxpc3Q2PCBUMSxUMixUMyxUNCxU
NSxUNiA+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIGxpc3Q3IHR5cGU7Ci19OwotCi10ZW1w
bGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVu
YW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBl
bmFtZSBUNwotICAgID4KLXN0cnVjdCBsaXN0OAotICAgIDogbF9pdGVtPAotICAgICAgICAgIGxv
bmdfPDg+Ci0gICAgICAgICwgVDAKLSAgICAgICAgLCBsaXN0NzwgVDEsVDIsVDMsVDQsVDUsVDYs
VDcgPgotICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiBsaXN0OCB0eXBlOwotfTsKLQotdGVtcGxh
dGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFt
ZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5h
bWUgVDcsIHR5cGVuYW1lIFQ4Ci0gICAgPgotc3RydWN0IGxpc3Q5Ci0gICAgOiBsX2l0ZW08Ci0g
ICAgICAgICAgbG9uZ188OT4KLSAgICAgICAgLCBUMAotICAgICAgICAsIGxpc3Q4PCBUMSxUMixU
MyxUNCxUNSxUNixUNyxUOCA+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIGxpc3Q5IHR5cGU7
Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5h
bWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVu
YW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgPgotc3Ry
dWN0IGxpc3QxMAotICAgIDogbF9pdGVtPAotICAgICAgICAgIGxvbmdfPDEwPgotICAgICAgICAs
IFQwCi0gICAgICAgICwgbGlzdDk8IFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5ID4KLSAgICAg
ICAgPgotewotICAgIHR5cGVkZWYgbGlzdDEwIHR5cGU7Ci19OwotCi19fQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xpc3QvYXV4Xy9w
cmVwcm9jZXNzZWQvcGxhaW4vbGlzdDIwLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC9saXN0L2F1eF8vcHJlcHJvY2Vzc2VkL3BsYWluL2xpc3QyMC5o
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MGU0OTVmM2ZlMDNhN2QxMDQ0ZGJi
ZjdjYjJjNjlhZjEzZTA4YTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xp
c3QvYXV4Xy9wcmVwcm9jZXNzZWQvcGxhaW4vbGlzdDIwLmhwcAorKysgL2Rldi9udWxsCkBAIC0x
LDE2OSArMCwwIEBACi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAot
Ly8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJz
aW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLQot
Ly8gUHJlcHJvY2Vzc2VkIHZlcnNpb24gb2YgImJvb3N0L21wbC9saXN0L2xpc3QyMC5ocHAiIGhl
YWRlcgotLy8gLS0gRE8gTk9UIG1vZGlmeSBieSBoYW5kIQotCi1uYW1lc3BhY2UgYm9vc3QgeyBu
YW1lc3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1l
IFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOQot
ICAgICwgdHlwZW5hbWUgVDEwCi0gICAgPgotc3RydWN0IGxpc3QxMQotICAgIDogbF9pdGVtPAot
ICAgICAgICAgIGxvbmdfPDExPgotICAgICAgICAsIFQwCi0gICAgICAgICwgbGlzdDEwPCBUMSxU
MixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAgPgotICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiBs
aXN0MTEgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1l
IFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFt
ZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDkK
LSAgICAsIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExCi0gICAgPgotc3RydWN0IGxpc3QxMgot
ICAgIDogbF9pdGVtPAotICAgICAgICAgIGxvbmdfPDEyPgotICAgICAgICAsIFQwCi0gICAgICAg
ICwgbGlzdDExPCBUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExID4KLSAgICAgICAg
PgotewotICAgIHR5cGVkZWYgbGlzdDEyIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5
cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFt
ZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5h
bWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwgdHlw
ZW5hbWUgVDEyCi0gICAgPgotc3RydWN0IGxpc3QxMwotICAgIDogbF9pdGVtPAotICAgICAgICAg
IGxvbmdfPDEzPgotICAgICAgICAsIFQwCi0gICAgICAgICwgbGlzdDEyPCBUMSxUMixUMyxUNCxU
NSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMiA+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIGxp
c3QxMyB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1l
IFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOQot
ICAgICwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUg
VDEzCi0gICAgPgotc3RydWN0IGxpc3QxNAotICAgIDogbF9pdGVtPAotICAgICAgICAgIGxvbmdf
PDE0PgotICAgICAgICAsIFQwCi0gICAgICAgICwgbGlzdDEzPCBUMSxUMixUMyxUNCxUNSxUNixU
NyxUOCxUOSxUMTAsVDExLFQxMixUMTMgPgotICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiBsaXN0
MTQgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQx
LCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBU
NSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDkKLSAg
ICAsIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQx
MywgdHlwZW5hbWUgVDE0Ci0gICAgPgotc3RydWN0IGxpc3QxNQotICAgIDogbF9pdGVtPAotICAg
ICAgICAgIGxvbmdfPDE1PgotICAgICAgICAsIFQwCi0gICAgICAgICwgbGlzdDE0PCBUMSxUMixU
MyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0ID4KLSAgICAgICAgPgotewot
ICAgIHR5cGVkZWYgbGlzdDE1IHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1l
IFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAot
ICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgs
IHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUg
VDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNAotICAgICwgdHlwZW5hbWUgVDE1Ci0gICAg
Pgotc3RydWN0IGxpc3QxNgotICAgIDogbF9pdGVtPAotICAgICAgICAgIGxvbmdfPDE2PgotICAg
ICAgICAsIFQwCi0gICAgICAgICwgbGlzdDE1PCBUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxU
MTAsVDExLFQxMixUMTMsVDE0LFQxNSA+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIGxpc3Qx
NiB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEs
IHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1
LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOQotICAg
ICwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEz
LCB0eXBlbmFtZSBUMTQKLSAgICAsIHR5cGVuYW1lIFQxNSwgdHlwZW5hbWUgVDE2Ci0gICAgPgot
c3RydWN0IGxpc3QxNwotICAgIDogbF9pdGVtPAotICAgICAgICAgIGxvbmdfPDE3PgotICAgICAg
ICAsIFQwCi0gICAgICAgICwgbGlzdDE2PCBUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAs
VDExLFQxMixUMTMsVDE0LFQxNSxUMTYgPgotICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiBsaXN0
MTcgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQx
LCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBU
NSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDkKLSAg
ICAsIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQx
MywgdHlwZW5hbWUgVDE0Ci0gICAgLCB0eXBlbmFtZSBUMTUsIHR5cGVuYW1lIFQxNiwgdHlwZW5h
bWUgVDE3Ci0gICAgPgotc3RydWN0IGxpc3QxOAotICAgIDogbF9pdGVtPAotICAgICAgICAgIGxv
bmdfPDE4PgotICAgICAgICAsIFQwCi0gICAgICAgICwgbGlzdDE3PCBUMSxUMixUMyxUNCxUNSxU
NixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3ID4KLSAgICAgICAgPgot
ewotICAgIHR5cGVkZWYgbGlzdDE4IHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVu
YW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBU
NAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUg
VDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwgdHlwZW5h
bWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNAotICAgICwgdHlwZW5hbWUgVDE1LCB0
eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4Ci0gICAgPgotc3RydWN0IGxp
c3QxOQotICAgIDogbF9pdGVtPAotICAgICAgICAgIGxvbmdfPDE5PgotICAgICAgICAsIFQwCi0g
ICAgICAgICwgbGlzdDE4PCBUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixU
MTMsVDE0LFQxNSxUMTYsVDE3LFQxOCA+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIGxpc3Qx
OSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEs
IHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1
LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOQotICAg
ICwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEz
LCB0eXBlbmFtZSBUMTQKLSAgICAsIHR5cGVuYW1lIFQxNSwgdHlwZW5hbWUgVDE2LCB0eXBlbmFt
ZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5Ci0gICAgPgotc3RydWN0IGxpc3QyMAot
ICAgIDogbF9pdGVtPAotICAgICAgICAgIGxvbmdfPDIwPgotICAgICAgICAsIFQwCi0gICAgICAg
ICwgbGlzdDE5PCBUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0
LFQxNSxUMTYsVDE3LFQxOCxUMTkgPgotICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiBsaXN0MjAg
dHlwZTsKLX07Ci0KLX19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvbGlzdC9hdXhfL3B1c2hfYmFjay5ocHAgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGlzdC9hdXhfL3B1c2hfYmFjay5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmM2I3M2U0MzBjZjMzYmE5OTFlMjJkYTg3
Y2Q4NjZiNmNmMWY1MTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xpc3Qv
YXV4Xy9wdXNoX2JhY2suaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotCi0jaWZu
ZGVmIEJPT1NUX01QTF9MSVNUX0FVWF9QVVNIX0JBQ0tfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJP
T1NUX01QTF9MSVNUX0FVWF9QVVNIX0JBQ0tfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBB
bGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBC
b29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5v
cmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJz
L21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNp
b24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvcHVzaF9iYWNrX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvbXBsL2Jvb2wuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9saXN0L2F1eF8vdGFnLmhw
cD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPCB0eXBl
bmFtZSBUYWcgPiBzdHJ1Y3QgaGFzX3B1c2hfYmFja19pbXBsOwotCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgaGFzX3B1c2hfYmFja19pbXBsPCBhdXg6Omxpc3RfdGFnID4KLXsKLSAgICB0ZW1wbGF0ZTwg
dHlwZW5hbWUgU2VxID4gc3RydWN0IGFwcGx5Ci0gICAgICAgIDogZmFsc2VfCi0gICAgewotICAg
IH07Ci19OwotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0xJU1RfQVVYX1BVU0hfQkFDS19I
UFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L21wbC9saXN0L2F1eF8vcHVzaF9mcm9udC5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGlzdC9hdXhfL3B1c2hfZnJvbnQuaHBwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2ZiZTRhYjNlMzA2MDlmOTEwMTBiMGRkMzhl
YTBmN2UzZDMxYjRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9saXN0L2F1
eF8vcHVzaF9mcm9udC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0KLSNpZm5k
ZWYgQk9PU1RfTVBMX0xJU1RfQVVYX1BVU0hfRlJPTlRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJP
T1NUX01QTF9MSVNUX0FVWF9QVVNIX0ZST05UX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQg
QWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlz
aW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL3B1c2hfZnJvbnRfZndkLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9tcGwvbmV4dC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2xpc3QvYXV4Xy9pdGVt
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvbGlzdC9hdXhfL3RhZy5ocHA+Ci0KLW5hbWVzcGFj
ZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgcHVzaF9mcm9u
dF9pbXBsPCBhdXg6Omxpc3RfdGFnID4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgTGlzdCwg
dHlwZW5hbWUgVCA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBsX2l0ZW08
Ci0gICAgICAgICAgICAgIHR5cGVuYW1lIG5leHQ8dHlwZW5hbWUgTGlzdDo6c2l6ZT46OnR5cGUK
LSAgICAgICAgICAgICwgVAotICAgICAgICAgICAgLCB0eXBlbmFtZSBMaXN0Ojp0eXBlCi0gICAg
ICAgICAgICA+IHR5cGU7Ci0gICAgfTsKLX07Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExf
TElTVF9BVVhfUFVTSF9GUk9OVF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9saXN0L2F1eF8vc2l6ZS5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGlzdC9hdXhfL3Np
emUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWU3ZmVhZmRhMjBmYTI3NDMw
ZTU0MjhjNmU5YWVhYmU1ZTJkNDg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21w
bC9saXN0L2F1eF8vc2l6ZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0KLSNp
Zm5kZWYgQk9PU1RfTVBMX0xJU1RfQVVYX1NJWkVfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NU
X01QTF9MSVNUX0FVWF9TSVpFX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBH
dXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBM
SUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VO
U0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9y
IGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0j
aW5jbHVkZSA8Ym9vc3QvbXBsL3NpemVfZndkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvbGlz
dC9hdXhfL3RhZy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10
ZW1wbGF0ZTw+Ci1zdHJ1Y3Qgc2l6ZV9pbXBsPCBhdXg6Omxpc3RfdGFnID4KLXsKLSAgICB0ZW1w
bGF0ZTwgdHlwZW5hbWUgTGlzdCA+IHN0cnVjdCBhcHBseQotICAgICAgICA6IExpc3Q6OnNpemUK
LSAgICB7Ci0gICAgfTsKLX07Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfTElTVF9BVVhf
U0laRV9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC9saXN0L2F1eF8vdGFnLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9saXN0L2F1eF8vdGFnLmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZjVlZDJiYmZlNjIyZWNlODNjNWU3Y2ZlMDk3Mjc3MDIzYjAx
NGYyNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbGlzdC9hdXhfL3RhZy5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0xJ
U1RfQVVYX1RBR19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0xJU1RfQVVYX1RBR19I
UFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0v
LwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNp
b24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8g
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0v
LyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFt
ZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggewotCi1zdHJ1Y3QgbGlzdF90YWc7Ci1zdHJ1Y3Qg
bF9pdGVyX3RhZzsKLQotfX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfTElTVF9BVVhfVEFHX0hQ
UF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvbXBsL2xpc3QvbGlzdDAuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvbXBsL2xpc3QvbGlzdDAuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4ZTA2YjhkMDg4NThmODBhYTgxZWFkN2ExYzhmOWM1MzNjNmY3ZWE1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9saXN0L2xpc3QwLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQyICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfTElTVF9MSVNUMF9IUFBfSU5D
TFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0xJU1RfTElTVDBfSFBQX0lOQ0xVREVECi0KLS8vIENv
cHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3
dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0v
LyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvbG9uZy5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvbXBsL2F1eF8vbmEuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9saXN0L2F1eF8vcHVz
aF9mcm9udC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2xpc3QvYXV4Xy9wb3BfZnJvbnQuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L21wbC9saXN0L2F1eF8vcHVzaF9iYWNrLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9tcGwvbGlzdC9hdXhfL2Zyb250LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvbGlz
dC9hdXhfL2NsZWFyLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvbGlzdC9hdXhfL08xX3NpemUu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9saXN0L2F1eF8vc2l6ZS5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvbXBsL2xpc3QvYXV4Xy9lbXB0eS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2xpc3Qv
YXV4Xy9iZWdpbl9lbmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9saXN0L2F1eF8vaXRlbS5o
cHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwgdHlw
ZW5hbWUgRHVtbXkgPSBuYSA+IHN0cnVjdCBsaXN0MDsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgbGlz
dDA8bmE+Ci0gICAgOiBsX2VuZAotewotICAgIHR5cGVkZWYgbF9lbmQgdHlwZTsKLX07Ci0KLX19
Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfTElTVF9MSVNUMF9IUFBfSU5DTFVERUQKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9saXN0L2xp
c3QxMC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwv
bGlzdC9saXN0MTAuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzJkMGQ4Yzc3
ZjE3ODE1ZWI5Y2I3ZWZlMDgwYzE5MDExNWE2MDA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9saXN0L2xpc3QxMC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBA
Ci0KLSNpZm5kZWYgQk9PU1RfTVBMX0xJU1RfTElTVDEwX0hQUF9JTkNMVURFRAotI2RlZmluZSBC
T09TVF9NUExfTElTVF9MSVNUMTBfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5
IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxl
IExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBm
b3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0K
LSNpZiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotIyAgIGluY2x1ZGUg
PGJvb3N0L21wbC9saXN0L2xpc3QwLmhwcD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBs
L2F1eF8vY29uZmlnL3VzZV9wcmVwcm9jZXNzZWQuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1Rf
TVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVSUykgXAotICAgICYmICFkZWZpbmVkKEJPT1NU
X01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BSRVBST0NF
U1NFRF9IRUFERVIgbGlzdDEwLmhwcAotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9saXN0L2F1eF8v
aW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwPgotCi0jZWxzZQotCi0jICAgaW5jbHVkZSA8Ym9vc3Qv
cHJlcHJvY2Vzc29yL2l0ZXJhdGUuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2Ug
bXBsIHsKLQotIyAgIGRlZmluZSBCT09TVF9QUF9JVEVSQVRJT05fUEFSQU1TXzEgXAotICAgICgz
LCgxLCAxMCwgPGJvb3N0L21wbC9saXN0L2F1eF8vbnVtYmVyZWQuaHBwPikpCi0jICAgaW5jbHVk
ZSBCT09TVF9QUF9JVEVSQVRFKCkKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9DRkdfTk9f
UFJFUFJPQ0VTU0VEX0hFQURFUlMKLQotI2VuZGlmIC8vIEJPT1NUX01QTF9MSVNUX0xJU1QxMF9I
UFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L21wbC9saXN0L2xpc3QyMC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9tcGwvbGlzdC9saXN0MjAuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3MjRjYWJkMjM3Mzg1MTU2OTVmODQxNzlkMTk3YTA4YzRmMmRhZjAzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9saXN0L2xpc3QyMC5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0MyArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0xJU1RfTElTVDIwX0hQ
UF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfTElTVF9MSVNUMjBfSFBQX0lOQ0xVREVECi0K
LS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAo
U2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERh
dGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lO
R19NT0RFKQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9saXN0L2xpc3QxMC5ocHA+Ci0jZW5kaWYK
LQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy91c2VfcHJlcHJvY2Vzc2VkLmhwcD4K
LQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMpIFwK
LSAmJiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotCi0jICAgZGVmaW5l
IEJPT1NUX01QTF9QUkVQUk9DRVNTRURfSEVBREVSIGxpc3QyMC5ocHAKLSMgICBpbmNsdWRlIDxi
b29zdC9tcGwvbGlzdC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcD4KLQotI2Vsc2UKLQot
IyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9pdGVyYXRlLmhwcD4KLQotbmFtZXNwYWNl
IGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLSMgICBkZWZpbmUgQk9PU1RfUFBfSVRFUkFUSU9O
X1BBUkFNU18xIFwKLSAgICAoMywoMTEsIDIwLCA8Ym9vc3QvbXBsL2xpc3QvYXV4Xy9udW1iZXJl
ZC5ocHA+KSkKLSMgICBpbmNsdWRlIEJPT1NUX1BQX0lURVJBVEUoKQotCi19fQotCi0jZW5kaWYg
Ly8gQk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVSUwotCi0jZW5kaWYgLy8gQk9P
U1RfTVBMX0xJU1RfTElTVDIwX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xvZ2ljYWwuaHBwIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xvZ2ljYWwuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODIzNmI1ZmU4ZTgzNzk0ZjA4YzljODg2YmI0YTEyMGZk
MTllOGRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9sb2dpY2FsLmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfTE9HSUNB
TF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX0xPR0lDQUxfSFBQX0lOQ0xVREVECi0K
LS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAo
U2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERh
dGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvb3IuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21wbC9hbmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9ub3QuaHBwPgotCi0j
ZW5kaWYgLy8gQk9PU1RfTVBMX0xPR0lDQUxfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbG9uZy5ocHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbG9uZy5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NTUyNjczNDFkM2M4NWVjODg0M2EyOGNkMDgxZTUx
NzA1MTc3OWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL2xvbmcuaHBwCisr
KyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9MT05HX0hQ
UF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfTE9OR19IUFBfSU5DTFVERUQKLQotLy8gQ29w
eXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNj
b21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8v
ICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9sb25nX2Z3ZC5ocHA+Ci0KLSNkZWZp
bmUgQVVYX1dSQVBQRVJfVkFMVUVfVFlQRSBsb25nCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8v
aW50ZWdyYWxfd3JhcHBlci5ocHA+Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfTE9OR19IUFBfSU5D
TFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21wbC9sb25nX2Z3ZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tcGwvbG9uZ19md2QuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1
ZjYyZjJiODFjZTRhY2E3ZDZhNmY5Yzk0ZDA2YzNiMzg2MWQwMDE3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC9sb25nX2Z3ZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNyAr
MCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0xPTkdfRldEX0hQUF9JTkNMVURFRAotI2RlZmlu
ZSBCT09TVF9NUExfTE9OR19GV0RfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5
IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxl
IExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBm
b3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0K
LSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9hZGxfYmFycmllci5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvbXBsL2F1eF8vbnR0cF9kZWNsLmhwcD4KLQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9O
QU1FU1BBQ0VfT1BFTgotCi10ZW1wbGF0ZTwgQk9PU1RfTVBMX0FVWF9OVFRQX0RFQ0wobG9uZywg
TikgPiBzdHJ1Y3QgbG9uZ187Ci0KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNF
X0NMT1NFCi1CT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX0RFQ0wobG9uZ18pCi0KLSNlbmRpZiAv
LyBCT09TVF9NUExfTE9OR19GV0RfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbWludXMuaHBwIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL21pbnVzLmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOWYyOWY3NGI1NDUwOGI3M2FiMTNlZTY4OTJlNjkxMDM3ZDFh
OTc0ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbWludXMuaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9NSU5VU19IUFBf
SU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX01JTlVTX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5
cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRl
ciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5v
cmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8g
JFJldmlzaW9uJAotCi0jZGVmaW5lIEFVWDc3ODA3Nl9PUF9OQU1FIG1pbnVzCi0jZGVmaW5lIEFV
WDc3ODA3Nl9PUF9UT0tFTiAtCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vYXJpdGhtZXRpY19v
cC5ocHA+Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfTUlOVVNfSFBQX0lOQ0xVREVECmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvbmVnYXRl
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9uZWdh
dGUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmFhMDY1NDU5NjlmMzA1NGVi
NjYxMTBhODE5ZmFlYzE0NDQ5ODEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21w
bC9uZWdhdGUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotCi0jaWZuZGVmIEJP
T1NUX01QTF9ORUdBVEVfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9ORUdBVEVfSFBQ
X0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8K
LS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5
IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNl
ZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8g
JElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvaW50
ZWdyYWxfYy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbXN2Y19ldGlfYmFzZS5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbmFfc3BlYy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F1eF8vbGFtYmRhX3N1cHBvcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2Nv
bmZpZy9ldGkuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9pbnRlZ3JhbC5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3N0YXRpY19jb25zdGFudC5ocHA+
Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwgdHlwZW5h
bWUgVGFnID4gc3RydWN0IG5lZ2F0ZV9pbXBsOwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0
cnVjdCBuZWdhdGVfdGFnCi17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBUOjp0YWcgdHlwZTsKLX07
Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShOKQot
ICAgID4KLXN0cnVjdCBuZWdhdGUKLSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX01TVkNfRVRJ
X0JVRykKLSAgICA6IG5lZ2F0ZV9pbXBsPAotICAgICAgICAgIHR5cGVuYW1lIG5lZ2F0ZV90YWc8
Tj46OnR5cGUKLSAgICAgICAgPjo6dGVtcGxhdGUgYXBwbHk8Tj46OnR5cGUKLSNlbHNlCi0gICAg
OiBhdXg6Om1zdmNfZXRpX2Jhc2U8IHR5cGVuYW1lIGFwcGx5X3dyYXAxPAotICAgICAgICAgIG5l
Z2F0ZV9pbXBsPCB0eXBlbmFtZSBuZWdhdGVfdGFnPE4+Ojp0eXBlID4KLSAgICAgICAgLCBOCi0g
ICAgICAgID46OnR5cGUgPjo6dHlwZQotI2VuZGlmCi17Ci0gICAgQk9PU1RfTVBMX0FVWF9MQU1C
REFfU1VQUE9SVCgxLCBuZWdhdGUsIChOKSkKLX07Ci0KLUJPT1NUX01QTF9BVVhfTkFfU1BFQygx
LCBuZWdhdGUpCi0KLQotI2lmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19ORVNURURfVkFMVUVf
QVJJVEhNRVRJQykKLW5hbWVzcGFjZSBhdXggewotdGVtcGxhdGU8IHR5cGVuYW1lIFQsIFQgbiA+
IHN0cnVjdCBuZWdhdGVfd2tuZAotewotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChULCB2YWx1
ZSA9IC1uKTsKLSAgICB0eXBlZGVmIGludGVncmFsX2M8VCx2YWx1ZT4gdHlwZTsKLX07Ci19Ci0j
ZW5kaWYKLQotdGVtcGxhdGU8Pgotc3RydWN0IG5lZ2F0ZV9pbXBsPGludGVncmFsX2NfdGFnPgot
ewotI2lmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19ORVNURURfVkFMVUVfQVJJVEhNRVRJQykK
LSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgTiA+IHN0cnVjdCBhcHBseQotICAgICAgICA6IGF1eDo6
bmVnYXRlX3drbmQ8IHR5cGVuYW1lIE46OnZhbHVlX3R5cGUsIE46OnZhbHVlID4KLSNlbHNlCi0g
ICAgdGVtcGxhdGU8IHR5cGVuYW1lIE4gPiBzdHJ1Y3QgYXBwbHkKLSAgICAgICAgOiBpbnRlZ3Jh
bF9jPCB0eXBlbmFtZSBOOjp2YWx1ZV90eXBlLCAoLU46OnZhbHVlKSA+Ci0jZW5kaWYgICAgCi0g
ICAgewotICAgIH07Ci19OwotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX05FR0FURV9IUFBf
SU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9uZXh0LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9uZXh0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU0YjIy
MjZjNmI1YTc4ZTJhMTFkNzVkZGQ2NTkwZmVkNWZlNzZjZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvbmV4dC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0K
LSNpZm5kZWYgQk9PU1RfTVBMX05FWFRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9O
RVhUX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDA0Ci0v
LwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNp
b24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8g
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0v
LyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9u
ZXh0X3ByaW9yLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9ORVhUX0hQUF9JTkNMVURFRApk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L25leHRfcHJpb3IuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvbXBsL25leHRfcHJpb3IuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDVm
YTIwZWFhZDdkNDYxM2ZlYWJmZTc5YTY1NTI0YTMzMTdlNGZiLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L21wbC9uZXh0X3ByaW9yLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICsw
LDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfTkVYVF9QUklPUl9IUFBfSU5DTFVERUQKLSNkZWZp
bmUgQk9PU1RfTVBMX05FWFRfUFJJT1JfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVr
c2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29z
dCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBm
aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcv
TElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21w
bCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24k
Ci0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb21tb25fbmFtZV93a25kLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9tcGwvYXV4Xy9uYV9zcGVjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4
Xy9sYW1iZGFfc3VwcG9ydC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwg
ewotCi1CT09TVF9NUExfQVVYX0NPTU1PTl9OQU1FX1dLTkQobmV4dCkKLUJPT1NUX01QTF9BVVhf
Q09NTU9OX05BTUVfV0tORChwcmlvcikKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09T
VF9NUExfQVVYX05BX1BBUkFNKFQpCi0gICAgPgotc3RydWN0IG5leHQKLXsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIFQ6Om5leHQgdHlwZTsKLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JU
KDEsbmV4dCwoVCkpCi19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9B
VVhfTkFfUEFSQU0oVCkKLSAgICA+Ci1zdHJ1Y3QgcHJpb3IKLXsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIFQ6OnByaW9yIHR5cGU7Ci0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgxLHBy
aW9yLChUKSkKLX07Ci0KLUJPT1NUX01QTF9BVVhfTkFfU1BFQygxLCBuZXh0KQotQk9PU1RfTVBM
X0FVWF9OQV9TUEVDKDEsIHByaW9yKQotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX05FWFRf
UFJJT1JfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9tcGwvbm90LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC9ub3QuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkNWY2MDI1NTc5YmEwODcyM2UyODRhMDJhNTBiNTI5M2FhZWUwODM5Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9ub3QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAs
MCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9OT1RfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NU
X01QTF9OT1RfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIw
MDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNl
bnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8w
LnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0
KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRh
dGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxi
b29zdC9tcGwvYm9vbC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vbnR0cF9kZWNsLmhw
cD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9uZXN0ZWRfdHlwZV93a25kLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9tcGwvYXV4Xy9uYV9zcGVjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4
Xy9sYW1iZGFfc3VwcG9ydC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwg
ewotCi1uYW1lc3BhY2UgYXV4IHsKLQotdGVtcGxhdGU8IEJPT1NUX01QTF9BVVhfTlRUUF9ERUNM
KGxvbmcsIENfKSA+IC8vICdsb25nJyBpcyBpbnRlbnRpb25hbCBoZXJlCi1zdHJ1Y3Qgbm90X2lt
cGwKLSAgICA6IGJvb2xfPCFDXz4KLXsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGF1eAotCi0KLXRl
bXBsYXRlPAotICAgICAgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShUKQotICAgID4K
LXN0cnVjdCBub3RfCi0gICAgOiBhdXg6Om5vdF9pbXBsPAotICAgICAgICAgIEJPT1NUX01QTF9B
VVhfTkVTVEVEX1RZUEVfV0tORChUKTo6dmFsdWUKLSAgICAgICAgPgotewotICAgIEJPT1NUX01Q
TF9BVVhfTEFNQkRBX1NVUFBPUlQoMSxub3RfLChUKSkKLX07Ci0KLUJPT1NUX01QTF9BVVhfTkFf
U1BFQygxLG5vdF8pCi0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfTk9UX0hQUF9JTkNMVURF
RApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL25vdF9lcXVhbF90by5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tcGwvbm90X2VxdWFsX3RvLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTFlZjM0MjRjOTE3OGI4M2I0NWY0NjdmNjIxYmUzMmViMmU0MmY0Zi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvbm90X2VxdWFsX3RvLmhwcAorKysgL2Rldi9udWxsCkBA
IC0xLDIxICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfTk9UX0VRVUFMX1RPX0hQUF9JTkNM
VURFRAotI2RlZmluZSBCT09TVF9NUExfTk9UX0VRVUFMX1RPX0hQUF9JTkNMVURFRAotCi0vLyBD
b3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1
bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29z
dC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAot
Ly8gJFJldmlzaW9uJAotCi0jZGVmaW5lIEFVWDc3ODA3Nl9PUF9OQU1FIG5vdF9lcXVhbF90bwot
I2RlZmluZSBBVVg3NzgwNzZfT1BfVE9LRU4gIT0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9j
b21wYXJpc29uX29wLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9OT1RfRVFVQUxfVE9fSFBQ
X0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tcGwvbnVtZXJpY19jYXN0LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC9udW1lcmljX2Nhc3QuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2NTQxNDcwNDQ1YzQzYmU2NTM0NDQzODMwMDA4OGE4NWE1MjE4MWRjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9udW1lcmljX2Nhc3QuaHBwCisrKyAvZGV2
L251bGwKQEAgLTEsNDEgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9OVU1FUklDX0NBU1Rf
SFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9OVU1FUklDX0NBU1RfSFBQX0lOQ0xVREVE
Ci0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDMtMjAwNAotLy8KLS8vIERpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8v
IChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vIGh0
dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3
dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICRE
YXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL21z
dmMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5kLmhwcD4K
LQotLy8gYWd1cnQgMjEvc2VwLzA0OiBwb3J0YWJpbGl0eSBtYWNybyBmb3IgdGhlIHNha2Ugb2Yg
TVNWQyA2LngtNy4wOwotLy8gcmVzb2x2ZXMgY29uZmxpY3RzIHdpdGggJ2Jvb3N0OjpudW1lcmlj
X2Nhc3QnIGZ1bmN0aW9uIHRlbXBsYXRlLgotLy8gdXNlIGl0IGluIHlvdXIgb3duIGNvZGUgX29u
bHlfIGlmIHlvdSBjYXJlIGFib3V0IGNvbXBhdGliaWxpdHkgd2l0aAotLy8gdGhlc2Ugb3V0ZGF0
ZWQgY29tcGlsZXJzIQotI2lmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPD0gMTMwMCkg
fHwgQk9PU1RfV09SS0FST1VORChfX0JPUkxBTkRDX18sIEJPT1NUX1RFU1RFRF9BVCgweDU3MCkg
KQotIyAgIGRlZmluZSBCT09TVF9NUExfQVVYX05VTUVSSUNfQ0FTVCBudW1lcmljX2Nhc3RfCi0j
ZWxzZQotIyAgIGRlZmluZSBCT09TVF9NUExfQVVYX05VTUVSSUNfQ0FTVCBudW1lcmljX2Nhc3QK
LSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotLy8gbm8gZGVm
YXVsdCBpbXBsZW1lbnRhdGlvbjsgdGhlIGRlZmluaXRpb24gaXMgbmVlZGVkIHRvIG1ha2UgTVNW
QyBoYXBweQotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgU291cmNlVGFnLCB0eXBlbmFtZSBUYXJnZXRU
YWcgPiBzdHJ1Y3QgQk9PU1RfTVBMX0FVWF9OVU1FUklDX0NBU1QKLXsKLSAgICB0ZW1wbGF0ZTwg
dHlwZW5hbWUgTiA+IHN0cnVjdCBhcHBseTsKLX07Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9N
UExfTlVNRVJJQ19DQVNUX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL29yLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9vci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGY5NzA0ZDUxNjZjOGFiYzIxZmE4MWQ2ODY3YmQyMmFiOTY3MDU5ZGMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL29yLmhwcAorKysgL2Rldi9udWxsCkBAIC0x
LDYxICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfT1JfSFBQX0lOQ0xVREVECi0jZGVmaW5l
IEJPT1NUX01QTF9PUl9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92
b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1
bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1
ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy91c2VfcHJlcHJvY2Vzc2VkLmhwcD4KLQotI2lmICFk
ZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMpIFwKLSAgICAmJiAh
ZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotCi0jICAgaW5jbHVkZSA8Ym9v
c3QvbXBsL2Jvb2wuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25lc3RlZF90eXBl
X3drbmQuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hX3NwZWMuaHBwPgotIyAg
IGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2xhbWJkYV9zdXBwb3J0LmhwcD4KLSMgICBpbmNsdWRl
IDxib29zdC9tcGwvYXV4Xy9jb25maWcvbXN2Yy5ocHA+Ci0KLS8vIGFndXJ0LCAxOS9tYXkvMDQ6
IHdvcmthcm91bmQgYSBjb25mbGljdCB3aXRoIDxpc282NDYuaD4gaGVhZGVyJ3MgCi0vLyAnb3In
IGFuZCAnYW5kJyBtYWNyb3MsIHNlZSBodHRwOi8vdGlueXVybC5jb20vM2V0Njk7ICdkZWZpbmVk
KG9yKScKLS8vIGhhcyB0byBiZSBjaGVja2VkIGluIGEgc2VwYXJhdGUgY29uZGl0aW9uLCBvdGhl
cndpc2UgR0NDIGNvbXBsYWlucyAKLS8vIGFib3V0ICdvcicgYmVpbmcgYW4gYWx0ZXJuYXRpdmUg
dG9rZW4KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfX2NsYW5nX18pCi0jaWZu
ZGVmIF9fR0NDWE1MX18KLSNpZiBkZWZpbmVkKG9yKQotIyAgIHByYWdtYSBwdXNoX21hY3JvKCJv
ciIpCi0jICAgdW5kZWYgb3IKLSMgICBkZWZpbmUgb3IoeCkKLSNlbmRpZgotI2VuZGlmCi0jZW5k
aWYKLQotIyAgIGRlZmluZSBCT09TVF9NUExfUFJFUFJPQ0VTU0VEX0hFQURFUiBvci5ocHAKLSMg
ICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHA+Ci0KLSNp
ZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfX2NsYW5nX18pCi0jaWZuZGVmIF9fR0ND
WE1MX18KLSNpZiBkZWZpbmVkKG9yKQotIyAgIHByYWdtYSBwb3BfbWFjcm8oIm9yIikKLSNlbmRp
ZgotI2VuZGlmCi0jZW5kaWYKLQotI2Vsc2UKLQotIyAgIGRlZmluZSBBVVg3NzgwNzZfT1BfTkFN
RSBvcl8KLSMgICBkZWZpbmUgQVVYNzc4MDc2X09QX1ZBTFVFMSB0cnVlCi0jICAgZGVmaW5lIEFV
WDc3ODA3Nl9PUF9WQUxVRTIgZmFsc2UKLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9sb2dp
Y2FsX29wLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hF
QURFUlMKLSNlbmRpZiAvLyBCT09TVF9NUExfT1JfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcGFpci5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcGFpci5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YzAxZDczY2VkMzk1OWZhZmY2MzRmYjljMTUy
NmJjOTU5MmU2ZWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3BhaXIuaHBw
CisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9QQUlS
X0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfUEFJUl9IUFBfSU5DTFVERUQKLQotLy8g
Q29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMS0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUg
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQK
LS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL21zdmNfZXRpX2Jhc2Uu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hX3NwZWMuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L21wbC9hdXhfL2xhbWJkYV9zdXBwb3J0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4
Xy9jb25maWcvZXRpLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0K
LXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShUMSkKLSAg
ICAsIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oVDIpCi0gICAgPgotc3RydWN0IHBh
aXIKLXsKLSAgICB0eXBlZGVmIHBhaXIgdHlwZTsKLSAgICB0eXBlZGVmIFQxIGZpcnN0OwotICAg
IHR5cGVkZWYgVDIgc2Vjb25kOwotCi0gICAgQk9PU1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgy
LHBhaXIsKFQxLFQyKSkKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgQk9PU1RfTVBM
X0FVWF9OQV9QQVJBTShQKQotICAgID4KLXN0cnVjdCBmaXJzdAotewotI2lmICFkZWZpbmVkKEJP
T1NUX01QTF9DRkdfTVNWQ183MF9FVElfQlVHKQotICAgIHR5cGVkZWYgdHlwZW5hbWUgUDo6Zmly
c3QgdHlwZTsKLSNlbHNlCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6Om1zdmNfZXRpX2Jhc2U8
UD46OmZpcnN0IHR5cGU7Ci0jZW5kaWYKLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQT1JU
KDEsZmlyc3QsKFApKQotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09TVF9NUExf
QVVYX05BX1BBUkFNKFApCi0gICAgPgotc3RydWN0IHNlY29uZAotewotI2lmICFkZWZpbmVkKEJP
T1NUX01QTF9DRkdfTVNWQ183MF9FVElfQlVHKQotICAgIHR5cGVkZWYgdHlwZW5hbWUgUDo6c2Vj
b25kIHR5cGU7Ci0jZWxzZQotICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4Ojptc3ZjX2V0aV9iYXNl
PFA+OjpzZWNvbmQgdHlwZTsKLSNlbmRpZgotICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBP
UlQoMSxzZWNvbmQsKFApKQotfTsKLQotCi1CT09TVF9NUExfQVVYX05BX1NQRUNfTk9fRVRJKDIs
IHBhaXIpCi1CT09TVF9NUExfQVVYX05BX1NQRUMoMSwgZmlyc3QpCi1CT09TVF9NUExfQVVYX05B
X1NQRUMoMSwgc2Vjb25kKQotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX1BBSVJfSFBQX0lO
Q0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9tcGwvcGxhY2Vob2xkZXJzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L21wbC9wbGFjZWhvbGRlcnMuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkZjAzNzNjYTU3MjJmMWM1NmRiYmUzYmJkNWJjN2YyM2ViOTNhMjlhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9wbGFjZWhvbGRlcnMuaHBwCisrKyAvZGV2L251
bGwKQEAgLTEsMTAwICswLDAgQEAKLQotI2lmICFkZWZpbmVkKEJPT1NUX1BQX0lTX0lURVJBVElO
RykKLQotLy8vLy8gaGVhZGVyIGJvZHkKLQotI2lmbmRlZiBCT09TVF9NUExfUExBQ0VIT0xERVJT
X0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfUExBQ0VIT0xERVJTX0hQUF9JTkNMVURF
RAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAxLTIwMDQKLS8vIENvcHlyaWdo
dCBQZXRlciBEaW1vdiAyMDAxLTIwMDMKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9v
c3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9t
cGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9u
JAotCi0KLSNpZiAhZGVmaW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotIyAgIGlu
Y2x1ZGUgPGJvb3N0L21wbC9hcmcuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2Fk
bF9iYXJyaWVyLmhwcD4KLQotIyAgIGlmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fQURMX0JB
UlJJRVJfTkFNRVNQQUNFKQotIyAgICAgICBkZWZpbmUgQk9PU1RfTVBMX0FVWF9BUkdfQURMX0JB
UlJJRVJfREVDTCh0eXBlKSBcCi0gICAgICAgIHVzaW5nIDo6Qk9PU1RfTVBMX0FVWF9BRExfQkFS
UklFUl9OQU1FU1BBQ0U6OnR5cGU7IFwKLSAgICAgICAgLyoqLwotIyAgIGVsc2UKLSMgICAgICAg
ZGVmaW5lIEJPT1NUX01QTF9BVVhfQVJHX0FETF9CQVJSSUVSX0RFQ0wodHlwZSkgLyoqLwotIyAg
IGVuZGlmCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3VzZV9w
cmVwcm9jZXNzZWQuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19QUkVQUk9D
RVNTRURfSEVBREVSUykgXAotICYmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01P
REUpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BSRVBST0NFU1NFRF9IRUFERVIgcGxhY2Vob2xk
ZXJzLmhwcAotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2Vk
LmhwcD4KLQotI2Vsc2UKLQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL250dHBfZGVjbC5o
cHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2xpbWl0cy9hcml0eS5ocHA+Ci0jICAgaW5jbHVk
ZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2l0ZXJhdGUuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3By
ZXByb2Nlc3Nvci9jYXQuaHBwPgotCi0vLyB3YXRjaCBvdXQgZm9yIEdOVSBnZXR0ZXh0IHVzZXJz
LCB3aG8gI2RlZmluZSBfKHgpCi0jaWYgIWRlZmluZWQoXykgfHwgZGVmaW5lZChCT09TVF9NUExf
Q0ZHX05PX1VOTkFNRURfUExBQ0VIT0xERVJfU1VQUE9SVCkKLUJPT1NUX01QTF9BVVhfQURMX0JB
UlJJRVJfTkFNRVNQQUNFX09QRU4KLXR5cGVkZWYgYXJnPC0xPiBfOwotQk9PU1RfTVBMX0FVWF9B
RExfQkFSUklFUl9OQU1FU1BBQ0VfQ0xPU0UKLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNl
IG1wbCB7IAotCi1CT09TVF9NUExfQVVYX0FSR19BRExfQkFSUklFUl9ERUNMKF8pCi0KLW5hbWVz
cGFjZSBwbGFjZWhvbGRlcnMgewotdXNpbmcgQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1F
U1BBQ0U6Ol87Ci19Ci0KLX19Ci0jZW5kaWYKLQotLy8vIGFndXJ0LCAxNy9tYXIvMDI6IG9uZSBt
b3JlIHBsYWNlaG9sZGVyIGZvciB0aGUgbGFzdCAnYXBwbHkjJyAKLS8vLyBzcGVjaWFsaXphdGlv
bgotI2RlZmluZSBCT09TVF9QUF9JVEVSQVRJT05fUEFSQU1TXzEgXAotICAgICgzLCgxLCBCT09T
VF9NUExfTElNSVRfTUVUQUZVTkNUSU9OX0FSSVRZICsgMSwgPGJvb3N0L21wbC9wbGFjZWhvbGRl
cnMuaHBwPikpCi0jaW5jbHVkZSBCT09TVF9QUF9JVEVSQVRFKCkKLQotI2VuZGlmIC8vIEJPT1NU
X01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMKLSNlbmRpZiAvLyBCT09TVF9NUExfUExB
Q0VIT0xERVJTX0hQUF9JTkNMVURFRAotCi0vLy8vLyBpdGVyYXRpb24KLQotI2Vsc2UKLSNkZWZp
bmUgaV8gQk9PU1RfUFBfRlJBTUVfSVRFUkFUSU9OKDEpCi0KLUJPT1NUX01QTF9BVVhfQURMX0JB
UlJJRVJfTkFNRVNQQUNFX09QRU4KLQotdHlwZWRlZiBhcmc8aV8+IEJPT1NUX1BQX0NBVChfLGlf
KTsKLQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9OQU1FU1BBQ0VfQ0xPU0UKLQotbmFtZXNw
YWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IAotCi1CT09TVF9NUExfQVVYX0FSR19BRExfQkFS
UklFUl9ERUNMKEJPT1NUX1BQX0NBVChfLGlfKSkKLQotbmFtZXNwYWNlIHBsYWNlaG9sZGVycyB7
Ci11c2luZyBCT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRTo6Qk9PU1RfUFBfQ0FU
KF8saV8pOwotfQotCi19fQotCi0jdW5kZWYgaV8KLSNlbmRpZiAvLyBCT09TVF9QUF9JU19JVEVS
QVRJTkcKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21wbC9wbHVzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21wbC9wbHVzLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU1OTIwYjVk
MTFiMjg5NDY0YWJkODY0MjY3NzEzM2JhODcyYzliYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tcGwvcGx1cy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0KLSNp
Zm5kZWYgQk9PU1RfTVBMX1BMVVNfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9QTFVT
X0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQK
LS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVy
c2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0v
LyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0K
LS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jZGVmaW5lIEFVWDc3ODA3Nl9P
UF9OQU1FIHBsdXMKLSNkZWZpbmUgQVVYNzc4MDc2X09QX1RPS0VOICsKLSNpbmNsdWRlIDxib29z
dC9tcGwvYXV4Xy9hcml0aG1ldGljX29wLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9QTFVT
X0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvbXBsL3BvcF9iYWNrX2Z3ZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvcG9wX2JhY2tfZndkLmhwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNzA5NTcwNDZjZDY4MmQ3NzMyZTAwZGM0ZDI1ZGRjYWNhOGM3MTEzYi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcG9wX2JhY2tfZndkLmhwcAorKysg
L2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfUE9QX0JBQ0tf
RldEX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfUE9QX0JBQ0tfRldEX0hQUF9JTkNM
VURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBE
aXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAu
IAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAK
LS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0
cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQK
LS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2Ug
bXBsIHsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBwb3BfYmFja19pbXBsOwot
dGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IHBvcF9iYWNrOwotCi19fQotCi0j
ZW5kaWYgLy8gQk9PU1RfTVBMX1BPUF9CQUNLX0ZXRF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9wb3BfZnJvbnRf
ZndkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9w
b3BfZnJvbnRfZndkLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE5YzhiMjE4
YTc0OTE3YzIyMTY1NjNiNDU2NmZkODQ5MmRmMTFjMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tcGwvcG9wX2Zyb250X2Z3ZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCww
IEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX1BPUF9GUk9OVF9GV0RfSFBQX0lOQ0xVREVECi0jZGVm
aW5lIEJPT1NUX01QTF9QT1BfRlJPTlRfRldEX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQg
QWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlz
aW9uJAotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8IHR5
cGVuYW1lIFRhZyA+IHN0cnVjdCBwb3BfZnJvbnRfaW1wbDsKLXRlbXBsYXRlPCB0eXBlbmFtZSBT
ZXF1ZW5jZSA+IHN0cnVjdCBwb3BfZnJvbnQ7Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExf
UE9QX0ZST05UX0ZXRF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9wcmlvci5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcHJpb3IuaHBwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4NDk4MDJjZmExZWYzNDljN2ZlOTg3OGY4OWRjOTBhYzg1ODYxYzNmLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9wcmlvci5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxOSArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX1BSSU9SX0hQUF9JTkNMVURF
RAotI2RlZmluZSBCT09TVF9NUExfUFJJT1JfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBB
bGVrc2V5IEd1cnRvdm95IDIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwg
Zm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAot
Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL25leHRfcHJpb3IuaHBwPgotCi0jZW5kaWYgLy8gQk9PU1Rf
TVBMX1BSSU9SX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3Byb3RlY3QuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3Byb3RlY3QuaHBwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4MDU3NGMyNzUwMTEzOWM2NDZmODE2YTljMGRlMGFjOGJkNmVkYjM2Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9wcm90ZWN0LmhwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDU1ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfUFJPVEVDVF9IUFBfSU5D
TFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX1BST1RFQ1RfSFBQX0lOQ0xVREVECi0KLS8vIENvcHly
aWdodCBQZXRlciBEaW1vdiAyMDAxCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAy
LTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5z
ZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50
eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK
LS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRp
b24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9v
c3QvbXBsL2F1eF8vYXJpdHkuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9k
dHAuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL250dHBfZGVjbC5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvbXBsL2F1eF8vbmFfc3BlYy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVz
cGFjZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFf
UEFSQU0oVCkKLSAgICAsIGludCBub3RfbGVfID0gMAotICAgID4KLXN0cnVjdCBwcm90ZWN0IDog
VAotewotI2lmIEJPT1NUX1dPUktBUk9VTkQoX19FREdfVkVSU0lPTl9fLCA9PSAyMzgpCi0gICAg
dHlwZWRlZiBtcGw6OnByb3RlY3QgdHlwZTsKLSNlbHNlCi0gICAgdHlwZWRlZiBwcm90ZWN0IHR5
cGU7Ci0jZW5kaWYKLX07Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX01QTF9DRkdfQlJPS0VOX0RFRkFV
TFRfUEFSQU1FVEVSU19JTl9ORVNURURfVEVNUExBVEVTKQotbmFtZXNwYWNlIGF1eCB7IAotdGVt
cGxhdGU8IEJPT1NUX01QTF9BVVhfTlRUUF9ERUNMKGludCwgTiksIHR5cGVuYW1lIFQgPgotc3Ry
dWN0IGFyaXR5PCBwcm90ZWN0PFQ+LCBOID4gCi0gICAgOiBhcml0eTxULE4+Ci17IAotfTsKLX0g
Ly8gbmFtZXNwYWNlIGF1eAotI2VuZGlmCi0KLUJPT1NUX01QTF9BVVhfTkFfU1BFQ19NQUlOKDEs
IHByb3RlY3QpCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19GVUxMX0xBTUJEQV9TVVBQ
T1JUKQotQk9PU1RfTVBMX0FVWF9OQV9TUEVDX1RFTVBMQVRFX0FSSVRZKDEsIDEsIHByb3RlY3Qp
Ci0jZW5kaWYKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9QUk9URUNUX0hQUF9JTkNMVURF
RApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL3B1c2hfYmFjay5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9tcGwvcHVzaF9iYWNrLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVh
MjU4N2JlNmI5ZDBkYTY3NmE0MjYwNmNjMzY1MDAzNTA2OTY3NS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvcHVzaF9iYWNrLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDUzICsw
LDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfUFVTSF9CQUNLX0hQUF9JTkNMVURFRAotI2RlZmlu
ZSBCT09TVF9NUExfUFVTSF9CQUNLX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3Nl
eSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwg
Zm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAot
Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL3B1c2hfYmFja19md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L21wbC9hdXhfL3B1c2hfYmFja19pbXBsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvc2VxdWVu
Y2VfdGFnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9uYV9zcGVjLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9tcGwvYXV4Xy9sYW1iZGFfc3VwcG9ydC5ocHA+Ci0KLW5hbWVzcGFjZSBib29z
dCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01Q
TF9BVVhfTkFfUEFSQU0oU2VxdWVuY2UpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05B
X1BBUkFNKFQpCi0gICAgPgotc3RydWN0IHB1c2hfYmFjawotICAgIDogcHVzaF9iYWNrX2ltcGw8
IHR5cGVuYW1lIHNlcXVlbmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgotICAgICAgICA6OnRlbXBs
YXRlIGFwcGx5PCBTZXF1ZW5jZSxUID4KLXsKLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQ
T1JUKDIscHVzaF9iYWNrLChTZXF1ZW5jZSxUKSkKLX07Ci0KLQotdGVtcGxhdGU8IAotICAgICAg
dHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJBTShTZXF1ZW5jZSkKLSAgICA+Ci1zdHJ1Y3Qg
aGFzX3B1c2hfYmFjawotICAgIDogaGFzX3B1c2hfYmFja19pbXBsPCB0eXBlbmFtZSBzZXF1ZW5j
ZV90YWc8U2VxdWVuY2U+Ojp0eXBlID4KLSAgICAgICAgOjp0ZW1wbGF0ZSBhcHBseTwgU2VxdWVu
Y2UgPgotewotICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlQoMSxoYXNfcHVzaF9iYWNr
LChTZXF1ZW5jZSkpCi19OwotCi0KLUJPT1NUX01QTF9BVVhfTkFfU1BFQygyLCBwdXNoX2JhY2sp
Ci1CT09TVF9NUExfQVVYX05BX1NQRUMoMSwgaGFzX3B1c2hfYmFjaykKLQotfX0KLQotI2VuZGlm
IC8vIEJPT1NUX01QTF9QVVNIX0JBQ0tfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcHVzaF9iYWNrX2Z3ZC5ocHAg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcHVzaF9iYWNr
X2Z3ZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhNGY3YTc1NGFjZjZjZWUz
MGJlYzBhYWI4NWE1YmQ3MzFhMGZlYTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL3B1c2hfYmFja19md2QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotCi0j
aWZuZGVmIEJPT1NUX01QTF9QVVNIX0JBQ0tfRldEX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09T
VF9NUExfUFVTSF9CQUNLX0ZXRF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkg
R3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNv
ZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUg
TElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNF
TlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZv
ciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQot
bmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBU
YWcgPiBzdHJ1Y3QgcHVzaF9iYWNrX2ltcGw7Ci10ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2Us
IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcHVzaF9iYWNrOwotCi19fQotCi0jZW5kaWYgLy8gQk9PU1Rf
TVBMX1BVU0hfQkFDS19GV0RfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcHVzaF9mcm9udC5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcHVzaF9mcm9udC5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ZDBkZmI3ZmI5YmEzZWNkNDc5MGZlYWJkNzRk
ZTRmZWExNGViNGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3B1c2hfZnJv
bnQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01Q
TF9QVVNIX0ZST05UX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfUFVTSF9GUk9OVF9I
UFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0v
LwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNp
b24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8g
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0v
LyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9w
dXNoX2Zyb250X2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vcHVzaF9mcm9udF9p
bXBsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvc2VxdWVuY2VfdGFnLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9tcGwvYXV4Xy9uYV9zcGVjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9s
YW1iZGFfc3VwcG9ydC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewot
Ci10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oU2VxdWVu
Y2UpCi0gICAgLCB0eXBlbmFtZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKFQpCi0gICAgPgotc3Ry
dWN0IHB1c2hfZnJvbnQKLSAgICA6IHB1c2hfZnJvbnRfaW1wbDwgdHlwZW5hbWUgc2VxdWVuY2Vf
dGFnPFNlcXVlbmNlPjo6dHlwZSA+Ci0gICAgICAgIDo6dGVtcGxhdGUgYXBwbHk8IFNlcXVlbmNl
LFQgPgotewotICAgIEJPT1NUX01QTF9BVVhfTEFNQkRBX1NVUFBPUlQoMixwdXNoX2Zyb250LChT
ZXF1ZW5jZSxUKSkKLX07Ci0KLQotdGVtcGxhdGU8IAotICAgICAgdHlwZW5hbWUgQk9PU1RfTVBM
X0FVWF9OQV9QQVJBTShTZXF1ZW5jZSkKLSAgICA+Ci1zdHJ1Y3QgaGFzX3B1c2hfZnJvbnQKLSAg
ICA6IGhhc19wdXNoX2Zyb250X2ltcGw8IHR5cGVuYW1lIHNlcXVlbmNlX3RhZzxTZXF1ZW5jZT46
OnR5cGUgPgotICAgICAgICA6OnRlbXBsYXRlIGFwcGx5PCBTZXF1ZW5jZSA+Ci17Ci0gICAgQk9P
U1RfTVBMX0FVWF9MQU1CREFfU1VQUE9SVCgxLGhhc19wdXNoX2Zyb250LChTZXF1ZW5jZSkpCi19
OwotCi1CT09TVF9NUExfQVVYX05BX1NQRUMoMiwgcHVzaF9mcm9udCkKLUJPT1NUX01QTF9BVVhf
TkFfU1BFQygxLCBoYXNfcHVzaF9mcm9udCkKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9Q
VVNIX0ZST05UX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3B1c2hfZnJvbnRfZndkLmhwcCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9wdXNoX2Zyb250X2Z3ZC5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YWQ1YWY1NzJiZDljMWI0NGVhN2NhZjNiYzY4
YzEyNzIxOTExZjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3B1c2hfZnJv
bnRfZndkLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLQotI2lmbmRlZiBCT09T
VF9NUExfUFVTSF9GUk9OVF9GV0RfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9QVVNI
X0ZST05UX0ZXRF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kg
MjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVu
dGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotbmFtZXNwYWNl
IGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1
Y3QgcHVzaF9mcm9udF9pbXBsOwotdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlLCB0eXBlbmFt
ZSBUID4gc3RydWN0IHB1c2hfZnJvbnQ7Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfUFVT
SF9GUk9OVF9GV0RfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcXVvdGUuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3F1b3RlLmhwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMjQyYzJlN2FmYjQwMTYyNjIyMmJmOWU4MzNlYmI5Y2FkMTE4M2JkZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcXVvdGUuaHBwCisrKyAvZGV2L251bGwK
QEAgLTEsMTUxICswLDAgQEAKLQotI2lmICFkZWZpbmVkKEJPT1NUX1BQX0lTX0lURVJBVElORykK
LQotLy8vLy8gaGVhZGVyIGJvZHkKLQotI2lmbmRlZiBCT09TVF9NUExfUVVPVEVfSFBQX0lOQ0xV
REVECi0jZGVmaW5lIEJPT1NUX01QTF9RVU9URV9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0
IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA4Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55
aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xp
YnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZp
c2lvbiQKLQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi0jICAg
aW5jbHVkZSA8Ym9vc3QvbXBsL3ZvaWQuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhf
L2hhc190eXBlLmhwcD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmln
L2JjYy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3R0cC5ocHA+Ci0KLSNp
ZiBkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fVEVNUExBVEVfVEVNUExBVEVfUEFSQU1FVEVSUykg
XAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfQkNDNTkwX1dPUktBUk9VTkRTKQotIyAg
IGRlZmluZSBCT09TVF9NUExfQ0ZHX05PX1FVT1RFX1RFTVBMQVRFCi0jZW5kaWYKLQotI2lmICFk
ZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fSU1QTElDSVRfTUVUQUZVTkNUSU9OUykgXAotICAgICYm
IGRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19IQVNfWFhYKQotIyAgIGRlZmluZSBCT09TVF9NUExf
Q0ZHX05PX0lNUExJQ0lUX01FVEFGVU5DVElPTlMKLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2F1eF8vY29uZmlnL3VzZV9wcmVwcm9jZXNzZWQuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9P
U1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVSUykgXAotICYmICFkZWZpbmVkKEJPT1NU
X01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BSRVBST0NF
U1NFRF9IRUFERVIgcXVvdGUuaHBwCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vaW5jbHVk
ZV9wcmVwcm9jZXNzZWQuaHBwPgotCi0jZWxzZQotCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2xp
bWl0cy9hcml0eS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29y
L3BhcmFtcy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2N0cHMuaHBw
PgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5kLmhwcD4KLQot
IyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9pdGVyYXRlLmhwcD4KLSMgICBpbmNsdWRl
IDxib29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcD4KLQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9D
RkdfTk9fUVVPVEVfVEVNUExBVEUpCi0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwg
ewotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpBVElP
TikKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFQsIGJvb2wgaGFzX3R5cGVfID4KLXN0cnVjdCBxdW90
ZV9pbXBsCi0vLyBHQ0MgaGFzIGEgcHJvYmxlbSB3aXRoIG1ldGFmdW5jdGlvbiBmb3J3YXJkaW5n
IHdoZW4gVCBpcyBhCi0vLyBzcGVjaWFsaXphdGlvbiBvZiBhIHRlbXBsYXRlIGNhbGxlZCAndHlw
ZScuCi0jIGlmIEJPT1NUX1dPUktBUk9VTkQoX19HTlVDX18sIEJPT1NUX1RFU1RFRF9BVCg0KSkg
XAotICAgICYmIEJPT1NUX1dPUktBUk9VTkQoX19HTlVDX01JTk9SX18sIEJPT1NUX1RFU1RFRF9B
VCgwKSkgXAotICAgICYmIEJPT1NUX1dPUktBUk9VTkQoX19HTlVDX1BBVENITEVWRUxfXywgQk9P
U1RfVEVTVEVEX0FUKDIpKQotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgVDo6dHlwZSB0eXBlOwot
fTsKLSMgZWxzZSAKLSAgICA6IFQKLXsKLX07Ci0jIGVuZGlmIAotCi10ZW1wbGF0ZTwgdHlwZW5h
bWUgVCA+Ci1zdHJ1Y3QgcXVvdGVfaW1wbDxULGZhbHNlPgotewotICAgIHR5cGVkZWYgVCB0eXBl
OwotfTsKLQotI2Vsc2UgLy8gQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpBVElP
TgotCi10ZW1wbGF0ZTwgYm9vbCA+IHN0cnVjdCBxdW90ZV9pbXBsCi17Ci0gICAgdGVtcGxhdGU8
IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcmVzdWx0XwotICAgICAgICA6IFQKLSAgICB7Ci0gICAgfTsK
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IHF1b3RlX2ltcGw8ZmFsc2U+Ci17Ci0gICAgdGVtcGxh
dGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcmVzdWx0XwotICAgIHsKLSAgICAgICAgdHlwZWRlZiBU
IHR5cGU7Ci0gICAgfTsKLX07Ci0KLSNlbmRpZiAKLQotI2RlZmluZSBCT09TVF9QUF9JVEVSQVRJ
T05fUEFSQU1TXzEgXAotICAgICgzLCgxLCBCT09TVF9NUExfTElNSVRfTUVUQUZVTkNUSU9OX0FS
SVRZLCA8Ym9vc3QvbXBsL3F1b3RlLmhwcD4pKQotI2luY2x1ZGUgQk9PU1RfUFBfSVRFUkFURSgp
Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQ0ZHX05PX1FVT1RFX1RFTVBMQVRFCi0KLSNl
bmRpZiAvLyBCT09TVF9NUExfQ0ZHX05PX1BSRVBST0NFU1NFRF9IRUFERVJTCi0jZW5kaWYgLy8g
Qk9PU1RfTVBMX1FVT1RFX0hQUF9JTkNMVURFRAotCi0vLy8vLyBpdGVyYXRpb24KLQotI2Vsc2UK
LSNkZWZpbmUgaV8gQk9PU1RfUFBfRlJBTUVfSVRFUkFUSU9OKDEpCi0KLXRlbXBsYXRlPAotICAg
ICAgdGVtcGxhdGU8IEJPT1NUX01QTF9QUF9QQVJBTVMoaV8sIHR5cGVuYW1lIFApID4gY2xhc3Mg
RgotICAgICwgdHlwZW5hbWUgVGFnID0gdm9pZF8KLSAgICA+Ci1zdHJ1Y3QgQk9PU1RfUFBfQ0FU
KHF1b3RlLGlfKQotewotICAgIHRlbXBsYXRlPCBCT09TVF9NUExfUFBfUEFSQU1TKGlfLCB0eXBl
bmFtZSBVKSA+IHN0cnVjdCBhcHBseQotI2lmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19CQ0M1OTBf
V09SS0FST1VORFMpCi0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHF1b3RlX2ltcGw8
Ci0gICAgICAgICAgICAgIEY8IEJPT1NUX01QTF9QUF9QQVJBTVMoaV8sIFUpID4KLSAgICAgICAg
ICAgICwgYXV4OjpoYXNfdHlwZTwgRjwgQk9PU1RfTVBMX1BQX1BBUkFNUyhpXywgVSkgPiA+Ojp2
YWx1ZQotICAgICAgICAgICAgPjo6dHlwZSB0eXBlOwotICAgIH07Ci0jZWxpZiAhZGVmaW5lZChC
T09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OKQotICAgICAgICA6IHF1b3Rl
X2ltcGw8Ci0gICAgICAgICAgICAgIEY8IEJPT1NUX01QTF9QUF9QQVJBTVMoaV8sIFUpID4KLSAg
ICAgICAgICAgICwgYXV4OjpoYXNfdHlwZTwgRjwgQk9PU1RfTVBMX1BQX1BBUkFNUyhpXywgVSkg
PiA+Ojp2YWx1ZQotICAgICAgICAgICAgPgotICAgIHsKLSAgICB9OwotI2Vsc2UKLSAgICAgICAg
OiBxdW90ZV9pbXBsPCBhdXg6Omhhc190eXBlPCBGPCBCT09TVF9NUExfUFBfUEFSQU1TKGlfLCBV
KSA+ID46OnZhbHVlID4KLSAgICAgICAgICAgIDo6dGVtcGxhdGUgcmVzdWx0XzwgRjwgQk9PU1Rf
TVBMX1BQX1BBUkFNUyhpXywgVSkgPiA+Ci0gICAgewotICAgIH07Ci0jZW5kaWYKLX07Ci0KLSN1
bmRlZiBpXwotI2VuZGlmIC8vIEJPT1NUX1BQX0lTX0lURVJBVElORwpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3JlbW92ZS5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcmVtb3ZlLmhwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM3MmY5ZTZmZTc2ZGFlZmFjODVkMDg5MDNh
M2Y5NjZmMDhjOGQ5Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcmVtb3Zl
LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExf
UkVNT1ZFX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfUkVNT1ZFX0hQUF9JTkNMVURF
RAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vIENvcHlyaWdo
dCBEYXZpZCBBYnJhaGFtcyAyMDAzLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlz
aW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL3JlbW92ZV9pZi5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvbXBsL3NhbWVfYXMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2luc2VydGVyX2Fs
Z29yaXRobS5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi1uYW1l
c3BhY2UgYXV4IHsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBTZXF1ZW5jZQotICAgICwg
dHlwZW5hbWUgVAotICAgICwgdHlwZW5hbWUgSW5zZXJ0ZXIgCi0gICAgPgotc3RydWN0IHJlbW92
ZV9pbXBsCi0gICAgOiByZW1vdmVfaWZfaW1wbDwgU2VxdWVuY2UsIHNhbWVfYXM8VD4sIEluc2Vy
dGVyID4KLXsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgU2VxdWVuY2UKLSAgICAs
IHR5cGVuYW1lIFQKLSAgICAsIHR5cGVuYW1lIEluc2VydGVyIAotICAgID4KLXN0cnVjdCByZXZl
cnNlX3JlbW92ZV9pbXBsCi0gICAgOiByZXZlcnNlX3JlbW92ZV9pZl9pbXBsPCBTZXF1ZW5jZSwg
c2FtZV9hczxUPiwgSW5zZXJ0ZXIgPgotewotfTsKLQotfSAvLyBuYW1lc3BhY2UgYXV4Ci0KLUJP
T1NUX01QTF9BVVhfSU5TRVJURVJfQUxHT1JJVEhNX0RFRigzLCByZW1vdmUpCi0KLX19Ci0KLSNl
bmRpZiAvLyBCT09TVF9NUExfUkVNT1ZFX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3JlbW92ZV9pZi5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcmVtb3ZlX2lmLmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJlNjU2NGIwOTQ5ZTI2NzNmYmNhNWQz
NGQ3YmIwNTU0ZDQ0MzE4Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvcmVt
b3ZlX2lmLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLQotI2lmbmRlZiBCT09T
VF9NUExfUkVNT1ZFX0lGX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfUkVNT1ZFX0lG
X0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQK
LS8vIENvcHlyaWdodCBEYXZpZCBBYnJhaGFtcyAyMDAzLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNl
ZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5i
b29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRl
JAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2ZvbGQuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21wbC9yZXZlcnNlX2ZvbGQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9ldmFs
X2lmLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvaWRlbnRpdHkuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L21wbC9wcm90ZWN0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvbGFtYmRhLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9tcGwvYXBwbHkuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2lu
c2VydGVyX2FsZ29yaXRobS5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwg
ewotCi1uYW1lc3BhY2UgYXV4IHsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFByZWQsIHR5cGVuYW1l
IEluc2VydE9wID4gc3RydWN0IHJlbW92ZV9pZl9oZWxwZXIKLXsKLSAgICB0ZW1wbGF0ZTwgdHlw
ZW5hbWUgU2VxdWVuY2UsIHR5cGVuYW1lIFUgPiBzdHJ1Y3QgYXBwbHkKLSAgICB7Ci0gICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgZXZhbF9pZjwKLSAgICAgICAgICAgICAgdHlwZW5hbWUgYXBwbHkx
PFByZWQsVT46OnR5cGUKLSAgICAgICAgICAgICwgaWRlbnRpdHk8U2VxdWVuY2U+Ci0gICAgICAg
ICAgICAsIGFwcGx5MjxJbnNlcnRPcCxTZXF1ZW5jZSxVPgotICAgICAgICAgICAgPjo6dHlwZSB0
eXBlOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFNlcXVlbmNlCi0g
ICAgLCB0eXBlbmFtZSBQcmVkaWNhdGUKLSAgICAsIHR5cGVuYW1lIEluc2VydGVyCi0gICAgPgot
c3RydWN0IHJlbW92ZV9pZl9pbXBsCi0gICAgOiBmb2xkPAotICAgICAgICAgIFNlcXVlbmNlCi0g
ICAgICAgICwgdHlwZW5hbWUgSW5zZXJ0ZXI6OnN0YXRlCi0gICAgICAgICwgcHJvdGVjdDwgYXV4
OjpyZW1vdmVfaWZfaGVscGVyPAotICAgICAgICAgICAgICB0eXBlbmFtZSBsYW1iZGE8UHJlZGlj
YXRlPjo6dHlwZQotICAgICAgICAgICAgLCB0eXBlbmFtZSBJbnNlcnRlcjo6b3BlcmF0aW9uCi0g
ICAgICAgICAgICA+ID4KLSAgICAgICAgPgotewotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBl
bmFtZSBTZXF1ZW5jZQotICAgICwgdHlwZW5hbWUgUHJlZGljYXRlCi0gICAgLCB0eXBlbmFtZSBJ
bnNlcnRlcgotICAgID4KLXN0cnVjdCByZXZlcnNlX3JlbW92ZV9pZl9pbXBsCi0gICAgOiByZXZl
cnNlX2ZvbGQ8Ci0gICAgICAgICAgU2VxdWVuY2UKLSAgICAgICAgLCB0eXBlbmFtZSBJbnNlcnRl
cjo6c3RhdGUKLSAgICAgICAgLCBwcm90ZWN0PCBhdXg6OnJlbW92ZV9pZl9oZWxwZXI8Ci0gICAg
ICAgICAgICAgIHR5cGVuYW1lIGxhbWJkYTxQcmVkaWNhdGU+Ojp0eXBlCi0gICAgICAgICAgICAs
IHR5cGVuYW1lIEluc2VydGVyOjpvcGVyYXRpb24KLSAgICAgICAgICAgID4gPgotICAgICAgICA+
Ci17Ci19OwotCi19IC8vIG5hbWVzcGFjZSBhdXgKLQotQk9PU1RfTVBMX0FVWF9JTlNFUlRFUl9B
TEdPUklUSE1fREVGKDMsIHJlbW92ZV9pZikKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9S
RU1PVkVfSUZfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvcmV2ZXJzZV9mb2xkLmhwcCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9yZXZlcnNlX2ZvbGQuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2MyNmE5YTg0NWM1MWEzMTFkOWIzMGJmYzQxOWI0MzRi
ZTNkNWYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9yZXZlcnNlX2ZvbGQu
aHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9S
RVZFUlNFX0ZPTERfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9SRVZFUlNFX0ZPTERf
SFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDEtMjAwNAot
Ly8gQ29weXJpZ2h0IERhdmlkIEFicmFoYW1zIDIwMDEtMjAwMgotLy8KLS8vIERpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2Vl
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDov
L3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUk
Ci0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYmVnaW5fZW5kLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9tcGwvTzFfc2l6ZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2FyZy5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vcmV2ZXJzZV9mb2xkX2ltcGwuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hX3NwZWMuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBu
YW1lc3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09TVF9NUExfQVVY
X05BX1BBUkFNKFNlcXVlbmNlKQotICAgICwgdHlwZW5hbWUgQk9PU1RfTVBMX0FVWF9OQV9QQVJB
TShTdGF0ZSkKLSAgICAsIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFfUEFSQU0oQmFja3dhcmRP
cCkKLSAgICAsIHR5cGVuYW1lIEZvcndhcmRPcCA9IGFyZzwxPgotICAgID4KLXN0cnVjdCByZXZl
cnNlX2ZvbGQKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6cmV2ZXJzZV9mb2xkX2ltcGw8
Ci0gICAgICAgICAgOjpib29zdDo6bXBsOjpPMV9zaXplPFNlcXVlbmNlPjo6dmFsdWUKLSAgICAg
ICAgLCB0eXBlbmFtZSBiZWdpbjxTZXF1ZW5jZT46OnR5cGUKLSAgICAgICAgLCB0eXBlbmFtZSBl
bmQ8U2VxdWVuY2U+Ojp0eXBlCi0gICAgICAgICwgU3RhdGUKLSAgICAgICAgLCBCYWNrd2FyZE9w
Ci0gICAgICAgICwgRm9yd2FyZE9wCi0gICAgICAgID46OnN0YXRlIHR5cGU7Ci0KLSAgICBCT09T
VF9NUExfQVVYX0xBTUJEQV9TVVBQT1JUKDMscmV2ZXJzZV9mb2xkLChTZXF1ZW5jZSxTdGF0ZSxC
YWNrd2FyZE9wKSkKLX07Ci0KLUJPT1NUX01QTF9BVVhfTkFfU1BFQygzLCByZXZlcnNlX2ZvbGQp
Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfUkVWRVJTRV9GT0xEX0hQUF9JTkNMVURFRApk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L3NhbWVfYXMuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL3NhbWVfYXMuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmUyMGJjMzNl
OTk3YWJhODg4NzAxNmE4OWYyYzU0ZWVlMzhmMTk4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC9zYW1lX2FzLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLQot
I2lmbmRlZiBCT09TVF9NUExfU0FNRV9BU19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBM
X1NBTUVfQVNfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIw
MDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNl
bnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8w
LnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0
KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRh
dGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxi
b29zdC9tcGwvbm90LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9sYW1iZGFfc3BlYy5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2ZvcndhcmRpbmcuaHBwPgotCi0j
aW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHA+Ci0KLW5hbWVzcGFjZSBib29z
dCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVDEgPgotc3RydWN0IHNh
bWVfYXMKLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDIgPiBzdHJ1Y3QgYXBwbHkKLSNpZiAh
ZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX05FU1RFRF9GT1JXQVJESU5HKQotICAgICAgICA6IGlz
X3NhbWU8VDEsVDI+Ci0gICAgewotI2Vsc2UKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXNfc2FtZTxUMSxUMj46OnR5cGUgdHlwZTsKLSNlbmRpZgotICAgIH07Ci19OwotCi10ZW1w
bGF0ZTwgdHlwZW5hbWUgVDEgPgotc3RydWN0IG5vdF9zYW1lX2FzCi17Ci0gICAgdGVtcGxhdGU8
IHR5cGVuYW1lIFQyID4gc3RydWN0IGFwcGx5Ci0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19O
T19ORVNURURfRk9SV0FSRElORykKLSAgICAgICAgOiBub3RfPCBpc19zYW1lPFQxLFQyPiA+Ci0g
ICAgewotI2Vsc2UKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbm90XzwgaXNfc2Ft
ZTxUMSxUMj4gPjo6dHlwZSB0eXBlOwotI2VuZGlmCi0gICAgfTsKLX07Ci0KLX19Ci0KLSNlbmRp
ZiAvLyBCT09TVF9NUExfU0FNRV9BU19IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC9zZXF1ZW5jZV90YWcuaHBwIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3NlcXVlbmNlX3Rh
Zy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4N2Q5MmIyOGI1ZWJhNGU1YmM0
ZGE1MDNlYzY5MDdmYTQ4NWNjY2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L3NlcXVlbmNlX3RhZy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotCi0jaWZu
ZGVmIEJPT1NUX01QTF9TRVFVRU5DRV9UQUdfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01Q
TF9TRVFVRU5DRV9UQUdfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRv
dm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8x
XzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9j
dW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNs
dWRlIDxib29zdC9tcGwvc2VxdWVuY2VfdGFnX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBs
L2F1eF8vaGFzX3RhZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vaGFzX2JlZ2luLmhw
cD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9uYV9zcGVjLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9tcGwvYXV4Xy9pc19tc3ZjX2V0aV9hcmcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhf
L2NvbmZpZy9ldGkuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3llc19uby5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3dvcmthcm91bmQuaHBwPgotCi1uYW1lc3Bh
Y2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotLy8gYWd1cnQsIDI3L25vdi8wMjogaGF2ZSB0
byB1c2UgYSBzaW1wbGlzdGljICdzZXF1ZW5jZV90YWcnIGltcGxlbWVudGF0aW9uCi0vLyBvbiBN
U1ZDIHRvIGF2b2lkIGRyZWFkZnVsICJpbnRlcm5hbCBzdHJ1Y3R1cmUgb3ZlcmZsb3ciIGVycm9y
Ci0jaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8IDEzMDApIFwKLSAgICB8fCBkZWZp
bmVkKEJPT1NUX01QTF9DRkdfTk9fSEFTX1hYWCkKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFt
ZSBCT09TVF9NUExfQVVYX05BX1BBUkFNKFNlcXVlbmNlKQotICAgID4KLXN0cnVjdCBzZXF1ZW5j
ZV90YWcKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFNlcXVlbmNlOjp0YWcgdHlwZTsKLX07Ci0K
LSNlbGlmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPT0gMTMwMCkKLQotLy8gYWd1cnQs
IDA3L2ZlYi8wMzogd29ya2Fyb3VuZCBmb3Igd2hhdCBzZWVtcyB0byBiZSBNU1ZDIDcuMC1zcGVj
aWZpYyBFVEkgaXNzdWUKLQotbmFtZXNwYWNlIGF1eCB7Ci0KLXRlbXBsYXRlPCBib29sID4KLXN0
cnVjdCBzZXF1ZW5jZV90YWdfaW1wbAotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5j
ZSA+IHN0cnVjdCByZXN1bHRfCi0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFNlcXVl
bmNlOjp0YWcgdHlwZTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IHNlcXVlbmNl
X3RhZ19pbXBsPGZhbHNlPgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0
cnVjdCByZXN1bHRfCi0gICAgewotICAgICAgICB0eXBlZGVmIGludCB0eXBlOwotICAgIH07Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBhdXgKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBCT09T
VF9NUExfQVVYX05BX1BBUkFNKFNlcXVlbmNlKQotICAgID4KLXN0cnVjdCBzZXF1ZW5jZV90YWcK
LSAgICA6IGF1eDo6c2VxdWVuY2VfdGFnX2ltcGw8ICFhdXg6OmlzX21zdmNfZXRpX2FyZzxTZXF1
ZW5jZT46OnZhbHVlID4KLSAgICAgICAgOjp0ZW1wbGF0ZSByZXN1bHRfPFNlcXVlbmNlPgotewot
fTsKLQotI2Vsc2UKLQotbmFtZXNwYWNlIGF1eCB7Ci0KLXRlbXBsYXRlPCBib29sIGhhc190YWdf
LCBib29sIGhhc19iZWdpbl8gPgotc3RydWN0IHNlcXVlbmNlX3RhZ19pbXBsCi17Ci0gICAgLy8g
YWd1cnQgMjQvbm92LzAyOiBNU1ZDIDYuNSBnZXRzIGNvbmZ1c2VkIGluICdzZXF1ZW5jZV90YWdf
aW1wbDx0cnVlPicgCi0gICAgLy8gc3BlY2lhbGl6YXRpb24gYmVsb3csIGlmIHdlIG5hbWUgaXQg
J3Jlc3VsdF8nIGhlcmUKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UgPiBzdHJ1Y3Qg
cmVzdWx0Ml87Ci19OwotCi0jICAgZGVmaW5lIEFVWF9DTEFTU19TRVFVRU5DRV9UQUdfU1BFQyho
YXNfdGFnLCBoYXNfYmVnaW4sIHJlc3VsdF90eXBlKSBcCi10ZW1wbGF0ZTw+IHN0cnVjdCBzZXF1
ZW5jZV90YWdfaW1wbDxoYXNfdGFnLGhhc19iZWdpbj4gXAoteyBcCi0gICAgdGVtcGxhdGU8IHR5
cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IHJlc3VsdDJfIFwKLSAgICB7IFwKLSAgICAgICAgdHlw
ZWRlZiByZXN1bHRfdHlwZSB0eXBlOyBcCi0gICAgfTsgXAotfTsgXAotLyoqLwotCi1BVVhfQ0xB
U1NfU0VRVUVOQ0VfVEFHX1NQRUModHJ1ZSwgdHJ1ZSwgdHlwZW5hbWUgU2VxdWVuY2U6OnRhZykK
LUFVWF9DTEFTU19TRVFVRU5DRV9UQUdfU1BFQyh0cnVlLCBmYWxzZSwgdHlwZW5hbWUgU2VxdWVu
Y2U6OnRhZykKLUFVWF9DTEFTU19TRVFVRU5DRV9UQUdfU1BFQyhmYWxzZSwgdHJ1ZSwgbmVzdGVk
X2JlZ2luX2VuZF90YWcpCi1BVVhfQ0xBU1NfU0VRVUVOQ0VfVEFHX1NQRUMoZmFsc2UsIGZhbHNl
LCBub25fc2VxdWVuY2VfdGFnKQotCi0jICAgdW5kZWYgQVVYX0NMQVNTX1NFUVVFTkNFX1RBR19T
UEVDCi0KLX0gLy8gbmFtZXNwYWNlIGF1eAotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJP
T1NUX01QTF9BVVhfTkFfUEFSQU0oU2VxdWVuY2UpCi0gICAgPgotc3RydWN0IHNlcXVlbmNlX3Rh
ZwotICAgIDogYXV4OjpzZXF1ZW5jZV90YWdfaW1wbDwKLSAgICAgICAgICA6OmJvb3N0OjptcGw6
OmF1eDo6aGFzX3RhZzxTZXF1ZW5jZT46OnZhbHVlCi0gICAgICAgICwgOjpib29zdDo6bXBsOjph
dXg6Omhhc19iZWdpbjxTZXF1ZW5jZT46OnZhbHVlCi0gICAgICAgID46OnRlbXBsYXRlIHJlc3Vs
dDJfPFNlcXVlbmNlPgotewotfTsKLQotI2VuZGlmIC8vIEJPT1NUX01TVkMKLQotQk9PU1RfTVBM
X0FVWF9OQV9TUEVDKDEsIHNlcXVlbmNlX3RhZykKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01Q
TF9TRVFVRU5DRV9UQUdfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvc2VxdWVuY2VfdGFnX2Z3ZC5ocHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvc2VxdWVuY2VfdGFnX2Z3
ZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMGVkNmY2YjcwYzFjMTdjNjc3
MTYyYWFmYWI0NTM5ZTIzMmJiZGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L3NlcXVlbmNlX3RhZ19md2QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotCi0j
aWZuZGVmIEJPT1NUX01QTF9TRVFVRU5DRV9UQUdfRldEX0hQUF9JTkNMVURFRAotI2RlZmluZSBC
T09TVF9NUExfU0VRVUVOQ0VfVEFHX0ZXRF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFs
ZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJv
b3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMv
bXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lv
biQKLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXN0cnVjdCBuZXN0ZWRf
YmVnaW5fZW5kX3RhZzsKLXN0cnVjdCBub25fc2VxdWVuY2VfdGFnOwotCi10ZW1wbGF0ZTwgdHlw
ZW5hbWUgU2VxdWVuY2UgPiBzdHJ1Y3Qgc2VxdWVuY2VfdGFnOwotCi19fQotCi0jZW5kaWYgLy8g
Qk9PU1RfTVBMX1NFUVVFTkNFX1RBR19GV0RfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvc2l6ZS5ocHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvc2l6ZS5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZmZlZmJiNzhjYjA4M2UzMjdhOTI1ZDM5MTA5M2Qx
OGFlZDNjZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3NpemUuaHBwCisr
KyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9TSVpFX0hQ
UF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfU0laRV9IUFBfSU5DTFVERUQKLQotLy8gQ29w
eXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNj
b21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8v
ICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0L21wbC9zaXplX2Z3ZC5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvbXBsL3NlcXVlbmNlX3RhZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8v
c2l6ZV9pbXBsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9uYV9zcGVjLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9tcGwvYXV4Xy9sYW1iZGFfc3VwcG9ydC5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvbXBsL2F1eF8vbXN2Y19ldGlfYmFzZS5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVz
cGFjZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIEJPT1NUX01QTF9BVVhfTkFf
UEFSQU0oU2VxdWVuY2UpCi0gICAgPgotc3RydWN0IHNpemUKLSAgICA6IGF1eDo6bXN2Y19ldGlf
YmFzZTwKLSAgICAgICAgdHlwZW5hbWUgc2l6ZV9pbXBsPCB0eXBlbmFtZSBzZXF1ZW5jZV90YWc8
U2VxdWVuY2U+Ojp0eXBlID4KLSAgICAgICAgICAgIDo6dGVtcGxhdGUgYXBwbHk8IFNlcXVlbmNl
ID46OnR5cGUKLSAgICAgID46OnR5cGUKLXsKLSAgICBCT09TVF9NUExfQVVYX0xBTUJEQV9TVVBQ
T1JUKDEsIHNpemUsIChTZXF1ZW5jZSkpCi19OwotCi1CT09TVF9NUExfQVVYX05BX1NQRUMoMSwg
c2l6ZSkKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9TSVpFX0hQUF9JTkNMVURFRApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3Np
emVfZndkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21w
bC9zaXplX2Z3ZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MjYyOGRkMWU4
YzdiNjhmY2YzMDU4NWFmMGZkMDM0MmRlMGFlMmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL3NpemVfZndkLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLQot
I2lmbmRlZiBCT09TVF9NUExfU0laRV9GV0RfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01Q
TF9TSVpFX0ZXRF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kg
MjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVu
dGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotbmFtZXNwYWNl
IGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1
Y3Qgc2l6ZV9pbXBsOwotdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IHNpemU7
Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfU0laRV9GV0RfSFBQX0lOQ0xVREVECmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvdGFn
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC90YWcu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTg2Mjc3NTNkODk2MWE1NzVjMjAz
ZWQ4Y2U4ZTAwOWVlNjEwNGJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC90
YWcuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01Q
TF9UQUdfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9UQUdfSFBQX0lOQ0xVREVECi0K
LS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1
bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29z
dC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAot
Ly8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2V2YWxfaWYuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21wbC92b2lkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9oYXNfdGFn
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvZXRpLmhwcD4KLQotbmFtZXNw
YWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLW5hbWVzcGFjZSBhdXggewotdGVtcGxhdGU8
IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgdGFnX2ltcGwKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFQ6
OnRhZyB0eXBlOwotfTsKLX0KLQotdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHR5cGVuYW1lIERlZmF1
bHQgPSB2b2lkXyA+IHN0cnVjdCB0YWcKLSNpZiAhZGVmaW5lZChCT09TVF9NUExfQ0ZHX01TVkNf
RVRJX0JVRykKLSAgICA6IGlmXzwgCi0gICAgICAgICAgYXV4OjpoYXNfdGFnPFQ+Ci0gICAgICAg
ICwgYXV4Ojp0YWdfaW1wbDxUPgotICAgICAgICAsIERlZmF1bHQKLSAgICAgICAgPjo6dHlwZQot
ewotI2Vsc2UKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGV2YWxfaWY8IAotICAgICAgICAgIGF1
eDo6aGFzX3RhZzxUPgotICAgICAgICAsIGF1eDo6dGFnX2ltcGw8VD4KLSAgICAgICAgLCBEZWZh
dWx0Ci0gICAgICAgID46OnR5cGUgdHlwZTsKLQotI2VuZGlmCi19OwotCi19fQotCi0jZW5kaWYg
Ly8gQk9PU1RfTVBMX1RBR19IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IuaHBwIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci5ocHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQ3OTk4M2Q1Y2UzNGU4NmZmNmE3NzhjZmVkZjliNjNlNTIyOTNk
OGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci5ocHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX1ZFQ1RPUl9IUFBf
SU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX1ZFQ1RPUl9IUFBfSU5DTFVERUQKLQotLy8gQ29w
eXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNj
b21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8v
ICRSZXZpc2lvbiQKLQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUp
Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL2xpbWl0cy92ZWN0b3IuaHBwPgotIyAgIGluY2x1ZGUg
PGJvb3N0L21wbC9hdXhfL25hLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25m
aWcvcHJlcHJvY2Vzc29yLmhwcD4KLQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9p
bmMuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgotIyAgIGlu
Y2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9zdHJpbmdpemUuaHBwPgotCi0jaWYgIWRlZmluZWQo
Qk9PU1RfTkVFRFNfVE9LRU5fUEFTVElOR19PUF9GT1JfVE9LRU5TX0pVWFRBUE9TSU5HKQotIyAg
IGRlZmluZSBBVVg3NzgwNzZfVkVDVE9SX0hFQURFUiBcCi0gICAgQk9PU1RfUFBfQ0FUKHZlY3Rv
ciwgQk9PU1RfTVBMX0xJTUlUX1ZFQ1RPUl9TSVpFKS5ocHAgXAotICAgIC8qKi8KLSNlbHNlCi0j
ICAgZGVmaW5lIEFVWDc3ODA3Nl9WRUNUT1JfSEVBREVSIFwKLSAgICBCT09TVF9QUF9DQVQodmVj
dG9yLCBCT09TVF9NUExfTElNSVRfVkVDVE9SX1NJWkUpIyMuaHBwIFwKLSAgICAvKiovCi0jZW5k
aWYKLQotIyAgIGluY2x1ZGUgQk9PU1RfUFBfU1RSSU5HSVpFKGJvb3N0L21wbC92ZWN0b3IvQVVY
Nzc4MDc2X1ZFQ1RPUl9IRUFERVIpCi0jICAgdW5kZWYgQVVYNzc4MDc2X1ZFQ1RPUl9IRUFERVIK
LSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3VzZV9wcmVwcm9jZXNz
ZWQuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVB
REVSUykgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi0K
LSMgICBkZWZpbmUgQk9PU1RfTVBMX1BSRVBST0NFU1NFRF9IRUFERVIgdmVjdG9yLmhwcAotIyAg
IGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcD4KLQotI2Vs
c2UKLQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9saW1pdHMvdmVjdG9yLmhwcD4KLQotIyAgIGRl
ZmluZSBBVVg3NzgwNzZfU0VRVUVOQ0VfTkFNRSB2ZWN0b3IKLSMgICBkZWZpbmUgQVVYNzc4MDc2
X1NFUVVFTkNFX0xJTUlUIEJPT1NUX01QTF9MSU1JVF9WRUNUT1JfU0laRQotIyAgIGluY2x1ZGUg
PGJvb3N0L21wbC9hdXhfL3NlcXVlbmNlX3dyYXBwZXIuaHBwPgotCi0jZW5kaWYgLy8gQk9PU1Rf
TVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVSUwotI2VuZGlmIC8vIEJPT1NUX01QTF9WRUNU
T1JfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1eF8vTzFfc2l6ZS5ocHAgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1eF8vTzFfc2l6ZS5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjOWUzY2Y4ODc3ZWVjM2MzY2YzNWVkYTk5
MDViOTQ0Y2Y2ODYzYzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rv
ci9hdXhfL08xX3NpemUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotCi0jaWZu
ZGVmIEJPT1NUX01QTF9WRUNUT1JfQVVYX08xX1NJWkVfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJP
T1NUX01QTF9WRUNUT1JfQVVYX08xX1NJWkVfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBB
bGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBC
b29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5v
cmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJz
L21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNp
b24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvTzFfc2l6ZV9md2QuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L21wbC9taW51cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2xvbmcuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L21wbC92ZWN0b3IvYXV4Xy90YWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9h
dXhfL2NvbmZpZy90eXBlb2YuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9j
dHBzLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLSNpZiBkZWZp
bmVkKEJPT1NUX01QTF9DRkdfVFlQRU9GX0JBU0VEX1NFUVVFTkNFUykKLQotdGVtcGxhdGU8Pgot
c3RydWN0IE8xX3NpemVfaW1wbDwgYXV4Ojp2ZWN0b3JfdGFnID4KLXsKLSAgICB0ZW1wbGF0ZTwg
dHlwZW5hbWUgVmVjdG9yID4gc3RydWN0IGFwcGx5Ci0gICAgICAgIDogVmVjdG9yOjpzaXplCi0g
ICAgewotICAgIH07Ci19OwotCi0jZWxzZQotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fVEVNUExB
VEVfUEFSVElBTF9TUEVDSUFMSVpBVElPTikKLQotdGVtcGxhdGU8IGxvbmcgTiA+Ci1zdHJ1Y3Qg
TzFfc2l6ZV9pbXBsPCBhdXg6OnZlY3Rvcl90YWc8Tj4gPgotewotICAgIHRlbXBsYXRlPCB0eXBl
bmFtZSBWZWN0b3IgPiBzdHJ1Y3QgYXBwbHkKLSAgICAgICAgOiBtcGw6OmxvbmdfPE4+Ci0gICAg
ewotICAgIH07Ci19OwotCi0jZW5kaWYgLy8gQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVD
SUFMSVpBVElPTgotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0NGR19UWVBFT0ZfQkFTRURfU0VRVUVO
Q0VTCi0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfVkVDVE9SX0FVWF9PMV9TSVpFX0hQUF9J
TkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL3ZlY3Rvci9hdXhfL2F0LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy9hdC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDBhNzU4M2NjZjFmNzZmODEyZjRlNWIwODVmNmE1ZDQ5MjJlZGY3OGIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci9hdXhfL2F0LmhwcAorKysg
L2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX1ZFQ1RPUl9B
VVhfQVRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9WRUNUT1JfQVVYX0FUX0hQUF9J
TkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0v
LyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUg
aHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJ
ZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F0X2Z3
ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL3ZlY3Rvci9hdXhfL3RhZy5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvbXBsL2xvbmcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC92b2lkLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9tcGwvYXV4Xy9udHRwX2RlY2wuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21w
bC9hdXhfL3R5cGVfd3JhcHBlci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vdmFsdWVf
d2tuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3R5cGVvZi5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL2N0cHMuaHBwPgotCi1uYW1lc3BhY2UgYm9v
c3QgeyBuYW1lc3BhY2UgbXBsIHsKLQotI2lmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19UWVBFT0Zf
QkFTRURfU0VRVUVOQ0VTKQotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVmVjdG9yLCBsb25nIG5fID4K
LXN0cnVjdCB2X2F0X2ltcGwKLXsKLSAgICB0eXBlZGVmIGxvbmdfPCAoVmVjdG9yOjpsb3dlcl9i
b3VuZF86OnZhbHVlICsgbl8pID4gaW5kZXhfOwotICAgIHR5cGVkZWYgX190eXBlb2ZfXyggVmVj
dG9yOjppdGVtXyhpbmRleF8oKSkgKSB0eXBlOwotfTsKLQotCi10ZW1wbGF0ZTwgdHlwZW5hbWUg
VmVjdG9yLCBsb25nIG5fID4KLXN0cnVjdCB2X2F0Ci0gICAgOiBhdXg6OndyYXBwZWRfdHlwZTwg
dHlwZW5hbWUgdl9hdF9pbXBsPFZlY3RvcixuXz46OnR5cGUgPgotewotfTsKLQotdGVtcGxhdGU8
Pgotc3RydWN0IGF0X2ltcGw8IGF1eDo6dmVjdG9yX3RhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5
cGVuYW1lIFZlY3RvciwgdHlwZW5hbWUgTiA+IHN0cnVjdCBhcHBseQotICAgICAgICA6IHZfYXQ8
Ci0gICAgICAgICAgICAgIFZlY3RvcgotICAgICAgICAgICAgLCBCT09TVF9NUExfQVVYX1ZBTFVF
X1dLTkQoTik6OnZhbHVlCi0gICAgICAgICAgICA+Ci0gICAgewotICAgIH07Ci19OwotCi0jZWxz
ZQotCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpB
VElPTikgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9DRkdfTk9fTk9OVFlQRV9URU1QTEFU
RV9QQVJUSUFMX1NQRUMpCi0KLXRlbXBsYXRlPCB0eXBlbmFtZSBWZWN0b3IsIEJPT1NUX01QTF9B
VVhfTlRUUF9ERUNMKGxvbmcsIG5fKSA+IHN0cnVjdCB2X2F0OwotCi10ZW1wbGF0ZTwgQk9PU1Rf
TVBMX0FVWF9OVFRQX0RFQ0wobG9uZywgbl8pID4KLXN0cnVjdCBhdF9pbXBsPCBhdXg6OnZlY3Rv
cl90YWc8bl8+ID4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVmVjdG9yLCB0eXBlbmFtZSBO
ID4gc3RydWN0IGFwcGx5Ci0jaWYgIWRlZmluZWQoX19CT1JMQU5EQ19fKQotICAgICAgICA6IHZf
YXQ8Ci0gICAgICAgICAgICAgIFZlY3RvcgotICAgICAgICAgICAgLCBCT09TVF9NUExfQVVYX1ZB
TFVFX1dLTkQoTik6OnZhbHVlCi0gICAgICAgICAgICA+Ci0gICAgewotI2Vsc2UKLSAgICB7Ci0g
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdl9hdDwKLSAgICAgICAgICAgICAgVmVjdG9yCi0gICAg
ICAgICAgICAsIEJPT1NUX01QTF9BVVhfVkFMVUVfV0tORChOKTo6dmFsdWUKLSAgICAgICAgICAg
ID46OnR5cGUgdHlwZTsKLSNlbmRpZgotICAgIH07Ci19OwotCi0jICAgZWxzZQotCi1uYW1lc3Bh
Y2UgYXV4IHsKLQotdGVtcGxhdGU8IEJPT1NUX01QTF9BVVhfTlRUUF9ERUNMKGxvbmcsIG5fKSA+
IHN0cnVjdCB2X2F0X2ltcGwKLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgViA+IHN0cnVjdCBy
ZXN1bHRfOwotfTsKLQotLy8gdG8gd29yayBhcm91bmQgRVRJLCBldGMuCi10ZW1wbGF0ZTw+IHN0
cnVjdCB2X2F0X2ltcGw8LTE+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFYgPiBzdHJ1Y3Qg
cmVzdWx0XwotICAgIHsKLSAgICAgICAgdHlwZWRlZiB2b2lkXyB0eXBlOwotICAgIH07Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBhdXgKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFQsIEJPT1NUX01QTF9B
VVhfTlRUUF9ERUNMKGxvbmcsIG5fKSA+Ci1zdHJ1Y3Qgdl9hdAotICAgIDogYXV4Ojp2X2F0X2lt
cGw8bl8+Ojp0ZW1wbGF0ZSByZXN1bHRfPFQ+Ci17Ci19OwotCi0jICAgZW5kaWYgLy8gQk9PU1Rf
Tk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpBVElPTgotCi0jZW5kaWYgLy8gQk9PU1RfTVBM
X0NGR19UWVBFT0ZfQkFTRURfU0VRVUVOQ0VTCi0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExf
VkVDVE9SX0FVWF9BVF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy9iYWNrLmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy9iYWNr
LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY2MzYzZWMxMTU5NzRjZjg2M2Zm
MGFmODZlN2FmYWU0NDdiZTFmMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwv
dmVjdG9yL2F1eF8vYmFjay5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0KLSNp
Zm5kZWYgQk9PU1RfTVBMX1ZFQ1RPUl9BVVhfQkFDS19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9P
U1RfTVBMX1ZFQ1RPUl9BVVhfQkFDS19IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtz
ZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBs
IGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQK
LQotI2luY2x1ZGUgPGJvb3N0L21wbC9iYWNrX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBs
L25leHRfcHJpb3IuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC92ZWN0b3IvYXV4Xy9hdC5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL3ZlY3Rvci9hdXhfL3RhZy5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvbXBsL2F1eF8vY29uZmlnL3R5cGVvZi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8v
Y29uZmlnL2N0cHMuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKLQot
I2lmIGRlZmluZWQoQk9PU1RfTVBMX0NGR19UWVBFT0ZfQkFTRURfU0VRVUVOQ0VTKQotCi10ZW1w
bGF0ZTw+Ci1zdHJ1Y3QgYmFja19pbXBsPCBhdXg6OnZlY3Rvcl90YWcgPgotewotICAgIHRlbXBs
YXRlPCB0eXBlbmFtZSBWZWN0b3IgPiBzdHJ1Y3QgYXBwbHkKLSAgICAgICAgOiB2X2F0PAotICAg
ICAgICAgICAgICBWZWN0b3IKLSAgICAgICAgICAgICwgcHJpb3I8dHlwZW5hbWUgVmVjdG9yOjpz
aXplPjo6dHlwZTo6dmFsdWUKLSAgICAgICAgICAgID4KLSAgICB7Ci0gICAgfTsKLX07Ci0KLSNl
bHNlCi0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFU
SU9OKQotCi10ZW1wbGF0ZTwgbG9uZyBuXyA+Ci1zdHJ1Y3QgYmFja19pbXBsPCBhdXg6OnZlY3Rv
cl90YWc8bl8+ID4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVmVjdG9yID4gc3RydWN0IGFw
cGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZlY3Rvcjo6YmFjayB0eXBlOwot
ICAgIH07Ci19OwotCi0jZW5kaWYgLy8gQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFM
SVpBVElPTgotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0NGR19UWVBFT0ZfQkFTRURfU0VRVUVOQ0VT
Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfVkVDVE9SX0FVWF9CQUNLX0hQUF9JTkNMVURF
RApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL3ZlY3Rvci9hdXhfL2JlZ2luX2VuZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1eF8vYmVnaW5fZW5kLmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYWEzNDQ1MTU2Njk0YjhkMjY5MjE4NTRkZDhhMTQ2NTdmMmFi
MzJmYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1eF8vYmVn
aW5fZW5kLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLQotI2lmbmRlZiBCT09T
VF9NUExfVkVDVE9SX0FVWF9CRUdJTl9FTkRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01Q
TF9WRUNUT1JfQVVYX0JFR0lOX0VORF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtz
ZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBs
IGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQK
LQotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy90eXBlb2YuaHBwPgotCi0jaWYgZGVm
aW5lZChCT09TVF9NUExfQ0ZHX1RZUEVPRl9CQVNFRF9TRVFVRU5DRVMpCi0KLSMgICBpbmNsdWRl
IDxib29zdC9tcGwvYmVnaW5fZW5kX2Z3ZC5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL3Zl
Y3Rvci9hdXhfL2l0ZXJhdG9yLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvdmVjdG9yL2F1
eF8vdGFnLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBs
YXRlPD4KLXN0cnVjdCBiZWdpbl9pbXBsPCBhdXg6OnZlY3Rvcl90YWcgPgotewotICAgIHRlbXBs
YXRlPCB0eXBlbmFtZSBWZWN0b3IgPiBzdHJ1Y3QgYXBwbHkKLSAgICB7Ci0gICAgICAgIHR5cGVk
ZWYgdl9pdGVyPFZlY3RvciwwPiB0eXBlOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgZW5kX2ltcGw8IGF1eDo6dmVjdG9yX3RhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1l
IFZlY3RvciA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiB2X2l0ZXI8VmVj
dG9yLFZlY3Rvcjo6c2l6ZTo6dmFsdWU+IHR5cGU7Ci0gICAgfTsKLX07Ci0KLX19Ci0KLSNlbmRp
ZiAvLyBCT09TVF9NUExfQ0ZHX1RZUEVPRl9CQVNFRF9TRVFVRU5DRVMKLQotI2VuZGlmIC8vIEJP
T1NUX01QTF9WRUNUT1JfQVVYX0JFR0lOX0VORF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy9j
bGVhci5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwv
dmVjdG9yL2F1eF8vY2xlYXIuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDZk
OGJlNzUyN2ZlNmI0OGJiNmY1NWEzMDVkM2ZiOTNmNzlkNzljLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy9jbGVhci5ocHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1NSArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX1ZFQ1RPUl9BVVhfQ0xFQVJfSFBQX0lO
Q0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9WRUNUT1JfQVVYX0NMRUFSX0hQUF9JTkNMVURFRAot
Ci0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmli
dXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8g
KFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0
dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3
dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8vICRE
YXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2NsZWFyX2Z3ZC5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL3ZlY3Rvci9hdXhfL3ZlY3RvcjAuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L21wbC92ZWN0b3IvYXV4Xy90YWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhf
L2NvbmZpZy90eXBlb2YuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9jdHBz
LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLSNpZiBkZWZpbmVk
KEJPT1NUX01QTF9DRkdfVFlQRU9GX0JBU0VEX1NFUVVFTkNFUykKLQotdGVtcGxhdGU8Pgotc3Ry
dWN0IGNsZWFyX2ltcGw8IGF1eDo6dmVjdG9yX3RhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVu
YW1lIFZlY3RvciA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiB2ZWN0b3Iw
PD4gdHlwZTsKLSAgICB9OwotfTsKLQotI2Vsc2UKLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX1RF
TVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04pCi0KLXRlbXBsYXRlPCBsb25nIE4gPgotc3Ry
dWN0IGNsZWFyX2ltcGw8IGF1eDo6dmVjdG9yX3RhZzxOPiA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5
cGVuYW1lIFZlY3RvciA+IHN0cnVjdCBhcHBseQotICAgIHsKLSAgICAgICAgdHlwZWRlZiB2ZWN0
b3IwPD4gdHlwZTsKLSAgICB9OwotfTsKLQotI2VuZGlmIC8vIEJPT1NUX05PX1RFTVBMQVRFX1BB
UlRJQUxfU1BFQ0lBTElaQVRJT04KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9DRkdfVFlQRU9GX0JB
U0VEX1NFUVVFTkNFUwotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX1ZFQ1RPUl9BVVhfQ0xF
QVJfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1eF8vZW1wdHkuaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci9hdXhfL2VtcHR5LmhwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ5MGE1ZjcyZjg3ZDBkZDljMTAwOWEwMzA3NmY0
NTY2MzE5YmY2Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1
eF8vZW1wdHkuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotCi0jaWZuZGVmIEJP
T1NUX01QTF9WRUNUT1JfQVVYX0VNUFRZX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExf
VkVDVE9SX0FVWF9FTVBUWV9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3Vy
dG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBk
b2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9lbXB0eV9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9ib29s
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvdmVjdG9yL2F1eF8vdGFnLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9tcGwvYXV4Xy9jb25maWcvdHlwZW9mLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwv
YXV4Xy9jb25maWcvY3Rwcy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfc2Ft
ZS5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi0jaWYgZGVmaW5l
ZChCT09TVF9NUExfQ0ZHX1RZUEVPRl9CQVNFRF9TRVFVRU5DRVMpCi0KLXRlbXBsYXRlPD4KLXN0
cnVjdCBlbXB0eV9pbXBsPCBhdXg6OnZlY3Rvcl90YWcgPgotewotICAgIHRlbXBsYXRlPCB0eXBl
bmFtZSBWZWN0b3IgPiBzdHJ1Y3QgYXBwbHkKLSAgICAgICAgOiBpc19zYW1lPAotICAgICAgICAg
ICAgICB0eXBlbmFtZSBWZWN0b3I6Omxvd2VyX2JvdW5kXwotICAgICAgICAgICAgLCB0eXBlbmFt
ZSBWZWN0b3I6OnVwcGVyX2JvdW5kXwotICAgICAgICAgICAgPgotICAgIHsKLSAgICB9OwotfTsK
LQotI2Vsc2UKLQotdGVtcGxhdGU8Pgotc3RydWN0IGVtcHR5X2ltcGw8IGF1eDo6dmVjdG9yX3Rh
ZzwwPiA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFZlY3RvciA+IHN0cnVjdCBhcHBseQot
ICAgICAgICA6IHRydWVfCi0gICAgewotICAgIH07Ci19OwotCi0jaWYgIWRlZmluZWQoQk9PU1Rf
Tk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpBVElPTikKLQotdGVtcGxhdGU8IGxvbmcgTiA+
Ci1zdHJ1Y3QgZW1wdHlfaW1wbDwgYXV4Ojp2ZWN0b3JfdGFnPE4+ID4KLXsKLSAgICB0ZW1wbGF0
ZTwgdHlwZW5hbWUgVmVjdG9yID4gc3RydWN0IGFwcGx5Ci0gICAgICAgIDogZmFsc2VfCi0gICAg
ewotICAgIH07Ci19OwotCi0jZW5kaWYgLy8gQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVD
SUFMSVpBVElPTgotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0NGR19UWVBFT0ZfQkFTRURfU0VRVUVO
Q0VTCi0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfVkVDVE9SX0FVWF9FTVBUWV9IUFBfSU5D
TFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21wbC92ZWN0b3IvYXV4Xy9mcm9udC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1eF8vZnJvbnQuaHBwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhMzU4ZGI1MmNmM2QyNTgyNzMzNjI4NjIyMGJjZTRhYjg0Y2I2OGYx
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy9mcm9udC5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX1ZF
Q1RPUl9BVVhfRlJPTlRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9WRUNUT1JfQVVY
X0ZST05UX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAw
LTIwMDgKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5z
ZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50
eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK
LS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRp
b24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9v
c3QvbXBsL2Zyb250X2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL3ZlY3Rvci9hdXhfL2F0
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvdmVjdG9yL2F1eF8vdGFnLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9tcGwvYXV4Xy9udHRwX2RlY2wuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhf
L2NvbmZpZy90eXBlb2YuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9jdHBz
LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLSNpZiBkZWZpbmVk
KEJPT1NUX01QTF9DRkdfVFlQRU9GX0JBU0VEX1NFUVVFTkNFUykKLQotdGVtcGxhdGU8Pgotc3Ry
dWN0IGZyb250X2ltcGw8IGF1eDo6dmVjdG9yX3RhZyA+Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVu
YW1lIFZlY3RvciA+IHN0cnVjdCBhcHBseQotICAgICAgICA6IHZfYXQ8VmVjdG9yLDA+Ci0gICAg
ewotICAgIH07Ci19OwotCi0jZWxzZQotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVf
UEFSVElBTF9TUEVDSUFMSVpBVElPTikKLQotdGVtcGxhdGU8IEJPT1NUX01QTF9BVVhfTlRUUF9E
RUNMKGxvbmcsIG5fKSA+Ci1zdHJ1Y3QgZnJvbnRfaW1wbDwgYXV4Ojp2ZWN0b3JfdGFnPG5fPiA+
Ci17Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIFZlY3RvciA+IHN0cnVjdCBhcHBseQotICAgIHsK
LSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBWZWN0b3I6Oml0ZW0wIHR5cGU7Ci0gICAgfTsKLX07
Ci0KLSNlbmRpZiAvLyBCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OCi0K
LSNlbmRpZiAvLyBCT09TVF9NUExfQ0ZHX1RZUEVPRl9CQVNFRF9TRVFVRU5DRVMKLQotfX0KLQot
I2VuZGlmIC8vIEJPT1NUX01QTF9WRUNUT1JfQVVYX0ZST05UX0hQUF9JTkNMVURFRApkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rv
ci9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5o
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NzYxMTZmNjAzOTlmNTZiOGY1ZmU4
OTY5ZGEwMTg5Y2U4ZWFkNzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3Zl
Y3Rvci9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1
ICswLDAgQEAKLQotLy8gTk8gSU5DTFVERSBHVUFSRFMsIFRIRSBIRUFERVIgSVMgSU5URU5ERUQg
Rk9SIE1VTFRJUExFIElOQ0xVU0lPTgotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAy
MDAwLTIwMDYKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkKLS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50
YXRpb24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8
Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3R5cGVvZi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1
eF8vY29uZmlnL2N0cHMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9wcmVw
cm9jZXNzb3IuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5k
LmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L3ByZXByb2Nlc3Nvci9zdHJpbmdpemUuaHBwPgotCi0jaWYgZGVmaW5lZChCT09TVF9N
UExfQ0ZHX1RZUEVPRl9CQVNFRF9TRVFVRU5DRVMpCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9JTkNM
VURFX0RJUiB0eXBlb2ZfYmFzZWQKLSNlbGlmIGRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVfUEFS
VElBTF9TUEVDSUFMSVpBVElPTikgXAotICAgfHwgZGVmaW5lZChCT09TVF9NUExfQ0ZHX05PX05P
TlRZUEVfVEVNUExBVEVfUEFSVElBTF9TUEVDKQotIyAgIGRlZmluZSBBVVg3NzgwNzZfSU5DTFVE
RV9ESVIgbm9fY3RwcwotI2Vsc2UKLSMgICBkZWZpbmUgQVVYNzc4MDc2X0lOQ0xVREVfRElSIHBs
YWluCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEJPT1NUX05FRURTX1RPS0VOX1BBU1RJTkdfT1Bf
Rk9SX1RPS0VOU19KVVhUQVBPU0lORykKLSMgICBkZWZpbmUgQVVYNzc4MDc2X0hFQURFUiBcCi0g
ICAgQVVYNzc4MDc2X0lOQ0xVREVfRElSL0JPT1NUX01QTF9QUkVQUk9DRVNTRURfSEVBREVSIFwK
LS8qKi8KLSNlbHNlCi0jICAgZGVmaW5lIEFVWDc3ODA3Nl9IRUFERVIgXAotICAgIEJPT1NUX1BQ
X0NBVChBVVg3NzgwNzZfSU5DTFVERV9ESVIsLykjI0JPT1NUX01QTF9QUkVQUk9DRVNTRURfSEVB
REVSIFwKLS8qKi8KLSNlbmRpZgotCi0KLSNpZiBCT09TVF9XT1JLQVJPVU5EKF9fSUJNQ1BQX18s
IEJPT1NUX1RFU1RFRF9BVCg3MDApKQotIyAgIGRlZmluZSBBVVg3NzgwNzZfSU5DTFVERV9TVFJJ
TkcgQk9PU1RfUFBfU1RSSU5HSVpFKGJvb3N0L21wbC92ZWN0b3IvYXV4Xy9wcmVwcm9jZXNzZWQv
QVVYNzc4MDc2X0hFQURFUikKLSMgICBpbmNsdWRlIEFVWDc3ODA3Nl9JTkNMVURFX1NUUklORwot
IyAgIHVuZGVmIEFVWDc3ODA3Nl9JTkNMVURFX1NUUklORwotI2Vsc2UKLSMgICBpbmNsdWRlIEJP
T1NUX1BQX1NUUklOR0laRShib29zdC9tcGwvdmVjdG9yL2F1eF8vcHJlcHJvY2Vzc2VkL0FVWDc3
ODA3Nl9IRUFERVIpCi0jZW5kaWYKLQotIyAgIHVuZGVmIEFVWDc3ODA3Nl9IRUFERVIKLSMgICB1
bmRlZiBBVVg3NzgwNzZfSU5DTFVERV9ESVIKLQotI3VuZGVmIEJPT1NUX01QTF9QUkVQUk9DRVNT
RURfSEVBREVSCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9tcGwvdmVjdG9yL2F1eF8vaXRlbS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1eF8vaXRlbS5ocHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDcxNTM4Y2ViNDEzMmJjNjEwNzAzODE0YjMwZTZkNDJmN2Q1OWI0
ZmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci9hdXhfL2l0ZW0u
aHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExf
VkVDVE9SX0FVWF9JVEVNX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfVkVDVE9SX0FV
WF9JVEVNX0hQUF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAw
LTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5z
ZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50
eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK
LS8vCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRp
b24uCi0KLS8vICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9v
c3QvbXBsL2xvbmcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC92b2lkLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9tcGwvbmV4dF9wcmlvci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vdHlw
ZV93cmFwcGVyLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvdHlwZW9mLmhw
cD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvY3Rwcy5ocHA+Ci0KLW5hbWVzcGFj
ZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi0jaWYgZGVmaW5lZChCT09TVF9NUExfQ0ZHX1RZ
UEVPRl9CQVNFRF9TRVFVRU5DRVMpCi0KLXRlbXBsYXRlPCAKLSAgICAgIHR5cGVuYW1lIFQKLSAg
ICAsIHR5cGVuYW1lIEJhc2UKLSAgICAsIGludCBhdF9mcm9udCA9IDAKLSAgICA+Ci1zdHJ1Y3Qg
dl9pdGVtCi0gICAgOiBCYXNlCi17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBCYXNlOjp1cHBlcl9i
b3VuZF8gaW5kZXhfOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgbmV4dDxpbmRleF8+Ojp0eXBlIHVw
cGVyX2JvdW5kXzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIG5leHQ8dHlwZW5hbWUgQmFzZTo6c2l6
ZT46OnR5cGUgc2l6ZTsKLSAgICB0eXBlZGVmIEJhc2UgYmFzZTsKLSAgICB0eXBlZGVmIHZfaXRl
bSB0eXBlOwotCi0gICAgLy8gYWd1cnQgMTAvc2VwLzA0OiBNV0NXIDw9IDkuMyB3b3JrYXJvdW5k
IGhlcmUgYW5kIGJlbG93OyB0aGUgY29tcGlsZXIKLSAgICAvLyBicmVha3MgaWYgdXNpbmcgZGVj
bGFyYXRpb24gY29tZXMgX2JlZm9yZV8gdGhlIG5ldyBvdmVybG9hZAotICAgIHN0YXRpYyBhdXg6
OnR5cGVfd3JhcHBlcjxUPiBpdGVtXyhpbmRleF8pOwotICAgIHVzaW5nIEJhc2U6Oml0ZW1fOwot
fTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUCi0gICAgLCB0eXBlbmFtZSBCYXNlCi0g
ICAgPgotc3RydWN0IHZfaXRlbTxULEJhc2UsMT4KLSAgICA6IEJhc2UKLXsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIHByaW9yPHR5cGVuYW1lIEJhc2U6Omxvd2VyX2JvdW5kXz46OnR5cGUgaW5kZXhf
OwotICAgIHR5cGVkZWYgaW5kZXhfIGxvd2VyX2JvdW5kXzsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IG5leHQ8dHlwZW5hbWUgQmFzZTo6c2l6ZT46OnR5cGUgc2l6ZTsKLSAgICB0eXBlZGVmIEJhc2Ug
YmFzZTsKLSAgICB0eXBlZGVmIHZfaXRlbSB0eXBlOwotCi0gICAgc3RhdGljIGF1eDo6dHlwZV93
cmFwcGVyPFQ+IGl0ZW1fKGluZGV4Xyk7Ci0gICAgdXNpbmcgQmFzZTo6aXRlbV87Ci19OwotCi0v
LyAiZXJhc3VyZSIgaXRlbQotdGVtcGxhdGU8IAotICAgICAgdHlwZW5hbWUgQmFzZQotICAgICwg
aW50IGF0X2Zyb250Ci0gICAgPgotc3RydWN0IHZfbWFzawotICAgIDogQmFzZQotewotICAgIHR5
cGVkZWYgdHlwZW5hbWUgcHJpb3I8dHlwZW5hbWUgQmFzZTo6dXBwZXJfYm91bmRfPjo6dHlwZSBp
bmRleF87Ci0gICAgdHlwZWRlZiBpbmRleF8gdXBwZXJfYm91bmRfOwotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgcHJpb3I8dHlwZW5hbWUgQmFzZTo6c2l6ZT46OnR5cGUgc2l6ZTsKLSAgICB0eXBlZGVm
IEJhc2UgYmFzZTsKLSAgICB0eXBlZGVmIHZfbWFzayB0eXBlOwotCi0gICAgc3RhdGljIGF1eDo6
dHlwZV93cmFwcGVyPHZvaWRfPiBpdGVtXyhpbmRleF8pOwotICAgIHVzaW5nIEJhc2U6Oml0ZW1f
OwotfTsKLQotdGVtcGxhdGU8IAotICAgICAgdHlwZW5hbWUgQmFzZQotICAgID4KLXN0cnVjdCB2
X21hc2s8QmFzZSwxPgotICAgIDogQmFzZQotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFzZTo6
bG93ZXJfYm91bmRfIGluZGV4XzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIG5leHQ8aW5kZXhfPjo6
dHlwZSBsb3dlcl9ib3VuZF87Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBwcmlvcjx0eXBlbmFtZSBC
YXNlOjpzaXplPjo6dHlwZSBzaXplOwotICAgIHR5cGVkZWYgQmFzZSBiYXNlOwotICAgIHR5cGVk
ZWYgdl9tYXNrIHR5cGU7Ci0KLSAgICBzdGF0aWMgYXV4Ojp0eXBlX3dyYXBwZXI8dm9pZF8+IGl0
ZW1fKGluZGV4Xyk7Ci0gICAgdXNpbmcgQmFzZTo6aXRlbV87Ci19OwotCi0jZW5kaWYgLy8gQk9P
U1RfTVBMX0NGR19UWVBFT0ZfQkFTRURfU0VRVUVOQ0VTCi0KLX19Ci0KLSNlbmRpZiAvLyBCT09T
VF9NUExfVkVDVE9SX0FVWF9JVEVNX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci9hdXhfL2l0ZXJhdG9y
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0
b3IvYXV4Xy9pdGVyYXRvci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZGYz
MTU2OTYxNmYxNzJmZTExYmQ4ZTE5NDk5YzgxNDYwMjI0ZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci9hdXhfL2l0ZXJhdG9yLmhwcAorKysgL2Rldi9udWxsCkBA
IC0xLDEzMCArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX0FVWF9WRUNUT1JfSVRFUkFUT1Jf
SFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9BVVhfVkVDVE9SX0lURVJBVE9SX0hQUF9J
TkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0v
LyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUg
aHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJ
ZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL3ZlY3Rv
ci9hdXhfL2F0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvaXRlcmF0b3JfdGFncy5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvbXBsL3BsdXMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9taW51cy5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2FkdmFuY2VfZndkLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9tcGwvZGlzdGFuY2VfZndkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvbmV4dC5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvbXBsL3ByaW9yLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9u
dHRwX2RlY2wuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3ZhbHVlX3drbmQuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9jdHBzLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9tcGwvYXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5h
bWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFZlY3RvcgotICAgICwg
Qk9PU1RfTVBMX0FVWF9OVFRQX0RFQ0wobG9uZywgbl8pCi0gICAgPgotc3RydWN0IHZfaXRlcgot
ewotICAgIHR5cGVkZWYgYXV4Ojp2X2l0ZXJfdGFnIHRhZzsKLSAgICB0eXBlZGVmIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnIGNhdGVnb3J5OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgdl9hdDxW
ZWN0b3Isbl8+Ojp0eXBlIHR5cGU7Ci0KLSAgICB0eXBlZGVmIFZlY3RvciB2ZWN0b3JfOwotICAg
IHR5cGVkZWYgbXBsOjpsb25nXzxuXz4gcG9zOwotCi0jaWYgZGVmaW5lZChCT09TVF9OT19URU1Q
TEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OKQotICAgIGVudW0geyAKLSAgICAgICAgICBuZXh0
XyA9IG5fICsgMQotICAgICAgICAsIHByaW9yXyA9IG5fIC0gMQotICAgICAgICAsIHBvc18gPSBu
XwotICAgIH07Ci0gICAgCi0gICAgdHlwZWRlZiB2X2l0ZXI8VmVjdG9yLG5leHRfPiBuZXh0Owot
ICAgIHR5cGVkZWYgdl9pdGVyPFZlY3Rvcixwcmlvcl8+IHByaW9yOwotI2VuZGlmCi0KLX07Ci0K
LQotI2lmICFkZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04p
Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVmVjdG9yCi0gICAgLCBCT09TVF9NUExfQVVY
X05UVFBfREVDTChsb25nLCBuXykKLSAgICA+Ci1zdHJ1Y3QgbmV4dDwgdl9pdGVyPFZlY3Rvcixu
Xz4gPgotewotICAgIHR5cGVkZWYgdl9pdGVyPFZlY3Rvciwobl8gKyAxKT4gdHlwZTsKLX07Ci0K
LXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVmVjdG9yCi0gICAgLCBCT09TVF9NUExfQVVYX05U
VFBfREVDTChsb25nLCBuXykKLSAgICA+Ci1zdHJ1Y3QgcHJpb3I8IHZfaXRlcjxWZWN0b3Isbl8+
ID4KLXsKLSAgICB0eXBlZGVmIHZfaXRlcjxWZWN0b3IsKG5fIC0gMSk+IHR5cGU7Ci19OwotCi10
ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFZlY3RvcgotICAgICwgQk9PU1RfTVBMX0FVWF9OVFRQ
X0RFQ0wobG9uZywgbl8pCi0gICAgLCB0eXBlbmFtZSBEaXN0YW5jZQotICAgID4KLXN0cnVjdCBh
ZHZhbmNlPCB2X2l0ZXI8VmVjdG9yLG5fPixEaXN0YW5jZT4KLXsKLSAgICB0eXBlZGVmIHZfaXRl
cjwKLSAgICAgICAgICBWZWN0b3IKLSAgICAgICAgLCAobl8gKyBCT09TVF9NUExfQVVYX05FU1RF
RF9WQUxVRV9XS05EKGxvbmcsIERpc3RhbmNlKSkKLSAgICAgICAgPiB0eXBlOwotfTsKLQotdGVt
cGxhdGU8IAotICAgICAgdHlwZW5hbWUgVmVjdG9yCi0gICAgLCBCT09TVF9NUExfQVVYX05UVFBf
REVDTChsb25nLCBuXykKLSAgICAsIEJPT1NUX01QTF9BVVhfTlRUUF9ERUNMKGxvbmcsIG1fKQot
ICAgID4gCi1zdHJ1Y3QgZGlzdGFuY2U8IHZfaXRlcjxWZWN0b3Isbl8+LCB2X2l0ZXI8VmVjdG9y
LG1fPiA+Ci0gICAgOiBtcGw6OmxvbmdfPChtXyAtIG5fKT4KLXsKLX07Ci0KLSNlbHNlIC8vIEJP
T1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04KLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgYWR2YW5jZV9pbXBsPGF1eDo6dl9pdGVyX3RhZz4KLXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5h
bWUgSXRlcmF0b3IsIHR5cGVuYW1lIE4gPiBzdHJ1Y3QgYXBwbHkKLSAgICB7Ci0gICAgICAgIGVu
dW0geyBwb3NfID0gSXRlcmF0b3I6OnBvc18sIG5fID0gTjo6dmFsdWUgfTsKLSAgICAgICAgdHlw
ZWRlZiB2X2l0ZXI8Ci0gICAgICAgICAgICAgIHR5cGVuYW1lIEl0ZXJhdG9yOjp2ZWN0b3JfCi0g
ICAgICAgICAgICAsIChwb3NfICsgbl8pCi0gICAgICAgICAgICA+IHR5cGU7Ci0gICAgfTsKLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IGRpc3RhbmNlX2ltcGw8YXV4Ojp2X2l0ZXJfdGFnPgotewot
ICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJdGVyMSwgdHlwZW5hbWUgSXRlcjIgPiBzdHJ1Y3QgYXBw
bHkKLSAgICB7Ci0gICAgICAgIGVudW0geyBwb3MxXyA9IEl0ZXIxOjpwb3NfLCBwb3MyXyA9IEl0
ZXIyOjpwb3NfIH07Ci0gICAgICAgIHR5cGVkZWYgbG9uZ188KCBwb3MyXyAtIHBvczFfICk+IHR5
cGU7Ci0gICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChsb25nLCB2YWx1ZSA9ICggcG9zMl8g
LSBwb3MxXyApKTsKLSAgICB9OwotfTsKLQotI2VuZGlmCi0KLX19Ci0KLSNlbmRpZiAvLyBCT09T
VF9NUExfQVVYX1ZFQ1RPUl9JVEVSQVRPUl9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy9wb3Bf
YmFjay5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwv
dmVjdG9yL2F1eF8vcG9wX2JhY2suaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
ZDk1ZTM1NWMwNWYwMjA5YWRkYWI5NzUyOWJjYzg4OTc4NTU4ZGEwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy9wb3BfYmFjay5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSw0MCArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX1ZFQ1RPUl9BVVhfUE9QX0JB
Q0tfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9WRUNUT1JfQVVYX1BPUF9CQUNLX0hQ
UF9JTkNMVURFRAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8v
Ci0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lv
biAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29w
eSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBT
ZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8v
ICRJZCQKLS8vICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL3Bv
cF9iYWNrX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3R5cGVvZi5o
cHA+Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX01QTF9DRkdfVFlQRU9GX0JBU0VEX1NFUVVFTkNFUykK
LQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC92ZWN0b3IvYXV4Xy9pdGVtLmhwcD4KLSMgICBpbmNs
dWRlIDxib29zdC9tcGwvdmVjdG9yL2F1eF8vdGFnLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsg
bmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBwb3BfYmFja19pbXBsPCBhdXg6
OnZlY3Rvcl90YWcgPgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBWZWN0b3IgPiBzdHJ1Y3Qg
YXBwbHkKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdl9tYXNrPFZlY3RvciwwPiB0eXBlOwotICAg
IH07Ci19OwotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX0NGR19UWVBFT0ZfQkFTRURfU0VR
VUVOQ0VTCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfVkVDVE9SX0FVWF9QT1BfQkFDS19IUFBfSU5D
TFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21wbC92ZWN0b3IvYXV4Xy9wb3BfZnJvbnQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci9hdXhfL3BvcF9mcm9udC5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NGI4NzExYzQ3ZjJmNzM5MzI4Y2QwZjBhMjZhY2Jm
M2ZiM2U4Y2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci9hdXhf
L3BvcF9mcm9udC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0KLSNpZm5kZWYg
Qk9PU1RfTVBMX1ZFQ1RPUl9BVVhfUE9QX0ZST05UX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09T
VF9NUExfVkVDVE9SX0FVWF9QT1BfRlJPTlRfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBB
bGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBC
b29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5v
cmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJz
L21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNp
b24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvcG9wX2Zyb250X2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3R5cGVvZi5ocHA+Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX01Q
TF9DRkdfVFlQRU9GX0JBU0VEX1NFUVVFTkNFUykKLQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC92
ZWN0b3IvYXV4Xy9pdGVtLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwvdmVjdG9yL2F1eF8v
dGFnLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRl
PD4KLXN0cnVjdCBwb3BfZnJvbnRfaW1wbDwgYXV4Ojp2ZWN0b3JfdGFnID4KLXsKLSAgICB0ZW1w
bGF0ZTwgdHlwZW5hbWUgVmVjdG9yID4gc3RydWN0IGFwcGx5Ci0gICAgewotICAgICAgICB0eXBl
ZGVmIHZfbWFzazxWZWN0b3IsMT4gdHlwZTsKLSAgICB9OwotfTsKLQotfX0KLQotI2VuZGlmIC8v
IEJPT1NUX01QTF9DRkdfVFlQRU9GX0JBU0VEX1NFUVVFTkNFUwotCi0jZW5kaWYgLy8gQk9PU1Rf
TVBMX1ZFQ1RPUl9BVVhfUE9QX0ZST05UX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci9hdXhfL3ByZXBy
b2Nlc3NlZC90eXBlb2ZfYmFzZWQvdmVjdG9yMTAuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci9hdXhfL3ByZXByb2Nlc3NlZC90eXBlb2Zf
YmFzZWQvdmVjdG9yMTAuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGM2NDA3
MDlhMTQ2NTRiMGViMjMxYWEyNDIwNTk2YzRiNGYxZTk0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy9wcmVwcm9jZXNzZWQvdHlwZW9mX2Jhc2VkL3ZlY3Rv
cjEwLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0KLS8vIENvcHlyaWdodCBB
bGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBC
b29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5v
cmcvTElDRU5TRV8xXzAudHh0KQotLy8KLQotLy8gUHJlcHJvY2Vzc2VkIHZlcnNpb24gb2YgImJv
b3N0L21wbC92ZWN0b3IvdmVjdG9yMTAuaHBwIiBoZWFkZXIKLS8vIC0tIERPIE5PVCBtb2RpZnkg
YnkgaGFuZCEKLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7Ci0KLXRlbXBsYXRl
PAotICAgICAgdHlwZW5hbWUgVDAKLSAgICA+Ci1zdHJ1Y3QgdmVjdG9yMQotICAgIDogdl9pdGVt
PAotICAgICAgICAgIFQwCi0gICAgICAgICwgdmVjdG9yMDwgID4KLSAgICAgICAgPgotewotICAg
IHR5cGVkZWYgdmVjdG9yMSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBU
MCwgdHlwZW5hbWUgVDEKLSAgICA+Ci1zdHJ1Y3QgdmVjdG9yMgotICAgIDogdl9pdGVtPAotICAg
ICAgICAgIFQxCi0gICAgICAgICwgdmVjdG9yMTxUMD4KLSAgICAgICAgPgotewotICAgIHR5cGVk
ZWYgdmVjdG9yMiB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlw
ZW5hbWUgVDEsIHR5cGVuYW1lIFQyCi0gICAgPgotc3RydWN0IHZlY3RvcjMKLSAgICA6IHZfaXRl
bTwKLSAgICAgICAgICBUMgotICAgICAgICAsIHZlY3RvcjI8IFQwLFQxID4KLSAgICAgICAgPgot
ewotICAgIHR5cGVkZWYgdmVjdG9yMyB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBl
bmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMwotICAgID4KLXN0
cnVjdCB2ZWN0b3I0Ci0gICAgOiB2X2l0ZW08Ci0gICAgICAgICAgVDMKLSAgICAgICAgLCB2ZWN0
b3IzPCBUMCxUMSxUMiA+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIHZlY3RvcjQgdHlwZTsK
LX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFt
ZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgPgotc3RydWN0IHZlY3RvcjUKLSAg
ICA6IHZfaXRlbTwKLSAgICAgICAgICBUNAotICAgICAgICAsIHZlY3RvcjQ8IFQwLFQxLFQyLFQz
ID4KLSAgICAgICAgPgotewotICAgIHR5cGVkZWYgdmVjdG9yNSB0eXBlOwotfTsKLQotdGVtcGxh
dGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFt
ZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1Ci0gICAgPgotc3RydWN0IHZlY3Rv
cjYKLSAgICA6IHZfaXRlbTwKLSAgICAgICAgICBUNQotICAgICAgICAsIHZlY3RvcjU8IFQwLFQx
LFQyLFQzLFQ0ID4KLSAgICAgICAgPgotewotICAgIHR5cGVkZWYgdmVjdG9yNiB0eXBlOwotfTsK
LQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQy
LCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBU
NgotICAgID4KLXN0cnVjdCB2ZWN0b3I3Ci0gICAgOiB2X2l0ZW08Ci0gICAgICAgICAgVDYKLSAg
ICAgICAgLCB2ZWN0b3I2PCBUMCxUMSxUMixUMyxUNCxUNSA+Ci0gICAgICAgID4KLXsKLSAgICB0
eXBlZGVmIHZlY3RvcjcgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAs
IHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAg
LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3Ci0gICAgPgotc3RydWN0IHZl
Y3RvcjgKLSAgICA6IHZfaXRlbTwKLSAgICAgICAgICBUNwotICAgICAgICAsIHZlY3Rvcjc8IFQw
LFQxLFQyLFQzLFQ0LFQ1LFQ2ID4KLSAgICAgICAgPgotewotICAgIHR5cGVkZWYgdmVjdG9yOCB0
eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5
cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0
eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4Ci0gICAgPgotc3RydWN0IHZlY3Rv
cjkKLSAgICA6IHZfaXRlbTwKLSAgICAgICAgICBUOAotICAgICAgICAsIHZlY3Rvcjg8IFQwLFQx
LFQyLFQzLFQ0LFQ1LFQ2LFQ3ID4KLSAgICAgICAgPgotewotICAgIHR5cGVkZWYgdmVjdG9yOSB0
eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5
cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0
eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOQotICAgID4K
LXN0cnVjdCB2ZWN0b3IxMAotICAgIDogdl9pdGVtPAotICAgICAgICAgIFQ5Ci0gICAgICAgICwg
dmVjdG9yOTwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDggPgotICAgICAgICA+Ci17Ci0gICAg
dHlwZWRlZiB2ZWN0b3IxMCB0eXBlOwotfTsKLQotfX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy9wcmVwcm9jZXNz
ZWQvdHlwZW9mX2Jhc2VkL3ZlY3RvcjIwLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy9wcmVwcm9jZXNzZWQvdHlwZW9mX2Jhc2Vk
L3ZlY3RvcjIwLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhjY2FjNGU5MWVh
NDk1ZDI2Y2UyZjdmNTU3OGE3M2I2ZTA1ZmQ3Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9tcGwvdmVjdG9yL2F1eF8vcHJlcHJvY2Vzc2VkL3R5cGVvZl9iYXNlZC92ZWN0b3IyMC5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgQWxla3Nl
eSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkKLS8vCi0KLS8vIFByZXByb2Nlc3NlZCB2ZXJzaW9uIG9mICJib29zdC9t
cGwvdmVjdG9yL3ZlY3RvcjIwLmhwcCIgaGVhZGVyCi0vLyAtLSBETyBOT1QgbW9kaWZ5IGJ5IGhh
bmQhCi0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAg
ICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0
eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywg
dHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBlbmFtZSBUMTAKLSAgICA+Ci1zdHJ1
Y3QgdmVjdG9yMTEKLSAgICA6IHZfaXRlbTwKLSAgICAgICAgICBUMTAKLSAgICAgICAgLCB2ZWN0
b3IxMDwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDkgPgotICAgICAgICA+Ci17Ci0gICAg
dHlwZWRlZiB2ZWN0b3IxMSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBU
MCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAg
ICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0
eXBlbmFtZSBUOQotICAgICwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEKLSAgICA+Ci1zdHJ1
Y3QgdmVjdG9yMTIKLSAgICA6IHZfaXRlbTwKLSAgICAgICAgICBUMTEKLSAgICAgICAgLCB2ZWN0
b3IxMTwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwID4KLSAgICAgICAgPgotewot
ICAgIHR5cGVkZWYgdmVjdG9yMTIgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5h
bWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0
Ci0gICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBU
OCwgdHlwZW5hbWUgVDkKLSAgICAsIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0eXBlbmFt
ZSBUMTIKLSAgICA+Ci1zdHJ1Y3QgdmVjdG9yMTMKLSAgICA6IHZfaXRlbTwKLSAgICAgICAgICBU
MTIKLSAgICAgICAgLCB2ZWN0b3IxMjwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEw
LFQxMSA+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIHZlY3RvcjEzIHR5cGU7Ci19OwotCi10
ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5
cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0
eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBlbmFtZSBUMTAs
IHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMKLSAgICA+Ci1zdHJ1Y3Qg
dmVjdG9yMTQKLSAgICA6IHZfaXRlbTwKLSAgICAgICAgICBUMTMKLSAgICAgICAgLCB2ZWN0b3Ix
MzwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIgPgotICAgICAgICA+
Ci17Ci0gICAgdHlwZWRlZiB2ZWN0b3IxNCB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0
eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5h
bWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVu
YW1lIFQ4LCB0eXBlbmFtZSBUOQotICAgICwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5
cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQKLSAgICA+Ci1zdHJ1Y3QgdmVj
dG9yMTUKLSAgICA6IHZfaXRlbTwKLSAgICAgICAgICBUMTQKLSAgICAgICAgLCB2ZWN0b3IxNDwg
VDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzID4KLSAgICAgICAg
PgotewotICAgIHR5cGVkZWYgdmVjdG9yMTUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAg
dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVu
YW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBl
bmFtZSBUOCwgdHlwZW5hbWUgVDkKLSAgICAsIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0
eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0Ci0gICAgLCB0eXBlbmFtZSBU
MTUKLSAgICA+Ci1zdHJ1Y3QgdmVjdG9yMTYKLSAgICA6IHZfaXRlbTwKLSAgICAgICAgICBUMTUK
LSAgICAgICAgLCB2ZWN0b3IxNTwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQx
MSxUMTIsVDEzLFQxNCA+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIHZlY3RvcjE2IHR5cGU7
Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5h
bWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVu
YW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBl
bmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVu
YW1lIFQxNAotICAgICwgdHlwZW5hbWUgVDE1LCB0eXBlbmFtZSBUMTYKLSAgICA+Ci1zdHJ1Y3Qg
dmVjdG9yMTcKLSAgICA6IHZfaXRlbTwKLSAgICAgICAgICBUMTYKLSAgICAgICAgLCB2ZWN0b3Ix
NjwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUg
PgotICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiB2ZWN0b3IxNyB0eXBlOwotfTsKLQotdGVtcGxh
dGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFt
ZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5h
bWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOQotICAgICwgdHlwZW5hbWUgVDEwLCB0eXBl
bmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQKLSAgICAs
IHR5cGVuYW1lIFQxNSwgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcKLSAgICA+Ci1zdHJ1Y3Qg
dmVjdG9yMTgKLSAgICA6IHZfaXRlbTwKLSAgICAgICAgICBUMTcKLSAgICAgICAgLCB2ZWN0b3Ix
NzwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUs
VDE2ID4KLSAgICAgICAgPgotewotICAgIHR5cGVkZWYgdmVjdG9yMTggdHlwZTsKLX07Ci0KLXRl
bXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlw
ZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5
cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDkKLSAgICAsIHR5cGVuYW1lIFQxMCwg
dHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0Ci0g
ICAgLCB0eXBlbmFtZSBUMTUsIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBU
MTgKLSAgICA+Ci1zdHJ1Y3QgdmVjdG9yMTkKLSAgICA6IHZfaXRlbTwKLSAgICAgICAgICBUMTgK
LSAgICAgICAgLCB2ZWN0b3IxODwgVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQx
MSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyA+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIHZl
Y3RvcjE5IHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFt
ZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5h
bWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5
Ci0gICAgLCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFt
ZSBUMTMsIHR5cGVuYW1lIFQxNAotICAgICwgdHlwZW5hbWUgVDE1LCB0eXBlbmFtZSBUMTYsIHR5
cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTkKLSAgICA+Ci1zdHJ1Y3QgdmVj
dG9yMjAKLSAgICA6IHZfaXRlbTwKLSAgICAgICAgICBUMTkKLSAgICAgICAgLCB2ZWN0b3IxOTwg
VDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2
LFQxNyxUMTggPgotICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiB2ZWN0b3IyMCB0eXBlOwotfTsK
LQotfX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L21wbC92ZWN0b3IvYXV4Xy9wcmVwcm9jZXNzZWQvdHlwZW9mX2Jhc2VkL3ZlY3RvcjMwLmhw
cCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3Iv
YXV4Xy9wcmVwcm9jZXNzZWQvdHlwZW9mX2Jhc2VkL3ZlY3RvcjMwLmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzQwNDk5MDZmM2JjZWMxN2EwYjNiMDlhMDk1ZGUxYTJlZjNjNmFm
Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1eF8vcHJlcHJv
Y2Vzc2VkL3R5cGVvZl9iYXNlZC92ZWN0b3IzMC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkg
KzAsMCBAQAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0v
LyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuIAotLy8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dCAKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0KLS8vIFBy
ZXByb2Nlc3NlZCB2ZXJzaW9uIG9mICJib29zdC9tcGwvdmVjdG9yL3ZlY3RvcjMwLmhwcCIgaGVh
ZGVyCi0vLyAtLSBETyBOT1QgbW9kaWZ5IGJ5IGhhbmQhCi0KLW5hbWVzcGFjZSBib29zdCB7IG5h
bWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBU
MSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUg
VDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0g
ICAgLCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBU
MTMsIHR5cGVuYW1lIFQxNAotICAgICwgdHlwZW5hbWUgVDE1LCB0eXBlbmFtZSBUMTYsIHR5cGVu
YW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTkKLSAgICAsIHR5cGVuYW1lIFQyMAot
ICAgID4KLXN0cnVjdCB2ZWN0b3IyMQotICAgIDogdl9pdGVtPAotICAgICAgICAgIFQyMAotICAg
ICAgICAsIHZlY3RvcjIwPCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQx
MixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTkgPgotICAgICAgICA+Ci17Ci0gICAgdHlwZWRl
ZiB2ZWN0b3IyMSB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlw
ZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5
cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFt
ZSBUOQotICAgICwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlw
ZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQKLSAgICAsIHR5cGVuYW1lIFQxNSwgdHlwZW5hbWUgVDE2
LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5Ci0gICAgLCB0eXBlbmFt
ZSBUMjAsIHR5cGVuYW1lIFQyMQotICAgID4KLXN0cnVjdCB2ZWN0b3IyMgotICAgIDogdl9pdGVt
PAotICAgICAgICAgIFQyMQotICAgICAgICAsIHZlY3RvcjIxPCBUMCxUMSxUMixUMyxUNCxUNSxU
NixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwID4K
LSAgICAgICAgPgotewotICAgIHR5cGVkZWYgdmVjdG9yMjIgdHlwZTsKLX07Ci0KLXRlbXBsYXRl
PAotICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUg
VDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1l
IFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDkKLSAgICAsIHR5cGVuYW1lIFQxMCwgdHlwZW5h
bWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0Ci0gICAgLCB0
eXBlbmFtZSBUMTUsIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5
cGVuYW1lIFQxOQotICAgICwgdHlwZW5hbWUgVDIwLCB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQy
MgotICAgID4KLXN0cnVjdCB2ZWN0b3IyMwotICAgIDogdl9pdGVtPAotICAgICAgICAgIFQyMgot
ICAgICAgICAsIHZlY3RvcjIyPCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDEx
LFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSA+Ci0gICAgICAgID4KLXsK
LSAgICB0eXBlZGVmIHZlY3RvcjIzIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVu
YW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBU
NAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUg
VDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwgdHlwZW5h
bWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNAotICAgICwgdHlwZW5hbWUgVDE1LCB0
eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTkKLSAg
ICAsIHR5cGVuYW1lIFQyMCwgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQy
MwotICAgID4KLXN0cnVjdCB2ZWN0b3IyNAotICAgIDogdl9pdGVtPAotICAgICAgICAgIFQyMwot
ICAgICAgICAsIHZlY3RvcjIzPCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDEx
LFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSxUMjIgPgotICAgICAgICA+
Ci17Ci0gICAgdHlwZWRlZiB2ZWN0b3IyNCB0eXBlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgICB0
eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5h
bWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVu
YW1lIFQ4LCB0eXBlbmFtZSBUOQotICAgICwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5
cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQKLSAgICAsIHR5cGVuYW1lIFQx
NSwgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5
Ci0gICAgLCB0eXBlbmFtZSBUMjAsIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFt
ZSBUMjMsIHR5cGVuYW1lIFQyNAotICAgID4KLXN0cnVjdCB2ZWN0b3IyNQotICAgIDogdl9pdGVt
PAotICAgICAgICAgIFQyNAotICAgICAgICAsIHZlY3RvcjI0PCBUMCxUMSxUMixUMyxUNCxUNSxU
NixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQy
MSxUMjIsVDIzID4KLSAgICAgICAgPgotewotICAgIHR5cGVkZWYgdmVjdG9yMjUgdHlwZTsKLX07
Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBU
MiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUg
VDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDkKLSAgICAsIHR5cGVuYW1l
IFQxMCwgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUg
VDE0Ci0gICAgLCB0eXBlbmFtZSBUMTUsIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBl
bmFtZSBUMTgsIHR5cGVuYW1lIFQxOQotICAgICwgdHlwZW5hbWUgVDIwLCB0eXBlbmFtZSBUMjEs
IHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQKLSAgICAsIHR5cGVuYW1l
IFQyNQotICAgID4KLXN0cnVjdCB2ZWN0b3IyNgotICAgIDogdl9pdGVtPAotICAgICAgICAgIFQy
NQotICAgICAgICAsIHZlY3RvcjI1PCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAs
VDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSxUMjIsVDIzLFQyNCA+
Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIHZlY3RvcjI2IHR5cGU7Ci19OwotCi10ZW1wbGF0
ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1l
IFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFt
ZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0eXBlbmFtZSBUMTAsIHR5cGVu
YW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNAotICAgICwg
dHlwZW5hbWUgVDE1LCB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0
eXBlbmFtZSBUMTkKLSAgICAsIHR5cGVuYW1lIFQyMCwgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBU
MjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0Ci0gICAgLCB0eXBlbmFtZSBUMjUsIHR5cGVu
YW1lIFQyNgotICAgID4KLXN0cnVjdCB2ZWN0b3IyNwotICAgIDogdl9pdGVtPAotICAgICAgICAg
IFQyNgotICAgICAgICAsIHZlY3RvcjI2PCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxU
MTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSxUMjIsVDIzLFQy
NCxUMjUgPgotICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiB2ZWN0b3IyNyB0eXBlOwotfTsKLQot
dGVtcGxhdGU8Ci0gICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0
eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKLSAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwg
dHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOQotICAgICwgdHlwZW5hbWUgVDEw
LCB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQK
LSAgICAsIHR5cGVuYW1lIFQxNSwgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1l
IFQxOCwgdHlwZW5hbWUgVDE5Ci0gICAgLCB0eXBlbmFtZSBUMjAsIHR5cGVuYW1lIFQyMSwgdHlw
ZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNAotICAgICwgdHlwZW5hbWUgVDI1
LCB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNwotICAgID4KLXN0cnVjdCB2ZWN0b3IyOAotICAg
IDogdl9pdGVtPAotICAgICAgICAgIFQyNwotICAgICAgICAsIHZlY3RvcjI3PCBUMCxUMSxUMixU
MyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxU
MTksVDIwLFQyMSxUMjIsVDIzLFQyNCxUMjUsVDI2ID4KLSAgICAgICAgPgotewotICAgIHR5cGVk
ZWYgdmVjdG9yMjggdHlwZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgICAgdHlwZW5hbWUgVDAsIHR5
cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Ci0gICAgLCB0
eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5h
bWUgVDkKLSAgICAsIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5
cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0Ci0gICAgLCB0eXBlbmFtZSBUMTUsIHR5cGVuYW1lIFQx
NiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOQotICAgICwgdHlwZW5h
bWUgVDIwLCB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFt
ZSBUMjQKLSAgICAsIHR5cGVuYW1lIFQyNSwgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5
cGVuYW1lIFQyOAotICAgID4KLXN0cnVjdCB2ZWN0b3IyOQotICAgIDogdl9pdGVtPAotICAgICAg
ICAgIFQyOAotICAgICAgICAsIHZlY3RvcjI4PCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxU
OSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSxUMjIsVDIz
LFQyNCxUMjUsVDI2LFQyNyA+Ci0gICAgICAgID4KLXsKLSAgICB0eXBlZGVmIHZlY3RvcjI5IHR5
cGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAotICAgICwgdHlwZW5hbWUgVDUsIHR5
cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Ci0gICAgLCB0
eXBlbmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5
cGVuYW1lIFQxNAotICAgICwgdHlwZW5hbWUgVDE1LCB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQx
NywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTkKLSAgICAsIHR5cGVuYW1lIFQyMCwgdHlwZW5h
bWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0Ci0gICAgLCB0
eXBlbmFtZSBUMjUsIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5
cGVuYW1lIFQyOQotICAgID4KLXN0cnVjdCB2ZWN0b3IzMAotICAgIDogdl9pdGVtPAotICAgICAg
ICAgIFQyOQotICAgICAgICAsIHZlY3RvcjI5PCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxU
OSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQyMSxUMjIsVDIz
LFQyNCxUMjUsVDI2LFQyNyxUMjggPgotICAgICAgICA+Ci17Ci0gICAgdHlwZWRlZiB2ZWN0b3Iz
MCB0eXBlOwotfTsKLQotfX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy9wdXNoX2JhY2suaHBwIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci9hdXhfL3B1c2hfYmFj
ay5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNzgyOGM5YmEzYmEwMDVmMGI1
NTYzYzk2MjE2ODMyOTkxMzI3MGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBs
L3ZlY3Rvci9hdXhfL3B1c2hfYmFjay5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBA
Ci0KLSNpZm5kZWYgQk9PU1RfTVBMX1ZFQ1RPUl9BVVhfUFVTSF9CQUNLX0hQUF9JTkNMVURFRAot
I2RlZmluZSBCT09TVF9NUExfVkVDVE9SX0FVWF9QVVNIX0JBQ0tfSFBQX0lOQ0xVREVECi0KLS8v
IENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2Vl
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDov
L3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUk
Ci0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvcHVzaF9iYWNrX2Z3ZC5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3R5cGVvZi5ocHA+Ci0KLSNpZiBkZWZp
bmVkKEJPT1NUX01QTF9DRkdfVFlQRU9GX0JBU0VEX1NFUVVFTkNFUykKLQotIyAgIGluY2x1ZGUg
PGJvb3N0L21wbC92ZWN0b3IvYXV4Xy9pdGVtLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9tcGwv
dmVjdG9yL2F1eF8vdGFnLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7
Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBwdXNoX2JhY2tfaW1wbDwgYXV4Ojp2ZWN0b3JfdGFnID4K
LXsKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVmVjdG9yLCB0eXBlbmFtZSBUID4gc3RydWN0IGFw
cGx5Ci0gICAgewotICAgICAgICB0eXBlZGVmIHZfaXRlbTxULFZlY3RvciwwPiB0eXBlOwotICAg
IH07Ci19OwotCi19fQotCi0jZW5kaWYgCi0KLSNlbmRpZiAvLyBCT09TVF9NUExfVkVDVE9SX0FV
WF9QVVNIX0JBQ0tfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1eF8vcHVzaF9mcm9udC5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1eF8v
cHVzaF9mcm9udC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMTVkZTU4Yjdj
OGIwYjc0YmMyNTE4MGU4OGQ5M2Y2OTBlNWQ0YTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvbXBsL3ZlY3Rvci9hdXhfL3B1c2hfZnJvbnQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEs
NDAgKzAsMCBAQAotCi0jaWZuZGVmIEJPT1NUX01QTF9WRUNUT1JfQVVYX1BVU0hfRlJPTlRfSFBQ
X0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01QTF9WRUNUT1JfQVVYX1BVU0hfRlJPTlRfSFBQX0lO
Q0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8v
IERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0
IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElk
JAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvcHVzaF9m
cm9udF9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy90eXBlb2YuaHBw
PgotCi0jaWYgZGVmaW5lZChCT09TVF9NUExfQ0ZHX1RZUEVPRl9CQVNFRF9TRVFVRU5DRVMpCi0K
LSMgICBpbmNsdWRlIDxib29zdC9tcGwvdmVjdG9yL2F1eF8vaXRlbS5ocHA+Ci0jICAgaW5jbHVk
ZSA8Ym9vc3QvbXBsL3ZlY3Rvci9hdXhfL3RhZy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5h
bWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgcHVzaF9mcm9udF9pbXBsPCBhdXg6
OnZlY3Rvcl90YWcgPgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBWZWN0b3IsIHR5cGVuYW1l
IFQgPiBzdHJ1Y3QgYXBwbHkKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdl9pdGVtPFQsVmVjdG9y
LDE+IHR5cGU7Ci0gICAgfTsKLX07Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQ0ZHX1RZ
UEVPRl9CQVNFRF9TRVFVRU5DRVMKLQotI2VuZGlmIC8vIEJPT1NUX01QTF9WRUNUT1JfQVVYX1BV
U0hfRlJPTlRfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1eF8vc2l6ZS5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1eF8vc2l6ZS5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMzFlODg2NmQ4MTYwZjVjMDczOWVlYTEw
ZTZlNDVlNWIxOTYzMDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rv
ci9hdXhfL3NpemUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotCi0jaWZuZGVm
IEJPT1NUX01QTF9WRUNUT1JfQVVYX1NJWkVfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX01Q
TF9WRUNUT1JfQVVYX1NJWkVfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1
cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0
d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3Ig
ZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNp
bmNsdWRlIDxib29zdC9tcGwvc2l6ZV9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC92ZWN0
b3IvYXV4Xy9PMV9zaXplLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvdmVjdG9yL2F1eF8vdGFn
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvdHlwZW9mLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvY3Rwcy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7
IG5hbWVzcGFjZSBtcGwgewotCi0jaWYgZGVmaW5lZChCT09TVF9NUExfQ0ZHX1RZUEVPRl9CQVNF
RF9TRVFVRU5DRVMpCi0KLXRlbXBsYXRlPD4KLXN0cnVjdCBzaXplX2ltcGw8IGF1eDo6dmVjdG9y
X3RhZyA+Ci0gICAgOiBPMV9zaXplX2ltcGw8IGF1eDo6dmVjdG9yX3RhZyA+Ci17Ci19OwotCi0j
ZWxzZQotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fVEVNUExBVEVfUEFSVElBTF9TUEVDSUFMSVpB
VElPTikKLQotdGVtcGxhdGU8IGxvbmcgTiA+Ci1zdHJ1Y3Qgc2l6ZV9pbXBsPCBhdXg6OnZlY3Rv
cl90YWc8Tj4gPgotICAgIDogTzFfc2l6ZV9pbXBsPCBhdXg6OnZlY3Rvcl90YWc8Tj4gPgotewot
fTsKLQotI2VuZGlmIC8vIEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04K
LQotI2VuZGlmIC8vIEJPT1NUX01QTF9DRkdfVFlQRU9GX0JBU0VEX1NFUVVFTkNFUwotCi19fQot
Ci0jZW5kaWYgLy8gQk9PU1RfTVBMX1ZFQ1RPUl9BVVhfU0laRV9IUFBfSU5DTFVERUQKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0
b3IvYXV4Xy90YWcuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvbXBsL3ZlY3Rvci9hdXhfL3RhZy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDkwZDE2ZTM4YzA4MThlZTI4YjZlYjkzMTBiMmJiMzAxMDlmNjZlZmUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci9hdXhfL3RhZy5ocHAKKysrIC9kZXYvbnVsbApA
QCAtMSwzMiArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX1ZFQ1RPUl9BVVhfVEFHX0hQUF9J
TkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfVkVDVE9SX0FVWF9UQUdfSFBQX0lOQ0xVREVECi0K
LS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAtMjAwNAotLy8KLS8vIERpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gCi0vLyAo
U2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAotLy8gaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAotLy8gJERh
dGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvdHlw
ZW9mLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9udHRwX2RlY2wuaHBwPgotCi1uYW1l
c3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFtZXNwYWNlIGF1eCB7Ci0KLXN0cnVjdCB2
X2l0ZXJfdGFnOwotCi0jaWYgZGVmaW5lZChCT09TVF9NUExfQ0ZHX1RZUEVPRl9CQVNFRF9TRVFV
RU5DRVMpCi1zdHJ1Y3QgdmVjdG9yX3RhZzsKLSNlbHNlCi10ZW1wbGF0ZTwgQk9PU1RfTVBMX0FV
WF9OVFRQX0RFQ0wobG9uZywgTikgPiBzdHJ1Y3QgdmVjdG9yX3RhZzsKLSNlbmRpZgotCi19fX0K
LQotI2VuZGlmIC8vIEJPT1NUX01QTF9WRUNUT1JfQVVYX1RBR19IUFBfSU5DTFVERUQKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0
b3IvYXV4Xy92ZWN0b3IwLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L21wbC92ZWN0b3IvYXV4Xy92ZWN0b3IwLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDAyNjY3MzYwZDNjNzI2ODc2NzdiMzRhNzNmMDRjZWU4NTRmNmRkNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL2F1eF8vdmVjdG9yMC5ocHAKKysr
IC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX1ZFQ1RPUl9B
VVhfVkVDVE9SMF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX1ZFQ1RPUl9BVVhfVkVD
VE9SMF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAwMC0y
MDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0
IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0v
LwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0aW9u
LgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJvb3N0
L21wbC9sb25nLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvdm9pZC5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvbXBsL2F1eF8vbmEuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9hdXhfL3R5cGVfd3Jh
cHBlci5ocHA+Ci0KLSNpbmNsdWRlIDxib29zdC9tcGwvdmVjdG9yL2F1eF8vaXRlcmF0b3IuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L21wbC92ZWN0b3IvYXV4Xy90YWcuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L21wbC9hdXhfL2NvbmZpZy90eXBlb2YuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1l
c3BhY2UgbXBsIHsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIER1bW15ID0gbmEgPiBzdHJ1Y3QgdmVj
dG9yMDsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgdmVjdG9yMDxuYT4KLXsKLSNpZiBkZWZpbmVkKEJP
T1NUX01QTF9DRkdfVFlQRU9GX0JBU0VEX1NFUVVFTkNFUykKLSAgICB0eXBlZGVmIGF1eDo6dmVj
dG9yX3RhZyB0YWc7Ci0gICAgdHlwZWRlZiB2ZWN0b3IwICAgICAgICAgdHlwZTsKLSAgICB0eXBl
ZGVmIGxvbmdfPDMyNzY4PiAgICBsb3dlcl9ib3VuZF87Ci0gICAgdHlwZWRlZiBsb3dlcl9ib3Vu
ZF8gICAgdXBwZXJfYm91bmRfOwotICAgIHR5cGVkZWYgbG9uZ188MD4gICAgICAgIHNpemU7Ci0K
LSAgICBzdGF0aWMgYXV4Ojp0eXBlX3dyYXBwZXI8dm9pZF8+IGl0ZW1fKC4uLik7Ci0jZWxzZQot
ICAgIHR5cGVkZWYgYXV4Ojp2ZWN0b3JfdGFnPDA+IHRhZzsKLSAgICB0eXBlZGVmIHZlY3RvcjAg
dHlwZTsKLSAgICB0eXBlZGVmIHZvaWRfIGl0ZW0wOwotICAgIAotICAgIHR5cGVkZWYgdl9pdGVy
PHZlY3RvcjA8PiwwPiBiZWdpbjsKLSAgICB0eXBlZGVmIHZfaXRlcjx2ZWN0b3IwPD4sMD4gZW5k
OwotI2VuZGlmCi19OwotCi19fQotCi0jZW5kaWYgLy8gQk9PU1RfTVBMX1ZFQ1RPUl9BVVhfVkVD
VE9SMF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvdmVjdG9yMC5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL3ZlY3RvcjAuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTc1OWRkYzI0YjMyYjViZDJjMWFmMjgyZWE1ZmM5YWQ3
NGNlMGZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvdmVjdG9y
MC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBM
X1ZFQ1RPUl9WRUNUT1IwX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfVkVDVE9SX1ZF
Q1RPUjBfSFBQX0lOQ0xVREVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDAt
MjAwNAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNl
LCBWZXJzaW9uIDEuMC4gCi0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0IAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQot
Ly8KLS8vIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlv
bi4KLQotLy8gJElkJAotLy8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29z
dC9tcGwvdmVjdG9yL2F1eF8vYXQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC92ZWN0b3IvYXV4
Xy9mcm9udC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL3ZlY3Rvci9hdXhfL3B1c2hfZnJvbnQu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC92ZWN0b3IvYXV4Xy9wb3BfZnJvbnQuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L21wbC92ZWN0b3IvYXV4Xy9wdXNoX2JhY2suaHBwPgotI2luY2x1ZGUgPGJv
b3N0L21wbC92ZWN0b3IvYXV4Xy9wb3BfYmFjay5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL3Zl
Y3Rvci9hdXhfL2JhY2suaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC92ZWN0b3IvYXV4Xy9jbGVh
ci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL3ZlY3Rvci9hdXhfL08xX3NpemUuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L21wbC92ZWN0b3IvYXV4Xy9zaXplLmhwcD4KLSNpbmNsdWRlIDxib29zdC9t
cGwvdmVjdG9yL2F1eF8vZW1wdHkuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC92ZWN0b3IvYXV4
Xy9pdGVtLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvdmVjdG9yL2F1eF8vaXRlcmF0b3IuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L21wbC92ZWN0b3IvYXV4Xy92ZWN0b3IwLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9tcGwvdmVjdG9yL2F1eF8vYmVnaW5fZW5kLmhwcD4KLSNpbmNsdWRlIDxib29zdC9t
cGwvdmVjdG9yL2F1eF8vdGFnLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9WRUNUT1JfVkVD
VE9SMF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvdmVjdG9yMTAuaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci92ZWN0b3IxMC5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYTJhMTYzYWU3M2M4MWI1NmYzOGIwNjRiMDc3YjRi
NjM0MmMwNWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci92ZWN0
b3IxMC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1Rf
TVBMX1ZFQ1RPUl9WRUNUT1IxMF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfTVBMX1ZFQ1RP
Ul9WRUNUT1IxMF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kg
MjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVu
dGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2lmICFkZWZp
bmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBs
L3ZlY3Rvci92ZWN0b3IwLmhwcD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8v
Y29uZmlnL3VzZV9wcmVwcm9jZXNzZWQuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NG
R19OT19QUkVQUk9DRVNTRURfSEVBREVSUykgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9Q
UkVQUk9DRVNTSU5HX01PREUpCi0KLSMgICBkZWZpbmUgQk9PU1RfTVBMX1BSRVBST0NFU1NFRF9I
RUFERVIgdmVjdG9yMTAuaHBwCi0jICAgaW5jbHVkZSA8Ym9vc3QvbXBsL3ZlY3Rvci9hdXhfL2lu
Y2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcD4KLQotI2Vsc2UKLQotIyAgIGluY2x1ZGUgPGJvb3N0L21w
bC9hdXhfL2NvbmZpZy90eXBlb2YuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2Nv
bmZpZy9jdHBzLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvaXRlcmF0ZS5o
cHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi0jICAgZGVmaW5lIEJP
T1NUX1BQX0lURVJBVElPTl9QQVJBTVNfMSBcCi0gICAgKDMsKDAsIDEwLCA8Ym9vc3QvbXBsL3Zl
Y3Rvci9hdXhfL251bWJlcmVkLmhwcD4pKQotIyAgIGluY2x1ZGUgQk9PU1RfUFBfSVRFUkFURSgp
Ci0KLX19Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfQ0ZHX05PX1BSRVBST0NFU1NFRF9IRUFERVJT
Ci0KLSNlbmRpZiAvLyBCT09TVF9NUExfVkVDVE9SX1ZFQ1RPUjEwX0hQUF9JTkNMVURFRApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3Zl
Y3Rvci92ZWN0b3IyMC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9tcGwvdmVjdG9yL3ZlY3RvcjIwLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTZkMWI5ZjQ1Y2RlZGVjNDE3NjJhNzM5OGQ3NjEzYzE2NzBiMjY5My4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9tcGwvdmVjdG9yL3ZlY3RvcjIwLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQ1ICswLDAgQEAKLQotI2lmbmRlZiBCT09TVF9NUExfVkVDVE9SX1ZFQ1RPUjIwX0hQ
UF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfVkVDVE9SX1ZFQ1RPUjIwX0hQUF9JTkNMVURF
RAotCi0vLyBDb3B5cmlnaHQgQWxla3NleSBHdXJ0b3ZveSAyMDAwLTIwMDQKLS8vCi0vLyBEaXN0
cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIAot
Ly8gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKLS8v
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBTZWUgaHR0cDov
L3d3dy5ib29zdC5vcmcvbGlicy9tcGwgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICRJZCQKLS8v
ICREYXRlJAotLy8gJFJldmlzaW9uJAotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX1BSRVBST0NF
U1NJTkdfTU9ERSkKLSMgICBpbmNsdWRlIDxib29zdC9tcGwvdmVjdG9yL3ZlY3RvcjEwLmhwcD4K
LSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2F1eF8vY29uZmlnL3VzZV9wcmVwcm9jZXNz
ZWQuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVB
REVSUykgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi0K
LSMgICBkZWZpbmUgQk9PU1RfTVBMX1BSRVBST0NFU1NFRF9IRUFERVIgdmVjdG9yMjAuaHBwCi0j
ICAgaW5jbHVkZSA8Ym9vc3QvbXBsL3ZlY3Rvci9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhw
cD4KLQotI2Vsc2UKLQotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy90eXBlb2Yu
aHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L21wbC9hdXhfL2NvbmZpZy9jdHBzLmhwcD4KLSMgICBp
bmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvaXRlcmF0ZS5ocHA+Ci0KLW5hbWVzcGFjZSBib29z
dCB7IG5hbWVzcGFjZSBtcGwgewotCi0jICAgZGVmaW5lIEJPT1NUX1BQX0lURVJBVElPTl9QQVJB
TVNfMSBcCi0gICAgKDMsKDExLCAyMCwgPGJvb3N0L21wbC92ZWN0b3IvYXV4Xy9udW1iZXJlZC5o
cHA+KSkKLSMgICBpbmNsdWRlIEJPT1NUX1BQX0lURVJBVEUoKQotCi19fQotCi0jZW5kaWYgLy8g
Qk9PU1RfTVBMX0NGR19OT19QUkVQUk9DRVNTRURfSEVBREVSUwotCi0jZW5kaWYgLy8gQk9PU1Rf
TVBMX1ZFQ1RPUl9WRUNUT1IyMF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92ZWN0b3IvdmVjdG9yMzAuaHBwIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbXBsL3ZlY3Rvci92ZWN0
b3IzMC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZjBhNWViMDVmOTQ5MGQ3
MzViMTFhZTVmOGM2NDcwM2I4OTFlYjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
bXBsL3ZlY3Rvci92ZWN0b3IzMC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0K
LSNpZm5kZWYgQk9PU1RfTVBMX1ZFQ1RPUl9WRUNUT1IzMF9IUFBfSU5DTFVERUQKLSNkZWZpbmUg
Qk9PU1RfTVBMX1ZFQ1RPUl9WRUNUT1IzMF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFs
ZWtzZXkgR3VydG92b3kgMjAwMC0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJv
b3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMv
bXBsIGZvciBkb2N1bWVudGF0aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lv
biQKLQotI2lmICFkZWZpbmVkKEJPT1NUX01QTF9QUkVQUk9DRVNTSU5HX01PREUpCi0jICAgaW5j
bHVkZSA8Ym9vc3QvbXBsL3ZlY3Rvci92ZWN0b3IyMC5ocHA+Ci0jZW5kaWYKLQotI2luY2x1ZGUg
PGJvb3N0L21wbC9hdXhfL2NvbmZpZy91c2VfcHJlcHJvY2Vzc2VkLmhwcD4KLQotI2lmICFkZWZp
bmVkKEJPT1NUX01QTF9DRkdfTk9fUFJFUFJPQ0VTU0VEX0hFQURFUlMpIFwKLSAgICAmJiAhZGVm
aW5lZChCT09TVF9NUExfUFJFUFJPQ0VTU0lOR19NT0RFKQotCi0jICAgZGVmaW5lIEJPT1NUX01Q
TF9QUkVQUk9DRVNTRURfSEVBREVSIHZlY3RvcjMwLmhwcAotIyAgIGluY2x1ZGUgPGJvb3N0L21w
bC92ZWN0b3IvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHA+Ci0KLSNlbHNlCi0KLSMgICBp
bmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvdHlwZW9mLmhwcD4KLSMgICBpbmNsdWRlIDxi
b29zdC9tcGwvYXV4Xy9jb25maWcvY3Rwcy5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJv
Y2Vzc29yL2l0ZXJhdGUuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsK
LQotIyAgIGRlZmluZSBCT09TVF9QUF9JVEVSQVRJT05fUEFSQU1TXzEgXAotICAgICgzLCgyMSwg
MzAsIDxib29zdC9tcGwvdmVjdG9yL2F1eF8vbnVtYmVyZWQuaHBwPikpCi0jICAgaW5jbHVkZSBC
T09TVF9QUF9JVEVSQVRFKCkKLQotfX0KLQotI2VuZGlmIC8vIEJPT1NUX01QTF9DRkdfTk9fUFJF
UFJPQ0VTU0VEX0hFQURFUlMKLQotI2VuZGlmIC8vIEJPT1NUX01QTF9WRUNUT1JfVkVDVE9SMzBf
SFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvdm9pZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9tcGwvdm9pZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNk
Y2JkZDFkMGVhZTc4N2JhY2E0OTFkZGVkMzViNWJiZjI1YWRiOTEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvbXBsL3ZvaWQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBA
QAotCi0jaWZuZGVmIEJPT1NUX01QTF9WT0lEX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9N
UExfVk9JRF9IUFBfSU5DTFVERUQKLQotLy8gQ29weXJpZ2h0IEFsZWtzZXkgR3VydG92b3kgMjAw
MS0yMDA0Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLiAKLS8vIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQgCi0vLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQp
Ci0vLwotLy8gU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvbXBsIGZvciBkb2N1bWVudGF0
aW9uLgotCi0vLyAkSWQkCi0vLyAkRGF0ZSQKLS8vICRSZXZpc2lvbiQKLQotI2luY2x1ZGUgPGJv
b3N0L21wbC92b2lkX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2Jvb2wuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9hdXhfL25hX3NwZWMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9h
dXhfL2NvbmZpZy9tc3ZjLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9jb25maWcvd29y
a2Fyb3VuZC5ocHA+Ci0KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFX09QRU4K
LQotLy8gIFtKREcgRmViLTQtMjAwM10gbWFkZSB2b2lkXyBhIGNvbXBsZXRlIHR5cGUgdG8gYWxs
b3cgaXQgdG8gYmUKLS8vICBpbnN0YW50aWF0ZWQgc28gdGhhdCBpdCBjYW4gYmUgcGFzc2VkIGlu
IGFzIGFuIG9iamVjdCB0aGF0IGNhbiBiZQotLy8gIHVzZWQgdG8gc2VsZWN0IGFuIG92ZXJsb2Fk
ZWQgZnVuY3Rpb24uIFBvc3NpYmxlIHVzZSBpbmNsdWRlcyBzaWduYWxpbmcKLS8vICBhIHplcm8g
YXJpdHkgZnVuY3RvciBldmFsdWF0aW9uIGNhbGwuCi1zdHJ1Y3Qgdm9pZF8geyB0eXBlZGVmIHZv
aWRfIHR5cGU7IH07Ci0KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFX0NMT1NF
Ci0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgewotCi10ZW1wbGF0ZTwgdHlwZW5h
bWUgVCA+Ci1zdHJ1Y3QgaXNfdm9pZF8KLSAgICA6IGZhbHNlXwotewotI2lmIEJPT1NUX1dPUktB
Uk9VTkQoQk9PU1RfTVNWQywgPCAxMzAwKQotICAgIHVzaW5nIGZhbHNlXzo6dmFsdWU7Ci0jZW5k
aWYKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBpc192b2lkXzx2b2lkXz4KLSAgICA6IHRydWVf
Ci17Ci0jaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8IDEzMDApCi0gICAgdXNpbmcg
dHJ1ZV86OnZhbHVlOwotI2VuZGlmCi19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+Ci1zdHJ1
Y3QgaXNfbm90X3ZvaWRfCi0gICAgOiB0cnVlXwotewotI2lmIEJPT1NUX1dPUktBUk9VTkQoQk9P
U1RfTVNWQywgPCAxMzAwKQotICAgIHVzaW5nIHRydWVfOjp2YWx1ZTsKLSNlbmRpZgotfTsKLQot
dGVtcGxhdGU8Pgotc3RydWN0IGlzX25vdF92b2lkXzx2b2lkXz4KLSAgICA6IGZhbHNlXwotewot
I2lmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPCAxMzAwKQotICAgIHVzaW5nIGZhbHNl
Xzo6dmFsdWU7Ci0jZW5kaWYKLX07Ci0KLUJPT1NUX01QTF9BVVhfTkFfU1BFQygxLCBpc192b2lk
XykKLUJPT1NUX01QTF9BVVhfTkFfU1BFQygxLCBpc19ub3Rfdm9pZF8pCi0KLX19Ci0KLSNlbmRp
ZiAvLyBCT09TVF9NUExfVk9JRF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92b2lkX2Z3ZC5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9tcGwvdm9pZF9md2QuaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjA3OGI1YzllNTkxMzkzMzEzMzJmNDE0NDdiNTgw
NTlhMjU1Y2I2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L21wbC92b2lkX2Z3ZC5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0KLSNpZm5kZWYgQk9PU1RfTVBMX1ZP
SURfRldEX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9NUExfVk9JRF9GV0RfSFBQX0lOQ0xV
REVECi0KLS8vIENvcHlyaWdodCBBbGVrc2V5IEd1cnRvdm95IDIwMDEtMjAwNAotLy8KLS8vIERp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4g
Ci0vLyAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAot
Ly8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIFNlZSBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9saWJzL21wbCBmb3IgZG9jdW1lbnRhdGlvbi4KLQotLy8gJElkJAot
Ly8gJERhdGUkCi0vLyAkUmV2aXNpb24kCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYXV4Xy9hZGxf
YmFycmllci5ocHA+Ci0KLUJPT1NUX01QTF9BVVhfQURMX0JBUlJJRVJfTkFNRVNQQUNFX09QRU4K
LQotc3RydWN0IHZvaWRfOwotCi1CT09TVF9NUExfQVVYX0FETF9CQVJSSUVSX05BTUVTUEFDRV9D
TE9TRQotQk9PU1RfTVBMX0FVWF9BRExfQkFSUklFUl9ERUNMKHZvaWRfKQotCi0jZW5kaWYgLy8g
Qk9PU1RfTVBMX1ZPSURfRldEX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvbmV4dF9wcmlvci5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9uZXh0X3ByaW9yLmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzg1NGVjNDM2YTQzNGZkNGVhMGE0Yjc0NGY5MjhiNjc3OWJm
YjA1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9uZXh0X3ByaW9yLmhwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vLyAgQm9vc3QgbmV4dF9wcmlvci5ocHAgaGVh
ZGVyIGZpbGUgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0KLS8v
ICAoQykgQ29weXJpZ2h0IERhdmUgQWJyYWhhbXMgYW5kIERhbmllbCBXYWxrZXIgMTk5OS0yMDAz
LiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QKLS8vICBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJz
aW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZQotLy8gIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLQotLy8gIFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkgZm9yIGRvY3VtZW50YXRpb24uCi0KLS8v
ICBSZXZpc2lvbiBIaXN0b3J5Ci0vLyAgMTMgRGVjIDIwMDMgIEFkZGVkIG5leHQoeCwgbikgYW5k
IHByaW9yKHgsIG4pIChEYW5pZWwgV2Fsa2VyKQotCi0jaWZuZGVmIEJPT1NUX05FWFRfUFJJT1Jf
SFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX05FWFRfUFJJT1JfSFBQX0lOQ0xVREVECi0KLSNp
bmNsdWRlIDxpdGVyYXRvcj4KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8PSAx
MzEwCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2FuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90
cmFpdHMvaXNfaW50ZWdyYWwuaHBwPgotI2VuZGlmCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaXNfdW5zaWduZWQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludGVncmFs
X3Byb21vdGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvbWFrZV9zaWduZWQu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2hhc19wbHVzLmhwcD4KLSNpbmNsdWRl
IDxib29zdC90eXBlX3RyYWl0cy9oYXNfcGx1c19hc3NpZ24uaHBwPgotI2luY2x1ZGUgPGJvb3N0
L3R5cGVfdHJhaXRzL2hhc19taW51cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
aGFzX21pbnVzX2Fzc2lnbi5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLS8vICBIZWxwZXIg
ZnVuY3Rpb25zIGZvciBjbGFzc2VzIGxpa2UgYmlkaXJlY3Rpb25hbCBpdGVyYXRvcnMgbm90IHN1
cHBvcnRpbmcKLS8vICBvcGVyYXRvcisgYW5kIG9wZXJhdG9yLQotLy8KLS8vICBVc2FnZToKLS8v
ICAgIGNvbnN0IHN0ZDo6bGlzdDxUPjo6aXRlcmF0b3IgcCA9IGdldF9zb21lX2l0ZXJhdG9yKCk7
Ci0vLyAgICBjb25zdCBzdGQ6Omxpc3Q8VD46Oml0ZXJhdG9yIHByZXYgPSBib29zdDo6cHJpb3Io
cCk7Ci0vLyAgICBjb25zdCBzdGQ6Omxpc3Q8VD46Oml0ZXJhdG9yIG5leHQgPSBib29zdDo6bmV4
dChwcmV2LCAyKTsKLQotLy8gIENvbnRyaWJ1dGVkIGJ5IERhdmUgQWJyYWhhbXMKLQotbmFtZXNw
YWNlIG5leHRfcHJpb3JfZGV0YWlsIHsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHR5cGVuYW1l
IERpc3RhbmNlLCBib29sIEhhc1BsdXMgPSBoYXNfcGx1czwgVCwgRGlzdGFuY2UgPjo6dmFsdWUg
Pgotc3RydWN0IG5leHRfaW1wbDIKLXsKLSAgICBzdGF0aWMgVCBjYWxsKFQgeCwgRGlzdGFuY2Ug
bikKLSAgICB7Ci0gICAgICAgIHN0ZDo6YWR2YW5jZSh4LCBuKTsKLSAgICAgICAgcmV0dXJuIHg7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHR5cGVuYW1lIERpc3RhbmNlID4K
LXN0cnVjdCBuZXh0X2ltcGwyPCBULCBEaXN0YW5jZSwgdHJ1ZSA+Ci17Ci0gICAgc3RhdGljIFQg
Y2FsbChUIHgsIERpc3RhbmNlIG4pCi0gICAgewotICAgICAgICByZXR1cm4geCArIG47Ci0gICAg
fQotfTsKLQotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRGlzdGFuY2UsIGJvb2wg
SGFzUGx1c0Fzc2lnbiA9IGhhc19wbHVzX2Fzc2lnbjwgVCwgRGlzdGFuY2UgPjo6dmFsdWUgPgot
c3RydWN0IG5leHRfaW1wbDEgOgotICAgIHB1YmxpYyBuZXh0X2ltcGwyPCBULCBEaXN0YW5jZSA+
Ci17Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRGlzdGFuY2UgPgotc3Ry
dWN0IG5leHRfaW1wbDE8IFQsIERpc3RhbmNlLCB0cnVlID4KLXsKLSAgICBzdGF0aWMgVCBjYWxs
KFQgeCwgRGlzdGFuY2UgbikKLSAgICB7Ci0gICAgICAgIHggKz0gbjsKLSAgICAgICAgcmV0dXJu
IHg7Ci0gICAgfQotfTsKLQotCi10ZW1wbGF0ZTwKLSAgICB0eXBlbmFtZSBULAotICAgIHR5cGVu
YW1lIERpc3RhbmNlLAotICAgIHR5cGVuYW1lIFByb21vdGVkRGlzdGFuY2UgPSB0eXBlbmFtZSBp
bnRlZ3JhbF9wcm9tb3Rpb248IERpc3RhbmNlID46OnR5cGUsCi0jaWYgIWRlZmluZWQoX01TQ19W
RVIpIHx8IF9NU0NfVkVSID4gMTMxMAotICAgIGJvb2wgSXNVSW50ID0gaXNfdW5zaWduZWQ8IFBy
b21vdGVkRGlzdGFuY2UgPjo6dmFsdWUKLSNlbHNlCi0gICAgLy8gTVNWQyA3LjEgaGFzIHByb2Js
ZW1zIHdpdGggYXBwbHlpbmcgaXNfdW5zaWduZWQgdG8gbm9uLWludGVncmFsIHR5cGVzCi0gICAg
Ym9vbCBJc1VJbnQgPSBtcGw6OmFuZF88IGlzX2ludGVncmFsPCBQcm9tb3RlZERpc3RhbmNlID4s
IGlzX3Vuc2lnbmVkPCBQcm9tb3RlZERpc3RhbmNlID4gPjo6dmFsdWUKLSNlbmRpZgotPgotc3Ry
dWN0IHByaW9yX2ltcGwzCi17Ci0gICAgc3RhdGljIFQgY2FsbChUIHgsIERpc3RhbmNlIG4pCi0g
ICAgewotICAgICAgICBzdGQ6OmFkdmFuY2UoeCwgLW4pOwotICAgICAgICByZXR1cm4geDsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRGlzdGFuY2UsIHR5cGVu
YW1lIFByb21vdGVkRGlzdGFuY2UgPgotc3RydWN0IHByaW9yX2ltcGwzPCBULCBEaXN0YW5jZSwg
UHJvbW90ZWREaXN0YW5jZSwgdHJ1ZSA+Ci17Ci0gICAgc3RhdGljIFQgY2FsbChUIHgsIERpc3Rh
bmNlIG4pCi0gICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1ha2Vfc2lnbmVkPCBQcm9t
b3RlZERpc3RhbmNlID46OnR5cGUgc2lnbmVkX2Rpc3RhbmNlOwotICAgICAgICBzdGQ6OmFkdmFu
Y2UoeCwgLXN0YXRpY19jYXN0PCBzaWduZWRfZGlzdGFuY2UgPihzdGF0aWNfY2FzdDwgUHJvbW90
ZWREaXN0YW5jZSA+KG4pKSk7Ci0gICAgICAgIHJldHVybiB4OwotICAgIH0KLX07Ci0KLQotdGVt
cGxhdGU8IHR5cGVuYW1lIFQsIHR5cGVuYW1lIERpc3RhbmNlLCBib29sIEhhc01pbnVzID0gaGFz
X21pbnVzPCBULCBEaXN0YW5jZSA+Ojp2YWx1ZSA+Ci1zdHJ1Y3QgcHJpb3JfaW1wbDIgOgotICAg
IHB1YmxpYyBwcmlvcl9pbXBsMzwgVCwgRGlzdGFuY2UgPgotewotfTsKLQotdGVtcGxhdGU8IHR5
cGVuYW1lIFQsIHR5cGVuYW1lIERpc3RhbmNlID4KLXN0cnVjdCBwcmlvcl9pbXBsMjwgVCwgRGlz
dGFuY2UsIHRydWUgPgotewotICAgIHN0YXRpYyBUIGNhbGwoVCB4LCBEaXN0YW5jZSBuKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHggLSBuOwotICAgIH0KLX07Ci0KLQotdGVtcGxhdGU8IHR5cGVu
YW1lIFQsIHR5cGVuYW1lIERpc3RhbmNlLCBib29sIEhhc01pbnVzQXNzaWduID0gaGFzX21pbnVz
X2Fzc2lnbjwgVCwgRGlzdGFuY2UgPjo6dmFsdWUgPgotc3RydWN0IHByaW9yX2ltcGwxIDoKLSAg
ICBwdWJsaWMgcHJpb3JfaW1wbDI8IFQsIERpc3RhbmNlID4KLXsKLX07Ci0KLXRlbXBsYXRlPCB0
eXBlbmFtZSBULCB0eXBlbmFtZSBEaXN0YW5jZSA+Ci1zdHJ1Y3QgcHJpb3JfaW1wbDE8IFQsIERp
c3RhbmNlLCB0cnVlID4KLXsKLSAgICBzdGF0aWMgVCBjYWxsKFQgeCwgRGlzdGFuY2UgbikKLSAg
ICB7Ci0gICAgICAgIHggLT0gbjsKLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgfQotfTsKLQotfSAv
LyBuYW1lc3BhY2UgbmV4dF9wcmlvcl9kZXRhaWwKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1pbmxp
bmUgVCBuZXh0KFQgeCkgeyByZXR1cm4gKyt4OyB9Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBEaXN0YW5jZT4KLWlubGluZSBUIG5leHQoVCB4LCBEaXN0YW5jZSBuKQotewotICAgIHJldHVy
biBuZXh0X3ByaW9yX2RldGFpbDo6bmV4dF9pbXBsMTwgVCwgRGlzdGFuY2UgPjo6Y2FsbCh4LCBu
KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1pbmxpbmUgVCBwcmlvcihUIHgpIHsgcmV0dXJu
IC0teDsgfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRGlzdGFuY2U+Ci1pbmxpbmUgVCBw
cmlvcihUIHgsIERpc3RhbmNlIG4pCi17Ci0gICAgcmV0dXJuIG5leHRfcHJpb3JfZGV0YWlsOjpw
cmlvcl9pbXBsMTwgVCwgRGlzdGFuY2UgPjo6Y2FsbCh4LCBuKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgYm9vc3QKLQotI2VuZGlmICAvLyBCT09TVF9ORVhUX1BSSU9SX0hQUF9JTkNMVURFRApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qvbm9uY29w
eWFibGUuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qvbm9u
Y29weWFibGUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTk4ZWU4NjRhODVh
YjdmMmEyYzZmNjUwNWZhMzRiMmI2MzQ0ZmI1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L25vbmNvcHlhYmxlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMTQgR2xlbiBGZXJuYW5kZXMKLSAqCi0gKiBEaXN0cmlidXRlZCB1
bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKi8KLQotI2lmbmRlZiBCT09TVF9OT05DT1BZ
QUJMRV9IUFAKLSNkZWZpbmUgQk9PU1RfTk9OQ09QWUFCTEVfSFBQCi0KLS8vIFRoZSBoZWFkZXIg
ZmlsZSBhdCB0aGlzIHBhdGggaXMgZGVwcmVjYXRlZDsKLS8vIHVzZSBib29zdC9jb3JlL25vbmNv
cHlhYmxlLmhwcCBpbnN0ZWFkLgotCi0jaW5jbHVkZSA8Ym9vc3QvY29yZS9ub25jb3B5YWJsZS5o
cHA+Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3Qvb3BlcmF0b3JzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L29wZXJhdG9ycy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDNmYzA4ZDVlOGRiMmU0Mzg0N2JjZjM0ZmFlNWQ5YWZiNDljMDUzM2EuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3Qvb3BlcmF0b3JzLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5MiAr
MCwwIEBACi0vLyAgQm9vc3Qgb3BlcmF0b3JzLmhwcCBoZWFkZXIgZmlsZSAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0KLS8vICAoQykgQ29weXJpZ2h0IERhdmlk
IEFicmFoYW1zLCBKZXJlbXkgU2llaywgRGFyeWxlIFdhbGtlciAxOTk5LTIwMDEuCi0vLyAgKEMp
IENvcHlyaWdodCBEYW5pZWwgRnJleSAyMDAyLTIwMTYuCi0vLyAgRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0vLyAgYWNjb21w
YW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy91dGlsaXR5L29wZXJhdG9ycy5odG0gZm9yIGRvY3VtZW50YXRpb24uCi0KLS8vICBSZXZp
c2lvbiBIaXN0b3J5Ci0vLyAgMjIgRmViIDE2IEFkZGVkIEFETCBwcm90ZWN0aW9uLCBwcmVzZXJ2
ZSBvbGQgd29yay1hcm91bmRzIGluCi0vLyAgICAgICAgICAgIG9wZXJhdG9yc192MS5ocHAgYW5k
IGNsZWFuIHVwIHRoaXMgZmlsZS4gKERhbmllbCBGcmV5KQotLy8gIDE2IERlYyAxMCBMaW1pdCB3
YXJuaW5nIHN1cHByZXNzaW9uIGZvciA0Mjg0IHRvIG9sZGVyIHZlcnNpb25zIG9mIFZDKysKLS8v
ICAgICAgICAgICAgKE1hdHRoZXcgQnJhZGJ1cnksIGZpeGVzICM0NDMyKQotLy8gIDA3IEF1ZyAw
OCBBZGRlZCAiZXVjbGlkZWFuIiBzcGVsbGluZy4gKERhbmllbCBGcmV5KQotLy8gIDAzIEFwciAw
OCBNYWtlIHN1cmUgImNvbnZlcnRpYmxlIHRvIGJvb2wiIGlzIHN1ZmZpY2llbnQKLS8vICAgICAg
ICAgICAgZm9yIFQ6Om9wZXJhdG9yPCwgZXRjLiAoRGFuaWVsIEZyZXkpCi0vLyAgMjQgTWF5IDA3
IENoYW5nZWQgZW1wdHlfYmFzZSB0byBkZXBlbmQgb24gVCwgc2VlCi0vLyAgICAgICAgICAgIGh0
dHA6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0Lzk3OQotLy8gIDIxIE9jdCAwMiBN
b2RpZmllZCBpbXBsZW1lbnRhdGlvbiBvZiBvcGVyYXRvcnMgdG8gYWxsb3cgY29tcGlsZXJzIHdp
dGggYQotLy8gICAgICAgICAgICBjb3JyZWN0IG5hbWVkIHJldHVybiB2YWx1ZSBvcHRpbWl6YXRp
b24gKE5SVk8pIHRvIHByb2R1Y2Ugb3B0aW1hbAotLy8gICAgICAgICAgICBjb2RlLiAgKERhbmll
bCBGcmV5KQotLy8gIDAyIERlYyAwMSBCdWcgZml4ZWQgaW4gcmFuZG9tX2FjY2Vzc19pdGVyYXRh
YmxlLiAgKEhlbG11dCBaZWlzZWwpCi0vLyAgMjggU2VwIDAxIEZhY3RvcmVkIG91dCBpdGVyYXRv
ciBvcGVyYXRvciBncm91cHMuICAoRGFyeWxlIFdhbGtlcikKLS8vICAyNyBBdWcgMDEgJ2xlZnQn
IGZvcm0gZm9yIG5vbiBjb21tdXRhdGl2ZSBvcGVyYXRvcnMgYWRkZWQ7Ci0vLyAgICAgICAgICAg
IGFkZGl0aW9uYWwgY2xhc3NlcyBmb3IgZ3JvdXBzIG9mIHJlbGF0ZWQgb3BlcmF0b3JzIGFkZGVk
OwotLy8gICAgICAgICAgICB3b3JrYXJvdW5kIGZvciBlbXB0eSBiYXNlIGNsYXNzIG9wdGltaXph
dGlvbgotLy8gICAgICAgICAgICBidWcgb2YgR0NDIDMuMCAoSGVsbXV0IFplaXNlbCkKLS8vICAy
NSBKdW4gMDEgb3V0cHV0X2l0ZXJhdG9yX2hlbHBlciBjaGFuZ2VzOiByZW1vdmVkIGRlZmF1bHQg
dGVtcGxhdGUKLS8vICAgICAgICAgICAgcGFyYW1ldGVycywgYWRkZWQgc3VwcG9ydCBmb3Igc2Vs
Zi1wcm94eWluZywgYWRkaXRpb25hbAotLy8gICAgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZCB0
ZXN0cyAoQWxla3NleSBHdXJ0b3ZveSkKLS8vICAyOSBNYXkgMDEgQWRkZWQgb3BlcmF0b3IgY2xh
c3NlcyBmb3IgPDwgYW5kID4+LiAgQWRkZWQgaW5wdXQgYW5kIG91dHB1dAotLy8gICAgICAgICAg
ICBpdGVyYXRvciBoZWxwZXIgY2xhc3Nlcy4gIEFkZGVkIGNsYXNzZXMgdG8gY29ubmVjdCBlcXVh
bGl0eSBhbmQKLS8vICAgICAgICAgICAgcmVsYXRpb25hbCBvcGVyYXRvcnMuICBBZGRlZCBjbGFz
c2VzIGZvciBncm91cHMgb2YgcmVsYXRlZAotLy8gICAgICAgICAgICBvcGVyYXRvcnMuICBSZWlt
cGxlbWVudGVkIGV4YW1wbGUgb3BlcmF0b3IgYW5kIGl0ZXJhdG9yIGhlbHBlcgotLy8gICAgICAg
ICAgICBjbGFzc2VzIGluIHRlcm1zIG9mIHRoZSBuZXcgZ3JvdXBzLiAgKERhcnlsZSBXYWxrZXIs
IHdpdGggaGVscAotLy8gICAgICAgICAgICBmcm9tIEFsZXh5IEd1cnRvdm95KQotLy8gIDExIEZl
YiAwMSBGaXhlZCBidWdzIGluIHRoZSBpdGVyYXRvciBoZWxwZXJzIHdoaWNoIHByZXZlbnRlZCBl
eHBsaWNpdGx5Ci0vLyAgICAgICAgICAgIHN1cHBsaWVkIGFyZ3VtZW50cyBmcm9tIGFjdHVhbGx5
IGJlaW5nIHVzZWQgKERhdmUgQWJyYWhhbXMpCi0vLyAgMDQgSnVsIDAwIEZpeGVkIE5PX09QRVJB
VE9SU19JTl9OQU1FU1BBQ0UgYnVncywgbWFqb3IgY2xlYW51cCBhbmQKLS8vICAgICAgICAgICAg
cmVmYWN0b3Jpbmcgb2YgY29tcGlsZXIgd29ya2Fyb3VuZHMsIGFkZGl0aW9uYWwgZG9jdW1lbnRh
dGlvbgotLy8gICAgICAgICAgICAoQWxleHkgR3VydG92b3kgYW5kIE1hcmsgUm9kZ2VycyB3aXRo
IHNvbWUgaGVscCBhbmQgcHJvbXB0aW5nIGZyb20KLS8vICAgICAgICAgICAgRGF2ZSBBYnJhaGFt
cykKLS8vICAyOCBKdW4gMDAgR2VuZXJhbCBjbGVhbnVwIGFuZCBpbnRlZ3JhdGlvbiBvZiBidWdm
aXhlcyBmcm9tIE1hcmsgUm9kZ2VycyBhbmQKLS8vICAgICAgICAgICAgSmVyZW15IFNpZWsgKERh
dmUgQWJyYWhhbXMpCi0vLyAgMjAgSnVuIDAwIENoYW5nZXMgdG8gYWNjb21tb2RhdGUgQm9ybGFu
ZCBDKytCdWlsZGVyIDQgYW5kIEJvcmxhbmQgQysrIDUuNQotLy8gICAgICAgICAgICAoTWFyayBS
b2RnZXJzKQotLy8gIDIwIEp1biAwMCBNaW5vciBmaXhlcyB0byB0aGUgcHJpb3IgcmV2aXNpb24g
KEFsZWtzZXkgR3VydG92b3kpCi0vLyAgMTAgSnVuIDAwIFN1cHBvcnQgZm9yIHRoZSBiYXNlIGNs
YXNzIGNoYWluaW5nIHRlY2huaXF1ZSB3YXMgYWRkZWQKLS8vICAgICAgICAgICAgKEFsZWtzZXkg
R3VydG92b3kpLiBTZWUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIGNvbW1lbnRzIGJlbG93Ci0vLyAg
ICAgICAgICAgIGZvciB0aGUgZGV0YWlscy4KLS8vICAxMiBEZWMgOTkgSW5pdGlhbCB2ZXJzaW9u
IHdpdGggaXRlcmF0b3Igb3BlcmF0b3JzIChKZXJlbXkgU2llaykKLS8vICAxOCBOb3YgOTkgQ2hh
bmdlIG5hbWUgImRpdmlkZWFibGUiIHRvICJkaXZpZGFibGUiLCByZW1vdmUgdW5uZWNlc3NhcnkK
LS8vICAgICAgICAgICAgc3BlY2lhbGl6YXRpb25zIG9mIGRpdmlkYWJsZSwgc3VidHJhY3RhYmxl
LCBtb2RhYmxlIChFZCBCcmV5KQotLy8gIDE3IE5vdiA5OSBBZGQgY29tbWVudHMgKEJlbWFuIERh
d2VzKQotLy8gICAgICAgICAgICBSZW1vdmUgdW5uZWNlc3Nhcnkgc3BlY2lhbGl6YXRpb24gb2Yg
b3BlcmF0b3JzPD4gKEVkIEJyZXkpCi0vLyAgMTUgTm92IDk5IEZpeCBsZXNzX3RoYW5fY29tcGFy
YWJsZTxULFU+IHNlY29uZCBvcGVyYW5kIHR5cGUgZm9yIGZpcnN0IHR3bwotLy8gICAgICAgICAg
ICBvcGVyYXRvcnMuKEJlbWFuIERhd2VzKQotLy8gIDEyIE5vdiA5OSBBZGQgb3BlcmF0b3JzIHRl
bXBsYXRlcyAoRWQgQnJleSkKLS8vICAxMSBOb3YgOTkgQWRkIHNpbmdsZSB0ZW1wbGF0ZSBwYXJh
bWV0ZXIgdmVyc2lvbiBmb3IgY29tcGlsZXJzIHdpdGhvdXQKLS8vICAgICAgICAgICAgcGFydGlh
bCBzcGVjaWFsaXphdGlvbiAoQmVtYW4gRGF3ZXMpCi0vLyAgMTAgTm92IDk5IEluaXRpYWwgdmVy
c2lvbgotCi0vLyAxMCBKdW4gMDA6Ci0vLyBBbiBhZGRpdGlvbmFsIG9wdGlvbmFsIHRlbXBsYXRl
IHBhcmFtZXRlciB3YXMgYWRkZWQgdG8gbW9zdCBvZgotLy8gb3BlcmF0b3IgdGVtcGxhdGVzIHRv
IHN1cHBvcnQgdGhlIGJhc2UgY2xhc3MgY2hhaW5pbmcgdGVjaG5pcXVlIChzZWUKLS8vIGRvY3Vt
ZW50YXRpb24gZm9yIHRoZSBkZXRhaWxzKS4gVW5mb3J0dW5hdGVseSwgYSBzdHJhaWdodGZvcndh
cmQKLS8vIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2hhbmdlIHdvdWxkIGhhdmUgYnJva2VuIGNv
bXBhdGliaWxpdHkgd2l0aCB0aGUKLS8vIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkg
YnkgbWFraW5nIGl0IGltcG9zc2libGUgdG8gdXNlIHRoZSBzYW1lCi0vLyB0ZW1wbGF0ZSBuYW1l
IChlLmcuICdhZGRhYmxlJykgZm9yIGJvdGggdGhlIDEtIGFuZCAyLWFyZ3VtZW50IHZlcnNpb25z
IG9mCi0vLyBhbiBvcGVyYXRvciB0ZW1wbGF0ZS4gVGhpcyBpbXBsZW1lbnRhdGlvbiBzb2x2ZXMg
dGhlIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkKLS8vIGlzc3VlIGF0IHRoZSBjb3N0IG9mIHNvbWUg
c2ltcGxpY2l0eS4KLS8vCi0vLyBPbmUgb2YgdGhlIGNvbXBsaWNhdGlvbnMgaXMgYW4gZXhpc3Rl
bmNlIG9mIHNwZWNpYWwgYXV4aWxpYXJ5IGNsYXNzIHRlbXBsYXRlCi0vLyAnaXNfY2hhaW5lZF9i
YXNlPD4nIChzZWUgJ29wZXJhdG9yc19kZXRhaWwnIG5hbWVzcGFjZSBiZWxvdyksIHdoaWNoIGlz
IHVzZWQKLS8vIHRvIGRldGVybWluZSB3aGV0aGVyIGl0cyB0ZW1wbGF0ZSBwYXJhbWV0ZXIgaXMg
YSBsaWJyYXJ5J3Mgb3BlcmF0b3IgdGVtcGxhdGUKLS8vIG9yIG5vdC4gWW91IGhhdmUgdG8gc3Bl
Y2lhbGl6ZSAnaXNfY2hhaW5lZF9iYXNlPD4nIGZvciBlYWNoIG5ldwotLy8gb3BlcmF0b3IgdGVt
cGxhdGUgeW91IGFkZCB0byB0aGUgbGlicmFyeS4KLS8vCi0vLyBIb3dldmVyLCBtb3N0IG9mIHRo
ZSBub24tdHJpdmlhbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSBoaWRkZW4gYmVoaW5kCi0v
LyBzZXZlcmFsIGxvY2FsIG1hY3JvcyBkZWZpbmVkIGJlbG93LCBhbmQgYXMgc29vbiBhcyB5b3Ug
dW5kZXJzdGFuZCB0aGVtLAotLy8geW91IHVuZGVyc3RhbmQgdGhlIHdob2xlIGxpYnJhcnkgaW1w
bGVtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfT1BFUkFUT1JTX0hQUAotI2RlZmluZSBCT09T
VF9PUEVSQVRPUlNfSFBQCi0KLS8vIElmIG9sZCB3b3JrLWFyb3VuZHMgYXJlIG5lZWRlZCwgcmVm
ZXIgdG8gdGhlIHByZXNlcnZlZCB2ZXJzaW9uIHdpdGhvdXQKLS8vIEFETCBwcm90ZWN0aW9uLgot
I2lmIGRlZmluZWQoQk9PU1RfTk9fT1BFUkFUT1JTX0lOX05BTUVTUEFDRSkgfHwgZGVmaW5lZChC
T09TVF9VU0VfT1BFUkFUT1JTX1YxKQotI2luY2x1ZGUgIm9wZXJhdG9yc192MS5ocHAiCi0jZWxz
ZQotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLQotI2luY2x1ZGUg
PGJvb3N0L2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL3dvcmthcm91bmQuaHBw
PgotCi0jaWYgZGVmaW5lZChfX3NnaSkgJiYgIWRlZmluZWQoX19HTlVDX18pCi0jICAgcHJhZ21h
IHNldCB3b2ZmIDEyMzQKLSNlbmRpZgotCi0jaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZD
LCA8IDE2MDApCi0jICAgcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0Mjg0ICkgLy8gY29tcGxh
aW50IGFib3V0IHJldHVybiB0eXBlIG9mCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gb3BlcmF0b3ItPiBub3QgYmVnaW4gYSBVRFQKLQotLy8gSW4gdGhpcyBzZWN0aW9u
IHdlIHN1cHBseSB0aGUgeHh4eDEgYW5kIHh4eHgyIGZvcm1zIG9mIHRoZSBvcGVyYXRvcgotLy8g
dGVtcGxhdGVzLCB3aGljaCBhcmUgZXhwbGljaXRseSB0YXJnZXRlZCBhdCB0aGUgMS10eXBlLWFy
Z3VtZW50IGFuZAotLy8gMi10eXBlLWFyZ3VtZW50IG9wZXJhdG9yIGZvcm1zLCByZXNwZWN0aXZl
bHkuCi0KLW5hbWVzcGFjZSBib29zdAotewotbmFtZXNwYWNlIG9wZXJhdG9yc19pbXBsCi17Ci1u
YW1lc3BhY2Ugb3BlcmF0b3JzX2RldGFpbAotewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xh
c3MgZW1wdHlfYmFzZSB7fTsKLQotfSAvLyBuYW1lc3BhY2Ugb3BlcmF0b3JzX2RldGFpbAotCi0v
LyAgQmFzaWMgb3BlcmF0b3IgY2xhc3NlcyAoY29udHJpYnV0ZWQgYnkgRGF2ZSBBYnJhaGFtcykg
LS0tLS0tLS0tLS0tLS0tLS0tLy8KLQotLy8gIE5vdGUgdGhhdCBmcmllbmQgZnVuY3Rpb25zIGRl
ZmluZWQgaW4gYSBjbGFzcyBhcmUgaW1wbGljaXRseSBpbmxpbmUuCi0vLyAgU2VlIHRoZSBDKysg
c3RkLCAxMS40IFtjbGFzcy5mcmllbmRdIHBhcmFncmFwaCA1Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBVLCBjbGFzcyBCID0gb3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+Ci1z
dHJ1Y3QgbGVzc190aGFuX2NvbXBhcmFibGUyIDogQgotewotICAgICBmcmllbmQgYm9vbCBvcGVy
YXRvcjw9KGNvbnN0IFQmIHgsIGNvbnN0IFUmIHkpIHsgcmV0dXJuICFzdGF0aWNfY2FzdDxib29s
Pih4ID4geSk7IH0KLSAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiB4LCBjb25z
dCBVJiB5KSB7IHJldHVybiAhc3RhdGljX2Nhc3Q8Ym9vbD4oeCA8IHkpOyB9Ci0gICAgIGZyaWVu
ZCBib29sIG9wZXJhdG9yPihjb25zdCBVJiB4LCBjb25zdCBUJiB5KSAgeyByZXR1cm4geSA8IHg7
IH0KLSAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFUmIHgsIGNvbnN0IFQmIHkpICB7
IHJldHVybiB5ID4geDsgfQotICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFUmIHgs
IGNvbnN0IFQmIHkpIHsgcmV0dXJuICFzdGF0aWNfY2FzdDxib29sPih5IDwgeCk7IH0KLSAgICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdCBVJiB4LCBjb25zdCBUJiB5KSB7IHJldHVybiAh
c3RhdGljX2Nhc3Q8Ym9vbD4oeSA+IHgpOyB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgQiA9IG9wZXJhdG9yc19kZXRhaWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IGxlc3NfdGhh
bl9jb21wYXJhYmxlMSA6IEIKLXsKLSAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQm
IHgsIGNvbnN0IFQmIHkpICB7IHJldHVybiB5IDwgeDsgfQotICAgICBmcmllbmQgYm9vbCBvcGVy
YXRvcjw9KGNvbnN0IFQmIHgsIGNvbnN0IFQmIHkpIHsgcmV0dXJuICFzdGF0aWNfY2FzdDxib29s
Pih5IDwgeCk7IH0KLSAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiB4LCBjb25z
dCBUJiB5KSB7IHJldHVybiAhc3RhdGljX2Nhc3Q8Ym9vbD4oeCA8IHkpOyB9Ci19OwotCi10ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MgQiA9IG9wZXJhdG9yc19kZXRhaWw6OmVtcHR5
X2Jhc2U8VD4gPgotc3RydWN0IGVxdWFsaXR5X2NvbXBhcmFibGUyIDogQgotewotICAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFUmIHksIGNvbnN0IFQmIHgpIHsgcmV0dXJuIHggPT0g
eTsgfQotICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFUmIHksIGNvbnN0IFQmIHgp
IHsgcmV0dXJuICFzdGF0aWNfY2FzdDxib29sPih4ID09IHkpOyB9Ci0gICAgIGZyaWVuZCBib29s
IG9wZXJhdG9yIT0oY29uc3QgVCYgeSwgY29uc3QgVSYgeCkgeyByZXR1cm4gIXN0YXRpY19jYXN0
PGJvb2w+KHkgPT0geCk7IH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBCID0gb3Bl
cmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+Ci1zdHJ1Y3QgZXF1YWxpdHlfY29tcGFyYWJs
ZTEgOiBCCi17Ci0gICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgeCwgY29uc3Qg
VCYgeSkgeyByZXR1cm4gIXN0YXRpY19jYXN0PGJvb2w+KHggPT0geSk7IH0KLX07Ci0KLS8vIEEg
bWFjcm8gd2hpY2ggcHJvZHVjZXMgIm5hbWVfMmxlZnQiIGZyb20gIm5hbWUiLgotI2RlZmluZSBC
T09TVF9PUEVSQVRPUjJfTEVGVChuYW1lKSBuYW1lIyMyIyNfIyNsZWZ0Ci0KLS8vICBOUlZPLWZy
aWVuZGx5IGltcGxlbWVudGF0aW9uIChjb250cmlidXRlZCBieSBEYW5pZWwgRnJleSkgLS0tLS0t
LS0tLS0tLS0tLy8KLQotI2lmIGRlZmluZWQoQk9PU1RfSEFTX05SVk8pIHx8IGRlZmluZWQoQk9P
U1RfRk9SQ0VfU1lNTUVUUklDX09QRVJBVE9SUykKLQotLy8gVGhpcyBpcyB0aGUgb3B0aW1hbCBp
bXBsZW1lbnRhdGlvbiBmb3IgSVNPL0FOU0kgQysrLAotLy8gYnV0IGl0IHJlcXVpcmVzIHRoZSBj
b21waWxlciB0byBpbXBsZW1lbnQgdGhlIE5SVk8uCi0vLyBJZiB0aGUgY29tcGlsZXIgaGFzIG5v
IE5SVk8sIHRoaXMgaXMgdGhlIGJlc3Qgc3ltbWV0cmljCi0vLyBpbXBsZW1lbnRhdGlvbiBhdmFp
bGFibGUuCi0KLSNkZWZpbmUgQk9PU1RfQklOQVJZX09QRVJBVE9SX0NPTU1VVEFUSVZFKCBOQU1F
LCBPUCApICAgICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVLCBj
bGFzcyBCID0gb3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+IFwKLXN0cnVjdCBOQU1F
IyMyIDogQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZnJpZW5kIFQgb3BlcmF0b3IgT1AoIGNvbnN0IFQm
IGxocywgY29uc3QgVSYgcmhzICkgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7IFQgbnJ2KCBs
aHMgKTsgbnJ2IE9QIyM9IHJoczsgcmV0dXJuIG5ydjsgfSAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgZnJpZW5kIFQgb3BlcmF0b3IgT1AoIGNvbnN0IFUmIGxocywgY29uc3QgVCYgcmhzICkg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICB7IFQgbnJ2KCByaHMgKTsgbnJ2IE9QIyM9IGxoczsg
cmV0dXJuIG5ydjsgfSAgICAgICAgICAgICAgICAgICAgICAgIFwKLX07ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBCID0gb3BlcmF0b3Jz
X2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+ICAgICAgICAgIFwKLXN0cnVjdCBOQU1FIyMxIDogQiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgZnJpZW5kIFQgb3BlcmF0b3IgT1AoIGNvbnN0IFQmIGxocywgY29u
c3QgVCYgcmhzICkgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7IFQgbnJ2KCBsaHMgKTsgbnJ2
IE9QIyM9IHJoczsgcmV0dXJuIG5ydjsgfSAgICAgICAgICAgICAgICAgICAgICAgIFwKLX07Ci0K
LSNkZWZpbmUgQk9PU1RfQklOQVJZX09QRVJBVE9SX05PTl9DT01NVVRBVElWRSggTkFNRSwgT1Ag
KSAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVLCBjbGFzcyBCID0g
b3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+IFwKLXN0cnVjdCBOQU1FIyMyIDogQiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgZnJpZW5kIFQgb3BlcmF0b3IgT1AoIGNvbnN0IFQmIGxocywgY29u
c3QgVSYgcmhzICkgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7IFQgbnJ2KCBsaHMgKTsgbnJ2
IE9QIyM9IHJoczsgcmV0dXJuIG5ydjsgfSAgICAgICAgICAgICAgICAgICAgICAgIFwKLX07ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBV
LCBjbGFzcyBCID0gb3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+IFwKLXN0cnVjdCBC
T09TVF9PUEVSQVRPUjJfTEVGVChOQU1FKSA6IEIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZnJpZW5kIFQgb3BlcmF0b3IgT1AoIGNvbnN0
IFUmIGxocywgY29uc3QgVCYgcmhzICkgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7IFQgbnJ2
KCBsaHMgKTsgbnJ2IE9QIyM9IHJoczsgcmV0dXJuIG5ydjsgfSAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLX07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBCID0gb3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+ICAgICAgICAg
IFwKLXN0cnVjdCBOQU1FIyMxIDogQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZnJpZW5kIFQgb3BlcmF0
b3IgT1AoIGNvbnN0IFQmIGxocywgY29uc3QgVCYgcmhzICkgICAgICAgICAgICAgICAgICAgIFwK
LSAgICB7IFQgbnJ2KCBsaHMgKTsgbnJ2IE9QIyM9IHJoczsgcmV0dXJuIG5ydjsgfSAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLX07Ci0KLSNlbHNlIC8vIGRlZmluZWQoQk9PU1RfSEFTX05SVk8p
IHx8IGRlZmluZWQoQk9PU1RfRk9SQ0VfU1lNTUVUUklDX09QRVJBVE9SUykKLQotLy8gRm9yIGNv
bXBpbGVycyB3aXRob3V0IE5SVk8gdGhlIGZvbGxvd2luZyBjb2RlIGlzIG9wdGltYWwsIGJ1dCBu
b3QKLS8vIHN5bW1ldHJpYyEgIE5vdGUgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YKLS8vIEJP
T1NUX09QRVJBVE9SMl9MRUZUKE5BTUUpIG9ubHkgbG9va3MgY29vbCwgYnV0IGRvZXNuJ3QgcHJv
dmlkZQotLy8gb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgdG8gdGhlIGNvbXBpbGVyIDopCi0K
LSNkZWZpbmUgQk9PU1RfQklOQVJZX09QRVJBVE9SX0NPTU1VVEFUSVZFKCBOQU1FLCBPUCApICAg
ICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVLCBjbGFzcyBCID0g
b3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+IFwKLXN0cnVjdCBOQU1FIyMyIDogQiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgZnJpZW5kIFQgb3BlcmF0b3IgT1AoIFQgbGhzLCBjb25zdCBVJiBy
aHMgKSB7IHJldHVybiBsaHMgT1AjIz0gcmhzOyB9IFwKLSAgZnJpZW5kIFQgb3BlcmF0b3IgT1Ao
IGNvbnN0IFUmIGxocywgVCByaHMgKSB7IHJldHVybiByaHMgT1AjIz0gbGhzOyB9IFwKLX07ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBC
ID0gb3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+ICAgICAgICAgIFwKLXN0cnVjdCBO
QU1FIyMxIDogQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZnJpZW5kIFQgb3BlcmF0b3IgT1AoIFQgbGhz
LCBjb25zdCBUJiByaHMgKSB7IHJldHVybiBsaHMgT1AjIz0gcmhzOyB9IFwKLX07Ci0KLSNkZWZp
bmUgQk9PU1RfQklOQVJZX09QRVJBVE9SX05PTl9DT01NVVRBVElWRSggTkFNRSwgT1AgKSAgICAg
ICAgICAgICAgIFwKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVLCBjbGFzcyBCID0gb3BlcmF0
b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+IFwKLXN0cnVjdCBOQU1FIyMyIDogQiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgZnJpZW5kIFQgb3BlcmF0b3IgT1AoIFQgbGhzLCBjb25zdCBVJiByaHMgKSB7
IHJldHVybiBsaHMgT1AjIz0gcmhzOyB9IFwKLX07ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVLCBjbGFzcyBCID0gb3BlcmF0b3JzX2Rl
dGFpbDo6ZW1wdHlfYmFzZTxUPiA+IFwKLXN0cnVjdCBCT09TVF9PUEVSQVRPUjJfTEVGVChOQU1F
KSA6IEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgZnJpZW5kIFQgb3BlcmF0b3IgT1AoIGNvbnN0IFUmIGxocywgY29uc3QgVCYgcmhzICkg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICB7IHJldHVybiBUKCBsaHMgKSBPUCMjPSByaHM7IH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX07ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBCID0gb3BlcmF0b3Jz
X2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+ICAgICAgICAgIFwKLXN0cnVjdCBOQU1FIyMxIDogQiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgZnJpZW5kIFQgb3BlcmF0b3IgT1AoIFQgbGhzLCBjb25zdCBUJiBy
aHMgKSB7IHJldHVybiBsaHMgT1AjIz0gcmhzOyB9IFwKLX07Ci0KLSNlbmRpZiAvLyBkZWZpbmVk
KEJPT1NUX0hBU19OUlZPKSB8fCBkZWZpbmVkKEJPT1NUX0ZPUkNFX1NZTU1FVFJJQ19PUEVSQVRP
UlMpCi0KLUJPT1NUX0JJTkFSWV9PUEVSQVRPUl9DT01NVVRBVElWRSggbXVsdGlwbGlhYmxlLCAq
ICkKLUJPT1NUX0JJTkFSWV9PUEVSQVRPUl9DT01NVVRBVElWRSggYWRkYWJsZSwgKyApCi1CT09T
VF9CSU5BUllfT1BFUkFUT1JfTk9OX0NPTU1VVEFUSVZFKCBzdWJ0cmFjdGFibGUsIC0gKQotQk9P
U1RfQklOQVJZX09QRVJBVE9SX05PTl9DT01NVVRBVElWRSggZGl2aWRhYmxlLCAvICkKLUJPT1NU
X0JJTkFSWV9PUEVSQVRPUl9OT05fQ09NTVVUQVRJVkUoIG1vZGFibGUsICUgKQotQk9PU1RfQklO
QVJZX09QRVJBVE9SX0NPTU1VVEFUSVZFKCB4b3JhYmxlLCBeICkKLUJPT1NUX0JJTkFSWV9PUEVS
QVRPUl9DT01NVVRBVElWRSggYW5kYWJsZSwgJiApCi1CT09TVF9CSU5BUllfT1BFUkFUT1JfQ09N
TVVUQVRJVkUoIG9yYWJsZSwgfCApCi0KLSN1bmRlZiBCT09TVF9CSU5BUllfT1BFUkFUT1JfQ09N
TVVUQVRJVkUKLSN1bmRlZiBCT09TVF9CSU5BUllfT1BFUkFUT1JfTk9OX0NPTU1VVEFUSVZFCi0j
dW5kZWYgQk9PU1RfT1BFUkFUT1IyX0xFRlQKLQotLy8gIGluY3JlbWVudGFibGUgYW5kIGRlY3Jl
bWVudGFibGUgY29udHJpYnV0ZWQgYnkgSmVyZW15IFNpZWsKLQotdGVtcGxhdGUgPGNsYXNzIFQs
IGNsYXNzIEIgPSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9iYXNlPFQ+ID4KLXN0cnVjdCBpbmNy
ZW1lbnRhYmxlIDogQgotewotICBmcmllbmQgVCBvcGVyYXRvcisrKFQmIHgsIGludCkKLSAgewot
ICAgIGluY3JlbWVudGFibGVfdHlwZSBucnYoeCk7Ci0gICAgKyt4OwotICAgIHJldHVybiBucnY7
Ci0gIH0KLXByaXZhdGU6IC8vIFRoZSB1c2Ugb2YgdGhpcyB0eXBlZGVmIHdvcmtzIGFyb3VuZCBh
IEJvcmxhbmQgYnVnCi0gIHR5cGVkZWYgVCBpbmNyZW1lbnRhYmxlX3R5cGU7Ci19OwotCi10ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQiA9IG9wZXJhdG9yc19kZXRhaWw6OmVtcHR5X2Jhc2U8VD4g
Pgotc3RydWN0IGRlY3JlbWVudGFibGUgOiBCCi17Ci0gIGZyaWVuZCBUIG9wZXJhdG9yLS0oVCYg
eCwgaW50KQotICB7Ci0gICAgZGVjcmVtZW50YWJsZV90eXBlIG5ydih4KTsKLSAgICAtLXg7Ci0g
ICAgcmV0dXJuIG5ydjsKLSAgfQotcHJpdmF0ZTogLy8gVGhlIHVzZSBvZiB0aGlzIHR5cGVkZWYg
d29ya3MgYXJvdW5kIGEgQm9ybGFuZCBidWcKLSAgdHlwZWRlZiBUIGRlY3JlbWVudGFibGVfdHlw
ZTsKLX07Ci0KLS8vICBJdGVyYXRvciBvcGVyYXRvciBjbGFzc2VzIChjb250cmlidXRlZCBieSBK
ZXJlbXkgU2llaykgLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNs
YXNzIFAsIGNsYXNzIEIgPSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9iYXNlPFQ+ID4KLXN0cnVj
dCBkZXJlZmVyZW5jZWFibGUgOiBCCi17Ci0gIFAgb3BlcmF0b3ItPigpIGNvbnN0Ci0gIHsKLSAg
ICByZXR1cm4gJipzdGF0aWNfY2FzdDxjb25zdCBUJj4oKnRoaXMpOwotICB9Ci19OwotCi10ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgSSwgY2xhc3MgUiwgY2xhc3MgQiA9IG9wZXJhdG9yc19kZXRh
aWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IGluZGV4YWJsZSA6IEIKLXsKLSAgUiBvcGVyYXRv
cltdKEkgbikgY29uc3QKLSAgewotICAgIHJldHVybiAqKHN0YXRpY19jYXN0PGNvbnN0IFQmPigq
dGhpcykgKyBuKTsKLSAgfQotfTsKLQotLy8gIE1vcmUgb3BlcmF0b3IgY2xhc3NlcyAoY29udHJp
YnV0ZWQgYnkgRGFyeWxlIFdhbGtlcikgLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotLy8gIChOUlZP
LWZyaWVuZGx5IGltcGxlbWVudGF0aW9uIGNvbnRyaWJ1dGVkIGJ5IERhbmllbCBGcmV5KSAtLS0t
LS0tLS0tLS0tLS0vLwotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfTlJWTykgfHwgZGVmaW5lZChC
T09TVF9GT1JDRV9TWU1NRVRSSUNfT1BFUkFUT1JTKQotCi0jZGVmaW5lIEJPT1NUX0JJTkFSWV9P
UEVSQVRPUiggTkFNRSwgT1AgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi10ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MgQiA9IG9wZXJhdG9yc19kZXRhaWw6OmVtcHR5
X2Jhc2U8VD4gPiBcCi1zdHJ1Y3QgTkFNRSMjMiA6IEIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGZyaWVu
ZCBUIG9wZXJhdG9yIE9QKCBjb25zdCBUJiBsaHMsIGNvbnN0IFUmIHJocyApICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgeyBUIG5ydiggbGhzICk7IG5ydiBPUCMjPSByaHM7IHJldHVybiBucnY7
IH0gICAgICAgICAgICAgICAgICAgICAgICBcCi19OyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQiA9IG9wZXJhdG9yc19kZXRhaWw6OmVt
cHR5X2Jhc2U8VD4gPiAgICAgICAgICBcCi1zdHJ1Y3QgTkFNRSMjMSA6IEIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGZyaWVuZCBUIG9wZXJhdG9yIE9QKCBjb25zdCBUJiBsaHMsIGNvbnN0IFQmIHJocyAp
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyBUIG5ydiggbGhzICk7IG5ydiBPUCMjPSByaHM7
IHJldHVybiBucnY7IH0gICAgICAgICAgICAgICAgICAgICAgICBcCi19OwotCi0jZWxzZSAvLyBk
ZWZpbmVkKEJPT1NUX0hBU19OUlZPKSB8fCBkZWZpbmVkKEJPT1NUX0ZPUkNFX1NZTU1FVFJJQ19P
UEVSQVRPUlMpCi0KLSNkZWZpbmUgQk9PU1RfQklOQVJZX09QRVJBVE9SKCBOQU1FLCBPUCApICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBV
LCBjbGFzcyBCID0gb3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+IFwKLXN0cnVjdCBO
QU1FIyMyIDogQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZnJpZW5kIFQgb3BlcmF0b3IgT1AoIFQgbGhz
LCBjb25zdCBVJiByaHMgKSB7IHJldHVybiBsaHMgT1AjIz0gcmhzOyB9IFwKLX07ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBCID0gb3Bl
cmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+ICAgICAgICAgIFwKLXN0cnVjdCBOQU1FIyMx
IDogQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgZnJpZW5kIFQgb3BlcmF0b3IgT1AoIFQgbGhzLCBjb25z
dCBUJiByaHMgKSB7IHJldHVybiBsaHMgT1AjIz0gcmhzOyB9IFwKLX07Ci0KLSNlbmRpZiAvLyBk
ZWZpbmVkKEJPT1NUX0hBU19OUlZPKSB8fCBkZWZpbmVkKEJPT1NUX0ZPUkNFX1NZTU1FVFJJQ19P
UEVSQVRPUlMpCi0KLUJPT1NUX0JJTkFSWV9PUEVSQVRPUiggbGVmdF9zaGlmdGFibGUsIDw8ICkK
LUJPT1NUX0JJTkFSWV9PUEVSQVRPUiggcmlnaHRfc2hpZnRhYmxlLCA+PiApCi0KLSN1bmRlZiBC
T09TVF9CSU5BUllfT1BFUkFUT1IKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNz
IEIgPSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9iYXNlPFQ+ID4KLXN0cnVjdCBlcXVpdmFsZW50
MiA6IEIKLXsKLSAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUJiB4LCBjb25zdCBVJiB5
KQotICB7Ci0gICAgcmV0dXJuICFzdGF0aWNfY2FzdDxib29sPih4IDwgeSkgJiYgIXN0YXRpY19j
YXN0PGJvb2w+KHggPiB5KTsKLSAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEIg
PSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9iYXNlPFQ+ID4KLXN0cnVjdCBlcXVpdmFsZW50MSA6
IEIKLXsKLSAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUJngsIGNvbnN0IFQmeSkKLSAg
ewotICAgIHJldHVybiAhc3RhdGljX2Nhc3Q8Ym9vbD4oeCA8IHkpICYmICFzdGF0aWNfY2FzdDxi
b29sPih5IDwgeCk7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVLCBjbGFz
cyBCID0gb3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+Ci1zdHJ1Y3QgcGFydGlhbGx5
X29yZGVyZWQyIDogQgotewotICBmcmllbmQgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIHgsIGNv
bnN0IFUmIHkpCi0gICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oeCA8IHkpIHx8IHN0YXRp
Y19jYXN0PGJvb2w+KHggPT0geSk7IH0KLSAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdCBU
JiB4LCBjb25zdCBVJiB5KQotICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHggPiB5KSB8
fCBzdGF0aWNfY2FzdDxib29sPih4ID09IHkpOyB9Ci0gIGZyaWVuZCBib29sIG9wZXJhdG9yPihj
b25zdCBVJiB4LCBjb25zdCBUJiB5KQotICAgIHsgcmV0dXJuIHkgPCB4OyB9Ci0gIGZyaWVuZCBi
b29sIG9wZXJhdG9yPChjb25zdCBVJiB4LCBjb25zdCBUJiB5KQotICAgIHsgcmV0dXJuIHkgPiB4
OyB9Ci0gIGZyaWVuZCBib29sIG9wZXJhdG9yPD0oY29uc3QgVSYgeCwgY29uc3QgVCYgeSkKLSAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPih5ID4geCkgfHwgc3RhdGljX2Nhc3Q8Ym9vbD4o
eSA9PSB4KTsgfQotICBmcmllbmQgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFUmIHgsIGNvbnN0IFQm
IHkpCi0gICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oeSA8IHgpIHx8IHN0YXRpY19jYXN0
PGJvb2w+KHkgPT0geCk7IH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBCID0gb3Bl
cmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+Ci1zdHJ1Y3QgcGFydGlhbGx5X29yZGVyZWQx
IDogQgotewotICBmcmllbmQgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYgeCwgY29uc3QgVCYgeSkK
LSAgICB7IHJldHVybiB5IDwgeDsgfQotICBmcmllbmQgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFQm
IHgsIGNvbnN0IFQmIHkpCi0gICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oeCA8IHkpIHx8
IHN0YXRpY19jYXN0PGJvb2w+KHggPT0geSk7IH0KLSAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBUJiB4LCBjb25zdCBUJiB5KQotICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHkg
PCB4KSB8fCBzdGF0aWNfY2FzdDxib29sPih4ID09IHkpOyB9Ci19OwotCi0vLyAgQ29tYmluZWQg
b3BlcmF0b3IgY2xhc3NlcyAoY29udHJpYnV0ZWQgYnkgRGFyeWxlIFdhbGtlcikgLS0tLS0tLS0t
LS0tLS0tLS8vCi0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVLCBjbGFzcyBCID0gb3BlcmF0
b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+Ci1zdHJ1Y3QgdG90YWxseV9vcmRlcmVkMgotICAg
IDogbGVzc190aGFuX2NvbXBhcmFibGUyPFQsIFUKLSAgICAsIGVxdWFsaXR5X2NvbXBhcmFibGUy
PFQsIFUsIEIKLSAgICAgID4gPiB7fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEIgPSBv
cGVyYXRvcnNfZGV0YWlsOjplbXB0eV9iYXNlPFQ+ID4KLXN0cnVjdCB0b3RhbGx5X29yZGVyZWQx
Ci0gICAgOiBsZXNzX3RoYW5fY29tcGFyYWJsZTE8VAotICAgICwgZXF1YWxpdHlfY29tcGFyYWJs
ZTE8VCwgQgotICAgICAgPiA+IHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xh
c3MgQiA9IG9wZXJhdG9yc19kZXRhaWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IGFkZGl0aXZl
MgotICAgIDogYWRkYWJsZTI8VCwgVQotICAgICwgc3VidHJhY3RhYmxlMjxULCBVLCBCCi0gICAg
ICA+ID4ge307Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBCID0gb3BlcmF0b3JzX2RldGFp
bDo6ZW1wdHlfYmFzZTxUPiA+Ci1zdHJ1Y3QgYWRkaXRpdmUxCi0gICAgOiBhZGRhYmxlMTxUCi0g
ICAgLCBzdWJ0cmFjdGFibGUxPFQsIEIKLSAgICAgID4gPiB7fTsKLQotdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIFUsIGNsYXNzIEIgPSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9iYXNlPFQ+ID4K
LXN0cnVjdCBtdWx0aXBsaWNhdGl2ZTIKLSAgICA6IG11bHRpcGxpYWJsZTI8VCwgVQotICAgICwg
ZGl2aWRhYmxlMjxULCBVLCBCCi0gICAgICA+ID4ge307Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBj
bGFzcyBCID0gb3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+Ci1zdHJ1Y3QgbXVsdGlw
bGljYXRpdmUxCi0gICAgOiBtdWx0aXBsaWFibGUxPFQKLSAgICAsIGRpdmlkYWJsZTE8VCwgQgot
ICAgICAgPiA+IHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MgQiA9IG9w
ZXJhdG9yc19kZXRhaWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IGludGVnZXJfbXVsdGlwbGlj
YXRpdmUyCi0gICAgOiBtdWx0aXBsaWNhdGl2ZTI8VCwgVQotICAgICwgbW9kYWJsZTI8VCwgVSwg
QgotICAgICAgPiA+IHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQiA9IG9wZXJhdG9y
c19kZXRhaWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IGludGVnZXJfbXVsdGlwbGljYXRpdmUx
Ci0gICAgOiBtdWx0aXBsaWNhdGl2ZTE8VAotICAgICwgbW9kYWJsZTE8VCwgQgotICAgICAgPiA+
IHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MgQiA9IG9wZXJhdG9yc19k
ZXRhaWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IGFyaXRobWV0aWMyCi0gICAgOiBhZGRpdGl2
ZTI8VCwgVQotICAgICwgbXVsdGlwbGljYXRpdmUyPFQsIFUsIEIKLSAgICAgID4gPiB7fTsKLQot
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEIgPSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9iYXNl
PFQ+ID4KLXN0cnVjdCBhcml0aG1ldGljMQotICAgIDogYWRkaXRpdmUxPFQKLSAgICAsIG11bHRp
cGxpY2F0aXZlMTxULCBCCi0gICAgICA+ID4ge307Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBVLCBjbGFzcyBCID0gb3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+Ci1zdHJ1Y3Qg
aW50ZWdlcl9hcml0aG1ldGljMgotICAgIDogYWRkaXRpdmUyPFQsIFUKLSAgICAsIGludGVnZXJf
bXVsdGlwbGljYXRpdmUyPFQsIFUsIEIKLSAgICAgID4gPiB7fTsKLQotdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIEIgPSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9iYXNlPFQ+ID4KLXN0cnVjdCBp
bnRlZ2VyX2FyaXRobWV0aWMxCi0gICAgOiBhZGRpdGl2ZTE8VAotICAgICwgaW50ZWdlcl9tdWx0
aXBsaWNhdGl2ZTE8VCwgQgotICAgICAgPiA+IHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgVSwgY2xhc3MgQiA9IG9wZXJhdG9yc19kZXRhaWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0
IGJpdHdpc2UyCi0gICAgOiB4b3JhYmxlMjxULCBVCi0gICAgLCBhbmRhYmxlMjxULCBVCi0gICAg
LCBvcmFibGUyPFQsIFUsIEIKLSAgICAgID4gPiA+IHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgQiA9IG9wZXJhdG9yc19kZXRhaWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IGJpdHdp
c2UxCi0gICAgOiB4b3JhYmxlMTxUCi0gICAgLCBhbmRhYmxlMTxUCi0gICAgLCBvcmFibGUxPFQs
IEIKLSAgICAgID4gPiA+IHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQiA9IG9wZXJh
dG9yc19kZXRhaWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IHVuaXRfc3RlcHBhYmxlCi0gICAg
OiBpbmNyZW1lbnRhYmxlPFQKLSAgICAsIGRlY3JlbWVudGFibGU8VCwgQgotICAgICAgPiA+IHt9
OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MgQiA9IG9wZXJhdG9yc19kZXRh
aWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IHNoaWZ0YWJsZTIKLSAgICA6IGxlZnRfc2hpZnRh
YmxlMjxULCBVCi0gICAgLCByaWdodF9zaGlmdGFibGUyPFQsIFUsIEIKLSAgICAgID4gPiB7fTsK
LQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEIgPSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9i
YXNlPFQ+ID4KLXN0cnVjdCBzaGlmdGFibGUxCi0gICAgOiBsZWZ0X3NoaWZ0YWJsZTE8VAotICAg
ICwgcmlnaHRfc2hpZnRhYmxlMTxULCBCCi0gICAgICA+ID4ge307Ci0KLXRlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBVLCBjbGFzcyBCID0gb3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+
Ci1zdHJ1Y3QgcmluZ19vcGVyYXRvcnMyCi0gICAgOiBhZGRpdGl2ZTI8VCwgVQotICAgICwgc3Vi
dHJhY3RhYmxlMl9sZWZ0PFQsIFUKLSAgICAsIG11bHRpcGxpYWJsZTI8VCwgVSwgQgotICAgICAg
PiA+ID4ge307Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBCID0gb3BlcmF0b3JzX2RldGFp
bDo6ZW1wdHlfYmFzZTxUPiA+Ci1zdHJ1Y3QgcmluZ19vcGVyYXRvcnMxCi0gICAgOiBhZGRpdGl2
ZTE8VAotICAgICwgbXVsdGlwbGlhYmxlMTxULCBCCi0gICAgICA+ID4ge307Ci0KLXRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBVLCBjbGFzcyBCID0gb3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFz
ZTxUPiA+Ci1zdHJ1Y3Qgb3JkZXJlZF9yaW5nX29wZXJhdG9yczIKLSAgICA6IHJpbmdfb3BlcmF0
b3JzMjxULCBVCi0gICAgLCB0b3RhbGx5X29yZGVyZWQyPFQsIFUsIEIKLSAgICAgID4gPiB7fTsK
LQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEIgPSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9i
YXNlPFQ+ID4KLXN0cnVjdCBvcmRlcmVkX3Jpbmdfb3BlcmF0b3JzMQotICAgIDogcmluZ19vcGVy
YXRvcnMxPFQKLSAgICAsIHRvdGFsbHlfb3JkZXJlZDE8VCwgQgotICAgICAgPiA+IHt9OwotCi10
ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MgQiA9IG9wZXJhdG9yc19kZXRhaWw6OmVt
cHR5X2Jhc2U8VD4gPgotc3RydWN0IGZpZWxkX29wZXJhdG9yczIKLSAgICA6IHJpbmdfb3BlcmF0
b3JzMjxULCBVCi0gICAgLCBkaXZpZGFibGUyPFQsIFUKLSAgICAsIGRpdmlkYWJsZTJfbGVmdDxU
LCBVLCBCCi0gICAgICA+ID4gPiB7fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEIgPSBv
cGVyYXRvcnNfZGV0YWlsOjplbXB0eV9iYXNlPFQ+ID4KLXN0cnVjdCBmaWVsZF9vcGVyYXRvcnMx
Ci0gICAgOiByaW5nX29wZXJhdG9yczE8VAotICAgICwgZGl2aWRhYmxlMTxULCBCCi0gICAgICA+
ID4ge307Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVLCBjbGFzcyBCID0gb3BlcmF0b3Jz
X2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+Ci1zdHJ1Y3Qgb3JkZXJlZF9maWVsZF9vcGVyYXRvcnMy
Ci0gICAgOiBmaWVsZF9vcGVyYXRvcnMyPFQsIFUKLSAgICAsIHRvdGFsbHlfb3JkZXJlZDI8VCwg
VSwgQgotICAgICAgPiA+IHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQiA9IG9wZXJh
dG9yc19kZXRhaWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IG9yZGVyZWRfZmllbGRfb3BlcmF0
b3JzMQotICAgIDogZmllbGRfb3BlcmF0b3JzMTxUCi0gICAgLCB0b3RhbGx5X29yZGVyZWQxPFQs
IEIKLSAgICAgID4gPiB7fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzIEIg
PSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9iYXNlPFQ+ID4KLXN0cnVjdCBldWNsaWRpYW5fcmlu
Z19vcGVyYXRvcnMyCi0gICAgOiByaW5nX29wZXJhdG9yczI8VCwgVQotICAgICwgZGl2aWRhYmxl
MjxULCBVCi0gICAgLCBkaXZpZGFibGUyX2xlZnQ8VCwgVQotICAgICwgbW9kYWJsZTI8VCwgVQot
ICAgICwgbW9kYWJsZTJfbGVmdDxULCBVLCBCCi0gICAgICA+ID4gPiA+ID4ge307Ci0KLXRlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBCID0gb3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+
Ci1zdHJ1Y3QgZXVjbGlkaWFuX3Jpbmdfb3BlcmF0b3JzMQotICAgIDogcmluZ19vcGVyYXRvcnMx
PFQKLSAgICAsIGRpdmlkYWJsZTE8VAotICAgICwgbW9kYWJsZTE8VCwgQgotICAgICAgPiA+ID4g
e307Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVLCBjbGFzcyBCID0gb3BlcmF0b3JzX2Rl
dGFpbDo6ZW1wdHlfYmFzZTxUPiA+Ci1zdHJ1Y3Qgb3JkZXJlZF9ldWNsaWRpYW5fcmluZ19vcGVy
YXRvcnMyCi0gICAgOiB0b3RhbGx5X29yZGVyZWQyPFQsIFUKLSAgICAsIGV1Y2xpZGlhbl9yaW5n
X29wZXJhdG9yczI8VCwgVSwgQgotICAgICAgPiA+IHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgQiA9IG9wZXJhdG9yc19kZXRhaWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IG9yZGVy
ZWRfZXVjbGlkaWFuX3Jpbmdfb3BlcmF0b3JzMQotICAgIDogdG90YWxseV9vcmRlcmVkMTxUCi0g
ICAgLCBldWNsaWRpYW5fcmluZ19vcGVyYXRvcnMxPFQsIEIKLSAgICAgID4gPiB7fTsKLQotdGVt
cGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzIEIgPSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0
eV9iYXNlPFQ+ID4KLXN0cnVjdCBldWNsaWRlYW5fcmluZ19vcGVyYXRvcnMyCi0gICAgOiByaW5n
X29wZXJhdG9yczI8VCwgVQotICAgICwgZGl2aWRhYmxlMjxULCBVCi0gICAgLCBkaXZpZGFibGUy
X2xlZnQ8VCwgVQotICAgICwgbW9kYWJsZTI8VCwgVQotICAgICwgbW9kYWJsZTJfbGVmdDxULCBV
LCBCCi0gICAgICA+ID4gPiA+ID4ge307Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBCID0g
b3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+Ci1zdHJ1Y3QgZXVjbGlkZWFuX3Jpbmdf
b3BlcmF0b3JzMQotICAgIDogcmluZ19vcGVyYXRvcnMxPFQKLSAgICAsIGRpdmlkYWJsZTE8VAot
ICAgICwgbW9kYWJsZTE8VCwgQgotICAgICAgPiA+ID4ge307Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBVLCBjbGFzcyBCID0gb3BlcmF0b3JzX2RldGFpbDo6ZW1wdHlfYmFzZTxUPiA+Ci1z
dHJ1Y3Qgb3JkZXJlZF9ldWNsaWRlYW5fcmluZ19vcGVyYXRvcnMyCi0gICAgOiB0b3RhbGx5X29y
ZGVyZWQyPFQsIFUKLSAgICAsIGV1Y2xpZGVhbl9yaW5nX29wZXJhdG9yczI8VCwgVSwgQgotICAg
ICAgPiA+IHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQiA9IG9wZXJhdG9yc19kZXRh
aWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IG9yZGVyZWRfZXVjbGlkZWFuX3Jpbmdfb3BlcmF0
b3JzMQotICAgIDogdG90YWxseV9vcmRlcmVkMTxUCi0gICAgLCBldWNsaWRlYW5fcmluZ19vcGVy
YXRvcnMxPFQsIEIKLSAgICAgID4gPiB7fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFAs
IGNsYXNzIEIgPSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9iYXNlPFQ+ID4KLXN0cnVjdCBpbnB1
dF9pdGVyYXRhYmxlCi0gICAgOiBlcXVhbGl0eV9jb21wYXJhYmxlMTxUCi0gICAgLCBpbmNyZW1l
bnRhYmxlPFQKLSAgICAsIGRlcmVmZXJlbmNlYWJsZTxULCBQLCBCCi0gICAgICA+ID4gPiB7fTsK
LQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEIgPSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9i
YXNlPFQ+ID4KLXN0cnVjdCBvdXRwdXRfaXRlcmF0YWJsZQotICAgIDogaW5jcmVtZW50YWJsZTxU
LCBCCi0gICAgICA+IHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUCwgY2xhc3MgQiA9
IG9wZXJhdG9yc19kZXRhaWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IGZvcndhcmRfaXRlcmF0
YWJsZQotICAgIDogaW5wdXRfaXRlcmF0YWJsZTxULCBQLCBCCi0gICAgICA+IHt9OwotCi10ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUCwgY2xhc3MgQiA9IG9wZXJhdG9yc19kZXRhaWw6OmVtcHR5
X2Jhc2U8VD4gPgotc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0YWJsZQotICAgIDogZm9yd2Fy
ZF9pdGVyYXRhYmxlPFQsIFAKLSAgICAsIGRlY3JlbWVudGFibGU8VCwgQgotICAgICAgPiA+IHt9
OwotCi0vLyAgVG8gYXZvaWQgcmVwZWF0ZWQgZGVyaXZhdGlvbiBmcm9tIGVxdWFsaXR5X2NvbXBh
cmFibGUsCi0vLyAgd2hpY2ggaXMgYW4gaW5kaXJlY3QgYmFzZSBjbGFzcyBvZiBiaWRpcmVjdGlv
bmFsX2l0ZXJhYmxlLAotLy8gIHJhbmRvbV9hY2Nlc3NfaXRlcmF0YWJsZSBtdXN0IG5vdCBiZSBk
ZXJpdmVkIGZyb20gdG90YWxseV9vcmRlcmVkMQotLy8gIGJ1dCBmcm9tIGxlc3NfdGhhbl9jb21w
YXJhYmxlMSBvbmx5LiAoSGVsbXV0IFplaXNlbCwgMDItRGVjLTIwMDEpCi10ZW1wbGF0ZSA8Y2xh
c3MgVCwgY2xhc3MgUCwgY2xhc3MgRCwgY2xhc3MgUiwgY2xhc3MgQiA9IG9wZXJhdG9yc19kZXRh
aWw6OmVtcHR5X2Jhc2U8VD4gPgotc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0YWJsZQotICAg
IDogYmlkaXJlY3Rpb25hbF9pdGVyYXRhYmxlPFQsIFAKLSAgICAsIGxlc3NfdGhhbl9jb21wYXJh
YmxlMTxUCi0gICAgLCBhZGRpdGl2ZTI8VCwgRAotICAgICwgaW5kZXhhYmxlPFQsIEQsIFIsIEIK
LSAgICAgID4gPiA+ID4ge307Ci0KLQotLy8KLS8vIEhlcmUncyB3aGVyZSB3ZSBwdXQgaXQgYWxs
IHRvZ2V0aGVyLCBkZWZpbmluZyB0aGUgeHh4eCBmb3JtcyBvZiB0aGUgdGVtcGxhdGVzLgotLy8g
V2UgYWxzbyBkZWZpbmUgc3BlY2lhbGl6YXRpb25zIG9mIGlzX2NoYWluZWRfYmFzZTw+IGZvcgot
Ly8gdGhlIHh4eHgsIHh4eHgxLCBhbmQgeHh4eDIgdGVtcGxhdGVzLgotLy8KLQotbmFtZXNwYWNl
IG9wZXJhdG9yc19kZXRhaWwKLXsKLQotLy8gQSB0eXBlIHBhcmFtZXRlciBpcyB1c2VkIGluc3Rl
YWQgb2YgYSBwbGFpbiBib29sIGJlY2F1c2UgQm9ybGFuZCdzIGNvbXBpbGVyCi0vLyBkaWRuJ3Qg
Y29wZSB3ZWxsIHdpdGggdGhlIG1vcmUgb2J2aW91cyBub24tdHlwZSB0ZW1wbGF0ZSBwYXJhbWV0
ZXIuCi1zdHJ1Y3QgdHJ1ZV90IHt9Owotc3RydWN0IGZhbHNlX3Qge307Ci0KLX0gLy8gbmFtZXNw
YWNlIG9wZXJhdG9yc19kZXRhaWwKLQotLy8gaXNfY2hhaW5lZF9iYXNlPD4gLSBhIHRyYWl0cyBj
bGFzcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIHdoZXRoZXIgYW4gb3BlcmF0b3IKLS8vIHRlbXBsYXRl
IGFyZ3VtZW50IGlzIGJlaW5nIHVzZWQgZm9yIGJhc2UgY2xhc3MgY2hhaW5pbmcsIG9yIGlzIHNw
ZWNpZnlpbmcgYQotLy8gMm5kIGFyZ3VtZW50IHR5cGUuCi0KLS8vIFVuc3BlY2lhbGl6ZWQgdmVy
c2lvbiBhc3N1bWVzIHRoYXQgbW9zdCB0eXBlcyBhcmUgbm90IGJlaW5nIHVzZWQgZm9yIGJhc2UK
LS8vIGNsYXNzIGNoYWluaW5nLiBXZSBzcGVjaWFsaXplIGZvciB0aGUgb3BlcmF0b3IgdGVtcGxh
dGVzIGRlZmluZWQgaW4gdGhpcwotLy8gbGlicmFyeS4KLXRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVj
dCBpc19jaGFpbmVkX2Jhc2UgewotICB0eXBlZGVmIG9wZXJhdG9yc19kZXRhaWw6OmZhbHNlX3Qg
dmFsdWU7Ci19OwotCi0vLyBQcm92aWRlIGEgc3BlY2lhbGl6YXRpb24gb2YgJ2lzX2NoYWluZWRf
YmFzZTw+JwotLy8gZm9yIGEgNC10eXBlLWFyZ3VtZW50IG9wZXJhdG9yIHRlbXBsYXRlLgotIyBk
ZWZpbmUgQk9PU1RfT1BFUkFUT1JfVEVNUExBVEU0KHRlbXBsYXRlX25hbWU0KSAgICAgICAgICAg
XAotICB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVLCBjbGFzcyBWLCBjbGFzcyBXLCBjbGFzcyBC
PiAgICAgXAotICBzdHJ1Y3QgaXNfY2hhaW5lZF9iYXNlPCB0ZW1wbGF0ZV9uYW1lNDxULCBVLCBW
LCBXLCBCPiA+IHsgXAotICAgIHR5cGVkZWYgb3BlcmF0b3JzX2RldGFpbDo6dHJ1ZV90IHZhbHVl
OyAgICAgICAgICAgICAgICAgXAotICB9OwotCi0vLyBQcm92aWRlIGEgc3BlY2lhbGl6YXRpb24g
b2YgJ2lzX2NoYWluZWRfYmFzZTw+JwotLy8gZm9yIGEgMy10eXBlLWFyZ3VtZW50IG9wZXJhdG9y
IHRlbXBsYXRlLgotIyBkZWZpbmUgQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUzKHRlbXBsYXRlX25h
bWUzKSAgICAgICAgXAotICB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVLCBjbGFzcyBWLCBjbGFz
cyBCPiAgICAgICAgICAgXAotICBzdHJ1Y3QgaXNfY2hhaW5lZF9iYXNlPCB0ZW1wbGF0ZV9uYW1l
MzxULCBVLCBWLCBCPiA+IHsgXAotICAgIHR5cGVkZWYgb3BlcmF0b3JzX2RldGFpbDo6dHJ1ZV90
IHZhbHVlOyAgICAgICAgICAgICAgXAotICB9OwotCi0vLyBQcm92aWRlIGEgc3BlY2lhbGl6YXRp
b24gb2YgJ2lzX2NoYWluZWRfYmFzZTw+JwotLy8gZm9yIGEgMi10eXBlLWFyZ3VtZW50IG9wZXJh
dG9yIHRlbXBsYXRlLgotIyBkZWZpbmUgQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUyKHRlbXBsYXRl
X25hbWUyKSAgICAgXAotICB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVLCBjbGFzcyBCPiAgICAg
ICAgICAgICAgICAgXAotICBzdHJ1Y3QgaXNfY2hhaW5lZF9iYXNlPCB0ZW1wbGF0ZV9uYW1lMjxU
LCBVLCBCPiA+IHsgXAotICAgIHR5cGVkZWYgb3BlcmF0b3JzX2RldGFpbDo6dHJ1ZV90IHZhbHVl
OyAgICAgICAgICAgXAotICB9OwotCi0vLyBQcm92aWRlIGEgc3BlY2lhbGl6YXRpb24gb2YgJ2lz
X2NoYWluZWRfYmFzZTw+JwotLy8gZm9yIGEgMS10eXBlLWFyZ3VtZW50IG9wZXJhdG9yIHRlbXBs
YXRlLgotIyBkZWZpbmUgQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUxKHRlbXBsYXRlX25hbWUxKSAg
XAotICB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBCPiAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBzdHJ1Y3QgaXNfY2hhaW5lZF9iYXNlPCB0ZW1wbGF0ZV9uYW1lMTxULCBCPiA+IHsgXAotICAg
IHR5cGVkZWYgb3BlcmF0b3JzX2RldGFpbDo6dHJ1ZV90IHZhbHVlOyAgICAgICAgXAotICB9Owot
Ci0vLyBCT09TVF9PUEVSQVRPUl9URU1QTEFURSh0ZW1wbGF0ZV9uYW1lKSBkZWZpbmVzIHRlbXBs
YXRlX25hbWU8PiBzdWNoIHRoYXQgaXQKLS8vIGNhbiBiZSB1c2VkIGZvciBzcGVjaWZ5aW5nIGJv
dGggMS1hcmd1bWVudCBhbmQgMi1hcmd1bWVudCBmb3Jtcy4gUmVxdWlyZXMgdGhlCi0vLyBleGlz
dGVuY2Ugb2YgdHdvIHByZXZpb3VzbHkgZGVmaW5lZCBjbGFzcyB0ZW1wbGF0ZXMgbmFtZWQgJzx0
ZW1wbGF0ZV9uYW1lPjEnCi0vLyBhbmQgJzx0ZW1wbGF0ZV9uYW1lPjInIHdoaWNoIG11c3QgaW1w
bGVtZW50IHRoZSBjb3JyZXNwb25kaW5nIDEtIGFuZCAyLQotLy8gYXJndW1lbnQgZm9ybXMuCi0v
LwotLy8gVGhlIHRlbXBsYXRlIHR5cGUgcGFyYW1ldGVyIE8gPT0gaXNfY2hhaW5lZF9iYXNlPFU+
Ojp2YWx1ZSBpcyB1c2VkIHRvCi0vLyBkaXN0aW5ndWlzaCB3aGV0aGVyIHRoZSAybmQgYXJndW1l
bnQgdG8gPHRlbXBsYXRlX25hbWU+IGlzIGJlaW5nIHVzZWQgZm9yCi0vLyBiYXNlIGNsYXNzIGNo
YWluaW5nIGZyb20gYW5vdGhlciBib29zdCBvcGVyYXRvciB0ZW1wbGF0ZSBvciBpcyBkZXNjcmli
aW5nIGEKLS8vIDJuZCBvcGVyYW5kIHR5cGUuIE8gPT0gdHJ1ZV90IG9ubHkgd2hlbiBVIGlzIGFj
dHVhbGx5IGFuIGFub3RoZXIgb3BlcmF0b3IKLS8vIHRlbXBsYXRlIGZyb20gdGhlIGxpYnJhcnku
IFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gaXMgdXNlZCB0byBzZWxlY3QgYW4KLS8vIGltcGxlbWVu
dGF0aW9uIGluIHRlcm1zIG9mIGVpdGhlciAnPHRlbXBsYXRlX25hbWU+MScgb3IgJzx0ZW1wbGF0
ZV9uYW1lPjInLgotLy8KLQotIyBkZWZpbmUgQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUodGVtcGxh
dGVfbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi10ZW1wbGF0
ZSA8Y2xhc3MgVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICxjbGFzcyBVID0gVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgLGNsYXNzIEIgPSBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9iYXNlPFQ+ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAsY2xhc3MgTyA9IHR5cGVu
YW1lIGlzX2NoYWluZWRfYmFzZTxVPjo6dmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RydWN0IHRlbXBsYXRlX25h
bWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlPGNs
YXNzIFQsIGNsYXNzIFUsIGNsYXNzIEI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotc3RydWN0IHRlbXBsYXRlX25hbWU8VCwgVSwgQiwgb3BlcmF0
b3JzX2RldGFpbDo6ZmFsc2VfdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIDog
dGVtcGxhdGVfbmFtZSMjMjxULCBVLCBCPiB7fTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdHJ1Y3QgdGVtcGxhdGVfbmFtZTxU
LCBVLCBvcGVyYXRvcnNfZGV0YWlsOjplbXB0eV9iYXNlPFQ+LCBvcGVyYXRvcnNfZGV0YWlsOjp0
cnVlX3Q+IFwKLSAgOiB0ZW1wbGF0ZV9uYW1lIyMxPFQsIFU+IHt9OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQj4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0cnVjdCB0
ZW1wbGF0ZV9uYW1lPFQsIFQsIEIsIG9wZXJhdG9yc19kZXRhaWw6OmZhbHNlX3Q+ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICA6IHRlbXBsYXRlX25hbWUjIzE8VCwgQj4ge307ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFUs
IGNsYXNzIEIsIGNsYXNzIE8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotc3RydWN0IGlzX2NoYWluZWRfYmFzZTwgdGVtcGxhdGVfbmFtZTxULCBVLCBCLCBPPiA+
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHR5cGVkZWYgb3BlcmF0b3Jz
X2RldGFpbDo6dHJ1ZV90IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLX07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi1CT09TVF9PUEVSQVRPUl9URU1QTEFURTIodGVtcGxhdGVfbmFt
ZSMjMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUJPT1NU
X09QRVJBVE9SX1RFTVBMQVRFMSh0ZW1wbGF0ZV9uYW1lIyMxKQotCi1CT09TVF9PUEVSQVRPUl9U
RU1QTEFURShsZXNzX3RoYW5fY29tcGFyYWJsZSkKLUJPT1NUX09QRVJBVE9SX1RFTVBMQVRFKGVx
dWFsaXR5X2NvbXBhcmFibGUpCi1CT09TVF9PUEVSQVRPUl9URU1QTEFURShtdWx0aXBsaWFibGUp
Ci1CT09TVF9PUEVSQVRPUl9URU1QTEFURShhZGRhYmxlKQotQk9PU1RfT1BFUkFUT1JfVEVNUExB
VEUoc3VidHJhY3RhYmxlKQotQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUyKHN1YnRyYWN0YWJsZTJf
bGVmdCkKLUJPT1NUX09QRVJBVE9SX1RFTVBMQVRFKGRpdmlkYWJsZSkKLUJPT1NUX09QRVJBVE9S
X1RFTVBMQVRFMihkaXZpZGFibGUyX2xlZnQpCi1CT09TVF9PUEVSQVRPUl9URU1QTEFURShtb2Rh
YmxlKQotQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUyKG1vZGFibGUyX2xlZnQpCi1CT09TVF9PUEVS
QVRPUl9URU1QTEFURSh4b3JhYmxlKQotQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUoYW5kYWJsZSkK
LUJPT1NUX09QRVJBVE9SX1RFTVBMQVRFKG9yYWJsZSkKLQotQk9PU1RfT1BFUkFUT1JfVEVNUExB
VEUxKGluY3JlbWVudGFibGUpCi1CT09TVF9PUEVSQVRPUl9URU1QTEFURTEoZGVjcmVtZW50YWJs
ZSkKLQotQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUyKGRlcmVmZXJlbmNlYWJsZSkKLUJPT1NUX09Q
RVJBVE9SX1RFTVBMQVRFMyhpbmRleGFibGUpCi0KLUJPT1NUX09QRVJBVE9SX1RFTVBMQVRFKGxl
ZnRfc2hpZnRhYmxlKQotQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUocmlnaHRfc2hpZnRhYmxlKQot
Qk9PU1RfT1BFUkFUT1JfVEVNUExBVEUoZXF1aXZhbGVudCkKLUJPT1NUX09QRVJBVE9SX1RFTVBM
QVRFKHBhcnRpYWxseV9vcmRlcmVkKQotCi1CT09TVF9PUEVSQVRPUl9URU1QTEFURSh0b3RhbGx5
X29yZGVyZWQpCi1CT09TVF9PUEVSQVRPUl9URU1QTEFURShhZGRpdGl2ZSkKLUJPT1NUX09QRVJB
VE9SX1RFTVBMQVRFKG11bHRpcGxpY2F0aXZlKQotQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUoaW50
ZWdlcl9tdWx0aXBsaWNhdGl2ZSkKLUJPT1NUX09QRVJBVE9SX1RFTVBMQVRFKGFyaXRobWV0aWMp
Ci1CT09TVF9PUEVSQVRPUl9URU1QTEFURShpbnRlZ2VyX2FyaXRobWV0aWMpCi1CT09TVF9PUEVS
QVRPUl9URU1QTEFURShiaXR3aXNlKQotQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUxKHVuaXRfc3Rl
cHBhYmxlKQotQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUoc2hpZnRhYmxlKQotQk9PU1RfT1BFUkFU
T1JfVEVNUExBVEUocmluZ19vcGVyYXRvcnMpCi1CT09TVF9PUEVSQVRPUl9URU1QTEFURShvcmRl
cmVkX3Jpbmdfb3BlcmF0b3JzKQotQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUoZmllbGRfb3BlcmF0
b3JzKQotQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUob3JkZXJlZF9maWVsZF9vcGVyYXRvcnMpCi1C
T09TVF9PUEVSQVRPUl9URU1QTEFURShldWNsaWRpYW5fcmluZ19vcGVyYXRvcnMpCi1CT09TVF9P
UEVSQVRPUl9URU1QTEFURShvcmRlcmVkX2V1Y2xpZGlhbl9yaW5nX29wZXJhdG9ycykKLUJPT1NU
X09QRVJBVE9SX1RFTVBMQVRFKGV1Y2xpZGVhbl9yaW5nX29wZXJhdG9ycykKLUJPT1NUX09QRVJB
VE9SX1RFTVBMQVRFKG9yZGVyZWRfZXVjbGlkZWFuX3Jpbmdfb3BlcmF0b3JzKQotQk9PU1RfT1BF
UkFUT1JfVEVNUExBVEUyKGlucHV0X2l0ZXJhdGFibGUpCi1CT09TVF9PUEVSQVRPUl9URU1QTEFU
RTEob3V0cHV0X2l0ZXJhdGFibGUpCi1CT09TVF9PUEVSQVRPUl9URU1QTEFURTIoZm9yd2FyZF9p
dGVyYXRhYmxlKQotQk9PU1RfT1BFUkFUT1JfVEVNUExBVEUyKGJpZGlyZWN0aW9uYWxfaXRlcmF0
YWJsZSkKLUJPT1NUX09QRVJBVE9SX1RFTVBMQVRFNChyYW5kb21fYWNjZXNzX2l0ZXJhdGFibGUp
Ci0KLSN1bmRlZiBCT09TVF9PUEVSQVRPUl9URU1QTEFURQotI3VuZGVmIEJPT1NUX09QRVJBVE9S
X1RFTVBMQVRFNAotI3VuZGVmIEJPT1NUX09QRVJBVE9SX1RFTVBMQVRFMwotI3VuZGVmIEJPT1NU
X09QRVJBVE9SX1RFTVBMQVRFMgotI3VuZGVmIEJPT1NUX09QRVJBVE9SX1RFTVBMQVRFMQotCi10
ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KLXN0cnVjdCBvcGVyYXRvcnMyCi0gICAgOiB0b3Rh
bGx5X29yZGVyZWQyPFQsVQotICAgICwgaW50ZWdlcl9hcml0aG1ldGljMjxULFUKLSAgICAsIGJp
dHdpc2UyPFQsVQotICAgICAgPiA+ID4ge307Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBV
ID0gVD4KLXN0cnVjdCBvcGVyYXRvcnMgOiBvcGVyYXRvcnMyPFQsIFU+IHt9OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4gc3RydWN0IG9wZXJhdG9yczxULCBUPgotICAgIDogdG90YWxseV9vcmRlcmVk
PFQKLSAgICAsIGludGVnZXJfYXJpdGhtZXRpYzxUCi0gICAgLCBiaXR3aXNlPFQKLSAgICAsIHVu
aXRfc3RlcHBhYmxlPFQKLSAgICAgID4gPiA+ID4ge307Ci0KLS8vICBJdGVyYXRvciBoZWxwZXIg
Y2xhc3NlcyAoY29udHJpYnV0ZWQgYnkgSmVyZW15IFNpZWspIC0tLS0tLS0tLS0tLS0tLS0tLS0v
LwotLy8gIChJbnB1dCBhbmQgb3V0cHV0IGl0ZXJhdG9yIGhlbHBlcnMgY29udHJpYnV0ZWQgYnkg
RGFyeWxlIFdhbGtlcikgLS0tLS0tLS8vCi0vLyAgKENoYW5nZWQgdG8gdXNlIGNvbWJpbmVkIG9w
ZXJhdG9yIGNsYXNzZXMgYnkgRGFyeWxlIFdhbGtlcikgLS0tLS0tLS0tLS0tLy8KLXRlbXBsYXRl
IDxjbGFzcyBULAotICAgICAgICAgIGNsYXNzIFYsCi0gICAgICAgICAgY2xhc3MgRCA9IHN0ZDo6
cHRyZGlmZl90LAotICAgICAgICAgIGNsYXNzIFAgPSBWIGNvbnN0ICosCi0gICAgICAgICAgY2xh
c3MgUiA9IFYgY29uc3QgJj4KLXN0cnVjdCBpbnB1dF9pdGVyYXRvcl9oZWxwZXIKLSAgOiBpbnB1
dF9pdGVyYXRhYmxlPFQsIFAKLSAgLCBzdGQ6Oml0ZXJhdG9yPHN0ZDo6aW5wdXRfaXRlcmF0b3Jf
dGFnLCBWLCBELCBQLCBSCi0gICAgPiA+IHt9OwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0
IG91dHB1dF9pdGVyYXRvcl9oZWxwZXIKLSAgOiBvdXRwdXRfaXRlcmF0YWJsZTxUCi0gICwgc3Rk
OjppdGVyYXRvcjxzdGQ6Om91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZv
aWQKLSAgPiA+Ci17Ci0gIFQmIG9wZXJhdG9yKigpICB7IHJldHVybiBzdGF0aWNfY2FzdDxUJj4o
KnRoaXMpOyB9Ci0gIFQmIG9wZXJhdG9yKysoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUJj4oKnRo
aXMpOyB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwKLSAgICAgICAgICBjbGFzcyBWLAotICAg
ICAgICAgIGNsYXNzIEQgPSBzdGQ6OnB0cmRpZmZfdCwKLSAgICAgICAgICBjbGFzcyBQID0gVios
Ci0gICAgICAgICAgY2xhc3MgUiA9IFYmPgotc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfaGVscGVy
Ci0gIDogZm9yd2FyZF9pdGVyYXRhYmxlPFQsIFAKLSAgLCBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9y
d2FyZF9pdGVyYXRvcl90YWcsIFYsIEQsIFAsIFIKLSAgICA+ID4ge307Ci0KLXRlbXBsYXRlIDxj
bGFzcyBULAotICAgICAgICAgIGNsYXNzIFYsCi0gICAgICAgICAgY2xhc3MgRCA9IHN0ZDo6cHRy
ZGlmZl90LAotICAgICAgICAgIGNsYXNzIFAgPSBWKiwKLSAgICAgICAgICBjbGFzcyBSID0gViY+
Ci1zdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl9oZWxwZXIKLSAgOiBiaWRpcmVjdGlvbmFs
X2l0ZXJhdGFibGU8VCwgUAotICAsIHN0ZDo6aXRlcmF0b3I8c3RkOjpiaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yX3RhZywgViwgRCwgUCwgUgotICAgID4gPiB7fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQs
Ci0gICAgICAgICAgY2xhc3MgViwKLSAgICAgICAgICBjbGFzcyBEID0gc3RkOjpwdHJkaWZmX3Qs
Ci0gICAgICAgICAgY2xhc3MgUCA9IFYqLAotICAgICAgICAgIGNsYXNzIFIgPSBWJj4KLXN0cnVj
dCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX2hlbHBlcgotICA6IHJhbmRvbV9hY2Nlc3NfaXRlcmF0
YWJsZTxULCBQLCBELCBSCi0gICwgc3RkOjppdGVyYXRvcjxzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnLCBWLCBELCBQLCBSCi0gICAgPiA+Ci17Ci0gIGZyaWVuZCBEIHJlcXVpcmVzX2Rp
ZmZlcmVuY2Vfb3BlcmF0b3IoY29uc3QgVCYgeCwgY29uc3QgVCYgeSkgewotICAgIHJldHVybiB4
IC0geTsKLSAgfQotfTsgLy8gcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl9oZWxwZXIKLQotfSAvLyBu
YW1lc3BhY2Ugb3BlcmF0b3JzX2ltcGwKLXVzaW5nIG5hbWVzcGFjZSBvcGVyYXRvcnNfaW1wbDsK
LQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2lmIGRlZmluZWQoX19zZ2kpICYmICFkZWZpbmVk
KF9fR05VQ19fKQotI3ByYWdtYSByZXNldCB3b2ZmIDEyMzQKLSNlbmRpZgotCi0jZW5kaWYgLy8g
Qk9PU1RfTk9fT1BFUkFUT1JTX0lOX05BTUVTUEFDRQotI2VuZGlmIC8vIEJPT1NUX09QRVJBVE9S
U19IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3BlbmRpbmcvaW50ZWdlcl9sb2cyLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3BlbmRpbmcvaW50ZWdlcl9sb2cyLmhwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDIzZWM3YWYwMzhlOGNlOTYwNTFiYzI0MjQwMTljYTE1ODdlOGYzMi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wZW5kaW5nL2ludGVnZXJfbG9nMi5ocHAK
KysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpZm5kZWYgQk9PU1RfUEVORElOR19JTlRF
R0VSX0xPRzJfSFBQCi0jZGVmaW5lIEJPT1NUX1BFTkRJTkdfSU5URUdFUl9MT0cyX0hQUAotCi0v
LyBUaGUgaGVhZGVyIGZpbGUgYXQgdGhpcyBwYXRoIGlzIGRlcHJlY2F0ZWQ7Ci0vLyB1c2UgYm9v
c3QvaW50ZWdlci9pbnRlZ2VyX2xvZzIuaHBwIGluc3RlYWQuCi0KLSNpbmNsdWRlIDxib29zdC9p
bnRlZ2VyL2ludGVnZXJfbG9nMi5ocHA+Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmLmggYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDk2NTMzNzg3NWRmZTY5ODFiNjBkZjIxMmYwZWE3ZmFhZjQ2ZDlhNi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYuaAorKysgL2Rldi9udWxsCkBAIC0x
LDI0ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1Ci1EaXN0cmli
dXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2Vl
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWYgIWRlZmluZWQoQk9PU1RfUFJF
REVGX0gpIHx8IGRlZmluZWQoQk9PU1RfUFJFREVGX0lOVEVSTkFMX0dFTkVSQVRFX1RFU1RTKQot
I2lmbmRlZiBCT09TVF9QUkVERUZfSAotI2RlZmluZSBCT09TVF9QUkVERUZfSAotI2VuZGlmCi0K
LSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbGFuZ3VhZ2UuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVk
ZWYvYXJjaGl0ZWN0dXJlLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2NvbXBpbGVyLmg+Ci0j
aW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2xpYnJhcnkuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYv
b3MuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvb3RoZXIuaD4KLSNpbmNsdWRlIDxib29zdC9w
cmVkZWYvcGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvaGFyZHdhcmUuaD4KLQot
I2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uLmg+Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2FyY2hpdGVj
dHVyZS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVm
L2FyY2hpdGVjdHVyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDMzZDQzN2Jk
ODk5ODNmZWRjYmQ5M2I0N2JhZGM0ZGZiMzBlZmUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAg
QEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRl
ciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWYgIWRlZmluZWQoQk9PU1RfUFJFREVGX0FSQ0hJ
VEVDVFVSRV9IKSB8fCBkZWZpbmVkKEJPT1NUX1BSRURFRl9JTlRFUk5BTF9HRU5FUkFURV9URVNU
UykKLSNpZm5kZWYgQk9PU1RfUFJFREVGX0FSQ0hJVEVDVFVSRV9ICi0jZGVmaW5lIEJPT1NUX1BS
RURFRl9BUkNISVRFQ1RVUkVfSAotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvYXJj
aGl0ZWN0dXJlL2FscGhhLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2FyY2hpdGVjdHVyZS9h
cm0uaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL2JsYWNrZmluLmg+Ci0j
aW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2FyY2hpdGVjdHVyZS9jb252ZXguaD4KLSNpbmNsdWRlIDxi
b29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL2lhNjQuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYv
YXJjaGl0ZWN0dXJlL202OGsuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJl
L21pcHMuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL3BhcmlzYy5oPgot
I2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUvcHBjLmg+Ci0jaW5jbHVkZSA8Ym9v
c3QvcHJlZGVmL2FyY2hpdGVjdHVyZS9weXJhbWlkLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVm
L2FyY2hpdGVjdHVyZS9yczZrLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2FyY2hpdGVjdHVy
ZS9zcGFyYy5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUvc3VwZXJoLmg+
Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2FyY2hpdGVjdHVyZS9zeXMzNzAuaD4KLSNpbmNsdWRl
IDxib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL3N5czM5MC5oPgotI2luY2x1ZGUgPGJvb3N0L3By
ZWRlZi9hcmNoaXRlY3R1cmUveDg2Lmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2FyY2hpdGVj
dHVyZS96Lmg+Ci0vKiNpbmNsdWRlIDxib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlLy5oPiovCi0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvcHJlZGVmL2FyY2hpdGVjdHVyZS9hbHBoYS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2FyY2hpdGVjdHVyZS9hbHBoYS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmNhZGUxOGIxN2VhNTg2MDg1Y2QyMmMyMzRjOTE0Yzk3
YjdlYWZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1
cmUvYWxwaGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQg
UmVuZSBSaXZlcmEgMjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdh
cmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Vf
MV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQp
Ci0qLwotCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9BUkNISVRFQ1RVUkVfQUxQSEFfSAotI2RlZmlu
ZSBCT09TVF9QUkVERUZfQVJDSElURUNUVVJFX0FMUEhBX0gKLQotI2luY2x1ZGUgPGJvb3N0L3By
ZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0K
LS8qYAotW2hlYWRpbmcgYEJPT1NUX0FSQ0hfQUxQSEFgXQotCi1bQGh0dHA6Ly9lbi53aWtpcGVk
aWEub3JnL3dpa2kvREVDX0FscGhhIERFQyBBbHBoYV0gYXJjaGl0ZWN0dXJlLgotCi1bdGFibGUK
LSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLSAgICBbW2Bf
X2FscGhhX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fYWxwaGFgXSBbX19w
cmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9NX0FMUEhBYF0gW19fcHJlZGVmX2RldGVjdGlv
bl9fXV0KLQotICAgIFtbYF9fYWxwaGFfZXY0X19gXSBbNC4wLjBdXQotICAgIFtbYF9fYWxwaGFf
ZXY1X19gXSBbNS4wLjBdXQotICAgIFtbYF9fYWxwaGFfZXY2X19gXSBbNi4wLjBdXQotICAgIF0K
LSAqLwotCi0jZGVmaW5lIEJPT1NUX0FSQ0hfQUxQSEEgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9U
X0FWQUlMQUJMRQotCi0jaWYgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19hbHBoYSkg
fHwgXAotICAgIGRlZmluZWQoX01fQUxQSEEpCi0jICAgdW5kZWYgQk9PU1RfQVJDSF9BTFBIQQot
IyAgIGlmICFkZWZpbmVkKEJPT1NUX0FSQ0hfQUxQSEEpICYmIGRlZmluZWQoX19hbHBoYV9ldjRf
XykKLSMgICAgICAgZGVmaW5lIEJPT1NUX0FSQ0hfQUxQSEEgQk9PU1RfVkVSU0lPTl9OVU1CRVIo
NCwwLDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9BUkNIX0FMUEhBKSAmJiBk
ZWZpbmVkKF9fYWxwaGFfZXY1X18pCi0jICAgICAgIGRlZmluZSBCT09TVF9BUkNIX0FMUEhBIEJP
T1NUX1ZFUlNJT05fTlVNQkVSKDUsMCwwKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQoQk9P
U1RfQVJDSF9BTFBIQSkgJiYgZGVmaW5lZChfX2FscGhhX2V2Nl9fKQotIyAgICAgICBkZWZpbmUg
Qk9PU1RfQVJDSF9BTFBIQSBCT09TVF9WRVJTSU9OX05VTUJFUig2LDAsMCkKLSMgICBlbmRpZgot
IyAgIGlmICFkZWZpbmVkKEJPT1NUX0FSQ0hfQUxQSEEpCi0jICAgICAgIGRlZmluZSBCT09TVF9B
UkNIX0FMUEhBIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotIyAgIGVuZGlmCi0jZW5k
aWYKLQotI2lmIEJPT1NUX0FSQ0hfQUxQSEEKLSMgICBkZWZpbmUgQk9PU1RfQVJDSF9BTFBIQV9B
VkFJTEFCTEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0FSQ0hfQUxQSEFfTkFNRSAiREVDIEFs
cGhhIgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgot
Qk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9BUkNIX0FMUEhBLEJPT1NUX0FSQ0hfQUxQ
SEFfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUvYXJtLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL2FybS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiMjAwYzYyNzc3MjllY2Q4MzU2ZjU5YzU0MTk3YTY1MzhjNTQ2
MjI1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUv
YXJtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUg
Uml2ZXJhIDIwMDgtMjAxNQotQ29weXJpZ2h0IEZyYW56IERldHJvIDIwMTQKLUNvcHlyaWdodCAo
YykgTWljcm9zb2Z0IENvcnBvcmF0aW9uIDIwMTQKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29z
dCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUg
TElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0FSQ0hJVEVDVFVSRV9BUk1fSAot
I2RlZmluZSBCT09TVF9QUkVERUZfQVJDSElURUNUVVJFX0FSTV9ICi0KLSNpbmNsdWRlIDxib29z
dC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5o
PgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9BUkNIX0FSTWBdCi0KLVtAaHR0cDovL2VuLndpa2lw
ZWRpYS5vcmcvd2lraS9BUk1fYXJjaGl0ZWN0dXJlIEFSTV0gYXJjaGl0ZWN0dXJlLgotCi1bdGFi
bGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAg
IFtbYF9fYXJtX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fYXJtNjRgXSBb
X19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fdGh1bWJfX2BdIFtfX3ByZWRlZl9kZXRl
Y3Rpb25fX11dCi0gICAgW1tgX19UQVJHRVRfQVJDSF9BUk1gXSBbX19wcmVkZWZfZGV0ZWN0aW9u
X19dXQotICAgIFtbYF9fVEFSR0VUX0FSQ0hfVEhVTUJgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19d
XQotICAgIFtbYF9NX0FSTWBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BfX2Fy
bTY0YF0gWzguMC4wXV0KLSAgICBbW2BfX1RBUkdFVF9BUkNIX0FSTWBdIFtWLjAuMF1dCi0gICAg
W1tgX19UQVJHRVRfQVJDSF9USFVNQmBdIFtWLjAuMF1dCi0gICAgW1tgX01fQVJNYF0gW1YuMC4w
XV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9BUkNIX0FSTSBCT09TVF9WRVJTSU9OX05V
TUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19h
cm02NCkgfHwgZGVmaW5lZChfX3RodW1iX18pIHx8IFwKLSAgICBkZWZpbmVkKF9fVEFSR0VUX0FS
Q0hfQVJNKSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfVEhVTUIpIHx8IFwKLSAgICBkZWZpbmVk
KF9NX0FSTSkKLSMgICB1bmRlZiBCT09TVF9BUkNIX0FSTQotIyAgIGlmICFkZWZpbmVkKEJPT1NU
X0FSQ0hfQVJNKSAmJiBkZWZpbmVkKF9fYXJtNjQpCi0jICAgICAgIGRlZmluZSBCT09TVF9BUkNI
X0FSTSBCT09TVF9WRVJTSU9OX05VTUJFUig4LDAsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZp
bmVkKEJPT1NUX0FSQ0hfQVJNKSAmJiBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfQVJNKQotIyAgICAg
ICBkZWZpbmUgQk9PU1RfQVJDSF9BUk0gQk9PU1RfVkVSU0lPTl9OVU1CRVIoX19UQVJHRVRfQVJD
SF9BUk0sMCwwKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfQVJDSF9BUk0pICYm
IGRlZmluZWQoX19UQVJHRVRfQVJDSF9USFVNQikKLSMgICAgICAgZGVmaW5lIEJPT1NUX0FSQ0hf
QVJNIEJPT1NUX1ZFUlNJT05fTlVNQkVSKF9fVEFSR0VUX0FSQ0hfVEhVTUIsMCwwKQotIyAgIGVu
ZGlmCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfQVJDSF9BUk0pICYmIGRlZmluZWQoX01fQVJNKQot
IyAgICAgICBkZWZpbmUgQk9PU1RfQVJDSF9BUk0gQk9PU1RfVkVSU0lPTl9OVU1CRVIoX01fQVJN
LDAsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0FSQ0hfQVJNKQotIyAgICAg
ICBkZWZpbmUgQk9PU1RfQVJDSF9BUk0gQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0j
ICAgZW5kaWYKLSNlbmRpZgotCi0jaWYgQk9PU1RfQVJDSF9BUk0KLSMgICBkZWZpbmUgQk9PU1Rf
QVJDSF9BUk1fQVZBSUxBQkxFCi0jZW5kaWYKLQotI2RlZmluZSBCT09TVF9BUkNIX0FSTV9OQU1F
ICJBUk0iCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+
Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0FSQ0hfQVJNLEJPT1NUX0FSQ0hfQVJN
X05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL2JsYWNrZmluLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL2JsYWNrZmluLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YzU4YTI1ZTlmODU0ZDQ5MGZhMWMxN2FjYjJl
OTU0MTEyZWI2ZDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2FyY2hp
dGVjdHVyZS9ibGFja2Zpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLUNv
cHlyaWdodCBSZW5lIFJpdmVyYSAyMDEzLTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29z
dCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUg
TElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0FSQ0hJVEVDVFVSRV9CTEFDS0ZJ
Tl9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9BUkNISVRFQ1RVUkVfQkxBQ0tGSU5fSAotCi0jaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJl
ZGVmL21ha2UuaD4KLQotLypgCi1baGVhZGluZyBgQk9PU1RfQVJDSF9CTEFDS0ZJTmBdCi0KLUJs
YWNrZmluIFByb2Nlc3NvcnMgZnJvbSBBbmFsb2cgRGV2aWNlcy4KLQotW3RhYmxlCi0gICAgW1tf
X3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfX2JmaW5f
X2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tgX19CRklOX19gXSBbX19wcmVkZWZf
ZGV0ZWN0aW9uX19dXQotICAgIFtbYGJmaW5gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAg
IFtbYEJGSU5gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIF0KLSAqLwotCi0jZGVmaW5l
IEJPT1NUX0FSQ0hfQkxBQ0tGSU4gQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQot
Ci0jaWYgZGVmaW5lZChfX2JmaW5fXykgfHwgZGVmaW5lZChfX0JGSU5fXykgfHwgXAotICAgIGRl
ZmluZWQoYmZpbikgfHwgZGVmaW5lZChCRklOKQotIyAgIHVuZGVmIEJPT1NUX0FSQ0hfQkxBQ0tG
SU4KLSMgICBkZWZpbmUgQk9PU1RfQVJDSF9CTEFDS0ZJTiBCT09TVF9WRVJTSU9OX05VTUJFUl9B
VkFJTEFCTEUKLSNlbmRpZgotCi0jaWYgQk9PU1RfQVJDSF9CTEFDS0ZJTgotIyAgIGRlZmluZSBC
T09TVF9BUkNIX0JMQUNLRklOX0FWQUlMQUJMRQotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfQVJD
SF9CTEFDS0ZJTl9OQU1FICJCbGFja2ZpbiIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9w
cmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQVJD
SF9CTEFDS0ZJTixCT09TVF9BUkNIX0JMQUNLRklOX05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL2Nv
bnZleC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVm
L2FyY2hpdGVjdHVyZS9jb252ZXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM3
ODNhOWNjMWE5Mzg0Y2UyZmIxZTU1ZmMwNDg2MjQ3ZTE1NTkwOC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL2NvbnZleC5oCisrKyAvZGV2L251bGwK
QEAgLTEsNjUgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDExLTIwMTUKLURp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4K
LShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJF
REVGX0FSQ0hJVEVDVFVSRV9DT05WRVhfSAotI2RlZmluZSBCT09TVF9QUkVERUZfQVJDSElURUNU
VVJFX0NPTlZFWF9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4K
LSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9B
UkNIX0NPTlZFWGBdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db252ZXhfQ29t
cHV0ZXIgQ29udmV4IENvbXB1dGVyXSBhcmNoaXRlY3R1cmUuCi0KLVt0YWJsZQotICAgIFtbX19w
cmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19jb252ZXhf
X2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BfX2NvbnZleF9jMV9fYF0gWzEu
MC4wXV0KLSAgICBbW2BfX2NvbnZleF9jMl9fYF0gWzIuMC4wXV0KLSAgICBbW2BfX2NvbnZleF9j
MzJfX2BdIFszLjIuMF1dCi0gICAgW1tgX19jb252ZXhfYzM0X19gXSBbMy40LjBdXQotICAgIFtb
YF9fY29udmV4X2MzOF9fYF0gWzMuOC4wXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9B
UkNIX0NPTlZFWCBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBkZWZp
bmVkKF9fY29udmV4X18pCi0jICAgdW5kZWYgQk9PU1RfQVJDSF9DT05WRVgKLSMgICBpZiAhZGVm
aW5lZChCT09TVF9BUkNIX0NPTlZFWCkgJiYgZGVmaW5lZChfX2NvbnZleF9jMV9fKQotIyAgICAg
ICBkZWZpbmUgQk9PU1RfQVJDSF9DT05WRVggQk9PU1RfVkVSU0lPTl9OVU1CRVIoMSwwLDApCi0j
ICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9BUkNIX0NPTlZFWCkgJiYgZGVmaW5lZChf
X2NvbnZleF9jMl9fKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQVJDSF9DT05WRVggQk9PU1RfVkVS
U0lPTl9OVU1CRVIoMiwwLDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9BUkNI
X0NPTlZFWCkgJiYgZGVmaW5lZChfX2NvbnZleF9jMzJfXykKLSMgICAgICAgZGVmaW5lIEJPT1NU
X0FSQ0hfQ09OVkVYIEJPT1NUX1ZFUlNJT05fTlVNQkVSKDMsMiwwKQotIyAgIGVuZGlmCi0jICAg
aWYgIWRlZmluZWQoQk9PU1RfQVJDSF9DT05WRVgpICYmIGRlZmluZWQoX19jb252ZXhfYzM0X18p
Ci0jICAgICAgIGRlZmluZSBCT09TVF9BUkNIX0NPTlZFWCBCT09TVF9WRVJTSU9OX05VTUJFUigz
LDQsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0FSQ0hfQ09OVkVYKSAmJiBk
ZWZpbmVkKF9fY29udmV4X2MzOF9fKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQVJDSF9DT05WRVgg
Qk9PU1RfVkVSU0lPTl9OVU1CRVIoMyw4LDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChC
T09TVF9BUkNIX0NPTlZFWCkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0FSQ0hfQ09OVkVYIEJPT1NU
X1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotIyAgIGVuZGlmCi0jZW5kaWYKLQotI2lmIEJPT1NU
X0FSQ0hfQ09OVkVYCi0jICAgZGVmaW5lIEJPT1NUX0FSQ0hfQ09OVkVYX0FWQUlMQUJMRQotI2Vu
ZGlmCi0KLSNkZWZpbmUgQk9PU1RfQVJDSF9DT05WRVhfTkFNRSAiQ29udmV4IENvbXB1dGVyIgot
Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1Rf
UFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9BUkNIX0NPTlZFWCxCT09TVF9BUkNIX0NPTlZFWF9O
QU1FKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcHJlZGVmL2FyY2hpdGVjdHVyZS9pYTY0LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL2lhNjQuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWIxOTcyYmQzOTg0ZTBjZTYzNDZmY2ViNTcxYzlhYTY0ODQwOWNi
Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL2lh
NjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBS
aXZlcmEgMjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwot
Ci0jaWZuZGVmIEJPT1NUX1BSRURFRl9BUkNISVRFQ1RVUkVfSUE2NF9ICi0jZGVmaW5lIEJPT1NU
X1BSRURFRl9BUkNISVRFQ1RVUkVfSUE2NF9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVy
c2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVto
ZWFkaW5nIGBCT09TVF9BUkNIX0lBNjRgXQotCi1bQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dp
a2kvSWE2NCBJbnRlbCBJdGFuaXVtIDY0XSBhcmNoaXRlY3R1cmUuCi0KLVt0YWJsZQotICAgIFtb
X19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19pYTY0
X19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9JQTY0YF0gW19fcHJlZGVmX2Rl
dGVjdGlvbl9fXV0KLSAgICBbW2BfX0lBNjRfX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0g
ICAgW1tgX19pYTY0YF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfTV9JQTY0YF0g
W19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfX2l0YW5pdW1fX2BdIFtfX3ByZWRlZl9k
ZXRlY3Rpb25fX11dCi0gICAgXQotICovCi0KLSNkZWZpbmUgQk9PU1RfQVJDSF9JQTY0IEJPT1NU
X1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmluZWQoX19pYTY0X18pIHx8
IGRlZmluZWQoX0lBNjQpIHx8IFwKLSAgICBkZWZpbmVkKF9fSUE2NF9fKSB8fCBkZWZpbmVkKF9f
aWE2NCkgfHwgXAotICAgIGRlZmluZWQoX01fSUE2NCkgfHwgZGVmaW5lZChfX2l0YW5pdW1fXykK
LSMgICB1bmRlZiBCT09TVF9BUkNIX0lBNjQKLSMgICBkZWZpbmUgQk9PU1RfQVJDSF9JQTY0IEJP
T1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotI2VuZGlmCi0KLSNpZiBCT09TVF9BUkNIX0lB
NjQKLSMgICBkZWZpbmUgQk9PU1RfQVJDSF9JQTY0X0FWQUlMQUJMRQotI2VuZGlmCi0KLSNkZWZp
bmUgQk9PU1RfQVJDSF9JQTY0X05BTUUgIkludGVsIEl0YW5pdW0gNjQiCi0KLSNlbmRpZgotCi0j
aW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFS
RV9URVNUKEJPT1NUX0FSQ0hfSUE2NCxCT09TVF9BUkNIX0lBNjRfTkFNRSkKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRl
Y3R1cmUvbTY4ay5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
cHJlZGVmL2FyY2hpdGVjdHVyZS9tNjhrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDYzZWQ1Zjg0NzliZmE2ZmIxY2QwNTQ5YzAxMDhkMGNlMjg5YmViZWIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2FyY2hpdGVjdHVyZS9tNjhrLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4MiArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQot
RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4w
LgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9Q
UkVERUZfQVJDSElURUNUVVJFX002OEtfSAotI2RlZmluZSBCT09TVF9QUkVERUZfQVJDSElURUNU
VVJFX002OEtfSAotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0j
aW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4KLQotLypgCi1baGVhZGluZyBgQk9PU1RfQVJD
SF9NNjhLYF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL002OGsgTW90b3JvbGEg
NjhrXSBhcmNoaXRlY3R1cmUuCi0KLVt0YWJsZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtf
X3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19tNjhrX19gXSBbX19wcmVkZWZfZGV0ZWN0
aW9uX19dXQotICAgIFtbYE02ODAwMGBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBb
W2BfX21jNjgwNjBfX2BdIFs2LjAuMF1dCi0gICAgW1tgbWM2ODA2MGBdIFs2LjAuMF1dCi0gICAg
W1tgX19tYzY4MDYwYF0gWzYuMC4wXV0KLSAgICBbW2BfX21jNjgwNDBfX2BdIFs0LjAuMF1dCi0g
ICAgW1tgbWM2ODA0MGBdIFs0LjAuMF1dCi0gICAgW1tgX19tYzY4MDQwYF0gWzQuMC4wXV0KLSAg
ICBbW2BfX21jNjgwMzBfX2BdIFszLjAuMF1dCi0gICAgW1tgbWM2ODAzMGBdIFszLjAuMF1dCi0g
ICAgW1tgX19tYzY4MDMwYF0gWzMuMC4wXV0KLSAgICBbW2BfX21jNjgwMjBfX2BdIFsyLjAuMF1d
Ci0gICAgW1tgbWM2ODAyMGBdIFsyLjAuMF1dCi0gICAgW1tgX19tYzY4MDIwYF0gWzIuMC4wXV0K
LSAgICBbW2BfX21jNjgwMTBfX2BdIFsxLjAuMF1dCi0gICAgW1tgbWM2ODAxMGBdIFsxLjAuMF1d
Ci0gICAgW1tgX19tYzY4MDEwYF0gWzEuMC4wXV0KLSAgICBbW2BfX21jNjgwMDBfX2BdIFswLjAu
MV1dCi0gICAgW1tgbWM2ODAwMGBdIFswLjAuMV1dCi0gICAgW1tgX19tYzY4MDAwYF0gWzAuMC4x
XV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9BUkNIX002OEsgQk9PU1RfVkVSU0lPTl9O
VU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgZGVmaW5lZChfX202OGtfXykgfHwgZGVmaW5lZChN
NjgwMDApCi0jICAgdW5kZWYgQk9PU1RfQVJDSF9NNjhLCi0jICAgaWYgIWRlZmluZWQoQk9PU1Rf
QVJDSF9NNjhLKSAmJiAoZGVmaW5lZChfX21jNjgwNjBfXykgfHwgZGVmaW5lZChtYzY4MDYwKSB8
fCBkZWZpbmVkKF9fbWM2ODA2MCkpCi0jICAgICAgIGRlZmluZSBCT09TVF9BUkNIX002OEsgQk9P
U1RfVkVSU0lPTl9OVU1CRVIoNiwwLDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09T
VF9BUkNIX002OEspICYmIChkZWZpbmVkKF9fbWM2ODA0MF9fKSB8fCBkZWZpbmVkKG1jNjgwNDAp
IHx8IGRlZmluZWQoX19tYzY4MDQwKSkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0FSQ0hfTTY4SyBC
T09TVF9WRVJTSU9OX05VTUJFUig0LDAsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJP
T1NUX0FSQ0hfTTY4SykgJiYgKGRlZmluZWQoX19tYzY4MDMwX18pIHx8IGRlZmluZWQobWM2ODAz
MCkgfHwgZGVmaW5lZChfX21jNjgwMzApKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQVJDSF9NNjhL
IEJPT1NUX1ZFUlNJT05fTlVNQkVSKDMsMCwwKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQo
Qk9PU1RfQVJDSF9NNjhLKSAmJiAoZGVmaW5lZChfX21jNjgwMjBfXykgfHwgZGVmaW5lZChtYzY4
MDIwKSB8fCBkZWZpbmVkKF9fbWM2ODAyMCkpCi0jICAgICAgIGRlZmluZSBCT09TVF9BUkNIX002
OEsgQk9PU1RfVkVSU0lPTl9OVU1CRVIoMiwwLDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5l
ZChCT09TVF9BUkNIX002OEspICYmIChkZWZpbmVkKF9fbWM2ODAxMF9fKSB8fCBkZWZpbmVkKG1j
NjgwMTApIHx8IGRlZmluZWQoX19tYzY4MDEwKSkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0FSQ0hf
TTY4SyBCT09TVF9WRVJTSU9OX05VTUJFUigxLDAsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZp
bmVkKEJPT1NUX0FSQ0hfTTY4SykgJiYgKGRlZmluZWQoX19tYzY4MDAwX18pIHx8IGRlZmluZWQo
bWM2ODAwMCkgfHwgZGVmaW5lZChfX21jNjgwMDApKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQVJD
SF9NNjhLIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotIyAgIGVuZGlmCi0jICAgaWYg
IWRlZmluZWQoQk9PU1RfQVJDSF9NNjhLKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQVJDSF9NNjhL
IEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotIyAgIGVuZGlmCi0jZW5kaWYKLQotI2lm
IEJPT1NUX0FSQ0hfTTY4SwotIyAgIGRlZmluZSBCT09TVF9BUkNIX002OEtfQVZBSUxBQkxFCi0j
ZW5kaWYKLQotI2RlZmluZSBCT09TVF9BUkNIX002OEtfTkFNRSAiTW90b3JvbGEgNjhrIgotCi0j
ZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJF
REVGX0RFQ0xBUkVfVEVTVChCT09TVF9BUkNIX002OEssQk9PU1RfQVJDSF9NNjhLX05BTUUpCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVk
ZWYvYXJjaGl0ZWN0dXJlL21pcHMuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUvbWlwcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMTg5ZDdkYmQ2NTRlZmUyZDRiZTkzMGRjYzE3NDk4YTkwYzViNTc4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUvbWlwcy5oCisr
KyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAy
MDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5k
ZWYgQk9PU1RfUFJFREVGX0FSQ0hJVEVDVFVSRV9NSVBTX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVG
X0FSQ0hJVEVDVFVSRV9NSVBTX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251
bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcg
YEJPT1NUX0FSQ0hfTUlQU2BdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVBT
X2FyY2hpdGVjdHVyZSBNSVBTXSBhcmNoaXRlY3R1cmUuCi0KLVt0YWJsZQotICAgIFtbX19wcmVk
ZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19taXBzX19gXSBb
X19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fbWlwc2BdIFtfX3ByZWRlZl9kZXRlY3Rp
b25fX11dCi0gICAgW1tgX19NSVBTX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotCi0gICAg
W1tgX19taXBzYF0gW1YuMC4wXV0KLSAgICBbW2BfTUlQU19JU0FfTUlQUzFgXSBbMS4wLjBdXQot
ICAgIFtbYF9SMzAwMGBdIFsxLjAuMF1dCi0gICAgW1tgX01JUFNfSVNBX01JUFMyYF0gWzIuMC4w
XV0KLSAgICBbW2BfX01JUFNfSVNBMl9fYF0gWzIuMC4wXV0KLSAgICBbW2BfUjQwMDBgXSBbMi4w
LjBdXQotICAgIFtbYF9NSVBTX0lTQV9NSVBTM2BdIFszLjAuMF1dCi0gICAgW1tgX19NSVBTX0lT
QTNfX2BdIFszLjAuMF1dCi0gICAgW1tgX01JUFNfSVNBX01JUFM0YF0gWzQuMC4wXV0KLSAgICBb
W2BfX01JUFNfSVNBNF9fYF0gWzQuMC4wXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9B
UkNIX01JUFMgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgZGVmaW5l
ZChfX21pcHNfXykgfHwgZGVmaW5lZChfX21pcHMpIHx8IFwKLSAgICBkZWZpbmVkKF9fTUlQU19f
KQotIyAgIHVuZGVmIEJPT1NUX0FSQ0hfTUlQUwotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0FSQ0hf
TUlQUykgJiYgKGRlZmluZWQoX19taXBzKSkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0FSQ0hfTUlQ
UyBCT09TVF9WRVJTSU9OX05VTUJFUihfX21pcHMsMCwwKQotIyAgIGVuZGlmCi0jICAgaWYgIWRl
ZmluZWQoQk9PU1RfQVJDSF9NSVBTKSAmJiAoZGVmaW5lZChfTUlQU19JU0FfTUlQUzEpIHx8IGRl
ZmluZWQoX1IzMDAwKSkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0FSQ0hfTUlQUyBCT09TVF9WRVJT
SU9OX05VTUJFUigxLDAsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0FSQ0hf
TUlQUykgJiYgKGRlZmluZWQoX01JUFNfSVNBX01JUFMyKSB8fCBkZWZpbmVkKF9fTUlQU19JU0Ey
X18pIHx8IGRlZmluZWQoX1I0MDAwKSkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0FSQ0hfTUlQUyBC
T09TVF9WRVJTSU9OX05VTUJFUigyLDAsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJP
T1NUX0FSQ0hfTUlQUykgJiYgKGRlZmluZWQoX01JUFNfSVNBX01JUFMzKSB8fCBkZWZpbmVkKF9f
TUlQU19JU0EzX18pKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQVJDSF9NSVBTIEJPT1NUX1ZFUlNJ
T05fTlVNQkVSKDMsMCwwKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfQVJDSF9N
SVBTKSAmJiAoZGVmaW5lZChfTUlQU19JU0FfTUlQUzQpIHx8IGRlZmluZWQoX19NSVBTX0lTQTRf
XykpCi0jICAgICAgIGRlZmluZSBCT09TVF9BUkNIX01JUFMgQk9PU1RfVkVSU0lPTl9OVU1CRVIo
NCwwLDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9BUkNIX01JUFMpCi0jICAg
ICAgIGRlZmluZSBCT09TVF9BUkNIX01JUFMgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxF
Ci0jICAgZW5kaWYKLSNlbmRpZgotCi0jaWYgQk9PU1RfQVJDSF9NSVBTCi0jICAgZGVmaW5lIEJP
T1NUX0FSQ0hfTUlQU19BVkFJTEFCTEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0FSQ0hfTUlQ
U19OQU1FICJNSVBTIgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwv
dGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9BUkNIX01JUFMsQk9PU1Rf
QVJDSF9NSVBTX05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL3BhcmlzYy5oIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2FyY2hpdGVjdHVyZS9wYXJpc2Mu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M3NjI1ZjkxMjMzZDU5MjEwNjVmMjVh
NDFhMjVkZGU1M2JhM2YyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYv
YXJjaGl0ZWN0dXJlL3BhcmlzYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoK
LUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBC
b29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VO
U0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0FSQ0hJVEVDVFVSRV9QQVJJ
U0NfSAotI2RlZmluZSBCT09TVF9QUkVERUZfQVJDSElURUNUVVJFX1BBUklTQ19ICi0KLSNpbmNs
dWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVk
ZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9BUkNIX1BBUklTS2BdCi0KLVtAaHR0
cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QQS1SSVNDX2ZhbWlseSBIUC9QQSBSSVNDXSBhcmNo
aXRlY3R1cmUuCi0KLVt0YWJsZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92
ZXJzaW9uX19dXQotCi0gICAgW1tgX19ocHBhX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQot
ICAgIFtbYF9faHBwYWBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tgX19IUFBBX19g
XSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotCi0gICAgW1tgX1BBX1JJU0MxXzBgXSBbMS4wLjBd
XQotICAgIFtbYF9QQV9SSVNDMV8xYF0gWzEuMS4wXV0KLSAgICBbW2BfX0hQUEExMV9fYF0gWzEu
MS4wXV0KLSAgICBbW2BfX1BBNzEwMF9fYF0gWzEuMS4wXV0KLSAgICBbW2BfUEFfUklTQzJfMGBd
IFsyLjAuMF1dCi0gICAgW1tgX19SSVNDMl8wX19gXSBbMi4wLjBdXQotICAgIFtbYF9fSFBQQTIw
X19gXSBbMi4wLjBdXQotICAgIFtbYF9fUEE4MDAwX19gXSBbMi4wLjBdXQotICAgIF0KLSAqLwot
Ci0jZGVmaW5lIEJPT1NUX0FSQ0hfUEFSSVNDIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJ
TEFCTEUKLQotI2lmIGRlZmluZWQoX19ocHBhX18pIHx8IGRlZmluZWQoX19ocHBhKSB8fCBkZWZp
bmVkKF9fSFBQQV9fKQotIyAgIHVuZGVmIEJPT1NUX0FSQ0hfUEFSSVNDCi0jICAgaWYgIWRlZmlu
ZWQoQk9PU1RfQVJDSF9QQVJJU0MpICYmIChkZWZpbmVkKF9QQV9SSVNDMV8wKSkKLSMgICAgICAg
ZGVmaW5lIEJPT1NUX0FSQ0hfUEFSSVNDIEJPT1NUX1ZFUlNJT05fTlVNQkVSKDEsMCwwKQotIyAg
IGVuZGlmCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfQVJDSF9QQVJJU0MpICYmIChkZWZpbmVkKF9Q
QV9SSVNDMV8xKSB8fCBkZWZpbmVkKF9fSFBQQTExX18pIHx8IGRlZmluZWQoX19QQTcxMDBfXykp
Ci0jICAgICAgIGRlZmluZSBCT09TVF9BUkNIX1BBUklTQyBCT09TVF9WRVJTSU9OX05VTUJFUigx
LDEsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0FSQ0hfUEFSSVNDKSAmJiAo
ZGVmaW5lZChfUEFfUklTQzJfMCkgfHwgZGVmaW5lZChfX1JJU0MyXzBfXykgfHwgZGVmaW5lZChf
X0hQUEEyMF9fKSB8fCBkZWZpbmVkKF9fUEE4MDAwX18pKQotIyAgICAgICBkZWZpbmUgQk9PU1Rf
QVJDSF9QQVJJU0MgQk9PU1RfVkVSU0lPTl9OVU1CRVIoMiwwLDApCi0jICAgZW5kaWYKLSMgICBp
ZiAhZGVmaW5lZChCT09TVF9BUkNIX1BBUklTQykKLSMgICAgICAgZGVmaW5lIEJPT1NUX0FSQ0hf
UEFSSVNDIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotIyAgIGVuZGlmCi0jZW5kaWYK
LQotI2lmIEJPT1NUX0FSQ0hfUEFSSVNDCi0jICAgZGVmaW5lIEJPT1NUX0FSQ0hfUEFSSVNDX0FW
QUlMQUJMRQotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfQVJDSF9QQVJJU0NfTkFNRSAiSFAvUEEg
UklTQyIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4K
LUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQVJDSF9QQVJJU0MsQk9PU1RfQVJDSF9Q
QVJJU0NfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUvcHBjLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL3BwYy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGM1N2M5MWYyYzA3NGQzNDc2ZDVkOGJiZGJhNjIzMGU3
YjM3MjhmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1
cmUvcHBjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJl
bmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQot
Ki8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfQVJDSElURUNUVVJFX1BQQ19ICi0jZGVmaW5lIEJP
T1NUX1BSRURFRl9BUkNISVRFQ1RVUkVfUFBDX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92
ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAot
W2hlYWRpbmcgYEJPT1NUX0FSQ0hfUFBDYF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93
aWtpL1Bvd2VyUEMgUG93ZXJQQ10gYXJjaGl0ZWN0dXJlLgotCi1bdGFibGUKLSAgICBbW19fcHJl
ZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fcG93ZXJwY2Bd
IFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tgX19wb3dlcnBjX19gXSBbX19wcmVkZWZf
ZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fUE9XRVJQQ19fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9f
XV0KLSAgICBbW2BfX3BwY19fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfTV9Q
UENgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9BUkNIX1BQQ2BdIFtfX3ByZWRl
Zl9kZXRlY3Rpb25fX11dCi0gICAgW1tgX19QUENHRUNLT19fYF0gW19fcHJlZGVmX2RldGVjdGlv
bl9fXV0KLSAgICBbW2BfX1BQQ0JST0FEV0FZX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQot
ICAgIFtbYF9YRU5PTmBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BfX3BwYzYw
MV9fYF0gWzYuMS4wXV0KLSAgICBbW2BfQVJDSF82MDFgXSBbNi4xLjBdXQotICAgIFtbYF9fcHBj
NjAzX19gXSBbNi4zLjBdXQotICAgIFtbYF9BUkNIXzYwM2BdIFs2LjMuMF1dCi0gICAgW1tgX19w
cGM2MDRfX2BdIFs2LjQuMF1dCi0gICAgW1tgX19wcGM2MDRfX2BdIFs2LjQuMF1dCi0gICAgXQot
ICovCi0KLSNkZWZpbmUgQk9PU1RfQVJDSF9QUEMgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FW
QUlMQUJMRQotCi0jaWYgZGVmaW5lZChfX3Bvd2VycGMpIHx8IGRlZmluZWQoX19wb3dlcnBjX18p
IHx8IFwKLSAgICBkZWZpbmVkKF9fUE9XRVJQQ19fKSB8fCBkZWZpbmVkKF9fcHBjX18pIHx8IFwK
LSAgICBkZWZpbmVkKF9NX1BQQykgfHwgZGVmaW5lZChfQVJDSF9QUEMpIHx8IFwKLSAgICBkZWZp
bmVkKF9fUFBDR0VDS09fXykgfHwgZGVmaW5lZChfX1BQQ0JST0FEV0FZX18pIHx8IFwKLSAgICBk
ZWZpbmVkKF9YRU5PTikKLSMgICB1bmRlZiBCT09TVF9BUkNIX1BQQwotIyAgIGlmICFkZWZpbmVk
IChCT09TVF9BUkNIX1BQQykgJiYgKGRlZmluZWQoX19wcGM2MDFfXykgfHwgZGVmaW5lZChfQVJD
SF82MDEpKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQVJDSF9QUEMgQk9PU1RfVkVSU0lPTl9OVU1C
RVIoNiwxLDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZCAoQk9PU1RfQVJDSF9QUEMpICYm
IChkZWZpbmVkKF9fcHBjNjAzX18pIHx8IGRlZmluZWQoX0FSQ0hfNjAzKSkKLSMgICAgICAgZGVm
aW5lIEJPT1NUX0FSQ0hfUFBDIEJPT1NUX1ZFUlNJT05fTlVNQkVSKDYsMywwKQotIyAgIGVuZGlm
Ci0jICAgaWYgIWRlZmluZWQgKEJPT1NUX0FSQ0hfUFBDKSAmJiAoZGVmaW5lZChfX3BwYzYwNF9f
KSB8fCBkZWZpbmVkKF9fcHBjNjA0X18pKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQVJDSF9QUEMg
Qk9PU1RfVkVSU0lPTl9OVU1CRVIoNiw0LDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZCAo
Qk9PU1RfQVJDSF9QUEMpCi0jICAgICAgIGRlZmluZSBCT09TVF9BUkNIX1BQQyBCT09TVF9WRVJT
SU9OX05VTUJFUl9BVkFJTEFCTEUKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNpZiBCT09TVF9BUkNI
X1BQQwotIyAgIGRlZmluZSBCT09TVF9BUkNIX1BQQ19BVkFJTEFCTEUKLSNlbmRpZgotCi0jZGVm
aW5lIEJPT1NUX0FSQ0hfUFBDX05BTUUgIlBvd2VyUEMiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8
Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJP
T1NUX0FSQ0hfUFBDLEJPT1NUX0FSQ0hfUFBDX05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL3B5cmFt
aWQuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9h
cmNoaXRlY3R1cmUvcHlyYW1pZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjEz
MjUzODA3YTgxYmFlZGE2YmU2NWFmN2RmZjc3ODRmYzBlNzRhLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUvcHlyYW1pZC5oCisrKyAvZGV2L251bGwK
QEAgLTEsNDIgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDExLTIwMTUKLURp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4K
LShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJF
REVGX0FSQ0hJVEVDVFVSRV9QWVJBTUlEX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0FSQ0hJVEVD
VFVSRV9QWVJBTUlEX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5o
PgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NU
X0FSQ0hfUFlSQU1JRGBdCi0KLVB5cmFtaWQgOTgxMCBhcmNoaXRlY3R1cmUuCi0KLVt0YWJsZQot
ICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tg
cHlyYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09T
VF9BUkNIX1BZUkFNSUQgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYg
ZGVmaW5lZChweXIpCi0jICAgdW5kZWYgQk9PU1RfQVJDSF9QWVJBTUlECi0jICAgZGVmaW5lIEJP
T1NUX0FSQ0hfUFlSQU1JRCBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSNlbmRpZgot
Ci0jaWYgQk9PU1RfQVJDSF9QWVJBTUlECi0jICAgZGVmaW5lIEJPT1NUX0FSQ0hfUFlSQU1JRF9B
VkFJTEFCTEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0FSQ0hfUFlSQU1JRF9OQU1FICJQeXJh
bWlkIDk4MTAiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0
Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0FSQ0hfUFlSQU1JRCxCT09TVF9B
UkNIX1BZUkFNSURfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUvcnM2ay5oIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2FyY2hpdGVjdHVyZS9yczZrLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNmU5YjZiNTM0MmJhMTg2MDYxOGJmMzgw
NzcyOWJmMzMxZTJmNzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2Fy
Y2hpdGVjdHVyZS9yczZrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotQ29w
eXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBM
SUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8x
XzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfQVJDSElURUNUVVJFX1JTNktfSAot
I2RlZmluZSBCT09TVF9QUkVERUZfQVJDSElURUNUVVJFX1JTNktfSAotCi0jaW5jbHVkZSA8Ym9v
c3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21ha2Uu
aD4KLQotLypgCi1baGVhZGluZyBgQk9PU1RfQVJDSF9SUzYwMDBgXQotCi1bQGh0dHA6Ly9lbi53
aWtpcGVkaWEub3JnL3dpa2kvUlMvNjAwMCBSUy82MDAwXSBhcmNoaXRlY3R1cmUuCi0KLVt0YWJs
ZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAg
W1tgX19USFdfUlM2MDAwYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfSUJNUjJg
XSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9QT1dFUmBdIFtfX3ByZWRlZl9kZXRl
Y3Rpb25fX11dCi0gICAgW1tgX0FSQ0hfUFdSYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAg
ICBbW2BfQVJDSF9QV1IyYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBdCi0gKi8KLQot
I2RlZmluZSBCT09TVF9BUkNIX1JTNjAwMCBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxB
QkxFCi0KLSNpZiBkZWZpbmVkKF9fVEhXX1JTNjAwMCkgfHwgZGVmaW5lZChfSUJNUjIpIHx8IFwK
LSAgICBkZWZpbmVkKF9QT1dFUikgfHwgZGVmaW5lZChfQVJDSF9QV1IpIHx8IFwKLSAgICBkZWZp
bmVkKF9BUkNIX1BXUjIpCi0jICAgdW5kZWYgQk9PU1RfQVJDSF9SUzYwMDAKLSMgICBkZWZpbmUg
Qk9PU1RfQVJDSF9SUzYwMDAgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jZW5kaWYK
LQotI2lmIEJPT1NUX0FSQ0hfUlM2MDAwCi0jICAgZGVmaW5lIEJPT1NUX0FSQ0hfUlM2MDAwX0FW
QUlMQUJMRQotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfQVJDSF9SUzYwMDBfTkFNRSAiUlMvNjAw
MCIKLQotI2RlZmluZSBCT09TVF9BUkNIX1BXUiBCT09TVF9BUkNIX1JTNjAwMAotCi0jaWYgQk9P
U1RfQVJDSF9QV1IKLSMgICBkZWZpbmUgQk9PU1RfQVJDSF9QV1JfQVZBSUxBQkxFCi0jZW5kaWYK
LQotI2RlZmluZSBCT09TVF9BUkNIX1BXUl9OQU1FIEJPT1NUX0FSQ0hfUlM2MDAwX05BTUUKLQot
I2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BS
RURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQVJDSF9SUzYwMDAsQk9PU1RfQVJDSF9SUzYwMDBfTkFN
RSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3ByZWRlZi9hcmNoaXRlY3R1cmUvc3BhcmMuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUvc3BhcmMuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYTg5YTUxMDBiOGZmMTNlN2NiYTkxNDU5YjFmMGZmMzU5OTI3N2U0
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL3Nw
YXJjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUg
Uml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50
eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8K
LQotI2lmbmRlZiBCT09TVF9QUkVERUZfQVJDSElURUNUVVJFX1NQQVJDX0gKLSNkZWZpbmUgQk9P
U1RfUFJFREVGX0FSQ0hJVEVDVFVSRV9TUEFSQ19ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYv
dmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAK
LVtoZWFkaW5nIGBCT09TVF9BUkNIX1NQQVJDYF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9y
Zy93aWtpL1NQQVJDIFNQQVJDXSBhcmNoaXRlY3R1cmUuCi0KLVt0YWJsZQotICAgIFtbX19wcmVk
ZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19zcGFyY19fYF0g
W19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfX3NwYXJjYF0gW19fcHJlZGVmX2RldGVj
dGlvbl9fXV0KLQotICAgIFtbYF9fc3BhcmN2OWBdIFs5LjAuMF1dCi0gICAgW1tgX19zcGFyY3Y4
YF0gWzguMC4wXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9BUkNIX1NQQVJDIEJPT1NU
X1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmluZWQoX19zcGFyY19fKSB8
fCBkZWZpbmVkKF9fc3BhcmMpCi0jICAgdW5kZWYgQk9PU1RfQVJDSF9TUEFSQwotIyAgIGlmICFk
ZWZpbmVkKEJPT1NUX0FSQ0hfU1BBUkMpICYmIGRlZmluZWQoX19zcGFyY3Y5KQotIyAgICAgICBk
ZWZpbmUgQk9PU1RfQVJDSF9TUEFSQyBCT09TVF9WRVJTSU9OX05VTUJFUig5LDAsMCkKLSMgICBl
bmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0FSQ0hfU1BBUkMpICYmIGRlZmluZWQoX19zcGFy
Y3Y4KQotIyAgICAgICBkZWZpbmUgQk9PU1RfQVJDSF9TUEFSQyBCT09TVF9WRVJTSU9OX05VTUJF
Uig4LDAsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0FSQ0hfU1BBUkMpCi0j
ICAgICAgIGRlZmluZSBCT09TVF9BUkNIX1NQQVJDIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlM
QUJMRQotIyAgIGVuZGlmCi0jZW5kaWYKLQotI2lmIEJPT1NUX0FSQ0hfU1BBUkMKLSMgICBkZWZp
bmUgQk9PU1RfQVJDSF9TUEFSQ19BVkFJTEFCTEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0FS
Q0hfU1BBUkNfTkFNRSAiU1BBUkMiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVm
L2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0FSQ0hfU1BB
UkMsQk9PU1RfQVJDSF9TUEFSQ19OQU1FKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2FyY2hpdGVjdHVyZS9zdXBlcmguaCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1
cmUvc3VwZXJoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMDUyOWU1ZTAzZmM1
ZDNjYTRjOWI5YmFhNjMzNGYwODExMjI4YWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcHJlZGVmL2FyY2hpdGVjdHVyZS9zdXBlcmguaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICsw
LDAgQEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1
bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29t
cGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0
Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9BUkNISVRF
Q1RVUkVfU1VQRVJIX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0FSQ0hJVEVDVFVSRV9TVVBFUkhf
SAotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8
Ym9vc3QvcHJlZGVmL21ha2UuaD4KLQotLypgCi1baGVhZGluZyBgQk9PU1RfQVJDSF9TSGBdCi0K
LVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdXBlckggU3VwZXJIXSBhcmNoaXRlY3R1
cmU6Ci1JZiBhdmFpbGFibGUgdmVyc2lvbnMgXFsxLTVcXSBhcmUgc3BlY2lmaWNhbGx5IGRldGVj
dGVkLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lv
bl9fXV0KLQotICAgIFtbYF9fc2hfX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBb
W2BfX1NINV9fYF0gWzUuMC4wXV0KLSAgICBbW2BfX1NINF9fYF0gWzQuMC4wXV0KLSAgICBbW2Bf
X3NoM19fYF0gWzMuMC4wXV0KLSAgICBbW2BfX1NIM19fYF0gWzMuMC4wXV0KLSAgICBbW2BfX3No
Ml9fYF0gWzIuMC4wXV0KLSAgICBbW2BfX3NoMV9fYF0gWzEuMC4wXV0KLSAgICBdCi0gKi8KLQot
I2RlZmluZSBCT09TVF9BUkNIX1NIIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUK
LQotI2lmIGRlZmluZWQoX19zaF9fKQotIyAgIHVuZGVmIEJPT1NUX0FSQ0hfU0gKLSMgICBpZiAh
ZGVmaW5lZChCT09TVF9BUkNIX1NIKSAmJiAoZGVmaW5lZChfX1NINV9fKSkKLSMgICAgICAgZGVm
aW5lIEJPT1NUX0FSQ0hfU0ggQk9PU1RfVkVSU0lPTl9OVU1CRVIoNSwwLDApCi0jICAgZW5kaWYK
LSMgICBpZiAhZGVmaW5lZChCT09TVF9BUkNIX1NIKSAmJiAoZGVmaW5lZChfX1NINF9fKSkKLSMg
ICAgICAgZGVmaW5lIEJPT1NUX0FSQ0hfU0ggQk9PU1RfVkVSU0lPTl9OVU1CRVIoNCwwLDApCi0j
ICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9BUkNIX1NIKSAmJiAoZGVmaW5lZChfX3No
M19fKSB8fCBkZWZpbmVkKF9fU0gzX18pKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQVJDSF9TSCBC
T09TVF9WRVJTSU9OX05VTUJFUigzLDAsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJP
T1NUX0FSQ0hfU0gpICYmIChkZWZpbmVkKF9fc2gyX18pKQotIyAgICAgICBkZWZpbmUgQk9PU1Rf
QVJDSF9TSCBCT09TVF9WRVJTSU9OX05VTUJFUigyLDAsMCkKLSMgICBlbmRpZgotIyAgIGlmICFk
ZWZpbmVkKEJPT1NUX0FSQ0hfU0gpICYmIChkZWZpbmVkKF9fc2gxX18pKQotIyAgICAgICBkZWZp
bmUgQk9PU1RfQVJDSF9TSCBCT09TVF9WRVJTSU9OX05VTUJFUigxLDAsMCkKLSMgICBlbmRpZgot
IyAgIGlmICFkZWZpbmVkKEJPT1NUX0FSQ0hfU0gpCi0jICAgICAgIGRlZmluZSBCT09TVF9BUkNI
X1NIIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotIyAgIGVuZGlmCi0jZW5kaWYKLQot
I2lmIEJPT1NUX0FSQ0hfU0gKLSMgICBkZWZpbmUgQk9PU1RfQVJDSF9TSF9BVkFJTEFCTEUKLSNl
bmRpZgotCi0jZGVmaW5lIEJPT1NUX0FSQ0hfU0hfTkFNRSAiU3VwZXJIIgotCi0jZW5kaWYKLQot
I2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xB
UkVfVEVTVChCT09TVF9BUkNIX1NILEJPT1NUX0FSQ0hfU0hfTkFNRSkKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1
cmUvc3lzMzcwLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9w
cmVkZWYvYXJjaGl0ZWN0dXJlL3N5czM3MC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjZmQ4NWRjODAzYjgwMmU2OGY2ZjBkZjc4Y2E4Yzg2MjM4MTFiNWMwLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUvc3lzMzcwLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAx
NQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24g
MS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAot
aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09T
VF9QUkVERUZfQVJDSElURUNUVVJFX1NZUzM3MF9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9BUkNI
SVRFQ1RVUkVfU1lTMzcwX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJl
ci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJP
T1NUX0FSQ0hfU1lTMzcwYF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5c3Rl
bS8zNzAgU3lzdGVtLzM3MF0gYXJjaGl0ZWN0dXJlLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVm
X3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fMzcwX19gXSBbX19w
cmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fVEhXXzM3MF9fYF0gW19fcHJlZGVmX2RldGVj
dGlvbl9fXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9BUkNIX1NZUzM3MCBCT09TVF9W
RVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBkZWZpbmVkKF9fMzcwX18pIHx8IGRl
ZmluZWQoX19USFdfMzcwX18pCi0jICAgdW5kZWYgQk9PU1RfQVJDSF9TWVMzNzAKLSMgICBkZWZp
bmUgQk9PU1RfQVJDSF9TWVMzNzAgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jZW5k
aWYKLQotI2lmIEJPT1NUX0FSQ0hfU1lTMzcwCi0jICAgZGVmaW5lIEJPT1NUX0FSQ0hfU1lTMzcw
X0FWQUlMQUJMRQotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfQVJDSF9TWVMzNzBfTkFNRSAiU3lz
dGVtLzM3MCIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3Qu
aD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQVJDSF9TWVMzNzAsQk9PU1RfQVJD
SF9TWVMzNzBfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUvc3lzMzkwLmggYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL3N5czM5MC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2FmZjZhY2Q2M2Y2NTY2YTM3YzU0OTlk
NTAyODg4MDczZDFiZWFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9h
cmNoaXRlY3R1cmUvc3lzMzkwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgot
Q29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJv
b3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfQVJDSElURUNUVVJFX1NZUzM5
MF9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9BUkNISVRFQ1RVUkVfU1lTMzkwX0gKLQotI2luY2x1
ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRl
Zi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0FSQ0hfU1lTMzkwYF0KLQotW0BodHRw
Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5c3RlbS8zOTAgU3lzdGVtLzM5MF0gYXJjaGl0ZWN0
dXJlLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lv
bl9fXV0KLQotICAgIFtbYF9fczM5MF9fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBb
W2BfX3MzOTB4X19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIF0KLSAqLwotCi0jZGVm
aW5lIEJPT1NUX0FSQ0hfU1lTMzkwIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUK
LQotI2lmIGRlZmluZWQoX19zMzkwX18pIHx8IGRlZmluZWQoX19zMzkweF9fKQotIyAgIHVuZGVm
IEJPT1NUX0FSQ0hfU1lTMzkwCi0jICAgZGVmaW5lIEJPT1NUX0FSQ0hfU1lTMzkwIEJPT1NUX1ZF
UlNJT05fTlVNQkVSX0FWQUlMQUJMRQotI2VuZGlmCi0KLSNpZiBCT09TVF9BUkNIX1NZUzM5MAot
IyAgIGRlZmluZSBCT09TVF9BUkNIX1NZUzM5MF9BVkFJTEFCTEUKLSNlbmRpZgotCi0jZGVmaW5l
IEJPT1NUX0FSQ0hfU1lTMzkwX05BTUUgIlN5c3RlbS8zOTAiCi0KLSNlbmRpZgotCi0jaW5jbHVk
ZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNU
KEJPT1NUX0FSQ0hfU1lTMzkwLEJPT1NUX0FSQ0hfU1lTMzkwX05BTUUpCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0
dXJlL3g4Ni5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJl
ZGVmL2FyY2hpdGVjdHVyZS94ODYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVm
M2VmNDVlZmQ1MGU3NzA1MzQyNmIzZWQ3NWI1N2Q3Mjc1YjNhYS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL3g4Ni5oCisrKyAvZGV2L251bGwKQEAg
LTEsMzggKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShT
ZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpbmNsdWRlIDxib29zdC9wcmVk
ZWYvYXJjaGl0ZWN0dXJlL3g4Ni8zMi5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9hcmNoaXRl
Y3R1cmUveDg2LzY0Lmg+Ci0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0FSQ0hJVEVDVFVSRV9YODZf
SAotI2RlZmluZSBCT09TVF9QUkVERUZfQVJDSElURUNUVVJFX1g4Nl9ICi0KLS8qYAotW2hlYWRp
bmcgYEJPT1NUX0FSQ0hfWDg2YF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1g4
NiBJbnRlbCB4ODZdIGFyY2hpdGVjdHVyZS4gVGhpcyBpcwotYSBjYXRlZ29yeSB0byBpbmRpY2F0
ZSB0aGF0IGVpdGhlciBgQk9PU1RfQVJDSF9YODZfMzJgIG9yCi1gQk9PU1RfQVJDSF9YODZfNjRg
IGlzIGRldGVjdGVkLgotICovCi0KLSNkZWZpbmUgQk9PU1RfQVJDSF9YODYgQk9PU1RfVkVSU0lP
Tl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgQk9PU1RfQVJDSF9YODZfMzIgfHwgQk9PU1Rf
QVJDSF9YODZfNjQKLSMgICB1bmRlZiBCT09TVF9BUkNIX1g4NgotIyAgIGRlZmluZSBCT09TVF9B
UkNIX1g4NiBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSNlbmRpZgotCi0jaWYgQk9P
U1RfQVJDSF9YODYKLSMgICBkZWZpbmUgQk9PU1RfQVJDSF9YODZfQVZBSUxBQkxFCi0jZW5kaWYK
LQotI2RlZmluZSBCT09TVF9BUkNIX1g4Nl9OQU1FICJJbnRlbCB4ODYiCi0KLSNlbmRpZgotCi0j
aW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFS
RV9URVNUKEJPT1NUX0FSQ0hfWDg2LEJPT1NUX0FSQ0hfWDg2X05BTUUpCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0
dXJlL3g4Ni8zMi5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
cHJlZGVmL2FyY2hpdGVjdHVyZS94ODYvMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTdmYmZmNTU0YThhYzUzZGFjNmUzOWYyZTg5MjEwNjkyYmQ3N2I3My4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL3g4Ni8zMi5oCisrKyAvZGV2
L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIw
MTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQK
LWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9P
U1RfUFJFREVGX0FSQ0hJVEVDVFVSRV9YODZfMzJfSAotI2RlZmluZSBCT09TVF9QUkVERUZfQVJD
SElURUNUVVJFX1g4Nl8zMl9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1i
ZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBC
T09TVF9BUkNIX1g4Nl8zMmBdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9YODYg
SW50ZWwgeDg2XSBhcmNoaXRlY3R1cmU6Ci1JZiBhdmFpbGFibGUgdmVyc2lvbnMgXFszLTZcXSBh
cmUgc3BlY2lmaWNhbGx5IGRldGVjdGVkLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJv
bF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYGkzODZgXSBbX19wcmVkZWZfZGV0
ZWN0aW9uX19dXQotICAgIFtbYF9faTM4Nl9fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAg
ICBbW2BfX2k0ODZfX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tgX19pNTg2X19g
XSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9faTY4Nl9fYF0gW19fcHJlZGVmX2Rl
dGVjdGlvbl9fXV0KLSAgICBbW2BfX2kzODZgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAg
IFtbYF9NX0lYODZgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9YODZfYF0gW19f
cHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfX1RIV19JTlRFTF9fYF0gW19fcHJlZGVmX2Rl
dGVjdGlvbl9fXV0KLSAgICBbW2BfX0k4Nl9fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAg
ICBbW2BfX0lOVEVMX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotCi0gICAgW1tgX19JODZf
X2BdIFtWLjAuMF1dCi0gICAgW1tgX01fSVg4NmBdIFtWLjAuMF1dCi0gICAgW1tgX19pNjg2X19g
XSBbNi4wLjBdXQotICAgIFtbYF9faTU4Nl9fYF0gWzUuMC4wXV0KLSAgICBbW2BfX2k0ODZfX2Bd
IFs0LjAuMF1dCi0gICAgW1tgX19pMzg2X19gXSBbMy4wLjBdXQotICAgIF0KLSAqLwotCi0jZGVm
aW5lIEJPT1NUX0FSQ0hfWDg2XzMyIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUK
LQotI2lmIGRlZmluZWQoaTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgXAotICAgIGRlZmlu
ZWQoX19pNDg2X18pIHx8IGRlZmluZWQoX19pNTg2X18pIHx8IFwKLSAgICBkZWZpbmVkKF9faTY4
Nl9fKSB8fCBkZWZpbmVkKF9faTM4NikgfHwgXAotICAgIGRlZmluZWQoX01fSVg4NikgfHwgZGVm
aW5lZChfWDg2XykgfHwgXAotICAgIGRlZmluZWQoX19USFdfSU5URUxfXykgfHwgZGVmaW5lZChf
X0k4Nl9fKSB8fCBcCi0gICAgZGVmaW5lZChfX0lOVEVMX18pCi0jICAgdW5kZWYgQk9PU1RfQVJD
SF9YODZfMzIKLSMgICBpZiAhZGVmaW5lZChCT09TVF9BUkNIX1g4Nl8zMikgJiYgZGVmaW5lZChf
X0k4Nl9fKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQVJDSF9YODZfMzIgQk9PU1RfVkVSU0lPTl9O
VU1CRVIoX19JODZfXywwLDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9BUkNI
X1g4Nl8zMikgJiYgZGVmaW5lZChfTV9JWDg2KQotIyAgICAgICBkZWZpbmUgQk9PU1RfQVJDSF9Y
ODZfMzIgQk9PU1RfUFJFREVGX01BS0VfMTBfVlYwMChfTV9JWDg2KQotIyAgIGVuZGlmCi0jICAg
aWYgIWRlZmluZWQoQk9PU1RfQVJDSF9YODZfMzIpICYmIGRlZmluZWQoX19pNjg2X18pCi0jICAg
ICAgIGRlZmluZSBCT09TVF9BUkNIX1g4Nl8zMiBCT09TVF9WRVJTSU9OX05VTUJFUig2LDAsMCkK
LSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0FSQ0hfWDg2XzMyKSAmJiBkZWZpbmVk
KF9faTU4Nl9fKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQVJDSF9YODZfMzIgQk9PU1RfVkVSU0lP
Tl9OVU1CRVIoNSwwLDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9BUkNIX1g4
Nl8zMikgJiYgZGVmaW5lZChfX2k0ODZfXykKLSMgICAgICAgZGVmaW5lIEJPT1NUX0FSQ0hfWDg2
XzMyIEJPT1NUX1ZFUlNJT05fTlVNQkVSKDQsMCwwKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmlu
ZWQoQk9PU1RfQVJDSF9YODZfMzIpICYmIGRlZmluZWQoX19pMzg2X18pCi0jICAgICAgIGRlZmlu
ZSBCT09TVF9BUkNIX1g4Nl8zMiBCT09TVF9WRVJTSU9OX05VTUJFUigzLDAsMCkKLSMgICBlbmRp
ZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0FSQ0hfWDg2XzMyKQotIyAgICAgICBkZWZpbmUgQk9P
U1RfQVJDSF9YODZfMzIgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgZW5kaWYK
LSNlbmRpZgotCi0jaWYgQk9PU1RfQVJDSF9YODZfMzIKLSMgICBkZWZpbmUgQk9PU1RfQVJDSF9Y
ODZfMzJfQVZBSUxBQkxFCi0jZW5kaWYKLQotI2RlZmluZSBCT09TVF9BUkNIX1g4Nl8zMl9OQU1F
ICJJbnRlbCB4ODYtMzIiCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvYXJjaGl0ZWN0dXJlL3g4
Ni5oPgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgot
Qk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9BUkNIX1g4Nl8zMixCT09TVF9BUkNIX1g4
Nl8zMl9OQU1FKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcHJlZGVmL2FyY2hpdGVjdHVyZS94ODYvNjQuaCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUveDg2LzY0LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NjFjOTI1OTZjOGM5YTdjM2FkNTEzZGU0MTVj
N2RlZjk4Y2EwOWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2FyY2hp
dGVjdHVyZS94ODYvNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi1Db3B5
cmlnaHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9BUkNISVRFQ1RVUkVfWDg2XzY0X0gK
LSNkZWZpbmUgQk9PU1RfUFJFREVGX0FSQ0hJVEVDVFVSRV9YODZfNjRfSAotCi0jaW5jbHVkZSA8
Ym9vc3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21h
a2UuaD4KLQotLypgCi1baGVhZGluZyBgQk9PU1RfQVJDSF9YODZfNjRgXQotCi1bQGh0dHA6Ly9l
bi53aWtpcGVkaWEub3JnL3dpa2kvSWE2NCBJbnRlbCBJQS02NF0gYXJjaGl0ZWN0dXJlLgotCi1b
dGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQot
ICAgIFtbYF9feDg2XzY0YF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfX3g4Nl82
NF9fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfX2FtZDY0X19gXSBbX19wcmVk
ZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fYW1kNjRgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19d
XQotICAgIFtbYF9NX1g2NGBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgXQotICovCi0K
LSNkZWZpbmUgQk9PU1RfQVJDSF9YODZfNjQgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlM
QUJMRQotCi0jaWYgZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBc
Ci0gICAgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoX19hbWQ2NCkgfHwgXAotICAgIGRl
ZmluZWQoX01fWDY0KQotIyAgIHVuZGVmIEJPT1NUX0FSQ0hfWDg2XzY0Ci0jICAgZGVmaW5lIEJP
T1NUX0FSQ0hfWDg2XzY0IEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotI2VuZGlmCi0K
LSNpZiBCT09TVF9BUkNIX1g4Nl82NAotIyAgIGRlZmluZSBCT09TVF9BUkNIX1g4Nl82NF9BVkFJ
TEFCTEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0FSQ0hfWDg2XzY0X05BTUUgIkludGVsIHg4
Ni02NCIKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUveDg2Lmg+Ci0KLSNl
bmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVE
RUZfREVDTEFSRV9URVNUKEJPT1NUX0FSQ0hfWDg2XzY0LEJPT1NUX0FSQ0hfWDg2XzY0X05BTUUp
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9w
cmVkZWYvYXJjaGl0ZWN0dXJlL3ouaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUvei5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzZDIxOGFhMjY0NDM5M2EwYmZiZjljOGE3YWMyZjcwYzUxNmE0Y2VmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUvei5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIw
MTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQK
LWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9P
U1RfUFJFREVGX0FSQ0hJVEVDVFVSRV9aX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0FSQ0hJVEVD
VFVSRV9aX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2lu
Y2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0FSQ0hf
WmBdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9aL0FyY2hpdGVjdHVyZSB6L0Fy
Y2hpdGVjdHVyZV0gYXJjaGl0ZWN0dXJlLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJv
bF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fU1lTQ19aQVJDSF9fYF0gW19f
cHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9BUkNIX1og
Qk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgZGVmaW5lZChfX1NZU0Nf
WkFSQ0hfXykKLSMgICB1bmRlZiBCT09TVF9BUkNIX1oKLSMgICBkZWZpbmUgQk9PU1RfQVJDSF9a
IEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotI2VuZGlmCi0KLSNpZiBCT09TVF9BUkNI
X1oKLSMgICBkZWZpbmUgQk9PU1RfQVJDSF9aX0FWQUlMQUJMRQotI2VuZGlmCi0KLSNkZWZpbmUg
Qk9PU1RfQVJDSF9aX05BTUUgInovQXJjaGl0ZWN0dXJlIgotCi0jZW5kaWYKLQotI2luY2x1ZGUg
PGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChC
T09TVF9BUkNIX1osQk9PU1RfQVJDSF9aX05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIuaCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWE0YzUyN2FiMzdhNjk3Mzk2MzRjN2FlYzE1N2M5
Y2RlZmQ1Y2QyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJp
dmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNl
bnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0
IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0K
LSNpZiAhZGVmaW5lZChCT09TVF9QUkVERUZfQ09NUElMRVJfSCkgfHwgZGVmaW5lZChCT09TVF9Q
UkVERUZfSU5URVJOQUxfR0VORVJBVEVfVEVTVFMpCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9DT01Q
SUxFUl9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9DT01QSUxFUl9ICi0jZW5kaWYKLQotI2luY2x1
ZGUgPGJvb3N0L3ByZWRlZi9jb21waWxlci9ib3JsYW5kLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJl
ZGVmL2NvbXBpbGVyL2NsYW5nLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2NvbXBpbGVyL2Nv
bWVhdS5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9jb21waWxlci9jb21wYXEuaD4KLSNpbmNs
dWRlIDxib29zdC9wcmVkZWYvY29tcGlsZXIvZGlhYi5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRl
Zi9jb21waWxlci9kaWdpdGFsbWFycy5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9jb21waWxl
ci9kaWdudXMuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvY29tcGlsZXIvZWRnLmg+Ci0jaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL2NvbXBpbGVyL2Vrb3BhdGguaD4KLSNpbmNsdWRlIDxib29zdC9w
cmVkZWYvY29tcGlsZXIvZ2NjX3htbC5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9jb21waWxl
ci9nY2MuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvY29tcGlsZXIvZ3JlZW5oaWxscy5oPgot
I2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9jb21waWxlci9ocF9hY2MuaD4KLSNpbmNsdWRlIDxib29z
dC9wcmVkZWYvY29tcGlsZXIvaWFyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2NvbXBpbGVy
L2libS5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9jb21waWxlci9pbnRlbC5oPgotI2luY2x1
ZGUgPGJvb3N0L3ByZWRlZi9jb21waWxlci9rYWkuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYv
Y29tcGlsZXIvbGx2bS5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9jb21waWxlci9tZXRhd2Fy
ZS5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9jb21waWxlci9tZXRyb3dlcmtzLmg+Ci0jaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL2NvbXBpbGVyL21pY3JvdGVjLmg+Ci0jaW5jbHVkZSA8Ym9vc3Qv
cHJlZGVmL2NvbXBpbGVyL21wdy5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9jb21waWxlci9w
YWxtLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2NvbXBpbGVyL3BnaS5oPgotI2luY2x1ZGUg
PGJvb3N0L3ByZWRlZi9jb21waWxlci9zZ2lfbWlwc3Byby5oPgotI2luY2x1ZGUgPGJvb3N0L3By
ZWRlZi9jb21waWxlci9zdW5wcm8uaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvY29tcGlsZXIv
dGVuZHJhLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2NvbXBpbGVyL3Zpc3VhbGMuaD4KLSNp
bmNsdWRlIDxib29zdC9wcmVkZWYvY29tcGlsZXIvd2F0Y29tLmg+Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2Nv
bXBpbGVyL2JvcmxhbmQuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3ByZWRlZi9jb21waWxlci9ib3JsYW5kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDM2NzdjY2E3ZmRhNmIxNWFmMzlmZjAxYzZlMGZiZTMzMDAxNzQ5MDkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVyL2JvcmxhbmQuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1
Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1o
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NU
X1BSRURFRl9DT01QSUxFUl9CT1JMQU5EX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0NPTVBJTEVS
X0JPUkxBTkRfSAotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0j
aW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4KLQotLypgCi1baGVhZGluZyBgQk9PU1RfQ09N
UF9CT1JMQU5EYF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NfcGx1c19wbHVz
X2J1aWxkZXIgQm9ybGFuZCBDKytdIGNvbXBpbGVyLgotVmVyc2lvbiBudW1iZXIgYXZhaWxhYmxl
IGFzIG1ham9yLCBtaW5vciwgYW5kIHBhdGNoLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5
bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fQk9STEFORENfX2BdIFtf
X3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tgX19DT0RFR0VBUkNfX2BdIFtfX3ByZWRlZl9k
ZXRlY3Rpb25fX11dCi0KLSAgICBbW2BfX0JPUkxBTkRDX19gXSBbVi5SLlBdXQotICAgIFtbYF9f
Q09ERUdFQVJDX19gXSBbVi5SLlBdXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0NPTVBf
Qk9STEFORCBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBkZWZpbmVk
KF9fQk9STEFORENfXykgfHwgZGVmaW5lZChfX0NPREVHRUFSQ19fKQotIyAgIGlmICFkZWZpbmVk
KEJPT1NUX0NPTVBfQk9STEFORF9ERVRFQ1RJT04pICYmIChkZWZpbmVkKF9fQ09ERUdFQVJDX18p
KQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9CT1JMQU5EX0RFVEVDVElPTiBCT09TVF9QUkVE
RUZfTUFLRV8wWF9WVlJQKF9fQ09ERUdFQVJDX18pCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5l
ZChCT09TVF9DT01QX0JPUkxBTkRfREVURUNUSU9OKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09N
UF9CT1JMQU5EX0RFVEVDVElPTiBCT09TVF9QUkVERUZfTUFLRV8wWF9WVlJQKF9fQk9STEFORENf
XykKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBCT09TVF9DT01QX0JPUkxBTkRfREVURUNU
SU9OCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBfQk9STEFORF9BVkFJTEFCTEUKLSMgICBpZiBkZWZp
bmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfQ09NUF9ERVRFQ1RFRCkKLSMgICAgICAgZGVmaW5lIEJP
T1NUX0NPTVBfQk9STEFORF9FTVVMQVRFRCBCT09TVF9DT01QX0JPUkxBTkRfREVURUNUSU9OCi0j
ICAgZWxzZQotIyAgICAgICB1bmRlZiBCT09TVF9DT01QX0JPUkxBTkQKLSMgICAgICAgZGVmaW5l
IEJPT1NUX0NPTVBfQk9STEFORCBCT09TVF9DT01QX0JPUkxBTkRfREVURUNUSU9OCi0jICAgZW5k
aWYKLSMgICBpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL2NvbXBfZGV0ZWN0ZWQuaD4KLSNl
bmRpZgotCi0jZGVmaW5lIEJPT1NUX0NPTVBfQk9STEFORF9OQU1FICJCb3JsYW5kIEMrKyIKLQot
I2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BS
RURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9CT1JMQU5ELEJPT1NUX0NPTVBfQk9STEFORF9O
QU1FKQotCi0jaWZkZWYgQk9PU1RfQ09NUF9CT1JMQU5EX0VNVUxBVEVECi0jaW5jbHVkZSA8Ym9v
c3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NU
X0NPTVBfQk9STEFORF9FTVVMQVRFRCxCT09TVF9DT01QX0JPUkxBTkRfTkFNRSkKLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJl
ZGVmL2NvbXBpbGVyL2NsYW5nLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9wcmVkZWYvY29tcGlsZXIvY2xhbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNTY2NzhmZTZhNWUwZmFiODQwZTY4ZjkzMjM1MmM4MTUyYWMwYjY4NS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvY2xhbmcuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1
Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1o
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NU
X1BSRURFRl9DT01QSUxFUl9DTEFOR19ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9DT01QSUxFUl9D
TEFOR19ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNs
dWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9DT01QX0NM
QU5HYF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NsYW5nIENsYW5nXSBjb21w
aWxlci4KLVZlcnNpb24gbnVtYmVyIGF2YWlsYWJsZSBhcyBtYWpvciwgbWlub3IsIGFuZCBwYXRj
aC4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25f
X11dCi0KLSAgICBbW2BfX2NsYW5nX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotCi0gICAg
W1tgX19jbGFuZ19tYWpvcl9fYCwgYF9fY2xhbmdfbWlub3JfX2AsIGBfX2NsYW5nX3BhdGNobGV2
ZWxfX2BdIFtWLlIuUF1dCi0gICAgXQotICovCi0KLSNkZWZpbmUgQk9PU1RfQ09NUF9DTEFORyBC
T09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBkZWZpbmVkKF9fY2xhbmdf
XykKLSMgICBkZWZpbmUgQk9PU1RfQ09NUF9DTEFOR19ERVRFQ1RJT04gQk9PU1RfVkVSU0lPTl9O
VU1CRVIoX19jbGFuZ19tYWpvcl9fLF9fY2xhbmdfbWlub3JfXyxfX2NsYW5nX3BhdGNobGV2ZWxf
XykKLSNlbmRpZgotCi0jaWZkZWYgQk9PU1RfQ09NUF9DTEFOR19ERVRFQ1RJT04KLSMgICBpZiBk
ZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfQ09NUF9ERVRFQ1RFRCkKLSMgICAgICAgZGVmaW5l
IEJPT1NUX0NPTVBfQ0xBTkdfRU1VTEFURUQgQk9PU1RfQ09NUF9DTEFOR19ERVRFQ1RJT04KLSMg
ICBlbHNlCi0jICAgICAgIHVuZGVmIEJPT1NUX0NPTVBfQ0xBTkcKLSMgICAgICAgZGVmaW5lIEJP
T1NUX0NPTVBfQ0xBTkcgQk9PU1RfQ09NUF9DTEFOR19ERVRFQ1RJT04KLSMgICBlbmRpZgotIyAg
IGRlZmluZSBCT09TVF9DT01QX0NMQU5HX0FWQUlMQUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0L3By
ZWRlZi9kZXRhaWwvY29tcF9kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfQ09N
UF9DTEFOR19OQU1FICJDbGFuZyIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYv
ZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9DTEFO
RyxCT09TVF9DT01QX0NMQU5HX05BTUUpCi0KLSNpZmRlZiBCT09TVF9DT01QX0NMQU5HX0VNVUxB
VEVECi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZf
REVDTEFSRV9URVNUKEJPT1NUX0NPTVBfQ0xBTkdfRU1VTEFURUQsQk9PU1RfQ09NUF9DTEFOR19O
QU1FKQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvY29tZWF1LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvY29tZWF1LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YTQ1NjQ4OTYxMzY1NDIxMjY1MmIzMzRjOGU2MjFmMTAw
ODNiYmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVyL2Nv
bWVhdS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5l
IFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBM
aWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSov
Ci0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0NPTVBJTEVSX0NPTUVBVV9ICi0jZGVmaW5lIEJPT1NU
X1BSRURFRl9DT01QSUxFUl9DT01FQVVfSAotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNp
b25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4KLQotI2RlZmluZSBC
T09TVF9DT01QX0NPTU8gQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0vKmAK
LVtoZWFkaW5nIGBCT09TVF9DT01QX0NPTU9gXQotCi1bQGh0dHA6Ly9lbi53aWtpcGVkaWEub3Jn
L3dpa2kvQ29tZWF1X0MvQyUyQiUyQiBDb21lYXUgQysrXSBjb21waWxlci4KLVZlcnNpb24gbnVt
YmVyIGF2YWlsYWJsZSBhcyBtYWpvciwgbWlub3IsIGFuZCBwYXRjaC4KLQotW3RhYmxlCi0gICAg
W1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfX0NP
TU9fX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BfX0NPTU9fVkVSU0lPTl9f
YF0gW1YuUi5QXV0KLSAgICBdCi0gKi8KLQotI2lmIGRlZmluZWQoX19DT01PX18pCi0jICAgaWYg
IWRlZmluZWQoQk9PU1RfQ09NUF9DT01PX0RFVEVDVElPTikgJiYgZGVmaW5lZChfX0NPTU9fVkVS
U0lPTl9fKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9DT01PX0RFVEVDVElPTiBCT09TVF9Q
UkVERUZfTUFLRV8wWF9WUlAoX19DT01PX1ZFUlNJT05fXykKLSMgICBlbmRpZgotIyAgIGlmICFk
ZWZpbmVkKEJPT1NUX0NPTVBfQ09NT19ERVRFQ1RJT04pCi0jICAgICAgIGRlZmluZSBCT09TVF9D
T01QX0NPTU9fREVURUNUSU9OIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotIyAgIGVu
ZGlmCi0jZW5kaWYKLQotI2lmZGVmIEJPT1NUX0NPTVBfQ09NT19ERVRFQ1RJT04KLSMgICBpZiBk
ZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfQ09NUF9ERVRFQ1RFRCkKLSMgICAgICAgZGVmaW5l
IEJPT1NUX0NPTVBfQ09NT19FTVVMQVRFRCBCT09TVF9DT01QX0NPTU9fREVURUNUSU9OCi0jICAg
ZWxzZQotIyAgICAgICB1bmRlZiBCT09TVF9DT01QX0NPTU8KLSMgICAgICAgZGVmaW5lIEJPT1NU
X0NPTVBfQ09NTyBCT09TVF9DT01QX0NPTU9fREVURUNUSU9OCi0jICAgZW5kaWYKLSMgICBkZWZp
bmUgQk9PU1RfQ09NUF9DT01PX0FWQUlMQUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZWRlZi9k
ZXRhaWwvY29tcF9kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfQ09NUF9DT01P
X05BTUUgIkNvbWVhdSBDKysiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2Rl
dGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0NPTVBfQ09NTyxC
T09TVF9DT01QX0NPTU9fTkFNRSkKLQotI2lmZGVmIEJPT1NUX0NPTVBfQ09NT19FTVVMQVRFRAot
I2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xB
UkVfVEVTVChCT09TVF9DT01QX0NPTU9fRU1VTEFURUQsQk9PU1RfQ09NUF9DT01PX05BTUUpCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3ByZWRlZi9jb21waWxlci9jb21wYXEuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9jb21wYXEuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOTZhNzllNjc1NjE1NGY5YzFjMzhmN2MwZjdhNmY4ZjcwYzdhMzhlZC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvY29tcGFxLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJh
IDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lm
bmRlZiBCT09TVF9QUkVERUZfQ09NUElMRVJfQ09NUEFRX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVG
X0NPTVBJTEVSX0NPTVBBUV9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1i
ZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBC
T09TVF9DT01QX0RFQ2BdCi0KLVtAaHR0cDovL3d3dy5vcGVudm1zLmNvbXBhcS5jb20vb3BlbnZt
cy9icm9jaHVyZXMvZGVjY3BsdXMvIENvbXBhcSBDL0MrK10gY29tcGlsZXIuCi1WZXJzaW9uIG51
bWJlciBhdmFpbGFibGUgYXMgbWFqb3IsIG1pbm9yLCBhbmQgcGF0Y2guCi0KLVt0YWJsZQotICAg
IFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19E
RUNDWFhgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fREVDQ2BdIFtfX3ByZWRl
Zl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BfX0RFQ0NYWF9WRVJgXSBbVi5SLlBdXQotICAgIFtb
YF9fREVDQ19WRVJgXSBbVi5SLlBdXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0NPTVBf
REVDIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmluZWQoX19E
RUNDKSB8fCBkZWZpbmVkKF9fREVDQ1hYKQotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0NPTVBfREVD
X0RFVEVDVElPTikgJiYgZGVmaW5lZChfX0RFQ0NYWF9WRVIpCi0jICAgICAgIGRlZmluZSBCT09T
VF9DT01QX0RFQ19ERVRFQ1RJT04gQk9PU1RfUFJFREVGX01BS0VfMTBfVlZSUjBQUDAwKF9fREVD
Q1hYX1ZFUikKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0NPTVBfREVDX0RFVEVD
VElPTikgJiYgZGVmaW5lZChfX0RFQ0NfVkVSKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9E
RUNfREVURUNUSU9OIEJPT1NUX1BSRURFRl9NQUtFXzEwX1ZWUlIwUFAwMChfX0RFQ0NfVkVSKQot
IyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfQ09NUF9ERUNfREVURUNUSU9OKQotIyAg
ICAgICBkZWZpbmUgQk9PU1RfQ09NX0RFQ19ERVRFQ1RJT04gQk9PU1RfVkVSU0lPTl9OVU1CRVJf
QVZBSUxBQkxFCi0jICAgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQk9PU1RfQ09NUF9ERUNfREVU
RUNUSU9OCi0jICAgaWYgZGVmaW5lZChCT09TVF9QUkVERUZfREVUQUlMX0NPTVBfREVURUNURUQp
Ci0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX0RFQ19FTVVMQVRFRCBCT09TVF9DT01QX0RFQ19E
RVRFQ1RJT04KLSMgICBlbHNlCi0jICAgICAgIHVuZGVmIEJPT1NUX0NPTVBfREVDCi0jICAgICAg
IGRlZmluZSBCT09TVF9DT01QX0RFQyBCT09TVF9DT01QX0RFQ19ERVRFQ1RJT04KLSMgICBlbmRp
ZgotIyAgIGRlZmluZSBCT09TVF9DT01QX0RFQ19BVkFJTEFCTEUKLSMgICBpbmNsdWRlIDxib29z
dC9wcmVkZWYvZGV0YWlsL2NvbXBfZGV0ZWN0ZWQuaD4KLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NU
X0NPTVBfREVDX05BTUUgIkNvbXBhcSBDL0MrKyIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29z
dC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1Rf
Q09NUF9ERUMsQk9PU1RfQ09NUF9ERUNfTkFNRSkKLQotI2lmZGVmIEJPT1NUX0NPTVBfREVDX0VN
VUxBVEVECi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVE
RUZfREVDTEFSRV9URVNUKEJPT1NUX0NPTVBfREVDX0VNVUxBVEVELEJPT1NUX0NPTVBfREVDX05B
TUUpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9kaWFiLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvZGlhYi5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmNWEzN2RlN2QzZjYwNGMwNDhmNmYyMjY2NjM4MzY0ZTNjODExODVm
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9kaWFiLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJh
IDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lm
bmRlZiBCT09TVF9QUkVERUZfQ09NUElMRVJfRElBQl9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9D
T01QSUxFUl9ESUFCX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5o
PgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NU
X0NPTVBfRElBQmBdCi0KLVtAaHR0cDovL3d3dy53aW5kcml2ZXIuY29tL3Byb2R1Y3RzL2RldmVs
b3BtZW50X3N1aXRlL3dpbmRfcml2ZXJfY29tcGlsZXIvIERpYWIgQy9DKytdIGNvbXBpbGVyLgot
VmVyc2lvbiBudW1iZXIgYXZhaWxhYmxlIGFzIG1ham9yLCBtaW5vciwgYW5kIHBhdGNoLgotCi1b
dGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQot
ICAgIFtbYF9fRENDX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotCi0gICAgW1tgX19WRVJT
SU9OX05VTUJFUl9fYF0gW1YuUi5QXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9DT01Q
X0RJQUIgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgZGVmaW5lZChf
X0RDQ19fKQotIyAgIGRlZmluZSBCT09TVF9DT01QX0RJQUJfREVURUNUSU9OIEJPT1NUX1BSRURF
Rl9NQUtFXzEwX1ZSUFAoX19WRVJTSU9OX05VTUJFUl9fKQotI2VuZGlmCi0KLSNpZmRlZiBCT09T
VF9DT01QX0RJQUJfREVURUNUSU9OCi0jICAgaWYgZGVmaW5lZChCT09TVF9QUkVERUZfREVUQUlM
X0NPTVBfREVURUNURUQpCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX0RJQUJfRU1VTEFURUQg
Qk9PU1RfQ09NUF9ESUFCX0RFVEVDVElPTgotIyAgIGVsc2UKLSMgICAgICAgdW5kZWYgQk9PU1Rf
Q09NUF9ESUFCCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX0RJQUIgQk9PU1RfQ09NUF9ESUFC
X0RFVEVDVElPTgotIyAgIGVuZGlmCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBfRElBQl9BVkFJTEFC
TEUKLSMgICBpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL2NvbXBfZGV0ZWN0ZWQuaD4KLSNl
bmRpZgotCi0jZGVmaW5lIEJPT1NUX0NPTVBfRElBQl9OQU1FICJEaWFiIEMvQysrIgotCi0jZW5k
aWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVG
X0RFQ0xBUkVfVEVTVChCT09TVF9DT01QX0RJQUIsQk9PU1RfQ09NUF9ESUFCX05BTUUpCi0KLSNp
ZmRlZiBCT09TVF9DT01QX0RJQUJfRU1VTEFURUQKLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0
YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9ESUFCX0VN
VUxBVEVELEJPT1NUX0NPTVBfRElBQl9OQU1FKQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvZGlnaXRh
bG1hcnMuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRl
Zi9jb21waWxlci9kaWdpdGFsbWFycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
YmQ1ODUwMmUwZjQ2NTQ2MmRiNzY1ZjZkZjFjODhiZmU2NGJkZDk3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9kaWdpdGFsbWFycy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUK
LURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0
dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1Rf
UFJFREVGX0NPTVBJTEVSX0RJR0lUQUxNQVJTX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0NPTVBJ
TEVSX0RJR0lUQUxNQVJTX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJl
ci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJP
T1NUX0NPTVBfRE1DYF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RpZ2l0YWxf
TWFycyBEaWdpdGFsIE1hcnNdIGNvbXBpbGVyLgotVmVyc2lvbiBudW1iZXIgYXZhaWxhYmxlIGFz
IG1ham9yLCBtaW5vciwgYW5kIHBhdGNoLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJv
bF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fRE1DX19gXSBbX19wcmVkZWZf
ZGV0ZWN0aW9uX19dXQotCi0gICAgW1tgX19ETUNfX2BdIFtWLlIuUF1dCi0gICAgXQotICovCi0K
LSNkZWZpbmUgQk9PU1RfQ09NUF9ETUMgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJM
RQotCi0jaWYgZGVmaW5lZChfX0RNQ19fKQotIyAgIGRlZmluZSBCT09TVF9DT01QX0RNQ19ERVRF
Q1RJT04gQk9PU1RfUFJFREVGX01BS0VfMFhfVlJQKF9fRE1DX18pCi0jZW5kaWYKLQotI2lmZGVm
IEJPT1NUX0NPTVBfRE1DX0RFVEVDVElPTgotIyAgIGlmIGRlZmluZWQoQk9PU1RfUFJFREVGX0RF
VEFJTF9DT01QX0RFVEVDVEVEKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9ETUNfRU1VTEFU
RUQgQk9PU1RfQ09NUF9ETUNfREVURUNUSU9OCi0jICAgZWxzZQotIyAgICAgICB1bmRlZiBCT09T
VF9DT01QX0RNQwotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9ETUMgQk9PU1RfQ09NUF9ETUNf
REVURUNUSU9OCi0jICAgZW5kaWYKLSMgICBkZWZpbmUgQk9PU1RfQ09NUF9ETUNfQVZBSUxBQkxF
Ci0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC9jb21wX2RldGVjdGVkLmg+Ci0jZW5k
aWYKLQotI2RlZmluZSBCT09TVF9DT01QX0RNQ19OQU1FICJEaWdpdGFsIE1hcnMiCi0KLSNlbmRp
ZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZf
REVDTEFSRV9URVNUKEJPT1NUX0NPTVBfRE1DLEJPT1NUX0NPTVBfRE1DX05BTUUpCi0KLSNpZmRl
ZiBCT09TVF9DT01QX0RNQ19FTVVMQVRFRAotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwv
dGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9DT01QX0RNQ19FTVVMQVRF
RCxCT09TVF9DT01QX0RNQ19OQU1FKQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvZGlnbnVzLmggYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIv
ZGlnbnVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NWQzZGM3NjQ4OTM2ZDlj
ZDk4NWMxMjhlMGM2YTQxODZiODhmOTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
cHJlZGVmL2NvbXBpbGVyL2RpZ251cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAot
LyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0NPTVBJTEVSX0RJR05V
U19ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9DT01QSUxFUl9ESUdOVVNfSAotCi0jaW5jbHVkZSA8
Ym9vc3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21h
a2UuaD4KLQotLypgCi1baGVhZGluZyBgQk9PU1RfQ09NUF9TWVNDYF0KLQotW0BodHRwOi8vd3d3
LmRpZ251cy5jb20vZGN4eC8gRGlnbnVzIFN5c3RlbXMvQysrXSBjb21waWxlci4KLVZlcnNpb24g
bnVtYmVyIGF2YWlsYWJsZSBhcyBtYWpvciwgbWlub3IsIGFuZCBwYXRjaC4KLQotW3RhYmxlCi0g
ICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2Bf
X1NZU0NfX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BfX1NZU0NfVkVSX19g
XSBbVi5SLlBdXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0NPTVBfU1lTQyBCT09TVF9W
RVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBkZWZpbmVkKF9fU1lTQ19fKQotIyAg
IGRlZmluZSBCT09TVF9DT01QX1NZU0NfREVURUNUSU9OIEJPT1NUX1BSRURFRl9NQUtFXzEwX1ZS
UlBQKF9fU1lTQ19WRVJfXykKLSNlbmRpZgotCi0jaWZkZWYgQk9PU1RfQ09NUF9TWVNDX0RFVEVD
VElPTgotIyAgIGlmIGRlZmluZWQoQk9PU1RfUFJFREVGX0RFVEFJTF9DT01QX0RFVEVDVEVEKQot
IyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9TWVNDX0VNVUxBVEVEIEJPT1NUX0NPTVBfU1lTQ19E
RVRFQ1RJT04KLSMgICBlbHNlCi0jICAgICAgIHVuZGVmIEJPT1NUX0NPTVBfU1lTQwotIyAgICAg
ICBkZWZpbmUgQk9PU1RfQ09NUF9TWVNDIEJPT1NUX0NPTVBfU1lTQ19ERVRFQ1RJT04KLSMgICBl
bmRpZgotIyAgIGRlZmluZSBCT09TVF9DT01QX1NZU0NfQVZBSUxBQkxFCi0jICAgaW5jbHVkZSA8
Ym9vc3QvcHJlZGVmL2RldGFpbC9jb21wX2RldGVjdGVkLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBC
T09TVF9DT01QX1NZU0NfTkFNRSAiRGlnbnVzIFN5c3RlbXMvQysrIgotCi0jZW5kaWYKLQotI2lu
Y2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVf
VEVTVChCT09TVF9DT01QX1NZU0MsQk9PU1RfQ09NUF9TWVNDX05BTUUpCi0KLSNpZmRlZiBCT09T
VF9DT01QX1NZU0NfRU1VTEFURUQKLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3Qu
aD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9TWVNDX0VNVUxBVEVELEJP
T1NUX0NPTVBfU1lTQ19OQU1FKQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvZWRnLmggYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvZWRnLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZmI5YjBhNmQzMjNjMTU2NWYwYjljNjlm
YTM1YTg3YzMwN2I2Y2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2Nv
bXBpbGVyL2VkZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLUNvcHlyaWdo
dCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0
d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0NPTVBJTEVSX0VER19ICi0jZGVmaW5lIEJP
T1NUX1BSRURFRl9DT01QSUxFUl9FREdfSAotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNp
b25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4KLQotLypgCi1baGVh
ZGluZyBgQk9PU1RfQ09NUF9FREdgXQotCi1bQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kv
RWRpc29uX0Rlc2lnbl9Hcm91cCBFREcgQysrIEZyb250ZW5kXSBjb21waWxlci4KLVZlcnNpb24g
bnVtYmVyIGF2YWlsYWJsZSBhcyBtYWpvciwgbWlub3IsIGFuZCBwYXRjaC4KLQotW3RhYmxlCi0g
ICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2Bf
X0VER19fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLQotICAgIFtbYF9fRURHX1ZFUlNJT05f
X2BdIFtWLlIuMF1dCi0gICAgXQotICovCi0KLSNkZWZpbmUgQk9PU1RfQ09NUF9FREcgQk9PU1Rf
VkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgZGVmaW5lZChfX0VER19fKQotIyAg
IGRlZmluZSBCT09TVF9DT01QX0VER19ERVRFQ1RJT04gQk9PU1RfUFJFREVGX01BS0VfMTBfVlJS
KF9fRURHX1ZFUlNJT05fXykKLSNlbmRpZgotCi0jaWZkZWYgQk9PU1RfQ09NUF9FREdfREVURUNU
SU9OCi0jICAgaWYgZGVmaW5lZChCT09TVF9QUkVERUZfREVUQUlMX0NPTVBfREVURUNURUQpCi0j
ICAgICAgIGRlZmluZSBCT09TVF9DT01QX0VER19FTVVMQVRFRCBCT09TVF9DT01QX0VER19ERVRF
Q1RJT04KLSMgICBlbHNlCi0jICAgICAgIHVuZGVmIEJPT1NUX0NPTVBfRURHCi0jICAgICAgIGRl
ZmluZSBCT09TVF9DT01QX0VERyBCT09TVF9DT01QX0VER19ERVRFQ1RJT04KLSMgICBlbmRpZgot
IyAgIGRlZmluZSBCT09TVF9DT01QX0VER19BVkFJTEFCTEUKLSMgICBpbmNsdWRlIDxib29zdC9w
cmVkZWYvZGV0YWlsL2NvbXBfZGV0ZWN0ZWQuaD4KLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0NP
TVBfRURHX05BTUUgIkVERyBDKysgRnJvbnRlbmQiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9v
c3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NU
X0NPTVBfRURHLEJPT1NUX0NPTVBfRURHX05BTUUpCi0KLSNpZmRlZiBCT09TVF9DT01QX0VER19F
TVVMQVRFRAotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJF
REVGX0RFQ0xBUkVfVEVTVChCT09TVF9DT01QX0VER19FTVVMQVRFRCxCT09TVF9DT01QX0VER19O
QU1FKQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvZWtvcGF0aC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVyL2Vrb3BhdGguaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjZGUzNjc1MmNiZDE2YWRkYjk4MDM2NzUzODhlNTA2
Y2VjMzZkMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIv
ZWtvcGF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBS
ZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK
LSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0NPTVBJTEVSX0VLT1BBVEhfSAotI2RlZmluZSBC
T09TVF9QUkVERUZfQ09NUElMRVJfRUtPUEFUSF9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYv
dmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAK
LVtoZWFkaW5nIGBCT09TVF9DT01QX1BBVEhgXQotCi1bQGh0dHA6Ly9lbi53aWtpcGVkaWEub3Jn
L3dpa2kvUGF0aFNjYWxlIEVLT3BhdGhdIGNvbXBpbGVyLgotVmVyc2lvbiBudW1iZXIgYXZhaWxh
YmxlIGFzIG1ham9yLCBtaW5vciwgYW5kIHBhdGNoLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVm
X3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fUEFUSENDX19gXSBb
X19wcmVkZWZfZGV0ZWN0aW9uX19dXQotCi0gICAgW1tgX19QQVRIQ0NfX2AsIGBfX1BBVEhDQ19N
SU5PUl9fYCwgYF9fUEFUSENDX1BBVENITEVWRUxfX2BdIFtWLlIuUF1dCi0gICAgXQotICovCi0K
LSNkZWZpbmUgQk9PU1RfQ09NUF9QQVRIIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFC
TEUKLQotI2lmIGRlZmluZWQoX19QQVRIQ0NfXykKLSMgICBkZWZpbmUgQk9PU1RfQ09NUF9QQVRI
X0RFVEVDVElPTiBcCi0gICAgICAgIEJPT1NUX1ZFUlNJT05fTlVNQkVSKF9fUEFUSENDX18sX19Q
QVRIQ0NfTUlOT1JfXyxfX1BBVEhDQ19QQVRDSExFVkVMX18pCi0jZW5kaWYKLQotI2lmZGVmIEJP
T1NUX0NPTVBfUEFUSF9ERVRFQ1RJT04KLSMgICBpZiBkZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRB
SUxfQ09NUF9ERVRFQ1RFRCkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfUEFUSF9FTVVMQVRF
RCBCT09TVF9DT01QX1BBVEhfREVURUNUSU9OCi0jICAgZWxzZQotIyAgICAgICB1bmRlZiBCT09T
VF9DT01QX1BBVEgKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfUEFUSCBCT09TVF9DT01QX1BB
VEhfREVURUNUSU9OCi0jICAgZW5kaWYKLSMgICBkZWZpbmUgQk9PU1RfQ09NUF9QQVRIX0FWQUlM
QUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvY29tcF9kZXRlY3RlZC5oPgot
I2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfQ09NUF9QQVRIX05BTUUgIkVLT3BhdGgiCi0KLSNlbmRp
ZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZf
REVDTEFSRV9URVNUKEJPT1NUX0NPTVBfUEFUSCxCT09TVF9DT01QX1BBVEhfTkFNRSkKLQotI2lm
ZGVmIEJPT1NUX0NPTVBfUEFUSF9FTVVMQVRFRAotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRh
aWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9DT01QX1BBVEhfRU1V
TEFURUQsQk9PU1RfQ09NUF9QQVRIX05BTUUpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9nY2MuaCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxl
ci9nY2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJkN2ZmZjE3OGJkZDA4ZDkx
Yjc2YTNmM2Y0ZmFkMDRlMTEyMzc1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9w
cmVkZWYvY29tcGlsZXIvZ2NjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgot
Q29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJv
b3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfQ09NUElMRVJfR0NDX0gKLSNk
ZWZpbmUgQk9PU1RfUFJFREVGX0NPTVBJTEVSX0dDQ19ICi0KLS8qIE90aGVyIGNvbXBpbGVycyB0
aGF0IGVtdWxhdGUgdGhpcyBvbmUgbmVlZCB0byBiZSBkZXRlY3RlZCBmaXJzdC4gKi8KLQotI2lu
Y2x1ZGUgPGJvb3N0L3ByZWRlZi9jb21waWxlci9jbGFuZy5oPgotCi0jaW5jbHVkZSA8Ym9vc3Qv
cHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4K
LQotLypgCi1baGVhZGluZyBgQk9PU1RfQ09NUF9HTlVDYF0KLQotW0BodHRwOi8vZW4ud2lraXBl
ZGlhLm9yZy93aWtpL0dOVV9Db21waWxlcl9Db2xsZWN0aW9uIEdudSBHQ0MgQy9DKytdIGNvbXBp
bGVyLgotVmVyc2lvbiBudW1iZXIgYXZhaWxhYmxlIGFzIG1ham9yLCBtaW5vciwgYW5kIHBhdGNo
IChpZiBhdmFpbGFibGUpLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19w
cmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fR05VQ19fYF0gW19fcHJlZGVmX2RldGVjdGlv
bl9fXV0KLQotICAgIFtbYF9fR05VQ19fYCwgYF9fR05VQ19NSU5PUl9fYCwgYF9fR05VQ19QQVRD
SExFVkVMX19gXSBbVi5SLlBdXQotICAgIFtbYF9fR05VQ19fYCwgYF9fR05VQ19NSU5PUl9fYF0g
W1YuUi4wXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9DT01QX0dOVUMgQk9PU1RfVkVS
U0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLSMgICBp
ZiAhZGVmaW5lZChCT09TVF9DT01QX0dOVUNfREVURUNUSU9OKSAmJiBkZWZpbmVkKF9fR05VQ19Q
QVRDSExFVkVMX18pCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX0dOVUNfREVURUNUSU9OIFwK
LSAgICAgICAgICAgIEJPT1NUX1ZFUlNJT05fTlVNQkVSKF9fR05VQ19fLF9fR05VQ19NSU5PUl9f
LF9fR05VQ19QQVRDSExFVkVMX18pCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9D
T01QX0dOVUNfREVURUNUSU9OKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9HTlVDX0RFVEVD
VElPTiBcCi0gICAgICAgICAgICBCT09TVF9WRVJTSU9OX05VTUJFUihfX0dOVUNfXyxfX0dOVUNf
TUlOT1JfXywwKQotIyAgIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIEJPT1NUX0NPTVBfR05VQ19E
RVRFQ1RJT04KLSMgICBpZiBkZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfQ09NUF9ERVRFQ1RF
RCkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfR05VQ19FTVVMQVRFRCBCT09TVF9DT01QX0dO
VUNfREVURUNUSU9OCi0jICAgZWxzZQotIyAgICAgICB1bmRlZiBCT09TVF9DT01QX0dOVUMKLSMg
ICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfR05VQyBCT09TVF9DT01QX0dOVUNfREVURUNUSU9OCi0j
ICAgZW5kaWYKLSMgICBkZWZpbmUgQk9PU1RfQ09NUF9HTlVDX0FWQUlMQUJMRQotIyAgIGluY2x1
ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvY29tcF9kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZp
bmUgQk9PU1RfQ09NUF9HTlVDX05BTUUgIkdudSBHQ0MgQy9DKysiCi0KLSNlbmRpZgotCi0jaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9U
RVNUKEJPT1NUX0NPTVBfR05VQyxCT09TVF9DT01QX0dOVUNfTkFNRSkKLQotI2lmZGVmIEJPT1NU
X0NPTVBfR05VQ19FTVVMQVRFRAotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5o
PgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9DT01QX0dOVUNfRU1VTEFURUQsQk9P
U1RfQ09NUF9HTlVDX05BTUUpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9nY2NfeG1sLmggYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvZ2Nj
X3htbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2FlNjAwYzgxMjBlMWM0ODQw
YmY1MGRmOWY2MzFmOTBkNWViNDIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3By
ZWRlZi9jb21waWxlci9nY2NfeG1sLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0v
KgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfQ09NUElMRVJfR0NDX1hN
TF9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9DT01QSUxFUl9HQ0NfWE1MX0gKLQotI2luY2x1ZGUg
PGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9t
YWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0NPTVBfR0NDWE1MYF0KLQotW0BodHRwOi8v
d3d3LmdjY3htbC5vcmcvIEdDQyBYTUxdIGNvbXBpbGVyLgotCi1bdGFibGUKLSAgICBbW19fcHJl
ZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fR0NDWE1MX19g
XSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0NP
TVBfR0NDWE1MIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmlu
ZWQoX19HQ0NYTUxfXykKLSMgICBkZWZpbmUgQk9PU1RfQ09NUF9HQ0NYTUxfREVURUNUSU9OIEJP
T1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotI2VuZGlmCi0KLSNpZmRlZiBCT09TVF9DT01Q
X0dDQ1hNTF9ERVRFQ1RJT04KLSMgICBpZiBkZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfQ09N
UF9ERVRFQ1RFRCkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfR0NDWE1MX0VNVUxBVEVEIEJP
T1NUX0NPTVBfR0NDWE1MX0RFVEVDVElPTgotIyAgIGVsc2UKLSMgICAgICAgdW5kZWYgQk9PU1Rf
Q09NUF9HQ0NYTUwKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfR0NDWE1MIEJPT1NUX0NPTVBf
R0NDWE1MX0RFVEVDVElPTgotIyAgIGVuZGlmCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBfR0NDWE1M
X0FWQUlMQUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvY29tcF9kZXRlY3Rl
ZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfQ09NUF9HQ0NYTUxfTkFNRSAiR0NDIFhNTCIK
LQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NU
X1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9HQ0NYTUwsQk9PU1RfQ09NUF9HQ0NYTUxf
TkFNRSkKLQotI2lmZGVmIEJPT1NUX0NPTVBfR0NDWE1MX0VNVUxBVEVECi0jaW5jbHVkZSA8Ym9v
c3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NU
X0NPTVBfR0NDWE1MX0VNVUxBVEVELEJPT1NUX0NPTVBfR0NDWE1MX05BTUUpCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRl
Zi9jb21waWxlci9ncmVlbmhpbGxzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvZ3JlZW5oaWxscy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyM2I4ZjAxN2Q4YmYwZGMzMTk4ZmY1ZGViZDcyMTM5ZjViNTc2NGYxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9ncmVlbmhpbGxz
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2
ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQot
I2lmbmRlZiBCT09TVF9QUkVERUZfQ09NUElMRVJfR1JFRU5ISUxMU19ICi0jZGVmaW5lIEJPT1NU
X1BSRURFRl9DT01QSUxFUl9HUkVFTkhJTExTX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92
ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAot
W2hlYWRpbmcgYEJPT1NUX0NPTVBfR0hTYF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93
aWtpL0dyZWVuX0hpbGxzX1NvZnR3YXJlIEdyZWVuIEhpbGxzIEMvQysrXSBjb21waWxlci4KLVZl
cnNpb24gbnVtYmVyIGF2YWlsYWJsZSBhcyBtYWpvciwgbWlub3IsIGFuZCBwYXRjaC4KLQotW3Rh
YmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAg
ICBbW2BfX2doc2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tgX19naHNfX2BdIFtf
X3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BfX0dIU19WRVJTSU9OX05VTUJFUl9fYF0g
W1YuUi5QXV0KLSAgICBbW2BfX2doc2BdIFtWLlIuUF1dCi0gICAgXQotICovCi0KLSNkZWZpbmUg
Qk9PU1RfQ09NUF9HSFMgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYg
ZGVmaW5lZChfX2docykgfHwgZGVmaW5lZChfX2doc19fKQotIyAgIGlmICFkZWZpbmVkKEJPT1NU
X0NPTVBfR0hTX0RFVEVDVElPTikgJiYgZGVmaW5lZChfX0dIU19WRVJTSU9OX05VTUJFUl9fKQot
IyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9HSFNfREVURUNUSU9OIEJPT1NUX1BSRURFRl9NQUtF
XzEwX1ZSUChfX0dIU19WRVJTSU9OX05VTUJFUl9fKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmlu
ZWQoQk9PU1RfQ09NUF9HSFNfREVURUNUSU9OKSAmJiBkZWZpbmVkKF9fZ2hzKQotIyAgICAgICBk
ZWZpbmUgQk9PU1RfQ09NUF9HSFNfREVURUNUSU9OIEJPT1NUX1BSRURFRl9NQUtFXzEwX1ZSUChf
X2docykKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0NPTVBfR0hTX0RFVEVDVElP
TikKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfR0hTX0RFVEVDVElPTiBCT09TVF9WRVJTSU9O
X05VTUJFUl9BVkFJTEFCTEUKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBCT09TVF9DT01Q
X0dIU19ERVRFQ1RJT04KLSMgICBpZiBkZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfQ09NUF9E
RVRFQ1RFRCkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfR0hTX0VNVUxBVEVEIEJPT1NUX0NP
TVBfR0hTX0RFVEVDVElPTgotIyAgIGVsc2UKLSMgICAgICAgdW5kZWYgQk9PU1RfQ09NUF9HSFMK
LSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfR0hTIEJPT1NUX0NPTVBfR0hTX0RFVEVDVElPTgot
IyAgIGVuZGlmCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBfR0hTX0FWQUlMQUJMRQotIyAgIGluY2x1
ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvY29tcF9kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZp
bmUgQk9PU1RfQ09NUF9HSFNfTkFNRSAiR3JlZW4gSGlsbHMgQy9DKysiCi0KLSNlbmRpZgotCi0j
aW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFS
RV9URVNUKEJPT1NUX0NPTVBfR0hTLEJPT1NUX0NPTVBfR0hTX05BTUUpCi0KLSNpZmRlZiBCT09T
VF9DT01QX0dIU19FTVVMQVRFRAotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5o
PgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9DT01QX0dIU19FTVVMQVRFRCxCT09T
VF9DT01QX0dIU19OQU1FKQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvaHBfYWNjLmggYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvaHBfYWNj
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiM2ZmZTkwNjhhYjY5ZDczMGVhMzhl
NWUwMDdlMGJjODVkNTkyNmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVm
L2NvbXBpbGVyL2hwX2FjYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLUNv
cHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29z
dCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUg
TElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0NPTVBJTEVSX0hQX0FDQ19ICi0j
ZGVmaW5lIEJPT1NUX1BSRURFRl9DT01QSUxFUl9IUF9BQ0NfSAotCi0jaW5jbHVkZSA8Ym9vc3Qv
cHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4K
LQotLypgCi1baGVhZGluZyBgQk9PU1RfQ09NUF9IUEFDQ2BdCi0KLUhQIGFDKysgY29tcGlsZXIu
Ci1WZXJzaW9uIG51bWJlciBhdmFpbGFibGUgYXMgbWFqb3IsIG1pbm9yLCBhbmQgcGF0Y2guCi0K
LVt0YWJsZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQot
Ci0gICAgW1tgX19IUF9hQ0NgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotCi0gICAgW1tgX19I
UF9hQ0NgXSBbVi5SLlBdXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0NPTVBfSFBBQ0Mg
Qk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgZGVmaW5lZChfX0hQX2FD
QykKLSMgICBpZiAhZGVmaW5lZChCT09TVF9DT01QX0hQQUNDX0RFVEVDVElPTikgJiYgKF9fSFBf
YUNDID4gMSkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfSFBBQ0NfREVURUNUSU9OIEJPT1NU
X1BSRURFRl9NQUtFXzEwX1ZWUlJQUChfX0hQX2FDQykKLSMgICBlbmRpZgotIyAgIGlmICFkZWZp
bmVkKEJPT1NUX0NPTVBfSFBBQ0NfREVURUNUSU9OKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09N
UF9IUEFDQ19ERVRFQ1RJT04gQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgZW5k
aWYKLSNlbmRpZgotCi0jaWZkZWYgQk9PU1RfQ09NUF9IUEFDQ19ERVRFQ1RJT04KLSMgICBpZiBk
ZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfQ09NUF9ERVRFQ1RFRCkKLSMgICAgICAgZGVmaW5l
IEJPT1NUX0NPTVBfSFBBQ0NfRU1VTEFURUQgQk9PU1RfQ09NUF9IUEFDQ19ERVRFQ1RJT04KLSMg
ICBlbHNlCi0jICAgICAgIHVuZGVmIEJPT1NUX0NPTVBfSFBBQ0MKLSMgICAgICAgZGVmaW5lIEJP
T1NUX0NPTVBfSFBBQ0MgQk9PU1RfQ09NUF9IUEFDQ19ERVRFQ1RJT04KLSMgICBlbmRpZgotIyAg
IGRlZmluZSBCT09TVF9DT01QX0hQQUNDX0FWQUlMQUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0L3By
ZWRlZi9kZXRhaWwvY29tcF9kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfQ09N
UF9IUEFDQ19OQU1FICJIUCBhQysrIgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRl
Zi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9DT01QX0hQ
QUNDLEJPT1NUX0NPTVBfSFBBQ0NfTkFNRSkKLQotI2lmZGVmIEJPT1NUX0NPTVBfSFBBQ0NfRU1V
TEFURUQKLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURF
Rl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9IUEFDQ19FTVVMQVRFRCxCT09TVF9DT01QX0hQQUND
X05BTUUpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9pYXIuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9pYXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjM3ZjQ5MmUyOTE1NmFhOGM1YzdkZWU3NWFmOTY4MWIwMWZlYzc2
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvaWFyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJh
IDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lm
bmRlZiBCT09TVF9QUkVERUZfQ09NUElMRVJfSUFSX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0NP
TVBJTEVSX0lBUl9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4K
LSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9D
T01QX0lBUmBdCi0KLUlBUiBDL0MrKyBjb21waWxlci4KLVZlcnNpb24gbnVtYmVyIGF2YWlsYWJs
ZSBhcyBtYWpvciwgbWlub3IsIGFuZCBwYXRjaC4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9z
eW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfX0lBUl9TWVNURU1TX0lD
Q19fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLQotICAgIFtbYF9fVkVSX19gXSBbVi5SLlBd
XQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0NPTVBfSUFSIEJPT1NUX1ZFUlNJT05fTlVN
QkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKLSMg
ICBkZWZpbmUgQk9PU1RfQ09NUF9JQVJfREVURUNUSU9OIEJPT1NUX1BSRURFRl9NQUtFXzEwX1ZW
UlIoX19WRVJfXykKLSNlbmRpZgotCi0jaWZkZWYgQk9PU1RfQ09NUF9JQVJfREVURUNUSU9OCi0j
ICAgaWYgZGVmaW5lZChCT09TVF9QUkVERUZfREVUQUlMX0NPTVBfREVURUNURUQpCi0jICAgICAg
IGRlZmluZSBCT09TVF9DT01QX0lBUl9FTVVMQVRFRCBCT09TVF9DT01QX0lBUl9ERVRFQ1RJT04K
LSMgICBlbHNlCi0jICAgICAgIHVuZGVmIEJPT1NUX0NPTVBfSUFSCi0jICAgICAgIGRlZmluZSBC
T09TVF9DT01QX0lBUiBCT09TVF9DT01QX0lBUl9ERVRFQ1RJT04KLSMgICBlbmRpZgotIyAgIGRl
ZmluZSBCT09TVF9DT01QX0lBUl9BVkFJTEFCTEUKLSMgICBpbmNsdWRlIDxib29zdC9wcmVkZWYv
ZGV0YWlsL2NvbXBfZGV0ZWN0ZWQuaD4KLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0NPTVBfSUFS
X05BTUUgIklBUiBDL0MrKyIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0
YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9JQVIsQk9P
U1RfQ09NUF9JQVJfTkFNRSkKLQotI2lmZGVmIEJPT1NUX0NPTVBfSUFSX0VNVUxBVEVECi0jaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9U
RVNUKEJPT1NUX0NPTVBfSUFSX0VNVUxBVEVELEJPT1NUX0NPTVBfSUFSX05BTUUpCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3By
ZWRlZi9jb21waWxlci9pYm0uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3ByZWRlZi9jb21waWxlci9pYm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNjkzMWViZDg4NDA4MzM1MTQwNmE2NDlhNTg1ZjU5YzNjYWJiZGNkNi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvaWJtLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw3MiArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgot
KFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDov
L3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVE
RUZfQ09NUElMRVJfSUJNX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0NPTVBJTEVSX0lCTV9ICi0K
LSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29z
dC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9DT01QX0lCTWBdCi0KLVtA
aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WaXN1YWxBZ2UgSUJNIFhMIEMvQysrXSBjb21w
aWxlci4KLVZlcnNpb24gbnVtYmVyIGF2YWlsYWJsZSBhcyBtYWpvciwgbWlub3IsIGFuZCBwYXRj
aC4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25f
X11dCi0KLSAgICBbW2BfX0lCTUNQUF9fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBb
W2BfX3hsQ19fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfX3hsY19fYF0gW19f
cHJlZGVmX2RldGVjdGlvbl9fXV0KLQotICAgIFtbYF9fQ09NUElMRVJfVkVSX19gXSBbVi5SLlBd
XQotICAgIFtbYF9feGxDX19gXSBbVi5SLlBdXQotICAgIFtbYF9feGxjX19gXSBbVi5SLlBdXQot
ICAgIFtbYF9fSUJNQ1BQX19gXSBbVi5SLlBdXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NU
X0NPTVBfSUJNIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmlu
ZWQoX19JQk1DUFBfXykgfHwgZGVmaW5lZChfX3hsQ19fKSB8fCBkZWZpbmVkKF9feGxjX18pCi0j
ICAgaWYgIWRlZmluZWQoQk9PU1RfQ09NUF9JQk1fREVURUNUSU9OKSAmJiBkZWZpbmVkKF9fQ09N
UElMRVJfVkVSX18pCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX0lCTV9ERVRFQ1RJT04gQk9P
U1RfUFJFREVGX01BS0VfMFhfVlJSUFBQUChfX0NPTVBJTEVSX1ZFUl9fKQotIyAgIGVuZGlmCi0j
ICAgaWYgIWRlZmluZWQoQk9PU1RfQ09NUF9JQk1fREVURUNUSU9OKSAmJiBkZWZpbmVkKF9feGxD
X18pCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX0lCTV9ERVRFQ1RJT04gQk9PU1RfUFJFREVG
X01BS0VfMFhfVlZSUihfX3hsQ19fKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQoQk9PU1Rf
Q09NUF9JQk1fREVURUNUSU9OKSAmJiBkZWZpbmVkKF9feGxjX18pCi0jICAgICAgIGRlZmluZSBC
T09TVF9DT01QX0lCTV9ERVRFQ1RJT04gQk9PU1RfUFJFREVGX01BS0VfMFhfVlZSUihfX3hsY19f
KQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfQ09NUF9JQk1fREVURUNUSU9OKQot
IyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9JQk1fREVURUNUSU9OIEJPT1NUX1BSRURFRl9NQUtF
XzEwX1ZSUChfX0lCTUNQUF9fKQotIyAgIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIEJPT1NUX0NP
TVBfSUJNX0RFVEVDVElPTgotIyAgIGlmIGRlZmluZWQoQk9PU1RfUFJFREVGX0RFVEFJTF9DT01Q
X0RFVEVDVEVEKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9JQk1fRU1VTEFURUQgQk9PU1Rf
Q09NUF9JQk1fREVURUNUSU9OCi0jICAgZWxzZQotIyAgICAgICB1bmRlZiBCT09TVF9DT01QX0lC
TQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9JQk0gQk9PU1RfQ09NUF9JQk1fREVURUNUSU9O
Ci0jICAgZW5kaWYKLSMgICBkZWZpbmUgQk9PU1RfQ09NUF9JQk1fQVZBSUxBQkxFCi0jICAgaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC9jb21wX2RldGVjdGVkLmg+Ci0jZW5kaWYKLQotI2Rl
ZmluZSBCT09TVF9DT01QX0lCTV9OQU1FICJJQk0gWEwgQy9DKysiCi0KLSNlbmRpZgotCi0jaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9U
RVNUKEJPT1NUX0NPTVBfSUJNLEJPT1NUX0NPTVBfSUJNX05BTUUpCi0KLSNpZmRlZiBCT09TVF9D
T01QX0lCTV9FTVVMQVRFRAotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgot
Qk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9DT01QX0lCTV9FTVVMQVRFRCxCT09TVF9D
T01QX0lCTV9OQU1FKQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvaW50ZWwuaCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9pbnRlbC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmQ3NmZlZTA4YmNhNDI3YzdhYTcyYTFlZWI4
MDRhZmZhMzRlNjZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21w
aWxlci9pbnRlbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLUNvcHlyaWdo
dCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0
d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0NPTVBJTEVSX0lOVEVMX0gKLSNkZWZpbmUg
Qk9PU1RfUFJFREVGX0NPTVBJTEVSX0lOVEVMX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92
ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAot
W2hlYWRpbmcgYEJPT1NUX0NPTVBfSU5URUxgXQotCi1bQGh0dHA6Ly9lbi53aWtpcGVkaWEub3Jn
L3dpa2kvSW50ZWxfQyUyQiUyQiBJbnRlbCBDL0MrK10gY29tcGlsZXIuCi1WZXJzaW9uIG51bWJl
ciBhdmFpbGFibGUgYXMgbWFqb3IsIG1pbm9yLCBhbmQgcGF0Y2guCi0KLVt0YWJsZQotICAgIFtb
X19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19JTlRF
TF9DT01QSUxFUmBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tgX19JQ0xgXSBbX19w
cmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fSUNDYF0gW19fcHJlZGVmX2RldGVjdGlvbl9f
XV0KLSAgICBbW2BfX0VDQ2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BfX0lO
VEVMX0NPTVBJTEVSYF0gW1YuUl1dCi0gICAgW1tgX19JTlRFTF9DT01QSUxFUmAgYW5kIGBfX0lO
VEVMX0NPTVBJTEVSX1VQREFURWBdIFtWLlIuUF1dCi0gICAgXQotICovCi0KLSNkZWZpbmUgQk9P
U1RfQ09NUF9JTlRFTCBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBk
ZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpIHx8IGRlZmluZWQoX19JQ0wpIHx8IGRlZmluZWQoX19J
Q0MpIHx8IFwKLSAgICBkZWZpbmVkKF9fRUNDKQotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0NPTVBf
SU5URUxfREVURUNUSU9OKSAmJiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICYmIGRlZmluZWQo
X19JTlRFTF9DT01QSUxFUl9VUERBVEUpCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX0lOVEVM
X0RFVEVDVElPTiBCT09TVF9WRVJTSU9OX05VTUJFUiggXAotICAgICAgICAgICAgQk9PU1RfVkVS
U0lPTl9OVU1CRVJfTUFKT1IoQk9PU1RfUFJFREVGX01BS0VfMTBfVlZSUihfX0lOVEVMX0NPTVBJ
TEVSKSksIFwKLSAgICAgICAgICAgIEJPT1NUX1ZFUlNJT05fTlVNQkVSX01JTk9SKEJPT1NUX1BS
RURFRl9NQUtFXzEwX1ZWUlIoX19JTlRFTF9DT01QSUxFUikpLCBcCi0gICAgICAgICAgICBfX0lO
VEVMX0NPTVBJTEVSX1VQREFURSkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0NP
TVBfSU5URUxfREVURUNUSU9OKSAmJiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCi0jICAgICAg
IGRlZmluZSBCT09TVF9DT01QX0lOVEVMX0RFVEVDVElPTiBCT09TVF9QUkVERUZfTUFLRV8xMF9W
VlJSKF9fSU5URUxfQ09NUElMRVIpCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9D
T01QX0lOVEVMX0RFVEVDVElPTikKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfSU5URUxfREVU
RUNUSU9OIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotIyAgIGVuZGlmCi0jZW5kaWYK
LQotI2lmZGVmIEJPT1NUX0NPTVBfSU5URUxfREVURUNUSU9OCi0jICAgaWYgZGVmaW5lZChCT09T
VF9QUkVERUZfREVUQUlMX0NPTVBfREVURUNURUQpCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01Q
X0lOVEVMX0VNVUxBVEVEIEJPT1NUX0NPTVBfSU5URUxfREVURUNUSU9OCi0jICAgZWxzZQotIyAg
ICAgICB1bmRlZiBCT09TVF9DT01QX0lOVEVMCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX0lO
VEVMIEJPT1NUX0NPTVBfSU5URUxfREVURUNUSU9OCi0jICAgZW5kaWYKLSMgICBkZWZpbmUgQk9P
U1RfQ09NUF9JTlRFTF9BVkFJTEFCTEUKLSMgICBpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWls
L2NvbXBfZGV0ZWN0ZWQuaD4KLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0NPTVBfSU5URUxfTkFN
RSAiSW50ZWwgQy9DKysiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFp
bC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0NPTVBfSU5URUwsQk9P
U1RfQ09NUF9JTlRFTF9OQU1FKQotCi0jaWZkZWYgQk9PU1RfQ09NUF9JTlRFTF9FTVVMQVRFRAot
I2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xB
UkVfVEVTVChCT09TVF9DT01QX0lOVEVMX0VNVUxBVEVELEJPT1NUX0NPTVBfSU5URUxfTkFNRSkK
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvcHJlZGVmL2NvbXBpbGVyL2thaS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVyL2thaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2OGNlODRlMTQ2NmYxZjI4MTJhOGUwMmI4ODMxZWMxODRkMGUyMGIzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9rYWkuaAorKysgL2Rl
di9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAwOC0y
MDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lv
biAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0
Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWZuZGVmIEJP
T1NUX1BSRURFRl9DT01QSUxFUl9LQUlfSAotI2RlZmluZSBCT09TVF9QUkVERUZfQ09NUElMRVJf
S0FJX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1
ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0NPTVBfS0ND
YF0KLQotS2FpIEMrKyBjb21waWxlci4KLVZlcnNpb24gbnVtYmVyIGF2YWlsYWJsZSBhcyBtYWpv
ciwgbWlub3IsIGFuZCBwYXRjaC4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10g
W19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfX0tDQ2BdIFtfX3ByZWRlZl9kZXRlY3Rp
b25fX11dCi0KLSAgICBbW2BfX0tDQ19WRVJTSU9OYF0gW1YuUi5QXV0KLSAgICBdCi0gKi8KLQot
I2RlZmluZSBCT09TVF9DT01QX0tDQyBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxF
Ci0KLSNpZiBkZWZpbmVkKF9fS0NDKQotIyAgIGRlZmluZSBCT09TVF9DT01QX0tDQ19ERVRFQ1RJ
T04gQk9PU1RfUFJFREVGX01BS0VfMFhfVlJQUChfX0tDQ19WRVJTSU9OKQotI2VuZGlmCi0KLSNp
ZmRlZiBCT09TVF9DT01QX0tDQ19ERVRFQ1RJT04KLSMgICBpZiBkZWZpbmVkKEJPT1NUX1BSRURF
Rl9ERVRBSUxfQ09NUF9ERVRFQ1RFRCkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfS0NDX0VN
VUxBVEVEIEJPT1NUX0NPTVBfS0NDX0RFVEVDVElPTgotIyAgIGVsc2UKLSMgICAgICAgdW5kZWYg
Qk9PU1RfQ09NUF9LQ0MKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfS0NDIEJPT1NUX0NPTVBf
S0NDX0RFVEVDVElPTgotIyAgIGVuZGlmCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBfS0NDX0FWQUlM
QUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvY29tcF9kZXRlY3RlZC5oPgot
I2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfQ09NUF9LQ0NfTkFNRSAiS2FpIEMrKyIKLQotI2VuZGlm
Ci0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9E
RUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9LQ0MsQk9PU1RfQ09NUF9LQ0NfTkFNRSkKLQotI2lmZGVm
IEJPT1NUX0NPTVBfS0NDX0VNVUxBVEVECi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90
ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0NPTVBfS0NDX0VNVUxBVEVE
LEJPT1NUX0NPTVBfS0NDX05BTUUpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9sbHZtLmggYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvbGx2
bS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTY1NGViOGNlYzA3MWY5ZjFlODk3
OGQ4M2IzYmU5OGQwNjRhOTBkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRl
Zi9jb21waWxlci9sbHZtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotQ29w
eXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBM
SUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8x
XzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfQ09NUElMRVJfTExWTV9ICi0jZGVm
aW5lIEJPT1NUX1BSRURFRl9DT01QSUxFUl9MTFZNX0gKLQotLyogT3RoZXIgY29tcGlsZXJzIHRo
YXQgZW11bGF0ZSB0aGlzIG9uZSBuZWVkIHRvIGJlIGRldGVjdGVkIGZpcnN0LiAqLwotCi0jaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL2NvbXBpbGVyL2NsYW5nLmg+Ci0KLSNpbmNsdWRlIDxib29zdC9w
cmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgot
Ci0vKmAKLVtoZWFkaW5nIGBCT09TVF9DT01QX0xMVk1gXQotCi1bQGh0dHA6Ly9lbi53aWtpcGVk
aWEub3JnL3dpa2kvTExWTSBMTFZNXSBjb21waWxlci4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRl
Zl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfX2xsdm1fX2BdIFtf
X3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgXQotICovCi0KLSNkZWZpbmUgQk9PU1RfQ09NUF9M
TFZNIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmluZWQoX19s
bHZtX18pCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBfTExWTV9ERVRFQ1RJT04gQk9PU1RfVkVSU0lP
Tl9OVU1CRVJfQVZBSUxBQkxFCi0jZW5kaWYKLQotI2lmZGVmIEJPT1NUX0NPTVBfTExWTV9ERVRF
Q1RJT04KLSMgICBpZiBkZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfQ09NUF9ERVRFQ1RFRCkK
LSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfTExWTV9FTVVMQVRFRCBCT09TVF9DT01QX0xMVk1f
REVURUNUSU9OCi0jICAgZWxzZQotIyAgICAgICB1bmRlZiBCT09TVF9DT01QX0xMVk0KLSMgICAg
ICAgZGVmaW5lIEJPT1NUX0NPTVBfTExWTSBCT09TVF9DT01QX0xMVk1fREVURUNUSU9OCi0jICAg
ZW5kaWYKLSMgICBkZWZpbmUgQk9PU1RfQ09NUF9MTFZNX0FWQUlMQUJMRQotIyAgIGluY2x1ZGUg
PGJvb3N0L3ByZWRlZi9kZXRhaWwvY29tcF9kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUg
Qk9PU1RfQ09NUF9MTFZNX05BTUUgIkxMVk0iCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3Qv
cHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0NP
TVBfTExWTSxCT09TVF9DT01QX0xMVk1fTkFNRSkKLQotI2lmZGVmIEJPT1NUX0NPTVBfTExWTV9F
TVVMQVRFRAotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJF
REVGX0RFQ0xBUkVfVEVTVChCT09TVF9DT01QX0xMVk1fRU1VTEFURUQsQk9PU1RfQ09NUF9MTFZN
X05BTUUpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9tZXRhd2FyZS5oIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVyL21ldGF3YXJlLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMzIwMzljZWY1MjU3MjYxYTRkZDcwMGM4NWZh
ZTQ3YjBiNTRiYWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBp
bGVyL21ldGF3YXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotQ29weXJp
Z2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNv
ZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAu
dHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfQ09NUElMRVJfTUVUQVdBUkVfSAotI2Rl
ZmluZSBCT09TVF9QUkVERUZfQ09NUElMRVJfTUVUQVdBUkVfSAotCi0jaW5jbHVkZSA8Ym9vc3Qv
cHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4K
LQotLypgCi1baGVhZGluZyBgQk9PU1RfQ09NUF9ISUdIQ2BdCi0KLU1ldGFXYXJlIEhpZ2ggQy9D
KysgY29tcGlsZXIuCi0KLVt0YWJsZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRl
Zl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19ISUdIQ19fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9f
XV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9DT01QX0hJR0hDIEJPT1NUX1ZFUlNJT05f
TlVNQkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmluZWQoX19ISUdIQ19fKQotIyAgIGRlZmlu
ZSBCT09TVF9DT01QX0hJR0hDX0RFVEVDVElPTiBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFC
TEUKLSNlbmRpZgotCi0jaWZkZWYgQk9PU1RfQ09NUF9ISUdIQ19ERVRFQ1RJT04KLSMgICBpZiBk
ZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfQ09NUF9ERVRFQ1RFRCkKLSMgICAgICAgZGVmaW5l
IEJPT1NUX0NPTVBfSElHSENfRU1VTEFURUQgQk9PU1RfQ09NUF9ISUdIQ19ERVRFQ1RJT04KLSMg
ICBlbHNlCi0jICAgICAgIHVuZGVmIEJPT1NUX0NPTVBfSElHSEMKLSMgICAgICAgZGVmaW5lIEJP
T1NUX0NPTVBfSElHSEMgQk9PU1RfQ09NUF9ISUdIQ19ERVRFQ1RJT04KLSMgICBlbmRpZgotIyAg
IGRlZmluZSBCT09TVF9DT01QX0hJR0hDX0FWQUlMQUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0L3By
ZWRlZi9kZXRhaWwvY29tcF9kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfQ09N
UF9ISUdIQ19OQU1FICJNZXRhV2FyZSBIaWdoIEMvQysrIgotCi0jZW5kaWYKLQotI2luY2x1ZGUg
PGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChC
T09TVF9DT01QX0hJR0hDLEJPT1NUX0NPTVBfSElHSENfTkFNRSkKLQotI2lmZGVmIEJPT1NUX0NP
TVBfSElHSENfRU1VTEFURUQKLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4K
LUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9ISUdIQ19FTVVMQVRFRCxCT09T
VF9DT01QX0hJR0hDX05BTUUpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9tZXRyb3dlcmtzLmggYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIv
bWV0cm93ZXJrcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmQ3MzliOTU4YjE0
NjMxMTg1NzQzMTg0Y2FkOWE2MTliMmNmNzU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3ByZWRlZi9jb21waWxlci9tZXRyb3dlcmtzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NyAr
MCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfQ09NUElM
RVJfTUVUUk9XRVJLU19ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9DT01QSUxFUl9NRVRST1dFUktT
X0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUg
PGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0NPTVBfTVdFUktT
YF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvZGVXYXJyaW9yIE1ldHJvd2Vy
a3MgQ29kZVdhcnJpb3JdIGNvbXBpbGVyLgotVmVyc2lvbiBudW1iZXIgYXZhaWxhYmxlIGFzIG1h
am9yLCBtaW5vciwgYW5kIHBhdGNoLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9f
XSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fTVdFUktTX19gXSBbX19wcmVkZWZf
ZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fQ1dDQ19fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0K
LQotICAgIFtbYF9fQ1dDQ19fYF0gW1YuUi5QXV0KLSAgICBbW2BfX01XRVJLU19fYF0gW1YuUi5Q
ID49IDQuMi4wXV0KLSAgICBbW2BfX01XRVJLU19fYF0gWzkuUi4wXV0KLSAgICBbW2BfX01XRVJL
U19fYF0gWzguUi4wXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9DT01QX01XRVJLUyBC
T09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBkZWZpbmVkKF9fTVdFUktT
X18pIHx8IGRlZmluZWQoX19DV0NDX18pCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfQ09NUF9NV0VS
S1NfREVURUNUSU9OKSAmJiBkZWZpbmVkKF9fQ1dDQ19fKQotIyAgICAgICBkZWZpbmUgQk9PU1Rf
Q09NUF9NV0VSS1NfREVURUNUSU9OIEJPT1NUX1BSRURFRl9NQUtFXzBYX1ZSUFAoX19DV0NDX18p
Ci0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9DT01QX01XRVJLU19ERVRFQ1RJT04p
ICYmIChfX01XRVJLU19fID49IDB4NDIwMCkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfTVdF
UktTX0RFVEVDVElPTiBCT09TVF9QUkVERUZfTUFLRV8wWF9WUlBQKF9fTVdFUktTX18pCi0jICAg
ZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9DT01QX01XRVJLU19ERVRFQ1RJT04pICYmIChf
X01XRVJLU19fID49IDB4MzIwNCkgLy8gbm90ZSB0aGUgInNraXAiOiAwNC0+OS4zCi0jICAgICAg
IGRlZmluZSBCT09TVF9DT01QX01XRVJLU19ERVRFQ1RJT04gQk9PU1RfVkVSU0lPTl9OVU1CRVIo
OSwoX19NV0VSS1NfXyklMTAwLTEsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NU
X0NPTVBfTVdFUktTX0RFVEVDVElPTikgJiYgKF9fTVdFUktTX18gPj0gMHgzMjAwKQotIyAgICAg
ICBkZWZpbmUgQk9PU1RfQ09NUF9NV0VSS1NfREVURUNUSU9OIEJPT1NUX1ZFUlNJT05fTlVNQkVS
KDksKF9fTVdFUktTX18pJTEwMCwwKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQoQk9PU1Rf
Q09NUF9NV0VSS1NfREVURUNUSU9OKSAmJiAoX19NV0VSS1NfXyA+PSAweDMwMDApCi0jICAgICAg
IGRlZmluZSBCT09TVF9DT01QX01XRVJLU19ERVRFQ1RJT04gQk9PU1RfVkVSU0lPTl9OVU1CRVIo
OCwoX19NV0VSS1NfXyklMTAwLDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9D
T01QX01XRVJLU19ERVRFQ1RJT04pCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX01XRVJLU19E
RVRFQ1RJT04gQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgZW5kaWYKLSNlbmRp
ZgotCi0jaWZkZWYgQk9PU1RfQ09NUF9NV0VSS1NfREVURUNUSU9OCi0jICAgaWYgZGVmaW5lZChC
T09TVF9QUkVERUZfREVUQUlMX0NPTVBfREVURUNURUQpCi0jICAgICAgIGRlZmluZSBCT09TVF9D
T01QX01XRVJLU19FTVVMQVRFRCBCT09TVF9DT01QX01XRVJLU19ERVRFQ1RJT04KLSMgICBlbHNl
Ci0jICAgICAgIHVuZGVmIEJPT1NUX0NPTVBfTVdFUktTCi0jICAgICAgIGRlZmluZSBCT09TVF9D
T01QX01XRVJLUyBCT09TVF9DT01QX01XRVJLU19ERVRFQ1RJT04KLSMgICBlbmRpZgotIyAgIGRl
ZmluZSBCT09TVF9DT01QX01XRVJLU19BVkFJTEFCTEUKLSMgICBpbmNsdWRlIDxib29zdC9wcmVk
ZWYvZGV0YWlsL2NvbXBfZGV0ZWN0ZWQuaD4KLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0NPTVBf
TVdFUktTX05BTUUgIk1ldHJvd2Vya3MgQ29kZVdhcnJpb3IiCi0KLSNlbmRpZgotCi0jaW5jbHVk
ZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNU
KEJPT1NUX0NPTVBfTVdFUktTLEJPT1NUX0NPTVBfTVdFUktTX05BTUUpCi0KLSNpZmRlZiBCT09T
VF9DT01QX01XRVJLU19FTVVMQVRFRAotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVz
dC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9DT01QX01XRVJLU19FTVVMQVRF
RCxCT09TVF9DT01QX01XRVJLU19OQU1FKQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvbWljcm90ZWMu
aCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21w
aWxlci9taWNyb3RlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjZhNmQyYWQ5
ZTE2ZGY1MDRiNWRlMGRjMjZmMzRmYWMyMjU3M2JmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3ByZWRlZi9jb21waWxlci9taWNyb3RlYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMg
KzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNj
b21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0NPTVBJ
TEVSX01JQ1JPVEVDX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0NPTVBJTEVSX01JQ1JPVEVDX0gK
LQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJv
b3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0NPTVBfTVJJYF0KLQot
W0BodHRwOi8vd3d3Lm1lbnRvci5jb20vbWljcm90ZWMvIE1pY3JvdGVjIEMvQysrXSBjb21waWxl
ci4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25f
X11dCi0KLSAgICBbW2BfTVJJYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBdCi0gKi8K
LQotI2RlZmluZSBCT09TVF9DT01QX01SSSBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxB
QkxFCi0KLSNpZiBkZWZpbmVkKF9NUkkpCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBfTVJJX0RFVEVD
VElPTiBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSNlbmRpZgotCi0jaWZkZWYgQk9P
U1RfQ09NUF9NUklfREVURUNUSU9OCi0jICAgaWYgZGVmaW5lZChCT09TVF9QUkVERUZfREVUQUlM
X0NPTVBfREVURUNURUQpCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX01SSV9FTVVMQVRFRCBC
T09TVF9DT01QX01SSV9ERVRFQ1RJT04KLSMgICBlbHNlCi0jICAgICAgIHVuZGVmIEJPT1NUX0NP
TVBfTVJJCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX01SSSBCT09TVF9DT01QX01SSV9ERVRF
Q1RJT04KLSMgICBlbmRpZgotIyAgIGRlZmluZSBCT09TVF9DT01QX01SSV9BVkFJTEFCTEUKLSMg
ICBpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL2NvbXBfZGV0ZWN0ZWQuaD4KLSNlbmRpZgot
Ci0jZGVmaW5lIEJPT1NUX0NPTVBfTVJJX05BTUUgIk1pY3JvdGVjIEMvQysrIgotCi0jZW5kaWYK
LQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RF
Q0xBUkVfVEVTVChCT09TVF9DT01QX01SSSxCT09TVF9DT01QX01SSV9OQU1FKQotCi0jaWZkZWYg
Qk9PU1RfQ09NUF9NUklfRU1VTEFURUQKLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rl
c3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9NUklfRU1VTEFURUQs
Qk9PU1RfQ09NUF9NUklfTkFNRSkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVyL21wdy5oIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVyL21wdy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTgzMzA2NDZlMDMyODZmNjJjMDVkMjRm
OThmM2M1ZWY3OTE4NmUyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9j
b21waWxlci9tcHcuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi1Db3B5cmln
aHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9DT01QSUxFUl9NUFdfSAotI2RlZmluZSBC
T09TVF9QUkVERUZfQ09NUElMRVJfTVBXX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJz
aW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hl
YWRpbmcgYEJPT1NUX0NPTVBfTVBXYF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp
L01hY2ludG9zaF9Qcm9ncmFtbWVyJTI3c19Xb3Jrc2hvcCBNUFcgQysrXSBjb21waWxlci4KLVZl
cnNpb24gbnVtYmVyIGF2YWlsYWJsZSBhcyBtYWpvciwgYW5kIG1pbm9yLgotCi1bdGFibGUKLSAg
ICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9f
TVJDX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYE1QV19DYF0gW19fcHJlZGVm
X2RldGVjdGlvbl9fXV0KLSAgICBbW2BNUFdfQ1BMVVNgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19d
XQotCi0gICAgW1tgX19NUkNfX2BdIFtWLlIuMF1dCi0gICAgXQotICovCi0KLSNkZWZpbmUgQk9P
U1RfQ09NUF9NUFcgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgZGVm
aW5lZChfX01SQ19fKSB8fCBkZWZpbmVkKE1QV19DKSB8fCBkZWZpbmVkKE1QV19DUExVUykKLSMg
ICBpZiAhZGVmaW5lZChCT09TVF9DT01QX01QV19ERVRFQ1RJT04pICYmIGRlZmluZWQoX19NUkNf
XykKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfTVBXX0RFVEVDVElPTiBCT09TVF9QUkVERUZf
TUFLRV8wWF9WVlJSKF9fTVJDX18pCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9D
T01QX01QV19ERVRFQ1RJT04pCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX01QV19ERVRFQ1RJ
T04gQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgZW5kaWYKLSNlbmRpZgotCi0j
aWZkZWYgQk9PU1RfQ09NUF9NUFdfREVURUNUSU9OCi0jICAgaWYgZGVmaW5lZChCT09TVF9QUkVE
RUZfREVUQUlMX0NPTVBfREVURUNURUQpCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX01QV19F
TVVMQVRFRCBCT09TVF9DT01QX01QV19ERVRFQ1RJT04KLSMgICBlbHNlCi0jICAgICAgIHVuZGVm
IEJPT1NUX0NPTVBfTVBXCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX01QVyBCT09TVF9DT01Q
X01QV19ERVRFQ1RJT04KLSMgICBlbmRpZgotIyAgIGRlZmluZSBCT09TVF9DT01QX01QV19BVkFJ
TEFCTEUKLSMgICBpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL2NvbXBfZGV0ZWN0ZWQuaD4K
LSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0NPTVBfTVBXX05BTUUgIk1QVyBDKysiCi0KLSNlbmRp
ZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZf
REVDTEFSRV9URVNUKEJPT1NUX0NPTVBfTVBXLEJPT1NUX0NPTVBfTVBXX05BTUUpCi0KLSNpZmRl
ZiBCT09TVF9DT01QX01QV19FTVVMQVRFRAotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwv
dGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9DT01QX01QV19FTVVMQVRF
RCxCT09TVF9DT01QX01QV19OQU1FKQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29tcGlsZXIvcGFsbS5oIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVyL3Bh
bG0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA3OTI1YTY1MTFmMWQ2NmExNTkw
MDQ4M2UxMjUxOGRjOTk4YzQ2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVk
ZWYvY29tcGlsZXIvcGFsbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLUNv
cHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29z
dCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUg
TElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0NPTVBJTEVSX1BBTE1fSAotI2Rl
ZmluZSBCT09TVF9QUkVERUZfQ09NUElMRVJfUEFMTV9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVk
ZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0v
KmAKLVtoZWFkaW5nIGBCT09TVF9DT01QX1BBTE1gXQotCi1QYWxtIEMvQysrIGNvbXBpbGVyLgot
VmVyc2lvbiBudW1iZXIgYXZhaWxhYmxlIGFzIG1ham9yLCBtaW5vciwgYW5kIHBhdGNoLgotCi1b
dGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQot
ICAgIFtbYF9QQUNDX1ZFUmBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BfUEFD
Q19WRVJgXSBbVi5SLlBdXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0NPTVBfUEFMTSBC
T09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBkZWZpbmVkKF9QQUNDX1ZF
UikKLSMgICBkZWZpbmUgQk9PU1RfQ09NUF9QQUxNX0RFVEVDVElPTiBCT09TVF9QUkVERUZfTUFL
RV8wWF9WUlJQUDAwMChfUEFDQ19WRVIpCi0jZW5kaWYKLQotI2lmZGVmIEJPT1NUX0NPTVBfUEFM
TV9ERVRFQ1RJT04KLSMgICBpZiBkZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfQ09NUF9ERVRF
Q1RFRCkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfUEFMTV9FTVVMQVRFRCBCT09TVF9DT01Q
X1BBTE1fREVURUNUSU9OCi0jICAgZWxzZQotIyAgICAgICB1bmRlZiBCT09TVF9DT01QX1BBTE0K
LSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfUEFMTSBCT09TVF9DT01QX1BBTE1fREVURUNUSU9O
Ci0jICAgZW5kaWYKLSMgICBkZWZpbmUgQk9PU1RfQ09NUF9QQUxNX0FWQUlMQUJMRQotIyAgIGlu
Y2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvY29tcF9kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNk
ZWZpbmUgQk9PU1RfQ09NUF9QQUxNX05BTUUgIlBhbG0gQy9DKysiCi0KLSNlbmRpZgotCi0jaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9U
RVNUKEJPT1NUX0NPTVBfUEFMTSxCT09TVF9DT01QX1BBTE1fTkFNRSkKLQotI2lmZGVmIEJPT1NU
X0NPTVBfUEFMTV9FTVVMQVRFRAotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5o
PgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9DT01QX1BBTE1fRU1VTEFURUQsQk9P
U1RfQ09NUF9QQUxNX05BTUUpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9wZ2kuaCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9wZ2kuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAxNmFlYjA4MDZhYTczNTZkMjlhNjYwMTI3
NjRlNDJmOGMzM2FjMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvY29t
cGlsZXIvcGdpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotQ29weXJpZ2h0
IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNF
XzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0
KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfQ09NUElMRVJfUEdJX0gKLSNkZWZpbmUgQk9P
U1RfUFJFREVGX0NPTVBJTEVSX1BHSV9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lv
bl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFk
aW5nIGBCT09TVF9DT01QX1BHSWBdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9U
aGVfUG9ydGxhbmRfR3JvdXAgUG9ydGxhbmQgR3JvdXAgQy9DKytdIGNvbXBpbGVyLgotCi1bdGFi
bGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAg
IFtbYF9fUEdJYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLQotICAgIFtbYF9fUEdJQ19fYCwg
YF9fUEdJQ19NSU5PUl9fYCwgYF9fUEdJQ19QQVRDSExFVkVMX19gXSBbVi5SLlBdXQotICAgIF0K
LSAqLwotCi0jZGVmaW5lIEJPT1NUX0NPTVBfUEdJIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9B
VkFJTEFCTEUKLQotI2lmIGRlZmluZWQoX19QR0kpCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfQ09N
UF9QR0lfREVURUNUSU9OKSAmJiAoZGVmaW5lZChfX1BHSUNfXykgJiYgZGVmaW5lZChfX1BHSUNf
TUlOT1JfXykgJiYgZGVmaW5lZChfX1BHSUNfUEFUQ0hMRVZFTF9fKSkKLSMgICAgICAgZGVmaW5l
IEJPT1NUX0NPTVBfUEdJX0RFVEVDVElPTiBCT09TVF9WRVJTSU9OX05VTUJFUihfX1BHSUNfXyxf
X1BHSUNfTUlOT1JfXyxfX1BHSUNfUEFUQ0hMRVZFTF9fKQotIyAgIGVuZGlmCi0jICAgaWYgIWRl
ZmluZWQoQk9PU1RfQ09NUF9QR0lfREVURUNUSU9OKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09N
UF9QR0lfREVURUNUSU9OIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotIyAgIGVuZGlm
Ci0jZW5kaWYKLQotI2lmZGVmIEJPT1NUX0NPTVBfUEdJX0RFVEVDVElPTgotIyAgIGlmIGRlZmlu
ZWQoQk9PU1RfUFJFREVGX0RFVEFJTF9DT01QX0RFVEVDVEVEKQotIyAgICAgICBkZWZpbmUgQk9P
U1RfQ09NUF9QR0lfRU1VTEFURUQgQk9PU1RfQ09NUF9QR0lfREVURUNUSU9OCi0jICAgZWxzZQot
IyAgICAgICB1bmRlZiBCT09TVF9DT01QX1BHSQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9Q
R0kgQk9PU1RfQ09NUF9QR0lfREVURUNUSU9OCi0jICAgZW5kaWYKLSMgICBkZWZpbmUgQk9PU1Rf
Q09NUF9QR0lfQVZBSUxBQkxFCi0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC9jb21w
X2RldGVjdGVkLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBCT09TVF9DT01QX1BHSV9OQU1FICJQb3J0
bGFuZCBHcm91cCBDL0MrKyIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0
YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9QR0ksQk9P
U1RfQ09NUF9QR0lfTkFNRSkKLQotI2lmZGVmIEJPT1NUX0NPTVBfUEdJX0VNVUxBVEVECi0jaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9U
RVNUKEJPT1NUX0NPTVBfUEdJX0VNVUxBVEVELEJPT1NUX0NPTVBfUEdJX05BTUUpCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3By
ZWRlZi9jb21waWxlci9zZ2lfbWlwc3Byby5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVyL3NnaV9taXBzcHJvLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwNzM5ZjBjM2M4YzZkZThjMjcyMDczNjgxYTRmNjgyZjYzNmMx
YjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVyL3NnaV9t
aXBzcHJvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJl
bmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQot
Ki8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfQ09NUElMRVJfU0dJX01JUFNQUk9fSAotI2RlZmlu
ZSBCT09TVF9QUkVERUZfQ09NUElMRVJfU0dJX01JUFNQUk9fSAotCi0jaW5jbHVkZSA8Ym9vc3Qv
cHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4K
LQotLypgCi1baGVhZGluZyBgQk9PU1RfQ09NUF9TR0lgXQotCi1bQGh0dHA6Ly9lbi53aWtpcGVk
aWEub3JnL3dpa2kvTUlQU3BybyBTR0kgTUlQU3Byb10gY29tcGlsZXIuCi1WZXJzaW9uIG51bWJl
ciBhdmFpbGFibGUgYXMgbWFqb3IsIG1pbm9yLCBhbmQgcGF0Y2guCi0KLVt0YWJsZQotICAgIFtb
X19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19zZ2lg
XSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYHNnaWBdIFtfX3ByZWRlZl9kZXRlY3Rp
b25fX11dCi0KLSAgICBbW2BfU0dJX0NPTVBJTEVSX1ZFUlNJT05gXSBbVi5SLlBdXQotICAgIFtb
YF9DT01QSUxFUl9WRVJTSU9OYF0gW1YuUi5QXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09T
VF9DT01QX1NHSSBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBkZWZp
bmVkKF9fc2dpKSB8fCBkZWZpbmVkKHNnaSkKLSMgICBpZiAhZGVmaW5lZChCT09TVF9DT01QX1NH
SV9ERVRFQ1RJT04pICYmIGRlZmluZWQoX1NHSV9DT01QSUxFUl9WRVJTSU9OKQotIyAgICAgICBk
ZWZpbmUgQk9PU1RfQ09NUF9TR0lfREVURUNUSU9OIEJPT1NUX1BSRURFRl9NQUtFXzEwX1ZSUChf
U0dJX0NPTVBJTEVSX1ZFUlNJT04pCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9D
T01QX1NHSV9ERVRFQ1RJT04pICYmIGRlZmluZWQoX0NPTVBJTEVSX1ZFUlNJT04pCi0jICAgICAg
IGRlZmluZSBCT09TVF9DT01QX1NHSV9ERVRFQ1RJT04gQk9PU1RfUFJFREVGX01BS0VfMTBfVlJQ
KF9DT01QSUxFUl9WRVJTSU9OKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfQ09N
UF9TR0lfREVURUNUSU9OKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9TR0lfREVURUNUSU9O
IEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotIyAgIGVuZGlmCi0jZW5kaWYKLQotI2lm
ZGVmIEJPT1NUX0NPTVBfU0dJX0RFVEVDVElPTgotIyAgIGlmIGRlZmluZWQoQk9PU1RfUFJFREVG
X0RFVEFJTF9DT01QX0RFVEVDVEVEKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9TR0lfRU1V
TEFURUQgQk9PU1RfQ09NUF9TR0lfREVURUNUSU9OCi0jICAgZWxzZQotIyAgICAgICB1bmRlZiBC
T09TVF9DT01QX1NHSQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9TR0kgQk9PU1RfQ09NUF9T
R0lfREVURUNUSU9OCi0jICAgZW5kaWYKLSMgICBkZWZpbmUgQk9PU1RfQ09NUF9TR0lfQVZBSUxB
QkxFCi0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC9jb21wX2RldGVjdGVkLmg+Ci0j
ZW5kaWYKLQotI2RlZmluZSBCT09TVF9DT01QX1NHSV9OQU1FICJTR0kgTUlQU3BybyIKLQotI2Vu
ZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURF
Rl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9TR0ksQk9PU1RfQ09NUF9TR0lfTkFNRSkKLQotI2lm
ZGVmIEJPT1NUX0NPTVBfU0dJX0VNVUxBVEVECi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFp
bC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0NPTVBfU0dJX0VNVUxB
VEVELEJPT1NUX0NPTVBfU0dJX05BTUUpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci9zdW5wcm8uaCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxl
ci9zdW5wcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJjMzkyNjAxMzZlZjY4
Y2UxMGUyN2MxNmI1ZjZhMTEwODZlNGJkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9wcmVkZWYvY29tcGlsZXIvc3VucHJvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBA
Ci0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcv
TElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfQ09NUElMRVJfU1VO
UFJPX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0NPTVBJTEVSX1NVTlBST19ICi0KLSNpbmNsdWRl
IDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYv
bWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9DT01QX1NVTlBST2BdCi0KLVtAaHR0cDov
L2VuLndpa2lwZWRpYS5vcmcvd2lraS9PcmFjbGVfU29sYXJpc19TdHVkaW8gT3JhY2xlIFNvbGFy
aXMgU3R1ZGlvXSBjb21waWxlci4KLVZlcnNpb24gbnVtYmVyIGF2YWlsYWJsZSBhcyBtYWpvciwg
bWlub3IsIGFuZCBwYXRjaC4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19f
cHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfX1NVTlBST19DQ2BdIFtfX3ByZWRlZl9kZXRl
Y3Rpb25fX11dCi0gICAgW1tgX19TVU5QUk9fQ2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0K
LSAgICBbW2BfX1NVTlBST19DQ2BdIFtWLlIuUF1dCi0gICAgW1tgX19TVU5QUk9fQ2BdIFtWLlIu
UF1dCi0gICAgW1tgX19TVU5QUk9fQ0NgXSBbVlYuUlIuUF1dCi0gICAgW1tgX19TVU5QUk9fQ2Bd
IFtWVi5SUi5QXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9DT01QX1NVTlBSTyBCT09T
VF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBkZWZpbmVkKF9fU1VOUFJPX0ND
KSB8fCBkZWZpbmVkKF9fU1VOUFJPX0MpCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfQ09NUF9TVU5Q
Uk9fREVURUNUSU9OKSAmJiBkZWZpbmVkKF9fU1VOUFJPX0NDKQotIyAgICAgICBpZiAoX19TVU5Q
Uk9fQ0MgPCAweDUxMDApCi0jICAgICAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9TVU5QUk9fREVU
RUNUSU9OIEJPT1NUX1BSRURFRl9NQUtFXzBYX1ZSUChfX1NVTlBST19DQykKLSMgICAgICAgZWxz
ZQotIyAgICAgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfU1VOUFJPX0RFVEVDVElPTiBCT09TVF9Q
UkVERUZfTUFLRV8wWF9WVlJSUChfX1NVTlBST19DQykKLSMgICAgICAgZW5kaWYKLSMgICBlbmRp
ZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0NPTVBfU1VOUFJPX0RFVEVDVElPTikgJiYgZGVmaW5l
ZChfX1NVTlBST19DKQotIyAgICAgICBpZiAoX19TVU5QUk9fQyA8IDB4NTEwMCkKLSMgICAgICAg
ICAgIGRlZmluZSBCT09TVF9DT01QX1NVTlBST19ERVRFQ1RJT04gQk9PU1RfUFJFREVGX01BS0Vf
MFhfVlJQKF9fU1VOUFJPX0MpCi0jICAgICAgIGVsc2UKLSMgICAgICAgICAgIGRlZmluZSBCT09T
VF9DT01QX1NVTlBST19ERVRFQ1RJT04gQk9PU1RfUFJFREVGX01BS0VfMFhfVlZSUlAoX19TVU5Q
Uk9fQykKLSMgICAgICAgZW5kaWYKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0NP
TVBfU1VOUFJPX0RFVEVDVElPTikKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfU1VOUFJPX0RF
VEVDVElPTiBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSMgICBlbmRpZgotI2VuZGlm
Ci0KLSNpZmRlZiBCT09TVF9DT01QX1NVTlBST19ERVRFQ1RJT04KLSMgICBpZiBkZWZpbmVkKEJP
T1NUX1BSRURFRl9ERVRBSUxfQ09NUF9ERVRFQ1RFRCkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NP
TVBfU1VOUFJPX0VNVUxBVEVEIEJPT1NUX0NPTVBfU1VOUFJPX0RFVEVDVElPTgotIyAgIGVsc2UK
LSMgICAgICAgdW5kZWYgQk9PU1RfQ09NUF9TVU5QUk8KLSMgICAgICAgZGVmaW5lIEJPT1NUX0NP
TVBfU1VOUFJPIEJPT1NUX0NPTVBfU1VOUFJPX0RFVEVDVElPTgotIyAgIGVuZGlmCi0jICAgZGVm
aW5lIEJPT1NUX0NPTVBfU1VOUFJPX0FWQUlMQUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZWRl
Zi9kZXRhaWwvY29tcF9kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfQ09NUF9T
VU5QUk9fTkFNRSAiT3JhY2xlIFNvbGFyaXMgU3R1ZGlvIgotCi0jZW5kaWYKLQotI2luY2x1ZGUg
PGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChC
T09TVF9DT01QX1NVTlBSTyxCT09TVF9DT01QX1NVTlBST19OQU1FKQotCi0jaWZkZWYgQk9PU1Rf
Q09NUF9TVU5QUk9fRU1VTEFURUQKLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3Qu
aD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9TVU5QUk9fRU1VTEFURUQs
Qk9PU1RfQ09NUF9TVU5QUk9fTkFNRSkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVyL3RlbmRyYS5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVy
L3RlbmRyYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmJjNWU0ZWY1NjZmMDY5
ZjViMzBiMThjNmQ3Y2I4Y2QxZTA2MjI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3ByZWRlZi9jb21waWxlci90ZW5kcmEuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAK
LS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0
aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9DT01QSUxFUl9URU5E
UkFfSAotI2RlZmluZSBCT09TVF9QUkVERUZfQ09NUElMRVJfVEVORFJBX0gKLQotI2luY2x1ZGUg
PGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9t
YWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0NPTVBfVEVORFJBYF0KLQotW0BodHRwOi8v
ZW4ud2lraXBlZGlhLm9yZy93aWtpL1RlbkRSQV9Db21waWxlciBUZW5EUkEgQy9DKytdIGNvbXBp
bGVyLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lv
bl9fXV0KLQotICAgIFtbYF9fVGVuRFJBX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAg
IF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0NPTVBfVEVORFJBIEJPT1NUX1ZFUlNJT05fTlVNQkVS
X05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmluZWQoX19UZW5EUkFfXykKLSMgICBkZWZpbmUgQk9P
U1RfQ09NUF9URU5EUkFfREVURUNUSU9OIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQot
I2VuZGlmCi0KLSNpZmRlZiBCT09TVF9DT01QX1RFTkRSQV9ERVRFQ1RJT04KLSMgICBpZiBkZWZp
bmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfQ09NUF9ERVRFQ1RFRCkKLSMgICAgICAgZGVmaW5lIEJP
T1NUX0NPTVBfVEVORFJBX0VNVUxBVEVEIEJPT1NUX0NPTVBfVEVORFJBX0RFVEVDVElPTgotIyAg
IGVsc2UKLSMgICAgICAgdW5kZWYgQk9PU1RfQ09NUF9URU5EUkEKLSMgICAgICAgZGVmaW5lIEJP
T1NUX0NPTVBfVEVORFJBIEJPT1NUX0NPTVBfVEVORFJBX0RFVEVDVElPTgotIyAgIGVuZGlmCi0j
ICAgZGVmaW5lIEJPT1NUX0NPTVBfVEVORFJBX0FWQUlMQUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0
L3ByZWRlZi9kZXRhaWwvY29tcF9kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1Rf
Q09NUF9URU5EUkFfTkFNRSAiVGVuRFJBIEMvQysrIgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJv
b3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09T
VF9DT01QX1RFTkRSQSxCT09TVF9DT01QX1RFTkRSQV9OQU1FKQotCi0jaWZkZWYgQk9PU1RfQ09N
UF9URU5EUkFfRU1VTEFURUQKLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4K
LUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9URU5EUkFfRU1VTEFURUQsQk9P
U1RfQ09NUF9URU5EUkFfTkFNRSkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVyL3Zpc3VhbGMuaCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9jb21waWxlci92
aXN1YWxjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MWU2MWVkNTIyN2Y0ZGJj
MTBiNjVkNDEwMzBkOGVlYmQ2OWQwNDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
cHJlZGVmL2NvbXBpbGVyL3Zpc3VhbGMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBA
Ci0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcv
TElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfQ09NUElMRVJfVklT
VUFMQ19ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9DT01QSUxFUl9WSVNVQUxDX0gKLQotLyogT3Ro
ZXIgY29tcGlsZXJzIHRoYXQgZW11bGF0ZSB0aGlzIG9uZSBuZWVkIHRvIGJlIGRldGVjdGVkIGZp
cnN0LiAqLwotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2NvbXBpbGVyL2NsYW5nLmg+Ci0KLSNp
bmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9w
cmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9DT01QX01TVkNgXQotCi1bQGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVmlzdWFsX3N0dWRpbyBNaWNyb3NvZnQgVmlzdWFs
IEMvQysrXSBjb21waWxlci4KLVZlcnNpb24gbnVtYmVyIGF2YWlsYWJsZSBhcyBtYWpvciwgbWlu
b3IsIGFuZCBwYXRjaC4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJl
ZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfTVNDX1ZFUmBdIFtfX3ByZWRlZl9kZXRlY3Rpb25f
X11dCi0KLSAgICBbW2BfTVNDX0ZVTExfVkVSYF0gW1YuUi5QXV0KLSAgICBbW2BfTVNDX1ZFUmBd
IFtWLlIuMF1dCi0gICAgXQotCi1bbm90ZSBSZWxlYXNlIG9mIFZpc3VhbCBTdHVkaW8gYWZ0ZXIg
MjAxNSB3aWxsIG5vIGxvbmdlciBiZSBpZGVudGlmaWVkCi1ieSBCb29zdCBQcmVkZWYgYXMgdGhl
IG1hcmtldGluZyB2ZXJzaW9uIG51bWJlci4gSW5zdGVhZCB3ZSB1c2UgdGhlCi1jb21waWxlciB2
ZXJzaW9uIG51bWJlciBkaXJlY3RseSwgaS5lLiB0aGUgX01TQ19WRVIgbnVtYmVyLl0KLSAqLwot
Ci0jZGVmaW5lIEJPT1NUX0NPTVBfTVNWQyBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxB
QkxFCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyAgIGlmICFkZWZpbmVkIChfTVNDX0ZVTExf
VkVSKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9NU1ZDX0JVSUxEIDAKLSMgICBlbHNlCi0g
ICAgICAgIC8qIGhvdyBtYW55IGRpZ2l0cyBkb2VzIHRoZSBidWlsZCBudW1iZXIgaGF2ZT8gKi8K
LSMgICAgICAgaWYgX01TQ19GVUxMX1ZFUiAvIDEwMDAwID09IF9NU0NfVkVSCi0gICAgICAgICAg
ICAvKiBmb3VyIGRpZ2l0cyAqLwotIyAgICAgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfTVNWQ19C
VUlMRCAoX01TQ19GVUxMX1ZFUiAlIDEwMDAwKQotIyAgICAgICBlbGlmIF9NU0NfRlVMTF9WRVIg
LyAxMDAwMDAgPT0gX01TQ19WRVIKLSAgICAgICAgICAgIC8qIGZpdmUgZGlnaXRzICovCi0jICAg
ICAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9NU1ZDX0JVSUxEIChfTVNDX0ZVTExfVkVSICUgMTAw
MDAwKQotIyAgICAgICBlbHNlCi0jICAgICAgICAgICBlcnJvciAiQ2Fubm90IGRldGVybWluZSBi
dWlsZCBudW1iZXIgZnJvbSBfTVNDX0ZVTExfVkVSIgotIyAgICAgICBlbmRpZgotIyAgIGVuZGlm
Ci0gICAgLyoKLSAgICBWUzIwMTQgd2FzIHNraXBwZWQgaW4gdGhlIHJlbGVhc2Ugc2VxdWVuY2Ug
Zm9yIE1TLiBXaGljaAotICAgIG1lYW5zIHRoYXQgdGhlIGNvbXBpbGVyIGFuZCBWUyBwcm9kdWN0
IHZlcnNpb25zIGFyZSBubyBsb25nZXIKLSAgICBpbiBzeW5jLiBIZW5jZSB3ZSBuZWVkIHRvIHVz
ZSBkaWZmZXJlbnQgZm9ybXVsYXMgZm9yCi0gICAgbWFwcGluZyBmcm9tIE1TQyB2ZXJzaW9uIHRv
IFZTIHByb2R1Y3QgdmVyc2lvbi4KLQotICAgIFZTMjAxNyBpcyBhIHRvdGFsIG5pZ2h0bWFyZSB3
aGVuIGl0IGNvbWVzIHRvIHZlcnNpb24gbnVtYmVycy4KLSAgICBIZW5jZSB0byBhdm9pZCBhcmd1
bWVudHMgcmVsYXRpbmcgdG8gdGhhdCBib3RoIHByZXNlbnQgYW5kCi0gICAgZnV0dXJlLi4gQW55
IHZlcnNpb24gYWZ0ZXIgVlMyMDE1IHdpbGwgdXNlIHNvbGVseSB0aGUgY29tcGlsZXIKLSAgICB2
ZXJzaW9uLCBpLmUuIGNsLmV4ZSwgYXMgdGhlIHZlcnNpb24gbnVtYmVyIGhlcmUuCi0gICAgKi8K
LSMgICBpZiAoX01TQ19WRVIgPiAxOTAwKQotIyAgICAgICBkZWZpbmUgQk9PU1RfQ09NUF9NU1ZD
X0RFVEVDVElPTiBCT09TVF9WRVJTSU9OX05VTUJFUihcCi0gICAgICAgICAgICBfTVNDX1ZFUi8x
MDAsXAotICAgICAgICAgICAgX01TQ19WRVIlMTAwLFwKLSAgICAgICAgICAgIEJPT1NUX0NPTVBf
TVNWQ19CVUlMRCkKLSMgICBlbGlmIChfTVNDX1ZFUiA+PSAxOTAwKQotIyAgICAgICBkZWZpbmUg
Qk9PU1RfQ09NUF9NU1ZDX0RFVEVDVElPTiBCT09TVF9WRVJTSU9OX05VTUJFUihcCi0gICAgICAg
ICAgICBfTVNDX1ZFUi8xMDAtNSxcCi0gICAgICAgICAgICBfTVNDX1ZFUiUxMDAsXAotICAgICAg
ICAgICAgQk9PU1RfQ09NUF9NU1ZDX0JVSUxEKQotIyAgIGVsc2UKLSMgICAgICAgZGVmaW5lIEJP
T1NUX0NPTVBfTVNWQ19ERVRFQ1RJT04gQk9PU1RfVkVSU0lPTl9OVU1CRVIoXAotICAgICAgICAg
ICAgX01TQ19WRVIvMTAwLTYsXAotICAgICAgICAgICAgX01TQ19WRVIlMTAwLFwKLSAgICAgICAg
ICAgIEJPT1NUX0NPTVBfTVNWQ19CVUlMRCkKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBC
T09TVF9DT01QX01TVkNfREVURUNUSU9OCi0jICAgaWYgZGVmaW5lZChCT09TVF9QUkVERUZfREVU
QUlMX0NPTVBfREVURUNURUQpCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX01TVkNfRU1VTEFU
RUQgQk9PU1RfQ09NUF9NU1ZDX0RFVEVDVElPTgotIyAgIGVsc2UKLSMgICAgICAgdW5kZWYgQk9P
U1RfQ09NUF9NU1ZDCi0jICAgICAgIGRlZmluZSBCT09TVF9DT01QX01TVkMgQk9PU1RfQ09NUF9N
U1ZDX0RFVEVDVElPTgotIyAgIGVuZGlmCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBfTVNWQ19BVkFJ
TEFCTEUKLSMgICBpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL2NvbXBfZGV0ZWN0ZWQuaD4K
LSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0NPTVBfTVNWQ19OQU1FICJNaWNyb3NvZnQgVmlzdWFs
IEMvQysrIgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5o
PgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9DT01QX01TVkMsQk9PU1RfQ09NUF9N
U1ZDX05BTUUpCi0KLSNpZmRlZiBCT09TVF9DT01QX01TVkNfRU1VTEFURUQKLSNpbmNsdWRlIDxi
b29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9P
U1RfQ09NUF9NU1ZDX0VNVUxBVEVELEJPT1NUX0NPTVBfTVNWQ19OQU1FKQotI2VuZGlmCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYv
Y29tcGlsZXIvd2F0Y29tLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9wcmVkZWYvY29tcGlsZXIvd2F0Y29tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGIwZTc3NzZkMDY0MTA1MGY2ZGVhYjdiNTkwZGNhMzNhOGZlNzcwYTIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2NvbXBpbGVyL3dhdGNvbS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUK
LURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0
dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1Rf
UFJFREVGX0NPTVBJTEVSX1dBVENPTV9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9DT01QSUxFUl9X
QVRDT01fSAotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4KLQotLypgCi1baGVhZGluZyBgQk9PU1RfQ09NUF9X
QVRDT01gXQotCi1bQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2F0Y29tIFdhdGNvbSBD
KytdIGNvbXBpbGVyLgotVmVyc2lvbiBudW1iZXIgYXZhaWxhYmxlIGFzIG1ham9yLCBhbmQgbWlu
b3IuCi0KLVt0YWJsZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9u
X19dXQotCi0gICAgW1tgX19XQVRDT01DX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotCi0g
ICAgW1tgX19XQVRDT01DX19gXSBbVi5SLlBdXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NU
X0NPTVBfV0FUQ09NIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRl
ZmluZWQoX19XQVRDT01DX18pCi0jICAgZGVmaW5lIEJPT1NUX0NPTVBfV0FUQ09NX0RFVEVDVElP
TiBCT09TVF9QUkVERUZfTUFLRV8xMF9WVlJSKF9fV0FUQ09NQ19fKQotI2VuZGlmCi0KLSNpZmRl
ZiBCT09TVF9DT01QX1dBVENPTV9ERVRFQ1RJT04KLSMgICBpZiBkZWZpbmVkKEJPT1NUX1BSRURF
Rl9ERVRBSUxfQ09NUF9ERVRFQ1RFRCkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfV0FUQ09N
X0VNVUxBVEVEIEJPT1NUX0NPTVBfV0FUQ09NX0RFVEVDVElPTgotIyAgIGVsc2UKLSMgICAgICAg
dW5kZWYgQk9PU1RfQ09NUF9XQVRDT00KLSMgICAgICAgZGVmaW5lIEJPT1NUX0NPTVBfV0FUQ09N
IEJPT1NUX0NPTVBfV0FUQ09NX0RFVEVDVElPTgotIyAgIGVuZGlmCi0jICAgZGVmaW5lIEJPT1NU
X0NPTVBfV0FUQ09NX0FWQUlMQUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwv
Y29tcF9kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfQ09NUF9XQVRDT01fTkFN
RSAiV2F0Y29tIEMrKyIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWls
L3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfQ09NUF9XQVRDT00sQk9P
U1RfQ09NUF9XQVRDT01fTkFNRSkKLQotI2lmZGVmIEJPT1NUX0NPTVBfV0FUQ09NX0VNVUxBVEVE
Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVD
TEFSRV9URVNUKEJPT1NUX0NPTVBfV0FUQ09NX0VNVUxBVEVELEJPT1NUX0NPTVBfV0FUQ09NX05B
TUUpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZWRlZi9kZXRhaWwvX2Nhc3NlcnQuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9kZXRhaWwvX2Nhc3NlcnQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTQwZTk0NGUyYmI1YzlmZWY0NzY5M2NlYTlkNzZlNDUyNzRj
ZDQ0NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvZGV0YWlsL19jYXNz
ZXJ0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUg
Uml2ZXJhIDIwMTEtMjAxMgotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50
eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8K
LQotI2lmbmRlZiBCT09TVF9QUkVERUZfREVUQUlMX19DQVNTRVJUX0gKLSNkZWZpbmUgQk9PU1Rf
UFJFREVGX0RFVEFJTF9fQ0FTU0VSVF9ICi0KLSNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQotI2lu
Y2x1ZGUgPGNhc3NlcnQ+Ci0jZWxzZQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcHJlZGVmL2RldGFpbC9fZXhjZXB0aW9uLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVkZWYvZGV0YWlsL19leGNlcHRpb24uaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZjVhNjY4N2E5ZmFhNmEzOTI3ODI3MzI1ZDdiMjVkODVjZWUzZDU4
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvZGV0YWlsL19leGNlcHRp
b24uaAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBS
aXZlcmEgMjAxMS0yMDEyCi1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwot
Ci0jaWZuZGVmIEJPT1NUX1BSRURFRl9ERVRBSUxfX0VYQ0VQVElPTl9ICi0jZGVmaW5lIEJPT1NU
X1BSRURFRl9ERVRBSUxfX0VYQ0VQVElPTl9ICi0KLSNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQot
I2luY2x1ZGUgPGV4Y2VwdGlvbj4KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9kZXRhaWwvY29tcF9k
ZXRlY3RlZC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJl
ZGVmL2RldGFpbC9jb21wX2RldGVjdGVkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGZkYTE4MDFiNjU3MWZiYWQxMjgxZWFkNzEwYzBlNGE5ZjYxZGMyOWMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2RldGFpbC9jb21wX2RldGVjdGVkLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMCArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMTQKLURp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4K
LShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJF
REVGX0RFVEFJTF9DT01QX0RFVEVDVEVECi0jZGVmaW5lIEJPT1NUX1BSRURFRl9ERVRBSUxfQ09N
UF9ERVRFQ1RFRCAxCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9kZXRhaWwvZW5kaWFuX2NvbXBhdC5oIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2RldGFpbC9lbmRpYW5f
Y29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MjVlNjgyM2MzMGM1M2Y0
NWM2YzRjNTU5ZDQ4Y2I1M2Y1YTY3NWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
cHJlZGVmL2RldGFpbC9lbmRpYW5fY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCww
IEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMTMKLURpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0RFVEFJTF9FTkRJQU5f
Q09NUEFUX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0RFVEFJTF9FTkRJQU5fQ09NUEFUX0gKLQot
I2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9vdGhlci9lbmRpYW4uaD4KLQotI2lmIEJPT1NUX0VORElB
Tl9CSUdfQllURQotIyAgIGRlZmluZSBCT09TVF9CSUdfRU5ESUFOCi0jICAgZGVmaW5lIEJPT1NU
X0JZVEVfT1JERVIgNDMyMQotI2VuZGlmCi0jaWYgQk9PU1RfRU5ESUFOX0xJVFRMRV9CWVRFCi0j
ICAgZGVmaW5lIEJPT1NUX0xJVFRMRV9FTkRJQU4KLSMgICBkZWZpbmUgQk9PU1RfQllURV9PUkRF
UiAxMjM0Ci0jZW5kaWYKLSNpZiBCT09TVF9FTkRJQU5fTElUVExFX1dPUkQKLSMgICBkZWZpbmUg
Qk9PU1RfUERQX0VORElBTgotIyAgIGRlZmluZSBCT09TVF9CWVRFX09SREVSIDIxMzQKLSNlbmRp
ZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZWRlZi9kZXRhaWwvb3NfZGV0ZWN0ZWQuaCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9kZXRhaWwvb3NfZGV0ZWN0ZWQuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhlMTBmOTkzYWY1MTk4N2VjYjI5NTI0ZGYzNjdi
NzBhYjYyMzk0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvZGV0YWls
L29zX2RldGVjdGVkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0vKgotQ29weXJp
Z2h0IFJlbmUgUml2ZXJhIDIwMTMKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK
LSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0RFVEFJTF9PU19ERVRFQ1RFRAotI2RlZmluZSBC
T09TVF9QUkVERUZfREVUQUlMX09TX0RFVEVDVEVEIDEKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2RldGFpbC90ZXN0
LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvZGV0
YWlsL3Rlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ2YTllNDA3ZDNlODJi
YThkNzI5ZWQ5MTgzOTA4NzBlYjFjMTYxMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9wcmVkZWYvZGV0YWlsL3Rlc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8q
Ci1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAxMS0yMDEyCi1EaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBm
aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNF
TlNFXzFfMC50eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9ERVRBSUxfVEVTVF9ICi0j
ZGVmaW5lIEJPT1NUX1BSRURFRl9ERVRBSUxfVEVTVF9ICi0KLSNpZiAhZGVmaW5lZChCT09TVF9Q
UkVERUZfSU5URVJOQUxfR0VORVJBVEVfVEVTVFMpCi0KLSNkZWZpbmUgQk9PU1RfUFJFREVGX0RF
Q0xBUkVfVEVTVCh4LHMpCi0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9oYXJkd2FyZS5oIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2hhcmR3YXJlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MmI3M2FmNjhhMjA1Y2MzN2M0ZDc2OTM3
M2QyNGI3MjNjNmRmY2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2hh
cmR3YXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKgotQ29weXJpZ2h0IENo
YXJseSBDaGV2YWxpZXIgMjAxNQotQ29weXJpZ2h0IEpvZWwgRmFsY291IDIwMTUKLURpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUg
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cu
Ym9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZiAhZGVmaW5lZChCT09TVF9QUkVE
RUZfSEFSRFdBUkVfSCkgfHwgZGVmaW5lZChCT09TVF9QUkVERUZfSU5URVJOQUxfR0VORVJBVEVf
VEVTVFMpCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9IQVJEV0FSRV9ICi0jZGVmaW5lIEJPT1NUX1BS
RURFRl9IQVJEV0FSRV9ICi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9oYXJkd2Fy
ZS9zaW1kLmg+Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2hhcmR3YXJlL3NpbWQuaCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9oYXJkd2FyZS9zaW1kLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNWM5ZGEyY2FiMjNhMGI2MDlkMGViNTc2MGNjMGM4
NjFmNGZlMDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2hhcmR3YXJl
L3NpbWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKgotQ29weXJpZ2h0IENo
YXJseSBDaGV2YWxpZXIgMjAxNQotQ29weXJpZ2h0IEpvZWwgRmFsY291IDIwMTUKLURpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUg
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cu
Ym9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYv
aGFyZHdhcmUvc2ltZC94ODYuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvaGFyZHdhcmUvc2lt
ZC94ODZfYW1kLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2hhcmR3YXJlL3NpbWQvYXJtLmg+
Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2hhcmR3YXJlL3NpbWQvcHBjLmg+Ci0KLSNpZm5kZWYg
Qk9PU1RfUFJFREVGX0hBUkRXQVJFX1NJTURfSAotI2RlZmluZSBCT09TVF9QUkVERUZfSEFSRFdB
UkVfU0lNRF9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLQot
LypgCi0gW3NlY3Rpb24gVXNpbmcgdGhlIGBCT09TVF9IV19TSU1EXypgIHByZWRlZnNdCi0gW2lu
Y2x1ZGUgLi4vZG9jL2hhcmR3YXJlX3NpbWQucWJrXQotIFtlbmRzZWN0XQotCi0gWy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIF0KLQotIFtzZWN0aW9uIGBCT09TVF9IV19TSU1EXypgXQot
Ci0gW2hlYWRpbmcgYEJPT1NUX0hXX1NJTURgXQotCi0gVGhlIFNJTUQgZXh0ZW5zaW9uIGRldGVj
dGVkIGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMuCi0gVmVyc2lvbiBudW1iZXIgZGVwZW5k
cyBvbiB0aGUgZGV0ZWN0ZWQgZXh0ZW5zaW9uLgotCi0gW3RhYmxlCi0gICAgIFtbX19wcmVkZWZf
c3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgIFtbYEJPT1NUX0hXX1NJTURf
WDg2X0FWQUlMQUJMRWBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgIFtbYEJPT1NUX0hX
X1NJTURfWDg2X0FNRF9BVkFJTEFCTEVgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgICBb
W2BCT09TVF9IV19TSU1EX0FSTV9BVkFJTEFCTEVgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQot
ICAgICBbW2BCT09TVF9IV19TSU1EX1BQQ19BVkFJTEFCTEVgXSBbX19wcmVkZWZfZGV0ZWN0aW9u
X19dXQotICAgICBdCi0KLSBbaW5jbHVkZSAuLi9pbmNsdWRlL2Jvb3N0L3ByZWRlZi9oYXJkd2Fy
ZS9zaW1kL3g4Ni5oXQotIFtpbmNsdWRlIC4uL2luY2x1ZGUvYm9vc3QvcHJlZGVmL2hhcmR3YXJl
L3NpbWQveDg2X2FtZC5oXQotIFtpbmNsdWRlIC4uL2luY2x1ZGUvYm9vc3QvcHJlZGVmL2hhcmR3
YXJlL3NpbWQvYXJtLmhdCi0gW2luY2x1ZGUgLi4vaW5jbHVkZS9ib29zdC9wcmVkZWYvaGFyZHdh
cmUvc2ltZC9wcGMuaF0KLQotIFtlbmRzZWN0XQotCi0gWy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIF0KLQotIFtzZWN0aW9uIGBCT09TVF9IV19TSU1EX1g4Nl8qX1ZFUlNJT05gXQotIFtp
bmNsdWRlIC4uL2luY2x1ZGUvYm9vc3QvcHJlZGVmL2hhcmR3YXJlL3NpbWQveDg2L3ZlcnNpb25z
LmhdCi0gW2VuZHNlY3RdCi0KLSBbc2VjdGlvbiBgQk9PU1RfSFdfU0lNRF9YODZfQU1EXypfVkVS
U0lPTmBdCi0gW2luY2x1ZGUgLi4vaW5jbHVkZS9ib29zdC9wcmVkZWYvaGFyZHdhcmUvc2ltZC94
ODZfYW1kL3ZlcnNpb25zLmhdCi0gW2VuZHNlY3RdCi0KLSBbc2VjdGlvbiBgQk9PU1RfSFdfU0lN
RF9BUk1fKl9WRVJTSU9OYF0KLSBbaW5jbHVkZSAuLi9pbmNsdWRlL2Jvb3N0L3ByZWRlZi9oYXJk
d2FyZS9zaW1kL2FybS92ZXJzaW9ucy5oXQotIFtlbmRzZWN0XQotCi0gW3NlY3Rpb24gYEJPT1NU
X0hXX1NJTURfUFBDXypfVkVSU0lPTmBdCi0gW2luY2x1ZGUgLi4vaW5jbHVkZS9ib29zdC9wcmVk
ZWYvaGFyZHdhcmUvc2ltZC9wcGMvdmVyc2lvbnMuaF0KLSBbZW5kc2VjdF0KLQotICovCi0KLS8v
IFdlIGNoZWNrIGlmIFNJTUQgZXh0ZW5zaW9uIG9mIG11bHRpcGxlcyBhcmNoaXRlY3R1cmVzIGhh
dmUgYmVlbiBkZXRlY3RlZCwKLS8vIGlmIHllcywgdGhlbiB0aGlzIGlzIGFuIGVycm9yIQotLy8K
LS8vIE5PVEU6IF9YODZfQU1EIGltcGxpZXMgX1g4Niwgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBj
aGVjayBmb3IgaXQgaGVyZSEKLS8vCi0jaWYgZGVmaW5lZChCT09TVF9IV19TSU1EX0FSTV9BVkFJ
TEFCTEUpICYmIGRlZmluZWQoQk9PU1RfSFdfU0lNRF9QUENfQVZBSUxBQkxFKSB8fFwKLSAgICBk
ZWZpbmVkKEJPT1NUX0hXX1NJTURfQVJNX0FWQUlMQUJMRSkgJiYgZGVmaW5lZChCT09TVF9IV19T
SU1EX1g4Nl9BVkFJTEFCTEUpIHx8XAotICAgIGRlZmluZWQoQk9PU1RfSFdfU0lNRF9QUENfQVZB
SUxBQkxFKSAmJiBkZWZpbmVkKEJPT1NUX0hXX1NJTURfWDg2X0FWQUlMQUJMRSkKLSMgICBlcnJv
ciAiTXVsdGlwbGUgU0lNRCBhcmNoaXRlY3R1cmVzIGRldGVjdGVkLCB0aGlzIGNhbm5vdCBoYXBw
ZW4hIgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJPT1NUX0hXX1NJTURfWDg2X0FWQUlMQUJMRSkg
JiYgZGVmaW5lZChCT09TVF9IV19TSU1EX1g4Nl9BTURfQVZBSUxBQkxFKQotICAgIC8vIElmIGJv
dGggc3RhbmRhcmQgX1g4NiBhbmQgX1g4Nl9BTUQgYXJlIGF2YWlsYWJsZSwKLSAgICAvLyB0aGVu
IHRha2UgdGhlIGJpZ2dlc3QgdmVyc2lvbiBvZiB0aGUgdHdvIQotIyAgIGlmIEJPT1NUX0hXX1NJ
TURfWDg2ID49IEJPT1NUX0hXX1NJTURfWDg2X0FNRAotIyAgICAgIGRlZmluZSBCT09TVF9IV19T
SU1EIEJPT1NUX0hXX1NJTURfWDg2Ci0jICAgZWxzZQotIyAgICAgIGRlZmluZSBCT09TVF9IV19T
SU1EIEJPT1NUX0hXX1NJTURfWDg2X0FNRAotIyAgIGVuZGlmCi0jZW5kaWYKLQotI2lmICFkZWZp
bmVkKEJPT1NUX0hXX1NJTUQpCi0gICAgLy8gQXQgdGhpcyBwb2ludCwgb25seSBvbmUgb2YgdGhl
c2UgdHdvIGlzIGRlZmluZWQKLSMgICBpZiBkZWZpbmVkKEJPT1NUX0hXX1NJTURfWDg2X0FWQUlM
QUJMRSkKLSMgICAgICBkZWZpbmUgQk9PU1RfSFdfU0lNRCBCT09TVF9IV19TSU1EX1g4NgotIyAg
IGVuZGlmCi0jICAgaWYgZGVmaW5lZChCT09TVF9IV19TSU1EX1g4Nl9BTURfQVZBSUxBQkxFKQot
IyAgICAgIGRlZmluZSBCT09TVF9IV19TSU1EIEJPT1NUX0hXX1NJTURfWDg2X0FNRAotIyAgIGVu
ZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk9PU1RfSFdfU0lNRF9BUk1fQVZBSUxBQkxFKQot
IyAgIGRlZmluZSBCT09TVF9IV19TSU1EIEJPT1NUX0hXX1NJTURfQVJNCi0jZW5kaWYKLQotI2lm
IGRlZmluZWQoQk9PU1RfSFdfU0lNRF9QUENfQVZBSUxBQkxFKQotIyAgIGRlZmluZSBCT09TVF9I
V19TSU1EIEJPT1NUX0hXX1NJTURfUFBDCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk9PU1RfSFdf
U0lNRCkKLSMgICBkZWZpbmUgQk9PU1RfSFdfU0lNRF9BVkFJTEFCTEUKLSNlbHNlCi0jICAgZGVm
aW5lIEJPT1NUX0hXX1NJTUQgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotI2Vu
ZGlmCi0KLSNkZWZpbmUgQk9PU1RfSFdfU0lNRF9OQU1FICJIYXJkd2FyZSBTSU1EIgotCi0jZW5k
aWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVG
X0RFQ0xBUkVfVEVTVChCT09TVF9IV19TSU1ELCBCT09TVF9IV19TSU1EX05BTUUpCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvaGFy
ZHdhcmUvc2ltZC9hcm0uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3ByZWRlZi9oYXJkd2FyZS9zaW1kL2FybS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkMDY3YzkzMTk2OGQwNmM5OWFjYWEzZDgxMGE0NjM2N2E5YzYxZDcwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9oYXJkd2FyZS9zaW1kL2FybS5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBDaGFybHkgQ2hldmFsaWVyIDIw
MTUKLUNvcHlyaWdodCBKb2VsIEZhbGNvdSAyMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9v
c3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxl
IExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9IQVJEV0FSRV9TSU1EX0FSTV9I
Ci0jZGVmaW5lIEJPT1NUX1BSRURFRl9IQVJEV0FSRV9TSU1EX0FSTV9ICi0KLSNpbmNsdWRlIDxi
b29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvaGFy
ZHdhcmUvc2ltZC9hcm0vdmVyc2lvbnMuaD4KLQotLypgCi0gW2hlYWRpbmcgYEJPT1NUX0hXX1NJ
TURfQVJNYF0KLQotIFRoZSBTSU1EIGV4dGVuc2lvbiBmb3IgQVJNICgqaWYgZGV0ZWN0ZWQqKS4K
LSBWZXJzaW9uIG51bWJlciBkZXBlbmRzIG9uIHRoZSBtb3N0IHJlY2VudCBkZXRlY3RlZCBleHRl
bnNpb24uCi0KLSBbdGFibGUKLSAgICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3Zl
cnNpb25fX11dCi0KLSAgICAgW1tgX19BUk1fTkVPTl9fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9f
XV0KLSAgICAgW1tgX19hYXJjaDY0X19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgICBb
W2BfTV9BUk1gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgICBdCi0KLSBbdGFibGUKLSAg
ICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICAgW1tg
X19BUk1fTkVPTl9fYF0gW0JPT1NUX0hXX1NJTURfQVJNX05FT05fVkVSU0lPTl1dCi0gICAgIFtb
YF9fYWFyY2g2NF9fYF0gW0JPT1NUX0hXX1NJTURfQVJNX05FT05fVkVSU0lPTl1dCi0gICAgIFtb
YF9NX0FSTWBdIFtCT09TVF9IV19TSU1EX0FSTV9ORU9OX1ZFUlNJT05dXQotICAgICBdCi0KLSAq
LwotCi0jZGVmaW5lIEJPT1NUX0hXX1NJTURfQVJNIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9B
VkFJTEFCTEUKLQotI3VuZGVmIEJPT1NUX0hXX1NJTURfQVJNCi0jaWYgIWRlZmluZWQoQk9PU1Rf
SFdfU0lNRF9BUk0pICYmIChkZWZpbmVkKF9fQVJNX05FT05fXykgfHwgZGVmaW5lZChfX2FhcmNo
NjRfXykgfHwgZGVmaW5lZCAoX01fQVJNKSkKLSMgICBkZWZpbmUgQk9PU1RfSFdfU0lNRF9BUk0g
Qk9PU1RfSFdfU0lNRF9BUk1fTkVPTl9WRVJTSU9OCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEJP
T1NUX0hXX1NJTURfQVJNKQotIyAgIGRlZmluZSBCT09TVF9IV19TSU1EX0FSTSBCT09TVF9WRVJT
SU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0jZWxzZQotIyAgIGRlZmluZSBCT09TVF9IV19TSU1E
X0FSTV9BVkFJTEFCTEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0hXX1NJTURfQVJNX05BTUUg
IkFSTSBTSU1EIgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVz
dC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9IV19TSU1EX0FSTSwgQk9PU1Rf
SFdfU0lNRF9BUk1fTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9oYXJkd2FyZS9zaW1kL2FybS92ZXJzaW9ucy5oIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2hhcmR3YXJlL3Np
bWQvYXJtL3ZlcnNpb25zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MjViMzE4
NjI4OTkwYWM0MjE2YmIwOTNiNmEwNmJiYzk2MWMzNWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcHJlZGVmL2hhcmR3YXJlL3NpbWQvYXJtL3ZlcnNpb25zLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwzMiArMCwwIEBACi0vKgotQ29weXJpZ2h0IENoYXJseSBDaGV2YWxpZXIgMjAxNQot
Q29weXJpZ2h0IEpvZWwgRmFsY291IDIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0hBUkRXQVJFX1NJTURfQVJNX1ZFUlNJ
T05TX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0hBUkRXQVJFX1NJTURfQVJNX1ZFUlNJT05TX0gK
LQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotCi0vKmAKLSBUaG9z
ZSBkZWZpbmVzIHJlcHJlc2VudCBBUk0gU0lNRCBleHRlbnNpb25zIHZlcnNpb25zLgotCi0gW25v
dGUgWW91ICpNVVNUKiBjb21wYXJlIHRoZW0gd2l0aCB0aGUgcHJlZGVmIGBCT09TVF9IV19TSU1E
X0FSTWAuXQotICovCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0v
KmAKLSBbaGVhZGluZyBgQk9PU1RfSFdfU0lNRF9BUk1fTkVPTl9WRVJTSU9OYF0KLQotIFRoZSBb
QGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FSTV9hcmNoaXRlY3R1cmUjQWR2YW5jZWRf
U0lNRF8uMjhORU9OLjI5IE5FT05dCi0gQVJNIGV4dGVuc2lvbiB2ZXJzaW9uIG51bWJlci4KLQot
IFZlcnNpb24gbnVtYmVyIGlzOiAqMS4wLjAqLgotICovCi0jZGVmaW5lIEJPT1NUX0hXX1NJTURf
QVJNX05FT05fVkVSU0lPTiBCT09TVF9WRVJTSU9OX05VTUJFUigxLCAwLCAwKQotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3By
ZWRlZi9oYXJkd2FyZS9zaW1kL3BwYy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvcHJlZGVmL2hhcmR3YXJlL3NpbWQvcHBjLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGVlZjI1YzJkMjY5M2ExNWQ1ZWEwZmQwYjAyMTEyNzMxYWQ1NDE2MzcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2hhcmR3YXJlL3NpbWQvcHBjLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotQ29weXJpZ2h0IENoYXJseSBDaGV2
YWxpZXIgMjAxNQotQ29weXJpZ2h0IEpvZWwgRmFsY291IDIwMTUKLURpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55
aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0hBUkRXQVJFX1NJ
TURfUFBDX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0hBUkRXQVJFX1NJTURfUFBDX0gKLQotI2lu
Y2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3By
ZWRlZi9oYXJkd2FyZS9zaW1kL3BwYy92ZXJzaW9ucy5oPgotCi0vKmAKLSBbaGVhZGluZyBgQk9P
U1RfSFdfU0lNRF9QUENgXQotCi0gVGhlIFNJTUQgZXh0ZW5zaW9uIGZvciBQb3dlclBDICgqaWYg
ZGV0ZWN0ZWQqKS4KLSBWZXJzaW9uIG51bWJlciBkZXBlbmRzIG9uIHRoZSBtb3N0IHJlY2VudCBk
ZXRlY3RlZCBleHRlbnNpb24uCi0KLSBbdGFibGUKLSAgICAgW1tfX3ByZWRlZl9zeW1ib2xfX10g
W19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICAgW1tgX19WRUNUT1I0RE9VQkxFX19gXSBbX19w
cmVkZWZfZGV0ZWN0aW9uX19dXQotCi0gICAgIFtbYF9fQUxUSVZFQ19fYF0gW19fcHJlZGVmX2Rl
dGVjdGlvbl9fXV0KLSAgICAgW1tgX19WRUNfX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0K
LSAgICAgW1tgX19WU1hfX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgIF0KLQotIFt0
YWJsZQotICAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQot
ICAgICBbW2BfX1ZFQ1RPUjRET1VCTEVfX2BdIFtCT09TVF9IV19TSU1EX1BQQ19RUFhfVkVSU0lP
Tl1dCi0KLSAgICAgW1tgX19BTFRJVkVDX19gXSBbQk9PU1RfSFdfU0lNRF9QUENfVk1YX1ZFUlNJ
T05dXQotICAgICBbW2BfX1ZFQ19fYF0gW0JPT1NUX0hXX1NJTURfUFBDX1ZNWF9WRVJTSU9OXV0K
LQotICAgICBbW2BfX1ZTWF9fYF0gW0JPT1NUX0hXX1NJTURfUFBDX1ZTWF9WRVJTSU9OXV0KLSAg
ICAgXQotCi0gKi8KLQotI2RlZmluZSBCT09TVF9IV19TSU1EX1BQQyBCT09TVF9WRVJTSU9OX05V
TUJFUl9OT1RfQVZBSUxBQkxFCi0KLSN1bmRlZiBCT09TVF9IV19TSU1EX1BQQwotI2lmICFkZWZp
bmVkKEJPT1NUX0hXX1NJTURfUFBDKSAmJiBkZWZpbmVkKF9fVkVDVE9SNERPVUJMRV9fKQotIyAg
IGRlZmluZSBCT09TVF9IV19TSU1EX1BQQyBCT09TVF9IV19TSU1EX1BQQ19RUFhfVkVSU0lPTgot
I2VuZGlmCi0jaWYgIWRlZmluZWQoQk9PU1RfSFdfU0lNRF9QUEMpICYmIGRlZmluZWQoX19WU1hf
XykKLSMgICBkZWZpbmUgQk9PU1RfSFdfU0lNRF9QUEMgQk9PU1RfSFdfU0lNRF9QUENfVlNYX1ZF
UlNJT04KLSNlbmRpZgotI2lmICFkZWZpbmVkKEJPT1NUX0hXX1NJTURfUFBDKSAmJiAoZGVmaW5l
ZChfX0FMVElWRUNfXykgfHwgZGVmaW5lZChfX1ZFQ19fKSkKLSMgICBkZWZpbmUgQk9PU1RfSFdf
U0lNRF9QUEMgQk9PU1RfSFdfU0lNRF9QUENfVk1YX1ZFUlNJT04KLSNlbmRpZgotCi0jaWYgIWRl
ZmluZWQoQk9PU1RfSFdfU0lNRF9QUEMpCi0jICAgZGVmaW5lIEJPT1NUX0hXX1NJTURfUFBDIEJP
T1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLSNlbHNlCi0jICAgZGVmaW5lIEJPT1NU
X0hXX1NJTURfUFBDX0FWQUlMQUJMRQotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfSFdfU0lNRF9Q
UENfTkFNRSAiUFBDIFNJTUQiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2Rl
dGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0hXX1NJTURfUFBD
LCBCT09TVF9IV19TSU1EX1BQQ19OQU1FKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2hhcmR3YXJlL3NpbWQvcHBjL3ZlcnNpb25z
LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvaGFy
ZHdhcmUvc2ltZC9wcGMvdmVyc2lvbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZmZlM2YwYjFlNWE0ZTE2YmJlYTljZjQ3ZjQ3ZTFmNDAyNDdhYzZlMC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVkZWYvaGFyZHdhcmUvc2ltZC9wcGMvdmVyc2lvbnMuaAorKysg
L2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgQ2hhcmx5IENoZXZhbGll
ciAyMDE1Ci1Db3B5cmlnaHQgSm9lbCBGYWxjb3UgMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfSEFSRFdBUkVfU0lNRF9Q
UENfVkVSU0lPTlNfSAotI2RlZmluZSBCT09TVF9QUkVERUZfSEFSRFdBUkVfU0lNRF9QUENfVkVS
U0lPTlNfSAotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0KLS8q
YAotIFRob3NlIGRlZmluZXMgcmVwcmVzZW50IFBvd2VyIFBDIFNJTUQgZXh0ZW5zaW9ucyB2ZXJz
aW9ucy4KLQotIFtub3RlIFlvdSAqTVVTVCogY29tcGFyZSB0aGVtIHdpdGggdGhlIHByZWRlZiBg
Qk9PU1RfSFdfU0lNRF9QUENgLl0KLSAqLwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotLypgCi0gW2hlYWRpbmcgYEJPT1NUX0hXX1NJTURfUFBDX1ZNWF9WRVJTSU9O
YF0KLQotIFRoZSBbQGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FsdGlWZWMjVk1YMTI4
IFZNWF0gcG93ZXJwYyBleHRlbnNpb24KLSB2ZXJzaW9uIG51bWJlci4KLQotIFZlcnNpb24gbnVt
YmVyIGlzOiAqMS4wLjAqLgotICovCi0jZGVmaW5lIEJPT1NUX0hXX1NJTURfUFBDX1ZNWF9WRVJT
SU9OIEJPT1NUX1ZFUlNJT05fTlVNQkVSKDEsIDAsIDApCi0KLS8qYAotIFtoZWFkaW5nIGBCT09T
VF9IV19TSU1EX1BQQ19WU1hfVkVSU0lPTmBdCi0KLSBUaGUgW0BodHRwczovL2VuLndpa2lwZWRp
YS5vcmcvd2lraS9BbHRpVmVjI1ZTWCBWU1hdIHBvd2VycGMgZXh0ZW5zaW9uIHZlcnNpb24KLSBu
dW1iZXIuCi0KLSBWZXJzaW9uIG51bWJlciBpczogKjEuMS4wKi4KLSAqLwotI2RlZmluZSBCT09T
VF9IV19TSU1EX1BQQ19WU1hfVkVSU0lPTiBCT09TVF9WRVJTSU9OX05VTUJFUigxLCAxLCAwKQot
Ci0vKmAKLSBbaGVhZGluZyBgQk9PU1RfSFdfU0lNRF9QUENfUVBYX1ZFUlNJT05gXQotCi0gVGhl
IFFQWCBwb3dlcnBjIGV4dGVuc2lvbiB2ZXJzaW9uIG51bWJlci4KLQotIFZlcnNpb24gbnVtYmVy
IGlzOiAqMi4wLjAqLgotICovCi0jZGVmaW5lIEJPT1NUX0hXX1NJTURfUFBDX1FQWF9WRVJTSU9O
IEJPT1NUX1ZFUlNJT05fTlVNQkVSKDIsIDAsIDApCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2hhcmR3YXJlL3Np
bWQveDg2LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVk
ZWYvaGFyZHdhcmUvc2ltZC94ODYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhi
ZDgxZTM2MmIwY2Q4OTU4YzJlMTZlNmIzNTMwNTIxNDlhOWNhMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9wcmVkZWYvaGFyZHdhcmUvc2ltZC94ODYuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEyMyArMCwwIEBACi0vKgotQ29weXJpZ2h0IENoYXJseSBDaGV2YWxpZXIgMjAxNQotQ29w
eXJpZ2h0IEpvZWwgRmFsY291IDIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0
d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0hBUkRXQVJFX1NJTURfWDg2X0gKLSNkZWZp
bmUgQk9PU1RfUFJFREVGX0hBUkRXQVJFX1NJTURfWDg2X0gKLQotI2luY2x1ZGUgPGJvb3N0L3By
ZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9oYXJkd2FyZS9z
aW1kL3g4Ni92ZXJzaW9ucy5oPgotCi0vKmAKLSBbaGVhZGluZyBgQk9PU1RfSFdfU0lNRF9YODZg
XQotCi0gVGhlIFNJTUQgZXh0ZW5zaW9uIGZvciB4ODYgKCppZiBkZXRlY3RlZCopLgotIFZlcnNp
b24gbnVtYmVyIGRlcGVuZHMgb24gdGhlIG1vc3QgcmVjZW50IGRldGVjdGVkIGV4dGVuc2lvbi4K
LQotIFt0YWJsZQotICAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9f
XV0KLQotICAgICBbW2BfX1NTRV9fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICAgW1tg
X01fWDY0YF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICAgW1tgX01fSVg4Nl9GUCA+PSAx
YF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLQotICAgICBbW2BfX1NTRTJfX2BdIFtfX3ByZWRl
Zl9kZXRlY3Rpb25fX11dCi0gICAgIFtbYF9NX1g2NGBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11d
Ci0gICAgIFtbYF9NX0lYODZfRlAgPj0gMmBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAg
ICAgW1tgX19TU0UzX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotCi0gICAgIFtbYF9fU1NT
RTNfX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICAgW1tgX19TU0U0XzFfX2BdIFtf
X3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICAgW1tgX19TU0U0XzJfX2BdIFtfX3ByZWRlZl9k
ZXRlY3Rpb25fX11dCi0KLSAgICAgW1tgX19BVlhfX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11d
Ci0KLSAgICAgW1tgX19GTUFfX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICAgW1tg
X19BVlgyX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgICBdCi0KLSBbdGFibGUKLSAg
ICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICAgW1tg
X19TU0VfX2BdIFtCT09TVF9IV19TSU1EX1g4Nl9TU0VfVkVSU0lPTl1dCi0gICAgIFtbYF9NX1g2
NGBdIFtCT09TVF9IV19TSU1EX1g4Nl9TU0VfVkVSU0lPTl1dCi0gICAgIFtbYF9NX0lYODZfRlAg
Pj0gMWBdIFtCT09TVF9IV19TSU1EX1g4Nl9TU0VfVkVSU0lPTl1dCi0KLSAgICAgW1tgX19TU0Uy
X19gXSBbQk9PU1RfSFdfU0lNRF9YODZfU1NFMl9WRVJTSU9OXV0KLSAgICAgW1tgX01fWDY0YF0g
W0JPT1NUX0hXX1NJTURfWDg2X1NTRTJfVkVSU0lPTl1dCi0gICAgIFtbYF9NX0lYODZfRlAgPj0g
MmBdIFtCT09TVF9IV19TSU1EX1g4Nl9TU0UyX1ZFUlNJT05dXQotCi0gICAgIFtbYF9fU1NFM19f
YF0gW0JPT1NUX0hXX1NJTURfWDg2X1NTRTNfVkVSU0lPTl1dCi0KLSAgICAgW1tgX19TU1NFM19f
YF0gW0JPT1NUX0hXX1NJTURfWDg2X1NTU0UzX1ZFUlNJT05dXQotCi0gICAgIFtbYF9fU1NFNF8x
X19gXSBbQk9PU1RfSFdfU0lNRF9YODZfU1NFNF8xX1ZFUlNJT05dXQotCi0gICAgIFtbYF9fU1NF
NF8yX19gXSBbQk9PU1RfSFdfU0lNRF9YODZfU1NFNF8yX1ZFUlNJT05dXQotCi0gICAgIFtbYF9f
QVZYX19gXSBbQk9PU1RfSFdfU0lNRF9YODZfQVZYX1ZFUlNJT05dXQotCi0gICAgIFtbYF9fRk1B
X19gXSBbQk9PU1RfSFdfU0lNRF9YODZfRk1BM19WRVJTSU9OXV0KLQotICAgICBbW2BfX0FWWDJf
X2BdIFtCT09TVF9IV19TSU1EX1g4Nl9BVlgyX1ZFUlNJT05dXQotICAgICBdCi0KLSAqLwotCi0j
ZGVmaW5lIEJPT1NUX0hXX1NJTURfWDg2IEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFC
TEUKLQotI3VuZGVmIEJPT1NUX0hXX1NJTURfWDg2Ci0jaWYgIWRlZmluZWQoQk9PU1RfSFdfU0lN
RF9YODYpICYmIGRlZmluZWQoX19NSUNfXykKLSMgICBkZWZpbmUgQk9PU1RfSFdfU0lNRF9YODYg
Qk9PU1RfSFdfU0lNRF9YODZfTUlDX1ZFUlNJT04KLSNlbmRpZgotI2lmICFkZWZpbmVkKEJPT1NU
X0hXX1NJTURfWDg2KSAmJiBkZWZpbmVkKF9fQVZYMl9fKQotIyAgIGRlZmluZSBCT09TVF9IV19T
SU1EX1g4NiBCT09TVF9IV19TSU1EX1g4Nl9BVlgyX1ZFUlNJT04KLSNlbmRpZgotI2lmICFkZWZp
bmVkKEJPT1NUX0hXX1NJTURfWDg2KSAmJiBkZWZpbmVkKF9fQVZYX18pCi0jICAgZGVmaW5lIEJP
T1NUX0hXX1NJTURfWDg2IEJPT1NUX0hXX1NJTURfWDg2X0FWWF9WRVJTSU9OCi0jZW5kaWYKLSNp
ZiAhZGVmaW5lZChCT09TVF9IV19TSU1EX1g4NikgJiYgZGVmaW5lZChfX0ZNQV9fKQotIyAgIGRl
ZmluZSBCT09TVF9IV19TSU1EX1g4NiBCT09TVF9IV19TSU1EX1g4Nl9GTUFfVkVSU0lPTgotI2Vu
ZGlmCi0jaWYgIWRlZmluZWQoQk9PU1RfSFdfU0lNRF9YODYpICYmIGRlZmluZWQoX19TU0U0XzJf
XykKLSMgICBkZWZpbmUgQk9PU1RfSFdfU0lNRF9YODYgQk9PU1RfSFdfU0lNRF9YODZfU1NFNF8y
X1ZFUlNJT04KLSNlbmRpZgotI2lmICFkZWZpbmVkKEJPT1NUX0hXX1NJTURfWDg2KSAmJiBkZWZp
bmVkKF9fU1NFNF8xX18pCi0jICAgZGVmaW5lIEJPT1NUX0hXX1NJTURfWDg2IEJPT1NUX0hXX1NJ
TURfWDg2X1NTRTRfMV9WRVJTSU9OCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChCT09TVF9IV19TSU1E
X1g4NikgJiYgZGVmaW5lZChfX1NTU0UzX18pCi0jICAgZGVmaW5lIEJPT1NUX0hXX1NJTURfWDg2
IEJPT1NUX0hXX1NJTURfWDg2X1NTU0UzX1ZFUlNJT04KLSNlbmRpZgotI2lmICFkZWZpbmVkKEJP
T1NUX0hXX1NJTURfWDg2KSAmJiBkZWZpbmVkKF9fU1NFM19fKQotIyAgIGRlZmluZSBCT09TVF9I
V19TSU1EX1g4NiBCT09TVF9IV19TSU1EX1g4Nl9TU0UzX1ZFUlNJT04KLSNlbmRpZgotI2lmICFk
ZWZpbmVkKEJPT1NUX0hXX1NJTURfWDg2KSAmJiAoZGVmaW5lZChfX1NTRTJfXykgfHwgZGVmaW5l
ZChfTV9YNjQpIHx8IChkZWZpbmVkKF9NX0lYODZfRlApICYmIF9NX0lYODZfRlAgPj0gMikpCi0j
ICAgZGVmaW5lIEJPT1NUX0hXX1NJTURfWDg2IEJPT1NUX0hXX1NJTURfWDg2X1NTRTJfVkVSU0lP
TgotI2VuZGlmCi0jaWYgIWRlZmluZWQoQk9PU1RfSFdfU0lNRF9YODYpICYmIChkZWZpbmVkKF9f
U1NFX18pIHx8IGRlZmluZWQoX01fWDY0KSB8fCAoZGVmaW5lZChfTV9JWDg2X0ZQKSAmJiBfTV9J
WDg2X0ZQID49IDEpKQotIyAgIGRlZmluZSBCT09TVF9IV19TSU1EX1g4NiBCT09TVF9IV19TSU1E
X1g4Nl9TU0VfVkVSU0lPTgotI2VuZGlmCi0jaWYgIWRlZmluZWQoQk9PU1RfSFdfU0lNRF9YODYp
ICYmIGRlZmluZWQoX19NTVhfXykKLSMgICBkZWZpbmUgQk9PU1RfSFdfU0lNRF9YODYgQk9PU1Rf
SFdfU0lNRF9YODZfTU1YX1ZFUlNJT04KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQk9PU1RfSFdf
U0lNRF9YODYpCi0jICAgZGVmaW5lIEJPT1NUX0hXX1NJTURfWDg2IEJPT1NUX1ZFUlNJT05fTlVN
QkVSX05PVF9BVkFJTEFCTEUKLSNlbHNlCi0jICAgZGVmaW5lIEJPT1NUX0hXX1NJTURfWDg2X0FW
QUlMQUJMRQotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfSFdfU0lNRF9YODZfTkFNRSAieDg2IFNJ
TUQiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1C
T09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0hXX1NJTURfWDg2LCBCT09TVF9IV19TSU1E
X1g4Nl9OQU1FKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcHJlZGVmL2hhcmR3YXJlL3NpbWQveDg2L3ZlcnNpb25zLmggYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvaGFyZHdhcmUvc2ltZC94ODYv
dmVyc2lvbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM3YTRkMzgxMzI4YTBh
MWFjZWRiYmNjNzZiZWU3MjQ0ZmM0NDJjYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9wcmVkZWYvaGFyZHdhcmUvc2ltZC94ODYvdmVyc2lvbnMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDEyOSArMCwwIEBACi0vKgotQ29weXJpZ2h0IENoYXJseSBDaGV2YWxpZXIgMjAxNQotQ29weXJp
Z2h0IEpvZWwgRmFsY291IDIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK
LSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0hBUkRXQVJFX1NJTURfWDg2X1ZFUlNJT05TX0gK
LSNkZWZpbmUgQk9PU1RfUFJFREVGX0hBUkRXQVJFX1NJTURfWDg2X1ZFUlNJT05TX0gKLQotI2lu
Y2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotCi0vKmAKLSBUaG9zZSBkZWZp
bmVzIHJlcHJlc2VudCB4ODYgU0lNRCBleHRlbnNpb25zIHZlcnNpb25zLgotCi0gW25vdGUgWW91
ICpNVVNUKiBjb21wYXJlIHRoZW0gd2l0aCB0aGUgcHJlZGVmIGBCT09TVF9IV19TSU1EX1g4NmAu
XQotICovCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKmAKLSBb
aGVhZGluZyBgQk9PU1RfSFdfU0lNRF9YODZfTU1YX1ZFUlNJT05gXQotCi0gVGhlIFtAaHR0cHM6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTU1YXyhpbnN0cnVjdGlvbl9zZXQpIE1NWF0geDg2IGV4
dGVuc2lvbgotIHZlcnNpb24gbnVtYmVyLgotCi0gVmVyc2lvbiBudW1iZXIgaXM6ICowLjk5LjAq
LgotICovCi0jZGVmaW5lIEJPT1NUX0hXX1NJTURfWDg2X01NWF9WRVJTSU9OIEJPT1NUX1ZFUlNJ
T05fTlVNQkVSKDAsIDk5LCAwKQotCi0vKmAKLSBbaGVhZGluZyBgQk9PU1RfSFdfU0lNRF9YODZf
U1NFX1ZFUlNJT05gXQotCi0gVGhlIFtAaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3Ry
ZWFtaW5nX1NJTURfRXh0ZW5zaW9ucyBTU0VdIHg4NiBleHRlbnNpb24KLSB2ZXJzaW9uIG51bWJl
ci4KLQotIFZlcnNpb24gbnVtYmVyIGlzOiAqMS4wLjAqLgotICovCi0jZGVmaW5lIEJPT1NUX0hX
X1NJTURfWDg2X1NTRV9WRVJTSU9OIEJPT1NUX1ZFUlNJT05fTlVNQkVSKDEsIDAsIDApCi0KLS8q
YAotIFtoZWFkaW5nIGBCT09TVF9IV19TSU1EX1g4Nl9TU0UyX1ZFUlNJT05gXQotCi0gVGhlIFtA
aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1NFMiBTU0UyXSB4ODYgZXh0ZW5zaW9uIHZl
cnNpb24gbnVtYmVyLgotCi0gVmVyc2lvbiBudW1iZXIgaXM6ICoyLjAuMCouCi0gKi8KLSNkZWZp
bmUgQk9PU1RfSFdfU0lNRF9YODZfU1NFMl9WRVJTSU9OIEJPT1NUX1ZFUlNJT05fTlVNQkVSKDIs
IDAsIDApCi0KLS8qYAotIFtoZWFkaW5nIGBCT09TVF9IV19TSU1EX1g4Nl9TU0UzX1ZFUlNJT05g
XQotCi0gVGhlIFtAaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1NFMyBTU0UzXSB4ODYg
ZXh0ZW5zaW9uIHZlcnNpb24gbnVtYmVyLgotCi0gVmVyc2lvbiBudW1iZXIgaXM6ICozLjAuMCou
Ci0gKi8KLSNkZWZpbmUgQk9PU1RfSFdfU0lNRF9YODZfU1NFM19WRVJTSU9OIEJPT1NUX1ZFUlNJ
T05fTlVNQkVSKDMsIDAsIDApCi0KLS8qYAotIFtoZWFkaW5nIGBCT09TVF9IV19TSU1EX1g4Nl9T
U1NFM19WRVJTSU9OYF0KLQotIFRoZSBbQGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NT
U0UzIFNTU0UzXSB4ODYgZXh0ZW5zaW9uIHZlcnNpb24gbnVtYmVyLgotCi0gVmVyc2lvbiBudW1i
ZXIgaXM6ICozLjEuMCouCi0gKi8KLSNkZWZpbmUgQk9PU1RfSFdfU0lNRF9YODZfU1NTRTNfVkVS
U0lPTiBCT09TVF9WRVJTSU9OX05VTUJFUigzLCAxLCAwKQotCi0vKmAKLSBbaGVhZGluZyBgQk9P
U1RfSFdfU0lNRF9YODZfU1NFNF8xX1ZFUlNJT05gXQotCi0gVGhlIFtAaHR0cHM6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvU1NFNCNTU0U0LjEgU1NFNF8xXSB4ODYgZXh0ZW5zaW9uIHZlcnNpb24K
LSBudW1iZXIuCi0KLSBWZXJzaW9uIG51bWJlciBpczogKjQuMS4wKi4KLSAqLwotI2RlZmluZSBC
T09TVF9IV19TSU1EX1g4Nl9TU0U0XzFfVkVSU0lPTiBCT09TVF9WRVJTSU9OX05VTUJFUig0LCAx
LCAwKQotCi0vKmAKLSBbaGVhZGluZyBgQk9PU1RfSFdfU0lNRF9YODZfU1NFNF8yX1ZFUlNJT05g
XQotCi0gVGhlIFtAaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1NFNCMjU1NFNC4yIFNT
RTRfMl0geDg2IGV4dGVuc2lvbiB2ZXJzaW9uCi0gbnVtYmVyLgotCi0gVmVyc2lvbiBudW1iZXIg
aXM6ICo0LjIuMCouCi0gKi8KLSNkZWZpbmUgQk9PU1RfSFdfU0lNRF9YODZfU1NFNF8yX1ZFUlNJ
T04gQk9PU1RfVkVSU0lPTl9OVU1CRVIoNCwgMiwgMCkKLQotLypgCi0gW2hlYWRpbmcgYEJPT1NU
X0hXX1NJTURfWDg2X0FWWF9WRVJTSU9OYF0KLQotIFRoZSBbQGh0dHBzOi8vZW4ud2lraXBlZGlh
Lm9yZy93aWtpL0FkdmFuY2VkX1ZlY3Rvcl9FeHRlbnNpb25zIEFWWF0geDg2Ci0gZXh0ZW5zaW9u
IHZlcnNpb24gbnVtYmVyLgotCi0gVmVyc2lvbiBudW1iZXIgaXM6ICo1LjAuMCouCi0gKi8KLSNk
ZWZpbmUgQk9PU1RfSFdfU0lNRF9YODZfQVZYX1ZFUlNJT04gQk9PU1RfVkVSU0lPTl9OVU1CRVIo
NSwgMCwgMCkKLQotLypgCi0gW2hlYWRpbmcgYEJPT1NUX0hXX1NJTURfWDg2X0ZNQTNfVkVSU0lP
TmBdCi0KLSBUaGUgW0BodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GTUFfaW5zdHJ1Y3Rp
b25fc2V0IEZNQTNdIHg4NiBleHRlbnNpb24KLSB2ZXJzaW9uIG51bWJlci4KLQotIFZlcnNpb24g
bnVtYmVyIGlzOiAqNS4yLjAqLgotICovCi0jZGVmaW5lIEJPT1NUX0hXX1NJTURfWDg2X0ZNQTNf
VkVSU0lPTiBCT09TVF9WRVJTSU9OX05VTUJFUig1LCAyLCAwKQotCi0vKmAKLSBbaGVhZGluZyBg
Qk9PU1RfSFdfU0lNRF9YODZfQVZYMl9WRVJTSU9OYF0KLQotIFRoZSBbQGh0dHBzOi8vZW4ud2lr
aXBlZGlhLm9yZy93aWtpL0FkdmFuY2VkX1ZlY3Rvcl9FeHRlbnNpb25zI0FkdmFuY2VkX1ZlY3Rv
cl9FeHRlbnNpb25zXzIgQVZYMl0KLSB4ODYgZXh0ZW5zaW9uIHZlcnNpb24gbnVtYmVyLgotCi0g
VmVyc2lvbiBudW1iZXIgaXM6ICo1LjMuMCouCi0gKi8KLSNkZWZpbmUgQk9PU1RfSFdfU0lNRF9Y
ODZfQVZYMl9WRVJTSU9OIEJPT1NUX1ZFUlNJT05fTlVNQkVSKDUsIDMsIDApCi0KLS8qYAotIFto
ZWFkaW5nIGBCT09TVF9IV19TSU1EX1g4Nl9NSUNfVkVSU0lPTmBdCi0KLSBUaGUgW0BodHRwczov
L2VuLndpa2lwZWRpYS5vcmcvd2lraS9YZW9uX1BoaSBNSUNdIChYZW9uIFBoaSkgeDg2IGV4dGVu
c2lvbgotIHZlcnNpb24gbnVtYmVyLgotCi0gVmVyc2lvbiBudW1iZXIgaXM6ICo5LjAuMCouCi0g
Ki8KLSNkZWZpbmUgQk9PU1RfSFdfU0lNRF9YODZfTUlDX1ZFUlNJT04gQk9PU1RfVkVSU0lPTl9O
VU1CRVIoOSwgMCwgMCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvaGFyZHdhcmUvc2ltZC94ODZfYW1kLmggYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvaGFyZHdhcmUv
c2ltZC94ODZfYW1kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MGQxY2UyYjc3
NWQ0ZTcwYjJmYWU3MTdjYjQ2ZThkYmNmMDM0NTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvcHJlZGVmL2hhcmR3YXJlL3NpbWQveDg2X2FtZC5oCisrKyAvZGV2L251bGwKQEAgLTEs
ODcgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBDaGFybHkgQ2hldmFsaWVyIDIwMTUKLUNvcHlyaWdo
dCBKb2VsIEZhbGNvdSAyMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUg
TGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8w
LnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0q
LwotCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9IQVJEV0FSRV9TSU1EX1g4Nl9BTURfSAotI2RlZmlu
ZSBCT09TVF9QUkVERUZfSEFSRFdBUkVfU0lNRF9YODZfQU1EX0gKLQotI2luY2x1ZGUgPGJvb3N0
L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9oYXJkd2Fy
ZS9zaW1kL3g4Nl9hbWQvdmVyc2lvbnMuaD4KLQotLypgCi0gW2hlYWRpbmcgYEJPT1NUX0hXX1NJ
TURfWDg2X0FNRGBdCi0KLSBUaGUgU0lNRCBleHRlbnNpb24gZm9yIHg4NiAoQU1EKSAoKmlmIGRl
dGVjdGVkKikuCi0gVmVyc2lvbiBudW1iZXIgZGVwZW5kcyBvbiB0aGUgbW9zdCByZWNlbnQgZGV0
ZWN0ZWQgZXh0ZW5zaW9uLgotCi0gW3RhYmxlCi0gICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtf
X3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgIFtbYF9fU1NFNEFfX2BdIFtfX3ByZWRlZl9kZXRl
Y3Rpb25fX11dCi0KLSAgICAgW1tgX19GTUE0X19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQot
Ci0gICAgIFtbYF9fWE9QX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotCi0gICAgIFtbYEJP
T1NUX0hXX1NJTURfWDg2YF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICAgXQotCi0gW3Rh
YmxlCi0gICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0g
ICAgIFtbYF9fU1NFNEFfX2BdIFtCT09TVF9IV19TSU1EX1g4Nl9TU0U0QV9WRVJTSU9OXV0KLQot
ICAgICBbW2BfX0ZNQTRfX2BdIFtCT09TVF9IV19TSU1EX1g4Nl9GTUE0X1ZFUlNJT05dXQotCi0g
ICAgIFtbYF9fWE9QX19gXSBbQk9PU1RfSFdfU0lNRF9YODZfWE9QX1ZFUlNJT05dXQotCi0gICAg
IFtbYEJPT1NUX0hXX1NJTURfWDg2YF0gW0JPT1NUX0hXX1NJTURfWDg2XV0KLSAgICAgXQotCi0g
W25vdGUgVGhpcyBwcmVkZWYgaW5jbHVkZXMgZXZlcnkgb3RoZXIgeDg2IFNJTUQgZXh0ZW5zaW9u
cyBhbmQgYWxzbyBoYXMgb3RoZXIKLSBtb3JlIHNwZWNpZmljIGV4dGVuc2lvbnMgKEZNQTQsIFhP
UCwgU1NFNGEpLiBZb3Ugc2hvdWxkIHVzZSB0aGlzIHByZWRlZgotIGluc3RlYWQgb2YgYEJPT1NU
X0hXX1NJTURfWDg2YCB0byB0ZXN0IGlmIHRob3NlIHNwZWNpZmljIGV4dGVuc2lvbnMgaGF2ZQot
IGJlZW4gZGV0ZWN0ZWQuXQotCi0gKi8KLQotI2RlZmluZSBCT09TVF9IV19TSU1EX1g4Nl9BTUQg
Qk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0vLyBBTUQgQ1BVcyBhbHNvIHVz
ZSB4ODYgYXJjaGl0ZWN0dXJlLiBXZSBmaXJzdCB0cnkgdG8gZGV0ZWN0IGlmIGFueSBBTUQKLS8v
IHNwZWNpZmljIGV4dGVuc2lvbiBhcmUgZGV0ZWN0ZWQsIGlmIHllcywgdGhlbiB0cnkgdG8gZGV0
ZWN0IG1vcmUgcmVjZW50IHg4NgotLy8gY29tbW9uIGV4dGVuc2lvbnMuCi0KLSN1bmRlZiBCT09T
VF9IV19TSU1EX1g4Nl9BTUQKLSNpZiAhZGVmaW5lZChCT09TVF9IV19TSU1EX1g4Nl9BTUQpICYm
IGRlZmluZWQoX19YT1BfXykKLSMgICBkZWZpbmUgQk9PU1RfSFdfU0lNRF9YODZfQU1EIEJPT1NU
X0hXX1NJTURfWDg2X0FNRF9YT1BfVkVSU0lPTgotI2VuZGlmCi0jaWYgIWRlZmluZWQoQk9PU1Rf
SFdfU0lNRF9YODZfQU1EKSAmJiBkZWZpbmVkKF9fRk1BNF9fKQotIyAgIGRlZmluZSBCT09TVF9I
V19TSU1EX1g4Nl9BTUQgQk9PU1RfSFdfU0lNRF9YODZfQU1EX0ZNQTRfVkVSU0lPTgotI2VuZGlm
Ci0jaWYgIWRlZmluZWQoQk9PU1RfSFdfU0lNRF9YODZfQU1EKSAmJiBkZWZpbmVkKF9fU1NFNEFf
XykKLSMgICBkZWZpbmUgQk9PU1RfSFdfU0lNRF9YODZfQU1EIEJPT1NUX0hXX1NJTURfWDg2X0FN
RF9TU0U0QV9WRVJTSU9OCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEJPT1NUX0hXX1NJTURfWDg2
X0FNRCkKLSMgICBkZWZpbmUgQk9PU1RfSFdfU0lNRF9YODZfQU1EIEJPT1NUX1ZFUlNJT05fTlVN
QkVSX05PVF9BVkFJTEFCTEUKLSNlbHNlCi0gICAgLy8gQXQgdGhpcyBwb2ludCwgd2Uga25vdyB0
aGF0IHdlIGhhdmUgYW4gQU1EIENQVSwgd2UgZG8gbmVlZCB0byBjaGVjayBmb3IKLSAgICAvLyBv
dGhlciB4ODYgZXh0ZW5zaW9ucyB0byBkZXRlcm1pbmUgdGhlIGZpbmFsIHZlcnNpb24gbnVtYmVy
LgotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZWRlZi9oYXJkd2FyZS9zaW1kL3g4Ni5oPgotIyAgIGlm
IEJPT1NUX0hXX1NJTURfWDg2ID4gQk9PU1RfSFdfU0lNRF9YODZfQU1ECi0jICAgICAgdW5kZWYg
Qk9PU1RfSFdfU0lNRF9YODZfQU1ECi0jICAgICAgZGVmaW5lIEJPT1NUX0hXX1NJTURfWDg2X0FN
RCBCT09TVF9IV19TSU1EX1g4NgotIyAgIGVuZGlmCi0jICAgZGVmaW5lIEJPT1NUX0hXX1NJTURf
WDg2X0FNRF9BVkFJTEFCTEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0hXX1NJTURfWDg2X0FN
RF9OQU1FICJ4ODYgKEFNRCkgU0lNRCIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVk
ZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfSFdfU0lN
RF9YODZfQU1ELCBCT09TVF9IV19TSU1EX1g4Nl9BTURfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9oYXJkd2FyZS9zaW1k
L3g4Nl9hbWQvdmVyc2lvbnMuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3ByZWRlZi9oYXJkd2FyZS9zaW1kL3g4Nl9hbWQvdmVyc2lvbnMuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMWY5ZTk2YzUwMGM1MjJiYjcxZWFiNTkzN2ZlYTgxM2Y1YWNj
NjRlMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvaGFyZHdhcmUvc2lt
ZC94ODZfYW1kL3ZlcnNpb25zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgot
Q29weXJpZ2h0IENoYXJseSBDaGV2YWxpZXIgMjAxNQotQ29weXJpZ2h0IEpvZWwgRmFsY291IDIw
MTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQK
LWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9P
U1RfUFJFREVGX0hBUkRXQVJFX1NJTURfWDg2X0FNRF9WRVJTSU9OU19ICi0jZGVmaW5lIEJPT1NU
X1BSRURFRl9IQVJEV0FSRV9TSU1EX1g4Nl9BTURfVkVSU0lPTlNfSAotCi0jaW5jbHVkZSA8Ym9v
c3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0KLS8qYAotIFRob3NlIGRlZmluZXMgcmVwcmVz
ZW50IHg4NiAoQU1EIHNwZWNpZmljKSBTSU1EIGV4dGVuc2lvbnMgdmVyc2lvbnMuCi0KLSBbbm90
ZSBZb3UgKk1VU1QqIGNvbXBhcmUgdGhlbSB3aXRoIHRoZSBwcmVkZWYgYEJPT1NUX0hXX1NJTURf
WDg2X0FNRGAuXQotICovCi0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLS8qYAotIFtoZWFkaW5nIGBCT09TVF9IV19TSU1EX1g4Nl9BTURfU1NFNEFfVkVSU0lPTmBd
Ci0KLSBbQGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NTRTQjI1NTRTRBIFNTRTRBXSB4
ODYgZXh0ZW5zaW9uIChBTUQgc3BlY2lmaWMpLgotCi0gVmVyc2lvbiBudW1iZXIgaXM6ICo0LjAu
MCouCi0gKi8KLSNkZWZpbmUgQk9PU1RfSFdfU0lNRF9YODZfQU1EX1NTRTRBX1ZFUlNJT04gQk9P
U1RfVkVSU0lPTl9OVU1CRVIoNCwgMCwgMCkKLQotLypgCi0gW2hlYWRpbmcgYEJPT1NUX0hXX1NJ
TURfWDg2X0FNRF9GTUE0X1ZFUlNJT05gXQotCi0gW0BodHRwczovL2VuLndpa2lwZWRpYS5vcmcv
d2lraS9GTUFfaW5zdHJ1Y3Rpb25fc2V0I0ZNQTRfaW5zdHJ1Y3Rpb25fc2V0IEZNQTRdIHg4NiBl
eHRlbnNpb24gKEFNRCBzcGVjaWZpYykuCi0KLSBWZXJzaW9uIG51bWJlciBpczogKjUuMS4wKi4K
LSAqLwotI2RlZmluZSBCT09TVF9IV19TSU1EX1g4Nl9BTURfRk1BNF9WRVJTSU9OIEJPT1NUX1ZF
UlNJT05fTlVNQkVSKDUsIDEsIDApCi0KLS8qYAotIFtoZWFkaW5nIGBCT09TVF9IV19TSU1EX1g4
Nl9BTURfWE9QX1ZFUlNJT05gXQotCi0gW0BodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Y
T1BfaW5zdHJ1Y3Rpb25fc2V0IFhPUF0geDg2IGV4dGVuc2lvbiAoQU1EIHNwZWNpZmljKS4KLQot
IFZlcnNpb24gbnVtYmVyIGlzOiAqNS4xLjEqLgotICovCi0jZGVmaW5lIEJPT1NUX0hXX1NJTURf
WDg2X0FNRF9YT1BfVkVSU0lPTiBCT09TVF9WRVJTSU9OX05VTUJFUig1LCAxLCAxKQotCi0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcHJlZGVmL2xhbmd1YWdlLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9wcmVkZWYvbGFuZ3VhZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MGEzMTdkNWVjZWQ4ZWUyY2IxZmZiNmU3NzMzMTk5MTVkNTI4MGU3My4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGFuZ3VhZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3
ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAxMS0yMDE1Ci1EaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJv
b3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWYgIWRlZmluZWQoQk9PU1RfUFJFREVG
X0xBTkdVQUdFX0gpIHx8IGRlZmluZWQoQk9PU1RfUFJFREVGX0lOVEVSTkFMX0dFTkVSQVRFX1RF
U1RTKQotI2lmbmRlZiBCT09TVF9QUkVERUZfTEFOR1VBR0VfSAotI2RlZmluZSBCT09TVF9QUkVE
RUZfTEFOR1VBR0VfSAotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbGFuZ3VhZ2Uv
c3RkYy5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9sYW5ndWFnZS9zdGRjcHAuaD4KLSNpbmNs
dWRlIDxib29zdC9wcmVkZWYvbGFuZ3VhZ2Uvb2JqYy5oPgotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9sYW5ndWFn
ZS9vYmpjLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVk
ZWYvbGFuZ3VhZ2Uvb2JqYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGUzYWQz
YzVjMDdjZjY0NGM4YjliYTFhZDE0ODVkZWIzYWEyMDFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZWRlZi9sYW5ndWFnZS9vYmpjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiAr
MCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMTEtMjAxNQotRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfTEFOR1VB
R0VfT0JKQ19ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9MQU5HVUFHRV9PQkpDX0gKLQotI2luY2x1
ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRl
Zi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0xBTkdfT0JKQ2BdCi0KLVtAaHR0cDov
L2VuLndpa2lwZWRpYS5vcmcvd2lraS9PYmplY3RpdmUtQyBPYmplY3RpdmUtQ10gbGFuZ3VhZ2Uu
Ci0KLVt0YWJsZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19d
XQotCi0gICAgW1tgX19PQkpDX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIF0KLSAq
LwotCi0jZGVmaW5lIEJPT1NUX0xBTkdfT0JKQyBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZB
SUxBQkxFCi0KLSNpZiBkZWZpbmVkKF9fT0JKQ19fKQotIyAgIHVuZGVmIEJPT1NUX0xBTkdfT0JK
QwotIyAgIGRlZmluZSBCT09TVF9MQU5HX09CSkMgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxB
QkxFCi0jZW5kaWYKLQotI2lmIEJPT1NUX0xBTkdfT0JKQwotIyAgIGRlZmluZSBCT09TVF9MQU5H
X09CSkNfQVZBSUxBQkxFCi0jZW5kaWYKLQotI2RlZmluZSBCT09TVF9MQU5HX09CSkNfTkFNRSAi
T2JqZWN0aXZlLUMiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90
ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0xBTkdfT0JKQyxCT09TVF9M
QU5HX09CSkNfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3ByZWRlZi9sYW5ndWFnZS9zdGRjLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGFuZ3VhZ2Uvc3RkYy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkYjI1YzEyZGMwODY2YTc2OGZjM2U2Y2I1ZTI2MzQyYWIyMGFm
NzU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9sYW5ndWFnZS9zdGRj
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2
ZXJhIDIwMTEtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQot
I2lmbmRlZiBCT09TVF9QUkVERUZfTEFOR1VBR0VfU1REQ19ICi0jZGVmaW5lIEJPT1NUX1BSRURF
Rl9MQU5HVUFHRV9TVERDX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJl
ci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJP
T1NUX0xBTkdfU1REQ2BdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DXyhwcm9n
cmFtbWluZ19sYW5ndWFnZSkgU3RhbmRhcmQgQ10gbGFuZ3VhZ2UuCi1JZiBhdmFpbGFibGUsIHRo
ZSB5ZWFyIG9mIHRoZSBzdGFuZGFyZCBpcyBkZXRlY3RlZCBhcyBZWVlZLk1NLjEgZnJvbSB0aGUg
RXBvYyBkYXRlLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZf
dmVyc2lvbl9fXV0KLQotICAgIFtbYF9fU1REQ19fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0K
LQotICAgIFtbYF9fU1REQ19WRVJTSU9OX19gXSBbVi5SLlBdXQotICAgIF0KLSAqLwotCi0jZGVm
aW5lIEJPT1NUX0xBTkdfU1REQyBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0K
LSNpZiBkZWZpbmVkKF9fU1REQ19fKQotIyAgIHVuZGVmIEJPT1NUX0xBTkdfU1REQwotIyAgIGlm
IGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykKLSMgICAgICAgaWYgKF9fU1REQ19WRVJTSU9OX18g
PiAxMDApCi0jICAgICAgICAgICBkZWZpbmUgQk9PU1RfTEFOR19TVERDIEJPT1NUX1BSRURFRl9N
QUtFX1lZWVlNTShfX1NURENfVkVSU0lPTl9fKQotIyAgICAgICBlbHNlCi0jICAgICAgICAgICBk
ZWZpbmUgQk9PU1RfTEFOR19TVERDIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotIyAg
ICAgICBlbmRpZgotIyAgIGVsc2UKLSMgICAgICAgZGVmaW5lIEJPT1NUX0xBTkdfU1REQyBCT09T
VF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNpZiBCT09T
VF9MQU5HX1NUREMKLSMgICBkZWZpbmUgQk9PU1RfTEFOR19TVERDX0FWQUlMQUJMRQotI2VuZGlm
Ci0KLSNkZWZpbmUgQk9PU1RfTEFOR19TVERDX05BTUUgIlN0YW5kYXJkIEMiCi0KLSNlbmRpZgot
Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVD
TEFSRV9URVNUKEJPT1NUX0xBTkdfU1REQyxCT09TVF9MQU5HX1NURENfTkFNRSkKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9sYW5n
dWFnZS9zdGRjcHAuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3ByZWRlZi9sYW5ndWFnZS9zdGRjcHAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MzRkYzhjN2RlYjc5ZjhkNTA1NTg1MDUzNTJjMWU3NmNlNjcyYTNlZi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGFuZ3VhZ2Uvc3RkY3BwLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjEgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDExLTIwMTUKLURp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4K
LShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJF
REVGX0xBTkdVQUdFX1NURENQUF9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9MQU5HVUFHRV9TVERD
UFBfSAotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVk
ZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4KLQotLypgCi1baGVhZGluZyBgQk9PU1RfTEFOR19TVERD
UFBgXQotCi1bQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQyUyQiUyQiBTdGFuZGFyZCBD
KytdIGxhbmd1YWdlLgotSWYgYXZhaWxhYmxlLCB0aGUgeWVhciBvZiB0aGUgc3RhbmRhcmQgaXMg
ZGV0ZWN0ZWQgYXMgWVlZWS5NTS4xIGZyb20gdGhlIEVwb2MgZGF0ZS4KLUJlY2F1c2Ugb2YgdGhl
IHdheSB0aGUgQysrIHN0YW5kYXJkaXphdGlvbiBwcm9jZXNzIHdvcmtzIHRoZQotZGVmaW5lZCB2
ZXJzaW9uIHllYXIgd2lsbCBub3QgYmUgdGhlIGNvbW1vbmx5IGtub3duIHllYXIgb2YgdGhlIHN0
YW5kYXJkLgotU3BlY2lmaWNhbGx5IHRoZSBkZWZpbmVkIHZlcnNpb25zIGFyZToKLQotW3RhYmxl
IERldGVjdGVkIFZlcnNpb24gTnVtYmVyIHZzLiBDKysgU3RhbmRhcmQgWWVhcgotICBbW0RldGVj
dGVkIFZlcnNpb24gTnVtYmVyXSBbU3RhbmRhcmQgWWVhcl0gW0MrKyBTdGFuZGFyZF1dCi0gIFtb
MjcuMTEuMV0gWzE5OThdIFtJU08vSUVDIDE0ODgyOjE5OThdXQotICBbWzQxLjEyLjFdIFsyMDEx
XSBbSVNPL0lFQyAxNDg4MjoyMDExXV0KLV0KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1i
b2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfX2NwbHVzcGx1c2BdIFtfX3By
ZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BfX2NwbHVzcGx1c2BdIFtZWVlZLk1NLjFdXQot
ICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0xBTkdfU1REQ1BQIEJPT1NUX1ZFUlNJT05fTlVN
QkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCi0jICAgdW5kZWYg
Qk9PU1RfTEFOR19TVERDUFAKLSMgICBpZiAoX19jcGx1c3BsdXMgPiAxMDApCi0jICAgICAgIGRl
ZmluZSBCT09TVF9MQU5HX1NURENQUCBCT09TVF9QUkVERUZfTUFLRV9ZWVlZTU0oX19jcGx1c3Bs
dXMpCi0jICAgZWxzZQotIyAgICAgICBkZWZpbmUgQk9PU1RfTEFOR19TVERDUFAgQk9PU1RfVkVS
U0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgZW5kaWYKLSNlbmRpZgotCi0jaWYgQk9PU1RfTEFO
R19TVERDUFAKLSMgICBkZWZpbmUgQk9PU1RfTEFOR19TVERDUFBfQVZBSUxBQkxFCi0jZW5kaWYK
LQotI2RlZmluZSBCT09TVF9MQU5HX1NURENQUF9OQU1FICJTdGFuZGFyZCBDKysiCi0KLS8qYAot
W2hlYWRpbmcgYEJPT1NUX0xBTkdfU1REQ1BQQ0xJYF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlh
Lm9yZy93aWtpL0MlMkIlMkIvQ0xJIFN0YW5kYXJkIEMrKy9DTEldIGxhbmd1YWdlLgotSWYgYXZh
aWxhYmxlLCB0aGUgeWVhciBvZiB0aGUgc3RhbmRhcmQgaXMgZGV0ZWN0ZWQgYXMgWVlZWS5NTS4x
IGZyb20gdGhlIEVwb2MgZGF0ZS4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10g
W19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfX2NwbHVzcGx1c19jbGlgXSBbX19wcmVk
ZWZfZGV0ZWN0aW9uX19dXQotCi0gICAgW1tgX19jcGx1c3BsdXNfY2xpYF0gW1lZWVkuTU0uMV1d
Ci0gICAgXQotICovCi0KLSNkZWZpbmUgQk9PU1RfTEFOR19TVERDUFBDTEkgQk9PU1RfVkVSU0lP
Tl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgZGVmaW5lZChfX2NwbHVzcGx1c19jbGkpCi0j
ICAgdW5kZWYgQk9PU1RfTEFOR19TVERDUFBDTEkKLSMgICBpZiAoX19jcGx1c3BsdXNfY2xpID4g
MTAwKQotIyAgICAgICBkZWZpbmUgQk9PU1RfTEFOR19TVERDUFBDTEkgQk9PU1RfUFJFREVGX01B
S0VfWVlZWU1NKF9fY3BsdXNwbHVzX2NsaSkKLSMgICBlbHNlCi0jICAgICAgIGRlZmluZSBCT09T
VF9MQU5HX1NURENQUENMSSBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSMgICBlbmRp
ZgotI2VuZGlmCi0KLSNpZiBCT09TVF9MQU5HX1NURENQUENMSQotIyAgIGRlZmluZSBCT09TVF9M
QU5HX1NURENQUENMSV9BVkFJTEFCTEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0xBTkdfU1RE
Q1BQQ0xJX05BTUUgIlN0YW5kYXJkIEMrKy9DTEkiCi0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0xB
TkdfU1RERUNQUGBdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbWJlZGRlZF9D
JTJCJTJCIFN0YW5kYXJkIEVtYmVkZGVkIEMrK10gbGFuZ3VhZ2UuCi0KLVt0YWJsZQotICAgIFtb
X19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19lbWJl
ZGRlZF9jcGx1c3BsdXNgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIF0KLSAqLwotCi0j
ZGVmaW5lIEJPT1NUX0xBTkdfU1RERUNQUCBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxB
QkxFCi0KLSNpZiBkZWZpbmVkKF9fZW1iZWRkZWRfY3BsdXNwbHVzKQotIyAgIHVuZGVmIEJPT1NU
X0xBTkdfU1RERUNQUAotIyAgIGRlZmluZSBCT09TVF9MQU5HX1NUREVDUFAgQk9PU1RfVkVSU0lP
Tl9OVU1CRVJfQVZBSUxBQkxFCi0jZW5kaWYKLQotI2lmIEJPT1NUX0xBTkdfU1RERUNQUAotIyAg
IGRlZmluZSBCT09TVF9MQU5HX1NUREVDUFBfQVZBSUxBQkxFCi0jZW5kaWYKLQotI2RlZmluZSBC
T09TVF9MQU5HX1NUREVDUFBfTkFNRSAiU3RhbmRhcmQgRW1iZWRkZWQgQysrIgotCi0jZW5kaWYK
LQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RF
Q0xBUkVfVEVTVChCT09TVF9MQU5HX1NURENQUCxCT09TVF9MQU5HX1NURENQUF9OQU1FKQotCi0j
aW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFS
RV9URVNUKEJPT1NUX0xBTkdfU1REQ1BQQ0xJLEJPT1NUX0xBTkdfU1REQ1BQQ0xJX05BTUUpCi0K
LSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNM
QVJFX1RFU1QoQk9PU1RfTEFOR19TVERFQ1BQLEJPT1NUX0xBTkdfU1RERUNQUF9OQU1FKQpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVm
L2xpYnJhcnkuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3By
ZWRlZi9saWJyYXJ5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNTE4YTkwZDgw
NTE2NDdlN2IzOGY1MGFiZTkwNTRiYjU5Njc1NmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvcHJlZGVmL2xpYnJhcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8q
Ci1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBm
aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNF
TlNFXzFfMC50eHQpCi0qLwotCi0jaWYgIWRlZmluZWQoQk9PU1RfUFJFREVGX0xJQlJBUllfSCkg
fHwgZGVmaW5lZChCT09TVF9QUkVERUZfSU5URVJOQUxfR0VORVJBVEVfVEVTVFMpCi0jaWZuZGVm
IEJPT1NUX1BSRURFRl9MSUJSQVJZX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0xJQlJBUllfSAot
I2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbGlicmFyeS9jLmg+Ci0jaW5jbHVkZSA8
Ym9vc3QvcHJlZGVmL2xpYnJhcnkvc3RkLmg+Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2xpYnJhcnkvYy5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2xpYnJhcnkv
Yy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTg4NDFlODI3OWZiMzU3OTE1Yjgw
MjE3NjQ1MDNlODYyYmNiOTcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRl
Zi9saWJyYXJ5L2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qCi1Db3B5cmln
aHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpCi0qLwotCi0jaWYgIWRlZmluZWQoQk9PU1RfUFJFREVGX0xJQlJBUllfQ19IKSB8fCBkZWZp
bmVkKEJPT1NUX1BSRURFRl9JTlRFUk5BTF9HRU5FUkFURV9URVNUUykKLSNpZm5kZWYgQk9PU1Rf
UFJFREVGX0xJQlJBUllfQ19ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9MSUJSQVJZX0NfSAotI2Vu
ZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbGlicmFyeS9jL19wcmVmaXguaD4KLQotI2lu
Y2x1ZGUgPGJvb3N0L3ByZWRlZi9saWJyYXJ5L2MvZ251Lmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJl
ZGVmL2xpYnJhcnkvYy91Yy5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9saWJyYXJ5L2Mvdm1z
Lmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2xpYnJhcnkvYy96b3MuaD4KLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVk
ZWYvbGlicmFyeS9jL19wcmVmaXguaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZWRlZi9saWJyYXJ5L2MvX3ByZWZpeC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxMmJjYjBmYjNmYmY4ZDUyM2MxOGI4M2VlMjhiZTA3OTUzYTRmMDc5Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9saWJyYXJ5L2MvX3ByZWZpeC5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAy
MDA4LTIwMTMKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5k
ZWYgQk9PU1RfUFJFREVGX0xJQlJBUllfQ19fUFJFRklYX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVG
X0xJQlJBUllfQ19fUFJFRklYX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvX2Nh
c3NlcnQuaD4KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9jL2dudS5oIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2xpYnJhcnkvYy9nbnUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU0Y2E4OWQ2NDI2MTQzZDdkMTI3ZmExM2Q4OGM5ODVm
YTc3ODZhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9j
L2dudS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5l
IFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBM
aWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSov
Ci0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0xJQlJBUllfQ19HTlVfSAotI2RlZmluZSBCT09TVF9Q
UkVERUZfTElCUkFSWV9DX0dOVV9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9u
dW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0jaW5jbHVkZSA8Ym9v
c3QvcHJlZGVmL2xpYnJhcnkvYy9fcHJlZml4Lmg+Ci0KLSNpZiBkZWZpbmVkKF9fU1REQ19fKQot
I2luY2x1ZGUgPHN0ZGRlZi5oPgotI2VsaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKLSNpbmNsdWRl
IDxjc3RkZGVmPgotI2VuZGlmCi0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0xJQl9DX0dOVWBdCi0K
LVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HbGliYyBHTlUgZ2xpYmNdIFN0YW5kYXJk
IEMgbGlicmFyeS4KLVZlcnNpb24gbnVtYmVyIGF2YWlsYWJsZSBhcyBtYWpvciwgYW5kIG1pbm9y
LgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9f
XV0KLQotICAgIFtbYF9fR0xJQkNfX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tg
X19HTlVfTElCUkFSWV9fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLQotICAgIFtbYF9fR0xJ
QkNfX2AsIGBfX0dMSUJDX01JTk9SX19gXSBbVi5SLjBdXQotICAgIFtbYF9fR05VX0xJQlJBUllf
X2AsIGBfX0dOVV9MSUJSQVJZX01JTk9SX19gXSBbVi5SLjBdXQotICAgIF0KLSAqLwotCi0jZGVm
aW5lIEJPT1NUX0xJQl9DX0dOVSBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0K
LSNpZiBkZWZpbmVkKF9fR0xJQkNfXykgfHwgZGVmaW5lZChfX0dOVV9MSUJSQVJZX18pCi0jICAg
dW5kZWYgQk9PU1RfTElCX0NfR05VCi0jICAgaWYgZGVmaW5lZChfX0dMSUJDX18pCi0jICAgICAg
IGRlZmluZSBCT09TVF9MSUJfQ19HTlUgXAotICAgICAgICAgICAgQk9PU1RfVkVSU0lPTl9OVU1C
RVIoX19HTElCQ19fLF9fR0xJQkNfTUlOT1JfXywwKQotIyAgIGVsc2UKLSMgICAgICAgZGVmaW5l
IEJPT1NUX0xJQl9DX0dOVSBcCi0gICAgICAgICAgICBCT09TVF9WRVJTSU9OX05VTUJFUihfX0dO
VV9MSUJSQVJZX18sX19HTlVfTElCUkFSWV9NSU5PUl9fLDApCi0jICAgZW5kaWYKLSNlbmRpZgot
Ci0jaWYgQk9PU1RfTElCX0NfR05VCi0jICAgZGVmaW5lIEJPT1NUX0xJQl9DX0dOVV9BVkFJTEFC
TEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0xJQl9DX0dOVV9OQU1FICJHTlUiCi0KLSNlbmRp
ZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZf
REVDTEFSRV9URVNUKEJPT1NUX0xJQl9DX0dOVSxCT09TVF9MSUJfQ19HTlVfTkFNRSkKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9s
aWJyYXJ5L2MvdWMuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3ByZWRlZi9saWJyYXJ5L2MvdWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMw
ODFlOTRjNjI1YjkzMDMwOGFlM2MzN2U0YWMyOGIzMzlhNjQ1NS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9jL3VjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0
NyArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfTElC
UkFSWV9DX1VDX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0xJQlJBUllfQ19VQ19ICi0KLSNpbmNs
dWRlIDxib29zdC9wcmVkZWYvbGlicmFyeS9jL19wcmVmaXguaD4KLQotI2luY2x1ZGUgPGJvb3N0
L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+
Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0xJQl9DX1VDYF0KLQotW0BodHRwOi8vZW4ud2lraXBl
ZGlhLm9yZy93aWtpL1VjbGliYyB1Q2xpYmNdIFN0YW5kYXJkIEMgbGlicmFyeS4KLQotW3RhYmxl
Ci0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBb
W2BfX1VDTElCQ19fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLQotICAgIFtbYF9fVUNMSUJD
X01BSk9SX19gLCBgX19VQ0xJQkNfTUlOT1JfX2AsIGBfX1VDTElCQ19TVUJMRVZFTF9fYF0gW1Yu
Ui5QXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9MSUJfQ19VQyBCT09TVF9WRVJTSU9O
X05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBkZWZpbmVkKF9fVUNMSUJDX18pCi0jICAgdW5k
ZWYgQk9PU1RfTElCX0NfVUMKLSMgICBkZWZpbmUgQk9PU1RfTElCX0NfVUMgQk9PU1RfVkVSU0lP
Tl9OVU1CRVIoXAotICAgICAgICBfX1VDTElCQ19NQUpPUl9fLF9fVUNMSUJDX01JTk9SX18sX19V
Q0xJQkNfU1VCTEVWRUxfXykKLSNlbmRpZgotCi0jaWYgQk9PU1RfTElCX0NfVUMKLSMgICBkZWZp
bmUgQk9PU1RfTElCX0NfVUNfQVZBSUxBQkxFCi0jZW5kaWYKLQotI2RlZmluZSBCT09TVF9MSUJf
Q19VQ19OQU1FICJ1Q2xpYmMiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2Rl
dGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0xJQl9DX1VDLEJP
T1NUX0xJQl9DX1VDX05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9jL3Ztcy5oIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2xpYnJhcnkvYy92bXMuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg1ZjFhNzdkNmNmZGJkNTZlMWM4M2QzNzY4NWZkZTBm
NjA0MmQxNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9j
L3Ztcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5l
IFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBM
aWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSov
Ci0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0xJQlJBUllfQ19WTVNfSAotI2RlZmluZSBCT09TVF9Q
UkVERUZfTElCUkFSWV9DX1ZNU19ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbGlicmFyeS9j
L19wcmVmaXguaD4KLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgot
I2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0xJ
Ql9DX1ZNU2BdCi0KLVZNUyBsaWJjIFN0YW5kYXJkIEMgbGlicmFyeS4KLVZlcnNpb24gbnVtYmVy
IGF2YWlsYWJsZSBhcyBtYWpvciwgbWlub3IsIGFuZCBwYXRjaC4KLQotW3RhYmxlCi0gICAgW1tf
X3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfX0NSVExf
VkVSYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLQotICAgIFtbYF9fQ1JUTF9WRVJgXSBbVi5S
LlBdXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0xJQl9DX1ZNUyBCT09TVF9WRVJTSU9O
X05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBkZWZpbmVkKF9fQ1JUTF9WRVIpCi0jICAgdW5k
ZWYgQk9PU1RfTElCX0NfVk1TCi0jICAgZGVmaW5lIEJPT1NUX0xJQl9DX1ZNUyBCT09TVF9QUkVE
RUZfTUFLRV8xMF9WVlJSMFBQMDAoX19DUlRMX1ZFUikKLSNlbmRpZgotCi0jaWYgQk9PU1RfTElC
X0NfVk1TCi0jICAgZGVmaW5lIEJPT1NUX0xJQl9DX1ZNU19BVkFJTEFCTEUKLSNlbmRpZgotCi0j
ZGVmaW5lIEJPT1NUX0xJQl9DX1ZNU19OQU1FICJWTVMiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8
Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJP
T1NUX0xJQl9DX1ZNUyxCT09TVF9MSUJfQ19WTVNfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9saWJyYXJ5L2Mvem9zLmgg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFy
eS9jL3pvcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjJkMzU1MzlmNTMyNjFh
MmUzODBhMTNhNWQ0NzEwNjk2MGQ0YjdmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3ByZWRlZi9saWJyYXJ5L2Mvem9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0v
KgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfTElCUkFSWV9DX1pPU19I
Ci0jZGVmaW5lIEJPT1NUX1BSRURFRl9MSUJSQVJZX0NfWk9TX0gKLQotI2luY2x1ZGUgPGJvb3N0
L3ByZWRlZi9saWJyYXJ5L2MvX3ByZWZpeC5oPgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3Zl
cnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4KLQotLypgCi1b
aGVhZGluZyBgQk9PU1RfTElCX0NfWk9TYF0KLQotei9PUyBsaWJjIFN0YW5kYXJkIEMgbGlicmFy
eS4KLVZlcnNpb24gbnVtYmVyIGF2YWlsYWJsZSBhcyBtYWpvciwgbWlub3IsIGFuZCBwYXRjaC4K
LQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11d
Ci0KLSAgICBbW2BfX0xJQlJFTF9fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLQotICAgIFtb
YF9fTElCUkVMX19gXSBbVi5SLlBdXQotICAgIFtbYF9fVEFSR0VUX0xJQl9fYF0gW1YuUi5QXV0K
LSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9MSUJfQ19aT1MgQk9PU1RfVkVSU0lPTl9OVU1C
RVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgZGVmaW5lZChfX0xJQlJFTF9fKQotIyAgIHVuZGVmIEJP
T1NUX0xJQl9DX1pPUwotIyAgIGlmICFkZWZpbmVkKEJPT1NUX0xJQl9DX1pPUykgJiYgZGVmaW5l
ZChfX0xJQlJFTF9fKQotIyAgICAgICBkZWZpbmUgQk9PU1RfTElCX0NfWk9TIEJPT1NUX1BSRURF
Rl9NQUtFXzBYX1ZSUlBQUFAoX19MSUJSRUxfXykKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVk
KEJPT1NUX0xJQl9DX1pPUykgJiYgZGVmaW5lZChfX1RBUkdFVF9MSUJfXykKLSMgICAgICAgZGVm
aW5lIEJPT1NUX0xJQl9DX1pPUyBCT09TVF9QUkVERUZfTUFLRV8wWF9WUlJQUFBQKF9fVEFSR0VU
X0xJQl9fKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfTElCX0NfWk9TKQotIyAg
ICAgICBkZWZpbmUgQk9PU1RfTElCX0NfWk9TIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJM
RQotIyAgIGVuZGlmCi0jZW5kaWYKLQotI2lmIEJPT1NUX0xJQl9DX1pPUwotIyAgIGRlZmluZSBC
T09TVF9MSUJfQ19aT1NfQVZBSUxBQkxFCi0jZW5kaWYKLQotI2RlZmluZSBCT09TVF9MSUJfQ19a
T1NfTkFNRSAiei9PUyIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWls
L3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfTElCX0NfWk9TLEJPT1NU
X0xJQl9DX1pPU19OQU1FKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2xpYnJhcnkvc3RkLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9zdGQuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDAzYjZmZjM3YWZlMTkwNDc0OTkwNTcxNmM4MDVkMWRkODdlYjFh
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9zdGQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEg
MjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotI2lmICFk
ZWZpbmVkKEJPT1NUX1BSRURFRl9MSUJSQVJZX1NURF9IKSB8fCBkZWZpbmVkKEJPT1NUX1BSRURF
Rl9JTlRFUk5BTF9HRU5FUkFURV9URVNUUykKLSNpZm5kZWYgQk9PU1RfUFJFREVGX0xJQlJBUllf
U1REX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0xJQlJBUllfU1REX0gKLSNlbmRpZgotCi0jaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL2xpYnJhcnkvc3RkL19wcmVmaXguaD4KLQotI2luY2x1ZGUgPGJv
b3N0L3ByZWRlZi9saWJyYXJ5L3N0ZC9jeHguaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbGli
cmFyeS9zdGQvZGlua3Vtd2FyZS5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9saWJyYXJ5L3N0
ZC9saWJjb21vLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2xpYnJhcnkvc3RkL21vZGVuYS5o
PgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9saWJyYXJ5L3N0ZC9tc2wuaD4KLSNpbmNsdWRlIDxi
b29zdC9wcmVkZWYvbGlicmFyeS9zdGQvcm9ndWV3YXZlLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJl
ZGVmL2xpYnJhcnkvc3RkL3NnaS5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9saWJyYXJ5L3N0
ZC9zdGRjcHAzLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2xpYnJhcnkvc3RkL3N0bHBvcnQu
aD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbGlicmFyeS9zdGQvdmFjcHAuaD4KLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9w
cmVkZWYvbGlicmFyeS9zdGQvX3ByZWZpeC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2xpYnJhcnkvc3RkL19wcmVmaXguaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTMyYjg1NTdiMTgzYWUxZDY4NmRkNDBiYjU3MzFkMDgxNjA1N2Rj
Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9zdGQvX3By
ZWZpeC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5l
IFJpdmVyYSAyMDA4LTIwMTMKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBM
aWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSov
Ci0jaWZuZGVmIEJPT1NUX1BSRURFRl9MSUJSQVJZX1NURF9fUFJFRklYX0gKLSNkZWZpbmUgQk9P
U1RfUFJFREVGX0xJQlJBUllfU1REX19QUkVGSVhfSAotCi0vKgotV2UgbmVlZCB0byBpbmNsdWRl
IGFuIFNURCBoZWFkZXIgdG8gZ2l2ZXMgdXMgdGhlIGNvbnRleHQKLW9mIHdoaWNoIGxpYnJhcnkg
d2UgYXJlIHVzaW5nLiBUaGUgInNtYWxsZXN0IiBjb2RlLXdpc2UgaGVhZGVyCi1zZWVtcyB0byBi
ZSA8ZXhjZXB0aW9uPi4gQm9vc3QgdXNlcyA8dXRpbGl0eT4gYnV0IGFzIGZhcgotYXMgSSBjYW4g
dGVsbCAoUlIpIGl0J3Mgbm90IGEgc3RhbmQtYWxvbmUgaGVhZGVyIGluIG1vc3QKLWltcGxlbWVu
dGF0aW9ucy4gVXNpbmcgPGV4Y2VwdGlvbj4gYWxzbyBoYXMgdGhlIGJlbmVmaXQgb2YKLWJlaW5n
IGF2YWlsYWJsZSBpbiBFQysrLCBzbyB3ZSBnZXQgYSBjaGFuY2UgdG8gbWFrZSB0aGlzIHdvcmsK
LWZvciBlbWJlZGRlZCB1c2Vycy4gQW5kIHNpbmNlIGl0J3Mgbm90IGEgaGVhZGVyIGltcGFjdGVk
IGJ5IFRSMQotdGhlcmUncyBubyBtYWdpYyBuZWVkZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgZmFj
ZSBvZiB0aGUKLUJvb3N0LlRSMSBsaWJyYXJ5LgotKi8KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYv
ZGV0YWlsL19leGNlcHRpb24uaD4KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9zdGQvY3h4LmggYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9z
dGQvY3h4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YjUyY2Q2YWY4MjMxYzI0
ZjFlMTBhMGVhMGRkYTY5ODc4ZmM3ZGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
cHJlZGVmL2xpYnJhcnkvc3RkL2N4eC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAot
LyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDExLTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0xJQlJBUllfU1REX0NY
WF9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9MSUJSQVJZX1NURF9DWFhfSAotCi0jaW5jbHVkZSA8
Ym9vc3QvcHJlZGVmL2xpYnJhcnkvc3RkL19wcmVmaXguaD4KLQotI2luY2x1ZGUgPGJvb3N0L3By
ZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0K
LS8qYAotW2hlYWRpbmcgYEJPT1NUX0xJQl9TVERfQ1hYYF0KLQotW0BodHRwOi8vbGliY3h4Lmxs
dm0ub3JnLyBsaWJjKytdIEMrKyBTdGFuZGFyZCBMaWJyYXJ5LgotCi1bdGFibGUKLSAgICBbW19f
cHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9MSUJDUFBf
VkVSU0lPTmBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BfTElCQ1BQX1ZFUlNJ
T05gXSBbVi4wLlBdXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0xJQl9TVERfQ1hYIEJP
T1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmluZWQoX0xJQkNQUF9W
RVJTSU9OKQotIyAgIHVuZGVmIEJPT1NUX0xJQl9TVERfQ1hYCi0jICAgZGVmaW5lIEJPT1NUX0xJ
Ql9TVERfQ1hYIEJPT1NUX1BSRURFRl9NQUtFXzEwX1ZQUFAoX0xJQkNQUF9WRVJTSU9OKQotI2Vu
ZGlmCi0KLSNpZiBCT09TVF9MSUJfU1REX0NYWAotIyAgIGRlZmluZSBCT09TVF9MSUJfU1REX0NY
WF9BVkFJTEFCTEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0xJQl9TVERfQ1hYX05BTUUgImxp
YmMrKyIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4K
LUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfTElCX1NURF9DWFgsQk9PU1RfTElCX1NU
RF9DWFhfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZWRlZi9saWJyYXJ5L3N0ZC9kaW5rdW13YXJlLmggYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9zdGQvZGlua3Vtd2Fy
ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmMwNzc2MDVkNmQ0Yzg2YzNmMDY1
NDA4ZmUyMzg5MDA3YzIwNDY5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRl
Zi9saWJyYXJ5L3N0ZC9kaW5rdW13YXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBA
Ci0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcv
TElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfTElCUkFSWV9TVERf
RElOS1VNV0FSRV9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9MSUJSQVJZX1NURF9ESU5LVU1XQVJF
X0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9saWJyYXJ5L3N0ZC9fcHJlZml4Lmg+Ci0KLSNp
bmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9w
cmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9MSUJfU1REX0RJTktVTVdBUkVg
XQotCi1bQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGlua3Vtd2FyZSBEaW5rdW13YXJl
XSBTdGFuZGFyZCBDKysgTGlicmFyeS4KLUlmIGF2YWlsYWJsZSB2ZXJzaW9uIG51bWJlciBhcyBt
YWpvciwgbWlub3IsIGFuZCBwYXRjaC4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xf
X10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfWVZBTFNgLCBgX19JQk1DUFBfX2Bd
IFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tgX0NQUExJQl9WRVJgXSBbX19wcmVkZWZf
ZGV0ZWN0aW9uX19dXQotCi0gICAgW1tgX0NQUExJQl9WRVJgXSBbVi5SLjBdXQotICAgIF0KLSAq
LwotCi0jZGVmaW5lIEJPT1NUX0xJQl9TVERfRElOS1VNV0FSRSBCT09TVF9WRVJTSU9OX05VTUJF
Ul9OT1RfQVZBSUxBQkxFCi0KLSNpZiAoZGVmaW5lZChfWVZBTFMpICYmICFkZWZpbmVkKF9fSUJN
Q1BQX18pKSB8fCBkZWZpbmVkKF9DUFBMSUJfVkVSKQotIyAgIHVuZGVmIEJPT1NUX0xJQl9TVERf
RElOS1VNV0FSRQotIyAgIGlmIGRlZmluZWQoX0NQUExJQl9WRVIpCi0jICAgICAgIGRlZmluZSBC
T09TVF9MSUJfU1REX0RJTktVTVdBUkUgQk9PU1RfUFJFREVGX01BS0VfMTBfVlZSUihfQ1BQTElC
X1ZFUikKLSMgICBlbHNlCi0jICAgICAgIGRlZmluZSBCT09TVF9MSUJfU1REX0RJTktVTVdBUkUg
Qk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgZW5kaWYKLSNlbmRpZgotCi0jaWYg
Qk9PU1RfTElCX1NURF9ESU5LVU1XQVJFCi0jICAgZGVmaW5lIEJPT1NUX0xJQl9TVERfRElOS1VN
V0FSRV9BVkFJTEFCTEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0xJQl9TVERfRElOS1VNV0FS
RV9OQU1FICJEaW5rdW13YXJlIgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9k
ZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9MSUJfU1REX0RJ
TktVTVdBUkUsQk9PU1RfTElCX1NURF9ESU5LVU1XQVJFX05BTUUpCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9zdGQv
bGliY29tby5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJl
ZGVmL2xpYnJhcnkvc3RkL2xpYmNvbW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OTdkNGE1M2Q2ZjYxMDg5OTBkMTliYTgyZWE5ZTllOTIzYzAyMmNjMi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9zdGQvbGliY29tby5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUK
LURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0
dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1Rf
UFJFREVGX0xJQlJBUllfU1REX0xJQkNPTU9fSAotI2RlZmluZSBCT09TVF9QUkVERUZfTElCUkFS
WV9TVERfTElCQ09NT19ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbGlicmFyeS9zdGQvX3By
ZWZpeC5oPgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4KLQotLypgCi1baGVhZGluZyBgQk9PU1RfTElCX1NU
RF9DT01PYF0KLQotW0BodHRwOi8vd3d3LmNvbWVhdWNvbXB1dGluZy5jb20vbGliY29tby8gQ29t
ZWF1IENvbXB1dGluZ10gU3RhbmRhcmQgQysrIExpYnJhcnkuCi1WZXJzaW9uIG51bWJlciBhdmFp
bGFibGUgYXMgbWFqb3IuCi0KLVt0YWJsZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3By
ZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19MSUJDT01PX19gXSBbX19wcmVkZWZfZGV0ZWN0
aW9uX19dXQotCi0gICAgW1tgX19MSUJDT01PX1ZFUlNJT05fX2BdIFtWLjAuMF1dCi0gICAgXQot
ICovCi0KLSNkZWZpbmUgQk9PU1RfTElCX1NURF9DT01PIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05P
VF9BVkFJTEFCTEUKLQotI2lmIGRlZmluZWQoX19MSUJDT01PX18pCi0jICAgdW5kZWYgQk9PU1Rf
TElCX1NURF9DT01PCi0jICAgZGVmaW5lIEJPT1NUX0xJQl9TVERfQ09NTyBCT09TVF9WRVJTSU9O
X05VTUJFUihfX0xJQkNPTU9fVkVSU0lPTl9fLDAsMCkKLSNlbmRpZgotCi0jaWYgQk9PU1RfTElC
X1NURF9DT01PCi0jICAgZGVmaW5lIEJPT1NUX0xJQl9TVERfQ09NT19BVkFJTEFCTEUKLSNlbmRp
ZgotCi0jZGVmaW5lIEJPT1NUX0xJQl9TVERfQ09NT19OQU1FICJDb21lYXUgQ29tcHV0aW5nIgot
Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1Rf
UFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9MSUJfU1REX0NPTU8sQk9PU1RfTElCX1NURF9DT01P
X05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9wcmVkZWYvbGlicmFyeS9zdGQvbW9kZW5hLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9zdGQvbW9kZW5hLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2N2FjNjJmMTdiOGJhZDI3NDQ3MWJiZTc3YmVkZTQxYzQ3
ZTY5MWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2xpYnJhcnkvc3Rk
L21vZGVuYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBS
ZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK
LSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0xJQlJBUllfU1REX01PREVOQV9ICi0jZGVmaW5l
IEJPT1NUX1BSRURFRl9MSUJSQVJZX1NURF9NT0RFTkFfSAotCi0jaW5jbHVkZSA8Ym9vc3QvcHJl
ZGVmL2xpYnJhcnkvc3RkL19wcmVmaXguaD4KLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJz
aW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hl
YWRpbmcgYEJPT1NUX0xJQl9TVERfTVNJUExgXQotCi1bQGh0dHA6Ly9tb2RlbmEudXMvIE1vZGVu
YSBTb2Z0d2FyZSBMaWIrK10gU3RhbmRhcmQgQysrIExpYnJhcnkuCi0KLVt0YWJsZQotICAgIFtb
X19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgTVNJUExf
Q09NUElMRV9IYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfX01TSVBMX0NPTVBJ
TEVfSGBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgXQotICovCi0KLSNkZWZpbmUgQk9P
U1RfTElCX1NURF9NU0lQTCBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNp
ZiBkZWZpbmVkKE1TSVBMX0NPTVBJTEVfSCkgfHwgZGVmaW5lZChfX01TSVBMX0NPTVBJTEVfSCkK
LSMgICB1bmRlZiBCT09TVF9MSUJfU1REX01TSVBMCi0jICAgZGVmaW5lIEJPT1NUX0xJQl9TVERf
TVNJUEwgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jZW5kaWYKLQotI2lmIEJPT1NU
X0xJQl9TVERfTVNJUEwKLSMgICBkZWZpbmUgQk9PU1RfTElCX1NURF9NU0lQTF9BVkFJTEFCTEUK
LSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0xJQl9TVERfTVNJUExfTkFNRSAiTW9kZW5hIFNvZnR3
YXJlIExpYisrIgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVz
dC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9MSUJfU1REX01TSVBMLEJPT1NU
X0xJQl9TVERfTVNJUExfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9saWJyYXJ5L3N0ZC9tc2wuaCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9saWJyYXJ5L3N0ZC9tc2wuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDczYzc0YzZkODRiNGRiOGNiYjU0MzE1OTBh
N2E4MTdhZTExYWM0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGli
cmFyeS9zdGQvbXNsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotQ29weXJp
Z2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNv
ZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAu
dHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfTElCUkFSWV9TVERfTVNMX0gKLSNkZWZp
bmUgQk9PU1RfUFJFREVGX0xJQlJBUllfU1REX01TTF9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVk
ZWYvbGlicmFyeS9zdGQvX3ByZWZpeC5oPgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNp
b25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4KLQotLypgCi1baGVh
ZGluZyBgQk9PU1RfTElCX1NURF9NU0xgXQotCi1bQGh0dHA6Ly93d3cuZnJlZXNjYWxlLmNvbS8g
TWV0cm93ZXJrc10gU3RhbmRhcmQgQysrIExpYnJhcnkuCi1WZXJzaW9uIG51bWJlciBhdmFpbGFi
bGUgYXMgbWFqb3IsIG1pbm9yLCBhbmQgcGF0Y2guCi0KLVt0YWJsZQotICAgIFtbX19wcmVkZWZf
c3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19NU0xfQ1BQX19gXSBb
X19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fTVNMX19gXSBbX19wcmVkZWZfZGV0ZWN0
aW9uX19dXQotCi0gICAgW1tgX19NU0xfQ1BQX19gXSBbVi5SLlBdXQotICAgIFtbYF9fTVNMX19g
XSBbVi5SLlBdXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0xJQl9TVERfTVNMIEJPT1NU
X1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmluZWQoX19NU0xfQ1BQX18p
IHx8IGRlZmluZWQoX19NU0xfXykKLSMgICB1bmRlZiBCT09TVF9MSUJfU1REX01TTAotIyAgIGlm
IGRlZmluZWQoX19NU0xfQ1BQX18pCi0jICAgICAgIGRlZmluZSBCT09TVF9MSUJfU1REX01TTCBC
T09TVF9QUkVERUZfTUFLRV8wWF9WUlBQKF9fTVNMX0NQUF9fKQotIyAgIGVsc2UKLSMgICAgICAg
ZGVmaW5lIEJPT1NUX0xJQl9TVERfTVNMIEJPT1NUX1BSRURFRl9NQUtFXzBYX1ZSUFAoX19NU0xf
XykKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNpZiBCT09TVF9MSUJfU1REX01TTAotIyAgIGRlZmlu
ZSBCT09TVF9MSUJfU1REX01TTF9BVkFJTEFCTEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0xJ
Ql9TVERfTVNMX05BTUUgIk1ldHJvd2Vya3MiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3Qv
cHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0xJ
Ql9TVERfTVNMLEJPT1NUX0xJQl9TVERfTVNMX05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9zdGQvcm9ndWV3
YXZlLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYv
bGlicmFyeS9zdGQvcm9ndWV3YXZlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlj
M2YyODhiNmY5ZTFlMmExNzcwOWIzNTYwYWY3ODU1OTFhN2E1MTMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2xpYnJhcnkvc3RkL3JvZ3Vld2F2ZS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUK
LURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0
dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1Rf
UFJFREVGX0xJQlJBUllfU1REX1JPR1VFV0FWRV9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9MSUJS
QVJZX1NURF9ST0dVRVdBVkVfSAotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2xpYnJhcnkvc3Rk
L19wcmVmaXguaD4KLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgot
I2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0xJ
Ql9TVERfUldgXQotCi1bQGh0dHA6Ly9zdGRjeHguYXBhY2hlLm9yZy8gUm9ndWV3YXZlXSBTdGFu
ZGFyZCBDKysgbGlicmFyeS4KLUlmIGF2YWlsYWJsZSB2ZXJzaW9uIG51bWJlciBhcyBtYWpvciwg
bWlub3IsIGFuZCBwYXRjaC4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19f
cHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfX1NURF9SV0NPTVBJTEVSX0hfX2BdIFtfX3By
ZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tgX1JXU1REX1ZFUmBdIFtfX3ByZWRlZl9kZXRlY3Rp
b25fX11dCi0KLSAgICBbW2BfUldTVERfVkVSYF0gW1YuUi5QXV0KLSAgICBdCi0gKi8KLQotI2Rl
ZmluZSBCT09TVF9MSUJfU1REX1JXIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUK
LQotI2lmIGRlZmluZWQoX19TVERfUldDT01QSUxFUl9IX18pIHx8IGRlZmluZWQoX1JXU1REX1ZF
UikKLSMgICB1bmRlZiBCT09TVF9MSUJfU1REX1JXCi0jICAgaWYgZGVmaW5lZChfUldTVERfVkVS
KQotIyAgICAgICBpZiBfUldTVERfVkVSIDwgMHgwMTAwMDAKLSMgICAgICAgICAgIGRlZmluZSBC
T09TVF9MSUJfU1REX1JXIEJPT1NUX1BSRURFRl9NQUtFXzBYX1ZWUlJQKF9SV1NURF9WRVIpCi0j
ICAgICAgIGVsc2UKLSMgICAgICAgICAgIGRlZmluZSBCT09TVF9MSUJfU1REX1JXIEJPT1NUX1BS
RURFRl9NQUtFXzBYX1ZWUlJQUChfUldTVERfVkVSKQotIyAgICAgICBlbmRpZgotIyAgIGVsc2UK
LSMgICAgICAgZGVmaW5lIEJPT1NUX0xJQl9TVERfUlcgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZB
SUxBQkxFCi0jICAgZW5kaWYKLSNlbmRpZgotCi0jaWYgQk9PU1RfTElCX1NURF9SVwotIyAgIGRl
ZmluZSBCT09TVF9MSUJfU1REX1JXX0FWQUlMQUJMRQotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1Rf
TElCX1NURF9SV19OQU1FICJSb2d1ZXdhdmUiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3Qv
cHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0xJ
Ql9TVERfUlcsQk9PU1RfTElCX1NURF9SV19OQU1FKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2xpYnJhcnkvc3RkL3NnaS5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL2xpYnJhcnkv
c3RkL3NnaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDE5YmJhYzRkOTJiN2Fm
N2NhNjUyZjk5NTZkOWMwYWMzYjU2MmZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3ByZWRlZi9saWJyYXJ5L3N0ZC9zZ2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAK
LS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0
aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9MSUJSQVJZX1NURF9T
R0lfSAotI2RlZmluZSBCT09TVF9QUkVERUZfTElCUkFSWV9TVERfU0dJX0gKLQotI2luY2x1ZGUg
PGJvb3N0L3ByZWRlZi9saWJyYXJ5L3N0ZC9fcHJlZml4Lmg+Ci0KLSNpbmNsdWRlIDxib29zdC9w
cmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgot
Ci0vKmAKLVtoZWFkaW5nIGBCT09TVF9MSUJfU1REX1NHSWBdCi0KLVtAaHR0cDovL3d3dy5zZ2ku
Y29tL3RlY2gvc3RsLyBTR0ldIFN0YW5kYXJkIEMrKyBsaWJyYXJ5LgotSWYgYXZhaWxhYmxlIHZl
cnNpb24gbnVtYmVyIGFzIG1ham9yLCBtaW5vciwgYW5kIHBhdGNoLgotCi1bdGFibGUKLSAgICBb
W19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fU1RM
X0NPTkZJR19IYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLQotICAgIFtbYF9fU0dJX1NUTGBd
IFtWLlIuUF1dCi0gICAgXQotICovCi0KLSNkZWZpbmUgQk9PU1RfTElCX1NURF9TR0kgQk9PU1Rf
VkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgZGVmaW5lZChfX1NUTF9DT05GSUdf
SCkKLSMgICB1bmRlZiBCT09TVF9MSUJfU1REX1NHSQotIyAgIGlmIGRlZmluZWQoX19TR0lfU1RM
KQotIyAgICAgICBkZWZpbmUgQk9PU1RfTElCX1NURF9TR0kgQk9PU1RfUFJFREVGX01BS0VfMFhf
VlJQKF9fU0dJX1NUTCkKLSMgICBlbHNlCi0jICAgICAgIGRlZmluZSBCT09TVF9MSUJfU1REX1NH
SSBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNp
ZiBCT09TVF9MSUJfU1REX1NHSQotIyAgIGRlZmluZSBCT09TVF9MSUJfU1REX1NHSV9BVkFJTEFC
TEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0xJQl9TVERfU0dJX05BTUUgIlNHSSIKLQotI2Vu
ZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURF
Rl9ERUNMQVJFX1RFU1QoQk9PU1RfTElCX1NURF9TR0ksQk9PU1RfTElCX1NURF9TR0lfTkFNRSkK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3By
ZWRlZi9saWJyYXJ5L3N0ZC9zdGRjcHAzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9zdGQvc3RkY3BwMy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjOTgwMjkyNGE3YjdmZDlhOTk5MmVhNjBjODg1MTEzYjMzOTcyMTNj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9saWJyYXJ5L3N0ZC9zdGRj
cHAzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUg
Uml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50
eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8K
LQotI2lmbmRlZiBCT09TVF9QUkVERUZfTElCUkFSWV9TVERfU1REQ1BQM19ICi0jZGVmaW5lIEJP
T1NUX1BSRURFRl9MSUJSQVJZX1NURF9TVERDUFAzX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRl
Zi9saWJyYXJ5L3N0ZC9fcHJlZml4Lmg+Ci0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lv
bl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFk
aW5nIGBCT09TVF9MSUJfU1REX0dOVWBdCi0KLVtAaHR0cDovL2djYy5nbnUub3JnL2xpYnN0ZGMr
Ky8gR05VIGxpYnN0ZGMrK10gU3RhbmRhcmQgQysrIGxpYnJhcnkuCi1WZXJzaW9uIG51bWJlciBh
dmFpbGFibGUgYXMgeWVhciAoZnJvbSAxOTcwKSwgbW9udGgsIGFuZCBkYXkuCi0KLVt0YWJsZQot
ICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tg
X19HTElCQ1hYX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fR0xJQkNQUF9f
YF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLQotICAgIFtbYF9fR0xJQkNYWF9fYF0gW1YuUi5Q
XV0KLSAgICBbW2BfX0dMSUJDUFBfX2BdIFtWLlIuUF1dCi0gICAgXQotICovCi0KLSNkZWZpbmUg
Qk9PU1RfTElCX1NURF9HTlUgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0j
aWYgZGVmaW5lZChfX0dMSUJDUFBfXykgfHwgZGVmaW5lZChfX0dMSUJDWFhfXykKLSMgICB1bmRl
ZiBCT09TVF9MSUJfU1REX0dOVQotIyAgIGlmIGRlZmluZWQoX19HTElCQ1hYX18pCi0jICAgICAg
IGRlZmluZSBCT09TVF9MSUJfU1REX0dOVSBCT09TVF9QUkVERUZfTUFLRV9ZWVlZTU1ERChfX0dM
SUJDWFhfXykKLSMgICBlbHNlCi0jICAgICAgIGRlZmluZSBCT09TVF9MSUJfU1REX0dOVSBCT09T
VF9QUkVERUZfTUFLRV9ZWVlZTU1ERChfX0dMSUJDUFBfXykKLSMgICBlbmRpZgotI2VuZGlmCi0K
LSNpZiBCT09TVF9MSUJfU1REX0dOVQotIyAgIGRlZmluZSBCT09TVF9MSUJfU1REX0dOVV9BVkFJ
TEFCTEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0xJQl9TVERfR05VX05BTUUgIkdOVSIKLQot
I2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BS
RURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfTElCX1NURF9HTlUsQk9PU1RfTElCX1NURF9HTlVfTkFN
RSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3ByZWRlZi9saWJyYXJ5L3N0ZC9zdGxwb3J0LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9zdGQvc3RscG9ydC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjMDk0ODNiZDlmYTM5ZDQ4MmMzYTgzMTM1OWEwNTc2ZGE3MWNj
NDE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9saWJyYXJ5L3N0ZC9z
dGxwb3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJl
bmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQot
Ki8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfTElCUkFSWV9TVERfU1RMUE9SVF9ICi0jZGVmaW5l
IEJPT1NUX1BSRURFRl9MSUJSQVJZX1NURF9TVExQT1JUX0gKLQotI2luY2x1ZGUgPGJvb3N0L3By
ZWRlZi9saWJyYXJ5L3N0ZC9fcHJlZml4Lmg+Ci0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVy
c2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVto
ZWFkaW5nIGBCT09TVF9MSUJfU1REX1NUTFBPUlRgXQotCi1bQGh0dHA6Ly9zb3VyY2Vmb3JnZS5u
ZXQvcHJvamVjdHMvc3RscG9ydC8gU1RMcG9ydCBTdGFuZGFyZCBDKytdIGxpYnJhcnkuCi1WZXJz
aW9uIG51bWJlciBhdmFpbGFibGUgYXMgbWFqb3IsIG1pbm9yLCBhbmQgcGF0Y2guCi0KLVt0YWJs
ZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAg
W1tgX19TR0lfU1RMX1BPUlRgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9TVExQ
T1JUX1ZFUlNJT05gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotCi0gICAgW1tgX1NUTFBPUlRf
TUFKT1JgLCBgX1NUTFBPUlRfTUlOT1JgLCBgX1NUTFBPUlRfUEFUQ0hMRVZFTGBdIFtWLlIuUF1d
Ci0gICAgW1tgX1NUTFBPUlRfVkVSU0lPTmBdIFtWLlIuUF1dCi0gICAgW1tgX19TR0lfU1RMX1BP
UlRgXSBbVi5SLlBdXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0xJQl9TVERfU1RMUE9S
VCBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBkZWZpbmVkKF9fU0dJ
X1NUTF9QT1JUKSB8fCBkZWZpbmVkKF9TVExQT1JUX1ZFUlNJT04pCi0jICAgdW5kZWYgQk9PU1Rf
TElCX1NURF9TVExQT1JUCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfTElCX1NURF9TVExQT1JUKSAm
JiBkZWZpbmVkKF9TVExQT1JUX01BSk9SKQotIyAgICAgICBkZWZpbmUgQk9PU1RfTElCX1NURF9T
VExQT1JUIFwKLSAgICAgICAgICAgIEJPT1NUX1ZFUlNJT05fTlVNQkVSKF9TVExQT1JUX01BSk9S
LF9TVExQT1JUX01JTk9SLF9TVExQT1JUX1BBVENITEVWRUwpCi0jICAgZW5kaWYKLSMgICBpZiAh
ZGVmaW5lZChCT09TVF9MSUJfU1REX1NUTFBPUlQpICYmIGRlZmluZWQoX1NUTFBPUlRfVkVSU0lP
TikKLSMgICAgICAgZGVmaW5lIEJPT1NUX0xJQl9TVERfU1RMUE9SVCBCT09TVF9QUkVERUZfTUFL
RV8wWF9WUlAoX1NUTFBPUlRfVkVSU0lPTikKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJP
T1NUX0xJQl9TVERfU1RMUE9SVCkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0xJQl9TVERfU1RMUE9S
VCBCT09TVF9QUkVERUZfTUFLRV8wWF9WUlAoX19TR0lfU1RMX1BPUlQpCi0jICAgZW5kaWYKLSNl
bmRpZgotCi0jaWYgQk9PU1RfTElCX1NURF9TVExQT1JUCi0jICAgZGVmaW5lIEJPT1NUX0xJQl9T
VERfU1RMUE9SVF9BVkFJTEFCTEUKLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX0xJQl9TVERfU1RM
UE9SVF9OQU1FICJTVExwb3J0IgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9k
ZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9MSUJfU1REX1NU
TFBPUlQsQk9PU1RfTElCX1NURF9TVExQT1JUX05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbGlicmFyeS9zdGQvdmFjcHAu
aCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9saWJy
YXJ5L3N0ZC92YWNwcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzJmODQ2YzIw
MTY4ZGVmY2Q3ZjI1NTgzMDQ3ZGU2YTE3OGM2N2U3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3ByZWRlZi9saWJyYXJ5L3N0ZC92YWNwcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQg
KzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNj
b21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0xJQlJB
UllfU1REX1ZBQ1BQX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX0xJQlJBUllfU1REX1ZBQ1BQX0gK
LQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9saWJyYXJ5L3N0ZC9fcHJlZml4Lmg+Ci0KLSNpbmNs
dWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVk
ZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9MSUJfU1REX0lCTWBdCi0KLVtAaHR0
cDovL3d3dy5pYm0uY29tL3NvZnR3YXJlL2F3ZHRvb2xzL3hsY3BwLyBJQk0gVkFDUFAgU3RhbmRh
cmQgQysrXSBsaWJyYXJ5LgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19w
cmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fSUJNQ1BQX19gXSBbX19wcmVkZWZfZGV0ZWN0
aW9uX19dXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX0xJQl9TVERfSUJNIEJPT1NUX1ZF
UlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmluZWQoX19JQk1DUFBfXykKLSMg
ICB1bmRlZiBCT09TVF9MSUJfU1REX0lCTQotIyAgIGRlZmluZSBCT09TVF9MSUJfU1REX0lCTSBC
T09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSNlbmRpZgotCi0jaWYgQk9PU1RfTElCX1NU
RF9JQk0KLSMgICBkZWZpbmUgQk9PU1RfTElCX1NURF9JQk1fQVZBSUxBQkxFCi0jZW5kaWYKLQot
I2RlZmluZSBCT09TVF9MSUJfU1REX0lCTV9OQU1FICJJQk0gVkFDUFAiCi0KLSNlbmRpZgotCi0j
aW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFS
RV9URVNUKEJPT1NUX0xJQl9TVERfSUJNLEJPT1NUX0xJQl9TVERfSUJNX05BTUUpCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvbWFr
ZS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL21h
a2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYyZjllZTc2MTY4ZTYwZDQxMDMy
YWEzZGYxMDk5ZWI0MjE0MDg3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVk
ZWYvbWFrZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBS
ZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK
LSovCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci0KLSNpZm5kZWYgQk9P
U1RfUFJFREVGX01BS0VfSAotI2RlZmluZSBCT09TVF9QUkVERUZfTUFLRV9ICi0KLS8qCi1TaG9y
dGhhbmRzIGZvciB0aGUgY29tbW9uIHZlcnNpb24gbnVtYmVyIGZvcm1hdHMgdXNlZCBieSB2ZW5k
b3JzLi4uCi0qLwotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9QUkVERUZfTUFLRV8uLmAgbWFjcm9z
XQotCi1UaGVzZSBzZXQgb2YgbWFjcm9zIGRlY29tcG9zZSBjb21tb24gdmVuZG9yIHZlcnNpb24g
bnVtYmVyCi1tYWNyb3Mgd2hpY2ggYXJlIGNvbXBvc2VkIHZlcnNpb24sIHJldmlzaW9uLCBhbmQg
cGF0Y2ggZGlnaXRzLgotVGhlIG5hbWluZyBjb252ZW50aW9uIGluZGljYXRlczoKLQotKiBUaGUg
YmFzZSBvZiB0aGUgc3BlY2lmaWVkIHZlcnNpb24gbnVtYmVyLiAiYEJPT1NUX1BSRURFRl9NQUtF
XzBYYCIgZm9yCi0gIGhleGFkZWNpbWFsIGRpZ2l0cywgYW5kICJgQk9PU1RfUFJFREVGX01BS0Vf
MTBgIiBmb3IgZGVjaW1hbCBkaWdpdHMuCi0qIFRoZSBmb3JtYXQgb2YgdGhlIHZlbmRvciB2ZXJz
aW9uIG51bWJlci4gV2hlcmUgImBWYCIgaW5kaWNhdGVzIHRoZSB2ZXJzaW9uIGRpZ2l0cywKLSAg
ImBSYCIgaW5kaWNhdGVzIHRoZSByZXZpc2lvbiBkaWdpdHMsICJgUGAiIGluZGljYXRlcyB0aGUg
cGF0Y2ggZGlnaXRzLCBhbmQgImAwYCIKLSAgaW5kaWNhdGVzIGFuIGlnbm9yZWQgZGlnaXQuCi0K
LU1hY3JvcyBhcmU6Ci0qLwotLypgIGBCT09TVF9QUkVERUZfTUFLRV8wWF9WUlAoVilgICovCi0j
ZGVmaW5lIEJPT1NUX1BSRURFRl9NQUtFXzBYX1ZSUChWKSBCT09TVF9WRVJTSU9OX05VTUJFUigo
ViYweEYwMCk+PjgsKFYmMHhGMCk+PjQsKFYmMHhGKSkKLS8qYCBgQk9PU1RfUFJFREVGX01BS0Vf
MFhfVlZSUChWKWAgKi8KLSNkZWZpbmUgQk9PU1RfUFJFREVGX01BS0VfMFhfVlZSUChWKSBCT09T
VF9WRVJTSU9OX05VTUJFUigoViYweEZGMDApPj44LChWJjB4RjApPj40LChWJjB4RikpCi0vKmAg
YEJPT1NUX1BSRURFRl9NQUtFXzBYX1ZSUFAoVilgICovCi0jZGVmaW5lIEJPT1NUX1BSRURFRl9N
QUtFXzBYX1ZSUFAoVikgQk9PU1RfVkVSU0lPTl9OVU1CRVIoKFYmMHhGMDAwKT4+MTIsKFYmMHhG
MDApPj44LChWJjB4RkYpKQotLypgIGBCT09TVF9QUkVERUZfTUFLRV8wWF9WVlJSKFYpYCAqLwot
I2RlZmluZSBCT09TVF9QUkVERUZfTUFLRV8wWF9WVlJSKFYpIEJPT1NUX1ZFUlNJT05fTlVNQkVS
KChWJjB4RkYwMCk+PjgsKFYmMHhGRiksMCkKLS8qYCBgQk9PU1RfUFJFREVGX01BS0VfMFhfVlJS
UFBQUChWKWAgKi8KLSNkZWZpbmUgQk9PU1RfUFJFREVGX01BS0VfMFhfVlJSUFBQUChWKSBCT09T
VF9WRVJTSU9OX05VTUJFUigoViYweEYwMDAwMDApPj4yNCwoViYweEZGMDAwMCk+PjE2LChWJjB4
RkZGRikpCi0vKmAgYEJPT1NUX1BSRURFRl9NQUtFXzBYX1ZWUlJQKFYpYCAqLwotI2RlZmluZSBC
T09TVF9QUkVERUZfTUFLRV8wWF9WVlJSUChWKSBCT09TVF9WRVJTSU9OX05VTUJFUigoViYweEZG
MDAwKT4+MTIsKFYmMHhGRjApPj40LChWJjB4RikpCi0vKmAgYEJPT1NUX1BSRURFRl9NQUtFXzBY
X1ZSUlBQMDAwKFYpYCAqLwotI2RlZmluZSBCT09TVF9QUkVERUZfTUFLRV8wWF9WUlJQUDAwMChW
KSBCT09TVF9WRVJTSU9OX05VTUJFUigoViYweEYwMDAwMDAwKT4+MjgsKFYmMHhGRjAwMDAwKT4+
MjAsKFYmMHhGRjAwMCk+PjEyKQotLypgIGBCT09TVF9QUkVERUZfTUFLRV8wWF9WVlJSUFAoVilg
ICovCi0jZGVmaW5lIEJPT1NUX1BSRURFRl9NQUtFXzBYX1ZWUlJQUChWKSBCT09TVF9WRVJTSU9O
X05VTUJFUigoViYweEZGMDAwMCk+PjE2LChWJjB4RkYwMCk+PjgsKFYmMHhGRikpCi0vKmAgYEJP
T1NUX1BSRURFRl9NQUtFXzEwX1ZQUFAoVilgICovCi0jZGVmaW5lIEJPT1NUX1BSRURFRl9NQUtF
XzEwX1ZQUFAoVikgQk9PU1RfVkVSU0lPTl9OVU1CRVIoKChWKS8xMDAwKSUxMCwwLChWKSUxMDAw
KQotLypgIGBCT09TVF9QUkVERUZfTUFLRV8xMF9WUlAoVilgICovCi0jZGVmaW5lIEJPT1NUX1BS
RURFRl9NQUtFXzEwX1ZSUChWKSBCT09TVF9WRVJTSU9OX05VTUJFUigoKFYpLzEwMCklMTAsKChW
KS8xMCklMTAsKFYpJTEwKQotLypgIGBCT09TVF9QUkVERUZfTUFLRV8xMF9WUlAwMDAoVilgICov
Ci0jZGVmaW5lIEJPT1NUX1BSRURFRl9NQUtFXzEwX1ZSUDAwMChWKSBCT09TVF9WRVJTSU9OX05V
TUJFUigoKFYpLzEwMDAwMCklMTAsKChWKS8xMDAwMCklMTAsKChWKS8xMDAwKSUxMCkKLS8qYCBg
Qk9PU1RfUFJFREVGX01BS0VfMTBfVlJQUChWKWAgKi8KLSNkZWZpbmUgQk9PU1RfUFJFREVGX01B
S0VfMTBfVlJQUChWKSBCT09TVF9WRVJTSU9OX05VTUJFUigoKFYpLzEwMDApJTEwLCgoVikvMTAw
KSUxMCwoViklMTAwKQotLypgIGBCT09TVF9QUkVERUZfTUFLRV8xMF9WUlIoVilgICovCi0jZGVm
aW5lIEJPT1NUX1BSRURFRl9NQUtFXzEwX1ZSUihWKSBCT09TVF9WRVJTSU9OX05VTUJFUigoKFYp
LzEwMCklMTAsKFYpJTEwMCwwKQotLypgIGBCT09TVF9QUkVERUZfTUFLRV8xMF9WUlJQUChWKWAg
Ki8KLSNkZWZpbmUgQk9PU1RfUFJFREVGX01BS0VfMTBfVlJSUFAoVikgQk9PU1RfVkVSU0lPTl9O
VU1CRVIoKChWKS8xMDAwMCklMTAsKChWKS8xMDApJTEwMCwoViklMTAwKQotLypgIGBCT09TVF9Q
UkVERUZfTUFLRV8xMF9WUlIwMDAoVilgICovCi0jZGVmaW5lIEJPT1NUX1BSRURFRl9NQUtFXzEw
X1ZSUjAwMChWKSBCT09TVF9WRVJTSU9OX05VTUJFUigoKFYpLzEwMDAwMCklMTAsKChWKS8xMDAw
KSUxMDAsMCkKLS8qYCBgQk9PU1RfUFJFREVGX01BS0VfMTBfVlYwMChWKWAgKi8KLSNkZWZpbmUg
Qk9PU1RfUFJFREVGX01BS0VfMTBfVlYwMChWKSBCT09TVF9WRVJTSU9OX05VTUJFUigoKFYpLzEw
MCklMTAwLDAsMCkKLS8qYCBgQk9PU1RfUFJFREVGX01BS0VfMTBfVlZSUihWKWAgKi8KLSNkZWZp
bmUgQk9PU1RfUFJFREVGX01BS0VfMTBfVlZSUihWKSBCT09TVF9WRVJTSU9OX05VTUJFUigoKFYp
LzEwMCklMTAwLChWKSUxMDAsMCkKLS8qYCBgQk9PU1RfUFJFREVGX01BS0VfMTBfVlZSUlBQKFYp
YCAqLwotI2RlZmluZSBCT09TVF9QUkVERUZfTUFLRV8xMF9WVlJSUFAoVikgQk9PU1RfVkVSU0lP
Tl9OVU1CRVIoKChWKS8xMDAwMCklMTAwLCgoVikvMTAwKSUxMDAsKFYpJTEwMCkKLS8qYCBgQk9P
U1RfUFJFREVGX01BS0VfMTBfVlZSUjBQUDAwKFYpYCAqLwotI2RlZmluZSBCT09TVF9QUkVERUZf
TUFLRV8xMF9WVlJSMFBQMDAoVikgQk9PU1RfVkVSU0lPTl9OVU1CRVIoKChWKS8xMDAwMDAwMCkl
MTAwLCgoVikvMTAwMDAwKSUxMDAsKChWKS8xMDApJTEwMCkKLS8qYCBgQk9PU1RfUFJFREVGX01B
S0VfMTBfVlZSUjBQUFBQKFYpYCAqLwotI2RlZmluZSBCT09TVF9QUkVERUZfTUFLRV8xMF9WVlJS
MFBQUFAoVikgQk9PU1RfVkVSU0lPTl9OVU1CRVIoKChWKS8xMDAwMDAwMCklMTAwLCgoVikvMTAw
MDAwKSUxMDAsKFYpJTEwMDAwKQotLypgIGBCT09TVF9QUkVERUZfTUFLRV8xMF9WVlJSMDBQUDAw
KFYpYCAqLwotI2RlZmluZSBCT09TVF9QUkVERUZfTUFLRV8xMF9WVlJSMDBQUDAwKFYpIEJPT1NU
X1ZFUlNJT05fTlVNQkVSKCgoVikvMTAwMDAwMDAwKSUxMDAsKChWKS8xMDAwMDAwKSUxMDAsKChW
KS8xMDApJTEwMCkKLS8qYAotW2hlYWRpbmcgYEJPT1NUX1BSRURFRl9NQUtFXyouLmAgZGF0ZSBt
YWNyb3NdCi0KLURhdGUgZGVjb21wb3NpdGlvbiBtYWNyb3MgcmV0dXJuIGEgZGF0ZSBpbiB0aGUg
cmVsYXRpdmUgdG8gdGhlIDE5NzAKLUVwb2NoIGRhdGUuIElmIHRoZSBtb250aCBpcyBub3QgYXZh
aWxhYmxlLCBKYW51YXJ5IDFzdCBpcyB1c2VkIGFzIHRoZSBtb250aCBhbmQgZGF5LgotSWYgdGhl
IGRheSBpcyBub3QgYXZhaWxhYmxlLCBidXQgdGhlIG1vbnRoIGlzLCB0aGUgMXN0IG9mIHRoZSBt
b250aCBpcyB1c2VkIGFzIHRoZSBkYXkuCi0qLwotLypgIGBCT09TVF9QUkVERUZfTUFLRV9EQVRF
KFksTSxEKWAgKi8KLSNkZWZpbmUgQk9PU1RfUFJFREVGX01BS0VfREFURShZLE0sRCkgQk9PU1Rf
VkVSU0lPTl9OVU1CRVIoKFkpJTEwMDAwLTE5NzAsKE0pJTEwMCwoRCklMTAwKQotLypgIGBCT09T
VF9QUkVERUZfTUFLRV9ZWVlZTU1ERChWKWAgKi8KLSNkZWZpbmUgQk9PU1RfUFJFREVGX01BS0Vf
WVlZWU1NREQoVikgQk9PU1RfUFJFREVGX01BS0VfREFURSgoKFYpLzEwMDAwKSUxMDAwMCwoKFYp
LzEwMCklMTAwLChWKSUxMDApCi0vKmAgYEJPT1NUX1BSRURFRl9NQUtFX1lZWVkoVilgICovCi0j
ZGVmaW5lIEJPT1NUX1BSRURFRl9NQUtFX1lZWVkoVikgQk9PU1RfUFJFREVGX01BS0VfREFURShW
LDEsMSkKLS8qYCBgQk9PU1RfUFJFREVGX01BS0VfWVlZWU1NKFYpYCAqLwotI2RlZmluZSBCT09T
VF9QUkVERUZfTUFLRV9ZWVlZTU0oVikgQk9PU1RfUFJFREVGX01BS0VfREFURSgoVikvMTAwLChW
KSUxMDAsMSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3MuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiZWRmOTllYzU0OTI4MmI2ZjhjMDAzNGNlNmQzMzA2ODBhNjcyOGRkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAs
MCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUKLUNvcHlyaWdodCBGcmFu
eiBEZXRybyAyMDE0Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5z
ZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBv
ciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0j
aWYgIWRlZmluZWQoQk9PU1RfUFJFREVGX09TX0gpIHx8IGRlZmluZWQoQk9PU1RfUFJFREVGX0lO
VEVSTkFMX0dFTkVSQVRFX1RFU1RTKQotI2lmbmRlZiBCT09TVF9QUkVERUZfT1NfSAotI2RlZmlu
ZSBCT09TVF9QUkVERUZfT1NfSAotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvb3Mv
YWl4Lmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL29zL2FtaWdhb3MuaD4KLSNpbmNsdWRlIDxi
b29zdC9wcmVkZWYvb3MvYW5kcm9pZC5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9vcy9iZW9z
Lmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL29zL2JzZC5oPgotI2luY2x1ZGUgPGJvb3N0L3By
ZWRlZi9vcy9jeWd3aW4uaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvb3MvaGFpa3UuaD4KLSNp
bmNsdWRlIDxib29zdC9wcmVkZWYvb3MvaHB1eC5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9v
cy9pcml4Lmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL29zL2lvcy5oPgotI2luY2x1ZGUgPGJv
b3N0L3ByZWRlZi9vcy9saW51eC5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9vcy9tYWNvcy5o
PgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9vcy9vczQwMC5oPgotI2luY2x1ZGUgPGJvb3N0L3By
ZWRlZi9vcy9xbnhudG8uaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvb3Mvc29sYXJpcy5oPgot
I2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9vcy91bml4Lmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVm
L29zL3Ztcy5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9vcy93aW5kb3dzLmg+Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
cHJlZGVmL29zL2FpeC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcHJlZGVmL29zL2FpeC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTVhOTUz
ZjFiZDVjZGM1MDFmZTIwNzc2ZDYxNmM1M2U2MDM1NTI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZWRlZi9vcy9haXguaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAK
LS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0
aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9PU19BSVhfSAotI2Rl
ZmluZSBCT09TVF9QUkVERUZfT1NfQUlYX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJz
aW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hl
YWRpbmcgYEJPT1NUX09TX0FJWGBdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9B
SVhfb3BlcmF0aW5nX3N5c3RlbSBJQk0gQUlYXSBvcGVyYXRpbmcgc3lzdGVtLgotVmVyc2lvbiBu
dW1iZXIgYXZhaWxhYmxlIGFzIG1ham9yLCBtaW5vciwgYW5kIHBhdGNoLgotCi1bdGFibGUKLSAg
ICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9B
SVhgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fVE9TX0FJWF9fYF0gW19fcHJl
ZGVmX2RldGVjdGlvbl9fXV0KLQotICAgIFtbYF9BSVg0M2BdIFs0LjMuMF1dCi0gICAgW1tgX0FJ
WDQxYF0gWzQuMS4wXV0KLSAgICBbW2BfQUlYMzJgXSBbMy4yLjBdXQotICAgIFtbYF9BSVgzYF0g
WzMuMC4wXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9PU19BSVggQk9PU1RfVkVSU0lP
Tl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgIWRlZmluZWQoQk9PU1RfUFJFREVGX0RFVEFJ
TF9PU19ERVRFQ1RFRCkgJiYgKCBcCi0gICAgZGVmaW5lZChfQUlYKSB8fCBkZWZpbmVkKF9fVE9T
X0FJWF9fKSBcCi0gICAgKQotIyAgIHVuZGVmIEJPT1NUX09TX0FJWAotIyAgIGlmICFkZWZpbmVk
KEJPT1NUX09TX0FJWCkgJiYgZGVmaW5lZChfQUlYNDMpCi0jICAgICAgIGRlZmluZSBCT09TVF9P
U19BSVggQk9PU1RfVkVSU0lPTl9OVU1CRVIoNCwzLDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVm
aW5lZChCT09TVF9PU19BSVgpICYmIGRlZmluZWQoX0FJWDQxKQotIyAgICAgICBkZWZpbmUgQk9P
U1RfT1NfQUlYIEJPT1NUX1ZFUlNJT05fTlVNQkVSKDQsMSwwKQotIyAgIGVuZGlmCi0jICAgaWYg
IWRlZmluZWQoQk9PU1RfT1NfQUlYKSAmJiBkZWZpbmVkKF9BSVgzMikKLSMgICAgICAgZGVmaW5l
IEJPT1NUX09TX0FJWCBCT09TVF9WRVJTSU9OX05VTUJFUigzLDIsMCkKLSMgICBlbmRpZgotIyAg
IGlmICFkZWZpbmVkKEJPT1NUX09TX0FJWCkgJiYgZGVmaW5lZChfQUlYMykKLSMgICAgICAgZGVm
aW5lIEJPT1NUX09TX0FJWCBCT09TVF9WRVJTSU9OX05VTUJFUigzLDAsMCkKLSMgICBlbmRpZgot
IyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0FJWCkKLSMgICAgICAgZGVmaW5lIEJPT1NUX09TX0FJ
WCBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNp
ZiBCT09TVF9PU19BSVgKLSMgICBkZWZpbmUgQk9PU1RfT1NfQUlYX0FWQUlMQUJMRQotIyAgIGlu
Y2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvb3NfZGV0ZWN0ZWQuaD4KLSNlbmRpZgotCi0jZGVm
aW5lIEJPT1NUX09TX0FJWF9OQU1FICJJQk0gQUlYIgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJv
b3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09T
VF9PU19BSVgsQk9PU1RfT1NfQUlYX05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3MvYW1pZ2Fvcy5oIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL29zL2FtaWdhb3MuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IzMmRkZjU5Y2EyZjA4N2M3NDk5YjhlZGUwMGFj
YjRkNmM4MWRhOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3MvYW1p
Z2Fvcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5l
IFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBM
aWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSov
Ci0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX09TX0FNSUdBT1NfSAotI2RlZmluZSBCT09TVF9QUkVE
RUZfT1NfQU1JR0FPU19ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIu
aD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09T
VF9PU19BTUlHQU9TYF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FtaWdhT1Mg
QW1pZ2FPU10gb3BlcmF0aW5nIHN5c3RlbS4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1i
b2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BBTUlHQWBdIFtfX3ByZWRlZl9k
ZXRlY3Rpb25fX11dCi0gICAgW1tgX19hbWlnYW9zX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19d
XQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX09TX0FNSUdBT1MgQk9PU1RfVkVSU0lPTl9O
VU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgIWRlZmluZWQoQk9PU1RfUFJFREVGX0RFVEFJTF9P
U19ERVRFQ1RFRCkgJiYgKCBcCi0gICAgZGVmaW5lZChBTUlHQSkgfHwgZGVmaW5lZChfX2FtaWdh
b3NfXykgXAotICAgICkKLSMgICB1bmRlZiBCT09TVF9PU19BTUlHQU9TCi0jICAgZGVmaW5lIEJP
T1NUX09TX0FNSUdBT1MgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jZW5kaWYKLQot
I2lmIEJPT1NUX09TX0FNSUdBT1MKLSMgICBkZWZpbmUgQk9PU1RfT1NfQU1JR0FPU19BVkFJTEFC
TEUKLSMgICBpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL29zX2RldGVjdGVkLmg+Ci0jZW5k
aWYKLQotI2RlZmluZSBCT09TVF9PU19BTUlHQU9TX05BTUUgIkFtaWdhT1MiCi0KLSNlbmRpZgot
Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVD
TEFSRV9URVNUKEJPT1NUX09TX0FNSUdBT1MsQk9PU1RfT1NfQU1JR0FPU19OQU1FKQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL29z
L2FuZHJvaWQuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3By
ZWRlZi9vcy9hbmRyb2lkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwODM2ZTdm
Y2VlNTA3ZTU1NTlkYzRkMTU3NmQzZjcwMWNkNWM2ZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcHJlZGVmL29zL2FuZHJvaWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAg
QEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfT1NfQURST0lEX0gKLSNk
ZWZpbmUgQk9PU1RfUFJFREVGX09TX0FEUk9JRF9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYv
dmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAK
LVtoZWFkaW5nIGBCT09TVF9PU19BTkRST0lEYF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9y
Zy93aWtpL0FuZHJvaWRfJTI4b3BlcmF0aW5nX3N5c3RlbSUyOSBBbmRyb2lkXSBvcGVyYXRpbmcg
c3lzdGVtLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVy
c2lvbl9fXV0KLQotICAgIFtbYF9fQU5EUk9JRF9fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0K
LSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9PU19BTkRST0lEIEJPT1NUX1ZFUlNJT05fTlVN
QkVSX05PVF9BVkFJTEFCTEUKLQotI2lmICFkZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfT1Nf
REVURUNURUQpICYmICggXAotICAgIGRlZmluZWQoX19BTkRST0lEX18pIFwKLSAgICApCi0jICAg
dW5kZWYgQk9PU1RfT1NfQU5EUk9JRAotIyAgIGRlZmluZSBCT09TVF9PU19BTkRST0lEIEJPT1NU
X1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotI2VuZGlmCi0KLSNpZiBCT09TVF9PU19BTkRST0lE
Ci0jICAgZGVmaW5lIEJPT1NUX09TX0FORFJPSURfQVZBSUxBQkxFCi0jICAgaW5jbHVkZSA8Ym9v
c3QvcHJlZGVmL2RldGFpbC9vc19kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1Rf
T1NfQU5EUk9JRF9OQU1FICJBbmRyb2lkIgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3By
ZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9PU19B
TkRST0lELEJPT1NUX09TX0FORFJPSURfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9iZW9zLmggYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3MvYmVvcy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWY0Y2I3MWUzZjI0ZDA5YjQxNjkzOTMyYzc1Yjc0NzE1
NjRhYmI5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9iZW9zLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJh
IDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lm
bmRlZiBCT09TVF9QUkVERUZfT1NfQkVPU19ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9PU19CRU9T
X0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUg
PGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX09TX0JFT1NgXQot
Ci1bQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmVPUyBCZU9TXSBvcGVyYXRpbmcgc3lz
dGVtLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lv
bl9fXV0KLQotICAgIFtbYF9fQkVPU19fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBd
Ci0gKi8KLQotI2RlZmluZSBCT09TVF9PU19CRU9TIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9B
VkFJTEFCTEUKLQotI2lmICFkZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfT1NfREVURUNURUQp
ICYmICggXAotICAgIGRlZmluZWQoX19CRU9TX18pIFwKLSAgICApCi0jICAgdW5kZWYgQk9PU1Rf
T1NfQkVPUwotIyAgIGRlZmluZSBCT09TVF9PU19CRU9TIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FW
QUlMQUJMRQotI2VuZGlmCi0KLSNpZiBCT09TVF9PU19CRU9TCi0jICAgZGVmaW5lIEJPT1NUX09T
X0JFT1NfQVZBSUxBQkxFCi0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC9vc19kZXRl
Y3RlZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfT1NfQkVPU19OQU1FICJCZU9TIgotCi0j
ZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJF
REVGX0RFQ0xBUkVfVEVTVChCT09TVF9PU19CRU9TLEJPT1NUX09TX0JFT1NfTkFNRSkKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9v
cy9ic2QuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRl
Zi9vcy9ic2QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFkOWFlZDc4NzZkMDNh
MTVjZjMyN2EwM2ZkMDcyOTA0ODRiYWQ5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9wcmVkZWYvb3MvYnNkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLUNv
cHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29z
dCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUg
TElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX09TX0JTRF9ICi0jZGVmaW5lIEJP
T1NUX1BSRURFRl9PU19CU0RfSAotCi0vKiBTcGVjaWFsIGNhc2U6IE9TWCB3aWxsIGRlZmluZSBC
U0QgcHJlZGVmcyBpZiB0aGUgc3lzL3BhcmFtLmgKLSAqIGhlYWRlciBpcyBpbmNsdWRlZC4gV2Ug
Y2FuIGd1YXJkIGFnYWluc3QgdGhhdCwgYnV0IG9ubHkgaWYgd2UKLSAqIGRldGVjdCBPU1ggZmly
c3QuIEhlbmNlIHdlIHdpbGwgZm9yY2UgaW5jbHVkZSBPU1ggZGV0ZWN0aW9uCi0gKiBiZWZvcmUg
ZG9pbmcgYW55IEJTRCBkZXRlY3Rpb24uCi0gKi8KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvb3Mv
bWFjb3MuaD4KLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2lu
Y2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX09TX0JT
RGBdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CZXJrZWxleV9Tb2Z0d2FyZV9E
aXN0cmlidXRpb24gQlNEXSBvcGVyYXRpbmcgc3lzdGVtLgotCi1CU0QgaGFzIHZhcmlvdXMgYnJh
bmNoIG9wZXJhdGluZyBzeXN0ZW1zIHBvc3NpYmxlIGFuZCBlYWNoIGRldGVjdGVkCi1pbmRpdmlk
dWFsbHkuIFRoaXMgZGV0ZWN0cyB0aGUgZm9sbG93aW5nIHZhcmlhdGlvbnMgYW5kIHNldHMgYSBz
cGVjaWZpYwotdmVyc2lvbiBudW1iZXIgbWFjcm8gdG8gbWF0Y2g6Ci0KLSogYEJPT1NUX09TX0JT
RF9EUkFHT05GTFlgIFtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EcmFnb25GbHlfQlNE
IERyYWdvbkZseSBCU0RdCi0qIGBCT09TVF9PU19CU0RfRlJFRWAgW0BodHRwOi8vZW4ud2lraXBl
ZGlhLm9yZy93aWtpL0ZyZWVic2QgRnJlZUJTRF0KLSogYEJPT1NUX09TX0JTRF9CU0RJYCBbQGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQlNEL09TIEJTRGkgQlNEL09TXQotKiBgQk9PU1Rf
T1NfQlNEX05FVGAgW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05ldGJzZCBOZXRCU0Rd
Ci0qIGBCT09TVF9PU19CU0RfT1BFTmAgW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09w
ZW5ic2QgT3BlbkJTRF0KLQotW25vdGUgVGhlIGdlbmVyYWwgYEJPT1NUX09TX0JTRGAgaXMgc2V0
IGluIGFsbCBjYXNlcyB0byBpbmRpY2F0ZSBzb21lIGZvcm0KLW9mIEJTRC4gSWYgdGhlIGFib3Zl
IHZhcmlhbnRzIGlzIGRldGVjdGVkIHRoZSBjb3JyZXNwb25kaW5nIG1hY3JvIGlzIGFsc28gc2V0
Ll0KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25f
X11dCi0KLSAgICBbW2BCU0RgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9TWVNU
WVBFX0JTRGBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BCU0Q0XzJgXSBbNC4y
LjBdXQotICAgIFtbYEJTRDRfM2BdIFs0LjMuMF1dCi0gICAgW1tgQlNENF80YF0gWzQuNC4wXV0K
LSAgICBbW2BCU0RgXSBbVi5SLjBdXQotICAgIF0KLSAqLwotCi0jaW5jbHVkZSA8Ym9vc3QvcHJl
ZGVmL29zL2JzZC9ic2RpLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL29zL2JzZC9kcmFnb25m
bHkuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvb3MvYnNkL2ZyZWUuaD4KLSNpbmNsdWRlIDxi
b29zdC9wcmVkZWYvb3MvYnNkL29wZW4uaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvb3MvYnNk
L25ldC5oPgotCi0jaWZuZGVmIEJPT1NUX09TX0JTRAotI2RlZmluZSBCT09TVF9PU19CU0QgQk9P
U1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChC
T09TVF9QUkVERUZfREVUQUlMX09TX0RFVEVDVEVEKSAmJiAoIFwKLSAgICBkZWZpbmVkKEJTRCkg
fHwgXAotICAgIGRlZmluZWQoX1NZU1RZUEVfQlNEKSBcCi0gICAgKQotIyAgIHVuZGVmIEJPT1NU
X09TX0JTRAotIyAgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgotIyAgIGlmICFkZWZpbmVkKEJPT1NU
X09TX0JTRCkgJiYgZGVmaW5lZChCU0Q0XzQpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0Qg
Qk9PU1RfVkVSU0lPTl9OVU1CRVIoNCw0LDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChC
T09TVF9PU19CU0QpICYmIGRlZmluZWQoQlNENF8zKQotIyAgICAgICBkZWZpbmUgQk9PU1RfT1Nf
QlNEIEJPT1NUX1ZFUlNJT05fTlVNQkVSKDQsMywwKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmlu
ZWQoQk9PU1RfT1NfQlNEKSAmJiBkZWZpbmVkKEJTRDRfMikKLSMgICAgICAgZGVmaW5lIEJPT1NU
X09TX0JTRCBCT09TVF9WRVJTSU9OX05VTUJFUig0LDIsMCkKLSMgICBlbmRpZgotIyAgIGlmICFk
ZWZpbmVkKEJPT1NUX09TX0JTRCkgJiYgZGVmaW5lZChCU0QpCi0jICAgICAgIGRlZmluZSBCT09T
VF9PU19CU0QgQk9PU1RfUFJFREVGX01BS0VfMTBfVlZSUihCU0QpCi0jICAgZW5kaWYKLSMgICBp
ZiAhZGVmaW5lZChCT09TVF9PU19CU0QpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0QgQk9P
U1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgZW5kaWYKLSNlbmRpZgotCi0jaWYgQk9P
U1RfT1NfQlNECi0jICAgZGVmaW5lIEJPT1NUX09TX0JTRF9BVkFJTEFCTEUKLSMgICBpbmNsdWRl
IDxib29zdC9wcmVkZWYvZGV0YWlsL29zX2RldGVjdGVkLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBC
T09TVF9PU19CU0RfTkFNRSAiQlNEIgotCi0jZWxzZQotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVm
L29zL2JzZC9ic2RpLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL29zL2JzZC9kcmFnb25mbHku
aD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvb3MvYnNkL2ZyZWUuaD4KLSNpbmNsdWRlIDxib29z
dC9wcmVkZWYvb3MvYnNkL29wZW4uaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvb3MvYnNkL25l
dC5oPgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgot
Qk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9PU19CU0QsQk9PU1RfT1NfQlNEX05BTUUp
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9w
cmVkZWYvb3MvYnNkL2JzZGkuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3ByZWRlZi9vcy9ic2QvYnNkaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhZmRjZDNlYjdjNGYyZmQyMDNmMTNmNGMwNTY3NjcyODI3MTJmM2E1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9ic2QvYnNkaS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNDggKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDEyLTIwMTUKLURpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShT
ZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVG
X09TX0JTRF9CU0RJX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX09TX0JTRF9CU0RJX0gKLQotI2lu
Y2x1ZGUgPGJvb3N0L3ByZWRlZi9vcy9ic2QuaD4KLQotLypgCi1baGVhZGluZyBgQk9PU1RfT1Nf
QlNEX0JTRElgXQotCi1bQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQlNEL09TIEJTRGkg
QlNEL09TXSBvcGVyYXRpbmcgc3lzdGVtLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJv
bF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fYnNkaV9fYF0gW19fcHJlZGVm
X2RldGVjdGlvbl9fXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9PU19CU0RfQlNESSBC
T09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiAhZGVmaW5lZChCT09TVF9Q
UkVERUZfREVUQUlMX09TX0RFVEVDVEVEKSAmJiAoIFwKLSAgICBkZWZpbmVkKF9fYnNkaV9fKSBc
Ci0gICAgKQotIyAgIGlmbmRlZiBCT09TVF9PU19CU0RfQVZBSUxBQkxFCi0jICAgICAgIGRlZmlu
ZSBCT09TVF9PU19CU0QgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgICAgIGRl
ZmluZSBCT09TVF9PU19CU0RfQVZBSUxBQkxFCi0jICAgZW5kaWYKLSMgICB1bmRlZiBCT09TVF9P
U19CU0RfQlNESQotIyAgIGRlZmluZSBCT09TVF9PU19CU0RfQlNESSBCT09TVF9WRVJTSU9OX05V
TUJFUl9BVkFJTEFCTEUKLSNlbmRpZgotCi0jaWYgQk9PU1RfT1NfQlNEX0JTREkKLSMgICBkZWZp
bmUgQk9PU1RfT1NfQlNEX0JTRElfQVZBSUxBQkxFCi0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlZGVm
L2RldGFpbC9vc19kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfT1NfQlNEX0JT
RElfTkFNRSAiQlNEaSBCU0QvT1MiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVm
L2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX09TX0JTRF9C
U0RJLEJPT1NUX09TX0JTRF9CU0RJX05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3MvYnNkL2RyYWdvbmZseS5oIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL29zL2JzZC9kcmFn
b25mbHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQwNzU3OThhMWUzNWY1ZTQ1
ZDNhYmFiZDBiNGFhZWI0Zjk0MTNlMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9w
cmVkZWYvb3MvYnNkL2RyYWdvbmZseS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAot
LyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDEyLTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX09TX0JTRF9EUkFHT05G
TFlfSAotI2RlZmluZSBCT09TVF9QUkVERUZfT1NfQlNEX0RSQUdPTkZMWV9ICi0KLSNpbmNsdWRl
IDxib29zdC9wcmVkZWYvb3MvYnNkLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX09TX0JTRF9E
UkFHT05GTFlgXQotCi1bQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRHJhZ29uRmx5X0JT
RCBEcmFnb25GbHkgQlNEXSBvcGVyYXRpbmcgc3lzdGVtLgotCi1bdGFibGUKLSAgICBbW19fcHJl
ZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fRHJhZ29uRmx5
X19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NU
X09TX0JTRF9EUkFHT05GTFkgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0j
aWYgIWRlZmluZWQoQk9PU1RfUFJFREVGX0RFVEFJTF9PU19ERVRFQ1RFRCkgJiYgKCBcCi0gICAg
ZGVmaW5lZChfX0RyYWdvbkZseV9fKSBcCi0gICAgKQotIyAgIGlmbmRlZiBCT09TVF9PU19CU0Rf
QVZBSUxBQkxFCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0QgQk9PU1RfVkVSU0lPTl9OVU1C
RVJfQVZBSUxBQkxFCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfQVZBSUxBQkxFCi0jICAg
ZW5kaWYKLSMgICB1bmRlZiBCT09TVF9PU19CU0RfRFJBR09ORkxZCi0jICAgaWYgZGVmaW5lZChf
X0RyYWdvbkZseV9fKQotIyAgICAgICBkZWZpbmUgQk9PU1RfT1NfRFJBR09ORkxZX0JTRCBCT09T
VF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNpZiBCT09T
VF9PU19CU0RfRFJBR09ORkxZCi0jICAgZGVmaW5lIEJPT1NUX09TX0JTRF9EUkFHT05GTFlfQVZB
SUxBQkxFCi0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC9vc19kZXRlY3RlZC5oPgot
I2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfT1NfQlNEX0RSQUdPTkZMWV9OQU1FICJEcmFnb25GbHkg
QlNEIgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgot
Qk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9PU19CU0RfRFJBR09ORkxZLEJPT1NUX09T
X0JTRF9EUkFHT05GTFlfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9ic2QvZnJlZS5oIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL29zL2JzZC9mcmVlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ODAxMWFlN2EwZDkxYjcxZGZkMDVhMTMyYjgxYWJjMTgw
ZDEwMjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL29zL2JzZC9mcmVl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2
ZXJhIDIwMTItMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQot
I2lmbmRlZiBCT09TVF9QUkVERUZfT1NfQlNEX0ZSRUVfSAotI2RlZmluZSBCT09TVF9QUkVERUZf
T1NfQlNEX0ZSRUVfSAotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL29zL2JzZC5oPgotCi0vKmAK
LVtoZWFkaW5nIGBCT09TVF9PU19CU0RfRlJFRWBdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9GcmVlYnNkIEZyZWVCU0RdIG9wZXJhdGluZyBzeXN0ZW0uCi0KLVt0YWJsZQotICAg
IFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19G
cmVlQlNEX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotCi0gICAgW1tgX19GcmVlQlNEX3Zl
cnNpb25gXSBbVi5SLlBdXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX09TX0JTRF9GUkVF
IEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLQotI2lmICFkZWZpbmVkKEJPT1NU
X1BSRURFRl9ERVRBSUxfT1NfREVURUNURUQpICYmICggXAotICAgIGRlZmluZWQoX19GcmVlQlNE
X18pIFwKLSAgICApCi0jICAgaWZuZGVmIEJPT1NUX09TX0JTRF9BVkFJTEFCTEUKLSMgICAgICAg
ZGVmaW5lIEJPT1NUX09TX0JTRCBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSMgICAg
ICAgZGVmaW5lIEJPT1NUX09TX0JTRF9BVkFJTEFCTEUKLSMgICBlbmRpZgotIyAgIHVuZGVmIEJP
T1NUX09TX0JTRF9GUkVFCi0jICAgaWYgZGVmaW5lZChfX0ZyZWVCU0RfdmVyc2lvbikKLSMgICAg
ICAgaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA1MDAwMDAKLSMgICAgICAgICAgIGRlZmluZSBCT09T
VF9PU19CU0RfRlJFRSBcCi0gICAgICAgICAgICAgICAgQk9PU1RfUFJFREVGX01BS0VfMTBfVlJQ
MDAwKF9fRnJlZUJTRF92ZXJzaW9uKQotIyAgICAgICBlbHNlCi0jICAgICAgICAgICBkZWZpbmUg
Qk9PU1RfT1NfQlNEX0ZSRUUgXAotICAgICAgICAgICAgICAgIEJPT1NUX1BSRURFRl9NQUtFXzEw
X1ZSUjAwMChfX0ZyZWVCU0RfdmVyc2lvbikKLSMgICAgICAgZW5kaWYKLSMgICBlbHNlCi0jICAg
ICAgIGRlZmluZSBCT09TVF9PU19CU0RfRlJFRSBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFC
TEUKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNpZiBCT09TVF9PU19CU0RfRlJFRQotIyAgIGRlZmlu
ZSBCT09TVF9PU19CU0RfRlJFRV9BVkFJTEFCTEUKLSMgICBpbmNsdWRlIDxib29zdC9wcmVkZWYv
ZGV0YWlsL29zX2RldGVjdGVkLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBCT09TVF9PU19CU0RfRlJF
RV9OQU1FICJGcmVlIEJTRCIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0
YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfT1NfQlNEX0ZSRUUs
Qk9PU1RfT1NfQlNEX0ZSRUVfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9ic2QvbmV0LmggYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3MvYnNkL25ldC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODdjYmRlNTRmMTA1MzAzN2VlNjE5YzdlMzkxYTk0NTk4
NWExYzZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9ic2QvbmV0
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2
ZXJhIDIwMTItMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQot
I2lmbmRlZiBCT09TVF9QUkVERUZfT1NfQlNEX05FVF9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9P
U19CU0RfTkVUX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9vcy9ic2QuaD4KLQotLypgCi1b
aGVhZGluZyBgQk9PU1RfT1NfQlNEX05FVGBdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcv
d2lraS9OZXRic2QgTmV0QlNEXSBvcGVyYXRpbmcgc3lzdGVtLgotCi1bdGFibGUKLSAgICBbW19f
cHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fTkVUQlNE
X19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fTmV0QlNEX19gXSBbX19wcmVk
ZWZfZGV0ZWN0aW9uX19dXQotCi0gICAgW1tgX19ORVRCU0RfdmVyc2lvbmBdIFtWLlIuUF1dCi0g
ICAgW1tgTmV0QlNEMF84YF0gWzAuOC4wXV0KLSAgICBbW2BOZXRCU0QwXzlgXSBbMC45LjBdXQot
ICAgIFtbYE5ldEJTRDFfMGBdIFsxLjAuMF1dCi0gICAgW1tgX19OZXRCU0RfVmVyc2lvbmBdIFtW
LlIuUF1dCi0gICAgXQotICovCi0KLSNkZWZpbmUgQk9PU1RfT1NfQlNEX05FVCBCT09TVF9WRVJT
SU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiAhZGVmaW5lZChCT09TVF9QUkVERUZfREVU
QUlMX09TX0RFVEVDVEVEKSAmJiAoIFwKLSAgICBkZWZpbmVkKF9fTkVUQlNEX18pIHx8IGRlZmlu
ZWQoX19OZXRCU0RfXykgXAotICAgICkKLSMgICBpZm5kZWYgQk9PU1RfT1NfQlNEX0FWQUlMQUJM
RQotIyAgICAgICBkZWZpbmUgQk9PU1RfT1NfQlNEIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlM
QUJMRQotIyAgICAgICBkZWZpbmUgQk9PU1RfT1NfQlNEX0FWQUlMQUJMRQotIyAgIGVuZGlmCi0j
ICAgdW5kZWYgQk9PU1RfT1NfQlNEX05FVAotIyAgIGlmIGRlZmluZWQoX19ORVRCU0RfXykKLSMg
ICAgICAgaWYgZGVmaW5lZChfX05FVEJTRF92ZXJzaW9uKQotIyAgICAgICAgICAgaWYgX19ORVRC
U0RfdmVyc2lvbiA8IDUwMDAwMAotIyAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9PU19CU0Rf
TkVUIFwKLSAgICAgICAgICAgICAgICAgICAgQk9PU1RfUFJFREVGX01BS0VfMTBfVlJQMDAwKF9f
TkVUQlNEX3ZlcnNpb24pCi0jICAgICAgICAgICBlbHNlCi0jICAgICAgICAgICAgICAgZGVmaW5l
IEJPT1NUX09TX0JTRF9ORVQgXAotICAgICAgICAgICAgICAgICAgICBCT09TVF9QUkVERUZfTUFL
RV8xMF9WUlIwMDAoX19ORVRCU0RfdmVyc2lvbikKLSMgICAgICAgICAgIGVuZGlmCi0jICAgICAg
IGVsc2UKLSMgICAgICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfTkVUIEJPT1NUX1ZFUlNJT05f
TlVNQkVSX0FWQUlMQUJMRQotIyAgICAgICBlbmRpZgotIyAgIGVsaWYgZGVmaW5lZChfX05ldEJT
RF9fKQotIyAgICAgICBpZiAhZGVmaW5lZChCT09TVF9PU19CU0RfTkVUKSAmJiBkZWZpbmVkKE5l
dEJTRDBfOCkKLSMgICAgICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfTkVUIEJPT1NUX1ZFUlNJ
T05fTlVNQkVSKDAsOCwwKQotIyAgICAgICBlbmRpZgotIyAgICAgICBpZiAhZGVmaW5lZChCT09T
VF9PU19CU0RfTkVUKSAmJiBkZWZpbmVkKE5ldEJTRDBfOSkKLSMgICAgICAgICAgIGRlZmluZSBC
T09TVF9PU19CU0RfTkVUIEJPT1NUX1ZFUlNJT05fTlVNQkVSKDAsOSwwKQotIyAgICAgICBlbmRp
ZgotIyAgICAgICBpZiAhZGVmaW5lZChCT09TVF9PU19CU0RfTkVUKSAmJiBkZWZpbmVkKE5ldEJT
RDFfMCkKLSMgICAgICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfTkVUIEJPT1NUX1ZFUlNJT05f
TlVNQkVSKDEsMCwwKQotIyAgICAgICBlbmRpZgotIyAgICAgICBpZiAhZGVmaW5lZChCT09TVF9P
U19CU0RfTkVUKSAmJiBkZWZpbmVkKF9fTmV0QlNEX1ZlcnNpb24pCi0jICAgICAgICAgICBkZWZp
bmUgQk9PU1RfT1NfQlNEX05FVCBcCi0gICAgICAgICAgICAgICAgQk9PU1RfUFJFREVGX01BS0Vf
MTBfVlZSUjAwUFAwMChfX05ldEJTRF9WZXJzaW9uKQotIyAgICAgICBlbmRpZgotIyAgICAgICBp
ZiAhZGVmaW5lZChCT09TVF9PU19CU0RfTkVUKQotIyAgICAgICAgICAgZGVmaW5lIEJPT1NUX09T
X0JTRF9ORVQgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgICAgIGVuZGlmCi0j
ICAgZW5kaWYKLSNlbmRpZgotCi0jaWYgQk9PU1RfT1NfQlNEX05FVAotIyAgIGRlZmluZSBCT09T
VF9PU19CU0RfTkVUX0FWQUlMQUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwv
b3NfZGV0ZWN0ZWQuaD4KLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX09TX0JTRF9ORVRfTkFNRSAi
RHJhZ29uRmx5IEJTRCIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWls
L3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfT1NfQlNEX05FVCxCT09T
VF9PU19CU0RfTkVUX05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3MvYnNkL29wZW4uaCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9ic2Qvb3Blbi5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0MjMxMDNhYzVjNzVhYjBlYjg4OWZlOGEwNzU0OGY0NzU3OTFi
YjFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9ic2Qvb3Blbi5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZl
cmEgMjAxMi0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5z
ZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBv
ciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0j
aWZuZGVmIEJPT1NUX1BSRURFRl9PU19CU0RfT1BFTl9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9P
U19CU0RfT1BFTl9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvb3MvYnNkLmg+Ci0KLS8qYAot
W2hlYWRpbmcgYEJPT1NUX09TX0JTRF9PUEVOYF0KLQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9y
Zy93aWtpL09wZW5ic2QgT3BlbkJTRF0gb3BlcmF0aW5nIHN5c3RlbS4KLQotW3RhYmxlCi0gICAg
W1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfX09w
ZW5CU0RfX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BPcGVuQlNEMl8wYF0g
WzIuMC4wXV0KLSAgICBbW2BPcGVuQlNEMl8xYF0gWzIuMS4wXV0KLSAgICBbW2BPcGVuQlNEMl8y
YF0gWzIuMi4wXV0KLSAgICBbW2BPcGVuQlNEMl8zYF0gWzIuMy4wXV0KLSAgICBbW2BPcGVuQlNE
Ml80YF0gWzIuNC4wXV0KLSAgICBbW2BPcGVuQlNEMl81YF0gWzIuNS4wXV0KLSAgICBbW2BPcGVu
QlNEMl82YF0gWzIuNi4wXV0KLSAgICBbW2BPcGVuQlNEMl83YF0gWzIuNy4wXV0KLSAgICBbW2BP
cGVuQlNEMl84YF0gWzIuOC4wXV0KLSAgICBbW2BPcGVuQlNEMl85YF0gWzIuOS4wXV0KLSAgICBb
W2BPcGVuQlNEM18wYF0gWzMuMC4wXV0KLSAgICBbW2BPcGVuQlNEM18xYF0gWzMuMS4wXV0KLSAg
ICBbW2BPcGVuQlNEM18yYF0gWzMuMi4wXV0KLSAgICBbW2BPcGVuQlNEM18zYF0gWzMuMy4wXV0K
LSAgICBbW2BPcGVuQlNEM180YF0gWzMuNC4wXV0KLSAgICBbW2BPcGVuQlNEM181YF0gWzMuNS4w
XV0KLSAgICBbW2BPcGVuQlNEM182YF0gWzMuNi4wXV0KLSAgICBbW2BPcGVuQlNEM183YF0gWzMu
Ny4wXV0KLSAgICBbW2BPcGVuQlNEM184YF0gWzMuOC4wXV0KLSAgICBbW2BPcGVuQlNEM185YF0g
WzMuOS4wXV0KLSAgICBbW2BPcGVuQlNENF8wYF0gWzQuMC4wXV0KLSAgICBbW2BPcGVuQlNENF8x
YF0gWzQuMS4wXV0KLSAgICBbW2BPcGVuQlNENF8yYF0gWzQuMi4wXV0KLSAgICBbW2BPcGVuQlNE
NF8zYF0gWzQuMy4wXV0KLSAgICBbW2BPcGVuQlNENF80YF0gWzQuNC4wXV0KLSAgICBbW2BPcGVu
QlNENF81YF0gWzQuNS4wXV0KLSAgICBbW2BPcGVuQlNENF82YF0gWzQuNi4wXV0KLSAgICBbW2BP
cGVuQlNENF83YF0gWzQuNy4wXV0KLSAgICBbW2BPcGVuQlNENF84YF0gWzQuOC4wXV0KLSAgICBb
W2BPcGVuQlNENF85YF0gWzQuOS4wXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9PU19C
U0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiAhZGVmaW5l
ZChCT09TVF9QUkVERUZfREVUQUlMX09TX0RFVEVDVEVEKSAmJiAoIFwKLSAgICBkZWZpbmVkKF9f
T3BlbkJTRF9fKSBcCi0gICAgKQotIyAgIGlmbmRlZiBCT09TVF9PU19CU0RfQVZBSUxBQkxFCi0j
ICAgICAgIGRlZmluZSBCT09TVF9PU19CU0QgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxF
Ci0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfQVZBSUxBQkxFCi0jICAgZW5kaWYKLSMgICB1
bmRlZiBCT09TVF9PU19CU0RfT1BFTgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVO
KSAmJiBkZWZpbmVkKE9wZW5CU0QyXzApCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BF
TiBCT09TVF9WRVJTSU9OX05VTUJFUigyLDAsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVk
KEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0QyXzEpCi0jICAgICAgIGRlZmlu
ZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUigyLDEsMCkKLSMgICBlbmRp
ZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0Qy
XzIpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJF
UigyLDIsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAm
JiBkZWZpbmVkKE9wZW5CU0QyXzMpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBC
T09TVF9WRVJTSU9OX05VTUJFUigyLDMsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJP
T1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0QyXzQpCi0jICAgICAgIGRlZmluZSBC
T09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUigyLDQsMCkKLSMgICBlbmRpZgot
IyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0QyXzUp
Ci0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUigy
LDUsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBk
ZWZpbmVkKE9wZW5CU0QyXzYpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09T
VF9WRVJTSU9OX05VTUJFUigyLDYsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NU
X09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0QyXzcpCi0jICAgICAgIGRlZmluZSBCT09T
VF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUigyLDcsMCkKLSMgICBlbmRpZgotIyAg
IGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0QyXzgpCi0j
ICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUigyLDgs
MCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZp
bmVkKE9wZW5CU0QyXzkpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9W
RVJTSU9OX05VTUJFUigyLDksMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09T
X0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0QzXzApCi0jICAgICAgIGRlZmluZSBCT09TVF9P
U19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUigzLDAsMCkKLSMgICBlbmRpZgotIyAgIGlm
ICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0QzXzEpCi0jICAg
ICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUigzLDEsMCkK
LSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVk
KE9wZW5CU0QzXzIpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJT
SU9OX05VTUJFUigzLDIsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JT
RF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0QzXzMpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19C
U0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUigzLDMsMCkKLSMgICBlbmRpZgotIyAgIGlmICFk
ZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0QzXzQpCi0jICAgICAg
IGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUigzLDQsMCkKLSMg
ICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9w
ZW5CU0QzXzUpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9O
X05VTUJFUigzLDUsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9P
UEVOKSAmJiBkZWZpbmVkKE9wZW5CU0QzXzYpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0Rf
T1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUigzLDYsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZp
bmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0QzXzcpCi0jICAgICAgIGRl
ZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUigzLDcsMCkKLSMgICBl
bmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5C
U0QzXzgpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05V
TUJFUigzLDgsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVO
KSAmJiBkZWZpbmVkKE9wZW5CU0QzXzkpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BF
TiBCT09TVF9WRVJTSU9OX05VTUJFUigzLDksMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVk
KEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0Q0XzApCi0jICAgICAgIGRlZmlu
ZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUig0LDAsMCkKLSMgICBlbmRp
ZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0Q0
XzEpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJF
Uig0LDEsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAm
JiBkZWZpbmVkKE9wZW5CU0Q0XzIpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBC
T09TVF9WRVJTSU9OX05VTUJFUig0LDIsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJP
T1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0Q0XzMpCi0jICAgICAgIGRlZmluZSBC
T09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUig0LDMsMCkKLSMgICBlbmRpZgot
IyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0Q0XzQp
Ci0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUig0
LDQsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBk
ZWZpbmVkKE9wZW5CU0Q0XzUpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09T
VF9WRVJTSU9OX05VTUJFUig0LDUsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NU
X09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0Q0XzYpCi0jICAgICAgIGRlZmluZSBCT09T
VF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUig0LDYsMCkKLSMgICBlbmRpZgotIyAg
IGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0Q0XzcpCi0j
ICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUig0LDcs
MCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKSAmJiBkZWZp
bmVkKE9wZW5CU0Q0XzgpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19CU0RfT1BFTiBCT09TVF9W
RVJTSU9OX05VTUJFUig0LDgsMCkKLSMgICBlbmRpZgotIyAgIGlmICFkZWZpbmVkKEJPT1NUX09T
X0JTRF9PUEVOKSAmJiBkZWZpbmVkKE9wZW5CU0Q0XzkpCi0jICAgICAgIGRlZmluZSBCT09TVF9P
U19CU0RfT1BFTiBCT09TVF9WRVJTSU9OX05VTUJFUig0LDksMCkKLSMgICBlbmRpZgotIyAgIGlm
ICFkZWZpbmVkKEJPT1NUX09TX0JTRF9PUEVOKQotIyAgICAgICBkZWZpbmUgQk9PU1RfT1NfQlNE
X09QRU4gQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgZW5kaWYKLSNlbmRpZgot
Ci0jaWYgQk9PU1RfT1NfQlNEX09QRU4KLSMgICBkZWZpbmUgQk9PU1RfT1NfQlNEX09QRU5fQVZB
SUxBQkxFCi0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC9vc19kZXRlY3RlZC5oPgot
I2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfT1NfQlNEX09QRU5fTkFNRSAiT3BlbkJTRCIKLQotI2Vu
ZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURF
Rl9ERUNMQVJFX1RFU1QoQk9PU1RfT1NfQlNEX09QRU4sQk9PU1RfT1NfQlNEX09QRU5fTkFNRSkK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3By
ZWRlZi9vcy9jeWd3aW4uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3ByZWRlZi9vcy9jeWd3aW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQz
NmYwZjMxNzQ5NjY2YzNkZTkyZmI0OGIyM2Q3Mjk3NzkwOWIwYy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9wcmVkZWYvb3MvY3lnd2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NSAr
MCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAxNQotRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfT1NfQ1lH
V0lOX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX09TX0NZR1dJTl9ICi0KLSNpbmNsdWRlIDxib29z
dC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5o
PgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9PU19DWUdXSU5gXQotCi1bQGh0dHA6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvQ3lnd2luIEN5Z3dpbl0gZXZpcm9ubWVudC4KLQotW3RhYmxlCi0gICAg
W1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BfX0NZ
R1dJTl9fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBC
T09TVF9PU19DWUdXSU4gQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYg
IWRlZmluZWQoQk9PU1RfUFJFREVGX0RFVEFJTF9PU19ERVRFQ1RFRCkgJiYgKCBcCi0gICAgZGVm
aW5lZChfX0NZR1dJTl9fKSBcCi0gICAgKQotIyAgIHVuZGVmIEJPT1NUX09TX0NZR1dJTgotIyAg
IGRlZmluZSBCT09TVF9PU19DWUdXSU4gQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0j
ZW5kaWYKLQotI2lmIEJPT1NUX09TX0NZR1dJTgotIyAgIGRlZmluZSBCT09TVF9PU19DWUdXSU5f
QVZBSUxBQkxFCi0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC9vc19kZXRlY3RlZC5o
PgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfT1NfQ1lHV0lOX05BTUUgIkN5Z3dpbiIKLQotI2Vu
ZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURF
Rl9ERUNMQVJFX1RFU1QoQk9PU1RfT1NfQ1lHV0lOLEJPT1NUX09TX0NZR1dJTl9OQU1FKQpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVm
L29zL2hhaWt1LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9w
cmVkZWYvb3MvaGFpa3UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc5ZGJlYWM4
OGRhYTcyMWViZGQ3YTc5NzAzODQwMDZiOWU3NDNmOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9wcmVkZWYvb3MvaGFpa3UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAK
LS8qCi1Db3B5cmlnaHQgSmVzc2ljYSBIYW1pbHRvbiAyMDE0Ci1Db3B5cmlnaHQgUmVuZSBSaXZl
cmEgMjAxNC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5z
ZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBv
ciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0j
aWZuZGVmIEJPT1NUX1BSRURFRl9PU19IQUlLVV9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9PU19I
QUlLVV9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNs
dWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9PU19IQUlL
VWBdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IYWlrdV8ob3BlcmF0aW5nX3N5
c3RlbSkgSGFpa3VdIG9wZXJhdGluZyBzeXN0ZW0uCi0KLVt0YWJsZQotICAgIFtbX19wcmVkZWZf
c3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19IQUlLVV9fYF0gW19f
cHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9PU19IQUlL
VSBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiAhZGVmaW5lZChCT09T
VF9QUkVERUZfREVUQUlMX09TX0RFVEVDVEVEKSAmJiAoIFwKLSAgICBkZWZpbmVkKF9fSEFJS1Vf
XykgXAotICAgICkKLSMgICB1bmRlZiBCT09TVF9PU19IQUlLVQotIyAgIGRlZmluZSBCT09TVF9P
U19IQUlLVSBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSNlbmRpZgotCi0jaWYgQk9P
U1RfT1NfSEFJS1UKLSMgICBkZWZpbmUgQk9PU1RfT1NfSEFJS1VfQVZBSUxBQkxFCi0jICAgaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC9vc19kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZp
bmUgQk9PU1RfT1NfSEFJS1VfTkFNRSAiSGFpa3UiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9v
c3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NU
X09TX0hBSUtVLEJPT1NUX09TX0hBSUtVX05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3MvaHB1eC5oIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL29zL2hwdXguaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkyNDNmNDg3OTA3ZDBlNjgyYTY4NzUzNjc2MjdkNjY5
Y2Y4YjAxOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3MvaHB1eC5o
CisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVy
YSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNl
LCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9y
IGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNp
Zm5kZWYgQk9PU1RfUFJFREVGX09TX0hQVVhfSAotI2RlZmluZSBCT09TVF9QUkVERUZfT1NfSFBV
WF9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRl
IDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9PU19IUFVYYF0K
LQotW0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hQLVVYIEhQLVVYXSBvcGVyYXRpbmcg
c3lzdGVtLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVy
c2lvbl9fXV0KLQotICAgIFtbYGhwdXhgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtb
YF9ocHV4YF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfX2hwdXhgXSBbX19wcmVk
ZWZfZGV0ZWN0aW9uX19dXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX09TX0hQVVggQk9P
U1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgIWRlZmluZWQoQk9PU1RfUFJF
REVGX0RFVEFJTF9PU19ERVRFQ1RFRCkgJiYgKCBcCi0gICAgZGVmaW5lZChocHV4KSB8fCBkZWZp
bmVkKF9ocHV4KSB8fCBkZWZpbmVkKF9faHB1eCkgXAotICAgICkKLSMgICB1bmRlZiBCT09TVF9P
U19IUFVYCi0jICAgZGVmaW5lIEJPT1NUX09TX0hQVVggQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZB
SUxBQkxFCi0jZW5kaWYKLQotI2lmIEJPT1NUX09TX0hQVVgKLSMgICBkZWZpbmUgQk9PU1RfT1Nf
SFBVWF9BVkFJTEFCTEUKLSMgICBpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL29zX2RldGVj
dGVkLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBCT09TVF9PU19IUFVYX05BTUUgIkhQLVVYIgotCi0j
ZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJF
REVGX0RFQ0xBUkVfVEVTVChCT09TVF9PU19IUFVYLEJPT1NUX09TX0hQVVhfTkFNRSkKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9v
cy9pb3MuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRl
Zi9vcy9pb3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg1MzgxNWE2ZDE3ODNi
ZTdlZGU3NWM1ZGI2ZDdhOGE0MzQwNzllMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9wcmVkZWYvb3MvaW9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotQ29w
eXJpZ2h0IEZyYW56IERldHJvIDIwMTQKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDE1Ci1EaXN0
cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0o
U2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NUX1BSRURF
Rl9PU19JT1NfSAotI2RlZmluZSBCT09TVF9QUkVERUZfT1NfSU9TX0gKLQotI2luY2x1ZGUgPGJv
b3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtl
Lmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX09TX0lPU2BdCi0KLVtAaHR0cDovL2VuLndpa2lw
ZWRpYS5vcmcvd2lraS9pT1MgaU9TXSBvcGVyYXRpbmcgc3lzdGVtLgotCi1bdGFibGUKLSAgICBb
W19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fQVBQ
TEVfX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tgX19NQUNIX19gXSBbX19wcmVk
ZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fRU5WSVJPTk1FTlRfSVBIT05FX09TX1ZFUlNJT05f
TUlOX1JFUVVJUkVEX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotCi0gICAgW1tgX19FTlZJ
Uk9OTUVOVF9JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRURfX2BdIFtfX0VOVklST05NRU5U
X0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRF9fKjEwMDBdXQotICAgIF0KLSAqLwotCi0j
ZGVmaW5lIEJPT1NUX09TX0lPUyBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0K
LSNpZiAhZGVmaW5lZChCT09TVF9QUkVERUZfREVUQUlMX09TX0RFVEVDVEVEKSAmJiAoIFwKLSAg
ICBkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX01BQ0hfXykgJiYgXAotICAgIGRlZmlu
ZWQoX19FTlZJUk9OTUVOVF9JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRURfXykgXAotICAg
ICkKLSMgICB1bmRlZiBCT09TVF9PU19JT1MKLSMgICBkZWZpbmUgQk9PU1RfT1NfSU9TIChfX0VO
VklST05NRU5UX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRF9fKjEwMDApCi0jZW5kaWYK
LQotI2lmIEJPT1NUX09TX0lPUwotIyAgIGRlZmluZSBCT09TVF9PU19JT1NfQVZBSUxBQkxFCi0j
ICAgaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC9vc19kZXRlY3RlZC5oPgotI2VuZGlmCi0K
LSNkZWZpbmUgQk9PU1RfT1NfSU9TX05BTUUgImlPUyIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxi
b29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9P
U1RfT1NfSU9TLEJPT1NUX09TX0lPU19OQU1FKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL29zL2lyaXguaCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9pcml4LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNmFjNDFkY2RkMDUyY2IwZjNmNDIyOGQwOTBlMTU3NmJm
Y2I0NGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL29zL2lyaXguaAor
KysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEg
MjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWZu
ZGVmIEJPT1NUX1BSRURFRl9PU19JUklYX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX09TX0lSSVhf
SAotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8
Ym9vc3QvcHJlZGVmL21ha2UuaD4KLQotLypgCi1baGVhZGluZyBgQk9PU1RfT1NfSVJJWGBdCi0K
LVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Jcml4IElSSVhdIG9wZXJhdGluZyBzeXN0
ZW0uCi0KLVt0YWJsZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9u
X19dXQotCi0gICAgW1tgc2dpYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfX3Nn
aWBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgXQotICovCi0KLSNkZWZpbmUgQk9PU1Rf
T1NfSVJJWCBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiAhZGVmaW5l
ZChCT09TVF9QUkVERUZfREVUQUlMX09TX0RFVEVDVEVEKSAmJiAoIFwKLSAgICBkZWZpbmVkKHNn
aSkgfHwgZGVmaW5lZChfX3NnaSkgXAotICAgICkKLSMgICB1bmRlZiBCT09TVF9PU19JUklYCi0j
ICAgZGVmaW5lIEJPT1NUX09TX0lSSVggQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0j
ZW5kaWYKLQotI2lmIEJPT1NUX09TX0lSSVgKLSMgICBkZWZpbmUgQk9PU1RfT1NfSVJJWF9BVkFJ
TEFCTEUKLSMgICBpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL29zX2RldGVjdGVkLmg+Ci0j
ZW5kaWYKLQotI2RlZmluZSBCT09TVF9PU19JUklYX05BTUUgIklSSVgiCi0KLSNlbmRpZgotCi0j
aW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFS
RV9URVNUKEJPT1NUX09TX0lSSVgsQk9PU1RfT1NfSVJJWF9OQU1FKQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL29zL2xpbnV4Lmgg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3MvbGlu
dXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI5N2QwODk1NDJlYTFkOWI3N2I5
MmJlYjUxNDgzNDk4YTgzODk3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVk
ZWYvb3MvbGludXguaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi1Db3B5cmln
aHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9PU19MSU5VWF9ICi0jZGVmaW5lIEJPT1NU
X1BSRURFRl9PU19MSU5VWF9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1i
ZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBC
T09TVF9PU19MSU5VWGBdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaW51eCBM
aW51eF0gb3BlcmF0aW5nIHN5c3RlbS4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xf
X10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2BsaW51eGBdIFtfX3ByZWRlZl9kZXRl
Y3Rpb25fX11dCi0gICAgW1tgX19saW51eGBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAg
XQotICovCi0KLSNkZWZpbmUgQk9PU1RfT1NfTElOVVggQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9U
X0FWQUlMQUJMRQotCi0jaWYgIWRlZmluZWQoQk9PU1RfUFJFREVGX0RFVEFJTF9PU19ERVRFQ1RF
RCkgJiYgKCBcCi0gICAgZGVmaW5lZChsaW51eCkgfHwgZGVmaW5lZChfX2xpbnV4KSBcCi0gICAg
KQotIyAgIHVuZGVmIEJPT1NUX09TX0xJTlVYCi0jICAgZGVmaW5lIEJPT1NUX09TX0xJTlVYIEJP
T1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotI2VuZGlmCi0KLSNpZiBCT09TVF9PU19MSU5V
WAotIyAgIGRlZmluZSBCT09TVF9PU19MSU5VWF9BVkFJTEFCTEUKLSMgICBpbmNsdWRlIDxib29z
dC9wcmVkZWYvZGV0YWlsL29zX2RldGVjdGVkLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBCT09TVF9P
U19MSU5VWF9OQU1FICJMaW51eCIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYv
ZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfT1NfTElOVVgs
Qk9PU1RfT1NfTElOVVhfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9tYWNvcy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL29zL21hY29zLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDRhZmIzMGQwODc5MDNlMzA4ZTc4Yzg3ZTlkZTI4NjM2NTYyMTlmNmEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL29zL21hY29zLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgt
MjAxNQotQ29weXJpZ2h0IEZyYW56IERldHJvIDIwMTQKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBC
b29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VO
U0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX09TX01BQ09TX0gKLSNkZWZp
bmUgQk9PU1RfUFJFREVGX09TX01BQ09TX0gKLQotLyogU3BlY2lhbCBjYXNlOiBpT1Mgd2lsbCBk
ZWZpbmUgdGhlIHNhbWUgcHJlZGVmcyBhcyBNYWNPUywgYW5kIGFkZGl0aW9uYWxseQotICdfX0VO
VklST05NRU5UX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRF9fJy4gV2UgY2FuIGd1YXJk
IGFnYWluc3QgdGhhdCwKLSBidXQgb25seSBpZiB3ZSBkZXRlY3QgaU9TIGZpcnN0LiBIZW5jZSB3
ZSB3aWxsIGZvcmNlIGluY2x1ZGUgaU9TIGRldGVjdGlvbgotICogYmVmb3JlIGRvaW5nIGFueSBN
YWNPUyBkZXRlY3Rpb24uCi0gKi8KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvb3MvaW9zLmg+Ci0K
LSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29z
dC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9PU19NQUNPU2BdCi0KLVtA
aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWNfT1MgTWFjIE9TXSBvcGVyYXRpbmcgc3lz
dGVtLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lv
bl9fXV0KLQotICAgIFtbYG1hY2ludG9zaGBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAg
W1tgTWFjaW50b3NoYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfX0FQUExFX19g
XSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fTUFDSF9fYF0gW19fcHJlZGVmX2Rl
dGVjdGlvbl9fXV0KLQotICAgIFtbYF9fQVBQTEVfX2AsIGBfX01BQ0hfX2BdIFsxMC4wLjBdXQot
ICAgIFtbIC9vdGhlcndpc2UvIF0gWzkuMC4wXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09T
VF9PU19NQUNPUyBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiAhZGVm
aW5lZChCT09TVF9QUkVERUZfREVUQUlMX09TX0RFVEVDVEVEKSAmJiAoIFwKLSAgICBkZWZpbmVk
KG1hY2ludG9zaCkgfHwgZGVmaW5lZChNYWNpbnRvc2gpIHx8IFwKLSAgICAoZGVmaW5lZChfX0FQ
UExFX18pICYmIGRlZmluZWQoX19NQUNIX18pKSBcCi0gICAgKQotIyAgIHVuZGVmIEJPT1NUX09T
X01BQ09TCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfT1NfTUFDT1MpICYmIGRlZmluZWQoX19BUFBM
RV9fKSAmJiBkZWZpbmVkKF9fTUFDSF9fKQotIyAgICAgICBkZWZpbmUgQk9PU1RfT1NfTUFDT1Mg
Qk9PU1RfVkVSU0lPTl9OVU1CRVIoMTAsMCwwKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQo
Qk9PU1RfT1NfTUFDT1MpCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19NQUNPUyBCT09TVF9WRVJT
SU9OX05VTUJFUig5LDAsMCkKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNpZiBCT09TVF9PU19NQUNP
UwotIyAgIGRlZmluZSBCT09TVF9PU19NQUNPU19BVkFJTEFCTEUKLSMgICBpbmNsdWRlIDxib29z
dC9wcmVkZWYvZGV0YWlsL29zX2RldGVjdGVkLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBCT09TVF9P
U19NQUNPU19OQU1FICJNYWMgT1MiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVm
L2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX09TX01BQ09T
LEJPT1NUX09TX01BQ09TX05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3Mvb3M0MDAuaCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9vczQwMC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiMzQ0NmMyNmM5MzNiOWU3ZTk4YmJmZjdmYTkwZmRmNGVhYjNkYzI0
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9vczQwMC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDEx
LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJz
aW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkg
YXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYg
Qk9PU1RfUFJFREVGX09TX09TNDAwX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX09TX09TNDAwX0gK
LQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJv
b3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX09TX09TNDAwYF0KLQot
W0BodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lCTV9pIElCTSBPUy80MDBdIG9wZXJhdGlu
ZyBzeXN0ZW0uCi0KLVt0YWJsZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92
ZXJzaW9uX19dXQotCi0gICAgW1tgX19PUzQwMF9fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0K
LSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9PU19PUzQwMCBCT09TVF9WRVJTSU9OX05VTUJF
Ul9OT1RfQVZBSUxBQkxFCi0KLSNpZiAhZGVmaW5lZChCT09TVF9QUkVERUZfREVUQUlMX09TX0RF
VEVDVEVEKSAmJiAoIFwKLSAgICBkZWZpbmVkKF9fT1M0MDBfXykgXAotICAgICkKLSMgICB1bmRl
ZiBCT09TVF9PU19PUzQwMAotIyAgIGRlZmluZSBCT09TVF9PU19PUzQwMCBCT09TVF9WRVJTSU9O
X05VTUJFUl9BVkFJTEFCTEUKLSNlbmRpZgotCi0jaWYgQk9PU1RfT1NfT1M0MDAKLSMgICBkZWZp
bmUgQk9PU1RfT1NfT1M0MDBfQVZBSUxBQkxFCi0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2Rl
dGFpbC9vc19kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfT1NfT1M0MDBfTkFN
RSAiSUJNIE9TLzQwMCIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWls
L3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfT1NfT1M0MDAsQk9PU1Rf
T1NfT1M0MDBfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9xbnhudG8uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy9xbnhudG8uaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZTc2ZmJmMjc4MTY5OTc1ZTMxNTc5YmM4MTBiNTJjNmJjMTNmYWFjNC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3MvcW54bnRvLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgtMjAx
NQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24g
MS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAot
aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09T
VF9QUkVERUZfT1NfUU5YTlRPX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX09TX1FOWE5UT19ICi0K
LSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29z
dC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9PU19RTlhgXQotCi1bQGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUU5YIFFOWF0gb3BlcmF0aW5nIHN5c3RlbS4KLVZl
cnNpb24gbnVtYmVyIGF2YWlsYWJsZSBhcyBtYWpvciwgYW5kIG1pbm9yIGlmIHBvc3NpYmxlLiBB
bmQKLXZlcnNpb24gNCBpcyBzcGVjaWZpY2FsbHkgZGV0ZWN0ZWQuCi0KLVt0YWJsZQotICAgIFtb
X19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX19RTlhf
X2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tgX19RTlhOVE9fX2BdIFtfX3ByZWRl
Zl9kZXRlY3Rpb25fX11dCi0KLSAgICBbW2BfTlRPX1ZFUlNJT05gXSBbVi5SLjBdXQotICAgIFtb
YF9fUU5YX19gXSBbNC4wLjBdXQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX09TX1FOWCBC
T09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiAhZGVmaW5lZChCT09TVF9Q
UkVERUZfREVUQUlMX09TX0RFVEVDVEVEKSAmJiAoIFwKLSAgICBkZWZpbmVkKF9fUU5YX18pIHx8
IGRlZmluZWQoX19RTlhOVE9fXykgXAotICAgICkKLSMgICB1bmRlZiBCT09TVF9PU19RTlgKLSMg
ICBpZiAhZGVmaW5lZChCT09TVF9PU19RTlgpICYmIGRlZmluZWQoX05UT19WRVJTSU9OKQotIyAg
ICAgICBkZWZpbmUgQk9PU1RfT1NfUU5YIEJPT1NUX1BSRURFRl9NQUtFXzEwX1ZWUlIoX05UT19W
RVJTSU9OKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfT1NfUU5YKSAmJiBkZWZp
bmVkKF9fUU5YX18pCi0jICAgICAgIGRlZmluZSBCT09TVF9PU19RTlggQk9PU1RfVkVSU0lPTl9O
VU1CRVIoNCwwLDApCi0jICAgZW5kaWYKLSMgICBpZiAhZGVmaW5lZChCT09TVF9PU19RTlgpCi0j
ICAgICAgIGRlZmluZSBCT09TVF9PU19RTlggQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxF
Ci0jICAgZW5kaWYKLSNlbmRpZgotCi0jaWYgQk9PU1RfT1NfUU5YCi0jICAgZGVmaW5lIEJPT1NU
X09TX1FOWF9BVkFJTEFCTEUKLSMgICBpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL29zX2Rl
dGVjdGVkLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBCT09TVF9PU19RTlhfTkFNRSAiUU5YIgotCi0j
ZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJF
REVGX0RFQ0xBUkVfVEVTVChCT09TVF9PU19RTlgsQk9PU1RfT1NfUU5YX05BTUUpCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3Mv
c29sYXJpcy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJl
ZGVmL29zL3NvbGFyaXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVkZGM5MWRh
ZTVlZDJkZmI3NGU1YzE4YTJlNWVjNjgzNjI2NjJkNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9wcmVkZWYvb3Mvc29sYXJpcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBA
QAotLyoKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55
aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX09TX1NPTEFSSVNf
SAotI2RlZmluZSBCT09TVF9QUkVERUZfT1NfU09MQVJJU19ICi0KLSNpbmNsdWRlIDxib29zdC9w
cmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgot
Ci0vKmAKLVtoZWFkaW5nIGBCT09TVF9PU19TT0xBUklTYF0KLQotW0BodHRwOi8vZW4ud2lraXBl
ZGlhLm9yZy93aWtpL1NvbGFyaXNfT3BlcmF0aW5nX0Vudmlyb25tZW50IFNvbGFyaXNdIG9wZXJh
dGluZyBzeXN0ZW0uCi0KLVt0YWJsZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRl
Zl92ZXJzaW9uX19dXQotCi0gICAgW1tgc3VuYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAg
ICBbW2BfX3N1bmBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgXQotICovCi0KLSNkZWZp
bmUgQk9PU1RfT1NfU09MQVJJUyBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0K
LSNpZiAhZGVmaW5lZChCT09TVF9QUkVERUZfREVUQUlMX09TX0RFVEVDVEVEKSAmJiAoIFwKLSAg
ICBkZWZpbmVkKHN1bikgfHwgZGVmaW5lZChfX3N1bikgXAotICAgICkKLSMgICB1bmRlZiBCT09T
VF9PU19TT0xBUklTCi0jICAgZGVmaW5lIEJPT1NUX09TX1NPTEFSSVMgQk9PU1RfVkVSU0lPTl9O
VU1CRVJfQVZBSUxBQkxFCi0jZW5kaWYKLQotI2lmIEJPT1NUX09TX1NPTEFSSVMKLSMgICBkZWZp
bmUgQk9PU1RfT1NfU09MQVJJU19BVkFJTEFCTEUKLSMgICBpbmNsdWRlIDxib29zdC9wcmVkZWYv
ZGV0YWlsL29zX2RldGVjdGVkLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBCT09TVF9PU19TT0xBUklT
X05BTUUgIlNvbGFyaXMiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFp
bC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX09TX1NPTEFSSVMsQk9P
U1RfT1NfU09MQVJJU19OQU1FKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL29zL3VuaXguaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy91bml4LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGE2MDcxMDQyN2EzZTJlNTE5NDRkMmVmYmNlNDFhYzgyZjNjZTAxNjkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL29zL3VuaXguaAorKysgL2Rldi9u
dWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgUmVuZSBSaXZlcmEgMjAwOC0yMDE1
Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1o
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NU
X1BSRURFRl9PU19VTklYX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX09TX1VOSVhfSAotCi0jaW5j
bHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJl
ZGVmL21ha2UuaD4KLQotLypgCi1baGVhZGluZyBgQk9PU1RfT1NfVU5JWGBdCi0KLVtAaHR0cDov
L2VuLndpa2lwZWRpYS5vcmcvd2lraS9Vbml4IFVuaXggRW52aXJvbm1lbnRdIG9wZXJhdGluZyBz
eXN0ZW0uCi0KLVt0YWJsZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJz
aW9uX19dXQotCi0gICAgW1tgdW5peGBdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tg
X191bml4YF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfWE9QRU5fU09VUkNFYF0g
W19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfUE9TSVhfU09VUkNFYF0gW19fcHJlZGVm
X2RldGVjdGlvbl9fXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9PU19VTklYIEJPT1NU
X1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLQotI2lmIGRlZmluZWQodW5peCkgfHwgZGVm
aW5lZChfX3VuaXgpIHx8IFwKLSAgICBkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpIHx8IGRlZmluZWQo
X1BPU0lYX1NPVVJDRSkKLSMgICB1bmRlZiBCT09TVF9PU19VTklYCi0jICAgZGVmaW5lIEJPT1NU
X09TX1VOSVggQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jZW5kaWYKLQotI2lmIEJP
T1NUX09TX1VOSVgKLSMgICBkZWZpbmUgQk9PU1RfT1NfVU5JWF9BVkFJTEFCTEUKLSNlbmRpZgot
Ci0jZGVmaW5lIEJPT1NUX09TX1VOSVhfTkFNRSAiVW5peCBFbnZpcm9ubWVudCIKLQotLypgCi1b
aGVhZGluZyBgQk9PU1RfT1NfU1ZSNGBdCi0KLVtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lr
aS9VTklYX1N5c3RlbV9WIFNWUjQgRW52aXJvbm1lbnRdIG9wZXJhdGluZyBzeXN0ZW0uCi0KLVt0
YWJsZQotICAgIFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0g
ICAgW1tgX19zeXN2X19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fU1ZSNGBd
IFtfX3ByZWRlZl9kZXRlY3Rpb25fX11dCi0gICAgW1tgX19zdnI0X19gXSBbX19wcmVkZWZfZGV0
ZWN0aW9uX19dXQotICAgIFtbYF9TWVNUWVBFX1NWUjRgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19d
XQotICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX09TX1NWUjQgQk9PU1RfVkVSU0lPTl9OVU1C
RVJfTk9UX0FWQUlMQUJMRQotCi0jaWYgZGVmaW5lZChfX3N5c3ZfXykgfHwgZGVmaW5lZChfX1NW
UjQpIHx8IFwKLSAgICBkZWZpbmVkKF9fc3ZyNF9fKSB8fCBkZWZpbmVkKF9TWVNUWVBFX1NWUjQp
Ci0jICAgdW5kZWYgQk9PU1RfT1NfU1ZSNAotIyAgIGRlZmluZSBCT09TVF9PU19TVlI0IEJPT1NU
X1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotI2VuZGlmCi0KLSNpZiBCT09TVF9PU19TVlI0Ci0j
ICAgZGVmaW5lIEJPT1NUX09TX1NWUjRfQVZBSUxBQkxFCi0jZW5kaWYKLQotI2RlZmluZSBCT09T
VF9PU19TVlI0X05BTUUgIlNWUjQgRW52aXJvbm1lbnQiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8
Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJP
T1NUX09TX1VOSVgsQk9PU1RfT1NfVU5JWF9OQU1FKQotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVT
VChCT09TVF9PU19TVlI0LEJPT1NUX09TX1NWUjRfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy92bXMuaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy92bXMuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY4Zjc4NmQ0ZWVjYjYzNzAwZDkxYWJiZWNlMTNi
MDNiNjRlOTFjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3Mvdm1z
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2
ZXJhIDIwMTEtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQot
I2lmbmRlZiBCT09TVF9QUkVERUZfT1NfVk1TX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX09TX1ZN
U19ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRl
IDxib29zdC9wcmVkZWYvbWFrZS5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9PU19WTVNgXQot
Ci1bQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVm1zIFZNU10gb3BlcmF0aW5nIHN5c3Rl
bS4KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25f
X11dCi0KLSAgICBbW2BWTVNgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fVk1T
YF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLQotICAgIFtbYF9fVk1TX1ZFUmBdIFtWLlIuUF1d
Ci0gICAgXQotICovCi0KLSNkZWZpbmUgQk9PU1RfT1NfVk1TIEJPT1NUX1ZFUlNJT05fTlVNQkVS
X05PVF9BVkFJTEFCTEUKLQotI2lmICFkZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfT1NfREVU
RUNURUQpICYmICggXAotICAgIGRlZmluZWQoVk1TKSB8fCBkZWZpbmVkKF9fVk1TKSBcCi0gICAg
KQotIyAgIHVuZGVmIEJPT1NUX09TX1ZNUwotIyAgIGlmIGRlZmluZWQoX19WTVNfVkVSKQotIyAg
ICAgICBkZWZpbmUgQk9PU1RfT1NfVk1TIEJPT1NUX1BSRURFRl9NQUtFXzEwX1ZWUlIwMFBQMDAo
X19WTVNfVkVSKQotIyAgIGVsc2UKLSMgICAgICAgZGVmaW5lIEJPT1NUX09TX1ZNUyBCT09TVF9W
RVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNpZiBCT09TVF9P
U19WTVMKLSMgICBkZWZpbmUgQk9PU1RfT1NfVk1TX0FWQUlMQUJMRQotIyAgIGluY2x1ZGUgPGJv
b3N0L3ByZWRlZi9kZXRhaWwvb3NfZGV0ZWN0ZWQuaD4KLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NU
X09TX1ZNU19OQU1FICJWTVMiCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2Rl
dGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX09TX1ZNUyxCT09T
VF9PU19WTVNfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy93aW5kb3dzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvb3Mvd2luZG93cy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5ZGI0MzkwOTUwNTYyNDU0NjQxYjg4NmNhY2EyYWE3OTczMTVhNTMzLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9vcy93aW5kb3dzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMDgt
MjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNp
b24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBC
T09TVF9QUkVERUZfT1NfV0lORE9XU19ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9PU19XSU5ET1dT
X0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUg
PGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX09TX1dJTkRPV1Ng
XQotCi1bQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2F0ZWdvcnk6TWljcm9zb2Z0X1dp
bmRvd3MgTWljcm9zb2Z0IFdpbmRvd3NdIG9wZXJhdGluZyBzeXN0ZW0uCi0KLVt0YWJsZQotICAg
IFtbX19wcmVkZWZfc3ltYm9sX19dIFtfX3ByZWRlZl92ZXJzaW9uX19dXQotCi0gICAgW1tgX1dJ
TjMyYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfV0lONjRgXSBbX19wcmVkZWZf
ZGV0ZWN0aW9uX19dXQotICAgIFtbYF9fV0lOMzJfX2BdIFtfX3ByZWRlZl9kZXRlY3Rpb25fX11d
Ci0gICAgW1tgX19UT1NfV0lOX19gXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIFtbYF9f
V0lORE9XU19fYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBdCi0gKi8KLQotI2RlZmlu
ZSBCT09TVF9PU19XSU5ET1dTIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLQot
I2lmICFkZWZpbmVkKEJPT1NUX1BSRURFRl9ERVRBSUxfT1NfREVURUNURUQpICYmICggXAotICAg
IGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42NCkgfHwgXAotICAgIGRlZmluZWQoX19X
SU4zMl9fKSB8fCBkZWZpbmVkKF9fVE9TX1dJTl9fKSB8fCBcCi0gICAgZGVmaW5lZChfX1dJTkRP
V1NfXykgXAotICAgICkKLSMgICB1bmRlZiBCT09TVF9PU19XSU5ET1dTCi0jICAgZGVmaW5lIEJP
T1NUX09TX1dJTkRPV1MgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jZW5kaWYKLQot
I2lmIEJPT1NUX09TX1dJTkRPV1MKLSMgICBkZWZpbmUgQk9PU1RfT1NfV0lORE9XU19BVkFJTEFC
TEUKLSMgICBpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL29zX2RldGVjdGVkLmg+Ci0jZW5k
aWYKLQotI2RlZmluZSBCT09TVF9PU19XSU5ET1dTX05BTUUgIk1pY3Jvc29mdCBXaW5kb3dzIgot
Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1Rf
UFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9PU19XSU5ET1dTLEJPT1NUX09TX1dJTkRPV1NfTkFN
RSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3ByZWRlZi9vdGhlci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcHJlZGVmL290aGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwOWFkNDk0
NWZlNWIyYjg0NmI2NTkzYWE0YWQ1YmEyYzUxMTU1M2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcHJlZGVmL290aGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0v
KgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMTMtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotKi8KLQotI2lmICFkZWZpbmVkKEJPT1NUX1BSRURFRl9PVEhFUl9IKSB8
fCBkZWZpbmVkKEJPT1NUX1BSRURFRl9JTlRFUk5BTF9HRU5FUkFURV9URVNUUykKLSNpZm5kZWYg
Qk9PU1RfUFJFREVGX09USEVSX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX09USEVSX0gKLSNlbmRp
ZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL290aGVyL2VuZGlhbi5oPgotLyojaW5jbHVkZSA8
Ym9vc3QvcHJlZGVmL290aGVyLy5oPiovCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL290aGVyL2VuZGlhbi5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL290aGVyL2Vu
ZGlhbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDFmNDNmZjRkODUwZDA4OGUw
N2ZjYWRkZDhlZjNlNjg1Zjk2MTVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3By
ZWRlZi9vdGhlci9lbmRpYW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKgot
Q29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMTMtMjAxNQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJv
b3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9QUkVERUZfRU5ESUFOX0gKLSNkZWZpbmUg
Qk9PU1RfUFJFREVGX0VORElBTl9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9u
dW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotI2luY2x1ZGUgPGJvb3N0
L3ByZWRlZi9saWJyYXJ5L2MvZ251Lmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL29zL21hY29z
Lmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL29zL2JzZC5oPgotI2luY2x1ZGUgPGJvb3N0L3By
ZWRlZi9vcy9hbmRyb2lkLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX0VORElBTl8qYF0KLQot
RGV0ZWN0aW9uIG9mIGVuZGlhbiBtZW1vcnkgb3JkZXJpbmcuIFRoZXJlIGFyZSBmb3VyIGRlZmlu
ZWQgbWFjcm9zCi1pbiB0aGlzIGhlYWRlciB0aGF0IGRlZmluZSB0aGUgdmFyaW91cyBnZW5lcmFs
bHkgcG9zc2libGUgZW5kaWFuCi1tZW1vcnkgb3JkZXJpbmdzOgotCi0qIGBCT09TVF9FTkRJQU5f
QklHX0JZVEVgLCBieXRlLXN3YXBwZWQgYmlnLWVuZGlhbi4KLSogYEJPT1NUX0VORElBTl9CSUdf
V09SRGAsIHdvcmQtc3dhcHBlZCBiaWctZW5kaWFuLgotKiBgQk9PU1RfRU5ESUFOX0xJVFRMRV9C
WVRFYCwgYnl0ZS1zd2FwcGVkIGxpdHRsZS1lbmRpYW4uCi0qIGBCT09TVF9FTkRJQU5fTElUVExF
X1dPUkRgLCB3b3JkLXN3YXBwZWQgbGl0dGxlLWVuZGlhbi4KLQotVGhlIGRldGVjdGlvbiBpcyBj
b25zZXJ2YXRpdmUgaW4gdGhhdCBpdCBvbmx5IGlkZW50aWZpZXMgZW5kaWFubmVzcwotdGhhdCBp
dCBrbm93cyBmb3IgY2VydGFpbi4gSW4gcGFydGljdWxhciBiaS1lbmRpYW5uZXNzIGlzIG5vdAot
aW5kaWNhdGVkIGFzIGlzIGl0IG5vdCBwcmFjdGljYWxseSBwb3NzaWJsZSB0byBkZXRlcm1pbmUg
dGhlCi1lbmRpYW5uZXNzIGZyb20gYW55dGhpbmcgYnV0IGFuIG9wZXJhdGluZyBzeXN0ZW0gcHJv
dmlkZWQKLWhlYWRlci4gQW5kIHRoZSBjdXJyZW50bHkga25vd24gaGVhZGVycyBkbyBub3QgZGVm
aW5lIHRoYXQKLXByb2dyYW1hdGljIGJpLWVuZGlhbm5lc3MgaXMgYXZhaWxhYmxlLgotCi1UaGlz
IGltcGxlbWVudGF0aW9uIGlzIGEgY29tcGlsYXRpb24gb2YgdmFyaW91cyBwdWJsaWNseSBhdmFp
bGFibGUKLWluZm9ybWF0aW9uIGFuZCBhY3F1aXJlZCBrbm93bGVkZ2U6Ci0KLSMgVGhlIGluZGlz
cGVuc2FibGUgZG9jdW1lbnRhdGlvbiBvZiAiUHJlLWRlZmluZWQgQ29tcGlsZXIgTWFjcm9zIgot
ICBbQGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9wcmVkZWYvd2lraS9FbmRpYW5uZXNzIEVuZGlh
bm5lc3NdLgotIyBUaGUgdmFyaW91cyBlbmRpYW4gc3BlY2lmaWNhdGlvbnMgYXZhaWxhYmxlIGlu
IHRoZQotICBbQGh0dHA6Ly93aWtpcGVkaWEub3JnLyBXaWtpcGVkaWFdIGNvbXB1dGVyIGFyY2hp
dGVjdHVyZSBwYWdlcy4KLSMgR2VuZXJhbGx5IGF2YWlsYWJsZSBzZWFyY2hlcyBmb3IgaGVhZGVy
cyB0aGF0IGRlZmluZSBlbmRpYW5uZXNzLgotICovCi0KLSNkZWZpbmUgQk9PU1RfRU5ESUFOX0JJ
R19CWVRFIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLSNkZWZpbmUgQk9PU1Rf
RU5ESUFOX0JJR19XT1JEIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUKLSNkZWZp
bmUgQk9PU1RfRU5ESUFOX0xJVFRMRV9CWVRFIEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJ
TEFCTEUKLSNkZWZpbmUgQk9PU1RfRU5ESUFOX0xJVFRMRV9XT1JEIEJPT1NUX1ZFUlNJT05fTlVN
QkVSX05PVF9BVkFJTEFCTEUKLQotLyogR05VIGxpYmMgcHJvdmlkZXMgYSBoZWFkZXIgZGVmaW5p
bmcgX19CWVRFX09SREVSLCBvciBfQllURV9PUkRFUi4KLSAqIEFuZCBzb21lIE9TcyBwcm92aWRl
IHNvbWUgZm9yIG9mIGVuZGlhbiBoZWFkZXIgYWxzby4KLSAqLwotI2lmICFCT09TVF9FTkRJQU5f
QklHX0JZVEUgJiYgIUJPT1NUX0VORElBTl9CSUdfV09SRCAmJiBcCi0gICAgIUJPT1NUX0VORElB
Tl9MSVRUTEVfQllURSAmJiAhQk9PU1RfRU5ESUFOX0xJVFRMRV9XT1JECi0jICAgaWYgQk9PU1Rf
TElCX0NfR05VIHx8IEJPT1NUX09TX0FORFJPSUQKLSMgICAgICAgaW5jbHVkZSA8ZW5kaWFuLmg+
Ci0jICAgZWxzZQotIyAgICAgICBpZiBCT09TVF9PU19NQUNPUwotIyAgICAgICAgICAgaW5jbHVk
ZSA8bWFjaGluZS9lbmRpYW4uaD4KLSMgICAgICAgZWxzZQotIyAgICAgICAgICAgaWYgQk9PU1Rf
T1NfQlNECi0jICAgICAgICAgICAgICAgaWYgQk9PU1RfT1NfQlNEX09QRU4KLSMgICAgICAgICAg
ICAgICAgICAgaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KLSMgICAgICAgICAgICAgICBlbHNl
Ci0jICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgPHN5cy9lbmRpYW4uaD4KLSMgICAgICAgICAg
ICAgICBlbmRpZgotIyAgICAgICAgICAgZW5kaWYKLSMgICAgICAgZW5kaWYKLSMgICBlbmRpZgot
IyAgIGlmIGRlZmluZWQoX19CWVRFX09SREVSKQotIyAgICAgICBpZiBkZWZpbmVkKF9fQklHX0VO
RElBTikgJiYgKF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4pCi0jICAgICAgICAgICB1bmRl
ZiBCT09TVF9FTkRJQU5fQklHX0JZVEUKLSMgICAgICAgICAgIGRlZmluZSBCT09TVF9FTkRJQU5f
QklHX0JZVEUgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgICAgIGVuZGlmCi0j
ICAgICAgIGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSAmJiAoX19CWVRFX09SREVSID09IF9f
TElUVExFX0VORElBTikKLSMgICAgICAgICAgIHVuZGVmIEJPT1NUX0VORElBTl9MSVRUTEVfQllU
RQotIyAgICAgICAgICAgZGVmaW5lIEJPT1NUX0VORElBTl9MSVRUTEVfQllURSBCT09TVF9WRVJT
SU9OX05VTUJFUl9BVkFJTEFCTEUKLSMgICAgICAgZW5kaWYKLSMgICAgICAgaWYgZGVmaW5lZChf
X1BEUF9FTkRJQU4pICYmIChfX0JZVEVfT1JERVIgPT0gX19QRFBfRU5ESUFOKQotIyAgICAgICAg
ICAgdW5kZWYgQk9PU1RfRU5ESUFOX0xJVFRMRV9XT1JECi0jICAgICAgICAgICBkZWZpbmUgQk9P
U1RfRU5ESUFOX0xJVFRMRV9XT1JEIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotIyAg
ICAgICBlbmRpZgotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQoX19CWVRFX09SREVSKSAmJiBk
ZWZpbmVkKF9CWVRFX09SREVSKQotIyAgICAgICBpZiBkZWZpbmVkKF9CSUdfRU5ESUFOKSAmJiAo
X0JZVEVfT1JERVIgPT0gX0JJR19FTkRJQU4pCi0jICAgICAgICAgICB1bmRlZiBCT09TVF9FTkRJ
QU5fQklHX0JZVEUKLSMgICAgICAgICAgIGRlZmluZSBCT09TVF9FTkRJQU5fQklHX0JZVEUgQk9P
U1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgICAgIGVuZGlmCi0jICAgICAgIGlmIGRl
ZmluZWQoX0xJVFRMRV9FTkRJQU4pICYmIChfQllURV9PUkRFUiA9PSBfTElUVExFX0VORElBTikK
LSMgICAgICAgICAgIHVuZGVmIEJPT1NUX0VORElBTl9MSVRUTEVfQllURQotIyAgICAgICAgICAg
ZGVmaW5lIEJPT1NUX0VORElBTl9MSVRUTEVfQllURSBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJ
TEFCTEUKLSMgICAgICAgZW5kaWYKLSMgICAgICAgaWYgZGVmaW5lZChfUERQX0VORElBTikgJiYg
KF9CWVRFX09SREVSID09IF9QRFBfRU5ESUFOKQotIyAgICAgICAgICAgdW5kZWYgQk9PU1RfRU5E
SUFOX0xJVFRMRV9XT1JECi0jICAgICAgICAgICBkZWZpbmUgQk9PU1RfRU5ESUFOX0xJVFRMRV9X
T1JEIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJMRQotIyAgICAgICBlbmRpZgotIyAgIGVu
ZGlmCi0jZW5kaWYKLQotLyogQnVpbHQtaW4gYnl0ZS1zd3BwZWQgYmlnLWVuZGlhbiBtYWNyb3Mu
Ci0gKi8KLSNpZiAhQk9PU1RfRU5ESUFOX0JJR19CWVRFICYmICFCT09TVF9FTkRJQU5fQklHX1dP
UkQgJiYgXAotICAgICFCT09TVF9FTkRJQU5fTElUVExFX0JZVEUgJiYgIUJPT1NUX0VORElBTl9M
SVRUTEVfV09SRAotIyAgIGlmIChkZWZpbmVkKF9fQklHX0VORElBTl9fKSAmJiAhZGVmaW5lZChf
X0xJVFRMRV9FTkRJQU5fXykpIHx8IFwKLSAgICAgICAoZGVmaW5lZChfQklHX0VORElBTikgJiYg
IWRlZmluZWQoX0xJVFRMRV9FTkRJQU4pKSB8fCBcCi0gICAgICAgIGRlZmluZWQoX19BUk1FQl9f
KSB8fCBcCi0gICAgICAgIGRlZmluZWQoX19USFVNQkVCX18pIHx8IFwKLSAgICAgICAgZGVmaW5l
ZChfX0FBUkNINjRFQl9fKSB8fCBcCi0gICAgICAgIGRlZmluZWQoX01JUFNFQikgfHwgXAotICAg
ICAgICBkZWZpbmVkKF9fTUlQU0VCKSB8fCBcCi0gICAgICAgIGRlZmluZWQoX19NSVBTRUJfXykK
LSMgICAgICAgdW5kZWYgQk9PU1RfRU5ESUFOX0JJR19CWVRFCi0jICAgICAgIGRlZmluZSBCT09T
VF9FTkRJQU5fQklHX0JZVEUgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgZW5k
aWYKLSNlbmRpZgotCi0vKiBCdWlsdC1pbiBieXRlLXN3cHBlZCBsaXR0bGUtZW5kaWFuIG1hY3Jv
cy4KLSAqLwotI2lmICFCT09TVF9FTkRJQU5fQklHX0JZVEUgJiYgIUJPT1NUX0VORElBTl9CSUdf
V09SRCAmJiBcCi0gICAgIUJPT1NUX0VORElBTl9MSVRUTEVfQllURSAmJiAhQk9PU1RfRU5ESUFO
X0xJVFRMRV9XT1JECi0jICAgaWYgKGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pICYmICFkZWZp
bmVkKF9fQklHX0VORElBTl9fKSkgfHwgXAotICAgICAgIChkZWZpbmVkKF9MSVRUTEVfRU5ESUFO
KSAmJiAhZGVmaW5lZChfQklHX0VORElBTikpIHx8IFwKLSAgICAgICAgZGVmaW5lZChfX0FSTUVM
X18pIHx8IFwKLSAgICAgICAgZGVmaW5lZChfX1RIVU1CRUxfXykgfHwgXAotICAgICAgICBkZWZp
bmVkKF9fQUFSQ0g2NEVMX18pIHx8IFwKLSAgICAgICAgZGVmaW5lZChfTUlQU0VMKSB8fCBcCi0g
ICAgICAgIGRlZmluZWQoX19NSVBTRUwpIHx8IFwKLSAgICAgICAgZGVmaW5lZChfX01JUFNFTF9f
KQotIyAgICAgICB1bmRlZiBCT09TVF9FTkRJQU5fTElUVExFX0JZVEUKLSMgICAgICAgZGVmaW5l
IEJPT1NUX0VORElBTl9MSVRUTEVfQllURSBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUK
LSMgICBlbmRpZgotI2VuZGlmCi0KLS8qIFNvbWUgYXJjaGl0ZWN0dXJlcyBhcmUgc3RyaWN0bHkg
b25lIGVuZGlhbmVzcyAoYXMgb3Bwb3NlZAotICogdGhlIGN1cnJlbnQgY29tbW9uIGJpLWVuZGlh
bmVzcykuCi0gKi8KLSNpZiAhQk9PU1RfRU5ESUFOX0JJR19CWVRFICYmICFCT09TVF9FTkRJQU5f
QklHX1dPUkQgJiYgXAotICAgICFCT09TVF9FTkRJQU5fTElUVExFX0JZVEUgJiYgIUJPT1NUX0VO
RElBTl9MSVRUTEVfV09SRAotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZWRlZi9hcmNoaXRlY3R1cmUu
aD4KLSMgICBpZiBCT09TVF9BUkNIX002OEsgfHwgXAotICAgICAgICBCT09TVF9BUkNIX1BBUklT
QyB8fCBcCi0gICAgICAgIEJPT1NUX0FSQ0hfU1BBUkMgfHwgXAotICAgICAgICBCT09TVF9BUkNI
X1NZUzM3MCB8fCBcCi0gICAgICAgIEJPT1NUX0FSQ0hfU1lTMzkwIHx8IFwKLSAgICAgICAgQk9P
U1RfQVJDSF9aCi0jICAgICAgIHVuZGVmIEJPT1NUX0VORElBTl9CSUdfQllURQotIyAgICAgICBk
ZWZpbmUgQk9PU1RfRU5ESUFOX0JJR19CWVRFIEJPT1NUX1ZFUlNJT05fTlVNQkVSX0FWQUlMQUJM
RQotIyAgIGVuZGlmCi0jICAgaWYgQk9PU1RfQVJDSF9BTUQ2NCB8fCBcCi0gICAgICAgIEJPT1NU
X0FSQ0hfSUE2NCB8fCBcCi0gICAgICAgIEJPT1NUX0FSQ0hfWDg2IHx8IFwKLSAgICAgICAgQk9P
U1RfQVJDSF9CTEFDS0ZJTgotIyAgICAgICB1bmRlZiBCT09TVF9FTkRJQU5fTElUVExFX0JZVEUK
LSMgICAgICAgZGVmaW5lIEJPT1NUX0VORElBTl9MSVRUTEVfQllURSBCT09TVF9WRVJTSU9OX05V
TUJFUl9BVkFJTEFCTEUKLSMgICBlbmRpZgotI2VuZGlmCi0KLS8qIFdpbmRvd3Mgb24gQVJNLCBp
ZiBub3Qgb3RoZXJ3aXNlIGRldGVjdGVkL3NwZWNpZmllZCwgaXMgYWx3YXlzCi0gKiBieXRlLXN3
YXBlZCBsaXR0bGUtZW5kaWFuLgotICovCi0jaWYgIUJPT1NUX0VORElBTl9CSUdfQllURSAmJiAh
Qk9PU1RfRU5ESUFOX0JJR19XT1JEICYmIFwKLSAgICAhQk9PU1RfRU5ESUFOX0xJVFRMRV9CWVRF
ICYmICFCT09TVF9FTkRJQU5fTElUVExFX1dPUkQKLSMgICBpZiBCT09TVF9BUkNIX0FSTQotIyAg
ICAgICBpbmNsdWRlIDxib29zdC9wcmVkZWYvb3Mvd2luZG93cy5oPgotIyAgICAgICBpZiBCT09T
VF9PU19XSU5ET1dTCi0jICAgICAgICAgICB1bmRlZiBCT09TVF9FTkRJQU5fTElUVExFX0JZVEUK
LSMgICAgICAgICAgIGRlZmluZSBCT09TVF9FTkRJQU5fTElUVExFX0JZVEUgQk9PU1RfVkVSU0lP
Tl9OVU1CRVJfQVZBSUxBQkxFCi0jICAgICAgIGVuZGlmCi0jICAgZW5kaWYKLSNlbmRpZgotCi0j
aWYgQk9PU1RfRU5ESUFOX0JJR19CWVRFCi0jICAgZGVmaW5lIEJPT1NUX0VORElBTl9CSUdfQllU
RV9BVkFJTEFCTEUKLSNlbmRpZgotI2lmIEJPT1NUX0VORElBTl9CSUdfV09SRAotIyAgIGRlZmlu
ZSBCT09TVF9FTkRJQU5fQklHX1dPUkRfQllURV9BVkFJTEFCTEUKLSNlbmRpZgotI2lmIEJPT1NU
X0VORElBTl9MSVRUTEVfQllURQotIyAgIGRlZmluZSBCT09TVF9FTkRJQU5fTElUVExFX0JZVEVf
QVZBSUxBQkxFCi0jZW5kaWYKLSNpZiBCT09TVF9FTkRJQU5fTElUVExFX1dPUkQKLSMgICBkZWZp
bmUgQk9PU1RfRU5ESUFOX0xJVFRMRV9XT1JEX0JZVEVfQVZBSUxBQkxFCi0jZW5kaWYKLQotI2Rl
ZmluZSBCT09TVF9FTkRJQU5fQklHX0JZVEVfTkFNRSAiQnl0ZS1Td2FwcGVkIEJpZy1FbmRpYW4i
Ci0jZGVmaW5lIEJPT1NUX0VORElBTl9CSUdfV09SRF9OQU1FICJXb3JkLVN3YXBwZWQgQmlnLUVu
ZGlhbiIKLSNkZWZpbmUgQk9PU1RfRU5ESUFOX0xJVFRMRV9CWVRFX05BTUUgIkJ5dGUtU3dhcHBl
ZCBMaXR0bGUtRW5kaWFuIgotI2RlZmluZSBCT09TVF9FTkRJQU5fTElUVExFX1dPUkRfTkFNRSAi
V29yZC1Td2FwcGVkIExpdHRsZS1FbmRpYW4iCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3Qv
cHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJPT1NUX0VO
RElBTl9CSUdfQllURSxCT09TVF9FTkRJQU5fQklHX0JZVEVfTkFNRSkKLQotI2luY2x1ZGUgPGJv
b3N0L3ByZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09T
VF9FTkRJQU5fQklHX1dPUkQsQk9PU1RfRU5ESUFOX0JJR19XT1JEX05BTUUpCi0KLSNpbmNsdWRl
IDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1Qo
Qk9PU1RfRU5ESUFOX0xJVFRMRV9CWVRFLEJPT1NUX0VORElBTl9MSVRUTEVfQllURV9OQU1FKQot
Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVD
TEFSRV9URVNUKEJPT1NUX0VORElBTl9MSVRUTEVfV09SRCxCT09TVF9FTkRJQU5fTElUVExFX1dP
UkRfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3ByZWRlZi9wbGF0Zm9ybS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvcHJlZGVmL3BsYXRmb3JtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGMwYzg3MDZlOGEyZjFkNTMwZTNhMDFkZGVlZDNmMmEzYTFlNWMwZDAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL3BsYXRmb3JtLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwyMSArMCwwIEBACi0vKgotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMTMtMjAxNQotQ29weXJp
Z2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24gMjAxNAotRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotKFNlZSBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotKi8KLQotI2lmICFkZWZpbmVkKEJPT1NUX1BSRURFRl9QTEFURk9STV9I
KSB8fCBkZWZpbmVkKEJPT1NUX1BSRURFRl9JTlRFUk5BTF9HRU5FUkFURV9URVNUUykKLSNpZm5k
ZWYgQk9PU1RfUFJFREVGX1BMQVRGT1JNX0gKLSNkZWZpbmUgQk9PU1RfUFJFREVGX1BMQVRGT1JN
X0gKLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3BsYXRmb3JtL21pbmd3Lmg+Ci0j
aW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3BsYXRmb3JtL3dpbmRvd3NfZGVza3RvcC5oPgotI2luY2x1
ZGUgPGJvb3N0L3ByZWRlZi9wbGF0Zm9ybS93aW5kb3dzX3N0b3JlLmg+Ci0jaW5jbHVkZSA8Ym9v
c3QvcHJlZGVmL3BsYXRmb3JtL3dpbmRvd3NfcGhvbmUuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVk
ZWYvcGxhdGZvcm0vd2luZG93c19ydW50aW1lLmg+Ci0vKiNpbmNsdWRlIDxib29zdC9wcmVkZWYv
cGxhdGZvcm0vLmg+Ki8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvcGxhdGZvcm0vbWluZ3cuaCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9wbGF0Zm9ybS9taW5ndy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM1ODM3MzY0YTc4ZTNhNDg5OGIwMmQy
ZWMzMmY3MTgxZGQ3ZTFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9w
bGF0Zm9ybS9taW5ndy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLUNvcHly
aWdodCBSZW5lIFJpdmVyYSAyMDA4LTIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX0NPTVBJTEVSX01JTkdXX0gKLSNkZWZp
bmUgQk9PU1RfUFJFREVGX0NPTVBJTEVSX01JTkdXX0gKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRl
Zi92ZXJzaW9uX251bWJlci5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9tYWtlLmg+Ci0KLS8q
YAotW2hlYWRpbmcgYEJPT1NUX1BMQVRfTUlOR1dgXQotCi1bQGh0dHA6Ly9lbi53aWtpcGVkaWEu
b3JnL3dpa2kvTWluR1cgTWluR1ddIHBsYXRmb3JtLgotVmVyc2lvbiBudW1iZXIgYXZhaWxhYmxl
IGFzIG1ham9yLCBtaW5vciwgYW5kIHBhdGNoLgotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5
bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYF9fTUlOR1czMl9fYF0gW19f
cHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBbW2BfX01JTkdXNjRfX2BdIFtfX3ByZWRlZl9kZXRl
Y3Rpb25fX11dCi0KLSAgICBbW2BfX01JTkdXNjRfVkVSU0lPTl9NQUpPUmAsIGBfX01JTkdXNjRf
VkVSU0lPTl9NSU5PUmBdIFtWLlIuMF1dCi0gICAgW1tgX19NSU5HVzMyX1ZFUlNJT05fTUFKT1Jg
LCBgX19NSU5HVzMyX1ZFUlNJT05fTUlOT1JgXSBbVi5SLjBdXQotICAgIF0KLSAqLwotCi0jZGVm
aW5lIEJPT1NUX1BMQVRfTUlOR1cgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTk9UX0FWQUlMQUJMRQot
Ci0jaWYgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfX01JTkdXNjRfXykKLSMgICBp
bmNsdWRlIDxfbWluZ3cuaD4KLSMgICBpZiAhZGVmaW5lZChCT09TVF9QTEFUX01JTkdXX0RFVEVD
VElPTikgJiYgKGRlZmluZWQoX19NSU5HVzY0X1ZFUlNJT05fTUFKT1IpICYmIGRlZmluZWQoX19N
SU5HVzY0X1ZFUlNJT05fTUlOT1IpKQotIyAgICAgICBkZWZpbmUgQk9PU1RfUExBVF9NSU5HV19E
RVRFQ1RJT04gXAotICAgICAgICAgICAgQk9PU1RfVkVSU0lPTl9OVU1CRVIoX19NSU5HVzY0X1ZF
UlNJT05fTUFKT1IsX19NSU5HVzY0X1ZFUlNJT05fTUlOT1IsMCkKLSMgICBlbmRpZgotIyAgIGlm
ICFkZWZpbmVkKEJPT1NUX1BMQVRfTUlOR1dfREVURUNUSU9OKSAmJiAoZGVmaW5lZChfX01JTkdX
MzJfVkVSU0lPTl9NQUpPUikgJiYgZGVmaW5lZChfX01JTkdXMzJfVkVSU0lPTl9NSU5PUikpCi0j
ICAgICAgIGRlZmluZSBCT09TVF9QTEFUX01JTkdXX0RFVEVDVElPTiBcCi0gICAgICAgICAgICBC
T09TVF9WRVJTSU9OX05VTUJFUihfX01JTkdXMzJfTUFKT1JfVkVSU0lPTixfX01JTkdXMzJfTUlO
T1JfVkVSU0lPTiwwKQotIyAgIGVuZGlmCi0jICAgaWYgIWRlZmluZWQoQk9PU1RfUExBVF9NSU5H
V19ERVRFQ1RJT04pCi0jICAgICAgIGRlZmluZSBCT09TVF9QTEFUX01JTkdXX0RFVEVDVElPTiBC
T09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNpZmRl
ZiBCT09TVF9QTEFUX01JTkdXX0RFVEVDVElPTgotIyAgIGRlZmluZSBCT09TVF9QTEFUX01JTkdX
X0FWQUlMQUJMRQotIyAgIGlmIGRlZmluZWQoQk9PU1RfUFJFREVGX0RFVEFJTF9QTEFUX0RFVEVD
VEVEKQotIyAgICAgICBkZWZpbmUgQk9PU1RfUExBVF9NSU5HV19FTVVMQVRFRCBCT09TVF9QTEFU
X01JTkdXX0RFVEVDVElPTgotIyAgIGVsc2UKLSMgICAgICAgdW5kZWYgQk9PU1RfUExBVF9NSU5H
VwotIyAgICAgICBkZWZpbmUgQk9PU1RfUExBVF9NSU5HVyBCT09TVF9QTEFUX01JTkdXX0RFVEVD
VElPTgotIyAgIGVuZGlmCi0jICAgaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL2RldGFpbC9wbGF0Zm9y
bV9kZXRlY3RlZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1RfUExBVF9NSU5HV19OQU1FICJN
aW5HVyIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4K
LUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfUExBVF9NSU5HVyxCT09TVF9QTEFUX01J
TkdXX05BTUUpCi0KLSNpZmRlZiBCT09TVF9QTEFUX01JTkdXX0VNVUxBVEVECi0jaW5jbHVkZSA8
Ym9vc3QvcHJlZGVmL2RldGFpbC90ZXN0Lmg+Ci1CT09TVF9QUkVERUZfREVDTEFSRV9URVNUKEJP
T1NUX1BMQVRfTUlOR1dfRU1VTEFURUQsQk9PU1RfUExBVF9NSU5HV19OQU1FKQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVk
ZWYvcGxhdGZvcm0vd2luZG93c19kZXNrdG9wLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVkZWYvcGxhdGZvcm0vd2luZG93c19kZXNrdG9wLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNzE5YjQyOTlkODQzZjEyYmM0NTFiYTQ1ODRmMTU5
Nzk2YWNlNmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL3BsYXRmb3Jt
L3dpbmRvd3NfZGVza3RvcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLUNv
cHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uIDIwMTQKLUNvcHlyaWdodCBSZW5lIFJp
dmVyYSAyMDE1Ci1EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuCi0oU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWZu
ZGVmIEJPT1NUX1BSRURFRl9QTEFUX1dJTkRPV1NfREVTS1RPUF9ICi0jZGVmaW5lIEJPT1NUX1BS
RURFRl9QTEFUX1dJTkRPV1NfREVTS1RPUF9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVy
c2lvbl9udW1iZXIuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvbWFrZS5oPgotI2luY2x1ZGUg
PGJvb3N0L3ByZWRlZi9vcy93aW5kb3dzLmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX1BMQVRf
V0lORE9XU19ERVNLVE9QYF0KLQotW3RhYmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19f
cHJlZGVmX3ZlcnNpb25fX11dCi0KLSAgICBbW2AhV0lOQVBJX0ZBTUlMWWBdIFtfX3ByZWRlZl9k
ZXRlY3Rpb25fX11dCi0gICAgW1tgV0lOQVBJX0ZBTUlMWSA9PSBXSU5BUElfRkFNSUxZX0RFU0tU
T1BfQVBQYF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBC
T09TVF9QTEFUX1dJTkRPV1NfREVTS1RPUCBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxB
QkxFCi0KLSNpZiBCT09TVF9PU19XSU5ET1dTICYmIFwKLSAgICAoICFkZWZpbmVkKFdJTkFQSV9G
QU1JTFkpIHx8IChXSU5BUElfRkFNSUxZID09IFdJTkFQSV9GQU1JTFlfREVTS1RPUF9BUFApICkK
LSMgICB1bmRlZiBCT09TVF9QTEFUX1dJTkRPV1NfREVTS1RPUAotIyAgIGRlZmluZSBCT09TVF9Q
TEFUX1dJTkRPV1NfREVTS1RPUCBCT09TVF9WRVJTSU9OX05VTUJFUl9BVkFJTEFCTEUKLSNlbmRp
ZgotIAotI2lmIEJPT1NUX1BMQVRfV0lORE9XU19ERVNLVE9QCi0jICAgZGVmaW5lIEJPT1NUX1BM
QVRfV0lORE9XU19ERVNLVE9QX0FWQUlMQUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZWRlZi9k
ZXRhaWwvcGxhdGZvcm1fZGV0ZWN0ZWQuaD4KLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX1BMQVRf
V0lORE9XU19ERVNLVE9QX05BTUUgIldpbmRvd3MgRGVza3RvcCIKLQotI2VuZGlmCi0KLSNpbmNs
dWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3QuaD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RF
U1QoQk9PU1RfUExBVF9XSU5ET1dTX0RFU0tUT1AsQk9PU1RfUExBVF9XSU5ET1dTX0RFU0tUT1Bf
TkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3ByZWRlZi9wbGF0Zm9ybS93aW5kb3dzX3Bob25lLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvcGxhdGZvcm0vd2luZG93c19waG9uZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjU4M2FkYzAyMTVkYzM1OGFjYWI0MDFkNDE0
YjQyNWI4ZDk3Y2Y0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9wbGF0
Zm9ybS93aW5kb3dzX3Bob25lLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgot
Q29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24gMjAxNAotQ29weXJpZ2h0IFJlbmUg
Uml2ZXJhIDIwMTUKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNl
LCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9y
IGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNp
Zm5kZWYgQk9PU1RfUFJFREVGX1BMQVRfV0lORE9XU19QSE9ORV9ICi0jZGVmaW5lIEJPT1NUX1BS
RURFRl9QTEFUX1dJTkRPV1NfUEhPTkVfSAotCi0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNp
b25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlZGVmL21ha2UuaD4KLSNpbmNsdWRlIDxi
b29zdC9wcmVkZWYvb3Mvd2luZG93cy5oPgotCi0vKmAKLVtoZWFkaW5nIGBCT09TVF9QTEFUX1dJ
TkRPV1NfUEhPTkVgXQotCi1bdGFibGUKLSAgICBbW19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVk
ZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYFdJTkFQSV9GQU1JTFkgPT0gV0lOQVBJX0ZBTUlMWV9Q
SE9ORV9BUFBgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQotICAgIF0KLSAqLwotCi0jZGVmaW5l
IEJPT1NUX1BMQVRfV0lORE9XU19QSE9ORSBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxB
QkxFCi0KLSNpZiBCT09TVF9PU19XSU5ET1dTICYmIGRlZmluZWQoV0lOQVBJX0ZBTUlMWSkgJiYg
V0lOQVBJX0ZBTUlMWSA9PSBXSU5BUElfRkFNSUxZX1BIT05FX0FQUAotIyAgIHVuZGVmIEJPT1NU
X1BMQVRfV0lORE9XU19QSE9ORQotIyAgIGRlZmluZSBCT09TVF9QTEFUX1dJTkRPV1NfUEhPTkUg
Qk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jZW5kaWYKLSAKLSNpZiBCT09TVF9QTEFU
X1dJTkRPV1NfUEhPTkUKLSMgICBkZWZpbmUgQk9PU1RfUExBVF9XSU5ET1dTX1BIT05FX0FWQUlM
QUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvcGxhdGZvcm1fZGV0ZWN0ZWQu
aD4KLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX1BMQVRfV0lORE9XU19QSE9ORV9OQU1FICJXaW5k
b3dzIFBob25lIgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvdGVz
dC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9QTEFUX1dJTkRPV1NfUEhPTkUs
Qk9PU1RfUExBVF9XSU5ET1dTX1BIT05FX05BTUUpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvcGxhdGZvcm0vd2luZG93c19ydW50
aW1lLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYv
cGxhdGZvcm0vd2luZG93c19ydW50aW1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAzYmU1MTQwZTljYmU1MmJiZTFlNTM5N2QxYjBmMGU4YzA1YTE3ODQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL3BsYXRmb3JtL3dpbmRvd3NfcnVudGltZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLUNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENv
cnBvcmF0aW9uIDIwMTQKLUNvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDE1Ci1EaXN0cmlidXRlZCB1
bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0oU2VlIGFjY29t
cGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci1odHRwOi8vd3d3LmJvb3N0
Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0qLwotCi0jaWZuZGVmIEJPT1NUX1BSRURFRl9QTEFUX1dJ
TkRPV1NfUlVOVElNRV9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9QTEFUX1dJTkRPV1NfUlVOVElN
RV9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaD4KLSNpbmNsdWRl
IDxib29zdC9wcmVkZWYvbWFrZS5oPgotI2luY2x1ZGUgPGJvb3N0L3ByZWRlZi9vcy93aW5kb3dz
Lmg+Ci0KLS8qYAotW2hlYWRpbmcgYEJPT1NUX1BMQVRfV0lORE9XU19SVU5USU1FYF0KLQotW3Rh
YmxlCi0gICAgW1tfX3ByZWRlZl9zeW1ib2xfX10gW19fcHJlZGVmX3ZlcnNpb25fX11dCi0KLSAg
ICBbW2BXSU5BUElfRkFNSUxZID09IFdJTkFQSV9GQU1JTFlfQVBQYF0gW19fcHJlZGVmX2RldGVj
dGlvbl9fXV0KLSAgICBbW2BXSU5BUElfRkFNSUxZID09IFdJTkFQSV9GQU1JTFlfUEhPTkVfQVBQ
YF0gW19fcHJlZGVmX2RldGVjdGlvbl9fXV0KLSAgICBdCi0gKi8KLQotI2RlZmluZSBCT09TVF9Q
TEFUX1dJTkRPV1NfUlVOVElNRSBCT09TVF9WRVJTSU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0K
LSNpZiBCT09TVF9PU19XSU5ET1dTICYmIGRlZmluZWQoV0lOQVBJX0ZBTUlMWSkgJiYgXAotICAg
ICggV0lOQVBJX0ZBTUlMWSA9PSBXSU5BUElfRkFNSUxZX0FQUCB8fCBXSU5BUElfRkFNSUxZID09
IFdJTkFQSV9GQU1JTFlfUEhPTkVfQVBQICkKLSMgICB1bmRlZiBCT09TVF9QTEFUX1dJTkRPV1Nf
UlVOVElNRQotIyAgIGRlZmluZSBCT09TVF9QTEFUX1dJTkRPV1NfUlVOVElNRSBCT09TVF9WRVJT
SU9OX05VTUJFUl9BVkFJTEFCTEUKLSNlbmRpZgotIAotI2lmIEJPT1NUX1BMQVRfV0lORE9XU19S
VU5USU1FCi0jICAgZGVmaW5lIEJPT1NUX1BMQVRfV0lORE9XU19SVU5USU1FX0FWQUlMQUJMRQot
IyAgIGluY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvcGxhdGZvcm1fZGV0ZWN0ZWQuaD4KLSNl
bmRpZgotCi0jZGVmaW5lIEJPT1NUX1BMQVRfV0lORE9XU19SVU5USU1FX05BTUUgIldpbmRvd3Mg
UnVudGltZSIKLQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvZGV0YWlsL3Rlc3Qu
aD4KLUJPT1NUX1BSRURFRl9ERUNMQVJFX1RFU1QoQk9PU1RfUExBVF9XSU5ET1dTX1JVTlRJTUUs
Qk9PU1RfUExBVF9XSU5ET1dTX1JVTlRJTUVfTkFNRSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9wbGF0Zm9ybS93aW5kb3dzX3N0
b3JlLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYv
cGxhdGZvcm0vd2luZG93c19zdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
MzQ5NjhiM2RkMDZkNmZmMjUwOTIyYzczODI3OTBlZGJiNGZkNjYzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi9wbGF0Zm9ybS93aW5kb3dzX3N0b3JlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9y
YXRpb24gMjAxNAotQ29weXJpZ2h0IFJlbmUgUml2ZXJhIDIwMTUKLURpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55
aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX1BMQVRfV0lORE9X
U19TVE9SRV9ICi0jZGVmaW5lIEJPT1NUX1BSRURFRl9QTEFUX1dJTkRPV1NfU1RPUkVfSAotCi0j
aW5jbHVkZSA8Ym9vc3QvcHJlZGVmL3ZlcnNpb25fbnVtYmVyLmg+Ci0jaW5jbHVkZSA8Ym9vc3Qv
cHJlZGVmL21ha2UuaD4KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvb3Mvd2luZG93cy5oPgotCi0v
KmAKLVtoZWFkaW5nIGBCT09TVF9QTEFUX1dJTkRPV1NfU1RPUkVgXQotCi1bdGFibGUKLSAgICBb
W19fcHJlZGVmX3N5bWJvbF9fXSBbX19wcmVkZWZfdmVyc2lvbl9fXV0KLQotICAgIFtbYFdJTkFQ
SV9GQU1JTFkgPT0gV0lOQVBJX0ZBTUlMWV9BUFBgXSBbX19wcmVkZWZfZGV0ZWN0aW9uX19dXQot
ICAgIF0KLSAqLwotCi0jZGVmaW5lIEJPT1NUX1BMQVRfV0lORE9XU19TVE9SRSBCT09TVF9WRVJT
SU9OX05VTUJFUl9OT1RfQVZBSUxBQkxFCi0KLSNpZiBCT09TVF9PU19XSU5ET1dTICYmIGRlZmlu
ZWQoV0lOQVBJX0ZBTUlMWSkgJiYgV0lOQVBJX0ZBTUlMWSA9PSBXSU5BUElfRkFNSUxZX0FQUAot
IyAgIHVuZGVmIEJPT1NUX1BMQVRfV0lORE9XU19TVE9SRQotIyAgIGRlZmluZSBCT09TVF9QTEFU
X1dJTkRPV1NfU1RPUkUgQk9PU1RfVkVSU0lPTl9OVU1CRVJfQVZBSUxBQkxFCi0jZW5kaWYKLSAK
LSNpZiBCT09TVF9QTEFUX1dJTkRPV1NfU1RPUkUKLSMgICBkZWZpbmUgQk9PU1RfUExBVF9XSU5E
T1dTX1NUT1JFX0FWQUlMQUJMRQotIyAgIGluY2x1ZGUgPGJvb3N0L3ByZWRlZi9kZXRhaWwvcGxh
dGZvcm1fZGV0ZWN0ZWQuaD4KLSNlbmRpZgotCi0jZGVmaW5lIEJPT1NUX1BMQVRfV0lORE9XU19T
VE9SRV9OQU1FICJXaW5kb3dzIFN0b3JlIgotCi0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3By
ZWRlZi9kZXRhaWwvdGVzdC5oPgotQk9PU1RfUFJFREVGX0RFQ0xBUkVfVEVTVChCT09TVF9QTEFU
X1dJTkRPV1NfU1RPUkUsQk9PU1RfUExBVF9XSU5ET1dTX1NUT1JFX05BTUUpCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVkZWYvdmVyc2lv
bi5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlZGVmL3Zl
cnNpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJkMmI0ZmQ5ZjcwNjM3MGY0
NWIzMjliZTA4MGQ5NjhlYmQ2YjE5OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9w
cmVkZWYvdmVyc2lvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoKLUNvcHly
aWdodCBSZW5lIFJpdmVyYSAyMDE1LTIwMTYKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX1ZFUlNJT05fSAotI2RlZmluZSBCT09T
VF9QUkVERUZfVkVSU0lPTl9ICi0KLSNpbmNsdWRlIDxib29zdC9wcmVkZWYvdmVyc2lvbl9udW1i
ZXIuaD4KLQotI2RlZmluZSBCT09TVF9QUkVERUZfVkVSU0lPTiBCT09TVF9WRVJTSU9OX05VTUJF
UigxLDUsMCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVkZWYvdmVyc2lvbl9udW1iZXIuaCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi92ZXJzaW9uX251bWJlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDk0MjcwOWM3ZmUxY2NiYmNiODQ0Y2ZhZjYwOTEw
NGI5NGY0ODAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZWRlZi92ZXJzaW9u
X251bWJlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLUNvcHlyaWdodCBS
ZW5lIFJpdmVyYSAyMDA1LTIwMTYKLURpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLShTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQKLWh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK
LSovCi0KLSNpZm5kZWYgQk9PU1RfUFJFREVGX1ZFUlNJT05fTlVNQkVSX0gKLSNkZWZpbmUgQk9P
U1RfUFJFREVGX1ZFUlNJT05fTlVNQkVSX0gKLQotLypgCi1baGVhZGluZyBgQk9PU1RfVkVSU0lP
Tl9OVU1CRVJgXQotCi1gYAotQk9PU1RfVkVSU0lPTl9OVU1CRVIobWFqb3IsbWlub3IscGF0Y2gp
Ci1gYAotCi1EZWZpbmVzIHN0YW5kYXJkIHZlcnNpb24gbnVtYmVycywgd2l0aCB0aGVzZSBwcm9w
ZXJ0aWVzOgotCi0qIERlY2ltYWwgYmFzZSB3aG9sZSBudW1iZXJzIGluIHRoZSByYW5nZSBcWzAs
MTAwMDAwMDAwMCkuCi0gIFRoZSBudW1iZXIgcmFuZ2UgaXMgZGVzaWduZWQgdG8gYWxsb3cgZm9y
IGEgKDIsMiw1KSB0cmlwbGV0LgotICBXaGljaCBmaXRzIHdpdGhpbiBhIDMyIGJpdCB2YWx1ZS4K
LSogVGhlIGBtYWpvcmAgbnVtYmVyIGNhbiBiZSBpbiB0aGUgXFswLDk5XF0gcmFuZ2UuCi0qIFRo
ZSBgbWlub3JgIG51bWJlciBjYW4gYmUgaW4gdGhlIFxbMCw5OVxdIHJhbmdlLgotKiBUaGUgYHBh
dGNoYCBudW1iZXIgY2FuIGJlIGluIHRoZSBcWzAsOTk5OTlcXSByYW5nZS4KLSogVmFsdWVzIGNh
biBiZSBzcGVjaWZpZWQgaW4gYW55IGJhc2UuIEFzIHRoZSBkZWZpbmVkIHZhbHVlCi0gIGlzIGFu
IGNvbnN0YW50IGV4cHJlc3Npb24uCi0qIFZhbHVlIGNhbiBiZSBkaXJlY3RseSB1c2VkIGluIGJv
dGggcHJlcHJvY2Vzc29yIGFuZCBjb21waWxlcgotICBleHByZXNzaW9ucyBmb3IgY29tcGFyaXNv
biB0byBvdGhlciBzaW1pbGFybHkgZGVmaW5lZCB2YWx1ZXMuCi0qIFRoZSBpbXBsZW1lbnRhdGlv
biBlbmZvcmNlcyB0aGUgaW5kaXZpZHVhbCByYW5nZXMgZm9yIHRoZQotICBtYWpvciwgbWlub3Is
IGFuZCBwYXRjaCBudW1iZXJzLiBBbmQgdmFsdWVzIG92ZXIgdGhlIHJhbmdlcwotICBhcmUgdHJ1
bmNhdGVkIChtb2R1bG8pLgotCi0qLwotI2RlZmluZSBCT09TVF9WRVJTSU9OX05VTUJFUihtYWpv
cixtaW5vcixwYXRjaCkgXAotICAgICggKCgobWFqb3IpJTEwMCkqMTAwMDAwMDApICsgKCgobWlu
b3IpJTEwMCkqMTAwMDAwKSArICgocGF0Y2gpJTEwMDAwMCkgKQotCi0jZGVmaW5lIEJPT1NUX1ZF
UlNJT05fTlVNQkVSX01BWCBcCi0gICAgQk9PU1RfVkVSU0lPTl9OVU1CRVIoOTksOTksOTk5OTkp
Ci0KLSNkZWZpbmUgQk9PU1RfVkVSU0lPTl9OVU1CRVJfWkVSTyBcCi0gICAgQk9PU1RfVkVSU0lP
Tl9OVU1CRVIoMCwwLDApCi0KLSNkZWZpbmUgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTUlOIFwKLSAg
ICBCT09TVF9WRVJTSU9OX05VTUJFUigwLDAsMSkKLQotI2RlZmluZSBCT09TVF9WRVJTSU9OX05V
TUJFUl9BVkFJTEFCTEUgXAotICAgIEJPT1NUX1ZFUlNJT05fTlVNQkVSX01JTgotCi0jZGVmaW5l
IEJPT1NUX1ZFUlNJT05fTlVNQkVSX05PVF9BVkFJTEFCTEUgXAotICAgIEJPT1NUX1ZFUlNJT05f
TlVNQkVSX1pFUk8KLQotLypgCi1gYAotQk9PU1RfVkVSU0lPTl9OVU1CRVJfTUFKT1IoTiksIEJP
T1NUX1ZFUlNJT05fTlVNQkVSX01JTk9SKE4pLCBCT09TVF9WRVJTSU9OX05VTUJFUl9QQVRDSChO
KQotYGAKLQotVGhlIG1hY3JvcyBleHRyYWN0IHRoZSBtYWpvciwgbWlub3IsIGFuZCBwYXRjaCBw
b3J0aW9uIGZyb20gYSB3ZWxsIGZvcm1lZAotdmVyc2lvbiBudW1iZXIgcmVzdWx0aW5nIGluIGEg
cHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gaW4gdGhlIHJhbmdlIG9mCi1cWzAsOTlcXSBvciBcWzAs
OTk5OTlcXSBmb3IgdGhlIG1ham9yIGFuZCBtaW5vciwgb3IgcGF0Y2ggbnVtYmVycwotcmVzcGVj
dGl2ZWx5LgotKi8KLSNkZWZpbmUgQk9PU1RfVkVSU0lPTl9OVU1CRVJfTUFKT1IoTikgXAotICAg
ICggKChOKS8xMDAwMDAwMCklMTAwICkKLQotI2RlZmluZSBCT09TVF9WRVJTSU9OX05VTUJFUl9N
SU5PUihOKSBcCi0gICAgKCAoKE4pLzEwMDAwMCklMTAwICkKLQotI2RlZmluZSBCT09TVF9WRVJT
SU9OX05VTUJFUl9QQVRDSChOKSBcCi0gICAgKCAoTiklMTAwMDAwICkKLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9j
ZXNzb3IvYXJpdGhtZXRpYy9hZGQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvYWRkLmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNWEyOWY1NTRmNTcyNGIwYjVhOGFlYjUwZDQ0YzVlMDBkZGZjNjdk
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvYXJpdGhtZXRp
Yy9hZGQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotIyAvKiBDb3B5cmlnaHQg
KEMpIDIwMDEKLSMgICogSG91c2VtYXJxdWUgT3kKLSMgICogaHR0cDovL3d3dy5ob3VzZW1hcnF1
ZS5jb20KLSMgICoKLSMgICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Vf
MV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLSMgICovCi0jCi0jIC8qIFJldmlzZWQgYnkgUGF1bCBNZW5zb25pZGVzICgyMDAyKSAq
LwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNp
b24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfQVJJVEhNRVRJQ19BRERfSFBQ
Ci0jIGRlZmluZSBCT09TVF9QUkVQUk9DRVNTT1JfQVJJVEhNRVRJQ19BRERfSFBQCi0jCi0jIGlu
Y2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2RlYy5ocHA+Ci0jIGluY2x1ZGUg
PGJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2luYy5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0
L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJv
Y2Vzc29yL2NvbnRyb2wvd2hpbGUuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3Iv
dHVwbGUvZWxlbS5ocHA+Ci0jCi0jIC8qIEJPT1NUX1BQX0FERCAqLwotIwotIyBpZiB+Qk9PU1Rf
UFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdfRURHKCkKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX0FERCh4LCB5KSBCT09TVF9QUF9UVVBMRV9FTEVNKDIsIDAsIEJPT1NUX1BQX1dISUxF
KEJPT1NUX1BQX0FERF9QLCBCT09TVF9QUF9BRERfTywgKHgsIHkpKSkKLSMgZWxzZQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfQUREKHgsIHkpIEJPT1NUX1BQX0FERF9JKHgsIHkpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9BRERfSSh4LCB5KSBCT09TVF9QUF9UVVBMRV9FTEVNKDIsIDAsIEJPT1NUX1BQ
X1dISUxFKEJPT1NUX1BQX0FERF9QLCBCT09TVF9QUF9BRERfTywgKHgsIHkpKSkKLSMgZW5kaWYK
LSMKLSMgZGVmaW5lIEJPT1NUX1BQX0FERF9QKGQsIHh5KSBCT09TVF9QUF9UVVBMRV9FTEVNKDIs
IDEsIHh5KQotIwotIyBpZiB+Qk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05G
SUdfTVdDQygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9BRERfTyhkLCB4eSkgQk9PU1RfUFBfQURE
X09fSSB4eQotIyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9QUF9BRERfTyhkLCB4eSkgQk9PU1Rf
UFBfQUREX09fSShCT09TVF9QUF9UVVBMRV9FTEVNKDIsIDAsIHh5KSwgQk9PU1RfUFBfVFVQTEVf
RUxFTSgyLCAxLCB4eSkpCi0jIGVuZGlmCi0jCi0jIGRlZmluZSBCT09TVF9QUF9BRERfT19JKHgs
IHkpIChCT09TVF9QUF9JTkMoeCksIEJPT1NUX1BQX0RFQyh5KSkKLSMKLSMgLyogQk9PU1RfUFBf
QUREX0QgKi8KLSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09O
RklHX0VERygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9BRERfRChkLCB4LCB5KSBCT09TVF9QUF9U
VVBMRV9FTEVNKDIsIDAsIEJPT1NUX1BQX1dISUxFXyAjIyBkKEJPT1NUX1BQX0FERF9QLCBCT09T
VF9QUF9BRERfTywgKHgsIHkpKSkKLSMgZWxzZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfQUREX0Qo
ZCwgeCwgeSkgQk9PU1RfUFBfQUREX0RfSShkLCB4LCB5KQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
QUREX0RfSShkLCB4LCB5KSBCT09TVF9QUF9UVVBMRV9FTEVNKDIsIDAsIEJPT1NUX1BQX1dISUxF
XyAjIyBkKEJPT1NUX1BQX0FERF9QLCBCT09TVF9QUF9BRERfTywgKHgsIHkpKSkKLSMgZW5kaWYK
LSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2RlYy5ocHAgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvYXJpdGhtZXRpYy9kZWMu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2RkMGEzNWExZTAyOTc5NjMxNTc1
OThkZWQ5NzJmNzMwNWM1YWNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXBy
b2Nlc3Nvci9hcml0aG1ldGljL2RlYy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyODkgKzAsMCBA
QAotIyAvKiBDb3B5cmlnaHQgKEMpIDIwMDEKLSMgICogSG91c2VtYXJxdWUgT3kKLSMgICogaHR0
cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20KLSMgICoKLSMgICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSMgICovCi0jCi0jIC8qIFJldmlzZWQgYnkgUGF1bCBN
ZW5zb25pZGVzICgyMDAyKSAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9y
IG1vc3QgcmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1Jf
QVJJVEhNRVRJQ19ERUNfSFBQCi0jIGRlZmluZSBCT09TVF9QUkVQUk9DRVNTT1JfQVJJVEhNRVRJ
Q19ERUNfSFBQCi0jCi0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmln
LmhwcD4KLSMKLSMgLyogQk9PU1RfUFBfREVDICovCi0jCi0jIGlmIH5CT09TVF9QUF9DT05GSUdf
RkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19NV0NDKCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0RF
Qyh4KSBCT09TVF9QUF9ERUNfSSh4KQotIyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9QUF9ERUMo
eCkgQk9PU1RfUFBfREVDX09PKCh4KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0RFQ19PTyhwYXIp
IEJPT1NUX1BQX0RFQ19JICMjIHBhcgotIyBlbmRpZgotIwotIyBkZWZpbmUgQk9PU1RfUFBfREVD
X0koeCkgQk9PU1RfUFBfREVDXyAjIyB4Ci0jCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMCAwCi0j
IGRlZmluZSBCT09TVF9QUF9ERUNfMSAwCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMiAxCi0jIGRl
ZmluZSBCT09TVF9QUF9ERUNfMyAyCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfNCAzCi0jIGRlZmlu
ZSBCT09TVF9QUF9ERUNfNSA0Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfNiA1Ci0jIGRlZmluZSBC
T09TVF9QUF9ERUNfNyA2Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfOCA3Ci0jIGRlZmluZSBCT09T
VF9QUF9ERUNfOSA4Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTAgOQotIyBkZWZpbmUgQk9PU1Rf
UFBfREVDXzExIDEwCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTIgMTEKLSMgZGVmaW5lIEJPT1NU
X1BQX0RFQ18xMyAxMgotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzE0IDEzCi0jIGRlZmluZSBCT09T
VF9QUF9ERUNfMTUgMTQKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xNiAxNQotIyBkZWZpbmUgQk9P
U1RfUFBfREVDXzE3IDE2Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTggMTcKLSMgZGVmaW5lIEJP
T1NUX1BQX0RFQ18xOSAxOAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzIwIDE5Ci0jIGRlZmluZSBC
T09TVF9QUF9ERUNfMjEgMjAKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yMiAyMQotIyBkZWZpbmUg
Qk9PU1RfUFBfREVDXzIzIDIyCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMjQgMjMKLSMgZGVmaW5l
IEJPT1NUX1BQX0RFQ18yNSAyNAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzI2IDI1Ci0jIGRlZmlu
ZSBCT09TVF9QUF9ERUNfMjcgMjYKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yOCAyNwotIyBkZWZp
bmUgQk9PU1RfUFBfREVDXzI5IDI4Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMzAgMjkKLSMgZGVm
aW5lIEJPT1NUX1BQX0RFQ18zMSAzMAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzMyIDMxCi0jIGRl
ZmluZSBCT09TVF9QUF9ERUNfMzMgMzIKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18zNCAzMwotIyBk
ZWZpbmUgQk9PU1RfUFBfREVDXzM1IDM0Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMzYgMzUKLSMg
ZGVmaW5lIEJPT1NUX1BQX0RFQ18zNyAzNgotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzM4IDM3Ci0j
IGRlZmluZSBCT09TVF9QUF9ERUNfMzkgMzgKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ180MCAzOQot
IyBkZWZpbmUgQk9PU1RfUFBfREVDXzQxIDQwCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfNDIgNDEK
LSMgZGVmaW5lIEJPT1NUX1BQX0RFQ180MyA0MgotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzQ0IDQz
Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfNDUgNDQKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ180NiA0
NQotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzQ3IDQ2Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfNDgg
NDcKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ180OSA0OAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzUw
IDQ5Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfNTEgNTAKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ181
MiA1MQotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzUzIDUyCi0jIGRlZmluZSBCT09TVF9QUF9ERUNf
NTQgNTMKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ181NSA1NAotIyBkZWZpbmUgQk9PU1RfUFBfREVD
XzU2IDU1Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfNTcgNTYKLSMgZGVmaW5lIEJPT1NUX1BQX0RF
Q181OCA1NwotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzU5IDU4Ci0jIGRlZmluZSBCT09TVF9QUF9E
RUNfNjAgNTkKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ182MSA2MAotIyBkZWZpbmUgQk9PU1RfUFBf
REVDXzYyIDYxCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfNjMgNjIKLSMgZGVmaW5lIEJPT1NUX1BQ
X0RFQ182NCA2MwotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzY1IDY0Ci0jIGRlZmluZSBCT09TVF9Q
UF9ERUNfNjYgNjUKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ182NyA2NgotIyBkZWZpbmUgQk9PU1Rf
UFBfREVDXzY4IDY3Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfNjkgNjgKLSMgZGVmaW5lIEJPT1NU
X1BQX0RFQ183MCA2OQotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzcxIDcwCi0jIGRlZmluZSBCT09T
VF9QUF9ERUNfNzIgNzEKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ183MyA3MgotIyBkZWZpbmUgQk9P
U1RfUFBfREVDXzc0IDczCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfNzUgNzQKLSMgZGVmaW5lIEJP
T1NUX1BQX0RFQ183NiA3NQotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzc3IDc2Ci0jIGRlZmluZSBC
T09TVF9QUF9ERUNfNzggNzcKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ183OSA3OAotIyBkZWZpbmUg
Qk9PU1RfUFBfREVDXzgwIDc5Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfODEgODAKLSMgZGVmaW5l
IEJPT1NUX1BQX0RFQ184MiA4MQotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzgzIDgyCi0jIGRlZmlu
ZSBCT09TVF9QUF9ERUNfODQgODMKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ184NSA4NAotIyBkZWZp
bmUgQk9PU1RfUFBfREVDXzg2IDg1Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfODcgODYKLSMgZGVm
aW5lIEJPT1NUX1BQX0RFQ184OCA4NwotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzg5IDg4Ci0jIGRl
ZmluZSBCT09TVF9QUF9ERUNfOTAgODkKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ185MSA5MAotIyBk
ZWZpbmUgQk9PU1RfUFBfREVDXzkyIDkxCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfOTMgOTIKLSMg
ZGVmaW5lIEJPT1NUX1BQX0RFQ185NCA5MwotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzk1IDk0Ci0j
IGRlZmluZSBCT09TVF9QUF9ERUNfOTYgOTUKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ185NyA5Ngot
IyBkZWZpbmUgQk9PU1RfUFBfREVDXzk4IDk3Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfOTkgOTgK
LSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xMDAgOTkKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xMDEg
MTAwCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTAyIDEwMQotIyBkZWZpbmUgQk9PU1RfUFBfREVD
XzEwMyAxMDIKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xMDQgMTAzCi0jIGRlZmluZSBCT09TVF9Q
UF9ERUNfMTA1IDEwNAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzEwNiAxMDUKLSMgZGVmaW5lIEJP
T1NUX1BQX0RFQ18xMDcgMTA2Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTA4IDEwNwotIyBkZWZp
bmUgQk9PU1RfUFBfREVDXzEwOSAxMDgKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xMTAgMTA5Ci0j
IGRlZmluZSBCT09TVF9QUF9ERUNfMTExIDExMAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzExMiAx
MTEKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xMTMgMTEyCi0jIGRlZmluZSBCT09TVF9QUF9ERUNf
MTE0IDExMwotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzExNSAxMTQKLSMgZGVmaW5lIEJPT1NUX1BQ
X0RFQ18xMTYgMTE1Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTE3IDExNgotIyBkZWZpbmUgQk9P
U1RfUFBfREVDXzExOCAxMTcKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xMTkgMTE4Ci0jIGRlZmlu
ZSBCT09TVF9QUF9ERUNfMTIwIDExOQotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzEyMSAxMjAKLSMg
ZGVmaW5lIEJPT1NUX1BQX0RFQ18xMjIgMTIxCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTIzIDEy
MgotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzEyNCAxMjMKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18x
MjUgMTI0Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTI2IDEyNQotIyBkZWZpbmUgQk9PU1RfUFBf
REVDXzEyNyAxMjYKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xMjggMTI3Ci0jIGRlZmluZSBCT09T
VF9QUF9ERUNfMTI5IDEyOAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzEzMCAxMjkKLSMgZGVmaW5l
IEJPT1NUX1BQX0RFQ18xMzEgMTMwCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTMyIDEzMQotIyBk
ZWZpbmUgQk9PU1RfUFBfREVDXzEzMyAxMzIKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xMzQgMTMz
Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTM1IDEzNAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzEz
NiAxMzUKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xMzcgMTM2Ci0jIGRlZmluZSBCT09TVF9QUF9E
RUNfMTM4IDEzNwotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzEzOSAxMzgKLSMgZGVmaW5lIEJPT1NU
X1BQX0RFQ18xNDAgMTM5Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTQxIDE0MAotIyBkZWZpbmUg
Qk9PU1RfUFBfREVDXzE0MiAxNDEKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xNDMgMTQyCi0jIGRl
ZmluZSBCT09TVF9QUF9ERUNfMTQ0IDE0MwotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzE0NSAxNDQK
LSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xNDYgMTQ1Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTQ3
IDE0NgotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzE0OCAxNDcKLSMgZGVmaW5lIEJPT1NUX1BQX0RF
Q18xNDkgMTQ4Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTUwIDE0OQotIyBkZWZpbmUgQk9PU1Rf
UFBfREVDXzE1MSAxNTAKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xNTIgMTUxCi0jIGRlZmluZSBC
T09TVF9QUF9ERUNfMTUzIDE1MgotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzE1NCAxNTMKLSMgZGVm
aW5lIEJPT1NUX1BQX0RFQ18xNTUgMTU0Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTU2IDE1NQot
IyBkZWZpbmUgQk9PU1RfUFBfREVDXzE1NyAxNTYKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xNTgg
MTU3Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTU5IDE1OAotIyBkZWZpbmUgQk9PU1RfUFBfREVD
XzE2MCAxNTkKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xNjEgMTYwCi0jIGRlZmluZSBCT09TVF9Q
UF9ERUNfMTYyIDE2MQotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzE2MyAxNjIKLSMgZGVmaW5lIEJP
T1NUX1BQX0RFQ18xNjQgMTYzCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTY1IDE2NAotIyBkZWZp
bmUgQk9PU1RfUFBfREVDXzE2NiAxNjUKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xNjcgMTY2Ci0j
IGRlZmluZSBCT09TVF9QUF9ERUNfMTY4IDE2NwotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzE2OSAx
NjgKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xNzAgMTY5Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNf
MTcxIDE3MAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzE3MiAxNzEKLSMgZGVmaW5lIEJPT1NUX1BQ
X0RFQ18xNzMgMTcyCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTc0IDE3MwotIyBkZWZpbmUgQk9P
U1RfUFBfREVDXzE3NSAxNzQKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xNzYgMTc1Ci0jIGRlZmlu
ZSBCT09TVF9QUF9ERUNfMTc3IDE3NgotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzE3OCAxNzcKLSMg
ZGVmaW5lIEJPT1NUX1BQX0RFQ18xNzkgMTc4Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTgwIDE3
OQotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzE4MSAxODAKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18x
ODIgMTgxCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTgzIDE4MgotIyBkZWZpbmUgQk9PU1RfUFBf
REVDXzE4NCAxODMKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xODUgMTg0Ci0jIGRlZmluZSBCT09T
VF9QUF9ERUNfMTg2IDE4NQotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzE4NyAxODYKLSMgZGVmaW5l
IEJPT1NUX1BQX0RFQ18xODggMTg3Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTg5IDE4OAotIyBk
ZWZpbmUgQk9PU1RfUFBfREVDXzE5MCAxODkKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xOTEgMTkw
Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTkyIDE5MQotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzE5
MyAxOTIKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18xOTQgMTkzCi0jIGRlZmluZSBCT09TVF9QUF9E
RUNfMTk1IDE5NAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzE5NiAxOTUKLSMgZGVmaW5lIEJPT1NU
X1BQX0RFQ18xOTcgMTk2Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMTk4IDE5NwotIyBkZWZpbmUg
Qk9PU1RfUFBfREVDXzE5OSAxOTgKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yMDAgMTk5Ci0jIGRl
ZmluZSBCT09TVF9QUF9ERUNfMjAxIDIwMAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzIwMiAyMDEK
LSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yMDMgMjAyCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMjA0
IDIwMwotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzIwNSAyMDQKLSMgZGVmaW5lIEJPT1NUX1BQX0RF
Q18yMDYgMjA1Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMjA3IDIwNgotIyBkZWZpbmUgQk9PU1Rf
UFBfREVDXzIwOCAyMDcKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yMDkgMjA4Ci0jIGRlZmluZSBC
T09TVF9QUF9ERUNfMjEwIDIwOQotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzIxMSAyMTAKLSMgZGVm
aW5lIEJPT1NUX1BQX0RFQ18yMTIgMjExCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMjEzIDIxMgot
IyBkZWZpbmUgQk9PU1RfUFBfREVDXzIxNCAyMTMKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yMTUg
MjE0Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMjE2IDIxNQotIyBkZWZpbmUgQk9PU1RfUFBfREVD
XzIxNyAyMTYKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yMTggMjE3Ci0jIGRlZmluZSBCT09TVF9Q
UF9ERUNfMjE5IDIxOAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzIyMCAyMTkKLSMgZGVmaW5lIEJP
T1NUX1BQX0RFQ18yMjEgMjIwCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMjIyIDIyMQotIyBkZWZp
bmUgQk9PU1RfUFBfREVDXzIyMyAyMjIKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yMjQgMjIzCi0j
IGRlZmluZSBCT09TVF9QUF9ERUNfMjI1IDIyNAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzIyNiAy
MjUKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yMjcgMjI2Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNf
MjI4IDIyNwotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzIyOSAyMjgKLSMgZGVmaW5lIEJPT1NUX1BQ
X0RFQ18yMzAgMjI5Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMjMxIDIzMAotIyBkZWZpbmUgQk9P
U1RfUFBfREVDXzIzMiAyMzEKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yMzMgMjMyCi0jIGRlZmlu
ZSBCT09TVF9QUF9ERUNfMjM0IDIzMwotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzIzNSAyMzQKLSMg
ZGVmaW5lIEJPT1NUX1BQX0RFQ18yMzYgMjM1Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMjM3IDIz
NgotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzIzOCAyMzcKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18y
MzkgMjM4Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMjQwIDIzOQotIyBkZWZpbmUgQk9PU1RfUFBf
REVDXzI0MSAyNDAKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yNDIgMjQxCi0jIGRlZmluZSBCT09T
VF9QUF9ERUNfMjQzIDI0MgotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzI0NCAyNDMKLSMgZGVmaW5l
IEJPT1NUX1BQX0RFQ18yNDUgMjQ0Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMjQ2IDI0NQotIyBk
ZWZpbmUgQk9PU1RfUFBfREVDXzI0NyAyNDYKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yNDggMjQ3
Ci0jIGRlZmluZSBCT09TVF9QUF9ERUNfMjQ5IDI0OAotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzI1
MCAyNDkKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yNTEgMjUwCi0jIGRlZmluZSBCT09TVF9QUF9E
RUNfMjUyIDI1MQotIyBkZWZpbmUgQk9PU1RfUFBfREVDXzI1MyAyNTIKLSMgZGVmaW5lIEJPT1NU
X1BQX0RFQ18yNTQgMjUzCi0jIGRlZmluZSBCT09TVF9QUF9ERUNfMjU1IDI1NAotIyBkZWZpbmUg
Qk9PU1RfUFBfREVDXzI1NiAyNTUKLSMgZGVmaW5lIEJPT1NUX1BQX0RFQ18yNTcgMjU2Ci0jCi0j
IGVuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9wcmVwcm9jZXNzb3IvYXJpdGhtZXRpYy9kZXRhaWwvZGl2X2Jhc2UuaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0
aWMvZGV0YWlsL2Rpdl9iYXNlLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA2
NjMyYTNkZWU2MTdiMjAwNzYyNmRlMmEyNzgyZWJhNmI5YjlmOS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvYXJpdGhtZXRpYy9kZXRhaWwvZGl2X2Jhc2UuaHBw
CisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotIyAvKiBDb3B5cmlnaHQgKEMpIDIwMDEK
LSMgICogSG91c2VtYXJxdWUgT3kKLSMgICogaHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20KLSMg
ICoKLSMgICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZl
cnNpb24gMS4wLiAoU2VlCi0jICAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBv
ciBjb3B5IGF0Ci0jICAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSMg
ICovCi0jCi0jIC8qIFJldmlzZWQgYnkgUGF1bCBNZW5zb25pZGVzICgyMDAyKSAqLwotIwotIyAv
KiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24uICovCi0j
Ci0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfQVJJVEhNRVRJQ19ERVRBSUxfRElWX0JBU0Vf
SFBQCi0jIGRlZmluZSBCT09TVF9QUkVQUk9DRVNTT1JfQVJJVEhNRVRJQ19ERVRBSUxfRElWX0JB
U0VfSFBQCi0jCi0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2luYy5o
cHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL3N1Yi5ocHA+Ci0j
IGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb21wYXJpc29uL2xlc3NfZXF1YWwuaHBwPgot
IyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29uZmlnL2NvbmZpZy5ocHA+Ci0jIGluY2x1
ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb250cm9sL3doaWxlLmhwcD4KLSMgaW5jbHVkZSA8Ym9v
c3QvcHJlcHJvY2Vzc29yL3R1cGxlL2VsZW0uaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9j
ZXNzb3IvdHVwbGUvcmVtLmhwcD4KLSMKLSMgLyogQk9PU1RfUFBfRElWX0JBU0UgKi8KLSMKLSMg
aWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX0VERygpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9ESVZfQkFTRSh4LCB5KSBCT09TVF9QUF9XSElMRShCT09TVF9QUF9E
SVZfQkFTRV9QLCBCT09TVF9QUF9ESVZfQkFTRV9PLCAoMCwgeCwgeSkpCi0jIGVsc2UKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX0RJVl9CQVNFKHgsIHkpIEJPT1NUX1BQX0RJVl9CQVNFX0koeCwgeSkK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX0RJVl9CQVNFX0koeCwgeSkgQk9PU1RfUFBfV0hJTEUoQk9P
U1RfUFBfRElWX0JBU0VfUCwgQk9PU1RfUFBfRElWX0JBU0VfTywgKDAsIHgsIHkpKQotIyBlbmRp
ZgotIwotIyBpZiBCT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19TVFJJ
Q1QoKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfRElWX0JBU0VfUChkLCByeHkpIEJPT1NUX1BQX0RJ
Vl9CQVNFX1BfSU0oZCwgQk9PU1RfUFBfVFVQTEVfUkVNXzMgcnh5KQotIyAgICBkZWZpbmUgQk9P
U1RfUFBfRElWX0JBU0VfUF9JTShkLCBpbSkgQk9PU1RfUFBfRElWX0JBU0VfUF9JKGQsIGltKQot
IyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9QUF9ESVZfQkFTRV9QKGQsIHJ4eSkgQk9PU1RfUFBf
RElWX0JBU0VfUF9JKGQsIEJPT1NUX1BQX1RVUExFX0VMRU0oMywgMCwgcnh5KSwgQk9PU1RfUFBf
VFVQTEVfRUxFTSgzLCAxLCByeHkpLCBCT09TVF9QUF9UVVBMRV9FTEVNKDMsIDIsIHJ4eSkpCi0j
IGVuZGlmCi0jCi0jIGRlZmluZSBCT09TVF9QUF9ESVZfQkFTRV9QX0koZCwgciwgeCwgeSkgQk9P
U1RfUFBfTEVTU19FUVVBTF9EKGQsIHksIHgpCi0jCi0jIGlmIEJPT1NUX1BQX0NPTkZJR19GTEFH
UygpICYgQk9PU1RfUFBfQ09ORklHX1NUUklDVCgpCi0jICAgIGRlZmluZSBCT09TVF9QUF9ESVZf
QkFTRV9PKGQsIHJ4eSkgQk9PU1RfUFBfRElWX0JBU0VfT19JTShkLCBCT09TVF9QUF9UVVBMRV9S
RU1fMyByeHkpCi0jICAgIGRlZmluZSBCT09TVF9QUF9ESVZfQkFTRV9PX0lNKGQsIGltKSBCT09T
VF9QUF9ESVZfQkFTRV9PX0koZCwgaW0pCi0jIGVsc2UKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0RJ
Vl9CQVNFX08oZCwgcnh5KSBCT09TVF9QUF9ESVZfQkFTRV9PX0koZCwgQk9PU1RfUFBfVFVQTEVf
RUxFTSgzLCAwLCByeHkpLCBCT09TVF9QUF9UVVBMRV9FTEVNKDMsIDEsIHJ4eSksIEJPT1NUX1BQ
X1RVUExFX0VMRU0oMywgMiwgcnh5KSkKLSMgZW5kaWYKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX0RJ
Vl9CQVNFX09fSShkLCByLCB4LCB5KSAoQk9PU1RfUFBfSU5DKHIpLCBCT09TVF9QUF9TVUJfRChk
LCB4LCB5KSwgeSkKLSMKLSMgLyogQk9PU1RfUFBfRElWX0JBU0VfRCAqLwotIwotIyBpZiB+Qk9P
U1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdfRURHKCkKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX0RJVl9CQVNFX0QoZCwgeCwgeSkgQk9PU1RfUFBfV0hJTEVfICMjIGQoQk9PU1Rf
UFBfRElWX0JBU0VfUCwgQk9PU1RfUFBfRElWX0JBU0VfTywgKDAsIHgsIHkpKQotIyBlbHNlCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9ESVZfQkFTRV9EKGQsIHgsIHkpIEJPT1NUX1BQX0RJVl9CQVNF
X0RfSShkLCB4LCB5KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfRElWX0JBU0VfRF9JKGQsIHgsIHkp
IEJPT1NUX1BQX1dISUxFXyAjIyBkKEJPT1NUX1BQX0RJVl9CQVNFX1AsIEJPT1NUX1BQX0RJVl9C
QVNFX08sICgwLCB4LCB5KSkKLSMgZW5kaWYKLSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1l
dGljL2luYy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9w
cmVwcm9jZXNzb3IvYXJpdGhtZXRpYy9pbmMuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxNTk3YWI4NWMzMzgzZjg0YjAzMzY1MDdlMWM1YzNiMWYyNmQ1ODhjLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2luYy5ocHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotIyAvKiBDb3B5cmlnaHQgKEMpIDIwMDEKLSMg
ICogSG91c2VtYXJxdWUgT3kKLSMgICogaHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20KLSMgICoK
LSMgICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNp
b24gMS4wLiAoU2VlCi0jICAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0Ci0jICAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSMgICov
Ci0jCi0jIC8qIFJldmlzZWQgYnkgUGF1bCBNZW5zb25pZGVzICgyMDAyKSAqLwotIwotIyAvKiBT
ZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24uICovCi0jCi0j
IGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfQVJJVEhNRVRJQ19JTkNfSFBQCi0jIGRlZmluZSBC
T09TVF9QUkVQUk9DRVNTT1JfQVJJVEhNRVRJQ19JTkNfSFBQCi0jCi0jIGluY2x1ZGUgPGJvb3N0
L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcD4KLSMKLSMgLyogQk9PU1RfUFBfSU5DICov
Ci0jCi0jIGlmIH5CT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19NV0ND
KCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0lOQyh4KSBCT09TVF9QUF9JTkNfSSh4KQotIyBlbHNl
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9JTkMoeCkgQk9PU1RfUFBfSU5DX09PKCh4KSkKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX0lOQ19PTyhwYXIpIEJPT1NUX1BQX0lOQ19JICMjIHBhcgotIyBlbmRp
ZgotIwotIyBkZWZpbmUgQk9PU1RfUFBfSU5DX0koeCkgQk9PU1RfUFBfSU5DXyAjIyB4Ci0jCi0j
IGRlZmluZSBCT09TVF9QUF9JTkNfMCAxCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMSAyCi0jIGRl
ZmluZSBCT09TVF9QUF9JTkNfMiAzCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMyA0Ci0jIGRlZmlu
ZSBCT09TVF9QUF9JTkNfNCA1Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfNSA2Ci0jIGRlZmluZSBC
T09TVF9QUF9JTkNfNiA3Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfNyA4Ci0jIGRlZmluZSBCT09T
VF9QUF9JTkNfOCA5Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfOSAxMAotIyBkZWZpbmUgQk9PU1Rf
UFBfSU5DXzEwIDExCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTEgMTIKLSMgZGVmaW5lIEJPT1NU
X1BQX0lOQ18xMiAxMwotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzEzIDE0Ci0jIGRlZmluZSBCT09T
VF9QUF9JTkNfMTQgMTUKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xNSAxNgotIyBkZWZpbmUgQk9P
U1RfUFBfSU5DXzE2IDE3Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTcgMTgKLSMgZGVmaW5lIEJP
T1NUX1BQX0lOQ18xOCAxOQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzE5IDIwCi0jIGRlZmluZSBC
T09TVF9QUF9JTkNfMjAgMjEKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18yMSAyMgotIyBkZWZpbmUg
Qk9PU1RfUFBfSU5DXzIyIDIzCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMjMgMjQKLSMgZGVmaW5l
IEJPT1NUX1BQX0lOQ18yNCAyNQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzI1IDI2Ci0jIGRlZmlu
ZSBCT09TVF9QUF9JTkNfMjYgMjcKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18yNyAyOAotIyBkZWZp
bmUgQk9PU1RfUFBfSU5DXzI4IDI5Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMjkgMzAKLSMgZGVm
aW5lIEJPT1NUX1BQX0lOQ18zMCAzMQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzMxIDMyCi0jIGRl
ZmluZSBCT09TVF9QUF9JTkNfMzIgMzMKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18zMyAzNAotIyBk
ZWZpbmUgQk9PU1RfUFBfSU5DXzM0IDM1Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMzUgMzYKLSMg
ZGVmaW5lIEJPT1NUX1BQX0lOQ18zNiAzNwotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzM3IDM4Ci0j
IGRlZmluZSBCT09TVF9QUF9JTkNfMzggMzkKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18zOSA0MAot
IyBkZWZpbmUgQk9PU1RfUFBfSU5DXzQwIDQxCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfNDEgNDIK
LSMgZGVmaW5lIEJPT1NUX1BQX0lOQ180MiA0MwotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzQzIDQ0
Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfNDQgNDUKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ180NSA0
NgotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzQ2IDQ3Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfNDcg
NDgKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ180OCA0OQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzQ5
IDUwCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfNTAgNTEKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ181
MSA1MgotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzUyIDUzCi0jIGRlZmluZSBCT09TVF9QUF9JTkNf
NTMgNTQKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ181NCA1NQotIyBkZWZpbmUgQk9PU1RfUFBfSU5D
XzU1IDU2Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfNTYgNTcKLSMgZGVmaW5lIEJPT1NUX1BQX0lO
Q181NyA1OAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzU4IDU5Ci0jIGRlZmluZSBCT09TVF9QUF9J
TkNfNTkgNjAKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ182MCA2MQotIyBkZWZpbmUgQk9PU1RfUFBf
SU5DXzYxIDYyCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfNjIgNjMKLSMgZGVmaW5lIEJPT1NUX1BQ
X0lOQ182MyA2NAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzY0IDY1Ci0jIGRlZmluZSBCT09TVF9Q
UF9JTkNfNjUgNjYKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ182NiA2NwotIyBkZWZpbmUgQk9PU1Rf
UFBfSU5DXzY3IDY4Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfNjggNjkKLSMgZGVmaW5lIEJPT1NU
X1BQX0lOQ182OSA3MAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzcwIDcxCi0jIGRlZmluZSBCT09T
VF9QUF9JTkNfNzEgNzIKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ183MiA3MwotIyBkZWZpbmUgQk9P
U1RfUFBfSU5DXzczIDc0Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfNzQgNzUKLSMgZGVmaW5lIEJP
T1NUX1BQX0lOQ183NSA3NgotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzc2IDc3Ci0jIGRlZmluZSBC
T09TVF9QUF9JTkNfNzcgNzgKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ183OCA3OQotIyBkZWZpbmUg
Qk9PU1RfUFBfSU5DXzc5IDgwCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfODAgODEKLSMgZGVmaW5l
IEJPT1NUX1BQX0lOQ184MSA4MgotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzgyIDgzCi0jIGRlZmlu
ZSBCT09TVF9QUF9JTkNfODMgODQKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ184NCA4NQotIyBkZWZp
bmUgQk9PU1RfUFBfSU5DXzg1IDg2Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfODYgODcKLSMgZGVm
aW5lIEJPT1NUX1BQX0lOQ184NyA4OAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzg4IDg5Ci0jIGRl
ZmluZSBCT09TVF9QUF9JTkNfODkgOTAKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ185MCA5MQotIyBk
ZWZpbmUgQk9PU1RfUFBfSU5DXzkxIDkyCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfOTIgOTMKLSMg
ZGVmaW5lIEJPT1NUX1BQX0lOQ185MyA5NAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzk0IDk1Ci0j
IGRlZmluZSBCT09TVF9QUF9JTkNfOTUgOTYKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ185NiA5Nwot
IyBkZWZpbmUgQk9PU1RfUFBfSU5DXzk3IDk4Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfOTggOTkK
LSMgZGVmaW5lIEJPT1NUX1BQX0lOQ185OSAxMDAKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xMDAg
MTAxCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTAxIDEwMgotIyBkZWZpbmUgQk9PU1RfUFBfSU5D
XzEwMiAxMDMKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xMDMgMTA0Ci0jIGRlZmluZSBCT09TVF9Q
UF9JTkNfMTA0IDEwNQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzEwNSAxMDYKLSMgZGVmaW5lIEJP
T1NUX1BQX0lOQ18xMDYgMTA3Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTA3IDEwOAotIyBkZWZp
bmUgQk9PU1RfUFBfSU5DXzEwOCAxMDkKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xMDkgMTEwCi0j
IGRlZmluZSBCT09TVF9QUF9JTkNfMTEwIDExMQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzExMSAx
MTIKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xMTIgMTEzCi0jIGRlZmluZSBCT09TVF9QUF9JTkNf
MTEzIDExNAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzExNCAxMTUKLSMgZGVmaW5lIEJPT1NUX1BQ
X0lOQ18xMTUgMTE2Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTE2IDExNwotIyBkZWZpbmUgQk9P
U1RfUFBfSU5DXzExNyAxMTgKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xMTggMTE5Ci0jIGRlZmlu
ZSBCT09TVF9QUF9JTkNfMTE5IDEyMAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzEyMCAxMjEKLSMg
ZGVmaW5lIEJPT1NUX1BQX0lOQ18xMjEgMTIyCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTIyIDEy
MwotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzEyMyAxMjQKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18x
MjQgMTI1Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTI1IDEyNgotIyBkZWZpbmUgQk9PU1RfUFBf
SU5DXzEyNiAxMjcKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xMjcgMTI4Ci0jIGRlZmluZSBCT09T
VF9QUF9JTkNfMTI4IDEyOQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzEyOSAxMzAKLSMgZGVmaW5l
IEJPT1NUX1BQX0lOQ18xMzAgMTMxCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTMxIDEzMgotIyBk
ZWZpbmUgQk9PU1RfUFBfSU5DXzEzMiAxMzMKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xMzMgMTM0
Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTM0IDEzNQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzEz
NSAxMzYKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xMzYgMTM3Ci0jIGRlZmluZSBCT09TVF9QUF9J
TkNfMTM3IDEzOAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzEzOCAxMzkKLSMgZGVmaW5lIEJPT1NU
X1BQX0lOQ18xMzkgMTQwCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTQwIDE0MQotIyBkZWZpbmUg
Qk9PU1RfUFBfSU5DXzE0MSAxNDIKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xNDIgMTQzCi0jIGRl
ZmluZSBCT09TVF9QUF9JTkNfMTQzIDE0NAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzE0NCAxNDUK
LSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xNDUgMTQ2Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTQ2
IDE0NwotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzE0NyAxNDgKLSMgZGVmaW5lIEJPT1NUX1BQX0lO
Q18xNDggMTQ5Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTQ5IDE1MAotIyBkZWZpbmUgQk9PU1Rf
UFBfSU5DXzE1MCAxNTEKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xNTEgMTUyCi0jIGRlZmluZSBC
T09TVF9QUF9JTkNfMTUyIDE1MwotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzE1MyAxNTQKLSMgZGVm
aW5lIEJPT1NUX1BQX0lOQ18xNTQgMTU1Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTU1IDE1Ngot
IyBkZWZpbmUgQk9PU1RfUFBfSU5DXzE1NiAxNTcKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xNTcg
MTU4Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTU4IDE1OQotIyBkZWZpbmUgQk9PU1RfUFBfSU5D
XzE1OSAxNjAKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xNjAgMTYxCi0jIGRlZmluZSBCT09TVF9Q
UF9JTkNfMTYxIDE2MgotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzE2MiAxNjMKLSMgZGVmaW5lIEJP
T1NUX1BQX0lOQ18xNjMgMTY0Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTY0IDE2NQotIyBkZWZp
bmUgQk9PU1RfUFBfSU5DXzE2NSAxNjYKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xNjYgMTY3Ci0j
IGRlZmluZSBCT09TVF9QUF9JTkNfMTY3IDE2OAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzE2OCAx
NjkKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xNjkgMTcwCi0jIGRlZmluZSBCT09TVF9QUF9JTkNf
MTcwIDE3MQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzE3MSAxNzIKLSMgZGVmaW5lIEJPT1NUX1BQ
X0lOQ18xNzIgMTczCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTczIDE3NAotIyBkZWZpbmUgQk9P
U1RfUFBfSU5DXzE3NCAxNzUKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xNzUgMTc2Ci0jIGRlZmlu
ZSBCT09TVF9QUF9JTkNfMTc2IDE3NwotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzE3NyAxNzgKLSMg
ZGVmaW5lIEJPT1NUX1BQX0lOQ18xNzggMTc5Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTc5IDE4
MAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzE4MCAxODEKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18x
ODEgMTgyCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTgyIDE4MwotIyBkZWZpbmUgQk9PU1RfUFBf
SU5DXzE4MyAxODQKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xODQgMTg1Ci0jIGRlZmluZSBCT09T
VF9QUF9JTkNfMTg1IDE4NgotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzE4NiAxODcKLSMgZGVmaW5l
IEJPT1NUX1BQX0lOQ18xODcgMTg4Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTg4IDE4OQotIyBk
ZWZpbmUgQk9PU1RfUFBfSU5DXzE4OSAxOTAKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xOTAgMTkx
Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTkxIDE5MgotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzE5
MiAxOTMKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xOTMgMTk0Ci0jIGRlZmluZSBCT09TVF9QUF9J
TkNfMTk0IDE5NQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzE5NSAxOTYKLSMgZGVmaW5lIEJPT1NU
X1BQX0lOQ18xOTYgMTk3Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMTk3IDE5OAotIyBkZWZpbmUg
Qk9PU1RfUFBfSU5DXzE5OCAxOTkKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18xOTkgMjAwCi0jIGRl
ZmluZSBCT09TVF9QUF9JTkNfMjAwIDIwMQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzIwMSAyMDIK
LSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18yMDIgMjAzCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMjAz
IDIwNAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzIwNCAyMDUKLSMgZGVmaW5lIEJPT1NUX1BQX0lO
Q18yMDUgMjA2Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMjA2IDIwNwotIyBkZWZpbmUgQk9PU1Rf
UFBfSU5DXzIwNyAyMDgKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18yMDggMjA5Ci0jIGRlZmluZSBC
T09TVF9QUF9JTkNfMjA5IDIxMAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzIxMCAyMTEKLSMgZGVm
aW5lIEJPT1NUX1BQX0lOQ18yMTEgMjEyCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMjEyIDIxMwot
IyBkZWZpbmUgQk9PU1RfUFBfSU5DXzIxMyAyMTQKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18yMTQg
MjE1Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMjE1IDIxNgotIyBkZWZpbmUgQk9PU1RfUFBfSU5D
XzIxNiAyMTcKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18yMTcgMjE4Ci0jIGRlZmluZSBCT09TVF9Q
UF9JTkNfMjE4IDIxOQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzIxOSAyMjAKLSMgZGVmaW5lIEJP
T1NUX1BQX0lOQ18yMjAgMjIxCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMjIxIDIyMgotIyBkZWZp
bmUgQk9PU1RfUFBfSU5DXzIyMiAyMjMKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18yMjMgMjI0Ci0j
IGRlZmluZSBCT09TVF9QUF9JTkNfMjI0IDIyNQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzIyNSAy
MjYKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18yMjYgMjI3Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNf
MjI3IDIyOAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzIyOCAyMjkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0lOQ18yMjkgMjMwCi0jIGRlZmluZSBCT09TVF9QUF9JTkNfMjMwIDIzMQotIyBkZWZpbmUgQk9P
U1RfUFBfSU5DXzIzMSAyMzIKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18yMzIgMjMzCi0jIGRlZmlu
ZSBCT09TVF9QUF9JTkNfMjMzIDIzNAotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzIzNCAyMzUKLSMg
ZGVmaW5lIEJPT1NUX1BQX0lOQ18yMzUgMjM2Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMjM2IDIz
NwotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzIzNyAyMzgKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18y
MzggMjM5Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMjM5IDI0MAotIyBkZWZpbmUgQk9PU1RfUFBf
SU5DXzI0MCAyNDEKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18yNDEgMjQyCi0jIGRlZmluZSBCT09T
VF9QUF9JTkNfMjQyIDI0MwotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzI0MyAyNDQKLSMgZGVmaW5l
IEJPT1NUX1BQX0lOQ18yNDQgMjQ1Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMjQ1IDI0NgotIyBk
ZWZpbmUgQk9PU1RfUFBfSU5DXzI0NiAyNDcKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18yNDcgMjQ4
Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMjQ4IDI0OQotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzI0
OSAyNTAKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18yNTAgMjUxCi0jIGRlZmluZSBCT09TVF9QUF9J
TkNfMjUxIDI1MgotIyBkZWZpbmUgQk9PU1RfUFBfSU5DXzI1MiAyNTMKLSMgZGVmaW5lIEJPT1NU
X1BQX0lOQ18yNTMgMjU0Ci0jIGRlZmluZSBCT09TVF9QUF9JTkNfMjU0IDI1NQotIyBkZWZpbmUg
Qk9PU1RfUFBfSU5DXzI1NSAyNTYKLSMgZGVmaW5lIEJPT1NUX1BQX0lOQ18yNTYgMjU2Ci0jCi0j
IGVuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9wcmVwcm9jZXNzb3IvYXJpdGhtZXRpYy9tb2QuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvbW9kLmhwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI0ODlkMWRiZGQ2NDgwYTM0MTE4OWIzZjNl
YTBjNTQxM2U5OTZkOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNz
b3IvYXJpdGhtZXRpYy9tb2QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotIyAv
KiBDb3B5cmlnaHQgKEMpIDIwMDEKLSMgICogSG91c2VtYXJxdWUgT3kKLSMgICogaHR0cDovL3d3
dy5ob3VzZW1hcnF1ZS5jb20KLSMgICoKLSMgICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqIGFjY29tcGFueWluZyBm
aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkKLSMgICovCi0jCi0jIC8qIFJldmlzZWQgYnkgUGF1bCBNZW5zb25p
ZGVzICgyMDAyKSAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3Qg
cmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfQVJJVEhN
RVRJQ19NT0RfSFBQCi0jIGRlZmluZSBCT09TVF9QUkVQUk9DRVNTT1JfQVJJVEhNRVRJQ19NT0Rf
SFBQCi0jCi0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2RldGFpbC9k
aXZfYmFzZS5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmln
LmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3R1cGxlL2VsZW0uaHBwPgotIwot
IyAvKiBCT09TVF9QUF9NT0QgKi8KLSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYg
Qk9PU1RfUFBfQ09ORklHX0VERygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9NT0QoeCwgeSkgQk9P
U1RfUFBfVFVQTEVfRUxFTSgzLCAxLCBCT09TVF9QUF9ESVZfQkFTRSh4LCB5KSkKLSMgZWxzZQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfTU9EKHgsIHkpIEJPT1NUX1BQX01PRF9JKHgsIHkpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9NT0RfSSh4LCB5KSBCT09TVF9QUF9UVVBMRV9FTEVNKDMsIDEsIEJP
T1NUX1BQX0RJVl9CQVNFKHgsIHkpKQotIyBlbmRpZgotIwotIyAvKiBCT09TVF9QUF9NT0RfRCAq
LwotIwotIyBpZiB+Qk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdfRURH
KCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX01PRF9EKGQsIHgsIHkpIEJPT1NUX1BQX1RVUExFX0VM
RU0oMywgMSwgQk9PU1RfUFBfRElWX0JBU0VfRChkLCB4LCB5KSkKLSMgZWxzZQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfTU9EX0QoZCwgeCwgeSkgQk9PU1RfUFBfTU9EX0RfSShkLCB4LCB5KQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfTU9EX0RfSShkLCB4LCB5KSBCT09TVF9QUF9UVVBMRV9FTEVNKDMs
IDEsIEJPT1NUX1BQX0RJVl9CQVNFX0QoZCwgeCwgeSkpCi0jIGVuZGlmCi0jCi0jIGVuZGlmCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVw
cm9jZXNzb3IvYXJpdGhtZXRpYy9zdWIuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvc3ViLmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTI2MmNkYWZmOGM4NDgzMDc0MjBhYTU5ZWFhZTBhYmM2OTFh
ZWFmMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvYXJpdGht
ZXRpYy9zdWIuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotIyAvKiBDb3B5cmln
aHQgKEMpIDIwMDEKLSMgICogSG91c2VtYXJxdWUgT3kKLSMgICogaHR0cDovL3d3dy5ob3VzZW1h
cnF1ZS5jb20KLSMgICoKLSMgICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkKLSMgICovCi0jCi0jIC8qIFJldmlzZWQgYnkgUGF1bCBNZW5zb25pZGVzICgyMDAy
KSAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZl
cnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfQVJJVEhNRVRJQ19TVUJf
SFBQCi0jIGRlZmluZSBCT09TVF9QUkVQUk9DRVNTT1JfQVJJVEhNRVRJQ19TVUJfSFBQCi0jCi0j
IGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2RlYy5ocHA+Ci0jIGluY2x1
ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcD4KLSMgaW5jbHVkZSA8Ym9v
c3QvcHJlcHJvY2Vzc29yL2NvbnRyb2wvd2hpbGUuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVw
cm9jZXNzb3IvdHVwbGUvZWxlbS5ocHA+Ci0jCi0jIC8qIEJPT1NUX1BQX1NVQiAqLwotIwotIyBp
ZiB+Qk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdfRURHKCkKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX1NVQih4LCB5KSBCT09TVF9QUF9UVVBMRV9FTEVNKDIsIDAsIEJPT1NU
X1BQX1dISUxFKEJPT1NUX1BQX1NVQl9QLCBCT09TVF9QUF9TVUJfTywgKHgsIHkpKSkKLSMgZWxz
ZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU1VCKHgsIHkpIEJPT1NUX1BQX1NVQl9JKHgsIHkpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TVUJfSSh4LCB5KSBCT09TVF9QUF9UVVBMRV9FTEVNKDIsIDAs
IEJPT1NUX1BQX1dISUxFKEJPT1NUX1BQX1NVQl9QLCBCT09TVF9QUF9TVUJfTywgKHgsIHkpKSkK
LSMgZW5kaWYKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1NVQl9QKGQsIHh5KSBCT09TVF9QUF9UVVBM
RV9FTEVNKDIsIDEsIHh5KQotIwotIyBpZiB+Qk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09T
VF9QUF9DT05GSUdfTVdDQygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TVUJfTyhkLCB4eSkgQk9P
U1RfUFBfU1VCX09fSSB4eQotIyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9QUF9TVUJfTyhkLCB4
eSkgQk9PU1RfUFBfU1VCX09fSShCT09TVF9QUF9UVVBMRV9FTEVNKDIsIDAsIHh5KSwgQk9PU1Rf
UFBfVFVQTEVfRUxFTSgyLCAxLCB4eSkpCi0jIGVuZGlmCi0jCi0jIGRlZmluZSBCT09TVF9QUF9T
VUJfT19JKHgsIHkpIChCT09TVF9QUF9ERUMoeCksIEJPT1NUX1BQX0RFQyh5KSkKLSMKLSMgLyog
Qk9PU1RfUFBfU1VCX0QgKi8KLSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9P
U1RfUFBfQ09ORklHX0VERygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TVUJfRChkLCB4LCB5KSBC
T09TVF9QUF9UVVBMRV9FTEVNKDIsIDAsIEJPT1NUX1BQX1dISUxFXyAjIyBkKEJPT1NUX1BQX1NV
Ql9QLCBCT09TVF9QUF9TVUJfTywgKHgsIHkpKSkKLSMgZWxzZQotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfU1VCX0QoZCwgeCwgeSkgQk9PU1RfUFBfU1VCX0RfSShkLCB4LCB5KQotIyAgICBkZWZpbmUg
Qk9PU1RfUFBfU1VCX0RfSShkLCB4LCB5KSBCT09TVF9QUF9UVVBMRV9FTEVNKDIsIDAsIEJPT1NU
X1BQX1dISUxFXyAjIyBkKEJPT1NUX1BQX1NVQl9QLCBCT09TVF9QUF9TVUJfTywgKHgsIHkpKSkK
LSMgZW5kaWYKLSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9hcnJheS9kYXRhLmhwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9hcnJheS9kYXRh
LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBjOTI2YTc1MGUwMTJmYjAwMDVk
YzQ2OGNhZjQwNjE5OGIzNDY5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVw
cm9jZXNzb3IvYXJyYXkvZGF0YS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0j
IC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCi0jICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0jICAqICAgICAo
QykgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyLgotIyAgKiAgICAgRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAq
ICAgICBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiAg
ICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotIyAgKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKgotIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1Rf
UFJFUFJPQ0VTU09SX0FSUkFZX0RBVEFfSFBQCi0jIGRlZmluZSBCT09TVF9QUkVQUk9DRVNTT1Jf
QVJSQVlfREFUQV9IUFAKLSMKLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbmZpZy9j
b25maWcuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUvZWxlbS5ocHA+
Ci0jCi0jIC8qIEJPT1NUX1BQX0FSUkFZX0RBVEEgKi8KLSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJ
R19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX0VERygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9B
UlJBWV9EQVRBKGFycmF5KSBCT09TVF9QUF9UVVBMRV9FTEVNKDIsIDEsIGFycmF5KQotIyBlbHNl
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9BUlJBWV9EQVRBKGFycmF5KSBCT09TVF9QUF9BUlJBWV9E
QVRBX0koYXJyYXkpCi0jICAgIGRlZmluZSBCT09TVF9QUF9BUlJBWV9EQVRBX0koYXJyYXkpIEJP
T1NUX1BQX0FSUkFZX0RBVEFfSUkgYXJyYXkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0FSUkFZX0RB
VEFfSUkoc2l6ZSwgZGF0YSkgZGF0YQotIyBlbmRpZgotIwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2Fy
cmF5L2VsZW0uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
cHJlcHJvY2Vzc29yL2FycmF5L2VsZW0uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxMDViYTI0ZTMxZDYxZmMxOTE0MTcxNTYyZWM1MGU5ODc3MmUwNjgwLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9hcnJheS9lbGVtLmhwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDI5ICswLDAgQEAKLSMgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSMgICogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICoKLSMgICogICAgIChDKSBDb3B5cmlnaHQgUGF1bCBNZW5zb25pZGVzIDIwMDIu
Ci0jICAqICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuIChTZWUKLSMgICogICAgIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8w
LnR4dCBvciBjb3B5IGF0Ci0jICAqICAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQpCi0jICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0jICAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwot
IwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24u
ICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfQVJSQVlfRUxFTV9IUFAKLSMgZGVm
aW5lIEJPT1NUX1BSRVBST0NFU1NPUl9BUlJBWV9FTEVNX0hQUAotIwotIyBpbmNsdWRlIDxib29z
dC9wcmVwcm9jZXNzb3IvYXJyYXkvZGF0YS5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nl
c3Nvci9hcnJheS9zaXplLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbmZp
Zy9jb25maWcuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUvZWxlbS5o
cHA+Ci0jCi0jIC8qIEJPT1NUX1BQX0FSUkFZX0VMRU0gKi8KLSMKLSMgaWYgfkJPT1NUX1BQX0NP
TkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX0VERygpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9BUlJBWV9FTEVNKGksIGFycmF5KSBCT09TVF9QUF9UVVBMRV9FTEVNKEJPT1NUX1BQX0FSUkFZ
X1NJWkUoYXJyYXkpLCBpLCBCT09TVF9QUF9BUlJBWV9EQVRBKGFycmF5KSkKLSMgZWxzZQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfQVJSQVlfRUxFTShpLCBhcnJheSkgQk9PU1RfUFBfQVJSQVlfRUxF
TV9JKGksIGFycmF5KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfQVJSQVlfRUxFTV9JKGksIGFycmF5
KSBCT09TVF9QUF9UVVBMRV9FTEVNKEJPT1NUX1BQX0FSUkFZX1NJWkUoYXJyYXkpLCBpLCBCT09T
VF9QUF9BUlJBWV9EQVRBKGFycmF5KSkKLSMgZW5kaWYKLSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9h
cnJheS9zaXplLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3ByZXByb2Nlc3Nvci9hcnJheS9zaXplLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggM2YzNzBlZTQxYjg1ZGE5OTU1ZmUxZTZjNzY1MDdiOWE4MThiNWFkNi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvYXJyYXkvc2l6ZS5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSwyOCArMCwwIEBACi0jIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqCi0jICAqICAgICAoQykgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAy
LgotIyAgKiAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLiAoU2VlCi0jICAqICAgICBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotIyAgKiAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8x
XzAudHh0KQotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K
LSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9u
LiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX0FSUkFZX1NJWkVfSFBQCi0jIGRl
ZmluZSBCT09TVF9QUkVQUk9DRVNTT1JfQVJSQVlfU0laRV9IUFAKLSMKLSMgaW5jbHVkZSA8Ym9v
c3QvcHJlcHJvY2Vzc29yL2NvbmZpZy9jb25maWcuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVw
cm9jZXNzb3IvdHVwbGUvZWxlbS5ocHA+Ci0jCi0jIC8qIEJPT1NUX1BQX0FSUkFZX1NJWkUgKi8K
LSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX0VERygp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9BUlJBWV9TSVpFKGFycmF5KSBCT09TVF9QUF9UVVBMRV9F
TEVNKDIsIDAsIGFycmF5KQotIyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9QUF9BUlJBWV9TSVpF
KGFycmF5KSBCT09TVF9QUF9BUlJBWV9TSVpFX0koYXJyYXkpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9BUlJBWV9TSVpFX0koYXJyYXkpIEJPT1NUX1BQX0FSUkFZX1NJWkVfSUkgYXJyYXkKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX0FSUkFZX1NJWkVfSUkoc2l6ZSwgZGF0YSkgc2l6ZQotIyBlbmRpZgot
IwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTJhMzg5MjcwYzI3ZGE2ZWI2N2E4MjVkMmFlYjRiNTFhOWVhYmEwOS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcAorKysgL2Rl
di9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgLyogQ29weXJpZ2h0IChDKSAyMDAxCi0jICAqIEhv
dXNlbWFycXVlIE95Ci0jICAqIGh0dHA6Ly93d3cuaG91c2VtYXJxdWUuY29tCi0jICAqCi0jICAq
IERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4gKFNlZQotIyAgKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dAotIyAgKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqLwotIwot
IyAvKiBSZXZpc2VkIGJ5IFBhdWwgTWVuc29uaWRlcyAoMjAwMikgKi8KLSMKLSMgLyogU2VlIGh0
dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5k
ZWYgQk9PU1RfUFJFUFJPQ0VTU09SX0NBVF9IUFAKLSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NP
Ul9DQVRfSFBQCi0jCi0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmln
LmhwcD4KLSMKLSMgLyogQk9PU1RfUFBfQ0FUICovCi0jCi0jIGlmIH5CT09TVF9QUF9DT05GSUdf
RkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19NV0NDKCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0NB
VChhLCBiKSBCT09TVF9QUF9DQVRfSShhLCBiKQotIyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9DQVQoYSwgYikgQk9PU1RfUFBfQ0FUX09PKChhLCBiKSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X0NBVF9PTyhwYXIpIEJPT1NUX1BQX0NBVF9JICMjIHBhcgotIyBlbmRpZgotIwotIyBpZiAofkJP
T1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX01TVkMoKSkgfHwgKGRlZmlu
ZWQoX19JTlRFTF9DT01QSUxFUikgJiYgX19JTlRFTF9DT01QSUxFUiA+PSAxNzAwKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfQ0FUX0koYSwgYikgYSAjIyBiCi0jIGVsc2UKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX0NBVF9JKGEsIGIpIEJPT1NUX1BQX0NBVF9JSSh+LCBhICMjIGIpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9DQVRfSUkocCwgcmVzKSByZXMKLSMgZW5kaWYKLSMKLSMgZW5kaWYKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nl
c3Nvci9jb21tYV9pZi5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9wcmVwcm9jZXNzb3IvY29tbWFfaWYuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5Y2ViMDc5NTU1OGZhNmExYjA1NDAwZjMzNjY5OWNjNWNhNjZlYWI5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9jb21tYV9pZi5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxNyArMCwwIEBACi0jIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqCi0jICAqICAgICAoQykgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAy
LgotIyAgKiAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLiAoU2VlCi0jICAqICAgICBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotIyAgKiAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8x
XzAudHh0KQotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K
LSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9u
LiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX0NPTU1BX0lGX0hQUAotIyBkZWZp
bmUgQk9PU1RfUFJFUFJPQ0VTU09SX0NPTU1BX0lGX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9w
cmVwcm9jZXNzb3IvcHVuY3R1YXRpb24vY29tbWFfaWYuaHBwPgotIwotIyBlbmRpZgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vz
c29yL2NvbXBhcmlzb24vbGVzc19lcXVhbC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvY29tcGFyaXNvbi9sZXNzX2VxdWFsLmhwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMwMmQ1NDcwYWFmMjZhMmNlNWI0ZGVkYmJl
YTIwYzQwYzNhNmI1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNz
b3IvY29tcGFyaXNvbi9sZXNzX2VxdWFsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAg
QEAKLSMgLyogQ29weXJpZ2h0IChDKSAyMDAxCi0jICAqIEhvdXNlbWFycXVlIE95Ci0jICAqIGh0
dHA6Ly93d3cuaG91c2VtYXJxdWUuY29tCi0jICAqCi0jICAqIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqLwotIwotIyAvKiBSZXZpc2VkIGJ5IFBhdWwg
TWVuc29uaWRlcyAoMjAwMikgKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZv
ciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09S
X0NPTVBBUklTT05fTEVTU19FUVVBTF9IUFAKLSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NPUl9D
T01QQVJJU09OX0xFU1NfRVFVQUxfSFBQCi0jCi0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nv
ci9hcml0aG1ldGljL3N1Yi5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb25m
aWcvY29uZmlnLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2xvZ2ljYWwvbm90
LmhwcD4KLSMKLSMgLyogQk9PU1RfUFBfTEVTU19FUVVBTCAqLwotIwotIyBpZiB+Qk9PU1RfUFBf
Q09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdfRURHKCkKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX0xFU1NfRVFVQUwoeCwgeSkgQk9PU1RfUFBfTk9UKEJPT1NUX1BQX1NVQih4LCB5KSkKLSMg
ZWxzZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfTEVTU19FUVVBTCh4LCB5KSBCT09TVF9QUF9MRVNT
X0VRVUFMX0koeCwgeSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0xFU1NfRVFVQUxfSSh4LCB5KSBC
T09TVF9QUF9OT1QoQk9PU1RfUFBfU1VCKHgsIHkpKQotIyBlbmRpZgotIwotIyAvKiBCT09TVF9Q
UF9MRVNTX0VRVUFMX0QgKi8KLSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9P
U1RfUFBfQ09ORklHX0VERygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9MRVNTX0VRVUFMX0QoZCwg
eCwgeSkgQk9PU1RfUFBfTk9UKEJPT1NUX1BQX1NVQl9EKGQsIHgsIHkpKQotIyBlbHNlCi0jICAg
IGRlZmluZSBCT09TVF9QUF9MRVNTX0VRVUFMX0QoZCwgeCwgeSkgQk9PU1RfUFBfTEVTU19FUVVB
TF9EX0koZCwgeCwgeSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0xFU1NfRVFVQUxfRF9JKGQsIHgs
IHkpIEJPT1NUX1BQX05PVChCT09TVF9QUF9TVUJfRChkLCB4LCB5KSkKLSMgZW5kaWYKLSMKLSMg
ZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgwMTkwMzE0MWIwNDIyM2Q5OTYxN2ZjZDdmNmU5
ZDNjMGEwNGE0Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3Iv
Y29uZmlnL2NvbmZpZy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotIyAvKiAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgKEMpIENv
cHlyaWdodCBQYXVsIE1lbnNvbmlkZXMgMjAwMi0yMDExLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKgotIyAgKiAgICAgKEMpIENvcHlyaWdodCBFZHdhcmQgRGllbmVyIDIwMTEuICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgRGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlICAgICAgKgot
IyAgKiAgICAgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgICAg
ICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKgotIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLSMKLSMgLyogU2VlIGh0dHA6
Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYg
Qk9PU1RfUFJFUFJPQ0VTU09SX0NPTkZJR19DT05GSUdfSFBQCi0jIGRlZmluZSBCT09TVF9QUkVQ
Uk9DRVNTT1JfQ09ORklHX0NPTkZJR19IUFAKLSMKLSMgLyogQk9PU1RfUFBfQ09ORklHX0ZMQUdT
ICovCi0jCi0jIGRlZmluZSBCT09TVF9QUF9DT05GSUdfU1RSSUNUKCkgMHgwMDAxCi0jIGRlZmlu
ZSBCT09TVF9QUF9DT05GSUdfSURFQUwoKSAweDAwMDIKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX0NP
TkZJR19NU1ZDKCkgMHgwMDA0Ci0jIGRlZmluZSBCT09TVF9QUF9DT05GSUdfTVdDQygpIDB4MDAw
OAotIyBkZWZpbmUgQk9PU1RfUFBfQ09ORklHX0JDQygpIDB4MDAxMAotIyBkZWZpbmUgQk9PU1Rf
UFBfQ09ORklHX0VERygpIDB4MDAyMAotIyBkZWZpbmUgQk9PU1RfUFBfQ09ORklHX0RNQygpIDB4
MDA0MAotIwotIyBpZm5kZWYgQk9PU1RfUFBfQ09ORklHX0ZMQUdTCi0jICAgIGlmIGRlZmluZWQo
X19HQ0NYTUxfXykKLSMgICAgICAgIGRlZmluZSBCT09TVF9QUF9DT05GSUdfRkxBR1MoKSAoQk9P
U1RfUFBfQ09ORklHX1NUUklDVCgpKQotIyAgICBlbGlmIGRlZmluZWQoX19XQVZFX18pCi0jICAg
ICAgICBkZWZpbmUgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgKEJPT1NUX1BQX0NPTkZJR19TVFJJ
Q1QoKSkKLSMgICAgZWxpZiBkZWZpbmVkKF9fTVdFUktTX18pICYmIF9fTVdFUktTX18gPj0gMHgz
MjAwCi0jICAgICAgICBkZWZpbmUgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgKEJPT1NUX1BQX0NP
TkZJR19TVFJJQ1QoKSkKLSMgICAgZWxpZiBkZWZpbmVkKF9fRURHX18pIHx8IGRlZmluZWQoX19F
REdfVkVSU0lPTl9fKQotIyAgICAgICAgaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKGRlZmluZWQo
X19jbGFuZ19fKSB8fCBkZWZpbmVkKF9fSU5URUxMSVNFTlNFX18pIHx8IF9fRURHX1ZFUlNJT05f
XyA+PSAzMDgpCi0jICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX0NPTkZJR19GTEFHUygpIChC
T09TVF9QUF9DT05GSUdfTVNWQygpKQotIyAgICAgICAgZWxzZQotIyAgICAgICAgICAgIGRlZmlu
ZSBCT09TVF9QUF9DT05GSUdfRkxBR1MoKSAoQk9PU1RfUFBfQ09ORklHX0VERygpIHwgQk9PU1Rf
UFBfQ09ORklHX1NUUklDVCgpKQotIyAgICAgICAgZW5kaWYKLSMgICAgZWxpZiBkZWZpbmVkKF9f
TVdFUktTX18pCi0jICAgICAgICBkZWZpbmUgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgKEJPT1NU
X1BQX0NPTkZJR19NV0NDKCkpCi0jICAgIGVsaWYgZGVmaW5lZChfX0RNQ19fKQotIyAgICAgICAg
ZGVmaW5lIEJPT1NUX1BQX0NPTkZJR19GTEFHUygpIChCT09TVF9QUF9DT05GSUdfRE1DKCkpCi0j
ICAgIGVsaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmIF9fQk9STEFORENfXyA+PSAweDU4MQot
IyAgICAgICAgZGVmaW5lIEJPT1NUX1BQX0NPTkZJR19GTEFHUygpIChCT09TVF9QUF9DT05GSUdf
U1RSSUNUKCkpCi0jICAgIGVsaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19J
Qk1DX18pIHx8IGRlZmluZWQoX19JQk1DUFBfXykgfHwgZGVmaW5lZChfX1NVTlBST19DQykKLSMg
ICAgICAgIGRlZmluZSBCT09TVF9QUF9DT05GSUdfRkxBR1MoKSAoQk9PU1RfUFBfQ09ORklHX0JD
QygpKQotIyAgICBlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0jICAgICAgICBkZWZpbmUgQk9PU1Rf
UFBfQ09ORklHX0ZMQUdTKCkgKEJPT1NUX1BQX0NPTkZJR19NU1ZDKCkpCi0jICAgIGVsc2UKLSMg
ICAgICAgIGRlZmluZSBCT09TVF9QUF9DT05GSUdfRkxBR1MoKSAoQk9PU1RfUFBfQ09ORklHX1NU
UklDVCgpKQotIyAgICBlbmRpZgotIyBlbmRpZgotIwotIyAvKiBCT09TVF9QUF9DT05GSUdfRVhU
RU5ERURfTElORV9JTkZPICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUF9DT05GSUdfRVhURU5ERURf
TElORV9JTkZPCi0jICAgIGRlZmluZSBCT09TVF9QUF9DT05GSUdfRVhURU5ERURfTElORV9JTkZP
IDAKLSMgZW5kaWYKLSMKLSMgLyogQk9PU1RfUFBfQ09ORklHX0VSUk9SUyAqLwotIwotIyBpZm5k
ZWYgQk9PU1RfUFBfQ09ORklHX0VSUk9SUwotIyAgICBpZmRlZiBOREVCVUcKLSMgICAgICAgIGRl
ZmluZSBCT09TVF9QUF9DT05GSUdfRVJST1JTIDAKLSMgICAgZWxzZQotIyAgICAgICAgZGVmaW5l
IEJPT1NUX1BQX0NPTkZJR19FUlJPUlMgMQotIyAgICBlbmRpZgotIyBlbmRpZgotIwotIyAvKiBC
T09TVF9QUF9WQVJJQURJQ1MgKi8KLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDU19NU1ZD
IDAKLSMgaWYgIWRlZmluZWQgQk9PU1RfUFBfVkFSSUFESUNTCi0jICAgIC8qIHZhcmlhZGljIHN1
cHBvcnQgZXhwbGljaXRseSBkaXNhYmxlZCBmb3IgYWxsIHVudGVzdGVkIGNvbXBpbGVycyAqLwot
IyAgICBpZiBkZWZpbmVkIF9fR0NDWE1MX18gfHwgZGVmaW5lZCBfX0NVREFDQ19fIHx8IGRlZmlu
ZWQgX19QQVRIU0NBTEVfXyB8fCBkZWZpbmVkIF9fRE1DX18gfHwgZGVmaW5lZCBfX0NPREVHRUFS
Q19fIHx8IGRlZmluZWQgX19CT1JMQU5EQ19fIHx8IGRlZmluZWQgX19NV0VSS1NfXyB8fCAoIGRl
ZmluZWQgX19TVU5QUk9fQ0MgJiYgX19TVU5QUk9fQ0MgPCAweDUxMjAgKSB8fCBkZWZpbmVkIF9f
SFBfYUNDICYmICFkZWZpbmVkIF9fRURHX18gfHwgZGVmaW5lZCBfX01SQ19fIHx8IGRlZmluZWQg
X19TQ19fIHx8IGRlZmluZWQgX19JQk1DUFBfXyB8fCBkZWZpbmVkIF9fUEdJCi0jICAgICAgICBk
ZWZpbmUgQk9PU1RfUFBfVkFSSUFESUNTIDAKLSMgICAgLyogVkMrKyAoQy9DKyspIGFuZCBJbnRl
bCBDKysgQ29tcGlsZXIgPj0gMTcuMCB3aXRoIE1TVkMgKi8KLSMgICAgZWxpZiBkZWZpbmVkIF9N
U0NfVkVSICYmIF9NU0NfVkVSID49IDE0MDAgJiYgKGRlZmluZWQoX19jbGFuZ19fKSB8fCAhZGVm
aW5lZCBfX0VER19fIHx8IGRlZmluZWQoX19JTlRFTExJU0VOU0VfXykgfHwgZGVmaW5lZChfX0lO
VEVMX0NPTVBJTEVSKSAmJiBfX0lOVEVMX0NPTVBJTEVSID49IDE3MDApCi0jICAgICAgICBkZWZp
bmUgQk9PU1RfUFBfVkFSSUFESUNTIDEKLSMgICAgICAgIHVuZGVmIEJPT1NUX1BQX1ZBUklBRElD
U19NU1ZDCi0jICAgICAgICBkZWZpbmUgQk9PU1RfUFBfVkFSSUFESUNTX01TVkMgMQotIyAgICAv
KiBXYXZlIChDL0MrKyksIEdDQyAoQysrKSAqLwotIyAgICBlbGlmIGRlZmluZWQgX19XQVZFX18g
JiYgX19XQVZFX0hBU19WQVJJQURJQ1NfXyB8fCBkZWZpbmVkIF9fR05VQ19fICYmIGRlZmluZWQg
X19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18gJiYgX19HWFhfRVhQRVJJTUVOVEFMX0NYWDBYX18K
LSMgICAgICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ1MgMQotIyAgICAvKiBFREctYmFzZWQg
KEMvQysrKSwgR0NDIChDKSwgYW5kIHVua25vd24gKEMvQysrKSAqLwotIyAgICBlbGlmICFkZWZp
bmVkIF9fY3BsdXNwbHVzICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCB8fCBfX2NwbHVz
cGx1cyA+PSAyMDExMDNMCi0jICAgICAgICBkZWZpbmUgQk9PU1RfUFBfVkFSSUFESUNTIDEKLSMg
ICAgZWxzZQotIyAgICAgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDUyAwCi0jICAgIGVuZGlm
Ci0jIGVsaWYgIUJPT1NUX1BQX1ZBUklBRElDUyArIDEgPCAyCi0jICAgIHVuZGVmIEJPT1NUX1BQ
X1ZBUklBRElDUwotIyAgICBkZWZpbmUgQk9PU1RfUFBfVkFSSUFESUNTIDEKLSMgICAgaWYgZGVm
aW5lZCBfTVNDX1ZFUiAmJiBfTVNDX1ZFUiA+PSAxNDAwICYmIChkZWZpbmVkKF9fY2xhbmdfXykg
fHwgZGVmaW5lZChfX0lOVEVMTElTRU5TRV9fKSB8fCAoZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVS
KSAmJiBfX0lOVEVMX0NPTVBJTEVSID49IDE3MDApIHx8ICEoZGVmaW5lZCBfX0VER19fIHx8IGRl
ZmluZWQgX19HQ0NYTUxfXyB8fCBkZWZpbmVkIF9fQ1VEQUNDX18gfHwgZGVmaW5lZCBfX1BBVEhT
Q0FMRV9fIHx8IGRlZmluZWQgX19ETUNfXyB8fCBkZWZpbmVkIF9fQ09ERUdFQVJDX18gfHwgZGVm
aW5lZCBfX0JPUkxBTkRDX18gfHwgZGVmaW5lZCBfX01XRVJLU19fIHx8IGRlZmluZWQgX19TVU5Q
Uk9fQ0MgfHwgZGVmaW5lZCBfX0hQX2FDQyB8fCBkZWZpbmVkIF9fTVJDX18gfHwgZGVmaW5lZCBf
X1NDX18gfHwgZGVmaW5lZCBfX0lCTUNQUF9fIHx8IGRlZmluZWQgX19QR0kpKQotIyAgICAgICAg
dW5kZWYgQk9PU1RfUFBfVkFSSUFESUNTX01TVkMKLSMgICAgICAgIGRlZmluZSBCT09TVF9QUF9W
QVJJQURJQ1NfTVNWQyAxCi0jICAgIGVuZGlmCi0jIGVsc2UKLSMgICAgdW5kZWYgQk9PU1RfUFBf
VkFSSUFESUNTCi0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ1MgMAotIyBlbmRpZgotIwot
IyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbnRyb2wvZGVkdWNlX2QuaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2NvbnRyb2wvZGVkdWNlX2Qu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDI3NmIwZjE5ZWRkNTg4Yzk2Yzk2
NDI1ZjRhZmU5OTE2YmYwZDg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXBy
b2Nlc3Nvci9jb250cm9sL2RlZHVjZV9kLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAg
QEAKLSMgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKLSMgICogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMgICog
ICAgIChDKSBDb3B5cmlnaHQgUGF1bCBNZW5zb25pZGVzIDIwMDIuCi0jICAqICAgICBEaXN0cmli
dXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUK
LSMgICogICAgIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0j
ICAqICAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqCi0jICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotIwotIyAvKiBTZWUgaHR0cDov
L3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRlZiBC
T09TVF9QUkVQUk9DRVNTT1JfQ09OVFJPTF9ERURVQ0VfRF9IUFAKLSMgZGVmaW5lIEJPT1NUX1BS
RVBST0NFU1NPUl9DT05UUk9MX0RFRFVDRV9EX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9wcmVw
cm9jZXNzb3IvY29udHJvbC93aGlsZS5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nv
ci9kZXRhaWwvYXV0b19yZWMuaHBwPgotIwotIyAvKiBCT09TVF9QUF9ERURVQ0VfRCAqLwotIwot
IyBkZWZpbmUgQk9PU1RfUFBfREVEVUNFX0QoKSBCT09TVF9QUF9BVVRPX1JFQyhCT09TVF9QUF9X
SElMRV9QLCAyNTYpCi0jCi0jIGVuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvY29udHJvbC9kZXRhaWwvd2hpbGUu
aHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vz
c29yL2NvbnRyb2wvZGV0YWlsL3doaWxlLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNzMxNWUxZGU5ZDU1NDYxYWQ1YzI4NmRlZWUzNWViYzE1YWE4YTg1MS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvY29udHJvbC9kZXRhaWwvd2hpbGUuaHBw
CisrKyAvZGV2L251bGwKQEAgLTEsNTM2ICswLDAgQEAKLSMgLyogQ29weXJpZ2h0IChDKSAyMDAx
Ci0jICAqIEhvdXNlbWFycXVlIE95Ci0jICAqIGh0dHA6Ly93d3cuaG91c2VtYXJxdWUuY29tCi0j
ICAqCi0jICAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4gKFNlZQotIyAgKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdAotIyAgKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0j
ICAqLwotIwotIyAvKiBSZXZpc2VkIGJ5IFBhdWwgTWVuc29uaWRlcyAoMjAwMikgKi8KLSMKLSMg
LyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwot
IwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX0NPTlRST0xfREVUQUlMX1dISUxFX0hQUAot
IyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX0NPTlRST0xfREVUQUlMX1dISUxFX0hQUAotIwot
IyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29udHJvbC9paWYuaHBwPgotIyBpbmNsdWRl
IDxib29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9ib29sLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3Qv
cHJlcHJvY2Vzc29yL3R1cGxlL2VhdC5ocHA+Ci0jCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8x
KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzFfQyhCT09TVF9QUF9CT09MKHAoMiwgcykpLCBwLCBv
LCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMihwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8y
X0MoQk9PU1RfUFBfQk9PTChwKDMsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFXzMocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfM19DKEJPT1NUX1BQX0JPT0wocCg0LCBzKSks
IHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV80KHAsIG8sIHMpIEJPT1NUX1BQX1dI
SUxFXzRfQyhCT09TVF9QUF9CT09MKHAoNSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1Rf
UFBfV0hJTEVfNShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV81X0MoQk9PU1RfUFBfQk9PTChwKDYs
IHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzYocCwgbywgcykgQk9PU1Rf
UFBfV0hJTEVfNl9DKEJPT1NUX1BQX0JPT0wocCg3LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV83KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzdfQyhCT09TVF9QUF9CT09M
KHAoOCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfOChwLCBvLCBzKSBC
T09TVF9QUF9XSElMRV84X0MoQk9PU1RfUFBfQk9PTChwKDksIHMpKSwgcCwgbywgcykKLSMgZGVm
aW5lIEJPT1NUX1BQX1dISUxFXzkocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfOV9DKEJPT1NUX1BQ
X0JPT0wocCgxMCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTAocCwg
bywgcykgQk9PU1RfUFBfV0hJTEVfMTBfQyhCT09TVF9QUF9CT09MKHAoMTEsIHMpKSwgcCwgbywg
cykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzExKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzEx
X0MoQk9PU1RfUFBfQk9PTChwKDEyLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV8xMihwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xMl9DKEJPT1NUX1BQX0JPT0wocCgxMywg
cykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTMocCwgbywgcykgQk9PU1Rf
UFBfV0hJTEVfMTNfQyhCT09TVF9QUF9CT09MKHAoMTQsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5l
IEJPT1NUX1BQX1dISUxFXzE0KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE0X0MoQk9PU1RfUFBf
Qk9PTChwKDE1LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNShwLCBv
LCBzKSBCT09TVF9QUF9XSElMRV8xNV9DKEJPT1NUX1BQX0JPT0wocCgxNiwgcykpLCBwLCBvLCBz
KQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTYocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTZf
QyhCT09TVF9QUF9CT09MKHAoMTcsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFXzE3KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE3X0MoQk9PU1RfUFBfQk9PTChwKDE4LCBz
KSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xOChwLCBvLCBzKSBCT09TVF9Q
UF9XSElMRV8xOF9DKEJPT1NUX1BQX0JPT0wocCgxOSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUg
Qk9PU1RfUFBfV0hJTEVfMTkocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTlfQyhCT09TVF9QUF9C
T09MKHAoMjAsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIwKHAsIG8s
IHMpIEJPT1NUX1BQX1dISUxFXzIwX0MoQk9PU1RfUFBfQk9PTChwKDIxLCBzKSksIHAsIG8sIHMp
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8yMV9D
KEJPT1NUX1BQX0JPT0wocCgyMiwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJ
TEVfMjIocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMjJfQyhCT09TVF9QUF9CT09MKHAoMjMsIHMp
KSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIzKHAsIG8sIHMpIEJPT1NUX1BQ
X1dISUxFXzIzX0MoQk9PU1RfUFBfQk9PTChwKDI0LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV8yNChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8yNF9DKEJPT1NUX1BQX0JP
T0wocCgyNSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjUocCwgbywg
cykgQk9PU1RfUFBfV0hJTEVfMjVfQyhCT09TVF9QUF9CT09MKHAoMjYsIHMpKSwgcCwgbywgcykK
LSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzI2KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzI2X0Mo
Qk9PU1RfUFBfQk9PTChwKDI3LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV8yNyhwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8yN19DKEJPT1NUX1BQX0JPT0wocCgyOCwgcykp
LCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjgocCwgbywgcykgQk9PU1RfUFBf
V0hJTEVfMjhfQyhCT09TVF9QUF9CT09MKHAoMjksIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJP
T1NUX1BQX1dISUxFXzI5KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzI5X0MoQk9PU1RfUFBfQk9P
TChwKDMwLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8zMChwLCBvLCBz
KSBCT09TVF9QUF9XSElMRV8zMF9DKEJPT1NUX1BQX0JPT0wocCgzMSwgcykpLCBwLCBvLCBzKQot
IyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMzEocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMzFfQyhC
T09TVF9QUF9CT09MKHAoMzIsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxF
XzMyKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzMyX0MoQk9PU1RfUFBfQk9PTChwKDMzLCBzKSks
IHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8zMyhwLCBvLCBzKSBCT09TVF9QUF9X
SElMRV8zM19DKEJPT1NUX1BQX0JPT0wocCgzNCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfMzQocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMzRfQyhCT09TVF9QUF9CT09M
KHAoMzUsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzM1KHAsIG8sIHMp
IEJPT1NUX1BQX1dISUxFXzM1X0MoQk9PU1RfUFBfQk9PTChwKDM2LCBzKSksIHAsIG8sIHMpCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV8zNihwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8zNl9DKEJP
T1NUX1BQX0JPT0wocCgzNywgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVf
MzcocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMzdfQyhCT09TVF9QUF9CT09MKHAoMzgsIHMpKSwg
cCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzM4KHAsIG8sIHMpIEJPT1NUX1BQX1dI
SUxFXzM4X0MoQk9PU1RfUFBfQk9PTChwKDM5LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV8zOShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8zOV9DKEJPT1NUX1BQX0JPT0wo
cCg0MCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNDAocCwgbywgcykg
Qk9PU1RfUFBfV0hJTEVfNDBfQyhCT09TVF9QUF9CT09MKHAoNDEsIHMpKSwgcCwgbywgcykKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFXzQxKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzQxX0MoQk9P
U1RfUFBfQk9PTChwKDQyLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV80
MihwLCBvLCBzKSBCT09TVF9QUF9XSElMRV80Ml9DKEJPT1NUX1BQX0JPT0wocCg0MywgcykpLCBw
LCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNDMocCwgbywgcykgQk9PU1RfUFBfV0hJ
TEVfNDNfQyhCT09TVF9QUF9CT09MKHAoNDQsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NU
X1BQX1dISUxFXzQ0KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzQ0X0MoQk9PU1RfUFBfQk9PTChw
KDQ1LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV80NShwLCBvLCBzKSBC
T09TVF9QUF9XSElMRV80NV9DKEJPT1NUX1BQX0JPT0wocCg0NiwgcykpLCBwLCBvLCBzKQotIyBk
ZWZpbmUgQk9PU1RfUFBfV0hJTEVfNDYocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfNDZfQyhCT09T
VF9QUF9CT09MKHAoNDcsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzQ3
KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzQ3X0MoQk9PU1RfUFBfQk9PTChwKDQ4LCBzKSksIHAs
IG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV80OChwLCBvLCBzKSBCT09TVF9QUF9XSElM
RV80OF9DKEJPT1NUX1BQX0JPT0wocCg0OSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1Rf
UFBfV0hJTEVfNDkocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfNDlfQyhCT09TVF9QUF9CT09MKHAo
NTAsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzUwKHAsIG8sIHMpIEJP
T1NUX1BQX1dISUxFXzUwX0MoQk9PU1RfUFBfQk9PTChwKDUxLCBzKSksIHAsIG8sIHMpCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV81MShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV81MV9DKEJPT1NU
X1BQX0JPT0wocCg1MiwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNTIo
cCwgbywgcykgQk9PU1RfUFBfV0hJTEVfNTJfQyhCT09TVF9QUF9CT09MKHAoNTMsIHMpKSwgcCwg
bywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzUzKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxF
XzUzX0MoQk9PU1RfUFBfQk9PTChwKDU0LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV81NChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV81NF9DKEJPT1NUX1BQX0JPT0wocCg1
NSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNTUocCwgbywgcykgQk9P
U1RfUFBfV0hJTEVfNTVfQyhCT09TVF9QUF9CT09MKHAoNTYsIHMpKSwgcCwgbywgcykKLSMgZGVm
aW5lIEJPT1NUX1BQX1dISUxFXzU2KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzU2X0MoQk9PU1Rf
UFBfQk9PTChwKDU3LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV81Nyhw
LCBvLCBzKSBCT09TVF9QUF9XSElMRV81N19DKEJPT1NUX1BQX0JPT0wocCg1OCwgcykpLCBwLCBv
LCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNTgocCwgbywgcykgQk9PU1RfUFBfV0hJTEVf
NThfQyhCT09TVF9QUF9CT09MKHAoNTksIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQ
X1dISUxFXzU5KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzU5X0MoQk9PU1RfUFBfQk9PTChwKDYw
LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV82MChwLCBvLCBzKSBCT09T
VF9QUF9XSElMRV82MF9DKEJPT1NUX1BQX0JPT0wocCg2MSwgcykpLCBwLCBvLCBzKQotIyBkZWZp
bmUgQk9PU1RfUFBfV0hJTEVfNjEocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfNjFfQyhCT09TVF9Q
UF9CT09MKHAoNjIsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzYyKHAs
IG8sIHMpIEJPT1NUX1BQX1dISUxFXzYyX0MoQk9PU1RfUFBfQk9PTChwKDYzLCBzKSksIHAsIG8s
IHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV82MyhwLCBvLCBzKSBCT09TVF9QUF9XSElMRV82
M19DKEJPT1NUX1BQX0JPT0wocCg2NCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBf
V0hJTEVfNjQocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfNjRfQyhCT09TVF9QUF9CT09MKHAoNjUs
IHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzY1KHAsIG8sIHMpIEJPT1NU
X1BQX1dISUxFXzY1X0MoQk9PU1RfUFBfQk9PTChwKDY2LCBzKSksIHAsIG8sIHMpCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV82NihwLCBvLCBzKSBCT09TVF9QUF9XSElMRV82Nl9DKEJPT1NUX1BQ
X0JPT0wocCg2NywgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNjcocCwg
bywgcykgQk9PU1RfUFBfV0hJTEVfNjdfQyhCT09TVF9QUF9CT09MKHAoNjgsIHMpKSwgcCwgbywg
cykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzY4KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzY4
X0MoQk9PU1RfUFBfQk9PTChwKDY5LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV82OShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV82OV9DKEJPT1NUX1BQX0JPT0wocCg3MCwg
cykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNzAocCwgbywgcykgQk9PU1Rf
UFBfV0hJTEVfNzBfQyhCT09TVF9QUF9CT09MKHAoNzEsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5l
IEJPT1NUX1BQX1dISUxFXzcxKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzcxX0MoQk9PU1RfUFBf
Qk9PTChwKDcyLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV83MihwLCBv
LCBzKSBCT09TVF9QUF9XSElMRV83Ml9DKEJPT1NUX1BQX0JPT0wocCg3MywgcykpLCBwLCBvLCBz
KQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNzMocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfNzNf
QyhCT09TVF9QUF9CT09MKHAoNzQsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFXzc0KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzc0X0MoQk9PU1RfUFBfQk9PTChwKDc1LCBz
KSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV83NShwLCBvLCBzKSBCT09TVF9Q
UF9XSElMRV83NV9DKEJPT1NUX1BQX0JPT0wocCg3NiwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUg
Qk9PU1RfUFBfV0hJTEVfNzYocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfNzZfQyhCT09TVF9QUF9C
T09MKHAoNzcsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzc3KHAsIG8s
IHMpIEJPT1NUX1BQX1dISUxFXzc3X0MoQk9PU1RfUFBfQk9PTChwKDc4LCBzKSksIHAsIG8sIHMp
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV83OChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV83OF9D
KEJPT1NUX1BQX0JPT0wocCg3OSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJ
TEVfNzkocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfNzlfQyhCT09TVF9QUF9CT09MKHAoODAsIHMp
KSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzgwKHAsIG8sIHMpIEJPT1NUX1BQ
X1dISUxFXzgwX0MoQk9PU1RfUFBfQk9PTChwKDgxLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV84MShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV84MV9DKEJPT1NUX1BQX0JP
T0wocCg4MiwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfODIocCwgbywg
cykgQk9PU1RfUFBfV0hJTEVfODJfQyhCT09TVF9QUF9CT09MKHAoODMsIHMpKSwgcCwgbywgcykK
LSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzgzKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzgzX0Mo
Qk9PU1RfUFBfQk9PTChwKDg0LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV84NChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV84NF9DKEJPT1NUX1BQX0JPT0wocCg4NSwgcykp
LCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfODUocCwgbywgcykgQk9PU1RfUFBf
V0hJTEVfODVfQyhCT09TVF9QUF9CT09MKHAoODYsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJP
T1NUX1BQX1dISUxFXzg2KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzg2X0MoQk9PU1RfUFBfQk9P
TChwKDg3LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV84NyhwLCBvLCBz
KSBCT09TVF9QUF9XSElMRV84N19DKEJPT1NUX1BQX0JPT0wocCg4OCwgcykpLCBwLCBvLCBzKQot
IyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfODgocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfODhfQyhC
T09TVF9QUF9CT09MKHAoODksIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxF
Xzg5KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzg5X0MoQk9PU1RfUFBfQk9PTChwKDkwLCBzKSks
IHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV85MChwLCBvLCBzKSBCT09TVF9QUF9X
SElMRV85MF9DKEJPT1NUX1BQX0JPT0wocCg5MSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfOTEocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfOTFfQyhCT09TVF9QUF9CT09M
KHAoOTIsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzkyKHAsIG8sIHMp
IEJPT1NUX1BQX1dISUxFXzkyX0MoQk9PU1RfUFBfQk9PTChwKDkzLCBzKSksIHAsIG8sIHMpCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV85MyhwLCBvLCBzKSBCT09TVF9QUF9XSElMRV85M19DKEJP
T1NUX1BQX0JPT0wocCg5NCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVf
OTQocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfOTRfQyhCT09TVF9QUF9CT09MKHAoOTUsIHMpKSwg
cCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzk1KHAsIG8sIHMpIEJPT1NUX1BQX1dI
SUxFXzk1X0MoQk9PU1RfUFBfQk9PTChwKDk2LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV85NihwLCBvLCBzKSBCT09TVF9QUF9XSElMRV85Nl9DKEJPT1NUX1BQX0JPT0wo
cCg5NywgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfOTcocCwgbywgcykg
Qk9PU1RfUFBfV0hJTEVfOTdfQyhCT09TVF9QUF9CT09MKHAoOTgsIHMpKSwgcCwgbywgcykKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFXzk4KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzk4X0MoQk9P
U1RfUFBfQk9PTChwKDk5LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV85
OShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV85OV9DKEJPT1NUX1BQX0JPT0wocCgxMDAsIHMpKSwg
cCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzEwMChwLCBvLCBzKSBCT09TVF9QUF9X
SElMRV8xMDBfQyhCT09TVF9QUF9CT09MKHAoMTAxLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV8xMDEocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTAxX0MoQk9PU1RfUFBf
Qk9PTChwKDEwMiwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTAyKHAs
IG8sIHMpIEJPT1NUX1BQX1dISUxFXzEwMl9DKEJPT1NUX1BQX0JPT0wocCgxMDMsIHMpKSwgcCwg
bywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzEwMyhwLCBvLCBzKSBCT09TVF9QUF9XSElM
RV8xMDNfQyhCT09TVF9QUF9CT09MKHAoMTA0LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV8xMDQocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTA0X0MoQk9PU1RfUFBfQk9P
TChwKDEwNSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTA1KHAsIG8s
IHMpIEJPT1NUX1BQX1dISUxFXzEwNV9DKEJPT1NUX1BQX0JPT0wocCgxMDYsIHMpKSwgcCwgbywg
cykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzEwNihwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8x
MDZfQyhCT09TVF9QUF9CT09MKHAoMTA3LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV8xMDcocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTA3X0MoQk9PU1RfUFBfQk9PTChw
KDEwOCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTA4KHAsIG8sIHMp
IEJPT1NUX1BQX1dISUxFXzEwOF9DKEJPT1NUX1BQX0JPT0wocCgxMDksIHMpKSwgcCwgbywgcykK
LSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzEwOShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xMDlf
QyhCT09TVF9QUF9CT09MKHAoMTEwLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV8xMTAocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTEwX0MoQk9PU1RfUFBfQk9PTChwKDEx
MSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTExKHAsIG8sIHMpIEJP
T1NUX1BQX1dISUxFXzExMV9DKEJPT1NUX1BQX0JPT0wocCgxMTIsIHMpKSwgcCwgbywgcykKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFXzExMihwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xMTJfQyhC
T09TVF9QUF9CT09MKHAoMTEzLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV8xMTMocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTEzX0MoQk9PU1RfUFBfQk9PTChwKDExNCwg
cykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTE0KHAsIG8sIHMpIEJPT1NU
X1BQX1dISUxFXzExNF9DKEJPT1NUX1BQX0JPT0wocCgxMTUsIHMpKSwgcCwgbywgcykKLSMgZGVm
aW5lIEJPT1NUX1BQX1dISUxFXzExNShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xMTVfQyhCT09T
VF9QUF9CT09MKHAoMTE2LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8x
MTYocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTE2X0MoQk9PU1RfUFBfQk9PTChwKDExNywgcykp
LCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTE3KHAsIG8sIHMpIEJPT1NUX1BQ
X1dISUxFXzExN19DKEJPT1NUX1BQX0JPT0wocCgxMTgsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5l
IEJPT1NUX1BQX1dISUxFXzExOChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xMThfQyhCT09TVF9Q
UF9CT09MKHAoMTE5LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xMTko
cCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTE5X0MoQk9PU1RfUFBfQk9PTChwKDEyMCwgcykpLCBw
LCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTIwKHAsIG8sIHMpIEJPT1NUX1BQX1dI
SUxFXzEyMF9DKEJPT1NUX1BQX0JPT0wocCgxMjEsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJP
T1NUX1BQX1dISUxFXzEyMShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xMjFfQyhCT09TVF9QUF9C
T09MKHAoMTIyLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xMjIocCwg
bywgcykgQk9PU1RfUFBfV0hJTEVfMTIyX0MoQk9PU1RfUFBfQk9PTChwKDEyMywgcykpLCBwLCBv
LCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTIzKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxF
XzEyM19DKEJPT1NUX1BQX0JPT0wocCgxMjQsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NU
X1BQX1dISUxFXzEyNChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xMjRfQyhCT09TVF9QUF9CT09M
KHAoMTI1LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xMjUocCwgbywg
cykgQk9PU1RfUFBfV0hJTEVfMTI1X0MoQk9PU1RfUFBfQk9PTChwKDEyNiwgcykpLCBwLCBvLCBz
KQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTI2KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzEy
Nl9DKEJPT1NUX1BQX0JPT0wocCgxMjcsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQ
X1dISUxFXzEyNyhwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xMjdfQyhCT09TVF9QUF9CT09MKHAo
MTI4LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xMjgocCwgbywgcykg
Qk9PU1RfUFBfV0hJTEVfMTI4X0MoQk9PU1RfUFBfQk9PTChwKDEyOSwgcykpLCBwLCBvLCBzKQot
IyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTI5KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzEyOV9D
KEJPT1NUX1BQX0JPT0wocCgxMzAsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFXzEzMChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xMzBfQyhCT09TVF9QUF9CT09MKHAoMTMx
LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xMzEocCwgbywgcykgQk9P
U1RfUFBfV0hJTEVfMTMxX0MoQk9PU1RfUFBfQk9PTChwKDEzMiwgcykpLCBwLCBvLCBzKQotIyBk
ZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTMyKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzEzMl9DKEJP
T1NUX1BQX0JPT0wocCgxMzMsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxF
XzEzMyhwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xMzNfQyhCT09TVF9QUF9CT09MKHAoMTM0LCBz
KSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xMzQocCwgbywgcykgQk9PU1Rf
UFBfV0hJTEVfMTM0X0MoQk9PU1RfUFBfQk9PTChwKDEzNSwgcykpLCBwLCBvLCBzKQotIyBkZWZp
bmUgQk9PU1RfUFBfV0hJTEVfMTM1KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzEzNV9DKEJPT1NU
X1BQX0JPT0wocCgxMzYsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzEz
NihwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xMzZfQyhCT09TVF9QUF9CT09MKHAoMTM3LCBzKSks
IHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xMzcocCwgbywgcykgQk9PU1RfUFBf
V0hJTEVfMTM3X0MoQk9PU1RfUFBfQk9PTChwKDEzOCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUg
Qk9PU1RfUFBfV0hJTEVfMTM4KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzEzOF9DKEJPT1NUX1BQ
X0JPT0wocCgxMzksIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzEzOShw
LCBvLCBzKSBCT09TVF9QUF9XSElMRV8xMzlfQyhCT09TVF9QUF9CT09MKHAoMTQwLCBzKSksIHAs
IG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNDAocCwgbywgcykgQk9PU1RfUFBfV0hJ
TEVfMTQwX0MoQk9PU1RfUFBfQk9PTChwKDE0MSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfMTQxKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE0MV9DKEJPT1NUX1BQX0JP
T0wocCgxNDIsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE0MihwLCBv
LCBzKSBCT09TVF9QUF9XSElMRV8xNDJfQyhCT09TVF9QUF9CT09MKHAoMTQzLCBzKSksIHAsIG8s
IHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNDMocCwgbywgcykgQk9PU1RfUFBfV0hJTEVf
MTQzX0MoQk9PU1RfUFBfQk9PTChwKDE0NCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1Rf
UFBfV0hJTEVfMTQ0KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE0NF9DKEJPT1NUX1BQX0JPT0wo
cCgxNDUsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE0NShwLCBvLCBz
KSBCT09TVF9QUF9XSElMRV8xNDVfQyhCT09TVF9QUF9CT09MKHAoMTQ2LCBzKSksIHAsIG8sIHMp
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNDYocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTQ2
X0MoQk9PU1RfUFBfQk9PTChwKDE0NywgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBf
V0hJTEVfMTQ3KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE0N19DKEJPT1NUX1BQX0JPT0wocCgx
NDgsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE0OChwLCBvLCBzKSBC
T09TVF9QUF9XSElMRV8xNDhfQyhCT09TVF9QUF9CT09MKHAoMTQ5LCBzKSksIHAsIG8sIHMpCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV8xNDkocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTQ5X0Mo
Qk9PU1RfUFBfQk9PTChwKDE1MCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJ
TEVfMTUwKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE1MF9DKEJPT1NUX1BQX0JPT0wocCgxNTEs
IHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE1MShwLCBvLCBzKSBCT09T
VF9QUF9XSElMRV8xNTFfQyhCT09TVF9QUF9CT09MKHAoMTUyLCBzKSksIHAsIG8sIHMpCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV8xNTIocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTUyX0MoQk9P
U1RfUFBfQk9PTChwKDE1MywgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVf
MTUzKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE1M19DKEJPT1NUX1BQX0JPT0wocCgxNTQsIHMp
KSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE1NChwLCBvLCBzKSBCT09TVF9Q
UF9XSElMRV8xNTRfQyhCT09TVF9QUF9CT09MKHAoMTU1LCBzKSksIHAsIG8sIHMpCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV8xNTUocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTU1X0MoQk9PU1Rf
UFBfQk9PTChwKDE1NiwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTU2
KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE1Nl9DKEJPT1NUX1BQX0JPT0wocCgxNTcsIHMpKSwg
cCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE1NyhwLCBvLCBzKSBCT09TVF9QUF9X
SElMRV8xNTdfQyhCT09TVF9QUF9CT09MKHAoMTU4LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV8xNTgocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTU4X0MoQk9PU1RfUFBf
Qk9PTChwKDE1OSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTU5KHAs
IG8sIHMpIEJPT1NUX1BQX1dISUxFXzE1OV9DKEJPT1NUX1BQX0JPT0wocCgxNjAsIHMpKSwgcCwg
bywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE2MChwLCBvLCBzKSBCT09TVF9QUF9XSElM
RV8xNjBfQyhCT09TVF9QUF9CT09MKHAoMTYxLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV8xNjEocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTYxX0MoQk9PU1RfUFBfQk9P
TChwKDE2MiwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTYyKHAsIG8s
IHMpIEJPT1NUX1BQX1dISUxFXzE2Ml9DKEJPT1NUX1BQX0JPT0wocCgxNjMsIHMpKSwgcCwgbywg
cykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE2MyhwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8x
NjNfQyhCT09TVF9QUF9CT09MKHAoMTY0LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV8xNjQocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTY0X0MoQk9PU1RfUFBfQk9PTChw
KDE2NSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTY1KHAsIG8sIHMp
IEJPT1NUX1BQX1dISUxFXzE2NV9DKEJPT1NUX1BQX0JPT0wocCgxNjYsIHMpKSwgcCwgbywgcykK
LSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE2NihwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xNjZf
QyhCT09TVF9QUF9CT09MKHAoMTY3LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV8xNjcocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTY3X0MoQk9PU1RfUFBfQk9PTChwKDE2
OCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTY4KHAsIG8sIHMpIEJP
T1NUX1BQX1dISUxFXzE2OF9DKEJPT1NUX1BQX0JPT0wocCgxNjksIHMpKSwgcCwgbywgcykKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE2OShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xNjlfQyhC
T09TVF9QUF9CT09MKHAoMTcwLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV8xNzAocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTcwX0MoQk9PU1RfUFBfQk9PTChwKDE3MSwg
cykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTcxKHAsIG8sIHMpIEJPT1NU
X1BQX1dISUxFXzE3MV9DKEJPT1NUX1BQX0JPT0wocCgxNzIsIHMpKSwgcCwgbywgcykKLSMgZGVm
aW5lIEJPT1NUX1BQX1dISUxFXzE3MihwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xNzJfQyhCT09T
VF9QUF9CT09MKHAoMTczLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8x
NzMocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTczX0MoQk9PU1RfUFBfQk9PTChwKDE3NCwgcykp
LCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTc0KHAsIG8sIHMpIEJPT1NUX1BQ
X1dISUxFXzE3NF9DKEJPT1NUX1BQX0JPT0wocCgxNzUsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5l
IEJPT1NUX1BQX1dISUxFXzE3NShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xNzVfQyhCT09TVF9Q
UF9CT09MKHAoMTc2LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNzYo
cCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMTc2X0MoQk9PU1RfUFBfQk9PTChwKDE3NywgcykpLCBw
LCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTc3KHAsIG8sIHMpIEJPT1NUX1BQX1dI
SUxFXzE3N19DKEJPT1NUX1BQX0JPT0wocCgxNzgsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJP
T1NUX1BQX1dISUxFXzE3OChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xNzhfQyhCT09TVF9QUF9C
T09MKHAoMTc5LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNzkocCwg
bywgcykgQk9PU1RfUFBfV0hJTEVfMTc5X0MoQk9PU1RfUFBfQk9PTChwKDE4MCwgcykpLCBwLCBv
LCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTgwKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxF
XzE4MF9DKEJPT1NUX1BQX0JPT0wocCgxODEsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NU
X1BQX1dISUxFXzE4MShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xODFfQyhCT09TVF9QUF9CT09M
KHAoMTgyLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xODIocCwgbywg
cykgQk9PU1RfUFBfV0hJTEVfMTgyX0MoQk9PU1RfUFBfQk9PTChwKDE4MywgcykpLCBwLCBvLCBz
KQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTgzKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE4
M19DKEJPT1NUX1BQX0JPT0wocCgxODQsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQ
X1dISUxFXzE4NChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xODRfQyhCT09TVF9QUF9CT09MKHAo
MTg1LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xODUocCwgbywgcykg
Qk9PU1RfUFBfV0hJTEVfMTg1X0MoQk9PU1RfUFBfQk9PTChwKDE4NiwgcykpLCBwLCBvLCBzKQot
IyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTg2KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE4Nl9D
KEJPT1NUX1BQX0JPT0wocCgxODcsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFXzE4NyhwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xODdfQyhCT09TVF9QUF9CT09MKHAoMTg4
LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xODgocCwgbywgcykgQk9P
U1RfUFBfV0hJTEVfMTg4X0MoQk9PU1RfUFBfQk9PTChwKDE4OSwgcykpLCBwLCBvLCBzKQotIyBk
ZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTg5KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE4OV9DKEJP
T1NUX1BQX0JPT0wocCgxOTAsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxF
XzE5MChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xOTBfQyhCT09TVF9QUF9CT09MKHAoMTkxLCBz
KSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xOTEocCwgbywgcykgQk9PU1Rf
UFBfV0hJTEVfMTkxX0MoQk9PU1RfUFBfQk9PTChwKDE5MiwgcykpLCBwLCBvLCBzKQotIyBkZWZp
bmUgQk9PU1RfUFBfV0hJTEVfMTkyKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE5Ml9DKEJPT1NU
X1BQX0JPT0wocCgxOTMsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE5
MyhwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8xOTNfQyhCT09TVF9QUF9CT09MKHAoMTk0LCBzKSks
IHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xOTQocCwgbywgcykgQk9PU1RfUFBf
V0hJTEVfMTk0X0MoQk9PU1RfUFBfQk9PTChwKDE5NSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUg
Qk9PU1RfUFBfV0hJTEVfMTk1KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE5NV9DKEJPT1NUX1BQ
X0JPT0wocCgxOTYsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE5Nihw
LCBvLCBzKSBCT09TVF9QUF9XSElMRV8xOTZfQyhCT09TVF9QUF9CT09MKHAoMTk3LCBzKSksIHAs
IG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xOTcocCwgbywgcykgQk9PU1RfUFBfV0hJ
TEVfMTk3X0MoQk9PU1RfUFBfQk9PTChwKDE5OCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfMTk4KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzE5OF9DKEJPT1NUX1BQX0JP
T0wocCgxOTksIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE5OShwLCBv
LCBzKSBCT09TVF9QUF9XSElMRV8xOTlfQyhCT09TVF9QUF9CT09MKHAoMjAwLCBzKSksIHAsIG8s
IHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMDAocCwgbywgcykgQk9PU1RfUFBfV0hJTEVf
MjAwX0MoQk9PU1RfUFBfQk9PTChwKDIwMSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1Rf
UFBfV0hJTEVfMjAxKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzIwMV9DKEJPT1NUX1BQX0JPT0wo
cCgyMDIsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIwMihwLCBvLCBz
KSBCT09TVF9QUF9XSElMRV8yMDJfQyhCT09TVF9QUF9CT09MKHAoMjAzLCBzKSksIHAsIG8sIHMp
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMDMocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMjAz
X0MoQk9PU1RfUFBfQk9PTChwKDIwNCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBf
V0hJTEVfMjA0KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzIwNF9DKEJPT1NUX1BQX0JPT0wocCgy
MDUsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIwNShwLCBvLCBzKSBC
T09TVF9QUF9XSElMRV8yMDVfQyhCT09TVF9QUF9CT09MKHAoMjA2LCBzKSksIHAsIG8sIHMpCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV8yMDYocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMjA2X0Mo
Qk9PU1RfUFBfQk9PTChwKDIwNywgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJ
TEVfMjA3KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzIwN19DKEJPT1NUX1BQX0JPT0wocCgyMDgs
IHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIwOChwLCBvLCBzKSBCT09T
VF9QUF9XSElMRV8yMDhfQyhCT09TVF9QUF9CT09MKHAoMjA5LCBzKSksIHAsIG8sIHMpCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV8yMDkocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMjA5X0MoQk9P
U1RfUFBfQk9PTChwKDIxMCwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVf
MjEwKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzIxMF9DKEJPT1NUX1BQX0JPT0wocCgyMTEsIHMp
KSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIxMShwLCBvLCBzKSBCT09TVF9Q
UF9XSElMRV8yMTFfQyhCT09TVF9QUF9CT09MKHAoMjEyLCBzKSksIHAsIG8sIHMpCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV8yMTIocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMjEyX0MoQk9PU1Rf
UFBfQk9PTChwKDIxMywgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjEz
KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzIxM19DKEJPT1NUX1BQX0JPT0wocCgyMTQsIHMpKSwg
cCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIxNChwLCBvLCBzKSBCT09TVF9QUF9X
SElMRV8yMTRfQyhCT09TVF9QUF9CT09MKHAoMjE1LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV8yMTUocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMjE1X0MoQk9PU1RfUFBf
Qk9PTChwKDIxNiwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjE2KHAs
IG8sIHMpIEJPT1NUX1BQX1dISUxFXzIxNl9DKEJPT1NUX1BQX0JPT0wocCgyMTcsIHMpKSwgcCwg
bywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIxNyhwLCBvLCBzKSBCT09TVF9QUF9XSElM
RV8yMTdfQyhCT09TVF9QUF9CT09MKHAoMjE4LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV8yMTgocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMjE4X0MoQk9PU1RfUFBfQk9P
TChwKDIxOSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjE5KHAsIG8s
IHMpIEJPT1NUX1BQX1dISUxFXzIxOV9DKEJPT1NUX1BQX0JPT0wocCgyMjAsIHMpKSwgcCwgbywg
cykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIyMChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8y
MjBfQyhCT09TVF9QUF9CT09MKHAoMjIxLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV8yMjEocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMjIxX0MoQk9PU1RfUFBfQk9PTChw
KDIyMiwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjIyKHAsIG8sIHMp
IEJPT1NUX1BQX1dISUxFXzIyMl9DKEJPT1NUX1BQX0JPT0wocCgyMjMsIHMpKSwgcCwgbywgcykK
LSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIyMyhwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8yMjNf
QyhCT09TVF9QUF9CT09MKHAoMjI0LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV8yMjQocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMjI0X0MoQk9PU1RfUFBfQk9PTChwKDIy
NSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjI1KHAsIG8sIHMpIEJP
T1NUX1BQX1dISUxFXzIyNV9DKEJPT1NUX1BQX0JPT0wocCgyMjYsIHMpKSwgcCwgbywgcykKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIyNihwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8yMjZfQyhC
T09TVF9QUF9CT09MKHAoMjI3LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV8yMjcocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMjI3X0MoQk9PU1RfUFBfQk9PTChwKDIyOCwg
cykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjI4KHAsIG8sIHMpIEJPT1NU
X1BQX1dISUxFXzIyOF9DKEJPT1NUX1BQX0JPT0wocCgyMjksIHMpKSwgcCwgbywgcykKLSMgZGVm
aW5lIEJPT1NUX1BQX1dISUxFXzIyOShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8yMjlfQyhCT09T
VF9QUF9CT09MKHAoMjMwLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8y
MzAocCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMjMwX0MoQk9PU1RfUFBfQk9PTChwKDIzMSwgcykp
LCBwLCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjMxKHAsIG8sIHMpIEJPT1NUX1BQ
X1dISUxFXzIzMV9DKEJPT1NUX1BQX0JPT0wocCgyMzIsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5l
IEJPT1NUX1BQX1dISUxFXzIzMihwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8yMzJfQyhCT09TVF9Q
UF9CT09MKHAoMjMzLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMzMo
cCwgbywgcykgQk9PU1RfUFBfV0hJTEVfMjMzX0MoQk9PU1RfUFBfQk9PTChwKDIzNCwgcykpLCBw
LCBvLCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjM0KHAsIG8sIHMpIEJPT1NUX1BQX1dI
SUxFXzIzNF9DKEJPT1NUX1BQX0JPT0wocCgyMzUsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJP
T1NUX1BQX1dISUxFXzIzNShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8yMzVfQyhCT09TVF9QUF9C
T09MKHAoMjM2LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMzYocCwg
bywgcykgQk9PU1RfUFBfV0hJTEVfMjM2X0MoQk9PU1RfUFBfQk9PTChwKDIzNywgcykpLCBwLCBv
LCBzKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjM3KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxF
XzIzN19DKEJPT1NUX1BQX0JPT0wocCgyMzgsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NU
X1BQX1dISUxFXzIzOChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8yMzhfQyhCT09TVF9QUF9CT09M
KHAoMjM5LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMzkocCwgbywg
cykgQk9PU1RfUFBfV0hJTEVfMjM5X0MoQk9PU1RfUFBfQk9PTChwKDI0MCwgcykpLCBwLCBvLCBz
KQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjQwKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzI0
MF9DKEJPT1NUX1BQX0JPT0wocCgyNDEsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQ
X1dISUxFXzI0MShwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8yNDFfQyhCT09TVF9QUF9CT09MKHAo
MjQyLCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yNDIocCwgbywgcykg
Qk9PU1RfUFBfV0hJTEVfMjQyX0MoQk9PU1RfUFBfQk9PTChwKDI0MywgcykpLCBwLCBvLCBzKQot
IyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjQzKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzI0M19D
KEJPT1NUX1BQX0JPT0wocCgyNDQsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFXzI0NChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8yNDRfQyhCT09TVF9QUF9CT09MKHAoMjQ1
LCBzKSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yNDUocCwgbywgcykgQk9P
U1RfUFBfV0hJTEVfMjQ1X0MoQk9PU1RfUFBfQk9PTChwKDI0NiwgcykpLCBwLCBvLCBzKQotIyBk
ZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjQ2KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzI0Nl9DKEJP
T1NUX1BQX0JPT0wocCgyNDcsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxF
XzI0NyhwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8yNDdfQyhCT09TVF9QUF9CT09MKHAoMjQ4LCBz
KSksIHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yNDgocCwgbywgcykgQk9PU1Rf
UFBfV0hJTEVfMjQ4X0MoQk9PU1RfUFBfQk9PTChwKDI0OSwgcykpLCBwLCBvLCBzKQotIyBkZWZp
bmUgQk9PU1RfUFBfV0hJTEVfMjQ5KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzI0OV9DKEJPT1NU
X1BQX0JPT0wocCgyNTAsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzI1
MChwLCBvLCBzKSBCT09TVF9QUF9XSElMRV8yNTBfQyhCT09TVF9QUF9CT09MKHAoMjUxLCBzKSks
IHAsIG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yNTEocCwgbywgcykgQk9PU1RfUFBf
V0hJTEVfMjUxX0MoQk9PU1RfUFBfQk9PTChwKDI1MiwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUg
Qk9PU1RfUFBfV0hJTEVfMjUyKHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzI1Ml9DKEJPT1NUX1BQ
X0JPT0wocCgyNTMsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzI1Myhw
LCBvLCBzKSBCT09TVF9QUF9XSElMRV8yNTNfQyhCT09TVF9QUF9CT09MKHAoMjU0LCBzKSksIHAs
IG8sIHMpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yNTQocCwgbywgcykgQk9PU1RfUFBfV0hJ
TEVfMjU0X0MoQk9PU1RfUFBfQk9PTChwKDI1NSwgcykpLCBwLCBvLCBzKQotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfMjU1KHAsIG8sIHMpIEJPT1NUX1BQX1dISUxFXzI1NV9DKEJPT1NUX1BQX0JP
T0wocCgyNTYsIHMpKSwgcCwgbywgcykKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzI1NihwLCBv
LCBzKSBCT09TVF9QUF9XSElMRV8yNTZfQyhCT09TVF9QUF9CT09MKHAoMjU3LCBzKSksIHAsIG8s
IHMpCi0jCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xX0MoYywgcCwgbywgcykgQk9PU1RfUFBf
SUlGKGMsIEJPT1NUX1BQX1dISUxFXzIsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJP
T1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIsIHMp
KQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMl9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihj
LCBCT09TVF9QUF9XSElMRV8zLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9Q
UF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgzLCBzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFXzNfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9P
U1RfUFBfV0hJTEVfNCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlG
KGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNCwgcykpCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV80X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQ
X1dISUxFXzUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBv
LCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDUsIHMpKQotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfNV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElM
RV82LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9P
U1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg2LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1dISUxFXzZfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfNywg
cyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQ
X05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNywgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV83X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzgsIHMgQk9P
U1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwg
Qk9PU1RfUFBfVFVQTEVfRUFUXzIpKDgsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfOF9D
KGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV85LCBzIEJPT1NUX1BQ
X1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NU
X1BQX1RVUExFX0VBVF8yKSg5LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzlfQyhjLCBw
LCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTAsIHMgQk9PU1RfUFBfVFVQ
TEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBf
VFVQTEVfRUFUXzIpKDEwLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzEwX0MoYywgcCwg
bywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzExLCBzIEJPT1NUX1BQX1RVUExF
X0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RV
UExFX0VBVF8yKSgxMSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xMV9DKGMsIHAsIG8s
IHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xMiwgcyBCT09TVF9QUF9UVVBMRV9F
QVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBM
RV9FQVRfMikoMTIsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTJfQyhjLCBwLCBvLCBz
KSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTMsIHMgQk9PU1RfUFBfVFVQTEVfRUFU
XzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVf
RUFUXzIpKDEzLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzEzX0MoYywgcCwgbywgcykg
Qk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzE0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8z
KShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VB
VF8yKSgxNCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNF9DKGMsIHAsIG8sIHMpIEJP
T1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xNSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMyko
cCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRf
MikoMTUsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTVfQyhjLCBwLCBvLCBzKSBCT09T
VF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTYsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAs
IG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIp
KDE2LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE2X0MoYywgcCwgbywgcykgQk9PU1Rf
UFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzE3LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBv
LCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgx
NywgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xN19DKGMsIHAsIG8sIHMpIEJPT1NUX1BQ
X0lJRihjLCBCT09TVF9QUF9XSElMRV8xOCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywg
Qk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTgs
IHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMThfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9J
SUYoYywgQk9PU1RfUFBfV0hJTEVfMTksIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJP
T1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE5LCBz
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE5X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlG
KGMsIEJPT1NUX1BQX1dISUxFXzIwLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09T
VF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyMCwgcykp
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMF9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihj
LCBCT09TVF9QUF9XSElMRV8yMSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1Rf
UFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjEsIHMpKQot
IyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjFfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywg
Qk9PU1RfUFBfV0hJTEVfMjIsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQ
X0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIyLCBzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIyX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJP
T1NUX1BQX1dISUxFXzIzLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9J
SUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyMywgcykpCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV8yM19DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09T
VF9QUF9XSElMRV8yNCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlG
KGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjQsIHMpKQotIyBkZWZp
bmUgQk9PU1RfUFBfV0hJTEVfMjRfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1Rf
UFBfV0hJTEVfMjUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihj
LCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDI1LCBzKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1dISUxFXzI1X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQ
X1dISUxFXzI2LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywg
bywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyNiwgcykpCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV8yNl9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9X
SElMRV8yNywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8s
IEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjcsIHMpKQotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfMjdfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJ
TEVfMjgsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBC
T09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDI4LCBzKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX1dISUxFXzI4X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxF
XzI5LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9P
U1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyOSwgcykpCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV8yOV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8z
MCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NU
X1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMzAsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBf
V0hJTEVfMzBfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMzEs
IHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9Q
UF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDMxLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFXzMxX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzMyLCBz
IEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBf
TklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgzMiwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV8zMl9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8zMywgcyBC
T09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05J
TCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMzMsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVf
MzNfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMzQsIHMgQk9P
U1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwg
Qk9PU1RfUFBfVFVQTEVfRUFUXzIpKDM0LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzM0
X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzM1LCBzIEJPT1NU
X1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJP
T1NUX1BQX1RVUExFX0VBVF8yKSgzNSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8zNV9D
KGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8zNiwgcyBCT09TVF9Q
UF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09T
VF9QUF9UVVBMRV9FQVRfMikoMzYsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMzZfQyhj
LCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMzcsIHMgQk9PU1RfUFBf
VFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1Rf
UFBfVFVQTEVfRUFUXzIpKDM3LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzM3X0MoYywg
cCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzM4LCBzIEJPT1NUX1BQX1RV
UExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQ
X1RVUExFX0VBVF8yKSgzOCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8zOF9DKGMsIHAs
IG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8zOSwgcyBCT09TVF9QUF9UVVBM
RV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9U
VVBMRV9FQVRfMikoMzksIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMzlfQyhjLCBwLCBv
LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfNDAsIHMgQk9PU1RfUFBfVFVQTEVf
RUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQ
TEVfRUFUXzIpKDQwLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzQwX0MoYywgcCwgbywg
cykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzQxLCBzIEJPT1NUX1BQX1RVUExFX0VB
VF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExF
X0VBVF8yKSg0MSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV80MV9DKGMsIHAsIG8sIHMp
IEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV80MiwgcyBCT09TVF9QUF9UVVBMRV9FQVRf
MykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9F
QVRfMikoNDIsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNDJfQyhjLCBwLCBvLCBzKSBC
T09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfNDMsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMp
KHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFU
XzIpKDQzLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzQzX0MoYywgcCwgbywgcykgQk9P
U1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzQ0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShw
LCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8y
KSg0NCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV80NF9DKGMsIHAsIG8sIHMpIEJPT1NU
X1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV80NSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwg
bywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMiko
NDUsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNDVfQyhjLCBwLCBvLCBzKSBCT09TVF9Q
UF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfNDYsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8s
IEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDQ2
LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzQ2X0MoYywgcCwgbywgcykgQk9PU1RfUFBf
SUlGKGMsIEJPT1NUX1BQX1dISUxFXzQ3LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBC
T09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg0Nywg
cykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV80N19DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJ
RihjLCBCT09TVF9QUF9XSElMRV80OCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9P
U1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNDgsIHMp
KQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNDhfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYo
YywgQk9PU1RfUFBfV0hJTEVfNDksIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NU
X1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDQ5LCBzKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzQ5X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMs
IEJPT1NUX1BQX1dISUxFXzUwLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9Q
UF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg1MCwgcykpCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV81MF9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBC
T09TVF9QUF9XSElMRV81MSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBf
SUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNTEsIHMpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfV0hJTEVfNTFfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9P
U1RfUFBfV0hJTEVfNTIsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJ
RihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDUyLCBzKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX1dISUxFXzUyX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NU
X1BQX1dISUxFXzUzLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYo
YywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg1MywgcykpCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV81M19DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9Q
UF9XSElMRV81NCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMs
IG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNTQsIHMpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfV0hJTEVfNTRfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBf
V0hJTEVfNTUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBv
LCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDU1LCBzKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX1dISUxFXzU1X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dI
SUxFXzU2LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywg
Qk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg1NiwgcykpCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV81Nl9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElM
RV81NywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJP
T1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNTcsIHMpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfV0hJTEVfNTdfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVf
NTgsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09T
VF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDU4LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1dISUxFXzU4X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzU5
LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1Rf
UFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg1OSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV81OV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV82MCwg
cyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQ
X05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNjAsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJ
TEVfNjBfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfNjEsIHMg
Qk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9O
SUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDYxLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxF
XzYxX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzYyLCBzIEJP
T1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklM
IEJPT1NUX1BQX1RVUExFX0VBVF8yKSg2MiwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV82
Ml9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV82MywgcyBCT09T
VF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBC
T09TVF9QUF9UVVBMRV9FQVRfMikoNjMsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNjNf
QyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfNjQsIHMgQk9PU1Rf
UFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9P
U1RfUFBfVFVQTEVfRUFUXzIpKDY0LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzY0X0Mo
YywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzY1LCBzIEJPT1NUX1BQ
X1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NU
X1BQX1RVUExFX0VBVF8yKSg2NSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV82NV9DKGMs
IHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV82NiwgcyBCT09TVF9QUF9U
VVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9Q
UF9UVVBMRV9FQVRfMikoNjYsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNjZfQyhjLCBw
LCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfNjcsIHMgQk9PU1RfUFBfVFVQ
TEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBf
VFVQTEVfRUFUXzIpKDY3LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzY3X0MoYywgcCwg
bywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzY4LCBzIEJPT1NUX1BQX1RVUExF
X0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RV
UExFX0VBVF8yKSg2OCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV82OF9DKGMsIHAsIG8s
IHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV82OSwgcyBCT09TVF9QUF9UVVBMRV9F
QVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBM
RV9FQVRfMikoNjksIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNjlfQyhjLCBwLCBvLCBz
KSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfNzAsIHMgQk9PU1RfUFBfVFVQTEVfRUFU
XzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVf
RUFUXzIpKDcwLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzcwX0MoYywgcCwgbywgcykg
Qk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzcxLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8z
KShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VB
VF8yKSg3MSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV83MV9DKGMsIHAsIG8sIHMpIEJP
T1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV83MiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMyko
cCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRf
MikoNzIsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNzJfQyhjLCBwLCBvLCBzKSBCT09T
VF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfNzMsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAs
IG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIp
KDczLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzczX0MoYywgcCwgbywgcykgQk9PU1Rf
UFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzc0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBv
LCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg3
NCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV83NF9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQ
X0lJRihjLCBCT09TVF9QUF9XSElMRV83NSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywg
Qk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNzUs
IHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNzVfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9J
SUYoYywgQk9PU1RfUFBfV0hJTEVfNzYsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJP
T1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDc2LCBz
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzc2X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlG
KGMsIEJPT1NUX1BQX1dISUxFXzc3LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09T
VF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg3Nywgcykp
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV83N19DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihj
LCBCT09TVF9QUF9XSElMRV83OCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1Rf
UFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNzgsIHMpKQot
IyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfNzhfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywg
Qk9PU1RfUFBfV0hJTEVfNzksIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQ
X0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDc5LCBzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFXzc5X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJP
T1NUX1BQX1dISUxFXzgwLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9J
SUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg4MCwgcykpCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV84MF9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09T
VF9QUF9XSElMRV84MSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlG
KGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoODEsIHMpKQotIyBkZWZp
bmUgQk9PU1RfUFBfV0hJTEVfODFfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1Rf
UFBfV0hJTEVfODIsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihj
LCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDgyLCBzKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1dISUxFXzgyX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQ
X1dISUxFXzgzLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywg
bywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg4MywgcykpCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV84M19DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9X
SElMRV84NCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8s
IEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoODQsIHMpKQotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfODRfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJ
TEVfODUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBC
T09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDg1LCBzKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX1dISUxFXzg1X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxF
Xzg2LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9P
U1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg4NiwgcykpCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV84Nl9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV84
NywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NU
X1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoODcsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBf
V0hJTEVfODdfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfODgs
IHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9Q
UF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDg4LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFXzg4X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzg5LCBz
IEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBf
TklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg4OSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV84OV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV85MCwgcyBC
T09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05J
TCBCT09TVF9QUF9UVVBMRV9FQVRfMikoOTAsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVf
OTBfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfOTEsIHMgQk9P
U1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwg
Qk9PU1RfUFBfVFVQTEVfRUFUXzIpKDkxLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzkx
X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzkyLCBzIEJPT1NU
X1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJP
T1NUX1BQX1RVUExFX0VBVF8yKSg5MiwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV85Ml9D
KGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV85MywgcyBCT09TVF9Q
UF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09T
VF9QUF9UVVBMRV9FQVRfMikoOTMsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfOTNfQyhj
LCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfOTQsIHMgQk9PU1RfUFBf
VFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1Rf
UFBfVFVQTEVfRUFUXzIpKDk0LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzk0X0MoYywg
cCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzk1LCBzIEJPT1NUX1BQX1RV
UExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQ
X1RVUExFX0VBVF8yKSg5NSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV85NV9DKGMsIHAs
IG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV85NiwgcyBCT09TVF9QUF9UVVBM
RV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9U
VVBMRV9FQVRfMikoOTYsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfOTZfQyhjLCBwLCBv
LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfOTcsIHMgQk9PU1RfUFBfVFVQTEVf
RUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQ
TEVfRUFUXzIpKDk3LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzk3X0MoYywgcCwgbywg
cykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzk4LCBzIEJPT1NUX1BQX1RVUExFX0VB
VF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExF
X0VBVF8yKSg5OCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV85OF9DKGMsIHAsIG8sIHMp
IEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV85OSwgcyBCT09TVF9QUF9UVVBMRV9FQVRf
MykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9F
QVRfMikoOTksIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfOTlfQyhjLCBwLCBvLCBzKSBC
T09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTAwLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8z
KShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VB
VF8yKSgxMDAsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTAwX0MoYywgcCwgbywgcykg
Qk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzEwMSwgcyBCT09TVF9QUF9UVVBMRV9FQVRf
MykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9F
QVRfMikoMTAxLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzEwMV9DKGMsIHAsIG8sIHMp
IEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xMDIsIHMgQk9PU1RfUFBfVFVQTEVfRUFU
XzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVf
RUFUXzIpKDEwMiwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xMDJfQyhjLCBwLCBvLCBz
KSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTAzLCBzIEJPT1NUX1BQX1RVUExFX0VB
VF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExF
X0VBVF8yKSgxMDMsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTAzX0MoYywgcCwgbywg
cykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzEwNCwgcyBCT09TVF9QUF9UVVBMRV9F
QVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBM
RV9FQVRfMikoMTA0LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzEwNF9DKGMsIHAsIG8s
IHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xMDUsIHMgQk9PU1RfUFBfVFVQTEVf
RUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQ
TEVfRUFUXzIpKDEwNSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xMDVfQyhjLCBwLCBv
LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTA2LCBzIEJPT1NUX1BQX1RVUExF
X0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RV
UExFX0VBVF8yKSgxMDYsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTA2X0MoYywgcCwg
bywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzEwNywgcyBCT09TVF9QUF9UVVBM
RV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9U
VVBMRV9FQVRfMikoMTA3LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzEwN19DKGMsIHAs
IG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xMDgsIHMgQk9PU1RfUFBfVFVQ
TEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBf
VFVQTEVfRUFUXzIpKDEwOCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xMDhfQyhjLCBw
LCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTA5LCBzIEJPT1NUX1BQX1RV
UExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQ
X1RVUExFX0VBVF8yKSgxMDksIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTA5X0MoYywg
cCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzExMCwgcyBCT09TVF9QUF9U
VVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9Q
UF9UVVBMRV9FQVRfMikoMTEwLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzExMF9DKGMs
IHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xMTEsIHMgQk9PU1RfUFBf
VFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1Rf
UFBfVFVQTEVfRUFUXzIpKDExMSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xMTFfQyhj
LCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTEyLCBzIEJPT1NUX1BQ
X1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NU
X1BQX1RVUExFX0VBVF8yKSgxMTIsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTEyX0Mo
YywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzExMywgcyBCT09TVF9Q
UF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09T
VF9QUF9UVVBMRV9FQVRfMikoMTEzLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzExM19D
KGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xMTQsIHMgQk9PU1Rf
UFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9P
U1RfUFBfVFVQTEVfRUFUXzIpKDExNCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xMTRf
QyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTE1LCBzIEJPT1NU
X1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJP
T1NUX1BQX1RVUExFX0VBVF8yKSgxMTUsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTE1
X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzExNiwgcyBCT09T
VF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBC
T09TVF9QUF9UVVBMRV9FQVRfMikoMTE2LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzEx
Nl9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xMTcsIHMgQk9P
U1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwg
Qk9PU1RfUFBfVFVQTEVfRUFUXzIpKDExNywgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8x
MTdfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTE4LCBzIEJP
T1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklM
IEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMTgsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVf
MTE4X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzExOSwgcyBC
T09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05J
TCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTE5LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxF
XzExOV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xMjAsIHMg
Qk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9O
SUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEyMCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV8xMjBfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTIxLCBz
IEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBf
TklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMjEsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJ
TEVfMTIxX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzEyMiwg
cyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQ
X05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTIyLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFXzEyMl9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xMjMs
IHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9Q
UF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEyMywgcykpCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV8xMjNfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTI0
LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1Rf
UFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMjQsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBf
V0hJTEVfMTI0X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzEy
NSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NU
X1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTI1LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1dISUxFXzEyNV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8x
MjYsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09T
VF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEyNiwgcykpCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV8xMjZfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVf
MTI3LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9P
U1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMjcsIHMpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfV0hJTEVfMTI3X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxF
XzEyOCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJP
T1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTI4LCBzKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX1dISUxFXzEyOF9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElM
RV8xMjksIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBC
T09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEyOSwgcykpCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV8xMjlfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJ
TEVfMTMwLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywg
Qk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMzAsIHMpKQotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfMTMwX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dI
SUxFXzEzMSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8s
IEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTMxLCBzKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX1dISUxFXzEzMV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9X
SElMRV8xMzIsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBv
LCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEzMiwgcykpCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV8xMzJfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBf
V0hJTEVfMTMzLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywg
bywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMzMsIHMpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfV0hJTEVfMTMzX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQ
X1dISUxFXzEzNCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMs
IG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTM0LCBzKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1dISUxFXzEzNF9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9Q
UF9XSElMRV8xMzUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihj
LCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEzNSwgcykpCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV8xMzVfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1Rf
UFBfV0hJTEVfMTM2LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYo
YywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMzYsIHMpKQotIyBkZWZp
bmUgQk9PU1RfUFBfV0hJTEVfMTM2X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NU
X1BQX1dISUxFXzEzNywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlG
KGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTM3LCBzKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX1dISUxFXzEzN19DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09T
VF9QUF9XSElMRV8xMzgsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJ
RihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEzOCwgcykpCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV8xMzhfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9P
U1RfUFBfV0hJTEVfMTM5LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9J
SUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMzksIHMpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTM5X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJP
T1NUX1BQX1dISUxFXzE0MCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBf
SUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTQwLCBzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE0MF9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBC
T09TVF9QUF9XSElMRV8xNDEsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQ
X0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE0MSwgcykpCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV8xNDFfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywg
Qk9PU1RfUFBfV0hJTEVfMTQyLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9Q
UF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxNDIsIHMpKQot
IyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTQyX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMs
IEJPT1NUX1BQX1dISUxFXzE0MywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1Rf
UFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTQzLCBzKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE0M19DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihj
LCBCT09TVF9QUF9XSElMRV8xNDQsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NU
X1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE0NCwgcykp
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNDRfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYo
YywgQk9PU1RfUFBfV0hJTEVfMTQ1LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09T
VF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxNDUsIHMp
KQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTQ1X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlG
KGMsIEJPT1NUX1BQX1dISUxFXzE0NiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9P
U1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTQ2LCBz
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE0Nl9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJ
RihjLCBCT09TVF9QUF9XSElMRV8xNDcsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJP
T1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE0Nywg
cykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNDdfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9J
SUYoYywgQk9PU1RfUFBfV0hJTEVfMTQ4LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBC
T09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxNDgs
IHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTQ4X0MoYywgcCwgbywgcykgQk9PU1RfUFBf
SUlGKGMsIEJPT1NUX1BQX1dISUxFXzE0OSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywg
Qk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTQ5
LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE0OV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQ
X0lJRihjLCBCT09TVF9QUF9XSElMRV8xNTAsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8s
IEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE1
MCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNTBfQyhjLCBwLCBvLCBzKSBCT09TVF9Q
UF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTUxLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBv
LCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgx
NTEsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTUxX0MoYywgcCwgbywgcykgQk9PU1Rf
UFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzE1MiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwg
bywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMiko
MTUyLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE1Ml9DKGMsIHAsIG8sIHMpIEJPT1NU
X1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xNTMsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAs
IG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIp
KDE1MywgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNTNfQyhjLCBwLCBvLCBzKSBCT09T
VF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTU0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShw
LCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8y
KSgxNTQsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTU0X0MoYywgcCwgbywgcykgQk9P
U1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzE1NSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMyko
cCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRf
MikoMTU1LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE1NV9DKGMsIHAsIG8sIHMpIEJP
T1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xNTYsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMp
KHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFU
XzIpKDE1NiwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNTZfQyhjLCBwLCBvLCBzKSBC
T09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTU3LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8z
KShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VB
VF8yKSgxNTcsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTU3X0MoYywgcCwgbywgcykg
Qk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzE1OCwgcyBCT09TVF9QUF9UVVBMRV9FQVRf
MykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9F
QVRfMikoMTU4LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE1OF9DKGMsIHAsIG8sIHMp
IEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xNTksIHMgQk9PU1RfUFBfVFVQTEVfRUFU
XzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVf
RUFUXzIpKDE1OSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNTlfQyhjLCBwLCBvLCBz
KSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTYwLCBzIEJPT1NUX1BQX1RVUExFX0VB
VF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExF
X0VBVF8yKSgxNjAsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTYwX0MoYywgcCwgbywg
cykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzE2MSwgcyBCT09TVF9QUF9UVVBMRV9F
QVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBM
RV9FQVRfMikoMTYxLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE2MV9DKGMsIHAsIG8s
IHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xNjIsIHMgQk9PU1RfUFBfVFVQTEVf
RUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQ
TEVfRUFUXzIpKDE2MiwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNjJfQyhjLCBwLCBv
LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTYzLCBzIEJPT1NUX1BQX1RVUExF
X0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RV
UExFX0VBVF8yKSgxNjMsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTYzX0MoYywgcCwg
bywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzE2NCwgcyBCT09TVF9QUF9UVVBM
RV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9U
VVBMRV9FQVRfMikoMTY0LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE2NF9DKGMsIHAs
IG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xNjUsIHMgQk9PU1RfUFBfVFVQ
TEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBf
VFVQTEVfRUFUXzIpKDE2NSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNjVfQyhjLCBw
LCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTY2LCBzIEJPT1NUX1BQX1RV
UExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQ
X1RVUExFX0VBVF8yKSgxNjYsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTY2X0MoYywg
cCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzE2NywgcyBCT09TVF9QUF9U
VVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9Q
UF9UVVBMRV9FQVRfMikoMTY3LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE2N19DKGMs
IHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xNjgsIHMgQk9PU1RfUFBf
VFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1Rf
UFBfVFVQTEVfRUFUXzIpKDE2OCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNjhfQyhj
LCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTY5LCBzIEJPT1NUX1BQ
X1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NU
X1BQX1RVUExFX0VBVF8yKSgxNjksIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTY5X0Mo
YywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzE3MCwgcyBCT09TVF9Q
UF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09T
VF9QUF9UVVBMRV9FQVRfMikoMTcwLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE3MF9D
KGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xNzEsIHMgQk9PU1Rf
UFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9P
U1RfUFBfVFVQTEVfRUFUXzIpKDE3MSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8xNzFf
QyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTcyLCBzIEJPT1NU
X1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJP
T1NUX1BQX1RVUExFX0VBVF8yKSgxNzIsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTcy
X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzE3MywgcyBCT09T
VF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBC
T09TVF9QUF9UVVBMRV9FQVRfMikoMTczLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE3
M19DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xNzQsIHMgQk9P
U1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwg
Qk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE3NCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8x
NzRfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTc1LCBzIEJP
T1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklM
IEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxNzUsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVf
MTc1X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzE3NiwgcyBC
T09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05J
TCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTc2LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxF
XzE3Nl9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xNzcsIHMg
Qk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9O
SUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE3NywgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV8xNzdfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTc4LCBz
IEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBf
TklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxNzgsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJ
TEVfMTc4X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzE3OSwg
cyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQ
X05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTc5LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFXzE3OV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8xODAs
IHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9Q
UF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE4MCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV8xODBfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMTgx
LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1Rf
UFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxODEsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBf
V0hJTEVfMTgxX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzE4
MiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NU
X1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTgyLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1dISUxFXzE4Ml9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8x
ODMsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09T
VF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE4MywgcykpCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV8xODNfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVf
MTg0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9P
U1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxODQsIHMpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfV0hJTEVfMTg0X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxF
XzE4NSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJP
T1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTg1LCBzKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX1dISUxFXzE4NV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElM
RV8xODYsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBC
T09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE4NiwgcykpCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV8xODZfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJ
TEVfMTg3LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywg
Qk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxODcsIHMpKQotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfMTg3X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dI
SUxFXzE4OCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8s
IEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTg4LCBzKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX1dISUxFXzE4OF9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9X
SElMRV8xODksIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBv
LCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE4OSwgcykpCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV8xODlfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBf
V0hJTEVfMTkwLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywg
bywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxOTAsIHMpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfV0hJTEVfMTkwX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQ
X1dISUxFXzE5MSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMs
IG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTkxLCBzKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1dISUxFXzE5MV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9Q
UF9XSElMRV8xOTIsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihj
LCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE5MiwgcykpCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV8xOTJfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1Rf
UFBfV0hJTEVfMTkzLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYo
YywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxOTMsIHMpKQotIyBkZWZp
bmUgQk9PU1RfUFBfV0hJTEVfMTkzX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NU
X1BQX1dISUxFXzE5NCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlG
KGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTk0LCBzKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX1dISUxFXzE5NF9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09T
VF9QUF9XSElMRV8xOTUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJ
RihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE5NSwgcykpCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV8xOTVfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9P
U1RfUFBfV0hJTEVfMTk2LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9J
SUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxOTYsIHMpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTk2X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJP
T1NUX1BQX1dISUxFXzE5NywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBf
SUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTk3LCBzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFXzE5N19DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBC
T09TVF9QUF9XSElMRV8xOTgsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQ
X0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE5OCwgcykpCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV8xOThfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywg
Qk9PU1RfUFBfV0hJTEVfMTk5LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9Q
UF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxOTksIHMpKQot
IyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMTk5X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMs
IEJPT1NUX1BQX1dISUxFXzIwMCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1Rf
UFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjAwLCBzKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIwMF9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihj
LCBCT09TVF9QUF9XSElMRV8yMDEsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NU
X1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIwMSwgcykp
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMDFfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYo
YywgQk9PU1RfUFBfV0hJTEVfMjAyLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09T
VF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyMDIsIHMp
KQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjAyX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlG
KGMsIEJPT1NUX1BQX1dISUxFXzIwMywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9P
U1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjAzLCBz
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIwM19DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJ
RihjLCBCT09TVF9QUF9XSElMRV8yMDQsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJP
T1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIwNCwg
cykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMDRfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9J
SUYoYywgQk9PU1RfUFBfV0hJTEVfMjA1LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBC
T09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyMDUs
IHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjA1X0MoYywgcCwgbywgcykgQk9PU1RfUFBf
SUlGKGMsIEJPT1NUX1BQX1dISUxFXzIwNiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywg
Qk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjA2
LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIwNl9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQ
X0lJRihjLCBCT09TVF9QUF9XSElMRV8yMDcsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8s
IEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIw
NywgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMDdfQyhjLCBwLCBvLCBzKSBCT09TVF9Q
UF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMjA4LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBv
LCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgy
MDgsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjA4X0MoYywgcCwgbywgcykgQk9PU1Rf
UFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzIwOSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwg
bywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMiko
MjA5LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIwOV9DKGMsIHAsIG8sIHMpIEJPT1NU
X1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8yMTAsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAs
IG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIp
KDIxMCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMTBfQyhjLCBwLCBvLCBzKSBCT09T
VF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMjExLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShw
LCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8y
KSgyMTEsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjExX0MoYywgcCwgbywgcykgQk9P
U1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzIxMiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMyko
cCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRf
MikoMjEyLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIxMl9DKGMsIHAsIG8sIHMpIEJP
T1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8yMTMsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMp
KHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFU
XzIpKDIxMywgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMTNfQyhjLCBwLCBvLCBzKSBC
T09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMjE0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8z
KShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VB
VF8yKSgyMTQsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjE0X0MoYywgcCwgbywgcykg
Qk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzIxNSwgcyBCT09TVF9QUF9UVVBMRV9FQVRf
MykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9F
QVRfMikoMjE1LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIxNV9DKGMsIHAsIG8sIHMp
IEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8yMTYsIHMgQk9PU1RfUFBfVFVQTEVfRUFU
XzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVf
RUFUXzIpKDIxNiwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMTZfQyhjLCBwLCBvLCBz
KSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMjE3LCBzIEJPT1NUX1BQX1RVUExFX0VB
VF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExF
X0VBVF8yKSgyMTcsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjE3X0MoYywgcCwgbywg
cykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzIxOCwgcyBCT09TVF9QUF9UVVBMRV9F
QVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBM
RV9FQVRfMikoMjE4LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIxOF9DKGMsIHAsIG8s
IHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8yMTksIHMgQk9PU1RfUFBfVFVQTEVf
RUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQ
TEVfRUFUXzIpKDIxOSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMTlfQyhjLCBwLCBv
LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMjIwLCBzIEJPT1NUX1BQX1RVUExF
X0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RV
UExFX0VBVF8yKSgyMjAsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjIwX0MoYywgcCwg
bywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzIyMSwgcyBCT09TVF9QUF9UVVBM
RV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9U
VVBMRV9FQVRfMikoMjIxLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIyMV9DKGMsIHAs
IG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8yMjIsIHMgQk9PU1RfUFBfVFVQ
TEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBf
VFVQTEVfRUFUXzIpKDIyMiwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMjJfQyhjLCBw
LCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMjIzLCBzIEJPT1NUX1BQX1RV
UExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQ
X1RVUExFX0VBVF8yKSgyMjMsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjIzX0MoYywg
cCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzIyNCwgcyBCT09TVF9QUF9U
VVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9Q
UF9UVVBMRV9FQVRfMikoMjI0LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIyNF9DKGMs
IHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8yMjUsIHMgQk9PU1RfUFBf
VFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1Rf
UFBfVFVQTEVfRUFUXzIpKDIyNSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMjVfQyhj
LCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMjI2LCBzIEJPT1NUX1BQ
X1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NU
X1BQX1RVUExFX0VBVF8yKSgyMjYsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjI2X0Mo
YywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzIyNywgcyBCT09TVF9Q
UF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09T
VF9QUF9UVVBMRV9FQVRfMikoMjI3LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIyN19D
KGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8yMjgsIHMgQk9PU1Rf
UFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9P
U1RfUFBfVFVQTEVfRUFUXzIpKDIyOCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8yMjhf
QyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMjI5LCBzIEJPT1NU
X1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJP
T1NUX1BQX1RVUExFX0VBVF8yKSgyMjksIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjI5
X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzIzMCwgcyBCT09T
VF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBC
T09TVF9QUF9UVVBMRV9FQVRfMikoMjMwLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFXzIz
MF9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8yMzEsIHMgQk9P
U1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9OSUwg
Qk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIzMSwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV8y
MzFfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMjMyLCBzIEJP
T1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBfTklM
IEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyMzIsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVf
MjMyX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzIzMywgcyBC
T09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQX05J
TCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjMzLCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxF
XzIzM19DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8yMzQsIHMg
Qk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9QUF9O
SUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIzNCwgcykpCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV8yMzRfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMjM1LCBz
IEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1RfUFBf
TklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyMzUsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBfV0hJ
TEVfMjM1X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzIzNiwg
cyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NUX1BQ
X05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjM2LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFXzIzNl9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8yMzcs
IHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09TVF9Q
UF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIzNywgcykpCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV8yMzdfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVfMjM4
LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9PU1Rf
UFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyMzgsIHMpKQotIyBkZWZpbmUgQk9PU1RfUFBf
V0hJTEVfMjM4X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxFXzIz
OSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJPT1NU
X1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjM5LCBzKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1dISUxFXzIzOV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElMRV8y
NDAsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBCT09T
VF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDI0MCwgcykpCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV8yNDBfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJTEVf
MjQxLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywgQk9P
U1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyNDEsIHMpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfV0hJTEVfMjQxX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dISUxF
XzI0MiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8sIEJP
T1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjQyLCBzKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX1dISUxFXzI0Ml9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9XSElM
RV8yNDMsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBvLCBC
T09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDI0MywgcykpCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV8yNDNfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfV0hJ
TEVfMjQ0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywgbywg
Qk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyNDQsIHMpKQotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfMjQ0X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX1dI
SUxFXzI0NSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMsIG8s
IEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjQ1LCBzKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX1dISUxFXzI0NV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9X
SElMRV8yNDYsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihjLCBv
LCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDI0NiwgcykpCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV8yNDZfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBf
V0hJTEVfMjQ3LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYoYywg
bywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyNDcsIHMpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfV0hJTEVfMjQ3X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQ
X1dISUxFXzI0OCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlGKGMs
IG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjQ4LCBzKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1dISUxFXzI0OF9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9Q
UF9XSElMRV8yNDksIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJRihj
LCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDI0OSwgcykpCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV8yNDlfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1Rf
UFBfV0hJTEVfMjUwLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9JSUYo
YywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyNTAsIHMpKQotIyBkZWZp
bmUgQk9PU1RfUFBfV0hJTEVfMjUwX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NU
X1BQX1dISUxFXzI1MSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBfSUlG
KGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjUxLCBzKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX1dISUxFXzI1MV9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBCT09T
VF9QUF9XSElMRV8yNTIsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQX0lJ
RihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDI1MiwgcykpCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV8yNTJfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywgQk9P
U1RfUFBfV0hJTEVfMjUzLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9QUF9J
SUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyNTMsIHMpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjUzX0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMsIEJP
T1NUX1BQX1dISUxFXzI1NCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1RfUFBf
SUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjU0LCBzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFXzI1NF9DKGMsIHAsIG8sIHMpIEJPT1NUX1BQX0lJRihjLCBC
T09TVF9QUF9XSElMRV8yNTUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKHAsIG8sIEJPT1NUX1BQ
X0lJRihjLCBvLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDI1NSwgcykpCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV8yNTVfQyhjLCBwLCBvLCBzKSBCT09TVF9QUF9JSUYoYywg
Qk9PU1RfUFBfV0hJTEVfMjU2LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShwLCBvLCBCT09TVF9Q
UF9JSUYoYywgbywgQk9PU1RfUFBfTklMIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyNTYsIHMpKQot
IyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfMjU2X0MoYywgcCwgbywgcykgQk9PU1RfUFBfSUlGKGMs
IEJPT1NUX1BQX1dISUxFXzI1NywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykocCwgbywgQk9PU1Rf
UFBfSUlGKGMsIG8sIEJPT1NUX1BQX05JTCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjU3LCBzKSkK
LSMKLSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9jb250cm9sL2V4cHJfaWlmLmhwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9jb250cm9sL2V4
cHJfaWlmLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThmNDVhNDhmNWU3YTQ2
MDQ0ZDc0NGQ0MGY2YTRkMWE5NWE1MjMzNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9wcmVwcm9jZXNzb3IvY29udHJvbC9leHByX2lpZi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
MSArMCwwIEBACi0jIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
Ci0jICAqICAgICAoQykgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyLgotIyAgKiAgICAg
RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4w
LiAoU2VlCi0jICAqICAgICBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29w
eSBhdAotIyAgKiAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotIyAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKgotIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLSMKLSMgLyogU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBp
Zm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX0NPTlRST0xfRVhQUl9JSUZfSFBQCi0jIGRlZmluZSBC
T09TVF9QUkVQUk9DRVNTT1JfQ09OVFJPTF9FWFBSX0lJRl9IUFAKLSMKLSMgaW5jbHVkZSA8Ym9v
c3QvcHJlcHJvY2Vzc29yL2NvbmZpZy9jb25maWcuaHBwPgotIwotIyAvKiBCT09TVF9QUF9FWFBS
X0lJRiAqLwotIwotIyBpZiB+Qk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05G
SUdfTVdDQygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9FWFBSX0lJRihiaXQsIGV4cHIpIEJPT1NU
X1BQX0VYUFJfSUlGX0koYml0LCBleHByKQotIyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9QUF9F
WFBSX0lJRihiaXQsIGV4cHIpIEJPT1NUX1BQX0VYUFJfSUlGX09PKChiaXQsIGV4cHIpKQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfRVhQUl9JSUZfT08ocGFyKSBCT09TVF9QUF9FWFBSX0lJRl9JICMj
IHBhcgotIyBlbmRpZgotIwotIyBkZWZpbmUgQk9PU1RfUFBfRVhQUl9JSUZfSShiaXQsIGV4cHIp
IEJPT1NUX1BQX0VYUFJfSUlGXyAjIyBiaXQoZXhwcikKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX0VY
UFJfSUlGXzAoZXhwcikKLSMgZGVmaW5lIEJPT1NUX1BQX0VYUFJfSUlGXzEoZXhwcikgZXhwcgot
IwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcHJlcHJvY2Vzc29yL2NvbnRyb2wvaWYuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2NvbnRyb2wvaWYuaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmNmYzNkYWJiMTUyNWVhYzgyODliZDNhNjAwMGRk
ZWM1MTlhNzRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9j
b250cm9sL2lmLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMgLyogQ29weXJp
Z2h0IChDKSAyMDAxCi0jICAqIEhvdXNlbWFycXVlIE95Ci0jICAqIGh0dHA6Ly93d3cuaG91c2Vt
YXJxdWUuY29tCi0jICAqCi0jICAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0jICAqLwotIwotIyAvKiBSZXZpc2VkIGJ5IFBhdWwgTWVuc29uaWRlcyAoMjAw
MikgKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2
ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX0NPTlRST0xfSUZfSFBQ
Ci0jIGRlZmluZSBCT09TVF9QUkVQUk9DRVNTT1JfQ09OVFJPTF9JRl9IUFAKLSMKLSMgaW5jbHVk
ZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbmZpZy9jb25maWcuaHBwPgotIyBpbmNsdWRlIDxib29z
dC9wcmVwcm9jZXNzb3IvY29udHJvbC9paWYuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9j
ZXNzb3IvbG9naWNhbC9ib29sLmhwcD4KLSMKLSMgLyogQk9PU1RfUFBfSUYgKi8KLSMKLSMgaWYg
fkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX0VERygpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9JRihjb25kLCB0LCBmKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfQk9PTChj
b25kKSwgdCwgZikKLSMgZWxzZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfSUYoY29uZCwgdCwgZikg
Qk9PU1RfUFBfSUZfSShjb25kLCB0LCBmKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfSUZfSShjb25k
LCB0LCBmKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfQk9PTChjb25kKSwgdCwgZikKLSMgZW5kaWYK
LSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9jb250cm9sL2lpZi5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvY29udHJvbC9paWYuaHBwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDA3ODE3OTNmYTM0MGIxNGYxZDZlYWQ3NTZi
ZjMzZDBkOWMzOTg1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nv
ci9jb250cm9sL2lpZi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIC8qICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCi0jICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0jICAqICAgICAoQykgQ29w
eXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyLgotIyAgKiAgICAgRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqICAgICBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiAgICAgaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotIyAgKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KgotIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiogKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJP
Q0VTU09SX0NPTlRST0xfSUlGX0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX0NPTlRS
T0xfSUlGX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29uZmlnL2NvbmZp
Zy5ocHA+Ci0jCi0jIGlmIH5CT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJ
R19NV0NDKCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0lJRihiaXQsIHQsIGYpIEJPT1NUX1BQX0lJ
Rl9JKGJpdCwgdCwgZikKLSMgZWxzZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfSUlGKGJpdCwgdCwg
ZikgQk9PU1RfUFBfSUlGX09PKChiaXQsIHQsIGYpKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfSUlG
X09PKHBhcikgQk9PU1RfUFBfSUlGX0kgIyMgcGFyCi0jIGVuZGlmCi0jCi0jIGlmIH5CT09TVF9Q
UF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19NU1ZDKCkKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX0lJRl9JKGJpdCwgdCwgZikgQk9PU1RfUFBfSUlGXyAjIyBiaXQodCwgZikKLSMgZWxz
ZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfSUlGX0koYml0LCB0LCBmKSBCT09TVF9QUF9JSUZfSUko
Qk9PU1RfUFBfSUlGXyAjIyBiaXQodCwgZikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9JSUZfSUko
aWQpIGlkCi0jIGVuZGlmCi0jCi0jIGRlZmluZSBCT09TVF9QUF9JSUZfMCh0LCBmKSBmCi0jIGRl
ZmluZSBCT09TVF9QUF9JSUZfMSh0LCBmKSB0Ci0jCi0jIGVuZGlmCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvY29udHJv
bC93aGlsZS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9w
cmVwcm9jZXNzb3IvY29udHJvbC93aGlsZS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGU4YTY1ZmZmYzczNGIwNzQ4MmYwZmViYWUxZGQ4Nzk3OGJlNTFlOWMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2NvbnRyb2wvd2hpbGUuaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLSMgLyogQ29weXJpZ2h0IChDKSAyMDAxCi0jICAq
IEhvdXNlbWFycXVlIE95Ci0jICAqIGh0dHA6Ly93d3cuaG91c2VtYXJxdWUuY29tCi0jICAqCi0j
ICAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4gKFNlZQotIyAgKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29w
eSBhdAotIyAgKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqLwot
IwotIyAvKiBSZXZpc2VkIGJ5IFBhdWwgTWVuc29uaWRlcyAoMjAwMikgKi8KLSMKLSMgLyogU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBp
Zm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX0NPTlRST0xfV0hJTEVfSFBQCi0jIGRlZmluZSBCT09T
VF9QUkVQUk9DRVNTT1JfQ09OVFJPTF9XSElMRV9IUFAKLSMKLSMgaW5jbHVkZSA8Ym9vc3QvcHJl
cHJvY2Vzc29yL2NhdC5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb25maWcv
Y29uZmlnLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2RlYnVnL2Vycm9yLmhw
cD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2RldGFpbC9hdXRvX3JlYy5ocHA+Ci0j
IGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2ZvbGRfbGVmdC5ocHA+Ci0jIGluY2x1
ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2ZvbGRfcmlnaHQuaHBwPgotIyBpbmNsdWRlIDxi
b29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9iaXRhbmQuaHBwPgotIwotIyAvKiBCT09TVF9QUF9X
SElMRSAqLwotIwotIyBpZiAwCi0jICAgIGRlZmluZSBCT09TVF9QUF9XSElMRShwcmVkLCBvcCwg
c3RhdGUpCi0jIGVuZGlmCi0jCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRSBCT09TVF9QUF9DQVQo
Qk9PU1RfUFBfV0hJTEVfLCBCT09TVF9QUF9BVVRPX1JFQyhCT09TVF9QUF9XSElMRV9QLCAyNTYp
KQotIwotIyBpZiBCT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19FREco
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfUChuKSBCT09TVF9QUF9CSVRBTkQoQk9PU1Rf
UFBfQ0FUKEJPT1NUX1BQX1dISUxFX0NIRUNLXywgQk9PU1RfUFBfV0hJTEVfICMjIG4oQk9PU1Rf
UFBfV0hJTEVfRiwgQk9PU1RfUFBfTklMLCBCT09TVF9QUF9OSUwpKSwgQk9PU1RfUFBfQklUQU5E
KEJPT1NUX1BQX0NBVChCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS18sIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXyAjIyBuKEJPT1NUX1BQX05JTCwgQk9PU1RfUFBfTklMLCBCT09TVF9QUF9O
SUwpKSwgQk9PU1RfUFBfQ0FUKEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF9DSEVDS18sIEJPT1NU
X1BQX0xJU1RfRk9MRF9SSUdIVF8gIyMgbihCT09TVF9QUF9OSUwsIEJPT1NUX1BQX05JTCwgQk9P
U1RfUFBfTklMKSkpKQotIyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9QUF9XSElMRV9QKG4pIEJP
T1NUX1BQX0JJVEFORChCT09TVF9QUF9DQVQoQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfLCBCT09TVF9Q
UF9XSElMRV8gIyMgbihCT09TVF9QUF9XSElMRV9GLCBCT09TVF9QUF9OSUwsIEJPT1NUX1BQX05J
TCkpLCBCT09TVF9QUF9DQVQoQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfLCBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8gIyMgbihCT09TVF9QUF9OSUwsIEJPT1NUX1BQX05JTCwgQk9PU1Rf
UFBfTklMKSkpCi0jIGVuZGlmCi0jCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9GKGQsIF8pIDAK
LSMKLSMgaWYgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdfRURHKCkK
LSMgICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbnRyb2wvZGV0YWlsL2VkZy93aGls
ZS5ocHA+Ci0jIGVsaWYgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdf
TVNWQygpCi0jICAgIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb250cm9sL2RldGFpbC9t
c3ZjL3doaWxlLmhwcD4KLSMgZWxpZiBCT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQ
X0NPTkZJR19ETUMoKQotIyAgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29udHJvbC9k
ZXRhaWwvZG1jL3doaWxlLmhwcD4KLSMgZWxzZQotIyAgICBpbmNsdWRlIDxib29zdC9wcmVwcm9j
ZXNzb3IvY29udHJvbC9kZXRhaWwvd2hpbGUuaHBwPgotIyBlbmRpZgotIwotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfMjU3KHAsIG8sIHMpIEJPT1NUX1BQX0VSUk9SKDB4MDAwMSkKLSMKLSMgZGVm
aW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX05JTCAxCi0jCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xKHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzIocCwgbywgcykgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMyhwLCBvLCBzKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV80KHAsIG8sIHMpIDAKLSMgZGVm
aW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzUocCwgbywgcykgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfNihwLCBvLCBzKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV83KHAsIG8sIHMpIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzgocCwgbywgcykg
MAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfOShwLCBvLCBz
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xMChwLCBv
LCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xMShw
LCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8x
MihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElM
RV8xMyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9X
SElMRV8xNChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9Q
UF9XSElMRV8xNShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09T
VF9QUF9XSElMRV8xNihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19C
T09TVF9QUF9XSElMRV8xNyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVD
S19CT09TVF9QUF9XSElMRV8xOChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9D
SEVDS19CT09TVF9QUF9XSElMRV8xOShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV9DSEVDS19CT09TVF9QUF9XSElMRV8yMChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yMShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yMihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yMyhwLCBvLCBzKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yNChwLCBvLCBzKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yNShwLCBvLCBzKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yNihwLCBvLCBzKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yNyhwLCBvLCBzKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yOChwLCBvLCBz
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yOShwLCBv
LCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8zMChw
LCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8z
MShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElM
RV8zMihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9X
SElMRV8zMyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9Q
UF9XSElMRV8zNChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09T
VF9QUF9XSElMRV8zNShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19C
T09TVF9QUF9XSElMRV8zNihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVD
S19CT09TVF9QUF9XSElMRV8zNyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9D
SEVDS19CT09TVF9QUF9XSElMRV8zOChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV9DSEVDS19CT09TVF9QUF9XSElMRV8zOShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV9DSEVDS19CT09TVF9QUF9XSElMRV80MChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV80MShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV80MihwLCBvLCBzKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV80MyhwLCBvLCBzKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV80NChwLCBvLCBzKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV80NShwLCBvLCBzKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV80NihwLCBvLCBzKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV80NyhwLCBvLCBz
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV80OChwLCBv
LCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV80OShw
LCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV81
MChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElM
RV81MShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9X
SElMRV81MihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9Q
UF9XSElMRV81MyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09T
VF9QUF9XSElMRV81NChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19C
T09TVF9QUF9XSElMRV81NShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVD
S19CT09TVF9QUF9XSElMRV81NihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9D
SEVDS19CT09TVF9QUF9XSElMRV81NyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV9DSEVDS19CT09TVF9QUF9XSElMRV81OChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV9DSEVDS19CT09TVF9QUF9XSElMRV81OShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV82MChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV82MShwLCBvLCBzKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV82MihwLCBvLCBzKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV82MyhwLCBvLCBzKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV82NChwLCBvLCBzKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV82NShwLCBvLCBzKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV82NihwLCBvLCBz
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV82NyhwLCBv
LCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV82OChw
LCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV82
OShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElM
RV83MChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9X
SElMRV83MShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9Q
UF9XSElMRV83MihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09T
VF9QUF9XSElMRV83MyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19C
T09TVF9QUF9XSElMRV83NChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVD
S19CT09TVF9QUF9XSElMRV83NShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9D
SEVDS19CT09TVF9QUF9XSElMRV83NihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV9DSEVDS19CT09TVF9QUF9XSElMRV83NyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV9DSEVDS19CT09TVF9QUF9XSElMRV83OChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV83OShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV84MChwLCBvLCBzKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV84MShwLCBvLCBzKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV84MihwLCBvLCBzKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV84MyhwLCBvLCBzKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV84NChwLCBvLCBzKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV84NShwLCBvLCBz
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV84NihwLCBv
LCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV84Nyhw
LCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV84
OChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElM
RV84OShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9X
SElMRV85MChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9Q
UF9XSElMRV85MShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09T
VF9QUF9XSElMRV85MihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19C
T09TVF9QUF9XSElMRV85MyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVD
S19CT09TVF9QUF9XSElMRV85NChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9D
SEVDS19CT09TVF9QUF9XSElMRV85NShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV9DSEVDS19CT09TVF9QUF9XSElMRV85NihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV9DSEVDS19CT09TVF9QUF9XSElMRV85NyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV85OChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV85OShwLCBvLCBzKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xMDAocCwgbywgcykgMAotIyBkZWZp
bmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTAxKHAsIG8sIHMpIDAKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzEwMihwLCBvLCBzKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xMDMocCwgbywg
cykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTA0KHAs
IG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzEw
NShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElM
RV8xMDYocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBf
V0hJTEVfMTA3KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NU
X1BQX1dISUxFXzEwOChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19C
T09TVF9QUF9XSElMRV8xMDkocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hF
Q0tfQk9PU1RfUFBfV0hJTEVfMTEwKHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxF
X0NIRUNLX0JPT1NUX1BQX1dISUxFXzExMShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xMTIocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTEzKHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzExNChwLCBvLCBzKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xMTUocCwgbywgcykgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTE2KHAsIG8sIHMpIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzExNyhwLCBvLCBz
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xMTgocCwg
bywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTE5
KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxF
XzEyMChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9X
SElMRV8xMjEocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1Rf
UFBfV0hJTEVfMTIyKHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JP
T1NUX1BQX1dISUxFXzEyMyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVD
S19CT09TVF9QUF9XSElMRV8xMjQocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVf
Q0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTI1KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzEyNihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xMjcocCwgbywgcykgMAotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTI4KHAsIG8sIHMpIDAKLSMgZGVmaW5l
IEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzEyOShwLCBvLCBzKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xMzAocCwgbywgcykgMAot
IyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTMxKHAsIG8sIHMp
IDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzEzMihwLCBv
LCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xMzMo
cCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVf
MTM0KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dI
SUxFXzEzNShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9Q
UF9XSElMRV8xMzYocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9P
U1RfUFBfV0hJTEVfMTM3KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNL
X0JPT1NUX1BQX1dISUxFXzEzOChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9D
SEVDS19CT09TVF9QUF9XSElMRV8xMzkocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJ
TEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTQwKHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQ
X1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzE0MShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xNDIocCwgbywgcykgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTQzKHAsIG8sIHMpIDAKLSMgZGVm
aW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzE0NChwLCBvLCBzKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xNDUocCwgbywgcykg
MAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTQ2KHAsIG8s
IHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzE0Nyhw
LCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8x
NDgocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJ
TEVfMTQ5KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQ
X1dISUxFXzE1MChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09T
VF9QUF9XSElMRV8xNTEocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tf
Qk9PU1RfUFBfV0hJTEVfMTUyKHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NI
RUNLX0JPT1NUX1BQX1dISUxFXzE1MyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV9DSEVDS19CT09TVF9QUF9XSElMRV8xNTQocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBf
V0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTU1KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NU
X1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzE1NihwLCBvLCBzKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xNTcocCwgbywgcykgMAotIyBkZWZp
bmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTU4KHAsIG8sIHMpIDAKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzE1OShwLCBvLCBzKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xNjAocCwgbywg
cykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTYxKHAs
IG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzE2
MihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElM
RV8xNjMocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBf
V0hJTEVfMTY0KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NU
X1BQX1dISUxFXzE2NShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19C
T09TVF9QUF9XSElMRV8xNjYocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hF
Q0tfQk9PU1RfUFBfV0hJTEVfMTY3KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxF
X0NIRUNLX0JPT1NUX1BQX1dISUxFXzE2OChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xNjkocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTcwKHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzE3MShwLCBvLCBzKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xNzIocCwgbywgcykgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTczKHAsIG8sIHMpIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzE3NChwLCBvLCBz
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xNzUocCwg
bywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTc2
KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxF
XzE3NyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9X
SElMRV8xNzgocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1Rf
UFBfV0hJTEVfMTc5KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JP
T1NUX1BQX1dISUxFXzE4MChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVD
S19CT09TVF9QUF9XSElMRV8xODEocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVf
Q0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTgyKHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzE4MyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xODQocCwgbywgcykgMAotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTg1KHAsIG8sIHMpIDAKLSMgZGVmaW5l
IEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzE4NihwLCBvLCBzKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xODcocCwgbywgcykgMAot
IyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTg4KHAsIG8sIHMp
IDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzE4OShwLCBv
LCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xOTAo
cCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVf
MTkxKHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dI
SUxFXzE5MihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9Q
UF9XSElMRV8xOTMocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9P
U1RfUFBfV0hJTEVfMTk0KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNL
X0JPT1NUX1BQX1dISUxFXzE5NShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9D
SEVDS19CT09TVF9QUF9XSElMRV8xOTYocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJ
TEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMTk3KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQ
X1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzE5OChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8xOTkocCwgbywgcykgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMjAwKHAsIG8sIHMpIDAKLSMgZGVm
aW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzIwMShwLCBvLCBzKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yMDIocCwgbywgcykg
MAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMjAzKHAsIG8s
IHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzIwNChw
LCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8y
MDUocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJ
TEVfMjA2KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQ
X1dISUxFXzIwNyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09T
VF9QUF9XSElMRV8yMDgocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tf
Qk9PU1RfUFBfV0hJTEVfMjA5KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NI
RUNLX0JPT1NUX1BQX1dISUxFXzIxMChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElM
RV9DSEVDS19CT09TVF9QUF9XSElMRV8yMTEocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBf
V0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMjEyKHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NU
X1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzIxMyhwLCBvLCBzKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yMTQocCwgbywgcykgMAotIyBkZWZp
bmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMjE1KHAsIG8sIHMpIDAKLSMg
ZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzIxNihwLCBvLCBzKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yMTcocCwgbywg
cykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMjE4KHAs
IG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzIx
OShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElM
RV8yMjAocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBf
V0hJTEVfMjIxKHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NU
X1BQX1dISUxFXzIyMihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19C
T09TVF9QUF9XSElMRV8yMjMocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hF
Q0tfQk9PU1RfUFBfV0hJTEVfMjI0KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxF
X0NIRUNLX0JPT1NUX1BQX1dISUxFXzIyNShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9X
SElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yMjYocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMjI3KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzIyOChwLCBvLCBzKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yMjkocCwgbywgcykgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMjMwKHAsIG8sIHMpIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzIzMShwLCBvLCBz
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yMzIocCwg
bywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMjMz
KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxF
XzIzNChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9X
SElMRV8yMzUocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1Rf
UFBfV0hJTEVfMjM2KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JP
T1NUX1BQX1dISUxFXzIzNyhwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVD
S19CT09TVF9QUF9XSElMRV8yMzgocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVf
Q0hFQ0tfQk9PU1RfUFBfV0hJTEVfMjM5KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dI
SUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzI0MChwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yNDEocCwgbywgcykgMAotIyBkZWZpbmUgQk9P
U1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMjQyKHAsIG8sIHMpIDAKLSMgZGVmaW5l
IEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzI0MyhwLCBvLCBzKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yNDQocCwgbywgcykgMAot
IyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMjQ1KHAsIG8sIHMp
IDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzI0NihwLCBv
LCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yNDco
cCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVf
MjQ4KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNLX0JPT1NUX1BQX1dI
SUxFXzI0OShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9DSEVDS19CT09TVF9Q
UF9XSElMRV8yNTAocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJTEVfQ0hFQ0tfQk9P
U1RfUFBfV0hJTEVfMjUxKHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1dISUxFX0NIRUNL
X0JPT1NUX1BQX1dISUxFXzI1MihwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09TVF9QUF9XSElMRV9D
SEVDS19CT09TVF9QUF9XSElMRV8yNTMocCwgbywgcykgMAotIyBkZWZpbmUgQk9PU1RfUFBfV0hJ
TEVfQ0hFQ0tfQk9PU1RfUFBfV0hJTEVfMjU0KHAsIG8sIHMpIDAKLSMgZGVmaW5lIEJPT1NUX1BQ
X1dISUxFX0NIRUNLX0JPT1NUX1BQX1dISUxFXzI1NShwLCBvLCBzKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9XSElMRV9DSEVDS19CT09TVF9QUF9XSElMRV8yNTYocCwgbywgcykgMAotIwotIyBlbmRp
ZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
cHJlcHJvY2Vzc29yL2RlYnVnL2Vycm9yLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9kZWJ1Zy9lcnJvci5ocHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGM4YWU1ZTc1MDU2NmZhMTM4NjJhZWNkNGI2MzcyODM1YWEzMjI4
M2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2RlYnVnL2Vy
cm9yLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMgLyogKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKLSMgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMgICogICAgIChDKSBDb3B5cmlnaHQgUGF1
bCBNZW5zb25pZGVzIDIwMDIuCi0jICAqICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSMgICogICAgIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqICAgICBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0jICAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1v
c3QgcmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfREVC
VUdfRVJST1JfSFBQCi0jIGRlZmluZSBCT09TVF9QUkVQUk9DRVNTT1JfREVCVUdfRVJST1JfSFBQ
Ci0jCi0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgotIyBpbmNsdWRlIDxi
b29zdC9wcmVwcm9jZXNzb3IvY29uZmlnL2NvbmZpZy5ocHA+Ci0jCi0jIC8qIEJPT1NUX1BQX0VS
Uk9SICovCi0jCi0jIGlmIEJPT1NUX1BQX0NPTkZJR19FUlJPUlMKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX0VSUk9SKGNvZGUpIEJPT1NUX1BQX0NBVChCT09TVF9QUF9FUlJPUl8sIGNvZGUpCi0jIGVu
ZGlmCi0jCi0jIGRlZmluZSBCT09TVF9QUF9FUlJPUl8weDAwMDAgQk9PU1RfUFBfRVJST1IoMHgw
MDAwLCBCT09TVF9QUF9JTkRFWF9PVVRfT0ZfQk9VTkRTKQotIyBkZWZpbmUgQk9PU1RfUFBfRVJS
T1JfMHgwMDAxIEJPT1NUX1BQX0VSUk9SKDB4MDAwMSwgQk9PU1RfUFBfV0hJTEVfT1ZFUkZMT1cp
Ci0jIGRlZmluZSBCT09TVF9QUF9FUlJPUl8weDAwMDIgQk9PU1RfUFBfRVJST1IoMHgwMDAyLCBC
T09TVF9QUF9GT1JfT1ZFUkZMT1cpCi0jIGRlZmluZSBCT09TVF9QUF9FUlJPUl8weDAwMDMgQk9P
U1RfUFBfRVJST1IoMHgwMDAzLCBCT09TVF9QUF9SRVBFQVRfT1ZFUkZMT1cpCi0jIGRlZmluZSBC
T09TVF9QUF9FUlJPUl8weDAwMDQgQk9PU1RfUFBfRVJST1IoMHgwMDA0LCBCT09TVF9QUF9MSVNU
X0ZPTERfT1ZFUkZMT1cpCi0jIGRlZmluZSBCT09TVF9QUF9FUlJPUl8weDAwMDUgQk9PU1RfUFBf
RVJST1IoMHgwMDA1LCBCT09TVF9QUF9TRVFfRk9MRF9PVkVSRkxPVykKLSMgZGVmaW5lIEJPT1NU
X1BQX0VSUk9SXzB4MDAwNiBCT09TVF9QUF9FUlJPUigweDAwMDYsIEJPT1NUX1BQX0FSSVRITUVU
SUNfT1ZFUkZMT1cpCi0jIGRlZmluZSBCT09TVF9QUF9FUlJPUl8weDAwMDcgQk9PU1RfUFBfRVJS
T1IoMHgwMDA3LCBCT09TVF9QUF9ESVZJU0lPTl9CWV9aRVJPKQotIwotIyBlbmRpZgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vz
c29yL2RldGFpbC9hdXRvX3JlYy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9wcmVwcm9jZXNzb3IvZGV0YWlsL2F1dG9fcmVjLmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMzlkZTFkMDAyODVmNDU4NjI4ZDRkYzk0MTZjMDk1MzhkMDQ5ZTQ2
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvZGV0YWlsL2F1
dG9fcmVjLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi0jIC8qICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCi0jICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0jICAqICAgICAoQykgQ29weXJpZ2h0
IFBhdWwgTWVuc29uaWRlcyAyMDAyLgotIyAgKiAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJv
b3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqICAgICBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiAgICAgaHR0cDovL3d3
dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotIyAgKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAg
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiogKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZv
ciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNz
b3IvY29uZmlnL2NvbmZpZy5ocHA+Ci0jCi0jIGlmIEJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYg
Qk9PU1RfUFBfQ09ORklHX0RNQygpCi0jICAgICBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3Iv
ZGV0YWlsL2RtYy9hdXRvX3JlYy5ocHA+Ci0jIGVsc2UKLSMKLSMgaWZuZGVmIEJPT1NUX1BSRVBS
T0NFU1NPUl9ERVRBSUxfQVVUT19SRUNfSFBQCi0jIGRlZmluZSBCT09TVF9QUkVQUk9DRVNTT1Jf
REVUQUlMX0FVVE9fUkVDX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29u
dHJvbC9paWYuaHBwPgotIwotIyAvKiBCT09TVF9QUF9BVVRPX1JFQyAqLwotIwotIyBkZWZpbmUg
Qk9PU1RfUFBfQVVUT19SRUMocHJlZCwgbikgQk9PU1RfUFBfTk9ERV9FTlRSWV8gIyMgbihwcmVk
KQotIwotIyBkZWZpbmUgQk9PU1RfUFBfTk9ERV9FTlRSWV8yNTYocCkgQk9PU1RfUFBfTk9ERV8x
MjgocCkocCkocCkocCkocCkocCkocCkocCkKLSMgZGVmaW5lIEJPT1NUX1BQX05PREVfRU5UUllf
MTI4KHApIEJPT1NUX1BQX05PREVfNjQocCkocCkocCkocCkocCkocCkocCkKLSMgZGVmaW5lIEJP
T1NUX1BQX05PREVfRU5UUllfNjQocCkgQk9PU1RfUFBfTk9ERV8zMihwKShwKShwKShwKShwKShw
KQotIyBkZWZpbmUgQk9PU1RfUFBfTk9ERV9FTlRSWV8zMihwKSBCT09TVF9QUF9OT0RFXzE2KHAp
KHApKHApKHApKHApCi0jIGRlZmluZSBCT09TVF9QUF9OT0RFX0VOVFJZXzE2KHApIEJPT1NUX1BQ
X05PREVfOChwKShwKShwKShwKQotIyBkZWZpbmUgQk9PU1RfUFBfTk9ERV9FTlRSWV84KHApIEJP
T1NUX1BQX05PREVfNChwKShwKShwKQotIyBkZWZpbmUgQk9PU1RfUFBfTk9ERV9FTlRSWV80KHAp
IEJPT1NUX1BQX05PREVfMihwKShwKQotIyBkZWZpbmUgQk9PU1RfUFBfTk9ERV9FTlRSWV8yKHAp
IEJPT1NUX1BQX05PREVfMShwKQotIwotIyBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xMjgocCkgQk9P
U1RfUFBfSUlGKHAoMTI4KSwgQk9PU1RfUFBfTk9ERV82NCwgQk9PU1RfUFBfTk9ERV8xOTIpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzY0KHApIEJPT1NUX1BQX0lJRihwKDY0KSwgQk9PU1Rf
UFBfTk9ERV8zMiwgQk9PU1RfUFBfTk9ERV85NikKLSMgICAgICAgIGRlZmluZSBCT09TVF9QUF9O
T0RFXzMyKHApIEJPT1NUX1BQX0lJRihwKDMyKSwgQk9PU1RfUFBfTk9ERV8xNiwgQk9PU1RfUFBf
Tk9ERV80OCkKLSMgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xNihwKSBCT09TVF9Q
UF9JSUYocCgxNiksIEJPT1NUX1BQX05PREVfOCwgQk9PU1RfUFBfTk9ERV8yNCkKLSMgICAgICAg
ICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfOChwKSBCT09TVF9QUF9JSUYocCg4KSwgQk9P
U1RfUFBfTk9ERV80LCBCT09TVF9QUF9OT0RFXzEyKQotIyAgICAgICAgICAgICAgICAgICAgZGVm
aW5lIEJPT1NUX1BQX05PREVfNChwKSBCT09TVF9QUF9JSUYocCg0KSwgQk9PU1RfUFBfTk9ERV8y
LCBCT09TVF9QUF9OT0RFXzYpCi0jICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NU
X1BQX05PREVfMihwKSBCT09TVF9QUF9JSUYocCgyKSwgQk9PU1RfUFBfTk9ERV8xLCBCT09TVF9Q
UF9OT0RFXzMpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9O
T0RFXzEocCkgQk9PU1RfUFBfSUlGKHAoMSksIDEsIDIpCi0jICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzMocCkgQk9PU1RfUFBfSUlGKHAoMyksIDMsIDQp
Ci0jICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfNihwKSBCT09T
VF9QUF9JSUYocCg2KSwgQk9PU1RfUFBfTk9ERV81LCBCT09TVF9QUF9OT0RFXzcpCi0jICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzUocCkgQk9PU1RfUFBf
SUlGKHAoNSksIDUsIDYpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09T
VF9QUF9OT0RFXzcocCkgQk9PU1RfUFBfSUlGKHAoNyksIDcsIDgpCi0jICAgICAgICAgICAgICAg
ICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xMihwKSBCT09TVF9QUF9JSUYocCgxMiksIEJPT1NU
X1BQX05PREVfMTAsIEJPT1NUX1BQX05PREVfMTQpCi0jICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lIEJPT1NUX1BQX05PREVfMTAocCkgQk9PU1RfUFBfSUlGKHAoMTApLCBCT09TVF9QUF9O
T0RFXzksIEJPT1NUX1BQX05PREVfMTEpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmluZSBCT09TVF9QUF9OT0RFXzkocCkgQk9PU1RfUFBfSUlGKHAoOSksIDksIDEwKQotIyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xMShwKSBCT09TVF9Q
UF9JSUYocCgxMSksIDExLCAxMikKLSMgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9P
U1RfUFBfTk9ERV8xNChwKSBCT09TVF9QUF9JSUYocCgxNCksIEJPT1NUX1BQX05PREVfMTMsIEJP
T1NUX1BQX05PREVfMTUpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09T
VF9QUF9OT0RFXzEzKHApIEJPT1NUX1BQX0lJRihwKDEzKSwgMTMsIDE0KQotIyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xNShwKSBCT09TVF9QUF9JSUYo
cCgxNSksIDE1LCAxNikKLSMgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjQo
cCkgQk9PU1RfUFBfSUlGKHAoMjQpLCBCT09TVF9QUF9OT0RFXzIwLCBCT09TVF9QUF9OT0RFXzI4
KQotIyAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjAocCkgQk9PU1Rf
UFBfSUlGKHAoMjApLCBCT09TVF9QUF9OT0RFXzE4LCBCT09TVF9QUF9OT0RFXzIyKQotIyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzE4KHApIEJPT1NUX1BQX0lJ
RihwKDE4KSwgQk9PU1RfUFBfTk9ERV8xNywgQk9PU1RfUFBfTk9ERV8xOSkKLSMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTcocCkgQk9PU1RfUFBfSUlG
KHAoMTcpLCAxNywgMTgpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09T
VF9QUF9OT0RFXzE5KHApIEJPT1NUX1BQX0lJRihwKDE5KSwgMTksIDIwKQotIyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzIyKHApIEJPT1NUX1BQX0lJRihwKDIy
KSwgQk9PU1RfUFBfTk9ERV8yMSwgQk9PU1RfUFBfTk9ERV8yMykKLSMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjEocCkgQk9PU1RfUFBfSUlGKHAoMjEp
LCAyMSwgMjIpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9O
T0RFXzIzKHApIEJPT1NUX1BQX0lJRihwKDIzKSwgMjMsIDI0KQotIyAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjgocCkgQk9PU1RfUFBfSUlGKHAoMjgpLCBCT09TVF9Q
UF9OT0RFXzI2LCBCT09TVF9QUF9OT0RFXzMwKQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmluZSBCT09TVF9QUF9OT0RFXzI2KHApIEJPT1NUX1BQX0lJRihwKDI2KSwgQk9PU1RfUFBfTk9E
RV8yNSwgQk9PU1RfUFBfTk9ERV8yNykKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
aW5lIEJPT1NUX1BQX05PREVfMjUocCkgQk9PU1RfUFBfSUlGKHAoMjUpLCAyNSwgMjYpCi0jICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzI3KHApIEJPT1NU
X1BQX0lJRihwKDI3KSwgMjcsIDI4KQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBC
T09TVF9QUF9OT0RFXzMwKHApIEJPT1NUX1BQX0lJRihwKDMwKSwgQk9PU1RfUFBfTk9ERV8yOSwg
Qk9PU1RfUFBfTk9ERV8zMSkKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJP
T1NUX1BQX05PREVfMjkocCkgQk9PU1RfUFBfSUlGKHAoMjkpLCAyOSwgMzApCi0jICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzMxKHApIEJPT1NUX1BQX0lJ
RihwKDMxKSwgMzEsIDMyKQotIyAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzQ4KHAp
IEJPT1NUX1BQX0lJRihwKDQ4KSwgQk9PU1RfUFBfTk9ERV80MCwgQk9PU1RfUFBfTk9ERV81NikK
LSMgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfNDAocCkgQk9PU1RfUFBfSUlG
KHAoNDApLCBCT09TVF9QUF9OT0RFXzM2LCBCT09TVF9QUF9OT0RFXzQ0KQotIyAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMzYocCkgQk9PU1RfUFBfSUlGKHAoMzYpLCBC
T09TVF9QUF9OT0RFXzM0LCBCT09TVF9QUF9OT0RFXzM4KQotIyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzM0KHApIEJPT1NUX1BQX0lJRihwKDM0KSwgQk9PU1Rf
UFBfTk9ERV8zMywgQk9PU1RfUFBfTk9ERV8zNSkKLSMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMzMocCkgQk9PU1RfUFBfSUlGKHAoMzMpLCAzMywgMzQp
Ci0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzM1KHAp
IEJPT1NUX1BQX0lJRihwKDM1KSwgMzUsIDM2KQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmluZSBCT09TVF9QUF9OT0RFXzM4KHApIEJPT1NUX1BQX0lJRihwKDM4KSwgQk9PU1RfUFBfTk9E
RV8zNywgQk9PU1RfUFBfTk9ERV8zOSkKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
aW5lIEJPT1NUX1BQX05PREVfMzcocCkgQk9PU1RfUFBfSUlGKHAoMzcpLCAzNywgMzgpCi0jICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzM5KHApIEJPT1NU
X1BQX0lJRihwKDM5KSwgMzksIDQwKQotIyAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NU
X1BQX05PREVfNDQocCkgQk9PU1RfUFBfSUlGKHAoNDQpLCBCT09TVF9QUF9OT0RFXzQyLCBCT09T
VF9QUF9OT0RFXzQ2KQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9O
T0RFXzQyKHApIEJPT1NUX1BQX0lJRihwKDQyKSwgQk9PU1RfUFBfTk9ERV80MSwgQk9PU1RfUFBf
Tk9ERV80MykKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05P
REVfNDEocCkgQk9PU1RfUFBfSUlGKHAoNDEpLCA0MSwgNDIpCi0jICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzQzKHApIEJPT1NUX1BQX0lJRihwKDQzKSwg
NDMsIDQ0KQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzQ2
KHApIEJPT1NUX1BQX0lJRihwKDQ2KSwgQk9PU1RfUFBfTk9ERV80NSwgQk9PU1RfUFBfTk9ERV80
NykKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfNDUo
cCkgQk9PU1RfUFBfSUlGKHAoNDUpLCA0NSwgNDYpCi0jICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzQ3KHApIEJPT1NUX1BQX0lJRihwKDQ3KSwgNDcsIDQ4
KQotIyAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV81NihwKSBCT09TVF9QUF9J
SUYocCg1NiksIEJPT1NUX1BQX05PREVfNTIsIEJPT1NUX1BQX05PREVfNjApCi0jICAgICAgICAg
ICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV81MihwKSBCT09TVF9QUF9JSUYocCg1Miks
IEJPT1NUX1BQX05PREVfNTAsIEJPT1NUX1BQX05PREVfNTQpCi0jICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfNTAocCkgQk9PU1RfUFBfSUlGKHAoNTApLCBCT09T
VF9QUF9OT0RFXzQ5LCBCT09TVF9QUF9OT0RFXzUxKQotIyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV80OShwKSBCT09TVF9QUF9JSUYocCg0OSksIDQ5LCA1
MCkKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfNTEo
cCkgQk9PU1RfUFBfSUlGKHAoNTEpLCA1MSwgNTIpCi0jICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lIEJPT1NUX1BQX05PREVfNTQocCkgQk9PU1RfUFBfSUlGKHAoNTQpLCBCT09TVF9QUF9O
T0RFXzUzLCBCT09TVF9QUF9OT0RFXzU1KQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZpbmUgQk9PU1RfUFBfTk9ERV81MyhwKSBCT09TVF9QUF9JSUYocCg1MyksIDUzLCA1NCkKLSMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfNTUocCkgQk9P
U1RfUFBfSUlGKHAoNTUpLCA1NSwgNTYpCi0jICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9P
U1RfUFBfTk9ERV82MChwKSBCT09TVF9QUF9JSUYocCg2MCksIEJPT1NUX1BQX05PREVfNTgsIEJP
T1NUX1BQX05PREVfNjIpCi0jICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQ
X05PREVfNTgocCkgQk9PU1RfUFBfSUlGKHAoNTgpLCBCT09TVF9QUF9OT0RFXzU3LCBCT09TVF9Q
UF9OT0RFXzU5KQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBf
Tk9ERV81NyhwKSBCT09TVF9QUF9JSUYocCg1NyksIDU3LCA1OCkKLSMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfNTkocCkgQk9PU1RfUFBfSUlGKHAoNTkp
LCA1OSwgNjApCi0jICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVf
NjIocCkgQk9PU1RfUFBfSUlGKHAoNjIpLCBCT09TVF9QUF9OT0RFXzYxLCBCT09TVF9QUF9OT0RF
XzYzKQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV82
MShwKSBCT09TVF9QUF9JSUYocCg2MSksIDYxLCA2MikKLSMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfNjMocCkgQk9PU1RfUFBfSUlGKHAoNjMpLCA2Mywg
NjQpCi0jICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV85NihwKSBCT09TVF9QUF9JSUYocCg5
NiksIEJPT1NUX1BQX05PREVfODAsIEJPT1NUX1BQX05PREVfMTEyKQotIyAgICAgICAgICAgIGRl
ZmluZSBCT09TVF9QUF9OT0RFXzgwKHApIEJPT1NUX1BQX0lJRihwKDgwKSwgQk9PU1RfUFBfTk9E
RV83MiwgQk9PU1RfUFBfTk9ERV84OCkKLSMgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQ
X05PREVfNzIocCkgQk9PU1RfUFBfSUlGKHAoNzIpLCBCT09TVF9QUF9OT0RFXzY4LCBCT09TVF9Q
UF9OT0RFXzc2KQotIyAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfNjgo
cCkgQk9PU1RfUFBfSUlGKHAoNjgpLCBCT09TVF9QUF9OT0RFXzY2LCBCT09TVF9QUF9OT0RFXzcw
KQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzY2KHApIEJP
T1NUX1BQX0lJRihwKDY2KSwgQk9PU1RfUFBfTk9ERV82NSwgQk9PU1RfUFBfTk9ERV82NykKLSMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfNjUocCkgQk9P
U1RfUFBfSUlGKHAoNjUpLCA2NSwgNjYpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmluZSBCT09TVF9QUF9OT0RFXzY3KHApIEJPT1NUX1BQX0lJRihwKDY3KSwgNjcsIDY4KQotIyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzcwKHApIEJPT1NUX1BQ
X0lJRihwKDcwKSwgQk9PU1RfUFBfTk9ERV82OSwgQk9PU1RfUFBfTk9ERV83MSkKLSMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfNjkocCkgQk9PU1RfUFBf
SUlGKHAoNjkpLCA2OSwgNzApCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBC
T09TVF9QUF9OT0RFXzcxKHApIEJPT1NUX1BQX0lJRihwKDcxKSwgNzEsIDcyKQotIyAgICAgICAg
ICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfNzYocCkgQk9PU1RfUFBfSUlGKHAoNzYp
LCBCT09TVF9QUF9OT0RFXzc0LCBCT09TVF9QUF9OT0RFXzc4KQotIyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzc0KHApIEJPT1NUX1BQX0lJRihwKDc0KSwgQk9P
U1RfUFBfTk9ERV83MywgQk9PU1RfUFBfTk9ERV83NSkKLSMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfNzMocCkgQk9PU1RfUFBfSUlGKHAoNzMpLCA3Mywg
NzQpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzc1
KHApIEJPT1NUX1BQX0lJRihwKDc1KSwgNzUsIDc2KQotIyAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmluZSBCT09TVF9QUF9OT0RFXzc4KHApIEJPT1NUX1BQX0lJRihwKDc4KSwgQk9PU1RfUFBf
Tk9ERV83NywgQk9PU1RfUFBfTk9ERV83OSkKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lIEJPT1NUX1BQX05PREVfNzcocCkgQk9PU1RfUFBfSUlGKHAoNzcpLCA3NywgNzgpCi0j
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzc5KHApIEJP
T1NUX1BQX0lJRihwKDc5KSwgNzksIDgwKQotIyAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1Rf
UFBfTk9ERV84OChwKSBCT09TVF9QUF9JSUYocCg4OCksIEJPT1NUX1BQX05PREVfODQsIEJPT1NU
X1BQX05PREVfOTIpCi0jICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV84
NChwKSBCT09TVF9QUF9JSUYocCg4NCksIEJPT1NUX1BQX05PREVfODIsIEJPT1NUX1BQX05PREVf
ODYpCi0jICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfODIocCkg
Qk9PU1RfUFBfSUlGKHAoODIpLCBCT09TVF9QUF9OT0RFXzgxLCBCT09TVF9QUF9OT0RFXzgzKQot
IyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV84MShwKSBC
T09TVF9QUF9JSUYocCg4MSksIDgxLCA4MikKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lIEJPT1NUX1BQX05PREVfODMocCkgQk9PU1RfUFBfSUlGKHAoODMpLCA4MywgODQpCi0j
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfODYocCkgQk9PU1Rf
UFBfSUlGKHAoODYpLCBCT09TVF9QUF9OT0RFXzg1LCBCT09TVF9QUF9OT0RFXzg3KQotIyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV84NShwKSBCT09TVF9Q
UF9JSUYocCg4NSksIDg1LCA4NikKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5l
IEJPT1NUX1BQX05PREVfODcocCkgQk9PU1RfUFBfSUlGKHAoODcpLCA4NywgODgpCi0jICAgICAg
ICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV85MihwKSBCT09TVF9QUF9JSUYocCg5
MiksIEJPT1NUX1BQX05PREVfOTAsIEJPT1NUX1BQX05PREVfOTQpCi0jICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfOTAocCkgQk9PU1RfUFBfSUlGKHAoOTApLCBC
T09TVF9QUF9OT0RFXzg5LCBCT09TVF9QUF9OT0RFXzkxKQotIyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV84OShwKSBCT09TVF9QUF9JSUYocCg4OSksIDg5
LCA5MCkKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVf
OTEocCkgQk9PU1RfUFBfSUlGKHAoOTEpLCA5MSwgOTIpCi0jICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmaW5lIEJPT1NUX1BQX05PREVfOTQocCkgQk9PU1RfUFBfSUlGKHAoOTQpLCBCT09TVF9Q
UF9OT0RFXzkzLCBCT09TVF9QUF9OT0RFXzk1KQotIyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZpbmUgQk9PU1RfUFBfTk9ERV85MyhwKSBCT09TVF9QUF9JSUYocCg5MyksIDkzLCA5NCkK
LSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfOTUocCkg
Qk9PU1RfUFBfSUlGKHAoOTUpLCA5NSwgOTYpCi0jICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQ
X05PREVfMTEyKHApIEJPT1NUX1BQX0lJRihwKDExMiksIEJPT1NUX1BQX05PREVfMTA0LCBCT09T
VF9QUF9OT0RFXzEyMCkKLSMgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTA0
KHApIEJPT1NUX1BQX0lJRihwKDEwNCksIEJPT1NUX1BQX05PREVfMTAwLCBCT09TVF9QUF9OT0RF
XzEwOCkKLSMgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzEwMChwKSBC
T09TVF9QUF9JSUYocCgxMDApLCBCT09TVF9QUF9OT0RFXzk4LCBCT09TVF9QUF9OT0RFXzEwMikK
LSMgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV85OChwKSBCT09T
VF9QUF9JSUYocCg5OCksIEJPT1NUX1BQX05PREVfOTcsIEJPT1NUX1BQX05PREVfOTkpCi0jICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzk3KHApIEJPT1NU
X1BQX0lJRihwKDk3KSwgOTcsIDk4KQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZp
bmUgQk9PU1RfUFBfTk9ERV85OShwKSBCT09TVF9QUF9JSUYocCg5OSksIDk5LCAxMDApCi0jICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTAyKHApIEJPT1NUX1BQ
X0lJRihwKDEwMiksIEJPT1NUX1BQX05PREVfMTAxLCBCT09TVF9QUF9OT0RFXzEwMykKLSMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTAxKHApIEJPT1NU
X1BQX0lJRihwKDEwMSksIDEwMSwgMTAyKQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZpbmUgQk9PU1RfUFBfTk9ERV8xMDMocCkgQk9PU1RfUFBfSUlGKHAoMTAzKSwgMTAzLCAxMDQp
Ci0jICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xMDgocCkgQk9PU1Rf
UFBfSUlGKHAoMTA4KSwgQk9PU1RfUFBfTk9ERV8xMDYsIEJPT1NUX1BQX05PREVfMTEwKQotIyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzEwNihwKSBCT09TVF9Q
UF9JSUYocCgxMDYpLCBCT09TVF9QUF9OT0RFXzEwNSwgQk9PU1RfUFBfTk9ERV8xMDcpCi0jICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzEwNShwKSBCT09T
VF9QUF9JSUYocCgxMDUpLCAxMDUsIDEwNikKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lIEJPT1NUX1BQX05PREVfMTA3KHApIEJPT1NUX1BQX0lJRihwKDEwNyksIDEwNywgMTA4
KQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzExMChwKSBC
T09TVF9QUF9JSUYocCgxMTApLCBCT09TVF9QUF9OT0RFXzEwOSwgQk9PU1RfUFBfTk9ERV8xMTEp
Ci0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzEwOShw
KSBCT09TVF9QUF9JSUYocCgxMDkpLCAxMDksIDExMCkKLSMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTExKHApIEJPT1NUX1BQX0lJRihwKDExMSksIDEx
MSwgMTEyKQotIyAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xMjAocCkgQk9P
U1RfUFBfSUlGKHAoMTIwKSwgQk9PU1RfUFBfTk9ERV8xMTYsIEJPT1NUX1BQX05PREVfMTI0KQot
IyAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTE2KHApIEJPT1NUX1BQ
X0lJRihwKDExNiksIEJPT1NUX1BQX05PREVfMTE0LCBCT09TVF9QUF9OT0RFXzExOCkKLSMgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xMTQocCkgQk9PU1RfUFBf
SUlGKHAoMTE0KSwgQk9PU1RfUFBfTk9ERV8xMTMsIEJPT1NUX1BQX05PREVfMTE1KQotIyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xMTMocCkgQk9PU1Rf
UFBfSUlGKHAoMTEzKSwgMTEzLCAxMTQpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmluZSBCT09TVF9QUF9OT0RFXzExNShwKSBCT09TVF9QUF9JSUYocCgxMTUpLCAxMTUsIDExNikK
LSMgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xMTgocCkgQk9P
U1RfUFBfSUlGKHAoMTE4KSwgQk9PU1RfUFBfTk9ERV8xMTcsIEJPT1NUX1BQX05PREVfMTE5KQot
IyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xMTcocCkg
Qk9PU1RfUFBfSUlGKHAoMTE3KSwgMTE3LCAxMTgpCi0jICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzExOShwKSBCT09TVF9QUF9JSUYocCgxMTkpLCAxMTks
IDEyMCkKLSMgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzEyNChwKSBC
T09TVF9QUF9JSUYocCgxMjQpLCBCT09TVF9QUF9OT0RFXzEyMiwgQk9PU1RfUFBfTk9ERV8xMjYp
Ci0jICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTIyKHApIEJP
T1NUX1BQX0lJRihwKDEyMiksIEJPT1NUX1BQX05PREVfMTIxLCBCT09TVF9QUF9OT0RFXzEyMykK
LSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTIxKHAp
IEJPT1NUX1BQX0lJRihwKDEyMSksIDEyMSwgMTIyKQotIyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xMjMocCkgQk9PU1RfUFBfSUlGKHAoMTIzKSwgMTIz
LCAxMjQpCi0jICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTI2
KHApIEJPT1NUX1BQX0lJRihwKDEyNiksIEJPT1NUX1BQX05PREVfMTI1LCBCT09TVF9QUF9OT0RF
XzEyNykKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVf
MTI1KHApIEJPT1NUX1BQX0lJRihwKDEyNSksIDEyNSwgMTI2KQotIyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xMjcocCkgQk9PU1RfUFBfSUlGKHAoMTI3
KSwgMTI3LCAxMjgpCi0jICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzE5MihwKSBCT09TVF9QUF9J
SUYocCgxOTIpLCBCT09TVF9QUF9OT0RFXzE2MCwgQk9PU1RfUFBfTk9ERV8yMjQpCi0jICAgICAg
ICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xNjAocCkgQk9PU1RfUFBfSUlGKHAoMTYwKSwgQk9PU1Rf
UFBfTk9ERV8xNDQsIEJPT1NUX1BQX05PREVfMTc2KQotIyAgICAgICAgICAgIGRlZmluZSBCT09T
VF9QUF9OT0RFXzE0NChwKSBCT09TVF9QUF9JSUYocCgxNDQpLCBCT09TVF9QUF9OT0RFXzEzNiwg
Qk9PU1RfUFBfTk9ERV8xNTIpCi0jICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RF
XzEzNihwKSBCT09TVF9QUF9JSUYocCgxMzYpLCBCT09TVF9QUF9OT0RFXzEzMiwgQk9PU1RfUFBf
Tk9ERV8xNDApCi0jICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xMzIo
cCkgQk9PU1RfUFBfSUlGKHAoMTMyKSwgQk9PU1RfUFBfTk9ERV8xMzAsIEJPT1NUX1BQX05PREVf
MTM0KQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzEzMChw
KSBCT09TVF9QUF9JSUYocCgxMzApLCBCT09TVF9QUF9OT0RFXzEyOSwgQk9PU1RfUFBfTk9ERV8x
MzEpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzEy
OShwKSBCT09TVF9QUF9JSUYocCgxMjkpLCAxMjksIDEzMCkKLSMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTMxKHApIEJPT1NUX1BQX0lJRihwKDEzMSks
IDEzMSwgMTMyKQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RF
XzEzNChwKSBCT09TVF9QUF9JSUYocCgxMzQpLCBCT09TVF9QUF9OT0RFXzEzMywgQk9PU1RfUFBf
Tk9ERV8xMzUpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9O
T0RFXzEzMyhwKSBCT09TVF9QUF9JSUYocCgxMzMpLCAxMzMsIDEzNCkKLSMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTM1KHApIEJPT1NUX1BQX0lJRihw
KDEzNSksIDEzNSwgMTM2KQotIyAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05P
REVfMTQwKHApIEJPT1NUX1BQX0lJRihwKDE0MCksIEJPT1NUX1BQX05PREVfMTM4LCBCT09TVF9Q
UF9OT0RFXzE0MikKLSMgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9E
RV8xMzgocCkgQk9PU1RfUFBfSUlGKHAoMTM4KSwgQk9PU1RfUFBfTk9ERV8xMzcsIEJPT1NUX1BQ
X05PREVfMTM5KQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBf
Tk9ERV8xMzcocCkgQk9PU1RfUFBfSUlGKHAoMTM3KSwgMTM3LCAxMzgpCi0jICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzEzOShwKSBCT09TVF9QUF9JSUYo
cCgxMzkpLCAxMzksIDE0MCkKLSMgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1Rf
UFBfTk9ERV8xNDIocCkgQk9PU1RfUFBfSUlGKHAoMTQyKSwgQk9PU1RfUFBfTk9ERV8xNDEsIEJP
T1NUX1BQX05PREVfMTQzKQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9P
U1RfUFBfTk9ERV8xNDEocCkgQk9PU1RfUFBfSUlGKHAoMTQxKSwgMTQxLCAxNDIpCi0jICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzE0MyhwKSBCT09TVF9Q
UF9JSUYocCgxNDMpLCAxNDMsIDE0NCkKLSMgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQ
X05PREVfMTUyKHApIEJPT1NUX1BQX0lJRihwKDE1MiksIEJPT1NUX1BQX05PREVfMTQ4LCBCT09T
VF9QUF9OT0RFXzE1NikKLSMgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RF
XzE0OChwKSBCT09TVF9QUF9JSUYocCgxNDgpLCBCT09TVF9QUF9OT0RFXzE0NiwgQk9PU1RfUFBf
Tk9ERV8xNTApCi0jICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVf
MTQ2KHApIEJPT1NUX1BQX0lJRihwKDE0NiksIEJPT1NUX1BQX05PREVfMTQ1LCBCT09TVF9QUF9O
T0RFXzE0NykKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05P
REVfMTQ1KHApIEJPT1NUX1BQX0lJRihwKDE0NSksIDE0NSwgMTQ2KQotIyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xNDcocCkgQk9PU1RfUFBfSUlGKHAo
MTQ3KSwgMTQ3LCAxNDgpCi0jICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQ
X05PREVfMTUwKHApIEJPT1NUX1BQX0lJRihwKDE1MCksIEJPT1NUX1BQX05PREVfMTQ5LCBCT09T
VF9QUF9OT0RFXzE1MSkKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NU
X1BQX05PREVfMTQ5KHApIEJPT1NUX1BQX0lJRihwKDE0OSksIDE0OSwgMTUwKQotIyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xNTEocCkgQk9PU1RfUFBf
SUlGKHAoMTUxKSwgMTUxLCAxNTIpCi0jICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1Rf
UFBfTk9ERV8xNTYocCkgQk9PU1RfUFBfSUlGKHAoMTU2KSwgQk9PU1RfUFBfTk9ERV8xNTQsIEJP
T1NUX1BQX05PREVfMTU4KQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9Q
UF9OT0RFXzE1NChwKSBCT09TVF9QUF9JSUYocCgxNTQpLCBCT09TVF9QUF9OT0RFXzE1MywgQk9P
U1RfUFBfTk9ERV8xNTUpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09T
VF9QUF9OT0RFXzE1MyhwKSBCT09TVF9QUF9JSUYocCgxNTMpLCAxNTMsIDE1NCkKLSMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTU1KHApIEJPT1NUX1BQ
X0lJRihwKDE1NSksIDE1NSwgMTU2KQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBC
T09TVF9QUF9OT0RFXzE1OChwKSBCT09TVF9QUF9JSUYocCgxNTgpLCBCT09TVF9QUF9OT0RFXzE1
NywgQk9PU1RfUFBfTk9ERV8xNTkpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmlu
ZSBCT09TVF9QUF9OT0RFXzE1NyhwKSBCT09TVF9QUF9JSUYocCgxNTcpLCAxNTcsIDE1OCkKLSMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTU5KHApIEJP
T1NUX1BQX0lJRihwKDE1OSksIDE1OSwgMTYwKQotIyAgICAgICAgICAgIGRlZmluZSBCT09TVF9Q
UF9OT0RFXzE3NihwKSBCT09TVF9QUF9JSUYocCgxNzYpLCBCT09TVF9QUF9OT0RFXzE2OCwgQk9P
U1RfUFBfTk9ERV8xODQpCi0jICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzE2
OChwKSBCT09TVF9QUF9JSUYocCgxNjgpLCBCT09TVF9QUF9OT0RFXzE2NCwgQk9PU1RfUFBfTk9E
RV8xNzIpCi0jICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xNjQocCkg
Qk9PU1RfUFBfSUlGKHAoMTY0KSwgQk9PU1RfUFBfTk9ERV8xNjIsIEJPT1NUX1BQX05PREVfMTY2
KQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzE2MihwKSBC
T09TVF9QUF9JSUYocCgxNjIpLCBCT09TVF9QUF9OT0RFXzE2MSwgQk9PU1RfUFBfTk9ERV8xNjMp
Ci0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzE2MShw
KSBCT09TVF9QUF9JSUYocCgxNjEpLCAxNjEsIDE2MikKLSMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTYzKHApIEJPT1NUX1BQX0lJRihwKDE2MyksIDE2
MywgMTY0KQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzE2
NihwKSBCT09TVF9QUF9JSUYocCgxNjYpLCBCT09TVF9QUF9OT0RFXzE2NSwgQk9PU1RfUFBfTk9E
RV8xNjcpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RF
XzE2NShwKSBCT09TVF9QUF9JSUYocCgxNjUpLCAxNjUsIDE2NikKLSMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTY3KHApIEJPT1NUX1BQX0lJRihwKDE2
NyksIDE2NywgMTY4KQotIyAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVf
MTcyKHApIEJPT1NUX1BQX0lJRihwKDE3MiksIEJPT1NUX1BQX05PREVfMTcwLCBCT09TVF9QUF9O
T0RFXzE3NCkKLSMgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8x
NzAocCkgQk9PU1RfUFBfSUlGKHAoMTcwKSwgQk9PU1RfUFBfTk9ERV8xNjksIEJPT1NUX1BQX05P
REVfMTcxKQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9E
RV8xNjkocCkgQk9PU1RfUFBfSUlGKHAoMTY5KSwgMTY5LCAxNzApCi0jICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzE3MShwKSBCT09TVF9QUF9JSUYocCgx
NzEpLCAxNzEsIDE3MikKLSMgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBf
Tk9ERV8xNzQocCkgQk9PU1RfUFBfSUlGKHAoMTc0KSwgQk9PU1RfUFBfTk9ERV8xNzMsIEJPT1NU
X1BQX05PREVfMTc1KQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1Rf
UFBfTk9ERV8xNzMocCkgQk9PU1RfUFBfSUlGKHAoMTczKSwgMTczLCAxNzQpCi0jICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzE3NShwKSBCT09TVF9QUF9J
SUYocCgxNzUpLCAxNzUsIDE3NikKLSMgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05P
REVfMTg0KHApIEJPT1NUX1BQX0lJRihwKDE4NCksIEJPT1NUX1BQX05PREVfMTgwLCBCT09TVF9Q
UF9OT0RFXzE4OCkKLSMgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzE4
MChwKSBCT09TVF9QUF9JSUYocCgxODApLCBCT09TVF9QUF9OT0RFXzE3OCwgQk9PU1RfUFBfTk9E
RV8xODIpCi0jICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTc4
KHApIEJPT1NUX1BQX0lJRihwKDE3OCksIEJPT1NUX1BQX05PREVfMTc3LCBCT09TVF9QUF9OT0RF
XzE3OSkKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVf
MTc3KHApIEJPT1NUX1BQX0lJRihwKDE3NyksIDE3NywgMTc4KQotIyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xNzkocCkgQk9PU1RfUFBfSUlGKHAoMTc5
KSwgMTc5LCAxODApCi0jICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05P
REVfMTgyKHApIEJPT1NUX1BQX0lJRihwKDE4MiksIEJPT1NUX1BQX05PREVfMTgxLCBCT09TVF9Q
UF9OT0RFXzE4MykKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQ
X05PREVfMTgxKHApIEJPT1NUX1BQX0lJRihwKDE4MSksIDE4MSwgMTgyKQotIyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xODMocCkgQk9PU1RfUFBfSUlG
KHAoMTgzKSwgMTgzLCAxODQpCi0jICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBf
Tk9ERV8xODgocCkgQk9PU1RfUFBfSUlGKHAoMTg4KSwgQk9PU1RfUFBfTk9ERV8xODYsIEJPT1NU
X1BQX05PREVfMTkwKQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9O
T0RFXzE4NihwKSBCT09TVF9QUF9JSUYocCgxODYpLCBCT09TVF9QUF9OT0RFXzE4NSwgQk9PU1Rf
UFBfTk9ERV8xODcpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9Q
UF9OT0RFXzE4NShwKSBCT09TVF9QUF9JSUYocCgxODUpLCAxODUsIDE4NikKLSMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTg3KHApIEJPT1NUX1BQX0lJ
RihwKDE4NyksIDE4NywgMTg4KQotIyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09T
VF9QUF9OT0RFXzE5MChwKSBCT09TVF9QUF9JSUYocCgxOTApLCBCT09TVF9QUF9OT0RFXzE4OSwg
Qk9PU1RfUFBfTk9ERV8xOTEpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBC
T09TVF9QUF9OT0RFXzE4OShwKSBCT09TVF9QUF9JSUYocCgxODkpLCAxODksIDE5MCkKLSMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTkxKHApIEJPT1NU
X1BQX0lJRihwKDE5MSksIDE5MSwgMTkyKQotIyAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVf
MjI0KHApIEJPT1NUX1BQX0lJRihwKDIyNCksIEJPT1NUX1BQX05PREVfMjA4LCBCT09TVF9QUF9O
T0RFXzI0MCkKLSMgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yMDgocCkgQk9PU1Rf
UFBfSUlGKHAoMjA4KSwgQk9PU1RfUFBfTk9ERV8yMDAsIEJPT1NUX1BQX05PREVfMjE2KQotIyAg
ICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yMDAocCkgQk9PU1RfUFBfSUlGKHAo
MjAwKSwgQk9PU1RfUFBfTk9ERV8xOTYsIEJPT1NUX1BQX05PREVfMjA0KQotIyAgICAgICAgICAg
ICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMTk2KHApIEJPT1NUX1BQX0lJRihwKDE5Niks
IEJPT1NUX1BQX05PREVfMTk0LCBCT09TVF9QUF9OT0RFXzE5OCkKLSMgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xOTQocCkgQk9PU1RfUFBfSUlGKHAoMTk0KSwg
Qk9PU1RfUFBfTk9ERV8xOTMsIEJPT1NUX1BQX05PREVfMTk1KQotIyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xOTMocCkgQk9PU1RfUFBfSUlGKHAoMTkz
KSwgMTkzLCAxOTQpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9Q
UF9OT0RFXzE5NShwKSBCT09TVF9QUF9JSUYocCgxOTUpLCAxOTUsIDE5NikKLSMgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xOTgocCkgQk9PU1RfUFBfSUlGKHAo
MTk4KSwgQk9PU1RfUFBfTk9ERV8xOTcsIEJPT1NUX1BQX05PREVfMTk5KQotIyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8xOTcocCkgQk9PU1RfUFBfSUlG
KHAoMTk3KSwgMTk3LCAxOTgpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBC
T09TVF9QUF9OT0RFXzE5OShwKSBCT09TVF9QUF9JSUYocCgxOTkpLCAxOTksIDIwMCkKLSMgICAg
ICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzIwNChwKSBCT09TVF9QUF9JSUYo
cCgyMDQpLCBCT09TVF9QUF9OT0RFXzIwMiwgQk9PU1RfUFBfTk9ERV8yMDYpCi0jICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjAyKHApIEJPT1NUX1BQX0lJRihw
KDIwMiksIEJPT1NUX1BQX05PREVfMjAxLCBCT09TVF9QUF9OT0RFXzIwMykKLSMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjAxKHApIEJPT1NUX1BQX0lJ
RihwKDIwMSksIDIwMSwgMjAyKQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUg
Qk9PU1RfUFBfTk9ERV8yMDMocCkgQk9PU1RfUFBfSUlGKHAoMjAzKSwgMjAzLCAyMDQpCi0jICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjA2KHApIEJPT1NUX1BQ
X0lJRihwKDIwNiksIEJPT1NUX1BQX05PREVfMjA1LCBCT09TVF9QUF9OT0RFXzIwNykKLSMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjA1KHApIEJPT1NU
X1BQX0lJRihwKDIwNSksIDIwNSwgMjA2KQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZpbmUgQk9PU1RfUFBfTk9ERV8yMDcocCkgQk9PU1RfUFBfSUlGKHAoMjA3KSwgMjA3LCAyMDgp
Ci0jICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzIxNihwKSBCT09TVF9QUF9J
SUYocCgyMTYpLCBCT09TVF9QUF9OT0RFXzIxMiwgQk9PU1RfUFBfTk9ERV8yMjApCi0jICAgICAg
ICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yMTIocCkgQk9PU1RfUFBfSUlGKHAo
MjEyKSwgQk9PU1RfUFBfTk9ERV8yMTAsIEJPT1NUX1BQX05PREVfMjE0KQotIyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzIxMChwKSBCT09TVF9QUF9JSUYocCgy
MTApLCBCT09TVF9QUF9OT0RFXzIwOSwgQk9PU1RfUFBfTk9ERV8yMTEpCi0jICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzIwOShwKSBCT09TVF9QUF9JSUYo
cCgyMDkpLCAyMDksIDIxMCkKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJP
T1NUX1BQX05PREVfMjExKHApIEJPT1NUX1BQX0lJRihwKDIxMSksIDIxMSwgMjEyKQotIyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzIxNChwKSBCT09TVF9QUF9J
SUYocCgyMTQpLCBCT09TVF9QUF9OT0RFXzIxMywgQk9PU1RfUFBfTk9ERV8yMTUpCi0jICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzIxMyhwKSBCT09TVF9Q
UF9JSUYocCgyMTMpLCAyMTMsIDIxNCkKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
aW5lIEJPT1NUX1BQX05PREVfMjE1KHApIEJPT1NUX1BQX0lJRihwKDIxNSksIDIxNSwgMjE2KQot
IyAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjIwKHApIEJPT1NUX1BQ
X0lJRihwKDIyMCksIEJPT1NUX1BQX05PREVfMjE4LCBCT09TVF9QUF9OT0RFXzIyMikKLSMgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yMTgocCkgQk9PU1RfUFBf
SUlGKHAoMjE4KSwgQk9PU1RfUFBfTk9ERV8yMTcsIEJPT1NUX1BQX05PREVfMjE5KQotIyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yMTcocCkgQk9PU1Rf
UFBfSUlGKHAoMjE3KSwgMjE3LCAyMTgpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmluZSBCT09TVF9QUF9OT0RFXzIxOShwKSBCT09TVF9QUF9JSUYocCgyMTkpLCAyMTksIDIyMCkK
LSMgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yMjIocCkgQk9P
U1RfUFBfSUlGKHAoMjIyKSwgQk9PU1RfUFBfTk9ERV8yMjEsIEJPT1NUX1BQX05PREVfMjIzKQot
IyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yMjEocCkg
Qk9PU1RfUFBfSUlGKHAoMjIxKSwgMjIxLCAyMjIpCi0jICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzIyMyhwKSBCT09TVF9QUF9JSUYocCgyMjMpLCAyMjMs
IDIyNCkKLSMgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yNDAocCkgQk9PU1RfUFBf
SUlGKHAoMjQwKSwgQk9PU1RfUFBfTk9ERV8yMzIsIEJPT1NUX1BQX05PREVfMjQ4KQotIyAgICAg
ICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yMzIocCkgQk9PU1RfUFBfSUlGKHAoMjMy
KSwgQk9PU1RfUFBfTk9ERV8yMjgsIEJPT1NUX1BQX05PREVfMjM2KQotIyAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjI4KHApIEJPT1NUX1BQX0lJRihwKDIyOCksIEJP
T1NUX1BQX05PREVfMjI2LCBCT09TVF9QUF9OT0RFXzIzMCkKLSMgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yMjYocCkgQk9PU1RfUFBfSUlGKHAoMjI2KSwgQk9P
U1RfUFBfTk9ERV8yMjUsIEJPT1NUX1BQX05PREVfMjI3KQotIyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yMjUocCkgQk9PU1RfUFBfSUlGKHAoMjI1KSwg
MjI1LCAyMjYpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9O
T0RFXzIyNyhwKSBCT09TVF9QUF9JSUYocCgyMjcpLCAyMjcsIDIyOCkKLSMgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yMzAocCkgQk9PU1RfUFBfSUlGKHAoMjMw
KSwgQk9PU1RfUFBfTk9ERV8yMjksIEJPT1NUX1BQX05PREVfMjMxKQotIyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yMjkocCkgQk9PU1RfUFBfSUlGKHAo
MjI5KSwgMjI5LCAyMzApCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09T
VF9QUF9OT0RFXzIzMShwKSBCT09TVF9QUF9JSUYocCgyMzEpLCAyMzEsIDIzMikKLSMgICAgICAg
ICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzIzNihwKSBCT09TVF9QUF9JSUYocCgy
MzYpLCBCT09TVF9QUF9OT0RFXzIzNCwgQk9PU1RfUFBfTk9ERV8yMzgpCi0jICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjM0KHApIEJPT1NUX1BQX0lJRihwKDIz
NCksIEJPT1NUX1BQX05PREVfMjMzLCBCT09TVF9QUF9OT0RFXzIzNSkKLSMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjMzKHApIEJPT1NUX1BQX0lJRihw
KDIzMyksIDIzMywgMjM0KQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9P
U1RfUFBfTk9ERV8yMzUocCkgQk9PU1RfUFBfSUlGKHAoMjM1KSwgMjM1LCAyMzYpCi0jICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjM4KHApIEJPT1NUX1BQX0lJ
RihwKDIzOCksIEJPT1NUX1BQX05PREVfMjM3LCBCT09TVF9QUF9OT0RFXzIzOSkKLSMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjM3KHApIEJPT1NUX1BQ
X0lJRihwKDIzNyksIDIzNywgMjM4KQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZp
bmUgQk9PU1RfUFBfTk9ERV8yMzkocCkgQk9PU1RfUFBfSUlGKHAoMjM5KSwgMjM5LCAyNDApCi0j
ICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzI0OChwKSBCT09TVF9QUF9JSUYo
cCgyNDgpLCBCT09TVF9QUF9OT0RFXzI0NCwgQk9PU1RfUFBfTk9ERV8yNTIpCi0jICAgICAgICAg
ICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yNDQocCkgQk9PU1RfUFBfSUlGKHAoMjQ0
KSwgQk9PU1RfUFBfTk9ERV8yNDIsIEJPT1NUX1BQX05PREVfMjQ2KQotIyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzI0MihwKSBCT09TVF9QUF9JSUYocCgyNDIp
LCBCT09TVF9QUF9OT0RFXzI0MSwgQk9PU1RfUFBfTk9ERV8yNDMpCi0jICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzI0MShwKSBCT09TVF9QUF9JSUYocCgy
NDEpLCAyNDEsIDI0MikKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NU
X1BQX05PREVfMjQzKHApIEJPT1NUX1BQX0lJRihwKDI0MyksIDI0MywgMjQ0KQotIyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzI0NihwKSBCT09TVF9QUF9JSUYo
cCgyNDYpLCBCT09TVF9QUF9OT0RFXzI0NSwgQk9PU1RfUFBfTk9ERV8yNDcpCi0jICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmluZSBCT09TVF9QUF9OT0RFXzI0NShwKSBCT09TVF9QUF9J
SUYocCgyNDUpLCAyNDUsIDI0NikKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5l
IEJPT1NUX1BQX05PREVfMjQ3KHApIEJPT1NUX1BQX0lJRihwKDI0NyksIDI0NywgMjQ4KQotIyAg
ICAgICAgICAgICAgICAgICAgZGVmaW5lIEJPT1NUX1BQX05PREVfMjUyKHApIEJPT1NUX1BQX0lJ
RihwKDI1MiksIEJPT1NUX1BQX05PREVfMjUwLCBCT09TVF9QUF9OT0RFXzI1NCkKLSMgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yNTAocCkgQk9PU1RfUFBfSUlG
KHAoMjUwKSwgQk9PU1RfUFBfTk9ERV8yNDksIEJPT1NUX1BQX05PREVfMjUxKQotIyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yNDkocCkgQk9PU1RfUFBf
SUlGKHAoMjQ5KSwgMjQ5LCAyNTApCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmlu
ZSBCT09TVF9QUF9OT0RFXzI1MShwKSBCT09TVF9QUF9JSUYocCgyNTEpLCAyNTEsIDI1MikKLSMg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yNTQocCkgQk9PU1Rf
UFBfSUlGKHAoMjU0KSwgQk9PU1RfUFBfTk9ERV8yNTMsIEJPT1NUX1BQX05PREVfMjU1KQotIyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgQk9PU1RfUFBfTk9ERV8yNTMocCkgQk9P
U1RfUFBfSUlGKHAoMjUzKSwgMjUzLCAyNTQpCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmluZSBCT09TVF9QUF9OT0RFXzI1NShwKSBCT09TVF9QUF9JSUYocCgyNTUpLCAyNTUsIDI1
NikKLSMKLSMgZW5kaWYKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9kZXRhaWwvY2hlY2suaHBwIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2RldGFp
bC9jaGVjay5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZjhmZjkxNjY1YWU3
MGNjMzZiYTBlM2U4NTUxZDI0MTU3Zjc3NGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcHJlcHJvY2Vzc29yL2RldGFpbC9jaGVjay5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCAr
MCwwIEBACi0jIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jICAqICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0j
ICAqICAgICAoQykgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyLgotIyAgKiAgICAgRGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAo
U2VlCi0jICAqICAgICBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dAotIyAgKiAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotIyAgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKgotIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLSMKLSMgLyogU2VlIGh0
dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5k
ZWYgQk9PU1RfUFJFUFJPQ0VTU09SX0RFVEFJTF9DSEVDS19IUFAKLSMgZGVmaW5lIEJPT1NUX1BS
RVBST0NFU1NPUl9ERVRBSUxfQ0hFQ0tfSFBQCi0jCi0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nl
c3Nvci9jYXQuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29uZmlnL2NvbmZp
Zy5ocHA+Ci0jCi0jIC8qIEJPT1NUX1BQX0NIRUNLICovCi0jCi0jIGlmIH5CT09TVF9QUF9DT05G
SUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19NV0NDKCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X0NIRUNLKHgsIHR5cGUpIEJPT1NUX1BQX0NIRUNLX0QoeCwgdHlwZSkKLSMgZWxzZQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfQ0hFQ0soeCwgdHlwZSkgQk9PU1RfUFBfQ0hFQ0tfT08oKHgsIHR5cGUp
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfQ0hFQ0tfT08ocGFyKSBCT09TVF9QUF9DSEVDS19EICMj
IHBhcgotIyBlbmRpZgotIwotIyBpZiB+Qk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9Q
UF9DT05GSUdfTVNWQygpICYmIH5CT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NP
TkZJR19ETUMoKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfQ0hFQ0tfRCh4LCB0eXBlKSBCT09TVF9Q
UF9DSEVDS18xKEJPT1NUX1BQX0NBVChCT09TVF9QUF9DSEVDS19SRVNVTFRfLCB0eXBlIHgpKQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfQ0hFQ0tfMShjaGspIEJPT1NUX1BQX0NIRUNLXzIoY2hrKQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfQ0hFQ0tfMihyZXMsIF8pIHJlcwotIyBlbGlmIEJPT1NUX1BQ
X0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX01TVkMoKQotIyAgICBkZWZpbmUgQk9P
U1RfUFBfQ0hFQ0tfRCh4LCB0eXBlKSBCT09TVF9QUF9DSEVDS18xKHR5cGUgeCkKLSMgICAgZGVm
aW5lIEJPT1NUX1BQX0NIRUNLXzEoY2hrKSBCT09TVF9QUF9DSEVDS18yKGNoaykKLSMgICAgZGVm
aW5lIEJPT1NUX1BQX0NIRUNLXzIoY2hrKSBCT09TVF9QUF9DSEVDS18zKChCT09TVF9QUF9DSEVD
S19SRVNVTFRfICMjIGNoaykpCi0jICAgIGRlZmluZSBCT09TVF9QUF9DSEVDS18zKGltKSBCT09T
VF9QUF9DSEVDS181KEJPT1NUX1BQX0NIRUNLXzQgaW0pCi0jICAgIGRlZmluZSBCT09TVF9QUF9D
SEVDS180KHJlcywgXykgcmVzCi0jICAgIGRlZmluZSBCT09TVF9QUF9DSEVDS181KHJlcykgcmVz
Ci0jIGVsc2UgLyogRE1DICovCi0jICAgIGRlZmluZSBCT09TVF9QUF9DSEVDS19EKHgsIHR5cGUp
IEJPT1NUX1BQX0NIRUNLX09PKCh0eXBlIHgpKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfQ0hFQ0tf
T08ocGFyKSBCT09TVF9QUF9DSEVDS18wICMjIHBhcgotIyAgICBkZWZpbmUgQk9PU1RfUFBfQ0hF
Q0tfMChjaGspIEJPT1NUX1BQX0NIRUNLXzEoQk9PU1RfUFBfQ0FUKEJPT1NUX1BQX0NIRUNLX1JF
U1VMVF8sIGNoaykpCi0jICAgIGRlZmluZSBCT09TVF9QUF9DSEVDS18xKGNoaykgQk9PU1RfUFBf
Q0hFQ0tfMihjaGspCi0jICAgIGRlZmluZSBCT09TVF9QUF9DSEVDS18yKHJlcywgXykgcmVzCi0j
IGVuZGlmCi0jCi0jIGRlZmluZSBCT09TVF9QUF9DSEVDS19SRVNVTFRfMSAxLCBCT09TVF9QUF9O
SUwKLSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9kZXRhaWwvaXNfYmluYXJ5LmhwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9kZXRhaWwvaXNf
YmluYXJ5LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQyODgzM2Q2NDlkMzMx
YmFlMjhjOGZkMWU1NjUxNzhjNDU3YTZkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9wcmVwcm9jZXNzb3IvZGV0YWlsL2lzX2JpbmFyeS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
MCArMCwwIEBACi0jIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
Ci0jICAqICAgICAoQykgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyLgotIyAgKiAgICAg
RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4w
LiAoU2VlCi0jICAqICAgICBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29w
eSBhdAotIyAgKiAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotIyAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKgotIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLSMKLSMgLyogU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBp
Zm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX0RFVEFJTF9JU19CSU5BUllfSFBQCi0jIGRlZmluZSBC
T09TVF9QUkVQUk9DRVNTT1JfREVUQUlMX0lTX0JJTkFSWV9IUFAKLSMKLSMgaW5jbHVkZSA8Ym9v
c3QvcHJlcHJvY2Vzc29yL2NvbmZpZy9jb25maWcuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVw
cm9jZXNzb3IvZGV0YWlsL2NoZWNrLmhwcD4KLSMKLSMgLyogQk9PU1RfUFBfSVNfQklOQVJZICov
Ci0jCi0jIGlmIH5CT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19FREco
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfSVNfQklOQVJZKHgpIEJPT1NUX1BQX0NIRUNLKHgsIEJP
T1NUX1BQX0lTX0JJTkFSWV9DSEVDSykKLSMgZWxzZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfSVNf
QklOQVJZKHgpIEJPT1NUX1BQX0lTX0JJTkFSWV9JKHgpCi0jICAgIGRlZmluZSBCT09TVF9QUF9J
U19CSU5BUllfSSh4KSBCT09TVF9QUF9DSEVDSyh4LCBCT09TVF9QUF9JU19CSU5BUllfQ0hFQ0sp
Ci0jIGVuZGlmCi0jCi0jIGRlZmluZSBCT09TVF9QUF9JU19CSU5BUllfQ0hFQ0soYSwgYikgMQot
IyBkZWZpbmUgQk9PU1RfUFBfQ0hFQ0tfUkVTVUxUX0JPT1NUX1BQX0lTX0JJTkFSWV9DSEVDSyAw
LCBCT09TVF9QUF9OSUwKLSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9lbXB0eS5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvZW1wdHkuaHBw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTZlZjc0NGUwNDJiY2Y4NjRlNzNhZmEy
ZjlmMmJkZjZkOGY0YTk4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nl
c3Nvci9lbXB0eS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIC8qICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCi0jICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0jICAqICAgICAoQykgQ29weXJp
Z2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyLgotIyAgKiAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqICAgICBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiAgICAgaHR0cDov
L3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotIyAgKiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgot
IyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiogKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
IGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VT
U09SX0VNUFRZX0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX0VNUFRZX0hQUAotIwot
IyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvZmFjaWxpdGllcy9lbXB0eS5ocHA+Ci0jCi0j
IGVuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9wcmVwcm9jZXNzb3IvZmFjaWxpdGllcy9lbXB0eS5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvZmFjaWxpdGllcy9lbXB0eS5o
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMjE1ZGM1MTEyODU0ZjY3ODYzNzI4
N2YyZDljZWFkYWU3ZTBiNzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJv
Y2Vzc29yL2ZhY2lsaXRpZXMvZW1wdHkuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBA
QAotIyAvKiBDb3B5cmlnaHQgKEMpIDIwMDEKLSMgICogSG91c2VtYXJxdWUgT3kKLSMgICogaHR0
cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20KLSMgICoKLSMgICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSMgICovCi0jCi0jIC8qIFJldmlzZWQgYnkgUGF1bCBN
ZW5zb25pZGVzICgyMDAyKSAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9y
IG1vc3QgcmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1Jf
RkFDSUxJVElFU19FTVBUWV9IUFAKLSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NPUl9GQUNJTElU
SUVTX0VNUFRZX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29uZmlnL2Nv
bmZpZy5ocHA+Ci0jCi0jIC8qIEJPT1NUX1BQX0VNUFRZICovCi0jCi0jIGRlZmluZSBCT09TVF9Q
UF9FTVBUWSgpCi0jCi0jIGVuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvZmFjaWxpdGllcy9leHBhbmQuaHBwIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2Zh
Y2lsaXRpZXMvZXhwYW5kLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg2NjFh
MWMyMjEwZjAyYjFhZmI5Yzk2Y2QzZDE4MDdjZjY0NGE1My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9wcmVwcm9jZXNzb3IvZmFjaWxpdGllcy9leHBhbmQuaHBwCisrKyAvZGV2L251
bGwKQEAgLTEsMjggKzAsMCBAQAotIyAvKiBDb3B5cmlnaHQgKEMpIDIwMDEKLSMgICogSG91c2Vt
YXJxdWUgT3kKLSMgICogaHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20KLSMgICoKLSMgICogRGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAo
U2VlCi0jICAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0j
ICAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSMgICovCi0jCi0jIC8q
IFJldmlzZWQgYnkgUGF1bCBNZW5zb25pZGVzICgyMDAyKSAqLwotIwotIyAvKiBTZWUgaHR0cDov
L3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRlZiBC
T09TVF9QUkVQUk9DRVNTT1JfRkFDSUxJVElFU19FWFBBTkRfSFBQCi0jIGRlZmluZSBCT09TVF9Q
UkVQUk9DRVNTT1JfRkFDSUxJVElFU19FWFBBTkRfSFBQCi0jCi0jIGluY2x1ZGUgPGJvb3N0L3By
ZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcD4KLSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19G
TEFHUygpICYgQk9PU1RfUFBfQ09ORklHX01XQ0MoKSAmJiB+Qk9PU1RfUFBfQ09ORklHX0ZMQUdT
KCkgJiBCT09TVF9QUF9DT05GSUdfRE1DKCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0VYUEFORCh4
KSBCT09TVF9QUF9FWFBBTkRfSSh4KQotIyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9QUF9FWFBB
TkQoeCkgQk9PU1RfUFBfRVhQQU5EX09PKCh4KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0VYUEFO
RF9PTyhwYXIpIEJPT1NUX1BQX0VYUEFORF9JICMjIHBhcgotIyBlbmRpZgotIwotIyBkZWZpbmUg
Qk9PU1RfUFBfRVhQQU5EX0koeCkgeAotIwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2ZhY2lsaXRpZXMv
aWRlbnRpdHkuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
cHJlcHJvY2Vzc29yL2ZhY2lsaXRpZXMvaWRlbnRpdHkuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4YTc4MzRkNGE1MDRlNzRiNWRiOGE2N2RlMmNhYzhmNmQwY2YzZDUyLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9mYWNpbGl0aWVzL2lkZW50
aXR5LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSMgLyogQ29weXJpZ2h0IChD
KSAyMDAxCi0jICAqIEhvdXNlbWFycXVlIE95Ci0jICAqIGh0dHA6Ly93d3cuaG91c2VtYXJxdWUu
Y29tCi0jICAqCi0jICAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNl
bnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotIyAgKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpCi0jICAqLwotIwotIyAvKiBSZXZpc2VkIGJ5IFBhdWwgTWVuc29uaWRlcyAoMjAwMikgKi8K
LSMgLyogUmV2aXNlZCBieSBFZHdhcmQgRGllbmVyICgyMDE1KSAqLwotIwotIyAvKiBTZWUgaHR0
cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRl
ZiBCT09TVF9QUkVQUk9DRVNTT1JfRkFDSUxJVElFU19JREVOVElUWV9IUFAKLSMgZGVmaW5lIEJP
T1NUX1BSRVBST0NFU1NPUl9GQUNJTElUSUVTX0lERU5USVRZX0hQUAotIwotIyBpbmNsdWRlIDxi
b29zdC9wcmVwcm9jZXNzb3IvZmFjaWxpdGllcy9lbXB0eS5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0
L3ByZXByb2Nlc3Nvci90dXBsZS9lYXQuaHBwPgotIwotIyAvKiBCT09TVF9QUF9JREVOVElUWSAq
LwotIwotIyBkZWZpbmUgQk9PU1RfUFBfSURFTlRJVFkoaXRlbSkgaXRlbSBCT09TVF9QUF9FTVBU
WQotIwotIyBkZWZpbmUgQk9PU1RfUFBfSURFTlRJVFlfTihpdGVtLG4pIGl0ZW0gQk9PU1RfUFBf
VFVQTEVfRUFUX04obikKLSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9mYWNpbGl0aWVzL292ZXJsb2Fk
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nl
c3Nvci9mYWNpbGl0aWVzL292ZXJsb2FkLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTU3NjMxNmQ3ZjBiZjRjZGU3ZTA3YTJlNWIxMzk2MjBiN2ZlZDMwMy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvZmFjaWxpdGllcy9vdmVybG9hZC5ocHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIC8qICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0j
ICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqCi0jICAqICAgICAoQykgQ29weXJpZ2h0IFBhdWwgTWVuc29u
aWRlcyAyMDExLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0jICAqICAgICAo
QykgQ29weXJpZ2h0IEVkd2FyZCBEaWVuZXIgMjAxMS4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqCi0jICAqICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdh
cmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgICAgICAqCi0jICAqICAgICBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAgICAgICAgICAgICAgICAgICAgICAg
ICAqCi0jICAqICAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0jICAqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0jICAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9y
IG1vc3QgcmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1Jf
RkFDSUxJVElFU19PVkVSTE9BRF9IUFAKLSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NPUl9GQUNJ
TElUSUVTX09WRVJMT0FEX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY2F0
LmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3ZhcmlhZGljL3NpemUuaHBwPgot
IwotIyAvKiBCT09TVF9QUF9PVkVSTE9BRCAqLwotIwotIyBpZiBCT09TVF9QUF9WQVJJQURJQ1MK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX09WRVJMT0FEKHByZWZpeCwgLi4uKSBCT09TVF9QUF9DQVQo
cHJlZml4LCBCT09TVF9QUF9WQVJJQURJQ19TSVpFKF9fVkFfQVJHU19fKSkKLSMgZW5kaWYKLSMK
LSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3ByZXByb2Nlc3Nvci9pZGVudGl0eS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvaWRlbnRpdHkuaHBwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4NDdkZDEzMjk2YjU2OWFhZTU5YjBlZDUzYWE4YTE4YzM5NjMz
OTQwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9pZGVudGl0
eS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIC8qICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCi0jICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0jICAqICAgICAoQykgQ29weXJpZ2h0IFBhdWwg
TWVuc29uaWRlcyAyMDAyLgotIyAgKiAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNv
ZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqICAgICBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiAgICAgaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiogKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0
IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX0lERU5U
SVRZX0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX0lERU5USVRZX0hQUAotIwotIyBp
bmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvZmFjaWxpdGllcy9pZGVudGl0eS5ocHA+Ci0jCi0j
IGVuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9wcmVwcm9jZXNzb3IvaW5jLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9pbmMuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiOThkM2E2N2M1ZTJjYmY3Yjc0Nzk0M2MzZmFlZDRjY2U5ZWIxOTg4Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9pbmMuaHBwCisrKyAvZGV2L251
bGwKQEAgLTEsMTcgKzAsMCBAQAotIyAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKgotIyAgKiAgICAgKEMpIENvcHlyaWdodCBQYXVsIE1lbnNvbmlkZXMgMjAwMi4K
LSMgICogICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4gKFNlZQotIyAgKiAgICAgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQKLSMgICogICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLSMgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMgICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0j
Ci0jIC8qIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbi4g
Ki8KLSMKLSMgaWZuZGVmIEJPT1NUX1BSRVBST0NFU1NPUl9JTkNfSFBQCi0jIGRlZmluZSBCT09T
VF9QUkVQUk9DRVNTT1JfSU5DX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3Iv
YXJpdGhtZXRpYy9pbmMuaHBwPgotIwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2xpc3QvYWR0LmhwcCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9s
aXN0L2FkdC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZjEyYmFiNjNkOGI0
NmI5YWVkOWY5NTBjMTg2ZDg3ZmI5NWIyMGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcHJlcHJvY2Vzc29yL2xpc3QvYWR0LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAg
QEAKLSMgLyogQ29weXJpZ2h0IChDKSAyMDAxCi0jICAqIEhvdXNlbWFycXVlIE95Ci0jICAqIGh0
dHA6Ly93d3cuaG91c2VtYXJxdWUuY29tCi0jICAqCi0jICAqIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqCi0jICAqIFNlZSBodHRwOi8vd3d3LmJvb3N0
Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbi4KLSMgICovCi0jCi0jIC8qIFJldmlzZWQgYnkg
UGF1bCBNZW5zb25pZGVzICgyMDAyKSAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09S
X0xJU1RfQURUX0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX0xJU1RfQURUX0hQUAot
IwotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29uZmlnL2NvbmZpZy5ocHA+Ci0jIGlu
Y2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9kZXRhaWwvaXNfYmluYXJ5LmhwcD4KLSMgaW5jbHVk
ZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2xvZ2ljYWwvY29tcGwuaHBwPgotIyBpbmNsdWRlIDxib29z
dC9wcmVwcm9jZXNzb3IvdHVwbGUvZWF0LmhwcD4KLSMKLSMgLyogQk9PU1RfUFBfTElTVF9DT05T
ICovCi0jCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0NPTlMoaGVhZCwgdGFpbCkgKGhlYWQsIHRh
aWwpCi0jCi0jIC8qIEJPT1NUX1BQX0xJU1RfTklMICovCi0jCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX05JTCBCT09TVF9QUF9OSUwKLSMKLSMgLyogQk9PU1RfUFBfTElTVF9GSVJTVCAqLwotIwot
IyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GSVJTVChsaXN0KSBCT09TVF9QUF9MSVNUX0ZJUlNUX0Qo
bGlzdCkKLSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklH
X01XQ0MoKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfTElTVF9GSVJTVF9EKGxpc3QpIEJPT1NUX1BQ
X0xJU1RfRklSU1RfSSBsaXN0Ci0jIGVsc2UKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRklS
U1RfRChsaXN0KSBCT09TVF9QUF9MSVNUX0ZJUlNUX0kgIyMgbGlzdAotIyBlbmRpZgotIwotIyBk
ZWZpbmUgQk9PU1RfUFBfTElTVF9GSVJTVF9JKGhlYWQsIHRhaWwpIGhlYWQKLSMKLSMgLyogQk9P
U1RfUFBfTElTVF9SRVNUICovCi0jCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX1JFU1QobGlzdCkg
Qk9PU1RfUFBfTElTVF9SRVNUX0QobGlzdCkKLSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFH
UygpICYgQk9PU1RfUFBfQ09ORklHX01XQ0MoKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfTElTVF9S
RVNUX0QobGlzdCkgQk9PU1RfUFBfTElTVF9SRVNUX0kgbGlzdAotIyBlbHNlCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX1JFU1RfRChsaXN0KSBCT09TVF9QUF9MSVNUX1JFU1RfSSAjIyBsaXN0
Ci0jIGVuZGlmCi0jCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX1JFU1RfSShoZWFkLCB0YWlsKSB0
YWlsCi0jCi0jIC8qIEJPT1NUX1BQX0xJU1RfSVNfQ09OUyAqLwotIwotIyBpZiBCT09TVF9QUF9D
T05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19CQ0MoKQotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfTElTVF9JU19DT05TKGxpc3QpIEJPT1NUX1BQX0xJU1RfSVNfQ09OU19EKGxpc3QpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9MSVNUX0lTX0NPTlNfRChsaXN0KSBCT09TVF9QUF9MSVNUX0lTX0NP
TlNfICMjIGxpc3QKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0xJU1RfSVNfQ09OU18oaGVhZCwgdGFp
bCkgMQotIyAgICBkZWZpbmUgQk9PU1RfUFBfTElTVF9JU19DT05TX0JPT1NUX1BQX05JTCAwCi0j
IGVsc2UKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsaXN0KSBCT09TVF9QUF9J
U19CSU5BUlkobGlzdCkKLSMgZW5kaWYKLSMKLSMgLyogQk9PU1RfUFBfTElTVF9JU19OSUwgKi8K
LSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX0JDQygp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9MSVNUX0lTX05JTChsaXN0KSBCT09TVF9QUF9DT01QTChC
T09TVF9QUF9JU19CSU5BUlkobGlzdCkpCi0jIGVsc2UKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfSVNfTklMKGxpc3QpIEJPT1NUX1BQX0NPTVBMKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsaXN0
KSkKLSMgZW5kaWYKLSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2RldGFpbC9mb2xkX2xlZnQu
aHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vz
c29yL2xpc3QvZGV0YWlsL2ZvbGRfbGVmdC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGY1ZmNhYjczMzU5MThjODU0MmZmMjc3MzgwMWUxYzYwNzU0MDQxN2IuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2xpc3QvZGV0YWlsL2ZvbGRfbGVmdC5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzkgKzAsMCBAQAotIyAvKiBDb3B5cmlnaHQgKEMpIDIw
MDEKLSMgICogSG91c2VtYXJxdWUgT3kKLSMgICogaHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20K
LSMgICoKLSMgICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLiAoU2VlCi0jICAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0Ci0jICAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK
LSMgICovCi0jCi0jIC8qIFJldmlzZWQgYnkgUGF1bCBNZW5zb25pZGVzICgyMDAyKSAqLwotIwot
IyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24uICov
Ci0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfTElTVF9ERVRBSUxfRk9MRF9MRUZUX0hQ
UAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX0xJU1RfREVUQUlMX0ZPTERfTEVGVF9IUFAK
LSMKLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbnRyb2wvZXhwcl9paWYuaHBwPgot
IyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29udHJvbC9paWYuaHBwPgotIyBpbmNsdWRl
IDxib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9hZHQuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVw
cm9jZXNzb3IvdHVwbGUvZWF0LmhwcD4KLSMKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzEobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1Rf
UFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgyLCBzLCBCT09TVF9QUF9M
SVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMihvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19D
T05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8zLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8z
KShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDMsIHMs
IEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8zKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9Q
UF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzQsIHMgQk9PU1RfUFBf
VFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhs
KSwgbykoNCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChs
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzQobywgcywgbCkgQk9PU1RfUFBf
SUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNSwg
cyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElT
VF9JU19DT05TKGwpLCBvKSg1LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBf
TElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNShvLCBzLCBs
KSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF82LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihC
T09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDYsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkp
LCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF82KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzcsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQ
X0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoNywgcywgQk9PU1RfUFBfTElT
VF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzcobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09O
UyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfOCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMyko
bywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSg4LCBzLCBC
T09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfOChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBf
TElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85LCBzIEJPT1NUX1BQX1RV
UExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCks
IG8pKDksIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkp
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85KG8sIHMsIGwpIEJPT1NUX1BQX0lJ
RihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEwLCBz
IEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNU
X0lTX0NPTlMobCksIG8pKDEwLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBf
TElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTAobywgcywg
bCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfMTEsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlG
KEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTEsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1Qo
bCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8xMShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9P
U1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxMiwgcywgQk9PU1Rf
UFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzEyKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNU
X0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEzLCBzIEJPT1NUX1BQX1RVUExF
X0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8p
KDEzLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQot
IyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTMobywgcywgbCkgQk9PU1RfUFBfSUlG
KEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTQsIHMg
Qk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1Rf
SVNfQ09OUyhsKSwgbykoMTQsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9M
SVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNChvLCBzLCBs
KSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF8xNSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYo
Qk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxNSwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChs
KSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzE1KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE2LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09T
VF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDE2LCBzLCBCT09TVF9Q
UF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfMTYobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1Rf
SVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTcsIHMgQk9PU1RfUFBfVFVQTEVf
RUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbyko
MTcsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNyhvLCBzLCBsKSBCT09TVF9QUF9JSUYo
Qk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xOCwgcyBC
T09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9J
U19DT05TKGwpLCBvKSgxOCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJ
U1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE4KG8sIHMsIGwp
IEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzE5LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihC
T09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDE5LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwp
KSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMTkobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMjAsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NU
X1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjAsIHMsIEJPT1NUX1BQ
X0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8yMChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9J
U19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMSwgcyBCT09TVF9QUF9UVVBMRV9F
QVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgy
MSwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIxKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihC
T09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIyLCBzIEJP
T1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lT
X0NPTlMobCksIG8pKDIyLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElT
VF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjIobywgcywgbCkg
Qk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfMjMsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJP
T1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjMsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkp
LCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF8yMyhvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8yNCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1Rf
UFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgyNCwgcywgQk9PU1RfUFBf
TElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzI0KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lT
X0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI1LCBzIEJPT1NUX1BQX1RVUExFX0VB
VF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDI1
LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjUobywgcywgbCkgQk9PU1RfUFBfSUlGKEJP
T1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjYsIHMgQk9P
U1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNf
Q09OUyhsKSwgbykoMjYsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNU
X1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNihvLCBzLCBsKSBC
T09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8yNywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9P
U1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgyNywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSks
IEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
XzI3KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzI4LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9Q
UF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDI4LCBzLCBCT09TVF9QUF9M
SVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMjgobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNf
Q09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjksIHMgQk9PU1RfUFBfVFVQTEVfRUFU
XzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjks
IHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yOShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9P
U1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8zMCwgcyBCT09T
VF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19D
T05TKGwpLCBvKSgzMCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1Rf
UkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzMwKG8sIHMsIGwpIEJP
T1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzMxLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09T
VF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDMxLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwg
Qk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
MzEobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfMzIsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQ
X0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMzIsIHMsIEJPT1NUX1BQX0xJ
U1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8zMihvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19D
T05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8zMywgcyBCT09TVF9QUF9UVVBMRV9FQVRf
MykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgzMywg
cywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzMzKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09T
VF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzM0LCBzIEJPT1NU
X1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NP
TlMobCksIG8pKDM0LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9S
RVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMzQobywgcywgbCkgQk9P
U1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMzUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NU
X1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMzUsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBC
T09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8z
NShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8zNiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBf
RVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgzNiwgcywgQk9PU1RfUFBfTElT
VF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzM2KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NP
TlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzM3LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8z
KShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDM3LCBz
LCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZp
bmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMzcobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NU
X1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMzgsIHMgQk9PU1Rf
UFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09O
UyhsKSwgbykoMzgsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JF
U1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8zOChvLCBzLCBsKSBCT09T
VF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF8zOSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1Rf
UFBfTElTVF9JU19DT05TKGwpLCBvKSgzOSwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJP
T1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzM5
KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzQwLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9F
WFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDQwLCBzLCBCT09TVF9QUF9MSVNU
X0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfNDAobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09O
UyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNDEsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMp
KG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoNDEsIHMs
IEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF80MShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1Rf
UFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF80MiwgcyBCT09TVF9Q
UF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05T
KGwpLCBvKSg0MiwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVT
VChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzQyKG8sIHMsIGwpIEJPT1NU
X1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
XzQzLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9Q
UF9MSVNUX0lTX0NPTlMobCksIG8pKDQzLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9P
U1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNDMo
bywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfNDQsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VY
UFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoNDQsIHMsIEJPT1NUX1BQX0xJU1Rf
RklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF80NChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05T
KGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF80NSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMyko
bywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSg0NSwgcywg
Qk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzQ1KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9Q
UF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzQ2LCBzIEJPT1NUX1BQ
X1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMo
bCksIG8pKDQ2LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNU
KGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNDYobywgcywgbCkgQk9PU1Rf
UFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
NDcsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQ
X0xJU1RfSVNfQ09OUyhsKSwgbykoNDcsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09T
VF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF80Nyhv
LCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF80OCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQ
Ul9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSg0OCwgcywgQk9PU1RfUFBfTElTVF9G
SVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzQ4KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMo
bCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzQ5LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShv
LCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDQ5LCBzLCBC
T09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNDkobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQ
X0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNTAsIHMgQk9PU1RfUFBf
VFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhs
KSwgbykoNTAsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1Qo
bCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81MChvLCBzLCBsKSBCT09TVF9Q
UF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81
MSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBf
TElTVF9JU19DT05TKGwpLCBvKSg1MSwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NU
X1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzUxKG8s
IHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzUyLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBS
X0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDUyLCBzLCBCT09TVF9QUF9MSVNUX0ZJ
UlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfNTIobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhs
KSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNTMsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8s
IEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoNTMsIHMsIEJP
T1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF81MyhvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBf
TElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81NCwgcyBCT09TVF9QUF9U
VVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwp
LCBvKSg1NCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChs
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzU0KG8sIHMsIGwpIEJPT1NUX1BQ
X0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzU1
LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9M
SVNUX0lTX0NPTlMobCksIG8pKDU1LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1Rf
UFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNTUobywg
cywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfNTYsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJf
SUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoNTYsIHMsIEJPT1NUX1BQX0xJU1RfRklS
U1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF81NihvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwp
LCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81NywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywg
Qk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSg1NywgcywgQk9P
U1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzU3KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9M
SVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzU4LCBzIEJPT1NUX1BQX1RV
UExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCks
IG8pKDU4LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwp
KQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNTgobywgcywgbCkgQk9PU1RfUFBf
SUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNTks
IHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJ
U1RfSVNfQ09OUyhsKSwgbykoNTksIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9Q
UF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81OShvLCBz
LCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF82MCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9J
SUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSg2MCwgcywgQk9PU1RfUFBfTElTVF9GSVJT
VChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzYwKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCks
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzYxLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBC
T09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDYxLCBzLCBCT09T
VF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfNjEobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJ
U1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNjIsIHMgQk9PU1RfUFBfVFVQ
TEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwg
bykoNjIsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkp
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF82MihvLCBzLCBsKSBCT09TVF9QUF9J
SUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF82Mywg
cyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElT
VF9JU19DT05TKGwpLCBvKSg2MywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQ
X0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzYzKG8sIHMs
IGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzY0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJ
RihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDY0LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNU
KGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfNjQobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNjUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJP
T1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoNjUsIHMsIEJPT1NU
X1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF82NShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElT
VF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF82NiwgcyBCT09TVF9QUF9UVVBM
RV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBv
KSg2NiwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzY2KG8sIHMsIGwpIEJPT1NUX1BQX0lJ
RihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzY3LCBz
IEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNU
X0lTX0NPTlMobCksIG8pKDY3LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBf
TElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNjcobywgcywg
bCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfNjgsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlG
KEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoNjgsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1Qo
bCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF82OChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF82OSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9P
U1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSg2OSwgcywgQk9PU1Rf
UFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzY5KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNU
X0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzcwLCBzIEJPT1NUX1BQX1RVUExF
X0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8p
KDcwLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQot
IyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNzAobywgcywgbCkgQk9PU1RfUFBfSUlG
KEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNzEsIHMg
Qk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1Rf
SVNfQ09OUyhsKSwgbykoNzEsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9M
SVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF83MShvLCBzLCBs
KSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF83MiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYo
Qk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSg3MiwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChs
KSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzcyKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzczLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09T
VF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDczLCBzLCBCT09TVF9Q
UF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfNzMobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1Rf
SVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNzQsIHMgQk9PU1RfUFBfVFVQTEVf
RUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbyko
NzQsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF83NChvLCBzLCBsKSBCT09TVF9QUF9JSUYo
Qk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF83NSwgcyBC
T09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9J
U19DT05TKGwpLCBvKSg3NSwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJ
U1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzc1KG8sIHMsIGwp
IEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzc2LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihC
T09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDc2LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwp
KSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfNzYobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfNzcsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NU
X1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoNzcsIHMsIEJPT1NUX1BQ
X0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF83NyhvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9J
U19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF83OCwgcyBCT09TVF9QUF9UVVBMRV9F
QVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSg3
OCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzc4KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihC
T09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzc5LCBzIEJP
T1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lT
X0NPTlMobCksIG8pKDc5LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElT
VF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNzkobywgcywgbCkg
Qk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfODAsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJP
T1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoODAsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkp
LCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF84MChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF84MSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1Rf
UFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSg4MSwgcywgQk9PU1RfUFBf
TElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzgxKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lT
X0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzgyLCBzIEJPT1NUX1BQX1RVUExFX0VB
VF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDgy
LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfODIobywgcywgbCkgQk9PU1RfUFBfSUlGKEJP
T1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfODMsIHMgQk9P
U1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNf
Q09OUyhsKSwgbykoODMsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNU
X1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF84MyhvLCBzLCBsKSBC
T09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF84NCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9P
U1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSg4NCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSks
IEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
Xzg0KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzg1LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9Q
UF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDg1LCBzLCBCT09TVF9QUF9M
SVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfODUobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNf
Q09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfODYsIHMgQk9PU1RfUFBfVFVQTEVfRUFU
XzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoODYs
IHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF84NihvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9P
U1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF84NywgcyBCT09T
VF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19D
T05TKGwpLCBvKSg4NywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1Rf
UkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzg3KG8sIHMsIGwpIEJP
T1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzg4LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09T
VF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDg4LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwg
Qk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
ODgobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfODksIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQ
X0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoODksIHMsIEJPT1NUX1BQX0xJ
U1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF84OShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19D
T05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85MCwgcyBCT09TVF9QUF9UVVBMRV9FQVRf
MykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSg5MCwg
cywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzkwKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09T
VF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzkxLCBzIEJPT1NU
X1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NP
TlMobCksIG8pKDkxLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9S
RVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfOTEobywgcywgbCkgQk9P
U1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfOTIsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NU
X1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoOTIsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBC
T09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85
MihvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF85MywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBf
RVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSg5MywgcywgQk9PU1RfUFBfTElT
VF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzkzKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NP
TlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzk0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8z
KShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDk0LCBz
LCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZp
bmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfOTQobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NU
X1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfOTUsIHMgQk9PU1Rf
UFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09O
UyhsKSwgbykoOTUsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JF
U1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85NShvLCBzLCBsKSBCT09T
VF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF85NiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1Rf
UFBfTElTVF9JU19DT05TKGwpLCBvKSg5NiwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJP
T1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzk2
KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzk3LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9F
WFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDk3LCBzLCBCT09TVF9QUF9MSVNU
X0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfOTcobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09O
UyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfOTgsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMp
KG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoOTgsIHMs
IEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85OChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1Rf
UFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85OSwgcyBCT09TVF9Q
UF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05T
KGwpLCBvKSg5OSwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVT
VChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzk5KG8sIHMsIGwpIEJPT1NU
X1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
XzEwMCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1Rf
UFBfTElTVF9JU19DT05TKGwpLCBvKSgxMDAsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBC
T09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8x
MDAobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfMTAxLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9Q
UF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDEwMSwgcywgQk9PU1RfUFBf
TElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzEwMShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9J
U19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMDIsIHMgQk9PU1RfUFBfVFVQTEVf
RUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbyko
MTAyLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQot
IyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTAyKG8sIHMsIGwpIEJPT1NUX1BQX0lJ
RihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEwMywg
cyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElT
VF9JU19DT05TKGwpLCBvKSgxMDMsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9Q
UF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMDMobywg
cywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfMTA0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBS
X0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDEwNCwgcywgQk9PU1RfUFBfTElTVF9G
SVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzEwNChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05T
KGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMDUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMp
KG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTA1LCBz
LCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZp
bmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTA1KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09T
VF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEwNiwgcyBCT09T
VF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19D
T05TKGwpLCBvKSgxMDYsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNU
X1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMDYobywgcywgbCkg
Qk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfMTA3LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihC
T09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDEwNywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChs
KSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzEwNyhvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMDgsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJP
T1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTA4LCBzLCBCT09T
VF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMTA4KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9M
SVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEwOSwgcyBCT09TVF9QUF9U
VVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwp
LCBvKSgxMDksIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1Qo
bCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMDkobywgcywgbCkgQk9PU1Rf
UFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
MTEwLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9Q
UF9MSVNUX0lTX0NPTlMobCksIG8pKDExMCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJP
T1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEx
MChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8xMTEsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQ
X0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTExLCBzLCBCT09TVF9QUF9M
SVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMTExKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lT
X0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzExMiwgcyBCT09TVF9QUF9UVVBMRV9F
QVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgx
MTIsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMTIobywgcywgbCkgQk9PU1RfUFBfSUlG
KEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTEzLCBz
IEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNU
X0lTX0NPTlMobCksIG8pKDExMywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQ
X0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzExMyhvLCBz
LCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF8xMTQsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJf
SUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTE0LCBzLCBCT09TVF9QUF9MSVNUX0ZJ
UlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfMTE0KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMo
bCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzExNSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMyko
bywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxMTUsIHMs
IEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMTUobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NU
X1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTE2LCBzIEJPT1NU
X1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NP
TlMobCksIG8pKDExNiwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1Rf
UkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzExNihvLCBzLCBsKSBC
T09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8xMTcsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJP
T1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTE3LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwp
KSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMTE3KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzExOCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9P
U1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxMTgsIHMsIEJPT1NU
X1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8xMTgobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJ
U1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTE5LCBzIEJPT1NUX1BQX1RV
UExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCks
IG8pKDExOSwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChs
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzExOShvLCBzLCBsKSBCT09TVF9Q
UF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8x
MjAsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQ
X0xJU1RfSVNfQ09OUyhsKSwgbykoMTIwLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9P
U1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTIw
KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzEyMSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBf
RVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxMjEsIHMsIEJPT1NUX1BQX0xJ
U1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8xMjEobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNf
Q09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTIyLCBzIEJPT1NUX1BQX1RVUExFX0VB
VF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDEy
MiwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEyMihvLCBzLCBsKSBCT09TVF9QUF9JSUYo
Qk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMjMsIHMg
Qk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1Rf
SVNfQ09OUyhsKSwgbykoMTIzLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBf
TElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTIzKG8sIHMs
IGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzEyNCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9J
SUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxMjQsIHMsIEJPT1NUX1BQX0xJU1RfRklS
U1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF8xMjQobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhs
KSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTI1LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShv
LCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDEyNSwgcywg
Qk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEyNShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1Rf
UFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMjYsIHMgQk9PU1Rf
UFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09O
UyhsKSwgbykoMTI2LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9S
RVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTI2KG8sIHMsIGwpIEJP
T1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzEyNywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9P
U1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxMjcsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkp
LCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF8xMjcobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMTI4LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09T
VF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDEyOCwgcywgQk9PU1Rf
UFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzEyOChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElT
VF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMjksIHMgQk9PU1RfUFBfVFVQ
TEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwg
bykoMTI5LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwp
KQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTI5KG8sIHMsIGwpIEJPT1NUX1BQ
X0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEz
MCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBf
TElTVF9JU19DT05TKGwpLCBvKSgxMzAsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09T
VF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMzAo
bywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMTMxLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9F
WFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDEzMSwgcywgQk9PU1RfUFBfTElT
VF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzEzMShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19D
T05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMzIsIHMgQk9PU1RfUFBfVFVQTEVfRUFU
XzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTMy
LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTMyKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihC
T09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEzMywgcyBC
T09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9J
U19DT05TKGwpLCBvKSgxMzMsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9M
SVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMzMobywgcywg
bCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfMTM0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJ
RihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDEzNCwgcywgQk9PU1RfUFBfTElTVF9GSVJT
VChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzEzNChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwp
LCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMzUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8s
IEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTM1LCBzLCBC
T09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTM1KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9Q
UF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEzNiwgcyBCT09TVF9Q
UF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05T
KGwpLCBvKSgxMzYsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JF
U1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMzYobywgcywgbCkgQk9P
U1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMTM3LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09T
VF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDEzNywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSks
IEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
XzEzNyhvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8xMzgsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NU
X1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTM4LCBzLCBCT09TVF9Q
UF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfMTM4KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNU
X0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEzOSwgcyBCT09TVF9QUF9UVVBM
RV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBv
KSgxMzksIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkp
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMzkobywgcywgbCkgQk9PU1RfUFBf
SUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTQw
LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9M
SVNUX0lTX0NPTlMobCksIG8pKDE0MCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NU
X1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE0MChv
LCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8xNDEsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VY
UFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTQxLCBzLCBCT09TVF9QUF9MSVNU
X0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfMTQxKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NP
TlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE0MiwgcyBCT09TVF9QUF9UVVBMRV9FQVRf
MykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxNDIs
IHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNDIobywgcywgbCkgQk9PU1RfUFBfSUlGKEJP
T1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTQzLCBzIEJP
T1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lT
X0NPTlMobCksIG8pKDE0MywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJ
U1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE0MyhvLCBzLCBs
KSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF8xNDQsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlG
KEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTQ0LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNU
KGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfMTQ0KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCks
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE0NSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywg
Qk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxNDUsIHMsIEJP
T1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNDUobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQ
X0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTQ2LCBzIEJPT1NUX1BQ
X1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMo
bCksIG8pKDE0NiwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVT
VChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE0NihvLCBzLCBsKSBCT09T
VF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF8xNDcsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NU
X1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTQ3LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwg
Qk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
MTQ3KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzE0OCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1Rf
UFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxNDgsIHMsIEJPT1NUX1BQ
X0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8xNDgobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1Rf
SVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTQ5LCBzIEJPT1NUX1BQX1RVUExF
X0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8p
KDE0OSwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE0OShvLCBzLCBsKSBCT09TVF9QUF9J
SUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNTAs
IHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJ
U1RfSVNfQ09OUyhsKSwgbykoMTUwLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1Rf
UFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTUwKG8s
IHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzE1MSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQ
Ul9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxNTEsIHMsIEJPT1NUX1BQX0xJU1Rf
RklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF8xNTEobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09O
UyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTUyLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8z
KShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDE1Miwg
cywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE1MihvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9P
U1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNTMsIHMgQk9P
U1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNf
Q09OUyhsKSwgbykoMTUzLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElT
VF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTUzKG8sIHMsIGwp
IEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzE1NCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYo
Qk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxNTQsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1Qo
bCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8xNTQobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTU1LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBC
T09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDE1NSwgcywgQk9P
U1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE1NShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBf
TElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNTYsIHMgQk9PU1RfUFBf
VFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhs
KSwgbykoMTU2LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNU
KGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTU2KG8sIHMsIGwpIEJPT1NU
X1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
XzE1NywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1Rf
UFBfTElTVF9JU19DT05TKGwpLCBvKSgxNTcsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBC
T09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8x
NTcobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfMTU4LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9Q
UF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDE1OCwgcywgQk9PU1RfUFBf
TElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzE1OChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9J
U19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNTksIHMgQk9PU1RfUFBfVFVQTEVf
RUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbyko
MTU5LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQot
IyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTU5KG8sIHMsIGwpIEJPT1NUX1BQX0lJ
RihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE2MCwg
cyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElT
VF9JU19DT05TKGwpLCBvKSgxNjAsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9Q
UF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNjAobywg
cywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfMTYxLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBS
X0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDE2MSwgcywgQk9PU1RfUFBfTElTVF9G
SVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzE2MShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05T
KGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNjIsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMp
KG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTYyLCBz
LCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZp
bmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTYyKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09T
VF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE2MywgcyBCT09T
VF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19D
T05TKGwpLCBvKSgxNjMsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNU
X1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNjMobywgcywgbCkg
Qk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfMTY0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihC
T09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDE2NCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChs
KSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzE2NChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNjUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJP
T1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTY1LCBzLCBCT09T
VF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMTY1KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9M
SVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE2NiwgcyBCT09TVF9QUF9U
VVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwp
LCBvKSgxNjYsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1Qo
bCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNjYobywgcywgbCkgQk9PU1Rf
UFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
MTY3LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9Q
UF9MSVNUX0lTX0NPTlMobCksIG8pKDE2NywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJP
T1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE2
NyhvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8xNjgsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQ
X0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTY4LCBzLCBCT09TVF9QUF9M
SVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMTY4KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lT
X0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE2OSwgcyBCT09TVF9QUF9UVVBMRV9F
QVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgx
NjksIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNjkobywgcywgbCkgQk9PU1RfUFBfSUlG
KEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTcwLCBz
IEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNU
X0lTX0NPTlMobCksIG8pKDE3MCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQ
X0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE3MChvLCBz
LCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF8xNzEsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJf
SUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTcxLCBzLCBCT09TVF9QUF9MSVNUX0ZJ
UlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfMTcxKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMo
bCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE3MiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMyko
bywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxNzIsIHMs
IEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNzIobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NU
X1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTczLCBzIEJPT1NU
X1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NP
TlMobCksIG8pKDE3MywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1Rf
UkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE3MyhvLCBzLCBsKSBC
T09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8xNzQsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJP
T1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTc0LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwp
KSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMTc0KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE3NSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9P
U1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxNzUsIHMsIEJPT1NU
X1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8xNzUobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJ
U1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTc2LCBzIEJPT1NUX1BQX1RV
UExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCks
IG8pKDE3NiwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChs
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE3NihvLCBzLCBsKSBCT09TVF9Q
UF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8x
NzcsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQ
X0xJU1RfSVNfQ09OUyhsKSwgbykoMTc3LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9P
U1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTc3
KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzE3OCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBf
RVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxNzgsIHMsIEJPT1NUX1BQX0xJ
U1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8xNzgobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNf
Q09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTc5LCBzIEJPT1NUX1BQX1RVUExFX0VB
VF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDE3
OSwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE3OShvLCBzLCBsKSBCT09TVF9QUF9JSUYo
Qk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xODAsIHMg
Qk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1Rf
SVNfQ09OUyhsKSwgbykoMTgwLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBf
TElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTgwKG8sIHMs
IGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzE4MSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9J
SUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxODEsIHMsIEJPT1NUX1BQX0xJU1RfRklS
U1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF8xODEobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhs
KSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTgyLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShv
LCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDE4Miwgcywg
Qk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE4MihvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1Rf
UFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xODMsIHMgQk9PU1Rf
UFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09O
UyhsKSwgbykoMTgzLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9S
RVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTgzKG8sIHMsIGwpIEJP
T1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzE4NCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9P
U1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxODQsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkp
LCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF8xODQobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMTg1LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09T
VF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDE4NSwgcywgQk9PU1Rf
UFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzE4NShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElT
VF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xODYsIHMgQk9PU1RfUFBfVFVQ
TEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwg
bykoMTg2LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwp
KQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTg2KG8sIHMsIGwpIEJPT1NUX1BQ
X0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE4
NywgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBf
TElTVF9JU19DT05TKGwpLCBvKSgxODcsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09T
VF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xODco
bywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMTg4LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9F
WFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDE4OCwgcywgQk9PU1RfUFBfTElT
VF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzE4OChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19D
T05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xODksIHMgQk9PU1RfUFBfVFVQTEVfRUFU
XzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTg5
LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTg5KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihC
T09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE5MCwgcyBC
T09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9J
U19DT05TKGwpLCBvKSgxOTAsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9M
SVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xOTAobywgcywg
bCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfMTkxLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJ
RihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDE5MSwgcywgQk9PU1RfUFBfTElTVF9GSVJT
VChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzE5MShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwp
LCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xOTIsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8s
IEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTkyLCBzLCBC
T09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTkyKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9Q
UF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE5MywgcyBCT09TVF9Q
UF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05T
KGwpLCBvKSgxOTMsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JF
U1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xOTMobywgcywgbCkgQk9P
U1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMTk0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09T
VF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDE5NCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSks
IEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
XzE5NChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8xOTUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NU
X1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTk1LCBzLCBCT09TVF9Q
UF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfMTk1KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNU
X0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE5NiwgcyBCT09TVF9QUF9UVVBM
RV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBv
KSgxOTYsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkp
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xOTYobywgcywgbCkgQk9PU1RfUFBf
SUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTk3
LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9M
SVNUX0lTX0NPTlMobCksIG8pKDE5NywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NU
X1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE5Nyhv
LCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8xOTgsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VY
UFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMTk4LCBzLCBCT09TVF9QUF9MSVNU
X0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfMTk4KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NP
TlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE5OSwgcyBCT09TVF9QUF9UVVBMRV9FQVRf
MykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgxOTks
IHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xOTkobywgcywgbCkgQk9PU1RfUFBfSUlGKEJP
T1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjAwLCBzIEJP
T1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lT
X0NPTlMobCksIG8pKDIwMCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJ
U1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIwMChvLCBzLCBs
KSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF8yMDEsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlG
KEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjAxLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNU
KGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfMjAxKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCks
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIwMiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywg
Qk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgyMDIsIHMsIEJP
T1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMDIobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQ
X0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjAzLCBzIEJPT1NUX1BQ
X1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMo
bCksIG8pKDIwMywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVT
VChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIwMyhvLCBzLCBsKSBCT09T
VF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF8yMDQsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NU
X1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjA0LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwg
Qk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
MjA0KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzIwNSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1Rf
UFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgyMDUsIHMsIEJPT1NUX1BQ
X0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8yMDUobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1Rf
SVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjA2LCBzIEJPT1NUX1BQX1RVUExF
X0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8p
KDIwNiwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIwNihvLCBzLCBsKSBCT09TVF9QUF9J
SUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMDcs
IHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJ
U1RfSVNfQ09OUyhsKSwgbykoMjA3LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1Rf
UFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjA3KG8s
IHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzIwOCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQ
Ul9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgyMDgsIHMsIEJPT1NUX1BQX0xJU1Rf
RklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF8yMDgobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09O
UyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjA5LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8z
KShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDIwOSwg
cywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIwOShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9P
U1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMTAsIHMgQk9P
U1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNf
Q09OUyhsKSwgbykoMjEwLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElT
VF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjEwKG8sIHMsIGwp
IEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzIxMSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYo
Qk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgyMTEsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1Qo
bCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8yMTEobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjEyLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBC
T09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDIxMiwgcywgQk9P
U1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIxMihvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBf
TElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMTMsIHMgQk9PU1RfUFBf
VFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhs
KSwgbykoMjEzLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNU
KGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjEzKG8sIHMsIGwpIEJPT1NU
X1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
XzIxNCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1Rf
UFBfTElTVF9JU19DT05TKGwpLCBvKSgyMTQsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBC
T09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8y
MTQobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfMjE1LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9Q
UF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDIxNSwgcywgQk9PU1RfUFBf
TElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzIxNShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9J
U19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMTYsIHMgQk9PU1RfUFBfVFVQTEVf
RUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbyko
MjE2LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQot
IyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjE2KG8sIHMsIGwpIEJPT1NUX1BQX0lJ
RihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIxNywg
cyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElT
VF9JU19DT05TKGwpLCBvKSgyMTcsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9Q
UF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMTcobywg
cywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfMjE4LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBS
X0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDIxOCwgcywgQk9PU1RfUFBfTElTVF9G
SVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzIxOChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05T
KGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMTksIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMp
KG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjE5LCBz
LCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZp
bmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjE5KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09T
VF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIyMCwgcyBCT09T
VF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19D
T05TKGwpLCBvKSgyMjAsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNU
X1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMjAobywgcywgbCkg
Qk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfMjIxLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihC
T09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDIyMSwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChs
KSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzIyMShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMjIsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJP
T1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjIyLCBzLCBCT09T
VF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMjIyKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9M
SVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIyMywgcyBCT09TVF9QUF9U
VVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwp
LCBvKSgyMjMsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1Qo
bCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMjMobywgcywgbCkgQk9PU1Rf
UFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
MjI0LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9Q
UF9MSVNUX0lTX0NPTlMobCksIG8pKDIyNCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJP
T1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIy
NChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8yMjUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQ
X0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjI1LCBzLCBCT09TVF9QUF9M
SVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMjI1KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lT
X0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIyNiwgcyBCT09TVF9QUF9UVVBMRV9F
QVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgy
MjYsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMjYobywgcywgbCkgQk9PU1RfUFBfSUlG
KEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjI3LCBz
IEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNU
X0lTX0NPTlMobCksIG8pKDIyNywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQ
X0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIyNyhvLCBz
LCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF8yMjgsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJf
SUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjI4LCBzLCBCT09TVF9QUF9MSVNUX0ZJ
UlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfMjI4KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMo
bCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIyOSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMyko
bywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgyMjksIHMs
IEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMjkobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NU
X1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjMwLCBzIEJPT1NU
X1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NP
TlMobCksIG8pKDIzMCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1Rf
UkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIzMChvLCBzLCBsKSBC
T09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8yMzEsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJP
T1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjMxLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwp
KSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMjMxKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIzMiwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9P
U1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgyMzIsIHMsIEJPT1NU
X1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8yMzIobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJ
U1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjMzLCBzIEJPT1NUX1BQX1RV
UExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCks
IG8pKDIzMywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChs
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIzMyhvLCBzLCBsKSBCT09TVF9Q
UF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8y
MzQsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQ
X0xJU1RfSVNfQ09OUyhsKSwgbykoMjM0LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9P
U1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjM0
KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzIzNSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBf
RVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgyMzUsIHMsIEJPT1NUX1BQX0xJ
U1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8yMzUobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNf
Q09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjM2LCBzIEJPT1NUX1BQX1RVUExFX0VB
VF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDIz
NiwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIzNihvLCBzLCBsKSBCT09TVF9QUF9JSUYo
Qk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMzcsIHMg
Qk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1Rf
SVNfQ09OUyhsKSwgbykoMjM3LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBf
TElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjM3KG8sIHMs
IGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzIzOCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9J
SUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgyMzgsIHMsIEJPT1NUX1BQX0xJU1RfRklS
U1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF8yMzgobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhs
KSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjM5LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShv
LCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDIzOSwgcywg
Qk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIzOShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1Rf
UFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNDAsIHMgQk9PU1Rf
UFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09O
UyhsKSwgbykoMjQwLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9S
RVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjQwKG8sIHMsIGwpIEJP
T1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzI0MSwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9P
U1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgyNDEsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkp
LCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF8yNDEobywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMjQyLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09T
VF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDI0MiwgcywgQk9PU1Rf
UFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzI0MihvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElT
VF9JU19DT05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNDMsIHMgQk9PU1RfUFBfVFVQ
TEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwg
bykoMjQzLCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwp
KQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjQzKG8sIHMsIGwpIEJPT1NUX1BQ
X0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI0
NCwgcyBCT09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBf
TElTVF9JU19DT05TKGwpLCBvKSgyNDQsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09T
VF9QUF9MSVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNDQo
bywgcywgbCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMjQ1LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9F
WFBSX0lJRihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDI0NSwgcywgQk9PU1RfUFBfTElT
VF9GSVJTVChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzI0NShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19D
T05TKGwpLCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNDYsIHMgQk9PU1RfUFBfVFVQTEVfRUFU
XzMpKG8sIEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjQ2
LCBzLCBCT09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjQ2KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihC
T09TVF9QUF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI0NywgcyBC
T09TVF9QUF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9J
U19DT05TKGwpLCBvKSgyNDcsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9M
SVNUX1JFU1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNDcobywgcywg
bCkgQk9PU1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfMjQ4LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJ
RihCT09TVF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDI0OCwgcywgQk9PU1RfUFBfTElTVF9GSVJT
VChsKSksIEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzI0OChvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwp
LCBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNDksIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8s
IEJPT1NUX1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjQ5LCBzLCBC
T09TVF9QUF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjQ5KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9Q
UF9MSVNUX0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI1MCwgcyBCT09TVF9Q
UF9UVVBMRV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05T
KGwpLCBvKSgyNTAsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JF
U1QobCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNTAobywgcywgbCkgQk9P
U1RfUFBfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMjUxLCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09T
VF9QUF9MSVNUX0lTX0NPTlMobCksIG8pKDI1MSwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSks
IEJPT1NUX1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
XzI1MShvLCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8yNTIsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NU
X1BQX0VYUFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjUyLCBzLCBCT09TVF9Q
UF9MSVNUX0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfMjUyKG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNU
X0lTX0NPTlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI1MywgcyBCT09TVF9QUF9UVVBM
RV9FQVRfMykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBv
KSgyNTMsIHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkp
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNTMobywgcywgbCkgQk9PU1RfUFBf
SUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjU0
LCBzIEJPT1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9M
SVNUX0lTX0NPTlMobCksIG8pKDI1NCwgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NU
X1BQX0xJU1RfUkVTVChsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI1NChv
LCBzLCBsKSBCT09TVF9QUF9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8yNTUsIHMgQk9PU1RfUFBfVFVQTEVfRUFUXzMpKG8sIEJPT1NUX1BQX0VY
UFJfSUlGKEJPT1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgbykoMjU1LCBzLCBCT09TVF9QUF9MSVNU
X0ZJUlNUKGwpKSwgQk9PU1RfUFBfTElTVF9SRVNUKGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfMjU1KG8sIHMsIGwpIEJPT1NUX1BQX0lJRihCT09TVF9QUF9MSVNUX0lTX0NP
TlMobCksIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI1NiwgcyBCT09TVF9QUF9UVVBMRV9FQVRf
MykobywgQk9PU1RfUFBfRVhQUl9JSUYoQk9PU1RfUFBfTElTVF9JU19DT05TKGwpLCBvKSgyNTYs
IHMsIEJPT1NUX1BQX0xJU1RfRklSU1QobCkpLCBCT09TVF9QUF9MSVNUX1JFU1QobCkpCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNTYobywgcywgbCkgQk9PU1RfUFBfSUlGKEJP
T1NUX1BQX0xJU1RfSVNfQ09OUyhsKSwgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjU3LCBzIEJP
T1NUX1BQX1RVUExFX0VBVF8zKShvLCBCT09TVF9QUF9FWFBSX0lJRihCT09TVF9QUF9MSVNUX0lT
X0NPTlMobCksIG8pKDI1NywgcywgQk9PU1RfUFBfTElTVF9GSVJTVChsKSksIEJPT1NUX1BQX0xJ
U1RfUkVTVChsKSkKLSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2RldGFpbC9mb2xkX3JpZ2h0
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nl
c3Nvci9saXN0L2RldGFpbC9mb2xkX3JpZ2h0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjkxNDZkNTA0YjQ0YzliYzg4NWI4NDQ5ZjEyNjBmMjE2Mzk4Y2ZlMC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9kZXRhaWwvZm9sZF9yaWdo
dC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotIyAvKiBDb3B5cmlnaHQgKEMp
IDIwMDEKLSMgICogSG91c2VtYXJxdWUgT3kKLSMgICogaHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5j
b20KLSMgICoKLSMgICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8w
LnR4dCBvciBjb3B5IGF0Ci0jICAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkKLSMgICovCi0jCi0jIC8qIFJldmlzZWQgYnkgUGF1bCBNZW5zb25pZGVzICgyMDAyKSAqLwot
IwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24u
ICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfTElTVF9ERVRBSUxfRk9MRF9SSUdI
VF9IUFAKLSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NPUl9MSVNUX0RFVEFJTF9GT0xEX1JJR0hU
X0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9mb2xkX2xlZnQuaHBw
PgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9yZXZlcnNlLmhwcD4KLSMKLSMg
ZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzEobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMSwgbCkpCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMihvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8yKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDIsIGwpKQotIyBkZWZpbmUgQk9P
U1RfUFBfTElTVF9GT0xEX1JJR0hUXzMobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
MyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgzLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0xJU1RfRk9MRF9SSUdIVF80KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzQobywg
cywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoNCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfUklHSFRfNShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81KG8sIHMsIEJP
T1NUX1BQX0xJU1RfUkVWRVJTRV9EKDUsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xE
X1JJR0hUXzYobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNihvLCBzLCBCT09TVF9Q
UF9MSVNUX1JFVkVSU0VfRCg2LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdI
VF83KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzcobywgcywgQk9PU1RfUFBfTElT
VF9SRVZFUlNFX0QoNywgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfOChv
LCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF84KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVW
RVJTRV9EKDgsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzkobywgcywg
bCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfOShvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0Vf
RCg5LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xMChvLCBzLCBsKSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgx
MCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTEobywgcywgbCkgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMTEobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTEs
IGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzEyKG8sIHMsIGwpIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzEyKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDEyLCBs
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xMyhvLCBzLCBsKSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8xMyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxMywgbCkp
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTQobywgcywgbCkgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMTQobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTQsIGwpKQot
IyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzE1KG8sIHMsIGwpIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzE1KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE1LCBsKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xNihvLCBzLCBsKSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF8xNihvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxNiwgbCkpCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTcobywgcywgbCkgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfMTcobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTcsIGwpKQotIyBkZWZp
bmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzE4KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzE4KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE4LCBsKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xOShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8xOShvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxOSwgbCkpCi0jIGRlZmluZSBC
T09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMjAobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMjAobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjAsIGwpKQotIyBkZWZpbmUgQk9P
U1RfUFBfTElTVF9GT0xEX1JJR0hUXzIxKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
XzIxKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDIxLCBsKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0xJU1RfRk9MRF9SSUdIVF8yMihvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8y
MihvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgyMiwgbCkpCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfUklHSFRfMjMobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjMo
bywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjMsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBf
TElTVF9GT0xEX1JJR0hUXzI0KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI0KG8s
IHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDI0LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9SSUdIVF8yNShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNShvLCBz
LCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgyNSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfUklHSFRfMjYobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjYobywgcywg
Qk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjYsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9G
T0xEX1JJR0hUXzI3KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI3KG8sIHMsIEJP
T1NUX1BQX0xJU1RfUkVWRVJTRV9EKDI3LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9M
RF9SSUdIVF8yOChvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yOChvLCBzLCBCT09T
VF9QUF9MSVNUX1JFVkVSU0VfRCgyOCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
UklHSFRfMjkobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjkobywgcywgQk9PU1Rf
UFBfTElTVF9SRVZFUlNFX0QoMjksIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJ
R0hUXzMwKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzMwKG8sIHMsIEJPT1NUX1BQ
X0xJU1RfUkVWRVJTRV9EKDMwLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdI
VF8zMShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8zMShvLCBzLCBCT09TVF9QUF9M
SVNUX1JFVkVSU0VfRCgzMSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRf
MzIobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMzIobywgcywgQk9PU1RfUFBfTElT
VF9SRVZFUlNFX0QoMzIsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzMz
KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzMzKG8sIHMsIEJPT1NUX1BQX0xJU1Rf
UkVWRVJTRV9EKDMzLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8zNChv
LCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8zNChvLCBzLCBCT09TVF9QUF9MSVNUX1JF
VkVSU0VfRCgzNCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMzUobywg
cywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMzUobywgcywgQk9PU1RfUFBfTElTVF9SRVZF
UlNFX0QoMzUsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzM2KG8sIHMs
IGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzM2KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJT
RV9EKDM2LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8zNyhvLCBzLCBs
KSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8zNyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0Vf
RCgzNywgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMzgobywgcywgbCkg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMzgobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0Qo
MzgsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzM5KG8sIHMsIGwpIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzM5KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDM5
LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF80MChvLCBzLCBsKSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF80MChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCg0MCwg
bCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfNDEobywgcywgbCkgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfNDEobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoNDEsIGwp
KQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzQyKG8sIHMsIGwpIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzQyKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDQyLCBsKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF80MyhvLCBzLCBsKSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF80MyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCg0MywgbCkpCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfNDQobywgcywgbCkgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfNDQobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoNDQsIGwpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzQ1KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzQ1KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDQ1LCBsKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF80NihvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF80NihvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCg0NiwgbCkpCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfNDcobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfNDcobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoNDcsIGwpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzQ4KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzQ4KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDQ4LCBsKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0xJU1RfRk9MRF9SSUdIVF80OShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF80OShvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCg0OSwgbCkpCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfUklHSFRfNTAobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
NTAobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoNTAsIGwpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfTElTVF9GT0xEX1JJR0hUXzUxKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzUx
KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDUxLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0xJU1RfRk9MRF9SSUdIVF81MihvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81Mihv
LCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCg1MiwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfUklHSFRfNTMobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNTMobywg
cywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoNTMsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElT
VF9GT0xEX1JJR0hUXzU0KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzU0KG8sIHMs
IEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDU0LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9SSUdIVF81NShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81NShvLCBzLCBC
T09TVF9QUF9MSVNUX1JFVkVSU0VfRCg1NSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfUklHSFRfNTYobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNTYobywgcywgQk9P
U1RfUFBfTElTVF9SRVZFUlNFX0QoNTYsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xE
X1JJR0hUXzU3KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzU3KG8sIHMsIEJPT1NU
X1BQX0xJU1RfUkVWRVJTRV9EKDU3LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9S
SUdIVF81OChvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81OChvLCBzLCBCT09TVF9Q
UF9MSVNUX1JFVkVSU0VfRCg1OCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklH
SFRfNTkobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNTkobywgcywgQk9PU1RfUFBf
TElTVF9SRVZFUlNFX0QoNTksIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hU
XzYwKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzYwKG8sIHMsIEJPT1NUX1BQX0xJ
U1RfUkVWRVJTRV9EKDYwLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF82
MShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF82MShvLCBzLCBCT09TVF9QUF9MSVNU
X1JFVkVSU0VfRCg2MSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfNjIo
bywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNjIobywgcywgQk9PU1RfUFBfTElTVF9S
RVZFUlNFX0QoNjIsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzYzKG8s
IHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzYzKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVW
RVJTRV9EKDYzLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF82NChvLCBz
LCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF82NChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVS
U0VfRCg2NCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfNjUobywgcywg
bCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfNjUobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNF
X0QoNjUsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzY2KG8sIHMsIGwp
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzY2KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9E
KDY2LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF82NyhvLCBzLCBsKSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF82NyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCg2
NywgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfNjgobywgcywgbCkgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfNjgobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoNjgs
IGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzY5KG8sIHMsIGwpIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzY5KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDY5LCBs
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF83MChvLCBzLCBsKSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF83MChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCg3MCwgbCkp
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfNzEobywgcywgbCkgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfNzEobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoNzEsIGwpKQot
IyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzcyKG8sIHMsIGwpIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzcyKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDcyLCBsKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF83MyhvLCBzLCBsKSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF83MyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCg3MywgbCkpCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfNzQobywgcywgbCkgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfNzQobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoNzQsIGwpKQotIyBkZWZp
bmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzc1KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzc1KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDc1LCBsKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF83NihvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF83NihvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCg3NiwgbCkpCi0jIGRlZmluZSBC
T09TVF9QUF9MSVNUX0ZPTERfUklHSFRfNzcobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfNzcobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoNzcsIGwpKQotIyBkZWZpbmUgQk9P
U1RfUFBfTElTVF9GT0xEX1JJR0hUXzc4KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
Xzc4KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDc4LCBsKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0xJU1RfRk9MRF9SSUdIVF83OShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF83
OShvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCg3OSwgbCkpCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfUklHSFRfODAobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfODAo
bywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoODAsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBf
TElTVF9GT0xEX1JJR0hUXzgxKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzgxKG8s
IHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDgxLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9SSUdIVF84MihvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF84MihvLCBz
LCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCg4MiwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfUklHSFRfODMobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfODMobywgcywg
Qk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoODMsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9G
T0xEX1JJR0hUXzg0KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzg0KG8sIHMsIEJP
T1NUX1BQX0xJU1RfUkVWRVJTRV9EKDg0LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9M
RF9SSUdIVF84NShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF84NShvLCBzLCBCT09T
VF9QUF9MSVNUX1JFVkVSU0VfRCg4NSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
UklHSFRfODYobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfODYobywgcywgQk9PU1Rf
UFBfTElTVF9SRVZFUlNFX0QoODYsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJ
R0hUXzg3KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzg3KG8sIHMsIEJPT1NUX1BQ
X0xJU1RfUkVWRVJTRV9EKDg3LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdI
VF84OChvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF84OChvLCBzLCBCT09TVF9QUF9M
SVNUX1JFVkVSU0VfRCg4OCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRf
ODkobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfODkobywgcywgQk9PU1RfUFBfTElT
VF9SRVZFUlNFX0QoODksIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzkw
KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzkwKG8sIHMsIEJPT1NUX1BQX0xJU1Rf
UkVWRVJTRV9EKDkwLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF85MShv
LCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85MShvLCBzLCBCT09TVF9QUF9MSVNUX1JF
VkVSU0VfRCg5MSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfOTIobywg
cywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfOTIobywgcywgQk9PU1RfUFBfTElTVF9SRVZF
UlNFX0QoOTIsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzkzKG8sIHMs
IGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzkzKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJT
RV9EKDkzLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF85NChvLCBzLCBs
KSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85NChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0Vf
RCg5NCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfOTUobywgcywgbCkg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfOTUobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0Qo
OTUsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzk2KG8sIHMsIGwpIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzk2KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDk2
LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF85NyhvLCBzLCBsKSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF85NyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCg5Nywg
bCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfOTgobywgcywgbCkgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfOTgobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoOTgsIGwp
KQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzk5KG8sIHMsIGwpIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzk5KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDk5LCBsKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xMDAobywgcywgbCkgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMTAwKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDEwMCwgbCkp
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTAxKG8sIHMsIGwpIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzEwMShvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxMDEsIGwp
KQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzEwMihvLCBzLCBsKSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8xMDIobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTAyLCBs
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xMDMobywgcywgbCkgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfMTAzKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDEwMywg
bCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTA0KG8sIHMsIGwpIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzEwNChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxMDQs
IGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzEwNShvLCBzLCBsKSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8xMDUobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTA1
LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xMDYobywgcywgbCkgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMTA2KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDEw
NiwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTA3KG8sIHMsIGwpIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEwNyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgx
MDcsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzEwOChvLCBzLCBsKSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMDgobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0Qo
MTA4LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xMDkobywgcywgbCkg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTA5KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9E
KDEwOSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTEwKG8sIHMsIGwp
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzExMChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0Vf
RCgxMTAsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzExMShvLCBzLCBs
KSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMTEobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNF
X0QoMTExLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xMTIobywgcywg
bCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTEyKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJT
RV9EKDExMiwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTEzKG8sIHMs
IGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzExMyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVS
U0VfRCgxMTMsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzExNChvLCBz
LCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMTQobywgcywgQk9PU1RfUFBfTElTVF9SRVZF
UlNFX0QoMTE0LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xMTUobywg
cywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTE1KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVW
RVJTRV9EKDExNSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTE2KG8s
IHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzExNihvLCBzLCBCT09TVF9QUF9MSVNUX1JF
VkVSU0VfRCgxMTYsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzExNyhv
LCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMTcobywgcywgQk9PU1RfUFBfTElTVF9S
RVZFUlNFX0QoMTE3LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xMTgo
bywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTE4KG8sIHMsIEJPT1NUX1BQX0xJU1Rf
UkVWRVJTRV9EKDExOCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTE5
KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzExOShvLCBzLCBCT09TVF9QUF9MSVNU
X1JFVkVSU0VfRCgxMTksIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzEy
MChvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMjAobywgcywgQk9PU1RfUFBfTElT
VF9SRVZFUlNFX0QoMTIwLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8x
MjEobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTIxKG8sIHMsIEJPT1NUX1BQX0xJ
U1RfUkVWRVJTRV9EKDEyMSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRf
MTIyKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEyMihvLCBzLCBCT09TVF9QUF9M
SVNUX1JFVkVSU0VfRCgxMjIsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hU
XzEyMyhvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMjMobywgcywgQk9PU1RfUFBf
TElTVF9SRVZFUlNFX0QoMTIzLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdI
VF8xMjQobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTI0KG8sIHMsIEJPT1NUX1BQ
X0xJU1RfUkVWRVJTRV9EKDEyNCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklH
SFRfMTI1KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEyNShvLCBzLCBCT09TVF9Q
UF9MSVNUX1JFVkVSU0VfRCgxMjUsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJ
R0hUXzEyNihvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMjYobywgcywgQk9PU1Rf
UFBfTElTVF9SRVZFUlNFX0QoMTI2LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9S
SUdIVF8xMjcobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTI3KG8sIHMsIEJPT1NU
X1BQX0xJU1RfUkVWRVJTRV9EKDEyNywgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
UklHSFRfMTI4KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEyOChvLCBzLCBCT09T
VF9QUF9MSVNUX1JFVkVSU0VfRCgxMjgsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xE
X1JJR0hUXzEyOShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMjkobywgcywgQk9P
U1RfUFBfTElTVF9SRVZFUlNFX0QoMTI5LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9M
RF9SSUdIVF8xMzAobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTMwKG8sIHMsIEJP
T1NUX1BQX0xJU1RfUkVWRVJTRV9EKDEzMCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfUklHSFRfMTMxKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEzMShvLCBzLCBC
T09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxMzEsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9G
T0xEX1JJR0hUXzEzMihvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMzIobywgcywg
Qk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTMyLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9SSUdIVF8xMzMobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTMzKG8sIHMs
IEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDEzMywgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfUklHSFRfMTM0KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEzNChvLCBz
LCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxMzQsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElT
VF9GT0xEX1JJR0hUXzEzNShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMzUobywg
cywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTM1LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9SSUdIVF8xMzYobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTM2KG8s
IHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDEzNiwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfUklHSFRfMTM3KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEzNyhv
LCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxMzcsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBf
TElTVF9GT0xEX1JJR0hUXzEzOChvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMzgo
bywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTM4LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0xJU1RfRk9MRF9SSUdIVF8xMzkobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTM5
KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDEzOSwgbCkpCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfUklHSFRfMTQwKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE0
MChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxNDAsIGwpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfTElTVF9GT0xEX1JJR0hUXzE0MShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8x
NDEobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTQxLCBsKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0xJU1RfRk9MRF9SSUdIVF8xNDIobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
MTQyKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE0MiwgbCkpCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfUklHSFRfMTQzKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
XzE0MyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxNDMsIGwpKQotIyBkZWZpbmUgQk9P
U1RfUFBfTElTVF9GT0xEX1JJR0hUXzE0NChvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF8xNDQobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTQ0LCBsKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xNDUobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMTQ1KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE0NSwgbCkpCi0jIGRlZmluZSBC
T09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTQ2KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzE0NihvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxNDYsIGwpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzE0NyhvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8xNDcobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTQ3LCBsKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xNDgobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfMTQ4KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE0OCwgbCkpCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTQ5KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzE0OShvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxNDksIGwpKQotIyBkZWZp
bmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzE1MChvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF8xNTAobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTUwLCBsKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xNTEobywgcywgbCkgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfMTUxKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE1MSwgbCkpCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTUyKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzE1MihvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxNTIsIGwpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzE1MyhvLCBzLCBsKSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF8xNTMobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTUzLCBsKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xNTQobywgcywgbCkgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfMTU0KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE1NCwgbCkpCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTU1KG8sIHMsIGwpIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzE1NShvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxNTUsIGwpKQot
IyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzE1NihvLCBzLCBsKSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8xNTYobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTU2LCBsKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xNTcobywgcywgbCkgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMTU3KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE1NywgbCkp
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTU4KG8sIHMsIGwpIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzE1OChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxNTgsIGwp
KQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzE1OShvLCBzLCBsKSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8xNTkobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTU5LCBs
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xNjAobywgcywgbCkgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfMTYwKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE2MCwg
bCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTYxKG8sIHMsIGwpIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzE2MShvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxNjEs
IGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzE2MihvLCBzLCBsKSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8xNjIobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTYy
LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xNjMobywgcywgbCkgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMTYzKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE2
MywgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTY0KG8sIHMsIGwpIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE2NChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgx
NjQsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzE2NShvLCBzLCBsKSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNjUobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0Qo
MTY1LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xNjYobywgcywgbCkg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTY2KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9E
KDE2NiwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTY3KG8sIHMsIGwp
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE2NyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0Vf
RCgxNjcsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzE2OChvLCBzLCBs
KSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNjgobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNF
X0QoMTY4LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xNjkobywgcywg
bCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTY5KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJT
RV9EKDE2OSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTcwKG8sIHMs
IGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE3MChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVS
U0VfRCgxNzAsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzE3MShvLCBz
LCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNzEobywgcywgQk9PU1RfUFBfTElTVF9SRVZF
UlNFX0QoMTcxLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xNzIobywg
cywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTcyKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVW
RVJTRV9EKDE3MiwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTczKG8s
IHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE3MyhvLCBzLCBCT09TVF9QUF9MSVNUX1JF
VkVSU0VfRCgxNzMsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzE3NChv
LCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNzQobywgcywgQk9PU1RfUFBfTElTVF9S
RVZFUlNFX0QoMTc0LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8xNzUo
bywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTc1KG8sIHMsIEJPT1NUX1BQX0xJU1Rf
UkVWRVJTRV9EKDE3NSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMTc2
KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE3NihvLCBzLCBCT09TVF9QUF9MSVNU
X1JFVkVSU0VfRCgxNzYsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzE3
NyhvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNzcobywgcywgQk9PU1RfUFBfTElT
VF9SRVZFUlNFX0QoMTc3LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8x
NzgobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTc4KG8sIHMsIEJPT1NUX1BQX0xJ
U1RfUkVWRVJTRV9EKDE3OCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRf
MTc5KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE3OShvLCBzLCBCT09TVF9QUF9M
SVNUX1JFVkVSU0VfRCgxNzksIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hU
XzE4MChvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xODAobywgcywgQk9PU1RfUFBf
TElTVF9SRVZFUlNFX0QoMTgwLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdI
VF8xODEobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTgxKG8sIHMsIEJPT1NUX1BQ
X0xJU1RfUkVWRVJTRV9EKDE4MSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklH
SFRfMTgyKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE4MihvLCBzLCBCT09TVF9Q
UF9MSVNUX1JFVkVSU0VfRCgxODIsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJ
R0hUXzE4MyhvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xODMobywgcywgQk9PU1Rf
UFBfTElTVF9SRVZFUlNFX0QoMTgzLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9S
SUdIVF8xODQobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTg0KG8sIHMsIEJPT1NU
X1BQX0xJU1RfUkVWRVJTRV9EKDE4NCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
UklHSFRfMTg1KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE4NShvLCBzLCBCT09T
VF9QUF9MSVNUX1JFVkVSU0VfRCgxODUsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xE
X1JJR0hUXzE4NihvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xODYobywgcywgQk9P
U1RfUFBfTElTVF9SRVZFUlNFX0QoMTg2LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9M
RF9SSUdIVF8xODcobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTg3KG8sIHMsIEJP
T1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE4NywgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfUklHSFRfMTg4KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE4OChvLCBzLCBC
T09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxODgsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9G
T0xEX1JJR0hUXzE4OShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xODkobywgcywg
Qk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTg5LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9SSUdIVF8xOTAobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTkwKG8sIHMs
IEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE5MCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfUklHSFRfMTkxKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE5MShvLCBz
LCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxOTEsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElT
VF9GT0xEX1JJR0hUXzE5MihvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xOTIobywg
cywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTkyLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9SSUdIVF8xOTMobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTkzKG8s
IHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE5MywgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfUklHSFRfMTk0KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE5NChv
LCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxOTQsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBf
TElTVF9GT0xEX1JJR0hUXzE5NShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xOTUo
bywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTk1LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0xJU1RfRk9MRF9SSUdIVF8xOTYobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTk2
KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE5NiwgbCkpCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfUklHSFRfMTk3KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE5
NyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgxOTcsIGwpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfTElTVF9GT0xEX1JJR0hUXzE5OChvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8x
OTgobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMTk4LCBsKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0xJU1RfRk9MRF9SSUdIVF8xOTkobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
MTk5KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDE5OSwgbCkpCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfUklHSFRfMjAwKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
XzIwMChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgyMDAsIGwpKQotIyBkZWZpbmUgQk9P
U1RfUFBfTElTVF9GT0xEX1JJR0hUXzIwMShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF8yMDEobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjAxLCBsKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8yMDIobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMjAyKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDIwMiwgbCkpCi0jIGRlZmluZSBC
T09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMjAzKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzIwMyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgyMDMsIGwpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzIwNChvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8yMDQobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjA0LCBsKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8yMDUobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfMjA1KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDIwNSwgbCkpCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMjA2KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzIwNihvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgyMDYsIGwpKQotIyBkZWZp
bmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzIwNyhvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF8yMDcobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjA3LCBsKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8yMDgobywgcywgbCkgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfMjA4KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDIwOCwgbCkpCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMjA5KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzIwOShvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgyMDksIGwpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzIxMChvLCBzLCBsKSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF8yMTAobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjEwLCBsKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8yMTEobywgcywgbCkgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfMjExKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDIxMSwgbCkpCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMjEyKG8sIHMsIGwpIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzIxMihvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgyMTIsIGwpKQot
IyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzIxMyhvLCBzLCBsKSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8yMTMobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjEzLCBsKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8yMTQobywgcywgbCkgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMjE0KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDIxNCwgbCkp
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMjE1KG8sIHMsIGwpIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzIxNShvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgyMTUsIGwp
KQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzIxNihvLCBzLCBsKSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8yMTYobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjE2LCBs
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8yMTcobywgcywgbCkgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfMjE3KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDIxNywg
bCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMjE4KG8sIHMsIGwpIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzIxOChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgyMTgs
IGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzIxOShvLCBzLCBsKSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8yMTkobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjE5
LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8yMjAobywgcywgbCkgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMjIwKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDIy
MCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMjIxKG8sIHMsIGwpIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIyMShvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgy
MjEsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzIyMihvLCBzLCBsKSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMjIobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0Qo
MjIyLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8yMjMobywgcywgbCkg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjIzKG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9E
KDIyMywgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMjI0KG8sIHMsIGwp
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIyNChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0Vf
RCgyMjQsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzIyNShvLCBzLCBs
KSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMjUobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNF
X0QoMjI1LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8yMjYobywgcywg
bCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjI2KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJT
RV9EKDIyNiwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMjI3KG8sIHMs
IGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIyNyhvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVS
U0VfRCgyMjcsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzIyOChvLCBz
LCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMjgobywgcywgQk9PU1RfUFBfTElTVF9SRVZF
UlNFX0QoMjI4LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8yMjkobywg
cywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjI5KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVW
RVJTRV9EKDIyOSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMjMwKG8s
IHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIzMChvLCBzLCBCT09TVF9QUF9MSVNUX1JF
VkVSU0VfRCgyMzAsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzIzMShv
LCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMzEobywgcywgQk9PU1RfUFBfTElTVF9S
RVZFUlNFX0QoMjMxLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8yMzIo
bywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjMyKG8sIHMsIEJPT1NUX1BQX0xJU1Rf
UkVWRVJTRV9EKDIzMiwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMjMz
KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIzMyhvLCBzLCBCT09TVF9QUF9MSVNU
X1JFVkVSU0VfRCgyMzMsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzIz
NChvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMzQobywgcywgQk9PU1RfUFBfTElT
VF9SRVZFUlNFX0QoMjM0LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8y
MzUobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjM1KG8sIHMsIEJPT1NUX1BQX0xJ
U1RfUkVWRVJTRV9EKDIzNSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRf
MjM2KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIzNihvLCBzLCBCT09TVF9QUF9M
SVNUX1JFVkVSU0VfRCgyMzYsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hU
XzIzNyhvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMzcobywgcywgQk9PU1RfUFBf
TElTVF9SRVZFUlNFX0QoMjM3LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdI
VF8yMzgobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjM4KG8sIHMsIEJPT1NUX1BQ
X0xJU1RfUkVWRVJTRV9EKDIzOCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklH
SFRfMjM5KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIzOShvLCBzLCBCT09TVF9Q
UF9MSVNUX1JFVkVSU0VfRCgyMzksIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJ
R0hUXzI0MChvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNDAobywgcywgQk9PU1Rf
UFBfTElTVF9SRVZFUlNFX0QoMjQwLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9S
SUdIVF8yNDEobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjQxKG8sIHMsIEJPT1NU
X1BQX0xJU1RfUkVWRVJTRV9EKDI0MSwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
UklHSFRfMjQyKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI0MihvLCBzLCBCT09T
VF9QUF9MSVNUX1JFVkVSU0VfRCgyNDIsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xE
X1JJR0hUXzI0MyhvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNDMobywgcywgQk9P
U1RfUFBfTElTVF9SRVZFUlNFX0QoMjQzLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9M
RF9SSUdIVF8yNDQobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjQ0KG8sIHMsIEJP
T1NUX1BQX0xJU1RfUkVWRVJTRV9EKDI0NCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfUklHSFRfMjQ1KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI0NShvLCBzLCBC
T09TVF9QUF9MSVNUX1JFVkVSU0VfRCgyNDUsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9G
T0xEX1JJR0hUXzI0NihvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNDYobywgcywg
Qk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjQ2LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9SSUdIVF8yNDcobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjQ3KG8sIHMs
IEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDI0NywgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfUklHSFRfMjQ4KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI0OChvLCBz
LCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgyNDgsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBfTElT
VF9GT0xEX1JJR0hUXzI0OShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNDkobywg
cywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjQ5LCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9SSUdIVF8yNTAobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjUwKG8s
IHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDI1MCwgbCkpCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfUklHSFRfMjUxKG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI1MShv
LCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgyNTEsIGwpKQotIyBkZWZpbmUgQk9PU1RfUFBf
TElTVF9GT0xEX1JJR0hUXzI1MihvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNTIo
bywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjUyLCBsKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0xJU1RfRk9MRF9SSUdIVF8yNTMobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjUz
KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDI1MywgbCkpCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfUklHSFRfMjU0KG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI1
NChvLCBzLCBCT09TVF9QUF9MSVNUX1JFVkVSU0VfRCgyNTQsIGwpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfTElTVF9GT0xEX1JJR0hUXzI1NShvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8y
NTUobywgcywgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoMjU1LCBsKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0xJU1RfRk9MRF9SSUdIVF8yNTYobywgcywgbCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
MjU2KG8sIHMsIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9EKDI1NiwgbCkpCi0jCi0jIGVuZGlmCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVw
cm9jZXNzb3IvbGlzdC9mb2xkX2xlZnQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2xpc3QvZm9sZF9sZWZ0LmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZjIzNWFlYzhlNzk0NmY3Nzg2OTdhYzhlZmZmMWEyOTlkOTM5
NmE3My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9m
b2xkX2xlZnQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzAzICswLDAgQEAKLSMgLyogQ29weXJp
Z2h0IChDKSAyMDAxCi0jICAqIEhvdXNlbWFycXVlIE95Ci0jICAqIGh0dHA6Ly93d3cuaG91c2Vt
YXJxdWUuY29tCi0jICAqCi0jICAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0jICAqLwotIwotIyAvKiBSZXZpc2VkIGJ5IFBhdWwgTWVuc29uaWRlcyAoMjAw
MikgKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2
ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX0xJU1RfRk9MRF9MRUZU
X0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX0xJU1RfRk9MRF9MRUZUX0hQUAotIwot
IyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3Qv
cHJlcHJvY2Vzc29yL2NvbnRyb2wvd2hpbGUuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9j
ZXNzb3IvZGVidWcvZXJyb3IuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvZGV0
YWlsL2F1dG9fcmVjLmhwcD4KLSMKLSMgLyogQk9PU1RfUFBfTElTVF9GT0xEX0xFRlQgKi8KLSMK
LSMgaWYgMAotIyAgICBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlQob3AsIHN0YXRlLCBs
aXN0KQotIyBlbmRpZgotIwotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlQgQk9PU1Rf
UFBfQ0FUKEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXywgQk9PU1RfUFBfQVVUT19SRUMoQk9PU1Rf
UFBfV0hJTEVfUCwgMjU2KSkKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI1
NyhvLCBzLCBsKSBCT09TVF9QUF9FUlJPUigweDAwMDQpCi0jCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF9EKGQsIG8sIHMsIGwpIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXyAjIyBk
KG8sIHMsIGwpCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yTkQgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlQKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzJORF9EIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUX0QKLSMKLSMgaWYgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkg
JiBCT09TVF9QUF9DT05GSUdfRURHKCkKLSMgICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29y
L2xpc3QvZGV0YWlsL2VkZy9mb2xkX2xlZnQuaHBwPgotIyBlbGlmIEJPT1NUX1BQX0NPTkZJR19G
TEFHUygpICYgQk9PU1RfUFBfQ09ORklHX0RNQygpCi0jICAgIGluY2x1ZGUgPGJvb3N0L3ByZXBy
b2Nlc3Nvci9saXN0L2RldGFpbC9kbWMvZm9sZF9sZWZ0LmhwcD4KLSMgZWxzZQotIyAgICBpbmNs
dWRlIDxib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9kZXRhaWwvZm9sZF9sZWZ0LmhwcD4KLSMgZW5k
aWYKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX05J
TCAxCi0jCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8xKG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIobywgcywgbCkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMyhv
LCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF80KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzUobywgcywgbCkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
NihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF83KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzgobywgcywgbCkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfOShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19C
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMShvLCBzLCBsKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF8xMihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9D
SEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNChvLCBz
LCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8xNShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNihvLCBzLCBsKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8x
NyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8xOChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xOShvLCBzLCBsKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8yMChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVD
S19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMihvLCBzLCBs
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF8yMyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNChvLCBzLCBsKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNShv
LCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8yNihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNyhvLCBzLCBsKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF8yOChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19C
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yOShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8zMChvLCBzLCBsKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF8zMShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9D
SEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8zMihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8zMyhvLCBz
LCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8zNChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8zNShvLCBzLCBsKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8z
NihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8zNyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8zOChvLCBzLCBsKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8zOShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVD
S19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF80MChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF80MShvLCBzLCBs
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF80MihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF80MyhvLCBzLCBsKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF80NChv
LCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF80NShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF80NihvLCBzLCBsKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF80NyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19C
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF80OChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF80OShvLCBzLCBsKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF81MChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9D
SEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81MShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81MihvLCBz
LCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF81MyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81NChvLCBzLCBsKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81
NShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF81NihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81NyhvLCBzLCBsKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF81OChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVD
S19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF81OShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF82MChvLCBzLCBs
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF82MShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF82MihvLCBzLCBsKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF82Myhv
LCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF82NChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF82NShvLCBzLCBsKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF82NihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19C
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF82NyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF82OChvLCBzLCBsKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF82OShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9D
SEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF83MChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF83MShvLCBz
LCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF83MihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF83MyhvLCBzLCBsKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF83
NChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF83NShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF83NihvLCBzLCBsKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF83NyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVD
S19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF83OChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF83OShvLCBzLCBs
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF84MChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF84MShvLCBzLCBsKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF84Mihv
LCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF84MyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF84NChvLCBzLCBsKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF84NShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19C
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF84NihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF84NyhvLCBzLCBsKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF84OChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9D
SEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF84OShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85MChvLCBz
LCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF85MShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85MihvLCBzLCBsKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85
MyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF85NChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85NShvLCBzLCBsKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF85NihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVD
S19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85NyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF85OChvLCBzLCBs
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF85OShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMDAobywgcywgbCkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTAx
KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzEwMihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMDMobywgcywgbCkgMAot
IyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfMTA0KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NI
RUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEwNShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMDYobywg
cywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMTA3KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEwOChvLCBzLCBsKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF8xMDkobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tf
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTEwKG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzExMShvLCBzLCBs
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF8xMTIobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTEzKG8sIHMsIGwpIDAKLSMgZGVmaW5l
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEx
NChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8xMTUobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTE2KG8sIHMsIGwpIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzExNyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9D
SEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMTgobywgcywgbCkgMAotIyBkZWZpbmUgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTE5KG8s
IHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzEyMChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMjEobywgcywgbCkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMTIyKG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNL
X0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEyMyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMjQobywgcywg
bCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfMTI1KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEyNihvLCBzLCBsKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8x
MjcobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMTI4KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEyOShvLCBzLCBsKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF8xMzAobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
Q0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTMxKG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzEzMihv
LCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8xMzMobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTM0KG8sIHMsIGwpIDAKLSMg
ZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzEzNShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVD
S19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMzYobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTM3KG8sIHMs
IGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzEzOChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xMzkobywgcywgbCkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
MTQwKG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE0MShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNDIobywgcywgbCkg
MAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfMTQzKG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
X0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE0NChvLCBzLCBsKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNDUo
bywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfMTQ2KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE0NyhvLCBzLCBsKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8xNDgobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hF
Q0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTQ5KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE1MChvLCBz
LCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8xNTEobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTUyKG8sIHMsIGwpIDAKLSMgZGVm
aW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
XzE1MyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19C
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNTQobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTU1KG8sIHMsIGwp
IDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzE1NihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNTcobywgcywgbCkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTU4
KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzE1OShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNjAobywgcywgbCkgMAot
IyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfMTYxKG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NI
RUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE2MihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNjMobywg
cywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMTY0KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE2NShvLCBzLCBsKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF8xNjYobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tf
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTY3KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE2OChvLCBzLCBs
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF8xNjkobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTcwKG8sIHMsIGwpIDAKLSMgZGVmaW5l
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE3
MShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8xNzIobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTczKG8sIHMsIGwpIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzE3NChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9D
SEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNzUobywgcywgbCkgMAotIyBkZWZpbmUgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTc2KG8s
IHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzE3NyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xNzgobywgcywgbCkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMTc5KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNL
X0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE4MChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xODEobywgcywg
bCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfMTgyKG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE4MyhvLCBzLCBsKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8x
ODQobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMTg1KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE4NihvLCBzLCBsKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF8xODcobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
Q0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTg4KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE4OShv
LCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8xOTAobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTkxKG8sIHMsIGwpIDAKLSMg
ZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzE5MihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVD
S19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xOTMobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMTk0KG8sIHMs
IGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzE5NShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xOTYobywgcywgbCkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
MTk3KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzE5OChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8xOTkobywgcywgbCkg
MAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfMjAwKG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
X0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIwMShvLCBzLCBsKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMDIo
bywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfMjAzKG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIwNChvLCBzLCBsKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF8yMDUobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hF
Q0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjA2KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIwNyhvLCBz
LCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8yMDgobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjA5KG8sIHMsIGwpIDAKLSMgZGVm
aW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZU
XzIxMChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19C
T09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMTEobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjEyKG8sIHMsIGwp
IDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1Rf
Rk9MRF9MRUZUXzIxMyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMTQobywgcywgbCkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjE1
KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NU
X1BQX0xJU1RfRk9MRF9MRUZUXzIxNihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMTcobywgcywgbCkgMAot
IyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xE
X0xFRlRfMjE4KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NI
RUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIxOShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMjAobywg
cywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBf
TElTVF9GT0xEX0xFRlRfMjIxKG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIyMihvLCBzLCBsKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVG
VF8yMjMobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tf
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjI0KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIyNShvLCBzLCBs
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNU
X0ZPTERfTEVGVF8yMjYobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjI3KG8sIHMsIGwpIDAKLSMgZGVmaW5l
IEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIy
OChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09T
VF9QUF9MSVNUX0ZPTERfTEVGVF8yMjkobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjMwKG8sIHMsIGwpIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9M
RF9MRUZUXzIzMShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9D
SEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMzIobywgcywgbCkgMAotIyBkZWZpbmUgQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjMzKG8s
IHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQ
X0xJU1RfRk9MRF9MRUZUXzIzNChvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMzUobywgcywgbCkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xF
RlRfMjM2KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNL
X0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzIzNyhvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yMzgobywgcywg
bCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElT
VF9GT0xEX0xFRlRfMjM5KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI0MChvLCBzLCBsKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8y
NDEobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9P
U1RfUFBfTElTVF9GT0xEX0xFRlRfMjQyKG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI0MyhvLCBzLCBsKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZP
TERfTEVGVF8yNDQobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
Q0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjQ1KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI0Nihv
LCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9Q
UF9MSVNUX0ZPTERfTEVGVF8yNDcobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9G
T0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjQ4KG8sIHMsIGwpIDAKLSMg
ZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJU1RfRk9MRF9M
RUZUXzI0OShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVF9DSEVD
S19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNTAobywgcywgbCkgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfMjUxKG8sIHMs
IGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX0xJ
U1RfRk9MRF9MRUZUXzI1MihvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERf
TEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNTMobywgcywgbCkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRf
MjU0KG8sIHMsIGwpIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9MRUZUX0NIRUNLX0JP
T1NUX1BQX0xJU1RfRk9MRF9MRUZUXzI1NShvLCBzLCBsKSAwCi0jIGRlZmluZSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF8yNTYobywgcywgbCkg
MAotIwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2xpc3QvZm9sZF9yaWdodC5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9mb2xkX3Jp
Z2h0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UxOGFmZWYyODA1Yzc1ODBm
NTM4YjQ0OTllMTY5OTkzMTYyMzNmZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9w
cmVwcm9jZXNzb3IvbGlzdC9mb2xkX3JpZ2h0LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICsw
LDAgQEAKLSMgLyogQ29weXJpZ2h0IChDKSAyMDAxCi0jICAqIEhvdXNlbWFycXVlIE95Ci0jICAq
IGh0dHA6Ly93d3cuaG91c2VtYXJxdWUuY29tCi0jICAqCi0jICAqIERpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqLwotIwotIyAvKiBSZXZpc2VkIGJ5IFBh
dWwgTWVuc29uaWRlcyAoMjAwMikgKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
IGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VT
U09SX0xJU1RfRk9MRF9SSUdIVF9IUFAKLSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NPUl9MSVNU
X0ZPTERfUklHSFRfSFBQCi0jCi0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBw
PgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29udHJvbC93aGlsZS5ocHA+Ci0jIGlu
Y2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9kZWJ1Zy9lcnJvci5ocHA+Ci0jIGluY2x1ZGUgPGJv
b3N0L3ByZXByb2Nlc3Nvci9kZXRhaWwvYXV0b19yZWMuaHBwPgotIwotIyBpZiAwCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFQob3AsIHN0YXRlLCBsaXN0KQotIyBlbmRpZgot
IwotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUIEJPT1NUX1BQX0NBVChCT09TVF9Q
UF9MSVNUX0ZPTERfUklHSFRfLCBCT09TVF9QUF9BVVRPX1JFQyhCT09TVF9QUF9XSElMRV9QLCAy
NTYpKQotIwotIyBkZWZpbmUgQk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUXzI1NyhvLCBzLCBsKSBC
T09TVF9QUF9FUlJPUigweDAwMDQpCi0jCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklH
SFRfRChkLCBvLCBzLCBsKSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfICMjIGQobywgcywgbCkK
LSMgZGVmaW5lIEJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVF8yTkQgQk9PU1RfUFBfTElTVF9GT0xE
X1JJR0hUCi0jIGRlZmluZSBCT09TVF9QUF9MSVNUX0ZPTERfUklHSFRfMk5EX0QgQk9PU1RfUFBf
TElTVF9GT0xEX1JJR0hUX0QKLSMKLSMgaWYgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09T
VF9QUF9DT05GSUdfRURHKCkKLSMgICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2xpc3Qv
ZGV0YWlsL2VkZy9mb2xkX3JpZ2h0LmhwcD4KLSMgZWxzZQotIyAgICBpbmNsdWRlIDxib29zdC9w
cmVwcm9jZXNzb3IvbGlzdC9kZXRhaWwvZm9sZF9yaWdodC5ocHA+Ci0jIGVuZGlmCi0jCi0jIGVu
ZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9wcmVwcm9jZXNzb3IvbGlzdC9yZXZlcnNlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0L3JldmVyc2UuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTFkYTA1NzExMDhhMWZiODRhZGUyOTY1YWM4YThjMjMy
OWRiYWY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9saXN0
L3JldmVyc2UuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotIyAvKiBDb3B5cmln
aHQgKEMpIDIwMDEKLSMgICogSG91c2VtYXJxdWUgT3kKLSMgICogaHR0cDovL3d3dy5ob3VzZW1h
cnF1ZS5jb20KLSMgICoKLSMgICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkKLSMgICovCi0jCi0jIC8qIFJldmlzZWQgYnkgUGF1bCBNZW5zb25pZGVzICgyMDAy
KSAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZl
cnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfTElTVF9SRVZFUlNFX0hQ
UAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX0xJU1RfUkVWRVJTRV9IUFAKLSMKLSMgaW5j
bHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbmZpZy9jb25maWcuaHBwPgotIyBpbmNsdWRlIDxi
b29zdC9wcmVwcm9jZXNzb3IvbGlzdC9mb2xkX2xlZnQuaHBwPgotIwotIyAvKiBCT09TVF9QUF9M
SVNUX1JFVkVSU0UgKi8KLSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1Rf
UFBfQ09ORklHX0VERygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9MSVNUX1JFVkVSU0UobGlzdCkg
Qk9PU1RfUFBfTElTVF9GT0xEX0xFRlQoQk9PU1RfUFBfTElTVF9SRVZFUlNFX08sIEJPT1NUX1BQ
X05JTCwgbGlzdCkKLSMgZWxzZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfTElTVF9SRVZFUlNFKGxp
c3QpIEJPT1NUX1BQX0xJU1RfUkVWRVJTRV9JKGxpc3QpCi0jICAgIGRlZmluZSBCT09TVF9QUF9M
SVNUX1JFVkVSU0VfSShsaXN0KSBCT09TVF9QUF9MSVNUX0ZPTERfTEVGVChCT09TVF9QUF9MSVNU
X1JFVkVSU0VfTywgQk9PU1RfUFBfTklMLCBsaXN0KQotIyBlbmRpZgotIwotIyBkZWZpbmUgQk9P
U1RfUFBfTElTVF9SRVZFUlNFX08oZCwgcywgeCkgKHgsIHMpCi0jCi0jIC8qIEJPT1NUX1BQX0xJ
U1RfUkVWRVJTRV9EICovCi0jCi0jIGlmIH5CT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NU
X1BQX0NPTkZJR19FREcoKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0QoZCwg
bGlzdCkgQk9PU1RfUFBfTElTVF9GT0xEX0xFRlRfICMjIGQoQk9PU1RfUFBfTElTVF9SRVZFUlNF
X08sIEJPT1NUX1BQX05JTCwgbGlzdCkKLSMgZWxzZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfTElT
VF9SRVZFUlNFX0QoZCwgbGlzdCkgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0RfSShkLCBsaXN0KQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfTElTVF9SRVZFUlNFX0RfSShkLCBsaXN0KSBCT09TVF9QUF9M
SVNUX0ZPTERfTEVGVF8gIyMgZChCT09TVF9QUF9MSVNUX1JFVkVSU0VfTywgQk9PU1RfUFBfTklM
LCBsaXN0KQotIyBlbmRpZgotIwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2xvZ2ljYWwvYW5kLmhwcCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9s
b2dpY2FsL2FuZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1OTAzNjVlNThj
OGI4MzZjMzYyOTdkYWY5NGY0ZWUxYjg5ZWZiNWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvcHJlcHJvY2Vzc29yL2xvZ2ljYWwvYW5kLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDMw
ICswLDAgQEAKLSMgLyogQ29weXJpZ2h0IChDKSAyMDAxCi0jICAqIEhvdXNlbWFycXVlIE95Ci0j
ICAqIGh0dHA6Ly93d3cuaG91c2VtYXJxdWUuY29tCi0jICAqCi0jICAqIERpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqLwotIwotIyAvKiBSZXZpc2VkIGJ5
IFBhdWwgTWVuc29uaWRlcyAoMjAwMikgKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJP
Q0VTU09SX0xPR0lDQUxfQU5EX0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX0xPR0lD
QUxfQU5EX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29uZmlnL2NvbmZp
Zy5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9sb2dpY2FsL2Jvb2wuaHBwPgot
IyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9iaXRhbmQuaHBwPgotIwotIyAv
KiBCT09TVF9QUF9BTkQgKi8KLSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9P
U1RfUFBfQ09ORklHX0VERygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9BTkQocCwgcSkgQk9PU1Rf
UFBfQklUQU5EKEJPT1NUX1BQX0JPT0wocCksIEJPT1NUX1BQX0JPT0wocSkpCi0jIGVsc2UKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX0FORChwLCBxKSBCT09TVF9QUF9BTkRfSShwLCBxKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfQU5EX0kocCwgcSkgQk9PU1RfUFBfQklUQU5EKEJPT1NUX1BQX0JPT0wo
cCksIEJPT1NUX1BQX0JPT0wocSkpCi0jIGVuZGlmCi0jCi0jIGVuZGlmCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvbG9n
aWNhbC9iaXRhbmQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcHJlcHJvY2Vzc29yL2xvZ2ljYWwvYml0YW5kLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzRlOTUyN2YyMGUzNTNmYTJkMTA2NGEzZGRkYTA3YmU0MmRhY2Q1MS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9iaXRhbmQuaHBw
CisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyAvKiAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgot
IyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgKEMpIENvcHlyaWdodCBQYXVsIE1lbnNv
bmlkZXMgMjAwMi4KLSMgICogICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiAgICAgYWNjb21wYW55aW5nIGZpbGUg
TElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSMgICogICAgIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkKLSMgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMgICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqICovCi0jCi0jIC8qIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNl
bnQgdmVyc2lvbi4gKi8KLSMKLSMgaWZuZGVmIEJPT1NUX1BSRVBST0NFU1NPUl9MT0dJQ0FMX0JJ
VEFORF9IUFAKLSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NPUl9MT0dJQ0FMX0JJVEFORF9IUFAK
LSMKLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbmZpZy9jb25maWcuaHBwPgotIwot
IyAvKiBCT09TVF9QUF9CSVRBTkQgKi8KLSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygp
ICYgQk9PU1RfUFBfQ09ORklHX01XQ0MoKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfQklUQU5EKHgs
IHkpIEJPT1NUX1BQX0JJVEFORF9JKHgsIHkpCi0jIGVsc2UKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X0JJVEFORCh4LCB5KSBCT09TVF9QUF9CSVRBTkRfT08oKHgsIHkpKQotIyAgICBkZWZpbmUgQk9P
U1RfUFBfQklUQU5EX09PKHBhcikgQk9PU1RfUFBfQklUQU5EX0kgIyMgcGFyCi0jIGVuZGlmCi0j
Ci0jIGlmIH5CT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19NU1ZDKCkK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX0JJVEFORF9JKHgsIHkpIEJPT1NUX1BQX0JJVEFORF8gIyMg
eCAjIyB5Ci0jIGVsc2UKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0JJVEFORF9JKHgsIHkpIEJPT1NU
X1BQX0JJVEFORF9JRChCT09TVF9QUF9CSVRBTkRfICMjIHggIyMgeSkKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX0JJVEFORF9JRChyZXMpIHJlcwotIyBlbmRpZgotIwotIyBkZWZpbmUgQk9PU1RfUFBf
QklUQU5EXzAwIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0JJVEFORF8wMSAwCi0jIGRlZmluZSBCT09T
VF9QUF9CSVRBTkRfMTAgMAotIyBkZWZpbmUgQk9PU1RfUFBfQklUQU5EXzExIDEKLSMKLSMgZW5k
aWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3ByZXByb2Nlc3Nvci9sb2dpY2FsL2Jvb2wuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2xvZ2ljYWwvYm9vbC5ocHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMDFiNWJhNTBkZTU1MTVhNzc3NGQ1NWY0MGVjOTEyODM2
ODgyNjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2xvZ2lj
YWwvYm9vbC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotIyAvKiBDb3B5cmln
aHQgKEMpIDIwMDEKLSMgICogSG91c2VtYXJxdWUgT3kKLSMgICogaHR0cDovL3d3dy5ob3VzZW1h
cnF1ZS5jb20KLSMgICoKLSMgICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkKLSMgICovCi0jCi0jIC8qIFJldmlzZWQgYnkgUGF1bCBNZW5zb25pZGVzICgyMDAy
KSAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZl
cnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfTE9HSUNBTF9CT09MX0hQ
UAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX0xPR0lDQUxfQk9PTF9IUFAKLSMKLSMgaW5j
bHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbmZpZy9jb25maWcuaHBwPgotIwotIyAvKiBCT09T
VF9QUF9CT09MICovCi0jCi0jIGlmIH5CT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQ
X0NPTkZJR19NV0NDKCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0JPT0woeCkgQk9PU1RfUFBfQk9P
TF9JKHgpCi0jIGVsc2UKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0JPT0woeCkgQk9PU1RfUFBfQk9P
TF9PTygoeCkpCi0jICAgIGRlZmluZSBCT09TVF9QUF9CT09MX09PKHBhcikgQk9PU1RfUFBfQk9P
TF9JICMjIHBhcgotIyBlbmRpZgotIwotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF9JKHgpIEJPT1NU
X1BQX0JPT0xfICMjIHgKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfMCAwCi0jIGRlZmluZSBC
T09TVF9QUF9CT09MXzEgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF8yIDEKLSMgZGVmaW5lIEJP
T1NUX1BQX0JPT0xfMyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzQgMQotIyBkZWZpbmUgQk9P
U1RfUFBfQk9PTF81IDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfNiAxCi0jIGRlZmluZSBCT09T
VF9QUF9CT09MXzcgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF84IDEKLSMgZGVmaW5lIEJPT1NU
X1BQX0JPT0xfOSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEwIDEKLSMgZGVmaW5lIEJPT1NU
X1BQX0JPT0xfMTEgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF8xMiAxCi0jIGRlZmluZSBCT09T
VF9QUF9CT09MXzEzIDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfMTQgMQotIyBkZWZpbmUgQk9P
U1RfUFBfQk9PTF8xNSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE2IDEKLSMgZGVmaW5lIEJP
T1NUX1BQX0JPT0xfMTcgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF8xOCAxCi0jIGRlZmluZSBC
T09TVF9QUF9CT09MXzE5IDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfMjAgMQotIyBkZWZpbmUg
Qk9PU1RfUFBfQk9PTF8yMSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIyIDEKLSMgZGVmaW5l
IEJPT1NUX1BQX0JPT0xfMjMgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF8yNCAxCi0jIGRlZmlu
ZSBCT09TVF9QUF9CT09MXzI1IDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfMjYgMQotIyBkZWZp
bmUgQk9PU1RfUFBfQk9PTF8yNyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzI4IDEKLSMgZGVm
aW5lIEJPT1NUX1BQX0JPT0xfMjkgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF8zMCAxCi0jIGRl
ZmluZSBCT09TVF9QUF9CT09MXzMxIDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfMzIgMQotIyBk
ZWZpbmUgQk9PU1RfUFBfQk9PTF8zMyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzM0IDEKLSMg
ZGVmaW5lIEJPT1NUX1BQX0JPT0xfMzUgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF8zNiAxCi0j
IGRlZmluZSBCT09TVF9QUF9CT09MXzM3IDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfMzggMQot
IyBkZWZpbmUgQk9PU1RfUFBfQk9PTF8zOSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzQwIDEK
LSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfNDEgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF80MiAx
Ci0jIGRlZmluZSBCT09TVF9QUF9CT09MXzQzIDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfNDQg
MQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF80NSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzQ2
IDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfNDcgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF80
OCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzQ5IDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xf
NTAgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF81MSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09M
XzUyIDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfNTMgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9P
TF81NCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzU1IDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JP
T0xfNTYgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF81NyAxCi0jIGRlZmluZSBCT09TVF9QUF9C
T09MXzU4IDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfNTkgMQotIyBkZWZpbmUgQk9PU1RfUFBf
Qk9PTF82MCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzYxIDEKLSMgZGVmaW5lIEJPT1NUX1BQ
X0JPT0xfNjIgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF82MyAxCi0jIGRlZmluZSBCT09TVF9Q
UF9CT09MXzY0IDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfNjUgMQotIyBkZWZpbmUgQk9PU1Rf
UFBfQk9PTF82NiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzY3IDEKLSMgZGVmaW5lIEJPT1NU
X1BQX0JPT0xfNjggMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF82OSAxCi0jIGRlZmluZSBCT09T
VF9QUF9CT09MXzcwIDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfNzEgMQotIyBkZWZpbmUgQk9P
U1RfUFBfQk9PTF83MiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzczIDEKLSMgZGVmaW5lIEJP
T1NUX1BQX0JPT0xfNzQgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF83NSAxCi0jIGRlZmluZSBC
T09TVF9QUF9CT09MXzc2IDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfNzcgMQotIyBkZWZpbmUg
Qk9PU1RfUFBfQk9PTF83OCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzc5IDEKLSMgZGVmaW5l
IEJPT1NUX1BQX0JPT0xfODAgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF84MSAxCi0jIGRlZmlu
ZSBCT09TVF9QUF9CT09MXzgyIDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfODMgMQotIyBkZWZp
bmUgQk9PU1RfUFBfQk9PTF84NCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzg1IDEKLSMgZGVm
aW5lIEJPT1NUX1BQX0JPT0xfODYgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF84NyAxCi0jIGRl
ZmluZSBCT09TVF9QUF9CT09MXzg4IDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfODkgMQotIyBk
ZWZpbmUgQk9PU1RfUFBfQk9PTF85MCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzkxIDEKLSMg
ZGVmaW5lIEJPT1NUX1BQX0JPT0xfOTIgMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF85MyAxCi0j
IGRlZmluZSBCT09TVF9QUF9CT09MXzk0IDEKLSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfOTUgMQot
IyBkZWZpbmUgQk9PU1RfUFBfQk9PTF85NiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzk3IDEK
LSMgZGVmaW5lIEJPT1NUX1BQX0JPT0xfOTggMQotIyBkZWZpbmUgQk9PU1RfUFBfQk9PTF85OSAx
Ci0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEwMCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEw
MSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEwMiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09M
XzEwMyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEwNCAxCi0jIGRlZmluZSBCT09TVF9QUF9C
T09MXzEwNSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEwNiAxCi0jIGRlZmluZSBCT09TVF9Q
UF9CT09MXzEwNyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEwOCAxCi0jIGRlZmluZSBCT09T
VF9QUF9CT09MXzEwOSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzExMCAxCi0jIGRlZmluZSBC
T09TVF9QUF9CT09MXzExMSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzExMiAxCi0jIGRlZmlu
ZSBCT09TVF9QUF9CT09MXzExMyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzExNCAxCi0jIGRl
ZmluZSBCT09TVF9QUF9CT09MXzExNSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzExNiAxCi0j
IGRlZmluZSBCT09TVF9QUF9CT09MXzExNyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzExOCAx
Ci0jIGRlZmluZSBCT09TVF9QUF9CT09MXzExOSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEy
MCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEyMSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09M
XzEyMiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEyMyAxCi0jIGRlZmluZSBCT09TVF9QUF9C
T09MXzEyNCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEyNSAxCi0jIGRlZmluZSBCT09TVF9Q
UF9CT09MXzEyNiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEyNyAxCi0jIGRlZmluZSBCT09T
VF9QUF9CT09MXzEyOCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEyOSAxCi0jIGRlZmluZSBC
T09TVF9QUF9CT09MXzEzMCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEzMSAxCi0jIGRlZmlu
ZSBCT09TVF9QUF9CT09MXzEzMiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEzMyAxCi0jIGRl
ZmluZSBCT09TVF9QUF9CT09MXzEzNCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEzNSAxCi0j
IGRlZmluZSBCT09TVF9QUF9CT09MXzEzNiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEzNyAx
Ci0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEzOCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzEz
OSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE0MCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09M
XzE0MSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE0MiAxCi0jIGRlZmluZSBCT09TVF9QUF9C
T09MXzE0MyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE0NCAxCi0jIGRlZmluZSBCT09TVF9Q
UF9CT09MXzE0NSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE0NiAxCi0jIGRlZmluZSBCT09T
VF9QUF9CT09MXzE0NyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE0OCAxCi0jIGRlZmluZSBC
T09TVF9QUF9CT09MXzE0OSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE1MCAxCi0jIGRlZmlu
ZSBCT09TVF9QUF9CT09MXzE1MSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE1MiAxCi0jIGRl
ZmluZSBCT09TVF9QUF9CT09MXzE1MyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE1NCAxCi0j
IGRlZmluZSBCT09TVF9QUF9CT09MXzE1NSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE1NiAx
Ci0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE1NyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE1
OCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE1OSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09M
XzE2MCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE2MSAxCi0jIGRlZmluZSBCT09TVF9QUF9C
T09MXzE2MiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE2MyAxCi0jIGRlZmluZSBCT09TVF9Q
UF9CT09MXzE2NCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE2NSAxCi0jIGRlZmluZSBCT09T
VF9QUF9CT09MXzE2NiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE2NyAxCi0jIGRlZmluZSBC
T09TVF9QUF9CT09MXzE2OCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE2OSAxCi0jIGRlZmlu
ZSBCT09TVF9QUF9CT09MXzE3MCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE3MSAxCi0jIGRl
ZmluZSBCT09TVF9QUF9CT09MXzE3MiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE3MyAxCi0j
IGRlZmluZSBCT09TVF9QUF9CT09MXzE3NCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE3NSAx
Ci0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE3NiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE3
NyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE3OCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09M
XzE3OSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE4MCAxCi0jIGRlZmluZSBCT09TVF9QUF9C
T09MXzE4MSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE4MiAxCi0jIGRlZmluZSBCT09TVF9Q
UF9CT09MXzE4MyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE4NCAxCi0jIGRlZmluZSBCT09T
VF9QUF9CT09MXzE4NSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE4NiAxCi0jIGRlZmluZSBC
T09TVF9QUF9CT09MXzE4NyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE4OCAxCi0jIGRlZmlu
ZSBCT09TVF9QUF9CT09MXzE4OSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE5MCAxCi0jIGRl
ZmluZSBCT09TVF9QUF9CT09MXzE5MSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE5MiAxCi0j
IGRlZmluZSBCT09TVF9QUF9CT09MXzE5MyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE5NCAx
Ci0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE5NSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE5
NiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE5NyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09M
XzE5OCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzE5OSAxCi0jIGRlZmluZSBCT09TVF9QUF9C
T09MXzIwMCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIwMSAxCi0jIGRlZmluZSBCT09TVF9Q
UF9CT09MXzIwMiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIwMyAxCi0jIGRlZmluZSBCT09T
VF9QUF9CT09MXzIwNCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIwNSAxCi0jIGRlZmluZSBC
T09TVF9QUF9CT09MXzIwNiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIwNyAxCi0jIGRlZmlu
ZSBCT09TVF9QUF9CT09MXzIwOCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIwOSAxCi0jIGRl
ZmluZSBCT09TVF9QUF9CT09MXzIxMCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIxMSAxCi0j
IGRlZmluZSBCT09TVF9QUF9CT09MXzIxMiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIxMyAx
Ci0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIxNCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIx
NSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIxNiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09M
XzIxNyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIxOCAxCi0jIGRlZmluZSBCT09TVF9QUF9C
T09MXzIxOSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIyMCAxCi0jIGRlZmluZSBCT09TVF9Q
UF9CT09MXzIyMSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIyMiAxCi0jIGRlZmluZSBCT09T
VF9QUF9CT09MXzIyMyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIyNCAxCi0jIGRlZmluZSBC
T09TVF9QUF9CT09MXzIyNSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIyNiAxCi0jIGRlZmlu
ZSBCT09TVF9QUF9CT09MXzIyNyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIyOCAxCi0jIGRl
ZmluZSBCT09TVF9QUF9CT09MXzIyOSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIzMCAxCi0j
IGRlZmluZSBCT09TVF9QUF9CT09MXzIzMSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIzMiAx
Ci0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIzMyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIz
NCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIzNSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09M
XzIzNiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIzNyAxCi0jIGRlZmluZSBCT09TVF9QUF9C
T09MXzIzOCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzIzOSAxCi0jIGRlZmluZSBCT09TVF9Q
UF9CT09MXzI0MCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzI0MSAxCi0jIGRlZmluZSBCT09T
VF9QUF9CT09MXzI0MiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzI0MyAxCi0jIGRlZmluZSBC
T09TVF9QUF9CT09MXzI0NCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzI0NSAxCi0jIGRlZmlu
ZSBCT09TVF9QUF9CT09MXzI0NiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzI0NyAxCi0jIGRl
ZmluZSBCT09TVF9QUF9CT09MXzI0OCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzI0OSAxCi0j
IGRlZmluZSBCT09TVF9QUF9CT09MXzI1MCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzI1MSAx
Ci0jIGRlZmluZSBCT09TVF9QUF9CT09MXzI1MiAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzI1
MyAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzI1NCAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09M
XzI1NSAxCi0jIGRlZmluZSBCT09TVF9QUF9CT09MXzI1NiAxCi0jCi0jIGVuZGlmCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNz
b3IvbG9naWNhbC9jb21wbC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9jb21wbC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFkNGM3YTRjYTZiNjAyZTUxM2MxYmFhNDdmYzAxZTU0NGYwZWRjODIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL2xvZ2ljYWwvY29tcGwu
aHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIyAvKiAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgKEMpIENvcHlyaWdodCBQYXVsIE1l
bnNvbmlkZXMgMjAwMi4KLSMgICogICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0
d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiAgICAgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSMgICogICAgIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSMgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMgICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqICovCi0jCi0jIC8qIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCBy
ZWNlbnQgdmVyc2lvbi4gKi8KLSMKLSMgaWZuZGVmIEJPT1NUX1BSRVBST0NFU1NPUl9MT0dJQ0FM
X0NPTVBMX0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX0xPR0lDQUxfQ09NUExfSFBQ
Ci0jCi0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcD4KLSMK
LSMgLyogQk9PU1RfUFBfQ09NUEwgKi8KLSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygp
ICYgQk9PU1RfUFBfQ09ORklHX01XQ0MoKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfQ09NUEwoeCkg
Qk9PU1RfUFBfQ09NUExfSSh4KQotIyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9QUF9DT01QTCh4
KSBCT09TVF9QUF9DT01QTF9PTygoeCkpCi0jICAgIGRlZmluZSBCT09TVF9QUF9DT01QTF9PTyhw
YXIpIEJPT1NUX1BQX0NPTVBMX0kgIyMgcGFyCi0jIGVuZGlmCi0jCi0jIGlmIH5CT09TVF9QUF9D
T05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19NU1ZDKCkKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX0NPTVBMX0koeCkgQk9PU1RfUFBfQ09NUExfICMjIHgKLSMgZWxzZQotIyAgICBkZWZpbmUg
Qk9PU1RfUFBfQ09NUExfSSh4KSBCT09TVF9QUF9DT01QTF9JRChCT09TVF9QUF9DT01QTF8gIyMg
eCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0NPTVBMX0lEKGlkKSBpZAotIyBlbmRpZgotIwotIyBk
ZWZpbmUgQk9PU1RfUFBfQ09NUExfMCAxCi0jIGRlZmluZSBCT09TVF9QUF9DT01QTF8xIDAKLSMK
LSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3ByZXByb2Nlc3Nvci9sb2dpY2FsL25vdC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9ub3QuaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTA5ZDNmY2E2Y2M1NTE1OGI3ZGI2NmZlNDA0NTQ2
YWRiMTU1MzVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9s
b2dpY2FsL25vdC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIC8qIENvcHly
aWdodCAoQykgMjAwMQotIyAgKiBIb3VzZW1hcnF1ZSBPeQotIyAgKiBodHRwOi8vd3d3LmhvdXNl
bWFycXVlLmNvbQotIyAgKgotIyAgKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdh
cmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSMgICogYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSMgICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotIyAgKi8KLSMKLSMgLyogUmV2aXNlZCBieSBQYXVsIE1lbnNvbmlkZXMgKDIw
MDIpICovCi0jCi0jIC8qIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQg
dmVyc2lvbi4gKi8KLSMKLSMgaWZuZGVmIEJPT1NUX1BSRVBST0NFU1NPUl9MT0dJQ0FMX05PVF9I
UFAKLSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NPUl9MT0dJQ0FMX05PVF9IUFAKLSMKLSMgaW5j
bHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbmZpZy9jb25maWcuaHBwPgotIyBpbmNsdWRlIDxi
b29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9ib29sLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJl
cHJvY2Vzc29yL2xvZ2ljYWwvY29tcGwuaHBwPgotIwotIyAvKiBCT09TVF9QUF9OT1QgKi8KLSMK
LSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX0VERygpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9OT1QoeCkgQk9PU1RfUFBfQ09NUEwoQk9PU1RfUFBfQk9PTCh4
KSkKLSMgZWxzZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfTk9UKHgpIEJPT1NUX1BQX05PVF9JKHgp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9OT1RfSSh4KSBCT09TVF9QUF9DT01QTChCT09TVF9QUF9C
T09MKHgpKQotIyBlbmRpZgotIwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3B1bmN0dWF0aW9uL2NvbW1h
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nl
c3Nvci9wdW5jdHVhdGlvbi9jb21tYS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDM4YzJlMGU3ZTdhZjVjZTRjZGNlOWUzMDA4MGIzMzVlMmMwMWIzYWYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3B1bmN0dWF0aW9uL2NvbW1hLmhwcAorKysg
L2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMgLyogQ29weXJpZ2h0IChDKSAyMDAxCi0jICAq
IEhvdXNlbWFycXVlIE95Ci0jICAqIGh0dHA6Ly93d3cuaG91c2VtYXJxdWUuY29tCi0jICAqCi0j
ICAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4gKFNlZQotIyAgKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29w
eSBhdAotIyAgKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqLwot
IwotIyAvKiBSZXZpc2VkIGJ5IFBhdWwgTWVuc29uaWRlcyAoMjAwMikgKi8KLSMKLSMgLyogU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBp
Zm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX1BVTkNUVUFUSU9OX0NPTU1BX0hQUAotIyBkZWZpbmUg
Qk9PU1RfUFJFUFJPQ0VTU09SX1BVTkNUVUFUSU9OX0NPTU1BX0hQUAotIwotIyAvKiBCT09TVF9Q
UF9DT01NQSAqLwotIwotIyBkZWZpbmUgQk9PU1RfUFBfQ09NTUEoKSAsCi0jCi0jIGVuZGlmCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVw
cm9jZXNzb3IvcHVuY3R1YXRpb24vY29tbWFfaWYuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3B1bmN0dWF0aW9uL2NvbW1hX2lmLmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcxMWYzNjZhNDMxOWEzNDg1ZjdjZjdm
MDMwMTE0OGFlOTgyZmQwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9j
ZXNzb3IvcHVuY3R1YXRpb24vY29tbWFfaWYuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAs
MCBAQAotIyAvKiBDb3B5cmlnaHQgKEMpIDIwMDEKLSMgICogSG91c2VtYXJxdWUgT3kKLSMgICog
aHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20KLSMgICoKLSMgICogRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqIGFjY29t
cGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSMgICovCi0jCi0jIC8qIFJldmlzZWQgYnkgUGF1
bCBNZW5zb25pZGVzICgyMDAyKSAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcg
Zm9yIG1vc3QgcmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNT
T1JfUFVOQ1RVQVRJT05fQ09NTUFfSUZfSFBQCi0jIGRlZmluZSBCT09TVF9QUkVQUk9DRVNTT1Jf
UFVOQ1RVQVRJT05fQ09NTUFfSUZfSFBQCi0jCi0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nv
ci9jb25maWcvY29uZmlnLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbnRy
b2wvaWYuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvZmFjaWxpdGllcy9lbXB0
eS5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9wdW5jdHVhdGlvbi9jb21tYS5o
cHA+Ci0jCi0jIC8qIEJPT1NUX1BQX0NPTU1BX0lGICovCi0jCi0jIGlmIH5CT09TVF9QUF9DT05G
SUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19FREcoKQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
Q09NTUFfSUYoY29uZCkgQk9PU1RfUFBfSUYoY29uZCwgQk9PU1RfUFBfQ09NTUEsIEJPT1NUX1BQ
X0VNUFRZKSgpCi0jIGVsc2UKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0NPTU1BX0lGKGNvbmQpIEJP
T1NUX1BQX0NPTU1BX0lGX0koY29uZCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0NPTU1BX0lGX0ko
Y29uZCkgQk9PU1RfUFBfSUYoY29uZCwgQk9PU1RfUFBfQ09NTUEsIEJPT1NUX1BQX0VNUFRZKSgp
Ci0jIGVuZGlmCi0jCi0jIGVuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvcHVuY3R1YXRpb24vcGFyZW4uaHBwIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3B1
bmN0dWF0aW9uL3BhcmVuLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhjMThj
YjhiZWJlZTJiNDNmYzU2NDM5N2U1ODA1NDBmYTk5OTE1My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9wcmVwcm9jZXNzb3IvcHVuY3R1YXRpb24vcGFyZW4uaHBwCisrKyAvZGV2L251
bGwKQEAgLTEsMjMgKzAsMCBAQAotIyAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKgotIyAgKiAgICAgKEMpIENvcHlyaWdodCBQYXVsIE1lbnNvbmlkZXMgMjAwMi4K
LSMgICogICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4gKFNlZQotIyAgKiAgICAgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQKLSMgICogICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLSMgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMgICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0j
Ci0jIC8qIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbi4g
Ki8KLSMKLSMgaWZuZGVmIEJPT1NUX1BSRVBST0NFU1NPUl9QVU5DVFVBVElPTl9QQVJFTl9IUFAK
LSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NPUl9QVU5DVFVBVElPTl9QQVJFTl9IUFAKLSMKLSMg
LyogQk9PU1RfUFBfTFBBUkVOICovCi0jCi0jIGRlZmluZSBCT09TVF9QUF9MUEFSRU4oKSAoCi0j
Ci0jIC8qIEJPT1NUX1BQX1JQQVJFTiAqLwotIwotIyBkZWZpbmUgQk9PU1RfUFBfUlBBUkVOKCkg
KQotIwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3JlcGVhdC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvcmVwZWF0LmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggN2M0N2VlOGIwMWU0YTRmNjhmOTM5YjQ0OTZjMGRlZDc5NTNl
YWQ2Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvcmVwZWF0
LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMgLyogKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioKLSMgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMgICogICAgIChDKSBDb3B5cmlnaHQgUGF1bCBN
ZW5zb25pZGVzIDIwMDIuCi0jICAqICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSMgICogICAgIGFjY29tcGFueWluZyBm
aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqICAgICBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0jICAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3Qg
cmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfUkVQRUFU
X0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX1JFUEVBVF9IUFAKLSMKLSMgaW5jbHVk
ZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vcmVwZWF0LmhwcD4KLSMKLSMgZW5kaWYK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3By
ZXByb2Nlc3Nvci9yZXBldGl0aW9uL2RldGFpbC9mb3IuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZGV0YWlsL2Zv
ci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NzBmMmMxZWEzYjE4NTcwMjg5
YjY3OGMwN2ZjOGMxZGRmNWE3MTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJl
cHJvY2Vzc29yL3JlcGV0aXRpb24vZGV0YWlsL2Zvci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
MzYgKzAsMCBAQAotIyAvKiBDb3B5cmlnaHQgKEMpIDIwMDEKLSMgICogSG91c2VtYXJxdWUgT3kK
LSMgICogaHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20KLSMgICoKLSMgICogRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAq
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSMgICovCi0jCi0jIC8qIFJldmlzZWQg
YnkgUGF1bCBNZW5zb25pZGVzICgyMDAyKSAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29z
dC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQ
Uk9DRVNTT1JfUkVQRVRJVElPTl9ERVRBSUxfRk9SX0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJP
Q0VTU09SX1JFUEVUSVRJT05fREVUQUlMX0ZPUl9IUFAKLSMKLSMgaW5jbHVkZSA8Ym9vc3QvcHJl
cHJvY2Vzc29yL2NvbnRyb2wvZXhwcl9paWYuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9j
ZXNzb3IvY29udHJvbC9paWYuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvbG9n
aWNhbC9ib29sLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3R1cGxlL2VhdC5o
cHA+Ci0jCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMShzLCBwLCBvLCBtKSBCT09TVF9QUF9GT1Jf
MV9DKEJPT1NUX1BQX0JPT0wocCgyLCBzKSksIHMsIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9Q
UF9GT1JfMihzLCBwLCBvLCBtKSBCT09TVF9QUF9GT1JfMl9DKEJPT1NUX1BQX0JPT0wocCgzLCBz
KSksIHMsIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMyhzLCBwLCBvLCBtKSBCT09T
VF9QUF9GT1JfM19DKEJPT1NUX1BQX0JPT0wocCg0LCBzKSksIHMsIHAsIG8sIG0pCi0jIGRlZmlu
ZSBCT09TVF9QUF9GT1JfNChzLCBwLCBvLCBtKSBCT09TVF9QUF9GT1JfNF9DKEJPT1NUX1BQX0JP
T0wocCg1LCBzKSksIHMsIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfNShzLCBwLCBv
LCBtKSBCT09TVF9QUF9GT1JfNV9DKEJPT1NUX1BQX0JPT0wocCg2LCBzKSksIHMsIHAsIG8sIG0p
Ci0jIGRlZmluZSBCT09TVF9QUF9GT1JfNihzLCBwLCBvLCBtKSBCT09TVF9QUF9GT1JfNl9DKEJP
T1NUX1BQX0JPT0wocCg3LCBzKSksIHMsIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1Jf
NyhzLCBwLCBvLCBtKSBCT09TVF9QUF9GT1JfN19DKEJPT1NUX1BQX0JPT0wocCg4LCBzKSksIHMs
IHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfOChzLCBwLCBvLCBtKSBCT09TVF9QUF9G
T1JfOF9DKEJPT1NUX1BQX0JPT0wocCg5LCBzKSksIHMsIHAsIG8sIG0pCi0jIGRlZmluZSBCT09T
VF9QUF9GT1JfOShzLCBwLCBvLCBtKSBCT09TVF9QUF9GT1JfOV9DKEJPT1NUX1BQX0JPT0wocCgx
MCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzEwKHMsIHAsIG8sIG0p
IEJPT1NUX1BQX0ZPUl8xMF9DKEJPT1NUX1BQX0JPT0wocCgxMSwgcykpLCBzLCBwLCBvLCBtKQot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SXzExKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8xMV9DKEJP
T1NUX1BQX0JPT0wocCgxMiwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
XzEyKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8xMl9DKEJPT1NUX1BQX0JPT0wocCgxMywgcykp
LCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzEzKHMsIHAsIG8sIG0pIEJPT1NU
X1BQX0ZPUl8xM19DKEJPT1NUX1BQX0JPT0wocCgxNCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SXzE0KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8xNF9DKEJPT1NUX1BQ
X0JPT0wocCgxNSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE1KHMs
IHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8xNV9DKEJPT1NUX1BQX0JPT0wocCgxNiwgcykpLCBzLCBw
LCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE2KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZP
Ul8xNl9DKEJPT1NUX1BQX0JPT0wocCgxNywgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SXzE3KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8xN19DKEJPT1NUX1BQX0JPT0wo
cCgxOCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE4KHMsIHAsIG8s
IG0pIEJPT1NUX1BQX0ZPUl8xOF9DKEJPT1NUX1BQX0JPT0wocCgxOSwgcykpLCBzLCBwLCBvLCBt
KQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE5KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8xOV9D
KEJPT1NUX1BQX0JPT0wocCgyMCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SXzIwKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8yMF9DKEJPT1NUX1BQX0JPT0wocCgyMSwg
cykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzIxKHMsIHAsIG8sIG0pIEJP
T1NUX1BQX0ZPUl8yMV9DKEJPT1NUX1BQX0JPT0wocCgyMiwgcykpLCBzLCBwLCBvLCBtKQotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SXzIyKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8yMl9DKEJPT1NU
X1BQX0JPT0wocCgyMywgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzIz
KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8yM19DKEJPT1NUX1BQX0JPT0wocCgyNCwgcykpLCBz
LCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzI0KHMsIHAsIG8sIG0pIEJPT1NUX1BQ
X0ZPUl8yNF9DKEJPT1NUX1BQX0JPT0wocCgyNSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SXzI1KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8yNV9DKEJPT1NUX1BQX0JP
T0wocCgyNiwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzI2KHMsIHAs
IG8sIG0pIEJPT1NUX1BQX0ZPUl8yNl9DKEJPT1NUX1BQX0JPT0wocCgyNywgcykpLCBzLCBwLCBv
LCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzI3KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8y
N19DKEJPT1NUX1BQX0JPT0wocCgyOCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SXzI4KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8yOF9DKEJPT1NUX1BQX0JPT0wocCgy
OSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzI5KHMsIHAsIG8sIG0p
IEJPT1NUX1BQX0ZPUl8yOV9DKEJPT1NUX1BQX0JPT0wocCgzMCwgcykpLCBzLCBwLCBvLCBtKQot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SXzMwKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8zMF9DKEJP
T1NUX1BQX0JPT0wocCgzMSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
XzMxKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8zMV9DKEJPT1NUX1BQX0JPT0wocCgzMiwgcykp
LCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzMyKHMsIHAsIG8sIG0pIEJPT1NU
X1BQX0ZPUl8zMl9DKEJPT1NUX1BQX0JPT0wocCgzMywgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SXzMzKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8zM19DKEJPT1NUX1BQ
X0JPT0wocCgzNCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzM0KHMs
IHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8zNF9DKEJPT1NUX1BQX0JPT0wocCgzNSwgcykpLCBzLCBw
LCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzM1KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZP
Ul8zNV9DKEJPT1NUX1BQX0JPT0wocCgzNiwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SXzM2KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8zNl9DKEJPT1NUX1BQX0JPT0wo
cCgzNywgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzM3KHMsIHAsIG8s
IG0pIEJPT1NUX1BQX0ZPUl8zN19DKEJPT1NUX1BQX0JPT0wocCgzOCwgcykpLCBzLCBwLCBvLCBt
KQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzM4KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8zOF9D
KEJPT1NUX1BQX0JPT0wocCgzOSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SXzM5KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl8zOV9DKEJPT1NUX1BQX0JPT0wocCg0MCwg
cykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzQwKHMsIHAsIG8sIG0pIEJP
T1NUX1BQX0ZPUl80MF9DKEJPT1NUX1BQX0JPT0wocCg0MSwgcykpLCBzLCBwLCBvLCBtKQotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SXzQxKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl80MV9DKEJPT1NU
X1BQX0JPT0wocCg0MiwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzQy
KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl80Ml9DKEJPT1NUX1BQX0JPT0wocCg0MywgcykpLCBz
LCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzQzKHMsIHAsIG8sIG0pIEJPT1NUX1BQ
X0ZPUl80M19DKEJPT1NUX1BQX0JPT0wocCg0NCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SXzQ0KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl80NF9DKEJPT1NUX1BQX0JP
T0wocCg0NSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzQ1KHMsIHAs
IG8sIG0pIEJPT1NUX1BQX0ZPUl80NV9DKEJPT1NUX1BQX0JPT0wocCg0NiwgcykpLCBzLCBwLCBv
LCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzQ2KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl80
Nl9DKEJPT1NUX1BQX0JPT0wocCg0NywgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SXzQ3KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl80N19DKEJPT1NUX1BQX0JPT0wocCg0
OCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzQ4KHMsIHAsIG8sIG0p
IEJPT1NUX1BQX0ZPUl80OF9DKEJPT1NUX1BQX0JPT0wocCg0OSwgcykpLCBzLCBwLCBvLCBtKQot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SXzQ5KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl80OV9DKEJP
T1NUX1BQX0JPT0wocCg1MCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
XzUwKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl81MF9DKEJPT1NUX1BQX0JPT0wocCg1MSwgcykp
LCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzUxKHMsIHAsIG8sIG0pIEJPT1NU
X1BQX0ZPUl81MV9DKEJPT1NUX1BQX0JPT0wocCg1MiwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SXzUyKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl81Ml9DKEJPT1NUX1BQ
X0JPT0wocCg1MywgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzUzKHMs
IHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl81M19DKEJPT1NUX1BQX0JPT0wocCg1NCwgcykpLCBzLCBw
LCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzU0KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZP
Ul81NF9DKEJPT1NUX1BQX0JPT0wocCg1NSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SXzU1KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl81NV9DKEJPT1NUX1BQX0JPT0wo
cCg1NiwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzU2KHMsIHAsIG8s
IG0pIEJPT1NUX1BQX0ZPUl81Nl9DKEJPT1NUX1BQX0JPT0wocCg1NywgcykpLCBzLCBwLCBvLCBt
KQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzU3KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl81N19D
KEJPT1NUX1BQX0JPT0wocCg1OCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SXzU4KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl81OF9DKEJPT1NUX1BQX0JPT0wocCg1OSwg
cykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzU5KHMsIHAsIG8sIG0pIEJP
T1NUX1BQX0ZPUl81OV9DKEJPT1NUX1BQX0JPT0wocCg2MCwgcykpLCBzLCBwLCBvLCBtKQotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SXzYwKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl82MF9DKEJPT1NU
X1BQX0JPT0wocCg2MSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzYx
KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl82MV9DKEJPT1NUX1BQX0JPT0wocCg2MiwgcykpLCBz
LCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzYyKHMsIHAsIG8sIG0pIEJPT1NUX1BQ
X0ZPUl82Ml9DKEJPT1NUX1BQX0JPT0wocCg2MywgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SXzYzKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl82M19DKEJPT1NUX1BQX0JP
T0wocCg2NCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzY0KHMsIHAs
IG8sIG0pIEJPT1NUX1BQX0ZPUl82NF9DKEJPT1NUX1BQX0JPT0wocCg2NSwgcykpLCBzLCBwLCBv
LCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzY1KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl82
NV9DKEJPT1NUX1BQX0JPT0wocCg2NiwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SXzY2KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl82Nl9DKEJPT1NUX1BQX0JPT0wocCg2
NywgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzY3KHMsIHAsIG8sIG0p
IEJPT1NUX1BQX0ZPUl82N19DKEJPT1NUX1BQX0JPT0wocCg2OCwgcykpLCBzLCBwLCBvLCBtKQot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SXzY4KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl82OF9DKEJP
T1NUX1BQX0JPT0wocCg2OSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
XzY5KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl82OV9DKEJPT1NUX1BQX0JPT0wocCg3MCwgcykp
LCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzcwKHMsIHAsIG8sIG0pIEJPT1NU
X1BQX0ZPUl83MF9DKEJPT1NUX1BQX0JPT0wocCg3MSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SXzcxKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl83MV9DKEJPT1NUX1BQ
X0JPT0wocCg3MiwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzcyKHMs
IHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl83Ml9DKEJPT1NUX1BQX0JPT0wocCg3MywgcykpLCBzLCBw
LCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzczKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZP
Ul83M19DKEJPT1NUX1BQX0JPT0wocCg3NCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SXzc0KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl83NF9DKEJPT1NUX1BQX0JPT0wo
cCg3NSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzc1KHMsIHAsIG8s
IG0pIEJPT1NUX1BQX0ZPUl83NV9DKEJPT1NUX1BQX0JPT0wocCg3NiwgcykpLCBzLCBwLCBvLCBt
KQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzc2KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl83Nl9D
KEJPT1NUX1BQX0JPT0wocCg3NywgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SXzc3KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl83N19DKEJPT1NUX1BQX0JPT0wocCg3OCwg
cykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzc4KHMsIHAsIG8sIG0pIEJP
T1NUX1BQX0ZPUl83OF9DKEJPT1NUX1BQX0JPT0wocCg3OSwgcykpLCBzLCBwLCBvLCBtKQotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SXzc5KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl83OV9DKEJPT1NU
X1BQX0JPT0wocCg4MCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzgw
KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl84MF9DKEJPT1NUX1BQX0JPT0wocCg4MSwgcykpLCBz
LCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzgxKHMsIHAsIG8sIG0pIEJPT1NUX1BQ
X0ZPUl84MV9DKEJPT1NUX1BQX0JPT0wocCg4MiwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SXzgyKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl84Ml9DKEJPT1NUX1BQX0JP
T0wocCg4MywgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzgzKHMsIHAs
IG8sIG0pIEJPT1NUX1BQX0ZPUl84M19DKEJPT1NUX1BQX0JPT0wocCg4NCwgcykpLCBzLCBwLCBv
LCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzg0KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl84
NF9DKEJPT1NUX1BQX0JPT0wocCg4NSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SXzg1KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl84NV9DKEJPT1NUX1BQX0JPT0wocCg4
NiwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzg2KHMsIHAsIG8sIG0p
IEJPT1NUX1BQX0ZPUl84Nl9DKEJPT1NUX1BQX0JPT0wocCg4NywgcykpLCBzLCBwLCBvLCBtKQot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SXzg3KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl84N19DKEJP
T1NUX1BQX0JPT0wocCg4OCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
Xzg4KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl84OF9DKEJPT1NUX1BQX0JPT0wocCg4OSwgcykp
LCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzg5KHMsIHAsIG8sIG0pIEJPT1NU
X1BQX0ZPUl84OV9DKEJPT1NUX1BQX0JPT0wocCg5MCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SXzkwKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl85MF9DKEJPT1NUX1BQ
X0JPT0wocCg5MSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzkxKHMs
IHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl85MV9DKEJPT1NUX1BQX0JPT0wocCg5MiwgcykpLCBzLCBw
LCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzkyKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZP
Ul85Ml9DKEJPT1NUX1BQX0JPT0wocCg5MywgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SXzkzKHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl85M19DKEJPT1NUX1BQX0JPT0wo
cCg5NCwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzk0KHMsIHAsIG8s
IG0pIEJPT1NUX1BQX0ZPUl85NF9DKEJPT1NUX1BQX0JPT0wocCg5NSwgcykpLCBzLCBwLCBvLCBt
KQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzk1KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl85NV9D
KEJPT1NUX1BQX0JPT0wocCg5NiwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SXzk2KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl85Nl9DKEJPT1NUX1BQX0JPT0wocCg5Nywg
cykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzk3KHMsIHAsIG8sIG0pIEJP
T1NUX1BQX0ZPUl85N19DKEJPT1NUX1BQX0JPT0wocCg5OCwgcykpLCBzLCBwLCBvLCBtKQotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SXzk4KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl85OF9DKEJPT1NU
X1BQX0JPT0wocCg5OSwgcykpLCBzLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzk5
KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0ZPUl85OV9DKEJPT1NUX1BQX0JPT0wocCgxMDAsIHMpKSwg
cywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMDAocywgcCwgbywgbSkgQk9PU1Rf
UFBfRk9SXzEwMF9DKEJPT1NUX1BQX0JPT0wocCgxMDEsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl8xMDEocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEwMV9DKEJPT1NU
X1BQX0JPT0wocCgxMDIsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8x
MDIocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEwMl9DKEJPT1NUX1BQX0JPT0wocCgxMDMsIHMp
KSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMDMocywgcCwgbywgbSkgQk9P
U1RfUFBfRk9SXzEwM19DKEJPT1NUX1BQX0JPT0wocCgxMDQsIHMpKSwgcywgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMDQocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEwNF9DKEJP
T1NUX1BQX0JPT0wocCgxMDUsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul8xMDUocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEwNV9DKEJPT1NUX1BQX0JPT0wocCgxMDYs
IHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMDYocywgcCwgbywgbSkg
Qk9PU1RfUFBfRk9SXzEwNl9DKEJPT1NUX1BQX0JPT0wocCgxMDcsIHMpKSwgcywgcCwgbywgbSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMDcocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEwN19D
KEJPT1NUX1BQX0JPT0wocCgxMDgsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl8xMDgocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEwOF9DKEJPT1NUX1BQX0JPT0wocCgx
MDksIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMDkocywgcCwgbywg
bSkgQk9PU1RfUFBfRk9SXzEwOV9DKEJPT1NUX1BQX0JPT0wocCgxMTAsIHMpKSwgcywgcCwgbywg
bSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMTAocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEx
MF9DKEJPT1NUX1BQX0JPT0wocCgxMTEsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0ZPUl8xMTEocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzExMV9DKEJPT1NUX1BQX0JPT0wo
cCgxMTIsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMTIocywgcCwg
bywgbSkgQk9PU1RfUFBfRk9SXzExMl9DKEJPT1NUX1BQX0JPT0wocCgxMTMsIHMpKSwgcywgcCwg
bywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMTMocywgcCwgbywgbSkgQk9PU1RfUFBfRk9S
XzExM19DKEJPT1NUX1BQX0JPT0wocCgxMTQsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0ZPUl8xMTQocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzExNF9DKEJPT1NUX1BQX0JP
T0wocCgxMTUsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMTUocywg
cCwgbywgbSkgQk9PU1RfUFBfRk9SXzExNV9DKEJPT1NUX1BQX0JPT0wocCgxMTYsIHMpKSwgcywg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMTYocywgcCwgbywgbSkgQk9PU1RfUFBf
Rk9SXzExNl9DKEJPT1NUX1BQX0JPT0wocCgxMTcsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl8xMTcocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzExN19DKEJPT1NUX1BQ
X0JPT0wocCgxMTgsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMTgo
cywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzExOF9DKEJPT1NUX1BQX0JPT0wocCgxMTksIHMpKSwg
cywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMTkocywgcCwgbywgbSkgQk9PU1Rf
UFBfRk9SXzExOV9DKEJPT1NUX1BQX0JPT0wocCgxMjAsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl8xMjAocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEyMF9DKEJPT1NU
X1BQX0JPT0wocCgxMjEsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8x
MjEocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEyMV9DKEJPT1NUX1BQX0JPT0wocCgxMjIsIHMp
KSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMjIocywgcCwgbywgbSkgQk9P
U1RfUFBfRk9SXzEyMl9DKEJPT1NUX1BQX0JPT0wocCgxMjMsIHMpKSwgcywgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMjMocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEyM19DKEJP
T1NUX1BQX0JPT0wocCgxMjQsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul8xMjQocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEyNF9DKEJPT1NUX1BQX0JPT0wocCgxMjUs
IHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMjUocywgcCwgbywgbSkg
Qk9PU1RfUFBfRk9SXzEyNV9DKEJPT1NUX1BQX0JPT0wocCgxMjYsIHMpKSwgcywgcCwgbywgbSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMjYocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEyNl9D
KEJPT1NUX1BQX0JPT0wocCgxMjcsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl8xMjcocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEyN19DKEJPT1NUX1BQX0JPT0wocCgx
MjgsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMjgocywgcCwgbywg
bSkgQk9PU1RfUFBfRk9SXzEyOF9DKEJPT1NUX1BQX0JPT0wocCgxMjksIHMpKSwgcywgcCwgbywg
bSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMjkocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEy
OV9DKEJPT1NUX1BQX0JPT0wocCgxMzAsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0ZPUl8xMzAocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEzMF9DKEJPT1NUX1BQX0JPT0wo
cCgxMzEsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMzEocywgcCwg
bywgbSkgQk9PU1RfUFBfRk9SXzEzMV9DKEJPT1NUX1BQX0JPT0wocCgxMzIsIHMpKSwgcywgcCwg
bywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMzIocywgcCwgbywgbSkgQk9PU1RfUFBfRk9S
XzEzMl9DKEJPT1NUX1BQX0JPT0wocCgxMzMsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0ZPUl8xMzMocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEzM19DKEJPT1NUX1BQX0JP
T0wocCgxMzQsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMzQocywg
cCwgbywgbSkgQk9PU1RfUFBfRk9SXzEzNF9DKEJPT1NUX1BQX0JPT0wocCgxMzUsIHMpKSwgcywg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMzUocywgcCwgbywgbSkgQk9PU1RfUFBf
Rk9SXzEzNV9DKEJPT1NUX1BQX0JPT0wocCgxMzYsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl8xMzYocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEzNl9DKEJPT1NUX1BQ
X0JPT0wocCgxMzcsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMzco
cywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEzN19DKEJPT1NUX1BQX0JPT0wocCgxMzgsIHMpKSwg
cywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMzgocywgcCwgbywgbSkgQk9PU1Rf
UFBfRk9SXzEzOF9DKEJPT1NUX1BQX0JPT0wocCgxMzksIHMpKSwgcywgcCwgbywgbSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl8xMzkocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzEzOV9DKEJPT1NU
X1BQX0JPT0wocCgxNDAsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8x
NDAocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE0MF9DKEJPT1NUX1BQX0JPT0wocCgxNDEsIHMp
KSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNDEocywgcCwgbywgbSkgQk9P
U1RfUFBfRk9SXzE0MV9DKEJPT1NUX1BQX0JPT0wocCgxNDIsIHMpKSwgcywgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNDIocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE0Ml9DKEJP
T1NUX1BQX0JPT0wocCgxNDMsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul8xNDMocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE0M19DKEJPT1NUX1BQX0JPT0wocCgxNDQs
IHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNDQocywgcCwgbywgbSkg
Qk9PU1RfUFBfRk9SXzE0NF9DKEJPT1NUX1BQX0JPT0wocCgxNDUsIHMpKSwgcywgcCwgbywgbSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNDUocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE0NV9D
KEJPT1NUX1BQX0JPT0wocCgxNDYsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl8xNDYocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE0Nl9DKEJPT1NUX1BQX0JPT0wocCgx
NDcsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNDcocywgcCwgbywg
bSkgQk9PU1RfUFBfRk9SXzE0N19DKEJPT1NUX1BQX0JPT0wocCgxNDgsIHMpKSwgcywgcCwgbywg
bSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNDgocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE0
OF9DKEJPT1NUX1BQX0JPT0wocCgxNDksIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0ZPUl8xNDkocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE0OV9DKEJPT1NUX1BQX0JPT0wo
cCgxNTAsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNTAocywgcCwg
bywgbSkgQk9PU1RfUFBfRk9SXzE1MF9DKEJPT1NUX1BQX0JPT0wocCgxNTEsIHMpKSwgcywgcCwg
bywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNTEocywgcCwgbywgbSkgQk9PU1RfUFBfRk9S
XzE1MV9DKEJPT1NUX1BQX0JPT0wocCgxNTIsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0ZPUl8xNTIocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE1Ml9DKEJPT1NUX1BQX0JP
T0wocCgxNTMsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNTMocywg
cCwgbywgbSkgQk9PU1RfUFBfRk9SXzE1M19DKEJPT1NUX1BQX0JPT0wocCgxNTQsIHMpKSwgcywg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNTQocywgcCwgbywgbSkgQk9PU1RfUFBf
Rk9SXzE1NF9DKEJPT1NUX1BQX0JPT0wocCgxNTUsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl8xNTUocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE1NV9DKEJPT1NUX1BQ
X0JPT0wocCgxNTYsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNTYo
cywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE1Nl9DKEJPT1NUX1BQX0JPT0wocCgxNTcsIHMpKSwg
cywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNTcocywgcCwgbywgbSkgQk9PU1Rf
UFBfRk9SXzE1N19DKEJPT1NUX1BQX0JPT0wocCgxNTgsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl8xNTgocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE1OF9DKEJPT1NU
X1BQX0JPT0wocCgxNTksIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8x
NTkocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE1OV9DKEJPT1NUX1BQX0JPT0wocCgxNjAsIHMp
KSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNjAocywgcCwgbywgbSkgQk9P
U1RfUFBfRk9SXzE2MF9DKEJPT1NUX1BQX0JPT0wocCgxNjEsIHMpKSwgcywgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNjEocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE2MV9DKEJP
T1NUX1BQX0JPT0wocCgxNjIsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul8xNjIocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE2Ml9DKEJPT1NUX1BQX0JPT0wocCgxNjMs
IHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNjMocywgcCwgbywgbSkg
Qk9PU1RfUFBfRk9SXzE2M19DKEJPT1NUX1BQX0JPT0wocCgxNjQsIHMpKSwgcywgcCwgbywgbSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNjQocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE2NF9D
KEJPT1NUX1BQX0JPT0wocCgxNjUsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl8xNjUocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE2NV9DKEJPT1NUX1BQX0JPT0wocCgx
NjYsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNjYocywgcCwgbywg
bSkgQk9PU1RfUFBfRk9SXzE2Nl9DKEJPT1NUX1BQX0JPT0wocCgxNjcsIHMpKSwgcywgcCwgbywg
bSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNjcocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE2
N19DKEJPT1NUX1BQX0JPT0wocCgxNjgsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0ZPUl8xNjgocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE2OF9DKEJPT1NUX1BQX0JPT0wo
cCgxNjksIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNjkocywgcCwg
bywgbSkgQk9PU1RfUFBfRk9SXzE2OV9DKEJPT1NUX1BQX0JPT0wocCgxNzAsIHMpKSwgcywgcCwg
bywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNzAocywgcCwgbywgbSkgQk9PU1RfUFBfRk9S
XzE3MF9DKEJPT1NUX1BQX0JPT0wocCgxNzEsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0ZPUl8xNzEocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE3MV9DKEJPT1NUX1BQX0JP
T0wocCgxNzIsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNzIocywg
cCwgbywgbSkgQk9PU1RfUFBfRk9SXzE3Ml9DKEJPT1NUX1BQX0JPT0wocCgxNzMsIHMpKSwgcywg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNzMocywgcCwgbywgbSkgQk9PU1RfUFBf
Rk9SXzE3M19DKEJPT1NUX1BQX0JPT0wocCgxNzQsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl8xNzQocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE3NF9DKEJPT1NUX1BQ
X0JPT0wocCgxNzUsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNzUo
cywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE3NV9DKEJPT1NUX1BQX0JPT0wocCgxNzYsIHMpKSwg
cywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNzYocywgcCwgbywgbSkgQk9PU1Rf
UFBfRk9SXzE3Nl9DKEJPT1NUX1BQX0JPT0wocCgxNzcsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl8xNzcocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE3N19DKEJPT1NU
X1BQX0JPT0wocCgxNzgsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8x
NzgocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE3OF9DKEJPT1NUX1BQX0JPT0wocCgxNzksIHMp
KSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNzkocywgcCwgbywgbSkgQk9P
U1RfUFBfRk9SXzE3OV9DKEJPT1NUX1BQX0JPT0wocCgxODAsIHMpKSwgcywgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl8xODAocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE4MF9DKEJP
T1NUX1BQX0JPT0wocCgxODEsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul8xODEocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE4MV9DKEJPT1NUX1BQX0JPT0wocCgxODIs
IHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xODIocywgcCwgbywgbSkg
Qk9PU1RfUFBfRk9SXzE4Ml9DKEJPT1NUX1BQX0JPT0wocCgxODMsIHMpKSwgcywgcCwgbywgbSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xODMocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE4M19D
KEJPT1NUX1BQX0JPT0wocCgxODQsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl8xODQocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE4NF9DKEJPT1NUX1BQX0JPT0wocCgx
ODUsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xODUocywgcCwgbywg
bSkgQk9PU1RfUFBfRk9SXzE4NV9DKEJPT1NUX1BQX0JPT0wocCgxODYsIHMpKSwgcywgcCwgbywg
bSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xODYocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE4
Nl9DKEJPT1NUX1BQX0JPT0wocCgxODcsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0ZPUl8xODcocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE4N19DKEJPT1NUX1BQX0JPT0wo
cCgxODgsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xODgocywgcCwg
bywgbSkgQk9PU1RfUFBfRk9SXzE4OF9DKEJPT1NUX1BQX0JPT0wocCgxODksIHMpKSwgcywgcCwg
bywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xODkocywgcCwgbywgbSkgQk9PU1RfUFBfRk9S
XzE4OV9DKEJPT1NUX1BQX0JPT0wocCgxOTAsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0ZPUl8xOTAocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE5MF9DKEJPT1NUX1BQX0JP
T0wocCgxOTEsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xOTEocywg
cCwgbywgbSkgQk9PU1RfUFBfRk9SXzE5MV9DKEJPT1NUX1BQX0JPT0wocCgxOTIsIHMpKSwgcywg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xOTIocywgcCwgbywgbSkgQk9PU1RfUFBf
Rk9SXzE5Ml9DKEJPT1NUX1BQX0JPT0wocCgxOTMsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl8xOTMocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE5M19DKEJPT1NUX1BQ
X0JPT0wocCgxOTQsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xOTQo
cywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE5NF9DKEJPT1NUX1BQX0JPT0wocCgxOTUsIHMpKSwg
cywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xOTUocywgcCwgbywgbSkgQk9PU1Rf
UFBfRk9SXzE5NV9DKEJPT1NUX1BQX0JPT0wocCgxOTYsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl8xOTYocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE5Nl9DKEJPT1NU
X1BQX0JPT0wocCgxOTcsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8x
OTcocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE5N19DKEJPT1NUX1BQX0JPT0wocCgxOTgsIHMp
KSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xOTgocywgcCwgbywgbSkgQk9P
U1RfUFBfRk9SXzE5OF9DKEJPT1NUX1BQX0JPT0wocCgxOTksIHMpKSwgcywgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl8xOTkocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzE5OV9DKEJP
T1NUX1BQX0JPT0wocCgyMDAsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul8yMDAocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIwMF9DKEJPT1NUX1BQX0JPT0wocCgyMDEs
IHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMDEocywgcCwgbywgbSkg
Qk9PU1RfUFBfRk9SXzIwMV9DKEJPT1NUX1BQX0JPT0wocCgyMDIsIHMpKSwgcywgcCwgbywgbSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMDIocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIwMl9D
KEJPT1NUX1BQX0JPT0wocCgyMDMsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl8yMDMocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIwM19DKEJPT1NUX1BQX0JPT0wocCgy
MDQsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMDQocywgcCwgbywg
bSkgQk9PU1RfUFBfRk9SXzIwNF9DKEJPT1NUX1BQX0JPT0wocCgyMDUsIHMpKSwgcywgcCwgbywg
bSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMDUocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIw
NV9DKEJPT1NUX1BQX0JPT0wocCgyMDYsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0ZPUl8yMDYocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIwNl9DKEJPT1NUX1BQX0JPT0wo
cCgyMDcsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMDcocywgcCwg
bywgbSkgQk9PU1RfUFBfRk9SXzIwN19DKEJPT1NUX1BQX0JPT0wocCgyMDgsIHMpKSwgcywgcCwg
bywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMDgocywgcCwgbywgbSkgQk9PU1RfUFBfRk9S
XzIwOF9DKEJPT1NUX1BQX0JPT0wocCgyMDksIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0ZPUl8yMDkocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIwOV9DKEJPT1NUX1BQX0JP
T0wocCgyMTAsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMTAocywg
cCwgbywgbSkgQk9PU1RfUFBfRk9SXzIxMF9DKEJPT1NUX1BQX0JPT0wocCgyMTEsIHMpKSwgcywg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMTEocywgcCwgbywgbSkgQk9PU1RfUFBf
Rk9SXzIxMV9DKEJPT1NUX1BQX0JPT0wocCgyMTIsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl8yMTIocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIxMl9DKEJPT1NUX1BQ
X0JPT0wocCgyMTMsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMTMo
cywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIxM19DKEJPT1NUX1BQX0JPT0wocCgyMTQsIHMpKSwg
cywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMTQocywgcCwgbywgbSkgQk9PU1Rf
UFBfRk9SXzIxNF9DKEJPT1NUX1BQX0JPT0wocCgyMTUsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl8yMTUocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIxNV9DKEJPT1NU
X1BQX0JPT0wocCgyMTYsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8y
MTYocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIxNl9DKEJPT1NUX1BQX0JPT0wocCgyMTcsIHMp
KSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMTcocywgcCwgbywgbSkgQk9P
U1RfUFBfRk9SXzIxN19DKEJPT1NUX1BQX0JPT0wocCgyMTgsIHMpKSwgcywgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMTgocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIxOF9DKEJP
T1NUX1BQX0JPT0wocCgyMTksIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul8yMTkocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIxOV9DKEJPT1NUX1BQX0JPT0wocCgyMjAs
IHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMjAocywgcCwgbywgbSkg
Qk9PU1RfUFBfRk9SXzIyMF9DKEJPT1NUX1BQX0JPT0wocCgyMjEsIHMpKSwgcywgcCwgbywgbSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMjEocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIyMV9D
KEJPT1NUX1BQX0JPT0wocCgyMjIsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl8yMjIocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIyMl9DKEJPT1NUX1BQX0JPT0wocCgy
MjMsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMjMocywgcCwgbywg
bSkgQk9PU1RfUFBfRk9SXzIyM19DKEJPT1NUX1BQX0JPT0wocCgyMjQsIHMpKSwgcywgcCwgbywg
bSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMjQocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIy
NF9DKEJPT1NUX1BQX0JPT0wocCgyMjUsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0ZPUl8yMjUocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIyNV9DKEJPT1NUX1BQX0JPT0wo
cCgyMjYsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMjYocywgcCwg
bywgbSkgQk9PU1RfUFBfRk9SXzIyNl9DKEJPT1NUX1BQX0JPT0wocCgyMjcsIHMpKSwgcywgcCwg
bywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMjcocywgcCwgbywgbSkgQk9PU1RfUFBfRk9S
XzIyN19DKEJPT1NUX1BQX0JPT0wocCgyMjgsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0ZPUl8yMjgocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIyOF9DKEJPT1NUX1BQX0JP
T0wocCgyMjksIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMjkocywg
cCwgbywgbSkgQk9PU1RfUFBfRk9SXzIyOV9DKEJPT1NUX1BQX0JPT0wocCgyMzAsIHMpKSwgcywg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMzAocywgcCwgbywgbSkgQk9PU1RfUFBf
Rk9SXzIzMF9DKEJPT1NUX1BQX0JPT0wocCgyMzEsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl8yMzEocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIzMV9DKEJPT1NUX1BQ
X0JPT0wocCgyMzIsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMzIo
cywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIzMl9DKEJPT1NUX1BQX0JPT0wocCgyMzMsIHMpKSwg
cywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMzMocywgcCwgbywgbSkgQk9PU1Rf
UFBfRk9SXzIzM19DKEJPT1NUX1BQX0JPT0wocCgyMzQsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl8yMzQocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIzNF9DKEJPT1NU
X1BQX0JPT0wocCgyMzUsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8y
MzUocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIzNV9DKEJPT1NUX1BQX0JPT0wocCgyMzYsIHMp
KSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMzYocywgcCwgbywgbSkgQk9P
U1RfUFBfRk9SXzIzNl9DKEJPT1NUX1BQX0JPT0wocCgyMzcsIHMpKSwgcywgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMzcocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIzN19DKEJP
T1NUX1BQX0JPT0wocCgyMzgsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul8yMzgocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzIzOF9DKEJPT1NUX1BQX0JPT0wocCgyMzks
IHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMzkocywgcCwgbywgbSkg
Qk9PU1RfUFBfRk9SXzIzOV9DKEJPT1NUX1BQX0JPT0wocCgyNDAsIHMpKSwgcywgcCwgbywgbSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNDAocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzI0MF9D
KEJPT1NUX1BQX0JPT0wocCgyNDEsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl8yNDEocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzI0MV9DKEJPT1NUX1BQX0JPT0wocCgy
NDIsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNDIocywgcCwgbywg
bSkgQk9PU1RfUFBfRk9SXzI0Ml9DKEJPT1NUX1BQX0JPT0wocCgyNDMsIHMpKSwgcywgcCwgbywg
bSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNDMocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzI0
M19DKEJPT1NUX1BQX0JPT0wocCgyNDQsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0ZPUl8yNDQocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzI0NF9DKEJPT1NUX1BQX0JPT0wo
cCgyNDUsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNDUocywgcCwg
bywgbSkgQk9PU1RfUFBfRk9SXzI0NV9DKEJPT1NUX1BQX0JPT0wocCgyNDYsIHMpKSwgcywgcCwg
bywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNDYocywgcCwgbywgbSkgQk9PU1RfUFBfRk9S
XzI0Nl9DKEJPT1NUX1BQX0JPT0wocCgyNDcsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0ZPUl8yNDcocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzI0N19DKEJPT1NUX1BQX0JP
T0wocCgyNDgsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNDgocywg
cCwgbywgbSkgQk9PU1RfUFBfRk9SXzI0OF9DKEJPT1NUX1BQX0JPT0wocCgyNDksIHMpKSwgcywg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNDkocywgcCwgbywgbSkgQk9PU1RfUFBf
Rk9SXzI0OV9DKEJPT1NUX1BQX0JPT0wocCgyNTAsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl8yNTAocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzI1MF9DKEJPT1NUX1BQ
X0JPT0wocCgyNTEsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNTEo
cywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzI1MV9DKEJPT1NUX1BQX0JPT0wocCgyNTIsIHMpKSwg
cywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNTIocywgcCwgbywgbSkgQk9PU1Rf
UFBfRk9SXzI1Ml9DKEJPT1NUX1BQX0JPT0wocCgyNTMsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl8yNTMocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzI1M19DKEJPT1NU
X1BQX0JPT0wocCgyNTQsIHMpKSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8y
NTQocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzI1NF9DKEJPT1NUX1BQX0JPT0wocCgyNTUsIHMp
KSwgcywgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNTUocywgcCwgbywgbSkgQk9P
U1RfUFBfRk9SXzI1NV9DKEJPT1NUX1BQX0JPT0wocCgyNTYsIHMpKSwgcywgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNTYocywgcCwgbywgbSkgQk9PU1RfUFBfRk9SXzI1Nl9DKEJP
T1NUX1BQX0JPT0wocCgyNTcsIHMpKSwgcywgcCwgbywgbSkKLSMKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl8xX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExF
X0VBVF8yKSgyLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzIsIEJPT1NUX1BQX1RV
UExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyLCBzKSwgcCwgbywgbSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl8yX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJP
T1NUX1BQX1RVUExFX0VBVF8yKSgzLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzMs
IEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgzLCBzKSwgcCwg
bywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8zX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBf
SUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg0LCBzKSBCT09TVF9QUF9JSUYoYywgQk9P
U1RfUFBfRk9SXzQsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBv
KSg0LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl80X0MoYywgcywgcCwgbywg
bSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg1LCBzKSBCT09TVF9Q
UF9JSUYoYywgQk9PU1RfUFBfRk9SXzUsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9F
WFBSX0lJRihjLCBvKSg1LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl81X0Mo
YywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg2
LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzYsIEJPT1NUX1BQX1RVUExFX0VBVF80
KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg2LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0ZPUl82X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RV
UExFX0VBVF8yKSg3LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzcsIEJPT1NUX1BQ
X1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg3LCBzKSwgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl83X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0s
IEJPT1NUX1BQX1RVUExFX0VBVF8yKSg4LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9S
XzgsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg4LCBzKSwg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl84X0MoYywgcywgcCwgbywgbSkgQk9PU1Rf
UFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg5LCBzKSBCT09TVF9QUF9JSUYoYywg
Qk9PU1RfUFBfRk9SXzksIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihj
LCBvKSg5LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl85X0MoYywgcywgcCwg
bywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMCwgcykgQk9P
U1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xMCwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NU
X1BQX0VYUFJfSUlGKGMsIG8pKDEwLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul8xMF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9F
QVRfMikoMTEsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTEsIEJPT1NUX1BQX1RV
UExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxMSwgcyksIHAsIG8sIG0pCi0jIGRl
ZmluZSBCT09TVF9QUF9GT1JfMTFfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwg
Qk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEyLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9S
XzEyLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTIsIHMp
LCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzEyX0MoYywgcywgcCwgbywgbSkgQk9P
U1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMywgcykgQk9PU1RfUFBfSUlG
KGMsIEJPT1NUX1BQX0ZPUl8xMywgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJf
SUlGKGMsIG8pKDEzLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xM19DKGMs
IHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTQs
IHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTQsIEJPT1NUX1BQX1RVUExFX0VBVF80
KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxNCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09T
VF9QUF9GT1JfMTRfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBf
VFVQTEVfRUFUXzIpKDE1LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzE1LCBCT09T
VF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTUsIHMpLCBwLCBvLCBt
KQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE1X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlG
KGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxNiwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NU
X1BQX0ZPUl8xNiwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8p
KDE2LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNl9DKGMsIHMsIHAsIG8s
IG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTcsIHMpIEJPT1NU
X1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTcsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9Q
UF9FWFBSX0lJRihjLCBvKSgxNywgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1Jf
MTdfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFU
XzIpKDE4LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzE4LCBCT09TVF9QUF9UVVBM
RV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTgsIHMpLCBwLCBvLCBtKQotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SXzE4X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJP
T1NUX1BQX1RVUExFX0VBVF8yKSgxOSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8x
OSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDE5LCBzKSwg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xOV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NU
X1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjAsIHMpIEJPT1NUX1BQX0lJRihj
LCBCT09TVF9QUF9GT1JfMjAsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJ
RihjLCBvKSgyMCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjBfQyhjLCBz
LCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIxLCBz
KSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzIxLCBCT09TVF9QUF9UVVBMRV9FQVRfNCko
Qk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMjEsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SXzIxX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RV
UExFX0VBVF8yKSgyMiwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yMiwgQk9PU1Rf
UFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDIyLCBzKSwgcCwgbywgbSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMl9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihj
LCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjMsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9Q
UF9GT1JfMjMsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgy
MywgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjNfQyhjLCBzLCBwLCBvLCBt
KSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDI0LCBzKSBCT09TVF9Q
UF9JSUYoYywgQk9PU1RfUFBfRk9SXzI0LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBf
RVhQUl9JSUYoYywgbykoMjQsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzI0
X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8y
KSgyNSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yNSwgQk9PU1RfUFBfVFVQTEVf
RUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDI1LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl8yNV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09T
VF9QUF9UVVBMRV9FQVRfMikoMjYsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMjYs
IEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyNiwgcyksIHAs
IG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjZfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9Q
UF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDI3LCBzKSBCT09TVF9QUF9JSUYoYywg
Qk9PU1RfUFBfRk9SXzI3LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYo
YywgbykoMjcsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzI3X0MoYywgcywg
cCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyOCwgcykg
Qk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yOCwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJP
T1NUX1BQX0VYUFJfSUlGKGMsIG8pKDI4LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl8yOF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBM
RV9FQVRfMikoMjksIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMjksIEJPT1NUX1BQ
X1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyOSwgcyksIHAsIG8sIG0pCi0j
IGRlZmluZSBCT09TVF9QUF9GT1JfMjlfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywg
bSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDMwLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBf
Rk9SXzMwLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMzAs
IHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzMwX0MoYywgcywgcCwgbywgbSkg
Qk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgzMSwgcykgQk9PU1RfUFBf
SUlGKGMsIEJPT1NUX1BQX0ZPUl8zMSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VY
UFJfSUlGKGMsIG8pKDMxLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8zMV9D
KGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMiko
MzIsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMzIsIEJPT1NUX1BQX1RVUExFX0VB
VF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgzMiwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBC
T09TVF9QUF9GT1JfMzJfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1Rf
UFBfVFVQTEVfRUFUXzIpKDMzLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzMzLCBC
T09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMzMsIHMpLCBwLCBv
LCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzMzX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBf
SUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgzNCwgcykgQk9PU1RfUFBfSUlGKGMsIEJP
T1NUX1BQX0ZPUl8zNCwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMs
IG8pKDM0LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8zNF9DKGMsIHMsIHAs
IG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMzUsIHMpIEJP
T1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMzUsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09T
VF9QUF9FWFBSX0lJRihjLCBvKSgzNSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9G
T1JfMzVfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVf
RUFUXzIpKDM2LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzM2LCBCT09TVF9QUF9U
VVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMzYsIHMpLCBwLCBvLCBtKQotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SXzM2X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0s
IEJPT1NUX1BQX1RVUExFX0VBVF8yKSgzNywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZP
Ul8zNywgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDM3LCBz
KSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8zN19DKGMsIHMsIHAsIG8sIG0pIEJP
T1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMzgsIHMpIEJPT1NUX1BQX0lJ
RihjLCBCT09TVF9QUF9GT1JfMzgsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBS
X0lJRihjLCBvKSgzOCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMzhfQyhj
LCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDM5
LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzM5LCBCT09TVF9QUF9UVVBMRV9FQVRf
NCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMzksIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SXzM5X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQ
X1RVUExFX0VBVF8yKSg0MCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl80MCwgQk9P
U1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDQwLCBzKSwgcCwgbywg
bSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl80MF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJ
RihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNDEsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09T
VF9QUF9GT1JfNDEsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBv
KSg0MSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfNDFfQyhjLCBzLCBwLCBv
LCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDQyLCBzKSBCT09T
VF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzQyLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1Rf
UFBfRVhQUl9JSUYoYywgbykoNDIsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
XzQyX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VB
VF8yKSg0MywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl80MywgQk9PU1RfUFBfVFVQ
TEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDQzLCBzKSwgcCwgbywgbSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl80M19DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBC
T09TVF9QUF9UVVBMRV9FQVRfMikoNDQsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1Jf
NDQsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg0NCwgcyks
IHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfNDRfQyhjLCBzLCBwLCBvLCBtKSBCT09T
VF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDQ1LCBzKSBCT09TVF9QUF9JSUYo
YywgQk9PU1RfUFBfRk9SXzQ1LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9J
SUYoYywgbykoNDUsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzQ1X0MoYywg
cywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg0Niwg
cykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl80NiwgQk9PU1RfUFBfVFVQTEVfRUFUXzQp
KEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDQ2LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0ZPUl80Nl9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9U
VVBMRV9FQVRfMikoNDcsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfNDcsIEJPT1NU
X1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg0NywgcyksIHAsIG8sIG0p
Ci0jIGRlZmluZSBCT09TVF9QUF9GT1JfNDdfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYo
YywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDQ4LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1Rf
UFBfRk9SXzQ4LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbyko
NDgsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzQ4X0MoYywgcywgcCwgbywg
bSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg0OSwgcykgQk9PU1Rf
UFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl80OSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQ
X0VYUFJfSUlGKGMsIG8pKDQ5LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl80
OV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRf
MikoNTAsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfNTAsIEJPT1NUX1BQX1RVUExF
X0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg1MCwgcyksIHAsIG8sIG0pCi0jIGRlZmlu
ZSBCT09TVF9QUF9GT1JfNTBfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9P
U1RfUFBfVFVQTEVfRUFUXzIpKDUxLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzUx
LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoNTEsIHMpLCBw
LCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzUxX0MoYywgcywgcCwgbywgbSkgQk9PU1Rf
UFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg1MiwgcykgQk9PU1RfUFBfSUlGKGMs
IEJPT1NUX1BQX0ZPUl81MiwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlG
KGMsIG8pKDUyLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl81Ml9DKGMsIHMs
IHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNTMsIHMp
IEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfNTMsIEJPT1NUX1BQX1RVUExFX0VBVF80KShC
T09TVF9QUF9FWFBSX0lJRihjLCBvKSg1MywgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9Q
UF9GT1JfNTNfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQ
TEVfRUFUXzIpKDU0LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzU0LCBCT09TVF9Q
UF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoNTQsIHMpLCBwLCBvLCBtKQot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SXzU0X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMs
IG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg1NSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQ
X0ZPUl81NSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDU1
LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl81NV9DKGMsIHMsIHAsIG8sIG0p
IEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNTYsIHMpIEJPT1NUX1BQ
X0lJRihjLCBCT09TVF9QUF9GT1JfNTYsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9F
WFBSX0lJRihjLCBvKSg1NiwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfNTZf
QyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIp
KDU3LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzU3LCBCT09TVF9QUF9UVVBMRV9F
QVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoNTcsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SXzU3X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NU
X1BQX1RVUExFX0VBVF8yKSg1OCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl81OCwg
Qk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDU4LCBzKSwgcCwg
bywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl81OF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQ
X0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNTksIHMpIEJPT1NUX1BQX0lJRihjLCBC
T09TVF9QUF9GT1JfNTksIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihj
LCBvKSg1OSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfNTlfQyhjLCBzLCBw
LCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDYwLCBzKSBC
T09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzYwLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9P
U1RfUFBfRVhQUl9JSUYoYywgbykoNjAsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SXzYwX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExF
X0VBVF8yKSg2MSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl82MSwgQk9PU1RfUFBf
VFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDYxLCBzKSwgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl82MV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBt
LCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNjIsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9G
T1JfNjIsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg2Miwg
cyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfNjJfQyhjLCBzLCBwLCBvLCBtKSBC
T09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDYzLCBzKSBCT09TVF9QUF9J
SUYoYywgQk9PU1RfUFBfRk9SXzYzLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQ
Ul9JSUYoYywgbykoNjMsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzYzX0Mo
YywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg2
NCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl82NCwgQk9PU1RfUFBfVFVQTEVfRUFU
XzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDY0LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0ZPUl82NF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9Q
UF9UVVBMRV9FQVRfMikoNjUsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfNjUsIEJP
T1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg2NSwgcyksIHAsIG8s
IG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfNjVfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9J
SUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDY2LCBzKSBCT09TVF9QUF9JSUYoYywgQk9P
U1RfUFBfRk9SXzY2LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywg
bykoNjYsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzY2X0MoYywgcywgcCwg
bywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg2NywgcykgQk9P
U1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl82NywgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NU
X1BQX0VYUFJfSUlGKGMsIG8pKDY3LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul82N19DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9F
QVRfMikoNjgsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfNjgsIEJPT1NUX1BQX1RV
UExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg2OCwgcyksIHAsIG8sIG0pCi0jIGRl
ZmluZSBCT09TVF9QUF9GT1JfNjhfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwg
Qk9PU1RfUFBfVFVQTEVfRUFUXzIpKDY5LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9S
XzY5LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoNjksIHMp
LCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzY5X0MoYywgcywgcCwgbywgbSkgQk9P
U1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg3MCwgcykgQk9PU1RfUFBfSUlG
KGMsIEJPT1NUX1BQX0ZPUl83MCwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJf
SUlGKGMsIG8pKDcwLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl83MF9DKGMs
IHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNzEs
IHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfNzEsIEJPT1NUX1BQX1RVUExFX0VBVF80
KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg3MSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09T
VF9QUF9GT1JfNzFfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBf
VFVQTEVfRUFUXzIpKDcyLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzcyLCBCT09T
VF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoNzIsIHMpLCBwLCBvLCBt
KQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzcyX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlG
KGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg3MywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NU
X1BQX0ZPUl83MywgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8p
KDczLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl83M19DKGMsIHMsIHAsIG8s
IG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNzQsIHMpIEJPT1NU
X1BQX0lJRihjLCBCT09TVF9QUF9GT1JfNzQsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9Q
UF9FWFBSX0lJRihjLCBvKSg3NCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1Jf
NzRfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFU
XzIpKDc1LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzc1LCBCT09TVF9QUF9UVVBM
RV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoNzUsIHMpLCBwLCBvLCBtKQotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SXzc1X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJP
T1NUX1BQX1RVUExFX0VBVF8yKSg3NiwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl83
NiwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDc2LCBzKSwg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl83Nl9DKGMsIHMsIHAsIG8sIG0pIEJPT1NU
X1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoNzcsIHMpIEJPT1NUX1BQX0lJRihj
LCBCT09TVF9QUF9GT1JfNzcsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJ
RihjLCBvKSg3NywgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfNzdfQyhjLCBz
LCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDc4LCBz
KSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzc4LCBCT09TVF9QUF9UVVBMRV9FQVRfNCko
Qk9PU1RfUFBfRVhQUl9JSUYoYywgbykoNzgsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SXzc4X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RV
UExFX0VBVF8yKSg3OSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl83OSwgQk9PU1Rf
UFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDc5LCBzKSwgcCwgbywgbSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl83OV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihj
LCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoODAsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9Q
UF9GT1JfODAsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg4
MCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfODBfQyhjLCBzLCBwLCBvLCBt
KSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDgxLCBzKSBCT09TVF9Q
UF9JSUYoYywgQk9PU1RfUFBfRk9SXzgxLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBf
RVhQUl9JSUYoYywgbykoODEsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzgx
X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8y
KSg4MiwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl84MiwgQk9PU1RfUFBfVFVQTEVf
RUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDgyLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl84Ml9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09T
VF9QUF9UVVBMRV9FQVRfMikoODMsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfODMs
IEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg4MywgcyksIHAs
IG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfODNfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9Q
UF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDg0LCBzKSBCT09TVF9QUF9JSUYoYywg
Qk9PU1RfUFBfRk9SXzg0LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYo
YywgbykoODQsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzg0X0MoYywgcywg
cCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg4NSwgcykg
Qk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl84NSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJP
T1NUX1BQX0VYUFJfSUlGKGMsIG8pKDg1LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl84NV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBM
RV9FQVRfMikoODYsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfODYsIEJPT1NUX1BQ
X1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg4NiwgcyksIHAsIG8sIG0pCi0j
IGRlZmluZSBCT09TVF9QUF9GT1JfODZfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywg
bSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDg3LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBf
Rk9SXzg3LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoODcs
IHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzg3X0MoYywgcywgcCwgbywgbSkg
Qk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg4OCwgcykgQk9PU1RfUFBf
SUlGKGMsIEJPT1NUX1BQX0ZPUl84OCwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VY
UFJfSUlGKGMsIG8pKDg4LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl84OF9D
KGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMiko
ODksIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfODksIEJPT1NUX1BQX1RVUExFX0VB
VF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSg4OSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBC
T09TVF9QUF9GT1JfODlfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1Rf
UFBfVFVQTEVfRUFUXzIpKDkwLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzkwLCBC
T09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoOTAsIHMpLCBwLCBv
LCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzkwX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBf
SUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSg5MSwgcykgQk9PU1RfUFBfSUlGKGMsIEJP
T1NUX1BQX0ZPUl85MSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMs
IG8pKDkxLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl85MV9DKGMsIHMsIHAs
IG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoOTIsIHMpIEJP
T1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfOTIsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09T
VF9QUF9FWFBSX0lJRihjLCBvKSg5MiwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9G
T1JfOTJfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVf
RUFUXzIpKDkzLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzkzLCBCT09TVF9QUF9U
VVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoOTMsIHMpLCBwLCBvLCBtKQotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SXzkzX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0s
IEJPT1NUX1BQX1RVUExFX0VBVF8yKSg5NCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZP
Ul85NCwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDk0LCBz
KSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl85NF9DKGMsIHMsIHAsIG8sIG0pIEJP
T1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoOTUsIHMpIEJPT1NUX1BQX0lJ
RihjLCBCT09TVF9QUF9GT1JfOTUsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBS
X0lJRihjLCBvKSg5NSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfOTVfQyhj
LCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDk2
LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzk2LCBCT09TVF9QUF9UVVBMRV9FQVRf
NCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoOTYsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SXzk2X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQ
X1RVUExFX0VBVF8yKSg5NywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl85NywgQk9P
U1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDk3LCBzKSwgcCwgbywg
bSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl85N19DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJ
RihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoOTgsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09T
VF9QUF9GT1JfOTgsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBv
KSg5OCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfOThfQyhjLCBzLCBwLCBv
LCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDk5LCBzKSBCT09T
VF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzk5LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1Rf
UFBfRVhQUl9JSUYoYywgbykoOTksIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
Xzk5X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VB
VF8yKSgxMDAsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTAwLCBCT09TVF9QUF9U
VVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTAwLCBzKSwgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMDBfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywg
bSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEwMSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQ
X0ZPUl8xMDEsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgx
MDEsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzEwMV9DKGMsIHMsIHAsIG8s
IG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTAyLCBzKSBCT09T
VF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzEwMiwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NU
X1BQX0VYUFJfSUlGKGMsIG8pKDEwMiwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9G
T1JfMTAyX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExF
X0VBVF8yKSgxMDMsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTAzLCBCT09TVF9Q
UF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTAzLCBzKSwgcCwgbywgbSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMDNfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYo
YywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEwNCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NU
X1BQX0ZPUl8xMDQsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBv
KSgxMDQsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzEwNF9DKGMsIHMsIHAs
IG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTA1LCBzKSBC
T09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzEwNSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJP
T1NUX1BQX0VYUFJfSUlGKGMsIG8pKDEwNSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9Q
UF9GT1JfMTA1X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RV
UExFX0VBVF8yKSgxMDYsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTA2LCBCT09T
VF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTA2LCBzKSwgcCwgbywg
bSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMDZfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9J
SUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEwNywgcykgQk9PU1RfUFBfSUlGKGMsIEJP
T1NUX1BQX0ZPUl8xMDcsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihj
LCBvKSgxMDcsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzEwN19DKGMsIHMs
IHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTA4LCBz
KSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzEwOCwgQk9PU1RfUFBfVFVQTEVfRUFUXzQp
KEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDEwOCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09T
VF9QUF9GT1JfMTA4X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQ
X1RVUExFX0VBVF8yKSgxMDksIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTA5LCBC
T09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTA5LCBzKSwgcCwg
bywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMDlfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9Q
UF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDExMCwgcykgQk9PU1RfUFBfSUlGKGMs
IEJPT1NUX1BQX0ZPUl8xMTAsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJ
RihjLCBvKSgxMTAsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzExMF9DKGMs
IHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTEx
LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzExMSwgQk9PU1RfUFBfVFVQTEVfRUFU
XzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDExMSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBC
T09TVF9QUF9GT1JfMTExX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NU
X1BQX1RVUExFX0VBVF8yKSgxMTIsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTEy
LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTEyLCBzKSwg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMTJfQyhjLCBzLCBwLCBvLCBtKSBCT09T
VF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDExMywgcykgQk9PU1RfUFBfSUlG
KGMsIEJPT1NUX1BQX0ZPUl8xMTMsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBS
X0lJRihjLCBvKSgxMTMsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzExM19D
KGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMiko
MTE0LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzExNCwgQk9PU1RfUFBfVFVQTEVf
RUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDExNCwgcyksIHAsIG8sIG0pCi0jIGRlZmlu
ZSBCT09TVF9QUF9GT1JfMTE0X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJP
T1NUX1BQX1RVUExFX0VBVF8yKSgxMTUsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1Jf
MTE1LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTE1LCBz
KSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMTVfQyhjLCBzLCBwLCBvLCBtKSBC
T09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDExNiwgcykgQk9PU1RfUFBf
SUlGKGMsIEJPT1NUX1BQX0ZPUl8xMTYsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9F
WFBSX0lJRihjLCBvKSgxMTYsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzEx
Nl9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRf
MikoMTE3LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzExNywgQk9PU1RfUFBfVFVQ
TEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDExNywgcyksIHAsIG8sIG0pCi0jIGRl
ZmluZSBCT09TVF9QUF9GT1JfMTE3X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0s
IEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMTgsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9G
T1JfMTE4LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTE4
LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMThfQyhjLCBzLCBwLCBvLCBt
KSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDExOSwgcykgQk9PU1Rf
UFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xMTksIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9Q
UF9FWFBSX0lJRihjLCBvKSgxMTksIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
XzExOV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9F
QVRfMikoMTIwLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzEyMCwgQk9PU1RfUFBf
VFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDEyMCwgcyksIHAsIG8sIG0pCi0j
IGRlZmluZSBCT09TVF9QUF9GT1JfMTIwX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMs
IG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMjEsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9Q
UF9GT1JfMTIxLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbyko
MTIxLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMjFfQyhjLCBzLCBwLCBv
LCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEyMiwgcykgQk9P
U1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xMjIsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09T
VF9QUF9FWFBSX0lJRihjLCBvKSgxMjIsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SXzEyMl9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBM
RV9FQVRfMikoMTIzLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzEyMywgQk9PU1Rf
UFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDEyMywgcyksIHAsIG8sIG0p
Ci0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTIzX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlG
KGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMjQsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09T
VF9QUF9GT1JfMTI0LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywg
bykoMTI0LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMjRfQyhjLCBzLCBw
LCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEyNSwgcykg
Qk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xMjUsIEJPT1NUX1BQX1RVUExFX0VBVF80KShC
T09TVF9QUF9FWFBSX0lJRihjLCBvKSgxMjUsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SXzEyNV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9U
VVBMRV9FQVRfMikoMTI2LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzEyNiwgQk9P
U1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDEyNiwgcyksIHAsIG8s
IG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTI2X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBf
SUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMjcsIHMpIEJPT1NUX1BQX0lJRihjLCBC
T09TVF9QUF9GT1JfMTI3LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYo
YywgbykoMTI3LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMjdfQyhjLCBz
LCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEyOCwg
cykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xMjgsIEJPT1NUX1BQX1RVUExFX0VBVF80
KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxMjgsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SXzEyOF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9Q
UF9UVVBMRV9FQVRfMikoMTI5LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzEyOSwg
Qk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDEyOSwgcyksIHAs
IG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTI5X0MoYywgcywgcCwgbywgbSkgQk9PU1Rf
UFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMzAsIHMpIEJPT1NUX1BQX0lJRihj
LCBCT09TVF9QUF9GT1JfMTMwLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9J
SUYoYywgbykoMTMwLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMzBfQyhj
LCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDEz
MSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xMzEsIEJPT1NUX1BQX1RVUExFX0VB
VF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxMzEsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SXzEzMV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09T
VF9QUF9UVVBMRV9FQVRfMikoMTMyLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzEz
MiwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDEzMiwgcyks
IHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTMyX0MoYywgcywgcCwgbywgbSkgQk9P
U1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMzMsIHMpIEJPT1NUX1BQX0lJ
RihjLCBCT09TVF9QUF9GT1JfMTMzLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQ
Ul9JSUYoYywgbykoMTMzLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xMzNf
QyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIp
KDEzNCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xMzQsIEJPT1NUX1BQX1RVUExF
X0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxMzQsIHMpLCBwLCBvLCBtKQotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SXzEzNF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBC
T09TVF9QUF9UVVBMRV9FQVRfMikoMTM1LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9S
XzEzNSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDEzNSwg
cyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTM1X0MoYywgcywgcCwgbywgbSkg
Qk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMzYsIHMpIEJPT1NUX1BQ
X0lJRihjLCBCT09TVF9QUF9GT1JfMTM2LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBf
RVhQUl9JSUYoYywgbykoMTM2LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8x
MzZfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFU
XzIpKDEzNywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xMzcsIEJPT1NUX1BQX1RV
UExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxMzcsIHMpLCBwLCBvLCBtKQotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SXzEzN19DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBt
LCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTM4LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBf
Rk9SXzEzOCwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDEz
OCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTM4X0MoYywgcywgcCwgbywg
bSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxMzksIHMpIEJPT1NU
X1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTM5LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1Rf
UFBfRVhQUl9JSUYoYywgbykoMTM5LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul8xMzlfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVf
RUFUXzIpKDE0MCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xNDAsIEJPT1NUX1BQ
X1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxNDAsIHMpLCBwLCBvLCBtKQot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE0MF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihj
LCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTQxLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1Rf
UFBfRk9SXzE0MSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8p
KDE0MSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTQxX0MoYywgcywgcCwg
bywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxNDIsIHMpIEJP
T1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTQyLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9P
U1RfUFBfRVhQUl9JSUYoYywgbykoMTQyLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl8xNDJfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQ
TEVfRUFUXzIpKDE0MywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xNDMsIEJPT1NU
X1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxNDMsIHMpLCBwLCBvLCBt
KQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE0M19DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJ
RihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTQ0LCBzKSBCT09TVF9QUF9JSUYoYywgQk9P
U1RfUFBfRk9SXzE0NCwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMs
IG8pKDE0NCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTQ0X0MoYywgcywg
cCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxNDUsIHMp
IEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTQ1LCBCT09TVF9QUF9UVVBMRV9FQVRfNCko
Qk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTQ1LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0ZPUl8xNDVfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBf
VFVQTEVfRUFUXzIpKDE0NiwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xNDYsIEJP
T1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxNDYsIHMpLCBwLCBv
LCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE0Nl9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQ
X0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTQ3LCBzKSBCT09TVF9QUF9JSUYoYywg
Qk9PU1RfUFBfRk9SXzE0NywgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlG
KGMsIG8pKDE0NywgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTQ3X0MoYywg
cywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxNDgs
IHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTQ4LCBCT09TVF9QUF9UVVBMRV9FQVRf
NCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTQ4LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0ZPUl8xNDhfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1Rf
UFBfVFVQTEVfRUFUXzIpKDE0OSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xNDks
IEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxNDksIHMpLCBw
LCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE0OV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NU
X1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTUwLCBzKSBCT09TVF9QUF9JSUYo
YywgQk9PU1RfUFBfRk9SXzE1MCwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJf
SUlGKGMsIG8pKDE1MCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTUwX0Mo
YywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgx
NTEsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTUxLCBCT09TVF9QUF9UVVBMRV9F
QVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTUxLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl8xNTFfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9P
U1RfUFBfVFVQTEVfRUFUXzIpKDE1MiwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8x
NTIsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxNTIsIHMp
LCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE1Ml9DKGMsIHMsIHAsIG8sIG0pIEJP
T1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTUzLCBzKSBCT09TVF9QUF9J
SUYoYywgQk9PU1RfUFBfRk9SXzE1MywgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VY
UFJfSUlGKGMsIG8pKDE1MywgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTUz
X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8y
KSgxNTQsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTU0LCBCT09TVF9QUF9UVVBM
RV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTU0LCBzKSwgcCwgbywgbSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl8xNTRfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwg
Qk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE1NSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZP
Ul8xNTUsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxNTUs
IHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE1NV9DKGMsIHMsIHAsIG8sIG0p
IEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTU2LCBzKSBCT09TVF9Q
UF9JSUYoYywgQk9PU1RfUFBfRk9SXzE1NiwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQ
X0VYUFJfSUlGKGMsIG8pKDE1NiwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1Jf
MTU2X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VB
VF8yKSgxNTcsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTU3LCBCT09TVF9QUF9U
VVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTU3LCBzKSwgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNTdfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywg
bSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE1OCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQ
X0ZPUl8xNTgsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgx
NTgsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE1OF9DKGMsIHMsIHAsIG8s
IG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTU5LCBzKSBCT09T
VF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzE1OSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NU
X1BQX0VYUFJfSUlGKGMsIG8pKDE1OSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9G
T1JfMTU5X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExF
X0VBVF8yKSgxNjAsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTYwLCBCT09TVF9Q
UF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTYwLCBzKSwgcCwgbywgbSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNjBfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYo
YywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE2MSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NU
X1BQX0ZPUl8xNjEsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBv
KSgxNjEsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE2MV9DKGMsIHMsIHAs
IG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTYyLCBzKSBC
T09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzE2MiwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJP
T1NUX1BQX0VYUFJfSUlGKGMsIG8pKDE2MiwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9Q
UF9GT1JfMTYyX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RV
UExFX0VBVF8yKSgxNjMsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTYzLCBCT09T
VF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTYzLCBzKSwgcCwgbywg
bSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNjNfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9J
SUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE2NCwgcykgQk9PU1RfUFBfSUlGKGMsIEJP
T1NUX1BQX0ZPUl8xNjQsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihj
LCBvKSgxNjQsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE2NF9DKGMsIHMs
IHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTY1LCBz
KSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzE2NSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQp
KEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDE2NSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09T
VF9QUF9GT1JfMTY1X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQ
X1RVUExFX0VBVF8yKSgxNjYsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTY2LCBC
T09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTY2LCBzKSwgcCwg
bywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNjZfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9Q
UF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE2NywgcykgQk9PU1RfUFBfSUlGKGMs
IEJPT1NUX1BQX0ZPUl8xNjcsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJ
RihjLCBvKSgxNjcsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE2N19DKGMs
IHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTY4
LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzE2OCwgQk9PU1RfUFBfVFVQTEVfRUFU
XzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDE2OCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBC
T09TVF9QUF9GT1JfMTY4X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NU
X1BQX1RVUExFX0VBVF8yKSgxNjksIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTY5
LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTY5LCBzKSwg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNjlfQyhjLCBzLCBwLCBvLCBtKSBCT09T
VF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE3MCwgcykgQk9PU1RfUFBfSUlG
KGMsIEJPT1NUX1BQX0ZPUl8xNzAsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBS
X0lJRihjLCBvKSgxNzAsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE3MF9D
KGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMiko
MTcxLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzE3MSwgQk9PU1RfUFBfVFVQTEVf
RUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDE3MSwgcyksIHAsIG8sIG0pCi0jIGRlZmlu
ZSBCT09TVF9QUF9GT1JfMTcxX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJP
T1NUX1BQX1RVUExFX0VBVF8yKSgxNzIsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1Jf
MTcyLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTcyLCBz
KSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNzJfQyhjLCBzLCBwLCBvLCBtKSBC
T09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE3MywgcykgQk9PU1RfUFBf
SUlGKGMsIEJPT1NUX1BQX0ZPUl8xNzMsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9F
WFBSX0lJRihjLCBvKSgxNzMsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE3
M19DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRf
MikoMTc0LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzE3NCwgQk9PU1RfUFBfVFVQ
TEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDE3NCwgcyksIHAsIG8sIG0pCi0jIGRl
ZmluZSBCT09TVF9QUF9GT1JfMTc0X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0s
IEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxNzUsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9G
T1JfMTc1LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMTc1
LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNzVfQyhjLCBzLCBwLCBvLCBt
KSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE3NiwgcykgQk9PU1Rf
UFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xNzYsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9Q
UF9FWFBSX0lJRihjLCBvKSgxNzYsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
XzE3Nl9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9F
QVRfMikoMTc3LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzE3NywgQk9PU1RfUFBf
VFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDE3NywgcyksIHAsIG8sIG0pCi0j
IGRlZmluZSBCT09TVF9QUF9GT1JfMTc3X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMs
IG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxNzgsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9Q
UF9GT1JfMTc4LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbyko
MTc4LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xNzhfQyhjLCBzLCBwLCBv
LCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE3OSwgcykgQk9P
U1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xNzksIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09T
VF9QUF9FWFBSX0lJRihjLCBvKSgxNzksIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SXzE3OV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBM
RV9FQVRfMikoMTgwLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzE4MCwgQk9PU1Rf
UFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDE4MCwgcyksIHAsIG8sIG0p
Ci0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTgwX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlG
KGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxODEsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09T
VF9QUF9GT1JfMTgxLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywg
bykoMTgxLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xODFfQyhjLCBzLCBw
LCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE4Miwgcykg
Qk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xODIsIEJPT1NUX1BQX1RVUExFX0VBVF80KShC
T09TVF9QUF9FWFBSX0lJRihjLCBvKSgxODIsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SXzE4Ml9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9U
VVBMRV9FQVRfMikoMTgzLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzE4MywgQk9P
U1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDE4MywgcyksIHAsIG8s
IG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTgzX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBf
SUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxODQsIHMpIEJPT1NUX1BQX0lJRihjLCBC
T09TVF9QUF9GT1JfMTg0LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYo
YywgbykoMTg0LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xODRfQyhjLCBz
LCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE4NSwg
cykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xODUsIEJPT1NUX1BQX1RVUExFX0VBVF80
KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxODUsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SXzE4NV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9Q
UF9UVVBMRV9FQVRfMikoMTg2LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzE4Niwg
Qk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDE4NiwgcyksIHAs
IG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTg2X0MoYywgcywgcCwgbywgbSkgQk9PU1Rf
UFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxODcsIHMpIEJPT1NUX1BQX0lJRihj
LCBCT09TVF9QUF9GT1JfMTg3LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9J
SUYoYywgbykoMTg3LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xODdfQyhj
LCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDE4
OCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xODgsIEJPT1NUX1BQX1RVUExFX0VB
VF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxODgsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SXzE4OF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09T
VF9QUF9UVVBMRV9FQVRfMikoMTg5LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzE4
OSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDE4OSwgcyks
IHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTg5X0MoYywgcywgcCwgbywgbSkgQk9P
U1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxOTAsIHMpIEJPT1NUX1BQX0lJ
RihjLCBCT09TVF9QUF9GT1JfMTkwLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQ
Ul9JSUYoYywgbykoMTkwLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8xOTBf
QyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIp
KDE5MSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xOTEsIEJPT1NUX1BQX1RVUExF
X0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxOTEsIHMpLCBwLCBvLCBtKQotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SXzE5MV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBC
T09TVF9QUF9UVVBMRV9FQVRfMikoMTkyLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9S
XzE5MiwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDE5Miwg
cyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTkyX0MoYywgcywgcCwgbywgbSkg
Qk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxOTMsIHMpIEJPT1NUX1BQ
X0lJRihjLCBCT09TVF9QUF9GT1JfMTkzLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBf
RVhQUl9JSUYoYywgbykoMTkzLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8x
OTNfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFU
XzIpKDE5NCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xOTQsIEJPT1NUX1BQX1RV
UExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxOTQsIHMpLCBwLCBvLCBtKQotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SXzE5NF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBt
LCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTk1LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBf
Rk9SXzE5NSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDE5
NSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTk1X0MoYywgcywgcCwgbywg
bSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxOTYsIHMpIEJPT1NU
X1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTk2LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1Rf
UFBfRVhQUl9JSUYoYywgbykoMTk2LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul8xOTZfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVf
RUFUXzIpKDE5NywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8xOTcsIEJPT1NUX1BQ
X1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgxOTcsIHMpLCBwLCBvLCBtKQot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SXzE5N19DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihj
LCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMTk4LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1Rf
UFBfRk9SXzE5OCwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8p
KDE5OCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMTk4X0MoYywgcywgcCwg
bywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgxOTksIHMpIEJP
T1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMTk5LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9P
U1RfUFBfRVhQUl9JSUYoYywgbykoMTk5LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl8xOTlfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQ
TEVfRUFUXzIpKDIwMCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yMDAsIEJPT1NU
X1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyMDAsIHMpLCBwLCBvLCBt
KQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzIwMF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJ
RihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjAxLCBzKSBCT09TVF9QUF9JSUYoYywgQk9P
U1RfUFBfRk9SXzIwMSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMs
IG8pKDIwMSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjAxX0MoYywgcywg
cCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyMDIsIHMp
IEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMjAyLCBCT09TVF9QUF9UVVBMRV9FQVRfNCko
Qk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMjAyLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NU
X1BQX0ZPUl8yMDJfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBf
VFVQTEVfRUFUXzIpKDIwMywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yMDMsIEJP
T1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyMDMsIHMpLCBwLCBv
LCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzIwM19DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQ
X0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjA0LCBzKSBCT09TVF9QUF9JSUYoYywg
Qk9PU1RfUFBfRk9SXzIwNCwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlG
KGMsIG8pKDIwNCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjA0X0MoYywg
cywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyMDUs
IHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMjA1LCBCT09TVF9QUF9UVVBMRV9FQVRf
NCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMjA1LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJP
T1NUX1BQX0ZPUl8yMDVfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1Rf
UFBfVFVQTEVfRUFUXzIpKDIwNiwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yMDYs
IEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyMDYsIHMpLCBw
LCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzIwNl9DKGMsIHMsIHAsIG8sIG0pIEJPT1NU
X1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjA3LCBzKSBCT09TVF9QUF9JSUYo
YywgQk9PU1RfUFBfRk9SXzIwNywgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJf
SUlGKGMsIG8pKDIwNywgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjA3X0Mo
YywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgy
MDgsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMjA4LCBCT09TVF9QUF9UVVBMRV9F
QVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMjA4LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl8yMDhfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9P
U1RfUFBfVFVQTEVfRUFUXzIpKDIwOSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8y
MDksIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyMDksIHMp
LCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzIwOV9DKGMsIHMsIHAsIG8sIG0pIEJP
T1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjEwLCBzKSBCT09TVF9QUF9J
SUYoYywgQk9PU1RfUFBfRk9SXzIxMCwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VY
UFJfSUlGKGMsIG8pKDIxMCwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjEw
X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8y
KSgyMTEsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMjExLCBCT09TVF9QUF9UVVBM
RV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMjExLCBzKSwgcCwgbywgbSkKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl8yMTFfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwg
Qk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIxMiwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZP
Ul8yMTIsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyMTIs
IHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzIxMl9DKGMsIHMsIHAsIG8sIG0p
IEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjEzLCBzKSBCT09TVF9Q
UF9JSUYoYywgQk9PU1RfUFBfRk9SXzIxMywgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQ
X0VYUFJfSUlGKGMsIG8pKDIxMywgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1Jf
MjEzX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VB
VF8yKSgyMTQsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMjE0LCBCT09TVF9QUF9U
VVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMjE0LCBzKSwgcCwgbywgbSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMTRfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywg
bSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIxNSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQ
X0ZPUl8yMTUsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgy
MTUsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzIxNV9DKGMsIHMsIHAsIG8s
IG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjE2LCBzKSBCT09T
VF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzIxNiwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NU
X1BQX0VYUFJfSUlGKGMsIG8pKDIxNiwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9G
T1JfMjE2X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExF
X0VBVF8yKSgyMTcsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMjE3LCBCT09TVF9Q
UF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMjE3LCBzKSwgcCwgbywgbSkK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMTdfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYo
YywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIxOCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NU
X1BQX0ZPUl8yMTgsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBv
KSgyMTgsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzIxOF9DKGMsIHMsIHAs
IG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjE5LCBzKSBC
T09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzIxOSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJP
T1NUX1BQX0VYUFJfSUlGKGMsIG8pKDIxOSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9Q
UF9GT1JfMjE5X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RV
UExFX0VBVF8yKSgyMjAsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMjIwLCBCT09T
VF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMjIwLCBzKSwgcCwgbywg
bSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMjBfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9J
SUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIyMSwgcykgQk9PU1RfUFBfSUlGKGMsIEJP
T1NUX1BQX0ZPUl8yMjEsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihj
LCBvKSgyMjEsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzIyMV9DKGMsIHMs
IHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjIyLCBz
KSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzIyMiwgQk9PU1RfUFBfVFVQTEVfRUFUXzQp
KEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDIyMiwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09T
VF9QUF9GT1JfMjIyX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQ
X1RVUExFX0VBVF8yKSgyMjMsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMjIzLCBC
T09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMjIzLCBzKSwgcCwg
bywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMjNfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9Q
UF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIyNCwgcykgQk9PU1RfUFBfSUlGKGMs
IEJPT1NUX1BQX0ZPUl8yMjQsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJ
RihjLCBvKSgyMjQsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzIyNF9DKGMs
IHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjI1
LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzIyNSwgQk9PU1RfUFBfVFVQTEVfRUFU
XzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDIyNSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBC
T09TVF9QUF9GT1JfMjI1X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NU
X1BQX1RVUExFX0VBVF8yKSgyMjYsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMjI2
LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMjI2LCBzKSwg
cCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMjZfQyhjLCBzLCBwLCBvLCBtKSBCT09T
VF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIyNywgcykgQk9PU1RfUFBfSUlG
KGMsIEJPT1NUX1BQX0ZPUl8yMjcsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBS
X0lJRihjLCBvKSgyMjcsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzIyN19D
KGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMiko
MjI4LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzIyOCwgQk9PU1RfUFBfVFVQTEVf
RUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDIyOCwgcyksIHAsIG8sIG0pCi0jIGRlZmlu
ZSBCT09TVF9QUF9GT1JfMjI4X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJP
T1NUX1BQX1RVUExFX0VBVF8yKSgyMjksIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1Jf
MjI5LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMjI5LCBz
KSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMjlfQyhjLCBzLCBwLCBvLCBtKSBC
T09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIzMCwgcykgQk9PU1RfUFBf
SUlGKGMsIEJPT1NUX1BQX0ZPUl8yMzAsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9F
WFBSX0lJRihjLCBvKSgyMzAsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9SXzIz
MF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9FQVRf
MikoMjMxLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzIzMSwgQk9PU1RfUFBfVFVQ
TEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDIzMSwgcyksIHAsIG8sIG0pCi0jIGRl
ZmluZSBCT09TVF9QUF9GT1JfMjMxX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMsIG0s
IEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyMzIsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9QUF9G
T1JfMjMyLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbykoMjMy
LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMzJfQyhjLCBzLCBwLCBvLCBt
KSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIzMywgcykgQk9PU1Rf
UFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yMzMsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09TVF9Q
UF9FWFBSX0lJRihjLCBvKSgyMzMsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
XzIzM19DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBMRV9F
QVRfMikoMjM0LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzIzNCwgQk9PU1RfUFBf
VFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDIzNCwgcyksIHAsIG8sIG0pCi0j
IGRlZmluZSBCT09TVF9QUF9GT1JfMjM0X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlGKGMs
IG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyMzUsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09TVF9Q
UF9GT1JfMjM1LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywgbyko
MjM1LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMzVfQyhjLCBzLCBwLCBv
LCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIzNiwgcykgQk9P
U1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yMzYsIEJPT1NUX1BQX1RVUExFX0VBVF80KShCT09T
VF9QUF9FWFBSX0lJRihjLCBvKSgyMzYsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SXzIzNl9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9UVVBM
RV9FQVRfMikoMjM3LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzIzNywgQk9PU1Rf
UFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDIzNywgcyksIHAsIG8sIG0p
Ci0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjM3X0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBfSUlG
KGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyMzgsIHMpIEJPT1NUX1BQX0lJRihjLCBCT09T
VF9QUF9GT1JfMjM4LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYoYywg
bykoMjM4LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yMzhfQyhjLCBzLCBw
LCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDIzOSwgcykg
Qk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yMzksIEJPT1NUX1BQX1RVUExFX0VBVF80KShC
T09TVF9QUF9FWFBSX0lJRihjLCBvKSgyMzksIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SXzIzOV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9QUF9U
VVBMRV9FQVRfMikoMjQwLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzI0MCwgQk9P
U1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDI0MCwgcyksIHAsIG8s
IG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjQwX0MoYywgcywgcCwgbywgbSkgQk9PU1RfUFBf
SUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyNDEsIHMpIEJPT1NUX1BQX0lJRihjLCBC
T09TVF9QUF9GT1JfMjQxLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9JSUYo
YywgbykoMjQxLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNDFfQyhjLCBz
LCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDI0Miwg
cykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yNDIsIEJPT1NUX1BQX1RVUExFX0VBVF80
KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyNDIsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SXzI0Ml9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09TVF9Q
UF9UVVBMRV9FQVRfMikoMjQzLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzI0Mywg
Qk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDI0MywgcyksIHAs
IG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjQzX0MoYywgcywgcCwgbywgbSkgQk9PU1Rf
UFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyNDQsIHMpIEJPT1NUX1BQX0lJRihj
LCBCT09TVF9QUF9GT1JfMjQ0LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQUl9J
SUYoYywgbykoMjQ0LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNDRfQyhj
LCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIpKDI0
NSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yNDUsIEJPT1NUX1BQX1RVUExFX0VB
VF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyNDUsIHMpLCBwLCBvLCBtKQotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SXzI0NV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBCT09T
VF9QUF9UVVBMRV9FQVRfMikoMjQ2LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9SXzI0
NiwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDI0Niwgcyks
IHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjQ2X0MoYywgcywgcCwgbywgbSkgQk9P
U1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyNDcsIHMpIEJPT1NUX1BQX0lJ
RihjLCBCT09TVF9QUF9GT1JfMjQ3LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBfRVhQ
Ul9JSUYoYywgbykoMjQ3LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8yNDdf
QyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFUXzIp
KDI0OCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yNDgsIEJPT1NUX1BQX1RVUExF
X0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyNDgsIHMpLCBwLCBvLCBtKQotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SXzI0OF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBtLCBC
T09TVF9QUF9UVVBMRV9FQVRfMikoMjQ5LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBfRk9S
XzI0OSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDI0OSwg
cyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjQ5X0MoYywgcywgcCwgbywgbSkg
Qk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyNTAsIHMpIEJPT1NUX1BQ
X0lJRihjLCBCT09TVF9QUF9GT1JfMjUwLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1RfUFBf
RVhQUl9JSUYoYywgbykoMjUwLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl8y
NTBfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVfRUFU
XzIpKDI1MSwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yNTEsIEJPT1NUX1BQX1RV
UExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyNTEsIHMpLCBwLCBvLCBtKQotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SXzI1MV9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihjLCBt
LCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjUyLCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1RfUFBf
Rk9SXzI1MiwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8pKDI1
MiwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjUyX0MoYywgcywgcCwgbywg
bSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyNTMsIHMpIEJPT1NU
X1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMjUzLCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9PU1Rf
UFBfRVhQUl9JSUYoYywgbykoMjUzLCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul8yNTNfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQTEVf
RUFUXzIpKDI1NCwgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yNTQsIEJPT1NUX1BQ
X1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyNTQsIHMpLCBwLCBvLCBtKQot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SXzI1NF9DKGMsIHMsIHAsIG8sIG0pIEJPT1NUX1BQX0lJRihj
LCBtLCBCT09TVF9QUF9UVVBMRV9FQVRfMikoMjU1LCBzKSBCT09TVF9QUF9JSUYoYywgQk9PU1Rf
UFBfRk9SXzI1NSwgQk9PU1RfUFBfVFVQTEVfRUFUXzQpKEJPT1NUX1BQX0VYUFJfSUlGKGMsIG8p
KDI1NSwgcyksIHAsIG8sIG0pCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjU1X0MoYywgcywgcCwg
bywgbSkgQk9PU1RfUFBfSUlGKGMsIG0sIEJPT1NUX1BQX1RVUExFX0VBVF8yKSgyNTYsIHMpIEJP
T1NUX1BQX0lJRihjLCBCT09TVF9QUF9GT1JfMjU2LCBCT09TVF9QUF9UVVBMRV9FQVRfNCkoQk9P
U1RfUFBfRVhQUl9JSUYoYywgbykoMjU2LCBzKSwgcCwgbywgbSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl8yNTZfQyhjLCBzLCBwLCBvLCBtKSBCT09TVF9QUF9JSUYoYywgbSwgQk9PU1RfUFBfVFVQ
TEVfRUFUXzIpKDI1NywgcykgQk9PU1RfUFBfSUlGKGMsIEJPT1NUX1BQX0ZPUl8yNTcsIEJPT1NU
X1BQX1RVUExFX0VBVF80KShCT09TVF9QUF9FWFBSX0lJRihjLCBvKSgyNTcsIHMpLCBwLCBvLCBt
KQotIwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZW51bV9iaW5hcnlfcGFyYW1zLmhw
cCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nv
ci9yZXBldGl0aW9uL2VudW1fYmluYXJ5X3BhcmFtcy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGEyYzEwNDhlMTgzMDhhMWM1NWIzZTI2ODVhNTA3OTliYmRiM2FlMzUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZW51bV9i
aW5hcnlfcGFyYW1zLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLSMgLyogKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKLSMgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMgICogICAgIChDKSBDb3B5
cmlnaHQgUGF1bCBNZW5zb25pZGVzIDIwMDIuCi0jICAqICAgICBEaXN0cmlidXRlZCB1bmRlciB0
aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSMgICogICAgIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqICAgICBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
Ci0jICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5v
cmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9D
RVNTT1JfUkVQRVRJVElPTl9FTlVNX0JJTkFSWV9QQVJBTVNfSFBQCi0jIGRlZmluZSBCT09TVF9Q
UkVQUk9DRVNTT1JfUkVQRVRJVElPTl9FTlVNX0JJTkFSWV9QQVJBTVNfSFBQCi0jCi0jIGluY2x1
ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9j
ZXNzb3IvY29uZmlnL2NvbmZpZy5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9w
dW5jdHVhdGlvbi9jb21tYV9pZi5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9y
ZXBldGl0aW9uL3JlcGVhdC5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci90dXBs
ZS9lbGVtLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3R1cGxlL3JlbS5ocHA+
Ci0jCi0jIC8qIEJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNUyAqLwotIwotIyBpZiB+Qk9PU1Rf
UFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdfRURHKCkKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNUyhjb3VudCwgcDEsIHAyKSBCT09TVF9QUF9SRVBFQVQo
Y291bnQsIEJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNU19NLCAocDEsIHAyKSkKLSMgZWxzZQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfRU5VTV9CSU5BUllfUEFSQU1TKGNvdW50LCBwMSwgcDIpIEJP
T1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNU19JKGNvdW50LCBwMSwgcDIpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9FTlVNX0JJTkFSWV9QQVJBTVNfSShjb3VudCwgcDEsIHAyKSBCT09TVF9QUF9SRVBF
QVQoY291bnQsIEJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNU19NLCAocDEsIHAyKSkKLSMgZW5k
aWYKLSMKLSMgaWYgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdfU1RS
SUNUKCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNU19NKHosIG4sIHBw
KSBCT09TVF9QUF9FTlVNX0JJTkFSWV9QQVJBTVNfTV9JTSh6LCBuLCBCT09TVF9QUF9UVVBMRV9S
RU1fMiBwcCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNU19NX0lNKHos
IG4sIGltKSBCT09TVF9QUF9FTlVNX0JJTkFSWV9QQVJBTVNfTV9JKHosIG4sIGltKQotIyBlbHNl
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9FTlVNX0JJTkFSWV9QQVJBTVNfTSh6LCBuLCBwcCkgQk9P
U1RfUFBfRU5VTV9CSU5BUllfUEFSQU1TX01fSSh6LCBuLCBCT09TVF9QUF9UVVBMRV9FTEVNKDIs
IDAsIHBwKSwgQk9PU1RfUFBfVFVQTEVfRUxFTSgyLCAxLCBwcCkpCi0jIGVuZGlmCi0jCi0jIGlm
IH5CT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19NU1ZDKCkKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNU19NX0koeiwgbiwgcDEsIHAyKSBCT09T
VF9QUF9FTlVNX0JJTkFSWV9QQVJBTVNfTV9JSSh6LCBuLCBwMSwgcDIpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9FTlVNX0JJTkFSWV9QQVJBTVNfTV9JSSh6LCBuLCBwMSwgcDIpIEJPT1NUX1BQX0NP
TU1BX0lGKG4pIHAxICMjIG4gcDIgIyMgbgotIyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9QUF9F
TlVNX0JJTkFSWV9QQVJBTVNfTV9JKHosIG4sIHAxLCBwMikgQk9PU1RfUFBfQ09NTUFfSUYobikg
Qk9PU1RfUFBfQ0FUKHAxLCBuKSBCT09TVF9QUF9DQVQocDIsIG4pCi0jIGVuZGlmCi0jCi0jIC8q
IEJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNU19aICovCi0jCi0jIGlmIH5CT09TVF9QUF9DT05G
SUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19FREcoKQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
RU5VTV9CSU5BUllfUEFSQU1TX1ooeiwgY291bnQsIHAxLCBwMikgQk9PU1RfUFBfUkVQRUFUXyAj
IyB6KGNvdW50LCBCT09TVF9QUF9FTlVNX0JJTkFSWV9QQVJBTVNfTSwgKHAxLCBwMikpCi0jIGVs
c2UKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNU19aKHosIGNvdW50LCBw
MSwgcDIpIEJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNU19aX0koeiwgY291bnQsIHAxLCBwMikK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNU19aX0koeiwgY291bnQsIHAx
LCBwMikgQk9PU1RfUFBfUkVQRUFUXyAjIyB6KGNvdW50LCBCT09TVF9QUF9FTlVNX0JJTkFSWV9Q
QVJBTVNfTSwgKHAxLCBwMikpCi0jIGVuZGlmCi0jCi0jIGVuZGlmCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvcmVwZXRp
dGlvbi9lbnVtX3BhcmFtcy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9wcmVwcm9jZXNzb3IvcmVwZXRpdGlvbi9lbnVtX3BhcmFtcy5ocHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YTIzNjlkNGE3Y2RiZTY4ODNhZGQwMDFjMWY4ZGY3ZDUx
YmQ4MWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0
aXRpb24vZW51bV9wYXJhbXMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotIyAv
KiBDb3B5cmlnaHQgKEMpIDIwMDEKLSMgICogSG91c2VtYXJxdWUgT3kKLSMgICogaHR0cDovL3d3
dy5ob3VzZW1hcnF1ZS5jb20KLSMgICoKLSMgICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqIGFjY29tcGFueWluZyBm
aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkKLSMgICovCi0jCi0jIC8qIFJldmlzZWQgYnkgUGF1bCBNZW5zb25p
ZGVzICgyMDAyKSAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3Qg
cmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfUkVQRVRJ
VElPTl9FTlVNX1BBUkFNU19IUFAKLSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NPUl9SRVBFVElU
SU9OX0VOVU1fUEFSQU1TX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29u
ZmlnL2NvbmZpZy5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9wdW5jdHVhdGlv
bi9jb21tYV9pZi5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9u
L3JlcGVhdC5ocHA+Ci0jCi0jIC8qIEJPT1NUX1BQX0VOVU1fUEFSQU1TICovCi0jCi0jIGlmIH5C
T09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19FREcoKQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfRU5VTV9QQVJBTVMoY291bnQsIHBhcmFtKSBCT09TVF9QUF9SRVBFQVQoY291
bnQsIEJPT1NUX1BQX0VOVU1fUEFSQU1TX00sIHBhcmFtKQotIyBlbHNlCi0jICAgIGRlZmluZSBC
T09TVF9QUF9FTlVNX1BBUkFNUyhjb3VudCwgcGFyYW0pIEJPT1NUX1BQX0VOVU1fUEFSQU1TX0ko
Y291bnQsIHBhcmFtKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfRU5VTV9QQVJBTVNfSShjb3VudCwg
cGFyYW0pIEJPT1NUX1BQX1JFUEVBVChjb3VudCwgQk9PU1RfUFBfRU5VTV9QQVJBTVNfTSwgcGFy
YW0pCi0jIGVuZGlmCi0jCi0jIGRlZmluZSBCT09TVF9QUF9FTlVNX1BBUkFNU19NKHosIG4sIHBh
cmFtKSBCT09TVF9QUF9DT01NQV9JRihuKSBwYXJhbSAjIyBuCi0jCi0jIC8qIEJPT1NUX1BQX0VO
VU1fUEFSQU1TX1ogKi8KLSMKLSMgaWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1Rf
UFBfQ09ORklHX0VERygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9FTlVNX1BBUkFNU19aKHosIGNv
dW50LCBwYXJhbSkgQk9PU1RfUFBfUkVQRUFUXyAjIyB6KGNvdW50LCBCT09TVF9QUF9FTlVNX1BB
UkFNU19NLCBwYXJhbSkKLSMgZWxzZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfRU5VTV9QQVJBTVNf
Wih6LCBjb3VudCwgcGFyYW0pIEJPT1NUX1BQX0VOVU1fUEFSQU1TX1pfSSh6LCBjb3VudCwgcGFy
YW0pCi0jICAgIGRlZmluZSBCT09TVF9QUF9FTlVNX1BBUkFNU19aX0koeiwgY291bnQsIHBhcmFt
KSBCT09TVF9QUF9SRVBFQVRfICMjIHooY291bnQsIEJPT1NUX1BQX0VOVU1fUEFSQU1TX00sIHBh
cmFtKQotIyBlbmRpZgotIwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZW51bV90cmFp
bGluZ19wYXJhbXMuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZW51bV90cmFpbGluZ19wYXJhbXMuaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzUyMGRiZGVmZjczYTc0ZDA3MzI2MzhmNjdhODU3
MjRjNjViYjkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9y
ZXBldGl0aW9uL2VudW1fdHJhaWxpbmdfcGFyYW1zLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4
ICswLDAgQEAKLSMgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSMgICogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoK
LSMgICogICAgIChDKSBDb3B5cmlnaHQgUGF1bCBNZW5zb25pZGVzIDIwMDIuCi0jICAqICAgICBE
aXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAu
IChTZWUKLSMgICogICAgIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5
IGF0Ci0jICAqICAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAq
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqCi0jICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotIwotIyAvKiBTZWUg
aHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlm
bmRlZiBCT09TVF9QUkVQUk9DRVNTT1JfUkVQRVRJVElPTl9FTlVNX1RSQUlMSU5HX1BBUkFNU19I
UFAKLSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NPUl9SRVBFVElUSU9OX0VOVU1fVFJBSUxJTkdf
UEFSQU1TX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29uZmlnL2NvbmZp
Zy5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL3JlcGVhdC5o
cHA+Ci0jCi0jIC8qIEJPT1NUX1BQX0VOVU1fVFJBSUxJTkdfUEFSQU1TICovCi0jCi0jIGlmIH5C
T09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19FREcoKQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfRU5VTV9UUkFJTElOR19QQVJBTVMoY291bnQsIHBhcmFtKSBCT09TVF9QUF9S
RVBFQVQoY291bnQsIEJPT1NUX1BQX0VOVU1fVFJBSUxJTkdfUEFSQU1TX00sIHBhcmFtKQotIyBl
bHNlCi0jICAgIGRlZmluZSBCT09TVF9QUF9FTlVNX1RSQUlMSU5HX1BBUkFNUyhjb3VudCwgcGFy
YW0pIEJPT1NUX1BQX0VOVU1fVFJBSUxJTkdfUEFSQU1TX0koY291bnQsIHBhcmFtKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfRU5VTV9UUkFJTElOR19QQVJBTVNfSShjb3VudCwgcGFyYW0pIEJPT1NU
X1BQX1JFUEVBVChjb3VudCwgQk9PU1RfUFBfRU5VTV9UUkFJTElOR19QQVJBTVNfTSwgcGFyYW0p
Ci0jIGVuZGlmCi0jCi0jIGRlZmluZSBCT09TVF9QUF9FTlVNX1RSQUlMSU5HX1BBUkFNU19NKHos
IG4sIHBhcmFtKSAsIHBhcmFtICMjIG4KLSMKLSMgLyogQk9PU1RfUFBfRU5VTV9UUkFJTElOR19Q
QVJBTVNfWiAqLwotIwotIyBpZiB+Qk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9D
T05GSUdfRURHKCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX0VOVU1fVFJBSUxJTkdfUEFSQU1TX1oo
eiwgY291bnQsIHBhcmFtKSBCT09TVF9QUF9SRVBFQVRfICMjIHooY291bnQsIEJPT1NUX1BQX0VO
VU1fVFJBSUxJTkdfUEFSQU1TX00sIHBhcmFtKQotIyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9FTlVNX1RSQUlMSU5HX1BBUkFNU19aKHosIGNvdW50LCBwYXJhbSkgQk9PU1RfUFBfRU5VTV9U
UkFJTElOR19QQVJBTVNfWl9JKHosIGNvdW50LCBwYXJhbSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X0VOVU1fVFJBSUxJTkdfUEFSQU1TX1pfSSh6LCBjb3VudCwgcGFyYW0pIEJPT1NUX1BQX1JFUEVB
VF8gIyMgeihjb3VudCwgQk9PU1RfUFBfRU5VTV9UUkFJTElOR19QQVJBTVNfTSwgcGFyYW0pCi0j
IGVuZGlmCi0jCi0jIGVuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvcmVwZXRpdGlvbi9mb3IuaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRp
b24vZm9yLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM4OTQ2YmI1NTVmYWM1
YWM5NmY4NTBkMDExNTJlZWI5M2QzMjA5Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9wcmVwcm9jZXNzb3IvcmVwZXRpdGlvbi9mb3IuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzI0
ICswLDAgQEAKLSMgLyogQ29weXJpZ2h0IChDKSAyMDAxCi0jICAqIEhvdXNlbWFycXVlIE95Ci0j
ICAqIGh0dHA6Ly93d3cuaG91c2VtYXJxdWUuY29tCi0jICAqCi0jICAqIERpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqLwotIwotIyAvKiBSZXZpc2VkIGJ5
IFBhdWwgTWVuc29uaWRlcyAoMjAwMikgKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJP
Q0VTU09SX1JFUEVUSVRJT05fRk9SX0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX1JF
UEVUSVRJT05fRk9SX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY2F0Lmhw
cD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2RlYnVnL2Vycm9yLmhwcD4KLSMgaW5j
bHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2ZhY2lsaXRpZXMvZW1wdHkuaHBwPgotIyBpbmNsdWRl
IDxib29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9ib29sLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3Qv
cHJlcHJvY2Vzc29yL2RldGFpbC9hdXRvX3JlYy5ocHA+Ci0jCi0jIC8qIEJPT1NUX1BQX0ZPUiAq
LwotIwotIyBpZiAwCi0jICAgIGRlZmluZSBCT09TVF9QUF9GT1Ioc3RhdGUsIHByZWQsIG9wLCBt
YWNybykKLSMgZW5kaWYKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUiBCT09TVF9QUF9DQVQoQk9P
U1RfUFBfRk9SXywgQk9PU1RfUFBfQVVUT19SRUMoQk9PU1RfUFBfRk9SX1AsIDI1NikpCi0jCi0j
IGRlZmluZSBCT09TVF9QUF9GT1JfUChuKSBCT09TVF9QUF9DQVQoQk9PU1RfUFBfRk9SX0NIRUNL
XywgQk9PU1RfUFBfRk9SXyAjIyBuKDEsIEJPT1NUX1BQX0ZPUl9TUl9QLCBCT09TVF9QUF9GT1Jf
U1JfTywgQk9PU1RfUFBfRk9SX1NSX00pKQotIwotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX1NSX1Ao
ciwgcykgcwotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX1NSX08ociwgcykgMAotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SX1NSX00ociwgcykgQk9PU1RfUFBfTklMCi0jCi0jIGlmIEJPT1NUX1BQX0NPTkZJ
R19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX0VERygpCi0jICAgIGluY2x1ZGUgPGJvb3N0L3By
ZXByb2Nlc3Nvci9yZXBldGl0aW9uL2RldGFpbC9lZGcvZm9yLmhwcD4KLSMgZWxpZiBCT09TVF9Q
UF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19NU1ZDKCkKLSMgICAgaW5jbHVkZSA8
Ym9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZGV0YWlsL21zdmMvZm9yLmhwcD4KLSMgZWxp
ZiBCT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19ETUMoKQotIyAgICBp
bmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvcmVwZXRpdGlvbi9kZXRhaWwvZG1jL2Zvci5ocHA+
Ci0jIGVsc2UKLSMgICAgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZGV0
YWlsL2Zvci5ocHA+Ci0jIGVuZGlmCi0jCi0jIGlmIEJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYg
Qk9PU1RfUFBfQ09ORklHX0RNQygpCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfMjU3X1BSKHMsIHAp
IEJPT1NUX1BQX0JPT0wocCMjKDI1NywgcykpCi0jIGVsc2UKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul8yNTdfUFIocywgcCkgQk9PU1RfUFBfQk9PTChwKDI1NywgcykpCi0jIGVuZGlmCi0KLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl8yNTdfRVJST1IoKSBCT09TVF9QUF9FUlJPUigweDAwMDIpCi0jIGRl
ZmluZSBCT09TVF9QUF9GT1JfMjU3KHMsIHAsIG8sIG0pIFwKLQlCT09TVF9QUF9JSUYgXAotCQko
IFwKLQkJQk9PU1RfUFBfRk9SXzI1N19QUihzLHApLCBcCi0JCUJPT1NUX1BQX0ZPUl8yNTdfRVJS
T1IsIFwKLQkJQk9PU1RfUFBfRU1QVFkgXAotCQkpIFwKLQkoKSBcCi0vKiovCi0vLyAjIGRlZmlu
ZSBCT09TVF9QUF9GT1JfMjU3KHMsIHAsIG8sIG0pIEJPT1NUX1BQX0VSUk9SKDB4MDAwMikKLSMK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9OSUwgMQotIwotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xKHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfMihzLCBwLCBvLCBtKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzMocywgcCwgbywgbSkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl80KHMsIHAsIG8sIG0pIDAKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfNShzLCBwLCBvLCBtKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzYocywgcCwgbywgbSkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl83KHMsIHAsIG8sIG0pIDAKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfOChzLCBwLCBvLCBtKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzkocywgcCwgbywgbSkgMAot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMChzLCBwLCBvLCBtKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzExKHMsIHAsIG8sIG0p
IDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfMTIocywgcCwgbywg
bSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMyhzLCBwLCBv
LCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzE0KHMsIHAs
IG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfMTUocywg
cCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNihz
LCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzE3
KHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1Jf
MTgocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZP
Ul8xOShzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBf
Rk9SXzIwKHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9Q
UF9GT1JfMjEocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NU
X1BQX0ZPUl8yMihzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9P
U1RfUFBfRk9SXzIzKHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19C
T09TVF9QUF9GT1JfMjQocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNL
X0JPT1NUX1BQX0ZPUl8yNShzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hF
Q0tfQk9PU1RfUFBfRk9SXzI2KHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9D
SEVDS19CT09TVF9QUF9GT1JfMjcocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
X0NIRUNLX0JPT1NUX1BQX0ZPUl8yOChzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9G
T1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzI5KHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfMzAocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8zMShzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzMyKHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfMzMocywgcCwgbywgbSkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8zNChzLCBwLCBvLCBtKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzM1KHMsIHAsIG8sIG0pIDAKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfMzYocywgcCwgbywgbSkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8zNyhzLCBwLCBvLCBtKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzM4KHMsIHAsIG8sIG0pIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfMzkocywgcCwgbywgbSkg
MAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl80MChzLCBwLCBvLCBt
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzQxKHMsIHAsIG8s
IG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfNDIocywgcCwg
bywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl80MyhzLCBw
LCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzQ0KHMs
IHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfNDUo
cywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl80
NihzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9S
XzQ3KHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9G
T1JfNDgocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQ
X0ZPUl80OShzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1Rf
UFBfRk9SXzUwKHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09T
VF9QUF9GT1JfNTEocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JP
T1NUX1BQX0ZPUl81MihzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tf
Qk9PU1RfUFBfRk9SXzUzKHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVD
S19CT09TVF9QUF9GT1JfNTQocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NI
RUNLX0JPT1NUX1BQX0ZPUl81NShzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1Jf
Q0hFQ0tfQk9PU1RfUFBfRk9SXzU2KHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZP
Ul9DSEVDS19CT09TVF9QUF9GT1JfNTcocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl81OChzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzU5KHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NU
X1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfNjAocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl82MShzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBC
T09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzYyKHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5l
IEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfNjMocywgcCwgbywgbSkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl82NChzLCBwLCBvLCBtKSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzY1KHMsIHAsIG8sIG0pIDAKLSMg
ZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfNjYocywgcCwgbywgbSkgMAot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl82NyhzLCBwLCBvLCBtKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzY4KHMsIHAsIG8sIG0p
IDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfNjkocywgcCwgbywg
bSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl83MChzLCBwLCBv
LCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzcxKHMsIHAs
IG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfNzIocywg
cCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl83Myhz
LCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzc0
KHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1Jf
NzUocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZP
Ul83NihzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBf
Rk9SXzc3KHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9Q
UF9GT1JfNzgocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NU
X1BQX0ZPUl83OShzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9P
U1RfUFBfRk9SXzgwKHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19C
T09TVF9QUF9GT1JfODEocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNL
X0JPT1NUX1BQX0ZPUl84MihzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hF
Q0tfQk9PU1RfUFBfRk9SXzgzKHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9D
SEVDS19CT09TVF9QUF9GT1JfODQocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
X0NIRUNLX0JPT1NUX1BQX0ZPUl84NShzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09TVF9QUF9G
T1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzg2KHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQ
X0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfODcocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl84OChzLCBwLCBvLCBtKSAwCi0jIGRlZmluZSBCT09T
VF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzg5KHMsIHAsIG8sIG0pIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfOTAocywgcCwgbywgbSkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl85MShzLCBwLCBvLCBtKSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzkyKHMsIHAsIG8sIG0pIDAKLSMgZGVm
aW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfOTMocywgcCwgbywgbSkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl85NChzLCBwLCBvLCBtKSAwCi0j
IGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzk1KHMsIHAsIG8sIG0pIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfOTYocywgcCwgbywgbSkg
MAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl85NyhzLCBwLCBvLCBt
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9GT1JfQ0hFQ0tfQk9PU1RfUFBfRk9SXzk4KHMsIHAsIG8s
IG0pIDAKLSMgZGVmaW5lIEJPT1NUX1BQX0ZPUl9DSEVDS19CT09TVF9QUF9GT1JfOTkocywgcCwg
bywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMDAocywg
cCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMDEo
cywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8x
MDIocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZP
Ul8xMDMocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQ
X0ZPUl8xMDQocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NU
X1BQX0ZPUl8xMDUocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JP
T1NUX1BQX0ZPUl8xMDYocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNL
X0JPT1NUX1BQX0ZPUl8xMDcocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NI
RUNLX0JPT1NUX1BQX0ZPUl8xMDgocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
X0NIRUNLX0JPT1NUX1BQX0ZPUl8xMDkocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMTAocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMTEocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMTIocywgcCwgbywgbSkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMTMocywgcCwgbywgbSkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMTQocywgcCwgbywgbSkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMTUocywgcCwgbywgbSkgMAot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMTYocywgcCwgbywgbSkg
MAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMTcocywgcCwgbywg
bSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMTgocywgcCwg
bywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMTkocywg
cCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMjAo
cywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8x
MjEocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZP
Ul8xMjIocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQ
X0ZPUl8xMjMocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NU
X1BQX0ZPUl8xMjQocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JP
T1NUX1BQX0ZPUl8xMjUocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNL
X0JPT1NUX1BQX0ZPUl8xMjYocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NI
RUNLX0JPT1NUX1BQX0ZPUl8xMjcocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
X0NIRUNLX0JPT1NUX1BQX0ZPUl8xMjgocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMjkocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMzAocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMzEocywgcCwgbywgbSkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMzIocywgcCwgbywgbSkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMzMocywgcCwgbywgbSkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMzQocywgcCwgbywgbSkgMAot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMzUocywgcCwgbywgbSkg
MAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMzYocywgcCwgbywg
bSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMzcocywgcCwg
bywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMzgocywg
cCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xMzko
cywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8x
NDAocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZP
Ul8xNDEocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQ
X0ZPUl8xNDIocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NU
X1BQX0ZPUl8xNDMocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JP
T1NUX1BQX0ZPUl8xNDQocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNL
X0JPT1NUX1BQX0ZPUl8xNDUocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NI
RUNLX0JPT1NUX1BQX0ZPUl8xNDYocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
X0NIRUNLX0JPT1NUX1BQX0ZPUl8xNDcocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNDgocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNDkocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNTAocywgcCwgbywgbSkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNTEocywgcCwgbywgbSkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNTIocywgcCwgbywgbSkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNTMocywgcCwgbywgbSkgMAot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNTQocywgcCwgbywgbSkg
MAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNTUocywgcCwgbywg
bSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNTYocywgcCwg
bywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNTcocywg
cCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNTgo
cywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8x
NTkocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZP
Ul8xNjAocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQ
X0ZPUl8xNjEocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NU
X1BQX0ZPUl8xNjIocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JP
T1NUX1BQX0ZPUl8xNjMocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNL
X0JPT1NUX1BQX0ZPUl8xNjQocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NI
RUNLX0JPT1NUX1BQX0ZPUl8xNjUocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
X0NIRUNLX0JPT1NUX1BQX0ZPUl8xNjYocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNjcocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNjgocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNjkocywgcCwgbywgbSkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNzAocywgcCwgbywgbSkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNzEocywgcCwgbywgbSkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNzIocywgcCwgbywgbSkgMAot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNzMocywgcCwgbywgbSkg
MAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNzQocywgcCwgbywg
bSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNzUocywgcCwg
bywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNzYocywg
cCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xNzco
cywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8x
NzgocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZP
Ul8xNzkocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQ
X0ZPUl8xODAocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NU
X1BQX0ZPUl8xODEocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JP
T1NUX1BQX0ZPUl8xODIocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNL
X0JPT1NUX1BQX0ZPUl8xODMocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NI
RUNLX0JPT1NUX1BQX0ZPUl8xODQocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
X0NIRUNLX0JPT1NUX1BQX0ZPUl8xODUocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xODYocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xODcocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xODgocywgcCwgbywgbSkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xODkocywgcCwgbywgbSkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xOTAocywgcCwgbywgbSkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xOTEocywgcCwgbywgbSkgMAot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xOTIocywgcCwgbywgbSkg
MAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xOTMocywgcCwgbywg
bSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xOTQocywgcCwg
bywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xOTUocywg
cCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8xOTYo
cywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8x
OTcocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZP
Ul8xOTgocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQ
X0ZPUl8xOTkocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NU
X1BQX0ZPUl8yMDAocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JP
T1NUX1BQX0ZPUl8yMDEocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNL
X0JPT1NUX1BQX0ZPUl8yMDIocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NI
RUNLX0JPT1NUX1BQX0ZPUl8yMDMocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
X0NIRUNLX0JPT1NUX1BQX0ZPUl8yMDQocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMDUocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMDYocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMDcocywgcCwgbywgbSkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMDgocywgcCwgbywgbSkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMDkocywgcCwgbywgbSkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMTAocywgcCwgbywgbSkgMAot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMTEocywgcCwgbywgbSkg
MAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMTIocywgcCwgbywg
bSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMTMocywgcCwg
bywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMTQocywg
cCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMTUo
cywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8y
MTYocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZP
Ul8yMTcocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQ
X0ZPUl8yMTgocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NU
X1BQX0ZPUl8yMTkocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JP
T1NUX1BQX0ZPUl8yMjAocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNL
X0JPT1NUX1BQX0ZPUl8yMjEocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NI
RUNLX0JPT1NUX1BQX0ZPUl8yMjIocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
X0NIRUNLX0JPT1NUX1BQX0ZPUl8yMjMocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMjQocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMjUocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMjYocywgcCwgbywgbSkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMjcocywgcCwgbywgbSkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMjgocywgcCwgbywgbSkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMjkocywgcCwgbywgbSkgMAot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMzAocywgcCwgbywgbSkg
MAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMzEocywgcCwgbywg
bSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMzIocywgcCwg
bywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMzMocywg
cCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yMzQo
cywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8y
MzUocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZP
Ul8yMzYocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQ
X0ZPUl8yMzcocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NU
X1BQX0ZPUl8yMzgocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JP
T1NUX1BQX0ZPUl8yMzkocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNL
X0JPT1NUX1BQX0ZPUl8yNDAocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NI
RUNLX0JPT1NUX1BQX0ZPUl8yNDEocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9S
X0NIRUNLX0JPT1NUX1BQX0ZPUl8yNDIocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBf
Rk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yNDMocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yNDQocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9P
U1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yNDUocywgcCwgbywgbSkgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yNDYocywgcCwgbywgbSkgMAotIyBkZWZp
bmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yNDcocywgcCwgbywgbSkgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yNDgocywgcCwgbywgbSkgMAot
IyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yNDkocywgcCwgbywgbSkg
MAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yNTAocywgcCwgbywg
bSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yNTEocywgcCwg
bywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yNTIocywg
cCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8yNTMo
cywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZPUl8y
NTQocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQX0ZP
Ul8yNTUocywgcCwgbywgbSkgMAotIyBkZWZpbmUgQk9PU1RfUFBfRk9SX0NIRUNLX0JPT1NUX1BQ
X0ZPUl8yNTYocywgcCwgbywgbSkgMAotIwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24v
cmVwZWF0LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3By
ZXByb2Nlc3Nvci9yZXBldGl0aW9uL3JlcGVhdC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAxNzI3MzhlMGM2Nzc0MmIwMWExOWJhNmZiMGFlOGY5ODFkMTlhYzYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vcmVwZWF0Lmhw
cAorKysgL2Rldi9udWxsCkBAIC0xLDgyNSArMCwwIEBACi0jIC8qIENvcHlyaWdodCAoQykgMjAw
MQotIyAgKiBIb3VzZW1hcnF1ZSBPeQotIyAgKiBodHRwOi8vd3d3LmhvdXNlbWFycXVlLmNvbQot
IyAgKgotIyAgKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuIChTZWUKLSMgICogYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0
IG9yIGNvcHkgYXQKLSMgICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQot
IyAgKi8KLSMKLSMgLyogUmV2aXNlZCBieSBQYXVsIE1lbnNvbmlkZXMgKDIwMDIpICovCi0jCi0j
IC8qIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbi4gKi8K
LSMKLSMgaWZuZGVmIEJPT1NUX1BSRVBST0NFU1NPUl9SRVBFVElUSU9OX1JFUEVBVF9IUFAKLSMg
ZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NPUl9SRVBFVElUSU9OX1JFUEVBVF9IUFAKLSMKLSMgaW5j
bHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXBy
b2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29y
L2RlYnVnL2Vycm9yLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2RldGFpbC9h
dXRvX3JlYy5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci90dXBsZS9lYXQuaHBw
PgotIwotIyAvKiBCT09TVF9QUF9SRVBFQVQgKi8KLSMKLSMgaWYgMAotIyAgICBkZWZpbmUgQk9P
U1RfUFBfUkVQRUFUKGNvdW50LCBtYWNybywgZGF0YSkKLSMgZW5kaWYKLSMKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVCBCT09TVF9QUF9DQVQoQk9PU1RfUFBfUkVQRUFUXywgQk9PU1RfUFBfQVVU
T19SRUMoQk9PU1RfUFBfUkVQRUFUX1AsIDQpKQotIwotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFU
X1AobikgQk9PU1RfUFBfQ0FUKEJPT1NUX1BQX1JFUEVBVF9DSEVDS18sIEJPT1NUX1BQX1JFUEVB
VF8gIyMgbigxLCBCT09TVF9QUF9OSUwgQk9PU1RfUFBfVFVQTEVfRUFUXzMsIEJPT1NUX1BQX05J
TCkpCi0jCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfQ0hFQ0tfQk9PU1RfUFBfTklMIDEKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF9DSEVDS19CT09TVF9QUF9SRVBFQVRfMShjLCBtLCBkKSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfQ0hFQ0tfQk9PU1RfUFBfUkVQRUFUXzIoYywgbSwg
ZCkgMAotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUX0NIRUNLX0JPT1NUX1BQX1JFUEVBVF8zKGMs
IG0sIGQpIDAKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xKGMsIG0sIGQpIEJPT1NUX1BQ
X1JFUEVBVF8xX0koYywgbSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yKGMsIG0sIGQp
IEJPT1NUX1BQX1JFUEVBVF8yX0koYywgbSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8z
KGMsIG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zX0koYywgbSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1JFUEVBVF80KGMsIG0sIGQpIEJPT1NUX1BQX0VSUk9SKDB4MDAwMykKLSMKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVF8xX0koYywgbSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfICMjIGMobSwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yX0koYywgbSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJf
ICMjIGMobSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zX0koYywgbSwgZCkgQk9PU1Rf
UFBfUkVQRUFUXzNfICMjIGMobSwgZCkKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xU1Qg
Qk9PU1RfUFBfUkVQRUFUXzEKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yTkQgQk9PU1RfUFBf
UkVQRUFUXzIKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zUkQgQk9PU1RfUFBfUkVQRUFUXzMK
LSMKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzAobSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1JFUEVBVF8xXzEobSwgZCkgbSgyLCAwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFf
MihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xKG0sIGQpIG0oMiwgMSwgZCkKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVF8xXzMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMihtLCBkKSBtKDIsIDIs
IGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV80KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzMobSwgZCkgbSgyLCAzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfNShtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMV80KG0sIGQpIG0oMiwgNCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JF
UEVBVF8xXzYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNShtLCBkKSBtKDIsIDUsIGQpCi0jIGRl
ZmluZSBCT09TVF9QUF9SRVBFQVRfMV83KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzYobSwgZCkg
bSgyLCA2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfOChtLCBkKSBCT09TVF9QUF9S
RVBFQVRfMV83KG0sIGQpIG0oMiwgNywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzko
bSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfOChtLCBkKSBtKDIsIDgsIGQpCi0jIGRlZmluZSBCT09T
VF9QUF9SRVBFQVRfMV8xMChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV85KG0sIGQpIG0oMiwgOSwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzExKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzEwKG0sIGQpIG0oMiwgMTAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xMihtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV8xMShtLCBkKSBtKDIsIDExLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfMTMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTIobSwgZCkgbSgyLCAxMiwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzEzKG0sIGQpIG0oMiwgMTMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xNShtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV8xNChtLCBkKSBtKDIsIDE0LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfMTYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTUobSwgZCkgbSgyLCAxNSwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzE2KG0sIGQpIG0oMiwgMTYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xOChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV8xNyhtLCBkKSBtKDIsIDE3LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfMTkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTgobSwgZCkgbSgyLCAxOCwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzIwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzE5KG0sIGQpIG0oMiwgMTksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yMShtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV8yMChtLCBkKSBtKDIsIDIwLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfMjIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjEobSwgZCkgbSgyLCAyMSwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzIzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzIyKG0sIGQpIG0oMiwgMjIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yNChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV8yMyhtLCBkKSBtKDIsIDIzLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfMjUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjQobSwgZCkgbSgyLCAyNCwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzI2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzI1KG0sIGQpIG0oMiwgMjUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yNyhtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV8yNihtLCBkKSBtKDIsIDI2LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfMjgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjcobSwgZCkgbSgyLCAyNywg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzI5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzI4KG0sIGQpIG0oMiwgMjgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8zMChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV8yOShtLCBkKSBtKDIsIDI5LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfMzEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMzAobSwgZCkgbSgyLCAzMCwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzMyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzMxKG0sIGQpIG0oMiwgMzEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8zMyhtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV8zMihtLCBkKSBtKDIsIDMyLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfMzQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMzMobSwgZCkgbSgyLCAzMywg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzM1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzM0KG0sIGQpIG0oMiwgMzQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8zNihtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV8zNShtLCBkKSBtKDIsIDM1LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfMzcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMzYobSwgZCkgbSgyLCAzNiwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzM4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzM3KG0sIGQpIG0oMiwgMzcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8zOShtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV8zOChtLCBkKSBtKDIsIDM4LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNDAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMzkobSwgZCkgbSgyLCAzOSwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzQxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzQwKG0sIGQpIG0oMiwgNDAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV80MihtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV80MShtLCBkKSBtKDIsIDQxLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNDMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNDIobSwgZCkgbSgyLCA0Miwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzQ0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzQzKG0sIGQpIG0oMiwgNDMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV80NShtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV80NChtLCBkKSBtKDIsIDQ0LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNDYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNDUobSwgZCkgbSgyLCA0NSwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzQ3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzQ2KG0sIGQpIG0oMiwgNDYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV80OChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV80NyhtLCBkKSBtKDIsIDQ3LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNDkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNDgobSwgZCkgbSgyLCA0OCwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzUwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzQ5KG0sIGQpIG0oMiwgNDksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV81MShtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV81MChtLCBkKSBtKDIsIDUwLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNTIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNTEobSwgZCkgbSgyLCA1MSwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzUzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzUyKG0sIGQpIG0oMiwgNTIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV81NChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV81MyhtLCBkKSBtKDIsIDUzLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNTUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNTQobSwgZCkgbSgyLCA1NCwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzU2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzU1KG0sIGQpIG0oMiwgNTUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV81NyhtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV81NihtLCBkKSBtKDIsIDU2LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNTgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNTcobSwgZCkgbSgyLCA1Nywg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzU5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzU4KG0sIGQpIG0oMiwgNTgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV82MChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV81OShtLCBkKSBtKDIsIDU5LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNjEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNjAobSwgZCkgbSgyLCA2MCwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzYyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzYxKG0sIGQpIG0oMiwgNjEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV82MyhtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV82MihtLCBkKSBtKDIsIDYyLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNjQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNjMobSwgZCkgbSgyLCA2Mywg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzY1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzY0KG0sIGQpIG0oMiwgNjQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV82NihtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV82NShtLCBkKSBtKDIsIDY1LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNjcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNjYobSwgZCkgbSgyLCA2Niwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzY4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzY3KG0sIGQpIG0oMiwgNjcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV82OShtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV82OChtLCBkKSBtKDIsIDY4LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNzAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNjkobSwgZCkgbSgyLCA2OSwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzcxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzcwKG0sIGQpIG0oMiwgNzAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV83MihtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV83MShtLCBkKSBtKDIsIDcxLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNzMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNzIobSwgZCkgbSgyLCA3Miwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzc0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzczKG0sIGQpIG0oMiwgNzMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV83NShtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV83NChtLCBkKSBtKDIsIDc0LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNzYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNzUobSwgZCkgbSgyLCA3NSwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzc3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
Xzc2KG0sIGQpIG0oMiwgNzYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV83OChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV83NyhtLCBkKSBtKDIsIDc3LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfNzkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfNzgobSwgZCkgbSgyLCA3OCwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzgwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
Xzc5KG0sIGQpIG0oMiwgNzksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV84MShtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV84MChtLCBkKSBtKDIsIDgwLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfODIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfODEobSwgZCkgbSgyLCA4MSwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzgzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzgyKG0sIGQpIG0oMiwgODIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV84NChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV84MyhtLCBkKSBtKDIsIDgzLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfODUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfODQobSwgZCkgbSgyLCA4NCwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzg2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
Xzg1KG0sIGQpIG0oMiwgODUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV84NyhtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV84NihtLCBkKSBtKDIsIDg2LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfODgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfODcobSwgZCkgbSgyLCA4Nywg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzg5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
Xzg4KG0sIGQpIG0oMiwgODgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV85MChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV84OShtLCBkKSBtKDIsIDg5LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfOTEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfOTAobSwgZCkgbSgyLCA5MCwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzkyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzkxKG0sIGQpIG0oMiwgOTEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV85MyhtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV85MihtLCBkKSBtKDIsIDkyLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfOTQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfOTMobSwgZCkgbSgyLCA5Mywg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzk1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
Xzk0KG0sIGQpIG0oMiwgOTQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV85NihtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV85NShtLCBkKSBtKDIsIDk1LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfOTcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfOTYobSwgZCkgbSgyLCA5Niwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzk4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
Xzk3KG0sIGQpIG0oMiwgOTcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV85OShtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV85OChtLCBkKSBtKDIsIDk4LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfMTAwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzk5KG0sIGQpIG0oMiwgOTks
IGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xMDEobSwgZCkgQk9PU1RfUFBfUkVQRUFU
XzFfMTAwKG0sIGQpIG0oMiwgMTAwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTAy
KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzEwMShtLCBkKSBtKDIsIDEwMSwgZCkKLSMgZGVmaW5l
IEJPT1NUX1BQX1JFUEVBVF8xXzEwMyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xMDIobSwgZCkg
bSgyLCAxMDIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xMDQobSwgZCkgQk9PU1Rf
UFBfUkVQRUFUXzFfMTAzKG0sIGQpIG0oMiwgMTAzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzFfMTA1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzEwNChtLCBkKSBtKDIsIDEwNCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzEwNihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8x
MDUobSwgZCkgbSgyLCAxMDUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xMDcobSwg
ZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTA2KG0sIGQpIG0oMiwgMTA2LCBkKQotIyBkZWZpbmUgQk9P
U1RfUFBfUkVQRUFUXzFfMTA4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzEwNyhtLCBkKSBtKDIs
IDEwNywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzEwOShtLCBkKSBCT09TVF9QUF9S
RVBFQVRfMV8xMDgobSwgZCkgbSgyLCAxMDgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRf
MV8xMTAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTA5KG0sIGQpIG0oMiwgMTA5LCBkKQotIyBk
ZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTExKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzExMCht
LCBkKSBtKDIsIDExMCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzExMihtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMV8xMTEobSwgZCkgbSgyLCAxMTEsIGQpCi0jIGRlZmluZSBCT09TVF9Q
UF9SRVBFQVRfMV8xMTMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTEyKG0sIGQpIG0oMiwgMTEy
LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTE0KG0sIGQpIEJPT1NUX1BQX1JFUEVB
VF8xXzExMyhtLCBkKSBtKDIsIDExMywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzEx
NShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xMTQobSwgZCkgbSgyLCAxMTQsIGQpCi0jIGRlZmlu
ZSBCT09TVF9QUF9SRVBFQVRfMV8xMTYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTE1KG0sIGQp
IG0oMiwgMTE1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTE3KG0sIGQpIEJPT1NU
X1BQX1JFUEVBVF8xXzExNihtLCBkKSBtKDIsIDExNiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JF
UEVBVF8xXzExOChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xMTcobSwgZCkgbSgyLCAxMTcsIGQp
Ci0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xMTkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFf
MTE4KG0sIGQpIG0oMiwgMTE4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTIwKG0s
IGQpIEJPT1NUX1BQX1JFUEVBVF8xXzExOShtLCBkKSBtKDIsIDExOSwgZCkKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVF8xXzEyMShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xMjAobSwgZCkgbSgy
LCAxMjAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xMjIobSwgZCkgQk9PU1RfUFBf
UkVQRUFUXzFfMTIxKG0sIGQpIG0oMiwgMTIxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFU
XzFfMTIzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzEyMihtLCBkKSBtKDIsIDEyMiwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzEyNChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xMjMo
bSwgZCkgbSgyLCAxMjMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xMjUobSwgZCkg
Qk9PU1RfUFBfUkVQRUFUXzFfMTI0KG0sIGQpIG0oMiwgMTI0LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfMTI2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzEyNShtLCBkKSBtKDIsIDEy
NSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzEyNyhtLCBkKSBCT09TVF9QUF9SRVBF
QVRfMV8xMjYobSwgZCkgbSgyLCAxMjYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8x
MjgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTI3KG0sIGQpIG0oMiwgMTI3LCBkKQotIyBkZWZp
bmUgQk9PU1RfUFBfUkVQRUFUXzFfMTI5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzEyOChtLCBk
KSBtKDIsIDEyOCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzEzMChtLCBkKSBCT09T
VF9QUF9SRVBFQVRfMV8xMjkobSwgZCkgbSgyLCAxMjksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9S
RVBFQVRfMV8xMzEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTMwKG0sIGQpIG0oMiwgMTMwLCBk
KQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTMyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzEzMShtLCBkKSBtKDIsIDEzMSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzEzMyht
LCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xMzIobSwgZCkgbSgyLCAxMzIsIGQpCi0jIGRlZmluZSBC
T09TVF9QUF9SRVBFQVRfMV8xMzQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTMzKG0sIGQpIG0o
MiwgMTMzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTM1KG0sIGQpIEJPT1NUX1BQ
X1JFUEVBVF8xXzEzNChtLCBkKSBtKDIsIDEzNCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVB
VF8xXzEzNihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xMzUobSwgZCkgbSgyLCAxMzUsIGQpCi0j
IGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xMzcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTM2
KG0sIGQpIG0oMiwgMTM2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTM4KG0sIGQp
IEJPT1NUX1BQX1JFUEVBVF8xXzEzNyhtLCBkKSBtKDIsIDEzNywgZCkKLSMgZGVmaW5lIEJPT1NU
X1BQX1JFUEVBVF8xXzEzOShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xMzgobSwgZCkgbSgyLCAx
MzgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xNDAobSwgZCkgQk9PU1RfUFBfUkVQ
RUFUXzFfMTM5KG0sIGQpIG0oMiwgMTM5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFf
MTQxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzE0MChtLCBkKSBtKDIsIDE0MCwgZCkKLSMgZGVm
aW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE0MihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xNDEobSwg
ZCkgbSgyLCAxNDEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xNDMobSwgZCkgQk9P
U1RfUFBfUkVQRUFUXzFfMTQyKG0sIGQpIG0oMiwgMTQyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzFfMTQ0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzE0MyhtLCBkKSBtKDIsIDE0Mywg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE0NShtLCBkKSBCT09TVF9QUF9SRVBFQVRf
MV8xNDQobSwgZCkgbSgyLCAxNDQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xNDYo
bSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTQ1KG0sIGQpIG0oMiwgMTQ1LCBkKQotIyBkZWZpbmUg
Qk9PU1RfUFBfUkVQRUFUXzFfMTQ3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzE0NihtLCBkKSBt
KDIsIDE0NiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE0OChtLCBkKSBCT09TVF9Q
UF9SRVBFQVRfMV8xNDcobSwgZCkgbSgyLCAxNDcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBF
QVRfMV8xNDkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTQ4KG0sIGQpIG0oMiwgMTQ4LCBkKQot
IyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTUwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzE0
OShtLCBkKSBtKDIsIDE0OSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE1MShtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV8xNTAobSwgZCkgbSgyLCAxNTAsIGQpCi0jIGRlZmluZSBCT09T
VF9QUF9SRVBFQVRfMV8xNTIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTUxKG0sIGQpIG0oMiwg
MTUxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTUzKG0sIGQpIEJPT1NUX1BQX1JF
UEVBVF8xXzE1MihtLCBkKSBtKDIsIDE1MiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8x
XzE1NChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xNTMobSwgZCkgbSgyLCAxNTMsIGQpCi0jIGRl
ZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xNTUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTU0KG0s
IGQpIG0oMiwgMTU0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTU2KG0sIGQpIEJP
T1NUX1BQX1JFUEVBVF8xXzE1NShtLCBkKSBtKDIsIDE1NSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1JFUEVBVF8xXzE1NyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xNTYobSwgZCkgbSgyLCAxNTYs
IGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xNTgobSwgZCkgQk9PU1RfUFBfUkVQRUFU
XzFfMTU3KG0sIGQpIG0oMiwgMTU3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTU5
KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzE1OChtLCBkKSBtKDIsIDE1OCwgZCkKLSMgZGVmaW5l
IEJPT1NUX1BQX1JFUEVBVF8xXzE2MChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xNTkobSwgZCkg
bSgyLCAxNTksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xNjEobSwgZCkgQk9PU1Rf
UFBfUkVQRUFUXzFfMTYwKG0sIGQpIG0oMiwgMTYwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzFfMTYyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzE2MShtLCBkKSBtKDIsIDE2MSwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE2MyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8x
NjIobSwgZCkgbSgyLCAxNjIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xNjQobSwg
ZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTYzKG0sIGQpIG0oMiwgMTYzLCBkKQotIyBkZWZpbmUgQk9P
U1RfUFBfUkVQRUFUXzFfMTY1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzE2NChtLCBkKSBtKDIs
IDE2NCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE2NihtLCBkKSBCT09TVF9QUF9S
RVBFQVRfMV8xNjUobSwgZCkgbSgyLCAxNjUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRf
MV8xNjcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTY2KG0sIGQpIG0oMiwgMTY2LCBkKQotIyBk
ZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTY4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzE2Nyht
LCBkKSBtKDIsIDE2NywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE2OShtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMV8xNjgobSwgZCkgbSgyLCAxNjgsIGQpCi0jIGRlZmluZSBCT09TVF9Q
UF9SRVBFQVRfMV8xNzAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTY5KG0sIGQpIG0oMiwgMTY5
LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTcxKG0sIGQpIEJPT1NUX1BQX1JFUEVB
VF8xXzE3MChtLCBkKSBtKDIsIDE3MCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE3
MihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xNzEobSwgZCkgbSgyLCAxNzEsIGQpCi0jIGRlZmlu
ZSBCT09TVF9QUF9SRVBFQVRfMV8xNzMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTcyKG0sIGQp
IG0oMiwgMTcyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTc0KG0sIGQpIEJPT1NU
X1BQX1JFUEVBVF8xXzE3MyhtLCBkKSBtKDIsIDE3MywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JF
UEVBVF8xXzE3NShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xNzQobSwgZCkgbSgyLCAxNzQsIGQp
Ci0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xNzYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFf
MTc1KG0sIGQpIG0oMiwgMTc1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTc3KG0s
IGQpIEJPT1NUX1BQX1JFUEVBVF8xXzE3NihtLCBkKSBtKDIsIDE3NiwgZCkKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVF8xXzE3OChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xNzcobSwgZCkgbSgy
LCAxNzcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xNzkobSwgZCkgQk9PU1RfUFBf
UkVQRUFUXzFfMTc4KG0sIGQpIG0oMiwgMTc4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFU
XzFfMTgwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzE3OShtLCBkKSBtKDIsIDE3OSwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE4MShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xODAo
bSwgZCkgbSgyLCAxODAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xODIobSwgZCkg
Qk9PU1RfUFBfUkVQRUFUXzFfMTgxKG0sIGQpIG0oMiwgMTgxLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfMTgzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzE4MihtLCBkKSBtKDIsIDE4
MiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE4NChtLCBkKSBCT09TVF9QUF9SRVBF
QVRfMV8xODMobSwgZCkgbSgyLCAxODMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8x
ODUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTg0KG0sIGQpIG0oMiwgMTg0LCBkKQotIyBkZWZp
bmUgQk9PU1RfUFBfUkVQRUFUXzFfMTg2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzE4NShtLCBk
KSBtKDIsIDE4NSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE4NyhtLCBkKSBCT09T
VF9QUF9SRVBFQVRfMV8xODYobSwgZCkgbSgyLCAxODYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9S
RVBFQVRfMV8xODgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTg3KG0sIGQpIG0oMiwgMTg3LCBk
KQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTg5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzE4OChtLCBkKSBtKDIsIDE4OCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE5MCht
LCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xODkobSwgZCkgbSgyLCAxODksIGQpCi0jIGRlZmluZSBC
T09TVF9QUF9SRVBFQVRfMV8xOTEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTkwKG0sIGQpIG0o
MiwgMTkwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTkyKG0sIGQpIEJPT1NUX1BQ
X1JFUEVBVF8xXzE5MShtLCBkKSBtKDIsIDE5MSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVB
VF8xXzE5MyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xOTIobSwgZCkgbSgyLCAxOTIsIGQpCi0j
IGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xOTQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMTkz
KG0sIGQpIG0oMiwgMTkzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMTk1KG0sIGQp
IEJPT1NUX1BQX1JFUEVBVF8xXzE5NChtLCBkKSBtKDIsIDE5NCwgZCkKLSMgZGVmaW5lIEJPT1NU
X1BQX1JFUEVBVF8xXzE5NihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xOTUobSwgZCkgbSgyLCAx
OTUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8xOTcobSwgZCkgQk9PU1RfUFBfUkVQ
RUFUXzFfMTk2KG0sIGQpIG0oMiwgMTk2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFf
MTk4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzE5NyhtLCBkKSBtKDIsIDE5NywgZCkKLSMgZGVm
aW5lIEJPT1NUX1BQX1JFUEVBVF8xXzE5OShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8xOTgobSwg
ZCkgbSgyLCAxOTgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yMDAobSwgZCkgQk9P
U1RfUFBfUkVQRUFUXzFfMTk5KG0sIGQpIG0oMiwgMTk5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzFfMjAxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzIwMChtLCBkKSBtKDIsIDIwMCwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzIwMihtLCBkKSBCT09TVF9QUF9SRVBFQVRf
MV8yMDEobSwgZCkgbSgyLCAyMDEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yMDMo
bSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjAyKG0sIGQpIG0oMiwgMjAyLCBkKQotIyBkZWZpbmUg
Qk9PU1RfUFBfUkVQRUFUXzFfMjA0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzIwMyhtLCBkKSBt
KDIsIDIwMywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzIwNShtLCBkKSBCT09TVF9Q
UF9SRVBFQVRfMV8yMDQobSwgZCkgbSgyLCAyMDQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBF
QVRfMV8yMDYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjA1KG0sIGQpIG0oMiwgMjA1LCBkKQot
IyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMjA3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzIw
NihtLCBkKSBtKDIsIDIwNiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzIwOChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMV8yMDcobSwgZCkgbSgyLCAyMDcsIGQpCi0jIGRlZmluZSBCT09T
VF9QUF9SRVBFQVRfMV8yMDkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjA4KG0sIGQpIG0oMiwg
MjA4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMjEwKG0sIGQpIEJPT1NUX1BQX1JF
UEVBVF8xXzIwOShtLCBkKSBtKDIsIDIwOSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8x
XzIxMShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8yMTAobSwgZCkgbSgyLCAyMTAsIGQpCi0jIGRl
ZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yMTIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjExKG0s
IGQpIG0oMiwgMjExLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMjEzKG0sIGQpIEJP
T1NUX1BQX1JFUEVBVF8xXzIxMihtLCBkKSBtKDIsIDIxMiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1JFUEVBVF8xXzIxNChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8yMTMobSwgZCkgbSgyLCAyMTMs
IGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yMTUobSwgZCkgQk9PU1RfUFBfUkVQRUFU
XzFfMjE0KG0sIGQpIG0oMiwgMjE0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMjE2
KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzIxNShtLCBkKSBtKDIsIDIxNSwgZCkKLSMgZGVmaW5l
IEJPT1NUX1BQX1JFUEVBVF8xXzIxNyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8yMTYobSwgZCkg
bSgyLCAyMTYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yMTgobSwgZCkgQk9PU1Rf
UFBfUkVQRUFUXzFfMjE3KG0sIGQpIG0oMiwgMjE3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzFfMjE5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzIxOChtLCBkKSBtKDIsIDIxOCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzIyMChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8y
MTkobSwgZCkgbSgyLCAyMTksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yMjEobSwg
ZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjIwKG0sIGQpIG0oMiwgMjIwLCBkKQotIyBkZWZpbmUgQk9P
U1RfUFBfUkVQRUFUXzFfMjIyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzIyMShtLCBkKSBtKDIs
IDIyMSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzIyMyhtLCBkKSBCT09TVF9QUF9S
RVBFQVRfMV8yMjIobSwgZCkgbSgyLCAyMjIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRf
MV8yMjQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjIzKG0sIGQpIG0oMiwgMjIzLCBkKQotIyBk
ZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMjI1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzIyNCht
LCBkKSBtKDIsIDIyNCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzIyNihtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMV8yMjUobSwgZCkgbSgyLCAyMjUsIGQpCi0jIGRlZmluZSBCT09TVF9Q
UF9SRVBFQVRfMV8yMjcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjI2KG0sIGQpIG0oMiwgMjI2
LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMjI4KG0sIGQpIEJPT1NUX1BQX1JFUEVB
VF8xXzIyNyhtLCBkKSBtKDIsIDIyNywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzIy
OShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8yMjgobSwgZCkgbSgyLCAyMjgsIGQpCi0jIGRlZmlu
ZSBCT09TVF9QUF9SRVBFQVRfMV8yMzAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjI5KG0sIGQp
IG0oMiwgMjI5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMjMxKG0sIGQpIEJPT1NU
X1BQX1JFUEVBVF8xXzIzMChtLCBkKSBtKDIsIDIzMCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JF
UEVBVF8xXzIzMihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8yMzEobSwgZCkgbSgyLCAyMzEsIGQp
Ci0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yMzMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFf
MjMyKG0sIGQpIG0oMiwgMjMyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMjM0KG0s
IGQpIEJPT1NUX1BQX1JFUEVBVF8xXzIzMyhtLCBkKSBtKDIsIDIzMywgZCkKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVF8xXzIzNShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8yMzQobSwgZCkgbSgy
LCAyMzQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yMzYobSwgZCkgQk9PU1RfUFBf
UkVQRUFUXzFfMjM1KG0sIGQpIG0oMiwgMjM1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFU
XzFfMjM3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzIzNihtLCBkKSBtKDIsIDIzNiwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzIzOChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8yMzco
bSwgZCkgbSgyLCAyMzcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yMzkobSwgZCkg
Qk9PU1RfUFBfUkVQRUFUXzFfMjM4KG0sIGQpIG0oMiwgMjM4LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzFfMjQwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzIzOShtLCBkKSBtKDIsIDIz
OSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzI0MShtLCBkKSBCT09TVF9QUF9SRVBF
QVRfMV8yNDAobSwgZCkgbSgyLCAyNDAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8y
NDIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjQxKG0sIGQpIG0oMiwgMjQxLCBkKQotIyBkZWZp
bmUgQk9PU1RfUFBfUkVQRUFUXzFfMjQzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzI0MihtLCBk
KSBtKDIsIDI0MiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzI0NChtLCBkKSBCT09T
VF9QUF9SRVBFQVRfMV8yNDMobSwgZCkgbSgyLCAyNDMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9S
RVBFQVRfMV8yNDUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjQ0KG0sIGQpIG0oMiwgMjQ0LCBk
KQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMjQ2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8x
XzI0NShtLCBkKSBtKDIsIDI0NSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8xXzI0Nyht
LCBkKSBCT09TVF9QUF9SRVBFQVRfMV8yNDYobSwgZCkgbSgyLCAyNDYsIGQpCi0jIGRlZmluZSBC
T09TVF9QUF9SRVBFQVRfMV8yNDgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjQ3KG0sIGQpIG0o
MiwgMjQ3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMjQ5KG0sIGQpIEJPT1NUX1BQ
X1JFUEVBVF8xXzI0OChtLCBkKSBtKDIsIDI0OCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVB
VF8xXzI1MChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8yNDkobSwgZCkgbSgyLCAyNDksIGQpCi0j
IGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yNTEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzFfMjUw
KG0sIGQpIG0oMiwgMjUwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFfMjUyKG0sIGQp
IEJPT1NUX1BQX1JFUEVBVF8xXzI1MShtLCBkKSBtKDIsIDI1MSwgZCkKLSMgZGVmaW5lIEJPT1NU
X1BQX1JFUEVBVF8xXzI1MyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8yNTIobSwgZCkgbSgyLCAy
NTIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMV8yNTQobSwgZCkgQk9PU1RfUFBfUkVQ
RUFUXzFfMjUzKG0sIGQpIG0oMiwgMjUzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzFf
MjU1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8xXzI1NChtLCBkKSBtKDIsIDI1NCwgZCkKLSMgZGVm
aW5lIEJPT1NUX1BQX1JFUEVBVF8xXzI1NihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMV8yNTUobSwg
ZCkgbSgyLCAyNTUsIGQpCi0jCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8wKG0sIGQpCi0j
IGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xKG0sIGQpIG0oMywgMCwgZCkKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVF8yXzIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMShtLCBkKSBtKDMsIDEs
IGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8zKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8y
XzIobSwgZCkgbSgzLCAyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfNChtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8zKG0sIGQpIG0oMywgMywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JF
UEVBVF8yXzUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNChtLCBkKSBtKDMsIDQsIGQpCi0jIGRl
ZmluZSBCT09TVF9QUF9SRVBFQVRfMl82KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzUobSwgZCkg
bSgzLCA1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfNyhtLCBkKSBCT09TVF9QUF9S
RVBFQVRfMl82KG0sIGQpIG0oMywgNiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzgo
bSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNyhtLCBkKSBtKDMsIDcsIGQpCi0jIGRlZmluZSBCT09T
VF9QUF9SRVBFQVRfMl85KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzgobSwgZCkgbSgzLCA4LCBk
KQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJf
OShtLCBkKSBtKDMsIDksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xMShtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8xMChtLCBkKSBtKDMsIDEwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfMTIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTEobSwgZCkgbSgzLCAxMSwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzEzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzEy
KG0sIGQpIG0oMywgMTIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xNChtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8xMyhtLCBkKSBtKDMsIDEzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfMTUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTQobSwgZCkgbSgzLCAxNCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE1
KG0sIGQpIG0oMywgMTUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xNyhtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8xNihtLCBkKSBtKDMsIDE2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfMTgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTcobSwgZCkgbSgzLCAxNywgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE4
KG0sIGQpIG0oMywgMTgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yMChtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8xOShtLCBkKSBtKDMsIDE5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfMjEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjAobSwgZCkgbSgzLCAyMCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzIyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzIx
KG0sIGQpIG0oMywgMjEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yMyhtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8yMihtLCBkKSBtKDMsIDIyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfMjQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjMobSwgZCkgbSgzLCAyMywgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzI1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzI0
KG0sIGQpIG0oMywgMjQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yNihtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8yNShtLCBkKSBtKDMsIDI1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfMjcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjYobSwgZCkgbSgzLCAyNiwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzI4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzI3
KG0sIGQpIG0oMywgMjcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yOShtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8yOChtLCBkKSBtKDMsIDI4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfMzAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjkobSwgZCkgbSgzLCAyOSwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzMxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzMw
KG0sIGQpIG0oMywgMzAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8zMihtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8zMShtLCBkKSBtKDMsIDMxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfMzMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMzIobSwgZCkgbSgzLCAzMiwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzM0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzMz
KG0sIGQpIG0oMywgMzMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8zNShtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8zNChtLCBkKSBtKDMsIDM0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfMzYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMzUobSwgZCkgbSgzLCAzNSwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzM3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzM2
KG0sIGQpIG0oMywgMzYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8zOChtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8zNyhtLCBkKSBtKDMsIDM3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfMzkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMzgobSwgZCkgbSgzLCAzOCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzQwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzM5
KG0sIGQpIG0oMywgMzksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl80MShtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl80MChtLCBkKSBtKDMsIDQwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfNDIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNDEobSwgZCkgbSgzLCA0MSwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzQzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzQy
KG0sIGQpIG0oMywgNDIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl80NChtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl80MyhtLCBkKSBtKDMsIDQzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfNDUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNDQobSwgZCkgbSgzLCA0NCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzQ2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzQ1
KG0sIGQpIG0oMywgNDUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl80NyhtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl80NihtLCBkKSBtKDMsIDQ2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfNDgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNDcobSwgZCkgbSgzLCA0NywgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzQ5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzQ4
KG0sIGQpIG0oMywgNDgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl81MChtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl80OShtLCBkKSBtKDMsIDQ5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfNTEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNTAobSwgZCkgbSgzLCA1MCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzUyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzUx
KG0sIGQpIG0oMywgNTEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl81MyhtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl81MihtLCBkKSBtKDMsIDUyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfNTQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNTMobSwgZCkgbSgzLCA1MywgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzU1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzU0
KG0sIGQpIG0oMywgNTQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl81NihtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl81NShtLCBkKSBtKDMsIDU1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfNTcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNTYobSwgZCkgbSgzLCA1NiwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzU4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzU3
KG0sIGQpIG0oMywgNTcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl81OShtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl81OChtLCBkKSBtKDMsIDU4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfNjAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNTkobSwgZCkgbSgzLCA1OSwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzYxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzYw
KG0sIGQpIG0oMywgNjAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl82MihtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl82MShtLCBkKSBtKDMsIDYxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfNjMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNjIobSwgZCkgbSgzLCA2MiwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzY0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzYz
KG0sIGQpIG0oMywgNjMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl82NShtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl82NChtLCBkKSBtKDMsIDY0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfNjYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNjUobSwgZCkgbSgzLCA2NSwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzY3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzY2
KG0sIGQpIG0oMywgNjYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl82OChtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl82NyhtLCBkKSBtKDMsIDY3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfNjkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNjgobSwgZCkgbSgzLCA2OCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzcwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzY5
KG0sIGQpIG0oMywgNjksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl83MShtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl83MChtLCBkKSBtKDMsIDcwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfNzIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNzEobSwgZCkgbSgzLCA3MSwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzczKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzcy
KG0sIGQpIG0oMywgNzIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl83NChtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl83MyhtLCBkKSBtKDMsIDczLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfNzUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNzQobSwgZCkgbSgzLCA3NCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzc2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzc1
KG0sIGQpIG0oMywgNzUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl83NyhtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl83NihtLCBkKSBtKDMsIDc2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfNzgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfNzcobSwgZCkgbSgzLCA3NywgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzc5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzc4
KG0sIGQpIG0oMywgNzgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl84MChtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl83OShtLCBkKSBtKDMsIDc5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfODEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfODAobSwgZCkgbSgzLCA4MCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzgyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzgx
KG0sIGQpIG0oMywgODEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl84MyhtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl84MihtLCBkKSBtKDMsIDgyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfODQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfODMobSwgZCkgbSgzLCA4MywgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzg1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzg0
KG0sIGQpIG0oMywgODQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl84NihtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl84NShtLCBkKSBtKDMsIDg1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfODcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfODYobSwgZCkgbSgzLCA4NiwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzg4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzg3
KG0sIGQpIG0oMywgODcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl84OShtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl84OChtLCBkKSBtKDMsIDg4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfOTAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfODkobSwgZCkgbSgzLCA4OSwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzkxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzkw
KG0sIGQpIG0oMywgOTAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl85MihtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl85MShtLCBkKSBtKDMsIDkxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfOTMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfOTIobSwgZCkgbSgzLCA5MiwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzk0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzkz
KG0sIGQpIG0oMywgOTMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl85NShtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl85NChtLCBkKSBtKDMsIDk0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfOTYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfOTUobSwgZCkgbSgzLCA5NSwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzk3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzk2
KG0sIGQpIG0oMywgOTYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl85OChtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl85NyhtLCBkKSBtKDMsIDk3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfOTkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfOTgobSwgZCkgbSgzLCA5OCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzEwMChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl85
OShtLCBkKSBtKDMsIDk5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTAxKG0sIGQp
IEJPT1NUX1BQX1JFUEVBVF8yXzEwMChtLCBkKSBtKDMsIDEwMCwgZCkKLSMgZGVmaW5lIEJPT1NU
X1BQX1JFUEVBVF8yXzEwMihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xMDEobSwgZCkgbSgzLCAx
MDEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xMDMobSwgZCkgQk9PU1RfUFBfUkVQ
RUFUXzJfMTAyKG0sIGQpIG0oMywgMTAyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJf
MTA0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzEwMyhtLCBkKSBtKDMsIDEwMywgZCkKLSMgZGVm
aW5lIEJPT1NUX1BQX1JFUEVBVF8yXzEwNShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xMDQobSwg
ZCkgbSgzLCAxMDQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xMDYobSwgZCkgQk9P
U1RfUFBfUkVQRUFUXzJfMTA1KG0sIGQpIG0oMywgMTA1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfMTA3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzEwNihtLCBkKSBtKDMsIDEwNiwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzEwOChtLCBkKSBCT09TVF9QUF9SRVBFQVRf
Ml8xMDcobSwgZCkgbSgzLCAxMDcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xMDko
bSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTA4KG0sIGQpIG0oMywgMTA4LCBkKQotIyBkZWZpbmUg
Qk9PU1RfUFBfUkVQRUFUXzJfMTEwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzEwOShtLCBkKSBt
KDMsIDEwOSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzExMShtLCBkKSBCT09TVF9Q
UF9SRVBFQVRfMl8xMTAobSwgZCkgbSgzLCAxMTAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBF
QVRfMl8xMTIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTExKG0sIGQpIG0oMywgMTExLCBkKQot
IyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTEzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzEx
MihtLCBkKSBtKDMsIDExMiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzExNChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMl8xMTMobSwgZCkgbSgzLCAxMTMsIGQpCi0jIGRlZmluZSBCT09T
VF9QUF9SRVBFQVRfMl8xMTUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTE0KG0sIGQpIG0oMywg
MTE0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTE2KG0sIGQpIEJPT1NUX1BQX1JF
UEVBVF8yXzExNShtLCBkKSBtKDMsIDExNSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8y
XzExNyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xMTYobSwgZCkgbSgzLCAxMTYsIGQpCi0jIGRl
ZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xMTgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTE3KG0s
IGQpIG0oMywgMTE3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTE5KG0sIGQpIEJP
T1NUX1BQX1JFUEVBVF8yXzExOChtLCBkKSBtKDMsIDExOCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1JFUEVBVF8yXzEyMChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xMTkobSwgZCkgbSgzLCAxMTks
IGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xMjEobSwgZCkgQk9PU1RfUFBfUkVQRUFU
XzJfMTIwKG0sIGQpIG0oMywgMTIwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTIy
KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzEyMShtLCBkKSBtKDMsIDEyMSwgZCkKLSMgZGVmaW5l
IEJPT1NUX1BQX1JFUEVBVF8yXzEyMyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xMjIobSwgZCkg
bSgzLCAxMjIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xMjQobSwgZCkgQk9PU1Rf
UFBfUkVQRUFUXzJfMTIzKG0sIGQpIG0oMywgMTIzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzJfMTI1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzEyNChtLCBkKSBtKDMsIDEyNCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzEyNihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8x
MjUobSwgZCkgbSgzLCAxMjUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xMjcobSwg
ZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTI2KG0sIGQpIG0oMywgMTI2LCBkKQotIyBkZWZpbmUgQk9P
U1RfUFBfUkVQRUFUXzJfMTI4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzEyNyhtLCBkKSBtKDMs
IDEyNywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzEyOShtLCBkKSBCT09TVF9QUF9S
RVBFQVRfMl8xMjgobSwgZCkgbSgzLCAxMjgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRf
Ml8xMzAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTI5KG0sIGQpIG0oMywgMTI5LCBkKQotIyBk
ZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTMxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzEzMCht
LCBkKSBtKDMsIDEzMCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzEzMihtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8xMzEobSwgZCkgbSgzLCAxMzEsIGQpCi0jIGRlZmluZSBCT09TVF9Q
UF9SRVBFQVRfMl8xMzMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTMyKG0sIGQpIG0oMywgMTMy
LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTM0KG0sIGQpIEJPT1NUX1BQX1JFUEVB
VF8yXzEzMyhtLCBkKSBtKDMsIDEzMywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzEz
NShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xMzQobSwgZCkgbSgzLCAxMzQsIGQpCi0jIGRlZmlu
ZSBCT09TVF9QUF9SRVBFQVRfMl8xMzYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTM1KG0sIGQp
IG0oMywgMTM1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTM3KG0sIGQpIEJPT1NU
X1BQX1JFUEVBVF8yXzEzNihtLCBkKSBtKDMsIDEzNiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JF
UEVBVF8yXzEzOChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xMzcobSwgZCkgbSgzLCAxMzcsIGQp
Ci0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xMzkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJf
MTM4KG0sIGQpIG0oMywgMTM4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTQwKG0s
IGQpIEJPT1NUX1BQX1JFUEVBVF8yXzEzOShtLCBkKSBtKDMsIDEzOSwgZCkKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVF8yXzE0MShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xNDAobSwgZCkgbSgz
LCAxNDAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xNDIobSwgZCkgQk9PU1RfUFBf
UkVQRUFUXzJfMTQxKG0sIGQpIG0oMywgMTQxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFU
XzJfMTQzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE0MihtLCBkKSBtKDMsIDE0MiwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE0NChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xNDMo
bSwgZCkgbSgzLCAxNDMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xNDUobSwgZCkg
Qk9PU1RfUFBfUkVQRUFUXzJfMTQ0KG0sIGQpIG0oMywgMTQ0LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzJfMTQ2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE0NShtLCBkKSBtKDMsIDE0
NSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE0NyhtLCBkKSBCT09TVF9QUF9SRVBF
QVRfMl8xNDYobSwgZCkgbSgzLCAxNDYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8x
NDgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTQ3KG0sIGQpIG0oMywgMTQ3LCBkKQotIyBkZWZp
bmUgQk9PU1RfUFBfUkVQRUFUXzJfMTQ5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE0OChtLCBk
KSBtKDMsIDE0OCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE1MChtLCBkKSBCT09T
VF9QUF9SRVBFQVRfMl8xNDkobSwgZCkgbSgzLCAxNDksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9S
RVBFQVRfMl8xNTEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTUwKG0sIGQpIG0oMywgMTUwLCBk
KQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTUyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8y
XzE1MShtLCBkKSBtKDMsIDE1MSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE1Myht
LCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xNTIobSwgZCkgbSgzLCAxNTIsIGQpCi0jIGRlZmluZSBC
T09TVF9QUF9SRVBFQVRfMl8xNTQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTUzKG0sIGQpIG0o
MywgMTUzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTU1KG0sIGQpIEJPT1NUX1BQ
X1JFUEVBVF8yXzE1NChtLCBkKSBtKDMsIDE1NCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVB
VF8yXzE1NihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xNTUobSwgZCkgbSgzLCAxNTUsIGQpCi0j
IGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xNTcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTU2
KG0sIGQpIG0oMywgMTU2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTU4KG0sIGQp
IEJPT1NUX1BQX1JFUEVBVF8yXzE1NyhtLCBkKSBtKDMsIDE1NywgZCkKLSMgZGVmaW5lIEJPT1NU
X1BQX1JFUEVBVF8yXzE1OShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xNTgobSwgZCkgbSgzLCAx
NTgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xNjAobSwgZCkgQk9PU1RfUFBfUkVQ
RUFUXzJfMTU5KG0sIGQpIG0oMywgMTU5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJf
MTYxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE2MChtLCBkKSBtKDMsIDE2MCwgZCkKLSMgZGVm
aW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE2MihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xNjEobSwg
ZCkgbSgzLCAxNjEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xNjMobSwgZCkgQk9P
U1RfUFBfUkVQRUFUXzJfMTYyKG0sIGQpIG0oMywgMTYyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfMTY0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE2MyhtLCBkKSBtKDMsIDE2Mywg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE2NShtLCBkKSBCT09TVF9QUF9SRVBFQVRf
Ml8xNjQobSwgZCkgbSgzLCAxNjQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xNjYo
bSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTY1KG0sIGQpIG0oMywgMTY1LCBkKQotIyBkZWZpbmUg
Qk9PU1RfUFBfUkVQRUFUXzJfMTY3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE2NihtLCBkKSBt
KDMsIDE2NiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE2OChtLCBkKSBCT09TVF9Q
UF9SRVBFQVRfMl8xNjcobSwgZCkgbSgzLCAxNjcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBF
QVRfMl8xNjkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTY4KG0sIGQpIG0oMywgMTY4LCBkKQot
IyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTcwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE2
OShtLCBkKSBtKDMsIDE2OSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE3MShtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMl8xNzAobSwgZCkgbSgzLCAxNzAsIGQpCi0jIGRlZmluZSBCT09T
VF9QUF9SRVBFQVRfMl8xNzIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTcxKG0sIGQpIG0oMywg
MTcxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTczKG0sIGQpIEJPT1NUX1BQX1JF
UEVBVF8yXzE3MihtLCBkKSBtKDMsIDE3MiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8y
XzE3NChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xNzMobSwgZCkgbSgzLCAxNzMsIGQpCi0jIGRl
ZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xNzUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTc0KG0s
IGQpIG0oMywgMTc0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTc2KG0sIGQpIEJP
T1NUX1BQX1JFUEVBVF8yXzE3NShtLCBkKSBtKDMsIDE3NSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1JFUEVBVF8yXzE3NyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xNzYobSwgZCkgbSgzLCAxNzYs
IGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xNzgobSwgZCkgQk9PU1RfUFBfUkVQRUFU
XzJfMTc3KG0sIGQpIG0oMywgMTc3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTc5
KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE3OChtLCBkKSBtKDMsIDE3OCwgZCkKLSMgZGVmaW5l
IEJPT1NUX1BQX1JFUEVBVF8yXzE4MChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xNzkobSwgZCkg
bSgzLCAxNzksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xODEobSwgZCkgQk9PU1Rf
UFBfUkVQRUFUXzJfMTgwKG0sIGQpIG0oMywgMTgwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzJfMTgyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE4MShtLCBkKSBtKDMsIDE4MSwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE4MyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8x
ODIobSwgZCkgbSgzLCAxODIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xODQobSwg
ZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTgzKG0sIGQpIG0oMywgMTgzLCBkKQotIyBkZWZpbmUgQk9P
U1RfUFBfUkVQRUFUXzJfMTg1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE4NChtLCBkKSBtKDMs
IDE4NCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE4NihtLCBkKSBCT09TVF9QUF9S
RVBFQVRfMl8xODUobSwgZCkgbSgzLCAxODUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRf
Ml8xODcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTg2KG0sIGQpIG0oMywgMTg2LCBkKQotIyBk
ZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTg4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE4Nyht
LCBkKSBtKDMsIDE4NywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE4OShtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8xODgobSwgZCkgbSgzLCAxODgsIGQpCi0jIGRlZmluZSBCT09TVF9Q
UF9SRVBFQVRfMl8xOTAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTg5KG0sIGQpIG0oMywgMTg5
LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTkxKG0sIGQpIEJPT1NUX1BQX1JFUEVB
VF8yXzE5MChtLCBkKSBtKDMsIDE5MCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzE5
MihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xOTEobSwgZCkgbSgzLCAxOTEsIGQpCi0jIGRlZmlu
ZSBCT09TVF9QUF9SRVBFQVRfMl8xOTMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMTkyKG0sIGQp
IG0oMywgMTkyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTk0KG0sIGQpIEJPT1NU
X1BQX1JFUEVBVF8yXzE5MyhtLCBkKSBtKDMsIDE5MywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JF
UEVBVF8yXzE5NShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xOTQobSwgZCkgbSgzLCAxOTQsIGQp
Ci0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xOTYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJf
MTk1KG0sIGQpIG0oMywgMTk1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMTk3KG0s
IGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE5NihtLCBkKSBtKDMsIDE5NiwgZCkKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVF8yXzE5OChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8xOTcobSwgZCkgbSgz
LCAxOTcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8xOTkobSwgZCkgQk9PU1RfUFBf
UkVQRUFUXzJfMTk4KG0sIGQpIG0oMywgMTk4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFU
XzJfMjAwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzE5OShtLCBkKSBtKDMsIDE5OSwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzIwMShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8yMDAo
bSwgZCkgbSgzLCAyMDAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yMDIobSwgZCkg
Qk9PU1RfUFBfUkVQRUFUXzJfMjAxKG0sIGQpIG0oMywgMjAxLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzJfMjAzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzIwMihtLCBkKSBtKDMsIDIw
MiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzIwNChtLCBkKSBCT09TVF9QUF9SRVBF
QVRfMl8yMDMobSwgZCkgbSgzLCAyMDMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8y
MDUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjA0KG0sIGQpIG0oMywgMjA0LCBkKQotIyBkZWZp
bmUgQk9PU1RfUFBfUkVQRUFUXzJfMjA2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzIwNShtLCBk
KSBtKDMsIDIwNSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzIwNyhtLCBkKSBCT09T
VF9QUF9SRVBFQVRfMl8yMDYobSwgZCkgbSgzLCAyMDYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9S
RVBFQVRfMl8yMDgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjA3KG0sIGQpIG0oMywgMjA3LCBk
KQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMjA5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8y
XzIwOChtLCBkKSBtKDMsIDIwOCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzIxMCht
LCBkKSBCT09TVF9QUF9SRVBFQVRfMl8yMDkobSwgZCkgbSgzLCAyMDksIGQpCi0jIGRlZmluZSBC
T09TVF9QUF9SRVBFQVRfMl8yMTEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjEwKG0sIGQpIG0o
MywgMjEwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMjEyKG0sIGQpIEJPT1NUX1BQ
X1JFUEVBVF8yXzIxMShtLCBkKSBtKDMsIDIxMSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVB
VF8yXzIxMyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8yMTIobSwgZCkgbSgzLCAyMTIsIGQpCi0j
IGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yMTQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjEz
KG0sIGQpIG0oMywgMjEzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMjE1KG0sIGQp
IEJPT1NUX1BQX1JFUEVBVF8yXzIxNChtLCBkKSBtKDMsIDIxNCwgZCkKLSMgZGVmaW5lIEJPT1NU
X1BQX1JFUEVBVF8yXzIxNihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8yMTUobSwgZCkgbSgzLCAy
MTUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yMTcobSwgZCkgQk9PU1RfUFBfUkVQ
RUFUXzJfMjE2KG0sIGQpIG0oMywgMjE2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJf
MjE4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzIxNyhtLCBkKSBtKDMsIDIxNywgZCkKLSMgZGVm
aW5lIEJPT1NUX1BQX1JFUEVBVF8yXzIxOShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8yMTgobSwg
ZCkgbSgzLCAyMTgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yMjAobSwgZCkgQk9P
U1RfUFBfUkVQRUFUXzJfMjE5KG0sIGQpIG0oMywgMjE5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzJfMjIxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzIyMChtLCBkKSBtKDMsIDIyMCwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzIyMihtLCBkKSBCT09TVF9QUF9SRVBFQVRf
Ml8yMjEobSwgZCkgbSgzLCAyMjEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yMjMo
bSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjIyKG0sIGQpIG0oMywgMjIyLCBkKQotIyBkZWZpbmUg
Qk9PU1RfUFBfUkVQRUFUXzJfMjI0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzIyMyhtLCBkKSBt
KDMsIDIyMywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzIyNShtLCBkKSBCT09TVF9Q
UF9SRVBFQVRfMl8yMjQobSwgZCkgbSgzLCAyMjQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBF
QVRfMl8yMjYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjI1KG0sIGQpIG0oMywgMjI1LCBkKQot
IyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMjI3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzIy
NihtLCBkKSBtKDMsIDIyNiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzIyOChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfMl8yMjcobSwgZCkgbSgzLCAyMjcsIGQpCi0jIGRlZmluZSBCT09T
VF9QUF9SRVBFQVRfMl8yMjkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjI4KG0sIGQpIG0oMywg
MjI4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMjMwKG0sIGQpIEJPT1NUX1BQX1JF
UEVBVF8yXzIyOShtLCBkKSBtKDMsIDIyOSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8y
XzIzMShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8yMzAobSwgZCkgbSgzLCAyMzAsIGQpCi0jIGRl
ZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yMzIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjMxKG0s
IGQpIG0oMywgMjMxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMjMzKG0sIGQpIEJP
T1NUX1BQX1JFUEVBVF8yXzIzMihtLCBkKSBtKDMsIDIzMiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1JFUEVBVF8yXzIzNChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8yMzMobSwgZCkgbSgzLCAyMzMs
IGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yMzUobSwgZCkgQk9PU1RfUFBfUkVQRUFU
XzJfMjM0KG0sIGQpIG0oMywgMjM0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMjM2
KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzIzNShtLCBkKSBtKDMsIDIzNSwgZCkKLSMgZGVmaW5l
IEJPT1NUX1BQX1JFUEVBVF8yXzIzNyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8yMzYobSwgZCkg
bSgzLCAyMzYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yMzgobSwgZCkgQk9PU1Rf
UFBfUkVQRUFUXzJfMjM3KG0sIGQpIG0oMywgMjM3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzJfMjM5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzIzOChtLCBkKSBtKDMsIDIzOCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzI0MChtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8y
MzkobSwgZCkgbSgzLCAyMzksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yNDEobSwg
ZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjQwKG0sIGQpIG0oMywgMjQwLCBkKQotIyBkZWZpbmUgQk9P
U1RfUFBfUkVQRUFUXzJfMjQyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzI0MShtLCBkKSBtKDMs
IDI0MSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzI0MyhtLCBkKSBCT09TVF9QUF9S
RVBFQVRfMl8yNDIobSwgZCkgbSgzLCAyNDIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRf
Ml8yNDQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjQzKG0sIGQpIG0oMywgMjQzLCBkKQotIyBk
ZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMjQ1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8yXzI0NCht
LCBkKSBtKDMsIDI0NCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzI0NihtLCBkKSBC
T09TVF9QUF9SRVBFQVRfMl8yNDUobSwgZCkgbSgzLCAyNDUsIGQpCi0jIGRlZmluZSBCT09TVF9Q
UF9SRVBFQVRfMl8yNDcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjQ2KG0sIGQpIG0oMywgMjQ2
LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMjQ4KG0sIGQpIEJPT1NUX1BQX1JFUEVB
VF8yXzI0NyhtLCBkKSBtKDMsIDI0NywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8yXzI0
OShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8yNDgobSwgZCkgbSgzLCAyNDgsIGQpCi0jIGRlZmlu
ZSBCT09TVF9QUF9SRVBFQVRfMl8yNTAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJfMjQ5KG0sIGQp
IG0oMywgMjQ5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMjUxKG0sIGQpIEJPT1NU
X1BQX1JFUEVBVF8yXzI1MChtLCBkKSBtKDMsIDI1MCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JF
UEVBVF8yXzI1MihtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8yNTEobSwgZCkgbSgzLCAyNTEsIGQp
Ci0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yNTMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzJf
MjUyKG0sIGQpIG0oMywgMjUyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzJfMjU0KG0s
IGQpIEJPT1NUX1BQX1JFUEVBVF8yXzI1MyhtLCBkKSBtKDMsIDI1MywgZCkKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVF8yXzI1NShtLCBkKSBCT09TVF9QUF9SRVBFQVRfMl8yNTQobSwgZCkgbSgz
LCAyNTQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfMl8yNTYobSwgZCkgQk9PU1RfUFBf
UkVQRUFUXzJfMjU1KG0sIGQpIG0oMywgMjU1LCBkKQotIwotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfMChtLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMShtLCBkKSBtKDQsIDAs
IGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8z
XzEobSwgZCkgbSg0LCAxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMyhtLCBkKSBC
T09TVF9QUF9SRVBFQVRfM18yKG0sIGQpIG0oNCwgMiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JF
UEVBVF8zXzQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMyhtLCBkKSBtKDQsIDMsIGQpCi0jIGRl
ZmluZSBCT09TVF9QUF9SRVBFQVRfM181KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzQobSwgZCkg
bSg0LCA0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfNihtLCBkKSBCT09TVF9QUF9S
RVBFQVRfM181KG0sIGQpIG0oNCwgNSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzco
bSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNihtLCBkKSBtKDQsIDYsIGQpCi0jIGRlZmluZSBCT09T
VF9QUF9SRVBFQVRfM184KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzcobSwgZCkgbSg0LCA3LCBk
KQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfOShtLCBkKSBCT09TVF9QUF9SRVBFQVRfM184
KG0sIGQpIG0oNCwgOCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzEwKG0sIGQpIEJP
T1NUX1BQX1JFUEVBVF8zXzkobSwgZCkgbSg0LCA5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfMTEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTAobSwgZCkgbSg0LCAxMCwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzEyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzExKG0s
IGQpIG0oNCwgMTEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xMyhtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM18xMihtLCBkKSBtKDQsIDEyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfMTQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTMobSwgZCkgbSg0LCAxMywgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE0KG0s
IGQpIG0oNCwgMTQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xNihtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM18xNShtLCBkKSBtKDQsIDE1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfMTcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTYobSwgZCkgbSg0LCAxNiwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE3KG0s
IGQpIG0oNCwgMTcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xOShtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM18xOChtLCBkKSBtKDQsIDE4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfMjAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTkobSwgZCkgbSg0LCAxOSwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzIxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzIwKG0s
IGQpIG0oNCwgMjAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yMihtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM18yMShtLCBkKSBtKDQsIDIxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfMjMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjIobSwgZCkgbSg0LCAyMiwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzI0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzIzKG0s
IGQpIG0oNCwgMjMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yNShtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM18yNChtLCBkKSBtKDQsIDI0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfMjYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjUobSwgZCkgbSg0LCAyNSwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzI3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzI2KG0s
IGQpIG0oNCwgMjYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yOChtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM18yNyhtLCBkKSBtKDQsIDI3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfMjkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjgobSwgZCkgbSg0LCAyOCwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzMwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzI5KG0s
IGQpIG0oNCwgMjksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18zMShtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM18zMChtLCBkKSBtKDQsIDMwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfMzIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMzEobSwgZCkgbSg0LCAzMSwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzMzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzMyKG0s
IGQpIG0oNCwgMzIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18zNChtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM18zMyhtLCBkKSBtKDQsIDMzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfMzUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMzQobSwgZCkgbSg0LCAzNCwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzM2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzM1KG0s
IGQpIG0oNCwgMzUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18zNyhtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM18zNihtLCBkKSBtKDQsIDM2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfMzgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMzcobSwgZCkgbSg0LCAzNywgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzM5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzM4KG0s
IGQpIG0oNCwgMzgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM180MChtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM18zOShtLCBkKSBtKDQsIDM5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfNDEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNDAobSwgZCkgbSg0LCA0MCwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzQyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzQxKG0s
IGQpIG0oNCwgNDEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM180MyhtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM180MihtLCBkKSBtKDQsIDQyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfNDQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNDMobSwgZCkgbSg0LCA0MywgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzQ1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzQ0KG0s
IGQpIG0oNCwgNDQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM180NihtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM180NShtLCBkKSBtKDQsIDQ1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfNDcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNDYobSwgZCkgbSg0LCA0NiwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzQ4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzQ3KG0s
IGQpIG0oNCwgNDcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM180OShtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM180OChtLCBkKSBtKDQsIDQ4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfNTAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNDkobSwgZCkgbSg0LCA0OSwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzUxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzUwKG0s
IGQpIG0oNCwgNTAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM181MihtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM181MShtLCBkKSBtKDQsIDUxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfNTMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNTIobSwgZCkgbSg0LCA1MiwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzU0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzUzKG0s
IGQpIG0oNCwgNTMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM181NShtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM181NChtLCBkKSBtKDQsIDU0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfNTYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNTUobSwgZCkgbSg0LCA1NSwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzU3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzU2KG0s
IGQpIG0oNCwgNTYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM181OChtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM181NyhtLCBkKSBtKDQsIDU3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfNTkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNTgobSwgZCkgbSg0LCA1OCwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzYwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzU5KG0s
IGQpIG0oNCwgNTksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM182MShtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM182MChtLCBkKSBtKDQsIDYwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfNjIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNjEobSwgZCkgbSg0LCA2MSwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzYzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzYyKG0s
IGQpIG0oNCwgNjIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM182NChtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM182MyhtLCBkKSBtKDQsIDYzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfNjUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNjQobSwgZCkgbSg0LCA2NCwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzY2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzY1KG0s
IGQpIG0oNCwgNjUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM182NyhtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM182NihtLCBkKSBtKDQsIDY2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfNjgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNjcobSwgZCkgbSg0LCA2NywgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzY5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzY4KG0s
IGQpIG0oNCwgNjgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM183MChtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM182OShtLCBkKSBtKDQsIDY5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfNzEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNzAobSwgZCkgbSg0LCA3MCwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzcyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzcxKG0s
IGQpIG0oNCwgNzEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM183MyhtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM183MihtLCBkKSBtKDQsIDcyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfNzQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNzMobSwgZCkgbSg0LCA3MywgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzc1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzc0KG0s
IGQpIG0oNCwgNzQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM183NihtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM183NShtLCBkKSBtKDQsIDc1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfNzcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNzYobSwgZCkgbSg0LCA3NiwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzc4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzc3KG0s
IGQpIG0oNCwgNzcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM183OShtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM183OChtLCBkKSBtKDQsIDc4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfODAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfNzkobSwgZCkgbSg0LCA3OSwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzgxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzgwKG0s
IGQpIG0oNCwgODAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM184MihtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM184MShtLCBkKSBtKDQsIDgxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfODMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfODIobSwgZCkgbSg0LCA4MiwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzg0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzgzKG0s
IGQpIG0oNCwgODMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM184NShtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM184NChtLCBkKSBtKDQsIDg0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfODYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfODUobSwgZCkgbSg0LCA4NSwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzg3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzg2KG0s
IGQpIG0oNCwgODYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM184OChtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM184NyhtLCBkKSBtKDQsIDg3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfODkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfODgobSwgZCkgbSg0LCA4OCwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzkwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzg5KG0s
IGQpIG0oNCwgODksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM185MShtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM185MChtLCBkKSBtKDQsIDkwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfOTIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfOTEobSwgZCkgbSg0LCA5MSwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzkzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzkyKG0s
IGQpIG0oNCwgOTIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM185NChtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM185MyhtLCBkKSBtKDQsIDkzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfOTUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfOTQobSwgZCkgbSg0LCA5NCwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzk2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzk1KG0s
IGQpIG0oNCwgOTUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM185NyhtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM185NihtLCBkKSBtKDQsIDk2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfOTgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfOTcobSwgZCkgbSg0LCA5NywgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzk5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzk4KG0s
IGQpIG0oNCwgOTgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xMDAobSwgZCkgQk9P
U1RfUFBfUkVQRUFUXzNfOTkobSwgZCkgbSg0LCA5OSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JF
UEVBVF8zXzEwMShtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xMDAobSwgZCkgbSg0LCAxMDAsIGQp
Ci0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xMDIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNf
MTAxKG0sIGQpIG0oNCwgMTAxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTAzKG0s
IGQpIEJPT1NUX1BQX1JFUEVBVF8zXzEwMihtLCBkKSBtKDQsIDEwMiwgZCkKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVF8zXzEwNChtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xMDMobSwgZCkgbSg0
LCAxMDMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xMDUobSwgZCkgQk9PU1RfUFBf
UkVQRUFUXzNfMTA0KG0sIGQpIG0oNCwgMTA0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFU
XzNfMTA2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzEwNShtLCBkKSBtKDQsIDEwNSwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzEwNyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xMDYo
bSwgZCkgbSg0LCAxMDYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xMDgobSwgZCkg
Qk9PU1RfUFBfUkVQRUFUXzNfMTA3KG0sIGQpIG0oNCwgMTA3LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzNfMTA5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzEwOChtLCBkKSBtKDQsIDEw
OCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzExMChtLCBkKSBCT09TVF9QUF9SRVBF
QVRfM18xMDkobSwgZCkgbSg0LCAxMDksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18x
MTEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTEwKG0sIGQpIG0oNCwgMTEwLCBkKQotIyBkZWZp
bmUgQk9PU1RfUFBfUkVQRUFUXzNfMTEyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzExMShtLCBk
KSBtKDQsIDExMSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzExMyhtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM18xMTIobSwgZCkgbSg0LCAxMTIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9S
RVBFQVRfM18xMTQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTEzKG0sIGQpIG0oNCwgMTEzLCBk
KQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTE1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8z
XzExNChtLCBkKSBtKDQsIDExNCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzExNiht
LCBkKSBCT09TVF9QUF9SRVBFQVRfM18xMTUobSwgZCkgbSg0LCAxMTUsIGQpCi0jIGRlZmluZSBC
T09TVF9QUF9SRVBFQVRfM18xMTcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTE2KG0sIGQpIG0o
NCwgMTE2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTE4KG0sIGQpIEJPT1NUX1BQ
X1JFUEVBVF8zXzExNyhtLCBkKSBtKDQsIDExNywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVB
VF8zXzExOShtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xMTgobSwgZCkgbSg0LCAxMTgsIGQpCi0j
IGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xMjAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTE5
KG0sIGQpIG0oNCwgMTE5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTIxKG0sIGQp
IEJPT1NUX1BQX1JFUEVBVF8zXzEyMChtLCBkKSBtKDQsIDEyMCwgZCkKLSMgZGVmaW5lIEJPT1NU
X1BQX1JFUEVBVF8zXzEyMihtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xMjEobSwgZCkgbSg0LCAx
MjEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xMjMobSwgZCkgQk9PU1RfUFBfUkVQ
RUFUXzNfMTIyKG0sIGQpIG0oNCwgMTIyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNf
MTI0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzEyMyhtLCBkKSBtKDQsIDEyMywgZCkKLSMgZGVm
aW5lIEJPT1NUX1BQX1JFUEVBVF8zXzEyNShtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xMjQobSwg
ZCkgbSg0LCAxMjQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xMjYobSwgZCkgQk9P
U1RfUFBfUkVQRUFUXzNfMTI1KG0sIGQpIG0oNCwgMTI1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzNfMTI3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzEyNihtLCBkKSBtKDQsIDEyNiwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzEyOChtLCBkKSBCT09TVF9QUF9SRVBFQVRf
M18xMjcobSwgZCkgbSg0LCAxMjcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xMjko
bSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTI4KG0sIGQpIG0oNCwgMTI4LCBkKQotIyBkZWZpbmUg
Qk9PU1RfUFBfUkVQRUFUXzNfMTMwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzEyOShtLCBkKSBt
KDQsIDEyOSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzEzMShtLCBkKSBCT09TVF9Q
UF9SRVBFQVRfM18xMzAobSwgZCkgbSg0LCAxMzAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBF
QVRfM18xMzIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTMxKG0sIGQpIG0oNCwgMTMxLCBkKQot
IyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTMzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzEz
MihtLCBkKSBtKDQsIDEzMiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzEzNChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfM18xMzMobSwgZCkgbSg0LCAxMzMsIGQpCi0jIGRlZmluZSBCT09T
VF9QUF9SRVBFQVRfM18xMzUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTM0KG0sIGQpIG0oNCwg
MTM0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTM2KG0sIGQpIEJPT1NUX1BQX1JF
UEVBVF8zXzEzNShtLCBkKSBtKDQsIDEzNSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8z
XzEzNyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xMzYobSwgZCkgbSg0LCAxMzYsIGQpCi0jIGRl
ZmluZSBCT09TVF9QUF9SRVBFQVRfM18xMzgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTM3KG0s
IGQpIG0oNCwgMTM3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTM5KG0sIGQpIEJP
T1NUX1BQX1JFUEVBVF8zXzEzOChtLCBkKSBtKDQsIDEzOCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1JFUEVBVF8zXzE0MChtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xMzkobSwgZCkgbSg0LCAxMzks
IGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xNDEobSwgZCkgQk9PU1RfUFBfUkVQRUFU
XzNfMTQwKG0sIGQpIG0oNCwgMTQwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTQy
KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE0MShtLCBkKSBtKDQsIDE0MSwgZCkKLSMgZGVmaW5l
IEJPT1NUX1BQX1JFUEVBVF8zXzE0MyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xNDIobSwgZCkg
bSg0LCAxNDIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xNDQobSwgZCkgQk9PU1Rf
UFBfUkVQRUFUXzNfMTQzKG0sIGQpIG0oNCwgMTQzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfMTQ1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE0NChtLCBkKSBtKDQsIDE0NCwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE0NihtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18x
NDUobSwgZCkgbSg0LCAxNDUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xNDcobSwg
ZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTQ2KG0sIGQpIG0oNCwgMTQ2LCBkKQotIyBkZWZpbmUgQk9P
U1RfUFBfUkVQRUFUXzNfMTQ4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE0NyhtLCBkKSBtKDQs
IDE0NywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE0OShtLCBkKSBCT09TVF9QUF9S
RVBFQVRfM18xNDgobSwgZCkgbSg0LCAxNDgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRf
M18xNTAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTQ5KG0sIGQpIG0oNCwgMTQ5LCBkKQotIyBk
ZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTUxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE1MCht
LCBkKSBtKDQsIDE1MCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE1MihtLCBkKSBC
T09TVF9QUF9SRVBFQVRfM18xNTEobSwgZCkgbSg0LCAxNTEsIGQpCi0jIGRlZmluZSBCT09TVF9Q
UF9SRVBFQVRfM18xNTMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTUyKG0sIGQpIG0oNCwgMTUy
LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTU0KG0sIGQpIEJPT1NUX1BQX1JFUEVB
VF8zXzE1MyhtLCBkKSBtKDQsIDE1MywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE1
NShtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xNTQobSwgZCkgbSg0LCAxNTQsIGQpCi0jIGRlZmlu
ZSBCT09TVF9QUF9SRVBFQVRfM18xNTYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTU1KG0sIGQp
IG0oNCwgMTU1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTU3KG0sIGQpIEJPT1NU
X1BQX1JFUEVBVF8zXzE1NihtLCBkKSBtKDQsIDE1NiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JF
UEVBVF8zXzE1OChtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xNTcobSwgZCkgbSg0LCAxNTcsIGQp
Ci0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xNTkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNf
MTU4KG0sIGQpIG0oNCwgMTU4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTYwKG0s
IGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE1OShtLCBkKSBtKDQsIDE1OSwgZCkKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVF8zXzE2MShtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xNjAobSwgZCkgbSg0
LCAxNjAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xNjIobSwgZCkgQk9PU1RfUFBf
UkVQRUFUXzNfMTYxKG0sIGQpIG0oNCwgMTYxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFU
XzNfMTYzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE2MihtLCBkKSBtKDQsIDE2MiwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE2NChtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xNjMo
bSwgZCkgbSg0LCAxNjMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xNjUobSwgZCkg
Qk9PU1RfUFBfUkVQRUFUXzNfMTY0KG0sIGQpIG0oNCwgMTY0LCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzNfMTY2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE2NShtLCBkKSBtKDQsIDE2
NSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE2NyhtLCBkKSBCT09TVF9QUF9SRVBF
QVRfM18xNjYobSwgZCkgbSg0LCAxNjYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18x
NjgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTY3KG0sIGQpIG0oNCwgMTY3LCBkKQotIyBkZWZp
bmUgQk9PU1RfUFBfUkVQRUFUXzNfMTY5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE2OChtLCBk
KSBtKDQsIDE2OCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE3MChtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM18xNjkobSwgZCkgbSg0LCAxNjksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9S
RVBFQVRfM18xNzEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTcwKG0sIGQpIG0oNCwgMTcwLCBk
KQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTcyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8z
XzE3MShtLCBkKSBtKDQsIDE3MSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE3Myht
LCBkKSBCT09TVF9QUF9SRVBFQVRfM18xNzIobSwgZCkgbSg0LCAxNzIsIGQpCi0jIGRlZmluZSBC
T09TVF9QUF9SRVBFQVRfM18xNzQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTczKG0sIGQpIG0o
NCwgMTczLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTc1KG0sIGQpIEJPT1NUX1BQ
X1JFUEVBVF8zXzE3NChtLCBkKSBtKDQsIDE3NCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVB
VF8zXzE3NihtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xNzUobSwgZCkgbSg0LCAxNzUsIGQpCi0j
IGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xNzcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTc2
KG0sIGQpIG0oNCwgMTc2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTc4KG0sIGQp
IEJPT1NUX1BQX1JFUEVBVF8zXzE3NyhtLCBkKSBtKDQsIDE3NywgZCkKLSMgZGVmaW5lIEJPT1NU
X1BQX1JFUEVBVF8zXzE3OShtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xNzgobSwgZCkgbSg0LCAx
NzgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xODAobSwgZCkgQk9PU1RfUFBfUkVQ
RUFUXzNfMTc5KG0sIGQpIG0oNCwgMTc5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNf
MTgxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE4MChtLCBkKSBtKDQsIDE4MCwgZCkKLSMgZGVm
aW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE4MihtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xODEobSwg
ZCkgbSg0LCAxODEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xODMobSwgZCkgQk9P
U1RfUFBfUkVQRUFUXzNfMTgyKG0sIGQpIG0oNCwgMTgyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzNfMTg0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE4MyhtLCBkKSBtKDQsIDE4Mywg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE4NShtLCBkKSBCT09TVF9QUF9SRVBFQVRf
M18xODQobSwgZCkgbSg0LCAxODQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xODYo
bSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTg1KG0sIGQpIG0oNCwgMTg1LCBkKQotIyBkZWZpbmUg
Qk9PU1RfUFBfUkVQRUFUXzNfMTg3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE4NihtLCBkKSBt
KDQsIDE4NiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE4OChtLCBkKSBCT09TVF9Q
UF9SRVBFQVRfM18xODcobSwgZCkgbSg0LCAxODcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBF
QVRfM18xODkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTg4KG0sIGQpIG0oNCwgMTg4LCBkKQot
IyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTkwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE4
OShtLCBkKSBtKDQsIDE4OSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzE5MShtLCBk
KSBCT09TVF9QUF9SRVBFQVRfM18xOTAobSwgZCkgbSg0LCAxOTAsIGQpCi0jIGRlZmluZSBCT09T
VF9QUF9SRVBFQVRfM18xOTIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTkxKG0sIGQpIG0oNCwg
MTkxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTkzKG0sIGQpIEJPT1NUX1BQX1JF
UEVBVF8zXzE5MihtLCBkKSBtKDQsIDE5MiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8z
XzE5NChtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xOTMobSwgZCkgbSg0LCAxOTMsIGQpCi0jIGRl
ZmluZSBCT09TVF9QUF9SRVBFQVRfM18xOTUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMTk0KG0s
IGQpIG0oNCwgMTk0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTk2KG0sIGQpIEJP
T1NUX1BQX1JFUEVBVF8zXzE5NShtLCBkKSBtKDQsIDE5NSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1JFUEVBVF8zXzE5NyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xOTYobSwgZCkgbSg0LCAxOTYs
IGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18xOTgobSwgZCkgQk9PU1RfUFBfUkVQRUFU
XzNfMTk3KG0sIGQpIG0oNCwgMTk3LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMTk5
KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzE5OChtLCBkKSBtKDQsIDE5OCwgZCkKLSMgZGVmaW5l
IEJPT1NUX1BQX1JFUEVBVF8zXzIwMChtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18xOTkobSwgZCkg
bSg0LCAxOTksIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yMDEobSwgZCkgQk9PU1Rf
UFBfUkVQRUFUXzNfMjAwKG0sIGQpIG0oNCwgMjAwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQ
RUFUXzNfMjAyKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzIwMShtLCBkKSBtKDQsIDIwMSwgZCkK
LSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzIwMyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18y
MDIobSwgZCkgbSg0LCAyMDIsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yMDQobSwg
ZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjAzKG0sIGQpIG0oNCwgMjAzLCBkKQotIyBkZWZpbmUgQk9P
U1RfUFBfUkVQRUFUXzNfMjA1KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzIwNChtLCBkKSBtKDQs
IDIwNCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzIwNihtLCBkKSBCT09TVF9QUF9S
RVBFQVRfM18yMDUobSwgZCkgbSg0LCAyMDUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRf
M18yMDcobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjA2KG0sIGQpIG0oNCwgMjA2LCBkKQotIyBk
ZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMjA4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzIwNyht
LCBkKSBtKDQsIDIwNywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzIwOShtLCBkKSBC
T09TVF9QUF9SRVBFQVRfM18yMDgobSwgZCkgbSg0LCAyMDgsIGQpCi0jIGRlZmluZSBCT09TVF9Q
UF9SRVBFQVRfM18yMTAobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjA5KG0sIGQpIG0oNCwgMjA5
LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMjExKG0sIGQpIEJPT1NUX1BQX1JFUEVB
VF8zXzIxMChtLCBkKSBtKDQsIDIxMCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzIx
MihtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18yMTEobSwgZCkgbSg0LCAyMTEsIGQpCi0jIGRlZmlu
ZSBCT09TVF9QUF9SRVBFQVRfM18yMTMobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjEyKG0sIGQp
IG0oNCwgMjEyLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMjE0KG0sIGQpIEJPT1NU
X1BQX1JFUEVBVF8zXzIxMyhtLCBkKSBtKDQsIDIxMywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JF
UEVBVF8zXzIxNShtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18yMTQobSwgZCkgbSg0LCAyMTQsIGQp
Ci0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yMTYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNf
MjE1KG0sIGQpIG0oNCwgMjE1LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMjE3KG0s
IGQpIEJPT1NUX1BQX1JFUEVBVF8zXzIxNihtLCBkKSBtKDQsIDIxNiwgZCkKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVF8zXzIxOChtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18yMTcobSwgZCkgbSg0
LCAyMTcsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yMTkobSwgZCkgQk9PU1RfUFBf
UkVQRUFUXzNfMjE4KG0sIGQpIG0oNCwgMjE4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFU
XzNfMjIwKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzIxOShtLCBkKSBtKDQsIDIxOSwgZCkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzIyMShtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18yMjAo
bSwgZCkgbSg0LCAyMjAsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yMjIobSwgZCkg
Qk9PU1RfUFBfUkVQRUFUXzNfMjIxKG0sIGQpIG0oNCwgMjIxLCBkKQotIyBkZWZpbmUgQk9PU1Rf
UFBfUkVQRUFUXzNfMjIzKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzIyMihtLCBkKSBtKDQsIDIy
MiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzIyNChtLCBkKSBCT09TVF9QUF9SRVBF
QVRfM18yMjMobSwgZCkgbSg0LCAyMjMsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18y
MjUobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjI0KG0sIGQpIG0oNCwgMjI0LCBkKQotIyBkZWZp
bmUgQk9PU1RfUFBfUkVQRUFUXzNfMjI2KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzIyNShtLCBk
KSBtKDQsIDIyNSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzIyNyhtLCBkKSBCT09T
VF9QUF9SRVBFQVRfM18yMjYobSwgZCkgbSg0LCAyMjYsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9S
RVBFQVRfM18yMjgobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjI3KG0sIGQpIG0oNCwgMjI3LCBk
KQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMjI5KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8z
XzIyOChtLCBkKSBtKDQsIDIyOCwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzIzMCht
LCBkKSBCT09TVF9QUF9SRVBFQVRfM18yMjkobSwgZCkgbSg0LCAyMjksIGQpCi0jIGRlZmluZSBC
T09TVF9QUF9SRVBFQVRfM18yMzEobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjMwKG0sIGQpIG0o
NCwgMjMwLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMjMyKG0sIGQpIEJPT1NUX1BQ
X1JFUEVBVF8zXzIzMShtLCBkKSBtKDQsIDIzMSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVB
VF8zXzIzMyhtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18yMzIobSwgZCkgbSg0LCAyMzIsIGQpCi0j
IGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yMzQobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjMz
KG0sIGQpIG0oNCwgMjMzLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMjM1KG0sIGQp
IEJPT1NUX1BQX1JFUEVBVF8zXzIzNChtLCBkKSBtKDQsIDIzNCwgZCkKLSMgZGVmaW5lIEJPT1NU
X1BQX1JFUEVBVF8zXzIzNihtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18yMzUobSwgZCkgbSg0LCAy
MzUsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yMzcobSwgZCkgQk9PU1RfUFBfUkVQ
RUFUXzNfMjM2KG0sIGQpIG0oNCwgMjM2LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNf
MjM4KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzIzNyhtLCBkKSBtKDQsIDIzNywgZCkKLSMgZGVm
aW5lIEJPT1NUX1BQX1JFUEVBVF8zXzIzOShtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18yMzgobSwg
ZCkgbSg0LCAyMzgsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yNDAobSwgZCkgQk9P
U1RfUFBfUkVQRUFUXzNfMjM5KG0sIGQpIG0oNCwgMjM5LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUXzNfMjQxKG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzI0MChtLCBkKSBtKDQsIDI0MCwg
ZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzI0MihtLCBkKSBCT09TVF9QUF9SRVBFQVRf
M18yNDEobSwgZCkgbSg0LCAyNDEsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yNDMo
bSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjQyKG0sIGQpIG0oNCwgMjQyLCBkKQotIyBkZWZpbmUg
Qk9PU1RfUFBfUkVQRUFUXzNfMjQ0KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzI0MyhtLCBkKSBt
KDQsIDI0MywgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzI0NShtLCBkKSBCT09TVF9Q
UF9SRVBFQVRfM18yNDQobSwgZCkgbSg0LCAyNDQsIGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBF
QVRfM18yNDYobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjQ1KG0sIGQpIG0oNCwgMjQ1LCBkKQot
IyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMjQ3KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzI0
NihtLCBkKSBtKDQsIDI0NiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8zXzI0OChtLCBk
KSBCT09TVF9QUF9SRVBFQVRfM18yNDcobSwgZCkgbSg0LCAyNDcsIGQpCi0jIGRlZmluZSBCT09T
VF9QUF9SRVBFQVRfM18yNDkobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjQ4KG0sIGQpIG0oNCwg
MjQ4LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMjUwKG0sIGQpIEJPT1NUX1BQX1JF
UEVBVF8zXzI0OShtLCBkKSBtKDQsIDI0OSwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF8z
XzI1MShtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18yNTAobSwgZCkgbSg0LCAyNTAsIGQpCi0jIGRl
ZmluZSBCT09TVF9QUF9SRVBFQVRfM18yNTIobSwgZCkgQk9PU1RfUFBfUkVQRUFUXzNfMjUxKG0s
IGQpIG0oNCwgMjUxLCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMjUzKG0sIGQpIEJP
T1NUX1BQX1JFUEVBVF8zXzI1MihtLCBkKSBtKDQsIDI1MiwgZCkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1JFUEVBVF8zXzI1NChtLCBkKSBCT09TVF9QUF9SRVBFQVRfM18yNTMobSwgZCkgbSg0LCAyNTMs
IGQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfM18yNTUobSwgZCkgQk9PU1RfUFBfUkVQRUFU
XzNfMjU0KG0sIGQpIG0oNCwgMjU0LCBkKQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUXzNfMjU2
KG0sIGQpIEJPT1NUX1BQX1JFUEVBVF8zXzI1NShtLCBkKSBtKDQsIDI1NSwgZCkKLSMKLSMgZW5k
aWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL3JlcGVhdF9mcm9tX3RvLmhwcCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL3Jl
cGVhdF9mcm9tX3RvLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZlNTM5ZTFk
ZWQxODVhYTIyOGM2OTFkM2U3ZDVkNTA5NjhmMWQxZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9wcmVwcm9jZXNzb3IvcmVwZXRpdGlvbi9yZXBlYXRfZnJvbV90by5ocHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0jIC8qIENvcHlyaWdodCAoQykgMjAwMQotIyAgKiBI
b3VzZW1hcnF1ZSBPeQotIyAgKiBodHRwOi8vd3d3LmhvdXNlbWFycXVlLmNvbQotIyAgKgotIyAg
KiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuIChTZWUKLSMgICogYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkg
YXQKLSMgICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotIyAgKi8KLSMK
LSMgLyogUmV2aXNlZCBieSBQYXVsIE1lbnNvbmlkZXMgKDIwMDIpICovCi0jCi0jIC8qIFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbi4gKi8KLSMKLSMgaWZu
ZGVmIEJPT1NUX1BSRVBST0NFU1NPUl9SRVBFVElUSU9OX1JFUEVBVF9GUk9NX1RPX0hQUAotIyBk
ZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX1JFUEVUSVRJT05fUkVQRUFUX0ZST01fVE9fSFBQCi0j
Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2FkZC5ocHA+Ci0jIGlu
Y2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL3N1Yi5ocHA+Ci0jIGluY2x1ZGUg
PGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNz
b3IvY29uZmlnL2NvbmZpZy5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb250
cm9sL3doaWxlLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2RlYnVnL2Vycm9y
LmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2RldGFpbC9hdXRvX3JlYy5ocHA+
Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL3JlcGVhdC5ocHA+Ci0j
IGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci90dXBsZS9lbGVtLmhwcD4KLSMgaW5jbHVkZSA8
Ym9vc3QvcHJlcHJvY2Vzc29yL3R1cGxlL3JlbS5ocHA+Ci0jCi0jIC8qIEJPT1NUX1BQX1JFUEVB
VF9GUk9NX1RPICovCi0jCi0jIGlmIDAKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF9GUk9N
X1RPKGZpcnN0LCBsYXN0LCBtYWNybywgZGF0YSkKLSMgZW5kaWYKLSMKLSMgZGVmaW5lIEJPT1NU
X1BQX1JFUEVBVF9GUk9NX1RPIEJPT1NUX1BQX0NBVChCT09TVF9QUF9SRVBFQVRfRlJPTV9UT18s
IEJPT1NUX1BQX0FVVE9fUkVDKEJPT1NUX1BQX1JFUEVBVF9QLCA0KSkKLSMKLSMgZGVmaW5lIEJP
T1NUX1BQX1JFUEVBVF9GUk9NX1RPXzEoZiwgbCwgbSwgZHQpIEJPT1NUX1BQX1JFUEVBVF9GUk9N
X1RPX0RfMShCT09TVF9QUF9BVVRPX1JFQyhCT09TVF9QUF9XSElMRV9QLCAyNTYpLCBmLCBsLCBt
LCBkdCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF9GUk9NX1RPXzIoZiwgbCwgbSwgZHQpIEJP
T1NUX1BQX1JFUEVBVF9GUk9NX1RPX0RfMihCT09TVF9QUF9BVVRPX1JFQyhCT09TVF9QUF9XSElM
RV9QLCAyNTYpLCBmLCBsLCBtLCBkdCkKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF9GUk9NX1RP
XzMoZiwgbCwgbSwgZHQpIEJPT1NUX1BQX1JFUEVBVF9GUk9NX1RPX0RfMyhCT09TVF9QUF9BVVRP
X1JFQyhCT09TVF9QUF9XSElMRV9QLCAyNTYpLCBmLCBsLCBtLCBkdCkKLSMgZGVmaW5lIEJPT1NU
X1BQX1JFUEVBVF9GUk9NX1RPXzQoZiwgbCwgbSwgZHQpIEJPT1NUX1BQX0VSUk9SKDB4MDAwMykK
LSMKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF9GUk9NX1RPXzFTVCBCT09TVF9QUF9SRVBFQVRf
RlJPTV9UT18xCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfRlJPTV9UT18yTkQgQk9PU1RfUFBf
UkVQRUFUX0ZST01fVE9fMgotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fM1JEIEJP
T1NUX1BQX1JFUEVBVF9GUk9NX1RPXzMKLSMKLSMgLyogQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9f
RCAqLwotIwotIyBpZiAwCi0jICAgIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfRlJPTV9UT19EKGQs
IGZpcnN0LCBsYXN0LCBtYWNybywgZGF0YSkKLSMgZW5kaWYKLSMKLSMgZGVmaW5lIEJPT1NUX1BQ
X1JFUEVBVF9GUk9NX1RPX0QgQk9PU1RfUFBfQ0FUKEJPT1NUX1BQX1JFUEVBVF9GUk9NX1RPX0Rf
LCBCT09TVF9QUF9BVVRPX1JFQyhCT09TVF9QUF9SRVBFQVRfUCwgNCkpCi0jCi0jIGlmIH5CT09T
VF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19FREcoKQotIyAgICBkZWZpbmUg
Qk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fRF8xKGQsIGYsIGwsIG0sIGR0KSBCT09TVF9QUF9SRVBF
QVRfMShCT09TVF9QUF9TVUJfRChkLCBsLCBmKSwgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fTV8x
LCAoZCwgZiwgbSwgZHQpKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fRF8y
KGQsIGYsIGwsIG0sIGR0KSBCT09TVF9QUF9SRVBFQVRfMihCT09TVF9QUF9TVUJfRChkLCBsLCBm
KSwgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fTV8yLCAoZCwgZiwgbSwgZHQpKQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fRF8zKGQsIGYsIGwsIG0sIGR0KSBCT09TVF9QUF9S
RVBFQVRfMyhCT09TVF9QUF9TVUJfRChkLCBsLCBmKSwgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9f
TV8zLCAoZCwgZiwgbSwgZHQpKQotIyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9QUF9SRVBFQVRf
RlJPTV9UT19EXzEoZCwgZiwgbCwgbSwgZHQpIEJPT1NUX1BQX1JFUEVBVF9GUk9NX1RPX0RfMV9J
KGQsIGYsIGwsIG0sIGR0KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fRF8y
KGQsIGYsIGwsIG0sIGR0KSBCT09TVF9QUF9SRVBFQVRfRlJPTV9UT19EXzJfSShkLCBmLCBsLCBt
LCBkdCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF9GUk9NX1RPX0RfMyhkLCBmLCBsLCBt
LCBkdCkgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fRF8zX0koZCwgZiwgbCwgbSwgZHQpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9SRVBFQVRfRlJPTV9UT19EXzFfSShkLCBmLCBsLCBtLCBkdCkgQk9P
U1RfUFBfUkVQRUFUXzEoQk9PU1RfUFBfU1VCX0QoZCwgbCwgZiksIEJPT1NUX1BQX1JFUEVBVF9G
Uk9NX1RPX01fMSwgKGQsIGYsIG0sIGR0KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF9G
Uk9NX1RPX0RfMl9JKGQsIGYsIGwsIG0sIGR0KSBCT09TVF9QUF9SRVBFQVRfMihCT09TVF9QUF9T
VUJfRChkLCBsLCBmKSwgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fTV8yLCAoZCwgZiwgbSwgZHQp
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fRF8zX0koZCwgZiwgbCwgbSwg
ZHQpIEJPT1NUX1BQX1JFUEVBVF8zKEJPT1NUX1BQX1NVQl9EKGQsIGwsIGYpLCBCT09TVF9QUF9S
RVBFQVRfRlJPTV9UT19NXzMsIChkLCBmLCBtLCBkdCkpCi0jIGVuZGlmCi0jCi0jIGlmIEJPT1NU
X1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX1NUUklDVCgpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9SRVBFQVRfRlJPTV9UT19NXzEoeiwgbiwgZGZtZCkgQk9PU1RfUFBfUkVQRUFU
X0ZST01fVE9fTV8xX0lNKHosIG4sIEJPT1NUX1BQX1RVUExFX1JFTV80IGRmbWQpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9SRVBFQVRfRlJPTV9UT19NXzIoeiwgbiwgZGZtZCkgQk9PU1RfUFBfUkVQ
RUFUX0ZST01fVE9fTV8yX0lNKHosIG4sIEJPT1NUX1BQX1RVUExFX1JFTV80IGRmbWQpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9SRVBFQVRfRlJPTV9UT19NXzMoeiwgbiwgZGZtZCkgQk9PU1RfUFBf
UkVQRUFUX0ZST01fVE9fTV8zX0lNKHosIG4sIEJPT1NUX1BQX1RVUExFX1JFTV80IGRmbWQpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfRlJPTV9UT19NXzFfSU0oeiwgbiwgaW0pIEJPT1NU
X1BQX1JFUEVBVF9GUk9NX1RPX01fMV9JKHosIG4sIGltKQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
UkVQRUFUX0ZST01fVE9fTV8yX0lNKHosIG4sIGltKSBCT09TVF9QUF9SRVBFQVRfRlJPTV9UT19N
XzJfSSh6LCBuLCBpbSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF9GUk9NX1RPX01fM19J
TSh6LCBuLCBpbSkgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fTV8zX0koeiwgbiwgaW0pCi0jIGVs
c2UKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF9GUk9NX1RPX01fMSh6LCBuLCBkZm1kKSBC
T09TVF9QUF9SRVBFQVRfRlJPTV9UT19NXzFfSSh6LCBuLCBCT09TVF9QUF9UVVBMRV9FTEVNKDQs
IDAsIGRmbWQpLCBCT09TVF9QUF9UVVBMRV9FTEVNKDQsIDEsIGRmbWQpLCBCT09TVF9QUF9UVVBM
RV9FTEVNKDQsIDIsIGRmbWQpLCBCT09TVF9QUF9UVVBMRV9FTEVNKDQsIDMsIGRmbWQpKQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fTV8yKHosIG4sIGRmbWQpIEJPT1NUX1BQ
X1JFUEVBVF9GUk9NX1RPX01fMl9JKHosIG4sIEJPT1NUX1BQX1RVUExFX0VMRU0oNCwgMCwgZGZt
ZCksIEJPT1NUX1BQX1RVUExFX0VMRU0oNCwgMSwgZGZtZCksIEJPT1NUX1BQX1RVUExFX0VMRU0o
NCwgMiwgZGZtZCksIEJPT1NUX1BQX1RVUExFX0VMRU0oNCwgMywgZGZtZCkpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9SRVBFQVRfRlJPTV9UT19NXzMoeiwgbiwgZGZtZCkgQk9PU1RfUFBfUkVQRUFU
X0ZST01fVE9fTV8zX0koeiwgbiwgQk9PU1RfUFBfVFVQTEVfRUxFTSg0LCAwLCBkZm1kKSwgQk9P
U1RfUFBfVFVQTEVfRUxFTSg0LCAxLCBkZm1kKSwgQk9PU1RfUFBfVFVQTEVfRUxFTSg0LCAyLCBk
Zm1kKSwgQk9PU1RfUFBfVFVQTEVfRUxFTSg0LCAzLCBkZm1kKSkKLSMgZW5kaWYKLSMKLSMgZGVm
aW5lIEJPT1NUX1BQX1JFUEVBVF9GUk9NX1RPX01fMV9JKHosIG4sIGQsIGYsIG0sIGR0KSBCT09T
VF9QUF9SRVBFQVRfRlJPTV9UT19NXzFfSUkoeiwgQk9PU1RfUFBfQUREX0QoZCwgbiwgZiksIG0s
IGR0KQotIyBkZWZpbmUgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fTV8yX0koeiwgbiwgZCwgZiwg
bSwgZHQpIEJPT1NUX1BQX1JFUEVBVF9GUk9NX1RPX01fMl9JSSh6LCBCT09TVF9QUF9BRERfRChk
LCBuLCBmKSwgbSwgZHQpCi0jIGRlZmluZSBCT09TVF9QUF9SRVBFQVRfRlJPTV9UT19NXzNfSSh6
LCBuLCBkLCBmLCBtLCBkdCkgQk9PU1RfUFBfUkVQRUFUX0ZST01fVE9fTV8zX0lJKHosIEJPT1NU
X1BQX0FERF9EKGQsIG4sIGYpLCBtLCBkdCkKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1JFUEVBVF9G
Uk9NX1RPX01fMV9JSSh6LCBuLCBtLCBkdCkgbSh6LCBuLCBkdCkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1JFUEVBVF9GUk9NX1RPX01fMl9JSSh6LCBuLCBtLCBkdCkgbSh6LCBuLCBkdCkKLSMgZGVmaW5l
IEJPT1NUX1BQX1JFUEVBVF9GUk9NX1RPX01fM19JSSh6LCBuLCBtLCBkdCkgbSh6LCBuLCBkdCkK
LSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9zZXEvY2F0LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9zZXEvY2F0LmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYjZiMDlmZjMyYTAxNGJkOWQ2NTI2NzEwZjIxYWQ2MjdiMjAw
NTlmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3Ivc2VxL2Nh
dC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0jIC8qICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCi0jICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0jICAqICAgICAoQykgQ29weXJpZ2h0IFBhdWwg
TWVuc29uaWRlcyAyMDAyLgotIyAgKiAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNv
ZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqICAgICBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiAgICAgaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiogKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0
IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX1NFUV9D
QVRfSFBQCi0jIGRlZmluZSBCT09TVF9QUkVQUk9DRVNTT1JfU0VRX0NBVF9IUFAKLSMKLSMgaW5j
bHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvZGVjLmhwcD4KLSMgaW5jbHVkZSA8
Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbmZpZy9jb25maWcuaHBwPgotIyBpbmNsdWRlIDxib29zdC9w
cmVwcm9jZXNzb3IvY29udHJvbC9pZi5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nv
ci9zZXEvZm9sZF9sZWZ0LmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3NlcS9z
ZXEuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3Ivc2VxL3NpemUuaHBwPgotIyBp
bmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUvZWF0LmhwcD4KLSMKLSMgLyogQk9PU1Rf
UFBfU0VRX0NBVCAqLwotIwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0NBVChzZXEpIFwKLSAgICBC
T09TVF9QUF9JRiggXAotICAgICAgICBCT09TVF9QUF9ERUMoQk9PU1RfUFBfU0VRX1NJWkUoc2Vx
KSksIFwKLSAgICAgICAgQk9PU1RfUFBfU0VRX0NBVF9JLCBcCi0gICAgICAgIEJPT1NUX1BQX1NF
UV9IRUFEIFwKLSAgICApKHNlcSkgXAotICAgIC8qKi8KLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9D
QVRfSShzZXEpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlQoQk9PU1RfUFBfU0VRX0NBVF9PLCBCT09T
VF9QUF9TRVFfSEVBRChzZXEpLCBCT09TVF9QUF9TRVFfVEFJTChzZXEpKQotIwotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0NBVF9PKHMsIHN0LCBlbGVtKSBCT09TVF9QUF9TRVFfQ0FUX09fSShzdCwg
ZWxlbSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9DQVRfT19JKGEsIGIpIGEgIyMgYgotIwotIyAv
KiBCT09TVF9QUF9TRVFfQ0FUX1MgKi8KLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9DQVRfUyhz
LCBzZXEpIFwKLSAgICBCT09TVF9QUF9JRiggXAotICAgICAgICBCT09TVF9QUF9ERUMoQk9PU1Rf
UFBfU0VRX1NJWkUoc2VxKSksIFwKLSAgICAgICAgQk9PU1RfUFBfU0VRX0NBVF9TX0lfQSwgXAot
ICAgICAgICBCT09TVF9QUF9TRVFfQ0FUX1NfSV9CIFwKLSAgICApKHMsIHNlcSkgXAotICAgIC8q
Ki8KLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9DQVRfU19JX0Eocywgc2VxKSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUXyAjIyBzKEJPT1NUX1BQX1NFUV9DQVRfTywgQk9PU1RfUFBfU0VRX0hFQUQoc2Vx
KSwgQk9PU1RfUFBfU0VRX1RBSUwoc2VxKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9DQVRfU19J
X0Iocywgc2VxKSBCT09TVF9QUF9TRVFfSEVBRChzZXEpCi0jCi0jIGVuZGlmCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3Iv
c2VxL2RldGFpbC9pc19lbXB0eS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC9wcmVwcm9jZXNzb3Ivc2VxL2RldGFpbC9pc19lbXB0eS5ocHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhODBhMmY2MTE3NTcwZmQ2YjQzOGE1MzZkMjU4ZjVlM2Y0
MDY4ZDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3NlcS9k
ZXRhaWwvaXNfZW1wdHkuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotIyAvKiAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgKEMpIENv
cHlyaWdodCBFZHdhcmQgRGllbmVyIDIwMTUuCi0jICAqICAgICBEaXN0cmlidXRlZCB1bmRlciB0
aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSMgICogICAgIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0jICAqICAgICBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
Ci0jICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiAqLwotIwotIyAvKiBTZWUgaHR0cDovL3d3dy5ib29zdC5v
cmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24uICovCi0jCi0jIGlmbmRlZiBCT09TVF9QUkVQUk9D
RVNTT1JfU0VRX0RFVEFJTF9JU19FTVBUWV9IUFAKLSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NP
Ul9TRVFfREVUQUlMX0lTX0VNUFRZX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNz
b3IvY29uZmlnL2NvbmZpZy5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9hcml0
aG1ldGljL2RlYy5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9sb2dpY2FsL2Jv
b2wuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9jb21wbC5ocHA+
Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9zZXEvc2l6ZS5ocHA+Ci0jCi0vKiBBbiBl
bXB0eSBzZXEgaXMgb25lIHRoYXQgaXMganVzdCBCT09TVF9QUF9TRVFfTklMICovCi0jCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfREVUQUlMX0lTX0VNUFRZKHNlcSkgXAotCUJPT1NUX1BQX0NPTVBM
IFwKLQkJKCBcCi0JCUJPT1NUX1BQX1NFUV9ERVRBSUxfSVNfTk9UX0VNUFRZKHNlcSkgXAotCQkp
IFwKLS8qKi8KLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9ERVRBSUxfSVNfRU1QVFlfU0laRShz
aXplKSBcCi0JQk9PU1RfUFBfQ09NUEwgXAotCQkoIFwKLQkJQk9PU1RfUFBfU0VRX0RFVEFJTF9J
U19OT1RfRU1QVFlfU0laRShzaXplKSBcCi0JCSkgXAotLyoqLwotIwotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0RFVEFJTF9JU19OT1RfRU1QVFkoc2VxKSBcCi0JQk9PU1RfUFBfU0VRX0RFVEFJTF9J
U19OT1RfRU1QVFlfU0laRShCT09TVF9QUF9TRVFfREVUQUlMX0VNUFRZX1NJWkUoc2VxKSkgXAot
LyoqLwotIwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0RFVEFJTF9JU19OT1RfRU1QVFlfU0laRShz
aXplKSBcCi0JQk9PU1RfUFBfQk9PTChzaXplKSBcCi0vKiovCi0jCi0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfREVUQUlMX0VNUFRZX1NJWkUoc2VxKSBcCi0JQk9PU1RfUFBfREVDKEJPT1NUX1BQX1NF
UV9TSVpFKHNlcSAobmlsKSkpIFwKLS8qKi8KLSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9zZXEvZWxl
bS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9j
ZXNzb3Ivc2VxL2VsZW0uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzdhNGIy
NzY2NWJiZjk1Nzg1MWViMDQ4N2NjNDIzY2I1ZTYxNThhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9zZXEvZWxlbS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
MDQgKzAsMCBAQAotIyAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KgotIyAgKiAgICAgKEMpIENvcHlyaWdodCBQYXVsIE1lbnNvbmlkZXMgMjAwMi4KLSMgICogICAg
IERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEu
MC4gKFNlZQotIyAgKiAgICAgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQKLSMgICogICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSMg
ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICoKLSMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0jCi0jIC8qIFNl
ZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbi4gKi8KLSMKLSMg
aWZuZGVmIEJPT1NUX1BSRVBST0NFU1NPUl9TRVFfRUxFTV9IUFAKLSMgZGVmaW5lIEJPT1NUX1BS
RVBST0NFU1NPUl9TRVFfRUxFTV9IUFAKLSMKLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29y
L2NhdC5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhw
cD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2ZhY2lsaXRpZXMvZW1wdHkuaHBwPgot
IwotIyAvKiBCT09TVF9QUF9TRVFfRUxFTSAqLwotIwotIyBpZiB+Qk9PU1RfUFBfQ09ORklHX0ZM
QUdTKCkgJiBCT09TVF9QUF9DT05GSUdfTVdDQygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFf
RUxFTShpLCBzZXEpIEJPT1NUX1BQX1NFUV9FTEVNX0koaSwgc2VxKQotIyBlbHNlCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRUxFTShpLCBzZXEpIEJPT1NUX1BQX1NFUV9FTEVNX0koKGksIHNl
cSkpCi0jIGVuZGlmCi0jCi0jIGlmIEJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBf
Q09ORklHX01TVkMoKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fSShpLCBzZXEpIEJP
T1NUX1BQX1NFUV9FTEVNX0lJKChCT09TVF9QUF9TRVFfRUxFTV8gIyMgaSBzZXEpKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fSUkocmVzKSBCT09TVF9QUF9TRVFfRUxFTV9JVihCT09T
VF9QUF9TRVFfRUxFTV9JSUkgcmVzKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fSUlJ
KHgsIF8pIHggQk9PU1RfUFBfRU1QVFkoKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1f
SVYoeCkgeAotIyBlbGlmIEJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklH
X01XQ0MoKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fSShwYXIpIEJPT1NUX1BQX1NF
UV9FTEVNX0lJICMjIHBhcgotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fSUkoaSwgc2Vx
KSBCT09TVF9QUF9TRVFfRUxFTV9JSUkoQk9PU1RfUFBfU0VRX0VMRU1fICMjIGkgIyMgc2VxKQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fSUlJKGltKSBCT09TVF9QUF9TRVFfRUxFTV9J
VihpbSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNX0lWKHgsIF8pIHgKLSMgZWxzZQot
IyAgICBpZiBkZWZpbmVkKF9fSUJNQ19fKSB8fCBkZWZpbmVkKF9fSUJNQ1BQX18pCi0jICAgICAg
ICBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fSShpLCBzZXEpIEJPT1NUX1BQX1NFUV9FTEVNX0lJ
KEJPT1NUX1BQX0NBVChCT09TVF9QUF9TRVFfRUxFTV8gIyMgaSwgc2VxKSkKLSMgICAgZWxzZQot
IyAgICAgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNX0koaSwgc2VxKSBCT09TVF9QUF9TRVFf
RUxFTV9JSShCT09TVF9QUF9TRVFfRUxFTV8gIyMgaSBzZXEpCi0jICAgIGVuZGlmCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRUxFTV9JSShpbSkgQk9PU1RfUFBfU0VRX0VMRU1fSUlJKGltKQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fSUlJKHgsIF8pIHgKLSMgZW5kaWYKLSMKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzAoeCkgeCwgQk9PU1RfUFBfTklMCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfRUxFTV8xKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzAKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9FTEVNXzIoXykgQk9PU1RfUFBfU0VRX0VMRU1fMQotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0VMRU1fMyhfKSBCT09TVF9QUF9TRVFfRUxFTV8yCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
RUxFTV80KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVN
XzUoXykgQk9PU1RfUFBfU0VRX0VMRU1fNAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fNihf
KSBCT09TVF9QUF9TRVFfRUxFTV81Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV83KF8pIEJP
T1NUX1BQX1NFUV9FTEVNXzYKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzgoXykgQk9PU1Rf
UFBfU0VRX0VMRU1fNwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fOShfKSBCT09TVF9QUF9T
RVFfRUxFTV84Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV8xMChfKSBCT09TVF9QUF9TRVFf
RUxFTV85Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV8xMShfKSBCT09TVF9QUF9TRVFfRUxF
TV8xMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTIoXykgQk9PU1RfUFBfU0VRX0VMRU1f
MTEKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzEzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEy
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV8xNChfKSBCT09TVF9QUF9TRVFfRUxFTV8xMwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTUoXykgQk9PU1RfUFBfU0VRX0VMRU1fMTQKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzE2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE1Ci0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfRUxFTV8xNyhfKSBCT09TVF9QUF9TRVFfRUxFTV8xNgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0VMRU1fMTgoXykgQk9PU1RfUFBfU0VRX0VMRU1fMTcKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9FTEVNXzE5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE4Ci0jIGRlZmluZSBC
T09TVF9QUF9TRVFfRUxFTV8yMChfKSBCT09TVF9QUF9TRVFfRUxFTV8xOQotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0VMRU1fMjEoXykgQk9PU1RfUFBfU0VRX0VMRU1fMjAKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9FTEVNXzIyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIxCi0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfRUxFTV8yMyhfKSBCT09TVF9QUF9TRVFfRUxFTV8yMgotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0VMRU1fMjQoXykgQk9PU1RfUFBfU0VRX0VMRU1fMjMKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9FTEVNXzI1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFf
RUxFTV8yNihfKSBCT09TVF9QUF9TRVFfRUxFTV8yNQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VM
RU1fMjcoXykgQk9PU1RfUFBfU0VRX0VMRU1fMjYKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVN
XzI4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV8y
OShfKSBCT09TVF9QUF9TRVFfRUxFTV8yOAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMzAo
XykgQk9PU1RfUFBfU0VRX0VMRU1fMjkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzMxKF8p
IEJPT1NUX1BQX1NFUV9FTEVNXzMwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV8zMihfKSBC
T09TVF9QUF9TRVFfRUxFTV8zMQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMzMoXykgQk9P
U1RfUFBfU0VRX0VMRU1fMzIKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzM0KF8pIEJPT1NU
X1BQX1NFUV9FTEVNXzMzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV8zNShfKSBCT09TVF9Q
UF9TRVFfRUxFTV8zNAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMzYoXykgQk9PU1RfUFBf
U0VRX0VMRU1fMzUKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzM3KF8pIEJPT1NUX1BQX1NF
UV9FTEVNXzM2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV8zOChfKSBCT09TVF9QUF9TRVFf
RUxFTV8zNwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMzkoXykgQk9PU1RfUFBfU0VRX0VM
RU1fMzgKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzQwKF8pIEJPT1NUX1BQX1NFUV9FTEVN
XzM5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV80MShfKSBCT09TVF9QUF9TRVFfRUxFTV80
MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fNDIoXykgQk9PU1RfUFBfU0VRX0VMRU1fNDEK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzQzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzQyCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV80NChfKSBCT09TVF9QUF9TRVFfRUxFTV80MwotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fNDUoXykgQk9PU1RfUFBfU0VRX0VMRU1fNDQKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9FTEVNXzQ2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzQ1Ci0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRUxFTV80NyhfKSBCT09TVF9QUF9TRVFfRUxFTV80NgotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0VMRU1fNDgoXykgQk9PU1RfUFBfU0VRX0VMRU1fNDcKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9FTEVNXzQ5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzQ4Ci0jIGRlZmluZSBCT09T
VF9QUF9TRVFfRUxFTV81MChfKSBCT09TVF9QUF9TRVFfRUxFTV80OQotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0VMRU1fNTEoXykgQk9PU1RfUFBfU0VRX0VMRU1fNTAKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9FTEVNXzUyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzUxCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfRUxFTV81MyhfKSBCT09TVF9QUF9TRVFfRUxFTV81MgotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0VMRU1fNTQoXykgQk9PU1RfUFBfU0VRX0VMRU1fNTMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9F
TEVNXzU1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzU0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxF
TV81NihfKSBCT09TVF9QUF9TRVFfRUxFTV81NQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1f
NTcoXykgQk9PU1RfUFBfU0VRX0VMRU1fNTYKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzU4
KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzU3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV81OShf
KSBCT09TVF9QUF9TRVFfRUxFTV81OAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fNjAoXykg
Qk9PU1RfUFBfU0VRX0VMRU1fNTkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzYxKF8pIEJP
T1NUX1BQX1NFUV9FTEVNXzYwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV82MihfKSBCT09T
VF9QUF9TRVFfRUxFTV82MQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fNjMoXykgQk9PU1Rf
UFBfU0VRX0VMRU1fNjIKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzY0KF8pIEJPT1NUX1BQ
X1NFUV9FTEVNXzYzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV82NShfKSBCT09TVF9QUF9T
RVFfRUxFTV82NAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fNjYoXykgQk9PU1RfUFBfU0VR
X0VMRU1fNjUKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzY3KF8pIEJPT1NUX1BQX1NFUV9F
TEVNXzY2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV82OChfKSBCT09TVF9QUF9TRVFfRUxF
TV82NwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fNjkoXykgQk9PU1RfUFBfU0VRX0VMRU1f
NjgKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzcwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzY5
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV83MShfKSBCT09TVF9QUF9TRVFfRUxFTV83MAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fNzIoXykgQk9PU1RfUFBfU0VRX0VMRU1fNzEKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzczKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzcyCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfRUxFTV83NChfKSBCT09TVF9QUF9TRVFfRUxFTV83MwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0VMRU1fNzUoXykgQk9PU1RfUFBfU0VRX0VMRU1fNzQKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9FTEVNXzc2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzc1Ci0jIGRlZmluZSBC
T09TVF9QUF9TRVFfRUxFTV83NyhfKSBCT09TVF9QUF9TRVFfRUxFTV83NgotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0VMRU1fNzgoXykgQk9PU1RfUFBfU0VRX0VMRU1fNzcKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9FTEVNXzc5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzc4Ci0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfRUxFTV84MChfKSBCT09TVF9QUF9TRVFfRUxFTV83OQotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0VMRU1fODEoXykgQk9PU1RfUFBfU0VRX0VMRU1fODAKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9FTEVNXzgyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzgxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
RUxFTV84MyhfKSBCT09TVF9QUF9TRVFfRUxFTV84MgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VM
RU1fODQoXykgQk9PU1RfUFBfU0VRX0VMRU1fODMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVN
Xzg1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzg0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV84
NihfKSBCT09TVF9QUF9TRVFfRUxFTV84NQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fODco
XykgQk9PU1RfUFBfU0VRX0VMRU1fODYKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzg4KF8p
IEJPT1NUX1BQX1NFUV9FTEVNXzg3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV84OShfKSBC
T09TVF9QUF9TRVFfRUxFTV84OAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fOTAoXykgQk9P
U1RfUFBfU0VRX0VMRU1fODkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzkxKF8pIEJPT1NU
X1BQX1NFUV9FTEVNXzkwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV85MihfKSBCT09TVF9Q
UF9TRVFfRUxFTV85MQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fOTMoXykgQk9PU1RfUFBf
U0VRX0VMRU1fOTIKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzk0KF8pIEJPT1NUX1BQX1NF
UV9FTEVNXzkzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV85NShfKSBCT09TVF9QUF9TRVFf
RUxFTV85NAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fOTYoXykgQk9PU1RfUFBfU0VRX0VM
RU1fOTUKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzk3KF8pIEJPT1NUX1BQX1NFUV9FTEVN
Xzk2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRUxFTV85OChfKSBCT09TVF9QUF9TRVFfRUxFTV85
NwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fOTkoXykgQk9PU1RfUFBfU0VRX0VMRU1fOTgK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTEVNXzEwMChfKSBCT09TVF9QUF9TRVFfRUxFTV85OQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTAxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEwMAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTAyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEwMQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTAzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEwMgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTA0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEwMwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTA1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEwNAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTA2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEwNQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTA3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEwNgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTA4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEwNwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTA5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEwOAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTEwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEwOQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTExKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzExMAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTEyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzExMQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTEzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzExMgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTE0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzExMwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTE1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzExNAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTE2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzExNQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTE3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzExNgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTE4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzExNwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTE5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzExOAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTIwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzExOQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTIxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEyMAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTIyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEyMQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTIzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEyMgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTI0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEyMwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTI1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEyNAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTI2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEyNQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTI3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEyNgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTI4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEyNwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTI5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEyOAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTMwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEyOQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTMxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEzMAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTMyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEzMQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTMzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEzMgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTM0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEzMwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTM1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEzNAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTM2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEzNQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTM3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEzNgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTM4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEzNwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTM5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEzOAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTQwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzEzOQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTQxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE0MAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTQyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE0MQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTQzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE0Mgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTQ0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE0Mwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTQ1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE0NAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTQ2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE0NQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTQ3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE0Ngot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTQ4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE0Nwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTQ5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE0OAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTUwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE0OQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTUxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE1MAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTUyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE1MQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTUzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE1Mgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTU0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE1Mwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTU1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE1NAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTU2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE1NQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTU3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE1Ngot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTU4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE1Nwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTU5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE1OAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTYwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE1OQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTYxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE2MAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTYyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE2MQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTYzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE2Mgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTY0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE2Mwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTY1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE2NAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTY2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE2NQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTY3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE2Ngot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTY4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE2Nwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTY5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE2OAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTcwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE2OQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTcxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE3MAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTcyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE3MQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTczKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE3Mgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTc0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE3Mwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTc1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE3NAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTc2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE3NQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTc3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE3Ngot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTc4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE3Nwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTc5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE3OAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTgwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE3OQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTgxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE4MAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTgyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE4MQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTgzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE4Mgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTg0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE4Mwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTg1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE4NAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTg2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE4NQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTg3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE4Ngot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTg4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE4Nwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTg5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE4OAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTkwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE4OQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTkxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE5MAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTkyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE5MQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTkzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE5Mgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTk0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE5Mwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTk1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE5NAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTk2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE5NQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTk3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE5Ngot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTk4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE5Nwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMTk5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE5OAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjAwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzE5OQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjAxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIwMAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjAyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIwMQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjAzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIwMgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjA0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIwMwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjA1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIwNAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjA2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIwNQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjA3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIwNgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjA4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIwNwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjA5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIwOAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjEwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIwOQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjExKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIxMAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjEyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIxMQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjEzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIxMgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjE0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIxMwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjE1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIxNAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjE2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIxNQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjE3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIxNgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjE4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIxNwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjE5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIxOAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjIwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIxOQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjIxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIyMAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjIyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIyMQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjIzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIyMgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjI0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIyMwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjI1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIyNAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjI2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIyNQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjI3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIyNgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjI4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIyNwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjI5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIyOAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjMwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIyOQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjMxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIzMAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjMyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIzMQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjMzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIzMgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjM0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIzMwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjM1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIzNAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjM2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIzNQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjM3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIzNgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjM4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIzNwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjM5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIzOAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjQwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzIzOQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjQxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI0MAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjQyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI0MQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjQzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI0Mgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjQ0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI0Mwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjQ1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI0NAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjQ2KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI0NQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjQ3KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI0Ngot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjQ4KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI0Nwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjQ5KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI0OAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjUwKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI0OQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjUxKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI1MAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjUyKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI1MQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjUzKF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI1Mgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjU0KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI1Mwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VMRU1fMjU1KF8pIEJPT1NUX1BQX1NFUV9FTEVNXzI1NAot
IwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcHJlcHJvY2Vzc29yL3NlcS9lbnVtLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9zZXEvZW51bS5ocHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2M2IyNDI1YmRhMjZmZDBkYjllM2I2NzNiZjc4YTZjYmY2
ZDk3YjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3NlcS9l
bnVtLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4OCArMCwwIEBACi0jIC8qICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCi0jICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0jICAqICAgICAoQykgQ29weXJpZ2h0IFBh
dWwgTWVuc29uaWRlcyAyMDAyLgotIyAgKiAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0jICAqICAgICBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiAgICAgaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiogKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBt
b3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX1NF
UV9FTlVNX0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX1NFUV9FTlVNX0hQUAotIwot
IyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3Qv
cHJlcHJvY2Vzc29yL2NvbmZpZy9jb25maWcuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9j
ZXNzb3Ivc2VxL3NpemUuaHBwPgotIwotIyAvKiBCT09TVF9QUF9TRVFfRU5VTSAqLwotIwotIyBp
ZiBCT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19FREcoKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU0oc2VxKSBCT09TVF9QUF9TRVFfRU5VTV9JKHNlcSkKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNX0koc2VxKSBCT09TVF9QUF9DQVQoQk9PU1RfUFBf
U0VRX0VOVU1fLCBCT09TVF9QUF9TRVFfU0laRShzZXEpKSBzZXEKLSMgZWxpZiBCT09TVF9QUF9D
T05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19NV0NDKCkKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX1NFUV9FTlVNKHNlcSkgQk9PU1RfUFBfU0VRX0VOVU1fSShCT09TVF9QUF9TRVFfU0laRShz
ZXEpLCBzZXEpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV9JKHNpemUsIHNlcSkgQk9P
U1RfUFBfQ0FUKEJPT1NUX1BQX1NFUV9FTlVNXywgc2l6ZSkgc2VxCi0jIGVsc2UKLSMgICAgZGVm
aW5lIEJPT1NUX1BQX1NFUV9FTlVNKHNlcSkgQk9PU1RfUFBfQ0FUKEJPT1NUX1BQX1NFUV9FTlVN
XywgQk9PU1RfUFBfU0VRX1NJWkUoc2VxKSkgc2VxCi0jIGVuZGlmCi0jCi0jIGRlZmluZSBCT09T
VF9QUF9TRVFfRU5VTV8xKHgpIHgKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzIoeCkgeCwg
Qk9PU1RfUFBfU0VRX0VOVU1fMQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMyh4KSB4LCBC
T09TVF9QUF9TRVFfRU5VTV8yCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV80KHgpIHgsIEJP
T1NUX1BQX1NFUV9FTlVNXzMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzUoeCkgeCwgQk9P
U1RfUFBfU0VRX0VOVU1fNAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fNih4KSB4LCBCT09T
VF9QUF9TRVFfRU5VTV81Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV83KHgpIHgsIEJPT1NU
X1BQX1NFUV9FTlVNXzYKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzgoeCkgeCwgQk9PU1Rf
UFBfU0VRX0VOVU1fNwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fOSh4KSB4LCBCT09TVF9Q
UF9TRVFfRU5VTV84Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV8xMCh4KSB4LCBCT09TVF9Q
UF9TRVFfRU5VTV85Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV8xMSh4KSB4LCBCT09TVF9Q
UF9TRVFfRU5VTV8xMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTIoeCkgeCwgQk9PU1Rf
UFBfU0VRX0VOVU1fMTEKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzEzKHgpIHgsIEJPT1NU
X1BQX1NFUV9FTlVNXzEyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV8xNCh4KSB4LCBCT09T
VF9QUF9TRVFfRU5VTV8xMwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTUoeCkgeCwgQk9P
U1RfUFBfU0VRX0VOVU1fMTQKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzE2KHgpIHgsIEJP
T1NUX1BQX1NFUV9FTlVNXzE1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV8xNyh4KSB4LCBC
T09TVF9QUF9TRVFfRU5VTV8xNgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTgoeCkgeCwg
Qk9PU1RfUFBfU0VRX0VOVU1fMTcKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzE5KHgpIHgs
IEJPT1NUX1BQX1NFUV9FTlVNXzE4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV8yMCh4KSB4
LCBCT09TVF9QUF9TRVFfRU5VTV8xOQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjEoeCkg
eCwgQk9PU1RfUFBfU0VRX0VOVU1fMjAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzIyKHgp
IHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV8yMyh4
KSB4LCBCT09TVF9QUF9TRVFfRU5VTV8yMgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjQo
eCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fMjMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzI1
KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV8y
Nih4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV8yNQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1f
MjcoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fMjYKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVN
XzI4KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5V
TV8yOSh4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV8yOAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VO
VU1fMzAoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fMjkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9F
TlVNXzMxKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzMwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
RU5VTV8zMih4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV8zMQotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0VOVU1fMzMoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fMzIKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9FTlVNXzM0KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzMzCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfRU5VTV8zNSh4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV8zNAotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0VOVU1fMzYoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fMzUKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9FTlVNXzM3KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzM2Ci0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfRU5VTV8zOCh4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV8zNwotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0VOVU1fMzkoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fMzgKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9FTlVNXzQwKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzM5Ci0jIGRlZmluZSBCT09T
VF9QUF9TRVFfRU5VTV80MSh4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV80MAotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0VOVU1fNDIoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fNDEKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9FTlVNXzQzKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzQyCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfRU5VTV80NCh4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV80MwotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0VOVU1fNDUoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fNDQKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9FTlVNXzQ2KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzQ1Ci0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRU5VTV80Nyh4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV80NgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0VOVU1fNDgoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fNDcKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9FTlVNXzQ5KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzQ4Ci0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfRU5VTV81MCh4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV80OQotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fNTEoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fNTAKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzUyKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzUxCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV81Myh4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV81Mgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fNTQoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fNTMK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzU1KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzU0
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV81Nih4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV81
NQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fNTcoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1f
NTYKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzU4KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVN
XzU3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV81OSh4KSB4LCBCT09TVF9QUF9TRVFfRU5V
TV81OAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fNjAoeCkgeCwgQk9PU1RfUFBfU0VRX0VO
VU1fNTkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzYxKHgpIHgsIEJPT1NUX1BQX1NFUV9F
TlVNXzYwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV82Mih4KSB4LCBCT09TVF9QUF9TRVFf
RU5VTV82MQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fNjMoeCkgeCwgQk9PU1RfUFBfU0VR
X0VOVU1fNjIKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzY0KHgpIHgsIEJPT1NUX1BQX1NF
UV9FTlVNXzYzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV82NSh4KSB4LCBCT09TVF9QUF9T
RVFfRU5VTV82NAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fNjYoeCkgeCwgQk9PU1RfUFBf
U0VRX0VOVU1fNjUKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzY3KHgpIHgsIEJPT1NUX1BQ
X1NFUV9FTlVNXzY2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV82OCh4KSB4LCBCT09TVF9Q
UF9TRVFfRU5VTV82NwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fNjkoeCkgeCwgQk9PU1Rf
UFBfU0VRX0VOVU1fNjgKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzcwKHgpIHgsIEJPT1NU
X1BQX1NFUV9FTlVNXzY5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV83MSh4KSB4LCBCT09T
VF9QUF9TRVFfRU5VTV83MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fNzIoeCkgeCwgQk9P
U1RfUFBfU0VRX0VOVU1fNzEKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzczKHgpIHgsIEJP
T1NUX1BQX1NFUV9FTlVNXzcyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV83NCh4KSB4LCBC
T09TVF9QUF9TRVFfRU5VTV83MwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fNzUoeCkgeCwg
Qk9PU1RfUFBfU0VRX0VOVU1fNzQKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzc2KHgpIHgs
IEJPT1NUX1BQX1NFUV9FTlVNXzc1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV83Nyh4KSB4
LCBCT09TVF9QUF9TRVFfRU5VTV83NgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fNzgoeCkg
eCwgQk9PU1RfUFBfU0VRX0VOVU1fNzcKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzc5KHgp
IHgsIEJPT1NUX1BQX1NFUV9FTlVNXzc4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV84MCh4
KSB4LCBCT09TVF9QUF9TRVFfRU5VTV83OQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fODEo
eCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fODAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVNXzgy
KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzgxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5VTV84
Myh4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV84MgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1f
ODQoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fODMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9FTlVN
Xzg1KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzg0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRU5V
TV84Nih4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV84NQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VO
VU1fODcoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fODYKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9F
TlVNXzg4KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzg3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFf
RU5VTV84OSh4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV84OAotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0VOVU1fOTAoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fODkKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9FTlVNXzkxKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzkwCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfRU5VTV85Mih4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV85MQotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0VOVU1fOTMoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fOTIKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9FTlVNXzk0KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzkzCi0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfRU5VTV85NSh4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV85NAotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0VOVU1fOTYoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fOTUKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9FTlVNXzk3KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzk2Ci0jIGRlZmluZSBCT09T
VF9QUF9TRVFfRU5VTV85OCh4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV85NwotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0VOVU1fOTkoeCkgeCwgQk9PU1RfUFBfU0VRX0VOVU1fOTgKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9FTlVNXzEwMCh4KSB4LCBCT09TVF9QUF9TRVFfRU5VTV85OQotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0VOVU1fMTAxKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEwMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0VOVU1fMTAyKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEwMQotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTAzKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEwMgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTA0KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEw
MwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTA1KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVN
XzEwNAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTA2KHgpIHgsIEJPT1NUX1BQX1NFUV9F
TlVNXzEwNQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTA3KHgpIHgsIEJPT1NUX1BQX1NF
UV9FTlVNXzEwNgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTA4KHgpIHgsIEJPT1NUX1BQ
X1NFUV9FTlVNXzEwNwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTA5KHgpIHgsIEJPT1NU
X1BQX1NFUV9FTlVNXzEwOAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTEwKHgpIHgsIEJP
T1NUX1BQX1NFUV9FTlVNXzEwOQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTExKHgpIHgs
IEJPT1NUX1BQX1NFUV9FTlVNXzExMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTEyKHgp
IHgsIEJPT1NUX1BQX1NFUV9FTlVNXzExMQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTEz
KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzExMgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1f
MTE0KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzExMwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VO
VU1fMTE1KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzExNAotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0VOVU1fMTE2KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzExNQotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0VOVU1fMTE3KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzExNgotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0VOVU1fMTE4KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzExNwotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0VOVU1fMTE5KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzExOAotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0VOVU1fMTIwKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzExOQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0VOVU1fMTIxKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEyMAotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTIyKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEyMQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTIzKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEy
MgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTI0KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVN
XzEyMwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTI1KHgpIHgsIEJPT1NUX1BQX1NFUV9F
TlVNXzEyNAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTI2KHgpIHgsIEJPT1NUX1BQX1NF
UV9FTlVNXzEyNQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTI3KHgpIHgsIEJPT1NUX1BQ
X1NFUV9FTlVNXzEyNgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTI4KHgpIHgsIEJPT1NU
X1BQX1NFUV9FTlVNXzEyNwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTI5KHgpIHgsIEJP
T1NUX1BQX1NFUV9FTlVNXzEyOAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTMwKHgpIHgs
IEJPT1NUX1BQX1NFUV9FTlVNXzEyOQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTMxKHgp
IHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEzMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTMy
KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEzMQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1f
MTMzKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEzMgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VO
VU1fMTM0KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEzMwotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0VOVU1fMTM1KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEzNAotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0VOVU1fMTM2KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEzNQotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0VOVU1fMTM3KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEzNgotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0VOVU1fMTM4KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEzNwotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0VOVU1fMTM5KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEzOAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0VOVU1fMTQwKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzEzOQotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTQxKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE0MAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTQyKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE0
MQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTQzKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVN
XzE0MgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTQ0KHgpIHgsIEJPT1NUX1BQX1NFUV9F
TlVNXzE0MwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTQ1KHgpIHgsIEJPT1NUX1BQX1NF
UV9FTlVNXzE0NAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTQ2KHgpIHgsIEJPT1NUX1BQ
X1NFUV9FTlVNXzE0NQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTQ3KHgpIHgsIEJPT1NU
X1BQX1NFUV9FTlVNXzE0NgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTQ4KHgpIHgsIEJP
T1NUX1BQX1NFUV9FTlVNXzE0NwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTQ5KHgpIHgs
IEJPT1NUX1BQX1NFUV9FTlVNXzE0OAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTUwKHgp
IHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE0OQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTUx
KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE1MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1f
MTUyKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE1MQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VO
VU1fMTUzKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE1MgotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0VOVU1fMTU0KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE1MwotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0VOVU1fMTU1KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE1NAotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0VOVU1fMTU2KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE1NQotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0VOVU1fMTU3KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE1NgotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0VOVU1fMTU4KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE1NwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0VOVU1fMTU5KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE1OAotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTYwKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE1OQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTYxKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE2
MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTYyKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVN
XzE2MQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTYzKHgpIHgsIEJPT1NUX1BQX1NFUV9F
TlVNXzE2MgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTY0KHgpIHgsIEJPT1NUX1BQX1NF
UV9FTlVNXzE2MwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTY1KHgpIHgsIEJPT1NUX1BQ
X1NFUV9FTlVNXzE2NAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTY2KHgpIHgsIEJPT1NU
X1BQX1NFUV9FTlVNXzE2NQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTY3KHgpIHgsIEJP
T1NUX1BQX1NFUV9FTlVNXzE2NgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTY4KHgpIHgs
IEJPT1NUX1BQX1NFUV9FTlVNXzE2NwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTY5KHgp
IHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE2OAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTcw
KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE2OQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1f
MTcxKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE3MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VO
VU1fMTcyKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE3MQotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0VOVU1fMTczKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE3MgotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0VOVU1fMTc0KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE3MwotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0VOVU1fMTc1KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE3NAotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0VOVU1fMTc2KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE3NQotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0VOVU1fMTc3KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE3NgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0VOVU1fMTc4KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE3NwotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTc5KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE3OAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTgwKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE3
OQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTgxKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVN
XzE4MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTgyKHgpIHgsIEJPT1NUX1BQX1NFUV9F
TlVNXzE4MQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTgzKHgpIHgsIEJPT1NUX1BQX1NF
UV9FTlVNXzE4MgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTg0KHgpIHgsIEJPT1NUX1BQ
X1NFUV9FTlVNXzE4MwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTg1KHgpIHgsIEJPT1NU
X1BQX1NFUV9FTlVNXzE4NAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTg2KHgpIHgsIEJP
T1NUX1BQX1NFUV9FTlVNXzE4NQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTg3KHgpIHgs
IEJPT1NUX1BQX1NFUV9FTlVNXzE4NgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTg4KHgp
IHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE4NwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTg5
KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE4OAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1f
MTkwKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE4OQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VO
VU1fMTkxKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE5MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0VOVU1fMTkyKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE5MQotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0VOVU1fMTkzKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE5MgotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0VOVU1fMTk0KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE5MwotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0VOVU1fMTk1KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE5NAotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0VOVU1fMTk2KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE5NQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0VOVU1fMTk3KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE5NgotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTk4KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE5Nwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMTk5KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzE5
OAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjAwKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVN
XzE5OQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjAxKHgpIHgsIEJPT1NUX1BQX1NFUV9F
TlVNXzIwMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjAyKHgpIHgsIEJPT1NUX1BQX1NF
UV9FTlVNXzIwMQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjAzKHgpIHgsIEJPT1NUX1BQ
X1NFUV9FTlVNXzIwMgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjA0KHgpIHgsIEJPT1NU
X1BQX1NFUV9FTlVNXzIwMwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjA1KHgpIHgsIEJP
T1NUX1BQX1NFUV9FTlVNXzIwNAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjA2KHgpIHgs
IEJPT1NUX1BQX1NFUV9FTlVNXzIwNQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjA3KHgp
IHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIwNgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjA4
KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIwNwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1f
MjA5KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIwOAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VO
VU1fMjEwKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIwOQotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0VOVU1fMjExKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIxMAotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0VOVU1fMjEyKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIxMQotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0VOVU1fMjEzKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIxMgotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0VOVU1fMjE0KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIxMwotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0VOVU1fMjE1KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIxNAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0VOVU1fMjE2KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIxNQotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjE3KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIxNgot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjE4KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIx
NwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjE5KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVN
XzIxOAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjIwKHgpIHgsIEJPT1NUX1BQX1NFUV9F
TlVNXzIxOQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjIxKHgpIHgsIEJPT1NUX1BQX1NF
UV9FTlVNXzIyMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjIyKHgpIHgsIEJPT1NUX1BQ
X1NFUV9FTlVNXzIyMQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjIzKHgpIHgsIEJPT1NU
X1BQX1NFUV9FTlVNXzIyMgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjI0KHgpIHgsIEJP
T1NUX1BQX1NFUV9FTlVNXzIyMwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjI1KHgpIHgs
IEJPT1NUX1BQX1NFUV9FTlVNXzIyNAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjI2KHgp
IHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIyNQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjI3
KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIyNgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1f
MjI4KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIyNwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VO
VU1fMjI5KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIyOAotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0VOVU1fMjMwKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIyOQotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0VOVU1fMjMxKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIzMAotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0VOVU1fMjMyKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIzMQotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0VOVU1fMjMzKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIzMgotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0VOVU1fMjM0KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIzMwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0VOVU1fMjM1KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIzNAotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjM2KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIzNQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjM3KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzIz
NgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjM4KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVN
XzIzNwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjM5KHgpIHgsIEJPT1NUX1BQX1NFUV9F
TlVNXzIzOAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjQwKHgpIHgsIEJPT1NUX1BQX1NF
UV9FTlVNXzIzOQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjQxKHgpIHgsIEJPT1NUX1BQ
X1NFUV9FTlVNXzI0MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjQyKHgpIHgsIEJPT1NU
X1BQX1NFUV9FTlVNXzI0MQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjQzKHgpIHgsIEJP
T1NUX1BQX1NFUV9FTlVNXzI0MgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjQ0KHgpIHgs
IEJPT1NUX1BQX1NFUV9FTlVNXzI0MwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjQ1KHgp
IHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI0NAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjQ2
KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI0NQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1f
MjQ3KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI0NgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VO
VU1fMjQ4KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI0NwotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0VOVU1fMjQ5KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI0OAotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0VOVU1fMjUwKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI0OQotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0VOVU1fMjUxKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI1MAotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0VOVU1fMjUyKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI1MQotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0VOVU1fMjUzKHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI1MgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0VOVU1fMjU0KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI1MwotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjU1KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI1NAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0VOVU1fMjU2KHgpIHgsIEJPT1NUX1BQX1NFUV9FTlVNXzI1
NQotIwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3NlcS9mb2xkX2xlZnQuaHBwIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3NlcS9mb2xkX2xlZnQu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjA1MWI2OWQ5YjZhYTJjMmRkZjc1
OTcwNzBiNDY0MTJmNDJhMzFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXBy
b2Nlc3Nvci9zZXEvZm9sZF9sZWZ0LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNzAgKzAsMCBA
QAotIyAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAg
ICAgKEMpIENvcHlyaWdodCBQYXVsIE1lbnNvbmlkZXMgMjAwMi4KLSMgICogICAgIERpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQot
IyAgKiAgICAgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSMg
ICogICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSMgICogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICoKLSMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0jCi0jIC8qIFNlZSBodHRwOi8v
d3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbi4gKi8KLSMKLSMgaWZuZGVmIEJP
T1NUX1BSRVBST0NFU1NPUl9TRVFfRk9MRF9MRUZUX0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJP
Q0VTU09SX1NFUV9GT0xEX0xFRlRfSFBQCi0jCi0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nv
ci9hcml0aG1ldGljL2RlYy5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQu
aHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29udHJvbC9pZi5ocHA+Ci0jIGlu
Y2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9kZWJ1Zy9lcnJvci5ocHA+Ci0jIGluY2x1ZGUgPGJv
b3N0L3ByZXByb2Nlc3Nvci9kZXRhaWwvYXV0b19yZWMuaHBwPgotIyBpbmNsdWRlIDxib29zdC9w
cmVwcm9jZXNzb3Ivc2VxL3NlcS5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9z
ZXEvc2l6ZS5ocHA+Ci0jCi0jIC8qIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlQgKi8KLSMKLSMgaWYg
MAotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVChvcCwgc3RhdGUsIHNlcSkgLi4u
Ci0jIGVuZGlmCi0jCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUIEJPT1NUX1BQX0NB
VChCT09TVF9QUF9TRVFfRk9MRF9MRUZUXywgQk9PU1RfUFBfQVVUT19SRUMoQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9QLCAyNTYpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9QKG4p
IEJPT1NUX1BQX0NBVChCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLXywgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXyAjIyBuKEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfTywgQk9PU1RfUFBfTklM
LCAobmlsKSwgMSkpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX08ocywgc3QsIF8p
IHN0Ci0jCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzI1NyhvcCwgc3QsIHNzKSBC
T09TVF9QUF9FUlJPUigweDAwMDUpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MjU3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9FUlJPUigweDAwMDUpCi0jCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX05JTCAxCi0jCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xKG9w
LCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8zKG9wLCBz
dCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV80KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV81KG9wLCBzdCwg
c3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV82KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV83KG9wLCBzdCwgc3Ms
IHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV84KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV85KG9wLCBzdCwgc3MsIHN6
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8xMChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTEob3AsIHN0LCBzcywgc3op
IDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzEyKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMyhvcCwgc3QsIHNzLCBzeikg
MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTQob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE1KG9wLCBzdCwgc3MsIHN6KSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV8xNihvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTcob3AsIHN0LCBzcywgc3opIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzE4KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xOShvcCwgc3QsIHNzLCBzeikgMAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMjAob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIxKG9wLCBzdCwgc3MsIHN6KSAwCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV8yMihvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjMob3AsIHN0LCBzcywgc3opIDAKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzI0KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNShvcCwgc3QsIHNzLCBzeikgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMjYob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Q0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI3KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV8yOChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9D
SEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjkob3AsIHN0LCBzcywgc3opIDAKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzMwKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NI
RUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8zMShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MzIob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hF
Q0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzMzKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8z
NChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVD
S19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMzUob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzM2
KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNL
X0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8zNyhvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMzgo
b3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tf
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzM5KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV80MChv
cCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19C
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNDEob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQyKG9w
LCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV80MyhvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNDQob3As
IHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQ1KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV80NihvcCwg
c3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfNDcob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQ4KG9wLCBz
dCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV80OShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNTAob3AsIHN0
LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzUxKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV81MihvcCwgc3Qs
IHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfNTMob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzU0KG9wLCBzdCwg
c3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV81NShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNTYob3AsIHN0LCBz
cywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzU3KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV81OChvcCwgc3QsIHNz
LCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfNTkob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzYwKG9wLCBzdCwgc3Ms
IHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV82MShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNjIob3AsIHN0LCBzcywg
c3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzYzKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV82NChvcCwgc3QsIHNzLCBz
eikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfNjUob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzY2KG9wLCBzdCwgc3MsIHN6
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV82NyhvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNjgob3AsIHN0LCBzcywgc3op
IDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzY5KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV83MChvcCwgc3QsIHNzLCBzeikg
MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfNzEob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzcyKG9wLCBzdCwgc3MsIHN6KSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV83MyhvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNzQob3AsIHN0LCBzcywgc3opIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzc1KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV83NihvcCwgc3QsIHNzLCBzeikgMAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfNzcob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzc4KG9wLCBzdCwgc3MsIHN6KSAwCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV83OShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfODAob3AsIHN0LCBzcywgc3opIDAKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzgxKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV84MihvcCwgc3QsIHNzLCBzeikgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfODMob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Q0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzg0KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV84NShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9D
SEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfODYob3AsIHN0LCBzcywgc3opIDAKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
Xzg3KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NI
RUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV84OChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
ODkob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hF
Q0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzkwKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV85
MShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVD
S19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOTIob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzkz
KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNL
X0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV85NChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOTUo
b3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tf
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzk2KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV85Nyhv
cCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19C
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOTgob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzk5KG9w
LCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMDAob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEwMShv
cCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19C
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTAyKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMDMo
b3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tf
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEwNChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA1
KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNL
X0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMDYob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEw
NyhvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVD
S19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA4KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8x
MDkob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hF
Q0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzExMChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTExKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NI
RUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMTIob3AsIHN0LCBzcywgc3opIDAKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzExMyhvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9D
SEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTE0KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV8xMTUob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Q0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzExNihvcCwgc3QsIHNzLCBzeikgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTE3KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMTgob3AsIHN0LCBzcywgc3opIDAKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzExOShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTIwKG9wLCBzdCwgc3MsIHN6KSAwCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV8xMjEob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEyMihvcCwgc3QsIHNzLCBzeikgMAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTIzKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMjQob3AsIHN0LCBzcywgc3opIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzEyNShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI2KG9wLCBzdCwgc3MsIHN6KSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV8xMjcob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEyOChvcCwgc3QsIHNzLCBzeikg
MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTI5KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMzAob3AsIHN0LCBzcywgc3op
IDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzEzMShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTMyKG9wLCBzdCwgc3MsIHN6
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8xMzMob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEzNChvcCwgc3QsIHNzLCBz
eikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTM1KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMzYob3AsIHN0LCBzcywg
c3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzEzNyhvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTM4KG9wLCBzdCwgc3Ms
IHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV8xMzkob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE0MChvcCwgc3QsIHNz
LCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTQxKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNDIob3AsIHN0LCBz
cywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzE0MyhvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ0KG9wLCBzdCwg
c3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV8xNDUob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE0NihvcCwgc3Qs
IHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTQ3KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNDgob3AsIHN0
LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzE0OShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTUwKG9wLCBz
dCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV8xNTEob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE1MihvcCwg
c3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTUzKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNTQob3As
IHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE1NShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTU2KG9w
LCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNTcob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE1OChv
cCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19C
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTU5KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNjAo
b3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tf
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE2MShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTYy
KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNL
X0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNjMob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE2
NChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVD
S19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTY1KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8x
NjYob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hF
Q0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE2NyhvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTY4KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NI
RUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNjkob3AsIHN0LCBzcywgc3opIDAKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzE3MChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9D
SEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTcxKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV8xNzIob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Q0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE3MyhvcCwgc3QsIHNzLCBzeikgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTc0KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNzUob3AsIHN0LCBzcywgc3opIDAKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzE3NihvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTc3KG9wLCBzdCwgc3MsIHN6KSAwCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV8xNzgob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE3OShvcCwgc3QsIHNzLCBzeikgMAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTgwKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xODEob3AsIHN0LCBzcywgc3opIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzE4MihvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTgzKG9wLCBzdCwgc3MsIHN6KSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV8xODQob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE4NShvcCwgc3QsIHNzLCBzeikg
MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTg2KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xODcob3AsIHN0LCBzcywgc3op
IDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzE4OChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTg5KG9wLCBzdCwgc3MsIHN6
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8xOTAob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE5MShvcCwgc3QsIHNzLCBz
eikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTkyKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xOTMob3AsIHN0LCBzcywg
c3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzE5NChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTk1KG9wLCBzdCwgc3Ms
IHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV8xOTYob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE5NyhvcCwgc3QsIHNz
LCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTk4KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xOTkob3AsIHN0LCBz
cywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzIwMChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAxKG9wLCBzdCwg
c3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV8yMDIob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIwMyhvcCwgc3Qs
IHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMjA0KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMDUob3AsIHN0
LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzIwNihvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjA3KG9wLCBz
dCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV8yMDgob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIwOShvcCwg
c3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMjEwKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMTEob3As
IHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIxMihvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjEzKG9w
LCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMTQob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIxNShv
cCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19C
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE2KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMTco
b3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tf
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIxOChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE5
KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNL
X0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMjAob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIy
MShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVD
S19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjIyKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8y
MjMob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hF
Q0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIyNChvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MjI1KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NI
RUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMjYob3AsIHN0LCBzcywgc3opIDAKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzIyNyhvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9D
SEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjI4KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV8yMjkob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Q0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIzMChvcCwgc3QsIHNzLCBzeikgMAotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMjMxKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMzIob3AsIHN0LCBzcywgc3opIDAKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzIzMyhvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM0KG9wLCBzdCwgc3MsIHN6KSAwCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV8yMzUob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIzNihvcCwgc3QsIHNzLCBzeikgMAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMjM3KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMzgob3AsIHN0LCBzcywgc3opIDAK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzIzOShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQwKG9wLCBzdCwgc3MsIHN6KSAw
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV8yNDEob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI0MihvcCwgc3QsIHNzLCBzeikg
MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMjQzKG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNDQob3AsIHN0LCBzcywgc3op
IDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzI0NShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQ2KG9wLCBzdCwgc3MsIHN6
KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8yNDcob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI0OChvcCwgc3QsIHNzLCBz
eikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMjQ5KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNTAob3AsIHN0LCBzcywg
c3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzI1MShvcCwgc3QsIHNzLCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjUyKG9wLCBzdCwgc3Ms
IHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV8yNTMob3AsIHN0LCBzcywgc3opIDAKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfQ0hFQ0tfQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI1NChvcCwgc3QsIHNz
LCBzeikgMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9DSEVDS19CT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMjU1KG9wLCBzdCwgc3MsIHN6KSAwCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0NIRUNLX0JPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNTYob3AsIHN0LCBz
cywgc3opIDAKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRihvcCwgc3QsIHNz
LCBzeikgc3QKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMShvcCwgc3QsIHNz
KSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMShvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0la
RShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzIob3AsIHN0LCBzcykgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3Mp
KQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8zKG9wLCBzdCwgc3MpIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV8zKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNChvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfNChvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzUob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzUob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF82KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV82KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfNyhvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNyhv
cCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUXzgob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzgob3AsIHN0
LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF85KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV85KG9wLCBzdCwgc3Ms
IEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
MTAob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEwKG9wLCBzdCwgc3MsIEJP
T1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTEo
b3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzExKG9wLCBzdCwgc3MsIEJPT1NU
X1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTIob3As
IHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEyKG9wLCBzdCwgc3MsIEJPT1NUX1BQ
X1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTMob3AsIHN0
LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEzKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NF
UV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTQob3AsIHN0LCBz
cykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE0KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9T
SVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTUob3AsIHN0LCBzcykg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE1KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpF
KHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTYob3AsIHN0LCBzcykgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE2KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNz
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTcob3AsIHN0LCBzcykgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzE3KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTgob3AsIHN0LCBzcykgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzE4KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTkob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzE5KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMjAob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzIwKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMjEob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzIxKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfMjIob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzIyKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfMjMob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzIzKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfMjQob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI0
KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfMjUob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI1KG9w
LCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfMjYob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI2KG9wLCBz
dCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfMjcob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI3KG9wLCBzdCwg
c3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfMjgob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI4KG9wLCBzdCwgc3Ms
IEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Mjkob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI5KG9wLCBzdCwgc3MsIEJP
T1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMzAo
b3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzMwKG9wLCBzdCwgc3MsIEJPT1NU
X1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMzEob3As
IHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzMxKG9wLCBzdCwgc3MsIEJPT1NUX1BQ
X1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMzIob3AsIHN0
LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzMyKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NF
UV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMzMob3AsIHN0LCBz
cykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzMzKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9T
SVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMzQob3AsIHN0LCBzcykg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzM0KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpF
KHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMzUob3AsIHN0LCBzcykgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzM1KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNz
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMzYob3AsIHN0LCBzcykgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzM2KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMzcob3AsIHN0LCBzcykgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzM3KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMzgob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzM4KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMzkob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzM5KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNDAob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzQwKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfNDEob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzQxKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfNDIob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzQyKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfNDMob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQz
KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfNDQob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQ0KG9w
LCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfNDUob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQ1KG9wLCBz
dCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfNDYob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQ2KG9wLCBzdCwg
c3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfNDcob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQ3KG9wLCBzdCwgc3Ms
IEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
NDgob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQ4KG9wLCBzdCwgc3MsIEJP
T1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNDko
b3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQ5KG9wLCBzdCwgc3MsIEJPT1NU
X1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNTAob3As
IHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzUwKG9wLCBzdCwgc3MsIEJPT1NUX1BQ
X1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNTEob3AsIHN0
LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzUxKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NF
UV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNTIob3AsIHN0LCBz
cykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzUyKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9T
SVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNTMob3AsIHN0LCBzcykg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzUzKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpF
KHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNTQob3AsIHN0LCBzcykgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzU0KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNz
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNTUob3AsIHN0LCBzcykgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzU1KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNTYob3AsIHN0LCBzcykgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzU2KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNTcob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzU3KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNTgob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzU4KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNTkob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzU5KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfNjAob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzYwKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfNjEob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzYxKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfNjIob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzYy
KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfNjMob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzYzKG9w
LCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfNjQob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzY0KG9wLCBz
dCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfNjUob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzY1KG9wLCBzdCwg
c3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfNjYob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzY2KG9wLCBzdCwgc3Ms
IEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Njcob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzY3KG9wLCBzdCwgc3MsIEJP
T1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNjgo
b3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzY4KG9wLCBzdCwgc3MsIEJPT1NU
X1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNjkob3As
IHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzY5KG9wLCBzdCwgc3MsIEJPT1NUX1BQ
X1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNzAob3AsIHN0
LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzcwKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NF
UV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNzEob3AsIHN0LCBz
cykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzcxKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9T
SVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNzIob3AsIHN0LCBzcykg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzcyKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpF
KHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNzMob3AsIHN0LCBzcykgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzczKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNz
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNzQob3AsIHN0LCBzcykgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzc0KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNzUob3AsIHN0LCBzcykgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzc1KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNzYob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzc2KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNzcob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzc3KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfNzgob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzc4KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfNzkob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzc5KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfODAob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzgwKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfODEob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzgx
KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfODIob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzgyKG9w
LCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfODMob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzgzKG9wLCBz
dCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfODQob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzg0KG9wLCBzdCwg
c3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfODUob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzg1KG9wLCBzdCwgc3Ms
IEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
ODYob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzg2KG9wLCBzdCwgc3MsIEJP
T1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfODco
b3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzg3KG9wLCBzdCwgc3MsIEJPT1NU
X1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfODgob3As
IHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzg4KG9wLCBzdCwgc3MsIEJPT1NUX1BQ
X1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfODkob3AsIHN0
LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzg5KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NF
UV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfOTAob3AsIHN0LCBz
cykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzkwKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9T
SVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfOTEob3AsIHN0LCBzcykg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzkxKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpF
KHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfOTIob3AsIHN0LCBzcykgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzkyKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNz
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfOTMob3AsIHN0LCBzcykgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzkzKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfOTQob3AsIHN0LCBzcykgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzk0KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfOTUob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzk1KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfOTYob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzk2KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfOTcob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzk3KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfOTgob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzk4KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfOTkob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
Xzk5KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfMTAwKG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8x
MDAob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF8xMDEob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEw
MShvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUXzEwMihvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTAy
KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfMTAzKG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMDMo
b3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF8xMDQob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEwNChv
cCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUXzEwNShvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA1KG9w
LCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfMTA2KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMDYob3As
IHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF8xMDcob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEwNyhvcCwg
c3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUXzEwOChvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA4KG9wLCBz
dCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfMTA5KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMDkob3AsIHN0
LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF8xMTAob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzExMChvcCwgc3Qs
IHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUXzExMShvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTExKG9wLCBzdCwg
c3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfMTEyKG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMTIob3AsIHN0LCBz
cywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF8xMTMob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzExMyhvcCwgc3QsIHNz
LCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
XzExNChvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTE0KG9wLCBzdCwgc3Ms
IEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
MTE1KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMTUob3AsIHN0LCBzcywg
Qk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8x
MTYob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzExNihvcCwgc3QsIHNzLCBC
T09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzEx
NyhvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTE3KG9wLCBzdCwgc3MsIEJP
T1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTE4
KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMTgob3AsIHN0LCBzcywgQk9P
U1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xMTko
b3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzExOShvcCwgc3QsIHNzLCBCT09T
VF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzEyMChv
cCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTIwKG9wLCBzdCwgc3MsIEJPT1NU
X1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTIxKG9w
LCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMjEob3AsIHN0LCBzcywgQk9PU1Rf
UFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xMjIob3As
IHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEyMihvcCwgc3QsIHNzLCBCT09TVF9Q
UF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzEyMyhvcCwg
c3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTIzKG9wLCBzdCwgc3MsIEJPT1NUX1BQ
X1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTI0KG9wLCBz
dCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMjQob3AsIHN0LCBzcywgQk9PU1RfUFBf
U0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xMjUob3AsIHN0
LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEyNShvcCwgc3QsIHNzLCBCT09TVF9QUF9T
RVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzEyNihvcCwgc3Qs
IHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI2KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NF
UV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTI3KG9wLCBzdCwg
c3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMjcob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VR
X1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xMjgob3AsIHN0LCBz
cykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEyOChvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFf
U0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzEyOShvcCwgc3QsIHNz
KSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI5KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9T
SVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTMwKG9wLCBzdCwgc3Mp
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMzAob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJ
WkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xMzEob3AsIHN0LCBzcykg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEzMShvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0la
RShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzEzMihvcCwgc3QsIHNzKSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTMyKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpF
KHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTMzKG9wLCBzdCwgc3MpIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMzMob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUo
c3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xMzQob3AsIHN0LCBzcykgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEzNChvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShz
cykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzEzNShvcCwgc3QsIHNzKSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTM1KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNz
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTM2KG9wLCBzdCwgc3MpIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV8xMzYob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3Mp
KQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xMzcob3AsIHN0LCBzcykgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzEzNyhvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykp
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzEzOChvcCwgc3QsIHNzKSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTM4KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTM5KG9wLCBzdCwgc3MpIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV8xMzkob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xNDAob3AsIHN0LCBzcykgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzE0MChvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzE0MShvcCwgc3QsIHNzKSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTQxKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTQyKG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV8xNDIob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xNDMob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzE0MyhvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzE0NChvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTQ0KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTQ1KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8xNDUob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xNDYob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzE0NihvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzE0NyhvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTQ3KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTQ4KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV8xNDgob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xNDkob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzE0OShvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUXzE1MChvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTUwKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfMTUxKG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV8xNTEob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF8xNTIob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzE1MihvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUXzE1MyhvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTUzKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfMTU0KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV8xNTQob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF8xNTUob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzE1NShvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUXzE1NihvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTU2KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfMTU3KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8x
NTcob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF8xNTgob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE1
OChvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUXzE1OShvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTU5
KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfMTYwKG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNjAo
b3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF8xNjEob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE2MShv
cCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUXzE2MihvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTYyKG9w
LCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfMTYzKG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNjMob3As
IHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF8xNjQob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE2NChvcCwg
c3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUXzE2NShvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTY1KG9wLCBz
dCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfMTY2KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNjYob3AsIHN0
LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF8xNjcob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE2NyhvcCwgc3Qs
IHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUXzE2OChvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTY4KG9wLCBzdCwg
c3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfMTY5KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNjkob3AsIHN0LCBz
cywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF8xNzAob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE3MChvcCwgc3QsIHNz
LCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
XzE3MShvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTcxKG9wLCBzdCwgc3Ms
IEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
MTcyKG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNzIob3AsIHN0LCBzcywg
Qk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8x
NzMob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE3MyhvcCwgc3QsIHNzLCBC
T09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzE3
NChvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTc0KG9wLCBzdCwgc3MsIEJP
T1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTc1
KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNzUob3AsIHN0LCBzcywgQk9P
U1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xNzYo
b3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE3NihvcCwgc3QsIHNzLCBCT09T
VF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzE3Nyhv
cCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTc3KG9wLCBzdCwgc3MsIEJPT1NU
X1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTc4KG9w
LCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNzgob3AsIHN0LCBzcywgQk9PU1Rf
UFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xNzkob3As
IHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE3OShvcCwgc3QsIHNzLCBCT09TVF9Q
UF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzE4MChvcCwg
c3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTgwKG9wLCBzdCwgc3MsIEJPT1NUX1BQ
X1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTgxKG9wLCBz
dCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xODEob3AsIHN0LCBzcywgQk9PU1RfUFBf
U0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xODIob3AsIHN0
LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE4MihvcCwgc3QsIHNzLCBCT09TVF9QUF9T
RVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzE4MyhvcCwgc3Qs
IHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTgzKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NF
UV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTg0KG9wLCBzdCwg
c3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xODQob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VR
X1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xODUob3AsIHN0LCBz
cykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE4NShvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFf
U0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzE4NihvcCwgc3QsIHNz
KSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTg2KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9T
SVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTg3KG9wLCBzdCwgc3Mp
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xODcob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJ
WkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xODgob3AsIHN0LCBzcykg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE4OChvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0la
RShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzE4OShvcCwgc3QsIHNzKSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTg5KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpF
KHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTkwKG9wLCBzdCwgc3MpIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xOTAob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUo
c3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xOTEob3AsIHN0LCBzcykgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE5MShvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShz
cykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzE5MihvcCwgc3QsIHNzKSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTkyKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNz
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTkzKG9wLCBzdCwgc3MpIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV8xOTMob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3Mp
KQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xOTQob3AsIHN0LCBzcykgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzE5NChvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykp
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzE5NShvcCwgc3QsIHNzKSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTk1KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTk2KG9wLCBzdCwgc3MpIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV8xOTYob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8xOTcob3AsIHN0LCBzcykgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzE5NyhvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzE5OChvcCwgc3QsIHNzKSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTk4KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMTk5KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV8xOTkob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8yMDAob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzIwMChvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzIwMShvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMjAxKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMjAyKG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8yMDIob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8yMDMob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzIwMyhvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzIwNChvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMjA0KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMjA1KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV8yMDUob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8yMDYob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzIwNihvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUXzIwNyhvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMjA3KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfMjA4KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV8yMDgob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF8yMDkob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzIwOShvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUXzIxMChvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMjEwKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfMjExKG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV8yMTEob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF8yMTIob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzIxMihvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUXzIxMyhvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MjEzKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfMjE0KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8y
MTQob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF8yMTUob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIx
NShvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUXzIxNihvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE2
KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfMjE3KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMTco
b3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF8yMTgob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIxOChv
cCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUXzIxOShvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE5KG9w
LCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfMjIwKG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMjAob3As
IHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF8yMjEob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIyMShvcCwg
c3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUXzIyMihvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjIyKG9wLCBz
dCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfMjIzKG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMjMob3AsIHN0
LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF8yMjQob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIyNChvcCwgc3Qs
IHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUXzIyNShvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjI1KG9wLCBzdCwg
c3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfMjI2KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMjYob3AsIHN0LCBz
cywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF8yMjcob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIyNyhvcCwgc3QsIHNz
LCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
XzIyOChvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjI4KG9wLCBzdCwgc3Ms
IEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
MjI5KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMjkob3AsIHN0LCBzcywg
Qk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8y
MzAob3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIzMChvcCwgc3QsIHNzLCBC
T09TVF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzIz
MShvcCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjMxKG9wLCBzdCwgc3MsIEJP
T1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMjMy
KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMzIob3AsIHN0LCBzcywgQk9P
U1RfUFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8yMzMo
b3AsIHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIzMyhvcCwgc3QsIHNzLCBCT09T
VF9QUF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzIzNChv
cCwgc3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM0KG9wLCBzdCwgc3MsIEJPT1NU
X1BQX1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMjM1KG9w
LCBzdCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMzUob3AsIHN0LCBzcywgQk9PU1Rf
UFBfU0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8yMzYob3As
IHN0LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIzNihvcCwgc3QsIHNzLCBCT09TVF9Q
UF9TRVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzIzNyhvcCwg
c3QsIHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM3KG9wLCBzdCwgc3MsIEJPT1NUX1BQ
X1NFUV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMjM4KG9wLCBz
dCwgc3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMzgob3AsIHN0LCBzcywgQk9PU1RfUFBf
U0VRX1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8yMzkob3AsIHN0
LCBzcykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIzOShvcCwgc3QsIHNzLCBCT09TVF9QUF9T
RVFfU0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzI0MChvcCwgc3Qs
IHNzKSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQwKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NF
UV9TSVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMjQxKG9wLCBzdCwg
c3MpIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNDEob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VR
X1NJWkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8yNDIob3AsIHN0LCBz
cykgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI0MihvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFf
U0laRShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzI0MyhvcCwgc3QsIHNz
KSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQzKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9T
SVpFKHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMjQ0KG9wLCBzdCwgc3Mp
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNDQob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJ
WkUoc3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8yNDUob3AsIHN0LCBzcykg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI0NShvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0la
RShzcykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzI0NihvcCwgc3QsIHNzKSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQ2KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpF
KHNzKSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMjQ3KG9wLCBzdCwgc3MpIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNDcob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUo
c3MpKQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8yNDgob3AsIHN0LCBzcykgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI0OChvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShz
cykpCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzI0OShvcCwgc3QsIHNzKSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQ5KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNz
KSkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMjUwKG9wLCBzdCwgc3MpIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV8yNTAob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3Mp
KQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8yNTEob3AsIHN0LCBzcykgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzI1MShvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykp
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzI1MihvcCwgc3QsIHNzKSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMjUyKG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMjUzKG9wLCBzdCwgc3MpIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV8yNTMob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF8yNTQob3AsIHN0LCBzcykgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzI1NChvcCwgc3QsIHNzLCBCT09TVF9QUF9TRVFfU0laRShzcykpCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXzI1NShvcCwgc3QsIHNzKSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMjU1KG9wLCBzdCwgc3MsIEJPT1NUX1BQX1NFUV9TSVpFKHNzKSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfMjU2KG9wLCBzdCwgc3MpIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV8yNTYob3AsIHN0LCBzcywgQk9PU1RfUFBfU0VRX1NJWkUoc3MpKQotIwot
IyBpZiB+Qk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdfRE1DKCkKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xKG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMiwgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AoMiwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNz
KSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMywgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9GKShvcCwgb3AoMywgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NU
X1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV8zKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9GKShvcCwgb3AoNCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9U
QUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV80KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwg
b3AoNSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwg
Qk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV81
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfNiwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AoNiwgc3Qs
IEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBf
REVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV82KG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfNywgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AoNywgc3QsIEJPT1NUX1BQ
X1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV83KG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOCwg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AoOCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFE
KHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV84KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOSwgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9GKShvcCwgb3AoOSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJP
T1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV85KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTAsIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfRikob3AsIG9wKDEwLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBf
U0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzEwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTEsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Rikob3AsIG9wKDExLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RB
SUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzExKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3As
IG9wKDEyLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3Mp
LCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzEyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTMsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDEz
LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09T
VF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEzKG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTQsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDE0LCBzdCwg
Qk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9E
RUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE0KG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTUsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDE1LCBzdCwgQk9PU1Rf
UFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3op
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE1KG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTYsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDE2LCBzdCwgQk9PU1RfUFBfU0VR
X0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE2KG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTcsIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDE3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQo
c3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTgsIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDE4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwg
Qk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTksIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfRikob3AsIG9wKDE5LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1Rf
UFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzE5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAsIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfRikob3AsIG9wKDIwLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VR
X1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzIwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjEsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRiko
b3AsIG9wKDIxLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwo
c3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzIxKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMjIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9w
KDIyLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBC
T09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIy
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMjMsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDIzLCBz
dCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9Q
UF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIzKG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMjQsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDI0LCBzdCwgQk9P
U1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMo
c3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI0KG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMjUsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDI1LCBzdCwgQk9PU1RfUFBf
U0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI1KG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjYs
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDI2LCBzdCwgQk9PU1RfUFBfU0VRX0hF
QUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjcsIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDI3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3Mp
KSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjgsIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfRikob3AsIG9wKDI4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9P
U1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzI4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjksIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfRikob3AsIG9wKDI5LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBf
U0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzI5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMzAsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Rikob3AsIG9wKDMwLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RB
SUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzMwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMzEsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3As
IG9wKDMxLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3Mp
LCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzMxKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMzIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDMy
LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09T
VF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzMyKG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMzMsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDMzLCBzdCwg
Qk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9E
RUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzMzKG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMzQsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDM0LCBzdCwgQk9PU1Rf
UFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3op
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzM0KG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MzUsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDM1LCBzdCwgQk9PU1RfUFBfU0VR
X0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzM1KG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMzYsIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDM2LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQo
c3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzM2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMzcsIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDM3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwg
Qk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzM3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMzgsIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfRikob3AsIG9wKDM4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1Rf
UFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzM4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMzksIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfRikob3AsIG9wKDM5LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VR
X1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzM5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNDAsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRiko
b3AsIG9wKDQwLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwo
c3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzQwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfNDEsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9w
KDQxLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBC
T09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQx
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfNDIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDQyLCBz
dCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9Q
UF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQyKG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfNDMsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDQzLCBzdCwgQk9P
U1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMo
c3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQzKG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfNDQsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDQ0LCBzdCwgQk9PU1RfUFBf
U0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQ0KG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNDUs
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDQ1LCBzdCwgQk9PU1RfUFBfU0VRX0hF
QUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQ1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNDYsIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDQ2LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3Mp
KSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQ2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNDcsIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfRikob3AsIG9wKDQ3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9P
U1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzQ3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNDgsIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfRikob3AsIG9wKDQ4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBf
U0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzQ4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNDksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Rikob3AsIG9wKDQ5LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RB
SUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzQ5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNTAsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3As
IG9wKDUwLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3Mp
LCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzUwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfNTEsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDUx
LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09T
VF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzUxKG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfNTIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDUyLCBzdCwg
Qk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9E
RUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzUyKG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfNTMsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDUzLCBzdCwgQk9PU1Rf
UFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3op
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzUzKG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
NTQsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDU0LCBzdCwgQk9PU1RfUFBfU0VR
X0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzU0KG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNTUsIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDU1LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQo
c3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzU1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNTYsIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDU2LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwg
Qk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzU2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNTcsIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfRikob3AsIG9wKDU3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1Rf
UFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzU3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNTgsIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfRikob3AsIG9wKDU4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VR
X1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzU4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNTksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRiko
b3AsIG9wKDU5LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwo
c3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzU5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfNjAsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9w
KDYwLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBC
T09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzYw
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfNjEsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDYxLCBz
dCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9Q
UF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzYxKG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfNjIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDYyLCBzdCwgQk9P
U1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMo
c3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzYyKG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfNjMsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDYzLCBzdCwgQk9PU1RfUFBf
U0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzYzKG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNjQs
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDY0LCBzdCwgQk9PU1RfUFBfU0VRX0hF
QUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzY0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNjUsIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDY1LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3Mp
KSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzY1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNjYsIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfRikob3AsIG9wKDY2LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9P
U1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzY2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNjcsIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfRikob3AsIG9wKDY3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBf
U0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzY3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNjgsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Rikob3AsIG9wKDY4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RB
SUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzY4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNjksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3As
IG9wKDY5LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3Mp
LCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzY5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfNzAsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDcw
LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09T
VF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzcwKG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfNzEsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDcxLCBzdCwg
Qk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9E
RUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzcxKG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfNzIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDcyLCBzdCwgQk9PU1Rf
UFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3op
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzcyKG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
NzMsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDczLCBzdCwgQk9PU1RfUFBfU0VR
X0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzczKG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNzQsIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDc0LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQo
c3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzc0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNzUsIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDc1LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwg
Qk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzc1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNzYsIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfRikob3AsIG9wKDc2LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1Rf
UFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzc2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNzcsIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfRikob3AsIG9wKDc3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VR
X1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzc3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNzgsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRiko
b3AsIG9wKDc4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwo
c3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzc4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfNzksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9w
KDc5LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBC
T09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzc5
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfODAsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDgwLCBz
dCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9Q
UF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzgwKG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfODEsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDgxLCBzdCwgQk9P
U1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMo
c3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzgxKG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfODIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDgyLCBzdCwgQk9PU1RfUFBf
U0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzgyKG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfODMs
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDgzLCBzdCwgQk9PU1RfUFBfU0VRX0hF
QUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzgzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfODQsIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDg0LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3Mp
KSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzg0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfODUsIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfRikob3AsIG9wKDg1LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9P
U1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzg1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfODYsIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfRikob3AsIG9wKDg2LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBf
U0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzg2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfODcsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Rikob3AsIG9wKDg3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RB
SUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzg3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfODgsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3As
IG9wKDg4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3Mp
LCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
Xzg4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfODksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDg5
LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09T
VF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzg5KG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfOTAsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDkwLCBzdCwg
Qk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9E
RUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzkwKG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfOTEsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDkxLCBzdCwgQk9PU1Rf
UFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3op
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzkxKG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
OTIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDkyLCBzdCwgQk9PU1RfUFBfU0VR
X0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzkyKG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOTMsIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDkzLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQo
c3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzkzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOTQsIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDk0LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwg
Qk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzk0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOTUsIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfRikob3AsIG9wKDk1LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1Rf
UFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzk1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOTYsIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfRikob3AsIG9wKDk2LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VR
X1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzk2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOTcsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRiko
b3AsIG9wKDk3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwo
c3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzk3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfOTgsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9w
KDk4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBC
T09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzk4
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfOTksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wKDk5LCBz
dCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9Q
UF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzk5KG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTAwLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMDAsIHN0LCBC
T09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RF
QyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTAwKG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTAxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMDEsIHN0LCBCT09T
VF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhz
eikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTAxKG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTAyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMDIsIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTAyKG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTAzLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMDMsIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTAzKG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA0
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMDQsIHN0LCBCT09TVF9QUF9TRVFf
SEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA0KG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA1LCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMDUsIHN0LCBCT09TVF9QUF9TRVFfSEVB
RChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA2LCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMDYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChz
cykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA3LCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMDcsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykp
LCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA4LCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMDgsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBC
T09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA5LCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0YpKG9wLCBvcCgxMDksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09T
VF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTA5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTEwLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0YpKG9wLCBvcCgxMTAsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9Q
UF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTEwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTExLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0YpKG9wLCBvcCgxMTEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9T
RVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTExKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTEyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0YpKG9wLCBvcCgxMTIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFf
VEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTEyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTEzLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0Yp
KG9wLCBvcCgxMTMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJ
TChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTEzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTE0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9w
LCBvcCgxMTQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTE0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTE1LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBv
cCgxMTUsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyks
IEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTE1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTE2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgx
MTYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJP
T1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTE2
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTE3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMTcs
IHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NU
X1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTE3KG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTE4LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMTgsIHN0
LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQ
X0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTE4KG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTE5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMTksIHN0LCBC
T09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RF
QyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTE5KG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTIwLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMjAsIHN0LCBCT09T
VF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhz
eikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTIwKG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTIxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMjEsIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTIxKG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTIyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMjIsIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTIyKG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTIz
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMjMsIHN0LCBCT09TVF9QUF9TRVFf
SEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTIzKG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI0LCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMjQsIHN0LCBCT09TVF9QUF9TRVFfSEVB
RChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI1LCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMjUsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChz
cykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI2LCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMjYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykp
LCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI3LCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMjcsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBC
T09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI4LCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0YpKG9wLCBvcCgxMjgsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09T
VF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTI4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI5LCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0YpKG9wLCBvcCgxMjksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9Q
UF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTI5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTMwLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0YpKG9wLCBvcCgxMzAsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9T
RVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTMwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTMxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0YpKG9wLCBvcCgxMzEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFf
VEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTMxKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTMyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0Yp
KG9wLCBvcCgxMzIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJ
TChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTMyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTMzLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9w
LCBvcCgxMzMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTMzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTM0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBv
cCgxMzQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyks
IEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTM0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTM1LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgx
MzUsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJP
T1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTM1
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTM2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMzYs
IHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NU
X1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTM2KG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTM3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMzcsIHN0
LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQ
X0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTM3KG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTM4LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMzgsIHN0LCBC
T09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RF
QyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTM4KG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTM5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxMzksIHN0LCBCT09T
VF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhz
eikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTM5KG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTQwLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNDAsIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQwKG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTQxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNDEsIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQxKG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQy
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNDIsIHN0LCBCT09TVF9QUF9TRVFf
SEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQyKG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQzLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNDMsIHN0LCBCT09TVF9QUF9TRVFfSEVB
RChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ0LCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNDQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChz
cykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ1LCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNDUsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykp
LCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ2LCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNDYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBC
T09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ3LCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0YpKG9wLCBvcCgxNDcsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09T
VF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTQ3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ4LCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0YpKG9wLCBvcCgxNDgsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9Q
UF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTQ4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ5LCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0YpKG9wLCBvcCgxNDksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9T
RVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTQ5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTUwLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0YpKG9wLCBvcCgxNTAsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFf
VEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTUwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTUxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0Yp
KG9wLCBvcCgxNTEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJ
TChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTUxKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTUyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9w
LCBvcCgxNTIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTUyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTUzLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBv
cCgxNTMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyks
IEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTUzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTU0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgx
NTQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJP
T1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTU0
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTU1LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNTUs
IHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NU
X1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTU1KG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTU2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNTYsIHN0
LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQ
X0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTU2KG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTU3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNTcsIHN0LCBC
T09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RF
QyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTU3KG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTU4LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNTgsIHN0LCBCT09T
VF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhz
eikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTU4KG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTU5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNTksIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTU5KG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTYwLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNjAsIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTYwKG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTYx
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNjEsIHN0LCBCT09TVF9QUF9TRVFf
SEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTYxKG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTYyLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNjIsIHN0LCBCT09TVF9QUF9TRVFfSEVB
RChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTYyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTYzLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNjMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChz
cykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTYzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTY0LCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNjQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykp
LCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTY0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTY1LCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNjUsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBC
T09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTY1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTY2LCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0YpKG9wLCBvcCgxNjYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09T
VF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTY2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTY3LCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0YpKG9wLCBvcCgxNjcsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9Q
UF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTY3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTY4LCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0YpKG9wLCBvcCgxNjgsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9T
RVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTY4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTY5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0YpKG9wLCBvcCgxNjksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFf
VEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTY5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTcwLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0Yp
KG9wLCBvcCgxNzAsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJ
TChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTcwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTcxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9w
LCBvcCgxNzEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTcxKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTcyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBv
cCgxNzIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyks
IEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTcyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTczLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgx
NzMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJP
T1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTcz
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTc0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNzQs
IHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NU
X1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTc0KG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTc1LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNzUsIHN0
LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQ
X0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTc1KG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTc2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNzYsIHN0LCBC
T09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RF
QyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTc2KG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTc3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNzcsIHN0LCBCT09T
VF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhz
eikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTc3KG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTc4LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNzgsIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTc4KG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTc5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxNzksIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTc5KG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTgw
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxODAsIHN0LCBCT09TVF9QUF9TRVFf
SEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTgwKG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTgxLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxODEsIHN0LCBCT09TVF9QUF9TRVFfSEVB
RChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTgxKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTgyLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxODIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChz
cykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTgyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTgzLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxODMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykp
LCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTgzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTg0LCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxODQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBC
T09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTg0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTg1LCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0YpKG9wLCBvcCgxODUsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09T
VF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTg1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTg2LCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0YpKG9wLCBvcCgxODYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9Q
UF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTg2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTg3LCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0YpKG9wLCBvcCgxODcsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9T
RVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTg3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTg4LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0YpKG9wLCBvcCgxODgsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFf
VEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTg4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTg5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0Yp
KG9wLCBvcCgxODksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJ
TChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTg5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTkwLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9w
LCBvcCgxOTAsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTkwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTkxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBv
cCgxOTEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyks
IEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTkxKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTkyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgx
OTIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJP
T1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTky
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTkzLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxOTMs
IHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NU
X1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTkzKG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTk0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxOTQsIHN0
LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQ
X0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTk0KG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTk1LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxOTUsIHN0LCBC
T09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RF
QyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTk1KG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTk2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxOTYsIHN0LCBCT09T
VF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhz
eikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTk2KG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTk3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxOTcsIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTk3KG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTk4LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxOTgsIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTk4KG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTk5
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgxOTksIHN0LCBCT09TVF9QUF9TRVFf
SEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTk5KG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAwLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMDAsIHN0LCBCT09TVF9QUF9TRVFfSEVB
RChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAxLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMDEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChz
cykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAxKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAyLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMDIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykp
LCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAzLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMDMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBC
T09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjA0LCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0YpKG9wLCBvcCgyMDQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09T
VF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMjA0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjA1LCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0YpKG9wLCBvcCgyMDUsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9Q
UF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMjA1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjA2LCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0YpKG9wLCBvcCgyMDYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9T
RVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMjA2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjA3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0YpKG9wLCBvcCgyMDcsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFf
VEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMjA3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjA4LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0Yp
KG9wLCBvcCgyMDgsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJ
TChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMjA4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjA5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9w
LCBvcCgyMDksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMjA5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMjEwLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBv
cCgyMTAsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyks
IEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MjEwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMjExLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgy
MTEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJP
T1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjEx
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMjEyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMTIs
IHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NU
X1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjEyKG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMjEzLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMTMsIHN0
LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQ
X0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjEzKG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMjE0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMTQsIHN0LCBC
T09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RF
QyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE0KG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMjE1LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMTUsIHN0LCBCT09T
VF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhz
eikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE1KG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMjE2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMTYsIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE2KG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MjE3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMTcsIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE3KG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE4
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMTgsIHN0LCBCT09TVF9QUF9TRVFf
SEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE4KG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE5LCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMTksIHN0LCBCT09TVF9QUF9TRVFfSEVB
RChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjIwLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMjAsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChz
cykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjIwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjIxLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMjEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykp
LCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjIxKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjIyLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMjIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBC
T09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMjIyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjIzLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0YpKG9wLCBvcCgyMjMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09T
VF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMjIzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjI0LCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0YpKG9wLCBvcCgyMjQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9Q
UF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMjI0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjI1LCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0YpKG9wLCBvcCgyMjUsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9T
RVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMjI1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjI2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0YpKG9wLCBvcCgyMjYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFf
VEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMjI2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjI3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0Yp
KG9wLCBvcCgyMjcsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJ
TChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMjI3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjI4LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9w
LCBvcCgyMjgsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMjI4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMjI5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBv
cCgyMjksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyks
IEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MjI5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMjMwLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgy
MzAsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJP
T1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjMw
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMjMxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMzEs
IHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NU
X1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjMxKG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMjMyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMzIsIHN0
LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQ
X0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjMyKG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMjMzLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMzMsIHN0LCBC
T09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RF
QyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjMzKG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMjM0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMzQsIHN0LCBCT09T
VF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhz
eikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM0KG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMjM1LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMzUsIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM1KG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MjM2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMzYsIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM2KG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM3
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMzcsIHN0LCBCT09TVF9QUF9TRVFf
SEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM3KG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM4LCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMzgsIHN0LCBCT09TVF9QUF9TRVFfSEVB
RChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM5LCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyMzksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChz
cykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQwLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyNDAsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykp
LCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQxLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyNDEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBC
T09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQxKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQyLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0YpKG9wLCBvcCgyNDIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09T
VF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMjQyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQzLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0YpKG9wLCBvcCgyNDMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9Q
UF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMjQzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQ0LCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0YpKG9wLCBvcCgyNDQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9T
RVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMjQ0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQ1LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0YpKG9wLCBvcCgyNDUsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFf
VEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMjQ1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQ2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0Yp
KG9wLCBvcCgyNDYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJ
TChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMjQ2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQ3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9w
LCBvcCgyNDcsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMjQ3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQ4LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBv
cCgyNDgsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyks
IEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MjQ4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMjQ5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgy
NDksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJP
T1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQ5
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMjUwLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyNTAs
IHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NU
X1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjUwKG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMjUxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyNTEsIHN0
LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQ
X0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjUxKG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMjUyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyNTIsIHN0LCBC
T09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RF
QyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjUyKG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMjUzLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyNTMsIHN0LCBCT09T
VF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhz
eikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjUzKG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMjU0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyNTQsIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjU0KG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MjU1LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyNTUsIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjU1KG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjU2
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyNTYsIHN0LCBCT09TVF9QUF9TRVFf
SEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjU2KG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjU3LCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCgyNTcsIHN0LCBCT09TVF9QUF9TRVFfSEVB
RChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jIGVsc2UK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xKG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMiwg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyLCBzdCwgQk9PU1RfUFBfU0VRX0hF
QUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQ
X0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8zLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykp
LCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMyhvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9P
U1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQsIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfRikob3AsIG9wIyMoNCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NU
X1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV80KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9GKShvcCwgb3AjIyg1LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VR
X1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzUob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiks
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV82LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9w
LCBvcCMjKDYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfNihvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzcsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMo
Nywgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9P
U1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV83KG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfOCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIyg4LCBzdCwg
Qk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9E
RUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzgob3AsIHN0LCBz
cywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV85LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDksIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOShvcCwgc3QsIHNzLCBzeikg
Qk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEw
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDEwLCBzdCwgQk9PU1RfUFBfU0VR
X0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEwKG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTEsIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTEsIHN0LCBCT09TVF9QUF9TRVFfSEVB
RChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTEob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQ
X0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMiwgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxMiwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNz
KSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMihvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYo
Qk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEzLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDEzLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwg
Qk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQsIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfRikob3AsIG9wIyMoMTQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09T
VF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTQob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQ
X0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNSwgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9GKShvcCwgb3AjIygxNSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQ
X1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV8xNShvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVD
KHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0YpKG9wLCBvcCMjKDE2LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VR
X1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzE2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTcsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRiko
b3AsIG9wIyMoMTcsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJ
TChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTcob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xOCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwg
b3AjIygxOCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNz
KSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV8xOChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzE5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMj
KDE5LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBC
T09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE5
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMjAsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjAs
IHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NU
X1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAob3As
IHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8yMSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyMSwgc3Qs
IEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBf
REVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMShvcCwgc3Qs
IHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzIyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDIyLCBzdCwgQk9P
U1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMo
c3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIyKG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMjMsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjMsIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjMob3AsIHN0LCBzcywgc3op
IEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8y
NCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyNCwgc3QsIEJPT1NUX1BQX1NF
UV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNChvcCwgc3QsIHNzLCBzeikgQk9P
U1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI1LCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDI1LCBzdCwgQk9PU1RfUFBfU0VRX0hF
QUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjYsIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChz
cykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjYob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lG
KEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNywgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyNywgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSks
IEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNyhvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9P
U1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI4LCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0YpKG9wLCBvcCMjKDI4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9P
U1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzI4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjksIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfRikob3AsIG9wIyMoMjksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9Q
UF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMjkob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RF
QyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8zMCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9GKShvcCwgb3AjIygzMCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NF
UV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8zMChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6
KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzMxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0Yp
KG9wLCBvcCMjKDMxLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RB
SUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzMxKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMzIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3As
IG9wIyMoMzIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMzIob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV8zMywgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3Aj
IygzMywgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwg
Qk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8z
MyhvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzM0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDM0
LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09T
VF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzM0KG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMzUsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMzUsIHN0
LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQ
X0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMzUob3AsIHN0
LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV8zNiwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygzNiwgc3QsIEJP
T1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVD
KHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8zNihvcCwgc3QsIHNz
LCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzM3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDM3LCBzdCwgQk9PU1Rf
UFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3op
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzM3KG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MzgsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMzgsIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMzgob3AsIHN0LCBzcywgc3opIEJP
T1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8zOSwg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygzOSwgc3QsIEJPT1NUX1BQX1NFUV9I
RUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8zOShvcCwgc3QsIHNzLCBzeikgQk9PU1Rf
UFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQwLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDQwLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQo
c3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNDEsIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoNDEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykp
LCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNDEob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJP
T1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV80MiwgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9GKShvcCwgb3AjIyg0Miwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJP
T1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV80MihvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1Rf
UFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQzLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0YpKG9wLCBvcCMjKDQzLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1Rf
UFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzQzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNDQsIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfRikob3AsIG9wIyMoNDQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9T
RVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfNDQob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhz
eiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV80NSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9G
KShvcCwgb3AjIyg0NSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9U
QUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV80NShvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQ2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9w
LCBvcCMjKDQ2LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwo
c3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzQ2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfNDcsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9w
IyMoNDcsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyks
IEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
NDcob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV80OCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIyg0
OCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9P
U1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV80OChv
cCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzQ5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDQ5LCBz
dCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9Q
UF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzQ5KG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfNTAsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoNTAsIHN0LCBC
T09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RF
QyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNTAob3AsIHN0LCBz
cywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV81MSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIyg1MSwgc3QsIEJPT1NU
X1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6
KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV81MShvcCwgc3QsIHNzLCBz
eikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzUyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDUyLCBzdCwgQk9PU1RfUFBf
U0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzUyKG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNTMs
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoNTMsIHN0LCBCT09TVF9QUF9TRVFf
SEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNTMob3AsIHN0LCBzcywgc3opIEJPT1NU
X1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV81NCwgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIyg1NCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFE
KHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV81NChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBf
SUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzU1LCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDU1LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3Mp
KSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzU1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNTYsIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfRikob3AsIG9wIyMoNTYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBC
T09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfNTYob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NU
X1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV81NywgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9GKShvcCwgb3AjIyg1Nywgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NU
X1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV81NyhvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBf
REVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzU4LCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0YpKG9wLCBvcCMjKDU4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBf
U0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzU4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNTksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Rikob3AsIG9wIyMoNTksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFf
VEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfNTkob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiks
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV82MCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShv
cCwgb3AjIyg2MCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlM
KHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV82MChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzYxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBv
cCMjKDYxLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3Mp
LCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzYxKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfNjIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMo
NjIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJP
T1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNjIo
b3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV82MywgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIyg2Mywg
c3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1Rf
UFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV82MyhvcCwg
c3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzY0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDY0LCBzdCwg
Qk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9E
RUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzY0KG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfNjUsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoNjUsIHN0LCBCT09T
VF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhz
eikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNjUob3AsIHN0LCBzcywg
c3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV82NiwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIyg2Niwgc3QsIEJPT1NUX1BQ
X1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV82NihvcCwgc3QsIHNzLCBzeikg
Qk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzY3
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDY3LCBzdCwgQk9PU1RfUFBfU0VR
X0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzY3KG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNjgsIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoNjgsIHN0LCBCT09TVF9QUF9TRVFfSEVB
RChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNjgob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQ
X0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV82OSwgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIyg2OSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNz
KSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV82OShvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYo
Qk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzcwLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDcwLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwg
Qk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzcwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNzEsIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfRikob3AsIG9wIyMoNzEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09T
VF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfNzEob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQ
X0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV83MiwgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9GKShvcCwgb3AjIyg3Miwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQ
X1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV83MihvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVD
KHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzczLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0YpKG9wLCBvcCMjKDczLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VR
X1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzczKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNzQsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRiko
b3AsIG9wIyMoNzQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJ
TChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfNzQob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV83NSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwg
b3AjIyg3NSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNz
KSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV83NShvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzc2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMj
KDc2LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBC
T09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzc2
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfNzcsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoNzcs
IHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NU
X1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfNzcob3As
IHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV83OCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIyg3OCwgc3Qs
IEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBf
REVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV83OChvcCwgc3Qs
IHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzc5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDc5LCBzdCwgQk9P
U1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMo
c3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzc5KG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfODAsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoODAsIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfODAob3AsIHN0LCBzcywgc3op
IEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV84
MSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIyg4MSwgc3QsIEJPT1NUX1BQX1NF
UV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV84MShvcCwgc3QsIHNzLCBzeikgQk9P
U1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzgyLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDgyLCBzdCwgQk9PU1RfUFBfU0VRX0hF
QUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzgyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfODMsIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoODMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChz
cykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfODMob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lG
KEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV84NCwgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIyg4NCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSks
IEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV84NChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9P
U1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzg1LCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0YpKG9wLCBvcCMjKDg1LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9P
U1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzg1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfODYsIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfRikob3AsIG9wIyMoODYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9Q
UF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfODYob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RF
QyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV84NywgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9GKShvcCwgb3AjIyg4Nywgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NF
UV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV84NyhvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6
KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzg4LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0Yp
KG9wLCBvcCMjKDg4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RB
SUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzg4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfODksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3As
IG9wIyMoODksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfODkob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV85MCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3Aj
Iyg5MCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwg
Qk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV85
MChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzkxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDkx
LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09T
VF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzkxKG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfOTIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoOTIsIHN0
LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQ
X0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOTIob3AsIHN0
LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV85MywgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIyg5Mywgc3QsIEJP
T1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVD
KHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV85MyhvcCwgc3QsIHNz
LCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzk0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDk0LCBzdCwgQk9PU1Rf
UFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3op
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzk0KG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
OTUsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoOTUsIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOTUob3AsIHN0LCBzcywgc3opIEJP
T1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV85Niwg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIyg5Niwgc3QsIEJPT1NUX1BQX1NFUV9I
RUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV85NihvcCwgc3QsIHNzLCBzeikgQk9PU1Rf
UFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzk3LCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDk3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQo
c3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzk3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOTgsIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoOTgsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykp
LCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfOTgob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJP
T1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV85OSwgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9GKShvcCwgb3AjIyg5OSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJP
T1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV85OShvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1Rf
UFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEwMCwgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9GKShvcCwgb3AjIygxMDAsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09T
VF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTAwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTAxLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0YpKG9wLCBvcCMjKDEwMSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NU
X1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV8xMDEob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQ
X0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMDIsIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfRikob3AsIG9wIyMoMTAyLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1Rf
UFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzEwMihvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBf
REVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEwMywgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9GKShvcCwgb3AjIygxMDMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9Q
UF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTAzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA0LCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0YpKG9wLCBvcCMjKDEwNCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQ
X1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV8xMDQob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RF
QyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMDUsIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfRikob3AsIG9wIyMoMTA1LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBf
U0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzEwNShvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVD
KHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEwNiwgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9GKShvcCwgb3AjIygxMDYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9T
RVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTA2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTA3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0YpKG9wLCBvcCMjKDEwNywgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NF
UV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8xMDcob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhz
eiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMDgsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Rikob3AsIG9wIyMoMTA4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VR
X1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzEwOChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6
KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEwOSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9G
KShvcCwgb3AjIygxMDksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFf
VEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTA5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTEwLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0Yp
KG9wLCBvcCMjKDExMCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9U
QUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV8xMTAob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiks
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMTEsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRiko
b3AsIG9wIyMoMTExLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RB
SUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzExMShvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzExMiwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShv
cCwgb3AjIygxMTIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJ
TChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTEyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTEzLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9w
LCBvcCMjKDExMywgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlM
KHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV8xMTMob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMTQsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3As
IG9wIyMoMTE0LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwo
c3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzExNChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzExNSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwg
b3AjIygxMTUsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTE1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTE2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBv
cCMjKDExNiwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNz
KSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV8xMTYob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV8xMTcsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9w
IyMoMTE3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3Mp
LCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzExNyhvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzExOCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3Aj
IygxMTgsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyks
IEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTE4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTE5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMj
KDExOSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwg
Qk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8x
MTkob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV8xMjAsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMo
MTIwLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBC
T09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEy
MChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzEyMSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygx
MjEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJP
T1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTIx
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTIyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDEy
Miwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9P
U1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMjIo
b3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV8xMjMsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTIz
LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09T
VF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEyMyhv
cCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzEyNCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxMjQs
IHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NU
X1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI0KG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTI1LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDEyNSwg
c3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1Rf
UFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMjUob3As
IHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8xMjYsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTI2LCBz
dCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9Q
UF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEyNihvcCwg
c3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzEyNywgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxMjcsIHN0
LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQ
X0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTI3KG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTI4LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDEyOCwgc3Qs
IEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBf
REVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMjgob3AsIHN0
LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV8xMjksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTI5LCBzdCwg
Qk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9E
RUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEyOShvcCwgc3Qs
IHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzEzMCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxMzAsIHN0LCBC
T09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RF
QyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTMwKG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTMxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDEzMSwgc3QsIEJP
T1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVD
KHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMzEob3AsIHN0LCBz
cywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV8xMzIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTMyLCBzdCwgQk9P
U1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMo
c3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEzMihvcCwgc3QsIHNz
LCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzEzMywgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxMzMsIHN0LCBCT09T
VF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhz
eikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTMzKG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTM0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDEzNCwgc3QsIEJPT1NU
X1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6
KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMzQob3AsIHN0LCBzcywg
c3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV8xMzUsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTM1LCBzdCwgQk9PU1Rf
UFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3op
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEzNShvcCwgc3QsIHNzLCBz
eikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzEzNiwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxMzYsIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTM2KG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTM3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDEzNywgc3QsIEJPT1NUX1BQ
X1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xMzcob3AsIHN0LCBzcywgc3op
IEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8x
MzgsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTM4LCBzdCwgQk9PU1RfUFBf
U0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEzOChvcCwgc3QsIHNzLCBzeikg
Qk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzEz
OSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxMzksIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTM5KG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQw
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDE0MCwgc3QsIEJPT1NUX1BQX1NF
UV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNDAob3AsIHN0LCBzcywgc3opIEJP
T1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNDEs
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTQxLCBzdCwgQk9PU1RfUFBfU0VR
X0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE0MShvcCwgc3QsIHNzLCBzeikgQk9P
U1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE0Miwg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxNDIsIHN0LCBCT09TVF9QUF9TRVFf
SEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQyKG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQzLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDE0Mywgc3QsIEJPT1NUX1BQX1NFUV9I
RUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNDMob3AsIHN0LCBzcywgc3opIEJPT1NU
X1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNDQsIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTQ0LCBzdCwgQk9PU1RfUFBfU0VRX0hF
QUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE0NChvcCwgc3QsIHNzLCBzeikgQk9PU1Rf
UFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE0NSwgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxNDUsIHN0LCBCT09TVF9QUF9TRVFfSEVB
RChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ2LCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDE0Niwgc3QsIEJPT1NUX1BQX1NFUV9IRUFE
KHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNDYob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQ
X0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNDcsIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTQ3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQo
c3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE0NyhvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBf
SUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE0OCwgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxNDgsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChz
cykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTQ5LCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDE0OSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNz
KSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNDkob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lG
KEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNTAsIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTUwLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3Mp
KSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE1MChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYo
Qk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE1MSwgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxNTEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykp
LCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTUxKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTUyLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDE1Miwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSks
IEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNTIob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJP
T1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNTMsIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTUzLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwg
Qk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE1MyhvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9P
U1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE1NCwgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9GKShvcCwgb3AjIygxNTQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBC
T09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTU0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTU1LCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0YpKG9wLCBvcCMjKDE1NSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJP
T1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV8xNTUob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NU
X1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNTYsIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfRikob3AsIG9wIyMoMTU2LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9P
U1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzE1NihvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1Rf
UFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE1NywgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9GKShvcCwgb3AjIygxNTcsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09T
VF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTU3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTU4LCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0YpKG9wLCBvcCMjKDE1OCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NU
X1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV8xNTgob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQ
X0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNTksIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfRikob3AsIG9wIyMoMTU5LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1Rf
UFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzE1OShvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBf
REVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE2MCwgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9GKShvcCwgb3AjIygxNjAsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9Q
UF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTYwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTYxLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0YpKG9wLCBvcCMjKDE2MSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQ
X1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV8xNjEob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RF
QyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNjIsIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfRikob3AsIG9wIyMoMTYyLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBf
U0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzE2MihvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVD
KHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE2MywgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9GKShvcCwgb3AjIygxNjMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9T
RVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTYzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTY0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0YpKG9wLCBvcCMjKDE2NCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NF
UV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8xNjQob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhz
eiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNjUsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Rikob3AsIG9wIyMoMTY1LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VR
X1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzE2NShvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6
KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE2NiwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9G
KShvcCwgb3AjIygxNjYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFf
VEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTY2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTY3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0Yp
KG9wLCBvcCMjKDE2Nywgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9U
QUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV8xNjcob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiks
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNjgsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRiko
b3AsIG9wIyMoMTY4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RB
SUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzE2OChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE2OSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShv
cCwgb3AjIygxNjksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJ
TChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTY5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTcwLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9w
LCBvcCMjKDE3MCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlM
KHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV8xNzAob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNzEsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3As
IG9wIyMoMTcxLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwo
c3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzE3MShvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE3MiwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwg
b3AjIygxNzIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTcyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMTczLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBv
cCMjKDE3Mywgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNz
KSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV8xNzMob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV8xNzQsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9w
IyMoMTc0LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3Mp
LCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzE3NChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzE3NSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3Aj
IygxNzUsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyks
IEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTc1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMTc2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMj
KDE3Niwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwg
Qk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8x
NzYob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV8xNzcsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMo
MTc3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBC
T09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE3
NyhvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzE3OCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygx
NzgsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJP
T1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTc4
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMTc5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDE3
OSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9P
U1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xNzko
b3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV8xODAsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTgw
LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09T
VF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE4MChv
cCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzE4MSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxODEs
IHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NU
X1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTgxKG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMTgyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDE4Miwg
c3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1Rf
UFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xODIob3As
IHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8xODMsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTgzLCBz
dCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9Q
UF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE4MyhvcCwg
c3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzE4NCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxODQsIHN0
LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQ
X0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTg0KG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMTg1LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDE4NSwgc3Qs
IEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBf
REVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xODUob3AsIHN0
LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV8xODYsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTg2LCBzdCwg
Qk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9E
RUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE4NihvcCwgc3Qs
IHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzE4NywgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxODcsIHN0LCBC
T09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RF
QyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTg3KG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMTg4LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDE4OCwgc3QsIEJP
T1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVD
KHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xODgob3AsIHN0LCBz
cywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV8xODksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTg5LCBzdCwgQk9P
U1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMo
c3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE4OShvcCwgc3QsIHNz
LCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzE5MCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxOTAsIHN0LCBCT09T
VF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhz
eikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTkwKG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMTkxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDE5MSwgc3QsIEJPT1NU
X1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6
KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xOTEob3AsIHN0LCBzcywg
c3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV8xOTIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTkyLCBzdCwgQk9PU1Rf
UFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3op
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE5MihvcCwgc3QsIHNzLCBz
eikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzE5MywgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxOTMsIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTkzKG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MTk0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDE5NCwgc3QsIEJPT1NUX1BQ
X1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xOTQob3AsIHN0LCBzcywgc3op
IEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8x
OTUsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTk1LCBzdCwgQk9PU1RfUFBf
U0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE5NShvcCwgc3QsIHNzLCBzeikg
Qk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE5
NiwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxOTYsIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTk2KG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTk3
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDE5Nywgc3QsIEJPT1NUX1BQX1NF
UV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xOTcob3AsIHN0LCBzcywgc3opIEJP
T1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8xOTgs
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMTk4LCBzdCwgQk9PU1RfUFBfU0VR
X0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE5OChvcCwgc3QsIHNzLCBzeikgQk9P
U1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzE5OSwg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygxOTksIHN0LCBCT09TVF9QUF9TRVFf
SEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMTk5KG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAwLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDIwMCwgc3QsIEJPT1NUX1BQX1NFUV9I
RUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMDAob3AsIHN0LCBzcywgc3opIEJPT1NU
X1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMDEsIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjAxLCBzdCwgQk9PU1RfUFBfU0VRX0hF
QUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIwMShvcCwgc3QsIHNzLCBzeikgQk9PU1Rf
UFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIwMiwgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyMDIsIHN0LCBCT09TVF9QUF9TRVFfSEVB
RChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9Q
UF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjAzLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDIwMywgc3QsIEJPT1NUX1BQX1NFUV9IRUFE
KHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVm
aW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMDMob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQ
X0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMDQsIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjA0LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQo
c3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIwNChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBf
SUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIwNSwgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyMDUsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChz
cykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjA1KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9J
RihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjA2LCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDIwNiwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNz
KSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMDYob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lG
KEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMDcsIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjA3LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3Mp
KSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIwNyhvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYo
Qk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIwOCwgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyMDgsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykp
LCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjA4KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihC
T09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjA5LCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDIwOSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSks
IEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMDkob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJP
T1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMTAsIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjEwLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwg
Qk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIxMChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9P
U1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIxMSwgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9GKShvcCwgb3AjIygyMTEsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBC
T09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMjExKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09T
VF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjEyLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0YpKG9wLCBvcCMjKDIxMiwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJP
T1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV8yMTIob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NU
X1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMTMsIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfRikob3AsIG9wIyMoMjEzLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9P
U1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzIxMyhvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1Rf
UFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIxNCwgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9GKShvcCwgb3AjIygyMTQsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09T
VF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMjE0KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9Q
UF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE1LCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0YpKG9wLCBvcCMjKDIxNSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NU
X1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV8yMTUob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQ
X0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMTYsIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfRikob3AsIG9wIyMoMjE2LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1Rf
UFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzIxNihvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBf
REVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIxNywgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9GKShvcCwgb3AjIygyMTcsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9Q
UF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMjE3KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9E
RUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjE4LCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0YpKG9wLCBvcCMjKDIxOCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQ
X1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV8yMTgob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RF
QyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMTksIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfRikob3AsIG9wIyMoMjE5LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBf
U0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzIxOShvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVD
KHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIyMCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9GKShvcCwgb3AjIygyMjAsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9T
RVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMjIwKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMo
c3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjIxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0YpKG9wLCBvcCMjKDIyMSwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NF
UV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8yMjEob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhz
eiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMjIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
Rikob3AsIG9wIyMoMjIyLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VR
X1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzIyMihvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6
KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIyMywgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9G
KShvcCwgb3AjIygyMjMsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFf
VEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMjIzKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3op
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjI0LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0Yp
KG9wLCBvcCMjKDIyNCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9U
QUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV8yMjQob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiks
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMjUsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRiko
b3AsIG9wIyMoMjI1LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RB
SUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzIyNShvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIyNiwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShv
cCwgb3AjIygyMjYsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJ
TChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMjI2KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjI3LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9w
LCBvcCMjKDIyNywgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlM
KHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV8yMjcob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJP
T1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMjgsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3As
IG9wIyMoMjI4LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwo
c3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzIyOChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9P
U1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIyOSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwg
b3AjIygyMjksIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChz
cyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMjI5KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09T
VF9QUF9TRVFfRk9MRF9MRUZUX0lfMjMwLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBv
cCMjKDIzMCwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNz
KSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV8yMzAob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NU
X1BQX1NFUV9GT0xEX0xFRlRfSV8yMzEsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9w
IyMoMjMxLCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3Mp
LCBCT09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzIzMShvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1Rf
UFBfU0VRX0ZPTERfTEVGVF9JXzIzMiwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3Aj
IygyMzIsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyks
IEJPT1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MjMyKG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9Q
UF9TRVFfRk9MRF9MRUZUX0lfMjMzLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMj
KDIzMywgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwg
Qk9PU1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8y
MzMob3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQ
X1NFUV9GT0xEX0xFRlRfSV8yMzQsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMo
MjM0LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBC
T09TVF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIz
NChvcCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBf
U0VRX0ZPTERfTEVGVF9JXzIzNSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygy
MzUsIHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJP
T1NUX1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM1
KG9wLCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9T
RVFfRk9MRF9MRUZUX0lfMjM2LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDIz
Niwgc3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9P
U1RfUFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMzYo
b3AsIHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NF
UV9GT0xEX0xFRlRfSV8yMzcsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjM3
LCBzdCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09T
VF9QUF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzIzNyhv
cCwgc3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VR
X0ZPTERfTEVGVF9JXzIzOCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyMzgs
IHN0LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NU
X1BQX0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjM4KG9w
LCBzdCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFf
Rk9MRF9MRUZUX0lfMjM5LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDIzOSwg
c3QsIEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1Rf
UFBfREVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yMzkob3As
IHN0LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9G
T0xEX0xFRlRfSV8yNDAsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjQwLCBz
dCwgQk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9Q
UF9ERUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI0MChvcCwg
c3QsIHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZP
TERfTEVGVF9JXzI0MSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyNDEsIHN0
LCBCT09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQ
X0RFQyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQxKG9wLCBz
dCwgc3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9M
RF9MRUZUX0lfMjQyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDI0Miwgc3Qs
IEJPT1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBf
REVDKHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNDIob3AsIHN0
LCBzcywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xE
X0xFRlRfSV8yNDMsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjQzLCBzdCwg
Qk9PU1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9E
RUMoc3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI0MyhvcCwgc3Qs
IHNzLCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERf
TEVGVF9JXzI0NCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyNDQsIHN0LCBC
T09TVF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RF
QyhzeikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQ0KG9wLCBzdCwg
c3MsIHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9M
RUZUX0lfMjQ1LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDI0NSwgc3QsIEJP
T1NUX1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVD
KHN6KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNDUob3AsIHN0LCBz
cywgc3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xF
RlRfSV8yNDYsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjQ2LCBzdCwgQk9P
U1RfUFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMo
c3opKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI0NihvcCwgc3QsIHNz
LCBzeikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVG
VF9JXzI0NywgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyNDcsIHN0LCBCT09T
VF9QUF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhz
eikpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjQ3KG9wLCBzdCwgc3Ms
IHN6KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZU
X0lfMjQ4LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDI0OCwgc3QsIEJPT1NU
X1BQX1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6
KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNDgob3AsIHN0LCBzcywg
c3opIEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRf
SV8yNDksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjQ5LCBzdCwgQk9PU1Rf
UFBfU0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3op
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI0OShvcCwgc3QsIHNzLCBz
eikgQk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9J
XzI1MCwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyNTAsIHN0LCBCT09TVF9Q
UF9TRVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjUwKG9wLCBzdCwgc3MsIHN6
KSBCT09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lf
MjUxLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDI1MSwgc3QsIEJPT1NUX1BQ
X1NFUV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNTEob3AsIHN0LCBzcywgc3op
IEJPT1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8y
NTIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjUyLCBzdCwgQk9PU1RfUFBf
U0VRX0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI1MihvcCwgc3QsIHNzLCBzeikg
Qk9PU1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI1
MywgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyNTMsIHN0LCBCT09TVF9QUF9T
RVFfSEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjUzKG9wLCBzdCwgc3MsIHN6KSBC
T09TVF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjU0
LCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDI1NCwgc3QsIEJPT1NUX1BQX1NF
UV9IRUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNTQob3AsIHN0LCBzcywgc3opIEJP
T1NUX1BQX0lGKEJPT1NUX1BQX0RFQyhzeiksIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfSV8yNTUs
IEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfRikob3AsIG9wIyMoMjU1LCBzdCwgQk9PU1RfUFBfU0VR
X0hFQUQoc3MpKSwgQk9PU1RfUFBfU0VRX1RBSUwoc3MpLCBCT09TVF9QUF9ERUMoc3opKQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI1NShvcCwgc3QsIHNzLCBzeikgQk9P
U1RfUFBfSUYoQk9PU1RfUFBfREVDKHN6KSwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9JXzI1Niwg
Qk9PU1RfUFBfU0VRX0ZPTERfTEVGVF9GKShvcCwgb3AjIygyNTYsIHN0LCBCT09TVF9QUF9TRVFf
SEVBRChzcykpLCBCT09TVF9QUF9TRVFfVEFJTChzcyksIEJPT1NUX1BQX0RFQyhzeikpCi0jICAg
IGRlZmluZSBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjU2KG9wLCBzdCwgc3MsIHN6KSBCT09T
VF9QUF9JRihCT09TVF9QUF9ERUMoc3opLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUX0lfMjU3LCBC
T09TVF9QUF9TRVFfRk9MRF9MRUZUX0YpKG9wLCBvcCMjKDI1Nywgc3QsIEJPT1NUX1BQX1NFUV9I
RUFEKHNzKSksIEJPT1NUX1BQX1NFUV9UQUlMKHNzKSwgQk9PU1RfUFBfREVDKHN6KSkKLSMgZW5k
aWYKLSMKLSMgZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci9zZXEvZm9yX2VhY2hfaS5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3Ivc2VxL2Zvcl9lYWNo
X2kuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTAyOGQ3N2RlN2MyZGE2YWI3
NWNkMTJmYjBjNmRjY2VhZmNkOThlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3By
ZXByb2Nlc3Nvci9zZXEvZm9yX2VhY2hfaS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAs
MCBAQAotIyAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAg
KiAgICAgKEMpIENvcHlyaWdodCBQYXVsIE1lbnNvbmlkZXMgMjAwMi4KLSMgICogICAgIERpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNl
ZQotIyAgKiAgICAgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQK
LSMgICogICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSMgICogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICoKLSMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0jCi0jIC8qIFNlZSBodHRw
Oi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbi4gKi8KLSMKLSMgaWZuZGVm
IEJPT1NUX1BSRVBST0NFU1NPUl9TRVFfRk9SX0VBQ0hfSV9IUFAKLSMgZGVmaW5lIEJPT1NUX1BS
RVBST0NFU1NPUl9TRVFfRk9SX0VBQ0hfSV9IUFAKLSMKLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJv
Y2Vzc29yL2FyaXRobWV0aWMvZGVjLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29y
L2FyaXRobWV0aWMvaW5jLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbmZp
Zy9jb25maWcuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29udHJvbC9pZi5o
cHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb250cm9sL2lpZi5ocHA+Ci0jIGlu
Y2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL2Zvci5ocHA+Ci0jIGluY2x1ZGUg
PGJvb3N0L3ByZXByb2Nlc3Nvci9zZXEvc2VxLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJv
Y2Vzc29yL3NlcS9zaXplLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3NlcS9k
ZXRhaWwvaXNfZW1wdHkuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUv
ZWxlbS5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci90dXBsZS9yZW0uaHBwPgot
IwotIyAvKiBCT09TVF9QUF9TRVFfRk9SX0VBQ0hfSSAqLwotIwotIyBpZiB+Qk9PU1RfUFBfQ09O
RklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdfRURHKCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9GT1JfRUFDSF9JKG1hY3JvLCBkYXRhLCBzZXEpIEJPT1NUX1BQX1NFUV9GT1JfRUFDSF9J
X0RFVEFJTF9DSEVDSyhtYWNybywgZGF0YSwgc2VxKQotIyBlbHNlCi0jICAgIGRlZmluZSBCT09T
VF9QUF9TRVFfRk9SX0VBQ0hfSShtYWNybywgZGF0YSwgc2VxKSBCT09TVF9QUF9TRVFfRk9SX0VB
Q0hfSV9JKG1hY3JvLCBkYXRhLCBzZXEpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9SX0VB
Q0hfSV9JKG1hY3JvLCBkYXRhLCBzZXEpIEJPT1NUX1BQX1NFUV9GT1JfRUFDSF9JX0RFVEFJTF9D
SEVDSyhtYWNybywgZGF0YSwgc2VxKQotIyBlbmRpZgotIwotIyAgICBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPUl9FQUNIX0lfREVUQUlMX0NIRUNLX0VYRUMobWFjcm8sIGRhdGEsIHNlcSkgQk9PU1Rf
UFBfRk9SKChtYWNybywgZGF0YSwgc2VxLCAwLCBCT09TVF9QUF9TRVFfU0laRShzZXEpKSwgQk9P
U1RfUFBfU0VRX0ZPUl9FQUNIX0lfUCwgQk9PU1RfUFBfU0VRX0ZPUl9FQUNIX0lfTywgQk9PU1Rf
UFBfU0VRX0ZPUl9FQUNIX0lfTSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT1JfRUFDSF9J
X0RFVEFJTF9DSEVDS19FTVBUWShtYWNybywgZGF0YSwgc2VxKQotIwotIyAgICBkZWZpbmUgQk9P
U1RfUFBfU0VRX0ZPUl9FQUNIX0lfREVUQUlMX0NIRUNLKG1hY3JvLCBkYXRhLCBzZXEpIFwKLQkJ
Qk9PU1RfUFBfSUlGIFwKLQkJCSggXAotCQkJQk9PU1RfUFBfU0VRX0RFVEFJTF9JU19OT1RfRU1Q
VFkoc2VxKSwgXAotCQkJQk9PU1RfUFBfU0VRX0ZPUl9FQUNIX0lfREVUQUlMX0NIRUNLX0VYRUMs
IFwKLQkJCUJPT1NUX1BQX1NFUV9GT1JfRUFDSF9JX0RFVEFJTF9DSEVDS19FTVBUWSBcCi0JCQkp
IFwKLQkJKG1hY3JvLCBkYXRhLCBzZXEpIFwKLS8qKi8KLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9GT1JfRUFDSF9JX1AociwgeCkgQk9PU1RfUFBfVFVQTEVfRUxFTSg1LCA0LCB4KQotIwotIyBp
ZiBCT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19TVFJJQ1QoKQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPUl9FQUNIX0lfTyhyLCB4KSBCT09TVF9QUF9TRVFfRk9S
X0VBQ0hfSV9PX0kgeAotIyBlbHNlCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9SX0VBQ0hf
SV9PKHIsIHgpIEJPT1NUX1BQX1NFUV9GT1JfRUFDSF9JX09fSShCT09TVF9QUF9UVVBMRV9FTEVN
KDUsIDAsIHgpLCBCT09TVF9QUF9UVVBMRV9FTEVNKDUsIDEsIHgpLCBCT09TVF9QUF9UVVBMRV9F
TEVNKDUsIDIsIHgpLCBCT09TVF9QUF9UVVBMRV9FTEVNKDUsIDMsIHgpLCBCT09TVF9QUF9UVVBM
RV9FTEVNKDUsIDQsIHgpKQotIyBlbmRpZgotIwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPUl9F
QUNIX0lfT19JKG1hY3JvLCBkYXRhLCBzZXEsIGksIHN6KSBcCi0JQk9PU1RfUFBfU0VRX0ZPUl9F
QUNIX0lfT19JX0RFQyhtYWNybywgZGF0YSwgc2VxLCBpLCBCT09TVF9QUF9ERUMoc3opKSBcCi0v
KiovCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfRk9SX0VBQ0hfSV9PX0lfREVDKG1hY3JvLCBkYXRh
LCBzZXEsIGksIHN6KSBcCi0JKCBcCi0JbWFjcm8sIFwKLQlkYXRhLCBcCi0JQk9PU1RfUFBfSUYg
XAotCQkoIFwKLQkJc3osIFwKLQkJQk9PU1RfUFBfU0VRX0ZPUl9FQUNIX0lfT19JX1RBSUwsIFwK
LQkJQk9PU1RfUFBfU0VRX0ZPUl9FQUNIX0lfT19JX05JTCBcCi0JCSkgXAotCShzZXEpLCBcCi0J
Qk9PU1RfUFBfSU5DKGkpLCBcCi0Jc3ogXAotCSkgXAotLyoqLwotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPUl9FQUNIX0lfT19JX1RBSUwoc2VxKSBCT09TVF9QUF9TRVFfVEFJTChzZXEpCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfRk9SX0VBQ0hfSV9PX0lfTklMKHNlcSkgQk9PU1RfUFBfTklMCi0j
Ci0jIGlmIEJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX1NUUklDVCgp
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfRk9SX0VBQ0hfSV9NKHIsIHgpIEJPT1NUX1BQX1NF
UV9GT1JfRUFDSF9JX01fSU0ociwgQk9PU1RfUFBfVFVQTEVfUkVNXzUgeCkKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX1NFUV9GT1JfRUFDSF9JX01fSU0ociwgaW0pIEJPT1NUX1BQX1NFUV9GT1JfRUFD
SF9JX01fSShyLCBpbSkKLSMgZWxzZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPUl9FQUNI
X0lfTShyLCB4KSBCT09TVF9QUF9TRVFfRk9SX0VBQ0hfSV9NX0kociwgQk9PU1RfUFBfVFVQTEVf
RUxFTSg1LCAwLCB4KSwgQk9PU1RfUFBfVFVQTEVfRUxFTSg1LCAxLCB4KSwgQk9PU1RfUFBfVFVQ
TEVfRUxFTSg1LCAyLCB4KSwgQk9PU1RfUFBfVFVQTEVfRUxFTSg1LCAzLCB4KSwgQk9PU1RfUFBf
VFVQTEVfRUxFTSg1LCA0LCB4KSkKLSMgZW5kaWYKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9G
T1JfRUFDSF9JX01fSShyLCBtYWNybywgZGF0YSwgc2VxLCBpLCBzeikgbWFjcm8ociwgZGF0YSwg
aSwgQk9PU1RfUFBfU0VRX0hFQUQoc2VxKSkKLSMKLSMgLyogQk9PU1RfUFBfU0VRX0ZPUl9FQUNI
X0lfUiAqLwotIwotIyBpZiB+Qk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05G
SUdfRURHKCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT1JfRUFDSF9JX1IociwgbWFjcm8s
IGRhdGEsIHNlcSkgQk9PU1RfUFBfU0VRX0ZPUl9FQUNIX0lfUl9ERVRBSUxfQ0hFQ0sociwgbWFj
cm8sIGRhdGEsIHNlcSkKLSMgZWxzZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX0ZPUl9FQUNI
X0lfUihyLCBtYWNybywgZGF0YSwgc2VxKSBCT09TVF9QUF9TRVFfRk9SX0VBQ0hfSV9SX0kociwg
bWFjcm8sIGRhdGEsIHNlcSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT1JfRUFDSF9JX1Jf
SShyLCBtYWNybywgZGF0YSwgc2VxKSBCT09TVF9QUF9TRVFfRk9SX0VBQ0hfSV9SX0RFVEFJTF9D
SEVDSyhyLCBtYWNybywgZGF0YSwgc2VxKQotIyBlbmRpZgotIwotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfU0VRX0ZPUl9FQUNIX0lfUl9ERVRBSUxfQ0hFQ0tfRVhFQyhyLCBtYWNybywgZGF0YSwgc2Vx
KSBCT09TVF9QUF9GT1JfICMjIHIoKG1hY3JvLCBkYXRhLCBzZXEsIDAsIEJPT1NUX1BQX1NFUV9T
SVpFKHNlcSkpLCBCT09TVF9QUF9TRVFfRk9SX0VBQ0hfSV9QLCBCT09TVF9QUF9TRVFfRk9SX0VB
Q0hfSV9PLCBCT09TVF9QUF9TRVFfRk9SX0VBQ0hfSV9NKQotIyAgICBkZWZpbmUgQk9PU1RfUFBf
U0VRX0ZPUl9FQUNIX0lfUl9ERVRBSUxfQ0hFQ0tfRU1QVFkociwgbWFjcm8sIGRhdGEsIHNlcSkK
LSMKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9GT1JfRUFDSF9JX1JfREVUQUlMX0NIRUNLKHIs
IG1hY3JvLCBkYXRhLCBzZXEpIFwKLQkJQk9PU1RfUFBfSUlGIFwKLQkJCSggXAotCQkJQk9PU1Rf
UFBfU0VRX0RFVEFJTF9JU19OT1RfRU1QVFkoc2VxKSwgXAotCQkJQk9PU1RfUFBfU0VRX0ZPUl9F
QUNIX0lfUl9ERVRBSUxfQ0hFQ0tfRVhFQywgXAotCQkJQk9PU1RfUFBfU0VRX0ZPUl9FQUNIX0lf
Ul9ERVRBSUxfQ0hFQ0tfRU1QVFkgXAotCQkJKSBcCi0JCShyLCBtYWNybywgZGF0YSwgc2VxKSBc
Ci0vKiovCi0jCi0jIGVuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3Ivc2VxL3NlcS5ocHAgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3Ivc2VxL3NlcS5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1Y2E4NGM2ZjM5NDcxNjI4MzU0NjkzMWFjNDM3
N2FiNzk5ODFjNTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29y
L3NlcS9zZXEuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotIyAvKiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKgotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgKEMpIENvcHlyaWdo
dCBQYXVsIE1lbnNvbmlkZXMgMjAwMi4KLSMgICogICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBC
b29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiAgICAgYWNjb21w
YW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSMgICogICAgIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSMgICogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMg
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqICovCi0jCi0jIC8qIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBm
b3IgbW9zdCByZWNlbnQgdmVyc2lvbi4gKi8KLSMKLSMgaWZuZGVmIEJPT1NUX1BSRVBST0NFU1NP
Ul9TRVFfU0VRX0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX1NFUV9TRVFfSFBQCi0j
Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcD4KLSMgaW5j
bHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3NlcS9lbGVtLmhwcD4KLSMKLSMgLyogQk9PU1RfUFBf
U0VRX0hFQUQgKi8KLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9IRUFEKHNlcSkgQk9PU1RfUFBf
U0VRX0VMRU0oMCwgc2VxKQotIwotIyAvKiBCT09TVF9QUF9TRVFfVEFJTCAqLwotIwotIyBpZiBC
T09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQX0NPTkZJR19NV0NDKCkKLSMgICAgZGVm
aW5lIEJPT1NUX1BQX1NFUV9UQUlMKHNlcSkgQk9PU1RfUFBfU0VRX1RBSUxfMSgoc2VxKSkKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9UQUlMXzEocGFyKSBCT09TVF9QUF9TRVFfVEFJTF8yICMj
IHBhcgotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX1RBSUxfMihzZXEpIEJPT1NUX1BQX1NFUV9U
QUlMX0kgIyMgc2VxCi0jIGVsaWYgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9D
T05GSUdfTVNWQygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfVEFJTChzZXEpIEJPT1NUX1BQ
X1NFUV9UQUlMX0lEKEJPT1NUX1BQX1NFUV9UQUlMX0kgc2VxKQotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfU0VRX1RBSUxfSUQoaWQpIGlkCi0jIGVsaWYgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBC
T09TVF9QUF9DT05GSUdfRURHKCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9UQUlMKHNlcSkg
Qk9PU1RfUFBfU0VRX1RBSUxfRChzZXEpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfVEFJTF9E
KHNlcSkgQk9PU1RfUFBfU0VRX1RBSUxfSSBzZXEKLSMgZWxzZQotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfU0VRX1RBSUwoc2VxKSBCT09TVF9QUF9TRVFfVEFJTF9JIHNlcQotIyBlbmRpZgotIwotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX1RBSUxfSSh4KQotIwotIyAvKiBCT09TVF9QUF9TRVFfTklMICov
Ci0jCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfTklMKHgpICh4KQotIwotIyBlbmRpZgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vz
c29yL3NlcS9zaXplLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3ByZXByb2Nlc3Nvci9zZXEvc2l6ZS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGI1YzhkOWQwNTFmYWU0OWQ4ODAxNjJjOGYwNWFiMDBmMWM3MjViMTMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3NlcS9zaXplLmhwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDU0OCArMCwwIEBACi0jIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqCi0jICAqICAgICAoQykgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAy
LgotIyAgKiAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLiAoU2VlCi0jICAqICAgICBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotIyAgKiAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8x
XzAudHh0KQotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K
LSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9u
LiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX1NFUV9TSVpFX0hQUAotIyBkZWZp
bmUgQk9PU1RfUFJFUFJPQ0VTU09SX1NFUV9TSVpFX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9w
cmVwcm9jZXNzb3IvY2F0LmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbmZp
Zy9jb25maWcuaHBwPgotIwotIyBpZiBCT09TVF9QUF9DT05GSUdfRkxBR1MoKSAmIEJPT1NUX1BQ
X0NPTkZJR19NV0NDKCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFKHNlcSkgQk9PU1Rf
UFBfU0VRX1NJWkVfSSgoc2VxKSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0kocGFy
KSBCT09TVF9QUF9TRVFfU0laRV9JSSAjIyBwYXIKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9T
SVpFX0lJKHNlcSkgQk9PU1RfUFBfQ0FUKEJPT1NUX1BQX1NFUV9TSVpFXywgQk9PU1RfUFBfU0VR
X1NJWkVfMCAjIyBzZXEpCi0jIGVsaWYgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9Q
UF9DT05GSUdfRURHKCkgfHwgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05G
SUdfTVNWQygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRShzZXEpIEJPT1NUX1BQX1NF
UV9TSVpFX0koc2VxKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfSShzZXEpIEJPT1NU
X1BQX0NBVChCT09TVF9QUF9TRVFfU0laRV8sIEJPT1NUX1BQX1NFUV9TSVpFXzAgc2VxKQotIyBl
bGlmIGRlZmluZWQoX19JQk1DX18pIHx8IGRlZmluZWQoX19JQk1DUFBfXykKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX1NFUV9TSVpFKHNlcSkgQk9PU1RfUFBfQ0FUKEJPT1NUX1BQX1NFUV9TSVpFXywg
Qk9PU1RfUFBfQ0FUKEJPT1NUX1BQX1NFUV9TSVpFXzAsIHNlcSkpCi0jIGVsc2UKLSMgICAgZGVm
aW5lIEJPT1NUX1BQX1NFUV9TSVpFKHNlcSkgQk9PU1RfUFBfQ0FUKEJPT1NUX1BQX1NFUV9TSVpF
XywgQk9PU1RfUFBfU0VRX1NJWkVfMCBzZXEpCi0jIGVuZGlmCi0jCi0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV8wKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9TSVpFXzEoXykgQk9PU1RfUFBfU0VRX1NJWkVfMgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJ
WkVfMihfKSBCT09TVF9QUF9TRVFfU0laRV8zCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV8z
KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzQKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzQoXykg
Qk9PU1RfUFBfU0VRX1NJWkVfNQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfNShfKSBCT09T
VF9QUF9TRVFfU0laRV82Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV82KF8pIEJPT1NUX1BQ
X1NFUV9TSVpFXzcKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzcoXykgQk9PU1RfUFBfU0VR
X1NJWkVfOAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfOChfKSBCT09TVF9QUF9TRVFfU0la
RV85Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV85KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEw
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV8xMChfKSBCT09TVF9QUF9TRVFfU0laRV8xMQot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfMTEoXykgQk9PU1RfUFBfU0VRX1NJWkVfMTIKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzEyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEzCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfU0laRV8xMyhfKSBCT09TVF9QUF9TRVFfU0laRV8xNAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTQoXykgQk9PU1RfUFBfU0VRX1NJWkVfMTUKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9TSVpFXzE1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE2Ci0jIGRlZmluZSBC
T09TVF9QUF9TRVFfU0laRV8xNihfKSBCT09TVF9QUF9TRVFfU0laRV8xNwotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX1NJWkVfMTcoXykgQk9PU1RfUFBfU0VRX1NJWkVfMTgKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9TSVpFXzE4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE5Ci0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV8xOShfKSBCT09TVF9QUF9TRVFfU0laRV8yMAotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX1NJWkVfMjAoXykgQk9PU1RfUFBfU0VRX1NJWkVfMjEKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9TSVpFXzIxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
U0laRV8yMihfKSBCT09TVF9QUF9TRVFfU0laRV8yMwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJ
WkVfMjMoXykgQk9PU1RfUFBfU0VRX1NJWkVfMjQKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpF
XzI0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV8y
NShfKSBCT09TVF9QUF9TRVFfU0laRV8yNgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfMjYo
XykgQk9PU1RfUFBfU0VRX1NJWkVfMjcKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzI3KF8p
IEJPT1NUX1BQX1NFUV9TSVpFXzI4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV8yOChfKSBC
T09TVF9QUF9TRVFfU0laRV8yOQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfMjkoXykgQk9P
U1RfUFBfU0VRX1NJWkVfMzAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzMwKF8pIEJPT1NU
X1BQX1NFUV9TSVpFXzMxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV8zMShfKSBCT09TVF9Q
UF9TRVFfU0laRV8zMgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfMzIoXykgQk9PU1RfUFBf
U0VRX1NJWkVfMzMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzMzKF8pIEJPT1NUX1BQX1NF
UV9TSVpFXzM0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV8zNChfKSBCT09TVF9QUF9TRVFf
U0laRV8zNQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfMzUoXykgQk9PU1RfUFBfU0VRX1NJ
WkVfMzYKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzM2KF8pIEJPT1NUX1BQX1NFUV9TSVpF
XzM3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV8zNyhfKSBCT09TVF9QUF9TRVFfU0laRV8z
OAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfMzgoXykgQk9PU1RfUFBfU0VRX1NJWkVfMzkK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzM5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzQwCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV80MChfKSBCT09TVF9QUF9TRVFfU0laRV80MQotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfNDEoXykgQk9PU1RfUFBfU0VRX1NJWkVfNDIKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9TSVpFXzQyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzQzCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfU0laRV80MyhfKSBCT09TVF9QUF9TRVFfU0laRV80NAotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX1NJWkVfNDQoXykgQk9PU1RfUFBfU0VRX1NJWkVfNDUKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9TSVpFXzQ1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzQ2Ci0jIGRlZmluZSBCT09T
VF9QUF9TRVFfU0laRV80NihfKSBCT09TVF9QUF9TRVFfU0laRV80NwotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX1NJWkVfNDcoXykgQk9PU1RfUFBfU0VRX1NJWkVfNDgKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9TSVpFXzQ4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzQ5Ci0jIGRlZmluZSBCT09TVF9QUF9T
RVFfU0laRV80OShfKSBCT09TVF9QUF9TRVFfU0laRV81MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X1NJWkVfNTAoXykgQk9PU1RfUFBfU0VRX1NJWkVfNTEKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9T
SVpFXzUxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzUyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0la
RV81MihfKSBCT09TVF9QUF9TRVFfU0laRV81MwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVf
NTMoXykgQk9PU1RfUFBfU0VRX1NJWkVfNTQKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzU0
KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzU1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV81NShf
KSBCT09TVF9QUF9TRVFfU0laRV81NgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfNTYoXykg
Qk9PU1RfUFBfU0VRX1NJWkVfNTcKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzU3KF8pIEJP
T1NUX1BQX1NFUV9TSVpFXzU4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV81OChfKSBCT09T
VF9QUF9TRVFfU0laRV81OQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfNTkoXykgQk9PU1Rf
UFBfU0VRX1NJWkVfNjAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzYwKF8pIEJPT1NUX1BQ
X1NFUV9TSVpFXzYxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV82MShfKSBCT09TVF9QUF9T
RVFfU0laRV82MgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfNjIoXykgQk9PU1RfUFBfU0VR
X1NJWkVfNjMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzYzKF8pIEJPT1NUX1BQX1NFUV9T
SVpFXzY0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV82NChfKSBCT09TVF9QUF9TRVFfU0la
RV82NQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfNjUoXykgQk9PU1RfUFBfU0VRX1NJWkVf
NjYKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzY2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzY3
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV82NyhfKSBCT09TVF9QUF9TRVFfU0laRV82OAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfNjgoXykgQk9PU1RfUFBfU0VRX1NJWkVfNjkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzY5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzcwCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfU0laRV83MChfKSBCT09TVF9QUF9TRVFfU0laRV83MQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfNzEoXykgQk9PU1RfUFBfU0VRX1NJWkVfNzIKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9TSVpFXzcyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzczCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfU0laRV83MyhfKSBCT09TVF9QUF9TRVFfU0laRV83NAotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX1NJWkVfNzQoXykgQk9PU1RfUFBfU0VRX1NJWkVfNzUKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9TSVpFXzc1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzc2Ci0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV83NihfKSBCT09TVF9QUF9TRVFfU0laRV83NwotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX1NJWkVfNzcoXykgQk9PU1RfUFBfU0VRX1NJWkVfNzgKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9TSVpFXzc4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzc5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFf
U0laRV83OShfKSBCT09TVF9QUF9TRVFfU0laRV84MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJ
WkVfODAoXykgQk9PU1RfUFBfU0VRX1NJWkVfODEKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpF
XzgxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzgyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV84
MihfKSBCT09TVF9QUF9TRVFfU0laRV84MwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfODMo
XykgQk9PU1RfUFBfU0VRX1NJWkVfODQKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzg0KF8p
IEJPT1NUX1BQX1NFUV9TSVpFXzg1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV84NShfKSBC
T09TVF9QUF9TRVFfU0laRV84NgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfODYoXykgQk9P
U1RfUFBfU0VRX1NJWkVfODcKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzg3KF8pIEJPT1NU
X1BQX1NFUV9TSVpFXzg4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV84OChfKSBCT09TVF9Q
UF9TRVFfU0laRV84OQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfODkoXykgQk9PU1RfUFBf
U0VRX1NJWkVfOTAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzkwKF8pIEJPT1NUX1BQX1NF
UV9TSVpFXzkxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV85MShfKSBCT09TVF9QUF9TRVFf
U0laRV85MgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfOTIoXykgQk9PU1RfUFBfU0VRX1NJ
WkVfOTMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzkzKF8pIEJPT1NUX1BQX1NFUV9TSVpF
Xzk0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV85NChfKSBCT09TVF9QUF9TRVFfU0laRV85
NQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfOTUoXykgQk9PU1RfUFBfU0VRX1NJWkVfOTYK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFXzk2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzk3Ci0j
IGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV85NyhfKSBCT09TVF9QUF9TRVFfU0laRV85OAotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfOTgoXykgQk9PU1RfUFBfU0VRX1NJWkVfOTkKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9TSVpFXzk5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEwMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTAwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEwMQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTAxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEwMgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTAyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEwMwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTAzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEwNAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTA0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEwNQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTA1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEwNgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTA2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEwNwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTA3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEwOAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTA4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEwOQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTA5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzExMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTEwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzExMQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTExKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzExMgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTEyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzExMwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTEzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzExNAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTE0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzExNQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTE1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzExNgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTE2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzExNwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTE3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzExOAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTE4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzExOQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTE5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEyMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTIwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEyMQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTIxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEyMgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTIyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEyMwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTIzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEyNAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTI0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEyNQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTI1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEyNgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTI2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEyNwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTI3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEyOAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTI4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEyOQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTI5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEzMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTMwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEzMQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTMxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEzMgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTMyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEzMwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTMzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEzNAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTM0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEzNQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTM1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEzNgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTM2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEzNwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTM3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEzOAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTM4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzEzOQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTM5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE0MAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTQwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE0MQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTQxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE0MgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTQyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE0MwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTQzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE0NAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTQ0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE0NQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTQ1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE0NgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTQ2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE0NwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTQ3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE0OAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTQ4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE0OQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTQ5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE1MAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTUwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE1MQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTUxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE1MgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTUyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE1MwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTUzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE1NAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTU0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE1NQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTU1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE1NgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTU2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE1NwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTU3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE1OAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTU4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE1OQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTU5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE2MAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTYwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE2MQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTYxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE2MgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTYyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE2MwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTYzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE2NAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTY0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE2NQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTY1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE2NgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTY2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE2NwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTY3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE2OAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTY4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE2OQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTY5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE3MAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTcwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE3MQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTcxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE3MgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTcyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE3MwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTczKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE3NAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTc0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE3NQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTc1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE3NgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTc2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE3NwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTc3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE3OAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTc4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE3OQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTc5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE4MAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTgwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE4MQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTgxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE4MgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTgyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE4MwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTgzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE4NAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTg0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE4NQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTg1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE4NgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTg2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE4NwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTg3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE4OAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTg4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE4OQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTg5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE5MAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTkwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE5MQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTkxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE5MgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTkyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE5MwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTkzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE5NAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTk0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE5NQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTk1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE5NgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTk2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE5NwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTk3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE5OAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTk4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzE5OQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMTk5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIwMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjAwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIwMQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjAxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIwMgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjAyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIwMwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjAzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIwNAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjA0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIwNQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjA1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIwNgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjA2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIwNwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjA3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIwOAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjA4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIwOQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjA5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIxMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjEwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIxMQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjExKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIxMgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjEyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIxMwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjEzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIxNAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjE0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIxNQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjE1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIxNgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjE2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIxNwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjE3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIxOAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjE4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIxOQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjE5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIyMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjIwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIyMQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjIxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIyMgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjIyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIyMwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjIzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIyNAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjI0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIyNQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjI1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIyNgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjI2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIyNwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjI3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIyOAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjI4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIyOQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjI5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIzMAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjMwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIzMQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjMxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIzMgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjMyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIzMwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjMzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIzNAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjM0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIzNQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjM1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIzNgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjM2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIzNwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjM3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIzOAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjM4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzIzOQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjM5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI0MAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjQwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI0MQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjQxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI0MgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjQyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI0MwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjQzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI0NAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjQ0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI0NQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjQ1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI0NgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjQ2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI0NwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjQ3KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI0OAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjQ4KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI0OQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjQ5KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI1MAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjUwKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI1MQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjUxKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI1MgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjUyKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI1MwotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjUzKF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI1NAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjU0KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI1NQotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjU1KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI1NgotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfMjU2KF8pIEJPT1NUX1BQX1NFUV9TSVpFXzI1NwotIwotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfMCAwCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xIDEKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzIgMgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJ
WkVfQk9PU1RfUFBfU0VRX1NJWkVfMyAzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09T
VF9QUF9TRVFfU0laRV80IDQKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NF
UV9TSVpFXzUgNQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVf
NiA2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV83IDcKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzggOAotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfOSA5Ci0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMCAxMAotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfMTEgMTEKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpF
X0JPT1NUX1BQX1NFUV9TSVpFXzEyIDEyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09T
VF9QUF9TRVFfU0laRV8xMyAxMwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBf
U0VRX1NJWkVfMTQgMTQKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9T
SVpFXzE1IDE1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8x
NiAxNgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfMTcgMTcK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzE4IDE4Ci0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xOSAxOQotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfMjAgMjAKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzIxIDIxCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMiAyMgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJ
WkVfQk9PU1RfUFBfU0VRX1NJWkVfMjMgMjMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JP
T1NUX1BQX1NFUV9TSVpFXzI0IDI0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9Q
UF9TRVFfU0laRV8yNSAyNQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VR
X1NJWkVfMjYgMjYKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpF
XzI3IDI3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yOCAy
OAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfMjkgMjkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzMwIDMwCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8zMSAzMQotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfMzIgMzIKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzMzIDMzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
U0laRV9CT09TVF9QUF9TRVFfU0laRV8zNCAzNAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVf
Qk9PU1RfUFBfU0VRX1NJWkVfMzUgMzUKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NU
X1BQX1NFUV9TSVpFXzM2IDM2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9T
RVFfU0laRV8zNyAzNwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJ
WkVfMzggMzgKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzM5
IDM5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV80MCA0MAot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfNDEgNDEKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzQyIDQyCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV80MyA0MwotIyBkZWZpbmUgQk9PU1Rf
UFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfNDQgNDQKLSMgZGVmaW5lIEJPT1NUX1BQX1NF
UV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzQ1IDQ1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0la
RV9CT09TVF9QUF9TRVFfU0laRV80NiA0NgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9P
U1RfUFBfU0VRX1NJWkVfNDcgNDcKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQ
X1NFUV9TSVpFXzQ4IDQ4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFf
U0laRV80OSA0OQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVf
NTAgNTAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzUxIDUx
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV81MiA1MgotIyBk
ZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfNTMgNTMKLSMgZGVmaW5l
IEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzU0IDU0Ci0jIGRlZmluZSBCT09T
VF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV81NSA1NQotIyBkZWZpbmUgQk9PU1RfUFBf
U0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfNTYgNTYKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9T
SVpFX0JPT1NUX1BQX1NFUV9TSVpFXzU3IDU3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9C
T09TVF9QUF9TRVFfU0laRV81OCA1OAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1Rf
UFBfU0VRX1NJWkVfNTkgNTkKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NF
UV9TSVpFXzYwIDYwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0la
RV82MSA2MQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfNjIg
NjIKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzYzIDYzCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV82NCA2NAotIyBkZWZp
bmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfNjUgNjUKLSMgZGVmaW5lIEJP
T1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzY2IDY2Ci0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV82NyA2NwotIyBkZWZpbmUgQk9PU1RfUFBfU0VR
X1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfNjggNjgKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpF
X0JPT1NUX1BQX1NFUV9TSVpFXzY5IDY5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09T
VF9QUF9TRVFfU0laRV83MCA3MAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBf
U0VRX1NJWkVfNzEgNzEKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9T
SVpFXzcyIDcyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV83
MyA3MwotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfNzQgNzQK
LSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzc1IDc1Ci0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV83NiA3NgotIyBkZWZpbmUg
Qk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfNzcgNzcKLSMgZGVmaW5lIEJPT1NU
X1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzc4IDc4Ci0jIGRlZmluZSBCT09TVF9QUF9T
RVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV83OSA3OQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJ
WkVfQk9PU1RfUFBfU0VRX1NJWkVfODAgODAKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JP
T1NUX1BQX1NFUV9TSVpFXzgxIDgxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9Q
UF9TRVFfU0laRV84MiA4MgotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VR
X1NJWkVfODMgODMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpF
Xzg0IDg0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV84NSA4
NQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfODYgODYKLSMg
ZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzg3IDg3Ci0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV84OCA4OAotIyBkZWZpbmUgQk9P
U1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfODkgODkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzkwIDkwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
U0laRV9CT09TVF9QUF9TRVFfU0laRV85MSA5MQotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVf
Qk9PU1RfUFBfU0VRX1NJWkVfOTIgOTIKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NU
X1BQX1NFUV9TSVpFXzkzIDkzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9T
RVFfU0laRV85NCA5NAotIyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJ
WkVfOTUgOTUKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzk2
IDk2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV85NyA5Nwot
IyBkZWZpbmUgQk9PU1RfUFBfU0VRX1NJWkVfQk9PU1RfUFBfU0VRX1NJWkVfOTggOTgKLSMgZGVm
aW5lIEJPT1NUX1BQX1NFUV9TSVpFX0JPT1NUX1BQX1NFUV9TSVpFXzk5IDk5Ci0jIGRlZmluZSBC
T09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMDAgMTAwCi0jIGRlZmluZSBCT09T
VF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMDEgMTAxCi0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMDIgMTAyCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMDMgMTAzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
U0laRV9CT09TVF9QUF9TRVFfU0laRV8xMDQgMTA0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0la
RV9CT09TVF9QUF9TRVFfU0laRV8xMDUgMTA1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9C
T09TVF9QUF9TRVFfU0laRV8xMDYgMTA2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09T
VF9QUF9TRVFfU0laRV8xMDcgMTA3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9Q
UF9TRVFfU0laRV8xMDggMTA4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9T
RVFfU0laRV8xMDkgMTA5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFf
U0laRV8xMTAgMTEwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0la
RV8xMTEgMTExCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8x
MTIgMTEyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMTMg
MTEzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMTQgMTE0
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMTUgMTE1Ci0j
IGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMTYgMTE2Ci0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMTcgMTE3Ci0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMTggMTE4Ci0jIGRlZmluZSBC
T09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMTkgMTE5Ci0jIGRlZmluZSBCT09T
VF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMjAgMTIwCi0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMjEgMTIxCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMjIgMTIyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
U0laRV9CT09TVF9QUF9TRVFfU0laRV8xMjMgMTIzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0la
RV9CT09TVF9QUF9TRVFfU0laRV8xMjQgMTI0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9C
T09TVF9QUF9TRVFfU0laRV8xMjUgMTI1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09T
VF9QUF9TRVFfU0laRV8xMjYgMTI2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9Q
UF9TRVFfU0laRV8xMjcgMTI3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9T
RVFfU0laRV8xMjggMTI4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFf
U0laRV8xMjkgMTI5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0la
RV8xMzAgMTMwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8x
MzEgMTMxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMzIg
MTMyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMzMgMTMz
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMzQgMTM0Ci0j
IGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMzUgMTM1Ci0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMzYgMTM2Ci0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMzcgMTM3Ci0jIGRlZmluZSBC
T09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMzggMTM4Ci0jIGRlZmluZSBCT09T
VF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xMzkgMTM5Ci0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNDAgMTQwCi0jIGRlZmluZSBCT09TVF9QUF9T
RVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNDEgMTQxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
U0laRV9CT09TVF9QUF9TRVFfU0laRV8xNDIgMTQyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0la
RV9CT09TVF9QUF9TRVFfU0laRV8xNDMgMTQzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9C
T09TVF9QUF9TRVFfU0laRV8xNDQgMTQ0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09T
VF9QUF9TRVFfU0laRV8xNDUgMTQ1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9Q
UF9TRVFfU0laRV8xNDYgMTQ2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9T
RVFfU0laRV8xNDcgMTQ3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFf
U0laRV8xNDggMTQ4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0la
RV8xNDkgMTQ5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8x
NTAgMTUwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNTEg
MTUxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNTIgMTUy
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNTMgMTUzCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNTQgMTU0Ci0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNTUgMTU1Ci0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNTYgMTU2Ci0jIGRlZmluZSBC
T09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNTcgMTU3Ci0jIGRlZmluZSBCT09T
VF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNTggMTU4Ci0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNTkgMTU5Ci0jIGRlZmluZSBCT09TVF9QUF9T
RVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNjAgMTYwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFf
U0laRV9CT09TVF9QUF9TRVFfU0laRV8xNjEgMTYxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0la
RV9CT09TVF9QUF9TRVFfU0laRV8xNjIgMTYyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9C
T09TVF9QUF9TRVFfU0laRV8xNjMgMTYzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09T
VF9QUF9TRVFfU0laRV8xNjQgMTY0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9Q
UF9TRVFfU0laRV8xNjUgMTY1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9T
RVFfU0laRV8xNjYgMTY2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFf
U0laRV8xNjcgMTY3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0la
RV8xNjggMTY4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8x
NjkgMTY5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNzAg
MTcwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNzEgMTcx
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNzIgMTcyCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNzMgMTczCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNzQgMTc0Ci0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNzUgMTc1Ci0jIGRlZmluZSBC
T09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNzYgMTc2Ci0jIGRlZmluZSBCT09T
VF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNzcgMTc3Ci0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNzggMTc4Ci0jIGRlZmluZSBCT09TVF9QUF9T
RVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xNzkgMTc5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFf
U0laRV9CT09TVF9QUF9TRVFfU0laRV8xODAgMTgwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0la
RV9CT09TVF9QUF9TRVFfU0laRV8xODEgMTgxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9C
T09TVF9QUF9TRVFfU0laRV8xODIgMTgyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09T
VF9QUF9TRVFfU0laRV8xODMgMTgzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9Q
UF9TRVFfU0laRV8xODQgMTg0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9T
RVFfU0laRV8xODUgMTg1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFf
U0laRV8xODYgMTg2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0la
RV8xODcgMTg3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8x
ODggMTg4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xODkg
MTg5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xOTAgMTkw
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xOTEgMTkxCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xOTIgMTkyCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xOTMgMTkzCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xOTQgMTk0Ci0jIGRlZmluZSBC
T09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xOTUgMTk1Ci0jIGRlZmluZSBCT09T
VF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xOTYgMTk2Ci0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xOTcgMTk3Ci0jIGRlZmluZSBCT09TVF9QUF9T
RVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8xOTggMTk4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFf
U0laRV9CT09TVF9QUF9TRVFfU0laRV8xOTkgMTk5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0la
RV9CT09TVF9QUF9TRVFfU0laRV8yMDAgMjAwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9C
T09TVF9QUF9TRVFfU0laRV8yMDEgMjAxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09T
VF9QUF9TRVFfU0laRV8yMDIgMjAyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9Q
UF9TRVFfU0laRV8yMDMgMjAzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9T
RVFfU0laRV8yMDQgMjA0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFf
U0laRV8yMDUgMjA1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0la
RV8yMDYgMjA2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8y
MDcgMjA3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMDgg
MjA4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMDkgMjA5
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMTAgMjEwCi0j
IGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMTEgMjExCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMTIgMjEyCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMTMgMjEzCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMTQgMjE0Ci0jIGRlZmluZSBCT09T
VF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMTUgMjE1Ci0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMTYgMjE2Ci0jIGRlZmluZSBCT09TVF9QUF9T
RVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMTcgMjE3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFf
U0laRV9CT09TVF9QUF9TRVFfU0laRV8yMTggMjE4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0la
RV9CT09TVF9QUF9TRVFfU0laRV8yMTkgMjE5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9C
T09TVF9QUF9TRVFfU0laRV8yMjAgMjIwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09T
VF9QUF9TRVFfU0laRV8yMjEgMjIxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9Q
UF9TRVFfU0laRV8yMjIgMjIyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9T
RVFfU0laRV8yMjMgMjIzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFf
U0laRV8yMjQgMjI0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0la
RV8yMjUgMjI1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8y
MjYgMjI2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMjcg
MjI3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMjggMjI4
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMjkgMjI5Ci0j
IGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMzAgMjMwCi0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMzEgMjMxCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMzIgMjMyCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMzMgMjMzCi0jIGRlZmluZSBCT09T
VF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMzQgMjM0Ci0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMzUgMjM1Ci0jIGRlZmluZSBCT09TVF9QUF9T
RVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yMzYgMjM2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFf
U0laRV9CT09TVF9QUF9TRVFfU0laRV8yMzcgMjM3Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0la
RV9CT09TVF9QUF9TRVFfU0laRV8yMzggMjM4Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9C
T09TVF9QUF9TRVFfU0laRV8yMzkgMjM5Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09T
VF9QUF9TRVFfU0laRV8yNDAgMjQwCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9Q
UF9TRVFfU0laRV8yNDEgMjQxCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9T
RVFfU0laRV8yNDIgMjQyCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFf
U0laRV8yNDMgMjQzCi0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0la
RV8yNDQgMjQ0Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8y
NDUgMjQ1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yNDYg
MjQ2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yNDcgMjQ3
Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yNDggMjQ4Ci0j
IGRlZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yNDkgMjQ5Ci0jIGRl
ZmluZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yNTAgMjUwCi0jIGRlZmlu
ZSBCT09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yNTEgMjUxCi0jIGRlZmluZSBC
T09TVF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yNTIgMjUyCi0jIGRlZmluZSBCT09T
VF9QUF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yNTMgMjUzCi0jIGRlZmluZSBCT09TVF9Q
UF9TRVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yNTQgMjU0Ci0jIGRlZmluZSBCT09TVF9QUF9T
RVFfU0laRV9CT09TVF9QUF9TRVFfU0laRV8yNTUgMjU1Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFf
U0laRV9CT09TVF9QUF9TRVFfU0laRV8yNTYgMjU2Ci0jIGRlZmluZSBCT09TVF9QUF9TRVFfU0la
RV9CT09TVF9QUF9TRVFfU0laRV8yNTcgMjU3Ci0jCi0jIGVuZGlmCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3Ivc2VxL3Ry
YW5zZm9ybS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9w
cmVwcm9jZXNzb3Ivc2VxL3RyYW5zZm9ybS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDc5ZDgxMDhkMzYyYjE2YmU3OGNmOThkOTE4N2JiZGFiMDA1MzA2NzUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3NlcS90cmFuc2Zvcm0uaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotIyAvKiAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKgotIyAgKiAgICAgKEMpIENvcHlyaWdodCBQYXVsIE1lbnNvbmlkZXMg
MjAwMi4KLSMgICogICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNl
bnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiAgICAgYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQKLSMgICogICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VO
U0VfMV8wLnR4dCkKLSMgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMgICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
ICovCi0jCi0jIC8qIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVy
c2lvbi4gKi8KLSMKLSMgaWZuZGVmIEJPT1NUX1BSRVBST0NFU1NPUl9TRVFfVFJBTlNGT1JNX0hQ
UAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09SX1NFUV9UUkFOU0ZPUk1fSFBQCi0jCi0jIGlu
Y2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcD4KLSMgaW5jbHVkZSA8
Ym9vc3QvcHJlcHJvY2Vzc29yL3NlcS9mb2xkX2xlZnQuaHBwPgotIyBpbmNsdWRlIDxib29zdC9w
cmVwcm9jZXNzb3Ivc2VxL3NlcS5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci90
dXBsZS9lbGVtLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3R1cGxlL3JlbS5o
cHA+Ci0jCi0jIC8qIEJPT1NUX1BQX1NFUV9UUkFOU0ZPUk0gKi8KLSMKLSMgaWYgfkJPT1NUX1BQ
X0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX0VERygpCi0jICAgIGRlZmluZSBCT09T
VF9QUF9TRVFfVFJBTlNGT1JNKG9wLCBkYXRhLCBzZXEpIEJPT1NUX1BQX1NFUV9UQUlMKEJPT1NU
X1BQX1RVUExFX0VMRU0oMywgMiwgQk9PU1RfUFBfU0VRX0ZPTERfTEVGVChCT09TVF9QUF9TRVFf
VFJBTlNGT1JNX08sIChvcCwgZGF0YSwgKG5pbCkpLCBzZXEpKSkKLSMgZWxzZQotIyAgICBkZWZp
bmUgQk9PU1RfUFBfU0VRX1RSQU5TRk9STShvcCwgZGF0YSwgc2VxKSBCT09TVF9QUF9TRVFfVFJB
TlNGT1JNX0kob3AsIGRhdGEsIHNlcSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9UUkFOU0ZP
Uk1fSShvcCwgZGF0YSwgc2VxKSBCT09TVF9QUF9TRVFfVEFJTChCT09TVF9QUF9UVVBMRV9FTEVN
KDMsIDIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlQoQk9PU1RfUFBfU0VRX1RSQU5TRk9STV9PLCAo
b3AsIGRhdGEsIChuaWwpKSwgc2VxKSkpCi0jIGVuZGlmCi0jCi0jIGlmIEJPT1NUX1BQX0NPTkZJ
R19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX1NUUklDVCgpCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9TRVFfVFJBTlNGT1JNX08ocywgc3RhdGUsIGVsZW0pIEJPT1NUX1BQX1NFUV9UUkFOU0ZPUk1f
T19JTShzLCBCT09TVF9QUF9UVVBMRV9SRU1fMyBzdGF0ZSwgZWxlbSkKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX1NFUV9UUkFOU0ZPUk1fT19JTShzLCBpbSwgZWxlbSkgQk9PU1RfUFBfU0VRX1RSQU5T
Rk9STV9PX0kocywgaW0sIGVsZW0pCi0jIGVsc2UKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9U
UkFOU0ZPUk1fTyhzLCBzdGF0ZSwgZWxlbSkgQk9PU1RfUFBfU0VRX1RSQU5TRk9STV9PX0kocywg
Qk9PU1RfUFBfVFVQTEVfRUxFTSgzLCAwLCBzdGF0ZSksIEJPT1NUX1BQX1RVUExFX0VMRU0oMywg
MSwgc3RhdGUpLCBCT09TVF9QUF9UVVBMRV9FTEVNKDMsIDIsIHN0YXRlKSwgZWxlbSkKLSMgZW5k
aWYKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1NFUV9UUkFOU0ZPUk1fT19JKHMsIG9wLCBkYXRhLCBy
ZXMsIGVsZW0pIChvcCwgZGF0YSwgcmVzIChvcChzLCBkYXRhLCBlbGVtKSkpCi0jCi0jIC8qIEJP
T1NUX1BQX1NFUV9UUkFOU0ZPUk1fUyAqLwotIwotIyBpZiB+Qk9PU1RfUFBfQ09ORklHX0ZMQUdT
KCkgJiBCT09TVF9QUF9DT05GSUdfRURHKCkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NFUV9UUkFO
U0ZPUk1fUyhzLCBvcCwgZGF0YSwgc2VxKSBCT09TVF9QUF9TRVFfVEFJTChCT09TVF9QUF9UVVBM
RV9FTEVNKDMsIDIsIEJPT1NUX1BQX1NFUV9GT0xEX0xFRlRfICMjIHMoQk9PU1RfUFBfU0VRX1RS
QU5TRk9STV9PLCAob3AsIGRhdGEsIChuaWwpKSwgc2VxKSkpCi0jIGVsc2UKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX1NFUV9UUkFOU0ZPUk1fUyhzLCBvcCwgZGF0YSwgc2VxKSBCT09TVF9QUF9TRVFf
VFJBTlNGT1JNX1NfSShzLCBvcCwgZGF0YSwgc2VxKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU0VR
X1RSQU5TRk9STV9TX0kocywgb3AsIGRhdGEsIHNlcSkgQk9PU1RfUFBfU0VRX1RBSUwoQk9PU1Rf
UFBfVFVQTEVfRUxFTSgzLCAyLCBCT09TVF9QUF9TRVFfRk9MRF9MRUZUXyAjIyBzKEJPT1NUX1BQ
X1NFUV9UUkFOU0ZPUk1fTywgKG9wLCBkYXRhLCAobmlsKSksIHNlcSkpKQotIyBlbmRpZgotIwot
IyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvcHJlcHJvY2Vzc29yL3N0cmluZ2l6ZS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3Ivc3RyaW5naXplLmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjRkZDVmZGUzZTNjZDgzN2NmZjdjMDU3ZGZiOWE0N2FlYzFk
MjFlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3Ivc3RyaW5n
aXplLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMgLyogQ29weXJpZ2h0IChD
KSAyMDAxCi0jICAqIEhvdXNlbWFycXVlIE95Ci0jICAqIGh0dHA6Ly93d3cuaG91c2VtYXJxdWUu
Y29tCi0jICAqCi0jICAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNl
bnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotIyAgKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpCi0jICAqLwotIwotIyAvKiBSZXZpc2VkIGJ5IFBhdWwgTWVuc29uaWRlcyAoMjAwMikgKi8K
LSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9u
LiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX1NUUklOR0laRV9IUFAKLSMgZGVm
aW5lIEJPT1NUX1BSRVBST0NFU1NPUl9TVFJJTkdJWkVfSFBQCi0jCi0jIGluY2x1ZGUgPGJvb3N0
L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcD4KLSMKLSMgLyogQk9PU1RfUFBfU1RSSU5H
SVpFICovCi0jCi0jIGlmIEJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklH
X01TVkMoKQotIyAgICBkZWZpbmUgQk9PU1RfUFBfU1RSSU5HSVpFKHRleHQpIEJPT1NUX1BQX1NU
UklOR0laRV9BKCh0ZXh0KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1NUUklOR0laRV9BKGFyZykg
Qk9PU1RfUFBfU1RSSU5HSVpFX0kgYXJnCi0jIGVsaWYgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkg
JiBCT09TVF9QUF9DT05GSUdfTVdDQygpCi0jICAgIGRlZmluZSBCT09TVF9QUF9TVFJJTkdJWkUo
dGV4dCkgQk9PU1RfUFBfU1RSSU5HSVpFX09PKCh0ZXh0KSkKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1NUUklOR0laRV9PTyhwYXIpIEJPT1NUX1BQX1NUUklOR0laRV9JICMjIHBhcgotIyBlbHNlCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9TVFJJTkdJWkUodGV4dCkgQk9PU1RfUFBfU1RSSU5HSVpFX0ko
dGV4dCkKLSMgZW5kaWYKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1NUUklOR0laRV9JKHRleHQpICN0
ZXh0Ci0jCi0jIGVuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUvZGV0YWlsL2lzX3NpbmdsZV9yZXR1cm4u
aHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vz
c29yL3R1cGxlL2RldGFpbC9pc19zaW5nbGVfcmV0dXJuLmhwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDJhNGZiMjA3YzUyODcxNzk4YTY2YTY3OGU0Mjc0NTNhYmFmYzFkNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUvZGV0YWlsL2lz
X3NpbmdsZV9yZXR1cm4uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyAvKiAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgKEMpIENv
cHlyaWdodCBFZHdhcmQgRGllbmVyIDIwMTQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKgotIyAgKiAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlICAgICAgKgotIyAgKiAgICAgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgICAgICAgICAgICAgICAgICAgICAgICAgKgot
IyAgKiAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiogKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0
IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX1RVUExF
X0RFVEFJTF9JU19TSU5HTEVfUkVUVVJOX0hQUAotIyBkZWZpbmUgQk9PU1RfUFJFUFJPQ0VTU09S
X1RVUExFX0RFVEFJTF9JU19TSU5HTEVfUkVUVVJOX0hQUAotIwotIyBpbmNsdWRlIDxib29zdC9w
cmVwcm9jZXNzb3IvY29uZmlnL2NvbmZpZy5ocHA+Ci0jCi0jIC8qIEJPT1NUX1BQX1RVUExFX0lT
X1NJTkdMRV9SRVRVUk4gKi8KLSMKLSMgaWYgQk9PU1RfUFBfVkFSSUFESUNTICYmIEJPT1NUX1BQ
X1ZBUklBRElDU19NU1ZDCi0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb250cm9sL2lp
Zi5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9mYWNpbGl0aWVzL2lzXzEuaHBw
PgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUvc2l6ZS5ocHA+Ci0jIGRlZmlu
ZSBCT09TVF9QUF9UVVBMRV9JU19TSU5HTEVfUkVUVVJOKHNyLG5zcix0dXBsZSkJXAotCUJPT1NU
X1BQX0lJRihCT09TVF9QUF9JU18xKEJPT1NUX1BQX1RVUExFX1NJWkUodHVwbGUpKSxzcixuc3Ip
IFwKLQkvKiovCi0jIGVuZGlmIC8qIEJPT1NUX1BQX1ZBUklBRElDUyAmJiBCT09TVF9QUF9WQVJJ
QURJQ1NfTVNWQyAqLwotIwotIyBlbmRpZiAvKiBCT09TVF9QUkVQUk9DRVNTT1JfVFVQTEVfREVU
QUlMX0lTX1NJTkdMRV9SRVRVUk5fSFBQICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUvZWF0LmhwcCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nlc3Nvci90dXBs
ZS9lYXQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZThhMTAwNjc1OGM5Zjlh
YjRhMWEyZGZiNTEyOGQxNDYyMjAyNjVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3ByZXByb2Nlc3Nvci90dXBsZS9lYXQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAg
QEAKLSMgLyogQ29weXJpZ2h0IChDKSAyMDAxCi0jICAqIEhvdXNlbWFycXVlIE95Ci0jICAqIGh0
dHA6Ly93d3cuaG91c2VtYXJxdWUuY29tCi0jICAqCi0jICAqIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotIyAgKiBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0jICAqLwotIwotIyAvKiBSZXZpc2VkIGJ5IFBhdWwg
TWVuc29uaWRlcyAoMjAwMi0yMDExKSAqLwotIyAvKiBSZXZpc2VkIGJ5IEVkd2FyZCBEaWVuZXIg
KDIwMTEsMjAxNSkgKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0
IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX1RVUExF
X0VBVF9IUFAKLSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NPUl9UVVBMRV9FQVRfSFBQCi0jCi0j
IGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcD4KLSMKLSMgLyog
Qk9PU1RfUFBfRUFUICovCi0jCi0jIGlmIEJPT1NUX1BQX1ZBUklBRElDUwotIyAgICBkZWZpbmUg
Qk9PU1RfUFBfRUFUKC4uLikKLSMgZWxzZQotIyAgICBkZWZpbmUgQk9PU1RfUFBfRUFUKHgpCi0j
IGVuZGlmCi0jCi0jIC8qIEJPT1NUX1BQX1RVUExFX0VBVCAqLwotIwotIyBpZiBCT09TVF9QUF9W
QVJJQURJQ1MKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVChzaXplKSBCT09TVF9QUF9F
QVQKLSMgZWxzZQotIyAgICBpZiB+Qk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9D
T05GSUdfTVdDQygpCi0jICAgICAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUFUKHNpemUpIEJP
T1NUX1BQX1RVUExFX0VBVF9JKHNpemUpCi0jICAgIGVsc2UKLSMgICAgICAgIGRlZmluZSBCT09T
VF9QUF9UVVBMRV9FQVQoc2l6ZSkgQk9PU1RfUFBfVFVQTEVfRUFUX09PKChzaXplKSkKLSMgICAg
ICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfT08ocGFyKSBCT09TVF9QUF9UVVBMRV9FQVRf
SSAjIyBwYXIKLSMgICAgZW5kaWYKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVF9JKHNp
emUpIEJPT1NUX1BQX1RVUExFX0VBVF8gIyMgc2l6ZQotIyBlbmRpZgotIwotIyBpZiB+Qk9PU1Rf
UFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdfTVdDQygpCi0jICAgICBkZWZpbmUg
Qk9PU1RfUFBfVFVQTEVfRUFUX04oc2l6ZSkgQk9PU1RfUFBfVFVQTEVfRUFUX05fSShzaXplKQot
IyBlbHNlCi0jICAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUFUX04oc2l6ZSkgQk9PU1RfUFBf
VFVQTEVfRUFUX05fT08oKHNpemUpKQotIyAgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVF9O
X09PKHBhcikgQk9PU1RfUFBfVFVQTEVfRUFUX05fSSAjIyBwYXIKLSMgZW5kaWYKLSMgZGVmaW5l
IEJPT1NUX1BQX1RVUExFX0VBVF9OX0koc2l6ZSkgQk9PU1RfUFBfVFVQTEVfRUFUXyAjIyBzaXpl
Ci0jCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMShlMCkKLSMgZGVmaW5lIEJPT1NUX1BQ
X1RVUExFX0VBVF8yKGUwLCBlMSkKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVF8zKGUwLCBl
MSwgZTIpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfNChlMCwgZTEsIGUyLCBlMykKLSMg
ZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVF81KGUwLCBlMSwgZTIsIGUzLCBlNCkKLSMgZGVmaW5l
IEJPT1NUX1BQX1RVUExFX0VBVF82KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUpCi0jIGRlZmluZSBC
T09TVF9QUF9UVVBMRV9FQVRfNyhlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNikKLSMgZGVmaW5l
IEJPT1NUX1BQX1RVUExFX0VBVF84KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNykKLSMg
ZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVF85KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBl
NywgZTgpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMTAoZTAsIGUxLCBlMiwgZTMsIGU0
LCBlNSwgZTYsIGU3LCBlOCwgZTkpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMTEoZTAs
IGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCkKLSMgZGVmaW5lIEJPT1NU
X1BQX1RVUExFX0VBVF8xMihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwg
ZTEwLCBlMTEpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMTMoZTAsIGUxLCBlMiwgZTMs
IGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIpCi0jIGRlZmluZSBCT09TVF9Q
UF9UVVBMRV9FQVRfMTQoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUx
MCwgZTExLCBlMTIsIGUxMykKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVF8xNShlMCwgZTEs
IGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQp
Ci0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMTYoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwg
ZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUpCi0jIGRlZmluZSBC
T09TVF9QUF9UVVBMRV9FQVRfMTcoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwg
ZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNikKLSMgZGVmaW5lIEJPT1NUX1BQ
X1RVUExFX0VBVF8xOChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEw
LCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcpCi0jIGRlZmluZSBCT09TVF9QUF9U
VVBMRV9FQVRfMTkoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwg
ZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgpCi0jIGRlZmluZSBCT09TVF9Q
UF9UVVBMRV9FQVRfMjAoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUx
MCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1RVUExFX0VBVF8yMShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4
LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBl
MjApCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMjIoZTAsIGUxLCBlMiwgZTMsIGU0LCBl
NSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3
LCBlMTgsIGUxOSwgZTIwLCBlMjEpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMjMoZTAs
IGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywg
ZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMikKLSMgZGVmaW5lIEJP
T1NUX1BQX1RVUExFX0VBVF8yNChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAs
IGUyMSwgZTIyLCBlMjMpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMjUoZTAsIGUxLCBl
MiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBl
MTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQpCi0jIGRlZmlu
ZSBCT09TVF9QUF9UVVBMRV9FQVRfMjYoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBl
OCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwg
ZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSkKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VB
VF8yNyhlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUx
MiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMs
IGUyNCwgZTI1LCBlMjYpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMjgoZTAsIGUxLCBl
MiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBl
MTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2
LCBlMjcpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMjkoZTAsIGUxLCBlMiwgZTMsIGU0
LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwg
ZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUy
OCkKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVF8zMChlMCwgZTEsIGUyLCBlMywgZTQsIGU1
LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcs
IGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBl
MjkpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMzEoZTAsIGUxLCBlMiwgZTMsIGU0LCBl
NSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3
LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwg
ZTI5LCBlMzApCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMzIoZTAsIGUxLCBlMiwgZTMs
IGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUx
NiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcs
IGUyOCwgZTI5LCBlMzAsIGUzMSkKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVF8zMyhlMCwg
ZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBl
MTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1
LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIpCi0jIGRlZmluZSBCT09TVF9QUF9U
VVBMRV9FQVRfMzQoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwg
ZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUy
MiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMp
Ci0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMzUoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwg
ZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBl
MTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5
LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCkKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVF8z
NihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwg
ZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUy
NCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUp
Ci0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfMzcoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwg
ZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBl
MTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5
LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYpCi0jIGRlZmluZSBCT09TVF9QUF9U
VVBMRV9FQVRfMzgoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwg
ZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUy
MiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMs
IGUzNCwgZTM1LCBlMzYsIGUzNykKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVF8zOShlMCwg
ZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBl
MTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1
LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwg
ZTM3LCBlMzgpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfNDAoZTAsIGUxLCBlMiwgZTMs
IGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUx
NiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcs
IGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBl
MzkpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfNDEoZTAsIGUxLCBlMiwgZTMsIGU0LCBl
NSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3
LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwg
ZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0
MCkKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVF80MihlMCwgZTEsIGUyLCBlMywgZTQsIGU1
LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcs
IGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBl
MjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQw
LCBlNDEpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfNDMoZTAsIGUxLCBlMiwgZTMsIGU0
LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwg
ZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUy
OCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzks
IGU0MCwgZTQxLCBlNDIpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfNDQoZTAsIGUxLCBl
MiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBl
MTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2
LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywg
ZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MykKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VB
VF80NShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUx
MiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMs
IGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBl
MzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQpCi0jIGRlZmlu
ZSBCT09TVF9QUF9UVVBMRV9FQVRfNDYoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBl
OCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwg
ZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUz
MSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIs
IGU0MywgZTQ0LCBlNDUpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfNDcoZTAsIGUxLCBl
MiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBl
MTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2
LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywg
ZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NikKLSMgZGVmaW5lIEJP
T1NUX1BQX1RVUExFX0VBVF80OChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAs
IGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBl
MzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQz
LCBlNDQsIGU0NSwgZTQ2LCBlNDcpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfNDkoZTAs
IGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywg
ZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUy
NSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYs
IGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBl
NDgpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfNTAoZTAsIGUxLCBlMiwgZTMsIGU0LCBl
NSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3
LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwg
ZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0
MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSkKLSMgZGVmaW5l
IEJPT1NUX1BQX1RVUExFX0VBVF81MShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4
LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBl
MjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMx
LCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0Miwg
ZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTApCi0jIGRlZmluZSBCT09TVF9Q
UF9UVVBMRV9FQVRfNTIoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUx
MCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEs
IGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBl
MzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0
LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEpCi0jIGRlZmluZSBCT09TVF9QUF9U
VVBMRV9FQVRfNTMoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwg
ZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUy
MiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMs
IGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBl
NDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MikKLSMgZGVmaW5lIEJPT1NUX1BQ
X1RVUExFX0VBVF81NChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEw
LCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwg
ZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUz
MywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQs
IGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMpCi0jIGRlZmluZSBC
T09TVF9QUF9UVVBMRV9FQVRfNTUoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwg
ZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIw
LCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwg
ZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0
MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQp
Ci0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfNTYoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwg
ZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBl
MTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5
LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwg
ZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1
MiwgZTUzLCBlNTQsIGU1NSkKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVF81NyhlMCwgZTEs
IGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQs
IGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBl
MjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3
LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwg
ZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYpCi0jIGRlZmluZSBCT09TVF9Q
UF9UVVBMRV9FQVRfNTgoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUx
MCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEs
IGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBl
MzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0
LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwg
ZTU2LCBlNTcpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfNTkoZTAsIGUxLCBlMiwgZTMs
IGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUx
NiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcs
IGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBl
MzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUw
LCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCkKLSMgZGVmaW5lIEJPT1NU
X1BQX1RVUExFX0VBVF82MChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwg
ZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUy
MSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIs
IGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBl
NDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1
LCBlNTYsIGU1NywgZTU4LCBlNTkpCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfNjEoZTAs
IGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywg
ZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUy
NSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYs
IGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBl
NDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5
LCBlNjApCi0jIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FQVRfNjIoZTAsIGUxLCBlMiwgZTMsIGU0
LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwg
ZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUy
OCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzks
IGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBl
NTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSkKLSMg
ZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VBVF82MyhlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwg
ZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwg
ZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUz
MCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEs
IGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBl
NTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIpCi0jIGRlZmlu
ZSBCT09TVF9QUF9UVVBMRV9FQVRfNjQoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBl
OCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwg
ZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUz
MSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIs
IGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBl
NTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMpCi0jCi0jIGVu
ZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9wcmVwcm9jZXNzb3IvdHVwbGUvZWxlbS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUvZWxlbS5ocHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDg4MDQ0ZDNjN2U3NTA3YTg2ODk0OGEzY2U3MmRkMjIwZmRkMjFl
ZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3R1cGxlL2Vs
ZW0uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLSMgLyogQ29weXJpZ2h0IChD
KSAyMDAxCi0jICAqIEhvdXNlbWFycXVlIE95Ci0jICAqIGh0dHA6Ly93d3cuaG91c2VtYXJxdWUu
Y29tCi0jICAqCi0jICAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNl
bnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotIyAgKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotIyAgKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpCi0jICAqLwotIwotIyAvKiBSZXZpc2VkIGJ5IFBhdWwgTWVuc29uaWRlcyAoMjAwMi0yMDEx
KSAqLwotIyAvKiBSZXZpc2VkIGJ5IEVkd2FyZCBEaWVuZXIgKDIwMTEsMjAxNCkgKi8KLSMKLSMg
LyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uLiAqLwot
IwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX1RVUExFX0VMRU1fSFBQCi0jIGRlZmluZSBC
T09TVF9QUkVQUk9DRVNTT1JfVFVQTEVfRUxFTV9IUFAKLSMKLSMgaW5jbHVkZSA8Ym9vc3QvcHJl
cHJvY2Vzc29yL2NhdC5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jb25maWcv
Y29uZmlnLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2ZhY2lsaXRpZXMvZXhw
YW5kLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2ZhY2lsaXRpZXMvb3Zlcmxv
YWQuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUvcmVtLmhwcD4KLSMg
aW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3ZhcmlhZGljL2VsZW0uaHBwPgotIyBpbmNsdWRl
IDxib29zdC9wcmVwcm9jZXNzb3IvdHVwbGUvZGV0YWlsL2lzX3NpbmdsZV9yZXR1cm4uaHBwPgot
IwotIyBpZiBCT09TVF9QUF9WQVJJQURJQ1MKLSMgICAgaWYgQk9PU1RfUFBfVkFSSUFESUNTX01T
VkMKLSMgICAgICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNKC4uLikgQk9PU1RfUFBfVFVQ
TEVfRUxFTV9JKEJPT1NUX1BQX09WRVJMT0FEKEJPT1NUX1BQX1RVUExFX0VMRU1fT18sIF9fVkFf
QVJHU19fKSwgKF9fVkFfQVJHU19fKSkKLSMgICAgICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9F
TEVNX0kobSwgYXJncykgQk9PU1RfUFBfVFVQTEVfRUxFTV9JSShtLCBhcmdzKQotIyAgICAgICAg
ZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fSUkobSwgYXJncykgQk9PU1RfUFBfQ0FUKG0gIyMg
YXJncywpCi0vKgotICBVc2UgQk9PU1RfUFBfUkVNX0NBVCBpZiBpdCBpcyBhIHNpbmdsZSBlbGVt
ZW50IHR1cGxlICggd2hpY2ggbWlnaHQgYmUgZW1wdHkgKQotICBlbHNlIHVzZSBCT09TVF9QUF9S
RU0uIFRoaXMgZml4ZXMgYSBWQysrIHByb2JsZW0gd2l0aCBhbiBlbXB0eSB0dXBsZSBhbmQgQk9P
U1RfUFBfVFVQTEVfRUxFTQotICBmdW5jdGlvbmFsaXR5LiBTZWUgdHVwbGVfZWxlbV9idWdfdGVz
dC5jeHguCi0qLwotIyAgICAJIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX09fMihuLCB0dXBs
ZSkgXAotCQkJQk9PU1RfUFBfVkFSSUFESUNfRUxFTShuLCBCT09TVF9QUF9FWFBBTkQoQk9PU1Rf
UFBfVFVQTEVfSVNfU0lOR0xFX1JFVFVSTihCT09TVF9QUF9SRU1fQ0FULEJPT1NUX1BQX1JFTSx0
dXBsZSkgdHVwbGUpKSBcCi0JCQkvKiovCi0jICAgIGVsc2UKLSMgICAgICAgIGRlZmluZSBCT09T
VF9QUF9UVVBMRV9FTEVNKC4uLikgQk9PU1RfUFBfT1ZFUkxPQUQoQk9PU1RfUFBfVFVQTEVfRUxF
TV9PXywgX19WQV9BUkdTX18pKF9fVkFfQVJHU19fKQotIyAgICAJIGRlZmluZSBCT09TVF9QUF9U
VVBMRV9FTEVNX09fMihuLCB0dXBsZSkgQk9PU1RfUFBfVkFSSUFESUNfRUxFTShuLCBCT09TVF9Q
UF9SRU0gdHVwbGUpCi0jICAgIGVuZGlmCi0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVN
X09fMyhzaXplLCBuLCB0dXBsZSkgQk9PU1RfUFBfVFVQTEVfRUxFTV9PXzIobiwgdHVwbGUpCi0j
IGVsc2UKLSMgICAgaWYgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdf
TVNWQygpCi0jICAgICAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTShzaXplLCBuLCB0dXBs
ZSkgQk9PU1RfUFBfVFVQTEVfRUxFTV9JKEJPT1NUX1BQX0NBVChCT09TVF9QUF9UVVBMRV9FTEVN
XywgbiksIEJPT1NUX1BQX0NBVChCT09TVF9QUF9DQVQoQk9PU1RfUFBfVFVQTEVfRUxFTV9FXywg
c2l6ZSksIHR1cGxlKSkKLSMgICAgICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0kobSwg
YXJncykgQk9PU1RfUFBfVFVQTEVfRUxFTV9JSShtLCBhcmdzKQotIyAgICAgICAgZGVmaW5lIEJP
T1NUX1BQX1RVUExFX0VMRU1fSUkobSwgYXJncykgQk9PU1RfUFBfQ0FUKG0gIyMgYXJncywpCi0j
ICAgIGVsaWYgQk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdfTVdDQygp
Ci0jICAgICAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTShzaXplLCBuLCB0dXBsZSkgQk9P
U1RfUFBfVFVQTEVfRUxFTV9JX09PKChzaXplLCBuLCB0dXBsZSkpCi0jICAgICAgICBkZWZpbmUg
Qk9PU1RfUFBfVFVQTEVfRUxFTV9JX09PKHBhcikgQk9PU1RfUFBfVFVQTEVfRUxFTV9JICMjIHBh
cgotIyAgICAgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fSShzaXplLCBuLCB0dXBsZSkg
Qk9PU1RfUFBfVFVQTEVfRUxFTV9JSSgobiwgQk9PU1RfUFBfVFVQTEVfRUxFTV9FXyAjIyBzaXpl
ICMjIHR1cGxlKSkKLSMgICAgICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0lJKHBhcikg
Qk9PU1RfUFBfVFVQTEVfRUxFTV9JSUlfT08ocGFyKQotIyAgICAgICAgZGVmaW5lIEJPT1NUX1BQ
X1RVUExFX0VMRU1fSUlJX09PKHBhcikgQk9PU1RfUFBfVFVQTEVfRUxFTV9JSUkgIyMgcGFyCi0j
ICAgICAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV9JSUkobiwgZXR1cGxlKSBCT09TVF9Q
UF9UVVBMRV9FTEVNXyAjIyBuICMjIGV0dXBsZQotIyAgICBlbHNlCi0jICAgICAgICBkZWZpbmUg
Qk9PU1RfUFBfVFVQTEVfRUxFTShzaXplLCBuLCB0dXBsZSkgQk9PU1RfUFBfVFVQTEVfRUxFTV9J
KEJPT1NUX1BQX0NBVChCT09TVF9QUF9UVVBMRV9FTEVNXywgbikgQk9PU1RfUFBfQ0FUKEJPT1NU
X1BQX1RVUExFX0VMRU1fRV8sIHNpemUpIHR1cGxlKQotIyAgICAgICAgZGVmaW5lIEJPT1NUX1BQ
X1RVUExFX0VMRU1fSSh4KSB4Ci0jICAgIGVuZGlmCi0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBM
RV9FTEVNX0VfMShlMCkgKGUwLCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KQotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfVFVQTEVfRUxFTV9FXzIoZTAsIGUxKSAoZTAsIGUxLCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV9FXzMoZTAsIGUxLCBlMikgKGUwLCBlMSwgZTIsID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8pCi0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfNChlMCwgZTEsIGUy
LCBlMykgKGUwLCBlMSwgZTIsIGUzLCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQ
TEVfRUxFTV9FXzUoZTAsIGUxLCBlMiwgZTMsIGU0KSAoZTAsIGUxLCBlMiwgZTMsIGU0LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV9FXzYoZTAsIGUxLCBlMiwgZTMsIGU0
LCBlNSkgKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pCi0jICAgIGRlZmluZSBCT09TVF9QUF9U
VVBMRV9FTEVNX0VfNyhlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNikgKGUwLCBlMSwgZTIsIGUz
LCBlNCwgZTUsIGU2LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/KQotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV9FXzgoZTAsIGUx
LCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3KSAoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KQot
IyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV9FXzkoZTAsIGUxLCBlMiwgZTMsIGU0LCBl
NSwgZTYsIGU3LCBlOCkgKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfMTAoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3
LCBlOCwgZTkpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX1RVUExFX0VMRU1fRV8xMShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4
LCBlOSwgZTEwKSAoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX1RVUExFX0VMRU1fRV8xMihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcs
IGU4LCBlOSwgZTEwLCBlMTEpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfMTMoZTAsIGUxLCBlMiwgZTMsIGU0LCBl
NSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1
LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV8xNChlMCwg
ZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzKSAo
ZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUx
MywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX1RVUExFX0VMRU1fRV8xNShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwg
ZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8pCi0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfMTYoZTAsIGUx
LCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0
LCBlMTUpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEs
IGUxMiwgZTEzLCBlMTQsIGUxNSwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV8xNyhlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBl
NiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2KSAoZTAsIGUx
LCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0
LCBlMTUsIGUxNiwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX1RVUExFX0VMRU1fRV8xOChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcpIChlMCwgZTEsIGUyLCBl
MywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwg
ZTE2LCBlMTcsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pCi0jICAgIGRlZmluZSBCT09TVF9QUF9U
VVBMRV9FTEVNX0VfMTkoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUx
MCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgpIChlMCwgZTEsIGUyLCBl
MywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwg
ZTE2LCBlMTcsIGUxOCwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1RVUExFX0VMRU1fRV8yMChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwg
ZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5KSAoZTAsIGUx
LCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0
LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX1RVUExFX0VMRU1fRV8yMShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcs
IGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5
LCBlMjApIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEs
IGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8pCi0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfMjIoZTAsIGUxLCBlMiwgZTMs
IGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUx
NiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwg
ZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwg
ZTE5LCBlMjAsIGUyMSwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VM
RU1fRV8yMyhlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEs
IGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyKSAo
ZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUx
MywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV8yNChlMCwgZTEsIGUyLCBlMywgZTQs
IGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBl
MTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1
LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcs
IGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9UVVBMRV9FTEVNX0VfMjUoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTks
IGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBl
MjEsIGUyMiwgZTIzLCBlMjQpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAs
IGUyMSwgZTIyLCBlMjMsIGUyNCwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1f
RV8yNihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUx
MiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMs
IGUyNCwgZTI1KSAoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwg
ZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUy
MiwgZTIzLCBlMjQsIGUyNSwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV8yNyhl
MCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEz
LCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwg
ZTI1LCBlMjYpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBl
MTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIy
LCBlMjMsIGUyNCwgZTI1LCBlMjYsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8pCi0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfMjgo
ZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUx
MywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQs
IGUyNSwgZTI2LCBlMjcpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwg
ZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUy
MSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VM
RU1fRV8yOShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEs
IGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBl
MjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4KSAoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYs
IGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgs
IGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX1RVUExFX0VMRU1fRV8zMChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4
LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBl
MjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjkpIChlMCwgZTEs
IGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQs
IGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBl
MjYsIGUyNywgZTI4LCBlMjksID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8pCi0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfMzEoZTAsIGUxLCBlMiwg
ZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUs
IGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBl
MjcsIGUyOCwgZTI5LCBlMzApIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAs
IGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1RVUExFX0VMRU1fRV8zMihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwg
ZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUy
MSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxKSAoZTAs
IGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywg
ZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUy
NSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV8zMyhlMCwg
ZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBl
MTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1
LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIpIChlMCwgZTEsIGUyLCBlMywgZTQs
IGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBl
MTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4
LCBlMjksIGUzMCwgZTMxLCBlMzIsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8p
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfMzQoZTAsIGUxLCBlMiwgZTMsIGU0
LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwg
ZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUy
OCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwg
ZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwg
ZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUz
MCwgZTMxLCBlMzIsIGUzMywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV8zNShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBl
NiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUx
OCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjks
IGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0KSAoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3
LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUx
OSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAs
IGUzMSwgZTMyLCBlMzMsIGUzNCwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV8zNihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBl
NiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUx
OCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjks
IGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBl
NiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUx
OCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjks
IGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8p
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfMzcoZTAsIGUxLCBlMiwgZTMsIGU0
LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwg
ZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUy
OCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYpIChlMCwgZTEsIGUyLCBl
MywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwg
ZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUy
NywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV8zOChlMCwg
ZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBl
MTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1
LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwg
ZTM3KSAoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBl
MTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIz
LCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwg
ZTM1LCBlMzYsIGUzNywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1RVUExFX0VMRU1fRV8zOShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwg
ZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUy
MSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIs
IGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBl
NiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUx
OCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjks
IGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8pCi0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfNDAoZTAsIGUxLCBlMiwg
ZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUs
IGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBl
MjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4
LCBlMzkpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEs
IGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBl
MjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0
LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX1RVUExFX0VMRU1fRV80MShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4
LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBl
MjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMx
LCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwKSAoZTAsIGUxLCBl
MiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBl
MTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2
LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywg
ZTM4LCBlMzksIGU0MCwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VM
RU1fRV80MihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEs
IGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBl
MjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0
LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEpIChlMCwgZTEsIGUyLCBlMywgZTQs
IGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBl
MTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4
LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwg
ZTQwLCBlNDEsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8pCi0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfNDMo
ZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUx
MywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQs
IGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBl
MzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1
LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcs
IGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBl
MjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQw
LCBlNDEsIGU0MiwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV80NChl
MCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEz
LCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwg
ZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUz
NiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzKSAoZTAsIGUxLCBlMiwgZTMsIGU0
LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwg
ZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUy
OCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzks
IGU0MCwgZTQxLCBlNDIsIGU0MywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1f
RV80NShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUx
MiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMs
IGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBl
MzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQpIChlMCwgZTEs
IGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQs
IGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBl
MjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3
LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsID8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9UVVBMRV9FTEVNX0VfNDYoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTks
IGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBl
MjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMy
LCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0Mywg
ZTQ0LCBlNDUpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBl
MTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIy
LCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywg
ZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0
NSwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV80NyhlMCwgZTEsIGUyLCBlMywgZTQs
IGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBl
MTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4
LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwg
ZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2KSAoZTAsIGUxLCBlMiwgZTMsIGU0LCBl
NSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3
LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwg
ZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0
MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgPywgPywgPywgPywgPywgPywgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VM
RU1fRV80OChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEs
IGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBl
MjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0
LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwg
ZTQ2LCBlNDcpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBl
MTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIy
LCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywg
ZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0
NSwgZTQ2LCBlNDcsID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8s
ID8pCi0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfNDkoZTAsIGUxLCBlMiwgZTMs
IGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUx
NiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcs
IGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBl
MzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgpIChlMCwgZTEs
IGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQs
IGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBl
MjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3
LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX1RVUExFX0VMRU1fRV81MChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcs
IGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5
LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwg
ZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0
MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5KSAoZTAsIGUxLCBlMiwgZTMsIGU0
LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwg
ZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUy
OCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzks
IGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgPywgPywg
PywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1RVUExFX0VMRU1fRV81MShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwg
ZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUy
MSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIs
IGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBl
NDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTApIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1
LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcs
IGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBl
MjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQw
LCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsID8sID8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pCi0jICAgIGRlZmluZSBCT09TVF9QUF9U
VVBMRV9FTEVNX0VfNTIoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUx
MCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEs
IGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBl
MzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0
LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEpIChlMCwgZTEsIGUyLCBlMywgZTQs
IGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBl
MTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4
LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwg
ZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1
MSwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX1RVUExFX0VMRU1fRV81MyhlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAs
IGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBl
MzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQz
LCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyKSAoZTAsIGUxLCBl
MiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBl
MTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2
LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywg
ZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0
OSwgZTUwLCBlNTEsIGU1MiwgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV81NChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBl
NiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUx
OCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjks
IGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBl
NDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUy
LCBlNTMpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEs
IGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBl
MjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0
LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwg
ZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsID8sID8sID8sID8sID8sID8s
ID8sID8sID8sID8pCi0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfNTUoZTAsIGUx
LCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0
LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwg
ZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUz
NywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgs
IGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBl
NiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUx
OCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjks
IGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBl
NDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUy
LCBlNTMsIGU1NCwgPywgPywgPywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX1RVUExFX0VMRU1fRV81NihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAs
IGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBl
MzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQz
LCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwg
ZTU1KSAoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBl
MTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIz
LCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwg
ZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0
NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgPywgPywgPywg
PywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV81NyhlMCwg
ZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBl
MTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1
LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwg
ZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0
OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYpIChlMCwgZTEsIGUyLCBl
MywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwg
ZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUy
NywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgs
IGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBl
NTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsID8sID8sID8sID8sID8sID8sID8pCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfNTgoZTAsIGUxLCBlMiwgZTMsIGU0LCBl
NSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3
LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwg
ZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0
MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEs
IGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBl
NiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUx
OCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjks
IGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBl
NDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUy
LCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgPywgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX1RVUExFX0VMRU1fRV81OShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcs
IGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5
LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwg
ZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0
MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMs
IGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4KSAoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3
LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUx
OSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAs
IGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBl
NDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUz
LCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgPywgPywgPywgPywgPykKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX1RVUExFX0VMRU1fRV82MChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4
LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBl
MjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMx
LCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0Miwg
ZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1
NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTkpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwg
ZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwg
ZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUz
MCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEs
IGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBl
NTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksID8sID8sID8sID8pCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9UVVBMRV9FTEVNX0VfNjEoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3
LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUx
OSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAs
IGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBl
NDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUz
LCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjApIChlMCwgZTEsIGUyLCBlMywgZTQs
IGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBl
MTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4
LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwg
ZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1
MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgPywgPywgPykK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV82MihlMCwgZTEsIGUyLCBlMywgZTQs
IGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBl
MTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4
LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwg
ZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1
MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxKSAoZTAs
IGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywg
ZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUy
NSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYs
IGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBl
NDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5
LCBlNjAsIGU2MSwgPywgPykKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fRV82Myhl
MCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEz
LCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwg
ZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUz
NiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcs
IGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBl
NTksIGU2MCwgZTYxLCBlNjIpIChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAs
IGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBl
MzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQz
LCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwg
ZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsID8pCi0jICAgIGRlZmluZSBC
T09TVF9QUF9UVVBMRV9FTEVNX0VfNjQKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1f
MChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwg
ZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUy
NCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUs
IGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBl
NDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4
LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTAKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExF
X0VMRU1fMShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEs
IGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBl
MjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0
LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwg
ZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1
NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTEKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1RVUExFX0VMRU1fMihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEw
LCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwg
ZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUz
MywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQs
IGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBl
NTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTIKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX1RVUExFX0VMRU1fMyhlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAs
IGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBl
MzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQz
LCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwg
ZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTMKLSMgICAgZGVm
aW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fNChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcs
IGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5
LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwg
ZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0
MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMs
IGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTQKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fNShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBl
NiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUx
OCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjks
IGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBl
NDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUy
LCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2Mykg
ZTUKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fNihlMCwgZTEsIGUyLCBlMywgZTQs
IGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBl
MTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4
LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwg
ZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1
MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIs
IGU2MykgZTYKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fNyhlMCwgZTEsIGUyLCBl
MywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwg
ZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUy
NywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgs
IGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBl
NTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYx
LCBlNjIsIGU2MykgZTcKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fOChlMCwgZTEs
IGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQs
IGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBl
MjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3
LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwg
ZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2
MCwgZTYxLCBlNjIsIGU2MykgZTgKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fOShl
MCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEz
LCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwg
ZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUz
NiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcs
IGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBl
NTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTkKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VM
RU1fMTAoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBl
MTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIz
LCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwg
ZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0
NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcs
IGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMpIGUxMAotIyAgICBkZWZpbmUgQk9PU1RfUFBf
VFVQTEVfRUxFTV8xMShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEw
LCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwg
ZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUz
MywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQs
IGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBl
NTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTExCi0jICAgIGRlZmluZSBC
T09TVF9QUF9UVVBMRV9FTEVNXzEyKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgs
IGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUy
MCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEs
IGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBl
NDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0
LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEsIGU2MiwgZTYzKSBlMTIKLSMgICAg
ZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fMTMoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYs
IGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgs
IGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBl
MzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQx
LCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1Miwg
ZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMpIGUx
MwotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV8xNChlMCwgZTEsIGUyLCBlMywgZTQs
IGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBl
MTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4
LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwg
ZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1
MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIs
IGU2MykgZTE0Ci0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNXzE1KGUwLCBlMSwgZTIs
IGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1
LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwg
ZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUz
OCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDks
IGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBl
NjEsIGU2MiwgZTYzKSBlMTUKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fMTYoZTAs
IGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywg
ZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUy
NSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYs
IGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBl
NDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5
LCBlNjAsIGU2MSwgZTYyLCBlNjMpIGUxNgotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxF
TV8xNyhlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUx
MiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMs
IGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBl
MzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2
LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1Nywg
ZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTE3Ci0jICAgIGRlZmluZSBCT09TVF9QUF9U
VVBMRV9FTEVNXzE4KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAs
IGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBl
MjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMz
LCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwg
ZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1
NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEsIGU2MiwgZTYzKSBlMTgKLSMgICAgZGVmaW5lIEJP
T1NUX1BQX1RVUExFX0VMRU1fMTkoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwg
ZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIw
LCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwg
ZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0
MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQs
IGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMpIGUxOQotIyAgICBk
ZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV8yMChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwg
ZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwg
ZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUz
MCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEs
IGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBl
NTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTIw
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNXzIxKGUwLCBlMSwgZTIsIGUzLCBlNCwg
ZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUx
NywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgs
IGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBl
NDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUx
LCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEsIGU2Miwg
ZTYzKSBlMjEKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fMjIoZTAsIGUxLCBlMiwg
ZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUs
IGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBl
MjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4
LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwg
ZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2
MSwgZTYyLCBlNjMpIGUyMgotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV8yMyhlMCwg
ZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBl
MTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1
LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwg
ZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0
OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTks
IGU2MCwgZTYxLCBlNjIsIGU2MykgZTIzCi0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVN
XzI0KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEy
LCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywg
ZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUz
NSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYs
IGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBl
NTgsIGU1OSwgZTYwLCBlNjEsIGU2MiwgZTYzKSBlMjQKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RV
UExFX0VMRU1fMjUoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwg
ZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUy
MiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMs
IGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBl
NDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2
LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMpIGUyNQotIyAgICBkZWZpbmUgQk9P
U1RfUFBfVFVQTEVfRUxFTV8yNihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAs
IGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBl
MzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQz
LCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwg
ZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTI2Ci0jICAgIGRl
ZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNXzI3KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBl
NywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBl
MTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMw
LCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwg
ZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1
MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEsIGU2MiwgZTYzKSBlMjcK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fMjgoZTAsIGUxLCBlMiwgZTMsIGU0LCBl
NSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3
LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwg
ZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0
MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEs
IGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBl
NjMpIGUyOAotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV8yOShlMCwgZTEsIGUyLCBl
MywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwg
ZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUy
NywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgs
IGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBl
NTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYx
LCBlNjIsIGU2MykgZTI5Ci0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNXzMwKGUwLCBl
MSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUx
NCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUs
IGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBl
MzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4
LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwg
ZTYwLCBlNjEsIGU2MiwgZTYzKSBlMzAKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1f
MzEoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIs
IGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBl
MjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1
LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0Niwg
ZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1
OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMpIGUzMQotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQ
TEVfRUxFTV8zMihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBl
MTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIy
LCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywg
ZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0
NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYs
IGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTMyCi0jICAgIGRlZmluZSBCT09T
VF9QUF9UVVBMRV9FTEVNXzMzKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5
LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwg
ZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUz
MiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMs
IGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBl
NTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEsIGU2MiwgZTYzKSBlMzMKLSMgICAgZGVm
aW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fMzQoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3
LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUx
OSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAs
IGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBl
NDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUz
LCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMpIGUzNAot
IyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV8zNShlMCwgZTEsIGUyLCBlMywgZTQsIGU1
LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcs
IGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBl
MjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQw
LCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwg
ZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2
MykgZTM1Ci0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNXzM2KGUwLCBlMSwgZTIsIGUz
LCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBl
MTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3
LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwg
ZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1
MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEs
IGU2MiwgZTYzKSBlMzYKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fMzcoZTAsIGUx
LCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0
LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwg
ZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUz
NywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgs
IGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBl
NjAsIGU2MSwgZTYyLCBlNjMpIGUzNwotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV8z
OChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwg
ZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUy
NCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUs
IGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBl
NDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4
LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTM4Ci0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBM
RV9FTEVNXzM5KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUx
MSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIs
IGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBl
MzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1
LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1Niwg
ZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEsIGU2MiwgZTYzKSBlMzkKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX1RVUExFX0VMRU1fNDAoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTks
IGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBl
MjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMy
LCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0Mywg
ZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1
NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMpIGU0MAotIyAgICBkZWZp
bmUgQk9PU1RfUFBfVFVQTEVfRUxFTV80MShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcs
IGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5
LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwg
ZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0
MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMs
IGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTQxCi0j
ICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNXzQyKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUs
IGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywg
ZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUy
OSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAs
IGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBl
NTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEsIGU2MiwgZTYz
KSBlNDIKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fNDMoZTAsIGUxLCBlMiwgZTMs
IGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUx
NiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcs
IGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBl
MzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUw
LCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwg
ZTYyLCBlNjMpIGU0MwotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV80NChlMCwgZTEs
IGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQs
IGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBl
MjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3
LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwg
ZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2
MCwgZTYxLCBlNjIsIGU2MykgZTQ0Ci0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNXzQ1
KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBl
MTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0
LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwg
ZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0
NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgs
IGU1OSwgZTYwLCBlNjEsIGU2MiwgZTYzKSBlNDUKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExF
X0VMRU1fNDYoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTEx
LCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwg
ZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUz
NCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUs
IGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBl
NTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMpIGU0NgotIyAgICBkZWZpbmUgQk9PU1Rf
UFBfVFVQTEVfRUxFTV80NyhlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwg
ZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUy
MSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIs
IGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBl
NDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1
LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTQ3Ci0jICAgIGRlZmlu
ZSBCT09TVF9QUF9UVVBMRV9FTEVNXzQ4KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywg
ZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTks
IGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBl
MzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQy
LCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1Mywg
ZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEsIGU2MiwgZTYzKSBlNDgKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fNDkoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwg
ZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBl
MTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5
LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwg
ZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1
MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMp
IGU0OQotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV81MChlMCwgZTEsIGUyLCBlMywg
ZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2
LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywg
ZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUz
OSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAs
IGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBl
NjIsIGU2MykgZTUwCi0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNXzUxKGUwLCBlMSwg
ZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwg
ZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUy
NiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcs
IGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBl
NDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYw
LCBlNjEsIGU2MiwgZTYzKSBlNTEKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fNTIo
ZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUx
MywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQs
IGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBl
MzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3
LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwg
ZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMpIGU1MgotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVf
RUxFTV81MyhlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEs
IGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBl
MjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0
LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwg
ZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1
NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTUzCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9UVVBMRV9FTEVNXzU0KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBl
MTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIx
LCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwg
ZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0
NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUs
IGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEsIGU2MiwgZTYzKSBlNTQKLSMgICAgZGVmaW5l
IEJPT1NUX1BQX1RVUExFX0VMRU1fNTUoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBl
OCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwg
ZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUz
MSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIs
IGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBl
NTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMpIGU1NQotIyAg
ICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV81NihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBl
NiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUx
OCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjks
IGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBl
NDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUy
LCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2Mykg
ZTU2Ci0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNXzU3KGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYs
IGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBl
MjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5
LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwg
ZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEsIGU2
MiwgZTYzKSBlNTcKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fNTgoZTAsIGUxLCBl
MiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBl
MTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2
LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywg
ZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0
OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAs
IGU2MSwgZTYyLCBlNjMpIGU1OAotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfRUxFTV81OShl
MCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEz
LCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwg
ZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUz
NiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcs
IGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBl
NTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTU5Ci0jICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9F
TEVNXzYwKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwg
ZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUy
MywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQs
IGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBl
NDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3
LCBlNTgsIGU1OSwgZTYwLCBlNjEsIGU2MiwgZTYzKSBlNjAKLSMgICAgZGVmaW5lIEJPT1NUX1BQ
X1RVUExFX0VMRU1fNjEoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUx
MCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEs
IGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBl
MzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0
LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwg
ZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMpIGU2MQotIyAgICBkZWZpbmUg
Qk9PU1RfUFBfVFVQTEVfRUxFTV82MihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4
LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBl
MjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMx
LCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0Miwg
ZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1
NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MykgZTYyCi0jICAg
IGRlZmluZSBCT09TVF9QUF9UVVBMRV9FTEVNXzYzKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2
LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4
LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwg
ZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0
MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIs
IGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEsIGU2MiwgZTYzKSBl
NjMKLSMgZW5kaWYKLSMKLSMgLyogZGlyZWN0bHkgdXNlZCBlbHNld2hlcmUgaW4gQm9vc3QuLi4g
Ki8KLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fMV8wKGEpIGEKLSMKLSMgZGVmaW5l
IEJPT1NUX1BQX1RVUExFX0VMRU1fMl8wKGEsIGIpIGEKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExF
X0VMRU1fMl8xKGEsIGIpIGIKLSMKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fM18wKGEs
IGIsIGMpIGEKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fM18xKGEsIGIsIGMpIGIKLSMg
ZGVmaW5lIEJPT1NUX1BQX1RVUExFX0VMRU1fM18yKGEsIGIsIGMpIGMKLSMKLSMgZW5kaWYKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXBy
b2Nlc3Nvci90dXBsZS9yZW0uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcHJlcHJvY2Vzc29yL3R1cGxlL3JlbS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGM5MzQ0NDdkNWFkYWQzOTlhOTE1NzFjYWZkZTk0MzI3OTZmYjJhZjYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3R1cGxlL3JlbS5ocHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotIyAvKiAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgKEMpIENvcHlyaWdodCBQYXVsIE1lbnNvbmlk
ZXMgMjAwMi0yMDExLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgKEMp
IENvcHlyaWdodCBFZHdhcmQgRGllbmVyIDIwMTEsMjAxMy4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKgotIyAgKiAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlICAgICAgKgotIyAgKiAgICAgYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgICAgICAgICAgICAgICAgICAgICAgICAg
KgotIyAgKiAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiogKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBt
b3N0IHJlY2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX1RV
UExFX1JFTV9IUFAKLSMgZGVmaW5lIEJPT1NUX1BSRVBST0NFU1NPUl9UVVBMRV9SRU1fSFBQCi0j
Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgotIyBpbmNsdWRlIDxib29z
dC9wcmVwcm9jZXNzb3IvY29uZmlnL2NvbmZpZy5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXBy
b2Nlc3Nvci9mYWNpbGl0aWVzL2V4cGFuZC5ocHA+Ci0jIGluY2x1ZGUgPGJvb3N0L3ByZXByb2Nl
c3Nvci9mYWNpbGl0aWVzL292ZXJsb2FkLmhwcD4KLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vz
c29yL3R1cGxlL2RldGFpbC9pc19zaW5nbGVfcmV0dXJuLmhwcD4KLSMKLSMgLyogQk9PU1RfUFBf
UkVNICovCi0jCi0jIGlmIEJPT1NUX1BQX1ZBUklBRElDUwotIyAJIGlmIEJPT1NUX1BQX1ZBUklB
RElDU19NU1ZDCi0JCS8qIFRvIGJlIHVzZWQgaW50ZXJuYWxseSB3aGVuIF9fVkFfQVJHU19fIGNv
dWxkIGJlIGVtcHR5ICggb3IgaXMgYSBzaW5nbGUgZWxlbWVudCApICovCi0jICAgIAlkZWZpbmUg
Qk9PU1RfUFBfUkVNX0NBVCguLi4pIEJPT1NUX1BQX0NBVChfX1ZBX0FSR1NfXywpCi0jIAkgZW5k
aWYKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1JFTSguLi4pIF9fVkFfQVJHU19fCi0jIGVsc2UKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1JFTSh4KSB4Ci0jIGVuZGlmCi0jCi0jIC8qIEJPT1NUX1BQX1RV
UExFX1JFTSAqLwotIwotLyoKLSAgVkMrKzguMCBjYW5ub3QgaGFuZGxlIHRoZSB2YXJpYWRpYyB2
ZXJzaW9uIG9mIEJPT1NUX1BQX1RVUExFX1JFTShzaXplKQotKi8KLSMgaWYgQk9PU1RfUFBfVkFS
SUFESUNTICYmICEoQk9PU1RfUFBfVkFSSUFESUNTX01TVkMgJiYgX01TQ19WRVIgPD0gMTQwMCkK
LSMgCSBpZiBCT09TVF9QUF9WQVJJQURJQ1NfTVNWQwotCQkvKiBUbyBiZSB1c2VkIGludGVybmFs
bHkgd2hlbiB0aGUgc2l6ZSBjb3VsZCBiZSAwICggb3IgMSApICovCi0jICAgIAlkZWZpbmUgQk9P
U1RfUFBfVFVQTEVfUkVNX0NBVChzaXplKSBCT09TVF9QUF9SRU1fQ0FUCi0jIAkgZW5kaWYKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTShzaXplKSBCT09TVF9QUF9SRU0KLSMgZWxzZQot
IyAgICBpZiB+Qk9PU1RfUFBfQ09ORklHX0ZMQUdTKCkgJiBCT09TVF9QUF9DT05GSUdfTVdDQygp
Ci0jICAgICAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNKHNpemUpIEJPT1NUX1BQX1RVUExF
X1JFTV9JKHNpemUpCi0jICAgIGVsc2UKLSMgICAgICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9S
RU0oc2l6ZSkgQk9PU1RfUFBfVFVQTEVfUkVNX09PKChzaXplKSkKLSMgICAgICAgIGRlZmluZSBC
T09TVF9QUF9UVVBMRV9SRU1fT08ocGFyKSBCT09TVF9QUF9UVVBMRV9SRU1fSSAjIyBwYXIKLSMg
ICAgZW5kaWYKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV9JKHNpemUpIEJPT1NUX1BQ
X1RVUExFX1JFTV8gIyMgc2l6ZQotIyBlbmRpZgotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVN
XzAoKQotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzEoZTApIGUwCi0jIGRlZmluZSBCT09T
VF9QUF9UVVBMRV9SRU1fMihlMCwgZTEpIGUwLCBlMQotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVf
UkVNXzMoZTAsIGUxLCBlMikgZTAsIGUxLCBlMgotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVN
XzQoZTAsIGUxLCBlMiwgZTMpIGUwLCBlMSwgZTIsIGUzCi0jIGRlZmluZSBCT09TVF9QUF9UVVBM
RV9SRU1fNShlMCwgZTEsIGUyLCBlMywgZTQpIGUwLCBlMSwgZTIsIGUzLCBlNAotIyBkZWZpbmUg
Qk9PU1RfUFBfVFVQTEVfUkVNXzYoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSkgZTAsIGUxLCBlMiwg
ZTMsIGU0LCBlNQotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzcoZTAsIGUxLCBlMiwgZTMs
IGU0LCBlNSwgZTYpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2Ci0jIGRlZmluZSBCT09TVF9Q
UF9UVVBMRV9SRU1fOChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcpIGUwLCBlMSwgZTIs
IGUzLCBlNCwgZTUsIGU2LCBlNwotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzkoZTAsIGUx
LCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCkgZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYs
IGU3LCBlOAotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzEwKGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCBlNywgZTgsIGU5KSBlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4
LCBlOQotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzExKGUwLCBlMSwgZTIsIGUzLCBlNCwg
ZTUsIGU2LCBlNywgZTgsIGU5LCBlMTApIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywg
ZTgsIGU5LCBlMTAKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV8xMihlMCwgZTEsIGUyLCBl
MywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEpIGUwLCBlMSwgZTIsIGUzLCBlNCwg
ZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMQotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVN
XzEzKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEy
KSBlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMgot
IyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzE0KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2
LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUs
IGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMKLSMgZGVmaW5lIEJPT1NUX1BQX1RV
UExFX1JFTV8xNShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBl
MTEsIGUxMiwgZTEzLCBlMTQpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5
LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNAotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzE2
KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBl
MTMsIGUxNCwgZTE1KSBlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEw
LCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNQotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzE3
KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBl
MTMsIGUxNCwgZTE1LCBlMTYpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5
LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYKLSMgZGVmaW5lIEJPT1NUX1BQX1RV
UExFX1JFTV8xOChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBl
MTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUs
IGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNwot
IyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzE5KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2
LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4
KSBlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwg
ZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOAotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVN
XzIwKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEy
LCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTkpIGUwLCBlMSwgZTIsIGUzLCBlNCwg
ZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUx
NywgZTE4LCBlMTkKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV8yMShlMCwgZTEsIGUyLCBl
MywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwg
ZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjApIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywg
ZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTks
IGUyMAotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzIyKGUwLCBlMSwgZTIsIGUzLCBlNCwg
ZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUx
NywgZTE4LCBlMTksIGUyMCwgZTIxKSBlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4
LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBl
MjAsIGUyMQotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzIzKGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYs
IGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2
LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4
LCBlMTksIGUyMCwgZTIxLCBlMjIKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV8yNChlMCwg
ZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBl
MTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMpIGUwLCBlMSwg
ZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwg
ZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMwotIyBkZWZpbmUgQk9P
U1RfUFBfVFVQTEVfUkVNXzI1KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5
LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwg
ZTIxLCBlMjIsIGUyMywgZTI0KSBlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAs
IGUyMSwgZTIyLCBlMjMsIGUyNAotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzI2KGUwLCBl
MSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUx
NCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUp
IGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBl
MTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0
LCBlMjUKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV8yNyhlMCwgZTEsIGUyLCBlMywgZTQs
IGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBl
MTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYpIGUwLCBlMSwg
ZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwg
ZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUy
NgotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzI4KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUs
IGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywg
ZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3KSBlMCwgZTEs
IGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQs
IGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBl
MjYsIGUyNwotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzI5KGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYs
IGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBl
MjgpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEy
LCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywg
ZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV8zMChl
MCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEz
LCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwg
ZTI1LCBlMjYsIGUyNywgZTI4LCBlMjkpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywg
ZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTks
IGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOQotIyBkZWZp
bmUgQk9PU1RfUFBfVFVQTEVfUkVNXzMxKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywg
ZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTks
IGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwKSBl
MCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEz
LCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwg
ZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMAotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVN
XzMyKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEy
LCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywg
ZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEpIGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYs
IGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBl
MjgsIGUyOSwgZTMwLCBlMzEKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV8zMyhlMCwgZTEs
IGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQs
IGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBl
MjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUs
IGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywg
ZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUy
OSwgZTMwLCBlMzEsIGUzMgotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzM0KGUwLCBlMSwg
ZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwg
ZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUy
NiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzKSBlMCwgZTEsIGUyLCBlMywgZTQs
IGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBl
MTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4
LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMwotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzM1
KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBl
MTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0
LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQpIGUwLCBl
MSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUx
NCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUs
IGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQKLSMgZGVmaW5lIEJP
T1NUX1BQX1RVUExFX1JFTV8zNihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAs
IGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBl
MzIsIGUzMywgZTM0LCBlMzUpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5
LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwg
ZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUz
MiwgZTMzLCBlMzQsIGUzNQotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzM3KGUwLCBlMSwg
ZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwg
ZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUy
NiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2KSBlMCwg
ZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBl
MTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1
LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNgot
IyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzM4KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2
LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4
LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwg
ZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcpIGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYs
IGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBl
MjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcKLSMgZGVmaW5l
IEJPT1NUX1BQX1RVUExFX1JFTV8zOShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4
LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBl
MjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMx
LCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgpIGUwLCBlMSwgZTIsIGUzLCBlNCwg
ZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUx
NywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgs
IGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOAotIyBkZWZp
bmUgQk9PU1RfUFBfVFVQTEVfUkVNXzQwKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywg
ZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTks
IGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBl
MzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5KSBlMCwgZTEsIGUyLCBl
MywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwg
ZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUy
NywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgs
IGUzOQotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzQxKGUwLCBlMSwgZTIsIGUzLCBlNCwg
ZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUx
NywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgs
IGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBl
NDApIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEy
LCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywg
ZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUz
NSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV80
MihlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwg
ZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUy
NCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUs
IGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2
LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4
LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwg
ZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0
MQotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzQzKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUs
IGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywg
ZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUy
OSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAs
IGU0MSwgZTQyKSBlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBl
MTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIy
LCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywg
ZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MgotIyBkZWZpbmUgQk9P
U1RfUFBfVFVQTEVfUkVNXzQ0KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5
LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwg
ZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUz
MiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMp
IGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBl
MTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0
LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwg
ZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMKLSMgZGVmaW5lIEJPT1NUX1BQ
X1RVUExFX1JFTV80NShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEw
LCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwg
ZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUz
MywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQp
IGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBl
MTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0
LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwg
ZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NAotIyBkZWZpbmUgQk9P
U1RfUFBfVFVQTEVfUkVNXzQ2KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5
LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwg
ZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUz
MiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMs
IGU0NCwgZTQ1KSBlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBl
MTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIy
LCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywg
ZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0
NQotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzQ3KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUs
IGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywg
ZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUy
OSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAs
IGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2
LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4
LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwg
ZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0
MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV80
OChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwg
ZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUy
NCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUs
IGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBl
NDcpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEy
LCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywg
ZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUz
NSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYs
IGU0NwotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzQ5KGUwLCBlMSwgZTIsIGUzLCBlNCwg
ZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUx
NywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgs
IGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBl
NDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4KSBlMCwgZTEsIGUyLCBl
MywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwg
ZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUy
NywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgs
IGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OAotIyBkZWZp
bmUgQk9PU1RfUFBfVFVQTEVfUkVNXzUwKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywg
ZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTks
IGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBl
MzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQy
LCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDkpIGUwLCBlMSwgZTIsIGUzLCBlNCwg
ZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUx
NywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgs
IGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBl
NDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDkKLSMgZGVmaW5l
IEJPT1NUX1BQX1RVUExFX1JFTV81MShlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4
LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBl
MjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMx
LCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0Miwg
ZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTApIGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYs
IGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBl
MjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5
LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MAot
IyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzUyKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2
LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4
LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwg
ZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0
MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxKSBlMCwg
ZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBl
MTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1
LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwg
ZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0
OCwgZTQ5LCBlNTAsIGU1MQotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzUzKGUwLCBlMSwg
ZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwg
ZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUy
NiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcs
IGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBl
NDksIGU1MCwgZTUxLCBlNTIpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5
LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwg
ZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUz
MiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMs
IGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIKLSMgZGVmaW5lIEJP
T1NUX1BQX1RVUExFX1JFTV81NChlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAs
IGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBl
MzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQz
LCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMpIGUwLCBl
MSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUx
NCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUs
IGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBl
MzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4
LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MwotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzU1
KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBl
MTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0
LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwg
ZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0
NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0KSBlMCwgZTEsIGUyLCBlMywgZTQs
IGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBl
MTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4
LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwg
ZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1
MSwgZTUyLCBlNTMsIGU1NAotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzU2KGUwLCBlMSwg
ZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwg
ZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUy
NiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcs
IGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBl
NDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUs
IGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywg
ZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUy
OSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAs
IGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBl
NTIsIGU1MywgZTU0LCBlNTUKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV81NyhlMCwgZTEs
IGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQs
IGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBl
MjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3
LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwg
ZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYpIGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYs
IGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBl
MjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5
LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwg
ZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NgotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVN
XzU4KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEy
LCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywg
ZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUz
NSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYs
IGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3KSBl
MCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEz
LCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwg
ZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUz
NiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcs
IGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NwotIyBkZWZp
bmUgQk9PU1RfUFBfVFVQTEVfUkVNXzU5KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywg
ZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTks
IGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBl
MzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQy
LCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1Mywg
ZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywg
ZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTks
IGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBl
MzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQy
LCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1Mywg
ZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV82MChl
MCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEz
LCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwg
ZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUz
NiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcs
IGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBl
NTkpIGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEy
LCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywg
ZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUz
NSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYs
IGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBl
NTgsIGU1OQotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzYxKGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYs
IGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBl
MjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5
LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwg
ZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwKSBlMCwgZTEs
IGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQs
IGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBl
MjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3
LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwg
ZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2
MAotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzYyKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUs
IGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywg
ZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUy
OSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAs
IGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBl
NTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEpIGUwLCBlMSwg
ZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwg
ZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUy
NiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcs
IGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBl
NDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYw
LCBlNjEKLSMgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV82MyhlMCwgZTEsIGUyLCBlMywgZTQs
IGU1LCBlNiwgZTcsIGU4LCBlOSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBl
MTcsIGUxOCwgZTE5LCBlMjAsIGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4
LCBlMjksIGUzMCwgZTMxLCBlMzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwg
ZTQwLCBlNDEsIGU0MiwgZTQzLCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1
MSwgZTUyLCBlNTMsIGU1NCwgZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIp
IGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBl
MTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0
LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwg
ZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0
NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgs
IGU1OSwgZTYwLCBlNjEsIGU2MgotIyBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNXzY0KGUwLCBl
MSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUx
NCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUs
IGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBl
MzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4
LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwg
ZTYwLCBlNjEsIGU2MiwgZTYzKSBlMCwgZTEsIGUyLCBlMywgZTQsIGU1LCBlNiwgZTcsIGU4LCBl
OSwgZTEwLCBlMTEsIGUxMiwgZTEzLCBlMTQsIGUxNSwgZTE2LCBlMTcsIGUxOCwgZTE5LCBlMjAs
IGUyMSwgZTIyLCBlMjMsIGUyNCwgZTI1LCBlMjYsIGUyNywgZTI4LCBlMjksIGUzMCwgZTMxLCBl
MzIsIGUzMywgZTM0LCBlMzUsIGUzNiwgZTM3LCBlMzgsIGUzOSwgZTQwLCBlNDEsIGU0MiwgZTQz
LCBlNDQsIGU0NSwgZTQ2LCBlNDcsIGU0OCwgZTQ5LCBlNTAsIGU1MSwgZTUyLCBlNTMsIGU1NCwg
ZTU1LCBlNTYsIGU1NywgZTU4LCBlNTksIGU2MCwgZTYxLCBlNjIsIGU2MwotIwotIyAvKiBCT09T
VF9QUF9UVVBMRV9SRU1fQ1RPUiAqLwotIwotIyBpZiBCT09TVF9QUF9WQVJJQURJQ1MKLSMgICAg
aWYgQk9PU1RfUFBfVkFSSUFESUNTX01TVkMKLSMgICAgICAgIGRlZmluZSBCT09TVF9QUF9UVVBM
RV9SRU1fQ1RPUiguLi4pIEJPT1NUX1BQX1RVUExFX1JFTV9DVE9SX0koQk9PU1RfUFBfT1ZFUkxP
QUQoQk9PU1RfUFBfVFVQTEVfUkVNX0NUT1JfT18sIF9fVkFfQVJHU19fKSwgKF9fVkFfQVJHU19f
KSkKLSMgICAgICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9SRU1fQ1RPUl9JKG0sIGFyZ3MpIEJP
T1NUX1BQX1RVUExFX1JFTV9DVE9SX0lJKG0sIGFyZ3MpCi0jICAgICAgICBkZWZpbmUgQk9PU1Rf
UFBfVFVQTEVfUkVNX0NUT1JfSUkobSwgYXJncykgQk9PU1RfUFBfQ0FUKG0gIyMgYXJncywpCi0j
ICAgIAkgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV9DVE9SX09fMSh0dXBsZSkgQk9PU1RfUFBf
RVhQQU5EKEJPT1NUX1BQX1RVUExFX0lTX1NJTkdMRV9SRVRVUk4oQk9PU1RfUFBfUkVNX0NBVCxC
T09TVF9QUF9SRU0sdHVwbGUpIHR1cGxlKQotIyAgICBlbHNlCi0jICAgICAgICBkZWZpbmUgQk9P
U1RfUFBfVFVQTEVfUkVNX0NUT1IoLi4uKSBCT09TVF9QUF9PVkVSTE9BRChCT09TVF9QUF9UVVBM
RV9SRU1fQ1RPUl9PXywgX19WQV9BUkdTX18pKF9fVkFfQVJHU19fKQotIyAgICAJIGRlZmluZSBC
T09TVF9QUF9UVVBMRV9SRU1fQ1RPUl9PXzEodHVwbGUpIEJPT1NUX1BQX1JFTSB0dXBsZQotIyAg
ICBlbmRpZgotIyAgICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNX0NUT1JfT18yKHNpemUsIHR1
cGxlKSBCT09TVF9QUF9UVVBMRV9SRU1fQ1RPUl9PXzEodHVwbGUpCi0jIGVsc2UKLSMgICAgaWYg
fkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX0VERygpCi0jICAgICAg
ICBkZWZpbmUgQk9PU1RfUFBfVFVQTEVfUkVNX0NUT1Ioc2l6ZSwgdHVwbGUpIEJPT1NUX1BQX1RV
UExFX1JFTV9DVE9SX0koQk9PU1RfUFBfVFVQTEVfUkVNKHNpemUpLCB0dXBsZSkKLSMgICAgZWxz
ZQotIyAgICAgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV9DVE9SKHNpemUsIHR1cGxlKSBC
T09TVF9QUF9UVVBMRV9SRU1fQ1RPUl9EKHNpemUsIHR1cGxlKQotIyAgICAgICAgZGVmaW5lIEJP
T1NUX1BQX1RVUExFX1JFTV9DVE9SX0Qoc2l6ZSwgdHVwbGUpIEJPT1NUX1BQX1RVUExFX1JFTV9D
VE9SX0koQk9PU1RfUFBfVFVQTEVfUkVNKHNpemUpLCB0dXBsZSkKLSMgICAgZW5kaWYKLSMgICAg
aWYgfkJPT1NUX1BQX0NPTkZJR19GTEFHUygpICYgQk9PU1RfUFBfQ09ORklHX01XQ0MoKQotIyAg
ICAgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JFTV9DVE9SX0koZXh0LCB0dXBsZSkgZXh0IHR1
cGxlCi0jICAgIGVsc2UKLSMgICAgICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9SRU1fQ1RPUl9J
KGV4dCwgdHVwbGUpIEJPT1NUX1BQX1RVUExFX1JFTV9DVE9SX09PKChleHQsIHR1cGxlKSkKLSMg
ICAgICAgIGRlZmluZSBCT09TVF9QUF9UVVBMRV9SRU1fQ1RPUl9PTyhwYXIpIEJPT1NUX1BQX1RV
UExFX1JFTV9DVE9SX0lJICMjIHBhcgotIyAgICAgICAgZGVmaW5lIEJPT1NUX1BQX1RVUExFX1JF
TV9DVE9SX0lJKGV4dCwgdHVwbGUpIGV4dCAjIyB0dXBsZQotIyAgICBlbmRpZgotIyBlbmRpZgot
IwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcHJlcHJvY2Vzc29yL3ZhcmlhZGljL2VsZW0uaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3ZhcmlhZGljL2VsZW0uaHBw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTM4YTk0MjliZGNjY2UwZGRiZGNlODVl
NTNkODA4ZTMwZDgyZGViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3ByZXByb2Nl
c3Nvci92YXJpYWRpYy9lbGVtLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLSMg
LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKLSMgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMgICogICAgIChD
KSBDb3B5cmlnaHQgRWR3YXJkIERpZW5lciAyMDExLiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICoKLSMgICogICAgIChDKSBDb3B5cmlnaHQgUGF1bCBNZW5zb25pZGVzIDIwMTEu
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMgICogICAgIERpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSAgICAg
ICoKLSMgICogICAgIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0
ICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMgICogICAgIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSMgICog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICoKLSMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0jCi0jIC8qIFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbi4gKi8KLSMKLSMgaWZu
ZGVmIEJPT1NUX1BSRVBST0NFU1NPUl9WQVJJQURJQ19FTEVNX0hQUAotIyBkZWZpbmUgQk9PU1Rf
UFJFUFJPQ0VTU09SX1ZBUklBRElDX0VMRU1fSFBQCi0jCi0jIGluY2x1ZGUgPGJvb3N0L3ByZXBy
b2Nlc3Nvci9jYXQuaHBwPgotIyBpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY29uZmlnL2Nv
bmZpZy5ocHA+Ci0jCi0jIC8qIEJPT1NUX1BQX1ZBUklBRElDX0VMRU0gKi8KLSMKLSMgaWYgQk9P
U1RfUFBfVkFSSUFESUNTCi0jICAgIGlmIEJPT1NUX1BQX1ZBUklBRElDU19NU1ZDCi0jICAgICAg
ICBkZWZpbmUgQk9PU1RfUFBfVkFSSUFESUNfRUxFTShuLCAuLi4pIEJPT1NUX1BQX1ZBUklBRElD
X0VMRU1fSShuLF9fVkFfQVJHU19fKQotIyAgICAgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElD
X0VMRU1fSShuLCAuLi4pIEJPT1NUX1BQX0NBVChCT09TVF9QUF9DQVQoQk9PU1RfUFBfVkFSSUFE
SUNfRUxFTV8sIG4pKF9fVkFfQVJHU19fLCksKQotIyAgICBlbHNlCi0jICAgICAgICBkZWZpbmUg
Qk9PU1RfUFBfVkFSSUFESUNfRUxFTShuLCAuLi4pIEJPT1NUX1BQX0NBVChCT09TVF9QUF9WQVJJ
QURJQ19FTEVNXywgbikoX19WQV9BUkdTX18sKQotIyAgICBlbmRpZgotIyAgICBkZWZpbmUgQk9P
U1RfUFBfVkFSSUFESUNfRUxFTV8wKGUwLCAuLi4pIGUwCi0jICAgIGRlZmluZSBCT09TVF9QUF9W
QVJJQURJQ19FTEVNXzEoZTAsIGUxLCAuLi4pIGUxCi0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJ
QURJQ19FTEVNXzIoZTAsIGUxLCBlMiwgLi4uKSBlMgotIyAgICBkZWZpbmUgQk9PU1RfUFBfVkFS
SUFESUNfRUxFTV8zKGUwLCBlMSwgZTIsIGUzLCAuLi4pIGUzCi0jICAgIGRlZmluZSBCT09TVF9Q
UF9WQVJJQURJQ19FTEVNXzQoZTAsIGUxLCBlMiwgZTMsIGU0LCAuLi4pIGU0Ci0jICAgIGRlZmlu
ZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzUoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgLi4uKSBl
NQotIyAgICBkZWZpbmUgQk9PU1RfUFBfVkFSSUFESUNfRUxFTV82KGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCAuLi4pIGU2Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzco
ZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCAuLi4pIGU3Ci0jICAgIGRlZmluZSBCT09T
VF9QUF9WQVJJQURJQ19FTEVNXzgoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwg
Li4uKSBlOAotIyAgICBkZWZpbmUgQk9PU1RfUFBfVkFSSUFESUNfRUxFTV85KGUwLCBlMSwgZTIs
IGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCAuLi4pIGU5Ci0jICAgIGRlZmluZSBCT09TVF9Q
UF9WQVJJQURJQ19FTEVNXzEwKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5
LCBlMTAsIC4uLikgZTEwCi0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzExKGUw
LCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgLi4uKSBlMTEK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDX0VMRU1fMTIoZTAsIGUxLCBlMiwgZTMsIGU0
LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIC4uLikgZTEyCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzEzKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBl
NywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIC4uLikgZTEzCi0jICAgIGRlZmluZSBCT09T
VF9QUF9WQVJJQURJQ19FTEVNXzE0KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgs
IGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgLi4uKSBlMTQKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX1ZBUklBRElDX0VMRU1fMTUoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwg
ZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIC4uLikgZTE1Ci0jICAgIGRlZmluZSBC
T09TVF9QUF9WQVJJQURJQ19FTEVNXzE2KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywg
ZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIC4uLikgZTE2Ci0jICAg
IGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzE3KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUs
IGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywg
Li4uKSBlMTcKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDX0VMRU1fMTgoZTAsIGUxLCBl
MiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBl
MTUsIGUxNiwgZTE3LCBlMTgsIC4uLikgZTE4Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJ
Q19FTEVNXzE5KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUx
MSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIC4uLikgZTE5Ci0jICAg
IGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzIwKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUs
IGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywg
ZTE4LCBlMTksIGUyMCwgLi4uKSBlMjAKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDX0VM
RU1fMjEoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBl
MTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIC4uLikgZTIx
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzIyKGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYs
IGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIC4uLikgZTIyCi0jICAgIGRlZmluZSBCT09T
VF9QUF9WQVJJQURJQ19FTEVNXzIzKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgs
IGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUy
MCwgZTIxLCBlMjIsIGUyMywgLi4uKSBlMjMKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElD
X0VMRU1fMjQoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTEx
LCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwg
ZTIzLCBlMjQsIC4uLikgZTI0Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzI1
KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBl
MTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0
LCBlMjUsIC4uLikgZTI1Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzI2KGUw
LCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMs
IGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBl
MjUsIGUyNiwgLi4uKSBlMjYKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDX0VMRU1fMjco
ZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUx
MywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQs
IGUyNSwgZTI2LCBlMjcsIC4uLikgZTI3Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19F
TEVNXzI4KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwg
ZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUy
MywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIC4uLikgZTI4Ci0jICAgIGRlZmluZSBCT09TVF9Q
UF9WQVJJQURJQ19FTEVNXzI5KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5
LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwg
ZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgLi4uKSBlMjkKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDX0VMRU1fMzAoZTAsIGUxLCBlMiwgZTMsIGU0LCBl
NSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3
LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwg
ZTI5LCBlMzAsIC4uLikgZTMwCi0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzMx
KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBl
MTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0
LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIC4uLikgZTMxCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzMyKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBl
NywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBl
MTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMw
LCBlMzEsIGUzMiwgLi4uKSBlMzIKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDX0VMRU1f
MzMoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIs
IGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBl
MjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIC4uLikgZTMz
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzM0KGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYs
IGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBl
MjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIC4uLikgZTM0Ci0jICAgIGRlZmluZSBC
T09TVF9QUF9WQVJJQURJQ19FTEVNXzM1KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywg
ZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTks
IGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBl
MzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgLi4uKSBlMzUKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZB
UklBRElDX0VMRU1fMzYoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUx
MCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEs
IGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBl
MzMsIGUzNCwgZTM1LCBlMzYsIC4uLikgZTM2Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJ
Q19FTEVNXzM3KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUx
MSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIs
IGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBl
MzQsIGUzNSwgZTM2LCBlMzcsIC4uLikgZTM3Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJ
Q19FTEVNXzM4KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUx
MSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIs
IGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBl
MzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgLi4uKSBlMzgKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZB
UklBRElDX0VMRU1fMzkoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUx
MCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEs
IGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBl
MzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIC4uLikgZTM5Ci0jICAgIGRlZmluZSBC
T09TVF9QUF9WQVJJQURJQ19FTEVNXzQwKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywg
ZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTks
IGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBl
MzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIC4uLikgZTQw
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzQxKGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYs
IGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBl
MjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5
LCBlNDAsIGU0MSwgLi4uKSBlNDEKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDX0VMRU1f
NDIoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIs
IGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBl
MjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1
LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIC4uLikgZTQyCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzQzKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBl
NywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBl
MTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMw
LCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwg
ZTQyLCBlNDMsIC4uLikgZTQzCi0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzQ0
KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBl
MTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0
LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwg
ZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgLi4uKSBlNDQKLSMg
ICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDX0VMRU1fNDUoZTAsIGUxLCBlMiwgZTMsIGU0LCBl
NSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3
LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwg
ZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0
MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIC4uLikgZTQ1Ci0jICAgIGRlZmluZSBCT09TVF9Q
UF9WQVJJQURJQ19FTEVNXzQ2KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5
LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwg
ZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUz
MiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMs
IGU0NCwgZTQ1LCBlNDYsIC4uLikgZTQ2Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19F
TEVNXzQ3KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwg
ZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUy
MywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQs
IGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBl
NDYsIGU0NywgLi4uKSBlNDcKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDX0VMRU1fNDgo
ZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUx
MywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQs
IGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBl
MzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3
LCBlNDgsIC4uLikgZTQ4Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzQ5KGUw
LCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMs
IGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBl
MjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2
LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0Nywg
ZTQ4LCBlNDksIC4uLikgZTQ5Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzUw
KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBl
MTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0
LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwg
ZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0
NywgZTQ4LCBlNDksIGU1MCwgLi4uKSBlNTAKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElD
X0VMRU1fNTEoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTEx
LCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwg
ZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUz
NCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUs
IGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIC4uLikgZTUxCi0jICAgIGRlZmluZSBCT09T
VF9QUF9WQVJJQURJQ19FTEVNXzUyKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgs
IGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUy
MCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEs
IGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBl
NDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIC4uLikgZTUy
Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzUzKGUwLCBlMSwgZTIsIGUzLCBl
NCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYs
IGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBl
MjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5
LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwg
ZTUxLCBlNTIsIGU1MywgLi4uKSBlNTMKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDX0VM
RU1fNTQoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBl
MTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIz
LCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwg
ZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0
NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIC4uLikgZTU0Ci0jICAg
IGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzU1KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUs
IGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywg
ZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUy
OSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAs
IGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBl
NTIsIGU1MywgZTU0LCBlNTUsIC4uLikgZTU1Ci0jICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJ
Q19FTEVNXzU2KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgsIGU5LCBlMTAsIGUx
MSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIs
IGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBl
MzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1
LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0LCBlNTUsIGU1Niwg
Li4uKSBlNTYKLSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDX0VMRU1fNTcoZTAsIGUxLCBl
MiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBl
MTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2
LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywg
ZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0
OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIC4uLikgZTU3Ci0jICAg
IGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzU4KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUs
IGU2LCBlNywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywg
ZTE4LCBlMTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUy
OSwgZTMwLCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAs
IGU0MSwgZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBl
NTIsIGU1MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIC4uLikgZTU4Ci0jICAgIGRlZmluZSBC
T09TVF9QUF9WQVJJQURJQ19FTEVNXzU5KGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywg
ZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTks
IGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBl
MzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQy
LCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1Mywg
ZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgLi4uKSBlNTkKLSMgICAgZGVmaW5lIEJPT1NU
X1BQX1ZBUklBRElDX0VMRU1fNjAoZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwg
ZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIw
LCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwg
ZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0
MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQs
IGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIC4uLikgZTYwCi0jICAgIGRlZmluZSBCT09T
VF9QUF9WQVJJQURJQ19FTEVNXzYxKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBlNywgZTgs
IGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBlMTksIGUy
MCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMwLCBlMzEs
IGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwgZTQyLCBl
NDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1MywgZTU0
LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEsIC4uLikgZTYxCi0jICAgIGRlZmlu
ZSBCT09TVF9QUF9WQVJJQURJQ19FTEVNXzYyKGUwLCBlMSwgZTIsIGUzLCBlNCwgZTUsIGU2LCBl
NywgZTgsIGU5LCBlMTAsIGUxMSwgZTEyLCBlMTMsIGUxNCwgZTE1LCBlMTYsIGUxNywgZTE4LCBl
MTksIGUyMCwgZTIxLCBlMjIsIGUyMywgZTI0LCBlMjUsIGUyNiwgZTI3LCBlMjgsIGUyOSwgZTMw
LCBlMzEsIGUzMiwgZTMzLCBlMzQsIGUzNSwgZTM2LCBlMzcsIGUzOCwgZTM5LCBlNDAsIGU0MSwg
ZTQyLCBlNDMsIGU0NCwgZTQ1LCBlNDYsIGU0NywgZTQ4LCBlNDksIGU1MCwgZTUxLCBlNTIsIGU1
MywgZTU0LCBlNTUsIGU1NiwgZTU3LCBlNTgsIGU1OSwgZTYwLCBlNjEsIGU2MiwgLi4uKSBlNjIK
LSMgICAgZGVmaW5lIEJPT1NUX1BQX1ZBUklBRElDX0VMRU1fNjMoZTAsIGUxLCBlMiwgZTMsIGU0
LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUxMCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwg
ZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEsIGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUy
OCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBlMzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzks
IGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBl
NTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwgZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYy
LCBlNjMsIC4uLikgZTYzCi0jIGVuZGlmCi0jCi0jIGVuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVwcm9jZXNzb3IvdmFyaWFkaWMv
c2l6ZS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9wcmVw
cm9jZXNzb3IvdmFyaWFkaWMvc2l6ZS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGI5MmE1ZmZlMDY4ZTI4MzA3YTRjZGUzYjA5MGExMGQyODU2YmY1OTEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvcHJlcHJvY2Vzc29yL3ZhcmlhZGljL3NpemUuaHBwCisrKyAvZGV2
L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKgotIyAgKiAgICAgKEMpIENvcHlyaWdodCBFZHdhcmQgRGllbmVyIDIwMTEu
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgKEMpIENvcHly
aWdodCBQYXVsIE1lbnNvbmlkZXMgMjAxMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKgotIyAgKiAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLiAoU2VlICAgICAgKgotIyAgKiAgICAgYWNjb21wYW55aW5nIGZpbGUg
TElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAg
KiAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKgotIyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotIyAgKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiogKi8KLSMKLSMgLyogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJl
Y2VudCB2ZXJzaW9uLiAqLwotIwotIyBpZm5kZWYgQk9PU1RfUFJFUFJPQ0VTU09SX1ZBUklBRElD
X1NJWkVfSFBQCi0jIGRlZmluZSBCT09TVF9QUkVQUk9DRVNTT1JfVkFSSUFESUNfU0laRV9IUFAK
LSMKLSMgaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHA+Ci0jIGluY2x1ZGUgPGJv
b3N0L3ByZXByb2Nlc3Nvci9jb25maWcvY29uZmlnLmhwcD4KLSMKLSMgLyogQk9PU1RfUFBfVkFS
SUFESUNfU0laRSAqLwotIwotIyBpZiBCT09TVF9QUF9WQVJJQURJQ1MKLSMgICAgaWYgQk9PU1Rf
UFBfVkFSSUFESUNTX01TVkMKLSMgICAgICAgIGRlZmluZSBCT09TVF9QUF9WQVJJQURJQ19TSVpF
KC4uLikgQk9PU1RfUFBfQ0FUKEJPT1NUX1BQX1ZBUklBRElDX1NJWkVfSShfX1ZBX0FSR1NfXywg
NjQsIDYzLCA2MiwgNjEsIDYwLCA1OSwgNTgsIDU3LCA1NiwgNTUsIDU0LCA1MywgNTIsIDUxLCA1
MCwgNDksIDQ4LCA0NywgNDYsIDQ1LCA0NCwgNDMsIDQyLCA0MSwgNDAsIDM5LCAzOCwgMzcsIDM2
LCAzNSwgMzQsIDMzLCAzMiwgMzEsIDMwLCAyOSwgMjgsIDI3LCAyNiwgMjUsIDI0LCAyMywgMjIs
IDIxLCAyMCwgMTksIDE4LCAxNywgMTYsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcs
IDYsIDUsIDQsIDMsIDIsIDEsKSwpCi0jICAgIGVsc2UKLSMgICAgICAgIGRlZmluZSBCT09TVF9Q
UF9WQVJJQURJQ19TSVpFKC4uLikgQk9PU1RfUFBfVkFSSUFESUNfU0laRV9JKF9fVkFfQVJHU19f
LCA2NCwgNjMsIDYyLCA2MSwgNjAsIDU5LCA1OCwgNTcsIDU2LCA1NSwgNTQsIDUzLCA1MiwgNTEs
IDUwLCA0OSwgNDgsIDQ3LCA0NiwgNDUsIDQ0LCA0MywgNDIsIDQxLCA0MCwgMzksIDM4LCAzNywg
MzYsIDM1LCAzNCwgMzMsIDMyLCAzMSwgMzAsIDI5LCAyOCwgMjcsIDI2LCAyNSwgMjQsIDIzLCAy
MiwgMjEsIDIwLCAxOSwgMTgsIDE3LCAxNiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwg
NywgNiwgNSwgNCwgMywgMiwgMSwpCi0jICAgIGVuZGlmCi0jICAgIGRlZmluZSBCT09TVF9QUF9W
QVJJQURJQ19TSVpFX0koZTAsIGUxLCBlMiwgZTMsIGU0LCBlNSwgZTYsIGU3LCBlOCwgZTksIGUx
MCwgZTExLCBlMTIsIGUxMywgZTE0LCBlMTUsIGUxNiwgZTE3LCBlMTgsIGUxOSwgZTIwLCBlMjEs
IGUyMiwgZTIzLCBlMjQsIGUyNSwgZTI2LCBlMjcsIGUyOCwgZTI5LCBlMzAsIGUzMSwgZTMyLCBl
MzMsIGUzNCwgZTM1LCBlMzYsIGUzNywgZTM4LCBlMzksIGU0MCwgZTQxLCBlNDIsIGU0MywgZTQ0
LCBlNDUsIGU0NiwgZTQ3LCBlNDgsIGU0OSwgZTUwLCBlNTEsIGU1MiwgZTUzLCBlNTQsIGU1NSwg
ZTU2LCBlNTcsIGU1OCwgZTU5LCBlNjAsIGU2MSwgZTYyLCBlNjMsIHNpemUsIC4uLikgc2l6ZQot
IyBlbmRpZgotIwotIyBlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGExNjRlN2ViMWFlZGFiZDIzNTg0MTkyOWFjMDJkZmIzZjk3ZTVhY2QuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAg
QEAKLS8qIGJvb3N0IHJhbmRvbS5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgSmVu
cyBNYXVyZXIgMjAwMC0yMDAxCi0gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdh
cmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvcmFuZG9tIGZvciBk
b2N1bWVudGF0aW9uLgotICoKLSAqICRJZCQKLSAqCi0gKiBSZXZpc2lvbiBoaXN0b3J5Ci0gKiAg
MjAwMC0wMi0xOCAgcG9ydGFiaWxpdHkgZml4ZXMgKHRoYW5rcyB0byBCZW1hbiBEYXdlcykKLSAq
ICAyMDAwLTAyLTIxICBzaHVmZmxlX291dHB1dCwgaW52ZXJzaXZlX2NvbmdydWVudGlhbF9zY2hy
YWdlLAotICogICAgICAgICAgICAgIGdlbmVyYXRvcl9pdGVyYXRvciwgdW5pZm9ybV9zbWFsbGlu
dAotICogIDIwMDAtMDItMjMgIGdlbmVyaWMgbW9kdWx1cyBhcml0aG1ldGljIGhlbHBlciwgcmVt
b3ZlZCAqX3NjaHJhZ2UgY2xhc3NlcywKLSAqICAgICAgICAgICAgICBpbXBsZW1lbnRlZCBTdHJl
YW1hYmxlIGFuZCBFcXVhbGl0eUNvbXBhcmFibGUgY29uY2VwdHMgZm9yIAotICogICAgICAgICAg
ICAgIGdlbmVyYXRvcnMsIGFkZGVkIEJlcm5vdWxsaSBkaXN0cmlidXRpb24gYW5kIEJveC1NdWxs
ZXIKLSAqICAgICAgICAgICAgICB0cmFuc2Zvcm0KLSAqICAyMDAwLTAzLTAxICBjYXVjaHksIGxv
Z25vcm1hbCwgdHJpYW5nbGUgZGlzdHJpYnV0aW9uczsgZml4ZWQgCi0gKiAgICAgICAgICAgICAg
dW5pZm9ybV9zbWFsbGludDsgcmVuYW1lZCBnYXVzc2lhbiB0byBub3JtYWwgZGlzdHJpYnV0aW9u
Ci0gKiAgMjAwMC0wMy0wNSAgaW1wbGVtZW50ZWQgaXRlcmF0b3Igc3ludGF4IGZvciBkaXN0cmli
dXRpb24gZnVuY3Rpb25zCi0gKiAgMjAwMC0wNC0yMSAgcmVtb3ZlZCBzb21lIG9wdGltaXphdGlv
bnMgZm9yIGJldHRlciBCQ0MvTVNWQyBjb21wYXRpYmlsaXR5Ci0gKiAgMjAwMC0wNS0xMCAgYWRh
cHRlZCB0byBCQ0MgYW5kIE1TVkMKLSAqICAyMDAwLTA2LTEzICBpbmNvcnBvcmF0ZWQgcmV2aWV3
IHJlc3VsdHMKLSAqICAyMDAwLTA3LTA2ICBtb3ZlZCBiYXNpYyB0ZW1wbGF0ZXMgZnJvbSBuYW1l
c3BhY2UgZGV0YWlsIHRvIHJhbmRvbQotICogIDIwMDAtMDktMjMgIHdhcm5pbmcgcmVtb3ZhbHMg
YW5kIGludDY0IGZpeGVzIChFZCBCcmV5KQotICogIDIwMDAtMDktMjQgIGFkZGVkIGxhZ2dlZF9m
aWJvbmFjY2kgZ2VuZXJhdG9yIChNYXR0aGlhcyBUcm95ZXIpCi0gKiAgMjAwMS0wMi0xOCAgbW92
ZWQgdG8gaW5kaXZpZHVhbCBoZWFkZXIgZmlsZXMKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1JBTkRP
TV9IUFAKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0hQUAotCi0vLyBnZW5lcmF0b3JzCi0jaW5jbHVk
ZSA8Ym9vc3QvcmFuZG9tL2FkZGl0aXZlX2NvbWJpbmUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3Jh
bmRvbS9kaXNjYXJkX2Jsb2NrLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vaW5kZXBlbmRl
bnRfYml0cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2ludmVyc2l2ZV9jb25ncnVlbnRp
YWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9sYWdnZWRfZmlib25hY2NpLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9yYW5kb20vbGluZWFyX2NvbmdydWVudGlhbC5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvcmFuZG9tL2xpbmVhcl9mZWVkYmFja19zaGlmdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
cmFuZG9tL21lcnNlbm5lX3R3aXN0ZXIuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9yYW5s
dXguaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9zaHVmZmxlX29yZGVyLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9yYW5kb20vc2h1ZmZsZV9vdXRwdXQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3Jh
bmRvbS9zdWJ0cmFjdF93aXRoX2NhcnJ5LmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vdGF1
czg4LmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20veG9yX2NvbWJpbmUuaHBwPgotCi0vLyBt
aXNjCi0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2dlbmVyYXRlX2Nhbm9uaWNhbC5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvcmFuZG9tL3NlZWRfc2VxLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20v
cmFuZG9tX251bWJlcl9nZW5lcmF0b3IuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS92YXJp
YXRlX2dlbmVyYXRvci5ocHA+Ci0KLS8vIGRpc3RyaWJ1dGlvbnMKLSNpbmNsdWRlIDxib29zdC9y
YW5kb20vYmVybm91bGxpX2Rpc3RyaWJ1dGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9t
L2JldGFfZGlzdHJpYnV0aW9uLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vYmlub21pYWxf
ZGlzdHJpYnV0aW9uLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vY2F1Y2h5X2Rpc3RyaWJ1
dGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2NoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlv
bi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2Rpc2NyZXRlX2Rpc3RyaWJ1dGlvbi5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2V4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbi5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2V4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9yYW5kb20vZmlzaGVyX2ZfZGlzdHJpYnV0aW9uLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9yYW5kb20vZ2FtbWFfZGlzdHJpYnV0aW9uLmhwcD4KLSNpbmNsdWRlIDxib29zdC9y
YW5kb20vZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9t
L2h5cGVyZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5k
b20vbGFwbGFjZV9kaXN0cmlidXRpb24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9sb2du
b3JtYWxfZGlzdHJpYnV0aW9uLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vbmVnYXRpdmVf
Ymlub21pYWxfZGlzdHJpYnV0aW9uLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vbm9uX2Nl
bnRyYWxfY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5k
b20vbm9ybWFsX2Rpc3RyaWJ1dGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL3BpZWNl
d2lzZV9jb25zdGFudF9kaXN0cmlidXRpb24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9w
aWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9t
L3BvaXNzb25fZGlzdHJpYnV0aW9uLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vc3R1ZGVu
dF90X2Rpc3RyaWJ1dGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL3RyaWFuZ2xlX2Rp
c3RyaWJ1dGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL3VuaWZvcm1fMDEuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L3JhbmRvbS91bmlmb3JtX2ludC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
cmFuZG9tL3VuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFu
ZG9tL3VuaWZvcm1fb25fc3BoZXJlLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vdW5pZm9y
bV9yZWFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vdW5pZm9ybV9yZWFsX2Rpc3RyaWJ1
dGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL3VuaWZvcm1fc21hbGxpbnQuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L3JhbmRvbS93ZWlidWxsX2Rpc3RyaWJ1dGlvbi5ocHA+Ci0KLSNpbmNs
dWRlIDxib29zdC9yYW5kb20vZ2VuZXJhdGVfY2Fub25pY2FsLmhwcD4KLQotI2VuZGlmIC8vIEJP
T1NUX1JBTkRPTV9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3JhbmRvbS9hZGRpdGl2ZV9jb21iaW5lLmhwcCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9hZGRpdGl2ZV9jb21iaW5lLmhwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc4NmUxODQ3M2EzMzQxMmRkYzcxMGVlZjQw
NmI3ODQ1MmYzZTFiYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vYWRk
aXRpdmVfY29tYmluZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyogYm9v
c3QgcmFuZG9tL2FkZGl0aXZlX2NvbWJpbmUuaHBwIGhlYWRlciBmaWxlCi0gKgotICogQ29weXJp
Z2h0IEplbnMgTWF1cmVyIDIwMDAtMjAwMQotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCBy
ZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgot
ICogUmV2aXNpb24gaGlzdG9yeQotICogIDIwMDEtMDItMTggIG1vdmVkIHRvIGluZGl2aWR1YWwg
aGVhZGVyIGZpbGVzCi0gKi8KLQotI2lmbmRlZiBCT09TVF9SQU5ET01fQURESVRJVkVfQ09NQklO
RV9IUFAKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0FERElUSVZFX0NPTUJJTkVfSFBQCi0KLSNpbmNs
dWRlIDxpc3RyZWFtPgotI2luY2x1ZGUgPGlvc2Z3ZD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+IC8v
IGZvciBzdGQ6Om1pbiBhbmQgc3RkOjptYXgKLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L2NzdGRpbnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRh
aWwvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL29wZXJhdG9ycy5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9zZWVkLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9yYW5kb20vbGluZWFyX2NvbmdydWVudGlhbC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7
Ci1uYW1lc3BhY2UgcmFuZG9tIHsKLQotLyoqCi0gKiBBbiBpbnN0YW50aWF0aW9uIG9mIGNsYXNz
IHRlbXBsYXRlIEBjIGFkZGl0aXZlX2NvbWJpbmVfZW5naW5lIG1vZGVscyBhCi0gKiBccHNldWRv
X3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLiBJdCBjb21iaW5lcyB0d28gbXVsdGlwbGljYXRpdmUK
LSAqIFxsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZSBudW1iZXIgZ2VuZXJhdG9ycywgaS5lLiB0
aG9zZSB3aXRoIEBjIGMgPSAwLgotICogSXQgaXMgZGVzY3JpYmVkIGluCi0gKgotICogIEBibG9j
a3F1b3RlCi0gKiAgIkVmZmljaWVudCBhbmQgUG9ydGFibGUgQ29tYmluZWQgUmFuZG9tIE51bWJl
ciBHZW5lcmF0b3JzIiwgUGllcnJlIEwnRWN1eWVyLAotICogIENvbW11bmljYXRpb25zIG9mIHRo
ZSBBQ00sIFZvbC4gMzEsIE5vLiA2LCBKdW5lIDE5ODgsIHBwLiA3NDItNzQ5LCA3NzQKLSAqICBA
ZW5kYmxvY2txdW90ZQotICoKLSAqIFRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIE1MQ0cxIGFuZCBN
TENHMiBzaGFsbCBkZW5vdGUgdHdvIGRpZmZlcmVudAotICogXGxpbmVhcl9jb25ncnVlbnRpYWxf
ZW5naW5lIG51bWJlciBnZW5lcmF0b3JzLCBlYWNoIHdpdGggYyA9IDAuIEVhY2gKLSAqIGludm9j
YXRpb24gcmV0dXJucyBhIHJhbmRvbSBudW1iZXIKLSAqIFgobikgOj0gKE1MQ0cxKG4pIC0gTUxD
RzIobikpIG1vZCAobTEgLSAxKSwKLSAqIHdoZXJlIG0xIGRlbm90ZXMgdGhlIG1vZHVsdXMgb2Yg
TUxDRzEuIAotICovCi10ZW1wbGF0ZTxjbGFzcyBNTENHMSwgY2xhc3MgTUxDRzI+Ci1jbGFzcyBh
ZGRpdGl2ZV9jb21iaW5lX2VuZ2luZQotewotcHVibGljOgotICAgIHR5cGVkZWYgTUxDRzEgZmly
c3RfYmFzZTsKLSAgICB0eXBlZGVmIE1MQ0cyIHNlY29uZF9iYXNlOwotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgTUxDRzE6OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwotCi0gICAgLy8gUmVxdWlyZWQg
Ynkgb2xkIEJvb3N0LlJhbmRvbSBjb25jZXB0Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJv
b2wsIGhhc19maXhlZF9yYW5nZSA9IGZhbHNlKTsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRo
ZSBzbWFsbGVzdCB2YWx1ZSB0aGF0IHRoZSBnZW5lcmF0b3IgY2FuIHByb2R1Y2UKLSAgICAgKi8K
LSAgICBzdGF0aWMgcmVzdWx0X3R5cGUgbWluIEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVU
SU9OICgpCi0gICAgeyByZXR1cm4gMTsgfQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxh
cmdlc3QgdmFsdWUgdGhhdCB0aGUgZ2VuZXJhdG9yIGNhbiBwcm9kdWNlCi0gICAgICovCi0gICAg
c3RhdGljIHJlc3VsdF90eXBlIG1heCBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAo
KQotICAgIHsgcmV0dXJuIE1MQ0cxOjptb2R1bHVzLTE7IH0KLQotICAgIC8qKgotICAgICAqIENv
bnN0cnVjdHMgYW4gQGMgYWRkaXRpdmVfY29tYmluZV9lbmdpbmUgdXNpbmcgdGhlCi0gICAgICog
ZGVmYXVsdCBjb25zdHJ1Y3RvcnMgb2YgdGhlIHR3byBiYXNlIGdlbmVyYXRvcnMuCi0gICAgICov
Ci0gICAgYWRkaXRpdmVfY29tYmluZV9lbmdpbmUoKSA6IF9tbGNnMSgpLCBfbWxjZzIoKSB7IH0K
LSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIEBjIGFkZGl0aXZlX2NvbWJpbmVfZW5naW5l
LCB1c2luZyBzZWVkIGFzCi0gICAgICogdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50IGZvciBib3Ro
IGJhc2UgZ2VuZXJhdG9ycy4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0FSSVRI
TUVUSUNfQ09OU1RSVUNUT1IoYWRkaXRpdmVfY29tYmluZV9lbmdpbmUsCi0gICAgICAgIHJlc3Vs
dF90eXBlLCBzZWVkX2FyZykKLSAgICB7Ci0gICAgICAgIF9tbGNnMS5zZWVkKHNlZWRfYXJnKTsK
LSAgICAgICAgX21sY2cyLnNlZWQoc2VlZF9hcmcpOwotICAgIH0KLSAgICAvKioKLSAgICAgKiBD
b25zdHJ1Y3RzIGFuIEBjIGFkZGl0aXZlX2NvbWJpbmVfZW5naW5lLCB1c2luZyBzZXEgYXMKLSAg
ICAgKiB0aGUgY29uc3RydWN0b3IgYXJndW1lbnQgZm9yIGJvdGggYmFzZSBnZW5lcmF0b3JzLgot
ICAgICAqCi0gICAgICogQHhtbHdhcm5pbmcKLSAgICAgKiBUaGUgc2VtYW50aWNzIG9mIHRoaXMg
ZnVuY3Rpb24gYXJlIGxpYWJsZSB0byBjaGFuZ2UuCi0gICAgICogQSBAYyBzZWVkX3NlcSBpcyBk
ZXNpZ25lZCB0byBnZW5lcmF0ZSBhbGwgdGhlIHNlZWRzCi0gICAgICogaW4gb25lIHNob3QsIGJ1
dCB0aGlzIHNlZWRzIHRoZSB0d28gYmFzZSBlbmdpbmVzCi0gICAgICogaW5kZXBlbmRhbnRseSBh
bmQgcHJvYmFibHkgZW5kcyB1cCBnaXZpbmcgdGhlIHNhbWUKLSAgICAgKiBzZXF1ZW5jZSB0byBi
b3RoLgotICAgICAqIEBlbmR4bWx3YXJuaW5nCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RF
VEFJTF9TRUVEX1NFUV9DT05TVFJVQ1RPUihhZGRpdGl2ZV9jb21iaW5lX2VuZ2luZSwKLSAgICAg
ICAgU2VlZFNlcSwgc2VxKQotICAgIHsKLSAgICAgICAgX21sY2cxLnNlZWQoc2VxKTsKLSAgICAg
ICAgX21sY2cyLnNlZWQoc2VxKTsKLSAgICB9Ci0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBh
biBAYyBhZGRpdGl2ZV9jb21iaW5lX2VuZ2luZSwgdXNpbmcKLSAgICAgKiBAYyBzZWVkMSBhbmQg
QGMgc2VlZDIgYXMgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50IHRvCi0gICAgICogdGhlIGZpcnN0
IGFuZCBzZWNvbmQgYmFzZSBnZW5lcmF0b3JzLCByZXNwZWN0aXZlbHkuCi0gICAgICovCi0gICAg
YWRkaXRpdmVfY29tYmluZV9lbmdpbmUodHlwZW5hbWUgTUxDRzE6OnJlc3VsdF90eXBlIHNlZWQx
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBNTENHMjo6cmVzdWx0X3R5
cGUgc2VlZDIpCi0gICAgICA6IF9tbGNnMShzZWVkMSksIF9tbGNnMihzZWVkMikgeyB9Ci0gICAg
LyoqCi0gICAgICogQ29udHJ1Y3RzIGFuIEBjIGFkZGl0aXZlX2NvbWJpbmVfZW5naW5lIHdpdGgK
LSAgICAgKiB2YWx1ZXMgZnJvbSB0aGUgcmFuZ2UgZGVmaW5lZCBieSB0aGUgaW5wdXQgaXRlcmF0
b3JzIGZpcnN0Ci0gICAgICogYW5kIGxhc3QuICBmaXJzdCB3aWxsIGJlIG1vZGlmaWVkIHRvIHBv
aW50IHRvIHRoZSBlbGVtZW50Ci0gICAgICogYWZ0ZXIgdGhlIGxhc3Qgb25lIHVzZWQuCi0gICAg
ICoKLSAgICAgKiBUaHJvd3M6IEBjIHN0ZDo6aW52YWxpZF9hcmd1bWVudCBpZiB0aGUgaW5wdXQg
cmFuZ2UgaXMgdG9vIHNtYWxsLgotICAgICAqCi0gICAgICogRXhjZXB0aW9uIFNhZmV0eTogQmFz
aWMKLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBJdD4gYWRkaXRpdmVfY29tYmluZV9lbmdp
bmUoSXQmIGZpcnN0LCBJdCBsYXN0KQotICAgICAgOiBfbWxjZzEoZmlyc3QsIGxhc3QpLCBfbWxj
ZzIoZmlyc3QsIGxhc3QpIHsgfQotCi0gICAgLyoqCi0gICAgICogU2VlZHMgYW4gQGMgYWRkaXRp
dmVfY29tYmluZV9lbmdpbmUgdXNpbmcgdGhlIGRlZmF1bHQKLSAgICAgKiBzZWVkcyBvZiB0aGUg
dHdvIGJhc2UgZ2VuZXJhdG9ycy4KLSAgICAgKi8KLSAgICB2b2lkIHNlZWQoKQotICAgIHsKLSAg
ICAgICAgX21sY2cxLnNlZWQoKTsKLSAgICAgICAgX21sY2cyLnNlZWQoKTsKLSAgICB9Ci0KLSAg
ICAvKioKLSAgICAgKiBTZWVkcyBhbiBAYyBhZGRpdGl2ZV9jb21iaW5lX2VuZ2luZSwgdXNpbmcg
QGMgc2VlZCBhcyB0aGUKLSAgICAgKiBzZWVkIGZvciBib3RoIGJhc2UgZ2VuZXJhdG9ycy4KLSAg
ICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0FSSVRITUVUSUNfU0VFRChhZGRpdGl2ZV9j
b21iaW5lX2VuZ2luZSwKLSAgICAgICAgcmVzdWx0X3R5cGUsIHNlZWRfYXJnKQotICAgIHsKLSAg
ICAgICAgX21sY2cxLnNlZWQoc2VlZF9hcmcpOwotICAgICAgICBfbWxjZzIuc2VlZChzZWVkX2Fy
Zyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VlZHMgYW4gQGMgYWRkaXRpdmVfY29tYmlu
ZV9lbmdpbmUsIHVzaW5nIEBjIHNlcSB0bwotICAgICAqIHNlZWQgYm90aCBiYXNlIGdlbmVyYXRv
cnMuCi0gICAgICoKLSAgICAgKiBTZWUgdGhlIHdhcm5pbmcgb24gdGhlIGNvcnJlc3BvbmRpbmcg
Y29uc3RydWN0b3IuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9TRUVEX1NFUV9T
RUVEKGFkZGl0aXZlX2NvbWJpbmVfZW5naW5lLAotICAgICAgICBTZWVkU2VxLCBzZXEpCi0gICAg
ewotICAgICAgICBfbWxjZzEuc2VlZChzZXEpOwotICAgICAgICBfbWxjZzIuc2VlZChzZXEpOwot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlZWRzIGFuIEBjIGFkZGl0aXZlX2NvbWJpbmUgZ2Vu
ZXJhdG9yLCB1c2luZyBAYyBzZWVkMSBhbmQgQGMgc2VlZDIgYXMKLSAgICAgKiB0aGUgc2VlZHMg
dG8gdGhlIGZpcnN0IGFuZCBzZWNvbmQgYmFzZSBnZW5lcmF0b3JzLCByZXNwZWN0aXZlbHkuCi0g
ICAgICovCi0gICAgdm9pZCBzZWVkKHR5cGVuYW1lIE1MQ0cxOjpyZXN1bHRfdHlwZSBzZWVkMSwK
LSAgICAgICAgICAgICAgdHlwZW5hbWUgTUxDRzI6OnJlc3VsdF90eXBlIHNlZWQyKQotICAgIHsK
LSAgICAgICAgX21sY2cxLnNlZWQoc2VlZDEpOwotICAgICAgICBfbWxjZzIuc2VlZChzZWVkMik7
Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VlZHMgYW4gQGMgYWRkaXRpdmVfY29tYmluZV9l
bmdpbmUgd2l0aAotICAgICAqIHZhbHVlcyBmcm9tIHRoZSByYW5nZSBkZWZpbmVkIGJ5IHRoZSBp
bnB1dCBpdGVyYXRvcnMgZmlyc3QKLSAgICAgKiBhbmQgbGFzdC4gIGZpcnN0IHdpbGwgYmUgbW9k
aWZpZWQgdG8gcG9pbnQgdG8gdGhlIGVsZW1lbnQKLSAgICAgKiBhZnRlciB0aGUgbGFzdCBvbmUg
dXNlZC4KLSAgICAgKgotICAgICAqIFRocm93czogQGMgc3RkOjppbnZhbGlkX2FyZ3VtZW50IGlm
IHRoZSBpbnB1dCByYW5nZSBpcyB0b28gc21hbGwuCi0gICAgICoKLSAgICAgKiBFeGNlcHRpb24g
U2FmZXR5OiBCYXNpYwotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIEl0PiB2b2lkIHNlZWQo
SXQmIGZpcnN0LCBJdCBsYXN0KQotICAgIHsKLSAgICAgICAgX21sY2cxLnNlZWQoZmlyc3QsIGxh
c3QpOwotICAgICAgICBfbWxjZzIuc2VlZChmaXJzdCwgbGFzdCk7Ci0gICAgfQotCi0gICAgLyoq
IFJldHVybnMgdGhlIG5leHQgdmFsdWUgb2YgdGhlIGdlbmVyYXRvci4gKi8KLSAgICByZXN1bHRf
dHlwZSBvcGVyYXRvcigpKCkgewotICAgICAgICByZXN1bHRfdHlwZSB2YWwxID0gX21sY2cxKCk7
Ci0gICAgICAgIHJlc3VsdF90eXBlIHZhbDIgPSBfbWxjZzIoKTsKLSAgICAgICAgaWYodmFsMiA8
IHZhbDEpIHJldHVybiB2YWwxIC0gdmFsMjsKLSAgICAgICAgZWxzZSByZXR1cm4gdmFsMSAtIHZh
bDIgKyBNTENHMTo6bW9kdWx1cyAtIDE7Ci0gICAgfQotICAKLSAgICAvKiogRmlsbHMgYSByYW5n
ZSB3aXRoIHJhbmRvbSB2YWx1ZXMgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBJdGVyPgotICAgIHZv
aWQgZ2VuZXJhdGUoSXRlciBmaXJzdCwgSXRlciBsYXN0KQotICAgIHsgZGV0YWlsOjpnZW5lcmF0
ZV9mcm9tX2ludCgqdGhpcywgZmlyc3QsIGxhc3QpOyB9Ci0KLSAgICAvKiogQWR2YW5jZXMgdGhl
IHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IgYnkgQGMgei4gKi8KLSAgICB2b2lkIGRpc2NhcmQoYm9v
c3Q6OnVpbnRtYXhfdCB6KQotICAgIHsKLSAgICAgICAgX21sY2cxLmRpc2NhcmQoeik7Ci0gICAg
ICAgIF9tbGNnMi5kaXNjYXJkKHopOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdyaXRlcyB0
aGUgc3RhdGUgb2YgYW4gQGMgYWRkaXRpdmVfY29tYmluZV9lbmdpbmUgdG8gYSBAYwotICAgICAq
IHN0ZDo6b3N0cmVhbS4gIFRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIEBjCi0gICAg
ICogYWRkaXRpdmVfY29tYmluZV9lbmdpbmUgaXMgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24g
b2YKLSAgICAgKiB0aGUgZmlyc3QgYmFzZSBnZW5lcmF0b3IgZm9sbG93ZWQgYnkgdGhlIHRleHR1
YWwgcmVwcmVzZW50YXRpb24KLSAgICAgKiBvZiB0aGUgc2Vjb25kIGJhc2UgZ2VuZXJhdG9yLgot
ICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihvcywgYWRk
aXRpdmVfY29tYmluZV9lbmdpbmUsIHIpCi0gICAgeyBvcyA8PCByLl9tbGNnMSA8PCAnICcgPDwg
ci5fbWxjZzI7IHJldHVybiBvczsgfQotCi0gICAgLyoqCi0gICAgICogUmVhZHMgdGhlIHN0YXRl
IG9mIGFuIEBjIGFkZGl0aXZlX2NvbWJpbmVfZW5naW5lIGZyb20gYQotICAgICAqIEBjIHN0ZDo6
aXN0cmVhbS4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0lTVFJFQU1fT1BFUkFU
T1IoaXMsIGFkZGl0aXZlX2NvbWJpbmVfZW5naW5lLCByKQotICAgIHsgaXMgPj4gci5fbWxjZzEg
Pj4gc3RkOjp3cyA+PiByLl9tbGNnMjsgcmV0dXJuIGlzOyB9Ci0KLSAgICAvKioKLSAgICAgKiBS
ZXR1cm5zOiB0cnVlIGlmZiB0aGUgdHdvIEBjIGFkZGl0aXZlX2NvbWJpbmVfZW5naW5lcyB3aWxs
Ci0gICAgICogcHJvZHVjZSB0aGUgc2FtZSBzZXF1ZW5jZSBvZiB2YWx1ZXMuCi0gICAgICovCi0g
ICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElUWV9PUEVSQVRPUihhZGRpdGl2ZV9jb21iaW5l
X2VuZ2luZSwgeCwgeSkKLSAgICB7IHJldHVybiB4Ll9tbGNnMSA9PSB5Ll9tbGNnMSAmJiB4Ll9t
bGNnMiA9PSB5Ll9tbGNnMjsgfQotICAgIC8qKgotICAgICAqIFJldHVybnM6IHRydWUgaWZmIHRo
ZSB0d28gQGMgYWRkaXRpdmVfY29tYmluZV9lbmdpbmVzIHdpbGwKLSAgICAgKiBwcm9kdWNlIGRp
ZmZlcmVudCBzZXF1ZW5jZXMgb2YgdmFsdWVzLgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9E
RVRBSUxfSU5FUVVBTElUWV9PUEVSQVRPUihhZGRpdGl2ZV9jb21iaW5lX2VuZ2luZSkKLQotcHJp
dmF0ZToKLSAgICBNTENHMSBfbWxjZzE7Ci0gICAgTUxDRzIgX21sY2cyOwotfTsKLQotI2lmbmRl
ZiBCT09TVF9OT19JTkNMQVNTX01FTUJFUl9JTklUSUFMSVpBVElPTgotdGVtcGxhdGU8Y2xhc3Mg
TUxDRzEsIGNsYXNzIE1MQ0cyPgotY29uc3QgYm9vbCBhZGRpdGl2ZV9jb21iaW5lX2VuZ2luZTxN
TENHMSwgTUxDRzI+OjpoYXNfZml4ZWRfcmFuZ2U7Ci0jZW5kaWYKLQotLy8vIFxjb25kIHNob3df
ZGVwcmVjYXRlZAotCi0vKiogUHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAq
LwotdGVtcGxhdGU8Y2xhc3MgTUxDRzEsIGNsYXNzIE1MQ0cyLCB0eXBlbmFtZSBNTENHMTo6cmVz
dWx0X3R5cGUgdmFsID0gMD4KLWNsYXNzIGFkZGl0aXZlX2NvbWJpbmUgOiBwdWJsaWMgYWRkaXRp
dmVfY29tYmluZV9lbmdpbmU8TUxDRzEsIE1MQ0cyPgotewotICAgIHR5cGVkZWYgYWRkaXRpdmVf
Y29tYmluZV9lbmdpbmU8TUxDRzEsIE1MQ0cyPiBiYXNlX3Q7Ci1wdWJsaWM6Ci0gICAgdHlwZWRl
ZiB0eXBlbmFtZSBiYXNlX3Q6OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwotICAgIGFkZGl0aXZl
X2NvbWJpbmUoKSB7fQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgYWRkaXRpdmVfY29tYmlu
ZShUJiBhcmcpIDogYmFzZV90KGFyZykge30KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIGFk
ZGl0aXZlX2NvbWJpbmUoY29uc3QgVCYgYXJnKSA6IGJhc2VfdChhcmcpIHt9Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgSXQ+Ci0gICAgYWRkaXRpdmVfY29tYmluZShJdCYgZmlyc3QsIEl0IGxhc3QpIDog
YmFzZV90KGZpcnN0LCBsYXN0KSB7fQotfTsKLQotLy8vIFxlbmRjb25kCi0KLS8qKgotICogVGhl
IHNwZWNpYWxpemF0aW9uIFxlY3V5ZXIxOTg4IHdhcyBzdWdnZXN0ZWQgaW4KLSAqCi0gKiAgQGJs
b2NrcXVvdGUKLSAqICAiRWZmaWNpZW50IGFuZCBQb3J0YWJsZSBDb21iaW5lZCBSYW5kb20gTnVt
YmVyIEdlbmVyYXRvcnMiLCBQaWVycmUgTCdFY3V5ZXIsCi0gKiAgQ29tbXVuaWNhdGlvbnMgb2Yg
dGhlIEFDTSwgVm9sLiAzMSwgTm8uIDYsIEp1bmUgMTk4OCwgcHAuIDc0Mi03NDksIDc3NAotICog
IEBlbmRibG9ja3F1b3RlCi0gKi8KLXR5cGVkZWYgYWRkaXRpdmVfY29tYmluZV9lbmdpbmU8Ci0g
ICAgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmU8dWludDMyX3QsIDQwMDE0LCAwLCAyMTQ3NDgz
NTYzPiwKLSAgICBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZTx1aW50MzJfdCwgNDA2OTIsIDAs
IDIxNDc0ODMzOTk+Ci0+IGVjdXllcjE5ODg7Ci0KLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotCi11
c2luZyByYW5kb206OmVjdXllcjE5ODg7Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRp
ZiAvLyBCT09TVF9SQU5ET01fQURESVRJVkVfQ09NQklORV9IUFAKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9iZXJub3VsbGlfZGlz
dHJpYnV0aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3JhbmRvbS9iZXJub3VsbGlfZGlzdHJpYnV0aW9uLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDY2YmFlNDM4OWQ5MDY5MDE4MTgyYTAwM2Q0MmNhY2ZmNzY4MmVjYy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vYmVybm91bGxpX2Rpc3RyaWJ1dGlvbi5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAotLyogYm9vc3QgcmFuZG9tL2Jlcm5v
dWxsaV9kaXN0cmlidXRpb24uaHBwIGhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0IEplbnMg
TWF1cmVyIDIwMDAtMjAwMQotICogQ29weXJpZ2h0IFN0ZXZlbiBXYXRhbmFiZSAyMDExCi0gKiBE
aXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAu
IChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0g
KiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6
Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVu
dGF0aW9uLgotICoKLSAqICRJZCQKLSAqCi0gKiBSZXZpc2lvbiBoaXN0b3J5Ci0gKiAgMjAwMS0w
Mi0xOCAgbW92ZWQgdG8gaW5kaXZpZHVhbCBoZWFkZXIgZmlsZXMKLSAqLwotCi0jaWZuZGVmIEJP
T1NUX1JBTkRPTV9CRVJOT1VMTElfRElTVFJJQlVUSU9OX0hQUAotI2RlZmluZSBCT09TVF9SQU5E
T01fQkVSTk9VTExJX0RJU1RSSUJVVElPTl9IUFAKLQotI2luY2x1ZGUgPGlvc2Z3ZD4KLSNpbmNs
dWRlIDxib29zdC9hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvY29u
ZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL29wZXJhdG9ycy5ocHA+Ci0K
LW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgcmFuZG9tIHsKLQotLyoqCi0gKiBJbnN0YW50
aWF0aW9ucyBvZiBjbGFzcyB0ZW1wbGF0ZSBcYmVybm91bGxpX2Rpc3RyaWJ1dGlvbiBtb2RlbCBh
Ci0gKiBccmFuZG9tX2Rpc3RyaWJ1dGlvbi4gU3VjaCBhIHJhbmRvbSBkaXN0cmlidXRpb24gcHJv
ZHVjZXMgYm9vbCB2YWx1ZXMKLSAqIGRpc3RyaWJ1dGVkIHdpdGggcHJvYmFiaWxpdGllcyBQKHRy
dWUpID0gcCBhbmQgUChmYWxzZSkgPSAxLXAuIHAgaXMKLSAqIHRoZSBwYXJhbWV0ZXIgb2YgdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqLwotdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGUgPSBkb3VibGU+Ci1j
bGFzcyBiZXJub3VsbGlfZGlzdHJpYnV0aW9uCi17Ci1wdWJsaWM6Ci0gICAgLy8gSW4gcHJpbmNp
cGxlLCB0aGlzIGNvdWxkIHdvcmsgd2l0aCBib3RoIGludGVnZXIgYW5kIGZsb2F0aW5nLXBvaW50
Ci0gICAgLy8gdHlwZXMuICBHZW5lcmF0aW5nIGZsb2F0aW5nLXBvaW50IHJhbmRvbSBudW1iZXJz
IGluIHRoZSBmaXJzdAotICAgIC8vIHBsYWNlIGlzIHByb2JhYmx5IG1vcmUgZXhwZW5zaXZlLCBz
byB1c2UgaW50ZWdlciBhcyBpbnB1dC4KLSAgICB0eXBlZGVmIGludCBpbnB1dF90eXBlOwotICAg
IHR5cGVkZWYgYm9vbCByZXN1bHRfdHlwZTsKLQotICAgIGNsYXNzIHBhcmFtX3R5cGUKLSAgICB7
Ci0gICAgcHVibGljOgotCi0gICAgICAgIHR5cGVkZWYgYmVybm91bGxpX2Rpc3RyaWJ1dGlvbiBk
aXN0cmlidXRpb25fdHlwZTsKLQotICAgICAgICAvKiogCi0gICAgICAgICAqIENvbnN0cnVjdHMg
dGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KLSAgICAgICAgICoKLSAgICAgICAg
ICogUmVxdWlyZXM6IDAgPD0gcCA8PSAxCi0gICAgICAgICAqLwotICAgICAgICBleHBsaWNpdCBw
YXJhbV90eXBlKFJlYWxUeXBlIHBfYXJnID0gUmVhbFR5cGUoMC41KSkKLSAgICAgICAgICA6IF9w
KHBfYXJnKQotICAgICAgICB7Ci0gICAgICAgICAgICBCT09TVF9BU1NFUlQoX3AgPj0gMCk7Ci0g
ICAgICAgICAgICBCT09TVF9BU1NFUlQoX3AgPD0gMSk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
KiogUmV0dXJucyB0aGUgcCBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICAg
ICAgUmVhbFR5cGUgcCgpIGNvbnN0IHsgcmV0dXJuIF9wOyB9Ci0KLSAgICAgICAgLyoqIFdyaXRl
cyB0aGUgcGFyYW1ldGVycyB0byBhIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICAgICAgQk9PU1RfUkFO
RE9NX0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCBwYXJhbV90eXBlLCBwYXJtKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBvcyA8PCBwYXJtLl9wOwotICAgICAgICAgICAgcmV0dXJuIG9zOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLyoqIFJlYWRzIHRoZSBwYXJhbWV0ZXJzIGZyb20gYSBzdGQ6
OmlzdHJlYW0uICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRP
UihpcywgcGFyYW1fdHlwZSwgcGFybSkKLSAgICAgICAgewotICAgICAgICAgICAgaXMgPj4gcGFy
bS5fcDsKLSAgICAgICAgICAgIHJldHVybiBpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKiBS
ZXR1cm5zIHRydWUgaWYgdGhlIHR3byBzZXRzIG9mIHBhcmFtZXRlcnMgYXJlIGVxdWFsLiAqLwot
ICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0VRVUFMSVRZX09QRVJBVE9SKHBhcmFtX3R5cGUs
IGxocywgcmhzKQotICAgICAgICB7IHJldHVybiBsaHMuX3AgPT0gcmhzLl9wOyB9Ci0KLSAgICAg
ICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgZGlm
ZmVyZW50LiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0lORVFVQUxJVFlfT1BFUkFU
T1IocGFyYW1fdHlwZSkKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlYWxUeXBlIF9wOwotICAg
IH07Ci0KLSAgICAvKiogCi0gICAgICogQ29uc3RydWN0cyBhIFxiZXJub3VsbGlfZGlzdHJpYnV0
aW9uIG9iamVjdC4KLSAgICAgKiBwIGlzIHRoZSBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlv
bi4KLSAgICAgKgotICAgICAqIFJlcXVpcmVzOiAwIDw9IHAgPD0gMQotICAgICAqLwotICAgIGV4
cGxpY2l0IGJlcm5vdWxsaV9kaXN0cmlidXRpb24oY29uc3QgUmVhbFR5cGUmIHBfYXJnID0gUmVh
bFR5cGUoMC41KSkgCi0gICAgICA6IF9wKHBfYXJnKQotICAgIHsKLSAgICAgICAgQk9PU1RfQVNT
RVJUKF9wID49IDApOwotICAgICAgICBCT09TVF9BU1NFUlQoX3AgPD0gMSk7Ci0gICAgfQotICAg
IC8qKgotICAgICAqIENvbnN0cnVjdHMgXGJlcm5vdWxsaV9kaXN0cmlidXRpb24gZnJvbSBpdHMg
cGFyYW1ldGVycwotICAgICAqLwotICAgIGV4cGxpY2l0IGJlcm5vdWxsaV9kaXN0cmlidXRpb24o
Y29uc3QgcGFyYW1fdHlwZSYgcGFybSkKLSAgICAgIDogX3AocGFybS5wKCkpIHt9Ci0KLSAgICAv
LyBjb21waWxlci1nZW5lcmF0ZWQgY29weSBjdG9yIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yIGFy
ZSBmaW5lCi0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zOiBUaGUgInAiIHBhcmFtZXRlciBvZiB0
aGUgZGlzdHJpYnV0aW9uLgotICAgICAqLwotICAgIFJlYWxUeXBlIHAoKSBjb25zdCB7IHJldHVy
biBfcDsgfQotCi0gICAgLyoqIFJldHVybnMgdGhlIHNtYWxsZXN0IHZhbHVlIHRoYXQgdGhlIGRp
c3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4gKi8KLSAgICBib29sIG1pbiBCT09TVF9QUkVWRU5UX01B
Q1JPX1NVQlNUSVRVVElPTiAoKSBjb25zdAotICAgIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgLyoq
IFJldHVybnMgdGhlIGxhcmdlc3QgdmFsdWUgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGNhbiBwcm9k
dWNlLiAqLwotICAgIGJvb2wgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgp
IGNvbnN0Ci0gICAgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLyoqIFJldHVybnMgdGhlIHBhcmFt
ZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICBwYXJhbV90eXBlIHBhcmFtKCkgY29u
c3QgeyByZXR1cm4gcGFyYW1fdHlwZShfcCk7IH0KLSAgICAvKiogU2V0cyB0aGUgcGFyYW1ldGVy
cyBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIHZvaWQgcGFyYW0oY29uc3QgcGFyYW1fdHlw
ZSYgcGFybSkgeyBfcCA9IHBhcm0ucCgpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBFZmZlY3RzOiBT
dWJzZXF1ZW50IHVzZXMgb2YgdGhlIGRpc3RyaWJ1dGlvbiBkbyBub3QgZGVwZW5kCi0gICAgICog
b24gdmFsdWVzIHByb2R1Y2VkIGJ5IGFueSBlbmdpbmUgcHJpb3IgdG8gaW52b2tpbmcgcmVzZXQu
Ci0gICAgICovCi0gICAgdm9pZCByZXNldCgpIHsgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJu
czogYSByYW5kb20gdmFyaWF0ZSBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlCi0gICAgICog
XGJlcm5vdWxsaV9kaXN0cmlidXRpb24uCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5n
aW5lPgotICAgIGJvb2wgb3BlcmF0b3IoKShFbmdpbmUmIGVuZykgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGlmKF9wID09IFJlYWxUeXBlKDApKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gUmVhbFR5cGUoZW5nKCkgLSAoZW5nLm1pbiko
KSkgPD0gX3AgKiBSZWFsVHlwZSgoZW5nLm1heCkoKS0oZW5nLm1pbikoKSk7Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogUmV0dXJuczogYSByYW5kb20gdmFyaWF0ZSBkaXN0cmlidXRlZCBhY2Nv
cmRpbmcgdG8gdGhlCi0gICAgICogXGJlcm5vdWxsaV9kaXN0cmlidXRpb24gd2l0aCBwYXJhbWV0
ZXJzIHNwZWNpZmllZCBieSBwYXJhbS4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmdp
bmU+Ci0gICAgYm9vbCBvcGVyYXRvcigpKEVuZ2luZSYgZW5nLCBjb25zdCBwYXJhbV90eXBlJiBw
YXJtKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGJlcm5vdWxsaV9kaXN0cmlidXRpb24o
cGFybSkoZW5nKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXcml0ZXMgdGhlIHBhcmFtZXRl
cnMgb2YgdGhlIGRpc3RyaWJ1dGlvbiB0byBhIEBjIHN0ZDo6b3N0cmVhbS4KLSAgICAgKi8KLSAg
ICBCT09TVF9SQU5ET01fREVUQUlMX09TVFJFQU1fT1BFUkFUT1Iob3MsIGJlcm5vdWxsaV9kaXN0
cmlidXRpb24sIGJkKQotICAgIHsKLSAgICAgICAgb3MgPDwgYmQuX3A7Ci0gICAgICAgIHJldHVy
biBvczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWFkcyB0aGUgcGFyYW1ldGVycyBvZiB0
aGUgZGlzdHJpYnV0aW9uIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uCi0gICAgICovCi0gICAgQk9P
U1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlzLCBiZXJub3VsbGlfZGlzdHJpYnV0
aW9uLCBiZCkKLSAgICB7Ci0gICAgICAgIGlzID4+IGJkLl9wOwotICAgICAgICByZXR1cm4gaXM7
Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmZiB0aGUgdHdvIGRpc3Ry
aWJ1dGlvbnMgd2lsbCBwcm9kdWNlIGlkZW50aWNhbAotICAgICAqIHNlcXVlbmNlcyBvZiB2YWx1
ZXMgZ2l2ZW4gZXF1YWwgZ2VuZXJhdG9ycy4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVU
QUlMX0VRVUFMSVRZX09QRVJBVE9SKGJlcm5vdWxsaV9kaXN0cmlidXRpb24sIGxocywgcmhzKQot
ICAgIHsgcmV0dXJuIGxocy5fcCA9PSByaHMuX3A7IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBS
ZXR1cm5zIHRydWUgaWZmIHRoZSB0d28gZGlzdHJpYnV0aW9ucyB3aWxsIHByb2R1Y2UgZGlmZmVy
ZW50Ci0gICAgICogc2VxdWVuY2VzIG9mIHZhbHVlcyBnaXZlbiBlcXVhbCBnZW5lcmF0b3JzLgot
ICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5FUVVBTElUWV9PUEVSQVRPUihiZXJu
b3VsbGlfZGlzdHJpYnV0aW9uKQotCi1wcml2YXRlOgotICAgIFJlYWxUeXBlIF9wOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgcmFuZG9tCi0KLXVzaW5nIHJhbmRvbTo6YmVybm91bGxpX2Rpc3RyaWJ1
dGlvbjsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9C
RVJOT1VMTElfRElTVFJJQlVUSU9OX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2JldGFfZGlzdHJpYnV0aW9uLmhwcCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9iZXRhX2Rpc3Ry
aWJ1dGlvbi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYmI3MmJmZTJkYTk2
YjU1NjA3NGFiNGFhM2IzMDdmZDFkZTNkMTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcmFuZG9tL2JldGFfZGlzdHJpYnV0aW9uLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4NCAr
MCwwIEBACi0vKiBib29zdCByYW5kb20vYmV0YV9kaXN0cmlidXRpb24uaHBwIGhlYWRlciBmaWxl
Ci0gKgotICogQ29weXJpZ2h0IFN0ZXZlbiBXYXRhbmFiZSAyMDE0Ci0gKiBEaXN0cmlidXRlZCB1
bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotICoK
LSAqICRJZCQKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9CRVRBX0RJU1RSSUJVVElPTl9I
UFAKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0JFVEFfRElTVFJJQlVUSU9OX0hQUAotCi0jaW5jbHVk
ZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxpc3RyZWFtPgotI2luY2x1ZGUgPGlvc2Z3ZD4KLSNpbmNs
dWRlIDxib29zdC9yYW5kb20vZGV0YWlsL29wZXJhdG9ycy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
cmFuZG9tL2dhbW1hX2Rpc3RyaWJ1dGlvbi5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1l
c3BhY2UgcmFuZG9tIHsKLQotLyoqCi0gKiBUaGUgYmV0YSBkaXN0cmlidXRpb24gaXMgYSByZWFs
LXZhbHVlZCBkaXN0cmlidXRpb24gd2hpY2ggcHJvZHVjZXMKLSAqIHZhbHVlcyBpbiB0aGUgcmFu
Z2UgWzAsIDFdLiAgSXQgaGFzIHR3byBwYXJhbWV0ZXJzLCBhbHBoYSBhbmQgYmV0YS4KLSAqCi0g
KiBJdCBoYXMgXGYkXGRpc3BsYXlzdHlsZSBwKHgpID0gXGZyYWN7eF57XGFscGhhLTF9KDEteCle
e1xiZXRhLTF9fXtCKFxhbHBoYSwgXGJldGEpfVxmJC4KLSAqLwotdGVtcGxhdGU8Y2xhc3MgUmVh
bFR5cGUgPSBkb3VibGU+Ci1jbGFzcyBiZXRhX2Rpc3RyaWJ1dGlvbiB7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBSZWFsVHlwZSByZXN1bHRfdHlwZTsKLSAgICB0eXBlZGVmIFJlYWxUeXBlIGlucHV0
X3R5cGU7Ci0KLSAgICBjbGFzcyBwYXJhbV90eXBlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5
cGVkZWYgYmV0YV9kaXN0cmlidXRpb24gZGlzdHJpYnV0aW9uX3R5cGU7Ci0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAqIENvbnN0cnVjdHMgYSBAYyBwYXJhbV90eXBlIGZyb20gdGhlICJhbHBoYSIg
YW5kICJiZXRhIiBwYXJhbWV0ZXJzCi0gICAgICAgICAqIG9mIHRoZSBkaXN0cmlidXRpb24uCi0g
ICAgICAgICAqCi0gICAgICAgICAqIFJlcXVpcmVzOiBhbHBoYSA+IDAsIGJldGEgPiAwCi0gICAg
ICAgICAqLwotICAgICAgICBleHBsaWNpdCBwYXJhbV90eXBlKFJlYWxUeXBlIGFscGhhX2FyZyA9
IFJlYWxUeXBlKDEuMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbFR5cGUgYmV0
YV9hcmcgPSBSZWFsVHlwZSgxLjApKQotICAgICAgICAgIDogX2FscGhhKGFscGhhX2FyZyksIF9i
ZXRhKGJldGFfYXJnKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQoYWxwaGFfYXJnID4g
MCk7Ci0gICAgICAgICAgICBhc3NlcnQoYmV0YV9hcmcgPiAwKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8qKiBSZXR1cm5zIHRoZSAiYWxwaGEiIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnR1aW9u
LiAqLwotICAgICAgICBSZWFsVHlwZSBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIF9hbHBoYTsgfQot
ICAgICAgICAvKiogUmV0dXJucyB0aGUgImJldGEiIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0
aW9uLiAqLwotICAgICAgICBSZWFsVHlwZSBiZXRhKCkgY29uc3QgeyByZXR1cm4gX2JldGE7IH0K
LQotICAgICAgICAvKiogV3JpdGVzIGEgQGMgcGFyYW1fdHlwZSB0byBhIEBjIHN0ZDo6b3N0cmVh
bS4gKi8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCBw
YXJhbV90eXBlLCBwYXJtKQotICAgICAgICB7IG9zIDw8IHBhcm0uX2FscGhhIDw8ICcgJyA8PCBw
YXJtLl9iZXRhOyByZXR1cm4gb3M7IH0KLQotICAgICAgICAvKiogUmVhZHMgYSBAYyBwYXJhbV90
eXBlIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRB
SUxfSVNUUkVBTV9PUEVSQVRPUihpcywgcGFyYW1fdHlwZSwgcGFybSkKLSAgICAgICAgeyBpcyA+
PiBwYXJtLl9hbHBoYSA+PiBzdGQ6OndzID4+IHBhcm0uX2JldGE7IHJldHVybiBpczsgfQotCi0g
ICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBzZXRzIG9mIHBhcmFtZXRlcnMgYXJl
IHRoZSBzYW1lLiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0VRVUFMSVRZX09QRVJB
VE9SKHBhcmFtX3R5cGUsIGxocywgcmhzKQotICAgICAgICB7IHJldHVybiBsaHMuX2FscGhhID09
IHJocy5fYWxwaGEgJiYgbGhzLl9iZXRhID09IHJocy5fYmV0YTsgfQotICAgICAgICAKLSAgICAg
ICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgdGhl
IGRpZmZlcmVudC4gKi8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09Q
RVJBVE9SKHBhcmFtX3R5cGUpCi0KLSAgICBwcml2YXRlOgotICAgICAgICBSZWFsVHlwZSBfYWxw
aGE7Ci0gICAgICAgIFJlYWxUeXBlIF9iZXRhOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBD
b25zdHJ1Y3RzIGFuIEBjIGJldGFfZGlzdHJpYnV0aW9uIGZyb20gaXRzICJhbHBoYSIgYW5kICJi
ZXRhIiBwYXJhbWV0ZXJzLgotICAgICAqCi0gICAgICogUmVxdWlyZXM6IGFscGhhID4gMCwgYmV0
YSA+IDAKLSAgICAgKi8KLSAgICBleHBsaWNpdCBiZXRhX2Rpc3RyaWJ1dGlvbihSZWFsVHlwZSBh
bHBoYV9hcmcgPSBSZWFsVHlwZSgxLjApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJlYWxUeXBlIGJldGFfYXJnID0gUmVhbFR5cGUoMS4wKSkKLSAgICAgIDogX2FscGhhKGFscGhh
X2FyZyksIF9iZXRhKGJldGFfYXJnKQotICAgIHsKLSAgICAgICAgYXNzZXJ0KGFscGhhX2FyZyA+
IDApOwotICAgICAgICBhc3NlcnQoYmV0YV9hcmcgPiAwKTsKLSAgICB9Ci0gICAgLyoqIENvbnN0
cnVjdHMgYW4gQGMgYmV0YV9kaXN0cmlidXRpb24gZnJvbSBpdHMgcGFyYW1ldGVycy4gKi8KLSAg
ICBleHBsaWNpdCBiZXRhX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAg
ICAgOiBfYWxwaGEocGFybS5hbHBoYSgpKSwgX2JldGEocGFybS5iZXRhKCkpCi0gICAge30KLQot
ICAgIC8qKgotICAgICAqIFJldHVybnMgYSByYW5kb20gdmFyaWF0ZSBkaXN0cmlidXRlZCBhY2Nv
cmRpbmcgdG8gdGhlCi0gICAgICogYmV0YSBkaXN0cmlidXRpb24uCi0gICAgICovCi0gICAgdGVt
cGxhdGU8Y2xhc3MgVVJORz4KLSAgICBSZWFsVHlwZSBvcGVyYXRvcigpKFVSTkcmIHVybmcpIGNv
bnN0Ci0gICAgewotICAgICAgICBSZWFsVHlwZSBhID0gZ2FtbWFfZGlzdHJpYnV0aW9uPFJlYWxU
eXBlPihfYWxwaGEsIFJlYWxUeXBlKDEuMCkpKHVybmcpOwotICAgICAgICBSZWFsVHlwZSBiID0g
Z2FtbWFfZGlzdHJpYnV0aW9uPFJlYWxUeXBlPihfYmV0YSwgUmVhbFR5cGUoMS4wKSkodXJuZyk7
Ci0gICAgICAgIHJldHVybiBhIC8gKGEgKyBiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBS
ZXR1cm5zIGEgcmFuZG9tIHZhcmlhdGUgZGlzdHJpYnV0ZWQgYWNjb3JkaW50IHRvIHRoZSBiZXRh
Ci0gICAgICogZGlzdHJpYnV0aW9uIHdpdGggcGFyYW1ldGVycyBzcGVjaWZpZWQgYnkgQGMgcGFy
YW0uCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgVVJORz4KLSAgICBSZWFsVHlwZSBvcGVy
YXRvcigpKFVSTkcmIHVybmcsIGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0pIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gYmV0YV9kaXN0cmlidXRpb24ocGFybSkodXJuZyk7Ci0gICAgfQotCi0g
ICAgLyoqIFJldHVybnMgdGhlICJhbHBoYSIgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24u
ICovCi0gICAgUmVhbFR5cGUgYWxwaGEoKSBjb25zdCB7IHJldHVybiBfYWxwaGE7IH0KLSAgICAv
KiogUmV0dXJucyB0aGUgImJldGEiIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwot
ICAgIFJlYWxUeXBlIGJldGEoKSBjb25zdCB7IHJldHVybiBfYmV0YTsgfQotCi0gICAgLyoqIFJl
dHVybnMgdGhlIHNtYWxsZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVj
ZS4gKi8KLSAgICBSZWFsVHlwZSBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04g
KCkgY29uc3QKLSAgICB7IHJldHVybiBSZWFsVHlwZSgwLjApOyB9Ci0gICAgLyoqIFJldHVybnMg
dGhlIGxhcmdlc3QgdmFsdWUgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGNhbiBwcm9kdWNlLiAqLwot
ICAgIFJlYWxUeXBlIG1heCBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKSBjb25z
dAotICAgIHsgcmV0dXJuIFJlYWxUeXBlKDEuMCk7IH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBw
YXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgcGFyYW1fdHlwZSBwYXJhbSgp
IGNvbnN0IHsgcmV0dXJuIHBhcmFtX3R5cGUoX2FscGhhLCBfYmV0YSk7IH0KLSAgICAvKiogU2V0
cyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIHZvaWQgcGFyYW0o
Y29uc3QgcGFyYW1fdHlwZSYgcGFybSkKLSAgICB7Ci0gICAgICAgIF9hbHBoYSA9IHBhcm0uYWxw
aGEoKTsKLSAgICAgICAgX2JldGEgPSBwYXJtLmJldGEoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAg
ICAgKiBFZmZlY3RzOiBTdWJzZXF1ZW50IHVzZXMgb2YgdGhlIGRpc3RyaWJ1dGlvbiBkbyBub3Qg
ZGVwZW5kCi0gICAgICogb24gdmFsdWVzIHByb2R1Y2VkIGJ5IGFueSBlbmdpbmUgcHJpb3IgdG8g
aW52b2tpbmcgcmVzZXQuCi0gICAgICovCi0gICAgdm9pZCByZXNldCgpIHsgfQotCi0gICAgLyoq
IFdyaXRlcyBhbiBAYyBiZXRhX2Rpc3RyaWJ1dGlvbiB0byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8K
LSAgICBCT09TVF9SQU5ET01fREVUQUlMX09TVFJFQU1fT1BFUkFUT1Iob3MsIGJldGFfZGlzdHJp
YnV0aW9uLCB3ZCkKLSAgICB7Ci0gICAgICAgIG9zIDw8IHdkLnBhcmFtKCk7Ci0gICAgICAgIHJl
dHVybiBvczsKLSAgICB9Ci0KLSAgICAvKiogUmVhZHMgYW4gQGMgYmV0YV9kaXN0cmlidXRpb24g
ZnJvbSBhIEBjIHN0ZDo6aXN0cmVhbS4gKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0lTVFJF
QU1fT1BFUkFUT1IoaXMsIGJldGFfZGlzdHJpYnV0aW9uLCB3ZCkKLSAgICB7Ci0gICAgICAgIHBh
cmFtX3R5cGUgcGFybTsKLSAgICAgICAgaWYoaXMgPj4gcGFybSkgewotICAgICAgICAgICAgd2Qu
cGFyYW0ocGFybSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlzOwotICAgIH0KLQotICAg
IC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGluc3RhbmNlcyBvZiBAYyBiZXRh
X2Rpc3RyaWJ1dGlvbiB3aWxsCi0gICAgICogcmV0dXJuIGlkZW50aWNhbCBzZXF1ZW5jZXMgb2Yg
dmFsdWVzIGdpdmVuIGVxdWFsIGdlbmVyYXRvcnMuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9N
X0RFVEFJTF9FUVVBTElUWV9PUEVSQVRPUihiZXRhX2Rpc3RyaWJ1dGlvbiwgbGhzLCByaHMpCi0g
ICAgeyByZXR1cm4gbGhzLl9hbHBoYSA9PSByaHMuX2FscGhhICYmIGxocy5fYmV0YSA9PSByaHMu
X2JldGE7IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBp
bnN0YW5jZXMgb2YgQGMgYmV0YV9kaXN0cmlidXRpb24gd2lsbAotICAgICAqIHJldHVybiBkaWZm
ZXJlbnQgc2VxdWVuY2VzIG9mIHZhbHVlcyBnaXZlbiBlcXVhbCBnZW5lcmF0b3JzLgotICAgICAq
LwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5FUVVBTElUWV9PUEVSQVRPUihiZXRhX2Rpc3Ry
aWJ1dGlvbikKLQotcHJpdmF0ZToKLSAgICBSZWFsVHlwZSBfYWxwaGE7Ci0gICAgUmVhbFR5cGUg
X2JldGE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSByYW5kb20KLX0gLy8gbmFtZXNwYWNlIGJvb3N0
Ci0KLSNlbmRpZiAvLyBCT09TVF9SQU5ET01fQkVUQV9ESVNUUklCVVRJT05fSFBQCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vYmlu
b21pYWxfZGlzdHJpYnV0aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3JhbmRvbS9iaW5vbWlhbF9kaXN0cmlidXRpb24uaHBwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzZWZjOTA1NzQ2Y2YwNzZiNjYyMTJmYWVkMDE3ZmE0NDVjNTVjOWNi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9iaW5vbWlhbF9kaXN0cmli
dXRpb24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDM0ICswLDAgQEAKLS8qIGJvb3N0IHJhbmRv
bS9iaW5vbWlhbF9kaXN0cmlidXRpb24uaHBwIGhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0
IFN0ZXZlbiBXYXRhbmFiZSAyMDEwCi0gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2Vu
dCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotICoKLSAqICRJZCQKLSAqLwotCi0j
aWZuZGVmIEJPT1NUX1JBTkRPTV9CSU5PTUlBTF9ESVNUUklCVVRJT05fSFBQX0lOQ0xVREVECi0j
ZGVmaW5lIEJPT1NUX1JBTkRPTV9CSU5PTUlBTF9ESVNUUklCVVRJT05fSFBQX0lOQ0xVREVECi0K
LSNpbmNsdWRlIDxib29zdC9jb25maWcvbm9fdHIxL2NtYXRoLmhwcD4KLSNpbmNsdWRlIDxjc3Rk
bGliPgotI2luY2x1ZGUgPGlvc2Z3ZD4KLQotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwv
Y29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vdW5pZm9ybV8wMS5ocHA+Ci0KLSNp
bmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2Rpc2FibGVfd2FybmluZ3MuaHBwPgotCi1uYW1l
c3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewot
Ci10ZW1wbGF0ZTxjbGFzcyBSZWFsVHlwZT4KLXN0cnVjdCBiaW5vbWlhbF90YWJsZSB7Ci0gICAg
c3RhdGljIGNvbnN0IFJlYWxUeXBlIHRhYmxlWzEwXTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFJl
YWxUeXBlPgotY29uc3QgUmVhbFR5cGUgYmlub21pYWxfdGFibGU8UmVhbFR5cGU+Ojp0YWJsZVsx
MF0gPSB7Ci0gICAgMC4wODEwNjE0NjY3OTUzMjcyNiwKLSAgICAwLjA0MTM0MDY5NTk1NTQwOTI5
LAotICAgIDAuMDI3Njc3OTI1Njg0OTk4MzQsCi0gICAgMC4wMjA3OTA2NzIxMDM3NjUwOSwKLSAg
ICAwLjAxNjY0NDY5MTE4OTgyMTE5LAotICAgIDAuMDEzODc2MTI4ODIzMDcwNzUsCi0gICAgMC4w
MTE4OTY3MDk5NDU4OTE3NywKLSAgICAwLjAxMDQxMTI2NTI2MTk3MjA5LAotICAgIDAuMDA5MjU1
NDYyMTgyNzEyNzMzLAotICAgIDAuMDA4MzMwNTYzNDMzMzYyODcxCi19OwotCi19Ci0KLS8qKgot
ICogVGhlIGJpbm9taWFsIGRpc3RyaWJ1dGlvbiBpcyBhbiBpbnRlZ2VyIHZhbHVlZCBkaXN0cmli
dXRpb24gd2l0aAotICogdHdvIHBhcmFtZXRlcnMsIEBjIHQgYW5kIEBjIHAuICBUaGUgdmFsdWVz
IG9mIHRoZSBkaXN0cmlidXRpb24KLSAqIGFyZSB3aXRoaW4gdGhlIHJhbmdlIFswLHRdLgotICoK
LSAqIFRoZSBkaXN0cmlidXRpb24gZnVuY3Rpb24gaXMKLSAqIFxmJFxkaXNwbGF5c3R5bGUgUChr
KSA9IHt0IFxjaG9vc2Uga31wXmsoMS1wKV57dC1rfVxmJC4KLSAqCi0gKiBUaGUgYWxnb3JpdGht
IHVzZWQgaXMgdGhlIEJUUkQgYWxnb3JpdGhtIGRlc2NyaWJlZCBpbgotICoKLSAqICBAYmxvY2tx
dW90ZQotICogICJUaGUgZ2VuZXJhdGlvbiBvZiBiaW5vbWlhbCByYW5kb20gdmFyaWF0ZXMiLCBX
b2xmZ2FuZyBIb3JtYW5uLAotICogIEpvdXJuYWwgb2YgU3RhdGlzdGljYWwgQ29tcHV0YXRpb24g
YW5kIFNpbXVsYXRpb24sIFZvbHVtZSA0NiwKLSAqICBJc3N1ZSAxICYgMiBBcHJpbCAxOTkzICwg
cGFnZXMgMTAxIC0gMTEwCi0gKiAgQGVuZGJsb2NrcXVvdGUKLSAqLwotdGVtcGxhdGU8Y2xhc3Mg
SW50VHlwZSA9IGludCwgY2xhc3MgUmVhbFR5cGUgPSBkb3VibGU+Ci1jbGFzcyBiaW5vbWlhbF9k
aXN0cmlidXRpb24gewotcHVibGljOgotICAgIHR5cGVkZWYgSW50VHlwZSByZXN1bHRfdHlwZTsK
LSAgICB0eXBlZGVmIFJlYWxUeXBlIGlucHV0X3R5cGU7Ci0KLSAgICBjbGFzcyBwYXJhbV90eXBl
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgYmlub21pYWxfZGlzdHJpYnV0aW9uIGRp
c3RyaWJ1dGlvbl90eXBlOwotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc3RydWN0IGEgcGFy
YW1fdHlwZSBvYmplY3QuICBAYyB0IGFuZCBAYyBwCi0gICAgICAgICAqIGFyZSB0aGUgcGFyYW1l
dGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLgotICAgICAgICAgKgotICAgICAgICAgKiBSZXF1aXJl
czogdCA+PTAgJiYgMCA8PSBwIDw9IDEKLSAgICAgICAgICovCi0gICAgICAgIGV4cGxpY2l0IHBh
cmFtX3R5cGUoSW50VHlwZSB0X2FyZyA9IDEsIFJlYWxUeXBlIHBfYXJnID0gUmVhbFR5cGUgKDAu
NSkpCi0gICAgICAgICAgOiBfdCh0X2FyZyksIF9wKHBfYXJnKQotICAgICAgICB7fQotICAgICAg
ICAvKiogUmV0dXJucyB0aGUgQGMgdCBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8K
LSAgICAgICAgSW50VHlwZSB0KCkgY29uc3QgeyByZXR1cm4gX3Q7IH0KLSAgICAgICAgLyoqIFJl
dHVybnMgdGhlIEBjIHAgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgICAg
IFJlYWxUeXBlIHAoKSBjb25zdCB7IHJldHVybiBfcDsgfQotI2lmbmRlZiBCT09TVF9SQU5ET01f
Tk9fU1RSRUFNX09QRVJBVE9SUwotICAgICAgICAvKiogV3JpdGVzIHRoZSBwYXJhbWV0ZXJzIG9m
IHRoZSBkaXN0cmlidXRpb24gdG8gYSBAYyBzdGQ6Om9zdHJlYW0uICovCi0gICAgICAgIHRlbXBs
YXRlPGNsYXNzIENoYXJULCBjbGFzcyBUcmFpdHM+Ci0gICAgICAgIGZyaWVuZCBzdGQ6OmJhc2lj
X29zdHJlYW08Q2hhclQsVHJhaXRzPiYKLSAgICAgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29z
dHJlYW08Q2hhclQsVHJhaXRzPiYgb3MsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1f
dHlwZSYgcGFybSkKLSAgICAgICAgewotICAgICAgICAgICAgb3MgPDwgcGFybS5fcCA8PCAiICIg
PDwgcGFybS5fdDsKLSAgICAgICAgICAgIHJldHVybiBvczsKLSAgICAgICAgfQotICAgIAotICAg
ICAgICAvKiogUmVhZHMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbiBmcm9tIGEg
QGMgc3RkOjppc3RyZWFtLiAqLwotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBDaGFyVCwgY2xhc3Mg
VHJhaXRzPgotICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPENoYXJULFRyYWl0cz4m
Ci0gICAgICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPENoYXJULFRyYWl0cz4mIGlz
LCBwYXJhbV90eXBlJiBwYXJtKQotICAgICAgICB7Ci0gICAgICAgICAgICBpcyA+PiBwYXJtLl9w
ID4+IHN0ZDo6d3MgPj4gcGFybS5fdDsKLSAgICAgICAgICAgIHJldHVybiBpczsKLSAgICAgICAg
fQotI2VuZGlmCi0gICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhcmFtZXRlcnMgaGF2
ZSB0aGUgc2FtZSB2YWx1ZXMuICovCi0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29u
c3QgcGFyYW1fdHlwZSYgbGhzLCBjb25zdCBwYXJhbV90eXBlJiByaHMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBsaHMuX3QgPT0gcmhzLl90ICYmIGxocy5fcCA9PSByaHMuX3A7Ci0g
ICAgICAgIH0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyYW1ldGVycyBoYXZl
IGRpZmZlcmVudCB2YWx1ZXMuICovCi0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29u
c3QgcGFyYW1fdHlwZSYgbGhzLCBjb25zdCBwYXJhbV90eXBlJiByaHMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAhKGxocyA9PSByaHMpOwotICAgICAgICB9Ci0gICAgcHJpdmF0ZToK
LSAgICAgICAgSW50VHlwZSBfdDsKLSAgICAgICAgUmVhbFR5cGUgX3A7Ci0gICAgfTsKLSAgICAK
LSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3QgYSBAYyBiaW5vbWlhbF9kaXN0cmlidXRpb24gb2Jq
ZWN0LiBAYyB0IGFuZCBAYyBwCi0gICAgICogYXJlIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0
cmlidXRpb24uCi0gICAgICoKLSAgICAgKiBSZXF1aXJlczogdCA+PTAgJiYgMCA8PSBwIDw9IDEK
LSAgICAgKi8KLSAgICBleHBsaWNpdCBiaW5vbWlhbF9kaXN0cmlidXRpb24oSW50VHlwZSB0X2Fy
ZyA9IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxUeXBlIHBfYXJn
ID0gUmVhbFR5cGUoMC41KSkKLSAgICAgIDogX3QodF9hcmcpLCBfcChwX2FyZykKLSAgICB7Ci0g
ICAgICAgIGluaXQoKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0IGFu
IEBjIGJpbm9taWFsX2Rpc3RyaWJ1dGlvbiBvYmplY3QgZnJvbSB0aGUKLSAgICAgKiBwYXJhbWV0
ZXJzLgotICAgICAqLwotICAgIGV4cGxpY2l0IGJpbm9taWFsX2Rpc3RyaWJ1dGlvbihjb25zdCBw
YXJhbV90eXBlJiBwYXJtKQotICAgICAgOiBfdChwYXJtLnQoKSksIF9wKHBhcm0ucCgpKQotICAg
IHsKLSAgICAgICAgaW5pdCgpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5z
IGEgcmFuZG9tIHZhcmlhdGUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZQotICAgICAqIGJp
bm9taWFsIGRpc3RyaWJ1dGlvbi4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBVUk5HPgot
ICAgIEludFR5cGUgb3BlcmF0b3IoKShVUk5HJiB1cm5nKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYodXNlX2ludmVyc2lvbigpKSB7Ci0gICAgICAgICAgICBpZigwLjUgPCBfcCkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBfdCAtIGludmVydChfdCwgMS1fcCwgdXJuZyk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBpbnZlcnQoX3QsIF9wLCB1cm5nKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmKDAuNSA8IF9wKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gX3QgLSBnZW5lcmF0ZSh1cm5nKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHJldHVybiBnZW5lcmF0ZSh1cm5nKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAv
KioKLSAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIHZhcmlhdGUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5n
IHRvIHRoZQotICAgICAqIGJpbm9taWFsIGRpc3RyaWJ1dGlvbiB3aXRoIHBhcmFtZXRlcnMgc3Bl
Y2lmaWVkIGJ5IEBjIHBhcmFtLgotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIFVSTkc+Ci0g
ICAgSW50VHlwZSBvcGVyYXRvcigpKFVSTkcmIHVybmcsIGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0p
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYmlub21pYWxfZGlzdHJpYnV0aW9uKHBhcm0p
KHVybmcpOwotICAgIH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBAYyB0IHBhcmFtZXRlciBvZiB0
aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIEludFR5cGUgdCgpIGNvbnN0IHsgcmV0dXJuIF90OyB9
Ci0gICAgLyoqIFJldHVybnMgdGhlIEBjIHAgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24u
ICovCi0gICAgUmVhbFR5cGUgcCgpIGNvbnN0IHsgcmV0dXJuIF9wOyB9Ci0KLSAgICAvKiogUmV0
dXJucyB0aGUgc21hbGxlc3QgdmFsdWUgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGNhbiBwcm9kdWNl
LiAqLwotICAgIEludFR5cGUgbWluIEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQotICAgIC8qKiBSZXR1cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRo
YXQgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4gKi8KLSAgICBJbnRUeXBlIG1heCBCT09T
VF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTigpIGNvbnN0IHsgcmV0dXJuIF90OyB9Ci0KLSAg
ICAvKiogUmV0dXJucyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAg
IHBhcmFtX3R5cGUgcGFyYW0oKSBjb25zdCB7IHJldHVybiBwYXJhbV90eXBlKF90LCBfcCk7IH0K
LSAgICAvKiogU2V0cyBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgdm9p
ZCBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgIHsKLSAgICAgICAgX3QgPSBwYXJt
LnQoKTsKLSAgICAgICAgX3AgPSBwYXJtLnAoKTsKLSAgICAgICAgaW5pdCgpOwotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIEVmZmVjdHM6IFN1YnNlcXVlbnQgdXNlcyBvZiB0aGUgZGlzdHJpYnV0
aW9uIGRvIG5vdCBkZXBlbmQKLSAgICAgKiBvbiB2YWx1ZXMgcHJvZHVjZWQgYnkgYW55IGVuZ2lu
ZSBwcmlvciB0byBpbnZva2luZyByZXNldC4KLSAgICAgKi8KLSAgICB2b2lkIHJlc2V0KCkgeyB9
Ci0KLSNpZm5kZWYgQk9PU1RfUkFORE9NX05PX1NUUkVBTV9PUEVSQVRPUlMKLSAgICAvKiogV3Jp
dGVzIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24gdG8gYSBAYyBzdGQ6Om9zdHJl
YW0uICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgQ2hhclQsIGNsYXNzIFRyYWl0cz4KLSAgICBmcmll
bmQgc3RkOjpiYXNpY19vc3RyZWFtPENoYXJULFRyYWl0cz4mCi0gICAgb3BlcmF0b3I8PChzdGQ6
OmJhc2ljX29zdHJlYW08Q2hhclQsVHJhaXRzPiYgb3MsCi0gICAgICAgICAgICAgICBjb25zdCBi
aW5vbWlhbF9kaXN0cmlidXRpb24mIGJkKQotICAgIHsKLSAgICAgICAgb3MgPDwgYmQucGFyYW0o
KTsKLSAgICAgICAgcmV0dXJuIG9zOwotICAgIH0KLSAgICAKLSAgICAvKiogUmVhZHMgdGhlIHBh
cmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbiBmcm9tIGEgQGMgc3RkOjppc3RyZWFtLiAqLwot
ICAgIHRlbXBsYXRlPGNsYXNzIENoYXJULCBjbGFzcyBUcmFpdHM+Ci0gICAgZnJpZW5kIHN0ZDo6
YmFzaWNfaXN0cmVhbTxDaGFyVCxUcmFpdHM+JgotICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19p
c3RyZWFtPENoYXJULFRyYWl0cz4mIGlzLCBiaW5vbWlhbF9kaXN0cmlidXRpb24mIGJkKQotICAg
IHsKLSAgICAgICAgYmQucmVhZChpcyk7Ci0gICAgICAgIHJldHVybiBpczsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBkaXN0cmlidXRpb25zIHdpbGwg
cHJvZHVjZSB0aGUgc2FtZQotICAgICAgICBzZXF1ZW5jZSBvZiB2YWx1ZXMsIGdpdmVuIGVxdWFs
IGdlbmVyYXRvcnMuICovCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBiaW5vbWlh
bF9kaXN0cmlidXRpb24mIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJp
bm9taWFsX2Rpc3RyaWJ1dGlvbiYgcmhzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxocy5fdCA9
PSByaHMuX3QgJiYgbGhzLl9wID09IHJocy5fcDsKLSAgICB9Ci0gICAgLyoqIFJldHVybnMgdHJ1
ZSBpZiB0aGUgdHdvIGRpc3RyaWJ1dGlvbnMgY291bGQgcHJvZHVjZSBkaWZmZXJlbnQKLSAgICAg
ICAgc2VxdWVuY2VzIG9mIHZhbHVlcywgZ2l2ZW4gZXF1YWwgZ2VuZXJhdG9ycy4gKi8KLSAgICBm
cmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGJpbm9taWFsX2Rpc3RyaWJ1dGlvbiYgbGhzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmlub21pYWxfZGlzdHJpYnV0aW9uJiBy
aHMpCi0gICAgewotICAgICAgICByZXR1cm4gIShsaHMgPT0gcmhzKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0KLSAgICAvLy8gQGNvbmQgc2hvd19wcml2YXRlCi0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBD
aGFyVCwgY2xhc3MgVHJhaXRzPgotICAgIHZvaWQgcmVhZChzdGQ6OmJhc2ljX2lzdHJlYW08Q2hh
clQsIFRyYWl0cz4mIGlzKSB7Ci0gICAgICAgIHBhcmFtX3R5cGUgcGFybTsKLSAgICAgICAgaWYo
aXMgPj4gcGFybSkgewotICAgICAgICAgICAgcGFyYW0ocGFybSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBib29sIHVzZV9pbnZlcnNpb24oKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gQlRS
RCBpcyBzYWZlIHdoZW4gbnAgPj0gMTAKLSAgICAgICAgcmV0dXJuIG0gPCAxMTsKLSAgICB9Ci0K
LSAgICAvLyBjb21wdXRlcyB0aGUgY29ycmVjdGlvbiBmYWN0b3IgZm9yIHRoZSBTdGlybGluZyBh
cHByb3hpbWF0aW9uCi0gICAgLy8gZm9yIGxvZyhrISkKLSAgICBzdGF0aWMgUmVhbFR5cGUgZmMo
SW50VHlwZSBrKQotICAgIHsKLSAgICAgICAgaWYoayA8IDEwKSByZXR1cm4gZGV0YWlsOjpiaW5v
bWlhbF90YWJsZTxSZWFsVHlwZT46OnRhYmxlW2tdOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIFJlYWxUeXBlIGlrcDEgPSBSZWFsVHlwZSgxKSAvIChrICsgMSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gKFJlYWxUeXBlKDEpLzEyCi0gICAgICAgICAgICAgICAgIC0gKFJlYWxUeXBlKDEpLzM2
MAotICAgICAgICAgICAgICAgICAtIChSZWFsVHlwZSgxKS8xMjYwKSooaWtwMSppa3AxKSkqKGlr
cDEqaWtwMSkpKmlrcDE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGluaXQoKQotICAg
IHsKLSAgICAgICAgdXNpbmcgc3RkOjpzcXJ0OwotICAgICAgICB1c2luZyBzdGQ6OnBvdzsKLQot
ICAgICAgICBSZWFsVHlwZSBwID0gKDAuNSA8IF9wKT8gKDEgLSBfcCkgOiBfcDsKLSAgICAgICAg
SW50VHlwZSB0ID0gX3Q7Ci0gICAgICAgIAotICAgICAgICBtID0gc3RhdGljX2Nhc3Q8SW50VHlw
ZT4oKHQrMSkqcCk7Ci0KLSAgICAgICAgaWYodXNlX2ludmVyc2lvbigpKSB7Ci0gICAgICAgICAg
ICBxX24gPSBwb3coKDEgLSBwKSwgc3RhdGljX2Nhc3Q8UmVhbFR5cGU+KHQpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGJ0cmQuciA9IHAvKDEtcCk7Ci0gICAgICAgICAgICBidHJk
Lm5yID0gKHQrMSkqYnRyZC5yOwotICAgICAgICAgICAgYnRyZC5ucHEgPSB0KnAqKDEtcCk7Ci0g
ICAgICAgICAgICBSZWFsVHlwZSBzcXJ0X25wcSA9IHNxcnQoYnRyZC5ucHEpOwotICAgICAgICAg
ICAgYnRyZC5iID0gMS4xNSArIDIuNTMgKiBzcXJ0X25wcTsKLSAgICAgICAgICAgIGJ0cmQuYSA9
IC0wLjA4NzMgKyAwLjAyNDgqYnRyZC5iICsgMC4wMSpwOwotICAgICAgICAgICAgYnRyZC5jID0g
dCpwICsgMC41OwotICAgICAgICAgICAgYnRyZC5hbHBoYSA9ICgyLjgzICsgNS4xL2J0cmQuYikg
KiBzcXJ0X25wcTsKLSAgICAgICAgICAgIGJ0cmQudl9yID0gMC45MiAtIDQuMi9idHJkLmI7Ci0g
ICAgICAgICAgICBidHJkLnVfcnZfciA9IDAuODYqYnRyZC52X3I7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBVUk5HPgotICAgIHJlc3VsdF90eXBlIGdlbmVyYXRlKFVS
TkcmIHVybmcpIGNvbnN0Ci0gICAgewotICAgICAgICB1c2luZyBzdGQ6OmZsb29yOwotICAgICAg
ICB1c2luZyBzdGQ6OmFiczsKLSAgICAgICAgdXNpbmcgc3RkOjpsb2c7Ci0KLSAgICAgICAgd2hp
bGUodHJ1ZSkgewotICAgICAgICAgICAgUmVhbFR5cGUgdTsKLSAgICAgICAgICAgIFJlYWxUeXBl
IHYgPSB1bmlmb3JtXzAxPFJlYWxUeXBlPigpKHVybmcpOwotICAgICAgICAgICAgaWYodiA8PSBi
dHJkLnVfcnZfcikgewotICAgICAgICAgICAgICAgIHUgPSB2L2J0cmQudl9yIC0gMC40MzsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZT4oZmxvb3IoCi0gICAgICAg
ICAgICAgICAgICAgICgyKmJ0cmQuYS8oMC41IC0gYWJzKHUpKSArIGJ0cmQuYikqdSArIGJ0cmQu
YykpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZih2ID49IGJ0cmQudl9yKSB7Ci0g
ICAgICAgICAgICAgICAgdSA9IHVuaWZvcm1fMDE8UmVhbFR5cGU+KCkodXJuZykgLSAwLjU7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUgPSB2L2J0cmQudl9yIC0gMC45
MzsKLSAgICAgICAgICAgICAgICB1ID0gKCh1IDwgMCk/IC0wLjUgOiAwLjUpIC0gdTsKLSAgICAg
ICAgICAgICAgICB2ID0gdW5pZm9ybV8wMTxSZWFsVHlwZT4oKSh1cm5nKSAqIGJ0cmQudl9yOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBSZWFsVHlwZSB1cyA9IDAuNSAtIGFicyh1KTsK
LSAgICAgICAgICAgIEludFR5cGUgayA9IHN0YXRpY19jYXN0PEludFR5cGU+KGZsb29yKCgyKmJ0
cmQuYS91cyArIGJ0cmQuYikqdSArIGJ0cmQuYykpOwotICAgICAgICAgICAgaWYoayA8IDAgfHwg
ayA+IF90KSBjb250aW51ZTsKLSAgICAgICAgICAgIHYgPSB2KmJ0cmQuYWxwaGEvKGJ0cmQuYS8o
dXMqdXMpICsgYnRyZC5iKTsKLSAgICAgICAgICAgIFJlYWxUeXBlIGttID0gYWJzKGsgLSBtKTsK
LSAgICAgICAgICAgIGlmKGttIDw9IDE1KSB7Ci0gICAgICAgICAgICAgICAgUmVhbFR5cGUgZiA9
IDE7Ci0gICAgICAgICAgICAgICAgaWYobSA8IGspIHsKLSAgICAgICAgICAgICAgICAgICAgSW50
VHlwZSBpID0gbTsKLSAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAg
ICAgICAgKytpOwotICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGYqKGJ0cmQubnIvaSAtIGJ0
cmQucik7Ci0gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoaSAhPSBrKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYobSA+IGspIHsKLSAgICAgICAgICAgICAgICAgICAgSW50VHlwZSBpID0g
azsKLSAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgKytp
OwotICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHYqKGJ0cmQubnIvaSAtIGJ0cmQucik7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoaSAhPSBtKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYodiA8PSBmKSByZXR1cm4gazsKLSAgICAgICAgICAgICAgICBlbHNl
IGNvbnRpbnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBmaW5h
bCBhY2NlcHRhbmNlL3JlamVjdGlvbgotICAgICAgICAgICAgICAgIHYgPSBsb2codik7Ci0gICAg
ICAgICAgICAgICAgUmVhbFR5cGUgcmhvID0KLSAgICAgICAgICAgICAgICAgICAgKGttL2J0cmQu
bnBxKSooKChrbS8zLiArIDAuNjI1KSprbSArIDEuLzYpL2J0cmQubnBxICsgMC41KTsKLSAgICAg
ICAgICAgICAgICBSZWFsVHlwZSB0ID0gLWttKmttLygyKmJ0cmQubnBxKTsKLSAgICAgICAgICAg
ICAgICBpZih2IDwgdCAtIHJobykgcmV0dXJuIGs7Ci0gICAgICAgICAgICAgICAgaWYodiA+IHQg
KyByaG8pIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgSW50VHlwZSBubSA9IF90IC0gbSAr
IDE7Ci0gICAgICAgICAgICAgICAgUmVhbFR5cGUgaCA9IChtICsgMC41KSpsb2coKG0gKyAxKS8o
YnRyZC5yKm5tKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZmMobSkgKyBmYyhfdCAt
IG0pOwotCi0gICAgICAgICAgICAgICAgSW50VHlwZSBuayA9IF90IC0gayArIDE7Ci0gICAgICAg
ICAgICAgICAgaWYodiA8PSBoICsgKF90KzEpKmxvZyhzdGF0aWNfY2FzdDxSZWFsVHlwZT4obm0p
L25rKQotICAgICAgICAgICAgICAgICAgICAgICAgICArIChrICsgMC41KSpsb2cobmsqYnRyZC5y
LyhrKzEpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAtIGZjKGspCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIC0gZmMoX3QgLSBrKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIFVSTkc+Ci0gICAgSW50VHlwZSBp
bnZlcnQoSW50VHlwZSB0LCBSZWFsVHlwZSBwLCBVUk5HJiB1cm5nKSBjb25zdAotICAgIHsKLSAg
ICAgICAgUmVhbFR5cGUgcSA9IDEgLSBwOwotICAgICAgICBSZWFsVHlwZSBzID0gcCAvIHE7Ci0g
ICAgICAgIFJlYWxUeXBlIGEgPSAodCArIDEpICogczsKLSAgICAgICAgUmVhbFR5cGUgciA9IHFf
bjsKLSAgICAgICAgUmVhbFR5cGUgdSA9IHVuaWZvcm1fMDE8UmVhbFR5cGU+KCkodXJuZyk7Ci0g
ICAgICAgIEludFR5cGUgeCA9IDA7Ci0gICAgICAgIHdoaWxlKHUgPiByKSB7Ci0gICAgICAgICAg
ICB1ID0gdSAtIHI7Ci0gICAgICAgICAgICArK3g7Ci0gICAgICAgICAgICBSZWFsVHlwZSByMSA9
ICgoYS94KSAtIHMpICogcjsKLSAgICAgICAgICAgIC8vIElmIHIgZ2V0cyB0b28gc21hbGwgdGhl
biB0aGUgcm91bmQtb2ZmIGVycm9yCi0gICAgICAgICAgICAvLyBiZWNvbWVzIGEgcHJvYmxlbS4g
IEF0IHRoaXMgcG9pbnQsIHAoaSkgaXMKLSAgICAgICAgICAgIC8vIGRlY3JlYXNpbmcgZXhwb25l
bnRpYWxseSwgc28gaWYgd2UganVzdCBjYWxsCi0gICAgICAgICAgICAvLyBpdCAwLCBpdCdzIGNs
b3NlIGVub3VnaC4gIE5vdGUgdGhhdCB0aGUKLSAgICAgICAgICAgIC8vIG1pbmltdW0gdmFsdWUg
b2YgcV9uIGlzIGFib3V0IDFlLTcsIHNvIHdlCi0gICAgICAgICAgICAvLyBtYXkgbmVlZCB0byBi
ZSBhIGxpdHRsZSBjYXJlZnVsIHRvIG1ha2Ugc3VyZSB0aGF0Ci0gICAgICAgICAgICAvLyB3ZSBk
b24ndCB0ZXJtaW5hdGUgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcAotICAgICAgICAg
ICAgLy8gZm9yIGZsb2F0LiAgKEhlbmNlIHRoZSB0ZXN0IHRoYXQgciBpcyBkZWNyZWFzaW5nKQot
ICAgICAgICAgICAgaWYocjEgPCBzdGQ6Om51bWVyaWNfbGltaXRzPFJlYWxUeXBlPjo6ZXBzaWxv
bigpICYmIHIxIDwgcikgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgciA9IHIxOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB4OwotICAgIH0K
LQotICAgIC8vIHBhcmFtZXRlcnMKLSAgICBJbnRUeXBlIF90OwotICAgIFJlYWxUeXBlIF9wOwot
Ci0gICAgLy8gY29tbW9uIGRhdGEKLSAgICBJbnRUeXBlIG07Ci0KLSAgICB1bmlvbiB7Ci0gICAg
ICAgIC8vIGZvciBidHJkCi0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBSZWFsVHlwZSBy
OwotICAgICAgICAgICAgUmVhbFR5cGUgbnI7Ci0gICAgICAgICAgICBSZWFsVHlwZSBucHE7Ci0g
ICAgICAgICAgICBSZWFsVHlwZSBiOwotICAgICAgICAgICAgUmVhbFR5cGUgYTsKLSAgICAgICAg
ICAgIFJlYWxUeXBlIGM7Ci0gICAgICAgICAgICBSZWFsVHlwZSBhbHBoYTsKLSAgICAgICAgICAg
IFJlYWxUeXBlIHZfcjsKLSAgICAgICAgICAgIFJlYWxUeXBlIHVfcnZfcjsKLSAgICAgICAgfSBi
dHJkOwotICAgICAgICAvLyBmb3IgaW52ZXJzaW9uCi0gICAgICAgIFJlYWxUeXBlIHFfbjsKLSAg
ICB9OwotCi0gICAgLy8vIEBlbmRjb25kCi19OwotCi19Ci0KLS8vIGJhY2t3YXJkcyBjb21wYXRp
YmlsaXR5Ci11c2luZyByYW5kb206OmJpbm9taWFsX2Rpc3RyaWJ1dGlvbjsKLQotfQotCi0jaW5j
bHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9lbmFibGVfd2FybmluZ3MuaHBwPgotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3Jh
bmRvbS9jYXVjaHlfZGlzdHJpYnV0aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9jYXVjaHlfZGlzdHJpYnV0aW9uLmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTk4ZTUyMzQ0N2JjYjRmMDc0MzhiNjdjMjFhNDNiZmE4Yjcw
N2E5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vY2F1Y2h5X2Rpc3Ry
aWJ1dGlvbi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyogYm9vc3QgcmFu
ZG9tL2NhdWNoeV9kaXN0cmlidXRpb24uaHBwIGhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0
IEplbnMgTWF1cmVyIDIwMDAtMjAwMQotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNv
ZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBM
SUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNl
bnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgotICog
UmV2aXNpb24gaGlzdG9yeQotICogIDIwMDEtMDItMTggIG1vdmVkIHRvIGluZGl2aWR1YWwgaGVh
ZGVyIGZpbGVzCi0gKi8KLQotI2lmbmRlZiBCT09TVF9SQU5ET01fQ0FVQ0hZX0RJU1RSSUJVVElP
Tl9IUFAKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0NBVUNIWV9ESVNUUklCVVRJT05fSFBQCi0KLSNp
bmNsdWRlIDxib29zdC9jb25maWcvbm9fdHIxL2NtYXRoLmhwcD4KLSNpbmNsdWRlIDxpb3Nmd2Q+
Ci0jaW5jbHVkZSA8aXN0cmVhbT4KLSNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5k
b20vZGV0YWlsL29wZXJhdG9ycy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL3VuaWZvcm1f
MDEuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci0KLS8vIENh
dWNoeSBkaXN0cmlidXRpb246IAotCi0vKioKLSAqIFRoZSBjYXVjaHkgZGlzdHJpYnV0aW9uIGlz
IGEgY29udGludW91cyBkaXN0cmlidXRpb24gd2l0aCB0d28KLSAqIHBhcmFtZXRlcnMsIG1lZGlh
biBhbmQgc2lnbWEuCi0gKgotICogSXQgaGFzIFxmJFxkaXNwbGF5c3R5bGUgcCh4KSA9IFxmcmFj
e1xzaWdtYX17XHBpKFxzaWdtYV4yICsgKHgtbSleMil9XGYkCi0gKi8KLXRlbXBsYXRlPGNsYXNz
IFJlYWxUeXBlID0gZG91YmxlPgotY2xhc3MgY2F1Y2h5X2Rpc3RyaWJ1dGlvbgotewotcHVibGlj
OgotICAgIHR5cGVkZWYgUmVhbFR5cGUgaW5wdXRfdHlwZTsKLSAgICB0eXBlZGVmIFJlYWxUeXBl
IHJlc3VsdF90eXBlOwotCi0gICAgY2xhc3MgcGFyYW1fdHlwZQotICAgIHsKLSAgICBwdWJsaWM6
Ci0KLSAgICAgICAgdHlwZWRlZiBjYXVjaHlfZGlzdHJpYnV0aW9uIGRpc3RyaWJ1dGlvbl90eXBl
OwotCi0gICAgICAgIC8qKiBDb25zdHJ1Y3RzIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBjYXVjaHkg
ZGlzdHJpYnV0aW9uLiAqLwotICAgICAgICBleHBsaWNpdCBwYXJhbV90eXBlKFJlYWxUeXBlIG1l
ZGlhbl9hcmcgPSBSZWFsVHlwZSgwLjApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl
YWxUeXBlIHNpZ21hX2FyZyA9IFJlYWxUeXBlKDEuMCkpCi0gICAgICAgICAgOiBfbWVkaWFuKG1l
ZGlhbl9hcmcpLCBfc2lnbWEoc2lnbWFfYXJnKSB7fQotCi0gICAgICAgIC8vIGJhY2t3YXJkcyBj
b21wYXRpYmlsaXR5IGZvciBCb29zdC5SYW5kb20KLQotICAgICAgICAvKiogUmV0dXJucyB0aGUg
bWVkaWFuIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgICAgIFJlYWxUeXBlIG1lZGlhbigp
IGNvbnN0IHsgcmV0dXJuIF9tZWRpYW47IH0KLSAgICAgICAgLyoqIFJldHVybnMgdGhlIHNpZ21h
IHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgICAgICBSZWFsVHlwZSBzaWdt
YSgpIGNvbnN0IHsgcmV0dXJuIF9zaWdtYTsgfQotCi0gICAgICAgIC8vIFRoZSBuZXcgbmFtZXMg
aW4gQysrMHguCi0KLSAgICAgICAgLyoqIFJldHVybnMgdGhlIG1lZGlhbiBvZiB0aGUgZGlzdHJp
YnV0aW9uLiAqLwotICAgICAgICBSZWFsVHlwZSBhKCkgY29uc3QgeyByZXR1cm4gX21lZGlhbjsg
fQotICAgICAgICAvKiogUmV0dXJucyB0aGUgc2lnbWEgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmli
dXRpb24uICovCi0gICAgICAgIFJlYWxUeXBlIGIoKSBjb25zdCB7IHJldHVybiBfc2lnbWE7IH0K
LQotICAgICAgICAvKiogV3JpdGVzIHRoZSBwYXJhbWV0ZXJzIHRvIGEgc3RkOjpvc3RyZWFtLiAq
LwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX09TVFJFQU1fT1BFUkFUT1Iob3MsIHBhcmFt
X3R5cGUsIHBhcm0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9zIDw8IHBhcm0uX21lZGlhbiA8
PCAiICIgPDwgcGFybS5fc2lnbWE7Ci0gICAgICAgICAgICByZXR1cm4gb3M7Ci0gICAgICAgIH0K
LQotICAgICAgICAvKiogUmVhZHMgdGhlIHBhcmFtZXRlcnMgZnJvbSBhIHN0ZDo6aXN0cmVhbS4g
Ki8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlzLCBwYXJh
bV90eXBlLCBwYXJtKQotICAgICAgICB7Ci0gICAgICAgICAgICBpcyA+PiBwYXJtLl9tZWRpYW4g
Pj4gc3RkOjp3cyA+PiBwYXJtLl9zaWdtYTsKLSAgICAgICAgICAgIHJldHVybiBpczsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBzZXRzIG9mIHBhcmFt
ZXRlcnMgYXJlIGVxdWFsLiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0VRVUFMSVRZ
X09QRVJBVE9SKHBhcmFtX3R5cGUsIGxocywgcmhzKQotICAgICAgICB7IHJldHVybiBsaHMuX21l
ZGlhbiA9PSByaHMuX21lZGlhbiAmJiBsaHMuX3NpZ21hID09IHJocy5fc2lnbWE7IH0KLQotICAg
ICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gc2V0cyBvZiBwYXJhbWV0ZXJzIGFyZSBk
aWZmZXJlbnQuICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5FUVVBTElUWV9PUEVS
QVRPUihwYXJhbV90eXBlKQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVhbFR5cGUgX21lZGlh
bjsKLSAgICAgICAgUmVhbFR5cGUgX3NpZ21hOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBD
b25zdHJ1Y3RzIGEgXGNhdWNoeV9kaXN0cmlidXRpb24gd2l0aCB0aGUgcGFyYW10ZXJzIEBjIG1l
ZGlhbgotICAgICAqIGFuZCBAYyBzaWdtYS4KLSAgICAgKi8KLSAgICBleHBsaWNpdCBjYXVjaHlf
ZGlzdHJpYnV0aW9uKFJlYWxUeXBlIG1lZGlhbl9hcmcgPSBSZWFsVHlwZSgwLjApLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxUeXBlIHNpZ21hX2FyZyA9IFJlYWxUeXBl
KDEuMCkpCi0gICAgICA6IF9tZWRpYW4obWVkaWFuX2FyZyksIF9zaWdtYShzaWdtYV9hcmcpIHsg
fQotICAgIAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBcY2F1Y2h5X2Rpc3RyaWJ1dGlv
biBmcm9tIGl0J3MgcGFyYW1ldGVycy4KLSAgICAgKi8KLSAgICBleHBsaWNpdCBjYXVjaHlfZGlz
dHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0pCi0gICAgICA6IF9tZWRpYW4ocGFybS5t
ZWRpYW4oKSksIF9zaWdtYShwYXJtLnNpZ21hKCkpIHsgfQotCi0gICAgLy8gY29tcGlsZXItZ2Vu
ZXJhdGVkIGNvcHkgY3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvciBhcmUgZmluZQotCi0gICAg
Ly8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIEJvb3N0LlJhbmRvbQotCi0gICAgLyoqIFJl
dHVybnM6IHRoZSAibWVkaWFuIiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbiAqLwotICAg
IFJlYWxUeXBlIG1lZGlhbigpIGNvbnN0IHsgcmV0dXJuIF9tZWRpYW47IH0KLSAgICAvKiogUmV0
dXJuczogdGhlICJzaWdtYSIgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24gKi8KLSAgICBS
ZWFsVHlwZSBzaWdtYSgpIGNvbnN0IHsgcmV0dXJuIF9zaWdtYTsgfQotICAgIAotICAgIC8vIFRo
ZSBuZXcgbmFtZXMgaW4gQysrMHgKLQotICAgIC8qKiBSZXR1cm5zOiB0aGUgIm1lZGlhbiIgcGFy
YW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24gKi8KLSAgICBSZWFsVHlwZSBhKCkgY29uc3QgeyBy
ZXR1cm4gX21lZGlhbjsgfQotICAgIC8qKiBSZXR1cm5zOiB0aGUgInNpZ21hIiBwYXJhbWV0ZXIg
b2YgdGhlIGRpc3RyaWJ1dGlvbiAqLwotICAgIFJlYWxUeXBlIGIoKSBjb25zdCB7IHJldHVybiBf
c2lnbWE7IH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCB2YWx1ZSB0aGF0IHRoZSBk
aXN0cmlidXRpb24gY2FuIHByb2R1Y2UuICovCi0gICAgUmVhbFR5cGUgbWluIEJPT1NUX1BSRVZF
TlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIGNvbnN0Ci0gICAgeyByZXR1cm4gLShzdGQ6Om51bWVy
aWNfbGltaXRzPFJlYWxUeXBlPjo6aW5maW5pdHkpKCk7IH0KLQotICAgIC8qKiBSZXR1cm5zIHRo
ZSBsYXJnZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4gKi8KLSAg
ICBSZWFsVHlwZSBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgY29uc3QK
LSAgICB7IHJldHVybiAoc3RkOjpudW1lcmljX2xpbWl0czxSZWFsVHlwZT46OmluZmluaXR5KSgp
OyB9Ci0KLSAgICBwYXJhbV90eXBlIHBhcmFtKCkgY29uc3QgeyByZXR1cm4gcGFyYW1fdHlwZShf
bWVkaWFuLCBfc2lnbWEpOyB9Ci0KLSAgICB2b2lkIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIHBh
cm0pCi0gICAgewotICAgICAgICBfbWVkaWFuID0gcGFybS5tZWRpYW4oKTsKLSAgICAgICAgX3Np
Z21hID0gcGFybS5zaWdtYSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVmZmVjdHM6IFN1
YnNlcXVlbnQgdXNlcyBvZiB0aGUgZGlzdHJpYnV0aW9uIGRvIG5vdCBkZXBlbmQKLSAgICAgKiBv
biB2YWx1ZXMgcHJvZHVjZWQgYnkgYW55IGVuZ2luZSBwcmlvciB0byBpbnZva2luZyByZXNldC4K
LSAgICAgKi8KLSAgICB2b2lkIHJlc2V0KCkgeyB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5z
OiBBIHJhbmRvbSB2YXJpYXRlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUKLSAgICAgKiBj
YXVjaHkgZGlzdHJpYnV0aW9uLgotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIEVuZ2luZT4K
LSAgICByZXN1bHRfdHlwZSBvcGVyYXRvcigpKEVuZ2luZSYgZW5nKQotICAgIHsKLSAgICAgICAg
Ly8gQ2FuIHdlIGhhdmUgYSBib29zdDo6bWF0aGNvbnN0IHBsZWFzZT8KLSAgICAgICAgY29uc3Qg
cmVzdWx0X3R5cGUgcGkgPSByZXN1bHRfdHlwZSgzLjE0MTU5MjY1MzU4OTc5MzIzODQ2KTsKLSAg
ICAgICAgdXNpbmcgc3RkOjp0YW47Ci0gICAgICAgIFJlYWxUeXBlIHZhbCA9IHVuaWZvcm1fMDE8
UmVhbFR5cGU+KCkoZW5nKS1yZXN1bHRfdHlwZSgwLjUpOwotICAgICAgICByZXR1cm4gX21lZGlh
biArIF9zaWdtYSAqIHRhbihwaSp2YWwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVy
bnM6IEEgcmFuZG9tIHZhcmlhdGUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZQotICAgICAq
IGNhdWNoeSBkaXN0cmlidXRpb24gd2l0aCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBieSBwYXJhbS4K
LSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmdpbmU+Ci0gICAgcmVzdWx0X3R5cGUgb3Bl
cmF0b3IoKShFbmdpbmUmIGVuZywgY29uc3QgcGFyYW1fdHlwZSYgcGFybSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBjYXVjaHlfZGlzdHJpYnV0aW9uKHBhcm0pKGVuZyk7Ci0gICAgfQotCi0gICAg
LyoqCi0gICAgICogV3JpdGVzIHRoZSBkaXN0cmlidXRpb24gdG8gYSBAYyBzdGQ6Om9zdHJlYW0u
Ci0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCBj
YXVjaHlfZGlzdHJpYnV0aW9uLCBjZCkKLSAgICB7Ci0gICAgICAgIG9zIDw8IGNkLl9tZWRpYW4g
PDwgIiAiIDw8IGNkLl9zaWdtYTsKLSAgICAgICAgcmV0dXJuIG9zOwotICAgIH0KLQotICAgIC8q
KgotICAgICAqIFJlYWRzIHRoZSBkaXN0cmlidXRpb24gZnJvbSBhIEBjIHN0ZDo6aXN0cmVhbS4K
LSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0lTVFJFQU1fT1BFUkFUT1IoaXMsIGNh
dWNoeV9kaXN0cmlidXRpb24sIGNkKQotICAgIHsKLSAgICAgICAgaXMgPj4gY2QuX21lZGlhbiA+
PiBzdGQ6OndzID4+IGNkLl9zaWdtYTsKLSAgICAgICAgcmV0dXJuIGlzOwotICAgIH0KLQotICAg
IC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGRpc3RyaWJ1dGlvbnMgd2lsbCBw
cm9kdWNlCi0gICAgICogaWRlbnRpY2FsIHNlcXVlbmNlcyBvZiB2YWx1ZXMsIGdpdmVuIGVxdWFs
IGdlbmVyYXRvcnMuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElUWV9P
UEVSQVRPUihjYXVjaHlfZGlzdHJpYnV0aW9uLCBsaHMsIHJocykKLSAgICB7IHJldHVybiBsaHMu
X21lZGlhbiA9PSByaHMuX21lZGlhbiAmJiBsaHMuX3NpZ21hID09IHJocy5fc2lnbWE7IH0KLQot
ICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGRpc3RyaWJ1dGlvbnMgbWF5
IHByb2R1Y2UKLSAgICAgKiBkaWZmZXJlbnQgc2VxdWVuY2VzIG9mIHZhbHVlcywgZ2l2ZW4gZXF1
YWwgZ2VuZXJhdG9ycy4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0lORVFVQUxJ
VFlfT1BFUkFUT1IoY2F1Y2h5X2Rpc3RyaWJ1dGlvbikKLQotcHJpdmF0ZToKLSAgICBSZWFsVHlw
ZSBfbWVkaWFuOwotICAgIFJlYWxUeXBlIF9zaWdtYTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHJh
bmRvbQotCi11c2luZyByYW5kb206OmNhdWNoeV9kaXN0cmlidXRpb247Ci0KLX0gLy8gbmFtZXNw
YWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9SQU5ET01fQ0FVQ0hZX0RJU1RSSUJVVElPTl9I
UFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3JhbmRvbS9jaGlfc3F1YXJlZF9kaXN0cmlidXRpb24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2NoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbi5o
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZmNjZTVjNWRkOGQ4NDAzYjYyZjA4
NGQ3MzJlNGQ1YmQyOTM1NzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9t
L2NoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAs
MCBAQAotLyogYm9vc3QgcmFuZG9tL2NoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbi5ocHAgaGVhZGVy
IGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgU3RldmVuIFdhdGFuYWJlIDIwMTEKLSAqIERpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQot
ICogYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAqIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqCi0gKiBTZWUgaHR0cDovL3d3dy5i
b29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24u
Ci0gKgotICogJElkJAotICovCi0KLSNpZm5kZWYgQk9PU1RfUkFORE9NX0NISV9TUVVBUkVEX0RJ
U1RSSUJVVElPTl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0NISV9TUVVBUkVE
X0RJU1RSSUJVVElPTl9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGlvc2Z3ZD4KLSNpbmNsdWRl
IDxib29zdC9saW1pdHMuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9jb25m
aWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9nYW1tYV9kaXN0cmlidXRpb24uaHBwPgot
Ci1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci0KLS8qKgotICogVGhlIGNo
aSBzcXVhcmVkIGRpc3RyaWJ1dGlvbiBpcyBhIHJlYWwgdmFsdWVkIGRpc3RyaWJ1dGlvbiB3aXRo
Ci0gKiBvbmUgcGFyYW1ldGVyLCBAYyBuLiAgVGhlIGRpc3RyaWJ1dGlvbiBwcm9kdWNlcyB2YWx1
ZXMgPiAwLgotICoKLSAqIFRoZSBkaXN0cmlidXRpb24gZnVuY3Rpb24gaXMKLSAqIFxmJFxkaXNw
bGF5c3R5bGUgUCh4KSA9IFxmcmFje3heeyhuLzIpLTF9ZV57LXgvMn19e1xHYW1tYShuLzIpMl57
bi8yfX1cZiQuCi0gKi8KLXRlbXBsYXRlPGNsYXNzIFJlYWxUeXBlID0gZG91YmxlPgotY2xhc3Mg
Y2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIFJlYWxUeXBl
IHJlc3VsdF90eXBlOwotICAgIHR5cGVkZWYgUmVhbFR5cGUgaW5wdXRfdHlwZTsKLQotICAgIGNs
YXNzIHBhcmFtX3R5cGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBjaGlfc3F1YXJl
ZF9kaXN0cmlidXRpb24gZGlzdHJpYnV0aW9uX3R5cGU7Ci0gICAgICAgIC8qKgotICAgICAgICAg
KiBDb25zdHJ1Y3QgYSBwYXJhbV90eXBlIG9iamVjdC4gIEBjIG4KLSAgICAgICAgICogaXMgdGhl
IHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLgotICAgICAgICAgKgotICAgICAgICAgKiBS
ZXF1aXJlczogdCA+PTAgJiYgMCA8PSBwIDw9IDEKLSAgICAgICAgICovCi0gICAgICAgIGV4cGxp
Y2l0IHBhcmFtX3R5cGUoUmVhbFR5cGUgbl9hcmcgPSBSZWFsVHlwZSgxKSkKLSAgICAgICAgICA6
IF9uKG5fYXJnKQotICAgICAgICB7fQotICAgICAgICAvKiogUmV0dXJucyB0aGUgQGMgbiBwYXJh
bWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICAgICAgUmVhbFR5cGUgbigpIGNvbnN0
IHsgcmV0dXJuIF9uOyB9Ci0jaWZuZGVmIEJPT1NUX1JBTkRPTV9OT19TVFJFQU1fT1BFUkFUT1JT
Ci0gICAgICAgIC8qKiBXcml0ZXMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbiB0
byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgQ2hhclQsIGNs
YXNzIFRyYWl0cz4KLSAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyVCxUcmFp
dHM+JgotICAgICAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyVCxUcmFpdHM+
JiBvcywKLSAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBvcyA8PCBwYXJtLl9uOwotICAgICAgICAgICAgcmV0dXJuIG9zOwot
ICAgICAgICB9Ci0gICAgCi0gICAgICAgIC8qKiBSZWFkcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUg
ZGlzdHJpYnV0aW9uIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uICovCi0gICAgICAgIHRlbXBsYXRl
PGNsYXNzIENoYXJULCBjbGFzcyBUcmFpdHM+Ci0gICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lz
dHJlYW08Q2hhclQsVHJhaXRzPiYKLSAgICAgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJl
YW08Q2hhclQsVHJhaXRzPiYgaXMsIHBhcmFtX3R5cGUmIHBhcm0pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlzID4+IHBhcm0uX247Ci0gICAgICAgICAgICByZXR1cm4gaXM7Ci0gICAgICAgIH0K
LSNlbmRpZgotICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJhbWV0ZXJzIGhhdmUg
dGhlIHNhbWUgdmFsdWVzLiAqLwotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IHBhcmFtX3R5cGUmIGxocywgY29uc3QgcGFyYW1fdHlwZSYgcmhzKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbGhzLl9uID09IHJocy5fbjsKLSAgICAgICAgfQotICAgICAgICAvKiog
UmV0dXJucyB0cnVlIGlmIHRoZSBwYXJhbWV0ZXJzIGhhdmUgZGlmZmVyZW50IHZhbHVlcy4gKi8K
LSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYXJhbV90eXBlJiBsaHMsIGNv
bnN0IHBhcmFtX3R5cGUmIHJocykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICEobGhz
ID09IHJocyk7Ci0gICAgICAgIH0KLSAgICBwcml2YXRlOgotICAgICAgICBSZWFsVHlwZSBfbjsK
LSAgICB9OwotICAgIAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIEBjIGNoaV9zcXVhcmVk
X2Rpc3RyaWJ1dGlvbiBvYmplY3QuIEBjIG4KLSAgICAgKiBpcyB0aGUgcGFyYW1ldGVyIG9mIHRo
ZSBkaXN0cmlidXRpb24uCi0gICAgICoKLSAgICAgKiBSZXF1aXJlczogdCA+PTAgJiYgMCA8PSBw
IDw9IDEKLSAgICAgKi8KLSAgICBleHBsaWNpdCBjaGlfc3F1YXJlZF9kaXN0cmlidXRpb24oUmVh
bFR5cGUgbl9hcmcgPSBSZWFsVHlwZSgxKSkKLSAgICAgIDogX2ltcGwoc3RhdGljX2Nhc3Q8UmVh
bFR5cGU+KG5fYXJnIC8gMikpCi0gICAgewotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBD
b25zdHJ1Y3QgYW4gQGMgY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uIG9iamVjdCBmcm9tIHRoZQot
ICAgICAqIHBhcmFtZXRlcnMuCi0gICAgICovCi0gICAgZXhwbGljaXQgY2hpX3NxdWFyZWRfZGlz
dHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0pCi0gICAgICA6IF9pbXBsKHN0YXRpY19j
YXN0PFJlYWxUeXBlPihwYXJtLm4oKSAvIDIpKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgLyoq
Ci0gICAgICogUmV0dXJucyBhIHJhbmRvbSB2YXJpYXRlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0
byB0aGUKLSAgICAgKiBjaGkgc3F1YXJlZCBkaXN0cmlidXRpb24uCi0gICAgICovCi0gICAgdGVt
cGxhdGU8Y2xhc3MgVVJORz4KLSAgICBSZWFsVHlwZSBvcGVyYXRvcigpKFVSTkcmIHVybmcpCi0g
ICAgewotICAgICAgICByZXR1cm4gMiAqIF9pbXBsKHVybmcpOwotICAgIH0KLSAgICAKLSAgICAv
KioKLSAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIHZhcmlhdGUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5n
IHRvIHRoZQotICAgICAqIGNoaSBzcXVhcmVkIGRpc3RyaWJ1dGlvbiB3aXRoIHBhcmFtZXRlcnMg
c3BlY2lmaWVkIGJ5IEBjIHBhcmFtLgotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIFVSTkc+
Ci0gICAgUmVhbFR5cGUgb3BlcmF0b3IoKShVUk5HJiB1cm5nLCBjb25zdCBwYXJhbV90eXBlJiBw
YXJtKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlv
bihwYXJtKSh1cm5nKTsKLSAgICB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgQGMgbiBwYXJhbWV0
ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICBSZWFsVHlwZSBuKCkgY29uc3QgeyByZXR1
cm4gMiAqIF9pbXBsLmFscGhhKCk7IH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCB2
YWx1ZSB0aGF0IHRoZSBkaXN0cmlidXRpb24gY2FuIHByb2R1Y2UuICovCi0gICAgUmVhbFR5cGUg
bWluIEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OKCkgY29uc3QgeyByZXR1cm4gMDsg
fQotICAgIC8qKiBSZXR1cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlv
biBjYW4gcHJvZHVjZS4gKi8KLSAgICBSZWFsVHlwZSBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19T
VUJTVElUVVRJT04oKSBjb25zdAotICAgIHsgcmV0dXJuIChzdGQ6Om51bWVyaWNfbGltaXRzPFJl
YWxUeXBlPjo6aW5maW5pdHkpKCk7IH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXJz
IG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgcGFyYW1fdHlwZSBwYXJhbSgpIGNvbnN0IHsg
cmV0dXJuIHBhcmFtX3R5cGUobigpKTsgfQotICAgIC8qKiBTZXRzIHBhcmFtZXRlcnMgb2YgdGhl
IGRpc3RyaWJ1dGlvbi4gKi8KLSAgICB2b2lkIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0p
Ci0gICAgewotICAgICAgICB0eXBlZGVmIGdhbW1hX2Rpc3RyaWJ1dGlvbjxSZWFsVHlwZT4gaW1w
bF90eXBlOwotICAgICAgICB0eXBlbmFtZSBpbXBsX3R5cGU6OnBhcmFtX3R5cGUgaW1wbF9wYXJt
KHN0YXRpY19jYXN0PFJlYWxUeXBlPihwYXJtLm4oKSAvIDIpKTsKLSAgICAgICAgX2ltcGwucGFy
YW0oaW1wbF9wYXJtKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFZmZlY3RzOiBTdWJzZXF1
ZW50IHVzZXMgb2YgdGhlIGRpc3RyaWJ1dGlvbiBkbyBub3QgZGVwZW5kCi0gICAgICogb24gdmFs
dWVzIHByb2R1Y2VkIGJ5IGFueSBlbmdpbmUgcHJpb3IgdG8gaW52b2tpbmcgcmVzZXQuCi0gICAg
ICovCi0gICAgdm9pZCByZXNldCgpIHsgX2ltcGwucmVzZXQoKTsgfQotCi0jaWZuZGVmIEJPT1NU
X1JBTkRPTV9OT19TVFJFQU1fT1BFUkFUT1JTCi0gICAgLyoqIFdyaXRlcyB0aGUgcGFyYW1ldGVy
cyBvZiB0aGUgZGlzdHJpYnV0aW9uIHRvIGEgQGMgc3RkOjpvc3RyZWFtLiAqLwotICAgIHRlbXBs
YXRlPGNsYXNzIENoYXJULCBjbGFzcyBUcmFpdHM+Ci0gICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0
cmVhbTxDaGFyVCxUcmFpdHM+JgotICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPENo
YXJULFRyYWl0cz4mIG9zLAotICAgICAgICAgICAgICAgY29uc3QgY2hpX3NxdWFyZWRfZGlzdHJp
YnV0aW9uJiBjMmQpCi0gICAgewotICAgICAgICBvcyA8PCBjMmQucGFyYW0oKTsKLSAgICAgICAg
cmV0dXJuIG9zOwotICAgIH0KLSAgICAKLSAgICAvKiogUmVhZHMgdGhlIHBhcmFtZXRlcnMgb2Yg
dGhlIGRpc3RyaWJ1dGlvbiBmcm9tIGEgQGMgc3RkOjppc3RyZWFtLiAqLwotICAgIHRlbXBsYXRl
PGNsYXNzIENoYXJULCBjbGFzcyBUcmFpdHM+Ci0gICAgZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVh
bTxDaGFyVCxUcmFpdHM+JgotICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPENoYXJU
LFRyYWl0cz4mIGlzLAotICAgICAgICAgICAgICAgY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uJiBj
MmQpCi0gICAgewotICAgICAgICBjMmQucmVhZChpcyk7Ci0gICAgICAgIHJldHVybiBpczsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBkaXN0cmlidXRp
b25zIHdpbGwgcHJvZHVjZSB0aGUgc2FtZQotICAgICAgICBzZXF1ZW5jZSBvZiB2YWx1ZXMsIGdp
dmVuIGVxdWFsIGdlbmVyYXRvcnMuICovCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBjaGlfc3F1YXJlZF9kaXN0cmlidXRpb24mIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbiYgcmhzKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGxocy5faW1wbCA9PSByaHMuX2ltcGw7Ci0gICAgfQotICAgIC8qKiBSZXR1cm5zIHRy
dWUgaWYgdGhlIHR3byBkaXN0cmlidXRpb25zIGNvdWxkIHByb2R1Y2UgZGlmZmVyZW50Ci0gICAg
ICAgIHNlcXVlbmNlcyBvZiB2YWx1ZXMsIGdpdmVuIGVxdWFsIGdlbmVyYXRvcnMuICovCi0gICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBjaGlfc3F1YXJlZF9kaXN0cmlidXRpb24mIGxo
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaV9zcXVhcmVkX2Rpc3RyaWJ1
dGlvbiYgcmhzKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEobGhzID09IHJocyk7Ci0gICAgfQot
Ci1wcml2YXRlOgotCi0gICAgLy8vIEBjb25kIHNob3dfcHJpdmF0ZQotCi0gICAgdGVtcGxhdGU8
Y2xhc3MgQ2hhclQsIGNsYXNzIFRyYWl0cz4KLSAgICB2b2lkIHJlYWQoc3RkOjpiYXNpY19pc3Ry
ZWFtPENoYXJULCBUcmFpdHM+JiBpcykgewotICAgICAgICBwYXJhbV90eXBlIHBhcm07Ci0gICAg
ICAgIGlmKGlzID4+IHBhcm0pIHsKLSAgICAgICAgICAgIHBhcmFtKHBhcm0pOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgZ2FtbWFfZGlzdHJpYnV0aW9uPFJlYWxUeXBlPiBfaW1wbDsKLQotICAg
IC8vLyBAZW5kY29uZAotfTsKLQotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2RldGFpbC9jb25maWcu
aHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2Rl
dGFpbC9jb25maWcuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjRhYjE5NDUy
MDgwOGFlNDAwYTUyNTJjYjdmNDhkMTUzNDAyNzg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3JhbmRvbS9kZXRhaWwvY29uZmlnLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICsw
LDAgQEAKLS8qIGJvb3N0IHJhbmRvbS9kZXRhaWwvY29uZmlnLmhwcCBoZWFkZXIgZmlsZQotICoK
LSAqIENvcHlyaWdodCBTdGV2ZW4gV2F0YW5hYmUgMjAwOQotICogRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBm
b3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAk
SWQkCi0gKi8KLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0KLSNpZiAoZGVmaW5lZChC
T09TVF9OT19PUEVSQVRPUlNfSU5fTkFNRVNQQUNFKSB8fCBkZWZpbmVkKEJPT1NUX05PX01FTUJF
Ul9URU1QTEFURV9GUklFTkRTKSkgXAotICAgICYmICFkZWZpbmVkKEJPT1NUX01TVkMpCi0gICAg
I2RlZmluZSBCT09TVF9SQU5ET01fTk9fU1RSRUFNX09QRVJBVE9SUwotI2VuZGlmCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZGV0
YWlsL2NvbnN0X21vZC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9yYW5kb20vZGV0YWlsL2NvbnN0X21vZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGUwYTQzYWIyNDk5MDc3ZTQyM2YzYzIzOTViNjNiMDdjM2M2NDQ4YTUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2RldGFpbC9jb25zdF9tb2QuaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qIGJvb3N0IHJhbmRvbS9kZXRhaWwvY29uc3Rf
bW9kLmhwcCBoZWFkZXIgZmlsZQotICoKLSAqIENvcHlyaWdodCBKZW5zIE1hdXJlciAyMDAwLTIw
MDEKLSAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJz
aW9uIDEuMC4gKFNlZQotICogYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQKLSAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqCi0gKiBT
ZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5n
IGRvY3VtZW50YXRpb24uCi0gKgotICogJElkJAotICoKLSAqIFJldmlzaW9uIGhpc3RvcnkKLSAq
ICAyMDAxLTAyLTE4ICBtb3ZlZCB0byBpbmRpdmlkdWFsIGhlYWRlciBmaWxlcwotICovCi0KLSNp
Zm5kZWYgQk9PU1RfUkFORE9NX0NPTlNUX01PRF9IUFAKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0NP
TlNUX01PRF9IUFAKLQotI2luY2x1ZGUgPGJvb3N0L2Fzc2VydC5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3Qvc3RhdGljX2Fzc2VydC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50ZWdlcl90cmFpdHMuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL21ha2VfdW5zaWduZWQuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvbGFyZ2VfYXJpdGhtZXRpYy5ocHA+Ci0KLSNpbmNsdWRl
IDxib29zdC9yYW5kb20vZGV0YWlsL2Rpc2FibGVfd2FybmluZ3MuaHBwPgotCi1uYW1lc3BhY2Ug
Ym9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci0KLXRlbXBsYXRlPGNsYXNzIEludFR5cGUsIElu
dFR5cGUgbT4KLWNsYXNzIGNvbnN0X21vZAotewotcHVibGljOgotICBzdGF0aWMgSW50VHlwZSBh
cHBseShJbnRUeXBlIHgpCi0gIHsKLSAgICBpZigoKHVuc2lnbmVkX20oKSAtIDEpICYgdW5zaWdu
ZWRfbSgpKSA9PSAwKQotICAgICAgcmV0dXJuICh1bnNpZ25lZF90eXBlKHgpKSAmICh1bnNpZ25l
ZF9tKCkgLSAxKTsKLSAgICBlbHNlIHsKLSAgICAgIEludFR5cGUgc3VwcHJlc3Nfd2FybmluZ3Mg
PSAobSA9PSAwKTsKLSAgICAgIEJPT1NUX0FTU0VSVChzdXBwcmVzc193YXJuaW5ncyA9PSAwKTsK
LSAgICAgIHJldHVybiB4ICUgKG0gKyBzdXBwcmVzc193YXJuaW5ncyk7Ci0gICAgfQotICB9Ci0K
LSAgc3RhdGljIEludFR5cGUgYWRkKEludFR5cGUgeCwgSW50VHlwZSBjKQotICB7Ci0gICAgaWYo
KCh1bnNpZ25lZF9tKCkgLSAxKSAmIHVuc2lnbmVkX20oKSkgPT0gMCkKLSAgICAgIHJldHVybiAo
dW5zaWduZWRfdHlwZSh4KSArIHVuc2lnbmVkX3R5cGUoYykpICYgKHVuc2lnbmVkX20oKSAtIDEp
OwotICAgIGVsc2UgaWYoYyA9PSAwKQotICAgICAgcmV0dXJuIHg7Ci0gICAgZWxzZSBpZih4IDwg
bSAtIGMpCi0gICAgICByZXR1cm4geCArIGM7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHggLSAo
bSAtIGMpOwotICB9Ci0KLSAgc3RhdGljIEludFR5cGUgbXVsdChJbnRUeXBlIGEsIEludFR5cGUg
eCkKLSAgewotICAgIGlmKCgodW5zaWduZWRfbSgpIC0gMSkgJiB1bnNpZ25lZF9tKCkpID09IDAp
Ci0gICAgICByZXR1cm4gdW5zaWduZWRfdHlwZShhKSAqIHVuc2lnbmVkX3R5cGUoeCkgJiAodW5z
aWduZWRfbSgpIC0gMSk7Ci0gICAgZWxzZSBpZihhID09IDApCi0gICAgICByZXR1cm4gMDsKLSAg
ICBlbHNlIGlmKGEgPT0gMSkKLSAgICAgIHJldHVybiB4OwotICAgIGVsc2UgaWYobSA8PSB0cmFp
dHM6OmNvbnN0X21heC9hKSAgICAgIC8vIGkuZS4gYSptIDw9IG1heAotICAgICAgcmV0dXJuIG11
bHRfc21hbGwoYSwgeCk7Ci0gICAgZWxzZSBpZih0cmFpdHM6OmlzX3NpZ25lZCAmJiAobSVhIDwg
bS9hKSkKLSAgICAgIHJldHVybiBtdWx0X3NjaHJhZ2UoYSwgeCk7Ci0gICAgZWxzZQotICAgICAg
cmV0dXJuIG11bHRfZ2VuZXJhbChhLCB4KTsKLSAgfQotCi0gIHN0YXRpYyBJbnRUeXBlIG11bHRf
YWRkKEludFR5cGUgYSwgSW50VHlwZSB4LCBJbnRUeXBlIGMpCi0gIHsKLSAgICBpZigoKHVuc2ln
bmVkX20oKSAtIDEpICYgdW5zaWduZWRfbSgpKSA9PSAwKQotICAgICAgcmV0dXJuICh1bnNpZ25l
ZF90eXBlKGEpICogdW5zaWduZWRfdHlwZSh4KSArIHVuc2lnbmVkX3R5cGUoYykpICYgKHVuc2ln
bmVkX20oKSAtIDEpOwotICAgIGVsc2UgaWYoYSA9PSAwKQotICAgICAgcmV0dXJuIGM7Ci0gICAg
ZWxzZSBpZihtIDw9ICh0cmFpdHM6OmNvbnN0X21heC1jKS9hKSB7ICAvLyBpLmUuIGEqbStjIDw9
IG1heAotICAgICAgSW50VHlwZSBzdXBwcmVzc193YXJuaW5ncyA9IChtID09IDApOwotICAgICAg
Qk9PU1RfQVNTRVJUKHN1cHByZXNzX3dhcm5pbmdzID09IDApOwotICAgICAgcmV0dXJuIChhKngr
YykgJSAobSArIHN1cHByZXNzX3dhcm5pbmdzKTsKLSAgICB9IGVsc2UKLSAgICAgIHJldHVybiBh
ZGQobXVsdChhLCB4KSwgYyk7Ci0gIH0KLQotICBzdGF0aWMgSW50VHlwZSBwb3coSW50VHlwZSBh
LCBib29zdDo6dWludG1heF90IGV4cG9uZW50KQotICB7Ci0gICAgICBJbnRUeXBlIHJlc3VsdCA9
IDE7Ci0gICAgICB3aGlsZShleHBvbmVudCAhPSAwKSB7Ci0gICAgICAgICAgaWYoZXhwb25lbnQg
JSAyID09IDEpIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gbXVsdChyZXN1bHQsIGEpOwotICAg
ICAgICAgIH0KLSAgICAgICAgICBhID0gbXVsdChhLCBhKTsKLSAgICAgICAgICBleHBvbmVudCAv
PSAyOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHN0YXRpYyBJbnRU
eXBlIGludmVydChJbnRUeXBlIHgpCi0gIHsgcmV0dXJuIHggPT0gMCA/IDAgOiAobSA9PSAwPyBp
bnZlcnRfZXVjbGlkaWFuMCh4KSA6IGludmVydF9ldWNsaWRpYW4oeCkpOyB9Ci0KLXByaXZhdGU6
Ci0gIHR5cGVkZWYgaW50ZWdlcl90cmFpdHM8SW50VHlwZT4gdHJhaXRzOwotICB0eXBlZGVmIHR5
cGVuYW1lIG1ha2VfdW5zaWduZWQ8SW50VHlwZT46OnR5cGUgdW5zaWduZWRfdHlwZTsKLQotICBj
b25zdF9tb2QoKTsgICAgICAvLyBkb24ndCBpbnN0YW50aWF0ZQotCi0gIHN0YXRpYyBJbnRUeXBl
IG11bHRfc21hbGwoSW50VHlwZSBhLCBJbnRUeXBlIHgpCi0gIHsKLSAgICBJbnRUeXBlIHN1cHBy
ZXNzX3dhcm5pbmdzID0gKG0gPT0gMCk7Ci0gICAgQk9PU1RfQVNTRVJUKHN1cHByZXNzX3dhcm5p
bmdzID09IDApOwotICAgIHJldHVybiBhKnggJSAobSArIHN1cHByZXNzX3dhcm5pbmdzKTsKLSAg
fQotCi0gIHN0YXRpYyBJbnRUeXBlIG11bHRfc2NocmFnZShJbnRUeXBlIGEsIEludFR5cGUgdmFs
dWUpCi0gIHsKLSAgICBjb25zdCBJbnRUeXBlIHEgPSBtIC8gYTsKLSAgICBjb25zdCBJbnRUeXBl
IHIgPSBtICUgYTsKLQotICAgIEJPT1NUX0FTU0VSVChyIDwgcSk7ICAgICAgICAvLyBjaGVjayB0
aGF0IG92ZXJmbG93IGNhbm5vdCBoYXBwZW4KLQotICAgIHJldHVybiBzdWIoYSoodmFsdWUlcSks
IHIqKHZhbHVlL3EpKTsKLSAgfQotCi0gIHN0YXRpYyBJbnRUeXBlIG11bHRfZ2VuZXJhbChJbnRU
eXBlIGEsIEludFR5cGUgYikKLSAgewotICAgIEludFR5cGUgc3VwcHJlc3Nfd2FybmluZ3MgPSAo
bSA9PSAwKTsKLSAgICBCT09TVF9BU1NFUlQoc3VwcHJlc3Nfd2FybmluZ3MgPT0gMCk7Ci0gICAg
SW50VHlwZSBtb2R1bHVzID0gbSArIHN1cHByZXNzX3dhcm5pbmdzOwotICAgIEJPT1NUX0FTU0VS
VChtb2R1bHVzID09IG0pOwotICAgIGlmKDo6Ym9vc3Q6OnVpbnRtYXhfdChtb2R1bHVzKSA8PQot
ICAgICAgICAoOjpzdGQ6Om51bWVyaWNfbGltaXRzPCA6OmJvb3N0Ojp1aW50bWF4X3Q+OjptYXgp
KCkgLyBtb2R1bHVzKQotICAgIHsKLSAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnRUeXBlPihi
b29zdDo6dWludG1heF90KGEpICogYiAlIG1vZHVsdXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZT4oZGV0YWlsOjptdWxtb2QoYSwgYiwgbW9kdWx1cykp
OwotICAgIH0KLSAgfQotCi0gIHN0YXRpYyBJbnRUeXBlIHN1YihJbnRUeXBlIGEsIEludFR5cGUg
YikKLSAgewotICAgIGlmKGEgPCBiKQotICAgICAgcmV0dXJuIG0gLSAoYiAtIGEpOwotICAgIGVs
c2UKLSAgICAgIHJldHVybiBhIC0gYjsKLSAgfQotCi0gIHN0YXRpYyB1bnNpZ25lZF90eXBlIHVu
c2lnbmVkX20oKQotICB7Ci0gICAgICBpZihtID09IDApIHsKLSAgICAgICAgICByZXR1cm4gdW5z
aWduZWRfdHlwZSgoc3RkOjpudW1lcmljX2xpbWl0czxJbnRUeXBlPjo6bWF4KSgpKSArIDE7Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICAgIHJldHVybiB1bnNpZ25lZF90eXBlKG0pOwotICAgICAg
fQotICB9Ci0KLSAgLy8gaW52ZXJ0IGMgaW4gdGhlIGZpbml0ZSBmaWVsZCAobW9kIG0pIChtIG11
c3QgYmUgcHJpbWUpCi0gIHN0YXRpYyBJbnRUeXBlIGludmVydF9ldWNsaWRpYW4oSW50VHlwZSBj
KQotICB7Ci0gICAgLy8gd2UgYXJlIGludGVyZXN0ZWQgaW4gdGhlIGdjZCBmYWN0b3IgZm9yIGMs
IGJlY2F1c2UgdGhpcyBpcyBvdXIgaW52ZXJzZQotICAgIEJPT1NUX0FTU0VSVChjID4gMCk7Ci0g
ICAgSW50VHlwZSBsMSA9IDA7Ci0gICAgSW50VHlwZSBsMiA9IDE7Ci0gICAgSW50VHlwZSBuID0g
YzsKLSAgICBJbnRUeXBlIHAgPSBtOwotICAgIGZvcig7OykgewotICAgICAgSW50VHlwZSBxID0g
cCAvIG47Ci0gICAgICBsMSArPSBxICogbDI7Ci0gICAgICBwIC09IHEgKiBuOwotICAgICAgaWYo
cCA9PSAwKQotICAgICAgICByZXR1cm4gbDI7Ci0gICAgICBJbnRUeXBlIHEyID0gbiAvIHA7Ci0g
ICAgICBsMiArPSBxMiAqIGwxOwotICAgICAgbiAtPSBxMiAqIHA7Ci0gICAgICBpZihuID09IDAp
Ci0gICAgICAgIHJldHVybiBtIC0gbDE7Ci0gICAgfQotICB9Ci0KLSAgLy8gaW52ZXJ0IGMgaW4g
dGhlIGZpbml0ZSBmaWVsZCAobW9kIG0pIChjIG11c3QgYmUgcmVsYXRpdmVseSBwcmltZSB0byBt
KQotICBzdGF0aWMgSW50VHlwZSBpbnZlcnRfZXVjbGlkaWFuMChJbnRUeXBlIGMpCi0gIHsKLSAg
ICAvLyB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgZ2NkIGZhY3RvciBmb3IgYywgYmVjYXVzZSB0
aGlzIGlzIG91ciBpbnZlcnNlCi0gICAgQk9PU1RfQVNTRVJUKGMgPiAwKTsKLSAgICBpZihjID09
IDEpIHJldHVybiAxOwotICAgIEludFR5cGUgbDEgPSAwOwotICAgIEludFR5cGUgbDIgPSAxOwot
ICAgIEludFR5cGUgbiA9IGM7Ci0gICAgSW50VHlwZSBwID0gbTsKLSAgICBJbnRUeXBlIG1heCA9
IChzdGQ6Om51bWVyaWNfbGltaXRzPEludFR5cGU+OjptYXgpKCk7Ci0gICAgSW50VHlwZSBxID0g
bWF4IC8gbjsKLSAgICBCT09TVF9BU1NFUlQobWF4ICUgbiAhPSBuIC0gMSAmJiAiYyBtdXN0IGJl
IHJlbGF0aXZlbHkgcHJpbWUgdG8gbS4iKTsKLSAgICBsMSArPSBxICogbDI7Ci0gICAgcCA9IG1h
eCAtIHEgKiBuICsgMTsKLSAgICBmb3IoOzspIHsKLSAgICAgIGlmKHAgPT0gMCkKLSAgICAgICAg
cmV0dXJuIGwyOwotICAgICAgSW50VHlwZSBxMiA9IG4gLyBwOwotICAgICAgbDIgKz0gcTIgKiBs
MTsKLSAgICAgIG4gLT0gcTIgKiBwOwotICAgICAgaWYobiA9PSAwKQotICAgICAgICByZXR1cm4g
bSAtIGwxOwotICAgICAgcSA9IHAgLyBuOwotICAgICAgbDEgKz0gcSAqIGwyOwotICAgICAgcCAt
PSBxICogbjsKLSAgICB9Ci0gIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotfSAvLyBu
YW1lc3BhY2UgYm9vc3QKLQotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvZW5hYmxlX3dh
cm5pbmdzLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9DT05TVF9NT0RfSFBQCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20v
ZGV0YWlsL2Rpc2FibGVfd2FybmluZ3MuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2RldGFpbC9kaXNhYmxlX3dhcm5pbmdzLmhwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU4MmRjYjFhN2Q1YmUxZWU0ZGI4MzBlYzRiMDQ5NjJm
MzE1NmY3Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZGV0YWlsL2Rp
c2FibGVfd2FybmluZ3MuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyogYm9v
c3QgcmFuZG9tL2RldGFpbC9kaXNhYmxlX3dhcm5pbmdzLmhwcCBoZWFkZXIgZmlsZQotICoKLSAq
IENvcHlyaWdodCBTdGV2ZW4gV2F0YW5hYmUgMjAwOQotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5v
cmcvTElDRU5TRV8xXzAudHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3Ig
bW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQk
Ci0gKgotICovCi0KLS8vIE5vICNpbmNsdWRlIGd1YXJkLiAgVGhpcyBoZWFkZXIgaXMgaW50ZW5k
ZWQgdG8gYmUgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuCi0KLSNpbmNsdWRlIDxib29zdC9jb25m
aWcuaHBwPgotCi0jaWZkZWYgQk9PU1RfTVNWQwotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJh
Z21hIHdhcm5pbmcoZGlzYWJsZTo0NTEyKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDEyNykK
LSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ3MjQpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0
ODAwKSAvLyAnaW50JyA6IGZvcmNpbmcgdmFsdWUgdG8gYm9vbCAndHJ1ZScgb3IgJ2ZhbHNlJyAo
cGVyZm9ybWFuY2Ugd2FybmluZykKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCT09TVF9HQ0MpICYm
IEJPT1NUX0dDQyA+PSA0MDYwMAotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21h
IEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbG9naWNhbC1vcCIKLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2RldGFp
bC9lbmFibGVfd2FybmluZ3MuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcmFuZG9tL2RldGFpbC9lbmFibGVfd2FybmluZ3MuaHBwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyNGYzYmIzZjU4MzgxYzkyMmM0NTA0ODQxYzcxNzZmZjRjNmU3MTQ5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9kZXRhaWwvZW5hYmxlX3dh
cm5pbmdzLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qIGJvb3N0IHJhbmRv
bS9kZXRhaWwvZW5hYmxlX3dhcm5pbmdzLmhwcCBoZWFkZXIgZmlsZQotICoKLSAqIENvcHlyaWdo
dCBTdGV2ZW4gV2F0YW5hYmUgMjAwOQotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNv
ZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBM
SUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNl
bnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgotICov
Ci0KLS8vIE5vICNpbmNsdWRlIGd1YXJkLiAgVGhpcyBoZWFkZXIgaXMgaW50ZW5kZWQgdG8gYmUg
aW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuCi0KLSNpZmRlZiBCT09TVF9NU1ZDCi0jcHJhZ21hIHdh
cm5pbmcocG9wKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJPT1NUX0dDQykgJiYgQk9PU1RfR0ND
ID49IDQwNjAwCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAotI2VuZGlmCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZGV0YWls
L2dlbmVyYXRvcl9iaXRzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3JhbmRvbS9kZXRhaWwvZ2VuZXJhdG9yX2JpdHMuaHBwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwNTI3NjE0MmNiY2M2ZjNjYWU5NzU0MjQ5MDM2MzU3YTg3MDQ3ZjFmLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9kZXRhaWwvZ2VuZXJhdG9yX2Jp
dHMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyogYm9vc3QgcmFuZG9tL2Rl
dGFpbC9nZW5lcmF0b3JfYml0cy5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgU3Rl
dmVuIFdhdGFuYWJlIDIwMTEKLSAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotICogYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQKLSAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLSAqCi0gKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZl
cnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0gKgotICogJElkJAotICoKLSAqLwotCi0j
aWZuZGVmIEJPT1NUX1JBTkRPTV9ERVRBSUxfR0VORVJBVE9SX0JJVFNfSFBQCi0jZGVmaW5lIEJP
T1NUX1JBTkRPTV9ERVRBSUxfR0VORVJBVE9SX0JJVFNfSFBQCi0KLSNpbmNsdWRlIDxib29zdC9s
aW1pdHMuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci1uYW1l
c3BhY2UgZGV0YWlsIHsKLQotLy8gVGhpcyBpcyBhIHRlbXBvcmFyeSBtZWFzdXJlIHRoYXQgcmV0
YWlucyBiYWNrd2FyZHMKLS8vIGNvbXBhdGliaWxpdHkuCi10ZW1wbGF0ZTxjbGFzcyBVUk5HPgot
c3RydWN0IGdlbmVyYXRvcl9iaXRzIHsKLSAgICBzdGF0aWMgc3RkOjpzaXplX3QgdmFsdWUoKSB7
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHR5cGVuYW1lIFVSTkc6OnJlc3Vs
dF90eXBlPjo6ZGlnaXRzOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGRldGFpbAotfSAv
LyBuYW1lc3BhY2UgcmFuZG9tCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9P
U1RfUkFORE9NX0RFVEFJTF9HRU5FUkFUT1JfQklUU19IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9kZXRhaWwvZ2VuZXJhdG9y
X3NlZWRfc2VxLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3JhbmRvbS9kZXRhaWwvZ2VuZXJhdG9yX3NlZWRfc2VxLmhwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggN2UxMzQ4MzQ2NDk3YzE0YTRlYzYwZTFmMzdkYTVjNWE1NDJlZDk1YS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZGV0YWlsL2dlbmVyYXRvcl9zZWVk
X3NlcS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKiBib29zdCByYW5kb20v
bWVyc2VubmVfdHdpc3Rlci5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgSmVucyBN
YXVyZXIgMjAwMC0yMDAxCi0gKiBDb3B5cmlnaHQgU3RldmVuIFdhdGFuYWJlIDIwMTAKLSAqIERp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4g
KFNlZQotICogYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAq
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqCi0gKiBTZWUgaHR0cDov
L3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50
YXRpb24uCi0gKgotICogJElkJAotICoKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9ERVRB
SUxfR0VORVJBVE9SX1NFRURfU0VRX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9SQU5ET01f
REVUQUlMX0dFTkVSQVRPUl9TRUVEX1NFUV9IUFBfSU5DTFVERUQKLQotbmFtZXNwYWNlIGJvb3N0
IHsKLW5hbWVzcGFjZSByYW5kb20gewotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLXRlbXBsYXRlPGNs
YXNzIEdlbmVyYXRvcj4KLWNsYXNzIGdlbmVyYXRvcl9zZWVkX3NlcSB7Ci1wdWJsaWM6Ci0gICAg
Z2VuZXJhdG9yX3NlZWRfc2VxKEdlbmVyYXRvciYgZykgOiBnZW4oJmcpIHt9Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgSXQ+Ci0gICAgdm9pZCBnZW5lcmF0ZShJdCBmaXJzdCwgSXQgbGFzdCkgewotICAg
ICAgICBmb3IoOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0KSB7Ci0gICAgICAgICAgICAqZmlyc3Qg
PSAoKmdlbikoKTsKLSAgICAgICAgfQotICAgIH0KLXByaXZhdGU6Ci0gICAgR2VuZXJhdG9yKiBn
ZW47Ci19OwotCi19Ci19Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2RldGFpbC9pbnRfZmxvYXRfcGFpci5o
cHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZGV0
YWlsL2ludF9mbG9hdF9wYWlyLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUy
NTNhMGVjYmY5MDM3YjVkODAxYjg4YTVmMTk1MmNmMDBlM2JkMC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9yYW5kb20vZGV0YWlsL2ludF9mbG9hdF9wYWlyLmhwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKiBib29zdCByYW5kb20vZGV0YWlsL2ludF9mbG9hdF9w
YWlyLmhwcCBoZWFkZXIgZmlsZQotICoKLSAqIENvcHlyaWdodCBKZW5zIE1hdXJlciAyMDAwLTIw
MDEKLSAqIENvcHlyaWdodCBTdGV2ZW4gV2F0YW5hYmUgMjAxMC0yMDExCi0gKiBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAq
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgot
ICoKLSAqICRJZCQKLSAqCi0gKi8KLQotI2lmbmRlZiBCT09TVF9SQU5ET01fREVUQUlMX0lOVF9G
TE9BVF9QQUlSX0hQUAotI2RlZmluZSBCT09TVF9SQU5ET01fREVUQUlMX0lOVF9GTE9BVF9QQUlS
X0hQUAotCi0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDxib29zdC9pbnRlZ2VyLmhwcD4K
LSNpbmNsdWRlIDxib29zdC9pbnRlZ2VyL2ludGVnZXJfbWFzay5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvbWFrZV91bnNpZ25lZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90
cmFpdHMvaXNfaW50ZWdyYWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS91bmlmb3JtXzAx
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uLmhw
cD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL3NpZ25lZF91bnNpZ25lZF90b29scy5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9pbnRlZ2VyX2xvZzIuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L21wbC9ib29sLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFj
ZSByYW5kb20gewotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLXRlbXBsYXRlPGNsYXNzIEVuZ2luZT4K
LWlubGluZSB0eXBlbmFtZSBib29zdDo6bWFrZV91bnNpZ25lZDx0eXBlbmFtZSBFbmdpbmU6OnJl
c3VsdF90eXBlPjo6dHlwZQotZ2VuZXJhdGVfb25lX2RpZ2l0KEVuZ2luZSYgZW5nLCBzdGQ6OnNp
emVfdCBiaXRzKQotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgRW5naW5lOjpyZXN1bHRfdHlwZSBi
YXNlX3Jlc3VsdDsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0OjptYWtlX3Vuc2lnbmVkPGJh
c2VfcmVzdWx0Pjo6dHlwZSBiYXNlX3Vuc2lnbmVkOwotICAgIAotICAgIGJhc2VfdW5zaWduZWQg
cmFuZ2UgPQotICAgICAgICBkZXRhaWw6OnN1YnRyYWN0PGJhc2VfcmVzdWx0PigpKChlbmcubWF4
KSgpLCAoZW5nLm1pbikoKSk7Ci0gICAgYmFzZV91bnNpZ25lZCB5MF9tYXNrID0gKGJhc2VfdW5z
aWduZWQoMikgPDwgKGJpdHMgLSAxKSkgLSAxOwotICAgIGJhc2VfdW5zaWduZWQgeTAgPSAocmFu
Z2UgKyAxKSAmIH55MF9tYXNrOwotICAgIGJhc2VfdW5zaWduZWQgdTsKLSAgICBkbyB7Ci0gICAg
ICAgIHUgPSBkZXRhaWw6OnN1YnRyYWN0PGJhc2VfcmVzdWx0PigpKGVuZygpLCAoZW5nLm1pbiko
KSk7Ci0gICAgfSB3aGlsZSh5MCAhPSAwICYmIHUgPiBiYXNlX3Vuc2lnbmVkKHkwIC0gMSkpOwot
ICAgIHJldHVybiB1ICYgeTBfbWFzazsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGUsIHN0
ZDo6c2l6ZV90IHcsIGNsYXNzIEVuZ2luZT4KLXN0ZDo6cGFpcjxSZWFsVHlwZSwgaW50PiBnZW5l
cmF0ZV9pbnRfZmxvYXRfcGFpcihFbmdpbmUmIGVuZywgYm9vc3Q6Om1wbDo6dHJ1ZV8pCi17Ci0g
ICAgdHlwZWRlZiB0eXBlbmFtZSBFbmdpbmU6OnJlc3VsdF90eXBlIGJhc2VfcmVzdWx0OwotICAg
IHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6Om1ha2VfdW5zaWduZWQ8YmFzZV9yZXN1bHQ+Ojp0eXBl
IGJhc2VfdW5zaWduZWQ7Ci0gICAgCi0gICAgYmFzZV91bnNpZ25lZCByYW5nZSA9Ci0gICAgICAg
IGRldGFpbDo6c3VidHJhY3Q8YmFzZV9yZXN1bHQ+KCkoKGVuZy5tYXgpKCksIChlbmcubWluKSgp
KTsKLSAgICAKLSAgICBzdGQ6OnNpemVfdCBtID0KLSAgICAgICAgKHJhbmdlID09IChzdGQ6Om51
bWVyaWNfbGltaXRzPGJhc2VfdW5zaWduZWQ+OjptYXgpKCkpID8KLSAgICAgICAgICAgIHN0ZDo6
bnVtZXJpY19saW1pdHM8YmFzZV91bnNpZ25lZD46OmRpZ2l0cyA6Ci0gICAgICAgICAgICBkZXRh
aWw6OmludGVnZXJfbG9nMihyYW5nZSArIDEpOwotICAgICAgICAgICAgCi0gICAgaW50IGJ1Y2tl
dCA9IDA7Ci0gICAgLy8gcHJvY2VzcyBhcyBtYW55IGZ1bGwgZGlnaXRzIGFzIHBvc3NpYmxlIGlu
dG8gdGhlIGludCBwYXJ0Ci0gICAgZm9yKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgdy9tOyArK2kp
IHsKLSAgICAgICAgYmFzZV91bnNpZ25lZCB1ID0gZ2VuZXJhdGVfb25lX2RpZ2l0KGVuZywgbSk7
Ci0gICAgICAgIGJ1Y2tldCA9IChidWNrZXQgPDwgbSkgfCB1OwotICAgIH0KLSAgICBSZWFsVHlw
ZSByOwotCi0gICAgY29uc3Qgc3RkOjpzaXplX3QgZGlnaXRzID0gc3RkOjpudW1lcmljX2xpbWl0
czxSZWFsVHlwZT46OmRpZ2l0czsKLSAgICB7Ci0gICAgICAgIGJhc2VfdW5zaWduZWQgdSA9IGdl
bmVyYXRlX29uZV9kaWdpdChlbmcsIG0pOwotICAgICAgICBiYXNlX3Vuc2lnbmVkIG1hc2sgPSAo
YmFzZV91bnNpZ25lZCgxKSA8PCAodyVtKSkgLSAxOwotICAgICAgICBidWNrZXQgPSAoYnVja2V0
IDw8ICh3JW0pKSB8IChtYXNrICYgdSk7Ci0gICAgICAgIGNvbnN0IFJlYWxUeXBlIG11bHQgPSBS
ZWFsVHlwZSgxKS9SZWFsVHlwZShiYXNlX3Vuc2lnbmVkKDEpIDw8IChtIC0gdyVtKSk7Ci0gICAg
ICAgIC8vIHplcm8gb3V0IHVudXNlZCBiaXRzCi0gICAgICAgIGlmIChtIC0gdyVtID4gZGlnaXRz
KSB7Ci0gICAgICAgICAgICB1ICY9IH4oYmFzZV91bnNpZ25lZCgxKSA8PCAobSAtIGRpZ2l0cykp
OwotICAgICAgICB9Ci0gICAgICAgIHIgPSBSZWFsVHlwZSh1ID4+ICh3JW0pKSAqIG11bHQ7Ci0g
ICAgfQotICAgIGZvcihzdGQ6OnNpemVfdCBpID0gbSAtIHclbTsgaSArIG0gPCBkaWdpdHM7ICsr
aSkgewotICAgICAgICBiYXNlX3Vuc2lnbmVkIHUgPSBnZW5lcmF0ZV9vbmVfZGlnaXQoZW5nLCBt
KTsKLSAgICAgICAgciArPSB1OwotICAgICAgICByICo9IFJlYWxUeXBlKDAuNSkvUmVhbFR5cGUo
YmFzZV91bnNpZ25lZCgxKSA8PCAobSAtIDEpKTsKLSAgICB9Ci0gICAgaWYgKG0gLSB3JW0gPCBk
aWdpdHMpCi0gICAgewotICAgICAgICBjb25zdCBzdGQ6OnNpemVfdCByZW1haW5pbmcgPSAoZGln
aXRzIC0gbSArIHclbSkgJSBtOwotICAgICAgICBiYXNlX3Vuc2lnbmVkIHUgPSBnZW5lcmF0ZV9v
bmVfZGlnaXQoZW5nLCBtKTsKLSAgICAgICAgciArPSB1ICYgKChiYXNlX3Vuc2lnbmVkKDIpIDw8
IChyZW1haW5pbmcgLSAxKSkgLSAxKTsKLSAgICAgICAgY29uc3QgUmVhbFR5cGUgbXVsdCA9IFJl
YWxUeXBlKDAuNSkvUmVhbFR5cGUoYmFzZV91bnNpZ25lZCgxKSA8PCAocmVtYWluaW5nIC0gMSkp
OwotICAgICAgICByICo9IG11bHQ7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihy
LCBidWNrZXQpOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBSZWFsVHlwZSwgc3RkOjpzaXplX3Qgdywg
Y2xhc3MgRW5naW5lPgotaW5saW5lIHN0ZDo6cGFpcjxSZWFsVHlwZSwgaW50PiBnZW5lcmF0ZV9p
bnRfZmxvYXRfcGFpcihFbmdpbmUmIGVuZywgYm9vc3Q6Om1wbDo6ZmFsc2VfKQotewotICAgIGlu
dCBidWNrZXQgPSB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248PigwLCAoMSA8PCB3KSAtIDEpKGVu
Zyk7Ci0gICAgUmVhbFR5cGUgciA9IHVuaWZvcm1fMDE8UmVhbFR5cGU+KCkoZW5nKTsKLSAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIociwgYnVja2V0KTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgUmVh
bFR5cGUsIHN0ZDo6c2l6ZV90IHcsIGNsYXNzIEVuZ2luZT4KLWlubGluZSBzdGQ6OnBhaXI8UmVh
bFR5cGUsIGludD4gZ2VuZXJhdGVfaW50X2Zsb2F0X3BhaXIoRW5naW5lJiBlbmcpCi17Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBFbmdpbmU6OnJlc3VsdF90eXBlIGJhc2VfcmVzdWx0OwotICAgIHJl
dHVybiBnZW5lcmF0ZV9pbnRfZmxvYXRfcGFpcjxSZWFsVHlwZSwgdz4oZW5nLAotICAgICAgICBi
b29zdDo6aXNfaW50ZWdyYWw8YmFzZV9yZXN1bHQ+KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBk
ZXRhaWwKLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2Vu
ZGlmIC8vIEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5UX0ZMT0FUX1BBSVJfSFBQCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZGV0YWls
L2ludGVnZXJfbG9nMi5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9yYW5kb20vZGV0YWlsL2ludGVnZXJfbG9nMi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDI0ODI0M2E0YjJlZDdhMjBmYTYxMDU2MzhhYjJkM2JkYzBmMDA3MjIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2RldGFpbC9pbnRlZ2VyX2xvZzIuaHBw
CisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyogYm9vc3QgcmFuZG9tL2RldGFpbC9p
bnRlZ2VyX2xvZzIuaHBwIGhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0IFN0ZXZlbiBXYXRh
bmFiZSAyMDExCi0gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5z
ZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0g
KgotICogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGlu
Y2x1ZGluZyBkb2N1bWVudGF0aW9uLgotICoKLSAqICRJZCQKLSAqCi0gKi8KLQotI2lmbmRlZiBC
T09TVF9SQU5ET01fREVUQUlMX0lOVEVHRVJfTE9HMl9IUFAKLSNkZWZpbmUgQk9PU1RfUkFORE9N
X0RFVEFJTF9JTlRFR0VSX0xPRzJfSFBQCi0KLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L2xpbWl0cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcGVuZGluZy9pbnRl
Z2VyX2xvZzIuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci1u
YW1lc3BhY2UgZGV0YWlsIHsKLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX0NPTlNURVhQ
UikKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJTF9DT05TVEVYUFIgY29uc3RleHByCi0jZWxp
ZiBkZWZpbmVkKEJPT1NUX01TVkMpCi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9ERVRBSUxfQ09OU1RF
WFBSIF9fZm9yY2VpbmxpbmUKLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49
IDQKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJTF9DT05TVEVYUFIgaW5saW5lIF9fYXR0cmli
dXRlX18oKF9fY29uc3RfXykpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKLSNl
bHNlCi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9ERVRBSUxfQ09OU1RFWFBSIGlubGluZQotI2VuZGlm
Ci0KLXRlbXBsYXRlPGludCBTaGlmdD4KLXN0cnVjdCBpbnRlZ2VyX2xvZzJfaW1wbAotewotI2lm
IGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfQ09OU1RFWFBSKQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+
Ci0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9DT05TVEVYUFIgc3RhdGljIGludCBhcHBseShUIHQs
IGludCBhY2N1bSkKLSAgICB7Ci0gICAgICAgIGludCB1cGRhdGUgPSAoKHQgPj4gU2hpZnQpICE9
IDApICogU2hpZnQ7Ci0gICAgICAgIHJldHVybiBpbnRlZ2VyX2xvZzJfaW1wbDxTaGlmdCAvIDI+
OjphcHBseSh0ID4+IHVwZGF0ZSwgYWNjdW0gKyB1cGRhdGUpOwotICAgIH0KLSNlbHNlCi0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0NPTlNURVhQUiBzdGF0
aWMgaW50IGFwcGx5MihUIHQsIGludCBhY2N1bSwgaW50IHVwZGF0ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBpbnRlZ2VyX2xvZzJfaW1wbDxTaGlmdCAvIDI+OjphcHBseSh0ID4+IHVwZGF0ZSwg
YWNjdW0gKyB1cGRhdGUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgQk9P
U1RfUkFORE9NX0RFVEFJTF9DT05TVEVYUFIgc3RhdGljIGludCBhcHBseShUIHQsIGludCBhY2N1
bSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhcHBseTIodCwgYWNjdW0sICgodCA+PiBTaGlmdCkg
IT0gMCkgKiBTaGlmdCk7Ci0gICAgfQotI2VuZGlmCi19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
aW50ZWdlcl9sb2cyX2ltcGw8MT4KLXsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIEJPT1NU
X1JBTkRPTV9ERVRBSUxfQ09OU1RFWFBSIHN0YXRpYyBpbnQgYXBwbHkoVCB0LCBpbnQgYWNjdW0p
Ci0gICAgewotICAgICAgICByZXR1cm4gaW50KHQgPj4gMSkgKyBhY2N1bTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTxjbGFzcyBUPgotQk9PU1RfUkFORE9NX0RFVEFJTF9DT05TVEVYUFIgaW50IGlu
dGVnZXJfbG9nMihUIHQpCi17Ci0gICAgcmV0dXJuIGludGVnZXJfbG9nMl9pbXBsPAotICAgICAg
ICA6OmJvb3N0OjpkZXRhaWw6Om1heF9wb3cyX2xlc3M8Ci0gICAgICAgICAgICA6OnN0ZDo6bnVt
ZXJpY19saW1pdHM8VD46OmRpZ2l0cywgNAotICAgICAgICA+Ojp2YWx1ZQotICAgID46OmFwcGx5
KHQsIDApOwotfQotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLX0gLy8gbmFtZXNwYWNlIHJhbmRv
bQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9ERVRBSUxf
SU5URUdFUl9MT0cyX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2RldGFpbC9sYXJnZV9hcml0aG1ldGljLmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9kZXRhaWwvbGFyZ2Vf
YXJpdGhtZXRpYy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZjZiNGU2MTU2
YjdjZjA0MWUxZjM5YTEwNjFhNzM2ZTJhNTIwNWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvcmFuZG9tL2RldGFpbC9sYXJnZV9hcml0aG1ldGljLmhwcAorKysgL2Rldi9udWxsCkBA
IC0xLDEyMiArMCwwIEBACi0vKiBib29zdCByYW5kb20vZGV0YWlsL2xhcmdlX2FyaXRobWV0aWMu
aHBwIGhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0IFN0ZXZlbiBXYXRhbmFiZSAyMDExCi0g
KiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuIChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0
Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0
dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1
bWVudGF0aW9uLgotICoKLSAqICRJZCQKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9ERVRB
SUxfTEFSR0VfQVJJVEhNRVRJQ19IUFAKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJTF9MQVJH
RV9BUklUSE1FVElDX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvY3N0ZGludC5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvaW50ZWdlci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbGltaXRzLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2ludGVnZXJfbG9nMi5ocHA+Ci0KLSNpbmNsdWRlIDxi
b29zdC9yYW5kb20vZGV0YWlsL2Rpc2FibGVfd2FybmluZ3MuaHBwPgotCi1uYW1lc3BhY2UgYm9v
c3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci1uYW1lc3BhY2UgZGV0YWlsIHsKLQotc3RydWN0IGRp
dl90IHsKLSAgICBib29zdDo6dWludG1heF90IHF1b3RpZW50OwotICAgIGJvb3N0Ojp1aW50bWF4
X3QgcmVtYWluZGVyOwotfTsKLQotaW5saW5lIGRpdl90IG11bGRpdm1vZChib29zdDo6dWludG1h
eF90IGEsIGJvb3N0Ojp1aW50bWF4X3QgYiwgYm9vc3Q6OnVpbnRtYXhfdCBtKQotewotICAgIGNv
bnN0IGludCBiaXRzID0KLSAgICAgICAgOjpzdGQ6Om51bWVyaWNfbGltaXRzPCA6OmJvb3N0Ojp1
aW50bWF4X3Q+OjpkaWdpdHMgLyAyOwotICAgIGNvbnN0IDo6Ym9vc3Q6OnVpbnRtYXhfdCBtYXNr
ID0gKDo6Ym9vc3Q6OnVpbnRtYXhfdCgxKSA8PCBiaXRzKSAtIDE7Ci0gICAgdHlwZWRlZiA6OmJv
b3N0Ojp1aW50X3Q8Yml0cz46OmZhc3QgZGlnaXRfdDsKLQotICAgIGludCBzaGlmdCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8IDo6Ym9vc3Q6OnVpbnRtYXhfdD46OmRpZ2l0cyAtIDEKLSAgICAgICAg
LSBkZXRhaWw6OmludGVnZXJfbG9nMihtKTsKLQotICAgIGEgPDw9IHNoaWZ0OwotICAgIG0gPDw9
IHNoaWZ0OwotCi0gICAgZGlnaXRfdCBwcm9kdWN0WzRdID0geyAwLCAwLCAwLCAwIH07Ci0gICAg
ZGlnaXRfdCBhX1syXSA9IHsgZGlnaXRfdChhICYgbWFzayksIGRpZ2l0X3QoKGEgPj4gYml0cykg
JiBtYXNrKSB9OwotICAgIGRpZ2l0X3QgYl9bMl0gPSB7IGRpZ2l0X3QoYiAmIG1hc2spLCBkaWdp
dF90KChiID4+IGJpdHMpICYgbWFzaykgfTsKLSAgICBkaWdpdF90IG1fWzJdID0geyBkaWdpdF90
KG0gJiBtYXNrKSwgZGlnaXRfdCgobSA+PiBiaXRzKSAmIG1hc2spIH07Ci0KLSAgICAvLyBtdWx0
aXBseSBhICogYgotICAgIGZvcihpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICAgICAgZGln
aXRfdCBjYXJyeSA9IDA7Ci0gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCAyOyArK2opIHsKLSAg
ICAgICAgICAgIDo6Ym9vc3Q6OnVpbnQ2NF90IHRlbXAgPSA6OmJvb3N0Ojp1aW50bWF4X3QoYV9b
aV0pICogYl9bal0gKwotICAgICAgICAgICAgICAgIGNhcnJ5ICsgcHJvZHVjdFtpICsgal07Ci0g
ICAgICAgICAgICBwcm9kdWN0W2kgKyBqXSA9IGRpZ2l0X3QodGVtcCAmIG1hc2spOwotICAgICAg
ICAgICAgY2FycnkgPSBkaWdpdF90KHRlbXAgPj4gYml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYoY2FycnkgIT0gMCkgewotICAgICAgICAgICAgcHJvZHVjdFtpICsgMl0gKz0gY2Fycnk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBkaWdpdF90IHF1b3RpZW50WzJdOwotCi0gICAgaWYobSA9
PSAwKSB7Ci0gICAgICAgIGRpdl90IHJlc3VsdCA9IHsKLSAgICAgICAgICAgICgoOjpib29zdDo6
dWludG1heF90KHByb2R1Y3RbM10pIDw8IGJpdHMpIHwgcHJvZHVjdFsyXSksCi0gICAgICAgICAg
ICAoKDo6Ym9vc3Q6OnVpbnRtYXhfdChwcm9kdWN0WzFdKSA8PCBiaXRzKSB8IHByb2R1Y3RbMF0p
ID4+IHNoaWZ0LAotICAgICAgICB9OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQot
ICAgIC8vIGRpdmlkZSBwcm9kdWN0IC8gbQotICAgIGZvcihpbnQgaSA9IDM7IGkgPj0gMjsgLS1p
KSB7Ci0gICAgICAgIDo6Ym9vc3Q6OnVpbnRtYXhfdCB0ZW1wID0KLSAgICAgICAgICAgIDo6Ym9v
c3Q6OnVpbnRtYXhfdChwcm9kdWN0W2ldKSA8PCBiaXRzIHwgcHJvZHVjdFtpIC0gMV07Ci0KLSAg
ICAgICAgZGlnaXRfdCBxID0gZGlnaXRfdCgocHJvZHVjdFtpXSA9PSBtX1sxXSkgPyBtYXNrIDog
dGVtcCAvIG1fWzFdKTsKLQotICAgICAgICA6OmJvb3N0Ojp1aW50bWF4X3QgcmVtID0KLSAgICAg
ICAgICAgICgodGVtcCAtIDo6Ym9vc3Q6OnVpbnRtYXhfdChxKSAqIG1fWzFdKSA8PCBiaXRzKSAr
IHByb2R1Y3RbaSAtIDJdOwotCi0gICAgICAgIDo6Ym9vc3Q6OnVpbnRtYXhfdCBkaWZmID0gbV9b
MF0gKiA6OmJvb3N0Ojp1aW50bWF4X3QocSk7Ci0KLSAgICAgICAgaW50IGVycm9yID0gMDsKLSAg
ICAgICAgaWYoZGlmZiA+IHJlbSkgewotICAgICAgICAgICAgaWYoZGlmZiAtIHJlbSA+IG0pIHsK
LSAgICAgICAgICAgICAgICBlcnJvciA9IDI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGVycm9yID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBx
IC09IGVycm9yOwotICAgICAgICByZW0gPSByZW0gKyBlcnJvciAqIG0gLSBkaWZmOwotCi0gICAg
ICAgIHF1b3RpZW50W2kgLSAyXSA9IHE7Ci0gICAgICAgIHByb2R1Y3RbaV0gPSAwOwotICAgICAg
ICBwcm9kdWN0W2ktMV0gPSBzdGF0aWNfY2FzdDxkaWdpdF90PigocmVtID4+IGJpdHMpICYgbWFz
ayk7Ci0gICAgICAgIHByb2R1Y3RbaS0yXSA9IHN0YXRpY19jYXN0PGRpZ2l0X3Q+KHJlbSAmIG1h
c2spOwotICAgIH0KLQotICAgIGRpdl90IHJlc3VsdCA9IHsKLSAgICAgICAgKCg6OmJvb3N0Ojp1
aW50bWF4X3QocXVvdGllbnRbMV0pIDw8IGJpdHMpIHwgcXVvdGllbnRbMF0pLAotICAgICAgICAo
KDo6Ym9vc3Q6OnVpbnRtYXhfdChwcm9kdWN0WzFdKSA8PCBiaXRzKSB8IHByb2R1Y3RbMF0pID4+
IHNoaWZ0LAotICAgIH07Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIGJvb3N0Ojp1
aW50bWF4X3QgbXVsZGl2KGJvb3N0Ojp1aW50bWF4X3QgYSwgYm9vc3Q6OnVpbnRtYXhfdCBiLCBi
b29zdDo6dWludG1heF90IG0pCi17IHJldHVybiBkZXRhaWw6Om11bGRpdm1vZChhLCBiLCBtKS5x
dW90aWVudDsgfQotCi1pbmxpbmUgYm9vc3Q6OnVpbnRtYXhfdCBtdWxtb2QoYm9vc3Q6OnVpbnRt
YXhfdCBhLCBib29zdDo6dWludG1heF90IGIsIGJvb3N0Ojp1aW50bWF4X3QgbSkKLXsgcmV0dXJu
IGRldGFpbDo6bXVsZGl2bW9kKGEsIGIsIG0pLnJlbWFpbmRlcjsgfQotCi19IC8vIG5hbWVzcGFj
ZSBkZXRhaWwKLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQot
I2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvZW5hYmxlX3dhcm5pbmdzLmhwcD4KLQotI2Vu
ZGlmIC8vIEJPT1NUX1JBTkRPTV9ERVRBSUxfTEFSR0VfQVJJVEhNRVRJQ19IUFAKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9kZXRh
aWwvb3BlcmF0b3JzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3JhbmRvbS9kZXRhaWwvb3BlcmF0b3JzLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNTk3MzQzYzkwNzA3NDlhNDdlYjJkYzY4OWQzNDA2ZDRkMzlhYTE0NC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZGV0YWlsL29wZXJhdG9ycy5ocHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKiBib29zdCByYW5kb20vZGV0YWlsL29wZXJhdG9y
cy5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgU3RldmVuIFdhdGFuYWJlIDIwMTAt
MjAxMQotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZl
cnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICoKLSAq
IFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRp
bmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKi8KLQotI2lmbmRlZiBCT09TVF9SQU5E
T01fREVUQUlMX09QRVJBVE9SU19IUFAKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJTF9PUEVS
QVRPUlNfSFBQCi0KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2NvbmZpZy5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvZGV0YWlsL3dvcmthcm91bmQuaHBwPgotCi0jaWYgQk9PU1RfV09SS0FS
T1VORChCT09TVF9NU1ZDLCA8PSAxMzEwKSAgIFwKLSAgICB8fCBCT09TVF9XT1JLQVJPVU5EKF9f
U1VOUFJPX0NDLCBCT09TVF9URVNURURfQVQoMHg1MTAwKSkKLQotI2RlZmluZSBCT09TVF9SQU5E
T01fREVUQUlMX09TVFJFQU1fT1BFUkFUT1Iob3MsIFQsIHQpICAgICAgICAgICAgICAgICAgXAot
ICAgIHRlbXBsYXRlPGNsYXNzIENoYXJULCBjbGFzcyBUcmFpdHM+ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08Q2hhclQsVHJh
aXRzPiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG9wZXJhdG9yPDwoc3RkOjpi
YXNpY19vc3RyZWFtPENoYXJULFRyYWl0cz4mIG9zLCBjb25zdCBUJiB0KSB7ICAgICAgXAotICAg
ICAgICB0LnByaW50KG9zLCB0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gb3M7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHRl
bXBsYXRlPGNsYXNzIENoYXJULCBjbGFzcyBUcmFpdHM+ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIHN0YXRpYyBzdGQ6OmJhc2ljX29zdHJlYW08Q2hhclQsVHJhaXRzPiYg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHByaW50KHN0ZDo6YmFzaWNfb3N0cmVh
bTxDaGFyVCxUcmFpdHM+JiBvcywgY29uc3QgVCYgdCkKLQotI2RlZmluZSBCT09TVF9SQU5ET01f
REVUQUlMX0lTVFJFQU1fT1BFUkFUT1IoaXMsIFQsIHQpICAgICAgICAgICAgICAgICAgXAotICAg
IHRlbXBsYXRlPGNsYXNzIENoYXJULCBjbGFzcyBUcmFpdHM+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhclQsVHJhaXRz
PiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNp
Y19pc3RyZWFtPENoYXJULFRyYWl0cz4mIGlzLCBUJiB0KSB7ICAgICAgICAgICAgXAotICAgICAg
ICB0LnJlYWQoaXMsIHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICByZXR1cm4gaXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHRlbXBs
YXRlPGNsYXNzIENoYXJULCBjbGFzcyBUcmFpdHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHN0YXRpYyBzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhclQsVHJhaXRzPiYgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJlYWQoc3RkOjpiYXNpY19pc3RyZWFtPENo
YXJULFRyYWl0cz4mIGlzLCBUJiB0KQotCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19CT1JMQU5E
Q19fKQotCi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IoVCwg
bGhzLCByaHMpICAgICAgICAgICAgICBcCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQmIHJo
cykgY29uc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyByZXR1cm4g
VDo6aXNfZXF1YWwoKnRoaXMsIHJocyk7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgc3RhdGljIGJvb2wgaXNfZXF1YWwoY29uc3QgVCYgbGhzLCBjb25zdCBUJiByaHMp
Ci0KLSNkZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKFQpICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgcmhzKSBj
b25zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7IHJldHVybiAhVDo6
aXNfZXF1YWwoKnRoaXMsIHJocyk7IH0KLQotI2VuZGlmCi0KLSNpZm5kZWYgQk9PU1RfUkFORE9N
X0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SCi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9ERVRBSUxfT1NU
UkVBTV9PUEVSQVRPUihvcywgVCwgdCkgICAgICAgICAgICAgICAgICBcCi0gICAgdGVtcGxhdGU8
Y2xhc3MgQ2hhclQsIGNsYXNzIFRyYWl0cz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyVCxUcmFpdHM+JiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08
Q2hhclQsVHJhaXRzPiYgb3MsIGNvbnN0IFQmIHQpCi0jZW5kaWYKLQotI2lmbmRlZiBCT09TVF9S
QU5ET01fREVUQUlMX0lTVFJFQU1fT1BFUkFUT1IKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJ
TF9JU1RSRUFNX09QRVJBVE9SKGlzLCBULCB0KSAgICAgICAgICAgICAgICAgIFwKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBDaGFyVCwgY2xhc3MgVHJhaXRzPiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPENoYXJULFRyYWl0cz4mICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0
cmVhbTxDaGFyVCxUcmFpdHM+JiBpcywgVCYgdCkKLSNlbmRpZgotCi0jaWZuZGVmIEJPT1NUX1JB
TkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJ
TF9FUVVBTElUWV9PUEVSQVRPUihULCBsaHMsIHJocykgICAgICAgICAgICAgIFwKLSAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQmIGxocywgY29uc3QgVCYgcmhzKQotI2VuZGlmCi0K
LSNpZm5kZWYgQk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SCi0jZGVmaW5l
IEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5FUVVBTElUWV9PUEVSQVRPUihUKSAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUJiBsaHMsIGNvbnN0
IFQmIHJocykgICAgICAgICAgICAgICAgICBcCi0gICAgeyByZXR1cm4gIShsaHMgPT0gcmhzKTsg
fQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2RldGFpbC9wb2x5bm9taWFsLmhwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9kZXRhaWwvcG9seW5vbWlh
bC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YzRiMjY5ZjFmYTllYjVmZGEz
M2FjOGU4MzVjNThlZjk0NGVmNjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFu
ZG9tL2RldGFpbC9wb2x5bm9taWFsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4NCArMCwwIEBA
Ci0vKiBib29zdCByYW5kb20vZGV0YWlsL3BvbHlub21pYWwuaHBwIGhlYWRlciBmaWxlCi0gKgot
ICogQ29weXJpZ2h0IFN0ZXZlbiBXYXRhbmFiZSAyMDE0Ci0gKiBEaXN0cmlidXRlZCB1bmRlciB0
aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZv
ciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotICoKLSAqICRJ
ZCQKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9ERVRBSUxfUE9MWU5PTUlBTF9IUFAKLSNk
ZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJTF9QT0xZTk9NSUFMX0hQUAotCi0jaW5jbHVkZSA8Y3N0
ZGRlZj4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPGFs
Z29yaXRobT4KLSNpbmNsdWRlIDxib29zdC9hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2Nz
dGRpbnQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci1uYW1l
c3BhY2UgZGV0YWlsIHsKLQotY2xhc3MgcG9seW5vbWlhbF9vcHMgewotcHVibGljOgotICAgIHR5
cGVkZWYgdW5zaWduZWQgbG9uZyBkaWdpdF90OwotCi0gICAgc3RhdGljIHZvaWQgYWRkKHN0ZDo6
c2l6ZV90IHNpemUsIGNvbnN0IGRpZ2l0X3QgKiBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGRpZ2l0X3QgKiByaHMsIGRpZ2l0X3QgKiBvdXRwdXQpCi0gICAgewotICAgICAgICBm
b3Ioc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIG91dHB1
dFtpXSA9IGxoc1tpXSBeIHJoc1tpXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2
b2lkIGFkZF9zaGlmdGVkX2lucGxhY2Uoc3RkOjpzaXplX3Qgc2l6ZSwgY29uc3QgZGlnaXRfdCAq
IGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0X3QgKiBvdXRw
dXQsIHN0ZDo6c2l6ZV90IHNoaWZ0KQotICAgIHsKLSAgICAgICAgaWYoc2hpZnQgPT0gMCkgewot
ICAgICAgICAgICAgYWRkKHNpemUsIGxocywgb3V0cHV0LCBvdXRwdXQpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHN0ZDo6c2l6ZV90IGJpdHMgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGRpZ2l0X3Q+OjpkaWdpdHM7Ci0gICAgICAgIGRpZ2l0X3QgcHJldiA9IDA7Ci0g
ICAgICAgIGZvcihzdGQ6OnNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAg
ICAgZGlnaXRfdCB0bXAgPSBsaHNbaV07Ci0gICAgICAgICAgICBvdXRwdXRbaV0gXj0gKHRtcCA8
PCBzaGlmdCkgfCAocHJldiA+PiAoYml0cy1zaGlmdCkpOwotICAgICAgICAgICAgcHJldiA9IHRt
cDsKLSAgICAgICAgfQotICAgICAgICBvdXRwdXRbc2l6ZV0gXj0gKHByZXYgPj4gKGJpdHMtc2hp
ZnQpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBtdWx0aXBseV9zaW1wbGUoc3RkOjpzaXpl
X3Qgc2l6ZSwgY29uc3QgZGlnaXRfdCAqIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZGlnaXRfdCAqIHJocywgZGlnaXRfdCAqIG91dHB1dCkKLSAgICB7Ci0g
ICAgICAgIHN0ZDo6c2l6ZV90IGJpdHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRpZ2l0X3Q+Ojpk
aWdpdHM7Ci0gICAgICAgIGZvcihzdGQ6OnNpemVfdCBpID0gMDsgaSA8IDIqc2l6ZTsgKytpKSB7
Ci0gICAgICAgICAgICBvdXRwdXRbaV0gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGZvcihzdGQ6
OnNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgZm9yKHN0ZDo6c2l6
ZV90IGogPSAwOyBqIDwgYml0czsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYoKGxoc1tpXSAm
IChkaWdpdF90KDEpIDw8IGopKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZF9zaGlm
dGVkX2lucGxhY2Uoc2l6ZSwgcmhzLCBvdXRwdXQgKyBpLCBqKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBtZW1vcnkgcmVxdWly
ZW1lbnRzOiAoc2l6ZSAtIGN1dG9mZikgKiA0ICsgbmV4dF9zbWFsbGVyCi0gICAgc3RhdGljIHZv
aWQgbXVsdGlwbHlfa2FyYXRzdWJhKHN0ZDo6c2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZGlnaXRfdCAqIGxocywgY29uc3QgZGlnaXRfdCAqIHJocywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdF90ICogb3V0cHV0KQotICAgIHsK
LSAgICAgICAgaWYoc2l6ZSA8IDY0KSB7Ci0gICAgICAgICAgICBtdWx0aXBseV9zaW1wbGUoc2l6
ZSwgbGhzLCByaHMsIG91dHB1dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgLy8gc3BsaXQgaW4gaGFsZgotICAgICAgICBzdGQ6OnNpemVfdCBjdXRvZmYgPSBzaXpl
LzI7Ci0gICAgICAgIG11bHRpcGx5X2thcmF0c3ViYShjdXRvZmYsIGxocywgcmhzLCBvdXRwdXQp
OwotICAgICAgICBtdWx0aXBseV9rYXJhdHN1YmEoc2l6ZSAtIGN1dG9mZiwgbGhzICsgY3V0b2Zm
LCByaHMgKyBjdXRvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKyBj
dXRvZmYqMik7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPGRpZ2l0X3Q+IGxvY2FsMShzaXplIC0gY3V0
b2ZmKTsKLSAgICAgICAgc3RkOjp2ZWN0b3I8ZGlnaXRfdD4gbG9jYWwyKHNpemUgLSBjdXRvZmYp
OwotICAgICAgICAvLyBjb21iaW5lIHRoZSBkaWdpdHMgZm9yIHRoZSBpbm5lciBtdWx0aXBseQot
ICAgICAgICBhZGQoY3V0b2ZmLCBsaHMsIGxocyArIGN1dG9mZiwgJmxvY2FsMVswXSk7Ci0gICAg
ICAgIGlmKHNpemUgJiAxKSBsb2NhbDFbY3V0b2ZmXSA9IGxoc1tzaXplIC0gMV07Ci0gICAgICAg
IGFkZChjdXRvZmYsIHJocyArIGN1dG9mZiwgcmhzLCAmbG9jYWwyWzBdKTsKLSAgICAgICAgaWYo
c2l6ZSAmIDEpIGxvY2FsMltjdXRvZmZdID0gcmhzW3NpemUgLSAxXTsKLSAgICAgICAgc3RkOjp2
ZWN0b3I8ZGlnaXRfdD4gbG9jYWwzKChzaXplIC0gY3V0b2ZmKSAqIDIpOwotICAgICAgICBtdWx0
aXBseV9rYXJhdHN1YmEoc2l6ZSAtIGN1dG9mZiwgJmxvY2FsMVswXSwgJmxvY2FsMlswXSwgJmxv
Y2FsM1swXSk7Ci0gICAgICAgIGFkZChjdXRvZmYgKiAyLCBvdXRwdXQsICZsb2NhbDNbMF0sICZs
b2NhbDNbMF0pOwotICAgICAgICBhZGQoKHNpemUgLSBjdXRvZmYpICogMiwgb3V0cHV0ICsgY3V0
b2ZmKjIsICZsb2NhbDNbMF0sICZsb2NhbDNbMF0pOwotICAgICAgICAvLyBGaW5hbGx5LCBhZGQg
dGhlIGlubmVyIHJlc3VsdAotICAgICAgICBhZGQoKHNpemUgLSBjdXRvZmYpICogMiwgb3V0cHV0
ICsgY3V0b2ZmLCAmbG9jYWwzWzBdLCBvdXRwdXQgKyBjdXRvZmYpOwotICAgIH0KLSAgICAKLSAg
ICBzdGF0aWMgdm9pZCBtdWx0aXBseV9hZGRfa2FyYXRzdWJhKHN0ZDo6c2l6ZV90IHNpemUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWdpdF90ICogbGhz
LCBjb25zdCBkaWdpdF90ICogcmhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGlnaXRfdCAqIG91dHB1dCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPGRpZ2l0
X3Q+IGJ1ZihzaXplICogMik7Ci0gICAgICAgIG11bHRpcGx5X2thcmF0c3ViYShzaXplLCBsaHMs
IHJocywgJmJ1ZlswXSk7Ci0gICAgICAgIGFkZChzaXplICogMiwgJmJ1ZlswXSwgb3V0cHV0LCBv
dXRwdXQpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIG11bHRpcGx5KGNvbnN0IGRpZ2l0X3Qg
KiBsaHMsIHN0ZDo6c2l6ZV90IGxoc19zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGRpZ2l0X3QgKiByaHMsIHN0ZDo6c2l6ZV90IHJoc19zaXplLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZ2l0X3QgKiBvdXRwdXQpCi0gICAgewotICAgICAgICBzdGQ6OmZpbGxfbihv
dXRwdXQsIGxoc19zaXplICsgcmhzX3NpemUsIGRpZ2l0X3QoMCkpOwotICAgICAgICBtdWx0aXBs
eV9hZGQobGhzLCBsaHNfc2l6ZSwgcmhzLCByaHNfc2l6ZSwgb3V0cHV0KTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgdm9pZCBtdWx0aXBseV9hZGQoY29uc3QgZGlnaXRfdCAqIGxocywgc3RkOjpzaXpl
X3QgbGhzX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZ2l0X3Qg
KiByaHMsIHN0ZDo6c2l6ZV90IHJoc19zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkaWdpdF90ICogb3V0cHV0KQotICAgIHsKLSAgICAgICAgLy8gc3BsaXQgaW50byBwaWVjZXMg
dGhhdCBjYW4gYmUgcGFzc2VkIHRvCi0gICAgICAgIC8vIGthcmF0c3ViYSBtdWx0aXBseS4KLSAg
ICAgICAgd2hpbGUobGhzX3NpemUgIT0gMCkgewotICAgICAgICAgICAgaWYobGhzX3NpemUgPCBy
aHNfc2l6ZSkgewotICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChsaHMsIHJocyk7Ci0gICAgICAg
ICAgICAgICAgc3RkOjpzd2FwKGxoc19zaXplLCByaHNfc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG11bHRpcGx5X2FkZF9rYXJhdHN1YmEocmhzX3NpemUs
IGxocywgcmhzLCBvdXRwdXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsaHMgKz0gcmhz
X3NpemU7Ci0gICAgICAgICAgICBsaHNfc2l6ZSAtPSByaHNfc2l6ZTsKLSAgICAgICAgICAgIG91
dHB1dCArPSByaHNfc2l6ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNv
cHlfYml0cyhjb25zdCBkaWdpdF90ICogeCwgc3RkOjpzaXplX3QgbG93LCBzdGQ6OnNpemVfdCBo
aWdoLAotICAgICAgICAgICAgICAgICAgIGRpZ2l0X3QgKiBvdXQpCi0gICAgewotICAgICAgICBj
b25zdCBzdGQ6OnNpemVfdCBiaXRzID0gc3RkOjpudW1lcmljX2xpbWl0czxkaWdpdF90Pjo6ZGln
aXRzOwotICAgICAgICBzdGQ6OnNpemVfdCBvZmZzZXQgPSBsb3cvYml0czsKLSAgICAgICAgeCAr
PSBvZmZzZXQ7Ci0gICAgICAgIGxvdyAtPSBvZmZzZXQqYml0czsKLSAgICAgICAgaGlnaCAtPSBv
ZmZzZXQqYml0czsKLSAgICAgICAgc3RkOjpzaXplX3QgbiA9IChoaWdoLWxvdykvYml0czsKLSAg
ICAgICAgaWYobG93ID09IDApIHsKLSAgICAgICAgICAgIGZvcihzdGQ6OnNpemVfdCBpID0gMDsg
aSA8IG47ICsraSkgewotICAgICAgICAgICAgICAgIG91dFtpXSA9IHhbaV07Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3Ioc3RkOjpzaXplX3QgaSA9IDA7
IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgICAgICBvdXRbaV0gPSAoeFtpXSA+PiBsb3cpIHwg
KHhbaSsxXSA8PCAoYml0cy1sb3cpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBpZigoaGlnaC1sb3cpJWJpdHMpIHsKLSAgICAgICAgICAgIGRpZ2l0X3QgbG93X21hc2sgPSAo
ZGlnaXRfdCgxKSA8PCAoKGhpZ2gtbG93KSViaXRzKSkgLSAxOwotICAgICAgICAgICAgZGlnaXRf
dCByZXN1bHQgPSAoeFtuXSA+PiBsb3cpOwotICAgICAgICAgICAgaWYobG93ICE9IDAgJiYgKG4r
MSkqYml0cyA8IGhpZ2gpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgfD0gKHhbbisxXSA8PCAo
Yml0cy1sb3cpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dFtuXSA9IChyZXN1bHQg
JiBsb3dfbWFzayk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzaGlmdF9s
ZWZ0KGRpZ2l0X3QgKiB2YWwsIHN0ZDo6c2l6ZV90IHNpemUsIHN0ZDo6c2l6ZV90IHNoaWZ0KQot
ICAgIHsKLSAgICAgICAgY29uc3Qgc3RkOjpzaXplX3QgYml0cyA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8ZGlnaXRfdD46OmRpZ2l0czsKLSAgICAgICAgQk9PU1RfQVNTRVJUKHNoaWZ0ID4gMCk7Ci0g
ICAgICAgIEJPT1NUX0FTU0VSVChzaGlmdCA8IGJpdHMpOwotICAgICAgICBkaWdpdF90IHByZXYg
PSAwOwotICAgICAgICBmb3Ioc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgICAgIGRpZ2l0X3QgdG1wID0gdmFsW2ldOwotICAgICAgICAgICAgdmFsW2ldID0gKHBy
ZXYgPj4gKGJpdHMgLSBzaGlmdCkpIHwgKHZhbFtpXSA8PCBzaGlmdCk7Ci0gICAgICAgICAgICBw
cmV2ID0gdG1wOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGRpZ2l0X3Qgc3FyKGRp
Z2l0X3QgdmFsKSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c2l6ZV90IGJpdHMgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGRpZ2l0X3Q+OjpkaWdpdHM7Ci0gICAgICAgIGRpZ2l0X3QgbWFzayA9IChkaWdp
dF90KDEpIDw8IGJpdHMvMikgLSAxOwotICAgICAgICBmb3Ioc3RkOjpzaXplX3QgaSA9IGJpdHM7
IGkgPiAxOyBpIC89IDIpIHsKLSAgICAgICAgICAgIHZhbCA9ICgodmFsICYgfm1hc2spIDw8IGkv
MikgfCAodmFsICYgbWFzayk7Ci0gICAgICAgICAgICBtYXNrID0gbWFzayAmIChtYXNrID4+IGkv
NCk7Ci0gICAgICAgICAgICBtYXNrID0gbWFzayB8IChtYXNrIDw8IGkvMik7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHZhbDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzcXIoZGlnaXRf
dCAqIHZhbCwgc3RkOjpzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c2l6
ZV90IGJpdHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRpZ2l0X3Q+OjpkaWdpdHM7Ci0gICAgICAg
IGRpZ2l0X3QgbWFzayA9IChkaWdpdF90KDEpIDw8IGJpdHMvMikgLSAxOwotICAgICAgICBmb3Io
c3RkOjpzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGRpZ2l0X3Qg
eCA9IHZhbFtzaXplIC0gaSAtIDFdOwotICAgICAgICAgICAgdmFsWyhzaXplIC0gaSAtIDEpICog
Ml0gPSBzcXIoeCAmIG1hc2spOwotICAgICAgICAgICAgdmFsWyhzaXplIC0gaSAtIDEpICogMiAr
IDFdID0gc3FyKHggPj4gYml0cy8yKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIG9wdGlt
aXplZCBmb3IgdGhlIGNhc2Ugd2hlbiB0aGUgbW9kdWx1cyBoYXMgZmV3IGJpdHMgc2V0LgotICAg
IHN0cnVjdCBzcGFyc2VfbW9kIHsKLSAgICAgICAgc3BhcnNlX21vZChjb25zdCBkaWdpdF90ICog
ZGl2aXNvciwgc3RkOjpzaXplX3QgZGl2aXNvcl9iaXRzKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb25zdCBzdGQ6OnNpemVfdCBiaXRzID0gc3RkOjpudW1lcmljX2xpbWl0czxkaWdpdF90Pjo6
ZGlnaXRzOwotICAgICAgICAgICAgX3JlbWFpbmRlcl9iaXRzID0gZGl2aXNvcl9iaXRzIC0gMTsK
LSAgICAgICAgICAgIGZvcihzdGQ6OnNpemVfdCBpID0gMDsgaSA8IGRpdmlzb3JfYml0czsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgaWYoZGl2aXNvcltpL2JpdHNdICYgKGRpZ2l0X3QoMSkgPDwg
aSViaXRzKSkgewotICAgICAgICAgICAgICAgICAgICBfYml0X2luZGljZXMucHVzaF9iYWNrKGkp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEJPT1NUX0FT
U0VSVChfYml0X2luZGljZXMuYmFjaygpID09IGRpdmlzb3JfYml0cyAtIDEpOwotICAgICAgICAg
ICAgX2JpdF9pbmRpY2VzLnBvcF9iYWNrKCk7Ci0gICAgICAgICAgICBpZihfYml0X2luZGljZXMu
ZW1wdHkoKSkgewotICAgICAgICAgICAgICAgIF9ibG9ja19iaXRzID0gZGl2aXNvcl9iaXRzOwot
ICAgICAgICAgICAgICAgIF9sb3dlcl9iaXRzID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgX2Jsb2NrX2JpdHMgPSBkaXZpc29yX2JpdHMgLSBfYml0X2luZGljZXMu
YmFjaygpIC0gMTsKLSAgICAgICAgICAgICAgICBfbG93ZXJfYml0cyA9IF9iaXRfaW5kaWNlcy5i
YWNrKCkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBfcGFy
dGlhbF9xdW90aWVudC5yZXNpemUoKF9ibG9ja19iaXRzICsgYml0cyAtIDEpL2JpdHMpOwotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQgb3BlcmF0b3IoKShkaWdpdF90ICogZGl2aWRlbmQsIHN0ZDo6
c2l6ZV90IGRpdmlkZW5kX2JpdHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0ZDo6
c2l6ZV90IGJpdHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRpZ2l0X3Q+OjpkaWdpdHM7Ci0gICAg
ICAgICAgICB3aGlsZShkaXZpZGVuZF9iaXRzID4gX3JlbWFpbmRlcl9iaXRzKSB7Ci0gICAgICAg
ICAgICAgICAgc3RkOjpzaXplX3QgYmxvY2tfc3RhcnQgPSAoc3RkOjptYXgpKGRpdmlkZW5kX2Jp
dHMgLSBfYmxvY2tfYml0cywgX3JlbWFpbmRlcl9iaXRzKTsKLSAgICAgICAgICAgICAgICBzdGQ6
OnNpemVfdCBibG9ja19zaXplID0gKGRpdmlkZW5kX2JpdHMgLSBibG9ja19zdGFydCArIGJpdHMg
LSAxKSAvIGJpdHM7Ci0gICAgICAgICAgICAgICAgY29weV9iaXRzKGRpdmlkZW5kLCBibG9ja19z
dGFydCwgZGl2aWRlbmRfYml0cywgJl9wYXJ0aWFsX3F1b3RpZW50WzBdKTsKLSAgICAgICAgICAg
ICAgICBmb3Ioc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBfYml0X2luZGljZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzaXplX3QgcG9zID0gX2JpdF9pbmRpY2VzW2ld
ICsgYmxvY2tfc3RhcnQgLSBfcmVtYWluZGVyX2JpdHM7Ci0gICAgICAgICAgICAgICAgICAgIGFk
ZF9zaGlmdGVkX2lucGxhY2UoYmxvY2tfc2l6ZSwgJl9wYXJ0aWFsX3F1b3RpZW50WzBdLCBkaXZp
ZGVuZCArIHBvcy9iaXRzLCBwb3MlYml0cyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGFkZF9zaGlmdGVkX2lucGxhY2UoYmxvY2tfc2l6ZSwgJl9wYXJ0aWFsX3F1b3RpZW50
WzBdLCBkaXZpZGVuZCArIGJsb2NrX3N0YXJ0L2JpdHMsIGJsb2NrX3N0YXJ0JWJpdHMpOwotICAg
ICAgICAgICAgICAgIGRpdmlkZW5kX2JpdHMgPSBibG9ja19zdGFydDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBzdGQ6OnZlY3RvcjxkaWdpdF90PiBfcGFydGlhbF9xdW90aWVu
dDsKLSAgICAgICAgc3RkOjpzaXplX3QgX3JlbWFpbmRlcl9iaXRzOwotICAgICAgICBzdGQ6OnNp
emVfdCBfYmxvY2tfYml0czsKLSAgICAgICAgc3RkOjpzaXplX3QgX2xvd2VyX2JpdHM7Ci0gICAg
ICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2l6ZV90PiBfYml0X2luZGljZXM7Ci0gICAgfTsKLQotICAg
IC8vIGJhc2Ugc2hvdWxkIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGJpdHMgYXMgbW9kCi0gICAg
Ly8gYmFzZSwgYW5kIG1vZCBzaG91bGQgYm90aCBiZSBhYmxlIHRvIGhvbGQgYSBwb3dlcgotICAg
IC8vIG9mIDIgPj0gbW9kX2JpdHMuICBvdXQgbmVlZHMgdG8gYmUgdHdpY2UgYXMgbGFyZ2UuCi0g
ICAgc3RhdGljIHZvaWQgbW9kX3Bvd194KGJvb3N0Ojp1aW50bWF4X3QgZXhwb25lbnQsIGNvbnN0
IGRpZ2l0X3QgKiBtb2QsIHN0ZDo6c2l6ZV90IG1vZF9iaXRzLCBkaWdpdF90ICogb3V0KQotICAg
IHsKLSAgICAgICAgY29uc3Qgc3RkOjpzaXplX3QgYml0cyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZGlnaXRfdD46OmRpZ2l0czsKLSAgICAgICAgY29uc3Qgc3RkOjpzaXplX3QgbiA9IChtb2RfYml0
cyArIGJpdHMgLSAxKSAvIGJpdHM7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c2l6ZV90IGhpZ2hiaXQg
PSBtb2RfYml0cyAtIDE7Ci0gICAgICAgIGlmKGV4cG9uZW50ID09IDApIHsKLSAgICAgICAgICAg
IG91dFswXSA9IDE7Ci0gICAgICAgICAgICBzdGQ6OmZpbGxfbihvdXQgKyAxLCBuIC0gMSwgZGln
aXRfdCgwKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYm9vc3Q6
OnVpbnRtYXhfdCBpID0gc3RkOjpudW1lcmljX2xpbWl0czxib29zdDo6dWludG1heF90Pjo6ZGln
aXRzIC0gMTsKLSAgICAgICAgd2hpbGUoKChib29zdDo6dWludG1heF90KDEpIDw8IGkpICYgZXhw
b25lbnQpID09IDApIHsKLSAgICAgICAgICAgIC0taTsKLSAgICAgICAgfQotICAgICAgICBvdXRb
MF0gPSAyOwotICAgICAgICBzdGQ6OmZpbGxfbihvdXQgKyAxLCBuIC0gMSwgZGlnaXRfdCgwKSk7
Ci0gICAgICAgIHNwYXJzZV9tb2QgbShtb2QsIG1vZF9iaXRzKTsKLSAgICAgICAgd2hpbGUoaS0t
KSB7Ci0gICAgICAgICAgICBzcXIob3V0LCBuKTsKLSAgICAgICAgICAgIG0ob3V0LCAyICogbW9k
X2JpdHMgLSAxKTsKLSAgICAgICAgICAgIGlmKChib29zdDo6dWludG1heF90KDEpIDw8IGkpICYg
ZXhwb25lbnQpIHsKLSAgICAgICAgICAgICAgICBzaGlmdF9sZWZ0KG91dCwgbiwgMSk7Ci0gICAg
ICAgICAgICAgICAgaWYob3V0W2hpZ2hiaXQgLyBiaXRzXSAmIChkaWdpdF90KDEpIDw8IGhpZ2hi
aXQlYml0cykpCi0gICAgICAgICAgICAgICAgICAgIGFkZChuLCBvdXQsIG1vZCwgb3V0KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX07Ci0KLWNsYXNzIHBvbHlub21pYWwKLXsK
LSAgICB0eXBlZGVmIHBvbHlub21pYWxfb3BzOjpkaWdpdF90IGRpZ2l0X3Q7Ci1wdWJsaWM6Ci0g
ICAgcG9seW5vbWlhbCgpIDogX3NpemUoMCkge30KLSAgICBjbGFzcyByZWZlcmVuY2UgewotICAg
IHB1YmxpYzoKLSAgICAgICAgcmVmZXJlbmNlKGRpZ2l0X3QgJnZhbHVlLCBpbnQgaWR4KQotICAg
ICAgICAgICAgOiBfdmFsdWUodmFsdWUpLCBfaWR4KGlkeCkge30KLSAgICAgICAgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuIChfdmFsdWUgJiAoZGlnaXRfdCgxKSA8PCBfaWR4KSkgIT0g
MDsgfQotICAgICAgICByZWZlcmVuY2UmIG9wZXJhdG9yPShib29sIGIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmKGIpIHsKLSAgICAgICAgICAgICAgICBfdmFsdWUgfD0gKGRpZ2l0X3QoMSkg
PDwgX2lkeCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIF92YWx1ZSAm
PSB+KGRpZ2l0X3QoMSkgPDwgX2lkeCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgICAgIH0KLSAgICAgICAgcmVmZXJlbmNlICZvcGVyYXRvcl49KGJvb2wg
YikKLSAgICAgICAgewotICAgICAgICAgICAgX3ZhbHVlIF49IChkaWdpdF90KGIpIDw8IF9pZHgp
OwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVmZXJl
bmNlICZvcGVyYXRvcj0oY29uc3QgcmVmZXJlbmNlICZvdGhlcikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuICp0aGlzID0gc3RhdGljX2Nhc3Q8Ym9vbD4ob3RoZXIpOwotICAgICAgICB9
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgZGlnaXRfdCAmX3ZhbHVlOwotICAgICAgICBpbnQgX2lk
eDsKLSAgICB9OwotICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKHN0ZDo6c2l6ZV90IGkpCi0gICAg
ewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgYml0cyA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZGlnaXRfdD46OmRpZ2l0czsKLSAgICAgICAgZW5zdXJlX2JpdChpKTsKLSAgICAgICAg
cmV0dXJuIHJlZmVyZW5jZShfc3RvcmFnZVtpL2JpdHNdLCBpJWJpdHMpOwotICAgIH0KLSAgICBi
b29sIG9wZXJhdG9yW10oc3RkOjpzaXplX3QgaSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBzdGQ6OnNpemVfdCBiaXRzID0gc3RkOjpudW1lcmljX2xpbWl0czxkaWdpdF90Pjo6
ZGlnaXRzOwotICAgICAgICBpZihpIDwgc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIChfc3Rv
cmFnZVtpL2JpdHNdICYgKGRpZ2l0X3QoMSkgPDwgKGklYml0cykpKSAhPSAwOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHN0ZDo6c2l6ZV90IHNp
emUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIF9zaXplOwotICAgIH0KLSAgICB2b2lk
IHJlc2l6ZShzdGQ6OnNpemVfdCBuKQotICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6
c2l6ZV90IGJpdHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRpZ2l0X3Q+OjpkaWdpdHM7Ci0gICAg
ICAgIF9zdG9yYWdlLnJlc2l6ZSgobiArIGJpdHMgLSAxKS9iaXRzKTsKLSAgICAgICAgLy8gY2xl
YXIgdGhlIGhpZ2ggb3JkZXIgYml0cyBpbiBjYXNlIHdlJ3JlIHNocmlua2luZy4KLSAgICAgICAg
aWYobiViaXRzKSB7Ci0gICAgICAgICAgICBfc3RvcmFnZS5iYWNrKCkgJj0gKChkaWdpdF90KDEp
IDw8IChuJWJpdHMpKSAtIDEpOwotICAgICAgICB9Ci0gICAgICAgIF9zaXplID0gbjsKLSAgICB9
Ci0gICAgZnJpZW5kIHBvbHlub21pYWwgb3BlcmF0b3IqKGNvbnN0IHBvbHlub21pYWwgJmxocywg
Y29uc3QgcG9seW5vbWlhbCAmcmhzKTsKLSAgICBmcmllbmQgcG9seW5vbWlhbCBtb2RfcG93X3go
Ym9vc3Q6OnVpbnRtYXhfdCBleHBvbmVudCwgcG9seW5vbWlhbCBtb2QpOwotcHJpdmF0ZToKLSAg
ICBzdGQ6OnZlY3Rvcjxwb2x5bm9taWFsX29wczo6ZGlnaXRfdD4gX3N0b3JhZ2U7Ci0gICAgc3Rk
OjpzaXplX3QgX3NpemU7Ci0gICAgdm9pZCBlbnN1cmVfYml0KHN0ZDo6c2l6ZV90IGkpCi0gICAg
ewotICAgICAgICBpZihpID49IHNpemUoKSkgewotICAgICAgICAgICAgcmVzaXplKGkgKyAxKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICB2b2lkIG5vcm1hbGl6ZSgpCi0gICAgewotICAgICAgICB3
aGlsZShzaXplKCkgJiYgKCp0aGlzKVtzaXplKCkgLSAxXSA9PSAwKQotICAgICAgICAgICAgcmVz
aXplKHNpemUoKSAtIDEpOwotICAgIH0KLX07Ci0KLWlubGluZSBwb2x5bm9taWFsIG9wZXJhdG9y
Kihjb25zdCBwb2x5bm9taWFsICZsaHMsIGNvbnN0IHBvbHlub21pYWwgJnJocykKLXsKLSAgICBw
b2x5bm9taWFsIHJlc3VsdDsKLSAgICByZXN1bHQuX3N0b3JhZ2UucmVzaXplKGxocy5fc3RvcmFn
ZS5zaXplKCkgKyByaHMuX3N0b3JhZ2Uuc2l6ZSgpKTsKLSAgICBwb2x5bm9taWFsX29wczo6bXVs
dGlwbHkoJmxocy5fc3RvcmFnZVswXSwgbGhzLl9zdG9yYWdlLnNpemUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJnJocy5fc3RvcmFnZVswXSwgcmhzLl9zdG9yYWdlLnNpemUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3VsdC5fc3RvcmFnZVswXSk7Ci0gICAg
cmVzdWx0Ll9zaXplID0gbGhzLl9zaXplICsgcmhzLl9zaXplOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLWlubGluZSBwb2x5bm9taWFsIG1vZF9wb3dfeChib29zdDo6dWludG1heF90IGV4cG9u
ZW50LCBwb2x5bm9taWFsIG1vZCkKLXsKLSAgICBwb2x5bm9taWFsIHJlc3VsdDsKLSAgICBtb2Qu
bm9ybWFsaXplKCk7Ci0gICAgc3RkOjpzaXplX3QgbW9kX3NpemUgPSBtb2Quc2l6ZSgpOwotICAg
IHJlc3VsdC5fc3RvcmFnZS5yZXNpemUobW9kLl9zdG9yYWdlLnNpemUoKSAqIDIpOwotICAgIHJl
c3VsdC5fc2l6ZSA9IG1vZC5zaXplKCkgKiAyOwotICAgIHBvbHlub21pYWxfb3BzOjptb2RfcG93
X3goZXhwb25lbnQsICZtb2QuX3N0b3JhZ2VbMF0sIG1vZF9zaXplLCAmcmVzdWx0Ll9zdG9yYWdl
WzBdKTsKLSAgICByZXN1bHQucmVzaXplKG1vZC5zaXplKCkgLSAxKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi19Ci19Ci19Ci0KLSNlbmRpZiAvLyBCT09TVF9SQU5ET01fREVUQUlMX1BPTFlO
T01JQUxfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9yYW5kb20vZGV0YWlsL3B0cl9oZWxwZXIuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2RldGFpbC9wdHJfaGVscGVyLmhwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFiOTgzZDkzNjcxYzJjM2EyNTUxNTJkZDQzOTdj
OTZhMjVlMjFkZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZGV0YWls
L3B0cl9oZWxwZXIuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyogYm9vc3Qg
cmFuZG9tL2RldGFpbC9wdHJfaGVscGVyLmhwcCBoZWFkZXIgZmlsZQotICoKLSAqIENvcHlyaWdo
dCBKZW5zIE1hdXJlciAyMDAyCi0gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdh
cmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2
ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotICoKLSAqICRJZCQKLSAqCi0gKi8KLQot
I2lmbmRlZiBCT09TVF9SQU5ET01fREVUQUlMX1BUUl9IRUxQRVJfSFBQCi0jZGVmaW5lIEJPT1NU
X1JBTkRPTV9ERVRBSUxfUFRSX0hFTFBFUl9IUFAKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5o
cHA+Ci0KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSByYW5kb20gewotbmFtZXNwYWNl
IGRldGFpbCB7Ci0KLS8vIHR5cGVfdHJhaXRzIGNvdWxkIGhlbHAgaGVyZSwgYnV0IEkgZG9uJ3Qg
d2FudCB0byBkZXBlbmQgb24gdHlwZV90cmFpdHMuCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0
IHB0cl9oZWxwZXIKLXsKLSAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7Ci0gIHR5cGVkZWYgVCYgcmVm
ZXJlbmNlX3R5cGU7Ci0gIHR5cGVkZWYgY29uc3QgVCYgcnZhbHVlX3R5cGU7Ci0gIHN0YXRpYyBy
ZWZlcmVuY2VfdHlwZSByZWYoVCYgcikgeyByZXR1cm4gcjsgfQotICBzdGF0aWMgY29uc3QgVCYg
cmVmKGNvbnN0IFQmIHIpIHsgcmV0dXJuIHI7IH0KLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1z
dHJ1Y3QgcHRyX2hlbHBlcjxUJj4KLXsKLSAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7Ci0gIHR5cGVk
ZWYgVCYgcmVmZXJlbmNlX3R5cGU7Ci0gIHR5cGVkZWYgVCYgcnZhbHVlX3R5cGU7Ci0gIHN0YXRp
YyByZWZlcmVuY2VfdHlwZSByZWYoVCYgcikgeyByZXR1cm4gcjsgfQotICBzdGF0aWMgY29uc3Qg
VCYgcmVmKGNvbnN0IFQmIHIpIHsgcmV0dXJuIHI7IH0KLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+
Ci1zdHJ1Y3QgcHRyX2hlbHBlcjxUKj4KLXsKLSAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7Ci0gIHR5
cGVkZWYgVCYgcmVmZXJlbmNlX3R5cGU7Ci0gIHR5cGVkZWYgVCogcnZhbHVlX3R5cGU7Ci0gIHN0
YXRpYyByZWZlcmVuY2VfdHlwZSByZWYoVCAqIHApIHsgcmV0dXJuICpwOyB9Ci0gIHN0YXRpYyBj
b25zdCBUJiByZWYoY29uc3QgVCAqIHApIHsgcmV0dXJuICpwOyB9Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBkZXRhaWwKLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotfSAvLyBuYW1lc3BhY2UgYm9vc3QK
LQotLy8KLS8vIEJPT1NUX1JBTkRPTV9QVFJfSEVMUEVSX1NQRUMgLS0KLS8vCi0vLyAgSGVscGVy
IG1hY3JvIGZvciBicm9rZW4gY29tcGlsZXJzIGRlZmluZXMgc3BlY2lhbGl6YXRpb25zIG9mCi0v
LyAgcHRyX2hlbHBlci4KLS8vCi0jIGRlZmluZSBCT09TVF9SQU5ET01fUFRSX0hFTFBFUl9TUEVD
KFQpCi0KLSNlbmRpZiAvLyBCT09TVF9SQU5ET01fREVUQUlMX1BUUl9IRUxQRVJfSFBQCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20v
ZGV0YWlsL3NlZWQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcmFuZG9tL2RldGFpbC9zZWVkLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NTU3NDgyYWQ0YjFmM2E1YTc3MzY4OGZhNGY0MTljZmQ2YmI5YzA3Mi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9yYW5kb20vZGV0YWlsL3NlZWQuaHBwCisrKyAvZGV2L251bGwKQEAg
LTEsMTE1ICswLDAgQEAKLS8qIGJvb3N0IHJhbmRvbS9kZXRhaWwvc2VlZC5ocHAgaGVhZGVyIGZp
bGUKLSAqCi0gKiBDb3B5cmlnaHQgU3RldmVuIFdhdGFuYWJlIDIwMDkKLSAqIERpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotICog
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAqIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqCi0gKiBTZWUgaHR0cDovL3d3dy5ib29z
dC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0g
KgotICogJElkJAotICovCi0KLSNpZm5kZWYgQk9PU1RfUkFORE9NX0RFVEFJTF9TRUVEX0hQUAot
I2RlZmluZSBCT09TVF9SQU5ET01fREVUQUlMX1NFRURfSFBQCi0KLSNpbmNsdWRlIDxib29zdC9j
b25maWcuaHBwPgotCi0vLyBTdW4gc2VlbXMgdG8gaGF2ZSB0cm91YmxlIHdpdGggdGhlIHVzZSBv
ZiBTRklOQUUgZm9yIHRoZQotLy8gdGVtcGxhdGVkIGNvbnN0cnVjdG9yLiAgU28gZG9lcyBCb3Js
YW5kLgotI2lmICFkZWZpbmVkKEJPT1NUX05PX1NGSU5BRSkgJiYgIWRlZmluZWQoX19TVU5QUk9f
Q0MpICYmICFkZWZpbmVkKF9fQk9STEFORENfXykKLQotI2luY2x1ZGUgPGJvb3N0L3V0aWxpdHkv
ZW5hYmxlX2lmLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19hcml0aG1ldGlj
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYm9vbC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7
Ci1uYW1lc3BhY2UgcmFuZG9tIHsKLW5hbWVzcGFjZSBkZXRhaWwgewotCi10ZW1wbGF0ZTxjbGFz
cyBUPgotc3RydWN0IGRpc2FibGVfc2VlZCA6IGJvb3N0OjpkaXNhYmxlX2lmPGJvb3N0Ojppc19h
cml0aG1ldGljPFQ+ID4ge307Ci0KLXRlbXBsYXRlPGNsYXNzIEVuZ2luZSwgY2xhc3MgVD4KLXN0
cnVjdCBkaXNhYmxlX2NvbnN0cnVjdG9yIDogZGlzYWJsZV9zZWVkPFQ+IHt9OwotCi10ZW1wbGF0
ZTxjbGFzcyBFbmdpbmU+Ci1zdHJ1Y3QgZGlzYWJsZV9jb25zdHJ1Y3RvcjxFbmdpbmUsIEVuZ2lu
ZT4ge307Ci0KLSNkZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJTF9HRU5FUkFUT1JfQ09OU1RSVUNU
T1IoU2VsZiwgR2VuZXJhdG9yLCBnZW4pIFwKLSAgICB0ZW1wbGF0ZTxjbGFzcyBHZW5lcmF0b3I+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBleHBsaWNp
dCBTZWxmKEdlbmVyYXRvciYgZ2VuLCB0eXBlbmFtZSA6OmJvb3N0OjpyYW5kb206OmRldGFpbDo6
ZGlzYWJsZV9jb25zdHJ1Y3RvcjxTZWxmLCBHZW5lcmF0b3I+Ojp0eXBlKiA9IDApCi0KLSNkZWZp
bmUgQk9PU1RfUkFORE9NX0RFVEFJTF9HRU5FUkFUT1JfU0VFRChTZWxmLCBHZW5lcmF0b3IsIGdl
bikgICAgXAotICAgIHRlbXBsYXRlPGNsYXNzIEdlbmVyYXRvcj4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgdm9pZCBzZWVkKEdlbmVyYXRvciYgZ2VuLCB0eXBl
bmFtZSA6OmJvb3N0OjpyYW5kb206OmRldGFpbDo6ZGlzYWJsZV9zZWVkPEdlbmVyYXRvcj46OnR5
cGUqID0gMCkKLQotI2RlZmluZSBCT09TVF9SQU5ET01fREVUQUlMX1NFRURfU0VRX0NPTlNUUlVD
VE9SKFNlbGYsIFNlZWRTZXEsIHNlcSkgICAgXAotICAgIHRlbXBsYXRlPGNsYXNzIFNlZWRTZXE+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGV4cGxp
Y2l0IFNlbGYoU2VlZFNlcSYgc2VxLCB0eXBlbmFtZSA6OmJvb3N0OjpyYW5kb206OmRldGFpbDo6
ZGlzYWJsZV9jb25zdHJ1Y3RvcjxTZWxmLCBTZWVkU2VxPjo6dHlwZSogPSAwKQotCi0jZGVmaW5l
IEJPT1NUX1JBTkRPTV9ERVRBSUxfU0VFRF9TRVFfU0VFRChTZWxmLCBTZWVkU2VxLCBzZXEpICAg
XAotICAgIHRlbXBsYXRlPGNsYXNzIFNlZWRTZXE+ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB2b2lkIHNlZWQoU2VlZFNlcSYgc2VxLCB0eXBlbmFtZSA6OmJvb3N0
OjpyYW5kb206OmRldGFpbDo6ZGlzYWJsZV9zZWVkPFNlZWRTZXE+Ojp0eXBlKiA9IDApCi0KLSNk
ZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJTF9BUklUSE1FVElDX0NPTlNUUlVDVE9SKFNlbGYsIFQs
IHgpICBcCi0gICAgZXhwbGljaXQgU2VsZihjb25zdCBUJiB4KQotCi0jZGVmaW5lIEJPT1NUX1JB
TkRPTV9ERVRBSUxfQVJJVEhNRVRJQ19TRUVEKFNlbGYsIFQsIHgpIFwKLSAgICB2b2lkIHNlZWQo
Y29uc3QgVCYgeCkKLX0KLX0KLX0KLQotI2Vsc2UKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2lzX2FyaXRobWV0aWMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9ib29sLmhwcD4KLQot
I2RlZmluZSBCT09TVF9SQU5ET01fREVUQUlMX0dFTkVSQVRPUl9DT05TVFJVQ1RPUihTZWxmLCBH
ZW5lcmF0b3IsIGdlbikgXAotICAgIFNlbGYoU2VsZiYgb3RoZXIpIHsgKnRoaXMgPSBvdGhlcjsg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFNlbGYoY29uc3QgU2VsZiYg
b3RoZXIpIHsgKnRoaXMgPSBvdGhlcjsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHRlbXBsYXRlPGNsYXNzIEdlbmVyYXRvcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIGV4cGxpY2l0IFNlbGYoR2VuZXJhdG9yJiBnZW4pIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBib29zdF9yYW5kb21fY29u
c3RydWN0b3JfaW1wbChnZW4sIDo6Ym9vc3Q6OmlzX2FyaXRobWV0aWM8R2VuZXJhdG9yPigpKTtc
Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgdGVtcGxhdGU8Y2xhc3MgR2VuZXJhdG9yPiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdm9pZCBib29zdF9yYW5k
b21fY29uc3RydWN0b3JfaW1wbChHZW5lcmF0b3ImIGdlbiwgOjpib29zdDo6bXBsOjpmYWxzZV8p
Ci0KLSNkZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJTF9HRU5FUkFUT1JfU0VFRChTZWxmLCBHZW5l
cmF0b3IsIGdlbikgICAgXAotICAgIHRlbXBsYXRlPGNsYXNzIEdlbmVyYXRvcj4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdm9pZCBzZWVkKEdlbmVyYXRvciYg
Z2VuKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgYm9v
c3RfcmFuZG9tX3NlZWRfaW1wbChnZW4sIDo6Ym9vc3Q6OmlzX2FyaXRobWV0aWM8R2VuZXJhdG9y
PigpKTtcCi0gICAgfVwKLSAgICB0ZW1wbGF0ZTxjbGFzcyBHZW5lcmF0b3I+XAotICAgIHZvaWQg
Ym9vc3RfcmFuZG9tX3NlZWRfaW1wbChHZW5lcmF0b3ImIGdlbiwgOjpib29zdDo6bXBsOjpmYWxz
ZV8pCi0KLSNkZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJTF9TRUVEX1NFUV9DT05TVFJVQ1RPUihT
ZWxmLCBTZWVkU2VxLCBzZXEpICAgIFwKLSAgICBTZWxmKFNlbGYmIG90aGVyKSB7ICp0aGlzID0g
b3RoZXI7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTZWxmKGNvbnN0
IFNlbGYmIG90aGVyKSB7ICp0aGlzID0gb3RoZXI7IH0gICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICB0ZW1wbGF0ZTxjbGFzcyBTZWVkU2VxPiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBleHBsaWNpdCBTZWxmKFNlZWRTZXEmIHNlcSkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgYm9vc3RfcmFu
ZG9tX2NvbnN0cnVjdG9yX2ltcGwoc2VxLCA6OmJvb3N0Ojppc19hcml0aG1ldGljPFNlZWRTZXE+
KCkpO1wKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB0ZW1wbGF0ZTxjbGFzcyBTZWVkU2VxPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB2b2lkIGJvb3N0
X3JhbmRvbV9jb25zdHJ1Y3Rvcl9pbXBsKFNlZWRTZXEmIHNlcSwgOjpib29zdDo6bXBsOjpmYWxz
ZV8pCi0KLSNkZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJTF9TRUVEX1NFUV9TRUVEKFNlbGYsIFNl
ZWRTZXEsIHNlcSkgICAgICAgICAgIFwKLSAgICB0ZW1wbGF0ZTxjbGFzcyBTZWVkU2VxPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB2b2lkIHNlZWQo
U2VlZFNlcSYgc2VxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgYm9vc3RfcmFuZG9tX3NlZWRfaW1wbChzZXEsIDo6Ym9vc3Q6OmlzX2FyaXRo
bWV0aWM8U2VlZFNlcT4oKSk7IFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBTZWVkU2VxPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICB2b2lkIGJvb3N0X3JhbmRvbV9zZWVkX2ltcGwoU2VlZFNlcSYgc2VxLCA6OmJvb3N0Ojpt
cGw6OmZhbHNlXykKLQotI2RlZmluZSBCT09TVF9SQU5ET01fREVUQUlMX0FSSVRITUVUSUNfQ09O
U1RSVUNUT1IoU2VsZiwgVCwgeCkgIFwKLSAgICBleHBsaWNpdCBTZWxmKGNvbnN0IFQmIHgpIHsg
Ym9vc3RfcmFuZG9tX2NvbnN0cnVjdG9yX2ltcGwoeCwgOjpib29zdDo6bXBsOjp0cnVlXygpKTsg
fVwKLSAgICB2b2lkIGJvb3N0X3JhbmRvbV9jb25zdHJ1Y3Rvcl9pbXBsKGNvbnN0IFQmIHgsIDo6
Ym9vc3Q6Om1wbDo6dHJ1ZV8pCi0KLSNkZWZpbmUgQk9PU1RfUkFORE9NX0RFVEFJTF9BUklUSE1F
VElDX1NFRUQoU2VsZiwgVCwgeCkgXAotICAgIHZvaWQgc2VlZChjb25zdCBUJiB4KSB7IGJvb3N0
X3JhbmRvbV9zZWVkX2ltcGwoeCwgOjpib29zdDo6bXBsOjp0cnVlXygpKTsgfVwKLSAgICB2b2lk
IGJvb3N0X3JhbmRvbV9zZWVkX2ltcGwoY29uc3QgVCYgeCwgOjpib29zdDo6bXBsOjp0cnVlXykK
LQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2RldGFpbC9zZWVkX2ltcGwuaHBwIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2RldGFpbC9zZWVkX2ltcGwu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MThhMjk0NDU3OWM5NTllNjgzNzNi
Yzk2ZjU3YjZmZmZjZWNmMjcyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRv
bS9kZXRhaWwvc2VlZF9pbXBsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM5OCArMCwwIEBACi0v
KiBib29zdCByYW5kb20vZGV0YWlsL3NlZWQuaHBwIGhlYWRlciBmaWxlCi0gKgotICogQ29weXJp
Z2h0IFN0ZXZlbiBXYXRhbmFiZSAyMDA5Ci0gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxl
IExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNF
TlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJl
Y2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotICoKLSAqICRJZCQKLSAqLwot
Ci0jaWZuZGVmIEJPT1NUX1JBTkRPTV9ERVRBSUxfU0VFRF9JTVBMX0hQUAotI2RlZmluZSBCT09T
VF9SQU5ET01fREVUQUlMX1NFRURfSU1QTF9IUFAKLQotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KLSNp
bmNsdWRlIDxib29zdC9jc3RkaW50LmhwcD4KLSNpbmNsdWRlIDxib29zdC90aHJvd19leGNlcHRp
b24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy9ub190cjEvY21hdGguaHBwPgotI2luY2x1
ZGUgPGJvb3N0L2ludGVnZXIvaW50ZWdlcl9tYXNrLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRl
Z2VyL3N0YXRpY19sb2cyLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vdHJhaXRzLmhwcD4K
LSNpbmNsdWRlIDxib29zdC9tcGwvYm9vbC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2lmLmhw
cD4KLSNpbmNsdWRlIDxib29zdC9tcGwvaW50LmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20v
ZGV0YWlsL2NvbnN0X21vZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9pbnRl
Z2VyX2xvZzIuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvc2lnbmVkX3Vuc2ln
bmVkX3Rvb2xzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2dlbmVyYXRvcl9i
aXRzLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvZGlzYWJsZV93YXJuaW5n
cy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgcmFuZG9tIHsKLW5hbWVzcGFj
ZSBkZXRhaWwgewotCi0vLyBmaW5kcyB0aGUgc2VlZCB0eXBlIG9mIGFuIGVuZ2luZSwgZ2l2ZW4g
aXRzCi0vLyByZXN1bHRfdHlwZS4gIElmIHRoZSByZXN1bHRfdHlwZSBpcyBpbnRlZ3JhbAotLy8g
dGhlIHNlZWQgdHlwZSBpcyB0aGUgc2FtZS4gIElmIHRoZSByZXN1bHRfdHlwZQotLy8gaXMgZmxv
YXRpbmcgcG9pbnQsIHRoZSBzZWVkIHR5cGUgaXMgdWludDMyX3QKLXRlbXBsYXRlPGNsYXNzIFQ+
Ci1zdHJ1Y3Qgc2VlZF90eXBlCi17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6bXBsOjpp
Zl88Ym9vc3Q6OmlzX2ludGVncmFsPFQ+LAotICAgICAgICBULAotICAgICAgICBib29zdDo6dWlu
dDMyX3QKLSAgICA+Ojp0eXBlIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTxpbnQgTj4KLXN0cnVjdCBj
b25zdF9wb3dfaW1wbAotewotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgc3RhdGljIFQgY2Fs
bChUIGFyZywgaW50IG4sIFQgcmVzdWx0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnN0X3Bv
d19pbXBsPE4gLyAyPjo6Y2FsbChUKGFyZyAqIGFyZyksIG4gLyAyLAotICAgICAgICAgICAgbiUy
ID09IDA/IHJlc3VsdCA6IFQocmVzdWx0ICogYXJnKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
Pgotc3RydWN0IGNvbnN0X3Bvd19pbXBsPDA+Ci17Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAg
ICBzdGF0aWMgVCBjYWxsKFQsIGludCwgVCByZXN1bHQpCi0gICAgewotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLX07Ci0KLS8vIHJlcXVpcmVzIE4gaXMgYW4gdXBwZXIgYm91bmQgb24g
bgotdGVtcGxhdGU8aW50IE4sIGNsYXNzIFQ+Ci1pbmxpbmUgVCBjb25zdF9wb3coVCBhcmcsIGlu
dCBuKSB7IHJldHVybiBjb25zdF9wb3dfaW1wbDxOPjo6Y2FsbChhcmcsIG4sIFQoMSkpOyB9Ci0K
LXRlbXBsYXRlPGNsYXNzIFQ+Ci1pbmxpbmUgVCBwb3cyKGludCBuKQotewotICAgIHR5cGVkZWYg
dW5zaWduZWQgaW50X3R5cGU7Ci0gICAgY29uc3QgaW50IG1heF9iaXRzID0gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnRfdHlwZT46OmRpZ2l0czsKLSAgICBUIG11bHRpcGxpZXIgPSBUKGludF90eXBl
KDEpIDw8IChtYXhfYml0cyAtIDEpKSAqIDI7Ci0gICAgcmV0dXJuIChpbnRfdHlwZSgxKSA8PCAo
biAlIG1heF9iaXRzKSkgKgotICAgICAgICBjb25zdF9wb3c8c3RkOjpudW1lcmljX2xpbWl0czxU
Pjo6ZGlnaXRzIC8gbWF4X2JpdHM+KG11bHRpcGxpZXIsIG4gLyBtYXhfYml0cyk7Ci19Ci0KLXRl
bXBsYXRlPGNsYXNzIEVuZ2luZSwgY2xhc3MgSXRlcj4KLXZvaWQgZ2VuZXJhdGVfZnJvbV9yZWFs
KEVuZ2luZSYgZW5nLCBJdGVyIGJlZ2luLCBJdGVyIGVuZCkKLXsKLSAgICB1c2luZyBzdGQ6OmZt
b2Q7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBFbmdpbmU6OnJlc3VsdF90eXBlIFJlYWxUeXBlOwot
ICAgIGNvbnN0IGludCBCaXRzID0gZGV0YWlsOjpnZW5lcmF0b3JfYml0czxFbmdpbmU+Ojp2YWx1
ZSgpOwotICAgIGludCByZW1haW5pbmdfYml0cyA9IDA7Ci0gICAgYm9vc3Q6OnVpbnRfbGVhc3Qz
Ml90IHNhdmVkX2JpdHMgPSAwOwotICAgIFJlYWxUeXBlIG11bHRpcGxpZXIgPSBwb3cyPFJlYWxU
eXBlPiggQml0cyk7Ci0gICAgUmVhbFR5cGUgbXVsdDMyID0gUmVhbFR5cGUoNDI5NDk2NzI5Ni4w
KTsgLy8gMl4zMgotICAgIHdoaWxlKHRydWUpIHsKLSAgICAgICAgUmVhbFR5cGUgdmFsID0gZW5n
KCkgKiBtdWx0aXBsaWVyOwotICAgICAgICBpbnQgYXZhaWxhYmxlX2JpdHMgPSBCaXRzOwotICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGNhbiBvcHRpbWl6ZSB0aGlzIG91dAotICAg
ICAgICAvLyBpZiBpdCBpc24ndCBwb3NzaWJsZS4KLSAgICAgICAgaWYoQml0cyA8IDMyICYmIGF2
YWlsYWJsZV9iaXRzIDwgMzIgLSByZW1haW5pbmdfYml0cykgewotICAgICAgICAgICAgc2F2ZWRf
Yml0cyB8PSBib29zdDo6dWludF9sZWFzdDMyX3QodmFsKSA8PCByZW1haW5pbmdfYml0czsKLSAg
ICAgICAgICAgIHJlbWFpbmluZ19iaXRzICs9IEJpdHM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBJZiBCaXRzIDwgMzIsIHRoZW4gcmVtYWluaW5nX2JpdHMgIT0gMCwgc2luY2UK
LSAgICAgICAgICAgIC8vIGlmIHJlbWFpbmluZ19iaXRzID09IDAsIGF2YWlsYWJsZV9iaXRzIDwg
MzIgLSAwLAotICAgICAgICAgICAgLy8gYW5kIHdlIHdvbid0IGdldCBoZXJlIHRvIGJlZ2luIHdp
dGguCi0gICAgICAgICAgICBpZihCaXRzIDwgMzIgfHwgcmVtYWluaW5nX2JpdHMgIT0gMCkgewot
ICAgICAgICAgICAgICAgIGJvb3N0Ojp1aW50X2xlYXN0MzJfdCBkaXZpc29yID0KLSAgICAgICAg
ICAgICAgICAgICAgKGJvb3N0Ojp1aW50X2xlYXN0MzJfdCgxKSA8PCAoMzIgLSByZW1haW5pbmdf
Yml0cykpOwotICAgICAgICAgICAgICAgIGJvb3N0Ojp1aW50X2xlYXN0MzJfdCBleHRyYV9iaXRz
ID0gYm9vc3Q6OnVpbnRfbGVhc3QzMl90KGZtb2QodmFsLCBtdWx0MzIpKSAmIChkaXZpc29yIC0g
MSk7Ci0gICAgICAgICAgICAgICAgdmFsID0gdmFsIC8gZGl2aXNvcjsKLSAgICAgICAgICAgICAg
ICAqYmVnaW4rKyA9IHNhdmVkX2JpdHMgfCAoZXh0cmFfYml0cyA8PCByZW1haW5pbmdfYml0cyk7
Ci0gICAgICAgICAgICAgICAgaWYoYmVnaW4gPT0gZW5kKSByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgYXZhaWxhYmxlX2JpdHMgLT0gMzIgLSByZW1haW5pbmdfYml0czsKLSAgICAgICAgICAgICAg
ICByZW1haW5pbmdfYml0cyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJZiBC
aXRzIDwgMzIgd2Ugc2hvdWxkIG5ldmVyIGVudGVyIHRoaXMgbG9vcAotICAgICAgICAgICAgaWYo
Qml0cyA+PSAzMikgewotICAgICAgICAgICAgICAgIGZvcig7IGF2YWlsYWJsZV9iaXRzID49IDMy
OyBhdmFpbGFibGVfYml0cyAtPSAzMikgewotICAgICAgICAgICAgICAgICAgICBib29zdDo6dWlu
dF9sZWFzdDMyX3Qgd29yZCA9IGJvb3N0Ojp1aW50X2xlYXN0MzJfdChmbW9kKHZhbCwgbXVsdDMy
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbCAvPSBtdWx0MzI7Ci0gICAgICAgICAgICAgICAg
ICAgICpiZWdpbisrID0gd29yZDsKLSAgICAgICAgICAgICAgICAgICAgaWYoYmVnaW4gPT0gZW5k
KSByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmVtYWluaW5nX2JpdHMgPSBhdmFpbGFibGVfYml0czsKLSAgICAgICAgICAgIHNhdmVkX2JpdHMg
PSBzdGF0aWNfY2FzdDxib29zdDo6dWludF9sZWFzdDMyX3Q+KHZhbCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEVuZ2luZSwgY2xhc3MgSXRlcj4KLXZvaWQgZ2VuZXJh
dGVfZnJvbV9pbnQoRW5naW5lJiBlbmcsIEl0ZXIgYmVnaW4sIEl0ZXIgZW5kKQotewotICAgIHR5
cGVkZWYgdHlwZW5hbWUgRW5naW5lOjpyZXN1bHRfdHlwZSBJbnRUeXBlOwotICAgIHR5cGVkZWYg
dHlwZW5hbWUgYm9vc3Q6OnJhbmRvbTo6dHJhaXRzOjptYWtlX3Vuc2lnbmVkPEludFR5cGU+Ojp0
eXBlIHVuc2lnbmVkX3R5cGU7Ci0gICAgaW50IHJlbWFpbmluZ19iaXRzID0gMDsKLSAgICBib29z
dDo6dWludF9sZWFzdDMyX3Qgc2F2ZWRfYml0cyA9IDA7Ci0gICAgdW5zaWduZWRfdHlwZSByYW5n
ZSA9IGJvb3N0OjpyYW5kb206OmRldGFpbDo6c3VidHJhY3Q8SW50VHlwZT4oKSgoZW5nLm1heCko
KSwgKGVuZy5taW4pKCkpOwotCi0gICAgaW50IGJpdHMgPQotICAgICAgICAocmFuZ2UgPT0gKHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWRfdHlwZT46Om1heCkoKSkgPwotICAgICAgICAgICAg
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZF90eXBlPjo6ZGlnaXRzIDoKLSAgICAgICAgICAg
IGRldGFpbDo6aW50ZWdlcl9sb2cyKHJhbmdlICsgMSk7Ci0KLSAgICB7Ci0gICAgICAgIGludCBk
aXNjYXJkZWRfYml0cyA9IGRldGFpbDo6aW50ZWdlcl9sb2cyKGJpdHMpOwotICAgICAgICB1bnNp
Z25lZF90eXBlIGV4Y2VzcyA9IChyYW5nZSArIDEpID4+IChiaXRzIC0gZGlzY2FyZGVkX2JpdHMp
OwotICAgICAgICBpZihleGNlc3MgIT0gMCkgewotICAgICAgICAgICAgaW50IGV4dHJhX2JpdHMg
PSBkZXRhaWw6OmludGVnZXJfbG9nMigoZXhjZXNzIC0gMSkgXiBleGNlc3MpOwotICAgICAgICAg
ICAgYml0cyA9IGJpdHMgLSBkaXNjYXJkZWRfYml0cyArIGV4dHJhX2JpdHM7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICB1bnNpZ25lZF90eXBlIG1hc2sgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWRf
dHlwZT4oMikgPDwgKGJpdHMgLSAxKSkgLSAxOwotICAgIHVuc2lnbmVkX3R5cGUgbGltaXQgPSAo
KHJhbmdlICsgMSkgJiB+bWFzaykgLSAxOwotCi0gICAgd2hpbGUodHJ1ZSkgewotICAgICAgICB1
bnNpZ25lZF90eXBlIHZhbDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgdmFsID0gYm9vc3Q6
OnJhbmRvbTo6ZGV0YWlsOjpzdWJ0cmFjdDxJbnRUeXBlPigpKGVuZygpLCAoZW5nLm1pbikoKSk7
Ci0gICAgICAgIH0gd2hpbGUobGltaXQgIT0gcmFuZ2UgJiYgdmFsID4gbGltaXQpOwotICAgICAg
ICB2YWwgJj0gbWFzazsKLSAgICAgICAgaW50IGF2YWlsYWJsZV9iaXRzID0gYml0czsKLSAgICAg
ICAgaWYoYXZhaWxhYmxlX2JpdHMgPT0gMzIpIHsKLSAgICAgICAgICAgICpiZWdpbisrID0gc3Rh
dGljX2Nhc3Q8Ym9vc3Q6OnVpbnRfbGVhc3QzMl90Pih2YWwpICYgMHhGRkZGRkZGRnU7Ci0gICAg
ICAgICAgICBpZihiZWdpbiA9PSBlbmQpIHJldHVybjsKLSAgICAgICAgfSBlbHNlIGlmKGF2YWls
YWJsZV9iaXRzICUgMzIgPT0gMCkgewotICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGF2
YWlsYWJsZV9iaXRzIC8gMzI7ICsraSkgewotICAgICAgICAgICAgICAgIGJvb3N0Ojp1aW50X2xl
YXN0MzJfdCB3b3JkID0gYm9vc3Q6OnVpbnRfbGVhc3QzMl90KHZhbCkgJiAweEZGRkZGRkZGdTsK
LSAgICAgICAgICAgICAgICBpbnQgc3VwcHJlc3Nfd2FybmluZyA9IChiaXRzID49IDMyKTsKLSAg
ICAgICAgICAgICAgICBCT09TVF9BU1NFUlQoc3VwcHJlc3Nfd2FybmluZyA9PSAxKTsKLSAgICAg
ICAgICAgICAgICB2YWwgPj49ICgzMiAqIHN1cHByZXNzX3dhcm5pbmcpOwotICAgICAgICAgICAg
ICAgICpiZWdpbisrID0gd29yZDsKLSAgICAgICAgICAgICAgICBpZihiZWdpbiA9PSBlbmQpIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmKGJpdHMgPCAzMiAmJiBhdmFp
bGFibGVfYml0cyA8IDMyIC0gcmVtYWluaW5nX2JpdHMpIHsKLSAgICAgICAgICAgIHNhdmVkX2Jp
dHMgfD0gYm9vc3Q6OnVpbnRfbGVhc3QzMl90KHZhbCkgPDwgcmVtYWluaW5nX2JpdHM7Ci0gICAg
ICAgICAgICByZW1haW5pbmdfYml0cyArPSBiaXRzOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaWYoYml0cyA8IDMyIHx8IHJlbWFpbmluZ19iaXRzICE9IDApIHsKLSAgICAgICAgICAg
ICAgICBib29zdDo6dWludF9sZWFzdDMyX3QgZXh0cmFfYml0cyA9IGJvb3N0Ojp1aW50X2xlYXN0
MzJfdCh2YWwpICYgKChib29zdDo6dWludF9sZWFzdDMyX3QoMSkgPDwgKDMyIC0gcmVtYWluaW5n
X2JpdHMpKSAtIDEpOwotICAgICAgICAgICAgICAgIHZhbCA+Pj0gMzIgLSByZW1haW5pbmdfYml0
czsKLSAgICAgICAgICAgICAgICAqYmVnaW4rKyA9IHNhdmVkX2JpdHMgfCAoZXh0cmFfYml0cyA8
PCByZW1haW5pbmdfYml0cyk7Ci0gICAgICAgICAgICAgICAgaWYoYmVnaW4gPT0gZW5kKSByZXR1
cm47Ci0gICAgICAgICAgICAgICAgYXZhaWxhYmxlX2JpdHMgLT0gMzIgLSByZW1haW5pbmdfYml0
czsKLSAgICAgICAgICAgICAgICByZW1haW5pbmdfYml0cyA9IDA7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZihiaXRzID49IDMyKSB7Ci0gICAgICAgICAgICAgICAgZm9yKDsgYXZhaWxh
YmxlX2JpdHMgPj0gMzI7IGF2YWlsYWJsZV9iaXRzIC09IDMyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGJvb3N0Ojp1aW50X2xlYXN0MzJfdCB3b3JkID0gYm9vc3Q6OnVpbnRfbGVhc3QzMl90KHZh
bCkgJiAweEZGRkZGRkZGdTsKLSAgICAgICAgICAgICAgICAgICAgaW50IHN1cHByZXNzX3dhcm5p
bmcgPSAoYml0cyA+PSAzMik7Ci0gICAgICAgICAgICAgICAgICAgIEJPT1NUX0FTU0VSVChzdXBw
cmVzc193YXJuaW5nID09IDEpOwotICAgICAgICAgICAgICAgICAgICB2YWwgPj49ICgzMiAqIHN1
cHByZXNzX3dhcm5pbmcpOwotICAgICAgICAgICAgICAgICAgICAqYmVnaW4rKyA9IHdvcmQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmKGJlZ2luID09IGVuZCkgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlbWFpbmluZ19iaXRzID0gYXZhaWxh
YmxlX2JpdHM7Ci0gICAgICAgICAgICBzYXZlZF9iaXRzID0gc3RhdGljX2Nhc3Q8Ym9vc3Q6OnVp
bnRfbGVhc3QzMl90Pih2YWwpOwotICAgICAgICB9Ci0gICAgfQotfQotCi10ZW1wbGF0ZTxjbGFz
cyBFbmdpbmUsIGNsYXNzIEl0ZXI+Ci12b2lkIGdlbmVyYXRlX2ltcGwoRW5naW5lJiBlbmcsIEl0
ZXIgZmlyc3QsIEl0ZXIgbGFzdCwgYm9vc3Q6Om1wbDo6dHJ1ZV8pCi17Ci0gICAgcmV0dXJuIGRl
dGFpbDo6Z2VuZXJhdGVfZnJvbV9pbnQoZW5nLCBmaXJzdCwgbGFzdCk7Ci19Ci0KLXRlbXBsYXRl
PGNsYXNzIEVuZ2luZSwgY2xhc3MgSXRlcj4KLXZvaWQgZ2VuZXJhdGVfaW1wbChFbmdpbmUmIGVu
ZywgSXRlciBmaXJzdCwgSXRlciBsYXN0LCBib29zdDo6bXBsOjpmYWxzZV8pCi17Ci0gICAgcmV0
dXJuIGRldGFpbDo6Z2VuZXJhdGVfZnJvbV9yZWFsKGVuZywgZmlyc3QsIGxhc3QpOwotfQotCi10
ZW1wbGF0ZTxjbGFzcyBFbmdpbmUsIGNsYXNzIEl0ZXI+Ci12b2lkIGdlbmVyYXRlKEVuZ2luZSYg
ZW5nLCBJdGVyIGZpcnN0LCBJdGVyIGxhc3QpCi17Ci0gICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJh
dGVfaW1wbChlbmcsIGZpcnN0LCBsYXN0LCBib29zdDo6cmFuZG9tOjp0cmFpdHM6OmlzX2ludGVn
cmFsPHR5cGVuYW1lIEVuZ2luZTo6cmVzdWx0X3R5cGU+KCkpOwotfQotCi0KLQotdGVtcGxhdGU8
Y2xhc3MgSW50VHlwZSwgSW50VHlwZSBtLCBjbGFzcyBTZWVkU2VxPgotSW50VHlwZSBzZWVkX29u
ZV9pbnQoU2VlZFNlcSYgc2VxKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQgbG9nID0gOjpib29z
dDo6bXBsOjppZl9jPChtID09IDApLAotICAgICAgICA6OmJvb3N0OjptcGw6OmludF88KDo6c3Rk
OjpudW1lcmljX2xpbWl0czxJbnRUeXBlPjo6ZGlnaXRzKT4sCi0gICAgICAgIDo6Ym9vc3Q6OnN0
YXRpY19sb2cyPG0+ID46OnR5cGU6OnZhbHVlOwotICAgIHN0YXRpYyBjb25zdCBpbnQgayA9Ci0g
ICAgICAgIChsb2cgKyAoKH4oc3RhdGljX2Nhc3Q8SW50VHlwZT4oMikgPDwgKGxvZyAtIDEpKSAm
IG0pPyAzMiA6IDMxKSkgLyAzMjsKLSAgICA6OmJvb3N0Ojp1aW50X2xlYXN0MzJfdCBhcnJheVts
b2cgLyAzMiArIDRdOwotICAgIHNlcS5nZW5lcmF0ZSgmYXJyYXlbMF0sICZhcnJheVswXSArIGsg
KyAzKTsKLSAgICBJbnRUeXBlIHMgPSAwOwotICAgIGZvcihpbnQgaiA9IDA7IGogPCBrOyArK2op
IHsKLSAgICAgICAgSW50VHlwZSBkaWdpdCA9IGNvbnN0X21vZDxJbnRUeXBlLCBtPjo6YXBwbHko
SW50VHlwZShhcnJheVtqKzNdKSk7Ci0gICAgICAgIEludFR5cGUgbXVsdCA9IEludFR5cGUoMSkg
PDwgMzIqajsKLSAgICAgICAgcyA9IGNvbnN0X21vZDxJbnRUeXBlLCBtPjo6bXVsdF9hZGQobXVs
dCwgZGlnaXQsIHMpOwotICAgIH0KLSAgICByZXR1cm4gczsKLX0KLQotdGVtcGxhdGU8Y2xhc3Mg
SW50VHlwZSwgSW50VHlwZSBtLCBjbGFzcyBJdGVyPgotSW50VHlwZSBnZXRfb25lX2ludChJdGVy
JiBmaXJzdCwgSXRlciBsYXN0KQotewotICAgIHN0YXRpYyBjb25zdCBpbnQgbG9nID0gOjpib29z
dDo6bXBsOjppZl9jPChtID09IDApLAotICAgICAgICA6OmJvb3N0OjptcGw6OmludF88KDo6c3Rk
OjpudW1lcmljX2xpbWl0czxJbnRUeXBlPjo6ZGlnaXRzKT4sCi0gICAgICAgIDo6Ym9vc3Q6OnN0
YXRpY19sb2cyPG0+ID46OnR5cGU6OnZhbHVlOwotICAgIHN0YXRpYyBjb25zdCBpbnQgayA9Ci0g
ICAgICAgIChsb2cgKyAoKH4oc3RhdGljX2Nhc3Q8SW50VHlwZT4oMikgPDwgKGxvZyAtIDEpKSAm
IG0pPyAzMiA6IDMxKSkgLyAzMjsKLSAgICBJbnRUeXBlIHMgPSAwOwotICAgIGZvcihpbnQgaiA9
IDA7IGogPCBrOyArK2opIHsKLSAgICAgICAgaWYoZmlyc3QgPT0gbGFzdCkgewotICAgICAgICAg
ICAgYm9vc3Q6OnRocm93X2V4Y2VwdGlvbig6OnN0ZDo6aW52YWxpZF9hcmd1bWVudCgiTm90IGVu
b3VnaCBlbGVtZW50cyBpbiBjYWxsIHRvIHNlZWQuIikpOwotICAgICAgICB9Ci0gICAgICAgIElu
dFR5cGUgZGlnaXQgPSBjb25zdF9tb2Q8SW50VHlwZSwgbT46OmFwcGx5KEludFR5cGUoKmZpcnN0
KyspKTsKLSAgICAgICAgSW50VHlwZSBtdWx0ID0gSW50VHlwZSgxKSA8PCAzMipqOwotICAgICAg
ICBzID0gY29uc3RfbW9kPEludFR5cGUsIG0+OjptdWx0X2FkZChtdWx0LCBkaWdpdCwgcyk7Ci0g
ICAgfQotICAgIHJldHVybiBzOwotfQotCi0vLyBUT0RPOiB3b3JrIGluLXBsYWNlIHdoZW5ldmVy
IHBvc3NpYmxlCi10ZW1wbGF0ZTxpbnQgdywgc3RkOjpzaXplX3QgbiwgY2xhc3MgU2VlZFNlcSwg
Y2xhc3MgVUludFR5cGU+Ci12b2lkIHNlZWRfYXJyYXlfaW50X2ltcGwoU2VlZFNlcSYgc2VxLCBV
SW50VHlwZSAoJngpW25dKQotewotICAgIGJvb3N0Ojp1aW50X2xlYXN0MzJfdCBzdG9yYWdlWygo
dyszMSkvMzIpICogbl07Ci0gICAgc2VxLmdlbmVyYXRlKCZzdG9yYWdlWzBdLCAmc3RvcmFnZVsw
XSArICgodyszMSkvMzIpICogbik7Ci0gICAgZm9yKHN0ZDo6c2l6ZV90IGogPSAwOyBqIDwgbjsg
aisrKSB7Ci0gICAgICAgIFVJbnRUeXBlIHZhbCA9IDA7Ci0gICAgICAgIGZvcihzdGQ6OnNpemVf
dCBrID0gMDsgayA8ICh3KzMxKS8zMjsgKytrKSB7Ci0gICAgICAgICAgICB2YWwgKz0gc3RhdGlj
X2Nhc3Q8VUludFR5cGU+KHN0b3JhZ2VbKHcrMzEpLzMyKmogKyBrXSkgPDwgMzIqazsKLSAgICAg
ICAgfQotICAgICAgICB4W2pdID0gdmFsICYgOjpib29zdDo6bG93X2JpdHNfbWFza190PHc+Ojpz
aWdfYml0czsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPGludCB3LCBzdGQ6OnNpemVfdCBuLCBjbGFz
cyBTZWVkU2VxLCBjbGFzcyBJbnRUeXBlPgotaW5saW5lIHZvaWQgc2VlZF9hcnJheV9pbnRfaW1w
bChTZWVkU2VxJiBzZXEsIEludFR5cGUgKCZ4KVtuXSwgYm9vc3Q6Om1wbDo6dHJ1ZV8pCi17Ci0g
ICAgQk9PU1RfU1RBVElDX0FTU0VSVF9NU0coYm9vc3Q6OmlzX2ludGVncmFsPEludFR5cGU+Ojp2
YWx1ZSwgIlNvcnJ5IGJ1dCB0aGlzIHJvdXRpbmUgaGFzIG5vdCBiZWVuIHBvcnRlZCB0byBub24g
YnVpbHQtaW4gaW50ZWdlcnMgYXMgaXQgcmVsaWVzIG9uIGEgcmVpbnRlcnByZXRfY2FzdC4iKTsK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0OjptYWtlX3Vuc2lnbmVkPEludFR5cGU+Ojp0eXBl
IHVuc2lnbmVkX2FycmF5W25dOwotICAgIHNlZWRfYXJyYXlfaW50X2ltcGw8dz4oc2VxLCByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkX2FycmF5Jj4oeCkpOwotfQotCi10ZW1wbGF0ZTxpbnQgdywg
c3RkOjpzaXplX3QgbiwgY2xhc3MgU2VlZFNlcSwgY2xhc3MgSW50VHlwZT4KLWlubGluZSB2b2lk
IHNlZWRfYXJyYXlfaW50X2ltcGwoU2VlZFNlcSYgc2VxLCBJbnRUeXBlICgmeClbbl0sIGJvb3N0
OjptcGw6OmZhbHNlXykKLXsKLSAgICBzZWVkX2FycmF5X2ludF9pbXBsPHc+KHNlcSwgeCk7Ci19
Ci0KLXRlbXBsYXRlPGludCB3LCBzdGQ6OnNpemVfdCBuLCBjbGFzcyBTZWVkU2VxLCBjbGFzcyBJ
bnRUeXBlPgotaW5saW5lIHZvaWQgc2VlZF9hcnJheV9pbnQoU2VlZFNlcSYgc2VxLCBJbnRUeXBl
ICgmeClbbl0pCi17Ci0gICAgc2VlZF9hcnJheV9pbnRfaW1wbDx3PihzZXEsIHgsIGJvb3N0Ojpy
YW5kb206OnRyYWl0czo6aXNfc2lnbmVkPEludFR5cGU+KCkpOwotfQotCi10ZW1wbGF0ZTxpbnQg
dywgc3RkOjpzaXplX3QgbiwgY2xhc3MgSXRlciwgY2xhc3MgVUludFR5cGU+Ci12b2lkIGZpbGxf
YXJyYXlfaW50X2ltcGwoSXRlciYgZmlyc3QsIEl0ZXIgbGFzdCwgVUludFR5cGUgKCZ4KVtuXSkK
LXsKLSAgICBmb3Ioc3RkOjpzaXplX3QgaiA9IDA7IGogPCBuOyBqKyspIHsKLSAgICAgICAgVUlu
dFR5cGUgdmFsID0gMDsKLSAgICAgICAgZm9yKHN0ZDo6c2l6ZV90IGsgPSAwOyBrIDwgKHcrMzEp
LzMyOyArK2spIHsKLSAgICAgICAgICAgIGlmKGZpcnN0ID09IGxhc3QpIHsKLSAgICAgICAgICAg
ICAgICBib29zdDo6dGhyb3dfZXhjZXB0aW9uKHN0ZDo6aW52YWxpZF9hcmd1bWVudCgiTm90IGVu
b3VnaCBlbGVtZW50cyBpbiBjYWxsIHRvIHNlZWQuIikpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdmFsICs9IHN0YXRpY19jYXN0PFVJbnRUeXBlPigqZmlyc3QrKykgPDwgMzIqazsKLSAg
ICAgICAgfQotICAgICAgICB4W2pdID0gdmFsICYgOjpib29zdDo6bG93X2JpdHNfbWFza190PHc+
OjpzaWdfYml0czsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPGludCB3LCBzdGQ6OnNpemVfdCBuLCBj
bGFzcyBJdGVyLCBjbGFzcyBJbnRUeXBlPgotaW5saW5lIHZvaWQgZmlsbF9hcnJheV9pbnRfaW1w
bChJdGVyJiBmaXJzdCwgSXRlciBsYXN0LCBJbnRUeXBlICgmeClbbl0sIGJvb3N0OjptcGw6OnRy
dWVfKQotewotICAgIEJPT1NUX1NUQVRJQ19BU1NFUlRfTVNHKGJvb3N0Ojppc19pbnRlZ3JhbDxJ
bnRUeXBlPjo6dmFsdWUsICJTb3JyeSBidXQgdGhpcyByb3V0aW5lIGhhcyBub3QgYmVlbiBwb3J0
ZWQgdG8gbm9uIGJ1aWx0LWluIGludGVnZXJzIGFzIGl0IHJlbGllcyBvbiBhIHJlaW50ZXJwcmV0
X2Nhc3QuIik7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6bWFrZV91bnNpZ25lZDxJbnRU
eXBlPjo6dHlwZSB1bnNpZ25lZF9hcnJheVtuXTsKLSAgICBmaWxsX2FycmF5X2ludF9pbXBsPHc+
KGZpcnN0LCBsYXN0LCByZWludGVycHJldF9jYXN0PHVuc2lnbmVkX2FycmF5Jj4oeCkpOwotfQot
Ci10ZW1wbGF0ZTxpbnQgdywgc3RkOjpzaXplX3QgbiwgY2xhc3MgSXRlciwgY2xhc3MgSW50VHlw
ZT4KLWlubGluZSB2b2lkIGZpbGxfYXJyYXlfaW50X2ltcGwoSXRlciYgZmlyc3QsIEl0ZXIgbGFz
dCwgSW50VHlwZSAoJngpW25dLCBib29zdDo6bXBsOjpmYWxzZV8pCi17Ci0gICAgZmlsbF9hcnJh
eV9pbnRfaW1wbDx3PihmaXJzdCwgbGFzdCwgeCk7Ci19Ci0KLXRlbXBsYXRlPGludCB3LCBzdGQ6
OnNpemVfdCBuLCBjbGFzcyBJdGVyLCBjbGFzcyBJbnRUeXBlPgotaW5saW5lIHZvaWQgZmlsbF9h
cnJheV9pbnQoSXRlciYgZmlyc3QsIEl0ZXIgbGFzdCwgSW50VHlwZSAoJngpW25dKQotewotICAg
IGZpbGxfYXJyYXlfaW50X2ltcGw8dz4oZmlyc3QsIGxhc3QsIHgsIGJvb3N0OjpyYW5kb206OnRy
YWl0czo6aXNfc2lnbmVkPEludFR5cGU+KCkpOwotfQotCi10ZW1wbGF0ZTxpbnQgdywgc3RkOjpz
aXplX3QgbiwgY2xhc3MgUmVhbFR5cGU+Ci12b2lkIHNlZWRfYXJyYXlfcmVhbF9pbXBsKGNvbnN0
IGJvb3N0Ojp1aW50X2xlYXN0MzJfdCogc3RvcmFnZSwgUmVhbFR5cGUgKCZ4KVtuXSkKLXsKLSAg
ICBib29zdDo6dWludF9sZWFzdDMyX3QgbWFzayA9IH4oKH5ib29zdDo6dWludF9sZWFzdDMyX3Qo
MCkpIDw8ICh3JTMyKSk7Ci0gICAgUmVhbFR5cGUgdHdvMzIgPSA0Mjk0OTY3Mjk2LjA7Ci0gICAg
Y29uc3QgUmVhbFR5cGUgZGl2aXNvciA9IFJlYWxUeXBlKDEpL2RldGFpbDo6cG93MjxSZWFsVHlw
ZT4odyk7Ci0gICAgdW5zaWduZWQgaW50IGo7Ci0gICAgZm9yKGogPSAwOyBqIDwgbjsgKytqKSB7
Ci0gICAgICAgIFJlYWxUeXBlIHZhbCA9IFJlYWxUeXBlKDApOwotICAgICAgICBSZWFsVHlwZSBt
dWx0ID0gZGl2aXNvcjsKLSAgICAgICAgZm9yKGludCBrID0gMDsgayA8IHcvMzI7ICsraykgewot
ICAgICAgICAgICAgdmFsICs9ICpzdG9yYWdlKysgKiBtdWx0OwotICAgICAgICAgICAgbXVsdCAq
PSB0d28zMjsKLSAgICAgICAgfQotICAgICAgICBpZihtYXNrICE9IDApIHsKLSAgICAgICAgICAg
IHZhbCArPSAoKnN0b3JhZ2UrKyAmIG1hc2spICogbXVsdDsKLSAgICAgICAgfQotICAgICAgICBC
T09TVF9BU1NFUlQodmFsID49IDApOwotICAgICAgICBCT09TVF9BU1NFUlQodmFsIDwgMSk7Ci0g
ICAgICAgIHhbal0gPSB2YWw7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTxpbnQgdywgc3RkOjpzaXpl
X3QgbiwgY2xhc3MgU2VlZFNlcSwgY2xhc3MgUmVhbFR5cGU+Ci12b2lkIHNlZWRfYXJyYXlfcmVh
bChTZWVkU2VxJiBzZXEsIFJlYWxUeXBlICgmeClbbl0pCi17Ci0gICAgdXNpbmcgc3RkOjpwb3c7
Ci0gICAgYm9vc3Q6OnVpbnRfbGVhc3QzMl90IHN0b3JhZ2VbKCh3KzMxKS8zMikgKiBuXTsKLSAg
ICBzZXEuZ2VuZXJhdGUoJnN0b3JhZ2VbMF0sICZzdG9yYWdlWzBdICsgKCh3KzMxKS8zMikgKiBu
KTsKLSAgICBzZWVkX2FycmF5X3JlYWxfaW1wbDx3PihzdG9yYWdlLCB4KTsKLX0KLQotdGVtcGxh
dGU8aW50IHcsIHN0ZDo6c2l6ZV90IG4sIGNsYXNzIEl0ZXIsIGNsYXNzIFJlYWxUeXBlPgotdm9p
ZCBmaWxsX2FycmF5X3JlYWwoSXRlciYgZmlyc3QsIEl0ZXIgbGFzdCwgUmVhbFR5cGUgKCZ4KVtu
XSkKLXsKLSAgICBib29zdDo6dWludF9sZWFzdDMyX3QgbWFzayA9IH4oKH5ib29zdDo6dWludF9s
ZWFzdDMyX3QoMCkpIDw8ICh3JTMyKSk7Ci0gICAgUmVhbFR5cGUgdHdvMzIgPSA0Mjk0OTY3Mjk2
LjA7Ci0gICAgY29uc3QgUmVhbFR5cGUgZGl2aXNvciA9IFJlYWxUeXBlKDEpL2RldGFpbDo6cG93
MjxSZWFsVHlwZT4odyk7Ci0gICAgdW5zaWduZWQgaW50IGo7Ci0gICAgZm9yKGogPSAwOyBqIDwg
bjsgKytqKSB7Ci0gICAgICAgIFJlYWxUeXBlIHZhbCA9IFJlYWxUeXBlKDApOwotICAgICAgICBS
ZWFsVHlwZSBtdWx0ID0gZGl2aXNvcjsKLSAgICAgICAgZm9yKGludCBrID0gMDsgayA8IHcvMzI7
ICsraywgKytmaXJzdCkgewotICAgICAgICAgICAgaWYoZmlyc3QgPT0gbGFzdCkgYm9vc3Q6OnRo
cm93X2V4Y2VwdGlvbihzdGQ6OmludmFsaWRfYXJndW1lbnQoIk5vdCBlbm91Z2ggZWxlbWVudHMg
aW4gY2FsbCB0byBzZWVkLiIpKTsKLSAgICAgICAgICAgIHZhbCArPSAqZmlyc3QgKiBtdWx0Owot
ICAgICAgICAgICAgbXVsdCAqPSB0d28zMjsKLSAgICAgICAgfQotICAgICAgICBpZihtYXNrICE9
IDApIHsKLSAgICAgICAgICAgIGlmKGZpcnN0ID09IGxhc3QpIGJvb3N0Ojp0aHJvd19leGNlcHRp
b24oc3RkOjppbnZhbGlkX2FyZ3VtZW50KCJOb3QgZW5vdWdoIGVsZW1lbnRzIGluIGNhbGwgdG8g
c2VlZC4iKSk7Ci0gICAgICAgICAgICB2YWwgKz0gKCpmaXJzdCAmIG1hc2spICogbXVsdDsKLSAg
ICAgICAgICAgICsrZmlyc3Q7Ci0gICAgICAgIH0KLSAgICAgICAgQk9PU1RfQVNTRVJUKHZhbCA+
PSAwKTsKLSAgICAgICAgQk9PU1RfQVNTRVJUKHZhbCA8IDEpOwotICAgICAgICB4W2pdID0gdmFs
OwotICAgIH0KLX0KLQotfQotfQotfQotCi0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9l
bmFibGVfd2FybmluZ3MuaHBwPgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9kZXRhaWwvc2lnbmVkX3Vuc2lnbmVk
X3Rvb2xzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3Jh
bmRvbS9kZXRhaWwvc2lnbmVkX3Vuc2lnbmVkX3Rvb2xzLmhwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMTk3OTkwOGEzMTJkMjM0Yjg4ZDNmOTViOTc5MWYzOTk4NDQwOTcyZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZGV0YWlsL3NpZ25lZF91bnNpZ25l
ZF90b29scy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKiBib29zdCByYW5k
b20vZGV0YWlsL3NpZ25lZF91bnNpZ25lZF90b29scy5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBD
b3B5cmlnaHQgSmVucyBNYXVyZXIgMjAwNgotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCBy
ZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIEJP
T1NUX1JBTkRPTV9ERVRBSUxfU0lHTkVEX1VOU0lHTkVEX1RPT0xTCi0jZGVmaW5lIEJPT1NUX1JB
TkRPTV9ERVRBSUxfU0lHTkVEX1VOU0lHTkVEX1RPT0xTCi0KLSNpbmNsdWRlIDxib29zdC9saW1p
dHMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFu
ZG9tL3RyYWl0cy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgcmFuZG9tIHsK
LW5hbWVzcGFjZSBkZXRhaWwgewotCi0KLS8qCi0gKiBDb21wdXRlIHggLSB5LCB3ZSBrbm93IHRo
YXQgeCA+PSB5LCByZXR1cm4gYW4gdW5zaWduZWQgdmFsdWUuCi0gKi8KLQotdGVtcGxhdGU8Y2xh
c3MgVCwgYm9vbCBzZ24gPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19zaWduZWQgJiYgc3Rk
OjpudW1lcmljX2xpbWl0czxUPjo6aXNfYm91bmRlZD4KLXN0cnVjdCBzdWJ0cmFjdCB7IH07Ci0K
LXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3Qgc3VidHJhY3Q8VCwgLyogc2lnbmVkICovIGZhbHNl
PgotewotICB0eXBlZGVmIFQgcmVzdWx0X3R5cGU7Ci0gIHJlc3VsdF90eXBlIG9wZXJhdG9yKCko
VCB4LCBUIHkpIHsgcmV0dXJuIHggLSB5OyB9Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3Ry
dWN0IHN1YnRyYWN0PFQsIC8qIHNpZ25lZCAqLyB0cnVlPgotewotICB0eXBlZGVmIHR5cGVuYW1l
IGJvb3N0OjpyYW5kb206OnRyYWl0czo6bWFrZV91bnNpZ25lZF9vcl91bmJvdW5kZWQ8VD46OnR5
cGUgcmVzdWx0X3R5cGU7Ci0gIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoVCB4LCBUIHkpCi0gIHsK
LSAgICBpZiAoeSA+PSAwKSAgIC8vIGJlY2F1c2UgeCA+PSB5LCBpdCBmb2xsb3dzIHRoYXQgeCA+
PSAwLCB0b28KLSAgICAgIHJldHVybiByZXN1bHRfdHlwZSh4KSAtIHJlc3VsdF90eXBlKHkpOwot
ICAgIGlmICh4ID49IDApICAgLy8geSA8IDAKLSAgICAgIC8vIGF2b2lkIHRoZSBuYXN0eSB0d28n
cyBjb21wbGVtZW50IGNhc2UgZm9yIHkgPT0gbWluKCkKLSAgICAgIHJldHVybiByZXN1bHRfdHlw
ZSh4KSArIHJlc3VsdF90eXBlKC0oeSsxKSkgKyAxOwotICAgIC8vIGJvdGggeCBhbmQgeSBhcmUg
bmVnYXRpdmU6IG5vIHNpZ25lZCBvdmVyZmxvdwotICAgIHJldHVybiByZXN1bHRfdHlwZSh4IC0g
eSk7Ci0gIH0KLX07Ci0KLS8qCi0gKiBDb21wdXRlIHggKyB5LCB4IGlzIHVuc2lnbmVkLCByZXN1
bHQgZml0cyBpbiB0eXBlIG9mICJ5Ii4KLSAqLwotCi10ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3Mg
VDIsIGJvb2wgc2duID0gKHN0ZDo6bnVtZXJpY19saW1pdHM8VDI+Ojppc19zaWduZWQgJiYgKHN0
ZDo6bnVtZXJpY19saW1pdHM8VDE+OjpkaWdpdHMgPj0gc3RkOjpudW1lcmljX2xpbWl0czxUMj46
OmRpZ2l0cykpPgotc3RydWN0IGFkZCB7IH07Ci0KLXRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBU
Mj4KLXN0cnVjdCBhZGQ8VDEsIFQyLCAvKiBzaWduZWQgb3IgZWxzZSBUMiBoYXMgbW9yZSBkaWdp
dHMgdGhhbiBUMSBzbyB0aGUgY2FzdCBhbHdheXMgd29ya3MgLSBuZWVkZWQgd2hlbiBUMiBpcyBh
IG11bHRpcHJlY2lzaW9uIHR5cGUgYW5kIFQxIGlzIGEgbmF0aXZlIGludGVnZXIgKi8gZmFsc2U+
Ci17Ci0gIHR5cGVkZWYgVDIgcmVzdWx0X3R5cGU7Ci0gIHJlc3VsdF90eXBlIG9wZXJhdG9yKCko
VDEgeCwgVDIgeSkgeyByZXR1cm4gVDIoeCkgKyB5OyB9Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBU
MSwgY2xhc3MgVDI+Ci1zdHJ1Y3QgYWRkPFQxLCBUMiwgLyogc2lnbmVkICovIHRydWU+Ci17Ci0g
IHR5cGVkZWYgVDIgcmVzdWx0X3R5cGU7Ci0gIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoVDEgeCwg
VDIgeSkKLSAgewotICAgIGlmICh5ID49IDApCi0gICAgICByZXR1cm4gVDIoeCkgKyB5OwotICAg
IC8vIHkgPCAwCi0gICAgaWYgKHggPiBUMSgtKHkrMSkpKSAgLy8gcmVzdWx0ID49IDAgYWZ0ZXIg
c3VidHJhY3Rpb24KLSAgICAgIC8vIGF2b2lkIHRoZSBuYXN0eSB0d28ncyBjb21wbGVtZW50IGVk
Z2UgY2FzZSBmb3IgeSA9PSBtaW4oKQotICAgICAgcmV0dXJuIFQyKHggLSBUMSgtKHkrMSkpIC0g
MSk7Ci0gICAgLy8gYWJzKHgpIDwgYWJzKHkpLCB0aHVzIFQyIGFibGUgdG8gcmVwcmVzZW50IHgK
LSAgICByZXR1cm4gVDIoeCkgKyB5OwotICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwK
LX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8v
IEJPT1NUX1JBTkRPTV9ERVRBSUxfU0lHTkVEX1VOU0lHTkVEX1RPT0xTCi0KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9kZXRhaWwv
dW5pZm9ybV9pbnRfZmxvYXQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcmFuZG9tL2RldGFpbC91bmlmb3JtX2ludF9mbG9hdC5ocHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM5M2M0NTViY2RlYTc2NjdiYTM1ZWQ3ZjMyNGYyNzhlZWIzZTQx
OTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2RldGFpbC91bmlmb3Jt
X2ludF9mbG9hdC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKiBib29zdCBy
YW5kb20vZGV0YWlsL3VuaWZvcm1faW50X2Zsb2F0LmhwcCBoZWFkZXIgZmlsZQotICoKLSAqIENv
cHlyaWdodCBKZW5zIE1hdXJlciAyMDAwLTIwMDEKLSAqIENvcHlyaWdodCBTdGV2ZW4gV2F0YW5h
YmUgMjAxMQotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICoK
LSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNs
dWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgotICovCi0KLSNpZm5kZWYgQk9P
U1RfUkFORE9NX0RFVEFJTF9VTklGT1JNX0lOVF9GTE9BVF9IUFAKLSNkZWZpbmUgQk9PU1RfUkFO
RE9NX0RFVEFJTF9VTklGT1JNX0lOVF9GTE9BVF9IUFAKLQotI2luY2x1ZGUgPGJvb3N0L2xpbWl0
cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRl
Z2VyLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2NvbmZpZy5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9nZW5lcmF0b3JfYml0cy5ocHA+Ci0KLSNpbmNsdWRl
IDxib29zdC9yYW5kb20vZGV0YWlsL2Rpc2FibGVfd2FybmluZ3MuaHBwPgotCi1uYW1lc3BhY2Ug
Ym9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci1uYW1lc3BhY2UgZGV0YWlsIHsKLQotdGVtcGxh
dGU8Y2xhc3MgVVJORz4KLWNsYXNzIHVuaWZvcm1faW50X2Zsb2F0Ci17Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBVUk5HIGJhc2VfdHlwZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6
cmVzdWx0X3R5cGUgYmFzZV9yZXN1bHQ7Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0Ojp1
aW50X3Q8Ci0gICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPGJvb3N0Ojp1aW50bWF4X3Q+Ojpk
aWdpdHMgPAotICAgICAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxiYXNlX3Jlc3VsdD46OmRp
Z2l0cyk/Ci0gICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8Ym9vc3Q6OnVpbnRtYXhfdD46OmRp
Z2l0cyA6Ci0gICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8YmFzZV9yZXN1bHQ+OjpkaWdpdHMK
LSAgICA+OjpmYXN0IHJlc3VsdF90eXBlOwotCi0gICAgdW5pZm9ybV9pbnRfZmxvYXQoYmFzZV90
eXBlJiBybmcpCi0gICAgICA6IF9ybmcocm5nKSB7fQotCi0gICAgc3RhdGljIHJlc3VsdF90eXBl
IG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKQotICAgIHsgcmV0dXJuIDA7
IH0KLSAgICBzdGF0aWMgcmVzdWx0X3R5cGUgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJ
VFVUSU9OICgpCi0gICAgewotICAgICAgICBzdGQ6OnNpemVfdCBkaWdpdHMgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHJlc3VsdF90eXBlPjo6ZGlnaXRzOwotICAgICAgICBpZihkZXRhaWw6OmdlbmVy
YXRvcl9iaXRzPFVSTkc+Ojp2YWx1ZSgpIDwgZGlnaXRzKSB7Ci0gICAgICAgICAgICBkaWdpdHMg
PSBkZXRhaWw6OmdlbmVyYXRvcl9iaXRzPFVSTkc+Ojp2YWx1ZSgpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiAocmVzdWx0X3R5cGUoMikgPDwgKGRpZ2l0cyAtIDEpKSAtIDE7Ci0gICAgfQot
ICAgIGJhc2VfdHlwZSYgYmFzZSgpIHsgcmV0dXJuIF9ybmc7IH0KLSAgICBjb25zdCBiYXNlX3R5
cGUmIGJhc2UoKSBjb25zdCB7IHJldHVybiBfcm5nOyB9Ci0KLSAgICByZXN1bHRfdHlwZSBvcGVy
YXRvcigpKCkKLSAgICB7Ci0gICAgICAgIGJhc2VfcmVzdWx0IHJhbmdlID0gc3RhdGljX2Nhc3Q8
YmFzZV9yZXN1bHQ+KChtYXgpKCkpKzE7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxyZXN1
bHRfdHlwZT4oX3JuZygpICogcmFuZ2UpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBiYXNlX3R5
cGUmIF9ybmc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLX0gLy8gbmFtZXNwYWNlIHJh
bmRvbQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRh
aWwvZW5hYmxlX3dhcm5pbmdzLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9ERVRBSUxf
VU5JRk9STV9JTlRfRkxPQVRfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZGV0YWlsL3ZlY3Rvcl9pby5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZGV0YWlsL3ZlY3Rvcl9p
by5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NTA4YzIxMGUxMGUwOGM1ZDA3
MDA5NmE0YWNhNGYwMzhlNGJlZDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFu
ZG9tL2RldGFpbC92ZWN0b3JfaW8uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAot
LyogYm9vc3QgcmFuZG9tL3ZlY3Rvcl9pby5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmln
aHQgU3RldmVuIFdhdGFuYWJlIDIwMTEKLSAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotICogYWNjb21wYW55aW5nIGZpbGUg
TElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VO
U0VfMV8wLnR4dCkKLSAqCi0gKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVj
ZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0gKgotICogJElkJAotICovCi0K
LSNpZm5kZWYgQk9PU1RfUkFORE9NX0RFVEFJTF9WRUNUT1JfSU9fSFBQCi0jZGVmaW5lIEJPT1NU
X1JBTkRPTV9ERVRBSUxfVkVDVE9SX0lPX0hQUAotCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1
ZGUgPGlvc2Z3ZD4KLSNpbmNsdWRlIDxpc3RyZWFtPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFt
ZXNwYWNlIHJhbmRvbSB7Ci1uYW1lc3BhY2UgZGV0YWlsIHsKLQotdGVtcGxhdGU8Y2xhc3MgQ2hh
clQsIGNsYXNzIFRyYWl0cywgY2xhc3MgVD4KLXZvaWQgcHJpbnRfdmVjdG9yKHN0ZDo6YmFzaWNf
b3N0cmVhbTxDaGFyVCwgVHJhaXRzPiYgb3MsCi0gICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnZlY3RvcjxUPiYgdmVjKQotewotICAgIHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFQ+Ojpjb25zdF9p
dGVyYXRvcgotICAgICAgICBpdGVyID0gdmVjLmJlZ2luKCksCi0gICAgICAgIGVuZCA9ICB2ZWMu
ZW5kKCk7Ci0gICAgb3MgPDwgb3Mud2lkZW4oJ1snKTsKLSAgICBpZihpdGVyICE9IGVuZCkgewot
ICAgICAgICBvcyA8PCAqaXRlcjsKLSAgICAgICAgKytpdGVyOwotICAgICAgICBmb3IoOyBpdGVy
ICE9IGVuZDsgKytpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBvcyA8PCBvcy53aWRlbign
ICcpIDw8ICppdGVyOwotICAgICAgICB9Ci0gICAgfQotICAgIG9zIDw8IG9zLndpZGVuKCddJyk7
Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIENoYXJULCBjbGFzcyBUcmFpdHMsIGNsYXNzIFQ+Ci12b2lk
IHJlYWRfdmVjdG9yKHN0ZDo6YmFzaWNfaXN0cmVhbTxDaGFyVCwgVHJhaXRzPiYgaXMsIHN0ZDo6
dmVjdG9yPFQ+JiB2ZWMpCi17Ci0gICAgQ2hhclQgY2g7Ci0gICAgaWYoIShpcyA+PiBjaCkpIHsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZihjaCAhPSBpcy53aWRlbignWycpKSB7Ci0g
ICAgICAgIGlzLnB1dGJhY2soY2gpOwotICAgICAgICBpcy5zZXRzdGF0ZShzdGQ6Omlvc19iYXNl
OjpmYWlsYml0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBUIHZhbDsKLSAgICB3aGls
ZShpcyA+PiBzdGQ6OndzID4+IHZhbCkgewotICAgICAgICB2ZWMucHVzaF9iYWNrKHZhbCk7Ci0g
ICAgfQotICAgIGlmKGlzLmZhaWwoKSkgewotICAgICAgICBpcy5jbGVhcigpOwotICAgICAgICBp
ZighKGlzID4+IGNoKSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IGlmKGNoICE9IGlzLndpZGVuKCddJykpIHsKLSAgICAgICAgICAgIGlzLnB1dGJhY2soY2gpOwot
ICAgICAgICAgICAgaXMuc2V0c3RhdGUoc3RkOjppb3NfYmFzZTo6ZmFpbGJpdCk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLX0KLX0KLX0KLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9ERVRBSUxf
VkVDVE9SX0lPX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvcmFuZG9tL2Rpc2NhcmRfYmxvY2suaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2Rpc2NhcmRfYmxvY2suaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2M2YjgyYjg3Zjc1NmE1Yjg0OGFhMTc0ZjUyM2M0Mzk1
ZThlYTUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9kaXNjYXJkX2Js
b2NrLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0vKiBib29zdCByYW5kb20v
ZGlzY2FyZF9ibG9jay5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgSmVucyBNYXVy
ZXIgMjAwMgotICogQ29weXJpZ2h0IFN0ZXZlbiBXYXRhbmFiZSAyMDEwCi0gKiBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAq
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgot
ICoKLSAqICRJZCQKLSAqCi0gKiBSZXZpc2lvbiBoaXN0b3J5Ci0gKiAgMjAwMS0wMy0wMiAgY3Jl
YXRlZAotICovCi0KLSNpZm5kZWYgQk9PU1RfUkFORE9NX0RJU0NBUkRfQkxPQ0tfSFBQCi0jZGVm
aW5lIEJPT1NUX1JBTkRPTV9ESVNDQVJEX0JMT0NLX0hQUAotCi0jaW5jbHVkZSA8aW9zdHJlYW0+
Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9jc3RkaW50Lmhw
cD4KLSNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3N0YXRpY19h
c3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvY29uZmlnLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL3NlZWQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3Jh
bmRvbS9kZXRhaWwvc2VlZF9pbXBsLmhwcD4KLQotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNw
YWNlIHJhbmRvbSB7Ci0KLS8qKgotICogVGhlIGNsYXNzIHRlbXBsYXRlIFxkaXNjYXJkX2Jsb2Nr
X2VuZ2luZSBpcyBhIG1vZGVsIG9mCi0gKiBccHNldWRvX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9y
LiAgSXQgbW9kaWZpZXMKLSAqIGFub3RoZXIgZ2VuZXJhdG9yIGJ5IGRpc2NhcmRpbmcgcGFydHMg
b2YgaXRzIG91dHB1dC4KLSAqIE91dCBvZiBldmVyeSBibG9jayBvZiBAYyBwIHJlc3VsdHMsIHRo
ZSBmaXJzdCBAYyByCi0gKiB3aWxsIGJlIHJldHVybmVkIGFuZCB0aGUgcmVzdCBkaXNjYXJkZWQu
Ci0gKgotICogUmVxdWlyZXM6IDAgPCBwIDw9IHIKLSAqLwotdGVtcGxhdGU8Y2xhc3MgVW5pZm9y
bVJhbmRvbU51bWJlckdlbmVyYXRvciwgc3RkOjpzaXplX3QgcCwgc3RkOjpzaXplX3Qgcj4KLWNs
YXNzIGRpc2NhcmRfYmxvY2tfZW5naW5lCi17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6
OnNlZWRfdHlwZTwKLSAgICAgICAgdHlwZW5hbWUgVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRv
cjo6cmVzdWx0X3R5cGU+Ojp0eXBlIHNlZWRfdHlwZTsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIFVu
aWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IgYmFzZV90eXBlOwotICAgIHR5cGVkZWYgdHlwZW5h
bWUgYmFzZV90eXBlOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKLQotICAgIEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChzdGQ6OnNpemVfdCwgYmxvY2tfc2l6ZSA9IHApOwotICAgIEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChzdGQ6OnNpemVfdCwgdXNlZF9ibG9jayA9IHIpOwotCi0gICAgQk9PU1RfU1RB
VElDX0NPTlNUQU5UKGJvb2wsIGhhc19maXhlZF9yYW5nZSA9IGZhbHNlKTsKLSAgICBCT09TVF9T
VEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHRvdGFsX2Jsb2NrID0gcCk7Ci0gICAgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCByZXR1cm5lZF9ibG9jayA9IHIpOwotCi0gICAg
Qk9PU1RfU1RBVElDX0FTU0VSVCh0b3RhbF9ibG9jayA+PSByZXR1cm5lZF9ibG9jayk7Ci0KLSAg
ICAvKiogVXNlcyB0aGUgZGVmYXVsdCBzZWVkIGZvciB0aGUgYmFzZSBnZW5lcmF0b3IuICovCi0g
ICAgZGlzY2FyZF9ibG9ja19lbmdpbmUoKSA6IF9ybmcoKSwgX24oMCkgeyB9Ci0gICAgLyoqIENv
bnN0cnVjdHMgYSBuZXcgXGRpc2NhcmRfYmxvY2tfZW5naW5lIHdpdGggYSBjb3B5IG9mIHJuZy4g
Ki8KLSAgICBleHBsaWNpdCBkaXNjYXJkX2Jsb2NrX2VuZ2luZShjb25zdCBiYXNlX3R5cGUgJiBy
bmcpIDogX3JuZyhybmcpLCBfbigwKSB7IH0KLQotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9SVkFM
VUVfUkVGRVJFTkNFUwotICAgIC8qKiBDb25zdHJ1Y3RzIGEgbmV3IFxkaXNjYXJkX2Jsb2NrX2Vu
Z2luZSB3aXRoIHJuZy4gKi8KLSAgICBleHBsaWNpdCBkaXNjYXJkX2Jsb2NrX2VuZ2luZShiYXNl
X3R5cGUgJiYgcm5nKSA6IF9ybmcocm5nKSwgX24oMCkgeyB9Ci0jZW5kaWYKLQotICAgIC8qKgot
ICAgICAqIENyZWF0ZXMgYSBuZXcgXGRpc2NhcmRfYmxvY2tfZW5naW5lIGFuZCBzZWVkcyB0aGUg
dW5kZXJseWluZwotICAgICAqIGdlbmVyYXRvciB3aXRoIEBjIHZhbHVlCi0gICAgICovCi0gICAg
Qk9PU1RfUkFORE9NX0RFVEFJTF9BUklUSE1FVElDX0NPTlNUUlVDVE9SKGRpc2NhcmRfYmxvY2tf
ZW5naW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWVkX3R5cGUsIHZhbHVlKQotICAgIHsgX3JuZy5zZWVkKHZhbHVlKTsgX24gPSAwOyB9Ci0gICAg
Ci0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBcZGlzY2FyZF9ibG9ja19lbmdpbmUgYW5k
IHNlZWRzIHRoZSB1bmRlcmx5aW5nCi0gICAgICogZ2VuZXJhdG9yIHdpdGggQGMgc2VxCi0gICAg
ICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9TRUVEX1NFUV9DT05TVFJVQ1RPUihkaXNjYXJk
X2Jsb2NrX2VuZ2luZSwgU2VlZFNlcSwgc2VxKQotICAgIHsgX3JuZy5zZWVkKHNlcSk7IF9uID0g
MDsgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgXGRpc2NhcmRfYmxvY2tf
ZW5naW5lIGFuZCBzZWVkcyB0aGUgdW5kZXJseWluZwotICAgICAqIGdlbmVyYXRvciB3aXRoIGZp
cnN0IGFuZCBsYXN0LgotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIEl0PiBkaXNjYXJkX2Js
b2NrX2VuZ2luZShJdCYgZmlyc3QsIEl0IGxhc3QpCi0gICAgICA6IF9ybmcoZmlyc3QsIGxhc3Qp
LCBfbigwKSB7IH0KLSAgICAKLSAgICAvKiogZGVmYXVsdCBzZWVkcyB0aGUgdW5kZXJseWluZyBn
ZW5lcmF0b3IuICovCi0gICAgdm9pZCBzZWVkKCkgeyBfcm5nLnNlZWQoKTsgX24gPSAwOyB9Ci0g
ICAgLyoqIFNlZWRzIHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvciB3aXRoIHMuICovCi0gICAgQk9P
U1RfUkFORE9NX0RFVEFJTF9BUklUSE1FVElDX1NFRUQoZGlzY2FyZF9ibG9ja19lbmdpbmUsIHNl
ZWRfdHlwZSwgcykKLSAgICB7IF9ybmcuc2VlZChzKTsgX24gPSAwOyB9Ci0gICAgLyoqIFNlZWRz
IHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvciB3aXRoIHNlcS4gKi8KLSAgICBCT09TVF9SQU5ET01f
REVUQUlMX1NFRURfU0VRX1NFRUQoZGlzY2FyZF9ibG9ja19lbmdpbmUsIFNlZWRTZXEsIHNlcSkK
LSAgICB7IF9ybmcuc2VlZChzZXEpOyBfbiA9IDA7IH0KLSAgICAvKiogU2VlZHMgdGhlIHVuZGVy
bHlpbmcgZ2VuZXJhdG9yIHdpdGggZmlyc3QgYW5kIGxhc3QuICovCi0gICAgdGVtcGxhdGU8Y2xh
c3MgSXQ+IHZvaWQgc2VlZChJdCYgZmlyc3QsIEl0IGxhc3QpCi0gICAgeyBfcm5nLnNlZWQoZmly
c3QsIGxhc3QpOyBfbiA9IDA7IH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIGVu
Z2luZS4gKi8KLSAgICBjb25zdCBiYXNlX3R5cGUmIGJhc2UoKSBjb25zdCB7IHJldHVybiBfcm5n
OyB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgbmV4dCB2YWx1ZSBvZiB0aGUgZ2VuZXJhdG9yLiAq
LwotICAgIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoKQotICAgIHsKLSAgICAgICAgaWYoX24gPj0g
cmV0dXJuZWRfYmxvY2spIHsKLSAgICAgICAgICAgIC8vIGRpc2NhcmQgdmFsdWVzIG9mIHJhbmRv
bSBudW1iZXIgZ2VuZXJhdG9yCi0gICAgICAgICAgICAvLyBEb24ndCB1c2UgZGlzY2FyZCwgc2lu
Y2Ugd2Ugc3RpbGwgbmVlZCB0bwotICAgICAgICAgICAgLy8gYmUgc29tZXdoYXQgY29tcGF0aWJs
ZSB3aXRoIFRSMS4KLSAgICAgICAgICAgIC8vIF9ybmcuZGlzY2FyZCh0b3RhbF9ibG9jayAtIF9u
KTsKLSAgICAgICAgICAgIGZvcihzdGQ6OnNpemVfdCBpID0gMDsgaSA8IHRvdGFsX2Jsb2NrIC0g
X247ICsraSkgewotICAgICAgICAgICAgICAgIF9ybmcoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIF9uID0gMDsKLSAgICAgICAgfQotICAgICAgICArK19uOwotICAgICAgICByZXR1cm4g
X3JuZygpOwotICAgIH0KLQotICAgIHZvaWQgZGlzY2FyZChib29zdDo6dWludG1heF90IHopCi0g
ICAgewotICAgICAgICBmb3IoYm9vc3Q6OnVpbnRtYXhfdCBqID0gMDsgaiA8IHo7ICsraikgewot
ICAgICAgICAgICAgKCp0aGlzKSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
Y2xhc3MgSXQ+Ci0gICAgdm9pZCBnZW5lcmF0ZShJdCBmaXJzdCwgSXQgbGFzdCkKLSAgICB7IGRl
dGFpbDo6Z2VuZXJhdGUoKnRoaXMsIGZpcnN0LCBsYXN0KTsgfQotCi0gICAgLyoqCi0gICAgICog
UmV0dXJucyB0aGUgc21hbGxlc3QgdmFsdWUgdGhhdCB0aGUgZ2VuZXJhdG9yIGNhbiBwcm9kdWNl
LgotICAgICAqIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIG1pbmltdW0gb2YgdGhlIHVuZGVybHlp
bmcgZ2VuZXJhdG9yLgotICAgICAqLwotICAgIHN0YXRpYyByZXN1bHRfdHlwZSBtaW4gQk9PU1Rf
UFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkKLSAgICB7IHJldHVybiAoYmFzZV90eXBlOjpt
aW4pKCk7IH0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQg
dGhlIGdlbmVyYXRvciBjYW4gcHJvZHVjZS4KLSAgICAgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRo
ZSBtYXhpbXVtIG9mIHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvci4KLSAgICAgKi8KLSAgICBzdGF0
aWMgcmVzdWx0X3R5cGUgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpCi0g
ICAgeyByZXR1cm4gKGJhc2VfdHlwZTo6bWF4KSgpOyB9Ci0KLSNpZm5kZWYgQk9PU1RfUkFORE9N
X05PX1NUUkVBTV9PUEVSQVRPUlMKLSAgICAvKiogV3JpdGVzIGEgXGRpc2NhcmRfYmxvY2tfZW5n
aW5lIHRvIGEgQGMgc3RkOjpvc3RyZWFtLiAqLwotICAgIHRlbXBsYXRlPGNsYXNzIENoYXJULCBj
bGFzcyBUcmFpdHM+Ci0gICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyVCxUcmFpdHM+
JgotICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPENoYXJULFRyYWl0cz4mIG9zLAot
ICAgICAgICAgICAgICAgY29uc3QgZGlzY2FyZF9ibG9ja19lbmdpbmUmIHMpCi0gICAgewotICAg
ICAgICBvcyA8PCBzLl9ybmcgPDwgJyAnIDw8IHMuX247Ci0gICAgICAgIHJldHVybiBvczsKLSAg
ICB9Ci0KLSAgICAvKiogUmVhZHMgYSBcZGlzY2FyZF9ibG9ja19lbmdpbmUgZnJvbSBhIEBjIHN0
ZDo6aXN0cmVhbS4gKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBDaGFyVCwgY2xhc3MgVHJhaXRzPgot
ICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhclQsVHJhaXRzPiYKLSAgICBvcGVyYXRv
cj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxDaGFyVCxUcmFpdHM+JiBpcywgZGlzY2FyZF9ibG9ja19l
bmdpbmUmIHMpCi0gICAgewotICAgICAgICBpcyA+PiBzLl9ybmcgPj4gc3RkOjp3cyA+PiBzLl9u
OwotICAgICAgICByZXR1cm4gaXM7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvKiogUmV0dXJucyB0
cnVlIGlmIHRoZSB0d28gZ2VuZXJhdG9ycyB3aWxsIHByb2R1Y2UgaWRlbnRpY2FsIHNlcXVlbmNl
cy4gKi8KLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRpc2NhcmRfYmxvY2tfZW5n
aW5lJiB4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzY2FyZF9ibG9ja19l
bmdpbmUmIHkpCi0gICAgeyByZXR1cm4geC5fcm5nID09IHkuX3JuZyAmJiB4Ll9uID09IHkuX247
IH0KLSAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gZ2VuZXJhdG9ycyB3aWxsIHByb2R1
Y2UgZGlmZmVyZW50IHNlcXVlbmNlcy4gKi8KLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IGRpc2NhcmRfYmxvY2tfZW5naW5lJiB4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZGlzY2FyZF9ibG9ja19lbmdpbmUmIHkpCi0gICAgeyByZXR1cm4gISh4ID09IHkpOyB9
Ci0KLXByaXZhdGU6Ci0gICAgYmFzZV90eXBlIF9ybmc7Ci0gICAgc3RkOjpzaXplX3QgX247Ci19
OwotCi0jaWZuZGVmIEJPT1NUX05PX0lOQ0xBU1NfTUVNQkVSX0lOSVRJQUxJWkFUSU9OCi0vLyAg
QSBkZWZpbml0aW9uIGlzIHJlcXVpcmVkIGV2ZW4gZm9yIGludGVncmFsIHN0YXRpYyBjb25zdGFu
dHMKLXRlbXBsYXRlPGNsYXNzIFVSTkcsIHN0ZDo6c2l6ZV90IHAsIHN0ZDo6c2l6ZV90IHI+Ci1j
b25zdCBib29sIGRpc2NhcmRfYmxvY2tfZW5naW5lPFVSTkcsIHAsIHI+OjpoYXNfZml4ZWRfcmFu
Z2U7Ci10ZW1wbGF0ZTxjbGFzcyBVUk5HLCBzdGQ6OnNpemVfdCBwLCBzdGQ6OnNpemVfdCByPgot
Y29uc3Qgc3RkOjpzaXplX3QgZGlzY2FyZF9ibG9ja19lbmdpbmU8VVJORywgcCwgcj46OnRvdGFs
X2Jsb2NrOwotdGVtcGxhdGU8Y2xhc3MgVVJORywgc3RkOjpzaXplX3QgcCwgc3RkOjpzaXplX3Qg
cj4KLWNvbnN0IHN0ZDo6c2l6ZV90IGRpc2NhcmRfYmxvY2tfZW5naW5lPFVSTkcsIHAsIHI+Ojpy
ZXR1cm5lZF9ibG9jazsKLXRlbXBsYXRlPGNsYXNzIFVSTkcsIHN0ZDo6c2l6ZV90IHAsIHN0ZDo6
c2l6ZV90IHI+Ci1jb25zdCBzdGQ6OnNpemVfdCBkaXNjYXJkX2Jsb2NrX2VuZ2luZTxVUk5HLCBw
LCByPjo6YmxvY2tfc2l6ZTsKLXRlbXBsYXRlPGNsYXNzIFVSTkcsIHN0ZDo6c2l6ZV90IHAsIHN0
ZDo6c2l6ZV90IHI+Ci1jb25zdCBzdGQ6OnNpemVfdCBkaXNjYXJkX2Jsb2NrX2VuZ2luZTxVUk5H
LCBwLCByPjo6dXNlZF9ibG9jazsKLSNlbmRpZgotCi0vLy8gXGNvbmQgXHNob3dfZGVwcmVjYXRl
ZAotCi10ZW1wbGF0ZTxjbGFzcyBVUk5HLCBpbnQgcCwgaW50IHI+Ci1jbGFzcyBkaXNjYXJkX2Js
b2NrIDogcHVibGljIGRpc2NhcmRfYmxvY2tfZW5naW5lPFVSTkcsIHAsIHI+Ci17Ci0gICAgdHlw
ZWRlZiBkaXNjYXJkX2Jsb2NrX2VuZ2luZTxVUk5HLCBwLCByPiBiYXNlX3Q7Ci1wdWJsaWM6Ci0g
ICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3Q6OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwotICAg
IGRpc2NhcmRfYmxvY2soKSB7fQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgZGlzY2FyZF9i
bG9jayhUJiBhcmcpIDogYmFzZV90KGFyZykge30KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAg
IGRpc2NhcmRfYmxvY2soY29uc3QgVCYgYXJnKSA6IGJhc2VfdChhcmcpIHt9Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgSXQ+Ci0gICAgZGlzY2FyZF9ibG9jayhJdCYgZmlyc3QsIEl0IGxhc3QpIDogYmFz
ZV90KGZpcnN0LCBsYXN0KSB7fQotICAgIHJlc3VsdF90eXBlIG1pbiBCT09TVF9QUkVWRU5UX01B
Q1JPX1NVQlNUSVRVVElPTiAoKQotICAgIHsgcmV0dXJuICh0aGlzLT5iYXNlKCkubWluKSgpOyB9
Ci0gICAgcmVzdWx0X3R5cGUgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgp
Ci0gICAgeyByZXR1cm4gKHRoaXMtPmJhc2UoKS5tYXgpKCk7IH0KLX07Ci0KLS8vLyBcZW5kY29u
ZAotCi1uYW1lc3BhY2UgZGV0YWlsIHsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuZ2luZT4KLSAg
ICBzdHJ1Y3QgZ2VuZXJhdG9yX2JpdHM7Ci0gICAgCi0gICAgdGVtcGxhdGU8Y2xhc3MgVVJORywg
c3RkOjpzaXplX3QgcCwgc3RkOjpzaXplX3Qgcj4KLSAgICBzdHJ1Y3QgZ2VuZXJhdG9yX2JpdHM8
ZGlzY2FyZF9ibG9ja19lbmdpbmU8VVJORywgcCwgcj4gPiB7Ci0gICAgICAgIHN0YXRpYyBzdGQ6
OnNpemVfdCB2YWx1ZSgpIHsgcmV0dXJuIGdlbmVyYXRvcl9iaXRzPFVSTkc+Ojp2YWx1ZSgpOyB9
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIFVSTkcsIGludCBwLCBpbnQgcj4KLSAgICBz
dHJ1Y3QgZ2VuZXJhdG9yX2JpdHM8ZGlzY2FyZF9ibG9jazxVUk5HLCBwLCByPiA+IHsKLSAgICAg
ICAgc3RhdGljIHN0ZDo6c2l6ZV90IHZhbHVlKCkgeyByZXR1cm4gZ2VuZXJhdG9yX2JpdHM8VVJO
Rz46OnZhbHVlKCk7IH0KLSAgICB9OwotCi19Ci0KLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotCi19
IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfUkFORE9NX0RJU0NBUkRfQkxP
Q0tfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9yYW5kb20vZGlzY3JldGVfZGlzdHJpYnV0aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9kaXNjcmV0ZV9kaXN0cmlidXRpb24uaHBw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDE0ZDRhMDJjN2VjMjYxNzBiZjIzY2Mz
Yjg3YWFkMGFmNmYzZTM2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9k
aXNjcmV0ZV9kaXN0cmlidXRpb24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjM2ICswLDAgQEAK
LS8qIGJvb3N0IHJhbmRvbS9kaXNjcmV0ZV9kaXN0cmlidXRpb24uaHBwIGhlYWRlciBmaWxlCi0g
KgotICogQ29weXJpZ2h0IFN0ZXZlbiBXYXRhbmFiZSAyMDA5LTIwMTEKLSAqIERpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotICog
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAqIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqCi0gKiBTZWUgaHR0cDovL3d3dy5ib29z
dC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0g
KgotICogJElkJAotICovCi0KLSNpZm5kZWYgQk9PU1RfUkFORE9NX0RJU0NSRVRFX0RJU1RSSUJV
VElPTl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0RJU0NSRVRFX0RJU1RSSUJV
VElPTl9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxsaW1pdHM+
Ci0jaW5jbHVkZSA8bnVtZXJpYz4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPGl0ZXJh
dG9yPgotI2luY2x1ZGUgPGJvb3N0L2Fzc2VydC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9t
L3VuaWZvcm1fMDEuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS91bmlmb3JtX2ludF9kaXN0
cmlidXRpb24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvY29uZmlnLmhwcD4K
LSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL29wZXJhdG9ycy5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvcmFuZG9tL2RldGFpbC92ZWN0b3JfaW8uaHBwPgotCi0jaWZuZGVmIEJPT1NUX05PX0NY
WDExX0hEUl9JTklUSUFMSVpFUl9MSVNUCi0jaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KLSNl
bmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcmFuZ2UvYmVnaW4uaHBwPgotI2luY2x1ZGUgPGJvb3N0
L3JhbmdlL2VuZC5ocHA+Ci0KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2Rpc2FibGVf
d2FybmluZ3MuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci1u
YW1lc3BhY2UgZGV0YWlsIHsKLQotdGVtcGxhdGU8Y2xhc3MgSW50VHlwZSwgY2xhc3MgV2VpZ2h0
VHlwZT4KLXN0cnVjdCBpbnRlZ2VyX2FsaWFzX3RhYmxlIHsKLSAgICBXZWlnaHRUeXBlIGdldF93
ZWlnaHQoSW50VHlwZSBiaW4pIGNvbnN0IHsKLSAgICAgICAgV2VpZ2h0VHlwZSByZXN1bHQgPSBf
YXZlcmFnZTsKLSAgICAgICAgaWYoYmluIDwgX2V4Y2VzcykgKytyZXN1bHQ7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHRlbXBsYXRlPGNsYXNzIEl0ZXI+Ci0gICAgV2VpZ2h0
VHlwZSBpbml0X2F2ZXJhZ2UoSXRlciBiZWdpbiwgSXRlciBlbmQpIHsKLSAgICAgICAgV2VpZ2h0
VHlwZSB3ZWlnaHRfYXZlcmFnZSA9IDA7Ci0gICAgICAgIEludFR5cGUgZXhjZXNzID0gMDsKLSAg
ICAgICAgSW50VHlwZSBuID0gMDsKLSAgICAgICAgLy8gd2VpZ2h0X2F2ZXJhZ2UgKiBuICsgZXhj
ZXNzID09IGN1cnJlbnQgcGFydGlhbCBzdW0KLSAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCBtZXNz
eSwgYnV0IGl0J3MgZ3VhcmFudGVlZCBub3QgdG8gb3ZlcmZsb3cKLSAgICAgICAgZm9yKEl0ZXIg
aXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICArK247Ci0g
ICAgICAgICAgICBpZigqaXRlciA8IHdlaWdodF9hdmVyYWdlKSB7Ci0gICAgICAgICAgICAgICAg
V2VpZ2h0VHlwZSBkaWZmID0gd2VpZ2h0X2F2ZXJhZ2UgLSAqaXRlcjsKLSAgICAgICAgICAgICAg
ICB3ZWlnaHRfYXZlcmFnZSAtPSBkaWZmIC8gbjsKLSAgICAgICAgICAgICAgICBpZihkaWZmICUg
biA+IGV4Y2VzcykgewotICAgICAgICAgICAgICAgICAgICAtLXdlaWdodF9hdmVyYWdlOwotICAg
ICAgICAgICAgICAgICAgICBleGNlc3MgKz0gbiAtIGRpZmYgJSBuOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VzcyAtPSBkaWZmICUgbjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFdlaWdo
dFR5cGUgZGlmZiA9ICppdGVyIC0gd2VpZ2h0X2F2ZXJhZ2U7Ci0gICAgICAgICAgICAgICAgd2Vp
Z2h0X2F2ZXJhZ2UgKz0gZGlmZiAvIG47Ci0gICAgICAgICAgICAgICAgaWYoZGlmZiAlIG4gPCBu
IC0gZXhjZXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VzcyArPSBkaWZmICUgbjsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICArK3dlaWdodF9hdmVy
YWdlOwotICAgICAgICAgICAgICAgICAgICBleGNlc3MgLT0gbiAtIGRpZmYgJSBuOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBfYWxpYXNfdGFi
bGUucmVzaXplKHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihuKSk7Ci0gICAgICAgIF9hdmVyYWdl
ID0gd2VpZ2h0X2F2ZXJhZ2U7Ci0gICAgICAgIF9leGNlc3MgPSBleGNlc3M7Ci0gICAgICAgIHJl
dHVybiB3ZWlnaHRfYXZlcmFnZTsKLSAgICB9Ci0gICAgdm9pZCBpbml0X2VtcHR5KCkKLSAgICB7
Ci0gICAgICAgIF9hbGlhc190YWJsZS5jbGVhcigpOwotICAgICAgICBfYWxpYXNfdGFibGUucHVz
aF9iYWNrKHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PFdlaWdodFR5cGU+KDEpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEludFR5
cGU+KDApKSk7Ci0gICAgICAgIF9hdmVyYWdlID0gc3RhdGljX2Nhc3Q8V2VpZ2h0VHlwZT4oMSk7
Ci0gICAgICAgIF9leGNlc3MgPSBzdGF0aWNfY2FzdDxJbnRUeXBlPigwKTsKLSAgICB9Ci0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGludGVnZXJfYWxpYXNfdGFibGUmIG90aGVyKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIF9hbGlhc190YWJsZSA9PSBvdGhlci5fYWxpYXNfdGFibGUg
JiYKLSAgICAgICAgICAgIF9hdmVyYWdlID09IG90aGVyLl9hdmVyYWdlICYmIF9leGNlc3MgPT0g
b3RoZXIuX2V4Y2VzczsKLSAgICB9Ci0gICAgc3RhdGljIFdlaWdodFR5cGUgbm9ybWFsaXplKFdl
aWdodFR5cGUgdmFsLCBXZWlnaHRUeXBlIGF2ZXJhZ2UpCi0gICAgewotICAgICAgICByZXR1cm4g
dmFsOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBub3JtYWxpemUoc3RkOjp2ZWN0b3I8V2VpZ2h0
VHlwZT4mKSB7fQotICAgIHRlbXBsYXRlPGNsYXNzIFVSTkc+Ci0gICAgV2VpZ2h0VHlwZSB0ZXN0
KFVSTkcgJnVybmcpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdW5pZm9ybV9pbnRfZGlz
dHJpYnV0aW9uPFdlaWdodFR5cGU+KDAsIF9hdmVyYWdlKSh1cm5nKTsKLSAgICB9Ci0gICAgYm9v
bCBhY2NlcHQoSW50VHlwZSByZXN1bHQsIFdlaWdodFR5cGUgdmFsKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdCA8IF9leGNlc3MgfHwgdmFsIDwgX2F2ZXJhZ2U7Ci0gICAgfQot
ICAgIHN0YXRpYyBXZWlnaHRUeXBlIHRyeV9nZXRfc3VtKGNvbnN0IHN0ZDo6dmVjdG9yPFdlaWdo
dFR5cGU+JiB3ZWlnaHRzKQotICAgIHsKLSAgICAgICAgV2VpZ2h0VHlwZSByZXN1bHQgPSBzdGF0
aWNfY2FzdDxXZWlnaHRUeXBlPigwKTsKLSAgICAgICAgZm9yKHR5cGVuYW1lIHN0ZDo6dmVjdG9y
PFdlaWdodFR5cGU+Ojpjb25zdF9pdGVyYXRvcgotICAgICAgICAgICAgICAgIGl0ZXIgPSB3ZWln
aHRzLmJlZ2luKCksIGVuZCA9IHdlaWdodHMuZW5kKCk7Ci0gICAgICAgICAgICBpdGVyICE9IGVu
ZDsgKytpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZigoc3RkOjpudW1lcmljX2xpbWl0
czxXZWlnaHRUeXBlPjo6bWF4KSgpIC0gcmVzdWx0ID4gKml0ZXIpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V2VpZ2h0VHlwZT4oMCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXN1bHQgKz0gKml0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVVJORz4KLSAgICBzdGF0aWMgV2VpZ2h0VHlw
ZSBnZW5lcmF0ZV9pbl9yYW5nZShVUk5HICZ1cm5nLCBXZWlnaHRUeXBlIG1heCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248V2VpZ2h0VHlwZT4oCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxXZWlnaHRUeXBlPigwKSwgbWF4LTEpKHVybmcpOwotICAgIH0K
LSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxXZWlnaHRUeXBlLCBJbnRUeXBlPiA+
IGFsaWFzX3RhYmxlX3Q7Ci0gICAgYWxpYXNfdGFibGVfdCBfYWxpYXNfdGFibGU7Ci0gICAgV2Vp
Z2h0VHlwZSBfYXZlcmFnZTsKLSAgICBJbnRUeXBlIF9leGNlc3M7Ci19OwotCi10ZW1wbGF0ZTxj
bGFzcyBJbnRUeXBlLCBjbGFzcyBXZWlnaHRUeXBlPgotc3RydWN0IHJlYWxfYWxpYXNfdGFibGUg
ewotICAgIFdlaWdodFR5cGUgZ2V0X3dlaWdodChJbnRUeXBlKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIFdlaWdodFR5cGUoMS4wKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgSXRl
cj4KLSAgICBXZWlnaHRUeXBlIGluaXRfYXZlcmFnZShJdGVyIGZpcnN0LCBJdGVyIGxhc3QpCi0g
ICAgewotICAgICAgICBzdGQ6OnNpemVfdCBzaXplID0gc3RkOjpkaXN0YW5jZShmaXJzdCwgbGFz
dCk7Ci0gICAgICAgIFdlaWdodFR5cGUgd2VpZ2h0X3N1bSA9Ci0gICAgICAgICAgICBzdGQ6OmFj
Y3VtdWxhdGUoZmlyc3QsIGxhc3QsIHN0YXRpY19jYXN0PFdlaWdodFR5cGU+KDApKTsKLSAgICAg
ICAgX2FsaWFzX3RhYmxlLnJlc2l6ZShzaXplKTsKLSAgICAgICAgcmV0dXJuIHdlaWdodF9zdW0g
LyBzaXplOwotICAgIH0KLSAgICB2b2lkIGluaXRfZW1wdHkoKQotICAgIHsKLSAgICAgICAgX2Fs
aWFzX3RhYmxlLmNsZWFyKCk7Ci0gICAgICAgIF9hbGlhc190YWJsZS5wdXNoX2JhY2soc3RkOjpt
YWtlX3BhaXIoc3RhdGljX2Nhc3Q8V2VpZ2h0VHlwZT4oMSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW50VHlwZT4oMCkpKTsKLSAg
ICB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJlYWxfYWxpYXNfdGFibGUmIG90aGVyKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIF9hbGlhc190YWJsZSA9PSBvdGhlci5fYWxpYXNf
dGFibGU7Ci0gICAgfQotICAgIHN0YXRpYyBXZWlnaHRUeXBlIG5vcm1hbGl6ZShXZWlnaHRUeXBl
IHZhbCwgV2VpZ2h0VHlwZSBhdmVyYWdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbCAvIGF2
ZXJhZ2U7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZShzdGQ6OnZlY3RvcjxXZWln
aHRUeXBlPiYgd2VpZ2h0cykKLSAgICB7Ci0gICAgICAgIFdlaWdodFR5cGUgc3VtID0KLSAgICAg
ICAgICAgIHN0ZDo6YWNjdW11bGF0ZSh3ZWlnaHRzLmJlZ2luKCksIHdlaWdodHMuZW5kKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V2VpZ2h0VHlwZT4oMCkpOwot
ICAgICAgICBmb3IodHlwZW5hbWUgc3RkOjp2ZWN0b3I8V2VpZ2h0VHlwZT46Oml0ZXJhdG9yCi0g
ICAgICAgICAgICAgICAgaXRlciA9IHdlaWdodHMuYmVnaW4oKSwKLSAgICAgICAgICAgICAgICBl
bmQgPSB3ZWlnaHRzLmVuZCgpOwotICAgICAgICAgICAgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgKml0ZXIgLz0gc3VtOwotICAgICAgICB9Ci0gICAgfQotICAg
IHRlbXBsYXRlPGNsYXNzIFVSTkc+Ci0gICAgV2VpZ2h0VHlwZSB0ZXN0KFVSTkcgJnVybmcpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdW5pZm9ybV8wMTxXZWlnaHRUeXBlPigpKHVybmcp
OwotICAgIH0KLSAgICBib29sIGFjY2VwdChJbnRUeXBlLCBXZWlnaHRUeXBlKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHN0YXRpYyBXZWlnaHRUeXBlIHRy
eV9nZXRfc3VtKGNvbnN0IHN0ZDo6dmVjdG9yPFdlaWdodFR5cGU+JiB3ZWlnaHRzKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlaWdodFR5cGU+KDEpOwotICAgIH0KLSAgICB0
ZW1wbGF0ZTxjbGFzcyBVUk5HPgotICAgIHN0YXRpYyBXZWlnaHRUeXBlIGdlbmVyYXRlX2luX3Jh
bmdlKFVSTkcgJnVybmcsIFdlaWdodFR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gdW5pZm9y
bV8wMTxXZWlnaHRUeXBlPigpKHVybmcpOwotICAgIH0KLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9y
PHN0ZDo6cGFpcjxXZWlnaHRUeXBlLCBJbnRUeXBlPiA+IGFsaWFzX3RhYmxlX3Q7Ci0gICAgYWxp
YXNfdGFibGVfdCBfYWxpYXNfdGFibGU7Ci19OwotCi10ZW1wbGF0ZTxib29sIElzSW50ZWdyYWw+
Ci1zdHJ1Y3Qgc2VsZWN0X2FsaWFzX3RhYmxlOwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qgc2VsZWN0
X2FsaWFzX3RhYmxlPHRydWU+IHsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBJbnRUeXBlLCBjbGFzcyBX
ZWlnaHRUeXBlPgotICAgIHN0cnVjdCBhcHBseSB7Ci0gICAgICAgIHR5cGVkZWYgaW50ZWdlcl9h
bGlhc190YWJsZTxJbnRUeXBlLCBXZWlnaHRUeXBlPiB0eXBlOwotICAgIH07Ci19OwotCi10ZW1w
bGF0ZTw+Ci1zdHJ1Y3Qgc2VsZWN0X2FsaWFzX3RhYmxlPGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgSW50VHlwZSwgY2xhc3MgV2VpZ2h0VHlwZT4KLSAgICBzdHJ1Y3QgYXBwbHkgewotICAg
ICAgICB0eXBlZGVmIHJlYWxfYWxpYXNfdGFibGU8SW50VHlwZSwgV2VpZ2h0VHlwZT4gdHlwZTsK
LSAgICB9OwotfTsKLQotfQotCi0vKioKLSAqIFRoZSBjbGFzcyBAYyBkaXNjcmV0ZV9kaXN0cmli
dXRpb24gbW9kZWxzIGEgXHJhbmRvbV9kaXN0cmlidXRpb24uCi0gKiBJdCBwcm9kdWNlcyBpbnRl
Z2VycyBpbiB0aGUgcmFuZ2UgWzAsIG4pIHdpdGggdGhlIHByb2JhYmlsaXR5Ci0gKiBvZiBwcm9k
dWNpbmcgZWFjaCB2YWx1ZSBpcyBzcGVjaWZpZWQgYnkgdGhlIHBhcmFtZXRlcnMgb2YgdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKi8KLXRlbXBsYXRlPGNsYXNzIEludFR5cGUgPSBpbnQsIGNsYXNz
IFdlaWdodFR5cGUgPSBkb3VibGU+Ci1jbGFzcyBkaXNjcmV0ZV9kaXN0cmlidXRpb24gewotcHVi
bGljOgotICAgIHR5cGVkZWYgV2VpZ2h0VHlwZSBpbnB1dF90eXBlOwotICAgIHR5cGVkZWYgSW50
VHlwZSByZXN1bHRfdHlwZTsKLQotICAgIGNsYXNzIHBhcmFtX3R5cGUgewotICAgIHB1YmxpYzoK
LQotICAgICAgICB0eXBlZGVmIGRpc2NyZXRlX2Rpc3RyaWJ1dGlvbiBkaXN0cmlidXRpb25fdHlw
ZTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc3RydWN0cyBhIEBjIHBhcmFtX3R5cGUg
b2JqZWN0LCByZXByZXNlbnRpbmcgYSBkaXN0cmlidXRpb24KLSAgICAgICAgICogd2l0aCBcZiRw
KDApID0gMVxmJCBhbmQgXGYkcChrfGs+MCkgPSAwXGYkLgotICAgICAgICAgKi8KLSAgICAgICAg
cGFyYW1fdHlwZSgpIDogX3Byb2JhYmlsaXRpZXMoMSwgc3RhdGljX2Nhc3Q8V2VpZ2h0VHlwZT4o
MSkpIHt9Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBJZiBAYyBmaXJzdCA9PSBAYyBsYXN0LCBl
cXVpdmFsZW50IHRvIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgICAgICAgKiBPdGhlcndp
c2UsIHRoZSB2YWx1ZXMgb2YgdGhlIHJhbmdlIHJlcHJlc2VudCB3ZWlnaHRzIGZvciB0aGUKLSAg
ICAgICAgICogcG9zc2libGUgdmFsdWVzIG9mIHRoZSBkaXN0cmlidXRpb24uCi0gICAgICAgICAq
LwotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBJdGVyPgotICAgICAgICBwYXJhbV90eXBlKEl0ZXIg
Zmlyc3QsIEl0ZXIgbGFzdCkgOiBfcHJvYmFiaWxpdGllcyhmaXJzdCwgbGFzdCkKLSAgICAgICAg
ewotICAgICAgICAgICAgbm9ybWFsaXplKCk7Ci0gICAgICAgIH0KLSNpZm5kZWYgQk9PU1RfTk9f
Q1hYMTFfSERSX0lOSVRJQUxJWkVSX0xJU1QKLSAgICAgICAgLyoqCi0gICAgICAgICAqIElmIHds
LnNpemUoKSA9PSAwLCBlcXVpdmFsZW50IHRvIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yLgotICAg
ICAgICAgKiBPdGhlcndpc2UsIHRoZSB2YWx1ZXMgb2YgdGhlIEBjIGluaXRpYWxpemVyX2xpc3Qg
cmVwcmVzZW50Ci0gICAgICAgICAqIHdlaWdodHMgZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2Yg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIHBhcmFtX3R5cGUoY29uc3Qg
c3RkOjppbml0aWFsaXplcl9saXN0PFdlaWdodFR5cGU+JiB3bCkKLSAgICAgICAgICA6IF9wcm9i
YWJpbGl0aWVzKHdsKQotICAgICAgICB7Ci0gICAgICAgICAgICBub3JtYWxpemUoKTsKLSAgICAg
ICAgfQotI2VuZGlmCi0gICAgICAgIC8qKgotICAgICAgICAgKiBJZiB0aGUgcmFuZ2UgaXMgZW1w
dHksIGVxdWl2YWxlbnQgdG8gdGhlIGRlZmF1bHQgY29uc3RydWN0b3IuCi0gICAgICAgICAqIE90
aGVyd2lzZSwgdGhlIGVsZW1lbnRzIG9mIHRoZSByYW5nZSByZXByZXNlbnQKLSAgICAgICAgICog
d2VpZ2h0cyBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGlzdHJpYnV0aW9uLgotICAg
ICAgICAgKi8KLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgUmFuZ2U+Ci0gICAgICAgIGV4cGxpY2l0
IHBhcmFtX3R5cGUoY29uc3QgUmFuZ2UmIHJhbmdlKQotICAgICAgICAgIDogX3Byb2JhYmlsaXRp
ZXMoYm9vc3Q6OmJlZ2luKHJhbmdlKSwgYm9vc3Q6OmVuZChyYW5nZSkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG5vcm1hbGl6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAqIElmIG53IGlzIHplcm8sIGVxdWl2YWxlbnQgdG8gdGhlIGRlZmF1bHQgY29uc3RydWN0b3Iu
Ci0gICAgICAgICAqIE90aGVyd2lzZSwgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24gaXMg
WzAsIG53KSwKLSAgICAgICAgICogYW5kIHRoZSB3ZWlnaHRzIGFyZSBmb3VuZCBieSAgY2FsbGlu
ZyBmdyB3aXRoIHZhbHVlcwotICAgICAgICAgKiBldmVubHkgZGlzdHJpYnV0ZWQgYmV0d2VlbiBc
ZiRcbWJveHt4bWlufSArIFxkZWx0YS8yXGYkIGFuZAotICAgICAgICAgKiBcZiRcbWJveHt4bWF4
fSAtIFxkZWx0YS8yXGYkLCB3aGVyZQotICAgICAgICAgKiBcZiRcZGVsdGEgPSAoXG1ib3h7eG1h
eH0gLSBcbWJveHt4bWlufSkvXG1ib3h7bnd9XGYkLgotICAgICAgICAgKi8KLSAgICAgICAgdGVt
cGxhdGU8Y2xhc3MgRnVuYz4KLSAgICAgICAgcGFyYW1fdHlwZShzdGQ6OnNpemVfdCBudywgZG91
YmxlIHhtaW4sIGRvdWJsZSB4bWF4LCBGdW5jIGZ3KQotICAgICAgICB7Ci0gICAgICAgICAgICBz
dGQ6OnNpemVfdCBuID0gKG53ID09IDApID8gMSA6IG53OwotICAgICAgICAgICAgZG91YmxlIGRl
bHRhID0gKHhtYXggLSB4bWluKSAvIG47Ci0gICAgICAgICAgICBCT09TVF9BU1NFUlQoZGVsdGEg
PiAwKTsKLSAgICAgICAgICAgIGZvcihzdGQ6OnNpemVfdCBrID0gMDsgayA8IG47ICsraykgewot
ICAgICAgICAgICAgICAgIF9wcm9iYWJpbGl0aWVzLnB1c2hfYmFjayhmdyh4bWluICsgaypkZWx0
YSArIGRlbHRhLzIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5vcm1hbGl6ZSgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgYSB2ZWN0b3IgY29u
dGFpbmluZyB0aGUgcHJvYmFiaWxpdGllcyBvZiBlYWNoIHBvc3NpYmxlCi0gICAgICAgICAqIHZh
bHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCi0gICAgICAgICAqLwotICAgICAgICBzdGQ6OnZlY3Rv
cjxXZWlnaHRUeXBlPiBwcm9iYWJpbGl0aWVzKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIF9wcm9iYWJpbGl0aWVzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqIFdyaXRl
cyB0aGUgcGFyYW1ldGVycyB0byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICAgICAgQk9PU1Rf
UkFORE9NX0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCBwYXJhbV90eXBlLCBwYXJtKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBkZXRhaWw6OnByaW50X3ZlY3RvcihvcywgcGFybS5fcHJvYmFi
aWxpdGllcyk7Ci0gICAgICAgICAgICByZXR1cm4gb3M7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIC8qKiBSZWFkcyB0aGUgcGFyYW1ldGVycyBmcm9tIGEgQGMgc3RkOjppc3RyZWFtLiAq
LwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0lTVFJFQU1fT1BFUkFUT1IoaXMsIHBhcmFt
X3R5cGUsIHBhcm0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFdlaWdodFR5
cGU+IHRlbXA7Ci0gICAgICAgICAgICBkZXRhaWw6OnJlYWRfdmVjdG9yKGlzLCB0ZW1wKTsKLSAg
ICAgICAgICAgIGlmKGlzKSB7Ci0gICAgICAgICAgICAgICAgcGFybS5fcHJvYmFiaWxpdGllcy5z
d2FwKHRlbXApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGlzOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHNldHMgb2YgcGFyYW1l
dGVycyBhcmUgdGhlIHNhbWUuICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfRVFVQUxJ
VFlfT1BFUkFUT1IocGFyYW1fdHlwZSwgbGhzLCByaHMpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBsaHMuX3Byb2JhYmlsaXRpZXMgPT0gcmhzLl9wcm9iYWJpbGl0aWVzOwotICAgICAg
ICB9Ci0gICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBzZXRzIG9mIHBhcmFtZXRl
cnMgYXJlIGRpZmZlcmVudC4gKi8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFM
SVRZX09QRVJBVE9SKHBhcmFtX3R5cGUpCi0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8vIEBjb25k
IHNob3dfcHJpdmF0ZQotICAgICAgICBmcmllbmQgY2xhc3MgZGlzY3JldGVfZGlzdHJpYnV0aW9u
OwotICAgICAgICBleHBsaWNpdCBwYXJhbV90eXBlKGNvbnN0IGRpc2NyZXRlX2Rpc3RyaWJ1dGlv
biYgZGlzdCkKLSAgICAgICAgICA6IF9wcm9iYWJpbGl0aWVzKGRpc3QucHJvYmFiaWxpdGllcygp
KQotICAgICAgICB7fQotICAgICAgICB2b2lkIG5vcm1hbGl6ZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGltcGxfdHlwZTo6bm9ybWFsaXplKF9wcm9iYWJpbGl0aWVzKTsKLSAgICAgICAgfQot
ICAgICAgICBzdGQ6OnZlY3RvcjxXZWlnaHRUeXBlPiBfcHJvYmFiaWxpdGllczsKLSAgICAgICAg
Ly8vIEBlbmRjb25kCi0gICAgfTsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgQGMg
ZGlzY3JldGVfZGlzdHJpYnV0aW9uIG9iamVjdCB0aGF0IGhhcwotICAgICAqIFxmJHAoMCkgPSAx
XGYkIGFuZCBcZiRwKGl8aT4wKSA9IDBcZiQuCi0gICAgICovCi0gICAgZGlzY3JldGVfZGlzdHJp
YnV0aW9uKCkKLSAgICB7Ci0gICAgICAgIF9pbXBsLmluaXRfZW1wdHkoKTsKLSAgICB9Ci0gICAg
LyoqCi0gICAgICogQ29uc3RydWN0cyBhIGRpc2NyZXRlX2Rpc3RyaWJ1dGlvbiBmcm9tIGFuIGl0
ZXJhdG9yIHJhbmdlLgotICAgICAqIElmIEBjIGZpcnN0ID09IEBjIGxhc3QsIGVxdWl2YWxlbnQg
dG8gdGhlIGRlZmF1bHQgY29uc3RydWN0b3IuCi0gICAgICogT3RoZXJ3aXNlLCB0aGUgdmFsdWVz
IG9mIHRoZSByYW5nZSByZXByZXNlbnQgd2VpZ2h0cyBmb3IgdGhlCi0gICAgICogcG9zc2libGUg
dmFsdWVzIG9mIHRoZSBkaXN0cmlidXRpb24uCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
SXRlcj4KLSAgICBkaXNjcmV0ZV9kaXN0cmlidXRpb24oSXRlciBmaXJzdCwgSXRlciBsYXN0KQot
ICAgIHsKLSAgICAgICAgaW5pdChmaXJzdCwgbGFzdCk7Ci0gICAgfQotI2lmbmRlZiBCT09TVF9O
T19DWFgxMV9IRFJfSU5JVElBTElaRVJfTElTVAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMg
YSBAYyBkaXNjcmV0ZV9kaXN0cmlidXRpb24gZnJvbSBhIEBjIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dC4KLSAgICAgKiBJZiB0aGUgQGMgaW5pdGlhbGl6ZXJfbGlzdCBpcyBlbXB0eSwgZXF1aXZhbGVu
dCB0byB0aGUgZGVmYXVsdAotICAgICAqIGNvbnN0cnVjdG9yLiAgT3RoZXJ3aXNlLCB0aGUgdmFs
dWVzIG9mIHRoZSBAYyBpbml0aWFsaXplcl9saXN0Ci0gICAgICogcmVwcmVzZW50IHdlaWdodHMg
Zm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KLSAgICAgKiBGb3Ig
ZXhhbXBsZSwgZ2l2ZW4gdGhlIGRpc3RyaWJ1dGlvbgotICAgICAqCi0gICAgICogQGNvZGUKLSAg
ICAgKiBkaXNjcmV0ZV9kaXN0cmlidXRpb248PiBkaXN0ezEsIDQsIDV9OwotICAgICAqIEBlbmRj
b2RlCi0gICAgICoKLSAgICAgKiBUaGUgcHJvYmFiaWxpdHkgb2YgYSAwIGlzIDEvMTAsIHRoZSBw
cm9iYWJpbGl0eSBvZiBhIDEgaXMgMi81LAotICAgICAqIHRoZSBwcm9iYWJpbGl0eSBvZiBhIDIg
aXMgMS8yLCBhbmQgbm8gb3RoZXIgdmFsdWVzIGFyZSBwb3NzaWJsZS4KLSAgICAgKi8KLSAgICBk
aXNjcmV0ZV9kaXN0cmlidXRpb24oc3RkOjppbml0aWFsaXplcl9saXN0PFdlaWdodFR5cGU+IHds
KQotICAgIHsKLSAgICAgICAgaW5pdCh3bC5iZWdpbigpLCB3bC5lbmQoKSk7Ci0gICAgfQotI2Vu
ZGlmCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIGRpc2NyZXRlX2Rpc3RyaWJ1dGlvbiBm
cm9tIGEgQm9vc3QuUmFuZ2UgcmFuZ2UuCi0gICAgICogSWYgdGhlIHJhbmdlIGlzIGVtcHR5LCBl
cXVpdmFsZW50IHRvIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgICAqIE90aGVyd2lzZSwg
dGhlIHZhbHVlcyBvZiB0aGUgcmFuZ2UgcmVwcmVzZW50IHdlaWdodHMgZm9yIHRoZQotICAgICAq
IHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGlzdHJpYnV0aW9uLgotICAgICAqLwotICAgIHRlbXBs
YXRlPGNsYXNzIFJhbmdlPgotICAgIGV4cGxpY2l0IGRpc2NyZXRlX2Rpc3RyaWJ1dGlvbihjb25z
dCBSYW5nZSYgcmFuZ2UpCi0gICAgewotICAgICAgICBpbml0KGJvb3N0OjpiZWdpbihyYW5nZSks
IGJvb3N0OjplbmQocmFuZ2UpKTsKLSAgICB9Ci0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBh
IGRpc2NyZXRlX2Rpc3RyaWJ1dGlvbiB0aGF0IGFwcHJveGltYXRlcyBhIGZ1bmN0aW9uLgotICAg
ICAqIElmIG53IGlzIHplcm8sIGVxdWl2YWxlbnQgdG8gdGhlIGRlZmF1bHQgY29uc3RydWN0b3Iu
Ci0gICAgICogT3RoZXJ3aXNlLCB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbiBpcyBbMCwg
bncpLAotICAgICAqIGFuZCB0aGUgd2VpZ2h0cyBhcmUgZm91bmQgYnkgIGNhbGxpbmcgZncgd2l0
aCB2YWx1ZXMKLSAgICAgKiBldmVubHkgZGlzdHJpYnV0ZWQgYmV0d2VlbiBcZiRcbWJveHt4bWlu
fSArIFxkZWx0YS8yXGYkIGFuZAotICAgICAqIFxmJFxtYm94e3htYXh9IC0gXGRlbHRhLzJcZiQs
IHdoZXJlCi0gICAgICogXGYkXGRlbHRhID0gKFxtYm94e3htYXh9IC0gXG1ib3h7eG1pbn0pL1xt
Ym94e253fVxmJC4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBGdW5jPgotICAgIGRpc2Ny
ZXRlX2Rpc3RyaWJ1dGlvbihzdGQ6OnNpemVfdCBudywgZG91YmxlIHhtaW4sIGRvdWJsZSB4bWF4
LCBGdW5jIGZ3KQotICAgIHsKLSAgICAgICAgc3RkOjpzaXplX3QgbiA9IChudyA9PSAwKSA/IDEg
OiBudzsKLSAgICAgICAgZG91YmxlIGRlbHRhID0gKHhtYXggLSB4bWluKSAvIG47Ci0gICAgICAg
IEJPT1NUX0FTU0VSVChkZWx0YSA+IDApOwotICAgICAgICBzdGQ6OnZlY3RvcjxXZWlnaHRUeXBl
PiB3ZWlnaHRzOwotICAgICAgICBmb3Ioc3RkOjpzaXplX3QgayA9IDA7IGsgPCBuOyArK2spIHsK
LSAgICAgICAgICAgIHdlaWdodHMucHVzaF9iYWNrKGZ3KHhtaW4gKyBrKmRlbHRhICsgZGVsdGEv
MikpOwotICAgICAgICB9Ci0gICAgICAgIGluaXQod2VpZ2h0cy5iZWdpbigpLCB3ZWlnaHRzLmVu
ZCgpKTsKLSAgICB9Ci0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIGRpc2NyZXRlX2Rpc3Ry
aWJ1dGlvbiBmcm9tIGl0cyBwYXJhbWV0ZXJzLgotICAgICAqLwotICAgIGV4cGxpY2l0IGRpc2Ny
ZXRlX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgIHsKLSAgICAgICAg
cGFyYW0ocGFybSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHZhbHVlIGRp
c3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgcGFyYW1ldGVycyBvZiB0aGUKLSAgICAgKiBkaXNj
cmV0ZV9kaXN0cmlidXRpb24uCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgVVJORz4KLSAg
ICBJbnRUeXBlIG9wZXJhdG9yKCkoVVJORyYgdXJuZykgY29uc3QKLSAgICB7Ci0gICAgICAgIEJP
T1NUX0FTU0VSVCghX2ltcGwuX2FsaWFzX3RhYmxlLmVtcHR5KCkpOwotICAgICAgICBJbnRUeXBl
IHJlc3VsdDsKLSAgICAgICAgV2VpZ2h0VHlwZSB0ZXN0OwotICAgICAgICBkbyB7Ci0gICAgICAg
ICAgICByZXN1bHQgPSB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248SW50VHlwZT4oKG1pbikoKSwg
KG1heCkoKSkodXJuZyk7Ci0gICAgICAgICAgICB0ZXN0ID0gX2ltcGwudGVzdCh1cm5nKTsKLSAg
ICAgICAgfSB3aGlsZSghX2ltcGwuYWNjZXB0KHJlc3VsdCwgdGVzdCkpOwotICAgICAgICBpZih0
ZXN0IDwgX2ltcGwuX2FsaWFzX3RhYmxlW3N0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihyZXN1bHQp
XS5maXJzdCkgewotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIHJldHVybihfaW1wbC5fYWxpYXNfdGFibGVbc3RhdGljX2Nhc3Q8c3RkOjpz
aXplX3Q+KHJlc3VsdCldLnNlY29uZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLyoq
Ci0gICAgICogUmV0dXJucyBhIHZhbHVlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgcGFy
YW1ldGVycwotICAgICAqIHNwZWNpZmllZCBieSBwYXJhbS4KLSAgICAgKi8KLSAgICB0ZW1wbGF0
ZTxjbGFzcyBVUk5HPgotICAgIEludFR5cGUgb3BlcmF0b3IoKShVUk5HJiB1cm5nLCBjb25zdCBw
YXJhbV90eXBlJiBwYXJtKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYoV2VpZ2h0VHlwZSBsaW1p
dCA9IGltcGxfdHlwZTo6dHJ5X2dldF9zdW0ocGFybS5fcHJvYmFiaWxpdGllcykpIHsKLSAgICAg
ICAgICAgIFdlaWdodFR5cGUgdmFsID0gaW1wbF90eXBlOjpnZW5lcmF0ZV9pbl9yYW5nZSh1cm5n
LCBsaW1pdCk7Ci0gICAgICAgICAgICBXZWlnaHRUeXBlIHN1bSA9IDA7Ci0gICAgICAgICAgICBz
dGQ6OnNpemVfdCByZXN1bHQgPSAwOwotICAgICAgICAgICAgZm9yKHR5cGVuYW1lIHN0ZDo6dmVj
dG9yPFdlaWdodFR5cGU+Ojpjb25zdF9pdGVyYXRvcgotICAgICAgICAgICAgICAgICAgICBpdGVy
ID0gcGFybS5fcHJvYmFiaWxpdGllcy5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgICBlbmQg
PSBwYXJtLl9wcm9iYWJpbGl0aWVzLmVuZCgpOwotICAgICAgICAgICAgICAgIGl0ZXIgIT0gZW5k
OyArK2l0ZXIsICsrcmVzdWx0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN1bSAr
PSAqaXRlcjsKLSAgICAgICAgICAgICAgICBpZihzdW0gPiB2YWwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSByZWFjaGFibGUsIGJ1dCByb3VuZC1vZmYg
ZXJyb3IKLSAgICAgICAgICAgIC8vIGNhbiBwcmV2ZW50IGFueSBtYXRjaCBmcm9tIGJlaW5nIGZv
dW5kIHdoZW4gdmFsIGlzCi0gICAgICAgICAgICAvLyB2ZXJ5IGNsb3NlIHRvIDEuCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZT4ocGFybS5fcHJvYmFiaWxpdGllcy5zaXpl
KCkgLSAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlaWdodFR5cGUgaXMg
aW50ZWdyYWwgYW5kIHN1bShwYXJtLl9wcm9iYWJpbGl0aWVzKQotICAgICAgICAgICAgLy8gd291
bGQgb3ZlcmZsb3cuICBKdXN0IHVzZSB0aGUgZWFzeSBzb2x1dGlvbi4KLSAgICAgICAgICAgIHJl
dHVybiBkaXNjcmV0ZV9kaXN0cmlidXRpb24ocGFybSkodXJuZyk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhlIHNtYWxsZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3Ry
aWJ1dGlvbiBjYW4gcHJvZHVjZS4gKi8KLSAgICByZXN1bHRfdHlwZSBtaW4gQk9PU1RfUFJFVkVO
VF9NQUNST19TVUJTVElUVVRJT04gKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIC8qKiBSZXR1
cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4g
Ki8KLSAgICByZXN1bHRfdHlwZSBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04g
KCkgY29uc3QKLSAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxyZXN1bHRfdHlwZT4oX2ltcGwuX2Fs
aWFzX3RhYmxlLnNpemUoKSAtIDEpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgdmVj
dG9yIGNvbnRhaW5pbmcgdGhlIHByb2JhYmlsaXRpZXMgb2YgZWFjaAotICAgICAqIHZhbHVlIG9m
IHRoZSBkaXN0cmlidXRpb24uICBGb3IgZXhhbXBsZSwgZ2l2ZW4KLSAgICAgKgotICAgICAqIEBj
b2RlCi0gICAgICogZGlzY3JldGVfZGlzdHJpYnV0aW9uPD4gZGlzdCA9IHsgMSwgNCwgNSB9Owot
ICAgICAqIHN0ZDo6dmVjdG9yPGRvdWJsZT4gcCA9IGRpc3QucGFyYW0oKTsKLSAgICAgKiBAZW5k
Y29kZQotICAgICAqCi0gICAgICogdGhlIHZlY3RvciwgcCB3aWxsIGNvbnRhaW4gezAuMSwgMC40
LCAwLjV9LgotICAgICAqCi0gICAgICogSWYgQGMgV2VpZ2h0VHlwZSBpcyBpbnRlZ3JhbCwgdGhl
biB0aGUgd2VpZ2h0cwotICAgICAqIHdpbGwgYmUgcmV0dXJuZWQgdW5jaGFuZ2VkLgotICAgICAq
LwotICAgIHN0ZDo6dmVjdG9yPFdlaWdodFR5cGU+IHByb2JhYmlsaXRpZXMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgc3RkOjp2ZWN0b3I8V2VpZ2h0VHlwZT4gcmVzdWx0KF9pbXBsLl9hbGlhc190
YWJsZS5zaXplKCksIHN0YXRpY19jYXN0PFdlaWdodFR5cGU+KDApKTsKLSAgICAgICAgc3RkOjpz
aXplX3QgaSA9IDA7Ci0gICAgICAgIGZvcih0eXBlbmFtZSBpbXBsX3R5cGU6OmFsaWFzX3RhYmxl
X3Q6OmNvbnN0X2l0ZXJhdG9yCi0gICAgICAgICAgICAgICAgaXRlciA9IF9pbXBsLl9hbGlhc190
YWJsZS5iZWdpbigpLAotICAgICAgICAgICAgICAgIGVuZCA9IF9pbXBsLl9hbGlhc190YWJsZS5l
bmQoKTsKLSAgICAgICAgICAgICAgICBpdGVyICE9IGVuZDsgKytpdGVyLCArK2kpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIFdlaWdodFR5cGUgdmFsID0gaXRlci0+Zmlyc3Q7Ci0gICAgICAgICAg
ICByZXN1bHRbaV0gKz0gdmFsOwotICAgICAgICAgICAgcmVzdWx0W3N0YXRpY19jYXN0PHN0ZDo6
c2l6ZV90PihpdGVyLT5zZWNvbmQpXSArPSBfaW1wbC5nZXRfd2VpZ2h0KGkpIC0gdmFsOwotICAg
ICAgICB9Ci0gICAgICAgIGltcGxfdHlwZTo6bm9ybWFsaXplKHJlc3VsdCk7Ci0gICAgICAgIHJl
dHVybihyZXN1bHQpOwotICAgIH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXJzIG9m
IHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgcGFyYW1fdHlwZSBwYXJhbSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gcGFyYW1fdHlwZSgqdGhpcyk7Ci0gICAgfQotICAgIC8qKiBTZXRz
IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgdm9pZCBwYXJhbShj
b25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgIHsKLSAgICAgICAgaW5pdChwYXJtLl9wcm9iYWJp
bGl0aWVzLmJlZ2luKCksIHBhcm0uX3Byb2JhYmlsaXRpZXMuZW5kKCkpOwotICAgIH0KLSAgICAK
LSAgICAvKioKLSAgICAgKiBFZmZlY3RzOiBTdWJzZXF1ZW50IHVzZXMgb2YgdGhlIGRpc3RyaWJ1
dGlvbiBkbyBub3QgZGVwZW5kCi0gICAgICogb24gdmFsdWVzIHByb2R1Y2VkIGJ5IGFueSBlbmdp
bmUgcHJpb3IgdG8gaW52b2tpbmcgcmVzZXQuCi0gICAgICovCi0gICAgdm9pZCByZXNldCgpIHt9
Ci0KLSAgICAvKiogV3JpdGVzIGEgZGlzdHJpYnV0aW9uIHRvIGEgQGMgc3RkOjpvc3RyZWFtLiAq
LwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihvcywgZGlzY3JldGVf
ZGlzdHJpYnV0aW9uLCBkZCkKLSAgICB7Ci0gICAgICAgIG9zIDw8IGRkLnBhcmFtKCk7Ci0gICAg
ICAgIHJldHVybiBvczsKLSAgICB9Ci0KLSAgICAvKiogUmVhZHMgYSBkaXN0cmlidXRpb24gZnJv
bSBhIEBjIHN0ZDo6aXN0cmVhbSAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9P
UEVSQVRPUihpcywgZGlzY3JldGVfZGlzdHJpYnV0aW9uLCBkZCkKLSAgICB7Ci0gICAgICAgIHBh
cmFtX3R5cGUgcGFybTsKLSAgICAgICAgaWYoaXMgPj4gcGFybSkgewotICAgICAgICAgICAgZGQu
cGFyYW0ocGFybSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlzOwotICAgIH0KLQotICAg
IC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGRpc3RyaWJ1dGlvbnMgd2lsbCBy
ZXR1cm4gdGhlCi0gICAgICogc2FtZSBzZXF1ZW5jZSBvZiB2YWx1ZXMsIHdoZW4gcGFzc2VkIGVx
dWFsIGdlbmVyYXRvcnMuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElU
WV9PUEVSQVRPUihkaXNjcmV0ZV9kaXN0cmlidXRpb24sIGxocywgcmhzKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGxocy5faW1wbCA9PSByaHMuX2ltcGw7Ci0gICAgfQotICAgIC8qKgotICAgICAq
IFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGRpc3RyaWJ1dGlvbnMgbWF5IHJldHVybiBkaWZmZXJl
bnQKLSAgICAgKiBzZXF1ZW5jZXMgb2YgdmFsdWVzLCB3aGVuIHBhc3NlZCBlcXVhbCBnZW5lcmF0
b3JzLgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5FUVVBTElUWV9PUEVSQVRP
UihkaXNjcmV0ZV9kaXN0cmlidXRpb24pCi0KLXByaXZhdGU6Ci0KLSAgICAvLy8gQGNvbmQgc2hv
d19wcml2YXRlCi0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBJdGVyPgotICAgIHZvaWQgaW5pdChJdGVy
IGZpcnN0LCBJdGVyIGxhc3QsIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQotICAgIHsKLSAgICAg
ICAgc3RkOjp2ZWN0b3I8V2VpZ2h0VHlwZT4gdGVtcChmaXJzdCwgbGFzdCk7Ci0gICAgICAgIGlu
aXQodGVtcC5iZWdpbigpLCB0ZW1wLmVuZCgpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
SXRlcj4KLSAgICB2b2lkIGluaXQoSXRlciBmaXJzdCwgSXRlciBsYXN0LCBzdGQ6OmZvcndhcmRf
aXRlcmF0b3JfdGFnKQotICAgIHsKLSAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPFdlaWdo
dFR5cGUsIEludFR5cGU+ID4gYmVsb3dfYXZlcmFnZTsKLSAgICAgICAgc3RkOjp2ZWN0b3I8c3Rk
OjpwYWlyPFdlaWdodFR5cGUsIEludFR5cGU+ID4gYWJvdmVfYXZlcmFnZTsKLSAgICAgICAgV2Vp
Z2h0VHlwZSB3ZWlnaHRfYXZlcmFnZSA9IF9pbXBsLmluaXRfYXZlcmFnZShmaXJzdCwgbGFzdCk7
Ci0gICAgICAgIFdlaWdodFR5cGUgbm9ybWFsaXplZF9hdmVyYWdlID0gX2ltcGwuZ2V0X3dlaWdo
dCgwKTsKLSAgICAgICAgc3RkOjpzaXplX3QgaSA9IDA7Ci0gICAgICAgIGZvcig7IGZpcnN0ICE9
IGxhc3Q7ICsrZmlyc3QsICsraSkgewotICAgICAgICAgICAgV2VpZ2h0VHlwZSB2YWwgPSBpbXBs
X3R5cGU6Om5vcm1hbGl6ZSgqZmlyc3QsIHdlaWdodF9hdmVyYWdlKTsKLSAgICAgICAgICAgIHN0
ZDo6cGFpcjxXZWlnaHRUeXBlLCBJbnRUeXBlPiBlbGVtKHZhbCwgc3RhdGljX2Nhc3Q8SW50VHlw
ZT4oaSkpOwotICAgICAgICAgICAgaWYodmFsIDwgbm9ybWFsaXplZF9hdmVyYWdlKSB7Ci0gICAg
ICAgICAgICAgICAgYmVsb3dfYXZlcmFnZS5wdXNoX2JhY2soZWxlbSk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGFib3ZlX2F2ZXJhZ2UucHVzaF9iYWNrKGVsZW0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdHlwZW5hbWUgaW1wbF90eXBlOjph
bGlhc190YWJsZV90OjppdGVyYXRvcgotICAgICAgICAgICAgYl9pdGVyID0gYmVsb3dfYXZlcmFn
ZS5iZWdpbigpLAotICAgICAgICAgICAgYl9lbmQgPSBiZWxvd19hdmVyYWdlLmVuZCgpLAotICAg
ICAgICAgICAgYV9pdGVyID0gYWJvdmVfYXZlcmFnZS5iZWdpbigpLAotICAgICAgICAgICAgYV9l
bmQgPSBhYm92ZV9hdmVyYWdlLmVuZCgpCi0gICAgICAgICAgICA7Ci0gICAgICAgIHdoaWxlKGJf
aXRlciAhPSBiX2VuZCAmJiBhX2l0ZXIgIT0gYV9lbmQpIHsKLSAgICAgICAgICAgIF9pbXBsLl9h
bGlhc190YWJsZVtzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oYl9pdGVyLT5zZWNvbmQpXSA9Ci0g
ICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIoYl9pdGVyLT5maXJzdCwgYV9pdGVyLT5zZWNv
bmQpOwotICAgICAgICAgICAgYV9pdGVyLT5maXJzdCAtPSAoX2ltcGwuZ2V0X3dlaWdodChiX2l0
ZXItPnNlY29uZCkgLSBiX2l0ZXItPmZpcnN0KTsKLSAgICAgICAgICAgIGlmKGFfaXRlci0+Zmly
c3QgPCBub3JtYWxpemVkX2F2ZXJhZ2UpIHsKLSAgICAgICAgICAgICAgICAqYl9pdGVyID0gKmFf
aXRlcisrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICArK2JfaXRlcjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IoOyBiX2l0ZXIgIT0gYl9lbmQ7
ICsrYl9pdGVyKSB7Ci0gICAgICAgICAgICBfaW1wbC5fYWxpYXNfdGFibGVbc3RhdGljX2Nhc3Q8
c3RkOjpzaXplX3Q+KGJfaXRlci0+c2Vjb25kKV0uZmlyc3QgPQotICAgICAgICAgICAgICAgIF9p
bXBsLmdldF93ZWlnaHQoYl9pdGVyLT5zZWNvbmQpOwotICAgICAgICB9Ci0gICAgICAgIGZvcig7
IGFfaXRlciAhPSBhX2VuZDsgKythX2l0ZXIpIHsKLSAgICAgICAgICAgIF9pbXBsLl9hbGlhc190
YWJsZVtzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oYV9pdGVyLT5zZWNvbmQpXS5maXJzdCA9Ci0g
ICAgICAgICAgICAgICAgX2ltcGwuZ2V0X3dlaWdodChhX2l0ZXItPnNlY29uZCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgSXRlcj4KLSAgICB2b2lkIGluaXQoSXRlciBm
aXJzdCwgSXRlciBsYXN0KQotICAgIHsKLSAgICAgICAgaWYoZmlyc3QgPT0gbGFzdCkgewotICAg
ICAgICAgICAgX2ltcGwuaW5pdF9lbXB0eSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5
IGNhdGVnb3J5OwotICAgICAgICAgICAgaW5pdChmaXJzdCwgbGFzdCwgY2F0ZWdvcnkpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpzZWxlY3RfYWxpYXNf
dGFibGU8Ci0gICAgICAgICg6OmJvb3N0Ojppc19pbnRlZ3JhbDxXZWlnaHRUeXBlPjo6dmFsdWUp
Ci0gICAgPjo6dGVtcGxhdGUgYXBwbHk8SW50VHlwZSwgV2VpZ2h0VHlwZT46OnR5cGUgaW1wbF90
eXBlOwotICAgIGltcGxfdHlwZSBfaW1wbDsKLSAgICAvLy8gQGVuZGNvbmQKLX07Ci0KLX0KLX0K
LQotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvZW5hYmxlX3dhcm5pbmdzLmhwcD4KLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9yYW5kb20vZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9leHBvbmVudGlhbF9kaXN0cmlidXRp
b24uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGI5NWM1NDcyYjMzMTFiOTgy
NGExNGFlOWY0NGE3YjE4YmI4MGI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3Jh
bmRvbS9leHBvbmVudGlhbF9kaXN0cmlidXRpb24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzg2
ICswLDAgQEAKLS8qIGJvb3N0IHJhbmRvbS9leHBvbmVudGlhbF9kaXN0cmlidXRpb24uaHBwIGhl
YWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0IEplbnMgTWF1cmVyIDIwMDAtMjAwMQotICogQ29w
eXJpZ2h0IFN0ZXZlbiBXYXRhbmFiZSAyMDExCi0gKiBDb3B5cmlnaHQgSmFzb24gUmhpbmVsYW5k
ZXIgMjAxNgotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2Us
IFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICoK
LSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNs
dWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgotICogUmV2aXNpb24gaGlzdG9y
eQotICogIDIwMDEtMDItMTggIG1vdmVkIHRvIGluZGl2aWR1YWwgaGVhZGVyIGZpbGVzCi0gKi8K
LQotI2lmbmRlZiBCT09TVF9SQU5ET01fRVhQT05FTlRJQUxfRElTVFJJQlVUSU9OX0hQUAotI2Rl
ZmluZSBCT09TVF9SQU5ET01fRVhQT05FTlRJQUxfRElTVFJJQlVUSU9OX0hQUAotCi0jaW5jbHVk
ZSA8Ym9vc3QvY29uZmlnL25vX3RyMS9jbWF0aC5ocHA+Ci0jaW5jbHVkZSA8aW9zZndkPgotI2lu
Y2x1ZGUgPGJvb3N0L2Fzc2VydC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbGltaXRzLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
cmFuZG9tL2RldGFpbC9vcGVyYXRvcnMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRh
aWwvaW50X2Zsb2F0X3BhaXIuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS91bmlmb3JtXzAx
LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSByYW5kb20gewotCi1uYW1lc3Bh
Y2UgZGV0YWlsIHsKLQotLy8gdGFibGVzIGZvciB0aGUgemlnZ3VyYXQgYWxnb3JpdGhtCi10ZW1w
bGF0ZTxjbGFzcyBSZWFsVHlwZT4KLXN0cnVjdCBleHBvbmVudGlhbF90YWJsZSB7Ci0gICAgc3Rh
dGljIGNvbnN0IFJlYWxUeXBlIHRhYmxlX3hbMjU3XTsKLSAgICBzdGF0aWMgY29uc3QgUmVhbFR5
cGUgdGFibGVfeVsyNTddOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGU+Ci1jb25zdCBS
ZWFsVHlwZSBleHBvbmVudGlhbF90YWJsZTxSZWFsVHlwZT46OnRhYmxlX3hbMjU3XSA9IHsKLSAg
ICA4LjY5NzExNzQ3MDEzMTA0OTcxNDAsIDcuNjk3MTE3NDcwMTMxMDQ5NzE0MCwgNi45NDEwMzM2
MjkzNzcyMTIzNjAyLCA2LjQ3ODM3ODQ5MzgzMjU2OTg1MzgsCi0gICAgNi4xNDQxNjQ2NjU3NzI0
NzMwNDkxLCA1Ljg4MjE0NDMxNTc5NTM5OTc5NjMsIDUuNjY2NDEwMTY3NDU0MDMzNzM3MSwgNS40
ODI4OTA2Mjc1MjYwNjI4Njk0LAotICAgIDUuMzIzMDkwNTA1NzU0Mzk4NjEzMSwgNS4xODE0ODcy
ODEzMDE1MDEwMzkyLCA1LjA1NDI4ODQ4OTk4MTMwNDcxMTcsIDQuOTM4Nzc3MDg1OTAxMjUxNDgz
OCwKLSAgICA0LjgzMjkzOTc0MTAyNTExMjU4ODEsIDQuNzM1MjQyOTk2NjAxNzQxMjUyNiwgNC42
NDQ0OTE4ODU0MjAwODU0ODczLCA0LjU1OTczNzA2MTcwNzM1MTU1MTMsCi0gICAgNC40ODAyMTE3
NDY1Mjg0MjIxOTQ5LCA0LjQwNTI4NzY5MzQ3MzU3Mjk4MDUsIDQuMzM0NDQzNjgwMzE3MjczMDEx
NiwgNC4yNjcyNDI0ODAyNzczNjYxODczLAotICAgIDQuMjAzMzEzNzEzNzM1MTg0MzgwMiwgNC4x
NDIzNDA4NjU2NjQwNTExMjUxLCA0LjA4NDA1MTMxMDQwODI5NzQ2MzgsIDQuMDI4MjA4NTQ0NjQ3
OTM2NTEwNiwKLSAgICAzLjk3NDYwNjA2NjY3Mzc4ODQ3OTMsIDMuOTIzMDYyNTAwMTM1NDg5NTky
NiwgMy44NzM0MTc2NzAzOTk1MDg5OTgzLCAzLjgyNTUyOTQxODUyMjMzNjczNzIsCi0gICAgMy43
NzkyNzA5OTI0MTE2Njc4OTkyLCAzLjczNDUyODg5NDAzOTc5NzUzNTAsIDMuNjkxMjAxMDkwMjM3
NDE4OTQ1NCwgMy42NDkxOTU1MTU3NjA4NTM4NDc4LAotICAgIDMuNjA4NDI4ODEzMTI4OTA5NjMz
OSwgMy41Njg4MjUyNjU2NDgzMzc0MDUxLCAzLjUzMDMxNTg4OTEyOTM0Mzg2MzMsIDMuNDkyODM3
NjU0Nzc0MDYwMTgxNCwKLSAgICAzLjQ1NjMzMjgyMTEzMjc2MDc2MjUsIDMuNDIwNzQ4MzU3MjUx
MTIwNTMyMywgMy4zODYwMzU0NDI0NjAzMDE3ODg3LCAzLjM1MjE0OTAzMDkwMDExMDAxMDYsCi0g
ICAgMy4zMTkwNDc0NzA5NzA3NDg3MTY2LCAzLjI4NjY5MjE3MTU5OTA2OTIwOTUsIDMuMjU1MDQ3
MzA4NTcwNDUwMTgxMywgMy4yMjQwNzk1NjUyODYyNjQ1MjA3LAotICAgIDMuMTkzNzU3OTAzMjEy
MjQwNzQ4MywgMy4xNjQwNTMzNTgwMjU5NzM0NTgwLCAzLjEzNDkzODg1ODA4NDQ0MDczOTMsIDMu
MTA2Mzg5MDYyMzM5ODI0NjY2MCwKLSAgICAzLjA3ODM4MDIxNTI1NDA5MDUxODgsIDMuMDUwODkw
MDE2NjE1NDU1NDQ3OSwgMy4wMjM4OTc1MDQ0NTU2NzY3NzEzLCAyLjk5NzM4Mjk0OTUxNjEzMDY5
NDksCi0gICAgMi45NzEzMjc3NTk5MjEwODk2NDcyLCAyLjk0NTcxNDM5NDg5NTA0NTYzODYsIDIu
OTIwNTI2Mjg2NTEyNzQwNjY0NywgMi44OTU3NDc3Njg2MDAxNDE2ODM4LAotICAgIDIuODcxMzY0
MDEyMDE1NTM2MjU5MiwgMi44NDczNjA5NjU2MzUxODg4MjY2LCAyLjgyMzcyNTMwMjQ1MDAzNTQ5
MDUsIDIuODAwNDQ0MzcwMjUwNzM4MTk0NCwKLSAgICAyLjc3NzUwNjE0NjQzOTc1NzIwNDEsIDIu
NzU0ODk5MTk2NTYyMzQ1MzY1MCwgMi43MzI2MTI2MzYxOTQ3MDA3NDExLCAyLjcxMDYzNjA5NTg2
NzkyOTM2ODYsCi0gICAgMi42ODg5NTk2ODg3NDE4MDQxNTkzLCAyLjY2NzU3Mzk4MDc3MzI2NzA4
MTYsIDIuNjQ2NDY5OTYzMTUxODA5MzkwNSwgMi42MjU2MzkwMjY3OTc3ODg2MTIzLAotICAgIDIu
NjA1MDcyOTM4NzQwODM1NTM3MywgMi41ODQ3NjM4MjAyMTQxNDA2OTExLCAyLjU2NDcwNDEyNjMx
NjkwNTM2ODcsIDIuNTQ0ODg2NjI3MTExODcwMDkyOCwKLSAgICAyLjUyNTMwNDM5MDAzNzgyNzk0
MjcsIDIuNTA1OTUwNzYzNTI4NTkzOTY0OCwgMi40ODY4MTkzNjE3NDAyMDk2ODA3LCAyLjQ2Nzkw
NDA1MDI5NzM2NDk4NDYsCi0gICAgMi40NDkxOTg5MzI5NzgyNDk4OTA4LCAyLjQzMDY5ODMzOTI2
NDQxOTkwODgsIDIuNDEyMzk2ODEyNjg4ODcwODMzNiwgMi4zOTQyODkwOTk5MjE0NTgzMjg4LAot
ICAgIDIuMzc2MzcwMTQwNTM2MTQwODE5NCwgMi4zNTg2MzUwNTc0MDkzMzc0NjAxLCAyLjM0MTA3
OTE0NzcwMzAzNDY4NzUsIDIuMzIzNjk3ODc0MzkwMTk2NDU1OSwKLSAgICAyLjMwNjQ4Njg1ODI4
MzU3OTg2OTIsIDIuMjg5NDQxODcwNTMyMjY5NDI2NSwgMi4yNzI1NTg4MjU1NTMxNTQ2OTUyLCAy
LjI1NTgzMzc3NDM2NzIxOTA0NDEsCi0gICAgMi4yMzkyNjI4OTgzMTI5MDg3MTExLCAyLjIyMjg0
MjUwMzExMTAzNjQwMTMsIDIuMjA2NTY5MDEzMjU3NjYzNTc1NSwgMi4xOTA0Mzg5NjY3MjMyMTk5
MjM1LAotICAgIDIuMTc0NDQ5MDA5OTM3Nzc0NDY3MywgMi4xNTg1OTU4OTMwNDM4ODU2NzgxLCAy
LjE0Mjg3NjQ2NTM5OTg0MTY0MjUsIDIuMTI3Mjg3NjcxMzE3MzY3OTczNywKLSAgICAyLjExMTgy
NjU0NjAxOTA0MTgxMDgsIDIuMDk2NDkwMjExODAxNzE0NzYzNywgMi4wODEyNzU4NzQzOTMyMjQ4
Njk2LCAyLjA2NjE4MDgxOTQ5MDU3NTUwMzYsCi0gICAgMi4wNTEyMDI0MDk0Njg1ODQ4NjQxLCAy
LjAzNjMzODA4MDI0ODc2OTU5MTYsIDIuMDIxNTg1MzM4MzE4OTI2MDc3MCwgMi4wMDY5NDE3NTc4
OTQ1MTgzMTQ0LAotICAgIDEuOTkyNDA0OTc4MjEzNTc2NDk5MiwgMS45Nzc5NzI3MDA5NTczNjAy
Mjk1LCAxLjk2MzY0MjY4Nzc4OTU0ODA0MDEsIDEuOTQ5NDEyNzU4MDA3MTg0NTY1OSwKLSAgICAx
LjkzNTI4MDc4NjI5NzA1MTExMzUsIDEuOTIxMjQ0NzAwNTkxNTI3Njc2NywgMS45MDczMDI0ODAw
MTgzODcxMTk2LCAxLjg5MzQ1MjE1MjkzOTMwNzczMzIsCi0gICAgMS44Nzk2OTE3OTUwNzIyMTA4
NDYyLCAxLjg2NjAxOTUyNzY5MjgyNzU5NjIsIDEuODUyNDMzNTE1OTExMTc1MTY2MSwgMS44Mzg5
MzE5NjcwMTg4NzkzOTgwLAotICAgIDEuODI1NTEzMTI4OTAzNTE5MjIxMiwgMS44MTIxNzUyODg1
MjYzOTAxNDEzLCAxLjc5ODkxNjc3MDQ2MDI5MDM5MzQsIDEuNzg1NzM1OTM1NDg0MTI1NDA0NywK
LSAgICAxLjc3MjYzMTE3OTIzMTMwNDk5NTksIDEuNzU5NjAwOTMwODg5MDc0MjM2OSwgMS43NDY2
NDM2NTE5NDYwNzM5MzUyLCAxLjczMzc1NzgzNDk4NTU3MTE5MjYsCi0gICAgMS43MjA5NDIwMDI1
MjE5MzUwNDI4LCAxLjcwODE5NDcwNTg3ODA1NzU2ODMsIDEuNjk1NTE0NTI0MTAxNTM3NzA2MSwg
MS42ODI5MDAwNjI5MTc1NTM3NTQ0LAotICAgIDEuNjcwMzQ5OTUzNzE2NDUxOTE2MywgMS42NTc4
NjI4NTI1NzQxNzI1MzI1LCAxLjY0NTQzNzQzOTMwMzcyMzQwNTcsIDEuNjMzMDcyNDE2NTM1OTkx
MjA0OCwKLSAgICAxLjYyMDc2NjUwODgyODI1NzcyMTYsIDEuNjA4NTE4NDYxNzk4ODU4MDc2OSwg
MS41OTYzMjcwNDEyODY0ODMxMzQ5LCAxLjU4NDE5MTAzMjUzMjY4ODY2OTUsCi0gICAgMS41NzIx
MDkyMzkzODYyMjk0ODEwLCAxLjU2MDA4MDQ4MzUyNzg4NzkxNjEsIDEuNTQ4MTAzNjAzNzE0NTEz
MzA3MCwgMS41MzYxNzc0NTUwNDEwMzE4OTQzLAotICAgIDEuNTI0MzAwOTA4MjE5MjI2MDA1MCwg
MS41MTI0NzI4NDg4NzIxMTY3NTczLCAxLjUwMDY5MjE3Njg0MjgxNjQ5MzYsIDEuNDg4OTU3ODA1
NTE2NzQ1NjAwMywKLSAgICAxLjQ3NzI2ODY2MTE1NjEzMzQ1NzksIDEuNDY1NjIzNjgyMjQ1NzQ1
MDQxMSwgMS40NTQwMjE4MTg4NDg3OTMyMjY0LCAxLjQ0MjQ2MjAzMTk3MjAxMjE4NzYsCi0gICAg
MS40MzA5NDMyOTI5Mzg4Nzk0MTA0LCAxLjQxOTQ2NDU4Mjc2OTk4MjgyNTQsIDEuNDA4MDI0ODkx
NTY5NTM1MzUwOSwgMS4zOTY2MjMyMTc5MTcwNDE3MTEwLAotICAgIDEuMzg1MjU4NTY4MjYzMTIx
NzE4OSwgMS4zNzM5Mjk5NTYzMjg0OTAyMTc2LCAxLjM2MjYzNjQwMjUwNTA4NjQ3NDIsIDEuMzUx
Mzc2OTMzMjU4MzM0OTE3NiwKLSAgICAxLjM0MDE1MDU4MDUyOTUwNDU4NDMsIDEuMzI4OTU2Mzgx
MTM3MTE2MzIyMCwgMS4zMTc3OTMzNzYxNzYzMjQ1NDgwLCAxLjMwNjY2MDYxMDQxNTE3Mzk0ODIs
Ci0gICAgMS4yOTU1NTcxMzE2ODY2MDA3MjEwLCAxLjI4NDQ4MTk5MDI3NTAxMjU0NTAsIDEuMjcz
NDM0MjM4Mjk2MjQxMDk5NCwgMS4yNjI0MTI5MjkwNjk2MTUzNDM0LAotICAgIDEuMjUxNDE3MTE2
NDgwODUyNTA5OCwgMS4yNDA0NDU4NTQzMzQ0MDY0NTQ0LCAxLjIyOTQ5ODE5NTY5Mzg0OTE1OTks
IDEuMjE4NTczMTkyMjA4NzkwMzA3MSwKLSAgICAxLjIwNzY2OTg5MzQyNjc2MTI4MzAsIDEuMTk2
Nzg3MzQ2MDg4NDAzMTY2NSwgMS4xODU5MjQ1OTM0MDQyMDIzNTU3LCAxLjE3NTA4MDY3NDMxMDkx
MTc2ODcsCi0gICAgMS4xNjQyNTQ2MjI3MDU2NzkwMzk3LCAxLjE1MzQ0NTQ2NjY1NTc3NDgwNTYs
IDEuMTQyNjUyMjI3NTgxNjcyODkyOCwgMS4xMzE4NzM5MTk0MTEwNzg2NzMzLAotICAgIDEuMTIx
MTA5NTQ3NzAxMzMwNjA4MywgMS4xMTAzNTgxMDg3Mjc0MTE0MjgxLCAxLjA5OTYxODU4ODUzMjU5
NzY1NzUsIDEuMDg4ODg5OTYxOTM4NTQ3MjU5OCwKLSAgICAxLjA3ODE3MTE5MTUxMTM3MjcwMjQs
IDEuMDY3NDYxMjI2NDc5OTY4MTUzMCwgMS4wNTY3NTkwMDE2MDI1NTE4NDE0LCAxLjA0NjA2MzQz
NTk3NzA0NDU1MDMsCi0gICAgMS4wMzUzNzM0MzE3OTA1Mjg5NDk2LCAxLjAyNDY4Nzg3MzAwMjYx
NzgwNTIsIDEuMDE0MDA1NjIzOTU3MDk3MTA3NCwgMS4wMDMzMjU1Mjc5MTU2OTczNzE3LAotICAg
IDAuOTkyNjQ2NDA1NTA3Mjc2NDcwMDksIDAuOTgxOTY3MDUzMDg1MDYzMTc5MTQsIDAuOTcxMjg2
MjQwOTgzOTAzOTc4OTYsIDAuOTYwNjAyNzExNjY4NjY3MDk5MTcsCi0gICAgMC45NDk5MTUxNzc3
NjQwNzY1OTk0MCwgMC45MzkyMjIzMTk5NTUyNjI5Nzk1MiwgMC45Mjg1MjI3ODQ3NDcyMTExMzk5
OSwgMC45MTc4MTUxODIwNzAwNDQ5MzkxNSwKLSAgICAwLjkwNzA5ODA4MjcxNTY5MTAwNjAwLCAw
Ljg5NjM3MDAxNTU4OTg5MDY5MDA2LCAwLjg4NTYyOTQ2NDc2MTc1MjI4MDUyLCAwLjg3NDg3NDg2
NjI5MTAyNTg1MzUyLAotICAgIDAuODY0MTA0NjA0ODExMDA1MTk1MTEsIDAuODUzMzE3MDA5ODQy
Mzc0MDYzODYsIDAuODQyNTEwMzUxODEwMzY5MjgzMzMsIDAuODMxNjgyODM3NzM0MjczODgzOTMs
Ci0gICAgMC44MjA4MzI2MDY1NTQ0MTI1MjI5MCwgMC44MDk5NTc3MjQwNTc0MTkwNjYyMCwgMC43
OTkwNTYxNzczNTU0ODc4ODEwOSwgMC43ODgxMjU4Njg4Njk0OTMyNDk3NywKLSAgICAwLjc3NzE2
NDYwOTc1OTEzMDQzOTM2LCAwLjc2NjE3MDExMjczNTQzNTQxMzI4LCAwLjc1NTEzOTk4NDE4MTk4
Mjg5ODA4LCAwLjc0NDA3MTcxNTUwMDUwODczOTcxLAotICAgIDAuNzMyOTYyNjczNTg0MzY2MDQ5
MTYsIDAuNzIxODEwMDkwMzA4NzU2ODk5MTIsIDAuNzEwNjExMDUwOTA5NjU1NzA0MTMsIDAuNjk5
MzYyNDgxMTAzMjMyNjYxNzQsCi0gICAgMC42ODgwNjExMzI3NzM3NDg1ODYxMywgMC42NzY3MDM1
NjgwMjk1MjMzNzkxMSwgMC42NjUyODYxNDEzOTI2Nzg1NTQwNSwgMC42NTM4MDQ5Nzk4NDc2NjU2
NTM1MywKLSAgICAwLjY0MjI1NTk2MDQyNDUzNzAzNDQ4LCAwLjYzMDYzNDY4NDkzMzQ5MTAwMTEz
LCAwLjYxODkzNjQ1MTM5NDg3Njc4MTc4LCAwLjYwNzE1NjIyMTYyMDMwMDg1MTM3LAotICAgIDAu
NTk1Mjg4NTg0MjkxNTAzNTkzODQsIDAuNTgzMzI3NzEyNzQ4NzcwMjc3ODUsIDAuNTcxMjY3MzE2
NTMyNTg5MDM5MTUsIDAuNTU5MTAwNTg1NTExNTQxMjc2NTIsCi0gICAgMC41NDY4MjAxMjUxNjMz
MTExMjU1MCwgMC41MzQ0MTc4ODEyMzcxNjYxNTM4NSwgMC41MjE4ODUwNTE1OTIxMzU2NDEwNSwg
MC41MDkyMTE5ODI0NDM2NTQ5NTMxOSwKLSAgICAwLjQ5NjM4ODA0NTUxODY3MTU5NzU0LCAwLjQ4
MzQwMTQ5MTY1MzQ2MjI0NzgyLCAwLjQ3MDIzOTI3NTA4MjE2OTQ1MzM4LCAwLjQ1Njg4Njg0MDkz
MTQyMDcxMjc5LAotICAgIDAuNDQzMzI3ODY2MDczNTUyOTYzMDUsIDAuNDI5NTQzOTQwMjI1NDEx
Mjk1ODksIDAuNDE1NTE0MTY5NjAwMzU3MDAxMDAsIDAuNDAxMjE0Njc4ODk2Mjc4MzYyMjksCi0g
ICAgMC4zODY2MTc5Nzc5NDExMjAyMTU2OCwgMC4zNzE2OTIxNDUzMjk5MTc4NjExOCwgMC4zNTYz
OTk3NjAyNTgzOTQ0MzcyMSwgMC4zNDA2OTY0ODEwNjQ4NDk3OTY3NCwKLSAgICAwLjMyNDUyOTEx
NzAxNjkxMDA4NTQ3LCAwLjMwNzgzMjk1NDY3NDkzMjg3MzA3LCAwLjI5MDUyNzk1NTQ5MTIzMTE1
MTY3LCAwLjI3MjUxMzE4NTQ3ODQ2NTQ3OTI0LAotICAgIDAuMjUzNjU4MzYzMzg1OTEyODQ0MzMs
IDAuMjMzNzkwNDgzMDU5Njc1NTM2MTksIDAuMjEyNjcxNTEwNjMwOTY3NDUyNjQsIDAuMTg5OTU4
Njg5NjIyNDMyNzc3NzQsCi0gICAgMC4xNjUxMjc2MjI1NjQxODgzMTc5NiwgMC4xMzczMDQ5ODA5
NDAwMTM4MDQyMCwgMC4xMDQ4Mzg1MDc1NjU4MjAxNzkxNSwgMC4wNjM4NTIxNjM4MTUwMDM0ODAx
NzMsCi0gICAgMAotfTsKLQotdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGU+Ci1jb25zdCBSZWFsVHlw
ZSBleHBvbmVudGlhbF90YWJsZTxSZWFsVHlwZT46OnRhYmxlX3lbMjU3XSA9IHsKLSAgICAwLCAw
LjAwMDQ1NDEzNDM1Mzg0MTQ5Njc1NTQ1LCAwLjAwMDk2NzI2OTI4MjMyNzE3NDUyODg0LCAwLjAw
MTUzNjI5OTc4MDMwMTU3MjM4MjQsCi0gICAgMC4wMDIxNDU5Njc3NDM3MTg5MDYxNzkzLCAwLjAw
Mjc4ODc5ODc5MzU3NDA3NTk2NDAsIDAuMDAzNDYwMjY0Nzc3ODM2OTAzOTg1NSwgMC4wMDQxNTcy
OTUxMjA4MzM3OTUyNTMyLAotICAgIDAuMDA0ODc3NjU1OTgzNTQyMzkyNTgwNCwgMC4wMDU2MTk2
NDIyMDcyMDU0ODMxNzEwLCAwLjAwNjM4MTkwNTkzNzMxOTE3OTQ0MjIsIDAuMDA3MTYzMzUzMTgz
NjM0OTg0MTQyNSwKLSAgICAwLjAwNzk2MzA3NzQzODAxNzAzOTIzOTYsIDAuMDA4NzgwMzE0OTg1
ODA4OTc1MjM0NywgMC4wMDk2MTQ0MTM2NDI1MDIyMDk0MTAxLCAwLjAxMDQ2NDgxMDE4MTAyOTk3
OTQ4OCwKLSAgICAwLjAxMTMzMTAxMzU5NzgzNDU5NzQ4OCwgMC4wMTIyMTI1OTI0MjYyNTUzODA2
NjEsIDAuMDEzMTA5MTY0OTMxMjU0OTkxMDcwLCAwLjAxNDAyMDM5MTQwMzE4MTkzNzMzNCwKLSAg
ICAwLjAxNDk0NTk2ODAxMTY5MTE0ODA3OSwgMC4wMTU4ODU2MjE4Mzk5NzMxNjI0OTAsIDAuMDE2
ODM5MTA2ODI2MDM5OTQ2MzU5LCAwLjAxNzgwNjIwMDQxMDkxMTM2MDU2MywKLSAgICAwLjAxODc4
NjcwMDc0NDY5NjAyOTQ5NywgMC4wMTk3ODA0MjQzMzgwMDk3NDE3MzcsIDAuMDIwNzg3MjA0MDcy
NTc4MTE3NjAzLCAwLjAyMTgwNjg4NzUwNDI4MzU4MjEyNSwKLSAgICAwLjAyMjgzOTMzNTQwNjM4
NTIzODgyOSwgMC4wMjM4ODQ0MjA1MTE1NTgxNzAzNDgsIDAuMDI0OTQyMDI2NDE5NzMxNzgyOTcx
LCAwLjAyNjAxMjA0NjY0NTEzNDIxODA3NiwKLSAgICAwLjAyNzA5NDM4Mzc4MDk1NTc5ODQyNCwg
MC4wMjgxODg5NDg3NjM5Nzg2MzQ0MjEsIDAuMDI5Mjk1NjYwMjI0NjM3Mzk0MDE1LCAwLjAzMDQx
NDQ0MzkxMDQ2NjYwNTQ5MiwKLSAgICAwLjAzMTU0NTIzMjE3Mjg5MzYwNTQ5OSwgMC4wMzI2ODc5
NjM1MDg5NTk1MzMzMTcsIDAuMDMzODQyNTgyMTUwODc0MzI5MDMxLCAwLjAzNTAwOTAzNzY5NzM5
NzQxMTA2NywKLSAgICAwLjAzNjE4NzI4NDc4MTkzMTQxOTc1NCwgMC4wMzczNzcyODI3NzI5NTkz
NjAxMjgsIDAuMDM4NTc4OTk1NTAzMDc0ODU5NjI2LCAwLjAzOTc5MjM5MTAyMzM3NDEyMjY3MCwK
LSAgICAwLjA0MTAxNzQ0MTM4MDQxNDgyMDgxNiwgMC4wNDIyNTQxMjI0MTMzMTYyMzE0MTMsIDAu
MDQzNTAyNDEzNTY4ODg4MTgzMzAxLCAwLjA0NDc2MjI5NzczMjk0MzI4MDY5NCwKLSAgICAwLjA0
NjAzMzc2MTA3NjE3NTE2Njc2MiwgMC4wNDczMTY3OTI5MTMxODE1NDg3MDMsIDAuMDQ4NjExMzg1
NTczMzc5NDk0NDAxLCAwLjA0OTkxNzUzNDI4MjcwNjM3NDk0NCwKLSAgICAwLjA1MTIzNTIzNzA1
NTEyNjI3OTgzMCwgMC4wNTI1NjQ0OTQ1OTMwNzE2ODk1OTUsIDAuMDUzOTA1MzEwMTk2MDQ2MDg1
MTA0LCAwLjA1NTI1NzY4OTY3NjY5NzAzODMyMiwKLSAgICAwLjA1NjYyMTY0MTI4Mzc0Mjg3NDQz
OCwgMC4wNTc5OTcxNzU2MzEyMDA2NTkwOTgsIDAuMDU5Mzg0MzA1NjMzNDIwMjY0NDg3LCAwLjA2
MDc4MzA0NjQ0NTQ3OTYzNjA1MSwKLSAgICAwLjA2MjE5MzQxNTQwODU0MDk5NjE1MCwgMC4wNjM2
MTU0MzE5OTk4MDczMzEwNzYsIDAuMDY1MDQ5MTE3Nzg2NzUzNzU1MDM2LCAwLjA2NjQ5NDQ5NjM4
NTMzOTc3OTA0MywKLSAgICAwLjA2Nzk1MTU5MzQyMTkzNjYwNzc3MCwgMC4wNjk0MjA0MzY0OTg3
Mjg3NTE2NzUsIDAuMDcwOTAxMDU1MTYyMzcxODI4NDI2LCAwLjA3MjM5MzQ4MDg3NTcwODc0MzAy
MywKLSAgICAwLjA3Mzg5Nzc0Njk5MjM2NDc0NjMwOCwgMC4wNzU0MTM4ODg3MzQwNTg0MDg0NTMs
IDAuMDc2OTQxOTQzMTcwNDgwNTEwMTAwLCAwLjA3ODQ4MTk0OTIwMTYwNjQyNjA0MiwKLSAgICAw
LjA4MDAzMzk0NzU0MjMxOTkxMDAyMywgMC4wODE1OTc5ODA3MDkyMzc0MjA5MzAsIDAuMDgzMTc0
MDkzMDA5NjMyMzgwMzU0LCAwLjA4NDc2MjMzMDUzMjM2ODEyNTM4NiwKLSAgICAwLjA4NjM2Mjc0
MTE0MDc1NjkxMjI3NywgMC4wODc5NzUzNzQ0NjcyNzAyMTkzMDAsIDAuMDg5NjAwMjgxOTEwMDMy
ODY0NTM0LCAwLjA5MTIzNzUxNjYzMTA0MDE2MjA1NywKLSAgICAwLjA5Mjg4NzEzMzU1NjA0MzU0
NjUyMywgMC4wOTQ1NDkxODkzNzYwNTU4NTM3MTgsIDAuMDk2MjIzNzQyNTUwNDMyODAwMTAzLCAw
LjA5NzkxMDg1MzMxMTQ5MjE5OTYxOCwKLSAgICAwLjA5OTYxMDU4MzY3MDYzNzEyODgyNiwgMC4x
MDEzMjI5OTc0MjU5NTM2MzU4OCwgMC4xMDMwNDgxNjAxNzEyNTc3MTU1MywgMC4xMDQ3ODYxMzkz
MDY1NzAxNjkyOCwKLSAgICAwLjEwNjUzNzAwNDA1MDAwMTY2MjE4LCAwLjEwODMwMDgyNTQ1MTAz
Mzc5ODY3LCAwLjExMDA3NzY3NjQwNTE4NTM5MDI2LCAwLjExMTg2NzYzMTY3MDA1NjI5NzMxLAot
ICAgIDAuMTEzNjcwNzY3ODgyNzQ0MzEzMDEsIDAuMTE1NDg3MTYzNTc4NjMzNTM2NjQsIDAuMTE3
MzE2ODk5MjExNTU1NTcwNTcsIDAuMTE5MTYwMDU3MTc1MzI3Njg0NjcsCi0gICAgMC4xMjEwMTY3
MjE4MjY2NzQ4MzcyOSwgMC4xMjI4ODY5Nzk1MDk1NDUxMzQ5OCwgMC4xMjQ3NzA5MTg1ODA4MzA5
NjU3OCwgMC4xMjY2Njg2Mjk0Mzc1MTA2NjUxOCwKLSAgICAwLjEyODU4MDIwNDU0NTIyODE3ODcw
LCAwLjEzMDUwNTczODQ2ODMzMDc4MjI1LCAwLjEzMjQ0NTMyNzkwMTM4NzUyMDIzLCAwLjEzNDM5
OTA3MTcwMjIxMzYzMDc4LAotICAgIDAuMTM2MzY3MDcwOTI2NDI4ODU4NDEsIDAuMTM4MzQ5NDI4
ODYzNTgwMjE0MDYsIDAuMTQwMzQ2MjUxMDc0ODYyNDQyMTAsIDAuMTQyMzU3NjQ1NDMyNDcyMjAw
NDMsCi0gICAgMC4xNDQzODM3MjIxNjA2MzQ3NjQ3MywgMC4xNDY0MjQ1OTM4NzgzNDQ5Mzc4Nywg
MC4xNDg0ODAzNzU2NDM4NjY3OTIyMiwgMC4xNTA1NTExODUwMDEwMzk5MDM1NCwKLSAgICAwLjE1
MjYzNzE0MjAyNzQ0Mjg2MTU0LCAwLjE1NDczODM2OTM4NDQ2ODA3MzEyLCAwLjE1Njg1NDk5MjM2
OTM2NTIyMDEzLCAwLjE1ODk4NzEzODk2OTMxNDIwNTcyLAotICAgIDAuMTYxMTM0OTM5OTE3NTky
MDMxODMsIDAuMTYzMjk4NTI4NzUxOTAxODA3OTUsIDAuMTY1NDc4MDQxODc0OTM2MDA5MTUsIDAu
MTY3NjczNjE4NjE3MjUwMTkzMjIsCi0gICAgMC4xNjk4ODU0MDEzMDI1Mjc2NjUxMywgMC4xNzIx
MTM1MzUzMTUzMjAwNTcwMCwgMC4xNzQzNTgxNjkxNzEzNTM0ODc4OCwgMC4xNzY2MTk0NTQ1OTA0
OTQ4OTU4MSwKLSAgICAwLjE3ODg5NzU0NjU3MjQ3ODMxMjQxLCAwLjE4MTE5MjYwMzQ3NTQ5NjI5
NDg4LCAwLjE4MzUwNDc4NzA5Nzc2NzQ2MTUwLCAwLjE4NTgzNDI2Mjc2MjE5NzExNDk1LAotICAg
IDAuMTg4MTgxMTk5NDA0MjU0MzA0ODUsIDAuMTkwNTQ1NzY5NjYzMTk1NDAwMTMsIDAuMTkyOTI4
MTQ5OTc2NzcxMzM4NzMsIDAuMTk1MzI4NTIwNjc5NTYzMjIzMTUsCi0gICAgMC4xOTc3NDcwNjYx
MDUwOTg4NjQ2NCwgMC4yMDAxODM5NzQ2OTE5MTEyNzcyNywgMC4yMDI2Mzk0MzkwOTM3MDkwMTkz
MCwgMC4yMDUxMTM2NTYyOTM4Mzc3MDg4MCwKLSAgICAwLjIwNzYwNjgyNzcyNDIyMjA0MjA1LCAw
LjIxMDExOTE1OTM4ODk4ODI1OTE0LCAwLjIxMjY1MDg2MTk5Mjk3ODI3NTIyLCAwLjIxNTIwMjE1
MTA3NTM3ODY3Nzg2LAotICAgIDAuMjE3NzczMjQ3MTQ4NzAwNTMyNjQsIDAuMjIwMzY0Mzc1ODQz
MzU5NDk3MjAsIDAuMjIyOTc1NzY4MDU4MTIwMTgwNTAsIDAuMjI1NjA3NjYwMTE2Njg0MDY0OTUs
Ci0gICAgMC4yMjgyNjAyOTM5MzA3MTY3MDY2NCwgMC4yMzA5MzM5MTcxNjk2Mjc0MjE3MywgMC4y
MzM2Mjg3ODM0Mzc0MzMzMzk0NSwgMC4yMzYzNDUxNTI0NTcwNTk2NDcxNSwKLSAgICAwLjIzOTA4
MzI5MDI2MjQ0OTE3MDAyLCAwLjI0MTg0MzQ2OTM5ODg3NzIyNzYxLCAwLjI0NDYyNTk2OTEzMTg5
MjEwOTAxLCAwLjI0NzQzMTA3NTY2NTMyNzYzODk0LAotICAgIDAuMjUwMjU5MDgyMzY4ODYyMzA5
NjcsIDAuMjUzMTEwMjkwMDE1NjI5NDgxNzEsIDAuMjU1OTg1MDA3MDMwNDE1MzgwMTUsIDAuMjU4
ODgzNTQ5NzQ5MDE2MjE2NzgsCi0gICAgMC4yNjE4MDYyNDI2ODkzNjI5NTI0MywgMC4yNjQ3NTM0
MTg4MzUwNjIyMDIwOSwgMC4yNjc3MjU0MTk5MzIwNDQ4MTgwOCwgMC4yNzA3MjI1OTY3OTkwNjAw
MzE2NywKLSAgICAwLjI3Mzc0NTMwOTY1MjgwMjk4MzAyLCAwLjI3Njc5MzkyODQ0ODUxNzM0NDU4
LCAwLjI3OTg2ODgzMzIzNjk3Mjg5OTIwLCAwLjI4Mjk3MDQxNDUzODc4MDc2MDEwLAotICAgIDAu
Mjg2MDk5MDczNzM3MDc2ODQ2NzMsIDAuMjg5MjU1MjIzNDg5Njc3NzMzMDgsIDAuMjkyNDM5Mjg4
MTYxODkyNTg3NzIsIDAuMjk1NjUxNzA0MjgxMjYxMjA5NDgsCi0gICAgMC4yOTg4OTI5MjEwMTU1
ODE3NzA5OSwgMC4zMDIxNjM0MDA2NzU2OTM1Mjg5NywgMC4zMDU0NjM2MTkyNDQ1OTAyMzU0MSwg
MC4zMDg3OTQwNjY5MzQ1NjAxNjc5NCwKLSAgICAwLjMxMjE1NTI0ODc3NDE3OTU2OTQ1LCAwLjMx
NTU0NzY4NTIyNzEyODkzNjMyLCAwLjMxODk3MTkxMjg0NDk1NzIzNzczLCAwLjMyMjQyODQ4NDk1
NjA4OTE0Mjg5LAotICAgIDAuMzI1OTE3OTcyMzkzNTU2MTk4MjIsIDAuMzI5NDQwOTY0MjY0MTM2
MzMwOTEsIDAuMzMyOTk4MDY4NzYxODA4OTY3MTMsIDAuMzM2NTg5OTE0MDI4Njc3NTgxNDQsCi0g
ICAgMC4zNDAyMTcxNDkwNjY3ODAwNDU2MCwgMC4zNDM4ODA0NDQ3MDQ1MDI0MzAxMCwgMC4zNDc1
ODA0OTQ2MjE2MzY5ODU2NywgMC4zNTEzMTgwMTY0Mzc0ODMzNDY4MSwKLSAgICAwLjM1NTA5Mzc1
Mjg2Njc4NzQ1OTI1LCAwLjM1ODkwODQ3Mjk0ODc0OTc2MTk2LCAwLjM2Mjc2Mjk3MzM1NDgxNzc3
MzM1LCAwLjM2NjY1ODA3OTc4MTUxNDE0ODkwLAotICAgIDAuMzcwNTk0NjQ4NDM1MTQ1OTk0MjEs
IDAuMzc0NTczNTY3NjE1OTAyMTUxOTMsIDAuMzc4NTk1NzU5NDA5NTgwODEwOTIsIDAuMzgyNjYy
MTgxNDk2MDA5ODIxMTIsCi0gICAgMC4zODY3NzM4MjkwODQxMzc2ODExNSwgMC4zOTA5MzE3MzY5
ODQ3OTcxMDcxNywgMC4zOTUxMzY5ODE4MzMyOTAxNTMzNiwgMC4zOTkzOTA2ODQ0NzUyMzEwNzg3
NywKLSAgICAwLjQwMzY5NDAxMjUzMDUzMDI2NzM5LCAwLjQwODA0ODE4MzE1MjAzMjM4MjM4LCAw
LjQxMjQ1NDQ2NTk5NzE2MTE2NzcyLCAwLjQxNjkxNDE4NjQzMzAwMjg5NDY1LAotICAgIDAuNDIx
NDI4NzI4OTk3NjE2NTk2MzUsIDAuNDI1OTk5NTQxMTQzMDM0MzU3MzksIDAuNDMwNjI4MTM3Mjg4
NDU4ODM5MjMsIDAuNDM1MzE2MTAzMjE1NjM2NTk3NTgsCi0gICAgMC40NDAwNjUxMDA4NDIzNTM4
NzUwMSwgMC40NDQ4NzY4NzM0MTQ1NDg1MTU5MywgMC40NDk3NTMyNTExNjI3NTQ5ODkxOSwgMC40
NTQ2OTYxNTc0NzQ2MTU0ODA0OSwKLSAgICAwLjQ1OTcwNzYxNTY0MjEzNzY4NjY5LCAwLjQ2NDc4
OTc1NjI1MDQyNjE4MDY3LCAwLjQ2OTk0NDgyNTI4Mzk1OTk5ODQxLCAwLjQ3NTE3NTE5MzAzNzM3
NzM4Mjk5LAotICAgIDAuNDgwNDgzMzYzOTMwNDU0MjMwMTYsIDAuNDg1ODcxOTg3MzQxODg0OTM1
NjQsIDAuNDkxMzQzODY5NTk0MDMyNTU1MDAsIDAuNDk2OTAxOTg3MjQxNTQ5NTUyOTQsCi0gICAg
MC41MDI1NDk1MDE4NDEzNDc2OTI4OSwgMC41MDgyODk3NzY0MTA2NDI4MzQ5NSwgMC41MTQxMjYz
OTM4MTQ3NDg1NTc4OCwgMC41MjAwNjMxNzczNjgyMzM1NjgyMywKLSAgICAwLjUyNjEwNDIxMzk4
MzYxOTcyNjAyLCAwLjUzMjI1Mzg4MDI2MzA0MzI2OTQ1LCAwLjUzODUxNjg3MjAwMjg2MTg2NTkw
LCAwLjU0NDg5ODIzNzY3MjQzOTYzNjYzLAotICAgIDAuNTUxNDAzNDE2NTQwNjQxMzE2ODUsIDAu
NTU4MDM4MjgyMjYyNTg3NDgxNDAsIDAuNTY0ODA5MTkyOTEyNDAwMjI0MzQsIDAuNTcxNzIzMDQ4
NjY0ODI1NzkwMDgsCi0gICAgMC41Nzg3ODczNTg2MDI4NDUwMzA1NywgMC41ODYwMTAzMTg0Nzcy
NjgwMjc1NSwgMC41OTM0MDA5MDE2OTE3MzM0MTUyMSwgMC42MDA5Njg5NjYzNjUyMzIyNDc0MiwK
LSAgICAwLjYwODcyNTM4MjA3OTYyMjA2NTA3LCAwLjYxNjY4MjE4MDkxNTIwNzYyMzI2LCAwLjYy
NDg1MjczODcwMzY2NTkyNjA1LCAwLjYzMzI1MTk5NDIxNDM2NjA3OTY4LAotICAgIDAuNjQxODk2
NzE2NDI3MjY2MDcwMTgsIDAuNjUwODA1ODMzNDE0NTcxMDQ4ODEsIDAuNjYwMDAwODQxMDc4OTk5
NzQxNzgsIDAuNjY5NTA2MzE2NzMxOTI0Nzc2ODQsCi0gICAgMC42NzkzNTA1NzIyNjQ3NjUzODc0
MSwgMC42ODk1NjY0OTYxMTcwNzc5ODg5MCwgMC43MDAxOTI2NTUwODI3ODgxNjcwOSwgMC43MTEy
NzQ3NjA4MDUwNzU5Nzg4MiwKLSAgICAwLjcyMjg2NzY1OTU5MzU3MjAwNzAyLCAwLjczNTAzODA5
MjQzMTQyMzUxNTMwLCAwLjc0Nzg2ODYyMTk4NTE5NTEwNzQyLCAwLjc2MTQ2MzM4ODg0OTg5NjI0
ODYyLAotICAgIDAuNzc1OTU2ODUyMDQwMTE1NTk2NzUsIDAuNzkxNTI3NjM2OTcyNDk1NjU1MTks
IDAuODA4NDIxNjUxNTIzMDA4MzgwMDUsIDAuODI2OTkzMjk2NjQzMDUwMzMzOTksCi0gICAgMC44
NDc3ODU1MDA2MjM5ODk2MjA5NiwgMC44NzE3MDQzMzIzODEyMDM2MzY2OSwgMC45MDA0Njk5Mjk5
MjU3NDY0MzgwMCwgMC45MzgxNDM2ODA4NjIxNzQ2NzkxNiwKLSAgICAxCi19OwotCi10ZW1wbGF0
ZTxjbGFzcyBSZWFsVHlwZSA9IGRvdWJsZT4KLXN0cnVjdCB1bml0X2V4cG9uZW50aWFsX2Rpc3Ry
aWJ1dGlvbgotewotICAgIHRlbXBsYXRlPGNsYXNzIEVuZ2luZT4KLSAgICBSZWFsVHlwZSBvcGVy
YXRvcigpKEVuZ2luZSYgZW5nKSB7Ci0gICAgICAgIGNvbnN0IGRvdWJsZSAqIGNvbnN0IHRhYmxl
X3ggPSBleHBvbmVudGlhbF90YWJsZTxkb3VibGU+Ojp0YWJsZV94OwotICAgICAgICBjb25zdCBk
b3VibGUgKiBjb25zdCB0YWJsZV95ID0gZXhwb25lbnRpYWxfdGFibGU8ZG91YmxlPjo6dGFibGVf
eTsKLSAgICAgICAgUmVhbFR5cGUgc2hpZnQoMCk7Ci0gICAgICAgIGZvcig7OykgewotICAgICAg
ICAgICAgc3RkOjpwYWlyPFJlYWxUeXBlLCBpbnQ+IHZhbHMgPSBnZW5lcmF0ZV9pbnRfZmxvYXRf
cGFpcjxSZWFsVHlwZSwgOD4oZW5nKTsKLSAgICAgICAgICAgIGludCBpID0gdmFscy5zZWNvbmQ7
Ci0gICAgICAgICAgICBSZWFsVHlwZSB4ID0gdmFscy5maXJzdCAqIFJlYWxUeXBlKHRhYmxlX3hb
aV0pOwotICAgICAgICAgICAgaWYoeCA8IFJlYWxUeXBlKHRhYmxlX3hbaSArIDFdKSkgcmV0dXJu
IHNoaWZ0ICsgeDsKLSAgICAgICAgICAgIC8vIEZvciBpPTAgd2UgbmVlZCB0byBnZW5lcmF0ZSBm
cm9tIHRoZSB0YWlsLCBidXQgYmVjYXVzZSB0aGlzIGlzIGFuIGV4cG9uZW50aWFsCi0gICAgICAg
ICAgICAvLyBkaXN0cmlidXRpb24sIHRoZSB0YWlsIGxvb2tzIGV4YWN0bHkgbGlrZSB0aGUgYm9k
eSwgc28gd2UgY2FuIHNpbXBseSByZXBlYXQgd2l0aCBhCi0gICAgICAgICAgICAvLyBzaGlmdDoK
LSAgICAgICAgICAgIGlmIChpID09IDApIHNoaWZ0ICs9IFJlYWxUeXBlKHRhYmxlX3hbMV0pOwot
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgUmVhbFR5cGUgeTAxID0gdW5pZm9y
bV8wMTxSZWFsVHlwZT4oKShlbmcpOwotICAgICAgICAgICAgICAgIFJlYWxUeXBlIHkgPSBSZWFs
VHlwZSh0YWJsZV95W2ldKSArIHkwMSAqIFJlYWxUeXBlKHRhYmxlX3lbaSsxXSAtIHRhYmxlX3lb
aV0pOwotCi0gICAgICAgICAgICAgICAgLy8gQWxsIHdlIGNhcmUgYWJvdXQgaXMgd2hldGhlciB0
aGVzZSBhcmUgPCBvciA+IDA7IHRoZXNlIHZhbHVlcyBhcmUgZXF1YWwgdG8KLSAgICAgICAgICAg
ICAgICAvLyAobGJvdW5kKSBvciBwcm9wb3J0aW9uYWwgdG8gKHVib3VuZCkgYHlgIG1pbnVzIHRo
ZSBsb3dlci91cHBlciBib3VuZC4KLSAgICAgICAgICAgICAgICBSZWFsVHlwZSB5X2Fib3ZlX3Vi
b3VuZCA9IFJlYWxUeXBlKHRhYmxlX3hbaV0gLSB0YWJsZV94W2krMV0pICogeTAxIC0gKFJlYWxU
eXBlKHRhYmxlX3hbaV0pIC0geCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgeV9hYm92ZV9s
Ym91bmQgPSB5IC0gKFJlYWxUeXBlKHRhYmxlX3lbaSsxXSkgKyAoUmVhbFR5cGUodGFibGVfeFtp
KzFdKSAtIHgpICogUmVhbFR5cGUodGFibGVfeVtpKzFdKSk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoeV9hYm92ZV91Ym91bmQgPCAwIC8vIGlmIGFib3ZlIHRoZSB1cHBlciBib3VuZCByZWplY3Qg
aW1tZWRpYXRlbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgICAg
ICAgICAgICAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgeV9hYm92ZV9sYm91bmQgPCAwIC8v
IElmIGJlbG93IHRoZSBsb3dlciBib3VuZCBhY2NlcHQgaW1tZWRpYXRlbHkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIHkgPCBmKHgpIC8vIE90
aGVyd2lzZSBpdCdzIGJldHdlZW4gdGhlIGJvdW5kcyBhbmQgd2UgbmVlZCBhIGZ1bGwgY2hlY2sK
LSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICApIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHggKyBzaGlmdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3RhdGljIFJlYWxUeXBlIGYoUmVhbFR5
cGUgeCkgewotICAgICAgICB1c2luZyBzdGQ6OmV4cDsKLSAgICAgICAgcmV0dXJuIGV4cCgteCk7
Ci0gICAgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLQotLyoqCi0gKiBUaGUgZXhw
b25lbnRpYWwgZGlzdHJpYnV0aW9uIGlzIGEgbW9kZWwgb2YgXHJhbmRvbV9kaXN0cmlidXRpb24g
d2l0aAotICogYSBzaW5nbGUgcGFyYW1ldGVyIGxhbWJkYS4KLSAqCi0gKiBJdCBoYXMgXGYkXGRp
c3BsYXlzdHlsZSBwKHgpID0gXGxhbWJkYSBlXnstXGxhbWJkYSB4fVxmJAotICoKLSAqIFRoZSBp
bXBsZW1lbnRhdGlvbiB1c2VzIHRoZSAiemlnZ3VyYXQiIGFsZ29yaXRobSwgYXMgZGVzY3JpYmVk
IGluCi0gKgotICogIEBibG9ja3F1b3RlCi0gKiAgIlRoZSBaaWdndXJhdCBNZXRob2QgZm9yIEdl
bmVyYXRpbmcgUmFuZG9tIFZhcmlhYmxlcyIsCi0gKiAgR2VvcmdlIE1hcnNhZ2xpYSBhbmQgV2Fp
IFdhbiBUc2FuZywgSm91cm5hbCBvZiBTdGF0aXN0aWNhbCBTb2Z0d2FyZQotICogIFZvbHVtZSA1
LCBOdW1iZXIgOCAoMjAwMCksIDEtNy4KLSAqICBAZW5kYmxvY2txdW90ZQotICovCi10ZW1wbGF0
ZTxjbGFzcyBSZWFsVHlwZSA9IGRvdWJsZT4KLWNsYXNzIGV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlv
bgotewotcHVibGljOgotICAgIHR5cGVkZWYgUmVhbFR5cGUgaW5wdXRfdHlwZTsKLSAgICB0eXBl
ZGVmIFJlYWxUeXBlIHJlc3VsdF90eXBlOwotCi0gICAgY2xhc3MgcGFyYW1fdHlwZQotICAgIHsK
LSAgICBwdWJsaWM6Ci0KLSAgICAgICAgdHlwZWRlZiBleHBvbmVudGlhbF9kaXN0cmlidXRpb24g
ZGlzdHJpYnV0aW9uX3R5cGU7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnN0cnVjdHMg
cGFyYW1ldGVycyB3aXRoIGEgZ2l2ZW4gbGFtYmRhLgotICAgICAgICAgKgotICAgICAgICAgKiBS
ZXF1aXJlczogbGFtYmRhID4gMAotICAgICAgICAgKi8KLSAgICAgICAgcGFyYW1fdHlwZShSZWFs
VHlwZSBsYW1iZGFfYXJnID0gUmVhbFR5cGUoMS4wKSkKLSAgICAgICAgICA6IF9sYW1iZGEobGFt
YmRhX2FyZykgeyBCT09TVF9BU1NFUlQoX2xhbWJkYSA+IFJlYWxUeXBlKDApKTsgfQotCi0gICAg
ICAgIC8qKiBSZXR1cm5zIHRoZSBsYW1iZGEgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24u
ICovCi0gICAgICAgIFJlYWxUeXBlIGxhbWJkYSgpIGNvbnN0IHsgcmV0dXJuIF9sYW1iZGE7IH0K
LQotICAgICAgICAvKiogV3JpdGVzIHRoZSBwYXJhbWV0ZXJzIHRvIGEgQGMgc3RkOjpvc3RyZWFt
LiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX09TVFJFQU1fT1BFUkFUT1Iob3MsIHBh
cmFtX3R5cGUsIHBhcm0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9zIDw8IHBhcm0uX2xhbWJk
YTsKLSAgICAgICAgICAgIHJldHVybiBvczsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
LyoqIFJlYWRzIHRoZSBwYXJhbWV0ZXJzIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uICovCi0gICAg
ICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRPUihpcywgcGFyYW1fdHlwZSwg
cGFybSkKLSAgICAgICAgewotICAgICAgICAgICAgaXMgPj4gcGFybS5fbGFtYmRhOwotICAgICAg
ICAgICAgcmV0dXJuIGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgdHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgZXF1YWwuICovCi0gICAgICAgIEJPT1NU
X1JBTkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IocGFyYW1fdHlwZSwgbGhzLCByaHMpCi0g
ICAgICAgIHsgcmV0dXJuIGxocy5fbGFtYmRhID09IHJocy5fbGFtYmRhOyB9Ci0KLSAgICAgICAg
LyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgZGlmZmVy
ZW50LiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0lORVFVQUxJVFlfT1BFUkFUT1Io
cGFyYW1fdHlwZSkKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlYWxUeXBlIF9sYW1iZGE7Ci0g
ICAgfTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYW4gZXhwb25lbnRpYWxfZGlzdHJp
YnV0aW9uIHdpdGggYSBnaXZlbiBsYW1iZGEuCi0gICAgICoKLSAgICAgKiBSZXF1aXJlczogbGFt
YmRhID4gMAotICAgICAqLwotICAgIGV4cGxpY2l0IGV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbihS
ZWFsVHlwZSBsYW1iZGFfYXJnID0gUmVhbFR5cGUoMS4wKSkKLSAgICAgIDogX2xhbWJkYShsYW1i
ZGFfYXJnKSB7IEJPT1NUX0FTU0VSVChfbGFtYmRhID4gUmVhbFR5cGUoMCkpOyB9Ci0KLSAgICAv
KioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIGV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbiBmcm9tIGl0
cyBwYXJhbWV0ZXJzCi0gICAgICovCi0gICAgZXhwbGljaXQgZXhwb25lbnRpYWxfZGlzdHJpYnV0
aW9uKGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0pCi0gICAgICA6IF9sYW1iZGEocGFybS5sYW1iZGEo
KSkge30KLQotICAgIC8vIGNvbXBpbGVyLWdlbmVyYXRlZCBjb3B5IGN0b3IgYW5kIGFzc2lnbm1l
bnQgb3BlcmF0b3IgYXJlIGZpbmUKLQotICAgIC8qKiBSZXR1cm5zIHRoZSBsYW1iZGEgcGFyYW1l
dGVyIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgUmVhbFR5cGUgbGFtYmRhKCkgY29uc3Qg
eyByZXR1cm4gX2xhbWJkYTsgfQotCi0gICAgLyoqIFJldHVybnMgdGhlIHNtYWxsZXN0IHZhbHVl
IHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4gKi8KLSAgICBSZWFsVHlwZSBtaW4g
Qk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgY29uc3QKLSAgICB7IHJldHVybiBS
ZWFsVHlwZSgwKTsgfQotICAgIC8qKiBSZXR1cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgdGhl
IGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4gKi8KLSAgICBSZWFsVHlwZSBtYXggQk9PU1RfUFJF
VkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgY29uc3QKLSAgICB7IHJldHVybiAoc3RkOjpudW1l
cmljX2xpbWl0czxSZWFsVHlwZT46OmluZmluaXR5KSgpOyB9Ci0KLSAgICAvKiogUmV0dXJucyB0
aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIHBhcmFtX3R5cGUgcGFy
YW0oKSBjb25zdCB7IHJldHVybiBwYXJhbV90eXBlKF9sYW1iZGEpOyB9Ci0gICAgLyoqIFNldHMg
dGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICB2b2lkIHBhcmFtKGNv
bnN0IHBhcmFtX3R5cGUmIHBhcm0pIHsgX2xhbWJkYSA9IHBhcm0ubGFtYmRhKCk7IH0KLQotICAg
IC8qKgotICAgICAqIEVmZmVjdHM6IFN1YnNlcXVlbnQgdXNlcyBvZiB0aGUgZGlzdHJpYnV0aW9u
IGRvIG5vdCBkZXBlbmQKLSAgICAgKiBvbiB2YWx1ZXMgcHJvZHVjZWQgYnkgYW55IGVuZ2luZSBw
cmlvciB0byBpbnZva2luZyByZXNldC4KLSAgICAgKi8KLSAgICB2b2lkIHJlc2V0KCkgeyB9Ci0K
LSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIHZhcmlhdGUgZGlzdHJpYnV0ZWQgYWNj
b3JkaW5nIHRvIHRoZQotICAgICAqIGV4cG9uZW50aWFsIGRpc3RyaWJ1dGlvbi4KLSAgICAgKi8K
LSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmdpbmU+Ci0gICAgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKShF
bmdpbmUmIGVuZykgY29uc3QKLSAgICB7IAotICAgICAgICBkZXRhaWw6OnVuaXRfZXhwb25lbnRp
YWxfZGlzdHJpYnV0aW9uPFJlYWxUeXBlPiBpbXBsOwotICAgICAgICByZXR1cm4gaW1wbChlbmcp
IC8gX2xhbWJkYTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIHZh
cmlhdGUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBleHBvbmVudGlhbAotICAgICAqIGRp
c3RyaWJ1dGlvbiB3aXRoIHBhcmFtZXRlcnMgc3BlY2lmaWVkIGJ5IHBhcmFtLgotICAgICAqLwot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuZ2luZT4KLSAgICByZXN1bHRfdHlwZSBvcGVyYXRvcigpKEVu
Z2luZSYgZW5nLCBjb25zdCBwYXJhbV90eXBlJiBwYXJtKSBjb25zdAotICAgIHsgCi0gICAgICAg
IHJldHVybiBleHBvbmVudGlhbF9kaXN0cmlidXRpb24ocGFybSkoZW5nKTsKLSAgICB9Ci0KLSAg
ICAvKiogV3JpdGVzIHRoZSBkaXN0cmlidXRpb24gdG8gYSBzdGQ6Om9zdHJlYW0uICovCi0gICAg
Qk9PU1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCBleHBvbmVudGlhbF9kaXN0
cmlidXRpb24sIGVkKQotICAgIHsKLSAgICAgICAgb3MgPDwgZWQuX2xhbWJkYTsKLSAgICAgICAg
cmV0dXJuIG9zOwotICAgIH0KLQotICAgIC8qKiBSZWFkcyB0aGUgZGlzdHJpYnV0aW9uIGZyb20g
YSBzdGQ6OmlzdHJlYW0uICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJB
VE9SKGlzLCBleHBvbmVudGlhbF9kaXN0cmlidXRpb24sIGVkKQotICAgIHsKLSAgICAgICAgaXMg
Pj4gZWQuX2xhbWJkYTsKLSAgICAgICAgcmV0dXJuIGlzOwotICAgIH0KLQotICAgIC8qKgotICAg
ICAqIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHR3byBkaXN0cmlidXRpb25zIHdpbGwgcHJvZHVjZSBp
ZGVudGljYWwKLSAgICAgKiBzZXF1ZW5jZXMgb2YgdmFsdWVzIGdpdmVuIGVxdWFsIGdlbmVyYXRv
cnMuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElUWV9PUEVSQVRPUihl
eHBvbmVudGlhbF9kaXN0cmlidXRpb24sIGxocywgcmhzKQotICAgIHsgcmV0dXJuIGxocy5fbGFt
YmRhID09IHJocy5fbGFtYmRhOyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVl
IGlmZiB0aGUgdHdvIGRpc3RyaWJ1dGlvbnMgd2lsbCBwcm9kdWNlIGRpZmZlcmVudAotICAgICAq
IHNlcXVlbmNlcyBvZiB2YWx1ZXMgZ2l2ZW4gZXF1YWwgZ2VuZXJhdG9ycy4KLSAgICAgKi8KLSAg
ICBCT09TVF9SQU5ET01fREVUQUlMX0lORVFVQUxJVFlfT1BFUkFUT1IoZXhwb25lbnRpYWxfZGlz
dHJpYnV0aW9uKQotCi1wcml2YXRlOgotICAgIHJlc3VsdF90eXBlIF9sYW1iZGE7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSByYW5kb20KLQotdXNpbmcgcmFuZG9tOjpleHBvbmVudGlhbF9kaXN0cmli
dXRpb247Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9SQU5ET01f
RVhQT05FTlRJQUxfRElTVFJJQlVUSU9OX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2V4dHJlbWVfdmFsdWVfZGlzdHJpYnV0
aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRv
bS9leHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQxOWMzZGE2NTFkYjdkNDUwZmMzNDYxN2UyY2Q4MzEwOWI3OWE3YjEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2V4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9u
LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0vKiBib29zdCByYW5kb20vZXh0
cmVtZV92YWx1ZV9kaXN0cmlidXRpb24uaHBwIGhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0
IFN0ZXZlbiBXYXRhbmFiZSAyMDEwCi0gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2Vu
dCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotICoKLSAqICRJZCQKLSAqLwotCi0j
aWZuZGVmIEJPT1NUX1JBTkRPTV9FWFRSRU1FX1ZBTFVFX0RJU1RSSUJVVElPTl9IUFAKLSNkZWZp
bmUgQk9PU1RfUkFORE9NX0VYVFJFTUVfVkFMVUVfRElTVFJJQlVUSU9OX0hQUAotCi0jaW5jbHVk
ZSA8Ym9vc3QvY29uZmlnL25vX3RyMS9jbWF0aC5ocHA+Ci0jaW5jbHVkZSA8aW9zZndkPgotI2lu
Y2x1ZGUgPGlzdHJlYW0+Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9saW1pdHMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvb3BlcmF0b3Jz
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vdW5pZm9ybV8wMS5ocHA+Ci0KLW5hbWVzcGFj
ZSBib29zdCB7Ci1uYW1lc3BhY2UgcmFuZG9tIHsKLQotLyoqCi0gKiBUaGUgZXh0cmVtZSB2YWx1
ZSBkaXN0cmlidXRpb24gaXMgYSByZWFsIHZhbHVlZCBkaXN0cmlidXRpb24gd2l0aCB0d28KLSAq
IHBhcmFtZXRlcnMgYSBhbmQgYi4KLSAqCi0gKiBJdCBoYXMgXGYkXGRpc3BsYXlzdHlsZSBwKHgp
ID0gXGZyYWN7MX17Yn1lXntcZnJhY3thLXh9e2J9IC0gZV5cZnJhY3thLXh9e2J9fVxmJC4KLSAq
LwotdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGUgPSBkb3VibGU+Ci1jbGFzcyBleHRyZW1lX3ZhbHVl
X2Rpc3RyaWJ1dGlvbiB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBSZWFsVHlwZSByZXN1bHRfdHlw
ZTsKLSAgICB0eXBlZGVmIFJlYWxUeXBlIGlucHV0X3R5cGU7Ci0KLSAgICBjbGFzcyBwYXJhbV90
eXBlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgZXh0cmVtZV92YWx1ZV9kaXN0cmli
dXRpb24gZGlzdHJpYnV0aW9uX3R5cGU7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnN0
cnVjdHMgYSBAYyBwYXJhbV90eXBlIGZyb20gdGhlICJhIiBhbmQgImIiIHBhcmFtZXRlcnMKLSAg
ICAgICAgICogb2YgdGhlIGRpc3RyaWJ1dGlvbi4KLSAgICAgICAgICoKLSAgICAgICAgICogUmVx
dWlyZXM6IGIgPiAwCi0gICAgICAgICAqLwotICAgICAgICBleHBsaWNpdCBwYXJhbV90eXBlKFJl
YWxUeXBlIGFfYXJnID0gMS4wLCBSZWFsVHlwZSBiX2FyZyA9IDEuMCkKLSAgICAgICAgICA6IF9h
KGFfYXJnKSwgX2IoYl9hcmcpCi0gICAgICAgIHt9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdGhl
ICJhIiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ0dWlvbi4gKi8KLSAgICAgICAgUmVhbFR5cGUg
YSgpIGNvbnN0IHsgcmV0dXJuIF9hOyB9Ci0gICAgICAgIC8qKiBSZXR1cm5zIHRoZSAiYiIgcGFy
YW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgICAgIFJlYWxUeXBlIGIoKSBjb25z
dCB7IHJldHVybiBfYjsgfQotCi0gICAgICAgIC8qKiBXcml0ZXMgYSBAYyBwYXJhbV90eXBlIHRv
IGEgQGMgc3RkOjpvc3RyZWFtLiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX09TVFJF
QU1fT1BFUkFUT1Iob3MsIHBhcmFtX3R5cGUsIHBhcm0pCi0gICAgICAgIHsgb3MgPDwgcGFybS5f
YSA8PCAnICcgPDwgcGFybS5fYjsgcmV0dXJuIG9zOyB9Ci0KLSAgICAgICAgLyoqIFJlYWRzIGEg
QGMgcGFyYW1fdHlwZSBmcm9tIGEgQGMgc3RkOjppc3RyZWFtLiAqLwotICAgICAgICBCT09TVF9S
QU5ET01fREVUQUlMX0lTVFJFQU1fT1BFUkFUT1IoaXMsIHBhcmFtX3R5cGUsIHBhcm0pCi0gICAg
ICAgIHsgaXMgPj4gcGFybS5fYSA+PiBzdGQ6OndzID4+IHBhcm0uX2I7IHJldHVybiBpczsgfQot
Ci0gICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBzZXRzIG9mIHBhcmFtZXRlcnMg
YXJlIHRoZSBzYW1lLiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0VRVUFMSVRZX09Q
RVJBVE9SKHBhcmFtX3R5cGUsIGxocywgcmhzKQotICAgICAgICB7IHJldHVybiBsaHMuX2EgPT0g
cmhzLl9hICYmIGxocy5fYiA9PSByaHMuX2I7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1
cm5zIHRydWUgaWYgdGhlIHR3byBzZXRzIG9mIHBhcmFtZXRlcnMgYXJlIHRoZSBkaWZmZXJlbnQu
ICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5FUVVBTElUWV9PUEVSQVRPUihwYXJh
bV90eXBlKQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVhbFR5cGUgX2E7Ci0gICAgICAgIFJl
YWxUeXBlIF9iOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIEBjIGV4
dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uIGZyb20gaXRzICJhIiBhbmQgImIiIHBhcmFtZXRlcnMu
Ci0gICAgICoKLSAgICAgKiBSZXF1aXJlczogYiA+IDAKLSAgICAgKi8KLSAgICBleHBsaWNpdCBl
eHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbihSZWFsVHlwZSBhX2FyZyA9IDEuMCwgUmVhbFR5cGUg
Yl9hcmcgPSAxLjApCi0gICAgICA6IF9hKGFfYXJnKSwgX2IoYl9hcmcpCi0gICAge30KLSAgICAv
KiogQ29uc3RydWN0cyBhbiBAYyBleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbiBmcm9tIGl0cyBw
YXJhbWV0ZXJzLiAqLwotICAgIGV4cGxpY2l0IGV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uKGNv
bnN0IHBhcmFtX3R5cGUmIHBhcm0pCi0gICAgICA6IF9hKHBhcm0uYSgpKSwgX2IocGFybS5iKCkp
Ci0gICAge30KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSByYW5kb20gdmFyaWF0ZSBkaXN0
cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlCi0gICAgICogQGMgZXh0cmVtZV92YWx1ZV9kaXN0cmli
dXRpb24uCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgVVJORz4KLSAgICBSZWFsVHlwZSBv
cGVyYXRvcigpKFVSTkcmIHVybmcpIGNvbnN0Ci0gICAgewotICAgICAgICB1c2luZyBzdGQ6Omxv
ZzsKLSAgICAgICAgcmV0dXJuIF9hIC0gbG9nKC1sb2codW5pZm9ybV8wMTxSZWFsVHlwZT4oKSh1
cm5nKSkpICogX2I7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHJhbmRvbSB2
YXJpYXRlIGRpc3RyaWJ1dGVkIGFjY29yZGludCB0byB0aGUgZXh0cmVtZQotICAgICAqIHZhbHVl
IGRpc3RyaWJ1dGlvbiB3aXRoIHBhcmFtZXRlcnMgc3BlY2lmaWVkIGJ5IEBjIHBhcmFtLgotICAg
ICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIFVSTkc+Ci0gICAgUmVhbFR5cGUgb3BlcmF0b3IoKShV
Uk5HJiB1cm5nLCBjb25zdCBwYXJhbV90eXBlJiBwYXJtKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIGV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uKHBhcm0pKHVybmcpOwotICAgIH0KLQot
ICAgIC8qKiBSZXR1cm5zIHRoZSAiYSIgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uICov
Ci0gICAgUmVhbFR5cGUgYSgpIGNvbnN0IHsgcmV0dXJuIF9hOyB9Ci0gICAgLyoqIFJldHVybnMg
dGhlICJiIiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICBSZWFsVHlwZSBi
KCkgY29uc3QgeyByZXR1cm4gX2I7IH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCB2
YWx1ZSB0aGF0IHRoZSBkaXN0cmlidXRpb24gY2FuIHByb2R1Y2UuICovCi0gICAgUmVhbFR5cGUg
bWluIEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIGNvbnN0Ci0gICAgeyByZXR1
cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8UmVhbFR5cGU+OjppbmZpbml0eSgpOyB9Ci0gICAgLyoq
IFJldHVybnMgdGhlIGxhcmdlc3QgdmFsdWUgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGNhbiBwcm9k
dWNlLiAqLwotICAgIFJlYWxUeXBlIG1heCBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElP
TiAoKSBjb25zdAotICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8UmVhbFR5cGU+Ojpp
bmZpbml0eSgpOyB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlz
dHJpYnV0aW9uLiAqLwotICAgIHBhcmFtX3R5cGUgcGFyYW0oKSBjb25zdCB7IHJldHVybiBwYXJh
bV90eXBlKF9hLCBfYik7IH0KLSAgICAvKiogU2V0cyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlz
dHJpYnV0aW9uLiAqLwotICAgIHZvaWQgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgcGFybSkKLSAg
ICB7Ci0gICAgICAgIF9hID0gcGFybS5hKCk7Ci0gICAgICAgIF9iID0gcGFybS5iKCk7Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICogRWZmZWN0czogU3Vic2VxdWVudCB1c2VzIG9mIHRoZSBkaXN0
cmlidXRpb24gZG8gbm90IGRlcGVuZAotICAgICAqIG9uIHZhbHVlcyBwcm9kdWNlZCBieSBhbnkg
ZW5naW5lIHByaW9yIHRvIGludm9raW5nIHJlc2V0LgotICAgICAqLwotICAgIHZvaWQgcmVzZXQo
KSB7IH0KLQotICAgIC8qKiBXcml0ZXMgYW4gQGMgZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb24g
dG8gYSBAYyBzdGQ6Om9zdHJlYW0uICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9PU1RSRUFN
X09QRVJBVE9SKG9zLCBleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbiwgd2QpCi0gICAgewotICAg
ICAgICBvcyA8PCB3ZC5wYXJhbSgpOwotICAgICAgICByZXR1cm4gb3M7Ci0gICAgfQotCi0gICAg
LyoqIFJlYWRzIGFuIEBjIGV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uIGZyb20gYSBAYyBzdGQ6
OmlzdHJlYW0uICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlz
LCBleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbiwgd2QpCi0gICAgewotICAgICAgICBwYXJhbV90
eXBlIHBhcm07Ci0gICAgICAgIGlmKGlzID4+IHBhcm0pIHsKLSAgICAgICAgICAgIHdkLnBhcmFt
KHBhcm0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpczsKLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBpbnN0YW5jZXMgb2YgQGMgZXh0cmVtZV92
YWx1ZV9kaXN0cmlidXRpb24gd2lsbAotICAgICAqIHJldHVybiBpZGVudGljYWwgc2VxdWVuY2Vz
IG9mIHZhbHVlcyBnaXZlbiBlcXVhbCBnZW5lcmF0b3JzLgotICAgICAqLwotICAgIEJPT1NUX1JB
TkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IoZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb24s
IGxocywgcmhzKQotICAgIHsgcmV0dXJuIGxocy5fYSA9PSByaHMuX2EgJiYgbGhzLl9iID09IHJo
cy5fYjsgfQotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGlu
c3RhbmNlcyBvZiBAYyBleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbiB3aWxsCi0gICAgICogcmV0
dXJuIGRpZmZlcmVudCBzZXF1ZW5jZXMgb2YgdmFsdWVzIGdpdmVuIGVxdWFsIGdlbmVyYXRvcnMu
Ci0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKGV4
dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uKQotCi1wcml2YXRlOgotICAgIFJlYWxUeXBlIF9hOwot
ICAgIFJlYWxUeXBlIF9iOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgcmFuZG9tCi19IC8vIG5hbWVz
cGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfUkFORE9NX0VYVFJFTUVfVkFMVUVfRElTVFJJ
QlVUSU9OX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcmFuZG9tL2Zpc2hlcl9mX2Rpc3RyaWJ1dGlvbi5ocHAgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZmlzaGVyX2ZfZGlzdHJpYnV0aW9u
LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RmMTRkYThmNmMxMDkyODQ4ZmMz
MWQ3M2MzMDgwNGMwZTc4NDg4MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5k
b20vZmlzaGVyX2ZfZGlzdHJpYnV0aW9uLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCww
IEBACi0vKiBib29zdCByYW5kb20vZmlzaGVyX2ZfZGlzdHJpYnV0aW9uLmhwcCBoZWFkZXIgZmls
ZQotICoKLSAqIENvcHlyaWdodCBTdGV2ZW4gV2F0YW5hYmUgMjAxMQotICogRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3
dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0
Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAq
Ci0gKiAkSWQkCi0gKi8KLQotI2lmbmRlZiBCT09TVF9SQU5ET01fRklTSEVSX0ZfRElTVFJJQlVU
SU9OX0hQUAotI2RlZmluZSBCT09TVF9SQU5ET01fRklTSEVSX0ZfRElTVFJJQlVUSU9OX0hQUAot
Ci0jaW5jbHVkZSA8aW9zZndkPgotI2luY2x1ZGUgPGlzdHJlYW0+Ci0jaW5jbHVkZSA8Ym9vc3Qv
Y29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L3JhbmRvbS9kZXRhaWwvb3BlcmF0b3JzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vY2hp
X3NxdWFyZWRfZGlzdHJpYnV0aW9uLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFj
ZSByYW5kb20gewotCi0vKioKLSAqIFRoZSBGaXNoZXIgRiBkaXN0cmlidXRpb24gaXMgYSByZWFs
IHZhbHVlZCBkaXN0cmlidXRpb24gd2l0aCB0d28KLSAqIHBhcmFtZXRlcnMgbSBhbmQgbi4KLSAq
Ci0gKiBJdCBoYXMgXGYkXGRpc3BsYXlzdHlsZSBwKHgpID0KLSAqICAgXGZyYWN7XEdhbW1hKCht
K24pLzIpfXtcR2FtbWEobS8yKVxHYW1tYShuLzIpfQotICogICBcbGVmdChcZnJhY3ttfXtufVxy
aWdodClee20vMn0KLSAqICAgeF57KG0vMiktMX0gXGxlZnQoMStcZnJhY3tteH17bn1ccmlnaHQp
XnstKG0rbikvMn0KLSAqIFxmJC4KLSAqLwotdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGUgPSBkb3Vi
bGU+Ci1jbGFzcyBmaXNoZXJfZl9kaXN0cmlidXRpb24gewotcHVibGljOgotICAgIHR5cGVkZWYg
UmVhbFR5cGUgcmVzdWx0X3R5cGU7Ci0gICAgdHlwZWRlZiBSZWFsVHlwZSBpbnB1dF90eXBlOwot
Ci0gICAgY2xhc3MgcGFyYW1fdHlwZSB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIGZp
c2hlcl9mX2Rpc3RyaWJ1dGlvbiBkaXN0cmlidXRpb25fdHlwZTsKLQotICAgICAgICAvKioKLSAg
ICAgICAgICogQ29uc3RydWN0cyBhIEBjIHBhcmFtX3R5cGUgZnJvbSB0aGUgIm0iIGFuZCAibiIg
cGFyYW1ldGVycwotICAgICAgICAgKiBvZiB0aGUgZGlzdHJpYnV0aW9uLgotICAgICAgICAgKgot
ICAgICAgICAgKiBSZXF1aXJlczogbSA+IDAgYW5kIG4gPiAwCi0gICAgICAgICAqLwotICAgICAg
ICBleHBsaWNpdCBwYXJhbV90eXBlKFJlYWxUeXBlIG1fYXJnID0gUmVhbFR5cGUoMS4wKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFsVHlwZSBuX2FyZyA9IFJlYWxUeXBlKDEuMCkp
Ci0gICAgICAgICAgOiBfbShtX2FyZyksIF9uKG5fYXJnKQotICAgICAgICB7fQotCi0gICAgICAg
IC8qKiBSZXR1cm5zIHRoZSAibSIgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidHVpb24uICovCi0g
ICAgICAgIFJlYWxUeXBlIG0oKSBjb25zdCB7IHJldHVybiBfbTsgfQotICAgICAgICAvKiogUmV0
dXJucyB0aGUgIm4iIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgICAgICBS
ZWFsVHlwZSBuKCkgY29uc3QgeyByZXR1cm4gX247IH0KLQotICAgICAgICAvKiogV3JpdGVzIGEg
QGMgcGFyYW1fdHlwZSB0byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICAgICAgQk9PU1RfUkFO
RE9NX0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCBwYXJhbV90eXBlLCBwYXJtKQotICAgICAg
ICB7IG9zIDw8IHBhcm0uX20gPDwgJyAnIDw8IHBhcm0uX247IHJldHVybiBvczsgfQotCi0gICAg
ICAgIC8qKiBSZWFkcyBhIEBjIHBhcmFtX3R5cGUgZnJvbSBhIEBjIHN0ZDo6aXN0cmVhbS4gKi8K
LSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlzLCBwYXJhbV90
eXBlLCBwYXJtKQotICAgICAgICB7IGlzID4+IHBhcm0uX20gPj4gc3RkOjp3cyA+PiBwYXJtLl9u
OyByZXR1cm4gaXM7IH0KLQotICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gc2V0
cyBvZiBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZS4gKi8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RF
VEFJTF9FUVVBTElUWV9PUEVSQVRPUihwYXJhbV90eXBlLCBsaHMsIHJocykKLSAgICAgICAgeyBy
ZXR1cm4gbGhzLl9tID09IHJocy5fbSAmJiBsaHMuX24gPT0gcmhzLl9uOyB9Ci0gICAgICAgIAot
ICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gc2V0cyBvZiBwYXJhbWV0ZXJzIGFy
ZSB0aGUgZGlmZmVyZW50LiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0lORVFVQUxJ
VFlfT1BFUkFUT1IocGFyYW1fdHlwZSkKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlYWxUeXBl
IF9tOwotICAgICAgICBSZWFsVHlwZSBfbjsKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogQ29u
c3RydWN0cyBhIEBjIGZpc2hlcl9mX2Rpc3RyaWJ1dGlvbiBmcm9tIGl0cyAibSIgYW5kICJuIiBw
YXJhbWV0ZXJzLgotICAgICAqCi0gICAgICogUmVxdWlyZXM6IG0gPiAwIGFuZCBuID4gMAotICAg
ICAqLwotICAgIGV4cGxpY2l0IGZpc2hlcl9mX2Rpc3RyaWJ1dGlvbihSZWFsVHlwZSBtX2FyZyA9
IFJlYWxUeXBlKDEuMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxU
eXBlIG5fYXJnID0gUmVhbFR5cGUoMS4wKSkKLSAgICAgIDogX2ltcGxfbShtX2FyZyksIF9pbXBs
X24obl9hcmcpCi0gICAge30KLSAgICAvKiogQ29uc3RydWN0cyBhbiBAYyBmaXNoZXJfZl9kaXN0
cmlidXRpb24gZnJvbSBpdHMgcGFyYW1ldGVycy4gKi8KLSAgICBleHBsaWNpdCBmaXNoZXJfZl9k
aXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgcGFybSkKLSAgICAgIDogX2ltcGxfbShwYXJt
Lm0oKSksIF9pbXBsX24ocGFybS5uKCkpCi0gICAge30KLQotICAgIC8qKgotICAgICAqIFJldHVy
bnMgYSByYW5kb20gdmFyaWF0ZSBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlCi0gICAgICog
RiBkaXN0cmlidXRpb24uCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgVVJORz4KLSAgICBS
ZWFsVHlwZSBvcGVyYXRvcigpKFVSTkcmIHVybmcpCi0gICAgewotICAgICAgICByZXR1cm4gKF9p
bXBsX20odXJuZykgKiBuKCkpIC8gKF9pbXBsX24odXJuZykgKiBtKCkpOwotICAgIH0KLQotICAg
IC8qKgotICAgICAqIFJldHVybnMgYSByYW5kb20gdmFyaWF0ZSBkaXN0cmlidXRlZCBhY2NvcmRp
bmcgdG8gdGhlCi0gICAgICogRiBkaXN0cmlidXRpb24gd2l0aCBwYXJhbWV0ZXJzIHNwZWNpZmll
ZCBieSBAYyBwYXJhbS4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBVUk5HPgotICAgIFJl
YWxUeXBlIG9wZXJhdG9yKCkoVVJORyYgdXJuZywgY29uc3QgcGFyYW1fdHlwZSYgcGFybSkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBmaXNoZXJfZl9kaXN0cmlidXRpb24ocGFybSkodXJu
Zyk7Ci0gICAgfQotCi0gICAgLyoqIFJldHVybnMgdGhlICJtIiBwYXJhbWV0ZXIgb2YgdGhlIGRp
c3RyaWJ1dGlvbi4gKi8KLSAgICBSZWFsVHlwZSBtKCkgY29uc3QgeyByZXR1cm4gX2ltcGxfbS5u
KCk7IH0KLSAgICAvKiogUmV0dXJucyB0aGUgIm4iIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0
aW9uLiAqLwotICAgIFJlYWxUeXBlIG4oKSBjb25zdCB7IHJldHVybiBfaW1wbF9uLm4oKTsgfQot
Ci0gICAgLyoqIFJldHVybnMgdGhlIHNtYWxsZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlv
biBjYW4gcHJvZHVjZS4gKi8KLSAgICBSZWFsVHlwZSBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19T
VUJTVElUVVRJT04gKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIC8qKiBSZXR1cm5zIHRoZSBs
YXJnZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4gKi8KLSAgICBS
ZWFsVHlwZSBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgY29uc3QKLSAg
ICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPFJlYWxUeXBlPjo6aW5maW5pdHkoKTsgfQot
Ci0gICAgLyoqIFJldHVybnMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8K
LSAgICBwYXJhbV90eXBlIHBhcmFtKCkgY29uc3QgeyByZXR1cm4gcGFyYW1fdHlwZShtKCksIG4o
KSk7IH0KLSAgICAvKiogU2V0cyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLiAq
LwotICAgIHZvaWQgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgcGFybSkKLSAgICB7Ci0gICAgICAg
IHR5cGVkZWYgY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uPFJlYWxUeXBlPiBpbXBsX3R5cGU7Ci0g
ICAgICAgIHR5cGVuYW1lIGltcGxfdHlwZTo6cGFyYW1fdHlwZSBtX3BhcmFtKHBhcm0ubSgpKTsK
LSAgICAgICAgX2ltcGxfbS5wYXJhbShtX3BhcmFtKTsKLSAgICAgICAgdHlwZW5hbWUgaW1wbF90
eXBlOjpwYXJhbV90eXBlIG5fcGFyYW0ocGFybS5uKCkpOwotICAgICAgICBfaW1wbF9uLnBhcmFt
KG5fcGFyYW0pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVmZmVjdHM6IFN1YnNlcXVlbnQg
dXNlcyBvZiB0aGUgZGlzdHJpYnV0aW9uIGRvIG5vdCBkZXBlbmQKLSAgICAgKiBvbiB2YWx1ZXMg
cHJvZHVjZWQgYnkgYW55IGVuZ2luZSBwcmlvciB0byBpbnZva2luZyByZXNldC4KLSAgICAgKi8K
LSAgICB2b2lkIHJlc2V0KCkgeyB9Ci0KLSAgICAvKiogV3JpdGVzIGFuIEBjIGZpc2hlcl9mX2Rp
c3RyaWJ1dGlvbiB0byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICBCT09TVF9SQU5ET01fREVU
QUlMX09TVFJFQU1fT1BFUkFUT1Iob3MsIGZpc2hlcl9mX2Rpc3RyaWJ1dGlvbiwgZmQpCi0gICAg
ewotICAgICAgICBvcyA8PCBmZC5wYXJhbSgpOwotICAgICAgICByZXR1cm4gb3M7Ci0gICAgfQot
Ci0gICAgLyoqIFJlYWRzIGFuIEBjIGZpc2hlcl9mX2Rpc3RyaWJ1dGlvbiBmcm9tIGEgQGMgc3Rk
Ojppc3RyZWFtLiAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRPUihp
cywgZmlzaGVyX2ZfZGlzdHJpYnV0aW9uLCBmZCkKLSAgICB7Ci0gICAgICAgIHBhcmFtX3R5cGUg
cGFybTsKLSAgICAgICAgaWYoaXMgPj4gcGFybSkgewotICAgICAgICAgICAgZmQucGFyYW0ocGFy
bSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlzOwotICAgIH0KLQotICAgIC8qKgotICAg
ICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGluc3RhbmNlcyBvZiBAYyBmaXNoZXJfZl9kaXN0
cmlidXRpb24gd2lsbAotICAgICAqIHJldHVybiBpZGVudGljYWwgc2VxdWVuY2VzIG9mIHZhbHVl
cyBnaXZlbiBlcXVhbCBnZW5lcmF0b3JzLgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRB
SUxfRVFVQUxJVFlfT1BFUkFUT1IoZmlzaGVyX2ZfZGlzdHJpYnV0aW9uLCBsaHMsIHJocykKLSAg
ICB7IHJldHVybiBsaHMuX2ltcGxfbSA9PSByaHMuX2ltcGxfbSAmJiBsaHMuX2ltcGxfbiA9PSBy
aHMuX2ltcGxfbjsgfQotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dHdvIGluc3RhbmNlcyBvZiBAYyBmaXNoZXJfZl9kaXN0cmlidXRpb24gd2lsbAotICAgICAqIHJl
dHVybiBkaWZmZXJlbnQgc2VxdWVuY2VzIG9mIHZhbHVlcyBnaXZlbiBlcXVhbCBnZW5lcmF0b3Jz
LgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5FUVVBTElUWV9PUEVSQVRPUihm
aXNoZXJfZl9kaXN0cmlidXRpb24pCi0KLXByaXZhdGU6Ci0gICAgY2hpX3NxdWFyZWRfZGlzdHJp
YnV0aW9uPFJlYWxUeXBlPiBfaW1wbF9tOwotICAgIGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbjxS
ZWFsVHlwZT4gX2ltcGxfbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotfSAvLyBuYW1l
c3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9FWFRSRU1FX1ZBTFVFX0RJU1RS
SUJVVElPTl9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3JhbmRvbS9nYW1tYV9kaXN0cmlidXRpb24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2dhbW1hX2Rpc3RyaWJ1dGlvbi5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YmRhNGNhOWQzYTg4ZGFlZWJjOGEwNDY3
YzFjN2I2ZjU0NTA3ODMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2dh
bW1hX2Rpc3RyaWJ1dGlvbi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTIgKzAsMCBAQAotLyog
Ym9vc3QgcmFuZG9tL2dhbW1hX2Rpc3RyaWJ1dGlvbi5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBD
b3B5cmlnaHQgSmVucyBNYXVyZXIgMjAwMgotICogQ29weXJpZ2h0IFN0ZXZlbiBXYXRhbmFiZSAy
MDEwCi0gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVy
c2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICog
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGlu
ZyBkb2N1bWVudGF0aW9uLgotICoKLSAqICRJZCQKLSAqCi0gKi8KLQotI2lmbmRlZiBCT09TVF9S
QU5ET01fR0FNTUFfRElTVFJJQlVUSU9OX0hQUAotI2RlZmluZSBCT09TVF9SQU5ET01fR0FNTUFf
RElTVFJJQlVUSU9OX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnL25vX3RyMS9jbWF0aC5o
cHA+Ci0jaW5jbHVkZSA8aXN0cmVhbT4KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8Ym9v
c3QvYXNzZXJ0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L3N0YXRpY19hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvY29u
ZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9u
LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSByYW5kb20gewotCi0vLyBUaGUg
YWxnb3JpdGhtIGlzIHRha2VuIGZyb20gS251dGgKLQotLyoqCi0gKiBUaGUgZ2FtbWEgZGlzdHJp
YnV0aW9uIGlzIGEgY29udGludW91cyBkaXN0cmlidXRpb24gd2l0aCB0d28KLSAqIHBhcmFtZXRl
cnMgYWxwaGEgYW5kIGJldGEuICBJdCBwcm9kdWNlcyB2YWx1ZXMgPiAwLgotICoKLSAqIEl0IGhh
cwotICogXGYkXGRpc3BsYXlzdHlsZSBwKHgpID0geF57XGFscGhhLTF9XGZyYWN7ZV57LXgvXGJl
dGF9fXtcYmV0YV5cYWxwaGFcR2FtbWEoXGFscGhhKX1cZiQuCi0gKi8KLXRlbXBsYXRlPGNsYXNz
IFJlYWxUeXBlID0gZG91YmxlPgotY2xhc3MgZ2FtbWFfZGlzdHJpYnV0aW9uCi17Ci1wdWJsaWM6
Ci0gICAgdHlwZWRlZiBSZWFsVHlwZSBpbnB1dF90eXBlOwotICAgIHR5cGVkZWYgUmVhbFR5cGUg
cmVzdWx0X3R5cGU7Ci0KLSAgICBjbGFzcyBwYXJhbV90eXBlCi0gICAgewotICAgIHB1YmxpYzoK
LSAgICAgICAgdHlwZWRlZiBnYW1tYV9kaXN0cmlidXRpb24gZGlzdHJpYnV0aW9uX3R5cGU7Ci0K
LSAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnN0cnVjdHMgYSBAYyBwYXJhbV90eXBlIG9iamVj
dCBmcm9tIHRoZSAiYWxwaGEiIGFuZCAiYmV0YSIKLSAgICAgICAgICogcGFyYW1ldGVycy4KLSAg
ICAgICAgICoKLSAgICAgICAgICogUmVxdWlyZXM6IGFscGhhID4gMCAmJiBiZXRhID4gMAotICAg
ICAgICAgKi8KLSAgICAgICAgcGFyYW1fdHlwZShjb25zdCBSZWFsVHlwZSYgYWxwaGFfYXJnID0g
UmVhbFR5cGUoMS4wKSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBSZWFsVHlwZSYgYmV0YV9h
cmcgPSBSZWFsVHlwZSgxLjApKQotICAgICAgICAgIDogX2FscGhhKGFscGhhX2FyZyksIF9iZXRh
KGJldGFfYXJnKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiogUmV0dXJucyB0
aGUgImFscGhhIiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICAgICAgUmVh
bFR5cGUgYWxwaGEoKSBjb25zdCB7IHJldHVybiBfYWxwaGE7IH0KLSAgICAgICAgLyoqIFJldHVy
bnMgdGhlICJiZXRhIiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICAgICAg
UmVhbFR5cGUgYmV0YSgpIGNvbnN0IHsgcmV0dXJuIF9iZXRhOyB9Ci0KLSNpZm5kZWYgQk9PU1Rf
UkFORE9NX05PX1NUUkVBTV9PUEVSQVRPUlMKLSAgICAgICAgLyoqIFdyaXRlcyB0aGUgcGFyYW1l
dGVycyB0byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgQ2hh
clQsIGNsYXNzIFRyYWl0cz4KLSAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFy
VCwgVHJhaXRzPiYKLSAgICAgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08Q2hhclQs
IFRyYWl0cz4mIG9zLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG9zIDw8IHBhcm0uX2FscGhhIDw8ICcgJyA8PCBwYXJt
Ll9iZXRhOwotICAgICAgICAgICAgcmV0dXJuIG9zOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvKiogUmVhZHMgdGhlIHBhcmFtZXRlcnMgZnJvbSBhIEBjIHN0ZDo6aXN0cmVhbS4gKi8K
LSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgQ2hhclQsIGNsYXNzIFRyYWl0cz4KLSAgICAgICAgZnJp
ZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxDaGFyVCwgVHJhaXRzPiYKLSAgICAgICAgb3BlcmF0b3I+
PihzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhclQsIFRyYWl0cz4mIGlzLCBwYXJhbV90eXBlJiBwYXJt
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpcyA+PiBwYXJtLl9hbHBoYSA+PiBzdGQ6OndzID4+
IHBhcm0uX2JldGE7Ci0gICAgICAgICAgICByZXR1cm4gaXM7Ci0gICAgICAgIH0KLSNlbmRpZgot
Ci0gICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBzZXRzIG9mIHBhcmFtZXRlcnMg
YXJlIHRoZSBzYW1lLiAqLwotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBh
cmFtX3R5cGUmIGxocywgY29uc3QgcGFyYW1fdHlwZSYgcmhzKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbGhzLl9hbHBoYSA9PSByaHMuX2FscGhhICYmIGxocy5fYmV0YSA9PSByaHMu
X2JldGE7Ci0gICAgICAgIH0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHNl
dHMgZm8gcGFyYW1ldGVycyBhcmUgZGlmZmVyZW50LiAqLwotICAgICAgICBmcmllbmQgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IHBhcmFtX3R5cGUmIGxocywgY29uc3QgcGFyYW1fdHlwZSYgcmhzKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIShsaHMgPT0gcmhzKTsKLSAgICAgICAgfQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIFJlYWxUeXBlIF9hbHBoYTsKLSAgICAgICAgUmVhbFR5cGUg
X2JldGE7Ci0gICAgfTsKLQotI2lmbmRlZiBCT09TVF9OT19MSU1JVFNfQ09NUElMRV9USU1FX0NP
TlNUQU5UUwotICAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoIXN0ZDo6bnVtZXJpY19saW1pdHM8UmVh
bFR5cGU+Ojppc19pbnRlZ2VyKTsKLSNlbmRpZgotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBh
IG5ldyBnYW1tYV9kaXN0cmlidXRpb24gd2l0aCBwYXJhbWV0ZXJzICJhbHBoYSIgYW5kICJiZXRh
Ii4KLSAgICAgKgotICAgICAqIFJlcXVpcmVzOiBhbHBoYSA+IDAgJiYgYmV0YSA+IDAKLSAgICAg
Ki8KLSAgICBleHBsaWNpdCBnYW1tYV9kaXN0cmlidXRpb24oY29uc3QgcmVzdWx0X3R5cGUmIGFs
cGhhX2FyZyA9IHJlc3VsdF90eXBlKDEuMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHJlc3VsdF90eXBlJiBiZXRhX2FyZyA9IHJlc3VsdF90eXBlKDEuMCkpCi0gICAg
ICA6IF9leHAocmVzdWx0X3R5cGUoMSkpLCBfYWxwaGEoYWxwaGFfYXJnKSwgX2JldGEoYmV0YV9h
cmcpCi0gICAgewotICAgICAgICBCT09TVF9BU1NFUlQoX2FscGhhID4gcmVzdWx0X3R5cGUoMCkp
OwotICAgICAgICBCT09TVF9BU1NFUlQoX2JldGEgPiByZXN1bHRfdHlwZSgwKSk7Ci0gICAgICAg
IGluaXQoKTsKLSAgICB9Ci0KLSAgICAvKiogQ29uc3RydWN0cyBhIEBjIGdhbW1hX2Rpc3RyaWJ1
dGlvbiBmcm9tIGl0cyBwYXJhbWV0ZXJzLiAqLwotICAgIGV4cGxpY2l0IGdhbW1hX2Rpc3RyaWJ1
dGlvbihjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgICAgOiBfZXhwKHJlc3VsdF90eXBlKDEp
KSwgX2FscGhhKHBhcm0uYWxwaGEoKSksIF9iZXRhKHBhcm0uYmV0YSgpKQotICAgIHsKLSAgICAg
ICAgaW5pdCgpOwotICAgIH0KLQotICAgIC8vIGNvbXBpbGVyLWdlbmVyYXRlZCBjb3B5IGN0b3Ig
YW5kIGFzc2lnbm1lbnQgb3BlcmF0b3IgYXJlIGZpbmUKLQotICAgIC8qKiBSZXR1cm5zIHRoZSAi
YWxwaGEiIHBhcmFtdGVyIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgUmVhbFR5cGUgYWxw
aGEoKSBjb25zdCB7IHJldHVybiBfYWxwaGE7IH0KLSAgICAvKiogUmV0dXJucyB0aGUgImJldGEi
IHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIFJlYWxUeXBlIGJldGEoKSBj
b25zdCB7IHJldHVybiBfYmV0YTsgfQotICAgIC8qKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCB2YWx1
ZSB0aGF0IHRoZSBkaXN0cmlidXRpb24gY2FuIHByb2R1Y2UuICovCi0gICAgUmVhbFR5cGUgbWlu
IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
LSAgICAvKiBSZXR1cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBj
YW4gcHJvZHVjZS4gKi8KLSAgICBSZWFsVHlwZSBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19TVUJT
VElUVVRJT04gKCkgY29uc3QKLSAgICB7IHJldHVybiAoc3RkOjpudW1lcmljX2xpbWl0czxSZWFs
VHlwZT46OmluZmluaXR5KSgpOyB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgcGFyYW1ldGVycyBv
ZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIHBhcmFtX3R5cGUgcGFyYW0oKSBjb25zdCB7IHJl
dHVybiBwYXJhbV90eXBlKF9hbHBoYSwgX2JldGEpOyB9Ci0gICAgLyoqIFNldHMgdGhlIHBhcmFt
ZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICB2b2lkIHBhcmFtKGNvbnN0IHBhcmFt
X3R5cGUmIHBhcm0pCi0gICAgewotICAgICAgICBfYWxwaGEgPSBwYXJtLmFscGhhKCk7Ci0gICAg
ICAgIF9iZXRhID0gcGFybS5iZXRhKCk7Ci0gICAgICAgIGluaXQoKTsKLSAgICB9Ci0gICAgCi0g
ICAgLyoqCi0gICAgICogRWZmZWN0czogU3Vic2VxdWVudCB1c2VzIG9mIHRoZSBkaXN0cmlidXRp
b24gZG8gbm90IGRlcGVuZAotICAgICAqIG9uIHZhbHVlcyBwcm9kdWNlZCBieSBhbnkgZW5naW5l
IHByaW9yIHRvIGludm9raW5nIHJlc2V0LgotICAgICAqLwotICAgIHZvaWQgcmVzZXQoKSB7IF9l
eHAucmVzZXQoKTsgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHJhbmRvbSB2YXJpYXRl
IGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0bwotICAgICAqIHRoZSBnYW1tYSBkaXN0cmlidXRpb24u
Ci0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5naW5lPgotICAgIHJlc3VsdF90eXBlIG9w
ZXJhdG9yKCkoRW5naW5lJiBlbmcpCi0gICAgewotI2lmbmRlZiBCT09TVF9OT19TVERDX05BTUVT
UEFDRQotICAgICAgICAvLyBhbGxvdyBmb3IgS29lbmlnIGxvb2t1cAotICAgICAgICB1c2luZyBz
dGQ6OnRhbjsgdXNpbmcgc3RkOjpzcXJ0OyB1c2luZyBzdGQ6OmV4cDsgdXNpbmcgc3RkOjpsb2c7
Ci0gICAgICAgIHVzaW5nIHN0ZDo6cG93OwotI2VuZGlmCi0gICAgICAgIGlmKF9hbHBoYSA9PSBy
ZXN1bHRfdHlwZSgxKSkgewotICAgICAgICAgICAgcmV0dXJuIF9leHAoZW5nKSAqIF9iZXRhOwot
ICAgICAgICB9IGVsc2UgaWYoX2FscGhhID4gcmVzdWx0X3R5cGUoMSkpIHsKLSAgICAgICAgICAg
IC8vIENhbiB3ZSBoYXZlIGEgYm9vc3Q6Om1hdGhjb25zdCBwbGVhc2U/Ci0gICAgICAgICAgICBj
b25zdCByZXN1bHRfdHlwZSBwaSA9IHJlc3VsdF90eXBlKDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYp
OwotICAgICAgICAgICAgZm9yKDs7KSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUgeSA9
IHRhbihwaSAqIHVuaWZvcm1fMDE8UmVhbFR5cGU+KCkoZW5nKSk7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0X3R5cGUgeCA9IHNxcnQocmVzdWx0X3R5cGUoMikqX2FscGhhLXJlc3VsdF90eXBlKDEp
KSp5Ci0gICAgICAgICAgICAgICAgICAgICsgX2FscGhhLXJlc3VsdF90eXBlKDEpOwotICAgICAg
ICAgICAgICAgIGlmKHggPD0gcmVzdWx0X3R5cGUoMCkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIGlmKHVuaWZvcm1fMDE8UmVhbFR5cGU+KCkoZW5nKSA+
Ci0gICAgICAgICAgICAgICAgICAgIChyZXN1bHRfdHlwZSgxKSt5KnkpICogZXhwKChfYWxwaGEt
cmVzdWx0X3R5cGUoMSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICpsb2coeC8oX2FscGhhLXJlc3VsdF90eXBlKDEpKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzcXJ0KHJlc3VsdF90eXBlKDIpKl9hbHBo
YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LXJlc3VsdF90eXBlKDEpKSp5KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHggKiBfYmV0YTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIC8qIGFscGhhIDwgMS4wICovIHsKLSAgICAgICAgICAgIGZvcig7OykgewotICAgICAgICAg
ICAgICAgIHJlc3VsdF90eXBlIHUgPSB1bmlmb3JtXzAxPFJlYWxUeXBlPigpKGVuZyk7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0X3R5cGUgeSA9IF9leHAoZW5nKTsKLSAgICAgICAgICAgICAgICBy
ZXN1bHRfdHlwZSB4LCBxOwotICAgICAgICAgICAgICAgIGlmKHUgPCBfcCkgewotICAgICAgICAg
ICAgICAgICAgICB4ID0gZXhwKC15L19hbHBoYSk7Ci0gICAgICAgICAgICAgICAgICAgIHEgPSBf
cCpleHAoLXgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHggPSByZXN1bHRfdHlwZSgxKSt5OwotICAgICAgICAgICAgICAgICAgICBxID0gX3AgKyAocmVz
dWx0X3R5cGUoMSktX3ApICogcG93KHgsX2FscGhhLXJlc3VsdF90eXBlKDEpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYodSA+PSBxKQotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4geCAqIF9iZXRhOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgVVJORz4KLSAgICBS
ZWFsVHlwZSBvcGVyYXRvcigpKFVSTkcmIHVybmcsIGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0pIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZ2FtbWFfZGlzdHJpYnV0aW9uKHBhcm0pKHVybmcp
OwotICAgIH0KLQotI2lmbmRlZiBCT09TVF9SQU5ET01fTk9fU1RSRUFNX09QRVJBVE9SUwotICAg
IC8qKiBXcml0ZXMgYSBAYyBnYW1tYV9kaXN0cmlidXRpb24gdG8gYSBAYyBzdGQ6Om9zdHJlYW0u
ICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgQ2hhclQsIGNsYXNzIFRyYWl0cz4KLSAgICBmcmllbmQg
c3RkOjpiYXNpY19vc3RyZWFtPENoYXJULFRyYWl0cz4mCi0gICAgb3BlcmF0b3I8PChzdGQ6OmJh
c2ljX29zdHJlYW08Q2hhclQsVHJhaXRzPiYgb3MsCi0gICAgICAgICAgICAgICBjb25zdCBnYW1t
YV9kaXN0cmlidXRpb24mIGdkKQotICAgIHsKLSAgICAgICAgb3MgPDwgZ2QucGFyYW0oKTsKLSAg
ICAgICAgcmV0dXJuIG9zOwotICAgIH0KLSAgICAKLSAgICAvKiogUmVhZHMgYSBAYyBnYW1tYV9k
aXN0cmlidXRpb24gZnJvbSBhIEBjIHN0ZDo6aXN0cmVhbS4gKi8KLSAgICB0ZW1wbGF0ZTxjbGFz
cyBDaGFyVCwgY2xhc3MgVHJhaXRzPgotICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08Q2hh
clQsVHJhaXRzPiYKLSAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxDaGFyVCxUcmFp
dHM+JiBpcywgZ2FtbWFfZGlzdHJpYnV0aW9uJiBnZCkKLSAgICB7Ci0gICAgICAgIGdkLnJlYWQo
aXMpOwotICAgICAgICByZXR1cm4gaXM7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvKioKLSAgICAg
KiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBkaXN0cmlidXRpb25zIHdpbGwgcHJvZHVjZSBpZGVu
dGljYWwKLSAgICAgKiBzZXF1ZW5jZXMgb2YgcmFuZG9tIHZhcmlhdGVzIGdpdmVuIGVxdWFsIGdl
bmVyYXRvcnMuCi0gICAgICovCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBnYW1t
YV9kaXN0cmlidXRpb24mIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdh
bW1hX2Rpc3RyaWJ1dGlvbiYgcmhzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxocy5fYWxwaGEg
PT0gcmhzLl9hbHBoYQotICAgICAgICAgICAgJiYgbGhzLl9iZXRhID09IHJocy5fYmV0YQotICAg
ICAgICAgICAgJiYgbGhzLl9leHAgPT0gcmhzLl9leHA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAg
ICogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gZGlzdHJpYnV0aW9ucyBjYW4gcHJvZHVjZSBkaWZm
ZXJlbnQKLSAgICAgKiBzZXF1ZW5jZXMgb2YgcmFuZG9tIHZhcmlhdGVzLCBnaXZlbiBlcXVhbCBn
ZW5lcmF0b3JzLgotICAgICAqLwotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgZ2Ft
bWFfZGlzdHJpYnV0aW9uJiBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
YW1tYV9kaXN0cmlidXRpb24mIHJocykKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKGxocyA9PSBy
aHMpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICAvLy8gXGNvbmQgaGlkZV9wcml2YXRlX21lbWJl
cnMKLQotICAgIHRlbXBsYXRlPGNsYXNzIENoYXJULCBjbGFzcyBUcmFpdHM+Ci0gICAgdm9pZCBy
ZWFkKHN0ZDo6YmFzaWNfaXN0cmVhbTxDaGFyVCwgVHJhaXRzPiYgaXMpCi0gICAgewotICAgICAg
ICBwYXJhbV90eXBlIHBhcm07Ci0gICAgICAgIGlmKGlzID4+IHBhcm0pIHsKLSAgICAgICAgICAg
IHBhcmFtKHBhcm0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBpbml0KCkKLSAgICB7
Ci0jaWZuZGVmIEJPT1NUX05PX1NURENfTkFNRVNQQUNFCi0gICAgICAgIC8vIGFsbG93IGZvciBL
b2VuaWcgbG9va3VwCi0gICAgICAgIHVzaW5nIHN0ZDo6ZXhwOwotI2VuZGlmCi0gICAgICAgIF9w
ID0gZXhwKHJlc3VsdF90eXBlKDEpKSAvIChfYWxwaGEgKyBleHAocmVzdWx0X3R5cGUoMSkpKTsK
LSAgICB9Ci0gICAgLy8vIFxlbmRjb25kCi0KLSAgICBleHBvbmVudGlhbF9kaXN0cmlidXRpb248
UmVhbFR5cGU+IF9leHA7Ci0gICAgcmVzdWx0X3R5cGUgX2FscGhhOwotICAgIHJlc3VsdF90eXBl
IF9iZXRhOwotICAgIC8vIHNvbWUgZGF0YSBwcmVjb21wdXRlZCBmcm9tIHRoZSBwYXJhbWV0ZXJz
Ci0gICAgcmVzdWx0X3R5cGUgX3A7Ci19OwotCi0KLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotCi11
c2luZyByYW5kb206OmdhbW1hX2Rpc3RyaWJ1dGlvbjsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QK
LQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9HQU1NQV9ESVNUUklCVVRJT05fSFBQCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZ2Vu
ZXJhdGVfY2Fub25pY2FsLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3JhbmRvbS9nZW5lcmF0ZV9jYW5vbmljYWwuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxMTI3ODQ3NDJiMWEzZDdhOGZlZmY3MjlmMGEwOTdhMzZjYjNiNjVhLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9nZW5lcmF0ZV9jYW5vbmljYWwuaHBw
CisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyogYm9vc3QgcmFuZG9tL2dlbmVyYXRl
X2Nhbm9uaWNhbC5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgU3RldmVuIFdhdGFu
YWJlIDIwMTEKLSAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNl
LCBWZXJzaW9uIDEuMC4gKFNlZQotICogYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0
IG9yIGNvcHkgYXQKLSAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAq
Ci0gKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5j
bHVkaW5nIGRvY3VtZW50YXRpb24uCi0gKgotICogJElkJAotICoKLSAqLwotCi0jaWZuZGVmIEJP
T1NUX1JBTkRPTV9HRU5FUkFURV9DQU5PTklDQUxfSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9H
RU5FUkFURV9DQU5PTklDQUxfSFBQCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8
Ym9vc3QvYXNzZXJ0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9jb25maWcvbm9fdHIxL2NtYXRoLmhw
cD4KLSNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2lzX2ludGVncmFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYm9vbC5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9zaWduZWRfdW5zaWduZWRfdG9vbHMuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvZ2VuZXJhdG9yX2JpdHMuaHBwPgotCi1uYW1lc3Bh
Y2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotCi10
ZW1wbGF0ZTxjbGFzcyBSZWFsVHlwZSwgc3RkOjpzaXplX3QgYml0cywgY2xhc3MgVVJORz4KLVJl
YWxUeXBlIGdlbmVyYXRlX2Nhbm9uaWNhbF9pbXBsKFVSTkcmIGcsIGJvb3N0OjptcGw6OnRydWVf
IC8qaXNfaW50ZWdyYWwqLykKLXsKLSAgICB1c2luZyBzdGQ6OnBvdzsKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIFVSTkc6OnJlc3VsdF90eXBlIGJhc2VfcmVzdWx0OwotICAgIHN0ZDo6c2l6ZV90IGRp
Z2l0cyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVhbFR5cGU+OjpkaWdpdHM7Ci0gICAgUmVhbFR5
cGUgUiA9IFJlYWxUeXBlKChnLm1heCkoKSkgLSBSZWFsVHlwZSgoZy5taW4pKCkpICsgMTsKLSAg
ICBSZWFsVHlwZSBtdWx0ID0gUjsKLSAgICBSZWFsVHlwZSBsaW1pdCA9Ci0gICAgICAgIHBvdyhS
ZWFsVHlwZSgyKSwKLSAgICAgICAgICAgIFJlYWxUeXBlKChzdGQ6Om1pbikoc3RhdGljX2Nhc3Q8
c3RkOjpzaXplX3Q+KGJpdHMpLCBkaWdpdHMpKSk7Ci0gICAgUmVhbFR5cGUgUyA9IFJlYWxUeXBl
KGRldGFpbDo6c3VidHJhY3Q8YmFzZV9yZXN1bHQ+KCkoZygpLCAoZy5taW4pKCkpKTsKLSAgICB3
aGlsZShtdWx0IDwgbGltaXQpIHsKLSAgICAgICAgUmVhbFR5cGUgaW5jID0gUmVhbFR5cGUoZGV0
YWlsOjpzdWJ0cmFjdDxiYXNlX3Jlc3VsdD4oKShnKCksIChnLm1pbikoKSkpOwotICAgICAgICBT
ICs9IGluYyAqIG11bHQ7Ci0gICAgICAgIG11bHQgKj0gUjsKLSAgICB9Ci0gICAgcmV0dXJuIFMg
LyBtdWx0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBSZWFsVHlwZSwgc3RkOjpzaXplX3QgYml0cywg
Y2xhc3MgVVJORz4KLVJlYWxUeXBlIGdlbmVyYXRlX2Nhbm9uaWNhbF9pbXBsKFVSTkcmIGcsIGJv
b3N0OjptcGw6OmZhbHNlXyAvKmlzX2ludGVncmFsKi8pCi17Ci0gICAgdXNpbmcgc3RkOjpwb3c7
Ci0gICAgdXNpbmcgc3RkOjpmbG9vcjsKLSAgICBCT09TVF9BU1NFUlQoKGcubWluKSgpID09IDAp
OwotICAgIEJPT1NUX0FTU0VSVCgoZy5tYXgpKCkgPT0gMSk7Ci0gICAgc3RkOjpzaXplX3QgZGln
aXRzID0gc3RkOjpudW1lcmljX2xpbWl0czxSZWFsVHlwZT46OmRpZ2l0czsKLSAgICBzdGQ6OnNp
emVfdCBlbmdpbmVfYml0cyA9IGRldGFpbDo6Z2VuZXJhdG9yX2JpdHM8VVJORz46OnZhbHVlKCk7
Ci0gICAgc3RkOjpzaXplX3QgYiA9IChzdGQ6Om1pbikoYml0cywgZGlnaXRzKTsKLSAgICBSZWFs
VHlwZSBSID0gcG93KFJlYWxUeXBlKDIpLCBSZWFsVHlwZShlbmdpbmVfYml0cykpOwotICAgIFJl
YWxUeXBlIG11bHQgPSBSOwotICAgIFJlYWxUeXBlIGxpbWl0ID0gcG93KFJlYWxUeXBlKDIpLCBS
ZWFsVHlwZShiKSk7Ci0gICAgUmVhbFR5cGUgUyA9IFJlYWxUeXBlKGcoKSAtIChnLm1pbikoKSk7
Ci0gICAgd2hpbGUobXVsdCA8IGxpbWl0KSB7Ci0gICAgICAgIFJlYWxUeXBlIGluYyhmbG9vcigo
UmVhbFR5cGUoZygpKSAtIFJlYWxUeXBlKChnLm1pbikoKSkpICogUikpOwotICAgICAgICBTICs9
IGluYyAqIG11bHQ7Ci0gICAgICAgIG11bHQgKj0gUjsKLSAgICB9Ci0gICAgcmV0dXJuIFMgLyBt
dWx0OwotfQotCi19Ci0KLS8qKgotICogUmV0dXJucyBhIHZhbHVlIHVuaWZvcm1seSBkaXN0cmli
dXRlZCBpbiB0aGUgcmFuZ2UgWzAsIDEpCi0gKiB3aXRoIGF0IGxlYXN0IEBjIGJpdHMgcmFuZG9t
IGJpdHMuCi0gKi8KLXRlbXBsYXRlPGNsYXNzIFJlYWxUeXBlLCBzdGQ6OnNpemVfdCBiaXRzLCBj
bGFzcyBVUk5HPgotUmVhbFR5cGUgZ2VuZXJhdGVfY2Fub25pY2FsKFVSTkcmIGcpCi17Ci0gICAg
UmVhbFR5cGUgcmVzdWx0ID0gZGV0YWlsOjpnZW5lcmF0ZV9jYW5vbmljYWxfaW1wbDxSZWFsVHlw
ZSwgYml0cz4oCi0gICAgICAgIGcsIGJvb3N0OjpyYW5kb206OnRyYWl0czo6aXNfaW50ZWdyYWw8
dHlwZW5hbWUgVVJORzo6cmVzdWx0X3R5cGU+KCkpOwotICAgIEJPT1NUX0FTU0VSVChyZXN1bHQg
Pj0gMCk7Ci0gICAgQk9PU1RfQVNTRVJUKHJlc3VsdCA8PSAxKTsKLSAgICBpZihyZXN1bHQgPT0g
MSkgewotICAgICAgICByZXN1bHQgLT0gc3RkOjpudW1lcmljX2xpbWl0czxSZWFsVHlwZT46OmVw
c2lsb24oKSAvIDI7Ci0gICAgICAgIEJPT1NUX0FTU0VSVChyZXN1bHQgIT0gMSk7Ci0gICAgfQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotfSAvLyBuYW1l
c3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9HRU5FUkFURV9DQU5PTklDQUxf
SFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9yYW5kb20vZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbi5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbi5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMzc0Y2ZmNzFiMmZiYzNjMGNmZDFiNDU2
ODhkOWQ3YzY4YzMwZWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2dl
b21ldHJpY19kaXN0cmlidXRpb24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAK
LS8qIGJvb3N0IHJhbmRvbS9nZW9tZXRyaWNfZGlzdHJpYnV0aW9uLmhwcCBoZWFkZXIgZmlsZQot
ICoKLSAqIENvcHlyaWdodCBKZW5zIE1hdXJlciAyMDAwLTIwMDEKLSAqIENvcHlyaWdodCBTdGV2
ZW4gV2F0YW5hYmUgMjAxMQotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNF
XzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAu
dHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVy
c2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgotICogUmV2aXNp
b24gaGlzdG9yeQotICogIDIwMDEtMDItMTggIG1vdmVkIHRvIGluZGl2aWR1YWwgaGVhZGVyIGZp
bGVzCi0gKi8KLQotI2lmbmRlZiBCT09TVF9SQU5ET01fR0VPTUVUUklDX0RJU1RSSUJVVElPTl9I
UFAKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0dFT01FVFJJQ19ESVNUUklCVVRJT05fSFBQCi0KLSNp
bmNsdWRlIDxib29zdC9jb25maWcvbm9fdHIxL2NtYXRoLmhwcD4gICAgICAgICAgLy8gc3RkOjps
b2cKLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8aW9zPgotI2luY2x1ZGUgPGJvb3N0L2Fz
c2VydC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9jb25maWcuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvb3BlcmF0b3JzLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9yYW5kb20vdW5pZm9ybV8wMS5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2Ug
cmFuZG9tIHsKLQotLyoqCi0gKiBBbiBpbnN0YW50aWF0aW9uIG9mIHRoZSBjbGFzcyB0ZW1wbGF0
ZSBAYyBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uIG1vZGVscwotICogYSBccmFuZG9tX2Rpc3RyaWJ1
dGlvbi4gIFRoZSBkaXN0cmlidXRpb24gcHJvZHVjZXMgcG9zaXRpdmUKLSAqIGludGVnZXJzIHdo
aWNoIGFyZSB0aGUgbnVtYmVyIG9mIGJlcm5vdWxsaSB0cmlhbHMKLSAqIHdpdGggcHJvYmFiaWxp
dHkgQGMgcCByZXF1aXJlZCB0byBnZXQgb25lIHRoYXQgZmFpbHMuCi0gKgotICogRm9yIHRoZSBn
ZW9tZXRyaWMgZGlzdHJpYnV0aW9uLCBcZiRwKGkpID0gcCgxLXApXntpfVxmJC4KLSAqCi0gKiBA
eG1sd2FybmluZwotICogVGhpcyBkaXN0cmlidXRpb24gaGFzIGJlZW4gdXBkYXRlZCB0byBtYXRj
aCB0aGUgQysrIHN0YW5kYXJkLgotICogSXRzIGJlaGF2aW9yIGhhcyBjaGFuZ2VkIGZyb20gdGhl
IG9yaWdpbmFsCi0gKiBib29zdDo6Z2VvbWV0cmljX2Rpc3RyaWJ1dGlvbi4gIEEgYmFja3dhcmRz
IGNvbXBhdGlibGUKLSAqIHdyYXBwZXIgaXMgcHJvdmlkZWQgaW4gbmFtZXNwYWNlIGJvb3N0Lgot
ICogQGVuZHhtbHdhcm5pbmcKLSAqLwotdGVtcGxhdGU8Y2xhc3MgSW50VHlwZSA9IGludCwgY2xh
c3MgUmVhbFR5cGUgPSBkb3VibGU+Ci1jbGFzcyBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uCi17Ci1w
dWJsaWM6Ci0gICAgdHlwZWRlZiBSZWFsVHlwZSBpbnB1dF90eXBlOwotICAgIHR5cGVkZWYgSW50
VHlwZSByZXN1bHRfdHlwZTsKLQotICAgIGNsYXNzIHBhcmFtX3R5cGUKLSAgICB7Ci0gICAgcHVi
bGljOgotCi0gICAgICAgIHR5cGVkZWYgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbiBkaXN0cmlidXRp
b25fdHlwZTsKLQotICAgICAgICAvKiogQ29uc3RydWN0cyB0aGUgcGFyYW1ldGVycyB3aXRoIHAu
ICovCi0gICAgICAgIGV4cGxpY2l0IHBhcmFtX3R5cGUoUmVhbFR5cGUgcF9hcmcgPSBSZWFsVHlw
ZSgwLjUpKQotICAgICAgICAgIDogX3AocF9hcmcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJP
T1NUX0FTU0VSVChSZWFsVHlwZSgwKSA8IF9wICYmIF9wIDwgUmVhbFR5cGUoMSkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdGhlIHAgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmli
dXRpb24uICovCi0gICAgICAgIFJlYWxUeXBlIHAoKSBjb25zdCB7IHJldHVybiBfcDsgfQotCi0g
ICAgICAgIC8qKiBXcml0ZXMgdGhlIHBhcmFtZXRlcnMgdG8gYSBzdGQ6Om9zdHJlYW0uICovCi0g
ICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihvcywgcGFyYW1fdHlw
ZSwgcGFybSkKLSAgICAgICAgewotICAgICAgICAgICAgb3MgPDwgcGFybS5fcDsKLSAgICAgICAg
ICAgIHJldHVybiBvczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKiBSZWFkcyB0aGUgcGFyYW1l
dGVycyBmcm9tIGEgc3RkOjppc3RyZWFtLiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlM
X0lTVFJFQU1fT1BFUkFUT1IoaXMsIHBhcmFtX3R5cGUsIHBhcm0pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGRvdWJsZSBwX2luOwotICAgICAgICAgICAgaWYoaXMgPj4gcF9pbikgewotICAgICAg
ICAgICAgICAgIGlmKHBfaW4gPiBSZWFsVHlwZSgwKSAmJiBwX2luIDwgUmVhbFR5cGUoMSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcGFybS5fcCA9IHBfaW47Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaXMuc2V0c3RhdGUoc3RkOjppb3NfYmFzZTo6ZmFp
bGJpdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdv
IHNldHMgb2YgcGFyYW1ldGVycyBhcmUgZXF1YWwuICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9E
RVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IocGFyYW1fdHlwZSwgbGhzLCByaHMpCi0gICAgICAgIHsg
cmV0dXJuIGxocy5fcCA9PSByaHMuX3A7IH0KLQotICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlm
IHRoZSB0d28gc2V0cyBvZiBwYXJhbWV0ZXJzIGFyZSBkaWZmZXJlbnQuICovCi0gICAgICAgIEJP
T1NUX1JBTkRPTV9ERVRBSUxfSU5FUVVBTElUWV9PUEVSQVRPUihwYXJhbV90eXBlKQotCi0KLSAg
ICBwcml2YXRlOgotICAgICAgICBSZWFsVHlwZSBfcDsKLSAgICB9OwotCi0gICAgLyoqCi0gICAg
ICogQ29udHJ1Y3RzIGEgbmV3IGdlb21ldHJpY19kaXN0cmlidXRpb24gd2l0aCB0aGUgcGFyYW10
ZXIgQGMgcC4KLSAgICAgKgotICAgICAqIFJlcXVpcmVzOiAwIDwgcCA8IDEKLSAgICAgKi8KLSAg
ICBleHBsaWNpdCBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uKGNvbnN0IFJlYWxUeXBlJiBwX2FyZyA9
IFJlYWxUeXBlKDAuNSkpCi0gICAgICA6IF9wKHBfYXJnKQotICAgIHsKLSAgICAgICAgQk9PU1Rf
QVNTRVJUKFJlYWxUeXBlKDApIDwgX3AgJiYgX3AgPCBSZWFsVHlwZSgxKSk7Ci0gICAgICAgIGlu
aXQoKTsKLSAgICB9Ci0KLSAgICAvKiogQ29uc3RydWN0cyBhIG5ldyBnZW9tZXRyaWNfZGlzdHJp
YnV0aW9uIGZyb20gaXRzIHBhcmFtZXRlcnMuICovCi0gICAgZXhwbGljaXQgZ2VvbWV0cmljX2Rp
c3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgICAgOiBfcChwYXJtLnAoKSkK
LSAgICB7Ci0gICAgICAgIGluaXQoKTsKLSAgICB9Ci0KLSAgICAvLyBjb21waWxlci1nZW5lcmF0
ZWQgY29weSBjdG9yIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yIGFyZSBmaW5lCi0KLSAgICAvKiog
UmV0dXJuczogdGhlIGRpc3RyaWJ1dGlvbiBwYXJhbWV0ZXIgQGMgcCAgKi8KLSAgICBSZWFsVHlw
ZSBwKCkgY29uc3QgeyByZXR1cm4gX3A7IH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBzbWFsbGVz
dCB2YWx1ZSB0aGF0IHRoZSBkaXN0cmlidXRpb24gY2FuIHByb2R1Y2UuICovCi0gICAgSW50VHlw
ZSBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgY29uc3QgeyByZXR1cm4g
SW50VHlwZSgwKTsgfQotCi0gICAgLyoqIFJldHVybnMgdGhlIGxhcmdlc3QgdmFsdWUgdGhhdCB0
aGUgZGlzdHJpYnV0aW9uIGNhbiBwcm9kdWNlLiAqLwotICAgIEludFR5cGUgbWF4IEJPT1NUX1BS
RVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIGNvbnN0Ci0gICAgeyByZXR1cm4gKHN0ZDo6bnVt
ZXJpY19saW1pdHM8SW50VHlwZT46Om1heCkoKTsgfQotCi0gICAgLyoqIFJldHVybnMgdGhlIHBh
cmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICBwYXJhbV90eXBlIHBhcmFtKCkg
Y29uc3QgeyByZXR1cm4gcGFyYW1fdHlwZShfcCk7IH0KLQotICAgIC8qKiBTZXRzIHRoZSBwYXJh
bWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgdm9pZCBwYXJhbShjb25zdCBwYXJh
bV90eXBlJiBwYXJtKQotICAgIHsKLSAgICAgICAgX3AgPSBwYXJtLnAoKTsKLSAgICAgICAgaW5p
dCgpOwotICAgIH0KLSAgCi0gICAgLyoqCi0gICAgICogRWZmZWN0czogU3Vic2VxdWVudCB1c2Vz
IG9mIHRoZSBkaXN0cmlidXRpb24gZG8gbm90IGRlcGVuZAotICAgICAqIG9uIHZhbHVlcyBwcm9k
dWNlZCBieSBhbnkgZW5naW5lIHByaW9yIHRvIGludm9raW5nIHJlc2V0LgotICAgICAqLwotICAg
IHZvaWQgcmVzZXQoKSB7IH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSByYW5kb20gdmFy
aWF0ZSBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlCi0gICAgICogZ2VvbWV0cmljX2Rpc3Ry
aWJ1dGlvbi4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmdpbmU+Ci0gICAgcmVzdWx0
X3R5cGUgb3BlcmF0b3IoKShFbmdpbmUmIGVuZykgY29uc3QKLSAgICB7Ci0gICAgICAgIHVzaW5n
IHN0ZDo6bG9nOwotICAgICAgICB1c2luZyBzdGQ6OmZsb29yOwotICAgICAgICBSZWFsVHlwZSB4
ID0gUmVhbFR5cGUoMSkgLSBib29zdDo6dW5pZm9ybV8wMTxSZWFsVHlwZT4oKShlbmcpOwotICAg
ICAgICByZXR1cm4gSW50VHlwZShmbG9vcihsb2coeCkgLyBfbG9nXzFtcCkpOwotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIFJldHVybnMgYSByYW5kb20gdmFyaWF0ZSBkaXN0cmlidXRlZCBhY2Nv
cmRpbmcgdG8gdGhlCi0gICAgICogZ2VvbWV0cmljIGRpc3RyaWJ1dGlvbiB3aXRoIHBhcmFtZXRl
cnMgc3BlY2lmaWVkIGJ5IHBhcmFtLgotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIEVuZ2lu
ZT4KLSAgICByZXN1bHRfdHlwZSBvcGVyYXRvcigpKEVuZ2luZSYgZW5nLCBjb25zdCBwYXJhbV90
eXBlJiBwYXJtKSBjb25zdAotICAgIHsgcmV0dXJuIGdlb21ldHJpY19kaXN0cmlidXRpb24ocGFy
bSkoZW5nKTsgfQotCi0gICAgLyoqIFdyaXRlcyB0aGUgZGlzdHJpYnV0aW9uIHRvIGEgQGMgc3Rk
Ojpvc3RyZWFtLiAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihv
cywgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbiwgZ2QpCi0gICAgewotICAgICAgICBvcyA8PCBnZC5f
cDsKLSAgICAgICAgcmV0dXJuIG9zOwotICAgIH0KLQotICAgIC8qKiBSZWFkcyB0aGUgZGlzdHJp
YnV0aW9uIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJ
TF9JU1RSRUFNX09QRVJBVE9SKGlzLCBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uLCBnZCkKLSAgICB7
Ci0gICAgICAgIHBhcmFtX3R5cGUgcGFybTsKLSAgICAgICAgaWYoaXMgPj4gcGFybSkgewotICAg
ICAgICAgICAgZ2QucGFyYW0ocGFybSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlzOwot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGRpc3RyaWJ1
dGlvbnMgd2lsbCBwcm9kdWNlIGlkZW50aWNhbAotICAgICAqIHNlcXVlbmNlcyBvZiB2YWx1ZXMg
Z2l2ZW4gZXF1YWwgZ2VuZXJhdG9ycy4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlM
X0VRVUFMSVRZX09QRVJBVE9SKGdlb21ldHJpY19kaXN0cmlidXRpb24sIGxocywgcmhzKQotICAg
IHsgcmV0dXJuIGxocy5fcCA9PSByaHMuX3A7IH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMg
dHJ1ZSBpZiB0aGUgdHdvIGRpc3RyaWJ1dGlvbnMgbWF5IHByb2R1Y2UgZGlmZmVyZW50Ci0gICAg
ICogc2VxdWVuY2VzIG9mIHZhbHVlcyBnaXZlbiBlcXVhbCBnZW5lcmF0b3JzLgotICAgICAqLwot
ICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5FUVVBTElUWV9PUEVSQVRPUihnZW9tZXRyaWNfZGlz
dHJpYnV0aW9uKQotCi1wcml2YXRlOgotCi0gICAgLy8vIFxjb25kIHNob3dfcHJpdmF0ZQotCi0g
ICAgdm9pZCBpbml0KCkKLSAgICB7Ci0gICAgICAgIHVzaW5nIHN0ZDo6bG9nOwotICAgICAgICBf
bG9nXzFtcCA9IGxvZygxIC0gX3ApOwotICAgIH0KLQotICAgIFJlYWxUeXBlIF9wOwotICAgIFJl
YWxUeXBlIF9sb2dfMW1wOwotCi0gICAgLy8vIFxlbmRjb25kCi19OwotCi19IC8vIG5hbWVzcGFj
ZSByYW5kb20KLQotLy8vIFxjb25kIHNob3dfZGVwcmVjYXRlZAotCi0vKioKLSAqIFByb3ZpZGVk
IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gIFRoaXMgY2xhc3MgaXMKLSAqIGRlcHJlY2F0
ZWQuICBJdCBwcm92aWRlcyB0aGUgb2xkIGJlaGF2aW9yIG9mIGdlb21ldHJpY19kaXN0cmlidXRp
b24KLSAqIHdpdGggXGYkcChpKSA9ICgxLXApIHBee2ktMX1cZiQuCi0gKi8KLXRlbXBsYXRlPGNs
YXNzIEludFR5cGUgPSBpbnQsIGNsYXNzIFJlYWxUeXBlID0gZG91YmxlPgotY2xhc3MgZ2VvbWV0
cmljX2Rpc3RyaWJ1dGlvbgotewotcHVibGljOgotICAgIHR5cGVkZWYgUmVhbFR5cGUgaW5wdXRf
dHlwZTsKLSAgICB0eXBlZGVmIEludFR5cGUgcmVzdWx0X3R5cGU7Ci0KLSAgICBleHBsaWNpdCBn
ZW9tZXRyaWNfZGlzdHJpYnV0aW9uKFJlYWxUeXBlIHBfYXJnID0gUmVhbFR5cGUoMC41KSkKLSAg
ICAgIDogX2ltcGwoMSAtIHBfYXJnKSB7fQotCi0gICAgUmVhbFR5cGUgcCgpIGNvbnN0IHsgcmV0
dXJuIDEgLSBfaW1wbC5wKCk7IH0KLQotICAgIHZvaWQgcmVzZXQoKSB7fQotCi0gICAgdGVtcGxh
dGU8Y2xhc3MgRW5naW5lPgotICAgIEludFR5cGUgb3BlcmF0b3IoKShFbmdpbmUmIGVuZykgY29u
c3QgeyByZXR1cm4gX2ltcGwoZW5nKSArIEludFR5cGUoMSk7IH0KLQotICAgIEJPT1NUX1JBTkRP
TV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihvcywgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbiwgZ2Qp
Ci0gICAgewotICAgICAgICBvcyA8PCBnZC5wKCk7Ci0gICAgICAgIHJldHVybiBvczsKLSAgICB9
Ci0KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0lTVFJFQU1fT1BFUkFUT1IoaXMsIGdlb21ldHJp
Y19kaXN0cmlidXRpb24sIGdkKQotICAgIHsKLSAgICAgICAgUmVhbFR5cGUgdmFsOwotICAgICAg
ICBpZihpcyA+PiB2YWwpIHsKLSAgICAgICAgICAgIHR5cGVuYW1lIGltcGxfdHlwZTo6cGFyYW1f
dHlwZSBpbXBsX3BhcmFtKDEgLSB2YWwpOwotICAgICAgICAgICAgZ2QuX2ltcGwucGFyYW0oaW1w
bF9wYXJhbSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlzOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICB0eXBlZGVmIHJhbmRvbTo6Z2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxJbnRUeXBlLCBS
ZWFsVHlwZT4gaW1wbF90eXBlOwotICAgIGltcGxfdHlwZSBfaW1wbDsKLX07Ci0KLS8vLyBcZW5k
Y29uZAotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfUkFORE9NX0dF
T01FVFJJQ19ESVNUUklCVVRJT05fSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vaHlwZXJleHBvbmVudGlhbF9kaXN0cmlidXRp
b24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9t
L2h5cGVyZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDQ2ZDBmYzQwMTZmYmIwYmI3NDk2ZTg1NjA2M2JjNjVjOGI0MzYwYS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vaHlwZXJleHBvbmVudGlhbF9kaXN0cmli
dXRpb24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsODgzICswLDAgQEAKLS8qIGJvb3N0IHJhbmRv
bS9oeXBlcmV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbi5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBD
b3B5cmlnaHQgTWFyY28gR3VhenpvbmUgMjAxNAotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJv
b3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcv
TElDRU5TRV8xXzAudHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9z
dCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiBNdWNoIG9m
IHRoZSBjb2RlIGhlcmUgdGFrZW4gYnkgYm9vc3Q6Om1hdGg6Omh5cGVyZXhwb25lbnRpYWxfZGlz
dHJpYnV0aW9uLgotICogVG8gdGhpcyBlbmQsIHdlIHdvdWxkIGxpa2UgdG8gdGhhbmsgUGF1bCBC
cmlzdG93IGFuZCBKb2huIE1hZGRvY2sgZm9yIHRoZWlyCi0gKiB2YWx1YWJsZSBmZWVkYmFjay4K
LSAqCi0gKiBcYXV0aG9yIE1hcmNvIEd1YXp6b25lIChtYXJjby5ndWF6em9uZUBnbWFpbC5jb20p
Ci0gKi8KLQotI2lmbmRlZiBCT09TVF9SQU5ET01fSFlQRVJFWFBPTkVOVElBTF9ESVNUUklCVVRJ
T05fSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9IWVBFUkVYUE9ORU5USUFMX0RJU1RSSUJVVElP
Tl9IUFAKLQotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9t
YXRoL3NwZWNpYWxfZnVuY3Rpb25zL2ZwY2xhc3NpZnkuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3Jh
bmRvbS9kZXRhaWwvb3BlcmF0b3JzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWls
L3ZlY3Rvcl9pby5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2Rpc2NyZXRlX2Rpc3RyaWJ1
dGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2V4cG9uZW50aWFsX2Rpc3RyaWJ1dGlv
bi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZ2UvYmVnaW4uaHBwPgotI2luY2x1ZGUgPGJvb3N0
L3JhbmdlL2VuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZ2Uvc2l6ZS5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvdHlwZV90cmFpdHMvaGFzX3ByZV9pbmNyZW1lbnQuaHBwPgotI2luY2x1ZGUgPGNh
c3NlcnQ+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxp
dGVyYXRvcj4KLSNpZm5kZWYgQk9PU1RfTk9fQ1hYMTFfSERSX0lOSVRJQUxJWkVSX0xJU1QKLSMg
aW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KLSNlbmRpZiAvLyBCT09TVF9OT19DWFgxMV9IRFJf
SU5JVElBTElaRVJfTElTVAotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPGxpbWl0cz4K
LSNpbmNsdWRlIDxudW1lcmljPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotCi1uYW1lc3BhY2UgYm9v
c3QgeyBuYW1lc3BhY2UgcmFuZG9tIHsKLQotbmFtZXNwYWNlIGh5cGVyZXhwX2RldGFpbCB7Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RkOjp2ZWN0b3I8VD4mIG5vcm1hbGl6ZShzdGQ6OnZl
Y3RvcjxUPiYgdikKLXsKLSAgICBpZiAodi5zaXplKCkgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB2OwotICAgIH0KLQotICAgIGNvbnN0IFQgc3VtID0gc3RkOjphY2N1bXVsYXRlKHYuYmVn
aW4oKSwgdi5lbmQoKSwgc3RhdGljX2Nhc3Q8VD4oMCkpOwotICAgIFQgZmluYWxfc3VtID0gMDsK
LQotICAgIGNvbnN0IHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFQ+OjppdGVyYXRvciBlbmQgPSAtLXYu
ZW5kKCk7Ci0gICAgZm9yICh0eXBlbmFtZSBzdGQ6OnZlY3RvcjxUPjo6aXRlcmF0b3IgaXQgPSB2
LmJlZ2luKCk7Ci0gICAgICAgICBpdCAhPSBlbmQ7Ci0gICAgICAgICArK2l0KQotICAgIHsKLSAg
ICAgICAgKml0IC89IHN1bTsKLSAgICAgICAgZmluYWxfc3VtICs9ICppdDsKLSAgICB9Ci0gICAg
KmVuZCA9IDEtZmluYWxfc3VtOyAvLyBhdm9pZHMgcm91bmQgb2ZmIGVycm9ycyB0aHVzIGVuc3Vy
aW5nIHRoZSBwcm9iYWJpbGl0aWVzIHJlYWxseSBzdW0gdG8gMQotCi0gICAgcmV0dXJuIHY7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSZWFsVD4KLWJvb2wgY2hlY2tfcHJvYmFiaWxpdGllcyhz
dGQ6OnZlY3RvcjxSZWFsVD4gY29uc3QmIHByb2JhYmlsaXRpZXMpCi17Ci0gICAgY29uc3Qgc3Rk
OjpzaXplX3QgbiA9IHByb2JhYmlsaXRpZXMuc2l6ZSgpOwotICAgIFJlYWxUIHN1bSA9IDA7Ci0g
ICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IG47ICsraSkKLSAgICB7Ci0gICAgICAgIGlm
IChwcm9iYWJpbGl0aWVzW2ldIDwgMAotICAgICAgICAgICAgfHwgcHJvYmFiaWxpdGllc1tpXSA+
IDEKLSAgICAgICAgICAgIHx8ICEoYm9vc3Q6Om1hdGg6OmlzZmluaXRlKShwcm9iYWJpbGl0aWVz
W2ldKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIHN1bSArPSBwcm9iYWJpbGl0aWVzW2ldOwotICAgIH0KLQotICAgIC8vTk9URTogdGhl
IGNoZWNrIGJlbG93IHNlZW1zIHRvIGZhaWwgb24gc29tZSBhcmNoaXRlY3R1cmVzLgotICAgIC8v
ICAgICAgU28gd2UgY29tbWVudGVkIGl0LgotICAgIC8vLy8gLSBXZSB0cnkgdG8ga2VlcCBwaGFz
ZSBwcm9iYWJpbGl0aWVzIGNvcnJlY3RseSBub3JtYWxpemVkIGluIHRoZSBkaXN0cmlidXRpb24g
Y29uc3RydWN0b3JzCi0gICAgLy8vLyAtIEhvd2V2ZXIgaW4gcHJhY3RpY2Ugd2UgaGF2ZSB0byBh
bGxvdyBmb3IgYSB2ZXJ5IHNsaWdodCBkaXZlcmdlbmNlIGZyb20gYSBzdW0gb2YgZXhhY3RseSAx
OgotICAgIC8vLy9pZiAoc3RkOjphYnMoc3VtLTEpID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8UmVh
bFQ+OjplcHNpbG9uKCkqMikpCi0gICAgLy8vLyBUaGlzIGlzIGZyb20gS251dGggIlRoZSBBcnQg
b2YgQ29tcHV0ZXIgUHJvZ3JhbW1pbmc6IFZvbC4yLCAzcmQgRWQiLCBhbmQgY2FuIGJlIHVzZWQg
dG8KLSAgICAvLy8vIGNoZWNrIGlzIHR3byBudW1iZXJzIGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFs
Ci0gICAgLy9jb25zdCBSZWFsVCBvbmUgPSAxOwotICAgIC8vY29uc3QgUmVhbFQgdG9sID0gc3Rk
OjpudW1lcmljX2xpbWl0czxSZWFsVD46OmVwc2lsb24oKSoyLjA7Ci0gICAgLy9pZiAoc3RkOjph
YnMoc3VtLW9uZSkgPiAoc3RkOjptYXgoc3RkOjphYnMoc3VtKSwgc3RkOjphYnMob25lKSkqdG9s
KSkKLSAgICAvL3sKLSAgICAvLyAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy99Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFJlYWxUPgotYm9vbCBjaGVja19yYXRl
cyhzdGQ6OnZlY3RvcjxSZWFsVD4gY29uc3QmIHJhdGVzKQotewotICAgIGNvbnN0IHN0ZDo6c2l6
ZV90IG4gPSByYXRlcy5zaXplKCk7Ci0gICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IG47
ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChyYXRlc1tpXSA8PSAwCi0gICAgICAgICAgICB8fCAh
KGJvb3N0OjptYXRoOjppc2Zpbml0ZSkocmF0ZXNbaV0pKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBSZWFsVD4KLWJvb2wgY2hlY2tfcGFyYW1zKHN0ZDo6dmVjdG9y
PFJlYWxUPiBjb25zdCYgcHJvYmFiaWxpdGllcywgc3RkOjp2ZWN0b3I8UmVhbFQ+IGNvbnN0JiBy
YXRlcykKLXsKLSAgICBpZiAocHJvYmFiaWxpdGllcy5zaXplKCkgIT0gcmF0ZXMuc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBjaGVja19w
cm9iYWJpbGl0aWVzKHByb2JhYmlsaXRpZXMpCi0gICAgICAgICAgICYmIGNoZWNrX3JhdGVzKHJh
dGVzKTsKLX0KLQotfSAvLyBOYW1lc3BhY2UgaHlwZXJleHBfZGV0YWlsCi0KLQotLyoqCi0gKiBU
aGUgaHlwZXJleHBvbmVudGlhbCBkaXN0cmlidXRpb24gaXMgYSByZWFsLXZhbHVlZCBjb250aW51
b3VzIGRpc3RyaWJ1dGlvbgotICogd2l0aCB0d28gcGFyYW1ldGVycywgdGhlIDxlbT5waGFzZSBw
cm9iYWJpbGl0eSB2ZWN0b3I8L2VtPiBcYyBwcm9icyBhbmQgdGhlCi0gKiA8ZW0+cmF0ZSB2ZWN0
b3I8L2VtPiBcYyByYXRlcy4KLSAqCi0gKiBBIFxmJGtcZiQtcGhhc2UgaHlwZXJleHBvbmVudGlh
bCBkaXN0cmlidXRpb24gaXMgYSBtaXh0dXJlIG9mIFxmJGtcZiQKLSAqIGV4cG9uZW50aWFsIGRp
c3RyaWJ1dGlvbnMuCi0gKiBGb3IgdGhpcyByZWFzb24sIGl0IGlzIGFsc28gcmVmZXJyZWQgdG8g
YXMgPGVtPm1peGVkIGV4cG9uZW50aWFsCi0gKiBkaXN0cmlidXRpb248L2VtPiBvciA8ZW0+cGFy
YWxsZWwgXGYka1xmJC1waGFzZSBleHBvbmVudGlhbAotICogZGlzdHJpYnV0aW9uPC9lbT4uCi0g
KgotICogQSBcZiRrXGYkLXBoYXNlIGh5cGVyZXhwb25lbnRpYWwgZGlzdHJpYnV0aW9uIGlzIGNo
YXJhY3Rlcml6ZWQgYnkgdHdvCi0gKiBwYXJhbWV0ZXJzLCBuYW1lbHkgYSA8ZW0+cGhhc2UgcHJv
YmFiaWxpdHkgdmVjdG9yPC9lbT4gXGYkXG1hdGhiZntcYWxwaGF9PShcYWxwaGFfMSxcbGRvdHMs
XGFscGhhX2spXGYkIGFuZCBhIDxlbT5yYXRlIHZlY3RvcjwvZW0+IFxmJFxtYXRoYmZ7XGxhbWJk
YX09KFxsYW1iZGFfMSxcbGRvdHMsXGxhbWJkYV9rKVxmJC4KLSAqCi0gKiBBIFxmJGtcZiQtcGhh
c2UgaHlwZXJleHBvbmVudGlhbCBkaXN0cmlidXRpb24gaXMgZnJlcXVlbnRseSB1c2VkIGluCi0g
KiA8ZW0+cXVldWVpbmcgdGhlb3J5PC9lbT4gdG8gbW9kZWwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0
aGUgc3VwZXJwb3NpdGlvbiBvZgotICogXGYka1xmJCBpbmRlcGVuZGVudCBldmVudHMsIGxpa2Us
IGZvciBpbnN0YW5jZSwgdGhlICBzZXJ2aWNlIHRpbWUgZGlzdHJpYnV0aW9uCi0gKiBvZiBhIHF1
ZXVlaW5nIHN0YXRpb24gd2l0aCBcZiRrXGYkIHNlcnZlcnMgaW4gcGFyYWxsZWwgd2hlcmUgdGhl
IFxmJGlcZiQtdGgKLSAqIHNlcnZlciBpcyBjaG9zZW4gd2l0aCBwcm9iYWJpbGl0eSBcZiRcYWxw
aGFfaVxmJCBhbmQgaXRzIHNlcnZpY2UgdGltZQotICogZGlzdHJpYnV0aW9uIGlzIGFuIGV4cG9u
ZW50aWFsIGRpc3RyaWJ1dGlvbiB3aXRoIHJhdGUgXGYkXGxhbWJkYV9pXGYkCi0gKiAoQWxsZW4s
MTk5MDsgUGFwYWRvcG9sb3VzIGV0IGFsLiwxOTkzOyBUcml2ZWRpLDIwMDIpLgotICoKLSAqIEZv
ciBpbnN0YW5jZSwgQ1BVcyBzZXJ2aWNlLXRpbWUgZGlzdHJpYnV0aW9uIGluIGEgY29tcHV0aW5n
IHN5c3RlbSBoYXMgb2Z0ZW4KLSAqIGJlZW4gb2JzZXJ2ZWQgdG8gcG9zc2VzcyBzdWNoIGEgZGlz
dHJpYnV0aW9uIChSb3NpbiwxOTY1KS4KLSAqIEFsc28sIHRoZSBhcnJpdmFsIG9mIGRpZmZlcmVu
dCB0eXBlcyBvZiBjdXN0b21lciB0byBhIHNpbmdsZSBxdWV1ZWluZyBzdGF0aW9uCi0gKiBpcyBv
ZnRlbiBtb2RlbGVkIGFzIGEgaHlwZXJleHBvbmVudGlhbCBkaXN0cmlidXRpb24gKFBhcGFkb3Bv
bG91cyBldCBhbC4sMTk5MykuCi0gKiBTaW1pbGFybHksIGlmIGEgcHJvZHVjdCBtYW51ZmFjdHVy
ZWQgaW4gc2V2ZXJhbCBwYXJhbGxlbCBhc3NlbXBseSBsaW5lcyBhbmQKLSAqIHRoZSBvdXRwdXRz
IGFyZSBtZXJnZWQsIHRoZSBmYWlsdXJlIGRlbnNpdHkgb2YgdGhlIG92ZXJhbGwgcHJvZHVjdCBp
cyBsaWtlbHkKLSAqIHRvIGJlIGh5cGVyZXhwb25lbnRpYWwgKFRyaXZlZGksMjAwMikuCi0gKgot
ICogRmluYWxseSwgc2luY2UgdGhlIGh5cGVyZXhwb25lbnRpYWwgZGlzdHJpYnV0aW9uIGV4aGli
aXRzIGEgaGlnaCBDb2VmZmljaWVudAotICogb2YgVmFyaWF0aW9uIChDb1YpLCB0aGF0IGlzIGEg
Q29WID4gMSwgaXQgaXMgZXNwZWNpYWxseSBzdWl0ZWQgdG8gZml0Ci0gKiBlbXBpcmljYWwgZGF0
YSB3aXRoIGxhcmdlIENvViAoRmVpdGVsc29uLDIwMTQ7IFdvbHNraSBldCBhbC4sMjAxMykgYW5k
IHRvCi0gKiBhcHByb3hpbWF0ZSA8ZW0+bG9uZy10YWlsIHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlv
bnM8L2VtPiAoRmVsZG1hbm4gZXQgYWwuLDE5OTgpLgotICoKLSAqIFNlZSAoQm9vc3QsMjAxNCkg
Zm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLgotICoKLSAqIEEgXGYka1xmJC1waGFz
ZSBoeXBlcmV4cG9uZW50aWFsIGRpc3RyaWJ1dGlvbiBoYXMgYSBwcm9iYWJpbGl0eSBkZW5zaXR5
Ci0gKiBmdW5jdGlvbgotICogXGZbCi0gKiAgZih4KSA9IFxzdW1fe2k9MX1eayBcYWxwaGFfaSBc
bGFtYmRhX2kgZV57LXhcbGFtYmRhX2l9Ci0gKiBcZl0KLSAqIHdoZXJlOgotICogLSBcZiRrXGYk
IGlzIHRoZSA8ZW0+bnVtYmVyIG9mIHBoYXNlczwvZW0+IGFuZCBhbHNvIHRoZSBzaXplIG9mIHRo
ZSBpbnB1dAotICogICB2ZWN0b3IgcGFyYW1ldGVycywKLSAqIC0gXGYkXG1hdGhiZntcYWxwaGF9
PShcYWxwaGFfMSxcbGRvdHMsXGFscGhhX2spXGYkIGlzIHRoZSA8ZW0+cGhhc2UgcHJvYmFiaWxp
dHkKLSAqICAgdmVjdG9yPC9lbT4gcGFyYW1ldGVyLCBhbmQKLSAqIC0gXGYkXG1hdGhiZntcbGFt
YmRhfT0oXGxhbWJkYV8xLFxsZG90cyxcbGFtYmRhX2spXGYkIGlzIHRoZSA8ZW0+cmF0ZSB2ZWN0
b3I8L2VtPgotICogICBwYXJhbWV0ZXIuCi0gKiAuCi0gKgotICogR2l2ZW4gYSBcZiRrXGYkLXBo
YXNlIGh5cGVyZXhwb25lbnRpYWwgZGlzdHJpYnV0aW9uIHdpdGggcGhhc2UgcHJvYmFiaWxpdHkK
LSAqIHZlY3RvciBcZiRcbWF0aGJme1xhbHBoYX1cZiQgYW5kIHJhdGUgdmVjdG9yIFxmJFxtYXRo
YmZ7XGxhbWJkYX1cZiQsIHRoZQotICogcmFuZG9tIHZhcmlhdGUgZ2VuZXJhdGlvbiBhbGdvcml0
aG0gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwcyAoVHlzemVyLDE5OTkpOgotICogLSMg
R2VuZXJhdGUgYSByYW5kb20gdmFyaWFibGUgXGYkVVxmJCB1bmlmb3JtbHkgZGlzdHJpYnV0aW9u
IG9uIHRoZSBpbnRlcnZhbCBcZiQoMCwxKVxmJC4KLSAqIC0jIFVzZSBcZiRVXGYkIHRvIHNlbGVj
dCB0aGUgYXBwcm9wcmlhdGUgXGYkXGxhbWJkYV9pXGYkIChlLmcuLCB0aGUKLSAqICA8ZW0+YWxp
YXMgbWV0aG9kPC9lbT4gY2FuIHBvc3NpYmx5IGJlIHVzZWQgZm9yIHRoaXMgc3RlcCkuCi0gKiAt
IyBHZW5lcmF0ZSBhbiBleHBvbmVudGlhbGx5IGRpc3RyaWJ1dGVkIHJhbmRvbSB2YXJpYWJsZSBc
ZiRYXGYkIHdpdGggcmF0ZSBwYXJhbWV0ZXIgXGYkXGxhbWJkYV9pXGYkLgotICogLSMgUmV0dXJu
IFxmJFhcZiQuCi0gKiAuCi0gKgotICogUmVmZXJlbmNlczoKLSAqIC0jIEEuTy4gQWxsZW4sIDxl
bT5Qcm9iYWJpbGl0eSwgU3RhdGlzdGljcywgYW5kIFF1ZXVpbmcgVGhlb3J5IHdpdGggQ29tcHV0
ZXIgU2NpZW5jZSBBcHBsaWNhdGlvbnMsIFNlY29uZCBFZGl0aW9uPC9lbT4sIEFjYWRlbWljIFBy
ZXNzLCAxOTkwLgotICogLSMgQm9vc3QgQysrIExpYnJhcmllcywgPGVtPkJvb3N0Lk1hdGggLyBT
dGF0aXN0aWNhbCBEaXN0cmlidXRpb25zOiBIeXBlcmV4cG9uZW50aWFsIERpc3RyaWJ1dGlvbjwv
ZW0+LCBPbmxpbmU6IGh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9saWJzL3JlbGVhc2UvbGlicy9t
YXRoL2RvYy9odG1sL2Rpc3QuaHRtbCAsIDIwMTQuCi0gKiAtIyBELkcuIEZlaXRlbHNvbiwgPGVt
Pldvcmtsb2FkIE1vZGVsaW5nIGZvciBDb21wdXRlciBTeXN0ZW1zIFBlcmZvcm1hbmNlIEV2YWx1
YXRpb248L2VtPiwgQ2FtYnJpZGdlIFVuaXZlcnNpdHkgUHJlc3MsIDIwMTQKLSAqIC0jIEEuIEZl
bGRtYW5uIGFuZCBXLiBXaGl0dCwgPGVtPkZpdHRpbmcgbWl4dHVyZXMgb2YgZXhwb25lbnRpYWxz
IHRvIGxvbmctdGFpbCBkaXN0cmlidXRpb25zIHRvIGFuYWx5emUgbmV0d29yayBwZXJmb3JtYW5j
ZSBtb2RlbHM8L2VtPiwgUGVyZm9ybWFuY2UgRXZhbHVhdGlvbiAzMSgzLTQpOjI0NSwgZG9pOjEw
LjEwMTYvUzAxNjYtNTMxNig5NykwMDAwMy01LCAxOTk4LgotICogLSMgSC5ULiBQYXBhZG9wb2xv
dXMsIEMuIEhlYXZleSBhbmQgSi4gQnJvd25lLCA8ZW0+UXVldWVpbmcgVGhlb3J5IGluIE1hbnVm
YWN0dXJpbmcgU3lzdGVtcyBBbmFseXNpcyBhbmQgRGVzaWduPC9lbT4sIENoYXBtYW4gJiBIYWxs
L0NSQywgMTk5MywgcC4gMzUuCi0gKiAtIyBSLkYuIFJvc2luLCA8ZW0+RGV0ZXJtaW5pbmcgYSBj
b21wdXRpbmcgY2VudGVyIGVudmlyb25tZW50PC9lbT4sIENvbW11bmljYXRpb25zIG9mIHRoZSBB
Q00gOCg3KTo0NjMtNDY4LCAxOTY1LgotICogLSMgSy5TLiBUcml2ZWRpLCA8ZW0+UHJvYmFiaWxp
dHkgYW5kIFN0YXRpc3RpY3Mgd2l0aCBSZWxpYWJpbGl0eSwgUXVldWVpbmcsIGFuZCBDb21wdXRl
ciBTY2llbmNlIEFwcGxpY2F0aW9uczwvZW0+LCBKb2huIFdpbGV5ICYgU29ucywgSW5jLiwgMjAw
Mi4KLSAqIC0jIEouIFR5c3plciwgPGVtPk9iamVjdC1PcmllbnRlZCBDb21wdXRlciBTaW11bGF0
aW9uIG9mIERpc2NyZXRlLUV2ZW50IFN5c3RlbXM8L2VtPiwgU3ByaW5nZXIsIDE5OTkuCi0gKiAt
IyBXaWtpcGVkaWEsIDxlbT5IeXBlcmV4cG9uZW50aWFsIERpc3RyaWJ1dGlvbjwvZW0+LCBPbmxp
bmU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSHlwZXJleHBvbmVudGlhbF9kaXN0cmli
dXRpb24gLCAyMDE0LgotICogLSMgV29sZnJhbSBNYXRoZW1hdGljYSwgPGVtPkh5cGVyZXhwb25l
bnRpYWwgRGlzdHJpYnV0aW9uPC9lbT4sIE9ubGluZTogaHR0cDovL3JlZmVyZW5jZS53b2xmcmFt
LmNvbS9sYW5ndWFnZS9yZWYvSHlwZXJleHBvbmVudGlhbERpc3RyaWJ1dGlvbi5odG1sICwgMjAx
NC4KLSAqIC4KLSAqCi0gKiBcYXV0aG9yIE1hcmNvIEd1YXp6b25lIChtYXJjby5ndWF6em9uZUBn
bWFpbC5jb20pCi0gKi8KLXRlbXBsYXRlPGNsYXNzIFJlYWxUID0gZG91YmxlPgotY2xhc3MgaHlw
ZXJleHBvbmVudGlhbF9kaXN0cmlidXRpb24KLXsKLSAgICBwdWJsaWM6IHR5cGVkZWYgUmVhbFQg
cmVzdWx0X3R5cGU7Ci0gICAgcHVibGljOiB0eXBlZGVmIFJlYWxUIGlucHV0X3R5cGU7Ci0KLQot
ICAgIC8qKgotICAgICAqIFRoZSBwYXJhbWV0ZXJzIG9mIGEgaHlwZXJleHBvbmVudGlhbCBkaXN0
cmlidXRpb24uCi0gICAgICoKLSAgICAgKiBTdG9yZXMgdGhlIDxlbT5waGFzZSBwcm9iYWJpbGl0
eSB2ZWN0b3I8L2VtPiBhbmQgdGhlIDxlbT5yYXRlIHZlY3RvcjwvZW0+Ci0gICAgICogb2YgdGhl
IGh5cGVyZXhwb25lbnRpYWwgZGlzdHJpYnV0aW9uLgotICAgICAqCi0gICAgICogXGF1dGhvciBN
YXJjbyBHdWF6em9uZSAobWFyY28uZ3VhenpvbmVAZ21haWwuY29tKQotICAgICAqLwotICAgIHB1
YmxpYzogY2xhc3MgcGFyYW1fdHlwZQotICAgIHsKLSAgICAgICAgcHVibGljOiB0eXBlZGVmIGh5
cGVyZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uIGRpc3RyaWJ1dGlvbl90eXBlOwotCi0gICAgICAg
IC8qKgotICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgXGMgcGFyYW1fdHlwZSB3aXRoIHRoZSBkZWZh
dWx0IHBhcmFtZXRlcnMKLSAgICAgICAgICogb2YgdGhlIGRpc3RyaWJ1dGlvbi4KLSAgICAgICAg
ICovCi0gICAgICAgIHB1YmxpYzogcGFyYW1fdHlwZSgpCi0gICAgICAgIDogcHJvYnNfKDEsIDEp
LAotICAgICAgICAgIHJhdGVzXygxLCAxKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvKioKLSAgICAgICAgICogQ29uc3RydWN0cyBhIFxjIHBhcmFtX3R5cGUgZnJvbSB0aGUgPGVt
PnBoYXNlIHByb2JhYmlsaXR5IHZlY3RvcjwvZW0+Ci0gICAgICAgICAqIGFuZCA8ZW0+cmF0ZSB2
ZWN0b3I8L2VtPiBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uCi0gICAgICAgICAqCi0g
ICAgICAgICAqIFRoZSA8ZW0+cGhhc2UgcHJvYmFiaWxpdHkgdmVjdG9yPC9lbT4gcGFyYW1ldGVy
IGlzIGdpdmVuIGJ5IHRoZSByYW5nZQotICAgICAgICAgKiBkZWZpbmVkIGJ5IFtcYSBwcm9iX2Zp
cnN0LCBcYSBwcm9iX2xhc3QpIGl0ZXJhdG9yIHBhaXIsIGFuZCB0aGUKLSAgICAgICAgICogPGVt
PnJhdGUgdmVjdG9yPC9lbT4gcGFyYW1ldGVyIGlzIGdpdmVuIGJ5IHRoZSByYW5nZSBkZWZpbmVk
IGJ5Ci0gICAgICAgICAqIFtcYSByYXRlX2ZpcnN0LCBcYSByYXRlX2xhc3QpIGl0ZXJhdG9yIHBh
aXIuCi0gICAgICAgICAqCi0gICAgICAgICAqIFx0cGFyYW0gUHJvYkl0ZXJUIE11c3QgbWVldCB0
aGUgcmVxdWlyZW1lbnRzIG9mIFxjIElucHV0SXRlcmF0b3IgY29uY2VwdCAoSVNPLDIwMTQsc2Vj
LiAyNC4yLjMgW2lucHV0Lml0ZXJhdG9yc10pLgotICAgICAgICAgKiBcdHBhcmFtIFJhdGVJdGVy
VCBNdXN0IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiBcYyBJbnB1dEl0ZXJhdG9yIGNvbmNlcHQg
KElTTywyMDE0LHNlYy4gMjQuMi4zIFtpbnB1dC5pdGVyYXRvcnNdKS4KLSAgICAgICAgICoKLSAg
ICAgICAgICogXHBhcmFtIHByb2JfZmlyc3QgVGhlIGl0ZXJhdG9yIHRvIHRoZSBiZWdpbm5pbmcg
b2YgdGhlIHJhbmdlIG9mIG5vbi1uZWdhdGl2ZSByZWFsIGVsZW1lbnRzIHJlcHJlc2VudGluZyB0
aGUgcGhhc2UgcHJvYmFiaWxpdGllczsgaWYgZWxlbWVudHMgZG9uJ3Qgc3VtIHRvIDEsIHRoZXkg
YXJlIG5vcm1hbGl6ZWQuCi0gICAgICAgICAqIFxwYXJhbSBwcm9iX2xhc3QgVGhlIGl0ZXJhdG9y
IHRvIHRoZSBlbmRpbmcgb2YgdGhlIHJhbmdlIG9mIG5vbi1uZWdhdGl2ZSByZWFsIGVsZW1lbnRz
IHJlcHJlc2VudGluZyB0aGUgcGhhc2UgcHJvYmFiaWxpdGllczsgaWYgZWxlbWVudHMgZG9uJ3Qg
c3VtIHRvIDEsIHRoZXkgYXJlIG5vcm1hbGl6ZWQuCi0gICAgICAgICAqIFxwYXJhbSByYXRlX2Zp
cnN0IFRoZSBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSByYW5nZSBvZiBub24tbmVn
YXRpdmUgcmVhbCBlbGVtZW50cyByZXByZXNlbnRpbmcgdGhlIHJhdGVzLgotICAgICAgICAgKiBc
cGFyYW0gcmF0ZV9sYXN0IFRoZSBpdGVyYXRvciB0byB0aGUgZW5kaW5nIG9mIHRoZSByYW5nZSBv
ZiBub24tbmVnYXRpdmUgcmVhbCBlbGVtZW50cyByZXByZXNlbnRpbmcgdGhlIHJhdGVzLgotICAg
ICAgICAgKgotICAgICAgICAgKiBSZWZlcmVuY2VzOgotICAgICAgICAgKiAtIyBJU08sIDxlbT5J
U08vSUVDIDE0ODgyLTIwMTQ6IEluZm9ybWF0aW9uIHRlY2hub2xvZ3kgLSBQcm9ncmFtbWluZyBs
YW5ndWFnZXMgLSBDKys8L2VtPiwgMjAxNAotICAgICAgICAgKiAuCi0gICAgICAgICAqLwotICAg
ICAgICBwdWJsaWM6IHRlbXBsYXRlIDx0eXBlbmFtZSBQcm9iSXRlclQsIHR5cGVuYW1lIFJhdGVJ
dGVyVD4KLSAgICAgICAgICAgICAgICBwYXJhbV90eXBlKFByb2JJdGVyVCBwcm9iX2ZpcnN0LCBQ
cm9iSXRlclQgcHJvYl9sYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF0ZUl0ZXJU
IHJhdGVfZmlyc3QsIFJhdGVJdGVyVCByYXRlX2xhc3QpCi0gICAgICAgIDogcHJvYnNfKHByb2Jf
Zmlyc3QsIHByb2JfbGFzdCksCi0gICAgICAgICAgcmF0ZXNfKHJhdGVfZmlyc3QsIHJhdGVfbGFz
dCkKLSAgICAgICAgewotICAgICAgICAgICAgaHlwZXJleHBfZGV0YWlsOjpub3JtYWxpemUocHJv
YnNfKTsKLQotICAgICAgICAgICAgYXNzZXJ0KCBoeXBlcmV4cF9kZXRhaWw6OmNoZWNrX3BhcmFt
cyhwcm9ic18sIHJhdGVzXykgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAg
KiBDb25zdHJ1Y3RzIGEgXGMgcGFyYW1fdHlwZSBmcm9tIHRoZSA8ZW0+cGhhc2UgcHJvYmFiaWxp
dHkgdmVjdG9yPC9lbT4KLSAgICAgICAgICogYW5kIDxlbT5yYXRlIHZlY3RvcjwvZW0+IHBhcmFt
ZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KLSAgICAgICAgICoKLSAgICAgICAgICogVGhlIDxl
bT5waGFzZSBwcm9iYWJpbGl0eSB2ZWN0b3I8L2VtPiBwYXJhbWV0ZXIgaXMgZ2l2ZW4gYnkgdGhl
IHJhbmdlCi0gICAgICAgICAqIGRlZmluZWQgYnkgXGEgcHJvYl9yYW5nZSwgYW5kIHRoZSA8ZW0+
cmF0ZSB2ZWN0b3I8L2VtPiBwYXJhbWV0ZXIgaXMKLSAgICAgICAgICogZ2l2ZW4gYnkgdGhlIHJh
bmdlIGRlZmluZWQgYnkgXGEgcmF0ZV9yYW5nZS4KLSAgICAgICAgICoKLSAgICAgICAgICogXHRw
YXJhbSBQcm9iUmFuZ2VUIE11c3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIDxhIGhyZWY9ImJv
b3N0Oi9saWJzL3JhbmdlL2RvYy9odG1sL3JhbmdlL2NvbmNlcHRzLmh0bWwiPlJhbmdlPC9hPiBj
b25jZXB0LgotICAgICAgICAgKiBcdHBhcmFtIFJhdGVSYW5nZVQgTXVzdCBtZWV0IHRoZSByZXF1
aXJlbWVudHMgb2YgPGEgaHJlZj0iYm9vc3Q6L2xpYnMvcmFuZ2UvZG9jL2h0bWwvcmFuZ2UvY29u
Y2VwdHMuaHRtbCI+UmFuZ2U8L2E+IGNvbmNlcHQuCi0gICAgICAgICAqCi0gICAgICAgICAqIFxw
YXJhbSBwcm9iX3JhbmdlIFRoZSByYW5nZSBvZiBub24tbmVnYXRpdmUgcmVhbCBlbGVtZW50cyBy
ZXByZXNlbnRpbmcgdGhlIHBoYXNlIHByb2JhYmlsaXRpZXM7IGlmIGVsZW1lbnRzIGRvbid0IHN1
bSB0byAxLCB0aGV5IGFyZSBub3JtYWxpemVkLgotICAgICAgICAgKiBccGFyYW0gcmF0ZV9yYW5n
ZSBUaGUgcmFuZ2Ugb2YgcG9zaXRpdmUgcmVhbCBlbGVtZW50cyByZXByZXNlbnRpbmcgdGhlIHJh
dGVzLgotICAgICAgICAgKgotICAgICAgICAgKiBcbm90ZQotICAgICAgICAgKiAgVGhlIGZpbmFs
IFxjIGRpc2FibGVfaWYgcGFyYW1ldGVyIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCB0aGF0
Ci0gICAgICAgICAqICBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHRoaXMgdHdvIGFyZ3VtZW50IGNv
bnN0cnVjdG9yIGFuZCB0aGUKLSAgICAgICAgICogIGl0ZXJhdG9yLWJhc2VkIHR3byBhcmd1bWVu
dCBjb25zdHJ1Y3RvciBkZXNjcmliZWQgYmVsb3cuCi0gICAgICAgICAqLwotICAgICAgICAvLyAg
V2UgU0ZJTkFFIHRoaXMgb3V0IG9mIGV4aXN0YW5jZSBpZiBlaXRoZXIgYXJndW1lbnQgdHlwZSBp
cwotICAgICAgICAvLyAgaW5jcmVtZW50YWJsZSBhcyBpbiB0aGF0IGNhc2UgdGhlIHR5cGUgaXMg
cHJvYmFibHkgYW4gaXRlcmF0b3I6Ci0gICAgICAgIHB1YmxpYzogdGVtcGxhdGUgPHR5cGVuYW1l
IFByb2JSYW5nZVQsIHR5cGVuYW1lIFJhdGVSYW5nZVQ+Ci0gICAgICAgICAgICAgICAgcGFyYW1f
dHlwZShQcm9iUmFuZ2VUIGNvbnN0JiBwcm9iX3JhbmdlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUmF0ZVJhbmdlVCBjb25zdCYgcmF0ZV9yYW5nZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIGJvb3N0OjpkaXNhYmxlX2lmX2M8Ym9vc3Q6Omhhc19wcmVfaW5jcmVt
ZW50PFByb2JSYW5nZVQ+Ojp2YWx1ZSB8fCBib29zdDo6aGFzX3ByZV9pbmNyZW1lbnQ8UmF0ZVJh
bmdlVD46OnZhbHVlPjo6dHlwZSogPSAwKQotICAgICAgICA6IHByb2JzXyhib29zdDo6YmVnaW4o
cHJvYl9yYW5nZSksIGJvb3N0OjplbmQocHJvYl9yYW5nZSkpLAotICAgICAgICAgIHJhdGVzXyhi
b29zdDo6YmVnaW4ocmF0ZV9yYW5nZSksIGJvb3N0OjplbmQocmF0ZV9yYW5nZSkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGh5cGVyZXhwX2RldGFpbDo6bm9ybWFsaXplKHByb2JzXyk7Ci0KLSAg
ICAgICAgICAgIGFzc2VydCggaHlwZXJleHBfZGV0YWlsOjpjaGVja19wYXJhbXMocHJvYnNfLCBy
YXRlc18pICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc3RydWN0
cyBhIFxjIHBhcmFtX3R5cGUgZnJvbSB0aGUgPGVtPnJhdGUgdmVjdG9yPC9lbT4gcGFyYW1ldGVy
IG9mCi0gICAgICAgICAqIHRoZSBkaXN0cmlidXRpb24gYW5kIHdpdGggZXF1YWwgcGhhc2UgcHJv
YmFiaWxpdGllcy4KLSAgICAgICAgICoKLSAgICAgICAgICogVGhlIDxlbT5yYXRlIHZlY3Rvcjwv
ZW0+IHBhcmFtZXRlciBpcyBnaXZlbiBieSB0aGUgcmFuZ2UgZGVmaW5lZCBieQotICAgICAgICAg
KiBbXGEgcmF0ZV9maXJzdCwgXGEgcmF0ZV9sYXN0KSBpdGVyYXRvciBwYWlyLCBhbmQgdGhlIDxl
bT5waGFzZQotICAgICAgICAgKiBwcm9iYWJpbGl0eSB2ZWN0b3I8L2VtPiBwYXJhbWV0ZXIgaXMg
c2V0IHRvIHRoZSBlcXVhbCBwaGFzZQotICAgICAgICAgKiBwcm9iYWJpbGl0aWVzIChpLmUuLCB0
byBhIHZlY3RvciBvZiB0aGUgc2FtZSBsZW5ndGggXGYka1xmJCBvZiB0aGUKLSAgICAgICAgICog
PGVtPnJhdGUgdmVjdG9yPC9lbT4gYW5kIHdpdGggZWFjaCBlbGVtZW50IHNldCB0byBcZiQxLjAv
a1xmJCkuCi0gICAgICAgICAqCi0gICAgICAgICAqIFx0cGFyYW0gUmF0ZUl0ZXJUIE11c3QgbWVl
dCB0aGUgcmVxdWlyZW1lbnRzIG9mIFxjIElucHV0SXRlcmF0b3IgY29uY2VwdCAoSVNPLDIwMTQs
c2VjLiAyNC4yLjMgW2lucHV0Lml0ZXJhdG9yc10pLgotICAgICAgICAgKiBcdHBhcmFtIFJhdGVJ
dGVyVDIgTXVzdCBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgXGMgSW5wdXRJdGVyYXRvciBjb25j
ZXB0IChJU08sMjAxNCxzZWMuIDI0LjIuMyBbaW5wdXQuaXRlcmF0b3JzXSkuCi0gICAgICAgICAq
Ci0gICAgICAgICAqIFxwYXJhbSByYXRlX2ZpcnN0IFRoZSBpdGVyYXRvciB0byB0aGUgYmVnaW5u
aW5nIG9mIHRoZSByYW5nZSBvZiBub24tbmVnYXRpdmUgcmVhbCBlbGVtZW50cyByZXByZXNlbnRp
bmcgdGhlIHJhdGVzLgotICAgICAgICAgKiBccGFyYW0gcmF0ZV9sYXN0IFRoZSBpdGVyYXRvciB0
byB0aGUgZW5kaW5nIG9mIHRoZSByYW5nZSBvZiBub24tbmVnYXRpdmUgcmVhbCBlbGVtZW50cyBy
ZXByZXNlbnRpbmcgdGhlIHJhdGVzLgotICAgICAgICAgKgotICAgICAgICAgKiBcbm90ZQotICAg
ICAgICAgKiAgVGhlIGZpbmFsIFxjIGRpc2FibGVfaWYgcGFyYW1ldGVyIGlzIGFuIGltcGxlbWVu
dGF0aW9uIGRldGFpbCB0aGF0Ci0gICAgICAgICAqICBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHRo
aXMgdHdvIGFyZ3VtZW50IGNvbnN0cnVjdG9yIGFuZCB0aGUKLSAgICAgICAgICogIHJhbmdlLWJh
c2VkIHR3byBhcmd1bWVudCBjb25zdHJ1Y3RvciBkZXNjcmliZWQgYWJvdmUuCi0gICAgICAgICAq
Ci0gICAgICAgICAqIFJlZmVyZW5jZXM6Ci0gICAgICAgICAqIC0jIElTTywgPGVtPklTTy9JRUMg
MTQ4ODItMjAxNDogSW5mb3JtYXRpb24gdGVjaG5vbG9neSAtIFByb2dyYW1taW5nIGxhbmd1YWdl
cyAtIEMrKzwvZW0+LCAyMDE0Ci0gICAgICAgICAqIC4KLSAgICAgICAgICovCi0gICAgICAgIC8v
ICBXZSBTRklOQUUgdGhpcyBvdXQgb2YgZXhpc3RhbmNlIGlmIHRoZSBhcmd1bWVudCB0eXBlIGlz
Ci0gICAgICAgIC8vICBpbmNyZW1lbnRhYmxlIGFzIGluIHRoYXQgY2FzZSB0aGUgdHlwZSBpcyBw
cm9iYWJseSBhbiBpdGVyYXRvci4KLSAgICAgICAgcHVibGljOiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
UmF0ZUl0ZXJUPgotICAgICAgICAgICAgICAgIHBhcmFtX3R5cGUoUmF0ZUl0ZXJUIHJhdGVfZmly
c3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF0ZUl0ZXJUIHJhdGVfbGFzdCwgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgYm9vc3Q6OmVuYWJsZV9pZl9jPGJv
b3N0OjpoYXNfcHJlX2luY3JlbWVudDxSYXRlSXRlclQ+Ojp2YWx1ZT46OnR5cGUqID0gMCkKLSAg
ICAgICAgOiBwcm9ic18oc3RkOjpkaXN0YW5jZShyYXRlX2ZpcnN0LCByYXRlX2xhc3QpLCAxKSwg
Ly8gd2lsbCBiZSBub3JtYWxpemVkIGJlbG93Ci0gICAgICAgICAgcmF0ZXNfKHJhdGVfZmlyc3Qs
IHJhdGVfbGFzdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0KHByb2JzXy5zaXplKCkg
PT0gcmF0ZXNfLnNpemUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICog
Q29uc3RydWN0cyBhIEBjIHBhcmFtX3R5cGUgZnJvbSB0aGUgInJhdGVzIiBwYXJhbWV0ZXJzCi0g
ICAgICAgICAqIG9mIHRoZSBkaXN0cmlidXRpb24gYW5kIHdpdGggZXF1YWwgcGhhc2UgcHJvYmFi
aWxpdGllcy4KLSAgICAgICAgICoKLSAgICAgICAgICogVGhlIDxlbT5yYXRlIHZlY3RvcjwvZW0+
IHBhcmFtZXRlciBpcyBnaXZlbiBieSB0aGUgcmFuZ2UgZGVmaW5lZCBieQotICAgICAgICAgKiBc
YSByYXRlX3JhbmdlLCBhbmQgdGhlIDxlbT5waGFzZSBwcm9iYWJpbGl0eSB2ZWN0b3I8L2VtPiBw
YXJhbWV0ZXIgaXMKLSAgICAgICAgICogc2V0IHRvIHRoZSBlcXVhbCBwaGFzZSBwcm9iYWJpbGl0
aWVzIChpLmUuLCB0byBhIHZlY3RvciBvZiB0aGUgc2FtZQotICAgICAgICAgKiBsZW5ndGggXGYk
a1xmJCBvZiB0aGUgPGVtPnJhdGUgdmVjdG9yPC9lbT4gYW5kIHdpdGggZWFjaCBlbGVtZW50IHNl
dAotICAgICAgICAgKiB0byBcZiQxLjAva1xmJCkuCi0gICAgICAgICAqCi0gICAgICAgICAqIFx0
cGFyYW0gUmF0ZVJhbmdlVCBNdXN0IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiA8YSBocmVmPSJi
b29zdDovbGlicy9yYW5nZS9kb2MvaHRtbC9yYW5nZS9jb25jZXB0cy5odG1sIj5SYW5nZTwvYT4g
Y29uY2VwdC4KLSAgICAgICAgICoKLSAgICAgICAgICogXHBhcmFtIHJhdGVfcmFuZ2UgVGhlIHJh
bmdlIG9mIHBvc2l0aXZlIHJlYWwgZWxlbWVudHMgcmVwcmVzZW50aW5nIHRoZSByYXRlcy4KLSAg
ICAgICAgICovCi0gICAgICAgIHB1YmxpYzogdGVtcGxhdGUgPHR5cGVuYW1lIFJhdGVSYW5nZVQ+
Ci0gICAgICAgICAgICAgICAgcGFyYW1fdHlwZShSYXRlUmFuZ2VUIGNvbnN0JiByYXRlX3Jhbmdl
KQotICAgICAgICA6IHByb2JzXyhib29zdDo6c2l6ZShyYXRlX3JhbmdlKSwgMSksIC8vIFdpbGwg
YmUgbm9ybWFsaXplZCBiZWxvdwotICAgICAgICAgIHJhdGVzXyhib29zdDo6YmVnaW4ocmF0ZV9y
YW5nZSksIGJvb3N0OjplbmQocmF0ZV9yYW5nZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGh5
cGVyZXhwX2RldGFpbDo6bm9ybWFsaXplKHByb2JzXyk7Ci0KLSAgICAgICAgICAgIGFzc2VydCgg
aHlwZXJleHBfZGV0YWlsOjpjaGVja19wYXJhbXMocHJvYnNfLCByYXRlc18pICk7Ci0gICAgICAg
IH0KLQotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9IRFJfSU5JVElBTElaRVJfTElTVAotICAgICAg
ICAvKioKLSAgICAgICAgICogQ29uc3RydWN0cyBhIFxjIHBhcmFtX3R5cGUgZnJvbSB0aGUgPGVt
PnBoYXNlIHByb2JhYmlsaXR5IHZlY3RvcjwvZW0+Ci0gICAgICAgICAqIGFuZCA8ZW0+cmF0ZSB2
ZWN0b3I8L2VtPiBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uCi0gICAgICAgICAqCi0g
ICAgICAgICAqIFRoZSA8ZW0+cGhhc2UgcHJvYmFiaWxpdHkgdmVjdG9yPC9lbT4gcGFyYW1ldGVy
IGlzIGdpdmVuIGJ5IHRoZQotICAgICAgICAgKiA8ZW0+YnJhY2UtaW5pdC1saXN0PC9lbT4gKElT
TywyMDE0LHNlYy4gOC41LjQgW2RjbC5pbml0Lmxpc3RdKQotICAgICAgICAgKiBkZWZpbmVkIGJ5
IFxhIGwxLCBhbmQgdGhlIDxlbT5yYXRlIHZlY3RvcjwvZW0+IHBhcmFtZXRlciBpcyBnaXZlbiBi
eSB0aGUKLSAgICAgICAgICogPGVtPmJyYWNlLWluaXQtbGlzdDwvZW0+IChJU08sMjAxNCxzZWMu
IDguNS40IFtkY2wuaW5pdC5saXN0XSkKLSAgICAgICAgICogZGVmaW5lZCBieSBcYSBsMi4KLSAg
ICAgICAgICoKLSAgICAgICAgICogXHBhcmFtIGwxIFRoZSBpbml0aWFsaXplciBsaXN0IGZvciBp
bml6aWFsaXppbmcgdGhlIHBoYXNlIHByb2JhYmlsaXR5IHZlY3Rvci4KLSAgICAgICAgICogXHBh
cmFtIGwyIFRoZSBpbml0aWFsaXplciBsaXN0IGZvciBpbml6aWFsaXppbmcgdGhlIHJhdGUgdmVj
dG9yLgotICAgICAgICAgKgotICAgICAgICAgKiBSZWZlcmVuY2VzOgotICAgICAgICAgKiAtIyBJ
U08sIDxlbT5JU08vSUVDIDE0ODgyLTIwMTQ6IEluZm9ybWF0aW9uIHRlY2hub2xvZ3kgLSBQcm9n
cmFtbWluZyBsYW5ndWFnZXMgLSBDKys8L2VtPiwgMjAxNAotICAgICAgICAgKiAuCi0gICAgICAg
ICAqLwotICAgICAgICBwdWJsaWM6IHBhcmFtX3R5cGUoc3RkOjppbml0aWFsaXplcl9saXN0PFJl
YWxUPiBsMSwgc3RkOjppbml0aWFsaXplcl9saXN0PFJlYWxUPiBsMikKLSAgICAgICAgOiBwcm9i
c18obDEuYmVnaW4oKSwgbDEuZW5kKCkpLAotICAgICAgICAgIHJhdGVzXyhsMi5iZWdpbigpLCBs
Mi5lbmQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaHlwZXJleHBfZGV0YWlsOjpub3JtYWxp
emUocHJvYnNfKTsKLQotICAgICAgICAgICAgYXNzZXJ0KCBoeXBlcmV4cF9kZXRhaWw6OmNoZWNr
X3BhcmFtcyhwcm9ic18sIHJhdGVzXykgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAg
ICAgICAgKiBDb25zdHJ1Y3RzIGEgXGMgcGFyYW1fdHlwZSBmcm9tIHRoZSA8ZW0+cmF0ZSB2ZWN0
b3I8L2VtPiBwYXJhbWV0ZXIKLSAgICAgICAgICogb2YgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgd2l0
aCBlcXVhbCBwaGFzZSBwcm9iYWJpbGl0aWVzLgotICAgICAgICAgKgotICAgICAgICAgKiBUaGUg
PGVtPnJhdGUgdmVjdG9yPC9lbT4gcGFyYW1ldGVyIGlzIGdpdmVuIGJ5IHRoZQotICAgICAgICAg
KiA8ZW0+YnJhY2UtaW5pdC1saXN0PC9lbT4gKElTTywyMDE0LHNlYy4gOC41LjQgW2RjbC5pbml0
Lmxpc3RdKQotICAgICAgICAgKiBkZWZpbmVkIGJ5IFxhIGwxLCBhbmQgdGhlIDxlbT5waGFzZSBw
cm9iYWJpbGl0eSB2ZWN0b3I8L2VtPiBwYXJhbWV0ZXIgaXMKLSAgICAgICAgICogc2V0IHRvIHRo
ZSBlcXVhbCBwaGFzZSBwcm9iYWJpbGl0aWVzIChpLmUuLCB0byBhIHZlY3RvciBvZiB0aGUgc2Ft
ZQotICAgICAgICAgKiBsZW5ndGggXGYka1xmJCBvZiB0aGUgPGVtPnJhdGUgdmVjdG9yPC9lbT4g
YW5kIHdpdGggZWFjaCBlbGVtZW50IHNldAotICAgICAgICAgKiB0byBcZiQxLjAva1xmJCkuCi0g
ICAgICAgICAqCi0gICAgICAgICAqIFxwYXJhbSBsMSBUaGUgaW5pdGlhbGl6ZXIgbGlzdCBmb3Ig
aW5pemlhbGl6aW5nIHRoZSByYXRlIHZlY3Rvci4KLSAgICAgICAgICoKLSAgICAgICAgICogUmVm
ZXJlbmNlczoKLSAgICAgICAgICogLSMgSVNPLCA8ZW0+SVNPL0lFQyAxNDg4Mi0yMDE0OiBJbmZv
cm1hdGlvbiB0ZWNobm9sb2d5IC0gUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIC0gQysrPC9lbT4sIDIw
MTQKLSAgICAgICAgICogLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljOiBwYXJhbV90eXBl
KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWFsVD4gbDEpCi0gICAgICAgIDogcHJvYnNfKHN0ZDo6
ZGlzdGFuY2UobDEuYmVnaW4oKSwgbDEuZW5kKCkpLCAxKSwgLy8gV2lsbCBiZSBub3JtYWxpemVk
IGJlbG93Ci0gICAgICAgICAgcmF0ZXNfKGwxLmJlZ2luKCksIGwxLmVuZCgpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBoeXBlcmV4cF9kZXRhaWw6Om5vcm1hbGl6ZShwcm9ic18pOwotCi0gICAg
ICAgICAgICBhc3NlcnQoIGh5cGVyZXhwX2RldGFpbDo6Y2hlY2tfcGFyYW1zKHByb2JzXywgcmF0
ZXNfKSApOwotICAgICAgICB9Ci0jZW5kaWYgLy8gQk9PU1RfTk9fQ1hYMTFfSERSX0lOSVRJQUxJ
WkVSX0xJU1QKLQotICAgICAgICAvKioKLSAgICAgICAgICogR2V0cyB0aGUgPGVtPnBoYXNlIHBy
b2JhYmlsaXR5IHZlY3RvcjwvZW0+IHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnR1aW9uLgotICAg
ICAgICAgKgotICAgICAgICAgKiBccmV0dXJuIFRoZSA8ZW0+cGhhc2UgcHJvYmFiaWxpdHkgdmVj
dG9yPC9lbT4gcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uCi0gICAgICAgICAqCi0gICAg
ICAgICAqIFxub3RlCi0gICAgICAgICAqICBUaGUgcmV0dXJuZWQgcHJvYmFiaWxpdGllcyBhcmUg
dGhlIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgb25lcwotICAgICAgICAgKiAgcGFzc2VkIGF0
IGNvbnN0cnVjdGlvbiB0aW1lLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljOiBzdGQ6OnZl
Y3RvcjxSZWFsVD4gcHJvYmFiaWxpdGllcygpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBwcm9ic187Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogR2V0
cyB0aGUgPGVtPnJhdGUgdmVjdG9yPC9lbT4gcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidHVpb24u
Ci0gICAgICAgICAqCi0gICAgICAgICAqIFxyZXR1cm4gVGhlIDxlbT5yYXRlIHZlY3RvcjwvZW0+
IHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgcHVi
bGljOiBzdGQ6OnZlY3RvcjxSZWFsVD4gcmF0ZXMoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gcmF0ZXNfOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqIFdyaXRlcyBhIFxj
IHBhcmFtX3R5cGUgdG8gYSBcYyBzdGQ6Om9zdHJlYW0uICovCi0gICAgICAgIHB1YmxpYzogQk9P
U1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCBwYXJhbV90eXBlLCBwYXJhbSkK
LSAgICAgICAgewotICAgICAgICAgICAgZGV0YWlsOjpwcmludF92ZWN0b3Iob3MsIHBhcmFtLnBy
b2JzXyk7Ci0gICAgICAgICAgICBvcyA8PCAnICc7Ci0gICAgICAgICAgICBkZXRhaWw6OnByaW50
X3ZlY3RvcihvcywgcGFyYW0ucmF0ZXNfKTsKLQotICAgICAgICAgICAgcmV0dXJuIG9zOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLyoqIFJlYWRzIGEgXGMgcGFyYW1fdHlwZSBmcm9tIGEgXGMgc3Rk
Ojppc3RyZWFtLiAqLwotICAgICAgICBwdWJsaWM6IEJPT1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVB
TV9PUEVSQVRPUihpcywgcGFyYW1fdHlwZSwgcGFyYW0pCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIE5PVEU6IGlmIFxjIHN0ZDo6aW9zX2Jhc2U6OmV4Y2VwdGlvbnMgaXMgc2V0LCB0aGUgY29k
ZSBiZWxvdyBtYXkKLSAgICAgICAgICAgIC8vICAgICAgIHRocm93IGluIGNhc2Ugb2YgYSBJL08g
ZmFpbHVyZS4KLSAgICAgICAgICAgIC8vICAgICAgIFRvIHByZXZlbnQgbGVhdmluZyB0aGUgc3Rh
dGUgb2YgXGMgcGFyYW0gaW5jb25zaXN0ZW50OgotICAgICAgICAgICAgLy8gICAgICAgLSBpZiBh
biBleGNlcHRpb24gaXMgdGhyb3duLCB0aGUgc3RhdGUgb2YgXGMgcGFyYW0gaXMgbGVmdAotICAg
ICAgICAgICAgLy8gICAgICAgICB1bmNoYW5nZWQgKGkuZS4sIGlzIHRoZSBzYW1lIGFzIHRoZSBv
bmUgYXQgdGhlIGJlZ2lubmluZwotICAgICAgICAgICAgLy8gICAgICAgICBvZiB0aGUgZnVuY3Rp
b24ncyBleGVjdXRpb24pLCBhbmQKLSAgICAgICAgICAgIC8vICAgICAgIC0gdGhlIHN0YXRlIG9m
IFxjIHBhcmFtIG9ubHkgYWZ0ZXIgcmVhZGluZyB0aGUgd2hvbGUgaW5wdXQuCi0KLSAgICAgICAg
ICAgIHN0ZDo6dmVjdG9yPFJlYWxUPiBwcm9iczsKLSAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFJl
YWxUPiByYXRlczsKLQotICAgICAgICAgICAgLy8gUmVhZHMgcHJvYmFiaWxpdHkgYW5kIHJhdGUg
dmVjdG9ycwotICAgICAgICAgICAgZGV0YWlsOjpyZWFkX3ZlY3RvcihpcywgcHJvYnMpOwotICAg
ICAgICAgICAgaWYgKCFpcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
aXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpcyA+PiBzdGQ6OndzOwotICAgICAgICAg
ICAgZGV0YWlsOjpyZWFkX3ZlY3RvcihpcywgcmF0ZXMpOwotICAgICAgICAgICAgaWYgKCFpcykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXM7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIHBhcmFtX3R5cGUgb2Jq
ZWN0Ci0gICAgICAgICAgICBpZiAocHJvYnMuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBwYXJhbS5wcm9ic18uc3dhcChwcm9icyk7Ci0gICAgICAgICAgICAgICAg
cHJvYnMuY2xlYXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyYXRlcy5zaXpl
KCkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtLnJhdGVzXy5zd2Fw
KHJhdGVzKTsKLSAgICAgICAgICAgICAgICByYXRlcy5jbGVhcigpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBib29sIGZhaWwgPSBmYWxzZTsKLQotICAgICAgICAgICAgLy8gQWRqdXN0
IHZlY3RvciBzaXplcyAoaWYgbmVlZGVkKQotICAgICAgICAgICAgaWYgKHBhcmFtLnByb2JzXy5z
aXplKCkgIT0gcGFyYW0ucmF0ZXNfLnNpemUoKQotICAgICAgICAgICAgICAgIHx8IHBhcmFtLnBy
b2JzXy5zaXplKCkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmYWlsID0g
dHJ1ZTsKLQotICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2l6ZV90IG5wID0gcGFyYW0ucHJv
YnNfLnNpemUoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNpemVfdCBuciA9IHBhcmFt
LnJhdGVzXy5zaXplKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnAgPiBucikKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtLnJhdGVzXy5yZXNpemUobnAsIDEp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuciA+IG5wKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW0ucHJvYnNfLnJlc2l6
ZShuciwgMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtLnByb2JzXy5yZXNpemUoMSwg
MSk7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtLnJhdGVzXy5yZXNpemUoMSwgMSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBOb3JtYWxpemUg
cHJvYmFiaWxpdGllcwotICAgICAgICAgICAgLy8gTk9URTogdGhpcyBjYW5ub3QgYmUgZG9uZSBl
YXJsaWVyIHNpbmNlIHRoZSBwcm9iYWJpbGl0eSB2ZWN0b3IKLSAgICAgICAgICAgIC8vICAgICAg
IGNhbiBiZSBjaGFuZ2VkIGR1ZSB0byBzaXplIGNvbmZvcm1hbmNlCi0gICAgICAgICAgICBoeXBl
cmV4cF9kZXRhaWw6Om5vcm1hbGl6ZShwYXJhbS5wcm9ic18pOwotCi0gICAgICAgICAgICAvLyBT
ZXQgdGhlIGVycm9yIHN0YXRlIGluIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBpbiBjYXNlIG9mIGlu
dmFsaWQgaW5wdXQKLSAgICAgICAgICAgIGlmIChmYWlsKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8vIFRoaXMgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBpb3NfYmFzZTo6ZXhjZXB0
aW9uKGZhaWxiaXQpIGlzIGVuYWJsZWQKLSAgICAgICAgICAgICAgICBpcy5zZXRzdGF0ZShzdGQ6
Omlvc19iYXNlOjpmYWlsYml0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy9wb3N0
OiB2ZWN0b3Igc2l6ZSBjb25mb3JtYW5jZQotICAgICAgICAgICAgYXNzZXJ0KHBhcmFtLnByb2Jz
Xy5zaXplKCkgPT0gcGFyYW0ucmF0ZXNfLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBp
czsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBzZXRz
IG9mIHBhcmFtZXRlcnMgYXJlIHRoZSBzYW1lLiAqLwotICAgICAgICBwdWJsaWM6IEJPT1NUX1JB
TkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IocGFyYW1fdHlwZSwgbGhzLCByaHMpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsaHMucHJvYnNfID09IHJocy5wcm9ic18KLSAgICAg
ICAgICAgICAgICAgICAmJiBsaHMucmF0ZXNfID09IHJocy5yYXRlc187Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBzZXRzIG9mIHBhcmFt
ZXRlcnMgYXJlIHRoZSBkaWZmZXJlbnQuICovCi0gICAgICAgIHB1YmxpYzogQk9PU1RfUkFORE9N
X0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKHBhcmFtX3R5cGUpCi0KLQotICAgICAgICBwcml2
YXRlOiBzdGQ6OnZlY3RvcjxSZWFsVD4gcHJvYnNfOyAvLy88IFRoZSA8ZW0+cGhhc2UgcHJvYmFi
aWxpdHkgdmVjdG9yPC9lbT4gcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24KLSAgICAgICAg
cHJpdmF0ZTogc3RkOjp2ZWN0b3I8UmVhbFQ+IHJhdGVzXzsgLy8vPCBUaGUgPGVtPnJhdGUgdmVj
dG9yPC9lbT4gcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24KLSAgICB9OyAvLyBwYXJhbV90
eXBlCi0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSAxLXBoYXNlIFxjIGh5cGVyZXhw
b25lbnRpYWxfZGlzdHJpYnV0aW9uIChpLmUuLCBhbgotICAgICAqIGV4cG9uZW50aWFsIGRpc3Ry
aWJ1dGlvbikgd2l0aCByYXRlIDEuCi0gICAgICovCi0gICAgcHVibGljOiBoeXBlcmV4cG9uZW50
aWFsX2Rpc3RyaWJ1dGlvbigpCi0gICAgOiBkZF8oc3RkOjp2ZWN0b3I8UmVhbFQ+KDEsIDEpKSwK
LSAgICAgIHJhdGVzXygxLCAxKQotICAgIHsKLSAgICAgICAgLy8gZW1wdHkKLSAgICB9Ci0KLSAg
ICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgXGMgaHlwZXJleHBvbmVudGlhbF9kaXN0cmlidXRp
b24gZnJvbSB0aGUgPGVtPnBoYXNlCi0gICAgICogcHJvYmFiaWxpdHkgdmVjdG9yPC9lbT4gYW5k
IDxlbT5yYXRlIHZlY3RvcjwvZW0+IHBhcmFtZXRlcnMgb2YgdGhlCi0gICAgICogZGlzdHJpYnV0
aW9uLgotICAgICAqCi0gICAgICogVGhlIDxlbT5waGFzZSBwcm9iYWJpbGl0eSB2ZWN0b3I8L2Vt
PiBwYXJhbWV0ZXIgaXMgZ2l2ZW4gYnkgdGhlIHJhbmdlCi0gICAgICogZGVmaW5lZCBieSBbXGEg
cHJvYl9maXJzdCwgXGEgcHJvYl9sYXN0KSBpdGVyYXRvciBwYWlyLCBhbmQgdGhlCi0gICAgICog
PGVtPnJhdGUgdmVjdG9yPC9lbT4gcGFyYW1ldGVyIGlzIGdpdmVuIGJ5IHRoZSByYW5nZSBkZWZp
bmVkIGJ5Ci0gICAgICogW1xhIHJhdGVfZmlyc3QsIFxhIHJhdGVfbGFzdCkgaXRlcmF0b3IgcGFp
ci4KLSAgICAgKgotICAgICAqIFx0cGFyYW0gUHJvYkl0ZXJUIE11c3QgbWVldCB0aGUgcmVxdWly
ZW1lbnRzIG9mIFxjIElucHV0SXRlcmF0b3IgY29uY2VwdCAoSVNPLDIwMTQsc2VjLiAyNC4yLjMg
W2lucHV0Lml0ZXJhdG9yc10pLgotICAgICAqIFx0cGFyYW0gUmF0ZUl0ZXJUIE11c3QgbWVldCB0
aGUgcmVxdWlyZW1lbnRzIG9mIFxjIElucHV0SXRlcmF0b3IgY29uY2VwdCAoSVNPLDIwMTQsc2Vj
LiAyNC4yLjMgW2lucHV0Lml0ZXJhdG9yc10pLgotICAgICAqCi0gICAgICogXHBhcmFtIHByb2Jf
Zmlyc3QgVGhlIGl0ZXJhdG9yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlIG9mIG5vbi1u
ZWdhdGl2ZSByZWFsIGVsZW1lbnRzIHJlcHJlc2VudGluZyB0aGUgcGhhc2UgcHJvYmFiaWxpdGll
czsgaWYgZWxlbWVudHMgZG9uJ3Qgc3VtIHRvIDEsIHRoZXkgYXJlIG5vcm1hbGl6ZWQuCi0gICAg
ICogXHBhcmFtIHByb2JfbGFzdCBUaGUgaXRlcmF0b3IgdG8gdGhlIGVuZGluZyBvZiB0aGUgcmFu
Z2Ugb2Ygbm9uLW5lZ2F0aXZlIHJlYWwgZWxlbWVudHMgcmVwcmVzZW50aW5nIHRoZSBwaGFzZSBw
cm9iYWJpbGl0aWVzOyBpZiBlbGVtZW50cyBkb24ndCBzdW0gdG8gMSwgdGhleSBhcmUgbm9ybWFs
aXplZC4KLSAgICAgKiBccGFyYW0gcmF0ZV9maXJzdCBUaGUgaXRlcmF0b3IgdG8gdGhlIGJlZ2lu
bmluZyBvZiB0aGUgcmFuZ2Ugb2Ygbm9uLW5lZ2F0aXZlIHJlYWwgZWxlbWVudHMgcmVwcmVzZW50
aW5nIHRoZSByYXRlcy4KLSAgICAgKiBccGFyYW0gcmF0ZV9sYXN0IFRoZSBpdGVyYXRvciB0byB0
aGUgZW5kaW5nIG9mIHRoZSByYW5nZSBvZiBub24tbmVnYXRpdmUgcmVhbCBlbGVtZW50cyByZXBy
ZXNlbnRpbmcgdGhlIHJhdGVzLgotICAgICAqCi0gICAgICogUmVmZXJlbmNlczoKLSAgICAgKiAt
IyBJU08sIDxlbT5JU08vSUVDIDE0ODgyLTIwMTQ6IEluZm9ybWF0aW9uIHRlY2hub2xvZ3kgLSBQ
cm9ncmFtbWluZyBsYW5ndWFnZXMgLSBDKys8L2VtPiwgMjAxNAotICAgICAqIC4KLSAgICAgKi8K
LSAgICBwdWJsaWM6IHRlbXBsYXRlIDx0eXBlbmFtZSBQcm9iSXRlclQsIHR5cGVuYW1lIFJhdGVJ
dGVyVD4KLSAgICAgICAgICAgIGh5cGVyZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uKFByb2JJdGVy
VCBwcm9iX2ZpcnN0LCBQcm9iSXRlclQgcHJvYl9sYXN0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUmF0ZUl0ZXJUIHJhdGVfZmlyc3QsIFJhdGVJdGVyVCByYXRl
X2xhc3QpCi0gICAgOiBkZF8ocHJvYl9maXJzdCwgcHJvYl9sYXN0KSwKLSAgICAgIHJhdGVzXyhy
YXRlX2ZpcnN0LCByYXRlX2xhc3QpCi0gICAgewotICAgICAgICBhc3NlcnQoIGh5cGVyZXhwX2Rl
dGFpbDo6Y2hlY2tfcGFyYW1zKGRkXy5wcm9iYWJpbGl0aWVzKCksIHJhdGVzXykgKTsKLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgXGMgaHlwZXJleHBvbmVudGlhbF9kaXN0
cmlidXRpb24gZnJvbSB0aGUgPGVtPnBoYXNlCi0gICAgICogcHJvYmFiaWxpdHkgdmVjdG9yPC9l
bT4gYW5kIDxlbT5yYXRlIHZlY3RvcjwvZW0+IHBhcmFtZXRlcnMgb2YgdGhlCi0gICAgICogZGlz
dHJpYnV0aW9uLgotICAgICAqCi0gICAgICogVGhlIDxlbT5waGFzZSBwcm9iYWJpbGl0eSB2ZWN0
b3I8L2VtPiBwYXJhbWV0ZXIgaXMgZ2l2ZW4gYnkgdGhlIHJhbmdlCi0gICAgICogZGVmaW5lZCBi
eSBcYSBwcm9iX3JhbmdlLCBhbmQgdGhlIDxlbT5yYXRlIHZlY3RvcjwvZW0+IHBhcmFtZXRlciBp
cwotICAgICAqIGdpdmVuIGJ5IHRoZSByYW5nZSBkZWZpbmVkIGJ5IFxhIHJhdGVfcmFuZ2UuCi0g
ICAgICoKLSAgICAgKiBcdHBhcmFtIFByb2JSYW5nZVQgTXVzdCBtZWV0IHRoZSByZXF1aXJlbWVu
dHMgb2YgPGEgaHJlZj0iYm9vc3Q6L2xpYnMvcmFuZ2UvZG9jL2h0bWwvcmFuZ2UvY29uY2VwdHMu
aHRtbCI+UmFuZ2U8L2E+IGNvbmNlcHQuCi0gICAgICogXHRwYXJhbSBSYXRlUmFuZ2VUIE11c3Qg
bWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIDxhIGhyZWY9ImJvb3N0Oi9saWJzL3JhbmdlL2RvYy9o
dG1sL3JhbmdlL2NvbmNlcHRzLmh0bWwiPlJhbmdlPC9hPiBjb25jZXB0LgotICAgICAqCi0gICAg
ICogXHBhcmFtIHByb2JfcmFuZ2UgVGhlIHJhbmdlIG9mIG5vbi1uZWdhdGl2ZSByZWFsIGVsZW1l
bnRzIHJlcHJlc2VudGluZyB0aGUgcGhhc2UgcHJvYmFiaWxpdGllczsgaWYgZWxlbWVudHMgZG9u
J3Qgc3VtIHRvIDEsIHRoZXkgYXJlIG5vcm1hbGl6ZWQuCi0gICAgICogXHBhcmFtIHJhdGVfcmFu
Z2UgVGhlIHJhbmdlIG9mIHBvc2l0aXZlIHJlYWwgZWxlbWVudHMgcmVwcmVzZW50aW5nIHRoZSBy
YXRlcy4KLSAgICAgKgotICAgICAqIFxub3RlCi0gICAgICogIFRoZSBmaW5hbCBcYyBkaXNhYmxl
X2lmIHBhcmFtZXRlciBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgdGhhdAotICAgICAqICBk
aWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHRoaXMgdHdvIGFyZ3VtZW50IGNvbnN0cnVjdG9yIGFuZCB0
aGUKLSAgICAgKiAgaXRlcmF0b3ItYmFzZWQgdHdvIGFyZ3VtZW50IGNvbnN0cnVjdG9yIGRlc2Ny
aWJlZCBiZWxvdy4KLSAgICAgKi8KLSAgICAvLyAgV2UgU0ZJTkFFIHRoaXMgb3V0IG9mIGV4aXN0
YW5jZSBpZiBlaXRoZXIgYXJndW1lbnQgdHlwZSBpcwotICAgIC8vICBpbmNyZW1lbnRhYmxlIGFz
IGluIHRoYXQgY2FzZSB0aGUgdHlwZSBpcyBwcm9iYWJseSBhbiBpdGVyYXRvcjoKLSAgICBwdWJs
aWM6IHRlbXBsYXRlIDx0eXBlbmFtZSBQcm9iUmFuZ2VULCB0eXBlbmFtZSBSYXRlUmFuZ2VUPgot
ICAgICAgICAgICAgaHlwZXJleHBvbmVudGlhbF9kaXN0cmlidXRpb24oUHJvYlJhbmdlVCBjb25z
dCYgcHJvYl9yYW5nZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJhdGVSYW5nZVQgY29uc3QmIHJhdGVfcmFuZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBib29zdDo6ZGlzYWJsZV9pZl9jPGJvb3N0OjpoYXNf
cHJlX2luY3JlbWVudDxQcm9iUmFuZ2VUPjo6dmFsdWUgfHwgYm9vc3Q6Omhhc19wcmVfaW5jcmVt
ZW50PFJhdGVSYW5nZVQ+Ojp2YWx1ZT46OnR5cGUqID0gMCkKLSAgICA6IGRkXyhwcm9iX3Jhbmdl
KSwKLSAgICAgIHJhdGVzXyhib29zdDo6YmVnaW4ocmF0ZV9yYW5nZSksIGJvb3N0OjplbmQocmF0
ZV9yYW5nZSkpCi0gICAgewotICAgICAgICBhc3NlcnQoIGh5cGVyZXhwX2RldGFpbDo6Y2hlY2tf
cGFyYW1zKGRkXy5wcm9iYWJpbGl0aWVzKCksIHJhdGVzXykgKTsKLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBDb25zdHJ1Y3RzIGEgXGMgaHlwZXJleHBvbmVudGlhbF9kaXN0cmlidXRpb24gZnJv
bSB0aGUgPGVtPnJhdGUKLSAgICAgKiB2ZWN0b3I8L2VtPiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3Ry
aWJ1dGlvbiBhbmQgd2l0aCBlcXVhbCBwaGFzZQotICAgICAqIHByb2JhYmlsaXRpZXMuCi0gICAg
ICoKLSAgICAgKiBUaGUgPGVtPnJhdGUgdmVjdG9yPC9lbT4gcGFyYW1ldGVyIGlzIGdpdmVuIGJ5
IHRoZSByYW5nZSBkZWZpbmVkIGJ5Ci0gICAgICogW1xhIHJhdGVfZmlyc3QsIFxhIHJhdGVfbGFz
dCkgaXRlcmF0b3IgcGFpciwgYW5kIHRoZSA8ZW0+cGhhc2UKLSAgICAgKiBwcm9iYWJpbGl0eSB2
ZWN0b3I8L2VtPiBwYXJhbWV0ZXIgaXMgc2V0IHRvIHRoZSBlcXVhbCBwaGFzZQotICAgICAqIHBy
b2JhYmlsaXRpZXMgKGkuZS4sIHRvIGEgdmVjdG9yIG9mIHRoZSBzYW1lIGxlbmd0aCBcZiRrXGYk
IG9mIHRoZQotICAgICAqIDxlbT5yYXRlIHZlY3RvcjwvZW0+IGFuZCB3aXRoIGVhY2ggZWxlbWVu
dCBzZXQgdG8gXGYkMS4wL2tcZiQpLgotICAgICAqCi0gICAgICogXHRwYXJhbSBSYXRlSXRlclQg
TXVzdCBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgXGMgSW5wdXRJdGVyYXRvciBjb25jZXB0IChJ
U08sMjAxNCxzZWMuIDI0LjIuMyBbaW5wdXQuaXRlcmF0b3JzXSkuCi0gICAgICogXHRwYXJhbSBS
YXRlSXRlclQyIE11c3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIFxjIElucHV0SXRlcmF0b3Ig
Y29uY2VwdCAoSVNPLDIwMTQsc2VjLiAyNC4yLjMgW2lucHV0Lml0ZXJhdG9yc10pLgotICAgICAq
Ci0gICAgICogXHBhcmFtIHJhdGVfZmlyc3QgVGhlIGl0ZXJhdG9yIHRvIHRoZSBiZWdpbm5pbmcg
b2YgdGhlIHJhbmdlIG9mIG5vbi1uZWdhdGl2ZSByZWFsIGVsZW1lbnRzIHJlcHJlc2VudGluZyB0
aGUgcmF0ZXMuCi0gICAgICogXHBhcmFtIHJhdGVfbGFzdCBUaGUgaXRlcmF0b3IgdG8gdGhlIGVu
ZGluZyBvZiB0aGUgcmFuZ2Ugb2Ygbm9uLW5lZ2F0aXZlIHJlYWwgZWxlbWVudHMgcmVwcmVzZW50
aW5nIHRoZSByYXRlcy4KLSAgICAgKgotICAgICAqIFxub3RlCi0gICAgICogIFRoZSBmaW5hbCBc
YyBkaXNhYmxlX2lmIHBhcmFtZXRlciBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgdGhhdAot
ICAgICAqICBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHRoaXMgdHdvIGFyZ3VtZW50IGNvbnN0cnVj
dG9yIGFuZCB0aGUKLSAgICAgKiAgcmFuZ2UtYmFzZWQgdHdvIGFyZ3VtZW50IGNvbnN0cnVjdG9y
IGRlc2NyaWJlZCBhYm92ZS4KLSAgICAgKgotICAgICAqIFJlZmVyZW5jZXM6Ci0gICAgICogLSMg
SVNPLCA8ZW0+SVNPL0lFQyAxNDg4Mi0yMDE0OiBJbmZvcm1hdGlvbiB0ZWNobm9sb2d5IC0gUHJv
Z3JhbW1pbmcgbGFuZ3VhZ2VzIC0gQysrPC9lbT4sIDIwMTQKLSAgICAgKiAuCi0gICAgICovCi0g
ICAgLy8gIFdlIFNGSU5BRSB0aGlzIG91dCBvZiBleGlzdGFuY2UgaWYgdGhlIGFyZ3VtZW50IHR5
cGUgaXMKLSAgICAvLyAgaW5jcmVtZW50YWJsZSBhcyBpbiB0aGF0IGNhc2UgdGhlIHR5cGUgaXMg
cHJvYmFibHkgYW4gaXRlcmF0b3IuCi0gICAgcHVibGljOiB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmF0
ZUl0ZXJUPgotICAgICAgICAgICAgaHlwZXJleHBvbmVudGlhbF9kaXN0cmlidXRpb24oUmF0ZUl0
ZXJUIHJhdGVfZmlyc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSYXRlSXRlclQgcmF0ZV9sYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgYm9vc3Q6OmVuYWJsZV9pZl9jPGJvb3N0OjpoYXNfcHJlX2luY3Jl
bWVudDxSYXRlSXRlclQ+Ojp2YWx1ZT46OnR5cGUqID0gMCkKLSAgICA6IGRkXyhzdGQ6OnZlY3Rv
cjxSZWFsVD4oc3RkOjpkaXN0YW5jZShyYXRlX2ZpcnN0LCByYXRlX2xhc3QpLCAxKSksCi0gICAg
ICByYXRlc18ocmF0ZV9maXJzdCwgcmF0ZV9sYXN0KQotICAgIHsKLSAgICAgICAgYXNzZXJ0KCBo
eXBlcmV4cF9kZXRhaWw6OmNoZWNrX3BhcmFtcyhkZF8ucHJvYmFiaWxpdGllcygpLCByYXRlc18p
ICk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIEBjIHBhcmFtX3R5cGUg
ZnJvbSB0aGUgInJhdGVzIiBwYXJhbWV0ZXJzCi0gICAgICogb2YgdGhlIGRpc3RyaWJ1dGlvbiBh
bmQgd2l0aCBlcXVhbCBwaGFzZSBwcm9iYWJpbGl0aWVzLgotICAgICAqCi0gICAgICogVGhlIDxl
bT5yYXRlIHZlY3RvcjwvZW0+IHBhcmFtZXRlciBpcyBnaXZlbiBieSB0aGUgcmFuZ2UgZGVmaW5l
ZCBieQotICAgICAqIFxhIHJhdGVfcmFuZ2UsIGFuZCB0aGUgPGVtPnBoYXNlIHByb2JhYmlsaXR5
IHZlY3RvcjwvZW0+IHBhcmFtZXRlciBpcwotICAgICAqIHNldCB0byB0aGUgZXF1YWwgcGhhc2Ug
cHJvYmFiaWxpdGllcyAoaS5lLiwgdG8gYSB2ZWN0b3Igb2YgdGhlIHNhbWUKLSAgICAgKiBsZW5n
dGggXGYka1xmJCBvZiB0aGUgPGVtPnJhdGUgdmVjdG9yPC9lbT4gYW5kIHdpdGggZWFjaCBlbGVt
ZW50IHNldAotICAgICAqIHRvIFxmJDEuMC9rXGYkKS4KLSAgICAgKgotICAgICAqIFx0cGFyYW0g
UmF0ZVJhbmdlVCBNdXN0IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiA8YSBocmVmPSJib29zdDov
bGlicy9yYW5nZS9kb2MvaHRtbC9yYW5nZS9jb25jZXB0cy5odG1sIj5SYW5nZTwvYT4gY29uY2Vw
dC4KLSAgICAgKgotICAgICAqIFxwYXJhbSByYXRlX3JhbmdlIFRoZSByYW5nZSBvZiBwb3NpdGl2
ZSByZWFsIGVsZW1lbnRzIHJlcHJlc2VudGluZyB0aGUgcmF0ZXMuCi0gICAgICovCi0gICAgcHVi
bGljOiB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmF0ZVJhbmdlVD4KLSAgICAgICAgICAgIGh5cGVyZXhw
b25lbnRpYWxfZGlzdHJpYnV0aW9uKFJhdGVSYW5nZVQgY29uc3QmIHJhdGVfcmFuZ2UpCi0gICAg
OiBkZF8oc3RkOjp2ZWN0b3I8UmVhbFQ+KGJvb3N0OjpzaXplKHJhdGVfcmFuZ2UpLCAxKSksCi0g
ICAgICByYXRlc18oYm9vc3Q6OmJlZ2luKHJhdGVfcmFuZ2UpLCBib29zdDo6ZW5kKHJhdGVfcmFu
Z2UpKQotICAgIHsKLSAgICAgICAgYXNzZXJ0KCBoeXBlcmV4cF9kZXRhaWw6OmNoZWNrX3BhcmFt
cyhkZF8ucHJvYmFiaWxpdGllcygpLCByYXRlc18pICk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAg
ICogQ29uc3RydWN0cyBhIFxjIGh5cGVyZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uIGZyb20gaXRz
IHBhcmFtZXRlcnMuCi0gICAgICoKLSAgICAgKiBccGFyYW0gcGFyYW0gVGhlIHBhcmFtZXRlcnMg
b2YgdGhlIGRpc3RyaWJ1dGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWM6IGV4cGxpY2l0IGh5cGVy
ZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uKHBhcmFtX3R5cGUgY29uc3QmIHBhcmFtKQotICAgIDog
ZGRfKHBhcmFtLnByb2JhYmlsaXRpZXMoKSksCi0gICAgICByYXRlc18ocGFyYW0ucmF0ZXMoKSkK
LSAgICB7Ci0gICAgICAgIGFzc2VydCggaHlwZXJleHBfZGV0YWlsOjpjaGVja19wYXJhbXMoZGRf
LnByb2JhYmlsaXRpZXMoKSwgcmF0ZXNfKSApOwotICAgIH0KLQotI2lmbmRlZiBCT09TVF9OT19D
WFgxMV9IRFJfSU5JVElBTElaRVJfTElTVAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBc
YyBoeXBlcmV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbiBmcm9tIHRoZSA8ZW0+cGhhc2UKLSAgICAg
KiBwcm9iYWJpbGl0eSB2ZWN0b3I8L2VtPiBhbmQgPGVtPnJhdGUgdmVjdG9yPC9lbT4gcGFyYW1l
dGVycyBvZiB0aGUKLSAgICAgKiBkaXN0cmlidXRpb24uCi0gICAgICoKLSAgICAgKiBUaGUgPGVt
PnBoYXNlIHByb2JhYmlsaXR5IHZlY3RvcjwvZW0+IHBhcmFtZXRlciBpcyBnaXZlbiBieSB0aGUK
LSAgICAgKiA8ZW0+YnJhY2UtaW5pdC1saXN0PC9lbT4gKElTTywyMDE0LHNlYy4gOC41LjQgW2Rj
bC5pbml0Lmxpc3RdKQotICAgICAqIGRlZmluZWQgYnkgXGEgbDEsIGFuZCB0aGUgPGVtPnJhdGUg
dmVjdG9yPC9lbT4gcGFyYW1ldGVyIGlzIGdpdmVuIGJ5IHRoZQotICAgICAqIDxlbT5icmFjZS1p
bml0LWxpc3Q8L2VtPiAoSVNPLDIwMTQsc2VjLiA4LjUuNCBbZGNsLmluaXQubGlzdF0pCi0gICAg
ICogZGVmaW5lZCBieSBcYSBsMi4KLSAgICAgKgotICAgICAqIFxwYXJhbSBsMSBUaGUgaW5pdGlh
bGl6ZXIgbGlzdCBmb3IgaW5pemlhbGl6aW5nIHRoZSBwaGFzZSBwcm9iYWJpbGl0eSB2ZWN0b3Iu
Ci0gICAgICogXHBhcmFtIGwyIFRoZSBpbml0aWFsaXplciBsaXN0IGZvciBpbml6aWFsaXppbmcg
dGhlIHJhdGUgdmVjdG9yLgotICAgICAqCi0gICAgICogUmVmZXJlbmNlczoKLSAgICAgKiAtIyBJ
U08sIDxlbT5JU08vSUVDIDE0ODgyLTIwMTQ6IEluZm9ybWF0aW9uIHRlY2hub2xvZ3kgLSBQcm9n
cmFtbWluZyBsYW5ndWFnZXMgLSBDKys8L2VtPiwgMjAxNAotICAgICAqIC4KLSAgICAgKi8KLSAg
ICBwdWJsaWM6IGh5cGVyZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uKHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxSZWFsVD4gY29uc3QmIGwxLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVhbFQ+IGNvbnN0
JiBsMikKLSAgICA6IGRkXyhsMS5iZWdpbigpLCBsMS5lbmQoKSksCi0gICAgICByYXRlc18obDIu
YmVnaW4oKSwgbDIuZW5kKCkpCi0gICAgewotICAgICAgICBhc3NlcnQoIGh5cGVyZXhwX2RldGFp
bDo6Y2hlY2tfcGFyYW1zKGRkXy5wcm9iYWJpbGl0aWVzKCksIHJhdGVzXykgKTsKLSAgICB9Ci0K
LSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgXGMgaHlwZXJleHBvbmVudGlhbF9kaXN0cmli
dXRpb24gZnJvbSB0aGUgPGVtPnJhdGUKLSAgICAgKiB2ZWN0b3I8L2VtPiBwYXJhbWV0ZXIgb2Yg
dGhlIGRpc3RyaWJ1dGlvbiBhbmQgd2l0aCBlcXVhbCBwaGFzZQotICAgICAqIHByb2JhYmlsaXRp
ZXMuCi0gICAgICoKLSAgICAgKiBUaGUgPGVtPnJhdGUgdmVjdG9yPC9lbT4gcGFyYW1ldGVyIGlz
IGdpdmVuIGJ5IHRoZQotICAgICAqIDxlbT5icmFjZS1pbml0LWxpc3Q8L2VtPiAoSVNPLDIwMTQs
c2VjLiA4LjUuNCBbZGNsLmluaXQubGlzdF0pCi0gICAgICogZGVmaW5lZCBieSBcYSBsMSwgYW5k
IHRoZSA8ZW0+cGhhc2UgcHJvYmFiaWxpdHkgdmVjdG9yPC9lbT4gcGFyYW1ldGVyIGlzCi0gICAg
ICogc2V0IHRvIHRoZSBlcXVhbCBwaGFzZSBwcm9iYWJpbGl0aWVzIChpLmUuLCB0byBhIHZlY3Rv
ciBvZiB0aGUgc2FtZQotICAgICAqIGxlbmd0aCBcZiRrXGYkIG9mIHRoZSA8ZW0+cmF0ZSB2ZWN0
b3I8L2VtPiBhbmQgd2l0aCBlYWNoIGVsZW1lbnQgc2V0Ci0gICAgICogdG8gXGYkMS4wL2tcZiQp
LgotICAgICAqCi0gICAgICogXHBhcmFtIGwxIFRoZSBpbml0aWFsaXplciBsaXN0IGZvciBpbml6
aWFsaXppbmcgdGhlIHJhdGUgdmVjdG9yLgotICAgICAqCi0gICAgICogUmVmZXJlbmNlczoKLSAg
ICAgKiAtIyBJU08sIDxlbT5JU08vSUVDIDE0ODgyLTIwMTQ6IEluZm9ybWF0aW9uIHRlY2hub2xv
Z3kgLSBQcm9ncmFtbWluZyBsYW5ndWFnZXMgLSBDKys8L2VtPiwgMjAxNAotICAgICAqIC4KLSAg
ICAgKi8KLSAgICBwdWJsaWM6IGh5cGVyZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxSZWFsVD4gY29uc3QmIGwxKQotICAgIDogZGRfKHN0ZDo6dmVjdG9yPFJl
YWxUPihzdGQ6OmRpc3RhbmNlKGwxLmJlZ2luKCksIGwxLmVuZCgpKSwgMSkpLAotICAgICAgcmF0
ZXNfKGwxLmJlZ2luKCksIGwxLmVuZCgpKQotICAgIHsKLSAgICAgICAgYXNzZXJ0KCBoeXBlcmV4
cF9kZXRhaWw6OmNoZWNrX3BhcmFtcyhkZF8ucHJvYmFiaWxpdGllcygpLCByYXRlc18pICk7Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICAvKioKLSAgICAgKiBHZXRzIGEgcmFuZG9tIHZhcmlhdGUgZGlz
dHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZQotICAgICAqIGh5cGVyZXhwb25lbnRpYWwgZGlzdHJp
YnV0aW9uLgotICAgICAqCi0gICAgICogXHRwYXJhbSBVUk5HIE11c3QgbWVldCB0aGUgcmVxdWly
ZW1lbnRzIG9mIFx1bmlmb3JtX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLgotICAgICAqCi0gICAg
ICogXHBhcmFtIHVybmcgQSB1bmlmb3JtIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdC4K
LSAgICAgKgotICAgICAqIFxyZXR1cm4gQSByYW5kb20gdmFyaWF0ZSBkaXN0cmlidXRlZCBhY2Nv
cmRpbmcgdG8gdGhlIGh5cGVyZXhwb25lbnRpYWwgZGlzdHJpYnV0aW9uLgotICAgICAqLwotICAg
IHB1YmxpYzogdGVtcGxhdGU8Y2xhc3MgVVJORz5cCi0gICAgICAgICAgICBSZWFsVCBvcGVyYXRv
cigpKFVSTkcmIHVybmcpIGNvbnN0Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgaSA9IGRkXyh1
cm5nKTsKLQotICAgICAgICByZXR1cm4gYm9vc3Q6OnJhbmRvbTo6ZXhwb25lbnRpYWxfZGlzdHJp
YnV0aW9uPFJlYWxUPihyYXRlc19baV0pKHVybmcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAq
IEdldHMgYSByYW5kb20gdmFyaWF0ZSBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIGh5cGVy
ZXhwb25lbnRpYWwKLSAgICAgKiBkaXN0cmlidXRpb24gd2l0aCBwYXJhbWV0ZXJzIHNwZWNpZmll
ZCBieSBcYyBwYXJhbS4KLSAgICAgKgotICAgICAqIFx0cGFyYW0gVVJORyBNdXN0IG1lZXQgdGhl
IHJlcXVpcmVtZW50cyBvZiBcdW5pZm9ybV9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci4KLSAgICAg
KgotICAgICAqIFxwYXJhbSB1cm5nIEEgdW5pZm9ybSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBv
YmplY3QuCi0gICAgICogXHBhcmFtIHBhcmFtIEEgZGlzdHJpYnV0aW9uIHBhcmFtZXRlciBvYmpl
Y3QuCi0gICAgICoKLSAgICAgKiBccmV0dXJuIEEgcmFuZG9tIHZhcmlhdGUgZGlzdHJpYnV0ZWQg
YWNjb3JkaW5nIHRvIHRoZSBoeXBlcmV4cG9uZW50aWFsIGRpc3RyaWJ1dGlvbi4KLSAgICAgKiAg
ZGlzdHJpYnV0aW9uIHdpdGggcGFyYW1ldGVycyBzcGVjaWZpZWQgYnkgXGMgcGFyYW0uCi0gICAg
ICovCi0gICAgcHVibGljOiB0ZW1wbGF0ZTxjbGFzcyBVUk5HPgotICAgICAgICAgICAgUmVhbFQg
b3BlcmF0b3IoKShVUk5HJiB1cm5nLCBjb25zdCBwYXJhbV90eXBlJiBwYXJhbSkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBoeXBlcmV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbihwYXJhbSko
dXJuZyk7Ci0gICAgfQotCi0gICAgLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiBwaGFzZXMgb2Yg
dGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICBwdWJsaWM6IHN0ZDo6c2l6ZV90IG51bV9waGFzZXMo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHJhdGVzXy5zaXplKCk7Ci0gICAgfQotCi0g
ICAgLyoqIFJldHVybnMgdGhlIDxlbT5waGFzZSBwcm9iYWJpbGl0eSB2ZWN0b3I8L2VtPiBwYXJh
bWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICBwdWJsaWM6IHN0ZDo6dmVjdG9yPFJl
YWxUPiBwcm9iYWJpbGl0aWVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBkZF8ucHJv
YmFiaWxpdGllcygpOwotICAgIH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSA8ZW0+cmF0ZSB2ZWN0
b3I8L2VtPiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICBwdWJsaWM6IHN0
ZDo6dmVjdG9yPFJlYWxUPiByYXRlcygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gcmF0
ZXNfOwotICAgIH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCB2YWx1ZSB0aGF0IHRo
ZSBkaXN0cmlidXRpb24gY2FuIHByb2R1Y2UuICovCi0gICAgcHVibGljOiBSZWFsVCBtaW4gQk9P
U1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQg
dGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4gKi8KLSAgICBwdWJsaWM6IFJlYWxUIG1heCBC
T09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8UmVhbFQ+OjppbmZpbml0eSgpOwotICAgIH0KLQot
ICAgIC8qKiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0g
ICAgcHVibGljOiBwYXJhbV90eXBlIHBhcmFtKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN0ZDo6
dmVjdG9yPFJlYWxUPiBwcm9icyA9IGRkXy5wcm9iYWJpbGl0aWVzKCk7Ci0KLSAgICAgICAgcmV0
dXJuIHBhcmFtX3R5cGUocHJvYnMuYmVnaW4oKSwgcHJvYnMuZW5kKCksIHJhdGVzXy5iZWdpbigp
LCByYXRlc18uZW5kKCkpOwotICAgIH0KLQotICAgIC8qKiBTZXRzIHRoZSBwYXJhbWV0ZXJzIG9m
IHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgcHVibGljOiB2b2lkIHBhcmFtKHBhcmFtX3R5cGUg
Y29uc3QmIHBhcmFtKQotICAgIHsKLSAgICAgICAgZGRfLnBhcmFtKHR5cGVuYW1lIGJvb3N0Ojpy
YW5kb206OmRpc2NyZXRlX2Rpc3RyaWJ1dGlvbjxpbnQsUmVhbFQ+OjpwYXJhbV90eXBlKHBhcmFt
LnByb2JhYmlsaXRpZXMoKSkpOwotICAgICAgICByYXRlc18gPSBwYXJhbS5yYXRlcygpOwotICAg
IH0KLQotICAgIC8qKgotICAgICAqIEVmZmVjdHM6IFN1YnNlcXVlbnQgdXNlcyBvZiB0aGUgZGlz
dHJpYnV0aW9uIGRvIG5vdCBkZXBlbmQKLSAgICAgKiBvbiB2YWx1ZXMgcHJvZHVjZWQgYnkgYW55
IGVuZ2luZSBwcmlvciB0byBpbnZva2luZyByZXNldC4KLSAgICAgKi8KLSAgICBwdWJsaWM6IHZv
aWQgcmVzZXQoKQotICAgIHsKLSAgICAgICAgLy8gZW1wdHkKLSAgICB9Ci0KLSAgICAvKiogV3Jp
dGVzIGFuIEBjIGh5cGVyZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uIHRvIGEgQGMgc3RkOjpvc3Ry
ZWFtLiAqLwotICAgIHB1YmxpYzogQk9PU1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09QRVJBVE9S
KG9zLCBoeXBlcmV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbiwgaGQpCi0gICAgewotICAgICAgICBv
cyA8PCBoZC5wYXJhbSgpOwotICAgICAgICByZXR1cm4gb3M7Ci0gICAgfQotCi0gICAgLyoqIFJl
YWRzIGFuIEBjIGh5cGVyZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uIGZyb20gYSBAYyBzdGQ6Omlz
dHJlYW0uICovCi0gICAgcHVibGljOiBCT09TVF9SQU5ET01fREVUQUlMX0lTVFJFQU1fT1BFUkFU
T1IoaXMsIGh5cGVyZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uLCBoZCkKLSAgICB7Ci0gICAgICAg
IHBhcmFtX3R5cGUgcGFyYW07Ci0gICAgICAgIGlmKGlzID4+IHBhcmFtKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBoZC5wYXJhbShwYXJhbSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlz
OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGluc3Rh
bmNlcyBvZiBAYyBoeXBlcmV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbiB3aWxsCi0gICAgICogcmV0
dXJuIGlkZW50aWNhbCBzZXF1ZW5jZXMgb2YgdmFsdWVzIGdpdmVuIGVxdWFsIGdlbmVyYXRvcnMu
Ci0gICAgICovCi0gICAgcHVibGljOiBCT09TVF9SQU5ET01fREVUQUlMX0VRVUFMSVRZX09QRVJB
VE9SKGh5cGVyZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uLCBsaHMsIHJocykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBsaHMuZGRfID09IHJocy5kZF8KLSAgICAgICAgICAgICAgICYmIGxocy5yYXRl
c18gPT0gcmhzLnJhdGVzXzsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0
cnVlIGlmIHRoZSB0d28gaW5zdGFuY2VzIG9mIEBjIGh5cGVyZXhwb25lbnRpYWxfZGlzdHJpYnV0
aW9uIHdpbGwKLSAgICAgKiByZXR1cm4gZGlmZmVyZW50IHNlcXVlbmNlcyBvZiB2YWx1ZXMgZ2l2
ZW4gZXF1YWwgZ2VuZXJhdG9ycy4KLSAgICAgKi8KLSAgICBwdWJsaWM6IEJPT1NUX1JBTkRPTV9E
RVRBSUxfSU5FUVVBTElUWV9PUEVSQVRPUihoeXBlcmV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbikK
LQotCi0gICAgcHJpdmF0ZTogYm9vc3Q6OnJhbmRvbTo6ZGlzY3JldGVfZGlzdHJpYnV0aW9uPGlu
dCxSZWFsVD4gZGRfOyAvLy88IFRoZSBcYyBkaXNjcmV0ZV9kaXN0cmlidXRpb24gdXNlZCB0byBz
YW1wbGUgdGhlIHBoYXNlIHByb2JhYmlsaXR5IGFuZCBjaG9vc2UgdGhlIHJhdGUKLSAgICBwcml2
YXRlOiBzdGQ6OnZlY3RvcjxSZWFsVD4gcmF0ZXNfOyAvLy88IFRoZSA8ZW0+cmF0ZSB2ZWN0b3I8
L2VtPiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbgotfTsgLy8gaHlwZXJleHBvbmVudGlh
bF9kaXN0cmlidXRpb24KLQotfX0gLy8gbmFtZXNwYWNlIGJvb3N0OjpyYW5kb20KLQotCi0jZW5k
aWYgLy8gQk9PU1RfUkFORE9NX0hZUEVSRVhQT05FTlRJQUxfRElTVFJJQlVUSU9OX0hQUApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9t
L2luZGVwZW5kZW50X2JpdHMuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcmFuZG9tL2luZGVwZW5kZW50X2JpdHMuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkZWM2M2IzZjQ2ZDZlMjViNWJiOTdmOGVhNjhjOGU2ZjI3NmEzODk0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9pbmRlcGVuZGVudF9iaXRzLmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCwwIEBACi0vKiBib29zdCByYW5kb20vaW5kZXBlbmRl
bnRfYml0cy5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgU3RldmVuIFdhdGFuYWJl
IDIwMTEKLSAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4gKFNlZQotICogYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9y
IGNvcHkgYXQKLSAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqCi0g
KiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVk
aW5nIGRvY3VtZW50YXRpb24uCi0gKgotICogJElkJAotICoKLSAqLwotCi0jaWZuZGVmIEJPT1NU
X1JBTkRPTV9JTkRFUEVOREVOVF9CSVRTX0hQUAotI2RlZmluZSBCT09TVF9SQU5ET01fSU5ERVBF
TkRFTlRfQklUU19IUFAKLQotI2luY2x1ZGUgPGlzdHJlYW0+Ci0jaW5jbHVkZSA8aW9zZndkPgot
I2luY2x1ZGUgPGJvb3N0L2Fzc2VydC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbGltaXRzLmhwcD4K
LSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2NzdGRpbnQuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L2ludGVnZXIvaW50ZWdlcl9tYXNrLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9yYW5kb20vdHJhaXRzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2Nv
bmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9pbnRlZ2VyX2xvZzIuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvb3BlcmF0b3JzLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9yYW5kb20vZGV0YWlsL3NlZWQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9k
ZXRhaWwvc2VlZF9pbXBsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL3NpZ25l
ZF91bnNpZ25lZF90b29scy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgcmFu
ZG9tIHsKLQotLyoqCi0gKiBBbiBpbnN0YW50aWF0aW9uIG9mIGNsYXNzIHRlbXBsYXRlIEBjIGlu
ZGVwZW5kZW50X2JpdHNfZW5naW5lCi0gKiBtb2RlbCBhIFxwc2V1ZG9fcmFuZG9tX251bWJlcl9n
ZW5lcmF0b3IuICBJdCBnZW5lcmF0ZXMgcmFuZG9tCi0gKiBudW1iZXJzIGRpc3RyaWJ1dGVkIGJl
dHdlZW4gWzAsIDJedykgYnkgY29tYmluaW5nIG9uZSBvcgotICogbW9yZSBpbnZvY2F0aW9ucyBv
ZiB0aGUgYmFzZSBlbmdpbmUuCi0gKgotICogUmVxdWlyZXM6IDAgPCB3IDw9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8VUludFR5cGU+OjpkaWdpdHMKLSAqLwotdGVtcGxhdGU8Y2xhc3MgRW5naW5lLCBz
dGQ6OnNpemVfdCB3LCBjbGFzcyBVSW50VHlwZT4KLWNsYXNzIGluZGVwZW5kZW50X2JpdHNfZW5n
aW5lCi17Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBFbmdpbmUgYmFzZV90eXBlOwotICAgIHR5cGVk
ZWYgVUludFR5cGUgcmVzdWx0X3R5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBFbmdpbmU6OnJl
c3VsdF90eXBlIGJhc2VfcmVzdWx0X3R5cGU7Ci0KLSAgICAvLyBSZXF1aXJlZCBieSBvbGQgQm9v
c3QuUmFuZG9tIGNvbmNlcHQKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgaGFzX2Zp
eGVkX3JhbmdlID0gZmFsc2UpOwotCi0gICAgLyoqIFJldHVybnMgdGhlIHNtYWxsZXN0IHZhbHVl
IHRoYXQgdGhlIGdlbmVyYXRvciBjYW4gcHJvZHVjZS4gKi8KLSAgICBzdGF0aWMgcmVzdWx0X3R5
cGUgbWluIEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpCi0gICAgeyByZXR1cm4g
MDsgfQotICAgIC8qKiBSZXR1cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgdGhlIGdlbmVyYXRv
ciBjYW4gcHJvZHVjZS4gKi8KLSAgICBzdGF0aWMgcmVzdWx0X3R5cGUgbWF4IEJPT1NUX1BSRVZF
TlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpCi0gICAgeyByZXR1cm4gbWF4X2ltcChib29zdDo6aXNf
aW50ZWdyYWw8VUludFR5cGU+KCkpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFu
IEBjIGluZGVwZW5kZW50X2JpdHNfZW5naW5lIHVzaW5nIHRoZQotICAgICAqIGRlZmF1bHQgY29u
c3RydWN0b3Igb2YgdGhlIGJhc2UgZ2VuZXJhdG9yLgotICAgICAqLwotICAgIGluZGVwZW5kZW50
X2JpdHNfZW5naW5lKCkgeyB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIEBjIGlu
ZGVwZW5kZW50X2JpdHNfZW5naW5lLCB1c2luZyBzZWVkIGFzCi0gICAgICogdGhlIGNvbnN0cnVj
dG9yIGFyZ3VtZW50IGZvciBib3RoIGJhc2UgZ2VuZXJhdG9ycy4KLSAgICAgKi8KLSAgICBCT09T
VF9SQU5ET01fREVUQUlMX0FSSVRITUVUSUNfQ09OU1RSVUNUT1IoaW5kZXBlbmRlbnRfYml0c19l
bmdpbmUsCi0gICAgICAgIGJhc2VfcmVzdWx0X3R5cGUsIHNlZWRfYXJnKQotICAgIHsKLSAgICAg
ICAgX2Jhc2Uuc2VlZChzZWVkX2FyZyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3Ry
dWN0cyBhbiBAYyBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSwgdXNpbmcgc2VxIGFzCi0gICAgICog
dGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50IGZvciB0aGUgYmFzZSBnZW5lcmF0b3IuCi0gICAgICov
Ci0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9TRUVEX1NFUV9DT05TVFJVQ1RPUihpbmRlcGVuZGVu
dF9iaXRzX2VuZ2luZSwKLSAgICAgICAgU2VlZFNlcSwgc2VxKQotICAgIHsgX2Jhc2Uuc2VlZChz
ZXEpOyB9Ci0KLSAgICAvKiogQ29uc3RydWN0cyBhbiBAYyBpbmRlcGVuZGVudF9iaXRzX2VuZ2lu
ZSBieSBjb3B5aW5nIEBjIGJhc2UuICovCi0gICAgaW5kZXBlbmRlbnRfYml0c19lbmdpbmUoY29u
c3QgYmFzZV90eXBlJiBiYXNlX2FyZykgOiBfYmFzZShiYXNlX2FyZykge30KLQotICAgIC8qKgot
ICAgICAqIENvbnRydWN0cyBhbiBAYyBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSB3aXRoCi0gICAg
ICogdmFsdWVzIGZyb20gdGhlIHJhbmdlIGRlZmluZWQgYnkgdGhlIGlucHV0IGl0ZXJhdG9ycyBm
aXJzdAotICAgICAqIGFuZCBsYXN0LiAgZmlyc3Qgd2lsbCBiZSBtb2RpZmllZCB0byBwb2ludCB0
byB0aGUgZWxlbWVudAotICAgICAqIGFmdGVyIHRoZSBsYXN0IG9uZSB1c2VkLgotICAgICAqCi0g
ICAgICogVGhyb3dzOiBAYyBzdGQ6OmludmFsaWRfYXJndW1lbnQgaWYgdGhlIGlucHV0IHJhbmdl
IGlzIHRvbyBzbWFsbC4KLSAgICAgKgotICAgICAqIEV4Y2VwdGlvbiBTYWZldHk6IEJhc2ljCi0g
ICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+Ci0gICAgaW5kZXBlbmRlbnRfYml0c19lbmdp
bmUoSXQmIGZpcnN0LCBJdCBsYXN0KSA6IF9iYXNlKGZpcnN0LCBsYXN0KSB7IH0KLQotICAgIC8q
KgotICAgICAqIFNlZWRzIGFuIEBjIGluZGVwZW5kZW50X2JpdHNfZW5naW5lIHVzaW5nIHRoZSBk
ZWZhdWx0Ci0gICAgICogc2VlZCBvZiB0aGUgYmFzZSBnZW5lcmF0b3IuCi0gICAgICovCi0gICAg
dm9pZCBzZWVkKCkgeyBfYmFzZS5zZWVkKCk7IH0KLQotICAgIC8qKgotICAgICAqIFNlZWRzIGFu
IEBjIGluZGVwZW5kZW50X2JpdHNfZW5naW5lLCB1c2luZyBAYyBzZWVkIGFzIHRoZQotICAgICAq
IHNlZWQgZm9yIHRoZSBiYXNlIGdlbmVyYXRvci4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01f
REVUQUlMX0FSSVRITUVUSUNfU0VFRChpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSwKLSAgICAgICAg
YmFzZV9yZXN1bHRfdHlwZSwgc2VlZF9hcmcpCi0gICAgeyBfYmFzZS5zZWVkKHNlZWRfYXJnKTsg
fQotCi0gICAgLyoqCi0gICAgICogU2VlZHMgYW4gQGMgaW5kZXBlbmRlbnRfYml0c19lbmdpbmUs
IHVzaW5nIEBjIHNlcSB0bwotICAgICAqIHNlZWQgdGhlIGJhc2UgZ2VuZXJhdG9yLgotICAgICAq
LwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfU0VFRF9TRVFfU0VFRChpbmRlcGVuZGVudF9iaXRz
X2VuZ2luZSwKLSAgICAgICAgU2VlZFNlcSwgc2VxKQotICAgIHsgX2Jhc2Uuc2VlZChzZXEpOyB9
Ci0KLSAgICAvKioKLSAgICAgKiBTZWVkcyBhbiBAYyBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSB3
aXRoCi0gICAgICogdmFsdWVzIGZyb20gdGhlIHJhbmdlIGRlZmluZWQgYnkgdGhlIGlucHV0IGl0
ZXJhdG9ycyBmaXJzdAotICAgICAqIGFuZCBsYXN0LiAgZmlyc3Qgd2lsbCBiZSBtb2RpZmllZCB0
byBwb2ludCB0byB0aGUgZWxlbWVudAotICAgICAqIGFmdGVyIHRoZSBsYXN0IG9uZSB1c2VkLgot
ICAgICAqCi0gICAgICogVGhyb3dzOiBAYyBzdGQ6OmludmFsaWRfYXJndW1lbnQgaWYgdGhlIGlu
cHV0IHJhbmdlIGlzIHRvbyBzbWFsbC4KLSAgICAgKgotICAgICAqIEV4Y2VwdGlvbiBTYWZldHk6
IEJhc2ljCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+IHZvaWQgc2VlZChJdCYgZmly
c3QsIEl0IGxhc3QpCi0gICAgeyBfYmFzZS5zZWVkKGZpcnN0LCBsYXN0KTsgfQotCi0gICAgLyoq
IFJldHVybnMgdGhlIG5leHQgdmFsdWUgb2YgdGhlIGdlbmVyYXRvci4gKi8KLSAgICByZXN1bHRf
dHlwZSBvcGVyYXRvcigpKCkKLSAgICB7Ci0gICAgICAgIC8vIFdoaWxlIGl0IG1heSBzZWVtIHdh
c3RlZnVsIHRvIHJlY2FsY3VsYXRlIHRoaXMKLSAgICAgICAgLy8gZXZlcnkgdGltZSwgYm90aCBt
c3ZjIGFuZCBnY2MgY2FuIHByb3BhZ2F0ZQotICAgICAgICAvLyBjb25zdGFudHMsIHJlc29sdmlu
ZyB0aGlzIGF0IGNvbXBpbGUgdGltZS4KLSAgICAgICAgYmFzZV91bnNpZ25lZCByYW5nZSA9Ci0g
ICAgICAgICAgICBkZXRhaWw6OnN1YnRyYWN0PGJhc2VfcmVzdWx0X3R5cGU+KCkoKF9iYXNlLm1h
eCkoKSwgKF9iYXNlLm1pbikoKSk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG0gPQotICAgICAgICAg
ICAgKHJhbmdlID09IChzdGQ6Om51bWVyaWNfbGltaXRzPGJhc2VfdW5zaWduZWQ+OjptYXgpKCkp
ID8KLSAgICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPGJhc2VfdW5zaWduZWQ+Ojpk
aWdpdHMgOgotICAgICAgICAgICAgICAgIGRldGFpbDo6aW50ZWdlcl9sb2cyKHJhbmdlICsgMSk7
Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG4gPSAodyArIG0gLSAxKSAvIG07Ci0gICAgICAgIHN0ZDo6
c2l6ZV90IHcwLCBuMDsKLSAgICAgICAgYmFzZV91bnNpZ25lZCB5MCwgeTE7Ci0gICAgICAgIGJh
c2VfdW5zaWduZWQgeTBfbWFzaywgeTFfbWFzazsKLSAgICAgICAgY2FsY19wYXJhbXMobiwgcmFu
Z2UsIHcwLCBuMCwgeTAsIHkxLCB5MF9tYXNrLCB5MV9tYXNrKTsKLSAgICAgICAgaWYoYmFzZV91
bnNpZ25lZChyYW5nZSAtIHkwICsgMSkgPiB5MCAvIG4pIHsKLSAgICAgICAgICAgIC8vIGluY3Jl
bWVudCBuIGFuZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICArK247Ci0gICAgICAgICAgICBjYWxj
X3BhcmFtcyhuLCByYW5nZSwgdzAsIG4wLCB5MCwgeTEsIHkwX21hc2ssIHkxX21hc2spOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQk9PU1RfQVNTRVJUKG4wKncwICsgKG4gLSBuMCkqKHcwICsgMSkg
PT0gdyk7Ci0KLSAgICAgICAgcmVzdWx0X3R5cGUgUyA9IDA7Ci0gICAgICAgIGZvcihzdGQ6OnNp
emVfdCBrID0gMDsgayA8IG4wOyArK2spIHsKLSAgICAgICAgICAgIGJhc2VfdW5zaWduZWQgdTsK
LSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICB1ID0gZGV0YWlsOjpzdWJ0cmFjdDxi
YXNlX3Jlc3VsdF90eXBlPigpKF9iYXNlKCksIChfYmFzZS5taW4pKCkpOwotICAgICAgICAgICAg
fSB3aGlsZSh1ID4gYmFzZV91bnNpZ25lZCh5MCAtIDEpKTsKLSAgICAgICAgICAgIFMgPSAoUyA8
PCB3MCkgKyAodSAmIHkwX21hc2spOwotICAgICAgICB9Ci0gICAgICAgIGZvcihzdGQ6OnNpemVf
dCBrID0gMDsgayA8IChuIC0gbjApOyArK2spIHsKLSAgICAgICAgICAgIGJhc2VfdW5zaWduZWQg
dTsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICB1ID0gZGV0YWlsOjpzdWJ0cmFj
dDxiYXNlX3Jlc3VsdF90eXBlPigpKF9iYXNlKCksIChfYmFzZS5taW4pKCkpOwotICAgICAgICAg
ICAgfSB3aGlsZSh1ID4gYmFzZV91bnNpZ25lZCh5MSAtIDEpKTsKLSAgICAgICAgICAgIFMgPSAo
UyA8PCAodzAgKyAxKSkgKyAodSAmIHkxX21hc2spOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBTOwotICAgIH0KLSAgCi0gICAgLyoqIEZpbGxzIGEgcmFuZ2Ugd2l0aCByYW5kb20gdmFsdWVz
ICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgSXRlcj4KLSAgICB2b2lkIGdlbmVyYXRlKEl0ZXIgZmly
c3QsIEl0ZXIgbGFzdCkKLSAgICB7IGRldGFpbDo6Z2VuZXJhdGVfZnJvbV9pbnQoKnRoaXMsIGZp
cnN0LCBsYXN0KTsgfQotCi0gICAgLyoqIEFkdmFuY2VzIHRoZSBzdGF0ZSBvZiB0aGUgZ2VuZXJh
dG9yIGJ5IEBjIHouICovCi0gICAgdm9pZCBkaXNjYXJkKGJvb3N0Ojp1aW50bWF4X3QgeikKLSAg
ICB7Ci0gICAgICAgIGZvcihib29zdDo6dWludG1heF90IGkgPSAwOyBpIDwgejsgKytpKSB7Ci0g
ICAgICAgICAgICAoKnRoaXMpKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBiYXNl
X3R5cGUmIGJhc2UoKSBjb25zdCB7IHJldHVybiBfYmFzZTsgfQotCi0gICAgLyoqCi0gICAgICog
V3JpdGVzIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIGlmIHRoZSBnZW5lcmF0b3IgdG8gYSBA
YyBzdGQ6Om9zdHJlYW0uCi0gICAgICogVGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhl
IGVuZ2luZSBpcyB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbgotICAgICAqIG9mIHRoZSBiYXNl
IGVuZ2luZS4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX09TVFJFQU1fT1BFUkFU
T1Iob3MsIGluZGVwZW5kZW50X2JpdHNfZW5naW5lLCByKQotICAgIHsKLSAgICAgICAgb3MgPDwg
ci5fYmFzZTsKLSAgICAgICAgcmV0dXJuIG9zOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJl
YWRzIHRoZSBzdGF0ZSBvZiBhbiBAYyBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSBmcm9tIGEKLSAg
ICAgKiBAYyBzdGQ6OmlzdHJlYW0uCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9J
U1RSRUFNX09QRVJBVE9SKGlzLCBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSwgcikKLSAgICB7Ci0g
ICAgICAgIGlzID4+IHIuX2Jhc2U7Ci0gICAgICAgIHJldHVybiBpczsKLSAgICB9Ci0KLSAgICAv
KioKLSAgICAgKiBSZXR1cm5zOiB0cnVlIGlmZiB0aGUgdHdvIEBjIGluZGVwZW5kZW50X2JpdHNf
ZW5naW5lcyB3aWxsCi0gICAgICogcHJvZHVjZSB0aGUgc2FtZSBzZXF1ZW5jZSBvZiB2YWx1ZXMu
Ci0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElUWV9PUEVSQVRPUihpbmRl
cGVuZGVudF9iaXRzX2VuZ2luZSwgeCwgeSkKLSAgICB7IHJldHVybiB4Ll9iYXNlID09IHkuX2Jh
c2U7IH0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zOiB0cnVlIGlmZiB0aGUgdHdvIEBjIGluZGVw
ZW5kZW50X2JpdHNfZW5naW5lcyB3aWxsCi0gICAgICogcHJvZHVjZSBkaWZmZXJlbnQgc2VxdWVu
Y2VzIG9mIHZhbHVlcy4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0lORVFVQUxJ
VFlfT1BFUkFUT1IoaW5kZXBlbmRlbnRfYml0c19lbmdpbmUpCi0KLXByaXZhdGU6Ci0KLSAgICAv
Ly8gXGNvbmQgc2hvd19wcml2YXRlCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6cmFuZG9t
Ojp0cmFpdHM6Om1ha2VfdW5zaWduZWQ8YmFzZV9yZXN1bHRfdHlwZT46OnR5cGUgYmFzZV91bnNp
Z25lZDsKLQotICAgIHN0YXRpYyBVSW50VHlwZSBtYXhfaW1wKGNvbnN0IGJvb3N0Ojp0cnVlX3R5
cGUmKQotICAgIHsKLSAgICAgICByZXR1cm4gYm9vc3Q6Omxvd19iaXRzX21hc2tfdDx3Pjo6c2ln
X2JpdHM7Ci0gICAgfQotICAgIHN0YXRpYyBVSW50VHlwZSBtYXhfaW1wKGNvbnN0IGJvb3N0Ojpm
YWxzZV90eXBlJikKLSAgICB7Ci0gICAgICAgLy8gV2UgaGF2ZSBhIG11bHRpcHJlY2lzaW9uIGlu
dGVnZXIgdHlwZToKLSAgICAgICBCT09TVF9TVEFUSUNfQVNTRVJUKHN0ZDo6bnVtZXJpY19saW1p
dHM8VUludFR5cGU+Ojppc19zcGVjaWFsaXplZCk7Ci0gICAgICAgcmV0dXJuIHcgPCBzdGQ6Om51
bWVyaWNfbGltaXRzPFVJbnRUeXBlPjo6ZGlnaXRzID8gVUludFR5cGUoKFVJbnRUeXBlKDEpIDw8
IHcpIC0gMSkgOiBVSW50VHlwZSgoKChVSW50VHlwZSgxKSA8PCAodyAtIDEpKSAtIDEpIDw8IDEp
IHwgMXUpOwotICAgIH0KLQotICAgIHZvaWQgY2FsY19wYXJhbXMoCi0gICAgICAgIHN0ZDo6c2l6
ZV90IG4sIGJhc2VfdW5zaWduZWQgcmFuZ2UsCi0gICAgICAgIHN0ZDo6c2l6ZV90JiB3MCwgc3Rk
OjpzaXplX3QmIG4wLAotICAgICAgICBiYXNlX3Vuc2lnbmVkJiB5MCwgYmFzZV91bnNpZ25lZCYg
eTEsCi0gICAgICAgIGJhc2VfdW5zaWduZWQmIHkwX21hc2ssIGJhc2VfdW5zaWduZWQmIHkxX21h
c2spCi0gICAgewotICAgICAgICBCT09TVF9BU1NFUlQodyA+PSBuKTsKLSAgICAgICAgdzAgPSB3
L247Ci0gICAgICAgIG4wID0gbiAtIHcgJSBuOwotICAgICAgICB5MF9tYXNrID0gKGJhc2VfdW5z
aWduZWQoMikgPDwgKHcwIC0gMSkpIC0gMTsKLSAgICAgICAgeTFfbWFzayA9ICh5MF9tYXNrIDw8
IDEpIHwgMTsKLSAgICAgICAgeTAgPSAocmFuZ2UgKyAxKSAmIH55MF9tYXNrOwotICAgICAgICB5
MSA9IChyYW5nZSArIDEpICYgfnkxX21hc2s7Ci0gICAgICAgIEJPT1NUX0FTU0VSVCh5MCAhPSAw
IHx8IGJhc2VfdW5zaWduZWQocmFuZ2UgKyAxKSA9PSAwKTsKLSAgICB9Ci0gICAgLy8vIFxlbmRj
b25kCi0KLSAgICBFbmdpbmUgX2Jhc2U7Ci19OwotCi0jaWZuZGVmIEJPT1NUX05PX0lOQ0xBU1Nf
TUVNQkVSX0lOSVRJQUxJWkFUSU9OCi10ZW1wbGF0ZTxjbGFzcyBFbmdpbmUsIHN0ZDo6c2l6ZV90
IHcsIGNsYXNzIFVJbnRUeXBlPgotY29uc3QgYm9vbCBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZTxF
bmdpbmUsIHcsIFVJbnRUeXBlPjo6aGFzX2ZpeGVkX3JhbmdlOwotI2VuZGlmCi0KLX0gLy8gbmFt
ZXNwYWNlIHJhbmRvbQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1JB
TkRPTV9JTkRFUEVOREVOVF9CSVRTX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2ludmVyc2l2ZV9jb25ncnVlbnRpYWwuaHBw
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2ludmVy
c2l2ZV9jb25ncnVlbnRpYWwuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzI5
YzBkYjNhOTA5YjlmNzU1MTY5MjE4NDU0N2VlODk1MWZkNTNkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3JhbmRvbS9pbnZlcnNpdmVfY29uZ3J1ZW50aWFsLmhwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKiBib29zdCByYW5kb20vaW52ZXJzaXZlX2NvbmdydWVu
dGlhbC5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgSmVucyBNYXVyZXIgMjAwMC0y
MDAxCi0gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVy
c2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICog
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGlu
ZyBkb2N1bWVudGF0aW9uLgotICoKLSAqICRJZCQKLSAqCi0gKiBSZXZpc2lvbiBoaXN0b3J5Ci0g
KiAgMjAwMS0wMi0xOCAgbW92ZWQgdG8gaW5kaXZpZHVhbCBoZWFkZXIgZmlsZXMKLSAqLwotCi0j
aWZuZGVmIEJPT1NUX1JBTkRPTV9JTlZFUlNJVkVfQ09OR1JVRU5USUFMX0hQUAotI2RlZmluZSBC
T09TVF9SQU5ET01fSU5WRVJTSVZFX0NPTkdSVUVOVElBTF9IUFAKLQotI2luY2x1ZGUgPGlvc2Z3
ZD4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0jaW5jbHVkZSA8Ym9vc3QvYXNzZXJ0LmhwcD4KLSNp
bmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2NzdGRpbnQuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L2ludGVnZXIvc3RhdGljX2xvZzIuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L3JhbmRvbS9kZXRhaWwvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWls
L2NvbnN0X21vZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9zZWVkLmhwcD4K
LSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL29wZXJhdG9ycy5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvcmFuZG9tL2RldGFpbC9zZWVkX2ltcGwuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvcmFu
ZG9tL2RldGFpbC9kaXNhYmxlX3dhcm5pbmdzLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5h
bWVzcGFjZSByYW5kb20gewotCi0vLyBFaWNoZW5hdWVyIGFuZCBMZWhuIDE5ODYKLS8qKgotICog
SW5zdGFudGlhdGlvbnMgb2YgY2xhc3MgdGVtcGxhdGUgQGMgaW52ZXJzaXZlX2NvbmdydWVudGlh
bF9lbmdpbmUgbW9kZWwgYQotICogXHBzZXVkb19yYW5kb21fbnVtYmVyX2dlbmVyYXRvci4gSXQg
dXNlcyB0aGUgaW52ZXJzaXZlIGNvbmdydWVudGlhbAotICogYWxnb3JpdGhtIChJQ0cpIGRlc2Ny
aWJlZCBpbgotICoKLSAqICBAYmxvY2txdW90ZQotICogICJJbnZlcnNpdmUgcHNldWRvcmFuZG9t
IG51bWJlciBnZW5lcmF0b3JzOiBjb25jZXB0cywgcmVzdWx0cyBhbmQgbGlua3MiLAotICogIFBl
dGVyIEhlbGxla2FsZWssIEluOiAiUHJvY2VlZGluZ3Mgb2YgdGhlIDE5OTUgV2ludGVyIFNpbXVs
YXRpb24KLSAqICBDb25mZXJlbmNlIiwgQy4gQWxleG9wb3Vsb3MsIEsuIEthbmcsIFcuUi4gTGls
ZWdkb24sIGFuZCBELiBHb2xkc21hbgotICogIChlZGl0b3JzKSwgMTk5NSwgcHAuIDI1NS0yNjIu
IGZ0cDovL3JhbmRvbS5tYXQuc2JnLmFjLmF0L3B1Yi9kYXRhL3dzYzk1LnBzCi0gKiAgQGVuZGJs
b2NrcXVvdGUKLSAqCi0gKiBUaGUgb3V0cHV0IHNlcXVlbmNlIGlzIGRlZmluZWQgYnkgeChuKzEp
ID0gKGEqaW52KHgobikpIC0gYikgKG1vZCBwKSwKLSAqIHdoZXJlIHgoMCksIGEsIGIsIGFuZCB0
aGUgcHJpbWUgbnVtYmVyIHAgYXJlIHBhcmFtZXRlcnMgb2YgdGhlIGdlbmVyYXRvci4KLSAqIFRo
ZSBleHByZXNzaW9uIGludihrKSBkZW5vdGVzIHRoZSBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG9m
IGsgaW4gdGhlCi0gKiBmaWVsZCBvZiBpbnRlZ2VyIG51bWJlcnMgbW9kdWxvIHAsIHdpdGggaW52
KDApIDo9IDAuCi0gKgotICogVGhlIHRlbXBsYXRlIHBhcmFtZXRlciBJbnRUeXBlIHNoYWxsIGRl
bm90ZSBhIHNpZ25lZCBpbnRlZ3JhbCB0eXBlIGxhcmdlCi0gKiBlbm91Z2ggdG8gaG9sZCBwOyBh
LCBiLCBhbmQgcCBhcmUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGdlbmVyYXRvcnMuIFRoZQotICog
dGVtcGxhdGUgcGFyYW1ldGVyIHZhbCBpcyB0aGUgdmFsaWRhdGlvbiB2YWx1ZSBjaGVja2VkIGJ5
IHZhbGlkYXRpb24uCi0gKgotICogQHhtbG5vdGUKLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBjdXJy
ZW50bHkgdXNlcyB0aGUgRXVjbGlkaWFuIEFsZ29yaXRobSB0byBjb21wdXRlCi0gKiB0aGUgbXVs
dGlwbGljYXRpdmUgaW52ZXJzZS4gVGhlcmVmb3JlLCB0aGUgaW52ZXJzaXZlIGdlbmVyYXRvcnMg
YXJlIGFib3V0Ci0gKiAxMC0yMCB0aW1lcyBzbG93ZXIgdGhhbiB0aGUgb3RoZXJzIChzZWUgc2Vj
dGlvbiJwZXJmb3JtYW5jZSIpLiBIb3dldmVyLAotICogdGhlIHBhcGVyIHRhbGtzIG9mIG9ubHkg
M3ggc2xvd2Rvd24sIHNvIHRoZSBFdWNsaWRpYW4gQWxnb3JpdGhtIGlzIHByb2JhYmx5Ci0gKiBu
b3Qgb3B0aW1hbCBmb3IgY2FsY3VsYXRpbmcgdGhlIG11bHRpcGxpY2F0aXZlIGludmVyc2UuCi0g
KiBAZW5keG1sbm90ZQotICovCi10ZW1wbGF0ZTxjbGFzcyBJbnRUeXBlLCBJbnRUeXBlIGEsIElu
dFR5cGUgYiwgSW50VHlwZSBwPgotY2xhc3MgaW52ZXJzaXZlX2NvbmdydWVudGlhbF9lbmdpbmUK
LXsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEludFR5cGUgcmVzdWx0X3R5cGU7Ci0gICAgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKGJvb2wsIGhhc19maXhlZF9yYW5nZSA9IGZhbHNlKTsKLQotICAgIEJP
T1NUX1NUQVRJQ19DT05TVEFOVChyZXN1bHRfdHlwZSwgbXVsdGlwbGllciA9IGEpOwotICAgIEJP
T1NUX1NUQVRJQ19DT05TVEFOVChyZXN1bHRfdHlwZSwgaW5jcmVtZW50ID0gYik7Ci0gICAgQk9P
U1RfU1RBVElDX0NPTlNUQU5UKHJlc3VsdF90eXBlLCBtb2R1bHVzID0gcCk7Ci0gICAgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKEludFR5cGUsIGRlZmF1bHRfc2VlZCA9IDEpOwotCi0gICAgc3RhdGlj
IHJlc3VsdF90eXBlIG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKSB7IHJl
dHVybiBiID09IDAgPyAxIDogMDsgfQotICAgIHN0YXRpYyByZXN1bHRfdHlwZSBtYXggQk9PU1Rf
UFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgeyByZXR1cm4gcC0xOyB9Ci0gICAgCi0gICAg
LyoqCi0gICAgICogQ29uc3RydWN0cyBhbiBAYyBpbnZlcnNpdmVfY29uZ3J1ZW50aWFsX2VuZ2lu
ZSwgc2VlZGluZyBpdCB3aXRoCi0gICAgICogdGhlIGRlZmF1bHQgc2VlZC4KLSAgICAgKi8KLSAg
ICBpbnZlcnNpdmVfY29uZ3J1ZW50aWFsX2VuZ2luZSgpIHsgc2VlZCgpOyB9Ci0KLSAgICAvKioK
LSAgICAgKiBDb25zdHJ1Y3RzIGFuIEBjIGludmVyc2l2ZV9jb25ncnVlbnRpYWxfZW5naW5lLCBz
ZWVkaW5nIGl0IHdpdGggQGMgeDAuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9B
UklUSE1FVElDX0NPTlNUUlVDVE9SKGludmVyc2l2ZV9jb25ncnVlbnRpYWxfZW5naW5lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRUeXBlLCB4MCkK
LSAgICB7IHNlZWQoeDApOyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhbiBA
YyBpbnZlcnNpdmVfY29uZ3J1ZW50aWFsX2VuZ2luZSwgc2VlZGluZyBpdCB3aXRoIHZhbHVlcwot
ICAgICAqIHByb2R1Y2VkIGJ5IGEgY2FsbCB0byBAYyBzZXEuZ2VuZXJhdGUoKS4KLSAgICAgKi8K
LSAgICBCT09TVF9SQU5ET01fREVUQUlMX1NFRURfU0VRX0NPTlNUUlVDVE9SKGludmVyc2l2ZV9j
b25ncnVlbnRpYWxfZW5naW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2VlZFNlcSwgc2VxKQotICAgIHsgc2VlZChzZXEpOyB9Ci0gICAgCi0gICAgLyoq
Ci0gICAgICogQ29uc3RydWN0cyBhbiBAYyBpbnZlcnNpdmVfY29uZ3J1ZW50aWFsX2VuZ2luZSwg
c2VlZHMgaXQKLSAgICAgKiB3aXRoIHZhbHVlcyB0YWtlbiBmcm9tIHRoZSBpdHJhdG9yIHJhbmdl
IFtmaXJzdCwgbGFzdCksCi0gICAgICogYW5kIGFkanVzdHMgZmlyc3QgdG8gcG9pbnQgdG8gdGhl
IGVsZW1lbnQgYWZ0ZXIgdGhlIGxhc3Qgb25lCi0gICAgICogdXNlZC4gIElmIHRoZXJlIGFyZSBu
b3QgZW5vdWdoIGVsZW1lbnRzLCB0aHJvd3MgQGMgc3RkOjppbnZhbGlkX2FyZ3VtZW50LgotICAg
ICAqCi0gICAgICogZmlyc3QgYW5kIGxhc3QgbXVzdCBiZSBpbnB1dCBpdGVyYXRvcnMuCi0gICAg
ICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+IGludmVyc2l2ZV9jb25ncnVlbnRpYWxfZW5naW5l
KEl0JiBmaXJzdCwgSXQgbGFzdCkKLSAgICB7IHNlZWQoZmlyc3QsIGxhc3QpOyB9Ci0KLSAgICAv
KioKLSAgICAgKiBDYWxscyBzZWVkKGRlZmF1bHRfc2VlZCkKLSAgICAgKi8KLSAgICB2b2lkIHNl
ZWQoKSB7IHNlZWQoZGVmYXVsdF9zZWVkKTsgfQotICAKLSAgICAvKioKLSAgICAgKiBJZiBjIG1v
ZCBtIGlzIHplcm8gYW5kIHgwIG1vZCBtIGlzIHplcm8sIGNoYW5nZXMgdGhlIGN1cnJlbnQgdmFs
dWUgb2YKLSAgICAgKiB0aGUgZ2VuZXJhdG9yIHRvIDEuIE90aGVyd2lzZSwgY2hhbmdlcyBpdCB0
byB4MCBtb2QgbS4gSWYgYyBpcyB6ZXJvLAotICAgICAqIGRpc3RpbmN0IHNlZWRzIGluIHRoZSBy
YW5nZSBbMSxtKSB3aWxsIGxlYXZlIHRoZSBnZW5lcmF0b3IgaW4gZGlzdGluY3QKLSAgICAgKiBz
dGF0ZXMuIElmIGMgaXMgbm90IHplcm8sIHRoZSByYW5nZSBpcyBbMCxtKS4KLSAgICAgKi8KLSAg
ICBCT09TVF9SQU5ET01fREVUQUlMX0FSSVRITUVUSUNfU0VFRChpbnZlcnNpdmVfY29uZ3J1ZW50
aWFsX2VuZ2luZSwgSW50VHlwZSwgeDApCi0gICAgewotICAgICAgICAvLyB3cmFwIF94IGlmIGl0
IGRvZXNuJ3QgZml0IGluIHRoZSBkZXN0aW5hdGlvbgotICAgICAgICBpZihtb2R1bHVzID09IDAp
IHsKLSAgICAgICAgICAgIF92YWx1ZSA9IHgwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgX3ZhbHVlID0geDAgJSBtb2R1bHVzOwotICAgICAgICB9Ci0gICAgICAgIC8vIGhhbmRsZSBu
ZWdhdGl2ZSBzZWVkcwotICAgICAgICBpZihfdmFsdWUgPD0gMCAmJiBfdmFsdWUgIT0gMCkgewot
ICAgICAgICAgICAgX3ZhbHVlICs9IG1vZHVsdXM7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gYWRq
dXN0IHRvIHRoZSBjb3JyZWN0IHJhbmdlCi0gICAgICAgIGlmKGluY3JlbWVudCA9PSAwICYmIF92
YWx1ZSA9PSAwKSB7Ci0gICAgICAgICAgICBfdmFsdWUgPSAxOwotICAgICAgICB9Ci0gICAgICAg
IEJPT1NUX0FTU0VSVChfdmFsdWUgPj0gKG1pbikoKSk7Ci0gICAgICAgIEJPT1NUX0FTU0VSVChf
dmFsdWUgPD0gKG1heCkoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VlZHMgYW4gQGMg
aW52ZXJzaXZlX2NvbmdydWVudGlhbF9lbmdpbmUgdXNpbmcgdmFsdWVzIGZyb20gYSBTZWVkU2Vx
LgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfU0VFRF9TRVFfU0VFRChpbnZlcnNp
dmVfY29uZ3J1ZW50aWFsX2VuZ2luZSwgU2VlZFNlcSwgc2VxKQotICAgIHsgc2VlZChkZXRhaWw6
OnNlZWRfb25lX2ludDxJbnRUeXBlLCBtb2R1bHVzPihzZXEpKTsgfQotICAgIAotICAgIC8qKgot
ICAgICAqIHNlZWRzIGFuIEBjIGludmVyc2l2ZV9jb25ncnVlbnRpYWxfZW5naW5lIHdpdGggdmFs
dWVzIHRha2VuCi0gICAgICogZnJvbSB0aGUgaXRyYXRvciByYW5nZSBbZmlyc3QsIGxhc3QpIGFu
ZCBhZGp1c3RzIEBjIGZpcnN0IHRvCi0gICAgICogcG9pbnQgdG8gdGhlIGVsZW1lbnQgYWZ0ZXIg
dGhlIGxhc3Qgb25lIHVzZWQuICBJZiB0aGVyZSBhcmUKLSAgICAgKiBub3QgZW5vdWdoIGVsZW1l
bnRzLCB0aHJvd3MgQGMgc3RkOjppbnZhbGlkX2FyZ3VtZW50LgotICAgICAqCi0gICAgICogQGMg
Zmlyc3QgYW5kIEBjIGxhc3QgbXVzdCBiZSBpbnB1dCBpdGVyYXRvcnMuCi0gICAgICovCi0gICAg
dGVtcGxhdGU8Y2xhc3MgSXQ+IHZvaWQgc2VlZChJdCYgZmlyc3QsIEl0IGxhc3QpCi0gICAgeyBz
ZWVkKGRldGFpbDo6Z2V0X29uZV9pbnQ8SW50VHlwZSwgbW9kdWx1cz4oZmlyc3QsIGxhc3QpKTsg
fQotCi0gICAgLyoqIFJldHVybnMgdGhlIG5leHQgb3V0cHV0IG9mIHRoZSBnZW5lcmF0b3IuICov
Ci0gICAgSW50VHlwZSBvcGVyYXRvcigpKCkKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgY29uc3Rf
bW9kPEludFR5cGUsIHA+IGRvX21vZDsKLSAgICAgICAgX3ZhbHVlID0gZG9fbW9kOjptdWx0X2Fk
ZChhLCBkb19tb2Q6OmludmVydChfdmFsdWUpLCBiKTsKLSAgICAgICAgcmV0dXJuIF92YWx1ZTsK
LSAgICB9Ci0gIAotICAgIC8qKiBGaWxscyBhIHJhbmdlIHdpdGggcmFuZG9tIHZhbHVlcyAqLwot
ICAgIHRlbXBsYXRlPGNsYXNzIEl0ZXI+Ci0gICAgdm9pZCBnZW5lcmF0ZShJdGVyIGZpcnN0LCBJ
dGVyIGxhc3QpCi0gICAgeyBkZXRhaWw6OmdlbmVyYXRlX2Zyb21faW50KCp0aGlzLCBmaXJzdCwg
bGFzdCk7IH0KLQotICAgIC8qKiBBZHZhbmNlcyB0aGUgc3RhdGUgb2YgdGhlIGdlbmVyYXRvciBi
eSBAYyB6LiAqLwotICAgIHZvaWQgZGlzY2FyZChib29zdDo6dWludG1heF90IHopCi0gICAgewot
ICAgICAgICBmb3IoYm9vc3Q6OnVpbnRtYXhfdCBqID0gMDsgaiA8IHo7ICsraikgewotICAgICAg
ICAgICAgKCp0aGlzKSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV3Jp
dGVzIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnZW5lcmF0b3IgdG8gYSBAYyBz
dGQ6Om9zdHJlYW0uCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09Q
RVJBVE9SKG9zLCBpbnZlcnNpdmVfY29uZ3J1ZW50aWFsX2VuZ2luZSwgeCkKLSAgICB7Ci0gICAg
ICAgIG9zIDw8IHguX3ZhbHVlOwotICAgICAgICByZXR1cm4gb3M7Ci0gICAgfQotCi0gICAgLyoq
Ci0gICAgICogUmVhZHMgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdlbmVyYXRv
ciBmcm9tIGEgQGMgc3RkOjppc3RyZWFtLgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRB
SUxfSVNUUkVBTV9PUEVSQVRPUihpcywgaW52ZXJzaXZlX2NvbmdydWVudGlhbF9lbmdpbmUsIHgp
Ci0gICAgewotICAgICAgICBpcyA+PiB4Ll92YWx1ZTsKLSAgICAgICAgcmV0dXJuIGlzOwotICAg
IH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGdlbmVyYXRvcnMg
d2lsbCBwcm9kdWNlIGlkZW50aWNhbAotICAgICAqIHNlcXVlbmNlcyBvZiBvdXRwdXRzLgotICAg
ICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IoaW52ZXJzaXZl
X2NvbmdydWVudGlhbF9lbmdpbmUsIHgsIHkpCi0gICAgeyByZXR1cm4geC5fdmFsdWUgPT0geS5f
dmFsdWU7IH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGdlbmVy
YXRvcnMgd2lsbCBwcm9kdWNlIGRpZmZlcmVudAotICAgICAqIHNlcXVlbmNlcyBvZiBvdXRwdXRz
LgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5FUVVBTElUWV9PUEVSQVRPUihp
bnZlcnNpdmVfY29uZ3J1ZW50aWFsX2VuZ2luZSkKLQotcHJpdmF0ZToKLSAgICBJbnRUeXBlIF92
YWx1ZTsKLX07Ci0KLSNpZm5kZWYgQk9PU1RfTk9fSU5DTEFTU19NRU1CRVJfSU5JVElBTElaQVRJ
T04KLS8vICBBIGRlZmluaXRpb24gaXMgcmVxdWlyZWQgZXZlbiBmb3IgaW50ZWdyYWwgc3RhdGlj
IGNvbnN0YW50cwotdGVtcGxhdGU8Y2xhc3MgSW50VHlwZSwgSW50VHlwZSBhLCBJbnRUeXBlIGIs
IEludFR5cGUgcD4KLWNvbnN0IGJvb2wgaW52ZXJzaXZlX2NvbmdydWVudGlhbF9lbmdpbmU8SW50
VHlwZSwgYSwgYiwgcD46Omhhc19maXhlZF9yYW5nZTsKLXRlbXBsYXRlPGNsYXNzIEludFR5cGUs
IEludFR5cGUgYSwgSW50VHlwZSBiLCBJbnRUeXBlIHA+Ci1jb25zdCB0eXBlbmFtZSBpbnZlcnNp
dmVfY29uZ3J1ZW50aWFsX2VuZ2luZTxJbnRUeXBlLCBhLCBiLCBwPjo6cmVzdWx0X3R5cGUgaW52
ZXJzaXZlX2NvbmdydWVudGlhbF9lbmdpbmU8SW50VHlwZSwgYSwgYiwgcD46Om11bHRpcGxpZXI7
Ci10ZW1wbGF0ZTxjbGFzcyBJbnRUeXBlLCBJbnRUeXBlIGEsIEludFR5cGUgYiwgSW50VHlwZSBw
PgotY29uc3QgdHlwZW5hbWUgaW52ZXJzaXZlX2NvbmdydWVudGlhbF9lbmdpbmU8SW50VHlwZSwg
YSwgYiwgcD46OnJlc3VsdF90eXBlIGludmVyc2l2ZV9jb25ncnVlbnRpYWxfZW5naW5lPEludFR5
cGUsIGEsIGIsIHA+OjppbmNyZW1lbnQ7Ci10ZW1wbGF0ZTxjbGFzcyBJbnRUeXBlLCBJbnRUeXBl
IGEsIEludFR5cGUgYiwgSW50VHlwZSBwPgotY29uc3QgdHlwZW5hbWUgaW52ZXJzaXZlX2Nvbmdy
dWVudGlhbF9lbmdpbmU8SW50VHlwZSwgYSwgYiwgcD46OnJlc3VsdF90eXBlIGludmVyc2l2ZV9j
b25ncnVlbnRpYWxfZW5naW5lPEludFR5cGUsIGEsIGIsIHA+Ojptb2R1bHVzOwotdGVtcGxhdGU8
Y2xhc3MgSW50VHlwZSwgSW50VHlwZSBhLCBJbnRUeXBlIGIsIEludFR5cGUgcD4KLWNvbnN0IHR5
cGVuYW1lIGludmVyc2l2ZV9jb25ncnVlbnRpYWxfZW5naW5lPEludFR5cGUsIGEsIGIsIHA+Ojpy
ZXN1bHRfdHlwZSBpbnZlcnNpdmVfY29uZ3J1ZW50aWFsX2VuZ2luZTxJbnRUeXBlLCBhLCBiLCBw
Pjo6ZGVmYXVsdF9zZWVkOwotI2VuZGlmCi0KLS8vLyBcY29uZCBzaG93X2RlcHJlY2F0ZWQKLQot
Ly8gcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Ci10ZW1wbGF0ZTxjbGFzcyBJ
bnRUeXBlLCBJbnRUeXBlIGEsIEludFR5cGUgYiwgSW50VHlwZSBwLCBJbnRUeXBlIHZhbCA9IDA+
Ci1jbGFzcyBpbnZlcnNpdmVfY29uZ3J1ZW50aWFsIDogcHVibGljIGludmVyc2l2ZV9jb25ncnVl
bnRpYWxfZW5naW5lPEludFR5cGUsIGEsIGIsIHA+Ci17Ci0gICAgdHlwZWRlZiBpbnZlcnNpdmVf
Y29uZ3J1ZW50aWFsX2VuZ2luZTxJbnRUeXBlLCBhLCBiLCBwPiBiYXNlX3R5cGU7Ci1wdWJsaWM6
Ci0gICAgaW52ZXJzaXZlX2NvbmdydWVudGlhbChJbnRUeXBlIHgwID0gMSkgOiBiYXNlX3R5cGUo
eDApIHt9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+Ci0gICAgaW52ZXJzaXZlX2NvbmdydWVudGlh
bChJdCYgZmlyc3QsIEl0IGxhc3QpIDogYmFzZV90eXBlKGZpcnN0LCBsYXN0KSB7fQotfTsKLQot
Ly8vIFxlbmRjb25kCi0KLS8qKgotICogVGhlIHNwZWNpYWxpemF0aW9uIGhlbGxla2FsZWsxOTk1
IHdhcyBzdWdnZXN0ZWQgaW4KLSAqCi0gKiAgQGJsb2NrcXVvdGUKLSAqICAiSW52ZXJzaXZlIHBz
ZXVkb3JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yczogY29uY2VwdHMsIHJlc3VsdHMgYW5kIGxpbmtz
IiwKLSAqICBQZXRlciBIZWxsZWthbGVrLCBJbjogIlByb2NlZWRpbmdzIG9mIHRoZSAxOTk1IFdp
bnRlciBTaW11bGF0aW9uCi0gKiAgQ29uZmVyZW5jZSIsIEMuIEFsZXhvcG91bG9zLCBLLiBLYW5n
LCBXLlIuIExpbGVnZG9uLCBhbmQgRC4gR29sZHNtYW4KLSAqICAoZWRpdG9ycyksIDE5OTUsIHBw
LiAyNTUtMjYyLiBmdHA6Ly9yYW5kb20ubWF0LnNiZy5hYy5hdC9wdWIvZGF0YS93c2M5NS5wcwot
ICogIEBlbmRibG9ja3F1b3RlCi0gKi8KLXR5cGVkZWYgaW52ZXJzaXZlX2NvbmdydWVudGlhbF9l
bmdpbmU8dWludDMyX3QsIDkxMDIsIDIxNDc0ODM2NDctMzY4ODQxNjUsCi0gIDIxNDc0ODM2NDc+
IGhlbGxla2FsZWsxOTk1OwotCi19IC8vIG5hbWVzcGFjZSByYW5kb20KLQotdXNpbmcgcmFuZG9t
OjpoZWxsZWthbGVrMTk5NTsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2luY2x1ZGUgPGJv
b3N0L3JhbmRvbS9kZXRhaWwvZW5hYmxlX3dhcm5pbmdzLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NU
X1JBTkRPTV9JTlZFUlNJVkVfQ09OR1JVRU5USUFMX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2xhZ2dlZF9maWJvbmFjY2ku
aHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2xh
Z2dlZF9maWJvbmFjY2kuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTgwOWYz
ZTQ5NDNiMjYxOWRjNzg4MzEyYzc1ZTVmMjdjY2I2ZjE0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3JhbmRvbS9sYWdnZWRfZmlib25hY2NpLmhwcAorKysgL2Rldi9udWxsCkBAIC0x
LDUzNyArMCwwIEBACi0vKiBib29zdCByYW5kb20vbGFnZ2VkX2ZpYm9uYWNjaS5ocHAgaGVhZGVy
IGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgSmVucyBNYXVyZXIgMjAwMC0yMDAxCi0gKiBEaXN0cmli
dXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUK
LSAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9u
LgotICoKLSAqICRJZCQKLSAqCi0gKiBSZXZpc2lvbiBoaXN0b3J5Ci0gKiAgMjAxMy0xMC0xNCAg
Zml4ZWQgc29tZSB3YXJuaW5ncyB3aXRoIFdzaGFkb3cgKG1nYXVuYXJkKQotICogIDIwMDEtMDIt
MTggIG1vdmVkIHRvIGluZGl2aWR1YWwgaGVhZGVyIGZpbGVzCi0gKi8KLQotI2lmbmRlZiBCT09T
VF9SQU5ET01fTEFHR0VEX0ZJQk9OQUNDSV9IUFAKLSNkZWZpbmUgQk9PU1RfUkFORE9NX0xBR0dF
RF9GSUJPTkFDQ0lfSFBQCi0KLSNpbmNsdWRlIDxpc3RyZWFtPgotI2luY2x1ZGUgPGlvc2Z3ZD4K
LSNpbmNsdWRlIDxhbGdvcml0aG0+ICAgICAvLyBzdGQ6Om1heAotI2luY2x1ZGUgPGl0ZXJhdG9y
PgotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy9ub190cjEvY21hdGguaHBwPiAgICAgICAgIC8vIHN0
ZDo6cG93Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9saW1p
dHMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2NzdGRpbnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2lu
dGVnZXIvaW50ZWdlcl9tYXNrLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vbGluZWFyX2Nv
bmdydWVudGlhbC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL3VuaWZvcm1fMDEuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9yYW5kb20vZGV0YWlsL3NlZWQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwv
b3BlcmF0b3JzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2dlbmVyYXRvcl9z
ZWVkX3NlcS5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgcmFuZG9tIHsKLQot
LyoqCi0gKiBJbnN0YW50aWF0aW9ucyBvZiBjbGFzcyB0ZW1wbGF0ZSBcbGFnZ2VkX2ZpYm9uYWNj
aV9lbmdpbmUgbW9kZWwgYQotICogXHBzZXVkb19yYW5kb21fbnVtYmVyX2dlbmVyYXRvci4gSXQg
dXNlcyBhIGxhZ2dlZCBGaWJvbmFjY2kKLSAqIGFsZ29yaXRobSB3aXRoIHR3byBsYWdzIEBjIHAg
YW5kIEBjIHE6Ci0gKiB4KGkpID0geChpLXApICsgeChpLXEpIChtb2QgMjxzdXA+dzwvc3VwPikg
d2l0aCBwID4gcS4KLSAqLwotdGVtcGxhdGU8Y2xhc3MgVUludFR5cGUsIGludCB3LCB1bnNpZ25l
ZCBpbnQgcCwgdW5zaWduZWQgaW50IHE+Ci1jbGFzcyBsYWdnZWRfZmlib25hY2NpX2VuZ2luZQot
ewotcHVibGljOgotICAgIHR5cGVkZWYgVUludFR5cGUgcmVzdWx0X3R5cGU7Ci0gICAgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKGJvb2wsIGhhc19maXhlZF9yYW5nZSA9IGZhbHNlKTsKLSAgICBCT09T
VF9TVEFUSUNfQ09OU1RBTlQoaW50LCB3b3JkX3NpemUgPSB3KTsKLSAgICBCT09TVF9TVEFUSUNf
Q09OU1RBTlQodW5zaWduZWQgaW50LCBsb25nX2xhZyA9IHApOwotICAgIEJPT1NUX1NUQVRJQ19D
T05TVEFOVCh1bnNpZ25lZCBpbnQsIHNob3J0X2xhZyA9IHEpOwotCi0gICAgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKFVJbnRUeXBlLCBkZWZhdWx0X3NlZWQgPSAzMzF1KTsKLQotICAgIC8qKiBSZXR1
cm5zIHRoZSBzbWFsbGVzdCB2YWx1ZSB0aGF0IHRoZSBnZW5lcmF0b3IgY2FuIHByb2R1Y2UuICov
Ci0gICAgc3RhdGljIHJlc3VsdF90eXBlIG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRV
VElPTiAoKSB7IHJldHVybiAwOyB9Ci0gICAgLyoqIFJldHVybnMgdGhlIGxhcmdlc3QgdmFsdWUg
dGhhdCB0aGUgZ2VuZXJhdG9yIGNhbiBwcm9kdWNlLiAqLwotICAgIHN0YXRpYyByZXN1bHRfdHlw
ZSBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkKLSAgICB7IHJldHVybiBs
b3dfYml0c19tYXNrX3Q8dz46OnNpZ19iaXRzOyB9Ci0KLSAgICAvKiogQ3JlYXRlcyBhIG5ldyBA
YyBsYWdnZWRfZmlib25hY2NpX2VuZ2luZSBhbmQgY2FsbHMgQGMgc2VlZCgpLiAqLwotICAgIGxh
Z2dlZF9maWJvbmFjY2lfZW5naW5lKCkgeyBzZWVkKCk7IH0KLQotICAgIC8qKiBDcmVhdGVzIGEg
bmV3IEBjIGxhZ2dlZF9maWJvbmFjY2lfZW5naW5lIGFuZCBjYWxscyBAYyBzZWVkKHZhbHVlKS4g
Ki8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0FSSVRITUVUSUNfQ09OU1RSVUNUT1IobGFnZ2Vk
X2ZpYm9uYWNjaV9lbmdpbmUsCi0gICAgICAgIFVJbnRUeXBlLCB2YWx1ZSkKLSAgICB7IHNlZWQo
dmFsdWUpOyB9Ci0KLSAgICAvKiogQ3JlYXRlcyBhIG5ldyBAYyBsYWdnZWRfZmlib25hY2NpX2Vu
Z2luZSBhbmQgY2FsbHMgQGMgc2VlZChzZXEpLiAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxf
U0VFRF9TRVFfQ09OU1RSVUNUT1IobGFnZ2VkX2ZpYm9uYWNjaV9lbmdpbmUsCi0gICAgICAgIFNl
ZWRTZXEsIHNlcSkKLSAgICB7IHNlZWQoc2VxKTsgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRl
cyBhIG5ldyBAYyBsYWdnZWRfZmlib25hY2NpX2VuZ2luZSBhbmQgY2FsbHMgQGMgc2VlZChmaXJz
dCwgbGFzdCkuCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+IGxhZ2dlZF9maWJvbmFj
Y2lfZW5naW5lKEl0JiBmaXJzdCwgSXQgbGFzdCkKLSAgICB7IHNlZWQoZmlyc3QsIGxhc3QpOyB9
Ci0KLSAgICAvLyBjb21waWxlci1nZW5lcmF0ZWQgY29weSBjdG9yIGFuZCBhc3NpZ25tZW50IG9w
ZXJhdG9yIGFyZSBmaW5lCi0KLSAgICAvKiogQ2FsbHMgQGMgc2VlZChkZWZhdWx0X3NlZWQpLiAq
LwotICAgIHZvaWQgc2VlZCgpIHsgc2VlZChkZWZhdWx0X3NlZWQpOyB9Ci0KLSAgICAvKioKLSAg
ICAgKiBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgZ2VuZXJhdG9yIHRvIHZhbHVlcyBwcm9kdWNlZCBi
eQotICAgICAqIGEgXG1pbnN0ZF9yYW5kMCBnZW5lcmF0b3IuCi0gICAgICovCi0gICAgQk9PU1Rf
UkFORE9NX0RFVEFJTF9BUklUSE1FVElDX1NFRUQobGFnZ2VkX2ZpYm9uYWNjaV9lbmdpbmUsCi0g
ICAgICAgIFVJbnRUeXBlLCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1pbnN0ZF9yYW5kMCBpbnRn
ZW4oc3RhdGljX2Nhc3Q8Ym9vc3Q6OnVpbnQzMl90Pih2YWx1ZSkpOwotICAgICAgICBkZXRhaWw6
OmdlbmVyYXRvcl9zZWVkX3NlcTxtaW5zdGRfcmFuZDA+IGdlbihpbnRnZW4pOwotICAgICAgICBz
ZWVkKGdlbik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgc3RhdGUgb2YgdGhl
IGdlbmVyYXRvciB1c2luZyB2YWx1ZXMgcHJvZHVjZWQgYnkgc2VxLgotICAgICAqLwotICAgIEJP
T1NUX1JBTkRPTV9ERVRBSUxfU0VFRF9TRVFfU0VFRChsYWdnZWRfZmlib25hY2NpX2VuZ2luZSwg
U2VlZFNlcSwgc2VxKQotICAgIHsKLSAgICAgICAgZGV0YWlsOjpzZWVkX2FycmF5X2ludDx3Pihz
ZXEsIHgpOwotICAgICAgICBpID0gbG9uZ19sYWc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog
U2V0cyB0aGUgc3RhdGUgb2YgdGhlIGdlbmVyYXRvciB0byB2YWx1ZXMgZnJvbSB0aGUgaXRlcmF0
b3IKLSAgICAgKiByYW5nZSBbZmlyc3QsIGxhc3QpLiAgSWYgdGhlcmUgYXJlIG5vdCBlbm91Z2gg
ZWxlbWVudHMgaW4gdGhlCi0gICAgICogcmFuZ2UgW2ZpcnN0LCBsYXN0KSB0aHJvd3MgQGMgc3Rk
OjppbnZhbGlkX2FyZ3VtZW50LgotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIEl0PgotICAg
IHZvaWQgc2VlZChJdCYgZmlyc3QsIEl0IGxhc3QpCi0gICAgewotICAgICAgICBkZXRhaWw6OmZp
bGxfYXJyYXlfaW50PHc+KGZpcnN0LCBsYXN0LCB4KTsKLSAgICAgICAgaSA9IGxvbmdfbGFnOwot
ICAgIH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBuZXh0IHZhbHVlIG9mIHRoZSBnZW5lcmF0b3Iu
ICovCi0gICAgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKSgpCi0gICAgewotICAgICAgICBpZihpID49
IGxvbmdfbGFnKQotICAgICAgICAgICAgZmlsbCgpOwotICAgICAgICByZXR1cm4geFtpKytdOwot
ICAgIH0KLQotICAgIC8qKiBGaWxscyBhIHJhbmdlIHdpdGggcmFuZG9tIHZhbHVlcyAqLwotICAg
IHRlbXBsYXRlPGNsYXNzIEl0ZXI+Ci0gICAgdm9pZCBnZW5lcmF0ZShJdGVyIGZpcnN0LCBJdGVy
IGxhc3QpCi0gICAgeyBkZXRhaWw6OmdlbmVyYXRlX2Zyb21faW50KCp0aGlzLCBmaXJzdCwgbGFz
dCk7IH0KLQotICAgIC8qKiBBZHZhbmNlcyB0aGUgc3RhdGUgb2YgdGhlIGdlbmVyYXRvciBieSBA
YyB6LiAqLwotICAgIHZvaWQgZGlzY2FyZChib29zdDo6dWludG1heF90IHopCi0gICAgewotICAg
ICAgICBmb3IoYm9vc3Q6OnVpbnRtYXhfdCBqID0gMDsgaiA8IHo7ICsraikgewotICAgICAgICAg
ICAgKCp0aGlzKSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV3JpdGVz
IHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnZW5lcmF0b3IgdG8gYSBAYyBzdGQ6
Om9zdHJlYW0uCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09QRVJB
VE9SKG9zLCBsYWdnZWRfZmlib25hY2NpX2VuZ2luZSwgZikKLSAgICB7Ci0gICAgICAgIG9zIDw8
IGYuaTsKLSAgICAgICAgZm9yKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGYubG9uZ19sYWc7ICsr
aikKLSAgICAgICAgICAgIG9zIDw8ICcgJyA8PCBmLnhbal07Ci0gICAgICAgIHJldHVybiBvczsK
LSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWFkcyB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlv
biBvZiB0aGUgZ2VuZXJhdG9yIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uCi0gICAgICovCi0gICAg
Qk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlzLCBsYWdnZWRfZmlib25hY2Np
X2VuZ2luZSwgZikKLSAgICB7Ci0gICAgICAgIGlzID4+IGYuaSA+PiBzdGQ6OndzOwotICAgICAg
ICBmb3IodW5zaWduZWQgaW50IGogPSAwOyBqIDwgZi5sb25nX2xhZzsgKytqKQotICAgICAgICAg
ICAgaXMgPj4gZi54W2pdID4+IHN0ZDo6d3M7Ci0gICAgICAgIHJldHVybiBpczsKLSAgICB9Ci0K
LSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBnZW5lcmF0b3JzIHdpbGwg
cHJvZHVjZSBpZGVudGljYWwKLSAgICAgKiBzZXF1ZW5jZXMgb2Ygb3V0cHV0cy4KLSAgICAgKi8K
LSAgICBCT09TVF9SQU5ET01fREVUQUlMX0VRVUFMSVRZX09QRVJBVE9SKGxhZ2dlZF9maWJvbmFj
Y2lfZW5naW5lLCB4XywgeV8pCi0gICAgeyByZXR1cm4geF8uaSA9PSB5Xy5pICYmIHN0ZDo6ZXF1
YWwoeF8ueCwgeF8ueCtsb25nX2xhZywgeV8ueCk7IH0KLQotICAgIC8qKgotICAgICAqIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgdHdvIGdlbmVyYXRvcnMgd2lsbCBwcm9kdWNlIGRpZmZlcmVudAotICAg
ICAqIHNlcXVlbmNlcyBvZiBvdXRwdXRzLgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRB
SUxfSU5FUVVBTElUWV9PUEVSQVRPUihsYWdnZWRfZmlib25hY2NpX2VuZ2luZSkKLQotcHJpdmF0
ZToKLSAgICAvLy8gXGNvbmQgc2hvd19wcml2YXRlCi0gICAgdm9pZCBmaWxsKCk7Ci0gICAgLy8v
IFxlbmRjb25kCi0KLSAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICBVSW50VHlwZSB4W2xvbmdfbGFn
XTsKLX07Ci0KLSNpZm5kZWYgQk9PU1RfTk9fSU5DTEFTU19NRU1CRVJfSU5JVElBTElaQVRJT04K
LS8vICBBIGRlZmluaXRpb24gaXMgcmVxdWlyZWQgZXZlbiBmb3IgaW50ZWdyYWwgc3RhdGljIGNv
bnN0YW50cwotdGVtcGxhdGU8Y2xhc3MgVUludFR5cGUsIGludCB3LCB1bnNpZ25lZCBpbnQgcCwg
dW5zaWduZWQgaW50IHE+Ci1jb25zdCBib29sIGxhZ2dlZF9maWJvbmFjY2lfZW5naW5lPFVJbnRU
eXBlLCB3LCBwLCBxPjo6aGFzX2ZpeGVkX3JhbmdlOwotdGVtcGxhdGU8Y2xhc3MgVUludFR5cGUs
IGludCB3LCB1bnNpZ25lZCBpbnQgcCwgdW5zaWduZWQgaW50IHE+Ci1jb25zdCB1bnNpZ25lZCBp
bnQgbGFnZ2VkX2ZpYm9uYWNjaV9lbmdpbmU8VUludFR5cGUsIHcsIHAsIHE+Ojpsb25nX2xhZzsK
LXRlbXBsYXRlPGNsYXNzIFVJbnRUeXBlLCBpbnQgdywgdW5zaWduZWQgaW50IHAsIHVuc2lnbmVk
IGludCBxPgotY29uc3QgdW5zaWduZWQgaW50IGxhZ2dlZF9maWJvbmFjY2lfZW5naW5lPFVJbnRU
eXBlLCB3LCBwLCBxPjo6c2hvcnRfbGFnOwotdGVtcGxhdGU8Y2xhc3MgVUludFR5cGUsIGludCB3
LCB1bnNpZ25lZCBpbnQgcCwgdW5zaWduZWQgaW50IHE+Ci1jb25zdCBVSW50VHlwZSBsYWdnZWRf
Zmlib25hY2NpX2VuZ2luZTxVSW50VHlwZSwgdywgcCwgcT46OmRlZmF1bHRfc2VlZDsKLSNlbmRp
ZgotCi0vLy8gXGNvbmQgc2hvd19wcml2YXRlCi0KLXRlbXBsYXRlPGNsYXNzIFVJbnRUeXBlLCBp
bnQgdywgdW5zaWduZWQgaW50IHAsIHVuc2lnbmVkIGludCBxPgotdm9pZCBsYWdnZWRfZmlib25h
Y2NpX2VuZ2luZTxVSW50VHlwZSwgdywgcCwgcT46OmZpbGwoKQotewotICAgIC8vIHR3byBsb29w
cyB0byBhdm9pZCBjb3N0bHkgbW9kdWxvIG9wZXJhdGlvbnMKLSAgICB7ICAvLyBleHRyYSBzY29w
ZSBmb3IgTVNWQyBicm9rZW5uZXNzIHcuci50LiBmb3Igc2NvcGUKLSAgICBmb3IodW5zaWduZWQg
aW50IGogPSAwOyBqIDwgc2hvcnRfbGFnOyArK2opCi0gICAgICAgIHhbal0gPSAoeFtqXSArIHhb
aisobG9uZ19sYWctc2hvcnRfbGFnKV0pICYgbG93X2JpdHNfbWFza190PHc+OjpzaWdfYml0czsK
LSAgICB9Ci0gICAgZm9yKHVuc2lnbmVkIGludCBqID0gc2hvcnRfbGFnOyBqIDwgbG9uZ19sYWc7
ICsraikKLSAgICAgICAgeFtqXSA9ICh4W2pdICsgeFtqLXNob3J0X2xhZ10pICYgbG93X2JpdHNf
bWFza190PHc+OjpzaWdfYml0czsKLSAgICBpID0gMDsKLX0KLQotLy8vIFxlbmRjb25kCi0KLS8v
LyBcY29uZCBzaG93X2RlcHJlY2F0ZWQKLQotLy8gcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21w
YXRpYmlsaXR5Ci10ZW1wbGF0ZTxjbGFzcyBVSW50VHlwZSwgaW50IHcsIHVuc2lnbmVkIGludCBw
LCB1bnNpZ25lZCBpbnQgcSwgVUludFR5cGUgdiA9IDA+Ci1jbGFzcyBsYWdnZWRfZmlib25hY2Np
IDogcHVibGljIGxhZ2dlZF9maWJvbmFjY2lfZW5naW5lPFVJbnRUeXBlLCB3LCBwLCBxPgotewot
ICAgIHR5cGVkZWYgbGFnZ2VkX2ZpYm9uYWNjaV9lbmdpbmU8VUludFR5cGUsIHcsIHAsIHE+IGJh
c2VfdHlwZTsKLXB1YmxpYzoKLSAgICBsYWdnZWRfZmlib25hY2NpKCkge30KLSAgICBCT09TVF9S
QU5ET01fREVUQUlMX0FSSVRITUVUSUNfQ09OU1RSVUNUT1IobGFnZ2VkX2ZpYm9uYWNjaSwgVUlu
dFR5cGUsIHZhbCkKLSAgICB7IHRoaXMtPnNlZWQodmFsKTsgfQotICAgIEJPT1NUX1JBTkRPTV9E
RVRBSUxfU0VFRF9TRVFfQ09OU1RSVUNUT1IobGFnZ2VkX2ZpYm9uYWNjaSwgU2VlZFNlcSwgc2Vx
KQotICAgIHsgdGhpcy0+c2VlZChzZXEpOyB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+Ci0gICAg
bGFnZ2VkX2ZpYm9uYWNjaShJdCYgZmlyc3QsIEl0IGxhc3QpIDogYmFzZV90eXBlKGZpcnN0LCBs
YXN0KSB7fQotfTsKLQotLy8vIFxlbmRjb25kCi0KLS8vIGxhZ2dlZCBGaWJvbmFjY2kgZ2VuZXJh
dG9yIGZvciB0aGUgcmFuZ2UgWzAuLjEpCi0vLyBjb250cmlidXRlZCBieSBNYXR0aGlhcyBUcm95
ZXIKLS8vIGZvciBwPTU1LCBxPTI0IG9yaWdpbmFsbHkgYnkgRy4gSi4gTWl0Y2hlbGwgYW5kIEQu
IFAuIE1vb3JlIDE5NTgKLQotLyoqCi0gKiBJbnN0YW50aWF0aW9ucyBvZiBjbGFzcyB0ZW1wbGF0
ZSBAYyBsYWdnZWRfZmlib25hY2NpXzAxIG1vZGVsIGEKLSAqIFxwc2V1ZG9fcmFuZG9tX251bWJl
cl9nZW5lcmF0b3IuIEl0IHVzZXMgYSBsYWdnZWQgRmlib25hY2NpCi0gKiBhbGdvcml0aG0gd2l0
aCB0d28gbGFncyBAYyBwIGFuZCBAYyBxLCBldmFsdWF0ZWQgaW4gZmxvYXRpbmctcG9pbnQKLSAq
IGFyaXRobWV0aWM6IHgoaSkgPSB4KGktcCkgKyB4KGktcSkgKG1vZCAxKSB3aXRoIHAgPiBxLiBT
ZWUKLSAqCi0gKiAgQGJsb2NrcXVvdGUKLSAqICAiVW5pZm9ybSByYW5kb20gbnVtYmVyIGdlbmVy
YXRvcnMgZm9yIHN1cGVyY29tcHV0ZXJzIiwgUmljaGFyZCBCcmVudCwKLSAqICBQcm9jLiBvZiBG
aWZ0aCBBdXN0cmFsaWFuIFN1cGVyY29tcHV0ZXIgQ29uZmVyZW5jZSwgTWVsYm91cm5lLAotICog
IERlYy4gMTk5MiwgcHAuIDcwNC03MDYuCi0gKiAgQGVuZGJsb2NrcXVvdGUKLSAqCi0gKiBAeG1s
bm90ZQotICogVGhlIHF1YWxpdHkgb2YgdGhlIGdlbmVyYXRvciBjcnVjaWFsbHkgZGVwZW5kcyBv
biB0aGUgY2hvaWNlCi0gKiBvZiB0aGUgcGFyYW1ldGVycy4gVXNlciBjb2RlIHNob3VsZCBlbXBs
b3kgb25lIG9mIHRoZSBzZW5zaWJseQotICogcGFyYW1ldGVyaXplZCBnZW5lcmF0b3JzIHN1Y2gg
YXMgXGxhZ2dlZF9maWJvbmFjY2k2MDcgaW5zdGVhZC4KLSAqIEBlbmR4bWxub3RlCi0gKgotICog
VGhlIGdlbmVyYXRvciByZXF1aXJlcyBjb25zaWRlcmFibGUgYW1vdW50cyBvZiBtZW1vcnkgZm9y
IHRoZSBzdG9yYWdlCi0gKiBvZiBpdHMgc3RhdGUgYXJyYXkuIEZvciBleGFtcGxlLCBcbGFnZ2Vk
X2ZpYm9uYWNjaTYwNyByZXF1aXJlcyBhYm91dAotICogNDg1NiBieXRlcyBhbmQgXGxhZ2dlZF9m
aWJvbmFjY2k0NDQ5NyByZXF1aXJlcyBhYm91dCAzNTAgS0J5dGVzLgotICovCi10ZW1wbGF0ZTxj
bGFzcyBSZWFsVHlwZSwgaW50IHcsIHVuc2lnbmVkIGludCBwLCB1bnNpZ25lZCBpbnQgcT4KLWNs
YXNzIGxhZ2dlZF9maWJvbmFjY2lfMDFfZW5naW5lCi17Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBS
ZWFsVHlwZSByZXN1bHRfdHlwZTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgaGFz
X2ZpeGVkX3JhbmdlID0gZmFsc2UpOwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHdv
cmRfc2l6ZSA9IHcpOwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVCh1bnNpZ25lZCBpbnQsIGxv
bmdfbGFnID0gcCk7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHVuc2lnbmVkIGludCwgc2hv
cnRfbGFnID0gcSk7Ci0KLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vc3Q6OnVpbnQzMl90
LCBkZWZhdWx0X3NlZWQgPSAzMzF1KTsKLQotICAgIC8qKiBDb25zdHJ1Y3RzIGEgQGMgbGFnZ2Vk
X2ZpYm9uYWNjaV8wMSBnZW5lcmF0b3IgYW5kIGNhbGxzIEBjIHNlZWQoKS4gKi8KLSAgICBsYWdn
ZWRfZmlib25hY2NpXzAxX2VuZ2luZSgpIHsgc2VlZCgpOyB9Ci0gICAgLyoqIENvbnN0cnVjdHMg
YSBAYyBsYWdnZWRfZmlib25hY2NpXzAxIGdlbmVyYXRvciBhbmQgY2FsbHMgQGMgc2VlZCh2YWx1
ZSkuICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9BUklUSE1FVElDX0NPTlNUUlVDVE9SKGxh
Z2dlZF9maWJvbmFjY2lfMDFfZW5naW5lLCB1aW50MzJfdCwgdmFsdWUpCi0gICAgeyBzZWVkKHZh
bHVlKTsgfQotICAgIC8qKiBDb25zdHJ1Y3RzIGEgQGMgbGFnZ2VkX2ZpYm9uYWNjaV8wMSBnZW5l
cmF0b3IgYW5kIGNhbGxzIEBjIHNlZWQoZ2VuKS4gKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlM
X1NFRURfU0VRX0NPTlNUUlVDVE9SKGxhZ2dlZF9maWJvbmFjY2lfMDFfZW5naW5lLCBTZWVkU2Vx
LCBzZXEpCi0gICAgeyBzZWVkKHNlcSk7IH0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBJdD4gbGFnZ2Vk
X2ZpYm9uYWNjaV8wMV9lbmdpbmUoSXQmIGZpcnN0LCBJdCBsYXN0KQotICAgIHsgc2VlZChmaXJz
dCwgbGFzdCk7IH0KLQotICAgIC8vIGNvbXBpbGVyLWdlbmVyYXRlZCBjb3B5IGN0b3IgYW5kIGFz
c2lnbm1lbnQgb3BlcmF0b3IgYXJlIGZpbmUKLQotICAgIC8qKiBDYWxscyBzZWVkKGRlZmF1bHRf
c2VlZCkuICovCi0gICAgdm9pZCBzZWVkKCkgeyBzZWVkKGRlZmF1bHRfc2VlZCk7IH0KLQotICAg
IC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBcbWluc3RkX3JhbmQwIGdlbmVyYXRvciB3aXRoIHRo
ZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIKLSAgICAgKiB2YWx1ZSBhbmQgY2FsbHMgc2VlZCB3aXRo
IGl0LiBEaXN0aW5jdCBzZWVkcyBpbiB0aGUgcmFuZ2UKLSAgICAgKiBbMSwgMjE0NzQ4MzY0Nykg
d2lsbCBwcm9kdWNlIGdlbmVyYXRvcnMgd2l0aCBkaWZmZXJlbnQgc3RhdGVzLiBPdGhlcgotICAg
ICAqIHNlZWRzIHdpbGwgYmUgZXF1aXZhbGVudCB0byBzb21lIHNlZWQgd2l0aGluIHRoaXMgcmFu
Z2UuIFNlZQotICAgICAqIFxsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZSBmb3IgZGV0YWlscy4K
LSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0FSSVRITUVUSUNfU0VFRChsYWdnZWRf
Zmlib25hY2NpXzAxX2VuZ2luZSwgYm9vc3Q6OnVpbnQzMl90LCB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIG1pbnN0ZF9yYW5kMCBpbnRnZW4odmFsdWUpOwotICAgICAgICBkZXRhaWw6OmdlbmVyYXRv
cl9zZWVkX3NlcTxtaW5zdGRfcmFuZDA+IGdlbihpbnRnZW4pOwotICAgICAgICBzZWVkKGdlbik7
Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VlZHMgdGhpcyBAYyBsYWdnZWRfZmlib25hY2Np
XzAxX2VuZ2luZSB1c2luZyB2YWx1ZXMgcHJvZHVjZWQgYnkKLSAgICAgKiBAYyBzZXEuZ2VuZXJh
dGUuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9TRUVEX1NFUV9TRUVEKGxhZ2dl
ZF9maWJvbmFjY2lfMDFfZW5naW5lLCBTZWVkU2VxLCBzZXEpCi0gICAgewotICAgICAgICBkZXRh
aWw6OnNlZWRfYXJyYXlfcmVhbDx3PihzZXEsIHgpOwotICAgICAgICBpID0gbG9uZ19sYWc7Ci0g
ICAgfQotCi0gICAgLyoqCi0gICAgICogU2VlZHMgdGhpcyBAYyBsYWdnZWRfZmlib25hY2NpXzAx
X2VuZ2luZSB1c2luZyB2YWx1ZXMgZnJvbSB0aGUKLSAgICAgKiBpdGVyYXRvciByYW5nZSBbZmly
c3QsIGxhc3QpLiAgSWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggZWxlbWVudHMKLSAgICAgKiBpbiB0
aGUgcmFuZ2UsIHRocm93cyBAYyBzdGQ6OmludmFsaWRfYXJndW1lbnQuCi0gICAgICovCi0gICAg
dGVtcGxhdGU8Y2xhc3MgSXQ+Ci0gICAgdm9pZCBzZWVkKEl0JiBmaXJzdCwgSXQgbGFzdCkKLSAg
ICB7Ci0gICAgICAgIGRldGFpbDo6ZmlsbF9hcnJheV9yZWFsPHc+KGZpcnN0LCBsYXN0LCB4KTsK
LSAgICAgICAgaSA9IGxvbmdfbGFnOwotICAgIH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBzbWFs
bGVzdCB2YWx1ZSB0aGF0IHRoZSBnZW5lcmF0b3IgY2FuIHByb2R1Y2UuICovCi0gICAgc3RhdGlj
IHJlc3VsdF90eXBlIG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKSB7IHJl
dHVybiByZXN1bHRfdHlwZSgwKTsgfQotICAgIC8qKiBSZXR1cm5zIHRoZSB1cHBlciBib3VuZCBv
ZiB0aGUgZ2VuZXJhdG9ycyBvdXRwdXRzLiAqLwotICAgIHN0YXRpYyByZXN1bHRfdHlwZSBtYXgg
Qk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgeyByZXR1cm4gcmVzdWx0X3R5cGUo
MSk7IH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBuZXh0IHZhbHVlIG9mIHRoZSBnZW5lcmF0b3Iu
ICovCi0gICAgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKSgpCi0gICAgewotICAgICAgICBpZihpID49
IGxvbmdfbGFnKQotICAgICAgICAgICAgZmlsbCgpOwotICAgICAgICByZXR1cm4geFtpKytdOwot
ICAgIH0KLQotICAgIC8qKiBGaWxscyBhIHJhbmdlIHdpdGggcmFuZG9tIHZhbHVlcyAqLwotICAg
IHRlbXBsYXRlPGNsYXNzIEl0ZXI+Ci0gICAgdm9pZCBnZW5lcmF0ZShJdGVyIGZpcnN0LCBJdGVy
IGxhc3QpCi0gICAgeyByZXR1cm4gZGV0YWlsOjpnZW5lcmF0ZV9mcm9tX3JlYWwoKnRoaXMsIGZp
cnN0LCBsYXN0KTsgfQotCi0gICAgLyoqIEFkdmFuY2VzIHRoZSBzdGF0ZSBvZiB0aGUgZ2VuZXJh
dG9yIGJ5IEBjIHouICovCi0gICAgdm9pZCBkaXNjYXJkKGJvb3N0Ojp1aW50bWF4X3QgeikKLSAg
ICB7Ci0gICAgICAgIGZvcihib29zdDo6dWludG1heF90IGogPSAwOyBqIDwgejsgKytqKSB7Ci0g
ICAgICAgICAgICAoKnRoaXMpKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAg
KiBXcml0ZXMgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdlbmVyYXRvciB0byBh
IEBjIHN0ZDo6b3N0cmVhbS4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX09TVFJF
QU1fT1BFUkFUT1Iob3MsIGxhZ2dlZF9maWJvbmFjY2lfMDFfZW5naW5lLCBmKQotICAgIHsKLSAg
ICAgICAgLy8gYWxsb3cgZm9yIEtvZW5pZyBsb29rdXAKLSAgICAgICAgdXNpbmcgc3RkOjpwb3c7
Ci0gICAgICAgIG9zIDw8IGYuaTsKLSAgICAgICAgc3RkOjppb3NfYmFzZTo6Zm10ZmxhZ3Mgb2xk
ZmxhZ3MgPSBvcy5mbGFncyhvcy5kZWMgfCBvcy5maXhlZCB8IG9zLmxlZnQpOwotICAgICAgICBm
b3IodW5zaWduZWQgaW50IGogPSAwOyBqIDwgZi5sb25nX2xhZzsgKytqKQotICAgICAgICAgICAg
b3MgPDwgJyAnIDw8IGYueFtqXSAqIGYubW9kdWx1cygpOwotICAgICAgICBvcy5mbGFncyhvbGRm
bGFncyk7Ci0gICAgICAgIHJldHVybiBvczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWFk
cyB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2VuZXJhdG9yIGZyb20gYSBAYyBz
dGQ6OmlzdHJlYW0uCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09Q
RVJBVE9SKGlzLCBsYWdnZWRfZmlib25hY2NpXzAxX2VuZ2luZSwgZikKLSAgICB7Ci0gICAgICAg
IGlzID4+IGYuaTsKLSAgICAgICAgZm9yKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGYubG9uZ19s
YWc7ICsraikgewotICAgICAgICAgICAgdHlwZW5hbWUgbGFnZ2VkX2ZpYm9uYWNjaV8wMV9lbmdp
bmU6OnJlc3VsdF90eXBlIHZhbHVlOwotICAgICAgICAgICAgaXMgPj4gc3RkOjp3cyA+PiB2YWx1
ZTsKLSAgICAgICAgICAgIGYueFtqXSA9IHZhbHVlIC8gZi5tb2R1bHVzKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGlzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1
ZSBpZiB0aGUgdHdvIGdlbmVyYXRvcnMgd2lsbCBwcm9kdWNlIGlkZW50aWNhbAotICAgICAqIHNl
cXVlbmNlcyBvZiBvdXRwdXRzLgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfRVFV
QUxJVFlfT1BFUkFUT1IobGFnZ2VkX2ZpYm9uYWNjaV8wMV9lbmdpbmUsIHhfLCB5XykKLSAgICB7
IHJldHVybiB4Xy5pID09IHlfLmkgJiYgc3RkOjplcXVhbCh4Xy54LCB4Xy54K2xvbmdfbGFnLCB5
Xy54KTsgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gZ2VuZXJh
dG9ycyB3aWxsIHByb2R1Y2UgZGlmZmVyZW50Ci0gICAgICogc2VxdWVuY2VzIG9mIG91dHB1dHMu
Ci0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKGxh
Z2dlZF9maWJvbmFjY2lfMDFfZW5naW5lKQotCi1wcml2YXRlOgotICAgIC8vLyBcY29uZCBzaG93
X3ByaXZhdGUKLSAgICB2b2lkIGZpbGwoKTsKLSAgICBzdGF0aWMgUmVhbFR5cGUgbW9kdWx1cygp
Ci0gICAgewotICAgICAgICB1c2luZyBzdGQ6OnBvdzsKLSAgICAgICAgcmV0dXJuIHBvdyhSZWFs
VHlwZSgyKSwgd29yZF9zaXplKTsKLSAgICB9Ci0gICAgLy8vIFxlbmRjb25kCi0gICAgdW5zaWdu
ZWQgaW50IGk7Ci0gICAgUmVhbFR5cGUgeFtsb25nX2xhZ107Ci19OwotCi0jaWZuZGVmIEJPT1NU
X05PX0lOQ0xBU1NfTUVNQkVSX0lOSVRJQUxJWkFUSU9OCi0vLyAgQSBkZWZpbml0aW9uIGlzIHJl
cXVpcmVkIGV2ZW4gZm9yIGludGVncmFsIHN0YXRpYyBjb25zdGFudHMKLXRlbXBsYXRlPGNsYXNz
IFJlYWxUeXBlLCBpbnQgdywgdW5zaWduZWQgaW50IHAsIHVuc2lnbmVkIGludCBxPgotY29uc3Qg
Ym9vbCBsYWdnZWRfZmlib25hY2NpXzAxX2VuZ2luZTxSZWFsVHlwZSwgdywgcCwgcT46Omhhc19m
aXhlZF9yYW5nZTsKLXRlbXBsYXRlPGNsYXNzIFJlYWxUeXBlLCBpbnQgdywgdW5zaWduZWQgaW50
IHAsIHVuc2lnbmVkIGludCBxPgotY29uc3QgdW5zaWduZWQgaW50IGxhZ2dlZF9maWJvbmFjY2lf
MDFfZW5naW5lPFJlYWxUeXBlLCB3LCBwLCBxPjo6bG9uZ19sYWc7Ci10ZW1wbGF0ZTxjbGFzcyBS
ZWFsVHlwZSwgaW50IHcsIHVuc2lnbmVkIGludCBwLCB1bnNpZ25lZCBpbnQgcT4KLWNvbnN0IHVu
c2lnbmVkIGludCBsYWdnZWRfZmlib25hY2NpXzAxX2VuZ2luZTxSZWFsVHlwZSwgdywgcCwgcT46
OnNob3J0X2xhZzsKLXRlbXBsYXRlPGNsYXNzIFJlYWxUeXBlLCBpbnQgdywgdW5zaWduZWQgaW50
IHAsIHVuc2lnbmVkIGludCBxPgotY29uc3QgaW50IGxhZ2dlZF9maWJvbmFjY2lfMDFfZW5naW5l
PFJlYWxUeXBlLHcscCxxPjo6d29yZF9zaXplOwotdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGUsIGlu
dCB3LCB1bnNpZ25lZCBpbnQgcCwgdW5zaWduZWQgaW50IHE+Ci1jb25zdCBib29zdDo6dWludDMy
X3QgbGFnZ2VkX2ZpYm9uYWNjaV8wMV9lbmdpbmU8UmVhbFR5cGUsdyxwLHE+OjpkZWZhdWx0X3Nl
ZWQ7Ci0jZW5kaWYKLQotLy8vIFxjb25kIHNob3dfcHJpdmF0ZQotdGVtcGxhdGU8Y2xhc3MgUmVh
bFR5cGUsIGludCB3LCB1bnNpZ25lZCBpbnQgcCwgdW5zaWduZWQgaW50IHE+Ci12b2lkIGxhZ2dl
ZF9maWJvbmFjY2lfMDFfZW5naW5lPFJlYWxUeXBlLCB3LCBwLCBxPjo6ZmlsbCgpCi17Ci0gICAg
Ly8gdHdvIGxvb3BzIHRvIGF2b2lkIGNvc3RseSBtb2R1bG8gb3BlcmF0aW9ucwotICAgIHsgIC8v
IGV4dHJhIHNjb3BlIGZvciBNU1ZDIGJyb2tlbm5lc3Mgdy5yLnQuIGZvciBzY29wZQotICAgIGZv
cih1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBzaG9ydF9sYWc7ICsraikgewotICAgICAgICBSZWFs
VHlwZSB0ID0geFtqXSArIHhbaisobG9uZ19sYWctc2hvcnRfbGFnKV07Ci0gICAgICAgIGlmKHQg
Pj0gUmVhbFR5cGUoMSkpCi0gICAgICAgICAgICB0IC09IFJlYWxUeXBlKDEpOwotICAgICAgICB4
W2pdID0gdDsKLSAgICB9Ci0gICAgfQotICAgIGZvcih1bnNpZ25lZCBpbnQgaiA9IHNob3J0X2xh
ZzsgaiA8IGxvbmdfbGFnOyArK2opIHsKLSAgICAgICAgUmVhbFR5cGUgdCA9IHhbal0gKyB4W2ot
c2hvcnRfbGFnXTsKLSAgICAgICAgaWYodCA+PSBSZWFsVHlwZSgxKSkKLSAgICAgICAgICAgIHQg
LT0gUmVhbFR5cGUoMSk7Ci0gICAgICAgIHhbal0gPSB0OwotICAgIH0KLSAgICBpID0gMDsKLX0K
LS8vLyBcZW5kY29uZAotCi0vLy8gXGNvbmQgc2hvd19kZXByZWNhdGVkCi0KLS8vIHByb3ZpZGVk
IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGUsIGlu
dCB3LCB1bnNpZ25lZCBpbnQgcCwgdW5zaWduZWQgaW50IHE+Ci1jbGFzcyBsYWdnZWRfZmlib25h
Y2NpXzAxIDogcHVibGljIGxhZ2dlZF9maWJvbmFjY2lfMDFfZW5naW5lPFJlYWxUeXBlLCB3LCBw
LCBxPgotewotICAgIHR5cGVkZWYgbGFnZ2VkX2ZpYm9uYWNjaV8wMV9lbmdpbmU8UmVhbFR5cGUs
IHcsIHAsIHE+IGJhc2VfdHlwZTsKLXB1YmxpYzoKLSAgICBsYWdnZWRfZmlib25hY2NpXzAxKCkg
e30KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0FSSVRITUVUSUNfQ09OU1RSVUNUT1IobGFnZ2Vk
X2ZpYm9uYWNjaV8wMSwgYm9vc3Q6OnVpbnQzMl90LCB2YWwpCi0gICAgeyB0aGlzLT5zZWVkKHZh
bCk7IH0KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX1NFRURfU0VRX0NPTlNUUlVDVE9SKGxhZ2dl
ZF9maWJvbmFjY2lfMDEsIFNlZWRTZXEsIHNlcSkKLSAgICB7IHRoaXMtPnNlZWQoc2VxKTsgfQot
ICAgIHRlbXBsYXRlPGNsYXNzIEl0PgotICAgIGxhZ2dlZF9maWJvbmFjY2lfMDEoSXQmIGZpcnN0
LCBJdCBsYXN0KSA6IGJhc2VfdHlwZShmaXJzdCwgbGFzdCkge30KLX07Ci0KLS8vLyBcZW5kY29u
ZAotCi1uYW1lc3BhY2UgZGV0YWlsIHsKLQotdGVtcGxhdGU8Y2xhc3MgRW5naW5lPgotc3RydWN0
IGdlbmVyYXRvcl9iaXRzOwotCi10ZW1wbGF0ZTxjbGFzcyBSZWFsVHlwZSwgaW50IHcsIHVuc2ln
bmVkIGludCBwLCB1bnNpZ25lZCBpbnQgcT4KLXN0cnVjdCBnZW5lcmF0b3JfYml0czxsYWdnZWRf
Zmlib25hY2NpXzAxX2VuZ2luZTxSZWFsVHlwZSwgdywgcCwgcT4gPgotewotICAgIHN0YXRpYyBz
dGQ6OnNpemVfdCB2YWx1ZSgpIHsgcmV0dXJuIHc7IH0KLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFJl
YWxUeXBlLCBpbnQgdywgdW5zaWduZWQgaW50IHAsIHVuc2lnbmVkIGludCBxPgotc3RydWN0IGdl
bmVyYXRvcl9iaXRzPGxhZ2dlZF9maWJvbmFjY2lfMDE8UmVhbFR5cGUsIHcsIHAsIHE+ID4KLXsK
LSAgICBzdGF0aWMgc3RkOjpzaXplX3QgdmFsdWUoKSB7IHJldHVybiB3OyB9Ci19OwotCi19Ci0K
LSNpZmRlZiBCT09TVF9SQU5ET01fRE9YWUdFTgotbmFtZXNwYWNlIGRldGFpbCB7Ci0vKioKLSAq
IFRoZSBzcGVjaWFsaXphdGlvbnMgbGFnZ2VkX2ZpYm9uYWNjaTYwNyAuLi4gbGFnZ2VkX2ZpYm9u
YWNjaTQ0NDk3Ci0gKiB1c2Ugd2VsbCB0ZXN0ZWQgbGFncy4KLSAqCi0gKiBTZWUKLSAqCi0gKiAg
QGJsb2NrcXVvdGUKLSAqICAiT24gdGhlIFBlcmlvZHMgb2YgR2VuZXJhbGl6ZWQgRmlib25hY2Np
IFJlY3VycmVuY2VzIiwgUmljaGFyZCBQLiBCcmVudAotICogIENvbXB1dGVyIFNjaWVuY2VzIExh
Ym9yYXRvcnkgQXVzdHJhbGlhbiBOYXRpb25hbCBVbml2ZXJzaXR5LCBEZWNlbWJlciAxOTkyCi0g
KiAgQGVuZGJsb2NrcXVvdGUKLSAqCi0gKiBUaGUgbGFncyB1c2VkIGhlcmUgY2FuIGJlIGZvdW5k
IGluCi0gKgotICogIEBibG9ja3F1b3RlCi0gKiAgIlVuaWZvcm0gcmFuZG9tIG51bWJlciBnZW5l
cmF0b3JzIGZvciBzdXBlcmNvbXB1dGVycyIsIFJpY2hhcmQgQnJlbnQsCi0gKiAgUHJvYy4gb2Yg
RmlmdGggQXVzdHJhbGlhbiBTdXBlcmNvbXB1dGVyIENvbmZlcmVuY2UsIE1lbGJvdXJuZSwKLSAq
ICBEZWMuIDE5OTIsIHBwLiA3MDQtNzA2LgotICogIEBlbmRibG9ja3F1b3RlCi0gKi8KLXN0cnVj
dCBsYWdnZWRfZmlib25hY2NpX2RvYyB7fTsKLX0KLSNlbmRpZgotCi0vKiogQGNvcHlkb2MgYm9v
c3Q6OnJhbmRvbTo6ZGV0YWlsOjpsYWdnZWRfZmlib25hY2NpX2RvYyAqLwotdHlwZWRlZiBsYWdn
ZWRfZmlib25hY2NpXzAxX2VuZ2luZTxkb3VibGUsIDQ4LCA2MDcsIDI3Mz4gbGFnZ2VkX2ZpYm9u
YWNjaTYwNzsKLS8qKiBAY29weWRvYyBib29zdDo6cmFuZG9tOjpkZXRhaWw6OmxhZ2dlZF9maWJv
bmFjY2lfZG9jICovCi10eXBlZGVmIGxhZ2dlZF9maWJvbmFjY2lfMDFfZW5naW5lPGRvdWJsZSwg
NDgsIDEyNzksIDQxOD4gbGFnZ2VkX2ZpYm9uYWNjaTEyNzk7Ci0vKiogQGNvcHlkb2MgYm9vc3Q6
OnJhbmRvbTo6ZGV0YWlsOjpsYWdnZWRfZmlib25hY2NpX2RvYyAqLwotdHlwZWRlZiBsYWdnZWRf
Zmlib25hY2NpXzAxX2VuZ2luZTxkb3VibGUsIDQ4LCAyMjgxLCAxMjUyPiBsYWdnZWRfZmlib25h
Y2NpMjI4MTsKLS8qKiBAY29weWRvYyBib29zdDo6cmFuZG9tOjpkZXRhaWw6OmxhZ2dlZF9maWJv
bmFjY2lfZG9jICovCi10eXBlZGVmIGxhZ2dlZF9maWJvbmFjY2lfMDFfZW5naW5lPGRvdWJsZSwg
NDgsIDMyMTcsIDU3Nj4gbGFnZ2VkX2ZpYm9uYWNjaTMyMTc7Ci0vKiogQGNvcHlkb2MgYm9vc3Q6
OnJhbmRvbTo6ZGV0YWlsOjpsYWdnZWRfZmlib25hY2NpX2RvYyAqLwotdHlwZWRlZiBsYWdnZWRf
Zmlib25hY2NpXzAxX2VuZ2luZTxkb3VibGUsIDQ4LCA0NDIzLCAyMDk4PiBsYWdnZWRfZmlib25h
Y2NpNDQyMzsKLS8qKiBAY29weWRvYyBib29zdDo6cmFuZG9tOjpkZXRhaWw6OmxhZ2dlZF9maWJv
bmFjY2lfZG9jICovCi10eXBlZGVmIGxhZ2dlZF9maWJvbmFjY2lfMDFfZW5naW5lPGRvdWJsZSwg
NDgsIDk2ODksIDU1MDI+IGxhZ2dlZF9maWJvbmFjY2k5Njg5OwotLyoqIEBjb3B5ZG9jIGJvb3N0
OjpyYW5kb206OmRldGFpbDo6bGFnZ2VkX2ZpYm9uYWNjaV9kb2MgKi8KLXR5cGVkZWYgbGFnZ2Vk
X2ZpYm9uYWNjaV8wMV9lbmdpbmU8ZG91YmxlLCA0OCwgMTk5MzcsIDk4NDI+IGxhZ2dlZF9maWJv
bmFjY2kxOTkzNzsKLS8qKiBAY29weWRvYyBib29zdDo6cmFuZG9tOjpkZXRhaWw6OmxhZ2dlZF9m
aWJvbmFjY2lfZG9jICovCi10eXBlZGVmIGxhZ2dlZF9maWJvbmFjY2lfMDFfZW5naW5lPGRvdWJs
ZSwgNDgsIDIzMjA5LCAxMzQ3MD4gbGFnZ2VkX2ZpYm9uYWNjaTIzMjA5OwotLyoqIEBjb3B5ZG9j
IGJvb3N0OjpyYW5kb206OmRldGFpbDo6bGFnZ2VkX2ZpYm9uYWNjaV9kb2MgKi8KLXR5cGVkZWYg
bGFnZ2VkX2ZpYm9uYWNjaV8wMV9lbmdpbmU8ZG91YmxlLCA0OCwgNDQ0OTcsIDIxMDM0PiBsYWdn
ZWRfZmlib25hY2NpNDQ0OTc7Ci0KLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotCi11c2luZyByYW5k
b206OmxhZ2dlZF9maWJvbmFjY2k2MDc7Ci11c2luZyByYW5kb206OmxhZ2dlZF9maWJvbmFjY2kx
Mjc5OwotdXNpbmcgcmFuZG9tOjpsYWdnZWRfZmlib25hY2NpMjI4MTsKLXVzaW5nIHJhbmRvbTo6
bGFnZ2VkX2ZpYm9uYWNjaTMyMTc7Ci11c2luZyByYW5kb206OmxhZ2dlZF9maWJvbmFjY2k0NDIz
OwotdXNpbmcgcmFuZG9tOjpsYWdnZWRfZmlib25hY2NpOTY4OTsKLXVzaW5nIHJhbmRvbTo6bGFn
Z2VkX2ZpYm9uYWNjaTE5OTM3OwotdXNpbmcgcmFuZG9tOjpsYWdnZWRfZmlib25hY2NpMjMyMDk7
Ci11c2luZyByYW5kb206OmxhZ2dlZF9maWJvbmFjY2k0NDQ5NzsKLQotfSAvLyBuYW1lc3BhY2Ug
Ym9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9MQUdHRURfRklCT05BQ0NJX0hQUApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9t
L2xhcGxhY2VfZGlzdHJpYnV0aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3JhbmRvbS9sYXBsYWNlX2Rpc3RyaWJ1dGlvbi5ocHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGVjMTc2YTU5YzFmNWM0NTk3ZTI2ZDQyMDJhYjYzMDExYzAzYmQ0
MDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2xhcGxhY2VfZGlzdHJp
YnV0aW9uLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vKiBib29zdCByYW5k
b20vbGFwbGFjZV9kaXN0cmlidXRpb24uaHBwIGhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0
IFN0ZXZlbiBXYXRhbmFiZSAyMDE0Ci0gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29m
dHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2Vu
dCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotICoKLSAqICRJZCQKLSAqLwotCi0j
aWZuZGVmIEJPT1NUX1JBTkRPTV9MQVBMQUNFX0RJU1RSSUJVVElPTl9IUFAKLSNkZWZpbmUgQk9P
U1RfUkFORE9NX0xBUExBQ0VfRElTVFJJQlVUSU9OX0hQUAotCi0jaW5jbHVkZSA8Y2Fzc2VydD4K
LSNpbmNsdWRlIDxpc3RyZWFtPgotI2luY2x1ZGUgPGlvc2Z3ZD4KLSNpbmNsdWRlIDxib29zdC9y
YW5kb20vZGV0YWlsL29wZXJhdG9ycy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2V4cG9u
ZW50aWFsX2Rpc3RyaWJ1dGlvbi5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2Ug
cmFuZG9tIHsKLQotLyoqCi0gKiBUaGUgbGFwbGFjZSBkaXN0cmlidXRpb24gaXMgYSByZWFsLXZh
bHVlZCBkaXN0cmlidXRpb24gd2l0aAotICogdHdvIHBhcmFtZXRlcnMsIG1lYW4gYW5kIGJldGEu
Ci0gKgotICogSXQgaGFzIFxmJFxkaXNwbGF5c3R5bGUgcCh4KSA9IFxmcmFje2VeLXtcZnJhY3t8
eC1cbXV8fXtcYmV0YX19fXsyXGJldGF9XGYkLgotICovCi10ZW1wbGF0ZTxjbGFzcyBSZWFsVHlw
ZSA9IGRvdWJsZT4KLWNsYXNzIGxhcGxhY2VfZGlzdHJpYnV0aW9uIHsKLXB1YmxpYzoKLSAgICB0
eXBlZGVmIFJlYWxUeXBlIHJlc3VsdF90eXBlOwotICAgIHR5cGVkZWYgUmVhbFR5cGUgaW5wdXRf
dHlwZTsKLQotICAgIGNsYXNzIHBhcmFtX3R5cGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlw
ZWRlZiBsYXBsYWNlX2Rpc3RyaWJ1dGlvbiBkaXN0cmlidXRpb25fdHlwZTsKLQotICAgICAgICAv
KioKLSAgICAgICAgICogQ29uc3RydWN0cyBhIEBjIHBhcmFtX3R5cGUgZnJvbSB0aGUgIm1lYW4i
IGFuZCAiYmV0YSIgcGFyYW1ldGVycwotICAgICAgICAgKiBvZiB0aGUgZGlzdHJpYnV0aW9uLgot
ICAgICAgICAgKi8KLSAgICAgICAgZXhwbGljaXQgcGFyYW1fdHlwZShSZWFsVHlwZSBtZWFuX2Fy
ZyA9IFJlYWxUeXBlKDAuMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbFR5cGUg
YmV0YV9hcmcgPSBSZWFsVHlwZSgxLjApKQotICAgICAgICAgIDogX21lYW4obWVhbl9hcmcpLCBf
YmV0YShiZXRhX2FyZykKLSAgICAgICAge30KLQotICAgICAgICAvKiogUmV0dXJucyB0aGUgIm1l
YW4iIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnR1aW9uLiAqLwotICAgICAgICBSZWFsVHlwZSBt
ZWFuKCkgY29uc3QgeyByZXR1cm4gX21lYW47IH0KLSAgICAgICAgLyoqIFJldHVybnMgdGhlICJi
ZXRhIiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICAgICAgUmVhbFR5cGUg
YmV0YSgpIGNvbnN0IHsgcmV0dXJuIF9iZXRhOyB9Ci0KLSAgICAgICAgLyoqIFdyaXRlcyBhIEBj
IHBhcmFtX3R5cGUgdG8gYSBAYyBzdGQ6Om9zdHJlYW0uICovCi0gICAgICAgIEJPT1NUX1JBTkRP
TV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihvcywgcGFyYW1fdHlwZSwgcGFybSkKLSAgICAgICAg
eyBvcyA8PCBwYXJtLl9tZWFuIDw8ICcgJyA8PCBwYXJtLl9iZXRhOyByZXR1cm4gb3M7IH0KLQot
ICAgICAgICAvKiogUmVhZHMgYSBAYyBwYXJhbV90eXBlIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0u
ICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRPUihpcywgcGFy
YW1fdHlwZSwgcGFybSkKLSAgICAgICAgeyBpcyA+PiBwYXJtLl9tZWFuID4+IHN0ZDo6d3MgPj4g
cGFybS5fYmV0YTsgcmV0dXJuIGlzOyB9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0
aGUgdHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWUuICovCi0gICAgICAgIEJPT1NU
X1JBTkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IocGFyYW1fdHlwZSwgbGhzLCByaHMpCi0g
ICAgICAgIHsgcmV0dXJuIGxocy5fbWVhbiA9PSByaHMuX21lYW4gJiYgbGhzLl9iZXRhID09IHJo
cy5fYmV0YTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdv
IHNldHMgb2YgcGFyYW1ldGVycyBhcmUgdGhlIGRpZmZlcmVudC4gKi8KLSAgICAgICAgQk9PU1Rf
UkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKHBhcmFtX3R5cGUpCi0KLSAgICBwcml2
YXRlOgotICAgICAgICBSZWFsVHlwZSBfbWVhbjsKLSAgICAgICAgUmVhbFR5cGUgX2JldGE7Ci0g
ICAgfTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYW4gQGMgbGFwbGFjZV9kaXN0cmli
dXRpb24gZnJvbSBpdHMgIm1lYW4iIGFuZCAiYmV0YSIgcGFyYW1ldGVycy4KLSAgICAgKi8KLSAg
ICBleHBsaWNpdCBsYXBsYWNlX2Rpc3RyaWJ1dGlvbihSZWFsVHlwZSBtZWFuX2FyZyA9IFJlYWxU
eXBlKDAuMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbFR5cGUgYmV0YV9h
cmcgPSBSZWFsVHlwZSgxLjApKQotICAgICAgOiBfbWVhbihtZWFuX2FyZyksIF9iZXRhKGJldGFf
YXJnKQotICAgIHt9Ci0gICAgLyoqIENvbnN0cnVjdHMgYW4gQGMgbGFwbGFjZV9kaXN0cmlidXRp
b24gZnJvbSBpdHMgcGFyYW1ldGVycy4gKi8KLSAgICBleHBsaWNpdCBsYXBsYWNlX2Rpc3RyaWJ1
dGlvbihjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgICAgOiBfbWVhbihwYXJtLm1lYW4oKSks
IF9iZXRhKHBhcm0uYmV0YSgpKQotICAgIHt9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEg
cmFuZG9tIHZhcmlhdGUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZQotICAgICAqIGxhcGxh
Y2UgZGlzdHJpYnV0aW9uLgotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIFVSTkc+Ci0gICAg
UmVhbFR5cGUgb3BlcmF0b3IoKShVUk5HJiB1cm5nKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVh
bFR5cGUgZXhwb25lbnRpYWwgPSBleHBvbmVudGlhbF9kaXN0cmlidXRpb248UmVhbFR5cGU+KCko
dXJuZyk7Ci0gICAgICAgIGlmKHVuaWZvcm1fMDE8UmVhbFR5cGU+KCkodXJuZykgPCAwLjUpCi0g
ICAgICAgICAgICBleHBvbmVudGlhbCA9IC1leHBvbmVudGlhbDsKLSAgICAgICAgcmV0dXJuIF9t
ZWFuICsgX2JldGEgKiBleHBvbmVudGlhbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1
cm5zIGEgcmFuZG9tIHZhcmlhdGUgZGlzdHJpYnV0ZWQgYWNjb3JkaW50IHRvIHRoZSBsYXBsYWNl
Ci0gICAgICogZGlzdHJpYnV0aW9uIHdpdGggcGFyYW1ldGVycyBzcGVjaWZpZWQgYnkgQGMgcGFy
YW0uCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgVVJORz4KLSAgICBSZWFsVHlwZSBvcGVy
YXRvcigpKFVSTkcmIHVybmcsIGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0pIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbGFwbGFjZV9kaXN0cmlidXRpb24ocGFybSkodXJuZyk7Ci0gICAgfQot
Ci0gICAgLyoqIFJldHVybnMgdGhlICJtZWFuIiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlv
bi4gKi8KLSAgICBSZWFsVHlwZSBtZWFuKCkgY29uc3QgeyByZXR1cm4gX21lYW47IH0KLSAgICAv
KiogUmV0dXJucyB0aGUgImJldGEiIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwot
ICAgIFJlYWxUeXBlIGJldGEoKSBjb25zdCB7IHJldHVybiBfYmV0YTsgfQotCi0gICAgLyoqIFJl
dHVybnMgdGhlIHNtYWxsZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVj
ZS4gKi8KLSAgICBSZWFsVHlwZSBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04g
KCkgY29uc3QKLSAgICB7IHJldHVybiBSZWFsVHlwZSgtc3RkOjpudW1lcmljX2xpbWl0czxSZWFs
VHlwZT46OmluZmluaXR5KCkpOyB9Ci0gICAgLyoqIFJldHVybnMgdGhlIGxhcmdlc3QgdmFsdWUg
dGhhdCB0aGUgZGlzdHJpYnV0aW9uIGNhbiBwcm9kdWNlLiAqLwotICAgIFJlYWxUeXBlIG1heCBC
T09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKSBjb25zdAotICAgIHsgcmV0dXJuIFJl
YWxUeXBlKHN0ZDo6bnVtZXJpY19saW1pdHM8UmVhbFR5cGU+OjppbmZpbml0eSgpKTsgfQotCi0g
ICAgLyoqIFJldHVybnMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAg
ICBwYXJhbV90eXBlIHBhcmFtKCkgY29uc3QgeyByZXR1cm4gcGFyYW1fdHlwZShfbWVhbiwgX2Jl
dGEpOyB9Ci0gICAgLyoqIFNldHMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4g
Ki8KLSAgICB2b2lkIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0pCi0gICAgewotICAgICAg
ICBfbWVhbiA9IHBhcm0ubWVhbigpOwotICAgICAgICBfYmV0YSA9IHBhcm0uYmV0YSgpOwotICAg
IH0KLQotICAgIC8qKgotICAgICAqIEVmZmVjdHM6IFN1YnNlcXVlbnQgdXNlcyBvZiB0aGUgZGlz
dHJpYnV0aW9uIGRvIG5vdCBkZXBlbmQKLSAgICAgKiBvbiB2YWx1ZXMgcHJvZHVjZWQgYnkgYW55
IGVuZ2luZSBwcmlvciB0byBpbnZva2luZyByZXNldC4KLSAgICAgKi8KLSAgICB2b2lkIHJlc2V0
KCkgeyB9Ci0KLSAgICAvKiogV3JpdGVzIGFuIEBjIGxhcGxhY2VfZGlzdHJpYnV0aW9uIHRvIGEg
QGMgc3RkOjpvc3RyZWFtLiAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVS
QVRPUihvcywgbGFwbGFjZV9kaXN0cmlidXRpb24sIHdkKQotICAgIHsKLSAgICAgICAgb3MgPDwg
d2QucGFyYW0oKTsKLSAgICAgICAgcmV0dXJuIG9zOwotICAgIH0KLQotICAgIC8qKiBSZWFkcyBh
biBAYyBsYXBsYWNlX2Rpc3RyaWJ1dGlvbiBmcm9tIGEgQGMgc3RkOjppc3RyZWFtLiAqLwotICAg
IEJPT1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRPUihpcywgbGFwbGFjZV9kaXN0cmli
dXRpb24sIHdkKQotICAgIHsKLSAgICAgICAgcGFyYW1fdHlwZSBwYXJtOwotICAgICAgICBpZihp
cyA+PiBwYXJtKSB7Ci0gICAgICAgICAgICB3ZC5wYXJhbShwYXJtKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gaXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlm
IHRoZSB0d28gaW5zdGFuY2VzIG9mIEBjIGxhcGxhY2VfZGlzdHJpYnV0aW9uIHdpbGwKLSAgICAg
KiByZXR1cm4gaWRlbnRpY2FsIHNlcXVlbmNlcyBvZiB2YWx1ZXMgZ2l2ZW4gZXF1YWwgZ2VuZXJh
dG9ycy4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0VRVUFMSVRZX09QRVJBVE9S
KGxhcGxhY2VfZGlzdHJpYnV0aW9uLCBsaHMsIHJocykKLSAgICB7IHJldHVybiBsaHMuX21lYW4g
PT0gcmhzLl9tZWFuICYmIGxocy5fYmV0YSA9PSByaHMuX2JldGE7IH0KLSAgICAKLSAgICAvKioK
LSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBpbnN0YW5jZXMgb2YgQGMgbGFwbGFjZV9k
aXN0cmlidXRpb24gd2lsbAotICAgICAqIHJldHVybiBkaWZmZXJlbnQgc2VxdWVuY2VzIG9mIHZh
bHVlcyBnaXZlbiBlcXVhbCBnZW5lcmF0b3JzLgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9E
RVRBSUxfSU5FUVVBTElUWV9PUEVSQVRPUihsYXBsYWNlX2Rpc3RyaWJ1dGlvbikKLQotcHJpdmF0
ZToKLSAgICBSZWFsVHlwZSBfbWVhbjsKLSAgICBSZWFsVHlwZSBfYmV0YTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIHJhbmRvbQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NU
X1JBTkRPTV9MQVBMQUNFX0RJU1RSSUJVVElPTl9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9saW5lYXJfY29uZ3J1ZW50aWFs
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9s
aW5lYXJfY29uZ3J1ZW50aWFsLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUz
YTFkMDc0OTFkMDc4YzBjMTlhNWQ3YzkyYmI4MDcyZDY2Y2U0Ny4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9yYW5kb20vbGluZWFyX2NvbmdydWVudGlhbC5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSw0NjYgKzAsMCBAQAotLyogYm9vc3QgcmFuZG9tL2xpbmVhcl9jb25ncnVlbnRpYWwu
aHBwIGhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0IEplbnMgTWF1cmVyIDIwMDAtMjAwMQot
ICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24g
MS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICoKLSAqIFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9j
dW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgotICogUmV2aXNpb24gaGlzdG9yeQotICogIDIw
MDEtMDItMTggIG1vdmVkIHRvIGluZGl2aWR1YWwgaGVhZGVyIGZpbGVzCi0gKi8KLQotI2lmbmRl
ZiBCT09TVF9SQU5ET01fTElORUFSX0NPTkdSVUVOVElBTF9IUFAKLSNkZWZpbmUgQk9PU1RfUkFO
RE9NX0xJTkVBUl9DT05HUlVFTlRJQUxfSFBQCi0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNs
dWRlIDxzdGRleGNlcHQ+Ci0jaW5jbHVkZSA8Ym9vc3QvYXNzZXJ0LmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2NzdGRpbnQuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L2xpbWl0cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qvc3RhdGljX2Fzc2VydC5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvaW50ZWdlci9zdGF0aWNfbG9nMi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bXBsL2lmLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19hcml0aG1ldGljLmhw
cD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvcmFuZG9tL2RldGFpbC9jb25zdF9tb2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRv
bS9kZXRhaWwvc2VlZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9zZWVkX2lt
cGwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQotI2luY2x1
ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvZGlzYWJsZV93YXJuaW5ncy5ocHA+Ci0KLW5hbWVzcGFj
ZSBib29zdCB7Ci1uYW1lc3BhY2UgcmFuZG9tIHsKLQotLyoqCi0gKiBJbnN0YW50aWF0aW9ucyBv
ZiBjbGFzcyB0ZW1wbGF0ZSBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZSBtb2RlbCBhCi0gKiBc
cHNldWRvX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLiBMaW5lYXIgY29uZ3J1ZW50aWFsIHBzZXVk
by1yYW5kb20KLSAqIG51bWJlciBnZW5lcmF0b3JzIGFyZSBkZXNjcmliZWQgaW46Ci0gKgotICog
IEBibG9ja3F1b3RlCi0gKiAgIk1hdGhlbWF0aWNhbCBtZXRob2RzIGluIGxhcmdlLXNjYWxlIGNv
bXB1dGluZyB1bml0cyIsIEQuIEguIExlaG1lciwKLSAqICBQcm9jLiAybmQgU3ltcG9zaXVtIG9u
IExhcmdlLVNjYWxlIERpZ2l0YWwgQ2FsY3VsYXRpbmcgTWFjaGluZXMsCi0gKiAgSGFydmFyZCBV
bml2ZXJzaXR5IFByZXNzLCAxOTUxLCBwcC4gMTQxLTE0NgotICogIEBlbmRibG9ja3F1b3RlCi0g
KgotICogTGV0IHgobikgZGVub3RlIHRoZSBzZXF1ZW5jZSBvZiBudW1iZXJzIHJldHVybmVkIGJ5
IHNvbWUgcHNldWRvLXJhbmRvbQotICogbnVtYmVyIGdlbmVyYXRvci4gVGhlbiBmb3IgdGhlIGxp
bmVhciBjb25ncnVlbnRpYWwgZ2VuZXJhdG9yLAotICogeChuKzEpIDo9IChhICogeChuKSArIGMp
IG1vZCBtLiBQYXJhbWV0ZXJzIGZvciB0aGUgZ2VuZXJhdG9yIGFyZQotICogeCgwKSwgYSwgYywg
bS4gVGhlIHRlbXBsYXRlIHBhcmFtZXRlciBJbnRUeXBlIHNoYWxsIGRlbm90ZSBhbiBpbnRlZ3Jh
bAotICogdHlwZS4gSXQgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB2YWx1ZXMgYSwgYywg
YW5kIG0uIFRoZSB0ZW1wbGF0ZQotICogcGFyYW1ldGVycyBhIGFuZCBjIG11c3QgYmUgc21hbGxl
ciB0aGFuIG0uCi0gKgotICogTm90ZTogVGhlIHF1YWxpdHkgb2YgdGhlIGdlbmVyYXRvciBjcnVj
aWFsbHkgZGVwZW5kcyBvbiB0aGUgY2hvaWNlIG9mCi0gKiB0aGUgcGFyYW1ldGVycy4gVXNlciBj
b2RlIHNob3VsZCB1c2Ugb25lIG9mIHRoZSBzZW5zaWJseSBwYXJhbWV0ZXJpemVkCi0gKiBnZW5l
cmF0b3JzIHN1Y2ggYXMgbWluc3RkX3JhbmQgaW5zdGVhZC4KLSAqLwotdGVtcGxhdGU8Y2xhc3Mg
SW50VHlwZSwgSW50VHlwZSBhLCBJbnRUeXBlIGMsIEludFR5cGUgbT4KLWNsYXNzIGxpbmVhcl9j
b25ncnVlbnRpYWxfZW5naW5lCi17Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBJbnRUeXBlIHJlc3Vs
dF90eXBlOwotCi0gICAgLy8gUmVxdWlyZWQgZm9yIG9sZCBCb29zdC5SYW5kb20gY29uY2VwdAot
ICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCBoYXNfZml4ZWRfcmFuZ2UgPSBmYWxzZSk7
Ci0KLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoSW50VHlwZSwgbXVsdGlwbGllciA9IGEpOwot
ICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChJbnRUeXBlLCBpbmNyZW1lbnQgPSBjKTsKLSAgICBC
T09TVF9TVEFUSUNfQ09OU1RBTlQoSW50VHlwZSwgbW9kdWx1cyA9IG0pOwotICAgIEJPT1NUX1NU
QVRJQ19DT05TVEFOVChJbnRUeXBlLCBkZWZhdWx0X3NlZWQgPSAxKTsKLSAgICAKLSAgICBCT09T
VF9TVEFUSUNfQVNTRVJUKHN0ZDo6bnVtZXJpY19saW1pdHM8SW50VHlwZT46OmlzX2ludGVnZXIp
OwotICAgIEJPT1NUX1NUQVRJQ19BU1NFUlQobSA9PSAwIHx8IGEgPCBtKTsKLSAgICBCT09TVF9T
VEFUSUNfQVNTRVJUKG0gPT0gMCB8fCBjIDwgbSk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29u
c3RydWN0cyBhIEBjIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lLCB1c2luZyB0aGUgZGVmYXVs
dCBzZWVkCi0gICAgICovCi0gICAgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUoKSB7IHNlZWQo
KTsgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIEBjIGxpbmVhcl9jb25ncnVlbnRp
YWxfZW5naW5lLCBzZWVkaW5nIGl0IHdpdGggQGMgeDAuCi0gICAgICovCi0gICAgQk9PU1RfUkFO
RE9NX0RFVEFJTF9BUklUSE1FVElDX0NPTlNUUlVDVE9SKGxpbmVhcl9jb25ncnVlbnRpYWxfZW5n
aW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRU
eXBlLCB4MCkKLSAgICB7IHNlZWQoeDApOyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29uc3Ry
dWN0cyBhIEBjIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lLCBzZWVkaW5nIGl0IHdpdGggdmFs
dWVzCi0gICAgICogcHJvZHVjZWQgYnkgYSBjYWxsIHRvIEBjIHNlcS5nZW5lcmF0ZSgpLgotICAg
ICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfU0VFRF9TRVFfQ09OU1RSVUNUT1IobGluZWFy
X2NvbmdydWVudGlhbF9lbmdpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTZWVkU2VxLCBzZXEpCi0gICAgeyBzZWVkKHNlcSk7IH0KLQotICAgIC8qKgot
ICAgICAqIENvbnN0cnVjdHMgYSBAYyBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZSAgYW5kIHNl
ZWRzIGl0Ci0gICAgICogd2l0aCB2YWx1ZXMgdGFrZW4gZnJvbSB0aGUgaXRyYXRvciByYW5nZSBb
Zmlyc3QsIGxhc3QpCi0gICAgICogYW5kIGFkanVzdHMgZmlyc3QgdG8gcG9pbnQgdG8gdGhlIGVs
ZW1lbnQgYWZ0ZXIgdGhlIGxhc3Qgb25lCi0gICAgICogdXNlZC4gIElmIHRoZXJlIGFyZSBub3Qg
ZW5vdWdoIGVsZW1lbnRzLCB0aHJvd3MgQGMgc3RkOjppbnZhbGlkX2FyZ3VtZW50LgotICAgICAq
Ci0gICAgICogZmlyc3QgYW5kIGxhc3QgbXVzdCBiZSBpbnB1dCBpdGVyYXRvcnMuCi0gICAgICov
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+Ci0gICAgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUo
SXQmIGZpcnN0LCBJdCBsYXN0KQotICAgIHsKLSAgICAgICAgc2VlZChmaXJzdCwgbGFzdCk7Ci0g
ICAgfQotCi0gICAgLy8gY29tcGlsZXItZ2VuZXJhdGVkIGNvcHkgY29uc3RydWN0b3IgYW5kIGFz
c2lnbm1lbnQgb3BlcmF0b3IgYXJlIGZpbmUKLQotICAgIC8qKgotICAgICAqIENhbGxzIHNlZWQo
ZGVmYXVsdF9zZWVkKQotICAgICAqLwotICAgIHZvaWQgc2VlZCgpIHsgc2VlZChkZWZhdWx0X3Nl
ZWQpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBJZiBjIG1vZCBtIGlzIHplcm8gYW5kIHgwIG1vZCBt
IGlzIHplcm8sIGNoYW5nZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YKLSAgICAgKiB0aGUgZ2VuZXJh
dG9yIHRvIDEuIE90aGVyd2lzZSwgY2hhbmdlcyBpdCB0byB4MCBtb2QgbS4gSWYgYyBpcyB6ZXJv
LAotICAgICAqIGRpc3RpbmN0IHNlZWRzIGluIHRoZSByYW5nZSBbMSxtKSB3aWxsIGxlYXZlIHRo
ZSBnZW5lcmF0b3IgaW4gZGlzdGluY3QKLSAgICAgKiBzdGF0ZXMuIElmIGMgaXMgbm90IHplcm8s
IHRoZSByYW5nZSBpcyBbMCxtKS4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0FS
SVRITUVUSUNfU0VFRChsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZSwgSW50VHlwZSwgeDApCi0g
ICAgewotICAgICAgICAvLyB3cmFwIF94IGlmIGl0IGRvZXNuJ3QgZml0IGluIHRoZSBkZXN0aW5h
dGlvbgotICAgICAgICBpZihtb2R1bHVzID09IDApIHsKLSAgICAgICAgICAgIF94ID0geDA7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBfeCA9IHgwICUgbW9kdWx1czsKLSAgICAgICAg
fQotICAgICAgICAvLyBoYW5kbGUgbmVnYXRpdmUgc2VlZHMKLSAgICAgICAgaWYoX3ggPD0gMCAm
JiBfeCAhPSAwKSB7Ci0gICAgICAgICAgICBfeCArPSBtb2R1bHVzOwotICAgICAgICB9Ci0gICAg
ICAgIC8vIGFkanVzdCB0byB0aGUgY29ycmVjdCByYW5nZQotICAgICAgICBpZihpbmNyZW1lbnQg
PT0gMCAmJiBfeCA9PSAwKSB7Ci0gICAgICAgICAgICBfeCA9IDE7Ci0gICAgICAgIH0KLSAgICAg
ICAgQk9PU1RfQVNTRVJUKF94ID49IChtaW4pKCkpOwotICAgICAgICBCT09TVF9BU1NFUlQoX3gg
PD0gKG1heCkoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VlZHMgYSBAYyBsaW5lYXJf
Y29uZ3J1ZW50aWFsX2VuZ2luZSB1c2luZyB2YWx1ZXMgZnJvbSBhIFNlZWRTZXEuCi0gICAgICov
Ci0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9TRUVEX1NFUV9TRUVEKGxpbmVhcl9jb25ncnVlbnRp
YWxfZW5naW5lLCBTZWVkU2VxLCBzZXEpCi0gICAgeyBzZWVkKGRldGFpbDo6c2VlZF9vbmVfaW50
PEludFR5cGUsIG0+KHNlcSkpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBzZWVkcyBhIEBjIGxpbmVh
cl9jb25ncnVlbnRpYWxfZW5naW5lIHdpdGggdmFsdWVzIHRha2VuCi0gICAgICogZnJvbSB0aGUg
aXRyYXRvciByYW5nZSBbZmlyc3QsIGxhc3QpIGFuZCBhZGp1c3RzIEBjIGZpcnN0IHRvCi0gICAg
ICogcG9pbnQgdG8gdGhlIGVsZW1lbnQgYWZ0ZXIgdGhlIGxhc3Qgb25lIHVzZWQuICBJZiB0aGVy
ZSBhcmUKLSAgICAgKiBub3QgZW5vdWdoIGVsZW1lbnRzLCB0aHJvd3MgQGMgc3RkOjppbnZhbGlk
X2FyZ3VtZW50LgotICAgICAqCi0gICAgICogQGMgZmlyc3QgYW5kIEBjIGxhc3QgbXVzdCBiZSBp
bnB1dCBpdGVyYXRvcnMuCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+Ci0gICAgdm9p
ZCBzZWVkKEl0JiBmaXJzdCwgSXQgbGFzdCkKLSAgICB7IHNlZWQoZGV0YWlsOjpnZXRfb25lX2lu
dDxJbnRUeXBlLCBtPihmaXJzdCwgbGFzdCkpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5z
IHRoZSBzbWFsbGVzdCB2YWx1ZSB0aGF0IHRoZSBAYyBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2lu
ZQotICAgICAqIGNhbiBwcm9kdWNlLgotICAgICAqLwotICAgIHN0YXRpYyByZXN1bHRfdHlwZSBt
aW4gQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkKLSAgICB7IHJldHVybiBjID09
IDAgPyAxIDogMDsgfQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxhcmdlc3QgdmFsdWUg
dGhhdCB0aGUgQGMgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUKLSAgICAgKiBjYW4gcHJvZHVj
ZS4KLSAgICAgKi8KLSAgICBzdGF0aWMgcmVzdWx0X3R5cGUgbWF4IEJPT1NUX1BSRVZFTlRfTUFD
Uk9fU1VCU1RJVFVUSU9OICgpCi0gICAgeyByZXR1cm4gbW9kdWx1cy0xOyB9Ci0KLSAgICAvKiog
UmV0dXJucyB0aGUgbmV4dCB2YWx1ZSBvZiB0aGUgQGMgbGluZWFyX2NvbmdydWVudGlhbF9lbmdp
bmUuICovCi0gICAgSW50VHlwZSBvcGVyYXRvcigpKCkKLSAgICB7Ci0gICAgICAgIF94ID0gY29u
c3RfbW9kPEludFR5cGUsIG0+OjptdWx0X2FkZChhLCBfeCwgYyk7Ci0gICAgICAgIHJldHVybiBf
eDsKLSAgICB9Ci0gIAotICAgIC8qKiBGaWxscyBhIHJhbmdlIHdpdGggcmFuZG9tIHZhbHVlcyAq
LwotICAgIHRlbXBsYXRlPGNsYXNzIEl0ZXI+Ci0gICAgdm9pZCBnZW5lcmF0ZShJdGVyIGZpcnN0
LCBJdGVyIGxhc3QpCi0gICAgeyBkZXRhaWw6OmdlbmVyYXRlX2Zyb21faW50KCp0aGlzLCBmaXJz
dCwgbGFzdCk7IH0KLQotICAgIC8qKiBBZHZhbmNlcyB0aGUgc3RhdGUgb2YgdGhlIGdlbmVyYXRv
ciBieSBAYyB6LiAqLwotICAgIHZvaWQgZGlzY2FyZChib29zdDo6dWludG1heF90IHopCi0gICAg
ewotICAgICAgICB0eXBlZGVmIGNvbnN0X21vZDxJbnRUeXBlLCBtPiBtb2RfdHlwZTsKLSAgICAg
ICAgSW50VHlwZSBiX2ludiA9IG1vZF90eXBlOjppbnZlcnQoYS0xKTsKLSAgICAgICAgSW50VHlw
ZSBiX2djZCA9IG1vZF90eXBlOjptdWx0KGEtMSwgYl9pbnYpOwotICAgICAgICBpZihiX2djZCA9
PSAxKSB7Ci0gICAgICAgICAgICBJbnRUeXBlIGFfeiA9IG1vZF90eXBlOjpwb3coYSwgeik7Ci0g
ICAgICAgICAgICBfeCA9IG1vZF90eXBlOjptdWx0X2FkZChhX3osIF94LCAKLSAgICAgICAgICAg
ICAgICBtb2RfdHlwZTo6bXVsdChtb2RfdHlwZTo6bXVsdChjLCBiX2ludiksIGFfeiAtIDEpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGNvbXB1dGUgKGFeeiAtIDEpKmMgJSAo
Yl9nY2QgKiBtKSAvIChiIC8gYl9nY2QpICogaW52KGIgLyBiX2djZCkKLSAgICAgICAgICAgIC8v
IHdlJ3JlIHN0b3JpbmcgdGhlIGludGVybWVkaWF0ZSByZXN1bHQgLyBiX2djZAotICAgICAgICAg
ICAgSW50VHlwZSBhX3ptMV9vdmVyX2djZCA9IDA7Ci0gICAgICAgICAgICBJbnRUeXBlIGFfa20x
X292ZXJfZ2NkID0gKGEgLSAxKSAvIGJfZ2NkOwotICAgICAgICAgICAgYm9vc3Q6OnVpbnRtYXhf
dCBleHBvbmVudCA9IHo7Ci0gICAgICAgICAgICB3aGlsZShleHBvbmVudCAhPSAwKSB7Ci0gICAg
ICAgICAgICAgICAgaWYoZXhwb25lbnQgJSAyID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
YV96bTFfb3Zlcl9nY2QgPQotICAgICAgICAgICAgICAgICAgICAgICAgbW9kX3R5cGU6Om11bHRf
YWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJfZ2NkLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1vZF90eXBlOjptdWx0KGFfem0xX292ZXJfZ2NkLCBhX2ttMV9vdmVyX2dj
ZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kX3R5cGU6OmFkZChhX3ptMV9vdmVy
X2djZCwgYV9rbTFfb3Zlcl9nY2QpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYV9rbTFfb3Zlcl9nY2QgPSBtb2RfdHlwZTo6bXVsdF9hZGQoCi0gICAgICAgICAgICAgICAg
ICAgIGJfZ2NkLAotICAgICAgICAgICAgICAgICAgICBtb2RfdHlwZTo6bXVsdChhX2ttMV9vdmVy
X2djZCwgYV9rbTFfb3Zlcl9nY2QpLAotICAgICAgICAgICAgICAgICAgICBtb2RfdHlwZTo6YWRk
KGFfa20xX292ZXJfZ2NkLCBhX2ttMV9vdmVyX2djZCkpOwotICAgICAgICAgICAgICAgIGV4cG9u
ZW50IC89IDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEludFR5
cGUgYV96ID0gbW9kX3R5cGU6Om11bHRfYWRkKGJfZ2NkLCBhX3ptMV9vdmVyX2djZCwgMSk7Ci0g
ICAgICAgICAgICBJbnRUeXBlIG51bSA9IG1vZF90eXBlOjptdWx0KGMsIGFfem0xX292ZXJfZ2Nk
KTsKLSAgICAgICAgICAgIGJfaW52ID0gbW9kX3R5cGU6OmludmVydCgoYS0xKS9iX2djZCk7Ci0g
ICAgICAgICAgICBfeCA9IG1vZF90eXBlOjptdWx0X2FkZChhX3osIF94LCBtb2RfdHlwZTo6bXVs
dChiX2ludiwgbnVtKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmcmllbmQgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lJiB4LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUmIHkpCi0gICAg
eyByZXR1cm4geC5feCA9PSB5Ll94OyB9Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZSYgeCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lJiB5KQotICAgIHsgcmV0dXJuICEo
eCA9PSB5KTsgfQotICAgIAotI2lmICFkZWZpbmVkKEJPT1NUX1JBTkRPTV9OT19TVFJFQU1fT1BF
UkFUT1JTKQotICAgIC8qKiBXcml0ZXMgYSBAYyBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZSB0
byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBDaGFyVCwgY2xhc3Mg
VHJhaXRzPgotICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08Q2hhclQsVHJhaXRzPiYKLSAg
ICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyVCxUcmFpdHM+JiBvcywKLSAgICAg
ICAgICAgICAgIGNvbnN0IGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lJiBsY2cpCi0gICAgewot
ICAgICAgICByZXR1cm4gb3MgPDwgbGNnLl94OwotICAgIH0KLQotICAgIC8qKiBSZWFkcyBhIEBj
IGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uICovCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgQ2hhclQsIGNsYXNzIFRyYWl0cz4KLSAgICBmcmllbmQgc3RkOjpi
YXNpY19pc3RyZWFtPENoYXJULFRyYWl0cz4mCi0gICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lz
dHJlYW08Q2hhclQsVHJhaXRzPiYgaXMsCi0gICAgICAgICAgICAgICBsaW5lYXJfY29uZ3J1ZW50
aWFsX2VuZ2luZSYgbGNnKQotICAgIHsKLSAgICAgICAgbGNnLnJlYWQoaXMpOwotICAgICAgICBy
ZXR1cm4gaXM7Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0KLSAgICAvLy8gXGNvbmQgc2hv
d19wcml2YXRlCi0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBDaGFyVCwgY2xhc3MgVHJhaXRzPgotICAg
IHZvaWQgcmVhZChzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhclQsIFRyYWl0cz4mIGlzKSB7Ci0gICAg
ICAgIEludFR5cGUgeDsKLSAgICAgICAgaWYoaXMgPj4geCkgewotICAgICAgICAgICAgaWYoeCA+
PSAobWluKSgpICYmIHggPD0gKG1heCkoKSkgewotICAgICAgICAgICAgICAgIF94ID0geDsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaXMuc2V0c3RhdGUoc3RkOjppb3Nf
YmFzZTo6ZmFpbGJpdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly8gXGVuZGNvbmQKLQotICAgIEludFR5cGUgX3g7Ci19OwotCi0jaWZuZGVmIEJPT1NUX05PX0lO
Q0xBU1NfTUVNQkVSX0lOSVRJQUxJWkFUSU9OCi0vLyAgQSBkZWZpbml0aW9uIGlzIHJlcXVpcmVk
IGV2ZW4gZm9yIGludGVncmFsIHN0YXRpYyBjb25zdGFudHMKLXRlbXBsYXRlPGNsYXNzIEludFR5
cGUsIEludFR5cGUgYSwgSW50VHlwZSBjLCBJbnRUeXBlIG0+Ci1jb25zdCBib29sIGxpbmVhcl9j
b25ncnVlbnRpYWxfZW5naW5lPEludFR5cGUsIGEsIGMsIG0+OjpoYXNfZml4ZWRfcmFuZ2U7Ci10
ZW1wbGF0ZTxjbGFzcyBJbnRUeXBlLCBJbnRUeXBlIGEsIEludFR5cGUgYywgSW50VHlwZSBtPgot
Y29uc3QgSW50VHlwZSBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZTxJbnRUeXBlLGEsYyxtPjo6
bXVsdGlwbGllcjsKLXRlbXBsYXRlPGNsYXNzIEludFR5cGUsIEludFR5cGUgYSwgSW50VHlwZSBj
LCBJbnRUeXBlIG0+Ci1jb25zdCBJbnRUeXBlIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPElu
dFR5cGUsYSxjLG0+OjppbmNyZW1lbnQ7Ci10ZW1wbGF0ZTxjbGFzcyBJbnRUeXBlLCBJbnRUeXBl
IGEsIEludFR5cGUgYywgSW50VHlwZSBtPgotY29uc3QgSW50VHlwZSBsaW5lYXJfY29uZ3J1ZW50
aWFsX2VuZ2luZTxJbnRUeXBlLGEsYyxtPjo6bW9kdWx1czsKLXRlbXBsYXRlPGNsYXNzIEludFR5
cGUsIEludFR5cGUgYSwgSW50VHlwZSBjLCBJbnRUeXBlIG0+Ci1jb25zdCBJbnRUeXBlIGxpbmVh
cl9jb25ncnVlbnRpYWxfZW5naW5lPEludFR5cGUsYSxjLG0+OjpkZWZhdWx0X3NlZWQ7Ci0jZW5k
aWYKLQotLy8vIFxjb25kIHNob3dfZGVwcmVjYXRlZAotCi0vLyBwcm92aWRlZCBmb3IgYmFja3dh
cmRzIGNvbXBhdGliaWxpdHkKLXRlbXBsYXRlPGNsYXNzIEludFR5cGUsIEludFR5cGUgYSwgSW50
VHlwZSBjLCBJbnRUeXBlIG0sIEludFR5cGUgdmFsID0gMD4KLWNsYXNzIGxpbmVhcl9jb25ncnVl
bnRpYWwgOiBwdWJsaWMgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmU8SW50VHlwZSwgYSwgYywg
bT4KLXsKLSAgICB0eXBlZGVmIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPEludFR5cGUsIGEs
IGMsIG0+IGJhc2VfdHlwZTsKLXB1YmxpYzoKLSAgICBsaW5lYXJfY29uZ3J1ZW50aWFsKEludFR5
cGUgeDAgPSAxKSA6IGJhc2VfdHlwZSh4MCkge30KLSAgICB0ZW1wbGF0ZTxjbGFzcyBJdD4KLSAg
ICBsaW5lYXJfY29uZ3J1ZW50aWFsKEl0JiBmaXJzdCwgSXQgbGFzdCkgOiBiYXNlX3R5cGUoZmly
c3QsIGxhc3QpIHt9Ci19OwotCi0vLy8gXGVuZGNvbmQKLQotLyoqCi0gKiBUaGUgc3BlY2lhbGl6
YXRpb24gXG1pbnN0ZF9yYW5kMCB3YXMgb3JpZ2luYWxseSBzdWdnZXN0ZWQgaW4KLSAqCi0gKiAg
QGJsb2NrcXVvdGUKLSAqICBBIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciBmb3IgdGhl
IFN5c3RlbS8zNjAsIFAuQS4gTGV3aXMsCi0gKiAgQS5TLiBHb29kbWFuLCBKLk0uIE1pbGxlciwg
SUJNIFN5c3RlbXMgSm91cm5hbCwgVm9sLiA4LCBOby4gMiwKLSAqICAxOTY5LCBwcC4gMTM2LTE0
NgotICogIEBlbmRibG9ja3F1b3RlCi0gKgotICogSXQgaXMgZXhhbWluZWQgbW9yZSBjbG9zZWx5
IHRvZ2V0aGVyIHdpdGggXG1pbnN0ZF9yYW5kIGluCi0gKgotICogIEBibG9ja3F1b3RlCi0gKiAg
IlJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yczogR29vZCBvbmVzIGFyZSBoYXJkIHRvIGZpbmQiLAot
ICogIFN0ZXBoZW4gSy4gUGFyayBhbmQgS2VpdGggVy4gTWlsbGVyLCBDb21tdW5pY2F0aW9ucyBv
ZgotICogIHRoZSBBQ00sIFZvbC4gMzEsIE5vLiAxMCwgT2N0b2JlciAxOTg4LCBwcC4gMTE5Mi0x
MjAxIAotICogIEBlbmRibG9ja3F1b3RlCi0gKi8KLXR5cGVkZWYgbGluZWFyX2NvbmdydWVudGlh
bF9lbmdpbmU8dWludDMyX3QsIDE2ODA3LCAwLCAyMTQ3NDgzNjQ3PiBtaW5zdGRfcmFuZDA7Ci0K
LS8qKiBUaGUgc3BlY2lhbGl6YXRpb24gXG1pbnN0ZF9yYW5kIHdhcyBzdWdnZXN0ZWQgaW4KLSAq
Ci0gKiAgQGJsb2NrcXVvdGUKLSAqICAiUmFuZG9tIE51bWJlciBHZW5lcmF0b3JzOiBHb29kIG9u
ZXMgYXJlIGhhcmQgdG8gZmluZCIsCi0gKiAgU3RlcGhlbiBLLiBQYXJrIGFuZCBLZWl0aCBXLiBN
aWxsZXIsIENvbW11bmljYXRpb25zIG9mCi0gKiAgdGhlIEFDTSwgVm9sLiAzMSwgTm8uIDEwLCBP
Y3RvYmVyIDE5ODgsIHBwLiAxMTkyLTEyMDEKLSAqICBAZW5kYmxvY2txdW90ZQotICovCi10eXBl
ZGVmIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPHVpbnQzMl90LCA0ODI3MSwgMCwgMjE0NzQ4
MzY0Nz4gbWluc3RkX3JhbmQ7Ci0KLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX0lOVDY0X1QpICYm
ICFkZWZpbmVkKEJPT1NUX05PX0lOVEVHUkFMX0lOVDY0X1QpCi0vKioKLSAqIENsYXNzIEBjIHJh
bmQ0OCBtb2RlbHMgYSBccHNldWRvX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLiBJdCB1c2VzCi0g
KiB0aGUgbGluZWFyIGNvbmdydWVudGlhbCBhbGdvcml0aG0gd2l0aCB0aGUgcGFyYW1ldGVycyBh
ID0gMHg1REVFQ0U2NkQsCi0gKiBjID0gMHhCLCBtID0gMioqNDguIEl0IGRlbGl2ZXJzIGlkZW50
aWNhbCByZXN1bHRzIHRvIHRoZSBAYyBscmFuZDQ4KCkKLSAqIGZ1bmN0aW9uIGF2YWlsYWJsZSBv
biBzb21lIHN5c3RlbXMgKGFzc3VtaW5nIGxjb25nNDggaGFzIG5vdCBiZWVuIGNhbGxlZCkuCi0g
KgotICogSXQgaXMgb25seSBhdmFpbGFibGUgb24gc3lzdGVtcyB3aGVyZSBAYyB1aW50NjRfdCBp
cyBwcm92aWRlZCBhcyBhbgotICogaW50ZWdyYWwgdHlwZSwgc28gdGhhdCBmb3IgZXhhbXBsZSBz
dGF0aWMgaW4tY2xhc3MgY29uc3RhbnRzIGFuZC9vcgotICogZW51bSBkZWZpbml0aW9ucyB3aXRo
IGxhcmdlIEBjIHVpbnQ2NF90IG51bWJlcnMgd29yay4KLSAqLwotY2xhc3MgcmFuZDQ4IAotewot
cHVibGljOgotICAgIHR5cGVkZWYgYm9vc3Q6OnVpbnQzMl90IHJlc3VsdF90eXBlOwotCi0gICAg
Qk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIGhhc19maXhlZF9yYW5nZSA9IGZhbHNlKTsKLSAg
ICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCB2YWx1ZSB0aGF0IHRoZSBnZW5lcmF0
b3IgY2FuIHByb2R1Y2UKLSAgICAgKi8KLSAgICBzdGF0aWMgdWludDMyX3QgbWluIEJPT1NUX1BS
RVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIHsgcmV0dXJuIDA7IH0KLSAgICAvKioKLSAgICAg
KiBSZXR1cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgdGhlIGdlbmVyYXRvciBjYW4gcHJvZHVj
ZQotICAgICAqLwotICAgIHN0YXRpYyB1aW50MzJfdCBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19T
VUJTVElUVVRJT04gKCkKLSAgICB7IHJldHVybiAweDdGRkZGRkZGOyB9Ci0gIAotICAgIC8qKiBT
ZWVkcyB0aGUgZ2VuZXJhdG9yIHdpdGggdGhlIGRlZmF1bHQgc2VlZC4gKi8KLSAgICByYW5kNDgo
KSA6IGxjZihjbnYoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEpKSkge30KLSAgICAvKioKLSAgICAg
KiBDb25zdHJ1Y3RzIGEgXHJhbmQ0OCBnZW5lcmF0b3Igd2l0aCB4KDApIDo9ICh4MCA8PCAxNikg
fCAweDMzMGUuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9BUklUSE1FVElDX0NP
TlNUUlVDVE9SKHJhbmQ0OCwgcmVzdWx0X3R5cGUsIHgwKQotICAgIHsgc2VlZCh4MCk7IH0KLSAg
ICAvKioKLSAgICAgKiBTZWVkcyB0aGUgZ2VuZXJhdG9yIHdpdGggdmFsdWVzIHByb2R1Y2VkIGJ5
IEBjIHNlcS5nZW5lcmF0ZSgpLgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfU0VF
RF9TRVFfQ09OU1RSVUNUT1IocmFuZDQ4LCBTZWVkU2VxLCBzZXEpCi0gICAgeyBzZWVkKHNlcSk7
IH0KLSAgICAvKioKLSAgICAgKiBTZWVkcyB0aGUgZ2VuZXJhdG9yIHVzaW5nIHZhbHVlcyBmcm9t
IGFuIGl0ZXJhdG9yIHJhbmdlLAotICAgICAqIGFuZCB1cGRhdGVzIGZpcnN0IHRvIHBvaW50IG9u
ZSBwYXN0IHRoZSBsYXN0IHZhbHVlIGNvbnN1bWVkLgotICAgICAqLwotICAgIHRlbXBsYXRlPGNs
YXNzIEl0PiByYW5kNDgoSXQmIGZpcnN0LCBJdCBsYXN0KSA6IGxjZihmaXJzdCwgbGFzdCkgeyB9
Ci0KLSAgICAvLyBjb21waWxlci1nZW5lcmF0ZWQgY29weSBjdG9yIGFuZCBhc3NpZ25tZW50IG9w
ZXJhdG9yIGFyZSBmaW5lCi0KLSAgICAvKiogU2VlZHMgdGhlIGdlbmVyYXRvciB3aXRoIHRoZSBk
ZWZhdWx0IHNlZWQuICovCi0gICAgdm9pZCBzZWVkKCkgeyBzZWVkKHN0YXRpY19jYXN0PHVpbnQz
Ml90PigxKSk7IH0KLSAgICAvKioKLSAgICAgKiBDaGFuZ2VzIHRoZSBjdXJyZW50IHZhbHVlIHgo
bikgb2YgdGhlIGdlbmVyYXRvciB0byAoeDAgPDwgMTYpIHwgMHgzMzBlLgotICAgICAqLwotICAg
IEJPT1NUX1JBTkRPTV9ERVRBSUxfQVJJVEhNRVRJQ19TRUVEKHJhbmQ0OCwgcmVzdWx0X3R5cGUs
IHgwKQotICAgIHsgbGNmLnNlZWQoY252KHgwKSk7IH0KLSAgICAvKioKLSAgICAgKiBTZWVkcyB0
aGUgZ2VuZXJhdG9yIHVzaW5nIHZhbHVlcyBmcm9tIGFuIGl0ZXJhdG9yIHJhbmdlLAotICAgICAq
IGFuZCB1cGRhdGVzIGZpcnN0IHRvIHBvaW50IG9uZSBwYXN0IHRoZSBsYXN0IHZhbHVlIGNvbnN1
bWVkLgotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIEl0PiB2b2lkIHNlZWQoSXQmIGZpcnN0
LCBJdCBsYXN0KSB7IGxjZi5zZWVkKGZpcnN0LGxhc3QpOyB9Ci0gICAgLyoqCi0gICAgICogU2Vl
ZHMgdGhlIGdlbmVyYXRvciB3aXRoIHZhbHVlcyBwcm9kdWNlZCBieSBAYyBzZXEuZ2VuZXJhdGUo
KS4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX1NFRURfU0VRX1NFRUQocmFuZDQ4
LCBTZWVkU2VxLCBzZXEpCi0gICAgeyBsY2Yuc2VlZChzZXEpOyB9Ci0KLSAgICAvKiogIFJldHVy
bnMgdGhlIG5leHQgdmFsdWUgb2YgdGhlIGdlbmVyYXRvci4gKi8KLSAgICB1aW50MzJfdCBvcGVy
YXRvcigpKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxjZigpID4+IDE3KTsgfQot
ICAgIAotICAgIC8qKiBBZHZhbmNlcyB0aGUgc3RhdGUgb2YgdGhlIGdlbmVyYXRvciBieSBAYyB6
LiAqLwotICAgIHZvaWQgZGlzY2FyZChib29zdDo6dWludG1heF90IHopIHsgbGNmLmRpc2NhcmQo
eik7IH0KLSAgCi0gICAgLyoqIEZpbGxzIGEgcmFuZ2Ugd2l0aCByYW5kb20gdmFsdWVzICovCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgSXRlcj4KLSAgICB2b2lkIGdlbmVyYXRlKEl0ZXIgZmlyc3QsIEl0
ZXIgbGFzdCkKLSAgICB7Ci0gICAgICAgIGZvcig7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QpIHsK
LSAgICAgICAgICAgICpmaXJzdCA9ICgqdGhpcykoKTsKLSAgICAgICAgfQotICAgIH0KLQotI2lm
bmRlZiBCT09TVF9SQU5ET01fTk9fU1RSRUFNX09QRVJBVE9SUwotICAgIC8qKiAgV3JpdGVzIGEg
QGMgcmFuZDQ4IHRvIGEgQGMgc3RkOjpvc3RyZWFtLiAqLwotICAgIHRlbXBsYXRlPGNsYXNzIENo
YXJULGNsYXNzIFRyYWl0cz4KLSAgICBmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPENoYXJULFRy
YWl0cz4mCi0gICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08Q2hhclQsVHJhaXRzPiYg
b3MsIGNvbnN0IHJhbmQ0OCYgcikKLSAgICB7IG9zIDw8IHIubGNmOyByZXR1cm4gb3M7IH0KLQot
ICAgIC8qKiBSZWFkcyBhIEBjIHJhbmQ0OCBmcm9tIGEgQGMgc3RkOjppc3RyZWFtLiAqLwotICAg
IHRlbXBsYXRlPGNsYXNzIENoYXJULGNsYXNzIFRyYWl0cz4KLSAgICBmcmllbmQgc3RkOjpiYXNp
Y19pc3RyZWFtPENoYXJULFRyYWl0cz4mCi0gICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJl
YW08Q2hhclQsVHJhaXRzPiYgaXMsIHJhbmQ0OCYgcikKLSAgICB7IGlzID4+IHIubGNmOyByZXR1
cm4gaXM7IH0KLSNlbmRpZgotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0
d28gZ2VuZXJhdG9ycyB3aWxsIHByb2R1Y2UgaWRlbnRpY2FsCi0gICAgICogc2VxdWVuY2VzIG9m
IHZhbHVlcy4KLSAgICAgKi8KLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJhbmQ0
OCYgeCwgY29uc3QgcmFuZDQ4JiB5KQotICAgIHsgcmV0dXJuIHgubGNmID09IHkubGNmOyB9Ci0g
ICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gZ2VuZXJhdG9ycyB3aWxsIHBy
b2R1Y2UgZGlmZmVyZW50Ci0gICAgICogc2VxdWVuY2VzIG9mIHZhbHVlcy4KLSAgICAgKi8KLSAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHJhbmQ0OCYgeCwgY29uc3QgcmFuZDQ4JiB5
KQotICAgIHsgcmV0dXJuICEoeCA9PSB5KTsgfQotcHJpdmF0ZToKLSAgICAvLy8gXGNvbmQgc2hv
d19wcml2YXRlCi0gICAgdHlwZWRlZiByYW5kb206OmxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5l
PHVpbnQ2NF90LAotICAgICAgICAvLyB4eHh4VUxMIGlzIG5vdCBwb3J0YWJsZQotICAgICAgICB1
aW50NjRfdCgweERFRUNFNjZEVUwpIHwgKHVpbnQ2NF90KDB4NSkgPDwgMzIpLAotICAgICAgICAw
eEIsIHVpbnQ2NF90KDEpPDw0OD4gbGNmX3Q7Ci0gICAgbGNmX3QgbGNmOwotCi0gICAgc3RhdGlj
IGJvb3N0Ojp1aW50NjRfdCBjbnYoYm9vc3Q6OnVpbnQzMl90IHgpCi0gICAgeyByZXR1cm4gKHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih4KSA8PCAxNikgfCAweDMzMGU7IH0KLSAgICAvLy8gXGVuZGNv
bmQKLX07Ci0jZW5kaWYgLyogIUJPT1NUX05PX0lOVDY0X1QgJiYgIUJPT1NUX05PX0lOVEVHUkFM
X0lOVDY0X1QgKi8KLQotfSAvLyBuYW1lc3BhY2UgcmFuZG9tCi0KLXVzaW5nIHJhbmRvbTo6bWlu
c3RkX3JhbmQwOwotdXNpbmcgcmFuZG9tOjptaW5zdGRfcmFuZDsKLXVzaW5nIHJhbmRvbTo6cmFu
ZDQ4OwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2Rl
dGFpbC9lbmFibGVfd2FybmluZ3MuaHBwPgotCi0jZW5kaWYgLy8gQk9PU1RfUkFORE9NX0xJTkVB
Ul9DT05HUlVFTlRJQUxfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9yYW5kb20vbGluZWFyX2ZlZWRiYWNrX3NoaWZ0LmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9saW5lYXJfZmVlZGJh
Y2tfc2hpZnQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjk1ZGZkZTk3ZjZl
ZDA2YzIzNDc5N2M3YzcyNDkzMDFlYTk0ZTI5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3JhbmRvbS9saW5lYXJfZmVlZGJhY2tfc2hpZnQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEs
MjE3ICswLDAgQEAKLS8qIGJvb3N0IHJhbmRvbS9saW5lYXJfZmVlZGJhY2tfc2hpZnQuaHBwIGhl
YWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0IEplbnMgTWF1cmVyIDIwMDIKLSAqIENvcHlyaWdo
dCBTdGV2ZW4gV2F0YW5hYmUgMjAxMQotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNv
ZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBM
SUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNl
bnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgotICov
Ci0KLSNpZm5kZWYgQk9PU1RfUkFORE9NX0xJTkVBUl9GRUVEQkFDS19TSElGVF9IUFAKLSNkZWZp
bmUgQk9PU1RfUkFORE9NX0xJTkVBUl9GRUVEQkFDS19TSElGVF9IUFAKLQotI2luY2x1ZGUgPGlv
c2Z3ZD4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4K
LSNpbmNsdWRlIDxib29zdC9jc3RkaW50LmhwcD4KLSNpbmNsdWRlIDxib29zdC9zdGF0aWNfYXNz
ZXJ0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9pbnRlZ2VyL2ludGVnZXJfbWFzay5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3Jh
bmRvbS9kZXRhaWwvc2VlZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9vcGVy
YXRvcnMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvc2VlZF9pbXBsLmhwcD4K
LQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSByYW5kb20gewotCi0vKioKLSAqIEluc3Rh
dGlhdGlvbnMgb2YgQGMgbGluZWFyX2ZlZWRiYWNrX3NoaWZ0IG1vZGVsIGEKLSAqIFxwc2V1ZG9f
cmFuZG9tX251bWJlcl9nZW5lcmF0b3IuICBJdCB3YXMgb3JpZ2luYWxseQotICogcHJvcG9zZWQg
aW4KLSAqCi0gKiAgQGJsb2NrcXVvdGUKLSAqICAiUmFuZG9tIG51bWJlcnMgZ2VuZXJhdGVkIGJ5
IGxpbmVhciByZWN1cnJlbmNlIG1vZHVsbyB0d28uIiwKLSAqICBUYXVzd29ydGhlLCBSLiBDLigx
OTY1KSwgTWF0aGVtYXRpY3Mgb2YgQ29tcHV0YXRpb24gMTksIDIwMS0yMDkuCi0gKiAgQGVuZGJs
b2NrcXVvdGUKLSAqLwotdGVtcGxhdGU8Y2xhc3MgVUludFR5cGUsIGludCB3LCBpbnQgaywgaW50
IHEsIGludCBzPgotY2xhc3MgbGluZWFyX2ZlZWRiYWNrX3NoaWZ0X2VuZ2luZQotewotcHVibGlj
OgotICAgIHR5cGVkZWYgVUludFR5cGUgcmVzdWx0X3R5cGU7Ci0gICAgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKGJvb2wsIGhhc19maXhlZF9yYW5nZSA9IGZhbHNlKTsKLSAgICBCT09TVF9TVEFUSUNf
Q09OU1RBTlQoaW50LCB3b3JkX3NpemUgPSB3KTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQo
aW50LCBleHBvbmVudDEgPSBrKTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCBleHBv
bmVudDIgPSBxKTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCBzdGVwX3NpemUgPSBz
KTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoVUludFR5cGUsIGRlZmF1bHRfc2VlZCA9IDM0
MSk7Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgc21hbGxlc3QgdmFsdWUgdGhhdCB0aGUgZ2VuZXJh
dG9yIGNhbiBwcm9kdWNlLiAqLwotICAgIHN0YXRpYyByZXN1bHRfdHlwZSBtaW4gQk9PU1RfUFJF
VkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgeyByZXR1cm4gMDsgfQotICAgIC8qKiBSZXR1cm5z
IHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgdGhlIGdlbmVyYXRvciBjYW4gcHJvZHVjZS4gKi8KLSAg
ICBzdGF0aWMgcmVzdWx0X3R5cGUgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9O
ICgpCi0gICAgeyByZXR1cm4gd29yZG1hc2soKTsgfQotCi0gICAgQk9PU1RfU1RBVElDX0FTU0VS
VCh3ID4gMCk7Ci0gICAgQk9PU1RfU1RBVElDX0FTU0VSVChxID4gMCk7Ci0gICAgQk9PU1RfU1RB
VElDX0FTU0VSVChrIDwgdyk7Ci0gICAgQk9PU1RfU1RBVElDX0FTU0VSVCgwIDwgMipxICYmIDIq
cSA8IGspOwotICAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoMCA8IHMgJiYgcyA8PSBrLXEpOwotCi0g
ICAgLyoqIENvbnN0cnVjdHMgYSBAYyBsaW5lYXJfZmVlZGJhY2tfc2hpZnRfZW5naW5lLCB1c2lu
ZyB0aGUgZGVmYXVsdCBzZWVkLiAqLwotICAgIGxpbmVhcl9mZWVkYmFja19zaGlmdF9lbmdpbmUo
KSB7IHNlZWQoKTsgfQotICAgIAotICAgIC8qKiBDb25zdHJ1Y3RzIGEgQGMgbGluZWFyX2ZlZWRi
YWNrX3NoaWZ0X2VuZ2luZSwgc2VlZGluZyBpdCB3aXRoIHMwLiAqLwotICAgIEJPT1NUX1JBTkRP
TV9ERVRBSUxfQVJJVEhNRVRJQ19DT05TVFJVQ1RPUihsaW5lYXJfZmVlZGJhY2tfc2hpZnRfZW5n
aW5lLAotICAgICAgICBVSW50VHlwZSwgczApCi0gICAgeyBzZWVkKHMwKTsgfQotICAgIAotICAg
IC8qKiBDb25zdHJ1Y3RzIGEgQGMgbGluZWFyX2ZlZWRiYWNrX3NoaWZ0X2VuZ2luZSwgc2VlZGlu
ZyBpdCB3aXRoIHNlcS4gKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX1NFRURfU0VRX0NPTlNU
UlVDVE9SKGxpbmVhcl9mZWVkYmFja19zaGlmdF9lbmdpbmUsCi0gICAgICAgIFNlZWRTZXEsIHNl
cSkKLSAgICB7IHNlZWQoc2VxKTsgfQotICAgIAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMg
YSBAYyBsaW5lYXJfZmVlZGJhY2tfc2hpZnRfZW5naW5lLCBzZWVkaW5nIGl0IHdpdGggCi0gICAg
ICogdmFsdWVzIGZyb20gdGhlIHJhbmdlIFtmaXJzdCwgbGFzdCkuCi0gICAgICovCi0gICAgdGVt
cGxhdGU8Y2xhc3MgSXQ+IGxpbmVhcl9mZWVkYmFja19zaGlmdF9lbmdpbmUoSXQmIGZpcnN0LCBJ
dCBsYXN0KQotICAgIHsgc2VlZChmaXJzdCwgbGFzdCk7IH0KLSAgICAKLSAgICAvKiogU2VlZHMg
YSBAYyBsaW5lYXJfZmVlZGJhY2tfc2hpZnRfZW5naW5lIHdpdGggdGhlIGRlZmF1bHQgc2VlZC4g
Ki8KLSAgICB2b2lkIHNlZWQoKSB7ICBzZWVkKGRlZmF1bHRfc2VlZCk7IH0KLSAgICAKLSAgICAv
KiogU2VlZHMgYSBAYyBsaW5lYXJfZmVlZGJhY2tfc2hpZnRfZW5naW5lIHdpdGggQGMgczAuICov
Ci0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9BUklUSE1FVElDX1NFRUQobGluZWFyX2ZlZWRiYWNr
X3NoaWZ0X2VuZ2luZSwKLSAgICAgICAgVUludFR5cGUsIHMwKQotICAgIHsKLSAgICAgICAgdmFs
dWUgPSBzMCAmIHdvcmRtYXNrKCk7Ci0gICAgICAgIGlmKHZhbHVlIDwgKDEgPDwgKHctaykpKSB7
Ci0gICAgICAgICAgICB2YWx1ZSArPSAxIDw8ICh3LWspOwotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIC8qKgotICAgICAqIFNlZWRzIGEgQGMgbGluZWFyX2ZlZWRiYWNrX3NoaWZ0X2VuZ2lu
ZSB3aXRoIHZhbHVlcwotICAgICAqIHByb2R1Y2VkIGJ5IEBjIHNlcS5nZW5lcmF0ZSgpLgotICAg
ICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfU0VFRF9TRVFfU0VFRChsaW5lYXJfZmVlZGJh
Y2tfc2hpZnRfZW5naW5lLAotICAgICAgICBTZWVkU2VxLCBzZXEpCi0gICAgeyBzZWVkKGRldGFp
bDo6c2VlZF9vbmVfaW50PFVJbnRUeXBlLCAoVUludFR5cGUoMikgPDwgKHcgLSAxKSk+KHNlcSkp
OyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogU2VlZHMgYSBAYyBsaW5lYXJfZmVlZGJhY2tfc2hp
ZnRfZW5naW5lIHdpdGggdmFsdWVzCi0gICAgICogZnJvbSB0aGUgcmFuZ2UgW2ZpcnN0LCBsYXN0
KS4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBJdD4gdm9pZCBzZWVkKEl0JiBmaXJzdCwg
SXQgbGFzdCkKLSAgICB7Ci0gICAgICAgIHNlZWQoZGV0YWlsOjpnZXRfb25lX2ludDxVSW50VHlw
ZSwgKFVJbnRUeXBlKDIpIDw8ICh3IC0gMSkpPihmaXJzdCwgbGFzdCkpOwotICAgIH0KLQotICAg
IC8qKiBSZXR1cm5zIHRoZSBuZXh0IHZhbHVlIG9mIHRoZSBnZW5lcmF0b3IuICovCi0gICAgcmVz
dWx0X3R5cGUgb3BlcmF0b3IoKSgpCi0gICAgewotICAgICAgICBjb25zdCBVSW50VHlwZSBiID0g
KCgodmFsdWUgPDwgcSkgXiB2YWx1ZSkgJiB3b3JkbWFzaygpKSA+PiAoay1zKTsKLSAgICAgICAg
Y29uc3QgVUludFR5cGUgbWFzayA9ICh3b3JkbWFzaygpIDw8ICh3LWspKSAmIHdvcmRtYXNrKCk7
Ci0gICAgICAgIHZhbHVlID0gKCh2YWx1ZSAmIG1hc2spIDw8IHMpIF4gYjsKLSAgICAgICAgcmV0
dXJuIHZhbHVlOwotICAgIH0KLSAgCi0gICAgLyoqIEZpbGxzIGEgcmFuZ2Ugd2l0aCByYW5kb20g
dmFsdWVzICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgSXRlcj4KLSAgICB2b2lkIGdlbmVyYXRlKEl0
ZXIgZmlyc3QsIEl0ZXIgbGFzdCkKLSAgICB7IGRldGFpbDo6Z2VuZXJhdGVfZnJvbV9pbnQoKnRo
aXMsIGZpcnN0LCBsYXN0KTsgfQotCi0gICAgLyoqIEFkdmFuY2VzIHRoZSBzdGF0ZSBvZiB0aGUg
Z2VuZXJhdG9yIGJ5IEBjIHouICovCi0gICAgdm9pZCBkaXNjYXJkKGJvb3N0Ojp1aW50bWF4X3Qg
eikKLSAgICB7Ci0gICAgICAgIGZvcihib29zdDo6dWludG1heF90IGogPSAwOyBqIDwgejsgKytq
KSB7Ci0gICAgICAgICAgICAoKnRoaXMpKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
LyoqCi0gICAgICogV3JpdGVzIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnZW5l
cmF0b3IgdG8gYSBAYyBzdGQ6Om9zdHJlYW0uCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RF
VEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCBsaW5lYXJfZmVlZGJhY2tfc2hpZnRfZW5naW5lLCB4
KQotICAgIHsKLSAgICAgICAgb3MgPDwgeC52YWx1ZTsKLSAgICAgICAgcmV0dXJuIG9zOwotICAg
IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZWFkcyB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlv
biBvZiB0aGUgZ2VuZXJhdG9yIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uCi0gICAgICovCi0gICAg
Qk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlzLCBsaW5lYXJfZmVlZGJhY2tf
c2hpZnRfZW5naW5lLCB4KQotICAgIHsKLSAgICAgICAgaXMgPj4geC52YWx1ZTsKLSAgICAgICAg
cmV0dXJuIGlzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dHdvIGdlbmVyYXRvcnMgd2lsbCBwcm9kdWNlIGlkZW50aWNhbAotICAgICAqIHNlcXVlbmNlcyBv
ZiBvdXRwdXRzLgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BF
UkFUT1IobGluZWFyX2ZlZWRiYWNrX3NoaWZ0X2VuZ2luZSwgeCwgeSkKLSAgICB7IHJldHVybiB4
LnZhbHVlID09IHkudmFsdWU7IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUg
aWYgdGhlIHR3byBnZW5lcmF0b3JzIHdpbGwgcHJvZHVjZSBkaWZmZXJlbnQKLSAgICAgKiBzZXF1
ZW5jZXMgb2Ygb3V0cHV0cy4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0lORVFV
QUxJVFlfT1BFUkFUT1IobGluZWFyX2ZlZWRiYWNrX3NoaWZ0X2VuZ2luZSkKLQotcHJpdmF0ZToK
LSAgICAvLy8gXGNvbmQgc2hvd19wcml2YXRlCi0gICAgc3RhdGljIFVJbnRUeXBlIHdvcmRtYXNr
KCkgeyByZXR1cm4gYm9vc3Q6Omxvd19iaXRzX21hc2tfdDx3Pjo6c2lnX2JpdHM7IH0KLSAgICAv
Ly8gXGVuZGNvbmQKLSAgICBVSW50VHlwZSB2YWx1ZTsKLX07Ci0KLSNpZm5kZWYgQk9PU1RfTk9f
SU5DTEFTU19NRU1CRVJfSU5JVElBTElaQVRJT04KLS8vICBBIGRlZmluaXRpb24gaXMgcmVxdWly
ZWQgZXZlbiBmb3IgaW50ZWdyYWwgc3RhdGljIGNvbnN0YW50cwotdGVtcGxhdGU8Y2xhc3MgVUlu
dFR5cGUsIGludCB3LCBpbnQgaywgaW50IHEsIGludCBzPgotY29uc3QgYm9vbCBsaW5lYXJfZmVl
ZGJhY2tfc2hpZnRfZW5naW5lPFVJbnRUeXBlLCB3LCBrLCBxLCBzPjo6aGFzX2ZpeGVkX3Jhbmdl
OwotdGVtcGxhdGU8Y2xhc3MgVUludFR5cGUsIGludCB3LCBpbnQgaywgaW50IHEsIGludCBzPgot
Y29uc3QgaW50IGxpbmVhcl9mZWVkYmFja19zaGlmdF9lbmdpbmU8VUludFR5cGUsIHcsIGssIHEs
IHM+Ojp3b3JkX3NpemU7Ci10ZW1wbGF0ZTxjbGFzcyBVSW50VHlwZSwgaW50IHcsIGludCBrLCBp
bnQgcSwgaW50IHM+Ci1jb25zdCBpbnQgbGluZWFyX2ZlZWRiYWNrX3NoaWZ0X2VuZ2luZTxVSW50
VHlwZSwgdywgaywgcSwgcz46OmV4cG9uZW50MTsKLXRlbXBsYXRlPGNsYXNzIFVJbnRUeXBlLCBp
bnQgdywgaW50IGssIGludCBxLCBpbnQgcz4KLWNvbnN0IGludCBsaW5lYXJfZmVlZGJhY2tfc2hp
ZnRfZW5naW5lPFVJbnRUeXBlLCB3LCBrLCBxLCBzPjo6ZXhwb25lbnQyOwotdGVtcGxhdGU8Y2xh
c3MgVUludFR5cGUsIGludCB3LCBpbnQgaywgaW50IHEsIGludCBzPgotY29uc3QgaW50IGxpbmVh
cl9mZWVkYmFja19zaGlmdF9lbmdpbmU8VUludFR5cGUsIHcsIGssIHEsIHM+OjpzdGVwX3NpemU7
Ci10ZW1wbGF0ZTxjbGFzcyBVSW50VHlwZSwgaW50IHcsIGludCBrLCBpbnQgcSwgaW50IHM+Ci1j
b25zdCBVSW50VHlwZSBsaW5lYXJfZmVlZGJhY2tfc2hpZnRfZW5naW5lPFVJbnRUeXBlLCB3LCBr
LCBxLCBzPjo6ZGVmYXVsdF9zZWVkOwotI2VuZGlmCi0KLS8vLyBcY29uZCBzaG93X2RlcHJlY2F0
ZWQKLQotLyoqIFByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gKi8KLXRlbXBs
YXRlPGNsYXNzIFVJbnRUeXBlLCBpbnQgdywgaW50IGssIGludCBxLCBpbnQgcywgVUludFR5cGUg
diA9IDA+Ci1jbGFzcyBsaW5lYXJfZmVlZGJhY2tfc2hpZnQgOgotICAgIHB1YmxpYyBsaW5lYXJf
ZmVlZGJhY2tfc2hpZnRfZW5naW5lPFVJbnRUeXBlLCB3LCBrLCBxLCBzPgotewotICAgIHR5cGVk
ZWYgbGluZWFyX2ZlZWRiYWNrX3NoaWZ0X2VuZ2luZTxVSW50VHlwZSwgdywgaywgcSwgcz4gYmFz
ZV90eXBlOwotcHVibGljOgotICAgIGxpbmVhcl9mZWVkYmFja19zaGlmdCgpIHt9Ci0gICAgQk9P
U1RfUkFORE9NX0RFVEFJTF9TRUVEX1NFUV9DT05TVFJVQ1RPUihsaW5lYXJfZmVlZGJhY2tfc2hp
ZnQsCi0gICAgICAgIFNlZWRTZXEsIHNlcSkKLSAgICB7IHNlZWQoc2VxKTsgfQotICAgIEJPT1NU
X1JBTkRPTV9ERVRBSUxfQVJJVEhNRVRJQ19DT05TVFJVQ1RPUihsaW5lYXJfZmVlZGJhY2tfc2hp
ZnQsCi0gICAgICAgIFVJbnRUeXBlLCB2YWwpCi0gICAgeyBzZWVkKHZhbCk7IH0KLSAgICB0ZW1w
bGF0ZTxjbGFzcyBJdD4KLSAgICBsaW5lYXJfZmVlZGJhY2tfc2hpZnQoSXQmIGZpcnN0LCBJdCBs
YXN0KSA6IGJhc2VfdHlwZShmaXJzdCwgbGFzdCkge30KLX07Ci0KLS8vLyBcZW5kY29uZAotCi19
IC8vIG5hbWVzcGFjZSByYW5kb20KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBC
T09TVF9SQU5ET01fTElORUFSX0ZFRURCQUNLX1NISUZUX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL2xvZ25vcm1hbF9kaXN0
cmlidXRpb24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
cmFuZG9tL2xvZ25vcm1hbF9kaXN0cmlidXRpb24uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3ZWQxZTEzYWJmNGJmM2I3YzBjMmI3NTMwZmY0MDM1NGMwMDQ0Mjk2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9sb2dub3JtYWxfZGlzdHJpYnV0aW9uLmhw
cAorKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi0vKiBib29zdCByYW5kb20vbG9nbm9y
bWFsX2Rpc3RyaWJ1dGlvbi5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgSmVucyBN
YXVyZXIgMjAwMC0yMDAxCi0gKiBDb3B5cmlnaHQgU3RldmVuIFdhdGFuYWJlIDIwMTEKLSAqIERp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4g
KFNlZQotICogYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAq
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqCi0gKiBTZWUgaHR0cDov
L3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50
YXRpb24uCi0gKgotICogJElkJAotICoKLSAqIFJldmlzaW9uIGhpc3RvcnkKLSAqICAyMDAxLTAy
LTE4ICBtb3ZlZCB0byBpbmRpdmlkdWFsIGhlYWRlciBmaWxlcwotICovCi0KLSNpZm5kZWYgQk9P
U1RfUkFORE9NX0xPR05PUk1BTF9ESVNUUklCVVRJT05fSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkRP
TV9MT0dOT1JNQUxfRElTVFJJQlVUSU9OX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnL25v
X3RyMS9jbWF0aC5ocHA+ICAgICAgLy8gc3RkOjpleHAsIHN0ZDo6c3FydAotI2luY2x1ZGUgPGNh
c3NlcnQ+Ci0jaW5jbHVkZSA8aW9zZndkPgotI2luY2x1ZGUgPGlzdHJlYW0+Ci0jaW5jbHVkZSA8
Ym9vc3QvbGltaXRzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2NvbmZpZy5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9vcGVyYXRvcnMuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L3JhbmRvbS9ub3JtYWxfZGlzdHJpYnV0aW9uLmhwcD4KLQotbmFtZXNwYWNlIGJv
b3N0IHsKLW5hbWVzcGFjZSByYW5kb20gewotCi0vKioKLSAqIEluc3RhbnRpYXRpb25zIG9mIGNs
YXNzIHRlbXBsYXRlIGxvZ25vcm1hbF9kaXN0cmlidXRpb24gbW9kZWwgYQotICogXHJhbmRvbV9k
aXN0cmlidXRpb24uIFN1Y2ggYSBkaXN0cmlidXRpb24gcHJvZHVjZXMgcmFuZG9tIG51bWJlcnMK
LSAqIHdpdGggXGYkXGRpc3BsYXlzdHlsZSBwKHgpID0gXGZyYWN7MX17eCBzIFxzcXJ0ezJccGl9
fSBlXntcZnJhY3stXGxlZnQoXGxvZyh4KS1tXHJpZ2h0KV4yfXsyc14yfX1cZiQKLSAqIGZvciB4
ID4gMC4KLSAqCi0gKiBAeG1sd2FybmluZwotICogVGhpcyBkaXN0cmlidXRpb24gaGFzIGJlZW4g
dXBkYXRlZCB0byBtYXRjaCB0aGUgQysrIHN0YW5kYXJkLgotICogSXRzIGJlaGF2aW9yIGhhcyBj
aGFuZ2VkIGZyb20gdGhlIG9yaWdpbmFsCi0gKiBib29zdDo6bG9nbm9ybWFsX2Rpc3RyaWJ1dGlv
bi4gIEEgYmFja3dhcmRzIGNvbXBhdGlibGUKLSAqIHZlcnNpb24gaXMgcHJvdmlkZWQgaW4gbmFt
ZXNwYWNlIGJvb3N0LgotICogQGVuZHhtbHdhcm5pbmcKLSAqLwotdGVtcGxhdGU8Y2xhc3MgUmVh
bFR5cGUgPSBkb3VibGU+Ci1jbGFzcyBsb2dub3JtYWxfZGlzdHJpYnV0aW9uCi17Ci1wdWJsaWM6
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBub3JtYWxfZGlzdHJpYnV0aW9uPFJlYWxUeXBlPjo6aW5w
dXRfdHlwZSBpbnB1dF90eXBlOwotICAgIHR5cGVkZWYgUmVhbFR5cGUgcmVzdWx0X3R5cGU7Ci0K
LSAgICBjbGFzcyBwYXJhbV90eXBlCi0gICAgewotICAgIHB1YmxpYzoKLQotICAgICAgICB0eXBl
ZGVmIGxvZ25vcm1hbF9kaXN0cmlidXRpb24gZGlzdHJpYnV0aW9uX3R5cGU7Ci0KLSAgICAgICAg
LyoqIENvbnN0cnVjdHMgdGhlIHBhcmFtZXRlcnMgb2YgYSBsb2dub3JtYWxfZGlzdHJpYnV0aW9u
LiAqLwotICAgICAgICBleHBsaWNpdCBwYXJhbV90eXBlKFJlYWxUeXBlIG1fYXJnID0gUmVhbFR5
cGUoMC4wKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFsVHlwZSBzX2FyZyA9IFJl
YWxUeXBlKDEuMCkpCi0gICAgICAgICAgOiBfbShtX2FyZyksIF9zKHNfYXJnKSB7fQotCi0gICAg
ICAgIC8qKiBSZXR1cm5zIHRoZSAibSIgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uICov
Ci0gICAgICAgIFJlYWxUeXBlIG0oKSBjb25zdCB7IHJldHVybiBfbTsgfQotCi0gICAgICAgIC8q
KiBSZXR1cm5zIHRoZSAicyIgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAg
ICAgIFJlYWxUeXBlIHMoKSBjb25zdCB7IHJldHVybiBfczsgfQotCi0gICAgICAgIC8qKiBXcml0
ZXMgdGhlIHBhcmFtZXRlcnMgdG8gYSBzdGQ6Om9zdHJlYW0uICovCi0gICAgICAgIEJPT1NUX1JB
TkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihvcywgcGFyYW1fdHlwZSwgcGFybSkKLSAgICAg
ICAgewotICAgICAgICAgICAgb3MgPDwgcGFybS5fbSA8PCAiICIgPDwgcGFybS5fczsKLSAgICAg
ICAgICAgIHJldHVybiBvczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKiBSZWFkcyB0aGUgcGFy
YW1ldGVycyBmcm9tIGEgc3RkOjppc3RyZWFtLiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVU
QUlMX0lTVFJFQU1fT1BFUkFUT1IoaXMsIHBhcmFtX3R5cGUsIHBhcm0pCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlzID4+IHBhcm0uX20gPj4gc3RkOjp3cyA+PiBwYXJtLl9zOwotICAgICAgICAg
ICAgcmV0dXJuIGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0
aGUgdHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgZXF1YWwuICovCi0gICAgICAgIEJPT1NUX1JB
TkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IocGFyYW1fdHlwZSwgbGhzLCByaHMpCi0gICAg
ICAgIHsgcmV0dXJuIGxocy5fbSA9PSByaHMuX20gJiYgbGhzLl9zID09IHJocy5fczsgfQotCi0g
ICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBzZXRzIG9mIHBhcmFtZXRlcnMgYXJl
IGRpZmZlcmVudC4gKi8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09Q
RVJBVE9SKHBhcmFtX3R5cGUpCi0KLSAgICBwcml2YXRlOgotICAgICAgICBSZWFsVHlwZSBfbTsK
LSAgICAgICAgUmVhbFR5cGUgX3M7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVj
dHMgYSBsb2dub3JtYWxfZGlzdHJpYnV0aW9uLiBAYyBtIGFuZCBAYyBzIGFyZSB0aGUKLSAgICAg
KiBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uCi0gICAgICovCi0gICAgZXhwbGljaXQg
bG9nbm9ybWFsX2Rpc3RyaWJ1dGlvbihSZWFsVHlwZSBtX2FyZyA9IFJlYWxUeXBlKDAuMCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFsVHlwZSBzX2FyZyA9IFJlYWxU
eXBlKDEuMCkpCi0gICAgICA6IF9ub3JtYWwobV9hcmcsIHNfYXJnKSB7fQotCi0gICAgLyoqCi0g
ICAgICogQ29uc3RydWN0cyBhIGxvZ25vcm1hbF9kaXN0cmlidXRpb24gZnJvbSBpdHMgcGFyYW1l
dGVycy4KLSAgICAgKi8KLSAgICBleHBsaWNpdCBsb2dub3JtYWxfZGlzdHJpYnV0aW9uKGNvbnN0
IHBhcmFtX3R5cGUmIHBhcm0pCi0gICAgICA6IF9ub3JtYWwocGFybS5tKCksIHBhcm0ucygpKSB7
fQotCi0gICAgLy8gY29tcGlsZXItZ2VuZXJhdGVkIGNvcHkgY3RvciBhbmQgYXNzaWdubWVudCBv
cGVyYXRvciBhcmUgZmluZQotCi0gICAgLyoqIFJldHVybnMgdGhlIG0gcGFyYW1ldGVyIG9mIHRo
ZSBkaXN0cmlidXRpb24uICovCi0gICAgUmVhbFR5cGUgbSgpIGNvbnN0IHsgcmV0dXJuIF9ub3Jt
YWwubWVhbigpOyB9Ci0gICAgLyoqIFJldHVybnMgdGhlIHMgcGFyYW1ldGVyIG9mIHRoZSBkaXN0
cmlidXRpb24uICovCi0gICAgUmVhbFR5cGUgcygpIGNvbnN0IHsgcmV0dXJuIF9ub3JtYWwuc2ln
bWEoKTsgfQotCi0gICAgLyoqIFJldHVybnMgdGhlIHNtYWxsZXN0IHZhbHVlIHRoYXQgdGhlIGRp
c3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4gKi8KLSAgICBSZWFsVHlwZSBtaW4gQk9PU1RfUFJFVkVO
VF9NQUNST19TVUJTVElUVVRJT04gKCkgY29uc3QKLSAgICB7IHJldHVybiBSZWFsVHlwZSgwKTsg
fQotICAgIC8qKiBSZXR1cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlv
biBjYW4gcHJvZHVjZS4gKi8KLSAgICBSZWFsVHlwZSBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19T
VUJTVElUVVRJT04gKCkgY29uc3QKLSAgICB7IHJldHVybiAoc3RkOjpudW1lcmljX2xpbWl0czxS
ZWFsVHlwZT46OmluZmluaXR5KSgpOyB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgcGFyYW1ldGVy
cyBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIHBhcmFtX3R5cGUgcGFyYW0oKSBjb25zdCB7
IHJldHVybiBwYXJhbV90eXBlKG0oKSwgcygpKTsgfQotICAgIC8qKiBTZXRzIHRoZSBwYXJhbWV0
ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgdm9pZCBwYXJhbShjb25zdCBwYXJhbV90
eXBlJiBwYXJtKQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBub3JtYWxfZGlzdHJpYnV0aW9uPFJl
YWxUeXBlPiBub3JtYWxfdHlwZTsKLSAgICAgICAgdHlwZW5hbWUgbm9ybWFsX3R5cGU6OnBhcmFt
X3R5cGUgbm9ybWFsX3BhcmFtKHBhcm0ubSgpLCBwYXJtLnMoKSk7Ci0gICAgICAgIF9ub3JtYWwu
cGFyYW0obm9ybWFsX3BhcmFtKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogRWZmZWN0
czogU3Vic2VxdWVudCB1c2VzIG9mIHRoZSBkaXN0cmlidXRpb24gZG8gbm90IGRlcGVuZAotICAg
ICAqIG9uIHZhbHVlcyBwcm9kdWNlZCBieSBhbnkgZW5naW5lIHByaW9yIHRvIGludm9raW5nIHJl
c2V0LgotICAgICAqLwotICAgIHZvaWQgcmVzZXQoKSB7IF9ub3JtYWwucmVzZXQoKTsgfQotCi0g
ICAgLyoqCi0gICAgICogUmV0dXJucyBhIHJhbmRvbSB2YXJpYXRlIGRpc3RyaWJ1dGVkIGFjY29y
ZGluZyB0byB0aGUKLSAgICAgKiBsb2dub3JtYWwgZGlzdHJpYnV0aW9uLgotICAgICAqLwotICAg
IHRlbXBsYXRlPGNsYXNzIEVuZ2luZT4KLSAgICByZXN1bHRfdHlwZSBvcGVyYXRvcigpKEVuZ2lu
ZSYgZW5nKQotICAgIHsKLSAgICAgICAgdXNpbmcgc3RkOjpleHA7Ci0gICAgICAgIHJldHVybiBl
eHAoX25vcm1hbChlbmcpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgcmFu
ZG9tIHZhcmlhdGUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZQotICAgICAqIGxvZ25vcm1h
bCBkaXN0cmlidXRpb24gd2l0aCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBieSBwYXJhbS4KLSAgICAg
Ki8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmdpbmU+Ci0gICAgcmVzdWx0X3R5cGUgb3BlcmF0b3Io
KShFbmdpbmUmIGVuZywgY29uc3QgcGFyYW1fdHlwZSYgcGFybSkKLSAgICB7IHJldHVybiBsb2du
b3JtYWxfZGlzdHJpYnV0aW9uKHBhcm0pKGVuZyk7IH0KLQotICAgIC8qKiBXcml0ZXMgdGhlIGRp
c3RyaWJ1dGlvbiB0byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICBCT09TVF9SQU5ET01fREVU
QUlMX09TVFJFQU1fT1BFUkFUT1Iob3MsIGxvZ25vcm1hbF9kaXN0cmlidXRpb24sIGxkKQotICAg
IHsKLSAgICAgICAgb3MgPDwgbGQuX25vcm1hbDsKLSAgICAgICAgcmV0dXJuIG9zOwotICAgIH0K
LQotICAgIC8qKiBSZWFkcyB0aGUgZGlzdHJpYnV0aW9uIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0u
ICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlzLCBsb2dub3Jt
YWxfZGlzdHJpYnV0aW9uLCBsZCkKLSAgICB7Ci0gICAgICAgIGlzID4+IGxkLl9ub3JtYWw7Ci0g
ICAgICAgIHJldHVybiBpczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUg
aWYgdGhlIHR3byBkaXN0cmlidXRpb25zIHdpbGwgcHJvZHVjZSBpZGVudGljYWwKLSAgICAgKiBz
ZXF1ZW5jZXMgb2YgdmFsdWVzIGdpdmVuIGVxdWFsIGdlbmVyYXRvcnMuCi0gICAgICovCi0gICAg
Qk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElUWV9PUEVSQVRPUihsb2dub3JtYWxfZGlzdHJpYnV0
aW9uLCBsaHMsIHJocykKLSAgICB7IHJldHVybiBsaHMuX25vcm1hbCA9PSByaHMuX25vcm1hbDsg
fQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gZGlzdHJpYnV0aW9u
cyBtYXkgcHJvZHVjZSBkaWZmZXJlbnQKLSAgICAgKiBzZXF1ZW5jZXMgb2YgdmFsdWVzIGdpdmVu
IGVxdWFsIGdlbmVyYXRvcnMuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JTkVR
VUFMSVRZX09QRVJBVE9SKGxvZ25vcm1hbF9kaXN0cmlidXRpb24pCi0KLXByaXZhdGU6Ci0gICAg
bm9ybWFsX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT4gX25vcm1hbDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIHJhbmRvbQotCi0vLy8gXGNvbmQgc2hvd19kZXByZWNhdGVkCi0KLS8qKgotICogUHJv
dmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAgVGhpcyBjbGFzcyBpcwotICogZGVw
cmVjYXRlZC4gIEl0IHByb3ZpZGVzIHRoZSBvbGQgYmVoYXZpb3Igb2YgbG9nbm9ybWFsX2Rpc3Ry
aWJ1dGlvbiB3aXRoCi0gKiBcZiRcZGlzcGxheXN0eWxlIHAoeCkgPSBcZnJhY3sxfXt4IFxzaWdt
YV9OIFxzcXJ0ezJccGl9fSBlXntcZnJhY3stXGxlZnQoXGxvZyh4KS1cbXVfTlxyaWdodCleMn17
MlxzaWdtYV9OXjJ9fVxmJAotICogZm9yIHggPiAwLCB3aGVyZSBcZiRcZGlzcGxheXN0eWxlIFxt
dV9OID0gXGxvZ1xsZWZ0KFxmcmFje1xtdV4yfXtcc3FydHtcc2lnbWFeMiArIFxtdV4yfX1ccmln
aHQpXGYkIGFuZAotICogXGYkXGRpc3BsYXlzdHlsZSBcc2lnbWFfTiA9IFxzcXJ0e1xsb2dcbGVm
dCgxICsgXGZyYWN7XHNpZ21hXjJ9e1xtdV4yfVxyaWdodCl9XGYkLgotICovCi10ZW1wbGF0ZTxj
bGFzcyBSZWFsVHlwZSA9IGRvdWJsZT4KLWNsYXNzIGxvZ25vcm1hbF9kaXN0cmlidXRpb24KLXsK
LXB1YmxpYzoKLSAgICB0eXBlZGVmIHR5cGVuYW1lIG5vcm1hbF9kaXN0cmlidXRpb248UmVhbFR5
cGU+OjppbnB1dF90eXBlIGlucHV0X3R5cGU7Ci0gICAgdHlwZWRlZiBSZWFsVHlwZSByZXN1bHRf
dHlwZTsKLQotICAgIGxvZ25vcm1hbF9kaXN0cmlidXRpb24oUmVhbFR5cGUgbWVhbl9hcmcgPSBS
ZWFsVHlwZSgxLjApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbFR5cGUgc2lnbWFf
YXJnID0gUmVhbFR5cGUoMS4wKSkKLSAgICAgIDogX21lYW4obWVhbl9hcmcpLCBfc2lnbWEoc2ln
bWFfYXJnKQotICAgIHsKLSAgICAgICAgaW5pdCgpOwotICAgIH0KLSAgICBSZWFsVHlwZSBtZWFu
KCkgY29uc3QgeyByZXR1cm4gX21lYW47IH0KLSAgICBSZWFsVHlwZSBzaWdtYSgpIGNvbnN0IHsg
cmV0dXJuIF9zaWdtYTsgfQotICAgIHZvaWQgcmVzZXQoKSB7IF9ub3JtYWwucmVzZXQoKTsgfQot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuZ2luZT4KLSAgICBSZWFsVHlwZSBvcGVyYXRvcigpKEVuZ2lu
ZSYgZW5nKQotICAgIHsKLSAgICAgICAgdXNpbmcgc3RkOjpleHA7Ci0gICAgICAgIHJldHVybiBl
eHAoX25vcm1hbChlbmcpICogX25zaWdtYSArIF9ubWVhbik7Ci0gICAgfQotICAgIEJPT1NUX1JB
TkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihvcywgbG9nbm9ybWFsX2Rpc3RyaWJ1dGlvbiwg
bGQpCi0gICAgewotICAgICAgICBvcyA8PCBsZC5fbm9ybWFsIDw8ICIgIiA8PCBsZC5fbWVhbiA8
PCAiICIgPDwgbGQuX3NpZ21hOwotICAgICAgICByZXR1cm4gb3M7Ci0gICAgfQotICAgIEJPT1NU
X1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRPUihpcywgbG9nbm9ybWFsX2Rpc3RyaWJ1dGlv
biwgbGQpCi0gICAgewotICAgICAgICBpcyA+PiBsZC5fbm9ybWFsID4+IHN0ZDo6d3MgPj4gbGQu
X21lYW4gPj4gc3RkOjp3cyA+PiBsZC5fc2lnbWE7Ci0gICAgICAgIGxkLmluaXQoKTsKLSAgICAg
ICAgcmV0dXJuIGlzOwotICAgIH0KLXByaXZhdGU6Ci0gICAgLy8vIFxjb25kIHNob3dfcHJpdmF0
ZQotICAgIHZvaWQgaW5pdCgpCi0gICAgewotICAgICAgICB1c2luZyBzdGQ6OmxvZzsKLSAgICAg
ICAgdXNpbmcgc3RkOjpzcXJ0OwotICAgICAgICBfbm1lYW4gPSBsb2coX21lYW4qX21lYW4vc3Fy
dChfc2lnbWEqX3NpZ21hICsgX21lYW4qX21lYW4pKTsKLSAgICAgICAgX25zaWdtYSA9IHNxcnQo
bG9nKF9zaWdtYSpfc2lnbWEvX21lYW4vX21lYW4rcmVzdWx0X3R5cGUoMSkpKTsKLSAgICB9Ci0g
ICAgUmVhbFR5cGUgX21lYW47Ci0gICAgUmVhbFR5cGUgX3NpZ21hOwotICAgIFJlYWxUeXBlIF9u
bWVhbjsKLSAgICBSZWFsVHlwZSBfbnNpZ21hOwotICAgIG5vcm1hbF9kaXN0cmlidXRpb248UmVh
bFR5cGU+IF9ub3JtYWw7Ci0gICAgLy8vIFxlbmRjb25kCi19OwotCi0vLy8gXGVuZGNvbmQKLQot
fSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9MT0dOT1JNQUxf
RElTVFJJQlVUSU9OX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcmFuZG9tL21lcnNlbm5lX3R3aXN0ZXIuaHBwIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL21lcnNlbm5lX3R3aXN0ZXIuaHBw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTczZTY4MjVmMzViZmIyNmY4ZTZhOGNm
YzIyMGRkYTQwZTE2N2I2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9t
ZXJzZW5uZV90d2lzdGVyLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDY4MiArMCwwIEBACi0vKiBi
b29zdCByYW5kb20vbWVyc2VubmVfdHdpc3Rlci5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5
cmlnaHQgSmVucyBNYXVyZXIgMjAwMC0yMDAxCi0gKiBDb3B5cmlnaHQgU3RldmVuIFdhdGFuYWJl
IDIwMTAKLSAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBW
ZXJzaW9uIDEuMC4gKFNlZQotICogYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9y
IGNvcHkgYXQKLSAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqCi0g
KiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVk
aW5nIGRvY3VtZW50YXRpb24uCi0gKgotICogJElkJAotICoKLSAqIFJldmlzaW9uIGhpc3RvcnkK
LSAqICAyMDEzLTEwLTE0ICBmaXhlZCBzb21lIHdhcm5pbmdzIHdpdGggV3NoYWRvdyAobWdhdW5h
cmQpCi0gKiAgMjAwMS0wMi0xOCAgbW92ZWQgdG8gaW5kaXZpZHVhbCBoZWFkZXIgZmlsZXMKLSAq
LwotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9NRVJTRU5ORV9UV0lTVEVSX0hQUAotI2RlZmluZSBC
T09TVF9SQU5ET01fTUVSU0VOTkVfVFdJU1RFUl9IUFAKLQotI2luY2x1ZGUgPGlvc2Z3ZD4KLSNp
bmNsdWRlIDxpc3RyZWFtPgotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KLSNpbmNsdWRlIDxib29zdC9j
b25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2NzdGRpbnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L2ludGVnZXIvaW50ZWdlcl9tYXNrLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWls
L2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9wdHJfaGVscGVyLmhw
cD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL3NlZWQuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L3JhbmRvbS9kZXRhaWwvc2VlZF9pbXBsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20v
ZGV0YWlsL2dlbmVyYXRvcl9zZWVkX3NlcS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2Rl
dGFpbC9wb2x5bm9taWFsLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvZGlz
YWJsZV93YXJuaW5ncy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgcmFuZG9t
IHsKLQotLyoqCi0gKiBJbnN0YW50aWF0aW9ucyBvZiBjbGFzcyB0ZW1wbGF0ZSBtZXJzZW5uZV90
d2lzdGVyX2VuZ2luZSBtb2RlbCBhCi0gKiBccHNldWRvX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9y
LiBJdCB1c2VzIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGluCi0gKgotICogIEBibG9ja3F1b3Rl
Ci0gKiAgIk1lcnNlbm5lIFR3aXN0ZXI6IEEgNjIzLWRpbWVuc2lvbmFsbHkgZXF1aWRpc3RyaWJ1
dGVkIHVuaWZvcm0KLSAqICBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IiLCBNYWtvdG8g
TWF0c3Vtb3RvIGFuZCBUYWt1amkgTmlzaGltdXJhLAotICogIEFDTSBUcmFuc2FjdGlvbnMgb24g
TW9kZWxpbmcgYW5kIENvbXB1dGVyIFNpbXVsYXRpb246IFNwZWNpYWwgSXNzdWUgb24KLSAqICBV
bmlmb3JtIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbiwgVm9sLiA4LCBOby4gMSwgSmFudWFyeSAx
OTk4LCBwcC4gMy0zMC4KLSAqICBAZW5kYmxvY2txdW90ZQotICoKLSAqIEB4bWxub3RlCi0gKiBU
aGUgYm9vc3QgdmFyaWFudCBoYXMgYmVlbiBpbXBsZW1lbnRlZCBmcm9tIHNjcmF0Y2ggYW5kIGRv
ZXMgbm90Ci0gKiBkZXJpdmUgZnJvbSBvciB1c2UgbXQxOTkzNy5jIHByb3ZpZGVkIG9uIHRoZSBh
Ym92ZSBXV1cgc2l0ZS4gSG93ZXZlciwgaXQKLSAqIHdhcyB2ZXJpZmllZCB0aGF0IGJvdGggcHJv
ZHVjZSBpZGVudGljYWwgb3V0cHV0LgotICogQGVuZHhtbG5vdGUKLSAqCi0gKiBUaGUgc2VlZGlu
ZyBmcm9tIGFuIGludGVnZXIgd2FzIGNoYW5nZWQgaW4gQXByaWwgMjAwNSB0byBhZGRyZXNzIGEK
LSAqIDxhIGhyZWY9Imh0dHA6Ly93d3cubWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0
L01UL01UMjAwMi9lbXQxOTkzN2FyLmh0bWwiPndlYWtuZXNzPC9hPi4KLSAqCi0gKiBUaGUgcXVh
bGl0eSBvZiB0aGUgZ2VuZXJhdG9yIGNydWNpYWxseSBkZXBlbmRzIG9uIHRoZSBjaG9pY2Ugb2Yg
dGhlCi0gKiBwYXJhbWV0ZXJzLiAgVXNlciBjb2RlIHNob3VsZCBlbXBsb3kgb25lIG9mIHRoZSBz
ZW5zaWJseSBwYXJhbWV0ZXJpemVkCi0gKiBnZW5lcmF0b3JzIHN1Y2ggYXMgXG10MTk5MzcgaW5z
dGVhZC4KLSAqCi0gKiBUaGUgZ2VuZXJhdG9yIHJlcXVpcmVzIGNvbnNpZGVyYWJsZSBhbW91bnRz
IG9mIG1lbW9yeSBmb3IgdGhlIHN0b3JhZ2Ugb2YKLSAqIGl0cyBzdGF0ZSBhcnJheS4gRm9yIGV4
YW1wbGUsIFxtdDExMjEzYiByZXF1aXJlcyBhYm91dCAxNDA4IGJ5dGVzIGFuZAotICogXG10MTk5
MzcgcmVxdWlyZXMgYWJvdXQgMjQ5NiBieXRlcy4KLSAqLwotdGVtcGxhdGU8Y2xhc3MgVUludFR5
cGUsCi0gICAgICAgICBzdGQ6OnNpemVfdCB3LCBzdGQ6OnNpemVfdCBuLCBzdGQ6OnNpemVfdCBt
LCBzdGQ6OnNpemVfdCByLAotICAgICAgICAgVUludFR5cGUgYSwgc3RkOjpzaXplX3QgdSwgVUlu
dFR5cGUgZCwgc3RkOjpzaXplX3QgcywKLSAgICAgICAgIFVJbnRUeXBlIGIsIHN0ZDo6c2l6ZV90
IHQsCi0gICAgICAgICBVSW50VHlwZSBjLCBzdGQ6OnNpemVfdCBsLCBVSW50VHlwZSBmPgotY2xh
c3MgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUKLXsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIFVJbnRU
eXBlIHJlc3VsdF90eXBlOwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwg
d29yZF9zaXplID0gdyk7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCBz
dGF0ZV9zaXplID0gbik7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCBz
aGlmdF9zaXplID0gbSk7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCBt
YXNrX2JpdHMgPSByKTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoVUludFR5cGUsIHhvcl9t
YXNrID0gYSk7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCB0ZW1wZXJp
bmdfdSA9IHUpOwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChVSW50VHlwZSwgdGVtcGVyaW5n
X2QgPSBkKTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHRlbXBlcmlu
Z19zID0gcyk7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKFVJbnRUeXBlLCB0ZW1wZXJpbmdf
YiA9IGIpOwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgdGVtcGVyaW5n
X3QgPSB0KTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoVUludFR5cGUsIHRlbXBlcmluZ19j
ID0gYyk7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCB0ZW1wZXJpbmdf
bCA9IGwpOwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChVSW50VHlwZSwgaW5pdGlhbGl6YXRp
b25fbXVsdGlwbGllciA9IGYpOwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChVSW50VHlwZSwg
ZGVmYXVsdF9zZWVkID0gNTQ4OXUpOwotCi0gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkK
LSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoVUludFR5cGUsIHBhcmFtZXRlcl9hID0gYSk7Ci0g
ICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCBvdXRwdXRfdSA9IHUpOwotICAg
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgb3V0cHV0X3MgPSBzKTsKLSAgICBC
T09TVF9TVEFUSUNfQ09OU1RBTlQoVUludFR5cGUsIG91dHB1dF9iID0gYik7Ci0gICAgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCBvdXRwdXRfdCA9IHQpOwotICAgIEJPT1NUX1NU
QVRJQ19DT05TVEFOVChVSW50VHlwZSwgb3V0cHV0X2MgPSBjKTsKLSAgICBCT09TVF9TVEFUSUNf
Q09OU1RBTlQoc3RkOjpzaXplX3QsIG91dHB1dF9sID0gbCk7Ci0KLSAgICAvLyBvbGQgQm9vc3Qu
UmFuZG9tIGNvbmNlcHQgcmVxdWlyZW1lbnRzCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJv
b2wsIGhhc19maXhlZF9yYW5nZSA9IGZhbHNlKTsKLQotCi0gICAgLyoqCi0gICAgICogQ29uc3Ry
dWN0cyBhIEBjIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lIGFuZCBjYWxscyBAYyBzZWVkKCkuCi0g
ICAgICovCi0gICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUoKSB7IHNlZWQoKTsgfQotCi0gICAg
LyoqCi0gICAgICogQ29uc3RydWN0cyBhIEBjIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lIGFuZCBj
YWxscyBAYyBzZWVkKHZhbHVlKS4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0FS
SVRITUVUSUNfQ09OU1RSVUNUT1IobWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnRUeXBlLCB2YWx1ZSkKLSAg
ICB7IHNlZWQodmFsdWUpOyB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+IG1lcnNlbm5lX3R3aXN0
ZXJfZW5naW5lKEl0JiBmaXJzdCwgSXQgbGFzdCkKLSAgICB7IHNlZWQoZmlyc3QsbGFzdCk7IH0K
LQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZSBh
bmQgY2FsbHMgQGMgc2VlZChnZW4pLgotICAgICAqCi0gICAgICogQHhtbG5vdGUKLSAgICAgKiBU
aGUgY29weSBjb25zdHJ1Y3RvciB3aWxsIGFsd2F5cyBiZSBwcmVmZXJyZWQgb3ZlcgotICAgICAq
IHRoZSB0ZW1wbGF0ZWQgY29uc3RydWN0b3IuCi0gICAgICogQGVuZHhtbG5vdGUKLSAgICAgKi8K
LSAgICBCT09TVF9SQU5ET01fREVUQUlMX1NFRURfU0VRX0NPTlNUUlVDVE9SKG1lcnNlbm5lX3R3
aXN0ZXJfZW5naW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU2VlZFNlcSwgc2VxKQotICAgIHsgc2VlZChzZXEpOyB9Ci0KLSAgICAvLyBjb21waWxlci1n
ZW5lcmF0ZWQgY29weSBjdG9yIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yIGFyZSBmaW5lCi0KLSAg
ICAvKiogQ2FsbHMgQGMgc2VlZChkZWZhdWx0X3NlZWQpLiAqLwotICAgIHZvaWQgc2VlZCgpIHsg
c2VlZChkZWZhdWx0X3NlZWQpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBzdGF0ZSB4
KDApIHRvIHYgbW9kIDJ3LiBUaGVuLCBpdGVyYXRpdmVseSwKLSAgICAgKiBzZXRzIHgoaSkgdG8K
LSAgICAgKiAoaSArIGYgKiAoeChpLTEpIHhvciAoeChpLTEpIHJzaGlmdCB3LTIpKSkgbW9kIDI8
c3VwPnc8L3N1cD4KLSAgICAgKiBmb3IgaSA9IDEgLi4gbi0xLiB4KG4pIGlzIHRoZSBmaXJzdCB2
YWx1ZSB0byBiZSByZXR1cm5lZCBieSBvcGVyYXRvcigpLgotICAgICAqLwotICAgIEJPT1NUX1JB
TkRPTV9ERVRBSUxfQVJJVEhNRVRJQ19TRUVEKG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lLCBVSW50
VHlwZSwgdmFsdWUpCi0gICAgewotICAgICAgICAvLyBOZXcgc2VlZGluZyBhbGdvcml0aG0gZnJv
bQotICAgICAgICAvLyBodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1h
dC9NVC9NVDIwMDIvZW10MTk5Mzdhci5odG1sCi0gICAgICAgIC8vIEluIHRoZSBwcmV2aW91cyB2
ZXJzaW9ucywgTVNCcyBvZiB0aGUgc2VlZCBhZmZlY3RlZCBvbmx5IE1TQnMgb2YgdGhlCi0gICAg
ICAgIC8vIHN0YXRlIHhbXS4KLSAgICAgICAgY29uc3QgVUludFR5cGUgbWFzayA9IChtYXgpKCk7
Ci0gICAgICAgIHhbMF0gPSB2YWx1ZSAmIG1hc2s7Ci0gICAgICAgIGZvciAoaSA9IDE7IGkgPCBu
OyBpKyspIHsKLSAgICAgICAgICAgIC8vIFNlZSBLbnV0aCAiVGhlIEFydCBvZiBDb21wdXRlciBQ
cm9ncmFtbWluZyIKLSAgICAgICAgICAgIC8vIFZvbC4gMiwgM3JkIGVkLiwgcGFnZSAxMDYKLSAg
ICAgICAgICAgIHhbaV0gPSAoZiAqICh4W2ktMV0gXiAoeFtpLTFdID4+ICh3LTIpKSkgKyBpKSAm
IG1hc2s7Ci0gICAgICAgIH0KLQotICAgICAgICBub3JtYWxpemVfc3RhdGUoKTsKLSAgICB9Ci0K
LSAgICAvKioKLSAgICAgKiBTZWVkcyBhIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lIHVzaW5nIHZh
bHVlcyBwcm9kdWNlZCBieSBzZXEuZ2VuZXJhdGUoKS4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5E
T01fREVUQUlMX1NFRURfU0VRX1NFRUQobWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUsIFNlZXFTZXEs
IHNlcSkKLSAgICB7Ci0gICAgICAgIGRldGFpbDo6c2VlZF9hcnJheV9pbnQ8dz4oc2VxLCB4KTsK
LSAgICAgICAgaSA9IG47Ci0KLSAgICAgICAgbm9ybWFsaXplX3N0YXRlKCk7Ci0gICAgfQotCi0g
ICAgLyoqIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IgdXNpbmcgdmFsdWVzIGZyb20g
YW4gaXRlcmF0b3IgcmFuZ2UuICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+Ci0gICAgdm9pZCBz
ZWVkKEl0JiBmaXJzdCwgSXQgbGFzdCkKLSAgICB7Ci0gICAgICAgIGRldGFpbDo6ZmlsbF9hcnJh
eV9pbnQ8dz4oZmlyc3QsIGxhc3QsIHgpOwotICAgICAgICBpID0gbjsKLQotICAgICAgICBub3Jt
YWxpemVfc3RhdGUoKTsKLSAgICB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgc21hbGxlc3QgdmFs
dWUgdGhhdCB0aGUgZ2VuZXJhdG9yIGNhbiBwcm9kdWNlLiAqLwotICAgIHN0YXRpYyByZXN1bHRf
dHlwZSBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkKLSAgICB7IHJldHVy
biAwOyB9Ci0gICAgLyoqIFJldHVybnMgdGhlIGxhcmdlc3QgdmFsdWUgdGhhdCB0aGUgZ2VuZXJh
dG9yIGNhbiBwcm9kdWNlLiAqLwotICAgIHN0YXRpYyByZXN1bHRfdHlwZSBtYXggQk9PU1RfUFJF
VkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkKLSAgICB7IHJldHVybiBib29zdDo6bG93X2JpdHNf
bWFza190PHc+OjpzaWdfYml0czsgfQotCi0gICAgLyoqIFByb2R1Y2VzIHRoZSBuZXh0IHZhbHVl
IG9mIHRoZSBnZW5lcmF0b3IuICovCi0gICAgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKSgpOwotCi0g
ICAgLyoqIEZpbGxzIGEgcmFuZ2Ugd2l0aCByYW5kb20gdmFsdWVzICovCi0gICAgdGVtcGxhdGU8
Y2xhc3MgSXRlcj4KLSAgICB2b2lkIGdlbmVyYXRlKEl0ZXIgZmlyc3QsIEl0ZXIgbGFzdCkKLSAg
ICB7IGRldGFpbDo6Z2VuZXJhdGVfZnJvbV9pbnQoKnRoaXMsIGZpcnN0LCBsYXN0KTsgfQotCi0g
ICAgLyoqCi0gICAgICogQWR2YW5jZXMgdGhlIHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IgYnkgQGMg
eiBzdGVwcy4gIEVxdWl2YWxlbnQgdG8KLSAgICAgKgotICAgICAqIEBjb2RlCi0gICAgICogZm9y
KHVuc2lnbmVkIGxvbmcgbG9uZyBpID0gMDsgaSA8IHo7ICsraSkgewotICAgICAqICAgICBnZW4o
KTsKLSAgICAgKiB9Ci0gICAgICogQGVuZGNvZGUKLSAgICAgKi8KLSAgICB2b2lkIGRpc2NhcmQo
Ym9vc3Q6OnVpbnRtYXhfdCB6KQotICAgIHsKLSNpZm5kZWYgQk9PU1RfUkFORE9NX01FUlNFTk5F
X1RXSVNURVJfRElTQ0FSRF9USFJFU0hPTEQKLSNkZWZpbmUgQk9PU1RfUkFORE9NX01FUlNFTk5F
X1RXSVNURVJfRElTQ0FSRF9USFJFU0hPTEQgMTAwMDAwMDAKLSNlbmRpZgotICAgICAgICBpZih6
ID4gQk9PU1RfUkFORE9NX01FUlNFTk5FX1RXSVNURVJfRElTQ0FSRF9USFJFU0hPTEQpIHsKLSAg
ICAgICAgICAgIGRpc2NhcmRfbWFueSh6KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGZvcihib29zdDo6dWludG1heF90IGogPSAwOyBqIDwgejsgKytqKSB7Ci0gICAgICAgICAgICAg
ICAgKCp0aGlzKSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jaWZuZGVm
IEJPT1NUX1JBTkRPTV9OT19TVFJFQU1fT1BFUkFUT1JTCi0gICAgLyoqIFdyaXRlcyBhIG1lcnNl
bm5lX3R3aXN0ZXJfZW5naW5lIHRvIGEgQGMgc3RkOjpvc3RyZWFtICovCi0gICAgdGVtcGxhdGU8
Y2xhc3MgQ2hhclQsIGNsYXNzIFRyYWl0cz4KLSAgICBmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFt
PENoYXJULFRyYWl0cz4mCi0gICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08Q2hhclQs
VHJhaXRzPiYgb3MsCi0gICAgICAgICAgICAgICBjb25zdCBtZXJzZW5uZV90d2lzdGVyX2VuZ2lu
ZSYgbXQpCi0gICAgewotICAgICAgICBtdC5wcmludChvcyk7Ci0gICAgICAgIHJldHVybiBvczsK
LSAgICB9Ci0KLSAgICAvKiogUmVhZHMgYSBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZSBmcm9tIGEg
QGMgc3RkOjppc3RyZWFtICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgQ2hhclQsIGNsYXNzIFRyYWl0
cz4KLSAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPENoYXJULFRyYWl0cz4mCi0gICAgb3Bl
cmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhclQsVHJhaXRzPiYgaXMsCi0gICAgICAgICAg
ICAgICBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZSYgbXQpCi0gICAgewotICAgICAgICBmb3Ioc3Rk
OjpzaXplX3QgaiA9IDA7IGogPCBtdC5zdGF0ZV9zaXplOyArK2opCi0gICAgICAgICAgICBpcyA+
PiBtdC54W2pdID4+IHN0ZDo6d3M7Ci0gICAgICAgIC8vIE1TVkMgKHVwIHRvIDcuMSkgYW5kIEJv
cmxhbmQgKHVwIHRvIDUuNjQpIGRvbid0IGhhbmRsZSB0aGUgdGVtcGxhdGUKLSAgICAgICAgLy8g
dmFsdWUgcGFyYW1ldGVyICJuIiBhdmFpbGFibGUgZnJvbSB0aGUgY2xhc3MgdGVtcGxhdGUgc2Nv
cGUsIHNvIHVzZQotICAgICAgICAvLyB0aGUgc3RhdGljIGNvbnN0YW50IHdpdGggdGhlIHNhbWUg
dmFsdWUKLSAgICAgICAgbXQuaSA9IG10LnN0YXRlX3NpemU7Ci0gICAgICAgIHJldHVybiBpczsK
LSAgICB9Ci0jZW5kaWYKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdv
IGdlbmVyYXRvcnMgYXJlIGluIHRoZSBzYW1lIHN0YXRlLAotICAgICAqIGFuZCB3aWxsIHRodXMg
cHJvZHVjZSBpZGVudGljYWwgc2VxdWVuY2VzLgotICAgICAqLwotICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUmIHhfLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUmIHlfKQotICAgIHsK
LSAgICAgICAgaWYoeF8uaSA8IHlfLmkpIHJldHVybiB4Xy5lcXVhbF9pbXAoeV8pOwotICAgICAg
ICBlbHNlIHJldHVybiB5Xy5lcXVhbF9pbXAoeF8pOwotICAgIH0KLQotICAgIC8qKgotICAgICAq
IFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGdlbmVyYXRvcnMgYXJlIGluIGRpZmZlcmVudCBzdGF0
ZXMuCi0gICAgICovCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBtZXJzZW5uZV90
d2lzdGVyX2VuZ2luZSYgeF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJz
ZW5uZV90d2lzdGVyX2VuZ2luZSYgeV8pCi0gICAgeyByZXR1cm4gISh4XyA9PSB5Xyk7IH0KLQot
cHJpdmF0ZToKLSAgICAvLy8gXGNvbmQgc2hvd19wcml2YXRlCi0KLSAgICB2b2lkIHR3aXN0KCk7
Ci0KLSAgICAvKioKLSAgICAgKiBEb2VzIHRoZSB3b3JrIG9mIG9wZXJhdG9yPT0uICBUaGlzIGlz
IGluIGEgbWVtYmVyIGZ1bmN0aW9uCi0gICAgICogZm9yIHBvcnRhYmlsaXR5LiAgU29tZSBjb21w
aWxlcnMsIHN1Y2ggYXMgbXN2YyA3LjEgYW5kCi0gICAgICogU3VuIENDIDUuMTAgY2FuJ3QgYWNj
ZXNzIHRlbXBsYXRlIHBhcmFtZXRlcnMgb3Igc3RhdGljCi0gICAgICogbWVtYmVycyBvZiB0aGUg
Y2xhc3MgZnJvbSBpbmxpbmUgZnJpZW5kIGZ1bmN0aW9ucy4KLSAgICAgKgotICAgICAqIHJlcXVp
cmVzIGkgPD0gb3RoZXIuaQotICAgICAqLwotICAgIGJvb2wgZXF1YWxfaW1wKGNvbnN0IG1lcnNl
bm5lX3R3aXN0ZXJfZW5naW5lJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIFVJbnRUeXBl
IGJhY2tbbl07Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG9mZnNldCA9IG90aGVyLmkgLSBpOwotICAg
ICAgICBmb3Ioc3RkOjpzaXplX3QgaiA9IDA7IGogKyBvZmZzZXQgPCBuOyArK2opCi0gICAgICAg
ICAgICBpZih4W2pdICE9IG90aGVyLnhbaitvZmZzZXRdKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgcmV3aW5kKCZiYWNrW24tMV0sIG9mZnNldCk7Ci0gICAgICAgIGZv
cihzdGQ6OnNpemVfdCBqID0gMDsgaiA8IG9mZnNldDsgKytqKQotICAgICAgICAgICAgaWYoYmFj
a1tqICsgbiAtIG9mZnNldF0gIT0gb3RoZXIueFtqXSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERv
ZXMgdGhlIHdvcmsgb2Ygb3BlcmF0b3I8PC4gIFRoaXMgaXMgaW4gYSBtZW1iZXIgZnVuY3Rpb24K
LSAgICAgKiBmb3IgcG9ydGFiaWxpdHkuCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgQ2hh
clQsIGNsYXNzIFRyYWl0cz4KLSAgICB2b2lkIHByaW50KHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFy
VCwgVHJhaXRzPiYgb3MpIGNvbnN0Ci0gICAgewotICAgICAgICBVSW50VHlwZSBkYXRhW25dOwot
ICAgICAgICBmb3Ioc3RkOjpzaXplX3QgaiA9IDA7IGogPCBpOyArK2opIHsKLSAgICAgICAgICAg
IGRhdGFbaiArIG4gLSBpXSA9IHhbal07Ci0gICAgICAgIH0KLSAgICAgICAgaWYoaSAhPSBuKSB7
Ci0gICAgICAgICAgICByZXdpbmQoJmRhdGFbbiAtIGkgLSAxXSwgbiAtIGkpOwotICAgICAgICB9
Ci0gICAgICAgIG9zIDw8IGRhdGFbMF07Ci0gICAgICAgIGZvcihzdGQ6OnNpemVfdCBqID0gMTsg
aiA8IG47ICsraikgewotICAgICAgICAgICAgb3MgPDwgJyAnIDw8IGRhdGFbal07Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb3BpZXMgeiBlbGVtZW50cyBvZiB0aGUgc3Rh
dGUgcHJlY2VkaW5nIHhbMF0gaW50bwotICAgICAqIHRoZSBhcnJheSB3aG9zZSBsYXN0IGVsZW1l
bnQgaXMgbGFzdC4KLSAgICAgKi8KLSAgICB2b2lkIHJld2luZChVSW50VHlwZSogbGFzdCwgc3Rk
OjpzaXplX3QgeikgY29uc3QKLSAgICB7Ci0gICAgICAgIGNvbnN0IFVJbnRUeXBlIHVwcGVyX21h
c2sgPSAofnN0YXRpY19jYXN0PFVJbnRUeXBlPigwKSkgPDwgcjsKLSAgICAgICAgY29uc3QgVUlu
dFR5cGUgbG93ZXJfbWFzayA9IH51cHBlcl9tYXNrOwotICAgICAgICBVSW50VHlwZSB5MCA9IHhb
bS0xXSBeIHhbbi0xXTsKLSAgICAgICAgaWYoeTAgJiAoc3RhdGljX2Nhc3Q8VUludFR5cGU+KDEp
IDw8ICh3LTEpKSkgewotICAgICAgICAgICAgeTAgPSAoKHkwIF4gYSkgPDwgMSkgfCAxOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgeTAgPSB5MCA8PCAxOwotICAgICAgICB9Ci0gICAg
ICAgIGZvcihzdGQ6OnNpemVfdCBzeiA9IDA7IHN6IDwgejsgKytzeikgewotICAgICAgICAgICAg
VUludFR5cGUgeTEgPQotICAgICAgICAgICAgICAgIHJld2luZF9maW5kKGxhc3QsIHN6LCBtLTEp
IF4gcmV3aW5kX2ZpbmQobGFzdCwgc3osIG4tMSk7Ci0gICAgICAgICAgICBpZih5MSAmIChzdGF0
aWNfY2FzdDxVSW50VHlwZT4oMSkgPDwgKHctMSkpKSB7Ci0gICAgICAgICAgICAgICAgeTEgPSAo
KHkxIF4gYSkgPDwgMSkgfCAxOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICB5MSA9IHkxIDw8IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqKGxhc3QgLSBzeikg
PSAoeTAgJiB1cHBlcl9tYXNrKSB8ICh5MSAmIGxvd2VyX21hc2spOwotICAgICAgICAgICAgeTAg
PSB5MTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnZlcnRzIGFuIGFy
Yml0cmFyeSBhcnJheSBpbnRvIGEgdmFsaWQgZ2VuZXJhdG9yIHN0YXRlLgotICAgICAqIEZpcnN0
IHdlIG5vcm1hbGl6ZSB4WzBdLCBzbyB0aGF0IGl0IGNvbnRhaW5zIHRoZSBzYW1lCi0gICAgICog
dmFsdWUgd2Ugd291bGQgZ2V0IGJ5IHJ1bm5pbmcgdGhlIGdlbmVyYXRvciBmb3J3YXJkcwotICAg
ICAqIGFuZCB0aGVuIGluIHJldmVyc2UuICAoVGhlIGxvdyBvcmRlciByIGJpdHMgYXJlIHJlZHVu
ZGFudCkuCi0gICAgICogVGhlbiwgaWYgdGhlIHN0YXRlIGNvbnNpc3RzIG9mIGFsbCB6ZXJvcywg
d2Ugc2V0IHRoZQotICAgICAqIGhpZ2ggb3JkZXIgYml0IG9mIHhbMF0gdG8gMS4gIFRoaXMgZnVu
Y3Rpb24gb25seSBuZWVkcyB0bwotICAgICAqIGJlIGNhbGxlZCBieSBzZWVkLCBzaW5jZSB0aGUg
c3RhdGUgdHJhbnNmb3JtIHByZXNlcnZlcwotICAgICAqIHRoaXMgcmVsYXRpb25zaGlwLgotICAg
ICAqLwotICAgIHZvaWQgbm9ybWFsaXplX3N0YXRlKCkKLSAgICB7Ci0gICAgICAgIGNvbnN0IFVJ
bnRUeXBlIHVwcGVyX21hc2sgPSAofnN0YXRpY19jYXN0PFVJbnRUeXBlPigwKSkgPDwgcjsKLSAg
ICAgICAgY29uc3QgVUludFR5cGUgbG93ZXJfbWFzayA9IH51cHBlcl9tYXNrOwotICAgICAgICBV
SW50VHlwZSB5MCA9IHhbbS0xXSBeIHhbbi0xXTsKLSAgICAgICAgaWYoeTAgJiAoc3RhdGljX2Nh
c3Q8VUludFR5cGU+KDEpIDw8ICh3LTEpKSkgewotICAgICAgICAgICAgeTAgPSAoKHkwIF4gYSkg
PDwgMSkgfCAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgeTAgPSB5MCA8PCAxOwot
ICAgICAgICB9Ci0gICAgICAgIHhbMF0gPSAoeFswXSAmIHVwcGVyX21hc2spIHwgKHkwICYgbG93
ZXJfbWFzayk7Ci0KLSAgICAgICAgLy8gZml4IHVwIHRoZSBzdGF0ZSBpZiBpdCdzIGFsbCB6ZXJv
ZXMuCi0gICAgICAgIGZvcihzdGQ6OnNpemVfdCBqID0gMDsgaiA8IG47ICsraikgewotICAgICAg
ICAgICAgaWYoeFtqXSAhPSAwKSByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgeFswXSA9IHN0
YXRpY19jYXN0PFVJbnRUeXBlPigxKSA8PCAody0xKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAg
KiBHaXZlbiBhIHBvaW50ZXIgdG8gdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcmV3aW5kIGFycmF5
LAotICAgICAqIGFuZCB0aGUgY3VycmVudCBzaXplIG9mIHRoZSByZXdpbmQgYXJyYXksIGZpbmRz
IGFuIGVsZW1lbnQKLSAgICAgKiByZWxhdGl2ZSB0byB0aGUgbmV4dCBhdmFpbGFibGUgc2xvdCBp
biB0aGUgcmV3aW5kIGFycmF5LgotICAgICAqLwotICAgIFVJbnRUeXBlCi0gICAgcmV3aW5kX2Zp
bmQoVUludFR5cGUqIGxhc3QsIHN0ZDo6c2l6ZV90IHNpemUsIHN0ZDo6c2l6ZV90IGopIGNvbnN0
Ci0gICAgewotICAgICAgICBzdGQ6OnNpemVfdCBpbmRleCA9IChqICsgbiAtIHNpemUgKyBuIC0g
MSkgJSBuOwotICAgICAgICBpZihpbmRleCA8IG4gLSBzaXplKSB7Ci0gICAgICAgICAgICByZXR1
cm4geFtpbmRleF07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gKihsYXN0
IC0gKG4gLSAxIC0gaW5kZXgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAq
IE9wdGltaXplZCBhbGdvcml0aG0gZm9yIGxhcmdlIGp1bXBzLgotICAgICAqCi0gICAgICogSGly
b3NoaSBIYXJhbW90bywgTWFrb3RvIE1hdHN1bW90bywgYW5kIFBpZXJyZSBMJ0VjdXllci4gMjAw
OC4KLSAgICAgKiBBIEZhc3QgSnVtcCBBaGVhZCBBbGdvcml0aG0gZm9yIExpbmVhciBSZWN1cnJl
bmNlcyBpbiBhIFBvbHlub21pYWwKLSAgICAgKiBTcGFjZS4gSW4gUHJvY2VlZGluZ3Mgb2YgdGhl
IDV0aCBpbnRlcm5hdGlvbmFsIGNvbmZlcmVuY2Ugb24KLSAgICAgKiBTZXF1ZW5jZXMgYW5kIFRo
ZWlyIEFwcGxpY2F0aW9ucyAoU0VUQSAnMDgpLgotICAgICAqIERPST0xMC4xMDA3Lzk3OC0zLTU0
MC04NTkxMi0zXzI2Ci0gICAgICovCi0gICAgdm9pZCBkaXNjYXJkX21hbnkoYm9vc3Q6OnVpbnRt
YXhfdCB6KQotICAgIHsKLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgbWluaW1hbCBwb2x5bm9taWFs
LCBwaGkodCkKLSAgICAgICAgLy8gVGhpcyBkZXBlbmRzIG9ubHkgb24gdGhlIHRyYW5zaXRpb24g
ZnVuY3Rpb24sCi0gICAgICAgIC8vIHdoaWNoIGlzIGNvbnN0YW50LiAgVGhlIGNoYXJhY3Rlcmlz
dGljCi0gICAgICAgIC8vIHBvbHlub21pYWwgaXMgdGhlIHNhbWUgYXMgdGhlIG1pbmltYWwKLSAg
ICAgICAgLy8gcG9seW5vbWlhbCBmb3IgYSBtYXhpbXVtIHBlcmlvZCBnZW5lcmF0b3IKLSAgICAg
ICAgLy8gKHdoaWNoIHNob3VsZCBiZSBhbGwgc3BlY2lhbGl6YXRpb25zIG9mCi0gICAgICAgIC8v
IG1lcnNlbm5lX3R3aXN0ZXIuKSAgRXZlbiBpZiBpdCB3ZXJlbid0LAotICAgICAgICAvLyB0aGUg
Y2hhcmFjdGVyaXN0aWMgcG9seW5vbWlhbCBpcyBndWFyYW50ZWVkCi0gICAgICAgIC8vIHRvIGJl
IGEgbXVsdGlwbGUgb2YgdGhlIG1pbmltYWwgcG9seW5vbWlhbCwKLSAgICAgICAgLy8gd2hpY2gg
aXMgZ29vZCBlbm91Z2guCi0gICAgICAgIGRldGFpbDo6cG9seW5vbWlhbCBwaGkgPSBnZXRfY2hh
cmFjdGVyaXN0aWNfcG9seW5vbWlhbCgpOwotCi0gICAgICAgIC8vIGNhbGN1bGF0ZSBnKHQpID0g
dF56ICUgcGhpKHQpCi0gICAgICAgIGRldGFpbDo6cG9seW5vbWlhbCBnID0gbW9kX3Bvd194KHos
IHBoaSk7Ci0KLSAgICAgICAgLy8gaChzXzAsIHQpID0gXHN1bV97aT0wfV57MmstMX1vKHNfaSl0
Xnsyay1pLTF9Ci0gICAgICAgIGRldGFpbDo6cG9seW5vbWlhbCBoOwotICAgICAgICBjb25zdCBz
dGQ6OnNpemVfdCBudW1fYml0cyA9IHcqbiAtIHI7Ci0gICAgICAgIGZvcihzdGQ6OnNpemVfdCBq
ID0gMDsgaiA8IG51bV9iaXRzICogMjsgKytqKSB7Ci0gICAgICAgICAgICAvLyBZZXMsIHdlJ3Jl
IGFkdmFuY2luZyB0aGUgZ2VuZXJhdG9yIHN0YXRlCi0gICAgICAgICAgICAvLyBoZXJlLCBidXQg
aXQgZG9lc24ndCBtYXR0ZXIgYmVjYXVzZQotICAgICAgICAgICAgLy8gd2UncmUgZ29pbmcgdG8g
b3ZlcndyaXRlIGl0IGNvbXBsZXRlbHkKLSAgICAgICAgICAgIC8vIGluIHJlY29uc3RydWN0X3N0
YXRlLgotICAgICAgICAgICAgaWYoaSA+PSBuKSB0d2lzdCgpOwotICAgICAgICAgICAgaFsyKm51
bV9iaXRzIC0gaiAtIDFdID0geFtpKytdICYgVUludFR5cGUoMSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gZyh0KWgoc18wLCB0KQotICAgICAgICBkZXRhaWw6OnBvbHlub21pYWwgZ2ggPSBnICog
aDsKLSAgICAgICAgZGV0YWlsOjpwb2x5bm9taWFsIHJlc3VsdDsKLSAgICAgICAgZm9yKHN0ZDo6
c2l6ZV90IGogPSAwOyBqIDw9IG51bV9iaXRzOyArK2opIHsKLSAgICAgICAgICAgIHJlc3VsdFtq
XSA9IGdoWzIqbnVtX2JpdHMgLSBqIC0gMV07Ci0gICAgICAgIH0KLSAgICAgICAgcmVjb25zdHJ1
Y3Rfc3RhdGUocmVzdWx0KTsKLSAgICB9Ci0gICAgc3RhdGljIGRldGFpbDo6cG9seW5vbWlhbCBn
ZXRfY2hhcmFjdGVyaXN0aWNfcG9seW5vbWlhbCgpCi0gICAgewotICAgICAgICBjb25zdCBzdGQ6
OnNpemVfdCBudW1fYml0cyA9IHcqbiAtIHI7Ci0gICAgICAgIGRldGFpbDo6cG9seW5vbWlhbCBo
ZWxwZXI7Ci0gICAgICAgIGhlbHBlcltudW1fYml0cyAtIDFdID0gMTsKLSAgICAgICAgbWVyc2Vu
bmVfdHdpc3Rlcl9lbmdpbmUgdG1wOwotICAgICAgICB0bXAucmVjb25zdHJ1Y3Rfc3RhdGUoaGVs
cGVyKTsKLSAgICAgICAgLy8gU2tpcCB0aGUgZmlyc3QgbnVtX2JpdHMgZWxlbWVudHMsIHNpbmNl
IHdlCi0gICAgICAgIC8vIGFscmVhZHkga25vdyB3aGF0IHRoZXkgYXJlLgotICAgICAgICBmb3Io
c3RkOjpzaXplX3QgaiA9IDA7IGogPCBudW1fYml0czsgKytqKSB7Ci0gICAgICAgICAgICBpZih0
bXAuaSA+PSBuKSB0bXAudHdpc3QoKTsKLSAgICAgICAgICAgIGlmKGogPT0gbnVtX2JpdHMgLSAx
KQotICAgICAgICAgICAgICAgIGFzc2VydCgodG1wLnhbdG1wLmldICYgMSkgPT0gMSk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXNzZXJ0KCh0bXAueFt0bXAuaV0gJiAxKSA9
PSAwKTsKLSAgICAgICAgICAgICsrdG1wLmk7Ci0gICAgICAgIH0KLSAgICAgICAgZGV0YWlsOjpw
b2x5bm9taWFsIHBoaTsKLSAgICAgICAgcGhpW251bV9iaXRzXSA9IDE7Ci0gICAgICAgIGRldGFp
bDo6cG9seW5vbWlhbCBuZXh0X2JpdHMgPSB0bXAuYXNfcG9seW5vbWlhbChudW1fYml0cyk7Ci0g
ICAgICAgIGZvcihzdGQ6OnNpemVfdCBqID0gMDsgaiA8IG51bV9iaXRzOyArK2opIHsKLSAgICAg
ICAgICAgIGludCB2YWwgPSBuZXh0X2JpdHNbal0gXiBwaGlbbnVtX2JpdHMtai0xXTsKLSAgICAg
ICAgICAgIHBoaVtudW1fYml0cy1qLTFdID0gdmFsOwotICAgICAgICAgICAgaWYodmFsKSB7Ci0g
ICAgICAgICAgICAgICAgZm9yKHN0ZDo6c2l6ZV90IGsgPSBqICsgMTsgayA8IG51bV9iaXRzOyAr
K2spIHsKLSAgICAgICAgICAgICAgICAgICAgcGhpW251bV9iaXRzLWstMV0gXj0gbmV4dF9iaXRz
W2stai0xXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHBoaTsKLSAgICB9Ci0gICAgZGV0YWlsOjpwb2x5bm9taWFsIGFzX3BvbHlu
b21pYWwoc3RkOjpzaXplX3Qgc2l6ZSkgewotICAgICAgICBkZXRhaWw6OnBvbHlub21pYWwgcmVz
dWx0OwotICAgICAgICBmb3Ioc3RkOjpzaXplX3QgaiA9IDA7IGogPCBzaXplOyArK2opIHsKLSAg
ICAgICAgICAgIGlmKGkgPj0gbikgdHdpc3QoKTsKLSAgICAgICAgICAgIHJlc3VsdFtqXSA9IHhb
aSsrXSAmIFVJbnRUeXBlKDEpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotICAgIHZvaWQgcmVjb25zdHJ1Y3Rfc3RhdGUoY29uc3QgZGV0YWlsOjpwb2x5bm9taWFs
JiBwKQotICAgIHsKLSAgICAgICAgY29uc3QgVUludFR5cGUgdXBwZXJfbWFzayA9ICh+c3RhdGlj
X2Nhc3Q8VUludFR5cGU+KDApKSA8PCByOwotICAgICAgICBjb25zdCBVSW50VHlwZSBsb3dlcl9t
YXNrID0gfnVwcGVyX21hc2s7Ci0gICAgICAgIGNvbnN0IHN0ZDo6c2l6ZV90IG51bV9iaXRzID0g
dypuIC0gcjsKLSAgICAgICAgZm9yKHN0ZDo6c2l6ZV90IGogPSBudW1fYml0cyAtIG4gKyAxOyBq
IDw9IG51bV9iaXRzOyArK2opCi0gICAgICAgICAgICB4W2ogJSBuXSA9IHBbal07Ci0KLSAgICAg
ICAgVUludFR5cGUgeTAgPSAwOwotICAgICAgICBmb3Ioc3RkOjpzaXplX3QgaiA9IG51bV9iaXRz
ICsgMTsgaiA+PSBuIC0gMTsgLS1qKSB7Ci0gICAgICAgICAgICBVSW50VHlwZSB5MSA9IHhbaiAl
IG5dIF4geFsoaiArIG0pICUgbl07Ci0gICAgICAgICAgICBpZihwW2ogLSBuICsgMV0pCi0gICAg
ICAgICAgICAgICAgeTEgPSAoeTEgXiBhKSA8PCBVSW50VHlwZSgxKSB8IFVJbnRUeXBlKDEpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHkxID0geTEgPDwgVUludFR5cGUoMSk7
Ci0gICAgICAgICAgICB4WyhqICsgMSkgJSBuXSA9ICh5MCAmIHVwcGVyX21hc2spIHwgKHkxICYg
bG93ZXJfbWFzayk7Ci0gICAgICAgICAgICB5MCA9IHkxOwotICAgICAgICB9Ci0gICAgICAgIGkg
PSAwOwotICAgIH0KLQotICAgIC8vLyBcZW5kY29uZAotCi0gICAgLy8gc3RhdGUgcmVwcmVzZW50
YXRpb246IG5leHQgb3V0cHV0IGlzIG8oeChpKSkKLSAgICAvLyAgIHhbMF0gIC4uLiB4W2tdIHhb
aysxXSAuLi4geFtuLTFdICAgcmVwcmVzZW50cwotICAgIC8vICB4KGktaykgLi4uIHgoaSkgeChp
KzEpIC4uLiB4KGktaytuLTEpCi0KLSAgICBVSW50VHlwZSB4W25dOwotICAgIHN0ZDo6c2l6ZV90
IGk7Ci19OwotCi0vLy8gXGNvbmQgc2hvd19wcml2YXRlCi0KLSNpZm5kZWYgQk9PU1RfTk9fSU5D
TEFTU19NRU1CRVJfSU5JVElBTElaQVRJT04KLS8vICBBIGRlZmluaXRpb24gaXMgcmVxdWlyZWQg
ZXZlbiBmb3IgaW50ZWdyYWwgc3RhdGljIGNvbnN0YW50cwotI2RlZmluZSBCT09TVF9SQU5ET01f
TVRfREVGSU5FX0NPTlNUQU5UKHR5cGUsIG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LXRlbXBsYXRlPGNsYXNzIFVJbnRUeXBlLCBzdGQ6OnNpemVfdCB3LCBzdGQ6OnNpemVfdCBuLCBz
dGQ6OnNpemVfdCBtLCAgICAgICBcCi0gICAgc3RkOjpzaXplX3QgciwgVUludFR5cGUgYSwgc3Rk
OjpzaXplX3QgdSwgVUludFR5cGUgZCwgc3RkOjpzaXplX3QgcywgICAgXAotICAgIFVJbnRUeXBl
IGIsIHN0ZDo6c2l6ZV90IHQsIFVJbnRUeXBlIGMsIHN0ZDo6c2l6ZV90IGwsIFVJbnRUeXBlIGY+
ICAgICAgIFwKLWNvbnN0IHR5cGUgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8VUludFR5cGUsdyxu
LG0scixhLHUsZCxzLGIsdCxjLGwsZj46Om5hbWUKLUJPT1NUX1JBTkRPTV9NVF9ERUZJTkVfQ09O
U1RBTlQoc3RkOjpzaXplX3QsIHdvcmRfc2l6ZSk7Ci1CT09TVF9SQU5ET01fTVRfREVGSU5FX0NP
TlNUQU5UKHN0ZDo6c2l6ZV90LCBzdGF0ZV9zaXplKTsKLUJPT1NUX1JBTkRPTV9NVF9ERUZJTkVf
Q09OU1RBTlQoc3RkOjpzaXplX3QsIHNoaWZ0X3NpemUpOwotQk9PU1RfUkFORE9NX01UX0RFRklO
RV9DT05TVEFOVChzdGQ6OnNpemVfdCwgbWFza19iaXRzKTsKLUJPT1NUX1JBTkRPTV9NVF9ERUZJ
TkVfQ09OU1RBTlQoVUludFR5cGUsIHhvcl9tYXNrKTsKLUJPT1NUX1JBTkRPTV9NVF9ERUZJTkVf
Q09OU1RBTlQoc3RkOjpzaXplX3QsIHRlbXBlcmluZ191KTsKLUJPT1NUX1JBTkRPTV9NVF9ERUZJ
TkVfQ09OU1RBTlQoVUludFR5cGUsIHRlbXBlcmluZ19kKTsKLUJPT1NUX1JBTkRPTV9NVF9ERUZJ
TkVfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHRlbXBlcmluZ19zKTsKLUJPT1NUX1JBTkRPTV9NVF9E
RUZJTkVfQ09OU1RBTlQoVUludFR5cGUsIHRlbXBlcmluZ19iKTsKLUJPT1NUX1JBTkRPTV9NVF9E
RUZJTkVfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHRlbXBlcmluZ190KTsKLUJPT1NUX1JBTkRPTV9N
VF9ERUZJTkVfQ09OU1RBTlQoVUludFR5cGUsIHRlbXBlcmluZ19jKTsKLUJPT1NUX1JBTkRPTV9N
VF9ERUZJTkVfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHRlbXBlcmluZ19sKTsKLUJPT1NUX1JBTkRP
TV9NVF9ERUZJTkVfQ09OU1RBTlQoVUludFR5cGUsIGluaXRpYWxpemF0aW9uX211bHRpcGxpZXIp
OwotQk9PU1RfUkFORE9NX01UX0RFRklORV9DT05TVEFOVChVSW50VHlwZSwgZGVmYXVsdF9zZWVk
KTsKLUJPT1NUX1JBTkRPTV9NVF9ERUZJTkVfQ09OU1RBTlQoVUludFR5cGUsIHBhcmFtZXRlcl9h
KTsKLUJPT1NUX1JBTkRPTV9NVF9ERUZJTkVfQ09OU1RBTlQoc3RkOjpzaXplX3QsIG91dHB1dF91
ICk7Ci1CT09TVF9SQU5ET01fTVRfREVGSU5FX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCBvdXRwdXRf
cyk7Ci1CT09TVF9SQU5ET01fTVRfREVGSU5FX0NPTlNUQU5UKFVJbnRUeXBlLCBvdXRwdXRfYik7
Ci1CT09TVF9SQU5ET01fTVRfREVGSU5FX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCBvdXRwdXRfdCk7
Ci1CT09TVF9SQU5ET01fTVRfREVGSU5FX0NPTlNUQU5UKFVJbnRUeXBlLCBvdXRwdXRfYyk7Ci1C
T09TVF9SQU5ET01fTVRfREVGSU5FX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCBvdXRwdXRfbCk7Ci1C
T09TVF9SQU5ET01fTVRfREVGSU5FX0NPTlNUQU5UKGJvb2wsIGhhc19maXhlZF9yYW5nZSk7Ci0j
dW5kZWYgQk9PU1RfUkFORE9NX01UX0RFRklORV9DT05TVEFOVAotI2VuZGlmCi0KLXRlbXBsYXRl
PGNsYXNzIFVJbnRUeXBlLAotICAgICAgICAgc3RkOjpzaXplX3Qgdywgc3RkOjpzaXplX3Qgbiwg
c3RkOjpzaXplX3QgbSwgc3RkOjpzaXplX3QgciwKLSAgICAgICAgIFVJbnRUeXBlIGEsIHN0ZDo6
c2l6ZV90IHUsIFVJbnRUeXBlIGQsIHN0ZDo6c2l6ZV90IHMsCi0gICAgICAgICBVSW50VHlwZSBi
LCBzdGQ6OnNpemVfdCB0LAotICAgICAgICAgVUludFR5cGUgYywgc3RkOjpzaXplX3QgbCwgVUlu
dFR5cGUgZj4KLXZvaWQKLW1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPFVJbnRUeXBlLHcsbixtLHIs
YSx1LGQscyxiLHQsYyxsLGY+Ojp0d2lzdCgpCi17Ci0gICAgY29uc3QgVUludFR5cGUgdXBwZXJf
bWFzayA9ICh+c3RhdGljX2Nhc3Q8VUludFR5cGU+KDApKSA8PCByOwotICAgIGNvbnN0IFVJbnRU
eXBlIGxvd2VyX21hc2sgPSB+dXBwZXJfbWFzazsKLQotICAgIGNvbnN0IHN0ZDo6c2l6ZV90IHVu
cm9sbF9mYWN0b3IgPSA2OwotICAgIGNvbnN0IHN0ZDo6c2l6ZV90IHVucm9sbF9leHRyYTEgPSAo
bi1tKSAlIHVucm9sbF9mYWN0b3I7Ci0gICAgY29uc3Qgc3RkOjpzaXplX3QgdW5yb2xsX2V4dHJh
MiA9IChtLTEpICUgdW5yb2xsX2ZhY3RvcjsKLQotICAgIC8vIHNwbGl0IGxvb3AgdG8gYXZvaWQg
Y29zdGx5IG1vZHVsbyBvcGVyYXRpb25zCi0gICAgeyAgLy8gZXh0cmEgc2NvcGUgZm9yIE1TVkMg
YnJva2VubmVzcyB3LnIudC4gZm9yIHNjb3BlCi0gICAgICAgIGZvcihzdGQ6OnNpemVfdCBqID0g
MDsgaiA8IG4tbS11bnJvbGxfZXh0cmExOyBqKyspIHsKLSAgICAgICAgICAgIFVJbnRUeXBlIHkg
PSAoeFtqXSAmIHVwcGVyX21hc2spIHwgKHhbaisxXSAmIGxvd2VyX21hc2spOwotICAgICAgICAg
ICAgeFtqXSA9IHhbaittXSBeICh5ID4+IDEpIF4gKCh4W2orMV0mMSkgKiBhKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICB7Ci0gICAgICAgIGZvcihzdGQ6OnNpemVfdCBqID0gbi1tLXVucm9sbF9l
eHRyYTE7IGogPCBuLW07IGorKykgewotICAgICAgICAgICAgVUludFR5cGUgeSA9ICh4W2pdICYg
dXBwZXJfbWFzaykgfCAoeFtqKzFdICYgbG93ZXJfbWFzayk7Ci0gICAgICAgICAgICB4W2pdID0g
eFtqK21dIF4gKHkgPj4gMSkgXiAoKHhbaisxXSYxKSAqIGEpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHsKLSAgICAgICAgZm9yKHN0ZDo6c2l6ZV90IGogPSBuLW07IGogPCBuLTEtdW5yb2xsX2V4
dHJhMjsgaisrKSB7Ci0gICAgICAgICAgICBVSW50VHlwZSB5ID0gKHhbal0gJiB1cHBlcl9tYXNr
KSB8ICh4W2orMV0gJiBsb3dlcl9tYXNrKTsKLSAgICAgICAgICAgIHhbal0gPSB4W2otKG4tbSld
IF4gKHkgPj4gMSkgXiAoKHhbaisxXSYxKSAqIGEpOwotICAgICAgICB9Ci0gICAgfQotICAgIHsK
LSAgICAgICAgZm9yKHN0ZDo6c2l6ZV90IGogPSBuLTEtdW5yb2xsX2V4dHJhMjsgaiA8IG4tMTsg
aisrKSB7Ci0gICAgICAgICAgICBVSW50VHlwZSB5ID0gKHhbal0gJiB1cHBlcl9tYXNrKSB8ICh4
W2orMV0gJiBsb3dlcl9tYXNrKTsKLSAgICAgICAgICAgIHhbal0gPSB4W2otKG4tbSldIF4gKHkg
Pj4gMSkgXiAoKHhbaisxXSYxKSAqIGEpOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIGxhc3Qg
aXRlcmF0aW9uCi0gICAgVUludFR5cGUgeSA9ICh4W24tMV0gJiB1cHBlcl9tYXNrKSB8ICh4WzBd
ICYgbG93ZXJfbWFzayk7Ci0gICAgeFtuLTFdID0geFttLTFdIF4gKHkgPj4gMSkgXiAoKHhbMF0m
MSkgKiBhKTsKLSAgICBpID0gMDsKLX0KLS8vLyBcZW5kY29uZAotCi10ZW1wbGF0ZTxjbGFzcyBV
SW50VHlwZSwKLSAgICAgICAgIHN0ZDo6c2l6ZV90IHcsIHN0ZDo6c2l6ZV90IG4sIHN0ZDo6c2l6
ZV90IG0sIHN0ZDo6c2l6ZV90IHIsCi0gICAgICAgICBVSW50VHlwZSBhLCBzdGQ6OnNpemVfdCB1
LCBVSW50VHlwZSBkLCBzdGQ6OnNpemVfdCBzLAotICAgICAgICAgVUludFR5cGUgYiwgc3RkOjpz
aXplX3QgdCwKLSAgICAgICAgIFVJbnRUeXBlIGMsIHN0ZDo6c2l6ZV90IGwsIFVJbnRUeXBlIGY+
Ci1pbmxpbmUgdHlwZW5hbWUKLW1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPFVJbnRUeXBlLHcsbixt
LHIsYSx1LGQscyxiLHQsYyxsLGY+OjpyZXN1bHRfdHlwZQotbWVyc2VubmVfdHdpc3Rlcl9lbmdp
bmU8VUludFR5cGUsdyxuLG0scixhLHUsZCxzLGIsdCxjLGwsZj46Om9wZXJhdG9yKCkoKQotewot
ICAgIGlmKGkgPT0gbikKLSAgICAgICAgdHdpc3QoKTsKLSAgICAvLyBTdGVwIDQKLSAgICBVSW50
VHlwZSB6ID0geFtpXTsKLSAgICArK2k7Ci0gICAgeiBePSAoKHogPj4gdSkgJiBkKTsKLSAgICB6
IF49ICgoeiA8PCBzKSAmIGIpOwotICAgIHogXj0gKCh6IDw8IHQpICYgYyk7Ci0gICAgeiBePSAo
eiA+PiBsKTsKLSAgICByZXR1cm4gejsKLX0KLQotLyoqCi0gKiBUaGUgc3BlY2lhbGl6YXRpb25z
IFxtdDExMjEzYiBhbmQgXG10MTk5MzcgYXJlIGZyb20KLSAqCi0gKiAgQGJsb2NrcXVvdGUKLSAq
ICAiTWVyc2VubmUgVHdpc3RlcjogQSA2MjMtZGltZW5zaW9uYWxseSBlcXVpZGlzdHJpYnV0ZWQK
LSAqICB1bmlmb3JtIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciIsIE1ha290byBNYXRz
dW1vdG8KLSAqICBhbmQgVGFrdWppIE5pc2hpbXVyYSwgQUNNIFRyYW5zYWN0aW9ucyBvbiBNb2Rl
bGluZyBhbmQKLSAqICBDb21wdXRlciBTaW11bGF0aW9uOiBTcGVjaWFsIElzc3VlIG9uIFVuaWZv
cm0gUmFuZG9tIE51bWJlcgotICogIEdlbmVyYXRpb24sIFZvbC4gOCwgTm8uIDEsIEphbnVhcnkg
MTk5OCwgcHAuIDMtMzAuCi0gKiAgQGVuZGJsb2NrcXVvdGUKLSAqLwotdHlwZWRlZiBtZXJzZW5u
ZV90d2lzdGVyX2VuZ2luZTx1aW50MzJfdCwzMiwzNTEsMTc1LDE5LDB4Y2NhYjhlZTcsCi0gICAg
MTEsMHhmZmZmZmZmZiw3LDB4MzFiNmFiMDAsMTUsMHhmZmU1MDAwMCwxNywxODEyNDMzMjUzPiBt
dDExMjEzYjsKLQotLyoqCi0gKiBUaGUgc3BlY2lhbGl6YXRpb25zIFxtdDExMjEzYiBhbmQgXG10
MTk5MzcgYXJlIGZyb20KLSAqCi0gKiAgQGJsb2NrcXVvdGUKLSAqICAiTWVyc2VubmUgVHdpc3Rl
cjogQSA2MjMtZGltZW5zaW9uYWxseSBlcXVpZGlzdHJpYnV0ZWQKLSAqICB1bmlmb3JtIHBzZXVk
by1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciIsIE1ha290byBNYXRzdW1vdG8KLSAqICBhbmQgVGFr
dWppIE5pc2hpbXVyYSwgQUNNIFRyYW5zYWN0aW9ucyBvbiBNb2RlbGluZyBhbmQKLSAqICBDb21w
dXRlciBTaW11bGF0aW9uOiBTcGVjaWFsIElzc3VlIG9uIFVuaWZvcm0gUmFuZG9tIE51bWJlcgot
ICogIEdlbmVyYXRpb24sIFZvbC4gOCwgTm8uIDEsIEphbnVhcnkgMTk5OCwgcHAuIDMtMzAuCi0g
KiAgQGVuZGJsb2NrcXVvdGUKLSAqLwotdHlwZWRlZiBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZTx1
aW50MzJfdCwzMiw2MjQsMzk3LDMxLDB4OTkwOGIwZGYsCi0gICAgMTEsMHhmZmZmZmZmZiw3LDB4
OWQyYzU2ODAsMTUsMHhlZmM2MDAwMCwxOCwxODEyNDMzMjUzPiBtdDE5OTM3OwotCi0jaWYgIWRl
ZmluZWQoQk9PU1RfTk9fSU5UNjRfVCkgJiYgIWRlZmluZWQoQk9PU1RfTk9fSU5URUdSQUxfSU5U
NjRfVCkKLXR5cGVkZWYgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8dWludDY0X3QsNjQsMzEyLDE1
NiwzMSwKLSAgICBVSU5UNjRfQygweGI1MDI2ZjVhYTk2NjE5ZTkpLDI5LFVJTlQ2NF9DKDB4NTU1
NTU1NTU1NTU1NTU1NSksMTcsCi0gICAgVUlOVDY0X0MoMHg3MWQ2N2ZmZmVkYTYwMDAwKSwzNyxV
SU5UNjRfQygweGZmZjdlZWUwMDAwMDAwMDApLDQzLAotICAgIFVJTlQ2NF9DKDYzNjQxMzYyMjM4
NDY3OTMwMDUpPiBtdDE5OTM3XzY0OwotI2VuZGlmCi0KLS8vLyBcY29uZCBzaG93X2RlcHJlY2F0
ZWQKLQotdGVtcGxhdGU8Y2xhc3MgVUludFR5cGUsCi0gICAgICAgICBpbnQgdywgaW50IG4sIGlu
dCBtLCBpbnQgciwKLSAgICAgICAgIFVJbnRUeXBlIGEsIGludCB1LCBzdGQ6OnNpemVfdCBzLAot
ICAgICAgICAgVUludFR5cGUgYiwgaW50IHQsCi0gICAgICAgICBVSW50VHlwZSBjLCBpbnQgbCwg
VUludFR5cGUgdj4KLWNsYXNzIG1lcnNlbm5lX3R3aXN0ZXIgOgotICAgIHB1YmxpYyBtZXJzZW5u
ZV90d2lzdGVyX2VuZ2luZTxVSW50VHlwZSwKLSAgICAgICAgdywgbiwgbSwgciwgYSwgdSwgfihV
SW50VHlwZSkwLCBzLCBiLCB0LCBjLCBsLCAxODEyNDMzMjUzPgotewotICAgIHR5cGVkZWYgbWVy
c2VubmVfdHdpc3Rlcl9lbmdpbmU8VUludFR5cGUsCi0gICAgICAgIHcsIG4sIG0sIHIsIGEsIHUs
IH4oVUludFR5cGUpMCwgcywgYiwgdCwgYywgbCwgMTgxMjQzMzI1Mz4gYmFzZV90eXBlOwotcHVi
bGljOgotICAgIG1lcnNlbm5lX3R3aXN0ZXIoKSB7fQotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxf
R0VORVJBVE9SX0NPTlNUUlVDVE9SKG1lcnNlbm5lX3R3aXN0ZXIsIEdlbiwgZ2VuKQotICAgIHsg
c2VlZChnZW4pOyB9Ci0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9BUklUSE1FVElDX0NPTlNUUlVD
VE9SKG1lcnNlbm5lX3R3aXN0ZXIsIFVJbnRUeXBlLCB2YWwpCi0gICAgeyBzZWVkKHZhbCk7IH0K
LSAgICB0ZW1wbGF0ZTxjbGFzcyBJdD4KLSAgICBtZXJzZW5uZV90d2lzdGVyKEl0JiBmaXJzdCwg
SXQgbGFzdCkgOiBiYXNlX3R5cGUoZmlyc3QsIGxhc3QpIHt9Ci0gICAgdm9pZCBzZWVkKCkgeyBi
YXNlX3R5cGU6OnNlZWQoKTsgfQotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfR0VORVJBVE9SX1NF
RUQobWVyc2VubmVfdHdpc3RlciwgR2VuLCBnZW4pCi0gICAgewotICAgICAgICBkZXRhaWw6Omdl
bmVyYXRvcl9zZWVkX3NlcTxHZW4+IHNlcShnZW4pOwotICAgICAgICBiYXNlX3R5cGU6OnNlZWQo
c2VxKTsKLSAgICB9Ci0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9BUklUSE1FVElDX1NFRUQobWVy
c2VubmVfdHdpc3RlciwgVUludFR5cGUsIHZhbCkKLSAgICB7IGJhc2VfdHlwZTo6c2VlZCh2YWwp
OyB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+Ci0gICAgdm9pZCBzZWVkKEl0JiBmaXJzdCwgSXQg
bGFzdCkgeyBiYXNlX3R5cGU6OnNlZWQoZmlyc3QsIGxhc3QpOyB9Ci19OwotCi0vLy8gXGVuZGNv
bmQKLQotfSAvLyBuYW1lc3BhY2UgcmFuZG9tCi0KLXVzaW5nIHJhbmRvbTo6bXQxMTIxM2I7Ci11
c2luZyByYW5kb206Om10MTk5Mzc7Ci11c2luZyByYW5kb206Om10MTk5MzdfNjQ7Ci0KLX0gLy8g
bmFtZXNwYWNlIGJvb3N0Ci0KLUJPT1NUX1JBTkRPTV9QVFJfSEVMUEVSX1NQRUMoYm9vc3Q6Om10
MTEyMTNiKQotQk9PU1RfUkFORE9NX1BUUl9IRUxQRVJfU1BFQyhib29zdDo6bXQxOTkzNykKLUJP
T1NUX1JBTkRPTV9QVFJfSEVMUEVSX1NQRUMoYm9vc3Q6Om10MTk5MzdfNjQpCi0KLSNpbmNsdWRl
IDxib29zdC9yYW5kb20vZGV0YWlsL2VuYWJsZV93YXJuaW5ncy5ocHA+Ci0KLSNlbmRpZiAvLyBC
T09TVF9SQU5ET01fTUVSU0VOTkVfVFdJU1RFUl9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9uZWdhdGl2ZV9iaW5vbWlhbF9k
aXN0cmlidXRpb24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcmFuZG9tL25lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbi5ocHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNiZTI2ZmFkMjVjNjk1YTgyZDc4NTM2ODRjNDhlNTZmYjUyNTli
NWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL25lZ2F0aXZlX2Jpbm9t
aWFsX2Rpc3RyaWJ1dGlvbi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyog
Ym9vc3QgcmFuZG9tL25lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbi5ocHAgaGVhZGVyIGZp
bGUKLSAqCi0gKiBDb3B5cmlnaHQgU3RldmVuIFdhdGFuYWJlIDIwMTAKLSAqIERpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotICog
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAqIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqCi0gKiBTZWUgaHR0cDovL3d3dy5ib29z
dC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0g
KgotICogJElkJAotICovCi0KLSNpZm5kZWYgQk9PU1RfUkFORE9NX05FR0FUSVZFX0JJTk9NSUFM
X0RJU1RSSUJVVElPTl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfUkFORE9NX05FR0FUSVZF
X0JJTk9NSUFMX0RJU1RSSUJVVElPTl9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGlvc2Z3ZD4K
LQotI2luY2x1ZGUgPGJvb3N0L2xpbWl0cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2Rl
dGFpbC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9nYW1tYV9kaXN0cmlidXRp
b24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9wb2lzc29uX2Rpc3RyaWJ1dGlvbi5ocHA+
Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgcmFuZG9tIHsKLQotLyoqCi0gKiBUaGUg
bmVnYXRpdmUgYmlub21pYWwgZGlzdHJpYnV0aW9uIGlzIGFuIGludGVnZXIgdmFsdWVkCi0gKiBk
aXN0cmlidXRpb24gd2l0aCB0d28gcGFyYW1ldGVycywgQGMgayBhbmQgQGMgcC4gIFRoZQotICog
ZGlzdHJpYnV0aW9uIHByb2R1Y2VzIG5vbi1uZWdhdGl2ZSB2YWx1ZXMuCi0gKgotICogVGhlIGRp
c3RyaWJ1dGlvbiBmdW5jdGlvbiBpcwotICogXGYkXGRpc3BsYXlzdHlsZSBQKGkpID0ge2sraS0x
XGNob29zZSBpfXBeaygxLXApXmlcZiQuCi0gKgotICogVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2Vz
IGEgZ2FtbWEtcG9pc3NvbiBtaXh0dXJlLgotICovCi10ZW1wbGF0ZTxjbGFzcyBJbnRUeXBlID0g
aW50LCBjbGFzcyBSZWFsVHlwZSA9IGRvdWJsZT4KLWNsYXNzIG5lZ2F0aXZlX2Jpbm9taWFsX2Rp
c3RyaWJ1dGlvbiB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBJbnRUeXBlIHJlc3VsdF90eXBlOwot
ICAgIHR5cGVkZWYgUmVhbFR5cGUgaW5wdXRfdHlwZTsKLQotICAgIGNsYXNzIHBhcmFtX3R5cGUg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmli
dXRpb24gZGlzdHJpYnV0aW9uX3R5cGU7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBDb25zdHJ1
Y3QgYSBwYXJhbV90eXBlIG9iamVjdC4gIEBjIGsgYW5kIEBjIHAKLSAgICAgICAgICogYXJlIHRo
ZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uCi0gICAgICAgICAqCi0gICAgICAgICAq
IFJlcXVpcmVzOiBrID49MCAmJiAwIDw9IHAgPD0gMQotICAgICAgICAgKi8KLSAgICAgICAgZXhw
bGljaXQgcGFyYW1fdHlwZShJbnRUeXBlIGtfYXJnID0gMSwgUmVhbFR5cGUgcF9hcmcgPSBSZWFs
VHlwZSAoMC41KSkKLSAgICAgICAgICA6IF9rKGtfYXJnKSwgX3AocF9hcmcpCi0gICAgICAgIHt9
Ci0gICAgICAgIC8qKiBSZXR1cm5zIHRoZSBAYyBrIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0
aW9uLiAqLwotICAgICAgICBJbnRUeXBlIGsoKSBjb25zdCB7IHJldHVybiBfazsgfQotICAgICAg
ICAvKiogUmV0dXJucyB0aGUgQGMgcCBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8K
LSAgICAgICAgUmVhbFR5cGUgcCgpIGNvbnN0IHsgcmV0dXJuIF9wOyB9Ci0jaWZuZGVmIEJPT1NU
X1JBTkRPTV9OT19TVFJFQU1fT1BFUkFUT1JTCi0gICAgICAgIC8qKiBXcml0ZXMgdGhlIHBhcmFt
ZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbiB0byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICAg
ICAgdGVtcGxhdGU8Y2xhc3MgQ2hhclQsIGNsYXNzIFRyYWl0cz4KLSAgICAgICAgZnJpZW5kIHN0
ZDo6YmFzaWNfb3N0cmVhbTxDaGFyVCxUcmFpdHM+JgotICAgICAgICBvcGVyYXRvcjw8KHN0ZDo6
YmFzaWNfb3N0cmVhbTxDaGFyVCxUcmFpdHM+JiBvcywKLSAgICAgICAgICAgICAgICAgICBjb25z
dCBwYXJhbV90eXBlJiBwYXJtKQotICAgICAgICB7Ci0gICAgICAgICAgICBvcyA8PCBwYXJtLl9w
IDw8ICIgIiA8PCBwYXJtLl9rOwotICAgICAgICAgICAgcmV0dXJuIG9zOwotICAgICAgICB9Ci0g
ICAgCi0gICAgICAgIC8qKiBSZWFkcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9u
IGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uICovCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIENoYXJU
LCBjbGFzcyBUcmFpdHM+Ci0gICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhclQs
VHJhaXRzPiYKLSAgICAgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhclQsVHJh
aXRzPiYgaXMsIHBhcmFtX3R5cGUmIHBhcm0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlzID4+
IHBhcm0uX3AgPj4gc3RkOjp3cyA+PiBwYXJtLl9rOwotICAgICAgICAgICAgcmV0dXJuIGlzOwot
ICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyYW1l
dGVycyBoYXZlIHRoZSBzYW1lIHZhbHVlcy4gKi8KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBwYXJhbV90eXBlJiBsaHMsIGNvbnN0IHBhcmFtX3R5cGUmIHJocykKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGxocy5fayA9PSByaHMuX2sgJiYgbGhzLl9wID09IHJo
cy5fcDsKLSAgICAgICAgfQotICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJhbWV0
ZXJzIGhhdmUgZGlmZmVyZW50IHZhbHVlcy4gKi8KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBwYXJhbV90eXBlJiBsaHMsIGNvbnN0IHBhcmFtX3R5cGUmIHJocykKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuICEobGhzID09IHJocyk7Ci0gICAgICAgIH0KLSAgICBw
cml2YXRlOgotICAgICAgICBJbnRUeXBlIF9rOwotICAgICAgICBSZWFsVHlwZSBfcDsKLSAgICB9
OwotICAgIAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIEBjIG5lZ2F0aXZlX2Jpbm9taWFs
X2Rpc3RyaWJ1dGlvbiBvYmplY3QuIEBjIGsgYW5kIEBjIHAKLSAgICAgKiBhcmUgdGhlIHBhcmFt
ZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KLSAgICAgKgotICAgICAqIFJlcXVpcmVzOiBrID49
MCAmJiAwIDw9IHAgPD0gMQotICAgICAqLwotICAgIGV4cGxpY2l0IG5lZ2F0aXZlX2Jpbm9taWFs
X2Rpc3RyaWJ1dGlvbihJbnRUeXBlIGtfYXJnID0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUmVhbFR5cGUgcF9hcmcgPSBSZWFsVHlwZSgwLjUpKQotICAg
ICAgOiBfayhrX2FyZyksIF9wKHBfYXJnKQotICAgIHt9Ci0gICAgCi0gICAgLyoqCi0gICAgICog
Q29uc3RydWN0IGFuIEBjIG5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbiBvYmplY3QgZnJv
bSB0aGUKLSAgICAgKiBwYXJhbWV0ZXJzLgotICAgICAqLwotICAgIGV4cGxpY2l0IG5lZ2F0aXZl
X2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgICAgOiBf
ayhwYXJtLmsoKSksIF9wKHBhcm0ucCgpKQotICAgIHt9Ci0gICAgCi0gICAgLyoqCi0gICAgICog
UmV0dXJucyBhIHJhbmRvbSB2YXJpYXRlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUKLSAg
ICAgKiBuZWdhdGl2ZSBiaW5vbWlhbCBkaXN0cmlidXRpb24uCi0gICAgICovCi0gICAgdGVtcGxh
dGU8Y2xhc3MgVVJORz4KLSAgICBJbnRUeXBlIG9wZXJhdG9yKCkoVVJORyYgdXJuZykgY29uc3QK
LSAgICB7Ci0gICAgICAgIGdhbW1hX2Rpc3RyaWJ1dGlvbjxSZWFsVHlwZT4gZ2FtbWEoX2ssICgx
LV9wKS9fcCk7Ci0gICAgICAgIHBvaXNzb25fZGlzdHJpYnV0aW9uPEludFR5cGUsIFJlYWxUeXBl
PiBwb2lzc29uKGdhbW1hKHVybmcpKTsKLSAgICAgICAgcmV0dXJuIHBvaXNzb24odXJuZyk7Ci0g
ICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgYSByYW5kb20gdmFyaWF0ZSBkaXN0
cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIG5lZ2F0aXZlCi0gICAgICogYmlub21pYWwgZGlzdHJp
YnV0aW9uIHdpdGggcGFyYW1ldGVycyBzcGVjaWZpZWQgYnkgQGMgcGFyYW0uCi0gICAgICovCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgVVJORz4KLSAgICBJbnRUeXBlIG9wZXJhdG9yKCkoVVJORyYgdXJu
ZywgY29uc3QgcGFyYW1fdHlwZSYgcGFybSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBu
ZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb24ocGFybSkodXJuZyk7Ci0gICAgfQotCi0gICAg
LyoqIFJldHVybnMgdGhlIEBjIGsgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0g
ICAgSW50VHlwZSBrKCkgY29uc3QgeyByZXR1cm4gX2s7IH0KLSAgICAvKiogUmV0dXJucyB0aGUg
QGMgcCBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICBSZWFsVHlwZSBwKCkg
Y29uc3QgeyByZXR1cm4gX3A7IH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCB2YWx1
ZSB0aGF0IHRoZSBkaXN0cmlidXRpb24gY2FuIHByb2R1Y2UuICovCi0gICAgSW50VHlwZSBtaW4g
Qk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04oKSBjb25zdCB7IHJldHVybiAwOyB9Ci0g
ICAgLyoqIFJldHVybnMgdGhlIGxhcmdlc3QgdmFsdWUgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGNh
biBwcm9kdWNlLiAqLwotICAgIEludFR5cGUgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJ
VFVUSU9OKCkgY29uc3QKLSAgICB7IHJldHVybiAoc3RkOjpudW1lcmljX2xpbWl0czxJbnRUeXBl
Pjo6bWF4KSgpOyB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlz
dHJpYnV0aW9uLiAqLwotICAgIHBhcmFtX3R5cGUgcGFyYW0oKSBjb25zdCB7IHJldHVybiBwYXJh
bV90eXBlKF9rLCBfcCk7IH0KLSAgICAvKiogU2V0cyBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmli
dXRpb24uICovCi0gICAgdm9pZCBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgIHsK
LSAgICAgICAgX2sgPSBwYXJtLmsoKTsKLSAgICAgICAgX3AgPSBwYXJtLnAoKTsKLSAgICB9Ci0K
LSAgICAvKioKLSAgICAgKiBFZmZlY3RzOiBTdWJzZXF1ZW50IHVzZXMgb2YgdGhlIGRpc3RyaWJ1
dGlvbiBkbyBub3QgZGVwZW5kCi0gICAgICogb24gdmFsdWVzIHByb2R1Y2VkIGJ5IGFueSBlbmdp
bmUgcHJpb3IgdG8gaW52b2tpbmcgcmVzZXQuCi0gICAgICovCi0gICAgdm9pZCByZXNldCgpIHsg
fQotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9OT19TVFJFQU1fT1BFUkFUT1JTCi0gICAgLyoqIFdy
aXRlcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uIHRvIGEgQGMgc3RkOjpvc3Ry
ZWFtLiAqLwotICAgIHRlbXBsYXRlPGNsYXNzIENoYXJULCBjbGFzcyBUcmFpdHM+Ci0gICAgZnJp
ZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyVCxUcmFpdHM+JgotICAgIG9wZXJhdG9yPDwoc3Rk
OjpiYXNpY19vc3RyZWFtPENoYXJULFRyYWl0cz4mIG9zLAotICAgICAgICAgICAgICAgY29uc3Qg
bmVnYXRpdmVfYmlub21pYWxfZGlzdHJpYnV0aW9uJiBiZCkKLSAgICB7Ci0gICAgICAgIG9zIDw8
IGJkLnBhcmFtKCk7Ci0gICAgICAgIHJldHVybiBvczsKLSAgICB9Ci0gICAgCi0gICAgLyoqIFJl
YWRzIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24gZnJvbSBhIEBjIHN0ZDo6aXN0
cmVhbS4gKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBDaGFyVCwgY2xhc3MgVHJhaXRzPgotICAgIGZy
aWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhclQsVHJhaXRzPiYKLSAgICBvcGVyYXRvcj4+KHN0
ZDo6YmFzaWNfaXN0cmVhbTxDaGFyVCxUcmFpdHM+JiBpcywKLSAgICAgICAgICAgICAgIG5lZ2F0
aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbiYgYmQpCi0gICAgewotICAgICAgICBiZC5yZWFkKGlz
KTsKLSAgICAgICAgcmV0dXJuIGlzOwotICAgIH0KLSNlbmRpZgotCi0gICAgLyoqIFJldHVybnMg
dHJ1ZSBpZiB0aGUgdHdvIGRpc3RyaWJ1dGlvbnMgd2lsbCBwcm9kdWNlIHRoZSBzYW1lCi0gICAg
ICAgIHNlcXVlbmNlIG9mIHZhbHVlcywgZ2l2ZW4gZXF1YWwgZ2VuZXJhdG9ycy4gKi8KLSAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlv
biYgbGhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVnYXRpdmVfYmlub21p
YWxfZGlzdHJpYnV0aW9uJiByaHMpCi0gICAgewotICAgICAgICByZXR1cm4gbGhzLl9rID09IHJo
cy5fayAmJiBsaHMuX3AgPT0gcmhzLl9wOwotICAgIH0KLSAgICAvKiogUmV0dXJucyB0cnVlIGlm
IHRoZSB0d28gZGlzdHJpYnV0aW9ucyBjb3VsZCBwcm9kdWNlIGRpZmZlcmVudAotICAgICAgICBz
ZXF1ZW5jZXMgb2YgdmFsdWVzLCBnaXZlbiBlcXVhbCBnZW5lcmF0b3JzLiAqLwotICAgIGZyaWVu
ZCBib29sIG9wZXJhdG9yIT0oY29uc3QgbmVnYXRpdmVfYmlub21pYWxfZGlzdHJpYnV0aW9uJiBs
aHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZWdhdGl2ZV9iaW5vbWlhbF9k
aXN0cmlidXRpb24mIHJocykKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKGxocyA9PSByaHMpOwot
ICAgIH0KLQotcHJpdmF0ZToKLQotICAgIC8vLyBAY29uZCBcc2hvd19wcml2YXRlCi0KLSAgICB0
ZW1wbGF0ZTxjbGFzcyBDaGFyVCwgY2xhc3MgVHJhaXRzPgotICAgIHZvaWQgcmVhZChzdGQ6OmJh
c2ljX2lzdHJlYW08Q2hhclQsIFRyYWl0cz4mIGlzKSB7Ci0gICAgICAgIHBhcmFtX3R5cGUgcGFy
bTsKLSAgICAgICAgaWYoaXMgPj4gcGFybSkgewotICAgICAgICAgICAgcGFyYW0ocGFybSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBwYXJhbWV0ZXJzCi0gICAgSW50VHlwZSBfazsKLSAg
ICBSZWFsVHlwZSBfcDsKLQotICAgIC8vLyBAZW5kY29uZAotfTsKLQotfQotCi19Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
cmFuZG9tL25vbl9jZW50cmFsX2NoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbi5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vbm9uX2NlbnRyYWxfY2hp
X3NxdWFyZWRfZGlzdHJpYnV0aW9uLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MjhjOWZmNmQ5YTRlYTFiYjQwOTNhZWE1ZTQ0MDVlYWExYjNiZjhiOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9yYW5kb20vbm9uX2NlbnRyYWxfY2hpX3NxdWFyZWRfZGlzdHJpYnV0
aW9uLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi0vKiBib29zdCByYW5kb20v
bm9uX2NlbnRyYWxfY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uLmhwcCBoZWFkZXIgZmlsZQotICoK
LSAqIENvcHlyaWdodCBUaGlqcyB2YW4gZGVuIEJlcmcgMjAxNAotICogCi0gKiBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAq
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgot
ICoKLSAqICRJZCQKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9OT05fQ0VOVFJBTF9DSElf
U1FVQVJFRF9ESVNUUklCVVRJT05fSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9OT05fQ0VOVFJB
TF9DSElfU1FVQVJFRF9ESVNUUklCVVRJT05fSFBQCi0KLSNpbmNsdWRlIDxib29zdC9jb25maWcv
bm9fdHIxL2NtYXRoLmhwcD4KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8aXN0cmVhbT4K
LSNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRh
aWwvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL29wZXJhdG9ycy5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL3VuaWZvcm1fcmVhbF9kaXN0cmlidXRpb24uaHBw
PgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9ub3JtYWxfZGlzdHJpYnV0aW9uLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9yYW5kb20vY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9yYW5kb20vcG9pc3Nvbl9kaXN0cmlidXRpb24uaHBwPgotCi1uYW1lc3BhY2UgYm9v
c3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci0KLS8qKgotICogVGhlIG5vbmNlbnRyYWwgY2hpLXNx
dWFyZWQgZGlzdHJpYnV0aW9uIGlzIGEgcmVhbCB2YWx1ZWQgZGlzdHJpYnV0aW9uIHdpdGgKLSAq
IHR3byBwYXJhbWV0ZXIsIEBjIGsgYW5kIEBjIGxhbWJkYS4gIFRoZSBkaXN0cmlidXRpb24gcHJv
ZHVjZXMgdmFsdWVzID4gMC4KLSAqCi0gKiBUaGlzIGlzIHRoZSBkaXN0cmlidXRpb24gb2YgdGhl
IHN1bSBvZiBzcXVhcmVzIG9mIGsgTm9ybWFsIGRpc3RyaWJ1dGVkCi0gKiB2YXJpYXRlcyBlYWNo
IHdpdGggdmFyaWFuY2Ugb25lIGFuZCBcZiRcbGFtYmRhXGYkIHRoZSBzdW0gb2Ygc3F1YXJlcyBv
ZiB0aGUKLSAqIG5vcm1hbCBtZWFucy4KLSAqCi0gKiBUaGUgZGlzdHJpYnV0aW9uIGZ1bmN0aW9u
IGlzCi0gKiBcZiRcZGlzcGxheXN0eWxlIFAoeCkgPSBcZnJhY3sxfXsyfSBlXnstKHgrXGxhbWJk
YSkvMn0gXGxlZnQoIFxmcmFje3h9e1xsYW1iZGF9IFxyaWdodClee2svNC0xLzJ9IElfe2svMi0x
fSggXHNxcnR7XGxhbWJkYSB4fSApXGYkLgotICogIHdoZXJlICBcZiRcZGlzcGxheXN0eWxlIElf
XG51KHopXGYkIGlzIGEgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZQotICogZmlyc3Qg
a2luZC4KLSAqCi0gKiBUaGUgYWxnb3JpdGhtIGlzIHRha2VuIGZyb20KLSAqCi0gKiAgQGJsb2Nr
cXVvdGUKLSAqICAiTW9udGUgQ2FybG8gTWV0aG9kcyBpbiBGaW5hbmNpYWwgRW5naW5lZXJpbmci
LCBQYXVsIEdsYXNzZXJtYW4sCi0gKiAgMjAwMywgWElJSSwgNTk2IHAsIFN0b2NoYXN0aWMgTW9k
ZWxsaW5nIGFuZCBBcHBsaWVkIFByb2JhYmlsaXR5LCBWb2wuIDUzLAotICogIElTQk4gOTc4LTAt
Mzg3LTIxNjE3LTEsIHAgMTI0LCBGaWcuIDMuNS4KLSAqICBAZW5kYmxvY2txdW90ZQotICovCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgUmVhbFR5cGUgPSBkb3VibGU+Ci1jbGFzcyBub25fY2VudHJhbF9j
aGlfc3F1YXJlZF9kaXN0cmlidXRpb24gewotcHVibGljOgotICAgIHR5cGVkZWYgUmVhbFR5cGUg
cmVzdWx0X3R5cGU7Ci0gICAgdHlwZWRlZiBSZWFsVHlwZSBpbnB1dF90eXBlOwotICAgIAotICAg
IGNsYXNzIHBhcmFtX3R5cGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBub25fY2Vu
dHJhbF9jaGlfc3F1YXJlZF9kaXN0cmlidXRpb24gZGlzdHJpYnV0aW9uX3R5cGU7Ci0gICAgICAg
IAotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc3RydWN0cyB0aGUgcGFyYW1ldGVycyBvZiBh
IG5vbl9jZW50cmFsX2NoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbi4KLSAgICAgICAgICogQGMgayBh
bmQgQGMgbGFtYmRhIGFyZSB0aGUgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uCi0gICAg
ICAgICAqCi0gICAgICAgICAqIFJlcXVpcmVzOiBrID4gMCAmJiBsYW1iZGEgPiAwCi0gICAgICAg
ICAqLwotICAgICAgICBleHBsaWNpdAotICAgICAgICBwYXJhbV90eXBlKFJlYWxUeXBlIGtfYXJn
ID0gUmVhbFR5cGUoMSksIFJlYWxUeXBlIGxhbWJkYV9hcmcgPSBSZWFsVHlwZSgxKSkKLSAgICAg
ICAgOiBfayhrX2FyZyksIF9sYW1iZGEobGFtYmRhX2FyZykKLSAgICAgICAgewotICAgICAgICAg
ICAgQk9PU1RfQVNTRVJUKGtfYXJnID4gUmVhbFR5cGUoMCkpOwotICAgICAgICAgICAgQk9PU1Rf
QVNTRVJUKGxhbWJkYV9hcmcgPiBSZWFsVHlwZSgwKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIC8qKiBSZXR1cm5zIHRoZSBAYyBrIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9u
ICovCi0gICAgICAgIFJlYWxUeXBlIGsoKSBjb25zdCB7IHJldHVybiBfazsgfQotICAgICAgICAK
LSAgICAgICAgLyoqIFJldHVybnMgdGhlIEBjIGxhbWJkYSBwYXJhbWV0ZXIgb2YgdGhlIGRpc3Ry
aWJ1dGlvbiAqLwotICAgICAgICBSZWFsVHlwZSBsYW1iZGEoKSBjb25zdCB7IHJldHVybiBfbGFt
YmRhOyB9Ci0KLSAgICAgICAgLyoqIFdyaXRlcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJp
YnV0aW9uIHRvIGEgQGMgc3RkOjpvc3RyZWFtLiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVU
QUlMX09TVFJFQU1fT1BFUkFUT1Iob3MsIHBhcmFtX3R5cGUsIHBhcm0pCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG9zIDw8IHBhcm0uX2sgPDwgJyAnIDw8IHBhcm0uX2xhbWJkYTsKLSAgICAgICAg
ICAgIHJldHVybiBvczsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJlYWRzIHRo
ZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24gZnJvbSBhIEBjIHN0ZDo6aXN0cmVhbS4g
Ki8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlzLCBwYXJh
bV90eXBlLCBwYXJtKQotICAgICAgICB7Ci0gICAgICAgICAgICBpcyA+PiBwYXJtLl9rID4+IHN0
ZDo6d3MgPj4gcGFybS5fbGFtYmRhOwotICAgICAgICAgICAgcmV0dXJuIGlzOwotICAgICAgICB9
Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyYW1ldGVycyBoYXZlIHRoZSBz
YW1lIHZhbHVlcy4gKi8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElUWV9PUEVS
QVRPUihwYXJhbV90eXBlLCBsaHMsIHJocykKLSAgICAgICAgeyByZXR1cm4gbGhzLl9rID09IHJo
cy5fayAmJiBsaHMuX2xhbWJkYSA9PSByaHMuX2xhbWJkYTsgfQotICAgICAgICAKLSAgICAgICAg
LyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyYW1ldGVycyBoYXZlIGRpZmZlcmVudCB2YWx1ZXMu
ICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5FUVVBTElUWV9PUEVSQVRPUihwYXJh
bV90eXBlKQotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBSZWFsVHlwZSBfazsKLSAg
ICAgICAgUmVhbFR5cGUgX2xhbWJkYTsKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogQ29uc3Ry
dWN0IGEgQGMgbm9uX2NlbnRyYWxfY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uIG9iamVjdC4gQGMg
ayBhbmQKLSAgICAgKiBAYyBsYW1iZGEgYXJlIHRoZSBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1
dGlvbi4KLSAgICAgKgotICAgICAqIFJlcXVpcmVzOiBrID4gMCAmJiBsYW1iZGEgPiAwCi0gICAg
ICovCi0gICAgZXhwbGljaXQKLSAgICBub25fY2VudHJhbF9jaGlfc3F1YXJlZF9kaXN0cmlidXRp
b24oUmVhbFR5cGUga19hcmcgPSBSZWFsVHlwZSgxKSwgUmVhbFR5cGUgbGFtYmRhX2FyZyA9IFJl
YWxUeXBlKDEpKQotICAgICAgOiBfcGFyYW0oa19hcmcsIGxhbWJkYV9hcmcpCi0gICAgewotICAg
ICAgICBCT09TVF9BU1NFUlQoa19hcmcgPiBSZWFsVHlwZSgwKSk7Ci0gICAgICAgIEJPT1NUX0FT
U0VSVChsYW1iZGFfYXJnID4gUmVhbFR5cGUoMCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAq
IENvbnN0cnVjdCBhIEBjIG5vbl9jZW50cmFsX2NoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbiBvYmpl
Y3QgZnJvbSB0aGUgcGFyYW1ldGVyLgotICAgICAqLwotICAgIGV4cGxpY2l0Ci0gICAgbm9uX2Nl
bnRyYWxfY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0pCi0g
ICAgICA6IF9wYXJhbSggcGFybSApCi0gICAgeyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0
dXJucyBhIHJhbmRvbSB2YXJpYXRlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUKLSAgICAg
KiBub24gY2VudHJhbCBjaGkgc3F1YXJlZCBkaXN0cmlidXRpb24gc3BlY2lmaWVkIGJ5IEBjIHBh
cmFtLgotICAgICAqLwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVSTkc+Ci0gICAgUmVhbFR5cGUg
b3BlcmF0b3IoKShVUk5HJiBlbmcsIGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0pIGNvbnN0Ci0gICAg
eyByZXR1cm4gbm9uX2NlbnRyYWxfY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uKHBhcm0pKGVuZyk7
IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIHZhcmlhdGUgZGlzdHJp
YnV0ZWQgYWNjb3JkaW5nIHRvIHRoZQotICAgICAqIG5vbiBjZW50cmFsIGNoaSBzcXVhcmVkIGRp
c3RyaWJ1dGlvbi4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVUk5HPiAKLSAgICBS
ZWFsVHlwZSBvcGVyYXRvcigpKFVSTkcmIGVuZykgCi0gICAgewotICAgICAgICB1c2luZyBzdGQ6
OnNxcnQ7Ci0gICAgICAgIGlmIChfcGFyYW0uaygpID4gMSkgewotICAgICAgICAgICAgYm9vc3Q6
OnJhbmRvbTo6bm9ybWFsX2Rpc3RyaWJ1dGlvbjxSZWFsVHlwZT4gbl9kaXN0OwotICAgICAgICAg
ICAgYm9vc3Q6OnJhbmRvbTo6Y2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uPFJlYWxUeXBlPiBjX2Rp
c3QoX3BhcmFtLmsoKSAtIFJlYWxUeXBlKDEpKTsKLSAgICAgICAgICAgIFJlYWxUeXBlIF96ID0g
bl9kaXN0KGVuZyk7Ci0gICAgICAgICAgICBSZWFsVHlwZSBfeCA9IGNfZGlzdChlbmcpOwotICAg
ICAgICAgICAgUmVhbFR5cGUgdGVybTEgPSBfeiArIHNxcnQoX3BhcmFtLmxhbWJkYSgpKTsKLSAg
ICAgICAgICAgIHJldHVybiB0ZXJtMSp0ZXJtMSArIF94OwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgYm9vc3Q6OnJhbmRvbTo6cG9pc3Nvbl9kaXN0cmlidXRpb248PiBw
X2Rpc3QoX3BhcmFtLmxhbWJkYSgpL1JlYWxUeXBlKDIpKTsKLSAgICAgICAgICAgIGJvb3N0Ojpy
YW5kb206OnBvaXNzb25fZGlzdHJpYnV0aW9uPD46OnJlc3VsdF90eXBlIF9wID0gcF9kaXN0KGVu
Zyk7Ci0gICAgICAgICAgICBib29zdDo6cmFuZG9tOjpjaGlfc3F1YXJlZF9kaXN0cmlidXRpb248
UmVhbFR5cGU+IGNfZGlzdChfcGFyYW0uaygpICsgUmVhbFR5cGUoMikqX3ApOwotICAgICAgICAg
ICAgcmV0dXJuIGNfZGlzdChlbmcpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIFJldHVy
bnMgdGhlIEBjIGsgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgUmVhbFR5
cGUgaygpIGNvbnN0IHsgcmV0dXJuIF9wYXJhbS5rKCk7IH0KLSAgICAKLSAgICAvKiogUmV0dXJu
cyB0aGUgQGMgbGFtYmRhIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIFJl
YWxUeXBlIGxhbWJkYSgpIGNvbnN0IHsgcmV0dXJuIF9wYXJhbS5sYW1iZGEoKTsgfQotICAgIAot
ICAgIC8qKiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0g
ICAgcGFyYW1fdHlwZSBwYXJhbSgpIGNvbnN0IHsgcmV0dXJuIF9wYXJhbTsgfQotICAgIAotICAg
IC8qKiBTZXRzIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICB2b2lkIHBh
cmFtKGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0pIHsgX3BhcmFtID0gcGFybTsgfQotICAgIAotICAg
IC8qKiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiwgc28gdGhhdCBzdWJzZXF1ZW50IHVzZXMgZG9l
cyBub3QgZGVwZW5kIG9uIHZhbHVlcyBhbHJlYWR5IHByb2R1Y2VkIGJ5IGl0LiovCi0gICAgdm9p
ZCByZXNldCgpIHt9Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhlIHNtYWxsZXN0IHZhbHVlIHRo
YXQgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4gKi8KLSAgICBSZWFsVHlwZSBtaW4gQk9P
U1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04oKSBjb25zdAotICAgIHsgcmV0dXJuIFJlYWxU
eXBlKDApOyB9Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhlIGxhcmdlc3QgdmFsdWUgdGhhdCB0
aGUgZGlzdHJpYnV0aW9uIGNhbiBwcm9kdWNlLiAqLwotICAgIFJlYWxUeXBlIG1heCBCT09TVF9Q
UkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTigpIGNvbnN0Ci0gICAgeyByZXR1cm4gKHN0ZDo6bnVt
ZXJpY19saW1pdHM8UmVhbFR5cGU+OjppbmZpbml0eSkoKTsgfQotCi0gICAgLyoqIFdyaXRlcyB0
aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uIHRvIGEgQGMgc3RkOjpvc3RyZWFtLiAq
LwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihvcywgbm9uX2NlbnRy
YWxfY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uLCBkaXN0KQotICAgIHsKLSAgICAgICAgb3MgPDwg
ZGlzdC5wYXJhbSgpOwotICAgICAgICByZXR1cm4gb3M7Ci0gICAgfQotICAgIAotICAgIC8qKiBy
ZWFkcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uIGZyb20gYSBAYyBzdGQ6Omlz
dHJlYW0uICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlzLCBu
b25fY2VudHJhbF9jaGlfc3F1YXJlZF9kaXN0cmlidXRpb24sIGRpc3QpCi0gICAgewotICAgICAg
ICBwYXJhbV90eXBlIHBhcm07Ci0gICAgICAgIGlmKGlzID4+IHBhcm0pIHsKLSAgICAgICAgICAg
IGRpc3QucGFyYW0ocGFybSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlzOwotICAgIH0K
LQotICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdHdvIGRpc3RyaWJ1dGlvbnMgaGF2ZSB0aGUgc2Ft
ZSBwYXJhbWV0ZXJzIGFuZCBwcm9kdWNlIAotICAgICAgICB0aGUgc2FtZSBzZXF1ZW5jZSBvZiBy
YW5kb20gbnVtYmVycyBnaXZlbiBlcXVhbCBnZW5lcmF0b3JzLiovCi0gICAgQk9PU1RfUkFORE9N
X0RFVEFJTF9FUVVBTElUWV9PUEVSQVRPUihub25fY2VudHJhbF9jaGlfc3F1YXJlZF9kaXN0cmli
dXRpb24sIGxocywgcmhzKQotICAgIHsgcmV0dXJuIGxocy5wYXJhbSgpID09IHJocy5wYXJhbSgp
OyB9Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0d28gZGlzdHJpYnV0aW9ucyBoYXZl
IGRpZmZlcmVudCBwYXJhbWV0ZXJzIGFuZC9vciBjYW4gcHJvZHVjZSAKLSAgICAgICBkaWZmZXJl
bnQgc2VxdWVuY2VzIG9mIHJhbmRvbSBudW1iZXJzIGdpdmVuIGVxdWFsIGdlbmVyYXRvcnMuKi8K
LSAgICBCT09TVF9SQU5ET01fREVUQUlMX0lORVFVQUxJVFlfT1BFUkFUT1Iobm9uX2NlbnRyYWxf
Y2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uKQotICAgIAotcHJpdmF0ZToKLQotICAgIC8vLyBAY29u
ZCBzaG93X3ByaXZhdGUKLSAgICBwYXJhbV90eXBlICBfcGFyYW07Ci0gICAgLy8vIEBlbmRjb25k
Ci19OwotCi19IC8vIG5hbWVzcGFjZSByYW5kb20KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcmFuZG9tL25vcm1hbF9kaXN0cmlidXRpb24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL25vcm1hbF9kaXN0cmlidXRpb24uaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2ZmM2ViYTliNjY2NDg1MGY0YTc1NTdjNzMyNWUy
NmE4MDE4NjAxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9ub3JtYWxf
ZGlzdHJpYnV0aW9uLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM3NCArMCwwIEBACi0vKiBib29z
dCByYW5kb20vbm9ybWFsX2Rpc3RyaWJ1dGlvbi5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5
cmlnaHQgSmVucyBNYXVyZXIgMjAwMC0yMDAxCi0gKiBDb3B5cmlnaHQgU3RldmVuIFdhdGFuYWJl
IDIwMTAtMjAxMQotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50
eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQot
ICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBp
bmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgotICogUmV2aXNpb24gaGlz
dG9yeQotICogIDIwMDEtMDItMTggIG1vdmVkIHRvIGluZGl2aWR1YWwgaGVhZGVyIGZpbGVzCi0g
Ki8KLQotI2lmbmRlZiBCT09TVF9SQU5ET01fTk9STUFMX0RJU1RSSUJVVElPTl9IUFAKLSNkZWZp
bmUgQk9PU1RfUkFORE9NX05PUk1BTF9ESVNUUklCVVRJT05fSFBQCi0KLSNpbmNsdWRlIDxib29z
dC9jb25maWcvbm9fdHIxL2NtYXRoLmhwcD4KLSNpbmNsdWRlIDxpc3RyZWFtPgotI2luY2x1ZGUg
PGlvc2Z3ZD4KLSNpbmNsdWRlIDxib29zdC9hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2xp
bWl0cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qvc3RhdGljX2Fzc2VydC5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvcmFuZG9tL2RldGFpbC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9k
ZXRhaWwvb3BlcmF0b3JzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2ludF9m
bG9hdF9wYWlyLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vdW5pZm9ybV8wMS5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2V4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbi5ocHA+Ci0KLW5h
bWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgcmFuZG9tIHsKLQotbmFtZXNwYWNlIGRldGFpbCB7
Ci0KLS8vIHRhYmxlcyBmb3IgdGhlIHppZ2d1cmF0IGFsZ29yaXRobQotdGVtcGxhdGU8Y2xhc3Mg
UmVhbFR5cGU+Ci1zdHJ1Y3Qgbm9ybWFsX3RhYmxlIHsKLSAgICBzdGF0aWMgY29uc3QgUmVhbFR5
cGUgdGFibGVfeFsxMjldOwotICAgIHN0YXRpYyBjb25zdCBSZWFsVHlwZSB0YWJsZV95WzEyOV07
Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBSZWFsVHlwZT4KLWNvbnN0IFJlYWxUeXBlIG5vcm1hbF90
YWJsZTxSZWFsVHlwZT46OnRhYmxlX3hbMTI5XSA9IHsKLSAgICAzLjcxMzA4NjI0Njc0MDM2MzI2
MDksIDMuNDQyNjE5ODU1ODk2NjUyMTIxNCwgMy4yMjMwODQ5ODQ1Nzg2MTg1NDQ2LCAzLjA4MzIy
ODg1ODIxNDIxMzcwMDksCi0gICAgMi45Nzg2OTYyNTI2NDUwMTY5NjA2LCAyLjg5NDM0NDAwNzAx
ODY3MDYyMTAsIDIuODIzMTI1MzUwNTQ1OTY2NDM3OSwgMi43NjExNjkzNzIzODQxNTM4NTE0LAot
ICAgIDIuNzA2MTEzNTczMTE4NzIyMzM3MSwgMi42NTY0MDY0MTEyNTgxOTI0OTk5LCAyLjYxMDk3
MjI0ODQyODYxMzIwMzUsIDIuNTY5MDMzNjI1OTIxNjM5MTMyOCwKLSAgICAyLjUzMDAwOTY3MjM4
NTQ2NjYxNzAsIDIuNDkzNDU0NTIyMDkxOTUwNzYwOSwgMi40NTkwMTgxNzc0MDgzNTAwOTQzLCAy
LjQyNjQyMDY0NTUzMDIxMTU5MzAsCi0gICAgMi4zOTU0MzQyNzgwMDc0NjczNDI1LCAyLjM2NTg3
MTM3MDExMzk4NzU0MzUsIDIuMzM3NTc1MjQxMzM1NTMwNzM1NCwgMi4zMTA0MTM2ODM2OTUwMDIx
NTU4LAotICAgIDIuMjg0Mjc0MDU5NjczNjU2ODA1NiwgMi4yNTkwNTk1NzM4NjUzMjk1MjUxLCAy
LjIzNDY4NjM5NTU4NzA1Njk4MDMsIDIuMjExMDgxNDA4ODc0NzI3ODEwNiwKLSAgICAyLjE4ODE4
MDQzMjA3MjAyMDYwOTMsIDIuMTY1OTI2NzkzNzQ0ODQwNzM3NywgMi4xNDQyNzAxODIzNTYyNjEz
NTE4LCAyLjEyMzE2NTcwODY2OTc4OTk1OTUsCi0gICAgMi4xMDI1NzMxMzUxODQ5OTg4ODM4LCAy
LjA4MjQ1NjIzNzk4NzcyNDY0NDEsIDIuMDYyNzgyMjc0NTAzOTYzMzU3NSwgMi4wNDM1MjE1MzY2
NTA2Njk0OTc2LAotICAgIDIuMDI0NjQ2OTczMzcyOTMzODc4MiwgMi4wMDYxMzM4Njk5NTg5NjY4
NDAzLCAxLjk4Nzk1OTU3NDEyMzA2MDcyNDMsIDEuOTcwMTAzMjYwODQ5NzEzMjI0MiwKLSAgICAx
Ljk1MjU0NTcyOTU0ODg4ODkwNTgsIDEuOTM1MjY5MjI4MjkxOTAwMjAxMSwgMS45MTgyNTczMDA4
NTk3MzIwMzAzLCAxLjkwMTQ5NDY1MzEwMDMxNzYxNDAsCi0gICAgMS44ODQ5NjcwMzU3MDI4Njky
MzgwLCAxLjg2ODY2MTE0MDk4OTU0MjAwODUsIDEuODUyNTY0NTExNzIzMDg3MDYxNywgMS44MzY2
NjU0NjAyNTMzODQwNDQ3LAotICAgIDEuODIwOTUyOTk2NTkxMDA1MDc0MCwgMS44MDU0MTY3NjQy
MTQwNDg3NDIwLCAxLjc5MDA0Njk4MjU5NDYxODk4NjIsIDEuNzc0ODM0Mzk1NTgwNzY5MjQ1NywK
LSAgICAxLjc1OTc3MDIyNDg5NDIzMTg3NDksIDEuNzQ0ODQ2MTI4MTA4Mzc2NTA4NSwgMS43MzAw
NTQxNjA1NTgyNDM1MzUwLCAxLjcxNTM4Njc0MDcwODExNjU0ODIsCi0gICAgMS43MDA4MzY2MTg1
NjQzMDA5NDM3LCAxLjY4NjM5Njg0Njc3MzQ4NjMyNTgsIDEuNjcyMDYwNzU0MDkxODUyMjA3Miwg
MS42NTc4MjE5MjA5NDgyMDc1NDYyLAotICAgIDEuNjQzNjc0MTU2ODU2OTgyNjQ4OSwgMS42Mjk2
MTE0Nzk0NjQ2NzgzOTYyLCAxLjYxNTYyODA5NTAzNzEzMjk2NDQsIDEuNjAxNzE4MzgwMjE1Mjc3
MDU4NywKLSAgICAxLjU4Nzg3Njg2NDg4NDQwMDcwMTksIDEuNTc0MDk4MjE2MDE2NzQ5NzIxOSwg
MS41NjAzNzcyMjIzNTk4NDA2ODcwLCAxLjU0NjcwODc3OTg1MzUwMzQ2MDgsCi0gICAgMS41MzMw
ODc4Nzc2Njc1NTYwNzg3LCAxLjUxOTUwOTU4NDc1OTM3MDc4MDYsIDEuNTA1OTY5MDM2ODU2NTUw
MjYwMiwgMS40OTI0NjE0MjM3NzQ2MTU0MDgxLAotICAgIDEuNDc4OTgxOTc2OTgzMDk3ODU0Niwg
MS40NjU1MjU5NTczMzU3OTQ2Mjc2LCAxLjQ1MjA4ODY0Mjg4MjIxNjQ5MjYsIDEuNDM4NjY1MzE2
Njc3NDYxMzEzOCwKLSAgICAxLjQyNTI1MTI1NDUwNjg2MTU3MzQsIDEuNDExODQxNzEyNDM5NzYw
MjUwOSwgMS4zOTg0MzE5MTQxMjM2MDYzNTE3LCAxLjM4NTAxNzAzNzcyNTE0ODY0NDksCi0gICAg
MS4zNzE1OTIyMDI0MTk3MzIyNjk4LCAxLjM1ODE1MjQ1NDMyMjQyMjg3MzksIDEuMzQ0NjkyNzUx
NzQ1NzEzMDQzMiwgMS4zMzEyMDc5NDk2NTc2NzY1MDE3LAotICAgIDEuMzE3NjkyNzgzMjAxMzQy
OTkxMCwgMS4zMDQxNDE4NTAxMjA0MjE1MzkwLCAxLjI5MDU0OTU5MTkxNzg3MzE1MDgsIDEuMjc2
OTEwMjczNTUxNjk5NzE3NSwKLSAgICAxLjI2MzIxNzk2MTQ0NjAyODIzMTAsIDEuMjQ5NDY2NDk5
NTY0MzMzNzQ4MCwgMS4yMzU2NDk0ODMyNTQ0ODExNzQ5LCAxLjIyMTc2MDIzMDUzMDk2MjU2Nzgs
Ci0gICAgMS4yMDc3OTE3NTA0MDY3NTc2MDI4LCAxLjE5MzczNjcwNzgyMzc3MjE5OTQsIDEuMTc5
NTg3Mzg0NjU0NDYwNzAzNSwgMS4xNjUzMzU2MzYxNTUwNDY5MDgzLAotICAgIDEuMTUwOTcyODQy
MTM4OTc2MDY1MSwgMS4xMzY0ODk4NTIwMDMwNzU1MzUyLCAxLjEyMTg3NjkyMjU3MjI1NDA2NjEs
IDEuMTA3MTIzNjQ3NTIzNTM1Mzk4MCwKLSAgICAxLjA5MjIxODg3Njg5NjU1Mzc2MTQsIDEuMDc3
MTUwNjI0ODgxOTM3NjU3MywgMS4wNjE5MDU5NjM2ODM2MTkzOTk4LCAxLjA0NjQ3MDkwMDc1MjU4
MDI2MjksCi0gICAgMS4wMzA4MzAyMzYwNTY0NTU1OTA3LCAxLjAxNDk2NzM5NTIzOTI5OTQ3MTYs
IDAuOTk4ODY0MjMzNDgwNjQzNTEzMDMsIDAuOTgyNTAwODAzNTAyNzYwMzg0ODEsCi0gICAgMC45
NjU4NTUwNzkzODgxMzA1OTQ4OSwgMC45NDg5MDI2MjU0OTc5MTE5NTM4MSwgMC45MzE2MTYxOTY2
MDEzNTM4MTA1NiwgMC45MTM5NjUyNTEwMDg4MDE3NzY0NCwKLSAgICAwLjg5NTkxNTM1MjU2NjIz
ODUyODk0LCAwLjg3NzQyNzQyOTA5NzcxNTY5MTQyLCAwLjg1ODQ1Njg0MzE3ODA1MDg2MzU0LCAw
LjgzODk1MjIxNDI4MTIwNzQ1NTcyLAotICAgIDAuODE4ODUzOTA2NjgzMzE3NzIzMzEsIDAuNzk4
MDkyMDYwNjI2Mjc0ODA0NTQsIDAuNzc2NTgzOTg3ODc2MTQ4Mzg1OTgsIDAuNzU0MjMwNjY0NDM0
NTEwMDcxNDYsCi0gICAgMC43MzA5MTE5MTA2MjE4ODEyODE1MCwgMC43MDY0Nzk2MTEzMTM2MDgw
MzQ1NiwgMC42ODA3NDc5MTg2NDU5MDQyMTY2NCwgMC42NTM0Nzg2Mzg3MTUwNDIzODcwMiwKLSAg
ICAwLjYyNDM1ODU5NzMwOTA4ODIyMTExLCAwLjU5Mjk2Mjk0MjQ0MTk3Nzk3OTEzLCAwLjU1ODY5
MjE3ODM3NTUxNzk3MTQwLCAwLjUyMDY1NjAzODcyNTE0NDkxNzU5LAotICAgIDAuNDc3NDM3ODM3
MjUzNzg3ODc2ODEsIDAuNDI2NTQ3OTg2MzAzMzA1MTI0OTAsIDAuMzYyODcxNDMxMDI4NDE4MzA0
MjQsIDAuMjcyMzIwODY0NzA0NjYzODUwNjUsCi0gICAgMAotfTsKLQotdGVtcGxhdGU8Y2xhc3Mg
UmVhbFR5cGU+Ci1jb25zdCBSZWFsVHlwZSBub3JtYWxfdGFibGU8UmVhbFR5cGU+Ojp0YWJsZV95
WzEyOV0gPSB7Ci0gICAgMCwgMC4wMDI2Njk2MjkwODM5MDI1MDM1MDkyLCAwLjAwNTU0ODk5NTIy
MDgxNjQ3MDUzOTIsIDAuMDA4NjI0NDg0NDEyOTMwNDcwOTY4MiwKLSAgICAwLjAxMTgzOTQ3ODY1
Nzk4MjMxMzcxNSwgMC4wMTUxNjcyOTgwMTA2NzIwNDI0NjgsIDAuMDE4NTkyMTAyNzM3MTY1ODEy
NjUwLCAwLjAyMjEwMzMwNDYxNjExMTU5MjYxNSwKLSAgICAwLjAyNTY5MzI5MTkzNjE0OTYxNjU3
MiwgMC4wMjkzNTYzMTc0NDAyNTM4Mjk2MTgsIDAuMDMzMDg3ODg2MTQ2NTA1MTU1NTY2LCAwLjAz
Njg4NDM4ODc4Njk2ODc3NDEyOCwKLSAgICAwLjA0MDc0Mjg2ODA3NDc5MDYwNDYzMiwgMC4wNDQ2
NjA4NjIyMDA4NzI0Mjk4MDAsIDAuMDQ4NjM2Mjk1ODYwMjg0MDUxODc4LCAwLjA1MjY2NzQwMTkw
MzUwMzE2OTc5MywKLSAgICAwLjA1Njc1MjY2MzQ4MTUzODU4NDE4OCwgMC4wNjA4OTA3NzAzNDg1
NjYzNzU5NzIsIDAuMDY1MDgwNTg1MjEzNjMxODczNzUzLCAwLjA2OTMyMTExNzM5NDE4MDI1MjYw
MSwKLSAgICAwLjA3MzYxMTUwMTg4NDc1NDg5MzM4OSwgMC4wNzc5NTA5ODI1MTQ2NTQ3MTQxODgs
IDAuMDgyMzM4ODk4MjQyOTU3NDA4MjQzLCAwLjA4Njc3NDY3MTg5NTU0Mjk2ODk5OCwKLSAgICAw
LjA5MTI1NzgwMDgyNzYzNDcxMDIwMSwgMC4wOTU3ODc4NDkxMjI1NzgxNTIxNiwgMC4xMDAzNjQ0
NDEwMjk1NDU1NDAxMywgMC4xMDQ5ODcyNTU0MTAzNTQ1Mzk3OCwKLSAgICAwLjEwOTY1NjAyMTAx
NTgxNzc2MTAwLCAwLjExNDM3MDUxMjQ0OTg4ODI3NDUyLCAwLjExOTEzMDU0NjcwODcxODU4NzY3
LCAwLjEyMzkzNTk4MDIwMzk4MTc0MjQ2LAotICAgIDAuMTI4Nzg2NzA2MTk3MTAzOTYxMDksIDAu
MTMzNjgyNjUyNTg0NjQ3NjQxMTgsIDAuMTM4NjIzNzc5OTg1ODUxMDM3MDIsIDAuMTQzNjEwMDgw
MDkxOTMyOTk0NjksCi0gICAgMC4xNDg2NDE1NzQyNDM2OTY5NjU2NiwgMC4xNTM3MTgzMTIyMDk1
ODY1NzA2NiwgMC4xNTg4NDAzNzExNDA5MzUwNzgxMywgMC4xNjQwMDc4NTQ2ODQ5Mjc3NDc5MSwK
LSAgICAwLjE2OTIyMDg5MjIzODkyNDc1MTc2LCAwLjE3NDQ3OTYzODMzMjQwMjMyMjk1LCAwLjE3
OTc4NDI3MjEyNDk2MjExNDI0LCAwLjE4NTEzNDk5NzAxMDcxMzQzMjE2LAotICAgIDAuMTkwNTMy
MDQwMzIwOTEzNzIxMTIsIDAuMTk1OTc1NjUzMTE4MTEwNDEzOTksIDAuMjAxNDY2MTEwMDc2MjAz
MjQxMTgsIDAuMjA3MDAzNzA5NDQxODczODAwNjQsCi0gICAgMC4yMTI1ODg3NzMwNzM3MzYxMDA2
MCwgMC4yMTgyMjE2NDY1NTYzNzA1OTU5OSwgMC4yMjM5MDI2OTkzODcxMzM4ODc0NywgMC4yMjk2
MzIzMjUyMzQzMDI3MDM1NSwKLSAgICAwLjIzNTQxMDk0MjI2NTcyNzY1NjAwLCAwLjI0MTIzODk5
MzU0Nzc1MTMxNjEwLCAwLjI0NzExNjk0NzUxNDY5NjczNTgyLCAwLjI1MzA0NTI5ODUwOTc2NTg1
OTM0LAotICAgIDAuMjU5MDI0NTY3Mzk4NzEwNzQyNjMsIDAuMjY1MDU1MzAyMjU4MTYxOTQwMjks
IDAuMjcxMTM4MDc5MTQxMDI1MjczNDMsIDAuMjc3MjczNTAyOTIxODk3NzExNTMsCi0gICAgMC4y
ODM0NjIyMDgyMjYwMTI1MTc3OSwgMC4yODk3MDQ4NjA0NDU4MTA0OTc3MSwgMC4yOTYwMDIxNTY4
NDk4NTU4MzY1OSwgMC4zMDIzNTQ4Mjc3ODk0Nzk3NjI3NCwKLSAgICAwLjMwODc2MzYzODAwOTI1
MTkyMjgyLCAwLjMxNTIyOTM4ODA2ODE1NzUyMjIyLCAwLjMyMTc1MjkxNTg3OTIwODYyMDMxLCAw
LjMyODMzNTA5ODM3NjE1MjM5NjA5LAotICAgIDAuMzM0OTc2ODUzMzE2OTcxMTYxNDcsIDAuMzQx
Njc5MTQxMjM1MDEzNjg0MTIsIDAuMzQ4NDQyOTY3NTQ5ODcyNDY5MzUsIDAuMzU1MjY5Mzg0ODUx
NTQ3MTQ0MzUsCi0gICAgMC4zNjIxNTk0OTUzNzMwMzMyMTE2MiwgMC4zNjkxMTQ0NTM2NjgyNzUx
Mzk1MiwgMC4zNzYxMzU0Njk1MTQ0NTQ0Mjk0NywgMC4zODMyMjM4MTEwNTk4ODM2NDU4NywKLSAg
ICAwLjM5MDM4MDgwODI0MTM4OTQ4OTE2LCAwLjM5NzYwNzg1NjQ5ODA0MjU1MjA4LCAwLjQwNDkw
NjQyMDgxMTQ4ODM1MDk5LCAwLjQxMjI3ODA0MDEwNzAyNDYyMDYyLAotICAgIDAuNDE5NzI0MzMy
MDU0MDM4MjM0NjcsIDAuNDI3MjQ2OTk4MzA5NTYyMzk4ODAsIDAuNDM0ODQ3ODMwMjU0NjYxODk2
MzgsIDAuNDQyNTI4NzE1MjgwMjQ2NjE0ODMsCi0gICAgMC40NTAyOTE2NDM2ODY5MjY5NjA4Niwg
MC40NTgxMzg3MTYyNzI4NzE5NjQ4MywgMC40NjYwNzIxNTI2OTQ1NzA5NzkyNCwgMC40NzQwOTQz
MDA2OTgyNDk2MDQ1MywKLSAgICAwLjQ4MjIwNzY0NjMzNDgzODY5MDYyLCAwLjQ5MDQxNDgyNTI4
OTMyMTYzNzQxLCAwLjQ5ODcxODYzNTQ3NjU4NDMyNDIyLCAwLjUwNzEyMjA1MTA4MTMwNDU4OTUx
LAotICAgIDAuNTE1NjI4MjM4MjQ5ODcyMDUxOTYsIDAuNTI0MjQwNTcyNjc4OTkyNzk4MDksIDAu
NTMyOTYyNjU5Mzg5OTg3NTg4MzgsIDAuNTQxNzk4MzU1MDMxNzI0MTIzMTEsCi0gICAgMC41NTA3
NTE3OTMxMjEwNTUyNzczOCwgMC41NTk4Mjc0MTI3MTA2OTQ4MTc5MSwgMC41NjkwMjk5OTEwNzQ3
MjE2MTIyNSwgMC41NzgzNjQ2ODExMjY3MDIzMTI3OSwKLSAgICAwLjU4NzgzNzA1NDQ0MTgyMDUy
NTcxLCAwLjU5NzQ1MzE1MDk1MTgxMjI4MjE3LCAwLjYwNzIxOTUzNjYzMjYwNDg4NTUxLCAwLjYx
NzE0MzM3MDgyNjU2MjQ4ODcwLAotICAgIDAuNjI3MjMyNDg1MjU3ODE0NTY1NzgsIDAuNjM3NDk1
NDc3MzQzMTQ0ODc0MjgsIDAuNjQ3OTQxODIxMTE4NTUwODA4NzMsIDAuNjU4NTgyMDAwMDU4NjUz
NjgwMTYsCi0gICAgMC42Njk0Mjc2NjczNTc3MDYxNjg5MSwgMC42ODA0OTE4NDEwMDY0MTQzMzM1
NSwgMC42OTE3ODkxNDM0NDYwMzU4NTI3OSwgMC43MDMzMzYwOTkwMjU4MTc0MTYzMywKLSAgICAw
LjcxNTE1MTUwNzQyMDQ3NzA0MzY4LCAwLjcyNzI1NjkxODM1NDUwNTg3NzkzLCAwLjczOTY3NzI0
MzY4MzMzODE0ODU2LCAwLjc1MjQ0MTU1OTE4NTcwMzgwMTQ1LAotICAgIDAuNzY1NTg0MTczOTA5
MjM1OTk0ODAsIDAuNzc5MTQ2MDg1OTQxNzAzMTY1NjMsIDAuNzkzMTc3MDExNzgzODU5MjEwNTMs
IDAuODA3NzM4Mjk0Njk2MTIxMTEzNDAsCi0gICAgMC44MjI5MDcyMTEzOTUyNjIwMDA1MCwgMC44
Mzg3ODM2MDUzMTA2NDcyMjM3OSwgMC44NTU1MDA2MDc4ODUwNjQyODQxOCwgMC44NzMyNDMwNDg5
MjY4NTM1ODg3OSwKLSAgICAwLjg5MjI4MTY1MDgwMjMwMjcyMzAxLCAwLjkxMzA0MzY0Nzk5MjAz
ODA1OTk5LCAwLjkzNjI4MjY4MTcwODM3MTA3NTQ3LCAwLjk2MzU5OTY5MzE1NTc2NzU5OTYwLAot
ICAgIDEKLX07Ci0KLQotdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGUgPSBkb3VibGU+Ci1zdHJ1Y3Qg
dW5pdF9ub3JtYWxfZGlzdHJpYnV0aW9uCi17Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRW5naW5lPgot
ICAgIFJlYWxUeXBlIG9wZXJhdG9yKCkoRW5naW5lJiBlbmcpIHsKLSAgICAgICAgY29uc3QgZG91
YmxlICogY29uc3QgdGFibGVfeCA9IG5vcm1hbF90YWJsZTxkb3VibGU+Ojp0YWJsZV94OwotICAg
ICAgICBjb25zdCBkb3VibGUgKiBjb25zdCB0YWJsZV95ID0gbm9ybWFsX3RhYmxlPGRvdWJsZT46
OnRhYmxlX3k7Ci0gICAgICAgIGZvcig7OykgewotICAgICAgICAgICAgc3RkOjpwYWlyPFJlYWxU
eXBlLCBpbnQ+IHZhbHMgPSBnZW5lcmF0ZV9pbnRfZmxvYXRfcGFpcjxSZWFsVHlwZSwgOD4oZW5n
KTsKLSAgICAgICAgICAgIGludCBpID0gdmFscy5zZWNvbmQ7Ci0gICAgICAgICAgICBpbnQgc2ln
biA9IChpICYgMSkgKiAyIC0gMTsKLSAgICAgICAgICAgIGkgPSBpID4+IDE7Ci0gICAgICAgICAg
ICBSZWFsVHlwZSB4ID0gdmFscy5maXJzdCAqIFJlYWxUeXBlKHRhYmxlX3hbaV0pOwotICAgICAg
ICAgICAgaWYoeCA8IHRhYmxlX3hbaSArIDFdKSByZXR1cm4geCAqIHNpZ247Ci0gICAgICAgICAg
ICBpZihpID09IDApIHJldHVybiBnZW5lcmF0ZV90YWlsKGVuZykgKiBzaWduOwotCi0gICAgICAg
ICAgICBSZWFsVHlwZSB5MDEgPSB1bmlmb3JtXzAxPFJlYWxUeXBlPigpKGVuZyk7Ci0gICAgICAg
ICAgICBSZWFsVHlwZSB5ID0gUmVhbFR5cGUodGFibGVfeVtpXSkgKyB5MDEgKiBSZWFsVHlwZSh0
YWJsZV95W2kgKyAxXSAtIHRhYmxlX3lbaV0pOwotCi0gICAgICAgICAgICAvLyBUaGVzZSBzdG9y
ZSB0aGUgdmFsdWUgeSAtIGJvdW5kLCBvciBzb21ldGhpbmcgcHJvcG9ydGlvbmFsIHRvIHRoYXQg
ZGlmZmVyZW5jZToKLSAgICAgICAgICAgIFJlYWxUeXBlIHlfYWJvdmVfdWJvdW5kLCB5X2Fib3Zl
X2xib3VuZDsKLQotICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHRocmVlIGNhc2VzIHRvIGNvbnNp
ZGVyOgotICAgICAgICAgICAgLy8gLSBjb252ZXggcmVnaW9ucyAod2hlcmUgeFtpXSA+IHhbal0g
Pj0gMSkKLSAgICAgICAgICAgIC8vIC0gY29uY2F2ZSByZWdpb25zICh3aGVyZSAxIDw9IHhbaV0g
PCB4W2pdKQotICAgICAgICAgICAgLy8gLSByZWdpb24gY29udGFpbmluZyB0aGUgaW5mbGVjdGlv
biBwb2ludCAod2hlcmUgeFtpXSA+IDEgPiB4W2pdKQotICAgICAgICAgICAgLy8gRm9yIGNvbnZl
eCAoY29uY2F2ZSksIGV4cF4oLXheMi8yKSBpcyBib3VuZGVkIGJlbG93IChhYm92ZSkgYnkgdGhl
IHRhbmdlbnQgYXQKLSAgICAgICAgICAgIC8vICh4W2ldLHlbaV0pIGFuZCBpcyBib3VuZGVkIGFi
b3ZlIChiZWxvdykgYnkgdGhlIGRpYWdvbmFsIGxpbmUgZnJvbSAoeFtpKzFdLHlbaSsxXSkgdG8K
LSAgICAgICAgICAgIC8vICh4W2ldLHlbaV0pLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
IC8vICpJZiogdGhlIGluZmxlY3Rpb24gcG9pbnQgcmVnaW9uIHNhdGlzZmllcyBzbG9wZSh4W2kr
MV0pIDwgc2xvcGUoZGlhZ29uYWwpLCB0aGVuIHdlCi0gICAgICAgICAgICAvLyBjYW4gdHJlYXQg
dGhlIGluZmxlY3Rpb24gcmVnaW9uIGFzIGEgY29udmV4IHJlZ2lvbjogdGhpcyBjb25kaXRpb24g
aXMgbmVjZXNzYXJ5IGFuZAotICAgICAgICAgICAgLy8gc3VmZmljaWVudCB0byBlbnN1cmUgdGhh
dCB0aGUgY3VydmUgbGllcyBlbnRpcmVseSBiZWxvdyB0aGUgZGlhZ29uYWwgKHRoYXQsIGluIHR1
cm4sCi0gICAgICAgICAgICAvLyBhbHNvIGltcGxpZXMgdGhhdCBpdCB3aWxsIGJlIGFib3ZlIHRo
ZSB0YW5nZW50IGF0IHhbaV0pLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEZvciB0
aGUgY3VycmVudCB0YWJsZSBzaXplICgxMjgpLCB0aGlzIGlzIHNhdGlzZmllZDogc2xvcGUoeFtp
KzFdKSA9IC0wLjYwNjUzIDwKLSAgICAgICAgICAgIC8vIHNsb3BlKGRpYWcpID0gLTAuNjA2NDks
IGFuZCBzbyB3ZSBoYXZlIG9ubHkgdHdvIGNhc2VzIGJlbG93IGluc3RlYWQgb2YgdGhyZWUuCi0K
LSAgICAgICAgICAgIGlmICh0YWJsZV94W2ldID49IDEpIHsgLy8gY29udmV4IChpbmNsLiBpbmZs
ZWN0aW9uKQotICAgICAgICAgICAgICAgIHlfYWJvdmVfdWJvdW5kID0gUmVhbFR5cGUodGFibGVf
eFtpXSAtIHRhYmxlX3hbaSsxXSkgKiB5MDEgLSAoUmVhbFR5cGUodGFibGVfeFtpXSkgLSB4KTsK
LSAgICAgICAgICAgICAgICB5X2Fib3ZlX2xib3VuZCA9IHkgLSAoUmVhbFR5cGUodGFibGVfeVtp
XSkgKyAoUmVhbFR5cGUodGFibGVfeFtpXSkgLSB4KSAqIFJlYWxUeXBlKHRhYmxlX3lbaV0pICog
UmVhbFR5cGUodGFibGVfeFtpXSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7
IC8vIGNvbmNhdmUKLSAgICAgICAgICAgICAgICB5X2Fib3ZlX2xib3VuZCA9IFJlYWxUeXBlKHRh
YmxlX3hbaV0gLSB0YWJsZV94W2krMV0pICogeTAxIC0gKFJlYWxUeXBlKHRhYmxlX3hbaV0pIC0g
eCk7Ci0gICAgICAgICAgICAgICAgeV9hYm92ZV91Ym91bmQgPSB5IC0gKFJlYWxUeXBlKHRhYmxl
X3lbaV0pICsgKFJlYWxUeXBlKHRhYmxlX3hbaV0pIC0geCkgKiBSZWFsVHlwZSh0YWJsZV95W2ld
KSAqIFJlYWxUeXBlKHRhYmxlX3hbaV0pKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKHlfYWJvdmVfdWJvdW5kIDwgMCAvLyBpZiBhYm92ZSB0aGUgdXBwZXIgYm91bmQgcmVqZWN0
IGltbWVkaWF0ZWx5Ci0gICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgICAgICAg
ICgKLSAgICAgICAgICAgICAgICAgICAgIHlfYWJvdmVfbGJvdW5kIDwgMCAvLyBJZiBiZWxvdyB0
aGUgbG93ZXIgYm91bmQgYWNjZXB0IGltbWVkaWF0ZWx5Ci0gICAgICAgICAgICAgICAgICAgICB8
fAotICAgICAgICAgICAgICAgICAgICAgeSA8IGYoeCkgLy8gT3RoZXJ3aXNlIGl0J3MgYmV0d2Vl
biB0aGUgYm91bmRzIGFuZCB3ZSBuZWVkIGEgZnVsbCBjaGVjawotICAgICAgICAgICAgICAgICAg
ICApCi0gICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4geCAqIHNpZ247
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3RhdGljIFJlYWxUeXBlIGYo
UmVhbFR5cGUgeCkgewotICAgICAgICB1c2luZyBzdGQ6OmV4cDsKLSAgICAgICAgcmV0dXJuIGV4
cCgtKHgqeC8yKSk7Ci0gICAgfQotICAgIC8vIEdlbmVyYXRlIGZyb20gdGhlIHRhaWwgdXNpbmcg
cmVqZWN0aW9uIHNhbXBsaW5nIGZyb20gdGhlIGV4cG9uZW50aWFsKHhfMSkgZGlzdHJpYnV0aW9u
LAotICAgIC8vIHNoaWZ0ZWQgYnkgeF8xLiAgVGhpcyBsb29rcyBhIGxpdHRsZSBkaWZmZXJlbnQg
ZnJvbSB0aGUgdXN1YWwgcmVqZWN0aW9uIHNhbXBsaW5nIGJlY2F1c2UgaXQKLSAgICAvLyB0cmFu
c2Zvcm1zIHRoZSBjb25kaXRpb24gYnkgdGFraW5nIHRoZSBsb2cgb2YgYm90aCBzaWRlcywgdGh1
cyBhdm9pZGluZyB0aGUgY29zdGx5IGV4cCgpIGNhbGwKLSAgICAvLyBvbiB0aGUgUkhTLCB0aGVu
IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IC1sb2codW5pZjAxKSBpcyBzaW1wbHkg
Z2VuZXJhdGluZyBhbgotICAgIC8vIGV4cG9uZW50aWFsIChieSBpbnZlcnNlIGNkZiBzYW1wbGlu
ZykgYnkgcmVwbGFjaW5nIHRoZSBsb2codW5pZjAxKSBvbiB0aGUgTEhTIHdpdGggYQotICAgIC8v
IGV4cG9uZW50aWFsKDEpIGRyYXcsIHkuCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5naW5lPgotICAg
IFJlYWxUeXBlIGdlbmVyYXRlX3RhaWwoRW5naW5lJiBlbmcpIHsKLSAgICAgICAgY29uc3QgUmVh
bFR5cGUgdGFpbF9zdGFydCA9IFJlYWxUeXBlKG5vcm1hbF90YWJsZTxkb3VibGU+Ojp0YWJsZV94
WzFdKTsKLSAgICAgICAgYm9vc3Q6OnJhbmRvbTo6ZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uPFJl
YWxUeXBlPiBleHBfeCh0YWlsX3N0YXJ0KTsKLSAgICAgICAgYm9vc3Q6OnJhbmRvbTo6ZXhwb25l
bnRpYWxfZGlzdHJpYnV0aW9uPFJlYWxUeXBlPiBleHBfeTsKLSAgICAgICAgZm9yKDs7KSB7Ci0g
ICAgICAgICAgICBSZWFsVHlwZSB4ID0gZXhwX3goZW5nKTsKLSAgICAgICAgICAgIFJlYWxUeXBl
IHkgPSBleHBfeShlbmcpOwotICAgICAgICAgICAgLy8gSWYgd2Ugd2VyZSBkb2luZyBub24tdHJh
bnNmb3JtZWQgcmVqZWN0aW9uIHNhbXBsaW5nLCB0aGlzIGNvbmRpdGlvbiB3b3VsZCBiZToKLSAg
ICAgICAgICAgIC8vIGlmICh1bmlmMDEgPCBleHAoLS41KngqeCkpIHJldHVybiB4ICsgdGFpbF9z
dGFydDsKLSAgICAgICAgICAgIGlmKDIqeSA+IHgqeCkgcmV0dXJuIHggKyB0YWlsX3N0YXJ0Owot
ICAgICAgICB9Ci0gICAgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLQotLyoqCi0g
KiBJbnN0YW50aWF0aW9ucyBvZiBjbGFzcyB0ZW1wbGF0ZSBub3JtYWxfZGlzdHJpYnV0aW9uIG1v
ZGVsIGEKLSAqIFxyYW5kb21fZGlzdHJpYnV0aW9uLiBTdWNoIGEgZGlzdHJpYnV0aW9uIHByb2R1
Y2VzIHJhbmRvbSBudW1iZXJzCi0gKiBAYyB4IGRpc3RyaWJ1dGVkIHdpdGggcHJvYmFiaWxpdHkg
ZGVuc2l0eSBmdW5jdGlvbgotICogXGYkXGRpc3BsYXlzdHlsZSBwKHgpID0KLSAqICAgXGZyYWN7
MX17XHNxcnR7MlxwaX1cc2lnbWF9IGVeey1cZnJhY3soeC1cbXUpXjJ9ezJcc2lnbWFeMn19Ci0g
KiBcZiQsCi0gKiB3aGVyZSBtZWFuIGFuZCBzaWdtYSBhcmUgdGhlIHBhcmFtZXRlcnMgb2YgdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgInppZ2d1
cmF0IiBhbGdvcml0aG0sIGFzIGRlc2NyaWJlZCBpbgotICoKLSAqICBAYmxvY2txdW90ZQotICog
ICJUaGUgWmlnZ3VyYXQgTWV0aG9kIGZvciBHZW5lcmF0aW5nIFJhbmRvbSBWYXJpYWJsZXMiLAot
ICogIEdlb3JnZSBNYXJzYWdsaWEgYW5kIFdhaSBXYW4gVHNhbmcsIEpvdXJuYWwgb2YgU3RhdGlz
dGljYWwgU29mdHdhcmUsCi0gKiAgVm9sdW1lIDUsIE51bWJlciA4ICgyMDAwKSwgMS03LgotICog
IEBlbmRibG9ja3F1b3RlCi0gKi8KLXRlbXBsYXRlPGNsYXNzIFJlYWxUeXBlID0gZG91YmxlPgot
Y2xhc3Mgbm9ybWFsX2Rpc3RyaWJ1dGlvbgotewotcHVibGljOgotICAgIHR5cGVkZWYgUmVhbFR5
cGUgaW5wdXRfdHlwZTsKLSAgICB0eXBlZGVmIFJlYWxUeXBlIHJlc3VsdF90eXBlOwotCi0gICAg
Y2xhc3MgcGFyYW1fdHlwZSB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIG5vcm1hbF9k
aXN0cmlidXRpb24gZGlzdHJpYnV0aW9uX3R5cGU7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAq
IENvbnN0cnVjdHMgYSBAYyBwYXJhbV90eXBlIHdpdGggYSBnaXZlbiBtZWFuIGFuZAotICAgICAg
ICAgKiBzdGFuZGFyZCBkZXZpYXRpb24uCi0gICAgICAgICAqCi0gICAgICAgICAqIFJlcXVpcmVz
OiBzaWdtYSA+PSAwCi0gICAgICAgICAqLwotICAgICAgICBleHBsaWNpdCBwYXJhbV90eXBlKFJl
YWxUeXBlIG1lYW5fYXJnID0gUmVhbFR5cGUoMC4wKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZWFsVHlwZSBzaWdtYV9hcmcgPSBSZWFsVHlwZSgxLjApKQotICAgICAgICAgIDogX21l
YW4obWVhbl9hcmcpLAotICAgICAgICAgICAgX3NpZ21hKHNpZ21hX2FyZykKLSAgICAgICAge30K
LQotICAgICAgICAvKiogUmV0dXJucyB0aGUgbWVhbiBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwot
ICAgICAgICBSZWFsVHlwZSBtZWFuKCkgY29uc3QgeyByZXR1cm4gX21lYW47IH0KLQotICAgICAg
ICAvKiogUmV0dXJucyB0aGUgc3RhbmRhbmQgZGV2aWF0aW9uIG9mIHRoZSBkaXN0cmlidXRpb24u
ICovCi0gICAgICAgIFJlYWxUeXBlIHNpZ21hKCkgY29uc3QgeyByZXR1cm4gX3NpZ21hOyB9Ci0K
LSAgICAgICAgLyoqIFdyaXRlcyBhIEBjIHBhcmFtX3R5cGUgdG8gYSBAYyBzdGQ6Om9zdHJlYW0u
ICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihvcywgcGFy
YW1fdHlwZSwgcGFybSkKLSAgICAgICAgeyBvcyA8PCBwYXJtLl9tZWFuIDw8ICIgIiA8PCBwYXJt
Ll9zaWdtYSA7IHJldHVybiBvczsgfQotCi0gICAgICAgIC8qKiBSZWFkcyBhIEBjIHBhcmFtX3R5
cGUgZnJvbSBhIEBjIHN0ZDo6aXN0cmVhbS4gKi8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJ
TF9JU1RSRUFNX09QRVJBVE9SKGlzLCBwYXJhbV90eXBlLCBwYXJtKQotICAgICAgICB7IGlzID4+
IHBhcm0uX21lYW4gPj4gc3RkOjp3cyA+PiBwYXJtLl9zaWdtYTsgcmV0dXJuIGlzOyB9Ci0KLSAg
ICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUg
dGhlIHNhbWUuICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFU
T1IocGFyYW1fdHlwZSwgbGhzLCByaHMpCi0gICAgICAgIHsgcmV0dXJuIGxocy5fbWVhbiA9PSBy
aHMuX21lYW4gJiYgbGhzLl9zaWdtYSA9PSByaHMuX3NpZ21hOyB9Ci0gICAgICAgIAotICAgICAg
ICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gc2V0cyBvZiBwYXJhbWV0ZXJzIGFyZSB0aGUg
ZGlmZmVyZW50LiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0lORVFVQUxJVFlfT1BF
UkFUT1IocGFyYW1fdHlwZSkKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlYWxUeXBlIF9tZWFu
OwotICAgICAgICBSZWFsVHlwZSBfc2lnbWE7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIENv
bnN0cnVjdHMgYSBAYyBub3JtYWxfZGlzdHJpYnV0aW9uIG9iamVjdC4gQGMgbWVhbiBhbmQgQGMg
c2lnbWEgYXJlCi0gICAgICogdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkaXN0cmlidXRpb24uCi0g
ICAgICoKLSAgICAgKiBSZXF1aXJlczogc2lnbWEgPj0gMAotICAgICAqLwotICAgIGV4cGxpY2l0
IG5vcm1hbF9kaXN0cmlidXRpb24oY29uc3QgUmVhbFR5cGUmIG1lYW5fYXJnID0gUmVhbFR5cGUo
MC4wKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlYWxUeXBlJiBz
aWdtYV9hcmcgPSBSZWFsVHlwZSgxLjApKQotICAgICAgOiBfbWVhbihtZWFuX2FyZyksIF9zaWdt
YShzaWdtYV9hcmcpCi0gICAgewotICAgICAgICBCT09TVF9BU1NFUlQoX3NpZ21hID49IFJlYWxU
eXBlKDApKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgQGMgbm9ybWFs
X2Rpc3RyaWJ1dGlvbiBvYmplY3QgZnJvbSBpdHMgcGFyYW1ldGVycy4KLSAgICAgKi8KLSAgICBl
eHBsaWNpdCBub3JtYWxfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0pCi0gICAg
ICA6IF9tZWFuKHBhcm0ubWVhbigpKSwgX3NpZ21hKHBhcm0uc2lnbWEoKSkKLSAgICB7fQotCi0g
ICAgLyoqICBSZXR1cm5zIHRoZSBtZWFuIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgUmVh
bFR5cGUgbWVhbigpIGNvbnN0IHsgcmV0dXJuIF9tZWFuOyB9Ci0gICAgLyoqIFJldHVybnMgdGhl
IHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIFJlYWxUeXBl
IHNpZ21hKCkgY29uc3QgeyByZXR1cm4gX3NpZ21hOyB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUg
c21hbGxlc3QgdmFsdWUgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGNhbiBwcm9kdWNlLiAqLwotICAg
IFJlYWxUeXBlIG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKSBjb25zdAot
ICAgIHsgcmV0dXJuIC1zdGQ6Om51bWVyaWNfbGltaXRzPFJlYWxUeXBlPjo6aW5maW5pdHkoKTsg
fQotICAgIC8qKiBSZXR1cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlv
biBjYW4gcHJvZHVjZS4gKi8KLSAgICBSZWFsVHlwZSBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19T
VUJTVElUVVRJT04gKCkgY29uc3QKLSAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPFJl
YWxUeXBlPjo6aW5maW5pdHkoKTsgfQotCi0gICAgLyoqIFJldHVybnMgdGhlIHBhcmFtZXRlcnMg
b2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICBwYXJhbV90eXBlIHBhcmFtKCkgY29uc3QgeyBy
ZXR1cm4gcGFyYW1fdHlwZShfbWVhbiwgX3NpZ21hKTsgfQotICAgIC8qKiBTZXRzIHRoZSBwYXJh
bWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgdm9pZCBwYXJhbShjb25zdCBwYXJh
bV90eXBlJiBwYXJtKQotICAgIHsKLSAgICAgICAgX21lYW4gPSBwYXJtLm1lYW4oKTsKLSAgICAg
ICAgX3NpZ21hID0gcGFybS5zaWdtYSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVmZmVj
dHM6IFN1YnNlcXVlbnQgdXNlcyBvZiB0aGUgZGlzdHJpYnV0aW9uIGRvIG5vdCBkZXBlbmQKLSAg
ICAgKiBvbiB2YWx1ZXMgcHJvZHVjZWQgYnkgYW55IGVuZ2luZSBwcmlvciB0byBpbnZva2luZyBy
ZXNldC4KLSAgICAgKi8KLSAgICB2b2lkIHJlc2V0KCkgeyB9Ci0KLSAgICAvKiogIFJldHVybnMg
YSBub3JtYWwgdmFyaWF0ZS4gKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmdpbmU+Ci0gICAgcmVz
dWx0X3R5cGUgb3BlcmF0b3IoKShFbmdpbmUmIGVuZykKLSAgICB7Ci0gICAgICAgIGRldGFpbDo6
dW5pdF9ub3JtYWxfZGlzdHJpYnV0aW9uPFJlYWxUeXBlPiBpbXBsOwotICAgICAgICByZXR1cm4g
aW1wbChlbmcpICogX3NpZ21hICsgX21lYW47Ci0gICAgfQotCi0gICAgLyoqIFJldHVybnMgYSBu
b3JtYWwgdmFyaWF0ZSB3aXRoIHBhcmFtZXRlcnMgc3BlY2lmaWVkIGJ5IEBjIHBhcmFtLiAqLwot
ICAgIHRlbXBsYXRlPGNsYXNzIFVSTkc+Ci0gICAgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKShVUk5H
JiB1cm5nLCBjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5v
cm1hbF9kaXN0cmlidXRpb24ocGFybSkodXJuZyk7Ci0gICAgfQotCi0gICAgLyoqIFdyaXRlcyBh
IEBjIG5vcm1hbF9kaXN0cmlidXRpb24gdG8gYSBAYyBzdGQ6Om9zdHJlYW0uICovCi0gICAgQk9P
U1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCBub3JtYWxfZGlzdHJpYnV0aW9u
LCBuZCkKLSAgICB7Ci0gICAgICAgIG9zIDw8IG5kLl9tZWFuIDw8ICIgIiA8PCBuZC5fc2lnbWE7
Ci0gICAgICAgIHJldHVybiBvczsKLSAgICB9Ci0KLSAgICAvKiogUmVhZHMgYSBAYyBub3JtYWxf
ZGlzdHJpYnV0aW9uIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uICovCi0gICAgQk9PU1RfUkFORE9N
X0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlzLCBub3JtYWxfZGlzdHJpYnV0aW9uLCBuZCkKLSAg
ICB7Ci0gICAgICAgIGlzID4+IHN0ZDo6d3MgPj4gbmQuX21lYW4gPj4gc3RkOjp3cyA+PiBuZC5f
c2lnbWE7Ci0gICAgICAgIHJldHVybiBpczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1
cm5zIHRydWUgaWYgdGhlIHR3byBpbnN0YW5jZXMgb2YgQGMgbm9ybWFsX2Rpc3RyaWJ1dGlvbiB3
aWxsCi0gICAgICogcmV0dXJuIGlkZW50aWNhbCBzZXF1ZW5jZXMgb2YgdmFsdWVzIGdpdmVuIGVx
dWFsIGdlbmVyYXRvcnMuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElU
WV9PUEVSQVRPUihub3JtYWxfZGlzdHJpYnV0aW9uLCBsaHMsIHJocykKLSAgICB7Ci0gICAgICAg
IHJldHVybiBsaHMuX21lYW4gPT0gcmhzLl9tZWFuICYmIGxocy5fc2lnbWEgPT0gcmhzLl9zaWdt
YTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBpbnN0
YW5jZXMgb2YgQGMgbm9ybWFsX2Rpc3RyaWJ1dGlvbiB3aWxsCi0gICAgICogcmV0dXJuIGRpZmZl
cmVudCBzZXF1ZW5jZXMgb2YgdmFsdWVzIGdpdmVuIGVxdWFsIGdlbmVyYXRvcnMuCi0gICAgICov
Ci0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKG5vcm1hbF9kaXN0
cmlidXRpb24pCi0KLXByaXZhdGU6Ci0gICAgUmVhbFR5cGUgX21lYW4sIF9zaWdtYTsKLQotfTsK
LQotfSAvLyBuYW1lc3BhY2UgcmFuZG9tCi0KLXVzaW5nIHJhbmRvbTo6bm9ybWFsX2Rpc3RyaWJ1
dGlvbjsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9O
T1JNQUxfRElTVFJJQlVUSU9OX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3BpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRp
b24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9t
L3BpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb24uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0ODhmNDFjMGUzNGE2YWQyZjI5MGQ1OTAzMTY2OTkyMThlMGRhNTdiLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9waWVjZXdpc2VfY29uc3RhbnRfZGlz
dHJpYnV0aW9uLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ2NiArMCwwIEBACi0vKiBib29zdCBy
YW5kb20vcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbi5ocHAgaGVhZGVyIGZpbGUKLSAq
Ci0gKiBDb3B5cmlnaHQgU3RldmVuIFdhdGFuYWJlIDIwMTEKLSAqIERpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotICogYWNjb21w
YW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAqIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqCi0gKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcg
Zm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0gKgotICog
JElkJAotICovCi0KLSNpZm5kZWYgQk9PU1RfUkFORE9NX1BJRUNFV0lTRV9DT05TVEFOVF9ESVNU
UklCVVRJT05fSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9QSUVDRVdJU0VfQ09O
U1RBTlRfRElTVFJJQlVUSU9OX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8dmVjdG9yPgotI2lu
Y2x1ZGUgPG51bWVyaWM+Ci0jaW5jbHVkZSA8Ym9vc3QvYXNzZXJ0LmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9yYW5kb20vdW5pZm9ybV9yZWFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGlz
Y3JldGVfZGlzdHJpYnV0aW9uLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2Nv
bmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9vcGVyYXRvcnMuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvdmVjdG9yX2lvLmhwcD4KLQotI2lmbmRlZiBC
T09TVF9OT19DWFgxMV9IRFJfSU5JVElBTElaRVJfTElTVAotI2luY2x1ZGUgPGluaXRpYWxpemVy
X2xpc3Q+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL2JlZ2luLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9yYW5nZS9lbmQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNl
IHJhbmRvbSB7Ci0KLS8qKgotICogVGhlIGNsYXNzIEBjIHBpZWNld2lzZV9jb25zdGFudF9kaXN0
cmlidXRpb24gbW9kZWxzIGEgXHJhbmRvbV9kaXN0cmlidXRpb24uCi0gKi8KLXRlbXBsYXRlPGNs
YXNzIFJlYWxUeXBlID0gZG91YmxlLCBjbGFzcyBXZWlnaHRUeXBlID0gZG91YmxlPgotY2xhc3Mg
cGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbiB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBz
dGQ6OnNpemVfdCBpbnB1dF90eXBlOwotICAgIHR5cGVkZWYgUmVhbFR5cGUgcmVzdWx0X3R5cGU7
Ci0KLSAgICBjbGFzcyBwYXJhbV90eXBlIHsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgdHlwZWRl
ZiBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uIGRpc3RyaWJ1dGlvbl90eXBlOwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgQGMgcGFyYW1fdHlwZSBvYmplY3Qs
IHJlcHJlc2VudGluZyBhIGRpc3RyaWJ1dGlvbgotICAgICAgICAgKiB0aGF0IHByb2R1Y2VzIHZh
bHVlcyB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgaW4gdGhlIHJhbmdlIFswLCAxKS4KLSAgICAgICAg
ICovCi0gICAgICAgIHBhcmFtX3R5cGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBfd2VpZ2h0
cy5wdXNoX2JhY2soV2VpZ2h0VHlwZSgxKSk7Ci0gICAgICAgICAgICBfaW50ZXJ2YWxzLnB1c2hf
YmFjayhSZWFsVHlwZSgwKSk7Ci0gICAgICAgICAgICBfaW50ZXJ2YWxzLnB1c2hfYmFjayhSZWFs
VHlwZSgxKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnN0cnVjdHMg
YSBAYyBwYXJhbV90eXBlIG9iamVjdCBmcm9tIHR3byBpdGVyYXRvciByYW5nZXMKLSAgICAgICAg
ICogY29udGFpbmluZyB0aGUgaW50ZXJ2YWwgYm91bmRhcmllcyBhbmQgdGhlIGludGVydmFsIHdl
aWdodHMuCi0gICAgICAgICAqIElmIHRoZXJlIGFyZSBsZXNzIHRoYW4gdHdvIGJvdW5kYXJpZXMs
IHRoZW4gdGhpcyBpcyBlcXVpdmFsZW50IHRvCi0gICAgICAgICAqIHRoZSBkZWZhdWx0IGNvbnN0
cnVjdG9yIGFuZCBjcmVhdGVzIGEgc2luZ2xlIGludGVydmFsLCBbMCwgMSkuCi0gICAgICAgICAq
Ci0gICAgICAgICAqIFRoZSB2YWx1ZXMgb2YgdGhlIGludGVydmFsIGJvdW5kYXJpZXMgbXVzdCBi
ZSBzdHJpY3RseQotICAgICAgICAgKiBpbmNyZWFzaW5nLCBhbmQgdGhlIG51bWJlciBvZiB3ZWln
aHRzIG11c3QgYmUgb25lIGxlc3MgdGhhbgotICAgICAgICAgKiB0aGUgbnVtYmVyIG9mIGludGVy
dmFsIGJvdW5kYXJpZXMuICBJZiB0aGVyZSBhcmUgZXh0cmEKLSAgICAgICAgICogd2VpZ2h0cywg
dGhleSBhcmUgaWdub3JlZC4KLSAgICAgICAgICovCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIElu
dGVydmFsSXRlciwgY2xhc3MgV2VpZ2h0SXRlcj4KLSAgICAgICAgcGFyYW1fdHlwZShJbnRlcnZh
bEl0ZXIgaW50ZXJ2YWxzX2ZpcnN0LCBJbnRlcnZhbEl0ZXIgaW50ZXJ2YWxzX2xhc3QsCi0gICAg
ICAgICAgICAgICAgICAgV2VpZ2h0SXRlciB3ZWlnaHRfZmlyc3QpCi0gICAgICAgICAgOiBfaW50
ZXJ2YWxzKGludGVydmFsc19maXJzdCwgaW50ZXJ2YWxzX2xhc3QpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmKF9pbnRlcnZhbHMuc2l6ZSgpIDwgMikgewotICAgICAgICAgICAgICAgIF9pbnRl
cnZhbHMuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICBfaW50ZXJ2YWxzLnB1c2hfYmFjayhSZWFs
VHlwZSgwKSk7Ci0gICAgICAgICAgICAgICAgX2ludGVydmFscy5wdXNoX2JhY2soUmVhbFR5cGUo
MSkpOwotICAgICAgICAgICAgICAgIF93ZWlnaHRzLnB1c2hfYmFjayhXZWlnaHRUeXBlKDEpKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgX3dlaWdodHMucmVzZXJ2ZShf
aW50ZXJ2YWxzLnNpemUoKSAtIDEpOwotICAgICAgICAgICAgICAgIGZvcihzdGQ6OnNpemVfdCBp
ID0gMDsgaSA8IF9pbnRlcnZhbHMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIF93ZWlnaHRzLnB1c2hfYmFjaygqd2VpZ2h0X2ZpcnN0KyspOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9IRFJf
SU5JVElBTElaRVJfTElTVAotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc3RydWN0cyBhIEBj
IHBhcmFtX3R5cGUgb2JqZWN0IGZyb20gYW4KLSAgICAgICAgICogaW5pdGlhbGl6ZXJfbGlzdCBj
b250YWluaW5nIHRoZSBpbnRlcnZhbCBib3VuZGFyaWVzCi0gICAgICAgICAqIGFuZCBhIHVuYXJ5
IGZ1bmN0aW9uIHNwZWNpZnlpbmcgdGhlIHdlaWdodHMuICBFYWNoCi0gICAgICAgICAqIHdlaWdo
dCBpcyBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGF0IHRoZQotICAgICAgICAg
KiBtaWRwb2ludCBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnZhbC4KLSAgICAgICAgICoKLSAg
ICAgICAgICogSWYgdGhlIGluaXRpYWxpemVyX2xpc3QgY29udGFpbnMgbGVzcyB0aGFuIHR3byBl
bGVtZW50cywKLSAgICAgICAgICogdGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZWZhdWx0IGNv
bnN0cnVjdG9yIGFuZCB0aGUKLSAgICAgICAgICogZGlzdHJpYnV0aW9uIHdpbGwgcHJvZHVjZSB2
YWx1ZXMgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkCi0gICAgICAgICAqIGluIHRoZSByYW5nZSBbMCwg
MSkuCi0gICAgICAgICAqLwotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBGPgotICAg
ICAgICBwYXJhbV90eXBlKGNvbnN0IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiYgaWwsIEYgZikK
LSAgICAgICAgICA6IF9pbnRlcnZhbHMoaWwuYmVnaW4oKSwgaWwuZW5kKCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmKF9pbnRlcnZhbHMuc2l6ZSgpIDwgMikgewotICAgICAgICAgICAgICAg
IF9pbnRlcnZhbHMuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICBfaW50ZXJ2YWxzLnB1c2hfYmFj
ayhSZWFsVHlwZSgwKSk7Ci0gICAgICAgICAgICAgICAgX2ludGVydmFscy5wdXNoX2JhY2soUmVh
bFR5cGUoMSkpOwotICAgICAgICAgICAgICAgIF93ZWlnaHRzLnB1c2hfYmFjayhXZWlnaHRUeXBl
KDEpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgX3dlaWdodHMucmVz
ZXJ2ZShfaW50ZXJ2YWxzLnNpemUoKSAtIDEpOwotICAgICAgICAgICAgICAgIGZvcihzdGQ6OnNp
emVfdCBpID0gMDsgaSA8IF9pbnRlcnZhbHMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIFJlYWxUeXBlIG1pZHBvaW50ID0gKF9pbnRlcnZhbHNbaV0gKyBfaW50ZXJ2YWxz
W2kgKyAxXSkgLyAyOwotICAgICAgICAgICAgICAgICAgICBfd2VpZ2h0cy5wdXNoX2JhY2soZiht
aWRwb2ludCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
I2VuZGlmCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgQGMgcGFyYW1fdHlw
ZSBvYmplY3QgZnJvbSBCb29zdC5SYW5nZQotICAgICAgICAgKiByYW5nZXMgaG9sZGluZyB0aGUg
aW50ZXJ2YWwgYm91bmRhcmllcyBhbmQgdGhlIHdlaWdodHMuICBJZgotICAgICAgICAgKiB0aGVy
ZSBhcmUgbGVzcyB0aGFuIHR3byBpbnRlcnZhbCBib3VuZGFyaWVzLCB0aGlzIGlzIGVxdWl2YWxl
bnQKLSAgICAgICAgICogdG8gdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgYW5kIHRoZSBkaXN0cmli
dXRpb24gd2lsbCBwcm9kdWNlCi0gICAgICAgICAqIHZhbHVlcyB1bmlmb3JtbHkgZGlzdHJpYnV0
ZWQgaW4gdGhlIHJhbmdlIFswLCAxKS4gIFRoZQotICAgICAgICAgKiBudW1iZXIgb2Ygd2VpZ2h0
cyBtdXN0IGJlIG9uZSBsZXNzIHRoYW4gdGhlIG51bWJlciBvZgotICAgICAgICAgKiBpbnRlcnZh
bCBib3VuZGFyaWVzLgotICAgICAgICAgKi8KLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgSW50ZXJ2
YWxSYW5nZSwgY2xhc3MgV2VpZ2h0UmFuZ2U+Ci0gICAgICAgIHBhcmFtX3R5cGUoY29uc3QgSW50
ZXJ2YWxSYW5nZSYgaW50ZXJ2YWxzX2FyZywKLSAgICAgICAgICAgICAgICAgICBjb25zdCBXZWln
aHRSYW5nZSYgd2VpZ2h0c19hcmcpCi0gICAgICAgICAgOiBfaW50ZXJ2YWxzKGJvb3N0OjpiZWdp
bihpbnRlcnZhbHNfYXJnKSwgYm9vc3Q6OmVuZChpbnRlcnZhbHNfYXJnKSksCi0gICAgICAgICAg
ICBfd2VpZ2h0cyhib29zdDo6YmVnaW4od2VpZ2h0c19hcmcpLCBib29zdDo6ZW5kKHdlaWdodHNf
YXJnKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYoX2ludGVydmFscy5zaXplKCkgPCAyKSB7
Ci0gICAgICAgICAgICAgICAgX2ludGVydmFscy5jbGVhcigpOwotICAgICAgICAgICAgICAgIF9p
bnRlcnZhbHMucHVzaF9iYWNrKFJlYWxUeXBlKDApKTsKLSAgICAgICAgICAgICAgICBfaW50ZXJ2
YWxzLnB1c2hfYmFjayhSZWFsVHlwZSgxKSk7Ci0gICAgICAgICAgICAgICAgX3dlaWdodHMucHVz
aF9iYWNrKFdlaWdodFR5cGUoMSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAqIENvbnN0cnVjdHMgdGhlIHBhcmFtZXRlcnMgZm9yIGEgZGlzdHJp
YnV0aW9uIHRoYXQgYXBwcm94aW1hdGVzIGEKLSAgICAgICAgICogZnVuY3Rpb24uICBUaGUgcmFu
Z2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbiBpcyBbeG1pbiwgeG1heCkuICBUaGlzCi0gICAgICAgICAq
IHJhbmdlIGlzIGRpdmlkZWQgaW50byBudyBlcXVhbGx5IHNpemVkIGludGVydmFscyBhbmQgdGhl
IHdlaWdodHMKLSAgICAgICAgICogYXJlIGZvdW5kIGJ5IGNhbGxpbmcgdGhlIHVuYXJ5IGZ1bmN0
aW9uIGYgb24gdGhlIG1pZHBvaW50cyBvZiB0aGUKLSAgICAgICAgICogaW50ZXJ2YWxzLgotICAg
ICAgICAgKi8KLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRj4KLSAgICAgICAgcGFyYW1fdHlwZShz
dGQ6OnNpemVfdCBudywgUmVhbFR5cGUgeG1pbiwgUmVhbFR5cGUgeG1heCwgRiBmKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBzdGQ6OnNpemVfdCBuID0gKG53ID09IDApID8gMSA6IG53OwotICAg
ICAgICAgICAgZG91YmxlIGRlbHRhID0gKHhtYXggLSB4bWluKSAvIG47Ci0gICAgICAgICAgICBC
T09TVF9BU1NFUlQoZGVsdGEgPiAwKTsKLSAgICAgICAgICAgIGZvcihzdGQ6OnNpemVfdCBrID0g
MDsgayA8IG47ICsraykgewotICAgICAgICAgICAgICAgIF93ZWlnaHRzLnB1c2hfYmFjayhmKHht
aW4gKyBrKmRlbHRhICsgZGVsdGEvMikpOwotICAgICAgICAgICAgICAgIF9pbnRlcnZhbHMucHVz
aF9iYWNrKHhtaW4gKyBrKmRlbHRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9pbnRl
cnZhbHMucHVzaF9iYWNrKHhtYXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqICBSZXR1cm5z
IGEgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGludGVydmFsIGJvdW5kYXJpZXMuICovCi0gICAgICAg
IHN0ZDo6dmVjdG9yPFJlYWxUeXBlPiBpbnRlcnZhbHMoKSBjb25zdCB7IHJldHVybiBfaW50ZXJ2
YWxzOyB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgYSB2ZWN0b3IgY29udGFp
bmluZyB0aGUgcHJvYmFiaWxpdHkgZGVuc2l0aWVzCi0gICAgICAgICAqIG92ZXIgYWxsIHRoZSBp
bnRlcnZhbHMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIHN0ZDo6
dmVjdG9yPFJlYWxUeXBlPiBkZW5zaXRpZXMoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAg
ICBSZWFsVHlwZSBzdW0gPSBzdGQ6OmFjY3VtdWxhdGUoX3dlaWdodHMuYmVnaW4oKSwgX3dlaWdo
dHMuZW5kKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxSZWFsVHlwZT4oMCkpOwotICAgICAgICAgICAgc3RkOjp2ZWN0b3I8UmVhbFR5
cGU+IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlKF93ZWlnaHRzLnNpemUoKSk7
Ci0gICAgICAgICAgICBmb3Ioc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBfd2VpZ2h0cy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgICAgIFJlYWxUeXBlIHdpZHRoID0gX2ludGVydmFsc1tpICsg
MV0gLSBfaW50ZXJ2YWxzW2ldOwotICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soX3dl
aWdodHNbaV0gLyAoc3VtICogd2lkdGgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiogV3JpdGVzIHRoZSBwYXJhbWV0
ZXJzIHRvIGEgQGMgc3RkOjpvc3RyZWFtLiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlM
X09TVFJFQU1fT1BFUkFUT1Iob3MsIHBhcmFtX3R5cGUsIHBhcm0pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGRldGFpbDo6cHJpbnRfdmVjdG9yKG9zLCBwYXJtLl9pbnRlcnZhbHMpOwotICAgICAg
ICAgICAgZGV0YWlsOjpwcmludF92ZWN0b3Iob3MsIHBhcm0uX3dlaWdodHMpOwotICAgICAgICAg
ICAgcmV0dXJuIG9zOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmVhZHMgdGhl
IHBhcmFtZXRlcnMgZnJvbSBhIEBjIHN0ZDo6aXN0cmVhbS4gKi8KLSAgICAgICAgQk9PU1RfUkFO
RE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlzLCBwYXJhbV90eXBlLCBwYXJtKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBzdGQ6OnZlY3RvcjxSZWFsVHlwZT4gbmV3X2ludGVydmFsczsKLSAg
ICAgICAgICAgIHN0ZDo6dmVjdG9yPFdlaWdodFR5cGU+IG5ld193ZWlnaHRzOwotICAgICAgICAg
ICAgZGV0YWlsOjpyZWFkX3ZlY3RvcihpcywgbmV3X2ludGVydmFscyk7Ci0gICAgICAgICAgICBk
ZXRhaWw6OnJlYWRfdmVjdG9yKGlzLCBuZXdfd2VpZ2h0cyk7Ci0gICAgICAgICAgICBpZihpcykg
ewotICAgICAgICAgICAgICAgIHBhcm0uX2ludGVydmFscy5zd2FwKG5ld19pbnRlcnZhbHMpOwot
ICAgICAgICAgICAgICAgIHBhcm0uX3dlaWdodHMuc3dhcChuZXdfd2VpZ2h0cyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiog
UmV0dXJucyB0cnVlIGlmIHRoZSB0d28gc2V0cyBvZiBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZS4g
Ki8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElUWV9PUEVSQVRPUihwYXJhbV90
eXBlLCBsaHMsIHJocykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGxocy5faW50ZXJ2
YWxzID09IHJocy5faW50ZXJ2YWxzCi0gICAgICAgICAgICAgICAgJiYgbGhzLl93ZWlnaHRzID09
IHJocy5fd2VpZ2h0czsKLSAgICAgICAgfQotICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRo
ZSB0d28gc2V0cyBvZiBwYXJhbWV0ZXJzIGFyZSBkaWZmZXJlbnQuICovCi0gICAgICAgIEJPT1NU
X1JBTkRPTV9ERVRBSUxfSU5FUVVBTElUWV9PUEVSQVRPUihwYXJhbV90eXBlKQotCi0gICAgcHJp
dmF0ZToKLQotICAgICAgICBmcmllbmQgY2xhc3MgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1
dGlvbjsKLQotICAgICAgICBzdGQ6OnZlY3RvcjxSZWFsVHlwZT4gX2ludGVydmFsczsKLSAgICAg
ICAgc3RkOjp2ZWN0b3I8V2VpZ2h0VHlwZT4gX3dlaWdodHM7Ci0gICAgfTsKLQotICAgIC8qKgot
ICAgICAqIENyZWF0ZXMgYSBuZXcgQGMgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbiB3
aXRoCi0gICAgICogYSBzaW5nbGUgaW50ZXJ2YWwsIFswLCAxKS4KLSAgICAgKi8KLSAgICBwaWVj
ZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uKCkKLSAgICB7Ci0gICAgICAgIF9pbnRlcnZhbHMu
cHVzaF9iYWNrKFJlYWxUeXBlKDApKTsKLSAgICAgICAgX2ludGVydmFscy5wdXNoX2JhY2soUmVh
bFR5cGUoMSkpOwotICAgIH0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgcGllY2V3aXNl
X2NvbnN0YW50X2Rpc3RyaWJ1dGlvbiBmcm9tIHR3byBpdGVyYXRvciByYW5nZXMKLSAgICAgKiBj
b250YWluaW5nIHRoZSBpbnRlcnZhbCBib3VuZGFyaWVzIGFuZCB0aGUgaW50ZXJ2YWwgd2VpZ2h0
cy4KLSAgICAgKiBJZiB0aGVyZSBhcmUgbGVzcyB0aGFuIHR3byBib3VuZGFyaWVzLCB0aGVuIHRo
aXMgaXMgZXF1aXZhbGVudCB0bwotICAgICAqIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGFuZCBj
cmVhdGVzIGEgc2luZ2xlIGludGVydmFsLCBbMCwgMSkuCi0gICAgICoKLSAgICAgKiBUaGUgdmFs
dWVzIG9mIHRoZSBpbnRlcnZhbCBib3VuZGFyaWVzIG11c3QgYmUgc3RyaWN0bHkKLSAgICAgKiBp
bmNyZWFzaW5nLCBhbmQgdGhlIG51bWJlciBvZiB3ZWlnaHRzIG11c3QgYmUgb25lIGxlc3MgdGhh
bgotICAgICAqIHRoZSBudW1iZXIgb2YgaW50ZXJ2YWwgYm91bmRhcmllcy4gIElmIHRoZXJlIGFy
ZSBleHRyYQotICAgICAqIHdlaWdodHMsIHRoZXkgYXJlIGlnbm9yZWQuCi0gICAgICoKLSAgICAg
KiBGb3IgZXhhbXBsZSwKLSAgICAgKgotICAgICAqIEBjb2RlCi0gICAgICogZG91YmxlIGludGVy
dmFsc1tdID0geyAwLjAsIDEuMCwgNC4wIH07Ci0gICAgICogZG91YmxlIHdlaWdodHNbXSA9IHsg
MS4wLCAxLjAgfTsKLSAgICAgKiBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPD4gZGlz
dCgKLSAgICAgKiAgICAgJmludGVydmFsc1swXSwgJmludGVydmFsc1swXSArIDMsICZ3ZWlnaHRz
WzBdKTsKLSAgICAgKiBAZW5kY29kZQotICAgICAqCi0gICAgICogVGhlIGRpc3RyaWJ1dGlvbiBo
YXMgYSA1MCUgY2hhbmNlIG9mIHByb2R1Y2luZyBhCi0gICAgICogdmFsdWUgYmV0d2VlbiAwIGFu
ZCAxIGFuZCBhIDUwJSBjaGFuY2Ugb2YgcHJvZHVjaW5nCi0gICAgICogYSB2YWx1ZSBiZXR3ZWVu
IDEgYW5kIDQuCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgSW50ZXJ2YWxJdGVyLCBjbGFz
cyBXZWlnaHRJdGVyPgotICAgIHBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb24oSW50ZXJ2
YWxJdGVyIGZpcnN0X2ludGVydmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW50ZXJ2YWxJdGVyIGxhc3RfaW50ZXJ2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWlnaHRJdGVyIGZpcnN0X3dlaWdodCkKLSAgICAgIDogX2ludGVydmFscyhm
aXJzdF9pbnRlcnZhbCwgbGFzdF9pbnRlcnZhbCkKLSAgICB7Ci0gICAgICAgIGlmKF9pbnRlcnZh
bHMuc2l6ZSgpIDwgMikgewotICAgICAgICAgICAgX2ludGVydmFscy5jbGVhcigpOwotICAgICAg
ICAgICAgX2ludGVydmFscy5wdXNoX2JhY2soUmVhbFR5cGUoMCkpOwotICAgICAgICAgICAgX2lu
dGVydmFscy5wdXNoX2JhY2soUmVhbFR5cGUoMSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgc3RkOjp2ZWN0b3I8V2VpZ2h0VHlwZT4gYWN0dWFsX3dlaWdodHM7Ci0gICAgICAgICAg
ICBhY3R1YWxfd2VpZ2h0cy5yZXNlcnZlKF9pbnRlcnZhbHMuc2l6ZSgpIC0gMSk7Ci0gICAgICAg
ICAgICBmb3Ioc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBfaW50ZXJ2YWxzLnNpemUoKSAtIDE7ICsr
aSkgewotICAgICAgICAgICAgICAgIGFjdHVhbF93ZWlnaHRzLnB1c2hfYmFjaygqZmlyc3Rfd2Vp
Z2h0KyspOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdHlwZWRlZiBkaXNjcmV0ZV9kaXN0
cmlidXRpb248c3RkOjpzaXplX3QsIFdlaWdodFR5cGU+IGJpbnNfdHlwZTsKLSAgICAgICAgICAg
IHR5cGVuYW1lIGJpbnNfdHlwZTo6cGFyYW1fdHlwZSBiaW5zX3BhcmFtKGFjdHVhbF93ZWlnaHRz
KTsKLSAgICAgICAgICAgIF9iaW5zLnBhcmFtKGJpbnNfcGFyYW0pOwotICAgICAgICB9Ci0gICAg
fQotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9IRFJfSU5JVElBTElaRVJfTElTVAotICAgIC8qKgot
ICAgICAqIENvbnN0cnVjdHMgYSBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uIGZyb20g
YW4KLSAgICAgKiBpbml0aWFsaXplcl9saXN0IGNvbnRhaW5pbmcgdGhlIGludGVydmFsIGJvdW5k
YXJpZXMKLSAgICAgKiBhbmQgYSB1bmFyeSBmdW5jdGlvbiBzcGVjaWZ5aW5nIHRoZSB3ZWlnaHRz
LiAgRWFjaAotICAgICAqIHdlaWdodCBpcyBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0
aW9uIGF0IHRoZQotICAgICAqIG1pZHBvaW50IG9mIHRoZSBjb3JyZXNwb25kaW5nIGludGVydmFs
LgotICAgICAqCi0gICAgICogSWYgdGhlIGluaXRpYWxpemVyX2xpc3QgY29udGFpbnMgbGVzcyB0
aGFuIHR3byBlbGVtZW50cywKLSAgICAgKiB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGRlZmF1
bHQgY29uc3RydWN0b3IgYW5kIHRoZQotICAgICAqIGRpc3RyaWJ1dGlvbiB3aWxsIHByb2R1Y2Ug
dmFsdWVzIHVuaWZvcm1seSBkaXN0cmlidXRlZAotICAgICAqIGluIHRoZSByYW5nZSBbMCwgMSku
Ci0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgRj4KLSAgICBwaWVjZXdpc2Vf
Y29uc3RhbnRfZGlzdHJpYnV0aW9uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiBpbCwgRiBmKQot
ICAgICAgOiBfaW50ZXJ2YWxzKGlsLmJlZ2luKCksIGlsLmVuZCgpKQotICAgIHsKLSAgICAgICAg
aWYoX2ludGVydmFscy5zaXplKCkgPCAyKSB7Ci0gICAgICAgICAgICBfaW50ZXJ2YWxzLmNsZWFy
KCk7Ci0gICAgICAgICAgICBfaW50ZXJ2YWxzLnB1c2hfYmFjayhSZWFsVHlwZSgwKSk7Ci0gICAg
ICAgICAgICBfaW50ZXJ2YWxzLnB1c2hfYmFjayhSZWFsVHlwZSgxKSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBzdGQ6OnZlY3RvcjxXZWlnaHRUeXBlPiBhY3R1YWxfd2VpZ2h0czsK
LSAgICAgICAgICAgIGFjdHVhbF93ZWlnaHRzLnJlc2VydmUoX2ludGVydmFscy5zaXplKCkgLSAx
KTsKLSAgICAgICAgICAgIGZvcihzdGQ6OnNpemVfdCBpID0gMDsgaSA8IF9pbnRlcnZhbHMuc2l6
ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgUmVhbFR5cGUgbWlkcG9pbnQgPSAoX2lu
dGVydmFsc1tpXSArIF9pbnRlcnZhbHNbaSArIDFdKSAvIDI7Ci0gICAgICAgICAgICAgICAgYWN0
dWFsX3dlaWdodHMucHVzaF9iYWNrKGYobWlkcG9pbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHR5cGVkZWYgZGlzY3JldGVfZGlzdHJpYnV0aW9uPHN0ZDo6c2l6ZV90LCBXZWlnaHRU
eXBlPiBiaW5zX3R5cGU7Ci0gICAgICAgICAgICB0eXBlbmFtZSBiaW5zX3R5cGU6OnBhcmFtX3R5
cGUgYmluc19wYXJhbShhY3R1YWxfd2VpZ2h0cyk7Ci0gICAgICAgICAgICBfYmlucy5wYXJhbShi
aW5zX3BhcmFtKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIC8qKgotICAgICAqIENv
bnN0cnVjdHMgYSBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uIGZyb20gQm9vc3QuUmFu
Z2UKLSAgICAgKiByYW5nZXMgaG9sZGluZyB0aGUgaW50ZXJ2YWwgYm91bmRhcmllcyBhbmQgdGhl
IHdlaWdodHMuICBJZgotICAgICAqIHRoZXJlIGFyZSBsZXNzIHRoYW4gdHdvIGludGVydmFsIGJv
dW5kYXJpZXMsIHRoaXMgaXMgZXF1aXZhbGVudAotICAgICAqIHRvIHRoZSBkZWZhdWx0IGNvbnN0
cnVjdG9yIGFuZCB0aGUgZGlzdHJpYnV0aW9uIHdpbGwgcHJvZHVjZQotICAgICAqIHZhbHVlcyB1
bmlmb3JtbHkgZGlzdHJpYnV0ZWQgaW4gdGhlIHJhbmdlIFswLCAxKS4gIFRoZQotICAgICAqIG51
bWJlciBvZiB3ZWlnaHRzIG11c3QgYmUgb25lIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mCi0gICAg
ICogaW50ZXJ2YWwgYm91bmRhcmllcy4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBJbnRl
cnZhbHNSYW5nZSwgY2xhc3MgV2VpZ2h0c1JhbmdlPgotICAgIHBpZWNld2lzZV9jb25zdGFudF9k
aXN0cmlidXRpb24oY29uc3QgSW50ZXJ2YWxzUmFuZ2UmIGludGVydmFsc19hcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWlnaHRzUmFuZ2UmIHdlaWdodHNf
YXJnKQotICAgICAgOiBfYmlucyh3ZWlnaHRzX2FyZyksCi0gICAgICAgIF9pbnRlcnZhbHMoYm9v
c3Q6OmJlZ2luKGludGVydmFsc19hcmcpLCBib29zdDo6ZW5kKGludGVydmFsc19hcmcpKQotICAg
IHsKLSAgICAgICAgaWYoX2ludGVydmFscy5zaXplKCkgPCAyKSB7Ci0gICAgICAgICAgICBfaW50
ZXJ2YWxzLmNsZWFyKCk7Ci0gICAgICAgICAgICBfaW50ZXJ2YWxzLnB1c2hfYmFjayhSZWFsVHlw
ZSgwKSk7Ci0gICAgICAgICAgICBfaW50ZXJ2YWxzLnB1c2hfYmFjayhSZWFsVHlwZSgxKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIHBpZWNld2lzZV9j
b25zdGFudF9kaXN0cmlidXRpb24gdGhhdCBhcHByb3hpbWF0ZXMgYQotICAgICAqIGZ1bmN0aW9u
LiAgVGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24gaXMgW3htaW4sIHhtYXgpLiAgVGhpcwot
ICAgICAqIHJhbmdlIGlzIGRpdmlkZWQgaW50byBudyBlcXVhbGx5IHNpemVkIGludGVydmFscyBh
bmQgdGhlIHdlaWdodHMKLSAgICAgKiBhcmUgZm91bmQgYnkgY2FsbGluZyB0aGUgdW5hcnkgZnVu
Y3Rpb24gZiBvbiB0aGUgbWlkcG9pbnRzIG9mIHRoZQotICAgICAqIGludGVydmFscy4KLSAgICAg
Ki8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBGPgotICAgIHBpZWNld2lzZV9jb25zdGFudF9kaXN0cmli
dXRpb24oc3RkOjpzaXplX3QgbncsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZWFsVHlwZSB4bWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVh
bFR5cGUgeG1heCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYgZikKLSAg
ICAgIDogX2JpbnMobncsIHhtaW4sIHhtYXgsIGYpCi0gICAgewotICAgICAgICBpZihudyA9PSAw
KSB7IG53ID0gMTsgfQotICAgICAgICBSZWFsVHlwZSBkZWx0YSA9ICh4bWF4IC0geG1pbikgLyBu
dzsKLSAgICAgICAgX2ludGVydmFscy5yZXNlcnZlKG53ICsgMSk7Ci0gICAgICAgIGZvcihzdGQ6
OnNpemVfdCBpID0gMDsgaSA8IG53OyArK2kpIHsKLSAgICAgICAgICAgIF9pbnRlcnZhbHMucHVz
aF9iYWNrKHhtaW4gKyBpICogZGVsdGEpOwotICAgICAgICB9Ci0gICAgICAgIF9pbnRlcnZhbHMu
cHVzaF9iYWNrKHhtYXgpOwotICAgIH0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgcGll
Y2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbiBmcm9tIGl0cyBwYXJhbWV0ZXJzLgotICAgICAq
LwotICAgIGV4cGxpY2l0IHBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb24oY29uc3QgcGFy
YW1fdHlwZSYgcGFybSkKLSAgICAgIDogX2JpbnMocGFybS5fd2VpZ2h0cyksCi0gICAgICAgIF9p
bnRlcnZhbHMocGFybS5faW50ZXJ2YWxzKQotICAgIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAg
KiBSZXR1cm5zIGEgdmFsdWUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJz
IG9mIHRoZQotICAgICAqIHBpZWNld2lzdF9jb25zdGFudF9kaXN0cmlidXRpb24uCi0gICAgICov
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVVJORz4KLSAgICBSZWFsVHlwZSBvcGVyYXRvcigpKFVSTkcm
IHVybmcpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGQ6OnNpemVfdCBpID0gX2JpbnModXJuZyk7
Ci0gICAgICAgIHJldHVybiB1bmlmb3JtX3JlYWw8UmVhbFR5cGU+KF9pbnRlcnZhbHNbaV0sIF9p
bnRlcnZhbHNbaSsxXSkodXJuZyk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFJldHVy
bnMgYSB2YWx1ZSBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMKLSAgICAg
KiBzcGVjaWZpZWQgYnkgcGFyYW0uCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgVVJORz4K
LSAgICBSZWFsVHlwZSBvcGVyYXRvcigpKFVSTkcmIHVybmcsIGNvbnN0IHBhcmFtX3R5cGUmIHBh
cm0pIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gcGllY2V3aXNlX2NvbnN0YW50X2Rpc3Ry
aWJ1dGlvbihwYXJtKSh1cm5nKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhlIHNt
YWxsZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4gKi8KLSAgICBy
ZXN1bHRfdHlwZSBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgY29uc3QK
LSAgICB7IHJldHVybiBfaW50ZXJ2YWxzLmZyb250KCk7IH0KLSAgICAvKiogUmV0dXJucyB0aGUg
bGFyZ2VzdCB2YWx1ZSB0aGF0IHRoZSBkaXN0cmlidXRpb24gY2FuIHByb2R1Y2UuICovCi0gICAg
cmVzdWx0X3R5cGUgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIGNvbnN0
Ci0gICAgeyByZXR1cm4gX2ludGVydmFscy5iYWNrKCk7IH0KLQotICAgIC8qKgotICAgICAqIFJl
dHVybnMgYSB2ZWN0b3IgY29udGFpbmluZyB0aGUgcHJvYmFiaWxpdHkgZGVuc2l0eQotICAgICAq
IG92ZXIgZWFjaCBpbnRlcnZhbC4KLSAgICAgKi8KLSAgICBzdGQ6OnZlY3RvcjxSZWFsVHlwZT4g
ZGVuc2l0aWVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPFJlYWxUeXBlPiBy
ZXN1bHQoX2JpbnMucHJvYmFiaWxpdGllcygpKTsKLSAgICAgICAgZm9yKHN0ZDo6c2l6ZV90IGkg
PSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICByZXN1bHRbaV0gLz0g
KF9pbnRlcnZhbHNbaSsxXSAtIF9pbnRlcnZhbHNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybihyZXN1bHQpOwotICAgIH0KLSAgICAvKiogIFJldHVybnMgYSB2ZWN0b3IgY29udGFpbmlu
ZyB0aGUgaW50ZXJ2YWwgYm91bmRhcmllcy4gKi8KLSAgICBzdGQ6OnZlY3RvcjxSZWFsVHlwZT4g
aW50ZXJ2YWxzKCkgY29uc3QgeyByZXR1cm4gX2ludGVydmFsczsgfQotCi0gICAgLyoqIFJldHVy
bnMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICBwYXJhbV90eXBl
IHBhcmFtKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBwYXJhbV90eXBlKF9pbnRlcnZh
bHMsIF9iaW5zLnByb2JhYmlsaXRpZXMoKSk7Ci0gICAgfQotICAgIC8qKiBTZXRzIHRoZSBwYXJh
bWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgdm9pZCBwYXJhbShjb25zdCBwYXJh
bV90eXBlJiBwYXJtKQotICAgIHsKLSAgICAgICAgc3RkOjp2ZWN0b3I8UmVhbFR5cGU+IG5ld19p
bnRlcnZhbHMocGFybS5faW50ZXJ2YWxzKTsKLSAgICAgICAgdHlwZWRlZiBkaXNjcmV0ZV9kaXN0
cmlidXRpb248c3RkOjpzaXplX3QsIFdlaWdodFR5cGU+IGJpbnNfdHlwZTsKLSAgICAgICAgdHlw
ZW5hbWUgYmluc190eXBlOjpwYXJhbV90eXBlIGJpbnNfcGFyYW0ocGFybS5fd2VpZ2h0cyk7Ci0g
ICAgICAgIF9iaW5zLnBhcmFtKGJpbnNfcGFyYW0pOwotICAgICAgICBfaW50ZXJ2YWxzLnN3YXAo
bmV3X2ludGVydmFscyk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEVmZmVjdHM6IFN1
YnNlcXVlbnQgdXNlcyBvZiB0aGUgZGlzdHJpYnV0aW9uIGRvIG5vdCBkZXBlbmQKLSAgICAgKiBv
biB2YWx1ZXMgcHJvZHVjZWQgYnkgYW55IGVuZ2luZSBwcmlvciB0byBpbnZva2luZyByZXNldC4K
LSAgICAgKi8KLSAgICB2b2lkIHJlc2V0KCkgeyBfYmlucy5yZXNldCgpOyB9Ci0KLSAgICAvKiog
V3JpdGVzIGEgZGlzdHJpYnV0aW9uIHRvIGEgQGMgc3RkOjpvc3RyZWFtLiAqLwotICAgIEJPT1NU
X1JBTkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUigKLSAgICAgICAgb3MsIHBpZWNld2lzZV9j
b25zdGFudF9kaXN0cmlidXRpb24sIHBjZCkKLSAgICB7Ci0gICAgICAgIG9zIDw8IHBjZC5wYXJh
bSgpOwotICAgICAgICByZXR1cm4gb3M7Ci0gICAgfQotCi0gICAgLyoqIFJlYWRzIGEgZGlzdHJp
YnV0aW9uIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0gKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlM
X0lTVFJFQU1fT1BFUkFUT1IoCi0gICAgICAgIGlzLCBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJp
YnV0aW9uLCBwY2QpCi0gICAgewotICAgICAgICBwYXJhbV90eXBlIHBhcm07Ci0gICAgICAgIGlm
KGlzID4+IHBhcm0pIHsKLSAgICAgICAgICAgIHBjZC5wYXJhbShwYXJtKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gaXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVl
IGlmIHRoZSB0d28gZGlzdHJpYnV0aW9ucyB3aWxsIHJldHVybiB0aGUKLSAgICAgKiBzYW1lIHNl
cXVlbmNlIG9mIHZhbHVlcywgd2hlbiBwYXNzZWQgZXF1YWwgZ2VuZXJhdG9ycy4KLSAgICAgKi8K
LSAgICBCT09TVF9SQU5ET01fREVUQUlMX0VRVUFMSVRZX09QRVJBVE9SKAotICAgICAgICBwaWVj
ZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uLCBsaHMsICByaHMpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbGhzLl9iaW5zID09IHJocy5fYmlucyAmJiBsaHMuX2ludGVydmFscyA9PSByaHMuX2lu
dGVydmFsczsKLSAgICB9Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28g
ZGlzdHJpYnV0aW9ucyBtYXkgcmV0dXJuIGRpZmZlcmVudAotICAgICAqIHNlcXVlbmNlcyBvZiB2
YWx1ZXMsIHdoZW4gcGFzc2VkIGVxdWFsIGdlbmVyYXRvcnMuCi0gICAgICovCi0gICAgQk9PU1Rf
UkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKHBpZWNld2lzZV9jb25zdGFudF9kaXN0
cmlidXRpb24pCi0KLXByaXZhdGU6Ci0gICAgZGlzY3JldGVfZGlzdHJpYnV0aW9uPHN0ZDo6c2l6
ZV90LCBXZWlnaHRUeXBlPiBfYmluczsKLSAgICBzdGQ6OnZlY3RvcjxSZWFsVHlwZT4gX2ludGVy
dmFsczsKLX07Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vcGllY2V3aXNlX2xpbmVhcl9kaXN0cmli
dXRpb24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFu
ZG9tL3BpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uLmhwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTQxYzU3ZmI4MjY0ZmE0MGVkM2M5NjljZTA2MTcxNWViZGU0NGQ5Yy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vcGllY2V3aXNlX2xpbmVhcl9kaXN0
cmlidXRpb24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTMxICswLDAgQEAKLS8qIGJvb3N0IHJh
bmRvbS9waWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbi5ocHAgaGVhZGVyIGZpbGUKLSAqCi0g
KiBDb3B5cmlnaHQgU3RldmVuIFdhdGFuYWJlIDIwMTEKLSAqIERpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotICogYWNjb21wYW55
aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAqIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqCi0gKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9y
IG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0gKgotICogJElk
JAotICovCi0KLSNpZm5kZWYgQk9PU1RfUkFORE9NX1BJRUNFV0lTRV9MSU5FQVJfRElTVFJJQlVU
SU9OX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9SQU5ET01fUElFQ0VXSVNFX0xJTkVBUl9E
SVNUUklCVVRJT05fSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8
YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNtYXRoPgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVk
ZSA8Ym9vc3QvYXNzZXJ0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vdW5pZm9ybV9yZWFs
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGlzY3JldGVfZGlzdHJpYnV0aW9uLmhwcD4K
LSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvcmFuZG9tL2RldGFpbC9vcGVyYXRvcnMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9k
ZXRhaWwvdmVjdG9yX2lvLmhwcD4KLQotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9IRFJfSU5JVElB
TElaRVJfTElTVAotI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+Ci0jZW5kaWYKLQotI2luY2x1
ZGUgPGJvb3N0L3JhbmdlL2JlZ2luLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5nZS9lbmQuaHBw
PgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci0KLS8qKgotICogVGhl
IGNsYXNzIEBjIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uIG1vZGVscyBhIFxyYW5kb21f
ZGlzdHJpYnV0aW9uLgotICovCi10ZW1wbGF0ZTxjbGFzcyBSZWFsVHlwZSA9IGRvdWJsZT4KLWNs
YXNzIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVm
IHN0ZDo6c2l6ZV90IGlucHV0X3R5cGU7Ci0gICAgdHlwZWRlZiBSZWFsVHlwZSByZXN1bHRfdHlw
ZTsKLQotICAgIGNsYXNzIHBhcmFtX3R5cGUgewotICAgIHB1YmxpYzoKLQotICAgICAgICB0eXBl
ZGVmIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uIGRpc3RyaWJ1dGlvbl90eXBlOwotCi0g
ICAgICAgIC8qKgotICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgQGMgcGFyYW1fdHlwZSBvYmplY3Qs
IHJlcHJlc2VudGluZyBhIGRpc3RyaWJ1dGlvbgotICAgICAgICAgKiB0aGF0IHByb2R1Y2VzIHZh
bHVlcyB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgaW4gdGhlIHJhbmdlIFswLCAxKS4KLSAgICAgICAg
ICovCi0gICAgICAgIHBhcmFtX3R5cGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBfd2VpZ2h0
cy5wdXNoX2JhY2soUmVhbFR5cGUoMSkpOwotICAgICAgICAgICAgX3dlaWdodHMucHVzaF9iYWNr
KFJlYWxUeXBlKDEpKTsKLSAgICAgICAgICAgIF9pbnRlcnZhbHMucHVzaF9iYWNrKFJlYWxUeXBl
KDApKTsKLSAgICAgICAgICAgIF9pbnRlcnZhbHMucHVzaF9iYWNrKFJlYWxUeXBlKDEpKTsKLSAg
ICAgICAgfQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc3RydWN0cyBhIEBjIHBhcmFtX3R5
cGUgb2JqZWN0IGZyb20gdHdvIGl0ZXJhdG9yIHJhbmdlcwotICAgICAgICAgKiBjb250YWluaW5n
IHRoZSBpbnRlcnZhbCBib3VuZGFyaWVzIGFuZCB3ZWlnaHRzIGF0IHRoZSBib3VuZGFyaWVzLgot
ICAgICAgICAgKiBJZiB0aGVyZSBhcmUgZmV3ZXIgdGhhbiB0d28gYm91bmRhcmllcywgdGhlbiB0
aGlzIGlzIGVxdWl2YWxlbnQgdG8KLSAgICAgICAgICogdGhlIGRlZmF1bHQgY29uc3RydWN0b3Ig
YW5kIHRoZSBkaXN0cmlidXRpb24gd2lsbCBwcm9kdWNlIHZhbHVlcwotICAgICAgICAgKiB1bmlm
b3JtbHkgZGlzdHJpYnV0ZWQgaW4gdGhlIHJhbmdlIFswLCAxKS4KLSAgICAgICAgICoKLSAgICAg
ICAgICogVGhlIHZhbHVlcyBvZiB0aGUgaW50ZXJ2YWwgYm91bmRhcmllcyBtdXN0IGJlIHN0cmlj
dGx5Ci0gICAgICAgICAqIGluY3JlYXNpbmcsIGFuZCB0aGUgbnVtYmVyIG9mIHdlaWdodHMgbXVz
dCBiZSB0aGUgc2FtZSBhcwotICAgICAgICAgKiB0aGUgbnVtYmVyIG9mIGludGVydmFsIGJvdW5k
YXJpZXMuICBJZiB0aGVyZSBhcmUgZXh0cmEKLSAgICAgICAgICogd2VpZ2h0cywgdGhleSBhcmUg
aWdub3JlZC4KLSAgICAgICAgICovCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIEludGVydmFsSXRl
ciwgY2xhc3MgV2VpZ2h0SXRlcj4KLSAgICAgICAgcGFyYW1fdHlwZShJbnRlcnZhbEl0ZXIgaW50
ZXJ2YWxzX2ZpcnN0LCBJbnRlcnZhbEl0ZXIgaW50ZXJ2YWxzX2xhc3QsCi0gICAgICAgICAgICAg
ICAgICAgV2VpZ2h0SXRlciB3ZWlnaHRfZmlyc3QpCi0gICAgICAgICAgOiBfaW50ZXJ2YWxzKGlu
dGVydmFsc19maXJzdCwgaW50ZXJ2YWxzX2xhc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
KF9pbnRlcnZhbHMuc2l6ZSgpIDwgMikgewotICAgICAgICAgICAgICAgIF9pbnRlcnZhbHMuY2xl
YXIoKTsKLSAgICAgICAgICAgICAgICBfd2VpZ2h0cy5wdXNoX2JhY2soUmVhbFR5cGUoMSkpOwot
ICAgICAgICAgICAgICAgIF93ZWlnaHRzLnB1c2hfYmFjayhSZWFsVHlwZSgxKSk7Ci0gICAgICAg
ICAgICAgICAgX2ludGVydmFscy5wdXNoX2JhY2soUmVhbFR5cGUoMCkpOwotICAgICAgICAgICAg
ICAgIF9pbnRlcnZhbHMucHVzaF9iYWNrKFJlYWxUeXBlKDEpKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgX3dlaWdodHMucmVzZXJ2ZShfaW50ZXJ2YWxzLnNpemUoKSk7
Ci0gICAgICAgICAgICAgICAgZm9yKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgX2ludGVydmFscy5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBfd2VpZ2h0cy5wdXNoX2JhY2soKndl
aWdodF9maXJzdCsrKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSNpZm5kZWYgQk9PU1RfTk9fQ1hYMTFfSERSX0lOSVRJQUxJWkVSX0xJU1QKLSAgICAgICAg
LyoqCi0gICAgICAgICAqIENvbnN0cnVjdHMgYSBAYyBwYXJhbV90eXBlIG9iamVjdCBmcm9tIGFu
IGluaXRpYWxpemVyX2xpc3QKLSAgICAgICAgICogY29udGFpbmluZyB0aGUgaW50ZXJ2YWwgYm91
bmRhcmllcyBhbmQgYSB1bmFyeSBmdW5jdGlvbgotICAgICAgICAgKiBzcGVjaWZ5aW5nIHRoZSB3
ZWlnaHRzIGF0IHRoZSBib3VuZGFyaWVzLiAgRWFjaCB3ZWlnaHQgaXMKLSAgICAgICAgICogZGV0
ZXJtaW5lZCBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbiBhdCB0aGUgY29ycmVzcG9uZGluZyBwb2lu
dC4KLSAgICAgICAgICoKLSAgICAgICAgICogSWYgdGhlIGluaXRpYWxpemVyX2xpc3QgY29udGFp
bnMgZmV3ZXIgdGhhbiB0d28gZWxlbWVudHMsCi0gICAgICAgICAqIHRoaXMgaXMgZXF1aXZhbGVu
dCB0byB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBhbmQgdGhlCi0gICAgICAgICAqIGRpc3RyaWJ1
dGlvbiB3aWxsIHByb2R1Y2UgdmFsdWVzIHVuaWZvcm1seSBkaXN0cmlidXRlZAotICAgICAgICAg
KiBpbiB0aGUgcmFuZ2UgWzAsIDEpLgotICAgICAgICAgKi8KLSAgICAgICAgdGVtcGxhdGU8Y2xh
c3MgVCwgY2xhc3MgRj4KLSAgICAgICAgcGFyYW1fdHlwZShjb25zdCBzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8VD4mIGlsLCBGIGYpCi0gICAgICAgICAgOiBfaW50ZXJ2YWxzKGlsLmJlZ2luKCksIGls
LmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZihfaW50ZXJ2YWxzLnNpemUoKSA8IDIp
IHsKLSAgICAgICAgICAgICAgICBfaW50ZXJ2YWxzLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAg
X3dlaWdodHMucHVzaF9iYWNrKFJlYWxUeXBlKDEpKTsKLSAgICAgICAgICAgICAgICBfd2VpZ2h0
cy5wdXNoX2JhY2soUmVhbFR5cGUoMSkpOwotICAgICAgICAgICAgICAgIF9pbnRlcnZhbHMucHVz
aF9iYWNrKFJlYWxUeXBlKDApKTsKLSAgICAgICAgICAgICAgICBfaW50ZXJ2YWxzLnB1c2hfYmFj
ayhSZWFsVHlwZSgxKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIF93
ZWlnaHRzLnJlc2VydmUoX2ludGVydmFscy5zaXplKCkpOwotICAgICAgICAgICAgICAgIGZvcih0
eXBlbmFtZSBzdGQ6OnZlY3RvcjxSZWFsVHlwZT46OmNvbnN0X2l0ZXJhdG9yCi0gICAgICAgICAg
ICAgICAgICAgIGl0ZXIgPSBfaW50ZXJ2YWxzLmJlZ2luKCksIGVuZCA9IF9pbnRlcnZhbHMuZW5k
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBfd2VpZ2h0cy5wdXNoX2JhY2soZigqaXRlcikp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCi0g
ICAgICAgIC8qKgotICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgQGMgcGFyYW1fdHlwZSBvYmplY3Qg
ZnJvbSBCb29zdC5SYW5nZSByYW5nZXMgaG9sZGluZwotICAgICAgICAgKiB0aGUgaW50ZXJ2YWwg
Ym91bmRhcmllcyBhbmQgdGhlIHdlaWdodHMgYXQgdGhlIGJvdW5kYXJpZXMuICBJZgotICAgICAg
ICAgKiB0aGVyZSBhcmUgZmV3ZXIgdGhhbiB0d28gaW50ZXJ2YWwgYm91bmRhcmllcywgdGhpcyBp
cyBlcXVpdmFsZW50Ci0gICAgICAgICAqIHRvIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGFuZCB0
aGUgZGlzdHJpYnV0aW9uIHdpbGwgcHJvZHVjZQotICAgICAgICAgKiB2YWx1ZXMgdW5pZm9ybWx5
IGRpc3RyaWJ1dGVkIGluIHRoZSByYW5nZSBbMCwgMSkuICBUaGUKLSAgICAgICAgICogbnVtYmVy
IG9mIHdlaWdodHMgbXVzdCBiZSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mCi0gICAgICAgICAqIGlu
dGVydmFsIGJvdW5kYXJpZXMuCi0gICAgICAgICAqLwotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBJ
bnRlcnZhbFJhbmdlLCBjbGFzcyBXZWlnaHRSYW5nZT4KLSAgICAgICAgcGFyYW1fdHlwZShjb25z
dCBJbnRlcnZhbFJhbmdlJiBpbnRlcnZhbHNfYXJnLAotICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlaWdodFJhbmdlJiB3ZWlnaHRzX2FyZykKLSAgICAgICAgICA6IF9pbnRlcnZhbHMoYm9vc3Q6
OmJlZ2luKGludGVydmFsc19hcmcpLCBib29zdDo6ZW5kKGludGVydmFsc19hcmcpKSwKLSAgICAg
ICAgICAgIF93ZWlnaHRzKGJvb3N0OjpiZWdpbih3ZWlnaHRzX2FyZyksIGJvb3N0OjplbmQod2Vp
Z2h0c19hcmcpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZihfaW50ZXJ2YWxzLnNpemUoKSA8
IDIpIHsKLSAgICAgICAgICAgICAgICBfd2VpZ2h0cy5jbGVhcigpOwotICAgICAgICAgICAgICAg
IF93ZWlnaHRzLnB1c2hfYmFjayhSZWFsVHlwZSgxKSk7Ci0gICAgICAgICAgICAgICAgX3dlaWdo
dHMucHVzaF9iYWNrKFJlYWxUeXBlKDEpKTsKLSAgICAgICAgICAgICAgICBfaW50ZXJ2YWxzLmNs
ZWFyKCk7Ci0gICAgICAgICAgICAgICAgX2ludGVydmFscy5wdXNoX2JhY2soUmVhbFR5cGUoMCkp
OwotICAgICAgICAgICAgICAgIF9pbnRlcnZhbHMucHVzaF9iYWNrKFJlYWxUeXBlKDEpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDb25zdHJ1
Y3RzIHRoZSBwYXJhbWV0ZXJzIGZvciBhIGRpc3RyaWJ1dGlvbiB0aGF0IGFwcHJveGltYXRlcyBh
Ci0gICAgICAgICAqIGZ1bmN0aW9uLiAgVGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24gaXMg
W3htaW4sIHhtYXgpLiAgVGhpcwotICAgICAgICAgKiByYW5nZSBpcyBkaXZpZGVkIGludG8gbncg
ZXF1YWxseSBzaXplZCBpbnRlcnZhbHMgYW5kIHRoZSB3ZWlnaHRzCi0gICAgICAgICAqIGFyZSBm
b3VuZCBieSBjYWxsaW5nIHRoZSB1bmFyeSBmdW5jdGlvbiBmIG9uIHRoZSBib3VuZGFyaWVzIG9m
IHRoZQotICAgICAgICAgKiBpbnRlcnZhbHMuCi0gICAgICAgICAqLwotICAgICAgICB0ZW1wbGF0
ZTxjbGFzcyBGPgotICAgICAgICBwYXJhbV90eXBlKHN0ZDo6c2l6ZV90IG53LCBSZWFsVHlwZSB4
bWluLCBSZWFsVHlwZSB4bWF4LCBGIGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6c2l6
ZV90IG4gPSAobncgPT0gMCkgPyAxIDogbnc7Ci0gICAgICAgICAgICBkb3VibGUgZGVsdGEgPSAo
eG1heCAtIHhtaW4pIC8gbjsKLSAgICAgICAgICAgIEJPT1NUX0FTU0VSVChkZWx0YSA+IDApOwot
ICAgICAgICAgICAgZm9yKHN0ZDo6c2l6ZV90IGsgPSAwOyBrIDwgbjsgKytrKSB7Ci0gICAgICAg
ICAgICAgICAgX3dlaWdodHMucHVzaF9iYWNrKGYoeG1pbiArIGsqZGVsdGEpKTsKLSAgICAgICAg
ICAgICAgICBfaW50ZXJ2YWxzLnB1c2hfYmFjayh4bWluICsgaypkZWx0YSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBfd2VpZ2h0cy5wdXNoX2JhY2soZih4bWF4KSk7Ci0gICAgICAgICAg
ICBfaW50ZXJ2YWxzLnB1c2hfYmFjayh4bWF4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKiAg
UmV0dXJucyBhIHZlY3RvciBjb250YWluaW5nIHRoZSBpbnRlcnZhbCBib3VuZGFyaWVzLiAqLwot
ICAgICAgICBzdGQ6OnZlY3RvcjxSZWFsVHlwZT4gaW50ZXJ2YWxzKCkgY29uc3QgeyByZXR1cm4g
X2ludGVydmFsczsgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIGEgdmVjdG9y
IGNvbnRhaW5pbmcgdGhlIHByb2JhYmlsaXR5IGRlbnNpdGllcwotICAgICAgICAgKiBhdCBhbGwg
dGhlIGludGVydmFsIGJvdW5kYXJpZXMuCi0gICAgICAgICAqLwotICAgICAgICBzdGQ6OnZlY3Rv
cjxSZWFsVHlwZT4gZGVuc2l0aWVzKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgUmVh
bFR5cGUgc3VtID0gc3RhdGljX2Nhc3Q8UmVhbFR5cGU+KDApOwotICAgICAgICAgICAgZm9yKHN0
ZDo6c2l6ZV90IGkgPSAwOyBpIDwgX2ludGVydmFscy5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBSZWFsVHlwZSB3aWR0aCA9IF9pbnRlcnZhbHNbaSArIDFdIC0gX2ludGVydmFs
c1tpXTsKLSAgICAgICAgICAgICAgICBzdW0gKz0gKF93ZWlnaHRzW2ldICsgX3dlaWdodHNbaSAr
IDFdKSAqIHdpZHRoIC8gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0ZDo6dmVjdG9y
PFJlYWxUeXBlPiByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQucmVzZXJ2ZShfd2VpZ2h0cy5z
aXplKCkpOwotICAgICAgICAgICAgZm9yKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFJlYWxUeXBlPjo6
Y29uc3RfaXRlcmF0b3IKLSAgICAgICAgICAgICAgICBpdGVyID0gX3dlaWdodHMuYmVnaW4oKSwg
ZW5kID0gX3dlaWdodHMuZW5kKCk7Ci0gICAgICAgICAgICAgICAgaXRlciAhPSBlbmQ7ICsraXRl
cikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKCppdGVy
IC8gc3VtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvKiogV3JpdGVzIHRoZSBwYXJhbWV0ZXJzIHRvIGEgQGMgc3RkOjpv
c3RyZWFtLiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX09TVFJFQU1fT1BFUkFUT1Io
b3MsIHBhcmFtX3R5cGUsIHBhcm0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRldGFpbDo6cHJp
bnRfdmVjdG9yKG9zLCBwYXJtLl9pbnRlcnZhbHMpOwotICAgICAgICAgICAgZGV0YWlsOjpwcmlu
dF92ZWN0b3Iob3MsIHBhcm0uX3dlaWdodHMpOwotICAgICAgICAgICAgcmV0dXJuIG9zOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmVhZHMgdGhlIHBhcmFtZXRlcnMgZnJvbSBh
IEBjIHN0ZDo6aXN0cmVhbS4gKi8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFN
X09QRVJBVE9SKGlzLCBwYXJhbV90eXBlLCBwYXJtKQotICAgICAgICB7Ci0gICAgICAgICAgICBz
dGQ6OnZlY3RvcjxSZWFsVHlwZT4gbmV3X2ludGVydmFsczsKLSAgICAgICAgICAgIHN0ZDo6dmVj
dG9yPFJlYWxUeXBlPiBuZXdfd2VpZ2h0czsKLSAgICAgICAgICAgIGRldGFpbDo6cmVhZF92ZWN0
b3IoaXMsIG5ld19pbnRlcnZhbHMpOwotICAgICAgICAgICAgZGV0YWlsOjpyZWFkX3ZlY3Rvcihp
cywgbmV3X3dlaWdodHMpOwotICAgICAgICAgICAgaWYoaXMpIHsKLSAgICAgICAgICAgICAgICBw
YXJtLl9pbnRlcnZhbHMuc3dhcChuZXdfaW50ZXJ2YWxzKTsKLSAgICAgICAgICAgICAgICBwYXJt
Ll93ZWlnaHRzLnN3YXAobmV3X3dlaWdodHMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWUuICovCi0gICAgICAgIEJPT1NUX1JB
TkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IocGFyYW1fdHlwZSwgbGhzLCByaHMpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsaHMuX2ludGVydmFscyA9PSByaHMuX2ludGVydmFs
cwotICAgICAgICAgICAgICAgICYmIGxocy5fd2VpZ2h0cyA9PSByaHMuX3dlaWdodHM7Ci0gICAg
ICAgIH0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHNldHMgb2YgcGFyYW1l
dGVycyBhcmUgZGlmZmVyZW50LiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0lORVFV
QUxJVFlfT1BFUkFUT1IocGFyYW1fdHlwZSkKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVu
ZCBjbGFzcyBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbjsKLQotICAgICAgICBzdGQ6OnZl
Y3RvcjxSZWFsVHlwZT4gX2ludGVydmFsczsKLSAgICAgICAgc3RkOjp2ZWN0b3I8UmVhbFR5cGU+
IF93ZWlnaHRzOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IEBjIHBp
ZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uIHRoYXQKLSAgICAgKiBwcm9kdWNlcyB2YWx1ZXMg
dW5pZm9ybWx5IGRpc3RyaWJ1dGVkIGluIHRoZSByYW5nZSBbMCwgMSkuCi0gICAgICovCi0gICAg
cGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb24oKQotICAgIHsKLSAgICAgICAgZGVmYXVsdF9p
bml0KCk7Ci0gICAgfQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBwaWVjZXdpc2VfbGlu
ZWFyX2Rpc3RyaWJ1dGlvbiBmcm9tIHR3byBpdGVyYXRvciByYW5nZXMKLSAgICAgKiBjb250YWlu
aW5nIHRoZSBpbnRlcnZhbCBib3VuZGFyaWVzIGFuZCB0aGUgd2VpZ2h0cyBhdCB0aGUgYm91bmRh
cmllcy4KLSAgICAgKiBJZiB0aGVyZSBhcmUgZmV3ZXIgdGhhbiB0d28gYm91bmRhcmllcywgdGhl
biB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KLSAgICAgKiB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBh
bmQgY3JlYXRlcyBhIGRpc3RyaWJ1dGlvbiB0aGF0Ci0gICAgICogcHJvZHVjZXMgdmFsdWVzIHVu
aWZvcm1seSBkaXN0cmlidXRlZCBpbiB0aGUgcmFuZ2UgWzAsIDEpLgotICAgICAqCi0gICAgICog
VGhlIHZhbHVlcyBvZiB0aGUgaW50ZXJ2YWwgYm91bmRhcmllcyBtdXN0IGJlIHN0cmljdGx5Ci0g
ICAgICogaW5jcmVhc2luZywgYW5kIHRoZSBudW1iZXIgb2Ygd2VpZ2h0cyBtdXN0IGJlIGVxdWFs
IHRvCi0gICAgICogdGhlIG51bWJlciBvZiBpbnRlcnZhbCBib3VuZGFyaWVzLiAgSWYgdGhlcmUg
YXJlIGV4dHJhCi0gICAgICogd2VpZ2h0cywgdGhleSBhcmUgaWdub3JlZC4KLSAgICAgKgotICAg
ICAqIEZvciBleGFtcGxlLAotICAgICAqCi0gICAgICogQGNvZGUKLSAgICAgKiBkb3VibGUgaW50
ZXJ2YWxzW10gPSB7IDAuMCwgMS4wLCAyLjAgfTsKLSAgICAgKiBkb3VibGUgd2VpZ2h0c1tdID0g
eyAwLjAsIDEuMCwgMC4wIH07Ci0gICAgICogcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlv
bjw+IGRpc3QoCi0gICAgICogICAgICZpbnRlcnZhbHNbMF0sICZpbnRlcnZhbHNbMF0gKyAzLCAm
d2VpZ2h0c1swXSk7Ci0gICAgICogQGVuZGNvZGUKLSAgICAgKgotICAgICAqIHByb2R1Y2VzIGEg
dHJpYW5nbGUgZGlzdHJpYnV0aW9uLgotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIEludGVy
dmFsSXRlciwgY2xhc3MgV2VpZ2h0SXRlcj4KLSAgICBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1
dGlvbihJbnRlcnZhbEl0ZXIgZmlyc3RfaW50ZXJ2YWwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW50ZXJ2YWxJdGVyIGxhc3RfaW50ZXJ2YWwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2VpZ2h0SXRlciBmaXJzdF93ZWlnaHQpCi0gICAgICA6IF9pbnRl
cnZhbHMoZmlyc3RfaW50ZXJ2YWwsIGxhc3RfaW50ZXJ2YWwpCi0gICAgewotICAgICAgICBpZihf
aW50ZXJ2YWxzLnNpemUoKSA8IDIpIHsKLSAgICAgICAgICAgIGRlZmF1bHRfaW5pdCgpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgX3dlaWdodHMucmVzZXJ2ZShfaW50ZXJ2YWxzLnNp
emUoKSk7Ci0gICAgICAgICAgICBmb3Ioc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBfaW50ZXJ2YWxz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgX3dlaWdodHMucHVzaF9iYWNrKCpmaXJz
dF93ZWlnaHQrKyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbml0KCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0jaWZuZGVmIEJPT1NUX05PX0NYWDExX0hEUl9JTklUSUFMSVpFUl9MSVNUCi0g
ICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9u
IGZyb20gYW4KLSAgICAgKiBpbml0aWFsaXplcl9saXN0IGNvbnRhaW5pbmcgdGhlIGludGVydmFs
IGJvdW5kYXJpZXMKLSAgICAgKiBhbmQgYSB1bmFyeSBmdW5jdGlvbiBzcGVjaWZ5aW5nIHRoZSB3
ZWlnaHRzLiAgRWFjaAotICAgICAqIHdlaWdodCBpcyBkZXRlcm1pbmVkIGJ5IGNhbGxpbmcgdGhl
IGZ1bmN0aW9uIGF0IHRoZQotICAgICAqIGNvcnJlc3BvbmRpbmcgaW50ZXJ2YWwgYm91bmRhcnku
Ci0gICAgICoKLSAgICAgKiBJZiB0aGUgaW5pdGlhbGl6ZXJfbGlzdCBjb250YWlucyBmZXdlciB0
aGFuIHR3byBlbGVtZW50cywKLSAgICAgKiB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGRlZmF1
bHQgY29uc3RydWN0b3IgYW5kIHRoZQotICAgICAqIGRpc3RyaWJ1dGlvbiB3aWxsIHByb2R1Y2Ug
dmFsdWVzIHVuaWZvcm1seSBkaXN0cmlidXRlZAotICAgICAqIGluIHRoZSByYW5nZSBbMCwgMSku
Ci0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgRj4KLSAgICBwaWVjZXdpc2Vf
bGluZWFyX2Rpc3RyaWJ1dGlvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gaWwsIEYgZikKLSAg
ICAgIDogX2ludGVydmFscyhpbC5iZWdpbigpLCBpbC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlm
KF9pbnRlcnZhbHMuc2l6ZSgpIDwgMikgewotICAgICAgICAgICAgZGVmYXVsdF9pbml0KCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBfd2VpZ2h0cy5yZXNlcnZlKF9pbnRlcnZhbHMu
c2l6ZSgpKTsKLSAgICAgICAgICAgIGZvcih0eXBlbmFtZSBzdGQ6OnZlY3RvcjxSZWFsVHlwZT46
OmNvbnN0X2l0ZXJhdG9yCi0gICAgICAgICAgICAgICAgaXRlciA9IF9pbnRlcnZhbHMuYmVnaW4o
KSwgZW5kID0gX2ludGVydmFscy5lbmQoKTsKLSAgICAgICAgICAgICAgICBpdGVyICE9IGVuZDsg
KytpdGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF93ZWlnaHRzLnB1c2hfYmFj
ayhmKCppdGVyKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbml0KCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0jZW5kaWYKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgcGllY2V3aXNl
X2xpbmVhcl9kaXN0cmlidXRpb24gZnJvbSBCb29zdC5SYW5nZQotICAgICAqIHJhbmdlcyBob2xk
aW5nIHRoZSBpbnRlcnZhbCBib3VuZGFyaWVzIGFuZCB0aGUgd2VpZ2h0cy4gIElmCi0gICAgICog
dGhlcmUgYXJlIGZld2VyIHRoYW4gdHdvIGludGVydmFsIGJvdW5kYXJpZXMsIHRoaXMgaXMgZXF1
aXZhbGVudAotICAgICAqIHRvIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGFuZCB0aGUgZGlzdHJp
YnV0aW9uIHdpbGwgcHJvZHVjZQotICAgICAqIHZhbHVlcyB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQg
aW4gdGhlIHJhbmdlIFswLCAxKS4gIFRoZQotICAgICAqIG51bWJlciBvZiB3ZWlnaHRzIG11c3Qg
YmUgZXF1YWwgdG8gdGhlIG51bWJlciBvZgotICAgICAqIGludGVydmFsIGJvdW5kYXJpZXMuCi0g
ICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgSW50ZXJ2YWxzUmFuZ2UsIGNsYXNzIFdlaWdodHNS
YW5nZT4KLSAgICBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbihjb25zdCBJbnRlcnZhbHNS
YW5nZSYgaW50ZXJ2YWxzX2FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBXZWlnaHRzUmFuZ2UmIHdlaWdodHNfYXJnKQotICAgICAgOiBfaW50ZXJ2YWxzKGJvb3N0
OjpiZWdpbihpbnRlcnZhbHNfYXJnKSwgYm9vc3Q6OmVuZChpbnRlcnZhbHNfYXJnKSksCi0gICAg
ICAgIF93ZWlnaHRzKGJvb3N0OjpiZWdpbih3ZWlnaHRzX2FyZyksIGJvb3N0OjplbmQod2VpZ2h0
c19hcmcpKQotICAgIHsKLSAgICAgICAgaWYoX2ludGVydmFscy5zaXplKCkgPCAyKSB7Ci0gICAg
ICAgICAgICBkZWZhdWx0X2luaXQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlu
aXQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgcGll
Y2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb24gdGhhdCBhcHByb3hpbWF0ZXMgYQotICAgICAqIGZ1
bmN0aW9uLiAgVGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24gaXMgW3htaW4sIHhtYXgpLiAg
VGhpcwotICAgICAqIHJhbmdlIGlzIGRpdmlkZWQgaW50byBudyBlcXVhbGx5IHNpemVkIGludGVy
dmFscyBhbmQgdGhlIHdlaWdodHMKLSAgICAgKiBhcmUgZm91bmQgYnkgY2FsbGluZyB0aGUgdW5h
cnkgZnVuY3Rpb24gZiBvbiB0aGUgaW50ZXJ2YWwgYm91bmRhcmllcy4KLSAgICAgKi8KLSAgICB0
ZW1wbGF0ZTxjbGFzcyBGPgotICAgIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uKHN0ZDo6
c2l6ZV90IG53LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxUeXBlIHht
aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbFR5cGUgeG1heCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGIGYpCi0gICAgewotICAgICAgICBpZihu
dyA9PSAwKSB7IG53ID0gMTsgfQotICAgICAgICBSZWFsVHlwZSBkZWx0YSA9ICh4bWF4IC0geG1p
bikgLyBudzsKLSAgICAgICAgX2ludGVydmFscy5yZXNlcnZlKG53ICsgMSk7Ci0gICAgICAgIGZv
cihzdGQ6OnNpemVfdCBpID0gMDsgaSA8IG53OyArK2kpIHsKLSAgICAgICAgICAgIFJlYWxUeXBl
IHggPSB4bWluICsgaSAqIGRlbHRhOwotICAgICAgICAgICAgX2ludGVydmFscy5wdXNoX2JhY2so
eCk7Ci0gICAgICAgICAgICBfd2VpZ2h0cy5wdXNoX2JhY2soZih4KSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgX2ludGVydmFscy5wdXNoX2JhY2soeG1heCk7Ci0gICAgICAgIF93ZWlnaHRzLnB1c2hf
YmFjayhmKHhtYXgpKTsKLSAgICAgICAgaW5pdCgpOwotICAgIH0KLSAgICAvKioKLSAgICAgKiBD
b25zdHJ1Y3RzIGEgcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb24gZnJvbSBpdHMgcGFyYW1l
dGVycy4KLSAgICAgKi8KLSAgICBleHBsaWNpdCBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlv
bihjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgICAgOiBfaW50ZXJ2YWxzKHBhcm0uX2ludGVy
dmFscyksCi0gICAgICAgIF93ZWlnaHRzKHBhcm0uX3dlaWdodHMpCi0gICAgewotICAgICAgICBp
bml0KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHZhbHVlIGRpc3RyaWJ1
dGVkIGFjY29yZGluZyB0byB0aGUgcGFyYW1ldGVycyBvZiB0aGUKLSAgICAgKiBwaWVjZXdpc2Vf
bGluZWFyX2Rpc3RyaWJ1dGlvbi4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBVUk5HPgot
ICAgIFJlYWxUeXBlIG9wZXJhdG9yKCkoVVJORyYgdXJuZykgY29uc3QKLSAgICB7Ci0gICAgICAg
IHN0ZDo6c2l6ZV90IGkgPSBfYmlucyh1cm5nKTsKLSAgICAgICAgYm9vbCBpc19pbl9yZWN0YW5n
bGUgPSAoaSAlIDIgPT0gMCk7Ci0gICAgICAgIGkgPSBpIC8gMjsKLSAgICAgICAgdW5pZm9ybV9y
ZWFsPFJlYWxUeXBlPiBkaXN0KF9pbnRlcnZhbHNbaV0sIF9pbnRlcnZhbHNbaSsxXSk7Ci0gICAg
ICAgIGlmKGlzX2luX3JlY3RhbmdsZSkgewotICAgICAgICAgICAgcmV0dXJuIGRpc3QodXJuZyk7
Ci0gICAgICAgIH0gZWxzZSBpZihfd2VpZ2h0c1tpXSA8IF93ZWlnaHRzW2krMV0pIHsKLSAgICAg
ICAgICAgIHJldHVybiAoc3RkOjptYXgpKGRpc3QodXJuZyksIGRpc3QodXJuZykpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIChzdGQ6Om1pbikoZGlzdCh1cm5nKSwgZGlz
dCh1cm5nKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJu
cyBhIHZhbHVlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgcGFyYW1ldGVycwotICAgICAq
IHNwZWNpZmllZCBieSBwYXJhbS4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBVUk5HPgot
ICAgIFJlYWxUeXBlIG9wZXJhdG9yKCkoVVJORyYgdXJuZywgY29uc3QgcGFyYW1fdHlwZSYgcGFy
bSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1
dGlvbihwYXJtKSh1cm5nKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhlIHNtYWxs
ZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4gKi8KLSAgICByZXN1
bHRfdHlwZSBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgY29uc3QKLSAg
ICB7IHJldHVybiBfaW50ZXJ2YWxzLmZyb250KCk7IH0KLSAgICAvKiogUmV0dXJucyB0aGUgbGFy
Z2VzdCB2YWx1ZSB0aGF0IHRoZSBkaXN0cmlidXRpb24gY2FuIHByb2R1Y2UuICovCi0gICAgcmVz
dWx0X3R5cGUgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIGNvbnN0Ci0g
ICAgeyByZXR1cm4gX2ludGVydmFscy5iYWNrKCk7IH0KLQotICAgIC8qKgotICAgICAqIFJldHVy
bnMgYSB2ZWN0b3IgY29udGFpbmluZyB0aGUgcHJvYmFiaWxpdHkgZGVuc2l0aWVzCi0gICAgICog
YXQgdGhlIGludGVydmFsIGJvdW5kYXJpZXMuCi0gICAgICovCi0gICAgc3RkOjp2ZWN0b3I8UmVh
bFR5cGU+IGRlbnNpdGllcygpIGNvbnN0Ci0gICAgewotICAgICAgICBSZWFsVHlwZSBzdW0gPSBz
dGF0aWNfY2FzdDxSZWFsVHlwZT4oMCk7Ci0gICAgICAgIGZvcihzdGQ6OnNpemVfdCBpID0gMDsg
aSA8IF9pbnRlcnZhbHMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBSZWFsVHlwZSB3
aWR0aCA9IF9pbnRlcnZhbHNbaSArIDFdIC0gX2ludGVydmFsc1tpXTsKLSAgICAgICAgICAgIHN1
bSArPSAoX3dlaWdodHNbaV0gKyBfd2VpZ2h0c1tpICsgMV0pICogd2lkdGggLyAyOwotICAgICAg
ICB9Ci0gICAgICAgIHN0ZDo6dmVjdG9yPFJlYWxUeXBlPiByZXN1bHQ7Ci0gICAgICAgIHJlc3Vs
dC5yZXNlcnZlKF93ZWlnaHRzLnNpemUoKSk7Ci0gICAgICAgIGZvcih0eXBlbmFtZSBzdGQ6OnZl
Y3RvcjxSZWFsVHlwZT46OmNvbnN0X2l0ZXJhdG9yCi0gICAgICAgICAgICBpdGVyID0gX3dlaWdo
dHMuYmVnaW4oKSwgZW5kID0gX3dlaWdodHMuZW5kKCk7Ci0gICAgICAgICAgICBpdGVyICE9IGVu
ZDsgKytpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKCppdGVy
IC8gc3VtKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAv
KiogIFJldHVybnMgYSB2ZWN0b3IgY29udGFpbmluZyB0aGUgaW50ZXJ2YWwgYm91bmRhcmllcy4g
Ki8KLSAgICBzdGQ6OnZlY3RvcjxSZWFsVHlwZT4gaW50ZXJ2YWxzKCkgY29uc3QgeyByZXR1cm4g
X2ludGVydmFsczsgfQotCi0gICAgLyoqIFJldHVybnMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRp
c3RyaWJ1dGlvbi4gKi8KLSAgICBwYXJhbV90eXBlIHBhcmFtKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBwYXJhbV90eXBlKF9pbnRlcnZhbHMsIF93ZWlnaHRzKTsKLSAgICB9Ci0gICAg
LyoqIFNldHMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICB2b2lk
IHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0pCi0gICAgewotICAgICAgICBzdGQ6OnZlY3Rv
cjxSZWFsVHlwZT4gbmV3X2ludGVydmFscyhwYXJtLl9pbnRlcnZhbHMpOwotICAgICAgICBzdGQ6
OnZlY3RvcjxSZWFsVHlwZT4gbmV3X3dlaWdodHMocGFybS5fd2VpZ2h0cyk7Ci0gICAgICAgIGlu
aXQobmV3X2ludGVydmFscywgbmV3X3dlaWdodHMpOwotICAgICAgICBfaW50ZXJ2YWxzLnN3YXAo
bmV3X2ludGVydmFscyk7Ci0gICAgICAgIF93ZWlnaHRzLnN3YXAobmV3X3dlaWdodHMpOwotICAg
IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBFZmZlY3RzOiBTdWJzZXF1ZW50IHVzZXMgb2YgdGhl
IGRpc3RyaWJ1dGlvbiBkbyBub3QgZGVwZW5kCi0gICAgICogb24gdmFsdWVzIHByb2R1Y2VkIGJ5
IGFueSBlbmdpbmUgcHJpb3IgdG8gaW52b2tpbmcgcmVzZXQuCi0gICAgICovCi0gICAgdm9pZCBy
ZXNldCgpIHsgX2JpbnMucmVzZXQoKTsgfQotCi0gICAgLyoqIFdyaXRlcyBhIGRpc3RyaWJ1dGlv
biB0byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX09TVFJF
QU1fT1BFUkFUT1IoCi0gICAgICAgIG9zLCBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbiwg
cGxkKQotICAgIHsKLSAgICAgICAgb3MgPDwgcGxkLnBhcmFtKCk7Ci0gICAgICAgIHJldHVybiBv
czsKLSAgICB9Ci0KLSAgICAvKiogUmVhZHMgYSBkaXN0cmlidXRpb24gZnJvbSBhIEBjIHN0ZDo6
aXN0cmVhbSAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRPUigKLSAg
ICAgICAgaXMsIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uLCBwbGQpCi0gICAgewotICAg
ICAgICBwYXJhbV90eXBlIHBhcm07Ci0gICAgICAgIGlmKGlzID4+IHBhcm0pIHsKLSAgICAgICAg
ICAgIHBsZC5wYXJhbShwYXJtKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaXM7Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gZGlzdHJpYnV0aW9u
cyB3aWxsIHJldHVybiB0aGUKLSAgICAgKiBzYW1lIHNlcXVlbmNlIG9mIHZhbHVlcywgd2hlbiBw
YXNzZWQgZXF1YWwgZ2VuZXJhdG9ycy4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlM
X0VRVUFMSVRZX09QRVJBVE9SKAotICAgICAgICBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlv
biwgbGhzLCAgcmhzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxocy5faW50ZXJ2YWxzID09IHJo
cy5faW50ZXJ2YWxzICYmIGxocy5fd2VpZ2h0cyA9PSByaHMuX3dlaWdodHM7Ci0gICAgfQotICAg
IC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGRpc3RyaWJ1dGlvbnMgbWF5IHJl
dHVybiBkaWZmZXJlbnQKLSAgICAgKiBzZXF1ZW5jZXMgb2YgdmFsdWVzLCB3aGVuIHBhc3NlZCBl
cXVhbCBnZW5lcmF0b3JzLgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5FUVVB
TElUWV9PUEVSQVRPUihwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbikKLQotcHJpdmF0ZToK
LQotICAgIC8vLyBAY29uZCBcc2hvd19wcml2YXRlCi0KLSAgICB2b2lkIGluaXQoY29uc3Qgc3Rk
Ojp2ZWN0b3I8UmVhbFR5cGU+JiBpbnRlcnZhbHNfYXJnLAotICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnZlY3RvcjxSZWFsVHlwZT4mIHdlaWdodHNfYXJnKQotICAgIHsKLSAgICAgICAgdXNpbmcg
c3RkOjphYnM7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPFJlYWxUeXBlPiBiaW5fd2VpZ2h0czsKLSAg
ICAgICAgYmluX3dlaWdodHMucmVzZXJ2ZSgoaW50ZXJ2YWxzX2FyZy5zaXplKCkgLSAxKSAqIDIp
OwotICAgICAgICBmb3Ioc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBpbnRlcnZhbHNfYXJnLnNpemUo
KSAtIDE7ICsraSkgewotICAgICAgICAgICAgUmVhbFR5cGUgd2lkdGggPSBpbnRlcnZhbHNfYXJn
W2kgKyAxXSAtIGludGVydmFsc19hcmdbaV07Ci0gICAgICAgICAgICBSZWFsVHlwZSB3MSA9IHdl
aWdodHNfYXJnW2ldOwotICAgICAgICAgICAgUmVhbFR5cGUgdzIgPSB3ZWlnaHRzX2FyZ1tpICsg
MV07Ci0gICAgICAgICAgICBiaW5fd2VpZ2h0cy5wdXNoX2JhY2soKHN0ZDo6bWluKSh3MSwgdzIp
ICogd2lkdGgpOwotICAgICAgICAgICAgYmluX3dlaWdodHMucHVzaF9iYWNrKGFicyh3MSAtIHcy
KSAqIHdpZHRoIC8gMik7Ci0gICAgICAgIH0KLSAgICAgICAgdHlwZWRlZiBkaXNjcmV0ZV9kaXN0
cmlidXRpb248c3RkOjpzaXplX3QsIFJlYWxUeXBlPiBiaW5zX3R5cGU7Ci0gICAgICAgIHR5cGVu
YW1lIGJpbnNfdHlwZTo6cGFyYW1fdHlwZSBiaW5zX3BhcmFtKGJpbl93ZWlnaHRzKTsKLSAgICAg
ICAgX2JpbnMucGFyYW0oYmluc19wYXJhbSk7Ci0gICAgfQotCi0gICAgdm9pZCBpbml0KCkKLSAg
ICB7Ci0gICAgICAgIGluaXQoX2ludGVydmFscywgX3dlaWdodHMpOwotICAgIH0KLQotICAgIHZv
aWQgZGVmYXVsdF9pbml0KCkKLSAgICB7Ci0gICAgICAgIF9pbnRlcnZhbHMuY2xlYXIoKTsKLSAg
ICAgICAgX2ludGVydmFscy5wdXNoX2JhY2soUmVhbFR5cGUoMCkpOwotICAgICAgICBfaW50ZXJ2
YWxzLnB1c2hfYmFjayhSZWFsVHlwZSgxKSk7Ci0gICAgICAgIF93ZWlnaHRzLmNsZWFyKCk7Ci0g
ICAgICAgIF93ZWlnaHRzLnB1c2hfYmFjayhSZWFsVHlwZSgxKSk7Ci0gICAgICAgIF93ZWlnaHRz
LnB1c2hfYmFjayhSZWFsVHlwZSgxKSk7Ci0gICAgICAgIGluaXQoKTsKLSAgICB9Ci0KLSAgICBk
aXNjcmV0ZV9kaXN0cmlidXRpb248c3RkOjpzaXplX3QsIFJlYWxUeXBlPiBfYmluczsKLSAgICBz
dGQ6OnZlY3RvcjxSZWFsVHlwZT4gX2ludGVydmFsczsKLSAgICBzdGQ6OnZlY3RvcjxSZWFsVHlw
ZT4gX3dlaWdodHM7Ci0KLSAgICAvLy8gQGVuZGNvbmQKLX07Ci0KLX0KLX0KLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5k
b20vcG9pc3Nvbl9kaXN0cmlidXRpb24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3BvaXNzb25fZGlzdHJpYnV0aW9uLmhwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzU5ZjIwNmU0Mjk1ZGE2ODU5NWMyZmIxNDNmNTczMTMxZjcy
YjRjMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vcG9pc3Nvbl9kaXN0
cmlidXRpb24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzYwICswLDAgQEAKLS8qIGJvb3N0IHJh
bmRvbS9wb2lzc29uX2Rpc3RyaWJ1dGlvbi5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmln
aHQgSmVucyBNYXVyZXIgMjAwMgotICogQ29weXJpZ2h0IFN0ZXZlbiBXYXRhbmFiZSAyMDEwCi0g
KiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuIChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0
Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0
dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1
bWVudGF0aW9uLgotICoKLSAqICRJZCQKLSAqCi0gKi8KLQotI2lmbmRlZiBCT09TVF9SQU5ET01f
UE9JU1NPTl9ESVNUUklCVVRJT05fSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9QT0lTU09OX0RJ
U1RSSUJVVElPTl9IUFAKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy9ub190cjEvY21hdGguaHBw
PgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8aW9zZndkPgotI2luY2x1ZGUgPGJvb3N0
L2Fzc2VydC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbGltaXRzLmhwcD4KLSNpbmNsdWRlIDxib29z
dC9yYW5kb20vdW5pZm9ybV8wMS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9j
b25maWcuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9kaXNhYmxlX3dhcm5p
bmdzLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSByYW5kb20gewotCi1uYW1l
c3BhY2UgZGV0YWlsIHsKLQotdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGU+Ci1zdHJ1Y3QgcG9pc3Nv
bl90YWJsZSB7Ci0gICAgc3RhdGljIFJlYWxUeXBlIHZhbHVlWzEwXTsKLX07Ci0KLXRlbXBsYXRl
PGNsYXNzIFJlYWxUeXBlPgotUmVhbFR5cGUgcG9pc3Nvbl90YWJsZTxSZWFsVHlwZT46OnZhbHVl
WzEwXSA9IHsKLSAgICAwLjAsCi0gICAgMC4wLAotICAgIDAuNjkzMTQ3MTgwNTU5OTQ1MjksCi0g
ICAgMS43OTE3NTk0NjkyMjgwNTUwLAotICAgIDMuMTc4MDUzODMwMzQ3OTQ1OCwKLSAgICA0Ljc4
NzQ5MTc0Mjc4MjA0NTgsCi0gICAgNi41NzkyNTEyMTIwMTAxMDEyLAotICAgIDguNTI1MTYxMzYx
MDY1NDE0NywKLSAgICAxMC42MDQ2MDI5MDI3NDUyNTEsCi0gICAgMTIuODAxODI3NDgwMDgxNDY5
Ci19OwotCi19Ci0KLS8qKgotICogQW4gaW5zdGFudGlhdGlvbiBvZiB0aGUgY2xhc3MgdGVtcGxh
dGUgQGMgcG9pc3Nvbl9kaXN0cmlidXRpb24gaXMgYQotICogbW9kZWwgb2YgXHJhbmRvbV9kaXN0
cmlidXRpb24uICBUaGUgcG9pc3NvbiBkaXN0cmlidXRpb24gaGFzCi0gKiBcZiRwKGkpID0gXGZy
YWN7ZV57LVxsYW1iZGF9XGxhbWJkYV5pfXtpIX1cZiQKLSAqCi0gKiBUaGlzIGltcGxlbWVudGF0
aW9uIGlzIGJhc2VkIG9uIHRoZSBQVFJEIGFsZ29yaXRobSBkZXNjcmliZWQKLSAqIAotICogIEBi
bG9ja3F1b3RlCi0gKiAgIlRoZSB0cmFuc2Zvcm1lZCByZWplY3Rpb24gbWV0aG9kIGZvciBnZW5l
cmF0aW5nIFBvaXNzb24gcmFuZG9tIHZhcmlhYmxlcyIsCi0gKiAgV29sZmdhbmcgSG9ybWFubiwg
SW5zdXJhbmNlOiBNYXRoZW1hdGljcyBhbmQgRWNvbm9taWNzCi0gKiAgVm9sdW1lIDEyLCBJc3N1
ZSAxLCBGZWJydWFyeSAxOTkzLCBQYWdlcyAzOS00NQotICogIEBlbmRibG9ja3F1b3RlCi0gKi8K
LXRlbXBsYXRlPGNsYXNzIEludFR5cGUgPSBpbnQsIGNsYXNzIFJlYWxUeXBlID0gZG91YmxlPgot
Y2xhc3MgcG9pc3Nvbl9kaXN0cmlidXRpb24gewotcHVibGljOgotICAgIHR5cGVkZWYgSW50VHlw
ZSByZXN1bHRfdHlwZTsKLSAgICB0eXBlZGVmIFJlYWxUeXBlIGlucHV0X3R5cGU7Ci0KLSAgICBj
bGFzcyBwYXJhbV90eXBlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgcG9pc3Nvbl9k
aXN0cmlidXRpb24gZGlzdHJpYnV0aW9uX3R5cGU7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBD
b25zdHJ1Y3QgYSBwYXJhbV90eXBlIG9iamVjdCB3aXRoIHRoZSBwYXJhbWV0ZXIgIm1lYW4iCi0g
ICAgICAgICAqCi0gICAgICAgICAqIFJlcXVpcmVzOiBtZWFuID4gMAotICAgICAgICAgKi8KLSAg
ICAgICAgZXhwbGljaXQgcGFyYW1fdHlwZShSZWFsVHlwZSBtZWFuX2FyZyA9IFJlYWxUeXBlKDEp
KQotICAgICAgICAgIDogX21lYW4obWVhbl9hcmcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJP
T1NUX0FTU0VSVChfbWVhbiA+IDApOwotICAgICAgICB9Ci0gICAgICAgIC8qIFJldHVybnMgdGhl
ICJtZWFuIiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICAgICAgUmVhbFR5
cGUgbWVhbigpIGNvbnN0IHsgcmV0dXJuIF9tZWFuOyB9Ci0jaWZuZGVmIEJPT1NUX1JBTkRPTV9O
T19TVFJFQU1fT1BFUkFUT1JTCi0gICAgICAgIC8qKiBXcml0ZXMgdGhlIHBhcmFtZXRlcnMgb2Yg
dGhlIGRpc3RyaWJ1dGlvbiB0byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICAgICAgdGVtcGxh
dGU8Y2xhc3MgQ2hhclQsIGNsYXNzIFRyYWl0cz4KLSAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNf
b3N0cmVhbTxDaGFyVCwgVHJhaXRzPiYKLSAgICAgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29z
dHJlYW08Q2hhclQsIFRyYWl0cz4mIG9zLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFt
X3R5cGUmIHBhcm0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9zIDw8IHBhcm0uX21lYW47Ci0g
ICAgICAgICAgICByZXR1cm4gb3M7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiogUmVhZHMgdGhl
IHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbiBmcm9tIGEgQGMgc3RkOjppc3RyZWFtLiAq
LwotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBDaGFyVCwgY2xhc3MgVHJhaXRzPgotICAgICAgICBm
cmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPENoYXJULCBUcmFpdHM+JgotICAgICAgICBvcGVyYXRv
cj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxDaGFyVCwgVHJhaXRzPiYgaXMsIHBhcmFtX3R5cGUmIHBh
cm0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlzID4+IHBhcm0uX21lYW47Ci0gICAgICAgICAg
ICByZXR1cm4gaXM7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICAvKiogUmV0dXJucyB0cnVl
IGlmIHRoZSBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgdmFsdWVzLiAqLwotICAgICAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIGxocywgY29uc3QgcGFyYW1fdHlw
ZSYgcmhzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbGhzLl9tZWFuID09IHJocy5f
bWVhbjsKLSAgICAgICAgfQotICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJhbWV0
ZXJzIGhhdmUgZGlmZmVyZW50IHZhbHVlcy4gKi8KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBwYXJhbV90eXBlJiBsaHMsIGNvbnN0IHBhcmFtX3R5cGUmIHJocykKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuICEobGhzID09IHJocyk7Ci0gICAgICAgIH0KLSAgICBw
cml2YXRlOgotICAgICAgICBSZWFsVHlwZSBfbWVhbjsKLSAgICB9OwotICAgIAotICAgIC8qKgot
ICAgICAqIENvbnN0cnVjdHMgYSBAYyBwb2lzc29uX2Rpc3RyaWJ1dGlvbiB3aXRoIHRoZSBwYXJh
bWV0ZXIgQGMgbWVhbi4KLSAgICAgKgotICAgICAqIFJlcXVpcmVzOiBtZWFuID4gMAotICAgICAq
LwotICAgIGV4cGxpY2l0IHBvaXNzb25fZGlzdHJpYnV0aW9uKFJlYWxUeXBlIG1lYW5fYXJnID0g
UmVhbFR5cGUoMSkpCi0gICAgICA6IF9tZWFuKG1lYW5fYXJnKQotICAgIHsKLSAgICAgICAgQk9P
U1RfQVNTRVJUKF9tZWFuID4gMCk7Ci0gICAgICAgIGluaXQoKTsKLSAgICB9Ci0gICAgCi0gICAg
LyoqCi0gICAgICogQ29uc3RydWN0IGFuIEBjIHBvaXNzb25fZGlzdHJpYnV0aW9uIG9iamVjdCBm
cm9tIHRoZQotICAgICAqIHBhcmFtZXRlcnMuCi0gICAgICovCi0gICAgZXhwbGljaXQgcG9pc3Nv
bl9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgcGFybSkKLSAgICAgIDogX21lYW4ocGFy
bS5tZWFuKCkpCi0gICAgewotICAgICAgICBpbml0KCk7Ci0gICAgfQotICAgIAotICAgIC8qKgot
ICAgICAqIFJldHVybnMgYSByYW5kb20gdmFyaWF0ZSBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8g
dGhlCi0gICAgICogcG9pc3NvbiBkaXN0cmlidXRpb24uCi0gICAgICovCi0gICAgdGVtcGxhdGU8
Y2xhc3MgVVJORz4KLSAgICBJbnRUeXBlIG9wZXJhdG9yKCkoVVJORyYgdXJuZykgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGlmKHVzZV9pbnZlcnNpb24oKSkgewotICAgICAgICAgICAgcmV0dXJuIGlu
dmVydCh1cm5nKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0
ZSh1cm5nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBy
YW5kb20gdmFyaWF0ZSBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlCi0gICAgICogcG9pc3Nv
biBkaXN0cmlidXRpb24gd2l0aCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBieSBwYXJhbS4KLSAgICAg
Ki8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBVUk5HPgotICAgIEludFR5cGUgb3BlcmF0b3IoKShVUk5H
JiB1cm5nLCBjb25zdCBwYXJhbV90eXBlJiBwYXJtKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIHBvaXNzb25fZGlzdHJpYnV0aW9uKHBhcm0pKHVybmcpOwotICAgIH0KLQotICAgIC8qKiBS
ZXR1cm5zIHRoZSAibWVhbiIgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAg
UmVhbFR5cGUgbWVhbigpIGNvbnN0IHsgcmV0dXJuIF9tZWFuOyB9Ci0gICAgCi0gICAgLyoqIFJl
dHVybnMgdGhlIHNtYWxsZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVj
ZS4gKi8KLSAgICBJbnRUeXBlIG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTigp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICAvKiogUmV0dXJucyB0aGUgbGFyZ2VzdCB2YWx1ZSB0
aGF0IHRoZSBkaXN0cmlidXRpb24gY2FuIHByb2R1Y2UuICovCi0gICAgSW50VHlwZSBtYXggQk9P
U1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04oKSBjb25zdAotICAgIHsgcmV0dXJuIChzdGQ6
Om51bWVyaWNfbGltaXRzPEludFR5cGU+OjptYXgpKCk7IH0KLQotICAgIC8qKiBSZXR1cm5zIHRo
ZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgcGFyYW1fdHlwZSBwYXJh
bSgpIGNvbnN0IHsgcmV0dXJuIHBhcmFtX3R5cGUoX21lYW4pOyB9Ci0gICAgLyoqIFNldHMgcGFy
YW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIHZvaWQgcGFyYW0oY29uc3QgcGFy
YW1fdHlwZSYgcGFybSkKLSAgICB7Ci0gICAgICAgIF9tZWFuID0gcGFybS5tZWFuKCk7Ci0gICAg
ICAgIGluaXQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFZmZlY3RzOiBTdWJzZXF1ZW50
IHVzZXMgb2YgdGhlIGRpc3RyaWJ1dGlvbiBkbyBub3QgZGVwZW5kCi0gICAgICogb24gdmFsdWVz
IHByb2R1Y2VkIGJ5IGFueSBlbmdpbmUgcHJpb3IgdG8gaW52b2tpbmcgcmVzZXQuCi0gICAgICov
Ci0gICAgdm9pZCByZXNldCgpIHsgfQotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9OT19TVFJFQU1f
T1BFUkFUT1JTCi0gICAgLyoqIFdyaXRlcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0
aW9uIHRvIGEgQGMgc3RkOjpvc3RyZWFtLiAqLwotICAgIHRlbXBsYXRlPGNsYXNzIENoYXJULCBj
bGFzcyBUcmFpdHM+Ci0gICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyVCxUcmFpdHM+
JgotICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPENoYXJULFRyYWl0cz4mIG9zLAot
ICAgICAgICAgICAgICAgY29uc3QgcG9pc3Nvbl9kaXN0cmlidXRpb24mIHBkKQotICAgIHsKLSAg
ICAgICAgb3MgPDwgcGQucGFyYW0oKTsKLSAgICAgICAgcmV0dXJuIG9zOwotICAgIH0KLSAgICAK
LSAgICAvKiogUmVhZHMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbiBmcm9tIGEg
QGMgc3RkOjppc3RyZWFtLiAqLwotICAgIHRlbXBsYXRlPGNsYXNzIENoYXJULCBjbGFzcyBUcmFp
dHM+Ci0gICAgZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxDaGFyVCxUcmFpdHM+JgotICAgIG9w
ZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPENoYXJULFRyYWl0cz4mIGlzLCBwb2lzc29uX2Rp
c3RyaWJ1dGlvbiYgcGQpCi0gICAgewotICAgICAgICBwZC5yZWFkKGlzKTsKLSAgICAgICAgcmV0
dXJuIGlzOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhl
IHR3byBkaXN0cmlidXRpb25zIHdpbGwgcHJvZHVjZSB0aGUgc2FtZQotICAgICAgICBzZXF1ZW5j
ZSBvZiB2YWx1ZXMsIGdpdmVuIGVxdWFsIGdlbmVyYXRvcnMuICovCi0gICAgZnJpZW5kIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBwb2lzc29uX2Rpc3RyaWJ1dGlvbiYgbGhzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgcG9pc3Nvbl9kaXN0cmlidXRpb24mIHJocykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBsaHMuX21lYW4gPT0gcmhzLl9tZWFuOwotICAgIH0KLSAgICAvKiogUmV0
dXJucyB0cnVlIGlmIHRoZSB0d28gZGlzdHJpYnV0aW9ucyBjb3VsZCBwcm9kdWNlIGRpZmZlcmVu
dAotICAgICAgICBzZXF1ZW5jZXMgb2YgdmFsdWVzLCBnaXZlbiBlcXVhbCBnZW5lcmF0b3JzLiAq
LwotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgcG9pc3Nvbl9kaXN0cmlidXRpb24m
IGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvaXNzb25fZGlzdHJpYnV0
aW9uJiByaHMpCi0gICAgewotICAgICAgICByZXR1cm4gIShsaHMgPT0gcmhzKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0KLSAgICAvLy8gQGNvbmQgc2hvd19wcml2YXRlCi0KLSAgICB0ZW1wbGF0ZTxj
bGFzcyBDaGFyVCwgY2xhc3MgVHJhaXRzPgotICAgIHZvaWQgcmVhZChzdGQ6OmJhc2ljX2lzdHJl
YW08Q2hhclQsIFRyYWl0cz4mIGlzKSB7Ci0gICAgICAgIHBhcmFtX3R5cGUgcGFybTsKLSAgICAg
ICAgaWYoaXMgPj4gcGFybSkgewotICAgICAgICAgICAgcGFyYW0ocGFybSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBib29sIHVzZV9pbnZlcnNpb24oKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIF9tZWFuIDwgMTA7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlYWxUeXBlIGxvZ19mYWN0
b3JpYWwoSW50VHlwZSBrKQotICAgIHsKLSAgICAgICAgQk9PU1RfQVNTRVJUKGsgPj0gMCk7Ci0g
ICAgICAgIEJPT1NUX0FTU0VSVChrIDwgMTApOwotICAgICAgICByZXR1cm4gZGV0YWlsOjpwb2lz
c29uX3RhYmxlPFJlYWxUeXBlPjo6dmFsdWVba107Ci0gICAgfQotCi0gICAgdm9pZCBpbml0KCkK
LSAgICB7Ci0gICAgICAgIHVzaW5nIHN0ZDo6c3FydDsKLSAgICAgICAgdXNpbmcgc3RkOjpleHA7
Ci0KLSAgICAgICAgaWYodXNlX2ludmVyc2lvbigpKSB7Ci0gICAgICAgICAgICBfZXhwX21lYW4g
PSBleHAoLV9tZWFuKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIF9wdHJkLnNtdSA9
IHNxcnQoX21lYW4pOwotICAgICAgICAgICAgX3B0cmQuYiA9IDAuOTMxICsgMi41MyAqIF9wdHJk
LnNtdTsKLSAgICAgICAgICAgIF9wdHJkLmEgPSAtMC4wNTkgKyAwLjAyNDgzICogX3B0cmQuYjsK
LSAgICAgICAgICAgIF9wdHJkLmludl9hbHBoYSA9IDEuMTIzOSArIDEuMTMyOCAvIChfcHRyZC5i
IC0gMy40KTsKLSAgICAgICAgICAgIF9wdHJkLnZfciA9IDAuOTI3NyAtIDMuNjIyNCAvIChfcHRy
ZC5iIC0gMik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8Y2xhc3MgVVJO
Rz4KLSAgICBJbnRUeXBlIGdlbmVyYXRlKFVSTkcmIHVybmcpIGNvbnN0Ci0gICAgewotICAgICAg
ICB1c2luZyBzdGQ6OmZsb29yOwotICAgICAgICB1c2luZyBzdGQ6OmFiczsKLSAgICAgICAgdXNp
bmcgc3RkOjpsb2c7Ci0KLSAgICAgICAgd2hpbGUodHJ1ZSkgewotICAgICAgICAgICAgUmVhbFR5
cGUgdTsKLSAgICAgICAgICAgIFJlYWxUeXBlIHYgPSB1bmlmb3JtXzAxPFJlYWxUeXBlPigpKHVy
bmcpOwotICAgICAgICAgICAgaWYodiA8PSAwLjg2ICogX3B0cmQudl9yKSB7Ci0gICAgICAgICAg
ICAgICAgdSA9IHYgLyBfcHRyZC52X3IgLSAwLjQzOwotICAgICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxJbnRUeXBlPihmbG9vcigKLSAgICAgICAgICAgICAgICAgICAgKDIqX3B0cmQu
YS8oMC41LWFicyh1KSkgKyBfcHRyZC5iKSp1ICsgX21lYW4gKyAwLjQ0NSkpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZih2ID49IF9wdHJkLnZfcikgewotICAgICAgICAgICAgICAg
IHUgPSB1bmlmb3JtXzAxPFJlYWxUeXBlPigpKHVybmcpIC0gMC41OwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICB1ID0gdi9fcHRyZC52X3IgLSAwLjkzOwotICAgICAgICAg
ICAgICAgIHUgPSAoKHUgPCAwKT8gLTAuNSA6IDAuNSkgLSB1OwotICAgICAgICAgICAgICAgIHYg
PSB1bmlmb3JtXzAxPFJlYWxUeXBlPigpKHVybmcpICogX3B0cmQudl9yOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBSZWFsVHlwZSB1cyA9IDAuNSAtIGFicyh1KTsKLSAgICAgICAgICAg
IGlmKHVzIDwgMC4wMTMgJiYgdiA+IHVzKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFJlYWxUeXBlIGsgPSBmbG9vcigoMipfcHRyZC5h
L3VzICsgX3B0cmQuYikqdStfbWVhbiswLjQ0NSk7Ci0gICAgICAgICAgICB2ID0gdipfcHRyZC5p
bnZfYWxwaGEvKF9wdHJkLmEvKHVzKnVzKSArIF9wdHJkLmIpOwotCi0gICAgICAgICAgICBSZWFs
VHlwZSBsb2dfc3FydF8ycGkgPSAwLjkxODkzODUzMzIwNDY3MjY3OwotCi0gICAgICAgICAgICBp
ZihrID49IDEwKSB7Ci0gICAgICAgICAgICAgICAgaWYobG9nKHYqX3B0cmQuc211KSA8PSAoayAr
IDAuNSkqbG9nKF9tZWFuL2spCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBfbWVh
bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gbG9nX3NxcnRfMnBpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKyBrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLSAoMS8xMi4gLSAoMS8zNjAuIC0gMS8oMTI2MC4qayprKSkvKGsqaykpL2spIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEludFR5cGU+KGspOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZihrID49IDApIHsKLSAgICAgICAgICAgICAg
ICBpZihsb2codikgPD0gaypsb2coX21lYW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAt
IF9tZWFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAtIGxvZ19mYWN0b3JpYWwoc3RhdGlj
X2Nhc3Q8SW50VHlwZT4oaykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxJbnRUeXBlPihrKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBVUk5HPgotICAgIEludFR5cGUgaW52
ZXJ0KFVSTkcmIHVybmcpIGNvbnN0Ci0gICAgewotICAgICAgICBSZWFsVHlwZSBwID0gX2V4cF9t
ZWFuOwotICAgICAgICBJbnRUeXBlIHggPSAwOwotICAgICAgICBSZWFsVHlwZSB1ID0gdW5pZm9y
bV8wMTxSZWFsVHlwZT4oKSh1cm5nKTsKLSAgICAgICAgd2hpbGUodSA+IHApIHsKLSAgICAgICAg
ICAgIHUgPSB1IC0gcDsKLSAgICAgICAgICAgICsreDsKLSAgICAgICAgICAgIHAgPSBfbWVhbiAq
IHAgLyB4OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB4OwotICAgIH0KLQotICAgIFJlYWxU
eXBlIF9tZWFuOwotCi0gICAgdW5pb24gewotICAgICAgICAvLyBmb3IgcHRyZAotICAgICAgICBz
dHJ1Y3QgewotICAgICAgICAgICAgUmVhbFR5cGUgdl9yOwotICAgICAgICAgICAgUmVhbFR5cGUg
YTsKLSAgICAgICAgICAgIFJlYWxUeXBlIGI7Ci0gICAgICAgICAgICBSZWFsVHlwZSBzbXU7Ci0g
ICAgICAgICAgICBSZWFsVHlwZSBpbnZfYWxwaGE7Ci0gICAgICAgIH0gX3B0cmQ7Ci0gICAgICAg
IC8vIGZvciBpbnZlcnNpb24KLSAgICAgICAgUmVhbFR5cGUgX2V4cF9tZWFuOwotICAgIH07Ci0K
LSAgICAvLy8gQGVuZGNvbmQKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotCi11c2luZyBy
YW5kb206OnBvaXNzb25fZGlzdHJpYnV0aW9uOwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0j
aW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9lbmFibGVfd2FybmluZ3MuaHBwPgotCi0jZW5k
aWYgLy8gQk9PU1RfUkFORE9NX1BPSVNTT05fRElTVFJJQlVUSU9OX0hQUApkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3JhbmRvbV9u
dW1iZXJfZ2VuZXJhdG9yLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3JhbmRvbS9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5ocHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGFjOTc1ZTMyOTg3ZGFjNGZhZmE0NGUwNzM2NjlmMjMxYTZkMTU4MGYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3JhbmRvbV9udW1iZXJfZ2Vu
ZXJhdG9yLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qIGJvb3N0IHJhbmRv
bS9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmln
aHQgSmVucyBNYXVyZXIgMjAwMC0yMDAxCi0gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxl
IExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNF
TlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJl
Y2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotICoKLSAqICRJZCQKLSAqCi0g
KiBSZXZpc2lvbiBoaXN0b3J5Ci0gKiAgMjAwMS0wMi0xOCAgbW92ZWQgdG8gaW5kaXZpZHVhbCBo
ZWFkZXIgZmlsZXMKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9SQU5ET01fTlVNQkVSX0dF
TkVSQVRPUl9IUFAKLSNkZWZpbmUgQk9PU1RfUkFORE9NX1JBTkRPTV9OVU1CRVJfR0VORVJBVE9S
X0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvYXNzZXJ0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5k
b20vdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3JhbmRv
bS9kZXRhaWwvZGlzYWJsZV93YXJuaW5ncy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1l
c3BhY2UgcmFuZG9tIHsKLQotLyoqCi0gKiBJbnN0YW50aWF0aW9ucyBvZiBjbGFzcyB0ZW1wbGF0
ZSByYW5kb21fbnVtYmVyX2dlbmVyYXRvciBtb2RlbCBhCi0gKiBSYW5kb21OdW1iZXJHZW5lcmF0
b3IgKHN0ZDoyNS4yLjExIFtsaWIuYWxnLnJhbmRvbS5zaHVmZmxlXSkuIE9uCi0gKiBlYWNoIGlu
dm9jYXRpb24sIGl0IHJldHVybnMgYSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgaW50ZWdlciBpbgot
ICogdGhlIHJhbmdlIFswLi5uKS4KLSAqCi0gKiBUaGUgdGVtcGxhdGUgcGFyYW1ldGVyIEludFR5
cGUgc2hhbGwgZGVub3RlIHNvbWUgaW50ZWdlci1saWtlIHZhbHVlIHR5cGUuCi0gKi8KLXRlbXBs
YXRlPGNsYXNzIFVSTkcsIGNsYXNzIEludFR5cGUgPSBsb25nPgotY2xhc3MgcmFuZG9tX251bWJl
cl9nZW5lcmF0b3IKLXsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIFVSTkcgYmFzZV90eXBlOwotICAg
IHR5cGVkZWYgSW50VHlwZSBhcmd1bWVudF90eXBlOwotICAgIHR5cGVkZWYgSW50VHlwZSByZXN1
bHRfdHlwZTsKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgcmFuZG9tX251bWJlcl9nZW5l
cmF0b3IgZnVuY3RvciB3aXRoIHRoZSBnaXZlbgotICAgICAqIFx1bmlmb3JtX3JhbmRvbV9udW1i
ZXJfZ2VuZXJhdG9yIGFzIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBvZgotICAgICAqIHJhbmRvbSBu
dW1iZXJzLgotICAgICAqLwotICAgIHJhbmRvbV9udW1iZXJfZ2VuZXJhdG9yKGJhc2VfdHlwZSYg
cm5nKSA6IF9ybmcocm5nKSB7fQotCi0gICAgLy8gY29tcGlsZXItZ2VuZXJhdGVkIGNvcHkgY3Rv
ciBpcyBmaW5lCi0gICAgLy8gYXNzaWdubWVudCBpcyBkaXNhbGxvd2VkIGJlY2F1c2UgdGhlcmUg
aXMgYSByZWZlcmVuY2UgbWVtYmVyCi0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgdmFsdWUg
aW4gdGhlIHJhbmdlIFswLCBuKQotICAgICAqLwotICAgIHJlc3VsdF90eXBlIG9wZXJhdG9yKCko
YXJndW1lbnRfdHlwZSBuKQotICAgIHsKLSAgICAgICAgQk9PU1RfQVNTRVJUKG4gPiAwKTsKLSAg
ICAgICAgcmV0dXJuIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxJbnRUeXBlPigwLCBuLTEpKF9y
bmcpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBiYXNlX3R5cGUmIF9ybmc7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSByYW5kb20KLQotdXNpbmcgcmFuZG9tOjpyYW5kb21fbnVtYmVyX2dlbmVyYXRv
cjsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRh
aWwvZW5hYmxlX3dhcm5pbmdzLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9SQU5ET01f
TlVNQkVSX0dFTkVSQVRPUl9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9yYW5sdXguaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3Jhbmx1eC5ocHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDgyYTdjYTY2ZjEyMjExOTFhOTM0NjIwMzFkNjA4NjAwMGRlMTRjMzMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3Jhbmx1eC5ocHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKiBib29zdCByYW5kb20vcmFubHV4LmhwcCBoZWFk
ZXIgZmlsZQotICoKLSAqIENvcHlyaWdodCBKZW5zIE1hdXJlciAyMDAyCi0gKiBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAq
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgot
ICoKLSAqICRJZCQKLSAqCi0gKiBSZXZpc2lvbiBoaXN0b3J5Ci0gKiAgMjAwMS0wMi0xOCAgY3Jl
YXRlZAotICovCi0KLSNpZm5kZWYgQk9PU1RfUkFORE9NX1JBTkxVWF9IUFAKLSNkZWZpbmUgQk9P
U1RfUkFORE9NX1JBTkxVWF9IUFAKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvcmFuZG9tL3N1YnRyYWN0X3dpdGhfY2FycnkuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L3JhbmRvbS9kaXNjYXJkX2Jsb2NrLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotbmFt
ZXNwYWNlIHJhbmRvbSB7Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotLyoqCi0gKiBUaGUgcmFubHV4
IGZhbWlseSBvZiBnZW5lcmF0b3JzIGFyZSBkZXNjcmliZWQgaW4KLSAqCi0gKiAgQGJsb2NrcXVv
dGUKLSAqICAiQSBwb3J0YWJsZSBoaWdoLXF1YWxpdHkgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Ig
Zm9yIGxhdHRpY2UgZmllbGQgdGhlb3J5Ci0gKiAgY2FsY3VsYXRpb25zIiwgTS4gTHVlc2NoZXIs
IENvbXB1dGVyIFBoeXNpY3MgQ29tbXVuaWNhdGlvbnMsIDc5ICgxOTk0KQotICogIHBwIDEwMC0x
MTAuIAotICogIEBlbmRibG9ja3F1b3RlCi0gKgotICogVGhlIGxldmVscyBhcmUgZ2l2ZW4gaW4K
LSAqIAotICogIEBibG9ja3F1b3RlCi0gKiAgIlJBTkxVWDogQSBGb3J0cmFuIGltcGxlbWVudGF0
aW9uIG9mIHRoZSBoaWdoLXF1YWxpdHkKLSAqICBwc2V1ZG9yYW5kb20gbnVtYmVyIGdlbmVyYXRv
ciBvZiBMdWVzY2hlciIsIEYuIEphbWVzLAotICogIENvbXB1dGVyIFBoeXNpY3MgQ29tbXVuaWNh
dGlvbnMgNzkgKDE5OTQpIDExMS0xMTQKLSAqICBAZW5kYmxvY2txdW90ZQotICovCi1jbGFzcyBy
YW5sdXhfZG9jdW1lbnRhdGlvbiB7fTsKLX0KLQotdHlwZWRlZiBzdWJ0cmFjdF93aXRoX2NhcnJ5
X2VuZ2luZTx1aW50MzJfdCwgMjQsIDEwLCAyND4gcmFubHV4X2Jhc2U7Ci10eXBlZGVmIHN1YnRy
YWN0X3dpdGhfY2FycnlfMDFfZW5naW5lPGZsb2F0LCAyNCwgMTAsIDI0PiByYW5sdXhfYmFzZV8w
MTsKLXR5cGVkZWYgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMV9lbmdpbmU8ZG91YmxlLCA0OCwgMTAs
IDI0PiByYW5sdXg2NF9iYXNlXzAxOwotCi0KLS8qKiBAY29weWRvYyBib29zdDo6cmFuZG9tOjpk
ZXRhaWw6OnJhbmx1eF9kb2N1bWVudGF0aW9uICovCi10eXBlZGVmIGRpc2NhcmRfYmxvY2tfZW5n
aW5lPHJhbmx1eF9iYXNlLCAyMjMsIDI0PiByYW5sdXgzOwotLyoqIEBjb3B5ZG9jIGJvb3N0Ojpy
YW5kb206OmRldGFpbDo6cmFubHV4X2RvY3VtZW50YXRpb24gKi8KLXR5cGVkZWYgZGlzY2FyZF9i
bG9ja19lbmdpbmU8cmFubHV4X2Jhc2UsIDM4OSwgMjQ+IHJhbmx1eDQ7Ci0KLS8qKiBAY29weWRv
YyBib29zdDo6cmFuZG9tOjpkZXRhaWw6OnJhbmx1eF9kb2N1bWVudGF0aW9uICovCi10eXBlZGVm
IGRpc2NhcmRfYmxvY2tfZW5naW5lPHJhbmx1eF9iYXNlXzAxLCAyMjMsIDI0PiByYW5sdXgzXzAx
OwotLyoqIEBjb3B5ZG9jIGJvb3N0OjpyYW5kb206OmRldGFpbDo6cmFubHV4X2RvY3VtZW50YXRp
b24gKi8KLXR5cGVkZWYgZGlzY2FyZF9ibG9ja19lbmdpbmU8cmFubHV4X2Jhc2VfMDEsIDM4OSwg
MjQ+IHJhbmx1eDRfMDE7Ci0KLS8qKiBAY29weWRvYyBib29zdDo6cmFuZG9tOjpkZXRhaWw6OnJh
bmx1eF9kb2N1bWVudGF0aW9uICovCi10eXBlZGVmIGRpc2NhcmRfYmxvY2tfZW5naW5lPHJhbmx1
eDY0X2Jhc2VfMDEsIDIyMywgMjQ+IHJhbmx1eDY0XzNfMDE7Ci0vKiogQGNvcHlkb2MgYm9vc3Q6
OnJhbmRvbTo6ZGV0YWlsOjpyYW5sdXhfZG9jdW1lbnRhdGlvbiAqLwotdHlwZWRlZiBkaXNjYXJk
X2Jsb2NrX2VuZ2luZTxyYW5sdXg2NF9iYXNlXzAxLCAzODksIDI0PiByYW5sdXg2NF80XzAxOwot
Ci0jaWYgIWRlZmluZWQoQk9PU1RfTk9fSU5UNjRfVCkgJiYgIWRlZmluZWQoQk9PU1RfTk9fSU5U
RUdSQUxfSU5UNjRfVCkKLXR5cGVkZWYgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU8dWludDY0
X3QsIDQ4LCAxMCwgMjQ+IHJhbmx1eDY0X2Jhc2U7Ci0vKiogQGNvcHlkb2MgYm9vc3Q6OnJhbmRv
bTo6ZGV0YWlsOjpyYW5sdXhfZG9jdW1lbnRhdGlvbiAqLwotdHlwZWRlZiBkaXNjYXJkX2Jsb2Nr
X2VuZ2luZTxyYW5sdXg2NF9iYXNlLCAyMjMsIDI0PiByYW5sdXg2NF8zOwotLyoqIEBjb3B5ZG9j
IGJvb3N0OjpyYW5kb206OmRldGFpbDo6cmFubHV4X2RvY3VtZW50YXRpb24gKi8KLXR5cGVkZWYg
ZGlzY2FyZF9ibG9ja19lbmdpbmU8cmFubHV4NjRfYmFzZSwgMzg5LCAyND4gcmFubHV4NjRfNDsK
LSNlbmRpZiAvKiAhQk9PU1RfTk9fSU5UNjRfVCAmJiAhQk9PU1RfTk9fSU5URUdSQUxfSU5UNjRf
VCAqLwotCi0KLXR5cGVkZWYgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU8dWludDMyX3QsIDI0
LCAxMCwgMjQ+IHJhbmx1eDI0X2Jhc2U7Ci10eXBlZGVmIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5n
aW5lPHVpbnQ2NF90LCA0OCwgNSwgMTI+IHJhbmx1eDQ4X2Jhc2U7Ci0KLXR5cGVkZWYgZGlzY2Fy
ZF9ibG9ja19lbmdpbmU8cmFubHV4MjRfYmFzZSwgMjIzLCAyMz4gcmFubHV4MjQ7Ci0jaWYgIWRl
ZmluZWQoQk9PU1RfTk9fSU5UNjRfVCkgJiYgIWRlZmluZWQoQk9PU1RfTk9fSU5URUdSQUxfSU5U
NjRfVCkKLXR5cGVkZWYgZGlzY2FyZF9ibG9ja19lbmdpbmU8cmFubHV4NDhfYmFzZSwgMzg5LCAx
MT4gcmFubHV4NDg7Ci0jZW5kaWYKLX0KLQotdXNpbmcgcmFuZG9tOjpyYW5sdXgzOwotdXNpbmcg
cmFuZG9tOjpyYW5sdXg0OwotdXNpbmcgcmFuZG9tOjpyYW5sdXgzXzAxOwotdXNpbmcgcmFuZG9t
OjpyYW5sdXg0XzAxOwotdXNpbmcgcmFuZG9tOjpyYW5sdXg2NF8zXzAxOwotdXNpbmcgcmFuZG9t
OjpyYW5sdXg2NF80XzAxOwotI2lmICFkZWZpbmVkKEJPT1NUX05PX0lOVDY0X1QpICYmICFkZWZp
bmVkKEJPT1NUX05PX0lOVEVHUkFMX0lOVDY0X1QpCi11c2luZyByYW5kb206OnJhbmx1eDY0XzM7
Ci11c2luZyByYW5kb206OnJhbmx1eDY0XzQ7Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgYm9v
c3QKLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9MSU5FQVJfQ09OR1JVRU5USUFMX0hQUApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9t
L3NlZWRfc2VxLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3JhbmRvbS9zZWVkX3NlcS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NmFl
ZjRmNWU1NDljZGRhYWMzYmI4OTk0ZDBiOGQ5N2U3M2FkYTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvcmFuZG9tL3NlZWRfc2VxLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDExOCAr
MCwwIEBACi0vKiBib29zdCByYW5kb20vc2VlZF9zZXEuaHBwIGhlYWRlciBmaWxlCi0gKgotICog
Q29weXJpZ2h0IFN0ZXZlbiBXYXRhbmFiZSAyMDEwCi0gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBt
b3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotICoKLSAqICRJZCQK
LSAqCi0gKi8KLQotI2lmbmRlZiBCT09TVF9SQU5ET01fU0VFRF9TRVFfSFBQCi0jZGVmaW5lIEJP
T1NUX1JBTkRPTV9TRUVEX1NFUV9IUFAKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvY3N0ZGludC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZ2UvYmVnaW4u
aHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL2VuZC5ocHA+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4K
LSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGl0ZXJh
dG9yPgotCi0jaWZuZGVmIEJPT1NUX05PX0NYWDExX0hEUl9JTklUSUFMSVpFUl9MSVNUCi0jaW5j
bHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFt
ZXNwYWNlIHJhbmRvbSB7Ci0KLS8qKgotICogVGhlIGNsYXNzIEBjIHNlZWRfc2VxIHN0b3JlcyBh
IHNlcXVlbmNlIG9mIDMyLWJpdCB3b3JkcwotICogZm9yIHNlZWRpbmcgYSBccHNldWRvX3JhbmRv
bV9udW1iZXJfZ2VuZXJhdG9yLiAgVGhlc2UKLSAqIHdvcmRzIHdpbGwgYmUgY29tYmluZWQgdG8g
ZmlsbCB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZQotICogZ2VuZXJhdG9yLgotICovCi1jbGFzcyBz
ZWVkX3NlcSB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBib29zdDo6dWludF9sZWFzdDMyX3QgcmVz
dWx0X3R5cGU7Ci0KLSAgICAvKiogSW5pdGlhbGl6ZXMgYSBzZWVkX3NlcSB0byBob2xkIGFuIGVt
cHR5IHNlcXVlbmNlLiAqLwotICAgIHNlZWRfc2VxKCkge30KLSNpZm5kZWYgQk9PU1RfTk9fQ1hY
MTFfSERSX0lOSVRJQUxJWkVSX0xJU1QKLSAgICAvKiogSW5pdGlhbGl6ZXMgdGhlIHNlcXVlbmNl
IGZyb20gYW4gaW5pdGlhbGl6ZXJfbGlzdC4gKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAg
IHNlZWRfc2VxKGNvbnN0IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiYgaWwpIDogdihpbC5iZWdp
bigpLCBpbC5lbmQoKSkge30KLSNlbmRpZgotICAgIC8qKiBJbml0aWFsaXplcyB0aGUgc2VxdWVu
Y2UgZnJvbSBhbiBpdGVyYXRvciByYW5nZS4gKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBJdGVyPgot
ICAgIHNlZWRfc2VxKEl0ZXIgZmlyc3QsIEl0ZXIgbGFzdCkgOiB2KGZpcnN0LCBsYXN0KSB7fQot
ICAgIC8qKiBJbml0aWFsaXplcyB0aGUgc2VxdWVuY2UgZnJvbSBCb29zdC5SYW5nZSByYW5nZS4g
Ki8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBSYW5nZT4KLSAgICBleHBsaWNpdCBzZWVkX3NlcShjb25z
dCBSYW5nZSYgcmFuZ2UpCi0gICAgICA6IHYoYm9vc3Q6OmJlZ2luKHJhbmdlKSwgYm9vc3Q6OmVu
ZChyYW5nZSkpIHt9Ci0KLSAgICAvKioKLSAgICAgKiBGaWxscyBhIHJhbmdlIHdpdGggMzItYml0
IHZhbHVlcyBiYXNlZCBvbiB0aGUgc3RvcmVkIHNlcXVlbmNlLgotICAgICAqCi0gICAgICogUmVx
dWlyZXM6IEl0ZXIgbXVzdCBiZSBhIFJhbmRvbSBBY2Nlc3MgSXRlcmF0b3Igd2hvc2UgdmFsdWUg
dHlwZQotICAgICAqIGlzIGFuIHVuc2lnbmVkIGludGVncmFsIHR5cGUgYXQgbGVhc3QgMzIgYml0
cyB3aWRlLgotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIEl0ZXI+Ci0gICAgdm9pZCBnZW5l
cmF0ZShJdGVyIGZpcnN0LCBJdGVyIGxhc3QpIGNvbnN0Ci0gICAgewotICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXI+Ojp2YWx1ZV90eXBlIHZhbHVlX3R5
cGU7Ci0gICAgICAgIHN0ZDo6ZmlsbChmaXJzdCwgbGFzdCwgc3RhdGljX2Nhc3Q8dmFsdWVfdHlw
ZT4oMHg4YjhiOGI4YnUpKTsKLSAgICAgICAgc3RkOjpzaXplX3QgcyA9IHYuc2l6ZSgpOwotICAg
ICAgICBzdGQ6OnNpemVfdCBuID0gbGFzdCAtIGZpcnN0OwotICAgICAgICBzdGQ6OnNpemVfdCB0
ID0KLSAgICAgICAgICAgIChuID49IDYyMykgPyAxMSA6Ci0gICAgICAgICAgICAobiA+PSAgNjgp
ID8gIDcgOgotICAgICAgICAgICAgKG4gPj0gIDM5KSA/ICA1IDoKLSAgICAgICAgICAgIChuID49
ICAgNykgPyAgMyA6Ci0gICAgICAgICAgICAobiAtIDEpLzI7Ci0gICAgICAgIHN0ZDo6c2l6ZV90
IHAgPSAobiAtIHQpIC8gMjsKLSAgICAgICAgc3RkOjpzaXplX3QgcSA9IHAgKyB0OwotICAgICAg
ICBzdGQ6OnNpemVfdCBtID0gKHN0ZDo6bWF4KShzKzEsIG4pOwotICAgICAgICB2YWx1ZV90eXBl
IG1hc2sgPSAweGZmZmZmZmZmdTsKLSAgICAgICAgZm9yKHN0ZDo6c2l6ZV90IGsgPSAwOyBrIDwg
bTsgKytrKSB7Ci0gICAgICAgICAgICB2YWx1ZV90eXBlIHIxID0gc3RhdGljX2Nhc3Q8dmFsdWVf
dHlwZT4KLSAgICAgICAgICAgICAgICAoKihmaXJzdCArIGslbikgXiAqKGZpcnN0ICsgKGsrcCkl
bikgXiAqKGZpcnN0ICsgKGsrbi0xKSVuKSk7Ci0gICAgICAgICAgICByMSA9IHIxIF4gKHIxID4+
IDI3KTsKLSAgICAgICAgICAgIHIxID0gKHIxICogMTY2NDUyNXUpICYgbWFzazsKLSAgICAgICAg
ICAgIHZhbHVlX3R5cGUgcjIgPSBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihyMSArCi0gICAgICAg
ICAgICAgICAgKChrID09IDApID8gcyA6Ci0gICAgICAgICAgICAgICAgIChrIDw9IHMpID8gayAl
IG4gKyB2W2sgLSAxXSA6Ci0gICAgICAgICAgICAgICAgIChrICUgbikpKTsKLSAgICAgICAgICAg
ICooZmlyc3QgKyAoaytwKSVuKSA9ICgqKGZpcnN0ICsgKGsrcCklbikgKyByMSkgJiBtYXNrOwot
ICAgICAgICAgICAgKihmaXJzdCArIChrK3EpJW4pID0gKCooZmlyc3QgKyAoaytxKSVuKSArIHIy
KSAmIG1hc2s7Ci0gICAgICAgICAgICAqKGZpcnN0ICsgayVuKSA9IHIyOwotICAgICAgICB9Ci0g
ICAgICAgIGZvcihzdGQ6OnNpemVfdCBrID0gbTsgayA8IG0gKyBuOyArK2spIHsKLSAgICAgICAg
ICAgIHZhbHVlX3R5cGUgcjMgPSBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPgotICAgICAgICAgICAg
ICAgICgoKihmaXJzdCArIGslbikgKyAqKGZpcnN0ICsgKGsrcCklbikgKyAqKGZpcnN0ICsgKGsr
bi0xKSVuKSkKLSAgICAgICAgICAgICAgICAmIG1hc2spOwotICAgICAgICAgICAgcjMgPSByMyBe
IChyMyA+PiAyNyk7Ci0gICAgICAgICAgICByMyA9IChyMyAqIDE1NjYwODM5NDF1KSAmIG1hc2s7
Ci0gICAgICAgICAgICB2YWx1ZV90eXBlIHI0ID0gc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4ocjMg
LSBrJW0pOwotICAgICAgICAgICAgKihmaXJzdCArIChrK3ApJW4pIF49IHIzOwotICAgICAgICAg
ICAgKihmaXJzdCArIChrK3EpJW4pIF49IHI0OwotICAgICAgICAgICAgKihmaXJzdCArIGslbikg
PSByNDsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUg
c2VxdWVuY2UuICovCi0gICAgc3RkOjpzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHYuc2l6
ZSgpOyB9Ci0gICAgLyoqIFdyaXRlcyB0aGUgc3RvcmVkIHNlcXVlbmNlIHRvIGl0ZXIuICovCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgSXRlcj4KLSAgICB2b2lkIHBhcmFtKEl0ZXIgb3V0KSB7IHN0ZDo6
Y29weSh2LmJlZ2luKCksIHYuZW5kKCksIG91dCk7IH0KLXByaXZhdGU6Ci0gICAgc3RkOjp2ZWN0
b3I8cmVzdWx0X3R5cGU+IHY7Ci19OwotCi19Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3NodWZmbGVfb3Jk
ZXIuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9t
L3NodWZmbGVfb3JkZXIuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDY0NTMw
M2U4MGE1ODhhYTgzMTI1N2IwY2ZhMzViOWEyOTRhNjAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3JhbmRvbS9zaHVmZmxlX29yZGVyLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2
OSArMCwwIEBACi0vKiBib29zdCByYW5kb20vc2h1ZmZsZV9vcmRlci5ocHAgaGVhZGVyIGZpbGUK
LSAqCi0gKiBDb3B5cmlnaHQgSmVucyBNYXVyZXIgMjAwMC0yMDAxCi0gKiBDb3B5cmlnaHQgU3Rl
dmVuIFdhdGFuYWJlIDIwMTAKLSAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotICogYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQKLSAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkKLSAqCi0gKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZl
cnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0gKgotICogJElkJAotICoKLSAqLwotCi0j
aWZuZGVmIEJPT1NUX1JBTkRPTV9TSFVGRkxFX09SREVSX0hQUAotI2RlZmluZSBCT09TVF9SQU5E
T01fU0hVRkZMRV9PUkRFUl9IUFAKLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPGFs
Z29yaXRobT4gICAgIC8vIHN0ZDo6Y29weQotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8
Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L3N0YXRpY19hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2NzdGRpbnQuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvb3BlcmF0b3JzLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9yYW5kb20vZGV0YWlsL3NlZWQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRh
aWwvc2lnbmVkX3Vuc2lnbmVkX3Rvb2xzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vbGlu
ZWFyX2NvbmdydWVudGlhbC5ocHA+Ci0KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2Rp
c2FibGVfd2FybmluZ3MuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRv
bSB7Ci0KLS8qKgotICogSW5zdGF0aWF0aW9ucyBvZiBjbGFzcyB0ZW1wbGF0ZSBAYyBzaHVmZmxl
X29yZGVyX2VuZ2luZSBtb2RlbCBhCi0gKiBccHNldWRvX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9y
LiBJdCBtaXhlcyB0aGUgb3V0cHV0Ci0gKiBvZiBzb21lICh1c3VhbGx5IFxsaW5lYXJfY29uZ3J1
ZW50aWFsX2VuZ2luZSkKLSAqIFx1bmlmb3JtX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yIHRvIGdl
dCBiZXR0ZXIgc3RhdGlzdGljYWwgcHJvcGVydGllcy4KLSAqIFRoZSBhbGdvcml0aG0gaXMgZGVz
Y3JpYmVkIGluCi0gKgotICogIEBibG9ja3F1b3RlCi0gKiAgIkltcHJvdmluZyBhIHBvb3IgcmFu
ZG9tIG51bWJlciBnZW5lcmF0b3IiLCBDYXJ0ZXIgQmF5cwotICogIGFuZCBTLkQuIER1cmhhbSwg
QUNNIFRyYW5zYWN0aW9ucyBvbiBNYXRoZW1hdGljYWwgU29mdHdhcmUsCi0gKiAgVm9sIDIsIE5v
LiAxLCBNYXJjaCAxOTc2LCBwcC4gNTktNjQuCi0gKiAgaHR0cDovL2RvaS5hY20ub3JnLzEwLjEx
NDUvMzU1NjY2LjM1NTY3MAotICogIEBlbmRibG9ja3F1b3RlCi0gKgotICogVGhlIG91dHB1dCBv
ZiB0aGUgYmFzZSBnZW5lcmF0b3IgaXMgYnVmZmVyZWQgaW4gYW4gYXJyYXkgb2YKLSAqIGxlbmd0
aCBrLiBFdmVyeSBvdXRwdXQgWChuKSBoYXMgYSBzZWNvbmQgcm9sZTogSXQgZ2l2ZXMgYW4KLSAq
IGluZGV4IGludG8gdGhlIGFycmF5IHdoZXJlIFgobisxKSB3aWxsIGJlIHJldHJpZXZlZC4gVXNl
ZAotICogYXJyYXkgZWxlbWVudHMgYXJlIHJlcGxhY2VkIHdpdGggZnJlc2ggb3V0cHV0IGZyb20g
dGhlIGJhc2UKLSAqIGdlbmVyYXRvci4KLSAqCi0gKiBUZW1wbGF0ZSBwYXJhbWV0ZXJzIGFyZSB0
aGUgYmFzZSBnZW5lcmF0b3IgYW5kIHRoZSBhcnJheQotICogbGVuZ3RoIGssIHdoaWNoIHNob3Vs
ZCBiZSBhcm91bmQgMTAwLgotICovCi10ZW1wbGF0ZTxjbGFzcyBVbmlmb3JtUmFuZG9tTnVtYmVy
R2VuZXJhdG9yLCBzdGQ6OnNpemVfdCBrPgotY2xhc3Mgc2h1ZmZsZV9vcmRlcl9lbmdpbmUKLXsK
LXB1YmxpYzoKLSAgICB0eXBlZGVmIFVuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IgYmFzZV90
eXBlOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpyZXN1bHRfdHlwZSByZXN1bHRf
dHlwZTsKLQotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCBoYXNfZml4ZWRfcmFuZ2Ug
PSBmYWxzZSk7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCBidWZmZXJf
c2l6ZSA9IGspOwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgdGFibGVf
c2l6ZSA9IGspOwotCi0gICAgQk9PU1RfU1RBVElDX0FTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRz
PHJlc3VsdF90eXBlPjo6aXNfaW50ZWdlcik7Ci0gICAgQk9PU1RfU1RBVElDX0FTU0VSVChrID4g
MCk7Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgQGMgc2h1ZmZsZV9vcmRlcl9lbmdp
bmUgYnkgaW52b2tpbmcgdGhlCi0gICAgICogZGVmYXVsdCBjb25zdHJ1Y3RvciBvZiB0aGUgYmFz
ZSBnZW5lcmF0b3IuCi0gICAgICoKLSAgICAgKiBDb21wbGV4aXR5OiBFeGFjdGx5IGsrMSBpbnZv
Y2F0aW9ucyBvZiB0aGUgYmFzZSBnZW5lcmF0b3IuCi0gICAgICovCi0gICAgc2h1ZmZsZV9vcmRl
cl9lbmdpbmUoKSA6IF9ybmcoKSB7IGluaXQoKTsgfQotICAgIC8qKgotICAgICAqIENvbnN0cnVj
dHMgYSBAYyBzaHVmZmxlX291dHB1dF9lbmdpbmUgYnkgaW52b2tpbmcgdGhlIG9uZS1hcmd1bWVu
dAotICAgICAqIGNvbnN0cnVjdG9yIG9mIHRoZSBiYXNlIGdlbmVyYXRvciB3aXRoIHRoZSBwYXJh
bWV0ZXIgc2VlZC4KLSAgICAgKgotICAgICAqIENvbXBsZXhpdHk6IEV4YWN0bHkgaysxIGludm9j
YXRpb25zIG9mIHRoZSBiYXNlIGdlbmVyYXRvci4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01f
REVUQUlMX0FSSVRITUVUSUNfQ09OU1RSVUNUT1Ioc2h1ZmZsZV9vcmRlcl9lbmdpbmUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF90eXBlLCBz
KQotICAgIHsgX3JuZy5zZWVkKHMpOyBpbml0KCk7IH0KLSAgICBCT09TVF9SQU5ET01fREVUQUlM
X1NFRURfU0VRX0NPTlNUUlVDVE9SKHNodWZmbGVfb3JkZXJfZW5naW5lLCBTZWVkU2VxLCBzZXEp
Ci0gICAgeyBfcm5nLnNlZWQoc2VxKTsgaW5pdCgpOyB9Ci0gICAgLyoqCi0gICAgICogQ29uc3Ry
dWN0cyBhIEBjIHNodWZmbGVfb3V0cHV0X2VuZ2luZSBieSB1c2luZyBhIGNvcHkKLSAgICAgKiBv
ZiB0aGUgcHJvdmlkZWQgZ2VuZXJhdG9yLgotICAgICAqCi0gICAgICogUHJlY29uZGl0aW9uOiBU
aGUgdGVtcGxhdGUgYXJndW1lbnQgVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcgotICAgICAq
IHNoYWxsIGRlbm90ZSBhIENvcHlDb25zdHJ1Y3RpYmxlIHR5cGUuCi0gICAgICoKLSAgICAgKiBD
b21wbGV4aXR5OiBFeGFjdGx5IGsrMSBpbnZvY2F0aW9ucyBvZiB0aGUgYmFzZSBnZW5lcmF0b3Iu
Ci0gICAgICovCi0gICAgZXhwbGljaXQgc2h1ZmZsZV9vcmRlcl9lbmdpbmUoY29uc3QgYmFzZV90
eXBlICYgcm5nKSA6IF9ybmcocm5nKSB7IGluaXQoKTsgfQotCi0jaWZuZGVmIEJPT1NUX05PX0NY
WDExX1JWQUxVRV9SRUZFUkVOQ0VTCi0gICAgZXhwbGljaXQgc2h1ZmZsZV9vcmRlcl9lbmdpbmUo
YmFzZV90eXBlJiYgcm5nKSA6IF9ybmcocm5nKSB7IGluaXQoKTsgfQotI2VuZGlmCi0KLSAgICB0
ZW1wbGF0ZTxjbGFzcyBJdD4gc2h1ZmZsZV9vcmRlcl9lbmdpbmUoSXQmIGZpcnN0LCBJdCBsYXN0
KQotICAgICAgOiBfcm5nKGZpcnN0LCBsYXN0KSB7IGluaXQoKTsgfQotICAgIHZvaWQgc2VlZCgp
IHsgX3JuZy5zZWVkKCk7IGluaXQoKTsgfQotICAgIC8qKgotICAgICAqIEludm9rZXMgdGhlIG9u
ZS1hcmd1bWVudCBzZWVkIG1ldGhvZCBvZiB0aGUgYmFzZSBnZW5lcmF0b3IKLSAgICAgKiB3aXRo
IHRoZSBwYXJhbWV0ZXIgc2VlZCBhbmQgcmUtaW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIGJ1ZmZl
ciBhcnJheS4KLSAgICAgKgotICAgICAqIENvbXBsZXhpdHk6IEV4YWN0bHkgaysxIGludm9jYXRp
b25zIG9mIHRoZSBiYXNlIGdlbmVyYXRvci4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVU
QUlMX0FSSVRITUVUSUNfU0VFRChzaHVmZmxlX29yZGVyX2VuZ2luZSwKLSAgICAgICAgcmVzdWx0
X3R5cGUsIHNlZWRfYXJnKQotICAgIHsgX3JuZy5zZWVkKHNlZWRfYXJnKTsgaW5pdCgpOyB9Ci0g
ICAgLyoqCi0gICAgICogSW52b2tlcyB0aGUgb25lLWFyZ3VtZW50IHNlZWQgbWV0aG9kIG9mIHRo
ZSBiYXNlIGdlbmVyYXRvcgotICAgICAqIHdpdGggdGhlIHBhcmFtZXRlciBzZXEgYW5kIHJlLWlu
aXRpYWxpemVzIHRoZSBpbnRlcm5hbCBidWZmZXIgYXJyYXkuCi0gICAgICoKLSAgICAgKiBDb21w
bGV4aXR5OiBFeGFjdGx5IGsrMSBpbnZvY2F0aW9ucyBvZiB0aGUgYmFzZSBnZW5lcmF0b3IuCi0g
ICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9TRUVEX1NFUV9TRUVEKHNodWZmbGVfb3Jk
ZXJfZW5naW5lLCBTZWVkU2VxLCBzZXEpCi0gICAgeyBfcm5nLnNlZWQoc2VxKTsgaW5pdCgpOyB9
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+IHZvaWQgc2VlZChJdCYgZmlyc3QsIEl0IGxhc3QpCi0g
ICAgeyBfcm5nLnNlZWQoZmlyc3QsIGxhc3QpOyBpbml0KCk7IH0KLQotICAgIGNvbnN0IGJhc2Vf
dHlwZSYgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9ybmc7IH0KLQotICAgIHJlc3VsdF90eXBlIG9w
ZXJhdG9yKCkoKSB7Ci0gICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSByYW5nZSBldmVyeSB0aW1l
IG1heSBzZWVtIHdhc3RlZnVsLiAgSG93ZXZlciwgdGhpcwotICAgICAgICAvLyBtYWtlcyB0aGUg
aW5mb3JtYXRpb24gbG9jYWxseSBhdmFpbGFibGUgZm9yIHRoZSBvcHRpbWl6ZXIuCi0gICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OnJhbmRvbTo6dHJhaXRzOjptYWtlX3Vuc2lnbmVkPHJl
c3VsdF90eXBlPjo6dHlwZSBiYXNlX3Vuc2lnbmVkOwotICAgICAgICBjb25zdCBiYXNlX3Vuc2ln
bmVkIGJyYW5nZSA9Ci0gICAgICAgICAgICBkZXRhaWw6OnN1YnRyYWN0PHJlc3VsdF90eXBlPigp
KChtYXgpKCksIChtaW4pKCkpOwotICAgICAgICBjb25zdCBiYXNlX3Vuc2lnbmVkIG9mZiA9Ci0g
ICAgICAgICAgICBkZXRhaWw6OnN1YnRyYWN0PHJlc3VsdF90eXBlPigpKHksIChtaW4pKCkpOwot
Ci0gICAgICAgIGJhc2VfdW5zaWduZWQgajsKLSAgICAgICAgaWYoayA9PSAxKSB7Ci0gICAgICAg
ICAgICBqID0gMDsKLSAgICAgICAgfSBlbHNlIGlmKGJyYW5nZSA8IChzdGQ6Om51bWVyaWNfbGlt
aXRzPGJhc2VfdW5zaWduZWQ+OjptYXgpKCkgLyBrKSB7Ci0gICAgICAgICAgICAvLyB0cnkgdG8g
ZG8gaXQgaW4gdGhlIG5hdGl2ZSB0eXBlIGlmIHdlIGtub3cgdGhhdCBpdCB3b24ndAotICAgICAg
ICAgICAgLy8gb3ZlcmZsb3cKLSAgICAgICAgICAgIGogPSBrICogb2ZmIC8gKGJyYW5nZSArIDEp
OwotICAgICAgICB9IGVsc2UgaWYoYnJhbmdlIDwgKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludG1h
eF90Pjo6bWF4KSgpIC8gaykgewotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRyeSB0byB1c2Ug
dWludDY0X3QKLSAgICAgICAgICAgIGogPSBzdGF0aWNfY2FzdDxiYXNlX3Vuc2lnbmVkPigKLSAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KG9mZikgKiBrIC8KLSAgICAgICAg
ICAgICAgICAoc3RhdGljX2Nhc3Q8dWludG1heF90PihicmFuZ2UpICsgMSkpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgYm9vc3Q6OnVpbnRtYXhfdCBkaXZpc29yID0KLSAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxib29zdDo6dWludG1heF90PihicmFuZ2UpICsgMTsKLSAgICAg
ICAgICAgIGogPSBzdGF0aWNfY2FzdDxiYXNlX3Vuc2lnbmVkPihkZXRhaWw6Om11bGRpdihvZmYs
IGssIGRpdmlzb3IpKTsKLSAgICAgICAgfQotICAgICAgICAvLyBhc3NlcnQoMCA8PSBqICYmIGog
PCBrKTsKLSAgICAgICAgeSA9IHZbal07Ci0gICAgICAgIHZbal0gPSBfcm5nKCk7Ci0gICAgICAg
IHJldHVybiB5OwotICAgIH0KLQotICAgIC8qKiBBZHZhbmNlcyB0aGUgZ2VuZXJhdG9yIGJ5IHog
c3RlcHMuICovCi0gICAgdm9pZCBkaXNjYXJkKGJvb3N0Ojp1aW50bWF4X3QgeikKLSAgICB7Ci0g
ICAgICAgIGZvcihib29zdDo6dWludG1heF90IGogPSAwOyBqIDwgejsgKytqKSB7Ci0gICAgICAg
ICAgICAoKnRoaXMpKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogRmlsbHMgYSByYW5n
ZSB3aXRoIHBzZXVkby1yYW5kb20gdmFsdWVzLiAqLwotICAgIHRlbXBsYXRlPGNsYXNzIEl0ZXI+
Ci0gICAgdm9pZCBnZW5lcmF0ZShJdGVyIGZpcnN0LCBJdGVyIGxhc3QpCi0gICAgeyBkZXRhaWw6
OmdlbmVyYXRlX2Zyb21faW50KCp0aGlzLCBmaXJzdCwgbGFzdCk7IH0KLQotICAgIC8qKiBSZXR1
cm5zIHRoZSBzbWFsbGVzdCB2YWx1ZSB0aGF0IHRoZSBnZW5lcmF0b3IgY2FuIHByb2R1Y2UuICov
Ci0gICAgc3RhdGljIHJlc3VsdF90eXBlIG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRV
VElPTiAoKQotICAgIHsgcmV0dXJuIChiYXNlX3R5cGU6Om1pbikoKTsgfQotICAgIC8qKiBSZXR1
cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgdGhlIGdlbmVyYXRvciBjYW4gcHJvZHVjZS4gKi8K
LSAgICBzdGF0aWMgcmVzdWx0X3R5cGUgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVU
SU9OICgpCi0gICAgeyByZXR1cm4gKGJhc2VfdHlwZTo6bWF4KSgpOyB9Ci0KLSAgICAvKiogV3Jp
dGVzIGEgQGMgc2h1ZmZsZV9vcmRlcl9lbmdpbmUgdG8gYSBAYyBzdGQ6Om9zdHJlYW0uICovCi0g
ICAgQk9PU1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCBzaHVmZmxlX29yZGVy
X2VuZ2luZSwgcykKLSAgICB7Ci0gICAgICAgIG9zIDw8IHMuX3JuZzsKLSAgICAgICAgZm9yKHN0
ZDo6c2l6ZV90IGkgPSAwOyBpIDwgazsgKytpKQotICAgICAgICAgICAgb3MgPDwgJyAnIDw8IHMu
dltpXTsKLSAgICAgICAgb3MgPDwgJyAnIDw8IHMueTsKLSAgICAgICAgcmV0dXJuIG9zOwotICAg
IH0KLQotICAgIC8qKiBSZWFkcyBhIEBjIHNodWZmbGVfb3JkZXJfZW5naW5lIGZyb20gYSBAYyBz
dGQ6OmlzdHJlYW0uICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9S
KGlzLCBzaHVmZmxlX29yZGVyX2VuZ2luZSwgcykKLSAgICB7Ci0gICAgICAgIGlzID4+IHMuX3Ju
ZzsKLSAgICAgICAgZm9yKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgazsgKytpKQotICAgICAgICAg
ICAgaXMgPj4gc3RkOjp3cyA+PiBzLnZbaV07Ci0gICAgICAgIGlzID4+IHN0ZDo6d3MgPj4gcy55
OwotICAgICAgICByZXR1cm4gaXM7Ci0gICAgfQotCi0gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0
aGUgdHdvIGdlbmVyYXRvcnMgd2lsbCBwcm9kdWNlIGlkZW50aWNhbCBzZXF1ZW5jZXMuICovCi0g
ICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElUWV9PUEVSQVRPUihzaHVmZmxlX29yZGVyX2Vu
Z2luZSwgeCwgeSkKLSAgICB7IHJldHVybiB4Ll9ybmcgPT0geS5fcm5nICYmIHgueSA9PSB5Lnkg
JiYgc3RkOjplcXVhbCh4LnYsIHguditrLCB5LnYpOyB9Ci0gICAgLyoqIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgdHdvIGdlbmVyYXRvcnMgd2lsbCBwcm9kdWNlIGRpZmZlcmVudCBzZXF1ZW5jZXMuICov
Ci0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKHNodWZmbGVfb3Jk
ZXJfZW5naW5lKQotCi1wcml2YXRlOgotCi0gICAgLy8vIFxjb25kIHNob3dfcHJpdmF0ZQotCi0g
ICAgdm9pZCBpbml0KCkKLSAgICB7Ci0gICAgICAgIC8vIHdlIGNhbm5vdCB1c2Ugc3RkOjpnZW5l
cmF0ZSwgYmVjYXVzZSBpdCB1c2VzIHBhc3MtYnktdmFsdWUgZm9yIF9ybmcKLSAgICAgICAgZm9y
KHJlc3VsdF90eXBlICogcCA9IHY7IHAgIT0gditrOyArK3ApCi0gICAgICAgICAgICAqcCA9IF9y
bmcoKTsKLSAgICAgICAgeSA9IF9ybmcoKTsKLSAgICB9Ci0KLSAgICAvLy8gXGVuZGNvbmQKLQot
ICAgIGJhc2VfdHlwZSBfcm5nOwotICAgIHJlc3VsdF90eXBlIHZba107Ci0gICAgcmVzdWx0X3R5
cGUgeTsKLX07Ci0KLSNpZm5kZWYgQk9PU1RfTk9fSU5DTEFTU19NRU1CRVJfSU5JVElBTElaQVRJ
T04KLS8vICBBIGRlZmluaXRpb24gaXMgcmVxdWlyZWQgZXZlbiBmb3IgaW50ZWdyYWwgc3RhdGlj
IGNvbnN0YW50cwotdGVtcGxhdGU8Y2xhc3MgVVJORywgc3RkOjpzaXplX3Qgaz4KLWNvbnN0IGJv
b2wgc2h1ZmZsZV9vcmRlcl9lbmdpbmU8VVJORywgaz46Omhhc19maXhlZF9yYW5nZTsKLXRlbXBs
YXRlPGNsYXNzIFVSTkcsIHN0ZDo6c2l6ZV90IGs+Ci1jb25zdCBzdGQ6OnNpemVfdCBzaHVmZmxl
X29yZGVyX2VuZ2luZTxVUk5HLCBrPjo6dGFibGVfc2l6ZTsKLXRlbXBsYXRlPGNsYXNzIFVSTkcs
IHN0ZDo6c2l6ZV90IGs+Ci1jb25zdCBzdGQ6OnNpemVfdCBzaHVmZmxlX29yZGVyX2VuZ2luZTxV
Uk5HLCBrPjo6YnVmZmVyX3NpemU7Ci0jZW5kaWYKLQotLyoqCi0gKiBBY2NvcmRpbmcgdG8gSGFy
cnkgRXJ3aW4gKHByaXZhdGUgZS1tYWlsKSwgdGhlIHNwZWNpYWxpemF0aW9uCi0gKiBAYyBrcmV1
dHplcjE5ODYgd2FzIHN1Z2dlc3RlZCBpbjoKLSAqCi0gKiBAYmxvY2txdW90ZQotICogIlN5c3Rl
bSBTaW11bGF0aW9uOiBQcm9ncmFtbWluZyBTdHlsZXMgYW5kIExhbmd1YWdlcyAoSW50ZXJuYXRp
b25hbAotICogQ29tcHV0ZXIgU2NpZW5jZSBTZXJpZXMpIiwgV29sZmdhbmcgS3JldXR6ZXIsIEFk
ZGlzb24tV2VzbGV5LCBEZWNlbWJlciAxOTg2LgotICogQGVuZGJsb2NrcXVvdGUKLSAqLwotdHlw
ZWRlZiBzaHVmZmxlX29yZGVyX2VuZ2luZTwKLSAgICBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2lu
ZTx1aW50MzJfdCwgMTM2NiwgMTUwODg5LCA3MTQwMjU+LAotICAgIDk3PiBrcmV1dHplcjE5ODY7
Ci0KLS8qKgotICogVGhlIHNwZWNpYWxpemF0aW9uIEBjIGtudXRoX2IgaXMgc3BlY2lmaWVkIGJ5
IHRoZSBDKysgc3RhbmRhcmQuCi0gKiBJdCBpcyBkZXNjcmliZWQgaW4KLSAqCi0gKiBAYmxvY2tx
dW90ZQotICogIlRoZSBBcnQgb2YgQ29tcHV0ZXIgUHJvZ3JhbW1pbmcsIFNlY29uZCBFZGl0aW9u
LCBWb2x1bWUgMiwKLSAqIFNlbWludW1lcmljYWwgQWxnb3JpdGhtcyIsIERvbmFsZCBLbnV0aCwg
QWRkaXNvbi1XZXNsZXksIDE5ODEuCi0gKiBAZW5kYmxvY2txdW90ZQotICovCi10eXBlZGVmIHNo
dWZmbGVfb3JkZXJfZW5naW5lPG1pbnN0ZF9yYW5kMCwgMjU2PiBrbnV0aF9iOwotCi19IC8vIG5h
bWVzcGFjZSByYW5kb20KLQotdXNpbmcgcmFuZG9tOjprcmV1dHplcjE5ODY7Ci0KLX0gLy8gbmFt
ZXNwYWNlIGJvb3N0Ci0KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2VuYWJsZV93YXJu
aW5ncy5ocHA+Ci0KLSNlbmRpZiAvLyBCT09TVF9SQU5ET01fU0hVRkZMRV9PVVRQVVRfSFBQCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5k
b20vc2h1ZmZsZV9vdXRwdXQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcmFuZG9tL3NodWZmbGVfb3V0cHV0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDc4ZTEwMjliZDgwNjczZTNmMTM2NWUxYjUxZjQyYmEyZDBkMDFiZi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vc2h1ZmZsZV9vdXRwdXQuaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyogYm9vc3QgcmFuZG9tL3NodWZmbGVfb3V0cHV0
LmhwcCBoZWFkZXIgZmlsZQotICoKLSAqIENvcHlyaWdodCBKZW5zIE1hdXJlciAyMDAwLTIwMDEK
LSAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4gKFNlZQotICogYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkg
YXQKLSAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqCi0gKiBTZWUg
aHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRv
Y3VtZW50YXRpb24uCi0gKgotICogJElkJAotICoKLSAqIFJldmlzaW9uIGhpc3RvcnkKLSAqICAy
MDAxLTAyLTE4ICBtb3ZlZCB0byBpbmRpdmlkdWFsIGhlYWRlciBmaWxlcwotICovCi0KLSNpZm5k
ZWYgQk9PU1RfUkFORE9NX1NIVUZGTEVfT1VUUFVUX0hQUAotI2RlZmluZSBCT09TVF9SQU5ET01f
U0hVRkZMRV9PVVRQVVRfSFBQCi0KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vc2h1ZmZsZV9vcmRl
ci5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2UgcmFuZG9tIHsKLQotLy8vIFxj
b25kCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFVSTkcsIGludCBrLCAKLSAgICAgICAgIHR5cGVuYW1l
IFVSTkc6OnJlc3VsdF90eXBlIHZhbCA9IDA+IAotY2xhc3Mgc2h1ZmZsZV9vdXRwdXQgOiBwdWJs
aWMgc2h1ZmZsZV9vcmRlcl9lbmdpbmU8VVJORywgaz4KLXsKLSAgICB0eXBlZGVmIHNodWZmbGVf
b3JkZXJfZW5naW5lPFVSTkcsIGs+IGJhc2VfdDsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIGJhc2VfdDo6cmVzdWx0X3R5cGUgcmVzdWx0X3R5cGU7Ci0gICAgc2h1ZmZsZV9vdXRwdXQo
KSB7fQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgZXhwbGljaXQgc2h1ZmZsZV9vdXRwdXQo
VCYgYXJnKSA6IGJhc2VfdChhcmcpIHt9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICBleHBs
aWNpdCBzaHVmZmxlX291dHB1dChjb25zdCBUJiBhcmcpIDogYmFzZV90KGFyZykge30KLSAgICB0
ZW1wbGF0ZTxjbGFzcyBJdD4KLSAgICBzaHVmZmxlX291dHB1dChJdCYgZmlyc3QsIEl0IGxhc3Qp
IDogYmFzZV90KGZpcnN0LCBsYXN0KSB7fQotICAgIHJlc3VsdF90eXBlIG1pbiBCT09TVF9QUkVW
RU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKQotICAgIHsgcmV0dXJuICh0aGlzLT5iYXNlKCkubWlu
KSgpOyB9Ci0gICAgcmVzdWx0X3R5cGUgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVU
SU9OICgpCi0gICAgeyByZXR1cm4gKHRoaXMtPmJhc2UoKS5tYXgpKCk7IH0KLX07Ci0KLS8vLyBc
ZW5kY29uZAotCi19Ci19Ci0KLSNlbmRpZiAvLyBCT09TVF9SQU5ET01fU0hVRkZMRV9PVVRQVVRf
SFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC9yYW5kb20vc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbi5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbi5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyOGIwZTNiZmIzNTg1MjZkZmFiN2IwOTk2
OGJlOTFkMTI2Nzc5MDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3N0
dWRlbnRfdF9kaXN0cmlidXRpb24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTgwICswLDAgQEAK
LS8qIGJvb3N0IHJhbmRvbS9zdHVkZW50X3RfZGlzdHJpYnV0aW9uLmhwcCBoZWFkZXIgZmlsZQot
ICoKLSAqIENvcHlyaWdodCBTdGV2ZW4gV2F0YW5hYmUgMjAxMQotICogRGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9y
ZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0g
KiAkSWQkCi0gKi8KLQotI2lmbmRlZiBCT09TVF9SQU5ET01fU1RVREVOVF9UX0RJU1RSSUJVVElP
Tl9IUFAKLSNkZWZpbmUgQk9PU1RfUkFORE9NX1NUVURFTlRfVF9ESVNUUklCVVRJT05fSFBQCi0K
LSNpbmNsdWRlIDxib29zdC9jb25maWcvbm9fdHIxL2NtYXRoLmhwcD4KLSNpbmNsdWRlIDxpb3Nm
d2Q+Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9saW1pdHMu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvb3BlcmF0b3JzLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9yYW5kb20vY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9yYW5kb20vbm9ybWFsX2Rpc3RyaWJ1dGlvbi5ocHA+Ci0KLW5hbWVzcGFjZSBib29z
dCB7Ci1uYW1lc3BhY2UgcmFuZG9tIHsKLQotLyoqCi0gKiBUaGUgU3R1ZGVudCB0IGRpc3RyaWJ1
dGlvbiBpcyBhIHJlYWwgdmFsdWVkIGRpc3RyaWJ1dGlvbiB3aXRoIG9uZQotICogcGFyYW1ldGVy
IG4sIHRoZSBudW1iZXIgb2YgZGVncmVlcyBvZiBmcmVlZG9tLgotICoKLSAqIEl0IGhhcyBcZiRc
ZGlzcGxheXN0eWxlIHAoeCkgPQotICogICBcZnJhY3sxfXtcc3FydHtuXHBpfX0KLSAqICAgXGZy
YWN7XEdhbW1hKChuKzEpLzIpfXtcR2FtbWEobi8yKX0KLSAqICAgXGxlZnQoMStcZnJhY3t4XjJ9
e259XHJpZ2h0KV57LShuKzEpLzJ9Ci0gKiBcZiQuCi0gKi8KLXRlbXBsYXRlPGNsYXNzIFJlYWxU
eXBlID0gZG91YmxlPgotY2xhc3Mgc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbiB7Ci1wdWJsaWM6Ci0g
ICAgdHlwZWRlZiBSZWFsVHlwZSByZXN1bHRfdHlwZTsKLSAgICB0eXBlZGVmIFJlYWxUeXBlIGlu
cHV0X3R5cGU7Ci0KLSAgICBjbGFzcyBwYXJhbV90eXBlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHR5cGVkZWYgc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbiBkaXN0cmlidXRpb25fdHlwZTsKLQotICAg
ICAgICAvKioKLSAgICAgICAgICogQ29uc3RydWN0cyBhIEBjIHBhcmFtX3R5cGUgd2l0aCAibiIg
ZGVncmVlcyBvZiBmcmVlZG9tLgotICAgICAgICAgKgotICAgICAgICAgKiBSZXF1aXJlczogbiA+
IDAKLSAgICAgICAgICovCi0gICAgICAgIGV4cGxpY2l0IHBhcmFtX3R5cGUoUmVhbFR5cGUgbl9h
cmcgPSBSZWFsVHlwZSgxLjApKQotICAgICAgICAgIDogX24obl9hcmcpCi0gICAgICAgIHt9Ci0K
LSAgICAgICAgLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiBkZWdyZWVzIG9mIGZyZWVkb20gb2Yg
dGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICAgICAgUmVhbFR5cGUgbigpIGNvbnN0IHsgcmV0dXJu
IF9uOyB9Ci0KLSAgICAgICAgLyoqIFdyaXRlcyBhIEBjIHBhcmFtX3R5cGUgdG8gYSBAYyBzdGQ6
Om9zdHJlYW0uICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRP
UihvcywgcGFyYW1fdHlwZSwgcGFybSkKLSAgICAgICAgeyBvcyA8PCBwYXJtLl9uOyByZXR1cm4g
b3M7IH0KLQotICAgICAgICAvKiogUmVhZHMgYSBAYyBwYXJhbV90eXBlIGZyb20gYSBAYyBzdGQ6
OmlzdHJlYW0uICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRP
UihpcywgcGFyYW1fdHlwZSwgcGFybSkKLSAgICAgICAgeyBpcyA+PiBwYXJtLl9uOyByZXR1cm4g
aXM7IH0KLQotICAgICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gc2V0cyBvZiBwYXJh
bWV0ZXJzIGFyZSB0aGUgc2FtZS4gKi8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVB
TElUWV9PUEVSQVRPUihwYXJhbV90eXBlLCBsaHMsIHJocykKLSAgICAgICAgeyByZXR1cm4gbGhz
Ll9uID09IHJocy5fbjsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0
aGUgdHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgdGhlIGRpZmZlcmVudC4gKi8KLSAgICAgICAg
Qk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKHBhcmFtX3R5cGUpCi0KLSAg
ICBwcml2YXRlOgotICAgICAgICBSZWFsVHlwZSBfbjsKLSAgICB9OwotCi0gICAgLyoqCi0gICAg
ICogQ29uc3RydWN0cyBhbiBAYyBzdHVkZW50X3RfZGlzdHJpYnV0aW9uIHdpdGggIm4iIGRlZ3Jl
ZXMgb2YgZnJlZWRvbS4KLSAgICAgKgotICAgICAqIFJlcXVpcmVzOiBuID4gMAotICAgICAqLwot
ICAgIGV4cGxpY2l0IHN0dWRlbnRfdF9kaXN0cmlidXRpb24oUmVhbFR5cGUgbl9hcmcgPSBSZWFs
VHlwZSgxLjApKQotICAgICAgOiBfbm9ybWFsKCksIF9jaGlfc3F1YXJlZChuX2FyZykKLSAgICB7
fQotICAgIC8qKiBDb25zdHJ1Y3RzIGFuIEBjIHN0dWRlbnRfdF9kaXN0cmlidXRpb24gZnJvbSBp
dHMgcGFyYW1ldGVycy4gKi8KLSAgICBleHBsaWNpdCBzdHVkZW50X3RfZGlzdHJpYnV0aW9uKGNv
bnN0IHBhcmFtX3R5cGUmIHBhcm0pCi0gICAgICA6IF9ub3JtYWwoKSwgX2NoaV9zcXVhcmVkKHBh
cm0ubigpKQotICAgIHt9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIHZhcmlh
dGUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZQotICAgICAqIFN0dWRlbnQgdCBkaXN0cmli
dXRpb24uCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgVVJORz4KLSAgICBSZWFsVHlwZSBv
cGVyYXRvcigpKFVSTkcmIHVybmcpCi0gICAgewotICAgICAgICB1c2luZyBzdGQ6OnNxcnQ7Ci0g
ICAgICAgIHJldHVybiBfbm9ybWFsKHVybmcpIC8gc3FydChfY2hpX3NxdWFyZWQodXJuZykgLyBu
KCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSByYW5kb20gdmFyaWF0ZSBk
aXN0cmlidXRlZCBhY2NvcmRpbnQgdG8gdGhlIFN0dWRlbnQKLSAgICAgKiB0IGRpc3RyaWJ1dGlv
biB3aXRoIHBhcmFtZXRlcnMgc3BlY2lmaWVkIGJ5IEBjIHBhcmFtLgotICAgICAqLwotICAgIHRl
bXBsYXRlPGNsYXNzIFVSTkc+Ci0gICAgUmVhbFR5cGUgb3BlcmF0b3IoKShVUk5HJiB1cm5nLCBj
b25zdCBwYXJhbV90eXBlJiBwYXJtKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0dWRl
bnRfdF9kaXN0cmlidXRpb24ocGFybSkodXJuZyk7Ci0gICAgfQotCi0gICAgLyoqIFJldHVybnMg
dGhlIG51bWJlciBvZiBkZWdyZWVzIG9mIGZyZWVkb20uICovCi0gICAgUmVhbFR5cGUgbigpIGNv
bnN0IHsgcmV0dXJuIF9jaGlfc3F1YXJlZC5uKCk7IH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBz
bWFsbGVzdCB2YWx1ZSB0aGF0IHRoZSBkaXN0cmlidXRpb24gY2FuIHByb2R1Y2UuICovCi0gICAg
UmVhbFR5cGUgbWluIEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIGNvbnN0Ci0g
ICAgeyByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8UmVhbFR5cGU+OjppbmZpbml0eSgpOyB9
Ci0gICAgLyoqIFJldHVybnMgdGhlIGxhcmdlc3QgdmFsdWUgdGhhdCB0aGUgZGlzdHJpYnV0aW9u
IGNhbiBwcm9kdWNlLiAqLwotICAgIFJlYWxUeXBlIG1heCBCT09TVF9QUkVWRU5UX01BQ1JPX1NV
QlNUSVRVVElPTiAoKSBjb25zdAotICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8UmVh
bFR5cGU+OjppbmZpbml0eSgpOyB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgcGFyYW1ldGVycyBv
ZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIHBhcmFtX3R5cGUgcGFyYW0oKSBjb25zdCB7IHJl
dHVybiBwYXJhbV90eXBlKG4oKSk7IH0KLSAgICAvKiogU2V0cyB0aGUgcGFyYW1ldGVycyBvZiB0
aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIHZvaWQgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgcGFy
bSkKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uPFJlYWxU
eXBlPiBjaGlfc3F1YXJlZF90eXBlOwotICAgICAgICB0eXBlbmFtZSBjaGlfc3F1YXJlZF90eXBl
OjpwYXJhbV90eXBlIGNoaV9zcXVhcmVkX3BhcmFtKHBhcm0ubigpKTsKLSAgICAgICAgX2NoaV9z
cXVhcmVkLnBhcmFtKGNoaV9zcXVhcmVkX3BhcmFtKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAg
KiBFZmZlY3RzOiBTdWJzZXF1ZW50IHVzZXMgb2YgdGhlIGRpc3RyaWJ1dGlvbiBkbyBub3QgZGVw
ZW5kCi0gICAgICogb24gdmFsdWVzIHByb2R1Y2VkIGJ5IGFueSBlbmdpbmUgcHJpb3IgdG8gaW52
b2tpbmcgcmVzZXQuCi0gICAgICovCi0gICAgdm9pZCByZXNldCgpCi0gICAgewotICAgICAgICBf
bm9ybWFsLnJlc2V0KCk7Ci0gICAgICAgIF9jaGlfc3F1YXJlZC5yZXNldCgpOwotICAgIH0KLQot
ICAgIC8qKiBXcml0ZXMgYSBAYyBzdHVkZW50X3RfZGlzdHJpYnV0aW9uIHRvIGEgQGMgc3RkOjpv
c3RyZWFtLiAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihvcywg
c3R1ZGVudF90X2Rpc3RyaWJ1dGlvbiwgdGQpCi0gICAgewotICAgICAgICBvcyA8PCB0ZC5wYXJh
bSgpOwotICAgICAgICByZXR1cm4gb3M7Ci0gICAgfQotCi0gICAgLyoqIFJlYWRzIGEgQGMgc3R1
ZGVudF90X2Rpc3RyaWJ1dGlvbiBmcm9tIGEgQGMgc3RkOjppc3RyZWFtLiAqLwotICAgIEJPT1NU
X1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRPUihpcywgc3R1ZGVudF90X2Rpc3RyaWJ1dGlv
biwgdGQpCi0gICAgewotICAgICAgICBwYXJhbV90eXBlIHBhcm07Ci0gICAgICAgIGlmKGlzID4+
IHBhcm0pIHsKLSAgICAgICAgICAgIHRkLnBhcmFtKHBhcm0pOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBpczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhl
IHR3byBpbnN0YW5jZXMgb2YgQGMgc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbiB3aWxsCi0gICAgICog
cmV0dXJuIGlkZW50aWNhbCBzZXF1ZW5jZXMgb2YgdmFsdWVzIGdpdmVuIGVxdWFsIGdlbmVyYXRv
cnMuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElUWV9PUEVSQVRPUihz
dHVkZW50X3RfZGlzdHJpYnV0aW9uLCBsaHMsIHJocykKLSAgICB7IHJldHVybiBsaHMuX25vcm1h
bCA9PSByaHMuX25vcm1hbCAmJiBsaHMuX2NoaV9zcXVhcmVkID09IHJocy5fY2hpX3NxdWFyZWQ7
IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBpbnN0YW5j
ZXMgb2YgQGMgc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbiB3aWxsCi0gICAgICogcmV0dXJuIGRpZmZl
cmVudCBzZXF1ZW5jZXMgb2YgdmFsdWVzIGdpdmVuIGVxdWFsIGdlbmVyYXRvcnMuCi0gICAgICov
Ci0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKHN0dWRlbnRfdF9k
aXN0cmlidXRpb24pCi0KLXByaXZhdGU6Ci0gICAgbm9ybWFsX2Rpc3RyaWJ1dGlvbjxSZWFsVHlw
ZT4gX25vcm1hbDsKLSAgICBjaGlfc3F1YXJlZF9kaXN0cmlidXRpb248UmVhbFR5cGU+IF9jaGlf
c3F1YXJlZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotfSAvLyBuYW1lc3BhY2UgYm9v
c3QKLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9TVFVERU5UX1RfRElTVFJJQlVUSU9OX0hQUApk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFu
ZG9tL3N1YnRyYWN0X3dpdGhfY2FycnkuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3N1YnRyYWN0X3dpdGhfY2FycnkuaHBwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhY2FmNjlhYzY5ODRmYjQ1YjI1Y2UzNGUxNzEzYTk3MGZmMmM3
NDg4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS9zdWJ0cmFjdF93aXRo
X2NhcnJ5LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDYxMyArMCwwIEBACi0vKiBib29zdCByYW5k
b20vc3VidHJhY3Rfd2l0aF9jYXJyeS5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQg
SmVucyBNYXVyZXIgMjAwMgotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNF
XzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAu
dHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVy
c2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgotICogUmV2aXNp
b24gaGlzdG9yeQotICogIDIwMDItMDMtMDIgIGNyZWF0ZWQKLSAqLwotCi0jaWZuZGVmIEJPT1NU
X1JBTkRPTV9TVUJUUkFDVF9XSVRIX0NBUlJZX0hQUAotI2RlZmluZSBCT09TVF9SQU5ET01fU1VC
VFJBQ1RfV0lUSF9DQVJSWV9IUFAKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy9ub190cjEvY21h
dGguaHBwPiAgICAgICAgIC8vIHN0ZDo6cG93Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVk
ZSA8YWxnb3JpdGhtPiAgICAgLy8gc3RkOjplcXVhbAotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KLSNp
bmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2xpbWl0cy5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvY3N0ZGludC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qvc3RhdGljX2Fzc2Vy
dC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvaW50ZWdlci9zdGF0aWNfbG9nMi5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvaW50ZWdlci9pbnRlZ2VyX21hc2suaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFp
bC93b3JrYXJvdW5kLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2NvbmZpZy5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9zZWVkLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9yYW5kb20vZGV0YWlsL29wZXJhdG9ycy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9t
L2RldGFpbC9zZWVkX2ltcGwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvZ2Vu
ZXJhdG9yX3NlZWRfc2VxLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vbGluZWFyX2Nvbmdy
dWVudGlhbC5ocHA+Ci0KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSByYW5kb20gewot
Ci1uYW1lc3BhY2UgZGV0YWlsIHsKLSAgIAotc3RydWN0IHN1YnRyYWN0X3dpdGhfY2FycnlfZGlz
Y2FyZAotewotICAgIHRlbXBsYXRlPGNsYXNzIEVuZ2luZT4KLSAgICBzdGF0aWMgdm9pZCBhcHBs
eShFbmdpbmUmIGVuZywgYm9vc3Q6OnVpbnRtYXhfdCB6KQotICAgIHsKLSAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBFbmdpbmU6OnJlc3VsdF90eXBlIEludFR5cGU7Ci0gICAgICAgIGNvbnN0IHN0
ZDo6c2l6ZV90IHNob3J0X2xhZyA9IEVuZ2luZTo6c2hvcnRfbGFnOwotICAgICAgICBjb25zdCBz
dGQ6OnNpemVfdCBsb25nX2xhZyA9IEVuZ2luZTo6bG9uZ19sYWc7Ci0gICAgICAgIHN0ZDo6c2l6
ZV90IGsgPSBlbmcuazsKLSAgICAgICAgSW50VHlwZSBjYXJyeSA9IGVuZy5jYXJyeTsKLSAgICAg
ICAgaWYoayAhPSAwKSB7Ci0gICAgICAgICAgICAvLyBpbmNyZW1lbnQgayB1bnRpbCBpdCBiZWNv
bWVzIDAuCi0gICAgICAgICAgICBpZihrIDwgc2hvcnRfbGFnKSB7Ci0gICAgICAgICAgICAgICAg
c3RkOjpzaXplX3QgbGltaXQgPSAoc2hvcnRfbGFnIC0gaykgPCB6PwotICAgICAgICAgICAgICAg
ICAgICBzaG9ydF9sYWcgOiAoayArIHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90Pih6KSk7Ci0gICAg
ICAgICAgICAgICAgZm9yKHN0ZDo6c2l6ZV90IGogPSBrOyBqIDwgbGltaXQ7ICsraikgewotICAg
ICAgICAgICAgICAgICAgICBjYXJyeSA9IGVuZy5kb191cGRhdGUoaiwgaiArIGxvbmdfbGFnIC0g
c2hvcnRfbGFnLCBjYXJyeSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgc3RkOjpzaXplX3QgbGltaXQgPSAobG9uZ19sYWcgLSBrKSA8IHo/Ci0gICAgICAg
ICAgICAgICAgbG9uZ19sYWcgOiAoayArIHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90Pih6KSk7Ci0g
ICAgICAgICAgICBzdGQ6OnNpemVfdCBzdGFydCA9IChrIDwgc2hvcnRfbGFnID8gc2hvcnRfbGFn
IDogayk7Ci0gICAgICAgICAgICBmb3Ioc3RkOjpzaXplX3QgaiA9IHN0YXJ0OyBqIDwgbGltaXQ7
ICsraikgewotICAgICAgICAgICAgICAgIGNhcnJ5ID0gZW5nLmRvX3VwZGF0ZShqLCBqIC0gc2hv
cnRfbGFnLCBjYXJyeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBrID0g
KCh6ICUgbG9uZ19sYWcpICsgaykgJSBsb25nX2xhZzsKLQotICAgICAgICBpZihrIDwgeikgewot
ICAgICAgICAgICAgLy8gbWFpbiBsb29wOiB1cGRhdGUgZnVsbCBibG9ja3MgZnJvbSBrID0gMCB0
byBsb25nX2xhZwotICAgICAgICAgICAgZm9yKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgKHogLSBr
KSAvIGxvbmdfbGFnOyArK2kpIHsKLSAgICAgICAgICAgICAgICBmb3Ioc3RkOjpzaXplX3QgaiA9
IDA7IGogPCBzaG9ydF9sYWc7ICsraikgewotICAgICAgICAgICAgICAgICAgICBjYXJyeSA9IGVu
Zy5kb191cGRhdGUoaiwgaiArIGxvbmdfbGFnIC0gc2hvcnRfbGFnLCBjYXJyeSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvcihzdGQ6OnNpemVfdCBqID0gc2hvcnRfbGFn
OyBqIDwgbG9uZ19sYWc7ICsraikgewotICAgICAgICAgICAgICAgICAgICBjYXJyeSA9IGVuZy5k
b191cGRhdGUoaiwgaiAtIHNob3J0X2xhZywgY2FycnkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBsYXN0IHBhcnRpYWwgYmxv
Y2sKLSAgICAgICAgICAgIHN0ZDo6c2l6ZV90IGxpbWl0ID0gc2hvcnRfbGFnIDwgaz8gc2hvcnRf
bGFnIDogazsgCi0gICAgICAgICAgICBmb3Ioc3RkOjpzaXplX3QgaiA9IDA7IGogPCBsaW1pdDsg
KytqKSB7Ci0gICAgICAgICAgICAgICAgY2FycnkgPSBlbmcuZG9fdXBkYXRlKGosIGogKyBsb25n
X2xhZyAtIHNob3J0X2xhZywgY2FycnkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9y
KHN0ZDo6c2l6ZV90IGogPSBzaG9ydF9sYWc7IGogPCBrOyArK2opIHsKLSAgICAgICAgICAgICAg
ICBjYXJyeSA9IGVuZy5kb191cGRhdGUoaiwgaiAtIHNob3J0X2xhZywgY2FycnkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVuZy5jYXJyeSA9IGNhcnJ5OwotICAgICAgICBl
bmcuayA9IGs7Ci0gICAgfQotfTsKLQotfQotCi0vKioKLSAqIEluc3RhbnRpYXRpb25zIG9mIEBj
IHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lIG1vZGVsIGEKLSAqIFxwc2V1ZG9fcmFuZG9tX251
bWJlcl9nZW5lcmF0b3IuICBUaGUgYWxnb3JpdGhtIGlzCi0gKiBkZXNjcmliZWQgaW4KLSAqCi0g
KiAgQGJsb2NrcXVvdGUKLSAqICAiQSBOZXcgQ2xhc3Mgb2YgUmFuZG9tIE51bWJlciBHZW5lcmF0
b3JzIiwgR2VvcmdlCi0gKiAgTWFyc2FnbGlhIGFuZCBBcmlmIFphbWFuLCBBbm5hbHMgb2YgQXBw
bGllZCBQcm9iYWJpbGl0eSwKLSAqICBWb2x1bWUgMSwgTnVtYmVyIDMgKDE5OTEpLCA0NjItNDgw
LgotICogIEBlbmRibG9ja3F1b3RlCi0gKi8KLXRlbXBsYXRlPGNsYXNzIEludFR5cGUsIHN0ZDo6
c2l6ZV90IHcsIHN0ZDo6c2l6ZV90IHMsIHN0ZDo6c2l6ZV90IHI+Ci1jbGFzcyBzdWJ0cmFjdF93
aXRoX2NhcnJ5X2VuZ2luZQotewotcHVibGljOgotICAgIHR5cGVkZWYgSW50VHlwZSByZXN1bHRf
dHlwZTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHdvcmRfc2l6ZSA9
IHcpOwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgbG9uZ19sYWcgPSBy
KTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHNob3J0X2xhZyA9IHMp
OwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVCh1aW50MzJfdCwgZGVmYXVsdF9zZWVkID0gMTk3
ODA1MDN1KTsKLQotICAgIC8vIFJlcXVpcmVkIGJ5IHRoZSBvbGQgQm9vc3QuUmFuZG9tIGNvbmNl
cHRzCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIGhhc19maXhlZF9yYW5nZSA9IGZh
bHNlKTsKLSAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotICAgIEJPT1NUX1NUQVRJQ19D
T05TVEFOVChyZXN1bHRfdHlwZSwgbW9kdWx1cyA9IChyZXN1bHRfdHlwZSgxKSA8PCB3KSk7Ci0g
ICAgCi0gICAgQk9PU1RfU1RBVElDX0FTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90
eXBlPjo6aXNfaW50ZWdlcik7Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEBj
IHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lIGFuZCBzZWVkcwotICAgICAqIGl0IHdpdGggdGhl
IGRlZmF1bHQgc2VlZC4KLSAgICAgKi8KLSAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZSgp
IHsgc2VlZCgpOyB9Ci0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIG5ldyBAYyBzdWJ0cmFj
dF93aXRoX2NhcnJ5X2VuZ2luZSBhbmQgc2VlZHMKLSAgICAgKiBpdCB3aXRoIEBjIHZhbHVlLgot
ICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfQVJJVEhNRVRJQ19DT05TVFJVQ1RPUihz
dWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW50VHlwZSwgdmFsdWUpCi0gICAgeyBzZWVkKHZhbHVlKTsgfQot
ICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBuZXcgQGMgc3VidHJhY3Rfd2l0aF9jYXJyeV9l
bmdpbmUgYW5kIHNlZWRzCi0gICAgICogaXQgd2l0aCB2YWx1ZXMgcHJvZHVjZWQgYnkgQGMgc2Vx
LmdlbmVyYXRlKCkuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9TRUVEX1NFUV9D
T05TVFJVQ1RPUihzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZWRTZXEsIHNlcSkKLSAgICB7IHNlZWQoc2Vx
KTsgfQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBuZXcgQGMgc3VidHJhY3Rfd2l0aF9j
YXJyeV9lbmdpbmUgYW5kIHNlZWRzCi0gICAgICogaXQgd2l0aCB2YWx1ZXMgZnJvbSBhIHJhbmdl
LiAgZmlyc3QgaXMgdXBkYXRlZCB0byBwb2ludAotICAgICAqIG9uZSBwYXN0IHRoZSBsYXN0IHZh
bHVlIGNvbnN1bWVkLiAgSWYgdGhlcmUgYXJlIG5vdAotICAgICAqIGVub3VnaCBlbGVtZW50cyBp
biB0aGUgcmFuZ2UgdG8gZmlsbCB0aGUgZW50aXJlIHN0YXRlIG9mCi0gICAgICogdGhlIGdlbmVy
YXRvciwgdGhyb3dzIEBjIHN0ZDo6aW52YWxpZF9hcmd1bWVudC4KLSAgICAgKi8KLSAgICB0ZW1w
bGF0ZTxjbGFzcyBJdD4gc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUoSXQmIGZpcnN0LCBJdCBs
YXN0KQotICAgIHsgc2VlZChmaXJzdCxsYXN0KTsgfQotCi0gICAgLy8gY29tcGlsZXItZ2VuZXJh
dGVkIGNvcHkgY3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvciBhcmUgZmluZQotCi0gICAgLyoq
IFNlZWRzIHRoZSBnZW5lcmF0b3Igd2l0aCB0aGUgZGVmYXVsdCBzZWVkLiAqLwotICAgIHZvaWQg
c2VlZCgpIHsgc2VlZChkZWZhdWx0X3NlZWQpOyB9Ci0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9B
UklUSE1FVElDX1NFRUQoc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50VHlwZSwgdmFsdWUpCi0gICAgewotICAgICAg
ICB0eXBlZGVmIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPHVpbnQzMl90LDQwMDE0LDAsMjE0
NzQ4MzU2Mz4gZ2VuX3Q7Ci0gICAgICAgIGdlbl90IGludGdlbihzdGF0aWNfY2FzdDxib29zdDo6
dWludDMyX3Q+KHZhbHVlID09IDAgPyBkZWZhdWx0X3NlZWQgOiB2YWx1ZSkpOwotICAgICAgICBk
ZXRhaWw6OmdlbmVyYXRvcl9zZWVkX3NlcTxnZW5fdD4gZ2VuKGludGdlbik7Ci0gICAgICAgIHNl
ZWQoZ2VuKTsKLSAgICB9Ci0KLSAgICAvKiogU2VlZHMgdGhlIGdlbmVyYXRvciB3aXRoIHZhbHVl
cyBwcm9kdWNlZCBieSBAYyBzZXEuZ2VuZXJhdGUoKS4gKi8KLSAgICBCT09TVF9SQU5ET01fREVU
QUlMX1NFRURfU0VRX1NFRUQoc3VidHJhY3Rfd2l0aF9jYXJyeSwgU2VlZFNlcSwgc2VxKQotICAg
IHsKLSAgICAgICAgZGV0YWlsOjpzZWVkX2FycmF5X2ludDx3PihzZXEsIHgpOwotICAgICAgICBj
YXJyeSA9ICh4W2xvbmdfbGFnLTFdID09IDApOwotICAgICAgICBrID0gMDsKLSAgICB9Ci0KLSAg
ICAvKioKLSAgICAgKiBTZWVkcyB0aGUgZ2VuZXJhdG9yIHdpdGggdmFsdWVzIGZyb20gYSByYW5n
ZS4gIFVwZGF0ZXMgQGMgZmlyc3QgdG8KLSAgICAgKiBwb2ludCBvbmUgcGFzdCB0aGUgbGFzdCBj
b25zdW1lZCB2YWx1ZS4gIElmIHRoZSByYW5nZSBkb2VzIG5vdAotICAgICAqIGNvbnRhaW4gZW5v
dWdoIGVsZW1lbnRzIHRvIGZpbGwgdGhlIGVudGlyZSBzdGF0ZSBvZiB0aGUgZ2VuZXJhdG9yLAot
ICAgICAqIHRocm93cyBAYyBzdGQ6OmludmFsaWRfYXJndW1lbnQuCi0gICAgICovCi0gICAgdGVt
cGxhdGU8Y2xhc3MgSXQ+Ci0gICAgdm9pZCBzZWVkKEl0JiBmaXJzdCwgSXQgbGFzdCkKLSAgICB7
Ci0gICAgICAgIGRldGFpbDo6ZmlsbF9hcnJheV9pbnQ8dz4oZmlyc3QsIGxhc3QsIHgpOwotICAg
ICAgICBjYXJyeSA9ICh4W2xvbmdfbGFnLTFdID09IDApOwotICAgICAgICBrID0gMDsKLSAgICB9
Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgc21hbGxlc3QgdmFsdWUgdGhhdCB0aGUgZ2VuZXJhdG9y
IGNhbiBwcm9kdWNlLiAqLwotICAgIHN0YXRpYyByZXN1bHRfdHlwZSBtaW4gQk9PU1RfUFJFVkVO
VF9NQUNST19TVUJTVElUVVRJT04gKCkKLSAgICB7IHJldHVybiAwOyB9Ci0gICAgLyoqIFJldHVy
bnMgdGhlIGxhcmdlc3QgdmFsdWUgdGhhdCB0aGUgZ2VuZXJhdG9yIGNhbiBwcm9kdWNlLiAqLwot
ICAgIHN0YXRpYyByZXN1bHRfdHlwZSBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJ
T04gKCkKLSAgICB7IHJldHVybiBib29zdDo6bG93X2JpdHNfbWFza190PHc+OjpzaWdfYml0czsg
fQotCi0gICAgLyoqIFJldHVybnMgdGhlIG5leHQgdmFsdWUgb2YgdGhlIGdlbmVyYXRvci4gKi8K
LSAgICByZXN1bHRfdHlwZSBvcGVyYXRvcigpKCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6c2l6ZV90
IHNob3J0X2luZGV4ID0KLSAgICAgICAgICAgIChrIDwgc2hvcnRfbGFnKT8KLSAgICAgICAgICAg
ICAgICAoayArIGxvbmdfbGFnIC0gc2hvcnRfbGFnKSA6Ci0gICAgICAgICAgICAgICAgKGsgLSBz
aG9ydF9sYWcpOwotICAgICAgICBjYXJyeSA9IGRvX3VwZGF0ZShrLCBzaG9ydF9pbmRleCwgY2Fy
cnkpOwotICAgICAgICBJbnRUeXBlIHJlc3VsdCA9IHhba107Ci0gICAgICAgICsrazsKLSAgICAg
ICAgaWYoayA+PSBsb25nX2xhZykKLSAgICAgICAgICAgIGsgPSAwOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLQotICAgIC8qKiBBZHZhbmNlcyB0aGUgc3RhdGUgb2YgdGhlIGdlbmVy
YXRvciBieSBAYyB6LiAqLwotICAgIHZvaWQgZGlzY2FyZChib29zdDo6dWludG1heF90IHopCi0g
ICAgewotICAgICAgICBkZXRhaWw6OnN1YnRyYWN0X3dpdGhfY2FycnlfZGlzY2FyZDo6YXBwbHko
KnRoaXMsIHopOwotICAgIH0KLQotICAgIC8qKiBGaWxscyBhIHJhbmdlIHdpdGggcmFuZG9tIHZh
bHVlcy4gKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBJdD4KLSAgICB2b2lkIGdlbmVyYXRlKEl0IGZp
cnN0LCBJdCBsYXN0KQotICAgIHsgZGV0YWlsOjpnZW5lcmF0ZV9mcm9tX2ludCgqdGhpcywgZmly
c3QsIGxhc3QpOyB9Ci0gCi0gICAgLyoqIFdyaXRlcyBhIEBjIHN1YnRyYWN0X3dpdGhfY2Fycnlf
ZW5naW5lIHRvIGEgQGMgc3RkOjpvc3RyZWFtLiAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxf
T1NUUkVBTV9PUEVSQVRPUihvcywgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUsIGYpCi0gICAg
ewotICAgICAgICBmb3IodW5zaWduZWQgaW50IGogPSAwOyBqIDwgZi5sb25nX2xhZzsgKytqKQot
ICAgICAgICAgICAgb3MgPDwgZi5jb21wdXRlKGopIDw8ICcgJzsKLSAgICAgICAgb3MgPDwgZi5j
YXJyeTsKLSAgICAgICAgcmV0dXJuIG9zOwotICAgIH0KLQotICAgIC8qKiBSZWFkcyBhIEBjIHN1
YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uICovCi0gICAg
Qk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlzLCBzdWJ0cmFjdF93aXRoX2Nh
cnJ5X2VuZ2luZSwgZikKLSAgICB7Ci0gICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaiA9IDA7IGog
PCBmLmxvbmdfbGFnOyArK2opCi0gICAgICAgICAgICBpcyA+PiBmLnhbal0gPj4gc3RkOjp3czsK
LSAgICAgICAgaXMgPj4gZi5jYXJyeTsKLSAgICAgICAgZi5rID0gMDsKLSAgICAgICAgcmV0dXJu
IGlzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGdl
bmVyYXRvcnMgd2lsbCBwcm9kdWNlIGlkZW50aWNhbAotICAgICAqIHNlcXVlbmNlcyBvZiB2YWx1
ZXMuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElUWV9PUEVSQVRPUihz
dWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZSwgeCwgeSkKLSAgICB7Ci0gICAgICAgIGZvcih1bnNp
Z25lZCBpbnQgaiA9IDA7IGogPCByOyArK2opCi0gICAgICAgICAgICBpZih4LmNvbXB1dGUoaikg
IT0geS5jb21wdXRlKGopKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRo
ZSB0d28gZ2VuZXJhdG9ycyB3aWxsIHByb2R1Y2UgZGlmZmVyZW50Ci0gICAgICogc2VxdWVuY2Vz
IG9mIHZhbHVlcy4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0lORVFVQUxJVFlf
T1BFUkFUT1Ioc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUpCi0KLXByaXZhdGU6Ci0gICAgLy8v
IFxjb25kIHNob3dfcHJpdmF0ZQotICAgIC8vIHJldHVybnMgeChpLXIraW5kZXgpLCB3aGVyZSBp
bmRleCBpcyBpbiAwLi5yLTEKLSAgICBJbnRUeXBlIGNvbXB1dGUodW5zaWduZWQgaW50IGluZGV4
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHhbKGsraW5kZXgpICUgbG9uZ19sYWddOwot
ICAgIH0KLQotICAgIGZyaWVuZCBzdHJ1Y3QgZGV0YWlsOjpzdWJ0cmFjdF93aXRoX2NhcnJ5X2Rp
c2NhcmQ7Ci0KLSAgICBJbnRUeXBlIGRvX3VwZGF0ZShzdGQ6OnNpemVfdCBjdXJyZW50LCBzdGQ6
OnNpemVfdCBzaG9ydF9pbmRleCwgSW50VHlwZSBjYXJyeSkKLSAgICB7Ci0gICAgICAgIEludFR5
cGUgZGVsdGE7Ci0gICAgICAgIEludFR5cGUgdGVtcCA9IHhbY3VycmVudF0gKyBjYXJyeTsKLSAg
ICAgICAgaWYgKHhbc2hvcnRfaW5kZXhdID49IHRlbXApIHsKLSAgICAgICAgICAgIC8vIHgobikg
Pj0gMAotICAgICAgICAgICAgZGVsdGEgPSAgeFtzaG9ydF9pbmRleF0gLSB0ZW1wOwotICAgICAg
ICAgICAgY2FycnkgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8geChuKSA8
IDAKLSAgICAgICAgICAgIGRlbHRhID0gbW9kdWx1cyAtIHRlbXAgKyB4W3Nob3J0X2luZGV4XTsK
LSAgICAgICAgICAgIGNhcnJ5ID0gMTsKLSAgICAgICAgfQotICAgICAgICB4W2N1cnJlbnRdID0g
ZGVsdGE7Ci0gICAgICAgIHJldHVybiBjYXJyeTsKLSAgICB9Ci0gICAgLy8vIFxlbmRjb25kCi0K
LSAgICAvLyBzdGF0ZSByZXByZXNlbnRhdGlvbjsgbmV4dCBvdXRwdXQgKHN0YXRlKSBpcyB4KGkp
Ci0gICAgLy8gICB4WzBdICAuLi4geFtrXSB4W2srMV0gLi4uIHhbbG9uZ19sYWctMV0gICAgIHJl
cHJlc2VudHMKLSAgICAvLyAgeChpLWspIC4uLiB4KGkpIHgoaSsxKSAuLi4geChpLWsrbG9uZ19s
YWctMSkKLSAgICAvLyBzcGVlZDogYmFzZTogMjAtMjUgbnNlYwotICAgIC8vIHJhbmx1eF80OiAy
MzAgbnNlYywgcmFubHV4Xzc6IDQzMCBuc2VjLCByYW5sdXhfMTQ6IDgxMCBuc2VjCi0gICAgLy8g
VGhpcyBzdGF0ZSByZXByZXNlbnRhdGlvbiBtYWtlcyBvcGVyYXRvcj09IGFuZCBzYXZlL3Jlc3Rv
cmUgbW9yZQotICAgIC8vIGRpZmZpY3VsdCwgYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IGNvbXB1dGVk
ICJ0b28gbXVjaCIgYW5kIHRodXMKLSAgICAvLyBoYXZlIHRvIHVuZG8gc29tZSBzdGVwcyB0byBn
ZXQgYXQgeChpLXIpIGV0Yy4KLQotICAgIC8vIHN0YXRlIHJlcHJlc2VudGF0aW9uOiBuZXh0IG91
dHB1dCAoc3RhdGUpIGlzIHgoaSkKLSAgICAvLyAgIHhbMF0gIC4uLiB4W2tdIHhbaysxXSAgICAg
ICAgICAuLi4geFtsb25nX2xhZy0xXSAgICAgcmVwcmVzZW50cwotICAgIC8vICB4KGktaykgLi4u
IHgoaSkgeChpLWxvbmdfbGFnKzEpIC4uLiB4KGktay0xKQotICAgIC8vIHNwZWVkOiBiYXNlIDI4
IG5zZWMKLSAgICAvLyByYW5sdXhfNDogMzcwIG5zZWMsIHJhbmx1eF83OiA2ODggbnNlYywgcmFu
bHV4XzE0OiAxMzQzIG5zZWMKLSAgICBJbnRUeXBlIHhbbG9uZ19sYWddOwotICAgIHN0ZDo6c2l6
ZV90IGs7Ci0gICAgSW50VHlwZSBjYXJyeTsKLX07Ci0KLSNpZm5kZWYgQk9PU1RfTk9fSU5DTEFT
U19NRU1CRVJfSU5JVElBTElaQVRJT04KLS8vICBBIGRlZmluaXRpb24gaXMgcmVxdWlyZWQgZXZl
biBmb3IgaW50ZWdyYWwgc3RhdGljIGNvbnN0YW50cwotdGVtcGxhdGU8Y2xhc3MgSW50VHlwZSwg
c3RkOjpzaXplX3Qgdywgc3RkOjpzaXplX3Qgcywgc3RkOjpzaXplX3Qgcj4KLWNvbnN0IGJvb2wg
c3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU8SW50VHlwZSwgdywgcywgcj46Omhhc19maXhlZF9y
YW5nZTsKLXRlbXBsYXRlPGNsYXNzIEludFR5cGUsIHN0ZDo6c2l6ZV90IHcsIHN0ZDo6c2l6ZV90
IHMsIHN0ZDo6c2l6ZV90IHI+Ci1jb25zdCBJbnRUeXBlIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5n
aW5lPEludFR5cGUsIHcsIHMsIHI+Ojptb2R1bHVzOwotdGVtcGxhdGU8Y2xhc3MgSW50VHlwZSwg
c3RkOjpzaXplX3Qgdywgc3RkOjpzaXplX3Qgcywgc3RkOjpzaXplX3Qgcj4KLWNvbnN0IHN0ZDo6
c2l6ZV90IHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPEludFR5cGUsIHcsIHMsIHI+Ojp3b3Jk
X3NpemU7Ci10ZW1wbGF0ZTxjbGFzcyBJbnRUeXBlLCBzdGQ6OnNpemVfdCB3LCBzdGQ6OnNpemVf
dCBzLCBzdGQ6OnNpemVfdCByPgotY29uc3Qgc3RkOjpzaXplX3Qgc3VidHJhY3Rfd2l0aF9jYXJy
eV9lbmdpbmU8SW50VHlwZSwgdywgcywgcj46OmxvbmdfbGFnOwotdGVtcGxhdGU8Y2xhc3MgSW50
VHlwZSwgc3RkOjpzaXplX3Qgdywgc3RkOjpzaXplX3Qgcywgc3RkOjpzaXplX3Qgcj4KLWNvbnN0
IHN0ZDo6c2l6ZV90IHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPEludFR5cGUsIHcsIHMsIHI+
OjpzaG9ydF9sYWc7Ci10ZW1wbGF0ZTxjbGFzcyBJbnRUeXBlLCBzdGQ6OnNpemVfdCB3LCBzdGQ6
OnNpemVfdCBzLCBzdGQ6OnNpemVfdCByPgotY29uc3QgdWludDMyX3Qgc3VidHJhY3Rfd2l0aF9j
YXJyeV9lbmdpbmU8SW50VHlwZSwgdywgcywgcj46OmRlZmF1bHRfc2VlZDsKLSNlbmRpZgotCi0K
LS8vIHVzZSBhIGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIHRvIHByb2R1Y2UgdmFsdWVz
IGluIFswLi4xKQotLyoqCi0gKiBJbnN0YW50aWF0aW9ucyBvZiBcc3VidHJhY3Rfd2l0aF9jYXJy
eV8wMV9lbmdpbmUgbW9kZWwgYQotICogXHBzZXVkb19yYW5kb21fbnVtYmVyX2dlbmVyYXRvci4g
IFRoZSBhbGdvcml0aG0gaXMKLSAqIGRlc2NyaWJlZCBpbgotICoKLSAqICBAYmxvY2txdW90ZQot
ICogICJBIE5ldyBDbGFzcyBvZiBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcnMiLCBHZW9yZ2UKLSAq
ICBNYXJzYWdsaWEgYW5kIEFyaWYgWmFtYW4sIEFubmFscyBvZiBBcHBsaWVkIFByb2JhYmlsaXR5
LAotICogIFZvbHVtZSAxLCBOdW1iZXIgMyAoMTk5MSksIDQ2Mi00ODAuCi0gKiAgQGVuZGJsb2Nr
cXVvdGUKLSAqLwotdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGUsIHN0ZDo6c2l6ZV90IHcsIHN0ZDo6
c2l6ZV90IHMsIHN0ZDo6c2l6ZV90IHI+Ci1jbGFzcyBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxX2Vu
Z2luZQotewotcHVibGljOgotICAgIHR5cGVkZWYgUmVhbFR5cGUgcmVzdWx0X3R5cGU7Ci0gICAg
Qk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIGhhc19maXhlZF9yYW5nZSA9IGZhbHNlKTsKLSAg
ICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHdvcmRfc2l6ZSA9IHcpOwotICAg
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgbG9uZ19sYWcgPSByKTsKLSAgICBC
T09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHNob3J0X2xhZyA9IHMpOwotICAgIEJP
T1NUX1NUQVRJQ19DT05TVEFOVChib29zdDo6dWludDMyX3QsIGRlZmF1bHRfc2VlZCA9IDE5Nzgw
NTAzdSk7Ci0KLSAgICBCT09TVF9TVEFUSUNfQVNTRVJUKCFzdGQ6Om51bWVyaWNfbGltaXRzPHJl
c3VsdF90eXBlPjo6aXNfaW50ZWdlcik7Ci0KLSAgICAvKiogQ3JlYXRlcyBhIG5ldyBcc3VidHJh
Y3Rfd2l0aF9jYXJyeV8wMV9lbmdpbmUgdXNpbmcgdGhlIGRlZmF1bHQgc2VlZC4gKi8KLSAgICBz
dWJ0cmFjdF93aXRoX2NhcnJ5XzAxX2VuZ2luZSgpIHsgaW5pdF9tb2R1bHVzKCk7IHNlZWQoKTsg
fQotICAgIC8qKiBDcmVhdGVzIGEgbmV3IHN1YnRyYWN0X3dpdGhfY2FycnlfMDFfZW5naW5lIGFu
ZCBzZWVkcyBpdCB3aXRoIHZhbHVlLiAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfQVJJVEhN
RVRJQ19DT05TVFJVQ1RPUihzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxX2VuZ2luZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vc3Q6OnVpbnQzMl90LCB2
YWx1ZSkKLSAgICB7IGluaXRfbW9kdWx1cygpOyBzZWVkKHZhbHVlKTsgfQotICAgIC8qKgotICAg
ICAqIENyZWF0ZXMgYSBuZXcgXHN1YnRyYWN0X3dpdGhfY2FycnlfMDFfZW5naW5lIGFuZCBzZWVk
cyB3aXRoIHZhbHVlcwotICAgICAqIHByb2R1Y2VkIGJ5IHNlcS5nZW5lcmF0ZSgpLgotICAgICAq
LwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfU0VFRF9TRVFfQ09OU1RSVUNUT1Ioc3VidHJhY3Rf
d2l0aF9jYXJyeV8wMV9lbmdpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTZWVkU2VxLCBzZXEpCi0gICAgeyBpbml0X21vZHVsdXMoKTsgc2VlZChzZXEp
OyB9Ci0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBcc3VidHJhY3Rfd2l0aF9jYXJyeV8w
MV9lbmdpbmUgYW5kIHNlZWRzIGl0IHdpdGggdmFsdWVzCi0gICAgICogZnJvbSBhIHJhbmdlLiAg
QWR2YW5jZXMgZmlyc3QgdG8gcG9pbnQgb25lIHBhc3QgdGhlIGxhc3QgY29uc3VtZWQKLSAgICAg
KiB2YWx1ZS4gIElmIHRoZSByYW5nZSBkb2VzIG5vdCBjb250YWluIGVub3VnaCBlbGVtZW50cyB0
byBmaWxsIHRoZQotICAgICAqIGVudGlyZSBzdGF0ZSwgdGhyb3dzIEBjIHN0ZDo6aW52YWxpZF9h
cmd1bWVudC4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBJdD4gc3VidHJhY3Rfd2l0aF9j
YXJyeV8wMV9lbmdpbmUoSXQmIGZpcnN0LCBJdCBsYXN0KQotICAgIHsgaW5pdF9tb2R1bHVzKCk7
IHNlZWQoZmlyc3QsbGFzdCk7IH0KLQotcHJpdmF0ZToKLSAgICAvLy8gXGNvbmQgc2hvd19wcml2
YXRlCi0gICAgdm9pZCBpbml0X21vZHVsdXMoKQotICAgIHsKLSNpZm5kZWYgQk9PU1RfTk9fU1RE
Q19OQU1FU1BBQ0UKLSAgICAgICAgLy8gYWxsb3cgZm9yIEtvZW5pZyBsb29rdXAKLSAgICAgICAg
dXNpbmcgc3RkOjpwb3c7Ci0jZW5kaWYKLSAgICAgICAgX21vZHVsdXMgPSBwb3coUmVhbFR5cGUo
MiksIFJlYWxUeXBlKHdvcmRfc2l6ZSkpOwotICAgIH0KLSAgICAvLy8gXGVuZGNvbmQKLQotcHVi
bGljOgotICAgIC8vIGNvbXBpbGVyLWdlbmVyYXRlZCBjb3B5IGN0b3IgYW5kIGFzc2lnbm1lbnQg
b3BlcmF0b3IgYXJlIGZpbmUKLQotICAgIC8qKiBTZWVkcyB0aGUgZ2VuZXJhdG9yIHdpdGggdGhl
IGRlZmF1bHQgc2VlZC4gKi8KLSAgICB2b2lkIHNlZWQoKSB7IHNlZWQoZGVmYXVsdF9zZWVkKTsg
fQotCi0gICAgLyoqIFNlZWRzIHRoZSBnZW5lcmF0b3Igd2l0aCBAYyB2YWx1ZS4gKi8KLSAgICBC
T09TVF9SQU5ET01fREVUQUlMX0FSSVRITUVUSUNfU0VFRChzdWJ0cmFjdF93aXRoX2NhcnJ5XzAx
X2VuZ2luZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29zdDo6
dWludDMyX3QsIHZhbHVlKQotICAgIHsKLSAgICAgICAgdHlwZWRlZiBsaW5lYXJfY29uZ3J1ZW50
aWFsX2VuZ2luZTx1aW50MzJfdCwgNDAwMTQsIDAsIDIxNDc0ODM1NjM+IGdlbl90OwotICAgICAg
ICBnZW5fdCBpbnRnZW4odmFsdWUgPT0gMCA/IGRlZmF1bHRfc2VlZCA6IHZhbHVlKTsKLSAgICAg
ICAgZGV0YWlsOjpnZW5lcmF0b3Jfc2VlZF9zZXE8Z2VuX3Q+IGdlbihpbnRnZW4pOwotICAgICAg
ICBzZWVkKGdlbik7Ci0gICAgfQotCi0gICAgLyoqIFNlZWRzIHRoZSBnZW5lcmF0b3Igd2l0aCB2
YWx1ZXMgcHJvZHVjZWQgYnkgQGMgc2VxLmdlbmVyYXRlKCkuICovCi0gICAgQk9PU1RfUkFORE9N
X0RFVEFJTF9TRUVEX1NFUV9TRUVEKHN1YnRyYWN0X3dpdGhfY2FycnlfMDFfZW5naW5lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWVkU2VxLCBzZXEpCi0gICAgewot
ICAgICAgICBkZXRhaWw6OnNlZWRfYXJyYXlfcmVhbDx3PihzZXEsIHgpOwotICAgICAgICBjYXJy
eSA9ICh4W2xvbmdfbGFnLTFdID8gcmVzdWx0X3R5cGUoMCkgOiByZXN1bHRfdHlwZSgxIC8gX21v
ZHVsdXMpKTsKLSAgICAgICAgayA9IDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VlZHMg
dGhlIGdlbmVyYXRvciB3aXRoIHZhbHVlcyBmcm9tIGEgcmFuZ2UuICBVcGRhdGVzIGZpcnN0IHRv
Ci0gICAgICogcG9pbnQgb25lIHBhc3QgdGhlIGxhc3QgY29uc3VtZWQgZWxlbWVudC4gIElmIHRo
ZXJlIGFyZSBub3QKLSAgICAgKiBlbm91Z2ggZWxlbWVudHMgaW4gdGhlIHJhbmdlIHRvIGZpbGwg
dGhlIGVudGlyZSBzdGF0ZSwgdGhyb3dzCi0gICAgICogQGMgc3RkOjppbnZhbGlkX2FyZ3VtZW50
LgotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIEl0PgotICAgIHZvaWQgc2VlZChJdCYgZmly
c3QsIEl0IGxhc3QpCi0gICAgewotICAgICAgICBkZXRhaWw6OmZpbGxfYXJyYXlfcmVhbDx3Pihm
aXJzdCwgbGFzdCwgeCk7Ci0gICAgICAgIGNhcnJ5ID0gKHhbbG9uZ19sYWctMV0gPyByZXN1bHRf
dHlwZSgwKSA6IHJlc3VsdF90eXBlKDEgLyBfbW9kdWx1cykpOwotICAgICAgICBrID0gMDsKLSAg
ICB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgc21hbGxlc3QgdmFsdWUgdGhhdCB0aGUgZ2VuZXJh
dG9yIGNhbiBwcm9kdWNlLiAqLwotICAgIHN0YXRpYyByZXN1bHRfdHlwZSBtaW4gQk9PU1RfUFJF
VkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkKLSAgICB7IHJldHVybiByZXN1bHRfdHlwZSgwKTsg
fQotICAgIC8qKiBSZXR1cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgdGhlIGdlbmVyYXRvciBj
YW4gcHJvZHVjZS4gKi8KLSAgICBzdGF0aWMgcmVzdWx0X3R5cGUgbWF4IEJPT1NUX1BSRVZFTlRf
TUFDUk9fU1VCU1RJVFVUSU9OICgpCi0gICAgeyByZXR1cm4gcmVzdWx0X3R5cGUoMSk7IH0KLQot
ICAgIC8qKiBSZXR1cm5zIHRoZSBuZXh0IHZhbHVlIG9mIHRoZSBnZW5lcmF0b3IuICovCi0gICAg
cmVzdWx0X3R5cGUgb3BlcmF0b3IoKSgpCi0gICAgewotICAgICAgICBzdGQ6OnNpemVfdCBzaG9y
dF9pbmRleCA9Ci0gICAgICAgICAgICAoayA8IHNob3J0X2xhZykgPwotICAgICAgICAgICAgICAg
IChrICsgbG9uZ19sYWcgLSBzaG9ydF9sYWcpIDoKLSAgICAgICAgICAgICAgICAoayAtIHNob3J0
X2xhZyk7Ci0gICAgICAgIGNhcnJ5ID0gZG9fdXBkYXRlKGssIHNob3J0X2luZGV4LCBjYXJyeSk7
Ci0gICAgICAgIFJlYWxUeXBlIHJlc3VsdCA9IHhba107Ci0gICAgICAgICsrazsKLSAgICAgICAg
aWYoayA+PSBsb25nX2xhZykKLSAgICAgICAgICAgIGsgPSAwOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLQotICAgIC8qKiBBZHZhbmNlcyB0aGUgc3RhdGUgb2YgdGhlIGdlbmVyYXRv
ciBieSBAYyB6LiAqLwotICAgIHZvaWQgZGlzY2FyZChib29zdDo6dWludG1heF90IHopCi0gICAg
eyBkZXRhaWw6OnN1YnRyYWN0X3dpdGhfY2FycnlfZGlzY2FyZDo6YXBwbHkoKnRoaXMsIHopOyB9
Ci0KLSAgICAvKiogRmlsbHMgYSByYW5nZSB3aXRoIHJhbmRvbSB2YWx1ZXMuICovCi0gICAgdGVt
cGxhdGU8Y2xhc3MgSXRlcj4KLSAgICB2b2lkIGdlbmVyYXRlKEl0ZXIgZmlyc3QsIEl0ZXIgbGFz
dCkKLSAgICB7IGRldGFpbDo6Z2VuZXJhdGVfZnJvbV9yZWFsKCp0aGlzLCBmaXJzdCwgbGFzdCk7
IH0KLQotICAgIC8qKiBXcml0ZXMgYSBcc3VidHJhY3Rfd2l0aF9jYXJyeV8wMV9lbmdpbmUgdG8g
YSBAYyBzdGQ6Om9zdHJlYW0uICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09Q
RVJBVE9SKG9zLCBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxX2VuZ2luZSwgZikKLSAgICB7Ci0gICAg
ICAgIHN0ZDo6aW9zX2Jhc2U6OmZtdGZsYWdzIG9sZGZsYWdzID0KLSAgICAgICAgICAgIG9zLmZs
YWdzKG9zLmRlYyB8IG9zLmZpeGVkIHwgb3MubGVmdCk7IAotICAgICAgICBmb3IodW5zaWduZWQg
aW50IGogPSAwOyBqIDwgZi5sb25nX2xhZzsgKytqKQotICAgICAgICAgICAgb3MgPDwgKGYuY29t
cHV0ZShqKSAqIGYuX21vZHVsdXMpIDw8ICcgJzsKLSAgICAgICAgb3MgPDwgKGYuY2FycnkgKiBm
Ll9tb2R1bHVzKTsKLSAgICAgICAgb3MuZmxhZ3Mob2xkZmxhZ3MpOwotICAgICAgICByZXR1cm4g
b3M7Ci0gICAgfQotICAgIAotICAgIC8qKiBSZWFkcyBhIFxzdWJ0cmFjdF93aXRoX2NhcnJ5XzAx
X2VuZ2luZSBmcm9tIGEgQGMgc3RkOjppc3RyZWFtLiAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRB
SUxfSVNUUkVBTV9PUEVSQVRPUihpcywgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMV9lbmdpbmUsIGYp
Ci0gICAgewotICAgICAgICBSZWFsVHlwZSB2YWx1ZTsKLSAgICAgICAgZm9yKHVuc2lnbmVkIGlu
dCBqID0gMDsgaiA8IGxvbmdfbGFnOyArK2opIHsKLSAgICAgICAgICAgIGlzID4+IHZhbHVlID4+
IHN0ZDo6d3M7Ci0gICAgICAgICAgICBmLnhbal0gPSB2YWx1ZSAvIGYuX21vZHVsdXM7Ci0gICAg
ICAgIH0KLSAgICAgICAgaXMgPj4gdmFsdWU7Ci0gICAgICAgIGYuY2FycnkgPSB2YWx1ZSAvIGYu
X21vZHVsdXM7Ci0gICAgICAgIGYuayA9IDA7Ci0gICAgICAgIHJldHVybiBpczsKLSAgICB9Ci0K
LSAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gZ2VuZXJhdG9ycyB3aWxsIHByb2R1Y2Ug
aWRlbnRpY2FsIHNlcXVlbmNlcy4gKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0VRVUFMSVRZ
X09QRVJBVE9SKHN1YnRyYWN0X3dpdGhfY2FycnlfMDFfZW5naW5lLCB4LCB5KQotICAgIHsKLSAg
ICAgICAgZm9yKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IHI7ICsraikKLSAgICAgICAgICAgIGlm
KHguY29tcHV0ZShqKSAhPSB5LmNvbXB1dGUoaikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKiogUmV0dXJucyB0cnVl
IGlmIHRoZSB0d28gZ2VuZXJhdG9ycyB3aWxsIHByb2R1Y2UgZGlmZmVyZW50IHNlcXVlbmNlcy4g
Ki8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0lORVFVQUxJVFlfT1BFUkFUT1Ioc3VidHJhY3Rf
d2l0aF9jYXJyeV8wMV9lbmdpbmUpCi0KLXByaXZhdGU6Ci0gICAgLy8vIFxjb25kIHNob3dfcHJp
dmF0ZQotICAgIFJlYWxUeXBlIGNvbXB1dGUodW5zaWduZWQgaW50IGluZGV4KSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIHhbKGsraW5kZXgpICUgbG9uZ19sYWddOwotICAgIH0KLQotICAg
IGZyaWVuZCBzdHJ1Y3QgZGV0YWlsOjpzdWJ0cmFjdF93aXRoX2NhcnJ5X2Rpc2NhcmQ7Ci0KLSAg
ICBSZWFsVHlwZSBkb191cGRhdGUoc3RkOjpzaXplX3QgY3VycmVudCwgc3RkOjpzaXplX3Qgc2hv
cnRfaW5kZXgsIFJlYWxUeXBlIGNhcnJ5KQotICAgIHsKLSAgICAgICAgUmVhbFR5cGUgZGVsdGEg
PSB4W3Nob3J0X2luZGV4XSAtIHhbY3VycmVudF0gLSBjYXJyeTsKLSAgICAgICAgaWYoZGVsdGEg
PCAwKSB7Ci0gICAgICAgICAgICBkZWx0YSArPSBSZWFsVHlwZSgxKTsKLSAgICAgICAgICAgIGNh
cnJ5ID0gUmVhbFR5cGUoMSkvX21vZHVsdXM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBjYXJyeSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgeFtjdXJyZW50XSA9IGRlbHRhOwotICAg
ICAgICByZXR1cm4gY2Fycnk7Ci0gICAgfQotICAgIC8vLyBcZW5kY29uZAotICAgIHN0ZDo6c2l6
ZV90IGs7Ci0gICAgUmVhbFR5cGUgY2Fycnk7Ci0gICAgUmVhbFR5cGUgeFtsb25nX2xhZ107Ci0g
ICAgUmVhbFR5cGUgX21vZHVsdXM7Ci19OwotCi0jaWZuZGVmIEJPT1NUX05PX0lOQ0xBU1NfTUVN
QkVSX0lOSVRJQUxJWkFUSU9OCi0vLyAgQSBkZWZpbml0aW9uIGlzIHJlcXVpcmVkIGV2ZW4gZm9y
IGludGVncmFsIHN0YXRpYyBjb25zdGFudHMKLXRlbXBsYXRlPGNsYXNzIFJlYWxUeXBlLCBzdGQ6
OnNpemVfdCB3LCBzdGQ6OnNpemVfdCBzLCBzdGQ6OnNpemVfdCByPgotY29uc3QgYm9vbCBzdWJ0
cmFjdF93aXRoX2NhcnJ5XzAxX2VuZ2luZTxSZWFsVHlwZSwgdywgcywgcj46Omhhc19maXhlZF9y
YW5nZTsKLXRlbXBsYXRlPGNsYXNzIFJlYWxUeXBlLCBzdGQ6OnNpemVfdCB3LCBzdGQ6OnNpemVf
dCBzLCBzdGQ6OnNpemVfdCByPgotY29uc3Qgc3RkOjpzaXplX3Qgc3VidHJhY3Rfd2l0aF9jYXJy
eV8wMV9lbmdpbmU8UmVhbFR5cGUsIHcsIHMsIHI+Ojp3b3JkX3NpemU7Ci10ZW1wbGF0ZTxjbGFz
cyBSZWFsVHlwZSwgc3RkOjpzaXplX3Qgdywgc3RkOjpzaXplX3Qgcywgc3RkOjpzaXplX3Qgcj4K
LWNvbnN0IHN0ZDo6c2l6ZV90IHN1YnRyYWN0X3dpdGhfY2FycnlfMDFfZW5naW5lPFJlYWxUeXBl
LCB3LCBzLCByPjo6bG9uZ19sYWc7Ci10ZW1wbGF0ZTxjbGFzcyBSZWFsVHlwZSwgc3RkOjpzaXpl
X3Qgdywgc3RkOjpzaXplX3Qgcywgc3RkOjpzaXplX3Qgcj4KLWNvbnN0IHN0ZDo6c2l6ZV90IHN1
YnRyYWN0X3dpdGhfY2FycnlfMDFfZW5naW5lPFJlYWxUeXBlLCB3LCBzLCByPjo6c2hvcnRfbGFn
OwotdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGUsIHN0ZDo6c2l6ZV90IHcsIHN0ZDo6c2l6ZV90IHMs
IHN0ZDo6c2l6ZV90IHI+Ci1jb25zdCB1aW50MzJfdCBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxX2Vu
Z2luZTxSZWFsVHlwZSwgdywgcywgcj46OmRlZmF1bHRfc2VlZDsKLSNlbmRpZgotCi0KLS8vLyBc
Y29uZCBzaG93X2RlcHJlY2F0ZWQKLQotdGVtcGxhdGU8Y2xhc3MgSW50VHlwZSwgSW50VHlwZSBt
LCB1bnNpZ25lZCBzLCB1bnNpZ25lZCByLCBJbnRUeXBlIHY+Ci1jbGFzcyBzdWJ0cmFjdF93aXRo
X2NhcnJ5IDoKLSAgICBwdWJsaWMgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU8SW50VHlwZSwK
LSAgICAgICAgYm9vc3Q6OnN0YXRpY19sb2cyPG0+Ojp2YWx1ZSwgcywgcj4KLXsKLSAgICB0eXBl
ZGVmIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPEludFR5cGUsCi0gICAgICAgIGJvb3N0Ojpz
dGF0aWNfbG9nMjxtPjo6dmFsdWUsIHMsIHI+IGJhc2VfdHlwZTsKLXB1YmxpYzoKLSAgICBzdWJ0
cmFjdF93aXRoX2NhcnJ5KCkge30KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0dFTkVSQVRPUl9D
T05TVFJVQ1RPUihzdWJ0cmFjdF93aXRoX2NhcnJ5LCBHZW4sIGdlbikKLSAgICB7IHNlZWQoZ2Vu
KTsgfQotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfQVJJVEhNRVRJQ19DT05TVFJVQ1RPUihzdWJ0
cmFjdF93aXRoX2NhcnJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnRUeXBlLCB2YWwpCi0gICAgeyBzZWVkKHZhbCk7IH0KLSAgICB0ZW1wbGF0ZTxj
bGFzcyBJdD4KLSAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5KEl0JiBmaXJzdCwgSXQgbGFzdCkgOiBi
YXNlX3R5cGUoZmlyc3QsIGxhc3QpIHt9Ci0gICAgdm9pZCBzZWVkKCkgeyBiYXNlX3R5cGU6OnNl
ZWQoKTsgfQotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfR0VORVJBVE9SX1NFRUQoc3VidHJhY3Rf
d2l0aF9jYXJyeSwgR2VuLCBnZW4pCi0gICAgewotICAgICAgICBkZXRhaWw6OmdlbmVyYXRvcl9z
ZWVkX3NlcTxHZW4+IHNlcShnZW4pOwotICAgICAgICBiYXNlX3R5cGU6OnNlZWQoc2VxKTsKLSAg
ICB9Ci0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9BUklUSE1FVElDX1NFRUQoc3VidHJhY3Rfd2l0
aF9jYXJyeSwgSW50VHlwZSwgdmFsKQotICAgIHsgYmFzZV90eXBlOjpzZWVkKHZhbCk7IH0KLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBJdD4KLSAgICB2b2lkIHNlZWQoSXQmIGZpcnN0LCBJdCBsYXN0KSB7
IGJhc2VfdHlwZTo6c2VlZChmaXJzdCwgbGFzdCk7IH0KLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFJl
YWxUeXBlLCBpbnQgdywgdW5zaWduZWQgcywgdW5zaWduZWQgciwgaW50IHYgPSAwPgotY2xhc3Mg
c3VidHJhY3Rfd2l0aF9jYXJyeV8wMSA6Ci0gICAgcHVibGljIHN1YnRyYWN0X3dpdGhfY2Fycnlf
MDFfZW5naW5lPFJlYWxUeXBlLCB3LCBzLCByPgotewotICAgIHR5cGVkZWYgc3VidHJhY3Rfd2l0
aF9jYXJyeV8wMV9lbmdpbmU8UmVhbFR5cGUsIHcsIHMsIHI+IGJhc2VfdHlwZTsKLXB1YmxpYzoK
LSAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxKCkge30KLSAgICBCT09TVF9SQU5ET01fREVUQUlM
X0dFTkVSQVRPUl9DT05TVFJVQ1RPUihzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxLCBHZW4sIGdlbikK
LSAgICB7IHNlZWQoZ2VuKTsgfQotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfQVJJVEhNRVRJQ19D
T05TVFJVQ1RPUihzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgdmFsKQotICAgIHsgc2VlZCh2YWwp
OyB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+Ci0gICAgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMShJ
dCYgZmlyc3QsIEl0IGxhc3QpIDogYmFzZV90eXBlKGZpcnN0LCBsYXN0KSB7fQotICAgIHZvaWQg
c2VlZCgpIHsgYmFzZV90eXBlOjpzZWVkKCk7IH0KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0dF
TkVSQVRPUl9TRUVEKHN1YnRyYWN0X3dpdGhfY2FycnlfMDEsIEdlbiwgZ2VuKQotICAgIHsKLSAg
ICAgICAgZGV0YWlsOjpnZW5lcmF0b3Jfc2VlZF9zZXE8R2VuPiBzZXEoZ2VuKTsKLSAgICAgICAg
YmFzZV90eXBlOjpzZWVkKHNlcSk7Ci0gICAgfQotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfQVJJ
VEhNRVRJQ19TRUVEKHN1YnRyYWN0X3dpdGhfY2FycnlfMDEsIHVpbnQzMl90LCB2YWwpCi0gICAg
eyBiYXNlX3R5cGU6OnNlZWQodmFsKTsgfQotICAgIHRlbXBsYXRlPGNsYXNzIEl0PgotICAgIHZv
aWQgc2VlZChJdCYgZmlyc3QsIEl0IGxhc3QpIHsgYmFzZV90eXBlOjpzZWVkKGZpcnN0LCBsYXN0
KTsgfQotfTsKLQotLy8vIFxlbmRjb25kCi0KLW5hbWVzcGFjZSBkZXRhaWwgewotCi10ZW1wbGF0
ZTxjbGFzcyBFbmdpbmU+Ci1zdHJ1Y3QgZ2VuZXJhdG9yX2JpdHM7Ci0KLXRlbXBsYXRlPGNsYXNz
IFJlYWxUeXBlLCBzdGQ6OnNpemVfdCB3LCBzdGQ6OnNpemVfdCBzLCBzdGQ6OnNpemVfdCByPgot
c3RydWN0IGdlbmVyYXRvcl9iaXRzPHN1YnRyYWN0X3dpdGhfY2FycnlfMDFfZW5naW5lPFJlYWxU
eXBlLCB3LCBzLCByPiA+IHsKLSAgICBzdGF0aWMgc3RkOjpzaXplX3QgdmFsdWUoKSB7IHJldHVy
biB3OyB9Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBSZWFsVHlwZSwgaW50IHcsIHVuc2lnbmVkIHMs
IHVuc2lnbmVkIHIsIGludCB2Pgotc3RydWN0IGdlbmVyYXRvcl9iaXRzPHN1YnRyYWN0X3dpdGhf
Y2FycnlfMDE8UmVhbFR5cGUsIHcsIHMsIHIsIHY+ID4gewotICAgIHN0YXRpYyBzdGQ6OnNpemVf
dCB2YWx1ZSgpIHsgcmV0dXJuIHc7IH0KLX07Ci0KLX0KLQotfSAvLyBuYW1lc3BhY2UgcmFuZG9t
Ci19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfUkFORE9NX1NVQlRSQUNU
X1dJVEhfQ0FSUllfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9yYW5kb20vdGF1czg4LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS90YXVzODguaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2ODIxNGYzYWVkMDM2YTdiY2IyYTNkOTc5YzEyMmE4OTJkOGE2YWZlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS90YXVzODguaHBwCisrKyAvZGV2L251
bGwKQEAgLTEsNDUgKzAsMCBAQAotLyogYm9vc3QgcmFuZG9tL3RhdXM4OC5ocHAgaGVhZGVyIGZp
bGUKLSAqCi0gKiBDb3B5cmlnaHQgSmVucyBNYXVyZXIgMjAwMC0yMDAxCi0gKiBDb3B5cmlnaHQg
U3RldmVuIFdhdGFuYWJlIDIwMTEKLSAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0
d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotICogYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAqIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkKLSAqCi0gKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9yYW5kb20gZm9y
IGRvY3VtZW50YXRpb24uCi0gKgotICogJElkJAotICoKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1JB
TkRPTV9UQVVTODhfSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9UQVVTODhfSFBQCi0KLSNpbmNs
dWRlIDxib29zdC9yYW5kb20vbGluZWFyX2ZlZWRiYWNrX3NoaWZ0LmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9yYW5kb20veG9yX2NvbWJpbmUuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNw
YWNlIHJhbmRvbSB7Ci0KLS8qKiAKLSAqIFRoZSBzcGVjaWFsaXphdGlvbiB0YXVzODggd2FzIHN1
Z2dlc3RlZCBpbgotICoKLSAqICBAYmxvY2txdW90ZQotICogICJNYXhpbWFsbHkgRXF1aWRpc3Ry
aWJ1dGVkIENvbWJpbmVkIFRhdXN3b3J0aGUgR2VuZXJhdG9ycyIsCi0gKiAgUGllcnJlIEwnRWN1
eWVyLCBNYXRoZW1hdGljcyBvZiBDb21wdXRhdGlvbiwgVm9sdW1lIDY1LAotICogIE51bWJlciAy
MTMsIEphbnVhcnkgMTk5NiwgUGFnZXMgMjAzLTIxMwotICogIEBlbmRibG9ja3F1b3RlCi0gKi8K
LXR5cGVkZWYgeG9yX2NvbWJpbmVfZW5naW5lPAotICAgIHhvcl9jb21iaW5lX2VuZ2luZTwKLSAg
ICAgICAgbGluZWFyX2ZlZWRiYWNrX3NoaWZ0X2VuZ2luZTx1aW50MzJfdCwgMzIsIDMxLCAxMywg
MTI+LCAwLAotICAgICAgICBsaW5lYXJfZmVlZGJhY2tfc2hpZnRfZW5naW5lPHVpbnQzMl90LCAz
MiwgMjksIDIsIDQ+LCAwPiwgMCwKLSAgICBsaW5lYXJfZmVlZGJhY2tfc2hpZnRfZW5naW5lPHVp
bnQzMl90LCAzMiwgMjgsIDMsIDE3PiwgMD4gdGF1czg4OwotCi19IC8vIG5hbWVzcGFjZSByYW5k
b20KLQotdXNpbmcgcmFuZG9tOjp0YXVzODg7Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNl
bmRpZiAvLyBCT09TVF9SQU5ET01fVEFVUzg4X0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3RyYWl0cy5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vdHJhaXRzLmhwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc1NDIxYTRkMGFjOTIwM2JjN2Y4NTNhYjhhM2Y2
ZmQ5MjY4MDY5Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vdHJhaXRz
LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKiBib29zdCByYW5kb20vdHJh
aXRzLmhwcCBoZWFkZXIgZmlsZQotICoKLSAqIENvcHlyaWdodCBKb2huIE1hZGRvY2sgMjAxNQot
ICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24g
MS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICoKLSAqIFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9j
dW1lbnRhdGlvbi4KLSAqCi0gKiBUaGVzZSB0cmFpdHMgY2xhc3NlcyBzZXJ2ZSB0d28gcHVycG9z
ZXM6IHRoZXkgYXJlIGRlc2lnbmVkIHRvIG1vc3RseQotICogd29yayBvdXQgb2YgdGhlIGJveCBm
b3IgbXVsdGlwcmVjaXNpb24gdHlwZXMgKGllIG51bWJlciB0eXBlcyB0aGF0IGFyZQotICogQysr
IGNsYXNzIHR5cGVzIGFuZCBub3QgaW50ZWdlcnMgb3IgZmxvYXRzIGZyb20gdHlwZS10cmFpdHMg
cG9pbnQgb2YgdmlldyksCi0gKiB0aGV5IGFyZSBhbHNvIGEgcG90ZW50aWFsIHBvaW50IG9mIHNw
ZWNpYWxpemF0aW9uIGZvciB1c2VyLWRlZmluZWQKLSAqIG51bWJlciB0eXBlcy4KLSAqCi0gKiAk
SWQkCi0gKi8KLQotI2lmbmRlZiBCT09TVF9SQU5ET01fVFJBSVRTX0hQUAotI2RlZmluZSBCT09T
VF9SQU5ET01fVFJBSVRTX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfc2ln
bmVkLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19pbnRlZ3JhbC5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvbWFrZV91bnNpZ25lZC5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvbXBsL2Jvb2wuaHBwPgotI2luY2x1ZGUgPGxpbWl0cz4KLQotbmFtZXNwYWNlIGJvb3N0
IHsKLW5hbWVzcGFjZSByYW5kb20gewotbmFtZXNwYWNlIHRyYWl0cyB7Ci0gICAvLyBcY29uZCBz
aG93X3ByaXZhdGUKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBib29sIGludHJpbnNpYz4KLSAgIHN0
cnVjdCBtYWtlX3Vuc2lnbmVkX2ltcAotICAgewotICAgICAgdHlwZWRlZiB0eXBlbmFtZSBib29z
dDo6bWFrZV91bnNpZ25lZDxUPjo6dHlwZSB0eXBlOwotICAgfTsKLSAgIHRlbXBsYXRlIDxjbGFz
cyBUPgotICAgc3RydWN0IG1ha2VfdW5zaWduZWRfaW1wPFQsIGZhbHNlPgotICAgewotICAgICAg
Qk9PU1RfU1RBVElDX0FTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19zcGVjaWFsaXpl
ZCk7Ci0gICAgICBCT09TVF9TVEFUSUNfQVNTRVJUKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Omlz
X3NpZ25lZCA9PSBmYWxzZSk7Ci0gICAgICBCT09TVF9TVEFUSUNfQVNTRVJUKHN0ZDo6bnVtZXJp
Y19saW1pdHM8VD46OmlzX2ludGVnZXIgPT0gdHJ1ZSk7Ci0gICAgICB0eXBlZGVmIFQgdHlwZTsK
LSAgIH07Ci0gICAvLyBcZW5kY29uZAotICAgLyoqIFxicmllZiBDb252ZXJ0cyB0aGUgYXJndW1l
bnQgdHlwZSBUIHRvIGFuIHVuc2lnbmVkIHR5cGUuCi0gICAqCi0gICAqIFRoaXMgdHJhaXQgaGFz
IGEgc2luZ2xlIG1lbWJlciBgdHlwZWAgd2hpY2ggaXMgdGhlIHVuc2lnbmVkIHR5cGUgY29ycmVz
cG9uZGluZyB0byBULgotICAgKiBOb3RlIHRoYXQKLSAgICogaWYgVCBpcyBzaWduZWQsIHRoZW4g
bWVtYmVyIGB0eXBlYCAqc2hvdWxkIGRlZmluZSBhIHR5cGUgd2l0aCBvbmUgbW9yZSBiaXQgcHJl
Y2lzaW9uIHRoYW4gVCouICBGb3IgYnVpbHQtaW4KLSAgICogdHlwZXMgdGhpcyB0cmFpdCBkZWZh
dWx0cyB0byBgYm9vc3Q6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGVgLiAgRm9yIHVzZXIgZGVmaW5l
ZCB0eXBlcyBpdCBzaW1wbHkgYXNzZXJ0cyB0aGF0Ci0gICAqIHRoZSBhcmd1bWVudCB0eXBlIFQg
aXMgYW4gdW5zaWduZWQgaW50ZWdlciAodXNpbmcgc3RkOjpudW1lcmljX2xpbWl0cykuCi0gICAq
IFVzZXIgZGVmaW5lZCBzcGVjaWFsaXphdGlvbnMgbWF5IGJlIHByb3ZpZGVkIGZvciBvdGhlciBj
YXNlcy4KLSAgICovCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgIHN0cnVjdCBtYWtlX3Vuc2ln
bmVkCi0gICAvLyBcY29uZCBzaG93X3ByaXZhdGUKLSAgICAgIDogcHVibGljIG1ha2VfdW5zaWdu
ZWRfaW1wIDwgVCwgYm9vc3Q6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSA+IAotICAgICAgLy8gXGVu
ZGNvbmQKLSAgIHt9OwotICAgLy8gXGNvbmQgc2hvd19wcml2YXRlCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVCwgYm9vbCBpbnRyaW5zaWM+Ci0gICBzdHJ1Y3QgbWFrZV91bnNpZ25lZF9vcl91bmJvdW5k
ZWRfaW1wCi0gICB7Ci0gICAgICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0OjptYWtlX3Vuc2lnbmVk
PFQ+Ojp0eXBlIHR5cGU7Ci0gICB9OwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICBzdHJ1Y3Qg
bWFrZV91bnNpZ25lZF9vcl91bmJvdW5kZWRfaW1wPFQsIGZhbHNlPgotICAgewotICAgICAgQk9P
U1RfU1RBVElDX0FTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19zcGVjaWFsaXplZCk7
Ci0gICAgICBCT09TVF9TVEFUSUNfQVNTRVJUKChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19z
aWduZWQgPT0gZmFsc2UpIHx8IChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19ib3VuZGVkID09
IGZhbHNlKSk7Ci0gICAgICBCT09TVF9TVEFUSUNfQVNTRVJUKHN0ZDo6bnVtZXJpY19saW1pdHM8
VD46OmlzX2ludGVnZXIgPT0gdHJ1ZSk7Ci0gICAgICB0eXBlZGVmIFQgdHlwZTsKLSAgIH07Ci0g
ICAvLyBcZW5kY29uZAotICAgLyoqIFxicmllZiBDb252ZXJ0cyB0aGUgYXJndW1lbnQgdHlwZSBU
IHRvIGVpdGhlciBhbiB1bnNpZ25lZCB0eXBlIG9yIGFuIHVuYm91bmRlZCBpbnRlZ2VyIHR5cGUu
Ci0gICAqCi0gICAqIFRoaXMgdHJhaXQgaGFzIGEgc2luZ2xlIG1lbWJlciBgdHlwZWAgd2hpY2gg
aXMgZWl0aGVyIHRoZSB1bnNpZ25lZCB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gVCBvciBhbiB1bmJv
dW5kZWQKLSAgICogaW50ZWdlciB0eXBlLiAgVGhpcyB0cmFpdCBpcyB1c2VkIHRvIGdlbmVyYXRl
IHR5cGVzIHN1aXRhYmxlIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYSByYW5nZTogYXMgYSByZXN1
bHQKLSAgICogaWYgVCBpcyBzaWduZWQsIHRoZW4gbWVtYmVyIGB0eXBlYCAqc2hvdWxkIGRlZmlu
ZSBhIHR5cGUgd2l0aCBvbmUgbW9yZSBiaXQgcHJlY2lzaW9uIHRoYW4gVCouICBGb3IgYnVpbHQt
aW4KLSAgICogdHlwZXMgdGhpcyB0cmFpdCBkZWZhdWx0cyB0byBgYm9vc3Q6Om1ha2VfdW5zaWdu
ZWQ8VD46OnR5cGVgLiAgRm9yIHVzZXIgZGVmaW5lZCB0eXBlcyBpdCBzaW1wbHkgYXNzZXJ0cyB0
aGF0Ci0gICAqIHRoZSBhcmd1bWVudCB0eXBlIFQgaXMgZWl0aGVyIGFuIHVuYm91bmRlZCBpbnRl
Z2VyLCBvciBhbiB1bnNpZ25lZCBvbmUgKHVzaW5nIHN0ZDo6bnVtZXJpY19saW1pdHMpLgotICAg
KiBVc2VyIGRlZmluZWQgc3BlY2lhbGl6YXRpb25zIG1heSBiZSBwcm92aWRlZCBmb3Igb3RoZXIg
Y2FzZXMuCi0gICAqLwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICBzdHJ1Y3QgbWFrZV91bnNp
Z25lZF9vcl91bmJvdW5kZWQKLSAgICAgIC8vIFxjb25kIHNob3dfcHJpdmF0ZQotICAgICAgOiBw
dWJsaWMgbWFrZV91bnNpZ25lZF9vcl91bmJvdW5kZWRfaW1wIDwgVCwgYm9vc3Q6OmlzX2ludGVn
cmFsPFQ+Ojp2YWx1ZSA+IAotICAgICAgLy8gXGVuZGNvbmQKLSAgIHt9OwotICAgLyoqIFxicmll
ZiBUcmFpdHMgY2xhc3MgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0eXBlIFQgaXMgYW4gaW50ZWdl
cgotICAgKi8KLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgc3RydWN0IGlzX2ludGVncmFsCi0g
ICAgICA6IHB1YmxpYyBtcGw6OmJvb2xfPGJvb3N0Ojppc19pbnRlZ3JhbDxUPjo6dmFsdWUgfHwg
KHN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX2ludGVnZXIpPgotICAge307Ci0gICAvKiogXGJy
aWVmIFRyYWl0cyBjbGFzcyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHR5cGUgVCBpcyBhIHNpZ25l
ZCBpbnRlZ2VyCi0gICAqLwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19zaWduZWQK
LSAgICAgIDogcHVibGljIG1wbDo6Ym9vbF8gPCBib29zdDo6aXNfc2lnbmVkPFQ+Ojp2YWx1ZSB8
fCAoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNfc3BlY2lhbGl6ZWQgJiYgc3RkOjpudW1lcmlj
X2xpbWl0czxUPjo6aXNfaW50ZWdlciAmJiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19zaWdu
ZWQpPgotICAge307Ci0KLX0KLX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vdHJpYW5nbGVfZGlzdHJpYnV0
aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRv
bS90cmlhbmdsZV9kaXN0cmlidXRpb24uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2ZDM3ZTJiYjkyNmFhMDJhMjg1YjBlNWE4NzNlOTNlZDdiYTVhYzg1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS90cmlhbmdsZV9kaXN0cmlidXRpb24uaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjMyICswLDAgQEAKLS8qIGJvb3N0IHJhbmRvbS90cmlhbmdsZV9kaXN0
cmlidXRpb24uaHBwIGhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0IEplbnMgTWF1cmVyIDIw
MDAtMjAwMQotICogQ29weXJpZ2h0IFN0ZXZlbiBXYXRhbmFiZSAyMDExCi0gKiBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAq
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgot
ICoKLSAqICRJZCQKLSAqCi0gKiBSZXZpc2lvbiBoaXN0b3J5Ci0gKiAgMjAwMS0wMi0xOCAgbW92
ZWQgdG8gaW5kaXZpZHVhbCBoZWFkZXIgZmlsZXMKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1JBTkRP
TV9UUklBTkdMRV9ESVNUUklCVVRJT05fSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9UUklBTkdM
RV9ESVNUUklCVVRJT05fSFBQCi0KLSNpbmNsdWRlIDxib29zdC9jb25maWcvbm9fdHIxL2NtYXRo
LmhwcD4KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8aW9zPgotI2luY2x1ZGUgPGlzdHJl
YW0+Ci0jaW5jbHVkZSA8Ym9vc3QvYXNzZXJ0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20v
ZGV0YWlsL2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9vcGVyYXRv
cnMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS91bmlmb3JtXzAxLmhwcD4KLQotbmFtZXNw
YWNlIGJvb3N0IHsKLW5hbWVzcGFjZSByYW5kb20gewotCi0vKioKLSAqIEluc3RhbnRpYXRpb25z
IG9mIEBjIHRyaWFuZ2xlX2Rpc3RyaWJ1dGlvbiBtb2RlbCBhIFxyYW5kb21fZGlzdHJpYnV0aW9u
LgotICogQSBAYyB0cmlhbmdsZV9kaXN0cmlidXRpb24gaGFzIHRocmVlIHBhcmFtZXRlcnMsIEBj
IGEsIEBjIGIsIGFuZCBAYyBjLAotICogd2hpY2ggYXJlIHRoZSBzbWFsbGVzdCwgdGhlIG1vc3Qg
cHJvYmFibGUgYW5kIHRoZSBsYXJnZXN0IHZhbHVlcyBvZgotICogdGhlIGRpc3RyaWJ1dGlvbiBy
ZXNwZWN0aXZlbHkuCi0gKi8KLXRlbXBsYXRlPGNsYXNzIFJlYWxUeXBlID0gZG91YmxlPgotY2xh
c3MgdHJpYW5nbGVfZGlzdHJpYnV0aW9uCi17Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBSZWFsVHlw
ZSBpbnB1dF90eXBlOwotICAgIHR5cGVkZWYgUmVhbFR5cGUgcmVzdWx0X3R5cGU7Ci0KLSAgICBj
bGFzcyBwYXJhbV90eXBlCi0gICAgewotICAgIHB1YmxpYzoKLQotICAgICAgICB0eXBlZGVmIHRy
aWFuZ2xlX2Rpc3RyaWJ1dGlvbiBkaXN0cmlidXRpb25fdHlwZTsKLQotICAgICAgICAvKiogQ29u
c3RydWN0cyB0aGUgcGFyYW1ldGVycyBvZiBhIEBjIHRyaWFuZ2xlX2Rpc3RyaWJ1dGlvbi4gKi8K
LSAgICAgICAgZXhwbGljaXQgcGFyYW1fdHlwZShSZWFsVHlwZSBhX2FyZyA9IFJlYWxUeXBlKDAu
MCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbFR5cGUgYl9hcmcgPSBSZWFsVHlw
ZSgwLjUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxUeXBlIGNfYXJnID0gUmVh
bFR5cGUoMS4wKSkKLSAgICAgICAgICA6IF9hKGFfYXJnKSwgX2IoYl9hcmcpLCBfYyhjX2FyZykK
LSAgICAgICAgewotICAgICAgICAgICAgQk9PU1RfQVNTRVJUKF9hIDw9IF9iICYmIF9iIDw9IF9j
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKiBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlIG9m
IHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgICAgIFJlYWxUeXBlIGEoKSBjb25zdCB7IHJldHVy
biBfYTsgfQotICAgICAgICAvKiogUmV0dXJucyB0aGUgbW9kZSBvZiB0aGUgZGlzdHJpYnV0aW9u
LiAqLwotICAgICAgICBSZWFsVHlwZSBiKCkgY29uc3QgeyByZXR1cm4gX2I7IH0KLSAgICAgICAg
LyoqIFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAg
ICAgICAgUmVhbFR5cGUgYygpIGNvbnN0IHsgcmV0dXJuIF9jOyB9Ci0KLSAgICAgICAgLyoqIFdy
aXRlcyB0aGUgcGFyYW1ldGVycyB0byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICAgICAgQk9P
U1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCBwYXJhbV90eXBlLCBwYXJtKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBvcyA8PCBwYXJtLl9hIDw8ICIgIiA8PCBwYXJtLl9iIDw8
ICIgIiA8PCBwYXJtLl9jOwotICAgICAgICAgICAgcmV0dXJuIG9zOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLyoqIFJlYWRzIHRoZSBwYXJhbWV0ZXJzIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uICov
Ci0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRPUihpcywgcGFyYW1f
dHlwZSwgcGFybSkKLSAgICAgICAgewotICAgICAgICAgICAgZG91YmxlIGFfaW4sIGJfaW4sIGNf
aW47Ci0gICAgICAgICAgICBpZihpcyA+PiBhX2luID4+IHN0ZDo6d3MgPj4gYl9pbiA+PiBzdGQ6
OndzID4+IGNfaW4pIHsKLSAgICAgICAgICAgICAgICBpZihhX2luIDw9IGJfaW4gJiYgYl9pbiA8
PSBjX2luKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcm0uX2EgPSBhX2luOwotICAgICAgICAg
ICAgICAgICAgICBwYXJtLl9iID0gYl9pbjsKLSAgICAgICAgICAgICAgICAgICAgcGFybS5fYyA9
IGNfaW47Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaXMu
c2V0c3RhdGUoc3RkOjppb3NfYmFzZTo6ZmFpbGJpdCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGlzOwotICAgICAgICB9Ci0KLSAgICAgICAg
LyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgZXF1YWwu
ICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IocGFyYW1f
dHlwZSwgbGhzLCByaHMpCi0gICAgICAgIHsgcmV0dXJuIGxocy5fYSA9PSByaHMuX2EgJiYgbGhz
Ll9iID09IHJocy5fYiAmJiBsaHMuX2MgPT0gcmhzLl9jOyB9Ci0KLSAgICAgICAgLyoqIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgdHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgZGlmZmVyZW50LiAqLwot
ICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0lORVFVQUxJVFlfT1BFUkFUT1IocGFyYW1fdHlw
ZSkKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlYWxUeXBlIF9hOwotICAgICAgICBSZWFsVHlw
ZSBfYjsKLSAgICAgICAgUmVhbFR5cGUgX2M7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIENv
bnN0cnVjdHMgYSBAYyB0cmlhbmdsZV9kaXN0cmlidXRpb24gd2l0aCB0aGUgcGFyYW1ldGVycwot
ICAgICAqIEBjIGEsIEBjIGIsIGFuZCBAYyBjLgotICAgICAqCi0gICAgICogUHJlY29uZGl0aW9u
czogYSA8PSBiIDw9IGMuCi0gICAgICovCi0gICAgZXhwbGljaXQgdHJpYW5nbGVfZGlzdHJpYnV0
aW9uKFJlYWxUeXBlIGFfYXJnID0gUmVhbFR5cGUoMC4wKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVhbFR5cGUgYl9hcmcgPSBSZWFsVHlwZSgwLjUpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFsVHlwZSBjX2FyZyA9IFJlYWxUeXBlKDEuMCkp
Ci0gICAgICA6IF9hKGFfYXJnKSwgX2IoYl9hcmcpLCBfYyhjX2FyZykKLSAgICB7Ci0gICAgICAg
IEJPT1NUX0FTU0VSVChfYSA8PSBfYiAmJiBfYiA8PSBfYyk7Ci0gICAgICAgIGluaXQoKTsKLSAg
ICB9Ci0KLSAgICAvKiogQ29uc3RydWN0cyBhIEBjIHRyaWFuZ2xlX2Rpc3RyaWJ1dGlvbiBmcm9t
IGl0cyBwYXJhbWV0ZXJzLiAqLwotICAgIGV4cGxpY2l0IHRyaWFuZ2xlX2Rpc3RyaWJ1dGlvbihj
b25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgICAgOiBfYShwYXJtLmEoKSksIF9iKHBhcm0uYigp
KSwgX2MocGFybS5jKCkpCi0gICAgewotICAgICAgICBpbml0KCk7Ci0gICAgfQotCi0gICAgLy8g
Y29tcGlsZXItZ2VuZXJhdGVkIGNvcHkgY3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvciBhcmUg
ZmluZQotCi0gICAgLyoqIFJldHVybnMgdGhlIEBjIGEgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmli
dXRpb24gKi8KLSAgICByZXN1bHRfdHlwZSBhKCkgY29uc3QgeyByZXR1cm4gX2E7IH0KLSAgICAv
KiogUmV0dXJucyB0aGUgQGMgYiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbiAqLwotICAg
IHJlc3VsdF90eXBlIGIoKSBjb25zdCB7IHJldHVybiBfYjsgfQotICAgIC8qKiBSZXR1cm5zIHRo
ZSBAYyBjIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uICovCi0gICAgcmVzdWx0X3R5cGUg
YygpIGNvbnN0IHsgcmV0dXJuIF9jOyB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgc21hbGxlc3Qg
dmFsdWUgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGNhbiBwcm9kdWNlLiAqLwotICAgIFJlYWxUeXBl
IG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKSBjb25zdCB7IHJldHVybiBf
YTsgfQotICAgIC8qKiBSZXR1cm5zIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1
dGlvbiBjYW4gcHJvZHVjZS4gKi8KLSAgICBSZWFsVHlwZSBtYXggQk9PU1RfUFJFVkVOVF9NQUNS
T19TVUJTVElUVVRJT04gKCkgY29uc3QgeyByZXR1cm4gX2M7IH0KLQotICAgIC8qKiBSZXR1cm5z
IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgcGFyYW1fdHlwZSBw
YXJhbSgpIGNvbnN0IHsgcmV0dXJuIHBhcmFtX3R5cGUoX2EsIF9iLCBfYyk7IH0KLSAgICAvKiog
U2V0cyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIHZvaWQgcGFy
YW0oY29uc3QgcGFyYW1fdHlwZSYgcGFybSkKLSAgICB7Ci0gICAgICAgIF9hID0gcGFybS5hKCk7
Ci0gICAgICAgIF9iID0gcGFybS5iKCk7Ci0gICAgICAgIF9jID0gcGFybS5jKCk7Ci0gICAgICAg
IGluaXQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFZmZlY3RzOiBTdWJzZXF1ZW50IHVz
ZXMgb2YgdGhlIGRpc3RyaWJ1dGlvbiBkbyBub3QgZGVwZW5kCi0gICAgICogb24gdmFsdWVzIHBy
b2R1Y2VkIGJ5IGFueSBlbmdpbmUgcHJpb3IgdG8gaW52b2tpbmcgcmVzZXQuCi0gICAgICovCi0g
ICAgdm9pZCByZXNldCgpIHsgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHJhbmRvbSB2
YXJpYXRlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUKLSAgICAgKiB0cmlhbmdsZSBkaXN0
cmlidXRpb24uCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5naW5lPgotICAgIHJlc3Vs
dF90eXBlIG9wZXJhdG9yKCkoRW5naW5lJiBlbmcpCi0gICAgewotICAgICAgICB1c2luZyBzdGQ6
OnNxcnQ7Ci0gICAgICAgIHJlc3VsdF90eXBlIHUgPSB1bmlmb3JtXzAxPHJlc3VsdF90eXBlPigp
KGVuZyk7Ci0gICAgICAgIGlmKCB1IDw9IHExICkKLSAgICAgICAgICAgIHJldHVybiBfYSArIHAx
KnNxcnQodSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIF9jIC0gZDMqc3FydChkMip1
LWQxKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgcmFuZG9tIHZhcmlhdGUg
ZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZQotICAgICAqIHRyaWFuZ2xlIGRpc3RyaWJ1dGlv
biB3aXRoIHBhcmFtZXRlcnMgc3BlY2lmaWVkIGJ5IHBhcmFtLgotICAgICAqLwotICAgIHRlbXBs
YXRlPGNsYXNzIEVuZ2luZT4KLSAgICByZXN1bHRfdHlwZSBvcGVyYXRvcigpKEVuZ2luZSYgZW5n
LCBjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgIHsgcmV0dXJuIHRyaWFuZ2xlX2Rpc3RyaWJ1
dGlvbihwYXJtKShlbmcpOyB9Ci0KLSAgICAvKiogV3JpdGVzIHRoZSBkaXN0cmlidXRpb24gdG8g
YSBAYyBzdGQ6Om9zdHJlYW0uICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09Q
RVJBVE9SKG9zLCB0cmlhbmdsZV9kaXN0cmlidXRpb24sIHRkKQotICAgIHsKLSAgICAgICAgb3Mg
PDwgdGQucGFyYW0oKTsKLSAgICAgICAgcmV0dXJuIG9zOwotICAgIH0KLQotICAgIC8qKiBSZWFk
cyB0aGUgZGlzdHJpYnV0aW9uIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uICovCi0gICAgQk9PU1Rf
UkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlzLCB0cmlhbmdsZV9kaXN0cmlidXRpb24s
IHRkKQotICAgIHsKLSAgICAgICAgcGFyYW1fdHlwZSBwYXJtOwotICAgICAgICBpZihpcyA+PiBw
YXJtKSB7Ci0gICAgICAgICAgICB0ZC5wYXJhbShwYXJtKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gaXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0
d28gZGlzdHJpYnV0aW9ucyB3aWxsIHByb2R1Y2UgaWRlbnRpY2FsCi0gICAgICogc2VxdWVuY2Vz
IG9mIHZhbHVlcyBnaXZlbiBlcXVhbCBnZW5lcmF0b3JzLgotICAgICAqLwotICAgIEJPT1NUX1JB
TkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IodHJpYW5nbGVfZGlzdHJpYnV0aW9uLCBsaHMs
IHJocykKLSAgICB7IHJldHVybiBsaHMuX2EgPT0gcmhzLl9hICYmIGxocy5fYiA9PSByaHMuX2Ig
JiYgbGhzLl9jID09IHJocy5fYzsgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlm
IHRoZSB0d28gZGlzdHJpYnV0aW9ucyBtYXkgcHJvZHVjZSBkaWZmZXJlbnQKLSAgICAgKiBzZXF1
ZW5jZXMgb2YgdmFsdWVzIGdpdmVuIGVxdWFsIGdlbmVyYXRvcnMuCi0gICAgICovCi0gICAgQk9P
U1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKHRyaWFuZ2xlX2Rpc3RyaWJ1dGlv
bikKLQotcHJpdmF0ZToKLSAgICAvLy8gXGNvbmQgc2hvd19wcml2YXRlCi0gICAgdm9pZCBpbml0
KCkKLSAgICB7Ci0gICAgICAgIHVzaW5nIHN0ZDo6c3FydDsKLSAgICAgICAgZDEgPSBfYiAtIF9h
OwotICAgICAgICBkMiA9IF9jIC0gX2E7Ci0gICAgICAgIGQzID0gc3FydChfYyAtIF9iKTsKLSAg
ICAgICAgcTEgPSBkMSAvIGQyOwotICAgICAgICBwMSA9IHNxcnQoZDEgKiBkMik7Ci0gICAgfQot
ICAgIC8vLyBcZW5kY29uZAotCi0gICAgUmVhbFR5cGUgX2EsIF9iLCBfYzsKLSAgICBSZWFsVHlw
ZSBkMSwgZDIsIGQzLCBxMSwgcDE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSByYW5kb20KLQotdXNp
bmcgcmFuZG9tOjp0cmlhbmdsZV9kaXN0cmlidXRpb247Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0
Ci0KLSNlbmRpZiAvLyBCT09TVF9SQU5ET01fVFJJQU5HTEVfRElTVFJJQlVUSU9OX0hQUApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9t
L3VuaWZvcm1fMDEuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcmFuZG9tL3VuaWZvcm1fMDEuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
NzI1OGY1ODA2NDQ4NDM0Y2NjMzQ2ZDEyYzY0YTkxYTZiNzJkNWM2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS91bmlmb3JtXzAxLmhwcAorKysgL2Rldi9udWxsCkBAIC0x
LDI1NyArMCwwIEBACi0vKiBib29zdCByYW5kb20vdW5pZm9ybV8wMS5ocHAgaGVhZGVyIGZpbGUK
LSAqCi0gKiBDb3B5cmlnaHQgSmVucyBNYXVyZXIgMjAwMC0yMDAxCi0gKiBEaXN0cmlidXRlZCB1
bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotICoK
LSAqICRJZCQKLSAqCi0gKiBSZXZpc2lvbiBoaXN0b3J5Ci0gKiAgMjAwMS0wMi0xOCAgbW92ZWQg
dG8gaW5kaXZpZHVhbCBoZWFkZXIgZmlsZXMKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9V
TklGT1JNXzAxX0hQUAotI2RlZmluZSBCT09TVF9SQU5ET01fVU5JRk9STV8wMV9IUFAKLQotI2lu
Y2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvbGltaXRzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9zdGF0aWNfYXNzZXJ0LmhwcD4KLSNp
bmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
cmFuZG9tL2RldGFpbC9wdHJfaGVscGVyLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9k
ZXRhaWwvZGlzYWJsZV93YXJuaW5ncy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3Bh
Y2UgcmFuZG9tIHsKLQotI2lmZGVmIEJPT1NUX1JBTkRPTV9ET1hZR0VOCi0KLS8qKgotICogVGhl
IGRpc3RyaWJ1dGlvbiBmdW5jdGlvbiB1bmlmb3JtXzAxIG1vZGVscyBhIFxyYW5kb21fZGlzdHJp
YnV0aW9uLgotICogT24gZWFjaCBpbnZvY2F0aW9uLCBpdCByZXR1cm5zIGEgcmFuZG9tIGZsb2F0
aW5nLXBvaW50IHZhbHVlCi0gKiB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgaW4gdGhlIHJhbmdlIFsw
Li4xKS4KLSAqCi0gKiBUaGUgdGVtcGxhdGUgcGFyYW1ldGVyIFJlYWxUeXBlIHNoYWxsIGRlbm90
ZSBhIGZsb2F0LWxpa2UgdmFsdWUgdHlwZQotICogd2l0aCBzdXBwb3J0IGZvciBiaW5hcnkgb3Bl
cmF0b3JzICssIC0sIGFuZCAvLgotICoKLSAqIE5vdGU6IFRoZSBjdXJyZW50IGltcGxlbWVudGF0
aW9uIGlzIGJ1Z2d5LCBiZWNhdXNlIGl0IG1heSBub3QgZmlsbAotICogYWxsIG9mIHRoZSBtYW50
aXNzYSB3aXRoIHJhbmRvbSBiaXRzLiBJJ20gdW5zdXJlIGhvdyB0byBmaWxsIGEKLSAqICh0by1i
ZS1pbnZlbnRlZCkgQGMgYm9vc3Q6OmJpZ2Zsb2F0IGNsYXNzIHdpdGggcmFuZG9tIGJpdHMgZWZm
aWNpZW50bHkuCi0gKiBJdCdzIHByb2JhYmx5IHRpbWUgZm9yIGEgdHJhaXRzIGNsYXNzLgotICov
Ci10ZW1wbGF0ZTxjbGFzcyBSZWFsVHlwZSA9IGRvdWJsZT4KLWNsYXNzIHVuaWZvcm1fMDEKLXsK
LXB1YmxpYzoKLSAgdHlwZWRlZiBSZWFsVHlwZSBpbnB1dF90eXBlOwotICB0eXBlZGVmIFJlYWxU
eXBlIHJlc3VsdF90eXBlOwotICByZXN1bHRfdHlwZSBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19T
VUJTVElUVVRJT04gKCkgY29uc3Q7Ci0gIHJlc3VsdF90eXBlIG1heCBCT09TVF9QUkVWRU5UX01B
Q1JPX1NVQlNUSVRVVElPTiAoKSBjb25zdDsKLSAgdm9pZCByZXNldCgpOwotCi0gIHRlbXBsYXRl
PGNsYXNzIEVuZ2luZT4KLSAgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKShFbmdpbmUmIGVuZyk7Ci0K
LSNpZm5kZWYgQk9PU1RfUkFORE9NX05PX1NUUkVBTV9PUEVSQVRPUlMKLSAgdGVtcGxhdGU8Y2xh
c3MgQ2hhclQsIGNsYXNzIFRyYWl0cz4KLSAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFy
VCxUcmFpdHM+JgotICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyVCxUcmFpdHM+
JiBvcywgY29uc3QgbmV3X3VuaWZvcm1fMDEmKQotICB7Ci0gICAgcmV0dXJuIG9zOwotICB9Ci0K
LSAgdGVtcGxhdGU8Y2xhc3MgQ2hhclQsIGNsYXNzIFRyYWl0cz4KLSAgZnJpZW5kIHN0ZDo6YmFz
aWNfaXN0cmVhbTxDaGFyVCxUcmFpdHM+JgotICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVh
bTxDaGFyVCxUcmFpdHM+JiBpcywgbmV3X3VuaWZvcm1fMDEmKQotICB7Ci0gICAgcmV0dXJuIGlz
OwotICB9Ci0jZW5kaWYKLX07Ci0KLSNlbHNlCi0KLW5hbWVzcGFjZSBkZXRhaWwgewotCi10ZW1w
bGF0ZTxjbGFzcyBSZWFsVHlwZT4KLWNsYXNzIG5ld191bmlmb3JtXzAxCi17Ci1wdWJsaWM6Ci0g
IHR5cGVkZWYgUmVhbFR5cGUgaW5wdXRfdHlwZTsKLSAgdHlwZWRlZiBSZWFsVHlwZSByZXN1bHRf
dHlwZTsKLSAgLy8gY29tcGlsZXItZ2VuZXJhdGVkIGNvcHkgY3RvciBhbmQgY29weSBhc3NpZ25t
ZW50IGFyZSBmaW5lCi0gIHJlc3VsdF90eXBlIG1pbiBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNU
SVRVVElPTiAoKSBjb25zdCB7IHJldHVybiByZXN1bHRfdHlwZSgwKTsgfQotICByZXN1bHRfdHlw
ZSBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgY29uc3QgeyByZXR1cm4g
cmVzdWx0X3R5cGUoMSk7IH0KLSAgdm9pZCByZXNldCgpIHsgfQotCi0gIHRlbXBsYXRlPGNsYXNz
IEVuZ2luZT4KLSAgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKShFbmdpbmUmIGVuZykgewotICAgIGZv
ciAoOzspIHsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgRW5naW5lOjpyZXN1bHRfdHlwZSBiYXNl
X3Jlc3VsdDsKLSAgICAgIHJlc3VsdF90eXBlIGZhY3RvciA9IHJlc3VsdF90eXBlKDEpIC8KLSAg
ICAgICAgICAgICAgKHJlc3VsdF90eXBlKGJhc2VfcmVzdWx0KChlbmcubWF4KSgpLShlbmcubWlu
KSgpKSkgKwotICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUoc3RkOjpudW1lcmljX2xpbWl0czxi
YXNlX3Jlc3VsdD46OmlzX2ludGVnZXIgPyAxIDogMCkpOwotICAgICAgcmVzdWx0X3R5cGUgcmVz
dWx0ID0gcmVzdWx0X3R5cGUoYmFzZV9yZXN1bHQoZW5nKCkgLSAoZW5nLm1pbikoKSkpICogZmFj
dG9yOwotICAgICAgaWYgKHJlc3VsdCA8IHJlc3VsdF90eXBlKDEpKQotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLSAgfQotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9OT19TVFJFQU1fT1BF
UkFUT1JTCi0gIHRlbXBsYXRlPGNsYXNzIENoYXJULCBjbGFzcyBUcmFpdHM+Ci0gIGZyaWVuZCBz
dGQ6OmJhc2ljX29zdHJlYW08Q2hhclQsVHJhaXRzPiYKLSAgb3BlcmF0b3I8PChzdGQ6OmJhc2lj
X29zdHJlYW08Q2hhclQsVHJhaXRzPiYgb3MsIGNvbnN0IG5ld191bmlmb3JtXzAxJikKLSAgewot
ICAgIHJldHVybiBvczsKLSAgfQotCi0gIHRlbXBsYXRlPGNsYXNzIENoYXJULCBjbGFzcyBUcmFp
dHM+Ci0gIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhclQsVHJhaXRzPiYKLSAgb3BlcmF0
b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08Q2hhclQsVHJhaXRzPiYgaXMsIG5ld191bmlmb3JtXzAx
JikKLSAgewotICAgIHJldHVybiBpczsKLSAgfQotI2VuZGlmCi19OwotCi10ZW1wbGF0ZTxjbGFz
cyBVbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBjbGFzcyBSZWFsVHlwZT4KLWNsYXNzIGJh
Y2t3YXJkX2NvbXBhdGlibGVfdW5pZm9ybV8wMQotewotICB0eXBlZGVmIGJvb3N0OjpyYW5kb206
OmRldGFpbDo6cHRyX2hlbHBlcjxVbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPiB0cmFpdHM7
Ci1wdWJsaWM6Ci0gIHR5cGVkZWYgVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciBiYXNlX3R5
cGU7Ci0gIHR5cGVkZWYgUmVhbFR5cGUgcmVzdWx0X3R5cGU7Ci0KLSAgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKGJvb2wsIGhhc19maXhlZF9yYW5nZSA9IGZhbHNlKTsKLQotI2lmICFkZWZpbmVkKEJP
T1NUX05PX0xJTUlUU19DT01QSUxFX1RJTUVfQ09OU1RBTlRTKQotICBCT09TVF9TVEFUSUNfQVNT
RVJUKCFzdGQ6Om51bWVyaWNfbGltaXRzPFJlYWxUeXBlPjo6aXNfaW50ZWdlcik7Ci0jZW5kaWYK
LQotICBleHBsaWNpdCBiYWNrd2FyZF9jb21wYXRpYmxlX3VuaWZvcm1fMDEodHlwZW5hbWUgdHJh
aXRzOjpydmFsdWVfdHlwZSBybmcpCi0gICAgOiBfcm5nKHJuZyksCi0gICAgICBfZmFjdG9yKHJl
c3VsdF90eXBlKDEpIC8KLSAgICAgICAgICAgICAgKHJlc3VsdF90eXBlKChiYXNlKCkubWF4KSgp
LShiYXNlKCkubWluKSgpKSArCi0gICAgICAgICAgICAgICByZXN1bHRfdHlwZShzdGQ6Om51bWVy
aWNfbGltaXRzPGJhc2VfcmVzdWx0Pjo6aXNfaW50ZWdlciA/IDEgOiAwKSkpCi0gIHsKLSAgfQot
ICAvLyBjb21waWxlci1nZW5lcmF0ZWQgY29weSBjdG9yIGFuZCBjb3B5IGFzc2lnbm1lbnQgYXJl
IGZpbmUKLQotICByZXN1bHRfdHlwZSBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJ
T04gKCkgY29uc3QgeyByZXR1cm4gcmVzdWx0X3R5cGUoMCk7IH0KLSAgcmVzdWx0X3R5cGUgbWF4
IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIGNvbnN0IHsgcmV0dXJuIHJlc3Vs
dF90eXBlKDEpOyB9Ci0gIHR5cGVuYW1lIHRyYWl0czo6dmFsdWVfdHlwZSYgYmFzZSgpIHsgcmV0
dXJuIHRyYWl0czo6cmVmKF9ybmcpOyB9Ci0gIGNvbnN0IHR5cGVuYW1lIHRyYWl0czo6dmFsdWVf
dHlwZSYgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIHRyYWl0czo6cmVmKF9ybmcpOyB9Ci0gIHZvaWQg
cmVzZXQoKSB7IH0KLQotICByZXN1bHRfdHlwZSBvcGVyYXRvcigpKCkgewotICAgIGZvciAoOzsp
IHsKLSAgICAgIHJlc3VsdF90eXBlIHJlc3VsdCA9IHJlc3VsdF90eXBlKGJhc2UoKSgpIC0gKGJh
c2UoKS5taW4pKCkpICogX2ZhY3RvcjsKLSAgICAgIGlmIChyZXN1bHQgPCByZXN1bHRfdHlwZSgx
KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gIH0KLQotI2lmICFkZWZpbmVkKEJP
T1NUX05PX09QRVJBVE9SU19JTl9OQU1FU1BBQ0UpICYmICFkZWZpbmVkKEJPT1NUX05PX01FTUJF
Ul9URU1QTEFURV9GUklFTkRTKQotICB0ZW1wbGF0ZTxjbGFzcyBDaGFyVCwgY2xhc3MgVHJhaXRz
PgotICBmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPENoYXJULFRyYWl0cz4mCi0gIG9wZXJhdG9y
PDwoc3RkOjpiYXNpY19vc3RyZWFtPENoYXJULFRyYWl0cz4mIG9zLCBjb25zdCBiYWNrd2FyZF9j
b21wYXRpYmxlX3VuaWZvcm1fMDEmIHUpCi0gIHsKLSAgICBvcyA8PCB1Ll9ybmc7Ci0gICAgcmV0
dXJuIG9zOwotICB9Ci0KLSAgdGVtcGxhdGU8Y2xhc3MgQ2hhclQsIGNsYXNzIFRyYWl0cz4KLSAg
ZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxDaGFyVCxUcmFpdHM+JgotICBvcGVyYXRvcj4+KHN0
ZDo6YmFzaWNfaXN0cmVhbTxDaGFyVCxUcmFpdHM+JiBpcywgYmFja3dhcmRfY29tcGF0aWJsZV91
bmlmb3JtXzAxJiB1KQotICB7Ci0gICAgaXMgPj4gdS5fcm5nOwotICAgIHJldHVybiBpczsKLSAg
fQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjp2YWx1ZV90
eXBlOjpyZXN1bHRfdHlwZSBiYXNlX3Jlc3VsdDsKLSAgVW5pZm9ybVJhbmRvbU51bWJlckdlbmVy
YXRvciBfcm5nOwotICByZXN1bHRfdHlwZSBfZmFjdG9yOwotfTsKLQotI2lmbmRlZiBCT09TVF9O
T19JTkNMQVNTX01FTUJFUl9JTklUSUFMSVpBVElPTgotLy8gIEEgZGVmaW5pdGlvbiBpcyByZXF1
aXJlZCBldmVuIGZvciBpbnRlZ3JhbCBzdGF0aWMgY29uc3RhbnRzCi10ZW1wbGF0ZTxjbGFzcyBV
bmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBjbGFzcyBSZWFsVHlwZT4KLWNvbnN0IGJvb2wg
YmFja3dhcmRfY29tcGF0aWJsZV91bmlmb3JtXzAxPFVuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0
b3IsIFJlYWxUeXBlPjo6aGFzX2ZpeGVkX3JhbmdlOwotI2VuZGlmCi0KLXRlbXBsYXRlPGNsYXNz
IFVuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGJvb2wgaXNfbnVtYmVyID0gc3RkOjpudW1l
cmljX2xpbWl0czxVbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPjo6aXNfc3BlY2lhbGl6ZWQ+
Ci1zdHJ1Y3Qgc2VsZWN0X3VuaWZvcm1fMDEKLXsKLSAgdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGU+
Ci0gIHN0cnVjdCBhcHBseQotICB7Ci0gICAgdHlwZWRlZiBiYWNrd2FyZF9jb21wYXRpYmxlX3Vu
aWZvcm1fMDE8VW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgUmVhbFR5cGU+IHR5cGU7Ci0g
IH07Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBOdW0+Ci1zdHJ1Y3Qgc2VsZWN0X3VuaWZvcm1fMDE8
TnVtLCB0cnVlPgotewotICB0ZW1wbGF0ZTxjbGFzcyBSZWFsVHlwZT4KLSAgc3RydWN0IGFwcGx5
Ci0gIHsKLSAgICB0eXBlZGVmIG5ld191bmlmb3JtXzAxPE51bT4gdHlwZTsKLSAgfTsKLX07Ci0K
LX0KLQotLy8gQmVjYXVzZSBpdCBpcyBzbyBjb21tb25seSB1c2VkOiB1bmlmb3JtIGRpc3RyaWJ1
dGlvbiBvbiB0aGUgcmVhbCBbMC4uMSkKLS8vIHJhbmdlLiAgVGhpcyBhbGxvd3MgZm9yIHNwZWNp
YWxpemF0aW9ucyB0byBhdm9pZCBhIGNvc3RseSBpbnQgLT4gZmxvYXQKLS8vIGNvbnZlcnNpb24g
cGx1cyBmbG9hdCBtdWx0aXBsaWNhdGlvbgotdGVtcGxhdGU8Y2xhc3MgVW5pZm9ybVJhbmRvbU51
bWJlckdlbmVyYXRvciA9IGRvdWJsZSwgY2xhc3MgUmVhbFR5cGUgPSBkb3VibGU+Ci1jbGFzcyB1
bmlmb3JtXzAxCi0gIDogcHVibGljIGRldGFpbDo6c2VsZWN0X3VuaWZvcm1fMDE8VW5pZm9ybVJh
bmRvbU51bWJlckdlbmVyYXRvcj46OkJPT1NUX05FU1RFRF9URU1QTEFURSBhcHBseTxSZWFsVHlw
ZT46OnR5cGUKLXsKLSAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OnNlbGVjdF91bmlmb3JtXzAx
PFVuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+OjpCT09TVF9ORVNURURfVEVNUExBVEUgYXBw
bHk8UmVhbFR5cGU+Ojp0eXBlIGltcGxfdHlwZTsKLSAgdHlwZWRlZiBib29zdDo6cmFuZG9tOjpk
ZXRhaWw6OnB0cl9oZWxwZXI8VW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4gdHJhaXRzOwot
cHVibGljOgotCi0gIHVuaWZvcm1fMDEoKSB7fQotCi0gIGV4cGxpY2l0IHVuaWZvcm1fMDEodHlw
ZW5hbWUgdHJhaXRzOjpydmFsdWVfdHlwZSBybmcpCi0gICAgOiBpbXBsX3R5cGUocm5nKQotICB7
Ci0gIH0KLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX09QRVJBVE9SU19JTl9OQU1FU1BBQ0UpICYm
ICFkZWZpbmVkKEJPT1NUX05PX01FTUJFUl9URU1QTEFURV9GUklFTkRTKQotICB0ZW1wbGF0ZTxj
bGFzcyBDaGFyVCwgY2xhc3MgVHJhaXRzPgotICBmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPENo
YXJULFRyYWl0cz4mCi0gIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPENoYXJULFRyYWl0
cz4mIG9zLCBjb25zdCB1bmlmb3JtXzAxJiB1KQotICB7Ci0gICAgb3MgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgaW1wbF90eXBlJj4odSk7Ci0gICAgcmV0dXJuIG9zOwotICB9Ci0KLSAgdGVtcGxhdGU8
Y2xhc3MgQ2hhclQsIGNsYXNzIFRyYWl0cz4KLSAgZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxD
aGFyVCxUcmFpdHM+JgotICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxDaGFyVCxUcmFp
dHM+JiBpcywgdW5pZm9ybV8wMSYgdSkKLSAgewotICAgIGlzID4+IHN0YXRpY19jYXN0PGltcGxf
dHlwZSY+KHUpOwotICAgIHJldHVybiBpczsKLSAgfQotI2VuZGlmCi19OwotCi0jZW5kaWYKLQot
fSAvLyBuYW1lc3BhY2UgcmFuZG9tCi0KLXVzaW5nIHJhbmRvbTo6dW5pZm9ybV8wMTsKLQotfSAv
LyBuYW1lc3BhY2UgYm9vc3QKLQotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvZW5hYmxl
X3dhcm5pbmdzLmhwcD4KLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9VTklGT1JNXzAxX0hQUApk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFu
ZG9tL3VuaWZvcm1faW50LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3JhbmRvbS91bmlmb3JtX2ludC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQzNjI2NTI1OTNkZWQ5ODU4NjE4YTZhZDFlMTM4NDA0MWM5NTQ2NzQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3VuaWZvcm1faW50LmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDk5ICswLDAgQEAKLS8qIGJvb3N0IHJhbmRvbS91bmlmb3JtX2ludC5ocHAgaGVhZGVy
IGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgSmVucyBNYXVyZXIgMjAwMC0yMDAxCi0gKiBEaXN0cmli
dXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUK
LSAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9u
LgotICoKLSAqICRJZCQKLSAqCi0gKiBSZXZpc2lvbiBoaXN0b3J5Ci0gKiAgMjAwMS0wNC0wOCAg
YWRkZWQgbWluPG1heCBhc3NlcnRpb24gKE4uIEJlY2tlcikKLSAqICAyMDAxLTAyLTE4ICBtb3Zl
ZCB0byBpbmRpdmlkdWFsIGhlYWRlciBmaWxlcwotICovCi0KLSNpZm5kZWYgQk9PU1RfUkFORE9N
X1VOSUZPUk1fSU5UX0hQUAotI2RlZmluZSBCT09TVF9SQU5ET01fVU5JRk9STV9JTlRfSFBQCi0K
LSNpbmNsdWRlIDxib29zdC9hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS91bmlm
b3JtX2ludF9kaXN0cmlidXRpb24uaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotCi0vKioKLSAq
IFRoZSBkaXN0cmlidXRpb24gZnVuY3Rpb24gdW5pZm9ybV9pbnQgbW9kZWxzIGEgXHJhbmRvbV9k
aXN0cmlidXRpb24uCi0gKiBPbiBlYWNoIGludm9jYXRpb24sIGl0IHJldHVybnMgYSByYW5kb20g
aW50ZWdlciB2YWx1ZSB1bmlmb3JtbHkKLSAqIGRpc3RyaWJ1dGVkIGluIHRoZSBzZXQgb2YgaW50
ZWdlciBudW1iZXJzIHttaW4sIG1pbisxLCBtaW4rMiwgLi4uLCBtYXh9LgotICoKLSAqIFRoZSB0
ZW1wbGF0ZSBwYXJhbWV0ZXIgSW50VHlwZSBzaGFsbCBkZW5vdGUgYW4gaW50ZWdlci1saWtlIHZh
bHVlIHR5cGUuCi0gKgotICogVGhpcyBjbGFzcyBpcyBkZXByZWNhdGVkLiAgUGxlYXNlIHVzZSBA
YyB1bmlmb3JtX2ludF9kaXN0cmlidXRpb24gaW4KLSAqIG5ldyBjb2RlLgotICovCi10ZW1wbGF0
ZTxjbGFzcyBJbnRUeXBlID0gaW50PgotY2xhc3MgdW5pZm9ybV9pbnQgOiBwdWJsaWMgcmFuZG9t
Ojp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248SW50VHlwZT4KLXsKLSAgICB0eXBlZGVmIHJhbmRv
bTo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPEludFR5cGU+IGJhc2VfdHlwZTsKLXB1YmxpYzoK
LQotICAgIGNsYXNzIHBhcmFtX3R5cGUgOiBwdWJsaWMgYmFzZV90eXBlOjpwYXJhbV90eXBlCi0g
ICAgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiB1bmlmb3JtX2ludCBkaXN0cmlidXRp
b25fdHlwZTsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnN0cnVjdHMgdGhlIHBhcmFtZXRl
cnMgb2YgYSB1bmlmb3JtX2ludCBkaXN0cmlidXRpb24uCi0gICAgICAgICAqCi0gICAgICAgICAq
IFJlcXVpcmVzOiBtaW4gPD0gbWF4Ci0gICAgICAgICAqLwotICAgICAgICBleHBsaWNpdCBwYXJh
bV90eXBlKEludFR5cGUgbWluX2FyZyA9IDAsIEludFR5cGUgbWF4X2FyZyA9IDkpCi0gICAgICAg
ICAgOiBiYXNlX3R5cGU6OnBhcmFtX3R5cGUobWluX2FyZywgbWF4X2FyZykKLSAgICAgICAge30K
LSAgICB9OwotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIHVuaWZvcm1faW50IG9iamVj
dC4gQGMgbWluIGFuZCBAYyBtYXggYXJlCi0gICAgICogdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRp
c3RyaWJ1dGlvbi4KLSAgICAgKgotICAgICAqIFJlcXVpcmVzOiBtaW4gPD0gbWF4Ci0gICAgICov
Ci0gICAgZXhwbGljaXQgdW5pZm9ybV9pbnQoSW50VHlwZSBtaW5fYXJnID0gMCwgSW50VHlwZSBt
YXhfYXJnID0gOSkKLSAgICAgIDogYmFzZV90eXBlKG1pbl9hcmcsIG1heF9hcmcpCi0gICAge30K
LQotICAgIC8qKiBDb25zdHJ1Y3RzIGEgdW5pZm9ybV9pbnQgZGlzdHJpYnV0aW9uIGZyb20gaXRz
IHBhcmFtZXRlcnMuICovCi0gICAgZXhwbGljaXQgdW5pZm9ybV9pbnQoY29uc3QgcGFyYW1fdHlw
ZSYgcGFybSkKLSAgICAgIDogYmFzZV90eXBlKHBhcm0pCi0gICAge30KLQotICAgIC8qKiBSZXR1
cm5zIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24gKi8KLSAgICBwYXJhbV90eXBl
IHBhcmFtKCkgY29uc3QgeyByZXR1cm4gcGFyYW1fdHlwZSh0aGlzLT5hKCksIHRoaXMtPmIoKSk7
IH0KLSAgICAvKiogU2V0cyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwot
ICAgIHZvaWQgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgcGFybSkgeyB0aGlzLT5iYXNlX3R5cGU6
OnBhcmFtKHBhcm0pOyB9Ci0KLSAgICAvLyBDb2RlcmdlYXIgc2VlbXMgdG8gaGF2ZSB0cm91Ymxl
IHdpdGggYSB1c2luZyBkZWNsYXJhdGlvbiBoZXJlCi0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmdp
bmU+Ci0gICAgSW50VHlwZSBvcGVyYXRvcigpKEVuZ2luZSYgZW5nKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGJhc2VfdHlwZSY+KCp0aGlzKShlbmcpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuZ2luZT4KLSAgICBJbnRUeXBlIG9wZXJhdG9y
KCkoRW5naW5lJiBlbmcsIGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0pIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgYmFzZV90eXBlJj4oKnRoaXMpKGVuZywgcGFy
bSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5naW5lPgotICAgIEludFR5cGUgb3Bl
cmF0b3IoKShFbmdpbmUmIGVuZywgSW50VHlwZSBuKSBjb25zdAotICAgIHsKLSAgICAgICAgQk9P
U1RfQVNTRVJUKG4gPiAwKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGJhc2Vf
dHlwZSY+KCp0aGlzKShlbmcsIHBhcmFtX3R5cGUoMCwgbiAtIDEpKTsKLSAgICB9Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfUkFORE9NX1VOSUZPUk1fSU5U
X0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvcmFuZG9tL3VuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbi5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9u
LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBkM2E5YmViY2RkMTMxN2U0N2Y1
YzAzMTE5ZmE0ZWY4OGUzYThiZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5k
b20vdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQxOSAr
MCwwIEBACi0vKiBib29zdCByYW5kb20vdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uLmhwcCBoZWFk
ZXIgZmlsZQotICoKLSAqIENvcHlyaWdodCBKZW5zIE1hdXJlciAyMDAwLTIwMDEKLSAqIENvcHly
aWdodCBTdGV2ZW4gV2F0YW5hYmUgMjAxMQotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCBy
ZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgot
ICogUmV2aXNpb24gaGlzdG9yeQotICogIDIwMDEtMDQtMDggIGFkZGVkIG1pbjxtYXggYXNzZXJ0
aW9uIChOLiBCZWNrZXIpCi0gKiAgMjAwMS0wMi0xOCAgbW92ZWQgdG8gaW5kaXZpZHVhbCBoZWFk
ZXIgZmlsZXMKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9VTklGT1JNX0lOVF9ESVNUUklC
VVRJT05fSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9VTklGT1JNX0lOVF9ESVNUUklCVVRJT05f
SFBQCi0KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8aW9zPgotI2luY2x1ZGUgPGlzdHJl
YW0+Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9saW1pdHMu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L2Fzc2VydC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9t
L2RldGFpbC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvb3BlcmF0
b3JzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL3VuaWZvcm1faW50X2Zsb2F0
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL3NpZ25lZF91bnNpZ25lZF90b29s
cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL3RyYWl0cy5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvbXBsL2Jvb2wuaHBwPgotI2lmZGVmIEJPT1NUX05PX0NYWDExX0VYUExJQ0lUX0NPTlZFUlNJ
T05fT1BFUkFUT1JTCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2lmLmhwcD4KLSNlbmRpZgotCi1uYW1l
c3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci1uYW1lc3BhY2UgZGV0YWlsIHsKLSAg
ICAKLQotI2lmZGVmIEJPT1NUX01TVkMKLSNwcmFnbWEgd2FybmluZyhwdXNoKQotLy8gZGlzYWJs
ZSBkaXZpc2lvbiBieSB6ZXJvIHdhcm5pbmcsIHNpbmNlIHdlIGNhbid0Ci0vLyBhY3R1YWxseSBk
aXZpZGUgYnkgemVyby4KLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ3MjMpCi0jZW5kaWYKLQot
dGVtcGxhdGU8Y2xhc3MgRW5naW5lLCBjbGFzcyBUPgotVCBnZW5lcmF0ZV91bmlmb3JtX2ludCgK
LSAgICBFbmdpbmUmIGVuZywgVCBtaW5fdmFsdWUsIFQgbWF4X3ZhbHVlLAotICAgIGJvb3N0Ojpt
cGw6OnRydWVfIC8qKiBpc19pbnRlZ3JhbDxFbmdpbmU6OnJlc3VsdF90eXBlPiAqLykKLXsKLSAg
ICB0eXBlZGVmIFQgcmVzdWx0X3R5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6cmFu
ZG9tOjp0cmFpdHM6Om1ha2VfdW5zaWduZWRfb3JfdW5ib3VuZGVkPFQ+Ojp0eXBlIHJhbmdlX3R5
cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBFbmdpbmU6OnJlc3VsdF90eXBlIGJhc2VfcmVzdWx0
OwotICAgIC8vIHJhbmdlcyBhcmUgYWx3YXlzIHVuc2lnbmVkIG9yIHVuYm91bmRlZAotICAgIHR5
cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OnJhbmRvbTo6dHJhaXRzOjptYWtlX3Vuc2lnbmVkX29yX3Vu
Ym91bmRlZDxiYXNlX3Jlc3VsdD46OnR5cGUgYmFzZV91bnNpZ25lZDsKLSAgICBjb25zdCByYW5n
ZV90eXBlIHJhbmdlID0gcmFuZG9tOjpkZXRhaWw6OnN1YnRyYWN0PHJlc3VsdF90eXBlPigpKG1h
eF92YWx1ZSwgbWluX3ZhbHVlKTsKLSAgICBjb25zdCBiYXNlX3Jlc3VsdCBibWluID0gKGVuZy5t
aW4pKCk7Ci0gICAgY29uc3QgYmFzZV91bnNpZ25lZCBicmFuZ2UgPQotICAgICAgcmFuZG9tOjpk
ZXRhaWw6OnN1YnRyYWN0PGJhc2VfcmVzdWx0PigpKChlbmcubWF4KSgpLCAoZW5nLm1pbikoKSk7
Ci0KLSAgICBpZihyYW5nZSA9PSAwKSB7Ci0gICAgICByZXR1cm4gbWluX3ZhbHVlOyAgICAKLSAg
ICB9IGVsc2UgaWYoYnJhbmdlID09IHJhbmdlKSB7Ci0gICAgICAvLyB0aGlzIHdpbGwgcHJvYmFi
bHkgbmV2ZXIgaGFwcGVuIGluIHJlYWwgbGlmZQotICAgICAgLy8gYmFzaWNhbGx5IG5vdGhpbmcg
dG8gZG87IGp1c3QgdGFrZSBjYXJlIHdlIGRvbid0IG92ZXJmbG93IC8gdW5kZXJmbG93Ci0gICAg
ICBiYXNlX3Vuc2lnbmVkIHYgPSByYW5kb206OmRldGFpbDo6c3VidHJhY3Q8YmFzZV9yZXN1bHQ+
KCkoZW5nKCksIGJtaW4pOwotICAgICAgcmV0dXJuIHJhbmRvbTo6ZGV0YWlsOjphZGQ8YmFzZV91
bnNpZ25lZCwgcmVzdWx0X3R5cGU+KCkodiwgbWluX3ZhbHVlKTsKLSAgICB9IGVsc2UgaWYoYnJh
bmdlIDwgcmFuZ2UpIHsKLSAgICAgIC8vIHVzZSByZWplY3Rpb24gbWV0aG9kIHRvIGhhbmRsZSB0
aGluZ3MgbGlrZSAwLi4zIC0tPiAwLi40Ci0gICAgICBmb3IoOzspIHsKLSAgICAgICAgLy8gY29u
Y2F0ZW5hdGUgc2V2ZXJhbCBpbnZvY2F0aW9ucyBvZiB0aGUgYmFzZSBSTkcKLSAgICAgICAgLy8g
dGFrZSBleHRyYSBjYXJlIHRvIGF2b2lkIG92ZXJmbG93cwotCi0gICAgICAgIC8vICBsaW1pdCA9
PSBmbG9vcigocmFuZ2UrMSkvKGJyYW5nZSsxKSkKLSAgICAgICAgLy8gIFRoZXJlZm9yZSBsaW1p
dCooYnJhbmdlKzEpIDw9IHJhbmdlKzEKLSAgICAgICAgcmFuZ2VfdHlwZSBsaW1pdDsKLSAgICAg
ICAgaWYocmFuZ2UgPT0gKHN0ZDo6bnVtZXJpY19saW1pdHM8cmFuZ2VfdHlwZT46Om1heCkoKSkg
ewotICAgICAgICAgIGxpbWl0ID0gcmFuZ2UvKHJhbmdlX3R5cGUoYnJhbmdlKSsxKTsKLSAgICAg
ICAgICBpZihyYW5nZSAlIChyYW5nZV90eXBlKGJyYW5nZSkrMSkgPT0gcmFuZ2VfdHlwZShicmFu
Z2UpKQotICAgICAgICAgICAgKytsaW1pdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBs
aW1pdCA9IChyYW5nZSsxKS8ocmFuZ2VfdHlwZShicmFuZ2UpKzEpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gV2UgY29uc2lkZXIgInJlc3VsdCIgYXMgZXhwcmVzc2VkIHRvIGJhc2UgKGJyYW5n
ZSsxKToKLSAgICAgICAgLy8gRm9yIGV2ZXJ5IHBvd2VyIG9mIChicmFuZ2UrMSksIHdlIGRldGVy
bWluZSBhIHJhbmRvbSBmYWN0b3IKLSAgICAgICAgcmFuZ2VfdHlwZSByZXN1bHQgPSByYW5nZV90
eXBlKDApOwotICAgICAgICByYW5nZV90eXBlIG11bHQgPSByYW5nZV90eXBlKDEpOwotCi0gICAg
ICAgIC8vIGxvb3AgaW52YXJpYW50czoKLSAgICAgICAgLy8gIHJlc3VsdCA8IG11bHQKLSAgICAg
ICAgLy8gIG11bHQgPD0gcmFuZ2UKLSAgICAgICAgd2hpbGUobXVsdCA8PSBsaW1pdCkgewotICAg
ICAgICAgIC8vIFBvc3Rjb25kaXRpb246IHJlc3VsdCA8PSByYW5nZSwgdGh1cyBubyBvdmVyZmxv
dwotICAgICAgICAgIC8vCi0gICAgICAgICAgLy8gbGltaXQqKGJyYW5nZSsxKTw9cmFuZ2UrMSAg
ICAgICAgICAgICAgICAgICBkZWYuIG9mIGxpbWl0ICAgICAgICgxKQotICAgICAgICAgIC8vIGVu
ZygpLWJtaW48PWJyYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgZW5nKCkgcG9zdC4gICAg
ICAgICAoMikKLSAgICAgICAgICAvLyBhbmQgbXVsdDw9bGltaXQuICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvb3AgY29uZGl0aW9uICAgICAgKDMpCi0gICAgICAgICAgLy8gVGhlcmVmb3Jl
IG11bHQqKGVuZygpLWJtaW4rMSk8PXJhbmdlKzEgICAgICBieSAoMSksKDIpLCgzKSAgICAgICg0
KQotICAgICAgICAgIC8vIFRoZXJlZm9yZSBtdWx0KihlbmcoKS1ibWluKSttdWx0PD1yYW5nZSsx
ICAgcmVhcnJhbmdpbmcgKDQpICAgICAoNSkKLSAgICAgICAgICAvLyByZXN1bHQ8bXVsdCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AgaW52YXJpYW50ICAgICAgKDYpCi0gICAg
ICAgICAgLy8gVGhlcmVmb3JlIHJlc3VsdCttdWx0KihlbmcoKS1ibWluKTxyYW5nZSsxICBieSAo
NSksICg2KSAgICAgICAgICg3KQotICAgICAgICAgIC8vCi0gICAgICAgICAgLy8gUG9zdGNvbmRp
dGlvbjogcmVzdWx0IDwgbXVsdCooYnJhbmdlKzEpCi0gICAgICAgICAgLy8KLSAgICAgICAgICAv
LyByZXN1bHQ8bXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AgaW52YXJp
YW50ICAgICAgKDEpCi0gICAgICAgICAgLy8gZW5nKCktYm1pbjw9YnJhbmdlICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmcoKSBwb3N0LiAgICAgICAgICgyKQotICAgICAgICAgIC8vIFRoZXJl
Zm9yZSByZXN1bHQrbXVsdCooZW5nKCktYm1pbikgPAotICAgICAgICAgIC8vICAgICAgICAgICBt
dWx0K211bHQqKGVuZygpLWJtaW4pICAgICAgICAgICAgYnkgKDEpICAgICAgICAgICAgICAoMykK
LSAgICAgICAgICAvLyBUaGVyZWZvcmUgcmVzdWx0KyhlbmcoKS1ibWluKSptdWx0IDwKLSAgICAg
ICAgICAvLyAgICAgICAgICAgbXVsdCttdWx0KmJyYW5nZSAgICAgICAgICAgICAgICAgIGJ5ICgy
KSwgKDMpICAgICAgICAgKDQpCi0gICAgICAgICAgLy8gVGhlcmVmb3JlIHJlc3VsdCsoZW5nKCkt
Ym1pbikqbXVsdCA8Ci0gICAgICAgICAgLy8gICAgICAgICAgIG11bHQqKGJyYW5nZSsxKSAgICAg
ICAgICAgICAgICAgICBieSAoNCkKLSAgICAgICAgICByZXN1bHQgKz0gc3RhdGljX2Nhc3Q8cmFu
Z2VfdHlwZT4oc3RhdGljX2Nhc3Q8cmFuZ2VfdHlwZT4ocmFuZG9tOjpkZXRhaWw6OnN1YnRyYWN0
PGJhc2VfcmVzdWx0PigpKGVuZygpLCBibWluKSkgKiBtdWx0KTsKLQotICAgICAgICAgIC8vIGVx
dWl2YWxlbnQgdG8gKG11bHQgKiAoYnJhbmdlKzEpKSA9PSByYW5nZSsxLCBidXQgYXZvaWRzIG92
ZXJmbG93LgotICAgICAgICAgIGlmKG11bHQgKiByYW5nZV90eXBlKGJyYW5nZSkgPT0gcmFuZ2Ug
LSBtdWx0ICsgMSkgewotICAgICAgICAgICAgICAvLyBUaGUgZGVzdGluYXRpb24gcmFuZ2UgaXMg
YW4gaW50ZWdlciBwb3dlciBvZgotICAgICAgICAgICAgICAvLyB0aGUgZ2VuZXJhdG9yJ3MgcmFu
Z2UuCi0gICAgICAgICAgICAgIHJldHVybihyZXN1bHQpOwotICAgICAgICAgIH0KLQotICAgICAg
ICAgIC8vIFBvc3Rjb25kaXRpb246IG11bHQgPD0gcmFuZ2UKLSAgICAgICAgICAvLyAKLSAgICAg
ICAgICAvLyBsaW1pdCooYnJhbmdlKzEpPD1yYW5nZSsxICAgICAgICAgICAgICAgICAgIGRlZi4g
b2YgbGltaXQgICAgICAgKDEpCi0gICAgICAgICAgLy8gbXVsdDw9bGltaXQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb29wIGNvbmRpdGlvbiAgICAgICgyKQotICAgICAgICAgIC8v
IFRoZXJlZm9yZSBtdWx0KihicmFuZ2UrMSk8PXJhbmdlKzEgICAgICAgICAgYnkgKDEpLCAoMikg
ICAgICAgICAoMykKLSAgICAgICAgICAvLyBtdWx0KihicmFuZ2UrMSkhPXJhbmdlKzEgICAgICAg
ICAgICAgICAgICAgIHByZWNlZGluZyBpZiAgICAgICAgKDQpCi0gICAgICAgICAgLy8gVGhlcmVm
b3JlIG11bHQqKGJyYW5nZSsxKTxyYW5nZSsxICAgICAgICAgICBieSAoMyksICg0KSAgICAgICAg
ICg1KQotICAgICAgICAgIC8vIAotICAgICAgICAgIC8vIFBvc3Rjb25kaXRpb246IHJlc3VsdCA8
IG11bHQKLSAgICAgICAgICAvLwotICAgICAgICAgIC8vIFNlZSB0aGUgc2Vjb25kIHBvc3Rjb25k
aXRpb24gb24gdGhlIGNoYW5nZSB0byByZXN1bHQuIAotICAgICAgICAgIG11bHQgKj0gcmFuZ2Vf
dHlwZShicmFuZ2UpK3JhbmdlX3R5cGUoMSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gbG9vcCBw
b3N0Y29uZGl0aW9uOiByYW5nZS9tdWx0IDwgYnJhbmdlKzEKLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gbXVsdCA+IGxpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AgY29u
ZGl0aW9uICAgICAgKDEpCi0gICAgICAgIC8vIFN1cHBvc2UgcmFuZ2UvbXVsdCA+PSBicmFuZ2Ur
MSAgICAgICAgICAgICAgICBBc3N1bXB0aW9uICAgICAgICAgICgyKQotICAgICAgICAvLyByYW5n
ZSA+PSBtdWx0KihicmFuZ2UrMSkgICAgICAgICAgICAgICAgICAgICAgYnkgKDIpICAgICAgICAg
ICAgICAoMykKLSAgICAgICAgLy8gcmFuZ2UrMSA+IG11bHQqKGJyYW5nZSsxKSAgICAgICAgICAg
ICAgICAgICAgIGJ5ICgzKSAgICAgICAgICAgICAgKDQpCi0gICAgICAgIC8vIHJhbmdlKzEgPiAo
bGltaXQrMSkqKGJyYW5nZSsxKSAgICAgICAgICAgICAgICBieSAoMSksICg0KSAgICAgICAgICg1
KQotICAgICAgICAvLyAocmFuZ2UrMSkvKGJyYW5nZSsxKSA+IGxpbWl0KzEgICAgICAgICAgICAg
ICAgYnkgKDUpICAgICAgICAgICAgICAoNikKLSAgICAgICAgLy8gbGltaXQgPCBmbG9vcigocmFu
Z2UrMSkvKGJyYW5nZSsxKSkgICAgICAgICAgIGJ5ICg2KSAgICAgICAgICAgICAgKDcpCi0gICAg
ICAgIC8vIGxpbWl0PT1mbG9vcigocmFuZ2UrMSkvKGJyYW5nZSsxKSkgICAgICAgICAgICBkZWYu
IG9mIGxpbWl0ICAgICAgICg4KQotICAgICAgICAvLyBub3QgKDIpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVkdWN0aW8gICAgICAgICAgICAoOSkKLSAgICAgICAgLy8K
LSAgICAgICAgLy8gbG9vcCBwb3N0Y29uZGl0aW9uOiAocmFuZ2UvbXVsdCkqbXVsdCsobXVsdC0x
KSA+PSByYW5nZQotICAgICAgICAvLwotICAgICAgICAvLyAocmFuZ2UvbXVsdCkqbXVsdCArIHJh
bmdlJW11bHQgPT0gcmFuZ2UgICAgICAgaWRlbnRpdHkgICAgICAgICAgICAoMSkKLSAgICAgICAg
Ly8gcmFuZ2UlbXVsdCA8IG11bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZi4gb2Yg
JSAgICAgICAgICAgKDIpCi0gICAgICAgIC8vIChyYW5nZS9tdWx0KSptdWx0K211bHQgPiByYW5n
ZSAgICAgICAgICAgICAgICBieSAoMSksICgyKSAgICAgICAgICgzKQotICAgICAgICAvLyAocmFu
Z2UvbXVsdCkqbXVsdCsobXVsdC0xKSA+PSByYW5nZSAgICAgICAgICAgYnkgKDMpICAgICAgICAg
ICAgICAoNCkKLSAgICAgICAgLy8KLSAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBtYXhpbXVtIHZh
bHVlIG9mIHJlc3VsdCBhdCB0aGlzIHBvaW50IGlzIChtdWx0LTEpLAotICAgICAgICAvLyBzbyBh
ZnRlciB0aGlzIGZpbmFsIHN0ZXAsIHdlIGdlbmVyYXRlIG51bWJlcnMgdGhhdCBjYW4gYmUKLSAg
ICAgICAgLy8gYXQgbGVhc3QgYXMgbGFyZ2UgYXMgcmFuZ2UuICBXZSBoYXZlIHRvIHJlYWxseSBj
YXJlZnVsIHRvIGF2b2lkCi0gICAgICAgIC8vIG92ZXJmbG93IGluIHRoaXMgZmluYWwgYWRkaXRp
b24gYW5kIGluIHRoZSByZWplY3Rpb24uICBBbnl0aGluZwotICAgICAgICAvLyB0aGF0IG92ZXJm
bG93cyBpcyBsYXJnZXIgdGhhbiByYW5nZSBhbmQgY2FuIHRodXMgYmUgcmVqZWN0ZWQuCi0KLSAg
ICAgICAgLy8gcmFuZ2UvbXVsdCA8IGJyYW5nZSsxICAtPiBubyBlbmRsZXNzIGxvb3AKLSAgICAg
ICAgcmFuZ2VfdHlwZSByZXN1bHRfaW5jcmVtZW50ID0KLSAgICAgICAgICAgIGdlbmVyYXRlX3Vu
aWZvcm1faW50KAotICAgICAgICAgICAgICAgIGVuZywKLSAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxyYW5nZV90eXBlPigwKSwKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxyYW5nZV90
eXBlPihyYW5nZS9tdWx0KSwKLSAgICAgICAgICAgICAgICBib29zdDo6bXBsOjp0cnVlXygpKTsK
LSAgICAgICAgaWYoc3RkOjpudW1lcmljX2xpbWl0czxyYW5nZV90eXBlPjo6aXNfYm91bmRlZCAm
JiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8cmFuZ2VfdHlwZT46Om1heCkoKSAvIG11bHQgPCByZXN1
bHRfaW5jcmVtZW50KSkgewotICAgICAgICAgIC8vIFRoZSBtdWx0aXBsY2F0aW9uIHdvdWxkIG92
ZXJmbG93LiAgUmVqZWN0IGltbWVkaWF0ZWx5LgotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJlc3VsdF9pbmNyZW1lbnQgKj0gbXVsdDsKLSAgICAgICAgLy8gdW5zaWdu
ZWQgaW50ZWdlcnMgYXJlIGd1YXJhbnRlZWQgdG8gd3JhcCBvbiBvdmVyZmxvdy4KLSAgICAgICAg
cmVzdWx0ICs9IHJlc3VsdF9pbmNyZW1lbnQ7Ci0gICAgICAgIGlmKHJlc3VsdCA8IHJlc3VsdF9p
bmNyZW1lbnQpIHsKLSAgICAgICAgICAvLyBUaGUgYWRkaXRpb24gb3ZlcmZsb3dlZC4gIFJlamVj
dC4KLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZihyZXN1bHQgPiBy
YW5nZSkgewotICAgICAgICAgIC8vIFRvbyBiaWcuICBSZWplY3QuCi0gICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJhbmRvbTo6ZGV0YWlsOjphZGQ8cmFuZ2Vf
dHlwZSwgcmVzdWx0X3R5cGU+KCkocmVzdWx0LCBtaW5fdmFsdWUpOwotICAgICAgfQotICAgIH0g
ZWxzZSB7ICAgICAgICAgICAgICAgICAgIC8vIGJyYW5nZSA+IHJhbmdlCi0jaWZkZWYgQk9PU1Rf
Tk9fQ1hYMTFfRVhQTElDSVRfQ09OVkVSU0lPTl9PUEVSQVRPUlMKLSAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgbXBsOjppZl9jPAotICAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxyYW5nZV90eXBl
Pjo6aXNfc3BlY2lhbGl6ZWQgJiYgc3RkOjpudW1lcmljX2xpbWl0czxiYXNlX3Vuc2lnbmVkPjo6
aXNfc3BlY2lhbGl6ZWQKLSAgICAgICAgICYmIChzdGQ6Om51bWVyaWNfbGltaXRzPHJhbmdlX3R5
cGU+OjpkaWdpdHMgPj0gc3RkOjpudW1lcmljX2xpbWl0czxiYXNlX3Vuc2lnbmVkPjo6ZGlnaXRz
KSwKLSAgICAgICAgIHJhbmdlX3R5cGUsIGJhc2VfdW5zaWduZWQ+Ojp0eXBlIG1peGVkX3Jhbmdl
X3R5cGU7Ci0jZWxzZQotICAgICAgdHlwZWRlZiBiYXNlX3Vuc2lnbmVkIG1peGVkX3JhbmdlX3R5
cGU7Ci0jZW5kaWYKLQotICAgICAgbWl4ZWRfcmFuZ2VfdHlwZSBidWNrZXRfc2l6ZTsKLSAgICAg
IC8vIGl0J3Mgc2FmZSB0byBhZGQgMSB0byByYW5nZSwgYXMgbG9uZyBhcyB3ZSBjYXN0IGl0IGZp
cnN0LAotICAgICAgLy8gYmVjYXVzZSB3ZSBrbm93IHRoYXQgaXQgaXMgbGVzcyB0aGFuIGJyYW5n
ZS4gIEhvd2V2ZXIsCi0gICAgICAvLyB3ZSBkbyBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGNh
dXNlIG92ZXJmbG93IGJ5IGFkZGluZyAxCi0gICAgICAvLyB0byBicmFuZ2UuICBXZSB1c2UgbWl4
ZWRfcmFuZ2VfdHlwZSB0aHJvdWdob3V0IGZvciBtaXhlZAotICAgICAgLy8gYXJpdGhtZXRpYyBi
ZXR3ZWVuIGJhc2VfdW5zaWduZWQgYW5kIHJhbmdlX3R5cGUgLSBpbiB0aGUgY2FzZQotICAgICAg
Ly8gdGhhdCByYW5nZV90eXBlIGhhcyBtb3JlIGJpdHMgdGhhbiBiYXNlX3Vuc2lnbmVkIGl0IGlz
IGFsd2F5cwotICAgICAgLy8gc2FmZSB0byB1c2UgcmFuZ2VfdHlwZSBmb3IgdGhpcyBhbGJlaXQg
aXQgbWF5IGJlIG1vcmUgZWZmaWVudAotICAgICAgLy8gdG8gdXNlIGJhc2VfdW5zaWduZWQuICBU
aGUgbGF0dGVyIGlzIGEgbmFycm93aW5nIGNvbnZlcnNpb24gdGhvdWdoCi0gICAgICAvLyB3aGlj
aCBtYXkgYmUgZGlzYWxsb3dlZCBpZiByYW5nZV90eXBlIGlzIGEgbXVsdGlwcmVjaXNpb24gdHlw
ZQotICAgICAgLy8gYW5kIHRoZXJlIGFyZSBubyBleHBsaWNpdCBjb252ZXJpc29uIG9wZXJhdG9y
cy4KLQotICAgICAgaWYoYnJhbmdlID09IChzdGQ6Om51bWVyaWNfbGltaXRzPGJhc2VfdW5zaWdu
ZWQ+OjptYXgpKCkpIHsKLSAgICAgICAgYnVja2V0X3NpemUgPSBzdGF0aWNfY2FzdDxtaXhlZF9y
YW5nZV90eXBlPihicmFuZ2UpIC8gKHN0YXRpY19jYXN0PG1peGVkX3JhbmdlX3R5cGU+KHJhbmdl
KSsxKTsKLSAgICAgICAgaWYoc3RhdGljX2Nhc3Q8bWl4ZWRfcmFuZ2VfdHlwZT4oYnJhbmdlKSAl
IChzdGF0aWNfY2FzdDxtaXhlZF9yYW5nZV90eXBlPihyYW5nZSkrMSkgPT0gc3RhdGljX2Nhc3Q8
bWl4ZWRfcmFuZ2VfdHlwZT4ocmFuZ2UpKSB7Ci0gICAgICAgICAgKytidWNrZXRfc2l6ZTsKLSAg
ICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgYnVja2V0X3NpemUgPSBzdGF0aWNfY2Fz
dDxtaXhlZF9yYW5nZV90eXBlPihicmFuZ2UgKyAxKSAvIChzdGF0aWNfY2FzdDxtaXhlZF9yYW5n
ZV90eXBlPihyYW5nZSkrMSk7Ci0gICAgICB9Ci0gICAgICBmb3IoOzspIHsKLSAgICAgICAgbWl4
ZWRfcmFuZ2VfdHlwZSByZXN1bHQgPQotICAgICAgICAgIHJhbmRvbTo6ZGV0YWlsOjpzdWJ0cmFj
dDxiYXNlX3Jlc3VsdD4oKShlbmcoKSwgYm1pbik7Ci0gICAgICAgIHJlc3VsdCAvPSBidWNrZXRf
c2l6ZTsKLSAgICAgICAgLy8gcmVzdWx0IGFuZCByYW5nZSBhcmUgbm9uLW5lZ2F0aXZlLCBhbmQg
cmVzdWx0IGlzIHBvc3NpYmx5IGxhcmdlcgotICAgICAgICAvLyB0aGFuIHJhbmdlLCBzbyB0aGUg
Y2FzdCBpcyBzYWZlCi0gICAgICAgIGlmKHJlc3VsdCA8PSBzdGF0aWNfY2FzdDxtaXhlZF9yYW5n
ZV90eXBlPihyYW5nZSkpCi0gICAgICAgICAgcmV0dXJuIHJhbmRvbTo6ZGV0YWlsOjphZGQ8bWl4
ZWRfcmFuZ2VfdHlwZSwgcmVzdWx0X3R5cGU+KCkocmVzdWx0LCBtaW5fdmFsdWUpOwotICAgICAg
fQotICAgIH0KLX0KLQotI2lmZGVmIEJPT1NUX01TVkMKLSNwcmFnbWEgd2FybmluZyhwb3ApCi0j
ZW5kaWYKLQotdGVtcGxhdGU8Y2xhc3MgRW5naW5lLCBjbGFzcyBUPgotaW5saW5lIFQgZ2VuZXJh
dGVfdW5pZm9ybV9pbnQoCi0gICAgRW5naW5lJiBlbmcsIFQgbWluX3ZhbHVlLCBUIG1heF92YWx1
ZSwKLSAgICBib29zdDo6bXBsOjpmYWxzZV8gLyoqIGlzX2ludGVncmFsPEVuZ2luZTo6cmVzdWx0
X3R5cGU+ICovKQotewotICAgIHVuaWZvcm1faW50X2Zsb2F0PEVuZ2luZT4gd3JhcHBlcihlbmcp
OwotICAgIHJldHVybiBnZW5lcmF0ZV91bmlmb3JtX2ludCh3cmFwcGVyLCBtaW5fdmFsdWUsIG1h
eF92YWx1ZSwgYm9vc3Q6Om1wbDo6dHJ1ZV8oKSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEVuZ2lu
ZSwgY2xhc3MgVD4KLWlubGluZSBUIGdlbmVyYXRlX3VuaWZvcm1faW50KEVuZ2luZSYgZW5nLCBU
IG1pbl92YWx1ZSwgVCBtYXhfdmFsdWUpCi17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBFbmdpbmU6
OnJlc3VsdF90eXBlIGJhc2VfcmVzdWx0OwotICAgIHJldHVybiBnZW5lcmF0ZV91bmlmb3JtX2lu
dChlbmcsIG1pbl92YWx1ZSwgbWF4X3ZhbHVlLAotICAgICAgICBib29zdDo6cmFuZG9tOjp0cmFp
dHM6OmlzX2ludGVncmFsPGJhc2VfcmVzdWx0PigpKTsKLX0KLQotfQotCi0vKioKLSAqIFRoZSBj
bGFzcyB0ZW1wbGF0ZSB1bmlmb3JtX2ludF9kaXN0cmlidXRpb24gbW9kZWxzIGEgXHJhbmRvbV9k
aXN0cmlidXRpb24uCi0gKiBPbiBlYWNoIGludm9jYXRpb24sIGl0IHJldHVybnMgYSByYW5kb20g
aW50ZWdlciB2YWx1ZSB1bmlmb3JtbHkKLSAqIGRpc3RyaWJ1dGVkIGluIHRoZSBzZXQgb2YgaW50
ZWdlcnMge21pbiwgbWluKzEsIG1pbisyLCAuLi4sIG1heH0uCi0gKgotICogVGhlIHRlbXBsYXRl
IHBhcmFtZXRlciBJbnRUeXBlIHNoYWxsIGRlbm90ZSBhbiBpbnRlZ2VyLWxpa2UgdmFsdWUgdHlw
ZS4KLSAqLwotdGVtcGxhdGU8Y2xhc3MgSW50VHlwZSA9IGludD4KLWNsYXNzIHVuaWZvcm1faW50
X2Rpc3RyaWJ1dGlvbgotewotcHVibGljOgotICAgIHR5cGVkZWYgSW50VHlwZSBpbnB1dF90eXBl
OwotICAgIHR5cGVkZWYgSW50VHlwZSByZXN1bHRfdHlwZTsKLQotICAgIGNsYXNzIHBhcmFtX3R5
cGUKLSAgICB7Ci0gICAgcHVibGljOgotCi0gICAgICAgIHR5cGVkZWYgdW5pZm9ybV9pbnRfZGlz
dHJpYnV0aW9uIGRpc3RyaWJ1dGlvbl90eXBlOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBD
b25zdHJ1Y3RzIHRoZSBwYXJhbWV0ZXJzIG9mIGEgdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uLgot
ICAgICAgICAgKgotICAgICAgICAgKiBSZXF1aXJlcyBtaW4gPD0gbWF4Ci0gICAgICAgICAqLwot
ICAgICAgICBleHBsaWNpdCBwYXJhbV90eXBlKAotICAgICAgICAgICAgSW50VHlwZSBtaW5fYXJn
ID0gMCwKLSAgICAgICAgICAgIEludFR5cGUgbWF4X2FyZyA9IChzdGQ6Om51bWVyaWNfbGltaXRz
PEludFR5cGU+OjptYXgpKCkpCi0gICAgICAgICAgOiBfbWluKG1pbl9hcmcpLCBfbWF4KG1heF9h
cmcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJPT1NUX0FTU0VSVChfbWluIDw9IF9tYXgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUgb2YgdGhl
IGRpc3RyaWJ1dGlvbi4gKi8KLSAgICAgICAgSW50VHlwZSBhKCkgY29uc3QgeyByZXR1cm4gX21p
bjsgfQotICAgICAgICAvKiogUmV0dXJucyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgZGlzdHJp
YnV0aW9uLiAqLwotICAgICAgICBJbnRUeXBlIGIoKSBjb25zdCB7IHJldHVybiBfbWF4OyB9Ci0K
LSAgICAgICAgLyoqIFdyaXRlcyB0aGUgcGFyYW1ldGVycyB0byBhIEBjIHN0ZDo6b3N0cmVhbS4g
Ki8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCBwYXJh
bV90eXBlLCBwYXJtKQotICAgICAgICB7Ci0gICAgICAgICAgICBvcyA8PCBwYXJtLl9taW4gPDwg
IiAiIDw8IHBhcm0uX21heDsKLSAgICAgICAgICAgIHJldHVybiBvczsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8qKiBSZWFkcyB0aGUgcGFyYW1ldGVycyBmcm9tIGEgQGMgc3RkOjppc3RyZWFtLiAq
LwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0lTVFJFQU1fT1BFUkFUT1IoaXMsIHBhcmFt
X3R5cGUsIHBhcm0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIEludFR5cGUgbWluX2luLCBtYXhf
aW47Ci0gICAgICAgICAgICBpZihpcyA+PiBtaW5faW4gPj4gc3RkOjp3cyA+PiBtYXhfaW4pIHsK
LSAgICAgICAgICAgICAgICBpZihtaW5faW4gPD0gbWF4X2luKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHBhcm0uX21pbiA9IG1pbl9pbjsKLSAgICAgICAgICAgICAgICAgICAgcGFybS5fbWF4ID0g
bWF4X2luOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlz
LnNldHN0YXRlKHN0ZDo6aW9zX2Jhc2U6OmZhaWxiaXQpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBpczsKLSAgICAgICAgfQotCi0gICAgICAg
IC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBzZXRzIG9mIHBhcmFtZXRlcnMgYXJlIGVxdWFs
LiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0VRVUFMSVRZX09QRVJBVE9SKHBhcmFt
X3R5cGUsIGxocywgcmhzKQotICAgICAgICB7IHJldHVybiBsaHMuX21pbiA9PSByaHMuX21pbiAm
JiBsaHMuX21heCA9PSByaHMuX21heDsgfQotCi0gICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWYg
dGhlIHR3byBzZXRzIG9mIHBhcmFtZXRlcnMgYXJlIGRpZmZlcmVudC4gKi8KLSAgICAgICAgQk9P
U1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKHBhcmFtX3R5cGUpCi0KLSAgICBw
cml2YXRlOgotCi0gICAgICAgIEludFR5cGUgX21pbjsKLSAgICAgICAgSW50VHlwZSBfbWF4Owot
ICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgdW5pZm9ybV9pbnRfZGlzdHJp
YnV0aW9uLiBAYyBtaW4gYW5kIEBjIG1heCBhcmUKLSAgICAgKiB0aGUgcGFyYW1ldGVycyBvZiB0
aGUgZGlzdHJpYnV0aW9uLgotICAgICAqCi0gICAgICogUmVxdWlyZXM6IG1pbiA8PSBtYXgKLSAg
ICAgKi8KLSAgICBleHBsaWNpdCB1bmlmb3JtX2ludF9kaXN0cmlidXRpb24oCi0gICAgICAgIElu
dFR5cGUgbWluX2FyZyA9IDAsCi0gICAgICAgIEludFR5cGUgbWF4X2FyZyA9IChzdGQ6Om51bWVy
aWNfbGltaXRzPEludFR5cGU+OjptYXgpKCkpCi0gICAgICA6IF9taW4obWluX2FyZyksIF9tYXgo
bWF4X2FyZykKLSAgICB7Ci0gICAgICAgIEJPT1NUX0FTU0VSVChtaW5fYXJnIDw9IG1heF9hcmcp
OwotICAgIH0KLSAgICAvKiogQ29uc3RydWN0cyBhIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbiBm
cm9tIGl0cyBwYXJhbWV0ZXJzLiAqLwotICAgIGV4cGxpY2l0IHVuaWZvcm1faW50X2Rpc3RyaWJ1
dGlvbihjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgICAgOiBfbWluKHBhcm0uYSgpKSwgX21h
eChwYXJtLmIoKSkge30KLQotICAgIC8qKiAgUmV0dXJucyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0
aGUgZGlzdHJpYnV0aW9uICovCi0gICAgSW50VHlwZSBtaW4gQk9PU1RfUFJFVkVOVF9NQUNST19T
VUJTVElUVVRJT04gKCkgY29uc3QgeyByZXR1cm4gX21pbjsgfQotICAgIC8qKiAgUmV0dXJucyB0
aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uICovCi0gICAgSW50VHlwZSBtYXgg
Qk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgY29uc3QgeyByZXR1cm4gX21heDsg
fQotCi0gICAgLyoqICBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRp
b24gKi8KLSAgICBJbnRUeXBlIGEoKSBjb25zdCB7IHJldHVybiBfbWluOyB9Ci0gICAgLyoqICBS
ZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24gKi8KLSAgICBJbnRU
eXBlIGIoKSBjb25zdCB7IHJldHVybiBfbWF4OyB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgcGFy
YW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIHBhcmFtX3R5cGUgcGFyYW0oKSBj
b25zdCB7IHJldHVybiBwYXJhbV90eXBlKF9taW4sIF9tYXgpOyB9Ci0gICAgLyoqIFNldHMgdGhl
IHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICB2b2lkIHBhcmFtKGNvbnN0
IHBhcmFtX3R5cGUmIHBhcm0pCi0gICAgewotICAgICAgICBfbWluID0gcGFybS5hKCk7Ci0gICAg
ICAgIF9tYXggPSBwYXJtLmIoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFZmZlY3RzOiBT
dWJzZXF1ZW50IHVzZXMgb2YgdGhlIGRpc3RyaWJ1dGlvbiBkbyBub3QgZGVwZW5kCi0gICAgICog
b24gdmFsdWVzIHByb2R1Y2VkIGJ5IGFueSBlbmdpbmUgcHJpb3IgdG8gaW52b2tpbmcgcmVzZXQu
Ci0gICAgICovCi0gICAgdm9pZCByZXNldCgpIHsgfQotCi0gICAgLyoqIFJldHVybnMgYW4gaW50
ZWdlciB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgaW4gdGhlIHJhbmdlIFttaW4sIG1heF0uICovCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgRW5naW5lPgotICAgIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoRW5n
aW5lJiBlbmcpIGNvbnN0Ci0gICAgeyByZXR1cm4gZGV0YWlsOjpnZW5lcmF0ZV91bmlmb3JtX2lu
dChlbmcsIF9taW4sIF9tYXgpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIGludGVn
ZXIgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIGluIHRoZSByYW5nZQotICAgICAqIFtwYXJhbS5hKCks
IHBhcmFtLmIoKV0uCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5naW5lPgotICAgIHJl
c3VsdF90eXBlIG9wZXJhdG9yKCkoRW5naW5lJiBlbmcsIGNvbnN0IHBhcmFtX3R5cGUmIHBhcm0p
IGNvbnN0Ci0gICAgeyByZXR1cm4gZGV0YWlsOjpnZW5lcmF0ZV91bmlmb3JtX2ludChlbmcsIHBh
cm0uYSgpLCBwYXJtLmIoKSk7IH0KLQotICAgIC8qKiBXcml0ZXMgdGhlIGRpc3RyaWJ1dGlvbiB0
byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX09TVFJFQU1f
T1BFUkFUT1Iob3MsIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbiwgdWQpCi0gICAgewotICAgICAg
ICBvcyA8PCB1ZC5wYXJhbSgpOwotICAgICAgICByZXR1cm4gb3M7Ci0gICAgfQotCi0gICAgLyoq
IFJlYWRzIHRoZSBkaXN0cmlidXRpb24gZnJvbSBhIEBjIHN0ZDo6aXN0cmVhbS4gKi8KLSAgICBC
T09TVF9SQU5ET01fREVUQUlMX0lTVFJFQU1fT1BFUkFUT1IoaXMsIHVuaWZvcm1faW50X2Rpc3Ry
aWJ1dGlvbiwgdWQpCi0gICAgewotICAgICAgICBwYXJhbV90eXBlIHBhcm07Ci0gICAgICAgIGlm
KGlzID4+IHBhcm0pIHsKLSAgICAgICAgICAgIHVkLnBhcmFtKHBhcm0pOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBpczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUg
aWYgdGhlIHR3byBkaXN0cmlidXRpb25zIHdpbGwgcHJvZHVjZSBpZGVudGljYWwgc2VxdWVuY2Vz
Ci0gICAgICogb2YgdmFsdWVzIGdpdmVuIGVxdWFsIGdlbmVyYXRvcnMuCi0gICAgICovCi0gICAg
Qk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElUWV9PUEVSQVRPUih1bmlmb3JtX2ludF9kaXN0cmli
dXRpb24sIGxocywgcmhzKQotICAgIHsgcmV0dXJuIGxocy5fbWluID09IHJocy5fbWluICYmIGxo
cy5fbWF4ID09IHJocy5fbWF4OyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVl
IGlmIHRoZSB0d28gZGlzdHJpYnV0aW9ucyBtYXkgcHJvZHVjZSBkaWZmZXJlbnQgc2VxdWVuY2Vz
Ci0gICAgICogb2YgdmFsdWVzIGdpdmVuIGVxdWFsIGdlbmVyYXRvcnMuCi0gICAgICovCi0gICAg
Qk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKHVuaWZvcm1faW50X2Rpc3Ry
aWJ1dGlvbikKLQotcHJpdmF0ZToKLSAgICBJbnRUeXBlIF9taW47Ci0gICAgSW50VHlwZSBfbWF4
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgcmFuZG9tCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0j
ZW5kaWYgLy8gQk9PU1RfUkFORE9NX1VOSUZPUk1fSU5UX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3VuaWZvcm1fb25fc3Bo
ZXJlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRv
bS91bmlmb3JtX29uX3NwaGVyZS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcy
YzI1ZWY3ODE0MmFlODJjMjBhMTAzZGY4MGQwZTdjYWFjZmMwODguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3VuaWZvcm1fb25fc3BoZXJlLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI4NCArMCwwIEBACi0vKiBib29zdCByYW5kb20vdW5pZm9ybV9vbl9zcGhlcmUuaHBw
IGhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0IEplbnMgTWF1cmVyIDIwMDAtMjAwMQotICog
Q29weXJpZ2h0IFN0ZXZlbiBXYXRhbmFiZSAyMDExCi0gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICogU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBt
b3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotICoKLSAqICRJZCQK
LSAqCi0gKiBSZXZpc2lvbiBoaXN0b3J5Ci0gKiAgMjAwMS0wMi0xOCAgbW92ZWQgdG8gaW5kaXZp
ZHVhbCBoZWFkZXIgZmlsZXMKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9VTklGT1JNX09O
X1NQSEVSRV9IUFAKLSNkZWZpbmUgQk9PU1RfUkFORE9NX1VOSUZPUk1fT05fU1BIRVJFX0hQUAot
Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPGFsZ29yaXRobT4gICAgIC8vIHN0ZDo6dHJh
bnNmb3JtCi0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4gICAgLy8gc3RkOjpiaW5kMm5kLCBzdGQ6OmRp
dmlkZXMKLSNpbmNsdWRlIDxib29zdC9hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRv
bS9kZXRhaWwvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL29wZXJh
dG9ycy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL25vcm1hbF9kaXN0cmlidXRpb24uaHBw
PgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci0KLS8qKgotICogSW5z
dGFudGlhdGlvbnMgb2YgY2xhc3MgdGVtcGxhdGUgdW5pZm9ybV9vbl9zcGhlcmUgbW9kZWwgYQot
ICogXHJhbmRvbV9kaXN0cmlidXRpb24uIFN1Y2ggYSBkaXN0cmlidXRpb24gcHJvZHVjZXMgcmFu
ZG9tCi0gKiBudW1iZXJzIHVuaWZvcm1seSBkaXN0cmlidXRlZCBvbiB0aGUgdW5pdCBzcGhlcmUg
b2YgYXJiaXRyYXJ5Ci0gKiBkaW1lbnNpb24gQGMgZGltLiBUaGUgQGMgQ29udCB0ZW1wbGF0ZSBw
YXJhbWV0ZXIgbXVzdCBiZSBhIFNUTC1saWtlCi0gKiBjb250YWluZXIgdHlwZSB3aXRoIGJlZ2lu
IGFuZCBlbmQgb3BlcmF0aW9ucyByZXR1cm5pbmcgbm9uLWNvbnN0Ci0gKiBGb3J3YXJkSXRlcmF0
b3JzIG9mIHR5cGUgQGMgQ29udDo6aXRlcmF0b3IuIAotICovCi10ZW1wbGF0ZTxjbGFzcyBSZWFs
VHlwZSA9IGRvdWJsZSwgY2xhc3MgQ29udCA9IHN0ZDo6dmVjdG9yPFJlYWxUeXBlPiA+Ci1jbGFz
cyB1bmlmb3JtX29uX3NwaGVyZQotewotcHVibGljOgotICAgIHR5cGVkZWYgUmVhbFR5cGUgaW5w
dXRfdHlwZTsKLSAgICB0eXBlZGVmIENvbnQgcmVzdWx0X3R5cGU7Ci0KLSAgICBjbGFzcyBwYXJh
bV90eXBlCi0gICAgewotICAgIHB1YmxpYzoKLQotICAgICAgICB0eXBlZGVmIHVuaWZvcm1fb25f
c3BoZXJlIGRpc3RyaWJ1dGlvbl90eXBlOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDb25z
dHJ1Y3RzIHRoZSBwYXJhbWV0ZXJzIG9mIGEgdW5pZm9ybV9vbl9zcGhlcmUKLSAgICAgICAgICog
ZGlzdHJpYnV0aW9uLCBnaXZlbiB0aGUgZGltZW5zaW9uIG9mIHRoZSBzcGhlcmUuCi0gICAgICAg
ICAqLwotICAgICAgICBleHBsaWNpdCBwYXJhbV90eXBlKGludCBkaW1fYXJnID0gMikgOiBfZGlt
KGRpbV9hcmcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJPT1NUX0FTU0VSVChfZGltID49IDAp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdGhlIGRpbWVuc2lvbiBvZiB0aGUg
c3BoZXJlLiAqLwotICAgICAgICBpbnQgZGltKCkgY29uc3QgeyByZXR1cm4gX2RpbTsgfQotCi0g
ICAgICAgIC8qKiBXcml0ZXMgdGhlIHBhcmFtZXRlcnMgdG8gYSBAYyBzdGQ6Om9zdHJlYW0uICov
Ci0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihvcywgcGFyYW1f
dHlwZSwgcGFybSkKLSAgICAgICAgewotICAgICAgICAgICAgb3MgPDwgcGFybS5fZGltOwotICAg
ICAgICAgICAgcmV0dXJuIG9zOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqIFJlYWRzIHRoZSBw
YXJhbWV0ZXJzIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uICovCi0gICAgICAgIEJPT1NUX1JBTkRP
TV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRPUihpcywgcGFyYW1fdHlwZSwgcGFybSkKLSAgICAgICAg
ewotICAgICAgICAgICAgaXMgPj4gcGFybS5fZGltOwotICAgICAgICAgICAgcmV0dXJuIGlzOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHNldHMgb2Yg
cGFyYW1ldGVycyBhcmUgZXF1YWwuICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfRVFV
QUxJVFlfT1BFUkFUT1IocGFyYW1fdHlwZSwgbGhzLCByaHMpCi0gICAgICAgIHsgcmV0dXJuIGxo
cy5fZGltID09IHJocy5fZGltOyB9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgZGlmZmVyZW50LiAqLwotICAgICAgICBCT09TVF9S
QU5ET01fREVUQUlMX0lORVFVQUxJVFlfT1BFUkFUT1IocGFyYW1fdHlwZSkKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIGludCBfZGltOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1
Y3RzIGEgQGMgdW5pZm9ybV9vbl9zcGhlcmUgZGlzdHJpYnV0aW9uLgotICAgICAqIEBjIGRpbSBp
cyB0aGUgZGltZW5zaW9uIG9mIHRoZSBzcGhlcmUuCi0gICAgICoKLSAgICAgKiBSZXF1aXJlczog
ZGltID49IDAKLSAgICAgKi8KLSAgICBleHBsaWNpdCB1bmlmb3JtX29uX3NwaGVyZShpbnQgZGlt
X2FyZyA9IDIpCi0gICAgICA6IF9jb250YWluZXIoZGltX2FyZyksIF9kaW0oZGltX2FyZykgeyB9
Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgQGMgdW5pZm9ybV9vbl9zcGhlcmUgZGlz
dHJpYnV0aW9uIGZyb20gaXRzIHBhcmFtZXRlcnMuCi0gICAgICovCi0gICAgZXhwbGljaXQgdW5p
Zm9ybV9vbl9zcGhlcmUoY29uc3QgcGFyYW1fdHlwZSYgcGFybSkKLSAgICAgIDogX2NvbnRhaW5l
cihwYXJtLmRpbSgpKSwgX2RpbShwYXJtLmRpbSgpKSB7IH0KLQotICAgIC8vIGNvbXBpbGVyLWdl
bmVyYXRlZCBjb3B5IGN0b3IgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3IgYXJlIGZpbmUKLQotICAg
IC8qKiBSZXR1cm5zIHRoZSBkaW1lbnNpb24gb2YgdGhlIHNwaGVyZS4gKi8KLSAgICBpbnQgZGlt
KCkgY29uc3QgeyByZXR1cm4gX2RpbTsgfQotCi0gICAgLyoqIFJldHVybnMgdGhlIHBhcmFtZXRl
cnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICBwYXJhbV90eXBlIHBhcmFtKCkgY29uc3Qg
eyByZXR1cm4gcGFyYW1fdHlwZShfZGltKTsgfQotICAgIC8qKiBTZXRzIHRoZSBwYXJhbWV0ZXJz
IG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgdm9pZCBwYXJhbShjb25zdCBwYXJhbV90eXBl
JiBwYXJtKQotICAgIHsKLSAgICAgICAgX2RpbSA9IHBhcm0uZGltKCk7Ci0gICAgICAgIF9jb250
YWluZXIucmVzaXplKF9kaW0pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhl
IHNtYWxsZXN0IHZhbHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4KLSAgICAg
KiBOb3RlIHRoYXQgdGhpcyBpcyByZXF1aXJlZCB0byBhcHByb3hpbWF0ZSB0aGUgc3RhbmRhcmQg
bGlicmFyeSdzCi0gICAgICogcmVxdWlyZW1lbnRzLiAgVGhlIGJlaGF2aW9yIGlzIGRlZmluZWQg
YWNjb3JkaW5nIHRvIGxleGljb2dyYXBoaWNhbAotICAgICAqIGNvbXBhcmlzb24gc28gdGhhdCBm
b3IgYSBjb250YWluZXIgdHlwZSBvZiBzdGQ6OnZlY3RvciwKLSAgICAgKiBkaXN0Lm1pbigpIDw9
IHggPD0gZGlzdC5tYXgoKSB3aGVyZSB4IGlzIGFueSB2YWx1ZSBwcm9kdWNlZAotICAgICAqIGJ5
IHRoZSBkaXN0cmlidXRpb24uCi0gICAgICovCi0gICAgcmVzdWx0X3R5cGUgbWluIEJPT1NUX1BS
RVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXN1bHRf
dHlwZSByZXN1bHQoX2RpbSk7Ci0gICAgICAgIGlmKF9kaW0gIT0gMCkgewotICAgICAgICAgICAg
cmVzdWx0LmZyb250KCkgPSBSZWFsVHlwZSgtMS4wKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsYXJnZXN0IHZh
bHVlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gcHJvZHVjZS4KLSAgICAgKiBOb3RlIHRoYXQg
dGhpcyBpcyByZXF1aXJlZCB0byBhcHByb3hpbWF0ZSB0aGUgc3RhbmRhcmQgbGlicmFyeSdzCi0g
ICAgICogcmVxdWlyZW1lbnRzLiAgVGhlIGJlaGF2aW9yIGlzIGRlZmluZWQgYWNjb3JkaW5nIHRv
IGxleGljb2dyYXBoaWNhbAotICAgICAqIGNvbXBhcmlzb24gc28gdGhhdCBmb3IgYSBjb250YWlu
ZXIgdHlwZSBvZiBzdGQ6OnZlY3RvciwKLSAgICAgKiBkaXN0Lm1pbigpIDw9IHggPD0gZGlzdC5t
YXgoKSB3aGVyZSB4IGlzIGFueSB2YWx1ZSBwcm9kdWNlZAotICAgICAqIGJ5IHRoZSBkaXN0cmli
dXRpb24uCi0gICAgICovCi0gICAgcmVzdWx0X3R5cGUgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9f
U1VCU1RJVFVUSU9OICgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXN1bHRfdHlwZSByZXN1bHQo
X2RpbSk7Ci0gICAgICAgIGlmKF9kaW0gIT0gMCkgewotICAgICAgICAgICAgcmVzdWx0LmZyb250
KCkgPSBSZWFsVHlwZSgxLjApOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotCi0gICAgLyoqCi0gICAgICogRWZmZWN0czogU3Vic2VxdWVudCB1c2VzIG9mIHRoZSBk
aXN0cmlidXRpb24gZG8gbm90IGRlcGVuZAotICAgICAqIG9uIHZhbHVlcyBwcm9kdWNlZCBieSBh
bnkgZW5naW5lIHByaW9yIHRvIGludm9raW5nIHJlc2V0LgotICAgICAqLwotICAgIHZvaWQgcmVz
ZXQoKSB7fQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHBvaW50IHVuaWZvcm1seSBkaXN0
cmlidXRlZCBvdmVyIHRoZSBzdXJmYWNlIG9mCi0gICAgICogYSBzcGhlcmUgb2YgZGltZW5zaW9u
IGRpbSgpLgotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIEVuZ2luZT4KLSAgICBjb25zdCBy
ZXN1bHRfdHlwZSAmIG9wZXJhdG9yKCkoRW5naW5lJiBlbmcpCi0gICAgewotICAgICAgICB1c2lu
ZyBzdGQ6OnNxcnQ7Ci0gICAgICAgIHN3aXRjaChfZGltKQotICAgICAgICB7Ci0gICAgICAgIGNh
c2UgMDogYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpZih1bmlmb3JtXzAxPFJlYWxUeXBlPigpKGVuZykgPCAwLjUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgKl9jb250YWluZXIuYmVnaW4oKSA9IC0xOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICpfY29udGFpbmVyLmJlZ2luKCkgPSAxOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgY2FzZSAyOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuaWZvcm1fMDE8UmVh
bFR5cGU+IHVuaWZvcm07Ci0gICAgICAgICAgICAgICAgUmVhbFR5cGUgc3FzdW07Ci0gICAgICAg
ICAgICAgICAgUmVhbFR5cGUgeCwgeTsKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICAgICAgICAgIHggPSB1bmlmb3JtKGVuZykgKiAyIC0gMTsKLSAgICAgICAgICAgICAgICAgICAg
eSA9IHVuaWZvcm0oZW5nKSAqIDIgLSAxOwotICAgICAgICAgICAgICAgICAgICBzcXN1bSA9IHgq
eCArIHkqeTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlKHNxc3VtID09IDAgfHwgc3FzdW0gPiAx
KTsKLSAgICAgICAgICAgICAgICBSZWFsVHlwZSBtdWx0ID0gMS9zcXJ0KHNxc3VtKTsKLSAgICAg
ICAgICAgICAgICB0eXBlbmFtZSBDb250OjppdGVyYXRvciBpdGVyID0gX2NvbnRhaW5lci5iZWdp
bigpOwotICAgICAgICAgICAgICAgICppdGVyID0geCAqIG11bHQ7Ci0gICAgICAgICAgICAgICAg
aXRlcisrOwotICAgICAgICAgICAgICAgICppdGVyID0geSAqIG11bHQ7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB1bmlmb3JtXzAxPFJlYWxUeXBlPiB1bmlmb3JtOwotICAgICAgICAg
ICAgICAgIFJlYWxUeXBlIHNxc3VtOwotICAgICAgICAgICAgICAgIFJlYWxUeXBlIHgsIHk7Ci0g
ICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICB4ID0gdW5pZm9ybShlbmcp
ICogMiAtIDE7Ci0gICAgICAgICAgICAgICAgICAgIHkgPSB1bmlmb3JtKGVuZykgKiAyIC0gMTsK
LSAgICAgICAgICAgICAgICAgICAgc3FzdW0gPSB4KnggKyB5Knk7Ci0gICAgICAgICAgICAgICAg
fSB3aGlsZShzcXN1bSA+IDEpOwotICAgICAgICAgICAgICAgIFJlYWxUeXBlIG11bHQgPSAyICog
c3FydCgxIC0gc3FzdW0pOwotICAgICAgICAgICAgICAgIHR5cGVuYW1lIENvbnQ6Oml0ZXJhdG9y
IGl0ZXIgPSBfY29udGFpbmVyLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgKml0ZXIgPSB4ICog
bXVsdDsKLSAgICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICAgICAgKml0ZXIgPSB5
ICogbXVsdDsKLSAgICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICAgICAgKml0ZXIg
PSAyICogc3FzdW0gLSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRldGFpbDo6
dW5pdF9ub3JtYWxfZGlzdHJpYnV0aW9uPFJlYWxUeXBlPiBub3JtYWw7Ci0gICAgICAgICAgICAg
ICAgUmVhbFR5cGUgc3FzdW07Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAg
ICAgICBzcXN1bSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGZvcih0eXBlbmFtZSBDb250Ojpp
dGVyYXRvciBpdCA9IF9jb250YWluZXIuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGl0ICE9IF9jb250YWluZXIuZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK2l0KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWFsVHlwZSB2YWwgPSBub3JtYWwoZW5nKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICppdCA9IHZhbDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNxc3VtICs9IHZhbCAqIHZhbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0gd2hpbGUoc3FzdW0gPT0gMCk7Ci0gICAgICAgICAgICAgICAgLy8gZm9yIGFsbCBpOiBy
ZXN1bHRbaV0gLz0gc3FydChzcXN1bSkKLSAgICAgICAgICAgICAgICBzdGQ6OnRyYW5zZm9ybShf
Y29udGFpbmVyLmJlZ2luKCksIF9jb250YWluZXIuZW5kKCksIF9jb250YWluZXIuYmVnaW4oKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmJpbmQybmQoc3RkOjptdWx0aXBs
aWVzPFJlYWxUeXBlPigpLCAxL3NxcnQoc3FzdW0pKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIF9jb250YWluZXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog
UmV0dXJucyBhIHBvaW50IHVuaWZvcm1seSBkaXN0cmlidXRlZCBvdmVyIHRoZSBzdXJmYWNlIG9m
Ci0gICAgICogYSBzcGhlcmUgb2YgZGltZW5zaW9uIHBhcmFtLmRpbSgpLgotICAgICAqLwotICAg
IHRlbXBsYXRlPGNsYXNzIEVuZ2luZT4KLSAgICByZXN1bHRfdHlwZSBvcGVyYXRvcigpKEVuZ2lu
ZSYgZW5nLCBjb25zdCBwYXJhbV90eXBlJiBwYXJtKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIHVuaWZvcm1fb25fc3BoZXJlKHBhcm0pKGVuZyk7Ci0gICAgfQotCi0gICAgLyoqIFdyaXRl
cyB0aGUgZGlzdHJpYnV0aW9uIHRvIGEgQGMgc3RkOjpvc3RyZWFtLiAqLwotICAgIEJPT1NUX1JB
TkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihvcywgdW5pZm9ybV9vbl9zcGhlcmUsIHNkKQot
ICAgIHsKLSAgICAgICAgb3MgPDwgc2QuX2RpbTsKLSAgICAgICAgcmV0dXJuIG9zOwotICAgIH0K
LQotICAgIC8qKiBSZWFkcyB0aGUgZGlzdHJpYnV0aW9uIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0u
ICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JU1RSRUFNX09QRVJBVE9SKGlzLCB1bmlmb3Jt
X29uX3NwaGVyZSwgc2QpCi0gICAgewotICAgICAgICBpcyA+PiBzZC5fZGltOwotICAgICAgICBz
ZC5fY29udGFpbmVyLnJlc2l6ZShzZC5fZGltKTsKLSAgICAgICAgcmV0dXJuIGlzOwotICAgIH0K
LQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGRpc3RyaWJ1dGlvbnMg
d2lsbCBwcm9kdWNlIGlkZW50aWNhbAotICAgICAqIHNlcXVlbmNlcyBvZiB2YWx1ZXMsIGdpdmVu
IGVxdWFsIGdlbmVyYXRvcnMuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVB
TElUWV9PUEVSQVRPUih1bmlmb3JtX29uX3NwaGVyZSwgbGhzLCByaHMpCi0gICAgeyByZXR1cm4g
bGhzLl9kaW0gPT0gcmhzLl9kaW07IH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgdHdvIGRpc3RyaWJ1dGlvbnMgbWF5IHByb2R1Y2UgZGlmZmVyZW50Ci0gICAgICogc2Vx
dWVuY2VzIG9mIHZhbHVlcywgZ2l2ZW4gZXF1YWwgZ2VuZXJhdG9ycy4KLSAgICAgKi8KLSAgICBC
T09TVF9SQU5ET01fREVUQUlMX0lORVFVQUxJVFlfT1BFUkFUT1IodW5pZm9ybV9vbl9zcGhlcmUp
Ci0KLXByaXZhdGU6Ci0gICAgcmVzdWx0X3R5cGUgX2NvbnRhaW5lcjsKLSAgICBpbnQgX2RpbTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotCi11c2luZyByYW5kb206OnVuaWZvcm1fb25f
c3BoZXJlOwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfUkFORE9N
X1VOSUZPUk1fT05fU1BIRVJFX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3VuaWZvcm1fcmVhbC5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vdW5pZm9ybV9yZWFsLmhwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk4NjI2ZTc3OTIwNzc3MDQ5NjMzMDE2YjRl
ODc0ODQ1MWU2Mjc1YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vdW5p
Zm9ybV9yZWFsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qIGJvb3N0IHJh
bmRvbS91bmlmb3JtX3JlYWwuaHBwIGhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0IEplbnMg
TWF1cmVyIDIwMDAtMjAwMQotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNF
XzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAu
dHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVy
c2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgotICogUmV2aXNp
b24gaGlzdG9yeQotICogIDIwMDEtMDQtMDggIGFkZGVkIG1pbjxtYXggYXNzZXJ0aW9uIChOLiBC
ZWNrZXIpCi0gKiAgMjAwMS0wMi0xOCAgbW92ZWQgdG8gaW5kaXZpZHVhbCBoZWFkZXIgZmlsZXMK
LSAqLwotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9VTklGT1JNX1JFQUxfSFBQCi0jZGVmaW5lIEJP
T1NUX1JBTkRPTV9VTklGT1JNX1JFQUxfSFBQCi0KLSNpbmNsdWRlIDxib29zdC9hc3NlcnQuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbGltaXRzLmhw
cD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vdW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbi5ocHA+
Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLS8qKgotICogVGhlIGRpc3RyaWJ1dGlvbiBmdW5jdGlv
biB1bmlmb3JtX3JlYWwgbW9kZWxzIGEgcmFuZG9tIGRpc3RyaWJ1dGlvbi4KLSAqIE9uIGVhY2gg
aW52b2NhdGlvbiwgaXQgcmV0dXJucyBhIHJhbmRvbSBmbG9hdGluZy1wb2ludCB2YWx1ZSB1bmlm
b3JtbHkKLSAqIGRpc3RyaWJ1dGVkIGluIHRoZSByYW5nZSBbbWluLi5tYXgpLgotICoKLSAqIFRo
aXMgY2xhc3MgaXMgZGVwcmVjYXRlZC4gIFBsZWFzZSB1c2UgQGMgdW5pZm9ybV9yZWFsX2Rpc3Ry
aWJ1dGlvbiBpbgotICogbmV3IGNvZGUuCi0gKi8KLXRlbXBsYXRlPGNsYXNzIFJlYWxUeXBlID0g
ZG91YmxlPgotY2xhc3MgdW5pZm9ybV9yZWFsIDogcHVibGljIHJhbmRvbTo6dW5pZm9ybV9yZWFs
X2Rpc3RyaWJ1dGlvbjxSZWFsVHlwZT4KLXsKLSAgICB0eXBlZGVmIHJhbmRvbTo6dW5pZm9ybV9y
ZWFsX2Rpc3RyaWJ1dGlvbjxSZWFsVHlwZT4gYmFzZV90eXBlOwotcHVibGljOgotCi0gICAgY2xh
c3MgcGFyYW1fdHlwZSA6IHB1YmxpYyBiYXNlX3R5cGU6OnBhcmFtX3R5cGUKLSAgICB7Ci0gICAg
cHVibGljOgotICAgICAgICB0eXBlZGVmIHVuaWZvcm1fcmVhbCBkaXN0cmlidXRpb25fdHlwZTsK
LSAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnN0cnVjdHMgdGhlIHBhcmFtZXRlcnMgb2YgYSB1
bmlmb3JtX3JlYWwgZGlzdHJpYnV0aW9uLgotICAgICAgICAgKgotICAgICAgICAgKiBSZXF1aXJl
czogbWluIDw9IG1heAotICAgICAgICAgKi8KLSAgICAgICAgZXhwbGljaXQgcGFyYW1fdHlwZShS
ZWFsVHlwZSBtaW5fYXJnID0gUmVhbFR5cGUoMC4wKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZWFsVHlwZSBtYXhfYXJnID0gUmVhbFR5cGUoMS4wKSkKLSAgICAgICAgICA6IGJhc2Vf
dHlwZTo6cGFyYW1fdHlwZShtaW5fYXJnLCBtYXhfYXJnKQotICAgICAgICB7fQotICAgIH07Ci0K
LSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgdW5pZm9ybV9yZWFsIG9iamVjdC4gQGMgbWlu
IGFuZCBAYyBtYXggYXJlIHRoZQotICAgICAqIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlv
bi4KLSAgICAgKgotICAgICAqIFJlcXVpcmVzOiBtaW4gPD0gbWF4Ci0gICAgICovCi0gICAgZXhw
bGljaXQgdW5pZm9ybV9yZWFsKFJlYWxUeXBlIG1pbl9hcmcgPSBSZWFsVHlwZSgwLjApLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZWFsVHlwZSBtYXhfYXJnID0gUmVhbFR5cGUoMS4wKSkK
LSAgICAgIDogYmFzZV90eXBlKG1pbl9hcmcsIG1heF9hcmcpCi0gICAgewotICAgICAgICBCT09T
VF9BU1NFUlQobWluX2FyZyA8IG1heF9hcmcpOwotICAgIH0KLQotICAgIC8qKiBDb25zdHJ1Y3Rz
IGEgdW5pZm9ybV9yZWFsIGRpc3RyaWJ1dGlvbiBmcm9tIGl0cyBwYXJhbWV0ZXJzLiAqLwotICAg
IGV4cGxpY2l0IHVuaWZvcm1fcmVhbChjb25zdCBwYXJhbV90eXBlJiBwYXJtKQotICAgICAgOiBi
YXNlX3R5cGUocGFybSkKLSAgICB7fQotCi0gICAgLyoqIFJldHVybnMgdGhlIHBhcmFtZXRlcnMg
b2YgdGhlIGRpc3RyaWJ1dGlvbiAqLwotICAgIHBhcmFtX3R5cGUgcGFyYW0oKSBjb25zdCB7IHJl
dHVybiBwYXJhbV90eXBlKHRoaXMtPmEoKSwgdGhpcy0+YigpKTsgfQotICAgIC8qKiBTZXRzIHRo
ZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgdm9pZCBwYXJhbShjb25z
dCBwYXJhbV90eXBlJiBwYXJtKSB7IHRoaXMtPmJhc2VfdHlwZTo6cGFyYW0ocGFybSk7IH0KLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9SQU5ET01fVU5JRk9S
TV9SRUFMX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvcmFuZG9tL3VuaWZvcm1fcmVhbF9kaXN0cmlidXRpb24uaHBwIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3VuaWZvcm1fcmVhbF9kaXN0
cmlidXRpb24uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjBmY2U5MzE0Yzkz
ZTQxZjE4NjlmNGU0OGZjZmE3MDYxNDJjZjRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3JhbmRvbS91bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uLmhwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI0MSArMCwwIEBACi0vKiBib29zdCByYW5kb20vdW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlv
bi5ocHAgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgSmVucyBNYXVyZXIgMjAwMC0yMDAx
Ci0gKiBDb3B5cmlnaHQgU3RldmVuIFdhdGFuYWJlIDIwMTEKLSAqIERpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotICogYWNjb21w
YW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAqIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqCi0gKiBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcg
Zm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0gKgotICog
JElkJAotICoKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9VTklGT1JNX1JFQUxfRElTVFJJ
QlVUSU9OX0hQUAotI2RlZmluZSBCT09TVF9SQU5ET01fVU5JRk9STV9SRUFMX0RJU1RSSUJVVElP
Tl9IUFAKLQotI2luY2x1ZGUgPGlvc2Z3ZD4KLSNpbmNsdWRlIDxpb3M+Ci0jaW5jbHVkZSA8aXN0
cmVhbT4KLSNpbmNsdWRlIDxib29zdC9hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2NvbmZp
Zy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9jb25maWcuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvb3BlcmF0b3JzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9y
YW5kb20vZGV0YWlsL3NpZ25lZF91bnNpZ25lZF90b29scy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
dHlwZV90cmFpdHMvaXNfaW50ZWdyYWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9ib29sLmhw
cD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSByYW5kb20gewotbmFtZXNwYWNlIGRl
dGFpbCB7Ci0KLXRlbXBsYXRlPGNsYXNzIEVuZ2luZSwgY2xhc3MgVD4KLVQgZ2VuZXJhdGVfdW5p
Zm9ybV9yZWFsKAotICAgIEVuZ2luZSYgZW5nLCBUIG1pbl92YWx1ZSwgVCBtYXhfdmFsdWUsCi0g
ICAgYm9vc3Q6Om1wbDo6ZmFsc2VfICAvKiogaXNfaW50ZWdyYWw8RW5naW5lOjpyZXN1bHRfdHlw
ZT4gKi8pCi17Ci0gICAgZm9yKDs7KSB7Ci0gICAgICAgIHR5cGVkZWYgVCByZXN1bHRfdHlwZTsK
LSAgICAgICAgcmVzdWx0X3R5cGUgbnVtZXJhdG9yID0gc3RhdGljX2Nhc3Q8VD4oZW5nKCkgLSAo
ZW5nLm1pbikoKSk7Ci0gICAgICAgIHJlc3VsdF90eXBlIGRpdmlzb3IgPSBzdGF0aWNfY2FzdDxU
PigoZW5nLm1heCkoKSAtIChlbmcubWluKSgpKTsKLSAgICAgICAgQk9PU1RfQVNTRVJUKGRpdmlz
b3IgPiAwKTsKLSAgICAgICAgQk9PU1RfQVNTRVJUKG51bWVyYXRvciA+PSAwICYmIG51bWVyYXRv
ciA8PSBkaXZpc29yKTsKLSAgICAgICAgVCByZXN1bHQgPSBudW1lcmF0b3IgLyBkaXZpc29yICog
KG1heF92YWx1ZSAtIG1pbl92YWx1ZSkgKyBtaW5fdmFsdWU7Ci0gICAgICAgIGlmKHJlc3VsdCA8
IG1heF92YWx1ZSkgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEVu
Z2luZSwgY2xhc3MgVD4KLVQgZ2VuZXJhdGVfdW5pZm9ybV9yZWFsKAotICAgIEVuZ2luZSYgZW5n
LCBUIG1pbl92YWx1ZSwgVCBtYXhfdmFsdWUsCi0gICAgYm9vc3Q6Om1wbDo6dHJ1ZV8gIC8qKiBp
c19pbnRlZ3JhbDxFbmdpbmU6OnJlc3VsdF90eXBlPiAqLykKLXsKLSAgICBmb3IoOzspIHsKLSAg
ICAgICAgdHlwZWRlZiBUIHJlc3VsdF90eXBlOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEVu
Z2luZTo6cmVzdWx0X3R5cGUgYmFzZV9yZXN1bHQ7Ci0gICAgICAgIHJlc3VsdF90eXBlIG51bWVy
YXRvciA9IHN0YXRpY19jYXN0PFQ+KHN1YnRyYWN0PGJhc2VfcmVzdWx0PigpKGVuZygpLCAoZW5n
Lm1pbikoKSkpOwotICAgICAgICByZXN1bHRfdHlwZSBkaXZpc29yID0gc3RhdGljX2Nhc3Q8VD4o
c3VidHJhY3Q8YmFzZV9yZXN1bHQ+KCkoKGVuZy5tYXgpKCksIChlbmcubWluKSgpKSkgKyAxOwot
ICAgICAgICBCT09TVF9BU1NFUlQoZGl2aXNvciA+IDApOwotICAgICAgICBCT09TVF9BU1NFUlQo
bnVtZXJhdG9yID49IDAgJiYgbnVtZXJhdG9yIDw9IGRpdmlzb3IpOwotICAgICAgICBUIHJlc3Vs
dCA9IG51bWVyYXRvciAvIGRpdmlzb3IgKiAobWF4X3ZhbHVlIC0gbWluX3ZhbHVlKSArIG1pbl92
YWx1ZTsKLSAgICAgICAgaWYocmVzdWx0IDwgbWF4X3ZhbHVlKSByZXR1cm4gcmVzdWx0OwotICAg
IH0KLX0KLQotdGVtcGxhdGU8Y2xhc3MgRW5naW5lLCBjbGFzcyBUPgotaW5saW5lIFQgZ2VuZXJh
dGVfdW5pZm9ybV9yZWFsKEVuZ2luZSYgZW5nLCBUIG1pbl92YWx1ZSwgVCBtYXhfdmFsdWUpCi17
Ci0gICAgaWYobWF4X3ZhbHVlIC8gMiAtIG1pbl92YWx1ZSAvIDIgPiAoc3RkOjpudW1lcmljX2xp
bWl0czxUPjo6bWF4KSgpIC8gMikKLSAgICAgICAgcmV0dXJuIDIgKiBnZW5lcmF0ZV91bmlmb3Jt
X3JlYWwoZW5nLCBUKG1pbl92YWx1ZSAvIDIpLCBUKG1heF92YWx1ZSAvIDIpKTsKLSAgICB0eXBl
ZGVmIHR5cGVuYW1lIEVuZ2luZTo6cmVzdWx0X3R5cGUgYmFzZV9yZXN1bHQ7Ci0gICAgcmV0dXJu
IGdlbmVyYXRlX3VuaWZvcm1fcmVhbChlbmcsIG1pbl92YWx1ZSwgbWF4X3ZhbHVlLAotICAgICAg
ICBib29zdDo6aXNfaW50ZWdyYWw8YmFzZV9yZXN1bHQ+KCkpOwotfQotCi19Ci0KLS8qKgotICog
VGhlIGNsYXNzIHRlbXBsYXRlIHVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb24gbW9kZWxzIGEgXHJh
bmRvbV9kaXN0cmlidXRpb24uCi0gKiBPbiBlYWNoIGludm9jYXRpb24sIGl0IHJldHVybnMgYSBy
YW5kb20gZmxvYXRpbmctcG9pbnQgdmFsdWUgdW5pZm9ybWx5Ci0gKiBkaXN0cmlidXRlZCBpbiB0
aGUgcmFuZ2UgW21pbi4ubWF4KS4KLSAqLwotdGVtcGxhdGU8Y2xhc3MgUmVhbFR5cGUgPSBkb3Vi
bGU+Ci1jbGFzcyB1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uCi17Ci1wdWJsaWM6Ci0gICAgdHlw
ZWRlZiBSZWFsVHlwZSBpbnB1dF90eXBlOwotICAgIHR5cGVkZWYgUmVhbFR5cGUgcmVzdWx0X3R5
cGU7Ci0KLSAgICBjbGFzcyBwYXJhbV90eXBlCi0gICAgewotICAgIHB1YmxpYzoKLQotICAgICAg
ICB0eXBlZGVmIHVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb24gZGlzdHJpYnV0aW9uX3R5cGU7Ci0K
LSAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnN0cnVjdHMgdGhlIHBhcmFtZXRlcnMgb2YgYSB1
bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uLgotICAgICAgICAgKgotICAgICAgICAgKiBSZXF1aXJl
cyBtaW4gPD0gbWF4Ci0gICAgICAgICAqLwotICAgICAgICBleHBsaWNpdCBwYXJhbV90eXBlKFJl
YWxUeXBlIG1pbl9hcmcgPSBSZWFsVHlwZSgwLjApLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlYWxUeXBlIG1heF9hcmcgPSBSZWFsVHlwZSgxLjApKQotICAgICAgICAgIDogX21pbiht
aW5fYXJnKSwgX21heChtYXhfYXJnKQotICAgICAgICB7Ci0gICAgICAgICAgICBCT09TVF9BU1NF
UlQoX21pbiA8IF9tYXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdGhlIG1p
bmltdW0gdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICAgICAgUmVhbFR5cGUgYSgp
IGNvbnN0IHsgcmV0dXJuIF9taW47IH0KLSAgICAgICAgLyoqIFJldHVybnMgdGhlIG1heGltdW0g
dmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICAgICAgUmVhbFR5cGUgYigpIGNvbnN0
IHsgcmV0dXJuIF9tYXg7IH0KLQotICAgICAgICAvKiogV3JpdGVzIHRoZSBwYXJhbWV0ZXJzIHRv
IGEgQGMgc3RkOjpvc3RyZWFtLiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX09TVFJF
QU1fT1BFUkFUT1Iob3MsIHBhcmFtX3R5cGUsIHBhcm0pCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG9zIDw8IHBhcm0uX21pbiA8PCAiICIgPDwgcGFybS5fbWF4OwotICAgICAgICAgICAgcmV0dXJu
IG9zOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqIFJlYWRzIHRoZSBwYXJhbWV0ZXJzIGZyb20g
YSBAYyBzdGQ6OmlzdHJlYW0uICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVB
TV9PUEVSQVRPUihpcywgcGFyYW1fdHlwZSwgcGFybSkKLSAgICAgICAgewotICAgICAgICAgICAg
UmVhbFR5cGUgbWluX2luLCBtYXhfaW47Ci0gICAgICAgICAgICBpZihpcyA+PiBtaW5faW4gPj4g
c3RkOjp3cyA+PiBtYXhfaW4pIHsKLSAgICAgICAgICAgICAgICBpZihtaW5faW4gPD0gbWF4X2lu
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcm0uX21pbiA9IG1pbl9pbjsKLSAgICAgICAgICAg
ICAgICAgICAgcGFybS5fbWF4ID0gbWF4X2luOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlzLnNldHN0YXRlKHN0ZDo6aW9zX2Jhc2U6OmZhaWxiaXQpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBpczsK
LSAgICAgICAgfQotCi0gICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBzZXRzIG9m
IHBhcmFtZXRlcnMgYXJlIGVxdWFsLiAqLwotICAgICAgICBCT09TVF9SQU5ET01fREVUQUlMX0VR
VUFMSVRZX09QRVJBVE9SKHBhcmFtX3R5cGUsIGxocywgcmhzKQotICAgICAgICB7IHJldHVybiBs
aHMuX21pbiA9PSByaHMuX21pbiAmJiBsaHMuX21heCA9PSByaHMuX21heDsgfQotCi0gICAgICAg
IC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBzZXRzIG9mIHBhcmFtZXRlcnMgYXJlIGRpZmZl
cmVudC4gKi8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9S
KHBhcmFtX3R5cGUpCi0KLSAgICBwcml2YXRlOgotCi0gICAgICAgIFJlYWxUeXBlIF9taW47Ci0g
ICAgICAgIFJlYWxUeXBlIF9tYXg7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVj
dHMgYSB1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uLiBAYyBtaW4gYW5kIEBjIG1heCBhcmUKLSAg
ICAgKiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLgotICAgICAqCi0gICAgICog
UmVxdWlyZXM6IG1pbiA8PSBtYXgKLSAgICAgKi8KLSAgICBleHBsaWNpdCB1bmlmb3JtX3JlYWxf
ZGlzdHJpYnV0aW9uKAotICAgICAgICBSZWFsVHlwZSBtaW5fYXJnID0gUmVhbFR5cGUoMC4wKSwK
LSAgICAgICAgUmVhbFR5cGUgbWF4X2FyZyA9IFJlYWxUeXBlKDEuMCkpCi0gICAgICA6IF9taW4o
bWluX2FyZyksIF9tYXgobWF4X2FyZykKLSAgICB7Ci0gICAgICAgIEJPT1NUX0FTU0VSVChtaW5f
YXJnIDwgbWF4X2FyZyk7Ci0gICAgfQotICAgIC8qKiBDb25zdHJ1Y3RzIGEgdW5pZm9ybV9yZWFs
X2Rpc3RyaWJ1dGlvbiBmcm9tIGl0cyBwYXJhbWV0ZXJzLiAqLwotICAgIGV4cGxpY2l0IHVuaWZv
cm1fcmVhbF9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgcGFybSkKLSAgICAgIDogX21p
bihwYXJtLmEoKSksIF9tYXgocGFybS5iKCkpIHt9Ci0KLSAgICAvKiogIFJldHVybnMgdGhlIG1p
bmltdW0gdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbiAqLwotICAgIFJlYWxUeXBlIG1pbiBCT09T
VF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKSBjb25zdCB7IHJldHVybiBfbWluOyB9Ci0g
ICAgLyoqICBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24gKi8K
LSAgICBSZWFsVHlwZSBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkgY29u
c3QgeyByZXR1cm4gX21heDsgfQotCi0gICAgLyoqICBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVl
IG9mIHRoZSBkaXN0cmlidXRpb24gKi8KLSAgICBSZWFsVHlwZSBhKCkgY29uc3QgeyByZXR1cm4g
X21pbjsgfQotICAgIC8qKiAgUmV0dXJucyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgZGlzdHJp
YnV0aW9uICovCi0gICAgUmVhbFR5cGUgYigpIGNvbnN0IHsgcmV0dXJuIF9tYXg7IH0KLQotICAg
IC8qKiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAg
cGFyYW1fdHlwZSBwYXJhbSgpIGNvbnN0IHsgcmV0dXJuIHBhcmFtX3R5cGUoX21pbiwgX21heCk7
IH0KLSAgICAvKiogU2V0cyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwot
ICAgIHZvaWQgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgcGFybSkKLSAgICB7Ci0gICAgICAgIF9t
aW4gPSBwYXJtLmEoKTsKLSAgICAgICAgX21heCA9IHBhcm0uYigpOwotICAgIH0KLQotICAgIC8q
KgotICAgICAqIEVmZmVjdHM6IFN1YnNlcXVlbnQgdXNlcyBvZiB0aGUgZGlzdHJpYnV0aW9uIGRv
IG5vdCBkZXBlbmQKLSAgICAgKiBvbiB2YWx1ZXMgcHJvZHVjZWQgYnkgYW55IGVuZ2luZSBwcmlv
ciB0byBpbnZva2luZyByZXNldC4KLSAgICAgKi8KLSAgICB2b2lkIHJlc2V0KCkgeyB9Ci0KLSAg
ICAvKiogUmV0dXJucyBhIHZhbHVlIHVuaWZvcm1seSBkaXN0cmlidXRlZCBpbiB0aGUgcmFuZ2Ug
W21pbiwgbWF4KS4gKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmdpbmU+Ci0gICAgcmVzdWx0X3R5
cGUgb3BlcmF0b3IoKShFbmdpbmUmIGVuZykgY29uc3QKLSAgICB7IHJldHVybiBkZXRhaWw6Omdl
bmVyYXRlX3VuaWZvcm1fcmVhbChlbmcsIF9taW4sIF9tYXgpOyB9Ci0KLSAgICAvKioKLSAgICAg
KiBSZXR1cm5zIGEgdmFsdWUgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIGluIHRoZSByYW5nZQotICAg
ICAqIFtwYXJhbS5hKCksIHBhcmFtLmIoKSkuCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5naW5lPgotICAgIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoRW5naW5lJiBlbmcsIGNvbnN0IHBh
cmFtX3R5cGUmIHBhcm0pIGNvbnN0Ci0gICAgeyByZXR1cm4gZGV0YWlsOjpnZW5lcmF0ZV91bmlm
b3JtX3JlYWwoZW5nLCBwYXJtLmEoKSwgcGFybS5iKCkpOyB9Ci0KLSAgICAvKiogV3JpdGVzIHRo
ZSBkaXN0cmlidXRpb24gdG8gYSBAYyBzdGQ6Om9zdHJlYW0uICovCi0gICAgQk9PU1RfUkFORE9N
X0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCB1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uLCB1
ZCkKLSAgICB7Ci0gICAgICAgIG9zIDw8IHVkLnBhcmFtKCk7Ci0gICAgICAgIHJldHVybiBvczsK
LSAgICB9Ci0KLSAgICAvKiogUmVhZHMgdGhlIGRpc3RyaWJ1dGlvbiBmcm9tIGEgQGMgc3RkOjpp
c3RyZWFtLiAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRPUihpcywg
dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbiwgdWQpCi0gICAgewotICAgICAgICBwYXJhbV90eXBl
IHBhcm07Ci0gICAgICAgIGlmKGlzID4+IHBhcm0pIHsKLSAgICAgICAgICAgIHVkLnBhcmFtKHBh
cm0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpczsKLSAgICB9Ci0KLSAgICAvKioKLSAg
ICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byBkaXN0cmlidXRpb25zIHdpbGwgcHJvZHVjZSBp
ZGVudGljYWwgc2VxdWVuY2VzCi0gICAgICogb2YgdmFsdWVzIGdpdmVuIGVxdWFsIGdlbmVyYXRv
cnMuCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9FUVVBTElUWV9PUEVSQVRPUih1
bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uLCBsaHMsIHJocykKLSAgICB7IHJldHVybiBsaHMuX21p
biA9PSByaHMuX21pbiAmJiBsaHMuX21heCA9PSByaHMuX21heDsgfQotICAgIAotICAgIC8qKgot
ICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGRpc3RyaWJ1dGlvbnMgbWF5IHByb2R1Y2Ug
ZGlmZmVyZW50IHNlcXVlbmNlcwotICAgICAqIG9mIHZhbHVlcyBnaXZlbiBlcXVhbCBnZW5lcmF0
b3JzLgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5FUVVBTElUWV9PUEVSQVRP
Uih1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uKQotCi1wcml2YXRlOgotICAgIFJlYWxUeXBlIF9t
aW47Ci0gICAgUmVhbFR5cGUgX21heDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHJhbmRvbQotfSAv
LyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9VTklGT1JNX0lOVF9I
UFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3JhbmRvbS91bmlmb3JtX3NtYWxsaW50LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS91bmlmb3JtX3NtYWxsaW50LmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzFhZmQ3ZmJjZGY1NTdhZjYyMmMwM2MzMTNiOTU3ZDIzYjE5ZWQ4
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vdW5pZm9ybV9zbWFsbGlu
dC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMDcgKzAsMCBAQAotLyogYm9vc3QgcmFuZG9tL3Vu
aWZvcm1fc21hbGxpbnQuaHBwIGhlYWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0IEplbnMgTWF1
cmVyIDIwMDAtMjAwMQotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0
KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lv
biBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgotICogUmV2aXNpb24g
aGlzdG9yeQotICogIDIwMDEtMDQtMDggIGFkZGVkIG1pbjxtYXggYXNzZXJ0aW9uIChOLiBCZWNr
ZXIpCi0gKiAgMjAwMS0wMi0xOCAgbW92ZWQgdG8gaW5kaXZpZHVhbCBoZWFkZXIgZmlsZXMKLSAq
LwotCi0jaWZuZGVmIEJPT1NUX1JBTkRPTV9VTklGT1JNX1NNQUxMSU5UX0hQUAotI2RlZmluZSBC
T09TVF9SQU5ET01fVU5JRk9STV9TTUFMTElOVF9IUFAKLQotI2luY2x1ZGUgPGlzdHJlYW0+Ci0j
aW5jbHVkZSA8aW9zZndkPgotI2luY2x1ZGUgPGJvb3N0L2Fzc2VydC5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2lzX2ludGVncmFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5k
b20vZGV0YWlsL2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9vcGVy
YXRvcnMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwvc2lnbmVkX3Vuc2lnbmVk
X3Rvb2xzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vdW5pZm9ybV8wMS5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvZGV0YWlsL3dvcmthcm91bmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9i
b29sLmhwcD4KLQotI2lmZGVmIEJPT1NUX05PX0NYWDExX0VYUExJQ0lUX0NPTlZFUlNJT05fT1BF
UkFUT1JTCi0jaW5jbHVkZSA8Ym9vc3QvbXBsL2lmLmhwcD4KLSNlbmRpZgotCi1uYW1lc3BhY2Ug
Ym9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci0KLS8vIHVuaWZvcm0gaW50ZWdlciBkaXN0cmli
dXRpb24gb24gYSBzbWFsbCByYW5nZSBbbWluLCBtYXhdCi0KLS8qKgotICogVGhlIGRpc3RyaWJ1
dGlvbiBmdW5jdGlvbiB1bmlmb3JtX3NtYWxsaW50IG1vZGVscyBhIFxyYW5kb21fZGlzdHJpYnV0
aW9uLgotICogT24gZWFjaCBpbnZvY2F0aW9uLCBpdCByZXR1cm5zIGEgcmFuZG9tIGludGVnZXIg
dmFsdWUgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkCi0gKiBpbiB0aGUgc2V0IG9mIGludGVnZXIgbnVt
YmVycyB7bWluLCBtaW4rMSwgbWluKzIsIC4uLiwgbWF4fS4gSXQgYXNzdW1lcwotICogdGhhdCB0
aGUgZGVzaXJlZCByYW5nZSAobWF4LW1pbisxKSBpcyBzbWFsbCBjb21wYXJlZCB0byB0aGUgcmFu
Z2Ugb2YgdGhlCi0gKiB1bmRlcmx5aW5nIHNvdXJjZSBvZiByYW5kb20gbnVtYmVycyBhbmQgdGh1
cyBtYWtlcyBubyBhdHRlbXB0IHRvIGxpbWl0Ci0gKiBxdWFudGl6YXRpb24gZXJyb3JzLgotICoK
LSAqIExldCBcZiRyX3tcbWF0aHR0e291dH19ID0gKFxtYm94e21heH0tXG1ib3h7bWlufSsxKVxm
JCB0aGUgZGVzaXJlZCByYW5nZSBvZgotICogaW50ZWdlciBudW1iZXJzLCBhbmQKLSAqIGxldCBc
ZiRyX3tcbWF0aHR0e2Jhc2V9fVxmJCBiZSB0aGUgcmFuZ2Ugb2YgdGhlIHVuZGVybHlpbmcgc291
cmNlIG9mIHJhbmRvbQotICogbnVtYmVycy4gVGhlbiwgZm9yIHRoZSB1bmlmb3JtIGRpc3RyaWJ1
dGlvbiwgdGhlIHRoZW9yZXRpY2FsIHByb2JhYmlsaXR5Ci0gKiBmb3IgYW55IG51bWJlciBpIGlu
IHRoZSByYW5nZSBcZiRyX3tcbWF0aHR0e291dH19XGYkIHdpbGwgYmUKLSAqIFxmJFxkaXNwbGF5
c3R5bGUgcF97XG1hdGh0dHtvdXR9fShpKSA9IFxmcmFjezF9e3Jfe1xtYXRodHR7b3V0fX19XGYk
LgotICogTGlrZXdpc2UsIGFzc3VtZSBhIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9uIFxmJHJfe1xt
YXRodHR7YmFzZX19XGYkIGZvcgotICogdGhlIHVuZGVybHlpbmcgc291cmNlIG9mIHJhbmRvbSBu
dW1iZXJzLCBpLmUuCi0gKiBcZiRcZGlzcGxheXN0eWxlIHBfe1xtYXRodHR7YmFzZX19KGkpID0g
XGZyYWN7MX17cl97XG1hdGh0dHtiYXNlfX19XGYkLgotICogTGV0IFxmJHBfe1xtYXRodHR7b3V0
XF9zfX0oaSlcZiQgZGVub3RlIHRoZSByYW5kb20KLSAqIGRpc3RyaWJ1dGlvbiBnZW5lcmF0ZWQg
YnkgQGMgdW5pZm9ybV9zbWFsbGludC4gVGhlbiB0aGUgc3VtIG92ZXIgYWxsCi0gKiBpIGluIFxm
JHJfe1xtYXRodHR7b3V0fX1cZiQgb2YKLSAqIFxmJFxkaXNwbGF5c3R5bGUKLSAqIFxsZWZ0KFxm
cmFje3Bfe1xtYXRodHR7b3V0XF9zfX0oaSl9e3Bfe1xtYXRodHR7b3V0fX0oaSl9IC0gMVxyaWdo
dCleMlxmJAotICogc2hhbGwgbm90IGV4Y2VlZAotICogXGYkXGRpc3BsYXlzdHlsZSBcZnJhY3ty
X3tcbWF0aHR0e291dH19fXtyX3tcbWF0aHR0e2Jhc2V9fV4yfQotICogKHJfe1xtYXRodHR7YmFz
ZX19IFxtYm94eyBtb2QgfSByX3tcbWF0aHR0e291dH19KQotICogKHJfe1xtYXRodHR7b3V0fX0g
LSByX3tcbWF0aHR0e2Jhc2V9fSBcbWJveHsgbW9kIH0gcl97XG1hdGh0dHtvdXR9fSlcZiQuCi0g
KgotICogVGhlIHRlbXBsYXRlIHBhcmFtZXRlciBJbnRUeXBlIHNoYWxsIGRlbm90ZSBhbiBpbnRl
Z2VyLWxpa2UgdmFsdWUgdHlwZS4KLSAqCi0gKiBAeG1sbm90ZQotICogVGhlIHByb3BlcnR5IGFi
b3ZlIGlzIHRoZSBzcXVhcmUgc3VtIG9mIHRoZSByZWxhdGl2ZSBkaWZmZXJlbmNlcwotICogaW4g
cHJvYmFiaWxpdGllcyBiZXR3ZWVuIHRoZSBkZXNpcmVkIHVuaWZvcm0gZGlzdHJpYnV0aW9uCi0g
KiBcZiRwX3tcbWF0aHR0e291dH19KGkpXGYkIGFuZCB0aGUgZ2VuZXJhdGVkIGRpc3RyaWJ1dGlv
bgotICogXGYkcF97XG1hdGh0dHtvdXRcX3N9fShpKVxmJC4KLSAqIFRoZSBwcm9wZXJ0eSBjYW4g
YmUgZnVsZmlsbGVkIHdpdGggdGhlIGNhbGN1bGF0aW9uCi0gKiBcZiQoXG1ib3h7YmFzZVxfcm5n
fSBcbWJveHsgbW9kIH0gcl97XG1hdGh0dHtvdXR9fSlcZiQsIGFzIGZvbGxvd3M6Ci0gKiBMZXQg
XGYkciA9IHJfe1xtYXRodHR7YmFzZX19IFxtYm94eyBtb2QgfSByX3tcbWF0aHR0e291dH19XGYk
LgotICogVGhlIGJhc2UgZGlzdHJpYnV0aW9uIG9uIFxmJHJfe1xtYXRodHR7YmFzZX19XGYkIGlz
IGZvbGRlZCBvbnRvIHRoZQotICogcmFuZ2UgXGYkcl97XG1hdGh0dHtvdXR9fVxmJC4gVGhlIG51
bWJlcnMgaSA8IHIgaGF2ZSBhc3NpZ25lZAotICogXGYkXGRpc3BsYXlzdHlsZQotICogXGxlZnRc
bGZsb29yXGZyYWN7cl97XG1hdGh0dHtiYXNlfX19e3Jfe1xtYXRodHR7b3V0fX19XHJpZ2h0XHJm
bG9vcisxXGYkCi0gKiBudW1iZXJzIG9mIHRoZSBiYXNlIGRpc3RyaWJ1dGlvbiwgdGhlIHJlc3Qg
aGFzIG9ubHkgXGYkXGRpc3BsYXlzdHlsZQotICogXGxlZnRcbGZsb29yXGZyYWN7cl97XG1hdGh0
dHtiYXNlfX19e3Jfe1xtYXRodHR7b3V0fX19XHJpZ2h0XHJmbG9vclxmJC4KLSAqIFRoZXJlZm9y
ZSwKLSAqIFxmJFxkaXNwbGF5c3R5bGUgcF97XG1hdGh0dHtvdXRcX3N9fShpKSA9Ci0gKiBcbGVm
dChcbGVmdFxsZmxvb3JcZnJhY3tyX3tcbWF0aHR0e2Jhc2V9fX0KLSAqIHtyX3tcbWF0aHR0e291
dH19fVxyaWdodFxyZmxvb3IrMVxyaWdodCkgLwotICogcl97XG1hdGh0dHtiYXNlfX1cZiQgZm9y
IGkgPCByIGFuZCBcZiRcZGlzcGxheXN0eWxlIHBfe1xtYXRodHR7b3V0XF9zfX0oaSkgPQotICog
XGxlZnRcbGZsb29yXGZyYWN7cl97XG1hdGh0dHtiYXNlfX19Ci0gKiB7cl97XG1hdGh0dHtvdXR9
fX1ccmlnaHRccmZsb29yL3Jfe1xtYXRodHR7YmFzZX19XGYkIG90aGVyd2lzZS4KLSAqIFN1YnN0
aXR1dGluZyB0aGlzIGluIHRoZQotICogYWJvdmUgc3VtIGZvcm11bGEgbGVhZHMgdG8gdGhlIGRl
c2lyZWQgcmVzdWx0LgotICogQGVuZHhtbG5vdGUKLSAqCi0gKiBOb3RlOiBUaGUgdXBwZXIgYm91
bmQgZm9yCi0gKiBcZiQocl97XG1hdGh0dHtiYXNlfX0gXG1ib3h7IG1vZCB9IHJfe1xtYXRodHR7
b3V0fX0pCi0gKiAocl97XG1hdGh0dHtvdXR9fSAtIHJfe1xtYXRodHR7YmFzZX19IFxtYm94eyBt
b2QgfSByX3tcbWF0aHR0e291dH19KVxmJCBpcwotICogXGYkXGRpc3BsYXlzdHlsZSBcZnJhY3ty
X3tcbWF0aHR0e291dH19XjJ9ezR9XGYkLiAgUmVnYXJkaW5nIHRoZSB1cHBlciBib3VuZAotICog
Zm9yIHRoZSBzcXVhcmUgc3VtIG9mIHRoZSByZWxhdGl2ZSBxdWFudGl6YXRpb24gZXJyb3Igb2YK
LSAqIFxmJFxkaXNwbGF5c3R5bGUgXGZyYWN7cl9cbWF0aHR0e291dH1eM317NHJfe1xtYXRodHR7
YmFzZX19XjJ9XGYkLCBpdAotICogc2VlbXMgd2lzZSB0byBlaXRoZXIgY2hvb3NlIFxmJHJfe1xt
YXRodHR7YmFzZX19XGYkIHNvIHRoYXQKLSAqIFxmJHJfe1xtYXRodHR7YmFzZX19ID4gMTByX3tc
bWF0aHR0e291dH19XjJcZiQgb3IgZW5zdXJlIHRoYXQKLSAqIFxmJHJfe1xtYXRodHR7YmFzZX19
XGYkIGlzCi0gKiBkaXZpc2libGUgYnkgXGYkcl97XG1hdGh0dHtvdXR9fVxmJC4KLSAqLwotdGVt
cGxhdGU8Y2xhc3MgSW50VHlwZSA9IGludD4KLWNsYXNzIHVuaWZvcm1fc21hbGxpbnQKLXsKLXB1
YmxpYzoKLSAgICB0eXBlZGVmIEludFR5cGUgaW5wdXRfdHlwZTsKLSAgICB0eXBlZGVmIEludFR5
cGUgcmVzdWx0X3R5cGU7Ci0KLSAgICBjbGFzcyBwYXJhbV90eXBlCi0gICAgewotICAgIHB1Ymxp
YzoKLQotICAgICAgICB0eXBlZGVmIHVuaWZvcm1fc21hbGxpbnQgZGlzdHJpYnV0aW9uX3R5cGU7
Ci0KLSAgICAgICAgLyoqIGNvbnN0cnVjdHMgdGhlIHBhcmFtZXRlcnMgb2YgYSBAYyB1bmlmb3Jt
X3NtYWxsaW50IGRpc3RyaWJ1dGlvbi4gKi8KLSAgICAgICAgcGFyYW1fdHlwZShJbnRUeXBlIG1p
bl9hcmcgPSAwLCBJbnRUeXBlIG1heF9hcmcgPSA5KQotICAgICAgICAgIDogX21pbihtaW5fYXJn
KSwgX21heChtYXhfYXJnKQotICAgICAgICB7Ci0gICAgICAgICAgICBCT09TVF9BU1NFUlQoX21p
biA8PSBfbWF4KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKiBSZXR1cm5zIHRoZSBtaW5pbXVt
IHZhbHVlLiAqLwotICAgICAgICBJbnRUeXBlIGEoKSBjb25zdCB7IHJldHVybiBfbWluOyB9Ci0g
ICAgICAgIC8qKiBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlLiAqLwotICAgICAgICBJbnRUeXBl
IGIoKSBjb25zdCB7IHJldHVybiBfbWF4OyB9Ci0gICAgICAgIAotCi0gICAgICAgIC8qKiBXcml0
ZXMgdGhlIHBhcmFtZXRlcnMgdG8gYSBAYyBzdGQ6Om9zdHJlYW0uICovCi0gICAgICAgIEJPT1NU
X1JBTkRPTV9ERVRBSUxfT1NUUkVBTV9PUEVSQVRPUihvcywgcGFyYW1fdHlwZSwgcGFybSkKLSAg
ICAgICAgewotICAgICAgICAgICAgb3MgPDwgcGFybS5fbWluIDw8ICIgIiA8PCBwYXJtLl9tYXg7
Ci0gICAgICAgICAgICByZXR1cm4gb3M7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgLyoqIFJl
YWRzIHRoZSBwYXJhbWV0ZXJzIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uICovCi0gICAgICAgIEJP
T1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRPUihpcywgcGFyYW1fdHlwZSwgcGFybSkK
LSAgICAgICAgewotICAgICAgICAgICAgaXMgPj4gcGFybS5fbWluID4+IHN0ZDo6d3MgPj4gcGFy
bS5fbWF4OwotICAgICAgICAgICAgcmV0dXJuIGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoq
IFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgZXF1YWwuICov
Ci0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IocGFyYW1fdHlw
ZSwgbGhzLCByaHMpCi0gICAgICAgIHsgcmV0dXJuIGxocy5fbWluID09IHJocy5fbWluICYmIGxo
cy5fbWF4ID09IHJocy5fbWF4OyB9Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgZGlmZmVyZW50LiAqLwotICAgICAgICBCT09TVF9S
QU5ET01fREVUQUlMX0lORVFVQUxJVFlfT1BFUkFUT1IocGFyYW1fdHlwZSkKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIEludFR5cGUgX21pbjsKLSAgICAgICAgSW50VHlwZSBfbWF4OwotICAgIH07
Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgQGMgdW5pZm9ybV9zbWFsbGludC4gQGMg
bWluIGFuZCBAYyBtYXggYXJlIHRoZQotICAgICAqIGxvd2VyIGFuZCB1cHBlciBib3VuZHMgb2Yg
dGhlIG91dHB1dCByYW5nZSwgcmVzcGVjdGl2ZWx5LgotICAgICAqLwotICAgIGV4cGxpY2l0IHVu
aWZvcm1fc21hbGxpbnQoSW50VHlwZSBtaW5fYXJnID0gMCwgSW50VHlwZSBtYXhfYXJnID0gOSkK
LSAgICAgIDogX21pbihtaW5fYXJnKSwgX21heChtYXhfYXJnKSB7fQotCi0gICAgLyoqCi0gICAg
ICogQ29uc3RydWN0cyBhIEBjIHVuaWZvcm1fc21hbGxpbnQgZnJvbSBpdHMgcGFyYW1ldGVycy4K
LSAgICAgKi8KLSAgICBleHBsaWNpdCB1bmlmb3JtX3NtYWxsaW50KGNvbnN0IHBhcmFtX3R5cGUm
IHBhcm0pCi0gICAgICA6IF9taW4ocGFybS5hKCkpLCBfbWF4KHBhcm0uYigpKSB7fQotCi0gICAg
LyoqIFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAg
ICByZXN1bHRfdHlwZSBhKCkgY29uc3QgeyByZXR1cm4gX21pbjsgfQotICAgIC8qKiBSZXR1cm5z
IHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgcmVzdWx0X3R5
cGUgYigpIGNvbnN0IHsgcmV0dXJuIF9tYXg7IH0KLSAgICAvKiogUmV0dXJucyB0aGUgbWluaW11
bSB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIHJlc3VsdF90eXBlIG1pbiBCT09T
VF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKSBjb25zdCB7IHJldHVybiBfbWluOyB9Ci0g
ICAgLyoqIFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8K
LSAgICByZXN1bHRfdHlwZSBtYXggQk9PU1RfUFJFVkVOVF9NQUNST19TVUJTVElUVVRJT04gKCkg
Y29uc3QgeyByZXR1cm4gX21heDsgfQotCi0gICAgLyoqIFJldHVybnMgdGhlIHBhcmFtZXRlcnMg
b2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICBwYXJhbV90eXBlIHBhcmFtKCkgY29uc3QgeyBy
ZXR1cm4gcGFyYW1fdHlwZShfbWluLCBfbWF4KTsgfQotICAgIC8qKiBTZXRzIHRoZSBwYXJhbWV0
ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgdm9pZCBwYXJhbShjb25zdCBwYXJhbV90
eXBlJiBwYXJtKQotICAgIHsKLSAgICAgICAgX21pbiA9IHBhcm0uYSgpOwotICAgICAgICBfbWF4
ID0gcGFybS5iKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRWZmZWN0czogU3Vic2VxdWVu
dCB1c2VzIG9mIHRoZSBkaXN0cmlidXRpb24gZG8gbm90IGRlcGVuZAotICAgICAqIG9uIHZhbHVl
cyBwcm9kdWNlZCBieSBhbnkgZW5naW5lIHByaW9yIHRvIGludm9raW5nIHJlc2V0LgotICAgICAq
LwotICAgIHZvaWQgcmVzZXQoKSB7IH0KLQotICAgIC8qKiBSZXR1cm5zIGEgdmFsdWUgdW5pZm9y
bWx5IGRpc3RyaWJ1dGVkIGluIHRoZSByYW5nZSBbbWluKCksIG1heCgpXS4gKi8KLSAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmdpbmU+Ci0gICAgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKShFbmdpbmUmIGVu
ZykgY29uc3QKLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgRW5naW5lOjpyZXN1bHRf
dHlwZSBiYXNlX3Jlc3VsdDsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlKGVuZywgYm9vc3Q6OnJh
bmRvbTo6dHJhaXRzOjppc19pbnRlZ3JhbDxiYXNlX3Jlc3VsdD4oKSk7Ci0gICAgfQotCi0gICAg
LyoqIFJldHVybnMgYSB2YWx1ZSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgaW4gdGhlIHJhbmdlIFtw
YXJhbS5hKCksIHBhcmFtLmIoKV0uICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5naW5lPgotICAg
IHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoRW5naW5lJiBlbmcsIGNvbnN0IHBhcmFtX3R5cGUmIHBh
cm0pIGNvbnN0Ci0gICAgeyByZXR1cm4gdW5pZm9ybV9zbWFsbGludChwYXJtKShlbmcpOyB9Ci0K
LSAgICAvKiogV3JpdGVzIHRoZSBkaXN0cmlidXRpb24gdG8gYSBAYyBzdGQ6Om9zdHJlYW0uICov
Ci0gICAgQk9PU1RfUkFORE9NX0RFVEFJTF9PU1RSRUFNX09QRVJBVE9SKG9zLCB1bmlmb3JtX3Nt
YWxsaW50LCB1ZCkKLSAgICB7Ci0gICAgICAgIG9zIDw8IHVkLl9taW4gPDwgIiAiIDw8IHVkLl9t
YXg7Ci0gICAgICAgIHJldHVybiBvczsKLSAgICB9Ci0gICAgCi0gICAgLyoqIFJlYWRzIHRoZSBk
aXN0cmlidXRpb24gZnJvbSBhIEBjIHN0ZDo6aXN0cmVhbS4gKi8KLSAgICBCT09TVF9SQU5ET01f
REVUQUlMX0lTVFJFQU1fT1BFUkFUT1IoaXMsIHVuaWZvcm1fc21hbGxpbnQsIHVkKQotICAgIHsK
LSAgICAgICAgaXMgPj4gdWQuX21pbiA+PiBzdGQ6OndzID4+IHVkLl9tYXg7Ci0gICAgICAgIHJl
dHVybiBpczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3
byBkaXN0cmlidXRpb25zIHdpbGwgcHJvZHVjZSBpZGVudGljYWwKLSAgICAgKiBzZXF1ZW5jZXMg
b2YgdmFsdWVzIGdpdmVuIGVxdWFsIGdlbmVyYXRvcnMuCi0gICAgICovCi0gICAgQk9PU1RfUkFO
RE9NX0RFVEFJTF9FUVVBTElUWV9PUEVSQVRPUih1bmlmb3JtX3NtYWxsaW50LCBsaHMsIHJocykK
LSAgICB7IHJldHVybiBsaHMuX21pbiA9PSByaHMuX21pbiAmJiBsaHMuX21heCA9PSByaHMuX21h
eDsgfQotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIGRpc3Ry
aWJ1dGlvbnMgbWF5IHByb2R1Y2UgZGlmZmVyZW50Ci0gICAgICogc2VxdWVuY2VzIG9mIHZhbHVl
cyBnaXZlbiBlcXVhbCBnZW5lcmF0b3JzLgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRB
SUxfSU5FUVVBTElUWV9PUEVSQVRPUih1bmlmb3JtX3NtYWxsaW50KQotCi1wcml2YXRlOgotICAg
IAotICAgIC8vIFxjb25kIHNob3dfcHJpdmF0ZQotICAgIHRlbXBsYXRlPGNsYXNzIEVuZ2luZT4K
LSAgICByZXN1bHRfdHlwZSBnZW5lcmF0ZShFbmdpbmUmIGVuZywgYm9vc3Q6Om1wbDo6dHJ1ZV8p
IGNvbnN0Ci0gICAgewotICAgICAgICAvLyBlcXVpdmFsZW50IHRvIChlbmcoKSAtIGVuZy5taW4o
KSkgJSAoX21heCAtIF9taW4gKyAxKSArIF9taW4sCi0gICAgICAgIC8vIGJ1dCBndWFyYW50ZWVz
IG5vIG92ZXJmbG93LgotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEVuZ2luZTo6cmVzdWx0X3R5
cGUgYmFzZV9yZXN1bHQ7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OnJhbmRvbTo6
dHJhaXRzOjptYWtlX3Vuc2lnbmVkPGJhc2VfcmVzdWx0Pjo6dHlwZSBiYXNlX3Vuc2lnbmVkOwot
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0OjpyYW5kb206OnRyYWl0czo6bWFrZV91bnNp
Z25lZF9vcl91bmJvdW5kZWQ8cmVzdWx0X3R5cGU+Ojp0eXBlIHJhbmdlX3R5cGU7Ci0jaWZkZWYg
Qk9PU1RfTk9fQ1hYMTFfRVhQTElDSVRfQ09OVkVSU0lPTl9PUEVSQVRPUlMKLSAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBtcGw6OmlmX2M8Ci0gICAgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8
cmFuZ2VfdHlwZT46OmlzX3NwZWNpYWxpemVkICYmIHN0ZDo6bnVtZXJpY19saW1pdHM8YmFzZV91
bnNpZ25lZD46OmlzX3NwZWNpYWxpemVkCi0gICAgICAgICAgICYmIChzdGQ6Om51bWVyaWNfbGlt
aXRzPHJhbmdlX3R5cGU+OjpkaWdpdHMgPj0gc3RkOjpudW1lcmljX2xpbWl0czxiYXNlX3Vuc2ln
bmVkPjo6ZGlnaXRzKSwKLSAgICAgICAgICAgcmFuZ2VfdHlwZSwgYmFzZV91bnNpZ25lZD46OnR5
cGUgbWl4ZWRfcmFuZ2VfdHlwZTsKLSNlbHNlCi0gICAgICAgIHR5cGVkZWYgYmFzZV91bnNpZ25l
ZCBtaXhlZF9yYW5nZV90eXBlOwotI2VuZGlmCi0gICAgICAgIHJhbmdlX3R5cGUgcmFuZ2UgPSBy
YW5kb206OmRldGFpbDo6c3VidHJhY3Q8cmVzdWx0X3R5cGU+KCkoX21heCwgX21pbik7Ci0gICAg
ICAgIGJhc2VfdW5zaWduZWQgYmFzZV9yYW5nZSA9Ci0gICAgICAgICAgICByYW5kb206OmRldGFp
bDo6c3VidHJhY3Q8YmFzZV9yZXN1bHQ+KCkoKGVuZy5tYXgpKCksIChlbmcubWluKSgpKTsKLSAg
ICAgICAgYmFzZV91bnNpZ25lZCB2YWwgPQotICAgICAgICAgICAgcmFuZG9tOjpkZXRhaWw6OnN1
YnRyYWN0PGJhc2VfcmVzdWx0PigpKGVuZygpLCAoZW5nLm1pbikoKSk7Ci0gICAgICAgIGlmKHJh
bmdlID49IGJhc2VfcmFuZ2UpIHsKLSAgICAgICAgICAgIHJldHVybiBib29zdDo6cmFuZG9tOjpk
ZXRhaWw6OmFkZDxyYW5nZV90eXBlLCByZXN1bHRfdHlwZT4oKSgKLSAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxyYW5nZV90eXBlPih2YWwpLCBfbWluKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIFRoaXMgaW52b2x2ZXMgbWl4ZWQgYXJpdGhtZXRpYyBiZXR3ZWVuIHRoZSBi
YXNlIGdlbmVyYXRvcnMgcmFuZ2UKLSAgICAgICAgICAgIC8vIHR5cGUsIGFuZCB0aGUgcmVzdWx0
X3R5cGUncyByYW5nZSB0eXBlLiAgbWl4ZWRfcmFuZ2VfdHlwZSBpcwotICAgICAgICAgICAgLy8g
bm9ybWFsbHkgdGhlIHNhbWUgYXMgYmFzZV91bnNpZ25lZCB3aGljaCBpcyB0aGUgbW9zdCBlZmZp
Y2llbnQKLSAgICAgICAgICAgIC8vIG9wdGlvbiwgYnV0IHJlcXVpcmVzIGEgbmFycm93aW5nIGV4
cGxjaXQgY2FzdCBpZiByZXN1bHRfdHlwZQotICAgICAgICAgICAgLy8gaXMgYSBtdWx0aXByZWNp
c2lvbiB0eXBlLiAgSWYgbm8gc3VjaCBjYXN0cyBhcmUgYXZhaWxhYmxlIHRoZW4gdXNlCi0gICAg
ICAgICAgICAvLyBtdWx0aXByZWNpc2lvbiBhcml0aG1ldGljIHRocm91Z2hvdXQgaW5zdGVhZC4K
LSAgICAgICAgICAgIG1peGVkX3JhbmdlX3R5cGUgbW9kdWx1cyA9IHN0YXRpY19jYXN0PG1peGVk
X3JhbmdlX3R5cGU+KHJhbmdlKSsxOwotICAgICAgICAgICAgcmV0dXJuIGJvb3N0OjpyYW5kb206
OmRldGFpbDo6YWRkPHJhbmdlX3R5cGUsIHJlc3VsdF90eXBlPigpKAotICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PG1peGVkX3JhbmdlX3R5cGU+KHZhbCkgJSBtb2R1bHVzLCBfbWluKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmdpbmU+Ci0gICAgcmVz
dWx0X3R5cGUgZ2VuZXJhdGUoRW5naW5lJiBlbmcsIGJvb3N0OjptcGw6OmZhbHNlXykgY29uc3QK
LSAgICB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgRW5naW5lOjpyZXN1bHRfdHlwZSBiYXNl
X3Jlc3VsdDsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6cmFuZG9tOjp0cmFpdHM6
Om1ha2VfdW5zaWduZWQ8cmVzdWx0X3R5cGU+Ojp0eXBlIHJhbmdlX3R5cGU7Ci0gICAgICAgIHJh
bmdlX3R5cGUgcmFuZ2UgPSByYW5kb206OmRldGFpbDo6c3VidHJhY3Q8cmVzdWx0X3R5cGU+KCko
X21heCwgX21pbik7Ci0gICAgICAgIGJhc2VfcmVzdWx0IHZhbCA9IGJvb3N0Ojp1bmlmb3JtXzAx
PGJhc2VfcmVzdWx0PigpKGVuZyk7Ci0gICAgICAgIC8vIHdoYXQgaXMgdGhlIHdvcnN0IHRoYXQg
Y2FuIHBvc3NpYmx5IGhhcHBlbiBoZXJlPwotICAgICAgICAvLyBiYXNlX3Jlc3VsdCBtYXkgbm90
IGJlIGFibGUgdG8gcmVwcmVzZW50IGFsbCB0aGUgdmFsdWVzIGluIFswLCByYW5nZV0KLSAgICAg
ICAgLy8gZXhhY3RseS4gIElmIHRoaXMgaGFwcGVucywgaXQgd2lsbCBjYXVzZSByb3VuZCBvZmYg
ZXJyb3IgYW5kIHdlCi0gICAgICAgIC8vIHdvbid0IGJlIGFibGUgdG8gcHJvZHVjZSBhbGwgdGhl
IHZhbHVlcyBpbiB0aGUgcmFuZ2UuICBXZSBkb24ndAotICAgICAgICAvLyBjYXJlIGFib3V0IHRo
aXMgYmVjYXVzZSB0aGUgdXNlciBoYXMgYWxyZWFkeSB0b2xkIHVzIG5vdCB0byBieQotICAgICAg
ICAvLyB1c2luZyB1bmlmb3JtX3NtYWxsaW50LiAgSG93ZXZlciwgd2UgZG8gbmVlZCB0byBiZSBj
YXJlZnVsCi0gICAgICAgIC8vIHRvIGNsYW1wIHRoZSByZXN1bHQsIG9yIGZsb2F0aW5nIHBvaW50
IHJvdW5kaW5nIGNhbiBwcm9kdWNlCi0gICAgICAgIC8vIGFuIG91dCBvZiByYW5nZSByZXN1bHQu
Ci0gICAgICAgIHJhbmdlX3R5cGUgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8cmFuZ2VfdHlwZT4odmFs
ICogKHN0YXRpY19jYXN0PGJhc2VfcmVzdWx0PihyYW5nZSkgKyAxKSk7Ci0gICAgICAgIGlmKG9m
ZnNldCA+IHJhbmdlKSByZXR1cm4gX21heDsKLSAgICAgICAgcmV0dXJuIGJvb3N0OjpyYW5kb206
OmRldGFpbDo6YWRkPHJhbmdlX3R5cGUsIHJlc3VsdF90eXBlPigpKG9mZnNldCAsIF9taW4pOwot
ICAgIH0KLSAgICAvLyBcZW5kY29uZAotCi0gICAgcmVzdWx0X3R5cGUgX21pbjsKLSAgICByZXN1
bHRfdHlwZSBfbWF4OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgcmFuZG9tCi0KLXVzaW5nIHJhbmRv
bTo6dW5pZm9ybV9zbWFsbGludDsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8v
IEJPT1NUX1JBTkRPTV9VTklGT1JNX1NNQUxMSU5UX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZG9tL3ZhcmlhdGVfZ2VuZXJhdG9y
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS92
YXJpYXRlX2dlbmVyYXRvci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNWFh
YzRlNDcyYTVlMmFiNzk2YTBmODJiMjFlMWU1Yzk2ZmM4ZDguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvcmFuZG9tL3ZhcmlhdGVfZ2VuZXJhdG9yLmhwcAorKysgL2Rldi9udWxsCkBA
IC0xLDEyMiArMCwwIEBACi0vKiBib29zdCByYW5kb20vdmFyaWF0ZV9nZW5lcmF0b3IuaHBwIGhl
YWRlciBmaWxlCi0gKgotICogQ29weXJpZ2h0IEplbnMgTWF1cmVyIDIwMDIKLSAqIENvcHlyaWdo
dCBTdGV2ZW4gV2F0YW5hYmUgMjAxMQotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNv
ZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBM
SUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KQotICoKLSAqIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNl
bnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKgotICov
Ci0KLSNpZm5kZWYgQk9PU1RfUkFORE9NX1JBTkRPTV9HRU5FUkFUT1JfSFBQCi0jZGVmaW5lIEJP
T1NUX1JBTkRPTV9SQU5ET01fR0VORVJBVE9SX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9t
L2RldGFpbC9wdHJfaGVscGVyLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS9kZXRhaWwv
ZGlzYWJsZV93YXJuaW5ncy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLS8vLyBcY29uZCBo
aWRlX3ByaXZhdGVfbWVtYmVycwotCi1uYW1lc3BhY2UgcmFuZG9tIHsKLQotLy8vXGVuZGNvbmQK
LQotLyoqCi0gKiBBIHJhbmRvbSB2YXJpYXRlIGdlbmVyYXRvciBpcyB1c2VkIHRvIGpvaW4gYSBy
YW5kb20gbnVtYmVyCi0gKiBnZW5lcmF0b3IgdG9nZXRoZXIgd2l0aCBhIHJhbmRvbSBudW1iZXIg
ZGlzdHJpYnV0aW9uLgotICogQm9vc3QuUmFuZG9tIHByb3ZpZGVzIGEgdmFzdCBjaG9pY2Ugb2Yg
XGdlbmVyYXRvcnMgYXMgd2VsbAotICogYXMgXGRpc3RyaWJ1dGlvbnMuCi0gKgotICogVGhlIGFy
Z3VtZW50IGZvciB0aGUgdGVtcGxhdGUgcGFyYW1ldGVyIEVuZ2luZSBzaGFsbCBiZSBvZgotICog
dGhlIGZvcm0gVSwgVSYsIG9yIFUqLCB3aGVyZSBVIG1vZGVscyBhCi0gKiBcdW5pZm9ybV9yYW5k
b21fbnVtYmVyX2dlbmVyYXRvci4gIFRoZW4sIHRoZSBtZW1iZXIKLSAqIGVuZ2luZV92YWx1ZV90
eXBlIG5hbWVzIFUgKG5vdCB0aGUgcG9pbnRlciBvciByZWZlcmVuY2UgdG8gVSkuCi0gKgotICog
U3BlY2lhbGl6YXRpb25zIG9mIEBjIHZhcmlhdGVfZ2VuZXJhdG9yIHNhdGlzZnkgdGhlCi0gKiBy
ZXF1aXJlbWVudHMgb2YgQ29weUNvbnN0cnVjdGlibGUuIFRoZXkgYWxzbyBzYXRpc2Z5IHRoZQot
ICogcmVxdWlyZW1lbnRzIG9mIEFzc2lnbmFibGUgdW5sZXNzIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0
ZXIKLSAqIEVuZ2luZSBpcyBvZiB0aGUgZm9ybSBVJi4KLSAqCi0gKiBUaGUgY29tcGxleGl0eSBv
ZiBhbGwgZnVuY3Rpb25zIHNwZWNpZmllZCBpbiB0aGlzIHNlY3Rpb24KLSAqIGlzIGNvbnN0YW50
LiBObyBmdW5jdGlvbiBkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uIGV4Y2VwdAotICogdGhlIGNv
bnN0cnVjdG9yIHRocm93cyBhbiBleGNlcHRpb24uCi0gKi8KLXRlbXBsYXRlPGNsYXNzIEVuZ2lu
ZSwgY2xhc3MgRGlzdHJpYnV0aW9uPgotY2xhc3MgdmFyaWF0ZV9nZW5lcmF0b3IKLXsKLXByaXZh
dGU6Ci0gICAgdHlwZWRlZiBib29zdDo6cmFuZG9tOjpkZXRhaWw6OnB0cl9oZWxwZXI8RW5naW5l
PiBoZWxwZXJfdHlwZTsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGhlbHBlcl90eXBl
Ojp2YWx1ZV90eXBlIGVuZ2luZV92YWx1ZV90eXBlOwotICAgIHR5cGVkZWYgRW5naW5lIGVuZ2lu
ZV90eXBlOwotICAgIHR5cGVkZWYgRGlzdHJpYnV0aW9uIGRpc3RyaWJ1dGlvbl90eXBlOwotICAg
IHR5cGVkZWYgdHlwZW5hbWUgRGlzdHJpYnV0aW9uOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsK
LQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBAYyB2YXJpYXRlX2dlbmVyYXRvciBvYmpl
Y3Qgd2l0aCB0aGUgYXNzb2NpYXRlZAotICAgICAqIFx1bmlmb3JtX3JhbmRvbV9udW1iZXJfZ2Vu
ZXJhdG9yIGVuZyBhbmQgdGhlIGFzc29jaWF0ZWQKLSAgICAgKiBccmFuZG9tX2Rpc3RyaWJ1dGlv
biBkLgotICAgICAqCi0gICAgICogVGhyb3dzOiBJZiBhbmQgd2hhdCB0aGUgY29weSBjb25zdHJ1
Y3RvciBvZiBFbmdpbmUgb3IKLSAgICAgKiBEaXN0cmlidXRpb24gdGhyb3dzLgotICAgICAqLwot
ICAgIHZhcmlhdGVfZ2VuZXJhdG9yKEVuZ2luZSBlLCBEaXN0cmlidXRpb24gZCkKLSAgICAgIDog
X2VuZyhlKSwgX2Rpc3QoZCkgeyB9Ci0KLSAgICAvKiogUmV0dXJuczogZGlzdHJpYnV0aW9uKCko
ZW5naW5lKCkpICovCi0gICAgcmVzdWx0X3R5cGUgb3BlcmF0b3IoKSgpIHsgcmV0dXJuIF9kaXN0
KGVuZ2luZSgpKTsgfQotICAgIC8qKgotICAgICAqIFJldHVybnM6IGRpc3RyaWJ1dGlvbigpKGVu
Z2luZSgpLCB2YWx1ZSkuCi0gICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICByZXN1
bHRfdHlwZSBvcGVyYXRvcigpKGNvbnN0IFQmIHZhbHVlKSB7IHJldHVybiBfZGlzdChlbmdpbmUo
KSwgdmFsdWUpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zOiBBIHJlZmVyZW5jZSB0byB0
aGUgYXNzb2NpYXRlZCB1bmlmb3JtIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgotICAgICAqLwot
ICAgIGVuZ2luZV92YWx1ZV90eXBlJiBlbmdpbmUoKSB7IHJldHVybiBoZWxwZXJfdHlwZTo6cmVm
KF9lbmcpOyB9Ci0gICAgLyoqCi0gICAgICogUmV0dXJuczogQSByZWZlcmVuY2UgdG8gdGhlIGFz
c29jaWF0ZWQgdW5pZm9ybSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KLSAgICAgKi8KLSAgICBj
b25zdCBlbmdpbmVfdmFsdWVfdHlwZSYgZW5naW5lKCkgY29uc3QgeyByZXR1cm4gaGVscGVyX3R5
cGU6OnJlZihfZW5nKTsgfQotCi0gICAgLyoqIFJldHVybnM6IEEgcmVmZXJlbmNlIHRvIHRoZSBh
c3NvY2lhdGVkIFxyYW5kb21fZGlzdHJpYnV0aW9uLiAqLwotICAgIGRpc3RyaWJ1dGlvbl90eXBl
JiBkaXN0cmlidXRpb24oKSB7IHJldHVybiBfZGlzdDsgfQotICAgIC8qKgotICAgICAqIFJldHVy
bnM6IEEgcmVmZXJlbmNlIHRvIHRoZSBhc3NvY2lhdGVkIHJhbmRvbSBkaXN0cmlidXRpb24uCi0g
ICAgICovCi0gICAgY29uc3QgZGlzdHJpYnV0aW9uX3R5cGUmIGRpc3RyaWJ1dGlvbigpIGNvbnN0
IHsgcmV0dXJuIF9kaXN0OyB9Ci0KLSAgICAvKioKLSAgICAgKiBQcmVjb25kaXRpb246IGRpc3Ry
aWJ1dGlvbigpLm1pbigpIGlzIHdlbGwtZm9ybWVkCi0gICAgICoKLSAgICAgKiBSZXR1cm5zOiBk
aXN0cmlidXRpb24oKS5taW4oKQotICAgICAqLwotICAgIHJlc3VsdF90eXBlIG1pbiBCT09TVF9Q
UkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKSBjb25zdCB7IHJldHVybiAoZGlzdHJpYnV0aW9u
KCkubWluKSgpOyB9Ci0gICAgLyoqCi0gICAgICogUHJlY29uZGl0aW9uOiBkaXN0cmlidXRpb24o
KS5tYXgoKSBpcyB3ZWxsLWZvcm1lZAotICAgICAqCi0gICAgICogUmV0dXJuczogZGlzdHJpYnV0
aW9uKCkubWF4KCkKLSAgICAgKi8KLSAgICByZXN1bHRfdHlwZSBtYXggQk9PU1RfUFJFVkVOVF9N
QUNST19TVUJTVElUVVRJT04gKCkgY29uc3QgeyByZXR1cm4gKGRpc3RyaWJ1dGlvbigpLm1heCko
KTsgfQotCi1wcml2YXRlOgotICAgIEVuZ2luZSBfZW5nOwotICAgIGRpc3RyaWJ1dGlvbl90eXBl
IF9kaXN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgcmFuZG9tCi0KLXVzaW5nIHJhbmRvbTo6dmFy
aWF0ZV9nZW5lcmF0b3I7Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNpbmNsdWRlIDxib29z
dC9yYW5kb20vZGV0YWlsL2VuYWJsZV93YXJuaW5ncy5ocHA+Ci0KLSNlbmRpZiAvLyBCT09TVF9S
QU5ET01fUkFORE9NX0dFTkVSQVRPUl9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS93ZWlidWxsX2Rpc3RyaWJ1dGlvbi5ocHAg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20vd2VpYnVs
bF9kaXN0cmlidXRpb24uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWUzYzA0
OTAzYTJhYTE0N2Q0YjhiMDBkZThiYjg5ZGFlNGRlODMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3JhbmRvbS93ZWlidWxsX2Rpc3RyaWJ1dGlvbi5ocHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxNzcgKzAsMCBAQAotLyogYm9vc3QgcmFuZG9tL3dlaWJ1bGxfZGlzdHJpYnV0aW9uLmhw
cCBoZWFkZXIgZmlsZQotICoKLSAqIENvcHlyaWdodCBTdGV2ZW4gV2F0YW5hYmUgMjAxMAotICog
RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4w
LiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAot
ICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICoKLSAqIFNlZSBodHRw
Oi8vd3d3LmJvb3N0Lm9yZyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1l
bnRhdGlvbi4KLSAqCi0gKiAkSWQkCi0gKi8KLQotI2lmbmRlZiBCT09TVF9SQU5ET01fV0VJQlVM
TF9ESVNUUklCVVRJT05fSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9XRUlCVUxMX0RJU1RSSUJV
VElPTl9IUFAKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy9ub190cjEvY21hdGguaHBwPgotI2lu
Y2x1ZGUgPGlvc2Z3ZD4KLSNpbmNsdWRlIDxpc3RyZWFtPgotI2luY2x1ZGUgPGJvb3N0L2NvbmZp
Zy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbGltaXRzLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5k
b20vZGV0YWlsL29wZXJhdG9ycy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL3VuaWZvcm1f
MDEuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci0KLS8qKgot
ICogVGhlIFdlaWJ1bGwgZGlzdHJpYnV0aW9uIGlzIGEgcmVhbCB2YWx1ZWQgZGlzdHJpYnV0aW9u
IHdpdGggdHdvCi0gKiBwYXJhbWV0ZXJzIGEgYW5kIGIsIHByb2R1Y2luZyB2YWx1ZXMgPj0gMC4K
LSAqCi0gKiBJdCBoYXMgXGYkXGRpc3BsYXlzdHlsZSBwKHgpID0gXGZyYWN7YX17Yn1cbGVmdChc
ZnJhY3t4fXtifVxyaWdodClee2EtMX1lXnstXGxlZnQoXGZyYWN7eH17Yn1ccmlnaHQpXmF9XGYk
LgotICovCi10ZW1wbGF0ZTxjbGFzcyBSZWFsVHlwZSA9IGRvdWJsZT4KLWNsYXNzIHdlaWJ1bGxf
ZGlzdHJpYnV0aW9uIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIFJlYWxUeXBlIHJlc3VsdF90eXBl
OwotICAgIHR5cGVkZWYgUmVhbFR5cGUgaW5wdXRfdHlwZTsKLQotICAgIGNsYXNzIHBhcmFtX3R5
cGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiB3ZWlidWxsX2Rpc3RyaWJ1dGlvbiBk
aXN0cmlidXRpb25fdHlwZTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc3RydWN0cyBh
IEBjIHBhcmFtX3R5cGUgZnJvbSB0aGUgImEiIGFuZCAiYiIgcGFyYW1ldGVycwotICAgICAgICAg
KiBvZiB0aGUgZGlzdHJpYnV0aW9uLgotICAgICAgICAgKgotICAgICAgICAgKiBSZXF1aXJlczog
YSA+IDAgJiYgYiA+IDAKLSAgICAgICAgICovCi0gICAgICAgIGV4cGxpY2l0IHBhcmFtX3R5cGUo
UmVhbFR5cGUgYV9hcmcgPSAxLjAsIFJlYWxUeXBlIGJfYXJnID0gMS4wKQotICAgICAgICAgIDog
X2EoYV9hcmcpLCBfYihiX2FyZykKLSAgICAgICAge30KLQotICAgICAgICAvKiogUmV0dXJucyB0
aGUgImEiIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnR1aW9uLiAqLwotICAgICAgICBSZWFsVHlw
ZSBhKCkgY29uc3QgeyByZXR1cm4gX2E7IH0KLSAgICAgICAgLyoqIFJldHVybnMgdGhlICJiIiBw
YXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KLSAgICAgICAgUmVhbFR5cGUgYigpIGNv
bnN0IHsgcmV0dXJuIF9iOyB9Ci0KLSAgICAgICAgLyoqIFdyaXRlcyBhIEBjIHBhcmFtX3R5cGUg
dG8gYSBAYyBzdGQ6Om9zdHJlYW0uICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfT1NU
UkVBTV9PUEVSQVRPUihvcywgcGFyYW1fdHlwZSwgcGFybSkKLSAgICAgICAgeyBvcyA8PCBwYXJt
Ll9hIDw8ICcgJyA8PCBwYXJtLl9iOyByZXR1cm4gb3M7IH0KLQotICAgICAgICAvKiogUmVhZHMg
YSBAYyBwYXJhbV90eXBlIGZyb20gYSBAYyBzdGQ6OmlzdHJlYW0uICovCi0gICAgICAgIEJPT1NU
X1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRPUihpcywgcGFyYW1fdHlwZSwgcGFybSkKLSAg
ICAgICAgeyBpcyA+PiBwYXJtLl9hID4+IHN0ZDo6d3MgPj4gcGFybS5fYjsgcmV0dXJuIGlzOyB9
Ci0KLSAgICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHNldHMgb2YgcGFyYW1ldGVy
cyBhcmUgdGhlIHNhbWUuICovCi0gICAgICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfRVFVQUxJVFlf
T1BFUkFUT1IocGFyYW1fdHlwZSwgbGhzLCByaHMpCi0gICAgICAgIHsgcmV0dXJuIGxocy5fYSA9
PSByaHMuX2EgJiYgbGhzLl9iID09IHJocy5fYjsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHNldHMgb2YgcGFyYW1ldGVycyBhcmUgdGhlIGRpZmZlcmVu
dC4gKi8KLSAgICAgICAgQk9PU1RfUkFORE9NX0RFVEFJTF9JTkVRVUFMSVRZX09QRVJBVE9SKHBh
cmFtX3R5cGUpCi0KLSAgICBwcml2YXRlOgotICAgICAgICBSZWFsVHlwZSBfYTsKLSAgICAgICAg
UmVhbFR5cGUgX2I7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBAYyB3
ZWlidWxsX2Rpc3RyaWJ1dGlvbiBmcm9tIGl0cyAiYSIgYW5kICJiIiBwYXJhbWV0ZXJzLgotICAg
ICAqCi0gICAgICogUmVxdWlyZXM6IGEgPiAwICYmIGIgPiAwCi0gICAgICovCi0gICAgZXhwbGlj
aXQgd2VpYnVsbF9kaXN0cmlidXRpb24oUmVhbFR5cGUgYV9hcmcgPSAxLjAsIFJlYWxUeXBlIGJf
YXJnID0gMS4wKQotICAgICAgOiBfYShhX2FyZyksIF9iKGJfYXJnKQotICAgIHt9Ci0gICAgLyoq
IENvbnN0cnVjdHMgYSBAYyB3ZWlidWxsX2Rpc3RyaWJ1dGlvbiBmcm9tIGl0cyBwYXJhbWV0ZXJz
LiAqLwotICAgIGV4cGxpY2l0IHdlaWJ1bGxfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUm
IHBhcm0pCi0gICAgICA6IF9hKHBhcm0uYSgpKSwgX2IocGFybS5iKCkpCi0gICAge30KLQotICAg
IC8qKgotICAgICAqIFJldHVybnMgYSByYW5kb20gdmFyaWF0ZSBkaXN0cmlidXRlZCBhY2NvcmRp
bmcgdG8gdGhlCi0gICAgICogQGMgd2VpYnVsbF9kaXN0cmlidXRpb24uCi0gICAgICovCi0gICAg
dGVtcGxhdGU8Y2xhc3MgVVJORz4KLSAgICBSZWFsVHlwZSBvcGVyYXRvcigpKFVSTkcmIHVybmcp
IGNvbnN0Ci0gICAgewotICAgICAgICB1c2luZyBzdGQ6OnBvdzsKLSAgICAgICAgdXNpbmcgc3Rk
Ojpsb2c7Ci0gICAgICAgIHJldHVybiBfYipwb3coLWxvZygxIC0gdW5pZm9ybV8wMTxSZWFsVHlw
ZT4oKSh1cm5nKSksIDEvX2EpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBy
YW5kb20gdmFyaWF0ZSBkaXN0cmlidXRlZCBhY2NvcmRpbnQgdG8gdGhlIFdlaWJ1bGwKLSAgICAg
KiBkaXN0cmlidXRpb24gd2l0aCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBieSBAYyBwYXJhbS4KLSAg
ICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBVUk5HPgotICAgIFJlYWxUeXBlIG9wZXJhdG9yKCko
VVJORyYgdXJuZywgY29uc3QgcGFyYW1fdHlwZSYgcGFybSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiB3ZWlidWxsX2Rpc3RyaWJ1dGlvbihwYXJtKSh1cm5nKTsKLSAgICB9Ci0KLSAgICAv
KiogUmV0dXJucyB0aGUgImEiIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLwotICAg
IFJlYWxUeXBlIGEoKSBjb25zdCB7IHJldHVybiBfYTsgfQotICAgIC8qKiBSZXR1cm5zIHRoZSAi
YiIgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uICovCi0gICAgUmVhbFR5cGUgYigpIGNv
bnN0IHsgcmV0dXJuIF9iOyB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgc21hbGxlc3QgdmFsdWUg
dGhhdCB0aGUgZGlzdHJpYnV0aW9uIGNhbiBwcm9kdWNlLiAqLwotICAgIFJlYWxUeXBlIG1pbiBC
T09TVF9QUkVWRU5UX01BQ1JPX1NVQlNUSVRVVElPTiAoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0g
ICAgLyoqIFJldHVybnMgdGhlIGxhcmdlc3QgdmFsdWUgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGNh
biBwcm9kdWNlLiAqLwotICAgIFJlYWxUeXBlIG1heCBCT09TVF9QUkVWRU5UX01BQ1JPX1NVQlNU
SVRVVElPTiAoKSBjb25zdAotICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8UmVhbFR5
cGU+OjppbmZpbml0eSgpOyB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgcGFyYW1ldGVycyBvZiB0
aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIHBhcmFtX3R5cGUgcGFyYW0oKSBjb25zdCB7IHJldHVy
biBwYXJhbV90eXBlKF9hLCBfYik7IH0KLSAgICAvKiogU2V0cyB0aGUgcGFyYW1ldGVycyBvZiB0
aGUgZGlzdHJpYnV0aW9uLiAqLwotICAgIHZvaWQgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgcGFy
bSkKLSAgICB7Ci0gICAgICAgIF9hID0gcGFybS5hKCk7Ci0gICAgICAgIF9iID0gcGFybS5iKCk7
Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRWZmZWN0czogU3Vic2VxdWVudCB1c2VzIG9mIHRo
ZSBkaXN0cmlidXRpb24gZG8gbm90IGRlcGVuZAotICAgICAqIG9uIHZhbHVlcyBwcm9kdWNlZCBi
eSBhbnkgZW5naW5lIHByaW9yIHRvIGludm9raW5nIHJlc2V0LgotICAgICAqLwotICAgIHZvaWQg
cmVzZXQoKSB7IH0KLQotICAgIC8qKiBXcml0ZXMgYSBAYyB3ZWlidWxsX2Rpc3RyaWJ1dGlvbiB0
byBhIEBjIHN0ZDo6b3N0cmVhbS4gKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX09TVFJFQU1f
T1BFUkFUT1Iob3MsIHdlaWJ1bGxfZGlzdHJpYnV0aW9uLCB3ZCkKLSAgICB7Ci0gICAgICAgIG9z
IDw8IHdkLnBhcmFtKCk7Ci0gICAgICAgIHJldHVybiBvczsKLSAgICB9Ci0KLSAgICAvKiogUmVh
ZHMgYSBAYyB3ZWlidWxsX2Rpc3RyaWJ1dGlvbiBmcm9tIGEgQGMgc3RkOjppc3RyZWFtLiAqLwot
ICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSVNUUkVBTV9PUEVSQVRPUihpcywgd2VpYnVsbF9kaXN0
cmlidXRpb24sIHdkKQotICAgIHsKLSAgICAgICAgcGFyYW1fdHlwZSBwYXJtOwotICAgICAgICBp
ZihpcyA+PiBwYXJtKSB7Ci0gICAgICAgICAgICB3ZC5wYXJhbShwYXJtKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gaXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVl
IGlmIHRoZSB0d28gaW5zdGFuY2VzIG9mIEBjIHdlaWJ1bGxfZGlzdHJpYnV0aW9uIHdpbGwKLSAg
ICAgKiByZXR1cm4gaWRlbnRpY2FsIHNlcXVlbmNlcyBvZiB2YWx1ZXMgZ2l2ZW4gZXF1YWwgZ2Vu
ZXJhdG9ycy4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX0VRVUFMSVRZX09QRVJB
VE9SKHdlaWJ1bGxfZGlzdHJpYnV0aW9uLCBsaHMsIHJocykKLSAgICB7IHJldHVybiBsaHMuX2Eg
PT0gcmhzLl9hICYmIGxocy5fYiA9PSByaHMuX2I7IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBS
ZXR1cm5zIHRydWUgaWYgdGhlIHR3byBpbnN0YW5jZXMgb2YgQGMgd2VpYnVsbF9kaXN0cmlidXRp
b24gd2lsbAotICAgICAqIHJldHVybiBkaWZmZXJlbnQgc2VxdWVuY2VzIG9mIHZhbHVlcyBnaXZl
biBlcXVhbCBnZW5lcmF0b3JzLgotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfSU5F
UVVBTElUWV9PUEVSQVRPUih3ZWlidWxsX2Rpc3RyaWJ1dGlvbikKLQotcHJpdmF0ZToKLSAgICBS
ZWFsVHlwZSBfYTsKLSAgICBSZWFsVHlwZSBfYjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHJhbmRv
bQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1JBTkRPTV9XRUlCVUxM
X0RJU1RSSUJVVElPTl9IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS94b3JfY29tYmluZS5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5kb20veG9yX2NvbWJpbmUuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZThhNThiNDBmMWQ5YTEzYjVkYTgzNTMyMmY3ZTJiZjAw
OTAxNzNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmRvbS94b3JfY29tYmlu
ZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyogYm9vc3QgcmFuZG9tL3hv
cl9jb21iaW5lLmhwcCBoZWFkZXIgZmlsZQotICoKLSAqIENvcHlyaWdodCBKZW5zIE1hdXJlciAy
MDAyCi0gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVy
c2lvbiAxLjAuIChTZWUKLSAqIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0Ci0gKiBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKgotICog
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGlu
ZyBkb2N1bWVudGF0aW9uLgotICoKLSAqICRJZCQKLSAqCi0gKi8KLQotI2lmbmRlZiBCT09TVF9S
QU5ET01fWE9SX0NPTUJJTkVfSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkRPTV9YT1JfQ09NQklORV9I
UFAKLQotI2luY2x1ZGUgPGlzdHJlYW0+Ci0jaW5jbHVkZSA8aW9zZndkPgotI2luY2x1ZGUgPGNh
c3NlcnQ+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPiAvLyBmb3Igc3RkOjptaW4gYW5kIHN0ZDo6bWF4
Ci0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9saW1pdHMuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L2NzdGRpbnQuaHBwPiAgICAgLy8gdWludDMyX3QKLSNpbmNsdWRl
IDxib29zdC9yYW5kb20vZGV0YWlsL2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9t
L2RldGFpbC9zZWVkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5kb20vZGV0YWlsL3NlZWRfaW1w
bC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZG9tL2RldGFpbC9vcGVyYXRvcnMuaHBwPgotCi1u
YW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHJhbmRvbSB7Ci0KLS8qKgotICogSW5zdGFudGlh
dGlvbnMgb2YgQGMgeG9yX2NvbWJpbmVfZW5naW5lIG1vZGVsIGEKLSAqIFxwc2V1ZG9fcmFuZG9t
X251bWJlcl9nZW5lcmF0b3IuICBUbyBwcm9kdWNlIGl0cyBvdXRwdXQgaXQKLSAqIGludm9rZXMg
ZWFjaCBvZiB0aGUgYmFzZSBnZW5lcmF0b3JzLCBzaGlmdHMgdGhlaXIgcmVzdWx0cwotICogYW5k
IHhvcnMgdGhlbSB0b2dldGhlci4KLSAqLwotdGVtcGxhdGU8Y2xhc3MgVVJORzEsIGludCBzMSwg
Y2xhc3MgVVJORzIsIGludCBzMj4KLWNsYXNzIHhvcl9jb21iaW5lX2VuZ2luZQotewotcHVibGlj
OgotICAgIHR5cGVkZWYgVVJORzEgYmFzZTFfdHlwZTsKLSAgICB0eXBlZGVmIFVSTkcyIGJhc2Uy
X3R5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlMV90eXBlOjpyZXN1bHRfdHlwZSByZXN1
bHRfdHlwZTsKLQotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCBoYXNfZml4ZWRfcmFu
Z2UgPSBmYWxzZSk7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGludCwgc2hpZnQxID0gczEp
OwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChpbnQsIHNoaWZ0MiA9IHMyKTsKLQotICAgIC8q
KgotICAgICAqIENvbnN0cnVjdG9ycyBhIEBjIHhvcl9jb21iaW5lX2VuZ2luZSBieSBkZWZhdWx0
IGNvbnN0cnVjdGluZwotICAgICAqIGJvdGggYmFzZSBnZW5lcmF0b3JzLgotICAgICAqLwotICAg
IHhvcl9jb21iaW5lX2VuZ2luZSgpIDogX3JuZzEoKSwgX3JuZzIoKSB7IH0KLQotICAgIC8qKiBD
b25zdHJ1Y3RzIGEgQGMgeG9yX2NvbWJpbmUgYnkgY29weWluZyB0d28gYmFzZSBnZW5lcmF0b3Jz
LiAqLwotICAgIHhvcl9jb21iaW5lX2VuZ2luZShjb25zdCBiYXNlMV90eXBlICYgcm5nMSwgY29u
c3QgYmFzZTJfdHlwZSAmIHJuZzIpCi0gICAgICA6IF9ybmcxKHJuZzEpLCBfcm5nMihybmcyKSB7
IH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBAYyB4b3JfY29tYmluZV9lbmdpbmUs
IHNlZWRpbmcgYm90aCBiYXNlIGdlbmVyYXRvcnMKLSAgICAgKiB3aXRoIEBjIHYuCi0gICAgICoK
LSAgICAgKiBAeG1sd2FybmluZwotICAgICAqIFRoZSBleGFjdCBhbGdvcml0aG0gdXNlZCBieSB0
aGlzIGZ1bmN0aW9uIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KLSAgICAgKiBAZW5keG1sd2Fy
bmluZwotICAgICAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfQVJJVEhNRVRJQ19DT05TVFJV
Q1RPUih4b3JfY29tYmluZV9lbmdpbmUsCi0gICAgICAgIHJlc3VsdF90eXBlLCB2KQotICAgIHsg
c2VlZCh2KTsgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIEBjIHhvcl9jb21iaW5l
X2VuZ2luZSwgc2VlZGluZyBib3RoIGJhc2UgZ2VuZXJhdG9ycwotICAgICAqIHdpdGggdmFsdWVz
IHByb2R1Y2VkIGJ5IEBjIHNlcS4KLSAgICAgKi8KLSAgICBCT09TVF9SQU5ET01fREVUQUlMX1NF
RURfU0VRX0NPTlNUUlVDVE9SKHhvcl9jb21iaW5lX2VuZ2luZSwKLSAgICAgICAgU2VlZFNlcSwg
c2VxKQotICAgIHsgc2VlZChzZXEpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEg
QGMgeG9yX2NvbWJpbmVfZW5naW5lLCBzZWVkaW5nIGJvdGggYmFzZSBnZW5lcmF0b3JzCi0gICAg
ICogd2l0aCB2YWx1ZXMgZnJvbSB0aGUgaXRlcmF0b3IgcmFuZ2UgW2ZpcnN0LCBsYXN0KSBhbmQg
Y2hhbmdlcwotICAgICAqIGZpcnN0IHRvIHBvaW50IHRvIHRoZSBlbGVtZW50IGFmdGVyIHRoZSBs
YXN0IG9uZSB1c2VkLiAgSWYgdGhlcmUKLSAgICAgKiBhcmUgbm90IGVub3VnaCBlbGVtZW50cyBp
biB0aGUgcmFuZ2UgdG8gc2VlZCBib3RoIGdlbmVyYXRvcnMsCi0gICAgICogdGhyb3dzIEBjIHN0
ZDo6aW52YWxpZF9hcmd1bWVudC4KLSAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBJdD4geG9y
X2NvbWJpbmVfZW5naW5lKEl0JiBmaXJzdCwgSXQgbGFzdCkKLSAgICAgIDogX3JuZzEoZmlyc3Qs
IGxhc3QpLCBfcm5nMiggLyogYWR2YW5jZWQgYnkgb3RoZXIgY2FsbCAqLyBmaXJzdCwgbGFzdCkg
eyB9Ci0KLSAgICAvKiogQ2FsbHMgQGMgc2VlZCgpIGZvciBib3RoIGJhc2UgZ2VuZXJhdG9ycy4g
Ki8KLSAgICB2b2lkIHNlZWQoKSB7IF9ybmcxLnNlZWQoKTsgX3JuZzIuc2VlZCgpOyB9Ci0KLSAg
ICAvKiogQGMgc2VlZHMgYm90aCBiYXNlIGdlbmVyYXRvcnMgd2l0aCBAYyB2LiAqLwotICAgIEJP
T1NUX1JBTkRPTV9ERVRBSUxfQVJJVEhNRVRJQ19TRUVEKHhvcl9jb21iaW5lX2VuZ2luZSwgcmVz
dWx0X3R5cGUsIHYpCi0gICAgeyBfcm5nMS5zZWVkKHYpOyBfcm5nMi5zZWVkKHYpOyB9Ci0KLSAg
ICAvKiogQGMgc2VlZHMgYm90aCBiYXNlIGdlbmVyYXRvcnMgd2l0aCB2YWx1ZXMgcHJvZHVjZWQg
YnkgQGMgc2VxLiAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfU0VFRF9TRVFfU0VFRCh4b3Jf
Y29tYmluZV9lbmdpbmUsIFNlZWRTZXEsIHNlcSkKLSAgICB7IF9ybmcxLnNlZWQoc2VxKTsgX3Ju
ZzIuc2VlZChzZXEpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBzZWVkcyBib3RoIGJhc2UgZ2VuZXJh
dG9ycyB3aXRoIHZhbHVlcyBmcm9tIHRoZSBpdGVyYXRvcgotICAgICAqIHJhbmdlIFtmaXJzdCwg
bGFzdCkgYW5kIGNoYW5nZXMgZmlyc3QgdG8gcG9pbnQgdG8gdGhlIGVsZW1lbnQKLSAgICAgKiBh
ZnRlciB0aGUgbGFzdCBvbmUgdXNlZC4gIElmIHRoZXJlIGFyZSBub3QgZW5vdWdoIGVsZW1lbnRz
IGluCi0gICAgICogdGhlIHJhbmdlIHRvIHNlZWQgYm90aCBnZW5lcmF0b3JzLCB0aHJvd3MgQGMg
c3RkOjppbnZhbGlkX2FyZ3VtZW50LgotICAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIEl0PiB2
b2lkIHNlZWQoSXQmIGZpcnN0LCBJdCBsYXN0KQotICAgIHsKLSAgICAgICAgX3JuZzEuc2VlZChm
aXJzdCwgbGFzdCk7Ci0gICAgICAgIF9ybmcyLnNlZWQoZmlyc3QsIGxhc3QpOwotICAgIH0KLQot
ICAgIC8qKiBSZXR1cm5zIHRoZSBmaXJzdCBiYXNlIGdlbmVyYXRvci4gKi8KLSAgICBjb25zdCBi
YXNlMV90eXBlJiBiYXNlMSgpIGNvbnN0IHsgcmV0dXJuIF9ybmcxOyB9Ci0KLSAgICAvKiogUmV0
dXJucyB0aGUgc2Vjb25kIGJhc2UgZ2VuZXJhdG9yLiAqLwotICAgIGNvbnN0IGJhc2UyX3R5cGUm
IGJhc2UyKCkgY29uc3QgeyByZXR1cm4gX3JuZzI7IH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSBu
ZXh0IHZhbHVlIG9mIHRoZSBnZW5lcmF0b3IuICovCi0gICAgcmVzdWx0X3R5cGUgb3BlcmF0b3Io
KSgpCi0gICAgewotICAgICAgICByZXR1cm4gKF9ybmcxKCkgPDwgczEpIF4gKF9ybmcyKCkgPDwg
czIpOwotICAgIH0KLSAgCi0gICAgLyoqIEZpbGxzIGEgcmFuZ2Ugd2l0aCByYW5kb20gdmFsdWVz
ICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgSXRlcj4KLSAgICB2b2lkIGdlbmVyYXRlKEl0ZXIgZmly
c3QsIEl0ZXIgbGFzdCkKLSAgICB7IGRldGFpbDo6Z2VuZXJhdGVfZnJvbV9pbnQoKnRoaXMsIGZp
cnN0LCBsYXN0KTsgfQotCi0gICAgLyoqIEFkdmFuY2VzIHRoZSBzdGF0ZSBvZiB0aGUgZ2VuZXJh
dG9yIGJ5IEBjIHouICovCi0gICAgdm9pZCBkaXNjYXJkKGJvb3N0Ojp1aW50bWF4X3QgeikKLSAg
ICB7Ci0gICAgICAgIF9ybmcxLmRpc2NhcmQoeik7Ci0gICAgICAgIF9ybmcyLmRpc2NhcmQoeik7
Ci0gICAgfQotCi0gICAgLyoqIFJldHVybnMgdGhlIHNtYWxsZXN0IHZhbHVlIHRoYXQgdGhlIGdl
bmVyYXRvciBjYW4gcHJvZHVjZS4gKi8KLSAgICBzdGF0aWMgcmVzdWx0X3R5cGUgbWluIEJPT1NU
X1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIHsgcmV0dXJuIChzdGQ6Om1pbikoKFVSTkcx
OjptaW4pKCksIChVUk5HMjo6bWluKSgpKTsgfQotICAgIC8qKiBSZXR1cm5zIHRoZSBsYXJnZXN0
IHZhbHVlIHRoYXQgdGhlIGdlbmVyYXRvciBjYW4gcHJvZHVjZS4gKi8KLSAgICBzdGF0aWMgcmVz
dWx0X3R5cGUgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIHsgcmV0dXJu
IChzdGQ6Om1heCkoKFVSTkcxOjptaW4pKCksIChVUk5HMjo6bWF4KSgpKTsgfQotCi0gICAgLyoq
Ci0gICAgICogV3JpdGVzIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnZW5lcmF0
b3IgdG8gYSBAYyBzdGQ6Om9zdHJlYW0uCi0gICAgICovCi0gICAgQk9PU1RfUkFORE9NX0RFVEFJ
TF9PU1RSRUFNX09QRVJBVE9SKG9zLCB4b3JfY29tYmluZV9lbmdpbmUsIHMpCi0gICAgewotICAg
ICAgICBvcyA8PCBzLl9ybmcxIDw8ICcgJyA8PCBzLl9ybmcyOwotICAgICAgICByZXR1cm4gb3M7
Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFJlYWRzIHRoZSB0ZXh0dWFsIHJlcHJlc2Vu
dGF0aW9uIG9mIHRoZSBnZW5lcmF0b3IgZnJvbSBhIEBjIHN0ZDo6aXN0cmVhbS4KLSAgICAgKi8K
LSAgICBCT09TVF9SQU5ET01fREVUQUlMX0lTVFJFQU1fT1BFUkFUT1IoaXMsIHhvcl9jb21iaW5l
X2VuZ2luZSwgcykKLSAgICB7Ci0gICAgICAgIGlzID4+IHMuX3JuZzEgPj4gc3RkOjp3cyA+PiBz
Ll9ybmcyOwotICAgICAgICByZXR1cm4gaXM7Ci0gICAgfQotICAgIAotICAgIC8qKiBSZXR1cm5z
IHRydWUgaWYgdGhlIHR3byBnZW5lcmF0b3JzIHdpbGwgcHJvZHVjZSBpZGVudGljYWwgc2VxdWVu
Y2VzLiAqLwotICAgIEJPT1NUX1JBTkRPTV9ERVRBSUxfRVFVQUxJVFlfT1BFUkFUT1IoeG9yX2Nv
bWJpbmVfZW5naW5lLCB4LCB5KQotICAgIHsgcmV0dXJuIHguX3JuZzEgPT0geS5fcm5nMSAmJiB4
Ll9ybmcyID09IHkuX3JuZzI7IH0KLSAgICAKLSAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSB0
d28gZ2VuZXJhdG9ycyB3aWxsIHByb2R1Y2UgZGlmZmVyZW50IHNlcXVlbmNlcy4gKi8KLSAgICBC
T09TVF9SQU5ET01fREVUQUlMX0lORVFVQUxJVFlfT1BFUkFUT1IoeG9yX2NvbWJpbmVfZW5naW5l
KQotCi1wcml2YXRlOgotICAgIGJhc2UxX3R5cGUgX3JuZzE7Ci0gICAgYmFzZTJfdHlwZSBfcm5n
MjsKLX07Ci0KLSNpZm5kZWYgQk9PU1RfTk9fSU5DTEFTU19NRU1CRVJfSU5JVElBTElaQVRJT04K
LS8vICBBIGRlZmluaXRpb24gaXMgcmVxdWlyZWQgZXZlbiBmb3IgaW50ZWdyYWwgc3RhdGljIGNv
bnN0YW50cwotdGVtcGxhdGU8Y2xhc3MgVVJORzEsIGludCBzMSwgY2xhc3MgVVJORzIsIGludCBz
Mj4KLWNvbnN0IGJvb2wgeG9yX2NvbWJpbmVfZW5naW5lPFVSTkcxLCBzMSwgVVJORzIsIHMyPjo6
aGFzX2ZpeGVkX3JhbmdlOwotdGVtcGxhdGU8Y2xhc3MgVVJORzEsIGludCBzMSwgY2xhc3MgVVJO
RzIsIGludCBzMj4KLWNvbnN0IGludCB4b3JfY29tYmluZV9lbmdpbmU8VVJORzEsIHMxLCBVUk5H
MiwgczI+OjpzaGlmdDE7Ci10ZW1wbGF0ZTxjbGFzcyBVUk5HMSwgaW50IHMxLCBjbGFzcyBVUk5H
MiwgaW50IHMyPgotY29uc3QgaW50IHhvcl9jb21iaW5lX2VuZ2luZTxVUk5HMSwgczEsIFVSTkcy
LCBzMj46OnNoaWZ0MjsKLSNlbmRpZgotCi0vLy8gXGNvbmQgc2hvd19wcml2YXRlCi0KLS8qKiBQ
cm92aWRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICovCi10ZW1wbGF0ZTxjbGFzcyBV
Uk5HMSwgaW50IHMxLCBjbGFzcyBVUk5HMiwgaW50IHMyLAotICAgIHR5cGVuYW1lIFVSTkcxOjpy
ZXN1bHRfdHlwZSB2ID0gMD4KLWNsYXNzIHhvcl9jb21iaW5lIDogcHVibGljIHhvcl9jb21iaW5l
X2VuZ2luZTxVUk5HMSwgczEsIFVSTkcyLCBzMj4KLXsKLSAgICB0eXBlZGVmIHhvcl9jb21iaW5l
X2VuZ2luZTxVUk5HMSwgczEsIFVSTkcyLCBzMj4gYmFzZV90eXBlOwotcHVibGljOgotICAgIHR5
cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKLSAgICB4
b3JfY29tYmluZSgpIHt9Ci0gICAgeG9yX2NvbWJpbmUocmVzdWx0X3R5cGUgdmFsKSA6IGJhc2Vf
dHlwZSh2YWwpIHt9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgSXQ+Ci0gICAgeG9yX2NvbWJpbmUoSXQm
IGZpcnN0LCBJdCBsYXN0KSA6IGJhc2VfdHlwZShmaXJzdCwgbGFzdCkge30KLSAgICB4b3JfY29t
YmluZShjb25zdCBVUk5HMSAmIHJuZzEsIGNvbnN0IFVSTkcyICYgcm5nMikKLSAgICAgIDogYmFz
ZV90eXBlKHJuZzEsIHJuZzIpIHsgfQotCi0gICAgcmVzdWx0X3R5cGUgbWluIEJPT1NUX1BSRVZF
TlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIGNvbnN0IHsgcmV0dXJuIChzdGQ6Om1pbikoKHRoaXMt
PmJhc2UxKCkubWluKSgpLCAodGhpcy0+YmFzZTIoKS5taW4pKCkpOyB9Ci0gICAgcmVzdWx0X3R5
cGUgbWF4IEJPT1NUX1BSRVZFTlRfTUFDUk9fU1VCU1RJVFVUSU9OICgpIGNvbnN0IHsgcmV0dXJu
IChzdGQ6Om1heCkoKHRoaXMtPmJhc2UxKCkubWluKSgpLCAodGhpcy0+YmFzZTIoKS5tYXgpKCkp
OyB9Ci19OwotCi0vLy8gXGVuZGNvbmQKLQotfSAvLyBuYW1lc3BhY2UgcmFuZG9tCi19IC8vIG5h
bWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfUkFORE9NX1hPUl9DT01CSU5FX0hQUApk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFu
Z2UvYmVnaW4uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
cmFuZ2UvYmVnaW4uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTVhNzNiOTJk
MjI3ZWJkM2E0NzYyOTgzNzI5NjgyZWRlNzMzZmI1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3JhbmdlL2JlZ2luLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0v
LyBCb29zdC5SYW5nZSBsaWJyYXJ5Ci0vLwotLy8gIENvcHlyaWdodCBUaG9yc3RlbiBPdHRvc2Vu
IDIwMDMtMjAwNC4gVXNlLCBtb2RpZmljYXRpb24gYW5kCi0vLyAgZGlzdHJpYnV0aW9uIGlzIHN1
YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24KLS8vICAxLjAuIChT
ZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gRm9yIG1vcmUgaW5mb3Jt
YXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3JhbmdlLwotLy8KLQotI2lmbmRl
ZiBCT09TVF9SQU5HRV9CRUdJTl9IUFAKLSNkZWZpbmUgQk9PU1RfUkFOR0VfQkVHSU5fSFBQCi0K
LSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyBwcmFnbWEgb25jZQotI2VuZGlmCi0KLSNpbmNsdWRl
IDxib29zdC9yYW5nZS9jb25maWcuaHBwPgotCi0jaWZkZWYgQk9PU1RfTk9fRlVOQ1RJT05fVEVN
UExBVEVfT1JERVJJTkcKLSNpbmNsdWRlIDxib29zdC9yYW5nZS9kZXRhaWwvYmVnaW4uaHBwPgot
I2Vsc2UKLQotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL2l0ZXJhdG9yLmhwcD4KLQotbmFtZXNwYWNl
IGJvb3N0Ci17Ci0KLSNpZiAhQk9PU1RfV09SS0FST1VORChfX0JPUkxBTkRDX18sIEJPT1NUX1RF
U1RFRF9BVCgweDU2NCkpCi1uYW1lc3BhY2UgcmFuZ2VfZGV0YWlsCi17Ci0jZW5kaWYKLQotICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLSAgICAvLyBwcmltYXJ5IHRlbXBsYXRlCi0gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotCi0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIEMgPgotICAgIGlubGluZSBCT09TVF9ERURVQ0VE
X1RZUEVOQU1FIHJhbmdlX2l0ZXJhdG9yPEM+Ojp0eXBlCi0gICAgcmFuZ2VfYmVnaW4oIEMmIGMg
KQotICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gSWYgeW91IGdldCBhIGNvbXBpbGUtZXJy
b3IgaGVyZSwgaXQgaXMgbW9zdCBsaWtlbHkgYmVjYXVzZQotICAgICAgICAvLyB5b3UgaGF2ZSBu
b3QgaW1wbGVtZW50ZWQgcmFuZ2VfYmVnaW4oKSBwcm9wZXJseSBpbgotICAgICAgICAvLyB0aGUg
bmFtZXNwYWNlIG9mIEMKLSAgICAgICAgLy8KLSAgICAgICAgcmV0dXJuIGMuYmVnaW4oKTsKLSAg
ICB9Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gcGFpcgotICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LQotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJdGVyYXRvciA+Ci0gICAgaW5saW5lIEl0ZXJhdG9y
IHJhbmdlX2JlZ2luKCBjb25zdCBzdGQ6OnBhaXI8SXRlcmF0b3IsSXRlcmF0b3I+JiBwICkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBwLmZpcnN0OwotICAgIH0KLQotICAgIHRlbXBsYXRlPCB0eXBl
bmFtZSBJdGVyYXRvciA+Ci0gICAgaW5saW5lIEl0ZXJhdG9yIHJhbmdlX2JlZ2luKCBzdGQ6OnBh
aXI8SXRlcmF0b3IsSXRlcmF0b3I+JiBwICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwLmZpcnN0
OwotICAgIH0KLQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBhcnJheQotICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLQotICAgIC8vCi0gICAgLy8gTWF5IHRoaXMgYmUgZGlzY2FyZGVkPyBPciBpcyBpdCBu
ZWVkZWQgZm9yIGJhZCBjb21waWxlcnM/Ci0gICAgLy8KLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUg
VCwgc3RkOjpzaXplX3Qgc3ogPgotICAgIGlubGluZSBjb25zdCBUKiByYW5nZV9iZWdpbiggY29u
c3QgVCAoJmEpW3N6XSApCi0gICAgewotICAgICAgICByZXR1cm4gYTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpzaXplX3Qgc3ogPgotICAgIGlubGluZSBUKiByYW5n
ZV9iZWdpbiggVCAoJmEpW3N6XSApCi0gICAgewotICAgICAgICByZXR1cm4gYTsKLSAgICB9Ci0K
LQotI2lmICFCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENfXywgQk9PU1RfVEVTVEVEX0FUKDB4
NTY0KSkKLX0gLy8gbmFtZXNwYWNlICdyYW5nZV9kZXRhaWwnCi0jZW5kaWYKLQotLy8gVXNlIGEg
QURMIG5hbWVzcGFjZSBiYXJyaWVyIHRvIGF2b2lkIGFtYmlndWl0eSB3aXRoIG90aGVyIHVucXVh
bGlmaWVkCi0vLyBjYWxscy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdpdGggQysr
MHggZW5jb3VyYWdpbmcKLS8vIHVucXVhbGlmaWVkIGNhbGxzIHRvIGJlZ2luL2VuZC4KLW5hbWVz
cGFjZSByYW5nZV9hZGxfYmFycmllcgotewotCi10ZW1wbGF0ZTwgY2xhc3MgVCA+Ci1pbmxpbmUg
Qk9PU1RfREVEVUNFRF9UWVBFTkFNRSByYW5nZV9pdGVyYXRvcjxUPjo6dHlwZSBiZWdpbiggVCYg
ciApCi17Ci0jaWYgIUJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCBCT09TVF9URVNURURf
QVQoMHg1NjQpKQotICAgIHVzaW5nIG5hbWVzcGFjZSByYW5nZV9kZXRhaWw7Ci0jZW5kaWYKLSAg
ICByZXR1cm4gcmFuZ2VfYmVnaW4oIHIgKTsKLX0KLQotdGVtcGxhdGU8IGNsYXNzIFQgPgotaW5s
aW5lIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgcmFuZ2VfaXRlcmF0b3I8Y29uc3QgVD46OnR5cGUg
YmVnaW4oIGNvbnN0IFQmIHIgKQotewotI2lmICFCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENf
XywgQk9PU1RfVEVTVEVEX0FUKDB4NTY0KSkKLSAgICB1c2luZyBuYW1lc3BhY2UgcmFuZ2VfZGV0
YWlsOwotI2VuZGlmCi0gICAgcmV0dXJuIHJhbmdlX2JlZ2luKCByICk7Ci19Ci0KLSAgICB9IC8v
IG5hbWVzcGFjZSByYW5nZV9hZGxfYmFycmllcgotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2Vu
ZGlmIC8vIEJPT1NUX05PX0ZVTkNUSU9OX1RFTVBMQVRFX09SREVSSU5HCi0KLW5hbWVzcGFjZSBi
b29zdAotewotICAgIG5hbWVzcGFjZSByYW5nZV9hZGxfYmFycmllcgotICAgIHsKLSAgICAgICAg
dGVtcGxhdGU8IGNsYXNzIFQgPgotICAgICAgICBpbmxpbmUgQk9PU1RfREVEVUNFRF9UWVBFTkFN
RSByYW5nZV9pdGVyYXRvcjxjb25zdCBUPjo6dHlwZQotICAgICAgICBjb25zdF9iZWdpbiggY29u
c3QgVCYgciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBib29zdDo6cmFuZ2VfYWRs
X2JhcnJpZXI6OmJlZ2luKCByICk7Ci0gICAgICAgIH0KLSAgICB9IC8vIG5hbWVzcGFjZSByYW5n
ZV9hZGxfYmFycmllcgotCi0gICAgdXNpbmcgbmFtZXNwYWNlIHJhbmdlX2FkbF9iYXJyaWVyOwot
fSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmdlL2NvbmNlcHRzLmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmdlL2NvbmNlcHRzLmhwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U2MTJhMzVmOWViM2Y2NGE0NTBhN2Q4MTIx
MjQyMzJiZmE1Y2E4OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS9jb25j
ZXB0cy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzODYgKzAsMCBAQAotLy8gQm9vc3QuUmFuZ2Ug
bGlicmFyeSBjb25jZXB0IGNoZWNrcwotLy8KLS8vICBDb3B5cmlnaHQgTmVpbCBHcm92ZXMgMjAw
OS4gVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbgotLy8gIGFyZSBzdWJqZWN0IHRv
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotLy8gIGFjY29t
cGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vICBDb3B5cmlnaHQgRGFuaWVsIFdhbGtl
ciAyMDA2LiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uCi0vLyAgYXJlIHN1Ympl
Y3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0vLyAg
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gRm9yIG1vcmUgaW5mb3JtYXRp
b24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3JhbmdlLwotLy8KLQotI2lmbmRlZiBC
T09TVF9SQU5HRV9DT05DRVBUU19IUFAKLSNkZWZpbmUgQk9PU1RfUkFOR0VfQ09OQ0VQVFNfSFBQ
Ci0KLSNpbmNsdWRlIDxib29zdC9jb25jZXB0X2NoZWNrLmhwcD4KLSNpbmNsdWRlIDxib29zdC9p
dGVyYXRvci9pdGVyYXRvcl9jb25jZXB0cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZ2UvYmVn
aW4uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL2VuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
cmFuZ2UvaXRlcmF0b3IuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL3ZhbHVlX3R5cGUuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL2RldGFpbC9taXNjX2NvbmNlcHQuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9yZWZlcmVuY2UuaHBwPgotCi0vKiEKLSAqIFxm
aWxlCi0gKiBcYnJpZWYgQ29uY2VwdCBjaGVja3MgZm9yIHRoZSBCb29zdCBSYW5nZSBsaWJyYXJ5
LgotICoKLSAqIFRoZSBzdHJ1Y3R1cmVzIGluIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCBpbiBjb25q
dW5jdGlvbiB3aXRoIHRoZQotICogQm9vc3QgQ29uY2VwdCBDaGVjayBsaWJyYXJ5IHRvIGluc3Vy
ZSB0aGF0IHRoZSB0eXBlIG9mIGEgZnVuY3Rpb24KLSAqIHBhcmFtZXRlciBpcyBjb21wYXRpYmxl
IHdpdGggYSByYW5nZSBjb25jZXB0LiBJZiBub3QsIGEgbWVhbmluZ2Z1bAotICogY29tcGlsZSB0
aW1lIGVycm9yIGlzIGdlbmVyYXRlZC4gQ2hlY2tzIGFyZSBwcm92aWRlZCBmb3IgdGhlIHJhbmdl
Ci0gKiBjb25jZXB0cyByZWxhdGVkIHRvIGl0ZXJhdG9yIHRyYXZlcnNhbCBjYXRlZ29yaWVzLiBG
b3IgZXhhbXBsZSwgdGhlCi0gKiBmb2xsb3dpbmcgbGluZSBjaGVja3MgdGhhdCB0aGUgdHlwZSBU
IG1vZGVscyB0aGUgRm9yd2FyZFJhbmdlCi0gKiBjb25jZXB0LgotICoKLSAqIFxjb2RlCi0gKiBC
T09TVF9DT05DRVBUX0FTU0VSVCgoRm9yd2FyZFJhbmdlQ29uY2VwdDxUPikpOwotICogXGVuZGNv
ZGUKLSAqCi0gKiBBIGRpZmZlcmVudCBjb25jZXB0IGNoZWNrIGlzIHJlcXVpcmVkIHRvIGVuc3Vy
ZSB3cml0ZWFibGUgdmFsdWUKLSAqIGFjY2Vzcy4gRm9yIGV4YW1wbGUgdG8gY2hlY2sgZm9yIGEg
Rm9yd2FyZFJhbmdlIHRoYXQgY2FuIGJlIHdyaXR0ZW4KLSAqIHRvLCB0aGUgZm9sbG93aW5nIGNv
ZGUgaXMgcmVxdWlyZWQuCi0gKgotICogXGNvZGUKLSAqIEJPT1NUX0NPTkNFUFRfQVNTRVJUKChX
cml0ZWFibGVGb3J3YXJkUmFuZ2VDb25jZXB0PFQ+KSk7Ci0gKiBcZW5kY29kZQotICoKLSAqIFxz
ZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9yYW5nZS9kb2MvcmFuZ2UuaHRtbCBmb3IgZGV0
YWlscwotICogYWJvdXQgcmFuZ2UgY29uY2VwdHMuCi0gKiBcc2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL2xpYnMvaXRlcmF0b3IvZG9jL2l0ZXJhdG9yX2NvbmNlcHRzLmh0bWwKLSAqIGZvciBkZXRh
aWxzIGFib3V0IGl0ZXJhdG9yIGNvbmNlcHRzLgotICogXHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9saWJzL2NvbmNlcHRfY2hlY2svY29uY2VwdF9jaGVjay5odG0gZm9yCi0gKiBkZXRhaWxzIGFi
b3V0IGNvbmNlcHQgY2hlY2tzLgotICovCi0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLSAgICBuYW1l
c3BhY2UgcmFuZ2VfZGV0YWlsIHsKLQotI2lmbmRlZiBCT09TVF9SQU5HRV9FTkFCTEVfQ09OQ0VQ
VF9BU1NFUlQKLQotLy8gTGlzdCBicm9rZW4gY29tcGlsZXIgdmVyc2lvbnMgaGVyZToKLSNpZm5k
ZWYgX19jbGFuZ19fCi0gICAgI2lmZGVmIF9fR05VQ19fCi0gICAgICAgIC8vIEdOVUMgNC4yIGhh
cyBzdHJhbmdlIGlzc3VlcyBjb3JyZWN0bHkgZGV0ZWN0aW5nIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
Q29uY2VwdHMKLSAgICAgICAgLy8gaGVuY2UgdGhlIGxlYXN0IGRpc3J1cHRpdmUgYXBwcm9hY2gg
aXMgdG8gdHVybi1vZmYgdGhlIGNvbmNlcHQgY2hlY2tpbmcgZm9yCi0gICAgICAgIC8vIHRoaXMg
dmVyc2lvbiBvZiB0aGUgY29tcGlsZXIuCi0gICAgICAgICNpZiBfX0dOVUNfXyA9PSA0ICYmIF9f
R05VQ19NSU5PUl9fID09IDIKLSAgICAgICAgICAgICNkZWZpbmUgQk9PU1RfUkFOR0VfRU5BQkxF
X0NPTkNFUFRfQVNTRVJUIDAKLSAgICAgICAgI2VuZGlmCi0gICAgI2VuZGlmCi0KLSAgICAjaWZk
ZWYgX19HQ0NYTUxfXwotICAgICAgICAvLyBHQ0MgWE1MLCB1bnN1cnByaXNpbmdseSwgaGFzIHRo
ZSBzYW1lIGlzc3VlcwotICAgICAgICAjaWYgX19HQ0NYTUxfR05VQ19fID09IDQgJiYgX19HQ0NY
TUxfR05VQ19NSU5PUl9fID09IDIKLSAgICAgICAgICAgICNkZWZpbmUgQk9PU1RfUkFOR0VfRU5B
QkxFX0NPTkNFUFRfQVNTRVJUIDAKLSAgICAgICAgI2VuZGlmCi0gICAgI2VuZGlmCi0jZW5kaWYK
LQotICAgICNpZmRlZiBfX0JPUkxBTkRDX18KLSAgICAgICAgI2RlZmluZSBCT09TVF9SQU5HRV9F
TkFCTEVfQ09OQ0VQVF9BU1NFUlQgMAotICAgICNlbmRpZgotCi0gICAgI2lmZGVmIF9fUEFUSEND
X18KLSAgICAgICAgI2RlZmluZSBCT09TVF9SQU5HRV9FTkFCTEVfQ09OQ0VQVF9BU1NFUlQgMAot
ICAgICNlbmRpZgotCi0vLyBEZWZhdWx0IHRvIHVzaW5nIHRoZSBjb25jZXB0IGFzc2VydHMgdW5s
ZXNzIHdlIGhhdmUgZGVmaW5lZCBpdCBvZmYKLS8vIGR1cmluZyB0aGUgc2VhcmNoIGZvciBibGFj
ayBsaXN0ZWQgY29tcGlsZXJzLgotICAgICNpZm5kZWYgQk9PU1RfUkFOR0VfRU5BQkxFX0NPTkNF
UFRfQVNTRVJUCi0gICAgICAgICNkZWZpbmUgQk9PU1RfUkFOR0VfRU5BQkxFX0NPTkNFUFRfQVNT
RVJUIDEKLSAgICAjZW5kaWYKLQotI2VuZGlmCi0KLSNpZiBCT09TVF9SQU5HRV9FTkFCTEVfQ09O
Q0VQVF9BU1NFUlQKLSAgICAjZGVmaW5lIEJPT1NUX1JBTkdFX0NPTkNFUFRfQVNTRVJUKCB4ICkg
Qk9PU1RfQ09OQ0VQVF9BU1NFUlQoIHggKQotI2Vsc2UKLSAgICAjZGVmaW5lIEJPT1NUX1JBTkdF
X0NPTkNFUFRfQVNTRVJUKCB4ICkKLSNlbmRpZgotCi0gICAgICAgIC8vIFJhdGlvbmFsZSBmb3Ig
dGhlIGluY2x1c2lvbiBvZiByZWRlZmluZWQgaXRlcmF0b3IgY29uY2VwdAotICAgICAgICAvLyBj
bGFzc2VzOgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgUmFuZ2UgYWxnb3JpdGhtcyBvZnRl
biBkbyBub3QgcmVxdWlyZSB0aGF0IHRoZSBpdGVyYXRvcnMgYXJlCi0gICAgICAgIC8vIEFzc2ln
bmFibGUgb3IgZGVmYXVsdCBjb25zdHJ1Y3RhYmxlLCBidXQgdGhlIGNvcnJlY3Qgc3RhbmRhcmQK
LSAgICAgICAgLy8gY29uZm9ybWFudCBpdGVyYXRvcnMgZG8gcmVxdWlyZSB0aGUgaXRlcmF0b3Jz
IHRvIGJlIGEgbW9kZWwgb2YgdGhlCi0gICAgICAgIC8vIEFzc2lnbmFibGUgY29uY2VwdC4KLSAg
ICAgICAgLy8gSXRlcmF0b3JzIHRoYXQgY29udGFpbnMgYSBmdW5jdG9yIHRoYXQgaXMgbm90IGFz
c2lnbmFibGUgdGhlcmVmb3JlCi0gICAgICAgIC8vIGFyZSBub3QgY29ycmVjdCBtb2RlbHMgb2Yg
dGhlIHN0YW5kYXJkIGl0ZXJhdG9yIGNvbmNlcHRzLAotICAgICAgICAvLyBkZXNwaXRlIGJlaW5n
IGFkZXF1YXRlIGZvciBtb3N0IGFsZ29yaXRobXMuIEFuIGV4YW1wbGUgb2YgdGhpcwotICAgICAg
ICAvLyB1c2UgY2FzZSBpcyB0aGUgY29tYmluYXRpb24gb2YgdGhlIGJvb3N0OjphZGFwdG9yczo6
ZmlsdGVyZWQKLSAgICAgICAgLy8gY2xhc3Mgd2l0aCBhIGJvb3N0OjpsYW1iZGE6OmJpbmQgZ2Vu
ZXJhdGVkIGZ1bmN0b3IuCi0gICAgICAgIC8vIFVsdGltYXRlbHkgbW9kZWxpbmcgdGhlIHJhbmdl
IGNvbmNlcHRzIHVzaW5nIGNvbXBvc2l0aW9uCi0gICAgICAgIC8vIHdpdGggdGhlIEJvb3N0Lkl0
ZXJhdG9yIGNvbmNlcHRzIHdvdWxkIHJlbmRlciB0aGUgbGlicmFyeQotICAgICAgICAvLyBpbmNv
bXBhdGlibGUgd2l0aCBtYW55IGNvbW1vbiBCb29zdC5MYW1iZGEgZXhwcmVzc2lvbnMuCi0gICAg
ICAgIHRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPgotICAgICAgICBzdHJ1Y3QgSW5jcmVtZW50YWJs
ZUl0ZXJhdG9yQ29uY2VwdCA6IENvcHlDb25zdHJ1Y3RpYmxlPEl0ZXJhdG9yPgotICAgICAgICB7
Ci0jaWYgQk9PU1RfUkFOR0VfRU5BQkxFX0NPTkNFUFRfQVNTRVJUCi0gICAgICAgICAgICB0eXBl
ZGVmIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgaXRlcmF0b3JfdHJhdmVyc2FsPEl0ZXJhdG9yPjo6
dHlwZSB0cmF2ZXJzYWxfY2F0ZWdvcnk7Ci0KLSAgICAgICAgICAgIEJPT1NUX1JBTkdFX0NPTkNF
UFRfQVNTRVJUKCgKLSAgICAgICAgICAgICAgICBDb252ZXJ0aWJsZTwKLSAgICAgICAgICAgICAg
ICAgICAgdHJhdmVyc2FsX2NhdGVnb3J5LAotICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRh
YmxlX3RyYXZlcnNhbF90YWcKLSAgICAgICAgICAgICAgICA+KSk7Ci0KLSAgICAgICAgICAgIEJP
T1NUX0NPTkNFUFRfVVNBR0UoSW5jcmVtZW50YWJsZUl0ZXJhdG9yQ29uY2VwdCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICArK2k7Ci0gICAgICAgICAgICAgICAgKHZvaWQpaSsrOwot
ICAgICAgICAgICAgfQotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgSXRlcmF0b3IgaTsK
LSNlbmRpZgotICAgICAgICB9OwotCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPgot
ICAgICAgICBzdHJ1Y3QgU2luZ2xlUGFzc0l0ZXJhdG9yQ29uY2VwdAotICAgICAgICAgICAgOiBJ
bmNyZW1lbnRhYmxlSXRlcmF0b3JDb25jZXB0PEl0ZXJhdG9yPgotICAgICAgICAgICAgLCBFcXVh
bGl0eUNvbXBhcmFibGU8SXRlcmF0b3I+Ci0gICAgICAgIHsKLSNpZiBCT09TVF9SQU5HRV9FTkFC
TEVfQ09OQ0VQVF9BU1NFUlQKLSAgICAgICAgICAgIEJPT1NUX1JBTkdFX0NPTkNFUFRfQVNTRVJU
KCgKLSAgICAgICAgICAgICAgICBDb252ZXJ0aWJsZTwKLSAgICAgICAgICAgICAgICAgICAgQk9P
U1RfREVEVUNFRF9UWVBFTkFNRSBTaW5nbGVQYXNzSXRlcmF0b3JDb25jZXB0Ojp0cmF2ZXJzYWxf
Y2F0ZWdvcnksCi0gICAgICAgICAgICAgICAgICAgIHNpbmdsZV9wYXNzX3RyYXZlcnNhbF90YWcK
LSAgICAgICAgICAgICAgICA+KSk7Ci0KLSAgICAgICAgICAgIEJPT1NUX0NPTkNFUFRfVVNBR0Uo
U2luZ2xlUGFzc0l0ZXJhdG9yQ29uY2VwdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBJdGVyYXRvciBpMigrK2kpOwotICAgICAgICAgICAgICAgIGJvb3N0OjppZ25vcmVfdW51c2Vk
X3ZhcmlhYmxlX3dhcm5pbmcoaTIpOwotCi0gICAgICAgICAgICAgICAgLy8gZGVsaWJlcmF0ZWx5
IHdlIGFyZSBsb29zZSB3aXRoIHRoZSBwb3N0Zml4IHZlcnNpb24gZm9yIHRoZSBzaW5nbGUgcGFz
cwotICAgICAgICAgICAgICAgIC8vIGl0ZXJhdG9yIGR1ZSB0byB0aGUgY29tbW9ubHkgcG9vciBh
ZGhlcmVuY2UgdG8gdGhlIHNwZWNpZmljYXRpb24gbWVhbnMgdGhhdAotICAgICAgICAgICAgICAg
IC8vIG1hbnkgYWxnb3JpdGhtcyB3b3VsZCBiZSB1bnVzYWJsZSwgd2hlcmVhcyBhY3R1YWxseSB3
aXRob3V0IHRoZSBjaGVjayB0aGV5Ci0gICAgICAgICAgICAgICAgLy8gd29yawotICAgICAgICAg
ICAgICAgICh2b2lkKShpKyspOwotCi0gICAgICAgICAgICAgICAgQk9PU1RfREVEVUNFRF9UWVBF
TkFNRSBib29zdDo6ZGV0YWlsOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+OjpyZWZlcmVuY2Ug
cjEoKmkpOwotICAgICAgICAgICAgICAgIGJvb3N0OjppZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dh
cm5pbmcocjEpOwotCi0gICAgICAgICAgICAgICAgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSBib29z
dDo6ZGV0YWlsOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+OjpyZWZlcmVuY2UgcjIoKigrK2kp
KTsKLSAgICAgICAgICAgICAgICBib29zdDo6aWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5n
KHIyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIEl0ZXJh
dG9yIGk7Ci0jZW5kaWYKLSAgICAgICAgfTsKLQotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBJdGVy
YXRvcj4KLSAgICAgICAgc3RydWN0IEZvcndhcmRJdGVyYXRvckNvbmNlcHQKLSAgICAgICAgICAg
IDogU2luZ2xlUGFzc0l0ZXJhdG9yQ29uY2VwdDxJdGVyYXRvcj4KLSAgICAgICAgICAgICwgRGVm
YXVsdENvbnN0cnVjdGlibGU8SXRlcmF0b3I+Ci0gICAgICAgIHsKLSNpZiBCT09TVF9SQU5HRV9F
TkFCTEVfQ09OQ0VQVF9BU1NFUlQKLSAgICAgICAgICAgIHR5cGVkZWYgQk9PU1RfREVEVUNFRF9U
WVBFTkFNRSBib29zdDo6ZGV0YWlsOjppdGVyYXRvcl90cmFpdHM8SXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwotCi0gICAgICAgICAgICBCT09TVF9NUExfQVNTRVJU
KChpc19pbnRlZ3JhbDxkaWZmZXJlbmNlX3R5cGU+KSk7Ci0gICAgICAgICAgICBCT09TVF9NUExf
QVNTRVJUX1JFTEFUSU9OKHN0ZDo6bnVtZXJpY19saW1pdHM8ZGlmZmVyZW5jZV90eXBlPjo6aXNf
c2lnbmVkLCA9PSwgdHJ1ZSk7Ci0KLSAgICAgICAgICAgIEJPT1NUX1JBTkdFX0NPTkNFUFRfQVNT
RVJUKCgKLSAgICAgICAgICAgICAgICBDb252ZXJ0aWJsZTwKLSAgICAgICAgICAgICAgICAgICAg
Qk9PU1RfREVEVUNFRF9UWVBFTkFNRSBGb3J3YXJkSXRlcmF0b3JDb25jZXB0Ojp0cmF2ZXJzYWxf
Y2F0ZWdvcnksCi0gICAgICAgICAgICAgICAgICAgIGZvcndhcmRfdHJhdmVyc2FsX3RhZwotICAg
ICAgICAgICAgICAgID4pKTsKLQotICAgICAgICAgICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShGb3J3
YXJkSXRlcmF0b3JDb25jZXB0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFNl
ZSB0aGUgYWJvdmUgbm90ZSBpbiB0aGUgU2luZ2xlUGFzc0l0ZXJhdG9yQ29uY2VwdCBhYm91dCB0
aGUgaGFuZGxpbmcgb2YgdGhlCi0gICAgICAgICAgICAgICAgLy8gcG9zdGZpeCBpbmNyZW1lbnQu
IFNpbmNlIHdpdGggZm9yd2FyZCBhbmQgYmV0dGVyIGl0ZXJhdG9ycyB0aGVyZSBpcyBubyBuZWVk
Ci0gICAgICAgICAgICAgICAgLy8gZm9yIGEgcHJveHksIHdlIGNhbiBzZW5zaWJseSByZXF1aXJl
IHRoYXQgdGhlIGRlcmVmZXJlbmNlIHJlc3VsdAotICAgICAgICAgICAgICAgIC8vIGlzIGNvbnZl
cnRpYmxlIHRvIHJlZmVyZW5jZS4KLSAgICAgICAgICAgICAgICBJdGVyYXRvciBpMihpKyspOwot
ICAgICAgICAgICAgICAgIGJvb3N0OjppZ25vcmVfdW51c2VkX3ZhcmlhYmxlX3dhcm5pbmcoaTIp
OwotICAgICAgICAgICAgICAgIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgYm9vc3Q6OmRldGFpbDo6
aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6cmVmZXJlbmNlIHIoKihpKyspKTsKLSAgICAgICAg
ICAgICAgICBib29zdDo6aWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKHIpOwotICAgICAg
ICAgICAgfQotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgSXRlcmF0b3IgaTsKLSNlbmRp
ZgotICAgICAgICAgfTsKLQotICAgICAgICAgdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+Ci0gICAg
ICAgICBzdHJ1Y3QgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdAotICAgICAgICAgICAgIDog
Rm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxJdGVyYXRvcj4KLSAgICAgICAgIHsKLSAjaWYgQk9PU1Rf
UkFOR0VfRU5BQkxFX0NPTkNFUFRfQVNTRVJUCi0gICAgICAgICAgICAgQk9PU1RfUkFOR0VfQ09O
Q0VQVF9BU1NFUlQoKAotICAgICAgICAgICAgICAgICBDb252ZXJ0aWJsZTwKLSAgICAgICAgICAg
ICAgICAgICAgIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29u
Y2VwdDo6dHJhdmVyc2FsX2NhdGVnb3J5LAotICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rp
b25hbF90cmF2ZXJzYWxfdGFnCi0gICAgICAgICAgICAgICAgID4pKTsKLQotICAgICAgICAgICAg
IEJPT1NUX0NPTkNFUFRfVVNBR0UoQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdCkKLSAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIC0taTsKLSAgICAgICAgICAgICAgICAgKHZvaWQp
aS0tOwotICAgICAgICAgICAgIH0KLSAgICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICAgSXRl
cmF0b3IgaTsKLSAjZW5kaWYKLSAgICAgICAgIH07Ci0KLSAgICAgICAgIHRlbXBsYXRlPGNsYXNz
IEl0ZXJhdG9yPgotICAgICAgICAgc3RydWN0IFJhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdAot
ICAgICAgICAgICAgIDogQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxJdGVyYXRvcj4KLSAg
ICAgICAgIHsKLSAjaWYgQk9PU1RfUkFOR0VfRU5BQkxFX0NPTkNFUFRfQVNTRVJUCi0gICAgICAg
ICAgICAgQk9PU1RfUkFOR0VfQ09OQ0VQVF9BU1NFUlQoKAotICAgICAgICAgICAgICAgICBDb252
ZXJ0aWJsZTwKLSAgICAgICAgICAgICAgICAgICAgIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgUmFu
ZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0Ojp0cmF2ZXJzYWxfY2F0ZWdvcnksCi0gICAgICAgICAg
ICAgICAgICAgICByYW5kb21fYWNjZXNzX3RyYXZlcnNhbF90YWcKLSAgICAgICAgICAgICAgICAg
PikpOwotCi0gICAgICAgICAgICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShSYW5kb21BY2Nlc3NJdGVy
YXRvckNvbmNlcHQpCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICBpICs9IG47Ci0g
ICAgICAgICAgICAgICAgIGkgPSBpICsgbjsKLSAgICAgICAgICAgICAgICAgaSA9IG4gKyBpOwot
ICAgICAgICAgICAgICAgICBpIC09IG47Ci0gICAgICAgICAgICAgICAgIGkgPSBpIC0gbjsKLSAg
ICAgICAgICAgICAgICAgbiA9IGkgLSBqOwotICAgICAgICAgICAgIH0KLSAgICAgICAgIHByaXZh
dGU6Ci0gICAgICAgICAgICAgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSBSYW5kb21BY2Nlc3NJdGVy
YXRvckNvbmNlcHQ6OmRpZmZlcmVuY2VfdHlwZSBuOwotICAgICAgICAgICAgIEl0ZXJhdG9yIGk7
Ci0gICAgICAgICAgICAgSXRlcmF0b3IgajsKLSAjZW5kaWYKLSAgICAgICAgIH07Ci0KLSAgICB9
IC8vIG5hbWVzcGFjZSByYW5nZV9kZXRhaWwKLQotICAgIC8vISBDaGVjayBpZiBhIHR5cGUgVCBt
b2RlbHMgdGhlIFNpbmdsZVBhc3NSYW5nZSByYW5nZSBjb25jZXB0LgotICAgIHRlbXBsYXRlPGNs
YXNzIFQ+Ci0gICAgc3RydWN0IFNpbmdsZVBhc3NSYW5nZUNvbmNlcHQKLSAgICB7Ci0jaWYgQk9P
U1RfUkFOR0VfRU5BQkxFX0NPTkNFUFRfQVNTRVJUCi0gICAgICAgIC8vIEEgZmV3IGNvbXBpbGVy
cyBkb24ndCBsaWtlIHRoZSBydmFsdWUgcmVmZXJlbmNlIFQgdHlwZXMgc28ganVzdAotICAgICAg
ICAvLyByZW1vdmUgaXQuCi0gICAgICAgIHR5cGVkZWYgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSBy
ZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlIFJuZzsKLQotICAgICAgICB0eXBlZGVmIEJPT1NUX0RF
RFVDRURfVFlQRU5BTUUgcmFuZ2VfaXRlcmF0b3I8Ci0gICAgICAgICAgICBSbmcgY29uc3QKLSAg
ICAgICAgPjo6dHlwZSBjb25zdF9pdGVyYXRvcjsKLQotICAgICAgICB0eXBlZGVmIEJPT1NUX0RF
RFVDRURfVFlQRU5BTUUgcmFuZ2VfaXRlcmF0b3I8Um5nPjo6dHlwZSBpdGVyYXRvcjsKLQotICAg
ICAgICBCT09TVF9SQU5HRV9DT05DRVBUX0FTU0VSVCgoCi0gICAgICAgICAgICAgICAgcmFuZ2Vf
ZGV0YWlsOjpTaW5nbGVQYXNzSXRlcmF0b3JDb25jZXB0PGl0ZXJhdG9yPikpOwotCi0gICAgICAg
IEJPT1NUX1JBTkdFX0NPTkNFUFRfQVNTRVJUKCgKLSAgICAgICAgICAgICAgICByYW5nZV9kZXRh
aWw6OlNpbmdsZVBhc3NJdGVyYXRvckNvbmNlcHQ8Y29uc3RfaXRlcmF0b3I+KSk7Ci0KLSAgICAg
ICAgQk9PU1RfQ09OQ0VQVF9VU0FHRShTaW5nbGVQYXNzUmFuZ2VDb25jZXB0KQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBUaGlzIGhhcyBiZWVuIG1vZGlmaWVkIGZyb20gYXNzaWduaW5nIHRv
IHRoaXMtPmkKLSAgICAgICAgICAgIC8vICh3aGVyZSBpIHdhcyBhIG1lbWJlciB2YXJpYWJsZSkg
dG8gaW1wcm92ZQotICAgICAgICAgICAgLy8gY29tcGF0aWJpbGl0eSB3aXRoIEJvb3N0LkxhbWJk
YQotICAgICAgICAgICAgaXRlcmF0b3IgaTEgPSBib29zdDo6YmVnaW4oKm1fcmFuZ2UpOwotICAg
ICAgICAgICAgaXRlcmF0b3IgaTIgPSBib29zdDo6ZW5kKCptX3JhbmdlKTsKLQotICAgICAgICAg
ICAgYm9vc3Q6Omlnbm9yZV91bnVzZWRfdmFyaWFibGVfd2FybmluZyhpMSk7Ci0gICAgICAgICAg
ICBib29zdDo6aWdub3JlX3VudXNlZF92YXJpYWJsZV93YXJuaW5nKGkyKTsKLQotICAgICAgICAg
ICAgY29uc3RfY29uc3RyYWludHMoKm1fcmFuZ2UpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICB2b2lkIGNvbnN0X2NvbnN0cmFpbnRzKGNvbnN0IFJuZyYgY29uc3RfcmFuZ2Up
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGNpMSA9IGJvb3N0OjpiZWdp
bihjb25zdF9yYW5nZSk7Ci0gICAgICAgICAgICBjb25zdF9pdGVyYXRvciBjaTIgPSBib29zdDo6
ZW5kKGNvbnN0X3JhbmdlKTsKLQotICAgICAgICAgICAgYm9vc3Q6Omlnbm9yZV91bnVzZWRfdmFy
aWFibGVfd2FybmluZyhjaTEpOwotICAgICAgICAgICAgYm9vc3Q6Omlnbm9yZV91bnVzZWRfdmFy
aWFibGVfd2FybmluZyhjaTIpOwotICAgICAgICB9Ci0KLSAgICAgICAvLyBSYXRpb25hbGU6Ci0g
ICAgICAgLy8gVGhlIHR5cGUgb2YgbV9yYW5nZSBpcyBUKiByYXRoZXIgdGhhbiBUIGJlY2F1c2Ug
aXQgYWxsb3dzCi0gICAgICAgLy8gVCB0byBiZSBhbiBhYnN0cmFjdCBjbGFzcy4gVGhlIG90aGVy
IG9idmlvdXMgYWx0ZXJuYXRpdmUgb2YKLSAgICAgICAvLyBUJiBwcm9kdWNlcyBhIHdhcm5pbmcg
b24gc29tZSBjb21waWxlcnMuCi0gICAgICAgUm5nKiBtX3JhbmdlOwotI2VuZGlmCi0gICAgfTsK
LQotICAgIC8vISBDaGVjayBpZiBhIHR5cGUgVCBtb2RlbHMgdGhlIEZvcndhcmRSYW5nZSByYW5n
ZSBjb25jZXB0LgotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgc3RydWN0IEZvcndhcmRSYW5n
ZUNvbmNlcHQgOiBTaW5nbGVQYXNzUmFuZ2VDb25jZXB0PFQ+Ci0gICAgewotI2lmIEJPT1NUX1JB
TkdFX0VOQUJMRV9DT05DRVBUX0FTU0VSVAotICAgICAgICBCT09TVF9SQU5HRV9DT05DRVBUX0FT
U0VSVCgocmFuZ2VfZGV0YWlsOjpGb3J3YXJkSXRlcmF0b3JDb25jZXB0PEJPT1NUX0RFRFVDRURf
VFlQRU5BTUUgRm9yd2FyZFJhbmdlQ29uY2VwdDo6aXRlcmF0b3I+KSk7Ci0gICAgICAgIEJPT1NU
X1JBTkdFX0NPTkNFUFRfQVNTRVJUKChyYW5nZV9kZXRhaWw6OkZvcndhcmRJdGVyYXRvckNvbmNl
cHQ8Qk9PU1RfREVEVUNFRF9UWVBFTkFNRSBGb3J3YXJkUmFuZ2VDb25jZXB0Ojpjb25zdF9pdGVy
YXRvcj4pKTsKLSNlbmRpZgotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIHN0
cnVjdCBXcml0ZWFibGVSYW5nZUNvbmNlcHQKLSAgICB7Ci0jaWYgQk9PU1RfUkFOR0VfRU5BQkxF
X0NPTkNFUFRfQVNTRVJUCi0gICAgICAgIHR5cGVkZWYgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSBy
YW5nZV9pdGVyYXRvcjxUPjo6dHlwZSBpdGVyYXRvcjsKLQotICAgICAgICBCT09TVF9DT05DRVBU
X1VTQUdFKFdyaXRlYWJsZVJhbmdlQ29uY2VwdCkKLSAgICAgICAgewotICAgICAgICAgICAgKmkg
PSB2OwotICAgICAgICB9Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgaXRlcmF0b3IgaTsKLSAgICAg
ICAgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSByYW5nZV92YWx1ZTxUPjo6dHlwZSB2OwotI2VuZGlm
Ci0gICAgfTsKLQotICAgIC8vISBDaGVjayBpZiBhIHR5cGUgVCBtb2RlbHMgdGhlIFdyaXRlYWJs
ZUZvcndhcmRSYW5nZSByYW5nZSBjb25jZXB0LgotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAg
c3RydWN0IFdyaXRlYWJsZUZvcndhcmRSYW5nZUNvbmNlcHQKLSAgICAgICAgOiBGb3J3YXJkUmFu
Z2VDb25jZXB0PFQ+Ci0gICAgICAgICwgV3JpdGVhYmxlUmFuZ2VDb25jZXB0PFQ+Ci0gICAgewot
ICAgIH07Ci0KLSAgICAvLyEgQ2hlY2sgaWYgYSB0eXBlIFQgbW9kZWxzIHRoZSBCaWRpcmVjdGlv
bmFsUmFuZ2UgcmFuZ2UgY29uY2VwdC4KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIHN0cnVj
dCBCaWRpcmVjdGlvbmFsUmFuZ2VDb25jZXB0IDogRm9yd2FyZFJhbmdlQ29uY2VwdDxUPgotICAg
IHsKLSNpZiBCT09TVF9SQU5HRV9FTkFCTEVfQ09OQ0VQVF9BU1NFUlQKLSAgICAgICAgQk9PU1Rf
UkFOR0VfQ09OQ0VQVF9BU1NFUlQoKHJhbmdlX2RldGFpbDo6QmlkaXJlY3Rpb25hbEl0ZXJhdG9y
Q29uY2VwdDxCT09TVF9ERURVQ0VEX1RZUEVOQU1FIEJpZGlyZWN0aW9uYWxSYW5nZUNvbmNlcHQ6
Oml0ZXJhdG9yPikpOwotICAgICAgICBCT09TVF9SQU5HRV9DT05DRVBUX0FTU0VSVCgocmFuZ2Vf
ZGV0YWlsOjpCaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PEJPT1NUX0RFRFVDRURfVFlQRU5B
TUUgQmlkaXJlY3Rpb25hbFJhbmdlQ29uY2VwdDo6Y29uc3RfaXRlcmF0b3I+KSk7Ci0jZW5kaWYK
LSAgICB9OwotCi0gICAgLy8hIENoZWNrIGlmIGEgdHlwZSBUIG1vZGVscyB0aGUgV3JpdGVhYmxl
QmlkaXJlY3Rpb25hbFJhbmdlIHJhbmdlIGNvbmNlcHQuCi0gICAgdGVtcGxhdGU8Y2xhc3MgVD4K
LSAgICBzdHJ1Y3QgV3JpdGVhYmxlQmlkaXJlY3Rpb25hbFJhbmdlQ29uY2VwdAotICAgICAgICA6
IEJpZGlyZWN0aW9uYWxSYW5nZUNvbmNlcHQ8VD4KLSAgICAgICAgLCBXcml0ZWFibGVSYW5nZUNv
bmNlcHQ8VD4KLSAgICB7Ci0gICAgfTsKLQotICAgIC8vISBDaGVjayBpZiBhIHR5cGUgVCBtb2Rl
bHMgdGhlIFJhbmRvbUFjY2Vzc1JhbmdlIHJhbmdlIGNvbmNlcHQuCi0gICAgdGVtcGxhdGU8Y2xh
c3MgVD4KLSAgICBzdHJ1Y3QgUmFuZG9tQWNjZXNzUmFuZ2VDb25jZXB0IDogQmlkaXJlY3Rpb25h
bFJhbmdlQ29uY2VwdDxUPgotICAgIHsKLSNpZiBCT09TVF9SQU5HRV9FTkFCTEVfQ09OQ0VQVF9B
U1NFUlQKLSAgICAgICAgQk9PU1RfUkFOR0VfQ09OQ0VQVF9BU1NFUlQoKHJhbmdlX2RldGFpbDo6
UmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgUmFuZG9t
QWNjZXNzUmFuZ2VDb25jZXB0OjppdGVyYXRvcj4pKTsKLSAgICAgICAgQk9PU1RfUkFOR0VfQ09O
Q0VQVF9BU1NFUlQoKHJhbmdlX2RldGFpbDo6UmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PEJP
T1NUX0RFRFVDRURfVFlQRU5BTUUgUmFuZG9tQWNjZXNzUmFuZ2VDb25jZXB0Ojpjb25zdF9pdGVy
YXRvcj4pKTsKLSNlbmRpZgotICAgIH07Ci0KLSAgICAvLyEgQ2hlY2sgaWYgYSB0eXBlIFQgbW9k
ZWxzIHRoZSBXcml0ZWFibGVSYW5kb21BY2Nlc3NSYW5nZSByYW5nZSBjb25jZXB0LgotICAgIHRl
bXBsYXRlPGNsYXNzIFQ+Ci0gICAgc3RydWN0IFdyaXRlYWJsZVJhbmRvbUFjY2Vzc1JhbmdlQ29u
Y2VwdAotICAgICAgICA6IFJhbmRvbUFjY2Vzc1JhbmdlQ29uY2VwdDxUPgotICAgICAgICAsIFdy
aXRlYWJsZVJhbmdlQ29uY2VwdDxUPgotICAgIHsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBi
b29zdAotCi0jZW5kaWYgLy8gQk9PU1RfUkFOR0VfQ09OQ0VQVFNfSFBQCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS9jb25maWcuaHBw
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZ2UvY29uZmln
LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYwMGE1ZmY4MjRhMTI2MjFlMWQy
ZmEwZTQ2ZWE3ODg3ODc2NTc1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5n
ZS9jb25maWcuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLy8gQm9vc3QuUmFu
Z2UgbGlicmFyeQotLy8KLS8vICBDb3B5cmlnaHQgVGhvcnN0ZW4gT3R0b3NlbiAyMDAzLTIwMDQu
IFVzZSwgbW9kaWZpY2F0aW9uIGFuZAotLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCi0vLyAgMS4wLiAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUg
aHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9yYW5nZS8KLS8vCi0KLSNpZm5kZWYgQk9PU1RfUkFO
R0VfQ09ORklHX0hQUAotI2RlZmluZSBCT09TVF9SQU5HRV9DT05GSUdfSFBQCi0KLSNpbmNsdWRl
IDxib29zdC9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQot
IyBwcmFnbWEgb25jZQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotCi0j
aWZkZWYgQk9PU1RfUkFOR0VfREVEVUNFRF9UWVBFTkFNRQotI2Vycm9yICJtYWNybyBhbHJlYWR5
IGRlZmluZWQhIgotI2VuZGlmCi0KLSNpZiBCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENfXywg
Qk9PU1RfVEVTVEVEX0FUKDB4NTY0KSkKLSMgZGVmaW5lIEJPT1NUX1JBTkdFX0RFRFVDRURfVFlQ
RU5BTUUgdHlwZW5hbWUKLSNlbHNlCi0jZGVmaW5lIEJPT1NUX1JBTkdFX0RFRFVDRURfVFlQRU5B
TUUgQk9PU1RfREVEVUNFRF9UWVBFTkFNRQotI2VuZGlmCi0KLSNpZmRlZiBCT09TVF9SQU5HRV9O
T19BUlJBWV9TVVBQT1JUCi0jZXJyb3IgIm1hY3JvIGFscmVhZHkgZGVmaW5lZCEiCi0jZW5kaWYK
LQotI2lmIEJPT1NUX1dPUktBUk9VTkQoIF9fTVdFUktTX18sIDw9IDB4MzAwMyApCi0jZGVmaW5l
IEJPT1NUX1JBTkdFX05PX0FSUkFZX1NVUFBPUlQgMQotI2VuZGlmCi0KLSNpZmRlZiBCT09TVF9S
QU5HRV9OT19BUlJBWV9TVVBQT1JUCi0jZGVmaW5lIEJPT1NUX1JBTkdFX0FSUkFZX1JFRigpIChi
b29zdF9yYW5nZV9hcnJheSkKLSNkZWZpbmUgQk9PU1RfUkFOR0VfTk9fU1RBVElDX0FTU0VSVAot
I2Vsc2UKLSNkZWZpbmUgQk9PU1RfUkFOR0VfQVJSQVlfUkVGKCkgKCZib29zdF9yYW5nZV9hcnJh
eSkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDQpIHx8
ICgoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDcpKSkKLSMgIGRlZmluZSBC
T09TVF9SQU5HRV9VTlVTRUQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKLSNlbHNlCi0jICBkZWZp
bmUgQk9PU1RfUkFOR0VfVU5VU0VECi0jZW5kaWYKLQotCi0KLSNlbmRpZgotCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS9jb25zdF9p
dGVyYXRvci5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9y
YW5nZS9jb25zdF9pdGVyYXRvci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcy
N2ZkYWQwNTg2MjA5MDViNzMyODM3ZWZmMDI1ZTVmYWE2MzhjOTkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvcmFuZ2UvY29uc3RfaXRlcmF0b3IuaHBwCisrKyAvZGV2L251bGwKQEAg
LTEsNzYgKzAsMCBAQAotLy8gQm9vc3QuUmFuZ2UgbGlicmFyeQotLy8KLS8vICBDb3B5cmlnaHQg
VGhvcnN0ZW4gT3R0b3NlbiAyMDAzLTIwMDQuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAotLy8gIGRp
c3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJz
aW9uCi0vLyAgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8v
IEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9yYW5n
ZS8KLS8vCi0KLSNpZm5kZWYgQk9PU1RfUkFOR0VfQ09OU1RfSVRFUkFUT1JfSFBQCi0jZGVmaW5l
IEJPT1NUX1JBTkdFX0NPTlNUX0lURVJBVE9SX0hQUAotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikK
LSMgcHJhZ21hIG9uY2UKLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcmFuZ2UvY29uZmlnLmhw
cD4KLQotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL3JhbmdlX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvcmFuZ2UvZGV0YWlsL2V4dHJhY3Rfb3B0aW9uYWxfdHlwZS5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvcmVtb3ZlX2NvbnN0LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9yZW1vdmVfcmVmZXJlbmNlLmhwcD4KLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUg
PHV0aWxpdHk+Ci0KLW5hbWVzcGFjZSBib29zdAotewotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0g
ICAgLy8gZGVmYXVsdAotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgCi0gICAgbmFtZXNwYWNl
IHJhbmdlX2RldGFpbAotICAgIHsKLQotQk9PU1RfUkFOR0VfRVhUUkFDVF9PUFRJT05BTF9UWVBF
KCBjb25zdF9pdGVyYXRvciApCi0KLXRlbXBsYXRlPCB0eXBlbmFtZSBDID4KLXN0cnVjdCByYW5n
ZV9jb25zdF9pdGVyYXRvcl9oZWxwZXIKLSAgICAgICAgOiBleHRyYWN0X2NvbnN0X2l0ZXJhdG9y
PEM+Ci17fTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIHBhaXIKLS8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0KLXRlbXBsYXRlPCB0eXBlbmFtZSBJdGVyYXRvciA+Ci1zdHJ1Y3QgcmFuZ2VfY29uc3RfaXRl
cmF0b3JfaGVscGVyPHN0ZDo6cGFpcjxJdGVyYXRvcixJdGVyYXRvcj4gPgotewotICAgIHR5cGVk
ZWYgSXRlcmF0b3IgdHlwZTsKLX07Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBhcnJheQotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KLQotdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IHN6ID4K
LXN0cnVjdCByYW5nZV9jb25zdF9pdGVyYXRvcl9oZWxwZXI8IFRbc3pdID4KLXsKLSAgICB0eXBl
ZGVmIGNvbnN0IFQqIHR5cGU7Ci19OwotCi0gICAgfSAvLyBuYW1lc3BhY2UgcmFuZ2VfZGV0YWls
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIEVuYWJsZXI9dm9pZD4KLXN0cnVjdCBy
YW5nZV9jb25zdF9pdGVyYXRvcgotICAgICAgICA6IHJhbmdlX2RldGFpbDo6cmFuZ2VfY29uc3Rf
aXRlcmF0b3JfaGVscGVyPAotICAgICAgICAgICAgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSByZW1v
dmVfcmVmZXJlbmNlPEM+Ojp0eXBlCi0gICAgICAgID4KLXsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IGJvb3N0Ci0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9yYW5nZS9kZXRhaWwvY29tbW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmdlL2RldGFpbC9jb21tb24uaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGI2NjViZWY4YzU1YjUxZGNiOGFkNDVkODA0ZjU4
ZWZjZmY0N2FmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmdlL2RldGFpbC9j
b21tb24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8vIEJvb3N0LlJhbmdl
IGxpYnJhcnkKLS8vCi0vLyAgQ29weXJpZ2h0IFRob3JzdGVuIE90dG9zZW4gMjAwMy0yMDA0LiBV
c2UsIG1vZGlmaWNhdGlvbiBhbmQKLS8vICBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgotLy8gIDEuMC4gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0
dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvcmFuZ2UvCi0vLwotCi0jaWZuZGVmIEJPT1NUX1JBTkdF
X0RFVEFJTF9DT01NT05fSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkdFX0RFVEFJTF9DT01NT05fSFBQ
Ci0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyBwcmFnbWEgb25jZQotI2VuZGlmCi0KLSNpbmNs
dWRlIDxib29zdC9yYW5nZS9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL2RldGFp
bC9zZmluYWUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvaWQuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L21wbC9ib29sLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvaWYuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L21wbC9pbnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9vci5o
cHA+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBtaXNz
aW5nIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24gIHdvcmthcm91bmQuCi0vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLQotbmFtZXNwYWNlIGJvb3N0IAotewotICAgIG5hbWVzcGFjZSByYW5nZV9kZXRhaWwg
Ci0gICAgeyAgICAgICAgCi0gICAgICAgIC8vIDEgPSBzdGQgY29udGFpbmVycwotICAgICAgICAv
LyAyID0gc3RkOjpwYWlyCi0gICAgICAgIC8vIDMgPSBjb25zdCBzdGQ6OnBhaXIKLSAgICAgICAg
Ly8gNCA9IGFycmF5Ci0gICAgICAgIC8vIDUgPSBjb25zdCBhcnJheQotICAgICAgICAvLyA2ID0g
Y2hhciBhcnJheQotICAgICAgICAvLyA3ID0gd2NoYXJfdCBhcnJheQotICAgICAgICAvLyA4ID0g
Y2hhcioKLSAgICAgICAgLy8gOSA9IGNvbnN0IGNoYXIqCi0gICAgICAgIC8vIDEwID0gd2hhcl90
KgotICAgICAgICAvLyAxMSA9IGNvbnN0IHdjaGFyX3QqCi0gICAgICAgIC8vIDEyID0gc3RyaW5n
Ci0gICAgICAgIAotICAgICAgICB0eXBlZGVmIG1wbDo6aW50XzwxPjo6dHlwZSAgICBzdGRfY29u
dGFpbmVyXzsKLSAgICAgICAgdHlwZWRlZiBtcGw6OmludF88Mj46OnR5cGUgICAgc3RkX3BhaXJf
OwotICAgICAgICB0eXBlZGVmIG1wbDo6aW50XzwzPjo6dHlwZSAgICBjb25zdF9zdGRfcGFpcl87
Ci0gICAgICAgIHR5cGVkZWYgbXBsOjppbnRfPDQ+Ojp0eXBlICAgIGFycmF5XzsKLSAgICAgICAg
dHlwZWRlZiBtcGw6OmludF88NT46OnR5cGUgICAgY29uc3RfYXJyYXlfOwotICAgICAgICB0eXBl
ZGVmIG1wbDo6aW50Xzw2Pjo6dHlwZSAgICBjaGFyX2FycmF5XzsKLSAgICAgICAgdHlwZWRlZiBt
cGw6OmludF88Nz46OnR5cGUgICAgd2NoYXJfdF9hcnJheV87Ci0gICAgICAgIHR5cGVkZWYgbXBs
OjppbnRfPDg+Ojp0eXBlICAgIGNoYXJfcHRyXzsKLSAgICAgICAgdHlwZWRlZiBtcGw6OmludF88
OT46OnR5cGUgICAgY29uc3RfY2hhcl9wdHJfOwotICAgICAgICB0eXBlZGVmIG1wbDo6aW50Xzwx
MD46OnR5cGUgICB3Y2hhcl90X3B0cl87Ci0gICAgICAgIHR5cGVkZWYgbXBsOjppbnRfPDExPjo6
dHlwZSAgIGNvbnN0X3djaGFyX3RfcHRyXzsKLSAgICAgICAgdHlwZWRlZiBtcGw6OmludF88MTI+
Ojp0eXBlICAgc3RyaW5nXzsKLSAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBD
ID4KLSAgICAgICAgc3RydWN0IHJhbmdlX2hlbHBlcgotICAgICAgICB7Ci0gICAgICAgICAgICBz
dGF0aWMgQyogYzsKLSAgICAgICAgICAgIHN0YXRpYyBDICBwdHI7Ci0KLSAgICAgICAgICAgIEJP
T1NUX1NUQVRJQ19DT05TVEFOVCggYm9vbCwgaXNfcGFpcl8gICAgICAgICAgICAgICAgPSBzaXpl
b2YoIGJvb3N0OjpyYW5nZV9kZXRhaWw6OmlzX3BhaXJfaW1wbCggYyApICkgPT0gc2l6ZW9mKCB5
ZXNfdHlwZSApICk7Ci0gICAgICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoIGJvb2wsIGlz
X2NoYXJfcHRyXyAgICAgICAgICAgID0gc2l6ZW9mKCBib29zdDo6cmFuZ2VfZGV0YWlsOjppc19j
aGFyX3B0cl9pbXBsKCBwdHIgKSApID09IHNpemVvZiggeWVzX3R5cGUgKSApOwotICAgICAgICAg
ICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKCBib29sLCBpc19jb25zdF9jaGFyX3B0cl8gICAgICA9
IHNpemVvZiggYm9vc3Q6OnJhbmdlX2RldGFpbDo6aXNfY29uc3RfY2hhcl9wdHJfaW1wbCggcHRy
ICkgKSA9PSBzaXplb2YoIHllc190eXBlICkgKTsKLSAgICAgICAgICAgIEJPT1NUX1NUQVRJQ19D
T05TVEFOVCggYm9vbCwgaXNfd2NoYXJfdF9wdHJfICAgICAgICAgPSBzaXplb2YoIGJvb3N0Ojpy
YW5nZV9kZXRhaWw6OmlzX3djaGFyX3RfcHRyX2ltcGwoIHB0ciApICkgPT0gc2l6ZW9mKCB5ZXNf
dHlwZSApICk7Ci0gICAgICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoIGJvb2wsIGlzX2Nv
bnN0X3djaGFyX3RfcHRyXyAgID0gc2l6ZW9mKCBib29zdDo6cmFuZ2VfZGV0YWlsOjppc19jb25z
dF93Y2hhcl90X3B0cl9pbXBsKCBwdHIgKSApID09IHNpemVvZiggeWVzX3R5cGUgKSApOwotICAg
ICAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKCBib29sLCBpc19jaGFyX2FycmF5XyAgICAg
ICAgICA9IHNpemVvZiggYm9vc3Q6OnJhbmdlX2RldGFpbDo6aXNfY2hhcl9hcnJheV9pbXBsKCBw
dHIgKSApID09IHNpemVvZiggeWVzX3R5cGUgKSApOwotICAgICAgICAgICAgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKCBib29sLCBpc193Y2hhcl90X2FycmF5XyAgICAgICA9IHNpemVvZiggYm9vc3Q6
OnJhbmdlX2RldGFpbDo6aXNfd2NoYXJfdF9hcnJheV9pbXBsKCBwdHIgKSApID09IHNpemVvZigg
eWVzX3R5cGUgKSApOwotICAgICAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKCBib29sLCBp
c19zdHJpbmdfICAgICAgICAgICAgICA9IChib29zdDo6bXBsOjpvcl88Ym9vc3Q6Om1wbDo6Ym9v
bF88aXNfY29uc3RfY2hhcl9wdHJfPiwgYm9vc3Q6Om1wbDo6Ym9vbF88aXNfY29uc3Rfd2NoYXJf
dF9wdHJfPiA+Ojp2YWx1ZSApKTsKLSAgICAgICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVCgg
Ym9vbCwgaXNfYXJyYXlfICAgICAgICAgICAgICAgPSBib29zdDo6aXNfYXJyYXk8Qz46OnZhbHVl
ICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIHRlbXBsYXRl
PCB0eXBlbmFtZSBDID4KLSAgICAgICAgY2xhc3MgcmFuZ2UKLSAgICAgICAgewotICAgICAgICAg
ICAgdHlwZWRlZiBCT09TVF9SQU5HRV9ERURVQ0VEX1RZUEVOQU1FICAgYm9vc3Q6Om1wbDo6aWZf
YzwgOjpib29zdDo6cmFuZ2VfZGV0YWlsOjpyYW5nZV9oZWxwZXI8Qz46OmlzX3BhaXJfLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vc3Q6OnJhbmdlX2RldGFpbDo6c3RkX3BhaXJfLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCA+Ojp0
eXBlIHBhaXJfdDsKLSAgICAgICAgICAgIHR5cGVkZWYgQk9PU1RfUkFOR0VfREVEVUNFRF9UWVBF
TkFNRSAgIGJvb3N0OjptcGw6OmlmX2M8IDo6Ym9vc3Q6OnJhbmdlX2RldGFpbDo6cmFuZ2VfaGVs
cGVyPEM+Ojppc19hcnJheV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3N0OjpyYW5nZV9kZXRhaWw6OmFycmF5
XywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFpcl90ID46OnR5cGUgYXJyYXlfdDsKLSAgICAgICAgICAgIHR5cGVk
ZWYgQk9PU1RfUkFOR0VfREVEVUNFRF9UWVBFTkFNRSAgIGJvb3N0OjptcGw6OmlmX2M8IDo6Ym9v
c3Q6OnJhbmdlX2RldGFpbDo6cmFuZ2VfaGVscGVyPEM+Ojppc19zdHJpbmdfLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29zdDo6cmFuZ2VfZGV0YWlsOjpzdHJpbmdfLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV90ID46OnR5
cGUgc3RyaW5nX3Q7Ci0gICAgICAgICAgICB0eXBlZGVmIEJPT1NUX1JBTkdFX0RFRFVDRURfVFlQ
RU5BTUUgICBib29zdDo6bXBsOjppZl9jPCA6OmJvb3N0OjpyYW5nZV9kZXRhaWw6OnJhbmdlX2hl
bHBlcjxDPjo6aXNfY29uc3RfY2hhcl9wdHJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29zdDo6cmFuZ2VfZGV0
YWlsOjpjb25zdF9jaGFyX3B0cl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ190ID46OnR5cGUgY29uc3Rf
Y2hhcl9wdHJfdDsKLSAgICAgICAgICAgIHR5cGVkZWYgQk9PU1RfUkFOR0VfREVEVUNFRF9UWVBF
TkFNRSAgIGJvb3N0OjptcGw6OmlmX2M8IDo6Ym9vc3Q6OnJhbmdlX2RldGFpbDo6cmFuZ2VfaGVs
cGVyPEM+Ojppc19jaGFyX3B0cl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3N0OjpyYW5nZV9kZXRhaWw6OmNo
YXJfcHRyXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3RfY2hhcl9wdHJfdCA+Ojp0eXBlIGNoYXJfcHRyX3Q7
Ci0gICAgICAgICAgICB0eXBlZGVmIEJPT1NUX1JBTkdFX0RFRFVDRURfVFlQRU5BTUUgICBib29z
dDo6bXBsOjppZl9jPCA6OmJvb3N0OjpyYW5nZV9kZXRhaWw6OnJhbmdlX2hlbHBlcjxDPjo6aXNf
Y29uc3Rfd2NoYXJfdF9wdHJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29zdDo6cmFuZ2VfZGV0YWlsOjpjb25z
dF93Y2hhcl90X3B0cl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfcHRyX3QgPjo6dHlwZSBjb25zdF93Y2hh
cl9wdHJfdDsKLSAgICAgICAgICAgIHR5cGVkZWYgQk9PU1RfUkFOR0VfREVEVUNFRF9UWVBFTkFN
RSAgIGJvb3N0OjptcGw6OmlmX2M8IDo6Ym9vc3Q6OnJhbmdlX2RldGFpbDo6cmFuZ2VfaGVscGVy
PEM+Ojppc193Y2hhcl90X3B0cl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3N0OjpyYW5nZV9kZXRhaWw6Ondj
aGFyX3RfcHRyXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Rfd2NoYXJfcHRyX3QgPjo6dHlwZSB3Y2hhcl9w
dHJfdDsKLSAgICAgICAgICAgIHR5cGVkZWYgQk9PU1RfUkFOR0VfREVEVUNFRF9UWVBFTkFNRSAg
IGJvb3N0OjptcGw6OmlmX2M8IDo6Ym9vc3Q6OnJhbmdlX2RldGFpbDo6cmFuZ2VfaGVscGVyPEM+
Ojppc193Y2hhcl90X2FycmF5XywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vc3Q6OnJhbmdlX2RldGFpbDo6d2No
YXJfdF9hcnJheV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3B0cl90ID46OnR5cGUgd2NoYXJfYXJyYXlf
dDsKLSAgICAgICAgICAgIHR5cGVkZWYgQk9PU1RfUkFOR0VfREVEVUNFRF9UWVBFTkFNRSAgIGJv
b3N0OjptcGw6OmlmX2M8IDo6Ym9vc3Q6OnJhbmdlX2RldGFpbDo6cmFuZ2VfaGVscGVyPEM+Ojpp
c19jaGFyX2FycmF5XywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vc3Q6OnJhbmdlX2RldGFpbDo6Y2hhcl9hcnJh
eV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdjaGFyX2FycmF5X3QgPjo6dHlwZSBjaGFyX2FycmF5X3Q7Ci0gICAg
ICAgIHB1YmxpYzoKLSAgICAgICAgICAgIHR5cGVkZWYgQk9PU1RfUkFOR0VfREVEVUNFRF9UWVBF
TkFNRSAgIGJvb3N0OjptcGw6OmlmX2M8IDo6Ym9vc3Q6OmlzX3ZvaWQ8Y2hhcl9hcnJheV90Pjo6
dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb3N0OjpyYW5nZV9kZXRhaWw6OnN0ZF9jb250YWluZXJfLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyX2FycmF5X3QgPjo6dHlwZSB0eXBlOyAgCi0gICAgICAgIH07IC8vIGNs
YXNzICdyYW5nZScgCi0gICAgfQotfQotICAgICAgICAKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS9kZXRhaWwvZXh0
cmFjdF9vcHRpb25hbF90eXBlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3JhbmdlL2RldGFpbC9leHRyYWN0X29wdGlvbmFsX3R5cGUuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzgxNDM0YTg1OTRiNzU0OGIzYjMxYmEyNGQwMzYzZmZh
MWU5NjhjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmdlL2RldGFpbC9leHRy
YWN0X29wdGlvbmFsX3R5cGUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLy8g
Qm9vc3QuUmFuZ2UgbGlicmFyeQotLy8KLS8vICBDb3B5cmlnaHQgQXJubyBTY2hvZWRsICYgTmVp
bCBHcm92ZXMgMjAwOS4KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlz
IHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlCi0vLyAgTGljZW5zZSwgVmVyc2lvbiAxLjAu
IChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gRm9yIG1vcmUgaW5m
b3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3JhbmdlLwotLy8KLSNpZm5k
ZWYgQk9PU1RfUkFOR0VfREVUQUlMX0VYVFJBQ1RfT1BUSU9OQUxfVFlQRV9IUFBfSU5DTFVERUQK
LSNkZWZpbmUgQk9PU1RfUkFOR0VfREVUQUlMX0VYVFJBQ1RfT1BUSU9OQUxfVFlQRV9IUFBfSU5D
TFVERUQKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jIHByYWdtYSBvbmNlCi0jZW5kaWYKLQot
I2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29y
L2NhdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2hhc194eHguaHBwPgotCi0jaWYgIWRlZmlu
ZWQoQk9PU1RfTVBMX0NGR19OT19IQVNfWFhYKQotCi0vLyBEZWZpbmVzIGV4dHJhY3Rfc29tZV90
eXBlZGVmPFQ+IHdoaWNoIGV4cG9zZXMgVDo6c29tZV90eXBlZGVmIGFzCi0vLyBleHRyYWN0X3Nv
bWVfdHlwZWRlZjxUPjo6dHlwZSBpZiBUOjpzb21lX3R5cGVkZWYgZXhpc3RzLiBPdGhlcndpc2UK
LS8vIGV4dHJhY3Rfc29tZV90eXBlZGVmPFQ+IGlzIGVtcHR5LgotI2RlZmluZSBCT09TVF9SQU5H
RV9FWFRSQUNUX09QVElPTkFMX1RZUEUoIGFfdHlwZWRlZiApICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgQk9PU1RfTVBMX0hBU19YWFhfVFJBSVRfREVGKGFfdHlwZWRlZikgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUg
IEMsIGJvb2wgQiA9IEJPT1NUX1BQX0NBVChoYXNfLCBhX3R5cGVkZWYpPEM+Ojp2YWx1ZSA+ICAg
XAotICAgIHN0cnVjdCBCT09TVF9QUF9DQVQoZXh0cmFjdF8sIGFfdHlwZWRlZikgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAge307ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB0ZW1wbGF0ZTwgdHlwZW5hbWUgQyA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0cnVjdCBCT09TVF9QUF9DQVQoZXh0cmFjdF8s
IGFfdHlwZWRlZik8IEMsIHRydWUgPiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdHlwZWRlZiBCT09TVF9ERURVQ0VEX1RZUEVOQU1F
IEM6OmFfdHlwZWRlZiB0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH07Ci0KLSNl
bHNlCi0KLSNkZWZpbmUgQk9PU1RfUkFOR0VfRVhUUkFDVF9PUFRJT05BTF9UWVBFKCBhX3R5cGVk
ZWYgKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBD
ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgc3RydWN0IEJPT1NUX1BQX0NBVChleHRyYWN0XywgYV90eXBlZGVmKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICB0eXBlZGVmIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgQzo6YV90eXBlZGVmIHR5cGU7ICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgfTsKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBpbmNs
dWRlIGd1YXJkCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9yYW5nZS9kZXRhaWwvaGFzX21lbWJlcl9zaXplLmhwcCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmdlL2RldGFpbC9oYXNfbWVtYmVyX3NpemUu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzYzOWFhODkxZmQ3YmQzNWVmMzRj
OTM5ZTIzMzIzNjE1NDNiNmVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3Jhbmdl
L2RldGFpbC9oYXNfbWVtYmVyX3NpemUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBA
QAotLy8gQm9vc3QuUmFuZ2UgbGlicmFyeQotLy8KLS8vIENvcHlyaWdodCBOZWlsIEdyb3ZlcyAy
MDE0LgotLy8KLS8vIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1Ympl
Y3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyBWZXJzaW9uIDEuMC4gKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gaHR0cDovL3d3
dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyBGb3IgbW9yZSBpbmZvcm1hdGlv
biwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvcmFuZ2UvCi0vLwotI2lmbmRlZiBCT09T
VF9SQU5HRV9ERVRBSUxfSEFTX01FTUJFUl9TSVpFX0hQUAotI2RlZmluZSBCT09TVF9SQU5HRV9E
RVRBSUxfSEFTX01FTUJFUl9TSVpFX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
aXNfY2xhc3MuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5j
dGlvbl9wb2ludGVyLmhwcD4KLSNpbmNsdWRlIDxib29zdC9tcGwvYW5kLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9tcGwvYm9vbC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvY3N0ZGludC5ocHA+Ci0KLW5h
bWVzcGFjZSBib29zdAotewotICAgIG5hbWVzcGFjZSByYW5nZV9kZXRhaWwKLSAgICB7Ci0KLXRl
bXBsYXRlPGNsYXNzIFQ+Ci1jbGFzcyBoYXNfbWVtYmVyX3NpemVfaW1wbAotewotcHJpdmF0ZToK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBVLCBVPgotICAgIGNsYXNzIGNoZWNrCi0gICAgewotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBDPgotICAgIHN0YXRpYyBib29zdDo6dWludDhfdCBmKGNo
ZWNrPHN0ZDo6c2l6ZV90KEM6OiopKHZvaWQpIGNvbnN0LCAmQzo6c2l6ZT4qKTsKLQotICAgIHRl
bXBsYXRlPGNsYXNzIEM+Ci0gICAgc3RhdGljIGJvb3N0Ojp1aW50MTZfdCBmKC4uLik7Ci0KLXB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9Ci0gICAgICAgIChzaXplb2YoZjxU
PigwKSkgPT0gc2l6ZW9mKGJvb3N0Ojp1aW50OF90KSk7Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1l
IG1wbDo6aWZfYzwKLSAgICAgICAgKHNpemVvZihmPFQ+KDApKSA9PSBzaXplb2YoYm9vc3Q6OnVp
bnQ4X3QpKSwKLSAgICAgICAgbXBsOjp0cnVlXywKLSAgICAgICAgbXBsOjpmYWxzZV8KLSAgICA+
Ojp0eXBlIHR5cGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IGhhc19tZW1iZXJf
c2l6ZQotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgbXBsOjphbmRfPAotICAgICAgICB0eXBlbmFt
ZSBpc19jbGFzczxUPjo6dHlwZSwKLSAgICAgICAgdHlwZW5hbWUgaGFzX21lbWJlcl9zaXplX2lt
cGw8Y29uc3QgVD46OnR5cGUKLSAgICA+Ojp0eXBlIHR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9Ci0gICAgICAgIGlzX2NsYXNzPFQ+Ojp2YWx1ZSAmJiBoYXNfbWVtYmVyX3Np
emVfaW1wbDxjb25zdCBUPjo6dmFsdWU7Ci19OwotCi0gICAgfSAvLyBuYW1lc3BhY2UgcmFuZ2Vf
ZGV0YWlsCi19Ly8gbmFtZXNwYWNlIGJvb3N0Ci0gCi0jZW5kaWYgLy8gaW5jbHVkZSBndWFyZApk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFu
Z2UvZGV0YWlsL2ltcGxlbWVudGF0aW9uX2hlbHAuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZ2UvZGV0YWlsL2ltcGxlbWVudGF0aW9uX2hlbHAuaHBw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzU5NTNmMzQ5ZjVjNmQ3ZWEwNTY2ZDAx
Mjk3MTRhYzU0NDFhMTZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmdlL2Rl
dGFpbC9pbXBsZW1lbnRhdGlvbl9oZWxwLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCww
IEBACi0vLyBCb29zdC5SYW5nZSBsaWJyYXJ5Ci0vLwotLy8gIENvcHlyaWdodCBUaG9yc3RlbiBP
dHRvc2VuIDIwMDMtMjAwNC4gVXNlLCBtb2RpZmljYXRpb24gYW5kCi0vLyAgZGlzdHJpYnV0aW9u
IGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24KLS8vICAx
LjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8v
ICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gRm9yIG1vcmUg
aW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3JhbmdlLwotLy8KLQot
I2lmbmRlZiBCT09TVF9SQU5HRV9ERVRBSUxfSU1QTEVNRU5UQVRJT05fSEVMUF9IUFAKLSNkZWZp
bmUgQk9PU1RfUkFOR0VfREVUQUlMX0lNUExFTUVOVEFUSU9OX0hFTFBfSFBQCi0KLSNpbmNsdWRl
IDxib29zdC9yYW5nZS9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL2RldGFpbC9j
b21tb24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgotI2lu
Y2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZm5kZWYgQk9PU1RfTk9f
Q1dDSEFSCi0jaW5jbHVkZSA8d2NoYXIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3QKLXsK
LSAgICBuYW1lc3BhY2UgcmFuZ2VfZGV0YWlsCi0gICAgewotICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLSAgICAgICAgaW5saW5lIHZvaWQgYm9vc3RfcmFuZ2Vfc2lsZW5jZV93YXJuaW5n
KCBjb25zdCBUJiApIHsgfQotCi0gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgICAgICAvLyBlbmQo
KSBoZWxwCi0gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0gICAgICAgIGlubGluZSBjb25zdCBjaGFy
KiBzdHJfZW5kKCBjb25zdCBjaGFyKiBzLCBjb25zdCBjaGFyKiApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBzICsgc3RybGVuKCBzICk7Ci0gICAgICAgIH0KLQotI2lmbmRlZiBCT09T
VF9OT19DV0NIQVIKLSAgICAgICAgaW5saW5lIGNvbnN0IHdjaGFyX3QqIHN0cl9lbmQoIGNvbnN0
IHdjaGFyX3QqIHMsIGNvbnN0IHdjaGFyX3QqICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIHMgKyB3Y3NsZW4oIHMgKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgaW5saW5lIGNv
bnN0IHdjaGFyX3QqIHN0cl9lbmQoIGNvbnN0IHdjaGFyX3QqIHMsIGNvbnN0IHdjaGFyX3QqICkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYoIHMgPT0gMCB8fCBzWzBdID09IDAgKQotICAgICAg
ICAgICAgICAgIHJldHVybiBzOwotICAgICAgICAgICAgd2hpbGUoICorK3MgIT0gMCApCi0gICAg
ICAgICAgICAgICAgOwotICAgICAgICAgICAgcmV0dXJuIHM7Ci0gICAgICAgIH0KLSNlbmRpZgot
Ci0gICAgICAgIHRlbXBsYXRlPCBjbGFzcyBDaGFyID4KLSAgICAgICAgaW5saW5lIENoYXIqIHN0
cl9lbmQoIENoYXIqIHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29uc3RfY2Fz
dDxDaGFyKj4oIHN0cl9lbmQoIHMsIHMgKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxh
dGU8IGNsYXNzIFQsIHN0ZDo6c2l6ZV90IHN6ID4KLSAgICAgICAgaW5saW5lIFQqIGFycmF5X2Vu
ZCggVCBCT09TVF9SQU5HRV9BUlJBWV9SRUYoKVtzel0gKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gYm9vc3RfcmFuZ2VfYXJyYXkgKyBzejsKLSAgICAgICAgfQotCi0gICAgICAgIHRl
bXBsYXRlPCBjbGFzcyBULCBzdGQ6OnNpemVfdCBzeiA+Ci0gICAgICAgIGlubGluZSBjb25zdCBU
KiBhcnJheV9lbmQoIGNvbnN0IFQgQk9PU1RfUkFOR0VfQVJSQVlfUkVGKClbc3pdICkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGJvb3N0X3JhbmdlX2FycmF5ICsgc3o7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAgICAgLy8gc2l6ZSgpIGhlbHAKLSAgICAg
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0KLSAgICAgICAgdGVtcGxhdGU8IGNsYXNzIENoYXIgPgotICAgICAg
ICBpbmxpbmUgc3RkOjpzaXplX3Qgc3RyX3NpemUoIGNvbnN0IENoYXIqIGNvbnN0JiBzICkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0cl9lbmQoIHMgKSAtIHM7Ci0gICAgICAgIH0K
LQotICAgICAgICB0ZW1wbGF0ZTwgY2xhc3MgVCwgc3RkOjpzaXplX3Qgc3ogPgotICAgICAgICBp
bmxpbmUgc3RkOjpzaXplX3QgYXJyYXlfc2l6ZSggVCBCT09TVF9SQU5HRV9BUlJBWV9SRUYoKVtz
el0gKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29zdF9yYW5nZV9zaWxlbmNlX3dhcm5pbmco
IGJvb3N0X3JhbmdlX2FycmF5ICk7Ci0gICAgICAgICAgICByZXR1cm4gc3o7Ci0gICAgICAgIH0K
LQotICAgICAgICB0ZW1wbGF0ZTwgY2xhc3MgVCwgc3RkOjpzaXplX3Qgc3ogPgotICAgICAgICBp
bmxpbmUgc3RkOjpzaXplX3QgYXJyYXlfc2l6ZSggY29uc3QgVCBCT09TVF9SQU5HRV9BUlJBWV9S
RUYoKVtzel0gKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29zdF9yYW5nZV9zaWxlbmNlX3dh
cm5pbmcoIGJvb3N0X3JhbmdlX2FycmF5ICk7Ci0gICAgICAgICAgICByZXR1cm4gc3o7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpbmxpbmUgYm9vbCBpc19zYW1lX2FkZHJlc3MoY29uc3Qgdm9pZCog
bCwgY29uc3Qgdm9pZCogcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGwgPT0gcjsK
LSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMj4KLSAgICAg
ICAgaW5saW5lIGJvb2wgaXNfc2FtZV9vYmplY3QoY29uc3QgVDEmIGwsIGNvbnN0IFQyJiByKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcmFuZ2VfZGV0YWlsOjppc19zYW1lX2FkZHJl
c3MoJmwsICZyKTsKLSAgICAgICAgfQotCi0gICAgfSAvLyBuYW1lc3BhY2UgJ3JhbmdlX2RldGFp
bCcKLQotfSAvLyBuYW1lc3BhY2UgJ2Jvb3N0JwotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZ2UvZGV0YWlsL21pc2Nf
Y29uY2VwdC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9y
YW5nZS9kZXRhaWwvbWlzY19jb25jZXB0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNzRjYjkxOWYyN2VhZDg1N2I5NmMyNDk1OGM2ODdkOWU3YWZkMmFkOS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS9kZXRhaWwvbWlzY19jb25jZXB0LmhwcAorKysgL2Rl
di9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8vIEJvb3N0LlJhbmdlIGxpYnJhcnkgY29uY2VwdCBj
aGVja3MKLS8vCi0vLyAgQ29weXJpZ2h0IE5laWwgR3JvdmVzIDIwMDkuIFVzZSwgbW9kaWZpY2F0
aW9uIGFuZCBkaXN0cmlidXRpb24KLS8vICBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdh
cmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLS8vICBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkKLS8vCi0jaWZuZGVmIEJPT1NUX1JBTkdFX0RFVEFJTF9NSVNDX0NPTkNFUFRfSFBQ
X0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1JBTkdFX0RFVEFJTF9NSVNDX0NPTkNFUFRfSFBQX0lO
Q0xVREVECi0KLSNpbmNsdWRlIDxib29zdC9jb25jZXB0X2NoZWNrLmhwcD4KLQotbmFtZXNwYWNl
IGJvb3N0Ci17Ci0gICAgbmFtZXNwYWNlIHJhbmdlX2RldGFpbAotICAgIHsKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgotICAgICAgICBjbGFzcyBTYW1lVHlwZUNv
bmNlcHQKLSAgICAgICAgewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBCT09TVF9DT05D
RVBUX1VTQUdFKFNhbWVUeXBlQ29uY2VwdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBzYW1lX3R5cGUoYSxiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2FtZV90eXBlKFQsVCkge30KLSAgICAg
ICAgICAgIFQxIGE7Ci0gICAgICAgICAgICBUMiBiOwotICAgICAgICB9OwotICAgIH0KLX0KLQot
I2VuZGlmIC8vIGluY2x1ZGUgZ3VhcmQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmdlL2RldGFpbC9tc3ZjX2hhc19pdGVyYXRvcl93b3Jr
YXJvdW5kLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3Jh
bmdlL2RldGFpbC9tc3ZjX2hhc19pdGVyYXRvcl93b3JrYXJvdW5kLmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNjJiNjdmZDUyOTBmY2Y5NzlkMzY3MTZlOWM5YWFmNTMxYWQ0M2Nk
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS9kZXRhaWwvbXN2Y19oYXNf
aXRlcmF0b3Jfd29ya2Fyb3VuZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAot
Ly8gQm9vc3QuUmFuZ2UgbGlicmFyeQotLy8KLS8vICBDb3B5cmlnaHQgRXJpYyBOaWVibGVyIDIw
MTQuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAotLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRv
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCi0vLyAgMS4wLiAoU2VlIGFjY29t
cGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBz
ZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9yYW5nZS8KLS8vCi0KLSNpZm5kZWYgQk9PU1Rf
UkFOR0VfREVUQUlMX01TVkNfSEFTX0lURVJBVE9SX1dPUktBUk9VTkRfSFBQCi0jZGVmaW5lIEJP
T1NUX1JBTkdFX0RFVEFJTF9NU1ZDX0hBU19JVEVSQVRPUl9XT1JLQVJPVU5EX0hQUAotCi0jaWYg
ZGVmaW5lZChfTVNDX1ZFUikKLSMgcHJhZ21hIG9uY2UKLSNlbmRpZgotCi0jaWZuZGVmIEJPT1NU
X1JBTkdFX01VVEFCTEVfSVRFUkFUT1JfSFBQCi0jIGVycm9yIFRoaXMgZmlsZSBzaG91bGQgb25s
eSBiZSBpbmNsdWRlZCBmcm9tIDxib29zdC9yYW5nZS9tdXRhYmxlX2l0ZXJhdG9yLmhwcD4KLSNl
bmRpZgotCi0jaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8PSAxNjAwKQotbmFtZXNw
YWNlIGJvb3N0Ci17Ci1uYW1lc3BhY2UgY2JfZGV0YWlscwotewotICAgIHRlbXBsYXRlIDxjbGFz
cyBCdWZmLCBjbGFzcyBUcmFpdHM+Ci0gICAgc3RydWN0IGl0ZXJhdG9yOwotfQotCi1uYW1lc3Bh
Y2UgcHl0aG9uCi17Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5lcgotICAgICAgICAgICAg
ICAsIGNsYXNzIE5leHRQb2xpY2llcyAvKj0gb2JqZWN0czo6ZGVmYXVsdF9pdGVyYXRvcl9jYWxs
X3BvbGljaWVzKi8+Ci0gICAgc3RydWN0IGl0ZXJhdG9yOwotfQotCi1uYW1lc3BhY2UgdHlwZV9l
cmFzdXJlCi17Ci0gICAgdGVtcGxhdGU8Ci0gICAgICAgIGNsYXNzIFRyYXZlcnNhbCwKLSAgICAg
ICAgY2xhc3MgVCAgICAgICAgICAgICAgICAgLyo9IF9zZWxmKi8sCi0gICAgICAgIGNsYXNzIFJl
ZmVyZW5jZSAgICAgICAgIC8qPSA6OmJvb3N0Ojp1c2VfZGVmYXVsdCovLAotICAgICAgICBjbGFz
cyBEaWZmZXJlbmNlVHlwZSAgICAvKj0gOjpzdGQ6OnB0cmRpZmZfdCovLAotICAgICAgICBjbGFz
cyBWYWx1ZVR5cGUgICAgICAgICAvKj0gdHlwZW5hbWUgZGVkdWNlZDxpdGVyYXRvcl92YWx1ZV90
eXBlPFQ+ID46OnR5cGUqLwotICAgID4KLSAgICBzdHJ1Y3QgaXRlcmF0b3I7Ci19Ci0KLW5hbWVz
cGFjZSB1bm9yZGVyZWQgeyBuYW1lc3BhY2UgaXRlcmF0b3JfZGV0YWlsCi17Ci0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIE5vZGU+Ci0gICAgc3RydWN0IGl0ZXJhdG9yOwotfX0KLQotbmFtZXNwYWNl
IGNvbnRhaW5lciB7IG5hbWVzcGFjZSBjb250YWluZXJfZGV0YWlsCi17Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgSUl0ZXJhdG9yLCBib29sIElzQ29uc3Q+Ci0gICAgY2xhc3MgaXRlcmF0b3I7Ci19fQot
Ci1uYW1lc3BhY2Ugc3Bpcml0IHsgbmFtZXNwYWNlIGxleCB7IG5hbWVzcGFjZSBsZXhlcnRsCi17
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgY2xhc3MgaXRlcmF0b3I7Ci19
fX0KLQotbmFtZXNwYWNlIHJhbmdlX2RldGFpbAotewotICAgIHRlbXBsYXRlIDxjbGFzcyBCdWZm
LCBjbGFzcyBUcmFpdHM+Ci0gICAgc3RydWN0IGhhc19pdGVyYXRvcjwgOjpib29zdDo6Y2JfZGV0
YWlsczo6aXRlcmF0b3I8QnVmZiwgVHJhaXRzPiA+Ci0gICAgICA6IG1wbDo6ZmFsc2VfCi0gICAg
e307Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQnVmZiwgY2xhc3MgVHJhaXRzPgotICAgIHN0cnVj
dCBoYXNfaXRlcmF0b3I8IDo6Ym9vc3Q6OmNiX2RldGFpbHM6Oml0ZXJhdG9yPEJ1ZmYsIFRyYWl0
cz4gY29uc3Q+Ci0gICAgICA6IG1wbDo6ZmFsc2VfCi0gICAge307Ci0KLSAgICB0ZW1wbGF0ZSA8
Y2xhc3MgQ29udGFpbmVyLCBjbGFzcyBOZXh0UG9saWNpZXM+Ci0gICAgc3RydWN0IGhhc19pdGVy
YXRvcjwgOjpib29zdDo6cHl0aG9uOjppdGVyYXRvcjxDb250YWluZXIsIE5leHRQb2xpY2llcz4g
PgotICAgICAgOiBtcGw6OmZhbHNlXwotICAgIHt9OwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIENv
bnRhaW5lciwgY2xhc3MgTmV4dFBvbGljaWVzPgotICAgIHN0cnVjdCBoYXNfaXRlcmF0b3I8IDo6
Ym9vc3Q6OnB5dGhvbjo6aXRlcmF0b3I8Q29udGFpbmVyLCBOZXh0UG9saWNpZXM+IGNvbnN0Pgot
ICAgICAgOiBtcGw6OmZhbHNlXwotICAgIHt9OwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgVHJhdmVy
c2FsLCBjbGFzcyBULCBjbGFzcyBSZWZlcmVuY2UsIGNsYXNzIERpZmZlcmVuY2VUeXBlLCBjbGFz
cyBWYWx1ZVR5cGU+Ci0gICAgc3RydWN0IGhhc19pdGVyYXRvcjwgOjpib29zdDo6dHlwZV9lcmFz
dXJlOjppdGVyYXRvcjxUcmF2ZXJzYWwsIFQsIFJlZmVyZW5jZSwgRGlmZmVyZW5jZVR5cGUsIFZh
bHVlVHlwZT4gPgotICAgICAgOiBtcGw6OmZhbHNlXwotICAgIHt9OwotCi0gICAgdGVtcGxhdGU8
Y2xhc3MgVHJhdmVyc2FsLCBjbGFzcyBULCBjbGFzcyBSZWZlcmVuY2UsIGNsYXNzIERpZmZlcmVu
Y2VUeXBlLCBjbGFzcyBWYWx1ZVR5cGU+Ci0gICAgc3RydWN0IGhhc19pdGVyYXRvcjwgOjpib29z
dDo6dHlwZV9lcmFzdXJlOjppdGVyYXRvcjxUcmF2ZXJzYWwsIFQsIFJlZmVyZW5jZSwgRGlmZmVy
ZW5jZVR5cGUsIFZhbHVlVHlwZT4gY29uc3Q+Ci0gICAgICA6IG1wbDo6ZmFsc2VfCi0gICAge307
Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4KLSAgICBzdHJ1Y3QgaGFzX2l0ZXJhdG9y
PCA6OmJvb3N0Ojp1bm9yZGVyZWQ6Oml0ZXJhdG9yX2RldGFpbDo6aXRlcmF0b3I8Tm9kZT4gPgot
ICAgICAgOiBtcGw6OmZhbHNlXwotICAgIHt9OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIE5v
ZGU+Ci0gICAgc3RydWN0IGhhc19pdGVyYXRvcjwgOjpib29zdDo6dW5vcmRlcmVkOjppdGVyYXRv
cl9kZXRhaWw6Oml0ZXJhdG9yPE5vZGU+IGNvbnN0PgotICAgICAgOiBtcGw6OmZhbHNlXwotICAg
IHt9OwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgSUl0ZXJhdG9yLCBib29sIElzQ29uc3Q+Ci0gICAg
c3RydWN0IGhhc19pdGVyYXRvcjwgOjpib29zdDo6Y29udGFpbmVyOjpjb250YWluZXJfZGV0YWls
OjppdGVyYXRvcjxJSXRlcmF0b3IsIElzQ29uc3Q+ID4KLSAgICAgIDogbXBsOjpmYWxzZV8KLSAg
ICB7fTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIElJdGVyYXRvciwgYm9vbCBJc0NvbnN0PgotICAg
IHN0cnVjdCBoYXNfaXRlcmF0b3I8IDo6Ym9vc3Q6OmNvbnRhaW5lcjo6Y29udGFpbmVyX2RldGFp
bDo6aXRlcmF0b3I8SUl0ZXJhdG9yLCBJc0NvbnN0PiBjb25zdD4KLSAgICAgIDogbXBsOjpmYWxz
ZV8KLSAgICB7fTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHN0cnVj
dCBoYXNfaXRlcmF0b3I8IDo6Ym9vc3Q6OnNwaXJpdDo6bGV4OjpsZXhlcnRsOjppdGVyYXRvcjxG
dW5jdG9yPiA+Ci0gICAgICA6IG1wbDo6ZmFsc2VfCi0gICAge307Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICBzdHJ1Y3QgaGFzX2l0ZXJhdG9yPCA6OmJvb3N0OjpzcGly
aXQ6OmxleDo6bGV4ZXJ0bDo6aXRlcmF0b3I8RnVuY3Rvcj4gY29uc3Q+Ci0gICAgICA6IG1wbDo6
ZmFsc2VfCi0gICAge307Ci19Ci19Ci0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZ2UvZGV0YWlsL3NmaW5hZS5o
cHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS9kZXRh
aWwvc2ZpbmFlLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIyYzYxZTcxZWU4
ZjFjM2U0MjBkM2MzYWExNWYxYzQ3ODNjZGUwNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9yYW5nZS9kZXRhaWwvc2ZpbmFlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAg
QEAKLS8vIEJvb3N0LlJhbmdlIGxpYnJhcnkKLS8vCi0vLyAgQ29weXJpZ2h0IFRob3JzdGVuIE90
dG9zZW4gMjAwMy0yMDA0LiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKLS8vICBkaXN0cmlidXRpb24g
aXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgotLy8gIDEu
MC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8g
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBGb3IgbW9yZSBp
bmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvcmFuZ2UvCi0vLwotCi0j
aWZuZGVmIEJPT1NUX1JBTkdFX0RFVEFJTF9TRklOQUVfSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkdF
X0RFVEFJTF9TRklOQUVfSFBQCi0KLSNpbmNsdWRlIDxib29zdC9yYW5nZS9jb25maWcuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5LmhwcD4KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9kZXRhaWwveWVzX25vX3R5cGUuaHBwPgotI2luY2x1ZGUgPHV0aWxpdHk+
Ci0KLQotbmFtZXNwYWNlIGJvb3N0IAotewotICAgIG5hbWVzcGFjZSByYW5nZV9kZXRhaWwKLSAg
ICB7ICAgICAgICAgIAotICAgICAgICB1c2luZyB0eXBlX3RyYWl0czo6eWVzX3R5cGU7Ci0gICAg
ICAgIHVzaW5nIHR5cGVfdHJhaXRzOjpub190eXBlOwotCi0gICAgICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LSAgICAgICAgLy8gc3RyaW5nCi0gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAgICAgCi0gICAg
ICAgIHllc190eXBlIGlzX3N0cmluZ19pbXBsKCBjb25zdCBjaGFyKiBjb25zdCApOwotICAgICAg
ICB5ZXNfdHlwZSBpc19zdHJpbmdfaW1wbCggY29uc3Qgd2NoYXJfdCogY29uc3QgKTsKLSAgICAg
ICAgbm9fdHlwZSAgaXNfc3RyaW5nX2ltcGwoIC4uLiApOwotICAgICAgICAKLSAgICAgICAgdGVt
cGxhdGU8IHN0ZDo6c2l6ZV90IHN6ID4KLSAgICAgICAgeWVzX3R5cGUgaXNfY2hhcl9hcnJheV9p
bXBsKCBjaGFyIEJPT1NUX1JBTkdFX0FSUkFZX1JFRigpW3N6XSApOwotICAgICAgICB0ZW1wbGF0
ZTwgc3RkOjpzaXplX3Qgc3ogPgotICAgICAgICB5ZXNfdHlwZSBpc19jaGFyX2FycmF5X2ltcGwo
IGNvbnN0IGNoYXIgQk9PU1RfUkFOR0VfQVJSQVlfUkVGKClbc3pdICk7Ci0gICAgICAgIG5vX3R5
cGUgIGlzX2NoYXJfYXJyYXlfaW1wbCggLi4uICk7Ci0gICAgICAgIAotICAgICAgICB0ZW1wbGF0
ZTwgc3RkOjpzaXplX3Qgc3ogPgotICAgICAgICB5ZXNfdHlwZSBpc193Y2hhcl90X2FycmF5X2lt
cGwoIHdjaGFyX3QgQk9PU1RfUkFOR0VfQVJSQVlfUkVGKClbc3pdICk7Ci0gICAgICAgIHRlbXBs
YXRlPCBzdGQ6OnNpemVfdCBzeiA+Ci0gICAgICAgIHllc190eXBlIGlzX3djaGFyX3RfYXJyYXlf
aW1wbCggY29uc3Qgd2NoYXJfdCBCT09TVF9SQU5HRV9BUlJBWV9SRUYoKVtzel0gKTsKLSAgICAg
ICAgbm9fdHlwZSAgaXNfd2NoYXJfdF9hcnJheV9pbXBsKCAuLi4gKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgeWVzX3R5cGUgaXNfY2hhcl9wdHJfaW1w
bCggY2hhciogY29uc3QgKTsKLSAgICAgICAgbm9fdHlwZSAgaXNfY2hhcl9wdHJfaW1wbCggLi4u
ICk7Ci0gICAgICAgIAotICAgICAgICB5ZXNfdHlwZSBpc19jb25zdF9jaGFyX3B0cl9pbXBsKCBj
b25zdCBjaGFyKiBjb25zdCApOwotICAgICAgICBub190eXBlICBpc19jb25zdF9jaGFyX3B0cl9p
bXBsKCAuLi4gKTsKLQotICAgICAgICB5ZXNfdHlwZSBpc193Y2hhcl90X3B0cl9pbXBsKCB3Y2hh
cl90KiBjb25zdCApOwotICAgICAgICBub190eXBlICBpc193Y2hhcl90X3B0cl9pbXBsKCAuLi4g
KTsKLSAgICAgICAgCi0gICAgICAgIHllc190eXBlIGlzX2NvbnN0X3djaGFyX3RfcHRyX2ltcGwo
IGNvbnN0IHdjaGFyX3QqIGNvbnN0ICk7Ci0gICAgICAgIG5vX3R5cGUgIGlzX2NvbnN0X3djaGFy
X3RfcHRyX2ltcGwoIC4uLiApOwotICAgICAgICAKLSAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAg
ICAgICAvLyBwYWlyCi0gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotICAgICAgICB0ZW1wbGF0ZTwg
dHlwZW5hbWUgSXRlcmF0b3IgPgotICAgICAgICB5ZXNfdHlwZSBpc19wYWlyX2ltcGwoIGNvbnN0
IHN0ZDo6cGFpcjxJdGVyYXRvcixJdGVyYXRvcj4qICk7Ci0gICAgICAgIG5vX3R5cGUgIGlzX3Bh
aXJfaW1wbCggLi4uICk7Ci0KLSAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgICAgICAvLyB0YWdz
Ci0gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotICAgICAgICBzdHJ1Y3QgY2hhcl9vcl93Y2hhcl90
X2FycmF5X3RhZyB7fTsKLSAgICAgICAgCi0gICAgfSAvLyBuYW1lc3BhY2UgJ3JhbmdlX2RldGFp
bCcKLSAgICAKLX0gLy8gbmFtZXNwYWNlICdib29zdCcKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS9kaWZmZXJlbmNl
X3R5cGUuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFu
Z2UvZGlmZmVyZW5jZV90eXBlLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJi
M2M1ZjU1MjBmN2VhN2M5OTgzNjU5ZDUwMDdiM2EyY2Y4MDUwOS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9yYW5nZS9kaWZmZXJlbmNlX3R5cGUuaHBwCisrKyAvZGV2L251bGwKQEAg
LTEsNDcgKzAsMCBAQAotLy8gQm9vc3QuUmFuZ2UgbGlicmFyeQotLy8KLS8vICBDb3B5cmlnaHQg
VGhvcnN0ZW4gT3R0b3NlbiAyMDAzLTIwMDQuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAotLy8gIGRp
c3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJz
aW9uCi0vLyAgMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8v
IEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9yYW5n
ZS8KLS8vCi0KLSNpZm5kZWYgQk9PU1RfUkFOR0VfRElGRkVSRU5DRV9UWVBFX0hQUAotI2RlZmlu
ZSBCT09TVF9SQU5HRV9ESUZGRVJFTkNFX1RZUEVfSFBQCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVS
KQotIyBwcmFnbWEgb25jZQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9tcGwvYW5kLmhwcD4K
LSNpbmNsdWRlIDxib29zdC9yYW5nZS9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3Jhbmdl
L2l0ZXJhdG9yLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5nZS9oYXNfcmFuZ2VfaXRlcmF0b3Iu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L2l0ZXJhdG9yL2l0ZXJhdG9yX3RyYWl0cy5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX3JlZmVyZW5jZS5ocHA+Ci0KLW5hbWVzcGFj
ZSBib29zdAotewotICAgIG5hbWVzcGFjZSByYW5nZV9kZXRhaWwKLSAgICB7Ci0gICAgICAgIHRl
bXBsYXRlPCBjbGFzcyBULCBib29sIEIgPSBoYXNfdHlwZTxyYW5nZV9pdGVyYXRvcjxUPiA+Ojp2
YWx1ZSA+Ci0gICAgICAgIHN0cnVjdCByYW5nZV9kaWZmZXJlbmNlCi0gICAgICAgIHsgfTsKLQot
ICAgICAgICB0ZW1wbGF0ZTwgY2xhc3MgVCA+Ci0gICAgICAgIHN0cnVjdCByYW5nZV9kaWZmZXJl
bmNlPFQsIHRydWU+Ci0gICAgICAgICAgOiBpdGVyYXRvcl9kaWZmZXJlbmNlPAotICAgICAgICAg
ICAgICAgIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgcmFuZ2VfaXRlcmF0b3I8VD46OnR5cGUKLSAg
ICAgICAgICAgID4KLSAgICAgICAgeyB9OwotICAgIH0KLQotICAgIHRlbXBsYXRlPCBjbGFzcyBU
ID4KLSAgICBzdHJ1Y3QgcmFuZ2VfZGlmZmVyZW5jZQotICAgICAgOiByYW5nZV9kZXRhaWw6OnJh
bmdlX2RpZmZlcmVuY2U8Qk9PU1RfREVEVUNFRF9UWVBFTkFNRSByZW1vdmVfcmVmZXJlbmNlPFQ+
Ojp0eXBlPgotICAgIHsgfTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS9lbmQuaHBwIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZ2UvZW5kLmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZjJhMzMzN2UzNGVhMTM5Nzk0OWNlMmE2Mzc2YmRkNTk5MjE3M2Ex
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS9lbmQuaHBwCisrKyAvZGV2
L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8vIEJvb3N0LlJhbmdlIGxpYnJhcnkKLS8vCi0vLyAg
Q29weXJpZ2h0IFRob3JzdGVuIE90dG9zZW4gMjAwMy0yMDA0LiBVc2UsIG1vZGlmaWNhdGlvbiBh
bmQKLS8vICBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwgVmVyc2lvbgotLy8gIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkKLS8vCi0vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L2xpYnMvcmFuZ2UvCi0vLwotCi0jaWZuZGVmIEJPT1NUX1JBTkdFX0VORF9IUFAKLSNkZWZpbmUg
Qk9PU1RfUkFOR0VfRU5EX0hQUAotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSMgcHJhZ21hIG9u
Y2UKLSNlbmRpZgotCi0jaW5jbHVkZSA8Ym9vc3QvcmFuZ2UvY29uZmlnLmhwcD4KLQotI2lmZGVm
IEJPT1NUX05PX0ZVTkNUSU9OX1RFTVBMQVRFX09SREVSSU5HCi0jaW5jbHVkZSA8Ym9vc3QvcmFu
Z2UvZGV0YWlsL2VuZC5ocHA+Ci0jZWxzZQotCi0jaW5jbHVkZSA8Ym9vc3QvcmFuZ2UvZGV0YWls
L2ltcGxlbWVudGF0aW9uX2hlbHAuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL2l0ZXJhdG9y
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5nZS9jb25zdF9pdGVyYXRvci5ocHA+Ci0KLW5hbWVz
cGFjZSBib29zdAotewotCi0jaWYgIUJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCBCT09T
VF9URVNURURfQVQoMHg1NjQpKQotbmFtZXNwYWNlIHJhbmdlX2RldGFpbAotewotI2VuZGlmCi0K
LSAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgICAgICAvLyBwcmltYXJ5IHRlbXBsYXRlCi0gICAg
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLSAgICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIEMgPgotICAgICAg
ICBpbmxpbmUgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSByYW5nZV9pdGVyYXRvcjxDPjo6dHlwZQot
ICAgICAgICByYW5nZV9lbmQoIEMmIGMgKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gSWYgeW91IGdldCBhIGNvbXBpbGUtZXJyb3IgaGVyZSwgaXQgaXMgbW9zdCBs
aWtlbHkgYmVjYXVzZQotICAgICAgICAgICAgLy8geW91IGhhdmUgbm90IGltcGxlbWVudGVkIHJh
bmdlX2JlZ2luKCkgcHJvcGVybHkgaW4KLSAgICAgICAgICAgIC8vIHRoZSBuYW1lc3BhY2Ugb2Yg
QwotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIHJldHVybiBjLmVuZCgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgICAgICAvLyBwYWlyCi0gICAgICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLQotICAgICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgSXRlcmF0b3IgPgotICAgICAg
ICBpbmxpbmUgSXRlcmF0b3IgcmFuZ2VfZW5kKCBjb25zdCBzdGQ6OnBhaXI8SXRlcmF0b3IsSXRl
cmF0b3I+JiBwICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHAuc2Vjb25kOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9yID4KLSAgICAgICAg
aW5saW5lIEl0ZXJhdG9yIHJhbmdlX2VuZCggc3RkOjpwYWlyPEl0ZXJhdG9yLEl0ZXJhdG9yPiYg
cCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwLnNlY29uZDsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAgICAgLy8gYXJyYXkKLSAgICAgICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotCi0gICAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBzeiA+
Ci0gICAgICAgIGlubGluZSBjb25zdCBUKiByYW5nZV9lbmQoIGNvbnN0IFQgKCZhKVtzel0gKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcmFuZ2VfZGV0YWlsOjphcnJheV9lbmQ8VCxz
ej4oIGEgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBULCBzdGQ6
OnNpemVfdCBzeiA+Ci0gICAgICAgIGlubGluZSBUKiByYW5nZV9lbmQoIFQgKCZhKVtzel0gKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcmFuZ2VfZGV0YWlsOjphcnJheV9lbmQ8VCxz
ej4oIGEgKTsKLSAgICAgICAgfQotCi0jaWYgIUJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19f
LCBCT09TVF9URVNURURfQVQoMHg1NjQpKQotfSAvLyBuYW1lc3BhY2UgJ3JhbmdlX2RldGFpbCcK
LSNlbmRpZgotCi1uYW1lc3BhY2UgcmFuZ2VfYWRsX2JhcnJpZXIKLXsKLQotdGVtcGxhdGU8IGNs
YXNzIFQgPgotaW5saW5lIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgcmFuZ2VfaXRlcmF0b3I8VD46
OnR5cGUgZW5kKCBUJiByICkKLXsKLSNpZiAhQk9PU1RfV09SS0FST1VORChfX0JPUkxBTkRDX18s
IEJPT1NUX1RFU1RFRF9BVCgweDU2NCkpCi0gICAgdXNpbmcgbmFtZXNwYWNlIHJhbmdlX2RldGFp
bDsKLSNlbmRpZgotICAgIHJldHVybiByYW5nZV9lbmQoIHIgKTsKLX0KLQotdGVtcGxhdGU8IGNs
YXNzIFQgPgotaW5saW5lIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgcmFuZ2VfaXRlcmF0b3I8Y29u
c3QgVD46OnR5cGUgZW5kKCBjb25zdCBUJiByICkKLXsKLSNpZiAhQk9PU1RfV09SS0FST1VORChf
X0JPUkxBTkRDX18sIEJPT1NUX1RFU1RFRF9BVCgweDU2NCkpCi0gICAgdXNpbmcgbmFtZXNwYWNl
IHJhbmdlX2RldGFpbDsKLSNlbmRpZgotICAgIHJldHVybiByYW5nZV9lbmQoIHIgKTsKLX0KLQot
ICAgIH0gLy8gbmFtZXNwYWNlIHJhbmdlX2FkbF9iYXJyaWVyCi19IC8vIG5hbWVzcGFjZSAnYm9v
c3QnCi0KLSNlbmRpZiAvLyBCT09TVF9OT19GVU5DVElPTl9URU1QTEFURV9PUkRFUklORwotCi1u
YW1lc3BhY2UgYm9vc3QKLXsKLSAgICBuYW1lc3BhY2UgcmFuZ2VfYWRsX2JhcnJpZXIKLSAgICB7
Ci0gICAgICAgIHRlbXBsYXRlPCBjbGFzcyBUID4KLSAgICAgICAgaW5saW5lIEJPT1NUX0RFRFVD
RURfVFlQRU5BTUUgcmFuZ2VfaXRlcmF0b3I8Y29uc3QgVD46OnR5cGUKLSAgICAgICAgY29uc3Rf
ZW5kKCBjb25zdCBUJiByICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGJvb3N0Ojpy
YW5nZV9hZGxfYmFycmllcjo6ZW5kKCByICk7Ci0gICAgICAgIH0KLSAgICB9IC8vIG5hbWVzcGFj
ZSByYW5nZV9hZGxfYmFycmllcgotICAgIHVzaW5nIG5hbWVzcGFjZSByYW5nZV9hZGxfYmFycmll
cjsKLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS9oYXNfcmFuZ2VfaXRlcmF0
b3IuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFuZ2Uv
aGFzX3JhbmdlX2l0ZXJhdG9yLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVi
NThiMzVkMjFhMjlhOTcxMDNlN2YzNzA5NjJjYjk0NTUzN2M2NC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC9yYW5nZS9oYXNfcmFuZ2VfaXRlcmF0b3IuaHBwCisrKyAvZGV2L251bGwK
QEAgLTEsODMgKzAsMCBAQAotLy8gQm9vc3QuUmFuZ2UgbGlicmFyeQotLy8KLS8vICBDb3B5cmln
aHQgTmVpbCBHcm92ZXMgMjAxMC4gVXNlLCBtb2RpZmljYXRpb24gYW5kCi0vLyAgZGlzdHJpYnV0
aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24KLS8v
ICAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQK
LS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gRm9yIG1v
cmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3JhbmdlLwotLy8K
LS8vIEFja25vd2xlZGdtZW50czoKLS8vIFRpY2tldCAjODM0MTogQXJubyBTY2hvZWRsIC0gaW1w
cm92ZWQgaGFuZGxpbmcgb2YgaGFzX3JhbmdlX2l0ZXJhdG9yIHVwb24KLS8vIHVzZS1jYXNlcyB3
aGVyZSBUIHdhcyBjb25zdC4KLSNpZm5kZWYgQk9PU1RfUkFOR0VfSEFTX0lURVJBVE9SX0hQUF9J
TkNMVURFRAotI2RlZmluZSBCT09TVF9SQU5HRV9IQVNfSVRFUkFUT1JfSFBQX0lOQ0xVREVECi0K
LSNpbmNsdWRlIDxib29zdC9tcGwvYm9vbC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvbXBsL2V2YWxf
aWYuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9oYXNfeHh4LmhwcD4KLSNpbmNsdWRlIDxib29z
dC9yYW5nZS9pdGVyYXRvci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvcmVtb3Zl
X3JlZmVyZW5jZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdXRpbGl0eS9lbmFibGVfaWYuaHBwPgot
Ci1uYW1lc3BhY2UgYm9vc3QKLXsKLSAgICBuYW1lc3BhY2UgcmFuZ2VfZGV0YWlsCi0gICAgewot
ICAgICAgICBCT09TVF9NUExfSEFTX1hYWF9UUkFJVF9ERUYodHlwZSkKLQotICAgICAgICB0ZW1w
bGF0ZTxjbGFzcyBULCBjbGFzcyBFbmFibGVyID0gdm9pZD4KLSAgICAgICAgc3RydWN0IGhhc19y
YW5nZV9pdGVyYXRvcl9pbXBsCi0gICAgICAgICAgICA6IGJvb3N0OjptcGw6OmZhbHNlXwotICAg
ICAgICB7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICAgICAg
c3RydWN0IGhhc19yYW5nZV9pdGVyYXRvcl9pbXBsPAotICAgICAgICAgICAgVCwKLSAgICAgICAg
ICAgIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgOjpib29zdDo6ZW5hYmxlX2lmPAotICAgICAgICAg
ICAgICAgIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgbXBsOjpldmFsX2lmPGlzX2NvbnN0PFQ+LAot
ICAgICAgICAgICAgICAgICAgICBoYXNfdHlwZTxyYW5nZV9jb25zdF9pdGVyYXRvcjwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSByZW1vdmVf
Y29uc3Q8VD46OnR5cGU+ID4sCi0gICAgICAgICAgICAgICAgICAgIGhhc190eXBlPHJhbmdlX211
dGFibGVfaXRlcmF0b3I8VD4gPgotICAgICAgICAgICAgICAgID46OnR5cGUKLSAgICAgICAgICAg
ID46OnR5cGUKLSAgICAgICAgPgotICAgICAgICAgICAgOiBib29zdDo6bXBsOjp0cnVlXwotICAg
ICAgICB7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgRW5h
YmxlciA9IHZvaWQ+Ci0gICAgICAgIHN0cnVjdCBoYXNfcmFuZ2VfY29uc3RfaXRlcmF0b3JfaW1w
bAotICAgICAgICAgICAgOiBib29zdDo6bXBsOjpmYWxzZV8KLSAgICAgICAgewotICAgICAgICB9
OwotCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgICAgIHN0cnVjdCBoYXNfcmFuZ2Vf
Y29uc3RfaXRlcmF0b3JfaW1wbDwKLSAgICAgICAgICAgIFQsCi0gICAgICAgICAgICBCT09TVF9E
RURVQ0VEX1RZUEVOQU1FIDo6Ym9vc3Q6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgICAgICBoYXNf
dHlwZTxyYW5nZV9jb25zdF9pdGVyYXRvcjxUPiA+Ci0gICAgICAgICAgICA+Ojp0eXBlCi0gICAg
ICAgID4KLSAgICAgICAgICAgIDogYm9vc3Q6Om1wbDo6dHJ1ZV8KLSAgICAgICAgewotICAgICAg
ICB9OwotCi0gICAgfSAvLyBuYW1lc3BhY2UgcmFuZ2VfZGV0YWlsCi0KLSAgICB0ZW1wbGF0ZTxj
bGFzcyBUPgotICAgIHN0cnVjdCBoYXNfcmFuZ2VfaXRlcmF0b3IKLSAgICAgICAgOiByYW5nZV9k
ZXRhaWw6Omhhc19yYW5nZV9pdGVyYXRvcl9pbXBsPAotICAgICAgICAgICAgQk9PU1RfREVEVUNF
RF9UWVBFTkFNRSByZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlPgotICAgIHt9OwotCi0gICAgdGVt
cGxhdGU8Y2xhc3MgVD4KLSAgICBzdHJ1Y3QgaGFzX3JhbmdlX2NvbnN0X2l0ZXJhdG9yCi0gICAg
ICAgIDogcmFuZ2VfZGV0YWlsOjpoYXNfcmFuZ2VfY29uc3RfaXRlcmF0b3JfaW1wbDwKLSAgICAg
ICAgICAgIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgcmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZT4K
LSAgICB7fTsKLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBpbmNsdWRlIGd1YXJk
Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3JhbmdlL2l0ZXJhdG9yLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3JhbmdlL2l0ZXJhdG9yLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Mjk1NjM1M2FiNWFiM2E2ODIyM2RjZWM4NTk3YWEzOWFhMThiYTdmNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC9yYW5nZS9pdGVyYXRvci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw3
NCArMCwwIEBACi0vLyBCb29zdC5SYW5nZSBsaWJyYXJ5Ci0vLwotLy8gIENvcHlyaWdodCBUaG9y
c3RlbiBPdHRvc2VuIDIwMDMtMjAwNC4gVXNlLCBtb2RpZmljYXRpb24gYW5kCi0vLyAgZGlzdHJp
YnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24K
LS8vICAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkg
YXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gRm9y
IG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3JhbmdlLwot
Ly8KLQotI2lmbmRlZiBCT09TVF9SQU5HRV9JVEVSQVRPUl9IUFAKLSNkZWZpbmUgQk9PU1RfUkFO
R0VfSVRFUkFUT1JfSFBQCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyBwcmFnbWEgb25jZQot
I2VuZGlmCi0KLSNpbmNsdWRlIDxib29zdC9yYW5nZS9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L3JhbmdlL3JhbmdlX2Z3ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZ2UvbXV0YWJsZV9p
dGVyYXRvci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZ2UvY29uc3RfaXRlcmF0b3IuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnN0LmhwcD4KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9yZW1vdmVfY29uc3QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L21wbC9ldmFs
X2lmLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0Ci17Ci0KLSNpZiBCT09TVF9XT1JLQVJPVU5EKEJP
T1NUX01TVkMsID09IDEzMTApICAKLQotICAgIG5hbWVzcGFjZSByYW5nZV9kZXRhaWxfdmM3XzEg
IAotICAgIHsgIAotICAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBDLCB0eXBlbmFtZSBTaWcgPSB2
b2lkKEMpID4gIAotICAgICAgIHN0cnVjdCByYW5nZV9pdGVyYXRvciAgCi0gICAgICAgeyAgCi0g
ICAgICAgICAgIHR5cGVkZWYgQk9PU1RfUkFOR0VfREVEVUNFRF9UWVBFTkFNRSAgIAotICAgICAg
ICAgICAgICAgbXBsOjpldmFsX2lmX2M8IGlzX2NvbnN0PEM+Ojp2YWx1ZSwgICAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByYW5nZV9jb25zdF9pdGVyYXRvcjwgdHlwZW5hbWUgcmVt
b3ZlX2NvbnN0PEM+Ojp0eXBlID4sICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
YW5nZV9tdXRhYmxlX2l0ZXJhdG9yPEM+ID46OnR5cGUgdHlwZTsgIAotICAgICAgIH07ICAKLSAg
ICAKLSAgICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgQywgdHlwZW5hbWUgVCA+ICAKLSAgICAgICBz
dHJ1Y3QgcmFuZ2VfaXRlcmF0b3I8IEMsIHZvaWQoVFtdKSA+ICAKLSAgICAgICB7ICAKLSAgICAg
ICAgICAgdHlwZWRlZiBUKiB0eXBlOyAgCi0gICAgICAgfTsgICAgICAgCi0gICAgfSAgCi0gICAg
Ci0gICAgdGVtcGxhdGU8IHR5cGVuYW1lIEMsIHR5cGVuYW1lIEVuYWJsZXI9dm9pZCA+Ci0gICAg
c3RydWN0IHJhbmdlX2l0ZXJhdG9yCi0gICAgewotCi0gICAgICAgIHR5cGVkZWYgQk9PU1RfUkFO
R0VfREVEVUNFRF9UWVBFTkFNRSAgCi0gICAgICAgICAgICAgICByYW5nZV9kZXRhaWxfdmM3XzE6
OnJhbmdlX2l0ZXJhdG9yPEM+Ojp0eXBlIHR5cGU7ICAKLQotICAgIH07Ci0KLSNlbHNlCi0KLSAg
ICB0ZW1wbGF0ZTwgdHlwZW5hbWUgQywgdHlwZW5hbWUgRW5hYmxlcj12b2lkID4KLSAgICBzdHJ1
Y3QgcmFuZ2VfaXRlcmF0b3IKLSAgICAgIDogbXBsOjppZl9jPAotICAgICAgICAgICAgaXNfY29u
c3Q8dHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxDPjo6dHlwZT46OnZhbHVlLAotICAgICAgICAg
ICAgcmFuZ2VfY29uc3RfaXRlcmF0b3I8dHlwZW5hbWUgcmVtb3ZlX2NvbnN0PHR5cGVuYW1lIHJl
bW92ZV9yZWZlcmVuY2U8Qz46OnR5cGU+Ojp0eXBlPiwKLSAgICAgICAgICAgIHJhbmdlX211dGFi
bGVfaXRlcmF0b3I8dHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxDPjo6dHlwZT4KLSAgICAgICAg
Pjo6dHlwZQotICAgIHsKLSAgICB9OwotCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC9yYW5nZS9tdXRhYmxlX2l0ZXJhdG9yLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmdlL211dGFibGVfaXRlcmF0b3IuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTI0NjY2Njc5YTIzMzA1ZmU1OGU0OTlmYTI1MTY3OTlk
Yjg5NzZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmdlL211dGFibGVfaXRl
cmF0b3IuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLy8gQm9vc3QuUmFuZ2Ug
bGlicmFyeQotLy8KLS8vICBDb3B5cmlnaHQgVGhvcnN0ZW4gT3R0b3NlbiAyMDAzLTIwMDQuIFVz
ZSwgbW9kaWZpY2F0aW9uIGFuZAotLy8gIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRoZSBC
b29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCi0vLyAgMS4wLiAoU2VlIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5v
cmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0
cDovL3d3dy5ib29zdC5vcmcvbGlicy9yYW5nZS8KLS8vCi0KLSNpZm5kZWYgQk9PU1RfUkFOR0Vf
TVVUQUJMRV9JVEVSQVRPUl9IUFAKLSNkZWZpbmUgQk9PU1RfUkFOR0VfTVVUQUJMRV9JVEVSQVRP
Ul9IUFAKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jIHByYWdtYSBvbmNlCi0jZW5kaWYKLQot
I2luY2x1ZGUgPGJvb3N0L3JhbmdlL2NvbmZpZy5ocHA+Ci0KLSNpbmNsdWRlIDxib29zdC9yYW5n
ZS9yYW5nZV9md2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL2RldGFpbC9leHRyYWN0X29w
dGlvbmFsX3R5cGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9yZWZl
cmVuY2UuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2l0ZXJhdG9yL2l0ZXJhdG9yX3RyYWl0cy5ocHA+
Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi1uYW1lc3BhY2UgYm9v
c3QKLXsKLQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gZGVmYXVsdAotICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0gICAgCi0gICAgbmFtZXNwYWNlIHJhbmdlX2RldGFpbAotICAgIHsKLQot
Qk9PU1RfUkFOR0VfRVhUUkFDVF9PUFRJT05BTF9UWVBFKCBpdGVyYXRvciApCi0KLXRlbXBsYXRl
PCB0eXBlbmFtZSBDID4KLXN0cnVjdCByYW5nZV9tdXRhYmxlX2l0ZXJhdG9yCi0gICAgICAgIDog
cmFuZ2VfZGV0YWlsOjpleHRyYWN0X2l0ZXJhdG9yPAotICAgICAgICAgICAgQk9PU1RfREVEVUNF
RF9UWVBFTkFNRSByZW1vdmVfcmVmZXJlbmNlPEM+Ojp0eXBlPgote307Ci0KLS8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCi0vLyBwYWlyCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi10ZW1wbGF0ZTwgdHlwZW5hbWUg
SXRlcmF0b3IgPgotc3RydWN0IHJhbmdlX211dGFibGVfaXRlcmF0b3I8IHN0ZDo6cGFpcjxJdGVy
YXRvcixJdGVyYXRvcj4gPgotewotICAgIHR5cGVkZWYgSXRlcmF0b3IgdHlwZTsKLX07Ci0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLyBhcnJheQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotdGVtcGxhdGU8
IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IHN6ID4KLXN0cnVjdCByYW5nZV9tdXRhYmxlX2l0ZXJh
dG9yPCBUW3N6XSA+Ci17Ci0gICAgdHlwZWRlZiBUKiB0eXBlOwotfTsKLQotICAgIH0gLy8gbmFt
ZXNwYWNlIHJhbmdlX2RldGFpbAotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBFbmFi
bGVyPXZvaWQ+Ci1zdHJ1Y3QgcmFuZ2VfbXV0YWJsZV9pdGVyYXRvcgotICAgICAgICA6IHJhbmdl
X2RldGFpbDo6cmFuZ2VfbXV0YWJsZV9pdGVyYXRvcjwKLSAgICAgICAgICAgIEJPT1NUX0RFRFVD
RURfVFlQRU5BTUUgcmVtb3ZlX3JlZmVyZW5jZTxDPjo6dHlwZQotICAgICAgICA+Ci17Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jaW5jbHVkZSA8Ym9vc3QvcmFuZ2UvZGV0YWlsL21z
dmNfaGFzX2l0ZXJhdG9yX3dvcmthcm91bmQuaHBwPgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmdlL3JhbmdlX2Z3ZC5o
cHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS9yYW5n
ZV9md2QuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTZlMDBmNTUzMWE5MmY3
MjkyMzQyMzg4ZDQwNGJhNWJhMGViOGMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3JhbmdlL3JhbmdlX2Z3ZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vLyBC
b29zdC5SYW5nZSBsaWJyYXJ5Ci0vLwotLy8gIENvcHlyaWdodCBOZWlsIEdyb3ZlcyAyMDAzLTIw
MDQuCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRv
IHRoZSBCb29zdCBTb2Z0d2FyZQotLy8gIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29t
cGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBz
ZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9yYW5nZS8KLS8vCi0jaWZuZGVmIEJPT1NUX1JB
TkdFX1JBTkdFX0ZXRF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfUkFOR0VfUkFOR0VfRldE
X0hQUF9JTkNMVURFRAotCi1uYW1lc3BhY2UgYm9vc3QKLXsKLQotLy8gRXh0ZW5zaW9uIHBvaW50
cwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIEVuYWJsZXI+Ci0gICAgc3RydWN0
IHJhbmdlX2l0ZXJhdG9yOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgRW5h
Ymxlcj4KLSAgICBzdHJ1Y3QgcmFuZ2VfbXV0YWJsZV9pdGVyYXRvcjsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEMsIHR5cGVuYW1lIEVuYWJsZXI+Ci0gICAgc3RydWN0IHJhbmdlX2NvbnN0X2l0
ZXJhdG9yOwotCi0vLyBDb3JlIGNsYXNzZXMKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
clQ+Ci0gICAgY2xhc3MgaXRlcmF0b3JfcmFuZ2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
b3J3YXJkUmFuZ2U+Ci0gICAgY2xhc3Mgc3ViX3JhbmdlOwotCi0vLyBNZXRhLWZ1bmN0aW9ucwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IHJhbmdlX2NhdGVnb3J5OwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgcmFuZ2VfZGlmZmVyZW5jZTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IHJhbmdlX3BvaW50ZXI7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCByYW5nZV9yZWZlcmVuY2U7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCByYW5nZV9yZXZlcnNlX2l0ZXJhdG9y
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgcmFuZ2Vfc2l6ZTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IHJhbmdlX3ZhbHVlOwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgaGFzX3JhbmdlX2l0ZXJhdG9yOwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgaGFzX3JhbmdlX2NvbnN0X2l0ZXJh
dG9yOwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gaW5jbHVkZSBndWFyZApk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvcmFu
Z2Uvc2l6ZS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9y
YW5nZS9zaXplLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YzOGRiOGMxZWIy
ODAyMzIwZmQzMzRhMTQ2NGE2MzdiNDg0NWE2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9yYW5nZS9zaXplLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8vIEJv
b3N0LlJhbmdlIGxpYnJhcnkKLS8vCi0vLyAgQ29weXJpZ2h0IFRob3JzdGVuIE90dG9zZW4gMjAw
My0yMDA0LiBVc2UsIG1vZGlmaWNhdGlvbiBhbmQKLS8vICBkaXN0cmlidXRpb24gaXMgc3ViamVj
dCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbgotLy8gIDEuMC4gKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyBGb3IgbW9yZSBpbmZvcm1hdGlv
biwgc2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvcmFuZ2UvCi0vLwotCi0jaWZuZGVmIEJP
T1NUX1JBTkdFX1NJWkVfSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkdFX1NJWkVfSFBQCi0KLSNpZiBk
ZWZpbmVkKF9NU0NfVkVSKQotIyBwcmFnbWEgb25jZQotI2VuZGlmCi0KLSNpbmNsdWRlIDxib29z
dC9yYW5nZS9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL2JlZ2luLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9yYW5nZS9lbmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL3NpemVf
dHlwZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZ2UvZGV0YWlsL2hhc19tZW1iZXJfc2l6ZS5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvYXNzZXJ0LmhwcD4KLSNpbmNsdWRlIDxib29zdC9jc3RkaW50
LmhwcD4KLSNpbmNsdWRlIDxib29zdC91dGlsaXR5LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0Ci17
Ci0gICAgbmFtZXNwYWNlIHJhbmdlX2RldGFpbAotICAgIHsKLQotICAgICAgICB0ZW1wbGF0ZTxj
bGFzcyBTaW5nbGVQYXNzUmFuZ2U+Ci0gICAgICAgIGlubGluZSB0eXBlbmFtZSA6OmJvb3N0Ojpl
bmFibGVfaWY8Ci0gICAgICAgICAgICBoYXNfbWVtYmVyX3NpemU8U2luZ2xlUGFzc1JhbmdlPiwK
LSAgICAgICAgICAgIHR5cGVuYW1lIHJhbmdlX3NpemU8Y29uc3QgU2luZ2xlUGFzc1JhbmdlPjo6
dHlwZQotICAgICAgICA+Ojp0eXBlCi0gICAgICAgIHJhbmdlX2NhbGN1bGF0ZV9zaXplKGNvbnN0
IFNpbmdsZVBhc3NSYW5nZSYgcm5nKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcm5n
LnNpemUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIFNpbmdsZVBhc3NS
YW5nZT4KLSAgICAgICAgaW5saW5lIHR5cGVuYW1lIGRpc2FibGVfaWY8Ci0gICAgICAgICAgICBo
YXNfbWVtYmVyX3NpemU8U2luZ2xlUGFzc1JhbmdlPiwKLSAgICAgICAgICAgIHR5cGVuYW1lIHJh
bmdlX3NpemU8Y29uc3QgU2luZ2xlUGFzc1JhbmdlPjo6dHlwZQotICAgICAgICA+Ojp0eXBlCi0g
ICAgICAgIHJhbmdlX2NhbGN1bGF0ZV9zaXplKGNvbnN0IFNpbmdsZVBhc3NSYW5nZSYgcm5nKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpkaXN0YW5jZShib29zdDo6YmVnaW4o
cm5nKSwgYm9vc3Q6OmVuZChybmcpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRl
PGNsYXNzIFNpbmdsZVBhc3NSYW5nZT4KLSAgICBpbmxpbmUgdHlwZW5hbWUgcmFuZ2Vfc2l6ZTxj
b25zdCBTaW5nbGVQYXNzUmFuZ2U+Ojp0eXBlCi0gICAgc2l6ZShjb25zdCBTaW5nbGVQYXNzUmFu
Z2UmIHJuZykKLSAgICB7Ci0vLyBWZXJ5IHN0cmFuZ2UgdGhpbmdzIGhhcHBlbiBvbiBzb21lIGNv
bXBpbGVycyB0aGF0IGhhdmUgdGhlIHJhbmdlIGNvbmNlcHQKLS8vIGFzc2VydHMgZGlzYWJsZWQu
IFRoaXMgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbiBpcyBjbGVhcmx5IHJlZHVuZGFudCBvbiBhCi0v
LyB3b3JraW5nIGNvbXBpbGVyIGJ1dCBpcyB2aXRhbCBmb3IgYXQgbGVhc3Qgc29tZSBjb21waWxl
cnMgc3VjaCBhcyBjbGFuZyA0LjIKLS8vIGJ1dCBvbmx5IG9uIHRoZSBNYWMhCi0jaWYgQk9PU1Rf
UkFOR0VfRU5BQkxFX0NPTkNFUFRfQVNTRVJUID09IDEKLSAgICAgICAgQk9PU1RfUkFOR0VfQ09O
Q0VQVF9BU1NFUlQoKGJvb3N0OjpTaW5nbGVQYXNzUmFuZ2VDb25jZXB0PFNpbmdsZVBhc3NSYW5n
ZT4pKTsKLSNlbmRpZgotCi0jaWYgIUJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCBCT09T
VF9URVNURURfQVQoMHg1NjQpKSAmJiBcCi0gICAgIUJPT1NUX1dPUktBUk9VTkQoX19HTlVDX18s
IDwgMykgXAotICAgIC8qKi8KLSAgICAgICAgdXNpbmcgbmFtZXNwYWNlIHJhbmdlX2RldGFpbDsK
LSNlbmRpZgotCi0gICAgICAgIHJldHVybiByYW5nZV9jYWxjdWxhdGVfc2l6ZShybmcpOwotICAg
IH0KLQotfSAvLyBuYW1lc3BhY2UgJ2Jvb3N0JwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmdlL3NpemVfdHlwZS5ocHAg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS9zaXplX3R5
cGUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTJlYTgxYmI5OGY1ZjRmZmFk
Zjg5YTgyZWQ0OThhZjJmZTNkMTFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3Jh
bmdlL3NpemVfdHlwZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vLyBCb29z
dC5SYW5nZSBsaWJyYXJ5Ci0vLwotLy8gIENvcHlyaWdodCBUaG9yc3RlbiBPdHRvc2VuIDIwMDMt
MjAwNC4gVXNlLCBtb2RpZmljYXRpb24gYW5kCi0vLyAgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3Qg
dG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24KLS8vICAxLjAuIChTZWUgYWNj
b21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0vLwotLy8gRm9yIG1vcmUgaW5mb3JtYXRpb24s
IHNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3JhbmdlLwotLy8KLQotI2lmbmRlZiBCT09T
VF9SQU5HRV9TSVpFX1RZUEVfSFBQCi0jZGVmaW5lIEJPT1NUX1JBTkdFX1NJWkVfVFlQRV9IUFAK
LQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jIHByYWdtYSBvbmNlCi0jZW5kaWYKLQotI2luY2x1
ZGUgPGJvb3N0L3JhbmdlL2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFuZ2UvZGlmZmVy
ZW5jZV90eXBlLmhwcD4KLSNpbmNsdWRlIDxib29zdC9yYW5nZS9jb25jZXB0cy5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvcmFuZ2UvaGFzX3JhbmdlX2l0ZXJhdG9yLmhwcD4KLQotI2luY2x1ZGUgPGJv
b3N0L3V0aWxpdHkvZW5hYmxlX2lmLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9t
YWtlX3Vuc2lnbmVkLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY29u
c3QuaHBwPgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotbmFtZXNw
YWNlIGJvb3N0Ci17Ci0gICAgbmFtZXNwYWNlIGRldGFpbAotICAgIHsKLQotICAgICAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotICAgICAgICAvLyBkZWZhdWx0Ci0gICAgICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgY2xhc3MgaGFzX3Np
emVfdHlwZQotICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlZGVmIGNoYXIgbm9fdHlwZTsKLSAg
ICAgICAgICAgIHN0cnVjdCB5ZXNfdHlwZSB7IGNoYXIgZHVtbXlbMl07IH07Ci0KLSAgICAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEM+Ci0gICAgICAgICAgICBzdGF0aWMgeWVzX3R5cGUgdGVz
dChCT09TVF9ERURVQ0VEX1RZUEVOQU1FIEM6OnNpemVfdHlwZSB4KTsKLQotICAgICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQz4KLSAgICAgICAgICAgIHN0YXRpYyBub190eXBlIHRlc3QoLi4u
KTsKLQotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1
ZSA9IHNpemVvZih0ZXN0PFQ+KDApKSA9PSBzaXplb2YoeWVzX3R5cGUpOwotICAgICAgICB9Owot
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIEVuYWJsZXI9dm9pZD4KLSAg
ICAgICAgc3RydWN0IHJhbmdlX3NpemVfCi0gICAgICAgIHsKLSAgICAgICAgICAgIHR5cGVkZWYg
Qk9PU1RfREVEVUNFRF9UWVBFTkFNRSBtYWtlX3Vuc2lnbmVkPAotICAgICAgICAgICAgICAgIEJP
T1NUX0RFRFVDRURfVFlQRU5BTUUgcmFuZ2VfZGlmZmVyZW5jZTxDPjo6dHlwZQotICAgICAgICAg
ICAgPjo6dHlwZSB0eXBlOwotICAgICAgICB9OwotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEM+Ci0gICAgICAgIHN0cnVjdCByYW5nZV9zaXplXzwKLSAgICAgICAgICAgIEMsCi0gICAgICAg
ICAgICBCT09TVF9ERURVQ0VEX1RZUEVOQU1FIDo6Ym9vc3Q6OmVuYWJsZV9pZjxoYXNfc2l6ZV90
eXBlPEM+LCB2b2lkPjo6dHlwZQotICAgICAgICA+Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHR5
cGVkZWYgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSBDOjpzaXplX3R5cGUgdHlwZTsKLSAgICAgICAg
fTsKLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDLCBib29sIEIgPSByYW5nZV9kZXRhaWw6
Omhhc190eXBlPCByYW5nZV9pdGVyYXRvcjxDPiA+Ojp2YWx1ZT4KLSAgICAgICAgc3RydWN0IHJh
bmdlX3NpemUKLSAgICAgICAgeyB9OwotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEM+Ci0g
ICAgICAgIHN0cnVjdCByYW5nZV9zaXplPEMsIHRydWU+Ci0gICAgICAgICAgOiByYW5nZV9zaXpl
XzxDPgotICAgICAgICB7IH07Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8IGNsYXNzIFQgPgotICAg
IHN0cnVjdCByYW5nZV9zaXplIDoKLSAgICAgICAgZGV0YWlsOjpyYW5nZV9zaXplPFQ+Ci0gICAg
eyB9OwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9yYW5nZS92YWx1ZV90eXBl
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JhbmdlL3Zh
bHVlX3R5cGUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTMxODdlYzBlMDgw
MDNlNGRiM2QxNmI1ZDg0ZGU3YzY1MWFkM2QyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3JhbmdlL3ZhbHVlX3R5cGUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAot
Ly8gQm9vc3QuUmFuZ2UgbGlicmFyeQotLy8KLS8vICBDb3B5cmlnaHQgVGhvcnN0ZW4gT3R0b3Nl
biAyMDAzLTIwMDQuIFVzZSwgbW9kaWZpY2F0aW9uIGFuZAotLy8gIGRpc3RyaWJ1dGlvbiBpcyBz
dWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uCi0vLyAgMS4wLiAo
U2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8KLS8vIEZvciBtb3JlIGluZm9y
bWF0aW9uLCBzZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9yYW5nZS8KLS8vCi0KLSNpZm5k
ZWYgQk9PU1RfUkFOR0VfVkFMVUVfVFlQRV9IUFAKLSNkZWZpbmUgQk9PU1RfUkFOR0VfVkFMVUVf
VFlQRV9IUFAKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jIHByYWdtYSBvbmNlCi0jZW5kaWYK
LQotI2luY2x1ZGUgPGJvb3N0L3JhbmdlL2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcmFu
Z2UvaXRlcmF0b3IuaHBwPgotCi0jaW5jbHVkZSA8Ym9vc3QvaXRlcmF0b3IvaXRlcmF0b3JfdHJh
aXRzLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0Ci17Ci0gICAgdGVtcGxhdGU8IGNsYXNzIFQgPgot
ICAgIHN0cnVjdCByYW5nZV92YWx1ZSA6IGl0ZXJhdG9yX3ZhbHVlPCB0eXBlbmFtZSByYW5nZV9p
dGVyYXRvcjxUPjo6dHlwZSA+Ci0gICAgeyB9OwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JlZ2V4L3BlbmRpbmcvdW5p
Y29kZV9pdGVyYXRvci5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC9yZWdleC9wZW5kaW5nL3VuaWNvZGVfaXRlcmF0b3IuaHBwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiZWNiMTdhZDVmYjA2ODg0MzI4NjgxZDMwYzA2ZGMyOWZiM2JiMmEyLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3JlZ2V4L3BlbmRpbmcvdW5pY29kZV9pdGVy
YXRvci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw3ODUgKzAsMCBAQAotLyoKLSAqCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMDQKLSAqIEpvaG4gTWFkZG9jawotICoKLSAqIFVzZSwgbW9kaWZpY2F0aW9u
IGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIAotICogQm9vc3QgU29mdHdhcmUg
TGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgCi0gKiBMSUNFTlNF
XzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQp
Ci0gKgotICovCi0gCi0gLyoKLSAgKiAgIExPQ0FUSU9OOiAgICBzZWUgaHR0cDovL3d3dy5ib29z
dC5vcmcgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24uCi0gICogICBGSUxFICAgICAgICAgdW5pY29k
ZV9pdGVyYXRvci5ocHAKLSAgKiAgIFZFUlNJT04gICAgICBzZWUgPGJvb3N0L3ZlcnNpb24uaHBw
PgotICAqICAgREVTQ1JJUFRJT046IEl0ZXJhdG9yIGFkYXB0ZXJzIGZvciBjb252ZXJ0aW5nIGJl
dHdlZW4gZGlmZmVyZW50IFVuaWNvZGUgZW5jb2RpbmdzLgotICAqLwotCi0vKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgotCi1Db250ZW50czoKLX5+fn5+fn5+fgotCi0xKSBSZWFkIE9ubHksIElucHV0IEFk
YXB0ZXJzOgotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotdGVtcGxhdGUgPGNsYXNz
IEJhc2VJdGVyYXRvciwgY2xhc3MgVThUeXBlID0gOjpib29zdDo6dWludDhfdD4KLWNsYXNzIHUz
Ml90b191OF9pdGVyYXRvcjsKLQotQWRhcHRzIHNlcXVlbmNlIG9mIFVURi0zMiBjb2RlIHBvaW50
cyB0byAibG9vayBsaWtlIiBhIHNlcXVlbmNlIG9mIFVURi04LgotCi10ZW1wbGF0ZSA8Y2xhc3Mg
QmFzZUl0ZXJhdG9yLCBjbGFzcyBVMzJUeXBlID0gOjpib29zdDo6dWludDMyX3Q+Ci1jbGFzcyB1
OF90b191MzJfaXRlcmF0b3I7Ci0KLUFkYXB0cyBzZXF1ZW5jZSBvZiBVVEYtOCBjb2RlIHBvaW50
cyB0byAibG9vayBsaWtlIiBhIHNlcXVlbmNlIG9mIFVURi0zMi4KLQotdGVtcGxhdGUgPGNsYXNz
IEJhc2VJdGVyYXRvciwgY2xhc3MgVTE2VHlwZSA9IDo6Ym9vc3Q6OnVpbnQxNl90PgotY2xhc3Mg
dTMyX3RvX3UxNl9pdGVyYXRvcjsKLQotQWRhcHRzIHNlcXVlbmNlIG9mIFVURi0zMiBjb2RlIHBv
aW50cyB0byAibG9vayBsaWtlIiBhIHNlcXVlbmNlIG9mIFVURi0xNi4KLQotdGVtcGxhdGUgPGNs
YXNzIEJhc2VJdGVyYXRvciwgY2xhc3MgVTMyVHlwZSA9IDo6Ym9vc3Q6OnVpbnQzMl90PgotY2xh
c3MgdTE2X3RvX3UzMl9pdGVyYXRvcjsKLQotQWRhcHRzIHNlcXVlbmNlIG9mIFVURi0xNiBjb2Rl
IHBvaW50cyB0byAibG9vayBsaWtlIiBhIHNlcXVlbmNlIG9mIFVURi0zMi4KLQotMikgU2luZ2xl
IHBhc3Mgb3V0cHV0IGl0ZXJhdG9yIGFkYXB0ZXJzOgotCi10ZW1wbGF0ZSA8Y2xhc3MgQmFzZUl0
ZXJhdG9yPgotY2xhc3MgdXRmOF9vdXRwdXRfaXRlcmF0b3I7Ci0KLUFjY2VwdHMgVVRGLTMyIGNv
ZGUgcG9pbnRzIGFuZCBmb3J3YXJkcyB0aGVtIG9uIGFzIFVURi04IGNvZGUgcG9pbnRzLgotCi10
ZW1wbGF0ZSA8Y2xhc3MgQmFzZUl0ZXJhdG9yPgotY2xhc3MgdXRmMTZfb3V0cHV0X2l0ZXJhdG9y
OwotCi1BY2NlcHRzIFVURi0zMiBjb2RlIHBvaW50cyBhbmQgZm9yd2FyZHMgdGhlbSBvbiBhcyBV
VEYtMTYgY29kZSBwb2ludHMuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgQk9P
U1RfUkVHRVhfVU5JQ09ERV9JVEVSQVRPUl9IUFAKLSNkZWZpbmUgQk9PU1RfUkVHRVhfVU5JQ09E
RV9JVEVSQVRPUl9IUFAKLSNpbmNsdWRlIDxib29zdC9jc3RkaW50LmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9hc3NlcnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2l0ZXJhdG9yL2l0ZXJhdG9yX2ZhY2Fk
ZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qvc3RhdGljX2Fzc2VydC5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvdGhyb3dfZXhjZXB0aW9uLmhwcD4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0jaWZuZGVmIEJP
T1NUX05PX1NURF9MT0NBTEUKLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPGlvcz4KLSNl
bmRpZgotI2luY2x1ZGUgPGxpbWl0cy5oPiAvLyBDSEFSX0JJVAotCi1uYW1lc3BhY2UgYm9vc3R7
Ci0KLW5hbWVzcGFjZSBkZXRhaWx7Ci0KLXN0YXRpYyBjb25zdCA6OmJvb3N0Ojp1aW50MTZfdCBo
aWdoX3N1cnJvZ2F0ZV9iYXNlID0gMHhEN0MwdTsKLXN0YXRpYyBjb25zdCA6OmJvb3N0Ojp1aW50
MTZfdCBsb3dfc3Vycm9nYXRlX2Jhc2UgPSAweERDMDB1Owotc3RhdGljIGNvbnN0IDo6Ym9vc3Q6
OnVpbnQzMl90IHRlbl9iaXRfbWFzayA9IDB4M0ZGdTsKLQotaW5saW5lIGJvb2wgaXNfaGlnaF9z
dXJyb2dhdGUoOjpib29zdDo6dWludDE2X3QgdikKLXsKLSAgIHJldHVybiAodiAmIDB4RkZGRkZD
MDB1KSA9PSAweGQ4MDB1OwotfQotaW5saW5lIGJvb2wgaXNfbG93X3N1cnJvZ2F0ZSg6OmJvb3N0
Ojp1aW50MTZfdCB2KQotewotICAgcmV0dXJuICh2ICYgMHhGRkZGRkMwMHUpID09IDB4ZGMwMHU7
Ci19Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWlubGluZSBib29sIGlzX3N1cnJvZ2F0ZShUIHYpCi17
Ci0gICByZXR1cm4gKHYgJiAweEZGRkZGODAwdSkgPT0gMHhkODAwOwotfQotCi1pbmxpbmUgdW5z
aWduZWQgdXRmOF9ieXRlX2NvdW50KGJvb3N0Ojp1aW50OF90IGMpCi17Ci0gICAvLyBpZiB0aGUg
bW9zdCBzaWduaWZpY2FudCBiaXQgd2l0aCBhIHplcm8gaW4gaXQgaXMgaW4gcG9zaXRpb24KLSAg
IC8vIDgtTiB0aGVuIHRoZXJlIGFyZSBOIGJ5dGVzIGluIHRoaXMgVVRGLTggc2VxdWVuY2U6Ci0g
ICBib29zdDo6dWludDhfdCBtYXNrID0gMHg4MHU7Ci0gICB1bnNpZ25lZCByZXN1bHQgPSAwOwot
ICAgd2hpbGUoYyAmIG1hc2spCi0gICB7Ci0gICAgICArK3Jlc3VsdDsKLSAgICAgIG1hc2sgPj49
IDE7Ci0gICB9Ci0gICByZXR1cm4gKHJlc3VsdCA9PSAwKSA/IDEgOiAoKHJlc3VsdCA+IDQpID8g
NCA6IHJlc3VsdCk7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCB1dGY4X3RyYWlsaW5nX2J5dGVfY291
bnQoYm9vc3Q6OnVpbnQ4X3QgYykKLXsKLSAgIHJldHVybiB1dGY4X2J5dGVfY291bnQoYykgLSAx
OwotfQotCi0jaWZkZWYgQk9PU1RfTVNWQwotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTo0MTAwKQotI2VuZGlmCi0jaWZuZGVmIEJPT1NUX05PX0VYQ0VQVElP
TlMKLUJPT1NUX05PUkVUVVJOCi0jZW5kaWYKLWlubGluZSB2b2lkIGludmFsaWRfdXRmMzJfY29k
ZV9wb2ludCg6OmJvb3N0Ojp1aW50MzJfdCB2YWwpCi17Ci0jaWZuZGVmIEJPT1NUX05PX1NURF9M
T0NBTEUKLSAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOwotICAgc3MgPDwgIkludmFsaWQgVVRGLTMy
IGNvZGUgcG9pbnQgVSsiIDw8IHN0ZDo6c2hvd2Jhc2UgPDwgc3RkOjpoZXggPDwgdmFsIDw8ICIg
ZW5jb3VudGVyZWQgd2hpbGUgdHJ5aW5nIHRvIGVuY29kZSBVVEYtMTYgc2VxdWVuY2UiOwotICAg
c3RkOjpvdXRfb2ZfcmFuZ2UgZShzcy5zdHIoKSk7Ci0jZWxzZQotICAgc3RkOjpvdXRfb2ZfcmFu
Z2UgZSgiSW52YWxpZCBVVEYtMzIgY29kZSBwb2ludCBlbmNvdW50ZXJlZCB3aGlsZSB0cnlpbmcg
dG8gZW5jb2RlIFVURi0xNiBzZXF1ZW5jZSIpOwotI2VuZGlmCi0gICBib29zdDo6dGhyb3dfZXhj
ZXB0aW9uKGUpOwotfQotI2lmZGVmIEJPT1NUX01TVkMKLSNwcmFnbWEgd2FybmluZyhwb3ApCi0j
ZW5kaWYKLQotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotdGVtcGxhdGUgPGNsYXNzIEJhc2VJ
dGVyYXRvciwgY2xhc3MgVTE2VHlwZSA9IDo6Ym9vc3Q6OnVpbnQxNl90PgotY2xhc3MgdTMyX3Rv
X3UxNl9pdGVyYXRvcgotICAgOiBwdWJsaWMgYm9vc3Q6Oml0ZXJhdG9yX2ZhY2FkZTx1MzJfdG9f
dTE2X2l0ZXJhdG9yPEJhc2VJdGVyYXRvciwgVTE2VHlwZT4sIFUxNlR5cGUsIHN0ZDo6YmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcsIGNvbnN0IFUxNlR5cGU+Ci17Ci0gICB0eXBlZGVmIGJvb3N0
OjppdGVyYXRvcl9mYWNhZGU8dTMyX3RvX3UxNl9pdGVyYXRvcjxCYXNlSXRlcmF0b3IsIFUxNlR5
cGU+LCBVMTZUeXBlLCBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBjb25zdCBVMTZU
eXBlPiBiYXNlX3R5cGU7Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19TVERfSVRFUkFUT1JfVFJB
SVRTKQotICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxCYXNlSXRlcmF0
b3I+Ojp2YWx1ZV90eXBlIGJhc2VfdmFsdWVfdHlwZTsKLQotICAgQk9PU1RfU1RBVElDX0FTU0VS
VChzaXplb2YoYmFzZV92YWx1ZV90eXBlKSpDSEFSX0JJVCA9PSAzMik7Ci0gICBCT09TVF9TVEFU
SUNfQVNTRVJUKHNpemVvZihVMTZUeXBlKSpDSEFSX0JJVCA9PSAxNik7Ci0jZW5kaWYKLQotcHVi
bGljOgotICAgdHlwZW5hbWUgYmFzZV90eXBlOjpyZWZlcmVuY2UKLSAgICAgIGRlcmVmZXJlbmNl
KCljb25zdAotICAgewotICAgICAgaWYobV9jdXJyZW50ID09IDIpCi0gICAgICAgICBleHRyYWN0
X2N1cnJlbnQoKTsKLSAgICAgIHJldHVybiBtX3ZhbHVlc1ttX2N1cnJlbnRdOwotICAgfQotICAg
Ym9vbCBlcXVhbChjb25zdCB1MzJfdG9fdTE2X2l0ZXJhdG9yJiB0aGF0KWNvbnN0Ci0gICB7Ci0g
ICAgICBpZihtX3Bvc2l0aW9uID09IHRoYXQubV9wb3NpdGlvbikKLSAgICAgIHsKLSAgICAgICAg
IC8vIEJvdGggbV9jdXJyZW50cyBtdXN0IGJlIGVxdWFsLCBvciBib3RoIGV2ZW4KLSAgICAgICAg
IC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgc2F5aW5nIHRoZWlyIHN1bSBtdXN0IGJlIGV2ZW46Ci0g
ICAgICAgICByZXR1cm4gKG1fY3VycmVudCArIHRoYXQubV9jdXJyZW50KSAmIDF1ID8gZmFsc2Ug
OiB0cnVlOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgfQotICAgdm9pZCBpbmNy
ZW1lbnQoKQotICAgewotICAgICAgLy8gaWYgd2UgaGF2ZSBhIHBlbmRpbmcgcmVhZCB0aGVuIHJl
YWQgbm93LCBzbyB0aGF0IHdlIGtub3cgd2hldGhlcgotICAgICAgLy8gdG8gc2tpcCBhIHBvc2l0
aW9uLCBvciBtb3ZlIHRvIGEgbG93LXN1cnJvZ2F0ZToKLSAgICAgIGlmKG1fY3VycmVudCA9PSAy
KQotICAgICAgewotICAgICAgICAgLy8gcGVuZGluZyByZWFkOgotICAgICAgICAgZXh0cmFjdF9j
dXJyZW50KCk7Ci0gICAgICB9Ci0gICAgICAvLyBtb3ZlIHRvIHRoZSBuZXh0IHN1cnJvZ2F0ZSBw
b3NpdGlvbjoKLSAgICAgICsrbV9jdXJyZW50OwotICAgICAgLy8gaWYgd2UndmUgcmVhY2hlZCB0
aGUgZW5kIHNraXAgYSBwb3NpdGlvbjoKLSAgICAgIGlmKG1fdmFsdWVzW21fY3VycmVudF0gPT0g
MCkKLSAgICAgIHsKLSAgICAgICAgIG1fY3VycmVudCA9IDI7Ci0gICAgICAgICArK21fcG9zaXRp
b247Ci0gICAgICB9Ci0gICB9Ci0gICB2b2lkIGRlY3JlbWVudCgpCi0gICB7Ci0gICAgICBpZiht
X2N1cnJlbnQgIT0gMSkKLSAgICAgIHsKLSAgICAgICAgIC8vIGRlY3JlbWVudGluZyBhbiBpdGVy
YXRvciBhbHdheXMgbGVhZHMgdG8gYSB2YWxpZCBwb3NpdGlvbjoKLSAgICAgICAgIC0tbV9wb3Np
dGlvbjsKLSAgICAgICAgIGV4dHJhY3RfY3VycmVudCgpOwotICAgICAgICAgbV9jdXJyZW50ID0g
bV92YWx1ZXNbMV0gPyAxIDogMDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAg
ICAgIG1fY3VycmVudCA9IDA7Ci0gICAgICB9Ci0gICB9Ci0gICBCYXNlSXRlcmF0b3IgYmFzZSgp
Y29uc3QKLSAgIHsKLSAgICAgIHJldHVybiBtX3Bvc2l0aW9uOwotICAgfQotICAgLy8gY29uc3Ry
dWN0OgotICAgdTMyX3RvX3UxNl9pdGVyYXRvcigpIDogbV9wb3NpdGlvbigpLCBtX2N1cnJlbnQo
MCkKLSAgIHsKLSAgICAgIG1fdmFsdWVzWzBdID0gMDsKLSAgICAgIG1fdmFsdWVzWzFdID0gMDsK
LSAgICAgIG1fdmFsdWVzWzJdID0gMDsKLSAgIH0KLSAgIHUzMl90b191MTZfaXRlcmF0b3IoQmFz
ZUl0ZXJhdG9yIGIpIDogbV9wb3NpdGlvbihiKSwgbV9jdXJyZW50KDIpCi0gICB7Ci0gICAgICBt
X3ZhbHVlc1swXSA9IDA7Ci0gICAgICBtX3ZhbHVlc1sxXSA9IDA7Ci0gICAgICBtX3ZhbHVlc1sy
XSA9IDA7Ci0gICB9Ci1wcml2YXRlOgotCi0gICB2b2lkIGV4dHJhY3RfY3VycmVudCgpY29uc3QK
LSAgIHsKLSAgICAgIC8vIGJlZ2luIGJ5IGNoZWNraW5nIGZvciBhIGNvZGUgcG9pbnQgb3V0IG9m
IHJhbmdlOgotICAgICAgOjpib29zdDo6dWludDMyX3QgdiA9ICptX3Bvc2l0aW9uOwotICAgICAg
aWYodiA+PSAweDEwMDAwdSkKLSAgICAgIHsKLSAgICAgICAgIGlmKHYgPiAweDEwRkZGRnUpCi0g
ICAgICAgICAgICBkZXRhaWw6OmludmFsaWRfdXRmMzJfY29kZV9wb2ludCgqbV9wb3NpdGlvbik7
Ci0gICAgICAgICAvLyBzcGxpdCBpbnRvIHR3byBzdXJyb2dhdGVzOgotICAgICAgICAgbV92YWx1
ZXNbMF0gPSBzdGF0aWNfY2FzdDxVMTZUeXBlPih2ID4+IDEwKSArIGRldGFpbDo6aGlnaF9zdXJy
b2dhdGVfYmFzZTsKLSAgICAgICAgIG1fdmFsdWVzWzFdID0gc3RhdGljX2Nhc3Q8VTE2VHlwZT4o
diAmIGRldGFpbDo6dGVuX2JpdF9tYXNrKSArIGRldGFpbDo6bG93X3N1cnJvZ2F0ZV9iYXNlOwot
ICAgICAgICAgbV9jdXJyZW50ID0gMDsKLSAgICAgICAgIEJPT1NUX0FTU0VSVChkZXRhaWw6Omlz
X2hpZ2hfc3Vycm9nYXRlKG1fdmFsdWVzWzBdKSk7Ci0gICAgICAgICBCT09TVF9BU1NFUlQoZGV0
YWlsOjppc19sb3dfc3Vycm9nYXRlKG1fdmFsdWVzWzFdKSk7Ci0gICAgICB9Ci0gICAgICBlbHNl
Ci0gICAgICB7Ci0gICAgICAgICAvLyAxNi1iaXQgY29kZSBwb2ludDoKLSAgICAgICAgIG1fdmFs
dWVzWzBdID0gc3RhdGljX2Nhc3Q8VTE2VHlwZT4oKm1fcG9zaXRpb24pOwotICAgICAgICAgbV92
YWx1ZXNbMV0gPSAwOwotICAgICAgICAgbV9jdXJyZW50ID0gMDsKLSAgICAgICAgIC8vIHZhbHVl
IG11c3Qgbm90IGJlIGEgc3Vycm9nYXRlOgotICAgICAgICAgaWYoZGV0YWlsOjppc19zdXJyb2dh
dGUobV92YWx1ZXNbMF0pKQotICAgICAgICAgICAgZGV0YWlsOjppbnZhbGlkX3V0ZjMyX2NvZGVf
cG9pbnQoKm1fcG9zaXRpb24pOwotICAgICAgfQotICAgfQotICAgQmFzZUl0ZXJhdG9yIG1fcG9z
aXRpb247Ci0gICBtdXRhYmxlIFUxNlR5cGUgbV92YWx1ZXNbM107Ci0gICBtdXRhYmxlIHVuc2ln
bmVkIG1fY3VycmVudDsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBCYXNlSXRlcmF0b3IsIGNsYXNz
IFUzMlR5cGUgPSA6OmJvb3N0Ojp1aW50MzJfdD4KLWNsYXNzIHUxNl90b191MzJfaXRlcmF0b3IK
LSAgIDogcHVibGljIGJvb3N0OjppdGVyYXRvcl9mYWNhZGU8dTE2X3RvX3UzMl9pdGVyYXRvcjxC
YXNlSXRlcmF0b3IsIFUzMlR5cGU+LCBVMzJUeXBlLCBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnLCBjb25zdCBVMzJUeXBlPgotewotICAgdHlwZWRlZiBib29zdDo6aXRlcmF0b3JfZmFj
YWRlPHUxNl90b191MzJfaXRlcmF0b3I8QmFzZUl0ZXJhdG9yLCBVMzJUeXBlPiwgVTMyVHlwZSwg
c3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgY29uc3QgVTMyVHlwZT4gYmFzZV90eXBl
OwotICAgLy8gc3BlY2lhbCB2YWx1ZXMgZm9yIHBlbmRpbmcgaXRlcmF0b3IgcmVhZHM6Ci0gICBC
T09TVF9TVEFUSUNfQ09OU1RBTlQoVTMyVHlwZSwgcGVuZGluZ19yZWFkID0gMHhmZmZmZmZmZnUp
OwotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fU1REX0lURVJBVE9SX1RSQUlUUykKLSAgIHR5cGVk
ZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8QmFzZUl0ZXJhdG9yPjo6dmFsdWVfdHlw
ZSBiYXNlX3ZhbHVlX3R5cGU7Ci0KLSAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoc2l6ZW9mKGJhc2Vf
dmFsdWVfdHlwZSkqQ0hBUl9CSVQgPT0gMTYpOwotICAgQk9PU1RfU1RBVElDX0FTU0VSVChzaXpl
b2YoVTMyVHlwZSkqQ0hBUl9CSVQgPT0gMzIpOwotI2VuZGlmCi0KLXB1YmxpYzoKLSAgIHR5cGVu
YW1lIGJhc2VfdHlwZTo6cmVmZXJlbmNlCi0gICAgICBkZXJlZmVyZW5jZSgpY29uc3QKLSAgIHsK
LSAgICAgIGlmKG1fdmFsdWUgPT0gcGVuZGluZ19yZWFkKQotICAgICAgICAgZXh0cmFjdF9jdXJy
ZW50KCk7Ci0gICAgICByZXR1cm4gbV92YWx1ZTsKLSAgIH0KLSAgIGJvb2wgZXF1YWwoY29uc3Qg
dTE2X3RvX3UzMl9pdGVyYXRvciYgdGhhdCljb25zdAotICAgewotICAgICAgcmV0dXJuIG1fcG9z
aXRpb24gPT0gdGhhdC5tX3Bvc2l0aW9uOwotICAgfQotICAgdm9pZCBpbmNyZW1lbnQoKQotICAg
ewotICAgICAgLy8gc2tpcCBoaWdoIHN1cnJvZ2F0ZSBmaXJzdCBpZiB0aGVyZSBpcyBvbmU6Ci0g
ICAgICBpZihkZXRhaWw6OmlzX2hpZ2hfc3Vycm9nYXRlKCptX3Bvc2l0aW9uKSkgKyttX3Bvc2l0
aW9uOwotICAgICAgKyttX3Bvc2l0aW9uOwotICAgICAgbV92YWx1ZSA9IHBlbmRpbmdfcmVhZDsK
LSAgIH0KLSAgIHZvaWQgZGVjcmVtZW50KCkKLSAgIHsKLSAgICAgIC0tbV9wb3NpdGlvbjsKLSAg
ICAgIC8vIGlmIHdlIGhhdmUgYSBsb3cgc3Vycm9nYXRlIHRoZW4gZ28gYmFjayBvbmUgbW9yZToK
LSAgICAgIGlmKGRldGFpbDo6aXNfbG93X3N1cnJvZ2F0ZSgqbV9wb3NpdGlvbikpIAotICAgICAg
ICAgLS1tX3Bvc2l0aW9uOwotICAgICAgbV92YWx1ZSA9IHBlbmRpbmdfcmVhZDsKLSAgIH0KLSAg
IEJhc2VJdGVyYXRvciBiYXNlKCljb25zdAotICAgewotICAgICAgcmV0dXJuIG1fcG9zaXRpb247
Ci0gICB9Ci0gICAvLyBjb25zdHJ1Y3Q6Ci0gICB1MTZfdG9fdTMyX2l0ZXJhdG9yKCkgOiBtX3Bv
c2l0aW9uKCkKLSAgIHsKLSAgICAgIG1fdmFsdWUgPSBwZW5kaW5nX3JlYWQ7Ci0gICB9Ci0gICB1
MTZfdG9fdTMyX2l0ZXJhdG9yKEJhc2VJdGVyYXRvciBiKSA6IG1fcG9zaXRpb24oYikKLSAgIHsK
LSAgICAgIG1fdmFsdWUgPSBwZW5kaW5nX3JlYWQ7Ci0gICB9Ci0gICAvLwotICAgLy8gUmFuZ2Ug
Y2hlY2tlZCB2ZXJzaW9uOgotICAgLy8KLSAgIHUxNl90b191MzJfaXRlcmF0b3IoQmFzZUl0ZXJh
dG9yIGIsIEJhc2VJdGVyYXRvciBzdGFydCwgQmFzZUl0ZXJhdG9yIGVuZCkgOiBtX3Bvc2l0aW9u
KGIpCi0gICB7Ci0gICAgICBtX3ZhbHVlID0gcGVuZGluZ19yZWFkOwotICAgICAgLy8KLSAgICAg
IC8vIFRoZSByYW5nZSBtdXN0IG5vdCBzdGFydCB3aXRoIGEgbG93IHN1cnJvZ2F0ZSwgb3IgZW5k
IGluIGEgaGlnaCBzdXJyb2dhdGUsCi0gICAgICAvLyBvdGhlcndpc2Ugd2UgcnVuIHRoZSByaXNr
IG9mIHJ1bm5pbmcgb3V0c2lkZSB0aGUgdW5kZXJseWluZyBpbnB1dCByYW5nZS4KLSAgICAgIC8v
IExpa2V3aXNlIGIgbXVzdCBub3QgYmUgbG9jYXRlZCBhdCBhIGxvdyBzdXJyb2dhdGUuCi0gICAg
ICAvLwotICAgICAgYm9vc3Q6OnVpbnQxNl90IHZhbDsKLSAgICAgIGlmKHN0YXJ0ICE9IGVuZCkK
LSAgICAgIHsKLSAgICAgICAgIGlmKChiICE9IHN0YXJ0KSAmJiAoYiAhPSBlbmQpKQotICAgICAg
ICAgewotICAgICAgICAgICAgdmFsID0gKmI7Ci0gICAgICAgICAgICBpZihkZXRhaWw6OmlzX3N1
cnJvZ2F0ZSh2YWwpICYmICgodmFsICYgMHhGQzAwdSkgPT0gMHhEQzAwdSkpCi0gICAgICAgICAg
ICAgICBpbnZhbGlkX2NvZGVfcG9pbnQodmFsKTsKLSAgICAgICAgIH0KLSAgICAgICAgIHZhbCA9
ICpzdGFydDsKLSAgICAgICAgIGlmKGRldGFpbDo6aXNfc3Vycm9nYXRlKHZhbCkgJiYgKCh2YWwg
JiAweEZDMDB1KSA9PSAweERDMDB1KSkKLSAgICAgICAgICAgIGludmFsaWRfY29kZV9wb2ludCh2
YWwpOwotICAgICAgICAgdmFsID0gKi0tZW5kOwotICAgICAgICAgaWYoZGV0YWlsOjppc19oaWdo
X3N1cnJvZ2F0ZSh2YWwpKQotICAgICAgICAgICAgaW52YWxpZF9jb2RlX3BvaW50KHZhbCk7Ci0g
ICAgICB9Ci0gICB9Ci1wcml2YXRlOgotICAgc3RhdGljIHZvaWQgaW52YWxpZF9jb2RlX3BvaW50
KDo6Ym9vc3Q6OnVpbnQxNl90IHZhbCkKLSAgIHsKLSNpZm5kZWYgQk9PU1RfTk9fU1REX0xPQ0FM
RQotICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7Ci0gICAgICBzcyA8PCAiTWlzcGxhY2VkIFVU
Ri0xNiBzdXJyb2dhdGUgVSsiIDw8IHN0ZDo6c2hvd2Jhc2UgPDwgc3RkOjpoZXggPDwgdmFsIDw8
ICIgZW5jb3VudGVyZWQgd2hpbGUgdHJ5aW5nIHRvIGVuY29kZSBVVEYtMzIgc2VxdWVuY2UiOwot
ICAgICAgc3RkOjpvdXRfb2ZfcmFuZ2UgZShzcy5zdHIoKSk7Ci0jZWxzZQotICAgICAgc3RkOjpv
dXRfb2ZfcmFuZ2UgZSgiTWlzcGxhY2VkIFVURi0xNiBzdXJyb2dhdGUgZW5jb3VudGVyZWQgd2hp
bGUgdHJ5aW5nIHRvIGVuY29kZSBVVEYtMzIgc2VxdWVuY2UiKTsKLSNlbmRpZgotICAgICAgYm9v
c3Q6OnRocm93X2V4Y2VwdGlvbihlKTsKLSAgIH0KLSAgIHZvaWQgZXh0cmFjdF9jdXJyZW50KClj
b25zdAotICAgewotICAgICAgbV92YWx1ZSA9IHN0YXRpY19jYXN0PFUzMlR5cGU+KHN0YXRpY19j
YXN0PCA6OmJvb3N0Ojp1aW50MTZfdD4oKm1fcG9zaXRpb24pKTsKLSAgICAgIC8vIGlmIHRoZSBs
YXN0IHZhbHVlIGlzIGEgaGlnaCBzdXJyb2dhdGUgdGhlbiBhZGp1c3QgbV9wb3NpdGlvbiBhbmQg
bV92YWx1ZSBhcyBuZWVkZWQ6Ci0gICAgICBpZihkZXRhaWw6OmlzX2hpZ2hfc3Vycm9nYXRlKCpt
X3Bvc2l0aW9uKSkKLSAgICAgIHsKLSAgICAgICAgIC8vIHByZWNvbmRpdGlvbjsgbmV4dCB2YWx1
ZSBtdXN0IGhhdmUgYmUgYSBsb3ctc3Vycm9nYXRlOgotICAgICAgICAgQmFzZUl0ZXJhdG9yIG5l
eHQobV9wb3NpdGlvbik7Ci0gICAgICAgICA6OmJvb3N0Ojp1aW50MTZfdCB0ID0gKisrbmV4dDsK
LSAgICAgICAgIGlmKCh0ICYgMHhGQzAwdSkgIT0gMHhEQzAwdSkKLSAgICAgICAgICAgIGludmFs
aWRfY29kZV9wb2ludCh0KTsKLSAgICAgICAgIG1fdmFsdWUgPSAobV92YWx1ZSAtIGRldGFpbDo6
aGlnaF9zdXJyb2dhdGVfYmFzZSkgPDwgMTA7Ci0gICAgICAgICBtX3ZhbHVlIHw9IChzdGF0aWNf
Y2FzdDxVMzJUeXBlPihzdGF0aWNfY2FzdDwgOjpib29zdDo6dWludDE2X3Q+KHQpKSAmIGRldGFp
bDo6dGVuX2JpdF9tYXNrKTsKLSAgICAgIH0KLSAgICAgIC8vIHBvc3Rjb25kaXRpb247IHJlc3Vs
dCBtdXN0IG5vdCBiZSBhIHN1cnJvZ2F0ZToKLSAgICAgIGlmKGRldGFpbDo6aXNfc3Vycm9nYXRl
KG1fdmFsdWUpKQotICAgICAgICAgaW52YWxpZF9jb2RlX3BvaW50KHN0YXRpY19jYXN0PCA6OmJv
b3N0Ojp1aW50MTZfdD4obV92YWx1ZSkpOwotICAgfQotICAgQmFzZUl0ZXJhdG9yIG1fcG9zaXRp
b247Ci0gICBtdXRhYmxlIFUzMlR5cGUgbV92YWx1ZTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBC
YXNlSXRlcmF0b3IsIGNsYXNzIFU4VHlwZSA9IDo6Ym9vc3Q6OnVpbnQ4X3Q+Ci1jbGFzcyB1MzJf
dG9fdThfaXRlcmF0b3IKLSAgIDogcHVibGljIGJvb3N0OjppdGVyYXRvcl9mYWNhZGU8dTMyX3Rv
X3U4X2l0ZXJhdG9yPEJhc2VJdGVyYXRvciwgVThUeXBlPiwgVThUeXBlLCBzdGQ6OmJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnLCBjb25zdCBVOFR5cGU+Ci17Ci0gICB0eXBlZGVmIGJvb3N0Ojpp
dGVyYXRvcl9mYWNhZGU8dTMyX3RvX3U4X2l0ZXJhdG9yPEJhc2VJdGVyYXRvciwgVThUeXBlPiwg
VThUeXBlLCBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBjb25zdCBVOFR5cGU+IGJh
c2VfdHlwZTsKLSAgIAotI2lmICFkZWZpbmVkKEJPT1NUX05PX1NURF9JVEVSQVRPUl9UUkFJVFMp
Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEJhc2VJdGVyYXRvcj46
OnZhbHVlX3R5cGUgYmFzZV92YWx1ZV90eXBlOwotCi0gICBCT09TVF9TVEFUSUNfQVNTRVJUKHNp
emVvZihiYXNlX3ZhbHVlX3R5cGUpKkNIQVJfQklUID09IDMyKTsKLSAgIEJPT1NUX1NUQVRJQ19B
U1NFUlQoc2l6ZW9mKFU4VHlwZSkqQ0hBUl9CSVQgPT0gOCk7Ci0jZW5kaWYKLQotcHVibGljOgot
ICAgdHlwZW5hbWUgYmFzZV90eXBlOjpyZWZlcmVuY2UKLSAgICAgIGRlcmVmZXJlbmNlKCljb25z
dAotICAgewotICAgICAgaWYobV9jdXJyZW50ID09IDQpCi0gICAgICAgICBleHRyYWN0X2N1cnJl
bnQoKTsKLSAgICAgIHJldHVybiBtX3ZhbHVlc1ttX2N1cnJlbnRdOwotICAgfQotICAgYm9vbCBl
cXVhbChjb25zdCB1MzJfdG9fdThfaXRlcmF0b3ImIHRoYXQpY29uc3QKLSAgIHsKLSAgICAgIGlm
KG1fcG9zaXRpb24gPT0gdGhhdC5tX3Bvc2l0aW9uKQotICAgICAgewotICAgICAgICAgLy8gZWl0
aGVyIHRoZSBtX2N1cnJlbnQncyBtdXN0IGJlIGVxdWFsLCBvciBvbmUgbXVzdCBiZSAwIGFuZCAK
LSAgICAgICAgIC8vIHRoZSBvdGhlciA0OiB3aGljaCBtZWFucyBuZWl0aGVyIG11c3QgaGF2ZSBi
aXRzIDEgb3IgMiBzZXQ6Ci0gICAgICAgICByZXR1cm4gKG1fY3VycmVudCA9PSB0aGF0Lm1fY3Vy
cmVudCkKLSAgICAgICAgICAgIHx8ICgoKG1fY3VycmVudCB8IHRoYXQubV9jdXJyZW50KSAmIDMp
ID09IDApOwotICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgfQotICAgdm9pZCBpbmNy
ZW1lbnQoKQotICAgewotICAgICAgLy8gaWYgd2UgaGF2ZSBhIHBlbmRpbmcgcmVhZCB0aGVuIHJl
YWQgbm93LCBzbyB0aGF0IHdlIGtub3cgd2hldGhlcgotICAgICAgLy8gdG8gc2tpcCBhIHBvc2l0
aW9uLCBvciBtb3ZlIHRvIGEgbG93LXN1cnJvZ2F0ZToKLSAgICAgIGlmKG1fY3VycmVudCA9PSA0
KQotICAgICAgewotICAgICAgICAgLy8gcGVuZGluZyByZWFkOgotICAgICAgICAgZXh0cmFjdF9j
dXJyZW50KCk7Ci0gICAgICB9Ci0gICAgICAvLyBtb3ZlIHRvIHRoZSBuZXh0IHN1cnJvZ2F0ZSBw
b3NpdGlvbjoKLSAgICAgICsrbV9jdXJyZW50OwotICAgICAgLy8gaWYgd2UndmUgcmVhY2hlZCB0
aGUgZW5kIHNraXAgYSBwb3NpdGlvbjoKLSAgICAgIGlmKG1fdmFsdWVzW21fY3VycmVudF0gPT0g
MCkKLSAgICAgIHsKLSAgICAgICAgIG1fY3VycmVudCA9IDQ7Ci0gICAgICAgICArK21fcG9zaXRp
b247Ci0gICAgICB9Ci0gICB9Ci0gICB2b2lkIGRlY3JlbWVudCgpCi0gICB7Ci0gICAgICBpZigo
bV9jdXJyZW50ICYgMykgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgIC0tbV9wb3NpdGlvbjsKLSAg
ICAgICAgIGV4dHJhY3RfY3VycmVudCgpOwotICAgICAgICAgbV9jdXJyZW50ID0gMzsKLSAgICAg
ICAgIHdoaWxlKG1fY3VycmVudCAmJiAobV92YWx1ZXNbbV9jdXJyZW50XSA9PSAwKSkKLSAgICAg
ICAgICAgIC0tbV9jdXJyZW50OwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICAgLS1tX2N1
cnJlbnQ7Ci0gICB9Ci0gICBCYXNlSXRlcmF0b3IgYmFzZSgpY29uc3QKLSAgIHsKLSAgICAgIHJl
dHVybiBtX3Bvc2l0aW9uOwotICAgfQotICAgLy8gY29uc3RydWN0OgotICAgdTMyX3RvX3U4X2l0
ZXJhdG9yKCkgOiBtX3Bvc2l0aW9uKCksIG1fY3VycmVudCgwKQotICAgewotICAgICAgbV92YWx1
ZXNbMF0gPSAwOwotICAgICAgbV92YWx1ZXNbMV0gPSAwOwotICAgICAgbV92YWx1ZXNbMl0gPSAw
OwotICAgICAgbV92YWx1ZXNbM10gPSAwOwotICAgICAgbV92YWx1ZXNbNF0gPSAwOwotICAgfQot
ICAgdTMyX3RvX3U4X2l0ZXJhdG9yKEJhc2VJdGVyYXRvciBiKSA6IG1fcG9zaXRpb24oYiksIG1f
Y3VycmVudCg0KQotICAgewotICAgICAgbV92YWx1ZXNbMF0gPSAwOwotICAgICAgbV92YWx1ZXNb
MV0gPSAwOwotICAgICAgbV92YWx1ZXNbMl0gPSAwOwotICAgICAgbV92YWx1ZXNbM10gPSAwOwot
ICAgICAgbV92YWx1ZXNbNF0gPSAwOwotICAgfQotcHJpdmF0ZToKLQotICAgdm9pZCBleHRyYWN0
X2N1cnJlbnQoKWNvbnN0Ci0gICB7Ci0gICAgICBib29zdDo6dWludDMyX3QgYyA9ICptX3Bvc2l0
aW9uOwotICAgICAgaWYoYyA+IDB4MTBGRkZGdSkKLSAgICAgICAgIGRldGFpbDo6aW52YWxpZF91
dGYzMl9jb2RlX3BvaW50KGMpOwotICAgICAgaWYoYyA8IDB4ODB1KQotICAgICAgewotICAgICAg
ICAgbV92YWx1ZXNbMF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKTsKLSAgICAgICAg
IG1fdmFsdWVzWzFdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHUpOwotICAgICAgICAg
bV92YWx1ZXNbMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwdSk7Ci0gICAgICAgICBt
X3ZhbHVlc1szXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB1KTsKLSAgICAgIH0KLSAg
ICAgIGVsc2UgaWYoYyA8IDB4ODAwdSkKLSAgICAgIHsKLSAgICAgICAgIG1fdmFsdWVzWzBdID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHhDMHUgKyAoYyA+PiA2KSk7Ci0gICAgICAgICBt
X3ZhbHVlc1sxXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ODB1ICsgKGMgJiAweDNG
dSkpOwotICAgICAgICAgbV92YWx1ZXNbMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigw
dSk7Ci0gICAgICAgICBtX3ZhbHVlc1szXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB1
KTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYoYyA8IDB4MTAwMDB1KQotICAgICAgewotICAgICAg
ICAgbV92YWx1ZXNbMF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweEUwdSArIChjID4+
IDEyKSk7Ci0gICAgICAgICBtX3ZhbHVlc1sxXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KDB4ODB1ICsgKChjID4+IDYpICYgMHgzRnUpKTsKLSAgICAgICAgIG1fdmFsdWVzWzJdID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHg4MHUgKyAoYyAmIDB4M0Z1KSk7Ci0gICAgICAgICBt
X3ZhbHVlc1szXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB1KTsKLSAgICAgIH0KLSAg
ICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgIG1fdmFsdWVzWzBdID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oMHhGMHUgKyAoYyA+PiAxOCkpOwotICAgICAgICAgbV92YWx1ZXNbMV0gPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweDgwdSArICgoYyA+PiAxMikgJiAweDNGdSkpOwot
ICAgICAgICAgbV92YWx1ZXNbMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweDgwdSAr
ICgoYyA+PiA2KSAmIDB4M0Z1KSk7Ci0gICAgICAgICBtX3ZhbHVlc1szXSA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KDB4ODB1ICsgKGMgJiAweDNGdSkpOwotICAgICAgfQotICAgICAgbV9j
dXJyZW50PSAwOwotICAgfQotICAgQmFzZUl0ZXJhdG9yIG1fcG9zaXRpb247Ci0gICBtdXRhYmxl
IFU4VHlwZSBtX3ZhbHVlc1s1XTsKLSAgIG11dGFibGUgdW5zaWduZWQgbV9jdXJyZW50OwotfTsK
LQotdGVtcGxhdGUgPGNsYXNzIEJhc2VJdGVyYXRvciwgY2xhc3MgVTMyVHlwZSA9IDo6Ym9vc3Q6
OnVpbnQzMl90PgotY2xhc3MgdThfdG9fdTMyX2l0ZXJhdG9yCi0gICA6IHB1YmxpYyBib29zdDo6
aXRlcmF0b3JfZmFjYWRlPHU4X3RvX3UzMl9pdGVyYXRvcjxCYXNlSXRlcmF0b3IsIFUzMlR5cGU+
LCBVMzJUeXBlLCBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBjb25zdCBVMzJUeXBl
PgotewotICAgdHlwZWRlZiBib29zdDo6aXRlcmF0b3JfZmFjYWRlPHU4X3RvX3UzMl9pdGVyYXRv
cjxCYXNlSXRlcmF0b3IsIFUzMlR5cGU+LCBVMzJUeXBlLCBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnLCBjb25zdCBVMzJUeXBlPiBiYXNlX3R5cGU7Ci0gICAvLyBzcGVjaWFsIHZhbHVl
cyBmb3IgcGVuZGluZyBpdGVyYXRvciByZWFkczoKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChV
MzJUeXBlLCBwZW5kaW5nX3JlYWQgPSAweGZmZmZmZmZmdSk7Ci0KLSNpZiAhZGVmaW5lZChCT09T
VF9OT19TVERfSVRFUkFUT1JfVFJBSVRTKQotICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJh
dG9yX3RyYWl0czxCYXNlSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIGJhc2VfdmFsdWVfdHlwZTsKLQot
ICAgQk9PU1RfU1RBVElDX0FTU0VSVChzaXplb2YoYmFzZV92YWx1ZV90eXBlKSpDSEFSX0JJVCA9
PSA4KTsKLSAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoc2l6ZW9mKFUzMlR5cGUpKkNIQVJfQklUID09
IDMyKTsKLSNlbmRpZgotCi1wdWJsaWM6Ci0gICB0eXBlbmFtZSBiYXNlX3R5cGU6OnJlZmVyZW5j
ZQotICAgICAgZGVyZWZlcmVuY2UoKWNvbnN0Ci0gICB7Ci0gICAgICBpZihtX3ZhbHVlID09IHBl
bmRpbmdfcmVhZCkKLSAgICAgICAgIGV4dHJhY3RfY3VycmVudCgpOwotICAgICAgcmV0dXJuIG1f
dmFsdWU7Ci0gICB9Ci0gICBib29sIGVxdWFsKGNvbnN0IHU4X3RvX3UzMl9pdGVyYXRvciYgdGhh
dCljb25zdAotICAgewotICAgICAgcmV0dXJuIG1fcG9zaXRpb24gPT0gdGhhdC5tX3Bvc2l0aW9u
OwotICAgfQotICAgdm9pZCBpbmNyZW1lbnQoKQotICAgewotICAgICAgLy8gV2UgbXVzdCBub3Qg
c3RhcnQgd2l0aCBhIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXI6Ci0gICAgICBpZigoc3RhdGljX2Nh
c3Q8Ym9vc3Q6OnVpbnQ4X3Q+KCptX3Bvc2l0aW9uKSAmIDB4QzApID09IDB4ODApCi0gICAgICAg
ICBpbnZhbGlkX3NlcXVlbmNlKCk7Ci0gICAgICAvLyBza2lwIGhpZ2ggc3Vycm9nYXRlIGZpcnN0
IGlmIHRoZXJlIGlzIG9uZToKLSAgICAgIHVuc2lnbmVkIGMgPSBkZXRhaWw6OnV0ZjhfYnl0ZV9j
b3VudCgqbV9wb3NpdGlvbik7Ci0gICAgICBpZihtX3ZhbHVlID09IHBlbmRpbmdfcmVhZCkKLSAg
ICAgIHsKLSAgICAgICAgIC8vIFNpbmNlIHdlIGhhdmVuJ3QgcmVhZCBpbiBhIHZhbHVlLCB3ZSBu
ZWVkIHRvIHZhbGlkYXRlIHRoZSBjb2RlIHBvaW50czoKLSAgICAgICAgIGZvcih1bnNpZ25lZCBp
ID0gMDsgaSA8IGM7ICsraSkKLSAgICAgICAgIHsKLSAgICAgICAgICAgICsrbV9wb3NpdGlvbjsK
LSAgICAgICAgICAgIC8vIFdlIG11c3QgaGF2ZSBhIGNvbnRpbnVhdGlvbiBieXRlOgotICAgICAg
ICAgICAgaWYoKGkgIT0gYyAtIDEpICYmICgoc3RhdGljX2Nhc3Q8Ym9vc3Q6OnVpbnQ4X3Q+KCpt
X3Bvc2l0aW9uKSAmIDB4QzApICE9IDB4ODApKQotICAgICAgICAgICAgICAgaW52YWxpZF9zZXF1
ZW5jZSgpOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAg
ICAgc3RkOjphZHZhbmNlKG1fcG9zaXRpb24sIGMpOwotICAgICAgfQotICAgICAgbV92YWx1ZSA9
IHBlbmRpbmdfcmVhZDsKLSAgIH0KLSAgIHZvaWQgZGVjcmVtZW50KCkKLSAgIHsKLSAgICAgIC8v
IEtlZXAgYmFja3RyYWNraW5nIHVudGlsIHdlIGRvbid0IGhhdmUgYSB0cmFpbGluZyBjaGFyYWN0
ZXI6Ci0gICAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgICB3aGlsZSgoKi0tbV9wb3NpdGlv
biAmIDB4QzB1KSA9PSAweDgwdSkgKytjb3VudDsKLSAgICAgIC8vIG5vdyBjaGVjayB0aGF0IHRo
ZSBzZXF1ZW5jZSB3YXMgdmFsaWQ6Ci0gICAgICBpZihjb3VudCAhPSBkZXRhaWw6OnV0ZjhfdHJh
aWxpbmdfYnl0ZV9jb3VudCgqbV9wb3NpdGlvbikpCi0gICAgICAgICBpbnZhbGlkX3NlcXVlbmNl
KCk7Ci0gICAgICBtX3ZhbHVlID0gcGVuZGluZ19yZWFkOwotICAgfQotICAgQmFzZUl0ZXJhdG9y
IGJhc2UoKWNvbnN0Ci0gICB7Ci0gICAgICByZXR1cm4gbV9wb3NpdGlvbjsKLSAgIH0KLSAgIC8v
IGNvbnN0cnVjdDoKLSAgIHU4X3RvX3UzMl9pdGVyYXRvcigpIDogbV9wb3NpdGlvbigpCi0gICB7
Ci0gICAgICBtX3ZhbHVlID0gcGVuZGluZ19yZWFkOwotICAgfQotICAgdThfdG9fdTMyX2l0ZXJh
dG9yKEJhc2VJdGVyYXRvciBiKSA6IG1fcG9zaXRpb24oYikKLSAgIHsKLSAgICAgIG1fdmFsdWUg
PSBwZW5kaW5nX3JlYWQ7Ci0gICB9Ci0gICAvLwotICAgLy8gQ2hlY2tlZCBjb25zdHJ1Y3RvcjoK
LSAgIC8vCi0gICB1OF90b191MzJfaXRlcmF0b3IoQmFzZUl0ZXJhdG9yIGIsIEJhc2VJdGVyYXRv
ciBzdGFydCwgQmFzZUl0ZXJhdG9yIGVuZCkgOiBtX3Bvc2l0aW9uKGIpCi0gICB7Ci0gICAgICBt
X3ZhbHVlID0gcGVuZGluZ19yZWFkOwotICAgICAgLy8KLSAgICAgIC8vIFdlIG11c3Qgbm90IHN0
YXJ0IHdpdGggYSBjb250aW51YXRpb24gY2hhcmFjdGVyLCBvciBlbmQgd2l0aCBhIAotICAgICAg
Ly8gdHJ1bmNhdGVkIFVURi04IHNlcXVlbmNlIG90aGVyd2lzZSB3ZSBydW4gdGhlIHJpc2sgb2Yg
Z29pbmcgcGFzdAotICAgICAgLy8gdGhlIHN0YXJ0L2VuZCBvZiB0aGUgdW5kZXJseWluZyBzZXF1
ZW5jZToKLSAgICAgIC8vCi0gICAgICBpZihzdGFydCAhPSBlbmQpCi0gICAgICB7Ci0gICAgICAg
ICB1bnNpZ25lZCBjaGFyIHYgPSAqc3RhcnQ7Ci0gICAgICAgICBpZigodiAmIDB4QzB1KSA9PSAw
eDgwdSkKLSAgICAgICAgICAgIGludmFsaWRfc2VxdWVuY2UoKTsKLSAgICAgICAgIGlmKChiICE9
IHN0YXJ0KSAmJiAoYiAhPSBlbmQpICYmICgoKmIgJiAweEMwdSkgPT0gMHg4MHUpKQotICAgICAg
ICAgICAgaW52YWxpZF9zZXF1ZW5jZSgpOwotICAgICAgICAgQmFzZUl0ZXJhdG9yIHBvcyA9IGVu
ZDsKLSAgICAgICAgIGRvCi0gICAgICAgICB7Ci0gICAgICAgICAgICB2ID0gKi0tcG9zOwotICAg
ICAgICAgfQotICAgICAgICAgd2hpbGUoKHN0YXJ0ICE9IHBvcykgJiYgKCh2ICYgMHhDMHUpID09
IDB4ODB1KSk7Ci0gICAgICAgICBzdGQ6OnB0cmRpZmZfdCBleHRyYSA9IGRldGFpbDo6dXRmOF9i
eXRlX2NvdW50KHYpOwotICAgICAgICAgaWYoc3RkOjpkaXN0YW5jZShwb3MsIGVuZCkgPCBleHRy
YSkKLSAgICAgICAgICAgIGludmFsaWRfc2VxdWVuY2UoKTsKLSAgICAgIH0KLSAgIH0KLXByaXZh
dGU6Ci0gICBzdGF0aWMgdm9pZCBpbnZhbGlkX3NlcXVlbmNlKCkKLSAgIHsKLSAgICAgIHN0ZDo6
b3V0X29mX3JhbmdlIGUoIkludmFsaWQgVVRGLTggc2VxdWVuY2UgZW5jb3VudGVyZWQgd2hpbGUg
dHJ5aW5nIHRvIGVuY29kZSBVVEYtMzIgY2hhcmFjdGVyIik7Ci0gICAgICBib29zdDo6dGhyb3df
ZXhjZXB0aW9uKGUpOwotICAgfQotICAgdm9pZCBleHRyYWN0X2N1cnJlbnQoKWNvbnN0Ci0gICB7
Ci0gICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8VTMyVHlwZT4oc3RhdGljX2Nhc3Q8IDo6Ym9v
c3Q6OnVpbnQ4X3Q+KCptX3Bvc2l0aW9uKSk7Ci0gICAgICAvLyB3ZSBtdXN0IG5vdCBoYXZlIGEg
Y29udGludWF0aW9uIGNoYXJhY3RlcjoKLSAgICAgIGlmKChtX3ZhbHVlICYgMHhDMHUpID09IDB4
ODB1KQotICAgICAgICAgaW52YWxpZF9zZXF1ZW5jZSgpOwotICAgICAgLy8gc2VlIGhvdyBtYW55
IGV4dHJhIGJ5dGVzIHdlIGhhdmU6Ci0gICAgICB1bnNpZ25lZCBleHRyYSA9IGRldGFpbDo6dXRm
OF90cmFpbGluZ19ieXRlX2NvdW50KCptX3Bvc2l0aW9uKTsKLSAgICAgIC8vIGV4dHJhY3QgdGhl
IGV4dHJhIGJpdHMsIDYgZnJvbSBlYWNoIGV4dHJhIGJ5dGU6Ci0gICAgICBCYXNlSXRlcmF0b3Ig
bmV4dChtX3Bvc2l0aW9uKTsKLSAgICAgIGZvcih1bnNpZ25lZCBjID0gMDsgYyA8IGV4dHJhOyAr
K2MpCi0gICAgICB7Ci0gICAgICAgICArK25leHQ7Ci0gICAgICAgICBtX3ZhbHVlIDw8PSA2Owot
ICAgICAgICAgLy8gV2UgbXVzdCBoYXZlIGEgY29udGludWF0aW9uIGJ5dGU6Ci0gICAgICAgICBp
Zigoc3RhdGljX2Nhc3Q8Ym9vc3Q6OnVpbnQ4X3Q+KCpuZXh0KSAmIDB4QzApICE9IDB4ODApCi0g
ICAgICAgICAgICBpbnZhbGlkX3NlcXVlbmNlKCk7Ci0gICAgICAgICBtX3ZhbHVlICs9IHN0YXRp
Y19jYXN0PGJvb3N0Ojp1aW50OF90PigqbmV4dCkgJiAweDNGdTsKLSAgICAgIH0KLSAgICAgIC8v
IHdlIG5vdyBuZWVkIHRvIHJlbW92ZSBhIGZldyBvZiB0aGUgbGVmdG1vc3QgYml0cywgYnV0IGhv
dyBtYW55IGRlcGVuZHMKLSAgICAgIC8vIHVwb24gaG93IG1hbnkgZXh0cmEgYnl0ZXMgd2UndmUg
ZXh0cmFjdGVkOgotICAgICAgc3RhdGljIGNvbnN0IGJvb3N0Ojp1aW50MzJfdCBtYXNrc1s0XSA9
IAotICAgICAgewotICAgICAgICAgMHg3RnUsCi0gICAgICAgICAweDdGRnUsCi0gICAgICAgICAw
eEZGRkZ1LAotICAgICAgICAgMHgxRkZGRkZ1LAotICAgICAgfTsKLSAgICAgIG1fdmFsdWUgJj0g
bWFza3NbZXh0cmFdOwotICAgICAgLy8gY2hlY2sgdGhlIHJlc3VsdCBpcyBpbiByYW5nZToKLSAg
ICAgIGlmKG1fdmFsdWUgPiBzdGF0aWNfY2FzdDxVMzJUeXBlPigweDEwRkZGRnUpKQotICAgICAg
ICAgaW52YWxpZF9zZXF1ZW5jZSgpOwotICAgICAgLy8gVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBh
IHN1cnJvZ2F0ZToKLSAgICAgIGlmKChtX3ZhbHVlID49IHN0YXRpY19jYXN0PFUzMlR5cGU+KDB4
RDgwMCkpICYmIChtX3ZhbHVlIDw9IHN0YXRpY19jYXN0PFUzMlR5cGU+KDB4REZGRikpKQotICAg
ICAgICAgaW52YWxpZF9zZXF1ZW5jZSgpOwotICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBoYXZlIGhh
ZCBhbiBpbnZhbGlkbHkgZW5jb2RlZCBVVEY4IHNlcXVlbmNlOgotICAgICAgaWYoKGV4dHJhID4g
MCkgJiYgKG1fdmFsdWUgPD0gc3RhdGljX2Nhc3Q8VTMyVHlwZT4obWFza3NbZXh0cmEgLSAxXSkp
KQotICAgICAgICAgaW52YWxpZF9zZXF1ZW5jZSgpOwotICAgfQotICAgQmFzZUl0ZXJhdG9yIG1f
cG9zaXRpb247Ci0gICBtdXRhYmxlIFUzMlR5cGUgbV92YWx1ZTsKLX07Ci0KLXRlbXBsYXRlIDxj
bGFzcyBCYXNlSXRlcmF0b3I+Ci1jbGFzcyB1dGYxNl9vdXRwdXRfaXRlcmF0b3IKLXsKLXB1Ymxp
YzoKLSAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlm
ZmVyZW5jZV90eXBlOwotICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZV90eXBlOwotICAgdHlwZWRlZiBib29zdDo6dWludDMyX3QqICAgICAgICAg
ICAgICAgICAgICAgICBwb2ludGVyOwotICAgdHlwZWRlZiBib29zdDo6dWludDMyX3QmICAgICAg
ICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Ci0gICB0eXBlZGVmIHN0ZDo6b3V0cHV0X2l0ZXJh
dG9yX3RhZyAgICAgICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwotCi0gICB1dGYxNl9vdXRw
dXRfaXRlcmF0b3IoY29uc3QgQmFzZUl0ZXJhdG9yJiBiKQotICAgICAgOiBtX3Bvc2l0aW9uKGIp
e30KLSAgIHV0ZjE2X291dHB1dF9pdGVyYXRvcihjb25zdCB1dGYxNl9vdXRwdXRfaXRlcmF0b3Im
IHRoYXQpCi0gICAgICA6IG1fcG9zaXRpb24odGhhdC5tX3Bvc2l0aW9uKXt9Ci0gICB1dGYxNl9v
dXRwdXRfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCB1dGYxNl9vdXRwdXRfaXRlcmF0b3ImIHRo
YXQpCi0gICB7Ci0gICAgICBtX3Bvc2l0aW9uID0gdGhhdC5tX3Bvc2l0aW9uOwotICAgICAgcmV0
dXJuICp0aGlzOwotICAgfQotICAgY29uc3QgdXRmMTZfb3V0cHV0X2l0ZXJhdG9yJiBvcGVyYXRv
ciooKWNvbnN0Ci0gICB7Ci0gICAgICByZXR1cm4gKnRoaXM7Ci0gICB9Ci0gICB2b2lkIG9wZXJh
dG9yPShib29zdDo6dWludDMyX3QgdmFsKWNvbnN0Ci0gICB7Ci0gICAgICBwdXNoKHZhbCk7Ci0g
ICB9Ci0gICB1dGYxNl9vdXRwdXRfaXRlcmF0b3ImIG9wZXJhdG9yKysoKQotICAgewotICAgICAg
cmV0dXJuICp0aGlzOwotICAgfQotICAgdXRmMTZfb3V0cHV0X2l0ZXJhdG9yJiBvcGVyYXRvcisr
KGludCkKLSAgIHsKLSAgICAgIHJldHVybiAqdGhpczsKLSAgIH0KLSAgIEJhc2VJdGVyYXRvciBi
YXNlKCljb25zdAotICAgewotICAgICAgcmV0dXJuIG1fcG9zaXRpb247Ci0gICB9Ci1wcml2YXRl
OgotICAgdm9pZCBwdXNoKGJvb3N0Ojp1aW50MzJfdCB2KWNvbnN0Ci0gICB7Ci0gICAgICBpZih2
ID49IDB4MTAwMDB1KQotICAgICAgewotICAgICAgICAgLy8gYmVnaW4gYnkgY2hlY2tpbmcgZm9y
IGEgY29kZSBwb2ludCBvdXQgb2YgcmFuZ2U6Ci0gICAgICAgICBpZih2ID4gMHgxMEZGRkZ1KQot
ICAgICAgICAgICAgZGV0YWlsOjppbnZhbGlkX3V0ZjMyX2NvZGVfcG9pbnQodik7Ci0gICAgICAg
ICAvLyBzcGxpdCBpbnRvIHR3byBzdXJyb2dhdGVzOgotICAgICAgICAgKm1fcG9zaXRpb24rKyA9
IHN0YXRpY19jYXN0PGJvb3N0Ojp1aW50MTZfdD4odiA+PiAxMCkgKyBkZXRhaWw6OmhpZ2hfc3Vy
cm9nYXRlX2Jhc2U7Ci0gICAgICAgICAqbV9wb3NpdGlvbisrID0gc3RhdGljX2Nhc3Q8Ym9vc3Q6
OnVpbnQxNl90Pih2ICYgZGV0YWlsOjp0ZW5fYml0X21hc2spICsgZGV0YWlsOjpsb3dfc3Vycm9n
YXRlX2Jhc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgICAvLyAxNi1i
aXQgY29kZSBwb2ludDoKLSAgICAgICAgIC8vIHZhbHVlIG11c3Qgbm90IGJlIGEgc3Vycm9nYXRl
OgotICAgICAgICAgaWYoZGV0YWlsOjppc19zdXJyb2dhdGUodikpCi0gICAgICAgICAgICBkZXRh
aWw6OmludmFsaWRfdXRmMzJfY29kZV9wb2ludCh2KTsKLSAgICAgICAgICptX3Bvc2l0aW9uKysg
PSBzdGF0aWNfY2FzdDxib29zdDo6dWludDE2X3Q+KHYpOwotICAgICAgfQotICAgfQotICAgbXV0
YWJsZSBCYXNlSXRlcmF0b3IgbV9wb3NpdGlvbjsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBCYXNl
SXRlcmF0b3I+Ci1jbGFzcyB1dGY4X291dHB1dF9pdGVyYXRvcgotewotcHVibGljOgotICAgdHlw
ZWRlZiB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5
cGU7Ci0gICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlX3R5cGU7Ci0gICB0eXBlZGVmIGJvb3N0Ojp1aW50MzJfdCogICAgICAgICAgICAgICAgICAg
ICAgIHBvaW50ZXI7Ci0gICB0eXBlZGVmIGJvb3N0Ojp1aW50MzJfdCYgICAgICAgICAgICAgICAg
ICAgICAgIHJlZmVyZW5jZTsKLSAgIHR5cGVkZWYgc3RkOjpvdXRwdXRfaXRlcmF0b3JfdGFnICAg
ICAgICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7Ci0KLSAgIHV0Zjhfb3V0cHV0X2l0ZXJhdG9y
KGNvbnN0IEJhc2VJdGVyYXRvciYgYikKLSAgICAgIDogbV9wb3NpdGlvbihiKXt9Ci0gICB1dGY4
X291dHB1dF9pdGVyYXRvcihjb25zdCB1dGY4X291dHB1dF9pdGVyYXRvciYgdGhhdCkKLSAgICAg
IDogbV9wb3NpdGlvbih0aGF0Lm1fcG9zaXRpb24pe30KLSAgIHV0Zjhfb3V0cHV0X2l0ZXJhdG9y
JiBvcGVyYXRvcj0oY29uc3QgdXRmOF9vdXRwdXRfaXRlcmF0b3ImIHRoYXQpCi0gICB7Ci0gICAg
ICBtX3Bvc2l0aW9uID0gdGhhdC5tX3Bvc2l0aW9uOwotICAgICAgcmV0dXJuICp0aGlzOwotICAg
fQotICAgY29uc3QgdXRmOF9vdXRwdXRfaXRlcmF0b3ImIG9wZXJhdG9yKigpY29uc3QKLSAgIHsK
LSAgICAgIHJldHVybiAqdGhpczsKLSAgIH0KLSAgIHZvaWQgb3BlcmF0b3I9KGJvb3N0Ojp1aW50
MzJfdCB2YWwpY29uc3QKLSAgIHsKLSAgICAgIHB1c2godmFsKTsKLSAgIH0KLSAgIHV0Zjhfb3V0
cHV0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkKLSAgIHsKLSAgICAgIHJldHVybiAqdGhpczsKLSAg
IH0KLSAgIHV0Zjhfb3V0cHV0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKGludCkKLSAgIHsKLSAgICAg
IHJldHVybiAqdGhpczsKLSAgIH0KLSAgIEJhc2VJdGVyYXRvciBiYXNlKCljb25zdAotICAgewot
ICAgICAgcmV0dXJuIG1fcG9zaXRpb247Ci0gICB9Ci1wcml2YXRlOgotICAgdm9pZCBwdXNoKGJv
b3N0Ojp1aW50MzJfdCBjKWNvbnN0Ci0gICB7Ci0gICAgICBpZihjID4gMHgxMEZGRkZ1KQotICAg
ICAgICAgZGV0YWlsOjppbnZhbGlkX3V0ZjMyX2NvZGVfcG9pbnQoYyk7Ci0gICAgICBpZihjIDwg
MHg4MHUpCi0gICAgICB7Ci0gICAgICAgICAqbV9wb3NpdGlvbisrID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oYyk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmKGMgPCAweDgwMHUpCi0gICAg
ICB7Ci0gICAgICAgICAqbV9wb3NpdGlvbisrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
MHhDMHUgKyAoYyA+PiA2KSk7Ci0gICAgICAgICAqbV9wb3NpdGlvbisrID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oMHg4MHUgKyAoYyAmIDB4M0Z1KSk7Ci0gICAgICB9Ci0gICAgICBlbHNl
IGlmKGMgPCAweDEwMDAwdSkKLSAgICAgIHsKLSAgICAgICAgICptX3Bvc2l0aW9uKysgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweEUwdSArIChjID4+IDEyKSk7Ci0gICAgICAgICAqbV9w
b3NpdGlvbisrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHg4MHUgKyAoKGMgPj4gNikg
JiAweDNGdSkpOwotICAgICAgICAgKm1fcG9zaXRpb24rKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KDB4ODB1ICsgKGMgJiAweDNGdSkpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAg
ewotICAgICAgICAgKm1fcG9zaXRpb24rKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4
RjB1ICsgKGMgPj4gMTgpKTsKLSAgICAgICAgICptX3Bvc2l0aW9uKysgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigweDgwdSArICgoYyA+PiAxMikgJiAweDNGdSkpOwotICAgICAgICAgKm1f
cG9zaXRpb24rKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ODB1ICsgKChjID4+IDYp
ICYgMHgzRnUpKTsKLSAgICAgICAgICptX3Bvc2l0aW9uKysgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPigweDgwdSArIChjICYgMHgzRnUpKTsKLSAgICAgIH0KLSAgIH0KLSAgIG11dGFibGUg
QmFzZUl0ZXJhdG9yIG1fcG9zaXRpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0j
ZW5kaWYgLy8gQk9PU1RfUkVHRVhfVU5JQ09ERV9JVEVSQVRPUl9IUFAKLQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qvc3RhdGljX2Fzc2VydC5o
cHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9zdGF0aWNfYXNz
ZXJ0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdkNDYxZDQ5MmI2MDM0NTgy
MjgzZTFkNmU2OTI5ODkzNGQzY2VhNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC9z
dGF0aWNfYXNzZXJ0LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0vLyAgKEMp
IENvcHlyaWdodCBKb2huIE1hZGRvY2sgMjAwMC4KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQg
ZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSAKLS8vICBCb29zdCBTb2Z0d2FyZSBMaWNl
bnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSAKLS8vICBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0K
LS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9zdGF0aWNfYXNzZXJ0IGZvciBkb2N1
bWVudGF0aW9uLgotCi0vKgotIFJldmlzaW9uIGhpc3Rvcnk6Ci0gICAwMiBBdWd1c3QgMjAwMAot
ICAgICAgSW5pdGlhbCB2ZXJzaW9uLgotKi8KLQotI2lmbmRlZiBCT09TVF9TVEFUSUNfQVNTRVJU
X0hQUAotI2RlZmluZSBCT09TVF9TVEFUSUNfQVNTRVJUX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3Qv
Y29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0KLSNp
ZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhf
XykKLS8vCi0vLyBUaGlzIGlzIGhvcnJpYmxlLCBidXQgaXQgc2VlbXMgdG8gYmUgdGhlIG9ubHkg
d2UgY2FuIHNodXQgdXAgdGhlCi0vLyAiYW5vbnltb3VzIHZhcmlhZGljIG1hY3JvcyB3ZXJlIGlu
dHJvZHVjZWQgaW4gQzk5IFstV3ZhcmlhZGljLW1hY3Jvc10iCi0vLyB3YXJuaW5nIHRoYXQgZ2V0
IHNwZXdlZCBvdXQgb3RoZXJ3aXNlIGluIG5vbi1DKysxMSBtb2RlLgotLy8KLSNwcmFnbWEgR0ND
IHN5c3RlbV9oZWFkZXIKLSNlbmRpZgotCi0jaWZuZGVmIEJPT1NUX05PX0NYWDExX1NUQVRJQ19B
U1NFUlQKLSMgIGlmbmRlZiBCT09TVF9OT19DWFgxMV9WQVJJQURJQ19NQUNST1MKLSMgICAgIGRl
ZmluZSBCT09TVF9TVEFUSUNfQVNTRVJUX01TRyggLi4uICkgc3RhdGljX2Fzc2VydChfX1ZBX0FS
R1NfXykKLSMgIGVsc2UKLSMgICAgIGRlZmluZSBCT09TVF9TVEFUSUNfQVNTRVJUX01TRyggQiwg
TXNnICkgc3RhdGljX2Fzc2VydCggQiwgTXNnICkKLSMgIGVuZGlmCi0jZWxzZQotIyAgICAgZGVm
aW5lIEJPT1NUX1NUQVRJQ19BU1NFUlRfTVNHKCBCLCBNc2cgKSBCT09TVF9TVEFUSUNfQVNTRVJU
KCBCICkKLSNlbmRpZgotCi0jaWZkZWYgX19CT1JMQU5EQ19fCi0vLwotLy8gd29ya2Fyb3VuZCBm
b3IgYnVnZ3kgaW50ZWdyYWwtY29uc3RhbnQgZXhwcmVzc2lvbiBzdXBwb3J0OgotI2RlZmluZSBC
T09TVF9CVUdHWV9JTlRFR1JBTF9DT05TVEFOVF9FWFBSRVNTSU9OUwotI2VuZGlmCi0KLSNpZiBk
ZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPT0gMykgJiYgKChfX0dOVUNfTUlOT1JfXyA9
PSAzKSB8fCAoX19HTlVDX01JTk9SX18gPT0gNCkpCi0vLyBnY2MgMy4zIGFuZCAzLjQgZG9uJ3Qg
cHJvZHVjZSBnb29kIGVycm9yIG1lc3NhZ2VzIHdpdGggdGhlIGRlZmF1bHQgdmVyc2lvbjoKLSMg
IGRlZmluZSBCT09TVF9TQV9HQ0NfV09SS0FST1VORAotI2VuZGlmCi0KLS8vCi0vLyBJZiB0aGUg
Y29tcGlsZXIgaXNzdWVzIHdhcm5pbmdzIGFib3V0IG9sZCBDIHN0eWxlIGNhc3RzLAotLy8gdGhl
biBlbmFibGUgdGhpczoKLS8vCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+
IDMpIHx8ICgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDQpKSkKLSMgIGlm
bmRlZiBCT09TVF9OT19DWFgxMV9WQVJJQURJQ19NQUNST1MKLSMgICAgIGRlZmluZSBCT09TVF9T
VEFUSUNfQVNTRVJUX0JPT0xfQ0FTVCggLi4uICkgKChfX1ZBX0FSR1NfXykgPT0gMCA/IGZhbHNl
IDogdHJ1ZSkKLSMgIGVsc2UKLSMgICAgIGRlZmluZSBCT09TVF9TVEFUSUNfQVNTRVJUX0JPT0xf
Q0FTVCggeCApICgoeCkgPT0gMCA/IGZhbHNlIDogdHJ1ZSkKLSMgIGVuZGlmCi0jZWxzZQotIyAg
aWZuZGVmIEJPT1NUX05PX0NYWDExX1ZBUklBRElDX01BQ1JPUwotIyAgICAgZGVmaW5lIEJPT1NU
X1NUQVRJQ19BU1NFUlRfQk9PTF9DQVNUKCAuLi4gKSAoYm9vbCkoX19WQV9BUkdTX18pCi0jICBl
bHNlCi0jICAgICBkZWZpbmUgQk9PU1RfU1RBVElDX0FTU0VSVF9CT09MX0NBU1QoeCkgKGJvb2wp
KHgpCi0jICBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgQk9PU1RfTk9fQ1hYMTFfU1RBVElDX0FT
U0VSVAotIyAgaWZuZGVmIEJPT1NUX05PX0NYWDExX1ZBUklBRElDX01BQ1JPUwotIyAgICAgZGVm
aW5lIEJPT1NUX1NUQVRJQ19BU1NFUlQoIC4uLiApIHN0YXRpY19hc3NlcnQoX19WQV9BUkdTX18s
ICNfX1ZBX0FSR1NfXykKLSMgIGVsc2UKLSMgICAgIGRlZmluZSBCT09TVF9TVEFUSUNfQVNTRVJU
KCBCICkgc3RhdGljX2Fzc2VydChCLCAjQikKLSMgIGVuZGlmCi0jZWxzZQotCi1uYW1lc3BhY2Ug
Ym9vc3R7Ci0KLS8vIEhQIGFDQyBjYW5ub3QgZGVhbCB3aXRoIG1pc3NpbmcgbmFtZXMgZm9yIHRl
bXBsYXRlIHZhbHVlIHBhcmFtZXRlcnMKLXRlbXBsYXRlIDxib29sIHg+IHN0cnVjdCBTVEFUSUNf
QVNTRVJUSU9OX0ZBSUxVUkU7Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBTVEFUSUNfQVNTRVJUSU9O
X0ZBSUxVUkU8dHJ1ZT4geyBlbnVtIHsgdmFsdWUgPSAxIH07IH07Ci0KLS8vIEhQIGFDQyBjYW5u
b3QgZGVhbCB3aXRoIG1pc3NpbmcgbmFtZXMgZm9yIHRlbXBsYXRlIHZhbHVlIHBhcmFtZXRlcnMK
LXRlbXBsYXRlPGludCB4PiBzdHJ1Y3Qgc3RhdGljX2Fzc2VydF90ZXN0e307Ci0KLX0KLQotLy8K
LS8vIEltcGxpY2l0IGluc3RhbnRpYXRpb24gcmVxdWlyZXMgdGhhdCBhbGwgbWVtYmVyIGRlY2xh
cmF0aW9ucyBiZQotLy8gaW5zdGFudGlhdGVkLCBidXQgdGhhdCB0aGUgZGVmaW5pdGlvbnMgYXJl
ICpub3QqIGluc3RhbnRpYXRlZC4KLS8vCi0vLyBJdCdzIG5vdCBwYXJ0aWN1bGFybHkgY2xlYXIg
aG93IHRoaXMgYXBwbGllcyB0byBlbnVtJ3Mgb3IgdHlwZWRlZnM7Ci0vLyBib3RoIGFyZSBkZXNj
cmliZWQgYXMgZGVjbGFyYXRpb25zIFs3LjEuM10gYW5kIFs3LjJdIGluIHRoZSBzdGFuZGFyZCwK
LS8vIGhvd2V2ZXIgc29tZSBjb21waWxlcnMgdXNlICJkZWxheWVkIGV2YWx1YXRpb24iIG9mIG9u
ZSBvciBtb3JlIG9mCi0vLyB0aGVzZSB3aGVuIGltcGxpY2l0bHkgaW5zdGFudGlhdGluZyB0ZW1w
bGF0ZXMuICBXZSB1c2UgdHlwZWRlZiBkZWNsYXJhdGlvbnMKLS8vIGJ5IGRlZmF1bHQsIGJ1dCB0
cnkgZGVmaW5pbmcgQk9PU1RfVVNFX0VOVU1fU1RBVElDX0FTU0VSVCBpZiB0aGUgZW51bQotLy8g
dmVyc2lvbiBnZXRzIGJldHRlciByZXN1bHRzIGZyb20geW91ciBjb21waWxlci4uLgotLy8KLS8v
IEltcGxlbWVudGF0aW9uOgotLy8gQm90aCBvZiB0aGVzZSB2ZXJzaW9ucyByZWx5IG9uIHNpemVv
ZihpbmNvbXBsZXRlX3R5cGUpIGdlbmVyYXRpbmcgYW4gZXJyb3IKLS8vIG1lc3NhZ2UgY29udGFp
bmluZyB0aGUgbmFtZSBvZiB0aGUgaW5jb21wbGV0ZSB0eXBlLiAgV2UgdXNlCi0vLyAiU1RBVElD
X0FTU0VSVElPTl9GQUlMVVJFIiBhcyB0aGUgdHlwZSBuYW1lIGhlcmUgdG8gZ2VuZXJhdGUKLS8v
IGFuIGV5ZSBjYXRjaGluZyBlcnJvciBtZXNzYWdlLiAgVGhlIHJlc3VsdCBvZiB0aGUgc2l6ZW9m
IGV4cHJlc3Npb24gaXMgZWl0aGVyCi0vLyB1c2VkIGFzIGFuIGVudW0gaW5pdGlhbGlzZXIsIG9y
IGFzIGEgdGVtcGxhdGUgYXJndW1lbnQgZGVwZW5kaW5nIHdoaWNoIHZlcnNpb24KLS8vIGlzIGlu
IHVzZS4uLgotLy8gTm90ZSB0aGF0IHRoZSBhcmd1bWVudCB0byB0aGUgYXNzZXJ0IGlzIGV4cGxp
Y2l0bHkgY2FzdCB0byBib29sIHVzaW5nIG9sZC0KLS8vIHN0eWxlIGNhc3RzOiB0b28gbWFueSBj
b21waWxlcnMgY3VycmVudGx5IGhhdmUgcHJvYmxlbXMgd2l0aCBzdGF0aWNfY2FzdAotLy8gd2hl
biB1c2VkIGluc2lkZSBpbnRlZ3JhbCBjb25zdGFudCBleHByZXNzaW9ucy4KLS8vCi0jaWYgIWRl
ZmluZWQoQk9PU1RfQlVHR1lfSU5URUdSQUxfQ09OU1RBTlRfRVhQUkVTU0lPTlMpCi0KLSNpZiBk
ZWZpbmVkKEJPT1NUX01TVkMpICYmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfVkFSSUFESUNfTUFD
Uk9TKQotI2RlZmluZSBCT09TVF9TVEFUSUNfQVNTRVJUKCBCICkgXAotICAgdHlwZWRlZiA6OmJv
b3N0OjpzdGF0aWNfYXNzZXJ0X3Rlc3Q8XAotICAgICAgc2l6ZW9mKDo6Ym9vc3Q6OlNUQVRJQ19B
U1NFUlRJT05fRkFJTFVSRTwgQk9PU1RfU1RBVElDX0FTU0VSVF9CT09MX0NBU1QgKCBCICkgPik+
XAotICAgICAgICAgQk9PU1RfSk9JTihib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfLCBfX0NP
VU5URVJfXykKLSNlbGlmIGRlZmluZWQoQk9PU1RfTVNWQykKLSNkZWZpbmUgQk9PU1RfU1RBVElD
X0FTU0VSVCguLi4pIFwKLSAgIHR5cGVkZWYgOjpib29zdDo6c3RhdGljX2Fzc2VydF90ZXN0PFwK
LSAgICAgIHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IEJPT1NUX1NU
QVRJQ19BU1NFUlRfQk9PTF9DQVNUIChfX1ZBX0FSR1NfXykgPik+XAotICAgICAgICAgQk9PU1Rf
Sk9JTihib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfLCBfX0NPVU5URVJfXykKLSNlbGlmIChk
ZWZpbmVkKEJPT1NUX0lOVEVMX0NYWF9WRVJTSU9OKSB8fCBkZWZpbmVkKEJPT1NUX1NBX0dDQ19X
T1JLQVJPVU5EKSkgICYmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfVkFSSUFESUNfTUFDUk9TKQot
Ly8gYWd1cnQgMTUvc2VwLzAyOiBhIHNwZWNpYWwgY2FyZSBpcyBuZWVkZWQgdG8gZm9yY2UgSW50
ZWwgQysrIGlzc3VlIGFuIGVycm9yIAotLy8gaW5zdGVhZCBvZiB3YXJuaW5nIGluIGNhc2Ugb2Yg
ZmFpbHVyZQotIyBkZWZpbmUgQk9PU1RfU1RBVElDX0FTU0VSVCggQiApIFwKLSAgICB0eXBlZGVm
IGNoYXIgQk9PU1RfSk9JTihib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfLCBfX0xJTkVfXykg
XAotICAgICAgICBbIDo6Ym9vc3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgQk9PU1RfU1RB
VElDX0FTU0VSVF9CT09MX0NBU1QoIEIgKSA+Ojp2YWx1ZSBdCi0jZWxpZiAoZGVmaW5lZChCT09T
VF9JTlRFTF9DWFhfVkVSU0lPTikgfHwgZGVmaW5lZChCT09TVF9TQV9HQ0NfV09SS0FST1VORCkp
ICAmJiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9WQVJJQURJQ19NQUNST1MpCi0vLyBhZ3VydCAx
NS9zZXAvMDI6IGEgc3BlY2lhbCBjYXJlIGlzIG5lZWRlZCB0byBmb3JjZSBJbnRlbCBDKysgaXNz
dWUgYW4gZXJyb3IgCi0vLyBpbnN0ZWFkIG9mIHdhcm5pbmcgaW4gY2FzZSBvZiBmYWlsdXJlCi0j
IGRlZmluZSBCT09TVF9TVEFUSUNfQVNTRVJUKC4uLikgXAotICAgIHR5cGVkZWYgY2hhciBCT09T
VF9KT0lOKGJvb3N0X3N0YXRpY19hc3NlcnRfdHlwZWRlZl8sIF9fTElORV9fKSBcCi0gICAgICAg
IFsgOjpib29zdDo6U1RBVElDX0FTU0VSVElPTl9GQUlMVVJFPCBCT09TVF9TVEFUSUNfQVNTRVJU
X0JPT0xfQ0FTVCggX19WQV9BUkdTX18gKSA+Ojp2YWx1ZSBdCi0jZWxpZiBkZWZpbmVkKF9fc2dp
KQotLy8gc3BlY2lhbCB2ZXJzaW9uIGZvciBTR0kgTUlQU3BybyBjb21waWxlcgotI2RlZmluZSBC
T09TVF9TVEFUSUNfQVNTRVJUKCBCICkgXAotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2ws
IFwKLSAgICAgQk9PU1RfSk9JTihib29zdF9zdGF0aWNfYXNzZXJ0X3Rlc3RfLCBfX0xJTkVfXykg
PSAoIEIgKSk7IFwKLSAgIHR5cGVkZWYgOjpib29zdDo6c3RhdGljX2Fzc2VydF90ZXN0PFwKLSAg
ICAgc2l6ZW9mKDo6Ym9vc3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgXAotICAgICAgIEJP
T1NUX0pPSU4oYm9vc3Rfc3RhdGljX2Fzc2VydF90ZXN0XywgX19MSU5FX18pID4pPlwKLSAgICAg
ICAgIEJPT1NUX0pPSU4oYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBlZGVmXywgX19MSU5FX18pCi0j
ZWxpZiBCT09TVF9XT1JLQVJPVU5EKF9fTVdFUktTX18sIDw9IDB4MzAwMykKLS8vIHNwZWNpYWwg
dmVyc2lvbiBmb3IgQ29kZVdhcnJpb3IgPD0gOC54Ci0jZGVmaW5lIEJPT1NUX1NUQVRJQ19BU1NF
UlQoIEIgKSBcCi0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50LCBcCi0gICAgIEJPT1NUX0pP
SU4oYm9vc3Rfc3RhdGljX2Fzc2VydF90ZXN0XywgX19MSU5FX18pID0gXAotICAgICAgIHNpemVv
Zig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IEJPT1NUX1NUQVRJQ19BU1NFUlRf
Qk9PTF9DQVNUKCBCICkgPikgKQotI2Vsc2UKLS8vIGdlbmVyaWMgdmVyc2lvbgotIyAgaWZuZGVm
IEJPT1NUX05PX0NYWDExX1ZBUklBRElDX01BQ1JPUwotIyAgICAgZGVmaW5lIEJPT1NUX1NUQVRJ
Q19BU1NFUlQoIC4uLiApIFwKLSAgICAgICAgIHR5cGVkZWYgOjpib29zdDo6c3RhdGljX2Fzc2Vy
dF90ZXN0PFwKLSAgICAgICAgICAgIHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZB
SUxVUkU8IEJPT1NUX1NUQVRJQ19BU1NFUlRfQk9PTF9DQVNUKCBfX1ZBX0FSR1NfXyApID4pPlwK
LSAgICAgICAgICAgICAgIEJPT1NUX0pPSU4oYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBlZGVmXywg
X19MSU5FX18pIEJPT1NUX0FUVFJJQlVURV9VTlVTRUQKLSMgIGVsc2UKLSMgICAgIGRlZmluZSBC
T09TVF9TVEFUSUNfQVNTRVJUKCBCICkgXAotICAgICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0
aWNfYXNzZXJ0X3Rlc3Q8XAotICAgICAgICAgICAgc2l6ZW9mKDo6Ym9vc3Q6OlNUQVRJQ19BU1NF
UlRJT05fRkFJTFVSRTwgQk9PU1RfU1RBVElDX0FTU0VSVF9CT09MX0NBU1QoIEIgKSA+KT5cCi0g
ICAgICAgICAgICAgICBCT09TVF9KT0lOKGJvb3N0X3N0YXRpY19hc3NlcnRfdHlwZWRlZl8sIF9f
TElORV9fKSBCT09TVF9BVFRSSUJVVEVfVU5VU0VECi0jICBlbmRpZgotI2VuZGlmCi0KLSNlbHNl
Ci0vLyBhbHRlcm5hdGl2ZSBlbnVtIGJhc2VkIGltcGxlbWVudGF0aW9uOgotIyAgaWZuZGVmIEJP
T1NUX05PX0NYWDExX1ZBUklBRElDX01BQ1JPUwotIyAgICBkZWZpbmUgQk9PU1RfU1RBVElDX0FT
U0VSVCggLi4uICkgXAotICAgICAgICAgZW51bSB7IEJPT1NUX0pPSU4oYm9vc3Rfc3RhdGljX2Fz
c2VydF9lbnVtXywgX19MSU5FX18pIFwKLSAgICAgICAgICAgID0gc2l6ZW9mKDo6Ym9vc3Q6OlNU
QVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wpKCBfX1ZBX0FSR1NfXyApID4pIH0KLSMgIGVs
c2UKLSMgICAgZGVmaW5lIEJPT1NUX1NUQVRJQ19BU1NFUlQoQikgXAotICAgICAgICAgZW51bSB7
IEJPT1NUX0pPSU4oYm9vc3Rfc3RhdGljX2Fzc2VydF9lbnVtXywgX19MSU5FX18pIFwKLSAgICAg
ICAgICAgID0gc2l6ZW9mKDo6Ym9vc3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wp
KCBCICkgPikgfQotIyAgZW5kaWYKLSNlbmRpZgotI2VuZGlmIC8vIGRlZmluZWQoQk9PU1RfTk9f
Q1hYMTFfU1RBVElDX0FTU0VSVCkKLQotI2VuZGlmIC8vIEJPT1NUX1NUQVRJQ19BU1NFUlRfSFBQ
Ci0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvdGhyb3dfZXhjZXB0aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3Rocm93X2V4Y2VwdGlvbi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGFhOTc3ZGZjNzllNDRjZDFiM2I5OWEzMzQ0MGQxMTA0YTgwZjhmM2QuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdGhyb3dfZXhjZXB0aW9uLmhwcAorKysgL2Rldi9udWxsCkBA
IC0xLDEwMiArMCwwIEBACi0jaWZuZGVmIFVVSURfQUExNUU3NEE4NTZGMTFFMDhCOEQ5M0YyNDgy
NDAxOUIKLSNkZWZpbmUgVVVJRF9BQTE1RTc0QTg1NkYxMUUwOEI4RDkzRjI0ODI0MDE5QgotI2lm
IChfX0dOVUNfXyoxMDArX19HTlVDX01JTk9SX18+MzAxKSAmJiAhZGVmaW5lZChCT09TVF9FWENF
UFRJT05fRU5BQkxFX1dBUk5JTkdTKQotI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoQk9PU1RfRVhDRVBUSU9OX0VOQUJM
RV9XQVJOSU5HUykKLSNwcmFnbWEgd2FybmluZyhwdXNoLDEpCi0jZW5kaWYKLQotLy8gTVMgY29t
cGF0aWJsZSBjb21waWxlcnMgc3VwcG9ydCAjcHJhZ21hIG9uY2UKLQotI2lmIGRlZmluZWQoX01T
Q19WRVIpICYmIChfTVNDX1ZFUiA+PSAxMDIwKQotIyBwcmFnbWEgb25jZQotI2VuZGlmCi0KLS8v
Ci0vLyAgYm9vc3QvdGhyb3dfZXhjZXB0aW9uLmhwcAotLy8KLS8vICBDb3B5cmlnaHQgKGMpIDIw
MDIgUGV0ZXIgRGltb3YgYW5kIE11bHRpIE1lZGlhIEx0ZC4KLS8vICBDb3B5cmlnaHQgKGMpIDIw
MDgtMjAwOSBFbWlsIERvdGNoZXZza2kgYW5kIFJldmVyZ2UgU3R1ZGlvcywgSW5jLgotLy8KLS8v
ICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAx
LjAuIChTZWUKLS8vICBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLS8vCi0vLyAgaHR0
cDovL3d3dy5ib29zdC5vcmcvbGlicy91dGlsaXR5L3Rocm93X2V4Y2VwdGlvbi5odG1sCi0vLwot
Ci0jaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL3dvcmthcm91bmQuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8ZXhjZXB0aW9uPgotCi0jaWYgIWRlZmluZWQoIEJPT1NU
X0VYQ0VQVElPTl9ESVNBQkxFICkgJiYgZGVmaW5lZCggX19CT1JMQU5EQ19fICkgJiYgQk9PU1Rf
V09SS0FST1VORCggX19CT1JMQU5EQ19fLCBCT09TVF9URVNURURfQVQoMHg1OTMpICkKLSMgZGVm
aW5lIEJPT1NUX0VYQ0VQVElPTl9ESVNBQkxFCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKCBCT09T
VF9FWENFUFRJT05fRElTQUJMRSApICYmIGRlZmluZWQoIEJPT1NUX01TVkMgKSAmJiBCT09TVF9X
T1JLQVJPVU5EKCBCT09TVF9NU1ZDLCA8IDEzMTAgKQotIyBkZWZpbmUgQk9PU1RfRVhDRVBUSU9O
X0RJU0FCTEUKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoIEJPT1NUX0VYQ0VQVElPTl9ESVNBQkxF
ICkKLSMgaW5jbHVkZSA8Ym9vc3QvZXhjZXB0aW9uL2V4Y2VwdGlvbi5ocHA+Ci0jaWYgIWRlZmlu
ZWQoQk9PU1RfVEhST1dfRVhDRVBUSU9OX0NVUlJFTlRfRlVOQ1RJT04pCi0jIGluY2x1ZGUgPGJv
b3N0L2N1cnJlbnRfZnVuY3Rpb24uaHBwPgotIyBkZWZpbmUgQk9PU1RfVEhST1dfRVhDRVBUSU9O
X0NVUlJFTlRfRlVOQ1RJT04gQk9PU1RfQ1VSUkVOVF9GVU5DVElPTgotI2VuZGlmCi0jIGRlZmlu
ZSBCT09TVF9USFJPV19FWENFUFRJT04oeCkgOjpib29zdDo6ZXhjZXB0aW9uX2RldGFpbDo6dGhy
b3dfZXhjZXB0aW9uXyh4LEJPT1NUX1RIUk9XX0VYQ0VQVElPTl9DVVJSRU5UX0ZVTkNUSU9OLF9f
RklMRV9fLF9fTElORV9fKQotI2Vsc2UKLSMgZGVmaW5lIEJPT1NUX1RIUk9XX0VYQ0VQVElPTih4
KSA6OmJvb3N0Ojp0aHJvd19leGNlcHRpb24oeCkKLSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3QK
LXsKLSNpZmRlZiBCT09TVF9OT19FWENFUFRJT05TCi0KLXZvaWQgdGhyb3dfZXhjZXB0aW9uKCBz
dGQ6OmV4Y2VwdGlvbiBjb25zdCAmIGUgKTsgLy8gdXNlciBkZWZpbmVkCi0KLSNlbHNlCi0KLWlu
bGluZSB2b2lkIHRocm93X2V4Y2VwdGlvbl9hc3NlcnRfY29tcGF0aWJpbGl0eSggc3RkOjpleGNl
cHRpb24gY29uc3QgJiApIHsgfQotCi10ZW1wbGF0ZTxjbGFzcyBFPiBCT09TVF9OT1JFVFVSTiBp
bmxpbmUgdm9pZCB0aHJvd19leGNlcHRpb24oIEUgY29uc3QgJiBlICkKLXsKLSAgICAvL0FsbCBi
b29zdCBleGNlcHRpb25zIGFyZSByZXF1aXJlZCB0byBkZXJpdmUgZnJvbSBzdGQ6OmV4Y2VwdGlv
biwKLSAgICAvL3RvIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggQk9PU1RfTk9fRVhDRVBUSU9O
Uy4KLSAgICB0aHJvd19leGNlcHRpb25fYXNzZXJ0X2NvbXBhdGliaWxpdHkoZSk7Ci0KLSNpZm5k
ZWYgQk9PU1RfRVhDRVBUSU9OX0RJU0FCTEUKLSAgICB0aHJvdyBlbmFibGVfY3VycmVudF9leGNl
cHRpb24oZW5hYmxlX2Vycm9yX2luZm8oZSkpOwotI2Vsc2UKLSAgICB0aHJvdyBlOwotI2VuZGlm
Ci19Ci0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoIEJPT1NUX0VYQ0VQVElPTl9ESVNBQkxFICkK
LSAgICBuYW1lc3BhY2UKLSAgICBleGNlcHRpb25fZGV0YWlsCi0gICAgewotICAgICAgICB0ZW1w
bGF0ZSA8Y2xhc3MgRT4KLSAgICAgICAgQk9PU1RfTk9SRVRVUk4KLSAgICAgICAgdm9pZAotICAg
ICAgICB0aHJvd19leGNlcHRpb25fKCBFIGNvbnN0ICYgeCwgY2hhciBjb25zdCAqIGN1cnJlbnRf
ZnVuY3Rpb24sIGNoYXIgY29uc3QgKiBmaWxlLCBpbnQgbGluZSApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGJvb3N0Ojp0aHJvd19leGNlcHRpb24oCi0gICAgICAgICAgICAgICAgc2V0X2luZm8o
Ci0gICAgICAgICAgICAgICAgICAgIHNldF9pbmZvKAotICAgICAgICAgICAgICAgICAgICAgICAg
c2V0X2luZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2Vycm9yX2luZm8o
eCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dfZnVuY3Rpb24oY3VycmVudF9m
dW5jdGlvbikpLAotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dfZmlsZShmaWxlKSksCi0g
ICAgICAgICAgICAgICAgICAgIHRocm93X2xpbmUobGluZSkpKTsKLSAgICAgICAgfQotICAgIH0K
LSNlbmRpZgotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2lmIGRlZmluZWQoX01TQ19WRVIpICYm
ICFkZWZpbmVkKEJPT1NUX0VYQ0VQVElPTl9FTkFCTEVfV0FSTklOR1MpCi0jcHJhZ21hIHdhcm5p
bmcocG9wKQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzLmhwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOTNhOTkyZDM4Yzg2NDlmM2U2MTJmNzRiYzk2NTY4NzE0MTk0Njk3ZS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgSm9obiBNYWRkb2NrIDIw
MDAuCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0
byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBk
b2N1bWVudGF0aW9uLgotCi0vLyAgU2VlIGJvb3N0L3R5cGVfdHJhaXRzLyouaHBwIGZvciBmdWxs
IGNvcHlyaWdodCBub3RpY2VzLgotCi0jaWZuZGVmIEJPT1NUX1RZUEVfVFJBSVRTX0hQUAotI2Rl
ZmluZSBCT09TVF9UWVBFX1RSQUlUU19IUFAKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRz
L2FkZF9jb25zdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvYWRkX2N2LmhwcD4K
LSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9hZGRfbHZhbHVlX3JlZmVyZW5jZS5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvYWRkX3BvaW50ZXIuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2FkZF9yZWZlcmVuY2UuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2FkZF9ydmFsdWVfcmVmZXJlbmNlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9hZGRfdm9sYXRpbGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2FsaWdu
ZWRfc3RvcmFnZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvYWxpZ25tZW50X29m
LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9jb21tb25fdHlwZS5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvY29uZGl0aW9uYWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L3R5cGVfdHJhaXRzL2NvcHlfY3YuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2Rl
Y2F5LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9kZWNsdmFsLmhwcD4KLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9leHRlbnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2Zsb2F0aW5nX3BvaW50X3Byb21vdGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlw
ZV90cmFpdHMvZnVuY3Rpb25fdHJhaXRzLmhwcD4KLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2hhc19iaXRfYW5kLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9oYXNfYml0
X2FuZF9hc3NpZ24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2hhc19iaXRfb3Iu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2hhc19iaXRfb3JfYXNzaWduLmhwcD4K
LSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9oYXNfYml0X3hvci5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvdHlwZV90cmFpdHMvaGFzX2JpdF94b3JfYXNzaWduLmhwcD4KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9oYXNfY29tcGxlbWVudC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90
cmFpdHMvaGFzX2RlcmVmZXJlbmNlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9o
YXNfZGl2aWRlcy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaGFzX2RpdmlkZXNf
YXNzaWduLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9oYXNfZXF1YWxfdG8uaHBw
PgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2hhc19ncmVhdGVyLmhwcD4KLSNpbmNsdWRl
IDxib29zdC90eXBlX3RyYWl0cy9oYXNfZ3JlYXRlcl9lcXVhbC5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvaGFzX2xlZnRfc2hpZnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2hhc19sZWZ0X3NoaWZ0X2Fzc2lnbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90
cmFpdHMvaGFzX2xlc3MuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2hhc19sZXNz
X2VxdWFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9oYXNfbG9naWNhbF9hbmQu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2hhc19sb2dpY2FsX25vdC5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaGFzX2xvZ2ljYWxfb3IuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2hhc19taW51cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90
cmFpdHMvaGFzX21pbnVzX2Fzc2lnbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
aGFzX21vZHVsdXMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2hhc19tb2R1bHVz
X2Fzc2lnbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaGFzX211bHRpcGxpZXMu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2hhc19tdWx0aXBsaWVzX2Fzc2lnbi5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaGFzX25lZ2F0ZS5ocHA+Ci0jaWYgIWRl
ZmluZWQoX19CT1JMQU5EQ19fKSAmJiAhZGVmaW5lZChfX0NVREFDQ19fKQotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2hhc19uZXdfb3BlcmF0b3IuaHBwPgotI2VuZGlmCi0jaW5jbHVkZSA8
Ym9vc3QvdHlwZV90cmFpdHMvaGFzX25vdF9lcXVhbF90by5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
dHlwZV90cmFpdHMvaGFzX25vdGhyb3dfYXNzaWduLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBl
X3RyYWl0cy9oYXNfbm90aHJvd19jb25zdHJ1Y3Rvci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlw
ZV90cmFpdHMvaGFzX25vdGhyb3dfY29weS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaGFzX25vdGhyb3dfZGVzdHJ1Y3Rvci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaGFzX3BsdXMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2hhc19wbHVzX2Fz
c2lnbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaGFzX3Bvc3RfZGVjcmVtZW50
LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9oYXNfcG9zdF9pbmNyZW1lbnQuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2hhc19wcmVfZGVjcmVtZW50LmhwcD4KLSNp
bmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9oYXNfcHJlX2luY3JlbWVudC5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvdHlwZV90cmFpdHMvaGFzX3JpZ2h0X3NoaWZ0LmhwcD4KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9oYXNfcmlnaHRfc2hpZnRfYXNzaWduLmhwcD4KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9hc3NpZ24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5
cGVfdHJhaXRzL2hhc190cml2aWFsX2NvbnN0cnVjdG9yLmhwcD4KLSNpbmNsdWRlIDxib29zdC90
eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9jb3B5LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9oYXNfdHJpdmlhbF9kZXN0cnVjdG9yLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9oYXNfdHJpdmlhbF9tb3ZlX2Fzc2lnbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90
cmFpdHMvaGFzX3RyaXZpYWxfbW92ZV9jb25zdHJ1Y3Rvci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
dHlwZV90cmFpdHMvaGFzX3VuYXJ5X21pbnVzLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9oYXNfdW5hcnlfcGx1cy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaGFz
X3ZpcnR1YWxfZGVzdHJ1Y3Rvci5ocHA+Ci0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9p
bnRlZ3JhbF9jb25zdGFudC5ocHA+Ci0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19h
YnN0cmFjdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfYXJpdGhtZXRpYy5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfYXJyYXkuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Fzc2lnbmFibGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5
cGVfdHJhaXRzL2lzX2Jhc2VfYW5kX2Rlcml2ZWQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2lzX2Jhc2Vfb2YuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Ns
YXNzLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jb21wbGV4LmhwcD4KLSNp
bmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jb21wb3VuZC5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRz
L2lzX2NvbnN0cnVjdGlibGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Nv
bnZlcnRpYmxlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jb3B5X2Fzc2ln
bmFibGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2NvcHlfY29uc3RydWN0
aWJsZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfZGVmYXVsdF9jb25zdHJ1
Y3RpYmxlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19kZXN0cnVjdGlibGUu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2VtcHR5LmhwcD4KLSNpbmNsdWRl
IDxib29zdC90eXBlX3RyYWl0cy9pc19lbnVtLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9pc19maW5hbC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfZmxvYXQu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Zsb2F0aW5nX3BvaW50LmhwcD4K
LSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19mdW5jdGlvbi5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvdHlwZV90cmFpdHMvaXNfZnVuZGFtZW50YWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5
cGVfdHJhaXRzL2lzX2ludGVncmFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9p
c19sdmFsdWVfcmVmZXJlbmNlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19t
ZW1iZXJfZnVuY3Rpb25fcG9pbnRlci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
aXNfbWVtYmVyX29iamVjdF9wb2ludGVyLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0
cy9pc19tZW1iZXJfcG9pbnRlci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNf
bm90aHJvd19tb3ZlX2Fzc2lnbmFibGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRz
L2lzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBl
X3RyYWl0cy9pc19vYmplY3QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3Bv
ZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfcG9pbnRlci5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfcG9seW1vcnBoaWMuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2lzX3JlZmVyZW5jZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90
cmFpdHMvaXNfcnZhbHVlX3JlZmVyZW5jZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaXNfc2FtZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfc2NhbGFyLmhw
cD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zaWduZWQuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2lzX3N0YXRlbGVzcy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlw
ZV90cmFpdHMvaXNfdW5pb24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3Vu
c2lnbmVkLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc192aXJ0dWFsX2Jhc2Vf
b2YuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvaWQuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvbGF0aWxlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90
eXBlX3RyYWl0cy9tYWtlX3NpZ25lZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
bWFrZV91bnNpZ25lZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvbWFrZV92b2lk
LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yYW5rLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC90eXBlX3RyYWl0cy9yZW1vdmVfYWxsX2V4dGVudHMuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L3R5cGVfdHJhaXRzL3JlbW92ZV9ib3VuZHMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL3JlbW92ZV9jb25zdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvcmVtb3Zl
X2N2LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfZXh0ZW50LmhwcD4K
LSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcG9pbnRlci5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX3JlZmVyZW5jZS5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvcmVtb3ZlX3ZvbGF0aWxlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBl
X3RyYWl0cy90eXBlX2lkZW50aXR5LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy90
eXBlX3dpdGhfYWxpZ25tZW50LmhwcD4KLQotI2lmICEoZGVmaW5lZChfX3NnaSkgJiYgZGVmaW5l
ZChfX0VER19WRVJTSU9OX18pICYmIChfX0VER19WRVJTSU9OX18gPT0gMjM4KSkKLSNpbmNsdWRl
IDxib29zdC90eXBlX3RyYWl0cy9pbnRlZ3JhbF9wcm9tb3Rpb24uaHBwPgotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL3Byb21vdGUuaHBwPgotI2VuZGlmCi0KLSNlbmRpZiAvLyBCT09TVF9U
WVBFX1RSQUlUU19IUFAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9jb25zdC5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9hZGRfY29uc3QuaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWZiNzgxYzc4OWExMGE2OWE4YWY3MzYwOWM1M2Mz
MzM1MzE2ZDc1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2Fk
ZF9jb25zdC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0KLS8vICAoQykgQ29w
eXJpZ2h0IERhdmUgQWJyYWhhbXMsIFN0ZXZlIENsZWFyeSwgQmVtYW4gRGF3ZXMsIEhvd2FyZAot
Ly8gIEhpbm5hbnQgJiBKb2huIE1hZGRvY2sgMjAwMC4KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBh
bmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNl
LAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4K
LS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1v
c3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9P
U1RfVFRfQUREX0NPTlNUX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9BRERfQ09OU1Rf
SFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvY29uZmln
LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotLy8gKiBjb252ZXJ0IGEgdHlwZSBUIHRvIGNv
bnN0IHR5cGUgLSBhZGRfY29uc3Q8VD4KLS8vIHRoaXMgaXMgbm90IHJlcXVpcmVkIHNpbmNlIHRo
ZSByZXN1bHQgaXMgYWx3YXlzCi0vLyB0aGUgc2FtZSBhcyAiVCBjb25zdCIsIGJ1dCBpdCBkb2Vz
IHN1cHByZXNzIHdhcm5pbmdzCi0vLyBmcm9tIHNvbWUgY29tcGlsZXJzOgotCi0jaWYgZGVmaW5l
ZChCT09TVF9NU1ZDKQotLy8gVGhpcyBib2d1cyB3YXJuaW5nIHdpbGwgYXBwZWFyIHdoZW4gYWRk
X2NvbnN0IGlzIGFwcGxpZWQgdG8gYQotLy8gY29uc3Qgdm9sYXRpbGUgcmVmZXJlbmNlIGJlY2F1
c2Ugd2UgY2FuJ3QgZGV0ZWN0IGNvbnN0IHZvbGF0aWxlCi0vLyByZWZlcmVuY2VzIHdpdGggTVNW
QzYuCi0jICAgcHJhZ21hIHdhcm5pbmcocHVzaCkKLSMgICBwcmFnbWEgd2FybmluZyhkaXNhYmxl
OjQxODEpIC8vIHdhcm5pbmcgQzQxODE6IHF1YWxpZmllciBhcHBsaWVkIHRvIHJlZmVyZW5jZSB0
eXBlIGlnbm9yZWQKLSNlbmRpZiAKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBhZGRf
Y29uc3QKLSAgIHsKLSAgICAgIHR5cGVkZWYgVCBjb25zdCB0eXBlOwotICAgfTsKLQotI2lmIGRl
ZmluZWQoQk9PU1RfTVNWQykKLSMgICBwcmFnbWEgd2FybmluZyhwb3ApCi0jZW5kaWYgCi0KLSAg
IHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgYWRkX2NvbnN0PFQmPgotICAgewotICAgICAgdHlw
ZWRlZiBUJiB0eXBlOwotICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8v
IEJPT1NUX1RUX0FERF9DT05TVF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9jdi5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9hZGRf
Y3YuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjJkZGVlMGM0NTZlZjE2NGJh
NGIzZjc4Y2UyYTllMzViYTFhYWY5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5
cGVfdHJhaXRzL2FkZF9jdi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0KLS8v
ICAoQykgQ29weXJpZ2h0IERhdmUgQWJyYWhhbXMsIFN0ZXZlIENsZWFyeSwgQmVtYW4gRGF3ZXMs
IEhvd2FyZAotLy8gIEhpbm5hbnQgJiBKb2huIE1hZGRvY2sgMjAwMC4gIAotLy8gIFVzZSwgbW9k
aWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3Ry
YWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQot
Ci0jaWZuZGVmIEJPT1NUX1RUX0FERF9DVl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRf
QUREX0NWX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLQotbmFt
ZXNwYWNlIGJvb3N0IHsKLQotLy8gKiBjb252ZXJ0IGEgdHlwZSBUIHRvIGEgY29uc3Qgdm9sYXRp
bGUgdHlwZSAtIGFkZF9jdjxUPgotLy8gdGhpcyBpcyBub3QgcmVxdWlyZWQgc2luY2UgdGhlIHJl
c3VsdCBpcyBhbHdheXMKLS8vIHRoZSBzYW1lIGFzICJUIGNvbnN0IHZvbGF0aWxlIiwgYnV0IGl0
IGRvZXMgc3VwcHJlc3Mgd2FybmluZ3MKLS8vIGZyb20gc29tZSBjb21waWxlcnM6Ci0KLSNpZiBk
ZWZpbmVkKEJPT1NUX01TVkMpCi0vLyBUaGlzIGJvZ3VzIHdhcm5pbmcgd2lsbCBhcHBlYXIgd2hl
biBhZGRfdm9sYXRpbGUgaXMgYXBwbGllZCB0byBhCi0vLyBjb25zdCB2b2xhdGlsZSByZWZlcmVu
Y2UgYmVjYXVzZSB3ZSBjYW4ndCBkZXRlY3QgY29uc3Qgdm9sYXRpbGUKLS8vIHJlZmVyZW5jZXMg
d2l0aCBNU1ZDNi4KLSMgICBwcmFnbWEgd2FybmluZyhwdXNoKQotIyAgIHByYWdtYSB3YXJuaW5n
KGRpc2FibGU6NDE4MSkgLy8gd2FybmluZyBDNDE4MTogcXVhbGlmaWVyIGFwcGxpZWQgdG8gcmVm
ZXJlbmNlIHR5cGUgaWdub3JlZAotI2VuZGlmIAotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0
IGFkZF9jdnsgdHlwZWRlZiBUIGNvbnN0IHZvbGF0aWxlIHR5cGU7IH07Ci0KLSNpZiBkZWZpbmVk
KEJPT1NUX01TVkMpCi0jICAgcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmIAotCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4gc3RydWN0IGFkZF9jdjxUJj57IHR5cGVkZWYgVCYgdHlwZTsgfTsKLQotfSAv
LyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1RUX0FERF9DVl9IUFBfSU5DTFVE
RUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2FkZF9sdmFsdWVfcmVmZXJlbmNlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9sdmFsdWVfcmVmZXJlbmNl
LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE4NTFhMWYzNDllMjQyNWYwOWI5
Njc4MzIzOGZlYTAxYmQ3ZjgxZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBl
X3RyYWl0cy9hZGRfbHZhbHVlX3JlZmVyZW5jZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNyAr
MCwwIEBACi0vLyAgQ29weXJpZ2h0IDIwMTAgSm9obiBNYWRkb2NrCi0KLS8vICBEaXN0cmlidXRl
ZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi0vLyAgU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dAotCi0jaWZuZGVmIEJPT1NUX1RZ
UEVfVFJBSVRTX0VYVF9BRERfTFZBTFVFX1JFRkVSRU5DRV9fSFBQCi0jZGVmaW5lIEJPT1NUX1RZ
UEVfVFJBSVRTX0VYVF9BRERfTFZBTFVFX1JFRkVSRU5DRV9fSFBQCi0KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9hZGRfcmVmZXJlbmNlLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0ewotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGFkZF9sdmFsdWVfcmVmZXJlbmNlCi17Ci0gICB0eXBl
ZGVmIHR5cGVuYW1lIGJvb3N0OjphZGRfcmVmZXJlbmNlPFQ+Ojp0eXBlIHR5cGU7IAotfTsKLQot
I2lmbmRlZiBCT09TVF9OT19DWFgxMV9SVkFMVUVfUkVGRVJFTkNFUwotdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBhZGRfbHZhbHVlX3JlZmVyZW5jZTxUJiY+Ci17Ci0gICB0eXBlZGVmIFQmIHR5
cGU7Ci19OwotI2VuZGlmCi0KLX0KLQotI2VuZGlmICAvLyBCT09TVF9UWVBFX1RSQUlUU19FWFRf
QUREX0xWQUxVRV9SRUZFUkVOQ0VfX0hQUApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3BvaW50ZXIuaHBwIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3Bv
aW50ZXIuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDVmNjNhMDg0ZmYzMGFk
MmE4ZDQwMmU3NDdhZGNkMWEzM2U2NGNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2FkZF9wb2ludGVyLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAg
QEAKLQotLy8gKEMpIENvcHlyaWdodCBTdGV2ZSBDbGVhcnksIEJlbWFuIERhd2VzLCBIb3dhcmQg
SGlubmFudCAmIEpvaG4gTWFkZG9jayAyMDAwLgotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBk
aXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0v
LyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9y
IGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8K
LS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCBy
ZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9U
VF9BRERfUE9JTlRFUl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfQUREX1BPSU5URVJf
SFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJl
bmNlLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotI2lmIGRlZmluZWQoX19CT1JMQU5EQ19f
KSAmJiAoX19CT1JMQU5EQ19fIDwgMHg1QTApCi0vLwotLy8gRm9yIHNvbWUgcmVhc29uIHRoaXMg
aW1wbGVtZW50YXRpb24gc3RvcHMgQm9ybGFuZHMgY29tcGlsZXIKLS8vIGZyb20gZHJvcHBpbmcg
Y3YtcXVhbGlmaWVycywgaXQgc3RpbGwgZmFpbHMgd2l0aCByZWZlcmVuY2VzCi0vLyB0byBhcnJh
eXMgZm9yIHNvbWUgcmVhc29uIHRob3VnaCAoc2hydWcuLi4pIChKTSAyMDAyMTEwNCkKLS8vCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBhZGRfcG9pbnRlcgotewotICAgIHR5cGVkZWYg
VCogdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBhZGRfcG9pbnRlcjxU
Jj4KLXsKLSAgICB0eXBlZGVmIFQqIHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1z
dHJ1Y3QgYWRkX3BvaW50ZXI8VCZjb25zdD4KLXsKLSAgICB0eXBlZGVmIFQqIHR5cGU7Ci19Owot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgYWRkX3BvaW50ZXI8VCZ2b2xhdGlsZT4KLXsK
LSAgICB0eXBlZGVmIFQqIHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3Qg
YWRkX3BvaW50ZXI8VCZjb25zdCB2b2xhdGlsZT4KLXsKLSAgICB0eXBlZGVmIFQqIHR5cGU7Ci19
OwotCi0jZWxzZQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBhZGRfcG9pbnRlcgot
ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSBub19yZWZf
dHlwZTsKLSAgICB0eXBlZGVmIG5vX3JlZl90eXBlKiB0eXBlOwotfTsKLQotI2VuZGlmCi0KLX0g
Ly8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9UVF9BRERfUE9JTlRFUl9IUFBf
SU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9yZWZlcmVuY2UuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3JlZmVyZW5jZS5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjOTE0MTU0ZWVjODI1ZWIwMTQxMGFmMTdlMjAw
N2NjMjE5MDBkZDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMv
YWRkX3JlZmVyZW5jZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0KLS8vICAo
QykgQ29weXJpZ2h0IFN0ZXZlIENsZWFyeSwgQmVtYW4gRGF3ZXMsIEhvd2FyZCBIaW5uYW50ICYg
Sm9obiBNYWRkb2NrIDIwMDAuCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlv
biBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9u
IDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAot
Ly8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJz
aW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX0FERF9SRUZF
UkVOQ0VfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0FERF9SRUZFUkVOQ0VfSFBQX0lO
Q0xVREVECi0KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvY29uZmlnLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotbmFtZXNwYWNlIGRl
dGFpbCB7Ci0KLS8vCi0vLyBXZSBjYW4ndCBmaWx0ZXIgb3V0IHJ2YWx1ZV9yZWZlcmVuY2VzIGF0
IHRoZSBzYW1lIGxldmVsIGFzCi0vLyByZWZlcmVuY2VzIG9yIHdlIGdldCBhbWJpZ3VpdGllcyBm
cm9tIG1zdmM6Ci0vLwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBhZGRfcmVmZXJl
bmNlX2ltcGwKLXsKLSAgICB0eXBlZGVmIFQmIHR5cGU7Ci19OwotCi0jaWZuZGVmIEJPT1NUX05P
X0NYWDExX1JWQUxVRV9SRUZFUkVOQ0VTCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBh
ZGRfcmVmZXJlbmNlX2ltcGw8VCYmPgotewotICAgIHR5cGVkZWYgVCYmIHR5cGU7Ci19OwotI2Vu
ZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGRldGFpbAotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0
IGFkZF9yZWZlcmVuY2UKLXsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmRldGFpbDo6YWRk
X3JlZmVyZW5jZV9pbXBsPFQ+Ojp0eXBlIHR5cGU7Ci19OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0
cnVjdCBhZGRfcmVmZXJlbmNlPFQmPgotewotICAgdHlwZWRlZiBUJiB0eXBlOwotfTsKLQotLy8g
dGhlc2UgZnVsbCBzcGVjaWFsaXNhdGlvbnMgYXJlIGFsd2F5cyByZXF1aXJlZDoKLXRlbXBsYXRl
IDw+IHN0cnVjdCBhZGRfcmVmZXJlbmNlPHZvaWQ+IHsgdHlwZWRlZiB2b2lkIHR5cGU7IH07Ci0j
aWZuZGVmIEJPT1NUX05PX0NWX1ZPSURfU1BFQ0lBTElaQVRJT05TCi10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgYWRkX3JlZmVyZW5jZTxjb25zdCB2b2lkPiB7IHR5cGVkZWYgY29uc3Qgdm9pZCB0eXBlOyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IGFkZF9yZWZlcmVuY2U8Y29uc3Qgdm9sYXRpbGUgdm9pZD4g
eyB0eXBlZGVmIGNvbnN0IHZvbGF0aWxlIHZvaWQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBhZGRfcmVmZXJlbmNlPHZvbGF0aWxlIHZvaWQ+IHsgdHlwZWRlZiB2b2xhdGlsZSB2b2lkIHR5
cGU7IH07Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NU
X1RUX0FERF9SRUZFUkVOQ0VfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9hZGRfcnZhbHVlX3JlZmVy
ZW5jZS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBl
X3RyYWl0cy9hZGRfcnZhbHVlX3JlZmVyZW5jZS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQ0ZWFkMzQ4MDMxODE5YTE3ZGUzMTlkNzBkY2UwYmJjMGQwOTUyY2MuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3J2YWx1ZV9yZWZlcmVuY2Uu
aHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLy8gIGFkZF9ydmFsdWVfcmVmZXJl
bmNlLmhwcCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLy8KLQotLy8gIENvcHlyaWdodCAyMDEwIFZpY2VudGUgSi4gQm90ZXQgRXNjcmli
YQotCi0vLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZl
cnNpb24gMS4wLgotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQK
LQotI2lmbmRlZiBCT09TVF9UWVBFX1RSQUlUU19FWFRfQUREX1JWQUxVRV9SRUZFUkVOQ0VfX0hQ
UAotI2RlZmluZSBCT09TVF9UWVBFX1RSQUlUU19FWFRfQUREX1JWQUxVRV9SRUZFUkVOQ0VfX0hQ
UAotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ly8KLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvaWQuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2lzX3JlZmVyZW5jZS5ocHA+Ci0KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICBDKyswMyBpbXBsZW1lbnRhdGlvbiBvZiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8K
LS8vICAgICAgICAgICAgIDIwLjkuNy4yIFJlZmVyZW5jZSBtb2RpZmljYXRpb25zIFttZXRhLnRy
YW5zLnJlZl0gICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgV3Jp
dHRlbiBieSBWaWNlbnRlIEouIEJvdGV0IEVzY3JpYmEgICAgICAgICAgICAgICAvLwotLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8KLS8vIElmIFQgbmFtZXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHR5
cGUgdGhlbiB0aGUgbWVtYmVyIHR5cGVkZWYgdHlwZQotLy8gc2hhbGwgbmFtZSBUJiY7IG90aGVy
d2lzZSwgdHlwZSBzaGFsbCBuYW1lIFQuIFsgTm90ZTogVGhpcyBydWxlIHJlZmxlY3RzCi0vLyB0
aGUgc2VtYW50aWNzIG9mIHJlZmVyZW5jZSBjb2xsYXBzaW5nLiBGb3IgZXhhbXBsZSwgd2hlbiBh
IHR5cGUgVCBuYW1lcwotLy8gYSB0eXBlIFQxJiwgdGhlIHR5cGUgYWRkX3J2YWx1ZV9yZWZlcmVu
Y2U8VD46OnR5cGUgaXMgbm90IGFuIHJ2YWx1ZQotLy8gcmVmZXJlbmNlLiAtZW5kIG5vdGUgXQot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotbmFtZXNwYWNl
IHR5cGVfdHJhaXRzX2RldGFpbCB7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbCBi
PgotICAgIHN0cnVjdCBhZGRfcnZhbHVlX3JlZmVyZW5jZV9oZWxwZXIKLSAgICB7IHR5cGVkZWYg
VCAgIHR5cGU7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9SVkFMVUVfUkVGRVJF
TkNFUykKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgYWRkX3J2YWx1ZV9y
ZWZlcmVuY2VfaGVscGVyPFQsIHRydWU+Ci0gICAgewotICAgICAgICB0eXBlZGVmIFQmJiAgIHR5
cGU7Ci0gICAgfTsKLSNlbmRpZgotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3Ry
dWN0IGFkZF9ydmFsdWVfcmVmZXJlbmNlX2ltcAotICAgIHsKLSAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIGJvb3N0Ojp0eXBlX3RyYWl0c19kZXRhaWw6OmFkZF9ydmFsdWVfcmVmZXJlbmNlX2hlbHBl
cgotICAgICAgICAgICAgICAgICAgPFQsIChpc192b2lkPFQ+Ojp2YWx1ZSA9PSBmYWxzZSAmJiBp
c19yZWZlcmVuY2U8VD46OnZhbHVlID09IGZhbHNlKSA+Ojp0eXBlIHR5cGU7Ci0gICAgfTsKLQot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGFkZF9ydmFsdWVfcmVmZXJlbmNlCi17Ci0g
ICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0Ojp0eXBlX3RyYWl0c19kZXRhaWw6OmFkZF9ydmFsdWVf
cmVmZXJlbmNlX2ltcDxUPjo6dHlwZSB0eXBlOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGJvb3N0
Ci0KLSNlbmRpZiAgLy8gQk9PU1RfVFlQRV9UUkFJVFNfRVhUX0FERF9SVkFMVUVfUkVGRVJFTkNF
X19IUFAKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF92b2xhdGlsZS5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZjUxNWM4MDJmYmRlY2IwNWM3NmMxM2MyYWNjMDI1
ZDFlMGFkMzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvYWRk
X3ZvbGF0aWxlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLQotLy8gIChDKSBD
b3B5cmlnaHQgRGF2ZSBBYnJhaGFtcywgU3RldmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywgSG93YXJk
Ci0vLyAgSGlubmFudCAmIEpvaG4gTWFkZG9jayAyMDAwLgotLy8gIFVzZSwgbW9kaWZpY2F0aW9u
IGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQp
LgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3Ig
bW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBC
T09TVF9UVF9BRERfVk9MQVRJTEVfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0FERF9W
T0xBVElMRV9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0KLW5h
bWVzcGFjZSBib29zdCB7Ci0KLS8vICogY29udmVydCBhIHR5cGUgVCB0byB2b2xhdGlsZSB0eXBl
IC0gYWRkX3ZvbGF0aWxlPFQ+Ci0vLyB0aGlzIGlzIG5vdCByZXF1aXJlZCBzaW5jZSB0aGUgcmVz
dWx0IGlzIGFsd2F5cwotLy8gdGhlIHNhbWUgYXMgIlQgdm9sYXRpbGUiLCBidXQgaXQgZG9lcyBz
dXBwcmVzcyB3YXJuaW5ncwotLy8gZnJvbSBzb21lIGNvbXBpbGVyczoKLQotI2lmIGRlZmluZWQo
Qk9PU1RfTVNWQykKLS8vIFRoaXMgYm9ndXMgd2FybmluZyB3aWxsIGFwcGVhciB3aGVuIGFkZF92
b2xhdGlsZSBpcyBhcHBsaWVkIHRvIGEKLS8vIGNvbnN0IHZvbGF0aWxlIHJlZmVyZW5jZSBiZWNh
dXNlIHdlIGNhbid0IGRldGVjdCBjb25zdCB2b2xhdGlsZQotLy8gcmVmZXJlbmNlcyB3aXRoIE1T
VkM2LgotIyAgIHByYWdtYSB3YXJuaW5nKHB1c2gpCi0jICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTo0MTgxKSAvLyB3YXJuaW5nIEM0MTgxOiBxdWFsaWZpZXIgYXBwbGllZCB0byByZWZlcmVuY2Ug
dHlwZSBpZ25vcmVkCi0jZW5kaWYgCi0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgYWRkX3Zv
bGF0aWxleyB0eXBlZGVmIFQgdm9sYXRpbGUgdHlwZTsgfTsKLQotI2lmIGRlZmluZWQoQk9PU1Rf
TVNWQykKLSMgICBwcmFnbWEgd2FybmluZyhwb3ApCi0jZW5kaWYgCi0KLXRlbXBsYXRlIDxjbGFz
cyBUPiBzdHJ1Y3QgYWRkX3ZvbGF0aWxlPFQmPnsgdHlwZWRlZiBUJiB0eXBlOyB9OwotCi19IC8v
IG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfVFRfQUREX1ZPTEFUSUxFX0hQUF9J
TkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvdHlwZV90cmFpdHMvYWxpZ25lZF9zdG9yYWdlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2FsaWduZWRfc3RvcmFnZS5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MWY1ZDQ1MGIwMzEzNGE1ZGZlNWE3ZjQ0
YjI1NWRmNjA0MzE0NzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFp
dHMvYWxpZ25lZF9zdG9yYWdlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBib29zdCBhbGlnbmVkX3N0b3JhZ2UuaHBwIGhlYWRl
ciBmaWxlCi0vLyBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcgZm9yIHVwZGF0ZXMsIGRvY3VtZW50
YXRpb24sIGFuZCByZXZpc2lvbiBoaXN0b3J5LgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDAzCi0vLyBFcmljIEZyaWVkbWFuLCBJdGF5IE1hbWFu
Ci0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZl
cnNpb24gMS4wLiAoU2VlCi0vLyBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaWZu
ZGVmIEJPT1NUX1RUX0FMSUdORURfU1RPUkFHRV9IUFAKLSNkZWZpbmUgQk9PU1RfVFRfQUxJR05F
RF9TVE9SQUdFX0hQUAotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4gLy8gZm9yIHN0ZDo6c2l6ZV90Ci0K
LSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC93b3Jr
YXJvdW5kLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9hbGlnbm1lbnRfb2YuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL3R5cGVfd2l0aF9hbGlnbm1lbnQuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3BvZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
dHlwZV90cmFpdHMvY29uZGl0aW9uYWwuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotCi1uYW1l
c3BhY2UgZGV0YWlsIHsgbmFtZXNwYWNlIGFsaWduZWRfc3RvcmFnZSB7Ci0KLUJPT1NUX1NUQVRJ
Q19DT05TVEFOVCgKLSAgICAgIHN0ZDo6c2l6ZV90Ci0gICAgLCBhbGlnbm1lbnRfb2ZfbWF4X2Fs
aWduID0gOjpib29zdDo6YWxpZ25tZW50X29mPGJvb3N0OjpkZXRhaWw6Om1heF9hbGlnbj46OnZh
bHVlCi0gICAgKTsKLQotLy8KLS8vIFRvIGJlIFRSMSBjb25mb3JtaW5nIHRoaXMgbXVzdCBiZSBh
IFBPRCB0eXBlOgotLy8KLXRlbXBsYXRlIDwKLSAgICAgIHN0ZDo6c2l6ZV90IHNpemVfCi0gICAg
LCBzdGQ6OnNpemVfdCBhbGlnbm1lbnRfCi0+Ci1zdHJ1Y3QgYWxpZ25lZF9zdG9yYWdlX2ltcAot
ewotICAgIHVuaW9uIGRhdGFfdAotICAgIHsKLSAgICAgICAgY2hhciBidWZbc2l6ZV9dOwotCi0g
ICAgICAgIHR5cGVuYW1lIDo6Ym9vc3Q6OnR5cGVfd2l0aF9hbGlnbm1lbnQ8YWxpZ25tZW50Xz46
OnR5cGUgYWxpZ25fOwotICAgIH0gZGF0YV87Ci0gICAgdm9pZCogYWRkcmVzcygpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8YWxpZ25lZF9zdG9yYWdlX2ltcCo+KHRoaXMpOyB9Ci19OwotdGVt
cGxhdGUgPHN0ZDo6c2l6ZV90IHNpemU+Ci1zdHJ1Y3QgYWxpZ25lZF9zdG9yYWdlX2ltcDxzaXpl
LCBzdGQ6OnNpemVfdCgtMSk+Ci17Ci0gICB1bmlvbiBkYXRhX3QKLSAgIHsKLSAgICAgIGNoYXIg
YnVmW3NpemVdOwotICAgICAgOjpib29zdDo6ZGV0YWlsOjptYXhfYWxpZ24gYWxpZ25fOwotICAg
fSBkYXRhXzsKLSAgIHZvaWQqIGFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGFs
aWduZWRfc3RvcmFnZV9pbXAqPih0aGlzKTsgfQotfTsKLQotdGVtcGxhdGU8IHN0ZDo6c2l6ZV90
IGFsaWdubWVudF8gPgotc3RydWN0IGFsaWduZWRfc3RvcmFnZV9pbXA8MHUsYWxpZ25tZW50Xz4K
LXsKLSAgICAvKiBpbnRlbnRpb25hbGx5IGVtcHR5ICovCi0gICAgdm9pZCogYWRkcmVzcygpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KLX07Ci0KLX19IC8vIG5hbWVzcGFjZSBkZXRhaWw6OmFsaWduZWRf
c3RvcmFnZQotCi10ZW1wbGF0ZSA8Ci0gICAgICBzdGQ6OnNpemVfdCBzaXplXwotICAgICwgc3Rk
OjpzaXplX3QgYWxpZ25tZW50XyA9IHN0ZDo6c2l6ZV90KC0xKQotPgotY2xhc3MgYWxpZ25lZF9z
dG9yYWdlIDogCi0jaWZuZGVmIF9fQk9STEFORENfXwotICAgcHJpdmF0ZSAKLSNlbHNlCi0gICBw
dWJsaWMKLSNlbmRpZgotICAgOjpib29zdDo6ZGV0YWlsOjphbGlnbmVkX3N0b3JhZ2U6OmFsaWdu
ZWRfc3RvcmFnZV9pbXA8c2l6ZV8sIGFsaWdubWVudF8+IAotewotIAotcHVibGljOiAvLyBjb25z
dGFudHMKLQotICAgIHR5cGVkZWYgOjpib29zdDo6ZGV0YWlsOjphbGlnbmVkX3N0b3JhZ2U6OmFs
aWduZWRfc3RvcmFnZV9pbXA8c2l6ZV8sIGFsaWdubWVudF8+IHR5cGU7Ci0KLSAgICBCT09TVF9T
VEFUSUNfQ09OU1RBTlQoCi0gICAgICAgICAgc3RkOjpzaXplX3QKLSAgICAgICAgLCBzaXplID0g
c2l6ZV8KLSAgICAgICAgKTsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoCi0gICAgICAgICAg
c3RkOjpzaXplX3QKLSAgICAgICAgLCBhbGlnbm1lbnQgPSAoCi0gICAgICAgICAgICAgIGFsaWdu
bWVudF8gPT0gc3RkOjpzaXplX3QoLTEpCi0gICAgICAgICAgICA/IDo6Ym9vc3Q6OmRldGFpbDo6
YWxpZ25lZF9zdG9yYWdlOjphbGlnbm1lbnRfb2ZfbWF4X2FsaWduCi0gICAgICAgICAgICA6IGFs
aWdubWVudF8KLSAgICAgICAgICAgICkKLSAgICAgICAgKTsKLQotcHJpdmF0ZTogLy8gbm9uY29w
eWFibGUKLQotICAgIGFsaWduZWRfc3RvcmFnZShjb25zdCBhbGlnbmVkX3N0b3JhZ2UmKTsKLSAg
ICBhbGlnbmVkX3N0b3JhZ2UmIG9wZXJhdG9yPShjb25zdCBhbGlnbmVkX3N0b3JhZ2UmKTsKLQot
cHVibGljOiAvLyBzdHJ1Y3RvcnMKLQotICAgIGFsaWduZWRfc3RvcmFnZSgpCi0gICAgewotICAg
IH0KLQotICAgIH5hbGlnbmVkX3N0b3JhZ2UoKQotICAgIHsKLSAgICB9Ci0KLXB1YmxpYzogLy8g
YWNjZXNzb3JzCi0KLSAgICB2b2lkKiBhZGRyZXNzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx0eXBlKj4odGhpcyktPmFkZHJlc3MoKTsKLSAgICB9Ci0KLSAgICBjb25zdCB2
b2lkKiBhZGRyZXNzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCB0eXBlKj4odGhpcyktPmFkZHJlc3MoKTsKLSAgICB9Ci19OwotCi0vLwotLy8gTWFrZSBz
dXJlIHRoYXQgaXNfcG9kIHJlY29nbmlzZXMgYWxpZ25lZF9zdG9yYWdlPD46OnR5cGUKLS8vIGFz
IGEgUE9EIChOb3RlIHRoYXQgYWxpZ25lZF9zdG9yYWdlPD4gaXRzZWxmIGlzIG5vdCBhIFBPRCk6
Ci0vLwotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IHNpemVfLCBzdGQ6OnNpemVfdCBhbGlnbm1lbnRf
Pgotc3RydWN0IGlzX3BvZDwgOjpib29zdDo6ZGV0YWlsOjphbGlnbmVkX3N0b3JhZ2U6OmFsaWdu
ZWRfc3RvcmFnZV9pbXA8c2l6ZV8sIGFsaWdubWVudF8+ID4gOiBwdWJsaWMgdHJ1ZV90eXBle307
Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9BTElHTkVEX1NUT1JB
R0VfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC90eXBlX3RyYWl0cy9hbGlnbm1lbnRfb2YuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvYWxpZ25tZW50X29mLmhwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q5NjBlMzE4NDAwZGYxZjg3ZThiOWMzMmE3NGVhNmRk
NWMxZGIwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9hbGln
bm1lbnRfb2YuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLQotLy8gIChDKSBD
b3B5cmlnaHQgSm9obiBNYWRkb2NrIDIwMDAuCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRp
c3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8v
ICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3Ig
Y29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwot
Ly8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJl
Y2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RU
X0FMSUdOTUVOVF9PRl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfQUxJR05NRU5UX09G
X0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxj
c3RkZGVmPgotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50cmluc2ljcy5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50ZWdyYWxfY29uc3RhbnQuaHBwPgotCi0jaWZk
ZWYgQk9PU1RfTVNWQwotIyAgIHByYWdtYSB3YXJuaW5nKHB1c2gpCi0jICAgcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDEyMSA0NTEyKSAvLyBhbGlnbm1lbnQgaXMgc2Vuc2l0aXZlIHRvIHBhY2tp
bmcKLSNlbmRpZgotI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAoX19CT1JMQU5EQ19fIDwg
MHg2MDApCi0jcHJhZ21hIG9wdGlvbiBwdXNoIC1WeC0gLVZlLQotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBib29zdCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgYWxpZ25tZW50X29mOwot
Ci0vLyBnZXQgdGhlIGFsaWdubWVudCBvZiBzb21lIGFyYml0cmFyeSB0eXBlOgotbmFtZXNwYWNl
IGRldGFpbCB7Ci0KLSNpZmRlZiBCT09TVF9NU1ZDCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOjQzMjQpIC8vIHN0cnVjdHVyZSB3YXMgcGFkZGVkIGR1ZSB0
byBfX2RlY2xzcGVjKGFsaWduKCkpCi0jZW5kaWYKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3Ry
dWN0IGFsaWdubWVudF9vZl9oYWNrCi17Ci0gICAgY2hhciBjOwotICAgIFQgdDsKLSAgICBhbGln
bm1lbnRfb2ZfaGFjaygpOwotfTsKLSNpZmRlZiBCT09TVF9NU1ZDCi0jcHJhZ21hIHdhcm5pbmco
cG9wKQotI2VuZGlmCi0KLXRlbXBsYXRlIDx1bnNpZ25lZCBBLCB1bnNpZ25lZCBTPgotc3RydWN0
IGFsaWdubWVudF9sb2dpYwotewotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVf
dCwgdmFsdWUgPSBBIDwgUyA/IEEgOiBTKTsKLX07Ci0KLQotdGVtcGxhdGU8IHR5cGVuYW1lIFQg
Pgotc3RydWN0IGFsaWdubWVudF9vZl9pbXBsCi17Ci0jaWYgZGVmaW5lZChCT09TVF9NU1ZDKSAm
JiAoQk9PU1RfTVNWQyA+PSAxNDAwKQotICAgIC8vCi0gICAgLy8gV2l0aCBNU1ZDIGJvdGggdGhl
IG5hdGl2ZSBfX2FsaWdub2Ygb3BlcmF0b3IKLSAgICAvLyBhbmQgb3VyIG93biBsb2dpYyBnZXRz
IHRoaW5ncyB3cm9uZyBmcm9tIHRpbWUgdG8gdGltZSA6LSgKLSAgICAvLyBVc2luZyBhIGNvbWJp
bmF0aW9uIG9mIHRoZSB0d28gc2VlbXMgdG8gbWFrZSB0aGUgbW9zdCBvZiBhIGJhZCBqb2I6Ci0g
ICAgLy8KLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHZhbHVlID0KLSAg
ICAgICAgKDo6Ym9vc3Q6OmRldGFpbDo6YWxpZ25tZW50X2xvZ2ljPAotICAgICAgICAgICAgc2l6
ZW9mKDo6Ym9vc3Q6OmRldGFpbDo6YWxpZ25tZW50X29mX2hhY2s8VD4pIC0gc2l6ZW9mKFQpLAot
ICAgICAgICAgICAgX19hbGlnbm9mKFQpCi0gICAgICAgID46OnZhbHVlKSk7Ci0jZWxpZiAhZGVm
aW5lZChCT09TVF9BTElHTk1FTlRfT0YpCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHN0ZDo6
c2l6ZV90LCB2YWx1ZSA9Ci0gICAgICAgICg6OmJvb3N0OjpkZXRhaWw6OmFsaWdubWVudF9sb2dp
YzwKLSAgICAgICAgICAgIHNpemVvZig6OmJvb3N0OjpkZXRhaWw6OmFsaWdubWVudF9vZl9oYWNr
PFQ+KSAtIHNpemVvZihUKSwKLSAgICAgICAgICAgIHNpemVvZihUKQotICAgICAgICA+Ojp2YWx1
ZSkpOwotI2Vsc2UKLSAgIC8vCi0gICAvLyBXZSBwdXQgdGhpcyBoZXJlLCByYXRoZXIgdGhhbiBp
biB0aGUgZGVmaW5pdGlvbiBvZgotICAgLy8gYWxpZ25tZW50X29mIGJlbG93LCBiZWNhdXNlIE1T
VkMncyBfX2FsaWdub2YgZG9lc24ndAotICAgLy8gYWx3YXlzIHdvcmsgaW4gdGhhdCBjb250ZXh0
IGZvciBzb21lIHVuZXhwbGFpbmVkIHJlYXNvbi4KLSAgIC8vIChTZWUgdHlwZV93aXRoX2FsaWdu
bWVudCB0ZXN0cyBmb3IgdGVzdCBjYXNlcykuCi0gICAvLwotICAgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKHN0ZDo6c2l6ZV90LCB2YWx1ZSA9IEJPT1NUX0FMSUdOTUVOVF9PRihUKSk7Ci0jZW5kaWYK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIGRldGFpbAotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0
IGFsaWdubWVudF9vZiA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgOjpi
b29zdDo6ZGV0YWlsOjphbGlnbm1lbnRfb2ZfaW1wbDxUPjo6dmFsdWU+e307Ci0KLS8vIHJlZmVy
ZW5jZXMgaGF2ZSB0byBiZSB0cmVhdGVkIHNwZWNpYWxseSwgYXNzdW1lCi0vLyB0aGF0IGEgcmVm
ZXJlbmNlIGlzIGp1c3QgYSBzcGVjaWFsIHBvaW50ZXI6Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
c3RydWN0IGFsaWdubWVudF9vZjxUJj4gOiBwdWJsaWMgYWxpZ25tZW50X29mPFQqPnt9OwotCi0j
aWZkZWYgX19CT1JMQU5EQ19fCi0vLyBsb25nIGRvdWJsZSBnaXZlcyBhbiBpbmNvcnJlY3QgdmFs
dWUgb2YgMTAgKCEpCi0vLyB1bmxlc3Mgd2UgZG8gdGhpcy4uLgotc3RydWN0IGxvbmdfZG91Ymxl
X3dyYXBwZXJ7IGxvbmcgZG91YmxlIGxkOyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgYWxpZ25tZW50
X29mPGxvbmcgZG91YmxlPiA6IHB1YmxpYyBhbGlnbm1lbnRfb2Y8bG9uZ19kb3VibGVfd3JhcHBl
cj57fTsKLSNlbmRpZgotCi0vLyB2b2lkIGhhcyB0byBiZSB0cmVhdGVkIHNwZWNpYWxseToKLXRl
bXBsYXRlPD4gc3RydWN0IGFsaWdubWVudF9vZjx2b2lkPiA6IGludGVncmFsX2NvbnN0YW50PHN0
ZDo6c2l6ZV90LCAwPnt9OwotI2lmbmRlZiBCT09TVF9OT19DVl9WT0lEX1NQRUNJQUxJWkFUSU9O
UwotdGVtcGxhdGU8PiBzdHJ1Y3QgYWxpZ25tZW50X29mPHZvaWQgY29uc3Q+IDogaW50ZWdyYWxf
Y29uc3RhbnQ8c3RkOjpzaXplX3QsIDA+e307Ci10ZW1wbGF0ZTw+IHN0cnVjdCBhbGlnbm1lbnRf
b2Y8dm9pZCBjb25zdCB2b2xhdGlsZT4gOiBpbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwg
MD57fTsKLXRlbXBsYXRlPD4gc3RydWN0IGFsaWdubWVudF9vZjx2b2lkIHZvbGF0aWxlPiA6IGlu
dGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCAwPnt9OwotI2VuZGlmCi0KLX0gLy8gbmFtZXNw
YWNlIGJvb3N0Ci0KLSNpZiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgKF9fQk9STEFORENfXyA8
IDB4NjAwKQotI3ByYWdtYSBvcHRpb24gcG9wCi0jZW5kaWYKLSNpZmRlZiBCT09TVF9NU1ZDCi0j
ICAgcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCi0KLSNlbmRpZiAvLyBCT09TVF9UVF9BTElH
Tk1FTlRfT0ZfSFBQX0lOQ0xVREVECi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2NvbW1vbl90eXBlLmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2NvbW1vbl90
eXBlLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg4N2E4OTdmODcwMzhiOGYx
ZjRkNWI5NjcxY2U0NmNlZDQzYWEzNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90
eXBlX3RyYWl0cy9jb21tb25fdHlwZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBA
QAotI2lmbmRlZiBCT09TVF9UWVBFX1RSQUlUU19DT01NT05fVFlQRV9IUFBfSU5DTFVERUQKLSNk
ZWZpbmUgQk9PU1RfVFlQRV9UUkFJVFNfQ09NTU9OX1RZUEVfSFBQX0lOQ0xVREVECi0KLS8vCi0v
LyAgQ29weXJpZ2h0IDIwMTUgUGV0ZXIgRGltb3YKLS8vCi0vLyAgRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gIFNlZSBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dAotLy8KLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGVjYXkuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L3R5cGVfdHJhaXRzL2RlY2x2YWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJv
dW5kLmhwcD4KLQotI2lmIGRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfREVDTFRZUEUpCi0jaW5jbHVk
ZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2NvbW1vbl90eXBlX2ltcGwuaHBwPgotI2VuZGlm
Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9URU1QTEFURV9BTElBU0VTKSAmJiAhZGVm
aW5lZChCT09TVF9OT19DWFgxMV9WQVJJQURJQ19URU1QTEFURVMpCi0jaW5jbHVkZSA8Ym9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL21wX2RlZmVyLmhwcD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgYm9v
c3QKLXsKLQotLy8gdmFyaWFkaWMgY29tbW9uX3R5cGUKLQotI2lmICFkZWZpbmVkKEJPT1NUX05P
X0NYWDExX1ZBUklBRElDX1RFTVBMQVRFUykKLQotdGVtcGxhdGU8Y2xhc3MuLi4gVD4gc3RydWN0
IGNvbW1vbl90eXBlCi17Ci19OwotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfVEVNUExB
VEVfQUxJQVNFUykKLQotdGVtcGxhdGU8Y2xhc3MuLi4gVD4gdXNpbmcgY29tbW9uX3R5cGVfdCA9
IHR5cGVuYW1lIGNvbW1vbl90eXBlPFQuLi4+Ojp0eXBlOwotCi1uYW1lc3BhY2UgdHlwZV90cmFp
dHNfZGV0YWlsCi17Ci0KLXRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MuLi4gVD4g
dXNpbmcgY29tbW9uX3R5cGVfZm9sZCA9IGNvbW1vbl90eXBlX3Q8Y29tbW9uX3R5cGVfdDxUMSwg
VDI+LCBULi4uPjsKLQotfSAvLyBuYW1lc3BhY2UgdHlwZV90cmFpdHNfZGV0YWlsCi0KLXRlbXBs
YXRlPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MuLi4gVD4KLXN0cnVjdCBjb21tb25fdHlwZTxU
MSwgVDIsIFQuLi4+OiB0eXBlX3RyYWl0c19kZXRhaWw6Om1wX2RlZmVyPHR5cGVfdHJhaXRzX2Rl
dGFpbDo6Y29tbW9uX3R5cGVfZm9sZCwgVDEsIFQyLCBULi4uPgotewotfTsKLQotI2Vsc2UKLQot
dGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcy4uLiBUPgotc3RydWN0IGNvbW1vbl90
eXBlPFQxLCBUMiwgVC4uLj46IGNvbW1vbl90eXBlPHR5cGVuYW1lIGNvbW1vbl90eXBlPFQxLCBU
Mj46OnR5cGUsIFQuLi4+Ci17Ci19OwotCi0jZW5kaWYgLy8gIWRlZmluZWQoQk9PU1RfTk9fQ1hY
MTFfVEVNUExBVEVfQUxJQVNFUykKLQotI2Vsc2UKLQotdGVtcGxhdGU8Ci0gICAgY2xhc3MgVDEg
PSB2b2lkLCBjbGFzcyBUMiA9IHZvaWQsIGNsYXNzIFQzID0gdm9pZCwKLSAgICBjbGFzcyBUNCA9
IHZvaWQsIGNsYXNzIFQ1ID0gdm9pZCwgY2xhc3MgVDYgPSB2b2lkLAotICAgIGNsYXNzIFQ3ID0g
dm9pZCwgY2xhc3MgVDggPSB2b2lkLCBjbGFzcyBUOSA9IHZvaWQKLT4KLXN0cnVjdCBjb21tb25f
dHlwZTogY29tbW9uX3R5cGU8dHlwZW5hbWUgY29tbW9uX3R5cGU8VDEsIFQyPjo6dHlwZSwgVDMs
IFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDk+Ci17Ci19OwotCi0jZW5kaWYgLy8gIWRlZmluZWQoQk9P
U1RfTk9fQ1hYMTFfVkFSSUFESUNfVEVNUExBVEVTKQotCi0vLyBvbmUgYXJndW1lbnQKLQotdGVt
cGxhdGU8Y2xhc3MgVD4gc3RydWN0IGNvbW1vbl90eXBlPFQ+OiBib29zdDo6ZGVjYXk8VD4KLXsK
LX07Ci0KLS8vIHR3byBhcmd1bWVudHMKLQotbmFtZXNwYWNlIHR5cGVfdHJhaXRzX2RldGFpbAot
ewotCi0vLyBiaW5hcnkgY29tbW9uX3R5cGUKLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDEx
X0RFQ0xUWVBFKQotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfVEVNUExBVEVfQUxJQVNF
UykgJiYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfVkFSSUFESUNfVEVNUExBVEVTKQotICAgIAot
I2lmICFkZWZpbmVkKEJPT1NUX01TVkMpIHx8IEJPT1NUX01TVkMgPiAxODAwCi0KLS8vIGludGVy
bmFsIGNvbXBpbGVyIGVycm9yIG9uIG1zdmMtMTIuMAotCi10ZW1wbGF0ZTxjbGFzcyBUMSwgY2xh
c3MgVDI+IHVzaW5nIGJ1aWx0aW5fY29tbW9uX3R5cGUgPSB0eXBlbmFtZSBib29zdDo6ZGVjYXk8
ZGVjbHR5cGUoIGJvb3N0OjpkZWNsdmFsPGJvb2w+KCk/IGJvb3N0OjpkZWNsdmFsPFQxPigpOiBi
b29zdDo6ZGVjbHZhbDxUMj4oKSApPjo6dHlwZTsKLQotdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNz
IFQyPiBzdHJ1Y3QgY29tbW9uX3R5cGVfaW1wbDogbXBfZGVmZXI8YnVpbHRpbl9jb21tb25fdHlw
ZSwgVDEsIFQyPgotewotfTsKLQotI2Vsc2UKLQotdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIFQy
PiB1c2luZyBidWlsdGluX2NvbW1vbl90eXBlID0gZGVjbHR5cGUoIGJvb3N0OjpkZWNsdmFsPGJv
b2w+KCk/IGJvb3N0OjpkZWNsdmFsPFQxPigpOiBib29zdDo6ZGVjbHZhbDxUMj4oKSApOwotCi10
ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3MgVDI+IHN0cnVjdCBjb21tb25fdHlwZV9pbXBsXzI6IG1w
X2RlZmVyPGJ1aWx0aW5fY29tbW9uX3R5cGUsIFQxLCBUMj4KLXsKLX07Ci0KLXRlbXBsYXRlPGNs
YXNzIFQxLCBjbGFzcyBUMj4gdXNpbmcgZGVjYXlfY29tbW9uX3R5cGUgPSB0eXBlbmFtZSBib29z
dDo6ZGVjYXk8dHlwZW5hbWUgY29tbW9uX3R5cGVfaW1wbF8yPFQxLCBUMj46OnR5cGU+Ojp0eXBl
OwotCi10ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3MgVDI+IHN0cnVjdCBjb21tb25fdHlwZV9pbXBs
OiBtcF9kZWZlcjxkZWNheV9jb21tb25fdHlwZSwgVDEsIFQyPgotewotfTsKLQotI2VuZGlmIC8v
ICFkZWZpbmVkKEJPT1NUX01TVkMpIHx8IEJPT1NUX01TVkMgPiAxODAwCi0KLSNlbHNlCi0KLXRl
bXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMj4gc3RydWN0IGNvbW1vbl90eXBlX2ltcGw6IGJvb3N0
OjpkZWNheTxkZWNsdHlwZSggYm9vc3Q6OmRlY2x2YWw8Ym9vbD4oKT8gYm9vc3Q6OmRlY2x2YWw8
VDE+KCk6IGJvb3N0OjpkZWNsdmFsPFQyPigpICk+Ci17Ci19OwotCi0jZW5kaWYgLy8gI2lmICFk
ZWZpbmVkKEJPT1NUX05PX0NYWDExX1RFTVBMQVRFX0FMSUFTRVMpICYmICFkZWZpbmVkKEJPT1NU
X05PX0NYWDExX1ZBUklBRElDX1RFTVBMQVRFUykKLQotI2VuZGlmIC8vICNpZiAhZGVmaW5lZChC
T09TVF9OT19DWFgxMV9ERUNMVFlQRSkKLQotLy8gZGVjYXkgaGVscGVyCi0KLXRlbXBsYXRlPGNs
YXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDFkID0gdHlwZW5hbWUgYm9vc3Q6OmRlY2F5PFQxPjo6
dHlwZSwgY2xhc3MgVDJkID0gdHlwZW5hbWUgYm9vc3Q6OmRlY2F5PFQyPjo6dHlwZT4gc3RydWN0
IGNvbW1vbl90eXBlX2RlY2F5X2hlbHBlcjogYm9vc3Q6OmNvbW1vbl90eXBlPFQxZCwgVDJkPgot
ewotfTsKLQotdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIFQyPiBzdHJ1Y3QgY29tbW9uX3R5cGVf
ZGVjYXlfaGVscGVyPFQxLCBUMiwgVDEsIFQyPjogY29tbW9uX3R5cGVfaW1wbDxUMSwgVDI+Ci17
Ci19OwotCi19IC8vIHR5cGVfdHJhaXRzX2RldGFpbAotCi10ZW1wbGF0ZTxjbGFzcyBUMSwgY2xh
c3MgVDI+IHN0cnVjdCBjb21tb25fdHlwZTxUMSwgVDI+OiB0eXBlX3RyYWl0c19kZXRhaWw6OmNv
bW1vbl90eXBlX2RlY2F5X2hlbHBlcjxUMSwgVDI+Ci17Ci19OwotCi19IC8vIG5hbWVzcGFjZSBi
b29zdAotCi0jZW5kaWYgLy8gI2lmbmRlZiBCT09TVF9UWVBFX1RSQUlUU19DT01NT05fVFlQRV9I
UFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2NvbmRpdGlvbmFsLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2NvbmRpdGlvbmFsLmhwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdlODJkYmU4MjQzZTZjMjgwZDMxZjA0ZDhhZWY4
NzAxNzkwMmM5Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9j
b25kaXRpb25hbC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vLyAgKEMpIENv
cHlyaWdodCBKb2huIE1hZGRvY2sgMjAxMC4gIAotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBk
aXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0v
LyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9y
IGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8K
LS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCBy
ZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotCi0jaWZuZGVmIEJPT1NU
X1RUX0NPTkRJVElPTkFMX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9DT05ESVRJT05B
TF9IUFBfSU5DTFVERUQKLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotdGVtcGxhdGUgPGJvb2wgYiwg
Y2xhc3MgVCwgY2xhc3MgVT4gc3RydWN0IGNvbmRpdGlvbmFsIHsgdHlwZWRlZiBUIHR5cGU7IH07
Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4gc3RydWN0IGNvbmRpdGlvbmFsPGZhbHNlLCBU
LCBVPiB7IHR5cGVkZWYgVSB0eXBlOyB9OwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0KLSNl
bmRpZiAvLyBCT09TVF9UVF9DT05ESVRJT05BTF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2NvbnZl
cnNpb25fdHJhaXRzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3R5cGVfdHJhaXRzL2NvbnZlcnNpb25fdHJhaXRzLmhwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzhlNTEzOWIzMGQyOTc0ZWJmZjNlMjEzMTBkNTNlMDcwNjIwMjg1MC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9jb252ZXJzaW9uX3RyYWl0
cy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDAw
IEpvaG4gTWFkZG9jayAoam9obkBqb2hubWFkZG9jay5jby51aykKLS8vIENvcHlyaWdodCAyMDAw
IEplcmVteSBTaWVrIChqc2lla0Bsc2MubmQuZWR1KQotLy8gQ29weXJpZ2h0IDE5OTksIDIwMDAg
SmFha2tvIEphcnZpIChqYWFra28uamFydmlAY3MudXR1LmZpKQotLy8KLS8vICBVc2UsIG1vZGlm
aWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8x
XzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFp
dHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNp
Zm5kZWYgQk9PU1RfVFRfQ09OVkVSU0lPTl9UUkFJVFNfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJP
T1NUX1RUX0NPTlZFUlNJT05fVFJBSVRTX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Ym9vc3Qv
dHlwZV90cmFpdHMvaXNfY29udmVydGlibGUuaHBwPgotCi0jZW5kaWYgLy8gQk9PU1RfVFRfQ09O
VkVSU0lPTl9UUkFJVFNfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9jb3B5X2N2LmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2NvcHlfY3Yu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjA1Y2EzMzU2ZWQyMmZmZjE3MDY2
YmYwODI3YWVmZTc2OTA5NDVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVf
dHJhaXRzL2NvcHlfY3YuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotI2lmbmRl
ZiBCT09TVF9UWVBFX1RSQUlUU19DT1BZX0NWX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9U
WVBFX1RSQUlUU19DT1BZX0NWX0hQUF9JTkNMVURFRAotCi0vLwotLy8gIENvcHlyaWdodCAyMDE1
IFBldGVyIERpbW92Ci0vLwotLy8gIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KLS8vICBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQKLS8vCi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jb25zdC5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfdm9sYXRpbGUuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2FkZF9jb25zdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvYWRkX3ZvbGF0aWxlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9jb25kaXRp
b25hbC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdAotewotCi10ZW1wbGF0ZTxjbGFzcyBULCBjbGFz
cyBVPiBzdHJ1Y3QgY29weV9jdgotewotcHJpdmF0ZToKLQotICAgIHR5cGVkZWYgdHlwZW5hbWUg
Ym9vc3Q6OmNvbmRpdGlvbmFsPGJvb3N0Ojppc19jb25zdDxVPjo6dmFsdWUsIHR5cGVuYW1lIGJv
b3N0OjphZGRfY29uc3Q8VD46OnR5cGUsIFQ+Ojp0eXBlIENUOwotCi1wdWJsaWM6Ci0KLSAgICB0
eXBlZGVmIHR5cGVuYW1lIGJvb3N0Ojpjb25kaXRpb25hbDxib29zdDo6aXNfdm9sYXRpbGU8VT46
OnZhbHVlLCB0eXBlbmFtZSBib29zdDo6YWRkX3ZvbGF0aWxlPENUPjo6dHlwZSwgQ1Q+Ojp0eXBl
IHR5cGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gI2lmbmRlZiBC
T09TVF9UWVBFX1RSQUlUU19DT1BZX0NWX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvZGVjYXkuaHBw
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMv
ZGVjYXkuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTgxMTg0MzNlZDljM2M5
NTdhOWM3ZDRlYjk4YzgwNWU1ODgzODhlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2RlY2F5LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8v
ICAoQykgQ29weXJpZ2h0IEpvaG4gTWFkZG9jayAmIFRob3JzdGVuIE90dG9zZW4gMjAwNS4KLS8v
ICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBC
b29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWlu
ZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5v
cmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xp
YnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50
YXRpb24uCi0KLQotI2lmbmRlZiBCT09TVF9UVF9ERUNBWV9IUFBfSU5DTFVERUQKLSNkZWZpbmUg
Qk9PU1RfVFRfREVDQVlfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0
cy9pc19hcnJheS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfZnVuY3Rpb24u
aHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9ib3VuZHMuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2FkZF9wb2ludGVyLmhwcD4KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJlbmNlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBl
X3RyYWl0cy9yZW1vdmVfY3YuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgCi17Ci0KLSAgIG5hbWVz
cGFjZSBkZXRhaWwKLSAgIHsKLQotICAgICAgdGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgQXJyYXks
IGJvb2wgRnVuY3Rpb24+IHN0cnVjdCBkZWNheV9pbXAgeyB0eXBlZGVmIHR5cGVuYW1lIHJlbW92
ZV9jdjxUPjo6dHlwZSB0eXBlOyB9OwotICAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBk
ZWNheV9pbXA8VCwgdHJ1ZSwgZmFsc2U+IHsgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfYm91bmRz
PFQ+Ojp0eXBlKiB0eXBlOyB9OwotICAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBkZWNh
eV9pbXA8VCwgZmFsc2UsIHRydWU+IHsgdHlwZWRlZiBUKiB0eXBlOyB9OwotCi0gICB9Ci0KLSAg
ICB0ZW1wbGF0ZTwgY2xhc3MgVCA+Ci0gICAgc3RydWN0IGRlY2F5Ci0gICAgewotICAgIHByaXZh
dGU6Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSBU
eTsKLSAgICBwdWJsaWM6Ci0gICAgICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjpk
ZWNheV9pbXA8VHksIGJvb3N0Ojppc19hcnJheTxUeT46OnZhbHVlLCBib29zdDo6aXNfZnVuY3Rp
b248VHk+Ojp2YWx1ZT46OnR5cGUgdHlwZTsKLSAgICB9OwotICAgIAotfSAvLyBuYW1lc3BhY2Ug
Ym9vc3QKLQotCi0jZW5kaWYgLy8gQk9PU1RfVFRfREVDQVlfSFBQX0lOQ0xVREVECmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0
cy9kZWNsdmFsLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2RlY2x2YWwuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
MDUwMDEyZWI1NTdhMWFiM2U4Mzg1MjVlODJjMDIyOTI5Yzk0YWU4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2RlY2x2YWwuaHBwCisrKyAvZGV2L251bGwKQEAg
LTEsNDQgKzAsMCBAQAotLy8gIGRlY2x2YWwuaHBwICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQotLy8gIENvcHlyaWdodCAy
MDEwIFZpY2VudGUgSi4gQm90ZXQgRXNjcmliYQotCi0vLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgotLy8gIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQKLQotI2lmbmRlZiBCT09TVF9UWVBFX1RSQUlUU19E
RUNMVkFMX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UWVBFX1RSQUlUU19ERUNMVkFMX0hQ
UF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLQotLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLy8KLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2FkZF9ydmFsdWVfcmVm
ZXJlbmNlLmhwcD4KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLS8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgIEMrKzAzIGltcGxlbWVudGF0aW9u
IG9mICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgMjAu
Mi40IEZ1bmN0aW9uIHRlbXBsYXRlIGRlY2x2YWwgW2RlY2x2YWxdICAgICAgICAgICAgICAgLy8K
LS8vICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0dGVuIGJ5IFZpY2VudGUgSi4gQm90ZXQg
RXNjcmliYSAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gMSBU
aGUgbGlicmFyeSBwcm92aWRlcyB0aGUgZnVuY3Rpb24gdGVtcGxhdGUgZGVjbHZhbCB0byBzaW1w
bGlmeSB0aGUKLS8vIGRlZmluaXRpb24gb2YgZXhwcmVzc2lvbnMgd2hpY2ggb2NjdXIgYXMgdW5l
dmFsdWF0ZWQgb3BlcmFuZHMuCi0vLyAyIFJlbWFya3M6IElmIHRoaXMgZnVuY3Rpb24gaXMgdXNl
ZCwgdGhlIHByb2dyYW0gaXMgaWxsLWZvcm1lZC4KLS8vIDMgUmVtYXJrczogVGhlIHRlbXBsYXRl
IHBhcmFtZXRlciBUIG9mIGRlY2x2YWwgbWF5IGJlIGFuIGluY29tcGxldGUgdHlwZS4KLS8vIFsg
RXhhbXBsZToKLS8vCi0vLyB0ZW1wbGF0ZSA8Y2xhc3MgVG8sIGNsYXNzIEZyb20+Ci0vLyBkZWNs
dHlwZShzdGF0aWNfY2FzdDxUbz4oZGVjbHZhbDxGcm9tPigpKSkgY29udmVydChGcm9tJiYpOwot
Ly8KLS8vIGRlY2xhcmVzIGEgZnVuY3Rpb24gdGVtcGxhdGUgY29udmVydCB3aGljaCBvbmx5IHBh
cnRpY2lwYXRlcyBpbiBvdmVybG9hZGluZwotLy8gaWYgdGhlIHR5cGUgRnJvbSBjYW4gYmUgZXhw
bGljaXRseSBjb252ZXJ0ZWQgdG8gdHlwZSBUby4gRm9yIGFub3RoZXIgZXhhbXBsZQotLy8gc2Vl
IGNsYXNzIHRlbXBsYXRlIGNvbW1vbl90eXBlICgyMC45LjcuNikuIC1lbmQgZXhhbXBsZSBdCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCi1uYW1lc3BhY2UgYm9vc3QgewotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Ci0gICAgdHlwZW5hbWUgYWRkX3J2YWx1ZV9yZWZlcmVuY2U8VD46OnR5
cGUgZGVjbHZhbCgpIEJPT1NUX05PRVhDRVBUOyAvLyBhcyB1bmV2YWx1YXRlZCBvcGVyYW5kCi0K
LX0gIC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgIC8vIEJPT1NUX1RZUEVfVFJBSVRTX0RF
Q0xWQUxfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvY29uZmlnLmhwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9jb25m
aWcuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmIxZGQ2NWYwZDhhZTk1YWM5
ZTFiNmI4MzIyNWM0YzBjN2M1ZDljLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5
cGVfdHJhaXRzL2RldGFpbC9jb25maWcuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBA
QAotCi0vLyAgKEMpIENvcHlyaWdodCBTdGV2ZSBDbGVhcnksIEJlbWFuIERhd2VzLCBIb3dhcmQg
SGlubmFudCAmIEpvaG4gTWFkZG9jayAyMDAwLgotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBk
aXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0v
LyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9y
IGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8K
LS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCBy
ZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9U
VF9DT05GSUdfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0NPTkZJR19IUFBfSU5DTFVE
RUQKLQotI2lmbmRlZiBCT09TVF9DT05GSUdfSFBQCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhw
cD4KLSNlbmRpZgotI2luY2x1ZGUgPGJvb3N0L3ZlcnNpb24uaHBwPgotI2luY2x1ZGUgPGJvb3N0
L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQotLy8KLS8vIHdoZW5ldmVyIHdlIGhhdmUgYSBjb252
ZXJzaW9uIGZ1bmN0aW9uIHdpdGggZWxsaXBzZXMKLS8vIGl0IG5lZWRzIHRvIGJlIGRlY2xhcmVk
IF9fY2RlY2wgdG8gc3VwcHJlc3MgY29tcGlsZXIKLS8vIHdhcm5pbmdzIGZyb20gTVMgYW5kIEJv
cmxhbmQgY29tcGlsZXJzICh0aGlzICptdXN0KgotLy8gYXBwZWFyIGJlZm9yZSB3ZSBpbmNsdWRl
IGlzX3NhbWUuaHBwIGJlbG93KToKLSNpZiBkZWZpbmVkKEJPT1NUX01TVkMpIHx8IChkZWZpbmVk
KF9fQk9STEFORENfXykgJiYgIWRlZmluZWQoQk9PU1RfRElTQUJMRV9XSU4zMikpCi0jICAgZGVm
aW5lIEJPT1NUX1RUX0RFQ0wgX19jZGVjbAotI2Vsc2UKLSMgICBkZWZpbmUgQk9PU1RfVFRfREVD
TCAvKiovCi0jZW5kaWYKLQotIyBpZiAoQk9PU1RfV09SS0FST1VORChfX01XRVJLU19fLCA8IDB4
MzAwMCkgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHx8IEJPT1NUX1dPUktBUk9VTkQo
X19JQk1DUFBfXywgPCA2MDAgKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfHwgQk9P
U1RfV09SS0FST1VORChfX0JPUkxBTkRDX18sIDwgMHg1QTApICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICB8fCBkZWZpbmVkKF9fZ2hzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIHx8IEJPT1NUX1dPUktBUk9VTkQoX19IUF9hQ0MsIDwgNjA3
MDApICAgICAgICAgICBcCi0gICAgfHwgQk9PU1RfV09SS0FST1VORChNUFdfQ1BMVVMsIEJPT1NU
X1RFU1RFRF9BVCgweDg5MCkpICAgICAgICAgIFwKLSAgICB8fCBCT09TVF9XT1JLQVJPVU5EKF9f
U1VOUFJPX0NDLCBCT09TVF9URVNURURfQVQoMHg1ODApKSkgICAgICAgXAotICAgICYmIGRlZmlu
ZWQoQk9PU1RfTk9fSVNfQUJTVFJBQ1QpCi0KLSMgICBkZWZpbmUgQk9PU1RfVFRfTk9fQ09ORk9S
TUlOR19JU19DTEFTU19JTVBMRU1FTlRBVElPTiAxCi0KLSNlbmRpZgotCi0jaWZuZGVmIEJPT1NU
X1RUX05PX0NPTkZPUk1JTkdfSVNfQ0xBU1NfSU1QTEVNRU5UQVRJT04KLSMgZGVmaW5lIEJPT1NU
X1RUX0hBU19DT05GT1JNSU5HX0lTX0NMQVNTX0lNUExFTUVOVEFUSU9OIDEKLSNlbmRpZgotCi0v
LwotLy8gZGVmaW5lIEJPT1NUX1RUX1RFU1RfTVNfRlVOQ19TSUdTCi0vLyB3aGVuIHdlIHdhbnQg
dG8gdGVzdCBfX3N0ZGNhbGwgZXRjIGZ1bmN0aW9uIHR5cGVzIHdpdGggaXNfZnVuY3Rpb24gZXRj
Ci0vLyAoTm90ZSwgZG9lcyBub3Qgd29yayB3aXRoIEJvcmxhbmQsIGV2ZW4gdGhvdWdoIGl0IGRv
ZXMgc3VwcG9ydCBfX3N0ZGNhbGwgZXRjKToKLS8vCi0jaWYgZGVmaW5lZChfTVNDX0VYVEVOU0lP
TlMpICYmICFkZWZpbmVkKF9fQk9STEFORENfXykKLSMgIGRlZmluZSBCT09TVF9UVF9URVNUX01T
X0ZVTkNfU0lHUwotI2VuZGlmCi0KLS8vCi0vLyBkZWZpbmUgQk9PU1RfVFRfTk9fQ1ZfRlVOQ19U
RVNUCi0vLyBpZiB0ZXN0cyBmb3IgY3YtcXVhbGlmaWVkIG1lbWJlciBmdW5jdGlvbnMgZG9uJ3Qg
Ci0vLyB3b3JrIGluIGlzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyCi0vLwotI2lmIEJPT1NUX1dP
UktBUk9VTkQoX19NV0VSS1NfXywgPCAweDMwMDApIHx8IEJPT1NUX1dPUktBUk9VTkQoX19JQk1D
UFBfXywgPD0gNjAwKQotIyAgZGVmaW5lIEJPT1NUX1RUX05PX0NWX0ZVTkNfVEVTVAotI2VuZGlm
Ci0KLS8vCi0vLyBNYWNyb3MgdGhhdCBoYXZlIGJlZW4gZGVwcmVjYXRlZCwgZGVmaW5lZCBoZXJl
IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLS8vCi0jZGVmaW5lIEJPT1NUX0JST0tFTl9D
T01QSUxFUl9UWVBFX1RSQUlUU19TUEVDSUFMSVpBVElPTih4KQotI2RlZmluZSBCT09TVF9UVF9C
Uk9LRU5fQ09NUElMRVJfU1BFQyh4KQotCi0jZW5kaWYgLy8gQk9PU1RfVFRfQ09ORklHX0hQUF9J
TkNMVURFRAotCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9oYXNfYmluYXJ5X29wZXJhdG9yLmhwcCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp
bC9oYXNfYmluYXJ5X29wZXJhdG9yLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDM5YTZiYjc3ODM3MTU0NzVmODMyYjVkNDg1NTczMjMzZDg4YWJiNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaGFzX2JpbmFyeV9vcGVyYXRvci5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgMjAw
OS0yMDExIEZyZWRlcmljIEJyb24sIFJvYmVydCBTdGV3YXJ0LCBTdGV2ZW4gV2F0YW5hYmUgJiBS
b21hbiBQZXJlcGVsaXRzYS4KLS8vCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1
dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJz
aW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNl
ZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2
ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmln
LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9kZXRhaWwveWVzX25vX3R5cGUuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludGVncmFsX2NvbnN0YW50LmhwcD4KLSNp
bmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19iYXNlX29mLmhwcD4KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9pc19jb25zdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
aXNfY29udmVydGlibGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmRh
bWVudGFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19pbnRlZ3JhbC5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfcG9pbnRlci5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaXNfdm9pZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2N2Lmhw
cD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcG9pbnRlci5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX3JlZmVyZW5jZS5ocHA+Ci0KLS8vIGNhbm5v
dCBpbmNsdWRlIHRoaXMgaGVhZGVyIHdpdGhvdXQgZ2V0dGluZyB3YXJuaW5ncyBvZiB0aGUga2lu
ZDoKLS8vIGdjYzoKLS8vICAgIHdhcm5pbmc6IHZhbHVlIGNvbXB1dGVkIGlzIG5vdCB1c2VkCi0v
LyAgICB3YXJuaW5nOiBjb21wYXJpc29uIGJldHdlZW4gc2lnbmVkIGFuZCB1bnNpZ25lZCBpbnRl
Z2VyIGV4cHJlc3Npb25zCi0vLyBtc3ZjOgotLy8gICAgd2FybmluZyBDNDAxODogJzwnIDogc2ln
bmVkL3Vuc2lnbmVkIG1pc21hdGNoCi0vLyAgICB3YXJuaW5nIEM0MjQ0OiAnKz0nIDogY29udmVy
c2lvbiBmcm9tICdkb3VibGUnIHRvICdjaGFyJywgcG9zc2libGUgbG9zcyBvZiBkYXRhCi0vLyAg
ICB3YXJuaW5nIEM0NTQ3OiAnKicgOiBvcGVyYXRvciBiZWZvcmUgY29tbWEgaGFzIG5vIGVmZmVj
dDsgZXhwZWN0ZWQgb3BlcmF0b3Igd2l0aCBzaWRlLWVmZmVjdAotLy8gICAgd2FybmluZyBDNDgw
MDogJ2ludCcgOiBmb3JjaW5nIHZhbHVlIHRvIGJvb2wgJ3RydWUnIG9yICdmYWxzZScgKHBlcmZv
cm1hbmNlIHdhcm5pbmcpCi0vLyAgICB3YXJuaW5nIEM0ODA0OiAnPCcgOiB1bnNhZmUgdXNlIG9m
IHR5cGUgJ2Jvb2wnIGluIG9wZXJhdGlvbgotLy8gICAgd2FybmluZyBDNDgwNTogJz09JyA6IHVu
c2FmZSBtaXggb2YgdHlwZSAnYm9vbCcgYW5kIHR5cGUgJ2NoYXInIGluIG9wZXJhdGlvbgotLy8g
Y2Fubm90IGZpbmQgYW5vdGhlciBpbXBsZW1lbnRhdGlvbiAtPiBkZWNsYXJlZCBhcyBzeXN0ZW0g
aGVhZGVyIHRvIHN1cHByZXNzIHRoZXNlIHdhcm5pbmdzLgotI2lmIGRlZmluZWQoX19HTlVDX18p
Ci0jICAgcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCi0jZWxpZiBkZWZpbmVkKEJPT1NUX01TVkMp
Ci0jICAgcHJhZ21hIHdhcm5pbmcgKCBwdXNoICkKLSMgICBwcmFnbWEgd2FybmluZyAoIGRpc2Fi
bGUgOiA0MDE4IDQyNDQgNDU0NyA0ODAwIDQ4MDQgNDgwNSA0OTEzKQotIyAgIGlmIEJPT1NUX1dP
UktBUk9VTkQoQk9PU1RfTVNWQ19GVUxMX1ZFUiwgPj0gMTQwMDUwMDAwKQotIyAgICAgICBwcmFn
bWEgd2FybmluZyAoIGRpc2FibGUgOiA2MzM0KQotIyAgIGVuZGlmCi0jZW5kaWYKLQotbmFtZXNw
YWNlIGJvb3N0IHsKLW5hbWVzcGFjZSBkZXRhaWwgewotCi0vLyBUaGlzIG5hbWVzcGFjZSBlbnN1
cmVzIHRoYXQgYXJndW1lbnQtZGVwZW5kZW50IG5hbWUgbG9va3VwIGRvZXMgbm90IG1lc3MgdGhp
bmdzIHVwLgotbmFtZXNwYWNlIEJPT1NUX0pPSU4oQk9PU1RfVFRfVFJBSVRfTkFNRSxfaW1wbCkg
ewotCi0vLyAxLiBhIGZ1bmN0aW9uIHRvIGhhdmUgYW4gaW5zdGFuY2Ugb2YgdHlwZSBUIHdpdGhv
dXQgcmVxdWlyaW5nIFQgdG8gYmUgZGVmYXVsdAotLy8gY29uc3RydWN0aWJsZQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IFQgJm1ha2UoKTsKLQotCi0vLyAyLiB3ZSBwcm92aWRlIG91ciBvcGVyYXRv
ciBkZWZpbml0aW9uIGZvciB0eXBlcyB0aGF0IGRvIG5vdCBoYXZlIG9uZSBhbHJlYWR5Ci0KLS8v
IGEgdHlwZSByZXR1cm5lZCBmcm9tIG9wZXJhdG9yIEJPT1NUX1RUX1RSQUlUX09QIHdoZW4gbm8g
c3VjaCBvcGVyYXRvciBpcwotLy8gZm91bmQgaW4gdGhlIHR5cGUncyBvd24gbmFtZXNwYWNlIChv
dXIgb3duIG9wZXJhdG9yIGlzIHVzZWQpIHNvIHRoYXQgd2UgaGF2ZQotLy8gYSBtZWFucyB0byBr
bm93IHRoYXQgb3VyIG9wZXJhdG9yIHdhcyB1c2VkCi1zdHJ1Y3Qgbm9fb3BlcmF0b3IgeyB9Owot
Ci0vLyB0aGlzIGNsYXNzIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9ucyBhbmQgbWFrZXMgdGhl
IGZvbGxvd2luZyBvcGVyYXRvcgotLy8gZGVmaW5pdGlvbiBsZXNzLXByZWZlcnJlZCB0aGFuIGFu
eSBvdGhlciBzdWNoIG9wZXJhdG9ycyB0aGF0IG1pZ2h0IGJlIGZvdW5kCi0vLyB2aWEgYXJndW1l
bnQtZGVwZW5kZW50IG5hbWUgbG9va3VwCi1zdHJ1Y3QgYW55IHsgdGVtcGxhdGUgPGNsYXNzIFQ+
IGFueShUIGNvbnN0Jik7IH07Ci0KLS8vIHdoZW4gb3BlcmF0b3IgQk9PU1RfVFRfVFJBSVRfT1Ag
aXMgbm90IGF2YWlsYWJsZSwgdGhpcyBvbmUgaXMgdXNlZAotbm9fb3BlcmF0b3Igb3BlcmF0b3Ig
Qk9PU1RfVFRfVFJBSVRfT1AgKGNvbnN0IGFueSYsIGNvbnN0IGFueSYpOwotCi0KLS8vIDMuIGNo
ZWNrcyBpZiB0aGUgb3BlcmF0b3IgcmV0dXJucyB2b2lkIG9yIG5vdAotLy8gY29uZGl0aW9uczog
TGhzIT12b2lkIGFuZCBSaHMhPXZvaWQKLQotLy8gd2UgZmlyc3QgcmVkZWZpbmUgIm9wZXJhdG9y
LCIgc28gdGhhdCB3ZSBoYXZlIG5vIGNvbXBpbGF0aW9uIGVycm9yIGlmCi0vLyBvcGVyYXRvciBC
T09TVF9UVF9UUkFJVF9PUCByZXR1cm5zIHZvaWQgYW5kIHdlIGNhbiB1c2UgdGhlIHJldHVybiB0
eXBlIG9mCi0vLyAobGhzIEJPT1NUX1RUX1RSQUlUX09QIHJocywgcmV0dXJuc192b2lkX3QoKSkg
dG8gZGVkdWNlIGlmCi0vLyBvcGVyYXRvciBCT09TVF9UVF9UUkFJVF9PUCByZXR1cm5zIHZvaWQg
b3Igbm90OgotLy8gLSBvcGVyYXRvciBCT09TVF9UVF9UUkFJVF9PUCByZXR1cm5zIHZvaWQgICAt
PiAobGhzIEJPT1NUX1RUX1RSQUlUX09QIHJocywgcmV0dXJuc192b2lkX3QoKSkgcmV0dXJucyBy
ZXR1cm5zX3ZvaWRfdAotLy8gLSBvcGVyYXRvciBCT09TVF9UVF9UUkFJVF9PUCByZXR1cm5zICE9
dm9pZCAtPiAobGhzIEJPT1NUX1RUX1RSQUlUX09QIHJocywgcmV0dXJuc192b2lkX3QoKSkgcmV0
dXJucyBpbnQKLXN0cnVjdCByZXR1cm5zX3ZvaWRfdCB7IH07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gaW50IG9wZXJhdG9yLChjb25zdCBUJiwgcmV0dXJuc192b2lkX3QpOwotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGludCBvcGVyYXRvciwoY29uc3Qgdm9sYXRpbGUgVCYsIHJldHVybnNfdm9pZF90
KTsKLQotLy8gdGhpcyBpbnRlcm1lZGlhdGUgdHJhaXQgaGFzIG1lbWJlciB2YWx1ZSBvZiB0eXBl
IGJvb2w6Ci0vLyAtIHZhbHVlPT10cnVlIC0+IG9wZXJhdG9yIEJPT1NUX1RUX1RSQUlUX09QIHJl
dHVybnMgdm9pZAotLy8gLSB2YWx1ZT09ZmFsc2UgLT4gb3BlcmF0b3IgQk9PU1RfVFRfVFJBSVRf
T1AgZG9lcyBub3QgcmV0dXJuIHZvaWQKLXRlbXBsYXRlIDwgdHlwZW5hbWUgTGhzLCB0eXBlbmFt
ZSBSaHMgPgotc3RydWN0IG9wZXJhdG9yX3JldHVybnNfdm9pZCB7Ci0gICAvLyBvdmVybG9hZHMg
b2YgZnVuY3Rpb24gcmV0dXJuc192b2lkIG1ha2UgdGhlIGRpZmZlcmVuY2UKLSAgIC8vIHllc190
eXBlIGFuZCBub190eXBlIGhhdmUgZGlmZmVyZW50IHNpemUgYnkgY29uc3RydWN0aW9uCi0gICBz
dGF0aWMgOjpib29zdDo6dHlwZV90cmFpdHM6Onllc190eXBlIHJldHVybnNfdm9pZChyZXR1cm5z
X3ZvaWRfdCk7Ci0gICBzdGF0aWMgOjpib29zdDo6dHlwZV90cmFpdHM6Om5vX3R5cGUgcmV0dXJu
c192b2lkKGludCk7Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSAoc2l6
ZW9mKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSk9PXNpemVvZihyZXR1cm5zX3ZvaWQo
KG1ha2U8TGhzPigpIEJPT1NUX1RUX1RSQUlUX09QIG1ha2U8UmhzPigpLHJldHVybnNfdm9pZF90
KCkpKSkpKTsKLX07Ci0KLQotLy8gNC4gY2hlY2tzIGlmIHRoZSByZXR1cm4gdHlwZSBpcyBSZXQg
b3IgUmV0PT1kb250X2NhcmUKLS8vIGNvbmRpdGlvbnM6IExocyE9dm9pZCBhbmQgUmhzIT12b2lk
Ci0KLXN0cnVjdCBkb250X2NhcmUgeyB9OwotCi10ZW1wbGF0ZSA8IHR5cGVuYW1lIExocywgdHlw
ZW5hbWUgUmhzLCB0eXBlbmFtZSBSZXQsIGJvb2wgUmV0dXJuc192b2lkID4KLXN0cnVjdCBvcGVy
YXRvcl9yZXR1cm5zX1JldDsKLQotdGVtcGxhdGUgPCB0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJo
cyA+Ci1zdHJ1Y3Qgb3BlcmF0b3JfcmV0dXJuc19SZXQgPCBMaHMsIFJocywgZG9udF9jYXJlLCB0
cnVlID4gewotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7Ci19
OwotCi10ZW1wbGF0ZSA8IHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhzID4KLXN0cnVjdCBvcGVy
YXRvcl9yZXR1cm5zX1JldCA8IExocywgUmhzLCBkb250X2NhcmUsIGZhbHNlID4gewotICAgQk9P
U1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7Ci19OwotCi10ZW1wbGF0ZSA8
IHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhzID4KLXN0cnVjdCBvcGVyYXRvcl9yZXR1cm5zX1Jl
dCA8IExocywgUmhzLCB2b2lkLCB0cnVlID4gewotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJv
b2wsIHZhbHVlID0gdHJ1ZSk7Ci19OwotCi10ZW1wbGF0ZSA8IHR5cGVuYW1lIExocywgdHlwZW5h
bWUgUmhzID4KLXN0cnVjdCBvcGVyYXRvcl9yZXR1cm5zX1JldCA8IExocywgUmhzLCB2b2lkLCBm
YWxzZSA+IHsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IGZhbHNlKTsK
LX07Ci0KLXRlbXBsYXRlIDwgdHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHMsIHR5cGVuYW1lIFJl
dCA+Ci1zdHJ1Y3Qgb3BlcmF0b3JfcmV0dXJuc19SZXQgPCBMaHMsIFJocywgUmV0LCB0cnVlID4g
ewotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gZmFsc2UpOwotfTsKLQot
Ly8gb3RoZXJ3aXNlIGNoZWNrcyBpZiBpdCBpcyBjb252ZXJ0aWJsZSB0byBSZXQgdXNpbmcgdGhl
IHNpemVvZiB0cmljawotLy8gYmFzZWQgb24gb3ZlcmxvYWQgcmVzb2x1dGlvbgotLy8gY29uZGl0
aW9uOiBSZXQhPXZvaWQgYW5kIFJldCE9ZG9udF9jYXJlIGFuZCB0aGUgb3BlcmF0b3IgZG9lcyBu
b3QgcmV0dXJuIHZvaWQKLXRlbXBsYXRlIDwgdHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHMsIHR5
cGVuYW1lIFJldCA+Ci1zdHJ1Y3Qgb3BlcmF0b3JfcmV0dXJuc19SZXQgPCBMaHMsIFJocywgUmV0
LCBmYWxzZSA+IHsKLSAgIHN0YXRpYyA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUgaXNf
Y29udmVydGlibGVfdG9fUmV0KFJldCk7IC8vIHRoaXMgdmVyc2lvbiBpcyBwcmVmZXJyZWQgZm9y
IHR5cGVzIGNvbnZlcnRpYmxlIHRvIFJldAotICAgc3RhdGljIDo6Ym9vc3Q6OnR5cGVfdHJhaXRz
Ojpub190eXBlIGlzX2NvbnZlcnRpYmxlX3RvX1JldCguLi4pOyAvLyB0aGlzIHZlcnNpb24gaXMg
dXNlZCBvdGhlcndpc2UKLQotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0g
KHNpemVvZihpc19jb252ZXJ0aWJsZV90b19SZXQobWFrZTxMaHM+KCkgQk9PU1RfVFRfVFJBSVRf
T1AgbWFrZTxSaHM+KCkpKT09c2l6ZW9mKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSkp
KTsKLX07Ci0KLQotLy8gNS4gY2hlY2tzIGZvciBvcGVyYXRvciBleGlzdGVuY2UKLS8vIGNvbmRp
dGlvbjogTGhzIT12b2lkIGFuZCBSaHMhPXZvaWQKLQotLy8gY2hlY2tzIGlmIG91ciBkZWZpbml0
aW9uIG9mIG9wZXJhdG9yIEJPT1NUX1RUX1RSQUlUX09QIGlzIHVzZWQgb3IgYW4gb3RoZXIKLS8v
IGV4aXN0aW5nIG9uZTsKLS8vIHRoaXMgaXMgZG9uZSB3aXRoIHJlZGVmaW5pdGlvbiBvZiAib3Bl
cmF0b3IsIiB0aGF0IHJldHVybnMgbm9fb3BlcmF0b3Igb3IgaGFzX29wZXJhdG9yCi1zdHJ1Y3Qg
aGFzX29wZXJhdG9yIHsgfTsKLW5vX29wZXJhdG9yIG9wZXJhdG9yLChub19vcGVyYXRvciwgaGFz
X29wZXJhdG9yKTsKLQotdGVtcGxhdGUgPCB0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocyA+Ci1z
dHJ1Y3Qgb3BlcmF0b3JfZXhpc3RzIHsKLSAgIHN0YXRpYyA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6
eWVzX3R5cGUgc19jaGVjayhoYXNfb3BlcmF0b3IpOyAvLyB0aGlzIHZlcnNpb24gaXMgcHJlZmVy
cmVkIHdoZW4gb3BlcmF0b3IgZXhpc3RzCi0gICBzdGF0aWMgOjpib29zdDo6dHlwZV90cmFpdHM6
Om5vX3R5cGUgc19jaGVjayhub19vcGVyYXRvcik7IC8vIHRoaXMgdmVyc2lvbiBpcyB1c2VkIG90
aGVyd2lzZQotCi0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSAoc2l6ZW9m
KHNfY2hlY2soKChtYWtlPExocz4oKSBCT09TVF9UVF9UUkFJVF9PUCBtYWtlPFJocz4oKSksbWFr
ZTxoYXNfb3BlcmF0b3I+KCkpKSk9PXNpemVvZig6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5
cGUpKSk7Ci19OwotCi0KLS8vIDYuIG1haW4gdHJhaXQ6IHRvIGF2b2lkIGFueSBjb21waWxhdGlv
biBlcnJvciwgdGhpcyBjbGFzcyBiZWhhdmVzCi0vLyBkaWZmZXJlbnRseSB3aGVuIG9wZXJhdG9y
IEJPT1NUX1RUX1RSQUlUX09QKExocywgUmhzKSBpcyBmb3JiaWRkZW4gYnkgdGhlCi0vLyBzdGFu
ZGFyZC4KLS8vIEZvcmJpZGRlbl9pZiBpcyBhIGJvb2wgdGhhdCBpczoKLS8vIC0gdHJ1ZSB3aGVu
IHRoZSBvcGVyYXRvciBCT09TVF9UVF9UUkFJVF9PUChMaHMsIFJocykgaXMgZm9yYmlkZGVuIGJ5
IHRoZSBzdGFuZGFyZAotLy8gICAod291bGQgeWllbGQgY29tcGlsYXRpb24gZXJyb3IgaWYgdXNl
ZCkKLS8vIC0gZmFsc2Ugb3RoZXJ3aXNlCi10ZW1wbGF0ZSA8IHR5cGVuYW1lIExocywgdHlwZW5h
bWUgUmhzLCB0eXBlbmFtZSBSZXQsIGJvb2wgRm9yYmlkZGVuX2lmID4KLXN0cnVjdCB0cmFpdF9p
bXBsMTsKLQotdGVtcGxhdGUgPCB0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocywgdHlwZW5hbWUg
UmV0ID4KLXN0cnVjdCB0cmFpdF9pbXBsMSA8IExocywgUmhzLCBSZXQsIHRydWUgPiB7Ci0gICBC
T09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSBmYWxzZSk7Ci19OwotCi10ZW1wbGF0
ZSA8IHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhzLCB0eXBlbmFtZSBSZXQgPgotc3RydWN0IHRy
YWl0X2ltcGwxIDwgTGhzLCBSaHMsIFJldCwgZmFsc2UgPiB7Ci0gICBCT09TVF9TVEFUSUNfQ09O
U1RBTlQoYm9vbCwKLSAgICAgIHZhbHVlID0gKG9wZXJhdG9yX2V4aXN0cyA8IExocywgUmhzID46
OnZhbHVlICYmIG9wZXJhdG9yX3JldHVybnNfUmV0IDwgTGhzLCBSaHMsIFJldCwgb3BlcmF0b3Jf
cmV0dXJuc192b2lkIDwgTGhzLCBSaHMgPjo6dmFsdWUgPjo6dmFsdWUpKTsKLX07Ci0KLS8vIHNv
bWUgc3BlY2lhbGl6YXRpb25zIG5lZWRzIHRvIGJlIGRlY2xhcmVkIGZvciB0aGUgc3BlY2lhbCB2
b2lkIGNhc2UKLXRlbXBsYXRlIDwgdHlwZW5hbWUgUmhzLCB0eXBlbmFtZSBSZXQgPgotc3RydWN0
IHRyYWl0X2ltcGwxIDwgdm9pZCwgUmhzLCBSZXQsIGZhbHNlID4gewotICAgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gZmFsc2UpOwotfTsKLQotdGVtcGxhdGUgPCB0eXBlbmFt
ZSBMaHMsIHR5cGVuYW1lIFJldCA+Ci1zdHJ1Y3QgdHJhaXRfaW1wbDEgPCBMaHMsIHZvaWQsIFJl
dCwgZmFsc2UgPiB7Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSBmYWxz
ZSk7Ci19OwotCi10ZW1wbGF0ZSA8IHR5cGVuYW1lIFJldCA+Ci1zdHJ1Y3QgdHJhaXRfaW1wbDEg
PCB2b2lkLCB2b2lkLCBSZXQsIGZhbHNlID4gewotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJv
b2wsIHZhbHVlID0gZmFsc2UpOwotfTsKLQotLy8gZGVmaW5lcyBzb21lIHR5cGVkZWYgZm9yIGNv
bnZlbmllbmNlCi10ZW1wbGF0ZSA8IHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhzLCB0eXBlbmFt
ZSBSZXQgPgotc3RydWN0IHRyYWl0X2ltcGwgewotICAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0
OjpyZW1vdmVfcmVmZXJlbmNlPExocz46OnR5cGUgTGhzX25vcmVmOwotICAgdHlwZWRlZiB0eXBl
bmFtZSA6OmJvb3N0OjpyZW1vdmVfcmVmZXJlbmNlPFJocz46OnR5cGUgUmhzX25vcmVmOwotICAg
dHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjpyZW1vdmVfY3Y8TGhzX25vcmVmPjo6dHlwZSBMaHNf
bm9jdjsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgOjpib29zdDo6cmVtb3ZlX2N2PFJoc19ub3JlZj46
OnR5cGUgUmhzX25vY3Y7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6OnJlbW92ZV9jdjwg
dHlwZW5hbWUgOjpib29zdDo6cmVtb3ZlX3JlZmVyZW5jZTwgdHlwZW5hbWUgOjpib29zdDo6cmVt
b3ZlX3BvaW50ZXI8TGhzX25vcmVmPjo6dHlwZSA+Ojp0eXBlID46OnR5cGUgTGhzX25vcHRyOwot
ICAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjpyZW1vdmVfY3Y8IHR5cGVuYW1lIDo6Ym9vc3Q6
OnJlbW92ZV9yZWZlcmVuY2U8IHR5cGVuYW1lIDo6Ym9vc3Q6OnJlbW92ZV9wb2ludGVyPFJoc19u
b3JlZj46OnR5cGUgPjo6dHlwZSA+Ojp0eXBlIFJoc19ub3B0cjsKLSAgIEJPT1NUX1NUQVRJQ19D
T05TVEFOVChib29sLCB2YWx1ZSA9ICh0cmFpdF9pbXBsMSA8IExoc19ub3JlZiwgUmhzX25vcmVm
LCBSZXQsIEJPT1NUX1RUX0ZPUkJJRERFTl9JRiA+Ojp2YWx1ZSkpOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgaW1wbAotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLS8vIHRoaXMgaXMgdGhlIGFjY2Vz
c2libGUgZGVmaW5pdGlvbiBvZiB0aGUgdHJhaXQgdG8gZW5kIHVzZXIKLXRlbXBsYXRlIDxjbGFz
cyBMaHMsIGNsYXNzIFJocz1MaHMsIGNsYXNzIFJldD06OmJvb3N0OjpkZXRhaWw6OkJPT1NUX0pP
SU4oQk9PU1RfVFRfVFJBSVRfTkFNRSxfaW1wbCk6OmRvbnRfY2FyZT4KLXN0cnVjdCBCT09TVF9U
VF9UUkFJVF9OQU1FIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsICg6OmJvb3N0Ojpk
ZXRhaWw6OkJPT1NUX0pPSU4oQk9PU1RfVFRfVFJBSVRfTkFNRSwgX2ltcGwpOjp0cmFpdF9pbXBs
IDwgTGhzLCBSaHMsIFJldCA+Ojp2YWx1ZSk+e307Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0K
LSNpZiBkZWZpbmVkKEJPT1NUX01TVkMpCi0jICAgcHJhZ21hIHdhcm5pbmcgKCBwb3AgKQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC90eXBlX3RyYWl0cy9kZXRhaWwvaGFzX3Bvc3RmaXhfb3BlcmF0b3IuaHBwIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2hhc19w
b3N0Zml4X29wZXJhdG9yLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U2ODZm
MTJiNWIzMmY0NzM1ZTI5ZjI4MDUwMzUxZGE5MzZhMjE0Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaGFzX3Bvc3RmaXhfb3BlcmF0b3IuaHBwCisr
KyAvZGV2L251bGwKQEAgLTEsMTk1ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IDIwMDktMjAx
MSBGcmVkZXJpYyBCcm9uLCBSb2JlcnQgU3Rld2FydCwgU3RldmVuIFdhdGFuYWJlICYgUm9tYW4g
UGVyZXBlbGl0c2EuCi0vLwotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24g
YXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAx
LjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8v
ICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0
cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lv
biBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3llc19ub190eXBlLmhwcD4KLSNp
bmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pbnRlZ3JhbF9jb25zdGFudC5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2lzX2Z1bmRhbWVudGFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9p
c19wb2ludGVyLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcD4K
LSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc192b2lkLmhwcD4KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRz
L3JlbW92ZV9wb2ludGVyLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yZW1vdmVf
cmVmZXJlbmNlLmhwcD4KLQotLy8gYXZvaWQgd2FybmluZ3MKLSNpZiBkZWZpbmVkKF9fR05VQ19f
KQotIyAgIHByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgotI2VsaWYgZGVmaW5lZChCT09TVF9NU1ZD
KQotIyAgIHByYWdtYSB3YXJuaW5nICggcHVzaCApCi0jICAgcHJhZ21hIHdhcm5pbmcgKCBkaXNh
YmxlIDogNDI0NCA0OTEzKQotIyAgIGlmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQ19GVUxM
X1ZFUiwgPj0gMTQwMDUwMDAwKQotIyAgICAgICBwcmFnbWEgd2FybmluZyAoIGRpc2FibGUgOiA2
MzM0KQotIyAgIGVuZGlmCi0jZW5kaWYKLQotbmFtZXNwYWNlIGJvb3N0IHsKLW5hbWVzcGFjZSBk
ZXRhaWwgewotCi0vLyBUaGlzIG5hbWVzcGFjZSBlbnN1cmVzIHRoYXQgYXJndW1lbnQtZGVwZW5k
ZW50IG5hbWUgbG9va3VwIGRvZXMgbm90IG1lc3MgdGhpbmdzIHVwLgotbmFtZXNwYWNlIEJPT1NU
X0pPSU4oQk9PU1RfVFRfVFJBSVRfTkFNRSxfaW1wbCkgewotCi0vLyAxLiBhIGZ1bmN0aW9uIHRv
IGhhdmUgYW4gaW5zdGFuY2Ugb2YgdHlwZSBUIHdpdGhvdXQgcmVxdWlyaW5nIFQgdG8gYmUgZGVm
YXVsdAotLy8gY29uc3RydWN0aWJsZQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFQgJm1ha2UoKTsK
LQotCi0vLyAyLiB3ZSBwcm92aWRlIG91ciBvcGVyYXRvciBkZWZpbml0aW9uIGZvciB0eXBlcyB0
aGF0IGRvIG5vdCBoYXZlIG9uZSBhbHJlYWR5Ci0KLS8vIGEgdHlwZSByZXR1cm5lZCBmcm9tIG9w
ZXJhdG9yIEJPT1NUX1RUX1RSQUlUX09QIHdoZW4gbm8gc3VjaCBvcGVyYXRvciBpcwotLy8gZm91
bmQgaW4gdGhlIHR5cGUncyBvd24gbmFtZXNwYWNlIChvdXIgb3duIG9wZXJhdG9yIGlzIHVzZWQp
IHNvIHRoYXQgd2UgaGF2ZQotLy8gYSBtZWFucyB0byBrbm93IHRoYXQgb3VyIG9wZXJhdG9yIHdh
cyB1c2VkCi1zdHJ1Y3Qgbm9fb3BlcmF0b3IgeyB9OwotCi0vLyB0aGlzIGNsYXNzIGFsbG93cyBp
bXBsaWNpdCBjb252ZXJzaW9ucyBhbmQgbWFrZXMgdGhlIGZvbGxvd2luZyBvcGVyYXRvcgotLy8g
ZGVmaW5pdGlvbiBsZXNzLXByZWZlcnJlZCB0aGFuIGFueSBvdGhlciBzdWNoIG9wZXJhdG9ycyB0
aGF0IG1pZ2h0IGJlIGZvdW5kCi0vLyB2aWEgYXJndW1lbnQtZGVwZW5kZW50IG5hbWUgbG9va3Vw
Ci1zdHJ1Y3QgYW55IHsgdGVtcGxhdGUgPGNsYXNzIFQ+IGFueShUIGNvbnN0Jik7IH07Ci0KLS8v
IHdoZW4gb3BlcmF0b3IgQk9PU1RfVFRfVFJBSVRfT1AgaXMgbm90IGF2YWlsYWJsZSwgdGhpcyBv
bmUgaXMgdXNlZAotbm9fb3BlcmF0b3Igb3BlcmF0b3IgQk9PU1RfVFRfVFJBSVRfT1AgKGNvbnN0
IGFueSYsIGludCk7Ci0KLQotLy8gMy4gY2hlY2tzIGlmIHRoZSBvcGVyYXRvciByZXR1cm5zIHZv
aWQgb3Igbm90Ci0vLyBjb25kaXRpb25zOiBMaHMhPXZvaWQKLQotLy8gd2UgZmlyc3QgcmVkZWZp
bmUgIm9wZXJhdG9yLCIgc28gdGhhdCB3ZSBoYXZlIG5vIGNvbXBpbGF0aW9uIGVycm9yIGlmCi0v
LyBvcGVyYXRvciBCT09TVF9UVF9UUkFJVF9PUCByZXR1cm5zIHZvaWQgYW5kIHdlIGNhbiB1c2Ug
dGhlIHJldHVybiB0eXBlIG9mCi0vLyAobGhzIEJPT1NUX1RUX1RSQUlUX09QLCByZXR1cm5zX3Zv
aWRfdCgpKSB0byBkZWR1Y2UgaWYKLS8vIG9wZXJhdG9yIEJPT1NUX1RUX1RSQUlUX09QIHJldHVy
bnMgdm9pZCBvciBub3Q6Ci0vLyAtIG9wZXJhdG9yIEJPT1NUX1RUX1RSQUlUX09QIHJldHVybnMg
dm9pZCAgIC0+IChsaHMgQk9PU1RfVFRfVFJBSVRfT1AsIHJldHVybnNfdm9pZF90KCkpIHJldHVy
bnMgcmV0dXJuc192b2lkX3QKLS8vIC0gb3BlcmF0b3IgQk9PU1RfVFRfVFJBSVRfT1AgcmV0dXJu
cyAhPXZvaWQgLT4gKGxocyBCT09TVF9UVF9UUkFJVF9PUCwgcmV0dXJuc192b2lkX3QoKSkgcmV0
dXJucyBpbnQKLXN0cnVjdCByZXR1cm5zX3ZvaWRfdCB7IH07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gaW50IG9wZXJhdG9yLChjb25zdCBUJiwgcmV0dXJuc192b2lkX3QpOwotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGludCBvcGVyYXRvciwoY29uc3Qgdm9sYXRpbGUgVCYsIHJldHVybnNfdm9pZF90
KTsKLQotLy8gdGhpcyBpbnRlcm1lZGlhdGUgdHJhaXQgaGFzIG1lbWJlciB2YWx1ZSBvZiB0eXBl
IGJvb2w6Ci0vLyAtIHZhbHVlPT10cnVlIC0+IG9wZXJhdG9yIEJPT1NUX1RUX1RSQUlUX09QIHJl
dHVybnMgdm9pZAotLy8gLSB2YWx1ZT09ZmFsc2UgLT4gb3BlcmF0b3IgQk9PU1RfVFRfVFJBSVRf
T1AgZG9lcyBub3QgcmV0dXJuIHZvaWQKLXRlbXBsYXRlIDwgdHlwZW5hbWUgTGhzID4KLXN0cnVj
dCBvcGVyYXRvcl9yZXR1cm5zX3ZvaWQgewotICAgLy8gb3ZlcmxvYWRzIG9mIGZ1bmN0aW9uIHJl
dHVybnNfdm9pZCBtYWtlIHRoZSBkaWZmZXJlbmNlCi0gICAvLyB5ZXNfdHlwZSBhbmQgbm9fdHlw
ZSBoYXZlIGRpZmZlcmVudCBzaXplIGJ5IGNvbnN0cnVjdGlvbgotICAgc3RhdGljIDo6Ym9vc3Q6
OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSByZXR1cm5zX3ZvaWQocmV0dXJuc192b2lkX3QpOwotICAg
c3RhdGljIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjpub190eXBlIHJldHVybnNfdm9pZChpbnQpOwot
ICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gKHNpemVvZig6OmJvb3N0Ojp0
eXBlX3RyYWl0czo6eWVzX3R5cGUpPT1zaXplb2YocmV0dXJuc192b2lkKChtYWtlPExocz4oKSBC
T09TVF9UVF9UUkFJVF9PUCxyZXR1cm5zX3ZvaWRfdCgpKSkpKSk7Ci19OwotCi0KLS8vIDQuIGNo
ZWNrcyBpZiB0aGUgcmV0dXJuIHR5cGUgaXMgUmV0IG9yIFJldD09ZG9udF9jYXJlCi0vLyBjb25k
aXRpb25zOiBMaHMhPXZvaWQKLQotc3RydWN0IGRvbnRfY2FyZSB7IH07Ci0KLXRlbXBsYXRlIDwg
dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSZXQsIGJvb2wgUmV0dXJuc192b2lkID4KLXN0cnVjdCBv
cGVyYXRvcl9yZXR1cm5zX1JldDsKLQotdGVtcGxhdGUgPCB0eXBlbmFtZSBMaHMgPgotc3RydWN0
IG9wZXJhdG9yX3JldHVybnNfUmV0IDwgTGhzLCBkb250X2NhcmUsIHRydWUgPiB7Ci0gICBCT09T
VF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsKLX07Ci0KLXRlbXBsYXRlIDwg
dHlwZW5hbWUgTGhzID4KLXN0cnVjdCBvcGVyYXRvcl9yZXR1cm5zX1JldCA8IExocywgZG9udF9j
YXJlLCBmYWxzZSA+IHsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRy
dWUpOwotfTsKLQotdGVtcGxhdGUgPCB0eXBlbmFtZSBMaHMgPgotc3RydWN0IG9wZXJhdG9yX3Jl
dHVybnNfUmV0IDwgTGhzLCB2b2lkLCB0cnVlID4gewotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5U
KGJvb2wsIHZhbHVlID0gdHJ1ZSk7Ci19OwotCi10ZW1wbGF0ZSA8IHR5cGVuYW1lIExocyA+Ci1z
dHJ1Y3Qgb3BlcmF0b3JfcmV0dXJuc19SZXQgPCBMaHMsIHZvaWQsIGZhbHNlID4gewotICAgQk9P
U1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gZmFsc2UpOwotfTsKLQotdGVtcGxhdGUg
PCB0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJldCA+Ci1zdHJ1Y3Qgb3BlcmF0b3JfcmV0dXJuc19S
ZXQgPCBMaHMsIFJldCwgdHJ1ZSA+IHsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2
YWx1ZSA9IGZhbHNlKTsKLX07Ci0KLS8vIG90aGVyd2lzZSBjaGVja3MgaWYgaXQgaXMgY29udmVy
dGlibGUgdG8gUmV0IHVzaW5nIHRoZSBzaXplb2YgdHJpY2sKLS8vIGJhc2VkIG9uIG92ZXJsb2Fk
IHJlc29sdXRpb24KLS8vIGNvbmRpdGlvbjogUmV0IT12b2lkIGFuZCBSZXQhPWRvbnRfY2FyZSBh
bmQgdGhlIG9wZXJhdG9yIGRvZXMgbm90IHJldHVybiB2b2lkCi10ZW1wbGF0ZSA8IHR5cGVuYW1l
IExocywgdHlwZW5hbWUgUmV0ID4KLXN0cnVjdCBvcGVyYXRvcl9yZXR1cm5zX1JldCA8IExocywg
UmV0LCBmYWxzZSA+IHsKLSAgIHN0YXRpYyA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUg
aXNfY29udmVydGlibGVfdG9fUmV0KFJldCk7IC8vIHRoaXMgdmVyc2lvbiBpcyBwcmVmZXJyZWQg
Zm9yIHR5cGVzIGNvbnZlcnRpYmxlIHRvIFJldAotICAgc3RhdGljIDo6Ym9vc3Q6OnR5cGVfdHJh
aXRzOjpub190eXBlIGlzX2NvbnZlcnRpYmxlX3RvX1JldCguLi4pOyAvLyB0aGlzIHZlcnNpb24g
aXMgdXNlZCBvdGhlcndpc2UKLQotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVl
ID0gKHNpemVvZihpc19jb252ZXJ0aWJsZV90b19SZXQobWFrZTxMaHM+KCkgQk9PU1RfVFRfVFJB
SVRfT1ApKT09c2l6ZW9mKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSkpKTsKLX07Ci0K
LQotLy8gNS4gY2hlY2tzIGZvciBvcGVyYXRvciBleGlzdGVuY2UKLS8vIGNvbmRpdGlvbjogTGhz
IT12b2lkCi0KLS8vIGNoZWNrcyBpZiBvdXIgZGVmaW5pdGlvbiBvZiBvcGVyYXRvciBCT09TVF9U
VF9UUkFJVF9PUCBpcyB1c2VkIG9yIGFuIG90aGVyCi0vLyBleGlzdGluZyBvbmU7Ci0vLyB0aGlz
IGlzIGRvbmUgd2l0aCByZWRlZmluaXRpb24gb2YgIm9wZXJhdG9yLCIgdGhhdCByZXR1cm5zIG5v
X29wZXJhdG9yIG9yIGhhc19vcGVyYXRvcgotc3RydWN0IGhhc19vcGVyYXRvciB7IH07Ci1ub19v
cGVyYXRvciBvcGVyYXRvciwobm9fb3BlcmF0b3IsIGhhc19vcGVyYXRvcik7Ci0KLXRlbXBsYXRl
IDwgdHlwZW5hbWUgTGhzID4KLXN0cnVjdCBvcGVyYXRvcl9leGlzdHMgewotICAgc3RhdGljIDo6
Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSBzX2NoZWNrKGhhc19vcGVyYXRvcik7IC8vIHRo
aXMgdmVyc2lvbiBpcyBwcmVmZXJyZWQgd2hlbiBvcGVyYXRvciBleGlzdHMKLSAgIHN0YXRpYyA6
OmJvb3N0Ojp0eXBlX3RyYWl0czo6bm9fdHlwZSBzX2NoZWNrKG5vX29wZXJhdG9yKTsgLy8gdGhp
cyB2ZXJzaW9uIGlzIHVzZWQgb3RoZXJ3aXNlCi0KLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChi
b29sLCB2YWx1ZSA9IChzaXplb2Yoc19jaGVjaygoKG1ha2U8TGhzPigpIEJPT1NUX1RUX1RSQUlU
X09QKSxtYWtlPGhhc19vcGVyYXRvcj4oKSkpKT09c2l6ZW9mKDo6Ym9vc3Q6OnR5cGVfdHJhaXRz
Ojp5ZXNfdHlwZSkpKTsKLX07Ci0KLQotLy8gNi4gbWFpbiB0cmFpdDogdG8gYXZvaWQgYW55IGNv
bXBpbGF0aW9uIGVycm9yLCB0aGlzIGNsYXNzIGJlaGF2ZXMKLS8vIGRpZmZlcmVudGx5IHdoZW4g
b3BlcmF0b3IgQk9PU1RfVFRfVFJBSVRfT1AoTGhzKSBpcyBmb3JiaWRkZW4gYnkgdGhlCi0vLyBz
dGFuZGFyZC4KLS8vIEZvcmJpZGRlbl9pZiBpcyBhIGJvb2wgdGhhdCBpczoKLS8vIC0gdHJ1ZSB3
aGVuIHRoZSBvcGVyYXRvciBCT09TVF9UVF9UUkFJVF9PUChMaHMpIGlzIGZvcmJpZGRlbiBieSB0
aGUgc3RhbmRhcmQKLS8vICAgKHdvdWxkIHlpZWxkIGNvbXBpbGF0aW9uIGVycm9yIGlmIHVzZWQp
Ci0vLyAtIGZhbHNlIG90aGVyd2lzZQotdGVtcGxhdGUgPCB0eXBlbmFtZSBMaHMsIHR5cGVuYW1l
IFJldCwgYm9vbCBGb3JiaWRkZW5faWYgPgotc3RydWN0IHRyYWl0X2ltcGwxOwotCi10ZW1wbGF0
ZSA8IHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmV0ID4KLXN0cnVjdCB0cmFpdF9pbXBsMSA8IExo
cywgUmV0LCB0cnVlID4gewotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0g
ZmFsc2UpOwotfTsKLQotdGVtcGxhdGUgPCB0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJldCA+Ci1z
dHJ1Y3QgdHJhaXRfaW1wbDEgPCBMaHMsIFJldCwgZmFsc2UgPiB7Ci0gICBCT09TVF9TVEFUSUNf
Q09OU1RBTlQoYm9vbCwKLSAgICAgIHZhbHVlID0gKG9wZXJhdG9yX2V4aXN0cyA8IExocyA+Ojp2
YWx1ZSAmJiBvcGVyYXRvcl9yZXR1cm5zX1JldCA8IExocywgUmV0LCBvcGVyYXRvcl9yZXR1cm5z
X3ZvaWQgPCBMaHMgPjo6dmFsdWUgPjo6dmFsdWUpKTsKLX07Ci0KLS8vIHNwZWNpYWxpemF0aW9u
IG5lZWRzIHRvIGJlIGRlY2xhcmVkIGZvciB0aGUgc3BlY2lhbCB2b2lkIGNhc2UKLXRlbXBsYXRl
IDwgdHlwZW5hbWUgUmV0ID4KLXN0cnVjdCB0cmFpdF9pbXBsMSA8IHZvaWQsIFJldCwgZmFsc2Ug
PiB7Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSBmYWxzZSk7Ci19Owot
Ci0vLyBkZWZpbmVzIHNvbWUgdHlwZWRlZiBmb3IgY29udmVuaWVuY2UKLXRlbXBsYXRlIDwgdHlw
ZW5hbWUgTGhzLCB0eXBlbmFtZSBSZXQgPgotc3RydWN0IHRyYWl0X2ltcGwgewotICAgdHlwZWRl
ZiB0eXBlbmFtZSA6OmJvb3N0OjpyZW1vdmVfcmVmZXJlbmNlPExocz46OnR5cGUgTGhzX25vcmVm
OwotICAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjpyZW1vdmVfY3Y8TGhzX25vcmVmPjo6dHlw
ZSBMaHNfbm9jdjsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgOjpib29zdDo6cmVtb3ZlX2N2PCB0eXBl
bmFtZSA6OmJvb3N0OjpyZW1vdmVfcmVmZXJlbmNlPCB0eXBlbmFtZSA6OmJvb3N0OjpyZW1vdmVf
cG9pbnRlcjxMaHNfbm9yZWY+Ojp0eXBlID46OnR5cGUgPjo6dHlwZSBMaHNfbm9wdHI7Ci0gICBC
T09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSAodHJhaXRfaW1wbDEgPCBMaHNfbm9y
ZWYsIFJldCwgQk9PU1RfVFRfRk9SQklEREVOX0lGID46OnZhbHVlKSk7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBpbXBsCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotLy8gdGhpcyBpcyB0aGUgYWNj
ZXNzaWJsZSBkZWZpbml0aW9uIG9mIHRoZSB0cmFpdCB0byBlbmQgdXNlcgotdGVtcGxhdGUgPGNs
YXNzIExocywgY2xhc3MgUmV0PTo6Ym9vc3Q6OmRldGFpbDo6Qk9PU1RfSk9JTihCT09TVF9UVF9U
UkFJVF9OQU1FLF9pbXBsKTo6ZG9udF9jYXJlPgotc3RydWN0IEJPT1NUX1RUX1RSQUlUX05BTUUg
OiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKDo6Ym9vc3Q6OmRldGFpbDo6Qk9PU1Rf
Sk9JTihCT09TVF9UVF9UUkFJVF9OQU1FLCBfaW1wbCk6OnRyYWl0X2ltcGw8IExocywgUmV0ID46
OnZhbHVlKT57fTsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2lmIGRlZmluZWQoQk9PU1Rf
TVNWQykKLSMgICBwcmFnbWEgd2FybmluZyAoIHBvcCApCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp
bC9oYXNfcHJlZml4X29wZXJhdG9yLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9oYXNfcHJlZml4X29wZXJhdG9yLmhwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ1NzRmYzYwZDI3N2JlNTgwNjZlZDMzZmU3
MDgwOWNlOWNhYTNlZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0
cy9kZXRhaWwvaGFzX3ByZWZpeF9vcGVyYXRvci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUg
KzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWRlcmljIEJyb24sIFJvYmVy
dCBTdGV3YXJ0LCBTdGV2ZW4gV2F0YW5hYmUgJiBSb21hbiBQZXJlcGVsaXRzYS4KLS8vCi0vLyAg
VXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9v
c3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJz
L3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0
aW9uLgotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBl
X3RyYWl0cy9kZXRhaWwveWVzX25vX3R5cGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2ludGVncmFsX2NvbnN0YW50LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9p
c19jb25zdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfZnVuZGFtZW50YWwu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2ludGVncmFsLmhwcD4KLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19wb2ludGVyLmhwcD4KLSNpbmNsdWRlIDxib29zdC90
eXBlX3RyYWl0cy9pc19zYW1lLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc192
b2lkLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9wb2ludGVyLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJlbmNlLmhwcD4KLQotLy8gY2Fubm90IGluY2x1
ZGUgdGhpcyBoZWFkZXIgd2l0aG91dCBnZXR0aW5nIHdhcm5pbmdzIG9mIHRoZSBraW5kOgotLy8g
Z2NjOgotLy8gICAgd2FybmluZzogdmFsdWUgY29tcHV0ZWQgaXMgbm90IHVzZWQKLS8vICAgIHdh
cm5pbmc6IGNvbXBhcmlzb24gYmV0d2VlbiBzaWduZWQgYW5kIHVuc2lnbmVkIGludGVnZXIgZXhw
cmVzc2lvbnMKLS8vIG1zdmM6Ci0vLyAgICB3YXJuaW5nIEM0MTQ2OiB1bmFyeSBtaW51cyBvcGVy
YXRvciBhcHBsaWVkIHRvIHVuc2lnbmVkIHR5cGUsIHJlc3VsdCBzdGlsbCB1bnNpZ25lZAotLy8g
ICAgd2FybmluZyBDNDgwNDogJy0nIDogdW5zYWZlIHVzZSBvZiB0eXBlICdib29sJyBpbiBvcGVy
YXRpb24KLS8vIGNhbm5vdCBmaW5kIGFub3RoZXIgaW1wbGVtZW50YXRpb24gLT4gZGVjbGFyZWQg
YXMgc3lzdGVtIGhlYWRlciB0byBzdXBwcmVzcyB0aGVzZSB3YXJuaW5ncy4KLSNpZiBkZWZpbmVk
KF9fR05VQ19fKQotIyAgIHByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgotI2VsaWYgZGVmaW5lZChC
T09TVF9NU1ZDKQotIyAgIHByYWdtYSB3YXJuaW5nICggcHVzaCApCi0jICAgcHJhZ21hIHdhcm5p
bmcgKCBkaXNhYmxlIDogNDE0NiA0ODA0IDQ5MTMgNDI0NCkKLSMgICBpZiBCT09TVF9XT1JLQVJP
VU5EKEJPT1NUX01TVkNfRlVMTF9WRVIsID49IDE0MDA1MDAwMCkKLSMgICAgICAgcHJhZ21hIHdh
cm5pbmcgKCBkaXNhYmxlIDogNjMzNCkKLSMgICBlbmRpZgotI2VuZGlmCi0KLQotCi1uYW1lc3Bh
Y2UgYm9vc3QgewotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLS8vIFRoaXMgbmFtZXNwYWNlIGVuc3Vy
ZXMgdGhhdCBhcmd1bWVudC1kZXBlbmRlbnQgbmFtZSBsb29rdXAgZG9lcyBub3QgbWVzcyB0aGlu
Z3MgdXAuCi1uYW1lc3BhY2UgQk9PU1RfSk9JTihCT09TVF9UVF9UUkFJVF9OQU1FLF9pbXBsKSB7
Ci0KLS8vIDEuIGEgZnVuY3Rpb24gdG8gaGF2ZSBhbiBpbnN0YW5jZSBvZiB0eXBlIFQgd2l0aG91
dCByZXF1aXJpbmcgVCB0byBiZSBkZWZhdWx0Ci0vLyBjb25zdHJ1Y3RpYmxlCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gVCAmbWFrZSgpOwotCi0KLS8vIDIuIHdlIHByb3ZpZGUgb3VyIG9wZXJhdG9y
IGRlZmluaXRpb24gZm9yIHR5cGVzIHRoYXQgZG8gbm90IGhhdmUgb25lIGFscmVhZHkKLQotLy8g
YSB0eXBlIHJldHVybmVkIGZyb20gb3BlcmF0b3IgQk9PU1RfVFRfVFJBSVRfT1Agd2hlbiBubyBz
dWNoIG9wZXJhdG9yIGlzCi0vLyBmb3VuZCBpbiB0aGUgdHlwZSdzIG93biBuYW1lc3BhY2UgKG91
ciBvd24gb3BlcmF0b3IgaXMgdXNlZCkgc28gdGhhdCB3ZSBoYXZlCi0vLyBhIG1lYW5zIHRvIGtu
b3cgdGhhdCBvdXIgb3BlcmF0b3Igd2FzIHVzZWQKLXN0cnVjdCBub19vcGVyYXRvciB7IH07Ci0K
LS8vIHRoaXMgY2xhc3MgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb25zIGFuZCBtYWtlcyB0aGUg
Zm9sbG93aW5nIG9wZXJhdG9yCi0vLyBkZWZpbml0aW9uIGxlc3MtcHJlZmVycmVkIHRoYW4gYW55
IG90aGVyIHN1Y2ggb3BlcmF0b3JzIHRoYXQgbWlnaHQgYmUgZm91bmQKLS8vIHZpYSBhcmd1bWVu
dC1kZXBlbmRlbnQgbmFtZSBsb29rdXAKLXN0cnVjdCBhbnkgeyB0ZW1wbGF0ZSA8Y2xhc3MgVD4g
YW55KFQgY29uc3QmKTsgfTsKLQotLy8gd2hlbiBvcGVyYXRvciBCT09TVF9UVF9UUkFJVF9PUCBp
cyBub3QgYXZhaWxhYmxlLCB0aGlzIG9uZSBpcyB1c2VkCi1ub19vcGVyYXRvciBvcGVyYXRvciBC
T09TVF9UVF9UUkFJVF9PUCAoY29uc3QgYW55Jik7Ci0KLQotLy8gMy4gY2hlY2tzIGlmIHRoZSBv
cGVyYXRvciByZXR1cm5zIHZvaWQgb3Igbm90Ci0vLyBjb25kaXRpb25zOiBSaHMhPXZvaWQKLQot
Ly8gd2UgZmlyc3QgcmVkZWZpbmUgIm9wZXJhdG9yLCIgc28gdGhhdCB3ZSBoYXZlIG5vIGNvbXBp
bGF0aW9uIGVycm9yIGlmCi0vLyBvcGVyYXRvciBCT09TVF9UVF9UUkFJVF9PUCByZXR1cm5zIHZv
aWQgYW5kIHdlIGNhbiB1c2UgdGhlIHJldHVybiB0eXBlIG9mCi0vLyAoQk9PU1RfVFRfVFJBSVRf
T1AgcmhzLCByZXR1cm5zX3ZvaWRfdCgpKSB0byBkZWR1Y2UgaWYKLS8vIG9wZXJhdG9yIEJPT1NU
X1RUX1RSQUlUX09QIHJldHVybnMgdm9pZCBvciBub3Q6Ci0vLyAtIG9wZXJhdG9yIEJPT1NUX1RU
X1RSQUlUX09QIHJldHVybnMgdm9pZCAgIC0+IChCT09TVF9UVF9UUkFJVF9PUCByaHMsIHJldHVy
bnNfdm9pZF90KCkpIHJldHVybnMgcmV0dXJuc192b2lkX3QKLS8vIC0gb3BlcmF0b3IgQk9PU1Rf
VFRfVFJBSVRfT1AgcmV0dXJucyAhPXZvaWQgLT4gKEJPT1NUX1RUX1RSQUlUX09QIHJocywgcmV0
dXJuc192b2lkX3QoKSkgcmV0dXJucyBpbnQKLXN0cnVjdCByZXR1cm5zX3ZvaWRfdCB7IH07Ci10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW50IG9wZXJhdG9yLChjb25zdCBUJiwgcmV0dXJuc192b2lk
X3QpOwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGludCBvcGVyYXRvciwoY29uc3Qgdm9sYXRpbGUg
VCYsIHJldHVybnNfdm9pZF90KTsKLQotLy8gdGhpcyBpbnRlcm1lZGlhdGUgdHJhaXQgaGFzIG1l
bWJlciB2YWx1ZSBvZiB0eXBlIGJvb2w6Ci0vLyAtIHZhbHVlPT10cnVlIC0+IG9wZXJhdG9yIEJP
T1NUX1RUX1RSQUlUX09QIHJldHVybnMgdm9pZAotLy8gLSB2YWx1ZT09ZmFsc2UgLT4gb3BlcmF0
b3IgQk9PU1RfVFRfVFJBSVRfT1AgZG9lcyBub3QgcmV0dXJuIHZvaWQKLXRlbXBsYXRlIDwgdHlw
ZW5hbWUgUmhzID4KLXN0cnVjdCBvcGVyYXRvcl9yZXR1cm5zX3ZvaWQgewotICAgLy8gb3Zlcmxv
YWRzIG9mIGZ1bmN0aW9uIHJldHVybnNfdm9pZCBtYWtlIHRoZSBkaWZmZXJlbmNlCi0gICAvLyB5
ZXNfdHlwZSBhbmQgbm9fdHlwZSBoYXZlIGRpZmZlcmVudCBzaXplIGJ5IGNvbnN0cnVjdGlvbgot
ICAgc3RhdGljIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSByZXR1cm5zX3ZvaWQocmV0
dXJuc192b2lkX3QpOwotICAgc3RhdGljIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjpub190eXBlIHJl
dHVybnNfdm9pZChpbnQpOwotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0g
KHNpemVvZig6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUpPT1zaXplb2YocmV0dXJuc192
b2lkKChCT09TVF9UVF9UUkFJVF9PUCBtYWtlPFJocz4oKSxyZXR1cm5zX3ZvaWRfdCgpKSkpKSk7
Ci19OwotCi0KLS8vIDQuIGNoZWNrcyBpZiB0aGUgcmV0dXJuIHR5cGUgaXMgUmV0IG9yIFJldD09
ZG9udF9jYXJlCi0vLyBjb25kaXRpb25zOiBSaHMhPXZvaWQKLQotc3RydWN0IGRvbnRfY2FyZSB7
IH07Ci0KLXRlbXBsYXRlIDwgdHlwZW5hbWUgUmhzLCB0eXBlbmFtZSBSZXQsIGJvb2wgUmV0dXJu
c192b2lkID4KLXN0cnVjdCBvcGVyYXRvcl9yZXR1cm5zX1JldDsKLQotdGVtcGxhdGUgPCB0eXBl
bmFtZSBSaHMgPgotc3RydWN0IG9wZXJhdG9yX3JldHVybnNfUmV0IDwgUmhzLCBkb250X2NhcmUs
IHRydWUgPiB7Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsK
LX07Ci0KLXRlbXBsYXRlIDwgdHlwZW5hbWUgUmhzID4KLXN0cnVjdCBvcGVyYXRvcl9yZXR1cm5z
X1JldCA8IFJocywgZG9udF9jYXJlLCBmYWxzZSA+IHsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFO
VChib29sLCB2YWx1ZSA9IHRydWUpOwotfTsKLQotdGVtcGxhdGUgPCB0eXBlbmFtZSBSaHMgPgot
c3RydWN0IG9wZXJhdG9yX3JldHVybnNfUmV0IDwgUmhzLCB2b2lkLCB0cnVlID4gewotICAgQk9P
U1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7Ci19OwotCi10ZW1wbGF0ZSA8
IHR5cGVuYW1lIFJocyA+Ci1zdHJ1Y3Qgb3BlcmF0b3JfcmV0dXJuc19SZXQgPCBSaHMsIHZvaWQs
IGZhbHNlID4gewotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gZmFsc2Up
OwotfTsKLQotdGVtcGxhdGUgPCB0eXBlbmFtZSBSaHMsIHR5cGVuYW1lIFJldCA+Ci1zdHJ1Y3Qg
b3BlcmF0b3JfcmV0dXJuc19SZXQgPCBSaHMsIFJldCwgdHJ1ZSA+IHsKLSAgIEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChib29sLCB2YWx1ZSA9IGZhbHNlKTsKLX07Ci0KLS8vIG90aGVyd2lzZSBjaGVj
a3MgaWYgaXQgaXMgY29udmVydGlibGUgdG8gUmV0IHVzaW5nIHRoZSBzaXplb2YgdHJpY2sKLS8v
IGJhc2VkIG9uIG92ZXJsb2FkIHJlc29sdXRpb24KLS8vIGNvbmRpdGlvbjogUmV0IT12b2lkIGFu
ZCBSZXQhPWRvbnRfY2FyZSBhbmQgdGhlIG9wZXJhdG9yIGRvZXMgbm90IHJldHVybiB2b2lkCi10
ZW1wbGF0ZSA8IHR5cGVuYW1lIFJocywgdHlwZW5hbWUgUmV0ID4KLXN0cnVjdCBvcGVyYXRvcl9y
ZXR1cm5zX1JldCA8IFJocywgUmV0LCBmYWxzZSA+IHsKLSAgIHN0YXRpYyA6OmJvb3N0Ojp0eXBl
X3RyYWl0czo6eWVzX3R5cGUgaXNfY29udmVydGlibGVfdG9fUmV0KFJldCk7IC8vIHRoaXMgdmVy
c2lvbiBpcyBwcmVmZXJyZWQgZm9yIHR5cGVzIGNvbnZlcnRpYmxlIHRvIFJldAotICAgc3RhdGlj
IDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjpub190eXBlIGlzX2NvbnZlcnRpYmxlX3RvX1JldCguLi4p
OyAvLyB0aGlzIHZlcnNpb24gaXMgdXNlZCBvdGhlcndpc2UKLQotICAgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKGJvb2wsIHZhbHVlID0gKHNpemVvZihpc19jb252ZXJ0aWJsZV90b19SZXQoQk9PU1Rf
VFRfVFJBSVRfT1AgbWFrZTxSaHM+KCkpKT09c2l6ZW9mKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5
ZXNfdHlwZSkpKTsKLX07Ci0KLQotLy8gNS4gY2hlY2tzIGZvciBvcGVyYXRvciBleGlzdGVuY2UK
LS8vIGNvbmRpdGlvbjogUmhzIT12b2lkCi0KLS8vIGNoZWNrcyBpZiBvdXIgZGVmaW5pdGlvbiBv
ZiBvcGVyYXRvciBCT09TVF9UVF9UUkFJVF9PUCBpcyB1c2VkIG9yIGFuIG90aGVyCi0vLyBleGlz
dGluZyBvbmU7Ci0vLyB0aGlzIGlzIGRvbmUgd2l0aCByZWRlZmluaXRpb24gb2YgIm9wZXJhdG9y
LCIgdGhhdCByZXR1cm5zIG5vX29wZXJhdG9yIG9yIGhhc19vcGVyYXRvcgotc3RydWN0IGhhc19v
cGVyYXRvciB7IH07Ci1ub19vcGVyYXRvciBvcGVyYXRvciwobm9fb3BlcmF0b3IsIGhhc19vcGVy
YXRvcik7Ci0KLXRlbXBsYXRlIDwgdHlwZW5hbWUgUmhzID4KLXN0cnVjdCBvcGVyYXRvcl9leGlz
dHMgewotICAgc3RhdGljIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSBzX2NoZWNrKGhh
c19vcGVyYXRvcik7IC8vIHRoaXMgdmVyc2lvbiBpcyBwcmVmZXJyZWQgd2hlbiBvcGVyYXRvciBl
eGlzdHMKLSAgIHN0YXRpYyA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6bm9fdHlwZSBzX2NoZWNrKG5v
X29wZXJhdG9yKTsgLy8gdGhpcyB2ZXJzaW9uIGlzIHVzZWQgb3RoZXJ3aXNlCi0KLSAgIEJPT1NU
X1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IChzaXplb2Yoc19jaGVjaygoKEJPT1NUX1RU
X1RSQUlUX09QIG1ha2U8UmhzPigpKSxtYWtlPGhhc19vcGVyYXRvcj4oKSkpKT09c2l6ZW9mKDo6
Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSkpKTsKLX07Ci0KLQotLy8gNi4gbWFpbiB0cmFp
dDogdG8gYXZvaWQgYW55IGNvbXBpbGF0aW9uIGVycm9yLCB0aGlzIGNsYXNzIGJlaGF2ZXMKLS8v
IGRpZmZlcmVudGx5IHdoZW4gb3BlcmF0b3IgQk9PU1RfVFRfVFJBSVRfT1AoUmhzKSBpcyBmb3Ji
aWRkZW4gYnkgdGhlCi0vLyBzdGFuZGFyZC4KLS8vIEZvcmJpZGRlbl9pZiBpcyBhIGJvb2wgdGhh
dCBpczoKLS8vIC0gdHJ1ZSB3aGVuIHRoZSBvcGVyYXRvciBCT09TVF9UVF9UUkFJVF9PUChSaHMp
IGlzIGZvcmJpZGRlbiBieSB0aGUgc3RhbmRhcmQKLS8vICAgKHdvdWxkIHlpZWxkIGNvbXBpbGF0
aW9uIGVycm9yIGlmIHVzZWQpCi0vLyAtIGZhbHNlIG90aGVyd2lzZQotdGVtcGxhdGUgPCB0eXBl
bmFtZSBSaHMsIHR5cGVuYW1lIFJldCwgYm9vbCBGb3JiaWRkZW5faWYgPgotc3RydWN0IHRyYWl0
X2ltcGwxOwotCi10ZW1wbGF0ZSA8IHR5cGVuYW1lIFJocywgdHlwZW5hbWUgUmV0ID4KLXN0cnVj
dCB0cmFpdF9pbXBsMSA8IFJocywgUmV0LCB0cnVlID4gewotICAgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGJvb2wsIHZhbHVlID0gZmFsc2UpOwotfTsKLQotdGVtcGxhdGUgPCB0eXBlbmFtZSBSaHMs
IHR5cGVuYW1lIFJldCA+Ci1zdHJ1Y3QgdHJhaXRfaW1wbDEgPCBSaHMsIFJldCwgZmFsc2UgPiB7
Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwKLSAgICAgIHZhbHVlID0gKG9wZXJhdG9y
X2V4aXN0cyA8IFJocyA+Ojp2YWx1ZSAmJiBvcGVyYXRvcl9yZXR1cm5zX1JldCA8IFJocywgUmV0
LCBvcGVyYXRvcl9yZXR1cm5zX3ZvaWQgPCBSaHMgPjo6dmFsdWUgPjo6dmFsdWUpKTsKLX07Ci0K
LS8vIHNwZWNpYWxpemF0aW9uIG5lZWRzIHRvIGJlIGRlY2xhcmVkIGZvciB0aGUgc3BlY2lhbCB2
b2lkIGNhc2UKLXRlbXBsYXRlIDwgdHlwZW5hbWUgUmV0ID4KLXN0cnVjdCB0cmFpdF9pbXBsMSA8
IHZvaWQsIFJldCwgZmFsc2UgPiB7Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFs
dWUgPSBmYWxzZSk7Ci19OwotCi0vLyBkZWZpbmVzIHNvbWUgdHlwZWRlZiBmb3IgY29udmVuaWVu
Y2UKLXRlbXBsYXRlIDwgdHlwZW5hbWUgUmhzLCB0eXBlbmFtZSBSZXQgPgotc3RydWN0IHRyYWl0
X2ltcGwgewotICAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjpyZW1vdmVfcmVmZXJlbmNlPFJo
cz46OnR5cGUgUmhzX25vcmVmOwotICAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjpyZW1vdmVf
Y3Y8UmhzX25vcmVmPjo6dHlwZSBSaHNfbm9jdjsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgOjpib29z
dDo6cmVtb3ZlX2N2PCB0eXBlbmFtZSA6OmJvb3N0OjpyZW1vdmVfcmVmZXJlbmNlPCB0eXBlbmFt
ZSA6OmJvb3N0OjpyZW1vdmVfcG9pbnRlcjxSaHNfbm9yZWY+Ojp0eXBlID46OnR5cGUgPjo6dHlw
ZSBSaHNfbm9wdHI7Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSAodHJh
aXRfaW1wbDEgPCBSaHNfbm9yZWYsIFJldCwgQk9PU1RfVFRfRk9SQklEREVOX0lGID46OnZhbHVl
KSk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBpbXBsCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQot
Ly8gdGhpcyBpcyB0aGUgYWNjZXNzaWJsZSBkZWZpbml0aW9uIG9mIHRoZSB0cmFpdCB0byBlbmQg
dXNlcgotdGVtcGxhdGUgPGNsYXNzIFJocywgY2xhc3MgUmV0PTo6Ym9vc3Q6OmRldGFpbDo6Qk9P
U1RfSk9JTihCT09TVF9UVF9UUkFJVF9OQU1FLF9pbXBsKTo6ZG9udF9jYXJlPgotc3RydWN0IEJP
T1NUX1RUX1RSQUlUX05BTUUgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKDo6Ym9v
c3Q6OmRldGFpbDo6Qk9PU1RfSk9JTihCT09TVF9UVF9UUkFJVF9OQU1FLCBfaW1wbCk6OnRyYWl0
X2ltcGwgPCBSaHMsIFJldCA+Ojp2YWx1ZSk+e307Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0K
LSNpZiBkZWZpbmVkKEJPT1NUX01TVkMpCi0jICAgcHJhZ21hIHdhcm5pbmcgKCBwb3AgKQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC90eXBlX3RyYWl0cy9kZXRhaWwvaXNfZnVuY3Rpb25fcHRyX2hlbHBlci5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaXNf
ZnVuY3Rpb25fcHRyX2hlbHBlci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1
MzhlNDAyZGFlMTI1Njk4M2QwNmJmOTI4ZDhmM2Y5ODFhNzE0YTEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2lzX2Z1bmN0aW9uX3B0cl9oZWxwZXIu
aHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLQotLy8gIENvcHlyaWdodCAyMDAw
IEpvaG4gTWFkZG9jayAoam9obkBqb2hubWFkZG9jay5jby51aykKLS8vICBDb3B5cmlnaHQgMjAw
MiBBbGVrc2V5IEd1cnRvdm95IChhZ3VydG92b3lAbWV0YS1jb21tLmNvbSkKLS8vCi0vLyAgVXNl
LCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5
cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9u
LgotCi0jaWYgIWRlZmluZWQoQk9PU1RfUFBfSVNfSVRFUkFUSU5HKQotCi0vLy8vLyBoZWFkZXIg
Ym9keQotCi0jaWZuZGVmIEJPT1NUX1RUX0RFVEFJTF9JU19GVU5DVElPTl9QVFJfSEVMUEVSX0hQ
UF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9ERVRBSUxfSVNfRlVOQ1RJT05fUFRSX0hFTFBF
Ul9IUFBfSU5DTFVERUQKLQotI2lmIGRlZmluZWQoQk9PU1RfVFRfUFJFUFJPQ0VTU0lOR19NT0RF
KQotLy8KLS8vIEhpZGUgdGhlc2UgI2luY2x1ZGUgZnJvbSBkZXBlbmRlbmN5IGFuYWx5c2VycyBh
cwotLy8gdGhlc2UgYXJlIHJlcXVpcmVkIGluIG1haW50ZW5hbmNlIG1vZGUgb25seToKLS8vCi0j
ZGVmaW5lIFBQMSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2l0ZXJhdGUuaHBwPgotI2luY2x1ZGUgUFAx
Ci0jdW5kZWYgUFAxCi0jZGVmaW5lIFBQMSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2VudW1fcGFyYW1z
LmhwcD4KLSNpbmNsdWRlIFBQMQotI3VuZGVmIFBQMQotI2RlZmluZSBQUDEgPGJvb3N0L3ByZXBy
b2Nlc3Nvci9jb21tYV9pZi5ocHA+Ci0jaW5jbHVkZSBQUDEKLSN1bmRlZiBQUDEKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHR5cGVfdHJhaXRzIHsKLQotdGVtcGxhdGUg
PGNsYXNzIFI+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcgotewotICAgIEJPT1NUX1NU
QVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IGZhbHNlKTsKLX07Ci0KLSNpZiAhZGVmaW5lZChC
T09TVF9UVF9QUkVQUk9DRVNTSU5HX01PREUpCi0vLyBwcmVwcm9jZXNzb3ItZ2VuZXJhdGVkIHBh
cnQsIGRvbid0IGVkaXQgYnkgaGFuZCEKLQotdGVtcGxhdGUgPGNsYXNzIFIgPgotc3RydWN0IGlz
X2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoKT4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9v
bCwgdmFsdWUgPSB0cnVlKTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBSID4KLXN0cnVjdCBpc19mdW5j
dGlvbl9wdHJfaGVscGVyPFIgKCopKCAuLi4pPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29s
LCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIgLCBjbGFzcyBUMD4KLXN0cnVj
dCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKCBUMCk+IHsgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNsYXNzIFQw
Pgotc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoIFQwIC4uLik+IHsgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3Mg
UiAsIGNsYXNzIFQwICwgY2xhc3MgVDE+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxS
ICgqKSggVDAgLCBUMSk+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1
ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNsYXNzIFQwICwgY2xhc3MgVDE+Ci1zdHJ1Y3Qg
aXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKSggVDAgLCBUMSAuLi4pPiB7IEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIgLCBj
bGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDI+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hl
bHBlcjxSICgqKSggVDAgLCBUMSAsIFQyKT4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwg
dmFsdWUgPSB0cnVlKTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBSICwgY2xhc3MgVDAgLCBjbGFzcyBU
MSAsIGNsYXNzIFQyPgotc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoIFQwICwg
VDEgLCBUMiAuLi4pPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUp
OyB9OwotdGVtcGxhdGUgPGNsYXNzIFIgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIg
LCBjbGFzcyBUMz4KLXN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKCBUMCAsIFQx
ICwgVDIgLCBUMyk+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7
IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAs
IGNsYXNzIFQzPgotc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoIFQwICwgVDEg
LCBUMiAsIFQzIC4uLik+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1
ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBU
MiAsIGNsYXNzIFQzICwgY2xhc3MgVDQ+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxS
ICgqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCk+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJv
b2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNsYXNzIFQwICwgY2xh
c3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQ+Ci1zdHJ1Y3QgaXNfZnVuY3Rp
b25fcHRyX2hlbHBlcjxSICgqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAuLi4pPiB7IEJPT1NU
X1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNz
IFIgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0
ICwgY2xhc3MgVDU+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKSggVDAgLCBU
MSAsIFQyICwgVDMgLCBUNCAsIFQ1KT4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFs
dWUgPSB0cnVlKTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBSICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAs
IGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1Pgotc3RydWN0IGlzX2Z1
bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAuLi4p
PiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxh
dGUgPGNsYXNzIFIgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAs
IGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNj4KLXN0cnVjdCBpc19mdW5jdGlvbl9wdHJf
aGVscGVyPFIgKCopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNik+IHsgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3Mg
UiAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQg
LCBjbGFzcyBUNSAsIGNsYXNzIFQ2Pgotc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAo
KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2IC4uLik+IHsgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDc+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBl
cjxSICgqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyk+IHsgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3Mg
UiAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQg
LCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDc+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRy
X2hlbHBlcjxSICgqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAuLi4p
PiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxh
dGUgPGNsYXNzIFIgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAs
IGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDg+Ci1z
dHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBU
NCAsIFQ1ICwgVDYgLCBUNyAsIFQ4KT4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFs
dWUgPSB0cnVlKTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBSICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAs
IGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBj
bGFzcyBUNyAsIGNsYXNzIFQ4Pgotc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKiko
IFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAuLi4pPiB7IEJPT1NU
X1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNz
IFIgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0
ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOT4K
LXN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKCBUMCAsIFQxICwgVDIgLCBUMyAs
IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSk+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJv
b2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNsYXNzIFQwICwgY2xh
c3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNz
IFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5Pgotc3RydWN0IGlzX2Z1bmN0aW9u
X3B0cl9oZWxwZXI8UiAoKikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcg
LCBUOCAsIFQ5IC4uLik+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1
ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBU
MiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcg
LCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwPgotc3RydWN0IGlzX2Z1bmN0aW9uX3B0
cl9oZWxwZXI8UiAoKikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBU
OCAsIFQ5ICwgVDEwKT4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVl
KTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBSICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQy
ICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAs
IGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTA+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRy
X2hlbHBlcjxSICgqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4
ICwgVDkgLCBUMTAgLi4uKT4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0
cnVlKTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBSICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNz
IFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBU
NyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTE+Ci1zdHJ1Y3Qg
aXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1
ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEpPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFO
VChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIgLCBjbGFzcyBUMCAs
IGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBj
bGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNs
YXNzIFQxMT4KLXN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKCBUMCAsIFQxICwg
VDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAuLi4pPiB7
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUg
PGNsYXNzIFIgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNs
YXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFz
cyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMj4KLXN0cnVjdCBpc19mdW5j
dGlvbl9wdHJfaGVscGVyPFIgKCopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs
IFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMik+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5U
KGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNsYXNzIFQwICwg
Y2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNs
YXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xh
c3MgVDExICwgY2xhc3MgVDEyPgotc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKiko
IFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwg
VDExICwgVDEyIC4uLik+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1
ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBU
MiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcg
LCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEy
ICwgY2xhc3MgVDEzPgotc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoIFQwICwg
VDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwg
VDEyICwgVDEzKT4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsg
fTsKLXRlbXBsYXRlIDxjbGFzcyBSICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwg
Y2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNs
YXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIgLCBj
bGFzcyBUMTM+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKSggVDAgLCBUMSAs
IFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIg
LCBUMTMgLi4uKT4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsg
fTsKLXRlbXBsYXRlIDxjbGFzcyBSICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwg
Y2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNs
YXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIgLCBj
bGFzcyBUMTMgLCBjbGFzcyBUMTQ+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgq
KSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAg
LCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQpPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2
YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIgLCBjbGFzcyBUMCAsIGNsYXNzIFQx
ICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAs
IGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAs
IGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxND4KLXN0cnVjdCBpc19mdW5jdGlvbl9w
dHJfaGVscGVyPFIgKCopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwg
VDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAuLi4pPiB7IEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIgLCBj
bGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xh
c3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNz
IFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNs
YXNzIFQxNT4KLXN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKCBUMCAsIFQxICwg
VDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAs
IFQxMyAsIFQxNCAsIFQxNSk+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0g
dHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFz
cyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3Mg
VDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3Mg
VDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1Pgotc3RydWN0IGlzX2Z1bmN0
aW9uX3B0cl9oZWxwZXI8UiAoKikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwg
VDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1IC4uLik+IHsg
Qk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8
Y2xhc3MgUiAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xh
c3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNz
IFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xh
c3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2Pgotc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9o
ZWxwZXI8UiAoKikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAs
IFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2KT4geyBCT09TVF9T
VEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBS
ICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAs
IGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBj
bGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIgLCBjbGFzcyBUMTMgLCBjbGFzcyBUMTQg
LCBjbGFzcyBUMTUgLCBjbGFzcyBUMTY+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxS
ICgqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBU
MTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLi4uKT4geyBCT09TVF9TVEFU
SUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBSICwg
Y2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNs
YXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFz
cyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIgLCBjbGFzcyBUMTMgLCBjbGFzcyBUMTQgLCBj
bGFzcyBUMTUgLCBjbGFzcyBUMTYgLCBjbGFzcyBUMTc+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRy
X2hlbHBlcjxSICgqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4
ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcpPiB7
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUg
PGNsYXNzIFIgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNs
YXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFz
cyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNs
YXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNz4KLXN0cnVjdCBpc19m
dW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBU
NiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQx
NiAsIFQxNyAuLi4pPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUp
OyB9OwotdGVtcGxhdGUgPGNsYXNzIFIgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIg
LCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwg
Y2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAs
IGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQx
NyAsIGNsYXNzIFQxOD4KLXN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAs
IFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCk+IHsgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg
VDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xh
c3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4Pgotc3RydWN0IGlzX2Z1
bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2
ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2
ICwgVDE3ICwgVDE4IC4uLik+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0g
dHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFz
cyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3Mg
VDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3Mg
VDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xh
c3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5Pgotc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9o
ZWxwZXI8UiAoKikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAs
IFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4
ICwgVDE5KT4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsK
LXRlbXBsYXRlIDxjbGFzcyBSICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xh
c3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNz
IFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIgLCBjbGFz
cyBUMTMgLCBjbGFzcyBUMTQgLCBjbGFzcyBUMTUgLCBjbGFzcyBUMTYgLCBjbGFzcyBUMTcgLCBj
bGFzcyBUMTggLCBjbGFzcyBUMTk+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgq
KSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAg
LCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBUMTggLCBUMTkgLi4u
KT4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLXRlbXBs
YXRlIDxjbGFzcyBSICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMg
LCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwg
Y2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIgLCBjbGFzcyBUMTMg
LCBjbGFzcyBUMTQgLCBjbGFzcyBUMTUgLCBjbGFzcyBUMTYgLCBjbGFzcyBUMTcgLCBjbGFzcyBU
MTggLCBjbGFzcyBUMTkgLCBjbGFzcyBUMjA+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBl
cjxSICgqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkg
LCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBUMTggLCBU
MTkgLCBUMjApPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9
OwotdGVtcGxhdGUgPGNsYXNzIFIgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBj
bGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xh
c3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNs
YXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAs
IGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMD4KLXN0cnVjdCBpc19mdW5jdGlvbl9w
dHJfaGVscGVyPFIgKCopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwg
VDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAs
IFQxOCAsIFQxOSAsIFQyMCAuLi4pPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1
ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwg
Y2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNs
YXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNs
YXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAs
IGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQy
MT4KLXN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKCBUMCAsIFQxICwgVDIgLCBU
MyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAs
IFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSk+IHsgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3Mg
UiAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQg
LCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwg
Y2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0
ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3Mg
VDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxPgotc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxw
ZXI8UiAoKikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5
ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwg
VDE5ICwgVDIwICwgVDIxIC4uLik+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVl
ID0gdHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBj
bGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xh
c3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xh
c3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwg
Y2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIx
ICwgY2xhc3MgVDIyPgotc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoIFQwICwg
VDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwg
VDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwgVDE5ICwgVDIwICwgVDIx
ICwgVDIyKT4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsK
LXRlbXBsYXRlIDxjbGFzcyBSICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xh
c3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNz
IFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIgLCBjbGFz
cyBUMTMgLCBjbGFzcyBUMTQgLCBjbGFzcyBUMTUgLCBjbGFzcyBUMTYgLCBjbGFzcyBUMTcgLCBj
bGFzcyBUMTggLCBjbGFzcyBUMTkgLCBjbGFzcyBUMjAgLCBjbGFzcyBUMjEgLCBjbGFzcyBUMjI+
Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKSggVDAgLCBUMSAsIFQyICwgVDMg
LCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBU
MTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBUMTggLCBUMTkgLCBUMjAgLCBUMjEgLCBUMjIgLi4uKT4g
eyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLXRlbXBsYXRl
IDxjbGFzcyBSICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBj
bGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwgY2xh
c3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIgLCBjbGFzcyBUMTMgLCBj
bGFzcyBUMTQgLCBjbGFzcyBUMTUgLCBjbGFzcyBUMTYgLCBjbGFzcyBUMTcgLCBjbGFzcyBUMTgg
LCBjbGFzcyBUMTkgLCBjbGFzcyBUMjAgLCBjbGFzcyBUMjEgLCBjbGFzcyBUMjIgLCBjbGFzcyBU
MjM+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKSggVDAgLCBUMSAsIFQyICwg
VDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMg
LCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBUMTggLCBUMTkgLCBUMjAgLCBUMjEgLCBUMjIgLCBU
MjMpPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVt
cGxhdGUgPGNsYXNzIFIgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBU
MyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDgg
LCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQx
MyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNz
IFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNsYXNzIFQyMiAsIGNs
YXNzIFQyMz4KLXN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKCBUMCAsIFQxICwg
VDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAs
IFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQy
MiAsIFQyMyAuLi4pPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUp
OyB9OwotdGVtcGxhdGUgPGNsYXNzIFIgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIg
LCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwg
Y2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAs
IGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQx
NyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNsYXNz
IFQyMiAsIGNsYXNzIFQyMyAsIGNsYXNzIFQyND4KLXN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVs
cGVyPFIgKCopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBU
OSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAs
IFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAsIFQyMyAsIFQyNCk+IHsgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgUiAsIGNsYXNzIFQw
ICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAs
IGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwg
Y2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1
ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3Mg
VDIwICwgY2xhc3MgVDIxICwgY2xhc3MgVDIyICwgY2xhc3MgVDIzICwgY2xhc3MgVDI0Pgotc3Ry
dWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQg
LCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwg
VDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwgVDE5ICwgVDIwICwgVDIxICwgVDIyICwgVDIzICwgVDI0
IC4uLik+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0j
ZWxzZQotCi0jdW5kZWYgQk9PU1RfU1RBVElDX0NPTlNUQU5UCi0jZGVmaW5lIEJPT1NUX1BQX0lU
RVJBVElPTl9QQVJBTVNfMSBcCi0gICAgKDMsICgwLCAyNSwgImJvb3N0L3R5cGVfdHJhaXRzL2Rl
dGFpbC9pc19mdW5jdGlvbl9wdHJfaGVscGVyLmhwcCIpKQotI2luY2x1ZGUgQk9PU1RfUFBfSVRF
UkFURSgpCi0KLSNlbmRpZiAvLyBCT09TVF9UVF9QUkVQUk9DRVNTSU5HX01PREUKLQotfSAvLyBu
YW1lc3BhY2UgdHlwZV90cmFpdHMKLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBC
T09TVF9UVF9ERVRBSUxfSVNfRlVOQ1RJT05fUFRSX0hFTFBFUl9IUFBfSU5DTFVERUQKLQotLy8v
Ly8gaXRlcmF0aW9uCi0KLSNlbHNlCi0jZGVmaW5lIEJPT1NUX1BQX0NPVU5URVIgQk9PU1RfUFBf
RlJBTUVfSVRFUkFUSU9OKDEpCi0KLXRlbXBsYXRlIDxjbGFzcyBSIEJPT1NUX1BQX0NPTU1BX0lG
KEJPT1NUX1BQX0NPVU5URVIpIEJPT1NUX1BQX0VOVU1fUEFSQU1TKEJPT1NUX1BQX0NPVU5URVIs
Y2xhc3MgVCk+Ci1zdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShCT09TVF9QUF9F
TlVNX1BBUkFNUyhCT09TVF9QUF9DT1VOVEVSLFQpKT4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQo
Ym9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLUAjaWZuZGVmIEJPT1NUX1RUX05PX0VMTElQU0lTX0lO
X0ZVTkNfVEVTVElORwotdGVtcGxhdGUgPGNsYXNzIFIgQk9PU1RfUFBfQ09NTUFfSUYoQk9PU1Rf
UFBfQ09VTlRFUikgQk9PU1RfUFBfRU5VTV9QQVJBTVMoQk9PU1RfUFBfQ09VTlRFUixjbGFzcyBU
KT4KLXN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKEJPT1NUX1BQX0VOVU1fUEFS
QU1TKEJPT1NUX1BQX0NPVU5URVIsVCkgLi4uKT4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9v
bCwgdmFsdWUgPSB0cnVlKTsgfTsKLUAjZW5kaWYKLSN1bmRlZiBCT09TVF9QUF9DT1VOVEVSCi0j
ZW5kaWYgLy8gQk9PU1RfUFBfSVNfSVRFUkFUSU5HCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaXNfbWVtX2Z1
bl9wb2ludGVyX2ltcGwuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2lzX21lbV9mdW5fcG9pbnRlcl9pbXBsLmhwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY5OGE3NDg5N2Q0ZGRhNWRhYjI1NTU0NWNiYWU2
MmY5YjM3ZTg3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9k
ZXRhaWwvaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGwuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNzIz
ICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgRGF2ZSBBYnJhaGFtcywgU3RldmUgQ2xlYXJ5
LCBCZW1hbiBEYXdlcywgCi0vLyAgQWxla3NleSBHdXJ0b3ZveSwgSG93YXJkIEhpbm5hbnQgJiBK
b2huIE1hZGRvY2sgMjAwMC4gIAotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRp
b24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lv
biAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQK
LS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUg
aHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVy
c2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmICFkZWZpbmVkKEJPT1NUX1BQX0lT
X0lURVJBVElORykKLQotLy8vLy8gaGVhZGVyIGJvZHkKLQotI2lmbmRlZiBCT09TVF9UVF9ERVRB
SUxfSVNfTUVNX0ZVTl9QT0lOVEVSX0lNUExfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RU
X0RFVEFJTF9JU19NRU1fRlVOX1BPSU5URVJfSU1QTF9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUg
PGJvb3N0L2NvbmZpZy5ocHA+Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX1RUX1BSRVBST0NFU1NJTkdf
TU9ERSkKLS8vCi0vLyBNYWludGVuYW5jZSBtb2RlLCBoaWRlIGluY2x1ZGUgZGVwZW5kZW5jaWVz
Ci0vLyBmcm9tIHRyYWNrZXJzOgotLy8KLSNkZWZpbmUgUFBJIDxib29zdC9wcmVwcm9jZXNzb3Iv
aXRlcmF0ZS5ocHA+Ci0jaW5jbHVkZSBQUEkKLSN1bmRlZiBQUEkKLSNkZWZpbmUgUFBJIDxib29z
dC9wcmVwcm9jZXNzb3IvZW51bV9wYXJhbXMuaHBwPgotI2luY2x1ZGUgUFBJCi0jdW5kZWYgUFBJ
Ci0jZGVmaW5lIFBQSSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbW1hX2lmLmhwcD4KLSNpbmNsdWRl
IFBQSQotI3VuZGVmIFBQSQotI2VuZGlmCi0KLW5hbWVzcGFjZSBib29zdCB7Ci1uYW1lc3BhY2Ug
dHlwZV90cmFpdHMgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBpc19tZW1fZnVu
X3BvaW50ZXJfaW1wbAotewotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9
IGZhbHNlKTsKLX07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9QUkVQUk9DRVNTSU5HX01PREUp
Ci0vLyBwcmUtcHJvY2Vzc2VkIGNvZGUsIGRvbid0IGVkaXQsIHRyeSBHTlUgY3BwIHdpdGggCi0v
LyBjcHAgLUkuLi8uLi8uLi8gLURCT09TVF9UVF9QUkVQUk9DRVNTSU5HX01PREUgLXggYysrIC1Q
IGZpbGVuYW1lCi0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUID4KLXN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSgpID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9v
bCwgdmFsdWUgPSB0cnVlKTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUID4KLXN0cnVj
dCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggLi4uKSA+IHsgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9U
VF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCA+Ci1zdHJ1Y3Qg
aXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoKSBjb25zdCA+IHsgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBj
bGFzcyBUID4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSgpIHZvbGF0
aWxlID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQot
dGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9p
bXBsPFIgKFQ6OiopKCkgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChi
b29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCA+Ci1z
dHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIC4uLikgY29uc3QgPiB7IEJP
T1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8
Y2xhc3MgUiwgY2xhc3MgVCA+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6
KikoIC4uLikgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9
IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCA+Ci1zdHJ1Y3QgaXNfbWVt
X2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NU
X1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl
cl9pbXBsPFIgKFQ6OiopKCBUMCkgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1
ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMD4KLXN0
cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLi4uKSA+IHsgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChC
T09TVF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCkgY29u
c3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10
ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwPgotc3RydWN0IGlzX21lbV9mdW5f
cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCkgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05T
VEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3Mg
VCAsIGNsYXNzIFQwPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU
MCkgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9
IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwPgotc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAuLi4pIGNvbnN0ID4geyBC
T09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMD4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJf
aW1wbDxSIChUOjoqKSggVDAgLi4uKSB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5U
KGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwg
Y2xhc3MgVDA+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwIC4u
LikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9
IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQw
ICwgY2xhc3MgVDE+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQw
ICwgVDEpID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsK
LXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMT4KLXN0cnVj
dCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAuLi4pID4geyBCT09T
VF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotI2lmICFkZWZpbmVk
KEJPT1NUX1RUX05PX0NWX0ZVTkNfVEVTVCkKLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwg
Y2xhc3MgVDAgLCBjbGFzcyBUMT4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChU
OjoqKSggVDAgLCBUMSkgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1
ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwg
Y2xhc3MgVDE+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwg
VDEpIHZvbGF0aWxlID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVl
KTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQx
Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxKSBjb25z
dCB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7
IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMT4K
LXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAuLi4pIGNv
bnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQot
dGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxPgotc3RydWN0
IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxIC4uLikgdm9sYXRpbGUg
PiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDE+Ci1zdHJ1Y3QgaXNf
bWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLi4uKSBjb25zdCB2b2xhdGls
ZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0jZW5k
aWYKLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNs
YXNzIFQyPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx
ICwgVDIpID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsK
LXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNz
IFQyPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwg
VDIgLi4uKSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07
Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xh
c3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMj4KLXN0cnVjdCBp
c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyKSBjb25zdCA+IHsg
Qk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRl
IDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyPgotc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIpIHZvbGF0
aWxlID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQot
dGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3Mg
VDI+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBU
MikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9
IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xh
c3MgVDEgLCBjbGFzcyBUMj4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoq
KSggVDAgLCBUMSAsIFQyIC4uLikgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29s
LCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNz
IFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMj4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKSggVDAgLCBUMSAsIFQyIC4uLikgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19D
T05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh
c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMj4KLXN0cnVjdCBpc19tZW1fZnVu
X3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyIC4uLikgY29uc3Qgdm9sYXRpbGUg
PiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlm
Ci10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFz
cyBUMiAsIGNsYXNzIFQzPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KCBUMCAsIFQxICwgVDIgLCBUMykgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1
ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNs
YXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMz4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJf
aW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLi4uKSA+IHsgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9O
T19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwg
Y2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl
cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMykgY29uc3QgPiB7IEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwg
Y2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzPgotc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMykg
dm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9
OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBj
bGFzcyBUMiAsIGNsYXNzIFQzPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6
OiopKCBUMCAsIFQxICwgVDIgLCBUMykgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19D
T05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh
c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzPgotc3RydWN0
IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAuLi4p
IGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsK
LQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xh
c3MgVDIgLCBjbGFzcyBUMz4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoq
KSggVDAgLCBUMSAsIFQyICwgVDMgLi4uKSB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBU
ICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDM+Ci1zdHJ1Y3QgaXNf
bWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzIC4uLikgY29u
c3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUp
OyB9OwotI2VuZGlmCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xh
c3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQ+Ci1zdHJ1Y3QgaXNfbWVtX2Z1
bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQpID4geyBCT09T
VF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLXRlbXBsYXRlIDxjbGFz
cyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMg
LCBjbGFzcyBUND4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAg
LCBUMSAsIFQyICwgVDMgLCBUNCAuLi4pID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwg
dmFsdWUgPSB0cnVlKTsgfTsKLQotI2lmICFkZWZpbmVkKEJPT1NUX1RUX05PX0NWX0ZVTkNfVEVT
VCkKLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNs
YXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUND4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJf
aW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCkgY29uc3QgPiB7IEJPT1NUX1NU
QVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3Mg
UiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwg
Y2xhc3MgVDQ+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwg
VDEgLCBUMiAsIFQzICwgVDQpIHZvbGF0aWxlID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9v
bCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz
cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0Pgotc3RydWN0
IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0
KSBjb25zdCB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0g
dHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFz
cyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUND4KLXN0cnVjdCBpc19tZW1fZnVu
X3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAuLi4pIGNvbnN0
ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVt
cGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIg
LCBjbGFzcyBUMyAsIGNsYXNzIFQ0Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIg
KFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0IC4uLikgdm9sYXRpbGUgPiB7IEJPT1NUX1NU
QVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3Mg
UiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwg
Y2xhc3MgVDQ+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwg
VDEgLCBUMiAsIFQzICwgVDQgLi4uKSBjb25zdCB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0jZW5kaWYKLXRlbXBsYXRlIDxjbGFzcyBS
LCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBj
bGFzcyBUNCAsIGNsYXNzIFQ1Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6
OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUpID4geyBCT09TVF9TVEFUSUNfQ09OU1RB
TlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwg
Y2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNs
YXNzIFQ1Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx
ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLi4uKSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2ws
IHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5DX1RF
U1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBj
bGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNT4KLXN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1KSBj
b25zdCA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0K
LXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNz
IFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1Pgotc3RydWN0IGlzX21lbV9mdW5f
cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUpIHZvbGF0
aWxlID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQot
dGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3Mg
VDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDU+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9w
b2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSkgY29uc3Qg
dm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9
OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBj
bGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNT4KLXN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1IC4u
LikgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9
OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBj
bGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNT4KLXN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1IC4u
Likgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUp
OyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEg
LCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNT4KLXN0cnVjdCBpc19t
ZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1
IC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1
ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNz
IFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBU
NSAsIGNsYXNzIFQ2Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU
MCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNikgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFO
VChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBj
bGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xh
c3MgVDUgLCBjbGFzcyBUNj4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoq
KSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLi4uKSA+IHsgQk9PU1RfU1RBVElD
X0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9U
VF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQw
ICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAs
IGNsYXNzIFQ2Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNikgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05T
VEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3Mg
VCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQg
LCBjbGFzcyBUNSAsIGNsYXNzIFQ2Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIg
KFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNikgdm9sYXRpbGUgPiB7IEJP
T1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8
Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNz
IFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2Pgotc3RydWN0IGlzX21lbV9mdW5f
cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNikg
Y29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRy
dWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3Mg
VDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2
Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgLCBUNiAuLi4pIGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQo
Ym9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBj
bGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xh
c3MgVDUgLCBjbGFzcyBUNj4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoq
KSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLi4uKSB2b2xhdGlsZSA+IHsgQk9P
U1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxj
bGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3Mg
VDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDY+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9w
b2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2IC4u
LikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9
IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQw
ICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAs
IGNsYXNzIFQ2ICwgY2xhc3MgVDc+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAo
VDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcpID4geyBCT09TVF9T
VEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBS
LCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBj
bGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNz4KLXN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwg
VDYgLCBUNyAuLi4pID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVl
KTsgfTsKLQotI2lmICFkZWZpbmVkKEJPT1NUX1RUX05PX0NWX0ZVTkNfVEVTVCkKLXRlbXBsYXRl
IDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xh
c3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNz4KLXN0cnVj
dCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBU
NCAsIFQ1ICwgVDYgLCBUNykgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2
YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQw
ICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAs
IGNsYXNzIFQ2ICwgY2xhc3MgVDc+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAo
VDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcpIHZvbGF0aWxlID4g
eyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxh
dGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBj
bGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3Pgotc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAs
IFQ0ICwgVDUgLCBUNiAsIFQ3KSBjb25zdCB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBU
ICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAs
IGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNz4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50
ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAu
Li4pIGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsg
fTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwg
Y2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNs
YXNzIFQ3Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx
ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3IC4uLikgdm9sYXRpbGUgPiB7IEJPT1NUX1NU
QVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3Mg
UiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwg
Y2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDc+Ci1zdHJ1Y3QgaXNfbWVt
X2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAs
IFQ2ICwgVDcgLi4uKSBjb25zdCB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJv
b2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0jZW5kaWYKLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBU
ICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAs
IGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4Pgotc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg
LCBUNiAsIFQ3ICwgVDgpID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0
cnVlKTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBU
MSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYg
LCBjbGFzcyBUNyAsIGNsYXNzIFQ4Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIg
KFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLi4uKSA+
IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAh
ZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh
c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3Mg
VDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOD4KLXN0cnVjdCBp
c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAs
IFQ1ICwgVDYgLCBUNyAsIFQ4KSBjb25zdCA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2ws
IHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3Mg
VDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1
ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4Pgotc3RydWN0IGlzX21lbV9mdW5fcG9p
bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3
ICwgVDgpIHZvbGF0aWxlID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0
cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNz
IFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBU
NiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDg+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8
UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCkgY29u
c3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUp
OyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEg
LCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwg
Y2xhc3MgVDcgLCBjbGFzcyBUOD4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChU
OjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4IC4uLikgY29u
c3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10
ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBU
MiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcg
LCBjbGFzcyBUOD4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAg
LCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4IC4uLikgdm9sYXRpbGUgPiB7
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNs
YXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFz
cyBUOD4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAs
IFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4IC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10
ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBU
MiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcg
LCBjbGFzcyBUOCAsIGNsYXNzIFQ5Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIg
KFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSkg
PiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxh
dGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBj
bGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xh
c3MgVDggLCBjbGFzcyBUOT4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoq
KSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLi4uKSA+
IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAh
ZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh
c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3Mg
VDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5
Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSkgY29uc3QgPiB7IEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwg
Y2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xh
c3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNz
IFQ5Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwg
VDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSkgdm9sYXRpbGUgPiB7IEJPT1NU
X1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xh
c3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQz
ICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAs
IGNsYXNzIFQ5Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSkgY29uc3Qgdm9sYXRp
bGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10
ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBU
MiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcg
LCBjbGFzcyBUOCAsIGNsYXNzIFQ5Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIg
KFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAu
Li4pIGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsg
fTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwg
Y2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNs
YXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOT4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJf
aW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4
ICwgVDkgLi4uKSB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVl
ID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBj
bGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xh
c3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDk+Ci1zdHJ1Y3QgaXNfbWVtX2Z1
bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2
ICwgVDcgLCBUOCAsIFQ5IC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05T
VEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0ZSA8Y2xhc3MgUiwg
Y2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xh
c3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNz
IFQ5ICwgY2xhc3MgVDEwPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCkg
PiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxh
dGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBj
bGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xh
c3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMD4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJf
aW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4
ICwgVDkgLCBUMTAgLi4uKSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0g
dHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAs
IGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBj
bGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl
cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwg
VDggLCBUOSAsIFQxMCkgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1
ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwg
Y2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNs
YXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwPgotc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAs
IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCkgdm9sYXRpbGUgPiB7IEJPT1NUX1NU
QVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3Mg
UiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwg
Y2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNs
YXNzIFQ5ICwgY2xhc3MgVDEwPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6
OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQx
MCkgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9
IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xh
c3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNz
IFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwPgotc3RydWN0
IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0
ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAuLi4pIGNvbnN0ID4geyBCT09TVF9TVEFU
SUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIs
IGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNs
YXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFz
cyBUOSAsIGNsYXNzIFQxMD4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoq
KSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAg
Li4uKSB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1
ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBU
MSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYg
LCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTA+Ci1zdHJ1Y3QgaXNf
bWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBU
NSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwIC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NU
X1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNs
YXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFz
cyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExPgotc3RydWN0IGlzX21lbV9m
dW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBU
NiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSkgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChi
b29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz
cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3Mg
VDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQx
MCAsIGNsYXNzIFQxMT4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSgg
VDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBU
MTEgLi4uKSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07
Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xh
c3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQz
ICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAs
IGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExPgotc3RydWN0IGlzX21lbV9mdW5fcG9p
bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3
ICwgVDggLCBUOSAsIFQxMCAsIFQxMSkgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChi
b29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg
VDEwICwgY2xhc3MgVDExPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAs
IFQxMSkgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRy
dWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3Mg
VDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2
ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDEx
Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSkgY29uc3Qgdm9s
YXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9Owot
Ci10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFz
cyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3Mg
VDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExPgotc3RydWN0
IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0
ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAuLi4pIGNvbnN0ID4geyBCT09T
VF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNs
YXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBU
MyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDgg
LCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMT4KLXN0cnVjdCBpc19tZW1fZnVuX3Bv
aW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBU
NyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLi4uKSB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFz
cyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBU
NCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDkg
LCBjbGFzcyBUMTAgLCBjbGFzcyBUMTE+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8
UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5
ICwgVDEwICwgVDExIC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFO
VChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh
c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3Mg
VDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5
ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyPgotc3RydWN0IGlzX21lbV9mdW5f
cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs
IFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMikgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFO
VChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBj
bGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xh
c3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNz
IFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMj4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJf
aW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4
ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLi4uKSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJv
b2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5D
X1RFU1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEg
LCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwg
Y2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwg
Y2xhc3MgVDEyPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAs
IFQxMikgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUp
OyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEg
LCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwg
Y2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwg
Y2xhc3MgVDEyPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAs
IFQxMikgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRy
dWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3Mg
VDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2
ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDEx
ICwgY2xhc3MgVDEyPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU
MCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQx
MSAsIFQxMikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2
YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQw
ICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAs
IGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwg
Y2xhc3MgVDExICwgY2xhc3MgVDEyPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIg
KFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAs
IFQxMCAsIFQxMSAsIFQxMiAuLi4pIGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9v
bCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz
cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3Mg
VDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQx
MCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMj4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwg
VDkgLCBUMTAgLCBUMTEgLCBUMTIgLi4uKSB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBU
ICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAs
IGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBj
bGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTI+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2lu
dGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcg
LCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyIC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NU
X1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNs
YXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFz
cyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xh
c3MgVDEzPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx
ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQx
MiAsIFQxMykgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9
OwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xh
c3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNz
IFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNz
IFQxMiAsIGNsYXNzIFQxMz4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoq
KSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAg
LCBUMTEgLCBUMTIgLCBUMTMgLi4uKSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZh
bHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5DX1RFU1Qp
Ci10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFz
cyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3Mg
VDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3Mg
VDEyICwgY2xhc3MgVDEzPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAs
IFQxMSAsIFQxMiAsIFQxMykgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2
YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQw
ICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAs
IGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwg
Y2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzPgotc3RydWN0IGlzX21lbV9mdW5fcG9p
bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3
ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMykgdm9sYXRpbGUgPiB7IEJPT1NUX1NU
QVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3Mg
UiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwg
Y2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNs
YXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzPgot
c3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBU
MyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMykg
Y29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRy
dWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3Mg
VDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2
ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDEx
ICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBs
PFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBU
OSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAuLi4pIGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09O
U1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz
IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0
ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs
IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMz4KLXN0cnVjdCBp
c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAs
IFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLi4uKSB2b2xh
dGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0K
LXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNz
IFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBU
NyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBU
MTIgLCBjbGFzcyBUMTM+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6Kiko
IFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwg
VDExICwgVDEyICwgVDEzIC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05T
VEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0ZSA8Y2xhc3MgUiwg
Y2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xh
c3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNz
IFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xh
c3MgVDE0Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx
ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQx
MiAsIFQxMyAsIFQxNCkgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRy
dWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQx
ICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAs
IGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAs
IGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxND4KLXN0cnVjdCBpc19tZW1fZnVuX3Bv
aW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBU
NyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLi4uKSA+IHsgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChC
T09TVF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg
VDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0Pgotc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAs
IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQx
NCkgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9
OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBj
bGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xh
c3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xh
c3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl
cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwg
VDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCkgdm9sYXRpbGUgPiB7IEJPT1NU
X1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xh
c3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQz
ICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAs
IGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEz
ICwgY2xhc3MgVDE0Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU
MCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQx
MSAsIFQxMiAsIFQxMyAsIFQxNCkgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05T
VEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3Mg
VCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQg
LCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwg
Y2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0
Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQx
MyAsIFQxNCAuLi4pIGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUg
PSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNs
YXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFz
cyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNz
IFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxND4KLXN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwg
VDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLi4uKSB2b2xh
dGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0K
LXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNz
IFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBU
NyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBU
MTIgLCBjbGFzcyBUMTMgLCBjbGFzcyBUMTQ+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2lt
cGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAs
IFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0IC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10
ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBU
MiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcg
LCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEy
ICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1Pgotc3RydWN0IGlzX21lbV9mdW5f
cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs
IFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSkgPiB7IEJP
T1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNs
YXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBU
MyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDgg
LCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQx
MyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNT4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwg
VDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLi4uKSA+IHsgQk9PU1RfU1RB
VElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09T
VF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNz
IFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBU
NSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEw
ICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3Mg
VDE1Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwg
VDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAs
IFQxMyAsIFQxNCAsIFQxNSkgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2
YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQw
ICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAs
IGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwg
Y2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1
Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQx
MyAsIFQxNCAsIFQxNSkgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2
YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQw
ICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAs
IGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwg
Y2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1
Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQx
MyAsIFQxNCAsIFQxNSkgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChi
b29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg
VDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xh
c3MgVDE1Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx
ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQx
MiAsIFQxMyAsIFQxNCAsIFQxNSAuLi4pIGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQo
Ym9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBj
bGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xh
c3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNz
IFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNs
YXNzIFQxNT4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBU
MSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBU
MTIgLCBUMTMgLCBUMTQgLCBUMTUgLi4uKSB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBU
ICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAs
IGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBj
bGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIgLCBjbGFzcyBUMTMgLCBjbGFzcyBUMTQg
LCBjbGFzcyBUMTU+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQw
ICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDEx
ICwgVDEyICwgVDEzICwgVDE0ICwgVDE1IC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NU
QVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0ZSA8
Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNz
IFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBU
OCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3Mg
VDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2Pgotc3RydWN0IGlzX21lbV9m
dW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBU
NiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQx
NikgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVt
cGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIg
LCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwg
Y2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAs
IGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNj4KLXN0cnVjdCBp
c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAs
IFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBU
MTUgLCBUMTYgLi4uKSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1
ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNs
YXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFz
cyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xh
c3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2Pgotc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg
LCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAs
IFQxNikgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUp
OyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEg
LCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwg
Y2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwg
Y2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2
Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQx
MyAsIFQxNCAsIFQxNSAsIFQxNikgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChi
b29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg
VDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xh
c3MgVDE1ICwgY2xhc3MgVDE2Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6
OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQx
MCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNikgY29uc3Qgdm9sYXRpbGUgPiB7
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNs
YXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFz
cyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xh
c3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2Pgotc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg
LCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAs
IFQxNiAuLi4pIGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0
cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNz
IFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBU
NiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQx
MSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNz
IFQxNj4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAs
IFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIg
LCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLi4uKSB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFz
cyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBU
NCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDkg
LCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIgLCBjbGFzcyBUMTMgLCBjbGFzcyBU
MTQgLCBjbGFzcyBUMTUgLCBjbGFzcyBUMTY+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2lt
cGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAs
IFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2IC4uLikgY29uc3Qg
dm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9
OwotI2VuZGlmCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3Mg
VDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2
ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDEx
ICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3Mg
VDE2ICwgY2xhc3MgVDE3Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAs
IFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNykgPiB7IEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIsIGNs
YXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNz
IFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBU
OSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNz
IFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNz4KLXN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwg
VDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBU
MTYgLCBUMTcgLi4uKSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1
ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNs
YXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFz
cyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xh
c3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3Pgot
c3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBU
MyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAs
IFQxNCAsIFQxNSAsIFQxNiAsIFQxNykgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChi
b29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg
VDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xh
c3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl
cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwg
VDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNykg
dm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9
OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBj
bGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xh
c3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xh
c3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwg
Y2xhc3MgVDE3Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAs
IFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNykgY29uc3Qgdm9sYXRpbGUgPiB7IEJP
T1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8
Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNz
IFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBU
OCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3Mg
VDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3Pgotc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAs
IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQx
NCAsIFQxNSAsIFQxNiAsIFQxNyAuLi4pIGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQo
Ym9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBj
bGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xh
c3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNz
IFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNs
YXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNz4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50
ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAs
IFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcg
Li4uKSB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1
ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBU
MSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYg
LCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEg
LCBjbGFzcyBUMTIgLCBjbGFzcyBUMTMgLCBjbGFzcyBUMTQgLCBjbGFzcyBUMTUgLCBjbGFzcyBU
MTYgLCBjbGFzcyBUMTc+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6Kiko
IFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwg
VDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3IC4uLikgY29uc3Qgdm9sYXRp
bGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2Vu
ZGlmCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBj
bGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xh
c3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xh
c3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwg
Y2xhc3MgVDE3ICwgY2xhc3MgVDE4Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIg
KFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAs
IFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCkgPiB7
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFz
cyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3Mg
VDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNz
IFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNs
YXNzIFQxOD4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBU
MSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBU
MTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBUMTggLi4uKSA+IHsgQk9PU1RfU1RB
VElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09T
VF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNz
IFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBU
NSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEw
ICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3Mg
VDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4Pgotc3RydWN0IGlzX21lbV9m
dW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBU
NiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQx
NiAsIFQxNyAsIFQxOCkgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1
ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwg
Y2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNs
YXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xh
c3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwg
Y2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4Pgotc3RydWN0IGlzX21lbV9mdW5fcG9p
bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3
ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQx
NyAsIFQxOCkgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9
IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xh
c3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNz
IFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3Mg
VDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xh
c3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl
cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwg
VDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAs
IFQxOCkgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1
ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwg
Y2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNs
YXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xh
c3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwg
Y2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4Pgotc3RydWN0IGlzX21lbV9mdW5fcG9p
bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3
ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQx
NyAsIFQxOCAuLi4pIGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUg
PSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNs
YXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFz
cyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNz
IFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNs
YXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOD4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50
ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAs
IFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcg
LCBUMTggLi4uKSB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVl
ID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBj
bGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xh
c3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFz
cyBUMTEgLCBjbGFzcyBUMTIgLCBjbGFzcyBUMTMgLCBjbGFzcyBUMTQgLCBjbGFzcyBUMTUgLCBj
bGFzcyBUMTYgLCBjbGFzcyBUMTcgLCBjbGFzcyBUMTg+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2lu
dGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcg
LCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3
ICwgVDE4IC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29s
LCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAs
IGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBj
bGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xh
c3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwg
Y2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5
Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg
LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQx
MyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSkgPiB7IEJPT1NUX1NUQVRJQ19D
T05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz
IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0
ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs
IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQx
NCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNz
IFQxOT4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAs
IFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIg
LCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBUMTggLCBUMTkgLi4uKSA+IHsgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChC
T09TVF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg
VDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xh
c3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5Pgot
c3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBU
MyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAs
IFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSkgY29uc3QgPiB7IEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwg
Y2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xh
c3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNz
IFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xh
c3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwg
Y2xhc3MgVDE5Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAs
IFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSkgdm9sYXRpbGUg
PiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAs
IGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBj
bGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwg
Y2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3
ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBs
PFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBU
OSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAs
IFQxOSkgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1
ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwg
Y2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNs
YXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xh
c3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwg
Y2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5Pgotc3RydWN0IGlz
X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg
VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQx
NSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAuLi4pIGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09O
U1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz
IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0
ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs
IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQx
NCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNz
IFQxOT4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAs
IFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIg
LCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBUMTggLCBUMTkgLi4uKSB2b2xhdGlsZSA+
IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBs
YXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwg
Y2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNs
YXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIgLCBj
bGFzcyBUMTMgLCBjbGFzcyBUMTQgLCBjbGFzcyBUMTUgLCBjbGFzcyBUMTYgLCBjbGFzcyBUMTcg
LCBjbGFzcyBUMTggLCBjbGFzcyBUMTk+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8
UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5
ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwg
VDE5IC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2
YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg
VDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xh
c3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwg
Y2xhc3MgVDIwPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAs
IFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCkgPiB7
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUg
PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFz
cyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3Mg
VDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNz
IFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNs
YXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMD4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50
ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAs
IFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcg
LCBUMTggLCBUMTkgLCBUMjAgLi4uKSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZh
bHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5DX1RFU1Qp
Ci10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFz
cyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3Mg
VDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3Mg
VDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xh
c3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwPgotc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg
LCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAs
IFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCkgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05T
VEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3Mg
VCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQg
LCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwg
Y2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0
ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3Mg
VDE5ICwgY2xhc3MgVDIwPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAs
IFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQy
MCkgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUp
OyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEg
LCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwg
Y2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwg
Y2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2
ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwPgotc3RydWN0
IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0
ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAs
IFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCkgY29uc3Qgdm9sYXRpbGUgPiB7IEJP
T1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8
Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNz
IFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBU
OCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3Mg
VDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xh
c3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl
cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwg
VDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAs
IFQxOCAsIFQxOSAsIFQyMCAuLi4pIGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9v
bCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz
cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3Mg
VDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQx
MCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNz
IFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNs
YXNzIFQyMD4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBU
MSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBU
MTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBUMTggLCBUMTkgLCBUMjAgLi4uKSB2
b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07
Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNs
YXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFz
cyBUNyAsIGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFz
cyBUMTIgLCBjbGFzcyBUMTMgLCBjbGFzcyBUMTQgLCBjbGFzcyBUMTUgLCBjbGFzcyBUMTYgLCBj
bGFzcyBUMTcgLCBjbGFzcyBUMTggLCBjbGFzcyBUMTkgLCBjbGFzcyBUMjA+Ci1zdHJ1Y3QgaXNf
bWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBU
NSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1
ICwgVDE2ICwgVDE3ICwgVDE4ICwgVDE5ICwgVDIwIC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJP
T1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAs
IGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBj
bGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwg
Y2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3
ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxPgotc3RydWN0
IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0
ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAs
IFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSkgPiB7IEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIsIGNs
YXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNz
IFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBU
OSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNz
IFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNs
YXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMT4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50
ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAs
IFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcg
LCBUMTggLCBUMTkgLCBUMjAgLCBUMjEgLi4uKSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJv
b2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5D
X1RFU1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEg
LCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwg
Y2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwg
Y2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2
ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3Mg
VDIxPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwg
VDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAs
IFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSkgY29u
c3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10
ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBU
MiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcg
LCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEy
ICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3Mg
VDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxPgotc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAs
IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQx
NCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSkgdm9sYXRpbGUgPiB7
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNs
YXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFz
cyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xh
c3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwg
Y2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxPgotc3RydWN0IGlz
X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg
VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQx
NSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSkgY29uc3Qgdm9sYXRpbGUgPiB7
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNs
YXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFz
cyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xh
c3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwg
Y2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxPgotc3RydWN0IGlz
X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg
VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQx
NSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAuLi4pIGNvbnN0ID4geyBCT09T
VF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNs
YXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBU
MyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDgg
LCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQx
MyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNz
IFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMT4KLXN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwg
VDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBU
MTYgLCBUMTcgLCBUMTggLCBUMTkgLCBUMjAgLCBUMjEgLi4uKSB2b2xhdGlsZSA+IHsgQk9PU1Rf
U1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFz
cyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMg
LCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwg
Y2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIgLCBjbGFzcyBUMTMg
LCBjbGFzcyBUMTQgLCBjbGFzcyBUMTUgLCBjbGFzcyBUMTYgLCBjbGFzcyBUMTcgLCBjbGFzcyBU
MTggLCBjbGFzcyBUMTkgLCBjbGFzcyBUMjAgLCBjbGFzcyBUMjE+Ci1zdHJ1Y3QgaXNfbWVtX2Z1
bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2
ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2
ICwgVDE3ICwgVDE4ICwgVDE5ICwgVDIwICwgVDIxIC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJP
T1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAs
IGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBj
bGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwg
Y2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3
ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxICwgY2xhc3Mg
VDIyPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwg
VDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAs
IFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQy
MikgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVt
cGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIg
LCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwg
Y2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAs
IGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQx
NyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNsYXNz
IFQyMj4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAs
IFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIg
LCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBUMTggLCBUMTkgLCBUMjAgLCBUMjEgLCBU
MjIgLi4uKSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07
Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xh
c3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQz
ICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAs
IGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEz
ICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3Mg
VDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxICwgY2xhc3MgVDIyPgotc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAs
IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQx
NCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMikgY29uc3Qg
PiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAs
IGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBj
bGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwg
Y2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3
ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxICwgY2xhc3Mg
VDIyPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwg
VDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAs
IFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQy
Mikgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUp
OyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEg
LCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwg
Y2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwg
Y2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2
ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3Mg
VDIxICwgY2xhc3MgVDIyPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAs
IFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQy
MCAsIFQyMSAsIFQyMikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChi
b29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg
VDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xh
c3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwg
Y2xhc3MgVDIwICwgY2xhc3MgVDIxICwgY2xhc3MgVDIyPgotc3RydWN0IGlzX21lbV9mdW5fcG9p
bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3
ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQx
NyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAuLi4pIGNvbnN0ID4geyBCT09TVF9TVEFU
SUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFIs
IGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNs
YXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFz
cyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNs
YXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAs
IGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNsYXNzIFQyMj4KLXN0cnVjdCBp
c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAs
IFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBU
MTUgLCBUMTYgLCBUMTcgLCBUMTggLCBUMTkgLCBUMjAgLCBUMjEgLCBUMjIgLi4uKSB2b2xhdGls
ZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRl
bXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQy
ICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAs
IGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIg
LCBjbGFzcyBUMTMgLCBjbGFzcyBUMTQgLCBjbGFzcyBUMTUgLCBjbGFzcyBUMTYgLCBjbGFzcyBU
MTcgLCBjbGFzcyBUMTggLCBjbGFzcyBUMTkgLCBjbGFzcyBUMjAgLCBjbGFzcyBUMjEgLCBjbGFz
cyBUMjI+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEg
LCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEy
ICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwgVDE5ICwgVDIwICwgVDIxICwg
VDIyIC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2
YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs
YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz
cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg
VDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xh
c3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwg
Y2xhc3MgVDIwICwgY2xhc3MgVDIxICwgY2xhc3MgVDIyICwgY2xhc3MgVDIzPgotc3RydWN0IGlz
X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg
VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQx
NSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAsIFQyMykgPiB7IEJP
T1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotdGVtcGxhdGUgPGNs
YXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBU
MyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDgg
LCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQx
MyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNz
IFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNsYXNzIFQyMiAsIGNs
YXNzIFQyMz4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBU
MSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBU
MTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBUMTggLCBUMTkgLCBUMjAgLCBUMjEg
LCBUMjIgLCBUMjMgLi4uKSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0g
dHJ1ZSk7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAs
IGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBj
bGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwg
Y2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3
ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxICwgY2xhc3Mg
VDIyICwgY2xhc3MgVDIzPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAs
IFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQy
MCAsIFQyMSAsIFQyMiAsIFQyMykgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29s
LCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNz
IFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBU
NSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEw
ICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3Mg
VDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xh
c3MgVDIwICwgY2xhc3MgVDIxICwgY2xhc3MgVDIyICwgY2xhc3MgVDIzPgotc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg
LCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAs
IFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAsIFQyMykgdm9sYXRpbGUg
PiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAs
IGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBj
bGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwg
Y2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3
ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxICwgY2xhc3Mg
VDIyICwgY2xhc3MgVDIzPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop
KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAs
IFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQy
MCAsIFQyMSAsIFQyMiAsIFQyMykgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05T
VEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3Mg
VCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQg
LCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwg
Y2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0
ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3Mg
VDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxICwgY2xhc3MgVDIyICwgY2xhc3MgVDIzPgotc3Ry
dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAs
IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQx
NCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAsIFQyMyAu
Li4pIGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsg
fTsKLQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwg
Y2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNs
YXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNs
YXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAs
IGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQy
MSAsIGNsYXNzIFQyMiAsIGNsYXNzIFQyMz4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w
bDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4ICwg
VDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBUMTcgLCBUMTgg
LCBUMTkgLCBUMjAgLCBUMjEgLCBUMjIgLCBUMjMgLi4uKSB2b2xhdGlsZSA+IHsgQk9PU1RfU1RB
VElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBS
LCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBj
bGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAsIGNsYXNzIFQ4ICwgY2xh
c3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIgLCBjbGFzcyBUMTMgLCBj
bGFzcyBUMTQgLCBjbGFzcyBUMTUgLCBjbGFzcyBUMTYgLCBjbGFzcyBUMTcgLCBjbGFzcyBUMTgg
LCBjbGFzcyBUMTkgLCBjbGFzcyBUMjAgLCBjbGFzcyBUMjEgLCBjbGFzcyBUMjIgLCBjbGFzcyBU
MjM+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBU
MiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwg
VDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwgVDE5ICwgVDIwICwgVDIxICwgVDIy
ICwgVDIzIC4uLikgY29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29s
LCB2YWx1ZSA9IHRydWUpOyB9OwotI2VuZGlmCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAs
IGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBj
bGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xh
c3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwg
Y2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5
ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxICwgY2xhc3MgVDIyICwgY2xhc3MgVDIzICwgY2xhc3Mg
VDI0Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwg
VDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAs
IFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQy
MiAsIFQyMyAsIFQyNCkgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRy
dWUpOyB9OwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQx
ICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAs
IGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAs
IGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQx
NiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNz
IFQyMSAsIGNsYXNzIFQyMiAsIGNsYXNzIFQyMyAsIGNsYXNzIFQyND4KLXN0cnVjdCBpc19tZW1f
ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwg
VDYgLCBUNyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBU
MTYgLCBUMTcgLCBUMTggLCBUMTkgLCBUMjAgLCBUMjEgLCBUMjIgLCBUMjMgLCBUMjQgLi4uKSA+
IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLSNpZiAh
ZGVmaW5lZChCT09TVF9UVF9OT19DVl9GVU5DX1RFU1QpCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh
c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3Mg
VDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5
ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3Mg
VDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xh
c3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxICwgY2xhc3MgVDIyICwgY2xhc3MgVDIzICwg
Y2xhc3MgVDI0Pgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs
IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAs
IFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQy
MSAsIFQyMiAsIFQyMyAsIFQyNCkgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29s
LCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNz
IFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBU
NSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEw
ICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3Mg
VDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xh
c3MgVDIwICwgY2xhc3MgVDIxICwgY2xhc3MgVDIyICwgY2xhc3MgVDIzICwgY2xhc3MgVDI0Pgot
c3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBU
MyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAs
IFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAsIFQy
MyAsIFQyNCkgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9
IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xh
c3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNz
IFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3Mg
VDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xh
c3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwg
Y2xhc3MgVDIxICwgY2xhc3MgVDIyICwgY2xhc3MgVDIzICwgY2xhc3MgVDI0Pgotc3RydWN0IGlz
X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg
VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQx
NSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAsIFQyMyAsIFQyNCkg
Y29uc3Qgdm9sYXRpbGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRy
dWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3Mg
VDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2
ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDEx
ICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3Mg
VDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xh
c3MgVDIxICwgY2xhc3MgVDIyICwgY2xhc3MgVDIzICwgY2xhc3MgVDI0Pgotc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg
LCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAs
IFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAsIFQyMyAsIFQyNCAuLi4p
IGNvbnN0ID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsK
LQotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xh
c3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNz
IFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNz
IFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNs
YXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAs
IGNsYXNzIFQyMiAsIGNsYXNzIFQyMyAsIGNsYXNzIFQyND4KLXN0cnVjdCBpc19tZW1fZnVuX3Bv
aW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBU
NyAsIFQ4ICwgVDkgLCBUMTAgLCBUMTEgLCBUMTIgLCBUMTMgLCBUMTQgLCBUMTUgLCBUMTYgLCBU
MTcgLCBUMTggLCBUMTkgLCBUMjAgLCBUMjEgLCBUMjIgLCBUMjMgLCBUMjQgLi4uKSB2b2xhdGls
ZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRl
bXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQy
ICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNyAs
IGNsYXNzIFQ4ICwgY2xhc3MgVDkgLCBjbGFzcyBUMTAgLCBjbGFzcyBUMTEgLCBjbGFzcyBUMTIg
LCBjbGFzcyBUMTMgLCBjbGFzcyBUMTQgLCBjbGFzcyBUMTUgLCBjbGFzcyBUMTYgLCBjbGFzcyBU
MTcgLCBjbGFzcyBUMTggLCBjbGFzcyBUMTkgLCBjbGFzcyBUMjAgLCBjbGFzcyBUMjEgLCBjbGFz
cyBUMjIgLCBjbGFzcyBUMjMgLCBjbGFzcyBUMjQ+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVy
X2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBU
OCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwg
VDE4ICwgVDE5ICwgVDIwICwgVDIxICwgVDIyICwgVDIzICwgVDI0IC4uLikgY29uc3Qgdm9sYXRp
bGUgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotI2Vu
ZGlmCi0KLSNlbHNlCi0KLSN1bmRlZiBCT09TVF9TVEFUSUNfQ09OU1RBTlQKLSNkZWZpbmUgQk9P
U1RfUFBfSVRFUkFUSU9OX1BBUkFNU18xIFwKLSAgICAoMywgKDAsIDI1LCAiYm9vc3QvdHlwZV90
cmFpdHMvZGV0YWlsL2lzX21lbV9mdW5fcG9pbnRlcl9pbXBsLmhwcCIpKQotI2luY2x1ZGUgQk9P
U1RfUFBfSVRFUkFURSgpCi0KLSNlbmRpZiAvLyBCT09TVF9UVF9QUkVQUk9DRVNTSU5HX01PREUK
LQotfSAvLyBuYW1lc3BhY2UgdHlwZV90cmFpdHMKLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNl
bmRpZiAvLyBCT09TVF9UVF9ERVRBSUxfSVNfTUVNX0ZVTl9QT0lOVEVSX0lNUExfSFBQX0lOQ0xV
REVECi0KLS8vLy8vIGl0ZXJhdGlvbgotCi0jZWxzZQotI2RlZmluZSBCT09TVF9QUF9DT1VOVEVS
IEJPT1NUX1BQX0ZSQU1FX0lURVJBVElPTigxKQotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3Mg
VCBCT09TVF9QUF9DT01NQV9JRihCT09TVF9QUF9DT1VOVEVSKSBCT09TVF9QUF9FTlVNX1BBUkFN
UyhCT09TVF9QUF9DT1VOVEVSLGNsYXNzIFQpPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9p
bXBsPFIgKFQ6OiopKEJPT1NUX1BQX0VOVU1fUEFSQU1TKEJPT1NUX1BQX0NPVU5URVIsVCkpID4g
eyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLUAjaWZuZGVm
IEJPT1NUX1RUX05PX0VMTElQU0lTX0lOX0ZVTkNfVEVTVElORwotdGVtcGxhdGUgPGNsYXNzIFIs
IGNsYXNzIFQgQk9PU1RfUFBfQ09NTUFfSUYoQk9PU1RfUFBfQ09VTlRFUikgQk9PU1RfUFBfRU5V
TV9QQVJBTVMoQk9PU1RfUFBfQ09VTlRFUixjbGFzcyBUKT4KLXN0cnVjdCBpc19tZW1fZnVuX3Bv
aW50ZXJfaW1wbDxSIChUOjoqKShCT09TVF9QUF9FTlVNX1BBUkFNUyhCT09TVF9QUF9DT1VOVEVS
LFQpIC4uLikgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9
OwotQCNlbmRpZgotCi1AI2lmICFkZWZpbmVkKEJPT1NUX1RUX05PX0NWX0ZVTkNfVEVTVCkKLXRl
bXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUIEJPT1NUX1BQX0NPTU1BX0lGKEJPT1NUX1BQX0NPVU5U
RVIpIEJPT1NUX1BQX0VOVU1fUEFSQU1TKEJPT1NUX1BQX0NPVU5URVIsY2xhc3MgVCk+Ci1zdHJ1
Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoQk9PU1RfUFBfRU5VTV9QQVJBTVMo
Qk9PU1RfUFBfQ09VTlRFUixUKSkgY29uc3QgPiB7IEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29s
LCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCBCT09TVF9Q
UF9DT01NQV9JRihCT09TVF9QUF9DT1VOVEVSKSBCT09TVF9QUF9FTlVNX1BBUkFNUyhCT09TVF9Q
UF9DT1VOVEVSLGNsYXNzIFQpPgotc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6
OiopKEJPT1NUX1BQX0VOVU1fUEFSQU1TKEJPT1NUX1BQX0NPVU5URVIsVCkpIHZvbGF0aWxlID4g
eyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsKLQotdGVtcGxh
dGUgPGNsYXNzIFIsIGNsYXNzIFQgQk9PU1RfUFBfQ09NTUFfSUYoQk9PU1RfUFBfQ09VTlRFUikg
Qk9PU1RfUFBfRU5VTV9QQVJBTVMoQk9PU1RfUFBfQ09VTlRFUixjbGFzcyBUKT4KLXN0cnVjdCBp
c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShCT09TVF9QUF9FTlVNX1BBUkFNUyhCT09T
VF9QUF9DT1VOVEVSLFQpKSBjb25zdCB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5U
KGJvb2wsIHZhbHVlID0gdHJ1ZSk7IH07Ci0KLUAjaWZuZGVmIEJPT1NUX1RUX05PX0VMTElQU0lT
X0lOX0ZVTkNfVEVTVElORwotdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgQk9PU1RfUFBfQ09N
TUFfSUYoQk9PU1RfUFBfQ09VTlRFUikgQk9PU1RfUFBfRU5VTV9QQVJBTVMoQk9PU1RfUFBfQ09V
TlRFUixjbGFzcyBUKT4KLXN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKShC
T09TVF9QUF9FTlVNX1BBUkFNUyhCT09TVF9QUF9DT1VOVEVSLFQpIC4uLikgY29uc3QgPiB7IEJP
T1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOyB9OwotCi10ZW1wbGF0ZSA8
Y2xhc3MgUiwgY2xhc3MgVCBCT09TVF9QUF9DT01NQV9JRihCT09TVF9QUF9DT1VOVEVSKSBCT09T
VF9QUF9FTlVNX1BBUkFNUyhCT09TVF9QUF9DT1VOVEVSLGNsYXNzIFQpPgotc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKEJPT1NUX1BQX0VOVU1fUEFSQU1TKEJPT1NUX1BQ
X0NPVU5URVIsVCkgLi4uKSB2b2xhdGlsZSA+IHsgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2ws
IHZhbHVlID0gdHJ1ZSk7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUIEJPT1NUX1BQ
X0NPTU1BX0lGKEJPT1NUX1BQX0NPVU5URVIpIEJPT1NUX1BQX0VOVU1fUEFSQU1TKEJPT1NUX1BQ
X0NPVU5URVIsY2xhc3MgVCk+Ci1zdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6
KikoQk9PU1RfUFBfRU5VTV9QQVJBTVMoQk9PU1RfUFBfQ09VTlRFUixUKSAuLi4pIGNvbnN0IHZv
bGF0aWxlID4geyBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsgfTsK
LUAjZW5kaWYKLUAjZW5kaWYKLQotI3VuZGVmIEJPT1NUX1BQX0NPVU5URVIKLSNlbmRpZiAvLyBC
T09TVF9QUF9JU19JVEVSQVRJTkcKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL21wX2RlZmVyLmhwcCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp
bC9tcF9kZWZlci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYmVlYjIxYmJh
YThhMjcwNDlmMjgxYTJmODY0NjkwZmE5YmYxZjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL21wX2RlZmVyLmhwcAorKysgL2Rldi9udWxsCkBAIC0x
LDU2ICswLDAgQEAKLSNpZm5kZWYgQk9PU1RfVFlQRV9UUkFJVFNfREVUQUlMX01QX0RFRkVSX0hQ
UF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UWVBFX1RSQUlUU19ERVRBSUxfTVBfREVGRVJfSFBQ
X0lOQ0xVREVECi0KLS8vCi0vLyAgQ29weXJpZ2h0IDIwMTUgUGV0ZXIgRGltb3YKLS8vCi0vLyAg
RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4w
LgotLy8gIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAot
Ly8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dAotLy8KLQotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2ludGVncmFsX2NvbnN0YW50LmhwcD4KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9jb25kaXRpb25hbC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdAotewotCi1u
YW1lc3BhY2UgdHlwZV90cmFpdHNfZGV0YWlsCi17Ci0KLS8vIG1wX3ZhbGlkCi0vLyBpbXBsZW1l
bnRhdGlvbiBieSBCcnVubyBEdXRyYSAoYnkgdGhlIG5hbWUgaXNfZXZhbHVhYmxlKQotCi10ZW1w
bGF0ZTx0ZW1wbGF0ZTxjbGFzcy4uLj4gY2xhc3MgRiwgY2xhc3MuLi4gVD4KLXN0cnVjdCBtcF92
YWxpZF9pbXBsCi17Ci0gICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MuLi4+IGNsYXNzIEcsIGNs
YXNzID0gRzxULi4uPj4KLSAgICBzdGF0aWMgYm9vc3Q6OnRydWVfdHlwZSBjaGVja19zKGludCk7
Ci0KLSAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcy4uLj4gY2xhc3M+Ci0gICAgc3RhdGljIGJv
b3N0OjpmYWxzZV90eXBlIGNoZWNrX3MoLi4uKTsKLQotICAgIHVzaW5nIHR5cGUgPSBkZWNsdHlw
ZShjaGVja19zPEY+KDApKTsKLX07Ci0KLXRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzLi4uPiBjbGFz
cyBGLCBjbGFzcy4uLiBUPgotdXNpbmcgbXBfdmFsaWQgPSB0eXBlbmFtZSBtcF92YWxpZF9pbXBs
PEYsIFQuLi4+Ojp0eXBlOwotCi0vLyBtcF9kZWZlcgotCi1zdHJ1Y3QgbXBfZW1wdHkKLXsKLX07
Ci0KLXRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzLi4uPiBjbGFzcyBGLCBjbGFzcy4uLiBUPiBzdHJ1
Y3QgbXBfZGVmZXJfaW1wbAotewotICAgIHVzaW5nIHR5cGUgPSBGPFQuLi4+OwotfTsKLQotdGVt
cGxhdGU8dGVtcGxhdGU8Y2xhc3MuLi4+IGNsYXNzIEYsIGNsYXNzLi4uIFQ+IHVzaW5nIG1wX2Rl
ZmVyID0gdHlwZW5hbWUgYm9vc3Q6OmNvbmRpdGlvbmFsPG1wX3ZhbGlkPEYsIFQuLi4+Ojp2YWx1
ZSwgbXBfZGVmZXJfaW1wbDxGLCBULi4uPiwgbXBfZW1wdHk+Ojp0eXBlOwotCi19IC8vIG5hbWVz
cGFjZSB0eXBlX3RyYWl0c19kZXRhaWwKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlm
IC8vICNpZm5kZWYgQk9PU1RfVFlQRV9UUkFJVFNfREVUQUlMX01QX0RFRkVSX0hQUF9JTkNMVURF
RApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL3llc19ub190eXBlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC95ZXNfbm9fdHlwZS5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ODM3MzAyMjBlZTAyNGI4OTMzZDUxMzEw
NzlhYzgwZmIyY2NmZTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFp
dHMvZGV0YWlsL3llc19ub190eXBlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAK
LQotLy8gIChDKSBDb3B5cmlnaHQgSm9obiBNYWRkb2NrIGFuZCBTdGV2ZSBDbGVhcnkgMjAwMC4K
LS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3Vt
ZW50YXRpb24uCi0vLwotLy8gIG1hY3JvcyBhbmQgaGVscGVycyBmb3Igd29ya2luZyB3aXRoIGlu
dGVncmFsLWNvbnN0YW50LWV4cHJlc3Npb25zLgotCi0jaWZuZGVmIEJPT1NUX1RUX0RFVEFJTF9Z
RVNfTk9fVFlQRV9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfREVUQUlMX1lFU19OT19U
WVBFX0hQUF9JTkNMVURFRAotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNlIHR5cGVfdHJh
aXRzIHsKLQotdHlwZWRlZiBjaGFyIHllc190eXBlOwotc3RydWN0IG5vX3R5cGUKLXsKLSAgIGNo
YXIgcGFkZGluZ1s4XTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHR5cGVfdHJhaXRzCi19IC8vIG5h
bWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfVFRfREVUQUlMX1lFU19OT19UWVBFX0hQ
UF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvdHlwZV90cmFpdHMvZXh0ZW50LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2V4dGVudC5ocHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDEyNDI1Nzg3OGJkMGExMzllYmNjNDYwMzQ0OGQ2ZmVjNWNhYmI1NWMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvZXh0ZW50LmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0KLS8vICAoQykgQ29weXJpZ2h0IEpvaG4g
TWFkZG9jayAyMDA1LiAgCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBh
cmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEu
MC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8g
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9u
IGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0KLSNpZm5kZWYgQk9PU1RfVFRfRVhURU5UX0hQ
UF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9FWFRFTlRfSFBQX0lOQ0xVREVECi0KLSNpbmNs
dWRlIDxjc3RkZGVmPiAvLyBzaXplX3QKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pbnRl
Z3JhbF9jb25zdGFudC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL3dvcmthcm91bmQuaHBw
PgotCi1uYW1lc3BhY2UgYm9vc3QgewotCi1uYW1lc3BhY2UgZGV0YWlsewotCi0jaWYgZGVmaW5l
ZCggX19DT0RFR0VBUkNfXyApCi0gICAgLy8gd3JhcCB0aGUgaW1wbCBhcyBtYWluIHRyYWl0IHBy
b3ZpZGVzIGFkZGl0aW9uYWwgTVBMIGxhbWJkYSBzdXBwb3J0Ci0gICAgdGVtcGxhdGUgPCB0eXBl
bmFtZSBULCBzdGQ6OnNpemVfdCBOID4KLSAgICBzdHJ1Y3QgZXh0ZW50X2ltcCB7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCB2YWx1ZSA9IF9fYXJyYXlfZXh0ZW50KFQsIE4pOwot
ICAgIH07Ci0KLSNlbHNlCi0KLXRlbXBsYXRlIDxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPgotc3Ry
dWN0IGV4dGVudF9pbXAKLXsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwg
dmFsdWUgPSAwKTsKLX07Ci0jaWYgIWRlZmluZWQoQk9PU1RfTk9fQVJSQVlfVFlQRV9TUEVDSUFM
SVpBVElPTlMpCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3QgUiwgc3RkOjpzaXplX3Qg
Tj4KLXN0cnVjdCBleHRlbnRfaW1wPFRbUl0sIE4+Ci17Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RB
TlQoc3RkOjpzaXplX3QsIHZhbHVlID0gKDo6Ym9vc3Q6OmRldGFpbDo6ZXh0ZW50X2ltcDxULCBO
LTE+Ojp2YWx1ZSkpOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IFIsIHN0
ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgZXh0ZW50X2ltcDxUIGNvbnN0W1JdLCBOPgotewotICAgQk9P
U1RfU1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCB2YWx1ZSA9ICg6OmJvb3N0OjpkZXRhaWw6
OmV4dGVudF9pbXA8VCwgTi0xPjo6dmFsdWUpKTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBz
dGQ6OnNpemVfdCBSLCBzdGQ6OnNpemVfdCBOPgotc3RydWN0IGV4dGVudF9pbXA8VCB2b2xhdGls
ZVtSXSwgTj4KLXsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgdmFsdWUg
PSAoOjpib29zdDo6ZGV0YWlsOjpleHRlbnRfaW1wPFQsIE4tMT46OnZhbHVlKSk7Ci19OwotCi10
ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3QgUiwgc3RkOjpzaXplX3QgTj4KLXN0cnVjdCBl
eHRlbnRfaW1wPFQgY29uc3Qgdm9sYXRpbGVbUl0sIE4+Ci17Ci0gICBCT09TVF9TVEFUSUNfQ09O
U1RBTlQoc3RkOjpzaXplX3QsIHZhbHVlID0gKDo6Ym9vc3Q6OmRldGFpbDo6ZXh0ZW50X2ltcDxU
LCBOLTE+Ojp2YWx1ZSkpOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IFI+
Ci1zdHJ1Y3QgZXh0ZW50X2ltcDxUW1JdLDA+Ci17Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQo
c3RkOjpzaXplX3QsIHZhbHVlID0gUik7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpz
aXplX3QgUj4KLXN0cnVjdCBleHRlbnRfaW1wPFQgY29uc3RbUl0sIDA+Ci17Ci0gICBCT09TVF9T
VEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHZhbHVlID0gUik7Ci19OwotCi10ZW1wbGF0ZSA8
Y2xhc3MgVCwgc3RkOjpzaXplX3QgUj4KLXN0cnVjdCBleHRlbnRfaW1wPFQgdm9sYXRpbGVbUl0s
IDA+Ci17Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHZhbHVlID0gUik7
Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3QgUj4KLXN0cnVjdCBleHRlbnRf
aW1wPFQgY29uc3Qgdm9sYXRpbGVbUl0sIDA+Ci17Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQo
c3RkOjpzaXplX3QsIHZhbHVlID0gUik7Ci19OwotCi0jaWYgIUJPT1NUX1dPUktBUk9VTkQoX19C
T1JMQU5EQ19fLCA8IDB4NjAwKSAmJiAhZGVmaW5lZChfX0lCTUNQUF9fKSAmJiAgIUJPT1NUX1dP
UktBUk9VTkQoX19ETUNfXywgQk9PU1RfVEVTVEVEX0FUKDB4ODQwKSkgJiYgIWRlZmluZWQoX19N
V0VSS1NfXykKLXRlbXBsYXRlIDxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPgotc3RydWN0IGV4dGVu
dF9pbXA8VFtdLCBOPgotewotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6ZV90LCB2
YWx1ZSA9ICg6OmJvb3N0OjpkZXRhaWw6OmV4dGVudF9pbXA8VCwgTi0xPjo6dmFsdWUpKTsKLX07
Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4KLXN0cnVjdCBleHRlbnRfaW1wPFQg
Y29uc3RbXSwgTj4KLXsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgdmFs
dWUgPSAoOjpib29zdDo6ZGV0YWlsOjpleHRlbnRfaW1wPFQsIE4tMT46OnZhbHVlKSk7Ci19Owot
dGVtcGxhdGUgPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgZXh0ZW50X2ltcDxUIHZv
bGF0aWxlW10sIE4+Ci17Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHZh
bHVlID0gKDo6Ym9vc3Q6OmRldGFpbDo6ZXh0ZW50X2ltcDxULCBOLTE+Ojp2YWx1ZSkpOwotfTsK
LXRlbXBsYXRlIDxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPgotc3RydWN0IGV4dGVudF9pbXA8VCBj
b25zdCB2b2xhdGlsZVtdLCBOPgotewotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHN0ZDo6c2l6
ZV90LCB2YWx1ZSA9ICg6OmJvb3N0OjpkZXRhaWw6OmV4dGVudF9pbXA8VCwgTi0xPjo6dmFsdWUp
KTsKLX07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBleHRlbnRfaW1wPFRbXSwgMD4KLXsK
LSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgdmFsdWUgPSAwKTsKLX07Ci10
ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBleHRlbnRfaW1wPFQgY29uc3RbXSwgMD4KLXsKLSAg
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgdmFsdWUgPSAwKTsKLX07Ci10ZW1w
bGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBleHRlbnRfaW1wPFQgdm9sYXRpbGVbXSwgMD4KLXsKLSAg
IEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgdmFsdWUgPSAwKTsKLX07Ci10ZW1w
bGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBleHRlbnRfaW1wPFQgY29uc3Qgdm9sYXRpbGVbXSwgMD4K
LXsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgdmFsdWUgPSAwKTsKLX07
Ci0jZW5kaWYKLSNlbmRpZgotCi0jZW5kaWYgIC8vIG5vbi1Db2RlR2VhciBpbXBsZW1lbnRhdGlv
bgotfSAgIC8vIDo6Ym9vc3Q6OmRldGFpbAotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXpl
X3QgTiA9IDA+Ci1zdHJ1Y3QgZXh0ZW50Ci0gICA6IHB1YmxpYyA6OmJvb3N0OjppbnRlZ3JhbF9j
b25zdGFudDxzdGQ6OnNpemVfdCwgOjpib29zdDo6ZGV0YWlsOjpleHRlbnRfaW1wPFQsTj46OnZh
bHVlPgotewotfTsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1RU
X0lTX01FTUJFUl9GVU5DVElPTl9QT0lOVEVSX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvZmxvYXRp
bmdfcG9pbnRfcHJvbW90aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2Zsb2F0aW5nX3BvaW50X3Byb21vdGlvbi5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5M2UxNGVmNGIyN2UzYjM3ZGVjMDdjN2I3MDhjY2Q2
YWM5ZWQ3ZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvZmxv
YXRpbmdfcG9pbnRfcHJvbW90aW9uLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAK
LS8vIENvcHlyaWdodCAyMDA1IEFsZXhhbmRlciBOYXNvbm92LgotLy8gRGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0vLyBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaWZuZGVmIEZJTEVfYm9vc3RfdHlwZV90cmFp
dHNfZmxvYXRpbmdfcG9pbnRfcHJvbW90aW9uX2hwcF9JTkNMVURFRAotI2RlZmluZSBGSUxFX2Jv
b3N0X3R5cGVfdHJhaXRzX2Zsb2F0aW5nX3BvaW50X3Byb21vdGlvbl9ocHBfSU5DTFVERUQKLQot
bmFtZXNwYWNlIGJvb3N0IHsKLQotICAgdGVtcGxhdGU8Y2xhc3MgVD4gc3RydWN0IGZsb2F0aW5n
X3BvaW50X3Byb21vdGlvbiB7IHR5cGVkZWYgVCB0eXBlOyB9OwotICAgdGVtcGxhdGU8PiBzdHJ1
Y3QgZmxvYXRpbmdfcG9pbnRfcHJvbW90aW9uPGZsb2F0PiB7IHR5cGVkZWYgZG91YmxlIHR5cGU7
IH07Ci0gICB0ZW1wbGF0ZTw+IHN0cnVjdCBmbG9hdGluZ19wb2ludF9wcm9tb3Rpb248ZmxvYXQg
Y29uc3Q+IHsgdHlwZWRlZiBkb3VibGUgY29uc3QgdHlwZTsgfTsKLSAgIHRlbXBsYXRlPD4gc3Ry
dWN0IGZsb2F0aW5nX3BvaW50X3Byb21vdGlvbjxmbG9hdCB2b2xhdGlsZT57IHR5cGVkZWYgZG91
YmxlIHZvbGF0aWxlIHR5cGU7IH07Ci0gICB0ZW1wbGF0ZTw+IHN0cnVjdCBmbG9hdGluZ19wb2lu
dF9wcm9tb3Rpb248ZmxvYXQgY29uc3Qgdm9sYXRpbGU+IHsgdHlwZWRlZiBkb3VibGUgY29uc3Qg
dm9sYXRpbGUgdHlwZTsgfTsKLQotfQotCi0jZW5kaWYgLy8gI2lmbmRlZiBGSUxFX2Jvb3N0X3R5
cGVfdHJhaXRzX2Zsb2F0aW5nX3BvaW50X3Byb21vdGlvbl9ocHBfSU5DTFVERUQKLQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFp
dHMvZnVuY3Rpb25fdHJhaXRzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2Z1bmN0aW9uX3RyYWl0cy5ocHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDI2ZDdlMDVjNWY0YmJlMDQ4ZTkyOWZjNjExYzRkN2U1N2JiZWJmYWQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvZnVuY3Rpb25fdHJh
aXRzLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3NCArMCwwIEBACi0KLS8vICBDb3B5cmlnaHQg
MjAwMCBKb2huIE1hZGRvY2sgKGpvaG5Aam9obm1hZGRvY2suY28udWspCi0vLyAgVXNlLCBtb2Rp
ZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdh
cmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJh
aXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0j
aWZuZGVmIEJPT1NUX1RUX0ZVTkNUSU9OX1RSQUlUU19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9P
U1RfVFRfRlVOQ1RJT05fVFJBSVRTX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Ym9vc3QvY29u
ZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19mdW5jdGlvbi5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvYWRkX3BvaW50ZXIuaHBwPgotCi1uYW1lc3BhY2Ug
Ym9vc3QgewotCi1uYW1lc3BhY2UgZGV0YWlsIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b24+IHN0cnVjdCBmdW5jdGlvbl90cmFpdHNfaGVscGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBS
Pgotc3RydWN0IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikodm9pZCk+Ci17Ci0gIEJPT1NU
X1NUQVRJQ19DT05TVEFOVCh1bnNpZ25lZCwgYXJpdHkgPSAwKTsKLSAgdHlwZWRlZiBSIHJlc3Vs
dF90eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVDE+Ci1zdHJ1Y3Qg
ZnVuY3Rpb25fdHJhaXRzX2hlbHBlcjxSICgqKShUMSk+Ci17Ci0gIEJPT1NUX1NUQVRJQ19DT05T
VEFOVCh1bnNpZ25lZCwgYXJpdHkgPSAxKTsKLSAgdHlwZWRlZiBSIHJlc3VsdF90eXBlOwotICB0
eXBlZGVmIFQxIGFyZzFfdHlwZTsKLSAgdHlwZWRlZiBUMSBhcmd1bWVudF90eXBlOwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgotc3RydWN0IGZ1
bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEsIFQyKT4KLXsKLSAgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKHVuc2lnbmVkLCBhcml0eSA9IDIpOwotICB0eXBlZGVmIFIgcmVzdWx0X3R5cGU7Ci0g
IHR5cGVkZWYgVDEgYXJnMV90eXBlOwotICB0eXBlZGVmIFQyIGFyZzJfdHlwZTsKLSAgdHlwZWRl
ZiBUMSBmaXJzdF9hcmd1bWVudF90eXBlOwotICB0eXBlZGVmIFQyIHNlY29uZF9hcmd1bWVudF90
eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQy
LCB0eXBlbmFtZSBUMz4KLXN0cnVjdCBmdW5jdGlvbl90cmFpdHNfaGVscGVyPFIgKCopKFQxLCBU
MiwgVDMpPgotewotICBCT09TVF9TVEFUSUNfQ09OU1RBTlQodW5zaWduZWQsIGFyaXR5ID0gMyk7
Ci0gIHR5cGVkZWYgUiByZXN1bHRfdHlwZTsKLSAgdHlwZWRlZiBUMSBhcmcxX3R5cGU7Ci0gIHR5
cGVkZWYgVDIgYXJnMl90eXBlOwotICB0eXBlZGVmIFQzIGFyZzNfdHlwZTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5
cGVuYW1lIFQ0Pgotc3RydWN0IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEsIFQyLCBU
MywgVDQpPgotewotICBCT09TVF9TVEFUSUNfQ09OU1RBTlQodW5zaWduZWQsIGFyaXR5ID0gNCk7
Ci0gIHR5cGVkZWYgUiByZXN1bHRfdHlwZTsKLSAgdHlwZWRlZiBUMSBhcmcxX3R5cGU7Ci0gIHR5
cGVkZWYgVDIgYXJnMl90eXBlOwotICB0eXBlZGVmIFQzIGFyZzNfdHlwZTsKLSAgdHlwZWRlZiBU
NCBhcmc0X3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwKLSAgICAgICAgIHR5cGVuYW1lIFQ1
Pgotc3RydWN0IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEsIFQyLCBUMywgVDQsIFQ1
KT4KLXsKLSAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHVuc2lnbmVkLCBhcml0eSA9IDUpOwotICB0
eXBlZGVmIFIgcmVzdWx0X3R5cGU7Ci0gIHR5cGVkZWYgVDEgYXJnMV90eXBlOwotICB0eXBlZGVm
IFQyIGFyZzJfdHlwZTsKLSAgdHlwZWRlZiBUMyBhcmczX3R5cGU7Ci0gIHR5cGVkZWYgVDQgYXJn
NF90eXBlOwotICB0eXBlZGVmIFQ1IGFyZzVfdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFIsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LAot
ICAgICAgICAgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2Pgotc3RydWN0IGZ1bmN0aW9uX3RyYWl0
c19oZWxwZXI8UiAoKikoVDEsIFQyLCBUMywgVDQsIFQ1LCBUNik+Ci17Ci0gIEJPT1NUX1NUQVRJ
Q19DT05TVEFOVCh1bnNpZ25lZCwgYXJpdHkgPSA2KTsKLSAgdHlwZWRlZiBSIHJlc3VsdF90eXBl
OwotICB0eXBlZGVmIFQxIGFyZzFfdHlwZTsKLSAgdHlwZWRlZiBUMiBhcmcyX3R5cGU7Ci0gIHR5
cGVkZWYgVDMgYXJnM190eXBlOwotICB0eXBlZGVmIFQ0IGFyZzRfdHlwZTsKLSAgdHlwZWRlZiBU
NSBhcmc1X3R5cGU7Ci0gIHR5cGVkZWYgVDYgYXJnNl90eXBlOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgUiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUg
VDQsCi0gICAgICAgICB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3Pgotc3Ry
dWN0IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwg
VDcpPgotewotICBCT09TVF9TVEFUSUNfQ09OU1RBTlQodW5zaWduZWQsIGFyaXR5ID0gNyk7Ci0g
IHR5cGVkZWYgUiByZXN1bHRfdHlwZTsKLSAgdHlwZWRlZiBUMSBhcmcxX3R5cGU7Ci0gIHR5cGVk
ZWYgVDIgYXJnMl90eXBlOwotICB0eXBlZGVmIFQzIGFyZzNfdHlwZTsKLSAgdHlwZWRlZiBUNCBh
cmc0X3R5cGU7Ci0gIHR5cGVkZWYgVDUgYXJnNV90eXBlOwotICB0eXBlZGVmIFQ2IGFyZzZfdHlw
ZTsKLSAgdHlwZWRlZiBUNyBhcmc3X3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0
eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwKLSAgICAg
ICAgIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4Pgot
c3RydWN0IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEsIFQyLCBUMywgVDQsIFQ1LCBU
NiwgVDcsIFQ4KT4KLXsKLSAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHVuc2lnbmVkLCBhcml0eSA9
IDgpOwotICB0eXBlZGVmIFIgcmVzdWx0X3R5cGU7Ci0gIHR5cGVkZWYgVDEgYXJnMV90eXBlOwot
ICB0eXBlZGVmIFQyIGFyZzJfdHlwZTsKLSAgdHlwZWRlZiBUMyBhcmczX3R5cGU7Ci0gIHR5cGVk
ZWYgVDQgYXJnNF90eXBlOwotICB0eXBlZGVmIFQ1IGFyZzVfdHlwZTsKLSAgdHlwZWRlZiBUNiBh
cmc2X3R5cGU7Ci0gIHR5cGVkZWYgVDcgYXJnN190eXBlOwotICB0eXBlZGVmIFQ4IGFyZzhfdHlw
ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwg
dHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LAotICAgICAgICAgdHlwZW5hbWUgVDUsIHR5cGVuYW1l
IFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5Pgotc3RydWN0IGZ1bmN0
aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBU
OSk+Ci17Ci0gIEJPT1NUX1NUQVRJQ19DT05TVEFOVCh1bnNpZ25lZCwgYXJpdHkgPSA5KTsKLSAg
dHlwZWRlZiBSIHJlc3VsdF90eXBlOwotICB0eXBlZGVmIFQxIGFyZzFfdHlwZTsKLSAgdHlwZWRl
ZiBUMiBhcmcyX3R5cGU7Ci0gIHR5cGVkZWYgVDMgYXJnM190eXBlOwotICB0eXBlZGVmIFQ0IGFy
ZzRfdHlwZTsKLSAgdHlwZWRlZiBUNSBhcmc1X3R5cGU7Ci0gIHR5cGVkZWYgVDYgYXJnNl90eXBl
OwotICB0eXBlZGVmIFQ3IGFyZzdfdHlwZTsKLSAgdHlwZWRlZiBUOCBhcmc4X3R5cGU7Ci0gIHR5
cGVkZWYgVDkgYXJnOV90eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsCi0gICAgICAgICB0eXBl
bmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUg
VDksCi0gICAgICAgICB0eXBlbmFtZSBUMTA+Ci1zdHJ1Y3QgZnVuY3Rpb25fdHJhaXRzX2hlbHBl
cjxSICgqKShUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTApPgotewotICBC
T09TVF9TVEFUSUNfQ09OU1RBTlQodW5zaWduZWQsIGFyaXR5ID0gMTApOwotICB0eXBlZGVmIFIg
cmVzdWx0X3R5cGU7Ci0gIHR5cGVkZWYgVDEgYXJnMV90eXBlOwotICB0eXBlZGVmIFQyIGFyZzJf
dHlwZTsKLSAgdHlwZWRlZiBUMyBhcmczX3R5cGU7Ci0gIHR5cGVkZWYgVDQgYXJnNF90eXBlOwot
ICB0eXBlZGVmIFQ1IGFyZzVfdHlwZTsKLSAgdHlwZWRlZiBUNiBhcmc2X3R5cGU7Ci0gIHR5cGVk
ZWYgVDcgYXJnN190eXBlOwotICB0eXBlZGVmIFQ4IGFyZzhfdHlwZTsKLSAgdHlwZWRlZiBUOSBh
cmc5X3R5cGU7Ci0gIHR5cGVkZWYgVDEwIGFyZzEwX3R5cGU7Ci19OwotCi19IC8vIGVuZCBuYW1l
c3BhY2UgZGV0YWlsCi0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPgotc3RydWN0IGZ1bmN0
aW9uX3RyYWl0cyA6IAotICBwdWJsaWMgYm9vc3Q6OmRldGFpbDo6ZnVuY3Rpb25fdHJhaXRzX2hl
bHBlcjx0eXBlbmFtZSBib29zdDo6YWRkX3BvaW50ZXI8RnVuY3Rpb24+Ojp0eXBlPgotewotfTsK
LQotfQotCi0jZW5kaWYgLy8gQk9PU1RfVFRfRlVOQ1RJT05fVFJBSVRTX0hQUF9JTkNMVURFRApk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlw
ZV90cmFpdHMvaGFzX2JpdF9hbmQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX2JpdF9hbmQuaHBwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhMTZjNzFhNDhkYjhjN2U4YjZhNmY1YzhmMTljNTY4YjZkNmU1MjYwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19iaXRfYW5kLmhw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IDIwMDkt
MjAxMSBGcmVkZXJpYyBCcm9uLgotLy8KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJp
YnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZl
cnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5
IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAg
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50
IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSEFT
X0JJVF9BTkRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0hBU19CSVRfQU5EX0hQUF9J
TkNMVURFRAotCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX05BTUUgaGFzX2JpdF9hbmQKLSNkZWZp
bmUgQk9PU1RfVFRfVFJBSVRfT1AgJgotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0g
ICAoXAotICAgICAgLyogTGhzPT1mdW5kYW1lbnRhbCBhbmQgUmhzPT1mdW5kYW1lbnRhbCBhbmQg
KExocyE9aW50ZWdyYWwgb3IgUmhzIT1pbnRlZ3JhbCkgKi9cCi0gICAgICAoXAotICAgICAgICAg
Ojpib29zdDo6aXNfZnVuZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAg
IDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAg
ICAoIFwKLSAgICAgICAgICAgICghICA6OmJvb3N0Ojppc19pbnRlZ3JhbDwgTGhzX25vcmVmID46
OnZhbHVlICkgfHwgXAotICAgICAgICAgICAgKCEgIDo6Ym9vc3Q6OmlzX2ludGVncmFsPCBSaHNf
bm9yZWYgPjo6dmFsdWUgKVwKLSAgICAgICAgICApXAotICAgICAgKXx8XAotICAgICAgLyogTGhz
PT1mdW5kYW1lbnRhbCBhbmQgUmhzPT1wb2ludGVyICovXAotICAgICAgKFwKLSAgICAgICAgIDo6
Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBMaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6
OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICApfHxcCi0gICAg
ICAvKiBSaHM9PWZ1bmRhbWVudGFsIGFuZCBMaHM9PXBvaW50ZXIgKi9cCi0gICAgICAoXAotICAg
ICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2ID46OnZhbHVlICYmIFwKLSAg
ICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgICl8
fFwKLSAgICAgIC8qIExocz09cG9pbnRlciBhbmQgUmhzPT1wb2ludGVyICovXAotICAgICAgKFwK
LSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0g
ICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICAp
XAotICAgICAgKQotCi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaGFzX2Jp
bmFyeV9vcGVyYXRvci5ocHA+Ci0KLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9OQU1FCi0jdW5kZWYg
Qk9PU1RfVFRfVFJBSVRfT1AKLSN1bmRlZiBCT09TVF9UVF9GT1JCSURERU5fSUYKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90
eXBlX3RyYWl0cy9oYXNfYml0X2FuZF9hc3NpZ24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX2JpdF9hbmRfYXNzaWduLmhwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFlMjVlMzE4ZjA2NTAyYzRkNTNhZjJjOTRi
NmU2ZTdiNmUyNmQ2OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0
cy9oYXNfYml0X2FuZF9hc3NpZ24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAot
Ly8gIChDKSBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWRlcmljIEJyb24uCi0vLwotLy8gIFVzZSwg
bW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNv
ZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUg
TElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNF
TlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBl
X3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4K
LQotI2lmbmRlZiBCT09TVF9UVF9IQVNfQklUX0FORF9BU1NJR05fSFBQX0lOQ0xVREVECi0jZGVm
aW5lIEJPT1NUX1RUX0hBU19CSVRfQU5EX0FTU0lHTl9IUFBfSU5DTFVERUQKLQotI2RlZmluZSBC
T09TVF9UVF9UUkFJVF9OQU1FIGhhc19iaXRfYW5kX2Fzc2lnbgotI2RlZmluZSBCT09TVF9UVF9U
UkFJVF9PUCAmPQotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0gICAoXAotICAgICAg
LyogTGhzPT1mdW5kYW1lbnRhbCBhbmQgUmhzPT1mdW5kYW1lbnRhbCBhbmQgKExocyE9aW50ZWdy
YWwgb3IgUmhzIT1pbnRlZ3JhbCkgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNf
ZnVuZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6Omlz
X2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICAoXAotICAgICAg
ICAgICAgKCEgIDo6Ym9vc3Q6OmlzX2ludGVncmFsPCBMaHNfbm9yZWYgPjo6dmFsdWUgKSB8fCBc
Ci0gICAgICAgICAgICAoISAgOjpib29zdDo6aXNfaW50ZWdyYWw8IFJoc19ub3JlZiA+Ojp2YWx1
ZSApXAotICAgICAgICAgIClcCi0gICAgICApfHxcCi0gICAgICAvKiBMaHM9PWZ1bmRhbWVudGFs
IGFuZCBSaHM9PXBvaW50ZXIgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNfZnVu
ZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3Bv
aW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgICl8fFwKLSAgICAgIC8qIFJocz09ZnVu
ZGFtZW50YWwgYW5kIExocz09cG9pbnRlciAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0
Ojppc19mdW5kYW1lbnRhbDwgUmhzX25vY3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29z
dDo6aXNfcG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlXAotICAgICAgKXx8XAotICAgICAgLyog
TGhzPT1wb2ludGVyIGFuZCBSaHM9PXBvaW50ZXIgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpi
b29zdDo6aXNfcG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9v
c3Q6OmlzX3BvaW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgICl8fFwKLSAgICAgIC8q
IExocz09ZnVuZGFtZW50YWwgYW5kIFJocz09ZnVuZGFtZW50YWwgYW5kIExocz09Y29uc3QgKi9c
Ci0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IExoc19ub2N2ID46
OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+
Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19jb25zdDwgTGhzX25vcmVmID46OnZh
bHVlXAotICAgICAgKVwKLSAgICAgICkKLQotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
ZGV0YWlsL2hhc19iaW5hcnlfb3BlcmF0b3IuaHBwPgotCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRf
TkFNRQotI3VuZGVmIEJPT1NUX1RUX1RSQUlUX09QCi0jdW5kZWYgQk9PU1RfVFRfRk9SQklEREVO
X0lGCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX2JpdF9vci5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfYml0X29yLmhwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU3NjkyOWZkYWFhYThiMjlhY2IwN2RlYzRhNjkz
ZGQwYzAwOTEwNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9o
YXNfYml0X29yLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8vICAoQykgQ29w
eXJpZ2h0IDIwMDktMjAxMSBGcmVkZXJpYyBCcm9uLgotLy8KLS8vICBVc2UsIG1vZGlmaWNhdGlv
biBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNl
bnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8w
LnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0
KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9y
IG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYg
Qk9PU1RfVFRfSEFTX0JJVF9PUl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSEFTX0JJ
VF9PUl9IUFBfSU5DTFVERUQKLQotI2RlZmluZSBCT09TVF9UVF9UUkFJVF9OQU1FIGhhc19iaXRf
b3IKLSNkZWZpbmUgQk9PU1RfVFRfVFJBSVRfT1AgfAotI2RlZmluZSBCT09TVF9UVF9GT1JCSURE
RU5fSUZcCi0gICAoXAotICAgICAgLyogTGhzPT1mdW5kYW1lbnRhbCBhbmQgUmhzPT1mdW5kYW1l
bnRhbCBhbmQgKExocyE9aW50ZWdyYWwgb3IgUmhzIT1pbnRlZ3JhbCkgKi9cCi0gICAgICAoXAot
ICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlICYmIFwK
LSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSAmJiBc
Ci0gICAgICAgICAoIFwKLSAgICAgICAgICAgICghICA6OmJvb3N0Ojppc19pbnRlZ3JhbDwgTGhz
X25vcmVmID46OnZhbHVlICkgfHwgXAotICAgICAgICAgICAgKCEgIDo6Ym9vc3Q6OmlzX2ludGVn
cmFsPCBSaHNfbm9yZWYgPjo6dmFsdWUgKVwKLSAgICAgICAgICApXAotICAgICAgKXx8XAotICAg
ICAgLyogTGhzPT1mdW5kYW1lbnRhbCBhbmQgUmhzPT1wb2ludGVyICovXAotICAgICAgKFwKLSAg
ICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBMaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0g
ICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICAp
fHxcCi0gICAgICAvKiBSaHM9PWZ1bmRhbWVudGFsIGFuZCBMaHM9PXBvaW50ZXIgKi9cCi0gICAg
ICAoXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2ID46OnZhbHVl
ICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZVwK
LSAgICAgICl8fFwKLSAgICAgIC8qIExocz09cG9pbnRlciBhbmQgUmhzPT1wb2ludGVyICovXAot
ICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1
ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVc
Ci0gICAgICApXAotICAgICAgKQotCi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9kZXRh
aWwvaGFzX2JpbmFyeV9vcGVyYXRvci5ocHA+Ci0KLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9OQU1F
Ci0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfT1AKLSN1bmRlZiBCT09TVF9UVF9GT1JCSURERU5fSUYK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC90eXBlX3RyYWl0cy9oYXNfYml0X29yX2Fzc2lnbi5ocHAgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfYml0X29yX2Fzc2ln
bi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MWMzOWM1MWI4MDMzOWUxMjcy
MjJlM2E4ODcyODdmYzI3MDRkZDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlw
ZV90cmFpdHMvaGFzX2JpdF9vcl9hc3NpZ24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAs
MCBAQAotLy8gIChDKSBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWRlcmljIEJyb24uCi0vLwotLy8g
IFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJv
b3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRh
dGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9IQVNfQklUX09SX0FTU0lHTl9IUFBfSU5DTFVERUQK
LSNkZWZpbmUgQk9PU1RfVFRfSEFTX0JJVF9PUl9BU1NJR05fSFBQX0lOQ0xVREVECi0KLSNkZWZp
bmUgQk9PU1RfVFRfVFJBSVRfTkFNRSBoYXNfYml0X29yX2Fzc2lnbgotI2RlZmluZSBCT09TVF9U
VF9UUkFJVF9PUCB8PQotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0gICAoXAotICAg
ICAgLyogTGhzPT1mdW5kYW1lbnRhbCBhbmQgUmhzPT1mdW5kYW1lbnRhbCBhbmQgKExocyE9aW50
ZWdyYWwgb3IgUmhzIT1pbnRlZ3JhbCkgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6
aXNfZnVuZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6
OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICAoIFwKLSAg
ICAgICAgICAgICghICA6OmJvb3N0Ojppc19pbnRlZ3JhbDwgTGhzX25vcmVmID46OnZhbHVlICkg
fHwgXAotICAgICAgICAgICAgKCEgIDo6Ym9vc3Q6OmlzX2ludGVncmFsPCBSaHNfbm9yZWYgPjo6
dmFsdWUgKVwKLSAgICAgICAgICApXAotICAgICAgKXx8XAotICAgICAgLyogTGhzPT1mdW5kYW1l
bnRhbCBhbmQgUmhzPT1wb2ludGVyICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6Omlz
X2Z1bmRhbWVudGFsPCBMaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojpp
c19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICApfHxcCi0gICAgICAvKiBSaHM9
PWZ1bmRhbWVudGFsIGFuZCBMaHM9PXBvaW50ZXIgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpi
b29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6
Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgICl8fFwKLSAgICAg
IC8qIExocz09cG9pbnRlciBhbmQgUmhzPT1wb2ludGVyICovXAotICAgICAgKFwKLSAgICAgICAg
IDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6
OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICApfHxcCi0gICAg
ICAvKiBMaHM9PWZ1bmRhbWVudGFsIGFuZCBSaHM9PWZ1bmRhbWVudGFsIGFuZCBMaHM9PWNvbnN0
ICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBMaHNfbm9j
diA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgUmhzX25v
Y3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfY29uc3Q8IExoc19ub3JlZiA+
Ojp2YWx1ZVwKLSAgICAgIClcCi0gICAgICApCi0KLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC9oYXNfYmluYXJ5X29wZXJhdG9yLmhwcD4KLQotI3VuZGVmIEJPT1NUX1RUX1RS
QUlUX05BTUUKLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9PUAotI3VuZGVmIEJPT1NUX1RUX0ZPUkJJ
RERFTl9JRgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19iaXRfeG9yLmhwcCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19iaXRfeG9yLmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUxNzNhYzExZDM3NjlkMGQ4MTdmNzJm
ODg2MWY5MTRhZTI0MDBhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3Ry
YWl0cy9oYXNfYml0X3hvci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vLyAg
KEMpIENvcHlyaWdodCAyMDA5LTIwMTEgRnJlZGVyaWMgQnJvbi4KLS8vCi0vLyAgVXNlLCBtb2Rp
ZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdh
cmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJh
aXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0j
aWZuZGVmIEJPT1NUX1RUX0hBU19CSVRfWE9SX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9U
VF9IQVNfQklUX1hPUl9IUFBfSU5DTFVERUQKLQotI2RlZmluZSBCT09TVF9UVF9UUkFJVF9OQU1F
IGhhc19iaXRfeG9yCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX09QIF4KLSNkZWZpbmUgQk9PU1Rf
VFRfRk9SQklEREVOX0lGXAotICAgKFwKLSAgICAgIC8qIExocz09ZnVuZGFtZW50YWwgYW5kIFJo
cz09ZnVuZGFtZW50YWwgYW5kIChMaHMhPWludGVncmFsIG9yIFJocyE9aW50ZWdyYWwpICovXAot
ICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBMaHNfbm9jdiA+Ojp2
YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgUmhzX25vY3YgPjo6
dmFsdWUgJiYgXAotICAgICAgICAgKCBcCi0gICAgICAgICAgICAoISAgOjpib29zdDo6aXNfaW50
ZWdyYWw8IExoc19ub3JlZiA+Ojp2YWx1ZSApIHx8IFwKLSAgICAgICAgICAgICghICA6OmJvb3N0
Ojppc19pbnRlZ3JhbDwgUmhzX25vcmVmID46OnZhbHVlIClcCi0gICAgICAgICApXAotICAgICAg
KXx8XAotICAgICAgLyogTGhzPT1mdW5kYW1lbnRhbCBhbmQgUmhzPT1wb2ludGVyICovXAotICAg
ICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBMaHNfbm9jdiA+Ojp2YWx1
ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVc
Ci0gICAgICApfHxcCi0gICAgICAvKiBSaHM9PWZ1bmRhbWVudGFsIGFuZCBMaHM9PXBvaW50ZXIg
Ki9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2
ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+
Ojp2YWx1ZVwKLSAgICAgICl8fFwKLSAgICAgIC8qIExocz09cG9pbnRlciBhbmQgUmhzPT1wb2lu
dGVyICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3Jl
ZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYg
Pjo6dmFsdWVcCi0gICAgICApXAotICAgICAgKQotCi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9kZXRhaWwvaGFzX2JpbmFyeV9vcGVyYXRvci5ocHA+Ci0KLSN1bmRlZiBCT09TVF9UVF9U
UkFJVF9OQU1FCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfT1AKLSN1bmRlZiBCT09TVF9UVF9GT1JC
SURERU5fSUYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfYml0X3hvcl9hc3NpZ24uaHBwIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX2Jp
dF94b3JfYXNzaWduLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg2NmI3YWM0
ODJiOWFkNGM0Y2JiNmI4OTA0MzM3MTJkNWYyZjI5Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC90eXBlX3RyYWl0cy9oYXNfYml0X3hvcl9hc3NpZ24uaHBwCisrKyAvZGV2L251bGwK
QEAgLTEsNTUgKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWRlcmljIEJy
b24uCi0vLwotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1Ympl
Y3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUg
YWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5i
b29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRp
bmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9IQVNfQklUX1hPUl9BU1NJR05f
SFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0hBU19CSVRfWE9SX0FTU0lHTl9IUFBfSU5D
TFVERUQKLQotI2RlZmluZSBCT09TVF9UVF9UUkFJVF9OQU1FIGhhc19iaXRfeG9yX2Fzc2lnbgot
I2RlZmluZSBCT09TVF9UVF9UUkFJVF9PUCBePQotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5f
SUZcCi0gICAoXAotICAgICAgLyogTGhzPT1mdW5kYW1lbnRhbCBhbmQgUmhzPT1mdW5kYW1lbnRh
bCBhbmQgKExocyE9aW50ZWdyYWwgb3IgUmhzIT1pbnRlZ3JhbCkgKi9cCi0gICAgICAoXAotICAg
ICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlICYmIFwKLSAg
ICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0g
ICAgICAgICAoIFwKLSAgICAgICAgICAgICghICA6OmJvb3N0Ojppc19pbnRlZ3JhbDwgTGhzX25v
cmVmID46OnZhbHVlICkgfHwgXAotICAgICAgICAgICAgKCEgIDo6Ym9vc3Q6OmlzX2ludGVncmFs
PCBSaHNfbm9yZWYgPjo6dmFsdWUgKVwKLSAgICAgICAgICApXAotICAgICAgKXx8XAotICAgICAg
LyogTGhzPT1mdW5kYW1lbnRhbCBhbmQgUmhzPT1wb2ludGVyICovXAotICAgICAgKFwKLSAgICAg
ICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBMaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAg
ICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICApfHxc
Ci0gICAgICAvKiBSaHM9PWZ1bmRhbWVudGFsIGFuZCBMaHM9PXBvaW50ZXIgKi9cCi0gICAgICAo
XAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2ID46OnZhbHVlICYm
IFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZVwKLSAg
ICAgICl8fFwKLSAgICAgIC8qIExocz09cG9pbnRlciBhbmQgUmhzPT1wb2ludGVyICovXAotICAg
ICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAm
JiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVcCi0g
ICAgICApfHxcCi0gICAgICAvKiBMaHM9PWZ1bmRhbWVudGFsIGFuZCBSaHM9PWZ1bmRhbWVudGFs
IGFuZCBMaHM9PWNvbnN0ICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRh
bWVudGFsPCBMaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19mdW5k
YW1lbnRhbDwgUmhzX25vY3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfY29u
c3Q8IExoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgIClcCi0gICAgICApCi0KLQotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9oYXNfYmluYXJ5X29wZXJhdG9yLmhwcD4KLQotI3Vu
ZGVmIEJPT1NUX1RUX1RSQUlUX05BTUUKLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9PUAotI3VuZGVm
IEJPT1NUX1RUX0ZPUkJJRERFTl9JRgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19jb21wbGVtZW50
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJh
aXRzL2hhc19jb21wbGVtZW50LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMy
M2UxMjkzNjhjZjhhMGQ4M2I1MDNjM2Q3Zjk2NTdiMmU5MjlhNS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfY29tcGxlbWVudC5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzMiArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCAyMDA5LTIwMTEgRnJlZGVyaWMg
QnJvbi4KLS8vCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3Vi
amVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNl
ZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1
ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX0hBU19DT01QTEVNRU5UX0hQ
UF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9IQVNfQ09NUExFTUVOVF9IUFBfSU5DTFVERUQK
LQotI2RlZmluZSBCT09TVF9UVF9UUkFJVF9OQU1FIGhhc19jb21wbGVtZW50Ci0jZGVmaW5lIEJP
T1NUX1RUX1RSQUlUX09QIH4KLSNkZWZpbmUgQk9PU1RfVFRfRk9SQklEREVOX0lGXAotICAgKFwK
LSAgICAgIC8qIHBvaW50ZXIgKi9cCi0gICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9y
ZWYgPjo6dmFsdWUgfHwgXAotICAgICAgLyogZnVuZGFtZW50YWwgbm9uIGludGVncmFsICovXAot
ICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9yZWYgPjo6
dmFsdWUgJiYgXAotICAgICAgICAgKCEgIDo6Ym9vc3Q6OmlzX2ludGVncmFsPCBSaHNfbm9yZWYg
Pjo6dmFsdWUgKVwKLSAgICAgIClcCi0gICApCi0KLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC9oYXNfcHJlZml4X29wZXJhdG9yLmhwcD4KLQotI3VuZGVmIEJPT1NUX1RUX1RS
QUlUX05BTUUKLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9PUAotI3VuZGVmIEJPT1NUX1RUX0ZPUkJJ
RERFTl9JRgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19kZXJlZmVyZW5jZS5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfZGVyZWZl
cmVuY2UuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTUxNGNkZjQxMWZmYTFi
MmI3MmY5N2MzMzZlMDVjNjY4YjAyOWIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2hhc19kZXJlZmVyZW5jZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMSAr
MCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCAyMDA5LTIwMTEgRnJlZGVyaWMgQnJvbi4KLS8vCi0v
LyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVu
dGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX0hBU19ERVJFRkVSRU5DRV9IUFBfSU5DTFVERUQK
LSNkZWZpbmUgQk9PU1RfVFRfSEFTX0RFUkVGRVJFTkNFX0hQUF9JTkNMVURFRAotCi0jZGVmaW5l
IEJPT1NUX1RUX1RSQUlUX05BTUUgaGFzX2RlcmVmZXJlbmNlCi0jZGVmaW5lIEJPT1NUX1RUX1RS
QUlUX09QICoKLSNkZWZpbmUgQk9PU1RfVFRfRk9SQklEREVOX0lGXAotICAgLyogdm9pZCogb3Ig
ZnVuZGFtZW50YWwgKi9cCi0gICAoXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3Bv
aW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc192b2lk
PCBSaHNfbm9wdHIgPjo6dmFsdWVcCi0gICAgICApIHx8IFwKLSAgICAgIDo6Ym9vc3Q6OmlzX2Z1
bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZVwKLSAgICkKLQotCi0jaW5jbHVkZSA8Ym9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL2hhc19wcmVmaXhfb3BlcmF0b3IuaHBwPgotCi0jdW5kZWYgQk9P
U1RfVFRfVFJBSVRfTkFNRQotI3VuZGVmIEJPT1NUX1RUX1RSQUlUX09QCi0jdW5kZWYgQk9PU1Rf
VFRfRk9SQklEREVOX0lGCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX2RpdmlkZXMuaHBwIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX2Rp
dmlkZXMuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjllOTA3ZjZhMzZhY2M1
NDQ5OTAzODc1NmJlOTRmMmUwMjQ3NDllLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2hhc19kaXZpZGVzLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAg
QEAKLS8vICAoQykgQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVkZXJpYyBCcm9uLgotLy8KLS8vICBV
c2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29z
dCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBm
aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcv
TElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMv
dHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRp
b24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSEFTX0RJVklERVNfSFBQX0lOQ0xVREVECi0jZGVmaW5l
IEJPT1NUX1RUX0hBU19ESVZJREVTX0hQUF9JTkNMVURFRAotCi0jZGVmaW5lIEJPT1NUX1RUX1RS
QUlUX05BTUUgaGFzX2RpdmlkZXMKLSNkZWZpbmUgQk9PU1RfVFRfVFJBSVRfT1AgLwotI2RlZmlu
ZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0gICAvKiBwb2ludGVyIHdpdGggcG9pbnRlciBvciBm
dW5kYW1lbnRhbCAqL1wKLSAgIChcCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNfcG9p
bnRlcjwgTGhzX25vcmVmID46OnZhbHVlICYmIFwKLSAgICAgICAgICggXAotICAgICAgICAgICAg
Ojpib29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2ID46OnZhbHVlIHx8IFwKLSAgICAgICAg
ICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgICAgIClc
Ci0gICAgICApfHxcCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhz
X25vcmVmID46OnZhbHVlICYmIFwKLSAgICAgICAgICggXAotICAgICAgICAgICAgOjpib29zdDo6
aXNfZnVuZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlIHx8IFwKLSAgICAgICAgICAgIDo6Ym9v
c3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgICAgICApXAotICAgICAg
KVwKLSAgICAgICkKLQotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2hhc19i
aW5hcnlfb3BlcmF0b3IuaHBwPgotCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfTkFNRQotI3VuZGVm
IEJPT1NUX1RUX1RSQUlUX09QCi0jdW5kZWYgQk9PU1RfVFRfRk9SQklEREVOX0lGCi0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
dHlwZV90cmFpdHMvaGFzX2RpdmlkZXNfYXNzaWduLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19kaXZpZGVzX2Fzc2lnbi5ocHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhOGUzYzFlNjNiYWMxNWFmOTU3NmNiYWFj
ZWE2ZmEyZTlmMGI5MWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFp
dHMvaGFzX2RpdmlkZXNfYXNzaWduLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAK
LS8vICAoQykgQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVkZXJpYyBCcm9uLgotLy8KLS8vICBVc2Us
IG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxl
IExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlw
ZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24u
Ci0KLSNpZm5kZWYgQk9PU1RfVFRfSEFTX0RJVklERVNfQVNTSUdOX0hQUF9JTkNMVURFRAotI2Rl
ZmluZSBCT09TVF9UVF9IQVNfRElWSURFU19BU1NJR05fSFBQX0lOQ0xVREVECi0KLSNkZWZpbmUg
Qk9PU1RfVFRfVFJBSVRfTkFNRSBoYXNfZGl2aWRlc19hc3NpZ24KLSNkZWZpbmUgQk9PU1RfVFRf
VFJBSVRfT1AgLz0KLSNkZWZpbmUgQk9PU1RfVFRfRk9SQklEREVOX0lGXAotICAgKFwKLSAgICAg
IC8qIExocz09ZnVuZGFtZW50YWwgYW5kIExocz09Y29uc3QgYW5kIFJocz09ZnVuZGFtZW50YWwg
Ki9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IExoc19ub2N2
ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2NvbnN0PCBMaHNfbm9yZWYgPjo6
dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2ID46
OnZhbHVlXAotICAgICAgKSB8fCBcCi0gICAgICAvKiBMaHM9PXBvaW50ZXIgYW5kIChSaHM9PWZ1
bmRhbWVudGFsIG9yIFJocz09cG9pbnRlcikgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29z
dDo6aXNfcG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlICYmIFwKLSAgICAgICAgICggXAotICAg
ICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2ID46OnZhbHVlIHx8IFwK
LSAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZVwKLSAg
ICAgICAgICApXAotICAgICAgKXx8XAotICAgICAgLyogUmhzPT1wb2ludGVyIGFuZCAoTGhzPT1m
dW5kYW1lbnRhbCBvciBMaHM9PXBvaW50ZXIpICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9v
c3Q6OmlzX3BvaW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICAoIFwKLSAg
ICAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBMaHNfbm9jdiA+Ojp2YWx1ZSB8fCBc
Ci0gICAgICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBMaHNfbm9yZWYgPjo6dmFsdWVcCi0g
ICAgICAgICAgKVwKLSAgICAgIClcCi0gICAgICApCi0KLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2RldGFpbC9oYXNfYmluYXJ5X29wZXJhdG9yLmhwcD4KLQotI3VuZGVmIEJPT1NUX1RU
X1RSQUlUX05BTUUKLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9PUAotI3VuZGVmIEJPT1NUX1RUX0ZP
UkJJRERFTl9JRgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19lcXVhbF90by5ocHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfZXF1YWxf
dG8uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODBhNTVkOGU1MTBiODM1ZjBh
MDVkMjA2NmM3ZTliNGVlZWE5YzU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5
cGVfdHJhaXRzL2hhc19lcXVhbF90by5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBA
Ci0vLyAgKEMpIENvcHlyaWdodCAyMDA5LTIwMTEgRnJlZGVyaWMgQnJvbi4KLS8vCi0vLyAgVXNl
LCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5
cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9u
LgotCi0jaWZuZGVmIEJPT1NUX1RUX0hBU19FUVVBTF9UT19IUFBfSU5DTFVERUQKLSNkZWZpbmUg
Qk9PU1RfVFRfSEFTX0VRVUFMX1RPX0hQUF9JTkNMVURFRAotCi0jZGVmaW5lIEJPT1NUX1RUX1RS
QUlUX05BTUUgaGFzX2VxdWFsX3RvCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX09QID09Ci0jZGVm
aW5lIEJPT1NUX1RUX0ZPUkJJRERFTl9JRlwKLSAgIChcCi0gICAgICAvKiBMaHM9PXBvaW50ZXIg
YW5kIFJocz09ZnVuZGFtZW50YWwgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNf
cG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1
bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZVwKLSAgICAgICkgfHwgXAotICAgICAgLyogUmhz
PT1wb2ludGVyIGFuZCBMaHM9PWZ1bmRhbWVudGFsICovXAotICAgICAgKFwKLSAgICAgICAgIDo6
Ym9vc3Q6OmlzX3BvaW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJv
b3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25vY3YgPjo6dmFsdWVcCi0gICAgICApIHx8IFwKLSAg
ICAgIC8qIExocz09cG9pbnRlciBhbmQgUmhzPT1wb2ludGVyIGFuZCBMaHMhPWJhc2UoUmhzKSBh
bmQgUmhzIT1iYXNlKExocykgYW5kIExocyE9dm9pZCogYW5kIFJocyE9dm9pZCogKi9cCi0gICAg
ICAoXAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlICYm
IFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZSAmJiBc
Ci0gICAgICAgICAoISBcCi0gICAgICAgICAgICAoXAotICAgICAgICAgICAgICAgOjpib29zdDo6
aXNfYmFzZV9vZjwgTGhzX25vcHRyLCBSaHNfbm9wdHIgPjo6dmFsdWUgfHwgXAotICAgICAgICAg
ICAgICAgOjpib29zdDo6aXNfYmFzZV9vZjwgUmhzX25vcHRyLCBMaHNfbm9wdHIgPjo6dmFsdWUg
fHwgXAotICAgICAgICAgICAgICAgOjpib29zdDo6aXNfc2FtZTwgTGhzX25vcHRyLCBSaHNfbm9w
dHIgPjo6dmFsdWUgfHwgXAotICAgICAgICAgICAgICAgOjpib29zdDo6aXNfdm9pZDwgTGhzX25v
cHRyID46OnZhbHVlIHx8IFwKLSAgICAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX3ZvaWQ8IFJoc19u
b3B0ciA+Ojp2YWx1ZVwKLSAgICAgICAgICAgIClcCi0gICAgICAgICApXAotICAgICAgKVwKLSAg
ICAgICkKLQotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2hhc19iaW5hcnlf
b3BlcmF0b3IuaHBwPgotCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfTkFNRQotI3VuZGVmIEJPT1NU
X1RUX1RSQUlUX09QCi0jdW5kZWYgQk9PU1RfVFRfRk9SQklEREVOX0lGCi0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90
cmFpdHMvaGFzX2dyZWF0ZXIuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX2dyZWF0ZXIuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzMmUwYTEyNDA0MGFjODYxMjNhNTVlODQyNDI4MjA2MDUxMzIyMjhiLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19ncmVhdGVyLmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IDIwMDktMjAx
MSBGcmVkZXJpYyBCcm9uLgotLy8KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0
aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNp
b24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0
Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2Vl
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZl
cnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSEFTX0dS
RUFURVJfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0hBU19HUkVBVEVSX0hQUF9JTkNM
VURFRAotCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX05BTUUgaGFzX2dyZWF0ZXIKLSNkZWZpbmUg
Qk9PU1RfVFRfVFJBSVRfT1AgPgotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0gICAo
XAotICAgICAgLyogTGhzPT1wb2ludGVyIGFuZCBSaHM9PWZ1bmRhbWVudGFsICovXAotICAgICAg
KFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAmJiBc
Ci0gICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgUmhzX25vY3YgPjo6dmFsdWVcCi0g
ICAgICApIHx8IFwKLSAgICAgIC8qIFJocz09cG9pbnRlciBhbmQgTGhzPT1mdW5kYW1lbnRhbCAq
L1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6
dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IExoc19ub2N2ID46
OnZhbHVlXAotICAgICAgKSB8fCBcCi0gICAgICAvKiBMaHM9PXBvaW50ZXIgYW5kIFJocz09cG9p
bnRlciBhbmQgTGhzIT1iYXNlKFJocykgYW5kIFJocyE9YmFzZShMaHMpIGFuZCBMaHMhPXZvaWQq
IGFuZCBSaHMhPXZvaWQqICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50
ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVy
PCBSaHNfbm9yZWYgPjo6dmFsdWUgJiYgXAotICAgICAgICAgKCEgXAotICAgICAgICAgICAgKCBc
Ci0gICAgICAgICAgICAgICA6OmJvb3N0Ojppc19iYXNlX29mPCBMaHNfbm9wdHIsIFJoc19ub3B0
ciA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAgICAgICA6OmJvb3N0Ojppc19iYXNlX29mPCBSaHNf
bm9wdHIsIExoc19ub3B0ciA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAgICAgICA6OmJvb3N0Ojpp
c19zYW1lPCBMaHNfbm9wdHIsIFJoc19ub3B0ciA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAgICAg
ICA6OmJvb3N0Ojppc192b2lkPCBMaHNfbm9wdHIgPjo6dmFsdWUgfHwgXAotICAgICAgICAgICAg
ICAgOjpib29zdDo6aXNfdm9pZDwgUmhzX25vcHRyID46OnZhbHVlXAotICAgICAgICAgICAgKVwK
LSAgICAgICAgIClcCi0gICAgICApXAotICAgKQotCi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9kZXRhaWwvaGFzX2JpbmFyeV9vcGVyYXRvci5ocHA+Ci0KLSN1bmRlZiBCT09TVF9UVF9U
UkFJVF9OQU1FCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfT1AKLSN1bmRlZiBCT09TVF9UVF9GT1JC
SURERU5fSUYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfZ3JlYXRlcl9lcXVhbC5ocHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfZ3Jl
YXRlcl9lcXVhbC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MzNhNmJlYjhm
ZjM3OTFmOWY0ZGFmNmYxZTJiYzYxYjc1NDY1YzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvdHlwZV90cmFpdHMvaGFzX2dyZWF0ZXJfZXF1YWwuaHBwCisrKyAvZGV2L251bGwKQEAg
LTEsNDkgKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWRlcmljIEJyb24u
Ci0vLwotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3Qg
dG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNj
b21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29z
dC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcg
ZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9IQVNfR1JFQVRFUl9FUVVBTF9IUFBf
SU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSEFTX0dSRUFURVJfRVFVQUxfSFBQX0lOQ0xVREVE
Ci0KLSNkZWZpbmUgQk9PU1RfVFRfVFJBSVRfTkFNRSBoYXNfZ3JlYXRlcl9lcXVhbAotI2RlZmlu
ZSBCT09TVF9UVF9UUkFJVF9PUCA+PQotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0g
ICAoXAotICAgICAgLyogTGhzPT1wb2ludGVyIGFuZCBSaHM9PWZ1bmRhbWVudGFsICovXAotICAg
ICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAm
JiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgUmhzX25vY3YgPjo6dmFsdWVc
Ci0gICAgICApIHx8IFwKLSAgICAgIC8qIFJocz09cG9pbnRlciBhbmQgTGhzPT1mdW5kYW1lbnRh
bCAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYg
Pjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IExoc19ub2N2
ID46OnZhbHVlXAotICAgICAgKSB8fCBcCi0gICAgICAvKiBMaHM9PXBvaW50ZXIgYW5kIFJocz09
cG9pbnRlciBhbmQgTGhzIT1iYXNlKFJocykgYW5kIFJocyE9YmFzZShMaHMpIGFuZCBMaHMhPXZv
aWQqIGFuZCBSaHMhPXZvaWQqICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3Bv
aW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2lu
dGVyPCBSaHNfbm9yZWYgPjo6dmFsdWUgJiYgXAotICAgICAgICAgKCEgXAotICAgICAgICAgICAg
KCBcCi0gICAgICAgICAgICAgICA6OmJvb3N0Ojppc19iYXNlX29mPCBMaHNfbm9wdHIsIFJoc19u
b3B0ciA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAgICAgICA6OmJvb3N0Ojppc19iYXNlX29mPCBS
aHNfbm9wdHIsIExoc19ub3B0ciA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAgICAgICA6OmJvb3N0
Ojppc19zYW1lPCBMaHNfbm9wdHIsIFJoc19ub3B0ciA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAg
ICAgICA6OmJvb3N0Ojppc192b2lkPCBMaHNfbm9wdHIgPjo6dmFsdWUgfHwgXAotICAgICAgICAg
ICAgICAgOjpib29zdDo6aXNfdm9pZDwgUmhzX25vcHRyID46OnZhbHVlXAotICAgICAgICAgICAg
KVwKLSAgICAgICAgIClcCi0gICAgICApXAotICAgKQotCi0KLSNpbmNsdWRlIDxib29zdC90eXBl
X3RyYWl0cy9kZXRhaWwvaGFzX2JpbmFyeV9vcGVyYXRvci5ocHA+Ci0KLSN1bmRlZiBCT09TVF9U
VF9UUkFJVF9OQU1FCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfT1AKLSN1bmRlZiBCT09TVF9UVF9G
T1JCSURERU5fSUYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbGVmdF9zaGlmdC5ocHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbGVm
dF9zaGlmdC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NWMxMmE4MGE2NDFk
Y2UyMTYyYjBmNzc4M2NlM2U0YTYxNzAxMTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvdHlwZV90cmFpdHMvaGFzX2xlZnRfc2hpZnQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDkg
KzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWRlcmljIEJyb24uCi0vLwot
Ly8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55
aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1l
bnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9IQVNfTEVGVF9TSElGVF9IUFBfSU5DTFVERUQK
LSNkZWZpbmUgQk9PU1RfVFRfSEFTX0xFRlRfU0hJRlRfSFBQX0lOQ0xVREVECi0KLSNkZWZpbmUg
Qk9PU1RfVFRfVFJBSVRfTkFNRSBoYXNfbGVmdF9zaGlmdAotI2RlZmluZSBCT09TVF9UVF9UUkFJ
VF9PUCA8PAotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0gICAoXAotICAgICAgLyog
TGhzPT1mdW5kYW1lbnRhbCBhbmQgUmhzPT1mdW5kYW1lbnRhbCBhbmQgKExocyE9aW50ZWdyYWwg
b3IgUmhzIT1pbnRlZ3JhbCkgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNfZnVu
ZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1
bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICAoIFwKLSAgICAgICAg
ICAgICghICA6OmJvb3N0Ojppc19pbnRlZ3JhbDwgTGhzX25vcmVmID46OnZhbHVlICkgfHwgXAot
ICAgICAgICAgICAgKCEgIDo6Ym9vc3Q6OmlzX2ludGVncmFsPCBSaHNfbm9yZWYgPjo6dmFsdWUg
KVwKLSAgICAgICAgIClcCi0gICAgICApfHxcCi0gICAgICAvKiBMaHM9PWZ1bmRhbWVudGFsIGFu
ZCBSaHM9PXBvaW50ZXIgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFt
ZW50YWw8IExoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50
ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgICl8fFwKLSAgICAgIC8qIFJocz09ZnVuZGFt
ZW50YWwgYW5kIExocz09cG9pbnRlciAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojpp
c19mdW5kYW1lbnRhbDwgUmhzX25vY3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6
aXNfcG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlXAotICAgICAgKXx8XAotICAgICAgLyogTGhz
PT1wb2ludGVyIGFuZCBSaHM9PXBvaW50ZXIgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29z
dDo6aXNfcG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6
OmlzX3BvaW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgIClcCi0gICAgICApCi0KLQot
I2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9oYXNfYmluYXJ5X29wZXJhdG9yLmhw
cD4KLQotI3VuZGVmIEJPT1NUX1RUX1RSQUlUX05BTUUKLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9P
UAotI3VuZGVmIEJPT1NUX1RUX0ZPUkJJRERFTl9JRgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19s
ZWZ0X3NoaWZ0X2Fzc2lnbi5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbGVmdF9zaGlmdF9hc3NpZ24uaHBwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA3NGUwZGY5NTgwNjYxMTY4MGZkZWFiMDI5OTA3N2Y4Mjk1MDJh
MzE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19sZWZ0
X3NoaWZ0X2Fzc2lnbi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vLyAgKEMp
IENvcHlyaWdodCAyMDA5LTIwMTEgRnJlZGVyaWMgQnJvbi4KLS8vCi0vLyAgVXNlLCBtb2RpZmlj
YXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUg
TGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNF
XzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRz
IGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZu
ZGVmIEJPT1NUX1RUX0hBU19MRUZUX1NISUZUX0FTU0lHTl9IUFBfSU5DTFVERUQKLSNkZWZpbmUg
Qk9PU1RfVFRfSEFTX0xFRlRfU0hJRlRfQVNTSUdOX0hQUF9JTkNMVURFRAotCi0jZGVmaW5lIEJP
T1NUX1RUX1RSQUlUX05BTUUgaGFzX2xlZnRfc2hpZnRfYXNzaWduCi0jZGVmaW5lIEJPT1NUX1RU
X1RSQUlUX09QIDw8PQotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0gICAoXAotICAg
ICAgLyogTGhzPT1mdW5kYW1lbnRhbCBhbmQgUmhzPT1mdW5kYW1lbnRhbCBhbmQgKExocyE9aW50
ZWdyYWwgb3IgUmhzIT1pbnRlZ3JhbCkgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6
aXNfZnVuZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6
OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICAoIFwKLSAg
ICAgICAgICAgICghICA6OmJvb3N0Ojppc19pbnRlZ3JhbDwgTGhzX25vcmVmID46OnZhbHVlICkg
fHwgXAotICAgICAgICAgICAgKCEgIDo6Ym9vc3Q6OmlzX2ludGVncmFsPCBSaHNfbm9yZWYgPjo6
dmFsdWUgKVwKLSAgICAgICAgIClcCi0gICAgICApfHxcCi0gICAgICAvKiBMaHM9PWZ1bmRhbWVu
dGFsIGFuZCBSaHM9PXBvaW50ZXIgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNf
ZnVuZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6Omlz
X3BvaW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgICl8fFwKLSAgICAgIC8qIFJocz09
ZnVuZGFtZW50YWwgYW5kIExocz09cG9pbnRlciAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJv
b3N0Ojppc19mdW5kYW1lbnRhbDwgUmhzX25vY3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpi
b29zdDo6aXNfcG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlXAotICAgICAgKXx8XAotICAgICAg
LyogTGhzPT1wb2ludGVyIGFuZCBSaHM9PXBvaW50ZXIgKi9cCi0gICAgICAoXAotICAgICAgICAg
Ojpib29zdDo6aXNfcG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6
Ym9vc3Q6OmlzX3BvaW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgICl8fFwKLSAgICAg
IC8qIExocz09ZnVuZGFtZW50YWwgYW5kIFJocz09ZnVuZGFtZW50YWwgYW5kIExocz09Y29uc3Qg
Ki9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IExoc19ub2N2
ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9j
diA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19jb25zdDwgTGhzX25vcmVmID46
OnZhbHVlXAotICAgICAgKVwKLSAgICAgICkKLQotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvZGV0YWlsL2hhc19iaW5hcnlfb3BlcmF0b3IuaHBwPgotCi0jdW5kZWYgQk9PU1RfVFRfVFJB
SVRfTkFNRQotI3VuZGVmIEJPT1NUX1RUX1RSQUlUX09QCi0jdW5kZWYgQk9PU1RfVFRfRk9SQklE
REVOX0lGCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX2xlc3MuaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX2xlc3MuaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWVmY2QyMmRkY2M0OTczMjM0YjEyY2FjZjgyZDk3
YjcwNDBlZWI1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hh
c19sZXNzLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8vICAoQykgQ29weXJp
Z2h0IDIwMDktMjAxMSBGcmVkZXJpYyBCcm9uLgotLy8KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBh
bmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNl
LAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4K
LS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1v
c3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9P
U1RfVFRfSEFTX0xFU1NfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0hBU19MRVNTX0hQ
UF9JTkNMVURFRAotCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX05BTUUgaGFzX2xlc3MKLSNkZWZp
bmUgQk9PU1RfVFRfVFJBSVRfT1AgPAotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0g
ICAoXAotICAgICAgLyogTGhzPT1wb2ludGVyIGFuZCBSaHM9PWZ1bmRhbWVudGFsICovXAotICAg
ICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAm
JiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgUmhzX25vY3YgPjo6dmFsdWVc
Ci0gICAgICApIHx8IFwKLSAgICAgIC8qIFJocz09cG9pbnRlciBhbmQgTGhzPT1mdW5kYW1lbnRh
bCAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYg
Pjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IExoc19ub2N2
ID46OnZhbHVlXAotICAgICAgKSB8fCBcCi0gICAgICAvKiBMaHM9PXBvaW50ZXIgYW5kIFJocz09
cG9pbnRlciBhbmQgTGhzIT1iYXNlKFJocykgYW5kIFJocyE9YmFzZShMaHMpIGFuZCBMaHMhPXZv
aWQqIGFuZCBSaHMhPXZvaWQqICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3Bv
aW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2lu
dGVyPCBSaHNfbm9yZWYgPjo6dmFsdWUgJiYgXAotICAgICAgICAgKCEgXAotICAgICAgICAgICAg
KCBcCi0gICAgICAgICAgICAgICA6OmJvb3N0Ojppc19iYXNlX29mPCBMaHNfbm9wdHIsIFJoc19u
b3B0ciA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAgICAgICA6OmJvb3N0Ojppc19iYXNlX29mPCBS
aHNfbm9wdHIsIExoc19ub3B0ciA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAgICAgICA6OmJvb3N0
Ojppc19zYW1lPCBMaHNfbm9wdHIsIFJoc19ub3B0ciA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAg
ICAgICA6OmJvb3N0Ojppc192b2lkPCBMaHNfbm9wdHIgPjo6dmFsdWUgfHwgXAotICAgICAgICAg
ICAgICAgOjpib29zdDo6aXNfdm9pZDwgUmhzX25vcHRyID46OnZhbHVlXAotICAgICAgICAgICAg
KVwKLSAgICAgICAgIClcCi0gICAgICApXAotICAgICAgKQotCi0KLSNpbmNsdWRlIDxib29zdC90
eXBlX3RyYWl0cy9kZXRhaWwvaGFzX2JpbmFyeV9vcGVyYXRvci5ocHA+Ci0KLSN1bmRlZiBCT09T
VF9UVF9UUkFJVF9OQU1FCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfT1AKLSN1bmRlZiBCT09TVF9U
VF9GT1JCSURERU5fSUYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbGVzc19lcXVhbC5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNf
bGVzc19lcXVhbC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MjViYmQ0MjFi
NjYwOWU2OTUzNWI3MTgzZWFhZjZhYzg2YjhlZTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvdHlwZV90cmFpdHMvaGFzX2xlc3NfZXF1YWwuaHBwCisrKyAvZGV2L251bGwKQEAgLTEs
NDkgKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWRlcmljIEJyb24uCi0v
LwotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8g
dGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21w
YW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5v
cmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9j
dW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9IQVNfTEVTU19FUVVBTF9IUFBfSU5DTFVE
RUQKLSNkZWZpbmUgQk9PU1RfVFRfSEFTX0xFU1NfRVFVQUxfSFBQX0lOQ0xVREVECi0KLSNkZWZp
bmUgQk9PU1RfVFRfVFJBSVRfTkFNRSBoYXNfbGVzc19lcXVhbAotI2RlZmluZSBCT09TVF9UVF9U
UkFJVF9PUCA8PQotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0gICAoXAotICAgICAg
LyogTGhzPT1wb2ludGVyIGFuZCBSaHM9PWZ1bmRhbWVudGFsICovXAotICAgICAgKFwKLSAgICAg
ICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAg
ICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgUmhzX25vY3YgPjo6dmFsdWVcCi0gICAgICApIHx8
IFwKLSAgICAgIC8qIFJocz09cG9pbnRlciBhbmQgTGhzPT1mdW5kYW1lbnRhbCAqL1wKLSAgICAg
IChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWUgJiYg
XAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlXAot
ICAgICAgKSB8fCBcCi0gICAgICAvKiBMaHM9PXBvaW50ZXIgYW5kIFJocz09cG9pbnRlciBhbmQg
TGhzIT1iYXNlKFJocykgYW5kIFJocyE9YmFzZShMaHMpIGFuZCBMaHMhPXZvaWQqIGFuZCBSaHMh
PXZvaWQqICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19u
b3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9y
ZWYgPjo6dmFsdWUgJiYgXAotICAgICAgICAgKCEgXAotICAgICAgICAgICAgKCBcCi0gICAgICAg
ICAgICAgICA6OmJvb3N0Ojppc19iYXNlX29mPCBMaHNfbm9wdHIsIFJoc19ub3B0ciA+Ojp2YWx1
ZSB8fCBcCi0gICAgICAgICAgICAgICA6OmJvb3N0Ojppc19iYXNlX29mPCBSaHNfbm9wdHIsIExo
c19ub3B0ciA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAgICAgICA6OmJvb3N0Ojppc19zYW1lPCBM
aHNfbm9wdHIsIFJoc19ub3B0ciA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAgICAgICA6OmJvb3N0
Ojppc192b2lkPCBMaHNfbm9wdHIgPjo6dmFsdWUgfHwgXAotICAgICAgICAgICAgICAgOjpib29z
dDo6aXNfdm9pZDwgUmhzX25vcHRyID46OnZhbHVlXAotICAgICAgICAgICAgKVwKLSAgICAgICAg
IClcCi0gICAgICApXAotICAgICAgKQotCi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9k
ZXRhaWwvaGFzX2JpbmFyeV9vcGVyYXRvci5ocHA+Ci0KLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9O
QU1FCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfT1AKLSN1bmRlZiBCT09TVF9UVF9GT1JCSURERU5f
SUYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbG9naWNhbF9hbmQuaHBwIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX2xvZ2ljYWxfYW5k
LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JiMTczM2Q1NGVjOGNkYzQyY2Q1
ZGZmMTA1ZDk2ZGRhM2E1NzM4My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBl
X3RyYWl0cy9oYXNfbG9naWNhbF9hbmQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBA
QAotLy8gIChDKSBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWRlcmljIEJyb24uCi0vLwotLy8gIFVz
ZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZp
bGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9M
SUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90
eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlv
bi4KLQotI2lmbmRlZiBCT09TVF9UVF9IQVNfTE9HSUNBTF9BTkRfSFBQX0lOQ0xVREVECi0jZGVm
aW5lIEJPT1NUX1RUX0hBU19MT0dJQ0FMX0FORF9IUFBfSU5DTFVERUQKLQotI2RlZmluZSBCT09T
VF9UVF9UUkFJVF9OQU1FIGhhc19sb2dpY2FsX2FuZAotI2RlZmluZSBCT09TVF9UVF9UUkFJVF9P
UCAmJgotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0gICAvKiBwb2ludGVyIHdpdGgg
ZnVuZGFtZW50YWwgbm9uIGNvbnZlcnRpYmxlIHRvIGJvb2wgKi9cCi0gICAoXAotICAgICAgKFwK
LSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0g
ICAgICAgICAoIFwKLSAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9j
diA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICAgICAoISAgOjpib29zdDo6aXNfY29udmVydGlibGU8
IFJoc19ub2N2LCBib29sID46OnZhbHVlIClcCi0gICAgICAgICAgKVwKLSAgICAgICl8fFwKLSAg
ICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWUg
JiYgXAotICAgICAgICAgKCBcCi0gICAgICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwg
TGhzX25vY3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAgICAgKCEgIDo6Ym9vc3Q6OmlzX2NvbnZl
cnRpYmxlPCBMaHNfbm9jdiwgYm9vbCA+Ojp2YWx1ZSApXAotICAgICAgICAgKVwKLSAgICAgIClc
Ci0gICAgICApCi0KLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9oYXNfYmlu
YXJ5X29wZXJhdG9yLmhwcD4KLQotI3VuZGVmIEJPT1NUX1RUX1RSQUlUX05BTUUKLSN1bmRlZiBC
T09TVF9UVF9UUkFJVF9PUAotI3VuZGVmIEJPT1NUX1RUX0ZPUkJJRERFTl9JRgotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5
cGVfdHJhaXRzL2hhc19sb2dpY2FsX25vdC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbG9naWNhbF9ub3QuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzY4NThlMWVjMTJmOTlhNWZjOTFkOTIwZGU3MTQ4NGY5
ZGE3MzAwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19s
b2dpY2FsX25vdC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vLyAgKEMpIENv
cHlyaWdodCAyMDA5LTIwMTEgRnJlZGVyaWMgQnJvbi4KLS8vCi0vLyAgVXNlLCBtb2RpZmljYXRp
b24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZv
ciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVm
IEJPT1NUX1RUX0hBU19MT0dJQ0FMX05PVF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRf
SEFTX0xPR0lDQUxfTk9UX0hQUF9JTkNMVURFRAotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYg
KF9fR05VQ19fKjEwMDAwICsgX19HTlVDX01JTk9SX18qMTAwICsgX19HTlVDX1BBVENITEVWRUxf
XyA+IDQwODAwKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIEdDQyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhbHVlIgotI2VuZGlmCi0KLSNkZWZpbmUgQk9PU1Rf
VFRfVFJBSVRfTkFNRSBoYXNfbG9naWNhbF9ub3QKLSNkZWZpbmUgQk9PU1RfVFRfVFJBSVRfT1Ag
IQotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0gICBmYWxzZQotCi0jaW5jbHVkZSA8
Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2hhc19wcmVmaXhfb3BlcmF0b3IuaHBwPgotCi0jdW5k
ZWYgQk9PU1RfVFRfVFJBSVRfTkFNRQotI3VuZGVmIEJPT1NUX1RUX1RSQUlUX09QCi0jdW5kZWYg
Qk9PU1RfVFRfRk9SQklEREVOX0lGCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVD
X18qMTAwMDAgKyBfX0dOVUNfTUlOT1JfXyoxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fID4gNDA4
MDApCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFp
dHMvaGFzX2xvZ2ljYWxfb3IuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX2xvZ2ljYWxfb3IuaHBwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhMTg4NzI2ZTE1MmNlNjQwZDEwOTFkYmM1YmNiZTA4Zjk1MzNjNWI2Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19sb2dpY2FsX29y
LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IDIw
MDktMjAxMSBGcmVkZXJpYyBCcm9uLgotLy8KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlz
dHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8g
IFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0v
LyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVj
ZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRf
SEFTX0xPR0lDQUxfT1JfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0hBU19MT0dJQ0FM
X09SX0hQUF9JTkNMVURFRAotCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX05BTUUgaGFzX2xvZ2lj
YWxfb3IKLSNkZWZpbmUgQk9PU1RfVFRfVFJBSVRfT1AgfHwKLSNkZWZpbmUgQk9PU1RfVFRfRk9S
QklEREVOX0lGXAotICAgLyogcG9pbnRlciB3aXRoIGZ1bmRhbWVudGFsIG5vbiBjb252ZXJ0aWJs
ZSB0byBib29sICovXAotICAgKFwKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2lu
dGVyPCBMaHNfbm9yZWYgPjo6dmFsdWUgJiYgXAotICAgICAgICAgKFwKLSAgICAgICAgICAgIDo6
Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICAg
ICAoISAgOjpib29zdDo6aXNfY29udmVydGlibGU8IFJoc19ub2N2LCBib29sID46OnZhbHVlIClc
Ci0gICAgICAgICAgKVwKLSAgICAgICl8fFwKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojpp
c19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWUgJiYgXAotICAgICAgICAgKFwKLSAgICAgICAg
ICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBMaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAg
ICAgICAgICAoISAgOjpib29zdDo6aXNfY29udmVydGlibGU8IExoc19ub2N2LCBib29sID46OnZh
bHVlIClcCi0gICAgICAgICAgKVwKLSAgICAgIClcCi0gICAgICApCi0KLQotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9oYXNfYmluYXJ5X29wZXJhdG9yLmhwcD4KLQotI3VuZGVm
IEJPT1NUX1RUX1RSQUlUX05BTUUKLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9PUAotI3VuZGVmIEJP
T1NUX1RUX0ZPUkJJRERFTl9JRgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19taW51cy5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNf
bWludXMuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTEzYzE2MDE0YTk5ZjRm
NGI5ODI4YWJhMmRmYmIzZGU0YzI5NWRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2hhc19taW51cy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBA
Ci0vLyAgKEMpIENvcHlyaWdodCAyMDA5LTIwMTEgRnJlZGVyaWMgQnJvbi4KLS8vCi0vLyAgVXNl
LCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5
cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9u
LgotCi0jaWZuZGVmIEJPT1NUX1RUX0hBU19NSU5VU19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9P
U1RfVFRfSEFTX01JTlVTX0hQUF9JTkNMVURFRAotCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX05B
TUUgaGFzX21pbnVzCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX09QIC0KLSNkZWZpbmUgQk9PU1Rf
VFRfRk9SQklEREVOX0lGXAotICAgKFwKLSAgICAgIC8qIExocz09cG9pbnRlciBhbmQgUmhzPT1m
dW5kYW1lbnRhbCBhbmQgUmhzIT1pbnRlZ3JhbCAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJv
b3N0Ojppc19wb2ludGVyPCBMaHNfbm9yZWYgPjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29z
dDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAgICghICA6
OmJvb3N0Ojppc19pbnRlZ3JhbDwgUmhzX25vcmVmID46OnZhbHVlIClcCi0gICAgICApIHx8IFwK
LSAgICAgIC8qIExocz09dm9pZCogYW5kIChSaHM9PWZ1bmRhbWVudGFsIG9yIFJocz09cG9pbnRl
cikgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgTGhzX25vcmVm
ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3ZvaWQ8IExoc19ub3B0ciA+Ojp2
YWx1ZSAmJiBcCi0gICAgICAgICAoIFwKLSAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVu
dGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAgICA6OmJvb3N0Ojppc19wb2lu
dGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICAgICAgKVwKLSAgICAgICkgfHwgXAotICAg
ICAgLyogUmhzPT12b2lkKiBhbmQgKExocz09ZnVuZGFtZW50YWwgb3IgTGhzPT1wb2ludGVyKSAq
L1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6
dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfdm9pZDwgUmhzX25vcHRyID46OnZhbHVl
ICYmIFwKLSAgICAgICAgIChcCi0gICAgICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwg
TGhzX25vY3YgPjo6dmFsdWUgfHwgXAotICAgICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwg
TGhzX25vcmVmID46OnZhbHVlXAotICAgICAgICAgIClcCi0gICAgICApIHx8XAotICAgICAgLyog
TGhzPWZ1bmRhbWVudGFsIGFuZCBSaHM9cG9pbnRlciAqL1wKLSAgICAgIChcCi0gICAgICAgICA6
OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25vY3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAg
Ojpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25vcmVmID46OnZhbHVlXAotICAgICAgKSB8fFwKLSAg
ICAgIC8qIHR3byBkaWZmZXJlbnQgcG9pbnRlcnMgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpi
b29zdDo6aXNfcG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9v
c3Q6OmlzX3BvaW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICAoISAgOjpi
b29zdDo6aXNfc2FtZTwgTGhzX25vY3YsIFJoc19ub2N2ID46OnZhbHVlIClcCi0gICAgICApXAot
ICAgICAgKQotCi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaGFzX2JpbmFy
eV9vcGVyYXRvci5ocHA+Ci0KLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9OQU1FCi0jdW5kZWYgQk9P
U1RfVFRfVFJBSVRfT1AKLSN1bmRlZiBCT09TVF9UVF9GT1JCSURERU5fSUYKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBl
X3RyYWl0cy9oYXNfbWludXNfYXNzaWduLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19taW51c19hc3NpZ24uaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTM0NzRlNzU2ZWQxMzkzZTEyMGI0YzUzYjQ4M2Y2YzRl
ZTVlYjk5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19t
aW51c19hc3NpZ24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLy8gIChDKSBD
b3B5cmlnaHQgMjAwOS0yMDExIEZyZWRlcmljIEJyb24uCi0vLwotLy8gIFVzZSwgbW9kaWZpY2F0
aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBm
b3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRl
ZiBCT09TVF9UVF9IQVNfTUlOVVNfQVNTSUdOX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9U
VF9IQVNfTUlOVVNfQVNTSUdOX0hQUF9JTkNMVURFRAotCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlU
X05BTUUgaGFzX21pbnVzX2Fzc2lnbgotI2RlZmluZSBCT09TVF9UVF9UUkFJVF9PUCAtPQotI2Rl
ZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0gICAoXAotICAgICAgLyogTGhzPT1wb2ludGVy
IGFuZCBSaHM9PWZ1bmRhbWVudGFsIGFuZCBSaHMhPWludGVncmFsICovXAotICAgICAgKFwKLSAg
ICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAg
ICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgUmhzX25vY3YgPjo6dmFsdWUgJiYgXAotICAg
ICAgICAgKCEgIDo6Ym9vc3Q6OmlzX2ludGVncmFsPCBSaHNfbm9yZWYgPjo6dmFsdWUgKVwKLSAg
ICAgICkgfHwgXAotICAgICAgLyogTGhzPT12b2lkKiBhbmQgUmhzPT1mdW5kYW1lbnRhbCAqL1wK
LSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBMaHNfbm9yZWYgPjo6dmFs
dWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfdm9pZDwgTGhzX25vcHRyID46OnZhbHVlICYm
IFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZVwK
LSAgICAgICkgfHwgXAotICAgICAgLyogUmhzPT12b2lkKiBhbmQgTGhzPT1mdW5kYW1lbnRhbCAq
L1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6
dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfdm9pZDwgUmhzX25vcHRyID46OnZhbHVl
ICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBMaHNfbm9jdiA+Ojp2YWx1
ZVwKLSAgICAgICkgfHwgXAotICAgICAgLyogTGhzPWZ1bmRhbWVudGFsIGFuZCBSaHM9cG9pbnRl
ciAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25v
Y3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25vcmVm
ID46OnZhbHVlXAotICAgICAgKSB8fCBcCi0gICAgICAvKiBMaHM9PXBvaW50ZXIgYW5kIFJocz09
cG9pbnRlciAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBMaHNf
bm9yZWYgPjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25v
cmVmID46OnZhbHVlXAotICAgICAgKSB8fCBcCi0gICAgICAvKiAoTGhzPT1mdW5kYW1lbnRhbCBv
ciBMaHM9PXBvaW50ZXIpIGFuZCAoUmhzPT1mdW5kYW1lbnRhbCBvciBSaHM9PXBvaW50ZXIpIGFu
ZCAoTGhzPT1jb25zdCkgKi9cCi0gICAgICAoXAotICAgICAgICAgKFwKLSAgICAgICAgICAgIDo6
Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBMaHNfbm9jdiA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAg
ICA6OmJvb3N0Ojppc19wb2ludGVyPCBMaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICAgICApICYm
IFwKLSAgICAgICAgIChcCi0gICAgICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgUmhz
X25vY3YgPjo6dmFsdWUgfHwgXAotICAgICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhz
X25vcmVmID46OnZhbHVlXAotICAgICAgICAgICkgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNf
Y29uc3Q8IExoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgIClcCi0gICAgICApCi0KLQotI2luY2x1
ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9oYXNfYmluYXJ5X29wZXJhdG9yLmhwcD4KLQot
I3VuZGVmIEJPT1NUX1RUX1RSQUlUX05BTUUKLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9PUAotI3Vu
ZGVmIEJPT1NUX1RUX0ZPUkJJRERFTl9JRgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19tb2R1bHVz
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJh
aXRzL2hhc19tb2R1bHVzLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRhODE1
ZjNkZjI4ZjU5YjIwM2I3MTE1YmQ1ZjY4OWU4MDE5ODZmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbW9kdWx1cy5ocHAKKysrIC9kZXYvbnVsbApAQCAt
MSw0OSArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCAyMDA5LTIwMTEgRnJlZGVyaWMgQnJvbi4K
LS8vCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0
byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBk
b2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX0hBU19NT0RVTFVTX0hQUF9JTkNMVURF
RAotI2RlZmluZSBCT09TVF9UVF9IQVNfTU9EVUxVU19IUFBfSU5DTFVERUQKLQotI2RlZmluZSBC
T09TVF9UVF9UUkFJVF9OQU1FIGhhc19tb2R1bHVzCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX09Q
ICUKLSNkZWZpbmUgQk9PU1RfVFRfRk9SQklEREVOX0lGXAotICAgKFwKLSAgICAgIC8qIExocz09
ZnVuZGFtZW50YWwgYW5kIFJocz09ZnVuZGFtZW50YWwgYW5kIChMaHMhPWludGVncmFsIG9yIFJo
cyE9aW50ZWdyYWwpICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVu
dGFsPCBMaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1l
bnRhbDwgUmhzX25vY3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAgKFwKLSAgICAgICAgICAgICgh
ICA6OmJvb3N0Ojppc19pbnRlZ3JhbDwgTGhzX25vcmVmID46OnZhbHVlICkgfHwgXAotICAgICAg
ICAgICAgKCEgIDo6Ym9vc3Q6OmlzX2ludGVncmFsPCBSaHNfbm9yZWYgPjo6dmFsdWUgKVwKLSAg
ICAgICAgIClcCi0gICAgICApfHxcCi0gICAgICAvKiBMaHM9PWZ1bmRhbWVudGFsIGFuZCBSaHM9
PXBvaW50ZXIgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8
IExoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IFJo
c19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgICl8fFwKLSAgICAgIC8qIFJocz09ZnVuZGFtZW50YWwg
YW5kIExocz09cG9pbnRlciAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19mdW5k
YW1lbnRhbDwgUmhzX25vY3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfcG9p
bnRlcjwgTGhzX25vcmVmID46OnZhbHVlXAotICAgICAgKXx8XAotICAgICAgLyogTGhzPT1wb2lu
dGVyIGFuZCBSaHM9PXBvaW50ZXIgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNf
cG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3Bv
aW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgIClcCi0gICAgICApCi0KLQotI2luY2x1
ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9oYXNfYmluYXJ5X29wZXJhdG9yLmhwcD4KLQot
I3VuZGVmIEJPT1NUX1RUX1RSQUlUX05BTUUKLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9PUAotI3Vu
ZGVmIEJPT1NUX1RUX0ZPUkJJRERFTl9JRgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19tb2R1bHVz
X2Fzc2lnbi5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90
eXBlX3RyYWl0cy9oYXNfbW9kdWx1c19hc3NpZ24uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1ZTNlODNmYTA3Njk0YThlNzY1OTQzN2VkMzA3NjRlMmU3YmVmMGU0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19tb2R1bHVzX2Fzc2lnbi5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCAyMDA5
LTIwMTEgRnJlZGVyaWMgQnJvbi4KLS8vCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3Ry
aWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBW
ZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29w
eSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8g
IFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2Vu
dCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX0hB
U19NT0RVTFVTX0FTU0lHTl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSEFTX01PRFVM
VVNfQVNTSUdOX0hQUF9JTkNMVURFRAotCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX05BTUUgaGFz
X21vZHVsdXNfYXNzaWduCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX09QICU9Ci0jZGVmaW5lIEJP
T1NUX1RUX0ZPUkJJRERFTl9JRlwKLSAgIChcCi0gICAgICAvKiBMaHM9PWZ1bmRhbWVudGFsIGFu
ZCBSaHM9PWZ1bmRhbWVudGFsIGFuZCAoTGhzIT1pbnRlZ3JhbCBvciBSaHMhPWludGVncmFsKSAq
L1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25vY3Yg
Pjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2
ID46OnZhbHVlICYmIFwKLSAgICAgICAgICggXAotICAgICAgICAgICAgKCEgIDo6Ym9vc3Q6Omlz
X2ludGVncmFsPCBMaHNfbm9yZWYgPjo6dmFsdWUgKSB8fCBcCi0gICAgICAgICAgICAoISAgOjpi
b29zdDo6aXNfaW50ZWdyYWw8IFJoc19ub3JlZiA+Ojp2YWx1ZSApXAotICAgICAgICAgKVwKLSAg
ICAgICl8fFwKLSAgICAgIC8qIExocz09ZnVuZGFtZW50YWwgYW5kIFJocz09cG9pbnRlciAqL1wK
LSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25vY3YgPjo6
dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25vcmVmID46OnZh
bHVlXAotICAgICAgKXx8XAotICAgICAgLyogUmhzPT1mdW5kYW1lbnRhbCBhbmQgTGhzPT1wb2lu
dGVyICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNf
bm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBMaHNfbm9y
ZWYgPjo6dmFsdWVcCi0gICAgICApfHxcCi0gICAgICAvKiBMaHM9PXBvaW50ZXIgYW5kIFJocz09
cG9pbnRlciAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBMaHNf
bm9yZWYgPjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25v
cmVmID46OnZhbHVlXAotICAgICAgKXx8XAotICAgICAgLyogTGhzPT1mdW5kYW1lbnRhbCBhbmQg
UmhzPT1mdW5kYW1lbnRhbCBhbmQgTGhzPT1jb25zdCAqL1wKLSAgICAgIChcCi0gICAgICAgICA6
OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25vY3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAg
Ojpib29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAg
IDo6Ym9vc3Q6OmlzX2NvbnN0PCBMaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICApXAotICAgICAg
KQotCi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaGFzX2JpbmFyeV9vcGVy
YXRvci5ocHA+Ci0KLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9OQU1FCi0jdW5kZWYgQk9PU1RfVFRf
VFJBSVRfT1AKLSN1bmRlZiBCT09TVF9UVF9GT1JCSURERU5fSUYKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0
cy9oYXNfbXVsdGlwbGllcy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbXVsdGlwbGllcy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDU5MWEwY2VhZTgyOTBjNWVjM2EzYTRiNTcwNGNkNTkyMmFhMDllNDkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX211bHRpcGxpZXMu
aHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgMjAw
OS0yMDExIEZyZWRlcmljIEJyb24uCi0vLwotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0
cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAg
VmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8v
ICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNl
bnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9I
QVNfTVVMVElQTElFU19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSEFTX01VTFRJUExJ
RVNfSFBQX0lOQ0xVREVECi0KLSNkZWZpbmUgQk9PU1RfVFRfVFJBSVRfTkFNRSBoYXNfbXVsdGlw
bGllcwotI2RlZmluZSBCT09TVF9UVF9UUkFJVF9PUCAqCi0jZGVmaW5lIEJPT1NUX1RUX0ZPUkJJ
RERFTl9JRlwKLSAgIC8qIHBvaW50ZXIgd2l0aCBwb2ludGVyIG9yIGZ1bmRhbWVudGFsICovXAot
ICAgKFwKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBMaHNfbm9yZWYg
Pjo6dmFsdWUgJiYgXAotICAgICAgICAgKFwKLSAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRh
bWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAgICA6OmJvb3N0Ojppc19w
b2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICAgIClcCi0gICAgICApfHxcCi0gICAg
ICAoXAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25vcmVmID46OnZhbHVlICYm
IFwKLSAgICAgICAgIChcCi0gICAgICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhz
X25vY3YgPjo6dmFsdWUgfHwgXAotICAgICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgTGhz
X25vcmVmID46OnZhbHVlXAotICAgICAgICAgIClcCi0gICAgICApXAotICAgICAgKQotCi0KLSNp
bmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaGFzX2JpbmFyeV9vcGVyYXRvci5ocHA+
Ci0KLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9OQU1FCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfT1AK
LSN1bmRlZiBCT09TVF9UVF9GT1JCSURERU5fSUYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbXVs
dGlwbGllc19hc3NpZ24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvdHlwZV90cmFpdHMvaGFzX211bHRpcGxpZXNfYXNzaWduLmhwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjI0Zjg3OTQ0ZTdhNTE4MjFkNWYyZjg2NmIxOTdkNjkyYjYwNWJl
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbXVsdGlw
bGllc19hc3NpZ24uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLy8gIChDKSBD
b3B5cmlnaHQgMjAwOS0yMDExIEZyZWRlcmljIEJyb24uCi0vLwotLy8gIFVzZSwgbW9kaWZpY2F0
aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBm
b3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRl
ZiBCT09TVF9UVF9IQVNfTVVMVElQTElFU19BU1NJR05fSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJP
T1NUX1RUX0hBU19NVUxUSVBMSUVTX0FTU0lHTl9IUFBfSU5DTFVERUQKLQotI2RlZmluZSBCT09T
VF9UVF9UUkFJVF9OQU1FIGhhc19tdWx0aXBsaWVzX2Fzc2lnbgotI2RlZmluZSBCT09TVF9UVF9U
UkFJVF9PUCAqPQotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0gICAoXAotICAgICAg
LyogTGhzPT1mdW5kYW1lbnRhbCBhbmQgTGhzPT1jb25zdCBhbmQgUmhzPT1mdW5kYW1lbnRhbCAq
L1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25vY3Yg
Pjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfY29uc3Q8IExoc19ub3JlZiA+Ojp2
YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgUmhzX25vY3YgPjo6
dmFsdWVcCi0gICAgICApIHx8IFwKLSAgICAgIC8qIExocz09cG9pbnRlciBhbmQgKFJocz09ZnVu
ZGFtZW50YWwgb3IgUmhzPT1wb2ludGVyKSAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0
Ojppc19wb2ludGVyPCBMaHNfbm9yZWYgPjo6dmFsdWUgJiYgXAotICAgICAgICAgKCBcCi0gICAg
ICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgUmhzX25vY3YgPjo6dmFsdWUgfHwgXAot
ICAgICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25vcmVmID46OnZhbHVlXAotICAg
ICAgICAgKVwKLSAgICAgICl8fFwKLSAgICAgIC8qIFJocz09cG9pbnRlciBhbmQgKExocz09ZnVu
ZGFtZW50YWwgb3IgTGhzPT1wb2ludGVyKSAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0
Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWUgJiYgXAotICAgICAgICAgKCBcCi0gICAg
ICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25vY3YgPjo6dmFsdWUgfHwgXAot
ICAgICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlXAotICAg
ICAgICAgIClcCi0gICAgICApXAotICAgICAgKQotCi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9kZXRhaWwvaGFzX2JpbmFyeV9vcGVyYXRvci5ocHA+Ci0KLSN1bmRlZiBCT09TVF9UVF9U
UkFJVF9OQU1FCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfT1AKLSN1bmRlZiBCT09TVF9UVF9GT1JC
SURERU5fSUYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbmVnYXRlLmhwcCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19uZWdhdGUuaHBw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTJlNTRhYjQxYzA0OTIzYjFkYmM2NmZm
Y2IxNjE4YTMwYjgwMGU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJh
aXRzL2hhc19uZWdhdGUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLy8gIChD
KSBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWRlcmljIEJyb24uCi0vLwotLy8gIFVzZSwgbW9kaWZp
Y2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0
cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lm
bmRlZiBCT09TVF9UVF9IQVNfTkVHQVRFX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9I
QVNfTkVHQVRFX0hQUF9JTkNMVURFRAotCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX05BTUUgaGFz
X25lZ2F0ZQotI2RlZmluZSBCT09TVF9UVF9UUkFJVF9PUCAtCi0jZGVmaW5lIEJPT1NUX1RUX0ZP
UkJJRERFTl9JRlwKLSAgIC8qIHBvaW50ZXIgKi9cCi0gICA6OmJvb3N0Ojppc19wb2ludGVyPCBS
aHNfbm9yZWYgPjo6dmFsdWUKLQotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWls
L2hhc19wcmVmaXhfb3BlcmF0b3IuaHBwPgotCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfTkFNRQot
I3VuZGVmIEJPT1NUX1RUX1RSQUlUX09QCi0jdW5kZWYgQk9PU1RfVFRfRk9SQklEREVOX0lGCi0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvdHlwZV90cmFpdHMvaGFzX25ld19vcGVyYXRvci5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbmV3X29wZXJhdG9yLmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRlZjg3MmRkZjhhMGIyZjFlZTA2Yzhj
NmExODJhMDkzN2ExNDk5NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3Ry
YWl0cy9oYXNfbmV3X29wZXJhdG9yLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBA
Ci0KLS8vICAoQykgQ29weXJpZ2h0IFJ1bmFyIFVuZGhlaW0sIFJvYmVydCBSYW1leSAmIEpvaG4g
TWFkZG9jayAyMDA4LgotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJl
IHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAu
IChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDov
L3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBp
bmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9IQVNfTkVXX09QRVJB
VE9SX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9IQVNfTkVXX09QRVJBVE9SX0hQUF9J
TkNMVURFRAotCi0jaW5jbHVkZSA8bmV3PiAvLyBzdGQ6Om5vdGhyb3dfdAotI2luY2x1ZGUgPGNz
dGRkZWY+IC8vIHN0ZDo6c2l6ZV90Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50ZWdy
YWxfY29uc3RhbnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC95ZXNf
bm9fdHlwZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL3dvcmthcm91bmQuaHBwPgotCi0j
aWYgZGVmaW5lZChuZXcpIAotIyAgaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA+PSAx
MzEwKQotIyAgICAgZGVmaW5lIEJPT1NUX1RUX0FVWF9NQUNST19ORVdfREVGSU5FRAotIyAgICAg
cHJhZ21hIHB1c2hfbWFjcm8oIm5ldyIpCi0jICAgICB1bmRlZiBuZXcKLSMgIGVsc2UKLSMgICAg
IGVycm9yICJTb3JyeSBidXQgeW91IGNhbid0IGluY2x1ZGUgdGhpcyBoZWFkZXIgaWYgJ25ldycg
aXMgZGVmaW5lZCBhcyBhIG1hY3JvLiIKLSMgIGVuZGlmCi0jZW5kaWYKLQotbmFtZXNwYWNlIGJv
b3N0IHsKLW5hbWVzcGFjZSBkZXRhaWwgewotICAgIHRlbXBsYXRlIDxjbGFzcyBVLCBVIHg+IAot
ICAgIHN0cnVjdCB0ZXN0OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0
IGhhc19uZXdfb3BlcmF0b3JfaW1wbCB7Ci0gICAgICAgIHRlbXBsYXRlPGNsYXNzIFU+Ci0gICAg
ICAgIHN0YXRpYyB0eXBlX3RyYWl0czo6eWVzX3R5cGUgY2hlY2tfc2lnMSgKLSAgICAgICAgICAg
IFUqLCAKLSAgICAgICAgICAgIHRlc3Q8Ci0gICAgICAgICAgICB2b2lkICooKikoc3RkOjpzaXpl
X3QpLAotICAgICAgICAgICAgICAgICZVOjpvcGVyYXRvciBuZXcKLSAgICAgICAgICAgID4qID0g
TlVMTAotICAgICAgICApOwotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBVPgotICAgICAgICBzdGF0
aWMgdHlwZV90cmFpdHM6Om5vX3R5cGUgY2hlY2tfc2lnMSguLi4pOwotCi0gICAgICAgIHRlbXBs
YXRlPGNsYXNzIFU+Ci0gICAgICAgIHN0YXRpYyB0eXBlX3RyYWl0czo6eWVzX3R5cGUgY2hlY2tf
c2lnMigKLSAgICAgICAgICAgIFUqLCAKLSAgICAgICAgICAgIHRlc3Q8Ci0gICAgICAgICAgICB2
b2lkICooKikoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JiksCi0gICAgICAgICAg
ICAgICAgJlU6Om9wZXJhdG9yIG5ldwotICAgICAgICAgICAgPiogPSBOVUxMCi0gICAgICAgICk7
Ci0gICAgICAgIHRlbXBsYXRlPGNsYXNzIFU+Ci0gICAgICAgIHN0YXRpYyB0eXBlX3RyYWl0czo6
bm9fdHlwZSBjaGVja19zaWcyKC4uLik7Ci0KLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgVT4KLSAg
ICAgICAgc3RhdGljIHR5cGVfdHJhaXRzOjp5ZXNfdHlwZSBjaGVja19zaWczKAotICAgICAgICAg
ICAgVSosIAotICAgICAgICAgICAgdGVzdDwKLSAgICAgICAgICAgIHZvaWQgKigqKShzdGQ6OnNp
emVfdCwgdm9pZCopLAotICAgICAgICAgICAgICAgICZVOjpvcGVyYXRvciBuZXcKLSAgICAgICAg
ICAgID4qID0gTlVMTAotICAgICAgICApOwotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBVPgotICAg
ICAgICBzdGF0aWMgdHlwZV90cmFpdHM6Om5vX3R5cGUgY2hlY2tfc2lnMyguLi4pOwotCi0KLSAg
ICAgICAgdGVtcGxhdGU8Y2xhc3MgVT4KLSAgICAgICAgc3RhdGljIHR5cGVfdHJhaXRzOjp5ZXNf
dHlwZSBjaGVja19zaWc0KAotICAgICAgICAgICAgVSosIAotICAgICAgICAgICAgdGVzdDwKLSAg
ICAgICAgICAgIHZvaWQgKigqKShzdGQ6OnNpemVfdCksCi0gICAgICAgICAgICAgICAgJlU6Om9w
ZXJhdG9yIG5ld1tdCi0gICAgICAgICAgICA+KiA9IE5VTEwKLSAgICAgICAgKTsKLSAgICAgICAg
dGVtcGxhdGU8Y2xhc3MgVT4KLSAgICAgICAgc3RhdGljIHR5cGVfdHJhaXRzOjpub190eXBlIGNo
ZWNrX3NpZzQoLi4uKTsKLQotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBVPgotICAgICAgICBzdGF0
aWMgdHlwZV90cmFpdHM6Onllc190eXBlIGNoZWNrX3NpZzUoCi0gICAgICAgICAgICBVKiwgCi0g
ICAgICAgICAgICB0ZXN0PAotICAgICAgICAgICAgdm9pZCAqKCopKHN0ZDo6c2l6ZV90LCBjb25z
dCBzdGQ6Om5vdGhyb3dfdCYpLAotICAgICAgICAgICAgICAgICZVOjpvcGVyYXRvciBuZXdbXQot
ICAgICAgICAgICAgPiogPSBOVUxMCi0gICAgICAgICk7Ci0gICAgICAgIHRlbXBsYXRlPGNsYXNz
IFU+Ci0gICAgICAgIHN0YXRpYyB0eXBlX3RyYWl0czo6bm9fdHlwZSBjaGVja19zaWc1KC4uLik7
Ci0KLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgVT4KLSAgICAgICAgc3RhdGljIHR5cGVfdHJhaXRz
Ojp5ZXNfdHlwZSBjaGVja19zaWc2KAotICAgICAgICAgICAgVSosIAotICAgICAgICAgICAgdGVz
dDwKLSAgICAgICAgICAgIHZvaWQgKigqKShzdGQ6OnNpemVfdCwgdm9pZCopLAotICAgICAgICAg
ICAgICAgICZVOjpvcGVyYXRvciBuZXdbXQotICAgICAgICAgICAgPiogPSBOVUxMCi0gICAgICAg
ICk7Ci0gICAgICAgIHRlbXBsYXRlPGNsYXNzIFU+Ci0gICAgICAgIHN0YXRpYyB0eXBlX3RyYWl0
czo6bm9fdHlwZSBjaGVja19zaWc2KC4uLik7Ci0KLSAgICAgICAgLy8gR0NDMiB3b24ndCBldmVu
IHBhcnNlIHRoaXMgdGVtcGxhdGUgaWYgd2UgZW1iZWQgdGhlIGNvbXB1dGF0aW9uCi0gICAgICAg
IC8vIG9mIHMxIGluIHRoZSBjb21wdXRhdGlvbiBvZiB2YWx1ZS4KLSAgICAgICAgI2lmZGVmIF9f
R05VQ19fCi0gICAgICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQodW5zaWduZWQsIHMxID0g
c2l6ZW9mKGhhc19uZXdfb3BlcmF0b3JfaW1wbDxUPjo6dGVtcGxhdGUgY2hlY2tfc2lnMTxUPigw
KSkpOwotICAgICAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHVuc2lnbmVkLCBzMiA9IHNp
emVvZihoYXNfbmV3X29wZXJhdG9yX2ltcGw8VD46OnRlbXBsYXRlIGNoZWNrX3NpZzI8VD4oMCkp
KTsKLSAgICAgICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVCh1bnNpZ25lZCwgczMgPSBzaXpl
b2YoaGFzX25ld19vcGVyYXRvcl9pbXBsPFQ+Ojp0ZW1wbGF0ZSBjaGVja19zaWczPFQ+KDApKSk7
Ci0gICAgICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQodW5zaWduZWQsIHM0ID0gc2l6ZW9m
KGhhc19uZXdfb3BlcmF0b3JfaW1wbDxUPjo6dGVtcGxhdGUgY2hlY2tfc2lnNDxUPigwKSkpOwot
ICAgICAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHVuc2lnbmVkLCBzNSA9IHNpemVvZiho
YXNfbmV3X29wZXJhdG9yX2ltcGw8VD46OnRlbXBsYXRlIGNoZWNrX3NpZzU8VD4oMCkpKTsKLSAg
ICAgICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVCh1bnNpZ25lZCwgczYgPSBzaXplb2YoaGFz
X25ld19vcGVyYXRvcl9pbXBsPFQ+Ojp0ZW1wbGF0ZSBjaGVja19zaWc2PFQ+KDApKSk7Ci0gICAg
ICAgICNlbHNlCi0gICAgICAgICAgICAjaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDX0ZV
TExfVkVSLCA+PSAxNDAwNTAwMDApCi0gICAgICAgICAgICAgICAgI3ByYWdtYSB3YXJuaW5nKHB1
c2gpCi0gICAgICAgICAgICAgICAgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NjMzNCkKLSAgICAg
ICAgICAgICNlbmRpZgotCi0gICAgICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQodW5zaWdu
ZWQsIHMxID0gc2l6ZW9mKGNoZWNrX3NpZzE8VD4oMCkpKTsKLSAgICAgICAgICAgIEJPT1NUX1NU
QVRJQ19DT05TVEFOVCh1bnNpZ25lZCwgczIgPSBzaXplb2YoY2hlY2tfc2lnMjxUPigwKSkpOwot
ICAgICAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHVuc2lnbmVkLCBzMyA9IHNpemVvZihj
aGVja19zaWczPFQ+KDApKSk7Ci0gICAgICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQodW5z
aWduZWQsIHM0ID0gc2l6ZW9mKGNoZWNrX3NpZzQ8VD4oMCkpKTsKLSAgICAgICAgICAgIEJPT1NU
X1NUQVRJQ19DT05TVEFOVCh1bnNpZ25lZCwgczUgPSBzaXplb2YoY2hlY2tfc2lnNTxUPigwKSkp
OwotICAgICAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKHVuc2lnbmVkLCBzNiA9IHNpemVv
ZihjaGVja19zaWc2PFQ+KDApKSk7Ci0KLSAgICAgICAgICAgICNpZiBCT09TVF9XT1JLQVJPVU5E
KEJPT1NUX01TVkNfRlVMTF9WRVIsID49IDE0MDA1MDAwMCkKLSAgICAgICAgICAgICAgICAjcHJh
Z21hIHdhcm5pbmcocG9wKQotICAgICAgICAgICAgI2VuZGlmCi0gICAgICAgICNlbmRpZgotICAg
ICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSAKLSAgICAgICAgICAgIChz
MSA9PSBzaXplb2YodHlwZV90cmFpdHM6Onllc190eXBlKSkgfHwKLSAgICAgICAgICAgIChzMiA9
PSBzaXplb2YodHlwZV90cmFpdHM6Onllc190eXBlKSkgfHwKLSAgICAgICAgICAgIChzMyA9PSBz
aXplb2YodHlwZV90cmFpdHM6Onllc190eXBlKSkgfHwKLSAgICAgICAgICAgIChzNCA9PSBzaXpl
b2YodHlwZV90cmFpdHM6Onllc190eXBlKSkgfHwKLSAgICAgICAgICAgIChzNSA9PSBzaXplb2Yo
dHlwZV90cmFpdHM6Onllc190eXBlKSkgfHwKLSAgICAgICAgICAgIChzNiA9PSBzaXplb2YodHlw
ZV90cmFpdHM6Onllc190eXBlKSkKLSAgICAgICAgKTsKLSAgICB9OwotfSAvLyBuYW1lc3BhY2Ug
ZGV0YWlsCi0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX25ld19vcGVyYXRvciA6IHB1
YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCA6OmJvb3N0OjpkZXRhaWw6Omhhc19uZXdfb3Bl
cmF0b3JfaW1wbDxUPjo6dmFsdWU+e307Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNpZiBk
ZWZpbmVkKEJPT1NUX1RUX0FVWF9NQUNST19ORVdfREVGSU5FRCkKLSMgIHByYWdtYSBwb3BfbWFj
cm8oIm5ldyIpCi0jZW5kaWYKLQotI2VuZGlmIC8vIEJPT1NUX1RUX0hBU19ORVdfT1BFUkFUT1Jf
SFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbm90X2VxdWFsX3RvLmhwcCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19ub3RfZXF1YWxf
dG8uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmI2NzA1ZTdjOTcxODcwMWU4
ZDVjNmJjZTllY2RjYjk1ZGFhZDAyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5
cGVfdHJhaXRzL2hhc19ub3RfZXF1YWxfdG8uaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAs
MCBAQAotLy8gIChDKSBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWRlcmljIEJyb24uCi0vLwotLy8g
IFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJv
b3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRh
dGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9IQVNfTk9UX0VRVUFMX1RPX0hQUF9JTkNMVURFRAot
I2RlZmluZSBCT09TVF9UVF9IQVNfTk9UX0VRVUFMX1RPX0hQUF9JTkNMVURFRAotCi0jZGVmaW5l
IEJPT1NUX1RUX1RSQUlUX05BTUUgaGFzX25vdF9lcXVhbF90bwotI2RlZmluZSBCT09TVF9UVF9U
UkFJVF9PUCAhPQotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0gICAoXAotICAgICAg
LyogTGhzPT1wb2ludGVyIGFuZCBSaHM9PWZ1bmRhbWVudGFsICovXAotICAgICAgKFwKLSAgICAg
ICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAg
ICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgUmhzX25vY3YgPjo6dmFsdWVcCi0gICAgICApIHx8
IFwKLSAgICAgIC8qIFJocz09cG9pbnRlciBhbmQgTGhzPT1mdW5kYW1lbnRhbCAqL1wKLSAgICAg
IChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWUgJiYg
XAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlXAot
ICAgICAgKSB8fCBcCi0gICAgICAvKiBMaHM9PXBvaW50ZXIgYW5kIFJocz09cG9pbnRlciBhbmQg
TGhzIT1iYXNlKFJocykgYW5kIFJocyE9YmFzZShMaHMpIGFuZCBMaHMhPXZvaWQqIGFuZCBSaHMh
PXZvaWQqICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19u
b3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9y
ZWYgPjo6dmFsdWUgJiYgXAotICAgICAgICAgKCEgXAotICAgICAgICAgICAgKFwKLSAgICAgICAg
ICAgICAgIDo6Ym9vc3Q6OmlzX2Jhc2Vfb2Y8IExoc19ub3B0ciwgUmhzX25vcHRyID46OnZhbHVl
IHx8IFwKLSAgICAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX2Jhc2Vfb2Y8IFJoc19ub3B0ciwgTGhz
X25vcHRyID46OnZhbHVlIHx8IFwKLSAgICAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX3NhbWU8IExo
c19ub3B0ciwgUmhzX25vcHRyID46OnZhbHVlIHx8IFwKLSAgICAgICAgICAgICAgIDo6Ym9vc3Q6
OmlzX3ZvaWQ8IExoc19ub3B0ciA+Ojp2YWx1ZSB8fCBcCi0gICAgICAgICAgICAgICA6OmJvb3N0
Ojppc192b2lkPCBSaHNfbm9wdHIgPjo6dmFsdWVcCi0gICAgICAgICAgICApXAotICAgICAgICAg
KVwKLSAgICAgIClcCi0gICAgICApCi0KLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2Rl
dGFpbC9oYXNfYmluYXJ5X29wZXJhdG9yLmhwcD4KLQotI3VuZGVmIEJPT1NUX1RUX1RSQUlUX05B
TUUKLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9PUAotI3VuZGVmIEJPT1NUX1RUX0ZPUkJJRERFTl9J
RgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19ub3Rocm93X2Fzc2lnbi5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbm90aHJvd19h
c3NpZ24uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTE3ZmE4MDRiZmJmYTg5
ZjAyNDZiZThiOGY0MWU4MDMyZWIxODRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2hhc19ub3Rocm93X2Fzc2lnbi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw4
NCArMCwwIEBACi0KLS8vICAoQykgQ29weXJpZ2h0IFN0ZXZlIENsZWFyeSwgQmVtYW4gRGF3ZXMs
IEhvd2FyZCBIaW5uYW50ICYgSm9obiBNYWRkb2NrIDIwMDAuCi0vLyAgVXNlLCBtb2RpZmljYXRp
b24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZv
ciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVm
IEJPT1NUX1RUX0hBU19OT1RIUk9XX0FTU0lHTl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1Rf
VFRfSEFTX05PVEhST1dfQVNTSUdOX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4g
Ly8gc2l6ZV90Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50ZWdyYWxfY29uc3RhbnQu
aHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludHJpbnNpY3MuaHBwPgotCi0jaWYg
IWRlZmluZWQoQk9PU1RfSEFTX05PVEhST1dfQVNTSUdOKSB8fCBkZWZpbmVkKEJPT1NUX01TVkMp
IHx8IGRlZmluZWQoQk9PU1RfSU5URUwpCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaGFz
X3RyaXZpYWxfYXNzaWduLmhwcD4KLSNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9OT0VYQ0VQ
VCkgJiYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMpCi0jaW5jbHVk
ZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGVjbHZhbC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90
cmFpdHMvaXNfY29uc3QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvbGF0
aWxlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19yZWZlcmVuY2UuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Fzc2lnbmFibGUuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2FkZF9yZWZlcmVuY2UuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5
cGVfdHJhaXRzL3JlbW92ZV9yZWZlcmVuY2UuaHBwPgotI2VuZGlmCi0jZW5kaWYKLSNpZiBkZWZp
bmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fU1VOUFJPX0NDKSB8fCBkZWZpbmVkKF9fY2xhbmdf
XykKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jb25zdC5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvdHlwZV90cmFpdHMvaXNfdm9sYXRpbGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2lzX2Fzc2lnbmFibGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lz
X2FycmF5LmhwcD4KLSNpZmRlZiBCT09TVF9JTlRFTAotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2lzX3BvZC5ocHA+Ci0jZW5kaWYKLSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3QgewotCi0j
aWYgIWRlZmluZWQoQk9PU1RfSEFTX05PVEhST1dfQVNTSUdOKSAmJiAhZGVmaW5lZChCT09TVF9O
T19DWFgxMV9OT0VYQ0VQVCkgJiYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVS
RU5DRVMpCi0KLSAgIG5hbWVzcGFjZSBkZXRhaWwKLSAgIHsKLSAgICAgIHRlbXBsYXRlIDxjbGFz
cyBULCBib29sIGIxLCBib29sIGIyPiBzdHJ1Y3QgaGFzX25vdGhyb3dfYXNzaWduX2ltcHsgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsgfTsKLSAgICAgIHRlbXBsYXRlIDxjbGFzcyBU
PiAgICAgICAgICBzdHJ1Y3QgaGFzX25vdGhyb3dfYXNzaWduX2ltcDxULCBmYWxzZSwgdHJ1ZT57
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gbm9leGNlcHQoYm9vc3Q6OmRlY2x2YWw8dHlwZW5h
bWUgYWRkX3JlZmVyZW5jZTxUPjo6dHlwZT4oKSA9IGJvb3N0OjpkZWNsdmFsPHR5cGVuYW1lIGFk
ZF9yZWZlcmVuY2U8VCBjb25zdD46OnR5cGU+KCkpOyB9OwotICAgICAgdGVtcGxhdGUgPGNsYXNz
IFQsIHN0ZDo6c2l6ZV90IE4+IHN0cnVjdCBoYXNfbm90aHJvd19hc3NpZ25faW1wPFRbTl0sIGZh
bHNlLCB0cnVlPnsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBoYXNfbm90aHJvd19hc3NpZ25f
aW1wPFQsIGZhbHNlLCB0cnVlPjo6dmFsdWU7IH07Ci0gICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4g
ICAgICAgICAgc3RydWN0IGhhc19ub3Rocm93X2Fzc2lnbl9pbXA8VFtdLCBmYWxzZSwgdHJ1ZT57
IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gaGFzX25vdGhyb3dfYXNzaWduX2ltcDxULCBmYWxz
ZSwgdHJ1ZT46OnZhbHVlOyB9OwotICAgfQotCi0jZW5kaWYKLQotICAgdGVtcGxhdGUgPGNsYXNz
IFQ+Ci0gICBzdHJ1Y3QgaGFzX25vdGhyb3dfYXNzaWduIDogcHVibGljIGludGVncmFsX2NvbnN0
YW50IDwgYm9vbCwKLSNpZm5kZWYgQk9PU1RfSEFTX05PVEhST1dfQVNTSUdOCi0jaWYgIWRlZmlu
ZWQoQk9PU1RfTk9fQ1hYMTFfTk9FWENFUFQpICYmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1JW
QUxVRV9SRUZFUkVOQ0VTKQotICAgICAgLy8gUG9ydGFibGUgQysrMTEgdmVyc2lvbjoKLSAgICAg
IGRldGFpbDo6aGFzX25vdGhyb3dfYXNzaWduX2ltcDxULCAKLSAgICAgIChpc19jb25zdDx0eXBl
bmFtZSByZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlPjo6dmFsdWUgfHwgaXNfdm9sYXRpbGU8dHlw
ZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZT46OnZhbHVlIHx8IGlzX3JlZmVyZW5jZTxU
Pjo6dmFsdWUpLCAKLSAgICAgIGlzX2Fzc2lnbmFibGU8dHlwZW5hbWUgYWRkX3JlZmVyZW5jZTxU
Pjo6dHlwZSwgdHlwZW5hbWUgYWRkX3JlZmVyZW5jZTxjb25zdCBUPjo6dHlwZT46OnZhbHVlCi0g
ICAgICA+Ojp2YWx1ZQotI2Vsc2UKLSAgICAgIDo6Ym9vc3Q6Omhhc190cml2aWFsX2Fzc2lnbjxU
Pjo6dmFsdWUKLSNlbmRpZgotI2Vsc2UKLSAgICAgIEJPT1NUX0hBU19OT1RIUk9XX0FTU0lHTihU
KQotI2VuZGlmCi0gICA+IHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4g
c3RydWN0IGhhc19ub3Rocm93X2Fzc2lnbiA8VFtOXT4gOiBwdWJsaWMgaGFzX25vdGhyb3dfYXNz
aWduPFQ+IHt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGhhc19ub3Rocm93X2Fzc2lnbjx2b2lkPiA6
IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGhhc19ub3Ro
cm93X2Fzc2lnbjxUIHZvbGF0aWxlPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8
Y2xhc3MgVD4gc3RydWN0IGhhc19ub3Rocm93X2Fzc2lnbjxUJj4gOiBwdWJsaWMgZmFsc2VfdHlw
ZXt9OwotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZFUkVOQ0VTKQotdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBoYXNfbm90aHJvd19hc3NpZ248VCYmPiA6IHB1YmxpYyBm
YWxzZV90eXBle307Ci0jZW5kaWYKLSNpZm5kZWYgQk9PU1RfTk9fQ1ZfVk9JRF9TUEVDSUFMSVpB
VElPTlMKLXRlbXBsYXRlIDw+IHN0cnVjdCBoYXNfbm90aHJvd19hc3NpZ248dm9pZCBjb25zdD4g
OiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGhhc19ub3Rocm93X2Fz
c2lnbjx2b2lkIGNvbnN0IHZvbGF0aWxlPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgaGFzX25vdGhyb3dfYXNzaWduPHZvaWQgdm9sYXRpbGU+IDogcHVibGljIGZh
bHNlX3R5cGV7fTsKLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8g
Qk9PU1RfVFRfSEFTX05PVEhST1dfQVNTSUdOX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX25v
dGhyb3dfY29uc3RydWN0b3IuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX25vdGhyb3dfY29uc3RydWN0b3IuaHBwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTQ3YjFkYjNjZGIyNGMwZGQyYjU3MWFkZjQ1NmYyYzQ5
ZjJjODY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19u
b3Rocm93X2NvbnN0cnVjdG9yLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLQot
Ly8gIChDKSBDb3B5cmlnaHQgU3RldmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywgSG93YXJkIEhpbm5h
bnQgJiBKb2huIE1hZGRvY2sgMjAwMC4KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJp
YnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZl
cnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5
IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAg
U2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50
IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSEFT
X05PVEhST1dfQ09OU1RSVUNUT1JfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0hBU19O
T1RIUk9XX0NPTlNUUlVDVE9SX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4gLy8g
c2l6ZV90Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50cmluc2ljcy5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50ZWdyYWxfY29uc3RhbnQuaHBwPgotCi0jaWZkZWYg
Qk9PU1RfSEFTX05PVEhST1dfQ09OU1RSVUNUT1IKLQotI2lmIGRlZmluZWQoQk9PU1RfTVNWQykg
fHwgZGVmaW5lZChCT09TVF9JTlRFTCkKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9oYXNf
dHJpdmlhbF9jb25zdHJ1Y3Rvci5ocHA+Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fR05VQ19fICkg
fHwgZGVmaW5lZChfX1NVTlBST19DQykgfHwgZGVmaW5lZChfX2NsYW5nX18pCi0jaW5jbHVkZSA8
Ym9vc3QvdHlwZV90cmFpdHMvaXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlLmhwcD4KLSNlbmRpZgot
Ci1uYW1lc3BhY2UgYm9vc3QgewotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGhhc19ub3Ro
cm93X2NvbnN0cnVjdG9yIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIEJPT1NUX0hB
U19OT1RIUk9XX0NPTlNUUlVDVE9SKFQpPnt9OwotCi0jZWxpZiAhZGVmaW5lZChCT09TVF9OT19D
WFgxMV9OT0VYQ0VQVCkKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2RlZmF1bHRf
Y29uc3RydWN0aWJsZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2Fs
bF9leHRlbnRzLmhwcD4KLQotI2lmZGVmIEJPT1NUX01TVkMKLSNwcmFnbWEgd2FybmluZyhwdXNo
KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDE5NykgLy8gdG9wLWxldmVsIHZvbGF0aWxlIGlu
IGNhc3QgaXMgaWdub3JlZAotI2VuZGlmCi0KLW5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBk
ZXRhaWx7Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBib29sIGI+IHN0cnVjdCBoYXNfbm90aHJv
d19jb25zdHJ1Y3Rvcl9pbXAgOiBwdWJsaWMgYm9vc3Q6OmludGVncmFsX2NvbnN0YW50PGJvb2ws
IGZhbHNlPnt9OwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBoYXNfbm90aHJvd19jb25z
dHJ1Y3Rvcl9pbXA8VCwgdHJ1ZT4gOiBwdWJsaWMgYm9vc3Q6OmludGVncmFsX2NvbnN0YW50PGJv
b2wsIG5vZXhjZXB0KFQoKSk+e307Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3Qg
Tj4gc3RydWN0IGhhc19ub3Rocm93X2NvbnN0cnVjdG9yX2ltcDxUW05dLCB0cnVlPiA6IHB1Ymxp
YyBoYXNfbm90aHJvd19jb25zdHJ1Y3Rvcl9pbXA8VCwgdHJ1ZT4ge307Ci19Ci0KLXRlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX25vdGhyb3dfY29uc3RydWN0b3IgOiBwdWJsaWMgZGV0YWls
OjpoYXNfbm90aHJvd19jb25zdHJ1Y3Rvcl9pbXA8VCwgaXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxl
PFQ+Ojp2YWx1ZT57fTsKLQotI2lmZGVmIEJPT1NUX01TVkMKLSNwcmFnbWEgd2FybmluZyhwb3Ap
Ci0jZW5kaWYKLQotI2Vsc2UKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2hhc190cml2
aWFsX2NvbnN0cnVjdG9yLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotdGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCBoYXNfbm90aHJvd19jb25zdHJ1Y3RvciA6IHB1YmxpYyA6OmJvb3N0Ojpo
YXNfdHJpdmlhbF9jb25zdHJ1Y3RvcjxUPiB7fTsKLQotI2VuZGlmCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IGhhc19ub3Rocm93X2NvbnN0cnVjdG9yPHZvaWQ+IDogcHVibGljIGZhbHNlX3R5cGUge307
Ci0jaWZuZGVmIEJPT1NUX05PX0NWX1ZPSURfU1BFQ0lBTElaQVRJT05TCi10ZW1wbGF0ZTw+IHN0
cnVjdCBoYXNfbm90aHJvd19jb25zdHJ1Y3Rvcjx2b2lkIGNvbnN0PiA6IHB1YmxpYyBmYWxzZV90
eXBle307Ci10ZW1wbGF0ZTw+IHN0cnVjdCBoYXNfbm90aHJvd19jb25zdHJ1Y3Rvcjx2b2lkIGNv
bnN0IHZvbGF0aWxlPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZTw+IHN0cnVjdCBo
YXNfbm90aHJvd19jb25zdHJ1Y3Rvcjx2b2lkIHZvbGF0aWxlPiA6IHB1YmxpYyBmYWxzZV90eXBl
e307Ci0jZW5kaWYKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBoYXNfbm90aHJvd19kZWZh
dWx0X2NvbnN0cnVjdG9yIDogcHVibGljIGhhc19ub3Rocm93X2NvbnN0cnVjdG9yPFQ+e307Ci0K
LX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9UVF9IQVNfTk9USFJPV19D
T05TVFJVQ1RPUl9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19ub3Rocm93X2NvcHkuaHBwIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFz
X25vdGhyb3dfY29weS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOWJiMTgz
NzkwMjYxNTc2M2I0MWZlZDVmZTAwYjVmMjEwYzQ5YjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX25vdGhyb3dfY29weS5ocHAKKysrIC9kZXYvbnVsbApA
QCAtMSw4MiArMCwwIEBACi0KLS8vICAoQykgQ29weXJpZ2h0IFN0ZXZlIENsZWFyeSwgQmVtYW4g
RGF3ZXMsIEhvd2FyZCBIaW5uYW50ICYgSm9obiBNYWRkb2NrIDIwMDAuCi0vLyAgVXNlLCBtb2Rp
ZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdh
cmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJh
aXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0j
aWZuZGVmIEJPT1NUX1RUX0hBU19OT1RIUk9XX0NPUFlfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJP
T1NUX1RUX0hBU19OT1RIUk9XX0NPUFlfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxib29zdC90
eXBlX3RyYWl0cy9pbnRyaW5zaWNzLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9p
bnRlZ3JhbF9jb25zdGFudC5ocHA+Ci0KLSNpZmRlZiBCT09TVF9IQVNfTk9USFJPV19DT1BZCi0K
LSNpZiBkZWZpbmVkKEJPT1NUX0NMQU5HKSB8fCBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVk
KF9fZ2hzX18pIHx8IGRlZmluZWQoX19DT0RFR0VBUkNfXykgfHwgZGVmaW5lZChfX1NVTlBST19D
QykKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc192b2xhdGlsZS5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfY29weV9jb25zdHJ1Y3RpYmxlLmhwcD4KLSNpbmNsdWRl
IDxib29zdC90eXBlX3RyYWl0cy9pc19yZWZlcmVuY2UuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5
cGVfdHJhaXRzL2lzX2FycmF5LmhwcD4KLSNpZmRlZiBCT09TVF9JTlRFTAotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2lzX3BvZC5ocHA+Ci0jZW5kaWYKLSNlbGlmIGRlZmluZWQoQk9PU1Rf
TVNWQykgfHwgZGVmaW5lZChCT09TVF9JTlRFTCkKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0
cy9oYXNfdHJpdmlhbF9jb3B5LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19h
cnJheS5ocHA+Ci0jaWZkZWYgQk9PU1RfSU5URUwKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0
cy9hZGRfbHZhbHVlX3JlZmVyZW5jZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
YWRkX2NvbnN0LmhwcD4KLSNlbmRpZgotI2VuZGlmCi0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLXRl
bXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RvciA6IHB1
YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBCT09TVF9IQVNfTk9USFJPV19DT1BZKFQpPnt9
OwotCi0jZWxpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9OT0VYQ0VQVCkKLQotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2RlY2x2YWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2lzX2NvcHlfY29uc3RydWN0aWJsZS5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdHsKLQotbmFt
ZXNwYWNlIGRldGFpbHsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgYj4KLXN0cnVjdCBoYXNf
bm90aHJvd19jb3B5X2NvbnN0cnVjdG9yX2ltcCA6IHB1YmxpYyBib29zdDo6aW50ZWdyYWxfY29u
c3RhbnQ8Ym9vbCwgZmFsc2U+e307Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBoYXNfbm90
aHJvd19jb3B5X2NvbnN0cnVjdG9yX2ltcDxULCB0cnVlPiA6IHB1YmxpYyBib29zdDo6aW50ZWdy
YWxfY29uc3RhbnQ8Ym9vbCwgbm9leGNlcHQoVChib29zdDo6ZGVjbHZhbDxjb25zdCBUJj4oKSkp
Pnt9OwotCi19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX25vdGhyb3dfY29weV9j
b25zdHJ1Y3RvciA6IHB1YmxpYyBkZXRhaWw6Omhhc19ub3Rocm93X2NvcHlfY29uc3RydWN0b3Jf
aW1wPFQsIGJvb3N0Ojppc19jb3B5X2NvbnN0cnVjdGlibGU8VD46OnZhbHVlPnt9OwotCi0jZWxz
ZQotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaGFzX3RyaXZpYWxfY29weS5ocHA+Ci0K
LW5hbWVzcGFjZSBib29zdHsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBoYXNfbm90aHJv
d19jb3B5X2NvbnN0cnVjdG9yIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIDo6Ym9v
c3Q6Omhhc190cml2aWFsX2NvcHk8VD46OnZhbHVlPnt9OwotCi0jZW5kaWYKLQotdGVtcGxhdGUg
PD4gc3RydWN0IGhhc19ub3Rocm93X2NvcHlfY29uc3RydWN0b3I8dm9pZD4gOiBwdWJsaWMgZmFs
c2VfdHlwZXt9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBoYXNfbm90aHJvd19jb3B5X2Nv
bnN0cnVjdG9yPFQgdm9sYXRpbGU+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDxj
bGFzcyBUPiBzdHJ1Y3QgaGFzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RvcjxUJj4gOiBwdWJsaWMg
ZmFsc2VfdHlwZXt9OwotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZFUkVO
Q0VTKSAKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX25vdGhyb3dfY29weV9jb25zdHJ1
Y3RvcjxUJiY+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLSNlbmRpZgotI2lmbmRlZiBCT09TVF9O
T19DVl9WT0lEX1NQRUNJQUxJWkFUSU9OUwotdGVtcGxhdGUgPD4gc3RydWN0IGhhc19ub3Rocm93
X2NvcHlfY29uc3RydWN0b3I8dm9pZCBjb25zdD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVt
cGxhdGUgPD4gc3RydWN0IGhhc19ub3Rocm93X2NvcHlfY29uc3RydWN0b3I8dm9pZCB2b2xhdGls
ZT4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGhhc19ub3Rocm93
X2NvcHlfY29uc3RydWN0b3I8dm9pZCBjb25zdCB2b2xhdGlsZT4gOiBwdWJsaWMgZmFsc2VfdHlw
ZXt9OwotI2VuZGlmCi0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX25vdGhyb3dfY29w
eSA6IHB1YmxpYyBoYXNfbm90aHJvd19jb3B5X2NvbnN0cnVjdG9yPFQ+e307Ci0KLX0gLy8gbmFt
ZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9UVF9IQVNfTk9USFJPV19DT1BZX0hQUF9J
TkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvdHlwZV90cmFpdHMvaGFzX25vdGhyb3dfZGVzdHJ1Y3Rvci5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfbm90aHJvd19k
ZXN0cnVjdG9yLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE3MGU4OTEwZTJk
MzBkYmIxZGUzZDNmMDZlZGFhYmMxZjAzNDg2Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC90eXBlX3RyYWl0cy9oYXNfbm90aHJvd19kZXN0cnVjdG9yLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQ3ICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgU3RldmUgQ2xlYXJ5LCBCZW1h
biBEYXdlcywgSG93YXJkIEhpbm5hbnQgJiBKb2huIE1hZGRvY2sgMjAwMC4KLS8vICBVc2UsIG1v
ZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0
d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJ
Q0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5T
RV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90
cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0K
LSNpZm5kZWYgQk9PU1RfVFRfSEFTX05PVEhST1dfREVTVFJVQ1RPUl9IUFBfSU5DTFVERUQKLSNk
ZWZpbmUgQk9PU1RfVFRfSEFTX05PVEhST1dfREVTVFJVQ1RPUl9IUFBfSU5DTFVERUQKLQotI2lu
Y2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2hhc190cml2aWFsX2Rlc3RydWN0b3IuaHBwPgotCi0j
aWYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfTk9FWENFUFQpICYmICFkZWZpbmVkKF9fU1VOUFJP
X0NDKSAmJiAhKGRlZmluZWQoQk9PU1RfTVNWQykgJiYgKF9NU0NfRlVMTF9WRVIgPCAxOTAwMjM1
MDYpKQotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGVjbHZhbC5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfZGVzdHJ1Y3RpYmxlLmhwcD4KLQotbmFtZXNwYWNlIGJv
b3N0ewotCi0gICBuYW1lc3BhY2UgZGV0YWlsewotCi0gICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Ym9vbCBiPgotICAgICAgc3RydWN0IGhhc19ub3Rocm93X2Rlc3RydWN0b3JfaW1wIDogcHVibGlj
IGJvb3N0OjppbnRlZ3JhbF9jb25zdGFudDxib29sLCBmYWxzZT57fTsKLSAgICAgIHRlbXBsYXRl
IDxjbGFzcyBUPgotICAgICAgc3RydWN0IGhhc19ub3Rocm93X2Rlc3RydWN0b3JfaW1wPFQsIHRy
dWU+IDogcHVibGljIGJvb3N0OjppbnRlZ3JhbF9jb25zdGFudDxib29sLCBub2V4Y2VwdChib29z
dDo6ZGVjbHZhbDxUKiY+KCktPn5UKCkpPnt9OwotCi0gICB9Ci0KLSAgIHRlbXBsYXRlIDxjbGFz
cyBUPiBzdHJ1Y3QgaGFzX25vdGhyb3dfZGVzdHJ1Y3RvciA6IHB1YmxpYyBkZXRhaWw6Omhhc19u
b3Rocm93X2Rlc3RydWN0b3JfaW1wPFQsIGJvb3N0Ojppc19kZXN0cnVjdGlibGU8VD46OnZhbHVl
Pnt9OwotICAgdGVtcGxhdGUgPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IE4+IHN0cnVjdCBoYXNfbm90
aHJvd19kZXN0cnVjdG9yPFRbTl0+IDogcHVibGljIGhhc19ub3Rocm93X2Rlc3RydWN0b3I8VD57
fTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX25vdGhyb3dfZGVzdHJ1Y3RvcjxU
Jj4gOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgZmFsc2U+e307Ci0jaWYgIWRlZmlu
ZWQoQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMpIAotICAgdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBoYXNfbm90aHJvd19kZXN0cnVjdG9yPFQmJj4gOiBwdWJsaWMgaW50ZWdyYWxf
Y29uc3RhbnQ8Ym9vbCwgZmFsc2U+e307Ci0jZW5kaWYKLX0KLSNlbHNlCi0KLW5hbWVzcGFjZSBi
b29zdCB7Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX25vdGhyb3dfZGVzdHJ1Y3Rv
ciA6IHB1YmxpYyA6OmJvb3N0OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPFQ+IHt9OwotCi19IC8v
IG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYKLQotI2VuZGlmIC8vIEJPT1NUX1RUX0hBU19OT1RI
Uk9XX0RFU1RSVUNUT1JfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfcGx1cy5ocHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfcGx1
cy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNzkzMjg4NGQyZWNkMmMwYTA5
YzZkNzMxYWRmNDdkMDIwYzI2NzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlw
ZV90cmFpdHMvaGFzX3BsdXMuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLy8g
IChDKSBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWRlcmljIEJyb24uCi0vLwotLy8gIFVzZSwgbW9k
aWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3Ry
YWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQot
I2lmbmRlZiBCT09TVF9UVF9IQVNfUExVU19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRf
SEFTX1BMVVNfSFBQX0lOQ0xVREVECi0KLSNkZWZpbmUgQk9PU1RfVFRfVFJBSVRfTkFNRSBoYXNf
cGx1cwotI2RlZmluZSBCT09TVF9UVF9UUkFJVF9PUCArCi0jZGVmaW5lIEJPT1NUX1RUX0ZPUkJJ
RERFTl9JRlwKLSAgIChcCi0gICAgICAvKiBMaHM9PXBvaW50ZXIgYW5kIFJocz09cG9pbnRlciAq
L1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBMaHNfbm9yZWYgPjo6
dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25vcmVmID46OnZh
bHVlXAotICAgICAgKSB8fCBcCi0gICAgICAvKiBMaHM9PXZvaWQqIGFuZCBSaHM9PWZ1bmRhbWVu
dGFsICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3Jl
ZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc192b2lkPCBMaHNfbm9wdHIgPjo6
dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2ID46
OnZhbHVlXAotICAgICAgKSB8fCBcCi0gICAgICAvKiBSaHM9PXZvaWQqIGFuZCBMaHM9PWZ1bmRh
bWVudGFsICovXAotICAgICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IFJoc19u
b3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc192b2lkPCBSaHNfbm9wdHIg
Pjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IExoc19ub2N2
ID46OnZhbHVlXAotICAgICAgKSB8fCBcCi0gICAgICAvKiBMaHM9PXBvaW50ZXIgYW5kIFJocz09
ZnVuZGFtZW50YWwgYW5kIFJocyE9aW50ZWdyYWwgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpi
b29zdDo6aXNfcG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9v
c3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICAoISAg
Ojpib29zdDo6aXNfaW50ZWdyYWw8IFJoc19ub3JlZiA+Ojp2YWx1ZSApXAotICAgICAgKSB8fCBc
Ci0gICAgICAvKiBSaHM9PXBvaW50ZXIgYW5kIExocz09ZnVuZGFtZW50YWwgYW5kIExocyE9aW50
ZWdyYWwgKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25v
cmVmID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBMaHNf
bm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAgICAoISAgOjpib29zdDo6aXNfaW50ZWdyYWw8IExo
c19ub3JlZiA+Ojp2YWx1ZSApXAotICAgICAgKVwKLSAgICkKLQotCi0jaW5jbHVkZSA8Ym9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL2hhc19iaW5hcnlfb3BlcmF0b3IuaHBwPgotCi0jdW5kZWYgQk9P
U1RfVFRfVFJBSVRfTkFNRQotI3VuZGVmIEJPT1NUX1RUX1RSQUlUX09QCi0jdW5kZWYgQk9PU1Rf
VFRfRk9SQklEREVOX0lGCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX3BsdXNfYXNzaWduLmhwcCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hh
c19wbHVzX2Fzc2lnbi5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZjZmMjMy
ODkyM2IwM2Q0ODQwNmNjNTNmNjRkNDU3ZTdiMjBmODguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX3BsdXNfYXNzaWduLmhwcAorKysgL2Rldi9udWxsCkBA
IC0xLDY2ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVkZXJpYyBCcm9u
LgotLy8KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0
IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3
dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5n
IGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSEFTX1BMVVNfQVNTSUdOX0hQUF9J
TkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9IQVNfUExVU19BU1NJR05fSFBQX0lOQ0xVREVECi0K
LSNkZWZpbmUgQk9PU1RfVFRfVFJBSVRfTkFNRSBoYXNfcGx1c19hc3NpZ24KLSNkZWZpbmUgQk9P
U1RfVFRfVFJBSVRfT1AgKz0KLSNkZWZpbmUgQk9PU1RfVFRfRk9SQklEREVOX0lGXAotICAgKFwK
LSAgICAgIC8qIExocz09cG9pbnRlciBhbmQgUmhzPT1wb2ludGVyICovXAotICAgICAgKFwKLSAg
ICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAg
ICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICApIHx8
IFwKLSAgICAgIC8qIExocz09dm9pZCogYW5kIFJocz09ZnVuZGFtZW50YWwgKi9cCi0gICAgICAo
XAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgTGhzX25vcmVmID46OnZhbHVlICYmIFwK
LSAgICAgICAgIDo6Ym9vc3Q6OmlzX3ZvaWQ8IExoc19ub3B0ciA+Ojp2YWx1ZSAmJiBcCi0gICAg
ICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgUmhzX25vY3YgPjo6dmFsdWVcCi0gICAgICAp
IHx8IFwKLSAgICAgIC8qIFJocz09dm9pZCogYW5kIExocz09ZnVuZGFtZW50YWwgKi9cCi0gICAg
ICAoXAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25vcmVmID46OnZhbHVlICYm
IFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3ZvaWQ8IFJoc19ub3B0ciA+Ojp2YWx1ZSAmJiBcCi0g
ICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25vY3YgPjo6dmFsdWVcCi0gICAg
ICApIHx8IFwKLSAgICAgIC8qIExocz09cG9pbnRlciBhbmQgUmhzPT1mdW5kYW1lbnRhbCBhbmQg
UmhzIT1pbnRlZ3JhbCAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVy
PCBMaHNfbm9yZWYgPjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50
YWw8IFJoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAgICghICA6OmJvb3N0Ojppc19pbnRl
Z3JhbDwgUmhzX25vcmVmID46OnZhbHVlIClcCi0gICAgICApIHx8IFwKLSAgICAgIC8qIFJocz09
cG9pbnRlciBhbmQgTGhzPT1mdW5kYW1lbnRhbCBhbmQgTGhzIT1ib29sICovXAotICAgICAgKFwK
LSAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IFJoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0g
ICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25vY3YgPjo6dmFsdWUgJiYgXAot
ICAgICAgICAgKCEgIDo6Ym9vc3Q6OmlzX3NhbWU8IExoc19ub2N2LCBib29sID46OnZhbHVlIClc
Ci0gICAgICApIHx8IFwKLSAgICAgIC8qIChMaHM9PWZ1bmRhbWVudGFsIG9yIExocz09cG9pbnRl
cikgYW5kIChSaHM9PWZ1bmRhbWVudGFsIG9yIFJocz09cG9pbnRlcikgYW5kIChMaHM9PWNvbnN0
KSAqL1wKLSAgICAgIChcCi0gICAgICAgICAoXAotICAgICAgICAgICAgOjpib29zdDo6aXNfZnVu
ZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlIHx8IFwKLSAgICAgICAgICAgIDo6Ym9vc3Q6Omlz
X3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgICAgICApICYmIFwKLSAgICAgICAg
ICggXAotICAgICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2ID46OnZh
bHVlIHx8IFwKLSAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IFJoc19ub3JlZiA+Ojp2
YWx1ZVwKLSAgICAgICAgICApICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2NvbnN0PCBMaHNf
bm9yZWYgPjo6dmFsdWVcCi0gICAgICApXAotICAgICAgKQotCi0KLSNpbmNsdWRlIDxib29zdC90
eXBlX3RyYWl0cy9kZXRhaWwvaGFzX2JpbmFyeV9vcGVyYXRvci5ocHA+Ci0KLSN1bmRlZiBCT09T
VF9UVF9UUkFJVF9OQU1FCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfT1AKLSN1bmRlZiBCT09TVF9U
VF9GT1JCSURERU5fSUYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfcG9zdF9kZWNyZW1lbnQuaHBw
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMv
aGFzX3Bvc3RfZGVjcmVtZW50LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNm
OThmZmYxY2I5MTM5NDg4NjBlODRhYjM0MjA0NTE4MDJkZGU0NS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfcG9zdF9kZWNyZW1lbnQuaHBwCisrKyAvZGV2
L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWRl
cmljIEJyb24uCi0vLwotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJl
IHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAu
IChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDov
L3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBp
bmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9IQVNfUE9TVF9ERUNS
RU1FTlRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0hBU19QT1NUX0RFQ1JFTUVOVF9I
UFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5LmhwcD4K
LQotI2RlZmluZSBCT09TVF9UVF9UUkFJVF9OQU1FIGhhc19wb3N0X2RlY3JlbWVudAotI2RlZmlu
ZSBCT09TVF9UVF9UUkFJVF9PUCAtLQotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0g
ICAoXAotICAgICAgLyogYm9vbCAqL1wKLSAgICAgIDo6Ym9vc3Q6OmlzX3NhbWU8IGJvb2wsIExo
c19ub2N2ID46OnZhbHVlIHx8IFwKLSAgICAgIC8qIHZvaWQqICovXAotICAgICAgKFwKLSAgICAg
ICAgIDo6Ym9vc3Q6OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZSAmJiBcCi0gICAgICAg
ICA6OmJvb3N0Ojppc192b2lkPCBMaHNfbm9wdHIgPjo6dmFsdWVcCi0gICAgICApIHx8IFwKLSAg
ICAgIC8qIChmdW5kYW1lbnRhbCBvciBwb2ludGVyKSBhbmQgY29uc3QgKi9cCi0gICAgICAoXAot
ICAgICAgICAgKCBcCi0gICAgICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25v
Y3YgPjo6dmFsdWUgfHwgXAotICAgICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgTGhzX25v
cmVmID46OnZhbHVlXAotICAgICAgICAgKSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19jb25z
dDwgTGhzX25vcmVmID46OnZhbHVlXAotICAgICAgKXx8XAotICAgICAgLyogQXJyYXlzICovIFwK
LSAgICAgIDo6Ym9vc3Q6OmlzX2FycmF5PExoc19ub3JlZj46OnZhbHVlXAotICAgICAgKQotCi0K
LSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaGFzX3Bvc3RmaXhfb3BlcmF0b3Iu
aHBwPgotCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfTkFNRQotI3VuZGVmIEJPT1NUX1RUX1RSQUlU
X09QCi0jdW5kZWYgQk9PU1RfVFRfRk9SQklEREVOX0lGCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFz
X3Bvc3RfaW5jcmVtZW50LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19wb3N0X2luY3JlbWVudC5ocHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDM4NjFhMmJiZGUyNWViZTcxMDEzZTMxZGIxMzBjYzNjZjY4YjU3MGMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX3Bvc3RfaW5j
cmVtZW50LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8vICAoQykgQ29weXJp
Z2h0IDIwMDktMjAxMSBGcmVkZXJpYyBCcm9uLgotLy8KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBh
bmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNl
LAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4K
LS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1v
c3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9P
U1RfVFRfSEFTX1BPU1RfSU5DUkVNRU5UX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9I
QVNfUE9TVF9JTkNSRU1FTlRfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9pc19hcnJheS5ocHA+Ci0KLSNkZWZpbmUgQk9PU1RfVFRfVFJBSVRfTkFNRSBoYXNfcG9z
dF9pbmNyZW1lbnQKLSNkZWZpbmUgQk9PU1RfVFRfVFJBSVRfT1AgKysKLSNkZWZpbmUgQk9PU1Rf
VFRfRk9SQklEREVOX0lGXAotICAgKFwKLSAgICAgIC8qIGJvb2wgKi9cCi0gICAgICA6OmJvb3N0
Ojppc19zYW1lPCBib29sLCBMaHNfbm9jdiA+Ojp2YWx1ZSB8fCBcCi0gICAgICAvKiB2b2lkKiAq
L1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBMaHNfbm9yZWYgPjo6
dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfdm9pZDwgTGhzX25vcHRyID46OnZhbHVl
XAotICAgICAgKSB8fCBcCi0gICAgICAvKiAoZnVuZGFtZW50YWwgb3IgcG9pbnRlcikgYW5kIGNv
bnN0ICovXAotICAgICAgKFwKLSAgICAgICAgICggXAotICAgICAgICAgICAgOjpib29zdDo6aXNf
ZnVuZGFtZW50YWw8IExoc19ub2N2ID46OnZhbHVlIHx8IFwKLSAgICAgICAgICAgIDo6Ym9vc3Q6
OmlzX3BvaW50ZXI8IExoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgICAgICkgJiYgXAotICAgICAg
ICAgOjpib29zdDo6aXNfY29uc3Q8IExoc19ub3JlZiA+Ojp2YWx1ZVwKLSAgICAgICl8fFwKLSAg
ICAgIC8qIEFycmF5cyAqLyBcCi0gICAgICA6OmJvb3N0Ojppc19hcnJheTxMaHNfbm9yZWY+Ojp2
YWx1ZVwKLSAgICAgICkKLQotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2hh
c19wb3N0Zml4X29wZXJhdG9yLmhwcD4KLQotI3VuZGVmIEJPT1NUX1RUX1RSQUlUX05BTUUKLSN1
bmRlZiBCT09TVF9UVF9UUkFJVF9PUAotI3VuZGVmIEJPT1NUX1RUX0ZPUkJJRERFTl9JRgotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3R5cGVfdHJhaXRzL2hhc19wcmVfZGVjcmVtZW50LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19wcmVfZGVjcmVtZW50Lmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VmMDc4MzI5YjI1ZTliODk5Y2M0MmM5
NjMwY2M0ZDYxZWE2ODI1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3Ry
YWl0cy9oYXNfcHJlX2RlY3JlbWVudC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBA
Ci0vLyAgKEMpIENvcHlyaWdodCAyMDA5LTIwMTEgRnJlZGVyaWMgQnJvbi4KLS8vCi0vLyAgVXNl
LCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5
cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9u
LgotCi0jaWZuZGVmIEJPT1NUX1RUX0hBU19QUkVfREVDUkVNRU5UX0hQUF9JTkNMVURFRAotI2Rl
ZmluZSBCT09TVF9UVF9IQVNfUFJFX0RFQ1JFTUVOVF9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5LmhwcD4KLQotI2RlZmluZSBCT09TVF9UVF9UUkFJ
VF9OQU1FIGhhc19wcmVfZGVjcmVtZW50Ci0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX09QIC0tCi0j
ZGVmaW5lIEJPT1NUX1RUX0ZPUkJJRERFTl9JRlwKLSAgIChcCi0gICAgICAvKiBib29sICovXAot
ICAgICAgOjpib29zdDo6aXNfc2FtZTwgYm9vbCwgUmhzX25vY3YgPjo6dmFsdWUgfHwgXAotICAg
ICAgLyogdm9pZCogKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwg
UmhzX25vcmVmID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX3ZvaWQ8IFJoc19u
b3B0ciA+Ojp2YWx1ZVwKLSAgICAgICkgfHwgXAotICAgICAgLyogKGZ1bmRhbWVudGFsIG9yIHBv
aW50ZXIpIGFuZCBjb25zdCAqL1wKLSAgICAgIChcCi0gICAgICAgICAoIFwKLSAgICAgICAgICAg
IDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSB8fCBcCi0gICAgICAg
ICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICAgICAp
ICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2NvbnN0PCBSaHNfbm9yZWYgPjo6dmFsdWVcCi0g
ICAgICApfHxcCi0gICAgICAvKiBBcnJheXMgKi8gXAotICAgICAgOjpib29zdDo6aXNfYXJyYXk8
UmhzX25vcmVmPjo6dmFsdWVcCi0gICAgICApCi0KLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2RldGFpbC9oYXNfcHJlZml4X29wZXJhdG9yLmhwcD4KLQotI3VuZGVmIEJPT1NUX1RUX1RS
QUlUX05BTUUKLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9PUAotI3VuZGVmIEJPT1NUX1RUX0ZPUkJJ
RERFTl9JRgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19wcmVfaW5jcmVtZW50LmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19wcmVf
aW5jcmVtZW50LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRjOTczNDg3Yzgz
ZTdkMzE4MDYzZjIyY2YxM2VlMzYxODA3OTY4ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC90eXBlX3RyYWl0cy9oYXNfcHJlX2luY3JlbWVudC5ocHAKKysrIC9kZXYvbnVsbApAQCAt
MSw0NCArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCAyMDA5LTIwMTEgRnJlZGVyaWMgQnJvbi4K
LS8vCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0
byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBk
b2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX0hBU19QUkVfSU5DUkVNRU5UX0hQUF9J
TkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9IQVNfUFJFX0lOQ1JFTUVOVF9IUFBfSU5DTFVERUQK
LQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5LmhwcD4KLQotI2RlZmluZSBC
T09TVF9UVF9UUkFJVF9OQU1FIGhhc19wcmVfaW5jcmVtZW50Ci0jZGVmaW5lIEJPT1NUX1RUX1RS
QUlUX09QICsrCi0jZGVmaW5lIEJPT1NUX1RUX0ZPUkJJRERFTl9JRlwKLSAgIChcCi0gICAgICAv
KiBib29sICovXAotICAgICAgOjpib29zdDo6aXNfc2FtZTwgYm9vbCwgUmhzX25vY3YgPjo6dmFs
dWUgfHwgXAotICAgICAgLyogdm9pZCogKi9cCi0gICAgICAoXAotICAgICAgICAgOjpib29zdDo6
aXNfcG9pbnRlcjwgUmhzX25vcmVmID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6Omlz
X3ZvaWQ8IFJoc19ub3B0ciA+Ojp2YWx1ZVwKLSAgICAgICkgfHwgXAotICAgICAgLyogKGZ1bmRh
bWVudGFsIG9yIHBvaW50ZXIpIGFuZCBjb25zdCAqL1wKLSAgICAgIChcCi0gICAgICAgICAoIFwK
LSAgICAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSB8
fCBcCi0gICAgICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBSaHNfbm9yZWYgPjo6dmFsdWVc
Ci0gICAgICAgICApICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2NvbnN0PCBSaHNfbm9yZWYg
Pjo6dmFsdWVcCi0gICAgICApfHxcCi0gICAgICAvKiBBcnJheXMgKi8gXAotICAgICAgOjpib29z
dDo6aXNfYXJyYXk8UmhzX25vcmVmPjo6dmFsdWVcCi0gICAgICApCi0KLQotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9oYXNfcHJlZml4X29wZXJhdG9yLmhwcD4KLQotI3VuZGVm
IEJPT1NUX1RUX1RSQUlUX05BTUUKLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9PUAotI3VuZGVmIEJP
T1NUX1RUX0ZPUkJJRERFTl9JRgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19yaWdodF9zaGlmdC5o
cHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0
cy9oYXNfcmlnaHRfc2hpZnQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTYy
OTExMjMzMjlhNjAyNWY0NGY5ZGNiNDllZTJjYTgzMDExYzE0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc19yaWdodF9zaGlmdC5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSw0OSArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCAyMDA5LTIwMTEgRnJlZGVyaWMg
QnJvbi4KLS8vCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3Vi
amVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNl
ZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1
ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX0hBU19SSUdIVF9TSElGVF9I
UFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSEFTX1JJR0hUX1NISUZUX0hQUF9JTkNMVURF
RAotCi0jZGVmaW5lIEJPT1NUX1RUX1RSQUlUX05BTUUgaGFzX3JpZ2h0X3NoaWZ0Ci0jZGVmaW5l
IEJPT1NUX1RUX1RSQUlUX09QID4+Ci0jZGVmaW5lIEJPT1NUX1RUX0ZPUkJJRERFTl9JRlwKLSAg
IChcCi0gICAgICAvKiBMaHM9PWZ1bmRhbWVudGFsIGFuZCBSaHM9PWZ1bmRhbWVudGFsIGFuZCAo
TGhzIT1pbnRlZ3JhbCBvciBSaHMhPWludGVncmFsKSAqL1wKLSAgICAgIChcCi0gICAgICAgICA6
OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25vY3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAg
Ojpib29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAg
ICggXAotICAgICAgICAgICAgKCEgIDo6Ym9vc3Q6OmlzX2ludGVncmFsPCBMaHNfbm9yZWYgPjo6
dmFsdWUgKSB8fCBcCi0gICAgICAgICAgICAoISAgOjpib29zdDo6aXNfaW50ZWdyYWw8IFJoc19u
b3JlZiA+Ojp2YWx1ZSApXAotICAgICAgICAgKVwKLSAgICAgICl8fFwKLSAgICAgIC8qIExocz09
ZnVuZGFtZW50YWwgYW5kIFJocz09cG9pbnRlciAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJv
b3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25vY3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpi
b29zdDo6aXNfcG9pbnRlcjwgUmhzX25vcmVmID46OnZhbHVlXAotICAgICAgKXx8XAotICAgICAg
LyogUmhzPT1mdW5kYW1lbnRhbCBhbmQgTGhzPT1wb2ludGVyICovXAotICAgICAgKFwKLSAgICAg
ICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1ZSAmJiBcCi0gICAg
ICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBMaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICApfHxc
Ci0gICAgICAvKiBMaHM9PXBvaW50ZXIgYW5kIFJocz09cG9pbnRlciAqL1wKLSAgICAgIChcCi0g
ICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBMaHNfbm9yZWYgPjo6dmFsdWUgJiYgXAotICAg
ICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25vcmVmID46OnZhbHVlXAotICAgICAgKVwK
LSAgICAgICkKLQotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2hhc19iaW5h
cnlfb3BlcmF0b3IuaHBwPgotCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfTkFNRQotI3VuZGVmIEJP
T1NUX1RUX1RSQUlUX09QCi0jdW5kZWYgQk9PU1RfVFRfRk9SQklEREVOX0lGCi0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlw
ZV90cmFpdHMvaGFzX3JpZ2h0X3NoaWZ0X2Fzc2lnbi5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfcmlnaHRfc2hpZnRfYXNzaWdu
LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUyYzI2MzU1OWZlYmY3NDk3MzQ5
YThlYTQwYjgwZjk5YWEyOGU4Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBl
X3RyYWl0cy9oYXNfcmlnaHRfc2hpZnRfYXNzaWduLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1
ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVkZXJpYyBCcm9uLgotLy8K
LS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3Vt
ZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSEFTX1JJR0hUX1NISUZUX0FTU0lHTl9IUFBf
SU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSEFTX1JJR0hUX1NISUZUX0FTU0lHTl9IUFBfSU5D
TFVERUQKLQotI2RlZmluZSBCT09TVF9UVF9UUkFJVF9OQU1FIGhhc19yaWdodF9zaGlmdF9hc3Np
Z24KLSNkZWZpbmUgQk9PU1RfVFRfVFJBSVRfT1AgPj49Ci0jZGVmaW5lIEJPT1NUX1RUX0ZPUkJJ
RERFTl9JRlwKLSAgIChcCi0gICAgICAvKiBMaHM9PWZ1bmRhbWVudGFsIGFuZCBSaHM9PWZ1bmRh
bWVudGFsIGFuZCAoTGhzIT1pbnRlZ3JhbCBvciBSaHMhPWludGVncmFsKSAqL1wKLSAgICAgIChc
Ci0gICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25vY3YgPjo6dmFsdWUgJiYg
XAotICAgICAgICAgOjpib29zdDo6aXNfZnVuZGFtZW50YWw8IFJoc19ub2N2ID46OnZhbHVlICYm
IFwKLSAgICAgICAgICggXAotICAgICAgICAgICAgKCEgIDo6Ym9vc3Q6OmlzX2ludGVncmFsPCBM
aHNfbm9yZWYgPjo6dmFsdWUgKSB8fCBcCi0gICAgICAgICAgICAoISAgOjpib29zdDo6aXNfaW50
ZWdyYWw8IFJoc19ub3JlZiA+Ojp2YWx1ZSApXAotICAgICAgICAgKVwKLSAgICAgICl8fFwKLSAg
ICAgIC8qIExocz09ZnVuZGFtZW50YWwgYW5kIFJocz09cG9pbnRlciAqL1wKLSAgICAgIChcCi0g
ICAgICAgICA6OmJvb3N0Ojppc19mdW5kYW1lbnRhbDwgTGhzX25vY3YgPjo6dmFsdWUgJiYgXAot
ICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25vcmVmID46OnZhbHVlXAotICAgICAg
KXx8XAotICAgICAgLyogUmhzPT1mdW5kYW1lbnRhbCBhbmQgTGhzPT1wb2ludGVyICovXAotICAg
ICAgKFwKLSAgICAgICAgIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPCBSaHNfbm9jdiA+Ojp2YWx1
ZSAmJiBcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBMaHNfbm9yZWYgPjo6dmFsdWVc
Ci0gICAgICApfHxcCi0gICAgICAvKiBMaHM9PXBvaW50ZXIgYW5kIFJocz09cG9pbnRlciAqL1wK
LSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19wb2ludGVyPCBMaHNfbm9yZWYgPjo6dmFs
dWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25vcmVmID46OnZhbHVl
XAotICAgICAgKXx8XAotICAgICAgLyogTGhzPT1mdW5kYW1lbnRhbCBhbmQgUmhzPT1mdW5kYW1l
bnRhbCBhbmQgTGhzPT1jb25zdCAqL1wKLSAgICAgIChcCi0gICAgICAgICA6OmJvb3N0Ojppc19m
dW5kYW1lbnRhbDwgTGhzX25vY3YgPjo6dmFsdWUgJiYgXAotICAgICAgICAgOjpib29zdDo6aXNf
ZnVuZGFtZW50YWw8IFJoc19ub2N2ID46OnZhbHVlICYmIFwKLSAgICAgICAgIDo6Ym9vc3Q6Omlz
X2NvbnN0PCBMaHNfbm9yZWYgPjo6dmFsdWVcCi0gICAgICApXAotICAgICAgKQotCi0KLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaGFzX2JpbmFyeV9vcGVyYXRvci5ocHA+Ci0K
LSN1bmRlZiBCT09TVF9UVF9UUkFJVF9OQU1FCi0jdW5kZWYgQk9PU1RfVFRfVFJBSVRfT1AKLSN1
bmRlZiBCT09TVF9UVF9GT1JCSURERU5fSUYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlh
bF9hc3NpZ24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
dHlwZV90cmFpdHMvaGFzX3RyaXZpYWxfYXNzaWduLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTViOTE3ZTcxNjkwMTYxMjE5ZmQ5MWMzNDBmNTMxZDIwZjRlOWNiNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9hc3NpZ24u
aHBwCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotCi0vLyAgKEMpIENvcHlyaWdodCBT
dGV2ZSBDbGVhcnksIEJlbWFuIERhd2VzLCBIb3dhcmQgSGlubmFudCAmIEpvaG4gTWFkZG9jayAy
MDAwLgotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3Qg
dG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNj
b21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29z
dC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcg
ZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9IQVNfVFJJVklBTF9BU1NJR05fSFBQ
X0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0hBU19UUklWSUFMX0FTU0lHTl9IUFBfSU5DTFVE
RUQKLQotI2luY2x1ZGUgPGNzdGRkZWY+IC8vIHNpemVfdAotI2luY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2RldGFpbC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lu
dHJpbnNpY3MuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludGVncmFsX2NvbnN0
YW50LmhwcD4KLQotI2lmICFkZWZpbmVkKEJPT1NUX0hBU19UUklWSUFMX0FTU0lHTikgfHwgZGVm
aW5lZChCT09TVF9NU1ZDKSB8fCBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKEJPT1NUX0lO
VEVMKSB8fCBkZWZpbmVkKF9fU1VOUFJPX0NDKSB8fCBkZWZpbmVkKF9fY2xhbmdfXykKLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19wb2QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2lzX2NvbnN0LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc192b2xh
dGlsZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfYXNzaWduYWJsZS5ocHA+
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci0gICBzdHJ1Y3QgaGFzX3RyaXZpYWxfYXNzaWduIDogcHVibGljIGludGVncmFsX2NvbnN0YW50
IDwgYm9vbCwKLSNpZmRlZiBCT09TVF9IQVNfVFJJVklBTF9BU1NJR04KLSAgICAgIEJPT1NUX0hB
U19UUklWSUFMX0FTU0lHTihUKQotI2Vsc2UKLSAgICAgIDo6Ym9vc3Q6OmlzX3BvZDxUPjo6dmFs
dWUgJiYgITo6Ym9vc3Q6OmlzX2NvbnN0PFQ+Ojp2YWx1ZSAmJiAhOjpib29zdDo6aXNfdm9sYXRp
bGU8VD46OnZhbHVlCi0jZW5kaWYKLSAgID4ge307Ci0KLSAgIHRlbXBsYXRlPD4gc3RydWN0IGhh
c190cml2aWFsX2Fzc2lnbjx2b2lkPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci0jaWZuZGVmIEJP
T1NUX05PX0NWX1ZPSURfU1BFQ0lBTElaQVRJT05TCi0gICB0ZW1wbGF0ZTw+IHN0cnVjdCBoYXNf
dHJpdmlhbF9hc3NpZ248dm9pZCBjb25zdD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgaGFzX3RyaXZpYWxfYXNzaWduPHZvaWQgY29uc3Qgdm9sYXRpbGU+IDog
cHVibGljIGZhbHNlX3R5cGV7fTsKLSAgIHRlbXBsYXRlPD4gc3RydWN0IGhhc190cml2aWFsX2Fz
c2lnbjx2b2lkIHZvbGF0aWxlPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci0jZW5kaWYKLSAgIHRl
bXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfYXNzaWduPFQgdm9sYXRpbGU+IDog
cHVibGljIGZhbHNlX3R5cGV7fTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX3Ry
aXZpYWxfYXNzaWduPFQmPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci0jaWYgIWRlZmluZWQoQk9P
U1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMpCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3Ry
dWN0IGhhc190cml2aWFsX2Fzc2lnbjxUJiY+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLSNlbmRp
ZgotICAgLy8gQXJyYXlzIGFyZSBub3QgZXhwbGljdGx5IGFzc2lnbmFibGU6Ci0gICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTj4gc3RydWN0IGhhc190cml2aWFsX2Fzc2lnbjxU
W05dPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci0gICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3Ry
dWN0IGhhc190cml2aWFsX2Fzc2lnbjxUW10+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLQotfSAv
LyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1RUX0hBU19UUklWSUFMX0FTU0lH
Tl9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc190cml2aWFsX2NvbnN0cnVjdG9yLmhwcCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc190
cml2aWFsX2NvbnN0cnVjdG9yLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZj
MTM3ZDFkZWM2YzRiNzc5MWFkZjU5ZjcyY2MwNDQ4ZWNjYjRjMC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9jb25zdHJ1Y3Rvci5ocHAKKysr
IC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0KLS8vICAoQykgQ29weXJpZ2h0IFN0ZXZlIENs
ZWFyeSwgQmVtYW4gRGF3ZXMsIEhvd2FyZCBIaW5uYW50ICYgSm9obiBNYWRkb2NrIDIwMDAuCi0v
LyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVu
dGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX0hBU19UUklWSUFMX0NPTlNUUlVDVE9SX0hQUF9J
TkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9IQVNfVFJJVklBTF9DT05TVFJVQ1RPUl9IUFBfSU5D
TFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludHJpbnNpY3MuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3BvZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlw
ZV90cmFpdHMvaXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlLmhwcD4KLQotI2lmZGVmIEJPT1NUX0hB
U19UUklWSUFMX0NPTlNUUlVDVE9SCi0jaWZkZWYgQk9PU1RfSEFTX1NHSV9UWVBFX1RSQUlUUwot
I2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgotI2VsaWYgZGVmaW5lZChf
X0dOVUNfXykgfHwgZGVmaW5lZChfX1NVTlBST19DQykKLSNpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9pc192b2xhdGlsZS5ocHA+Ci0jaWZkZWYgQk9PU1RfSU5URUwKLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9pc19wb2QuaHBwPgotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0KLSNp
ZiAoZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fICogMTAwICsgX19HTlVDX01JTk9SX18g
Pj0gNDA5KSkgfHwgZGVmaW5lZChCT09TVF9DTEFORykgfHwgKGRlZmluZWQoX19TVU5QUk9fQ0Mp
ICYmIGRlZmluZWQoQk9PU1RfSEFTX1RSSVZJQUxfQ09OU1RSVUNUT1IpKQotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2lzX2RlZmF1bHRfY29uc3RydWN0aWJsZS5ocHA+Ci0jZGVmaW5lIEJP
T1NUX1RUX1RSSVZJQUxfQ09OU1RSVUNUX0ZJWCAmJiBpc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8
VD46OnZhbHVlCi0jZWxzZQotLy8KLS8vIE1vdCBhbGwgY29tcGlsZXJzLCBwYXJ0aWN1bGFybHkg
b2xkZXIgR0NDIHZlcnNpb25zIGNhbiBoYW5kbGUgdGhlIGZpeCBhYm92ZS4KLSNkZWZpbmUgQk9P
U1RfVFRfVFJJVklBTF9DT05TVFJVQ1RfRklYCi0jZW5kaWYKLQotbmFtZXNwYWNlIGJvb3N0IHsK
LQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBoYXNfdHJpdmlhbF9jb25zdHJ1Y3Rvcgot
I2lmZGVmIEJPT1NUX0hBU19UUklWSUFMX0NPTlNUUlVDVE9SCi0gICA6IHB1YmxpYyBpbnRlZ3Jh
bF9jb25zdGFudCA8Ym9vbCwgKCg6OmJvb3N0Ojppc19wb2Q8VD46OnZhbHVlIHx8IEJPT1NUX0hB
U19UUklWSUFMX0NPTlNUUlVDVE9SKFQpKSBCT09TVF9UVF9UUklWSUFMX0NPTlNUUlVDVF9GSVgp
Pnt9OwotI2Vsc2UKLSAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50IDxib29sLCA6OmJvb3N0
Ojppc19wb2Q8VD46OnZhbHVlPnt9OwotI2VuZGlmCi0KLXRlbXBsYXRlIDw+IHN0cnVjdCBoYXNf
dHJpdmlhbF9jb25zdHJ1Y3Rvcjx2b2lkPiA6IHB1YmxpYyBib29zdDo6ZmFsc2VfdHlwZXt9Owot
dGVtcGxhdGUgPD4gc3RydWN0IGhhc190cml2aWFsX2NvbnN0cnVjdG9yPHZvaWQgY29uc3Q+IDog
cHVibGljIGJvb3N0OjpmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaGFzX3RyaXZp
YWxfY29uc3RydWN0b3I8dm9pZCBjb25zdCB2b2xhdGlsZT4gOiBwdWJsaWMgYm9vc3Q6OmZhbHNl
X3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBoYXNfdHJpdmlhbF9jb25zdHJ1Y3Rvcjx2b2lk
IHZvbGF0aWxlPiA6IHB1YmxpYyBib29zdDo6ZmFsc2VfdHlwZXt9OwotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gc3RydWN0IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3IgOiBwdWJsaWMgaGFz
X3RyaXZpYWxfY29uc3RydWN0b3I8VD4ge307Ci0KLSN1bmRlZiBCT09TVF9UVF9UUklWSUFMX0NP
TlNUUlVDVF9GSVgKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1RU
X0hBU19UUklWSUFMX0NPTlNUUlVDVE9SX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX3RyaXZp
YWxfY29weS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90
eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9jb3B5LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZmQ2YWQyZDAzYjNkZmNhMmM2MDg5YzRlOTgwNWM2NDNhZGE4MWU3MC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9jb3B5LmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgU3RldmUg
Q2xlYXJ5LCBCZW1hbiBEYXdlcywgSG93YXJkIEhpbm5hbnQgJiBKb2huIE1hZGRvY2sgMjAwMC4K
LS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRo
ZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3Vt
ZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSEFTX1RSSVZJQUxfQ09QWV9IUFBfSU5DTFVE
RUQKLSNkZWZpbmUgQk9PU1RfVFRfSEFTX1RSSVZJQUxfQ09QWV9IUFBfSU5DTFVERUQKLQotI2lu
Y2x1ZGUgPGNzdGRkZWY+IC8vIHNpemVfdAotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lu
dHJpbnNpY3MuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3BvZC5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfcmVmZXJlbmNlLmhwcD4KLQotI2lmIChkZWZp
bmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXyA+PSA0MDkp
KSB8fCBkZWZpbmVkKEJPT1NUX0NMQU5HKSB8fCAoZGVmaW5lZChfX1NVTlBST19DQykgJiYgZGVm
aW5lZChCT09TVF9IQVNfVFJJVklBTF9DT1BZKSkKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0
cy9pc19jb3B5X2NvbnN0cnVjdGlibGUuaHBwPgotI2RlZmluZSBCT09TVF9UVF9UUklWSUFMX0NP
TlNUUlVDVF9GSVggJiYgaXNfY29weV9jb25zdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZQotI2Vsc2UKLSNk
ZWZpbmUgQk9PU1RfVFRfVFJJVklBTF9DT05TVFJVQ1RfRklYCi0jZW5kaWYKLQotI2lmZGVmIEJP
T1NUX0lOVEVMCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvYWRkX2NvbnN0LmhwcD4KLSNp
bmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9hZGRfbHZhbHVlX3JlZmVyZW5jZS5ocHA+Ci0jZW5k
aWYKLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBo
YXNfdHJpdmlhbF9jb3B5IAotOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgCi0jaWZk
ZWYgQk9PU1RfSEFTX1RSSVZJQUxfQ09QWQotICAgQk9PU1RfSEFTX1RSSVZJQUxfQ09QWShUKSBC
T09TVF9UVF9UUklWSUFMX0NPTlNUUlVDVF9GSVgKLSNlbHNlCi0gICA6OmJvb3N0Ojppc19wb2Q8
VD46OnZhbHVlCi0jZW5kaWYKLT57fTsKLS8vIEFycmF5cyBhcmUgbm90IGV4cGxpY2l0bHkgY29w
eWFibGU6Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTj4gc3RydWN0IGhhc190
cml2aWFsX2NvcHk8VFtOXT4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IHN0cnVjdCBoYXNfdHJpdmlhbF9jb3B5PFRbXT4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9
OwotLy8gQXJlIHZvbGF0aWxlIHR5cGVzIGV2ZXIgdHJpdmlhbD8gIFdlIGRvbid0IHJlYWxseSBr
bm93LCBzbyBhc3N1bWUgbm90OgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBoYXNfdHJp
dmlhbF9jb3B5PFQgdm9sYXRpbGU+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLQotdGVtcGxhdGUg
PD4gc3RydWN0IGhhc190cml2aWFsX2NvcHk8dm9pZD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9Owot
I2lmbmRlZiBCT09TVF9OT19DVl9WT0lEX1NQRUNJQUxJWkFUSU9OUwotdGVtcGxhdGUgPD4gc3Ry
dWN0IGhhc190cml2aWFsX2NvcHk8dm9pZCBjb25zdD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9Owot
dGVtcGxhdGUgPD4gc3RydWN0IGhhc190cml2aWFsX2NvcHk8dm9pZCB2b2xhdGlsZT4gOiBwdWJs
aWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGhhc190cml2aWFsX2NvcHk8dm9p
ZCBjb25zdCB2b2xhdGlsZT4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotI2VuZGlmCi0KLXRlbXBs
YXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfY29weTxUJj4gOiBwdWJsaWMgZmFsc2Vf
dHlwZXt9OwotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZFUkVOQ0VTKSAK
LXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfY29weTxUJiY+IDogcHVibGlj
IGZhbHNlX3R5cGV7fTsKLSNlbmRpZgotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3IgOiBwdWJsaWMgaGFzX3RyaXZpYWxfY29weTxUPnt9Owot
Ci0jdW5kZWYgQk9PU1RfVFRfVFJJVklBTF9DT05TVFJVQ1RfRklYCi0KLX0gLy8gbmFtZXNwYWNl
IGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9UVF9IQVNfVFJJVklBTF9DT1BZX0hQUF9JTkNMVURF
RApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
dHlwZV90cmFpdHMvaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rvci5ocHAgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9kZXN0cnVj
dG9yLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEzYTYxZmY5N2E2Y2NjM2Jl
ZjVmNmE4MzRlYjQyNGIzNjRkZmU1ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90
eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9kZXN0cnVjdG9yLmhwcAorKysgL2Rldi9udWxsCkBAIC0x
LDQ4ICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgU3RldmUgQ2xlYXJ5LCBCZW1hbiBEYXdl
cywgSG93YXJkIEhpbm5hbnQgJiBKb2huIE1hZGRvY2sgMjAwMC4KLS8vICBVc2UsIG1vZGlmaWNh
dGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBM
aWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Vf
MV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAu
dHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMg
Zm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5k
ZWYgQk9PU1RfVFRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUl9IUFBfSU5DTFVERUQKLSNkZWZpbmUg
Qk9PU1RfVFRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUl9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2ludHJpbnNpY3MuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2ludGVncmFsX2NvbnN0YW50LmhwcD4KLQotI2lmZGVmIEJPT1NUX0hBU19UUklWSUFM
X0RFU1RSVUNUT1IKLQotI2lmIGRlZmluZWQoQk9PU1RfSU5URUwpIHx8IGRlZmluZWQoQk9PU1Rf
TVNWQykKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19wb2QuaHBwPgotI2VuZGlmCi0j
aWZkZWYgQk9PU1RfSEFTX1NHSV9UWVBFX1RSQUlUUwotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2lzX3NhbWUuaHBwPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZp
bmVkKF9fY2xhbmdfXykgfHwgZGVmaW5lZChfX1NVTlBST19DQykKLSNpbmNsdWRlIDxib29zdC90
eXBlX3RyYWl0cy9pc19kZXN0cnVjdGlibGUuaHBwPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBib29z
dCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
ciA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBCT09TVF9IQVNfVFJJVklBTF9ERVNU
UlVDVE9SKFQpPnt9OwotI2Vsc2UKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19wb2Qu
aHBwPgotCi1uYW1lc3BhY2UgYm9vc3R7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvciA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCA6
OmJvb3N0Ojppc19wb2Q8VD46OnZhbHVlPnt9OwotI2VuZGlmCi0KLXRlbXBsYXRlIDw+IHN0cnVj
dCBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPHZvaWQ+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLSNp
Zm5kZWYgQk9PU1RfTk9fQ1ZfVk9JRF9TUEVDSUFMSVpBVElPTlMKLXRlbXBsYXRlIDw+IHN0cnVj
dCBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPHZvaWQgY29uc3Q+IDogcHVibGljIGZhbHNlX3R5cGV7
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yPHZvaWQgY29uc3Qg
dm9sYXRpbGU+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yPHZvaWQgdm9sYXRpbGU+IDogcHVibGljIGZhbHNlX3R5cGV7fTsK
LSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfVFRfSEFT
X1RSSVZJQUxfREVTVFJVQ1RPUl9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc190cml2aWFsX21v
dmVfYXNzaWduLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2hhc190cml2aWFsX21vdmVfYXNzaWduLmhwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNmQ5NTRhYjY2OWQ1NTc3MDQ1ZjI5MzZiZTdlN2JmNjM2MmE5NjMxYi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9t
b3ZlX2Fzc2lnbi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0KLS8vICAoQykg
Q29weXJpZ2h0IFN0ZXZlIENsZWFyeSwgQmVtYW4gRGF3ZXMsIEhvd2FyZCBIaW5uYW50ICYgSm9o
biBNYWRkb2NrIDIwMDAuCi0vLyAgKEMpIENvcHlyaWdodCBFcmljIEZyaWVkbWFuIDIwMDItMjAw
My4KLS8vICAoQykgQ29weXJpZ2h0IEFudG9ueSBQb2x1a2hpbiAyMDEzLgotLy8gIFVzZSwgbW9k
aWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3
YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElD
RU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNF
XzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3Ry
YWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQot
I2lmbmRlZiBCT09TVF9UVF9IQVNfVFJJVklBTF9NT1ZFX0FTU0lHTl9IUFBfSU5DTFVERUQKLSNk
ZWZpbmUgQk9PU1RfVFRfSEFTX1RSSVZJQUxfTU9WRV9BU1NJR05fSFBQX0lOQ0xVREVECi0KLSNp
bmNsdWRlIDxjc3RkZGVmPiAvLyBzaXplX3QKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9p
bnRyaW5zaWNzLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pbnRlZ3JhbF9jb25z
dGFudC5ocHA+Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9IQVNfVFJJVklBTF9NT1ZFX0FTU0lHTikg
fHwgZGVmaW5lZChCT09TVF9NU1ZDKSB8fCBkZWZpbmVkKEJPT1NUX0lOVEVMKQotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2lzX3BvZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaXNfY29uc3QuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvbGF0aWxl
LmhwcD4KLSNpZmRlZiBCT09TVF9NU1ZDCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNf
cmVmZXJlbmNlLmhwcD4KLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSB8
fCBkZWZpbmVkKF9fY2xhbmcpCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfYXNzaWdu
YWJsZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfdm9sYXRpbGUuaHBwPgot
I2VuZGlmCi0KLSNpZmRlZiBfX1NVTlBST19DQwotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRz
L2lzX2Fzc2lnbmFibGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9j
b25zdC5ocHA+Ci0jaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzCi0jZGVmaW5lIFNPTEFSSVNfRVhU
UkFfQ0hFQ0sgJiYgaXNfYXNzaWduYWJsZTx0eXBlbmFtZSByZW1vdmVfY29uc3Q8VD46OnR5cGUm
LCB0eXBlbmFtZSByZW1vdmVfY29uc3Q8VD46OnR5cGUmJj46OnZhbHVlCi0jZW5kaWYKLSNlbmRp
ZgotCi0jaWZuZGVmIFNPTEFSSVNfRVhUUkFfQ0hFQ0sKLSNkZWZpbmUgU09MQVJJU19FWFRSQV9D
SEVDSwotI2VuZGlmCi0KLW5hbWVzcGFjZSBib29zdHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci1zdHJ1Y3QgaGFzX3RyaXZpYWxfbW92ZV9hc3NpZ24gOiBwdWJsaWMgaW50ZWdyYWxfY29uc3Rh
bnQ8Ym9vbCwKLSNpZmRlZiBCT09TVF9IQVNfVFJJVklBTF9NT1ZFX0FTU0lHTgotICAgQk9PU1Rf
SEFTX1RSSVZJQUxfTU9WRV9BU1NJR04oVCkKLSNlbHNlCi0gICA6OmJvb3N0Ojppc19wb2Q8VD46
OnZhbHVlICYmICE6OmJvb3N0Ojppc19jb25zdDxUPjo6dmFsdWUgJiYgITo6Ym9vc3Q6OmlzX3Zv
bGF0aWxlPFQ+Ojp2YWx1ZSBTT0xBUklTX0VYVFJBX0NIRUNLCi0jZW5kaWYKLSAgID4ge307Ci0K
LXRlbXBsYXRlIDw+IHN0cnVjdCBoYXNfdHJpdmlhbF9tb3ZlX2Fzc2lnbjx2b2lkPiA6IHB1Ymxp
YyBmYWxzZV90eXBle307Ci0jaWZuZGVmIEJPT1NUX05PX0NWX1ZPSURfU1BFQ0lBTElaQVRJT05T
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaGFzX3RyaXZpYWxfbW92ZV9hc3NpZ248dm9pZCBjb25zdD4g
OiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGhhc190cml2aWFsX21v
dmVfYXNzaWduPHZvaWQgY29uc3Qgdm9sYXRpbGU+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBoYXNfdHJpdmlhbF9tb3ZlX2Fzc2lnbjx2b2lkIHZvbGF0aWxlPiA6
IHB1YmxpYyBmYWxzZV90eXBle307Ci0jZW5kaWYKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3Qg
aGFzX3RyaXZpYWxfbW92ZV9hc3NpZ248VCY+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLSNpZm5k
ZWYgQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMKLXRlbXBsYXRlIDxjbGFzcyBUPiBz
dHJ1Y3QgaGFzX3RyaXZpYWxfbW92ZV9hc3NpZ248VCYmPiA6IHB1YmxpYyBmYWxzZV90eXBle307
Ci0jZW5kaWYKLS8vIEFycmF5IHR5cGVzIGFyZSBub3QgYXNzaWduYWJsZToKLXRlbXBsYXRlIDxj
bGFzcyBULCBzdGQ6OnNpemVfdCBOPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfbW92ZV9hc3NpZ248VFtO
XT4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBoYXNf
dHJpdmlhbF9tb3ZlX2Fzc2lnbjxUW10+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLQotfSAvLyBu
YW1lc3BhY2UgYm9vc3QKLQotI3VuZGVmIFNPTEFSSVNfRVhUUkFfQ0hFQ0sKLQotI2VuZGlmIC8v
IEJPT1NUX1RUX0hBU19UUklWSUFMX01PVkVfQVNTSUdOX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMv
aGFzX3RyaXZpYWxfbW92ZV9jb25zdHJ1Y3Rvci5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9tb3ZlX2NvbnN0cnVj
dG9yLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc4NGY0YmJmZmZkNzE4N2Rl
NjE0ZmI5M2RjZGY4MWVhMDRlMjU0OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90
eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9tb3ZlX2NvbnN0cnVjdG9yLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDc4ICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgU3RldmUgQ2xlYXJ5LCBCZW1h
biBEYXdlcywgSG93YXJkIEhpbm5hbnQgJiBKb2huIE1hZGRvY2sgMjAwMC4KLS8vICAoQykgQ29w
eXJpZ2h0IEVyaWMgRnJpZWRtYW4gMjAwMi0yMDAzLgotLy8gIChDKSBDb3B5cmlnaHQgQW50b255
IFBvbHVraGluIDIwMTMuCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBh
cmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEu
MC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8g
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9u
IGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX0hBU19UUklWSUFM
X01PVkVfQ09OU1RSVUNUT1JfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0hBU19UUklW
SUFMX01PVkVfQ09OU1RSVUNUT1JfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxjc3RkZGVmPiAv
LyBzaXplX3QKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pbnRyaW5zaWNzLmhwcD4KLSNp
bmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pbnRlZ3JhbF9jb25zdGFudC5ocHA+Ci0KLSNpZmRl
ZiBCT09TVF9IQVNfVFJJVklBTF9NT1ZFX0NPTlNUUlVDVE9SCi0KLSNpZiBkZWZpbmVkKEJPT1NU
X01TVkMpIHx8IGRlZmluZWQoQk9PU1RfSU5URUwpCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaXNfcG9kLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc192b2xhdGlsZS5o
cHA+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19jbGFuZykK
LSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jb25zdHJ1Y3RpYmxlLmhwcD4KLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9pc192b2xhdGlsZS5ocHA+Ci0jZW5kaWYKLQotCi1uYW1l
c3BhY2UgYm9vc3QgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IGhhc190cml2aWFs
X21vdmVfY29uc3RydWN0b3IgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgQk9PU1Rf
SEFTX1RSSVZJQUxfTU9WRV9DT05TVFJVQ1RPUihUKT57fTsKLQotI2Vsc2UKLQotI2lmZGVmIF9f
U1VOUFJPX0NDCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3RydWN0aWJsZS5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2NvbnN0LmhwcD4KLSNpZiBf
X2NwbHVzcGx1cyA+PSAyMDExMDMKLSNkZWZpbmUgU09MQVJJU19FWFRSQV9DSEVDSyAmJiBpc19j
b25zdHJ1Y3RpYmxlPHR5cGVuYW1lIHJlbW92ZV9jb25zdDxUPjo6dHlwZSwgdHlwZW5hbWUgcmVt
b3ZlX2NvbnN0PFQ+Ojp0eXBlJiY+Ojp2YWx1ZQotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBT
T0xBUklTX0VYVFJBX0NIRUNLCi0jZGVmaW5lIFNPTEFSSVNfRVhUUkFfQ0hFQ0sKLSNlbmRpZgot
Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfcG9kLmhwcD4KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9pc192b2xhdGlsZS5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfbW92ZV9jb25zdHJ1Y3RvciAK
LSAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIDo6Ym9vc3Q6OmlzX3BvZDxUPjo6
dmFsdWUgJiYgITo6Ym9vc3Q6OmlzX3ZvbGF0aWxlPFQ+Ojp2YWx1ZSBTT0xBUklTX0VYVFJBX0NI
RUNLPnt9OwotCi0jdW5kZWYgU09MQVJJU19FWFRSQV9DSEVDSwotCi0jZW5kaWYKLQotdGVtcGxh
dGUgPD4gc3RydWN0IGhhc190cml2aWFsX21vdmVfY29uc3RydWN0b3I8dm9pZD4gOiBwdWJsaWMg
ZmFsc2VfdHlwZXt9OwotI2lmbmRlZiBCT09TVF9OT19DVl9WT0lEX1NQRUNJQUxJWkFUSU9OUwot
dGVtcGxhdGUgPD4gc3RydWN0IGhhc190cml2aWFsX21vdmVfY29uc3RydWN0b3I8dm9pZCBjb25z
dD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGhhc190cml2aWFs
X21vdmVfY29uc3RydWN0b3I8dm9pZCB2b2xhdGlsZT4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9Owot
dGVtcGxhdGUgPD4gc3RydWN0IGhhc190cml2aWFsX21vdmVfY29uc3RydWN0b3I8dm9pZCBjb25z
dCB2b2xhdGlsZT4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotI2VuZGlmCi0vLyBXaGF0IHNob3Vs
ZCB3ZSBkbyB3aXRoIHJlZmVyZW5jZSB0eXBlcz8/PyBUaGUgc3RhbmRhcmQgc2VlbXMgdG8gc3Vn
Z2VzdCB0aGVzZSBhcmUgdHJpdmlhbCwgZXZlbiBpZiB0aGUgdGhpbmcgdGhleSByZWZlcmVuY2Ug
aXMgbm90OgotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBoYXNfdHJpdmlhbF9tb3ZlX2NvbnN0
cnVjdG9yPFQmPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLSNpZm5kZWYgQk9PU1RfTk9fQ1hYMTFf
UlZBTFVFX1JFRkVSRU5DRVMKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX3RyaXZpYWxf
bW92ZV9jb25zdHJ1Y3RvcjxUJiY+IDogcHVibGljIHRydWVfdHlwZXt9OwotI2VuZGlmCi0vLyBB
cnJheXMgY2FuIG5vdCBiZSBleHBsaWNpdGx5IGNvcGllZDoKLXRlbXBsYXRlIDxjbGFzcyBULCBz
dGQ6OnNpemVfdCBOPiBzdHJ1Y3QgaGFzX3RyaXZpYWxfbW92ZV9jb25zdHJ1Y3RvcjxUW05dPiA6
IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGhhc190cml2
aWFsX21vdmVfY29uc3RydWN0b3I8VFtdPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci0KLX0gLy8g
bmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9UVF9IQVNfVFJJVklBTF9NT1ZFX0NP
TlNUUlVDVE9SX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX3VuYXJ5X21pbnVzLmhwcCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc191
bmFyeV9taW51cy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMzE1N2Y0MmM1
Nzc4NzNkNzFhNDdhYTllYTY1YjlkYjA3OGZiNmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvdHlwZV90cmFpdHMvaGFzX3VuYXJ5X21pbnVzLmhwcAorKysgL2Rldi9udWxsCkBAIC0x
LDI1ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVkZXJpYyBCcm9uLgot
Ly8KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRv
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29t
cGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRv
Y3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSEFTX1VOQVJZX01JTlVTX0hQUF9JTkNM
VURFRAotI2RlZmluZSBCT09TVF9UVF9IQVNfVU5BUllfTUlOVVNfSFBQX0lOQ0xVREVECi0KLSNk
ZWZpbmUgQk9PU1RfVFRfVFJBSVRfTkFNRSBoYXNfdW5hcnlfbWludXMKLSNkZWZpbmUgQk9PU1Rf
VFRfVFJBSVRfT1AgLQotI2RlZmluZSBCT09TVF9UVF9GT1JCSURERU5fSUZcCi0gICAvKiBwb2lu
dGVyICovXAotICAgOjpib29zdDo6aXNfcG9pbnRlcjwgUmhzX25vcmVmID46OnZhbHVlCi0KLQot
I2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9oYXNfcHJlZml4X29wZXJhdG9yLmhw
cD4KLQotI3VuZGVmIEJPT1NUX1RUX1RSQUlUX05BTUUKLSN1bmRlZiBCT09TVF9UVF9UUkFJVF9P
UAotI3VuZGVmIEJPT1NUX1RUX0ZPUkJJRERFTl9JRgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2hhc191
bmFyeV9wbHVzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2hhc191bmFyeV9wbHVzLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTYxNzcwZjg1ODU1NmFhYzNmZjIxODA1NGY5ODNkNzA2N2NhYWZiMC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9oYXNfdW5hcnlfcGx1cy5ocHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLyAgKEMpIENvcHlyaWdodCAyMDA5LTIwMTEg
RnJlZGVyaWMgQnJvbi4KLS8vCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlv
biBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9u
IDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAot
Ly8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBo
dHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJz
aW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX0hBU19VTkFS
WV9QTFVTX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9IQVNfVU5BUllfUExVU19IUFBf
SU5DTFVERUQKLQotI2RlZmluZSBCT09TVF9UVF9UUkFJVF9OQU1FIGhhc191bmFyeV9wbHVzCi0j
ZGVmaW5lIEJPT1NUX1RUX1RSQUlUX09QICsKLSNkZWZpbmUgQk9PU1RfVFRfRk9SQklEREVOX0lG
XAotICAgZmFsc2UKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9oYXNfcHJl
Zml4X29wZXJhdG9yLmhwcD4KLQotI3VuZGVmIEJPT1NUX1RUX1RSQUlUX05BTUUKLSN1bmRlZiBC
T09TVF9UVF9UUkFJVF9PUAotI3VuZGVmIEJPT1NUX1RUX0ZPUkJJRERFTl9JRgotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5
cGVfdHJhaXRzL2hhc192aXJ0dWFsX2Rlc3RydWN0b3IuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaGFzX3ZpcnR1YWxfZGVzdHJ1Y3Rv
ci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMGYzODM2OGFkZTQ4MWNkZDJh
OGIwYzdmNDcwMTY4M2MwN2MwZTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlw
ZV90cmFpdHMvaGFzX3ZpcnR1YWxfZGVzdHJ1Y3Rvci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
NiArMCwwIEBACi0KLS8vICAoQykgQ29weXJpZ2h0IEpvaG4gTWFkZG9jayAyMDA1LiAgCi0vLyAg
VXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9v
c3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJz
L3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0
aW9uLgotCi0KLSNpZm5kZWYgQk9PU1RfVFRfSEFTX1ZJUlRVQUxfREVTVFJVQ1RPUl9IUFBfSU5D
TFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSEFTX1ZJUlRVQUxfREVTVFJVQ1RPUl9IUFBfSU5DTFVE
RUQKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludHJpbnNpY3MuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludGVncmFsX2NvbnN0YW50LmhwcD4KLQotbmFtZXNwYWNl
IGJvb3N0IHsKLQotI2lmZGVmIEJPT1NUX0hBU19WSVJUVUFMX0RFU1RSVUNUT1IKLSAgIHRlbXBs
YXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX3ZpcnR1YWxfZGVzdHJ1Y3RvciA6IHB1YmxpYyBpbnRl
Z3JhbF9jb25zdGFudDxib29sLCBCT09TVF9IQVNfVklSVFVBTF9ERVNUUlVDVE9SKFQpPnt9Owot
I2Vsc2UKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaGFzX3ZpcnR1YWxfZGVzdHJ1Y3Rv
ciA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBmYWxzZT57fTsKLSNlbmRpZgotCi19
IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfVFRfSVNfTUVNQkVSX0ZVTkNU
SU9OX1BPSU5URVJfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pbnRlZ3JhbF9jb25zdGFudC5ocHAg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9p
bnRlZ3JhbF9jb25zdGFudC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMjQ0
OGQwNzAzMzFjYzBkNmU3OWVjMDJlODgzZDZiNmIxMDA1NjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaW50ZWdyYWxfY29uc3RhbnQuaHBwCisrKyAvZGV2L251
bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IEpvaG4gTWFkZG9jayAyMDE1
LiAKLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRv
IHRoZSAKLS8vICBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2Nv
bXBhbnlpbmcgZmlsZSAKLS8vICBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLSNpZm5kZWYgQk9PU1RfVFlQRV9UUkFJVFNf
SU5URUdSQUxfQ09OU1RBTlRfSFBQCi0jZGVmaW5lIEJPT1NUX1RZUEVfVFJBSVRTX0lOVEVHUkFM
X0NPTlNUQU5UX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0KLSNpZiAoQk9PU1RfV09SS0FST1VORChCT09T
VF9NU1ZDLCBCT09TVF9URVNURURfQVQoMTQwMCkpIFwKLSAgIHx8IEJPT1NUX1dPUktBUk9VTkQo
X19CT1JMQU5EQ19fLCBCT09TVF9URVNURURfQVQoMHg2MTApKSBcCi0gICB8fCBCT09TVF9XT1JL
QVJPVU5EKF9fRE1DX18sIEJPT1NUX1RFU1RFRF9BVCgweDg0MCkpIFwKLSAgIHx8IEJPT1NUX1dP
UktBUk9VTkQoX19NV0VSS1NfXywgQk9PU1RfVEVTVEVEX0FUKDB4MzIwMikpIFwKLSAgIHx8IEJP
T1NUX1dPUktBUk9VTkQoQk9PU1RfSU5URUxfQ1hYX1ZFUlNJT04sIEJPT1NUX1RFU1RFRF9BVCg4
MTApKSApCi0KLQotbmFtZXNwYWNlIGJvb3N0ewotICAgbmFtZXNwYWNlIG1wbAotICAgewotICAg
ICAgdGVtcGxhdGUgPGJvb2wgQj4gc3RydWN0IGJvb2xfOwotICAgICAgdGVtcGxhdGUgPGNsYXNz
IEksIEkgdmFsPiBzdHJ1Y3QgaW50ZWdyYWxfYzsKLSAgICAgIHN0cnVjdCBpbnRlZ3JhbF9jX3Rh
ZzsKLSAgIH0KLX0KLQotI2Vsc2UKLQotbmFtZXNwYWNlIG1wbF97Ci0KLSAgIHRlbXBsYXRlIDxi
b29sIEI+IHN0cnVjdCBib29sXzsKLSAgIHRlbXBsYXRlIDxjbGFzcyBJLCBJIHZhbD4gc3RydWN0
IGludGVncmFsX2M7Ci0gICBzdHJ1Y3QgaW50ZWdyYWxfY190YWc7Ci19Ci0KLW5hbWVzcGFjZSBi
b29zdAotewotICAgbmFtZXNwYWNlIG1wbAotICAgewotICAgICAgdXNpbmcgOjptcGxfOjpib29s
XzsKLSAgICAgIHVzaW5nIDo6bXBsXzo6aW50ZWdyYWxfYzsKLSAgICAgIHVzaW5nIDo6bXBsXzo6
aW50ZWdyYWxfY190YWc7Ci0gICB9Ci19Ci0KLSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3R7Ci0K
LSAgIHRlbXBsYXRlIDxjbGFzcyBULCBUIHZhbD4KLSAgIHN0cnVjdCBpbnRlZ3JhbF9jb25zdGFu
dAotICAgewotICAgICAgdHlwZWRlZiBtcGw6OmludGVncmFsX2NfdGFnIHRhZzsKLSAgICAgIHR5
cGVkZWYgVCB2YWx1ZV90eXBlOwotICAgICAgdHlwZWRlZiBpbnRlZ3JhbF9jb25zdGFudDxULCB2
YWw+IHR5cGU7Ci0gICAgICBzdGF0aWMgY29uc3QgVCB2YWx1ZSA9IHZhbDsKLSAgICAgIC8vCi0g
ICAgICAvLyBUaGlzIGhlbHBlciBmdW5jdGlvbiBpcyBqdXN0IHRvIGRpc2FibGUgdHlwZS1wdW5u
aW5nIAotICAgICAgLy8gd2FybmluZ3MgZnJvbSBHQ0M6Ci0gICAgICAvLwotICAgICAgdGVtcGxh
dGUgPGNsYXNzIFU+Ci0gICAgICBzdGF0aWMgVSYgZGVyZWZlcmVuY2UoVSogcCkgeyByZXR1cm4g
KnA7IH0KLQotICAgICAgb3BlcmF0b3IgY29uc3QgbXBsOjppbnRlZ3JhbF9jPFQsIHZhbD4mICgp
Y29uc3QKLSAgICAgIHsKLSAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGRhdGFbc2l6ZW9mKGxv
bmcpXSA9IHsgMCB9OwotICAgICAgICAgcmV0dXJuIGRlcmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgbXBsOjppbnRlZ3JhbF9jPFQsIHZhbD4qPigmZGF0YSkpOwotICAgICAgfQotICAg
ICAgQk9PU1RfQ09OU1RFWFBSIG9wZXJhdG9yIFQoKWNvbnN0IHsgcmV0dXJuIHZhbDsgfQotICAg
fTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIFQgdmFsPgotICAgVCBjb25zdCBpbnRlZ3JhbF9j
b25zdGFudDxULCB2YWw+Ojp2YWx1ZTsKLSAgICAgIAotICAgdGVtcGxhdGUgPGJvb2wgdmFsPgot
ICAgc3RydWN0IGludGVncmFsX2NvbnN0YW50PGJvb2wsIHZhbD4KLSAgIHsKLSAgICAgIHR5cGVk
ZWYgbXBsOjppbnRlZ3JhbF9jX3RhZyB0YWc7Ci0gICAgICB0eXBlZGVmIGJvb2wgdmFsdWVfdHlw
ZTsKLSAgICAgIHR5cGVkZWYgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgdmFsPiB0eXBlOwotICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB2YWw7Ci0gICAgICAvLwotICAgICAgLy8gVGhp
cyBoZWxwZXIgZnVuY3Rpb24gaXMganVzdCB0byBkaXNhYmxlIHR5cGUtcHVubmluZyAKLSAgICAg
IC8vIHdhcm5pbmdzIGZyb20gR0NDOgotICAgICAgLy8KLSAgICAgIHRlbXBsYXRlIDxjbGFzcyBU
PgotICAgICAgc3RhdGljIFQmIGRlcmVmZXJlbmNlKFQqIHApIHsgcmV0dXJuICpwOyB9Ci0KLSAg
ICAgIG9wZXJhdG9yIGNvbnN0IG1wbDo6Ym9vbF88dmFsPiYgKCljb25zdAotICAgICAgewotICAg
ICAgICAgc3RhdGljIGNvbnN0IGNoYXIgZGF0YSA9IDA7Ci0gICAgICAgICByZXR1cm4gZGVyZWZl
cmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCBtcGw6OmJvb2xfPHZhbD4qPigmZGF0YSkpOwot
ICAgICAgfQotICAgICAgQk9PU1RfQ09OU1RFWFBSIG9wZXJhdG9yIGJvb2woKWNvbnN0IHsgcmV0
dXJuIHZhbDsgfQotICAgfTsKLQotICAgdGVtcGxhdGUgPGJvb2wgdmFsPgotICAgYm9vbCBjb25z
dCBpbnRlZ3JhbF9jb25zdGFudDxib29sLCB2YWw+Ojp2YWx1ZTsKLQotICAgdHlwZWRlZiBpbnRl
Z3JhbF9jb25zdGFudDxib29sLCB0cnVlPiB0cnVlX3R5cGU7Ci0gICB0eXBlZGVmIGludGVncmFs
X2NvbnN0YW50PGJvb2wsIGZhbHNlPiBmYWxzZV90eXBlOwotCi19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFp
dHMvaW50ZWdyYWxfcHJvbW90aW9uLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2ludGVncmFsX3Byb21vdGlvbi5ocHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NzhmNTYzNDkyNzAxMWVjOTllNzgyMTQxMzg1OGRkOGE4
MjYzNTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaW50ZWdy
YWxfcHJvbW90aW9uLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vLyBDb3B5
cmlnaHQgMjAwNSBBbGV4YW5kZXIgTmFzb25vdi4KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBC
b29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotLy8gYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkKLQotI2lmbmRlZiBGSUxFX2Jvb3N0X3R5cGVfdHJhaXRzX2ludGVn
cmFsX3Byb21vdGlvbl9ocHBfSU5DTFVERUQKLSNkZWZpbmUgRklMRV9ib29zdF90eXBlX3RyYWl0
c19pbnRlZ3JhbF9wcm9tb3Rpb25faHBwX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxib29zdC9jb25m
aWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludGVncmFsX2NvbnN0YW50Lmhw
cD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jb25zdC5ocHA+Ci0jaW5jbHVkZSA8
Ym9vc3QvdHlwZV90cmFpdHMvaXNfZW51bS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaXNfdm9sYXRpbGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9j
di5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLW5hbWVzcGFjZSB0eXBlX3RyYWl0cyB7IG5h
bWVzcGFjZSBkZXRhaWwgewotCi0vLyA0LjUvMgotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBu
ZWVkX3Byb21vdGlvbiA6IHB1YmxpYyBib29zdDo6aXNfZW51bTxUPiB7fTsKLQotLy8gNC41LzEK
LXRlbXBsYXRlPD4gc3RydWN0IG5lZWRfcHJvbW90aW9uPGNoYXIgICAgICAgICAgICAgID4gOiBw
dWJsaWMgdHJ1ZV90eXBlIHt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgbmVlZF9wcm9tb3Rpb248c2ln
bmVkIGNoYXIgICAgICAgPiA6IHB1YmxpYyB0cnVlX3R5cGUge307Ci10ZW1wbGF0ZTw+IHN0cnVj
dCBuZWVkX3Byb21vdGlvbjx1bnNpZ25lZCBjaGFyICAgICA+IDogcHVibGljIHRydWVfdHlwZSB7
fTsKLXRlbXBsYXRlPD4gc3RydWN0IG5lZWRfcHJvbW90aW9uPHNpZ25lZCBzaG9ydCBpbnQgID4g
OiBwdWJsaWMgdHJ1ZV90eXBlIHt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgbmVlZF9wcm9tb3Rpb248
dW5zaWduZWQgc2hvcnQgaW50PiA6IHB1YmxpYyB0cnVlX3R5cGUge307Ci0KLQotLy8gU3BlY2lh
bGl6YXRpb25zIGZvciBub24tc3RhbmRhcmQgdHlwZXMuCi0vLyBUeXBlIGlzIHByb21vdGVkIGlm
IGl0J3Mgc21hbGxlciB0aGVuIGludC4KLQotI2RlZmluZSBCT09TVF9UVF9BVVhfUFJPTU9URV9O
T05TVEFOREFSRF9UWVBFKFQpIFwKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBuZWVkX3Byb21vdGlv
bjxUPiAgICAgICAgICBcCi0gICAgICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2ws
IChzaXplb2YoVCkgPCBzaXplb2YoaW50KSk+IHt9OwotCi0vLyBTYW1lIHNldCBvZiBpbnRlZ3Jh
bCB0eXBlcyBhcyBpbiBib29zdC90eXBlX3RyYWl0cy9pc19pbnRlZ3JhbC5ocHAuCi0vLyBQbGVh
c2UsIGtlZXAgaW4gc3luYy4KLSNpZiAoZGVmaW5lZChCT09TVF9JTlRFTF9DWFhfVkVSU0lPTikg
JiYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKEJPT1NUX0lOVEVMX0NYWF9WRVJTSU9OIDw9IDYwMCkp
IFwKLSAgICB8fCAoZGVmaW5lZChfX0JPUkxBTkRDX18pICYmIChfX0JPUkxBTkRDX18gPT0gMHg2
MDApICYmIChfTVNDX1ZFUiA8IDEzMDApKQotLy8gVE9ETzogY29tbW9uIG1hY3JvIGZvciB0aGlz
ICNpZi4gT3IgYmV0dGVyIHlldCwgUFAgU0VRIG9mIG5vbi1zdGFuZGFyZCB0eXBlcy4KLUJPT1NU
X1RUX0FVWF9QUk9NT1RFX05PTlNUQU5EQVJEX1RZUEUoX19pbnQ4ICAgICAgICAgICkKLUJPT1NU
X1RUX0FVWF9QUk9NT1RFX05PTlNUQU5EQVJEX1RZUEUodW5zaWduZWQgX19pbnQ4ICkKLUJPT1NU
X1RUX0FVWF9QUk9NT1RFX05PTlNUQU5EQVJEX1RZUEUoX19pbnQxNiAgICAgICAgICkKLUJPT1NU
X1RUX0FVWF9QUk9NT1RFX05PTlNUQU5EQVJEX1RZUEUodW5zaWduZWQgX19pbnQxNikKLUJPT1NU
X1RUX0FVWF9QUk9NT1RFX05PTlNUQU5EQVJEX1RZUEUoX19pbnQzMiAgICAgICAgICkKLUJPT1NU
X1RUX0FVWF9QUk9NT1RFX05PTlNUQU5EQVJEX1RZUEUodW5zaWduZWQgX19pbnQzMikKLSNpZmRl
ZiBfX0JPUkxBTkRDX18KLUJPT1NUX1RUX0FVWF9QUk9NT1RFX05PTlNUQU5EQVJEX1RZUEUodW5z
aWduZWQgX19pbnQ2NCkKLUJPT1NUX1RUX0FVWF9QUk9NT1RFX05PTlNUQU5EQVJEX1RZUEUoICAg
ICAgICAgX19pbnQ2NCkKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19M
T05HX0xPTkcpCi1CT09TVF9UVF9BVVhfUFJPTU9URV9OT05TVEFOREFSRF9UWVBFKGJvb3N0Ojp1
bG9uZ19sb25nX3R5cGUpCi1CT09TVF9UVF9BVVhfUFJPTU9URV9OT05TVEFOREFSRF9UWVBFKGJv
b3N0Ojpsb25nX2xvbmdfdHlwZSApCi0jZWxpZiBkZWZpbmVkKEJPT1NUX0hBU19NU19JTlQ2NCkK
LUJPT1NUX1RUX0FVWF9QUk9NT1RFX05PTlNUQU5EQVJEX1RZUEUodW5zaWduZWQgX19pbnQ2NCkK
LUJPT1NUX1RUX0FVWF9QUk9NT1RFX05PTlNUQU5EQVJEX1RZUEUoICAgICAgICAgX19pbnQ2NCkK
LSNlbmRpZgotCi0jdW5kZWYgQk9PU1RfVFRfQVVYX1BST01PVEVfTk9OU1RBTkRBUkRfVFlQRQot
Ci0KLSNpZm5kZWYgQk9PU1RfTk9fSU5UUklOU0lDX1dDSEFSX1QKLS8vIDQuNS8yCi10ZW1wbGF0
ZTw+IHN0cnVjdCBuZWVkX3Byb21vdGlvbjx3Y2hhcl90PiA6IHB1YmxpYyB0cnVlX3R5cGUge307
Ci0jZW5kaWYKLQotLy8gNC41LzMgKGludGVncmFsIGJpdC1maWVsZCkgaXMgbm90IHN1cHBvcnRl
ZC4KLQotLy8gNC41LzQKLXRlbXBsYXRlPD4gc3RydWN0IG5lZWRfcHJvbW90aW9uPGJvb2w+IDog
cHVibGljIHRydWVfdHlwZSB7fTsKLQotCi0vLyBHZXQgcHJvbW90ZWQgdHlwZSBieSBpbmRleCBh
bmQgY3YgcXVhbGlmaWVycy4KLQotdGVtcGxhdGU8aW50IEluZGV4LCBpbnQgSXNDb25zdCwgaW50
IElzVm9sYXRpbGU+IHN0cnVjdCBwcm9tb3RlX2Zyb21faW5kZXg7Ci0KLSNkZWZpbmUgQk9PU1Rf
VFRfQVVYX1BST01PVEVfRlJPTV9JTkRFWChOLFQpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgcHJvbW90ZV9mcm9tX2luZGV4PE4sMCww
PiB7IHR5cGVkZWYgVCB0eXBlOyB9OyAgICAgICAgICAgXAotICAgIHRlbXBsYXRlPD4gc3RydWN0
IHByb21vdGVfZnJvbV9pbmRleDxOLDAsMT4geyB0eXBlZGVmIFQgdm9sYXRpbGUgdHlwZTsgfTsg
IFwKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBwcm9tb3RlX2Zyb21faW5kZXg8TiwxLDA+IHsgdHlw
ZWRlZiBUIGNvbnN0IHR5cGU7IH07ICAgICBcCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgcHJvbW90
ZV9mcm9tX2luZGV4PE4sMSwxPiB7IHR5cGVkZWYgVCBjb25zdCB2b2xhdGlsZSB0eXBlOyB9Owot
Ci0KLUJPT1NUX1RUX0FVWF9QUk9NT1RFX0ZST01fSU5ERVgoMSwgaW50ICAgICAgICAgICkKLUJP
T1NUX1RUX0FVWF9QUk9NT1RFX0ZST01fSU5ERVgoMiwgdW5zaWduZWQgaW50ICkKLUJPT1NUX1RU
X0FVWF9QUk9NT1RFX0ZST01fSU5ERVgoMywgbG9uZyAgICAgICAgICkKLUJPT1NUX1RUX0FVWF9Q
Uk9NT1RFX0ZST01fSU5ERVgoNCwgdW5zaWduZWQgbG9uZykKLQotCi0vLyBXQVJOSU5HOiBpbnRl
Z3JhbCBwcm9tb3Rpb25zIHRvIG5vbi1zdGFuZGFyZCB0eXBlcwotLy8gbG9uZyBsb25nIGFuZCBf
X2ludDY0IGFyZSBub3QgZGVmaW5lZCBieSB0aGUgc3RhbmRhcmQuCi0vLyBBZGRpdGlvbmFsIHNw
ZWNpYWxpc2F0aW9ucyBhbmQgb3ZlcmxvYWRzIHNob3VsZG4ndAotLy8gaW50cm9kdWNlIGFtYmln
dWl0eSwgdGhvdWdoLgotCi0jaWYgZGVmaW5lZChCT09TVF9IQVNfTE9OR19MT05HKQotQk9PU1Rf
VFRfQVVYX1BST01PVEVfRlJPTV9JTkRFWCg1LCBib29zdDo6bG9uZ19sb25nX3R5cGUgKQotQk9P
U1RfVFRfQVVYX1BST01PVEVfRlJPTV9JTkRFWCg2LCBib29zdDo6dWxvbmdfbG9uZ190eXBlKQot
I2VsaWYgZGVmaW5lZChCT09TVF9IQVNfTVNfSU5UNjQpCi1CT09TVF9UVF9BVVhfUFJPTU9URV9G
Uk9NX0lOREVYKDcsIF9faW50NjQgICAgICAgICApCi1CT09TVF9UVF9BVVhfUFJPTU9URV9GUk9N
X0lOREVYKDgsIHVuc2lnbmVkIF9faW50NjQpCi0jZW5kaWYKLQotI3VuZGVmIEJPT1NUX1RUX0FV
WF9QUk9NT1RFX0ZST01fSU5ERVgKLQotCi0vLyBEZWZpbmUgQk9PU1RfVFRfQVVYX1BST01PVEVE
X0lOREVYX1RFU1RFUjoKLSNpZiAhZGVmaW5lZChCT09TVF9NU1ZDKQotCi10ZW1wbGF0ZTxpbnQg
Tj4KLXN0cnVjdCBzaXplZF90eXBlX2Zvcl9wcm9tb3Rpb24KLXsKLSAgICB0eXBlZGVmIGNoYXIg
KCZ0eXBlKVtOXTsKLX07Ci0KLSNkZWZpbmUgQk9PU1RfVFRfQVVYX1BST01PVEVEX0lOREVYX1RF
U1RFUihJLFQpIFwKLSAgICBzaXplZF90eXBlX2Zvcl9wcm9tb3Rpb248ST46OnR5cGUgcHJvbW90
ZWRfaW5kZXhfdGVzdGVyKFQpOwotCi0jZWxzZQotCi0jZGVmaW5lIEJPT1NUX1RUX0FVWF9QUk9N
T1RFRF9JTkRFWF9URVNURVIoSSxUKSBcCi0gICAgY2hhciAoJnByb21vdGVkX2luZGV4X3Rlc3Rl
cihUKSlbSV07Ci0KLSNlbmRpZgotCi1CT09TVF9UVF9BVVhfUFJPTU9URURfSU5ERVhfVEVTVEVS
KDEsIGludCAgICAgICAgICApCi1CT09TVF9UVF9BVVhfUFJPTU9URURfSU5ERVhfVEVTVEVSKDIs
IHVuc2lnbmVkIGludCApCi1CT09TVF9UVF9BVVhfUFJPTU9URURfSU5ERVhfVEVTVEVSKDMsIGxv
bmcgICAgICAgICApCi1CT09TVF9UVF9BVVhfUFJPTU9URURfSU5ERVhfVEVTVEVSKDQsIHVuc2ln
bmVkIGxvbmcpCi0KLSNpZiBkZWZpbmVkKEJPT1NUX0hBU19MT05HX0xPTkcpCi1CT09TVF9UVF9B
VVhfUFJPTU9URURfSU5ERVhfVEVTVEVSKDUsIGJvb3N0Ojpsb25nX2xvbmdfdHlwZSApCi1CT09T
VF9UVF9BVVhfUFJPTU9URURfSU5ERVhfVEVTVEVSKDYsIGJvb3N0Ojp1bG9uZ19sb25nX3R5cGUp
Ci0jZWxpZiBkZWZpbmVkKEJPT1NUX0hBU19NU19JTlQ2NCkKLUJPT1NUX1RUX0FVWF9QUk9NT1RF
RF9JTkRFWF9URVNURVIoNywgX19pbnQ2NCAgICAgICAgICkKLUJPT1NUX1RUX0FVWF9QUk9NT1RF
RF9JTkRFWF9URVNURVIoOCwgdW5zaWduZWQgX19pbnQ2NCkKLSNlbmRpZgotCi0jdW5kZWYgQk9P
U1RfVFRfQVVYX1BST01PVEVEX0lOREVYX1RFU1RFUgotCi0KLS8vIEdldCBhbiBpbmRleCBvZiBw
cm9tb3RlZCB0eXBlIGZvciB0eXBlIFQuCi0vLyBQcmVjb25kaXRpb246IG5lZWRfcHJvbW90aW9u
PFQ+Ci10ZW1wbGF0ZTxjbGFzcyBUPgotc3RydWN0IHByb21vdGVkX2luZGV4Ci17Ci0gICAgc3Rh
dGljIFQgdGVzdGVlOyAvLyB1bmRlZmluZWQKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoaW50
LCB2YWx1ZSA9IHNpemVvZihwcm9tb3RlZF9pbmRleF90ZXN0ZXIoK3Rlc3RlZSkpICk7Ci0gICAg
Ly8gVW5hcnkgcGx1cyBwcm9tb3RlcyB0ZXN0ZWUgICAgICAgICAgICAgICAgICAgIExPT0sgSEVS
RSAtLS0+IF4KLX07Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3QgaW50ZWdyYWxfcHJvbW90
aW9uX2ltcGwKLXsKLSAgICB0eXBlZGVmIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgcHJvbW90ZV9m
cm9tX2luZGV4PAotICAgICAgICAoYm9vc3Q6OnR5cGVfdHJhaXRzOjpkZXRhaWw6OnByb21vdGVk
X2luZGV4PFQ+Ojp2YWx1ZSkKLSAgICAgICwgKGJvb3N0Ojppc19jb25zdDxUPjo6dmFsdWUpCi0g
ICAgICAsIChib29zdDo6aXNfdm9sYXRpbGU8VD46OnZhbHVlKQotICAgICAgPjo6dHlwZSB0eXBl
OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgVCwgYm9vbCBiPiBzdHJ1Y3QgaW50ZWdyYWxfcHJvbW90
aW9uIHsgdHlwZWRlZiBUIHR5cGU7IH07Ci10ZW1wbGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgaW50ZWdy
YWxfcHJvbW90aW9uPFQsIHRydWU+IDogcHVibGljIGludGVncmFsX3Byb21vdGlvbl9pbXBsPFQ+
e307Ci0KLX0gfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGludGVncmFsX3Byb21vdGlv
bgotewotcHJpdmF0ZToKLSAgIHR5cGVkZWYgYm9vc3Q6OnR5cGVfdHJhaXRzOjpkZXRhaWw6Om5l
ZWRfcHJvbW90aW9uPHR5cGVuYW1lIHJlbW92ZV9jdjxUPjo6dHlwZT4gdGFnX3R5cGU7Ci1wdWJs
aWM6Ci0gICB0eXBlZGVmIHR5cGVuYW1lIGJvb3N0Ojp0eXBlX3RyYWl0czo6ZGV0YWlsOjppbnRl
Z3JhbF9wcm9tb3Rpb248VCwgdGFnX3R5cGU6OnZhbHVlPjo6dHlwZSB0eXBlOwotfTsKLQotfQot
Ci0jZW5kaWYgLy8gI2lmbmRlZiBGSUxFX2Jvb3N0X3R5cGVfdHJhaXRzX2ludGVncmFsX3Byb21v
dGlvbl9ocHBfSU5DTFVERUQKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaW50cmluc2ljcy5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pbnRyaW5zaWNzLmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIyNDZiZTRkM2VlYWFlZmRmOTIwZWE0
Y2U2ZTQ3MmUxODc0NThhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3Ry
YWl0cy9pbnRyaW5zaWNzLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4MCArMCwwIEBACi0vLyAg
KEMpIENvcHlyaWdodCBTdGV2ZSBDbGVhcnksIEJlbWFuIERhd2VzLCBIb3dhcmQgSGlubmFudCAm
IEpvaG4gTWFkZG9jayAyMDAwLgotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRp
b24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lv
biAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQK
LS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUg
aHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVy
c2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9JTlRSSU5T
SUNTX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9JTlRSSU5TSUNTX0hQUF9JTkNMVURF
RAotCi0jaWZuZGVmIEJPT1NUX1RUX0RJU0FCTEVfSU5UUklOU0lDUwotCi0jaW5jbHVkZSA8Ym9v
c3QvY29uZmlnLmhwcD4KLQotI2lmbmRlZiBCT09TVF9UVF9DT05GSUdfSFBQX0lOQ0xVREVECi0j
aW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2NvbmZpZy5ocHA+Ci0jZW5kaWYKLQot
Ly8KLS8vIEhlbHBlciBtYWNyb3MgZm9yIGJ1aWx0aW4gY29tcGlsZXIgc3VwcG9ydC4KLS8vIElm
IHlvdXIgY29tcGlsZXIgaGFzIGJ1aWx0aW4gc3VwcG9ydCBmb3IgYW55IG9mIHRoZSBmb2xsb3dp
bmcKLS8vIHRyYWl0cyBjb25jZXB0cywgdGhlbiByZWRlZmluZSB0aGUgYXBwcm9wcmlhdGUgbWFj
cm9zIHRvIHBpY2sKLS8vIHVwIG9uIHRoZSBjb21waWxlciBzdXBwb3J0OgotLy8KLS8vICh0aGVz
ZSBzaG91bGQgbGFyZ2VseSBpZ25vcmUgY3YtcXVhbGlmaWVycykKLS8vIEJPT1NUX0lTX1VOSU9O
KFQpIHNob3VsZCBldmFsdWF0ZSB0byB0cnVlIGlmIFQgaXMgYSB1bmlvbiB0eXBlCi0vLyBCT09T
VF9JU19QT0QoVCkgc2hvdWxkIGV2YWx1YXRlIHRvIHRydWUgaWYgVCBpcyBhIFBPRCB0eXBlCi0v
LyBCT09TVF9JU19FTVBUWShUKSBzaG91bGQgZXZhbHVhdGUgdG8gdHJ1ZSBpZiBUIGlzIGFuIGVt
cHR5IGNsYXNzIHR5cGUgKGFuZCBub3QgYSB1bmlvbikKLS8vIEJPT1NUX0hBU19UUklWSUFMX0NP
TlNUUlVDVE9SKFQpIHNob3VsZCBldmFsdWF0ZSB0byB0cnVlIGlmICJUIHg7IiBoYXMgbm8gZWZm
ZWN0Ci0vLyBCT09TVF9IQVNfVFJJVklBTF9DT1BZKFQpIHNob3VsZCBldmFsdWF0ZSB0byB0cnVl
IGlmIFQodCkgPD09PiBtZW1jcHkKLS8vIEJPT1NUX0hBU19UUklWSUFMX01PVkVfQ09OU1RSVUNU
T1IoVCkgc2hvdWxkIGV2YWx1YXRlIHRvIHRydWUgaWYgVChib29zdDo6bW92ZSh0KSkgPD09PiBt
ZW1jcHkKLS8vIEJPT1NUX0hBU19UUklWSUFMX0FTU0lHTihUKSBzaG91bGQgZXZhbHVhdGUgdG8g
dHJ1ZSBpZiB0ID0gdSA8PT0+IG1lbWNweQotLy8gQk9PU1RfSEFTX1RSSVZJQUxfTU9WRV9BU1NJ
R04oVCkgc2hvdWxkIGV2YWx1YXRlIHRvIHRydWUgaWYgdCA9IGJvb3N0Ojptb3ZlKHUpIDw9PT4g
bWVtY3B5Ci0vLyBCT09TVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKFQpIHNob3VsZCBldmFsdWF0
ZSB0byB0cnVlIGlmIH5UKCkgaGFzIG5vIGVmZmVjdAotLy8gQk9PU1RfSEFTX05PVEhST1dfQ09O
U1RSVUNUT1IoVCkgc2hvdWxkIGV2YWx1YXRlIHRvIHRydWUgaWYgIlQgeDsiIGNhbiBub3QgdGhy
b3cKLS8vIEJPT1NUX0hBU19OT1RIUk9XX0NPUFkoVCkgc2hvdWxkIGV2YWx1YXRlIHRvIHRydWUg
aWYgVCh0KSBjYW4gbm90IHRocm93Ci0vLyBCT09TVF9IQVNfTk9USFJPV19BU1NJR04oVCkgc2hv
dWxkIGV2YWx1YXRlIHRvIHRydWUgaWYgdCA9IHUgY2FuIG5vdCB0aHJvdwotLy8gQk9PU1RfSEFT
X1ZJUlRVQUxfREVTVFJVQ1RPUihUKSBzaG91bGQgZXZhbHVhdGUgdG8gdHJ1ZSBUIGhhcyBhIHZp
cnR1YWwgZGVzdHJ1Y3RvcgotLy8gQk9PU1RfSVNfTk9USFJPV19NT1ZFX0NPTlNUUlVDVChUKSBz
aG91bGQgZXZhbHVhdGUgdG8gdHJ1ZSBpZiBUIGhhcyBhIG5vbi10aHJvd2luZyBtb3ZlIGNvbnN0
cnVjdG9yLgotLy8gQk9PU1RfSVNfTk9USFJPV19NT1ZFX0FTU0lHTihUKSBzaG91bGQgZXZhbHVh
dGUgdG8gdHJ1ZSBpZiBUIGhhcyBhIG5vbi10aHJvd2luZyBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0
b3IuCi0vLwotLy8gVGhlIGZvbGxvd2luZyBjYW4gYWxzbyBiZSBkZWZpbmVkOiB3aGVuIGRldGVj
dGVkIG91ciBpbXBsZW1lbnRhdGlvbiBpcyBncmVhdGx5IHNpbXBsaWZpZWQuCi0vLwotLy8gQk9P
U1RfSVNfQUJTVFJBQ1QoVCkgdHJ1ZSBpZiBUIGlzIGFuIGFic3RyYWN0IHR5cGUKLS8vIEJPT1NU
X0lTX0JBU0VfT0YoVCxVKSB0cnVlIGlmIFQgaXMgYSBiYXNlIGNsYXNzIG9mIFUKLS8vIEJPT1NU
X0lTX0NMQVNTKFQpIHRydWUgaWYgVCBpcyBhIGNsYXNzIHR5cGUgKGFuZCBub3QgYSB1bmlvbikK
LS8vIEJPT1NUX0lTX0NPTlZFUlRJQkxFKFQsVSkgdHJ1ZSBpZiBUIGlzIGNvbnZlcnRpYmxlIHRv
IFUKLS8vIEJPT1NUX0lTX0VOVU0oVCkgdHJ1ZSBpcyBUIGlzIGFuIGVudW0KLS8vIEJPT1NUX0lT
X1BPTFlNT1JQSElDKFQpIHRydWUgaWYgVCBpcyBhIHBvbHltb3JwaGljIHR5cGUKLS8vIEJPT1NU
X0FMSUdOTUVOVF9PRihUKSBzaG91bGQgZXZhbHVhdGUgdG8gdGhlIGFsaWdubWVudCByZXF1aXJl
bWVudHMgb2YgdHlwZSBULgotLy8KLS8vIGRlZmluZSBCT09TVF9UVF9ESVNBQkxFX0lOVFJJTlNJ
Q1MgdG8gcHJldmVudCBhbnkgaW50cmluc2ljcyBiZWluZyB1c2VkIChtb3N0bHkgdXNlZCB3aGVu
IHRlc3RpbmcpCi0vLwotCi0jaWZkZWYgQk9PU1RfSEFTX1NHSV9UWVBFX1RSQUlUUwotICAgIC8v
IEhvb2sgaW50byBTR0kncyBfX3R5cGVfdHJhaXRzIGNsYXNzLCB0aGlzIHdpbGwgcGljayB1cCB1
c2VyIHN1cHBsaWVkCi0gICAgLy8gc3BlY2lhbGl6YXRpb25zIGFzIHdlbGwgYXMgU0dJIC0gY29t
cGlsZXIgc3VwcGxpZWQgc3BlY2lhbGl6YXRpb25zLgotIyAgIGluY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2lzX3NhbWUuaHBwPgotIyAgIGlmZGVmIF9fTmV0QlNEX18KLSAgICAgIC8vIFRoZXJl
IGFyZSB0d28gZGlmZmVyZW50IHZlcnNpb25zIG9mIHR5cGVfdHJhaXRzLmggb24gTmV0QlNEIG9u
IFNwYXJrCi0gICAgICAvLyB1c2UgYW4gaW1wbGljaXQgaW5jbHVkZSB2aWEgYWxnb3JpdGhtIGlu
c3RlYWQsIHRvIG1ha2Ugc3VyZSB3ZSBnZXQKLSAgICAgIC8vIHRoZSBzYW1lIHZlcnNpb24gYXMg
dGhlIHN0ZCBsaWI6Ci0jICAgICBpbmNsdWRlIDxhbGdvcml0aG0+Ci0jICAgZWxzZQotIyAgICBp
bmNsdWRlIDx0eXBlX3RyYWl0cy5oPgotIyAgIGVuZGlmCi0jICAgZGVmaW5lIEJPT1NUX0lTX1BP
RChUKSA6OmJvb3N0Ojppc19zYW1lPCB0eXBlbmFtZSA6Ol9fdHlwZV90cmFpdHM8VD46OmlzX1BP
RF90eXBlLCA6Ol9fdHJ1ZV90eXBlPjo6dmFsdWUKLSMgICBkZWZpbmUgQk9PU1RfSEFTX1RSSVZJ
QUxfQ09OU1RSVUNUT1IoVCkgOjpib29zdDo6aXNfc2FtZTwgdHlwZW5hbWUgOjpfX3R5cGVfdHJh
aXRzPFQ+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yLCA6Ol9fdHJ1ZV90eXBlPjo6
dmFsdWUKLSMgICBkZWZpbmUgQk9PU1RfSEFTX1RSSVZJQUxfQ09QWShUKSA6OmJvb3N0Ojppc19z
YW1lPCB0eXBlbmFtZSA6Ol9fdHlwZV90cmFpdHM8VD46Omhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3IsIDo6X190cnVlX3R5cGU+Ojp2YWx1ZQotIyAgIGRlZmluZSBCT09TVF9IQVNfVFJJVklB
TF9BU1NJR04oVCkgOjpib29zdDo6aXNfc2FtZTwgdHlwZW5hbWUgOjpfX3R5cGVfdHJhaXRzPFQ+
OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yLCA6Ol9fdHJ1ZV90eXBlPjo6dmFsdWUK
LSMgICBkZWZpbmUgQk9PU1RfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihUKSA6OmJvb3N0Ojppc19z
YW1lPCB0eXBlbmFtZSA6Ol9fdHlwZV90cmFpdHM8VD46Omhhc190cml2aWFsX2Rlc3RydWN0b3Is
IDo6X190cnVlX3R5cGU+Ojp2YWx1ZQotCi0jICAgaWZkZWYgX19zZ2kKLSMgICAgICBkZWZpbmUg
Qk9PU1RfSEFTX1RZUEVfVFJBSVRTX0lOVFJJTlNJQ1MKLSMgICBlbmRpZgotI2VuZGlmCi0KLSNp
ZiBkZWZpbmVkKF9fTVNMX0NQUF9fKSAmJiAoX19NU0xfQ1BQX18gPj0gMHg4MDAwKQotICAgIC8v
IE1ldHJvd2Vya3MgY29tcGlsZXIgaXMgYWNxdWlyaW5nIGludHJpbnNpYyB0eXBlIHRyYWl0cyBz
dXBwb3J0Ci0gICAgLy8gcG9zdCB2ZXJzaW9uIDguICBXZSBob29rIGludG8gdGhlIHB1Ymxpc2hl
ZCBpbnRlcmZhY2UgdG8gcGljayB1cAotICAgIC8vIHVzZXIgZGVmaW5lZCBzcGVjaWFsaXphdGlv
bnMgYXMgd2VsbCBhcyBjb21waWxlciBpbnRyaW5zaWNzIGFzIAotICAgIC8vIGFuZCB3aGVuIHRo
ZXkgYmVjb21lIGF2YWlsYWJsZToKLSMgICBpbmNsdWRlIDxtc2xfdXRpbGl0eT4KLSMgICBkZWZp
bmUgQk9PU1RfSVNfVU5JT04oVCkgQk9PU1RfU1REX0VYVEVOU0lPTl9OQU1FU1BBQ0U6OmlzX3Vu
aW9uPFQ+Ojp2YWx1ZQotIyAgIGRlZmluZSBCT09TVF9JU19QT0QoVCkgQk9PU1RfU1REX0VYVEVO
U0lPTl9OQU1FU1BBQ0U6OmlzX1BPRDxUPjo6dmFsdWUKLSMgICBkZWZpbmUgQk9PU1RfSEFTX1RS
SVZJQUxfQ09OU1RSVUNUT1IoVCkgQk9PU1RfU1REX0VYVEVOU0lPTl9OQU1FU1BBQ0U6Omhhc190
cml2aWFsX2RlZmF1bHRfY3RvcjxUPjo6dmFsdWUKLSMgICBkZWZpbmUgQk9PU1RfSEFTX1RSSVZJ
QUxfQ09QWShUKSBCT09TVF9TVERfRVhURU5TSU9OX05BTUVTUEFDRTo6aGFzX3RyaXZpYWxfY29w
eV9jdG9yPFQ+Ojp2YWx1ZQotIyAgIGRlZmluZSBCT09TVF9IQVNfVFJJVklBTF9BU1NJR04oVCkg
Qk9PU1RfU1REX0VYVEVOU0lPTl9OQU1FU1BBQ0U6Omhhc190cml2aWFsX2Fzc2lnbm1lbnQ8VD46
OnZhbHVlCi0jICAgZGVmaW5lIEJPT1NUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoVCkgQk9PU1Rf
U1REX0VYVEVOU0lPTl9OQU1FU1BBQ0U6Omhhc190cml2aWFsX2R0b3I8VD46OnZhbHVlCi0jICAg
ZGVmaW5lIEJPT1NUX0hBU19UWVBFX1RSQUlUU19JTlRSSU5TSUNTCi0jZW5kaWYKLQotI2lmIChk
ZWZpbmVkKEJPT1NUX01TVkMpICYmIGRlZmluZWQoQk9PU1RfTVNWQ19GVUxMX1ZFUikgJiYgKEJP
T1NUX01TVkNfRlVMTF9WRVIgPj0xNDAwNTAyMTUpKVwKLSAgICAgICAgIHx8IChkZWZpbmVkKEJP
T1NUX0lOVEVMKSAmJiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTUwMCkpCi0v
LwotLy8gTm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHRoZXNlIGludHJpbnNpY3MgcmVseSBvbiBvdGhl
ciB0eXBlIHRyYWl0cyBjbGFzc2VzCi0vLyB3ZSBkbyBub3QgI2luY2x1ZGUgdGhvc2UgaGVyZSBh
cyBpdCBwcm9kdWNlcyBjeWNsaWMgZGVwZW5kZW5jaWVzIGFuZAotLy8gY2FuIGNhdXNlIHRoZSBp
bnRyaW5zaWNzIHRvIG5vdCBldmVuIGJlIHVzZWQgYXQgYWxsIQotLy8KLSMgICBkZWZpbmUgQk9P
U1RfSVNfVU5JT04oVCkgX19pc191bmlvbihUKQotIyAgIGRlZmluZSBCT09TVF9JU19QT0QoVCkg
KF9faXNfcG9kKFQpICYmIF9faGFzX3RyaXZpYWxfY29uc3RydWN0b3IoVCkpCi0jICAgZGVmaW5l
IEJPT1NUX0lTX0VNUFRZKFQpIF9faXNfZW1wdHkoVCkKLSMgICBkZWZpbmUgQk9PU1RfSEFTX1RS
SVZJQUxfQ09OU1RSVUNUT1IoVCkgX19oYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcihUKQotIyAgIGRl
ZmluZSBCT09TVF9IQVNfVFJJVklBTF9BU1NJR04oVCkgKF9faGFzX3RyaXZpYWxfYXNzaWduKFQp
IHx8ICggOjpib29zdDo6aXNfcG9kPFQ+Ojp2YWx1ZSAmJiAhIDo6Ym9vc3Q6OmlzX2NvbnN0PFQ+
Ojp2YWx1ZSAmJiAhOjpib29zdDo6aXNfdm9sYXRpbGU8VD46OnZhbHVlKSkKLSMgICBkZWZpbmUg
Qk9PU1RfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihUKSAoX19oYXNfdHJpdmlhbF9kZXN0cnVjdG9y
KFQpIHx8IDo6Ym9vc3Q6OmlzX3BvZDxUPjo6dmFsdWUpCi0jICAgZGVmaW5lIEJPT1NUX0hBU19O
T1RIUk9XX0NPTlNUUlVDVE9SKFQpIChfX2hhc19ub3Rocm93X2NvbnN0cnVjdG9yKFQpIHx8IDo6
Ym9vc3Q6Omhhc190cml2aWFsX2NvbnN0cnVjdG9yPFQ+Ojp2YWx1ZSkKLSNpZiAhZGVmaW5lZChC
T09TVF9JTlRFTCkKLSMgICBkZWZpbmUgQk9PU1RfSEFTX05PVEhST1dfQ09QWShUKSAoKF9faGFz
X25vdGhyb3dfY29weShUKSB8fCA6OmJvb3N0OjpoYXNfdHJpdmlhbF9jb3B5PFQ+Ojp2YWx1ZSkg
JiYgIWlzX2FycmF5PFQ+Ojp2YWx1ZSkKLSMgICBkZWZpbmUgQk9PU1RfSEFTX1RSSVZJQUxfQ09Q
WShUKSAoX19oYXNfdHJpdmlhbF9jb3B5KFQpIHx8IDo6Ym9vc3Q6OmlzX3BvZDxUPjo6dmFsdWUp
Ci0jZWxpZiAoX01TQ19WRVIgPj0gMTkwMCkKLSMgICBkZWZpbmUgQk9PU1RfSEFTX05PVEhST1df
Q09QWShUKSAoKF9faXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlKFQsIHR5cGVuYW1lIGFkZF9sdmFs
dWVfcmVmZXJlbmNlPHR5cGVuYW1lIGFkZF9jb25zdDxUPjo6dHlwZT46OnR5cGUpKSAmJiAhaXNf
YXJyYXk8VD46OnZhbHVlKQotIyAgIGRlZmluZSBCT09TVF9IQVNfVFJJVklBTF9DT1BZKFQpIChf
X2lzX3RyaXZpYWxseV9jb25zdHJ1Y3RpYmxlKFQsIHR5cGVuYW1lIGFkZF9sdmFsdWVfcmVmZXJl
bmNlPHR5cGVuYW1lIGFkZF9jb25zdDxUPjo6dHlwZT46OnR5cGUpKQotI2VuZGlmCi0jICAgZGVm
aW5lIEJPT1NUX0hBU19OT1RIUk9XX0FTU0lHTihUKSAoX19oYXNfbm90aHJvd19hc3NpZ24oVCkg
fHwgOjpib29zdDo6aGFzX3RyaXZpYWxfYXNzaWduPFQ+Ojp2YWx1ZSkKLSMgICBkZWZpbmUgQk9P
U1RfSEFTX1ZJUlRVQUxfREVTVFJVQ1RPUihUKSBfX2hhc192aXJ0dWFsX2Rlc3RydWN0b3IoVCkK
LQotIyAgIGRlZmluZSBCT09TVF9JU19BQlNUUkFDVChUKSBfX2lzX2Fic3RyYWN0KFQpCi0jICAg
ZGVmaW5lIEJPT1NUX0lTX0JBU0VfT0YoVCxVKSAoX19pc19iYXNlX29mKFQsVSkgJiYgIWlzX3Nh
bWU8VCxVPjo6dmFsdWUpCi0jICAgZGVmaW5lIEJPT1NUX0lTX0NMQVNTKFQpIF9faXNfY2xhc3Mo
VCkKLSMgICBkZWZpbmUgQk9PU1RfSVNfQ09OVkVSVElCTEUoVCxVKSAoKF9faXNfY29udmVydGli
bGVfdG8oVCxVKSB8fCAoaXNfc2FtZTxULFU+Ojp2YWx1ZSAmJiAhaXNfZnVuY3Rpb248VT46OnZh
bHVlKSkgJiYgIV9faXNfYWJzdHJhY3QoVSkpCi0jICAgZGVmaW5lIEJPT1NUX0lTX0VOVU0oVCkg
X19pc19lbnVtKFQpCi0vLyAgVGhpcyBvbmUgZmFpbHMgaWYgdGhlIGRlZmF1bHQgYWxpZ25tZW50
IGhhcyBiZWVuIGNoYW5nZWQgd2l0aCAvWnA6Ci0vLyAgIyAgIGRlZmluZSBCT09TVF9BTElHTk1F
TlRfT0YoVCkgX19hbGlnbm9mKFQpCi0KLSMgICBpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01T
Q19WRVIgPj0gMTcwMCkKLSMgICAgICAgZGVmaW5lIEJPT1NUX0hBU19UUklWSUFMX01PVkVfQ09O
U1RSVUNUT1IoVCkgKChfX2hhc190cml2aWFsX21vdmVfY29uc3RydWN0b3IoVCkgfHwgYm9vc3Q6
OmlzX3BvZDxUPjo6dmFsdWUpICYmICEgOjpib29zdDo6aXNfdm9sYXRpbGU8VD46OnZhbHVlICYm
ICEgOjpib29zdDo6aXNfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSkKLSMgICAgICAgZGVmaW5lIEJPT1NU
X0hBU19UUklWSUFMX01PVkVfQVNTSUdOKFQpICgoX19oYXNfdHJpdmlhbF9tb3ZlX2Fzc2lnbihU
KSB8fCBib29zdDo6aXNfcG9kPFQ+Ojp2YWx1ZSkgJiYgISA6OmJvb3N0Ojppc19jb25zdDxUPjo6
dmFsdWUgJiYgITo6Ym9vc3Q6OmlzX3ZvbGF0aWxlPFQ+Ojp2YWx1ZSAmJiAhIDo6Ym9vc3Q6Omlz
X3JlZmVyZW5jZTxUPjo6dmFsdWUpCi0jICAgZW5kaWYKLSNpZm5kZWYgQk9PU1RfTk9fQ1hYMTFf
RklOQUwKLS8vICBUaGlzIG9uZSBkb2Vzbid0IHF1aXRlIGFsd2F5cyBkbyB0aGUgcmlnaHQgdGhp
bmcgb24gb2xkZXIgVkMrKyB2ZXJzaW9ucwotLy8gIHdlIHJlYWxseSBuZWVkIGl0IHdoZW4gdGhl
IGZpbmFsIGtleXdvcmQgaXMgc3VwcG9yeXRlZCB0aG91Z2g6Ci0jICAgZGVmaW5lIEJPT1NUX0lT
X1BPTFlNT1JQSElDKFQpIF9faXNfcG9seW1vcnBoaWMoVCkKLSNlbmRpZgotI2lmIF9NU0NfRlVM
TF9WRVIgPj0gMTgwMDIwODI3Ci0jICAgZGVmaW5lIEJPT1NUX0lTX05PVEhST1dfTU9WRV9BU1NJ
R04oVCkgKF9faXNfbm90aHJvd19hc3NpZ25hYmxlKFQmLCBUJiYpKQotIyAgIGRlZmluZSBCT09T
VF9JU19OT1RIUk9XX01PVkVfQ09OU1RSVUNUKFQpIChfX2lzX25vdGhyb3dfY29uc3RydWN0aWJs
ZShULCBUJiYpKQotI2VuZGlmCi0jICAgZGVmaW5lIEJPT1NUX0hBU19UWVBFX1RSQUlUU19JTlRS
SU5TSUNTCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19ETUNfXykgJiYgKF9fRE1DX18gPj0gMHg4
NDgpCi0vLyBGb3IgRGlnaXRhbCBNYXJzIEMrKywgd3d3LmRpZ2l0YWxtYXJzLmNvbQotIyAgIGRl
ZmluZSBCT09TVF9JU19VTklPTihUKSAoX190eXBlaW5mbyhUKSAmIDB4NDAwKQotIyAgIGRlZmlu
ZSBCT09TVF9JU19QT0QoVCkgKF9fdHlwZWluZm8oVCkgJiAweDgwMCkKLSMgICBkZWZpbmUgQk9P
U1RfSVNfRU1QVFkoVCkgKF9fdHlwZWluZm8oVCkgJiAweDEwMDApCi0jICAgZGVmaW5lIEJPT1NU
X0hBU19UUklWSUFMX0NPTlNUUlVDVE9SKFQpIChfX3R5cGVpbmZvKFQpICYgMHgxMCkKLSMgICBk
ZWZpbmUgQk9PU1RfSEFTX1RSSVZJQUxfQ09QWShUKSAoX190eXBlaW5mbyhUKSAmIDB4MjApCi0j
ICAgZGVmaW5lIEJPT1NUX0hBU19UUklWSUFMX0FTU0lHTihUKSAoX190eXBlaW5mbyhUKSAmIDB4
NDApCi0jICAgZGVmaW5lIEJPT1NUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoVCkgKF9fdHlwZWlu
Zm8oVCkgJiAweDgpCi0jICAgZGVmaW5lIEJPT1NUX0hBU19OT1RIUk9XX0NPTlNUUlVDVE9SKFQp
IChfX3R5cGVpbmZvKFQpICYgMHg4MCkKLSMgICBkZWZpbmUgQk9PU1RfSEFTX05PVEhST1dfQ09Q
WShUKSAoX190eXBlaW5mbyhUKSAmIDB4MTAwKQotIyAgIGRlZmluZSBCT09TVF9IQVNfTk9USFJP
V19BU1NJR04oVCkgKF9fdHlwZWluZm8oVCkgJiAweDIwMCkKLSMgICBkZWZpbmUgQk9PU1RfSEFT
X1ZJUlRVQUxfREVTVFJVQ1RPUihUKSAoX190eXBlaW5mbyhUKSAmIDB4NCkKLSMgICBkZWZpbmUg
Qk9PU1RfSEFTX1RZUEVfVFJBSVRTX0lOVFJJTlNJQ1MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChC
T09TVF9DTEFORykgJiYgZGVmaW5lZChfX2hhc19mZWF0dXJlKSAmJiAhZGVmaW5lZChfX0NVREFD
Q19fKQotLy8KLS8vIE5vdGUgdGhhdCB0aGVzZSBpbnRyaW5zaWNzIGFyZSBkaXNhYmxlZCBmb3Ig
dGhlIENVREEgbWV0YS1jb21waWxlciBhcyBpdCBhcHBlYXJzCi0vLyB0byBub3Qgc3VwcG9ydCB0
aGVtLCBldmVuIHRob3VnaCB0aGUgdW5kZXJseWluZyBjbGFuZyBjb21waWxlciBkb2VzIHNvLgot
Ly8gVGhpcyBpcyBhIHJ1YmJpc2ggZml4IGFzIGl0IGJhc2ljYWxseSBzdG9wcyB0eXBlIHRyYWl0
cyBmcm9tIHdvcmtpbmcgY29ycmVjdGx5LCAKLS8vIGJ1dCBtYXliZSB0aGUgYmVzdCB3ZSBjYW4g
ZG8gZm9yIG5vdy4gIFNlZSBodHRwczovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQv
MTA2OTQKLS8vCi0vLwotLy8gTm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHRoZXNlIGludHJpbnNpY3Mg
cmVseSBvbiBvdGhlciB0eXBlIHRyYWl0cyBjbGFzc2VzCi0vLyB3ZSBkbyBub3QgI2luY2x1ZGUg
dGhvc2UgaGVyZSBhcyBpdCBwcm9kdWNlcyBjeWNsaWMgZGVwZW5kZW5jaWVzIGFuZAotLy8gY2Fu
IGNhdXNlIHRoZSBpbnRyaW5zaWNzIHRvIG5vdCBldmVuIGJlIHVzZWQgYXQgYWxsIQotLy8KLSMg
ICBpbmNsdWRlIDxjc3RkZGVmPgotCi0jICAgaWYgX19oYXNfZmVhdHVyZShpc191bmlvbikKLSMg
ICAgIGRlZmluZSBCT09TVF9JU19VTklPTihUKSBfX2lzX3VuaW9uKFQpCi0jICAgZW5kaWYKLSMg
ICBpZiAoIWRlZmluZWQoX19HTElCQ1hYX18pIHx8IChfX0dMSUJDWFhfXyA+PSAyMDA4MDMwNiAm
JiBfX0dMSUJDWFhfXyAhPSAyMDA4MDUxOSkpICYmIF9faGFzX2ZlYXR1cmUoaXNfcG9kKQotIyAg
ICAgZGVmaW5lIEJPT1NUX0lTX1BPRChUKSBfX2lzX3BvZChUKQotIyAgIGVuZGlmCi0jICAgaWYg
KCFkZWZpbmVkKF9fR0xJQkNYWF9fKSB8fCAoX19HTElCQ1hYX18gPj0gMjAwODAzMDYgJiYgX19H
TElCQ1hYX18gIT0gMjAwODA1MTkpKSAmJiBfX2hhc19mZWF0dXJlKGlzX2VtcHR5KQotIyAgICAg
ZGVmaW5lIEJPT1NUX0lTX0VNUFRZKFQpIF9faXNfZW1wdHkoVCkKLSMgICBlbmRpZgotIyAgIGlm
IF9faGFzX2ZlYXR1cmUoaGFzX3RyaXZpYWxfY29uc3RydWN0b3IpCi0jICAgICBkZWZpbmUgQk9P
U1RfSEFTX1RSSVZJQUxfQ09OU1RSVUNUT1IoVCkgX19oYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcihU
KQotIyAgIGVuZGlmCi0jICAgaWYgX19oYXNfZmVhdHVyZShoYXNfdHJpdmlhbF9jb3B5KQotIyAg
ICAgZGVmaW5lIEJPT1NUX0hBU19UUklWSUFMX0NPUFkoVCkgKF9faGFzX3RyaXZpYWxfY29weShU
KSAmJiAhaXNfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSkKLSMgICBlbmRpZgotIyAgIGlmIF9faGFzX2Zl
YXR1cmUoaGFzX3RyaXZpYWxfYXNzaWduKQotIyAgICAgZGVmaW5lIEJPT1NUX0hBU19UUklWSUFM
X0FTU0lHTihUKSAoX19oYXNfdHJpdmlhbF9hc3NpZ24oVCkgJiYgIWlzX3ZvbGF0aWxlPFQ+Ojp2
YWx1ZSAmJiBpc19hc3NpZ25hYmxlPFQmLCBjb25zdCBUJj46OnZhbHVlKQotIyAgIGVuZGlmCi0j
ICAgaWYgX19oYXNfZmVhdHVyZShoYXNfdHJpdmlhbF9kZXN0cnVjdG9yKQotIyAgICAgZGVmaW5l
IEJPT1NUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoVCkgKF9faGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cihUKSAgJiYgaXNfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSkKLSMgICBlbmRpZgotIyAgIGlmIF9f
aGFzX2ZlYXR1cmUoaGFzX25vdGhyb3dfY29uc3RydWN0b3IpCi0jICAgICBkZWZpbmUgQk9PU1Rf
SEFTX05PVEhST1dfQ09OU1RSVUNUT1IoVCkgKF9faGFzX25vdGhyb3dfY29uc3RydWN0b3IoVCkg
JiYgaXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSkKLSMgICBlbmRpZgotIyAgIGlm
IF9faGFzX2ZlYXR1cmUoaGFzX25vdGhyb3dfY29weSkKLSMgICAgIGRlZmluZSBCT09TVF9IQVNf
Tk9USFJPV19DT1BZKFQpIChfX2hhc19ub3Rocm93X2NvcHkoVCkgJiYgIWlzX3ZvbGF0aWxlPFQ+
Ojp2YWx1ZSAmJiAhaXNfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSAmJiBpc19jb3B5X2NvbnN0cnVjdGli
bGU8VD46OnZhbHVlKQotIyAgIGVuZGlmCi0jICAgaWYgX19oYXNfZmVhdHVyZShoYXNfbm90aHJv
d19hc3NpZ24pCi0jICAgICBkZWZpbmUgQk9PU1RfSEFTX05PVEhST1dfQVNTSUdOKFQpIChfX2hh
c19ub3Rocm93X2Fzc2lnbihUKSAmJiAhaXNfdm9sYXRpbGU8VD46OnZhbHVlICYmIGlzX2Fzc2ln
bmFibGU8VCYsIGNvbnN0IFQmPjo6dmFsdWUpCi0jICAgZW5kaWYKLSMgICBpZiBfX2hhc19mZWF0
dXJlKGhhc192aXJ0dWFsX2Rlc3RydWN0b3IpCi0jICAgICBkZWZpbmUgQk9PU1RfSEFTX1ZJUlRV
QUxfREVTVFJVQ1RPUihUKSBfX2hhc192aXJ0dWFsX2Rlc3RydWN0b3IoVCkKLSMgICBlbmRpZgot
IyAgIGlmIF9faGFzX2ZlYXR1cmUoaXNfYWJzdHJhY3QpCi0jICAgICBkZWZpbmUgQk9PU1RfSVNf
QUJTVFJBQ1QoVCkgX19pc19hYnN0cmFjdChUKQotIyAgIGVuZGlmCi0jICAgaWYgX19oYXNfZmVh
dHVyZShpc19iYXNlX29mKQotIyAgICAgZGVmaW5lIEJPT1NUX0lTX0JBU0VfT0YoVCxVKSAoX19p
c19iYXNlX29mKFQsVSkgJiYgIWlzX3NhbWU8VCxVPjo6dmFsdWUpCi0jICAgZW5kaWYKLSMgICBp
ZiBfX2hhc19mZWF0dXJlKGlzX2NsYXNzKQotIyAgICAgZGVmaW5lIEJPT1NUX0lTX0NMQVNTKFQp
IF9faXNfY2xhc3MoVCkKLSMgICBlbmRpZgotIyAgIGlmIF9faGFzX2ZlYXR1cmUoaXNfY29udmVy
dGlibGVfdG8pCi0jICAgICBkZWZpbmUgQk9PU1RfSVNfQ09OVkVSVElCTEUoVCxVKSBfX2lzX2Nv
bnZlcnRpYmxlX3RvKFQsVSkKLSMgICBlbmRpZgotIyAgIGlmIF9faGFzX2ZlYXR1cmUoaXNfZW51
bSkKLSMgICAgIGRlZmluZSBCT09TVF9JU19FTlVNKFQpIF9faXNfZW51bShUKQotIyAgIGVuZGlm
Ci0jICAgaWYgX19oYXNfZmVhdHVyZShpc19wb2x5bW9ycGhpYykKLSMgICAgIGRlZmluZSBCT09T
VF9JU19QT0xZTU9SUEhJQyhUKSBfX2lzX3BvbHltb3JwaGljKFQpCi0jICAgZW5kaWYKLSMgICBp
ZiBfX2hhc19mZWF0dXJlKGhhc190cml2aWFsX21vdmVfY29uc3RydWN0b3IpCi0jICAgICBkZWZp
bmUgQk9PU1RfSEFTX1RSSVZJQUxfTU9WRV9DT05TVFJVQ1RPUihUKSAoX19oYXNfdHJpdmlhbF9t
b3ZlX2NvbnN0cnVjdG9yKFQpICAmJiBpc19jb25zdHJ1Y3RpYmxlPFQsIFQmJj46OnZhbHVlICYm
ICE6OmJvb3N0Ojppc192b2xhdGlsZTxUPjo6dmFsdWUpCi0jICAgZW5kaWYKLSMgICBpZiBfX2hh
c19mZWF0dXJlKGhhc190cml2aWFsX21vdmVfYXNzaWduKQotIyAgICAgZGVmaW5lIEJPT1NUX0hB
U19UUklWSUFMX01PVkVfQVNTSUdOKFQpIChfX2hhc190cml2aWFsX21vdmVfYXNzaWduKFQpICYm
IGlzX2Fzc2lnbmFibGU8VCYsIFQmJj46OnZhbHVlICYmICE6OmJvb3N0Ojppc192b2xhdGlsZTxU
Pjo6dmFsdWUpCi0jICAgZW5kaWYKLSMgICBpZiAoIWRlZmluZWQodW5peCkgJiYgIWRlZmluZWQo
X191bml4X18pKSB8fCBkZWZpbmVkKF9fTFA2NF9fKSB8fCAhZGVmaW5lZChfX0dOVUNfXykKLS8v
IEdDQyBzb21ldGltZXMgbGllcyBhYm91dCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzCi0vLyBvZiB0
eXBlIGRvdWJsZSBvbiAzMi1iaXQgdW5peCBwbGF0Zm9ybXMsIHVzZSB0aGUKLS8vIG9sZCBpbXBs
ZW1lbnRhdGlvbiBpbnN0ZWFkIGluIHRoYXQgY2FzZToKLSMgICAgIGRlZmluZSBCT09TVF9BTElH
Tk1FTlRfT0YoVCkgX19hbGlnbm9mKFQpCi0jICAgZW5kaWYKLSMgICBpZiBfX2hhc19mZWF0dXJl
KGlzX2ZpbmFsKQotIyAgICAgZGVmaW5lIEJPT1NUX0lTX0ZJTkFMKFQpIF9faXNfZmluYWwoVCkK
LSMgICBlbmRpZgotCi0jICAgZGVmaW5lIEJPT1NUX0hBU19UWVBFX1RSQUlUU19JTlRSSU5TSUNT
Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPiA0KSB8fCAo
KF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSAmJiAhZGVmaW5lZChfX0dD
Q1hNTF9fKSkpICYmICFkZWZpbmVkKEJPT1NUX0NMQU5HKQotLy8KLS8vIE5vdGUgdGhhdCBldmVu
IHRob3VnaCB0aGVzZSBpbnRyaW5zaWNzIHJlbHkgb24gb3RoZXIgdHlwZSB0cmFpdHMgY2xhc3Nl
cwotLy8gd2UgZG8gbm90ICNpbmNsdWRlIHRob3NlIGhlcmUgYXMgaXQgcHJvZHVjZXMgY3ljbGlj
IGRlcGVuZGVuY2llcyBhbmQKLS8vIGNhbiBjYXVzZSB0aGUgaW50cmluc2ljcyB0byBub3QgZXZl
biBiZSB1c2VkIGF0IGFsbCEKLS8vCi0KLSNpZmRlZiBCT09TVF9JTlRFTAotIyAgZGVmaW5lIEJP
T1NUX0lOVEVMX1RUX09QVFMgfHwgaXNfcG9kPFQ+Ojp2YWx1ZQotI2Vsc2UKLSMgIGRlZmluZSBC
T09TVF9JTlRFTF9UVF9PUFRTCi0jZW5kaWYKLQotIyAgIGRlZmluZSBCT09TVF9JU19VTklPTihU
KSBfX2lzX3VuaW9uKFQpCi0jICAgZGVmaW5lIEJPT1NUX0lTX1BPRChUKSBfX2lzX3BvZChUKQot
IyAgIGRlZmluZSBCT09TVF9JU19FTVBUWShUKSBfX2lzX2VtcHR5KFQpCi0jICAgZGVmaW5lIEJP
T1NUX0hBU19UUklWSUFMX0NPTlNUUlVDVE9SKFQpICgoX19oYXNfdHJpdmlhbF9jb25zdHJ1Y3Rv
cihUKSBCT09TVF9JTlRFTF9UVF9PUFRTKSAmJiAhIDo6Ym9vc3Q6OmlzX3ZvbGF0aWxlPFQ+Ojp2
YWx1ZSkKLSMgICBkZWZpbmUgQk9PU1RfSEFTX1RSSVZJQUxfQ09QWShUKSAoKF9faGFzX3RyaXZp
YWxfY29weShUKSBCT09TVF9JTlRFTF9UVF9PUFRTKSAmJiAhaXNfcmVmZXJlbmNlPFQ+Ojp2YWx1
ZSkKLSNpZiAoX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXykgPj0gNDA5Ci0jICAgZGVm
aW5lIEJPT1NUX0hBU19UUklWSUFMX0FTU0lHTihUKSAoKF9faGFzX3RyaXZpYWxfYXNzaWduKFQp
IEJPT1NUX0lOVEVMX1RUX09QVFMpICYmICEgOjpib29zdDo6aXNfdm9sYXRpbGU8VD46OnZhbHVl
ICYmICEgOjpib29zdDo6aXNfY29uc3Q8VD46OnZhbHVlICYmIGlzX2Fzc2lnbmFibGU8VCYsIGNv
bnN0IFQmPjo6dmFsdWUpCi0jICAgZGVmaW5lIEJPT1NUX0hBU19UUklWSUFMX0RFU1RSVUNUT1Io
VCkgKF9faGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcihUKSBCT09TVF9JTlRFTF9UVF9PUFRTICYmIGlz
X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUpCi0jICAgZGVmaW5lIEJPT1NUX0hBU19OT1RIUk9XX0NP
TlNUUlVDVE9SKFQpIChfX2hhc19ub3Rocm93X2NvbnN0cnVjdG9yKFQpICYmIGlzX2RlZmF1bHRf
Y29uc3RydWN0aWJsZTxUPjo6dmFsdWUgQk9PU1RfSU5URUxfVFRfT1BUUykKLSMgICBkZWZpbmUg
Qk9PU1RfSEFTX05PVEhST1dfQ09QWShUKSAoKF9faGFzX25vdGhyb3dfY29weShUKSBCT09TVF9J
TlRFTF9UVF9PUFRTKSAmJiAhaXNfdm9sYXRpbGU8VD46OnZhbHVlICYmICFpc19yZWZlcmVuY2U8
VD46OnZhbHVlICYmIGlzX2NvcHlfY29uc3RydWN0aWJsZTxUPjo6dmFsdWUpCi0jICAgZGVmaW5l
IEJPT1NUX0hBU19OT1RIUk9XX0FTU0lHTihUKSAoKF9faGFzX25vdGhyb3dfYXNzaWduKFQpIEJP
T1NUX0lOVEVMX1RUX09QVFMpICYmICFpc192b2xhdGlsZTxUPjo6dmFsdWUgJiYgIWlzX2NvbnN0
PFQ+Ojp2YWx1ZSAmJiBpc19hc3NpZ25hYmxlPFQmLCBjb25zdCBUJj46OnZhbHVlKQotI2Vsc2UK
LSMgICBkZWZpbmUgQk9PU1RfSEFTX1RSSVZJQUxfQVNTSUdOKFQpICgoX19oYXNfdHJpdmlhbF9h
c3NpZ24oVCkgQk9PU1RfSU5URUxfVFRfT1BUUykgJiYgISA6OmJvb3N0Ojppc192b2xhdGlsZTxU
Pjo6dmFsdWUgJiYgISA6OmJvb3N0Ojppc19jb25zdDxUPjo6dmFsdWUpCi0jICAgZGVmaW5lIEJP
T1NUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoVCkgKF9faGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcihU
KSBCT09TVF9JTlRFTF9UVF9PUFRTKQotIyAgIGRlZmluZSBCT09TVF9IQVNfTk9USFJPV19DT05T
VFJVQ1RPUihUKSAoX19oYXNfbm90aHJvd19jb25zdHJ1Y3RvcihUKSBCT09TVF9JTlRFTF9UVF9P
UFRTKQotIyAgIGRlZmluZSBCT09TVF9IQVNfTk9USFJPV19DT1BZKFQpICgoX19oYXNfbm90aHJv
d19jb3B5KFQpIEJPT1NUX0lOVEVMX1RUX09QVFMpICYmICFpc192b2xhdGlsZTxUPjo6dmFsdWUg
JiYgIWlzX3JlZmVyZW5jZTxUPjo6dmFsdWUgJiYgIWlzX2FycmF5PFQ+Ojp2YWx1ZSkKLSMgICBk
ZWZpbmUgQk9PU1RfSEFTX05PVEhST1dfQVNTSUdOKFQpICgoX19oYXNfbm90aHJvd19hc3NpZ24o
VCkgQk9PU1RfSU5URUxfVFRfT1BUUykgJiYgIWlzX3ZvbGF0aWxlPFQ+Ojp2YWx1ZSAmJiAhaXNf
Y29uc3Q8VD46OnZhbHVlICYmICFpc19hcnJheTxUPjo6dmFsdWUpCi0jZW5kaWYKLSMgICBkZWZp
bmUgQk9PU1RfSEFTX1ZJUlRVQUxfREVTVFJVQ1RPUihUKSBfX2hhc192aXJ0dWFsX2Rlc3RydWN0
b3IoVCkKLQotIyAgIGRlZmluZSBCT09TVF9JU19BQlNUUkFDVChUKSBfX2lzX2Fic3RyYWN0KFQp
Ci0jICAgZGVmaW5lIEJPT1NUX0lTX0JBU0VfT0YoVCxVKSAoX19pc19iYXNlX29mKFQsVSkgJiYg
IWlzX3NhbWU8VCxVPjo6dmFsdWUpCi0jICAgZGVmaW5lIEJPT1NUX0lTX0NMQVNTKFQpIF9faXNf
Y2xhc3MoVCkKLSMgICBkZWZpbmUgQk9PU1RfSVNfRU5VTShUKSBfX2lzX2VudW0oVCkKLSMgICBk
ZWZpbmUgQk9PU1RfSVNfUE9MWU1PUlBISUMoVCkgX19pc19wb2x5bW9ycGhpYyhUKQotIyAgIGlm
ICghZGVmaW5lZCh1bml4KSAmJiAhZGVmaW5lZChfX3VuaXhfXykpIHx8IGRlZmluZWQoX19MUDY0
X18pCi0gICAgICAvLyBHQ0Mgc29tZXRpbWVzIGxpZXMgYWJvdXQgYWxpZ25tZW50IHJlcXVpcmVt
ZW50cwotICAgICAgLy8gb2YgdHlwZSBkb3VibGUgb24gMzItYml0IHVuaXggcGxhdGZvcm1zLCB1
c2UgdGhlCi0gICAgICAvLyBvbGQgaW1wbGVtZW50YXRpb24gaW5zdGVhZCBpbiB0aGF0IGNhc2U6
Ci0jICAgICBkZWZpbmUgQk9PU1RfQUxJR05NRU5UX09GKFQpIF9fYWxpZ25vZl9fKFQpCi0jICAg
ZW5kaWYKLSMgICBpZiAoX19HTlVDX18gPiA0KSB8fCAoKF9fR05VQ19fID09IDQpICYmIChfX0dO
VUNfTUlOT1JfXyA+PSA3KSkKLSMgICAgIGRlZmluZSBCT09TVF9JU19GSU5BTChUKSBfX2lzX2Zp
bmFsKFQpCi0jICAgZW5kaWYKLQotIyAgIGlmIChfX0dOVUNfXyA+PSA1KSAmJiAoX19jcGx1c3Bs
dXMgPj0gMjAxMTAzKQotIyAgICAgZGVmaW5lIEJPT1NUX0hBU19UUklWSUFMX01PVkVfQVNTSUdO
KFQpIChfX2lzX3RyaXZpYWxseV9hc3NpZ25hYmxlKFQmLCBUJiYpICYmIGlzX2Fzc2lnbmFibGU8
VCYsIFQmJj46OnZhbHVlICYmICE6OmJvb3N0Ojppc192b2xhdGlsZTxUPjo6dmFsdWUpCi0jICAg
ICBkZWZpbmUgQk9PU1RfSEFTX1RSSVZJQUxfTU9WRV9DT05TVFJVQ1RPUihUKSAoX19pc190cml2
aWFsbHlfY29uc3RydWN0aWJsZShULCBUJiYpICYmIGlzX2NvbnN0cnVjdGlibGU8VCwgVCYmPjo6
dmFsdWUgJiYgITo6Ym9vc3Q6OmlzX3ZvbGF0aWxlPFQ+Ojp2YWx1ZSkKLSMgICBlbmRpZgotCi0j
ICAgZGVmaW5lIEJPT1NUX0hBU19UWVBFX1RSQUlUU19JTlRSSU5TSUNTCi0jZW5kaWYKLQotI2lm
IGRlZmluZWQoX19TVU5QUk9fQ0MpICYmIChfX1NVTlBST19DQyA+PSAweDUxMzApCi0jICAgZGVm
aW5lIEJPT1NUX0lTX1VOSU9OKFQpIF9fb3JhY2xlX2lzX3VuaW9uKFQpCi0jICAgZGVmaW5lIEJP
T1NUX0lTX1BPRChUKSAoX19vcmFjbGVfaXNfcG9kKFQpICYmICFpc19mdW5jdGlvbjxUPjo6dmFs
dWUpCi0jICAgZGVmaW5lIEJPT1NUX0lTX0VNUFRZKFQpIF9fb3JhY2xlX2lzX2VtcHR5KFQpCi0j
ICAgZGVmaW5lIEJPT1NUX0hBU19UUklWSUFMX0NPTlNUUlVDVE9SKFQpIChfX29yYWNsZV9oYXNf
dHJpdmlhbF9jb25zdHJ1Y3RvcihUKSAmJiAhIDo6Ym9vc3Q6OmlzX3ZvbGF0aWxlPFQ+Ojp2YWx1
ZSkKLSMgICBkZWZpbmUgQk9PU1RfSEFTX1RSSVZJQUxfQ09QWShUKSAoX19vcmFjbGVfaGFzX3Ry
aXZpYWxfY29weShUKSAmJiAhaXNfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSkKLSMgICBkZWZpbmUgQk9P
U1RfSEFTX1RSSVZJQUxfQVNTSUdOKFQpICgoX19vcmFjbGVfaGFzX3RyaXZpYWxfYXNzaWduKFQp
IHx8IF9fb3JhY2xlX2lzX3RyaXZpYWwoVCkpICYmICEgOjpib29zdDo6aXNfdm9sYXRpbGU8VD46
OnZhbHVlICYmICEgOjpib29zdDo6aXNfY29uc3Q8VD46OnZhbHVlICYmIGlzX2Fzc2lnbmFibGU8
VCYsIGNvbnN0IFQmPjo6dmFsdWUpCi0jICAgZGVmaW5lIEJPT1NUX0hBU19UUklWSUFMX0RFU1RS
VUNUT1IoVCkgKF9fb3JhY2xlX2hhc190cml2aWFsX2Rlc3RydWN0b3IoVCkgJiYgaXNfZGVzdHJ1
Y3RpYmxlPFQ+Ojp2YWx1ZSkKLSMgICBkZWZpbmUgQk9PU1RfSEFTX05PVEhST1dfQ09OU1RSVUNU
T1IoVCkgKChfX29yYWNsZV9oYXNfbm90aHJvd19jb25zdHJ1Y3RvcihUKSB8fCBfX29yYWNsZV9o
YXNfdHJpdmlhbF9jb25zdHJ1Y3RvcihUKSB8fCBfX29yYWNsZV9pc190cml2aWFsKFQpKSAmJiBp
c19kZWZhdWx0X2NvbnN0cnVjdGlibGU8VD46OnZhbHVlKQotLy8gIF9fb3JhY2xlX2hhc19ub3Ro
cm93X2NvcHkgYXBwZWFycyB0byBiZWhhdmUgdGhlIHNhbWUgYXMgX19vcmFjbGVfaGFzX25vdGhy
b3dfYXNzaWduLCBkaXNhYmxlZCBmb3Igbm93OgotLy8jICAgZGVmaW5lIEJPT1NUX0hBU19OT1RI
Uk9XX0NPUFkoVCkgKChfX29yYWNsZV9oYXNfbm90aHJvd19jb3B5KFQpIHx8IF9fb3JhY2xlX2hh
c190cml2aWFsX2NvcHkoVCkgfHwgX19vcmFjbGVfaXNfdHJpdmlhbChUKSkgJiYgIWlzX3ZvbGF0
aWxlPFQ+Ojp2YWx1ZSAmJiAhaXNfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSAmJiBpc19jb3B5X2NvbnN0
cnVjdGlibGU8VD46OnZhbHVlKQotIyAgIGRlZmluZSBCT09TVF9IQVNfTk9USFJPV19BU1NJR04o
VCkgKChfX29yYWNsZV9oYXNfbm90aHJvd19hc3NpZ24oVCkgfHwgX19vcmFjbGVfaGFzX3RyaXZp
YWxfYXNzaWduKFQpIHx8IF9fb3JhY2xlX2lzX3RyaXZpYWwoVCkpICYmICFpc192b2xhdGlsZTxU
Pjo6dmFsdWUgJiYgIWlzX2NvbnN0PFQ+Ojp2YWx1ZSAmJiBpc19hc3NpZ25hYmxlPFQmLCBjb25z
dCBUJj46OnZhbHVlKQotIyAgIGRlZmluZSBCT09TVF9IQVNfVklSVFVBTF9ERVNUUlVDVE9SKFQp
IF9fb3JhY2xlX2hhc192aXJ0dWFsX2Rlc3RydWN0b3IoVCkKLQotIyAgIGRlZmluZSBCT09TVF9J
U19BQlNUUkFDVChUKSBfX29yYWNsZV9pc19hYnN0cmFjdChUKQotLy8jICAgZGVmaW5lIEJPT1NU
X0lTX0JBU0VfT0YoVCxVKSAoX19pc19iYXNlX29mKFQsVSkgJiYgIWlzX3NhbWU8VCxVPjo6dmFs
dWUpCi0jICAgZGVmaW5lIEJPT1NUX0lTX0NMQVNTKFQpIF9fb3JhY2xlX2lzX2NsYXNzKFQpCi0j
ICAgZGVmaW5lIEJPT1NUX0lTX0VOVU0oVCkgX19vcmFjbGVfaXNfZW51bShUKQotIyAgIGRlZmlu
ZSBCT09TVF9JU19QT0xZTU9SUEhJQyhUKSBfX29yYWNsZV9pc19wb2x5bW9ycGhpYyhUKQotIyAg
IGRlZmluZSBCT09TVF9BTElHTk1FTlRfT0YoVCkgX19hbGlnbm9mX18oVCkKLSMgICBkZWZpbmUg
Qk9PU1RfSVNfRklOQUwoVCkgX19vcmFjbGVfaXNfZmluYWwoVCkKLQotIyAgIGRlZmluZSBCT09T
VF9IQVNfVFlQRV9UUkFJVFNfSU5UUklOU0lDUwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fZ2hz
X18pICYmIChfX0dIU19WRVJTSU9OX05VTUJFUiA+PSA2MDApCi0jICAgaW5jbHVkZSA8Ym9vc3Qv
dHlwZV90cmFpdHMvaXNfc2FtZS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
aXNfcmVmZXJlbmNlLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc192b2xh
dGlsZS5ocHA+Ci0KLSMgICBkZWZpbmUgQk9PU1RfSVNfVU5JT04oVCkgX19pc191bmlvbihUKQot
IyAgIGRlZmluZSBCT09TVF9JU19QT0QoVCkgX19pc19wb2QoVCkKLSMgICBkZWZpbmUgQk9PU1Rf
SVNfRU1QVFkoVCkgX19pc19lbXB0eShUKQotIyAgIGRlZmluZSBCT09TVF9IQVNfVFJJVklBTF9D
T05TVFJVQ1RPUihUKSBfX2hhc190cml2aWFsX2NvbnN0cnVjdG9yKFQpCi0jICAgZGVmaW5lIEJP
T1NUX0hBU19UUklWSUFMX0NPUFkoVCkgKF9faGFzX3RyaXZpYWxfY29weShUKSAmJiAhaXNfcmVm
ZXJlbmNlPFQ+Ojp2YWx1ZSkKLSMgICBkZWZpbmUgQk9PU1RfSEFTX1RSSVZJQUxfQVNTSUdOKFQp
IChfX2hhc190cml2aWFsX2Fzc2lnbihUKSAmJiAhaXNfdm9sYXRpbGU8VD46OnZhbHVlKQotIyAg
IGRlZmluZSBCT09TVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKFQpIF9faGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcihUKQotIyAgIGRlZmluZSBCT09TVF9IQVNfTk9USFJPV19DT05TVFJVQ1RPUihUKSBf
X2hhc19ub3Rocm93X2NvbnN0cnVjdG9yKFQpCi0jICAgZGVmaW5lIEJPT1NUX0hBU19OT1RIUk9X
X0NPUFkoVCkgKF9faGFzX25vdGhyb3dfY29weShUKSAmJiAhaXNfdm9sYXRpbGU8VD46OnZhbHVl
ICYmICFpc19yZWZlcmVuY2U8VD46OnZhbHVlKQotIyAgIGRlZmluZSBCT09TVF9IQVNfTk9USFJP
V19BU1NJR04oVCkgKF9faGFzX25vdGhyb3dfYXNzaWduKFQpICYmICFpc192b2xhdGlsZTxUPjo6
dmFsdWUpCi0jICAgZGVmaW5lIEJPT1NUX0hBU19WSVJUVUFMX0RFU1RSVUNUT1IoVCkgX19oYXNf
dmlydHVhbF9kZXN0cnVjdG9yKFQpCi0KLSMgICBkZWZpbmUgQk9PU1RfSVNfQUJTVFJBQ1QoVCkg
X19pc19hYnN0cmFjdChUKQotIyAgIGRlZmluZSBCT09TVF9JU19CQVNFX09GKFQsVSkgKF9faXNf
YmFzZV9vZihULFUpICYmICFpc19zYW1lPFQsVT46OnZhbHVlKQotIyAgIGRlZmluZSBCT09TVF9J
U19DTEFTUyhUKSBfX2lzX2NsYXNzKFQpCi0jICAgZGVmaW5lIEJPT1NUX0lTX0VOVU0oVCkgX19p
c19lbnVtKFQpCi0jICAgZGVmaW5lIEJPT1NUX0lTX1BPTFlNT1JQSElDKFQpIF9faXNfcG9seW1v
cnBoaWMoVCkKLSMgICBkZWZpbmUgQk9PU1RfQUxJR05NRU5UX09GKFQpIF9fYWxpZ25vZl9fKFQp
Ci0jICAgZGVmaW5lIEJPT1NUX0hBU19UWVBFX1RSQUlUU19JTlRSSU5TSUNTCi0jZW5kaWYKLQot
IyBpZiBkZWZpbmVkKF9fQ09ERUdFQVJDX18pCi0jICAgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaXNfc2FtZS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfcmVmZXJl
bmNlLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc192b2xhdGlsZS5ocHA+
Ci0jICAgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfdm9pZC5ocHA+Ci0KLSMgICBkZWZp
bmUgQk9PU1RfSVNfVU5JT04oVCkgX19pc191bmlvbihUKQotIyAgIGRlZmluZSBCT09TVF9JU19Q
T0QoVCkgX19pc19wb2QoVCkKLSMgICBkZWZpbmUgQk9PU1RfSVNfRU1QVFkoVCkgX19pc19lbXB0
eShUKQotIyAgIGRlZmluZSBCT09TVF9IQVNfVFJJVklBTF9DT05TVFJVQ1RPUihUKSAoX19oYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yKFQpKQotIyAgIGRlZmluZSBCT09TVF9IQVNfVFJJ
VklBTF9DT1BZKFQpIChfX2hhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3IoVCkgJiYgIWlzX3Jl
ZmVyZW5jZTxUPjo6dmFsdWUpCi0jICAgZGVmaW5lIEJPT1NUX0hBU19UUklWSUFMX0FTU0lHTihU
KSAoX19oYXNfdHJpdmlhbF9hc3NpZ24oVCkgJiYgIWlzX3ZvbGF0aWxlPFQ+Ojp2YWx1ZSkKLSMg
ICBkZWZpbmUgQk9PU1RfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihUKSAoX19oYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yKFQpKQotIyAgIGRlZmluZSBCT09TVF9IQVNfTk9USFJPV19DT05TVFJVQ1RPUihU
KSAoX19oYXNfbm90aHJvd19kZWZhdWx0X2NvbnN0cnVjdG9yKFQpKQotIyAgIGRlZmluZSBCT09T
VF9IQVNfTk9USFJPV19DT1BZKFQpIChfX2hhc19ub3Rocm93X2NvcHlfY29uc3RydWN0b3IoVCkg
JiYgIWlzX3ZvbGF0aWxlPFQ+Ojp2YWx1ZSAmJiAhaXNfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSkKLSMg
ICBkZWZpbmUgQk9PU1RfSEFTX05PVEhST1dfQVNTSUdOKFQpIChfX2hhc19ub3Rocm93X2Fzc2ln
bihUKSAmJiAhaXNfdm9sYXRpbGU8VD46OnZhbHVlKQotIyAgIGRlZmluZSBCT09TVF9IQVNfVklS
VFVBTF9ERVNUUlVDVE9SKFQpIF9faGFzX3ZpcnR1YWxfZGVzdHJ1Y3RvcihUKQotCi0jICAgZGVm
aW5lIEJPT1NUX0lTX0FCU1RSQUNUKFQpIF9faXNfYWJzdHJhY3QoVCkKLSMgICBkZWZpbmUgQk9P
U1RfSVNfQkFTRV9PRihULFUpIChfX2lzX2Jhc2Vfb2YoVCxVKSAmJiAhaXNfdm9pZDxUPjo6dmFs
dWUgJiYgIWlzX3ZvaWQ8VT46OnZhbHVlKQotIyAgIGRlZmluZSBCT09TVF9JU19DTEFTUyhUKSBf
X2lzX2NsYXNzKFQpCi0jICAgZGVmaW5lIEJPT1NUX0lTX0NPTlZFUlRJQkxFKFQsVSkgKF9faXNf
Y29udmVydGlibGUoVCxVKSB8fCBpc192b2lkPFU+Ojp2YWx1ZSkKLSMgICBkZWZpbmUgQk9PU1Rf
SVNfRU5VTShUKSBfX2lzX2VudW0oVCkKLSMgICBkZWZpbmUgQk9PU1RfSVNfUE9MWU1PUlBISUMo
VCkgX19pc19wb2x5bW9ycGhpYyhUKQotIyAgIGRlZmluZSBCT09TVF9BTElHTk1FTlRfT0YoVCkg
YWxpZ25vZihUKQotCi0jICAgZGVmaW5lIEJPT1NUX0hBU19UWVBFX1RSQUlUU19JTlRSSU5TSUNT
Ci0jZW5kaWYKLQotI2VuZGlmIC8vIEJPT1NUX1RUX0RJU0FCTEVfSU5UUklOU0lDUwotCi0jZW5k
aWYgLy8gQk9PU1RfVFRfSU5UUklOU0lDU19IUFBfSU5DTFVERUQKLQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfYWJz
dHJhY3QuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlw
ZV90cmFpdHMvaXNfYWJzdHJhY3QuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
ODFkOTRhNDc5NTNjZWVkZjM3NGQyOGRhNzQyMzViNjQxNWJiNGZkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Fic3RyYWN0LmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDE1MCArMCwwIEBACi0jaWZuZGVmIEJPT1NUX1RUX0lTX0FCU1RSQUNUX0NMQVNTX0hQ
UAotI2RlZmluZSBCT09TVF9UVF9JU19BQlNUUkFDVF9DTEFTU19IUFAKLQotI2lmIGRlZmluZWQo
X01TQ19WRVIpCi0jIHByYWdtYSBvbmNlCi0jZW5kaWYKLQotLy8vLy8vLy8vMS8vLy8vLy8vLzIv
Ly8vLy8vLy8zLy8vLy8vLy8vNC8vLy8vLy8vLzUvLy8vLy8vLy82Ly8vLy8vLy8vNy8vLy8vLy8v
LzgKLS8vIGlzX2Fic3RyYWN0X2NsYXNzLmhwcDoKLS8vCi0vLyAgKEMpIENvcHlyaWdodCAyMDAy
IFJhbmkgU2hhcm9uaSAocmFuaV9zaGFyb25pQGhvdG1haWwuY29tKSBhbmQgUm9iZXJ0IFJhbWV5
Ci0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBpcyBzdWJqZWN0IHRvIHRo
ZSBCb29zdCBTb2Z0d2FyZQotLy8gIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFu
eWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29z
dC5vcmcvTElDRU5TRV8xXzAudHh0KQotLy8gIAotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9y
ZyBmb3IgdXBkYXRlcywgZG9jdW1lbnRhdGlvbiwgYW5kIHJldmlzaW9uIGhpc3RvcnkuCi0vLwot
Ci0vLyBDb21waWxlIHR5cGUgZGlzY292ZXJ5IHdoZXRoZXIgZ2l2ZW4gdHlwZSBpcyBhYnN0cmFj
dCBjbGFzcyBvciBub3QuCi0vLwotLy8gICBSZXF1aXJlcyBEUiAzMzcgdG8gYmUgc3VwcG9ydGVk
IGJ5IGNvbXBpbGVyCi0vLyAgIChodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cy
MS9kb2NzL2N3Z19hY3RpdmUuaHRtbCMzMzcpLgotLy8KLS8vCi0vLyBCZWxpZXZlZCAoSmFuIDIw
MDQpIHRvIHdvcmsgb246Ci0vLyAgLSBHQ0MgMy40Ci0vLyAgLSBWQysrIDcuMQotLy8gIC0gY29t
cGlsZXJzIHdpdGggbmV3IEVERyBmcm9udGVuZCAoSW50ZWwgQysrIDcsIENvbWVhdSA0LjMuMikK
LS8vCi0vLyBEb2Vzbid0IHdvcmsgb246Ci0vLyAgLSBWQysrNiwgVkMrKzcuMCBhbmQgbGVzcwot
Ly8gIC0gR0NDIDMuMy5YIGFuZCBsZXNzCi0vLyAgLSBCb3JsYW5kIEMrKyA2IGFuZCBsZXNzCi0v
LyAgICAgIAotLy8KLS8vIEhpc3Rvcnk6Ci0vLyAgLSBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUmFu
aSBTaGFyb25pLCBzZWUKLS8vICAgIGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cHM/c2Vs
bT1kZjg5M2RhNi4wMjA3MTEwNjEzLjc1YjJmZTkwJTQwcG9zdGluZy5nb29nbGUuY29tCi0vLyAg
ICBBdCB0aGlzIHRpbWUgc3VwcG9ydGVkIGJ5IEVERyAoSW50ZWwgQysrIDcsIENvbWVhdSA0LjMu
MikgYW5kIFZDNy4xLgotLy8gIC0gQWRhcHRlZCBhbmQgYWRkZWQgaW50byBCb29zdC5TZXJpYWxp
emF0aW9uIGxpYnJhcnkgYnkgUm9iZXJ0IFJhbWV5IAotLy8gICAgKHN0YXJ0aW5nIHdpdGggc3Vi
bWlzc2lvbiAjMTApLgotLy8gIC0gSmFuIDIwMDQ6IEdDQyAzLjQgZml4ZWQgdG8gc3VwcG9ydCBE
UjMzNyAoR2lvdmFubmkgQmFqbykuCi0vLyAgLSBKYW4gMjAwNDogbW9kaWZpZWQgdG8gYmUgcGFy
dCBvZiBCb29zdC5UeXBlVHJhaXRzIChQYXZlbCBWb3plbmlsZWspLgotLy8gIC0gTm92IDIwMDQ6
IENocmlzdG9waCBMdWR3aWcgZm91bmQgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gZGlkIG5vdCB3
b3JrIHdpdGgKLS8vICAgICAgICAgICAgICB0ZW1wbGF0ZSB0eXBlcyBhbmQgZ2NjLTMuNCBvciBW
QzcuMSwgZml4IGR1ZSB0byBDaHJpc3RvcGggTHVkd2lnCi0vLyAgICAgICAgICAgICAgYW5kIEpv
aG4gTWFkZG9jay4KLS8vICAtIERlYyAyMDA0OiBBZGRlZCBuZXcgY29uZmlnIG1hY3JvIEJPT1NU
X05PX0lTX0FCU1RSQUNUIHdoaWNoIGNhdXNlcyB0aGUgdGVtcGxhdGUKLS8vICAgICAgICAgICAg
ICB0byBkZWdyYWRlIGdyYWNlZnVsbHksIHJhdGhlciB0aGFuIHRyYXNoIHRoZSBjb21waWxlciAo
Sm9obiBNYWRkb2NrKS4KLS8vCi0KLSNpbmNsdWRlIDxjc3RkZGVmPiAvLyBzaXplX3QKLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9pbnRyaW5zaWNzLmhwcD4KLSNpbmNsdWRlIDxib29zdC90
eXBlX3RyYWl0cy9pbnRlZ3JhbF9jb25zdGFudC5ocHA+Ci0jaWZuZGVmIEJPT1NUX0lTX0FCU1RS
QUNUCi0jaW5jbHVkZSA8Ym9vc3Qvc3RhdGljX2Fzc2VydC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
dHlwZV90cmFpdHMvZGV0YWlsL3llc19ub190eXBlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBl
X3RyYWl0cy9pc19jbGFzcy5ocHA+Ci0jaWZkZWYgQk9PU1RfTk9fSVNfQUJTVFJBQ1QKLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19wb2x5bW9ycGhpYy5ocHA+Ci0jZW5kaWYKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgYm9vc3QgewotCi1uYW1lc3BhY2UgZGV0YWlsewotCi0jaWZkZWYgQk9P
U1RfSVNfQUJTVFJBQ1QKLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX2Fic3RyYWN0X2lt
cAotewotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gQk9PU1RfSVNfQUJT
VFJBQ1QoVCkpOwotfTsKLSNlbGlmICFkZWZpbmVkKEJPT1NUX05PX0lTX0FCU1RSQUNUKQotdGVt
cGxhdGU8Y2xhc3MgVD4KLXN0cnVjdCBpc19hYnN0cmFjdF9pbXAyCi17Ci0gICAvLyBEZWR1Y3Rp
b24gZmFpbHMgaWYgVCBpcyB2b2lkLCBmdW5jdGlvbiB0eXBlLCAKLSAgIC8vIHJlZmVyZW5jZSB0
eXBlICgxNC44LjIvMilvciBhbiBhYnN0cmFjdCBjbGFzcyB0eXBlIAotICAgLy8gYWNjb3JkaW5n
IHRvIHJldmlldyBzdGF0dXMgaXNzdWUgIzMzNwotICAgLy8KLSAgIHRlbXBsYXRlPGNsYXNzIFU+
Ci0gICBzdGF0aWMgdHlwZV90cmFpdHM6Om5vX3R5cGUgY2hlY2tfc2lnKFUgKCopWzFdKTsKLSAg
IHRlbXBsYXRlPGNsYXNzIFU+Ci0gICBzdGF0aWMgdHlwZV90cmFpdHM6Onllc190eXBlIGNoZWNr
X3NpZyguLi4pOwotICAgLy8KLSAgIC8vIFQgbXVzdCBiZSBhIGNvbXBsZXRlIHR5cGUsIGZ1cnRo
ZXIgaWYgVCBpcyBhIHRlbXBsYXRlIHRoZW4KLSAgIC8vIGl0IG11c3QgYmUgaW5zdGFudGlhdGVk
IGluIG9yZGVyIGZvciB1cyB0byBnZXQgdGhlIHJpZ2h0IGFuc3dlcjoKLSAgIC8vCi0gICBCT09T
VF9TVEFUSUNfQVNTRVJUKHNpemVvZihUKSAhPSAwKTsKLQotICAgLy8gR0NDMiB3b24ndCBldmVu
IHBhcnNlIHRoaXMgdGVtcGxhdGUgaWYgd2UgZW1iZWQgdGhlIGNvbXB1dGF0aW9uCi0gICAvLyBv
ZiBzMSBpbiB0aGUgY29tcHV0YXRpb24gb2YgdmFsdWUuCi0jaWZkZWYgX19HTlVDX18KLSAgIEJP
T1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgczEgPSBzaXplb2YoaXNfYWJzdHJhY3Rf
aW1wMjxUPjo6dGVtcGxhdGUgY2hlY2tfc2lnPFQ+KDApKSk7Ci0jZWxzZQotI2lmIEJPT1NUX1dP
UktBUk9VTkQoQk9PU1RfTVNWQ19GVUxMX1ZFUiwgPj0gMTQwMDUwMDAwKQotI3ByYWdtYSB3YXJu
aW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo2MzM0KQotI2VuZGlmCi0gICBCT09T
VF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHMxID0gc2l6ZW9mKGNoZWNrX3NpZzxUPigw
KSkpOwotI2lmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQ19GVUxMX1ZFUiwgPj0gMTQwMDUw
MDAwKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZgotI2VuZGlmCi0gICAgCi0gICBCT09T
VF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSAKLSAgICAgIChzMSA9PSBzaXplb2YodHlw
ZV90cmFpdHM6Onllc190eXBlKSkpOwotfTsKLQotdGVtcGxhdGUgPGJvb2wgdj4KLXN0cnVjdCBp
c19hYnN0cmFjdF9zZWxlY3QKLXsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgc3RydWN0IHJl
YmluZAotICAgewotICAgICAgdHlwZWRlZiBpc19hYnN0cmFjdF9pbXAyPFQ+IHR5cGU7Ci0gICB9
OwotfTsKLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaXNfYWJzdHJhY3Rfc2VsZWN0PGZhbHNlPgotewot
ICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICBzdHJ1Y3QgcmViaW5kCi0gICB7Ci0gICAgICB0eXBl
ZGVmIGZhbHNlX3R5cGUgdHlwZTsKLSAgIH07Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0
cnVjdCBpc19hYnN0cmFjdF9pbXAKLXsKLSAgIHR5cGVkZWYgaXNfYWJzdHJhY3Rfc2VsZWN0PCA6
OmJvb3N0Ojppc19jbGFzczxUPjo6dmFsdWU+IHNlbGVjdG9yOwotICAgdHlwZWRlZiB0eXBlbmFt
ZSBzZWxlY3Rvcjo6dGVtcGxhdGUgcmViaW5kPFQ+IGJpbmRlcjsKLSAgIHR5cGVkZWYgdHlwZW5h
bWUgYmluZGVyOjp0eXBlIHR5cGU7Ci0KLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2
YWx1ZSA9IHR5cGU6OnZhbHVlKTsKLX07Ci0KLSNlbmRpZgotfQotCi0jaWZuZGVmIEJPT1NUX05P
X0lTX0FCU1RSQUNUCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2Fic3RyYWN0IDogcHVi
bGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIDo6Ym9vc3Q6OmRldGFpbDo6aXNfYWJzdHJhY3Rf
aW1wPFQ+Ojp2YWx1ZT4ge307Ci0jZWxzZQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19h
YnN0cmFjdCA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCA6OmJvb3N0OjpkZXRhaWw6
OmlzX3BvbHltb3JwaGljX2ltcDxUPjo6dmFsdWU+IHt9OwotI2VuZGlmCi0KLX0gLy8gbmFtZXNw
YWNlIGJvb3N0Ci0KLSNlbmRpZiAvL0JPT1NUX1RUX0lTX0FCU1RSQUNUX0NMQVNTX0hQUApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90
cmFpdHMvaXNfYXJpdGhtZXRpYy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19hcml0aG1ldGljLmhwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYzIzODExZWJlYTNkYTZkOTc1NTkwNDY5NmM0ODk3ZDE5N2ZiNzc4Zi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19hcml0aG1ldGlj
LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQg
U3RldmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywgSG93YXJkIEhpbm5hbnQgJiBKb2huIE1hZGRvY2sg
MjAwMC4KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0
IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3
dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5n
IGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfQVJJVEhNRVRJQ19IUFBfSU5D
TFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSVNfQVJJVEhNRVRJQ19IUFBfSU5DTFVERUQKLQotI2lu
Y2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2ludGVncmFsLmhwcD4KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9pc19mbG9hdGluZ19wb2ludC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX2FyaXRobWV0aWMgOiBwdWJsaWMgaW50
ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgaXNfaW50ZWdyYWw8VD46OnZhbHVlIHx8IGlzX2Zsb2F0aW5n
X3BvaW50PFQ+Ojp2YWx1ZT4ge307Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAv
LyBCT09TVF9UVF9JU19BUklUSE1FVElDX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfYXJyYXku
aHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFp
dHMvaXNfYXJyYXkuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2UxNjEzYWI2
ZTNiOTA3MWU0NzBiZTVkMTc0ZmMxMjUwNjRmMDY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzICsw
LDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgRGF2ZSBBYnJhaGFtcywgU3RldmUgQ2xlYXJ5LCBC
ZW1hbiBEYXdlcywgSG93YXJkCi0vLyAgSGlubmFudCAmIEpvaG4gTWFkZG9jayAyMDAwLiAgCi0v
LyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVu
dGF0aW9uLgotCi0KLS8vIFNvbWUgZml4ZXMgZm9yIGlzX2FycmF5IGFyZSBiYXNlZCBvbiBhIG5l
d3Nncm91cCBwb3N0aW5nIGJ5IEpvbmF0aGFuIEx1bmRxdWlzdC4KLQotCi0jaWZuZGVmIEJPT1NU
X1RUX0lTX0FSUkFZX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9JU19BUlJBWV9IUFBf
SU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludGVncmFsX2NvbnN0YW50
LmhwcD4KLSNpbmNsdWRlIDxjc3RkZGVmPiAvLyBzaXplX3QKLQotbmFtZXNwYWNlIGJvb3N0IHsK
LQotI2lmIGRlZmluZWQoIF9fQ09ERUdFQVJDX18gKQotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0
cnVjdCBpc19hcnJheSA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2lzX2FycmF5
KFQpPiB7fTsKLSNlbHNlCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2FycmF5IDog
cHVibGljIGZhbHNlX3R5cGUge307Ci0jaWYgIWRlZmluZWQoQk9PU1RfTk9fQVJSQVlfVFlQRV9T
UEVDSUFMSVpBVElPTlMpCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4gc3Ry
dWN0IGlzX2FycmF5PFRbTl0+IDogcHVibGljIHRydWVfdHlwZSB7fTsKLSAgIHRlbXBsYXRlIDxj
bGFzcyBULCBzdGQ6OnNpemVfdCBOPiBzdHJ1Y3QgaXNfYXJyYXk8VCBjb25zdFtOXT4gOiBwdWJs
aWMgdHJ1ZV90eXBle307Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4gc3Ry
dWN0IGlzX2FycmF5PFQgdm9sYXRpbGVbTl0+IDogcHVibGljIHRydWVfdHlwZXt9OwotICAgdGVt
cGxhdGUgPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IE4+IHN0cnVjdCBpc19hcnJheTxUIGNvbnN0IHZv
bGF0aWxlW05dPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLSNpZiAhQk9PU1RfV09SS0FST1VORChf
X0JPUkxBTkRDX18sIDwgMHg2MDApICYmICFkZWZpbmVkKF9fSUJNQ1BQX18pICYmICAhQk9PU1Rf
V09SS0FST1VORChfX0RNQ19fLCBCT09TVF9URVNURURfQVQoMHg4NDApKQotICAgdGVtcGxhdGUg
PGNsYXNzIFQ+IHN0cnVjdCBpc19hcnJheTxUW10+IDogcHVibGljIHRydWVfdHlwZXt9OwotICAg
dGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19hcnJheTxUIGNvbnN0W10+IDogcHVibGljIHRy
dWVfdHlwZXt9OwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19hcnJheTxUIGNvbnN0
IHZvbGF0aWxlW10+IDogcHVibGljIHRydWVfdHlwZXt9OwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+
IHN0cnVjdCBpc19hcnJheTxUIHZvbGF0aWxlW10+IDogcHVibGljIHRydWVfdHlwZXt9OwotI2Vu
ZGlmCi0jZW5kaWYKLQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAv
LyBCT09TVF9UVF9JU19BUlJBWV9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Fzc2lnbmFibGUu
aHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFp
dHMvaXNfYXNzaWduYWJsZS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZDE3
MTYxNmExNGRjZTE1YTlkOTBmNjYwOGFlMTI5YzdjNjUyYTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfYXNzaWduYWJsZS5ocHAKKysrIC9kZXYvbnVsbApA
QCAtMSw3NyArMCwwIEBACi0KLS8vICAoQykgQ29weXJpZ2h0IEpvaG4gTWFkZG9jayAyMDE1Lgot
Ly8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55
aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1l
bnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9JU19BU1NJR05BQkxFX0hQUF9JTkNMVURFRAot
I2RlZmluZSBCT09TVF9UVF9JU19BU1NJR05BQkxFX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8
Y3N0ZGRlZj4gLy8gc2l6ZV90Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50ZWdyYWxf
Y29uc3RhbnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQot
bmFtZXNwYWNlIGJvb3N0ewotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSA9IFQ+IHN0
cnVjdCBpc19hc3NpZ25hYmxlOwotCi19Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9E
RUNMVFlQRSkgJiYgIUJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPCAxODAwKQotCi0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3llc19ub190eXBlLmhwcD4KLSNpbmNsdWRl
IDxib29zdC90eXBlX3RyYWl0cy9kZWNsdmFsLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0ewotCi0g
ICBuYW1lc3BhY2UgZGV0YWlsewotCi0gICAgICBzdHJ1Y3QgaXNfYXNzaWduYWJsZV9pbXAKLSAg
ICAgIHsKLSAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
ID0gZGVjbHR5cGUoYm9vc3Q6OmRlY2x2YWw8VD4oKSA9IGJvb3N0OjpkZWNsdmFsPFU+KCkpPgot
ICAgICAgICAgc3RhdGljIGJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUgdGVzdChpbnQpOwot
Ci0gICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+Ci0gICAgICAgICBzdGF0aWMg
Ym9vc3Q6OnR5cGVfdHJhaXRzOjpub190eXBlIHRlc3QoLi4uKTsKLSAgICAgIH07Ci0KLSAgIH0K
LQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+IHN0cnVjdCBpc19hc3NpZ25hYmxlIDog
cHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIHNpemVvZihkZXRhaWw6OmlzX2Fzc2lnbmFi
bGVfaW1wOjp0ZXN0PFQsIFU+KDApKSA9PSBzaXplb2YoYm9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNf
dHlwZSk+e307Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTiwgY2xhc3MgVT4g
c3RydWN0IGlzX2Fzc2lnbmFibGU8VFtOXSwgVT4gOiBwdWJsaWMgaXNfYXNzaWduYWJsZTxULCBV
Pnt9OwotICAgdGVtcGxhdGUgPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IE4sIGNsYXNzIFU+IHN0cnVj
dCBpc19hc3NpZ25hYmxlPFQoJilbTl0sIFU+IDogcHVibGljIGlzX2Fzc2lnbmFibGU8VCYsIFU+
e307Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4gc3RydWN0IGlzX2Fzc2lnbmFibGU8
VFtdLCBVPiA6IHB1YmxpYyBpc19hc3NpZ25hYmxlPFQsIFU+e307Ci0gICB0ZW1wbGF0ZSA8Y2xh
c3MgVCwgY2xhc3MgVT4gc3RydWN0IGlzX2Fzc2lnbmFibGU8VCgmKVtdLCBVPiA6IHB1YmxpYyBp
c19hc3NpZ25hYmxlPFQmLCBVPnt9OwotICAgdGVtcGxhdGUgPGNsYXNzIFU+IHN0cnVjdCBpc19h
c3NpZ25hYmxlPHZvaWQsIFU+IDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIGZhbHNl
Pnt9OwotICAgdGVtcGxhdGUgPGNsYXNzIFU+IHN0cnVjdCBpc19hc3NpZ25hYmxlPHZvaWQgY29u
c3QsIFU+IDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIGZhbHNlPnt9OwotICAgdGVt
cGxhdGUgPGNsYXNzIFU+IHN0cnVjdCBpc19hc3NpZ25hYmxlPHZvaWQgdm9sYXRpbGUsIFU+IDog
cHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIGZhbHNlPnt9OwotICAgdGVtcGxhdGUgPGNs
YXNzIFU+IHN0cnVjdCBpc19hc3NpZ25hYmxlPHZvaWQgY29uc3Qgdm9sYXRpbGUsIFU+IDogcHVi
bGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIGZhbHNlPnt9OwotCi0jZWxzZQotCi0jaW5jbHVk
ZSA8Ym9vc3QvdHlwZV90cmFpdHMvaGFzX3RyaXZpYWxfYXNzaWduLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJlbmNlLmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0
ewotCi0gICAvLyBXZSBkb24ndCBrbm93IGhvdyB0byBpbXBsZW1lbnQgdGhpczoKLSAgIHRlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBVPiBzdHJ1Y3QgaXNfYXNzaWduYWJsZSA6IHB1YmxpYyBpbnRl
Z3JhbF9jb25zdGFudDxib29sLCBmYWxzZT57fTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBVPiBzdHJ1Y3QgaXNfYXNzaWduYWJsZTxUJiwgVT4gOiBwdWJsaWMgaW50ZWdyYWxfY29uc3Rh
bnQ8Ym9vbCwgaXNfcG9kPFQ+Ojp2YWx1ZSAmJiBpc19wb2Q8dHlwZW5hbWUgcmVtb3ZlX3JlZmVy
ZW5jZTxVPjo6dHlwZT46OnZhbHVlPnt9OwotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+
IHN0cnVjdCBpc19hc3NpZ25hYmxlPGNvbnN0IFQmLCBVPiA6IHB1YmxpYyBpbnRlZ3JhbF9jb25z
dGFudDxib29sLCBmYWxzZT57fTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBVPiBzdHJ1Y3QgaXNfYXNz
aWduYWJsZTx2b2lkLCBVPiA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBmYWxzZT57
fTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBVPiBzdHJ1Y3QgaXNfYXNzaWduYWJsZTx2b2lkIGNvbnN0
LCBVPiA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBmYWxzZT57fTsKLSAgIHRlbXBs
YXRlIDxjbGFzcyBVPiBzdHJ1Y3QgaXNfYXNzaWduYWJsZTx2b2lkIHZvbGF0aWxlLCBVPiA6IHB1
YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBmYWxzZT57fTsKLSAgIHRlbXBsYXRlIDxjbGFz
cyBVPiBzdHJ1Y3QgaXNfYXNzaWduYWJsZTx2b2lkIGNvbnN0IHZvbGF0aWxlLCBVPiA6IHB1Ymxp
YyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBmYWxzZT57fTsKLSAgIC8qCi0gICB0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgaXNfYXNzaWduYWJsZTx2b2lkLCB2b2lkPiA6IHB1YmxpYyBpbnRlZ3JhbF9jb25z
dGFudDxib29sLCBmYWxzZT57fTsKLSAgIHRlbXBsYXRlIDw+IHN0cnVjdCBpc19hc3NpZ25hYmxl
PHZvaWQgY29uc3QsIHZvaWQgY29uc3Q+IDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2ws
IGZhbHNlPnt9OwotICAgdGVtcGxhdGUgPD4gc3RydWN0IGlzX2Fzc2lnbmFibGU8dm9pZCB2b2xh
dGlsZSwgdm9pZCB2b2xhdGlsZT4gOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgZmFs
c2U+e307Ci0gICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfYXNzaWduYWJsZTx2b2lkIGNvbnN0IHZv
bGF0aWxlLCB2b2lkIGNvbnN0IHZvbGF0aWxlPiA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxi
b29sLCBmYWxzZT57fTsKLSAgICovCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQot
I2VuZGlmIC8vIEJPT1NUX1RUX0lTX0FTU0lHTkFCTEVfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9p
c19iYXNlX2FuZF9kZXJpdmVkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Jhc2VfYW5kX2Rlcml2ZWQuaHBwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlZTNkY2U1OTdjMWE4MjE4OTA5MWVkNjIxZDczZTNkNmJjMjZm
YWQxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Jhc2Vf
YW5kX2Rlcml2ZWQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLQotLy8gIChD
KSBDb3B5cmlnaHQgUmFuaSBTaGFyb25pIDIwMDMuCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5k
IGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwK
LS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0v
LwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0
IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotIAotI2lmbmRlZiBCT09T
VF9UVF9JU19CQVNFX0FORF9ERVJJVkVEX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9J
U19CQVNFX0FORF9ERVJJVkVEX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90
cmFpdHMvaW50cmluc2ljcy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50ZWdy
YWxfY29uc3RhbnQuaHBwPgotI2lmbmRlZiBCT09TVF9JU19CQVNFX09GCi0jaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvaXNfY2xhc3MuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRz
L2lzX3NhbWUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnZlcnRpYmxl
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3N0YXRp
Y19hc3NlcnQuaHBwPgotI2VuZGlmCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvcmVtb3Zl
X2N2LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcD4KLQotbmFt
ZXNwYWNlIGJvb3N0IHsKLQotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLSNpZm5kZWYgQk9PU1RfSVNf
QkFTRV9PRgotI2lmICFCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENfXywgQk9PU1RfVEVTVEVE
X0FUKDB4NTgxKSkgXAotICYmICFCT09TVF9XT1JLQVJPVU5EKF9fU1VOUFJPX0NDICwgPD0gMHg1
NDApIFwKLSAmJiAhQk9PU1RfV09SS0FST1VORChfX0VER19WRVJTSU9OX18sIDw9IDI0MykgXAot
ICYmICFCT09TVF9XT1JLQVJPVU5EKF9fRE1DX18sIEJPT1NUX1RFU1RFRF9BVCgweDg0MCkpCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIEVERyB2ZXJzaW9uIG51bWJlciBp
cyBhIGxvd2VyIGVzdGltYXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCBp
cyBub3QgY3VycmVudGx5IGtub3duIHdoaWNoIEVERyB2ZXJzaW9uCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGV4YWN0bHkgZml4ZXMgdGhlIHByb2JsZW0uCi0KLS8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCi0KLVRoaXMgdmVyc2lvbiBkZXRlY3RzIGFtYmlndW91cyBiYXNlIGNsYXNzZXMgYW5k
IHByaXZhdGUgYmFzZSBjbGFzc2VzCi1jb3JyZWN0bHksIGFuZCB3YXMgZGV2aXNlZCBieSBSYW5p
IFNoYXJvbmkuCi0KLUV4cGxhbmF0aW9uIGJ5IFRlcmplIFNsZXR0ZWJvIGFuZCBSYW5pIFNoYXJv
bmkuCi0KLUxldCdzIHRha2UgdGhlIG11bHRpcGxlIGJhc2UgY2xhc3MgYmVsb3cgYXMgYW4gZXhh
bXBsZSwgYW5kIHRoZSBmb2xsb3dpbmcKLXdpbGwgYWxzbyBzaG93IHdoeSB0aGVyZSdzIG5vdCBh
IHByb2JsZW0gd2l0aCBwcml2YXRlIG9yIGFtYmlndW91cyBiYXNlCi1jbGFzczoKLQotc3RydWN0
IEIge307Ci1zdHJ1Y3QgQjEgOiBCIHt9Owotc3RydWN0IEIyIDogQiB7fTsKLXN0cnVjdCBEIDog
cHJpdmF0ZSBCMSwgcHJpdmF0ZSBCMiB7fTsKLQotaXNfYmFzZV9hbmRfZGVyaXZlZDxCLCBEPjo6
dmFsdWU7Ci0KLUZpcnN0LCBzb21lIHRlcm1pbm9sb2d5OgotCi1TQyAgLSBTdGFuZGFyZCBjb252
ZXJzaW9uCi1VREMgLSBVc2VyLWRlZmluZWQgY29udmVyc2lvbgotCi1BIHVzZXItZGVmaW5lZCBj
b252ZXJzaW9uIHNlcXVlbmNlIGNvbnNpc3RzIG9mIGFuIFNDLCBmb2xsb3dlZCBieSBhbiBVREMs
Ci1mb2xsb3dlZCBieSBhbm90aGVyIFNDLiBFaXRoZXIgU0MgbWF5IGJlIHRoZSBpZGVudGl0eSBj
b252ZXJzaW9uLgotCi1XaGVuIHBhc3NpbmcgdGhlIGRlZmF1bHQtY29uc3RydWN0ZWQgSG9zdCBv
YmplY3QgdG8gdGhlIG92ZXJsb2FkZWQgY2hlY2tfc2lnKCkKLWZ1bmN0aW9ucyAoaW5pdGlhbGl6
YXRpb24gOC41LzE0LzQvMyksIHdlIGhhdmUgc2V2ZXJhbCB2aWFibGUgaW1wbGljaXQKLWNvbnZl
cnNpb24gc2VxdWVuY2VzOgotCi1Gb3IgInN0YXRpYyBub190eXBlIGNoZWNrX3NpZyhCIGNvbnN0
IHZvbGF0aWxlICosIGludCkiIHdlIGhhdmUgdGhlIGNvbnZlcnNpb24KLXNlcXVlbmNlczoKLQot
QyAtPiBDIGNvbnN0IChTQyAtIFF1YWxpZmljYXRpb24gQWRqdXN0bWVudCkgLT4gQiBjb25zdCB2
b2xhdGlsZSogKFVEQykKLUMgLT4gRCBjb25zdCB2b2xhdGlsZSogKFVEQykgLT4gQjEgY29uc3Qg
dm9sYXRpbGUqIC8gQjIgY29uc3Qgdm9sYXRpbGUqIC0+Ci0gICAgIEIgY29uc3Qgdm9sYXRpbGUq
IChTQyAtIENvbnZlcnNpb24pCi0KLUZvciAic3RhdGljIHllc190eXBlIGNoZWNrX3NpZyhEIGNv
bnN0IHZvbGF0aWxlICosIFQpIiB3ZSBoYXZlIHRoZSBjb252ZXJzaW9uCi1zZXF1ZW5jZToKLQot
QyAtPiBEIGNvbnN0IHZvbGF0aWxlKiAoVURDKQotCi1BY2NvcmRpbmcgdG8gMTMuMy4zLjEvNCwg
aW4gY29udGV4dCBvZiB1c2VyLWRlZmluZWQgY29udmVyc2lvbiBvbmx5IHRoZQotc3RhbmRhcmQg
Y29udmVyc2lvbiBzZXF1ZW5jZSBpcyBjb25zaWRlcmVkIHdoZW4gc2VsZWN0aW5nIHRoZSBiZXN0
IHZpYWJsZQotZnVuY3Rpb24sIHNvIGl0IG9ubHkgY29uc2lkZXJzIHVwIHRvIHRoZSB1c2VyLWRl
ZmluZWQgY29udmVyc2lvbi4gRm9yIHRoZQotZmlyc3QgZnVuY3Rpb24gdGhpcyBtZWFucyBjaG9v
c2luZyBiZXR3ZWVuIEMgLT4gQyBjb25zdCBhbmQgQyAtPiBDLCBhbmQgaXQKLWNob29zZXMgdGhl
IGxhdHRlciwgYmVjYXVzZSBpdCdzIGEgcHJvcGVyIHN1YnNldCAoMTMuMy4zLjIvMy8yKSBvZiB0
aGUKLWZvcm1lci4gVGhlcmVmb3JlLCB3ZSBoYXZlOgotCi1DIC0+IEQgY29uc3Qgdm9sYXRpbGUq
IChVREMpIC0+IEIxIGNvbnN0IHZvbGF0aWxlKiAvIEIyIGNvbnN0IHZvbGF0aWxlKiAtPgotICAg
ICBCIGNvbnN0IHZvbGF0aWxlKiAoU0MgLSBDb252ZXJzaW9uKQotQyAtPiBEIGNvbnN0IHZvbGF0
aWxlKiAoVURDKQotCi1IZXJlLCB0aGUgcHJpbmNpcGxlIG9mIHRoZSAic2hvcnRlc3Qgc3Vic2Vx
dWVuY2UiIGFwcGxpZXMgYWdhaW4sIGFuZCBpdAotY2hvb3NlcyBDIC0+IEQgY29uc3Qgdm9sYXRp
bGUqLiBUaGlzIHNob3dzIHRoYXQgaXQgZG9lc24ndCBldmVuIG5lZWQgdG8KLWNvbnNpZGVyIHRo
ZSBtdWx0aXBsZSBwYXRocyB0byBCLCBvciBhY2Nlc3NpYmlsaXR5LCBhcyB0aGF0IHBvc3NpYmls
aXR5IGlzCi1lbGltaW5hdGVkIGJlZm9yZSBpdCBjb3VsZCBwb3NzaWJseSBjYXVzZSBhbWJpZ3Vp
dHkgb3IgYWNjZXNzIHZpb2xhdGlvbi4KLQotSWYgRCBpcyBub3QgZGVyaXZlZCBmcm9tIEIsIGl0
IGhhcyB0byBjaG9vc2UgYmV0d2VlbiBDIC0+IEMgY29uc3QgLT4gQiBjb25zdAotdm9sYXRpbGUq
IGZvciB0aGUgZmlyc3QgZnVuY3Rpb24sIGFuZCBDIC0+IEQgY29uc3Qgdm9sYXRpbGUqIGZvciB0
aGUgc2Vjb25kCi1mdW5jdGlvbiwgd2hpY2ggYXJlIGp1c3QgYXMgZ29vZCAoYm90aCByZXF1aXJl
cyBhIFVEQywgMTMuMy4zLjIpLCBoYWQgaXQgbm90Ci1iZWVuIGZvciB0aGUgZmFjdCB0aGF0ICJz
dGF0aWMgbm9fdHlwZSBjaGVja19zaWcoQiBjb25zdCB2b2xhdGlsZSAqLCBpbnQpIiBpcwotbm90
IHRlbXBsYXRlZCwgd2hpY2ggbWFrZXMgQyAtPiBDIGNvbnN0IC0+IEIgY29uc3Qgdm9sYXRpbGUq
IHRoZSBiZXN0IGNob2ljZQotKDEzLjMuMy8xLzQpLCByZXN1bHRpbmcgaW4gIm5vIi4KLQotQWxz
bywgaWYgSG9zdDo6b3BlcmF0b3IgQiBjb25zdCB2b2xhdGlsZSogaGFkbid0IGJlZW4gY29uc3Qs
IHRoZSB0d28KLWNvbnZlcnNpb24gc2VxdWVuY2VzIGZvciAic3RhdGljIG5vX3R5cGUgY2hlY2tf
c2lnKEIgY29uc3Qgdm9sYXRpbGUgKiwgaW50KSIsIGluCi10aGUgY2FzZSB3aGVyZSBEIGlzIGRl
cml2ZWQgZnJvbSBCLCB3b3VsZCBoYXZlIGJlZW4gYW1iaWd1b3VzLgotCi1TZWUgYWxzbwotaHR0
cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3Vwcz9zZWxtPWRmODkzZGE2LjAzMDEyODA4NTkuNTIy
MDgxZjclNDBwb3N0aW5nLgotZ29vZ2xlLmNvbSBhbmQgbGlua3MgdGhlcmVpbi4KLQotKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEIsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3Qg
YmRfaGVscGVyCi17Ci0gICAvLwotICAgLy8gVGhpcyBWQzcuMSBzcGVjaWZpYyB3b3JrYXJvdW5k
IHN0b3BzIHRoZSBjb21waWxlciBmcm9tIGdlbmVyYXRpbmcKLSAgIC8vIGFuIGludGVybmFsIGNv
bXBpbGVyIGVycm9yIHdoZW4gY29tcGlsaW5nIHdpdGggL3ZtZyAodGhhbmtzIHRvCi0gICAvLyBB
bGVrc2V5IEd1cnRvdm95IGZvciBmaWd1cmluZyBvdXQgdGhlIHdvcmthcm91bmQpLgotICAgLy8K
LSNpZiAhQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA9PSAxMzEwKQotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyB0eXBlX3RyYWl0czo6eWVzX3R5cGUgY2hlY2tfc2ln
KEQgY29uc3Qgdm9sYXRpbGUgKiwgVCk7Ci0gICAgc3RhdGljIHR5cGVfdHJhaXRzOjpub190eXBl
ICBjaGVja19zaWcoQiBjb25zdCB2b2xhdGlsZSAqLCBpbnQpOwotI2Vsc2UKLSAgICBzdGF0aWMg
dHlwZV90cmFpdHM6Onllc190eXBlIGNoZWNrX3NpZyhEIGNvbnN0IHZvbGF0aWxlICosIGxvbmcp
OwotICAgIHN0YXRpYyB0eXBlX3RyYWl0czo6bm9fdHlwZSAgY2hlY2tfc2lnKEIgY29uc3Qgdm9s
YXRpbGUgKiBjb25zdCYsIGludCk7Ci0jZW5kaWYKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEIs
IHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgaXNfYmFzZV9hbmRfZGVyaXZlZF9pbXBsMgotewotI2lmIEJP
T1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQ19GVUxMX1ZFUiwgPj0gMTQwMDUwMDAwKQotI3ByYWdt
YSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo2MzM0KQotI2VuZGlmCi0g
ICAgLy8KLSAgICAvLyBNYXkgc2lsZW50bHkgZG8gdGhlIHdyb25nIHRoaW5nIHdpdGggaW5jb21w
bGV0ZSB0eXBlcwotICAgIC8vIHVubGVzcyB3ZSB0cmFwIHRoZW0gaGVyZToKLSAgICAvLwotICAg
IEJPT1NUX1NUQVRJQ19BU1NFUlQoc2l6ZW9mKEIpICE9IDApOwotICAgIEJPT1NUX1NUQVRJQ19B
U1NFUlQoc2l6ZW9mKEQpICE9IDApOwotCi0gICAgc3RydWN0IEhvc3QKLSAgICB7Ci0jaWYgIUJP
T1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQywgPT0gMTMxMCkKLSAgICAgICAgb3BlcmF0b3IgQiBj
b25zdCB2b2xhdGlsZSAqKCkgY29uc3Q7Ci0jZWxzZQotICAgICAgICBvcGVyYXRvciBCIGNvbnN0
IHZvbGF0aWxlICogY29uc3QmKCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAgICAgb3BlcmF0b3IgRCBj
b25zdCB2b2xhdGlsZSAqKCk7Ci0gICAgfTsKLQotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChi
b29sLCB2YWx1ZSA9Ci0gICAgICAgIHNpemVvZihiZF9oZWxwZXI8QixEPjo6Y2hlY2tfc2lnKEhv
c3QoKSwgMCkpID09IHNpemVvZih0eXBlX3RyYWl0czo6eWVzX3R5cGUpKTsKLSNpZiBCT09TVF9X
T1JLQVJPVU5EKEJPT1NUX01TVkNfRlVMTF9WRVIsID49IDE0MDA1MDAwMCkKLSNwcmFnbWEgd2Fy
bmluZyhwb3ApCi0jZW5kaWYKLX07Ci0KLSNlbHNlCi0KLS8vCi0vLyBicm9rZW4gdmVyc2lvbjoK
LS8vCi10ZW1wbGF0ZTx0eXBlbmFtZSBCLCB0eXBlbmFtZSBEPgotc3RydWN0IGlzX2Jhc2VfYW5k
X2Rlcml2ZWRfaW1wbDIKLXsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUg
PQotICAgICAgICAoOjpib29zdDo6aXNfY29udmVydGlibGU8RCosQio+Ojp2YWx1ZSkpOwotfTsK
LQotI2RlZmluZSBCT09TVF9CUk9LRU5fSVNfQkFTRV9BTkRfREVSSVZFRAotCi0jZW5kaWYKLQot
dGVtcGxhdGUgPHR5cGVuYW1lIEIsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgaXNfYmFzZV9hbmRfZGVy
aXZlZF9pbXBsMwotewotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IGZh
bHNlKTsKLX07Ci0KLXRlbXBsYXRlIDxib29sIGljMSwgYm9vbCBpYzIsIGJvb2wgaXNzPgotc3Ry
dWN0IGlzX2Jhc2VfYW5kX2Rlcml2ZWRfc2VsZWN0Ci17Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgVT4KLSAgIHN0cnVjdCByZWJpbmQKLSAgIHsKLSAgICAgIHR5cGVkZWYgaXNfYmFzZV9h
bmRfZGVyaXZlZF9pbXBsMzxULFU+IHR5cGU7Ci0gICB9OwotfTsKLQotdGVtcGxhdGUgPD4KLXN0
cnVjdCBpc19iYXNlX2FuZF9kZXJpdmVkX3NlbGVjdDx0cnVlLHRydWUsZmFsc2U+Ci17Ci0gICB0
ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KLSAgIHN0cnVjdCByZWJpbmQKLSAgIHsKLSAgICAg
IHR5cGVkZWYgaXNfYmFzZV9hbmRfZGVyaXZlZF9pbXBsMjxULFU+IHR5cGU7Ci0gICB9OwotfTsK
LQotdGVtcGxhdGUgPHR5cGVuYW1lIEIsIHR5cGVuYW1lIEQ+Ci1zdHJ1Y3QgaXNfYmFzZV9hbmRf
ZGVyaXZlZF9pbXBsCi17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfY3Y8Qj46OnR5cGUg
bmN2QjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9jdjxEPjo6dHlwZSBuY3ZEOwotCi0g
ICAgdHlwZWRlZiBpc19iYXNlX2FuZF9kZXJpdmVkX3NlbGVjdDwKLSAgICAgICA6OmJvb3N0Ojpp
c19jbGFzczxCPjo6dmFsdWUsCi0gICAgICAgOjpib29zdDo6aXNfY2xhc3M8RD46OnZhbHVlLAot
ICAgICAgIDo6Ym9vc3Q6OmlzX3NhbWU8bmN2QixuY3ZEPjo6dmFsdWU+IHNlbGVjdG9yOwotICAg
IHR5cGVkZWYgdHlwZW5hbWUgc2VsZWN0b3I6OnRlbXBsYXRlIHJlYmluZDxuY3ZCLG5jdkQ+IGJp
bmRlcjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGJpbmRlcjo6dHlwZSBib3VuZF90eXBlOwotCi0g
ICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gYm91bmRfdHlwZTo6dmFsdWUp
OwotfTsKLSNlbHNlCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQiwgdHlwZW5hbWUgRD4KLXN0cnVjdCBp
c19iYXNlX2FuZF9kZXJpdmVkX2ltcGwKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9j
djxCPjo6dHlwZSBuY3ZCOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2N2PEQ+Ojp0eXBl
IG5jdkQ7Ci0KLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSAoQk9PU1Rf
SVNfQkFTRV9PRihCLEQpICYmICEgOjpib29zdDo6aXNfc2FtZTxuY3ZCLG5jdkQ+Ojp2YWx1ZSkp
OwotfTsKLSNlbmRpZgotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLXRlbXBsYXRlIDxjbGFzcyBC
YXNlLCBjbGFzcyBEZXJpdmVkPiBzdHJ1Y3QgaXNfYmFzZV9hbmRfZGVyaXZlZAotICAgOiBwdWJs
aWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKDo6Ym9vc3Q6OmRldGFpbDo6aXNfYmFzZV9hbmRf
ZGVyaXZlZF9pbXBsPEJhc2UsIERlcml2ZWQ+Ojp2YWx1ZSk+IHt9OwotCi10ZW1wbGF0ZSA8Y2xh
c3MgQmFzZSwgY2xhc3MgRGVyaXZlZD4gc3RydWN0IGlzX2Jhc2VfYW5kX2Rlcml2ZWQ8QmFzZSYs
IERlcml2ZWQ+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDxjbGFzcyBCYXNlLCBj
bGFzcyBEZXJpdmVkPiBzdHJ1Y3QgaXNfYmFzZV9hbmRfZGVyaXZlZDxCYXNlLCBEZXJpdmVkJj4g
OiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPGNsYXNzIEJhc2UsIGNsYXNzIERlcml2
ZWQ+IHN0cnVjdCBpc19iYXNlX2FuZF9kZXJpdmVkPEJhc2UmLCBEZXJpdmVkJj4gOiBwdWJsaWMg
ZmFsc2VfdHlwZXt9OwotCi0jaWYgQk9PU1RfV09SS0FST1VORChfX0NPREVHRUFSQ19fLCBCT09T
VF9URVNURURfQVQoMHg2MTApKQotdGVtcGxhdGUgPGNsYXNzIEJhc2U+IHN0cnVjdCBpc19iYXNl
X2FuZF9kZXJpdmVkPEJhc2UsIEJhc2U+IDogcHVibGljIHRydWVfdHlwZXt9OwotI2VuZGlmCi0K
LX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9UVF9JU19CQVNFX0FORF9E
RVJJVkVEX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfYmFzZV9vZi5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19iYXNlX29mLmhw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlmMmY2Nzk4MDI5N2EwY2FiNWJkYmY5
YjkwMjQ4MjFhNjRmNmQzYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3Ry
YWl0cy9pc19iYXNlX29mLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLQotLy8g
IChDKSBDb3B5cmlnaHQgUmFuaSBTaGFyb25pIDIwMDMtMjAwNS4KLS8vICBVc2UsIG1vZGlmaWNh
dGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBM
aWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Vf
MV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAu
dHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMg
Zm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0gCi0jaWZu
ZGVmIEJPT1NUX1RUX0lTX0JBU0VfT0ZfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0lT
X0JBU0VfT0ZfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19i
YXNlX2FuZF9kZXJpdmVkLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zYW1l
LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jbGFzcy5ocHA+Ci0KLW5hbWVz
cGFjZSBib29zdCB7Ci0KLSAgIG5hbWVzcGFjZSBkZXRhaWx7Ci0gICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgQiwgY2xhc3MgRD4KLSAgICAgIHN0cnVjdCBpc19iYXNlX29mX2ltcAotICAgICAgewotICAg
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2N2PEI+Ojp0eXBlIG5jdkI7Ci0gICAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfY3Y8RD46OnR5cGUgbmN2RDsKLSAgICAgICAgICBC
T09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSAoCi0gICAgICAgICAgICAoOjpib29z
dDo6ZGV0YWlsOjppc19iYXNlX2FuZF9kZXJpdmVkX2ltcGw8bmN2QixuY3ZEPjo6dmFsdWUpIHx8
Ci0gICAgICAgICAgICAoOjpib29zdDo6aXNfc2FtZTxuY3ZCLG5jdkQ+Ojp2YWx1ZSAmJiA6OmJv
b3N0Ojppc19jbGFzczxuY3ZCPjo6dmFsdWUpKSk7Ci0gICAgICB9OwotICAgfQotCi0gICB0ZW1w
bGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgRGVyaXZlZD4gc3RydWN0IGlzX2Jhc2Vfb2YKLSAgICAg
IDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsICg6OmJvb3N0OjpkZXRhaWw6OmlzX2Jh
c2Vfb2ZfaW1wPEJhc2UsIERlcml2ZWQ+Ojp2YWx1ZSk+IHt9OwotCi0gICB0ZW1wbGF0ZSA8Y2xh
c3MgQmFzZSwgY2xhc3MgRGVyaXZlZD4gc3RydWN0IGlzX2Jhc2Vfb2Y8QmFzZSwgRGVyaXZlZCY+
IDogZmFsc2VfdHlwZXt9OwotICAgdGVtcGxhdGUgPGNsYXNzIEJhc2UsIGNsYXNzIERlcml2ZWQ+
IHN0cnVjdCBpc19iYXNlX29mPEJhc2UmLCBEZXJpdmVkJj4gOiBmYWxzZV90eXBle307Ci0gICB0
ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgRGVyaXZlZD4gc3RydWN0IGlzX2Jhc2Vfb2Y8QmFz
ZSYsIERlcml2ZWQ+IDogZmFsc2VfdHlwZXt9OwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0j
ZW5kaWYgLy8gQk9PU1RfVFRfSVNfQkFTRV9BTkRfREVSSVZFRF9IUFBfSU5DTFVERUQKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJh
aXRzL2lzX2NsYXNzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3R5cGVfdHJhaXRzL2lzX2NsYXNzLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTNhMjJkMmI2Mzk0MWJmNDA1NTdjNGRhZmM1MTUzYzcwZmM3NThiNS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19jbGFzcy5ocHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxMTQgKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgRGF2ZSBBYnJhaGFtcywgU3Rl
dmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywgSG93YXJkCi0vLyAgSGlubmFudCAmIEpvaG4gTWFkZG9j
ayAyMDAwLTIwMDMuCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUg
c3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4g
KFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0
dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGlu
Y2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfQ0xBU1NfSFBQ
X0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0lTX0NMQVNTX0hQUF9JTkNMVURFRAotCi0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvaW50cmluc2ljcy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaW50ZWdyYWxfY29uc3RhbnQuaHBwPgotI2lmbmRlZiBCT09TVF9JU19DTEFTUwotIyAgIGlu
Y2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3VuaW9uLmhwcD4KLQotI2lmZGVmIEJPT1NUX1RU
X0hBU19DT05GT1JNSU5HX0lTX0NMQVNTX0lNUExFTUVOVEFUSU9OCi0jICAgaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvZGV0YWlsL3llc19ub190eXBlLmhwcD4KLSNlbHNlCi0jICAgaW5jbHVk
ZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfc2NhbGFyLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC90
eXBlX3RyYWl0cy9pc19hcnJheS5ocHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
aXNfcmVmZXJlbmNlLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc192b2lk
LmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19mdW5jdGlvbi5ocHA+Ci0j
ZW5kaWYKLQotI2VuZGlmIC8vIEJPT1NUX0lTX0NMQVNTCi0KLW5hbWVzcGFjZSBib29zdCB7Ci0K
LW5hbWVzcGFjZSBkZXRhaWwgewotCi0jaWZuZGVmIEJPT1NUX0lTX0NMQVNTCi0jaWZkZWYgQk9P
U1RfVFRfSEFTX0NPTkZPUk1JTkdfSVNfQ0xBU1NfSU1QTEVNRU5UQVRJT04KLQotLy8gVGhpcyBp
cyBhY3R1YWxseSB0aGUgY29uZm9ybWluZyBpbXBsZW1lbnRhdGlvbiB3aGljaCB3b3JrcyB3aXRo
Ci0vLyBhYnN0cmFjdCBjbGFzc2VzLiAgSG93ZXZlciwgZW5vdWdoIGNvbXBpbGVycyBoYXZlIHRy
b3VibGUgd2l0aAotLy8gaXQgdGhhdCBtb3N0IHdpbGwgdXNlIHRoZSBvbmUgaW4KLS8vIGJvb3N0
L3R5cGVfdHJhaXRzL29iamVjdF90cmFpdHMuaHBwLiBUaGlzIGltcGxlbWVudGF0aW9uCi0vLyBh
Y3R1YWxseSB3b3JrcyB3aXRoIFZDNy4wLCBidXQgb3RoZXIgaW50ZXJhY3Rpb25zIHNlZW0gdG8g
ZmFpbAotLy8gd2hlbiB3ZSB1c2UgaXQuCi0KLS8vIGlzX2NsYXNzPD4gbWV0YWZ1bmN0aW9uIGR1
ZSB0byBQYXVsIE1lbnNvbmlkZXMKLS8vIChsZWF2aW5nc0BhdHRiaS5jb20pLiBGb3IgbW9yZSBk
ZXRhaWxzOgotLy8gaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3Vwcz9obD1lbiZzZWxtPTAw
MDAwMWMxY2M4MyUyNGUxNTRkNWUwJTI0Nzc3MmU1MGMlNDBjMTYxNTUwYSZybnVtPTEKLSNpZiBk
ZWZpbmVkKF9fR05VQ19fKSAgJiYgIWRlZmluZWQoX19FREdfVkVSU0lPTl9fKQotCi10ZW1wbGF0
ZSA8Y2xhc3MgVT4gOjpib29zdDo6dHlwZV90cmFpdHM6Onllc190eXBlIGlzX2NsYXNzX3Rlc3Rl
cih2b2lkKFU6OiopKHZvaWQpKTsKLXRlbXBsYXRlIDxjbGFzcyBVPiA6OmJvb3N0Ojp0eXBlX3Ry
YWl0czo6bm9fdHlwZSBpc19jbGFzc190ZXN0ZXIoLi4uKTsKLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci1zdHJ1Y3QgaXNfY2xhc3NfaW1wbAotewotCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5U
KGJvb2wsIHZhbHVlID0KLSAgICAgICAgICAgIHNpemVvZihpc19jbGFzc190ZXN0ZXI8VD4oMCkp
ID09IHNpemVvZig6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUpCi0gICAgICAgICAgICAm
JiAhIDo6Ym9vc3Q6OmlzX3VuaW9uPFQ+Ojp2YWx1ZQotICAgICAgICApOwotfTsKLQotI2Vsc2UK
LQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgaXNfY2xhc3NfaW1wbAotewotICAgIHRl
bXBsYXRlIDxjbGFzcyBVPiBzdGF0aWMgOjpib29zdDo6dHlwZV90cmFpdHM6Onllc190eXBlIGlz
X2NsYXNzX3Rlc3Rlcih2b2lkKFU6OiopKHZvaWQpKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4g
c3RhdGljIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjpub190eXBlIGlzX2NsYXNzX3Rlc3RlciguLi4p
OwotCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0KLSAgICAgICAgICAg
IHNpemVvZihpc19jbGFzc190ZXN0ZXI8VD4oMCkpID09IHNpemVvZig6OmJvb3N0Ojp0eXBlX3Ry
YWl0czo6eWVzX3R5cGUpCi0gICAgICAgICAgICAmJiAhIDo6Ym9vc3Q6OmlzX3VuaW9uPFQ+Ojp2
YWx1ZQotICAgICAgICApOwotfTsKLQotI2VuZGlmCi0KLSNlbHNlCi0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotc3RydWN0IGlzX2NsYXNzX2ltcGwKLXsKLSAgICBCT09TVF9TVEFUSUNfQ09OU1RB
TlQoYm9vbCwgdmFsdWUgPQotICAgICAgICAhIDo6Ym9vc3Q6OmlzX3VuaW9uPFQ+Ojp2YWx1ZSA+
Ojp2YWx1ZQotICAgICAgICAmJiAhIDo6Ym9vc3Q6OmlzX3NjYWxhcjxUPjo6dmFsdWUKLSAgICAg
ICAgJiYgISA6OmJvb3N0Ojppc19hcnJheTxUPjo6dmFsdWUKLSAgICAgICAgJiYgISA6OmJvb3N0
Ojppc19yZWZlcmVuY2U8VD46OnZhbHVlCi0gICAgICAgICYmICEgOjpib29zdDo6aXNfdm9pZDxU
Pjo6dmFsdWUKLSAgICAgICAgJiYgISA6OmJvb3N0Ojppc19mdW5jdGlvbjxUPjo6dmFsdWUKLSAg
ICAgICAgKTsKLX07Ci0KLSMgZW5kaWYgLy8gQk9PU1RfVFRfSEFTX0NPTkZPUk1JTkdfSVNfQ0xB
U1NfSU1QTEVNRU5UQVRJT04KLSMgZWxzZSAvLyBCT09TVF9JU19DTEFTUwotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci1zdHJ1Y3QgaXNfY2xhc3NfaW1wbAotewotICAgIEJPT1NUX1NUQVRJQ19DT05T
VEFOVChib29sLCB2YWx1ZSA9IEJPT1NUX0lTX0NMQVNTKFQpKTsKLX07Ci0jIGVuZGlmIC8vIEJP
T1NUX0lTX0NMQVNTCi0KLX0gLy8gbmFtZXNwYWNlIGRldGFpbAotCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IGlzX2NsYXNzIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIDo6Ym9v
c3Q6OmRldGFpbDo6aXNfY2xhc3NfaW1wbDxUPjo6dmFsdWU+IHt9OwotIyBpZmRlZiBfX0VER19W
RVJTSU9OX18KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfY2xhc3M8Y29uc3QgVD4gOiBw
dWJsaWMgaXNfY2xhc3M8VD57fTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfY2xhc3M8
Y29uc3Qgdm9sYXRpbGUgVD4gOiBwdWJsaWMgaXNfY2xhc3M8VD57fTsKLXRlbXBsYXRlIDxjbGFz
cyBUPiBzdHJ1Y3QgaXNfY2xhc3M8dm9sYXRpbGUgVD4gOiBwdWJsaWMgaXNfY2xhc3M8VD57fTsK
LSMgZW5kaWYKLSAgICAKLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9U
VF9JU19DTEFTU19IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbXBsZXguaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29tcGxl
eC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZjA0YjQ3OTY4Mzg1YzZjNWY2
M2JmZjY4YTAyZDlhYWViYmE1MDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlw
ZV90cmFpdHMvaXNfY29tcGxleC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0v
LyAgKEMpIENvcHlyaWdodCBKb2huIE1hZGRvY2sgMjAwNy4gCi0vLyAgVXNlLCBtb2RpZmljYXRp
b24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZv
ciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVm
IEJPT1NUX1RUX0lTX0NPTVBMRVhfSFBQCi0jZGVmaW5lIEJPT1NUX1RUX0lTX0NPTVBMRVhfSFBQ
Ci0KLSNpbmNsdWRlIDxjb21wbGV4PgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludGVn
cmFsX2NvbnN0YW50LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotICAgdGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCBpc19jb21wbGV4IDogcHVibGljIGZhbHNlX3R5cGUge307Ci0gICB0ZW1w
bGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2NvbXBsZXg8Y29uc3QgVCA+IDogcHVibGljIGlzX2Nv
bXBsZXg8VD57fTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfY29tcGxleDx2b2xh
dGlsZSBjb25zdCBUID4gOiBwdWJsaWMgaXNfY29tcGxleDxUPnt9OwotICAgdGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCBpc19jb21wbGV4PHZvbGF0aWxlIFQgPiA6IHB1YmxpYyBpc19jb21wbGV4
PFQ+e307Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2NvbXBsZXg8c3RkOjpjb21w
bGV4PFQ+ID4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0K
LSNlbmRpZiAvL0JPT1NUX1RUX0lTX0NPTVBMRVhfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19jb21wb3VuZC5o
cHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0
cy9pc19jb21wb3VuZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5OTVlYjhh
MjM3OGI4NjdmNzk1ZDk3NTc0YjQ5ZTJhYmU0ZDJiNTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29tcG91bmQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEs
MjQgKzAsMCBAQAotCi0vLyAgKEMpIENvcHlyaWdodCBTdGV2ZSBDbGVhcnksIEJlbWFuIERhd2Vz
LCBIb3dhcmQgSGlubmFudCAmIEpvaG4gTWFkZG9jayAyMDAwLgotLy8gIFVzZSwgbW9kaWZpY2F0
aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBm
b3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRl
ZiBCT09TVF9UVF9JU19DT01QT1VORF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSVNf
Q09NUE9VTkRfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19m
dW5kYW1lbnRhbC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLSNpZiBkZWZpbmVkKCBfX0NP
REVHRUFSQ19fICkKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfY29tcG91bmQgOiBw
dWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc19jb21wb3VuZChUKT4ge307Ci0jZWxz
ZQotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19jb21wb3VuZCA6IHB1YmxpYyBpbnRl
Z3JhbF9jb25zdGFudDxib29sLCAhIDo6Ym9vc3Q6OmlzX2Z1bmRhbWVudGFsPFQ+Ojp2YWx1ZT4g
e307Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1RU
X0lTX0NPTVBPVU5EX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3Qu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGVkODhhMzRiM2NjNjU3NWU3NzBm
YWNkODY0NjBiOTgxOWZhMGI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVf
dHJhaXRzL2lzX2NvbnN0LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLQotLy8g
IChDKSBDb3B5cmlnaHQgRGF2ZSBBYnJhaGFtcywgU3RldmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywg
Ci0vLyAgICAgIEhvd2FyZCBIaW5uYW50IGFuZCBKb2huIE1hZGRvY2sgMjAwMC4gCi0vLyAgKEMp
IENvcHlyaWdodCBNYXQgTWFyY3VzLCBKZXNzZSBKb25lcyBhbmQgQWRvYmUgU3lzdGVtcyBJbmMg
MjAwMQotCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVj
dCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGlu
ZyBkb2N1bWVudGF0aW9uLgotCi0vLyAgICBGaXhlZCBpc19wb2ludGVyLCBpc19yZWZlcmVuY2Us
IGlzX2NvbnN0LCBpc192b2xhdGlsZSwgaXNfc2FtZSwgCi0vLyAgICBpc19tZW1iZXJfcG9pbnRl
ciBiYXNlZCBvbiB0aGUgU2ltdWxhdGVkIFBhcnRpYWwgU3BlY2lhbGl6YXRpb24gd29yayAKLS8v
ICAgIG9mIE1hdCBNYXJjdXMgYW5kIEplc3NlIEpvbmVzLiBTZWUgIGh0dHA6Ly9vcGVuc291cmNl
LmFkb2JlLmNvbSBvciAKLS8vICAgIGh0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL2Jvb3N0
L21lc3NhZ2UvNTQ0MSAKLS8vICAgIFNvbWUgd29ya2Fyb3VuZHMgaW4gaGVyZSB1c2UgaWRlYXMg
c3VnZ2VzdGVkIGZyb20gIkdlbmVyaWM8UHJvZ3JhbW1pbmc+OiAKLS8vICAgIE1hcHBpbmdzIGJl
dHdlZW4gVHlwZXMgYW5kIFZhbHVlcyIgCi0vLyAgICBieSBBbmRyZWkgQWxleGFuZHJlc2N1IChz
ZWUgaHR0cDovL3d3dy5jdWouY29tL2V4cGVydHMvMTgxMC9hbGV4YW5kci5odG1sKS4KLQotCi0j
aWZuZGVmIEJPT1NUX1RUX0lTX0NPTlNUX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9J
U19DT05TVF9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGNzdGRkZWY+IC8vIHNpemVfdAotI2lu
Y2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludGVncmFsX2NvbnN0YW50LmhwcD4KLQotbmFtZXNw
YWNlIGJvb3N0IHsKLQotI2lmIGRlZmluZWQoIF9fQ09ERUdFQVJDX18gKQotCi0gICB0ZW1wbGF0
ZSA8Y2xhc3MgVD4KLSAgIHN0cnVjdCBpc19jb25zdCA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFu
dDxib29sLCBfX2lzX2NvbnN0KFQpPiB7fTsKLQotI2Vsc2UKLQotICAgdGVtcGxhdGUgPGNsYXNz
IFQ+Ci0gICBzdHJ1Y3QgaXNfY29uc3QgOiBwdWJsaWMgZmFsc2VfdHlwZSB7fTsKLSAgIHRlbXBs
YXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfY29uc3Q8VCBjb25zdD4gOiBwdWJsaWMgdHJ1ZV90eXBl
e307Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4gc3RydWN0IGlzX2NvbnN0
PFQgY29uc3RbTl0+IDogcHVibGljIHRydWVfdHlwZXt9OwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+
IHN0cnVjdCBpc19jb25zdDxUIGNvbnN0W10+IDogcHVibGljIHRydWVfdHlwZXt9OwotCi0jZW5k
aWYKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1RUX0lTX0NPTlNU
X0hQUF9JTkNMVURFRAotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19jb25zdHJ1Y3RpYmxlLmhwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnN0cnVj
dGlibGUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDE3MzE3MmNlYjBmOWUy
YjBlZTEzYWU5MWZiZDcxMWJhNzhlNjE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2lzX2NvbnN0cnVjdGlibGUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsODAg
KzAsMCBAQAotCi0vLyAgKEMpIENvcHlyaWdodCBKb2huIE1hZGRvY2sgMjAxNS4KLS8vICBVc2Us
IG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxl
IExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlw
ZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24u
Ci0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfQ09OU1RSVUNUSUJMRV9IUFBfSU5DTFVERUQKLSNkZWZp
bmUgQk9PU1RfVFRfSVNfQ09OU1RSVUNUSUJMRV9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2ludGVncmFsX2NvbnN0YW50LmhwcD4KLSNpbmNsdWRlIDxib29zdC9k
ZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9WQVJJ
QURJQ19URU1QTEFURVMpICYmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX0RFQ0xUWVBFKSAmJiAh
Qk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8IDE4MDApICYmICFCT09TVF9XT1JLQVJPVU5E
KEJPT1NUX0dDQ19WRVJTSU9OLCA8IDQwNTAwKQotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaXNfZGVzdHJ1Y3RpYmxlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19k
ZWZhdWx0X2NvbnN0cnVjdGlibGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2Rl
dGFpbC95ZXNfbm9fdHlwZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGVjbHZh
bC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdHsKLQotICAgbmFtZXNwYWNlIGRldGFpbHsKLQotICAg
ICAgc3RydWN0IGlzX2NvbnN0cnVjdGlibGVfaW1wCi0gICAgICB7Ci0gICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSAuLi5UaGVBcmdzLCB0eXBlbmFtZSA9IGRlY2x0eXBlKFQo
Ym9vc3Q6OmRlY2x2YWw8VGhlQXJncz4oKS4uLikpPgotICAgICAgICAgc3RhdGljIGJvb3N0Ojp0
eXBlX3RyYWl0czo6eWVzX3R5cGUgdGVzdChpbnQpOwotICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUsIHR5cGVuYW1lLi4uPgotICAgICAgICAgc3RhdGljIGJvb3N0Ojp0eXBlX3RyYWl0czo6bm9f
dHlwZSB0ZXN0KC4uLik7Ci0KLSAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEFyZywgdHlwZW5hbWUgPSBkZWNsdHlwZSg6Om5ldyBUKGJvb3N0OjpkZWNsdmFsPEFyZz4oKSkp
PgotICAgICAgICAgc3RhdGljIGJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUgdGVzdDEoaW50
KTsKLSAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4KLSAgICAgICAgIHN0YXRp
YyBib29zdDo6dHlwZV90cmFpdHM6Om5vX3R5cGUgdGVzdDEoLi4uKTsKLQotICAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgICAgICBzdGF0aWMgYm9vc3Q6OnR5cGVfdHJhaXRzOjp5
ZXNfdHlwZSByZWZfdGVzdChUKTsKLSAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAg
ICAgICAgc3RhdGljIGJvb3N0Ojp0eXBlX3RyYWl0czo6bm9fdHlwZSByZWZfdGVzdCguLi4pOwot
ICAgICAgfTsKLQotICAgfQotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgLi4uQXJncz4g
c3RydWN0IGlzX2NvbnN0cnVjdGlibGUgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwg
c2l6ZW9mKGRldGFpbDo6aXNfY29uc3RydWN0aWJsZV9pbXA6OnRlc3Q8VCwgQXJncy4uLj4oMCkp
ID09IHNpemVvZihib29zdDo6dHlwZV90cmFpdHM6Onllc190eXBlKT57fTsKLSAgIHRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBBcmc+IHN0cnVjdCBpc19jb25zdHJ1Y3RpYmxlPFQsIEFyZz4gOiBw
dWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgaXNfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSAm
JiBzaXplb2YoZGV0YWlsOjppc19jb25zdHJ1Y3RpYmxlX2ltcDo6dGVzdDE8VCwgQXJnPigwKSkg
PT0gc2l6ZW9mKGJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUpPnt9OwotICAgdGVtcGxhdGUg
PGNsYXNzIFJlZiwgY2xhc3MgQXJnPiBzdHJ1Y3QgaXNfY29uc3RydWN0aWJsZTxSZWYmLCBBcmc+
IDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIHNpemVvZihkZXRhaWw6OmlzX2NvbnN0
cnVjdGlibGVfaW1wOjpyZWZfdGVzdDxSZWYmPihib29zdDo6ZGVjbHZhbDxBcmc+KCkpKSA9PSBz
aXplb2YoYm9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSk+e307Ci0gICB0ZW1wbGF0ZSA8Y2xh
c3MgUmVmLCBjbGFzcyBBcmc+IHN0cnVjdCBpc19jb25zdHJ1Y3RpYmxlPFJlZiYmLCBBcmc+IDog
cHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIHNpemVvZihkZXRhaWw6OmlzX2NvbnN0cnVj
dGlibGVfaW1wOjpyZWZfdGVzdDxSZWYmJj4oYm9vc3Q6OmRlY2x2YWw8QXJnPigpKSkgPT0gc2l6
ZW9mKGJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUpPnt9OwotCi0gICB0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgaXNfY29uc3RydWN0aWJsZTx2b2lkPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci0gICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfY29uc3RydWN0aWJsZTx2b2lkIGNvbnN0PiA6IHB1YmxpYyBm
YWxzZV90eXBle307Ci0gICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfY29uc3RydWN0aWJsZTx2b2lk
IGNvbnN0IHZvbGF0aWxlPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci0gICB0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgaXNfY29uc3RydWN0aWJsZTx2b2lkIHZvbGF0aWxlPiA6IHB1YmxpYyBmYWxzZV90eXBl
e307Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfY29uc3RydWN0aWJsZTxUPiA6
IHB1YmxpYyBpc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8VD57fTsKLQotI2Vsc2UKLQotI2luY2x1
ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnZlcnRpYmxlLmhwcD4KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9pc19kZWZhdWx0X2NvbnN0cnVjdGlibGUuaHBwPgotCi1uYW1lc3BhY2Ug
Ym9vc3R7Ci0KLSAgIC8vIFdlIGRvbid0IGtub3cgaG93IHRvIGltcGxlbWVudCB0aGlzOgotICAg
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUgPSB2b2lkPiBzdHJ1Y3QgaXNfY29uc3RydWN0aWJs
ZSA6IHB1YmxpYyBpc19jb252ZXJ0aWJsZTxVLCBUPnt9OwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+
IHN0cnVjdCBpc19jb25zdHJ1Y3RpYmxlPFQsIHZvaWQ+IDogcHVibGljIGlzX2RlZmF1bHRfY29u
c3RydWN0aWJsZTxUPnt9OwotICAgdGVtcGxhdGUgPD4gc3RydWN0IGlzX2NvbnN0cnVjdGlibGU8
dm9pZCwgdm9pZD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotICAgdGVtcGxhdGUgPD4gc3RydWN0
IGlzX2NvbnN0cnVjdGlibGU8dm9pZCBjb25zdCwgdm9pZD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9
OwotICAgdGVtcGxhdGUgPD4gc3RydWN0IGlzX2NvbnN0cnVjdGlibGU8dm9pZCBjb25zdCB2b2xh
dGlsZSwgdm9pZD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotICAgdGVtcGxhdGUgPD4gc3RydWN0
IGlzX2NvbnN0cnVjdGlibGU8dm9pZCB2b2xhdGlsZSwgdm9pZD4gOiBwdWJsaWMgZmFsc2VfdHlw
ZXt9OwotICAgdGVtcGxhdGUgPGNsYXNzIFJlZj4gc3RydWN0IGlzX2NvbnN0cnVjdGlibGU8UmVm
Jiwgdm9pZD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9S
VkFMVUVfUkVGRVJFTkNFUwotICAgdGVtcGxhdGUgPGNsYXNzIFJlZj4gc3RydWN0IGlzX2NvbnN0
cnVjdGlibGU8UmVmJiYsIHZvaWQ+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLSNlbmRpZgotI2Vu
ZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9UVF9JU19DT05T
VFJVQ1RJQkxFX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29udmVydGlibGUuaHBwIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29u
dmVydGlibGUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTdlY2UyMGI0MGU0
YjkwNzBiYzVkZTliY2M1NDJjYmEwZmNjNmJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3R5cGVfdHJhaXRzL2lzX2NvbnZlcnRpYmxlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4
OCArMCwwIEBACi0KLS8vIENvcHlyaWdodCAyMDAwIEpvaG4gTWFkZG9jayAoam9obkBqb2hubWFk
ZG9jay5jby51aykKLS8vIENvcHlyaWdodCAyMDAwIEplcmVteSBTaWVrIChqc2lla0Bsc2MubmQu
ZWR1KQotLy8gQ29weXJpZ2h0IDE5OTksIDIwMDAgSmFha2tvIEphcnZpIChqYWFra28uamFydmlA
Y3MudXR1LmZpKQotLy8KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFy
ZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4w
LiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAg
aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24g
aW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfQ09OVkVSVElC
TEVfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0lTX0NPTlZFUlRJQkxFX0hQUF9JTkNM
VURFRAotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50cmluc2ljcy5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50ZWdyYWxfY29uc3RhbnQuaHBwPgotI2lmbmRlZiBC
T09TVF9JU19DT05WRVJUSUJMRQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC95
ZXNfbm9fdHlwZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2NvbmZp
Zy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfYXJyYXkuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2FyaXRobWV0aWMuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L3R5cGVfdHJhaXRzL2lzX3ZvaWQuaHBwPgotI2lmICFkZWZpbmVkKEJPT1NUX05PX0lTX0FCU1RS
QUNUKQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Fic3RyYWN0LmhwcD4KLSNlbmRp
ZgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2FkZF9sdmFsdWVfcmVmZXJlbmNlLmhwcD4K
LSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9hZGRfcnZhbHVlX3JlZmVyZW5jZS5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfZnVuY3Rpb24uaHBwPgotCi0jaWYgZGVmaW5l
ZChfX01XRVJLU19fKQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9yZWZlcmVu
Y2UuaHBwPgotI2VuZGlmCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fU0ZJTkFFX0VYUFIpICYmICFk
ZWZpbmVkKEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZFUkVOQ0VTKQotIyAgaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvZGVjbHZhbC5ocHA+Ci0jZW5kaWYKLSNlbGlmIGRlZmluZWQoQk9PU1Rf
TVNWQykgfHwgZGVmaW5lZChCT09TVF9JTlRFTCkKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0
cy9pc19mdW5jdGlvbi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5o
cHA+Ci0jZW5kaWYgLy8gQk9PU1RfSVNfQ09OVkVSVElCTEUKLQotbmFtZXNwYWNlIGJvb3N0IHsK
LQotI2lmbmRlZiBCT09TVF9JU19DT05WRVJUSUJMRQotCi0vLyBpcyBvbmUgdHlwZSBjb252ZXJ0
aWJsZSB0byBhbm90aGVyPwotLy8KLS8vIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0
aGUgaXNfY29udmVydGlibGUKLS8vIHRlbXBsYXRlLCBhbG1vc3QgZXZlcnkgY29tcGlsZXIgc2Vl
bXMgdG8gcmVxdWlyZSBpdHMKLS8vIG93biB2ZXJzaW9uLgotLy8KLS8vIFRoYW5rcyB0byBBbmRy
ZWkgQWxleGFuZHJlc2N1IGZvciB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUKLS8vIGNvbnZl
cnNpb24gZGV0ZWN0aW9uIHRlY2huaXF1ZSEKLS8vCi0KLW5hbWVzcGFjZSBkZXRhaWwgewotCi0j
aWYgIWRlZmluZWQoQk9PU1RfTk9fU0ZJTkFFX0VYUFIpICYmICFkZWZpbmVkKEJPT1NUX05PX0NY
WDExX1JWQUxVRV9SRUZFUkVOQ0VTKSAmJiAhKGRlZmluZWQoQk9PU1RfR0NDKSAmJiAoQk9PU1Rf
R0NDIDwgNDA3MDApKQotCi0gICAvLyBUaGlzIGlzIGEgQysrMTEgY29uZm9ybWluZyB2ZXJzaW9u
LCBwbGFjZSB0aGlzIGZpcnN0IGFuZCB1c2UgaXQgd2hlcmV2ZXIgcG9zc2libGU6Ci0KLSMgIGRl
ZmluZSBCT09TVF9UVF9DWFgxMV9JU19DT05WRVJUSUJMRQotCi0gICB0ZW1wbGF0ZSA8Y2xhc3Mg
QSwgY2xhc3MgQiwgY2xhc3MgQz4KLSAgIHN0cnVjdCBvcl9oZWxwZXIKLSAgIHsKLSAgICAgIHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gKEE6OnZhbHVlIHx8IEI6OnZhbHVlIHx8IEM6OnZhbHVl
KTsKLSAgIH07Ci0KLSAgIHRlbXBsYXRlPHR5cGVuYW1lIEZyb20sIHR5cGVuYW1lIFRvLCBib29s
IGIgPSBvcl9oZWxwZXI8Ym9vc3Q6OmlzX3ZvaWQ8RnJvbT4sIGJvb3N0Ojppc19mdW5jdGlvbjxU
bz4sIGJvb3N0Ojppc19hcnJheTxUbz4gPjo6dmFsdWU+Ci0gICBzdHJ1Y3QgaXNfY29udmVydGli
bGVfYmFzaWNfaW1wbAotICAgewotICAgICAgLy8gTm90aGluZyBjb252ZXJ0cyB0byBmdW5jdGlv
biBvciBhcnJheSwgYnV0IHZvaWQgY29udmVydHMgdG8gdm9pZDoKLSAgICAgIHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gaXNfdm9pZDxUbz46OnZhbHVlOyAKLSAgIH07Ci0KLSAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZyb20sIHR5cGVuYW1lIFRvPgotICAgY2xhc3MgaXNfY29udmVydGlibGVfYmFz
aWNfaW1wbDxGcm9tLCBUbywgZmFsc2U+Ci0gICB7Ci0gICAgICB0eXBlZGVmIGNoYXIgb25lOwot
ICAgICAgdHlwZWRlZiBpbnQgIHR3bzsKLQotICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVG8xPgot
ICAgICAgc3RhdGljIHZvaWQgdGVzdF9hdXgoVG8xKTsKLQotICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnJvbTEsIHR5cGVuYW1lIFRvMT4KLSAgICAgIHN0YXRpYyBkZWNsdHlwZSh0ZXN0X2F1eDxU
bzE+KGJvb3N0OjpkZWNsdmFsPEZyb20xPigpKSwgb25lKCkpIHRlc3QoaW50KTsKLQotICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPgotICAgICAgc3RhdGljIHR3byB0ZXN0KC4uLik7
Ci0KLSAgIHB1YmxpYzoKLSAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKHRl
c3Q8RnJvbSwgVG8+KDApKSA9PSAxOwotICAgfTsKLQotI2VsaWYgZGVmaW5lZChfX0JPUkxBTkRD
X18pICYmIChfX0JPUkxBTkRDX18gPCAweDU2MCkKLS8vCi0vLyBzcGVjaWFsIHZlcnNpb24gZm9y
IEJvcmxhbmQgY29tcGlsZXJzCi0vLyB0aGlzIHZlcnNpb24gYnJlYWtzIHdoZW4gdXNlZCBmb3Ig
c29tZQotLy8gVURUIGNvbnZlcnNpb25zOgotLy8KLXRlbXBsYXRlIDx0eXBlbmFtZSBGcm9tLCB0
eXBlbmFtZSBUbz4KLXN0cnVjdCBpc19jb252ZXJ0aWJsZV9pbXBsCi17Ci0jcHJhZ21hIG9wdGlv
biBwdXNoIC13LTgwNzQKLSAgICAvLyBUaGlzIHdvcmthcm91bmQgZm9yIEJvcmxhbmQgYnJlYWtz
IHRoZSBFREcgQysrIGZyb250ZW5kLAotICAgIC8vIHNvIHdlIG9ubHkgdXNlIGl0IGZvciBCb3Js
YW5kLgotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgY2hlY2tlcgotICAgIHsKLSAg
ICAgICAgc3RhdGljIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjpub190eXBlIEJPT1NUX1RUX0RFQ0wg
X21fY2hlY2soLi4uKTsKLSAgICAgICAgc3RhdGljIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNf
dHlwZSBCT09TVF9UVF9ERUNMIF9tX2NoZWNrKFQpOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdHlw
ZW5hbWUgYWRkX2x2YWx1ZV9yZWZlcmVuY2U8RnJvbT46OnR5cGUgIF9tX2Zyb207Ci0gICAgc3Rh
dGljIGJvb2wgY29uc3QgdmFsdWUgPSBzaXplb2YoIGNoZWNrZXI8VG8+OjpfbV9jaGVjayhfbV9m
cm9tKSApCi0gICAgICAgID09IHNpemVvZig6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUp
OwotI3ByYWdtYSBvcHRpb24gcG9wCi19OwotCi0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBk
ZWZpbmVkKF9fQk9STEFORENfXykgJiYgKF9fQk9STEFORENfXyA8IDB4NjAwKQotLy8gc3BlY2lh
bCB2ZXJzaW9uIGZvciBnY2MgY29tcGlsZXIgKyByZWNlbnQgQm9ybGFuZCB2ZXJzaW9ucwotLy8g
bm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgcGFzcyBVRFQncyB0aHJvdWdoICguLi4pCi0KLXN0cnVj
dCBhbnlfY29udmVyc2lvbgotewotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBhbnlfY29udmVy
c2lvbihjb25zdCB2b2xhdGlsZSBUJik7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGFueV9j
b252ZXJzaW9uKGNvbnN0IFQmKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gYW55X2NvbnZl
cnNpb24odm9sYXRpbGUgVCYpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBhbnlfY29udmVy
c2lvbihUJik7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IGNoZWNrZXIKLXsK
LSAgICBzdGF0aWMgYm9vc3Q6OnR5cGVfdHJhaXRzOjpub190eXBlIF9tX2NoZWNrKGFueV9jb252
ZXJzaW9uIC4uLik7Ci0gICAgc3RhdGljIGJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUgX21f
Y2hlY2soVCwgaW50KTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGcm9tLCB0eXBlbmFtZSBU
bz4KLXN0cnVjdCBpc19jb252ZXJ0aWJsZV9iYXNpY19pbXBsCi17Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBhZGRfbHZhbHVlX3JlZmVyZW5jZTxGcm9tPjo6dHlwZSBsdmFsdWVfdHlwZTsKLSAgICB0
eXBlZGVmIHR5cGVuYW1lIGFkZF9ydmFsdWVfcmVmZXJlbmNlPEZyb20+Ojp0eXBlIHJ2YWx1ZV90
eXBlOwotICAgIHN0YXRpYyBsdmFsdWVfdHlwZSBfbV9mcm9tOwotI2lmICFkZWZpbmVkKEJPT1NU
X05PX0NYWDExX1JWQUxVRV9SRUZFUkVOQ0VTKSAmJiAoKF9fR05VQ19fID4gNCkgfHwgKChfX0dO
VUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPiA2KSkpCi0gICAgc3RhdGljIGJvb2wgY29u
c3QgdmFsdWUgPQotICAgICAgICBzaXplb2YoIGJvb3N0OjpkZXRhaWw6OmNoZWNrZXI8VG8+Ojpf
bV9jaGVjayhzdGF0aWNfY2FzdDxydmFsdWVfdHlwZT4oX21fZnJvbSksIDApICkKLSAgICAgICAg
PT0gc2l6ZW9mKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSk7Ci0jZWxzZQotICAgIHN0
YXRpYyBib29sIGNvbnN0IHZhbHVlID0KLSAgICAgICAgc2l6ZW9mKCBib29zdDo6ZGV0YWlsOjpj
aGVja2VyPFRvPjo6X21fY2hlY2soX21fZnJvbSwgMCkgKQotICAgICAgICA9PSBzaXplb2YoOjpi
b29zdDo6dHlwZV90cmFpdHM6Onllc190eXBlKTsKLSNlbmRpZgotfTsKLQotI2VsaWYgKGRlZmlu
ZWQoX19FREdfVkVSU0lPTl9fKSAmJiAoX19FREdfVkVSU0lPTl9fID49IDI0NSkgJiYgIWRlZmlu
ZWQoX19JQ0wpKSBcCi0gICAgICB8fCBkZWZpbmVkKF9fSUJNQ1BQX18pIHx8IGRlZmluZWQoX19I
UF9hQ0MpCi0vLwotLy8gVGhpcyBpcyAqYWxtb3N0KiBhbiBpZGVhbCB3b3JsZCBpbXBsZW1lbnRh
dGlvbiBhcyBpdCBkb2Vzbid0IHJlbHkKLS8vIG9uIHVuZGVmaW5lZCBiZWhhdmlvdXIgYnkgcGFz
c2luZyBVRFQncyB0aHJvdWdoICguLi4pLgotLy8gVW5mb3J0dW5hdGVseSBpdCBkb2Vzbid0IHF1
aXRlIHBhc3MgYWxsIHRoZSB0ZXN0cyBmb3IgbW9zdCBjb21waWxlcnMgKHNpZ2guLi4pCi0vLyBF
bmFibGUgdGhpcyBmb3IgeW91ciBjb21waWxlciBpZiBpc19jb252ZXJ0aWJsZV90ZXN0LmNwcCB3
aWxsIGNvbXBpbGUgaXQuLi4KLS8vCi0vLyBOb3RlIHdlIGRvIG5vdCBlbmFibGUgdGhpcyBmb3Ig
VkM3LjEsIGJlY2F1c2UgZXZlbiB0aG91Z2ggaXQgcGFzc2VzIGFsbCB0aGUKLS8vIHR5cGVfdHJh
aXRzIHRlc3RzIGl0IGlzIGtub3duIHRvIGNhdXNlIHByb2JsZW1zIHdoZW4gaW5zdGFudGlhdGlv
biBvY2N1cnMKLS8vIGRlZXAgd2l0aGluIHRoZSBpbnN0YW50aWF0aW9uIHRyZWUgOi0oCi0vLwot
c3RydWN0IGFueV9jb252ZXJzaW9uCi17Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGFueV9j
b252ZXJzaW9uKGNvbnN0IHZvbGF0aWxlIFQmKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
YW55X2NvbnZlcnNpb24oY29uc3QgVCYpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBhbnlf
Y29udmVyc2lvbih2b2xhdGlsZSBUJik7Ci0gICAgLy8gd2UgbmVlZCB0aGlzIGNvbnN0cnVjdG9y
IHRvIGNhdGNoIHJlZmVyZW5jZXMgdG8gZnVuY3Rpb25zCi0gICAgLy8gKHdoaWNoIGNhbiBub3Qg
YmUgY3YtcXVhbGlmaWVkKToKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gYW55X2NvbnZlcnNp
b24oVCYpOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEZyb20sIHR5cGVuYW1lIFRvPgotc3Ry
dWN0IGlzX2NvbnZlcnRpYmxlX2Jhc2ljX2ltcGwKLXsKLSAgICBzdGF0aWMgOjpib29zdDo6dHlw
ZV90cmFpdHM6Om5vX3R5cGUgQk9PU1RfVFRfREVDTCBfbV9jaGVjayhhbnlfY29udmVyc2lvbiAu
Li4pOwotICAgIHN0YXRpYyA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUgQk9PU1RfVFRf
REVDTCBfbV9jaGVjayhUbywgaW50KTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFkZF9sdmFsdWVf
cmVmZXJlbmNlPEZyb20+Ojp0eXBlIGx2YWx1ZV90eXBlOwotICAgIHR5cGVkZWYgdHlwZW5hbWUg
YWRkX3J2YWx1ZV9yZWZlcmVuY2U8RnJvbT46OnR5cGUgcnZhbHVlX3R5cGU7IAotICAgIHN0YXRp
YyBsdmFsdWVfdHlwZSBfbV9mcm9tOwotCi0jaWZuZGVmIEJPT1NUX05PX0NYWDExX1JWQUxVRV9S
RUZFUkVOQ0VTCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0KLSAgICAg
ICAgc2l6ZW9mKCBfbV9jaGVjayhzdGF0aWNfY2FzdDxydmFsdWVfdHlwZT4oX21fZnJvbSksIDAp
ICkgPT0gc2l6ZW9mKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSkKLSAgICAgICAgKTsK
LSNlbHNlCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0KLSAgICAgICAg
c2l6ZW9mKCBfbV9jaGVjayhfbV9mcm9tLCAwKSApID09IHNpemVvZig6OmJvb3N0Ojp0eXBlX3Ry
YWl0czo6eWVzX3R5cGUpCi0gICAgICAgICk7Ci0jZW5kaWYKLX07Ci0KLSNlbGlmIGRlZmluZWQo
X19ETUNfXykKLQotc3RydWN0IGFueV9jb252ZXJzaW9uCi17Ci0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGFueV9jb252ZXJzaW9uKGNvbnN0IHZvbGF0aWxlIFQmKTsKLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gYW55X2NvbnZlcnNpb24oY29uc3QgVCYpOwotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBhbnlfY29udmVyc2lvbih2b2xhdGlsZSBUJik7Ci0gICAgLy8gd2UgbmVlZCB0aGlz
IGNvbnN0cnVjdG9yIHRvIGNhdGNoIHJlZmVyZW5jZXMgdG8gZnVuY3Rpb25zCi0gICAgLy8gKHdo
aWNoIGNhbiBub3QgYmUgY3YtcXVhbGlmaWVkKToKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
YW55X2NvbnZlcnNpb24oVCYpOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEZyb20sIHR5cGVu
YW1lIFRvPgotc3RydWN0IGlzX2NvbnZlcnRpYmxlX2Jhc2ljX2ltcGwKLXsKLSAgICAvLyBVc2lu
ZyAnLi4uJyBkb2Vzbid0IGFsd2F5cyB3b3JrIG9uIERpZ2l0YWwgTWFycy4gVGhpcyB2ZXJzaW9u
IHNlZW1zIHRvLgotICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgIHN0YXRpYyA6OmJvb3N0Ojp0
eXBlX3RyYWl0czo6bm9fdHlwZSBCT09TVF9UVF9ERUNMIF9tX2NoZWNrKGFueV9jb252ZXJzaW9u
LCAgZmxvYXQsIFQpOwotICAgIHN0YXRpYyA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUg
Qk9PU1RfVFRfREVDTCBfbV9jaGVjayhUbywgaW50LCBpbnQpOwotICAgIHR5cGVkZWYgdHlwZW5h
bWUgYWRkX2x2YWx1ZV9yZWZlcmVuY2U8RnJvbT46OnR5cGUgbHZhbHVlX3R5cGU7Ci0gICAgdHlw
ZWRlZiB0eXBlbmFtZSBhZGRfcnZhbHVlX3JlZmVyZW5jZTxGcm9tPjo6dHlwZSBydmFsdWVfdHlw
ZTsKLSAgICBzdGF0aWMgbHZhbHVlX3R5cGUgX21fZnJvbTsKLQotICAgIC8vIFN0YXRpYyBjb25z
dGFudHMgc29tZXRpbWUgY2F1c2UgdGhlIGNvbnZlcnNpb24gb2YgX21fZnJvbSB0byBUbyB0byBi
ZQotICAgIC8vIGNhbGxlZC4gVGhpcyBkb2Vzbid0IGhhcHBlbiB3aXRoIGFuIGVudW0uCi0jaWZu
ZGVmIEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZFUkVOQ0VTCi0gICAgZW51bSB7IHZhbHVlID0K
LSAgICAgICAgc2l6ZW9mKCBfbV9jaGVjayhzdGF0aWNfY2FzdDxydmFsdWVfdHlwZT4oX21fZnJv
bSksIDAsIDApICkgPT0gc2l6ZW9mKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSkKLSAg
ICAgICAgfTsKLSNlbHNlCi0gICAgZW51bSB7IHZhbHVlID0KLSAgICAgICAgc2l6ZW9mKCBfbV9j
aGVjayhfbV9mcm9tLCAwLCAwKSApID09IHNpemVvZig6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVz
X3R5cGUpCi0gICAgICAgIH07Ci0jZW5kaWYKLX07Ci0KLSNlbGlmIGRlZmluZWQoX19NV0VSS1Nf
XykKLS8vIAotLy8gQ1cgd29ya3Mgd2l0aCB0aGUgdGVjaG5pcXVlIGltcGxlbWVudGVkIGFib3Zl
IGZvciBFREcsIGV4Y2VwdCB3aGVuIEZyb20KLS8vIGlzIGEgZnVuY3Rpb24gdHlwZSAob3IgYSBy
ZWZlcmVuY2UgdG8gc3VjaCBhIHR5cGUpLCBpbiB3aGljaCBjYXNlCi0vLyBhbnlfY29udmVyc2lv
biB3b24ndCBiZSBhY2NlcHRlZCBhcyBhIHZhbGlkIGNvbnZlcnNpb24uIFdlIGRldGVjdCB0aGlz
Ci0vLyBleGNlcHRpb25hbCBzaXR1YXRpb24gYW5kIGNoYW5uZWwgaXQgdGhyb3VnaCBhbiBhbHRl
cm5hdGl2ZSBhbGdvcml0aG0uCi0vLwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnJvbSwgdHlwZW5h
bWUgVG8sYm9vbCBGcm9tSXNGdW5jdGlvblJlZj4KLXN0cnVjdCBpc19jb252ZXJ0aWJsZV9iYXNp
Y19pbXBsX2F1eDsKLQotc3RydWN0IGFueV9jb252ZXJzaW9uCi17Ci0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGFueV9jb252ZXJzaW9uKGNvbnN0IHZvbGF0aWxlIFQmKTsKLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gYW55X2NvbnZlcnNpb24oY29uc3QgVCYpOwotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBhbnlfY29udmVyc2lvbih2b2xhdGlsZSBUJik7Ci0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGFueV9jb252ZXJzaW9uKFQmKTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBG
cm9tLCB0eXBlbmFtZSBUbz4KLXN0cnVjdCBpc19jb252ZXJ0aWJsZV9iYXNpY19pbXBsX2F1eDxG
cm9tLFRvLGZhbHNlIC8qRnJvbUlzRnVuY3Rpb25SZWYqLz4KLXsKLSAgICBzdGF0aWMgOjpib29z
dDo6dHlwZV90cmFpdHM6Om5vX3R5cGUgQk9PU1RfVFRfREVDTCBfbV9jaGVjayhhbnlfY29udmVy
c2lvbiAuLi4pOwotICAgIHN0YXRpYyA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUgQk9P
U1RfVFRfREVDTCBfbV9jaGVjayhUbywgaW50KTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFkZF9s
dmFsdWVfcmVmZXJlbmNlPEZyb20+Ojp0eXBlIGx2YWx1ZV90eXBlOwotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgYWRkX3J2YWx1ZV9yZWZlcmVuY2U8RnJvbT46OnR5cGUgcnZhbHVlX3R5cGU7IAotICAg
IHN0YXRpYyBsdmFsdWVfdHlwZSBfbV9mcm9tOwotCi0jaWZuZGVmIEJPT1NUX05PX0NYWDExX1JW
QUxVRV9SRUZFUkVOQ0VTCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0K
LSAgICAgICAgc2l6ZW9mKCBfbV9jaGVjayhzdGF0aWNfY2FzdDxydmFsdWVfdHlwZT4oX21fZnJv
bSksIDApICkgPT0gc2l6ZW9mKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSkKLSAgICAg
ICAgKTsKLSNlbHNlCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0KLSAg
ICAgICAgc2l6ZW9mKCBfbV9jaGVjayhfbV9mcm9tLCAwKSApID09IHNpemVvZig6OmJvb3N0Ojp0
eXBlX3RyYWl0czo6eWVzX3R5cGUpCi0gICAgICAgICk7Ci0jZW5kaWYKLX07Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBGcm9tLCB0eXBlbmFtZSBUbz4KLXN0cnVjdCBpc19jb252ZXJ0aWJsZV9iYXNp
Y19pbXBsX2F1eDxGcm9tLFRvLHRydWUgLypGcm9tSXNGdW5jdGlvblJlZiovPgotewotICAgIHN0
YXRpYyA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6bm9fdHlwZSBCT09TVF9UVF9ERUNMIF9tX2NoZWNr
KC4uLik7Ci0gICAgc3RhdGljIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSBCT09TVF9U
VF9ERUNMIF9tX2NoZWNrKFRvKTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGFkZF9sdmFsdWVfcmVm
ZXJlbmNlPEZyb20+Ojp0eXBlIGx2YWx1ZV90eXBlOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgYWRk
X3J2YWx1ZV9yZWZlcmVuY2U8RnJvbT46OnR5cGUgcnZhbHVlX3R5cGU7Ci0gICAgc3RhdGljIGx2
YWx1ZV90eXBlIF9tX2Zyb207Ci0jaWZuZGVmIEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZFUkVO
Q0VTCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0KLSAgICAgICAgc2l6
ZW9mKCBfbV9jaGVjayhzdGF0aWNfY2FzdDxydmFsdWVfdHlwZT4oX21fZnJvbSkpICkgPT0gc2l6
ZW9mKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSkKLSAgICAgICAgKTsKLSNlbHNlCi0g
ICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0KLSAgICAgICAgc2l6ZW9mKCBf
bV9jaGVjayhfbV9mcm9tKSApID09IHNpemVvZig6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5
cGUpCi0gICAgICAgICk7Ci0jZW5kaWYKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGcm9tLCB0
eXBlbmFtZSBUbz4KLXN0cnVjdCBpc19jb252ZXJ0aWJsZV9iYXNpY19pbXBsOgotICBpc19jb252
ZXJ0aWJsZV9iYXNpY19pbXBsX2F1eDwKLSAgICBGcm9tLFRvLAotICAgIDo6Ym9vc3Q6OmlzX2Z1
bmN0aW9uPHR5cGVuYW1lIDo6Ym9vc3Q6OnJlbW92ZV9yZWZlcmVuY2U8RnJvbT46OnR5cGU+Ojp2
YWx1ZQotICA+Ci17fTsKLQotI2Vsc2UKLS8vCi0vLyBUaGlzIHZlcnNpb24gc2VlbXMgdG8gd29y
ayBwcmV0dHkgd2VsbCBmb3IgYSB3aWRlIHNwZWN0cnVtIG9mIGNvbXBpbGVycywKLS8vIGhvd2V2
ZXIgaXQgZG9lcyByZWx5IG9uIHVuZGVmaW5lZCBiZWhhdmlvdXIgYnkgcGFzc2luZyBVRFQncyB0
aHJvdWdoICguLi4pLgotLy8KLQotLy9Xb3JrYXJvdW5kIGZvciBvbGQgY29tcGlsZXJzIGxpa2Ug
TVNWQyA3LjEgdG8gYXZvaWQKLS8vZm9ybWluZyBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBvZiB1
bmtub3duIGJvdW5kCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnJvbT4KLXN0cnVjdCBpc19jb252ZXJ0
aWJsZV9iYXNpY19pbXBsX2FkZF9sdmFsdWVfcmVmZXJlbmNlCi0gICA6IGFkZF9sdmFsdWVfcmVm
ZXJlbmNlPEZyb20+Ci17fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEZyb20+Ci1zdHJ1Y3QgaXNf
Y29udmVydGlibGVfYmFzaWNfaW1wbF9hZGRfbHZhbHVlX3JlZmVyZW5jZTxGcm9tW10+Ci17Ci0g
ICAgdHlwZWRlZiBGcm9tIHR5cGUgW107Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnJvbSwg
dHlwZW5hbWUgVG8+Ci1zdHJ1Y3QgaXNfY29udmVydGlibGVfYmFzaWNfaW1wbAotewotICAgIHN0
YXRpYyA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6bm9fdHlwZSBCT09TVF9UVF9ERUNMIF9tX2NoZWNr
KC4uLik7Ci0gICAgc3RhdGljIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSBCT09TVF9U
VF9ERUNMIF9tX2NoZWNrKFRvKTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGlzX2NvbnZlcnRpYmxl
X2Jhc2ljX2ltcGxfYWRkX2x2YWx1ZV9yZWZlcmVuY2U8RnJvbT46OnR5cGUgbHZhbHVlX3R5cGU7
Ci0gICAgc3RhdGljIGx2YWx1ZV90eXBlIF9tX2Zyb207Ci0jaWZkZWYgQk9PU1RfTVNWQwotI3By
YWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQ0KQotI2lmIEJP
T1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQ19GVUxMX1ZFUiwgPj0gMTQwMDUwMDAwKQotI3ByYWdt
YSB3YXJuaW5nKGRpc2FibGU6NjMzNCkKLSNlbmRpZgotI2VuZGlmCi0jaWZuZGVmIEJPT1NUX05P
X0NYWDExX1JWQUxVRV9SRUZFUkVOQ0VTCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBhZGRfcnZhbHVl
X3JlZmVyZW5jZTxGcm9tPjo6dHlwZSBydmFsdWVfdHlwZTsgCi0gICAgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKGJvb2wsIHZhbHVlID0KLSAgICAgICAgc2l6ZW9mKCBfbV9jaGVjayhzdGF0aWNfY2Fz
dDxydmFsdWVfdHlwZT4oX21fZnJvbSkpICkgPT0gc2l6ZW9mKDo6Ym9vc3Q6OnR5cGVfdHJhaXRz
Ojp5ZXNfdHlwZSkKLSAgICAgICAgKTsKLSNlbHNlCi0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5U
KGJvb2wsIHZhbHVlID0KLSAgICAgICAgc2l6ZW9mKCBfbV9jaGVjayhfbV9mcm9tKSApID09IHNp
emVvZig6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUpCi0gICAgICAgICk7Ci0jZW5kaWYK
LSNpZmRlZiBCT09TVF9NU1ZDCi0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCi19OwotCi0j
ZW5kaWYgLy8gaXNfY29udmVydGlibGVfaW1wbAotCi0jaWYgZGVmaW5lZChfX0RNQ19fKQotLy8g
QXMgYmVmb3JlLCBhIHN0YXRpYyBjb25zdGFudCBzb21ldGltZXMgY2F1c2VzIGVycm9ycyBvbiBE
aWdpdGFsIE1hcnMuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnJvbSwgdHlwZW5hbWUgVG8+Ci1zdHJ1
Y3QgaXNfY29udmVydGlibGVfaW1wbAotewotICAgIGVudW0geyAKLSAgICAgICB2YWx1ZSA9ICgg
Ojpib29zdDo6ZGV0YWlsOjppc19jb252ZXJ0aWJsZV9iYXNpY19pbXBsPEZyb20sVG8+Ojp2YWx1
ZSAmJiAhIDo6Ym9vc3Q6OmlzX2FycmF5PFRvPjo6dmFsdWUgJiYgISA6OmJvb3N0Ojppc19mdW5j
dGlvbjxUbz46OnZhbHVlKSAKLSAgICB9OwotfTsKLSNlbGlmICFkZWZpbmVkKF9fQk9STEFORENf
XykgfHwgX19CT1JMQU5EQ19fID4gMHg1NTEKLXRlbXBsYXRlIDx0eXBlbmFtZSBGcm9tLCB0eXBl
bmFtZSBUbz4KLXN0cnVjdCBpc19jb252ZXJ0aWJsZV9pbXBsCi17Ci0gICBCT09TVF9TVEFUSUNf
Q09OU1RBTlQoYm9vbCwgdmFsdWUgPSAoIDo6Ym9vc3Q6OmRldGFpbDo6aXNfY29udmVydGlibGVf
YmFzaWNfaW1wbDxGcm9tLCBUbz46OnZhbHVlICYmICE6OmJvb3N0Ojppc19hcnJheTxUbz46OnZh
bHVlICYmICE6OmJvb3N0Ojppc19mdW5jdGlvbjxUbz46OnZhbHVlKSk7Ci19OwotI2VuZGlmCi0K
LXRlbXBsYXRlIDxib29sIHRyaXZpYWwxLCBib29sIHRyaXZpYWwyLCBib29sIGFic3RyYWN0X3Rh
cmdldD4KLXN0cnVjdCBpc19jb252ZXJ0aWJsZV9pbXBsX3NlbGVjdAotewotICAgdGVtcGxhdGUg
PGNsYXNzIEZyb20sIGNsYXNzIFRvPgotICAgc3RydWN0IHJlYmluZAotICAgewotICAgICAgdHlw
ZWRlZiBpc19jb252ZXJ0aWJsZV9pbXBsPEZyb20sIFRvPiB0eXBlOwotICAgfTsKLX07Ci0KLXRl
bXBsYXRlIDw+Ci1zdHJ1Y3QgaXNfY29udmVydGlibGVfaW1wbF9zZWxlY3Q8dHJ1ZSwgdHJ1ZSwg
ZmFsc2U+Ci17Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgRnJvbSwgY2xhc3MgVG8+Ci0gICBzdHJ1Y3Qg
cmViaW5kCi0gICB7Ci0gICAgICB0eXBlZGVmIHRydWVfdHlwZSB0eXBlOwotICAgfTsKLX07Ci0K
LXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaXNfY29udmVydGlibGVfaW1wbF9zZWxlY3Q8ZmFsc2UsIGZh
bHNlLCB0cnVlPgotewotICAgdGVtcGxhdGUgPGNsYXNzIEZyb20sIGNsYXNzIFRvPgotICAgc3Ry
dWN0IHJlYmluZAotICAgewotICAgICAgdHlwZWRlZiBmYWxzZV90eXBlIHR5cGU7Ci0gICB9Owot
fTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBpc19jb252ZXJ0aWJsZV9pbXBsX3NlbGVjdDx0cnVl
LCBmYWxzZSwgdHJ1ZT4KLXsKLSAgIHRlbXBsYXRlIDxjbGFzcyBGcm9tLCBjbGFzcyBUbz4KLSAg
IHN0cnVjdCByZWJpbmQKLSAgIHsKLSAgICAgIHR5cGVkZWYgZmFsc2VfdHlwZSB0eXBlOwotICAg
fTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGcm9tLCB0eXBlbmFtZSBUbz4KLXN0cnVjdCBp
c19jb252ZXJ0aWJsZV9pbXBsX2Rpc3BhdGNoX2Jhc2UKLXsKLSNpZiAhQk9PU1RfV09SS0FST1VO
RChfX0hQX2FDQywgPCA2MDcwMCkKLSAgIHR5cGVkZWYgaXNfY29udmVydGlibGVfaW1wbF9zZWxl
Y3Q8IAotICAgICAgOjpib29zdDo6aXNfYXJpdGhtZXRpYzxGcm9tPjo6dmFsdWUsIAotICAgICAg
Ojpib29zdDo6aXNfYXJpdGhtZXRpYzxUbz46OnZhbHVlLAotI2lmICFkZWZpbmVkKEJPT1NUX05P
X0lTX0FCU1RSQUNUKSAmJiAhZGVmaW5lZChCT09TVF9UVF9DWFgxMV9JU19DT05WRVJUSUJMRSkK
LSAgICAgIC8vIFdlIG5lZWQgdG8gZmlsdGVyIG91dCBhYnN0cmFjdCB0eXBlcywgb25seSBpZiB3
ZSBkb24ndCBoYXZlIGEgc3RyaWN0bHkgY29uZm9ybWluZyBDKysxMSB2ZXJzaW9uOgotICAgICAg
Ojpib29zdDo6aXNfYWJzdHJhY3Q8VG8+Ojp2YWx1ZQotI2Vsc2UKLSAgICAgIGZhbHNlCi0jZW5k
aWYKLSAgID4gc2VsZWN0b3I7Ci0jZWxzZQotICAgdHlwZWRlZiBpc19jb252ZXJ0aWJsZV9pbXBs
X3NlbGVjdDxmYWxzZSwgZmFsc2UsIGZhbHNlPiBzZWxlY3RvcjsKLSNlbmRpZgotICAgdHlwZWRl
ZiB0eXBlbmFtZSBzZWxlY3Rvcjo6dGVtcGxhdGUgcmViaW5kPEZyb20sIFRvPiBpc2NfYmluZGVy
OwotICAgdHlwZWRlZiB0eXBlbmFtZSBpc2NfYmluZGVyOjp0eXBlIHR5cGU7Ci19OwotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgRnJvbSwgdHlwZW5hbWUgVG8+Ci1zdHJ1Y3QgaXNfY29udmVydGlibGVf
aW1wbF9kaXNwYXRjaCAKLSAgIDogcHVibGljIGlzX2NvbnZlcnRpYmxlX2ltcGxfZGlzcGF0Y2hf
YmFzZTxGcm9tLCBUbz46OnR5cGUKLXt9OwotCi0vLwotLy8gTm93IGFkZCB0aGUgZnVsbCBhbmQg
cGFydGlhbCBzcGVjaWFsaXNhdGlvbnMKLS8vIGZvciB2b2lkIHR5cGVzLCB0aGVzZSBhcmUgY29t
bW9uIHRvIGFsbCB0aGUKLS8vIGltcGxlbWVudGF0aW9uIGFib3ZlOgotLy8KLSNpZm5kZWYgQk9P
U1RfTk9fQ1ZfVk9JRF9TUEVDSUFMSVpBVElPTlMKLQotdGVtcGxhdGUgPD4gc3RydWN0IGlzX2Nv
bnZlcnRpYmxlX2ltcGxfZGlzcGF0Y2g8dm9pZCwgdm9pZD4gOiBwdWJsaWMgdHJ1ZV90eXBle307
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfY29udmVydGlibGVfaW1wbF9kaXNwYXRjaDx2b2lkLCB2
b2lkIGNvbnN0PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19j
b252ZXJ0aWJsZV9pbXBsX2Rpc3BhdGNoPHZvaWQsIHZvaWQgY29uc3Qgdm9sYXRpbGU+IDogcHVi
bGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGxf
ZGlzcGF0Y2g8dm9pZCwgdm9pZCB2b2xhdGlsZT4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci0KLXRl
bXBsYXRlIDw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZV9pbXBsX2Rpc3BhdGNoPHZvaWQgY29uc3Qs
IHZvaWQ+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX2NvbnZl
cnRpYmxlX2ltcGxfZGlzcGF0Y2g8dm9pZCBjb25zdCwgdm9pZCBjb25zdD4gOiBwdWJsaWMgdHJ1
ZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfY29udmVydGlibGVfaW1wbF9kaXNwYXRj
aDx2b2lkIGNvbnN0LCB2b2lkIGNvbnN0IHZvbGF0aWxlPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsK
LXRlbXBsYXRlIDw+IHN0cnVjdCBpc19jb252ZXJ0aWJsZV9pbXBsX2Rpc3BhdGNoPHZvaWQgY29u
c3QsIHZvaWQgdm9sYXRpbGU+IDogcHVibGljIHRydWVfdHlwZXt9OwotCi10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgaXNfY29udmVydGlibGVfaW1wbF9kaXNwYXRjaDx2b2lkIGNvbnN0IHZvbGF0aWxlLCB2
b2lkPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19jb252ZXJ0
aWJsZV9pbXBsX2Rpc3BhdGNoPHZvaWQgY29uc3Qgdm9sYXRpbGUsIHZvaWQgY29uc3Q+IDogcHVi
bGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGxf
ZGlzcGF0Y2g8dm9pZCBjb25zdCB2b2xhdGlsZSwgdm9pZCBjb25zdCB2b2xhdGlsZT4gOiBwdWJs
aWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfY29udmVydGlibGVfaW1wbF9k
aXNwYXRjaDx2b2lkIGNvbnN0IHZvbGF0aWxlLCB2b2lkIHZvbGF0aWxlPiA6IHB1YmxpYyB0cnVl
X3R5cGV7fTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGxfZGlzcGF0
Y2g8dm9pZCB2b2xhdGlsZSwgdm9pZD4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgaXNfY29udmVydGlibGVfaW1wbF9kaXNwYXRjaDx2b2lkIHZvbGF0aWxlLCB2b2lk
IGNvbnN0PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19jb252
ZXJ0aWJsZV9pbXBsX2Rpc3BhdGNoPHZvaWQgdm9sYXRpbGUsIHZvaWQgY29uc3Qgdm9sYXRpbGU+
IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxl
X2ltcGxfZGlzcGF0Y2g8dm9pZCB2b2xhdGlsZSwgdm9pZCB2b2xhdGlsZT4gOiBwdWJsaWMgdHJ1
ZV90eXBle307Ci0KLSNlbHNlCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfY29udmVydGlibGVfaW1w
bF9kaXNwYXRjaDx2b2lkLCB2b2lkPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLSNlbmRpZiAvLyBC
T09TVF9OT19DVl9WT0lEX1NQRUNJQUxJWkFUSU9OUwotCi10ZW1wbGF0ZSA8Y2xhc3MgVG8+IHN0
cnVjdCBpc19jb252ZXJ0aWJsZV9pbXBsX2Rpc3BhdGNoPHZvaWQsIFRvPiA6IHB1YmxpYyBmYWxz
ZV90eXBle307Ci10ZW1wbGF0ZSA8Y2xhc3MgRnJvbT4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2lt
cGxfZGlzcGF0Y2g8RnJvbSwgdm9pZD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotCi0jaWZuZGVm
IEJPT1NUX05PX0NWX1ZPSURfU1BFQ0lBTElaQVRJT05TCi10ZW1wbGF0ZSA8Y2xhc3MgVG8+IHN0
cnVjdCBpc19jb252ZXJ0aWJsZV9pbXBsX2Rpc3BhdGNoPHZvaWQgY29uc3QsIFRvPiA6IHB1Ymxp
YyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8Y2xhc3MgRnJvbT4gc3RydWN0IGlzX2NvbnZlcnRp
YmxlX2ltcGxfZGlzcGF0Y2g8RnJvbSwgdm9pZCBjb25zdD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9
OwotdGVtcGxhdGUgPGNsYXNzIFRvPiBzdHJ1Y3QgaXNfY29udmVydGlibGVfaW1wbF9kaXNwYXRj
aDx2b2lkIGNvbnN0IHZvbGF0aWxlLCBUbz4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxh
dGUgPGNsYXNzIEZyb20+IHN0cnVjdCBpc19jb252ZXJ0aWJsZV9pbXBsX2Rpc3BhdGNoPEZyb20s
IHZvaWQgY29uc3Qgdm9sYXRpbGU+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDxj
bGFzcyBUbz4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGxfZGlzcGF0Y2g8dm9pZCB2b2xhdGls
ZSwgVG8+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDxjbGFzcyBGcm9tPiBzdHJ1
Y3QgaXNfY29udmVydGlibGVfaW1wbF9kaXNwYXRjaDxGcm9tLCB2b2lkIHZvbGF0aWxlPiA6IHB1
YmxpYyBmYWxzZV90eXBle307Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLXRl
bXBsYXRlIDxjbGFzcyBGcm9tLCBjbGFzcyBUbz4gCi1zdHJ1Y3QgaXNfY29udmVydGlibGUgOiBw
dWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgOjpib29zdDo6ZGV0YWlsOjppc19jb252ZXJ0
aWJsZV9pbXBsX2Rpc3BhdGNoPEZyb20sIFRvPjo6dmFsdWU+IHt9OwotCi0jZWxzZQotCi10ZW1w
bGF0ZSA8Y2xhc3MgRnJvbSwgY2xhc3MgVG8+Ci1zdHJ1Y3QgaXNfY29udmVydGlibGUgOiBwdWJs
aWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgQk9PU1RfSVNfQ09OVkVSVElCTEUoRnJvbSwgVG8p
PiB7fTsKLQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09T
VF9UVF9JU19DT05WRVJUSUJMRV9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvcHlfYXNzaWdu
YWJsZS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBl
X3RyYWl0cy9pc19jb3B5X2Fzc2lnbmFibGUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3NmFmZGRhNWRkY2I0YjVlNzk0YWVkMjRkYzA0YzgzN2FiY2NiN2NkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvcHlfYXNzaWduYWJsZS5ocHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLy8gIChDKSBDb3B5cmlnaHQgSW9uIEdh
enRhbmFnYSAyMDE0LgotLy8KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9u
IGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24g
MS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0v
LyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0
dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNp
b24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfQ09QWV9B
U1NJR05BQkxFX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9JU19DT1BZX0FTU0lHTkFC
TEVfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC95ZXNfbm9fdHlwZS5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvaXNfYmFzZV9hbmRfZGVyaXZlZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
bm9uY29weWFibGUuaHBwPgotCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfREVMRVRFRF9G
VU5DVElPTlMpICYmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX0RFQ0xUWVBFKSBcCi0gICAmJiAh
ZGVmaW5lZChCT09TVF9JTlRFTF9DWFhfVkVSU0lPTikgJiYgXAotICAgICAgIShkZWZpbmVkKEJP
T1NUX01TVkMpICYmIF9NU0NfVkVSID09IDE4MDApCi0jZGVmaW5lIEJPT1NUX1RUX0NYWDExX0lT
X0NPUFlfQVNTSUdOQUJMRQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2RlY2x2YWwuaHBw
PgotI2Vsc2UKLSAgIC8vRm9yIGNvbXBpbGVycyB3aXRob3V0IGRlY2x0eXBlCi0gICAjaW5jbHVk
ZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBwPgotICAgI2luY2x1ZGUgPGJvb3N0L3R5
cGVfdHJhaXRzL2lzX2FycmF5LmhwcD4KLSAgICNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9h
ZGRfcmVmZXJlbmNlLmhwcD4KLSAgICNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yZW1vdmVf
cmVmZXJlbmNlLmhwcD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3QgewotCi1uYW1lc3BhY2Ug
ZGV0YWlsewotCi10ZW1wbGF0ZSA8Ym9vbCBEZXJpdmVkRnJvbU5vbmNvcHlhYmxlLCBjbGFzcyBU
Pgotc3RydWN0IGlzX2NvcHlfYXNzaWduYWJsZV9pbXBsMiB7Ci0KLS8vIEludGVsIGNvbXBpbGVy
IGhhcyBwcm9ibGVtcyB3aXRoIFNGSU5BRSBmb3IgY29weSBjb25zdHJ1Y3RvcnMgYW5kIGRlbGV0
ZWQgZnVuY3Rpb25zOgotLy8KLS8vIGVycm9yOiBmdW5jdGlvbiAqZnVuY3Rpb25fbmFtZSogY2Fu
bm90IGJlIHJlZmVyZW5jZWQgLS0gaXQgaXMgYSBkZWxldGVkIGZ1bmN0aW9uCi0vLyBzdGF0aWMg
Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSB0ZXN0KFQxJiwgZGVjbHR5cGUoVDEoYm9vc3Q6
OmRlY2x2YWw8VDEmPigpKSkqID0gMCk7Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAKLS8vCi0vLyBNU1ZDIDEyLjAgKFZpc3VhbCAy
MDEzKSBoYXMgcHJvYmxlbXMgd2hlbiB0aGUgY29weSBjb25zdHJ1Y3RvciBoYXMgYmVlbiBkZWxl
dGVkLiBTZWU6Ci0vLyBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9WaXN1YWxTdHVkaW8v
ZmVlZGJhY2svZGV0YWlscy84MDAzMjgvc3RkLWlzLWNvcHktY29uc3RydWN0aWJsZS1pcy1icm9r
ZW4KLSNpZiBkZWZpbmVkKEJPT1NUX1RUX0NYWDExX0lTX0NPUFlfQVNTSUdOQUJMRSkKLSAgICB0
eXBlZGVmIGJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUgeWVzX3R5cGU7Ci0gICAgdHlwZWRl
ZiBib29zdDo6dHlwZV90cmFpdHM6Om5vX3R5cGUgIG5vX3R5cGU7Ci0KLSAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVT4KLSAgICBzdGF0aWMgZGVjbHR5cGUoOjpib29zdDo6ZGVjbHZhbDxVJj4oKSA9IDo6
Ym9vc3Q6OmRlY2x2YWw8Y29uc3QgVSY+KCksIHllc190eXBlKCkgKSB0ZXN0KGludCk7Ci0KLSAg
ICB0ZW1wbGF0ZSA8Y2xhc3M+Ci0gICAgc3RhdGljIG5vX3R5cGUgdGVzdCguLi4pOwotCi0gICAg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YodGVzdDxUPigwKSkgPT0gc2l6ZW9mKHll
c190eXBlKTsKLQotI2Vsc2UKLSAgICBzdGF0aWMgQk9PU1RfREVEVUNFRF9UWVBFTkFNRSBib29z
dDo6YWRkX3JlZmVyZW5jZTxUPjo6dHlwZSBwcm9kdWNlKCk7Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVDE+Ci0gICAgc3RhdGljIGJvb3N0Ojp0eXBlX3RyYWl0czo6bm9fdHlwZSB0ZXN0KFQxJiwg
dHlwZW5hbWUgVDE6OmJvb3N0X21vdmVfbm9fY29weV9jb25zdHJ1Y3Rvcl9vcl9hc3NpZ24qID0g
MCk7Ci0KLSAgICBzdGF0aWMgYm9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSB0ZXN0KC4uLik7
Ci0gICAgLy8gSWYgeW91IHNlZSBlcnJvcnMgbGlrZSB0aGlzOgotICAgIC8vCi0gICAgLy8gICAg
ICBgJ1Q6Om9wZXJhdG9yPShjb25zdCBUJiknIGlzIHByaXZhdGVgCi0gICAgLy8gICAgICBgYm9v
c3QvdHlwZV90cmFpdHMvaXNfY29weV9hc3NpZ25hYmxlLmhwcDpOTjpNOiBlcnJvcjogd2l0aGlu
IHRoaXMgY29udGV4dGAKLSAgICAvLwotICAgIC8vIHRoZW4geW91IGFyZSB0cnlpbmcgdG8gY2Fs
bCB0aGF0IG1hY3JvIGZvciBhIHN0cnVjdHVyZSBkZWZpbmVkIGxpa2UgdGhhdDoKLSAgICAvLwot
ICAgIC8vICAgICAgc3RydWN0IFQgewotICAgIC8vICAgICAgICAgIC4uLgotICAgIC8vICAgICAg
cHJpdmF0ZToKLSAgICAvLyAgICAgICAgICBUICYgb3BlcmF0b3I9KGNvbnN0IFQgJik7Ci0gICAg
Ly8gICAgICAgICAgLi4uCi0gICAgLy8gICAgICB9OwotICAgIC8vCi0gICAgLy8gVG8gZml4IHRo
YXQgeW91IG11c3QgbW9kaWZ5IHlvdXIgc3RydWN0dXJlOgotICAgIC8vCi0gICAgLy8gICAgICAv
LyBDKyswMyBhbmQgQysrMTEgdmVyc2lvbgotICAgIC8vICAgICAgc3RydWN0IFQ6IHByaXZhdGUg
Ym9vc3Q6Om5vbmNvcHlhYmxlIHsKLSAgICAvLyAgICAgICAgICAuLi4KLSAgICAvLyAgICAgIHBy
aXZhdGU6Ci0gICAgLy8gICAgICAgICAgVCAmIG9wZXJhdG9yPShjb25zdCBUICYpOwotICAgIC8v
ICAgICAgICAgIC4uLgotICAgIC8vICAgICAgfTsKLSAgICAvLwotICAgIC8vICAgICAgLy8gQysr
MTEgdmVyc2lvbgotICAgIC8vICAgICAgc3RydWN0IFQgewotICAgIC8vICAgICAgICAgIC4uLgot
ICAgIC8vICAgICAgcHJpdmF0ZToKLSAgICAvLyAgICAgICAgICBUJiBvcGVyYXRvcj0oY29uc3Qg
VCAmKSA9IGRlbGV0ZTsKLSAgICAvLyAgICAgICAgICAuLi4KLSAgICAvLyAgICAgIH07Ci0gICAg
Qk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gKAotICAgICAgICAgICAgc2l6ZW9m
KHRlc3QocHJvZHVjZSgpKSkgPT0gc2l6ZW9mKGJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUp
Ci0gICAgKSk7Ci0gICAjZW5kaWYKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlz
X2NvcHlfYXNzaWduYWJsZV9pbXBsMjx0cnVlLCBUPiB7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGJvb2wsIHZhbHVlID0gZmFsc2UpOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1
Y3QgaXNfY29weV9hc3NpZ25hYmxlX2ltcGwgewotCi0jaWYgIWRlZmluZWQoQk9PU1RfVFRfQ1hY
MTFfSVNfQ09QWV9BU1NJR05BQkxFKQotICAgIC8vRm9yIGNvbXBpbGVycyB3aXRob3V0IGRlY2x0
eXBlLCBhdCBsZWFzdCByZXR1cm4gZmFsc2Ugb24gY29uc3QgdHlwZXMsIGFycmF5cwotICAgIC8v
dHlwZXMgZGVyaXZlZCBmcm9tIGJvb3N0Ojpub25jb3B5YWJsZSBhbmQgdHlwZXMgZGVmaW5lZCBh
cyBCT09TVF9NT1ZFQUJMRV9CVVRfTk9UX0NPUFlBQkxFCi0gICAgdHlwZWRlZiBCT09TVF9ERURV
Q0VEX1RZUEVOQU1FIGJvb3N0OjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlIHVucmVmZXJlbmNl
ZF90OwotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9ICgKLSAgICAgICAg
Ym9vc3Q6OmRldGFpbDo6aXNfY29weV9hc3NpZ25hYmxlX2ltcGwyPAotICAgICAgICAgICAgYm9v
c3Q6OmlzX2Jhc2VfYW5kX2Rlcml2ZWQ8Ym9vc3Q6Om5vbmNvcHlhYmxlLCBUPjo6dmFsdWUKLSAg
ICAgICAgICAgIHx8IGJvb3N0Ojppc19jb25zdDx1bnJlZmVyZW5jZWRfdD46OnZhbHVlIHx8IGJv
b3N0Ojppc19hcnJheTx1bnJlZmVyZW5jZWRfdD46OnZhbHVlCi0gICAgICAgICAgICAsVAotICAg
ICAgICA+Ojp2YWx1ZQotICAgICkpOwotICAgICNlbHNlCi0gICAgQk9PU1RfU1RBVElDX0NPTlNU
QU5UKGJvb2wsIHZhbHVlID0gKAotICAgICAgICBib29zdDo6ZGV0YWlsOjppc19jb3B5X2Fzc2ln
bmFibGVfaW1wbDI8Ci0gICAgICAgICAgICBib29zdDo6aXNfYmFzZV9hbmRfZGVyaXZlZDxib29z
dDo6bm9uY29weWFibGUsIFQ+Ojp2YWx1ZSxUCi0gICAgICAgID46OnZhbHVlCi0gICAgKSk7Ci0g
ICAgI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBpc19jb3B5X2Fzc2lnbmFibGUgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8
Ym9vbCwgOjpib29zdDo6ZGV0YWlsOjppc19jb3B5X2Fzc2lnbmFibGVfaW1wbDxUPjo6dmFsdWU+
e307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfY29weV9hc3NpZ25hYmxlPHZvaWQ+IDogcHVibGlj
IGZhbHNlX3R5cGV7fTsKLSNpZm5kZWYgQk9PU1RfTk9fQ1ZfVk9JRF9TUEVDSUFMSVpBVElPTlMK
LXRlbXBsYXRlIDw+IHN0cnVjdCBpc19jb3B5X2Fzc2lnbmFibGU8dm9pZCBjb25zdD4gOiBwdWJs
aWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX2NvcHlfYXNzaWduYWJsZTx2
b2lkIGNvbnN0IHZvbGF0aWxlPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgaXNfY29weV9hc3NpZ25hYmxlPHZvaWQgdm9sYXRpbGU+IDogcHVibGljIGZhbHNlX3R5
cGV7fTsKLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1Rf
VFRfSVNfQ09QWV9BU1NJR05BQkxFX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29weV9jb25z
dHJ1Y3RpYmxlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2lzX2NvcHlfY29uc3RydWN0aWJsZS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGM2ODgyNjQzMWIwN2MwMzNlYWRmNmZmNjk4MzQyZDhmYTQxY2RlNTAuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29weV9jb25zdHJ1
Y3RpYmxlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vLyAgKEMpIENvcHly
aWdodCBBbnRvbnkgUG9sdWtoaW4gMjAxMy4KLS8vCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5k
IGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwK
LS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQg
b3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0v
LwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0
IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NU
X1RUX0lTX0NPUFlfQ09OU1RSVUNUSUJMRV9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRf
SVNfQ09QWV9DT05TVFJVQ1RJQkxFX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Ym9vc3QvY29u
ZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+Ci0KLSNpZiAh
ZGVmaW5lZChCT09TVF9OT19DWFgxMV9WQVJJQURJQ19URU1QTEFURVMpICYmICFkZWZpbmVkKEJP
T1NUX05PX0NYWDExX0RFQ0xUWVBFKSAmJiAhQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8
IDE4MDApICYmICFCT09TVF9XT1JLQVJPVU5EKEJPT1NUX0dDQ19WRVJTSU9OLCA8IDQwOTAwKQot
Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3RydWN0aWJsZS5ocHA+Ci0KLSNp
ZiAhQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8PSAxODAwKQotCi1uYW1lc3BhY2UgYm9v
c3QgewotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2NvcHlfY29uc3RydWN0aWJsZSA6
IHB1YmxpYyBib29zdDo6aXNfY29uc3RydWN0aWJsZTxULCBjb25zdCBUJj57fTsKLQotdGVtcGxh
dGUgPD4gc3RydWN0IGlzX2NvcHlfY29uc3RydWN0aWJsZTx2b2lkPiA6IHB1YmxpYyBmYWxzZV90
eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfY29weV9jb25zdHJ1Y3RpYmxlPHZvaWQgY29u
c3Q+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19jb3B5X2Nv
bnN0cnVjdGlibGU8dm9pZCBjb25zdCB2b2xhdGlsZT4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9Owot
dGVtcGxhdGUgPD4gc3RydWN0IGlzX2NvcHlfY29uc3RydWN0aWJsZTx2b2lkIHZvbGF0aWxlPiA6
IHB1YmxpYyBmYWxzZV90eXBle307Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbHNlCi0v
LwotLy8gU3BlY2lhbCB2ZXJzaW9uIGZvciBWQzEyIHdoaWNoIGhhcyBhIHByb2JsZW0gd2hlbiBh
IGJhc2UgY2xhc3MgKHN1Y2ggYXMgbm9uX2NvcHlhYmxlKSBoYXMgYSBkZWxldGVkCi0vLyBjb3B5
IGNvbnN0cnVjdG9yLiAgSW4gdGhpcyBjYXNlIHRoZSBjb21waWxlciB0aGlua3MgdGhlcmUgcmVh
bGx5IGlzIGEgY29weS1jb25zdHJ1Y3RvciBhbmQgdHJpZXMgdG8KLS8vIGluc3RhbnRpYXRlIHRo
ZSBkZWxldGVkIG1lbWJlci4gIHN0ZDo6aXNfY29weV9jb25zdHJ1Y3RpYmxlIGhhcyB0aGUgc2Ft
ZSBpc3N1ZSAob3IgYXQgbGVhc3QgcmV0dXJucwotLy8gYW4gaW5jb3JyZWN0IHZhbHVlLCB3aGlj
aCBqdXN0IGRlZmVycyB0aGUgaXNzdWUgaW50byB0aGUgdXNlcnMgY29kZSkgYXMgd2VsbC4gIFdl
IGNhbiBhdCBsZWFzdCBmaXgKLS8vIGJvb3N0Ojpub25fY29weWFibGUgYXMgYSBiYXNlIGNsYXNz
IGFzIGEgc3BlY2lhbCBjYXNlOgotLy8KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19i
YXNlX2FuZF9kZXJpdmVkLmhwcD4KLSNpbmNsdWRlIDxib29zdC9ub25jb3B5YWJsZS5ocHA+Ci0K
LW5hbWVzcGFjZSBib29zdCB7Ci0KLSAgIG5hbWVzcGFjZSBkZXRhaWwKLSAgIHsKLQotICAgICAg
dGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgYj4gc3RydWN0IGlzX2NvcHlfY29uc3RydWN0aWJsZV9p
bXAgOiBwdWJsaWMgYm9vc3Q6OmlzX2NvbnN0cnVjdGlibGU8VCwgY29uc3QgVCY+e307Ci0gICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2NvcHlfY29uc3RydWN0aWJsZV9pbXA8VCwg
dHJ1ZT4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotCi0gICB9Ci0KLSAgIHRlbXBsYXRlIDxjbGFz
cyBUPiBzdHJ1Y3QgaXNfY29weV9jb25zdHJ1Y3RpYmxlIDogcHVibGljIGRldGFpbDo6aXNfY29w
eV9jb25zdHJ1Y3RpYmxlX2ltcDxULCBpc19iYXNlX2FuZF9kZXJpdmVkPGJvb3N0Ojpub25jb3B5
YWJsZSwgVD46OnZhbHVlPnt9OwotCi0gICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfY29weV9jb25z
dHJ1Y3RpYmxlPHZvaWQ+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLSAgIHRlbXBsYXRlIDw+IHN0
cnVjdCBpc19jb3B5X2NvbnN0cnVjdGlibGU8dm9pZCBjb25zdD4gOiBwdWJsaWMgZmFsc2VfdHlw
ZXt9OwotICAgdGVtcGxhdGUgPD4gc3RydWN0IGlzX2NvcHlfY29uc3RydWN0aWJsZTx2b2lkIGNv
bnN0IHZvbGF0aWxlPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci0gICB0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgaXNfY29weV9jb25zdHJ1Y3RpYmxlPHZvaWQgdm9sYXRpbGU+IDogcHVibGljIGZhbHNlX3R5
cGV7fTsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmCi0KLSNlbHNlCi0KLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9kZXRhaWwveWVzX25vX3R5cGUuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Jhc2VfYW5kX2Rlcml2ZWQuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2FkZF9yZWZlcmVuY2UuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2lzX3J2YWx1ZV9yZWZlcmVuY2UuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2RlY2x2YWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5Lmhw
cD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9kZWNsdmFsLmhwcD4KLSNpbmNsdWRlIDxi
b29zdC9ub25jb3B5YWJsZS5ocHA+Ci0KLSNpZmRlZiBCT09TVF9NU1ZDCi0jcHJhZ21hIHdhcm5p
bmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQxODEpCi0jZW5kaWYKLQotbmFtZXNw
YWNlIGJvb3N0IHsKLQotICAgbmFtZXNwYWNlIGRldGFpbHsKLQotICAgICAgdGVtcGxhdGUgPGJv
b2wgRGVyaXZlZEZyb21Ob25jb3B5YWJsZSwgY2xhc3MgVD4KLSAgICAgIHN0cnVjdCBpc19jb3B5
X2NvbnN0cnVjdGlibGVfaW1wbDIgewotCi0gICAgICAgICAvLyBJbnRlbCBjb21waWxlciBoYXMg
cHJvYmxlbXMgd2l0aCBTRklOQUUgZm9yIGNvcHkgY29uc3RydWN0b3JzIGFuZCBkZWxldGVkIGZ1
bmN0aW9uczoKLSAgICAgICAgIC8vCi0gICAgICAgICAvLyBlcnJvcjogZnVuY3Rpb24gKmZ1bmN0
aW9uX25hbWUqIGNhbm5vdCBiZSByZWZlcmVuY2VkIC0tIGl0IGlzIGEgZGVsZXRlZCBmdW5jdGlv
bgotICAgICAgICAgLy8gc3RhdGljIGJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUgdGVzdChU
MSYsIGRlY2x0eXBlKFQxKGJvb3N0OjpkZWNsdmFsPFQxJj4oKSkpKiA9IDApOwotICAgICAgICAg
Ly8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF4gCi0gICAgICAgICAvLwotICAgICAgICAgLy8gTVNWQyAxMi4wIChWaXN1YWwgMjAxMykgaGFz
IHByb2JsZW1zIHdoZW4gdGhlIGNvcHkgY29uc3RydWN0b3IgaGFzIGJlZW4gZGVsZXRlZC4gU2Vl
OgotICAgICAgICAgLy8gaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vVmlzdWFsU3R1ZGlv
L2ZlZWRiYWNrL2RldGFpbHMvODAwMzI4L3N0ZC1pcy1jb3B5LWNvbnN0cnVjdGlibGUtaXMtYnJv
a2VuCi0jaWYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfREVMRVRFRF9GVU5DVElPTlMpICYmICFk
ZWZpbmVkKEJPT1NUX0lOVEVMX0NYWF9WRVJTSU9OKSAmJiAhKGRlZmluZWQoQk9PU1RfTVNWQykg
JiYgX01TQ19WRVIgPT0gMTgwMCkKLQotI2lmZGVmIEJPT1NUX05PX0NYWDExX0RFQ0xUWVBFCi0g
ICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVDE+Ci0gICAgICAgICBzdGF0aWMgYm9vc3Q6OnR5cGVf
dHJhaXRzOjp5ZXNfdHlwZSB0ZXN0KGNvbnN0IFQxJiwgYm9vc3Q6Om1wbDo6aW50XzxzaXplb2Yo
VDEoYm9vc3Q6OmRlY2x2YWw8Y29uc3QgVDEmPigpKSk+KiA9IDApOwotI2Vsc2UKLSAgICAgICAg
IHRlbXBsYXRlIDxjbGFzcyBUMT4KLSAgICAgICAgIHN0YXRpYyBib29zdDo6dHlwZV90cmFpdHM6
Onllc190eXBlIHRlc3QoY29uc3QgVDEmLCBkZWNsdHlwZShUMShib29zdDo6ZGVjbHZhbDxjb25z
dCBUMSY+KCkpKSogPSAwKTsKLSNlbmRpZgotCi0gICAgICAgICBzdGF0aWMgYm9vc3Q6OnR5cGVf
dHJhaXRzOjpub190eXBlIHRlc3QoLi4uKTsKLSNlbHNlCi0gICAgICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVDE+Ci0gICAgICAgICBzdGF0aWMgYm9vc3Q6OnR5cGVfdHJhaXRzOjpub190eXBlIHRlc3Qo
Y29uc3QgVDEmLCB0eXBlbmFtZSBUMTo6Ym9vc3RfbW92ZV9ub19jb3B5X2NvbnN0cnVjdG9yX29y
X2Fzc2lnbiogPSAwKTsKLSAgICAgICAgIHN0YXRpYyBib29zdDo6dHlwZV90cmFpdHM6Onllc190
eXBlIHRlc3QoLi4uKTsKLSNlbmRpZgotCi0gICAgICAgICAvLyBJZiB5b3Ugc2VlIGVycm9ycyBs
aWtlIHRoaXM6Ci0gICAgICAgICAvLwotICAgICAgICAgLy8gICAgICBgJ1Q6OlQoY29uc3QgVCYp
JyBpcyBwcml2YXRlYAotICAgICAgICAgLy8gICAgICBgYm9vc3QvdHlwZV90cmFpdHMvaXNfY29w
eV9jb25zdHJ1Y3RpYmxlLmhwcDo2ODo1OiBlcnJvcjogd2l0aGluIHRoaXMgY29udGV4dGAKLSAg
ICAgICAgIC8vCi0gICAgICAgICAvLyB0aGVuIHlvdSBhcmUgdHJ5aW5nIHRvIGNhbGwgdGhhdCBt
YWNybyBmb3IgYSBzdHJ1Y3R1cmUgZGVmaW5lZCBsaWtlIHRoYXQ6Ci0gICAgICAgICAvLwotICAg
ICAgICAgLy8gICAgICBzdHJ1Y3QgVCB7Ci0gICAgICAgICAvLyAgICAgICAgICAuLi4KLSAgICAg
ICAgIC8vICAgICAgcHJpdmF0ZToKLSAgICAgICAgIC8vICAgICAgICAgIFQoY29uc3QgVCAmKTsK
LSAgICAgICAgIC8vICAgICAgICAgIC4uLgotICAgICAgICAgLy8gICAgICB9OwotICAgICAgICAg
Ly8KLSAgICAgICAgIC8vIFRvIGZpeCB0aGF0IHlvdSBtdXN0IG1vZGlmeSB5b3VyIHN0cnVjdHVy
ZToKLSAgICAgICAgIC8vCi0gICAgICAgICAvLyAgICAgIC8vIEMrKzAzIGFuZCBDKysxMSB2ZXJz
aW9uCi0gICAgICAgICAvLyAgICAgIHN0cnVjdCBUOiBwcml2YXRlIGJvb3N0Ojpub25jb3B5YWJs
ZSB7Ci0gICAgICAgICAvLyAgICAgICAgICAuLi4KLSAgICAgICAgIC8vICAgICAgcHJpdmF0ZToK
LSAgICAgICAgIC8vICAgICAgICAgIFQoY29uc3QgVCAmKTsKLSAgICAgICAgIC8vICAgICAgICAg
IC4uLgotICAgICAgICAgLy8gICAgICB9OwotICAgICAgICAgLy8KLSAgICAgICAgIC8vICAgICAg
Ly8gQysrMTEgdmVyc2lvbgotICAgICAgICAgLy8gICAgICBzdHJ1Y3QgVCB7Ci0gICAgICAgICAv
LyAgICAgICAgICAuLi4KLSAgICAgICAgIC8vICAgICAgcHJpdmF0ZToKLSAgICAgICAgIC8vICAg
ICAgICAgIFQoY29uc3QgVCAmKSA9IGRlbGV0ZTsKLSAgICAgICAgIC8vICAgICAgICAgIC4uLgot
ICAgICAgICAgLy8gICAgICB9OwotICAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2ws
IHZhbHVlID0gKAotICAgICAgICAgICAgc2l6ZW9mKHRlc3QoCi0gICAgICAgICAgICBib29zdDo6
ZGVjbHZhbDxCT09TVF9ERURVQ0VEX1RZUEVOQU1FIGJvb3N0OjphZGRfcmVmZXJlbmNlPFQgY29u
c3Q+Ojp0eXBlPigpCi0gICAgICAgICAgICApKSA9PSBzaXplb2YoYm9vc3Q6OnR5cGVfdHJhaXRz
Ojp5ZXNfdHlwZSkKLSAgICAgICAgICAgICYmCi0gICAgICAgICAgICAhYm9vc3Q6OmlzX3J2YWx1
ZV9yZWZlcmVuY2U8VD46OnZhbHVlCi0gICAgICAgICAgICAmJiAhYm9vc3Q6OmlzX2FycmF5PFQ+
Ojp2YWx1ZQotICAgICAgICAgICAgKSk7Ci0gICAgICB9OwotCi0gICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVD4KLSAgICAgIHN0cnVjdCBpc19jb3B5X2NvbnN0cnVjdGlibGVfaW1wbDI8dHJ1ZSwgVD4g
ewotICAgICAgICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gZmFsc2UpOwot
ICAgICAgfTsKLQotICAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgICBzdHJ1Y3QgaXNfY29w
eV9jb25zdHJ1Y3RpYmxlX2ltcGwgewotCi0gICAgICAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQo
Ym9vbCwgdmFsdWUgPSAoCi0gICAgICAgICAgICBib29zdDo6ZGV0YWlsOjppc19jb3B5X2NvbnN0
cnVjdGlibGVfaW1wbDI8Ci0gICAgICAgICAgICBib29zdDo6aXNfYmFzZV9hbmRfZGVyaXZlZDxi
b29zdDo6bm9uY29weWFibGUsIFQ+Ojp2YWx1ZSwKLSAgICAgICAgICAgIFQKLSAgICAgICAgICAg
ID46OnZhbHVlCi0gICAgICAgICAgICApKTsKLSAgICAgIH07Ci0KLSAgIH0gLy8gbmFtZXNwYWNl
IGRldGFpbAotCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2NvcHlfY29uc3RydWN0
aWJsZSA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCA6OmJvb3N0OjpkZXRhaWw6Omlz
X2NvcHlfY29uc3RydWN0aWJsZV9pbXBsPFQ+Ojp2YWx1ZT57fTsKLSAgIHRlbXBsYXRlIDw+IHN0
cnVjdCBpc19jb3B5X2NvbnN0cnVjdGlibGU8dm9pZD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9Owot
I2lmbmRlZiBCT09TVF9OT19DVl9WT0lEX1NQRUNJQUxJWkFUSU9OUwotICAgdGVtcGxhdGUgPD4g
c3RydWN0IGlzX2NvcHlfY29uc3RydWN0aWJsZTx2b2lkIGNvbnN0PiA6IHB1YmxpYyBmYWxzZV90
eXBle307Ci0gICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfY29weV9jb25zdHJ1Y3RpYmxlPHZvaWQg
dm9sYXRpbGU+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLSAgIHRlbXBsYXRlIDw+IHN0cnVjdCBp
c19jb3B5X2NvbnN0cnVjdGlibGU8dm9pZCBjb25zdCB2b2xhdGlsZT4gOiBwdWJsaWMgZmFsc2Vf
dHlwZXt9OwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNpZmRlZiBCT09TVF9N
U1ZDCi0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8g
Qk9PU1RfVFRfSVNfQ09QWV9DT05TVFJVQ1RJQkxFX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNf
ZGVmYXVsdF9jb25zdHJ1Y3RpYmxlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2RlZmF1bHRfY29uc3RydWN0aWJsZS5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNWQ3NmEyMmQ1Nzk2OGQzOTdkMTZjNjBmMzg3
MDg4NmIyOGQ5MTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMv
aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAg
QEAKLQotLy8gIChDKSBDb3B5cmlnaHQgSm9obiBNYWRkb2NrIDIwMTUuCi0vLyAgVXNlLCBtb2Rp
ZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdh
cmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0Vf
MV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJh
aXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0j
aWZuZGVmIEJPT1NUX1RUX0lTX0RFRkFVTFRfQ09OU1RSVUNUSUJMRV9IUFBfSU5DTFVERUQKLSNk
ZWZpbmUgQk9PU1RfVFRfSVNfREVGQVVMVF9DT05TVFJVQ1RJQkxFX0hQUF9JTkNMVURFRAotCi0j
aW5jbHVkZSA8Y3N0ZGRlZj4gLy8gc2l6ZV90Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
aW50ZWdyYWxfY29uc3RhbnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJvdW5k
LmhwcD4KLQotI2lmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfR0NDX1ZFUlNJT04sIDwgNDA3MDAp
Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfYWJzdHJhY3QuaHBwPgotI2VuZGlmCi0K
LSNpZiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9ERUNMVFlQRSkgJiYgIUJPT1NUX1dPUktBUk9V
TkQoQk9PU1RfTVNWQywgPCAxODAwKSAmJiAhQk9PU1RfV09SS0FST1VORChCT09TVF9HQ0NfVkVS
U0lPTiwgPCA0MDUwMCkKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC95ZXNf
bm9fdHlwZS5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdHsKLQotICAgbmFtZXNwYWNlIGRldGFpbHsK
LQotICAgICAgc3RydWN0IGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZV9pbXAKLSAgICAgIHsKLSAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgPSBkZWNsdHlwZShfVHAoKSk+
Ci0gICAgICAgICBzdGF0aWMgYm9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSB0ZXN0KGludCk7
Ci0KLSAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lPgotICAgICAgICAgc3RhdGljIGJvb3N0Ojp0
eXBlX3RyYWl0czo6bm9fdHlwZSB0ZXN0KC4uLik7Ci0gICAgICB9OwotI2lmIEJPT1NUX1dPUktB
Uk9VTkQoQk9PU1RfR0NDX1ZFUlNJT04sIDwgNDA3MDApCi0gICAgICB0ZW1wbGF0ZTxjbGFzcyBU
LCBib29sIGI+IAotICAgICAgc3RydWN0IGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZV9hYnN0cmFj
dF9maWx0ZXIKLSAgICAgIHsKLSAgICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHNp
emVvZihpc19kZWZhdWx0X2NvbnN0cnVjdGlibGVfaW1wOjp0ZXN0PFQ+KDApKSA9PSBzaXplb2Yo
Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSk7Ci0gICAgICB9OwotICAgICAgdGVtcGxhdGU8
Y2xhc3MgVD4gCi0gICAgICBzdHJ1Y3QgaXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlX2Fic3RyYWN0
X2ZpbHRlcjxULCB0cnVlPgotICAgICAgewotICAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gZmFsc2U7Ci0gICAgICB9OwotI2VuZGlmCi0gICB9Ci0KLSNpZiBCT09TVF9XT1JLQVJP
VU5EKEJPT1NUX0dDQ19WRVJTSU9OLCA8IDQwNzAwKQotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0
cnVjdCBpc19kZWZhdWx0X2NvbnN0cnVjdGlibGUgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8
Ym9vbCwgZGV0YWlsOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGVfYWJzdHJhY3RfZmlsdGVyPFQs
IGJvb3N0Ojppc19hYnN0cmFjdDxUPjo6dmFsdWU+Ojp2YWx1ZT57fTsKLSNlbHNlCi0gICB0ZW1w
bGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZSA6IHB1YmxpYyBp
bnRlZ3JhbF9jb25zdGFudDxib29sLCBzaXplb2YoZGV0YWlsOjppc19kZWZhdWx0X2NvbnN0cnVj
dGlibGVfaW1wOjp0ZXN0PFQ+KDApKSA9PSBzaXplb2YoYm9vc3Q6OnR5cGVfdHJhaXRzOjp5ZXNf
dHlwZSk+e307Ci0jZW5kaWYKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPiBz
dHJ1Y3QgaXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPFRbTl0+IDogcHVibGljIGlzX2RlZmF1bHRf
Y29uc3RydWN0aWJsZTxUPnt9OwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19kZWZh
dWx0X2NvbnN0cnVjdGlibGU8VFtdPiA6IHB1YmxpYyBpc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8
VD57fTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfZGVmYXVsdF9jb25zdHJ1Y3Rp
YmxlPFQmPiA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBmYWxzZT57fTsKLSNpZiAh
ZGVmaW5lZChCT09TVF9OT19DWFgxMV9SVkFMVUVfUkVGRVJFTkNFUykgCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4gc3RydWN0IGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxUJiY+IDogcHVibGljIGlu
dGVncmFsX2NvbnN0YW50PGJvb2wsIGZhbHNlPnt9OwotI2VuZGlmCi0gICB0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgaXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPHZvaWQ+IDogcHVibGljIGludGVncmFsX2Nv
bnN0YW50PGJvb2wsIGZhbHNlPnt9OwotICAgdGVtcGxhdGUgPD4gc3RydWN0IGlzX2RlZmF1bHRf
Y29uc3RydWN0aWJsZTx2b2lkIGNvbnN0PiA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29s
LCBmYWxzZT57fTsKLSAgIHRlbXBsYXRlIDw+IHN0cnVjdCBpc19kZWZhdWx0X2NvbnN0cnVjdGli
bGU8dm9pZCB2b2xhdGlsZT4gOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgZmFsc2U+
e307Ci0gICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPHZvaWQg
Y29uc3Qgdm9sYXRpbGU+IDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIGZhbHNlPnt9
OwotCi0jZWxzZQotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfcG9kLmhwcD4KLQot
bmFtZXNwYWNlIGJvb3N0ewotCi0gICAvLyBXZSBkb24ndCBrbm93IGhvdyB0byBpbXBsZW1lbnQg
dGhpcywgbm90ZSB3ZSBjYW4gbm90IHVzZSBoYXNfdHJpdmlhbF9jb25zdHJ1Y3RvciBoZXJlCi0g
ICAvLyBiZWNhdXNlIHRoZSBjb3JyZWN0IGltcGxlbWVudGF0aW9uIG9mIHRoYXQgdHJhaXQgcmVx
dWlyZXMgdGhpcyBvbmU6Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2RlZmF1bHRf
Y29uc3RydWN0aWJsZSA6IHB1YmxpYyBpc19wb2Q8VD57fTsKLSAgIHRlbXBsYXRlIDw+IHN0cnVj
dCBpc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8dm9pZD4gOiBwdWJsaWMgaW50ZWdyYWxfY29uc3Rh
bnQ8Ym9vbCwgZmFsc2U+e307Ci0gICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfZGVmYXVsdF9jb25z
dHJ1Y3RpYmxlPHZvaWQgY29uc3Q+IDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIGZh
bHNlPnt9OwotICAgdGVtcGxhdGUgPD4gc3RydWN0IGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTx2
b2lkIHZvbGF0aWxlPiA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBmYWxzZT57fTsK
LSAgIHRlbXBsYXRlIDw+IHN0cnVjdCBpc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8dm9pZCBjb25z
dCB2b2xhdGlsZT4gOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgZmFsc2U+e307Ci0K
LSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfVFRfSVNf
REVGQVVMVF9DT05TVFJVQ1RJQkxFX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfZGVzdHJ1Y3Rp
YmxlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVf
dHJhaXRzL2lzX2Rlc3RydWN0aWJsZS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDc0MmQ5OTA3MzAwMWIyNTgzNTlhYTkzMDA5Yzc1NDBkOThlYjM0ZDAuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfZGVzdHJ1Y3RpYmxlLmhwcAorKysgL2Rl
di9udWxsCkBAIC0xLDYxICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgSm9obiBNYWRkb2Nr
IDIwMTUuCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVj
dCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGlu
ZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX0lTX0RFU1RSVUNUSUJMRV9IUFBf
SU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSVNfREVTVFJVQ1RJQkxFX0hQUF9JTkNMVURFRAot
Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4gLy8gc2l6ZV90Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFp
dHMvaW50ZWdyYWxfY29uc3RhbnQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJv
dW5kLmhwcD4KLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX0RFQ0xUWVBFKSAmJiAhQk9P
U1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8IDE4MDApCi0KLSNpbmNsdWRlIDxib29zdC90eXBl
X3RyYWl0cy9kZXRhaWwveWVzX25vX3R5cGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2RlY2x2YWwuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3R7Ci0KLSAgIG5hbWVzcGFjZSBkZXRh
aWx7Ci0KLSAgICAgIHN0cnVjdCBpc19kZXN0cnVjdGlibGVfaW1wCi0gICAgICB7Ci0gICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IGRlY2x0eXBlKGJvb3N0OjpkZWNsdmFs
PFQmPigpLn5UKCkpPgotICAgICAgICAgc3RhdGljIGJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5
cGUgdGVzdChpbnQpOwotICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWU+Ci0gICAgICAgICBzdGF0
aWMgYm9vc3Q6OnR5cGVfdHJhaXRzOjpub190eXBlIHRlc3QoLi4uKTsKLSAgICAgIH07Ci0KLSAg
IH0KLQotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19kZXN0cnVjdGlibGUgOiBwdWJs
aWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgc2l6ZW9mKGRldGFpbDo6aXNfZGVzdHJ1Y3RpYmxl
X2ltcDo6dGVzdDxUPigwKSkgPT0gc2l6ZW9mKGJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUp
Pnt9OwotCi0jZWxzZQotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfcG9kLmhwcD4K
LSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jbGFzcy5ocHA+Ci0KLW5hbWVzcGFjZSBi
b29zdHsKLQotICAgLy8gV2UgZG9uJ3Qga25vdyBob3cgdG8gaW1wbGVtZW50IHRoaXM6Ci0gICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2Rlc3RydWN0aWJsZSA6IHB1YmxpYyBpbnRlZ3Jh
bF9jb25zdGFudDxib29sLCBpc19wb2Q8VD46OnZhbHVlIHx8IGlzX2NsYXNzPFQ+Ojp2YWx1ZT57
fTsKLSNlbmRpZgotCi0gICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfZGVzdHJ1Y3RpYmxlPHZvaWQ+
IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLSAgIHRlbXBsYXRlIDw+IHN0cnVjdCBpc19kZXN0cnVj
dGlibGU8dm9pZCBjb25zdD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotICAgdGVtcGxhdGUgPD4g
c3RydWN0IGlzX2Rlc3RydWN0aWJsZTx2b2lkIHZvbGF0aWxlPiA6IHB1YmxpYyBmYWxzZV90eXBl
e307Ci0gICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfZGVzdHJ1Y3RpYmxlPHZvaWQgY29uc3Qgdm9s
YXRpbGU+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1
Y3QgaXNfZGVzdHJ1Y3RpYmxlPFQmPiA6IHB1YmxpYyBpc19kZXN0cnVjdGlibGU8VD57fTsKLSNp
Zm5kZWYgQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMKLSAgIHRlbXBsYXRlIDxjbGFz
cyBUPiBzdHJ1Y3QgaXNfZGVzdHJ1Y3RpYmxlPFQmJj4gOiBwdWJsaWMgaXNfZGVzdHJ1Y3RpYmxl
PFQ+e307Ci0jZW5kaWYKLSAgIHRlbXBsYXRlIDxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPiBzdHJ1
Y3QgaXNfZGVzdHJ1Y3RpYmxlPFRbTl0+IDogcHVibGljIGlzX2Rlc3RydWN0aWJsZTxUPnt9Owot
ICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19kZXN0cnVjdGlibGU8VFtdPiA6IHB1Ymxp
YyBpc19kZXN0cnVjdGlibGU8VD57fTsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlm
IC8vIEJPT1NUX1RUX0lTX0RFU1RSVUNUSUJMRV9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Vt
cHR5LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVf
dHJhaXRzL2lzX2VtcHR5LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyODhj
NTE4YjE0OGNhNjg2YTI1NGQ5NmQ0ZmJjZWZhZGRkMWYyMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19lbXB0eS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjAgKzAsMCBAQAotCi0vLyAoQykgQ29weXJpZ2h0IFN0ZXZlIENsZWFyeSwgQmVtYW4gRGF3ZXMs
IEhvd2FyZCBIaW5uYW50ICYgSm9obiBNYWRkb2NrIDIwMDAuCi0vLyAgVXNlLCBtb2RpZmljYXRp
b24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZv
ciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVm
IEJPT1NUX1RUX0lTX0VNUFRZX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9JU19FTVBU
WV9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnZlcnRp
YmxlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvY29uZmlnLmhwcD4K
LSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pbnRyaW5zaWNzLmhwcD4KLQotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jdi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90
cmFpdHMvaXNfY2xhc3MuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2FkZF9yZWZl
cmVuY2UuaHBwPgotCi0jaWZuZGVmIEJPT1NUX0lOVEVSTkFMX0lTX0VNUFRZCi0jZGVmaW5lIEJP
T1NUX0lOVEVSTkFMX0lTX0VNUFRZKFQpIGZhbHNlCi0jZWxzZQotI2RlZmluZSBCT09TVF9JTlRF
Uk5BTF9JU19FTVBUWShUKSBCT09TVF9JU19FTVBUWShUKQotI2VuZGlmCi0KLW5hbWVzcGFjZSBi
b29zdCB7Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotCi0KLSNpZmRlZiBCT09TVF9NU1ZDCi0jcHJh
Z21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ2MjQpIC8vIGRlc3Ry
dWN0b3IgY291bGQgbm90IGJlIGdlbmVyYXRlZAotI2VuZGlmCi0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotc3RydWN0IGVtcHR5X2hlbHBlcl90MSA6IHB1YmxpYyBUCi17Ci0gICAgZW1wdHlfaGVs
cGVyX3QxKCk7ICAvLyBoaCBjb21waWxlciBidWcgd29ya2Fyb3VuZAotICAgIGludCBpWzI1Nl07
Ci1wcml2YXRlOgotICAgLy8gc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZ3M6Ci0gICBlbXB0eV9o
ZWxwZXJfdDEoY29uc3QgZW1wdHlfaGVscGVyX3QxJik7Ci0gICBlbXB0eV9oZWxwZXJfdDEmIG9w
ZXJhdG9yPShjb25zdCBlbXB0eV9oZWxwZXJfdDEmKTsKLX07Ci0KLSNpZmRlZiBCT09TVF9NU1ZD
Ci0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCi0KLXN0cnVjdCBlbXB0eV9oZWxwZXJfdDIg
eyBpbnQgaVsyNTZdOyB9OwotCi0jaWYgIUJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCA8
IDB4NjAwKQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbCBpc19hX2NsYXNzID0gZmFsc2U+
Ci1zdHJ1Y3QgZW1wdHlfaGVscGVyCi17Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2ws
IHZhbHVlID0gZmFsc2UpOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgZW1w
dHlfaGVscGVyPFQsIHRydWU+Ci17Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKAotICAgICAg
ICBib29sLCB2YWx1ZSA9IChzaXplb2YoZW1wdHlfaGVscGVyX3QxPFQ+KSA9PSBzaXplb2YoZW1w
dHlfaGVscGVyX3QyKSkKLSAgICAgICAgKTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
c3RydWN0IGlzX2VtcHR5X2ltcGwKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9jdjxU
Pjo6dHlwZSBjdnQ7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKAotICAgICAgICBib29sLCAK
LSAgICAgICAgdmFsdWUgPSAoIDo6Ym9vc3Q6OmRldGFpbDo6ZW1wdHlfaGVscGVyPGN2dCw6OmJv
b3N0Ojppc19jbGFzczxUPjo6dmFsdWU+Ojp2YWx1ZSB8fCBCT09TVF9JTlRFUk5BTF9JU19FTVBU
WShjdnQpKSk7Ci19OwotCi0jZWxzZSAvLyBfX0JPUkxBTkRDX18KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIGJvb2wgaXNfYV9jbGFzcywgYm9vbCBjb252ZXJ0aWJsZV90b19pbnQ+Ci1zdHJ1Y3Qg
ZW1wdHlfaGVscGVyCi17Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0g
ZmFsc2UpOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgZW1wdHlfaGVscGVy
PFQsIHRydWUsIGZhbHNlPgotewotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1
ZSA9ICgKLSAgICAgICAgc2l6ZW9mKGVtcHR5X2hlbHBlcl90MTxUPikgPT0gc2l6ZW9mKGVtcHR5
X2hlbHBlcl90MikKLSAgICAgICAgKSk7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0
cnVjdCBpc19lbXB0eV9pbXBsCi17Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9jdjxUPjo6
dHlwZSBjdnQ7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIGFkZF9yZWZlcmVuY2U8VD46OnR5cGUgcl90
eXBlOwotCi0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoCi0gICAgICAgYm9vbCwgdmFsdWUgPSAo
Ci0gICAgICAgICAgICAgIDo6Ym9vc3Q6OmRldGFpbDo6ZW1wdHlfaGVscGVyPAotICAgICAgICAg
ICAgICAgICAgY3Z0Ci0gICAgICAgICAgICAgICAgLCA6OmJvb3N0Ojppc19jbGFzczxUPjo6dmFs
dWUKLSAgICAgICAgICAgICAgICAsIDo6Ym9vc3Q6OmlzX2NvbnZlcnRpYmxlPCByX3R5cGUsaW50
Pjo6dmFsdWUKLSAgICAgICAgICAgICAgPjo6dmFsdWUgfHwgQk9PU1RfSU5URVJOQUxfSVNfRU1Q
VFkoY3Z0KSk7Ci19OwotCi0jZW5kaWYgLy8gX19CT1JMQU5EQ19fCi0KLX0gLy8gbmFtZXNwYWNl
IGRldGFpbAotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2VtcHR5IDogaW50ZWdyYWxf
Y29uc3RhbnQ8Ym9vbCwgOjpib29zdDo6ZGV0YWlsOjppc19lbXB0eV9pbXBsPFQ+Ojp2YWx1ZT4g
e307Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSN1bmRlZiBCT09TVF9JTlRFUk5BTF9JU19F
TVBUWQotCi0jZW5kaWYgLy8gQk9PU1RfVFRfSVNfRU1QVFlfSFBQX0lOQ0xVREVECi0KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJh
aXRzL2lzX2VudW0uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvdHlwZV90cmFpdHMvaXNfZW51bS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGVhZGE0ODBhNjU4Nzg0ZWM2MTlhNzYzNmZhMDUyNDM4ODY4YmY0N2EuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfZW51bS5ocHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxNjYgKzAsMCBAQAotCi0vLyAgKEMpIENvcHlyaWdodCBEYXZlIEFicmFoYW1zLCBTdGV2
ZSBDbGVhcnksIEJlbWFuIERhd2VzLCBIb3dhcmQKLS8vICBIaW5uYW50ICYgSm9obiBNYWRkb2Nr
IDIwMDAuICAKLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJq
ZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2Vl
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDov
L3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVk
aW5nIGRvY3VtZW50YXRpb24uCi0KLQotI2lmbmRlZiBCT09TVF9UVF9JU19FTlVNX0hQUF9JTkNM
VURFRAotI2RlZmluZSBCT09TVF9UVF9JU19FTlVNX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8
Ym9vc3QvdHlwZV90cmFpdHMvaW50cmluc2ljcy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90
cmFpdHMvaW50ZWdyYWxfY29uc3RhbnQuaHBwPgotI2lmbmRlZiBCT09TVF9JU19FTlVNCi0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvYWRkX3JlZmVyZW5jZS5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvaXNfYXJpdGhtZXRpYy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90
cmFpdHMvaXNfcmVmZXJlbmNlLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19j
b252ZXJ0aWJsZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfYXJyYXkuaHBw
PgotI2lmZGVmIF9fR05VQ19fCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfZnVuY3Rp
b24uaHBwPgotI2VuZGlmCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2NvbmZp
Zy5ocHA+Ci0jaWYgZGVmaW5lZChCT09TVF9UVF9IQVNfQ09ORk9STUlOR19JU19DTEFTU19JTVBM
RU1FTlRBVElPTikgCi0jICBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19jbGFzcy5ocHA+
Ci0jICBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc191bmlvbi5ocHA+Ci0jZW5kaWYKLSNl
bmRpZgotCi1uYW1lc3BhY2UgYm9vc3QgewotCi0jaWZuZGVmIEJPT1NUX0lTX0VOVU0KLSNpZiAh
KGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAoX19CT1JMQU5EQ19fIDw9IDB4NTUxKSkKLQotbmFt
ZXNwYWNlIGRldGFpbCB7Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX1RUX0hBU19DT05GT1JNSU5HX0lT
X0NMQVNTX0lNUExFTUVOVEFUSU9OKSAKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3Qg
aXNfY2xhc3Nfb3JfdW5pb24KLXsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1
ZSA9IDo6Ym9vc3Q6OmlzX2NsYXNzPFQ+Ojp2YWx1ZSB8fCA6OmJvb3N0Ojppc191bmlvbjxUPjo6
dmFsdWUpOwotfTsKLQotI2Vsc2UKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgaXNf
Y2xhc3Nfb3JfdW5pb24KLXsKLSMgaWYgQk9PU1RfV09SS0FST1VORChfX0JPUkxBTkRDX18sIEJP
T1NUX1RFU1RFRF9BVCgweDU4MSkpLy8gd2Ugc2ltcGx5IGNhbid0IGRldGVjdCBpdCB0aGlzIHdh
eS4KLSAgICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSBmYWxzZSk7Ci0jIGVs
c2UKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gc3RhdGljIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjp5
ZXNfdHlwZSBpc19jbGFzc19vcl91bmlvbl90ZXN0ZXIodm9pZChVOjoqKSh2b2lkKSk7Ci0KLSMg
IGlmIEJPT1NUX1dPUktBUk9VTkQoX19NV0VSS1NfXywgPD0gMHgzMDAwKSAvLyBubyBTRklOQUUK
LSAgICBzdGF0aWMgOjpib29zdDo6dHlwZV90cmFpdHM6Om5vX3R5cGUgaXNfY2xhc3Nfb3JfdW5p
b25fdGVzdGVyKC4uLik7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKAotICAgICAgICBib29s
LCB2YWx1ZSA9IHNpemVvZihpc19jbGFzc19vcl91bmlvbl90ZXN0ZXIoMCkpID09IHNpemVvZig6
OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUpKTsKLSMgIGVsc2UKLSAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVT4KLSAgICBzdGF0aWMgOjpib29zdDo6dHlwZV90cmFpdHM6Om5vX3R5cGUgaXNfY2xh
c3Nfb3JfdW5pb25fdGVzdGVyKC4uLik7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKAotICAg
ICAgICBib29sLCB2YWx1ZSA9IHNpemVvZihpc19jbGFzc19vcl91bmlvbl90ZXN0ZXI8VD4oMCkp
ID09IHNpemVvZig6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUpKTsKLSMgIGVuZGlmCi0j
IGVuZGlmCi19OwotI2VuZGlmCi0KLXN0cnVjdCBpbnRfY29udmVydGlibGUKLXsKLSAgICBpbnRf
Y29udmVydGlibGUoaW50KTsKLX07Ci0KLS8vIERvbid0IGV2YWx1YXRlIGNvbnZlcnRpYmlsaXR5
IHRvIGludF9jb252ZXJ0aWJsZSB1bmxlc3MgdGhlIHR5cGUKLS8vIGlzIG5vbi1hcml0aG1ldGlj
LiBUaGlzIHN1cHByZXNzZXMgd2FybmluZ3Mgd2l0aCBHQ0MuCi10ZW1wbGF0ZSA8Ym9vbCBpc190
eXBlbmFtZV9hcml0aG1ldGljX29yX3JlZmVyZW5jZSA9IHRydWU+Ci1zdHJ1Y3QgaXNfZW51bV9o
ZWxwZXIKLXsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IHR5cGUKLSAgICB7Ci0g
ICAgICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IGZhbHNlKTsKLSAgICB9
OwotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBpc19lbnVtX2hlbHBlcjxmYWxzZT4KLXsKLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IHR5cGUKLSAgICB7Ci0gICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSA6OmJvb3N0Ojppc19jb252ZXJ0aWJsZTx0eXBlbmFtZSBib29z
dDo6YWRkX3JlZmVyZW5jZTxUPjo6dHlwZSwgOjpib29zdDo6ZGV0YWlsOjppbnRfY29udmVydGli
bGU+Ojp2YWx1ZTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBp
c19lbnVtX2ltcGwKLXsKLSAgIC8vdHlwZWRlZiA6OmJvb3N0OjphZGRfcmVmZXJlbmNlPFQ+IGFy
X3Q7Ci0gICAvL3R5cGVkZWYgdHlwZW5hbWUgYXJfdDo6dHlwZSByX3R5cGU7Ci0KLSNpZiBkZWZp
bmVkKF9fR05VQ19fKQotCi0jaWZkZWYgQk9PU1RfVFRfSEFTX0NPTkZPUk1JTkdfSVNfQ0xBU1Nf
SU1QTEVNRU5UQVRJT04KLSAgICAKLSAgIC8vIFdlIE1VU1QgY2hlY2sgZm9yIGlzX2NsYXNzX29y
X3VuaW9uIG9uIGNvbmZvcm1pbmcgY29tcGlsZXJzIGluCi0gICAvLyBvcmRlciB0byBjb3JyZWN0
bHkgZGVkdWNlIHRoYXQgbm9uY29weWFibGUgdHlwZXMgYXJlIG5vdCBlbnVtcwotICAgLy8gKGR3
YSAyMDAyLzA0LzE1KS4uLgotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHNlbGVjdG9y
ID0KLSAgICAgICAgICAgOjpib29zdDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUKLSAgICAgICAg
IHx8IDo6Ym9vc3Q6OmlzX3JlZmVyZW5jZTxUPjo6dmFsdWUKLSAgICAgICAgIHx8IDo6Ym9vc3Q6
OmlzX2Z1bmN0aW9uPFQ+Ojp2YWx1ZQotICAgICAgICAgfHwgaXNfY2xhc3Nfb3JfdW5pb248VD46
OnZhbHVlCi0gICAgICAgICB8fCBpc19hcnJheTxUPjo6dmFsdWUpOwotI2Vsc2UKLSAgIC8vIC4u
Lmhvd2V2ZXIsIG5vdCBjaGVja2luZyBpc19jbGFzc19vcl91bmlvbiBvbiBub24tY29uZm9ybWlu
ZwotICAgLy8gY29tcGlsZXJzIHByZXZlbnRzIGEgZGVwZW5kZW5jeSByZWN1cnNpb24uCi0gICBC
T09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgc2VsZWN0b3IgPQotICAgICAgICAgICA6OmJvb3N0
Ojppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZQotICAgICAgICAgfHwgOjpib29zdDo6aXNfcmVmZXJl
bmNlPFQ+Ojp2YWx1ZQotICAgICAgICAgfHwgOjpib29zdDo6aXNfZnVuY3Rpb248VD46OnZhbHVl
Ci0gICAgICAgICB8fCBpc19hcnJheTxUPjo6dmFsdWUpOwotI2VuZGlmIC8vIEJPT1NUX1RUX0hB
U19DT05GT1JNSU5HX0lTX0NMQVNTX0lNUExFTUVOVEFUSU9OCi0KLSNlbHNlIC8vICFkZWZpbmVk
KF9fR05VQ19fKToKLSAgICAKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCBzZWxlY3Rv
ciA9Ci0gICAgICAgICAgIDo6Ym9vc3Q6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlCi0gICAgICAg
ICB8fCA6OmJvb3N0Ojppc19yZWZlcmVuY2U8VD46OnZhbHVlCi0gICAgICAgICB8fCBpc19jbGFz
c19vcl91bmlvbjxUPjo6dmFsdWUKLSAgICAgICAgIHx8IGlzX2FycmF5PFQ+Ojp2YWx1ZSk7Ci0g
ICAgCi0jZW5kaWYKLQotI2lmIEJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCA8IDB4NjAw
KQotICAgIHR5cGVkZWYgOjpib29zdDo6ZGV0YWlsOjppc19lbnVtX2hlbHBlcjwKLSAgICAgICAg
ICA6OmJvb3N0OjpkZXRhaWw6OmlzX2VudW1faW1wbDxUPjo6c2VsZWN0b3IKLSAgICAgICAgPiBz
ZV90OwotI2Vsc2UKLSAgICB0eXBlZGVmIDo6Ym9vc3Q6OmRldGFpbDo6aXNfZW51bV9oZWxwZXI8
c2VsZWN0b3I+IHNlX3Q7Ci0jZW5kaWYKLQotICAgIHR5cGVkZWYgdHlwZW5hbWUgc2VfdDo6dGVt
cGxhdGUgdHlwZTxUPiBoZWxwZXI7Ci0gICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZh
bHVlID0gaGVscGVyOjp2YWx1ZSk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19lbnVtIDogcHVibGljIGludGVncmFsX2NvbnN0YW50
PGJvb2wsIDo6Ym9vc3Q6OmRldGFpbDo6aXNfZW51bV9pbXBsPFQ+Ojp2YWx1ZT4ge307Ci0KLSNl
bHNlIC8vIF9fQk9STEFORENfXwotLy8KLS8vIGJ1Z2d5IGlzX2NvbnZlcnRpYmxlIHByZXZlbnRz
IHdvcmtpbmcKLS8vIGltcGxlbWVudGF0aW9uIG9mIGlzX2VudW06Ci10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IGlzX2VudW0gOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgZmFsc2U+
IHt9OwotCi0jZW5kaWYKLQotI2Vsc2UgLy8gQk9PU1RfSVNfRU5VTQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gc3RydWN0IGlzX2VudW0gOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgQk9P
U1RfSVNfRU5VTShUKT4ge307Ci0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0j
ZW5kaWYgLy8gQk9PU1RfVFRfSVNfRU5VTV9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2ZpbmFs
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJh
aXRzL2lzX2ZpbmFsLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEwZDE4NjYz
YjhiZmIwNjdjNjc4MjMzNzQ4MTdlOGU3Zjg0M2JhZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC90eXBlX3RyYWl0cy9pc19maW5hbC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMCAr
MCwwIEBACi0KLS8vICBDb3B5cmlnaHQgKGMpIDIwMTQgQWd1c3RpbiBCZXJnZQotLy8KLS8vICBV
c2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29z
dCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBm
aWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcv
TElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMv
dHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRp
b24uCi0KLQotI2lmbmRlZiBCT09TVF9UVF9JU19GSU5BTF9IUFBfSU5DTFVERUQKLSNkZWZpbmUg
Qk9PU1RfVFRfSVNfRklOQUxfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3Ry
YWl0cy9pbnRyaW5zaWNzLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pbnRlZ3Jh
bF9jb25zdGFudC5ocHA+Ci0jaWZkZWYgQk9PU1RfSVNfRklOQUwKLSNpbmNsdWRlIDxib29zdC90
eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBib29zdCB7Ci0K
LSNpZmRlZiBCT09TVF9JU19GSU5BTAotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19maW5h
bCA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBCT09TVF9JU19GSU5BTCh0eXBlbmFt
ZSByZW1vdmVfY3Y8VD46OnR5cGUpPiB7fTsKLSNlbHNlCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3Ry
dWN0IGlzX2ZpbmFsIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIGZhbHNlPiB7fTsK
LSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfVFRfSVNf
RklOQUxfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19mbG9hdC5ocHAgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19mbG9hdC5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZjdkMWY4MjA3ZjZiYWMwODc0MGY0OGEwZGQ2
ODhmYmU5Njk0OTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMv
aXNfZmxvYXQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8gIChDKSBDb3B5
cmlnaHQgU3RldmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywgSG93YXJkIEhpbm5hbnQgJiBKb2huIE1h
ZGRvY2sgMjAwMC4KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBz
dWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAo
U2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0
cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5j
bHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFlQRV9UUkFJVFNfSVNfRkxP
QVRfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RZUEVfVFJBSVRTX0lTX0ZMT0FUX0hQUF9J
TkNMVURFRAotCi0vLyBzaG91bGQgYmUgdGhlIGxhc3QgI2luY2x1ZGUKLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9pc19mbG9hdGluZ19wb2ludC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7
Ci0KLS8vKiBpcyBhIHR5cGUgVCBhIGZsb2F0aW5nLXBvaW50IHR5cGUgZGVzY3JpYmVkIGluIHRo
ZSBzdGFuZGFyZCAoMy45LjFwOCkKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfZmxv
YXQgOiBwdWJsaWMgaXNfZmxvYXRpbmdfcG9pbnQ8VD4ge307Ci19IC8vIG5hbWVzcGFjZSBib29z
dAotCi0jZW5kaWYgLy8gQk9PU1RfVFlQRV9UUkFJVFNfSVNfRkxPQVRfSFBQX0lOQ0xVREVECmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBl
X3RyYWl0cy9pc19mbG9hdGluZ19wb2ludC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19mbG9hdGluZ19wb2ludC5ocHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NmM5MDBjZjkzYjIzZGUwNTA3MTg4ZjRiZDBlZGM2
ZGE3MTI1ZDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNf
ZmxvYXRpbmdfcG9pbnQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLy8gIChD
KSBDb3B5cmlnaHQgU3RldmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywgSG93YXJkIEhpbm5hbnQgJiBK
b2huIE1hZGRvY2sgMjAwMC0yMDA1LgotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmli
dXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVy
c2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkg
YXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBT
ZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQg
dmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UWVBFX1RS
QUlUU19JU19GTE9BVElOR19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFlQRV9UUkFJVFNf
SVNfRkxPQVRJTkdfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9p
bnRlZ3JhbF9jb25zdGFudC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLS8vKiBpcyBhIHR5
cGUgVCBhIGZsb2F0aW5nLXBvaW50IHR5cGUgZGVzY3JpYmVkIGluIHRoZSBzdGFuZGFyZCAoMy45
LjFwOCkKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfZmxvYXRpbmdfcG9pbnQgOiBw
dWJsaWMgZmFsc2VfdHlwZXt9OwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19mbG9h
dGluZ19wb2ludDxjb25zdCBUPiA6IHB1YmxpYyBpc19mbG9hdGluZ19wb2ludDxUPnt9OwotICAg
dGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19mbG9hdGluZ19wb2ludDx2b2xhdGlsZSBjb25z
dCBUPiA6IHB1YmxpYyBpc19mbG9hdGluZ19wb2ludDxUPnt9OwotICAgdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBpc19mbG9hdGluZ19wb2ludDx2b2xhdGlsZSBUPiA6IHB1YmxpYyBpc19mbG9h
dGluZ19wb2ludDxUPnt9OwotICAgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZmxvYXRpbmdfcG9pbnQ8
ZmxvYXQ+IDogcHVibGljIHRydWVfdHlwZXt9OwotICAgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZmxv
YXRpbmdfcG9pbnQ8ZG91YmxlPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLSAgIHRlbXBsYXRlPD4g
c3RydWN0IGlzX2Zsb2F0aW5nX3BvaW50PGxvbmcgZG91YmxlPiA6IHB1YmxpYyB0cnVlX3R5cGV7
fTsKLSAgIAotI2lmIGRlZmluZWQoQk9PU1RfSEFTX0ZMT0FUMTI4KQotICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgaXNfZmxvYXRpbmdfcG9pbnQ8X19mbG9hdDEyOD4gOiBwdWJsaWMgdHJ1ZV90eXBle307
Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1RZUEVf
VFJBSVRTX0lTX0ZMT0FUX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfZnVuY3Rpb24uaHBwIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNf
ZnVuY3Rpb24uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzdjMWYwNDY5ZDE0
YjQzNGNhMDYwNTI2MzIwYjU5NGI5NDZjNzA1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmN0aW9uLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiAr
MCwwIEBACi0KLS8vICBDb3B5cmlnaHQgMjAwMCBKb2huIE1hZGRvY2sgKGpvaG5Aam9obm1hZGRv
Y2suY28udWspCi0vLyAgQ29weXJpZ2h0IDIwMDIgQWxla3NleSBHdXJ0b3ZveSAoYWd1cnRvdm95
QG1ldGEtY29tbS5jb20pCi0vLwotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRp
b24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lv
biAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQK
LS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUg
aHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVy
c2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9JU19GVU5D
VElPTl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSVNfRlVOQ1RJT05fSFBQX0lOQ0xV
REVECi0KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19yZWZlcmVuY2UuaHBwPgotI2lu
Y2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9jb25maWcuaHBwPgotCi0jaWYgIWRlZmlu
ZWQoQk9PU1RfVFRfVEVTVF9NU19GVU5DX1NJR1MpCi0jICAgaW5jbHVkZSA8Ym9vc3QvdHlwZV90
cmFpdHMvZGV0YWlsL2lzX2Z1bmN0aW9uX3B0cl9oZWxwZXIuaHBwPgotI2Vsc2UKLSMgICBpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaXNfZnVuY3Rpb25fcHRyX3Rlc3Rlci5ocHA+
Ci0jICAgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3llc19ub190eXBlLmhwcD4K
LSNlbmRpZgotCi0vLyBpcyBhIHR5cGUgYSBmdW5jdGlvbj8KLS8vIFBsZWFzZSBub3RlIHRoYXQg
dGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXg6Ci0vLyB3ZSBjb3Vs
ZCBqdXN0IHVzZSAhaXNfY29udmVydGlibGU8VCosIGNvbnN0IHZvbGF0aWxlIHZvaWQqPjo6dmFs
dWUsCi0vLyBleGNlcHQgdGhhdCBzb21lIGNvbXBpbGVycyBlcnJvbmVvdXNseSBhbGxvdyBjb252
ZXJzaW9ucyBmcm9tCi0vLyBmdW5jdGlvbiBwb2ludGVycyB0byB2b2lkKi4KLQotbmFtZXNwYWNl
IGJvb3N0IHsKLQotI2lmICFkZWZpbmVkKCBfX0NPREVHRUFSQ19fICkKLQotbmFtZXNwYWNlIGRl
dGFpbCB7Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9UVF9URVNUX01TX0ZVTkNfU0lHUykKLXRlbXBs
YXRlPGJvb2wgaXNfcmVmID0gdHJ1ZT4KLXN0cnVjdCBpc19mdW5jdGlvbl9jaG9vc2VyCi17Ci0g
ICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCByZXN1bHRfCi0gICAgICA6IHB1YmxpYyBm
YWxzZV90eXBlIHt9OwotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBpc19mdW5jdGlvbl9jaG9v
c2VyPGZhbHNlPgotewotICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJlc3VsdF8K
LSAgICAgICAgOiBwdWJsaWMgOjpib29zdDo6dHlwZV90cmFpdHM6OmlzX2Z1bmN0aW9uX3B0cl9o
ZWxwZXI8VCo+IHt9OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgaXNfZnVu
Y3Rpb25faW1wbAotICAgIDogcHVibGljIGlzX2Z1bmN0aW9uX2Nob29zZXI8IDo6Ym9vc3Q6Omlz
X3JlZmVyZW5jZTxUPjo6dmFsdWUgPgotICAgICAgICA6OkJPT1NUX05FU1RFRF9URU1QTEFURSBy
ZXN1bHRfPFQ+Ci17Ci19OwotCi0jZWxzZQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVj
dCBpc19mdW5jdGlvbl9pbXBsCi17Ci0jaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDX0ZV
TExfVkVSLCA+PSAxNDAwNTAwMDApCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2Fy
bmluZyhkaXNhYmxlOjYzMzQpCi0jZW5kaWYKLSAgICBzdGF0aWMgVCogdDsKLSAgICBCT09TVF9T
VEFUSUNfQ09OU1RBTlQoCi0gICAgICAgIGJvb2wsIHZhbHVlID0gc2l6ZW9mKDo6Ym9vc3Q6OnR5
cGVfdHJhaXRzOjppc19mdW5jdGlvbl9wdHJfdGVzdGVyKHQpKQotICAgICAgICA9PSBzaXplb2Yo
Ojpib29zdDo6dHlwZV90cmFpdHM6Onllc190eXBlKQotICAgICAgICApOwotI2lmIEJPT1NUX1dP
UktBUk9VTkQoQk9PU1RfTVNWQ19GVUxMX1ZFUiwgPj0gMTQwMDUwMDAwKQotI3ByYWdtYSB3YXJu
aW5nKHBvcCkKLSNlbmRpZgotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgaXNf
ZnVuY3Rpb25faW1wbDxUJj4gOiBwdWJsaWMgZmFsc2VfdHlwZQote307Ci0jaWZuZGVmIEJPT1NU
X05PX0NYWDExX1JWQUxVRV9SRUZFUkVOQ0VTCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVj
dCBpc19mdW5jdGlvbl9pbXBsPFQmJj4gOiBwdWJsaWMgZmFsc2VfdHlwZQote307Ci0jZW5kaWYK
LQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGRldGFpbAotCi0jZW5kaWYgLy8gIWRlZmluZWQo
IF9fQ09ERUdFQVJDX18gKQotCi0jaWYgZGVmaW5lZCggX19DT0RFR0VBUkNfXyApCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2Z1bmN0aW9uIDogaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwg
X19pc19mdW5jdGlvbihUKT4ge307Ci0jZWxzZQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBp
c19mdW5jdGlvbiA6IGludGVncmFsX2NvbnN0YW50PGJvb2wsIDo6Ym9vc3Q6OmRldGFpbDo6aXNf
ZnVuY3Rpb25faW1wbDxUPjo6dmFsdWU+IHt9OwotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9SVkFM
VUVfUkVGRVJFTkNFUwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19mdW5jdGlvbjxUJiY+
IDogcHVibGljIGZhbHNlX3R5cGUge307Ci0jZW5kaWYKLSNlbmRpZgotfSAvLyBuYW1lc3BhY2Ug
Ym9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1RUX0lTX0ZVTkNUSU9OX0hQUF9JTkNMVURFRApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90
cmFpdHMvaXNfZnVuZGFtZW50YWwuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfZnVuZGFtZW50YWwuaHBwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmNTg3NjdhNDg5MDEyZjAxYmFiZmQyMzk4YzBlMmUxM2U5ZDhjNTE2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmRhbWVu
dGFsLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmln
aHQgU3RldmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywgSG93YXJkIEhpbm5hbnQgJiBKb2huIE1hZGRv
Y2sgMjAwMC4KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJq
ZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2Vl
IGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDov
L3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cu
Ym9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVk
aW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfRlVOREFNRU5UQUxfSFBQ
X0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0lTX0ZVTkRBTUVOVEFMX0hQUF9JTkNMVURFRAot
Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfYXJpdGhtZXRpYy5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfdm9pZC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0K
LS8vKiBpcyBhIHR5cGUgVCBhIGZ1bmRhbWVudGFsIHR5cGUgZGVzY3JpYmVkIGluIHRoZSBzdGFu
ZGFyZCAoMy45LjEpCi0jaWYgZGVmaW5lZCggX19DT0RFR0VBUkNfXyApCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gc3RydWN0IGlzX2Z1bmRhbWVudGFsIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJv
b2wsIF9faXNfZnVuZGFtZW50YWwoVCk+IHt9OwotI2Vsc2UKLXRlbXBsYXRlIDxjbGFzcyBUPiBz
dHJ1Y3QgaXNfZnVuZGFtZW50YWwgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgOjpi
b29zdDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUgfHwgOjpib29zdDo6aXNfdm9pZDxUPjo6dmFs
dWU+IHt9OwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09T
VF9UVF9JU19GVU5EQU1FTlRBTF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2ludGVncmFsLmhw
cCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRz
L2lzX2ludGVncmFsLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E3ZTU0YmI3
MDE5MjBhZDQ5MjAwYWI2ZWU3YjE5MzUyNDc0YWJiMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ib29zdC90eXBlX3RyYWl0cy9pc19pbnRlZ3JhbC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw4
OSArMCwwIEBACi0KLS8vICAoQykgQ29weXJpZ2h0IFN0ZXZlIENsZWFyeSwgQmVtYW4gRGF3ZXMs
IEhvd2FyZCBIaW5uYW50ICYgSm9obiBNYWRkb2NrIDIwMDAuCi0vLyAgVXNlLCBtb2RpZmljYXRp
b24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZv
ciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVm
IEJPT1NUX1RUX0lTX0lOVEVHUkFMX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9JU19J
TlRFR1JBTF9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50ZWdyYWxfY29uc3RhbnQuaHBwPgotCi1uYW1lc3Bh
Y2UgYm9vc3QgewotCi0jaWYgZGVmaW5lZCggX19DT0RFR0VBUkNfXyApCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4KLSAgIHN0cnVjdCBpc19pbnRlZ3JhbCA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFu
dDxib29sLCBfX2lzX2ludGVncmFsKFQpPiB7fTsKLSNlbHNlCi0KLXRlbXBsYXRlIDxjbGFzcyBU
PiBzdHJ1Y3QgaXNfaW50ZWdyYWwgOiBwdWJsaWMgZmFsc2VfdHlwZSB7fTsKLXRlbXBsYXRlIDxj
bGFzcyBUPiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Y29uc3QgVD4gOiBwdWJsaWMgaXNfaW50ZWdyYWw8
VD4ge307Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2ludGVncmFsPHZvbGF0aWxlIGNv
bnN0IFQ+IDogcHVibGljIGlzX2ludGVncmFsPFQ+e307Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3Ry
dWN0IGlzX2ludGVncmFsPHZvbGF0aWxlIFQ+IDogcHVibGljIGlzX2ludGVncmFsPFQ+e307Ci0K
LS8vKiBpcyBhIHR5cGUgVCBhbiBbY3YtcXVhbGlmaWVkLV0gaW50ZWdyYWwgdHlwZSBkZXNjcmli
ZWQgaW4gdGhlIHN0YW5kYXJkICgzLjkuMXAzKQotLy8gYXMgYW4gZXh0ZW5zaW9uIHdlIGluY2x1
ZGUgbG9uZyBsb25nLCBhcyB0aGlzIGlzIGxpa2VseSB0byBiZSBhZGRlZCB0byB0aGUKLS8vIHN0
YW5kYXJkIGF0IGEgbGF0ZXIgZGF0ZQotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5z
aWduZWQgY2hhcj4gOiBwdWJsaWMgdHJ1ZV90eXBlIHt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf
aW50ZWdyYWw8dW5zaWduZWQgc2hvcnQ+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGU8
PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgaW50PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsK
LXRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPHVuc2lnbmVkIGxvbmc+IDogcHVibGljIHRy
dWVfdHlwZXt9OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxzaWduZWQgY2hhcj4g
OiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxzaG9y
dD4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxp
bnQ+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8
bG9uZz4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci0KLXRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVn
cmFsPGNoYXI+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50
ZWdyYWw8Ym9vbD4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci0KLSNpZm5kZWYgQk9PU1RfTk9fSU5U
UklOU0lDX1dDSEFSX1QKLS8vIElmIHRoZSBmb2xsb3dpbmcgbGluZSBmYWlscyB0byBjb21waWxl
IGFuZCB5b3UncmUgdXNpbmcgdGhlIEludGVsCi0vLyBjb21waWxlciwgc2VlIGh0dHA6Ly9saXN0
cy5ib29zdC5vcmcvTWFpbEFyY2hpdmVzL2Jvb3N0LXVzZXJzL21zZzA2NTY3LnBocCwKLS8vIGFu
ZCBkZWZpbmUgQk9PU1RfTk9fSU5UUklOU0lDX1dDSEFSX1Qgb24gdGhlIGNvbW1hbmQgbGluZS4K
LXRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPHdjaGFyX3Q+IDogcHVibGljIHRydWVfdHlw
ZXt9OwotI2VuZGlmCi0KLS8vIFNhbWUgc2V0IG9mIGludGVncmFsIHR5cGVzIGFzIGluIGJvb3N0
L3R5cGVfdHJhaXRzL2ludGVncmFsX3Byb21vdGlvbi5ocHAuCi0vLyBQbGVhc2UsIGtlZXAgaW4g
c3luYy4gLS0gQWxleGFuZGVyIE5hc29ub3YKLSNpZiAoZGVmaW5lZChCT09TVF9JTlRFTF9DWFhf
VkVSU0lPTikgJiYgZGVmaW5lZChfTVNDX1ZFUikgJiYgKEJPT1NUX0lOVEVMX0NYWF9WRVJTSU9O
IDw9IDYwMCkpIFwKLSAgICB8fCAoZGVmaW5lZChfX0JPUkxBTkRDX18pICYmIChfX0JPUkxBTkRD
X18gPT0gMHg2MDApICYmIChfTVNDX1ZFUiA8IDEzMDApKQotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf
aW50ZWdyYWw8dW5zaWduZWQgX19pbnQ4PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRl
PD4gc3RydWN0IGlzX2ludGVncmFsPHVuc2lnbmVkIF9faW50MTY+IDogcHVibGljIHRydWVfdHlw
ZXt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8dW5zaWduZWQgX19pbnQzMj4gOiBw
dWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxfX2ludDg+
IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8X19p
bnQxNj4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3Jh
bDxfX2ludDMyPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLSNpZmRlZiBfX0JPUkxBTkRDX18KLXRl
bXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPHVuc2lnbmVkIF9faW50NjQ+IDogcHVibGljIHRy
dWVfdHlwZXt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8X19pbnQ2ND4gOiBwdWJs
aWMgdHJ1ZV90eXBle307Ci0jZW5kaWYKLSNlbmRpZgotCi0jIGlmIGRlZmluZWQoQk9PU1RfSEFT
X0xPTkdfTE9ORykKLXRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCA6OmJvb3N0Ojp1bG9u
Z19sb25nX3R5cGU+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf
aW50ZWdyYWw8IDo6Ym9vc3Q6OmxvbmdfbG9uZ190eXBlPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsK
LSNlbGlmIGRlZmluZWQoQk9PU1RfSEFTX01TX0lOVDY0KQotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf
aW50ZWdyYWw8dW5zaWduZWQgX19pbnQ2ND4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0
ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDxfX2ludDY0PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLSNl
bmRpZgotICAgICAgICAKLSNpZmRlZiBCT09TVF9IQVNfSU5UMTI4Ci10ZW1wbGF0ZTw+IHN0cnVj
dCBpc19pbnRlZ3JhbDxib29zdDo6aW50MTI4X3R5cGU+IDogcHVibGljIHRydWVfdHlwZXt9Owot
dGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Ym9vc3Q6OnVpbnQxMjhfdHlwZT4gOiBwdWJs
aWMgdHJ1ZV90eXBle307Ci0jZW5kaWYKLSNpZm5kZWYgQk9PU1RfTk9fQ1hYMTFfQ0hBUjE2X1QK
LXRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPGNoYXIxNl90PiA6IHB1YmxpYyB0cnVlX3R5
cGV7fTsKLSNlbmRpZgotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9DSEFSMzJfVAotdGVtcGxhdGU8
PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8Y2hhcjMyX3Q+IDogcHVibGljIHRydWVfdHlwZXt9OwotI2Vu
ZGlmCi0KLSNlbmRpZiAgLy8gbm9uLUNvZGVHZWFyIGltcGxlbWVudGF0aW9uCi0KLX0gLy8gbmFt
ZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9UVF9JU19JTlRFR1JBTF9IUFBfSU5DTFVE
RUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2lzX2x2YWx1ZV9yZWZlcmVuY2UuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfbHZhbHVlX3JlZmVyZW5jZS5o
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NGQ3ODc0ODE3NWY4MmY0ZmE1YTJi
NGNlYzZkYTkzMzhiZTk5NTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90
cmFpdHMvaXNfbHZhbHVlX3JlZmVyZW5jZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCww
IEBACi0KLS8vICAoQykgQ29weXJpZ2h0IERhdmUgQWJyYWhhbXMsIFN0ZXZlIENsZWFyeSwgQmVt
YW4gRGF3ZXMsIAotLy8gICAgICBIb3dhcmQgSGlubmFudCBhbmQgSm9obiBNYWRkb2NrIDIwMDAu
IAotLy8gIChDKSBDb3B5cmlnaHQgTWF0IE1hcmN1cywgSmVzc2UgSm9uZXMgYW5kIEFkb2JlIFN5
c3RlbXMgSW5jIDIwMDEKLQotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24g
YXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAx
LjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8v
ICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0
cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lv
biBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotLy8gICAgRml4ZWQgaXNfcG9pbnRlciwgaXNf
bHZhbHVlX3JlZmVyZW5jZSwgaXNfY29uc3QsIGlzX3ZvbGF0aWxlLCBpc19zYW1lLCAKLS8vICAg
IGlzX21lbWJlcl9wb2ludGVyIGJhc2VkIG9uIHRoZSBTaW11bGF0ZWQgUGFydGlhbCBTcGVjaWFs
aXphdGlvbiB3b3JrIAotLy8gICAgb2YgTWF0IE1hcmN1cyBhbmQgSmVzc2UgSm9uZXMuIFNlZSAg
aHR0cDovL29wZW5zb3VyY2UuYWRvYmUuY29tIG9yIAotLy8gICAgaHR0cDovL2dyb3Vwcy55YWhv
by5jb20vZ3JvdXAvYm9vc3QvbWVzc2FnZS81NDQxIAotLy8gICAgU29tZSB3b3JrYXJvdW5kcyBp
biBoZXJlIHVzZSBpZGVhcyBzdWdnZXN0ZWQgZnJvbSAiR2VuZXJpYzxQcm9ncmFtbWluZz46IAot
Ly8gICAgTWFwcGluZ3MgYmV0d2VlbiBUeXBlcyBhbmQgVmFsdWVzIiAKLS8vICAgIGJ5IEFuZHJl
aSBBbGV4YW5kcmVzY3UgKHNlZSBodHRwOi8vd3d3LmN1ai5jb20vZXhwZXJ0cy8xODEwL2FsZXhh
bmRyLmh0bWwpLgotCi0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfTFZBTFVFX1JFRkVSRU5DRV9IUFBf
SU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSVNfTFZBTFVFX1JFRkVSRU5DRV9IUFBfSU5DTFVE
RUQKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludGVncmFsX2NvbnN0YW50LmhwcD4K
LQotbmFtZXNwYWNlIGJvb3N0IHsKLQotI2lmIGRlZmluZWQoIF9fQ09ERUdFQVJDX18gKQotICAg
dGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19sdmFsdWVfcmVmZXJlbmNlIDogcHVibGljIGlu
dGVncmFsX2NvbnN0YW50PGJvb2wsIF9faXNfcmVmZXJlbmNlKFQpPnt9OwotI2Vsc2UKLQotICAg
dGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19sdmFsdWVfcmVmZXJlbmNlIDogcHVibGljIGZh
bHNlX3R5cGV7fTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfbHZhbHVlX3JlZmVy
ZW5jZTxUJj4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci0KLSNpZiAgZGVmaW5lZChCT09TVF9JTExF
R0FMX0NWX1JFRkVSRU5DRVMpCi0vLyB0aGVzZSBhcmUgaWxsZWdhbCBzcGVjaWFsaXNhdGlvbnM7
IGN2LXF1YWxpZmllcyBhcHBsaWVkIHRvCi0vLyByZWZlcmVuY2VzIGhhdmUgbm8gZWZmZWN0IGFj
Y29yZGluZyB0byBbOC4zLjJwMV0sCi0vLyBDKysgQnVpbGRlciByZXF1aXJlcyB0aGVtIHRob3Vn
aCBhcyBpdCB0cmVhdHMgY3YtcXVhbGlmaWVkCi0vLyByZWZlcmVuY2VzIGFzIGRpc3RpbmN0IHR5
cGVzLi4uCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2x2YWx1ZV9yZWZlcmVuY2U8
VCZjb25zdD4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3Ry
dWN0IGlzX2x2YWx1ZV9yZWZlcmVuY2U8VCZ2b2xhdGlsZT4gOiBwdWJsaWMgdHJ1ZV90eXBle307
Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX2x2YWx1ZV9yZWZlcmVuY2U8VCZjb25z
dCB2b2xhdGlsZT4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci0jZW5kaWYKLQotI2VuZGlmCi0KLX0g
Ly8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9UVF9JU19SRUZFUkVOQ0VfSFBQ
X0lOQ0xVREVECi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyLmhwcCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21l
bWJlcl9mdW5jdGlvbl9wb2ludGVyLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MjIzMTk3ZjMzM2U3MTZmMjI5NDY2NzliNDJhYTQyMmIzNGIxMGExZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlci5o
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotCi0vLyAgKEMpIENvcHlyaWdodCBE
YXZlIEFicmFoYW1zLCBTdGV2ZSBDbGVhcnksIEJlbWFuIERhd2VzLCBIb3dhcmQKLS8vICBIaW5u
YW50ICYgSm9obiBNYWRkb2NrIDIwMDAuICAKLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlz
dHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8g
IFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0v
LyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVj
ZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLQotI2lmbmRlZiBCT09TVF9U
VF9JU19NRU1CRVJfRlVOQ1RJT05fUE9JTlRFUl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1Rf
VFRfSVNfTUVNQkVSX0ZVTkNUSU9OX1BPSU5URVJfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxi
b29zdC90eXBlX3RyYWl0cy9kZXRhaWwvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRh
aWwvd29ya2Fyb3VuZC5ocHA+Ci0KLSNpZiAhQk9PU1RfV09SS0FST1VORChfX0JPUkxBTkRDX18s
IDwgMHg2MDApICYmICFkZWZpbmVkKEJPT1NUX1RUX1RFU1RfTVNfRlVOQ19TSUdTKQotICAgLy8K
LSAgIC8vIE5vdGU6IHdlIHVzZSB0aGUgIndvcmthcm91bmQiIHZlcnNpb24gZm9yIE1TVkMgYmVj
YXVzZSBpdCB3b3JrcyBmb3IgCi0gICAvLyBfX3N0ZGNhbGwgZXRjIGZ1bmN0aW9uIHR5cGVzLCB3
aGVyZSBhcyB0aGUgcGFydGlhbCBzcGVjaWFsaXNhdGlvbgotICAgLy8gdmVyc2lvbiBkb2VzIG5v
dCBkbyBzby4KLSAgIC8vCi0jICAgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2lz
X21lbV9mdW5fcG9pbnRlcl9pbXBsLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0
cy9yZW1vdmVfY3YuaHBwPgotIyAgIGluY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludGVncmFs
X2NvbnN0YW50LmhwcD4KLSNlbHNlCi0jICAgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNf
cmVmZXJlbmNlLmhwcD4KLSMgICBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19hcnJheS5o
cHA+Ci0jICAgaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3llc19ub190eXBlLmhw
cD4KLSMgICBpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaXNfbWVtX2Z1bl9wb2lu
dGVyX3Rlc3Rlci5ocHA+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotI2lmIGRlZmlu
ZWQoIF9fQ09ERUdFQVJDX18gKQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19tZW1iZXJf
ZnVuY3Rpb25fcG9pbnRlciA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2lzX21l
bWJlcl9mdW5jdGlvbl9wb2ludGVyKCBUICk+IHt9OwotI2VsaWYgIUJPT1NUX1dPUktBUk9VTkQo
X19CT1JMQU5EQ19fLCA8IDB4NjAwKSAmJiAhZGVmaW5lZChCT09TVF9UVF9URVNUX01TX0ZVTkNf
U0lHUykKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19tZW1iZXJfZnVuY3Rpb25fcG9p
bnRlciAKLSAgIDogcHVibGljIDo6Ym9vc3Q6OmludGVncmFsX2NvbnN0YW50PGJvb2wsIDo6Ym9v
c3Q6OnR5cGVfdHJhaXRzOjppc19tZW1fZnVuX3BvaW50ZXJfaW1wbDx0eXBlbmFtZSByZW1vdmVf
Y3Y8VD46OnR5cGU+Ojp2YWx1ZT57fTsKLQotI2Vsc2UKLQotbmFtZXNwYWNlIGRldGFpbCB7Ci0K
LSNpZm5kZWYgX19CT1JMQU5EQ19fCi0KLXRlbXBsYXRlIDxib29sPgotc3RydWN0IGlzX21lbV9m
dW5fcG9pbnRlcl9zZWxlY3QKLXsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgcmVzdWx0
XyA6IHB1YmxpYyBmYWxzZV90eXBle307Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGlzX21l
bV9mdW5fcG9pbnRlcl9zZWxlY3Q8ZmFsc2U+Ci17Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IHN0cnVjdCByZXN1bHRfCi0gICAgewotI2lmIEJPT1NUX1dPUktBUk9VTkQoQk9PU1RfTVNWQ19G
VUxMX1ZFUiwgPj0gMTQwMDUwMDAwKQotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTo2MzM0KQotI2VuZGlmCi0gICAgICAgIHN0YXRpYyBUKiBtYWtlX3Q7Ci0g
ICAgICAgIHR5cGVkZWYgcmVzdWx0XzxUPiBzZWxmX3R5cGU7Ci0KLSAgICAgICAgQk9PU1RfU1RB
VElDX0NPTlNUQU5UKAotICAgICAgICAgICAgYm9vbCwgdmFsdWUgPSAoCi0gICAgICAgICAgICAg
ICAgMSA9PSBzaXplb2YoOjpib29zdDo6dHlwZV90cmFpdHM6OmlzX21lbV9mdW5fcG9pbnRlcl90
ZXN0ZXIoc2VsZl90eXBlOjptYWtlX3QpKQotICAgICAgICAgICAgKSk7Ci0jaWYgQk9PU1RfV09S
S0FST1VORChCT09TVF9NU1ZDX0ZVTExfVkVSLCA+PSAxNDAwNTAwMDApCi0jcHJhZ21hIHdhcm5p
bmcocG9wKQotI2VuZGlmCi0gICAgfTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3Ry
dWN0IGlzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyX2ltcGwKLSAgICA6IHB1YmxpYyBpc19tZW1f
ZnVuX3BvaW50ZXJfc2VsZWN0PCAKLSAgICAgIDo6Ym9vc3Q6OmlzX3JlZmVyZW5jZTxUPjo6dmFs
dWUgfHwgOjpib29zdDo6aXNfYXJyYXk8VD46OnZhbHVlPjo6dGVtcGxhdGUgcmVzdWx0XzxUPnt9
OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBpc19tZW1iZXJfZnVuY3Rpb25fcG9p
bnRlcl9pbXBsPFQmPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci0KLSNlbHNlIC8vIEJvcmxhbmQg
QysrCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IGlzX21lbWJlcl9mdW5jdGlvbl9w
b2ludGVyX2ltcGwKLXsKLSAgIHN0YXRpYyBUKiBtX3Q7Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RB
TlQoCi0gICAgICAgICAgICAgIGJvb2wsIHZhbHVlID0KLSAgICAgICAgICAgICAgICgxID09IHNp
emVvZih0eXBlX3RyYWl0czo6aXNfbWVtX2Z1bl9wb2ludGVyX3Rlc3RlcihtX3QpKSkgKTsKLX07
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IGlzX21lbWJlcl9mdW5jdGlvbl9wb2lu
dGVyX2ltcGw8VCY+Ci17Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSBm
YWxzZSk7Ci19OwotCi0jZW5kaWYKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfbWVtYmVyX2Z1bmN0
aW9uX3BvaW50ZXJfaW1wbDx2b2lkPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci0jaWZuZGVmIEJP
T1NUX05PX0NWX1ZPSURfU1BFQ0lBTElaQVRJT05TCi10ZW1wbGF0ZTw+IHN0cnVjdCBpc19tZW1i
ZXJfZnVuY3Rpb25fcG9pbnRlcl9pbXBsPHZvaWQgY29uc3Q+IDogcHVibGljIGZhbHNlX3R5cGV7
fTsKLXRlbXBsYXRlPD4gc3RydWN0IGlzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyX2ltcGw8dm9p
ZCBjb25zdCB2b2xhdGlsZT4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGU8PiBzdHJ1
Y3QgaXNfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXJfaW1wbDx2b2lkIHZvbGF0aWxlPiA6IHB1Ymxp
YyBmYWxzZV90eXBle307Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLXRlbXBs
YXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyCi0gICA6IHB1
YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCA6OmJvb3N0OjpkZXRhaWw6OmlzX21lbWJlcl9m
dW5jdGlvbl9wb2ludGVyX2ltcGw8VD46OnZhbHVlPnt9OwotCi0jZW5kaWYKLQotfSAvLyBuYW1l
c3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1RUX0lTX01FTUJFUl9GVU5DVElPTl9QT0lO
VEVSX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfbWVtYmVyX29iamVjdF9wb2ludGVyLmhwcCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lz
X21lbWJlcl9vYmplY3RfcG9pbnRlci5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGNiN2NmMTRhYmZjNmViYmY2MWNiOWMwMDA1YTBmY2E2MmUwZGM2Y2YuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfbWVtYmVyX29iamVjdF9wb2ludGVyLmhw
cAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgSm9o
biBNYWRkb2NrIDIwMDUuICAKLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9u
IGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24g
MS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0v
LyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0
dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNp
b24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLQotI2lmbmRlZiBCT09TVF9UVF9JU19NRU1C
RVJfT0JKRUNUX1BPSU5URVJfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0lTX01FTUJF
Ul9PQkpFQ1RfUE9JTlRFUl9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJh
aXRzL2lzX21lbWJlcl9wb2ludGVyLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9p
c19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlci5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLXRl
bXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfbWVtYmVyX29iamVjdF9wb2ludGVyIAotICAgOiBw
dWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgCi0gICA6OmJvb3N0Ojppc19tZW1iZXJfcG9p
bnRlcjxUPjo6dmFsdWUgJiYgITo6Ym9vc3Q6OmlzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyPFQ+
Ojp2YWx1ZT57fTsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1RU
X0lTX01FTUJFUl9GVU5DVElPTl9QT0lOVEVSX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfbWVt
YmVyX3BvaW50ZXIuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvdHlwZV90cmFpdHMvaXNfbWVtYmVyX3BvaW50ZXIuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5NzU3YWZjOTUwYWUyZGQ1NGJmMjM0OGJmYTU0Y2EyNGRhN2E4MTEyLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9wb2ludGVy
LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQg
RGF2ZSBBYnJhaGFtcywgU3RldmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywgCi0vLyAgICAgIEhvd2Fy
ZCBIaW5uYW50IGFuZCBKb2huIE1hZGRvY2sgMjAwMC4gCi0vLyAgKEMpIENvcHlyaWdodCBNYXQg
TWFyY3VzLCBKZXNzZSBKb25lcyBhbmQgQWRvYmUgU3lzdGVtcyBJbmMgMjAwMQotCi0vLyAgVXNl
LCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3Qg
U29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5
cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9u
LgotCi0vLyAgICBGaXhlZCBpc19wb2ludGVyLCBpc19yZWZlcmVuY2UsIGlzX2NvbnN0LCBpc192
b2xhdGlsZSwgaXNfc2FtZSwgCi0vLyAgICBpc19tZW1iZXJfcG9pbnRlciBiYXNlZCBvbiB0aGUg
U2ltdWxhdGVkIFBhcnRpYWwgU3BlY2lhbGl6YXRpb24gd29yayAKLS8vICAgIG9mIE1hdCBNYXJj
dXMgYW5kIEplc3NlIEpvbmVzLiBTZWUgIGh0dHA6Ly9vcGVuc291cmNlLmFkb2JlLmNvbSBvciAK
LS8vICAgIGh0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL2Jvb3N0L21lc3NhZ2UvNTQ0MSAK
LS8vICAgIFNvbWUgd29ya2Fyb3VuZHMgaW4gaGVyZSB1c2UgaWRlYXMgc3VnZ2VzdGVkIGZyb20g
IkdlbmVyaWM8UHJvZ3JhbW1pbmc+OiAKLS8vICAgIE1hcHBpbmdzIGJldHdlZW4gVHlwZXMgYW5k
IFZhbHVlcyIgCi0vLyAgICBieSBBbmRyZWkgQWxleGFuZHJlc2N1IChzZWUgaHR0cDovL3d3dy5j
dWouY29tL2V4cGVydHMvMTgxMC9hbGV4YW5kci5odG1sKS4KLQotCi0jaWZuZGVmIEJPT1NUX1RU
X0lTX01FTUJFUl9QT0lOVEVSX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9JU19NRU1C
RVJfUE9JTlRFUl9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJv
dW5kLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJfZnVuY3Rpb25f
cG9pbnRlci5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLSNpZiBkZWZpbmVkKCBfX0NPREVH
RUFSQ19fICkKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfbWVtYmVyX3BvaW50ZXIgOiBw
dWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc19tZW1iZXJfcG9pbnRlcihUKT57fTsK
LSNlbHNlCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX21lbWJlcl9wb2ludGVyIDogcHVi
bGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIDo6Ym9vc3Q6OmlzX21lbWJlcl9mdW5jdGlvbl9w
b2ludGVyPFQ+Ojp2YWx1ZT57fTsKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPiBzdHJ1Y3Qg
aXNfbWVtYmVyX3BvaW50ZXI8VSBUOjoqID4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci0KLSNpZiAh
Qk9PU1RfV09SS0FST1VORChfX01XRVJLU19fLDw9MHgzMDAzKSAmJiAhQk9PU1RfV09SS0FST1VO
RChfX0lCTUNQUF9fLCA8PTYwMCkKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPiBzdHJ1Y3Qg
aXNfbWVtYmVyX3BvaW50ZXI8VSBUOjoqY29uc3Q+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVt
cGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+IHN0cnVjdCBpc19tZW1iZXJfcG9pbnRlcjxVIFQ6Oipj
b25zdCB2b2xhdGlsZT4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgVT4gc3RydWN0IGlzX21lbWJlcl9wb2ludGVyPFUgVDo6KnZvbGF0aWxlPiA6IHB1Ymxp
YyB0cnVlX3R5cGV7fTsKLSNlbmRpZgotCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QK
LQotI2VuZGlmIC8vIEJPT1NUX1RUX0lTX01FTUJFUl9QT0lOVEVSX0hQUF9JTkNMVURFRApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90
cmFpdHMvaXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGUuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfbm90aHJvd19tb3ZlX2Fzc2ln
bmFibGUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmI1YmQ4YTZkMDg2ZjQ5
YTIyNGZhNzRkYjk3NmVkYTcyNjZjN2JhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2lzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDgxICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgU3RldmUgQ2xlYXJ5LCBCZW1h
biBEYXdlcywgSG93YXJkIEhpbm5hbnQgJiBKb2huIE1hZGRvY2sgMjAwMC4KLS8vICAoQykgQ29w
eXJpZ2h0IEVyaWMgRnJpZWRtYW4gMjAwMi0yMDAzLgotLy8gIChDKSBDb3B5cmlnaHQgQW50b255
IFBvbHVraGluIDIwMTMuCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBh
cmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEu
MC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8g
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9u
IGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX0lTX05PVEhST1df
TU9WRV9BU1NJR05BQkxFX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9JU19OT1RIUk9X
X01PVkVfQVNTSUdOQUJMRV9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaGFzX3RyaXZpYWxfbW92ZV9hc3NpZ24u
aHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2hhc19ub3Rocm93X2Fzc2lnbi5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfYXJyYXkuaHBwPgotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2lzX3JlZmVyZW5jZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdXRpbGl0
eS9lbmFibGVfaWYuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2RlY2x2YWwuaHBw
PgotCi1uYW1lc3BhY2UgYm9vc3QgewotCi0jaWZkZWYgQk9PU1RfSVNfTk9USFJPV19NT1ZFX0FT
U0lHTgotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19ub3Rocm93X21vdmVfYXNzaWdu
YWJsZSA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBCT09TVF9JU19OT1RIUk9XX01P
VkVfQVNTSUdOKFQpPnt9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19ub3Rocm93X21v
dmVfYXNzaWduYWJsZTxUIGNvbnN0PiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8
Y2xhc3MgVD4gc3RydWN0IGlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPFQgdm9sYXRpbGU+IDog
cHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfbm90aHJv
d19tb3ZlX2Fzc2lnbmFibGU8VCBjb25zdCB2b2xhdGlsZT4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9
OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxU
Jj4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1JW
QUxVRV9SRUZFUkVOQ0VTKSAKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfbm90aHJvd19t
b3ZlX2Fzc2lnbmFibGU8VCYmPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci0jZW5kaWYKLQotI2Vs
aWYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfTk9FWENFUFQpICYmICFkZWZpbmVkKEJPT1NUX05P
X1NGSU5BRV9FWFBSKSAmJiAhQk9PU1RfV09SS0FST1VORChCT09TVF9HQ0NfVkVSU0lPTiwgPCA0
MDcwMCkKLQotbmFtZXNwYWNlIGRldGFpbHsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEVu
YWJsZSA9IHZvaWQ+Ci1zdHJ1Y3QgZmFsc2Vfb3JfY3BwMTFfbm9leGNlcHRfbW92ZV9hc3NpZ25h
YmxlOiBwdWJsaWMgOjpib29zdDo6ZmFsc2VfdHlwZSB7fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+
Ci1zdHJ1Y3QgZmFsc2Vfb3JfY3BwMTFfbm9leGNlcHRfbW92ZV9hc3NpZ25hYmxlIDwKLSAgICAg
ICAgVCwKLSAgICAgICAgdHlwZW5hbWUgOjpib29zdDo6ZW5hYmxlX2lmX2M8c2l6ZW9mKFQpICYm
IEJPT1NUX05PRVhDRVBUX0VYUFIoOjpib29zdDo6ZGVjbHZhbDxUJj4oKSA9IDo6Ym9vc3Q6OmRl
Y2x2YWw8VD4oKSk+Ojp0eXBlCi0gICAgPiA6IHB1YmxpYyA6OmJvb3N0OjppbnRlZ3JhbF9jb25z
dGFudDxib29sLCBCT09TVF9OT0VYQ0VQVF9FWFBSKDo6Ym9vc3Q6OmRlY2x2YWw8VCY+KCkgPSA6
OmJvb3N0OjpkZWNsdmFsPFQ+KCkpPgote307Ci0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1z
dHJ1Y3QgaXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGUgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3Rh
bnQ8Ym9vbCwgOjpib29zdDo6ZGV0YWlsOjpmYWxzZV9vcl9jcHAxMV9ub2V4Y2VwdF9tb3ZlX2Fz
c2lnbmFibGU8VD46OnZhbHVlPnt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX25v
dGhyb3dfbW92ZV9hc3NpZ25hYmxlPFQgY29uc3Q+IDogcHVibGljIDo6Ym9vc3Q6OmZhbHNlX3R5
cGUge307Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX25vdGhyb3dfbW92ZV9hc3NpZ25h
YmxlPFQgY29uc3Qgdm9sYXRpbGU+IDogcHVibGljIDo6Ym9vc3Q6OmZhbHNlX3R5cGV7fTsKLXRl
bXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8VCB2b2xh
dGlsZT4gOiBwdWJsaWMgOjpib29zdDo6ZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPGNsYXNzIFQ+
IHN0cnVjdCBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxUJj4gOiBwdWJsaWMgOjpib29zdDo6
ZmFsc2VfdHlwZXt9OwotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9SVkFMVUVfUkVGRVJFTkNFUwot
dGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxUJiY+
IDogcHVibGljIDo6Ym9vc3Q6OmZhbHNlX3R5cGV7fTsKLSNlbmRpZgotCi0jZWxzZQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZSA6IHB1Ymxp
YyBpbnRlZ3JhbF9jb25zdGFudDxib29sLAotICAgKDo6Ym9vc3Q6Omhhc190cml2aWFsX21vdmVf
YXNzaWduPFQ+Ojp2YWx1ZSB8fCA6OmJvb3N0OjpoYXNfbm90aHJvd19hc3NpZ248VD46OnZhbHVl
KSAmJiAgISA6OmJvb3N0Ojppc19hcnJheTxUPjo6dmFsdWU+e307Ci0KLSNlbmRpZgotCi0KLXRl
bXBsYXRlIDw+IHN0cnVjdCBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTx2b2lkPiA6IHB1Ymxp
YyBmYWxzZV90eXBle307Ci0jaWZuZGVmIEJPT1NUX05PX0NWX1ZPSURfU1BFQ0lBTElaQVRJT05T
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8dm9pZCBjb25z
dD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX25vdGhyb3df
bW92ZV9hc3NpZ25hYmxlPHZvaWQgY29uc3Qgdm9sYXRpbGU+IDogcHVibGljIGZhbHNlX3R5cGV7
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTx2b2lkIHZv
bGF0aWxlPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2Ug
Ym9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1RUX0lTX05PVEhST1dfTU9WRV9BU1NJR05BQkxFX0hQ
UF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGUuaHBwIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNf
bm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGUuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwZDVkNTdhMGY4ZTBlNTNmYmE2ODA2NzAxZDY0YTA2M2FhM2M4NWM0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX25vdGhyb3dfbW92ZV9jb25zdHJ1
Y3RpYmxlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLQotLy8gIChDKSBDb3B5
cmlnaHQgU3RldmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywgSG93YXJkIEhpbm5hbnQgJiBKb2huIE1h
ZGRvY2sgMjAwMC4KLS8vICAoQykgQ29weXJpZ2h0IEVyaWMgRnJpZWRtYW4gMjAwMi0yMDAzLgot
Ly8gIChDKSBDb3B5cmlnaHQgQW50b255IFBvbHVraGluIDIwMTMuCi0vLyAgVXNlLCBtb2RpZmlj
YXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUg
TGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNF
XzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8w
LnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRz
IGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZu
ZGVmIEJPT1NUX1RUX0lTX05PVEhST1dfTU9WRV9DT05TVFJVQ1RJQkxFX0hQUF9JTkNMVURFRAot
I2RlZmluZSBCT09TVF9UVF9JU19OT1RIUk9XX01PVkVfQ09OU1RSVUNUSUJMRV9IUFBfSU5DTFVE
RUQKLQotI2luY2x1ZGUgPGNzdGRkZWY+IC8vIHNpemVfdAotI2luY2x1ZGUgPGJvb3N0L2NvbmZp
Zy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50cmluc2ljcy5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50ZWdyYWxfY29uc3RhbnQuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQotI2lmZGVmIEJPT1NUX0lTX05PVEhST1df
TU9WRV9DT05TVFJVQ1QKLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+
Ci1zdHJ1Y3QgaXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGUgOiBwdWJsaWMgaW50ZWdyYWxf
Y29uc3RhbnQ8Ym9vbCwgQk9PU1RfSVNfTk9USFJPV19NT1ZFX0NPTlNUUlVDVChUKT57fTsKLQot
dGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTx2
b2xhdGlsZSBUPiA6IHB1YmxpYyA6OmJvb3N0OjpmYWxzZV90eXBlIHt9OwotdGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCBpc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxjb25zdCB2b2xhdGls
ZSBUPiA6IHB1YmxpYyA6OmJvb3N0OjpmYWxzZV90eXBle307Ci0KLSNlbGlmICFkZWZpbmVkKEJP
T1NUX05PX0NYWDExX05PRVhDRVBUKSAmJiAhZGVmaW5lZChCT09TVF9OT19TRklOQUVfRVhQUikg
JiYgIUJPT1NUX1dPUktBUk9VTkQoQk9PU1RfR0NDX1ZFUlNJT04sIDwgNDA4MDApCi0KLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9kZWNsdmFsLmhwcD4KLSNpbmNsdWRlIDxib29zdC91dGls
aXR5L2VuYWJsZV9pZi5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdHsgbmFtZXNwYWNlIGRldGFpbHsK
LQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEVuYWJsZSA9IHZvaWQ+Ci1zdHJ1Y3QgZmFsc2Vf
b3JfY3BwMTFfbm9leGNlcHRfbW92ZV9jb25zdHJ1Y3RpYmxlOiBwdWJsaWMgOjpib29zdDo6ZmFs
c2VfdHlwZSB7fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgZmFsc2Vfb3JfY3BwMTFf
bm9leGNlcHRfbW92ZV9jb25zdHJ1Y3RpYmxlIDwKLSAgICAgICAgVCwKLSAgICAgICAgdHlwZW5h
bWUgOjpib29zdDo6ZW5hYmxlX2lmX2M8c2l6ZW9mKFQpICYmIEJPT1NUX05PRVhDRVBUX0VYUFIo
VCg6OmJvb3N0OjpkZWNsdmFsPFQ+KCkpKT46OnR5cGUKLSAgICA+IDogcHVibGljIDo6Ym9vc3Q6
OmludGVncmFsX2NvbnN0YW50PGJvb2wsIEJPT1NUX05PRVhDRVBUX0VYUFIoVCg6OmJvb3N0Ojpk
ZWNsdmFsPFQ+KCkpKT4KLXt9OwotCi19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNf
bm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGUKLSAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50
PGJvb2wsIDo6Ym9vc3Q6OmRldGFpbDo6ZmFsc2Vfb3JfY3BwMTFfbm9leGNlcHRfbW92ZV9jb25z
dHJ1Y3RpYmxlPFQ+Ojp2YWx1ZT57fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTx2b2xhdGlsZSBUPiA6IHB1YmxpYyA6OmJvb3N0Ojpm
YWxzZV90eXBlIHt9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19ub3Rocm93X21vdmVf
Y29uc3RydWN0aWJsZTxjb25zdCB2b2xhdGlsZSBUPiA6IHB1YmxpYyA6OmJvb3N0OjpmYWxzZV90
eXBle307Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4gc3RydWN0IGlzX25vdGhy
b3dfbW92ZV9jb25zdHJ1Y3RpYmxlPFRbTl0+IDogcHVibGljIDo6Ym9vc3Q6OmZhbHNlX3R5cGV7
fTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGli
bGU8VFtdPiA6IHB1YmxpYyA6OmJvb3N0OjpmYWxzZV90eXBle307Ci0KLSNlbHNlCi0KLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9tb3ZlX2NvbnN0cnVjdG9yLmhwcD4K
LSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9oYXNfbm90aHJvd19jb3B5LmhwcD4KLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19hcnJheS5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdHsK
LQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGli
bGUKLSAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsCi0gICAoOjpib29zdDo6aGFz
X3RyaXZpYWxfbW92ZV9jb25zdHJ1Y3RvcjxUPjo6dmFsdWUgfHwgOjpib29zdDo6aGFzX25vdGhy
b3dfY29weTxUPjo6dmFsdWUpICYmICE6OmJvb3N0Ojppc19hcnJheTxUPjo6dmFsdWU+Ci17fTsK
LQotI2VuZGlmCi0KLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19ub3Rocm93X21vdmVfY29uc3RydWN0
aWJsZTx2b2lkPiA6IGZhbHNlX3R5cGV7fTsKLSNpZm5kZWYgQk9PU1RfTk9fQ1ZfVk9JRF9TUEVD
SUFMSVpBVElPTlMKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19ub3Rocm93X21vdmVfY29uc3RydWN0
aWJsZTx2b2lkIGNvbnN0PiA6IGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTx2b2lkIHZvbGF0aWxlPiA6IGZhbHNlX3R5cGV7fTsK
LXRlbXBsYXRlIDw+IHN0cnVjdCBpc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTx2b2lkIGNv
bnN0IHZvbGF0aWxlPiA6IGZhbHNlX3R5cGV7fTsKLSNlbmRpZgotLy8gUmVmZXJlbmNlcyBhcmUg
YWx3YXlzIHRyaXZpYWxseSBjb25zdHJ1Y3RpYmxlLCBldmVuIGlmIHRoZSB0aGluZyB0aGV5IHJl
ZmVyZW5jZSBpcyBub3Q6Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX25vdGhyb3dfbW92
ZV9jb25zdHJ1Y3RpYmxlPFQmPiA6IHB1YmxpYyA6OmJvb3N0Ojp0cnVlX3R5cGV7fTsKLSNpZm5k
ZWYgQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMKLXRlbXBsYXRlIDxjbGFzcyBUPiBz
dHJ1Y3QgaXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VCYmPiA6IHB1YmxpYyA6OmJvb3N0
Ojp0cnVlX3R5cGV7fTsKLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYg
Ly8gQk9PU1RfVFRfSVNfTk9USFJPV19NT1ZFX0NPTlNUUlVDVElCTEVfSFBQX0lOQ0xVREVECmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBl
X3RyYWl0cy9pc19vYmplY3QuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfb2JqZWN0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZmM5ZDJmMjVkMzI5NmE0ZjZkY2EzOGRmMzNhZWI3YzE4MGYwOTA2Yy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19vYmplY3QuaHBwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotCi0vLyAgKEMpIENvcHlyaWdodCBTdGV2ZSBDbGVh
cnksIEJlbWFuIERhd2VzLCBIb3dhcmQgSGlubmFudCAmIEpvaG4gTWFkZG9jayAyMDAwLgotLy8g
IFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJv
b3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRh
dGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9JU19PQkpFQ1RfSFBQX0lOQ0xVREVECi0jZGVmaW5l
IEJPT1NUX1RUX0lTX09CSkVDVF9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZp
Zy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfcmVmZXJlbmNlLmhwcD4KLSNp
bmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc192b2lkLmhwcD4KLSNpbmNsdWRlIDxib29zdC90
eXBlX3RyYWl0cy9pc19mdW5jdGlvbi5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfb2JqZWN0Ci0gICA6IHB1YmxpYyAKLSAgICAgIGludGVn
cmFsX2NvbnN0YW50PAotICAgICAgICAgYm9vbCwgCi0gICAgICAgICAhIDo6Ym9vc3Q6OmlzX3Jl
ZmVyZW5jZTxUPjo6dmFsdWUgJiYgISA6OmJvb3N0Ojppc192b2lkPFQ+Ojp2YWx1ZSAmJiAhIDo6
Ym9vc3Q6OmlzX2Z1bmN0aW9uPFQ+Ojp2YWx1ZSA+IAote307Ci0KLX0gLy8gbmFtZXNwYWNlIGJv
b3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9UVF9JU19PQkpFQ1RfSFBQX0lOQ0xVREVECmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0
cy9pc19wb2QuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
dHlwZV90cmFpdHMvaXNfcG9kLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJk
MTk2MjU3YWM5MmUyNThhNmVhZjNlN2RjYzdiZGZiYTQxM2I4OS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19wb2QuaHBwCisrKyAvZGV2L251bGwKQEAgLTEs
NTkgKzAsMCBAQAotCi0vLyAgKEMpIENvcHlyaWdodCBTdGV2ZSBDbGVhcnksIEJlbWFuIERhd2Vz
LCBIb3dhcmQgSGlubmFudCAmIEpvaG4gTWFkZG9jayAyMDAwLgotLy8gIFVzZSwgbW9kaWZpY2F0
aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExp
Y2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8x
XzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50
eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBm
b3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRl
ZiBCT09TVF9UVF9JU19QT0RfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0lTX1BPRF9I
UFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGNzdGRkZWY+IC8vIHNpemVfdAotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVf
dHJhaXRzL2lzX3ZvaWQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NjYWxh
ci5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50cmluc2ljcy5ocHA+Ci0KLSNp
ZmRlZiBfX1NVTlBST19DQwotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmN0aW9u
LmhwcD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLQotI2lmbmRlZiBCT09TVF9JU19Q
T0QKLSNkZWZpbmUgQk9PU1RfSU5URVJOQUxfSVNfUE9EKFQpIGZhbHNlCi0jZWxzZQotI2RlZmlu
ZSBCT09TVF9JTlRFUk5BTF9JU19QT0QoVCkgQk9PU1RfSVNfUE9EKFQpCi0jZW5kaWYKLQotbmFt
ZXNwYWNlIGJvb3N0IHsKLQotLy8gZm9yd2FyZCBkZWNsYXJhdGlvbiwgbmVlZGVkIGJ5ICdpc19w
b2RfYXJyYXlfaGVscGVyJyB0ZW1wbGF0ZSBiZWxvdwotdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBz
dHJ1Y3QgaXNfUE9EOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IGlzX3BvZAotOiBw
dWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgOjpib29zdDo6aXNfc2NhbGFyPFQ+Ojp2YWx1
ZSB8fCA6OmJvb3N0Ojppc192b2lkPFQ+Ojp2YWx1ZSB8fCBCT09TVF9JTlRFUk5BTF9JU19QT0Qo
VCk+Ci17fTsKLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX0FSUkFZX1RZUEVfU1BFQ0lBTElaQVRJ
T05TKQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IHN6PiBzdHJ1Y3QgaXNfcG9k
PFRbc3pdPiA6IHB1YmxpYyBpc19wb2Q8VD57fTsKLSNlbmRpZgotCi0KLS8vIHRoZSBmb2xsb3dp
bmcgaGVscCBjb21waWxlcnMgd2l0aG91dCBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIHN1cHBvcnQ6
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19wb2Q8dm9pZD4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci0K
LSNpZm5kZWYgQk9PU1RfTk9fQ1ZfVk9JRF9TUEVDSUFMSVpBVElPTlMKLXRlbXBsYXRlPD4gc3Ry
dWN0IGlzX3BvZDx2b2lkIGNvbnN0PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlPD4g
c3RydWN0IGlzX3BvZDx2b2lkIGNvbnN0IHZvbGF0aWxlPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsK
LXRlbXBsYXRlPD4gc3RydWN0IGlzX3BvZDx2b2lkIHZvbGF0aWxlPiA6IHB1YmxpYyB0cnVlX3R5
cGV7fTsKLSNlbmRpZgotCi10ZW1wbGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgaXNfUE9EIDogcHVibGlj
IGlzX3BvZDxUPnt9OwotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jdW5kZWYgQk9PU1RfSU5U
RVJOQUxfSVNfUE9ECi0KLSNlbmRpZiAvLyBCT09TVF9UVF9JU19QT0RfSFBQX0lOQ0xVREVECmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBl
X3RyYWl0cy9pc19wb2ludGVyLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3BvaW50ZXIuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0NGIwNmMyMjdlZDNmNzVhNDYxODE0ZmI3ZDQ2Y2RkMThjMjdhOGQ0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3BvaW50ZXIuaHBwCisr
KyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotCi0vLyAgKEMpIENvcHlyaWdodCBEYXZlIEFi
cmFoYW1zLCBTdGV2ZSBDbGVhcnksIEJlbWFuIERhd2VzLCAKLS8vICAgICAgSG93YXJkIEhpbm5h
bnQgYW5kIEpvaG4gTWFkZG9jayAyMDAwLiAKLS8vICAoQykgQ29weXJpZ2h0IE1hdCBNYXJjdXMs
IEplc3NlIEpvbmVzIGFuZCBBZG9iZSBTeXN0ZW1zIEluYyAyMDAxCi0KLS8vICBVc2UsIG1vZGlm
aWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2Fy
ZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VO
U0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8x
XzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFp
dHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLS8v
ICAgIEZpeGVkIGlzX3BvaW50ZXIsIGlzX3JlZmVyZW5jZSwgaXNfY29uc3QsIGlzX3ZvbGF0aWxl
LCBpc19zYW1lLCAKLS8vICAgIGlzX21lbWJlcl9wb2ludGVyIGJhc2VkIG9uIHRoZSBTaW11bGF0
ZWQgUGFydGlhbCBTcGVjaWFsaXphdGlvbiB3b3JrIAotLy8gICAgb2YgTWF0IE1hcmN1cyBhbmQg
SmVzc2UgSm9uZXMuIFNlZSAgaHR0cDovL29wZW5zb3VyY2UuYWRvYmUuY29tIG9yIAotLy8gICAg
aHR0cDovL2dyb3Vwcy55YWhvby5jb20vZ3JvdXAvYm9vc3QvbWVzc2FnZS81NDQxIAotLy8gICAg
U29tZSB3b3JrYXJvdW5kcyBpbiBoZXJlIHVzZSBpZGVhcyBzdWdnZXN0ZWQgZnJvbSAiR2VuZXJp
YzxQcm9ncmFtbWluZz46IAotLy8gICAgTWFwcGluZ3MgYmV0d2VlbiBUeXBlcyBhbmQgVmFsdWVz
IiAKLS8vICAgIGJ5IEFuZHJlaSBBbGV4YW5kcmVzY3UgKHNlZSBodHRwOi8vd3d3LmN1ai5jb20v
ZXhwZXJ0cy8xODEwL2FsZXhhbmRyLmh0bWwpLgotCi0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfUE9J
TlRFUl9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSVNfUE9JTlRFUl9IUFBfSU5DTFVE
RUQKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludGVncmFsX2NvbnN0YW50LmhwcD4K
LQotbmFtZXNwYWNlIGJvb3N0IHsKLQotI2lmIGRlZmluZWQoIF9fQ09ERUdFQVJDX18gKQotdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19wb2ludGVyIDogcHVibGljIGludGVncmFsX2NvbnN0
YW50PGJvb2wsIF9faXNfcG9pbnRlcihUKT57fTsKLSNlbHNlCi10ZW1wbGF0ZSA8Y2xhc3MgVD4g
c3RydWN0IGlzX3BvaW50ZXIgOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBpc19wb2ludGVyPFQqPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgaXNfcG9pbnRlcjxUKmNvbnN0PiA6IHB1YmxpYyB0cnVlX3R5cGV7
fTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfcG9pbnRlcjxUKmNvbnN0IHZvbGF0aWxl
PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfcG9p
bnRlcjxUKnZvbGF0aWxlPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLQotI2lmZGVmIEJPT1NUX01T
VkMKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfcG9pbnRlcjxUIGNvbnN0PiA6IHB1Ymxp
YyBpc19wb2ludGVyPFQ+e307Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX3BvaW50ZXI8
VCBjb25zdCB2b2xhdGlsZT4gOiBwdWJsaWMgaXNfcG9pbnRlcjxUPnt9OwotdGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCBpc19wb2ludGVyPFQgdm9sYXRpbGU+IDogcHVibGljIGlzX3BvaW50ZXI8
VD57fTsKLSNlbmRpZgotCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlm
IC8vIEJPT1NUX1RUX0lTX1BPSU5URVJfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19wb2x5bW9y
cGhpYy5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBl
X3RyYWl0cy9pc19wb2x5bW9ycGhpYy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDcyMmQ4YjQ2YjJkNWM5ZTg2OTExYzUxZWQ5YTczNTY5OWJjZThhZDcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfcG9seW1vcnBoaWMuaHBwCisrKyAvZGV2
L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IEpvaG4gTWFkZG9jayAy
MDAwLiAKLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0
IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3
dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5n
IGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfUE9MWU1PUlBISUNfSFBQCi0j
ZGVmaW5lIEJPT1NUX1RUX0lTX1BPTFlNT1JQSElDX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvdHlw
ZV90cmFpdHMvaW50cmluc2ljcy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50
ZWdyYWxfY29uc3RhbnQuaHBwPgotI2lmbmRlZiBCT09TVF9JU19QT0xZTU9SUEhJQwotI2luY2x1
ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2NsYXNzLmhwcD4KLSNlbmRpZgotI2luY2x1ZGUgPGJv
b3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQotI2lmIGRlZmluZWQoQk9PU1RfTVNWQykgJiYg
KEJPT1NUX01TVkMgPj0gMTcwMCkKLSNwcmFnbWEgd2FybmluZyhwdXNoKQotI3ByYWdtYSB3YXJu
aW5nKGRpc2FibGU6NDI1MCkKLSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3R7Ci0KLSNpZm5kZWYg
Qk9PU1RfSVNfUE9MWU1PUlBISUMKLQotbmFtZXNwYWNlIGRldGFpbHsKLQotdGVtcGxhdGUgPGNs
YXNzIFQ+Ci1zdHJ1Y3QgaXNfcG9seW1vcnBoaWNfaW1wMQotewotIyBpZiBCT09TVF9XT1JLQVJP
VU5EKF9fTVdFUktTX18sIDw9IDB4MjQwNykgLy8gQ1dQcm83IHNob3VsZCByZXR1cm4gZmFsc2Ug
YWx3YXlzLgotICAgIHR5cGVkZWYgY2hhciBkMSwgKCZkMilbMl07Ci0jIGVsc2UgCi0gICBzdHJ1
Y3QgZDEgOiBwdWJsaWMgVAotICAgewotICAgICAgZDEoKTsKLSMgIGlmICFkZWZpbmVkKF9fR05V
Q19fKSAvLyB0aGlzIHJhaXNlcyB3YXJuaW5ncyB3aXRoIHNvbWUgY2xhc3NlcywgYW5kIGJ1eXMg
bm90aGluZyB3aXRoIEdDQwotICAgICAgfmQxKCl0aHJvdygpOwotIyAgZW5kaWYgCi0gICAgICBj
aGFyIHBhZGRpbmdbMjU2XTsKLSAgIHByaXZhdGU6Ci0gICAgICAvLyBrZWVwIHNvbWUgcGlja3kg
Y29tcGlsZXJzIGhhcHB5OgotICAgICAgZDEoY29uc3QgZDEmKTsKLSAgICAgIGQxJiBvcGVyYXRv
cj0oY29uc3QgZDEmKTsKLSAgIH07Ci0gICBzdHJ1Y3QgZDIgOiBwdWJsaWMgVAotICAgewotICAg
ICAgZDIoKTsKLSAgICAgIHZpcnR1YWwgfmQyKCl0aHJvdygpOwotIyAgaWYgIWRlZmluZWQoQk9P
U1RfTVNWQykgJiYgIWRlZmluZWQoX19JQ0wpCi0gICAgICAvLyBmb3Igc29tZSByZWFzb24gdGhp
cyBtZXNzZXMgdXAgVkMrKyB3aGVuIFQgaGFzIHZpcnR1YWwgYmFzZXMsCi0gICAgICAvLyBwcm9i
YWJseSBsaWtld2lzZSBmb3IgY29tcGlsZXJzIHRoYXQgdXNlIHRoZSBzYW1lIEFCSToKLSAgICAg
IHN0cnVjdCB1bmlxdWV7fTsKLSAgICAgIHZpcnR1YWwgdm9pZCB1bmlxdWVfbmFtZV90b19ib29z
dDU0ODc2MjkodW5pcXVlKik7Ci0jICBlbmRpZgotICAgICAgY2hhciBwYWRkaW5nWzI1Nl07Ci0g
ICBwcml2YXRlOgotICAgICAgLy8ga2VlcCBzb21lIHBpY2t5IGNvbXBpbGVycyBoYXBweToKLSAg
ICAgIGQyKGNvbnN0IGQyJik7Ci0gICAgICBkMiYgb3BlcmF0b3I9KGNvbnN0IGQyJik7Ci0gICB9
OwotIyBlbmRpZiAKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IChzaXpl
b2YoZDIpID09IHNpemVvZihkMSkpKTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3Qg
aXNfcG9seW1vcnBoaWNfaW1wMTxUIGNvbnN0PiA6IHB1YmxpYyBpc19wb2x5bW9ycGhpY19pbXAx
PFQ+e307Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX3BvbHltb3JwaGljX2ltcDE8VCBj
b25zdCB2b2xhdGlsZT4gOiBwdWJsaWMgaXNfcG9seW1vcnBoaWNfaW1wMTxUPnt9OwotdGVtcGxh
dGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19wb2x5bW9ycGhpY19pbXAxPFQgdm9sYXRpbGU+IDogcHVi
bGljIGlzX3BvbHltb3JwaGljX2ltcDE8VD57fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1
Y3QgaXNfcG9seW1vcnBoaWNfaW1wMgotewotICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2ws
IHZhbHVlID0gZmFsc2UpOwotfTsKLQotdGVtcGxhdGUgPGJvb2wgaXNfY2xhc3M+Ci1zdHJ1Y3Qg
aXNfcG9seW1vcnBoaWNfc2VsZWN0b3IKLXsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgc3Ry
dWN0IHJlYmluZAotICAgewotICAgICAgdHlwZWRlZiBpc19wb2x5bW9ycGhpY19pbXAyPFQ+IHR5
cGU7Ci0gICB9OwotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBpc19wb2x5bW9ycGhpY19zZWxl
Y3Rvcjx0cnVlPgotewotICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICBzdHJ1Y3QgcmViaW5kCi0g
ICB7Ci0gICAgICB0eXBlZGVmIGlzX3BvbHltb3JwaGljX2ltcDE8VD4gdHlwZTsKLSAgIH07Ci19
OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19wb2x5bW9ycGhpY19pbXAKLXsKLSAg
IHR5cGVkZWYgaXNfcG9seW1vcnBoaWNfc2VsZWN0b3I8IDo6Ym9vc3Q6OmlzX2NsYXNzPFQ+Ojp2
YWx1ZT4gc2VsZWN0b3I7Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHNlbGVjdG9yOjp0ZW1wbGF0ZSBy
ZWJpbmQ8VD4gYmluZGVyOwotICAgdHlwZWRlZiB0eXBlbmFtZSBiaW5kZXI6OnR5cGUgaW1wX3R5
cGU7Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSBpbXBfdHlwZTo6dmFs
dWUpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLXRlbXBsYXRlIDxjbGFzcyBUPiBz
dHJ1Y3QgaXNfcG9seW1vcnBoaWMgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgOjpi
b29zdDo6ZGV0YWlsOjppc19wb2x5bW9ycGhpY19pbXA8VD46OnZhbHVlPiB7fTsKLQotI2Vsc2Ug
Ly8gQk9PU1RfSVNfUE9MWU1PUlBISUMKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19w
b2x5bW9ycGhpYyA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBCT09TVF9JU19QT0xZ
TU9SUEhJQyhUKT4ge307Ci0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jaWYg
ZGVmaW5lZChCT09TVF9NU1ZDKSAmJiAoQk9PU1RfTVNWQyA+PSAxNzAwKQotI3ByYWdtYSB3YXJu
aW5nKHBvcCkKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3JlZmVyZW5jZS5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19y
ZWZlcmVuY2UuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWYwYTYzMjA0ZWEw
MWU3ZDZmZGFjMGMxNDVkMDhlY2Q3MjEzNzY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3R5cGVfdHJhaXRzL2lzX3JlZmVyZW5jZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMCAr
MCwwIEBACi0KLS8vICAoQykgQ29weXJpZ2h0IERhdmUgQWJyYWhhbXMsIFN0ZXZlIENsZWFyeSwg
QmVtYW4gRGF3ZXMsIAotLy8gICAgICBIb3dhcmQgSGlubmFudCBhbmQgSm9obiBNYWRkb2NrIDIw
MDAsIDIwMTAuIAotLy8gIChDKSBDb3B5cmlnaHQgTWF0IE1hcmN1cywgSmVzc2UgSm9uZXMgYW5k
IEFkb2JlIFN5c3RlbXMgSW5jIDIwMDEKLQotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0
cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAg
VmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNv
cHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8v
ICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNl
bnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9J
U19SRUZFUkVOQ0VfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0lTX1JFRkVSRU5DRV9I
UFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2x2YWx1ZV9yZWZl
cmVuY2UuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3J2YWx1ZV9yZWZlcmVu
Y2UuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0
IGlzX3JlZmVyZW5jZSAKLSAgIDogcHVibGljIAotICAgaW50ZWdyYWxfY29uc3RhbnQ8Ci0gICAg
ICBib29sLCAKLSAgICAgIDo6Ym9vc3Q6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlIHx8
IDo6Ym9vc3Q6OmlzX3J2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlPgote307Ci0KLX0gLy8gbmFt
ZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9UVF9JU19SRUZFUkVOQ0VfSFBQX0lOQ0xV
REVECi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3R5cGVfdHJhaXRzL2lzX3J2YWx1ZV9yZWZlcmVuY2UuaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfcnZhbHVlX3JlZmVyZW5j
ZS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0OGVkYjUxNDBlMzBmODc4Yzcx
ZjkzZmJhMzEzZjI4YWFmZDFjM2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlw
ZV90cmFpdHMvaXNfcnZhbHVlX3JlZmVyZW5jZS5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNSAr
MCwwIEBACi0KLS8vICAoQykgQ29weXJpZ2h0IEpvaG4gTWFkZG9jayAyMDEwLiAKLS8vICBVc2Us
IG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxl
IExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlw
ZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24u
Ci0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfUlZBTFVFX1JFRkVSRU5DRV9IUFBfSU5DTFVERUQKLSNk
ZWZpbmUgQk9PU1RfVFRfSVNfUlZBTFVFX1JFRkVSRU5DRV9IUFBfSU5DTFVERUQKLQotI2luY2x1
ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50ZWdy
YWxfY29uc3RhbnQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IGlzX3J2YWx1ZV9yZWZlcmVuY2UgOiBwdWJsaWMgZmFsc2VfdHlwZSB7fTsKLSNp
Zm5kZWYgQk9PU1RfTk9fQ1hYMTFfUlZBTFVFX1JFRkVSRU5DRVMKLXRlbXBsYXRlIDxjbGFzcyBU
PiBzdHJ1Y3QgaXNfcnZhbHVlX3JlZmVyZW5jZTxUJiY+IDogcHVibGljIHRydWVfdHlwZSB7fTsK
LSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfVFRfSVNf
UkVGRVJFTkNFX0hQUF9JTkNMVURFRAotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTZmNGIyYjFhMzIwMTY0NmU1OTY1MmQy
ZmJhYTZlYzZiZjBmNmU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJh
aXRzL2lzX3NhbWUuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotCi0vLyAgKEMp
IENvcHlyaWdodCBEYXZlIEFicmFoYW1zLCBTdGV2ZSBDbGVhcnksIEJlbWFuIERhd2VzLCAKLS8v
ICAgICAgSG93YXJkIEhpbm5hbnQgYW5kIEpvaG4gTWFkZG9jayAyMDAwLiAKLS8vICAoQykgQ29w
eXJpZ2h0IE1hdCBNYXJjdXMsIEplc3NlIEpvbmVzIGFuZCBBZG9iZSBTeXN0ZW1zIEluYyAyMDAx
Ci0KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRv
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29t
cGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRv
Y3VtZW50YXRpb24uCi0KLS8vICAgIEZpeGVkIGlzX3BvaW50ZXIsIGlzX3JlZmVyZW5jZSwgaXNf
Y29uc3QsIGlzX3ZvbGF0aWxlLCBpc19zYW1lLCAKLS8vICAgIGlzX21lbWJlcl9wb2ludGVyIGJh
c2VkIG9uIHRoZSBTaW11bGF0ZWQgUGFydGlhbCBTcGVjaWFsaXphdGlvbiB3b3JrIAotLy8gICAg
b2YgTWF0IE1hcmN1cyBhbmQgSmVzc2UgSm9uZXMuIFNlZSAgaHR0cDovL29wZW5zb3VyY2UuYWRv
YmUuY29tIG9yIAotLy8gICAgaHR0cDovL2dyb3Vwcy55YWhvby5jb20vZ3JvdXAvYm9vc3QvbWVz
c2FnZS81NDQxIAotLy8gICAgU29tZSB3b3JrYXJvdW5kcyBpbiBoZXJlIHVzZSBpZGVhcyBzdWdn
ZXN0ZWQgZnJvbSAiR2VuZXJpYzxQcm9ncmFtbWluZz46IAotLy8gICAgTWFwcGluZ3MgYmV0d2Vl
biBUeXBlcyBhbmQgVmFsdWVzIiAKLS8vICAgIGJ5IEFuZHJlaSBBbGV4YW5kcmVzY3UgKHNlZSBo
dHRwOi8vd3d3LmN1ai5jb20vZXhwZXJ0cy8xODEwL2FsZXhhbmRyLmh0bWwpLgotCi0KLSNpZm5k
ZWYgQk9PU1RfVFRfSVNfU0FNRV9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSVNfU0FN
RV9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ludGVncmFsX2Nv
bnN0YW50LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotCi0gICB0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MgVT4gc3RydWN0IGlzX3NhbWUgOiBwdWJsaWMgZmFsc2VfdHlwZSB7fTsKLSAgIHRl
bXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfc2FtZTxULFQ+IDogcHVibGljIHRydWVfdHlwZSB7
fTsKLSNpZiBCT09TVF9XT1JLQVJPVU5EKF9fQk9STEFORENfXywgPCAweDYwMCkKLS8vIHdpdGhv
dXQgdGhpcywgQm9ybGFuZCdzIGNvbXBpbGVyIGdpdmVzIHRoZSB3cm9uZyBhbnN3ZXIgZm9yCi0v
LyByZWZlcmVuY2VzIHRvIGFycmF5czoKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNf
c2FtZTxUJiwgVCY+IDogcHVibGljIHRydWVfdHlwZXt9OwotI2VuZGlmCi0KLQotfSAvLyBuYW1l
c3BhY2UgYm9vc3QKLQotI2VuZGlmICAvLyBCT09TVF9UVF9JU19TQU1FX0hQUF9JTkNMVURFRAot
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90
eXBlX3RyYWl0cy9pc19zY2FsYXIuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2NhbGFyLmhwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzAzMTQ0MDU5NjU3YzU4MTdmNWE2YmRmZTRjNWU0MTY5MDhjMjNiNi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc19zY2FsYXIuaHBwCisr
KyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotCi0vLyAgKEMpIENvcHlyaWdodCBTdGV2ZSBD
bGVhcnksIEJlbWFuIERhd2VzLCBIb3dhcmQgSGlubmFudCAmIEpvaG4gTWFkZG9jayAyMDAwLgot
Ly8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55
aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1l
bnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9JU19TQ0FMQVJfSFBQX0lOQ0xVREVECi0jZGVm
aW5lIEJPT1NUX1RUX0lTX1NDQUxBUl9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L3R5
cGVfdHJhaXRzL2lzX2FyaXRobWV0aWMuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRz
L2lzX2VudW0uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3BvaW50ZXIuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9wb2ludGVyLmhwcD4KLSNp
bmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBpc19zY2FsYXIKLSAgIDogcHVibGljIGludGVncmFsX2Nv
bnN0YW50PGJvb2wsIDo6Ym9vc3Q6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlIHx8IDo6Ym9vc3Q6
OmlzX2VudW08VD46OnZhbHVlIHx8IDo6Ym9vc3Q6OmlzX3BvaW50ZXI8VD46OnZhbHVlIHx8IDo6
Ym9vc3Q6OmlzX21lbWJlcl9wb2ludGVyPFQ+Ojp2YWx1ZT4KLXt9OwotCi19IC8vIG5hbWVzcGFj
ZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfVFRfSVNfU0NBTEFSX0hQUF9JTkNMVURFRApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90
cmFpdHMvaXNfc2lnbmVkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3NpZ25lZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDcwY2EyZTQ3OTY3MDliYzdkYjNiNTEyMzQ0NWZhMmMyNTU5OWNiMjguLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2lnbmVkLmhwcAorKysgL2Rl
di9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0KLS8vICAoQykgQ29weXJpZ2h0IEpvaG4gTWFkZG9j
ayAyMDA1LiAgCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3Vi
amVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNl
ZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6
Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3
LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1
ZGluZyBkb2N1bWVudGF0aW9uLgotCi0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfU0lHTkVEX0hQUF9J
TkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9JU19TSUdORURfSFBQX0lOQ0xVREVECi0KLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19pbnRlZ3JhbC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
dHlwZV90cmFpdHMvcmVtb3ZlX2N2LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9p
c19lbnVtLmhwcD4KLSNpbmNsdWRlIDxjbGltaXRzPgotCi1uYW1lc3BhY2UgYm9vc3QgewotCi0j
aWYgIWRlZmluZWQoIF9fQ09ERUdFQVJDX18gKQotCi0jaWYgIShkZWZpbmVkKEJPT1NUX01TVkMp
ICYmIEJPT1NUX01TVkMgPD0gMTMxMCkgJiYgXAotICAgICEoZGVmaW5lZChfX0VER19WRVJTSU9O
X18pICYmIF9fRURHX1ZFUlNJT05fXyA8PSAyMzgpICYmXAotICAgICFkZWZpbmVkKEJPT1NUX05P
X0lOQ0xBU1NfTUVNQkVSX0lOSVRJQUxJWkFUSU9OKQotCi1uYW1lc3BhY2UgZGV0YWlsewotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19zaWduZWRfdmFsdWVzCi17Ci0gICAvLwotICAg
Ly8gTm90ZSB0aGF0IHdlIGNhbm5vdCB1c2UgQk9PU1RfU1RBVElDX0NPTlNUQU5UIGhlcmUsIHVz
aW5nIGVudW0ncwotICAgLy8gcmF0aGVyIHRoYW4gInJlYWwiIHN0YXRpYyBjb25zdGFudHMgc2lt
cGx5IGRvZXNuJ3Qgd29yayBvciBnaXZlCi0gICAvLyB0aGUgY29ycmVjdCBhbnN3ZXIuCi0gICAv
LwotICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfY3Y8VD46OnR5cGUgbm9fY3ZfdDsKLSAgIHN0
YXRpYyBjb25zdCBub19jdl90IG1pbnVzX29uZSA9IChzdGF0aWNfY2FzdDxub19jdl90PigtMSkp
OwotICAgc3RhdGljIGNvbnN0IG5vX2N2X3QgemVybyA9IChzdGF0aWNfY2FzdDxub19jdl90Pigw
KSk7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc19zaWduZWRfaGVscGVyCi17
Ci0gICB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9jdjxUPjo6dHlwZSBub19jdl90OwotICAgQk9P
U1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gKCEoOjpib29zdDo6ZGV0YWlsOjppc19z
aWduZWRfdmFsdWVzPFQ+OjptaW51c19vbmUgID4gYm9vc3Q6OmRldGFpbDo6aXNfc2lnbmVkX3Zh
bHVlczxUPjo6emVybykpKTsKLX07Ci0KLXRlbXBsYXRlIDxib29sIGludGVncmFsX3R5cGU+Ci1z
dHJ1Y3QgaXNfc2lnbmVkX3NlbGVjdF9oZWxwZXIKLXsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgot
ICAgc3RydWN0IHJlYmluZAotICAgewotICAgICAgdHlwZWRlZiBpc19zaWduZWRfaGVscGVyPFQ+
IHR5cGU7Ci0gICB9OwotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBpc19zaWduZWRfc2VsZWN0
X2hlbHBlcjxmYWxzZT4KLXsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgc3RydWN0IHJlYmlu
ZAotICAgewotICAgICAgdHlwZWRlZiBmYWxzZV90eXBlIHR5cGU7Ci0gICB9OwotfTsKLQotdGVt
cGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfc2lnbmVkX2ltcGwKLXsKLSAgIHR5cGVkZWYgOjpi
b29zdDo6ZGV0YWlsOjppc19zaWduZWRfc2VsZWN0X2hlbHBlcjwgOjpib29zdDo6aXNfaW50ZWdy
YWw8VD46OnZhbHVlIHx8IDo6Ym9vc3Q6OmlzX2VudW08VD46OnZhbHVlPiBzZWxlY3RvcjsKLSAg
IHR5cGVkZWYgdHlwZW5hbWUgc2VsZWN0b3I6OnRlbXBsYXRlIHJlYmluZDxUPiBiaW5kZXI7Ci0g
ICB0eXBlZGVmIHR5cGVuYW1lIGJpbmRlcjo6dHlwZSB0eXBlOwotICAgQk9PU1RfU1RBVElDX0NP
TlNUQU5UKGJvb2wsIHZhbHVlID0gdHlwZTo6dmFsdWUpOwotfTsKLQotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4gc3RydWN0IGlzX3NpZ25lZCA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29s
LCBib29zdDo6ZGV0YWlsOjppc19zaWduZWRfaW1wbDxUPjo6dmFsdWU+IHt9OwotCi0jZWxzZQot
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGlzX3NpZ25lZCA6IHB1YmxpYyBmYWxzZV90eXBl
e307Ci0KLSNlbmRpZgotCi0jZWxzZSAvL2RlZmluZWQoIF9fQ09ERUdFQVJDX18gKQotICAgdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBpc19zaWduZWQgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3Rh
bnQ8Ym9vbCwgX19pc19zaWduZWQoVCk+e307Ci0jZW5kaWYKLQotdGVtcGxhdGUgPD4gc3RydWN0
IGlzX3NpZ25lZDxzaWduZWQgY2hhcj4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgaXNfc2lnbmVkPGNvbnN0IHNpZ25lZCBjaGFyPiA6IHB1YmxpYyB0cnVlX3R5cGV7
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8dm9sYXRpbGUgc2lnbmVkIGNoYXI+IDog
cHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3NpZ25lZDxjb25zdCB2
b2xhdGlsZSBzaWduZWQgY2hhcj4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgaXNfc2lnbmVkPHNob3J0PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlIDw+
IHN0cnVjdCBpc19zaWduZWQ8Y29uc3Qgc2hvcnQ+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVt
cGxhdGUgPD4gc3RydWN0IGlzX3NpZ25lZDx2b2xhdGlsZSBzaG9ydD4gOiBwdWJsaWMgdHJ1ZV90
eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfc2lnbmVkPGNvbnN0IHZvbGF0aWxlIHNob3J0
PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8aW50
PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8Y29u
c3QgaW50PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19zaWdu
ZWQ8dm9sYXRpbGUgaW50PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBpc19zaWduZWQ8Y29uc3Qgdm9sYXRpbGUgaW50PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8bG9uZz4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfc2lnbmVkPGNvbnN0IGxvbmc+IDogcHVibGljIHRydWVfdHlw
ZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3NpZ25lZDx2b2xhdGlsZSBsb25nPiA6IHB1Ymxp
YyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8Y29uc3Qgdm9sYXRp
bGUgbG9uZz4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19z
aWduZWQ8dW5zaWduZWQgY2hhcj4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4g
c3RydWN0IGlzX3NpZ25lZDxjb25zdCB1bnNpZ25lZCBjaGFyPiA6IHB1YmxpYyBmYWxzZV90eXBl
e307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfc2lnbmVkPHZvbGF0aWxlIHVuc2lnbmVkIGNoYXI+
IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8Y29u
c3Qgdm9sYXRpbGUgdW5zaWduZWQgY2hhcj4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxh
dGUgPD4gc3RydWN0IGlzX3NpZ25lZDx1bnNpZ25lZCBzaG9ydD4gOiBwdWJsaWMgZmFsc2VfdHlw
ZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3NpZ25lZDxjb25zdCB1bnNpZ25lZCBzaG9ydD4g
OiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3NpZ25lZDx2b2xh
dGlsZSB1bnNpZ25lZCBzaG9ydD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4g
c3RydWN0IGlzX3NpZ25lZDxjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydD4gOiBwdWJsaWMg
ZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3NpZ25lZDx1bnNpZ25lZCBpbnQ+
IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8Y29u
c3QgdW5zaWduZWQgaW50PiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgaXNfc2lnbmVkPHZvbGF0aWxlIHVuc2lnbmVkIGludD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9
OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3NpZ25lZDxjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBp
bnQ+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8
dW5zaWduZWQgbG9uZz4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0
IGlzX3NpZ25lZDxjb25zdCB1bnNpZ25lZCBsb25nPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfc2lnbmVkPHZvbGF0aWxlIHVuc2lnbmVkIGxvbmc+IDogcHVi
bGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8Y29uc3Qgdm9s
YXRpbGUgdW5zaWduZWQgbG9uZz4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotI2lmZGVmIEJPT1NU
X0hBU19MT05HX0xPTkcKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8IDo6Ym9vc3Q6Omxv
bmdfbG9uZ190eXBlPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBp
c19zaWduZWQ8Y29uc3QgOjpib29zdDo6bG9uZ19sb25nX3R5cGU+IDogcHVibGljIHRydWVfdHlw
ZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3NpZ25lZDx2b2xhdGlsZSA6OmJvb3N0Ojpsb25n
X2xvbmdfdHlwZT4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNf
c2lnbmVkPGNvbnN0IHZvbGF0aWxlIDo6Ym9vc3Q6OmxvbmdfbG9uZ190eXBlPiA6IHB1YmxpYyB0
cnVlX3R5cGV7fTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3NpZ25lZDwgOjpib29zdDo6dWxv
bmdfbG9uZ190eXBlPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
aXNfc2lnbmVkPGNvbnN0IDo6Ym9vc3Q6OnVsb25nX2xvbmdfdHlwZT4gOiBwdWJsaWMgZmFsc2Vf
dHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3NpZ25lZDx2b2xhdGlsZSA6OmJvb3N0Ojp1
bG9uZ19sb25nX3R5cGU+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBpc19zaWduZWQ8Y29uc3Qgdm9sYXRpbGUgOjpib29zdDo6dWxvbmdfbG9uZ190eXBlPiA6IHB1
YmxpYyBmYWxzZV90eXBle307Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENIQVJfTUlOKSAKLSNpZiBD
SEFSX01JTiAhPSAwCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfc2lnbmVkPGNoYXI+IDogcHVibGlj
IHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3NpZ25lZDxjb25zdCBjaGFyPiA6
IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8dm9sYXRp
bGUgY2hhcj4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfc2ln
bmVkPGNvbnN0IHZvbGF0aWxlIGNoYXI+IDogcHVibGljIHRydWVfdHlwZXt9OwotI2Vsc2UKLXRl
bXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8Y2hhcj4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9Owot
dGVtcGxhdGUgPD4gc3RydWN0IGlzX3NpZ25lZDxjb25zdCBjaGFyPiA6IHB1YmxpYyBmYWxzZV90
eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfc2lnbmVkPHZvbGF0aWxlIGNoYXI+IDogcHVi
bGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8Y29uc3Qgdm9s
YXRpbGUgY2hhcj4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotI2VuZGlmCi0jZW5kaWYKLSNpZiBk
ZWZpbmVkKFdDSEFSX01JTikgJiYgIWRlZmluZWQoQk9PU1RfTk9fSU5UUklOU0lDX1dDSEFSX1Qp
Ci0jaWYgV0NIQVJfTUlOICE9IDAKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19zaWduZWQ8d2NoYXJf
dD4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfc2lnbmVkPGNv
bnN0IHdjaGFyX3Q+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlz
X3NpZ25lZDx2b2xhdGlsZSB3Y2hhcl90PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBpc19zaWduZWQ8Y29uc3Qgdm9sYXRpbGUgd2NoYXJfdD4gOiBwdWJsaWMgdHJ1
ZV90eXBle307Ci0jZWxzZQotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3NpZ25lZDx3Y2hhcl90PiA6
IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfc2lnbmVkPGNvbnN0
IHdjaGFyX3Q+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19z
aWduZWQ8dm9sYXRpbGUgd2NoYXJfdD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUg
PD4gc3RydWN0IGlzX3NpZ25lZDxjb25zdCB2b2xhdGlsZSB3Y2hhcl90PiA6IHB1YmxpYyBmYWxz
ZV90eXBle307Ci0jZW5kaWYKLSNlbmRpZgotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlm
IC8vIEJPT1NUX1RUX0lTX01FTUJFUl9GVU5DVElPTl9QT0lOVEVSX0hQUF9JTkNMVURFRApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90
cmFpdHMvaXNfc3RhdGVsZXNzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3N0YXRlbGVzcy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY5MjY2ZGE1YjhjNzA1ZDI0ODkxYmMwOTI1YzM0Y2E4Y2ZlZDMxM2UuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNfc3RhdGVsZXNzLmhw
cAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgU3Rl
dmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywgSG93YXJkIEhpbm5hbnQgJiBKb2huIE1hZGRvY2sgMjAw
MC4KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRv
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29t
cGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRv
Y3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfU1RBVEVMRVNTX0hQUF9JTkNMVURF
RAotI2RlZmluZSBCT09TVF9UVF9JU19TVEFURUxFU1NfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRl
IDxib29zdC90eXBlX3RyYWl0cy9oYXNfdHJpdmlhbF9jb25zdHJ1Y3Rvci5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvdHlwZV90cmFpdHMvaGFzX3RyaXZpYWxfY29weS5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rvci5ocHA+Ci0jaW5jbHVkZSA8Ym9v
c3QvdHlwZV90cmFpdHMvaXNfY2xhc3MuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRz
L2lzX2VtcHR5LmhwcD4KLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotCi1uYW1lc3BhY2Ug
Ym9vc3QgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBpc19zdGF0ZWxlc3MKLSA6
IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAgCi0gICAgICAoOjpib29zdDo6aGFzX3Ry
aXZpYWxfY29uc3RydWN0b3I8VD46OnZhbHVlCi0gICAgICAmJiA6OmJvb3N0OjpoYXNfdHJpdmlh
bF9jb3B5PFQ+Ojp2YWx1ZQotICAgICAgJiYgOjpib29zdDo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjxUPjo6dmFsdWUKLSAgICAgICYmIDo6Ym9vc3Q6OmlzX2NsYXNzPFQ+Ojp2YWx1ZQotICAgICAg
JiYgOjpib29zdDo6aXNfZW1wdHk8VD46OnZhbHVlKT4KLXt9OwotCi19IC8vIG5hbWVzcGFjZSBi
b29zdAotCi0jZW5kaWYgLy8gQk9PU1RfVFRfSVNfU1RBVEVMRVNTX0hQUF9JTkNMVURFRApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90
cmFpdHMvaXNfdW5pb24uaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvdHlwZV90cmFpdHMvaXNfdW5pb24uaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjNWUxYTk2MDE5Njc3Y2IxNThjMzRjYzQ5ZmEwNzdmM2RiMzBjYTBmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3VuaW9uLmhwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDMxICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgRGF2ZSBBYnJhaGFtcywg
U3RldmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywgSG93YXJkCi0vLyAgSGlubmFudCAmIEpvaG4gTWFk
ZG9jayAyMDAwLiAgCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUg
c3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4g
KFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0
dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8v
d3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGlu
Y2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfVU5JT05fSFBQ
X0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0lTX1VOSU9OX0hQUF9JTkNMVURFRAotCi0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaW50cmluc2ljcy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
dHlwZV90cmFpdHMvaW50ZWdyYWxfY29uc3RhbnQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3Qgewot
Ci0jaWZkZWYgQk9PU1RfSVNfVU5JT04KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfdW5p
b24gOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgQk9PU1RfSVNfVU5JT04oVCk+IHt9
OwotI2Vsc2UKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfdW5pb24gOiBwdWJsaWMgaW50
ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgZmFsc2U+IHt9OwotI2VuZGlmCi0KLXRlbXBsYXRlIDxjbGFz
cyBUPiBzdHJ1Y3QgaXNfdW5pb248VCBjb25zdD4gOiBwdWJsaWMgaXNfdW5pb248VD57fTsKLXRl
bXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfdW5pb248VCB2b2xhdGlsZSBjb25zdD4gOiBwdWJs
aWMgaXNfdW5pb248VD57fTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgaXNfdW5pb248VCB2
b2xhdGlsZT4gOiBwdWJsaWMgaXNfdW5pb248VD57fTsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QK
LQotI2VuZGlmIC8vIEJPT1NUX1RUX0lTX1VOSU9OX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvaXNf
dW5zaWduZWQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3Qv
dHlwZV90cmFpdHMvaXNfdW5zaWduZWQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjNGM1NGFmN2IzNjYxMGJmMWQ2YzczNDFmY2ZmM2QzNDA4YmNhNzRlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3Vuc2lnbmVkLmhwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE2MyArMCwwIEBACi0KLS8vICAoQykgQ29weXJpZ2h0IEpvaG4gTWFkZG9jayAy
MDA1LiAgCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVj
dCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBh
Y2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93
d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGlu
ZyBkb2N1bWVudGF0aW9uLgotCi0KLSNpZm5kZWYgQk9PU1RfVFRfSVNfVU5TSUdORURfSFBQX0lO
Q0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX0lTX1VOU0lHTkVEX0hQUF9JTkNMVURFRAotCi0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfaW50ZWdyYWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L3R5cGVfdHJhaXRzL2lzX2VudW0uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL3Jl
bW92ZV9jdi5ocHA+Ci0KLSNpbmNsdWRlIDxjbGltaXRzPgotCi1uYW1lc3BhY2UgYm9vc3Qgewot
Ci0jaWYgIWRlZmluZWQoIF9fQ09ERUdFQVJDX18gKQotCi0jaWYgIShkZWZpbmVkKEJPT1NUX01T
VkMpICYmIEJPT1NUX01TVkMgPD0gMTMxMCkgJiZcCi0gICAgIShkZWZpbmVkKF9fRURHX1ZFUlNJ
T05fXykgJiYgX19FREdfVkVSU0lPTl9fIDw9IDIzOCkgJiZcCi0gICAgIWRlZmluZWQoQk9PU1Rf
Tk9fSU5DTEFTU19NRU1CRVJfSU5JVElBTElaQVRJT04pCi0KLW5hbWVzcGFjZSBkZXRhaWx7Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX3Vuc2lnbmVkX3ZhbHVlcwotewotICAgLy8K
LSAgIC8vIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdXNlIEJPT1NUX1NUQVRJQ19DT05TVEFOVCBoZXJl
LCB1c2luZyBlbnVtJ3MKLSAgIC8vIHJhdGhlciB0aGFuICJyZWFsIiBzdGF0aWMgY29uc3RhbnRz
IHNpbXBseSBkb2Vzbid0IHdvcmsgb3IgZ2l2ZQotICAgLy8gdGhlIGNvcnJlY3QgYW5zd2VyLgot
ICAgLy8KLSAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2N2PFQ+Ojp0eXBlIG5vX2N2X3Q7Ci0g
ICBzdGF0aWMgY29uc3Qgbm9fY3ZfdCBtaW51c19vbmUgPSAoc3RhdGljX2Nhc3Q8bm9fY3ZfdD4o
LTEpKTsKLSAgIHN0YXRpYyBjb25zdCBub19jdl90IHplcm8gPSAoc3RhdGljX2Nhc3Q8bm9fY3Zf
dD4oMCkpOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgaXNfdW51bnNpZ25lZF9o
ZWxwZXIKLXsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9ICg6OmJvb3N0
OjpkZXRhaWw6OmlzX3Vuc2lnbmVkX3ZhbHVlczxUPjo6bWludXNfb25lID4gOjpib29zdDo6ZGV0
YWlsOjppc191bnNpZ25lZF92YWx1ZXM8VD46Onplcm8pKTsKLX07Ci0KLXRlbXBsYXRlIDxib29s
IGludGVncmFsX3R5cGU+Ci1zdHJ1Y3QgaXNfdW5zaWduZWRfc2VsZWN0X2hlbHBlcgotewotICAg
dGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICBzdHJ1Y3QgcmViaW5kCi0gICB7Ci0gICAgICB0eXBlZGVm
IGlzX3VudW5zaWduZWRfaGVscGVyPFQ+IHR5cGU7Ci0gICB9OwotfTsKLQotdGVtcGxhdGUgPD4K
LXN0cnVjdCBpc191bnNpZ25lZF9zZWxlY3RfaGVscGVyPGZhbHNlPgotewotICAgdGVtcGxhdGUg
PGNsYXNzIFQ+Ci0gICBzdHJ1Y3QgcmViaW5kCi0gICB7Ci0gICAgICB0eXBlZGVmIGZhbHNlX3R5
cGUgdHlwZTsKLSAgIH07Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc191bnNp
Z25lZAotewotICAgdHlwZWRlZiA6OmJvb3N0OjpkZXRhaWw6OmlzX3Vuc2lnbmVkX3NlbGVjdF9o
ZWxwZXI8IDo6Ym9vc3Q6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSB8fCA6OmJvb3N0Ojppc19lbnVt
PFQ+Ojp2YWx1ZSA+IHNlbGVjdG9yOwotICAgdHlwZWRlZiB0eXBlbmFtZSBzZWxlY3Rvcjo6dGVt
cGxhdGUgcmViaW5kPFQ+IGJpbmRlcjsKLSAgIHR5cGVkZWYgdHlwZW5hbWUgYmluZGVyOjp0eXBl
IHR5cGU7Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0eXBlOjp2YWx1
ZSk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0
cnVjdCBpc191bnNpZ25lZCA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBib29zdDo6
ZGV0YWlsOjppc191bnNpZ25lZDxUPjo6dmFsdWU+IHt9OwotCi0jZWxzZQotCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4gc3RydWN0IGlzX3Vuc2lnbmVkIDogcHVibGljIGZhbHNlX3R5cGV7fTsKLQotI2Vu
ZGlmCi0KLSNlbHNlIC8vIGRlZmluZWQoIF9fQ09ERUdFQVJDX18gKQotdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBpc191bnNpZ25lZCA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBf
X2lzX3Vuc2lnbmVkKFQpPiB7fTsKLSNlbmRpZgotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfdW5z
aWduZWQ8dW5zaWduZWQgY2hhcj4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgaXNfdW5zaWduZWQ8Y29uc3QgdW5zaWduZWQgY2hhcj4gOiBwdWJsaWMgdHJ1ZV90eXBl
e307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfdW5zaWduZWQ8dm9sYXRpbGUgdW5zaWduZWQgY2hh
cj4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfdW5zaWduZWQ8
Y29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgY2hhcj4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1w
bGF0ZSA8PiBzdHJ1Y3QgaXNfdW5zaWduZWQ8dW5zaWduZWQgc2hvcnQ+IDogcHVibGljIHRydWVf
dHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPGNvbnN0IHVuc2lnbmVkIHNo
b3J0PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc191bnNpZ25l
ZDx2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydD4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgaXNfdW5zaWduZWQ8Y29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQ+IDog
cHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPHVuc2ln
bmVkIGludD4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfdW5z
aWduZWQ8Y29uc3QgdW5zaWduZWQgaW50PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBpc191bnNpZ25lZDx2b2xhdGlsZSB1bnNpZ25lZCBpbnQ+IDogcHVibGljIHRy
dWVfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPGNvbnN0IHZvbGF0aWxl
IHVuc2lnbmVkIGludD4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
aXNfdW5zaWduZWQ8dW5zaWduZWQgbG9uZz4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgaXNfdW5zaWduZWQ8Y29uc3QgdW5zaWduZWQgbG9uZz4gOiBwdWJsaWMgdHJ1
ZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfdW5zaWduZWQ8dm9sYXRpbGUgdW5zaWdu
ZWQgbG9uZz4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfdW5z
aWduZWQ8Y29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZz4gOiBwdWJsaWMgdHJ1ZV90eXBle307
Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBpc191bnNpZ25lZDxzaWduZWQgY2hhcj4gOiBwdWJsaWMg
ZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPGNvbnN0IHNpZ25l
ZCBjaGFyPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfdW5z
aWduZWQ8dm9sYXRpbGUgc2lnbmVkIGNoYXI+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBs
YXRlIDw+IHN0cnVjdCBpc191bnNpZ25lZDxjb25zdCB2b2xhdGlsZSBzaWduZWQgY2hhcj4gOiBw
dWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPCBzaG9y
dD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVk
PGNvbnN0ICBzaG9ydD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0
IGlzX3Vuc2lnbmVkPHZvbGF0aWxlICBzaG9ydD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVt
cGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPGNvbnN0IHZvbGF0aWxlICBzaG9ydD4gOiBwdWJs
aWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPCBpbnQ+IDog
cHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc191bnNpZ25lZDxjb25z
dCAgaW50PiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfdW5z
aWduZWQ8dm9sYXRpbGUgIGludD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4g
c3RydWN0IGlzX3Vuc2lnbmVkPGNvbnN0IHZvbGF0aWxlICBpbnQ+IDogcHVibGljIGZhbHNlX3R5
cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc191bnNpZ25lZDwgbG9uZz4gOiBwdWJsaWMgZmFs
c2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPGNvbnN0ICBsb25nPiA6
IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfdW5zaWduZWQ8dm9s
YXRpbGUgIGxvbmc+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBp
c191bnNpZ25lZDxjb25zdCB2b2xhdGlsZSAgbG9uZz4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9Owot
I2lmZGVmIEJPT1NUX0hBU19MT05HX0xPTkcKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc191bnNpZ25l
ZDwgOjpib29zdDo6dWxvbmdfbG9uZ190eXBlPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBs
YXRlIDw+IHN0cnVjdCBpc191bnNpZ25lZDxjb25zdCA6OmJvb3N0Ojp1bG9uZ19sb25nX3R5cGU+
IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPHZv
bGF0aWxlIDo6Ym9vc3Q6OnVsb25nX2xvbmdfdHlwZT4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfdW5zaWduZWQ8Y29uc3Qgdm9sYXRpbGUgOjpib29zdDo6dWxv
bmdfbG9uZ190eXBlPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGUgPD4gc3RydWN0
IGlzX3Vuc2lnbmVkPCA6OmJvb3N0Ojpsb25nX2xvbmdfdHlwZT4gOiBwdWJsaWMgZmFsc2VfdHlw
ZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPGNvbnN0IDo6Ym9vc3Q6Omxvbmdf
bG9uZ190eXBlPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNf
dW5zaWduZWQ8dm9sYXRpbGUgOjpib29zdDo6bG9uZ19sb25nX3R5cGU+IDogcHVibGljIGZhbHNl
X3R5cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc191bnNpZ25lZDxjb25zdCB2b2xhdGlsZSA6
OmJvb3N0Ojpsb25nX2xvbmdfdHlwZT4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotI2VuZGlmCi0j
aWYgZGVmaW5lZChDSEFSX01JTikgCi0jaWYgQ0hBUl9NSU4gPT0gMAotdGVtcGxhdGUgPD4gc3Ry
dWN0IGlzX3Vuc2lnbmVkPGNoYXI+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4g
c3RydWN0IGlzX3Vuc2lnbmVkPGNvbnN0IGNoYXI+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVt
cGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPHZvbGF0aWxlIGNoYXI+IDogcHVibGljIHRydWVf
dHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPGNvbnN0IHZvbGF0aWxlIGNo
YXI+IDogcHVibGljIHRydWVfdHlwZXt9OwotI2Vsc2UKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc191
bnNpZ25lZDxjaGFyPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
aXNfdW5zaWduZWQ8Y29uc3QgY2hhcj4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUg
PD4gc3RydWN0IGlzX3Vuc2lnbmVkPHZvbGF0aWxlIGNoYXI+IDogcHVibGljIGZhbHNlX3R5cGV7
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc191bnNpZ25lZDxjb25zdCB2b2xhdGlsZSBjaGFyPiA6
IHB1YmxpYyBmYWxzZV90eXBle307Ci0jZW5kaWYKLSNlbmRpZgotI2lmICFkZWZpbmVkKEJPT1NU
X05PX0lOVFJJTlNJQ19XQ0hBUl9UKSAmJiBkZWZpbmVkKFdDSEFSX01JTikKLSNpZiBXQ0hBUl9N
SU4gPT0gMAotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPHdjaGFyX3Q+IDogcHVibGlj
IHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVkPGNvbnN0IHdjaGFy
X3Q+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vuc2lnbmVk
PHZvbGF0aWxlIHdjaGFyX3Q+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3Ry
dWN0IGlzX3Vuc2lnbmVkPGNvbnN0IHZvbGF0aWxlIHdjaGFyX3Q+IDogcHVibGljIHRydWVfdHlw
ZXt9OwotI2Vsc2UKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc191bnNpZ25lZDx3Y2hhcl90PiA6IHB1
YmxpYyBmYWxzZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfdW5zaWduZWQ8Y29uc3Qg
d2NoYXJfdD4gOiBwdWJsaWMgZmFsc2VfdHlwZXt9OwotdGVtcGxhdGUgPD4gc3RydWN0IGlzX3Vu
c2lnbmVkPHZvbGF0aWxlIHdjaGFyX3Q+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBpc191bnNpZ25lZDxjb25zdCB2b2xhdGlsZSB3Y2hhcl90PiA6IHB1YmxpYyBm
YWxzZV90eXBle307Ci0jZW5kaWYKLSNlbmRpZgotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2Vu
ZGlmIC8vIEJPT1NUX1RUX0lTX01FTUJFUl9GVU5DVElPTl9QT0lOVEVSX0hQUF9JTkNMVURFRApk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlw
ZV90cmFpdHMvaXNfdmlydHVhbF9iYXNlX29mLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3ZpcnR1YWxfYmFzZV9vZi5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0Y2IzNTVjZDBhYzNmNDM5MDNmMDRiMTMxYzRl
N2JlYTkwMGI2YjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMv
aXNfdmlydHVhbF9iYXNlX29mLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0v
LyAgKEMpIENvcHlyaWdodCBEYW5pZWwgRnJleSBhbmQgUm9iZXJ0IFJhbWV5IDIwMDkuCi0vLyAg
VXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9v
c3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcg
ZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3Jn
L0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJz
L3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0
aW9uLgotIAotI2lmbmRlZiBCT09TVF9UVF9JU19WSVJUVUFMX0JBU0VfT0ZfSFBQX0lOQ0xVREVE
Ci0jZGVmaW5lIEJPT1NUX1RUX0lTX1ZJUlRVQUxfQkFTRV9PRl9IUFBfSU5DTFVERUQKLQotI2lu
Y2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2Jhc2Vfb2YuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotbmFtZXNwYWNl
IGRldGFpbCB7Ci0KLQotI2lmZGVmIEJPT1NUX01TVkMKLSNwcmFnbWEgd2FybmluZyggcHVzaCAp
Ci0jcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0NTg0IDQyNTAgNDU5NCkKLSNlbGlmIGRlZmlu
ZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSA0KQotI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRl
cgotI2VuZGlmCi0KLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2UsIHR5cGVuYW1lIERlcml2ZWQsIHR5
cGVuYW1lIHRhZz4KLXN0cnVjdCBpc192aXJ0dWFsX2Jhc2Vfb2ZfaW1wbAotewotICAgIEJPT1NU
X1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IGZhbHNlKTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEJhc2UsIHR5cGVuYW1lIERlcml2ZWQ+Ci1zdHJ1Y3QgaXNfdmlydHVhbF9iYXNlX29m
X2ltcGw8QmFzZSwgRGVyaXZlZCwgdHJ1ZV90eXBlPgotewotICAgdW5pb24gbWF4X2FsaWduCi0g
ICB7Ci0gICAgICB1bnNpZ25lZCB1OwotICAgICAgdW5zaWduZWQgbG9uZyB1bDsKLSAgICAgIHZv
aWQqIHY7Ci0gICAgICBkb3VibGUgZDsKLSAgICAgIGxvbmcgZG91YmxlIGxkOwotI2lmbmRlZiBC
T09TVF9OT19MT05HX0xPTkcKLSAgICAgIGxvbmcgbG9uZyBsbDsKLSNlbmRpZgotICAgfTsKLSNp
ZmRlZiBfX0JPUkxBTkRDX18KLSAgICBzdHJ1Y3QgYm9vc3RfdHlwZV90cmFpdHNfaW50ZXJuYWxf
c3RydWN0X1ggOiBwdWJsaWMgdmlydHVhbCBEZXJpdmVkLCBwdWJsaWMgdmlydHVhbCBCYXNlIAot
ICAgIHsKLSAgICAgICBib29zdF90eXBlX3RyYWl0c19pbnRlcm5hbF9zdHJ1Y3RfWCgpOwotICAg
ICAgIGJvb3N0X3R5cGVfdHJhaXRzX2ludGVybmFsX3N0cnVjdF9YKGNvbnN0IGJvb3N0X3R5cGVf
dHJhaXRzX2ludGVybmFsX3N0cnVjdF9YJik7Ci0gICAgICAgYm9vc3RfdHlwZV90cmFpdHNfaW50
ZXJuYWxfc3RydWN0X1gmIG9wZXJhdG9yPShjb25zdCBib29zdF90eXBlX3RyYWl0c19pbnRlcm5h
bF9zdHJ1Y3RfWCYpOwotICAgICAgIH5ib29zdF90eXBlX3RyYWl0c19pbnRlcm5hbF9zdHJ1Y3Rf
WCgpdGhyb3coKTsKLSAgICAgICBtYXhfYWxpZ24gZGF0YVs0XTsKLSAgICB9OwotICAgIHN0cnVj
dCBib29zdF90eXBlX3RyYWl0c19pbnRlcm5hbF9zdHJ1Y3RfWSA6IHB1YmxpYyB2aXJ0dWFsIERl
cml2ZWQgCi0gICAgewotICAgICAgIGJvb3N0X3R5cGVfdHJhaXRzX2ludGVybmFsX3N0cnVjdF9Z
KCk7Ci0gICAgICAgYm9vc3RfdHlwZV90cmFpdHNfaW50ZXJuYWxfc3RydWN0X1koY29uc3QgYm9v
c3RfdHlwZV90cmFpdHNfaW50ZXJuYWxfc3RydWN0X1kmKTsKLSAgICAgICBib29zdF90eXBlX3Ry
YWl0c19pbnRlcm5hbF9zdHJ1Y3RfWSYgb3BlcmF0b3I9KGNvbnN0IGJvb3N0X3R5cGVfdHJhaXRz
X2ludGVybmFsX3N0cnVjdF9ZJik7Ci0gICAgICAgfmJvb3N0X3R5cGVfdHJhaXRzX2ludGVybmFs
X3N0cnVjdF9ZKCl0aHJvdygpOwotICAgICAgIG1heF9hbGlnbiBkYXRhWzRdOwotICAgIH07Ci0j
ZWxzZQotICAgIHN0cnVjdCBib29zdF90eXBlX3RyYWl0c19pbnRlcm5hbF9zdHJ1Y3RfWCA6IHB1
YmxpYyBEZXJpdmVkLCB2aXJ0dWFsIEJhc2UgCi0gICAgewotICAgICAgIGJvb3N0X3R5cGVfdHJh
aXRzX2ludGVybmFsX3N0cnVjdF9YKCk7Ci0gICAgICAgYm9vc3RfdHlwZV90cmFpdHNfaW50ZXJu
YWxfc3RydWN0X1goY29uc3QgYm9vc3RfdHlwZV90cmFpdHNfaW50ZXJuYWxfc3RydWN0X1gmKTsK
LSAgICAgICBib29zdF90eXBlX3RyYWl0c19pbnRlcm5hbF9zdHJ1Y3RfWCYgb3BlcmF0b3I9KGNv
bnN0IGJvb3N0X3R5cGVfdHJhaXRzX2ludGVybmFsX3N0cnVjdF9YJik7Ci0gICAgICAgfmJvb3N0
X3R5cGVfdHJhaXRzX2ludGVybmFsX3N0cnVjdF9YKCl0aHJvdygpOwotICAgICAgIG1heF9hbGln
biBkYXRhWzE2XTsKLSAgICB9OwotICAgIHN0cnVjdCBib29zdF90eXBlX3RyYWl0c19pbnRlcm5h
bF9zdHJ1Y3RfWSA6IHB1YmxpYyBEZXJpdmVkIAotICAgIHsKLSAgICAgICBib29zdF90eXBlX3Ry
YWl0c19pbnRlcm5hbF9zdHJ1Y3RfWSgpOwotICAgICAgIGJvb3N0X3R5cGVfdHJhaXRzX2ludGVy
bmFsX3N0cnVjdF9ZKGNvbnN0IGJvb3N0X3R5cGVfdHJhaXRzX2ludGVybmFsX3N0cnVjdF9ZJik7
Ci0gICAgICAgYm9vc3RfdHlwZV90cmFpdHNfaW50ZXJuYWxfc3RydWN0X1kmIG9wZXJhdG9yPShj
b25zdCBib29zdF90eXBlX3RyYWl0c19pbnRlcm5hbF9zdHJ1Y3RfWSYpOwotICAgICAgIH5ib29z
dF90eXBlX3RyYWl0c19pbnRlcm5hbF9zdHJ1Y3RfWSgpdGhyb3coKTsKLSAgICAgICBtYXhfYWxp
Z24gZGF0YVsxNl07Ci0gICAgfTsKLSNlbmRpZgotICAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChi
b29sLCB2YWx1ZSA9IChzaXplb2YoYm9vc3RfdHlwZV90cmFpdHNfaW50ZXJuYWxfc3RydWN0X1gp
PT1zaXplb2YoYm9vc3RfdHlwZV90cmFpdHNfaW50ZXJuYWxfc3RydWN0X1kpKSk7Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFtZSBEZXJpdmVkPgotc3RydWN0IGlzX3ZpcnR1
YWxfYmFzZV9vZl9pbXBsMgotewotICAgdHlwZWRlZiBib29zdDo6aW50ZWdyYWxfY29uc3RhbnQ8
Ym9vbCwgKGJvb3N0Ojppc19iYXNlX29mPEJhc2UsIERlcml2ZWQ+Ojp2YWx1ZSAmJiAhIGJvb3N0
Ojppc19zYW1lPEJhc2UsIERlcml2ZWQ+Ojp2YWx1ZSk+IHRhZ190eXBlOwotICAgdHlwZWRlZiBp
c192aXJ0dWFsX2Jhc2Vfb2ZfaW1wbDxCYXNlLCBEZXJpdmVkLCB0YWdfdHlwZT4gaW1wOwotICAg
Qk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gaW1wOjp2YWx1ZSk7Ci19OwotCi0j
aWZkZWYgQk9PU1RfTVNWQwotI3ByYWdtYSB3YXJuaW5nKCBwb3AgKQotI2VuZGlmCi0KLX0gLy8g
bmFtZXNwYWNlIGRldGFpbAotCi10ZW1wbGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgRGVyaXZlZD4g
c3RydWN0IGlzX3ZpcnR1YWxfYmFzZV9vZiA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29s
LCAoOjpib29zdDo6ZGV0YWlsOjppc192aXJ0dWFsX2Jhc2Vfb2ZfaW1wbDI8QmFzZSwgRGVyaXZl
ZD46OnZhbHVlKT57fTsKLQotdGVtcGxhdGUgPGNsYXNzIEJhc2UsIGNsYXNzIERlcml2ZWQ+IHN0
cnVjdCBpc192aXJ0dWFsX2Jhc2Vfb2Y8QmFzZSYsIERlcml2ZWQ+IDogcHVibGljIGZhbHNlX3R5
cGV7fTsKLXRlbXBsYXRlIDxjbGFzcyBCYXNlLCBjbGFzcyBEZXJpdmVkPiBzdHJ1Y3QgaXNfdmly
dHVhbF9iYXNlX29mPEJhc2UsIERlcml2ZWQmPiA6IHB1YmxpYyBmYWxzZV90eXBle307Ci10ZW1w
bGF0ZSA8Y2xhc3MgQmFzZSwgY2xhc3MgRGVyaXZlZD4gc3RydWN0IGlzX3ZpcnR1YWxfYmFzZV9v
ZjxCYXNlJiwgRGVyaXZlZCY+IDogcHVibGljIGZhbHNlX3R5cGV7fTsKLQotfSAvLyBuYW1lc3Bh
Y2UgYm9vc3QKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc192b2lkLmhwcCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3ZvaWQuaHBwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODNmOGFiZjU2MmRlNWI5YWI0NjZhYTE1NzQ3ODJm
ZGY4OTEwMzdlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lz
X3ZvaWQuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotCi0vLyAgKEMpIENvcHly
aWdodCBTdGV2ZSBDbGVhcnksIEJlbWFuIERhd2VzLCBIb3dhcmQgSGlubmFudCAmIEpvaG4gTWFk
ZG9jayAyMDAwLgotLy8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1
YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChT
ZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3
dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNs
dWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9JU19WT0lEX0hQUF9JTkNM
VURFRAotI2RlZmluZSBCT09TVF9UVF9JU19WT0lEX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8
Ym9vc3QvdHlwZV90cmFpdHMvaW50ZWdyYWxfY29uc3RhbnQuaHBwPgotCi1uYW1lc3BhY2UgYm9v
c3QgewotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBpc192b2lkIDogcHVibGljIGZhbHNl
X3R5cGUge307Ci0KLXRlbXBsYXRlPD4gc3RydWN0IGlzX3ZvaWQ8dm9pZD4gOiBwdWJsaWMgdHJ1
ZV90eXBlIHt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfdm9pZDxjb25zdCB2b2lkPiA6IHB1Ymxp
YyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlPD4gc3RydWN0IGlzX3ZvaWQ8Y29uc3Qgdm9sYXRpbGUg
dm9pZD4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc192b2lkPHZv
bGF0aWxlIHZvaWQ+IDogcHVibGljIHRydWVfdHlwZXt9OwotCi19IC8vIG5hbWVzcGFjZSBib29z
dAotCi0jZW5kaWYgLy8gQk9PU1RfVFRfSVNfVk9JRF9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL2lz
X3ZvbGF0aWxlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL2lzX3ZvbGF0aWxlLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWI4ZTcxNmI0NzNmODc2Zjc4NTdhYjcxMjZhNjMwNjYyZTA4MWY2Yi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9pc192b2xhdGlsZS5ocHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0NiArMCwwIEBACi0KLS8vICAoQykgQ29weXJpZ2h0IERhdmUgQWJyYWhhbXMs
IFN0ZXZlIENsZWFyeSwgQmVtYW4gRGF3ZXMsIAotLy8gICAgICBIb3dhcmQgSGlubmFudCBhbmQg
Sm9obiBNYWRkb2NrIDIwMDAuIAotLy8gIChDKSBDb3B5cmlnaHQgTWF0IE1hcmN1cywgSmVzc2Ug
Sm9uZXMgYW5kIEFkb2JlIFN5c3RlbXMgSW5jIDIwMDEKLQotLy8gIFVzZSwgbW9kaWZpY2F0aW9u
IGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vu
c2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAu
dHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQp
LgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0cyBmb3Ig
bW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotLy8gICAgRml4
ZWQgaXNfcG9pbnRlciwgaXNfcmVmZXJlbmNlLCBpc19jb25zdCwgaXNfdm9sYXRpbGUsIGlzX3Nh
bWUsIAotLy8gICAgaXNfbWVtYmVyX3BvaW50ZXIgYmFzZWQgb24gdGhlIFNpbXVsYXRlZCBQYXJ0
aWFsIFNwZWNpYWxpemF0aW9uIHdvcmsgCi0vLyAgICBvZiBNYXQgTWFyY3VzIGFuZCBKZXNzZSBK
b25lcy4gU2VlICBodHRwOi8vb3BlbnNvdXJjZS5hZG9iZS5jb20gb3IgCi0vLyAgICBodHRwOi8v
Z3JvdXBzLnlhaG9vLmNvbS9ncm91cC9ib29zdC9tZXNzYWdlLzU0NDEgCi0vLyAgICBTb21lIHdv
cmthcm91bmRzIGluIGhlcmUgdXNlIGlkZWFzIHN1Z2dlc3RlZCBmcm9tICJHZW5lcmljPFByb2dy
YW1taW5nPjogCi0vLyAgICBNYXBwaW5ncyBiZXR3ZWVuIFR5cGVzIGFuZCBWYWx1ZXMiIAotLy8g
ICAgYnkgQW5kcmVpIEFsZXhhbmRyZXNjdSAoc2VlIGh0dHA6Ly93d3cuY3VqLmNvbS9leHBlcnRz
LzE4MTAvYWxleGFuZHIuaHRtbCkuCi0KLQotI2lmbmRlZiBCT09TVF9UVF9JU19WT0xBVElMRV9I
UFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfSVNfVk9MQVRJTEVfSFBQX0lOQ0xVREVECi0K
LSNpbmNsdWRlIDxjc3RkZGVmPiAvLyBzaXplX3QKLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0
cy9pbnRlZ3JhbF9jb25zdGFudC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLSNpZiBkZWZp
bmVkKCBfX0NPREVHRUFSQ19fICkKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICBzdHJ1Y3Qg
aXNfdm9sYXRpbGUgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc192b2xhdGls
ZShUKT4ge307Ci0KLSNlbHNlCi0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgc3RydWN0IGlz
X3ZvbGF0aWxlIDogcHVibGljIGZhbHNlX3R5cGUge307Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4g
c3RydWN0IGlzX3ZvbGF0aWxlPFQgdm9sYXRpbGU+IDogcHVibGljIHRydWVfdHlwZXt9OwotICAg
dGVtcGxhdGUgPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IE4+IHN0cnVjdCBpc192b2xhdGlsZTxUIHZv
bGF0aWxlW05dPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBz
dHJ1Y3QgaXNfdm9sYXRpbGU8VCB2b2xhdGlsZVtdPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLQot
I2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9UVF9JU19W
T0xBVElMRV9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL21ha2Vfc2lnbmVkLmhwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL21ha2Vfc2lnbmVk
LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQyZDVkZjYxYTE2ZTE1NzY4Yzgy
OGM1NDcwN2M2MmZkZjY1N2FiMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBl
X3RyYWl0cy9tYWtlX3NpZ25lZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAot
Ci0vLyAgKEMpIENvcHlyaWdodCBKb2huIE1hZGRvY2sgMjAwNy4KLS8vICBVc2UsIG1vZGlmaWNh
dGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBM
aWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0Vf
MV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAu
dHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMg
Zm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5k
ZWYgQk9PU1RfVFRfTUFLRV9TSUdORURfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX01B
S0VfU0lHTkVEX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvY29u
ZGl0aW9uYWwuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2ludGVncmFsLmhw
cD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zaWduZWQuaHBwPgotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2lzX3Vuc2lnbmVkLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBl
X3RyYWl0cy9pc19lbnVtLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zYW1l
LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnN0LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBl
X3RyYWl0cy9pc192b2xhdGlsZS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvYWRk
X2NvbnN0LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9hZGRfdm9sYXRpbGUuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L3N0YXRpY19hc3NlcnQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3Qg
ewotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBtYWtlX3NpZ25lZAotewotcHJpdmF0ZToK
LSAgIEJPT1NUX1NUQVRJQ19BU1NFUlRfTVNHKCggOjpib29zdDo6aXNfaW50ZWdyYWw8VD46OnZh
bHVlIHx8IDo6Ym9vc3Q6OmlzX2VudW08VD46OnZhbHVlKSwgIlRoZSB0ZW1wbGF0ZSBhcmd1bWVu
dCB0byBtYWtlX3NpZ25lZCBtdXN0IGJlIGFuIGludGVnZXIgb3IgZW51bSB0eXBlLiIpOwotICAg
Qk9PU1RfU1RBVElDX0FTU0VSVF9NU0coISg6OmJvb3N0Ojppc19zYW1lPHR5cGVuYW1lIHJlbW92
ZV9jdjxUPjo6dHlwZSwgYm9vbD46OnZhbHVlKSwgIlRoZSB0ZW1wbGF0ZSBhcmd1bWVudCB0byBt
YWtlX3NpZ25lZCBtdXN0IG5vdCBiZSB0aGUgdHlwZSBib29sLiIpOwotCi0gICB0eXBlZGVmIHR5
cGVuYW1lIHJlbW92ZV9jdjxUPjo6dHlwZSB0X25vX2N2OwotICAgdHlwZWRlZiB0eXBlbmFtZSBj
b25kaXRpb25hbDwKLSAgICAgICg6OmJvb3N0Ojppc19zaWduZWQ8VD46OnZhbHVlCi0gICAgICAm
JiA6OmJvb3N0Ojppc19pbnRlZ3JhbDxUPjo6dmFsdWUKLSAgICAgICYmICEgOjpib29zdDo6aXNf
c2FtZTx0X25vX2N2LCBjaGFyPjo6dmFsdWUKLSAgICAgICYmICEgOjpib29zdDo6aXNfc2FtZTx0
X25vX2N2LCB3Y2hhcl90Pjo6dmFsdWUKLSAgICAgICYmICEgOjpib29zdDo6aXNfc2FtZTx0X25v
X2N2LCBib29sPjo6dmFsdWUpLAotICAgICAgVCwKLSAgICAgIHR5cGVuYW1lIGNvbmRpdGlvbmFs
PAotICAgICAgICAgKDo6Ym9vc3Q6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZQotICAgICAgICAgJiYg
ISA6OmJvb3N0Ojppc19zYW1lPHRfbm9fY3YsIGNoYXI+Ojp2YWx1ZQotICAgICAgICAgJiYgISA6
OmJvb3N0Ojppc19zYW1lPHRfbm9fY3YsIHdjaGFyX3Q+Ojp2YWx1ZQotICAgICAgICAgJiYgISA6
OmJvb3N0Ojppc19zYW1lPHRfbm9fY3YsIGJvb2w+Ojp2YWx1ZSksCi0gICAgICAgICB0eXBlbmFt
ZSBjb25kaXRpb25hbDwKLSAgICAgICAgICAgIGlzX3NhbWU8dF9ub19jdiwgdW5zaWduZWQgY2hh
cj46OnZhbHVlLAotICAgICAgICAgICAgc2lnbmVkIGNoYXIsCi0gICAgICAgICAgICB0eXBlbmFt
ZSBjb25kaXRpb25hbDwKLSAgICAgICAgICAgICAgIGlzX3NhbWU8dF9ub19jdiwgdW5zaWduZWQg
c2hvcnQ+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgIHNpZ25lZCBzaG9ydCwKLSAgICAgICAgICAg
ICAgIHR5cGVuYW1lIGNvbmRpdGlvbmFsPAotICAgICAgICAgICAgICAgICAgaXNfc2FtZTx0X25v
X2N2LCB1bnNpZ25lZCBpbnQ+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgIGludCwKLSAgICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIGNvbmRpdGlvbmFsPAotICAgICAgICAgICAgICAgICAgICAg
aXNfc2FtZTx0X25vX2N2LCB1bnNpZ25lZCBsb25nPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAg
ICAgICBsb25nLAotI2lmIGRlZmluZWQoQk9PU1RfSEFTX0xPTkdfTE9ORykKLSNpZmRlZiBCT09T
VF9IQVNfSU5UMTI4Ci0gICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBjb25kaXRpb25hbDwK
LSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0X25vX2N2KSA9PSBzaXplb2YoYm9vc3Q6
OmxvbmdfbG9uZ190eXBlKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICBib29zdDo6bG9uZ19s
b25nX3R5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vc3Q6OmludDEyOF90eXBlCi0g
ICAgICAgICAgICAgICAgICAgICA+Ojp0eXBlCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAg
Ym9vc3Q6OmxvbmdfbG9uZ190eXBlCi0jZW5kaWYKLSNlbGlmIGRlZmluZWQoQk9PU1RfSEFTX01T
X0lOVDY0KQotICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NAotI2Vsc2UKLSAgICAgICAgICAg
ICAgICAgICAgIGxvbmcKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgPjo6dHlwZQotICAgICAg
ICAgICAgICAgPjo6dHlwZQotICAgICAgICAgICAgPjo6dHlwZQotICAgICAgICAgPjo6dHlwZSwK
LSAgICAgICAgIC8vIE5vdCBhIHJlZ3VsYXIgaW50ZWdlciB0eXBlOgotICAgICAgICAgdHlwZW5h
bWUgY29uZGl0aW9uYWw8Ci0gICAgICAgICAgICBzaXplb2YodF9ub19jdikgPT0gc2l6ZW9mKHVu
c2lnbmVkIGNoYXIpLAotICAgICAgICAgICAgc2lnbmVkIGNoYXIsCi0gICAgICAgICAgICB0eXBl
bmFtZSBjb25kaXRpb25hbDwKLSAgICAgICAgICAgICAgIHNpemVvZih0X25vX2N2KSA9PSBzaXpl
b2YodW5zaWduZWQgc2hvcnQpLAotICAgICAgICAgICAgICAgc2lnbmVkIHNob3J0LAotICAgICAg
ICAgICAgICAgdHlwZW5hbWUgY29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAgICAgICBzaXplb2Yo
dF9ub19jdikgPT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCi0gICAgICAgICAgICAgICAgICBpbnQs
Ci0gICAgICAgICAgICAgICAgICB0eXBlbmFtZSBjb25kaXRpb25hbDwKLSAgICAgICAgICAgICAg
ICAgICAgIHNpemVvZih0X25vX2N2KSA9PSBzaXplb2YodW5zaWduZWQgbG9uZyksCi0gICAgICAg
ICAgICAgICAgICAgICBsb25nLAotI2lmIGRlZmluZWQoQk9PU1RfSEFTX0xPTkdfTE9ORykKLSNp
ZmRlZiBCT09TVF9IQVNfSU5UMTI4Ci0gICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBjb25k
aXRpb25hbDwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0X25vX2N2KSA9PSBzaXpl
b2YoYm9vc3Q6OmxvbmdfbG9uZ190eXBlKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICBib29z
dDo6bG9uZ19sb25nX3R5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vc3Q6OmludDEy
OF90eXBlCi0gICAgICAgICAgICAgICAgICAgICA+Ojp0eXBlCi0jZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgYm9vc3Q6OmxvbmdfbG9uZ190eXBlCi0jZW5kaWYKLSNlbGlmIGRlZmluZWQoQk9P
U1RfSEFTX01TX0lOVDY0KQotICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NAotI2Vsc2UKLSAg
ICAgICAgICAgICAgICAgICAgIGxvbmcKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgPjo6dHlw
ZQotICAgICAgICAgICAgICAgPjo6dHlwZQotICAgICAgICAgICAgPjo6dHlwZQotICAgICAgICAg
Pjo6dHlwZQotICAgICAgPjo6dHlwZQotICAgPjo6dHlwZSBiYXNlX2ludGVnZXJfdHlwZTsKLSAg
IAotICAgLy8gQWRkIGJhY2sgYW55IGNvbnN0IHF1YWxpZmllcjoKLSAgIHR5cGVkZWYgdHlwZW5h
bWUgY29uZGl0aW9uYWw8Ci0gICAgICBpc19jb25zdDxUPjo6dmFsdWUsCi0gICAgICB0eXBlbmFt
ZSBhZGRfY29uc3Q8YmFzZV9pbnRlZ2VyX3R5cGU+Ojp0eXBlLAotICAgICAgYmFzZV9pbnRlZ2Vy
X3R5cGUKLSAgID46OnR5cGUgY29uc3RfYmFzZV9pbnRlZ2VyX3R5cGU7Ci1wdWJsaWM6Ci0gICAv
LyBBZGQgYmFjayBhbnkgdm9sYXRpbGUgcXVhbGlmaWVyOgotICAgdHlwZWRlZiB0eXBlbmFtZSBj
b25kaXRpb25hbDwKLSAgICAgIGlzX3ZvbGF0aWxlPFQ+Ojp2YWx1ZSwKLSAgICAgIHR5cGVuYW1l
IGFkZF92b2xhdGlsZTxjb25zdF9iYXNlX2ludGVnZXJfdHlwZT46OnR5cGUsCi0gICAgICBjb25z
dF9iYXNlX2ludGVnZXJfdHlwZQotICAgPjo6dHlwZSB0eXBlOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1RUX0FERF9SRUZFUkVOQ0VfSFBQX0lOQ0xVREVE
Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL21ha2VfdW5zaWduZWQuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvbWFrZV91bnNpZ25lZC5ocHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMjFlYmFlYjI2ZDQxN2ZhOTExOTUzMjFmNjc2ZjcxNjhi
NWU3NGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvbWFrZV91
bnNpZ25lZC5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotCi0vLyAgKEMpIENv
cHlyaWdodCBKb2huIE1hZGRvY2sgMjAwNy4KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlz
dHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8g
IFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBj
b3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0v
LyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVj
ZW50IHZlcnNpb24gaW5jbHVkaW5nIGRvY3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRf
TUFLRV9VTlNJR05FRF9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfTUFLRV9VTlNJR05F
RF9IUFBfSU5DTFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2NvbmRpdGlvbmFs
LmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19pbnRlZ3JhbC5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfc2lnbmVkLmhwcD4KLSNpbmNsdWRlIDxib29zdC90
eXBlX3RyYWl0cy9pc191bnNpZ25lZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
aXNfZW51bS5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2N2LmhwcD4KLSNpbmNsdWRlIDxib29z
dC90eXBlX3RyYWl0cy9pc19jb25zdC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMv
aXNfdm9sYXRpbGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2FkZF9jb25zdC5o
cHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxlLmhwcD4KLSNpbmNs
dWRlIDxib29zdC9zdGF0aWNfYXNzZXJ0LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotdGVt
cGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgbWFrZV91bnNpZ25lZAotewotcHJpdmF0ZToKLSAgIEJP
T1NUX1NUQVRJQ19BU1NFUlRfTVNHKCg6OmJvb3N0Ojppc19pbnRlZ3JhbDxUPjo6dmFsdWUgfHwg
Ojpib29zdDo6aXNfZW51bTxUPjo6dmFsdWUpLCAiVGhlIHRlbXBsYXRlIGFyZ3VtZW50IHRvIG1h
a2VfdW5zaWduZWQgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIGVudW0gdHlwZS4iKTsKLSAgIEJPT1NU
X1NUQVRJQ19BU1NFUlRfTVNHKCghIDo6Ym9vc3Q6OmlzX3NhbWU8dHlwZW5hbWUgcmVtb3ZlX2N2
PFQ+Ojp0eXBlLCBib29sPjo6dmFsdWUpLCAiVGhlIHRlbXBsYXRlIGFyZ3VtZW50IHRvIG1ha2Vf
dW5zaWduZWQgbXVzdCBub3QgYmUgdGhlIHR5cGUgYm9vbCIpOwotCi0gICB0eXBlZGVmIHR5cGVu
YW1lIHJlbW92ZV9jdjxUPjo6dHlwZSB0X25vX2N2OwotICAgdHlwZWRlZiB0eXBlbmFtZSBjb25k
aXRpb25hbDwKLSAgICAgICg6OmJvb3N0Ojppc191bnNpZ25lZDxUPjo6dmFsdWUgJiYgOjpib29z
dDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlIAotICAgICAgJiYgISA6OmJvb3N0Ojppc19zYW1lPHRf
bm9fY3YsIGNoYXI+Ojp2YWx1ZQotICAgICAgJiYgISA6OmJvb3N0Ojppc19zYW1lPHRfbm9fY3Ys
IHdjaGFyX3Q+Ojp2YWx1ZQotICAgICAgJiYgISA6OmJvb3N0Ojppc19zYW1lPHRfbm9fY3YsIGJv
b2w+Ojp2YWx1ZSksCi0gICAgICBULAotICAgICAgdHlwZW5hbWUgY29uZGl0aW9uYWw8Ci0gICAg
ICAgICAoOjpib29zdDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlIAotICAgICAgICAgJiYgISA6OmJv
b3N0Ojppc19zYW1lPHRfbm9fY3YsIGNoYXI+Ojp2YWx1ZQotICAgICAgICAgJiYgISA6OmJvb3N0
Ojppc19zYW1lPHRfbm9fY3YsIHdjaGFyX3Q+Ojp2YWx1ZQotICAgICAgICAgJiYgISA6OmJvb3N0
Ojppc19zYW1lPHRfbm9fY3YsIGJvb2w+Ojp2YWx1ZSksCi0gICAgICAgICB0eXBlbmFtZSBjb25k
aXRpb25hbDwKLSAgICAgICAgICAgIGlzX3NhbWU8dF9ub19jdiwgc2lnbmVkIGNoYXI+Ojp2YWx1
ZSwKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIsCi0gICAgICAgICAgICB0eXBlbmFtZSBjb25k
aXRpb25hbDwKLSAgICAgICAgICAgICAgIGlzX3NhbWU8dF9ub19jdiwgc2hvcnQ+Ojp2YWx1ZSwK
LSAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0LAotICAgICAgICAgICAgICAgdHlwZW5hbWUg
Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAgICAgICBpc19zYW1lPHRfbm9fY3YsIGludD46OnZh
bHVlLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50LAotICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgY29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAgICAgICAgICBpc19zYW1lPHRfbm9f
Y3YsIGxvbmc+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcsCi0j
aWYgZGVmaW5lZChCT09TVF9IQVNfTE9OR19MT05HKQotI2lmZGVmIEJPT1NUX0hBU19JTlQxMjgK
LSAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGNvbmRpdGlvbmFsPAotICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZW9mKHRfbm9fY3YpID09IHNpemVvZihib29zdDo6dWxvbmdfbG9uZ190
eXBlKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICBib29zdDo6dWxvbmdfbG9uZ190eXBlLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJvb3N0Ojp1aW50MTI4X3R5cGUKLSAgICAgICAgICAg
ICAgICAgICAgID46OnR5cGUKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICBib29zdDo6dWxv
bmdfbG9uZ190eXBlCi0jZW5kaWYKLSNlbGlmIGRlZmluZWQoQk9PU1RfSEFTX01TX0lOVDY0KQot
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgX19pbnQ2NAotI2Vsc2UKLSAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgPjo6dHlw
ZQotICAgICAgICAgICAgICAgPjo6dHlwZQotICAgICAgICAgICAgPjo6dHlwZQotICAgICAgICAg
Pjo6dHlwZSwKLSAgICAgICAgIC8vIE5vdCBhIHJlZ3VsYXIgaW50ZWdlciB0eXBlOgotICAgICAg
ICAgdHlwZW5hbWUgY29uZGl0aW9uYWw8Ci0gICAgICAgICAgICBzaXplb2YodF9ub19jdikgPT0g
c2l6ZW9mKHVuc2lnbmVkIGNoYXIpLAotICAgICAgICAgICAgdW5zaWduZWQgY2hhciwKLSAgICAg
ICAgICAgIHR5cGVuYW1lIGNvbmRpdGlvbmFsPAotICAgICAgICAgICAgICAgc2l6ZW9mKHRfbm9f
Y3YpID09IHNpemVvZih1bnNpZ25lZCBzaG9ydCksCi0gICAgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCwKLSAgICAgICAgICAgICAgIHR5cGVuYW1lIGNvbmRpdGlvbmFsPAotICAgICAgICAgICAg
ICAgICAgc2l6ZW9mKHRfbm9fY3YpID09IHNpemVvZih1bnNpZ25lZCBpbnQpLAotICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50LAotICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgY29uZGl0
aW9uYWw8Ci0gICAgICAgICAgICAgICAgICAgICBzaXplb2YodF9ub19jdikgPT0gc2l6ZW9mKHVu
c2lnbmVkIGxvbmcpLAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywKLSNpZiBk
ZWZpbmVkKEJPT1NUX0hBU19MT05HX0xPTkcpCi0jaWZkZWYgQk9PU1RfSEFTX0lOVDEyOAotICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgY29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzaXplb2YodF9ub19jdikgPT0gc2l6ZW9mKGJvb3N0Ojp1bG9uZ19sb25nX3R5cGUp
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb3N0Ojp1bG9uZ19sb25nX3R5cGUsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vc3Q6OnVpbnQxMjhfdHlwZQotICAgICAgICAgICAgICAg
ICAgICAgPjo6dHlwZQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgIGJvb3N0Ojp1bG9uZ19s
b25nX3R5cGUKLSNlbmRpZgotI2VsaWYgZGVmaW5lZChCT09TVF9IQVNfTVNfSU5UNjQpCi0gICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX2ludDY0Ci0jZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICA+Ojp0eXBlCi0g
ICAgICAgICAgICAgICA+Ojp0eXBlCi0gICAgICAgICAgICA+Ojp0eXBlCi0gICAgICAgICA+Ojp0
eXBlCi0gICAgICA+Ojp0eXBlCi0gICA+Ojp0eXBlIGJhc2VfaW50ZWdlcl90eXBlOwotICAgCi0g
ICAvLyBBZGQgYmFjayBhbnkgY29uc3QgcXVhbGlmaWVyOgotICAgdHlwZWRlZiB0eXBlbmFtZSBj
b25kaXRpb25hbDwKLSAgICAgIGlzX2NvbnN0PFQ+Ojp2YWx1ZSwKLSAgICAgIHR5cGVuYW1lIGFk
ZF9jb25zdDxiYXNlX2ludGVnZXJfdHlwZT46OnR5cGUsCi0gICAgICBiYXNlX2ludGVnZXJfdHlw
ZQotICAgPjo6dHlwZSBjb25zdF9iYXNlX2ludGVnZXJfdHlwZTsKLXB1YmxpYzoKLSAgIC8vIEFk
ZCBiYWNrIGFueSB2b2xhdGlsZSBxdWFsaWZpZXI6Ci0gICB0eXBlZGVmIHR5cGVuYW1lIGNvbmRp
dGlvbmFsPAotICAgICAgaXNfdm9sYXRpbGU8VD46OnZhbHVlLAotICAgICAgdHlwZW5hbWUgYWRk
X3ZvbGF0aWxlPGNvbnN0X2Jhc2VfaW50ZWdlcl90eXBlPjo6dHlwZSwKLSAgICAgIGNvbnN0X2Jh
c2VfaW50ZWdlcl90eXBlCi0gICA+Ojp0eXBlIHR5cGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBi
b29zdAotCi0jZW5kaWYgLy8gQk9PU1RfVFRfQUREX1JFRkVSRU5DRV9IUFBfSU5DTFVERUQKLQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlw
ZV90cmFpdHMvbWFrZV92b2lkLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2Jvb3N0L3R5cGVfdHJhaXRzL21ha2Vfdm9pZC5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGY0ODgyM2IwNTk1OGUwN2ZlMjcwMjA2NjYyNzI0NTExNzJmNTliZGEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvbWFrZV92b2lkLmhwcAorKysg
L2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgMjAxNyBHbGVuIEpvc2Vw
aCBGZXJuYW5kZXMKLTxnbGVuam9mZSAtYXQtIGdtYWlsLmNvbT4KLQotRGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi1WZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQKLW9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5v
cmcvTElDRU5TRV8xXzAudHh0KQotKi8KLQotI2lmbmRlZiBCT09TVF9UVF9NQUtFX1ZPSURfSFBQ
X0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX01BS0VfVk9JRF9IUFBfSU5DTFVERUQKLQotI2lu
Y2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLSNpZiAhZGVm
aW5lZChCT09TVF9OT19DWFgxMV9WQVJJQURJQ19URU1QTEFURVMpCi10ZW1wbGF0ZTxjbGFzcy4u
Lj4KLXN0cnVjdCBtYWtlX3ZvaWQgewotICAgIHR5cGVkZWYgdm9pZCB0eXBlOwotfTsKLQotI2lm
ICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1RFTVBMQVRFX0FMSUFTRVMpCi10ZW1wbGF0ZTxjbGFz
cy4uLiBUcz4KLXVzaW5nIHZvaWRfdCA9IHR5cGVuYW1lIG1ha2Vfdm9pZDxUcy4uLj46OnR5cGU7
Ci0jZW5kaWYKLQotI2Vsc2UgLyogQk9PU1RfTk9fQ1hYMTFfVkFSSUFESUNfVEVNUExBVEVTICov
Ci0KLXRlbXBsYXRlPGNsYXNzID0gdm9pZCwKLSAgICAgICAgIGNsYXNzID0gdm9pZCwKLSAgICAg
ICAgIGNsYXNzID0gdm9pZCwKLSAgICAgICAgIGNsYXNzID0gdm9pZCwKLSAgICAgICAgIGNsYXNz
ID0gdm9pZD4KLXN0cnVjdCBtYWtlX3ZvaWQgewotICAgIHR5cGVkZWYgdm9pZCB0eXBlOwotfTsK
LQotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1RFTVBMQVRFX0FMSUFTRVMpCi10ZW1wbGF0
ZTxjbGFzcyBBID0gdm9pZCwKLSAgICAgICAgIGNsYXNzIEIgPSB2b2lkLAotICAgICAgICAgY2xh
c3MgQyA9IHZvaWQsCi0gICAgICAgICBjbGFzcyBEID0gdm9pZCwKLSAgICAgICAgIGNsYXNzIEUg
PSB2b2lkPgotdXNpbmcgdm9pZF90ID0gdHlwZW5hbWUgbWFrZV92b2lkPEEsIEIsIEMsIEQsIEU+
Ojp0eXBlOwotI2VuZGlmCi0KLSNlbmRpZgotCi19IC8qIGJvb3N0ICovCi0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90
cmFpdHMvcHJvbW90ZS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC90eXBlX3RyYWl0cy9wcm9tb3RlLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTg3NjE3YTI4Nzg5YmZjNDNmZDM2NjRlZTRiMTQ2OTIyZjFiMzRhYi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9wcm9tb3RlLmhwcAorKysgL2Rldi9udWxs
CkBAIC0xLDIwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDA1IEFsZXhhbmRlciBOYXNvbm92Lgot
Ly8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24g
MS4wLiAoU2VlCi0vLyBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotCi0jaWZuZGVmIEZJ
TEVfYm9vc3RfdHlwZV90cmFpdHNfcHJvbW90ZV9ocHBfSU5DTFVERUQKLSNkZWZpbmUgRklMRV9i
b29zdF90eXBlX3RyYWl0c19wcm9tb3RlX2hwcF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Ym9vc3Qv
Y29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pbnRlZ3JhbF9wcm9tb3Rp
b24uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2Zsb2F0aW5nX3BvaW50X3Byb21v
dGlvbi5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVj
dCBwcm9tb3RlIDogcHVibGljIGludGVncmFsX3Byb21vdGlvbjx0eXBlbmFtZSBmbG9hdGluZ19w
b2ludF9wcm9tb3Rpb248VD46OnR5cGU+e307Ci0KLX0KLQotI2VuZGlmIC8vICNpZm5kZWYgRklM
RV9ib29zdF90eXBlX3RyYWl0c19wcm9tb3RlX2hwcF9JTkNMVURFRAotCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9yYW5r
LmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJh
aXRzL3JhbmsuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjgyMGYxYTU1ZDZk
MTVmMTIyYTU1MDc2ZGVjMDNlZmZlNWY1Y2MwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3R5cGVfdHJhaXRzL3JhbmsuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAot
Ci0vLyAgKEMpIENvcHlyaWdodCBKb2huIE1hZGRvY2sgMjAwNS4gIAotLy8gIFVzZSwgbW9kaWZp
Y2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJl
IExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5T
RV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFf
MC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy90eXBlX3RyYWl0
cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbi4KLQotCi0j
aWZuZGVmIEJPT1NUX1RUX1JBTktfSFBQX0lOQ0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX1JBTktf
SFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxjc3RkZGVmPiAvLyBzaXplX3QKLSNpbmNsdWRlIDxi
b29zdC90eXBlX3RyYWl0cy9pbnRlZ3JhbF9jb25zdGFudC5ocHA+Ci0KLW5hbWVzcGFjZSBib29z
dCB7Ci0KLSNpZiAhZGVmaW5lZCggX19DT0RFR0VBUkNfXyApCi0KLW5hbWVzcGFjZSBkZXRhaWx7
Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPgotc3RydWN0IHJhbmtfaW1wCi17
Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHZhbHVlID0gTik7Ci19Owot
I2lmICFkZWZpbmVkKEJPT1NUX05PX0FSUkFZX1RZUEVfU1BFQ0lBTElaQVRJT05TKQotdGVtcGxh
dGUgPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IFIsIHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgcmFua19p
bXA8VFtSXSwgTj4KLXsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgdmFs
dWUgPSAoOjpib29zdDo6ZGV0YWlsOjpyYW5rX2ltcDxULCBOKzE+Ojp2YWx1ZSkpOwotfTsKLQot
dGVtcGxhdGUgPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IFIsIHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3Qg
cmFua19pbXA8VCBjb25zdFtSXSwgTj4KLXsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6
OnNpemVfdCwgdmFsdWUgPSAoOjpib29zdDo6ZGV0YWlsOjpyYW5rX2ltcDxULCBOKzE+Ojp2YWx1
ZSkpOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IFIsIHN0ZDo6c2l6ZV90
IE4+Ci1zdHJ1Y3QgcmFua19pbXA8VCB2b2xhdGlsZVtSXSwgTj4KLXsKLSAgIEJPT1NUX1NUQVRJ
Q19DT05TVEFOVChzdGQ6OnNpemVfdCwgdmFsdWUgPSAoOjpib29zdDo6ZGV0YWlsOjpyYW5rX2lt
cDxULCBOKzE+Ojp2YWx1ZSkpOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIHN0ZDo6c2l6ZV90
IFIsIHN0ZDo6c2l6ZV90IE4+Ci1zdHJ1Y3QgcmFua19pbXA8VCBjb25zdCB2b2xhdGlsZVtSXSwg
Tj4KLXsKLSAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChzdGQ6OnNpemVfdCwgdmFsdWUgPSAoOjpi
b29zdDo6ZGV0YWlsOjpyYW5rX2ltcDxULCBOKzE+Ojp2YWx1ZSkpOwotfTsKLQotI2lmICFCT09T
VF9XT1JLQVJPVU5EKF9fQk9STEFORENfXywgPCAweDYwMCkgJiYgIWRlZmluZWQoX19JQk1DUFBf
XykgJiYgICFCT09TVF9XT1JLQVJPVU5EKF9fRE1DX18sIEJPT1NUX1RFU1RFRF9BVCgweDg0MCkp
Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4KLXN0cnVjdCByYW5rX2ltcDxUW10s
IE4+Ci17Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHZhbHVlID0gKDo6
Ym9vc3Q6OmRldGFpbDo6cmFua19pbXA8VCwgTisxPjo6dmFsdWUpKTsKLX07Ci10ZW1wbGF0ZSA8
Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4KLXN0cnVjdCByYW5rX2ltcDxUIGNvbnN0W10sIE4+Ci17
Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHZhbHVlID0gKDo6Ym9vc3Q6
OmRldGFpbDo6cmFua19pbXA8VCwgTisxPjo6dmFsdWUpKTsKLX07Ci10ZW1wbGF0ZSA8Y2xhc3Mg
VCwgc3RkOjpzaXplX3QgTj4KLXN0cnVjdCByYW5rX2ltcDxUIHZvbGF0aWxlW10sIE4+Ci17Ci0g
ICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHZhbHVlID0gKDo6Ym9vc3Q6OmRl
dGFpbDo6cmFua19pbXA8VCwgTisxPjo6dmFsdWUpKTsKLX07Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwg
c3RkOjpzaXplX3QgTj4KLXN0cnVjdCByYW5rX2ltcDxUIGNvbnN0IHZvbGF0aWxlW10sIE4+Ci17
Ci0gICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoc3RkOjpzaXplX3QsIHZhbHVlID0gKDo6Ym9vc3Q6
OmRldGFpbDo6cmFua19pbXA8VCwgTisxPjo6dmFsdWUpKTsKLX07Ci0jZW5kaWYKLSNlbmRpZgot
fQotCi0jZW5kaWYgLy8gIWRlZmluZWQoIF9fQ09ERUdFQVJDX18gKQotCi0jaWYgZGVmaW5lZCgg
X19DT0RFR0VBUkNfXyApCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHJhbmsgOiBwdWJsaWMg
aW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIF9fYXJyYXlfcmFuayhUKT57fTsKLSNlbHNl
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHJhbmsgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3Rh
bnQ8c3RkOjpzaXplX3QsICg6OmJvb3N0OjpkZXRhaWw6OnJhbmtfaW1wPFQsIDA+Ojp2YWx1ZSk+
e307Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJPT1NUX1RU
X0lTX01FTUJFUl9GVU5DVElPTl9QT0lOVEVSX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3Zl
X2FsbF9leHRlbnRzLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9hbGxfZXh0ZW50cy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDkwYzkwZDM1MjM4NjYwMWI5Mjk4MmI3YjI2Y2U1YmNkYzJhZGFiOWMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2FsbF9leHRl
bnRzLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmln
aHQgSm9obiBNYWRkb2NrIDIwMDUuCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1
dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJz
aW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBh
dAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNl
ZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2
ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX1JFTU9W
RV9BTExfRVhURU5UU19IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfUkVNT1ZFX0FMTF9F
WFRFTlRTX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNs
dWRlIDxjc3RkZGVmPiAvLyBzaXplX3QKLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvd29ya2Fyb3Vu
ZC5ocHA+Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3Qg
cmVtb3ZlX2FsbF9leHRlbnRzeyB0eXBlZGVmIFQgdHlwZTsgfTsKLQotI2lmICFkZWZpbmVkKEJP
T1NUX05PX0FSUkFZX1RZUEVfU1BFQ0lBTElaQVRJT05TKQotdGVtcGxhdGUgPGNsYXNzIFQsIHN0
ZDo6c2l6ZV90IE4+IHN0cnVjdCByZW1vdmVfYWxsX2V4dGVudHM8VFtOXT4gOiBwdWJsaWMgcmVt
b3ZlX2FsbF9leHRlbnRzPFQ+e307Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4g
c3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50czxUIGNvbnN0W05dPiA6IHB1YmxpYyByZW1vdmVfYWxs
X2V4dGVudHM8VCBjb25zdD57fTsKLXRlbXBsYXRlIDxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPiBz
dHJ1Y3QgcmVtb3ZlX2FsbF9leHRlbnRzPFQgdm9sYXRpbGVbTl0+IDogcHVibGljIHJlbW92ZV9h
bGxfZXh0ZW50czxUIHZvbGF0aWxlPnt9OwotdGVtcGxhdGUgPGNsYXNzIFQsIHN0ZDo6c2l6ZV90
IE4+IHN0cnVjdCByZW1vdmVfYWxsX2V4dGVudHM8VCBjb25zdCB2b2xhdGlsZVtOXT4gOiBwdWJs
aWMgcmVtb3ZlX2FsbF9leHRlbnRzPFQgY29uc3Qgdm9sYXRpbGU+e307Ci0jaWYgIUJPT1NUX1dP
UktBUk9VTkQoX19CT1JMQU5EQ19fLCBCT09TVF9URVNURURfQVQoMHg2MTApKSAmJiAhZGVmaW5l
ZChfX0lCTUNQUF9fKSAmJiAgIUJPT1NUX1dPUktBUk9VTkQoX19ETUNfXywgQk9PU1RfVEVTVEVE
X0FUKDB4ODQwKSkKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgcmVtb3ZlX2FsbF9leHRlbnRz
PFRbXT4gOiBwdWJsaWMgcmVtb3ZlX2FsbF9leHRlbnRzPFQ+e307Ci10ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50czxUIGNvbnN0W10+IDogcHVibGljIHJlbW92ZV9h
bGxfZXh0ZW50czxUIGNvbnN0Pnt9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCByZW1vdmVf
YWxsX2V4dGVudHM8VCB2b2xhdGlsZVtdPiA6IHB1YmxpYyByZW1vdmVfYWxsX2V4dGVudHM8VCB2
b2xhdGlsZT57fTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgcmVtb3ZlX2FsbF9leHRlbnRz
PFQgY29uc3Qgdm9sYXRpbGVbXT4gOiBwdWJsaWMgcmVtb3ZlX2FsbF9leHRlbnRzPFQgY29uc3Qg
dm9sYXRpbGU+e307Ci0jZW5kaWYKLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0j
ZW5kaWYgLy8gQk9PU1RfVFRfUkVNT1ZFX0JPVU5EU19IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL3Jl
bW92ZV9ib3VuZHMuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvdHlwZV90cmFpdHMvcmVtb3ZlX2JvdW5kcy5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDU2OTg4ZDI0ZTAxNGRkYzMyYmM5YzM3N2RmNzI5MmY3YTYxMmEwNWUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2JvdW5kcy5ocHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0KLS8vICAoQykgQ29weXJpZ2h0IFN0ZXZlIENs
ZWFyeSwgQmVtYW4gRGF3ZXMsIEhvd2FyZCBIaW5uYW50ICYgSm9obiBNYWRkb2NrIDIwMDAuCi0v
LyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUg
Qm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlp
bmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9s
aWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVu
dGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX1JFTU9WRV9CT1VORFNfSFBQX0lOQ0xVREVECi0j
ZGVmaW5lIEJPT1NUX1RUX1JFTU9WRV9CT1VORFNfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxi
b29zdC90eXBlX3RyYWl0cy9yZW1vdmVfZXh0ZW50LmhwcD4KLQotbmFtZXNwYWNlIGJvb3N0IAot
ewotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHJlbW92ZV9ib3VuZHMgOiBwdWJsaWMgcmVt
b3ZlX2V4dGVudDxUPiB7fTsKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlmIC8vIEJP
T1NUX1RUX1JFTU9WRV9CT1VORFNfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY29uc3Qu
aHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFp
dHMvcmVtb3ZlX2NvbnN0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIzODk2
MmM2ZDAzYTYyMzE0ZjdhYzJmZjMxMzlkZjMwYjY2MWEzZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY29uc3QuaHBwCisrKyAvZGV2L251bGwKQEAg
LTEsMzMgKzAsMCBAQAotCi0vLyAgKEMpIENvcHlyaWdodCBEYXZlIEFicmFoYW1zLCBTdGV2ZSBD
bGVhcnksIEJlbWFuIERhd2VzLCBIb3dhcmQKLS8vICBIaW5uYW50ICYgSm9obiBNYWRkb2NrIDIw
MDAuICAKLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0
IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFj
Y29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3
dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5n
IGRvY3VtZW50YXRpb24uCi0KLQotI2lmbmRlZiBCT09TVF9UVF9SRU1PVkVfQ09OU1RfSFBQX0lO
Q0xVREVECi0jZGVmaW5lIEJPT1NUX1RUX1JFTU9WRV9DT05TVF9IUFBfSU5DTFVERUQKLQotI2lu
Y2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4gLy8gc2l6ZV90Ci0j
aW5jbHVkZSA8Ym9vc3QvZGV0YWlsL3dvcmthcm91bmQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3Qg
ewotCi0gICAvLyAgY29udmVydCBhIHR5cGUgVCB0byBhIG5vbi1jdi1xdWFsaWZpZWQgdHlwZSAt
IHJlbW92ZV9jb25zdDxUPgotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCByZW1vdmVfY29u
c3R7IHR5cGVkZWYgVCB0eXBlOyB9OwotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCByZW1v
dmVfY29uc3Q8VCBjb25zdD57IHR5cGVkZWYgVCB0eXBlOyB9OwotCi0jaWYgIWRlZmluZWQoQk9P
U1RfTk9fQVJSQVlfVFlQRV9TUEVDSUFMSVpBVElPTlMpCi0gICB0ZW1wbGF0ZSA8Y2xhc3MgVCwg
c3RkOjpzaXplX3QgTj4gc3RydWN0IHJlbW92ZV9jb25zdDxUIGNvbnN0W05dPnsgdHlwZWRlZiBU
IHR5cGVbTl07IH07Ci0jaWYgIUJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCA8IDB4NjAw
KSAmJiAhZGVmaW5lZChfX0lCTUNQUF9fKSAmJiAgIUJPT1NUX1dPUktBUk9VTkQoX19ETUNfXywg
Qk9PU1RfVEVTVEVEX0FUKDB4ODQwKSkKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgcmVt
b3ZlX2NvbnN0PFQgY29uc3RbXT57IHR5cGVkZWYgVCB0eXBlW107IH07Ci0jZW5kaWYKLSNlbmRp
ZgotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfVFRfUkVNT1ZFX0NP
TlNUX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2N2LmhwcCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jdi5ocHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MzkzY2ZiODE5MWY1YjI5ODA5YzVmYmI1ODBk
ODE0MjA0NzJhOTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMv
cmVtb3ZlX2N2LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLQotLy8gIChDKSBD
b3B5cmlnaHQgRGF2ZSBBYnJhaGFtcywgU3RldmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywgSG93YXJk
Ci0vLyAgSGlubmFudCAmIEpvaG4gTWFkZG9jayAyMDAwLiAgCi0vLyAgVXNlLCBtb2RpZmljYXRp
b24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGlj
ZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFf
MC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4
dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZv
ciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0KLSNpZm5k
ZWYgQk9PU1RfVFRfUkVNT1ZFX0NWX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9SRU1P
VkVfQ1ZfSFBQX0lOQ0xVREVECi0KLSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2luY2x1
ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLSNpbmNsdWRlIDxjc3RkZGVmPiAvLyBz
aXplX3QKLQotbmFtZXNwYWNlIGJvb3N0IHsKLQotICAgLy8gIGNvbnZlcnQgYSB0eXBlIFQgdG8g
YSBub24tY3YtcXVhbGlmaWVkIHR5cGUgLSByZW1vdmVfY3Y8VD4KLXRlbXBsYXRlIDxjbGFzcyBU
PiBzdHJ1Y3QgcmVtb3ZlX2N2eyB0eXBlZGVmIFQgdHlwZTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBU
PiBzdHJ1Y3QgcmVtb3ZlX2N2PFQgY29uc3Q+eyB0eXBlZGVmIFQgdHlwZTsgIH07Ci10ZW1wbGF0
ZSA8Y2xhc3MgVD4gc3RydWN0IHJlbW92ZV9jdjxUIHZvbGF0aWxlPnsgdHlwZWRlZiBUIHR5cGU7
IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHJlbW92ZV9jdjxUIGNvbnN0IHZvbGF0aWxl
PnsgdHlwZWRlZiBUIHR5cGU7IH07Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19BUlJBWV9UWVBF
X1NQRUNJQUxJWkFUSU9OUykKLXRlbXBsYXRlIDxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPiBzdHJ1
Y3QgcmVtb3ZlX2N2PFQgY29uc3RbTl0+eyB0eXBlZGVmIFQgdHlwZVtOXTsgfTsKLXRlbXBsYXRl
IDxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPiBzdHJ1Y3QgcmVtb3ZlX2N2PFQgY29uc3Qgdm9sYXRp
bGVbTl0+eyB0eXBlZGVmIFQgdHlwZVtOXTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBULCBzdGQ6OnNp
emVfdCBOPiBzdHJ1Y3QgcmVtb3ZlX2N2PFQgdm9sYXRpbGVbTl0+eyB0eXBlZGVmIFQgdHlwZVtO
XTsgfTsKLSNpZiAhQk9PU1RfV09SS0FST1VORChfX0JPUkxBTkRDX18sIDwgMHg2MDApICYmICFk
ZWZpbmVkKF9fSUJNQ1BQX18pICYmICAhQk9PU1RfV09SS0FST1VORChfX0RNQ19fLCBCT09TVF9U
RVNURURfQVQoMHg4NDApKQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCByZW1vdmVfY3Y8VCBj
b25zdFtdPnsgdHlwZWRlZiBUIHR5cGVbXTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3Qg
cmVtb3ZlX2N2PFQgY29uc3Qgdm9sYXRpbGVbXT57IHR5cGVkZWYgVCB0eXBlW107IH07Ci10ZW1w
bGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHJlbW92ZV9jdjxUIHZvbGF0aWxlW10+eyB0eXBlZGVmIFQg
dHlwZVtdOyB9OwotI2VuZGlmCi0jZW5kaWYKLQotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0j
ZW5kaWYgLy8gQk9PU1RfVFRfUkVNT1ZFX0NWX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3Zl
X2V4dGVudC5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90
eXBlX3RyYWl0cy9yZW1vdmVfZXh0ZW50LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYjY1MjhlNTI1YjBkOGIyYmM2NThjNDQ2OWYwYTMzMjY1ZWQxYTYxNS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfZXh0ZW50LmhwcAorKysgL2Rl
di9udWxsCkBAIC0xLDM1ICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgU3RldmUgQ2xlYXJ5
LCBCZW1hbiBEYXdlcywgSG93YXJkIEhpbm5hbnQgJiBKb2huIE1hZGRvY2sgMjAwMC0yMDA1Lgot
Ly8gIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhl
IEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55
aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0
Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1l
bnRhdGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9SRU1PVkVfRVhURU5UX0hQUF9JTkNMVURFRAot
I2RlZmluZSBCT09TVF9UVF9SRU1PVkVfRVhURU5UX0hQUF9JTkNMVURFRAotCi0jaW5jbHVkZSA8
Ym9vc3QvY29uZmlnLmhwcD4KLSNpbmNsdWRlIDxib29zdC9kZXRhaWwvd29ya2Fyb3VuZC5ocHA+
Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4gLy8gc2l6ZV90Ci0KLW5hbWVzcGFjZSBib29zdCB7Ci0KLXRl
bXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgcmVtb3ZlX2V4dGVudHsgdHlwZWRlZiBUIHR5cGU7IH07
Ci0KLSNpZiAhZGVmaW5lZChCT09TVF9OT19BUlJBWV9UWVBFX1NQRUNJQUxJWkFUSU9OUykKLXRl
bXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOPiBzdHJ1Y3QgcmVtb3ZlX2V4dGVudDxU
W05dPiB7IHR5cGVkZWYgVCB0eXBlOyB9OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6
ZV90IE4+IHN0cnVjdCByZW1vdmVfZXh0ZW50PFQgY29uc3RbTl0+IHsgdHlwZWRlZiBUIGNvbnN0
IHR5cGU7IH07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTj4gc3RydWN0IHJl
bW92ZV9leHRlbnQ8VCB2b2xhdGlsZSBbTl0+IHsgdHlwZWRlZiBUIHZvbGF0aWxlIHR5cGU7IH07
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTj4gc3RydWN0IHJlbW92ZV9leHRl
bnQ8VCBjb25zdCB2b2xhdGlsZSBbTl0+IHsgdHlwZWRlZiBUIGNvbnN0IHZvbGF0aWxlIHR5cGU7
IH07Ci0jaWYgIUJPT1NUX1dPUktBUk9VTkQoX19CT1JMQU5EQ19fLCBCT09TVF9URVNURURfQVQo
MHg2MTApKSAmJiAhZGVmaW5lZChfX0lCTUNQUF9fKSAmJiAgIUJPT1NUX1dPUktBUk9VTkQoX19E
TUNfXywgQk9PU1RfVEVTVEVEX0FUKDB4ODQwKSkKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1
Y3QgcmVtb3ZlX2V4dGVudDxUW10+IHsgdHlwZWRlZiBUIHR5cGU7IH07Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gc3RydWN0IHJlbW92ZV9leHRlbnQ8VCBjb25zdFtdPiB7IHR5cGVkZWYgVCBjb25z
dCB0eXBlOyB9OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCByZW1vdmVfZXh0ZW50PFQg
dm9sYXRpbGVbXT4geyB0eXBlZGVmIFQgdm9sYXRpbGUgdHlwZTsgfTsKLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBzdHJ1Y3QgcmVtb3ZlX2V4dGVudDxUIGNvbnN0IHZvbGF0aWxlW10+IHsgdHlwZWRl
ZiBUIGNvbnN0IHZvbGF0aWxlIHR5cGU7IH07Ci0jZW5kaWYKLSNlbmRpZgotCi19IC8vIG5hbWVz
cGFjZSBib29zdAotCi0jZW5kaWYgLy8gQk9PU1RfVFRfUkVNT1ZFX0JPVU5EU19IUFBfSU5DTFVE
RUQKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0
L3R5cGVfdHJhaXRzL3JlbW92ZV9wb2ludGVyLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9wb2ludGVyLmhwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIxNjY1MjY2ZmRiYjBiNTQ1ODgyYTAwZWU2OGQwNzUz
ZDIxNjQ1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9yZW1v
dmVfcG9pbnRlci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0KLS8vICAoQykg
Q29weXJpZ2h0IFN0ZXZlIENsZWFyeSwgQmVtYW4gRGF3ZXMsIEhvd2FyZCBIaW5uYW50ICYgSm9o
biBNYWRkb2NrIDIwMDAuCi0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBh
cmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEu
MC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8g
IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRw
Oi8vd3d3LmJvb3N0Lm9yZy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9u
IGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLgotCi0jaWZuZGVmIEJPT1NUX1RUX1JFTU9WRV9QT0lO
VEVSX0hQUF9JTkNMVURFRAotI2RlZmluZSBCT09TVF9UVF9SRU1PVkVfUE9JTlRFUl9IUFBfSU5D
TFVERUQKLQotI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0KLSNpZiBkZWZpbmVkKEJPT1NU
X01TVkMpCi0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2N2LmhwcD4KLSNpbmNs
dWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19wb2ludGVyLmhwcD4KLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgYm9vc3QgewotCi0jaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCA8IDE5MDApCi0K
LW5hbWVzcGFjZSBkZXRhaWx7Ci0KLSAgIC8vCi0gICAvLyBXZSBuZWVkIGFsbCB0aGlzIGNyYXp5
IGluZGlyZWN0aW9uIGJlY2F1c2UgYSB0eXBlIHN1Y2ggYXM6Ci0gICAvLwotICAgLy8gVCAoKmNv
bnN0KShVKQotICAgLy8KLSAgIC8vIERvZXMgbm90IGJpbmQgdG8gYSA8VCo+IG9yIDxUKmNvbnN0
PiBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIHdpdGggVkMxMCBhbmQgZWFybGllcgotICAgLy8KLSAg
IHRlbXBsYXRlIDxjbGFzcyBUPiAKLSAgIHN0cnVjdCByZW1vdmVfcG9pbnRlcl9pbXAKLSAgIHsK
LSAgICAgIHR5cGVkZWYgVCB0eXBlOwotICAgfTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQ+IAot
ICAgc3RydWN0IHJlbW92ZV9wb2ludGVyX2ltcDxUKj4KLSAgIHsKLSAgICAgIHR5cGVkZWYgVCB0
eXBlOwotICAgfTsKLQotICAgdGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgYj4gCi0gICBzdHJ1Y3Qg
cmVtb3ZlX3BvaW50ZXJfaW1wMwotICAgewotICAgICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVf
cG9pbnRlcl9pbXA8dHlwZW5hbWUgYm9vc3Q6OnJlbW92ZV9jdjxUPjo6dHlwZT46OnR5cGUgdHlw
ZTsKLSAgIH07Ci0KLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiAKLSAgIHN0cnVjdCByZW1vdmVfcG9p
bnRlcl9pbXAzPFQsIGZhbHNlPgotICAgewotICAgICAgdHlwZWRlZiBUIHR5cGU7Ci0gICB9Owot
Ci0gICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gCi0gICBzdHJ1Y3QgcmVtb3ZlX3BvaW50ZXJfaW1wMgot
ICAgewotICAgICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfcG9pbnRlcl9pbXAzPFQsIDo6Ym9v
c3Q6OmlzX3BvaW50ZXI8VD46OnZhbHVlPjo6dHlwZSB0eXBlOwotICAgfTsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIFQ+IHN0cnVjdCByZW1vdmVfcG9pbnRlcnsgdHlwZWRlZiB0eXBlbmFtZSBib29z
dDo6ZGV0YWlsOjpyZW1vdmVfcG9pbnRlcl9pbXAyPFQ+Ojp0eXBlIHR5cGU7IH07Ci0KLSNlbHNl
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgcmVtb3ZlX3BvaW50ZXJ7IHR5cGVkZWYgVCB0
eXBlOyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCByZW1vdmVfcG9pbnRlcjxUKj57IHR5
cGVkZWYgVCB0eXBlOyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCByZW1vdmVfcG9pbnRl
cjxUKmNvbnN0PnsgdHlwZWRlZiBUIHR5cGU7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0
IHJlbW92ZV9wb2ludGVyPFQqdm9sYXRpbGU+eyB0eXBlZGVmIFQgdHlwZTsgfTsKLXRlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgcmVtb3ZlX3BvaW50ZXI8VCpjb25zdCB2b2xhdGlsZT57IHR5cGVk
ZWYgVCB0eXBlOyB9OwotCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgYm9vc3QKLQotI2VuZGlm
IC8vIEJPT1NUX1RUX1JFTU9WRV9QT0lOVEVSX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3Zl
X3JlZmVyZW5jZS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29z
dC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJlbmNlLmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZjc1ZTY3NzgzYmI4YzA4MDBiYjMxZWVkM2Y5NjViNzQ2MWRiYWYxMC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJlbmNlLmhw
cAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgU3Rl
dmUgQ2xlYXJ5LCBCZW1hbiBEYXdlcywgSG93YXJkIEhpbm5hbnQgJiBKb2huIE1hZGRvY2sgMjAw
MC4KLS8vICBVc2UsIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRv
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLAotLy8gIFZlcnNpb24gMS4wLiAoU2VlIGFjY29t
cGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5i
b29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KLS8vCi0vLyAgU2VlIGh0dHA6Ly93d3cuYm9vc3Qu
b3JnL2xpYnMvdHlwZV90cmFpdHMgZm9yIG1vc3QgcmVjZW50IHZlcnNpb24gaW5jbHVkaW5nIGRv
Y3VtZW50YXRpb24uCi0KLSNpZm5kZWYgQk9PU1RfVFRfUkVNT1ZFX1JFRkVSRU5DRV9IUFBfSU5D
TFVERUQKLSNkZWZpbmUgQk9PU1RfVFRfUkVNT1ZFX1JFRkVSRU5DRV9IUFBfSU5DTFVERUQKLQot
I2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL3dvcmth
cm91bmQuaHBwPgotCi1uYW1lc3BhY2UgYm9vc3QgewotCi0KLW5hbWVzcGFjZSBkZXRhaWx7Ci0v
LwotLy8gV2UgY2FuJ3QgZmlsdGVyIG91dCBydmFsdWVfcmVmZXJlbmNlcyBhdCB0aGUgc2FtZSBs
ZXZlbCBhcwotLy8gcmVmZXJlbmNlcyBvciB3ZSBnZXQgYW1iaWd1aXRpZXMgZnJvbSBtc3ZjOgot
Ly8KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IHJlbW92ZV9ydmFsdWVfcmVmCi17Ci0gICB0
eXBlZGVmIFQgdHlwZTsKLX07Ci0jaWZuZGVmIEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZFUkVO
Q0VTCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCByZW1vdmVfcnZhbHVlX3JlZjxUJiY+Ci17
Ci0gICB0eXBlZGVmIFQgdHlwZTsKLX07Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWls
Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgcmVtb3ZlX3JlZmVyZW5jZXsgdHlwZWRlZiB0
eXBlbmFtZSBib29zdDo6ZGV0YWlsOjpyZW1vdmVfcnZhbHVlX3JlZjxUPjo6dHlwZSB0eXBlOyB9
OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCByZW1vdmVfcmVmZXJlbmNlPFQmPnsgdHlwZWRl
ZiBUIHR5cGU7IH07Ci0KLSNpZiBkZWZpbmVkKEJPT1NUX0lMTEVHQUxfQ1ZfUkVGRVJFTkNFUykK
LS8vIHRoZXNlIGFyZSBpbGxlZ2FsIHNwZWNpYWxpc2F0aW9uczsgY3YtcXVhbGlmaWVzIGFwcGxp
ZWQgdG8KLS8vIHJlZmVyZW5jZXMgaGF2ZSBubyBlZmZlY3QgYWNjb3JkaW5nIHRvIFs4LjMuMnAx
XSwKLS8vIEMrKyBCdWlsZGVyIHJlcXVpcmVzIHRoZW0gdGhvdWdoIGFzIGl0IHRyZWF0cyBjdi1x
dWFsaWZpZWQKLS8vIHJlZmVyZW5jZXMgYXMgZGlzdGluY3QgdHlwZXMuLi4KLXRlbXBsYXRlIDxj
bGFzcyBUPiBzdHJ1Y3QgcmVtb3ZlX3JlZmVyZW5jZTxUJmNvbnN0PnsgdHlwZWRlZiBUIHR5cGU7
IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHJlbW92ZV9yZWZlcmVuY2U8VCZ2b2xhdGls
ZT57IHR5cGVkZWYgVCB0eXBlOyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCByZW1vdmVf
cmVmZXJlbmNlPFQmY29uc3Qgdm9sYXRpbGU+eyB0eXBlZGVmIFQgdHlwZTsgfTsKLSNlbmRpZgot
Ci0KLX0gLy8gbmFtZXNwYWNlIGJvb3N0Ci0KLSNlbmRpZiAvLyBCT09TVF9UVF9SRU1PVkVfUkVG
RVJFTkNFX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX3ZvbGF0aWxlLmhwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV92
b2xhdGlsZS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ODcwZjMxN2YzNTk4
Y2IxOTdhNTFhY2U5ZjY4ZWZjYWVkM2U1MmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9v
c3QvdHlwZV90cmFpdHMvcmVtb3ZlX3ZvbGF0aWxlLmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDM0
ICswLDAgQEAKLQotLy8gIChDKSBDb3B5cmlnaHQgRGF2ZSBBYnJhaGFtcywgU3RldmUgQ2xlYXJ5
LCBCZW1hbiBEYXdlcywgSG93YXJkCi0vLyAgSGlubmFudCAmIEpvaG4gTWFkZG9jayAyMDAwLiAg
Ci0vLyAgVXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0
aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwKLS8vICBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBh
bnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCi0vLwotLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9saWJzL3R5cGVfdHJhaXRzIGZvciBtb3N0IHJlY2VudCB2ZXJzaW9uIGluY2x1ZGluZyBkb2N1
bWVudGF0aW9uLgotCi0KLSNpZm5kZWYgQk9PU1RfVFRfUkVNT1ZFX1ZPTEFUSUxFX0hQUF9JTkNM
VURFRAotI2RlZmluZSBCT09TVF9UVF9SRU1PVkVfVk9MQVRJTEVfSFBQX0lOQ0xVREVECi0KLSNp
bmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJv
dW5kLmhwcD4KLSNpbmNsdWRlIDxjc3RkZGVmPiAvLyBzaXplX3QKLQotbmFtZXNwYWNlIGJvb3N0
IHsKLQotICAgLy8gIGNvbnZlcnQgYSB0eXBlIFQgdG8gYSBub24tY3YtcXVhbGlmaWVkIHR5cGUg
LSByZW1vdmVfdm9sYXRpbGU8VD4KLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgcmVtb3Zl
X3ZvbGF0aWxleyB0eXBlZGVmIFQgdHlwZTsgfTsKLSAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1
Y3QgcmVtb3ZlX3ZvbGF0aWxlPFQgdm9sYXRpbGU+eyB0eXBlZGVmIFQgdHlwZTsgfTsKLQotI2lm
ICFkZWZpbmVkKEJPT1NUX05PX0FSUkFZX1RZUEVfU1BFQ0lBTElaQVRJT05TKQotICAgdGVtcGxh
dGUgPGNsYXNzIFQsIHN0ZDo6c2l6ZV90IE4+IHN0cnVjdCByZW1vdmVfdm9sYXRpbGU8VCB2b2xh
dGlsZVtOXT57IHR5cGVkZWYgVCB0eXBlW05dOyB9OwotI2lmICFCT09TVF9XT1JLQVJPVU5EKF9f
Qk9STEFORENfXywgPCAweDYwMCkgJiYgIWRlZmluZWQoX19JQk1DUFBfXykgJiYgICFCT09TVF9X
T1JLQVJPVU5EKF9fRE1DX18sIEJPT1NUX1RFU1RFRF9BVCgweDg0MCkpCi0gICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4gc3RydWN0IHJlbW92ZV92b2xhdGlsZTxUIHZvbGF0aWxlW10+eyB0eXBlZGVmIFQg
dHlwZVtdOyB9OwotI2VuZGlmCi0jZW5kaWYKLQotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0j
ZW5kaWYgLy8gQk9PU1RfVFRfUkVNT1ZFX1ZPTEFUSUxFX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdHlwZV90cmFpdHMv
dHlwZV9pZGVudGl0eS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC90eXBlX3RyYWl0cy90eXBlX2lkZW50aXR5LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNmQyZGQ1YjRkY2FlODgzZDFmNjliMDM5YWE2YmFkMWNlMmZjZjEzYS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC90eXBlX3RyYWl0cy90eXBlX2lkZW50aXR5LmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSNpZm5kZWYgQk9PU1RfVFlQRV9UUkFJVFNf
VFlQRV9JREVOVElUWV9IUFBfSU5DTFVERUQKLSNkZWZpbmUgQk9PU1RfVFlQRV9UUkFJVFNfVFlQ
RV9JREVOVElUWV9IUFBfSU5DTFVERUQKLQotLy8KLS8vICBDb3B5cmlnaHQgMjAxNSBQZXRlciBE
aW1vdgotLy8KLS8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5z
ZSwgVmVyc2lvbiAxLjAuCi0vLyAgU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4
dCBvciBjb3B5IGF0Ci0vLyAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ci0v
LwotCi1uYW1lc3BhY2UgYm9vc3QKLXsKLQotdGVtcGxhdGU8Y2xhc3MgVD4gc3RydWN0IHR5cGVf
aWRlbnRpdHkKLXsKLSAgICB0eXBlZGVmIFQgdHlwZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGJv
b3N0Ci0KLSNlbmRpZiAvLyAjaWZuZGVmIEJPT1NUX1RZUEVfVFJBSVRTX1RZUEVfSURFTlRJVFlf
SFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ib29zdC90eXBlX3RyYWl0cy90eXBlX3dpdGhfYWxpZ25tZW50LmhwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3R5cGVfdHJhaXRzL3R5cGVfd2l0aF9h
bGlnbm1lbnQuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGYxZDk4Mjk0OWRh
OTM1N2UxODI4OTEzZDcxOTk4ZTEwZDI3ZTc1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jv
b3N0L3R5cGVfdHJhaXRzL3R5cGVfd2l0aF9hbGlnbm1lbnQuaHBwCisrKyAvZGV2L251bGwKQEAg
LTEsMjYxICswLDAgQEAKLS8vICAoQykgQ29weXJpZ2h0IEpvaG4gTWFkZG9jayAyMDAwLgotLy8g
IFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJv
b3N0IFNvZnR3YXJlIExpY2Vuc2UsCi0vLyAgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5n
IGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLS8vICBodHRwOi8vd3d3LmJvb3N0Lm9y
Zy9MSUNFTlNFXzFfMC50eHQpLgotLy8KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvbGli
cy90eXBlX3RyYWl0cyBmb3IgbW9zdCByZWNlbnQgdmVyc2lvbiBpbmNsdWRpbmcgZG9jdW1lbnRh
dGlvbi4KLQotI2lmbmRlZiBCT09TVF9UVF9UWVBFX1dJVEhfQUxJR05NRU5UX0lOQ0xVREVECi0j
ZGVmaW5lIEJPT1NUX1RUX1RZUEVfV0lUSF9BTElHTk1FTlRfSU5DTFVERUQKLQotI2luY2x1ZGUg
PGJvb3N0L3R5cGVfdHJhaXRzL2FsaWdubWVudF9vZi5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvdHlw
ZV90cmFpdHMvaXNfcG9kLmhwcD4KLSNpbmNsdWRlIDxib29zdC9zdGF0aWNfYXNzZXJ0LmhwcD4K
LSNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGNzdGRkZWY+IC8vIHNpemVf
dAotI2luY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KLQotI2lmZGVmIEJPT1NU
X01TVkMKLSMgICBwcmFnbWEgd2FybmluZyhwdXNoKQotIyAgIHByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6IDQxMjEpIC8vIGFsaWdubWVudCBpcyBzZW5zaXRpdmUgdG8gcGFja2luZwotI2VuZGlmCi0K
LSNpZmRlZiBfTVNDX1ZFUgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2NvbmRpdGlvbmFs
LmhwcD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgYm9vc3QgewotICAgbmFtZXNwYWNlIGRldGFpbHsK
LQotI2lmbmRlZiBfX0JPUkxBTkRDX18KLQotICAgICAgdW5pb24gbWF4X2FsaWduCi0gICAgICB7
Ci0gICAgICAgICBjaGFyIGM7Ci0gICAgICAgICBzaG9ydCBzOwotICAgICAgICAgaW50IGk7Ci0g
ICAgICAgICBsb25nIGw7Ci0jaWZuZGVmIEJPT1NUX05PX0xPTkdfTE9ORwotICAgICAgICAgYm9v
c3Q6OmxvbmdfbG9uZ190eXBlIGxsOwotI2VuZGlmCi0jaWZkZWYgQk9PU1RfSEFTX0lOVDEyOAot
ICAgICAgICAgYm9vc3Q6OmludDEyOF90eXBlIGkxMjg7Ci0jZW5kaWYKLSAgICAgICAgIGZsb2F0
IGY7Ci0gICAgICAgICBkb3VibGUgZDsKLSAgICAgICAgIGxvbmcgZG91YmxlIGxkOwotI2lmZGVm
IEJPT1NUX0hBU19GTE9BVDEyOAotICAgICAgICAgX19mbG9hdDEyOCBmMTI4OwotI2VuZGlmCi0g
ICAgICB9OwotCi10ZW1wbGF0ZSA8c3RkOjpzaXplX3QgVGFyZ2V0LCBib29sIGNoZWNrPiBzdHJ1
Y3QgbG9uZ19kb3VibGVfYWxpZ25tZW50eyB0eXBlZGVmIGxvbmcgZG91YmxlIHR5cGU7IH07Ci10
ZW1wbGF0ZSA8c3RkOjpzaXplX3QgVGFyZ2V0PiBzdHJ1Y3QgbG9uZ19kb3VibGVfYWxpZ25tZW50
PFRhcmdldCwgZmFsc2U+eyB0eXBlZGVmIGJvb3N0OjpkZXRhaWw6Om1heF9hbGlnbiB0eXBlOyB9
OwotCi10ZW1wbGF0ZSA8c3RkOjpzaXplX3QgVGFyZ2V0LCBib29sIGNoZWNrPiBzdHJ1Y3QgZG91
YmxlX2FsaWdubWVudHsgdHlwZWRlZiBkb3VibGUgdHlwZTsgfTsKLXRlbXBsYXRlIDxzdGQ6OnNp
emVfdCBUYXJnZXQ+IHN0cnVjdCBkb3VibGVfYWxpZ25tZW50PFRhcmdldCwgZmFsc2U+eyB0eXBl
ZGVmIHR5cGVuYW1lIGxvbmdfZG91YmxlX2FsaWdubWVudDxUYXJnZXQsIGJvb3N0OjphbGlnbm1l
bnRfb2Y8bG9uZyBkb3VibGU+Ojp2YWx1ZSA+PSBUYXJnZXQ+Ojp0eXBlIHR5cGU7IH07Ci0KLSNp
Zm5kZWYgQk9PU1RfTk9fTE9OR19MT05HCi10ZW1wbGF0ZSA8c3RkOjpzaXplX3QgVGFyZ2V0LCBi
b29sIGNoZWNrPiBzdHJ1Y3QgbG9uZ19sb25nX2FsaWdubWVudHsgdHlwZWRlZiBib29zdDo6bG9u
Z19sb25nX3R5cGUgdHlwZTsgfTsKLXRlbXBsYXRlIDxzdGQ6OnNpemVfdCBUYXJnZXQ+IHN0cnVj
dCBsb25nX2xvbmdfYWxpZ25tZW50PFRhcmdldCwgZmFsc2U+eyB0eXBlZGVmIHR5cGVuYW1lIGRv
dWJsZV9hbGlnbm1lbnQ8VGFyZ2V0LCBib29zdDo6YWxpZ25tZW50X29mPGRvdWJsZT46OnZhbHVl
ID49IFRhcmdldD46OnR5cGUgdHlwZTsgfTsKLSNlbmRpZgotCi10ZW1wbGF0ZSA8c3RkOjpzaXpl
X3QgVGFyZ2V0LCBib29sIGNoZWNrPiBzdHJ1Y3QgbG9uZ19hbGlnbm1lbnR7IHR5cGVkZWYgbG9u
ZyB0eXBlOyB9OwotI2lmbmRlZiBCT09TVF9OT19MT05HX0xPTkcKLXRlbXBsYXRlIDxzdGQ6OnNp
emVfdCBUYXJnZXQ+IHN0cnVjdCBsb25nX2FsaWdubWVudDxUYXJnZXQsIGZhbHNlPnsgdHlwZWRl
ZiB0eXBlbmFtZSBsb25nX2xvbmdfYWxpZ25tZW50PFRhcmdldCwgYm9vc3Q6OmFsaWdubWVudF9v
Zjxib29zdDo6bG9uZ19sb25nX3R5cGU+Ojp2YWx1ZSA+PSBUYXJnZXQ+Ojp0eXBlIHR5cGU7IH07
Ci0jZWxzZQotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IFRhcmdldD4gc3RydWN0IGxvbmdfYWxpZ25t
ZW50PFRhcmdldCwgZmFsc2U+eyB0eXBlZGVmIHR5cGVuYW1lIGRvdWJsZV9hbGlnbm1lbnQ8VGFy
Z2V0LCBib29zdDo6YWxpZ25tZW50X29mPGRvdWJsZT46OnZhbHVlID49IFRhcmdldD46OnR5cGUg
dHlwZTsgfTsKLSNlbmRpZgotCi10ZW1wbGF0ZSA8c3RkOjpzaXplX3QgVGFyZ2V0LCBib29sIGNo
ZWNrPiBzdHJ1Y3QgaW50X2FsaWdubWVudHsgdHlwZWRlZiBpbnQgdHlwZTsgfTsKLXRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBUYXJnZXQ+IHN0cnVjdCBpbnRfYWxpZ25tZW50PFRhcmdldCwgZmFsc2U+
eyB0eXBlZGVmIHR5cGVuYW1lIGxvbmdfYWxpZ25tZW50PFRhcmdldCwgYm9vc3Q6OmFsaWdubWVu
dF9vZjxsb25nPjo6dmFsdWUgPj0gVGFyZ2V0Pjo6dHlwZSB0eXBlOyB9OwotCi10ZW1wbGF0ZSA8
c3RkOjpzaXplX3QgVGFyZ2V0LCBib29sIGNoZWNrPiBzdHJ1Y3Qgc2hvcnRfYWxpZ25tZW50eyB0
eXBlZGVmIHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8c3RkOjpzaXplX3QgVGFyZ2V0PiBzdHJ1
Y3Qgc2hvcnRfYWxpZ25tZW50PFRhcmdldCwgZmFsc2U+eyB0eXBlZGVmIHR5cGVuYW1lIGludF9h
bGlnbm1lbnQ8VGFyZ2V0LCBib29zdDo6YWxpZ25tZW50X29mPGludD46OnZhbHVlID49IFRhcmdl
dD46OnR5cGUgdHlwZTsgfTsKLQotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IFRhcmdldCwgYm9vbCBj
aGVjaz4gc3RydWN0IGNoYXJfYWxpZ25tZW50eyB0eXBlZGVmIGNoYXIgdHlwZTsgfTsKLXRlbXBs
YXRlIDxzdGQ6OnNpemVfdCBUYXJnZXQ+IHN0cnVjdCBjaGFyX2FsaWdubWVudDxUYXJnZXQsIGZh
bHNlPnsgdHlwZWRlZiB0eXBlbmFtZSBzaG9ydF9hbGlnbm1lbnQ8VGFyZ2V0LCBib29zdDo6YWxp
Z25tZW50X29mPHNob3J0Pjo6dmFsdWUgPj0gVGFyZ2V0Pjo6dHlwZSB0eXBlOyB9OwotCi19Ci0K
LXRlbXBsYXRlIDxzdGQ6OnNpemVfdCBBbGlnbj4KLXN0cnVjdCB0eXBlX3dpdGhfYWxpZ25tZW50
IAotewotICAgdHlwZWRlZiB0eXBlbmFtZSBib29zdDo6ZGV0YWlsOjpjaGFyX2FsaWdubWVudDxB
bGlnbiwgYm9vc3Q6OmFsaWdubWVudF9vZjxjaGFyPjo6dmFsdWUgPj0gQWxpZ24+Ojp0eXBlIHR5
cGU7Ci19OwotCi0jaWYgKGRlZmluZWQoX19HTlVDX18pIHx8IChkZWZpbmVkIChfX1NVTlBST19D
QykgJiYgIChfX1NVTlBST19DQyA+PSAweDUxMzApKSB8fCBkZWZpbmVkKF9fY2xhbmdfXykpICYm
ICFkZWZpbmVkKEJPT1NUX1RUX0RJU0FCTEVfSU5UUklOU0lDUykKLW5hbWVzcGFjZSB0dF9hbGln
bl9ucyB7Ci1zdHJ1Y3QgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oMikpKSBhMiB7fTsKLXN0
cnVjdCBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIGE0IHt9Owotc3RydWN0IF9fYXR0
cmlidXRlX18oKF9fYWxpZ25lZF9fKDgpKSkgYTgge307Ci1zdHJ1Y3QgX19hdHRyaWJ1dGVfXygo
X19hbGlnbmVkX18oMTYpKSkgYTE2IHt9Owotc3RydWN0IF9fYXR0cmlidXRlX18oKF9fYWxpZ25l
ZF9fKDMyKSkpIGEzMiB7fTsKLXN0cnVjdCBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg2NCkp
KSBhNjQge307Ci1zdHJ1Y3QgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oMTI4KSkpIGExMjgg
e307Ci19Ci0KLXRlbXBsYXRlPD4gc3RydWN0IHR5cGVfd2l0aF9hbGlnbm1lbnQ8MT4gIHsgcHVi
bGljOiB0eXBlZGVmIGNoYXIgdHlwZTsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IHR5cGVfd2l0aF9h
bGlnbm1lbnQ8Mj4gIHsgcHVibGljOiB0eXBlZGVmIHR0X2FsaWduX25zOjphMiB0eXBlOyB9Owot
dGVtcGxhdGU8PiBzdHJ1Y3QgdHlwZV93aXRoX2FsaWdubWVudDw0PiAgeyBwdWJsaWM6IHR5cGVk
ZWYgdHRfYWxpZ25fbnM6OmE0IHR5cGU7IH07Ci10ZW1wbGF0ZTw+IHN0cnVjdCB0eXBlX3dpdGhf
YWxpZ25tZW50PDg+ICB7IHB1YmxpYzogdHlwZWRlZiB0dF9hbGlnbl9uczo6YTggdHlwZTsgfTsK
LXRlbXBsYXRlPD4gc3RydWN0IHR5cGVfd2l0aF9hbGlnbm1lbnQ8MTY+IHsgcHVibGljOiB0eXBl
ZGVmIHR0X2FsaWduX25zOjphMTYgdHlwZTsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IHR5cGVfd2l0
aF9hbGlnbm1lbnQ8MzI+IHsgcHVibGljOiB0eXBlZGVmIHR0X2FsaWduX25zOjphMzIgdHlwZTsg
fTsKLXRlbXBsYXRlPD4gc3RydWN0IHR5cGVfd2l0aF9hbGlnbm1lbnQ8NjQ+IHsgcHVibGljOiB0
eXBlZGVmIHR0X2FsaWduX25zOjphNjQgdHlwZTsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IHR5cGVf
d2l0aF9hbGlnbm1lbnQ8MTI4PiB7IHB1YmxpYzogdHlwZWRlZiB0dF9hbGlnbl9uczo6YTEyOCB0
eXBlOyB9OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBpc19wb2Q8IDo6Ym9vc3Q6OnR0X2FsaWduX25z
OjphMj4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19wb2Q8IDo6
Ym9vc3Q6OnR0X2FsaWduX25zOjphND4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZTw+
IHN0cnVjdCBpc19wb2Q8IDo6Ym9vc3Q6OnR0X2FsaWduX25zOjphOD4gOiBwdWJsaWMgdHJ1ZV90
eXBle307Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19wb2Q8IDo6Ym9vc3Q6OnR0X2FsaWduX25zOjph
MTY+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfcG9kPCA6OmJv
b3N0Ojp0dF9hbGlnbl9uczo6YTMyPiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLXRlbXBsYXRlPD4g
c3RydWN0IGlzX3BvZDwgOjpib29zdDo6dHRfYWxpZ25fbnM6OmE2ND4gOiBwdWJsaWMgdHJ1ZV90
eXBle307Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19wb2Q8IDo6Ym9vc3Q6OnR0X2FsaWduX25zOjph
MTI4PiA6IHB1YmxpYyB0cnVlX3R5cGV7fTsKLQotI2VuZGlmCi0jaWYgKGRlZmluZWQoQk9PU1Rf
TVNWQykgfHwgKGRlZmluZWQoQk9PU1RfSU5URUwpICYmIGRlZmluZWQoX01TQ19WRVIpKSkgJiYg
IWRlZmluZWQoQk9PU1RfVFRfRElTQUJMRV9JTlRSSU5TSUNTKQotLy8KLS8vIE1TVkMgc3VwcG9y
dHMgdHlwZXMgd2hpY2ggaGF2ZSBhbGlnbm1lbnRzIGdyZWF0ZXIgdGhhbiB0aGUgbm9ybWFsCi0v
LyBtYXhpbXVtOiB0aGVzZSBhcmUgdXNlZCBmb3IgZXhhbXBsZSBpbiB0aGUgdHlwZXMgX19tNjQg
YW5kIF9fbTEyOAotLy8gdG8gcHJvdmlkZSB0eXBlcyB3aXRoIGFsaWdubWVudCByZXF1aXJlbWVu
dHMgd2hpY2ggbWF0Y2ggdGhlIFNTRQotLy8gcmVnaXN0ZXJzLiAgVGhlcmVmb3JlIHdlIGV4dGVu
ZCB0eXBlX3dpdGhfYWxpZ25tZW50PD4gdG8gc3VwcG9ydAotLy8gc3VjaCB0eXBlcywgaG93ZXZl
ciwgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIHRvIHVzZSBhIGJ1aWx0aW4gdHlwZQotLy8gd2hlbmV2
ZXIgcG9zc2libGUgb3RoZXJ3aXNlIHdlIGJyZWFrIHByZXZpb3VzbHkgd29ya2luZyBjb2RlOgot
Ly8gc2VlIGh0dHA6Ly9hcnRpY2xlLmdtYW5lLm9yZy9nbWFuZS5jb21wLmxpYi5ib29zdC5kZXZl
bC8xNzMwMTEKLS8vIGZvciBhbiBleGFtcGxlIGFuZCB0ZXN0IGNhc2UuICBUaHVzIHR5cGVzIGxp
a2UgYTggYmVsb3cgd2lsbAotLy8gYmUgdXNlZCAqb25seSogaWYgdGhlIGV4aXN0aW5nIGltcGxl
bWVudGF0aW9uIGNhbid0IHByb3ZpZGUgYSB0eXBlCi0vLyB3aXRoIHN1aXRhYmxlIGFsaWdubWVu
dC4gIFRoaXMgZG9lcyBtZWFuIGhvd2V2ZXIsIHRoYXQgdHlwZV93aXRoX2FsaWdubWVudDw+Ci0v
LyBtYXkgcmV0dXJuIGEgdHlwZSB3aGljaCBjYW5ub3QgYmUgcGFzc2VkIHRocm91Z2ggYSBmdW5j
dGlvbiBjYWxsCi0vLyBieSB2YWx1ZSAoYW5kIG5laXRoZXIgY2FuIGFueSB0eXBlIGNvbnRhaW5p
bmcgc3VjaCBhIHR5cGUgbGlrZQotLy8gQm9vc3QuT3B0aW9uYWwpLiAgSG93ZXZlciwgdGhpcyBv
bmx5IGhhcHBlbnMgd2hlbiB3ZSBoYXZlIG5vIGNob2ljZSAKLS8vIGluIHRoZSBtYXR0ZXIgYmVj
YXVzZSBubyBvdGhlciAib3JkaW5hcnkiIHR5cGUgaXMgYXZhaWxhYmxlLgotLy8KLW5hbWVzcGFj
ZSB0dF9hbGlnbl9ucyB7Ci1zdHJ1Y3QgX19kZWNsc3BlYyhhbGlnbig4KSkgYTggeyAKLSAgIGNo
YXIgbVs4XTsgCi0gICB0eXBlZGVmIGE4IHR5cGU7Ci19Owotc3RydWN0IF9fZGVjbHNwZWMoYWxp
Z24oMTYpKSBhMTYgeyAKLSAgIGNoYXIgbVsxNl07IAotICAgdHlwZWRlZiBhMTYgdHlwZTsKLX07
Ci1zdHJ1Y3QgX19kZWNsc3BlYyhhbGlnbigzMikpIGEzMiB7IAotICAgY2hhciBtWzMyXTsgCi0g
ICB0eXBlZGVmIGEzMiB0eXBlOwotfTsKLXN0cnVjdCBfX2RlY2xzcGVjKGFsaWduKDY0KSkgYTY0
IAoteyAKLSAgIGNoYXIgbVs2NF07IAotICAgdHlwZWRlZiBhNjQgdHlwZTsKLX07Ci1zdHJ1Y3Qg
X19kZWNsc3BlYyhhbGlnbigxMjgpKSBhMTI4IHsgCi0gICBjaGFyIG1bMTI4XTsgCi0gICB0eXBl
ZGVmIGExMjggdHlwZTsKLX07Ci19Ci0KLXRlbXBsYXRlPD4gc3RydWN0IHR5cGVfd2l0aF9hbGln
bm1lbnQ8OD4gIAoteyAKLSAgIHR5cGVkZWYgYm9vc3Q6OmNvbmRpdGlvbmFsPAotICAgICAgOjpi
b29zdDo6YWxpZ25tZW50X29mPGJvb3N0OjpkZXRhaWw6Om1heF9hbGlnbj46OnZhbHVlIDwgOCwK
LSAgICAgIHR0X2FsaWduX25zOjphOCwKLSAgICAgIGJvb3N0OjpkZXRhaWw6OmNoYXJfYWxpZ25t
ZW50PDgsIGZhbHNlPiA+Ojp0eXBlIHQxOwotcHVibGljOiAKLSAgIHR5cGVkZWYgdDE6OnR5cGUg
dHlwZTsKLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCB0eXBlX3dpdGhfYWxpZ25tZW50PDE2PiAKLXsg
Ci0gICB0eXBlZGVmIGJvb3N0Ojpjb25kaXRpb25hbDwKLSAgICAgIDo6Ym9vc3Q6OmFsaWdubWVu
dF9vZjxib29zdDo6ZGV0YWlsOjptYXhfYWxpZ24+Ojp2YWx1ZSA8IDE2LAotICAgICAgdHRfYWxp
Z25fbnM6OmExNiwKLSAgICAgIGJvb3N0OjpkZXRhaWw6OmNoYXJfYWxpZ25tZW50PDE2LCBmYWxz
ZT4gPjo6dHlwZSB0MTsKLXB1YmxpYzogCi0gICB0eXBlZGVmIHQxOjp0eXBlIHR5cGU7Ci19Owot
dGVtcGxhdGU8PiBzdHJ1Y3QgdHlwZV93aXRoX2FsaWdubWVudDwzMj4gCi17IAotICAgdHlwZWRl
ZiBib29zdDo6Y29uZGl0aW9uYWw8Ci0gICAgICA6OmJvb3N0OjphbGlnbm1lbnRfb2Y8Ym9vc3Q6
OmRldGFpbDo6bWF4X2FsaWduPjo6dmFsdWUgPCAzMiwKLSAgICAgIHR0X2FsaWduX25zOjphMzIs
Ci0gICAgICBib29zdDo6ZGV0YWlsOjpjaGFyX2FsaWdubWVudDwzMiwgZmFsc2U+ID46OnR5cGUg
dDE7Ci1wdWJsaWM6IAotICAgdHlwZWRlZiB0MTo6dHlwZSB0eXBlOwotfTsKLXRlbXBsYXRlPD4g
c3RydWN0IHR5cGVfd2l0aF9hbGlnbm1lbnQ8NjQ+IHsKLSAgIHR5cGVkZWYgYm9vc3Q6OmNvbmRp
dGlvbmFsPAotICAgICAgOjpib29zdDo6YWxpZ25tZW50X29mPGJvb3N0OjpkZXRhaWw6Om1heF9h
bGlnbj46OnZhbHVlIDwgNjQsCi0gICAgICB0dF9hbGlnbl9uczo6YTY0LAotICAgICAgYm9vc3Q6
OmRldGFpbDo6Y2hhcl9hbGlnbm1lbnQ8NjQsIGZhbHNlPiA+Ojp0eXBlIHQxOwotcHVibGljOiAK
LSAgIHR5cGVkZWYgdDE6OnR5cGUgdHlwZTsKLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCB0eXBlX3dp
dGhfYWxpZ25tZW50PDEyOD4gewotICAgdHlwZWRlZiBib29zdDo6Y29uZGl0aW9uYWw8Ci0gICAg
ICA6OmJvb3N0OjphbGlnbm1lbnRfb2Y8Ym9vc3Q6OmRldGFpbDo6bWF4X2FsaWduPjo6dmFsdWUg
PCAxMjgsCi0gICAgICB0dF9hbGlnbl9uczo6YTEyOCwKLSAgICAgIGJvb3N0OjpkZXRhaWw6OmNo
YXJfYWxpZ25tZW50PDEyOCwgZmFsc2U+ID46OnR5cGUgdDE7Ci1wdWJsaWM6IAotICAgdHlwZWRl
ZiB0MTo6dHlwZSB0eXBlOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfcG9kPCA6OmJvb3N0
Ojp0dF9hbGlnbl9uczo6YTg+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGU8PiBzdHJ1
Y3QgaXNfcG9kPCA6OmJvb3N0Ojp0dF9hbGlnbl9uczo6YTE2PiA6IHB1YmxpYyB0cnVlX3R5cGV7
fTsKLXRlbXBsYXRlPD4gc3RydWN0IGlzX3BvZDwgOjpib29zdDo6dHRfYWxpZ25fbnM6OmEzMj4g
OiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19wb2Q8IDo6Ym9vc3Q6
OnR0X2FsaWduX25zOjphNjQ+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGU8PiBzdHJ1
Y3QgaXNfcG9kPCA6OmJvb3N0Ojp0dF9hbGlnbl9uczo6YTEyOD4gOiBwdWJsaWMgdHJ1ZV90eXBl
e307Ci0KLSNlbmRpZgotCi0jZWxzZQotCi0vLwotLy8gQm9ybGFuZCBzcGVjaWZpYyB2ZXJzaW9u
LCB3ZSBoYXZlIHRoaXMgZm9yIHR3byByZWFzb25zOgotLy8gMSkgVGhlIHZlcnNpb24gYWJvdmUg
ZG9lc24ndCBhbHdheXMgY29tcGlsZSAod2l0aCB0aGUgbmV3IHRlc3QgY2FzZXMgZm9yIGV4YW1w
bGUpCi0vLyAyKSBCZWNhdXNlIG9mIEJvcmxhbmRzICNwcmFnbWEgb3B0aW9uIHdlIGNhbiBjcmVh
dGUgdHlwZXMgd2l0aCBhbGlnbm1lbnRzIHRoYXQgYXJlCi0vLyAgICBncmVhdGVyIHRoYXQgdGhl
IGxhcmdlc3QgYWxpZ25lZCBidWlsdGluIHR5cGUuCi0KLW5hbWVzcGFjZSB0dF9hbGlnbl9uc3sK
LSNwcmFnbWEgb3B0aW9uIHB1c2ggLWExNgotc3RydWN0IGEyeyBzaG9ydCBzOyB9Owotc3RydWN0
IGE0eyBpbnQgczsgfTsKLXN0cnVjdCBhOHsgZG91YmxlIHM7IH07Ci1zdHJ1Y3QgYTE2eyBsb25n
IGRvdWJsZSBzOyB9OwotI3ByYWdtYSBvcHRpb24gcG9wCi19Ci0KLW5hbWVzcGFjZSBkZXRhaWwg
ewotCi10eXBlZGVmIDo6Ym9vc3Q6OnR0X2FsaWduX25zOjphMTYgbWF4X2FsaWduOwotCi19Ci0v
LyNpZiAhIEJPT1NUX1dPUktBUk9VTkQoX19DT0RFR0VBUkNfXywgQk9PU1RfVEVTVEVEX0FUKDB4
NjEwKSkKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19wb2Q8IDo6Ym9vc3Q6OnR0X2FsaWduX25zOjph
Mj4gOiBwdWJsaWMgdHJ1ZV90eXBle307Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXNfcG9kPCA6OmJv
b3N0Ojp0dF9hbGlnbl9uczo6YTQ+IDogcHVibGljIHRydWVfdHlwZXt9OwotdGVtcGxhdGUgPD4g
c3RydWN0IGlzX3BvZDwgOjpib29zdDo6dHRfYWxpZ25fbnM6OmE4PiA6IHB1YmxpYyB0cnVlX3R5
cGV7fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBpc19wb2Q8IDo6Ym9vc3Q6OnR0X2FsaWduX25zOjph
MTY+IDogcHVibGljIHRydWVfdHlwZXt9OwotLy8jZW5kaWYKLQotdGVtcGxhdGUgPHN0ZDo6c2l6
ZV90IE4+IHN0cnVjdCB0eXBlX3dpdGhfYWxpZ25tZW50Ci17Ci0gICAvLyBXZSBzaG91bGQgbmV2
ZXIgZ2V0IHRvIGhlcmUsIGJ1dCBpZiB3ZSBkbyB1c2UgdGhlIG1heGltYWxseQotICAgLy8gYWxp
Z25lZCB0eXBlOgotICAgLy8gQk9PU1RfU1RBVElDX0FTU0VSVCgwKTsKLSAgIHR5cGVkZWYgdHRf
YWxpZ25fbnM6OmExNiB0eXBlOwotfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCB0eXBlX3dpdGhfYWxp
Z25tZW50PDE+eyB0eXBlZGVmIGNoYXIgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCB0eXBl
X3dpdGhfYWxpZ25tZW50PDI+eyB0eXBlZGVmIHR0X2FsaWduX25zOjphMiB0eXBlOyB9OwotdGVt
cGxhdGUgPD4gc3RydWN0IHR5cGVfd2l0aF9hbGlnbm1lbnQ8ND57IHR5cGVkZWYgdHRfYWxpZ25f
bnM6OmE0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgdHlwZV93aXRoX2FsaWdubWVudDw4
PnsgdHlwZWRlZiB0dF9hbGlnbl9uczo6YTggdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCB0
eXBlX3dpdGhfYWxpZ25tZW50PDE2PnsgdHlwZWRlZiB0dF9hbGlnbl9uczo6YTE2IHR5cGU7IH07
Ci0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBib29zdAotCi0jaWZkZWYgQk9PU1RfTVNWQwot
IyAgIHByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZgotCi0jZW5kaWYgLy8gQk9PU1RfVFRfVFlQ
RV9XSVRIX0FMSUdOTUVOVF9JTkNMVURFRAotCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3V0aWxpdHkuaHBwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdXRpbGl0eS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDBhYWNiOGJjMzYxNmRlMWViNTk4ZWQ3NmQ3ZmY3ZTJkNTE3ZTNiMjYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdXRpbGl0eS5ocHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyMSArMCwwIEBACi0vLyAgQm9vc3QgdXRpbGl0eS5ocHAgaGVhZGVyIGZpbGUgIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCi0vLyAgQ29weXJpZ2h0
IDE5OTktMjAwMyBBbGVrc2V5IEd1cnRvdm95LiAgVXNlLCBtb2RpZmljYXRpb24sIGFuZCBkaXN0
cmlidXRpb24gYXJlCi0vLyAgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwg
VmVyc2lvbiAxLjAuICAoU2VlIGFjY29tcGFueWluZyBmaWxlCi0vLyAgTElDRU5TRV8xXzAudHh0
IG9yIGEgY29weSBhdCA8aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Pi4pCi0K
LS8vICBTZWUgPGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdXRpbGl0eS8+IGZvciB0aGUgbGli
cmFyeSdzIGhvbWUgcGFnZS4KLQotI2lmbmRlZiBCT09TVF9VVElMSVRZX0hQUAotI2RlZmluZSBC
T09TVF9VVElMSVRZX0hQUAotCi0jaW5jbHVkZSA8Ym9vc3QvdXRpbGl0eS9hZGRyZXNzb2YuaHBw
PgotI2luY2x1ZGUgPGJvb3N0L3V0aWxpdHkvYmFzZV9mcm9tX21lbWJlci5ocHA+Ci0jaW5jbHVk
ZSA8Ym9vc3QvdXRpbGl0eS9iaW5hcnkuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3V0aWxpdHkvZW5h
YmxlX2lmLmhwcD4KLSNpbmNsdWRlIDxib29zdC91dGlsaXR5L2lkZW50aXR5X3R5cGUuaHBwPgot
I2luY2x1ZGUgPGJvb3N0L2NvcmUvY2hlY2tlZF9kZWxldGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0
L2NvcmUvbm9uY29weWFibGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L25leHRfcHJpb3IuaHBwPgot
Ci0jZW5kaWYgIC8vIEJPT1NUX1VUSUxJVFlfSFBQCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC91dGlsaXR5L2FkZHJlc3NvZi5ocHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC91dGlsaXR5L2FkZHJlc3NvZi5o
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiNGRhODA0MjE4ODc4ZmYyMjVkOThl
MjRkZjU5NmI1YTdjZTFmNDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdXRpbGl0
eS9hZGRyZXNzb2YuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoYykgMjAxNCBHbGVuIEZlcm5hbmRlcwotICoKLSAqIERpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQotICogYWNjb21w
YW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKLSAqIGh0dHA6Ly93d3cuYm9v
c3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqLwotCi0jaWZuZGVmIEJPT1NUX1VUSUxJVFlfQURE
UkVTU09GX0hQUAotI2RlZmluZSBCT09TVF9VVElMSVRZX0FERFJFU1NPRl9IUFAKLQotLy8gVGhl
IGhlYWRlciBmaWxlIGF0IHRoaXMgcGF0aCBpcyBkZXByZWNhdGVkOwotLy8gdXNlIGJvb3N0L2Nv
cmUvYWRkcmVzc29mLmhwcCBpbnN0ZWFkLgotCi0jaW5jbHVkZSA8Ym9vc3QvY29yZS9hZGRyZXNz
b2YuaHBwPgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2Jvb3N0L3V0aWxpdHkvYmFzZV9mcm9tX21lbWJlci5ocHAgYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC91dGlsaXR5L2Jhc2VfZnJvbV9tZW1iZXIu
aHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDQ1NDFkMTlhY2ZmMjVlNmIxMjRh
ZWU4ZWRjYzU2MGViNmI1OTc0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3V0aWxp
dHkvYmFzZV9mcm9tX21lbWJlci5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAot
Ly8gIGJvb3N0IHV0aWxpdHkvYmFzZV9mcm9tX21lbWJlci5ocHAgaGVhZGVyIGZpbGUgIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQotLy8gIENvcHlyaWdodCAyMDAxLCAyMDAzLCAyMDA0
LCAyMDEyIERhcnlsZSBXYWxrZXIuICBVc2UsIG1vZGlmaWNhdGlvbiwgYW5kCi0vLyAgZGlzdHJp
YnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4gIChTZWUKLS8vICBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgYSBj
b3B5IGF0Ci0vLyAgPGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dD4uKQotCi0v
LyAgU2VlIDxodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvPiBmb3IgdGhlIGxpYnJh
cnkncyBob21lIHBhZ2UuCi0KLSNpZm5kZWYgQk9PU1RfVVRJTElUWV9CQVNFX0ZST01fTUVNQkVS
X0hQUAotI2RlZmluZSBCT09TVF9VVElMSVRZX0JBU0VfRlJPTV9NRU1CRVJfSFBQCi0KLSNpbmNs
dWRlIDxib29zdC9jb25maWcuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9hcml0
aG1ldGljL2luYy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24v
ZW51bV9iaW5hcnlfcGFyYW1zLmhwcD4KLSNpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvcmVw
ZXRpdGlvbi9lbnVtX3BhcmFtcy5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL3Jl
cGV0aXRpb24vcmVwZWF0X2Zyb21fdG8uaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRz
L2lzX3NhbWUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jdi5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX3JlZmVyZW5jZS5ocHA+Ci0jaW5j
bHVkZSA8Ym9vc3QvdXRpbGl0eS9lbmFibGVfaWYuaHBwPgotCi0KLS8vICBCYXNlLWZyb20tbWVt
YmVyIGFyaXR5IGNvbmZpZ3VyYXRpb24gbWFjcm8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS8vCi0KLS8vIFRoZSBmb2xsb3dpbmcgbWFjcm8gZGV0ZXJtaW5lcyBob3cgbWFueSBhcmd1
bWVudHMgd2lsbCBiZSBpbiB0aGUgbGFyZ2VzdAotLy8gY29uc3RydWN0b3IgdGVtcGxhdGUgb2Yg
YmFzZV9mcm9tX21lbWJlci4gIENvbnN0cnVjdG9yIHRlbXBsYXRlcyB3aWxsIGJlCi0vLyBnZW5l
cmF0ZWQgZnJvbSBvbmUgYXJndW1lbnQgdG8gdGhpcyBtYXhpbXVtLiAgQ29kZSBmcm9tIG90aGVy
IGZpbGVzIGNhbiByZWFkCi0vLyB0aGlzIG51bWJlciBpZiB0aGV5IG5lZWQgdG8gYWx3YXlzIG1h
dGNoIHRoZSBleGFjdCBtYXhpbXVtIGJhc2VfZnJvbV9tZW1iZXIKLS8vIHVzZXMuICBUaGUgbWF4
aW11bSBjb25zdHJ1Y3RvciBsZW5ndGggY2FuIGJlIGNoYW5nZWQgYnkgb3ZlcnJpZGluZyB0aGUK
LS8vICNkZWZpbmVkIGNvbnN0YW50LiAgTWFrZSBzdXJlIHRvIGFwcGx5IHRoZSBvdmVycmlkZSwg
aWYgYW55LCBmb3IgYWxsIHNvdXJjZQotLy8gZmlsZXMgZHVyaW5nIHByb2plY3QgY29tcGlsaW5n
IGZvciBjb25zaXN0ZW5jeS4KLQotLy8gQ29udHJpYnV0ZWQgYnkgSm9uYXRoYW4gVHVya2FuaXMK
LQotI2lmbmRlZiBCT09TVF9CQVNFX0ZST01fTUVNQkVSX01BWF9BUklUWQotI2RlZmluZSBCT09T
VF9CQVNFX0ZST01fTUVNQkVSX01BWF9BUklUWSAgMTAKLSNlbmRpZgotCi0KLS8vICBBbiBpdGVy
YXRpb24gb2YgYSBjb25zdHJ1Y3RvciB0ZW1wbGF0ZSBmb3IgYmFzZV9mcm9tX21lbWJlciAgLS0t
LS0tLS0tLS0tLS8vCi0KLS8vIEEgbWFjcm8gdGhhdCBzaG91bGQgZXhwYW5kIHRvOgotLy8gICAg
IHRlbXBsYXRlIDwgdHlwZW5hbWUgVDEsIC4uLiwgdHlwZW5hbWUgVG4gPgotLy8gICAgIGJhc2Vf
ZnJvbV9tZW1iZXIoIFQxIHgxLCAuLi4sIFRuIHhuICkKLS8vICAgICAgICAgOiBtZW1iZXIoIHgx
LCAuLi4sIHhuICkKLS8vICAgICAgICAge30KLS8vIFRoaXMgbWFjcm8gc2hvdWxkIG9ubHkgcGVy
c2lzdCB3aXRoaW4gdGhpcyBmaWxlLgotCi0jZGVmaW5lIEJPT1NUX1BSSVZBVEVfQ1RSX0RFRigg
eiwgbiwgZGF0YSApICAgICAgICAgICAgICAgICAgIFwKLSAgICB0ZW1wbGF0ZSA8IEJPT1NUX1BQ
X0VOVU1fUEFSQU1TKG4sIHR5cGVuYW1lIFQpID4gICAgICAgICAgXAotICAgIGJhc2VfZnJvbV9t
ZW1iZXIoIEJPT1NUX1BQX0VOVU1fQklOQVJZX1BBUkFNUyhuLCBULCB4KSApICBcCi0gICAgICAg
IDogbWVtYmVyKCBCT09TVF9QUF9FTlVNX1BBUkFNUyhuLCB4KSApICAgICAgICAgICAgICAgIFwK
LSAgICAgICAge30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIC8qKi8KLQotCi1uYW1lc3BhY2UgYm9vc3QKLXsKLQotbmFtZXNwYWNlIGRl
dGFpbAotewotCi0vLyAgVHlwZS11bm1hcmtpbmcgY2xhc3MgdGVtcGxhdGUgIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCi0vLyBUeXBlLXRyYWl0IHRvIGdl
dCB0aGUgcmF3IHR5cGUsIGkuZS4gdGhlIHR5cGUgd2l0aG91dCB0b3AtbGV2ZWwgcmVmZXJlbmNl
IG5vcgotLy8gY3YtcXVhbGlmaWNhdGlvbiwgZnJvbSBhIHR5cGUgZXhwcmVzc2lvbi4gIE1haW5s
eSBmb3IgZnVuY3Rpb24gYXJndW1lbnRzLCBhbnkKLS8vIHJlZmVyZW5jZSBwYXJ0IGlzIHN0cmlw
cGVkIGZpcnN0LgotCi0vLyBDb250cmlidXRlZCBieSBEYXJ5bGUgV2Fsa2VyCi0KLXRlbXBsYXRl
IDwgdHlwZW5hbWUgVCA+Ci1zdHJ1Y3QgcmVtb3ZlX2N2X3JlZgotewotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgOjpib29zdDo6cmVtb3ZlX2N2PHR5cGVuYW1lCi0gICAgIDo6Ym9vc3Q6OnJlbW92ZV9y
ZWZlcmVuY2U8VD46OnR5cGU+Ojp0eXBlICB0eXBlOwotCi19OyAgLy8gYm9vc3Q6OmRldGFpbDo6
cmVtb3ZlX2N2X3JlZgotCi0vLyAgVW5tYXJrZWQtdHlwZSBjb21wYXJpc29uIGNsYXNzIHRlbXBs
YXRlICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCi0vLyBUeXBlLXRyYWl0
IHRvIGNoZWNrIGlmIHR3byB0eXBlIGV4cHJlc3Npb25zIGhhdmUgdGhlIHNhbWUgcmF3IHR5cGUu
Ci0KLS8vIENvbnRyaWJ1dGVkIGJ5IERhcnlsZSBXYWxrZXIsIGJhc2VkIG9uIGEgd29yay1hcm91
bmQgYnkgTHVjIERhbnRvbgotCi10ZW1wbGF0ZSA8IHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUgPgot
c3RydWN0IGlzX3JlbGF0ZWQKLSAgICA6IHB1YmxpYyA6OmJvb3N0Ojppc19zYW1lPAotICAgICB0
eXBlbmFtZSA6OmJvb3N0OjpkZXRhaWw6OnJlbW92ZV9jdl9yZWY8VD46OnR5cGUsCi0gICAgIHR5
cGVuYW1lIDo6Ym9vc3Q6OmRldGFpbDo6cmVtb3ZlX2N2X3JlZjxVPjo6dHlwZSA+Ci17fTsKLQot
Ly8gIEVuYWJsZS1pZi1vbi11bmlkZW50aWNhbC11bm1hcmtlZC10eXBlIGNsYXNzIHRlbXBsYXRl
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLy8KLQotLy8gRW5hYmxlLWlmIG9uIHRoZSBmaXJzdCB0d28g
dHlwZSBleHByZXNzaW9ucyBOT1QgaGF2aW5nIHRoZSBzYW1lIHJhdyB0eXBlLgotCi0vLyBDb250
cmlidXRlZCBieSBEYXJ5bGUgV2Fsa2VyLCBiYXNlZCBvbiBhIHdvcmstYXJvdW5kIGJ5IEx1YyBE
YW50b24KLQotI2lmbmRlZiBCT09TVF9OT19DWFgxMV9WQVJJQURJQ19URU1QTEFURVMKLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLlQ+Ci1zdHJ1Y3QgZW5hYmxlX2lmX3VucmVsYXRlZAotICAgIDogcHVi
bGljIDo6Ym9vc3Q6OmVuYWJsZV9pZl9jPHRydWU+Ci17fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgLi4uVTI+Ci1zdHJ1Y3QgZW5hYmxlX2lmX3VucmVsYXRl
ZDxULCBVLCBVMi4uLj4KLSAgICA6IHB1YmxpYyA6OmJvb3N0OjpkaXNhYmxlX2lmPCA6OmJvb3N0
OjpkZXRhaWw6OmlzX3JlbGF0ZWQ8VCwgVT4gPgote307Ci0jZW5kaWYKLQotfSAgLy8gbmFtZXNw
YWNlIGJvb3N0OjpkZXRhaWwKLQotCi0vLyAgQmFzZS1mcm9tLW1lbWJlciBjbGFzcyB0ZW1wbGF0
ZSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwotCi0vLyBIZWxw
ZXIgdG8gaW5pdGlhbGl6ZSBhIGJhc2Ugb2JqZWN0IHNvIGEgZGVyaXZlZCBjbGFzcyBjYW4gdXNl
IHRoaXMKLS8vIG9iamVjdCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYW5vdGhlciBiYXNlIGNs
YXNzLiAgVXNlZCBieQotLy8gRGlldG1hciBLdWVobCBmcm9tIGlkZWFzIGJ5IFJvbiBLbGF0Y2hv
IHRvIHNvbHZlIHRoZSBwcm9ibGVtIG9mIGEKLS8vIGJhc2UgY2xhc3MgbmVlZGluZyB0byBiZSBp
bml0aWFsaXplZCBieSBhIG1lbWJlci4KLQotLy8gQ29udHJpYnV0ZWQgYnkgRGFyeWxlIFdhbGtl
cgotCi10ZW1wbGF0ZSA8IHR5cGVuYW1lIE1lbWJlclR5cGUsIGludCBVbmlxdWVJRCA9IDAgPgot
Y2xhc3MgYmFzZV9mcm9tX21lbWJlcgotewotcHJvdGVjdGVkOgotICAgIE1lbWJlclR5cGUgIG1l
bWJlcjsKLQotI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX1JWQUxVRV9SRUZFUkVOQ0VTKSAm
JiBcCi0gICAgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfVkFSSUFESUNfVEVNUExBVEVTKSAmJiBc
Ci0gICAgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfRlVOQ1RJT05fVEVNUExBVEVfREVGQVVMVF9B
UkdTKSAmJiBcCi0gICAgIShkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPT0gNCkgJiYg
KF9fR05VQ19NSU5PUl9fIDwgNCkpCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLlQsIHR5cGVu
YW1lIEVuYWJsZUlmID0gdHlwZW5hbWUKLSAgICAgOjpib29zdDo6ZGV0YWlsOjplbmFibGVfaWZf
dW5yZWxhdGVkPGJhc2VfZnJvbV9tZW1iZXIsIFQuLi4+Ojp0eXBlPgotICAgIGV4cGxpY2l0IEJP
T1NUX0NPTlNURVhQUiBiYXNlX2Zyb21fbWVtYmVyKCBUJiYgLi4ueCApCi0gICAgICAgIEJPT1NU
X05PRVhDRVBUX0lGKCBCT09TVF9OT0VYQ0VQVF9FWFBSKDo6bmV3ICgodm9pZCopIDApIE1lbWJl
clR5cGUoCi0gICAgICAgICBzdGF0aWNfY2FzdDxUJiY+KHgpLi4uICkpICkgIC8vIG5vIHN0ZDo6
aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlLi4uCi0gICAgICAgIDogbWVtYmVyKCBzdGF0aWNfY2Fz
dDxUJiY+KHgpLi4uICkgICAgIC8vIC4uLm5vciBzdGQ6OmZvcndhcmQgbmVlZGVkCi0gICAgICAg
IHt9Ci0jZWxzZQotICAgIGJhc2VfZnJvbV9tZW1iZXIoKQotICAgICAgICA6IG1lbWJlcigpCi0g
ICAgICAgIHt9Ci0KLSAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIFQwID4gZXhwbGljaXQgYmFzZV9m
cm9tX21lbWJlciggVDAgeDAgKSA6IG1lbWJlciggeDAgKSB7fQotICAgIEJPT1NUX1BQX1JFUEVB
VF9GUk9NX1RPKCAyLCBCT09TVF9QUF9JTkMoQk9PU1RfQkFTRV9GUk9NX01FTUJFUl9NQVhfQVJJ
VFkpLAotICAgICBCT09TVF9QUklWQVRFX0NUUl9ERUYsIF8gKQotI2VuZGlmCi0KLX07ICAvLyBi
b29zdDo6YmFzZV9mcm9tX21lbWJlcgotCi10ZW1wbGF0ZSA8IHR5cGVuYW1lIE1lbWJlclR5cGUs
IGludCBVbmlxdWVJRCA+Ci1jbGFzcyBiYXNlX2Zyb21fbWVtYmVyPE1lbWJlclR5cGUmLCBVbmlx
dWVJRD4KLXsKLXByb3RlY3RlZDoKLSAgICBNZW1iZXJUeXBlJiBtZW1iZXI7Ci0KLSAgICBleHBs
aWNpdCBCT09TVF9DT05TVEVYUFIgYmFzZV9mcm9tX21lbWJlciggTWVtYmVyVHlwZSYgeCApCi0g
ICAgICAgIEJPT1NUX05PRVhDRVBUCi0gICAgICAgIDogbWVtYmVyKCB4ICkKLSAgICAgICAge30K
LQotfTsgIC8vIGJvb3N0OjpiYXNlX2Zyb21fbWVtYmVyCi0KLX0gIC8vIG5hbWVzcGFjZSBib29z
dAotCi0KLS8vIFVuZG8gYW55IHByaXZhdGUgbWFjcm9zCi0jdW5kZWYgQk9PU1RfUFJJVkFURV9D
VFJfREVGCi0KLQotI2VuZGlmICAvLyBCT09TVF9VVElMSVRZX0JBU0VfRlJPTV9NRU1CRVJfSFBQ
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC91
dGlsaXR5L2JpbmFyeS5ocHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9i
b29zdC91dGlsaXR5L2JpbmFyeS5ocHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhj
ZWYxNDY4ZTViNTZhZTk5ZDVkMWQxNGJkZWQ1YWM5NTcxMDUyNjMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvYm9vc3QvdXRpbGl0eS9iaW5hcnkuaHBwCisrKyAvZGV2L251bGwKQEAgLTEsNzA4
ICswLDAgQEAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBDb3B5cmlnaHQgKGMpIDIwMDUg
TWF0dGhldyBDYWxhYnJlc2UKLQotICAgIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRp
b24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUKLSAgICBMaWNlbnNlLCBWZXJzaW9u
IDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAot
ICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PSovCi0KLSNpZm5kZWYgQk9PU1RfVVRJTElUWV9CSU5BUllfSFBQCi0jZGVmaW5lIEJP
T1NUX1VUSUxJVFlfQklOQVJZX0hQUAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBC
aW5hcnkgTGl0ZXJhbCBVdGlsaXR5Ci0gICAgX19fX19fX19fX19fX19fX19fX19fXwotCi0KLSAg
ICBUaGUgZm9sbG93aW5nIGNvZGUgd29ya3MgYnkgY29udmVydGluZyB0aGUgaW5wdXQgYml0IHBh
dHRlcm4gaW50byBhCi0gICAgQm9vc3QuUHJlcHJvY2Vzc29yIHNlcXVlbmNlLCB0aGVuIGNvbnZl
cnRpbmcgZ3JvdXBpbmdzIG9mIDMgYml0cyBlYWNoIGludG8KLSAgICB0aGUgY29ycmVzcG9uZGlu
ZyBvY3RhbCBkaWdpdCwgYW5kIGZpbmFsbHkgY29uY2F0ZW5hdGluZyBhbGwgb2YgdGhlIGRpZ2l0
cwotICAgIHRvZ2V0aGVyIGFsb25nIHdpdGggYSBsZWFkaW5nIHplcm8uIFRoaXMgeWllbGRzIGEg
c3RhbmRhcmQgb2N0YWwgbGl0ZXJhbAotICAgIHdpdGggdGhlIGRlc2lyZWQgdmFsdWUgYXMgc3Bl
Y2lmaWVkIGluIGJpdHMuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNpbmNsdWRlIDxi
b29zdC9wcmVwcm9jZXNzb3IvY29udHJvbC9kZWR1Y2VfZC5ocHA+Ci0jaW5jbHVkZSA8Ym9vc3Qv
cHJlcHJvY2Vzc29yL2ZhY2lsaXRpZXMvaWRlbnRpdHkuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3By
ZXByb2Nlc3Nvci9jYXQuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9zZXEvY2F0
LmhwcD4KLSNpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3Ivc2VxL3RyYW5zZm9ybS5ocHA+Ci0j
aW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvbW9kLmhwcD4KLSNpbmNsdWRl
IDxib29zdC9wcmVwcm9jZXNzb3Ivc2VxL3NpemUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3ByZXBy
b2Nlc3Nvci9mYWNpbGl0aWVzL2VtcHR5LmhwcD4KLSNpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNz
b3IvY29udHJvbC93aGlsZS5ocHA+Ci0KLSNkZWZpbmUgQk9PU1RfQklOQVJZKCBiaXRfZ3JvdXBp
bmdzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEJPT1NU
X0JJTkFSWV9MSVRFUkFMX0QoIEJPT1NUX1BQX0RFRFVDRV9EKCksIGJpdF9ncm91cGluZ3MgKSAK
LQotI2RlZmluZSBCT09TVF9CSU5BUllfVSggYml0X2dyb3VwaW5ncyApICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgQk9PU1RfU1VGRklYRURfQklOQVJZX0xJVEVS
QUwoIGJpdF9ncm91cGluZ3MsIFUgKSAKLQotI2RlZmluZSBCT09TVF9CSU5BUllfTCggYml0X2dy
b3VwaW5ncyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgQk9P
U1RfU1VGRklYRURfQklOQVJZX0xJVEVSQUwoIGJpdF9ncm91cGluZ3MsIEwgKSAKLQotI2RlZmlu
ZSBCT09TVF9CSU5BUllfVUwoIGJpdF9ncm91cGluZ3MgKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgQk9PU1RfU1VGRklYRURfQklOQVJZX0xJVEVSQUwoIGJpdF9n
cm91cGluZ3MsIFVMICkgCi0KLSNkZWZpbmUgQk9PU1RfQklOQVJZX0xVKCBiaXRfZ3JvdXBpbmdz
ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEJPT1NUX1NVRkZJ
WEVEX0JJTkFSWV9MSVRFUkFMKCBiaXRfZ3JvdXBpbmdzLCBMVSApIAotCi0jZGVmaW5lIEJPT1NU
X0JJTkFSWV9MTCggYml0X2dyb3VwaW5ncyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICBCT09TVF9TVUZGSVhFRF9CSU5BUllfTElURVJBTCggYml0X2dyb3VwaW5n
cywgTEwgKSAKLQotI2RlZmluZSBCT09TVF9CSU5BUllfVUxMKCBiaXRfZ3JvdXBpbmdzICkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgQk9PU1RfU1VGRklYRURfQklO
QVJZX0xJVEVSQUwoIGJpdF9ncm91cGluZ3MsIFVMTCApIAotCi0jZGVmaW5lIEJPT1NUX0JJTkFS
WV9MTFUoIGJpdF9ncm91cGluZ3MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBCT09TVF9TVUZGSVhFRF9CSU5BUllfTElURVJBTCggYml0X2dyb3VwaW5ncywgTExV
ICkgCi0KLSNkZWZpbmUgQk9PU1RfU1VGRklYRURfQklOQVJZX0xJVEVSQUwoIGJpdF9ncm91cGlu
Z3MsIHN1ZmZpeCApICAgICAgICAgICAgICAgICBcCi0gIEJPT1NUX1NVRkZJWEVEX0JJTkFSWV9M
SVRFUkFMX0QoIEJPT1NUX1BQX0RFRFVDRV9EKCksIGJpdF9ncm91cGluZ3MsIHN1ZmZpeCApIAot
Ci0jZGVmaW5lIEJPT1NUX1NVRkZJWEVEX0JJTkFSWV9MSVRFUkFMX0QoIGQsIGJpdF9ncm91cGlu
Z3MsIHN1ZmZpeCApICAgICAgICAgICAgXAotICBCT09TVF9QUF9DQVQoIEJPT1NUX0JJTkFSWV9M
SVRFUkFMX0QoIGQsIGJpdF9ncm91cGluZ3MgKSwgc3VmZml4ICkgCi0KLSNkZWZpbmUgQk9PU1Rf
QklOQVJZX0xJVEVSQUxfRCggZCwgYml0X2dyb3VwaW5ncyApICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIEJPT1NUX1BQX1NFUV9DQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoICgwKSBCT09TVF9ERVRBSUxf
Q1JFQVRFX0JJTkFSWV9MSVRFUkFMX09DVEFMX1NFUVVFTkNFKCBkLCBiaXRfZ3JvdXBpbmdzICkg
IFwKLSAgKSAKLQotI2RlZmluZSBCT09TVF9ERVRBSUxfQ1JFQVRFX0JJTkFSWV9MSVRFUkFMX09D
VEFMX1NFUVVFTkNFKCBkLCBiaXRfZ3JvdXBpbmdzICkgIFwKLSAgQk9PU1RfUFBfU0VRX1RSQU5T
Rk9STSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICggQk9PU1RfREVUQUlMX1RSSVBMRV9UT19PQ1RBTF9PUEVSQVRJT04gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAsIEJPT1NUX1BQX05JTCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
LCBCT09TVF9QUF9JREVOVElUWSggQk9PU1RfREVUQUlMX0NPTlZFUlRfQklUX1NFUVVFTkNFX1RP
X1RSSVBMRV9TRVFVRU5DRSApKClcCi0gICAgKCBCT09TVF9ERVRBSUxfQ09NUExFVEVfVFJJUExF
X1NFUVVFTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAsIEJPT1NUX0RF
VEFJTF9DUkVBVEVfQklOQVJZX0xJVEVSQUxfQklUX1NFUVVFTkNFKCBkLCBiaXRfZ3JvdXBpbmdz
ICkgICAgXAotICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICApICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICkgCi0KLSNkZWZpbmUgQk9PU1RfREVUQUlMX0NPTlZFUlRfQklUX1NFUVVFTkNFX1RPX1RS
SVBMRV9TRVFVRU5DRSggYml0X3NlcXVlbmNlICkgICBcCi0gIEJPT1NUX1BQX0NBVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAoIEJPT1NUX0RFVEFJTF9DT05WRVJUX0JJVF9TRVFVRU5DRV9UT19QQVJFTlRIRVRJQ19U
VVBMRV8xIGJpdF9zZXF1ZW5jZSAgICAgIFwKLSAgLCBFTkRfQklUICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICkg
Ci0KLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJVFNfUEVSX09DVElUIDMKLQotI2RlZmluZSBCT09T
VF9ERVRBSUxfQ09NUExFVEVfVFJJUExFX1NFUVVFTkNFKCBkLCBpbmNvbXBsZXRlX25pYmJsZV9z
ZXF1ZW5jZSApIFwKLSAgQk9PU1RfUFBfQ0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICggQk9PU1RfREVUQUlMX0NS
RUFURV9UUklQTEVfQ09NUExFVElPTl9TRVFVRU5DRV8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAsIEJPT1NUX1BQX01PRF9EKCBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICwgQk9PU1Rf
UFBfU0VRX1NJWkUoIGluY29tcGxldGVfbmliYmxlX3NlcXVlbmNlICkgICAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgICAsIEJPT1NUX0RFVEFJTF9CSVRTX1BFUl9PQ1RJVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGluY29tcGxldGVfbmliYmxlX3NlcXVlbmNlIAotCi0jZGVmaW5l
IEJPT1NUX0RFVEFJTF9GSVhFRF9DT01QTCggYml0ICkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBCT09TVF9QUF9DQVQoIEJPT1NUX0RFVEFJTF9GSVhFRF9DT01Q
TF8sIGJpdCApCi0KLSNkZWZpbmUgQk9PU1RfREVUQUlMX0ZJWEVEX0NPTVBMXzAgMSAKLQotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfRklYRURfQ09NUExfMSAwIAotCi0jZGVmaW5lIEJPT1NUX0RFVEFJ
TF9DUkVBVEVfQklOQVJZX0xJVEVSQUxfQklUX1NFUVVFTkNFKCBkLCBiaXRfZ3JvdXBpbmdzICkg
ICAgXAotICBCT09TVF9QUF9FTVBUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgQk9PU1RfUFBfQ0FUKCBCT09TVF9QUF9X
SElMRV8sIGQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICggQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX1BSRURJQ0FURSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAsIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9P
UEVSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgLCBiaXRf
Z3JvdXBpbmdzICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICkgCi0KLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRF
UkFMX1BSRURJQ0FURSggZCwgc3RhdGUgKSAgICAgICAgICAgICAgICAgICAgICBcCi0gIEJPT1NU
X0RFVEFJTF9GSVhFRF9DT01QTCggQk9PU1RfREVUQUlMX0lTX05VTExBUllfQVJHUyggc3RhdGUg
KSApIAotCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9PUEVSQVRJT04oIGQs
IHN0YXRlICkgICAgICAgICAgICAgICAgICAgICAgXAotICBCT09TVF9ERVRBSUxfU1BMSVRfQU5E
X1NXQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgKCBCT09TVF9QUF9DQVQoIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXywg
c3RhdGUgKSApIAotCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9UUklQTEVfVE9fT0NUQUxfT1BFUkFU
SU9OKCBzLCBkdW1teV9wYXJhbSwgdHVwbGUgKSAgICAgICAgXAotICBCT09TVF9ERVRBSUxfVEVS
TkFSWV9UUklQTEVfVE9fT0NUQUwgdHVwbGUgCi0KLSNkZWZpbmUgQk9PU1RfREVUQUlMX1RFUk5B
UllfVFJJUExFX1RPX09DVEFMKCBiaXQyLCBiaXQxLCBiaXQwICkgICAgICAgICAgICAgICBcCi0g
IEJPT1NUX0RFVEFJTF9UUklQTEVfVE9fT0NUQUxfICMjIGJpdDIgIyMgYml0MSAjIyBiaXQwIAot
Ci0jZGVmaW5lIEJPT1NUX0RFVEFJTF9DUkVBVEVfVFJJUExFX0NPTVBMRVRJT05fU0VRVUVOQ0Vf
MSAoMCkoMCkKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0NSRUFURV9UUklQTEVfQ09NUExFVElPTl9T
RVFVRU5DRV8yICgwKQotI2RlZmluZSBCT09TVF9ERVRBSUxfQ1JFQVRFX1RSSVBMRV9DT01QTEVU
SU9OX1NFUVVFTkNFXzAgIAotCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9DT05WRVJUX0JJVF9TRVFV
RU5DRV9UT19QQVJFTlRIRVRJQ19UVVBMRV8xRU5EX0JJVCAgCi0KLSNkZWZpbmUgQk9PU1RfREVU
QUlMX0NPTlZFUlRfQklUX1NFUVVFTkNFX1RPX1BBUkVOVEhFVElDX1RVUExFXzEoIGJpdCApICAg
ICAgICBcCi0gICggKCBiaXQsIEJPT1NUX0RFVEFJTF9DT05WRVJUX0JJVF9TRVFVRU5DRV9UT19Q
QVJFTlRIRVRJQ19UVVBMRV8yIAotCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9DT05WRVJUX0JJVF9T
RVFVRU5DRV9UT19QQVJFTlRIRVRJQ19UVVBMRV8yKCBiaXQgKSAgICAgICAgXAotICBiaXQsIEJP
T1NUX0RFVEFJTF9DT05WRVJUX0JJVF9TRVFVRU5DRV9UT19QQVJFTlRIRVRJQ19UVVBMRV8zIAot
Ci0jZGVmaW5lIEJPT1NUX0RFVEFJTF9DT05WRVJUX0JJVF9TRVFVRU5DRV9UT19QQVJFTlRIRVRJ
Q19UVVBMRV8zKCBiaXQgKSAgICAgICAgXAotICBiaXQgKSApIEJPT1NUX0RFVEFJTF9DT05WRVJU
X0JJVF9TRVFVRU5DRV9UT19QQVJFTlRIRVRJQ19UVVBMRV8xIAotCi0jZGVmaW5lIEJPT1NUX0RF
VEFJTF9TUExJVF9BTkRfU1dBUCggcGFyYW1zICkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBCT09TVF9QUF9JREVOVElUWSggQk9PU1RfREVUQUlMX1NQTElUX0FORF9TV0FQ
X1BBUkFNUyApKCkoIHBhcmFtcyApCi0KLSNkZWZpbmUgQk9PU1RfREVUQUlMX1NQTElUX0FORF9T
V0FQX1BBUkFNUyggZmlyc3RfcGFyYW0sIHNlY29uZF9wYXJhbSApICAgICAgICBcCi0gIHNlY29u
ZF9wYXJhbSBmaXJzdF9wYXJhbSAKLQotI2RlZmluZSBCT09TVF9ERVRBSUxfTEVGVF9PRl9DT01N
QSggcGFyYW1zICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgQk9PU1Rf
UFBfSURFTlRJVFkoIEJPT1NUX0RFVEFJTF9GSVJTVF9NQUNST19QQVJBTSApKCkoIHBhcmFtcyAp
IAotCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9GSVJTVF9NQUNST19QQVJBTSggZmlyc3RfcGFyYW0s
IHNlY29uZF9wYXJhbSApICAgICAgICAgICAgXAotICBmaXJzdF9wYXJhbSAKLQotLyogQmVnaW4g
ZGVyaXZlZCBjb25jZXB0cyBmcm9tIENoYW9zIGJ5IFBhdWwgTWVuc29uaWRlcyAqLwotCi0jZGVm
aW5lIEJPT1NUX0RFVEFJTF9JU19OVUxMQVJZX0FSR1MoIHBhcmFtICkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBCT09TVF9ERVRBSUxfTEVGVF9PRl9DT01NQSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCBCT09TVF9Q
UF9DQVQoIEJPT1NUX0RFVEFJTF9JU19OVUxMQVJZX0FSR1NfUl8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgLCBCT09TVF9ERVRBSUxfSVNfTlVMTEFSWV9B
UkdTX0MgcGFyYW0gICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgKSAKLQotI2RlZmluZSBCT09TVF9ERVRBSUxfSVNfTlVMTEFSWV9BUkdTX0MoKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgMSAKLQotI2RlZmluZSBC
T09TVF9ERVRBSUxfSVNfTlVMTEFSWV9BUkdTX1JfMSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgMSwgQk9PU1RfUFBfTklMIAotCi0jZGVmaW5lIEJPT1NUX0RFVEFJ
TF9JU19OVUxMQVJZX0FSR1NfUl9CT09TVF9ERVRBSUxfSVNfTlVMTEFSWV9BUkdTX0MgICAgICAg
ICAgXAotICAwLCBCT09TVF9QUF9OSUwgCi0KLS8qIEVuZCBkZXJpdmVkIGNvbmNlcHRzIGZyb20g
Q2hhb3MgYnkgUGF1bCBNZW5zb25pZGVzICovCi0KLSNkZWZpbmUgQk9PU1RfREVUQUlMX1RSSVBM
RV9UT19PQ1RBTF8wMDAgMCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX1RSSVBMRV9UT19PQ1RBTF8w
MDEgMSAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX1RSSVBMRV9UT19PQ1RBTF8wMTAgMiAKLSNkZWZp
bmUgQk9PU1RfREVUQUlMX1RSSVBMRV9UT19PQ1RBTF8wMTEgMyAKLSNkZWZpbmUgQk9PU1RfREVU
QUlMX1RSSVBMRV9UT19PQ1RBTF8xMDAgNCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX1RSSVBMRV9U
T19PQ1RBTF8xMDEgNSAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX1RSSVBMRV9UT19PQ1RBTF8xMTAg
NiAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX1RSSVBMRV9UT19PQ1RBTF8xMTEgNyAKLQotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wICgwKSwgCi0jZGVmaW5lIEJP
T1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzEgKDEpLCAKLQotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMCAoMCkoMCksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMSAoMCkoMSksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMCAoMSkoMCksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMSAoMSkoMSksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMCAoMCkoMCksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMSAoMCkoMSksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMCAoMSkoMCksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMSAoMSkoMSksIAotCi0jZGVmaW5lIEJP
T1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAwMCAoMCkoMCkoMCksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEgKDApKDApKDEpLCAKLSNk
ZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwICgwKSgxKSgwKSwg
Ci0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAxMSAoMCkoMSko
MSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAgKDEp
KDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAx
ICgxKSgwKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5U
XzExMCAoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8xMTEgKDEpKDEpKDEpLCAKLQotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8wMDAwICgwKSgwKSgwKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5B
UllfTElURVJBTF9FTEVNRU5UXzAwMDEgKDApKDApKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVU
QUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDAxMCAoMCkoMCkoMSkoMCksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExICgwKSgwKSgxKSgxKSwgCi0j
ZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAxMDAgKDApKDEpKDAp
KDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwMSAo
MCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8wMTEwICgwKSgxKSgxKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJB
TF9FTEVNRU5UXzAxMTEgKDApKDEpKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFS
WV9MSVRFUkFMX0VMRU1FTlRfMTAwMCAoMSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxICgxKSgwKSgwKSgxKSwgCi0jZGVmaW5lIEJP
T1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzEwMTAgKDEpKDApKDEpKDApLCAKLSNk
ZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAxMSAoMSkoMCkoMSko
MSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAwICgx
KSgxKSgwKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5U
XzExMDEgKDEpKDEpKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFM
X0VMRU1FTlRfMTExMCAoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8xMTExICgxKSgxKSgxKSgxKSwgCi0KLSNkZWZpbmUgQk9PU1RfREVU
QUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDAwMDAgKDApKDApKDApKDApKDApLCAKLSNkZWZp
bmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDAwMDEgKDApKDApKDApKDAp
KDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDAwMTAg
KDApKDApKDApKDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VM
RU1FTlRfMDAwMTEgKDApKDApKDApKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFS
WV9MSVRFUkFMX0VMRU1FTlRfMDAxMDAgKDApKDApKDEpKDApKDApLCAKLSNkZWZpbmUgQk9PU1Rf
REVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDAxMDEgKDApKDApKDEpKDApKDEpLCAKLSNk
ZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDAxMTAgKDApKDApKDEp
KDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDAx
MTEgKDApKDApKDEpKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFM
X0VMRU1FTlRfMDEwMDAgKDApKDEpKDApKDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJ
TkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwMDEgKDApKDEpKDApKDApKDEpLCAKLSNkZWZpbmUgQk9P
U1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwMTAgKDApKDEpKDApKDEpKDApLCAK
LSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwMTEgKDApKDEp
KDApKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRf
MDExMDAgKDApKDEpKDEpKDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRF
UkFMX0VMRU1FTlRfMDExMDEgKDApKDEpKDEpKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlM
X0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDExMTAgKDApKDEpKDEpKDEpKDApLCAKLSNkZWZpbmUg
Qk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDExMTEgKDApKDEpKDEpKDEpKDEp
LCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAwMDAgKDEp
KDApKDApKDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1F
TlRfMTAwMDEgKDEpKDApKDApKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9M
SVRFUkFMX0VMRU1FTlRfMTAwMTAgKDEpKDApKDApKDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVU
QUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAwMTEgKDEpKDApKDApKDEpKDEpLCAKLSNkZWZp
bmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAxMDAgKDEpKDApKDEpKDAp
KDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAxMDEg
KDEpKDApKDEpKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VM
RU1FTlRfMTAxMTAgKDEpKDApKDEpKDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFS
WV9MSVRFUkFMX0VMRU1FTlRfMTAxMTEgKDEpKDApKDEpKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1Rf
REVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTEwMDAgKDEpKDEpKDApKDApKDApLCAKLSNk
ZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTEwMDEgKDEpKDEpKDAp
KDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTEw
MTAgKDEpKDEpKDApKDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFM
X0VMRU1FTlRfMTEwMTEgKDEpKDEpKDApKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJ
TkFSWV9MSVRFUkFMX0VMRU1FTlRfMTExMDAgKDEpKDEpKDEpKDApKDApLCAKLSNkZWZpbmUgQk9P
U1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTExMDEgKDEpKDEpKDEpKDApKDEpLCAK
LSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTExMTAgKDEpKDEp
KDEpKDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRf
MTExMTEgKDEpKDEpKDEpKDEpKDEpLCAKLQotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8wMDAwMDAgKDApKDApKDApKDApKDApKDApLCAKLSNkZWZpbmUgQk9PU1Rf
REVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDAwMDAxICgwKSgwKSgwKSgwKSgwKSgxKSwg
Ci0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAwMDAxMCAoMCko
MCkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8wMDAwMTEgKDApKDApKDApKDApKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJ
TkFSWV9MSVRFUkFMX0VMRU1FTlRfMDAwMTAwICgwKSgwKSgwKSgxKSgwKSgwKSwgCi0jZGVmaW5l
IEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAwMDEwMSAoMCkoMCkoMCkoMSko
MCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAx
MTAgKDApKDApKDApKDEpKDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRF
UkFMX0VMRU1FTlRfMDAwMTExICgwKSgwKSgwKSgxKSgxKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RF
VEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAwMTAwMCAoMCkoMCkoMSkoMCkoMCkoMCksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEwMDEgKDApKDAp
KDEpKDApKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1F
TlRfMDAxMDEwICgwKSgwKSgxKSgwKSgxKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5B
UllfTElURVJBTF9FTEVNRU5UXzAwMTAxMSAoMCkoMCkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMDAgKDApKDApKDEpKDEpKDAp
KDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDAxMTAx
ICgwKSgwKSgxKSgxKSgwKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJB
TF9FTEVNRU5UXzAwMTExMCAoMCkoMCkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMTEgKDApKDApKDEpKDEpKDEpKDEpLCAKLSNk
ZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwMDAwICgwKSgxKSgw
KSgwKSgwKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5U
XzAxMDAwMSAoMCkoMSkoMCkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8wMTAwMTAgKDApKDEpKDApKDApKDEpKDApLCAKLSNkZWZpbmUgQk9P
U1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwMDExICgwKSgxKSgwKSgwKSgxKSgx
KSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAxMDEwMCAo
MCkoMSkoMCkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8wMTAxMDEgKDApKDEpKDApKDEpKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlM
X0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwMTEwICgwKSgxKSgwKSgxKSgxKSgwKSwgCi0jZGVm
aW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAxMDExMSAoMCkoMSkoMCko
MSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8w
MTEwMDAgKDApKDEpKDEpKDApKDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9M
SVRFUkFMX0VMRU1FTlRfMDExMDAxICgwKSgxKSgxKSgwKSgwKSgxKSwgCi0jZGVmaW5lIEJPT1NU
X0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAxMTAxMCAoMCkoMSkoMSkoMCkoMSkoMCks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTEwMTEgKDAp
KDEpKDEpKDApKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VM
RU1FTlRfMDExMTAwICgwKSgxKSgxKSgxKSgwKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9C
SU5BUllfTElURVJBTF9FTEVNRU5UXzAxMTEwMSAoMCkoMSkoMSkoMSkoMCkoMSksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTExMTAgKDApKDEpKDEpKDEp
KDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEx
MTExICgwKSgxKSgxKSgxKSgxKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElU
RVJBTF9FTEVNRU5UXzEwMDAwMCAoMSkoMCkoMCkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAwMDEgKDEpKDApKDApKDApKDApKDEpLCAK
LSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAwMDEwICgxKSgw
KSgwKSgwKSgxKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVN
RU5UXzEwMDAxMSAoMSkoMCkoMCkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxMDAgKDEpKDApKDApKDEpKDApKDApLCAKLSNkZWZpbmUg
Qk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAwMTAxICgxKSgwKSgwKSgxKSgw
KSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzEwMDEx
MCAoMSkoMCkoMCkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8xMDAxMTEgKDEpKDApKDApKDEpKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVU
QUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAxMDAwICgxKSgwKSgxKSgwKSgwKSgwKSwgCi0j
ZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzEwMTAwMSAoMSkoMCko
MSkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8xMDEwMTAgKDEpKDApKDEpKDApKDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFS
WV9MSVRFUkFMX0VMRU1FTlRfMTAxMDExICgxKSgwKSgxKSgwKSgxKSgxKSwgCi0jZGVmaW5lIEJP
T1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzEwMTEwMCAoMSkoMCkoMSkoMSkoMCko
MCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDExMDEg
KDEpKDApKDEpKDEpKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFM
X0VMRU1FTlRfMTAxMTEwICgxKSgwKSgxKSgxKSgxKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJ
TF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzEwMTExMSAoMSkoMCkoMSkoMSkoMSkoMSksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAwMDAgKDEpKDEpKDAp
KDApKDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRf
MTEwMDAxICgxKSgxKSgwKSgwKSgwKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllf
TElURVJBTF9FTEVNRU5UXzExMDAxMCAoMSkoMSkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAwMTEgKDEpKDEpKDApKDApKDEpKDEp
LCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTEwMTAwICgx
KSgxKSgwKSgxKSgwKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9F
TEVNRU5UXzExMDEwMSAoMSkoMSkoMCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAxMTAgKDEpKDEpKDApKDEpKDEpKDApLCAKLSNkZWZp
bmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTEwMTExICgxKSgxKSgwKSgx
KSgxKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzEx
MTAwMCAoMSkoMSkoMSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8xMTEwMDEgKDEpKDEpKDEpKDApKDApKDEpLCAKLSNkZWZpbmUgQk9PU1Rf
REVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTExMDEwICgxKSgxKSgxKSgwKSgxKSgwKSwg
Ci0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzExMTAxMSAoMSko
MSkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8xMTExMDAgKDEpKDEpKDEpKDEpKDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJ
TkFSWV9MSVRFUkFMX0VMRU1FTlRfMTExMTAxICgxKSgxKSgxKSgxKSgwKSgxKSwgCi0jZGVmaW5l
IEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzExMTExMCAoMSkoMSkoMSkoMSko
MSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTEx
MTEgKDEpKDEpKDEpKDEpKDEpKDEpLCAKLQotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8wMDAwMDAwICgwKSgwKSgwKSgwKSgwKSgwKSgwKSwgCi0jZGVmaW5lIEJP
T1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAwMDAwMDEgKDApKDApKDApKDApKDAp
KDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDAw
MDAxMCAoMCkoMCkoMCkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8wMDAwMDExICgwKSgwKSgwKSgwKSgwKSgxKSgxKSwgCi0jZGVmaW5l
IEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAwMDAxMDAgKDApKDApKDApKDAp
KDEpKDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRf
MDAwMDEwMSAoMCkoMCkoMCkoMCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAwMTEwICgwKSgwKSgwKSgwKSgxKSgxKSgwKSwgCi0jZGVm
aW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAwMDAxMTEgKDApKDApKDAp
KDApKDEpKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1F
TlRfMDAwMTAwMCAoMCkoMCkoMCkoMSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAxMDAxICgwKSgwKSgwKSgxKSgwKSgwKSgxKSwgCi0j
ZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAwMDEwMTAgKDApKDAp
KDApKDEpKDApKDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VM
RU1FTlRfMDAwMTAxMSAoMCkoMCkoMCkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAxMTAwICgwKSgwKSgwKSgxKSgxKSgwKSgwKSwg
Ci0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAwMDExMDEgKDAp
KDApKDApKDEpKDEpKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFM
X0VMRU1FTlRfMDAwMTExMCAoMCkoMCkoMCkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAxMTExICgwKSgwKSgwKSgxKSgxKSgxKSgx
KSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAwMTAwMDAg
KDApKDApKDEpKDApKDApKDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRF
UkFMX0VMRU1FTlRfMDAxMDAwMSAoMCkoMCkoMSkoMCkoMCkoMCkoMSksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEwMDEwICgwKSgwKSgxKSgwKSgwKSgx
KSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAwMTAw
MTEgKDApKDApKDEpKDApKDApKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9M
SVRFUkFMX0VMRU1FTlRfMDAxMDEwMCAoMCkoMCkoMSkoMCkoMSkoMCkoMCksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEwMTAxICgwKSgwKSgxKSgwKSgx
KSgwKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAw
MTAxMTAgKDApKDApKDEpKDApKDEpKDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFS
WV9MSVRFUkFMX0VMRU1FTlRfMDAxMDExMSAoMCkoMCkoMSkoMCkoMSkoMSkoMSksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMDAwICgwKSgwKSgxKSgx
KSgwKSgwKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5U
XzAwMTEwMDEgKDApKDApKDEpKDEpKDApKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJ
TkFSWV9MSVRFUkFMX0VMRU1FTlRfMDAxMTAxMCAoMCkoMCkoMSkoMSkoMCkoMSkoMCksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMDExICgwKSgwKSgx
KSgxKSgwKSgxKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVN
RU5UXzAwMTExMDAgKDApKDApKDEpKDEpKDEpKDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlM
X0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDAxMTEwMSAoMCkoMCkoMSkoMSkoMSkoMCkoMSksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMTEwICgwKSgw
KSgxKSgxKSgxKSgxKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9F
TEVNRU5UXzAwMTExMTEgKDApKDApKDEpKDEpKDEpKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVU
QUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwMDAwMCAoMCkoMSkoMCkoMCkoMCkoMCkoMCks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAwMDAxICgw
KSgxKSgwKSgwKSgwKSgwKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJB
TF9FTEVNRU5UXzAxMDAwMTAgKDApKDEpKDApKDApKDApKDEpKDApLCAKLSNkZWZpbmUgQk9PU1Rf
REVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwMDAxMSAoMCkoMSkoMCkoMCkoMCkoMSko
MSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAwMTAw
ICgwKSgxKSgwKSgwKSgxKSgwKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElU
RVJBTF9FTEVNRU5UXzAxMDAxMDEgKDApKDEpKDApKDApKDEpKDApKDEpLCAKLSNkZWZpbmUgQk9P
U1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwMDExMCAoMCkoMSkoMCkoMCkoMSko
MSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAw
MTExICgwKSgxKSgwKSgwKSgxKSgxKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllf
TElURVJBTF9FTEVNRU5UXzAxMDEwMDAgKDApKDEpKDApKDEpKDApKDApKDApLCAKLSNkZWZpbmUg
Qk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwMTAwMSAoMCkoMSkoMCkoMSko
MCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8w
MTAxMDEwICgwKSgxKSgwKSgxKSgwKSgxKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5B
UllfTElURVJBTF9FTEVNRU5UXzAxMDEwMTEgKDApKDEpKDApKDEpKDApKDEpKDEpLCAKLSNkZWZp
bmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwMTEwMCAoMCkoMSkoMCko
MSkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8wMTAxMTAxICgwKSgxKSgwKSgxKSgxKSgwKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9C
SU5BUllfTElURVJBTF9FTEVNRU5UXzAxMDExMTAgKDApKDEpKDApKDEpKDEpKDEpKDApLCAKLSNk
ZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEwMTExMSAoMCkoMSko
MCkoMSkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8wMTEwMDAwICgwKSgxKSgxKSgwKSgwKSgwKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJ
TF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAxMTAwMDEgKDApKDEpKDEpKDApKDApKDApKDEpLCAK
LSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDExMDAxMCAoMCko
MSkoMSkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8wMTEwMDExICgwKSgxKSgxKSgwKSgwKSgxKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RF
VEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAxMTAxMDAgKDApKDEpKDEpKDApKDEpKDApKDAp
LCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDExMDEwMSAo
MCkoMSkoMSkoMCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8wMTEwMTEwICgwKSgxKSgxKSgwKSgxKSgxKSgwKSwgCi0jZGVmaW5lIEJPT1NU
X0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAxMTAxMTEgKDApKDEpKDEpKDApKDEpKDEp
KDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDExMTAw
MCAoMCkoMSkoMSkoMSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8wMTExMDAxICgwKSgxKSgxKSgxKSgwKSgwKSgxKSwgCi0jZGVmaW5lIEJP
T1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAxMTEwMTAgKDApKDEpKDEpKDEpKDAp
KDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMDEx
MTAxMSAoMCkoMSkoMSkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8wMTExMTAwICgwKSgxKSgxKSgxKSgxKSgwKSgwKSwgCi0jZGVmaW5l
IEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzAxMTExMDEgKDApKDEpKDEpKDEp
KDEpKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRf
MDExMTExMCAoMCkoMSkoMSkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8wMTExMTExICgwKSgxKSgxKSgxKSgxKSgxKSgxKSwgCi0jZGVm
aW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzEwMDAwMDAgKDEpKDApKDAp
KDApKDApKDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1F
TlRfMTAwMDAwMSAoMSkoMCkoMCkoMCkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAwMDEwICgxKSgwKSgwKSgwKSgwKSgxKSgwKSwgCi0j
ZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzEwMDAwMTEgKDEpKDAp
KDApKDApKDApKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VM
RU1FTlRfMTAwMDEwMCAoMSkoMCkoMCkoMCkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAwMTAxICgxKSgwKSgwKSgwKSgxKSgwKSgxKSwg
Ci0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzEwMDAxMTAgKDEp
KDApKDApKDApKDEpKDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFM
X0VMRU1FTlRfMTAwMDExMSAoMSkoMCkoMCkoMCkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxMDAwICgxKSgwKSgwKSgxKSgwKSgwKSgw
KSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzEwMDEwMDEg
KDEpKDApKDApKDEpKDApKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRF
UkFMX0VMRU1FTlRfMTAwMTAxMCAoMSkoMCkoMCkoMSkoMCkoMSkoMCksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxMDExICgxKSgwKSgwKSgxKSgwKSgx
KSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzEwMDEx
MDAgKDEpKDApKDApKDEpKDEpKDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9M
SVRFUkFMX0VMRU1FTlRfMTAwMTEwMSAoMSkoMCkoMCkoMSkoMSkoMCkoMSksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxMTEwICgxKSgwKSgwKSgxKSgx
KSgxKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzEw
MDExMTEgKDEpKDApKDApKDEpKDEpKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFS
WV9MSVRFUkFMX0VMRU1FTlRfMTAxMDAwMCAoMSkoMCkoMSkoMCkoMCkoMCkoMCksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEwMDAxICgxKSgwKSgxKSgw
KSgwKSgwKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5U
XzEwMTAwMTAgKDEpKDApKDEpKDApKDApKDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJ
TkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAxMDAxMSAoMSkoMCkoMSkoMCkoMCkoMSkoMSksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEwMTAwICgxKSgwKSgx
KSgwKSgxKSgwKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVN
RU5UXzEwMTAxMDEgKDEpKDApKDEpKDApKDEpKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlM
X0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAxMDExMCAoMSkoMCkoMSkoMCkoMSkoMSkoMCksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEwMTExICgxKSgw
KSgxKSgwKSgxKSgxKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9F
TEVNRU5UXzEwMTEwMDAgKDEpKDApKDEpKDEpKDApKDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVU
QUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAxMTAwMSAoMSkoMCkoMSkoMSkoMCkoMCkoMSks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDExMDEwICgx
KSgwKSgxKSgxKSgwKSgxKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJB
TF9FTEVNRU5UXzEwMTEwMTEgKDEpKDApKDEpKDEpKDApKDEpKDEpLCAKLSNkZWZpbmUgQk9PU1Rf
REVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAxMTEwMCAoMSkoMCkoMSkoMSkoMSkoMCko
MCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDExMTAx
ICgxKSgwKSgxKSgxKSgxKSgwKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElU
RVJBTF9FTEVNRU5UXzEwMTExMTAgKDEpKDApKDEpKDEpKDEpKDEpKDApLCAKLSNkZWZpbmUgQk9P
U1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTAxMTExMSAoMSkoMCkoMSkoMSkoMSko
MSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAw
MDAwICgxKSgxKSgwKSgwKSgwKSgwKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllf
TElURVJBTF9FTEVNRU5UXzExMDAwMDEgKDEpKDEpKDApKDApKDApKDApKDEpLCAKLSNkZWZpbmUg
Qk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTEwMDAxMCAoMSkoMSkoMCkoMCko
MCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8x
MTAwMDExICgxKSgxKSgwKSgwKSgwKSgxKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5B
UllfTElURVJBTF9FTEVNRU5UXzExMDAxMDAgKDEpKDEpKDApKDApKDEpKDApKDApLCAKLSNkZWZp
bmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTEwMDEwMSAoMSkoMSkoMCko
MCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8xMTAwMTEwICgxKSgxKSgwKSgwKSgxKSgxKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJTF9C
SU5BUllfTElURVJBTF9FTEVNRU5UXzExMDAxMTEgKDEpKDEpKDApKDApKDEpKDEpKDEpLCAKLSNk
ZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTEwMTAwMCAoMSkoMSko
MCkoMSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8xMTAxMDAxICgxKSgxKSgwKSgxKSgwKSgwKSgxKSwgCi0jZGVmaW5lIEJPT1NUX0RFVEFJ
TF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzExMDEwMTAgKDEpKDEpKDApKDEpKDApKDEpKDApLCAK
LSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTEwMTAxMSAoMSko
MSkoMCkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8xMTAxMTAwICgxKSgxKSgwKSgxKSgxKSgwKSgwKSwgCi0jZGVmaW5lIEJPT1NUX0RF
VEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzExMDExMDEgKDEpKDEpKDApKDEpKDEpKDApKDEp
LCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTEwMTExMCAo
MSkoMSkoMCkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8xMTAxMTExICgxKSgxKSgwKSgxKSgxKSgxKSgxKSwgCi0jZGVmaW5lIEJPT1NU
X0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzExMTAwMDAgKDEpKDEpKDEpKDApKDApKDAp
KDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTExMDAw
MSAoMSkoMSkoMSkoMCkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8xMTEwMDEwICgxKSgxKSgxKSgwKSgwKSgxKSgwKSwgCi0jZGVmaW5lIEJP
T1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzExMTAwMTEgKDEpKDEpKDEpKDApKDAp
KDEpKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRfMTEx
MDEwMCAoMSkoMSkoMSkoMCkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8xMTEwMTAxICgxKSgxKSgxKSgwKSgxKSgwKSgxKSwgCi0jZGVmaW5l
IEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzExMTAxMTAgKDEpKDEpKDEpKDAp
KDEpKDEpKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1FTlRf
MTExMDExMSAoMSkoMSkoMSkoMCkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8xMTExMDAwICgxKSgxKSgxKSgxKSgwKSgwKSgwKSwgCi0jZGVm
aW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzExMTEwMDEgKDEpKDEpKDEp
KDEpKDApKDApKDEpLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VMRU1F
TlRfMTExMTAxMCAoMSkoMSkoMSkoMSkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTExMDExICgxKSgxKSgxKSgxKSgwKSgxKSgxKSwgCi0j
ZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzExMTExMDAgKDEpKDEp
KDEpKDEpKDEpKDApKDApLCAKLSNkZWZpbmUgQk9PU1RfREVUQUlMX0JJTkFSWV9MSVRFUkFMX0VM
RU1FTlRfMTExMTEwMSAoMSkoMSkoMSkoMSkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTExMTEwICgxKSgxKSgxKSgxKSgxKSgxKSgwKSwg
Ci0jZGVmaW5lIEJPT1NUX0RFVEFJTF9CSU5BUllfTElURVJBTF9FTEVNRU5UXzExMTExMTEgKDEp
KDEpKDEpKDEpKDEpKDEpKDEpLCAKLQotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8wMDAwMDAwMCAoMCkoMCkoMCkoMCkoMCkoMCkoMCkoMCksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAwMDAwMSAoMCkoMCkoMCkoMCko
MCkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8wMDAwMDAxMCAoMCkoMCkoMCkoMCkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAwMDAxMSAoMCkoMCkoMCkoMCkoMCkoMCkoMSko
MSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAwMDEw
MCAoMCkoMCkoMCkoMCkoMCkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8wMDAwMDEwMSAoMCkoMCkoMCkoMCkoMCkoMSkoMCkoMSksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAwMDExMCAoMCkoMCko
MCkoMCkoMCkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8wMDAwMDExMSAoMCkoMCkoMCkoMCkoMCkoMSkoMSkoMSksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAwMTAwMCAoMCkoMCkoMCkoMCkoMSko
MCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8w
MDAwMTAwMSAoMCkoMCkoMCkoMCkoMSkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAwMTAxMCAoMCkoMCkoMCkoMCkoMSkoMCkoMSkoMCks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAwMTAxMSAo
MCkoMCkoMCkoMCkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8wMDAwMTEwMCAoMCkoMCkoMCkoMCkoMSkoMSkoMCkoMCksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAwMTEwMSAoMCkoMCkoMCko
MCkoMSkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8wMDAwMTExMCAoMCkoMCkoMCkoMCkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAwMTExMSAoMCkoMCkoMCkoMCkoMSkoMSko
MSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAx
MDAwMCAoMCkoMCkoMCkoMSkoMCkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAxMDAwMSAoMCkoMCkoMCkoMSkoMCkoMCkoMCkoMSksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAxMDAxMCAoMCko
MCkoMCkoMSkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8wMDAxMDAxMSAoMCkoMCkoMCkoMSkoMCkoMCkoMSkoMSksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAxMDEwMCAoMCkoMCkoMCkoMSko
MCkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8wMDAxMDEwMSAoMCkoMCkoMCkoMSkoMCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAxMDExMCAoMCkoMCkoMCkoMSkoMCkoMSkoMSko
MCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAxMDEx
MSAoMCkoMCkoMCkoMSkoMCkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8wMDAxMTAwMCAoMCkoMCkoMCkoMSkoMSkoMCkoMCkoMCksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAxMTAwMSAoMCkoMCko
MCkoMSkoMSkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8wMDAxMTAxMCAoMCkoMCkoMCkoMSkoMSkoMCkoMSkoMCksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAxMTAxMSAoMCkoMCkoMCkoMSkoMSko
MCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8w
MDAxMTEwMCAoMCkoMCkoMCkoMSkoMSkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAxMTEwMSAoMCkoMCkoMCkoMSkoMSkoMSkoMCkoMSks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDAxMTExMCAo
MCkoMCkoMCkoMSkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8wMDAxMTExMSAoMCkoMCkoMCkoMSkoMSkoMSkoMSkoMSksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEwMDAwMCAoMCkoMCkoMSko
MCkoMCkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8wMDEwMDAwMSAoMCkoMCkoMSkoMCkoMCkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEwMDAxMCAoMCkoMCkoMSkoMCkoMCkoMCko
MSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEw
MDAxMSAoMCkoMCkoMSkoMCkoMCkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEwMDEwMCAoMCkoMCkoMSkoMCkoMCkoMSkoMCkoMCksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEwMDEwMSAoMCko
MCkoMSkoMCkoMCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8wMDEwMDExMCAoMCkoMCkoMSkoMCkoMCkoMSkoMSkoMCksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEwMDExMSAoMCkoMCkoMSkoMCko
MCkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8wMDEwMTAwMCAoMCkoMCkoMSkoMCkoMSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEwMTAwMSAoMCkoMCkoMSkoMCkoMSkoMCkoMCko
MSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEwMTAx
MCAoMCkoMCkoMSkoMCkoMSkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8wMDEwMTAxMSAoMCkoMCkoMSkoMCkoMSkoMCkoMSkoMSksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEwMTEwMCAoMCkoMCko
MSkoMCkoMSkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8wMDEwMTEwMSAoMCkoMCkoMSkoMCkoMSkoMSkoMCkoMSksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEwMTExMCAoMCkoMCkoMSkoMCkoMSko
MSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8w
MDEwMTExMSAoMCkoMCkoMSkoMCkoMSkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMDAwMCAoMCkoMCkoMSkoMSkoMCkoMCkoMCkoMCks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMDAwMSAo
MCkoMCkoMSkoMSkoMCkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8wMDExMDAxMCAoMCkoMCkoMSkoMSkoMCkoMCkoMSkoMCksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMDAxMSAoMCkoMCkoMSko
MSkoMCkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8wMDExMDEwMCAoMCkoMCkoMSkoMSkoMCkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMDEwMSAoMCkoMCkoMSkoMSkoMCkoMSko
MCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDEx
MDExMCAoMCkoMCkoMSkoMSkoMCkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMDExMSAoMCkoMCkoMSkoMSkoMCkoMSkoMSkoMSksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMTAwMCAoMCko
MCkoMSkoMSkoMSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8wMDExMTAwMSAoMCkoMCkoMSkoMSkoMSkoMCkoMCkoMSksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMTAxMCAoMCkoMCkoMSkoMSko
MSkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8wMDExMTAxMSAoMCkoMCkoMSkoMSkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMTEwMCAoMCkoMCkoMSkoMSkoMSkoMSkoMCko
MCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMTEw
MSAoMCkoMCkoMSkoMSkoMSkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8wMDExMTExMCAoMCkoMCkoMSkoMSkoMSkoMSkoMSkoMCksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMDExMTExMSAoMCkoMCko
MSkoMSkoMSkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8wMTAwMDAwMCAoMCkoMSkoMCkoMCkoMCkoMCkoMCkoMCksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAwMDAwMSAoMCkoMSkoMCkoMCkoMCko
MCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8w
MTAwMDAxMCAoMCkoMSkoMCkoMCkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAwMDAxMSAoMCkoMSkoMCkoMCkoMCkoMCkoMSkoMSks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAwMDEwMCAo
MCkoMSkoMCkoMCkoMCkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8wMTAwMDEwMSAoMCkoMSkoMCkoMCkoMCkoMSkoMCkoMSksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAwMDExMCAoMCkoMSkoMCko
MCkoMCkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8wMTAwMDExMSAoMCkoMSkoMCkoMCkoMCkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAwMTAwMCAoMCkoMSkoMCkoMCkoMSkoMCko
MCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAw
MTAwMSAoMCkoMSkoMCkoMCkoMSkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAwMTAxMCAoMCkoMSkoMCkoMCkoMSkoMCkoMSkoMCksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAwMTAxMSAoMCko
MSkoMCkoMCkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8wMTAwMTEwMCAoMCkoMSkoMCkoMCkoMSkoMSkoMCkoMCksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAwMTEwMSAoMCkoMSkoMCkoMCko
MSkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8wMTAwMTExMCAoMCkoMSkoMCkoMCkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAwMTExMSAoMCkoMSkoMCkoMCkoMSkoMSkoMSko
MSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAxMDAw
MCAoMCkoMSkoMCkoMSkoMCkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8wMTAxMDAwMSAoMCkoMSkoMCkoMSkoMCkoMCkoMCkoMSksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAxMDAxMCAoMCkoMSko
MCkoMSkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8wMTAxMDAxMSAoMCkoMSkoMCkoMSkoMCkoMCkoMSkoMSksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAxMDEwMCAoMCkoMSkoMCkoMSkoMCko
MSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8w
MTAxMDEwMSAoMCkoMSkoMCkoMSkoMCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAxMDExMCAoMCkoMSkoMCkoMSkoMCkoMSkoMSkoMCks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAxMDExMSAo
MCkoMSkoMCkoMSkoMCkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8wMTAxMTAwMCAoMCkoMSkoMCkoMSkoMSkoMCkoMCkoMCksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAxMTAwMSAoMCkoMSkoMCko
MSkoMSkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8wMTAxMTAxMCAoMCkoMSkoMCkoMSkoMSkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAxMTAxMSAoMCkoMSkoMCkoMSkoMSkoMCko
MSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAx
MTEwMCAoMCkoMSkoMCkoMSkoMSkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAxMTEwMSAoMCkoMSkoMCkoMSkoMSkoMSkoMCkoMSksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTAxMTExMCAoMCko
MSkoMCkoMSkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8wMTAxMTExMSAoMCkoMSkoMCkoMSkoMSkoMSkoMSkoMSksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTEwMDAwMCAoMCkoMSkoMSkoMCko
MCkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8wMTEwMDAwMSAoMCkoMSkoMSkoMCkoMCkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTEwMDAxMCAoMCkoMSkoMSkoMCkoMCkoMCkoMSko
MCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTEwMDAx
MSAoMCkoMSkoMSkoMCkoMCkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8wMTEwMDEwMCAoMCkoMSkoMSkoMCkoMCkoMSkoMCkoMCksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTEwMDEwMSAoMCkoMSko
MSkoMCkoMCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8wMTEwMDExMCAoMCkoMSkoMSkoMCkoMCkoMSkoMSkoMCksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTEwMDExMSAoMCkoMSkoMSkoMCkoMCko
MSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8w
MTEwMTAwMCAoMCkoMSkoMSkoMCkoMSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTEwMTAwMSAoMCkoMSkoMSkoMCkoMSkoMCkoMCkoMSks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTEwMTAxMCAo
MCkoMSkoMSkoMCkoMSkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8wMTEwMTAxMSAoMCkoMSkoMSkoMCkoMSkoMCkoMSkoMSksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTEwMTEwMCAoMCkoMSkoMSko
MCkoMSkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8wMTEwMTEwMSAoMCkoMSkoMSkoMCkoMSkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTEwMTExMCAoMCkoMSkoMSkoMCkoMSkoMSko
MSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTEw
MTExMSAoMCkoMSkoMSkoMCkoMSkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8wMTExMDAwMCAoMCkoMSkoMSkoMSkoMCkoMCkoMCkoMCksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTExMDAwMSAoMCko
MSkoMSkoMSkoMCkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8wMTExMDAxMCAoMCkoMSkoMSkoMSkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTExMDAxMSAoMCkoMSkoMSkoMSko
MCkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8wMTExMDEwMCAoMCkoMSkoMSkoMSkoMCkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTExMDEwMSAoMCkoMSkoMSkoMSkoMCkoMSkoMCko
MSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTExMDEx
MCAoMCkoMSkoMSkoMSkoMCkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8wMTExMDExMSAoMCkoMSkoMSkoMSkoMCkoMSkoMSkoMSksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTExMTAwMCAoMCkoMSko
MSkoMSkoMSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8wMTExMTAwMSAoMCkoMSkoMSkoMSkoMSkoMCkoMCkoMSksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTExMTAxMCAoMCkoMSkoMSkoMSkoMSko
MCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8w
MTExMTAxMSAoMCkoMSkoMSkoMSkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTExMTEwMCAoMCkoMSkoMSkoMSkoMSkoMSkoMCkoMCks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTExMTEwMSAo
MCkoMSkoMSkoMSkoMSkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8wMTExMTExMCAoMCkoMSkoMSkoMSkoMSkoMSkoMSkoMCksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8wMTExMTExMSAoMCkoMSkoMSko
MSkoMSkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8xMDAwMDAwMCAoMSkoMCkoMCkoMCkoMCkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAwMDAwMSAoMSkoMCkoMCkoMCkoMCkoMCko
MCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAw
MDAxMCAoMSkoMCkoMCkoMCkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAwMDAxMSAoMSkoMCkoMCkoMCkoMCkoMCkoMSkoMSksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAwMDEwMCAoMSko
MCkoMCkoMCkoMCkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8xMDAwMDEwMSAoMSkoMCkoMCkoMCkoMCkoMSkoMCkoMSksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAwMDExMCAoMSkoMCkoMCkoMCko
MCkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8xMDAwMDExMSAoMSkoMCkoMCkoMCkoMCkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAwMTAwMCAoMSkoMCkoMCkoMCkoMSkoMCkoMCko
MCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAwMTAw
MSAoMSkoMCkoMCkoMCkoMSkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8xMDAwMTAxMCAoMSkoMCkoMCkoMCkoMSkoMCkoMSkoMCksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAwMTAxMSAoMSkoMCko
MCkoMCkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8xMDAwMTEwMCAoMSkoMCkoMCkoMCkoMSkoMSkoMCkoMCksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAwMTEwMSAoMSkoMCkoMCkoMCkoMSko
MSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8x
MDAwMTExMCAoMSkoMCkoMCkoMCkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAwMTExMSAoMSkoMCkoMCkoMCkoMSkoMSkoMSkoMSks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxMDAwMCAo
MSkoMCkoMCkoMSkoMCkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8xMDAxMDAwMSAoMSkoMCkoMCkoMSkoMCkoMCkoMCkoMSksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxMDAxMCAoMSkoMCkoMCko
MSkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8xMDAxMDAxMSAoMSkoMCkoMCkoMSkoMCkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxMDEwMCAoMSkoMCkoMCkoMSkoMCkoMSko
MCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAx
MDEwMSAoMSkoMCkoMCkoMSkoMCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxMDExMCAoMSkoMCkoMCkoMSkoMCkoMSkoMSkoMCksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxMDExMSAoMSko
MCkoMCkoMSkoMCkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8xMDAxMTAwMCAoMSkoMCkoMCkoMSkoMSkoMCkoMCkoMCksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxMTAwMSAoMSkoMCkoMCkoMSko
MSkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8xMDAxMTAxMCAoMSkoMCkoMCkoMSkoMSkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxMTAxMSAoMSkoMCkoMCkoMSkoMSkoMCkoMSko
MSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxMTEw
MCAoMSkoMCkoMCkoMSkoMSkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8xMDAxMTEwMSAoMSkoMCkoMCkoMSkoMSkoMSkoMCkoMSksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDAxMTExMCAoMSkoMCko
MCkoMSkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8xMDAxMTExMSAoMSkoMCkoMCkoMSkoMSkoMSkoMSkoMSksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEwMDAwMCAoMSkoMCkoMSkoMCkoMCko
MCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8x
MDEwMDAwMSAoMSkoMCkoMSkoMCkoMCkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEwMDAxMCAoMSkoMCkoMSkoMCkoMCkoMCkoMSkoMCks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEwMDAxMSAo
MSkoMCkoMSkoMCkoMCkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8xMDEwMDEwMCAoMSkoMCkoMSkoMCkoMCkoMSkoMCkoMCksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEwMDEwMSAoMSkoMCkoMSko
MCkoMCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8xMDEwMDExMCAoMSkoMCkoMSkoMCkoMCkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEwMDExMSAoMSkoMCkoMSkoMCkoMCkoMSko
MSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEw
MTAwMCAoMSkoMCkoMSkoMCkoMSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEwMTAwMSAoMSkoMCkoMSkoMCkoMSkoMCkoMCkoMSksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEwMTAxMCAoMSko
MCkoMSkoMCkoMSkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8xMDEwMTAxMSAoMSkoMCkoMSkoMCkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEwMTEwMCAoMSkoMCkoMSkoMCko
MSkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8xMDEwMTEwMSAoMSkoMCkoMSkoMCkoMSkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEwMTExMCAoMSkoMCkoMSkoMCkoMSkoMSkoMSko
MCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEwMTEx
MSAoMSkoMCkoMSkoMCkoMSkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8xMDExMDAwMCAoMSkoMCkoMSkoMSkoMCkoMCkoMCkoMCksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDExMDAwMSAoMSkoMCko
MSkoMSkoMCkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8xMDExMDAxMCAoMSkoMCkoMSkoMSkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDExMDAxMSAoMSkoMCkoMSkoMSkoMCko
MCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8x
MDExMDEwMCAoMSkoMCkoMSkoMSkoMCkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDExMDEwMSAoMSkoMCkoMSkoMSkoMCkoMSkoMCkoMSks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDExMDExMCAo
MSkoMCkoMSkoMSkoMCkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8xMDExMDExMSAoMSkoMCkoMSkoMSkoMCkoMSkoMSkoMSksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDExMTAwMCAoMSkoMCkoMSko
MSkoMSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8xMDExMTAwMSAoMSkoMCkoMSkoMSkoMSkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDExMTAxMCAoMSkoMCkoMSkoMSkoMSkoMCko
MSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDEx
MTAxMSAoMSkoMCkoMSkoMSkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8xMDExMTEwMCAoMSkoMCkoMSkoMSkoMSkoMSkoMCkoMCksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDExMTEwMSAoMSko
MCkoMSkoMSkoMSkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8xMDExMTExMCAoMSkoMCkoMSkoMSkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMDExMTExMSAoMSkoMCkoMSkoMSko
MSkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8xMTAwMDAwMCAoMSkoMSkoMCkoMCkoMCkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAwMDAwMSAoMSkoMSkoMCkoMCkoMCkoMCkoMCko
MSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAwMDAx
MCAoMSkoMSkoMCkoMCkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8xMTAwMDAxMSAoMSkoMSkoMCkoMCkoMCkoMCkoMSkoMSksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAwMDEwMCAoMSkoMSko
MCkoMCkoMCkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8xMTAwMDEwMSAoMSkoMSkoMCkoMCkoMCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAwMDExMCAoMSkoMSkoMCkoMCkoMCko
MSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8x
MTAwMDExMSAoMSkoMSkoMCkoMCkoMCkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAwMTAwMCAoMSkoMSkoMCkoMCkoMSkoMCkoMCkoMCks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAwMTAwMSAo
MSkoMSkoMCkoMCkoMSkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8xMTAwMTAxMCAoMSkoMSkoMCkoMCkoMSkoMCkoMSkoMCksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAwMTAxMSAoMSkoMSkoMCko
MCkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8xMTAwMTEwMCAoMSkoMSkoMCkoMCkoMSkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAwMTEwMSAoMSkoMSkoMCkoMCkoMSkoMSko
MCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAw
MTExMCAoMSkoMSkoMCkoMCkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAwMTExMSAoMSkoMSkoMCkoMCkoMSkoMSkoMSkoMSksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAxMDAwMCAoMSko
MSkoMCkoMSkoMCkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8xMTAxMDAwMSAoMSkoMSkoMCkoMSkoMCkoMCkoMCkoMSksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAxMDAxMCAoMSkoMSkoMCkoMSko
MCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8xMTAxMDAxMSAoMSkoMSkoMCkoMSkoMCkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAxMDEwMCAoMSkoMSkoMCkoMSkoMCkoMSkoMCko
MCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAxMDEw
MSAoMSkoMSkoMCkoMSkoMCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8xMTAxMDExMCAoMSkoMSkoMCkoMSkoMCkoMSkoMSkoMCksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAxMDExMSAoMSkoMSko
MCkoMSkoMCkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8xMTAxMTAwMCAoMSkoMSkoMCkoMSkoMSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAxMTAwMSAoMSkoMSkoMCkoMSkoMSko
MCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8x
MTAxMTAxMCAoMSkoMSkoMCkoMSkoMSkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAxMTAxMSAoMSkoMSkoMCkoMSkoMSkoMCkoMSkoMSks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAxMTEwMCAo
MSkoMSkoMCkoMSkoMSkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8xMTAxMTEwMSAoMSkoMSkoMCkoMSkoMSkoMSkoMCkoMSksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTAxMTExMCAoMSkoMSkoMCko
MSkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8xMTAxMTExMSAoMSkoMSkoMCkoMSkoMSkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTEwMDAwMCAoMSkoMSkoMSkoMCkoMCkoMCko
MCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTEw
MDAwMSAoMSkoMSkoMSkoMCkoMCkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8xMTEwMDAxMCAoMSkoMSkoMSkoMCkoMCkoMCkoMSkoMCksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTEwMDAxMSAoMSko
MSkoMSkoMCkoMCkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8xMTEwMDEwMCAoMSkoMSkoMSkoMCkoMCkoMSkoMCkoMCksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTEwMDEwMSAoMSkoMSkoMSkoMCko
MCkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8xMTEwMDExMCAoMSkoMSkoMSkoMCkoMCkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTEwMDExMSAoMSkoMSkoMSkoMCkoMCkoMSkoMSko
MSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTEwMTAw
MCAoMSkoMSkoMSkoMCkoMSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8xMTEwMTAwMSAoMSkoMSkoMSkoMCkoMSkoMCkoMCkoMSksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTEwMTAxMCAoMSkoMSko
MSkoMCkoMSkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8xMTEwMTAxMSAoMSkoMSkoMSkoMCkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTEwMTEwMCAoMSkoMSkoMSkoMCkoMSko
MSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8x
MTEwMTEwMSAoMSkoMSkoMSkoMCkoMSkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxf
QklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTEwMTExMCAoMSkoMSkoMSkoMCkoMSkoMSkoMSkoMCks
IAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTEwMTExMSAo
MSkoMSkoMSkoMCkoMSkoMSkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJ
VEVSQUxfRUxFTUVOVF8xMTExMDAwMCAoMSkoMSkoMSkoMSkoMCkoMCkoMCkoMCksIAotI2RlZmlu
ZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTExMDAwMSAoMSkoMSkoMSko
MSkoMCkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxF
TUVOVF8xMTExMDAxMCAoMSkoMSkoMSkoMSkoMCkoMCkoMSkoMCksIAotI2RlZmluZSBCT09TVF9E
RVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTExMDAxMSAoMSkoMSkoMSkoMSkoMCkoMCko
MSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTEx
MDEwMCAoMSkoMSkoMSkoMSkoMCkoMSkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklO
QVJZX0xJVEVSQUxfRUxFTUVOVF8xMTExMDEwMSAoMSkoMSkoMSkoMSkoMCkoMSkoMCkoMSksIAot
I2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTExMDExMCAoMSko
MSkoMSkoMSkoMCkoMSkoMSkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVS
QUxfRUxFTUVOVF8xMTExMDExMSAoMSkoMSkoMSkoMSkoMCkoMSkoMSkoMSksIAotI2RlZmluZSBC
T09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTExMTAwMCAoMSkoMSkoMSkoMSko
MSkoMCkoMCkoMCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVO
VF8xMTExMTAwMSAoMSkoMSkoMSkoMSkoMSkoMCkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRB
SUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTExMTAxMCAoMSkoMSkoMSkoMSkoMSkoMCkoMSko
MCksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTExMTAx
MSAoMSkoMSkoMSkoMSkoMSkoMCkoMSkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZ
X0xJVEVSQUxfRUxFTUVOVF8xMTExMTEwMCAoMSkoMSkoMSkoMSkoMSkoMSkoMCkoMCksIAotI2Rl
ZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTExMTEwMSAoMSkoMSko
MSkoMSkoMSkoMSkoMCkoMSksIAotI2RlZmluZSBCT09TVF9ERVRBSUxfQklOQVJZX0xJVEVSQUxf
RUxFTUVOVF8xMTExMTExMCAoMSkoMSkoMSkoMSkoMSkoMSkoMSkoMCksIAotI2RlZmluZSBCT09T
VF9ERVRBSUxfQklOQVJZX0xJVEVSQUxfRUxFTUVOVF8xMTExMTExMSAoMSkoMSkoMSkoMSkoMSko
MSkoMSkoMSksIAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3V0aWxpdHkvZW5hYmxlX2lmLmhwcCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Jvb3N0L3V0aWxpdHkvZW5hYmxlX2lmLmhwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAzYmZjYTVlMjVjZDEzMGRmYTA1NWIyMTc5M2E0OWRk
YmUyYWQwMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC91dGlsaXR5L2VuYWJsZV9p
Zi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChj
KSAyMDE0IEdsZW4gRmVybmFuZGVzCi0gKgotICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCi0gKiBhY2NvbXBhbnlpbmcgZmls
ZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAotICogaHR0cDovL3d3dy5ib29zdC5vcmcvTElD
RU5TRV8xXzAudHh0KQotICovCi0KLSNpZm5kZWYgQk9PU1RfVVRJTElUWV9FTkFCTEVfSUZfSFBQ
Ci0jZGVmaW5lIEJPT1NUX1VUSUxJVFlfRU5BQkxFX0lGX0hQUAotCi0vLyBUaGUgaGVhZGVyIGZp
bGUgYXQgdGhpcyBwYXRoIGlzIGRlcHJlY2F0ZWQ7Ci0vLyB1c2UgYm9vc3QvY29yZS9lbmFibGVf
aWYuaHBwIGluc3RlYWQuCi0KLSNpbmNsdWRlIDxib29zdC9jb3JlL2VuYWJsZV9pZi5ocHA+Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Ym9vc3QvdXRpbGl0eS9pZGVudGl0eV90eXBlLmhwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2Jvb3N0L3V0aWxpdHkvaWRlbnRpdHlfdHlwZS5ocHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDRhMWY2YzRkZTUzZmQ1YWFjZjI2MWJkMWY1NmQ4Y2Q4NjhjN2Ix
NWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdXRpbGl0eS9pZGVudGl0eV90eXBl
LmhwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLQotLy8gQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTIgTG9yZW56byBDYW1pbml0aQotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0
IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wCi0vLyAoc2VlIGFjY29tcGFueWluZyBmaWxl
IExJQ0VOU0VfMV8wLnR4dCBvciBhIGNvcHkgYXQKLS8vIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJ
Q0VOU0VfMV8wLnR4dCkKLS8vIEhvbWUgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy91dGls
aXR5L2lkZW50aXR5X3R5cGUKLQotLyoqIEBmaWxlCi1XcmFwIHR5cGUgZXhwcmVzc2lvbnMgd2l0
aCByb3VuZCBwYXJlbnRoZXNpcyBzbyB0aGV5IGNhbiBiZSBwYXNzZWQgdG8gbWFjcm9zCi1ldmVu
IGlmIHRoZXkgY29udGFpbiBjb21tYXMuCi0qLwotCi0jaWZuZGVmIEJPT1NUX0lERU5USVRZX1RZ
UEVfSFBQXwotI2RlZmluZSBCT09TVF9JREVOVElUWV9UWVBFX0hQUF8KLQotI2luY2x1ZGUgPGJv
b3N0L3R5cGVfdHJhaXRzL2Z1bmN0aW9uX3RyYWl0cy5ocHA+Ci0KLS8qKgotQGJyaWVmIFRoaXMg
bWFjcm8gYWxsb3dzIHRvIHdyYXAgdGhlIHNwZWNpZmllZCB0eXBlIGV4cHJlc3Npb24gd2l0aGlu
IGV4dHJhCi1yb3VuZCBwYXJlbnRoZXNpcyBzbyB0aGUgdHlwZSBjYW4gYmUgcGFzc2VkIGFzIGEg
c2luZ2xlIG1hY3JvIHBhcmFtZXRlciBldmVuIGlmCi1pdCBjb250YWlucyBjb21tYXMgKG5vdCBh
bHJlYWR5IHdyYXBwZWQgd2l0aGluIHJvdW5kIHBhcmVudGhlc2lzKS4KLQotQFBhcmFtcwotQFBh
cmFte3BhcmVudGhlc2l6ZWRfdHlwZSwKLVRoZSB0eXBlIGV4cHJlc3Npb24gdG8gYmUgcGFzc2Vk
IGFzIG1hY3JvIHBhcmFtZXRlciB3cmFwcGVkIGJ5IGEgc2luZ2xlIHNldAotb2Ygcm91bmQgcGFy
ZW50aGVzaXMgPGM+KC4uLik8L2M+LgotVGhpcyB0eXBlIGV4cHJlc3Npb24gY2FuIGNvbnRhaW4g
YW4gYXJiaXRyYXJ5IG51bWJlciBvZiBjb21tYXMuCi19Ci1ARW5kUGFyYW1zCi0KLVRoaXMgbWFj
cm8gd29ya3Mgb24gYW55IEMrKzAzIGNvbXBpbGVyIChpdCBkb2VzIG5vdCB1c2UgdmFyaWFkaWMg
bWFjcm9zKS4KLQotVGhpcyBtYWNybyBtdXN0IGJlIHByZWZpeGVkIGJ5IDxjPnR5cGVuYW1lPC9j
PiB3aGVuIHVzZWQgd2l0aGluIHRlbXBsYXRlcy4KLU5vdGUgdGhhdCB0aGUgY29tcGlsZXIgd2ls
bCBub3QgYmUgYWJsZSB0byBhdXRvbWF0aWNhbGx5IGRldGVybWluZSBmdW5jdGlvbgotdGVtcGxh
dGUgcGFyYW1ldGVycyB3aGVuIHRoZXkgYXJlIHdyYXBwZWQgd2l0aCB0aGlzIG1hY3JvICh0aGVz
ZSBwYXJhbWV0ZXJzCi1uZWVkIHRvIGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHdoZW4gY2FsbGlu
ZyB0aGUgZnVuY3Rpb24gdGVtcGxhdGUpLgotCi1PbiBzb21lIGNvbXBpbGVycyAobGlrZSBHQ0Mp
LCB1c2luZyB0aGlzIG1hY3JvIG9uIGFic3RyYWN0IHR5cGVzIHJlcXVpcmVzIHRvCi1hZGQgYW5k
IHJlbW92ZSBhIHJlZmVyZW5jZSB0byB0aGUgc3BlY2lmaWVkIHR5cGUuCi0qLwotI2RlZmluZSBC
T09TVF9JREVOVElUWV9UWVBFKHBhcmVudGhlc2l6ZWRfdHlwZSkgXAotICAgIC8qIG11c3QgTk9U
IHByZWZpeCB0aGlzIHdpdGggYDo6YCB0byB3b3JrIHdpdGggcGFyZW50aGVzaXplZCBzeW50YXgg
Ki8gXAotICAgIGJvb3N0OjpmdW5jdGlvbl90cmFpdHM8IHZvaWQgcGFyZW50aGVzaXplZF90eXBl
ID46OmFyZzFfdHlwZQotCi0jZW5kaWYgLy8gI2luY2x1ZGUgZ3VhcmQKLQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvYm9vc3QvdmVyc2lvbi5ocHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC92ZXJzaW9uLmhwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNiMzNmOWFlMDY1ZjRiZjY5YjkxOTQ4YjJkNjI4
NjliYzAwMWZjZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ib29zdC92ZXJzaW9uLmhwcAor
KysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8vICBCb29zdCB2ZXJzaW9uLmhwcCBjb25m
aWd1cmF0aW9uIGhlYWRlciBmaWxlICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwot
Ci0vLyAgKEMpIENvcHlyaWdodCBKb2huIG1hZGRvY2sgMTk5OS4gRGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIEJvb3N0Ci0vLyAgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21w
YW55aW5nIGZpbGUKLS8vICBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJv
b3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0KLS8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcv
bGlicy9jb25maWcgZm9yIGRvY3VtZW50YXRpb24KLQotI2lmbmRlZiBCT09TVF9WRVJTSU9OX0hQ
UAotI2RlZmluZSBCT09TVF9WRVJTSU9OX0hQUAotCi0vLwotLy8gIENhdXRpb246IHRoaXMgaXMg
dGhlIG9ubHkgQm9vc3QgaGVhZGVyIHRoYXQgaXMgZ3VhcmFudGVlZAotLy8gIHRvIGNoYW5nZSB3
aXRoIGV2ZXJ5IEJvb3N0IHJlbGVhc2UuIEluY2x1ZGluZyB0aGlzIGhlYWRlcgotLy8gIHdpbGwg
Y2F1c2UgYSByZWNvbXBpbGUgZXZlcnkgdGltZSBhIG5ldyBCb29zdCB2ZXJzaW9uIGlzCi0vLyAg
dXNlZC4KLS8vCi0vLyAgQk9PU1RfVkVSU0lPTiAlIDEwMCBpcyB0aGUgcGF0Y2ggbGV2ZWwKLS8v
ICBCT09TVF9WRVJTSU9OIC8gMTAwICUgMTAwMCBpcyB0aGUgbWlub3IgdmVyc2lvbgotLy8gIEJP
T1NUX1ZFUlNJT04gLyAxMDAwMDAgaXMgdGhlIG1ham9yIHZlcnNpb24KLQotI2RlZmluZSBCT09T
VF9WRVJTSU9OIDEwNjQwMAotCi0vLwotLy8gIEJPT1NUX0xJQl9WRVJTSU9OIG11c3QgYmUgZGVm
aW5lZCB0byBiZSB0aGUgc2FtZSBhcyBCT09TVF9WRVJTSU9OCi0vLyAgYnV0IGFzIGEgKnN0cmlu
ZyogaW4gdGhlIGZvcm0gInhfeVtfel0iIHdoZXJlIHggaXMgdGhlIG1ham9yIHZlcnNpb24KLS8v
ICBudW1iZXIsIHkgaXMgdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyLCBhbmQgeiBpcyB0aGUgcGF0
Y2ggbGV2ZWwgaWYgbm90IDAuCi0vLyAgVGhpcyBpcyB1c2VkIGJ5IDxjb25maWcvYXV0b19saW5r
LmhwcD4gdG8gc2VsZWN0IHdoaWNoIGxpYnJhcnkgdmVyc2lvbiB0byBsaW5rIHRvLgotCi0jZGVm
aW5lIEJPT1NUX0xJQl9WRVJTSU9OICIxXzY0IgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2RvdWJsZS1jb252ZXJzaW9uL0xJQ0VOU0Ug
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9M
SUNFTlNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzM3MThhOWVmOWRhZTRjYjRh
ZmE1NmU0OTAyMTE3NjBkOGE5NDlmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2RvdWJsZS1j
b252ZXJzaW9uL0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1Db3B5cmln
aHQgMjAwNi0yMDExLCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi1tZXQ6Ci0KLSAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZwotICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gICAgICB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLUxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLU9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi1EQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLVRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Rv
dWJsZS1jb252ZXJzaW9uL1JFQURNRS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2RvdWJsZS1jb252ZXJzaW9uL1JFQURNRS5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNGFlOWJlNWU5ZjE2NzYyYzdmN2U2NTI0ZGUxNzc0NTc4MmJkOGU0OS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9SRUFETUUubWQKKysrIC9kZXYv
bnVsbApAQCAtMSw1NCArMCwwIEBACi1odHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2RvdWJsZS1j
b252ZXJzaW9uCi0KLVRoaXMgcHJvamVjdCAoZG91YmxlLWNvbnZlcnNpb24pIHByb3ZpZGVzIGJp
bmFyeS1kZWNpbWFsIGFuZCBkZWNpbWFsLWJpbmFyeQotcm91dGluZXMgZm9yIElFRUUgZG91Ymxl
cy4KLQotVGhlIGxpYnJhcnkgY29uc2lzdHMgb2YgZWZmaWNpZW50IGNvbnZlcnNpb24gcm91dGlu
ZXMgdGhhdCBoYXZlIGJlZW4gZXh0cmFjdGVkCi1mcm9tIHRoZSBWOCBKYXZhU2NyaXB0IGVuZ2lu
ZS4gVGhlIGNvZGUgaGFzIGJlZW4gcmVmYWN0b3JlZCBhbmQgaW1wcm92ZWQgc28gdGhhdAotaXQg
Y2FuIGJlIHVzZWQgbW9yZSBlYXNpbHkgaW4gb3RoZXIgcHJvamVjdHMuCi0KLVRoZXJlIGlzIGV4
dGVuc2l2ZSBkb2N1bWVudGF0aW9uIGluIGBkb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVy
c2lvbi5oYC4gT3RoZXIgCi1leGFtcGxlcyBjYW4gYmUgZm91bmQgaW4gYHRlc3QvY2N0ZXN0L3Rl
c3QtY29udmVyc2lvbnMuY2NgLgotCi0KLUJ1aWxkaW5nCi09PT09PT09PQotCi1UaGlzIGxpYnJh
cnkgY2FuIGJlIGJ1aWx0IHdpdGggW3Njb25zXVswXSBvciBbY21ha2VdWzFdLgotVGhlIGNoZWNr
ZWQtaW4gTWFrZWZpbGUgc2ltcGx5IGZvcndhcmRzIHRvIHNjb25zLCBhbmQgcHJvdmlkZXMgYQot
c2hvcnRjdXQgdG8gcnVuIGFsbCB0ZXN0czoKLQotICAgIG1ha2UKLSAgICBtYWtlIHRlc3QKLQot
U2NvbnMKLS0tLS0tCi0KLVRoZSBlYXNpZXN0IHdheSB0byBpbnN0YWxsIHRoaXMgbGlicmFyeSBp
cyB0byB1c2UgYHNjb25zYC4gSXQgYnVpbGRzCi10aGUgc3RhdGljIGFuZCBzaGFyZWQgbGlicmFy
eSwgYW5kIGlzIHNldCB1cCB0byBpbnN0YWxsIHRob3NlIGF0IHRoZQotY29ycmVjdCBsb2NhdGlv
bnM6Ci0KLSAgICBzY29ucyBpbnN0YWxsCi0KLVVzZSB0aGUgYERFU1RESVJgIG9wdGlvbiB0byBj
aGFuZ2UgdGhlIHRhcmdldCBkaXJlY3Rvcnk6Ci0KLSAgICBzY29ucyBERVNURElSPWFsdGVybmF0
aXZlX2RpcmVjdG9yeSBpbnN0YWxsCi0KLUNtYWtlCi0tLS0tLQotCi1UbyB1c2UgY21ha2UgcnVu
IGBjbWFrZSAuYCBpbiB0aGUgcm9vdCBkaXJlY3RvcnkuIFRoaXMgb3ZlcndyaXRlcyB0aGUKLWV4
aXN0aW5nIE1ha2VmaWxlLgotCi1Vc2UgYC1EQlVJTERfU0hBUkVEX0xJQlM9T05gIHRvIGVuYWJs
ZSB0aGUgY29tcGlsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllcy4KLU5vdGUgdGhhdCB0aGlzIGRp
c2FibGVzIHN0YXRpYyBsaWJyYXJpZXMuIFRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8KLWJ1
aWxkIGJvdGggbGlicmFyaWVzIGF0IHRoZSBzYW1lIHRpbWUgd2l0aCBjbWFrZS4KLQotVXNlIGAt
REJVSUxEX1RFU1RJTkc9T05gIHRvIGJ1aWxkIHRoZSB0ZXN0IGV4ZWN1dGFibGUuCi0KLSAgICBj
bWFrZSAuIC1EQlVJTERfVEVTVElORz1PTgotICAgIG1ha2UKLSAgICB0ZXN0L2NjdGVzdC9jY3Rl
c3QgLS1saXN0IHwgdHIgLWQgJzwnIHwgeGFyZ3MgdGVzdC9jY3Rlc3QvY2N0ZXN0Ci0KLVswXTog
aHR0cDovL3d3dy5zY29ucy5vcmcvCi1bMV06IGh0dHBzOi8vY21ha2Uub3JnLwpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24v
ZG91YmxlLWNvbnZlcnNpb24vYmlnbnVtLWR0b2EuY2MgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi9iaWdudW0t
ZHRvYS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFhZDdhNWFlOGRkMDI3ZDUz
ZTI3ODZkM2Y2YzQ1OWFlZDA0ZTM5Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9kb3VibGUt
Y29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi9iaWdudW0tZHRvYS5jYworKysgL2Rldi9udWxs
CkBAIC0xLDY0MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
ICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0vLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLS8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRl
IDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJiaWdudW0tZHRvYS5oIgotCi0jaW5jbHVkZSAiYmlnbnVt
LmgiCi0jaW5jbHVkZSAiaWVlZS5oIgotCi1uYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24gewot
Ci1zdGF0aWMgaW50IE5vcm1hbGl6ZWRFeHBvbmVudCh1aW50NjRfdCBzaWduaWZpY2FuZCwgaW50
IGV4cG9uZW50KSB7Ci0gIEFTU0VSVChzaWduaWZpY2FuZCAhPSAwKTsKLSAgd2hpbGUgKChzaWdu
aWZpY2FuZCAmIERvdWJsZTo6a0hpZGRlbkJpdCkgPT0gMCkgewotICAgIHNpZ25pZmljYW5kID0g
c2lnbmlmaWNhbmQgPDwgMTsKLSAgICBleHBvbmVudCA9IGV4cG9uZW50IC0gMTsKLSAgfQotICBy
ZXR1cm4gZXhwb25lbnQ7Ci19Ci0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnM6Ci0vLyBSZXR1
cm5zIGFuIGVzdGltYXRpb24gb2YgayBzdWNoIHRoYXQgMTBeKGstMSkgPD0gdiA8IDEwXmsuCi1z
dGF0aWMgaW50IEVzdGltYXRlUG93ZXIoaW50IGV4cG9uZW50KTsKLS8vIENvbXB1dGVzIHYgLyAx
MF5lc3RpbWF0ZWRfcG93ZXIgZXhhY3RseSwgYXMgYSByYXRpbyBvZiB0d28gYmlnbnVtcywgbnVt
ZXJhdG9yCi0vLyBhbmQgZGVub21pbmF0b3IuCi1zdGF0aWMgdm9pZCBJbml0aWFsU2NhbGVkU3Rh
cnRWYWx1ZXModWludDY0X3Qgc2lnbmlmaWNhbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGV4cG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgbG93ZXJfYm91bmRhcnlfaXNfY2xvc2VyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBlc3RpbWF0ZWRfcG93ZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbm9taW5hdG9yLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9wbHVzKTsKLS8v
IE11bHRpcGxpZXMgbnVtZXJhdG9yL2Rlbm9taW5hdG9yIHNvIHRoYXQgaXRzIHZhbHVlcyBsaWVz
IGluIHRoZSByYW5nZSAxLTEwLgotLy8gUmV0dXJucyBkZWNpbWFsX3BvaW50IHMudC4KLS8vICB2
ID0gbnVtZXJhdG9yJy9kZW5vbWluYXRvcicgKiAxMF4oZGVjaW1hbF9wb2ludC0xKQotLy8gICAg
IHdoZXJlIG51bWVyYXRvcicgYW5kIGRlbm9taW5hdG9yJyBhcmUgdGhlIHZhbHVlcyBvZiBudW1l
cmF0b3IgYW5kCi0vLyAgICAgZGVub21pbmF0b3IgYWZ0ZXIgdGhlIGNhbGwgdG8gdGhpcyBmdW5j
dGlvbi4KLXN0YXRpYyB2b2lkIEZpeHVwTXVsdGlwbHkxMChpbnQgZXN0aW1hdGVkX3Bvd2VyLCBi
b29sIGlzX2V2ZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3Bv
aW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdu
dW0qIGRlbm9taW5hdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVs
dGFfbWludXMsIEJpZ251bSogZGVsdGFfcGx1cyk7Ci0vLyBHZW5lcmF0ZXMgZGlnaXRzIGZyb20g
dGhlIGxlZnQgdG8gdGhlIHJpZ2h0IGFuZCBzdG9wcyB3aGVuIHRoZSBnZW5lcmF0ZWQKLS8vIGRp
Z2l0cyB5aWVsZCB0aGUgc2hvcnRlc3QgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB2Lgotc3Rh
dGljIHZvaWQgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cyhCaWdudW0qIG51bWVyYXRvciwgQmlnbnVt
KiBkZW5vbWluYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVt
KiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGlzX2V2ZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKTsKLS8vIEdlbmVyYXRlcyAn
cmVxdWVzdGVkX2RpZ2l0cycgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCi1zdGF0aWMgdm9pZCBC
aWdudW1Ub0ZpeGVkKGludCByZXF1ZXN0ZWRfZGlnaXRzLCBpbnQqIGRlY2ltYWxfcG9pbnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9t
aW5hdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4oYnVmZmVyKSwg
aW50KiBsZW5ndGgpOwotLy8gR2VuZXJhdGVzICdjb3VudCcgZGlnaXRzIG9mIG51bWVyYXRvci9k
ZW5vbWluYXRvci4KLS8vIE9uY2UgJ2NvdW50JyBkaWdpdHMgaGF2ZSBiZWVuIHByb2R1Y2VkIHJv
dW5kcyB0aGUgcmVzdWx0IGRlcGVuZGluZyBvbiB0aGUKLS8vIHJlbWFpbmRlciAocmVtYWluZGVy
cyBvZiBleGFjdGx5IC41IHJvdW5kIHVwd2FyZHMpLiBNaWdodCB1cGRhdGUgdGhlCi0vLyBkZWNp
bWFsX3BvaW50IHdoZW4gcm91bmRpbmcgdXAgKGZvciBleGFtcGxlIGZvciAwLjk5OTkpLgotc3Rh
dGljIHZvaWQgR2VuZXJhdGVDb3VudGVkRGlnaXRzKGludCBjb3VudCwgaW50KiBkZWNpbWFsX3Bv
aW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9y
LCBCaWdudW0qIGRlbm9taW5hdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxjaGFyPihidWZmZXIpLCBpbnQqIGxlbmd0aCk7Ci0KLQotdm9pZCBCaWdudW1EdG9h
KGRvdWJsZSB2LCBCaWdudW1EdG9hTW9kZSBtb2RlLCBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKLSAg
ICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCwgaW50KiBkZWNp
bWFsX3BvaW50KSB7Ci0gIEFTU0VSVCh2ID4gMCk7Ci0gIEFTU0VSVCghRG91YmxlKHYpLklzU3Bl
Y2lhbCgpKTsKLSAgdWludDY0X3Qgc2lnbmlmaWNhbmQ7Ci0gIGludCBleHBvbmVudDsKLSAgYm9v
bCBsb3dlcl9ib3VuZGFyeV9pc19jbG9zZXI7Ci0gIGlmIChtb2RlID09IEJJR05VTV9EVE9BX1NI
T1JURVNUX1NJTkdMRSkgewotICAgIGZsb2F0IGYgPSBzdGF0aWNfY2FzdDxmbG9hdD4odik7Ci0g
ICAgQVNTRVJUKGYgPT0gdik7Ci0gICAgc2lnbmlmaWNhbmQgPSBTaW5nbGUoZikuU2lnbmlmaWNh
bmQoKTsKLSAgICBleHBvbmVudCA9IFNpbmdsZShmKS5FeHBvbmVudCgpOwotICAgIGxvd2VyX2Jv
dW5kYXJ5X2lzX2Nsb3NlciA9IFNpbmdsZShmKS5Mb3dlckJvdW5kYXJ5SXNDbG9zZXIoKTsKLSAg
fSBlbHNlIHsKLSAgICBzaWduaWZpY2FuZCA9IERvdWJsZSh2KS5TaWduaWZpY2FuZCgpOwotICAg
IGV4cG9uZW50ID0gRG91YmxlKHYpLkV4cG9uZW50KCk7Ci0gICAgbG93ZXJfYm91bmRhcnlfaXNf
Y2xvc2VyID0gRG91YmxlKHYpLkxvd2VyQm91bmRhcnlJc0Nsb3NlcigpOwotICB9Ci0gIGJvb2wg
bmVlZF9ib3VuZGFyeV9kZWx0YXMgPQotICAgICAgKG1vZGUgPT0gQklHTlVNX0RUT0FfU0hPUlRF
U1QgfHwgbW9kZSA9PSBCSUdOVU1fRFRPQV9TSE9SVEVTVF9TSU5HTEUpOwotCi0gIGJvb2wgaXNf
ZXZlbiA9IChzaWduaWZpY2FuZCAmIDEpID09IDA7Ci0gIGludCBub3JtYWxpemVkX2V4cG9uZW50
ID0gTm9ybWFsaXplZEV4cG9uZW50KHNpZ25pZmljYW5kLCBleHBvbmVudCk7Ci0gIC8vIGVzdGlt
YXRlZF9wb3dlciBtaWdodCBiZSB0b28gbG93IGJ5IDEuCi0gIGludCBlc3RpbWF0ZWRfcG93ZXIg
PSBFc3RpbWF0ZVBvd2VyKG5vcm1hbGl6ZWRfZXhwb25lbnQpOwotCi0gIC8vIFNob3J0Y3V0IGZv
ciBGaXhlZC4KLSAgLy8gVGhlIHJlcXVlc3RlZCBkaWdpdHMgY29ycmVzcG9uZCB0byB0aGUgZGln
aXRzIGFmdGVyIHRoZSBwb2ludC4gSWYgdGhlCi0gIC8vIG51bWJlciBpcyBtdWNoIHRvbyBzbWFs
bCwgdGhlbiB0aGVyZSBpcyBubyBuZWVkIGluIHRyeWluZyB0byBnZXQgYW55Ci0gIC8vIGRpZ2l0
cy4KLSAgaWYgKG1vZGUgPT0gQklHTlVNX0RUT0FfRklYRUQgJiYgLWVzdGltYXRlZF9wb3dlciAt
IDEgPiByZXF1ZXN0ZWRfZGlnaXRzKSB7Ci0gICAgYnVmZmVyWzBdID0gJ1wwJzsKLSAgICAqbGVu
Z3RoID0gMDsKLSAgICAvLyBTZXQgZGVjaW1hbC1wb2ludCB0byAtcmVxdWVzdGVkX2RpZ2l0cy4g
VGhpcyBpcyB3aGF0IEdheSBkb2VzLgotICAgIC8vIE5vdGUgdGhhdCBpdCBzaG91bGQgbm90IGhh
dmUgYW55IGVmZmVjdCBhbnl3YXlzIHNpbmNlIHRoZSBzdHJpbmcgaXMKLSAgICAvLyBlbXB0eS4K
LSAgICAqZGVjaW1hbF9wb2ludCA9IC1yZXF1ZXN0ZWRfZGlnaXRzOwotICAgIHJldHVybjsKLSAg
fQotCi0gIEJpZ251bSBudW1lcmF0b3I7Ci0gIEJpZ251bSBkZW5vbWluYXRvcjsKLSAgQmlnbnVt
IGRlbHRhX21pbnVzOwotICBCaWdudW0gZGVsdGFfcGx1czsKLSAgLy8gTWFrZSBzdXJlIHRoZSBi
aWdudW0gY2FuIGdyb3cgbGFyZ2UgZW5vdWdoLiBUaGUgc21hbGxlc3QgZG91YmxlIGVxdWFscwot
ICAvLyA0ZS0zMjQuIEluIHRoaXMgY2FzZSB0aGUgZGVub21pbmF0b3IgbmVlZHMgZmV3ZXIgdGhh
biAzMjQqNCBiaW5hcnkgZGlnaXRzLgotICAvLyBUaGUgbWF4aW11bSBkb3VibGUgaXMgMS43OTc2
OTMxMzQ4NjIzMTU3ZTMwOCB3aGljaCBuZWVkcyBmZXdlciB0aGFuCi0gIC8vIDMwOCo0IGJpbmFy
eSBkaWdpdHMuCi0gIEFTU0VSVChCaWdudW06OmtNYXhTaWduaWZpY2FudEJpdHMgPj0gMzI0KjQp
OwotICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMoc2lnbmlmaWNhbmQsIGV4cG9uZW50LCBsb3dl
cl9ib3VuZGFyeV9pc19jbG9zZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0
ZWRfcG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
JmRlbHRhX21pbnVzLCAmZGVsdGFfcGx1cyk7Ci0gIC8vIFdlIG5vdyBoYXZlIHYgPSAobnVtZXJh
dG9yIC8gZGVub21pbmF0b3IpICogMTBeZXN0aW1hdGVkX3Bvd2VyLgotICBGaXh1cE11bHRpcGx5
MTAoZXN0aW1hdGVkX3Bvd2VyLCBpc19ldmVuLCBkZWNpbWFsX3BvaW50LAotICAgICAgICAgICAg
ICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAotICAgICAgICAgICAgICAgICAgJmRlbHRh
X21pbnVzLCAmZGVsdGFfcGx1cyk7Ci0gIC8vIFdlIG5vdyBoYXZlIHYgPSAobnVtZXJhdG9yIC8g
ZGVub21pbmF0b3IpICogMTBeKGRlY2ltYWxfcG9pbnQtMSksIGFuZAotICAvLyAgMSA8PSAobnVt
ZXJhdG9yICsgZGVsdGFfcGx1cykgLyBkZW5vbWluYXRvciA8IDEwCi0gIHN3aXRjaCAobW9kZSkg
ewotICAgIGNhc2UgQklHTlVNX0RUT0FfU0hPUlRFU1Q6Ci0gICAgY2FzZSBCSUdOVU1fRFRPQV9T
SE9SVEVTVF9TSU5HTEU6Ci0gICAgICBHZW5lcmF0ZVNob3J0ZXN0RGlnaXRzKCZudW1lcmF0b3Is
ICZkZW5vbWluYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlbHRhX21pbnVz
LCAmZGVsdGFfcGx1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXZlbiwgYnVm
ZmVyLCBsZW5ndGgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCSUdOVU1fRFRPQV9GSVhFRDoK
LSAgICAgIEJpZ251bVRvRml4ZWQocmVxdWVzdGVkX2RpZ2l0cywgZGVjaW1hbF9wb2ludCwKLSAg
ICAgICAgICAgICAgICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAotICAgICAgICAgICAg
ICAgICAgICBidWZmZXIsIGxlbmd0aCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEJJR05VTV9E
VE9BX1BSRUNJU0lPTjoKLSAgICAgIEdlbmVyYXRlQ291bnRlZERpZ2l0cyhyZXF1ZXN0ZWRfZGln
aXRzLCBkZWNpbWFsX3BvaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudW1lcmF0
b3IsICZkZW5vbWluYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxl
bmd0aCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgfQotICBidWZmZXJbKmxlbmd0aF0gPSAnXDAnOwotfQotCi0KLS8vIFRoZSBwcm9jZWR1cmUg
c3RhcnRzIGdlbmVyYXRpbmcgZGlnaXRzIGZyb20gdGhlIGxlZnQgdG8gdGhlIHJpZ2h0IGFuZCBz
dG9wcwotLy8gd2hlbiB0aGUgZ2VuZXJhdGVkIGRpZ2l0cyB5aWVsZCB0aGUgc2hvcnRlc3QgZGVj
aW1hbCByZXByZXNlbnRhdGlvbiBvZiB2LiBBCi0vLyBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9m
IHYgaXMgYSBudW1iZXIgbHlpbmcgY2xvc2VyIHRvIHYgdGhhbiB0byBhbnkgb3RoZXIKLS8vIGRv
dWJsZSwgc28gaXQgY29udmVydHMgdG8gdiB3aGVuIHJlYWQuCi0vLwotLy8gVGhpcyBpcyB0cnVl
IGlmIGQsIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLCBpcyBiZXR3ZWVuIG0tIGFuZCBtKywg
dGhlCi0vLyB1cHBlciBhbmQgbG93ZXIgYm91bmRhcmllcy4gZCBtdXN0IGJlIHN0cmljdGx5IGJl
dHdlZW4gdGhlbSBpZiAhaXNfZXZlbi4KLS8vICAgICAgICAgICBtLSA6PSAobnVtZXJhdG9yIC0g
ZGVsdGFfbWludXMpIC8gZGVub21pbmF0b3IKLS8vICAgICAgICAgICBtKyA6PSAobnVtZXJhdG9y
ICsgZGVsdGFfcGx1cykgLyBkZW5vbWluYXRvcgotLy8KLS8vIFByZWNvbmRpdGlvbjogMCA8PSAo
bnVtZXJhdG9yK2RlbHRhX3BsdXMpIC8gZGVub21pbmF0b3IgPCAxMC4KLS8vICAgSWYgMSA8PSAo
bnVtZXJhdG9yK2RlbHRhX3BsdXMpIC8gZGVub21pbmF0b3IgPCAxMCB0aGVuIG5vIGxlYWRpbmcg
MCBkaWdpdAotLy8gICB3aWxsIGJlIHByb2R1Y2VkLiBUaGlzIHNob3VsZCBiZSB0aGUgc3RhbmRh
cmQgcHJlY29uZGl0aW9uLgotc3RhdGljIHZvaWQgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cyhCaWdu
dW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2V2ZW4sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVu
Z3RoKSB7Ci0gIC8vIFNtYWxsIG9wdGltaXphdGlvbjogaWYgZGVsdGFfbWludXMgYW5kIGRlbHRh
X3BsdXMgYXJlIHRoZSBzYW1lIGp1c3QgcmV1c2UKLSAgLy8gb25lIG9mIHRoZSB0d28gYmlnbnVt
cy4KLSAgaWYgKEJpZ251bTo6RXF1YWwoKmRlbHRhX21pbnVzLCAqZGVsdGFfcGx1cykpIHsKLSAg
ICBkZWx0YV9wbHVzID0gZGVsdGFfbWludXM7Ci0gIH0KLSAgKmxlbmd0aCA9IDA7Ci0gIGZvciAo
OzspIHsKLSAgICB1aW50MTZfdCBkaWdpdDsKLSAgICBkaWdpdCA9IG51bWVyYXRvci0+RGl2aWRl
TW9kdWxvSW50QmlnbnVtKCpkZW5vbWluYXRvcik7Ci0gICAgQVNTRVJUKGRpZ2l0IDw9IDkpOyAg
Ly8gZGlnaXQgaXMgYSB1aW50MTZfdCBhbmQgdGhlcmVmb3JlIGFsd2F5cyBwb3NpdGl2ZS4KLSAg
ICAvLyBkaWdpdCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yIChpbnRlZ2VyIGRpdmlzaW9uKS4K
LSAgICAvLyBudW1lcmF0b3IgPSBudW1lcmF0b3IgJSBkZW5vbWluYXRvci4KLSAgICBidWZmZXJb
KCpsZW5ndGgpKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oZGlnaXQgKyAnMCcpOwotCi0gICAgLy8g
Q2FuIHdlIHN0b3AgYWxyZWFkeT8KLSAgICAvLyBJZiB0aGUgcmVtYWluZGVyIG9mIHRoZSBkaXZp
c2lvbiBpcyBsZXNzIHRoYW4gdGhlIGRpc3RhbmNlIHRvIHRoZSBsb3dlcgotICAgIC8vIGJvdW5k
YXJ5IHdlIGNhbiBzdG9wLiBJbiB0aGlzIGNhc2Ugd2Ugc2ltcGx5IHJvdW5kIGRvd24gKGRpc2Nh
cmRpbmcgdGhlCi0gICAgLy8gcmVtYWluZGVyKS4KLSAgICAvLyBTaW1pbGFybHkgd2UgdGVzdCBp
ZiB3ZSBjYW4gcm91bmQgdXAgKHVzaW5nIHRoZSB1cHBlciBib3VuZGFyeSkuCi0gICAgYm9vbCBp
bl9kZWx0YV9yb29tX21pbnVzOwotICAgIGJvb2wgaW5fZGVsdGFfcm9vbV9wbHVzOwotICAgIGlm
IChpc19ldmVuKSB7Ci0gICAgICBpbl9kZWx0YV9yb29tX21pbnVzID0gQmlnbnVtOjpMZXNzRXF1
YWwoKm51bWVyYXRvciwgKmRlbHRhX21pbnVzKTsKLSAgICB9IGVsc2UgewotICAgICAgaW5fZGVs
dGFfcm9vbV9taW51cyA9IEJpZ251bTo6TGVzcygqbnVtZXJhdG9yLCAqZGVsdGFfbWludXMpOwot
ICAgIH0KLSAgICBpZiAoaXNfZXZlbikgewotICAgICAgaW5fZGVsdGFfcm9vbV9wbHVzID0KLSAg
ICAgICAgICBCaWdudW06OlBsdXNDb21wYXJlKCpudW1lcmF0b3IsICpkZWx0YV9wbHVzLCAqZGVu
b21pbmF0b3IpID49IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGluX2RlbHRhX3Jvb21fcGx1cyA9
Ci0gICAgICAgICAgQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAqZGVsdGFfcGx1cywg
KmRlbm9taW5hdG9yKSA+IDA7Ci0gICAgfQotICAgIGlmICghaW5fZGVsdGFfcm9vbV9taW51cyAm
JiAhaW5fZGVsdGFfcm9vbV9wbHVzKSB7Ci0gICAgICAvLyBQcmVwYXJlIGZvciBuZXh0IGl0ZXJh
dGlvbi4KLSAgICAgIG51bWVyYXRvci0+VGltZXMxMCgpOwotICAgICAgZGVsdGFfbWludXMtPlRp
bWVzMTAoKTsKLSAgICAgIC8vIFdlIG9wdGltaXplZCBkZWx0YV9wbHVzIHRvIGJlIGVxdWFsIHRv
IGRlbHRhX21pbnVzIChpZiB0aGV5IHNoYXJlIHRoZQotICAgICAgLy8gc2FtZSB2YWx1ZSkuIFNv
IGRvbid0IG11bHRpcGx5IGRlbHRhX3BsdXMgaWYgdGhleSBwb2ludCB0byB0aGUgc2FtZQotICAg
ICAgLy8gb2JqZWN0LgotICAgICAgaWYgKGRlbHRhX21pbnVzICE9IGRlbHRhX3BsdXMpIHsKLSAg
ICAgICAgZGVsdGFfcGx1cy0+VGltZXMxMCgpOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoaW5f
ZGVsdGFfcm9vbV9taW51cyAmJiBpbl9kZWx0YV9yb29tX3BsdXMpIHsKLSAgICAgIC8vIExldCdz
IHNlZSBpZiAyKm51bWVyYXRvciA8IGRlbm9taW5hdG9yLgotICAgICAgLy8gSWYgeWVzLCB0aGVu
IHRoZSBuZXh0IGRpZ2l0IHdvdWxkIGJlIDwgNSBhbmQgd2UgY2FuIHJvdW5kIGRvd24uCi0gICAg
ICBpbnQgY29tcGFyZSA9IEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKm51bWVyYXRv
ciwgKmRlbm9taW5hdG9yKTsKLSAgICAgIGlmIChjb21wYXJlIDwgMCkgewotICAgICAgICAvLyBS
ZW1haW5pbmcgZGlnaXRzIGFyZSBsZXNzIHRoYW4gLjUuIC0+IFJvdW5kIGRvd24gKD09IGRvIG5v
dGhpbmcpLgotICAgICAgfSBlbHNlIGlmIChjb21wYXJlID4gMCkgewotICAgICAgICAvLyBSZW1h
aW5pbmcgZGlnaXRzIGFyZSBtb3JlIHRoYW4gLjUgb2YgZGVub21pbmF0b3IuIC0+IFJvdW5kIHVw
LgotICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGxhc3QgZGlnaXQgY291bGQgbm90IGJlIGEgJzkn
IGFzIG90aGVyd2lzZSB0aGUgd2hvbGUKLSAgICAgICAgLy8gbG9vcCB3b3VsZCBoYXZlIHN0b3Bw
ZWQgZWFybGllci4KLSAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSBhbiBhc3NlcnQgaGVyZSBpbiBj
YXNlIHRoZSBwcmVjb25kaXRpb25zIHdlcmUgbm90Ci0gICAgICAgIC8vIHNhdGlzZmllZC4KLSAg
ICAgICAgQVNTRVJUKGJ1ZmZlclsoKmxlbmd0aCkgLSAxXSAhPSAnOScpOwotICAgICAgICBidWZm
ZXJbKCpsZW5ndGgpIC0gMV0rKzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEhhbGZ3YXkg
Y2FzZS4KLSAgICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IG5lZWQgYSB3YXkgdG8gc29sdmUgaGFs
Zi13YXkgY2FzZXMuCi0gICAgICAgIC8vICAgRm9yIG5vdyBsZXQncyByb3VuZCB0b3dhcmRzIGV2
ZW4gKHNpbmNlIHRoaXMgaXMgd2hhdCBHYXkgc2VlbXMgdG8KLSAgICAgICAgLy8gICBkbykuCi0K
LSAgICAgICAgaWYgKChidWZmZXJbKCpsZW5ndGgpIC0gMV0gLSAnMCcpICUgMiA9PSAwKSB7Ci0g
ICAgICAgICAgLy8gUm91bmQgZG93biA9PiBEbyBub3RoaW5nLgotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIEFTU0VSVChidWZmZXJbKCpsZW5ndGgpIC0gMV0gIT0gJzknKTsKLSAgICAgICAg
ICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0
dXJuOwotICAgIH0gZWxzZSBpZiAoaW5fZGVsdGFfcm9vbV9taW51cykgewotICAgICAgLy8gUm91
bmQgZG93biAoPT0gZG8gbm90aGluZykuCi0gICAgICByZXR1cm47Ci0gICAgfSBlbHNlIHsgIC8v
IGluX2RlbHRhX3Jvb21fcGx1cwotICAgICAgLy8gUm91bmQgdXAuCi0gICAgICAvLyBOb3RlIGFn
YWluIHRoYXQgdGhlIGxhc3QgZGlnaXQgY291bGQgbm90IGJlICc5JyBzaW5jZSB0aGlzIHdvdWxk
IGhhdmUKLSAgICAgIC8vIHN0b3BwZWQgdGhlIGxvb3AgZWFybGllci4KLSAgICAgIC8vIFdlIHN0
aWxsIGhhdmUgYW4gQVNTRVJUIGhlcmUsIGluIGNhc2UgdGhlIHByZWNvbmRpdGlvbnMgd2VyZSBu
b3QKLSAgICAgIC8vIHNhdGlzZmllZC4KLSAgICAgIEFTU0VSVChidWZmZXJbKCpsZW5ndGgpIC0x
XSAhPSAnOScpOwotICAgICAgYnVmZmVyWygqbGVuZ3RoKSAtIDFdKys7Ci0gICAgICByZXR1cm47
Ci0gICAgfQotICB9Ci19Ci0KLQotLy8gTGV0IHYgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvciA8
IDEwLgotLy8gVGhlbiB3ZSBnZW5lcmF0ZSAnY291bnQnIGRpZ2l0cyBvZiBkID0geC54eHh4eC4u
LiAod2l0aG91dCB0aGUgZGVjaW1hbCBwb2ludCkKLS8vIGZyb20gbGVmdCB0byByaWdodC4gT25j
ZSAnY291bnQnIGRpZ2l0cyBoYXZlIGJlZW4gcHJvZHVjZWQgd2UgZGVjaWRlIHdldGhlcgotLy8g
dG8gcm91bmQgdXAgb3IgZG93bi4gUmVtYWluZGVycyBvZiBleGFjdGx5IC41IHJvdW5kIHVwd2Fy
ZHMuIE51bWJlcnMgc3VjaAotLy8gYXMgOS45OTk5OTkgcHJvcGFnYXRlIGEgY2FycnkgYWxsIHRo
ZSB3YXksIGFuZCBjaGFuZ2UgdGhlCi0vLyBleHBvbmVudCAoZGVjaW1hbF9wb2ludCksIHdoZW4g
cm91bmRpbmcgdXB3YXJkcy4KLXN0YXRpYyB2b2lkIEdlbmVyYXRlQ291bnRlZERpZ2l0cyhpbnQg
Y291bnQsIGludCogZGVjaW1hbF9wb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCkg
ewotICBBU1NFUlQoY291bnQgPj0gMCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgLSAx
OyArK2kpIHsKLSAgICB1aW50MTZfdCBkaWdpdDsKLSAgICBkaWdpdCA9IG51bWVyYXRvci0+RGl2
aWRlTW9kdWxvSW50QmlnbnVtKCpkZW5vbWluYXRvcik7Ci0gICAgQVNTRVJUKGRpZ2l0IDw9IDkp
OyAgLy8gZGlnaXQgaXMgYSB1aW50MTZfdCBhbmQgdGhlcmVmb3JlIGFsd2F5cyBwb3NpdGl2ZS4K
LSAgICAvLyBkaWdpdCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yIChpbnRlZ2VyIGRpdmlzaW9u
KS4KLSAgICAvLyBudW1lcmF0b3IgPSBudW1lcmF0b3IgJSBkZW5vbWluYXRvci4KLSAgICBidWZm
ZXJbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPihkaWdpdCArICcwJyk7Ci0gICAgLy8gUHJlcGFyZSBm
b3IgbmV4dCBpdGVyYXRpb24uCi0gICAgbnVtZXJhdG9yLT5UaW1lczEwKCk7Ci0gIH0KLSAgLy8g
R2VuZXJhdGUgdGhlIGxhc3QgZGlnaXQuCi0gIHVpbnQxNl90IGRpZ2l0OwotICBkaWdpdCA9IG51
bWVyYXRvci0+RGl2aWRlTW9kdWxvSW50QmlnbnVtKCpkZW5vbWluYXRvcik7Ci0gIGlmIChCaWdu
dW06OlBsdXNDb21wYXJlKCpudW1lcmF0b3IsICpudW1lcmF0b3IsICpkZW5vbWluYXRvcikgPj0g
MCkgewotICAgIGRpZ2l0Kys7Ci0gIH0KLSAgQVNTRVJUKGRpZ2l0IDw9IDEwKTsKLSAgYnVmZmVy
W2NvdW50IC0gMV0gPSBzdGF0aWNfY2FzdDxjaGFyPihkaWdpdCArICcwJyk7Ci0gIC8vIENvcnJl
Y3QgYmFkIGRpZ2l0cyAoaW4gY2FzZSB3ZSBoYWQgYSBzZXF1ZW5jZSBvZiAnOSdzKS4gUHJvcGFn
YXRlIHRoZQotICAvLyBjYXJyeSB1bnRpbCB3ZSBoYXQgYSBub24tJzknIG9yIHRpbCB3ZSByZWFj
aCB0aGUgZmlyc3QgZGlnaXQuCi0gIGZvciAoaW50IGkgPSBjb3VudCAtIDE7IGkgPiAwOyAtLWkp
IHsKLSAgICBpZiAoYnVmZmVyW2ldICE9ICcwJyArIDEwKSBicmVhazsKLSAgICBidWZmZXJbaV0g
PSAnMCc7Ci0gICAgYnVmZmVyW2kgLSAxXSsrOwotICB9Ci0gIGlmIChidWZmZXJbMF0gPT0gJzAn
ICsgMTApIHsKLSAgICAvLyBQcm9wYWdhdGUgYSBjYXJyeSBwYXN0IHRoZSB0b3AgcGxhY2UuCi0g
ICAgYnVmZmVyWzBdID0gJzEnOwotICAgICgqZGVjaW1hbF9wb2ludCkrKzsKLSAgfQotICAqbGVu
Z3RoID0gY291bnQ7Ci19Ci0KLQotLy8gR2VuZXJhdGVzICdyZXF1ZXN0ZWRfZGlnaXRzJyBhZnRl
ciB0aGUgZGVjaW1hbCBwb2ludC4gSXQgbWlnaHQgb21pdAotLy8gdHJhaWxpbmcgJzAncy4gSWYg
dGhlIGlucHV0IG51bWJlciBpcyB0b28gc21hbGwgdGhlbiBubyBkaWdpdHMgYXQgYWxsIGFyZQot
Ly8gZ2VuZXJhdGVkIChleC46IDIgZml4ZWQgZGlnaXRzIGZvciAwLjAwMDAxKS4KLS8vCi0vLyBJ
bnB1dCB2ZXJpZmllczogIDEgPD0gKG51bWVyYXRvciArIGRlbHRhKSAvIGRlbm9taW5hdG9yIDwg
MTAuCi1zdGF0aWMgdm9pZCBCaWdudW1Ub0ZpeGVkKGludCByZXF1ZXN0ZWRfZGlnaXRzLCBpbnQq
IGRlY2ltYWxfcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJh
dG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8Y2hhcj4oYnVmZmVyKSwgaW50KiBsZW5ndGgpIHsKLSAgLy8gTm90ZSB0aGF0IHdlIGhhdmUg
dG8gbG9vayBhdCBtb3JlIHRoYW4ganVzdCB0aGUgcmVxdWVzdGVkX2RpZ2l0cywgc2luY2UKLSAg
Ly8gYSBudW1iZXIgY291bGQgYmUgcm91bmRlZCB1cC4gRXhhbXBsZTogdj0wLjUgd2l0aCByZXF1
ZXN0ZWRfZGlnaXRzPTAuCi0gIC8vIEV2ZW4gdGhvdWdoIHRoZSBwb3dlciBvZiB2IGVxdWFscyAw
IHdlIGNhbid0IGp1c3Qgc3RvcCBoZXJlLgotICBpZiAoLSgqZGVjaW1hbF9wb2ludCkgPiByZXF1
ZXN0ZWRfZGlnaXRzKSB7Ci0gICAgLy8gVGhlIG51bWJlciBpcyBkZWZpbml0aXZlbHkgdG9vIHNt
YWxsLgotICAgIC8vIEV4OiAwLjAwMSB3aXRoIHJlcXVlc3RlZF9kaWdpdHMgPT0gMS4KLSAgICAv
LyBTZXQgZGVjaW1hbC1wb2ludCB0byAtcmVxdWVzdGVkX2RpZ2l0cy4gVGhpcyBpcyB3aGF0IEdh
eSBkb2VzLgotICAgIC8vIE5vdGUgdGhhdCBpdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBh
bnl3YXlzIHNpbmNlIHRoZSBzdHJpbmcgaXMKLSAgICAvLyBlbXB0eS4KLSAgICAqZGVjaW1hbF9w
b2ludCA9IC1yZXF1ZXN0ZWRfZGlnaXRzOwotICAgICpsZW5ndGggPSAwOwotICAgIHJldHVybjsK
LSAgfSBlbHNlIGlmICgtKCpkZWNpbWFsX3BvaW50KSA9PSByZXF1ZXN0ZWRfZGlnaXRzKSB7Ci0g
ICAgLy8gV2Ugb25seSBuZWVkIHRvIHZlcmlmeSBpZiB0aGUgbnVtYmVyIHJvdW5kcyBkb3duIG9y
IHVwLgotICAgIC8vIEV4OiAwLjA0IGFuZCAwLjA2IHdpdGggcmVxdWVzdGVkX2RpZ2l0cyA9PSAx
LgotICAgIEFTU0VSVCgqZGVjaW1hbF9wb2ludCA9PSAtcmVxdWVzdGVkX2RpZ2l0cyk7Ci0gICAg
Ly8gSW5pdGlhbGx5IHRoZSBmcmFjdGlvbiBsaWVzIGluIHJhbmdlICgxLCAxMF0uIE11bHRpcGx5
IHRoZSBkZW5vbWluYXRvcgotICAgIC8vIGJ5IDEwIHNvIHRoYXQgd2UgY2FuIGNvbXBhcmUgbW9y
ZSBlYXNpbHkuCi0gICAgZGVub21pbmF0b3ItPlRpbWVzMTAoKTsKLSAgICBpZiAoQmlnbnVtOjpQ
bHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAqbnVtZXJhdG9yLCAqZGVub21pbmF0b3IpID49IDApIHsK
LSAgICAgIC8vIElmIHRoZSBmcmFjdGlvbiBpcyA+PSAwLjUgdGhlbiB3ZSBoYXZlIHRvIGluY2x1
ZGUgdGhlIHJvdW5kZWQKLSAgICAgIC8vIGRpZ2l0LgotICAgICAgYnVmZmVyWzBdID0gJzEnOwot
ICAgICAgKmxlbmd0aCA9IDE7Ci0gICAgICAoKmRlY2ltYWxfcG9pbnQpKys7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYXVnaHQgbW9zdCBvZiBzaW1pbGFyIGNhc2VzIGVh
cmxpZXIuCi0gICAgICAqbGVuZ3RoID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuOwotICB9IGVsc2Ug
ewotICAgIC8vIFRoZSByZXF1ZXN0ZWQgZGlnaXRzIGNvcnJlc3BvbmQgdG8gdGhlIGRpZ2l0cyBh
ZnRlciB0aGUgcG9pbnQuCi0gICAgLy8gVGhlIHZhcmlhYmxlICduZWVkZWRfZGlnaXRzJyBpbmNs
dWRlcyB0aGUgZGlnaXRzIGJlZm9yZSB0aGUgcG9pbnQuCi0gICAgaW50IG5lZWRlZF9kaWdpdHMg
PSAoKmRlY2ltYWxfcG9pbnQpICsgcmVxdWVzdGVkX2RpZ2l0czsKLSAgICBHZW5lcmF0ZUNvdW50
ZWREaWdpdHMobmVlZGVkX2RpZ2l0cywgZGVjaW1hbF9wb2ludCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyLCBsZW5ndGgpOwotICB9Ci19Ci0KLQotLy8gUmV0dXJucyBhbiBlc3RpbWF0aW9u
IG9mIGsgc3VjaCB0aGF0IDEwXihrLTEpIDw9IHYgPCAxMF5rIHdoZXJlCi0vLyB2ID0gZiAqIDJe
ZXhwb25lbnQgYW5kIDJeNTIgPD0gZiA8IDJeNTMuCi0vLyB2IGlzIGhlbmNlIGEgbm9ybWFsaXpl
ZCBkb3VibGUgd2l0aCB0aGUgZ2l2ZW4gZXhwb25lbnQuIFRoZSBvdXRwdXQgaXMgYW4KLS8vIGFw
cHJveGltYXRpb24gZm9yIHRoZSBleHBvbmVudCBvZiB0aGUgZGVjaW1hbCBhcHByb2ltYXRpb24g
LmRpZ2l0cyAqIDEwXmsuCi0vLwotLy8gVGhlIHJlc3VsdCBtaWdodCB1bmRlcnNob290IGJ5IDEg
aW4gd2hpY2ggY2FzZSAxMF5rIDw9IHYgPCAxMF5rKzEuCi0vLyBOb3RlOiB0aGlzIHByb3BlcnR5
IGhvbGRzIGZvciB2J3MgdXBwZXIgYm91bmRhcnkgbSsgdG9vLgotLy8gICAgMTBeayA8PSBtKyA8
IDEwXmsrMS4KLS8vICAgKHNlZSBleHBsYW5hdGlvbiBiZWxvdykuCi0vLwotLy8gRXhhbXBsZXM6
Ci0vLyAgRXN0aW1hdGVQb3dlcigwKSAgID0+IDE2Ci0vLyAgRXN0aW1hdGVQb3dlcigtNTIpID0+
IDAKLS8vCi0vLyBOb3RlOiBlID49IDAgPT4gRXN0aW1hdGVkUG93ZXIoZSkgPiAwLiBObyBzaW1p
bGFyIGNsYWltIGNhbiBiZSBtYWRlIGZvciBlPDAuCi1zdGF0aWMgaW50IEVzdGltYXRlUG93ZXIo
aW50IGV4cG9uZW50KSB7Ci0gIC8vIFRoaXMgZnVuY3Rpb24gZXN0aW1hdGVzIGxvZzEwIG9mIHYg
d2hlcmUgdiA9IGYqMl5lICh3aXRoIGUgPT0gZXhwb25lbnQpLgotICAvLyBOb3RlIHRoYXQgMTBe
Zmxvb3IobG9nMTAodikpIDw9IHYsIGJ1dCB2IDw9IDEwXmNlaWwobG9nMTAodikpLgotICAvLyBO
b3RlIHRoYXQgZiBpcyBib3VuZGVkIGJ5IGl0cyBjb250YWluZXIgc2l6ZS4gTGV0IHAgPSA1MyAo
dGhlIGRvdWJsZSdzCi0gIC8vIHNpZ25pZmljYW5kIHNpemUpLiBUaGVuIDJeKHAtMSkgPD0gZiA8
IDJecC4KLSAgLy8KLSAgLy8gR2l2ZW4gdGhhdCBsb2cxMCh2KSA9PSBsb2cyKHYpL2xvZzIoMTAp
IGFuZCBlKyhsZW4oZiktMSkgaXMgcXVpdGUgY2xvc2UKLSAgLy8gdG8gbG9nMih2KSB0aGUgZnVu
Y3Rpb24gaXMgc2ltcGxpZmllZCB0byAoZSsobGVuKGYpLTEpL2xvZzIoMTApKS4KLSAgLy8gVGhl
IGNvbXB1dGVkIG51bWJlciB1bmRlcnNob290cyBieSBsZXNzIHRoYW4gMC42MzEgKHdoZW4gd2Ug
Y29tcHV0ZSBsb2czCi0gIC8vIGFuZCBub3QgbG9nMTApLgotICAvLwotICAvLyBPcHRpbWl6YXRp
b246IHNpbmNlIHdlIG9ubHkgbmVlZCBhbiBhcHByb3hpbWF0ZWQgcmVzdWx0IHRoaXMgY29tcHV0
YXRpb24KLSAgLy8gY2FuIGJlIHBlcmZvcm1lZCBvbiA2NCBiaXQgaW50ZWdlcnMuIE9uIHg4Ni94
NjQgYXJjaGl0ZWN0dXJlIHRoZSBzcGVlZHVwIGlzCi0gIC8vIG5vdCByZWFsbHkgbWVhc3VyYWJs
ZSwgdGhvdWdoLgotICAvLwotICAvLyBTaW5jZSB3ZSB3YW50IHRvIGF2b2lkIG92ZXJzaG9vdGlu
ZyB3ZSBkZWNyZW1lbnQgYnkgMWUxMCBzbyB0aGF0Ci0gIC8vIGZsb2F0aW5nLXBvaW50IGltcHJl
Y2lzaW9ucyBkb24ndCBhZmZlY3QgdXMuCi0gIC8vCi0gIC8vIEV4cGxhbmF0aW9uIGZvciB2J3Mg
Ym91bmRhcnkgbSs6IHRoZSBjb21wdXRhdGlvbiB0YWtlcyBhZHZhbnRhZ2Ugb2YKLSAgLy8gdGhl
IGZhY3QgdGhhdCAyXihwLTEpIDw9IGYgPCAyXnAuIEJvdW5kYXJpZXMgc3RpbGwgc2F0aXNmeSB0
aGlzIHJlcXVpcmVtZW50Ci0gIC8vIChldmVuIGZvciBkZW5vcm1hbHMgd2hlcmUgdGhlIGRlbHRh
IGNhbiBiZSBtdWNoIG1vcmUgaW1wb3J0YW50KS4KLQotICBjb25zdCBkb3VibGUgazFMb2cxMCA9
IDAuMzAxMDI5OTk1NjYzOTgxMTQ7ICAvLyAxL2xnKDEwKQotCi0gIC8vIEZvciBkb3VibGVzIGxl
bihmKSA9PSA1MyAoZG9uJ3QgZm9yZ2V0IHRoZSBoaWRkZW4gYml0KS4KLSAgY29uc3QgaW50IGtT
aWduaWZpY2FuZFNpemUgPSBEb3VibGU6OmtTaWduaWZpY2FuZFNpemU7Ci0gIGRvdWJsZSBlc3Rp
bWF0ZSA9IGNlaWwoKGV4cG9uZW50ICsga1NpZ25pZmljYW5kU2l6ZSAtIDEpICogazFMb2cxMCAt
IDFlLTEwKTsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZXN0aW1hdGUpOwotfQotCi0KLS8v
IFNlZSBjb21tZW50cyBmb3IgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzLgotc3RhdGljIHZvaWQg
SW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzUG9zaXRpdmVFeHBvbmVudCgKLSAgICB1aW50NjRfdCBz
aWduaWZpY2FuZCwgaW50IGV4cG9uZW50LAotICAgIGludCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wg
bmVlZF9ib3VuZGFyeV9kZWx0YXMsCi0gICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVu
b21pbmF0b3IsCi0gICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzKSB7
Ci0gIC8vIEEgcG9zaXRpdmUgZXhwb25lbnQgaW1wbGllcyBhIHBvc2l0aXZlIHBvd2VyLgotICBB
U1NFUlQoZXN0aW1hdGVkX3Bvd2VyID49IDApOwotICAvLyBTaW5jZSB0aGUgZXN0aW1hdGVkX3Bv
d2VyIGlzIHBvc2l0aXZlIHdlIHNpbXBseSBtdWx0aXBseSB0aGUgZGVub21pbmF0b3IKLSAgLy8g
YnkgMTBeZXN0aW1hdGVkX3Bvd2VyLgotCi0gIC8vIG51bWVyYXRvciA9IHYuCi0gIG51bWVyYXRv
ci0+QXNzaWduVUludDY0KHNpZ25pZmljYW5kKTsKLSAgbnVtZXJhdG9yLT5TaGlmdExlZnQoZXhw
b25lbnQpOwotICAvLyBkZW5vbWluYXRvciA9IDEwXmVzdGltYXRlZF9wb3dlci4KLSAgZGVub21p
bmF0b3ItPkFzc2lnblBvd2VyVUludDE2KDEwLCBlc3RpbWF0ZWRfcG93ZXIpOwotCi0gIGlmIChu
ZWVkX2JvdW5kYXJ5X2RlbHRhcykgewotICAgIC8vIEludHJvZHVjZSBhIGNvbW1vbiBkZW5vbWlu
YXRvciBzbyB0aGF0IHRoZSBkZWx0YXMgdG8gdGhlIGJvdW5kYXJpZXMgYXJlCi0gICAgLy8gaW50
ZWdlcnMuCi0gICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsKLSAgICBudW1lcmF0b3ItPlNo
aWZ0TGVmdCgxKTsKLSAgICAvLyBMZXQgdiA9IGYgKiAyXmUsIHRoZW4gbSsgLSB2ID0gMS8yICog
Ml5lOyBXaXRoIHRoZSBjb21tb24KLSAgICAvLyBkZW5vbWluYXRvciAob2YgMikgZGVsdGFfcGx1
cyBlcXVhbHMgMl5lLgotICAgIGRlbHRhX3BsdXMtPkFzc2lnblVJbnQxNigxKTsKLSAgICBkZWx0
YV9wbHVzLT5TaGlmdExlZnQoZXhwb25lbnQpOwotICAgIC8vIFNhbWUgZm9yIGRlbHRhX21pbnVz
LiBUaGUgYWRqdXN0bWVudHMgaWYgZiA9PSAyXnAtMSBhcmUgZG9uZSBsYXRlci4KLSAgICBkZWx0
YV9taW51cy0+QXNzaWduVUludDE2KDEpOwotICAgIGRlbHRhX21pbnVzLT5TaGlmdExlZnQoZXhw
b25lbnQpOwotICB9Ci19Ci0KLQotLy8gU2VlIGNvbW1lbnRzIGZvciBJbml0aWFsU2NhbGVkU3Rh
cnRWYWx1ZXMKLXN0YXRpYyB2b2lkIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0aXZlRXhw
b25lbnRQb3NpdGl2ZVBvd2VyKAotICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kLCBpbnQgZXhwb25l
bnQsCi0gICAgaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywK
LSAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKLSAgICBCaWdudW0q
IGRlbHRhX21pbnVzLCBCaWdudW0qIGRlbHRhX3BsdXMpIHsKLSAgLy8gdiA9IGYgKiAyXmUgd2l0
aCBlIDwgMCwgYW5kIHdpdGggZXN0aW1hdGVkX3Bvd2VyID49IDAuCi0gIC8vIFRoaXMgbWVhbnMg
dGhhdCBlIGlzIGNsb3NlIHRvIDAgKGhhdmUgYSBsb29rIGF0IGhvdyBlc3RpbWF0ZWRfcG93ZXIg
aXMKLSAgLy8gY29tcHV0ZWQpLgotCi0gIC8vIG51bWVyYXRvciA9IHNpZ25pZmljYW5kCi0gIC8v
ICBzaW5jZSB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50IHRoaXMgaXMgZXF1aXZhbGVudCB0
bwotICAvLyAgbnVtZXJhdG9yID0gdiAqIC8gMl4tZXhwb25lbnQKLSAgbnVtZXJhdG9yLT5Bc3Np
Z25VSW50NjQoc2lnbmlmaWNhbmQpOwotICAvLyBkZW5vbWluYXRvciA9IDEwXmVzdGltYXRlZF9w
b3dlciAqIDJeLWV4cG9uZW50ICh3aXRoIGV4cG9uZW50IDwgMCkKLSAgZGVub21pbmF0b3ItPkFz
c2lnblBvd2VyVUludDE2KDEwLCBlc3RpbWF0ZWRfcG93ZXIpOwotICBkZW5vbWluYXRvci0+U2hp
ZnRMZWZ0KC1leHBvbmVudCk7Ci0KLSAgaWYgKG5lZWRfYm91bmRhcnlfZGVsdGFzKSB7Ci0gICAg
Ly8gSW50cm9kdWNlIGEgY29tbW9uIGRlbm9taW5hdG9yIHNvIHRoYXQgdGhlIGRlbHRhcyB0byB0
aGUgYm91bmRhcmllcyBhcmUKLSAgICAvLyBpbnRlZ2Vycy4KLSAgICBkZW5vbWluYXRvci0+U2hp
ZnRMZWZ0KDEpOwotICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOwotICAgIC8vIExldCB2ID0g
ZiAqIDJeZSwgdGhlbiBtKyAtIHYgPSAxLzIgKiAyXmU7IFdpdGggdGhlIGNvbW1vbgotICAgIC8v
IGRlbm9taW5hdG9yIChvZiAyKSBkZWx0YV9wbHVzIGVxdWFscyAyXmUuCi0gICAgLy8gR2l2ZW4g
dGhhdCB0aGUgZGVub21pbmF0b3IgYWxyZWFkeSBpbmNsdWRlcyB2J3MgZXhwb25lbnQgdGhlIGRp
c3RhbmNlCi0gICAgLy8gdG8gdGhlIGJvdW5kYXJpZXMgaXMgc2ltcGx5IDEuCi0gICAgZGVsdGFf
cGx1cy0+QXNzaWduVUludDE2KDEpOwotICAgIC8vIFNhbWUgZm9yIGRlbHRhX21pbnVzLiBUaGUg
YWRqdXN0bWVudHMgaWYgZiA9PSAyXnAtMSBhcmUgZG9uZSBsYXRlci4KLSAgICBkZWx0YV9taW51
cy0+QXNzaWduVUludDE2KDEpOwotICB9Ci19Ci0KLQotLy8gU2VlIGNvbW1lbnRzIGZvciBJbml0
aWFsU2NhbGVkU3RhcnRWYWx1ZXMKLXN0YXRpYyB2b2lkIEluaXRpYWxTY2FsZWRTdGFydFZhbHVl
c05lZ2F0aXZlRXhwb25lbnROZWdhdGl2ZVBvd2VyKAotICAgIHVpbnQ2NF90IHNpZ25pZmljYW5k
LCBpbnQgZXhwb25lbnQsCi0gICAgaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBuZWVkX2JvdW5k
YXJ5X2RlbHRhcywKLSAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwK
LSAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0qIGRlbHRhX3BsdXMpIHsKLSAgLy8gSW5z
dGVhZCBvZiBtdWx0aXBseWluZyB0aGUgZGVub21pbmF0b3Igd2l0aCAxMF5lc3RpbWF0ZWRfcG93
ZXIgd2UKLSAgLy8gbXVsdGlwbHkgYWxsIHZhbHVlcyAobnVtZXJhdG9yIGFuZCBkZWx0YXMpIGJ5
IDEwXi1lc3RpbWF0ZWRfcG93ZXIuCi0KLSAgLy8gVXNlIG51bWVyYXRvciBhcyB0ZW1wb3Jhcnkg
Y29udGFpbmVyIGZvciBwb3dlcl90ZW4uCi0gIEJpZ251bSogcG93ZXJfdGVuID0gbnVtZXJhdG9y
OwotICBwb3dlcl90ZW4tPkFzc2lnblBvd2VyVUludDE2KDEwLCAtZXN0aW1hdGVkX3Bvd2VyKTsK
LQotICBpZiAobmVlZF9ib3VuZGFyeV9kZWx0YXMpIHsKLSAgICAvLyBTaW5jZSBwb3dlcl90ZW4g
PT0gbnVtZXJhdG9yIHdlIG11c3QgbWFrZSBhIGNvcHkgb2YgMTBeZXN0aW1hdGVkX3Bvd2VyCi0g
ICAgLy8gYmVmb3JlIHdlIGNvbXBsZXRlIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgbnVtZXJhdG9y
LgotICAgIC8vIGRlbHRhX3BsdXMgPSBkZWx0YV9taW51cyA9IDEwXmVzdGltYXRlZF9wb3dlcgot
ICAgIGRlbHRhX3BsdXMtPkFzc2lnbkJpZ251bSgqcG93ZXJfdGVuKTsKLSAgICBkZWx0YV9taW51
cy0+QXNzaWduQmlnbnVtKCpwb3dlcl90ZW4pOwotICB9Ci0KLSAgLy8gbnVtZXJhdG9yID0gc2ln
bmlmaWNhbmQgKiAyICogMTBeLWVzdGltYXRlZF9wb3dlcgotICAvLyAgc2luY2UgdiA9IHNpZ25p
ZmljYW5kICogMl5leHBvbmVudCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KLSAgLy8gbnVtZXJhdG9y
ID0gdiAqIDEwXi1lc3RpbWF0ZWRfcG93ZXIgKiAyICogMl4tZXhwb25lbnQuCi0gIC8vIFJlbWVt
YmVyOiBudW1lcmF0b3IgaGFzIGJlZW4gYWJ1c2VkIGFzIHBvd2VyX3Rlbi4gU28gbm8gbmVlZCB0
byBhc3NpZ24gaXQKLSAgLy8gIHRvIGl0c2VsZi4KLSAgQVNTRVJUKG51bWVyYXRvciA9PSBwb3dl
cl90ZW4pOwotICBudW1lcmF0b3ItPk11bHRpcGx5QnlVSW50NjQoc2lnbmlmaWNhbmQpOwotCi0g
IC8vIGRlbm9taW5hdG9yID0gMiAqIDJeLWV4cG9uZW50IHdpdGggZXhwb25lbnQgPCAwLgotICBk
ZW5vbWluYXRvci0+QXNzaWduVUludDE2KDEpOwotICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KC1l
eHBvbmVudCk7Ci0KLSAgaWYgKG5lZWRfYm91bmRhcnlfZGVsdGFzKSB7Ci0gICAgLy8gSW50cm9k
dWNlIGEgY29tbW9uIGRlbm9taW5hdG9yIHNvIHRoYXQgdGhlIGRlbHRhcyB0byB0aGUgYm91bmRh
cmllcyBhcmUKLSAgICAvLyBpbnRlZ2Vycy4KLSAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsK
LSAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KDEpOwotICAgIC8vIFdpdGggdGhpcyBzaGlmdCB0
aGUgYm91bmRhcmllcyBoYXZlIHRoZWlyIGNvcnJlY3QgdmFsdWUsIHNpbmNlCi0gICAgLy8gZGVs
dGFfcGx1cyA9IDEwXi1lc3RpbWF0ZWRfcG93ZXIsIGFuZAotICAgIC8vIGRlbHRhX21pbnVzID0g
MTBeLWVzdGltYXRlZF9wb3dlci4KLSAgICAvLyBUaGVzZSBhc3NpZ25tZW50cyBoYXZlIGJlZW4g
ZG9uZSBlYXJsaWVyLgotICAgIC8vIFRoZSBhZGp1c3RtZW50cyBpZiBmID09IDJecC0xIChsb3dl
ciBib3VuZGFyeSBpcyBjbG9zZXIpIGFyZSBkb25lIGxhdGVyLgotICB9Ci19Ci0KLQotLy8gTGV0
IHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQuCi0vLyBDb21wdXRlcyB2IC8gMTBeZXN0aW1h
dGVkX3Bvd2VyIGV4YWN0bHksIGFzIGEgcmF0aW8gb2YgdHdvIGJpZ251bXMsIG51bWVyYXRvcgot
Ly8gYW5kIGRlbm9taW5hdG9yLiBUaGUgZnVuY3Rpb25zIEdlbmVyYXRlU2hvcnRlc3REaWdpdHMg
YW5kCi0vLyBHZW5lcmF0ZUNvdW50ZWREaWdpdHMgd2lsbCB0aGVuIGNvbnZlcnQgdGhpcyByYXRp
byB0byBpdHMgZGVjaW1hbAotLy8gcmVwcmVzZW50YXRpb24gZCwgd2l0aCB0aGUgcmVxdWlyZWQg
YWNjdXJhY3kuCi0vLyBUaGVuIGQgKiAxMF5lc3RpbWF0ZWRfcG93ZXIgaXMgdGhlIHJlcHJlc2Vu
dGF0aW9uIG9mIHYuCi0vLyAoTm90ZTogdGhlIGZyYWN0aW9uIGFuZCB0aGUgZXN0aW1hdGVkX3Bv
d2VyIG1pZ2h0IGdldCBhZGp1c3RlZCBiZWZvcmUKLS8vIGdlbmVyYXRpbmcgdGhlIGRlY2ltYWwg
cmVwcmVzZW50YXRpb24uKQotLy8KLS8vIFRoZSBpbml0aWFsIHN0YXJ0IHZhbHVlcyBjb25zaXN0
IG9mOgotLy8gIC0gYSBzY2FsZWQgbnVtZXJhdG9yOiBzLnQuIG51bWVyYXRvci9kZW5vbWluYXRv
ciA9PSB2IC8gMTBeZXN0aW1hdGVkX3Bvd2VyLgotLy8gIC0gYSBzY2FsZWQgKGNvbW1vbikgZGVu
b21pbmF0b3IuCi0vLyAgb3B0aW9uYWxseSAodXNlZCBieSBHZW5lcmF0ZVNob3J0ZXN0RGlnaXRz
IHRvIGRlY2lkZSBpZiBpdCBoYXMgdGhlIHNob3J0ZXN0Ci0vLyAgZGVjaW1hbCBjb252ZXJ0aW5n
IGJhY2sgdG8gdik6Ci0vLyAgLSB2IC0gbS06IHRoZSBkaXN0YW5jZSB0byB0aGUgbG93ZXIgYm91
bmRhcnkuCi0vLyAgLSBtKyAtIHY6IHRoZSBkaXN0YW5jZSB0byB0aGUgdXBwZXIgYm91bmRhcnku
Ci0vLwotLy8gdiwgbSssIG0tLCBhbmQgdGhlcmVmb3JlIHYgLSBtLSBhbmQgbSsgLSB2IGFsbCBz
aGFyZSB0aGUgc2FtZSBkZW5vbWluYXRvci4KLS8vCi0vLyBMZXQgZXAgPT0gZXN0aW1hdGVkX3Bv
d2VyLCB0aGVuIHRoZSByZXR1cm5lZCB2YWx1ZXMgd2lsbCBzYXRpc2Z5OgotLy8gIHYgLyAxMF5l
cCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yLgotLy8gIHYncyBib3VuZGFyeXMgbS0gYW5kIG0r
OgotLy8gICAgbS0gLyAxMF5lcCA9PSB2IC8gMTBeZXAgLSBkZWx0YV9taW51cyAvIGRlbm9taW5h
dG9yCi0vLyAgICBtKyAvIDEwXmVwID09IHYgLyAxMF5lcCArIGRlbHRhX3BsdXMgLyBkZW5vbWlu
YXRvcgotLy8gIE9yIGluIG90aGVyIHdvcmRzOgotLy8gICAgbS0gPT0gdiAtIGRlbHRhX21pbnVz
ICogMTBeZXAgLyBkZW5vbWluYXRvcjsKLS8vICAgIG0rID09IHYgKyBkZWx0YV9wbHVzICogMTBe
ZXAgLyBkZW5vbWluYXRvcjsKLS8vCi0vLyBTaW5jZSAxMF4oay0xKSA8PSB2IDwgMTBeayAgICAo
d2l0aCBrID09IGVzdGltYXRlZF9wb3dlcikKLS8vICBvciAgICAgICAxMF5rIDw9IHYgPCAxMF4o
aysxKQotLy8gIHdlIHRoZW4gaGF2ZSAwLjEgPD0gbnVtZXJhdG9yL2Rlbm9taW5hdG9yIDwgMQot
Ly8gICAgICAgICAgIG9yICAgIDEgPD0gbnVtZXJhdG9yL2Rlbm9taW5hdG9yIDwgMTAKLS8vCi0v
LyBJdCBpcyB0aGVuIGVhc3kgdG8ga2lja3N0YXJ0IHRoZSBkaWdpdC1nZW5lcmF0aW9uIHJvdXRp
bmUuCi0vLwotLy8gVGhlIGJvdW5kYXJ5LWRlbHRhcyBhcmUgb25seSBmaWxsZWQgaWYgdGhlIG1v
ZGUgZXF1YWxzIEJJR05VTV9EVE9BX1NIT1JURVNUCi0vLyBvciBCSUdOVU1fRFRPQV9TSE9SVEVT
VF9TSU5HTEUuCi0KLXN0YXRpYyB2b2lkIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcyh1aW50NjRf
dCBzaWduaWZpY2FuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZXhwb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsb3dl
cl9ib3VuZGFyeV9pc19jbG9zZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGVzdGltYXRlZF9wb3dlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJpZ251bSogZGVub21pbmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX3BsdXMpIHsKLSAgaWYgKGV4cG9uZW50ID49
IDApIHsKLSAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNQb3NpdGl2ZUV4cG9uZW50KAotICAg
ICAgICBzaWduaWZpY2FuZCwgZXhwb25lbnQsIGVzdGltYXRlZF9wb3dlciwgbmVlZF9ib3VuZGFy
eV9kZWx0YXMsCi0gICAgICAgIG51bWVyYXRvciwgZGVub21pbmF0b3IsIGRlbHRhX21pbnVzLCBk
ZWx0YV9wbHVzKTsKLSAgfSBlbHNlIGlmIChlc3RpbWF0ZWRfcG93ZXIgPj0gMCkgewotICAgIElu
aXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0aXZlRXhwb25lbnRQb3NpdGl2ZVBvd2VyKAotICAg
ICAgICBzaWduaWZpY2FuZCwgZXhwb25lbnQsIGVzdGltYXRlZF9wb3dlciwgbmVlZF9ib3VuZGFy
eV9kZWx0YXMsCi0gICAgICAgIG51bWVyYXRvciwgZGVub21pbmF0b3IsIGRlbHRhX21pbnVzLCBk
ZWx0YV9wbHVzKTsKLSAgfSBlbHNlIHsKLSAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNOZWdh
dGl2ZUV4cG9uZW50TmVnYXRpdmVQb3dlcigKLSAgICAgICAgc2lnbmlmaWNhbmQsIGV4cG9uZW50
LCBlc3RpbWF0ZWRfcG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFzLAotICAgICAgICBudW1lcmF0
b3IsIGRlbm9taW5hdG9yLCBkZWx0YV9taW51cywgZGVsdGFfcGx1cyk7Ci0gIH0KLQotICBpZiAo
bmVlZF9ib3VuZGFyeV9kZWx0YXMgJiYgbG93ZXJfYm91bmRhcnlfaXNfY2xvc2VyKSB7Ci0gICAg
Ly8gVGhlIGxvd2VyIGJvdW5kYXJ5IGlzIGNsb3NlciBhdCBoYWxmIHRoZSBkaXN0YW5jZSBvZiAi
bm9ybWFsIiBudW1iZXJzLgotICAgIC8vIEluY3JlYXNlIHRoZSBjb21tb24gZGVub21pbmF0b3Ig
YW5kIGFkYXB0IGFsbCBidXQgdGhlIGRlbHRhX21pbnVzLgotICAgIGRlbm9taW5hdG9yLT5TaGlm
dExlZnQoMSk7ICAvLyAqMgotICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOyAgICAvLyAqMgot
ICAgIGRlbHRhX3BsdXMtPlNoaWZ0TGVmdCgxKTsgICAvLyAqMgotICB9Ci19Ci0KLQotLy8gVGhp
cyByb3V0aW5lIG11bHRpcGxpZXMgbnVtZXJhdG9yL2Rlbm9taW5hdG9yIHNvIHRoYXQgaXRzIHZh
bHVlcyBsaWVzIGluIHRoZQotLy8gcmFuZ2UgMS0xMC4gVGhhdCBpcyBhZnRlciBhIGNhbGwgdG8g
dGhpcyBmdW5jdGlvbiB3ZSBoYXZlOgotLy8gICAgMSA8PSAobnVtZXJhdG9yICsgZGVsdGFfcGx1
cykgL2Rlbm9taW5hdG9yIDwgMTAuCi0vLyBMZXQgbnVtZXJhdG9yIHRoZSBpbnB1dCBiZWZvcmUg
bW9kaWZpY2F0aW9uIGFuZCBudW1lcmF0b3InIHRoZSBhcmd1bWVudAotLy8gYWZ0ZXIgbW9kaWZp
Y2F0aW9uLCB0aGVuIHRoZSBvdXRwdXQtcGFyYW1ldGVyIGRlY2ltYWxfcG9pbnQgaXMgc3VjaCB0
aGF0Ci0vLyAgbnVtZXJhdG9yIC8gZGVub21pbmF0b3IgKiAxMF5lc3RpbWF0ZWRfcG93ZXIgPT0K
LS8vICAgIG51bWVyYXRvcicgLyBkZW5vbWluYXRvcicgKiAxMF4oZGVjaW1hbF9wb2ludCAtIDEp
Ci0vLyBJbiBzb21lIGNhc2VzIGVzdGltYXRlZF9wb3dlciB3YXMgdG9vIGxvdywgYW5kIHRoaXMg
aXMgYWxyZWFkeSB0aGUgY2FzZS4gV2UKLS8vIHRoZW4gc2ltcGx5IGFkanVzdCB0aGUgcG93ZXIg
c28gdGhhdCAxMF4oay0xKSA8PSB2IDwgMTBeayAod2l0aCBrID09Ci0vLyBlc3RpbWF0ZWRfcG93
ZXIpIGJ1dCBkbyBub3QgdG91Y2ggdGhlIG51bWVyYXRvciBvciBkZW5vbWluYXRvci4KLS8vIE90
aGVyd2lzZSB0aGUgcm91dGluZSBtdWx0aXBsaWVzIHRoZSBudW1lcmF0b3IgYW5kIHRoZSBkZWx0
YXMgYnkgMTAuCi1zdGF0aWMgdm9pZCBGaXh1cE11bHRpcGx5MTAoaW50IGVzdGltYXRlZF9wb3dl
ciwgYm9vbCBpc19ldmVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZGVjaW1h
bF9wb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwg
QmlnbnVtKiBkZW5vbWluYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0q
IGRlbHRhX21pbnVzLCBCaWdudW0qIGRlbHRhX3BsdXMpIHsKLSAgYm9vbCBpbl9yYW5nZTsKLSAg
aWYgKGlzX2V2ZW4pIHsKLSAgICAvLyBGb3IgSUVFRSBkb3VibGVzIGhhbGYtd2F5IGNhc2VzIChp
biBkZWNpbWFsIHN5c3RlbSBudW1iZXJzIGVuZGluZyB3aXRoIDUpCi0gICAgLy8gYXJlIHJvdW5k
ZWQgdG8gdGhlIGNsb3Nlc3QgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHdpdGggZXZlbiBzaWduaWZp
Y2FuZC4KLSAgICBpbl9yYW5nZSA9IEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKmRl
bHRhX3BsdXMsICpkZW5vbWluYXRvcikgPj0gMDsKLSAgfSBlbHNlIHsKLSAgICBpbl9yYW5nZSA9
IEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRv
cikgPiAwOwotICB9Ci0gIGlmIChpbl9yYW5nZSkgewotICAgIC8vIFNpbmNlIG51bWVyYXRvciAr
IGRlbHRhX3BsdXMgPj0gZGVub21pbmF0b3Igd2UgYWxyZWFkeSBoYXZlCi0gICAgLy8gMSA8PSBu
dW1lcmF0b3IvZGVub21pbmF0b3IgPCAxMC4gU2ltcGx5IHVwZGF0ZSB0aGUgZXN0aW1hdGVkX3Bv
d2VyLgotICAgICpkZWNpbWFsX3BvaW50ID0gZXN0aW1hdGVkX3Bvd2VyICsgMTsKLSAgfSBlbHNl
IHsKLSAgICAqZGVjaW1hbF9wb2ludCA9IGVzdGltYXRlZF9wb3dlcjsKLSAgICBudW1lcmF0b3It
PlRpbWVzMTAoKTsKLSAgICBpZiAoQmlnbnVtOjpFcXVhbCgqZGVsdGFfbWludXMsICpkZWx0YV9w
bHVzKSkgewotICAgICAgZGVsdGFfbWludXMtPlRpbWVzMTAoKTsKLSAgICAgIGRlbHRhX3BsdXMt
PkFzc2lnbkJpZ251bSgqZGVsdGFfbWludXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBkZWx0YV9t
aW51cy0+VGltZXMxMCgpOwotICAgICAgZGVsdGFfcGx1cy0+VGltZXMxMCgpOwotICAgIH0KLSAg
fQotfQotCi19ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2RvdWJsZS1jb252ZXJzaW9uL2RvdWJs
ZS1jb252ZXJzaW9uL2JpZ251bS1kdG9hLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi9iaWdudW0tZHRvYS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGI5NjE5OTJkNjcyYzE3MTNiYzE5ZGRl
NDMwOTM5ZDI4ZGZmYjUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2RvdWJsZS1jb252ZXJz
aW9uL2RvdWJsZS1jb252ZXJzaW9uL2JpZ251bS1kdG9hLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4
NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vICAgICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
Ci0vLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQKLS8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgRE9VQkxFX0NP
TlZFUlNJT05fQklHTlVNX0RUT0FfSF8KLSNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQklHTlVN
X0RUT0FfSF8KLQotI2luY2x1ZGUgInV0aWxzLmgiCi0KLW5hbWVzcGFjZSBkb3VibGVfY29udmVy
c2lvbiB7Ci0KLWVudW0gQmlnbnVtRHRvYU1vZGUgewotICAvLyBSZXR1cm4gdGhlIHNob3J0ZXN0
IGNvcnJlY3QgcmVwcmVzZW50YXRpb24uCi0gIC8vIEZvciBleGFtcGxlIHRoZSBvdXRwdXQgb2Yg
MC4yOTk5OTk5OTk5OTk5OTk5ODg4OTcgaXMgKHRoZSBsZXNzIGFjY3VyYXRlIGJ1dAotICAvLyBj
b3JyZWN0KSAwLjMuCi0gIEJJR05VTV9EVE9BX1NIT1JURVNULAotICAvLyBTYW1lIGFzIEJJR05V
TV9EVE9BX1NIT1JURVNUIGJ1dCBmb3Igc2luZ2xlLXByZWNpc2lvbiBmbG9hdHMuCi0gIEJJR05V
TV9EVE9BX1NIT1JURVNUX1NJTkdMRSwKLSAgLy8gUmV0dXJuIGEgZml4ZWQgbnVtYmVyIG9mIGRp
Z2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4KLSAgLy8gRm9yIGluc3RhbmNlIGZpeGVkKDAu
MSwgNCkgYmVjb21lcyAwLjEwMDAKLSAgLy8gSWYgdGhlIGlucHV0IG51bWJlciBpcyBiaWcsIHRo
ZSBvdXRwdXQgd2lsbCBiZSBiaWcuCi0gIEJJR05VTV9EVE9BX0ZJWEVELAotICAvLyBSZXR1cm4g
YSBmaXhlZCBudW1iZXIgb2YgZGlnaXRzLCBubyBtYXR0ZXIgd2hhdCB0aGUgZXhwb25lbnQgaXMu
Ci0gIEJJR05VTV9EVE9BX1BSRUNJU0lPTgotfTsKLQotLy8gQ29udmVydHMgdGhlIGdpdmVuIGRv
dWJsZSAndicgdG8gYXNjaWkuCi0vLyBUaGUgcmVzdWx0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBh
cyBidWZmZXIgKiAxMF4ocG9pbnQtbGVuZ3RoKS4KLS8vIFRoZSBidWZmZXIgd2lsbCBiZSBudWxs
LXRlcm1pbmF0ZWQuCi0vLwotLy8gVGhlIGlucHV0IHYgbXVzdCBiZSA+IDAgYW5kIGRpZmZlcmVu
dCBmcm9tIE5hTiwgYW5kIEluZmluaXR5LgotLy8KLS8vIFRoZSBvdXRwdXQgZGVwZW5kcyBvbiB0
aGUgZ2l2ZW4gbW9kZToKLS8vICAtIFNIT1JURVNUOiBwcm9kdWNlIHRoZSBsZWFzdCBhbW91bnQg
b2YgZGlnaXRzIGZvciB3aGljaCB0aGUgaW50ZXJuYWwKLS8vICAgaWRlbnRpdHkgcmVxdWlyZW1l
bnQgaXMgc3RpbGwgc2F0aXNmaWVkLiBJZiB0aGUgZGlnaXRzIGFyZSBwcmludGVkCi0vLyAgICh0
b2dldGhlciB3aXRoIHRoZSBjb3JyZWN0IGV4cG9uZW50KSB0aGVuIHJlYWRpbmcgdGhpcyBudW1i
ZXIgd2lsbCBnaXZlCi0vLyAgICd2JyBhZ2Fpbi4gVGhlIGJ1ZmZlciB3aWxsIGNob29zZSB0aGUg
cmVwcmVzZW50YXRpb24gdGhhdCBpcyBjbG9zZXN0IHRvCi0vLyAgICd2Jy4gSWYgdGhlcmUgYXJl
IHR3byBhdCB0aGUgc2FtZSBkaXN0YW5jZSwgdGhhbiB0aGUgbnVtYmVyIGlzIHJvdW5kIHVwLgot
Ly8gICBJbiB0aGlzIG1vZGUgdGhlICdyZXF1ZXN0ZWRfZGlnaXRzJyBwYXJhbWV0ZXIgaXMgaWdu
b3JlZC4KLS8vICAtIEZJWEVEOiBwcm9kdWNlcyBkaWdpdHMgbmVjZXNzYXJ5IHRvIHByaW50IGEg
Z2l2ZW4gbnVtYmVyIHdpdGgKLS8vICAgJ3JlcXVlc3RlZF9kaWdpdHMnIGRpZ2l0cyBhZnRlciB0
aGUgZGVjaW1hbCBwb2ludC4gVGhlIHByb2R1Y2VkIGRpZ2l0cwotLy8gICBtaWdodCBiZSB0b28g
c2hvcnQgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0byBmaWxsIHRoZSBnYXBzIHdpdGgg
JzAncy4KLS8vICAgRXhhbXBsZTogdG9GaXhlZCgwLjAwMSwgNSkgaXMgYWxsb3dlZCB0byByZXR1
cm4gYnVmZmVyPSIxIiwgcG9pbnQ9LTIuCi0vLyAgIEhhbGZ3YXkgY2FzZXMgYXJlIHJvdW5kZWQg
dXAuIFRoZSBjYWxsIHRvRml4ZWQoMC4xNSwgMikgdGh1cyByZXR1cm5zCi0vLyAgICAgYnVmZmVy
PSIyIiwgcG9pbnQ9MC4KLS8vICAgTm90ZTogdGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgYnVm
ZmVyIGhhcyBubyBtZWFuaW5nIHdydCB0aGUgc2lnbmlmaWNhbmNlCi0vLyAgIG9mIGl0cyBkaWdp
dHMuIFRoYXQgaXMsIGp1c3QgYmVjYXVzZSBpdCBjb250YWlucyAnMCdzIGRvZXMgbm90IG1lYW4g
dGhhdAotLy8gICBhbnkgb3RoZXIgZGlnaXQgd291bGQgbm90IHNhdGlzZnkgdGhlIGludGVybmFs
IGlkZW50aXR5IHJlcXVpcmVtZW50LgotLy8gIC0gUFJFQ0lTSU9OOiBwcm9kdWNlcyAncmVxdWVz
dGVkX2RpZ2l0cycgd2hlcmUgdGhlIGZpcnN0IGRpZ2l0IGlzIG5vdCAnMCcuCi0vLyAgIEV2ZW4g
dGhvdWdoIHRoZSBsZW5ndGggb2YgcHJvZHVjZWQgZGlnaXRzIHVzdWFsbHkgZXF1YWxzCi0vLyAg
ICdyZXF1ZXN0ZWRfZGlnaXRzJywgdGhlIGZ1bmN0aW9uIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGZl
d2VyIGRpZ2l0cywgaW4KLS8vICAgd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0byBmaWxsIHRo
ZSBtaXNzaW5nIGRpZ2l0cyB3aXRoICcwJ3MuCi0vLyAgIEhhbGZ3YXkgY2FzZXMgYXJlIGFnYWlu
IHJvdW5kZWQgdXAuCi0vLyAnQmlnbnVtRHRvYScgZXhwZWN0cyB0aGUgZ2l2ZW4gYnVmZmVyIHRv
IGJlIGJpZyBlbm91Z2ggdG8gaG9sZCBhbGwgZGlnaXRzCi0vLyBhbmQgYSB0ZXJtaW5hdGluZyBu
dWxsLWNoYXJhY3Rlci4KLXZvaWQgQmlnbnVtRHRvYShkb3VibGUgdiwgQmlnbnVtRHRvYU1vZGUg
bW9kZSwgaW50IHJlcXVlc3RlZF9kaWdpdHMsCi0gICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+
IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGludCogcG9pbnQpOwotCi19ICAvLyBuYW1lc3BhY2UgZG91
YmxlX2NvbnZlcnNpb24KLQotI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fRFRP
QV9IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZG91
YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNpb24vYmlnbnVtLmNjIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNp
b24vYmlnbnVtLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODkyZGU4ZjJhM2E3
MDEwMmFhOGY1YjcyNGRiOGY2NjQ5OTJlZTI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Rv
dWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uL2JpZ251bS5jYworKysgL2Rldi9udWxs
CkBAIC0xLDc2NiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
ICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0vLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLS8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRl
ICJiaWdudW0uaCIKLSNpbmNsdWRlICJ1dGlscy5oIgotCi1uYW1lc3BhY2UgZG91YmxlX2NvbnZl
cnNpb24gewotCi1CaWdudW06OkJpZ251bSgpCi0gICAgOiBiaWdpdHNfKGJpZ2l0c19idWZmZXJf
LCBrQmlnaXRDYXBhY2l0eSksIHVzZWRfZGlnaXRzXygwKSwgZXhwb25lbnRfKDApIHsKLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBrQmlnaXRDYXBhY2l0eTsgKytpKSB7Ci0gICAgYmlnaXRzX1tpXSA9
IDA7Ci0gIH0KLX0KLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTPgotc3RhdGljIGludCBCaXRTaXpl
KFMgdmFsdWUpIHsKLSAgKHZvaWQpIHZhbHVlOyAgLy8gTWFyayB2YXJpYWJsZSBhcyB1c2VkLgot
ICByZXR1cm4gOCAqIHNpemVvZih2YWx1ZSk7Ci19Ci0KLS8vIEd1YXJhbnRlZWQgdG8gbGllIGlu
IG9uZSBCaWdpdC4KLXZvaWQgQmlnbnVtOjpBc3NpZ25VSW50MTYodWludDE2X3QgdmFsdWUpIHsK
LSAgQVNTRVJUKGtCaWdpdFNpemUgPj0gQml0U2l6ZSh2YWx1ZSkpOwotICBaZXJvKCk7Ci0gIGlm
ICh2YWx1ZSA9PSAwKSByZXR1cm47Ci0KLSAgRW5zdXJlQ2FwYWNpdHkoMSk7Ci0gIGJpZ2l0c19b
MF0gPSB2YWx1ZTsKLSAgdXNlZF9kaWdpdHNfID0gMTsKLX0KLQotCi12b2lkIEJpZ251bTo6QXNz
aWduVUludDY0KHVpbnQ2NF90IHZhbHVlKSB7Ci0gIGNvbnN0IGludCBrVUludDY0U2l6ZSA9IDY0
OwotCi0gIFplcm8oKTsKLSAgaWYgKHZhbHVlID09IDApIHJldHVybjsKLQotICBpbnQgbmVlZGVk
X2JpZ2l0cyA9IGtVSW50NjRTaXplIC8ga0JpZ2l0U2l6ZSArIDE7Ci0gIEVuc3VyZUNhcGFjaXR5
KG5lZWRlZF9iaWdpdHMpOwotICBmb3IgKGludCBpID0gMDsgaSA8IG5lZWRlZF9iaWdpdHM7ICsr
aSkgewotICAgIGJpZ2l0c19baV0gPSB2YWx1ZSAmIGtCaWdpdE1hc2s7Ci0gICAgdmFsdWUgPSB2
YWx1ZSA+PiBrQmlnaXRTaXplOwotICB9Ci0gIHVzZWRfZGlnaXRzXyA9IG5lZWRlZF9iaWdpdHM7
Ci0gIENsYW1wKCk7Ci19Ci0KLQotdm9pZCBCaWdudW06OkFzc2lnbkJpZ251bShjb25zdCBCaWdu
dW0mIG90aGVyKSB7Ci0gIGV4cG9uZW50XyA9IG90aGVyLmV4cG9uZW50XzsKLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBvdGhlci51c2VkX2RpZ2l0c187ICsraSkgewotICAgIGJpZ2l0c19baV0gPSBv
dGhlci5iaWdpdHNfW2ldOwotICB9Ci0gIC8vIENsZWFyIHRoZSBleGNlc3MgZGlnaXRzIChpZiB0
aGVyZSB3ZXJlIGFueSkuCi0gIGZvciAoaW50IGkgPSBvdGhlci51c2VkX2RpZ2l0c187IGkgPCB1
c2VkX2RpZ2l0c187ICsraSkgewotICAgIGJpZ2l0c19baV0gPSAwOwotICB9Ci0gIHVzZWRfZGln
aXRzXyA9IG90aGVyLnVzZWRfZGlnaXRzXzsKLX0KLQotCi1zdGF0aWMgdWludDY0X3QgUmVhZFVJ
bnQ2NChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlnaXRzX3RvX3Jl
YWQpIHsKLSAgdWludDY0X3QgcmVzdWx0ID0gMDsKLSAgZm9yIChpbnQgaSA9IGZyb207IGkgPCBm
cm9tICsgZGlnaXRzX3RvX3JlYWQ7ICsraSkgewotICAgIGludCBkaWdpdCA9IGJ1ZmZlcltpXSAt
ICcwJzsKLSAgICBBU1NFUlQoMCA8PSBkaWdpdCAmJiBkaWdpdCA8PSA5KTsKLSAgICByZXN1bHQg
PSByZXN1bHQgKiAxMCArIGRpZ2l0OwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotdm9p
ZCBCaWdudW06OkFzc2lnbkRlY2ltYWxTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+IHZhbHVlKSB7
Ci0gIC8vIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNiA+IDEwXjE5Ci0gIGNvbnN0IGludCBr
TWF4VWludDY0RGVjaW1hbERpZ2l0cyA9IDE5OwotICBaZXJvKCk7Ci0gIGludCBsZW5ndGggPSB2
YWx1ZS5sZW5ndGgoKTsKLSAgdW5zaWduZWQgaW50IHBvcyA9IDA7Ci0gIC8vIExldCdzIGp1c3Qg
c2F5IHRoYXQgZWFjaCBkaWdpdCBuZWVkcyA0IGJpdHMuCi0gIHdoaWxlIChsZW5ndGggPj0ga01h
eFVpbnQ2NERlY2ltYWxEaWdpdHMpIHsKLSAgICB1aW50NjRfdCBkaWdpdHMgPSBSZWFkVUludDY0
KHZhbHVlLCBwb3MsIGtNYXhVaW50NjREZWNpbWFsRGlnaXRzKTsKLSAgICBwb3MgKz0ga01heFVp
bnQ2NERlY2ltYWxEaWdpdHM7Ci0gICAgbGVuZ3RoIC09IGtNYXhVaW50NjREZWNpbWFsRGlnaXRz
OwotICAgIE11bHRpcGx5QnlQb3dlck9mVGVuKGtNYXhVaW50NjREZWNpbWFsRGlnaXRzKTsKLSAg
ICBBZGRVSW50NjQoZGlnaXRzKTsKLSAgfQotICB1aW50NjRfdCBkaWdpdHMgPSBSZWFkVUludDY0
KHZhbHVlLCBwb3MsIGxlbmd0aCk7Ci0gIE11bHRpcGx5QnlQb3dlck9mVGVuKGxlbmd0aCk7Ci0g
IEFkZFVJbnQ2NChkaWdpdHMpOwotICBDbGFtcCgpOwotfQotCi0KLXN0YXRpYyBpbnQgSGV4Q2hh
clZhbHVlKGNoYXIgYykgewotICBpZiAoJzAnIDw9IGMgJiYgYyA8PSAnOScpIHJldHVybiBjIC0g
JzAnOwotICBpZiAoJ2EnIDw9IGMgJiYgYyA8PSAnZicpIHJldHVybiAxMCArIGMgLSAnYSc7Ci0g
IEFTU0VSVCgnQScgPD0gYyAmJiBjIDw9ICdGJyk7Ci0gIHJldHVybiAxMCArIGMgLSAnQSc7Ci19
Ci0KLQotdm9pZCBCaWdudW06OkFzc2lnbkhleFN0cmluZyhWZWN0b3I8Y29uc3QgY2hhcj4gdmFs
dWUpIHsKLSAgWmVybygpOwotICBpbnQgbGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7Ci0KLSAgaW50
IG5lZWRlZF9iaWdpdHMgPSBsZW5ndGggKiA0IC8ga0JpZ2l0U2l6ZSArIDE7Ci0gIEVuc3VyZUNh
cGFjaXR5KG5lZWRlZF9iaWdpdHMpOwotICBpbnQgc3RyaW5nX2luZGV4ID0gbGVuZ3RoIC0gMTsK
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZWVkZWRfYmlnaXRzIC0gMTsgKytpKSB7Ci0gICAgLy8g
VGhlc2UgYmlnaXRzIGFyZSBndWFyYW50ZWVkIHRvIGJlICJmdWxsIi4KLSAgICBDaHVuayBjdXJy
ZW50X2JpZ2l0ID0gMDsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGtCaWdpdFNpemUgLyA0OyBq
KyspIHsKLSAgICAgIGN1cnJlbnRfYmlnaXQgKz0gSGV4Q2hhclZhbHVlKHZhbHVlW3N0cmluZ19p
bmRleC0tXSkgPDwgKGogKiA0KTsKLSAgICB9Ci0gICAgYmlnaXRzX1tpXSA9IGN1cnJlbnRfYmln
aXQ7Ci0gIH0KLSAgdXNlZF9kaWdpdHNfID0gbmVlZGVkX2JpZ2l0cyAtIDE7Ci0KLSAgQ2h1bmsg
bW9zdF9zaWduaWZpY2FudF9iaWdpdCA9IDA7ICAvLyBDb3VsZCBiZSA9IDA7Ci0gIGZvciAoaW50
IGogPSAwOyBqIDw9IHN0cmluZ19pbmRleDsgKytqKSB7Ci0gICAgbW9zdF9zaWduaWZpY2FudF9i
aWdpdCA8PD0gNDsKLSAgICBtb3N0X3NpZ25pZmljYW50X2JpZ2l0ICs9IEhleENoYXJWYWx1ZSh2
YWx1ZVtqXSk7Ci0gIH0KLSAgaWYgKG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgIT0gMCkgewotICAg
IGJpZ2l0c19bdXNlZF9kaWdpdHNfXSA9IG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQ7Ci0gICAgdXNl
ZF9kaWdpdHNfKys7Ci0gIH0KLSAgQ2xhbXAoKTsKLX0KLQotCi12b2lkIEJpZ251bTo6QWRkVUlu
dDY0KHVpbnQ2NF90IG9wZXJhbmQpIHsKLSAgaWYgKG9wZXJhbmQgPT0gMCkgcmV0dXJuOwotICBC
aWdudW0gb3RoZXI7Ci0gIG90aGVyLkFzc2lnblVJbnQ2NChvcGVyYW5kKTsKLSAgQWRkQmlnbnVt
KG90aGVyKTsKLX0KLQotCi12b2lkIEJpZ251bTo6QWRkQmlnbnVtKGNvbnN0IEJpZ251bSYgb3Ro
ZXIpIHsKLSAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKLSAgQVNTRVJUKG90aGVyLklzQ2xhbXBlZCgp
KTsKLQotICAvLyBJZiB0aGlzIGhhcyBhIGdyZWF0ZXIgZXhwb25lbnQgdGhhbiBvdGhlciBhcHBl
bmQgemVyby1iaWdpdHMgdG8gdGhpcy4KLSAgLy8gQWZ0ZXIgdGhpcyBjYWxsIGV4cG9uZW50XyA8
PSBvdGhlci5leHBvbmVudF8uCi0gIEFsaWduKG90aGVyKTsKLQotICAvLyBUaGVyZSBhcmUgdHdv
IHBvc3NpYmlsaXRpZXM6Ci0gIC8vICAgYWFhYWFhYWFhYWEgMDAwMCAgKHdoZXJlIHRoZSAwcyBy
ZXByZXNlbnQgYSdzIGV4cG9uZW50KQotICAvLyAgICAgYmJiYmIgMDAwMDAwMDAKLSAgLy8gICAt
LS0tLS0tLS0tLS0tLS0tCi0gIC8vICAgY2NjY2NjY2NjY2MgMDAwMAotICAvLyBvcgotICAvLyAg
ICBhYWFhYWFhYWFhIDAwMDAKLSAgLy8gIGJiYmJiYmJiYiAwMDAwMDAwCi0gIC8vICAtLS0tLS0t
LS0tLS0tLS0tLQotICAvLyAgY2NjY2NjY2NjY2NjIDAwMDAKLSAgLy8gSW4gYm90aCBjYXNlcyB3
ZSBtaWdodCBuZWVkIGEgY2FycnkgYmlnaXQuCi0KLSAgRW5zdXJlQ2FwYWNpdHkoMSArIE1heChC
aWdpdExlbmd0aCgpLCBvdGhlci5CaWdpdExlbmd0aCgpKSAtIGV4cG9uZW50Xyk7Ci0gIENodW5r
IGNhcnJ5ID0gMDsKLSAgaW50IGJpZ2l0X3BvcyA9IG90aGVyLmV4cG9uZW50XyAtIGV4cG9uZW50
XzsKLSAgQVNTRVJUKGJpZ2l0X3BvcyA+PSAwKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhl
ci51c2VkX2RpZ2l0c187ICsraSkgewotICAgIENodW5rIHN1bSA9IGJpZ2l0c19bYmlnaXRfcG9z
XSArIG90aGVyLmJpZ2l0c19baV0gKyBjYXJyeTsKLSAgICBiaWdpdHNfW2JpZ2l0X3Bvc10gPSBz
dW0gJiBrQmlnaXRNYXNrOwotICAgIGNhcnJ5ID0gc3VtID4+IGtCaWdpdFNpemU7Ci0gICAgYmln
aXRfcG9zKys7Ci0gIH0KLQotICB3aGlsZSAoY2FycnkgIT0gMCkgewotICAgIENodW5rIHN1bSA9
IGJpZ2l0c19bYmlnaXRfcG9zXSArIGNhcnJ5OwotICAgIGJpZ2l0c19bYmlnaXRfcG9zXSA9IHN1
bSAmIGtCaWdpdE1hc2s7Ci0gICAgY2FycnkgPSBzdW0gPj4ga0JpZ2l0U2l6ZTsKLSAgICBiaWdp
dF9wb3MrKzsKLSAgfQotICB1c2VkX2RpZ2l0c18gPSBNYXgoYmlnaXRfcG9zLCB1c2VkX2RpZ2l0
c18pOwotICBBU1NFUlQoSXNDbGFtcGVkKCkpOwotfQotCi0KLXZvaWQgQmlnbnVtOjpTdWJ0cmFj
dEJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKSB7Ci0gIEFTU0VSVChJc0NsYW1wZWQoKSk7Ci0g
IEFTU0VSVChvdGhlci5Jc0NsYW1wZWQoKSk7Ci0gIC8vIFdlIHJlcXVpcmUgdGhpcyB0byBiZSBi
aWdnZXIgdGhhbiBvdGhlci4KLSAgQVNTRVJUKExlc3NFcXVhbChvdGhlciwgKnRoaXMpKTsKLQot
ICBBbGlnbihvdGhlcik7Ci0KLSAgaW50IG9mZnNldCA9IG90aGVyLmV4cG9uZW50XyAtIGV4cG9u
ZW50XzsKLSAgQ2h1bmsgYm9ycm93ID0gMDsKLSAgaW50IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCBv
dGhlci51c2VkX2RpZ2l0c187ICsraSkgewotICAgIEFTU0VSVCgoYm9ycm93ID09IDApIHx8IChi
b3Jyb3cgPT0gMSkpOwotICAgIENodW5rIGRpZmZlcmVuY2UgPSBiaWdpdHNfW2kgKyBvZmZzZXRd
IC0gb3RoZXIuYmlnaXRzX1tpXSAtIGJvcnJvdzsKLSAgICBiaWdpdHNfW2kgKyBvZmZzZXRdID0g
ZGlmZmVyZW5jZSAmIGtCaWdpdE1hc2s7Ci0gICAgYm9ycm93ID0gZGlmZmVyZW5jZSA+PiAoa0No
dW5rU2l6ZSAtIDEpOwotICB9Ci0gIHdoaWxlIChib3Jyb3cgIT0gMCkgewotICAgIENodW5rIGRp
ZmZlcmVuY2UgPSBiaWdpdHNfW2kgKyBvZmZzZXRdIC0gYm9ycm93OwotICAgIGJpZ2l0c19baSAr
IG9mZnNldF0gPSBkaWZmZXJlbmNlICYga0JpZ2l0TWFzazsKLSAgICBib3Jyb3cgPSBkaWZmZXJl
bmNlID4+IChrQ2h1bmtTaXplIC0gMSk7Ci0gICAgKytpOwotICB9Ci0gIENsYW1wKCk7Ci19Ci0K
LQotdm9pZCBCaWdudW06OlNoaWZ0TGVmdChpbnQgc2hpZnRfYW1vdW50KSB7Ci0gIGlmICh1c2Vk
X2RpZ2l0c18gPT0gMCkgcmV0dXJuOwotICBleHBvbmVudF8gKz0gc2hpZnRfYW1vdW50IC8ga0Jp
Z2l0U2l6ZTsKLSAgaW50IGxvY2FsX3NoaWZ0ID0gc2hpZnRfYW1vdW50ICUga0JpZ2l0U2l6ZTsK
LSAgRW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgMSk7Ci0gIEJpZ2l0c1NoaWZ0TGVmdChs
b2NhbF9zaGlmdCk7Ci19Ci0KLQotdm9pZCBCaWdudW06Ok11bHRpcGx5QnlVSW50MzIodWludDMy
X3QgZmFjdG9yKSB7Ci0gIGlmIChmYWN0b3IgPT0gMSkgcmV0dXJuOwotICBpZiAoZmFjdG9yID09
IDApIHsKLSAgICBaZXJvKCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGlmICh1c2VkX2RpZ2l0c18g
PT0gMCkgcmV0dXJuOwotCi0gIC8vIFRoZSBwcm9kdWN0IG9mIGEgYmlnaXQgd2l0aCB0aGUgZmFj
dG9yIGlzIG9mIHNpemUga0JpZ2l0U2l6ZSArIDMyLgotICAvLyBBc3NlcnQgdGhhdCB0aGlzIG51
bWJlciArIDEgKGZvciB0aGUgY2FycnkpIGZpdHMgaW50byBkb3VibGUgY2h1bmsuCi0gIEFTU0VS
VChrRG91YmxlQ2h1bmtTaXplID49IGtCaWdpdFNpemUgKyAzMiArIDEpOwotICBEb3VibGVDaHVu
ayBjYXJyeSA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsK
LSAgICBEb3VibGVDaHVuayBwcm9kdWN0ID0gc3RhdGljX2Nhc3Q8RG91YmxlQ2h1bms+KGZhY3Rv
cikgKiBiaWdpdHNfW2ldICsgY2Fycnk7Ci0gICAgYmlnaXRzX1tpXSA9IHN0YXRpY19jYXN0PENo
dW5rPihwcm9kdWN0ICYga0JpZ2l0TWFzayk7Ci0gICAgY2FycnkgPSAocHJvZHVjdCA+PiBrQmln
aXRTaXplKTsKLSAgfQotICB3aGlsZSAoY2FycnkgIT0gMCkgewotICAgIEVuc3VyZUNhcGFjaXR5
KHVzZWRfZGlnaXRzXyArIDEpOwotICAgIGJpZ2l0c19bdXNlZF9kaWdpdHNfXSA9IGNhcnJ5ICYg
a0JpZ2l0TWFzazsKLSAgICB1c2VkX2RpZ2l0c18rKzsKLSAgICBjYXJyeSA+Pj0ga0JpZ2l0U2l6
ZTsKLSAgfQotfQotCi0KLXZvaWQgQmlnbnVtOjpNdWx0aXBseUJ5VUludDY0KHVpbnQ2NF90IGZh
Y3RvcikgewotICBpZiAoZmFjdG9yID09IDEpIHJldHVybjsKLSAgaWYgKGZhY3RvciA9PSAwKSB7
Ci0gICAgWmVybygpOwotICAgIHJldHVybjsKLSAgfQotICBBU1NFUlQoa0JpZ2l0U2l6ZSA8IDMy
KTsKLSAgdWludDY0X3QgY2FycnkgPSAwOwotICB1aW50NjRfdCBsb3cgPSBmYWN0b3IgJiAweEZG
RkZGRkZGOwotICB1aW50NjRfdCBoaWdoID0gZmFjdG9yID4+IDMyOwotICBmb3IgKGludCBpID0g
MDsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7Ci0gICAgdWludDY0X3QgcHJvZHVjdF9sb3cgPSBs
b3cgKiBiaWdpdHNfW2ldOwotICAgIHVpbnQ2NF90IHByb2R1Y3RfaGlnaCA9IGhpZ2ggKiBiaWdp
dHNfW2ldOwotICAgIHVpbnQ2NF90IHRtcCA9IChjYXJyeSAmIGtCaWdpdE1hc2spICsgcHJvZHVj
dF9sb3c7Ci0gICAgYmlnaXRzX1tpXSA9IHRtcCAmIGtCaWdpdE1hc2s7Ci0gICAgY2FycnkgPSAo
Y2FycnkgPj4ga0JpZ2l0U2l6ZSkgKyAodG1wID4+IGtCaWdpdFNpemUpICsKLSAgICAgICAgKHBy
b2R1Y3RfaGlnaCA8PCAoMzIgLSBrQmlnaXRTaXplKSk7Ci0gIH0KLSAgd2hpbGUgKGNhcnJ5ICE9
IDApIHsKLSAgICBFbnN1cmVDYXBhY2l0eSh1c2VkX2RpZ2l0c18gKyAxKTsKLSAgICBiaWdpdHNf
W3VzZWRfZGlnaXRzX10gPSBjYXJyeSAmIGtCaWdpdE1hc2s7Ci0gICAgdXNlZF9kaWdpdHNfKys7
Ci0gICAgY2FycnkgPj49IGtCaWdpdFNpemU7Ci0gIH0KLX0KLQotCi12b2lkIEJpZ251bTo6TXVs
dGlwbHlCeVBvd2VyT2ZUZW4oaW50IGV4cG9uZW50KSB7Ci0gIGNvbnN0IHVpbnQ2NF90IGtGaXZl
MjcgPSBVSU5UNjRfMlBBUlRfQygweDY3NjVjNzkzLCBmYTEwMDc5ZCk7Ci0gIGNvbnN0IHVpbnQx
Nl90IGtGaXZlMSA9IDU7Ci0gIGNvbnN0IHVpbnQxNl90IGtGaXZlMiA9IGtGaXZlMSAqIDU7Ci0g
IGNvbnN0IHVpbnQxNl90IGtGaXZlMyA9IGtGaXZlMiAqIDU7Ci0gIGNvbnN0IHVpbnQxNl90IGtG
aXZlNCA9IGtGaXZlMyAqIDU7Ci0gIGNvbnN0IHVpbnQxNl90IGtGaXZlNSA9IGtGaXZlNCAqIDU7
Ci0gIGNvbnN0IHVpbnQxNl90IGtGaXZlNiA9IGtGaXZlNSAqIDU7Ci0gIGNvbnN0IHVpbnQzMl90
IGtGaXZlNyA9IGtGaXZlNiAqIDU7Ci0gIGNvbnN0IHVpbnQzMl90IGtGaXZlOCA9IGtGaXZlNyAq
IDU7Ci0gIGNvbnN0IHVpbnQzMl90IGtGaXZlOSA9IGtGaXZlOCAqIDU7Ci0gIGNvbnN0IHVpbnQz
Ml90IGtGaXZlMTAgPSBrRml2ZTkgKiA1OwotICBjb25zdCB1aW50MzJfdCBrRml2ZTExID0ga0Zp
dmUxMCAqIDU7Ci0gIGNvbnN0IHVpbnQzMl90IGtGaXZlMTIgPSBrRml2ZTExICogNTsKLSAgY29u
c3QgdWludDMyX3Qga0ZpdmUxMyA9IGtGaXZlMTIgKiA1OwotICBjb25zdCB1aW50MzJfdCBrRml2
ZTFfdG9fMTJbXSA9Ci0gICAgICB7IGtGaXZlMSwga0ZpdmUyLCBrRml2ZTMsIGtGaXZlNCwga0Zp
dmU1LCBrRml2ZTYsCi0gICAgICAgIGtGaXZlNywga0ZpdmU4LCBrRml2ZTksIGtGaXZlMTAsIGtG
aXZlMTEsIGtGaXZlMTIgfTsKLQotICBBU1NFUlQoZXhwb25lbnQgPj0gMCk7Ci0gIGlmIChleHBv
bmVudCA9PSAwKSByZXR1cm47Ci0gIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgcmV0dXJuOwotCi0g
IC8vIFdlIHNoaWZ0IGJ5IGV4cG9uZW50IGF0IHRoZSBlbmQganVzdCBiZWZvcmUgcmV0dXJuaW5n
LgotICBpbnQgcmVtYWluaW5nX2V4cG9uZW50ID0gZXhwb25lbnQ7Ci0gIHdoaWxlIChyZW1haW5p
bmdfZXhwb25lbnQgPj0gMjcpIHsKLSAgICBNdWx0aXBseUJ5VUludDY0KGtGaXZlMjcpOwotICAg
IHJlbWFpbmluZ19leHBvbmVudCAtPSAyNzsKLSAgfQotICB3aGlsZSAocmVtYWluaW5nX2V4cG9u
ZW50ID49IDEzKSB7Ci0gICAgTXVsdGlwbHlCeVVJbnQzMihrRml2ZTEzKTsKLSAgICByZW1haW5p
bmdfZXhwb25lbnQgLT0gMTM7Ci0gIH0KLSAgaWYgKHJlbWFpbmluZ19leHBvbmVudCA+IDApIHsK
LSAgICBNdWx0aXBseUJ5VUludDMyKGtGaXZlMV90b18xMltyZW1haW5pbmdfZXhwb25lbnQgLSAx
XSk7Ci0gIH0KLSAgU2hpZnRMZWZ0KGV4cG9uZW50KTsKLX0KLQotCi12b2lkIEJpZ251bTo6U3F1
YXJlKCkgewotICBBU1NFUlQoSXNDbGFtcGVkKCkpOwotICBpbnQgcHJvZHVjdF9sZW5ndGggPSAy
ICogdXNlZF9kaWdpdHNfOwotICBFbnN1cmVDYXBhY2l0eShwcm9kdWN0X2xlbmd0aCk7Ci0KLSAg
Ly8gQ29tYmEgbXVsdGlwbGljYXRpb246IGNvbXB1dGUgZWFjaCBjb2x1bW4gc2VwYXJhdGVseS4K
LSAgLy8gRXhhbXBsZTogciA9IGEyYTFhMCAqIGIyYjFiMC4KLSAgLy8gICAgciA9ICAxICAgICog
YTBiMCArCi0gIC8vICAgICAgICAxMCAgICAqIChhMWIwICsgYTBiMSkgKwotICAvLyAgICAgICAg
MTAwICAgKiAoYTJiMCArIGExYjEgKyBhMGIyKSArCi0gIC8vICAgICAgICAxMDAwICAqIChhMmIx
ICsgYTFiMikgKwotICAvLyAgICAgICAgMTAwMDAgKiBhMmIyCi0gIC8vCi0gIC8vIEluIHRoZSB3
b3JzdCBjYXNlIHdlIGhhdmUgdG8gYWNjdW11bGF0ZSBuYi1kaWdpdHMgcHJvZHVjdHMgb2YgZGln
aXQqZGlnaXQuCi0gIC8vCi0gIC8vIEFzc2VydCB0aGF0IHRoZSBhZGRpdGlvbmFsIG51bWJlciBv
ZiBiaXRzIGluIGEgRG91YmxlQ2h1bmsgYXJlIGVub3VnaCB0bwotICAvLyBzdW0gdXAgdXNlZF9k
aWdpdHMgb2YgQmlnaXQqQmlnaXQuCi0gIGlmICgoMSA8PCAoMiAqIChrQ2h1bmtTaXplIC0ga0Jp
Z2l0U2l6ZSkpKSA8PSB1c2VkX2RpZ2l0c18pIHsKLSAgICBVTklNUExFTUVOVEVEKCk7Ci0gIH0K
LSAgRG91YmxlQ2h1bmsgYWNjdW11bGF0b3IgPSAwOwotICAvLyBGaXJzdCBzaGlmdCB0aGUgZGln
aXRzIHNvIHdlIGRvbid0IG92ZXJ3cml0ZSB0aGVtLgotICBpbnQgY29weV9vZmZzZXQgPSB1c2Vk
X2RpZ2l0c187Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKLSAg
ICBiaWdpdHNfW2NvcHlfb2Zmc2V0ICsgaV0gPSBiaWdpdHNfW2ldOwotICB9Ci0gIC8vIFdlIGhh
dmUgdHdvIGxvb3BzIHRvIGF2b2lkIHNvbWUgJ2lmJ3MgaW4gdGhlIGxvb3AuCi0gIGZvciAoaW50
IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKLSAgICAvLyBQcm9jZXNzIHRlbXBvcmFy
eSBkaWdpdCBpIHdpdGggcG93ZXIgaS4KLSAgICAvLyBUaGUgc3VtIG9mIHRoZSB0d28gaW5kaWNl
cyBtdXN0IGJlIGVxdWFsIHRvIGkuCi0gICAgaW50IGJpZ2l0X2luZGV4MSA9IGk7Ci0gICAgaW50
IGJpZ2l0X2luZGV4MiA9IDA7Ci0gICAgLy8gU3VtIGFsbCBvZiB0aGUgc3ViLXByb2R1Y3RzLgot
ICAgIHdoaWxlIChiaWdpdF9pbmRleDEgPj0gMCkgewotICAgICAgQ2h1bmsgY2h1bmsxID0gYmln
aXRzX1tjb3B5X29mZnNldCArIGJpZ2l0X2luZGV4MV07Ci0gICAgICBDaHVuayBjaHVuazIgPSBi
aWdpdHNfW2NvcHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgyXTsKLSAgICAgIGFjY3VtdWxhdG9yICs9
IHN0YXRpY19jYXN0PERvdWJsZUNodW5rPihjaHVuazEpICogY2h1bmsyOwotICAgICAgYmlnaXRf
aW5kZXgxLS07Ci0gICAgICBiaWdpdF9pbmRleDIrKzsKLSAgICB9Ci0gICAgYmlnaXRzX1tpXSA9
IHN0YXRpY19jYXN0PENodW5rPihhY2N1bXVsYXRvcikgJiBrQmlnaXRNYXNrOwotICAgIGFjY3Vt
dWxhdG9yID4+PSBrQmlnaXRTaXplOwotICB9Ci0gIGZvciAoaW50IGkgPSB1c2VkX2RpZ2l0c187
IGkgPCBwcm9kdWN0X2xlbmd0aDsgKytpKSB7Ci0gICAgaW50IGJpZ2l0X2luZGV4MSA9IHVzZWRf
ZGlnaXRzXyAtIDE7Ci0gICAgaW50IGJpZ2l0X2luZGV4MiA9IGkgLSBiaWdpdF9pbmRleDE7Ci0g
ICAgLy8gSW52YXJpYW50OiBzdW0gb2YgYm90aCBpbmRpY2VzIGlzIGFnYWluIGVxdWFsIHRvIGku
Ci0gICAgLy8gSW5uZXIgbG9vcCBydW5zIDAgdGltZXMgb24gbGFzdCBpdGVyYXRpb24sIGVtcHR5
aW5nIGFjY3VtdWxhdG9yLgotICAgIHdoaWxlIChiaWdpdF9pbmRleDIgPCB1c2VkX2RpZ2l0c18p
IHsKLSAgICAgIENodW5rIGNodW5rMSA9IGJpZ2l0c19bY29weV9vZmZzZXQgKyBiaWdpdF9pbmRl
eDFdOwotICAgICAgQ2h1bmsgY2h1bmsyID0gYmlnaXRzX1tjb3B5X29mZnNldCArIGJpZ2l0X2lu
ZGV4Ml07Ci0gICAgICBhY2N1bXVsYXRvciArPSBzdGF0aWNfY2FzdDxEb3VibGVDaHVuaz4oY2h1
bmsxKSAqIGNodW5rMjsKLSAgICAgIGJpZ2l0X2luZGV4MS0tOwotICAgICAgYmlnaXRfaW5kZXgy
Kys7Ci0gICAgfQotICAgIC8vIFRoZSBvdmVyd3JpdHRlbiBiaWdpdHNfW2ldIHdpbGwgbmV2ZXIg
YmUgcmVhZCBpbiBmdXJ0aGVyIGxvb3AgaXRlcmF0aW9ucywKLSAgICAvLyBiZWNhdXNlIGJpZ2l0
X2luZGV4MSBhbmQgYmlnaXRfaW5kZXgyIGFyZSBhbHdheXMgZ3JlYXRlcgotICAgIC8vIHRoYW4g
aSAtIHVzZWRfZGlnaXRzXy4KLSAgICBiaWdpdHNfW2ldID0gc3RhdGljX2Nhc3Q8Q2h1bms+KGFj
Y3VtdWxhdG9yKSAmIGtCaWdpdE1hc2s7Ci0gICAgYWNjdW11bGF0b3IgPj49IGtCaWdpdFNpemU7
Ci0gIH0KLSAgLy8gU2luY2UgdGhlIHJlc3VsdCB3YXMgZ3VhcmFudGVlZCB0byBsaWUgaW5zaWRl
IHRoZSBudW1iZXIgdGhlCi0gIC8vIGFjY3VtdWxhdG9yIG11c3QgYmUgMCBub3cuCi0gIEFTU0VS
VChhY2N1bXVsYXRvciA9PSAwKTsKLQotICAvLyBEb24ndCBmb3JnZXQgdG8gdXBkYXRlIHRoZSB1
c2VkX2RpZ2l0cyBhbmQgdGhlIGV4cG9uZW50LgotICB1c2VkX2RpZ2l0c18gPSBwcm9kdWN0X2xl
bmd0aDsKLSAgZXhwb25lbnRfICo9IDI7Ci0gIENsYW1wKCk7Ci19Ci0KLQotdm9pZCBCaWdudW06
OkFzc2lnblBvd2VyVUludDE2KHVpbnQxNl90IGJhc2UsIGludCBwb3dlcl9leHBvbmVudCkgewot
ICBBU1NFUlQoYmFzZSAhPSAwKTsKLSAgQVNTRVJUKHBvd2VyX2V4cG9uZW50ID49IDApOwotICBp
ZiAocG93ZXJfZXhwb25lbnQgPT0gMCkgewotICAgIEFzc2lnblVJbnQxNigxKTsKLSAgICByZXR1
cm47Ci0gIH0KLSAgWmVybygpOwotICBpbnQgc2hpZnRzID0gMDsKLSAgLy8gV2UgZXhwZWN0IGJh
c2UgdG8gYmUgaW4gcmFuZ2UgMi0zMiwgYW5kIG1vc3Qgb2Z0ZW4gdG8gYmUgMTAuCi0gIC8vIEl0
IGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZSB0byBpbXBsZW1lbnQgZGlmZmVyZW50IGFsZ29yaXRo
bXMgZm9yIGNvdW50aW5nCi0gIC8vIHRoZSBiaXRzLgotICB3aGlsZSAoKGJhc2UgJiAxKSA9PSAw
KSB7Ci0gICAgYmFzZSA+Pj0gMTsKLSAgICBzaGlmdHMrKzsKLSAgfQotICBpbnQgYml0X3NpemUg
PSAwOwotICBpbnQgdG1wX2Jhc2UgPSBiYXNlOwotICB3aGlsZSAodG1wX2Jhc2UgIT0gMCkgewot
ICAgIHRtcF9iYXNlID4+PSAxOwotICAgIGJpdF9zaXplKys7Ci0gIH0KLSAgaW50IGZpbmFsX3Np
emUgPSBiaXRfc2l6ZSAqIHBvd2VyX2V4cG9uZW50OwotICAvLyAxIGV4dHJhIGJpZ2l0IGZvciB0
aGUgc2hpZnRpbmcsIGFuZCBvbmUgZm9yIHJvdW5kZWQgZmluYWxfc2l6ZS4KLSAgRW5zdXJlQ2Fw
YWNpdHkoZmluYWxfc2l6ZSAvIGtCaWdpdFNpemUgKyAyKTsKLQotICAvLyBMZWZ0IHRvIFJpZ2h0
IGV4cG9uZW50aWF0aW9uLgotICBpbnQgbWFzayA9IDE7Ci0gIHdoaWxlIChwb3dlcl9leHBvbmVu
dCA+PSBtYXNrKSBtYXNrIDw8PSAxOwotCi0gIC8vIFRoZSBtYXNrIGlzIG5vdyBwb2ludGluZyB0
byB0aGUgYml0IGFib3ZlIHRoZSBtb3N0IHNpZ25pZmljYW50IDEtYml0IG9mCi0gIC8vIHBvd2Vy
X2V4cG9uZW50LgotICAvLyBHZXQgcmlkIG9mIGZpcnN0IDEtYml0OwotICBtYXNrID4+PSAyOwot
ICB1aW50NjRfdCB0aGlzX3ZhbHVlID0gYmFzZTsKLQotICBib29sIGRlbGF5ZWRfbXVsdGlwbGlj
aWF0aW9uID0gZmFsc2U7Ci0gIGNvbnN0IHVpbnQ2NF90IG1heF8zMmJpdHMgPSAweEZGRkZGRkZG
OwotICB3aGlsZSAobWFzayAhPSAwICYmIHRoaXNfdmFsdWUgPD0gbWF4XzMyYml0cykgewotICAg
IHRoaXNfdmFsdWUgPSB0aGlzX3ZhbHVlICogdGhpc192YWx1ZTsKLSAgICAvLyBWZXJpZnkgdGhh
dCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgaW4gdGhpc192YWx1ZSB0byBwZXJmb3JtIHRoZQotICAg
IC8vIG11bHRpcGxpY2F0aW9uLiAgVGhlIGZpcnN0IGJpdF9zaXplIGJpdHMgbXVzdCBiZSAwLgot
ICAgIGlmICgocG93ZXJfZXhwb25lbnQgJiBtYXNrKSAhPSAwKSB7Ci0gICAgICB1aW50NjRfdCBi
YXNlX2JpdHNfbWFzayA9Ci0gICAgICAgICAgfigoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8
ICg2NCAtIGJpdF9zaXplKSkgLSAxKTsKLSAgICAgIGJvb2wgaGlnaF9iaXRzX3plcm8gPSAodGhp
c192YWx1ZSAmIGJhc2VfYml0c19tYXNrKSA9PSAwOwotICAgICAgaWYgKGhpZ2hfYml0c196ZXJv
KSB7Ci0gICAgICAgIHRoaXNfdmFsdWUgKj0gYmFzZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IGRlbGF5ZWRfbXVsdGlwbGljaWF0aW9uID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgbWFz
ayA+Pj0gMTsKLSAgfQotICBBc3NpZ25VSW50NjQodGhpc192YWx1ZSk7Ci0gIGlmIChkZWxheWVk
X211bHRpcGxpY2lhdGlvbikgewotICAgIE11bHRpcGx5QnlVSW50MzIoYmFzZSk7Ci0gIH0KLQot
ICAvLyBOb3cgZG8gdGhlIHNhbWUgdGhpbmcgYXMgYSBiaWdudW0uCi0gIHdoaWxlIChtYXNrICE9
IDApIHsKLSAgICBTcXVhcmUoKTsKLSAgICBpZiAoKHBvd2VyX2V4cG9uZW50ICYgbWFzaykgIT0g
MCkgewotICAgICAgTXVsdGlwbHlCeVVJbnQzMihiYXNlKTsKLSAgICB9Ci0gICAgbWFzayA+Pj0g
MTsKLSAgfQotCi0gIC8vIEFuZCBmaW5hbGx5IGFkZCB0aGUgc2F2ZWQgc2hpZnRzLgotICBTaGlm
dExlZnQoc2hpZnRzICogcG93ZXJfZXhwb25lbnQpOwotfQotCi0KLS8vIFByZWNvbmRpdGlvbjog
dGhpcy9vdGhlciA8IDE2Yml0LgotdWludDE2X3QgQmlnbnVtOjpEaXZpZGVNb2R1bG9JbnRCaWdu
dW0oY29uc3QgQmlnbnVtJiBvdGhlcikgewotICBBU1NFUlQoSXNDbGFtcGVkKCkpOwotICBBU1NF
UlQob3RoZXIuSXNDbGFtcGVkKCkpOwotICBBU1NFUlQob3RoZXIudXNlZF9kaWdpdHNfID4gMCk7
Ci0KLSAgLy8gRWFzeSBjYXNlOiBpZiB3ZSBoYXZlIGxlc3MgZGlnaXRzIHRoYW4gdGhlIGRpdmlz
b3IgdGhhbiB0aGUgcmVzdWx0IGlzIDAuCi0gIC8vIE5vdGU6IHRoaXMgaGFuZGxlcyB0aGUgY2Fz
ZSB3aGVyZSB0aGlzID09IDAsIHRvby4KLSAgaWYgKEJpZ2l0TGVuZ3RoKCkgPCBvdGhlci5CaWdp
dExlbmd0aCgpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBBbGlnbihvdGhlcik7Ci0KLSAg
dWludDE2X3QgcmVzdWx0ID0gMDsKLQotICAvLyBTdGFydCBieSByZW1vdmluZyBtdWx0aXBsZXMg
b2YgJ290aGVyJyB1bnRpbCBib3RoIG51bWJlcnMgaGF2ZSB0aGUgc2FtZQotICAvLyBudW1iZXIg
b2YgZGlnaXRzLgotICB3aGlsZSAoQmlnaXRMZW5ndGgoKSA+IG90aGVyLkJpZ2l0TGVuZ3RoKCkp
IHsKLSAgICAvLyBUaGlzIG5haXZlIGFwcHJvYWNoIGlzIGV4dHJlbWVseSBpbmVmZmljaWVudCBp
ZiBgdGhpc2AgZGl2aWRlZCBieSBvdGhlcgotICAgIC8vIGlzIGJpZy4gVGhpcyBmdW5jdGlvbiBp
cyBpbXBsZW1lbnRlZCBmb3IgZG91YmxlVG9TdHJpbmcgd2hlcmUKLSAgICAvLyB0aGUgcmVzdWx0
IHNob3VsZCBiZSBzbWFsbCAobGVzcyB0aGFuIDEwKS4KLSAgICBBU1NFUlQob3RoZXIuYmlnaXRz
X1tvdGhlci51c2VkX2RpZ2l0c18gLSAxXSA+PSAoKDEgPDwga0JpZ2l0U2l6ZSkgLyAxNikpOwot
ICAgIEFTU0VSVChiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdIDwgMHgxMDAwMCk7Ci0gICAgLy8g
UmVtb3ZlIHRoZSBtdWx0aXBsZXMgb2YgdGhlIGZpcnN0IGRpZ2l0LgotICAgIC8vIEV4YW1wbGUg
dGhpcyA9IDIzIGFuZCBvdGhlciBlcXVhbHMgOS4gLT4gUmVtb3ZlIDIgbXVsdGlwbGVzLgotICAg
IHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAx
XSk7Ci0gICAgU3VidHJhY3RUaW1lcyhvdGhlciwgYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSk7
Ci0gIH0KLQotICBBU1NFUlQoQmlnaXRMZW5ndGgoKSA9PSBvdGhlci5CaWdpdExlbmd0aCgpKTsK
LQotICAvLyBCb3RoIGJpZ251bXMgYXJlIGF0IHRoZSBzYW1lIGxlbmd0aCBub3cuCi0gIC8vIFNp
bmNlIG90aGVyIGhhcyBtb3JlIHRoYW4gMCBkaWdpdHMgd2Uga25vdyB0aGF0IHRoZSBhY2Nlc3Mg
dG8KLSAgLy8gYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSBpcyBzYWZlLgotICBDaHVuayB0aGlz
X2JpZ2l0ID0gYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXTsKLSAgQ2h1bmsgb3RoZXJfYmlnaXQg
PSBvdGhlci5iaWdpdHNfW290aGVyLnVzZWRfZGlnaXRzXyAtIDFdOwotCi0gIGlmIChvdGhlci51
c2VkX2RpZ2l0c18gPT0gMSkgewotICAgIC8vIFNob3J0Y3V0IGZvciBlYXN5IChhbmQgY29tbW9u
KSBjYXNlLgotICAgIGludCBxdW90aWVudCA9IHRoaXNfYmlnaXQgLyBvdGhlcl9iaWdpdDsKLSAg
ICBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdID0gdGhpc19iaWdpdCAtIG90aGVyX2JpZ2l0ICog
cXVvdGllbnQ7Ci0gICAgQVNTRVJUKHF1b3RpZW50IDwgMHgxMDAwMCk7Ci0gICAgcmVzdWx0ICs9
IHN0YXRpY19jYXN0PHVpbnQxNl90PihxdW90aWVudCk7Ci0gICAgQ2xhbXAoKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotICB9Ci0KLSAgaW50IGRpdmlzaW9uX2VzdGltYXRlID0gdGhpc19iaWdpdCAv
IChvdGhlcl9iaWdpdCArIDEpOwotICBBU1NFUlQoZGl2aXNpb25fZXN0aW1hdGUgPCAweDEwMDAw
KTsKLSAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVpbnQxNl90PihkaXZpc2lvbl9lc3RpbWF0ZSk7
Ci0gIFN1YnRyYWN0VGltZXMob3RoZXIsIGRpdmlzaW9uX2VzdGltYXRlKTsKLQotICBpZiAob3Ro
ZXJfYmlnaXQgKiAoZGl2aXNpb25fZXN0aW1hdGUgKyAxKSA+IHRoaXNfYmlnaXQpIHsKLSAgICAv
LyBObyBuZWVkIHRvIGV2ZW4gdHJ5IHRvIHN1YnRyYWN0LiBFdmVuIGlmIG90aGVyJ3MgcmVtYWlu
aW5nIGRpZ2l0cyB3ZXJlIDAKLSAgICAvLyBhbm90aGVyIHN1YnRyYWN0aW9uIHdvdWxkIGJlIHRv
byBtdWNoLgotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICB3aGlsZSAoTGVzc0VxdWFsKG90
aGVyLCAqdGhpcykpIHsKLSAgICBTdWJ0cmFjdEJpZ251bShvdGhlcik7Ci0gICAgcmVzdWx0Kys7
Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTPgotc3Rh
dGljIGludCBTaXplSW5IZXhDaGFycyhTIG51bWJlcikgewotICBBU1NFUlQobnVtYmVyID4gMCk7
Ci0gIGludCByZXN1bHQgPSAwOwotICB3aGlsZSAobnVtYmVyICE9IDApIHsKLSAgICBudW1iZXIg
Pj49IDQ7Ci0gICAgcmVzdWx0Kys7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1zdGF0
aWMgY2hhciBIZXhDaGFyT2ZWYWx1ZShpbnQgdmFsdWUpIHsKLSAgQVNTRVJUKDAgPD0gdmFsdWUg
JiYgdmFsdWUgPD0gMTYpOwotICBpZiAodmFsdWUgPCAxMCkgcmV0dXJuIHN0YXRpY19jYXN0PGNo
YXI+KHZhbHVlICsgJzAnKTsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KHZhbHVlIC0gMTAg
KyAnQScpOwotfQotCi0KLWJvb2wgQmlnbnVtOjpUb0hleFN0cmluZyhjaGFyKiBidWZmZXIsIGlu
dCBidWZmZXJfc2l6ZSkgY29uc3QgewotICBBU1NFUlQoSXNDbGFtcGVkKCkpOwotICAvLyBFYWNo
IGJpZ2l0IG11c3QgYmUgcHJpbnRhYmxlIGFzIHNlcGFyYXRlIGhleC1jaGFyYWN0ZXIuCi0gIEFT
U0VSVChrQmlnaXRTaXplICUgNCA9PSAwKTsKLSAgY29uc3QgaW50IGtIZXhDaGFyc1BlckJpZ2l0
ID0ga0JpZ2l0U2l6ZSAvIDQ7Ci0KLSAgaWYgKHVzZWRfZGlnaXRzXyA9PSAwKSB7Ci0gICAgaWYg
KGJ1ZmZlcl9zaXplIDwgMikgcmV0dXJuIGZhbHNlOwotICAgIGJ1ZmZlclswXSA9ICcwJzsKLSAg
ICBidWZmZXJbMV0gPSAnXDAnOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIC8vIFdlIGFkZCAx
IGZvciB0aGUgdGVybWluYXRpbmcgJ1wwJyBjaGFyYWN0ZXIuCi0gIGludCBuZWVkZWRfY2hhcnMg
PSAoQmlnaXRMZW5ndGgoKSAtIDEpICoga0hleENoYXJzUGVyQmlnaXQgKwotICAgICAgU2l6ZUlu
SGV4Q2hhcnMoYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSkgKyAxOwotICBpZiAobmVlZGVkX2No
YXJzID4gYnVmZmVyX3NpemUpIHJldHVybiBmYWxzZTsKLSAgaW50IHN0cmluZ19pbmRleCA9IG5l
ZWRlZF9jaGFycyAtIDE7Ci0gIGJ1ZmZlcltzdHJpbmdfaW5kZXgtLV0gPSAnXDAnOwotICBmb3Ig
KGludCBpID0gMDsgaSA8IGV4cG9uZW50XzsgKytpKSB7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGog
PCBrSGV4Q2hhcnNQZXJCaWdpdDsgKytqKSB7Ci0gICAgICBidWZmZXJbc3RyaW5nX2luZGV4LS1d
ID0gJzAnOwotICAgIH0KLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXyAt
IDE7ICsraSkgewotICAgIENodW5rIGN1cnJlbnRfYmlnaXQgPSBiaWdpdHNfW2ldOwotICAgIGZv
ciAoaW50IGogPSAwOyBqIDwga0hleENoYXJzUGVyQmlnaXQ7ICsraikgewotICAgICAgYnVmZmVy
W3N0cmluZ19pbmRleC0tXSA9IEhleENoYXJPZlZhbHVlKGN1cnJlbnRfYmlnaXQgJiAweEYpOwot
ICAgICAgY3VycmVudF9iaWdpdCA+Pj0gNDsKLSAgICB9Ci0gIH0KLSAgLy8gQW5kIGZpbmFsbHkg
dGhlIGxhc3QgYmlnaXQuCi0gIENodW5rIG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgPSBiaWdpdHNf
W3VzZWRfZGlnaXRzXyAtIDFdOwotICB3aGlsZSAobW9zdF9zaWduaWZpY2FudF9iaWdpdCAhPSAw
KSB7Ci0gICAgYnVmZmVyW3N0cmluZ19pbmRleC0tXSA9IEhleENoYXJPZlZhbHVlKG1vc3Rfc2ln
bmlmaWNhbnRfYmlnaXQgJiAweEYpOwotICAgIG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgPj49IDQ7
Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLQotQmlnbnVtOjpDaHVuayBCaWdudW06OkJpZ2l0
QXQoaW50IGluZGV4KSBjb25zdCB7Ci0gIGlmIChpbmRleCA+PSBCaWdpdExlbmd0aCgpKSByZXR1
cm4gMDsKLSAgaWYgKGluZGV4IDwgZXhwb25lbnRfKSByZXR1cm4gMDsKLSAgcmV0dXJuIGJpZ2l0
c19baW5kZXggLSBleHBvbmVudF9dOwotfQotCi0KLWludCBCaWdudW06OkNvbXBhcmUoY29uc3Qg
QmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpIHsKLSAgQVNTRVJUKGEuSXNDbGFtcGVkKCkpOwot
ICBBU1NFUlQoYi5Jc0NsYW1wZWQoKSk7Ci0gIGludCBiaWdpdF9sZW5ndGhfYSA9IGEuQmlnaXRM
ZW5ndGgoKTsKLSAgaW50IGJpZ2l0X2xlbmd0aF9iID0gYi5CaWdpdExlbmd0aCgpOwotICBpZiAo
YmlnaXRfbGVuZ3RoX2EgPCBiaWdpdF9sZW5ndGhfYikgcmV0dXJuIC0xOwotICBpZiAoYmlnaXRf
bGVuZ3RoX2EgPiBiaWdpdF9sZW5ndGhfYikgcmV0dXJuICsxOwotICBmb3IgKGludCBpID0gYmln
aXRfbGVuZ3RoX2EgLSAxOyBpID49IE1pbihhLmV4cG9uZW50XywgYi5leHBvbmVudF8pOyAtLWkp
IHsKLSAgICBDaHVuayBiaWdpdF9hID0gYS5CaWdpdEF0KGkpOwotICAgIENodW5rIGJpZ2l0X2Ig
PSBiLkJpZ2l0QXQoaSk7Ci0gICAgaWYgKGJpZ2l0X2EgPCBiaWdpdF9iKSByZXR1cm4gLTE7Ci0g
ICAgaWYgKGJpZ2l0X2EgPiBiaWdpdF9iKSByZXR1cm4gKzE7Ci0gICAgLy8gT3RoZXJ3aXNlIHRo
ZXkgYXJlIGVxdWFsIHVwIHRvIHRoaXMgZGlnaXQuIFRyeSB0aGUgbmV4dCBkaWdpdC4KLSAgfQot
ICByZXR1cm4gMDsKLX0KLQotCi1pbnQgQmlnbnVtOjpQbHVzQ29tcGFyZShjb25zdCBCaWdudW0m
IGEsIGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmlnbnVtJiBjKSB7Ci0gIEFTU0VSVChhLklzQ2xh
bXBlZCgpKTsKLSAgQVNTRVJUKGIuSXNDbGFtcGVkKCkpOwotICBBU1NFUlQoYy5Jc0NsYW1wZWQo
KSk7Ci0gIGlmIChhLkJpZ2l0TGVuZ3RoKCkgPCBiLkJpZ2l0TGVuZ3RoKCkpIHsKLSAgICByZXR1
cm4gUGx1c0NvbXBhcmUoYiwgYSwgYyk7Ci0gIH0KLSAgaWYgKGEuQmlnaXRMZW5ndGgoKSArIDEg
PCBjLkJpZ2l0TGVuZ3RoKCkpIHJldHVybiAtMTsKLSAgaWYgKGEuQmlnaXRMZW5ndGgoKSA+IGMu
QmlnaXRMZW5ndGgoKSkgcmV0dXJuICsxOwotICAvLyBUaGUgZXhwb25lbnQgZW5jb2RlcyAwLWJp
Z2l0cy4gU28gaWYgdGhlcmUgYXJlIG1vcmUgMC1kaWdpdHMgaW4gJ2EnIHRoYW4KLSAgLy8gJ2In
IGhhcyBkaWdpdHMsIHRoZW4gdGhlIGJpZ2l0LWxlbmd0aCBvZiAnYScrJ2InIG11c3QgYmUgZXF1
YWwgdG8gdGhlIG9uZQotICAvLyBvZiAnYScuCi0gIGlmIChhLmV4cG9uZW50XyA+PSBiLkJpZ2l0
TGVuZ3RoKCkgJiYgYS5CaWdpdExlbmd0aCgpIDwgYy5CaWdpdExlbmd0aCgpKSB7Ci0gICAgcmV0
dXJuIC0xOwotICB9Ci0KLSAgQ2h1bmsgYm9ycm93ID0gMDsKLSAgLy8gU3RhcnRpbmcgYXQgbWlu
X2V4cG9uZW50IGFsbCBkaWdpdHMgYXJlID09IDAuIFNvIG5vIG5lZWQgdG8gY29tcGFyZSB0aGVt
LgotICBpbnQgbWluX2V4cG9uZW50ID0gTWluKE1pbihhLmV4cG9uZW50XywgYi5leHBvbmVudF8p
LCBjLmV4cG9uZW50Xyk7Ci0gIGZvciAoaW50IGkgPSBjLkJpZ2l0TGVuZ3RoKCkgLSAxOyBpID49
IG1pbl9leHBvbmVudDsgLS1pKSB7Ci0gICAgQ2h1bmsgY2h1bmtfYSA9IGEuQmlnaXRBdChpKTsK
LSAgICBDaHVuayBjaHVua19iID0gYi5CaWdpdEF0KGkpOwotICAgIENodW5rIGNodW5rX2MgPSBj
LkJpZ2l0QXQoaSk7Ci0gICAgQ2h1bmsgc3VtID0gY2h1bmtfYSArIGNodW5rX2I7Ci0gICAgaWYg
KHN1bSA+IGNodW5rX2MgKyBib3Jyb3cpIHsKLSAgICAgIHJldHVybiArMTsKLSAgICB9IGVsc2Ug
ewotICAgICAgYm9ycm93ID0gY2h1bmtfYyArIGJvcnJvdyAtIHN1bTsKLSAgICAgIGlmIChib3Jy
b3cgPiAxKSByZXR1cm4gLTE7Ci0gICAgICBib3Jyb3cgPDw9IGtCaWdpdFNpemU7Ci0gICAgfQot
ICB9Ci0gIGlmIChib3Jyb3cgPT0gMCkgcmV0dXJuIDA7Ci0gIHJldHVybiAtMTsKLX0KLQotCi12
b2lkIEJpZ251bTo6Q2xhbXAoKSB7Ci0gIHdoaWxlICh1c2VkX2RpZ2l0c18gPiAwICYmIGJpZ2l0
c19bdXNlZF9kaWdpdHNfIC0gMV0gPT0gMCkgewotICAgIHVzZWRfZGlnaXRzXy0tOwotICB9Ci0g
IGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgewotICAgIC8vIFplcm8uCi0gICAgZXhwb25lbnRfID0g
MDsKLSAgfQotfQotCi0KLWJvb2wgQmlnbnVtOjpJc0NsYW1wZWQoKSBjb25zdCB7Ci0gIHJldHVy
biB1c2VkX2RpZ2l0c18gPT0gMCB8fCBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdICE9IDA7Ci19
Ci0KLQotdm9pZCBCaWdudW06Olplcm8oKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9k
aWdpdHNfOyArK2kpIHsKLSAgICBiaWdpdHNfW2ldID0gMDsKLSAgfQotICB1c2VkX2RpZ2l0c18g
PSAwOwotICBleHBvbmVudF8gPSAwOwotfQotCi0KLXZvaWQgQmlnbnVtOjpBbGlnbihjb25zdCBC
aWdudW0mIG90aGVyKSB7Ci0gIGlmIChleHBvbmVudF8gPiBvdGhlci5leHBvbmVudF8pIHsKLSAg
ICAvLyBJZiAiWCIgcmVwcmVzZW50cyBhICJoaWRkZW4iIGRpZ2l0IChieSB0aGUgZXhwb25lbnQp
IHRoZW4gd2UgYXJlIGluIHRoZQotICAgIC8vIGZvbGxvd2luZyBjYXNlIChhID09IHRoaXMsIGIg
PT0gb3RoZXIpOgotICAgIC8vIGE6ICBhYWFhYWFYWFhYICAgb3IgYTogICBhYWFhYVhYWAotICAg
IC8vIGI6ICAgICBiYmJiYmJYICAgICAgYjogYmJiYmJiYmJYWAotICAgIC8vIFdlIHJlcGxhY2Ug
c29tZSBvZiB0aGUgaGlkZGVuIGRpZ2l0cyAoWCkgb2YgYSB3aXRoIDAgZGlnaXRzLgotICAgIC8v
IGE6ICBhYWFhYWEwMDBYICAgb3IgYTogICBhYWFhYTBYWAotICAgIGludCB6ZXJvX2RpZ2l0cyA9
IGV4cG9uZW50XyAtIG90aGVyLmV4cG9uZW50XzsKLSAgICBFbnN1cmVDYXBhY2l0eSh1c2VkX2Rp
Z2l0c18gKyB6ZXJvX2RpZ2l0cyk7Ci0gICAgZm9yIChpbnQgaSA9IHVzZWRfZGlnaXRzXyAtIDE7
IGkgPj0gMDsgLS1pKSB7Ci0gICAgICBiaWdpdHNfW2kgKyB6ZXJvX2RpZ2l0c10gPSBiaWdpdHNf
W2ldOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHplcm9fZGlnaXRzOyArK2kpIHsK
LSAgICAgIGJpZ2l0c19baV0gPSAwOwotICAgIH0KLSAgICB1c2VkX2RpZ2l0c18gKz0gemVyb19k
aWdpdHM7Ci0gICAgZXhwb25lbnRfIC09IHplcm9fZGlnaXRzOwotICAgIEFTU0VSVCh1c2VkX2Rp
Z2l0c18gPj0gMCk7Ci0gICAgQVNTRVJUKGV4cG9uZW50XyA+PSAwKTsKLSAgfQotfQotCi0KLXZv
aWQgQmlnbnVtOjpCaWdpdHNTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCkgewotICBBU1NFUlQo
c2hpZnRfYW1vdW50IDwga0JpZ2l0U2l6ZSk7Ci0gIEFTU0VSVChzaGlmdF9hbW91bnQgPj0gMCk7
Ci0gIENodW5rIGNhcnJ5ID0gMDsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187
ICsraSkgewotICAgIENodW5rIG5ld19jYXJyeSA9IGJpZ2l0c19baV0gPj4gKGtCaWdpdFNpemUg
LSBzaGlmdF9hbW91bnQpOwotICAgIGJpZ2l0c19baV0gPSAoKGJpZ2l0c19baV0gPDwgc2hpZnRf
YW1vdW50KSArIGNhcnJ5KSAmIGtCaWdpdE1hc2s7Ci0gICAgY2FycnkgPSBuZXdfY2Fycnk7Ci0g
IH0KLSAgaWYgKGNhcnJ5ICE9IDApIHsKLSAgICBiaWdpdHNfW3VzZWRfZGlnaXRzX10gPSBjYXJy
eTsKLSAgICB1c2VkX2RpZ2l0c18rKzsKLSAgfQotfQotCi0KLXZvaWQgQmlnbnVtOjpTdWJ0cmFj
dFRpbWVzKGNvbnN0IEJpZ251bSYgb3RoZXIsIGludCBmYWN0b3IpIHsKLSAgQVNTRVJUKGV4cG9u
ZW50XyA8PSBvdGhlci5leHBvbmVudF8pOwotICBpZiAoZmFjdG9yIDwgMykgewotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZmFjdG9yOyArK2kpIHsKLSAgICAgIFN1YnRyYWN0QmlnbnVtKG90aGVy
KTsKLSAgICB9Ci0gICAgcmV0dXJuOwotICB9Ci0gIENodW5rIGJvcnJvdyA9IDA7Ci0gIGludCBl
eHBvbmVudF9kaWZmID0gb3RoZXIuZXhwb25lbnRfIC0gZXhwb25lbnRfOwotICBmb3IgKGludCBp
ID0gMDsgaSA8IG90aGVyLnVzZWRfZGlnaXRzXzsgKytpKSB7Ci0gICAgRG91YmxlQ2h1bmsgcHJv
ZHVjdCA9IHN0YXRpY19jYXN0PERvdWJsZUNodW5rPihmYWN0b3IpICogb3RoZXIuYmlnaXRzX1tp
XTsKLSAgICBEb3VibGVDaHVuayByZW1vdmUgPSBib3Jyb3cgKyBwcm9kdWN0OwotICAgIENodW5r
IGRpZmZlcmVuY2UgPSBiaWdpdHNfW2kgKyBleHBvbmVudF9kaWZmXSAtIChyZW1vdmUgJiBrQmln
aXRNYXNrKTsKLSAgICBiaWdpdHNfW2kgKyBleHBvbmVudF9kaWZmXSA9IGRpZmZlcmVuY2UgJiBr
QmlnaXRNYXNrOwotICAgIGJvcnJvdyA9IHN0YXRpY19jYXN0PENodW5rPigoZGlmZmVyZW5jZSA+
PiAoa0NodW5rU2l6ZSAtIDEpKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChy
ZW1vdmUgPj4ga0JpZ2l0U2l6ZSkpOwotICB9Ci0gIGZvciAoaW50IGkgPSBvdGhlci51c2VkX2Rp
Z2l0c18gKyBleHBvbmVudF9kaWZmOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKLSAgICBpZiAo
Ym9ycm93ID09IDApIHJldHVybjsKLSAgICBDaHVuayBkaWZmZXJlbmNlID0gYmlnaXRzX1tpXSAt
IGJvcnJvdzsKLSAgICBiaWdpdHNfW2ldID0gZGlmZmVyZW5jZSAmIGtCaWdpdE1hc2s7Ci0gICAg
Ym9ycm93ID0gZGlmZmVyZW5jZSA+PiAoa0NodW5rU2l6ZSAtIDEpOwotICB9Ci0gIENsYW1wKCk7
Ci19Ci0KLQotfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3Vi
bGUtY29udmVyc2lvbi9iaWdudW0uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2RvdWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uL2JpZ251bS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzg1ZjIyMzdiYWUxYTZlMmY3MzEzZjlhMDY1YjBkYmQ5
YjIyNWU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2RvdWJsZS1jb252ZXJzaW9uL2RvdWJs
ZS1jb252ZXJzaW9uL2JpZ251bS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8v
IENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gICAgICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vICAgICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZAotLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gICAgICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0vLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9CSUdO
VU1fSF8KLSNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQklHTlVNX0hfCi0KLSNpbmNsdWRlICJ1
dGlscy5oIgotCi1uYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24gewotCi1jbGFzcyBCaWdudW0g
ewotIHB1YmxpYzoKLSAgLy8gMzU4NCA9IDEyOCAqIDI4LiBXZSBjYW4gcmVwcmVzZW50IDJeMzU4
NCA+IDEwXjEwMDAgYWNjdXJhdGVseS4KLSAgLy8gVGhpcyBiaWdudW0gY2FuIGVuY29kZSBtdWNo
IGJpZ2dlciBudW1iZXJzLCBzaW5jZSBpdCBjb250YWlucyBhbgotICAvLyBleHBvbmVudC4KLSAg
c3RhdGljIGNvbnN0IGludCBrTWF4U2lnbmlmaWNhbnRCaXRzID0gMzU4NDsKLQotICBCaWdudW0o
KTsKLSAgdm9pZCBBc3NpZ25VSW50MTYodWludDE2X3QgdmFsdWUpOwotICB2b2lkIEFzc2lnblVJ
bnQ2NCh1aW50NjRfdCB2YWx1ZSk7Ci0gIHZvaWQgQXNzaWduQmlnbnVtKGNvbnN0IEJpZ251bSYg
b3RoZXIpOwotCi0gIHZvaWQgQXNzaWduRGVjaW1hbFN0cmluZyhWZWN0b3I8Y29uc3QgY2hhcj4g
dmFsdWUpOwotICB2b2lkIEFzc2lnbkhleFN0cmluZyhWZWN0b3I8Y29uc3QgY2hhcj4gdmFsdWUp
OwotCi0gIHZvaWQgQXNzaWduUG93ZXJVSW50MTYodWludDE2X3QgYmFzZSwgaW50IGV4cG9uZW50
KTsKLQotICB2b2lkIEFkZFVJbnQ2NCh1aW50NjRfdCBvcGVyYW5kKTsKLSAgdm9pZCBBZGRCaWdu
dW0oY29uc3QgQmlnbnVtJiBvdGhlcik7Ci0gIC8vIFByZWNvbmRpdGlvbjogdGhpcyA+PSBvdGhl
ci4KLSAgdm9pZCBTdWJ0cmFjdEJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKTsKLQotICB2b2lk
IFNxdWFyZSgpOwotICB2b2lkIFNoaWZ0TGVmdChpbnQgc2hpZnRfYW1vdW50KTsKLSAgdm9pZCBN
dWx0aXBseUJ5VUludDMyKHVpbnQzMl90IGZhY3Rvcik7Ci0gIHZvaWQgTXVsdGlwbHlCeVVJbnQ2
NCh1aW50NjRfdCBmYWN0b3IpOwotICB2b2lkIE11bHRpcGx5QnlQb3dlck9mVGVuKGludCBleHBv
bmVudCk7Ci0gIHZvaWQgVGltZXMxMCgpIHsgcmV0dXJuIE11bHRpcGx5QnlVSW50MzIoMTApOyB9
Ci0gIC8vIFBzZXVkb2NvZGU6Ci0gIC8vICBpbnQgcmVzdWx0ID0gdGhpcyAvIG90aGVyOwotICAv
LyAgdGhpcyA9IHRoaXMgJSBvdGhlcjsKLSAgLy8gSW4gdGhlIHdvcnN0IGNhc2UgdGhpcyBmdW5j
dGlvbiBpcyBpbiBPKHRoaXMvb3RoZXIpLgotICB1aW50MTZfdCBEaXZpZGVNb2R1bG9JbnRCaWdu
dW0oY29uc3QgQmlnbnVtJiBvdGhlcik7Ci0KLSAgYm9vbCBUb0hleFN0cmluZyhjaGFyKiBidWZm
ZXIsIGludCBidWZmZXJfc2l6ZSkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucwotICAvLyAgLTEgaWYg
YSA8IGIsCi0gIC8vICAgMCBpZiBhID09IGIsIGFuZAotICAvLyAgKzEgaWYgYSA+IGIuCi0gIHN0
YXRpYyBpbnQgQ29tcGFyZShjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYik7Ci0gIHN0
YXRpYyBib29sIEVxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKSB7Ci0gICAg
cmV0dXJuIENvbXBhcmUoYSwgYikgPT0gMDsKLSAgfQotICBzdGF0aWMgYm9vbCBMZXNzRXF1YWwo
Y29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpIHsKLSAgICByZXR1cm4gQ29tcGFyZShh
LCBiKSA8PSAwOwotICB9Ci0gIHN0YXRpYyBib29sIExlc3MoY29uc3QgQmlnbnVtJiBhLCBjb25z
dCBCaWdudW0mIGIpIHsKLSAgICByZXR1cm4gQ29tcGFyZShhLCBiKSA8IDA7Ci0gIH0KLSAgLy8g
UmV0dXJucyBDb21wYXJlKGEgKyBiLCBjKTsKLSAgc3RhdGljIGludCBQbHVzQ29tcGFyZShjb25z
dCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmlnbnVtJiBjKTsKLSAgLy8gUmV0
dXJucyBhICsgYiA9PSBjCi0gIHN0YXRpYyBib29sIFBsdXNFcXVhbChjb25zdCBCaWdudW0mIGEs
IGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmlnbnVtJiBjKSB7Ci0gICAgcmV0dXJuIFBsdXNDb21w
YXJlKGEsIGIsIGMpID09IDA7Ci0gIH0KLSAgLy8gUmV0dXJucyBhICsgYiA8PSBjCi0gIHN0YXRp
YyBib29sIFBsdXNMZXNzRXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNv
bnN0IEJpZ251bSYgYykgewotICAgIHJldHVybiBQbHVzQ29tcGFyZShhLCBiLCBjKSA8PSAwOwot
ICB9Ci0gIC8vIFJldHVybnMgYSArIGIgPCBjCi0gIHN0YXRpYyBib29sIFBsdXNMZXNzKGNvbnN0
IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdudW0mIGMpIHsKLSAgICByZXR1
cm4gUGx1c0NvbXBhcmUoYSwgYiwgYykgPCAwOwotICB9Ci0gcHJpdmF0ZToKLSAgdHlwZWRlZiB1
aW50MzJfdCBDaHVuazsKLSAgdHlwZWRlZiB1aW50NjRfdCBEb3VibGVDaHVuazsKLQotICBzdGF0
aWMgY29uc3QgaW50IGtDaHVua1NpemUgPSBzaXplb2YoQ2h1bmspICogODsKLSAgc3RhdGljIGNv
bnN0IGludCBrRG91YmxlQ2h1bmtTaXplID0gc2l6ZW9mKERvdWJsZUNodW5rKSAqIDg7Ci0gIC8v
IFdpdGggYmlnaXQgc2l6ZSBvZiAyOCB3ZSBsb29zZSBzb21lIGJpdHMsIGJ1dCBhIGRvdWJsZSBz
dGlsbCBmaXRzIGVhc2lseQotICAvLyBpbnRvIHR3byBjaHVua3MsIGFuZCBtb3JlIGltcG9ydGFu
dGx5IHdlIGNhbiB1c2UgdGhlIENvbWJhIG11bHRpcGxpY2F0aW9uLgotICBzdGF0aWMgY29uc3Qg
aW50IGtCaWdpdFNpemUgPSAyODsKLSAgc3RhdGljIGNvbnN0IENodW5rIGtCaWdpdE1hc2sgPSAo
MSA8PCBrQmlnaXRTaXplKSAtIDE7Ci0gIC8vIEV2ZXJ5IGluc3RhbmNlIGFsbG9jYXRlcyBrQmln
aXRMZW5ndGggY2h1bmtzIG9uIHRoZSBzdGFjay4gQmlnbnVtcyBjYW5ub3QKLSAgLy8gZ3Jvdy4g
VGhlcmUgYXJlIG5vIGNoZWNrcyBpZiB0aGUgc3RhY2stYWxsb2NhdGVkIHNwYWNlIGlzIHN1ZmZp
Y2llbnQuCi0gIHN0YXRpYyBjb25zdCBpbnQga0JpZ2l0Q2FwYWNpdHkgPSBrTWF4U2lnbmlmaWNh
bnRCaXRzIC8ga0JpZ2l0U2l6ZTsKLQotICB2b2lkIEVuc3VyZUNhcGFjaXR5KGludCBzaXplKSB7
Ci0gICAgaWYgKHNpemUgPiBrQmlnaXRDYXBhY2l0eSkgewotICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICB9Ci0gIH0KLSAgdm9pZCBBbGlnbihjb25zdCBCaWdudW0mIG90aGVyKTsKLSAgdm9pZCBD
bGFtcCgpOwotICBib29sIElzQ2xhbXBlZCgpIGNvbnN0OwotICB2b2lkIFplcm8oKTsKLSAgLy8g
UmVxdWlyZXMgdGhpcyB0byBoYXZlIGVub3VnaCBjYXBhY2l0eSAobm8gdGVzdHMgZG9uZSkuCi0g
IC8vIFVwZGF0ZXMgdXNlZF9kaWdpdHNfIGlmIG5lY2Vzc2FyeS4KLSAgLy8gc2hpZnRfYW1vdW50
IG11c3QgYmUgPCBrQmlnaXRTaXplLgotICB2b2lkIEJpZ2l0c1NoaWZ0TGVmdChpbnQgc2hpZnRf
YW1vdW50KTsKLSAgLy8gQmlnaXRMZW5ndGggaW5jbHVkZXMgdGhlICJoaWRkZW4iIGRpZ2l0cyBl
bmNvZGVkIGluIHRoZSBleHBvbmVudC4KLSAgaW50IEJpZ2l0TGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gdXNlZF9kaWdpdHNfICsgZXhwb25lbnRfOyB9Ci0gIENodW5rIEJpZ2l0QXQoaW50IGluZGV4
KSBjb25zdDsKLSAgdm9pZCBTdWJ0cmFjdFRpbWVzKGNvbnN0IEJpZ251bSYgb3RoZXIsIGludCBm
YWN0b3IpOwotCi0gIENodW5rIGJpZ2l0c19idWZmZXJfW2tCaWdpdENhcGFjaXR5XTsKLSAgLy8g
QSB2ZWN0b3IgYmFja2VkIGJ5IGJpZ2l0c19idWZmZXJfLiBUaGlzIHdheSBhY2Nlc3NlcyB0byB0
aGUgYXJyYXkgYXJlCi0gIC8vIGNoZWNrZWQgZm9yIG91dC1vZi1ib3VuZHMgZXJyb3JzLgotICBW
ZWN0b3I8Q2h1bms+IGJpZ2l0c187Ci0gIGludCB1c2VkX2RpZ2l0c187Ci0gIC8vIFRoZSBCaWdu
dW0ncyB2YWx1ZSBlcXVhbHMgdmFsdWUoYmlnaXRzXykgKiAyXihleHBvbmVudF8gKiBrQmlnaXRT
aXplKS4KLSAgaW50IGV4cG9uZW50XzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQmln
bnVtKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgotCi0jZW5kaWYg
IC8vIERPVUJMRV9DT05WRVJTSU9OX0JJR05VTV9IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNp
b24vY2FjaGVkLXBvd2Vycy5jYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2RvdWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uL2NhY2hlZC1wb3dlcnMuY2MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNDNmMDY0MTI3Nzc1MDlhODEwMGFlNTkxZDg0
MDY1YWY2MjZlNDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24v
ZG91YmxlLWNvbnZlcnNpb24vY2FjaGVkLXBvd2Vycy5jYworKysgL2Rldi9udWxsCkBAIC0xLDE3
NSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAwNi0yMDA4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8v
IG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gICAg
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKLS8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZAotLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0vLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPHN0
ZGFyZy5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1
ZGUgInV0aWxzLmgiCi0KLSNpbmNsdWRlICJjYWNoZWQtcG93ZXJzLmgiCi0KLW5hbWVzcGFjZSBk
b3VibGVfY29udmVyc2lvbiB7Ci0KLXN0cnVjdCBDYWNoZWRQb3dlciB7Ci0gIHVpbnQ2NF90IHNp
Z25pZmljYW5kOwotICBpbnQxNl90IGJpbmFyeV9leHBvbmVudDsKLSAgaW50MTZfdCBkZWNpbWFs
X2V4cG9uZW50OwotfTsKLQotc3RhdGljIGNvbnN0IENhY2hlZFBvd2VyIGtDYWNoZWRQb3dlcnNb
XSA9IHsKLSAge1VJTlQ2NF8yUEFSVF9DKDB4ZmE4ZmQ1YTAsIDA4MWMwMjg4KSwgLTEyMjAsIC0z
NDh9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhiYWFlZTE3ZiwgYTIzZWJmNzYpLCAtMTE5MywgLTM0
MH0sCi0gIHtVSU5UNjRfMlBBUlRfQygweDhiMTZmYjIwLCAzMDU1YWM3NiksIC0xMTY2LCAtMzMy
fSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4Y2Y0Mjg5NGEsIDVkY2UzNWVhKSwgLTExNDAsIC0zMjR9
LAotICB7VUlOVDY0XzJQQVJUX0MoMHg5YTZiYjBhYSwgNTU2NTNiMmQpLCAtMTExMywgLTMxNn0s
Ci0gIHtVSU5UNjRfMlBBUlRfQygweGU2MWFjZjAzLCAzZDFhNDVkZiksIC0xMDg3LCAtMzA4fSwK
LSAge1VJTlQ2NF8yUEFSVF9DKDB4YWI3MGZlMTcsIGM3OWFjNmNhKSwgLTEwNjAsIC0zMDB9LAot
ICB7VUlOVDY0XzJQQVJUX0MoMHhmZjc3YjFmYywgYmViY2RjNGYpLCAtMTAzNCwgLTI5Mn0sCi0g
IHtVSU5UNjRfMlBBUlRfQygweGJlNTY5MWVmLCA0MTZiZDYwYyksIC0xMDA3LCAtMjg0fSwKLSAg
e1VJTlQ2NF8yUEFSVF9DKDB4OGRkMDFmYWQsIDkwN2ZmYzNjKSwgLTk4MCwgLTI3Nn0sCi0gIHtV
SU5UNjRfMlBBUlRfQygweGQzNTE1YzI4LCAzMTU1OWE4MyksIC05NTQsIC0yNjh9LAotICB7VUlO
VDY0XzJQQVJUX0MoMHg5ZDcxYWM4ZiwgYWRhNmM5YjUpLCAtOTI3LCAtMjYwfSwKLSAge1VJTlQ2
NF8yUEFSVF9DKDB4ZWE5YzIyNzcsIDIzZWU4YmNiKSwgLTkwMSwgLTI1Mn0sCi0gIHtVSU5UNjRf
MlBBUlRfQygweGFlY2M0OTkxLCA0MDc4NTM2ZCksIC04NzQsIC0yNDR9LAotICB7VUlOVDY0XzJQ
QVJUX0MoMHg4MjNjMTI3OSwgNWRiNmNlNTcpLCAtODQ3LCAtMjM2fSwKLSAge1VJTlQ2NF8yUEFS
VF9DKDB4YzIxMDk0MzYsIDRkZmI1NjM3KSwgLTgyMSwgLTIyOH0sCi0gIHtVSU5UNjRfMlBBUlRf
QygweDkwOTZlYTZmLCAzODQ4OTg0ZiksIC03OTQsIC0yMjB9LAotICB7VUlOVDY0XzJQQVJUX0Mo
MHhkNzc0ODVjYiwgMjU4MjNhYzcpLCAtNzY4LCAtMjEyfSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4
YTA4NmNmY2QsIDk3YmY5N2Y0KSwgLTc0MSwgLTIwNH0sCi0gIHtVSU5UNjRfMlBBUlRfQygweGVm
MzQwYTk4LCAxNzJhYWNlNSksIC03MTUsIC0xOTZ9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhiMjM4
NjdmYiwgMmEzNWIyOGUpLCAtNjg4LCAtMTg4fSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4ODRjOGQ0
ZGYsIGQyYzYzZjNiKSwgLTY2MSwgLTE4MH0sCi0gIHtVSU5UNjRfMlBBUlRfQygweGM1ZGQ0NDI3
LCAxYWQzY2RiYSksIC02MzUsIC0xNzJ9LAotICB7VUlOVDY0XzJQQVJUX0MoMHg5MzZiOWZjZSwg
YmIyNWM5OTYpLCAtNjA4LCAtMTY0fSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4ZGJhYzZjMjQsIDdk
NjJhNTg0KSwgLTU4MiwgLTE1Nn0sCi0gIHtVSU5UNjRfMlBBUlRfQygweGEzYWI2NjU4LCAwZDVm
ZGFmNiksIC01NTUsIC0xNDh9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhmM2UyZjg5MywgZGVjM2Yx
MjYpLCAtNTI5LCAtMTQwfSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4YjViNWFkYTgsIGFhZmY4MGI4
KSwgLTUwMiwgLTEzMn0sCi0gIHtVSU5UNjRfMlBBUlRfQygweDg3NjI1ZjA1LCA2YzdjNGE4Yiks
IC00NzUsIC0xMjR9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhjOWJjZmY2MCwgMzRjMTMwNTMpLCAt
NDQ5LCAtMTE2fSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4OTY0ZTg1OGMsIDkxYmEyNjU1KSwgLTQy
MiwgLTEwOH0sCi0gIHtVSU5UNjRfMlBBUlRfQygweGRmZjk3NzI0LCA3MDI5N2ViZCksIC0zOTYs
IC0xMDB9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhhNmRmYmQ5ZiwgYjhlNWI4OGYpLCAtMzY5LCAt
OTJ9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhmOGE5NWZjZiwgODg3NDdkOTQpLCAtMzQzLCAtODR9
LAotICB7VUlOVDY0XzJQQVJUX0MoMHhiOTQ0NzA5MywgOGZhODliY2YpLCAtMzE2LCAtNzZ9LAot
ICB7VUlOVDY0XzJQQVJUX0MoMHg4YTA4ZjBmOCwgYmYwZjE1NmIpLCAtMjg5LCAtNjh9LAotICB7
VUlOVDY0XzJQQVJUX0MoMHhjZGIwMjU1NSwgNjUzMTMxYjYpLCAtMjYzLCAtNjB9LAotICB7VUlO
VDY0XzJQQVJUX0MoMHg5OTNmZTJjNiwgZDA3YjdmYWMpLCAtMjM2LCAtNTJ9LAotICB7VUlOVDY0
XzJQQVJUX0MoMHhlNDVjMTBjNCwgMmEyYjNiMDYpLCAtMjEwLCAtNDR9LAotICB7VUlOVDY0XzJQ
QVJUX0MoMHhhYTI0MjQ5OSwgNjk3MzkyZDMpLCAtMTgzLCAtMzZ9LAotICB7VUlOVDY0XzJQQVJU
X0MoMHhmZDg3YjVmMiwgODMwMGNhMGUpLCAtMTU3LCAtMjh9LAotICB7VUlOVDY0XzJQQVJUX0Mo
MHhiY2U1MDg2NCwgOTIxMTFhZWIpLCAtMTMwLCAtMjB9LAotICB7VUlOVDY0XzJQQVJUX0MoMHg4
Y2JjY2MwOSwgNmY1MDg4Y2MpLCAtMTAzLCAtMTJ9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhkMWI3
MTc1OCwgZTIxOTY1MmMpLCAtNzcsIC00fSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4OWM0MDAwMDAs
IDAwMDAwMDAwKSwgLTUwLCA0fSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4ZThkNGE1MTAsIDAwMDAw
MDAwKSwgLTI0LCAxMn0sCi0gIHtVSU5UNjRfMlBBUlRfQygweGFkNzhlYmM1LCBhYzYyMDAwMCks
IDMsIDIwfSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4ODEzZjM5NzgsIGY4OTQwOTg0KSwgMzAsIDI4
fSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4YzA5N2NlN2IsIGM5MDcxNWIzKSwgNTYsIDM2fSwKLSAg
e1VJTlQ2NF8yUEFSVF9DKDB4OGY3ZTMyY2UsIDdiZWE1YzcwKSwgODMsIDQ0fSwKLSAge1VJTlQ2
NF8yUEFSVF9DKDB4ZDVkMjM4YTQsIGFiZTk4MDY4KSwgMTA5LCA1Mn0sCi0gIHtVSU5UNjRfMlBB
UlRfQygweDlmNGYyNzI2LCAxNzlhMjI0NSksIDEzNiwgNjB9LAotICB7VUlOVDY0XzJQQVJUX0Mo
MHhlZDYzYTIzMSwgZDRjNGZiMjcpLCAxNjIsIDY4fSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4YjBk
ZTY1MzgsIDhjYzhhZGE4KSwgMTg5LCA3Nn0sCi0gIHtVSU5UNjRfMlBBUlRfQygweDgzYzcwODhl
LCAxYWFiNjVkYiksIDIxNiwgODR9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhjNDVkMWRmOSwgNDI3
MTFkOWEpLCAyNDIsIDkyfSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4OTI0ZDY5MmMsIGE2MWJlNzU4
KSwgMjY5LCAxMDB9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhkYTAxZWU2NCwgMWE3MDhkZWEpLCAy
OTUsIDEwOH0sCi0gIHtVSU5UNjRfMlBBUlRfQygweGEyNmRhMzk5LCA5YWVmNzc0YSksIDMyMiwg
MTE2fSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4ZjIwOTc4N2IsIGI0N2Q2Yjg1KSwgMzQ4LCAxMjR9
LAotICB7VUlOVDY0XzJQQVJUX0MoMHhiNDU0ZTRhMSwgNzlkZDE4NzcpLCAzNzUsIDEzMn0sCi0g
IHtVSU5UNjRfMlBBUlRfQygweDg2NWI4NjkyLCA1YjliYzVjMiksIDQwMiwgMTQwfSwKLSAge1VJ
TlQ2NF8yUEFSVF9DKDB4YzgzNTUzYzUsIGM4OTY1ZDNkKSwgNDI4LCAxNDh9LAotICB7VUlOVDY0
XzJQQVJUX0MoMHg5NTJhYjQ1YywgZmE5N2EwYjMpLCA0NTUsIDE1Nn0sCi0gIHtVSU5UNjRfMlBB
UlRfQygweGRlNDY5ZmJkLCA5OWEwNWZlMyksIDQ4MSwgMTY0fSwKLSAge1VJTlQ2NF8yUEFSVF9D
KDB4YTU5YmMyMzQsIGRiMzk4YzI1KSwgNTA4LCAxNzJ9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhm
NmM2OWE3MiwgYTM5ODlmNWMpLCA1MzQsIDE4MH0sCi0gIHtVSU5UNjRfMlBBUlRfQygweGI3ZGNi
ZjUzLCA1NGU5YmVjZSksIDU2MSwgMTg4fSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4ODhmY2YzMTcs
IGYyMjI0MWUyKSwgNTg4LCAxOTZ9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhjYzIwY2U5YiwgZDM1
Yzc4YTUpLCA2MTQsIDIwNH0sCi0gIHtVSU5UNjRfMlBBUlRfQygweDk4MTY1YWYzLCA3YjIxNTNk
ZiksIDY0MSwgMjEyfSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4ZTJhMGI1ZGMsIDk3MWYzMDNhKSwg
NjY3LCAyMjB9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhhOGQ5ZDE1MywgNWNlM2IzOTYpLCA2OTQs
IDIyOH0sCi0gIHtVSU5UNjRfMlBBUlRfQygweGZiOWI3Y2Q5LCBhNGE3NDQzYyksIDcyMCwgMjM2
fSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4YmI3NjRjNGMsIGE3YTQ0NDEwKSwgNzQ3LCAyNDR9LAot
ICB7VUlOVDY0XzJQQVJUX0MoMHg4YmFiOGVlZiwgYjY0MDljMWEpLCA3NzQsIDI1Mn0sCi0gIHtV
SU5UNjRfMlBBUlRfQygweGQwMWZlZjEwLCBhNjU3ODQyYyksIDgwMCwgMjYwfSwKLSAge1VJTlQ2
NF8yUEFSVF9DKDB4OWIxMGE0ZTUsIGU5OTEzMTI5KSwgODI3LCAyNjh9LAotICB7VUlOVDY0XzJQ
QVJUX0MoMHhlNzEwOWJmYiwgYTE5YzBjOWQpLCA4NTMsIDI3Nn0sCi0gIHtVSU5UNjRfMlBBUlRf
QygweGFjMjgyMGQ5LCA2MjNiZjQyOSksIDg4MCwgMjg0fSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4
ODA0NDRiNWUsIDdhYTdjZjg1KSwgOTA3LCAyOTJ9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhiZjIx
ZTQ0MCwgMDNhY2RkMmQpLCA5MzMsIDMwMH0sCi0gIHtVSU5UNjRfMlBBUlRfQygweDhlNjc5YzJm
LCA1ZTQ0ZmY4ZiksIDk2MCwgMzA4fSwKLSAge1VJTlQ2NF8yUEFSVF9DKDB4ZDQzMzE3OWQsIDlj
OGNiODQxKSwgOTg2LCAzMTZ9LAotICB7VUlOVDY0XzJQQVJUX0MoMHg5ZTE5ZGI5MiwgYjRlMzFi
YTkpLCAxMDEzLCAzMjR9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhlYjk2YmY2ZSwgYmFkZjc3ZDkp
LCAxMDM5LCAzMzJ9LAotICB7VUlOVDY0XzJQQVJUX0MoMHhhZjg3MDIzYiwgOWJmMGVlNmIpLCAx
MDY2LCAzNDB9LAotfTsKLQotc3RhdGljIGNvbnN0IGludCBrQ2FjaGVkUG93ZXJzT2Zmc2V0ID0g
MzQ4OyAgLy8gLTEgKiB0aGUgZmlyc3QgZGVjaW1hbF9leHBvbmVudC4KLXN0YXRpYyBjb25zdCBk
b3VibGUga0RfMV9MT0cyXzEwID0gMC4zMDEwMjk5OTU2NjM5ODExNDsgIC8vICAxIC8gbGcoMTAp
Ci0vLyBEaWZmZXJlbmNlIGJldHdlZW4gdGhlIGRlY2ltYWwgZXhwb25lbnRzIGluIHRoZSB0YWJs
ZSBhYm92ZS4KLWNvbnN0IGludCBQb3dlcnNPZlRlbkNhY2hlOjprRGVjaW1hbEV4cG9uZW50RGlz
dGFuY2UgPSA4OwotY29uc3QgaW50IFBvd2Vyc09mVGVuQ2FjaGU6OmtNaW5EZWNpbWFsRXhwb25l
bnQgPSAtMzQ4OwotY29uc3QgaW50IFBvd2Vyc09mVGVuQ2FjaGU6OmtNYXhEZWNpbWFsRXhwb25l
bnQgPSAzNDA7Ci0KLXZvaWQgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJGb3JCaW5h
cnlFeHBvbmVudFJhbmdlKAotICAgIGludCBtaW5fZXhwb25lbnQsCi0gICAgaW50IG1heF9leHBv
bmVudCwKLSAgICBEaXlGcCogcG93ZXIsCi0gICAgaW50KiBkZWNpbWFsX2V4cG9uZW50KSB7Ci0g
IGludCBrUSA9IERpeUZwOjprU2lnbmlmaWNhbmRTaXplOwotICBkb3VibGUgayA9IGNlaWwoKG1p
bl9leHBvbmVudCArIGtRIC0gMSkgKiBrRF8xX0xPRzJfMTApOwotICBpbnQgZm9vID0ga0NhY2hl
ZFBvd2Vyc09mZnNldDsKLSAgaW50IGluZGV4ID0KLSAgICAgIChmb28gKyBzdGF0aWNfY2FzdDxp
bnQ+KGspIC0gMSkgLyBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UgKyAxOwotICBBU1NFUlQoMCA8
PSBpbmRleCAmJiBpbmRleCA8IHN0YXRpY19jYXN0PGludD4oQVJSQVlfU0laRShrQ2FjaGVkUG93
ZXJzKSkpOwotICBDYWNoZWRQb3dlciBjYWNoZWRfcG93ZXIgPSBrQ2FjaGVkUG93ZXJzW2luZGV4
XTsKLSAgQVNTRVJUKG1pbl9leHBvbmVudCA8PSBjYWNoZWRfcG93ZXIuYmluYXJ5X2V4cG9uZW50
KTsKLSAgKHZvaWQpIG1heF9leHBvbmVudDsgIC8vIE1hcmsgdmFyaWFibGUgYXMgdXNlZC4KLSAg
QVNTRVJUKGNhY2hlZF9wb3dlci5iaW5hcnlfZXhwb25lbnQgPD0gbWF4X2V4cG9uZW50KTsKLSAg
KmRlY2ltYWxfZXhwb25lbnQgPSBjYWNoZWRfcG93ZXIuZGVjaW1hbF9leHBvbmVudDsKLSAgKnBv
d2VyID0gRGl5RnAoY2FjaGVkX3Bvd2VyLnNpZ25pZmljYW5kLCBjYWNoZWRfcG93ZXIuYmluYXJ5
X2V4cG9uZW50KTsKLX0KLQotCi12b2lkIFBvd2Vyc09mVGVuQ2FjaGU6OkdldENhY2hlZFBvd2Vy
Rm9yRGVjaW1hbEV4cG9uZW50KGludCByZXF1ZXN0ZWRfZXhwb25lbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZwKiBwb3dlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50KiBmb3VuZF9leHBvbmVudCkgewotICBBU1NFUlQoa01pbkRlY2ltYWxFeHBvbmVudCA8PSBy
ZXF1ZXN0ZWRfZXhwb25lbnQpOwotICBBU1NFUlQocmVxdWVzdGVkX2V4cG9uZW50IDwga01heERl
Y2ltYWxFeHBvbmVudCArIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7Ci0gIGludCBpbmRleCA9
Ci0gICAgICAocmVxdWVzdGVkX2V4cG9uZW50ICsga0NhY2hlZFBvd2Vyc09mZnNldCkgLyBrRGVj
aW1hbEV4cG9uZW50RGlzdGFuY2U7Ci0gIENhY2hlZFBvd2VyIGNhY2hlZF9wb3dlciA9IGtDYWNo
ZWRQb3dlcnNbaW5kZXhdOwotICAqcG93ZXIgPSBEaXlGcChjYWNoZWRfcG93ZXIuc2lnbmlmaWNh
bmQsIGNhY2hlZF9wb3dlci5iaW5hcnlfZXhwb25lbnQpOwotICAqZm91bmRfZXhwb25lbnQgPSBj
YWNoZWRfcG93ZXIuZGVjaW1hbF9leHBvbmVudDsKLSAgQVNTRVJUKCpmb3VuZF9leHBvbmVudCA8
PSByZXF1ZXN0ZWRfZXhwb25lbnQpOwotICBBU1NFUlQocmVxdWVzdGVkX2V4cG9uZW50IDwgKmZv
dW5kX2V4cG9uZW50ICsga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlKTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi9jYWNo
ZWQtcG93ZXJzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9kb3VibGUt
Y29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi9jYWNoZWQtcG93ZXJzLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDYxYTUwNjE0Y2YxMGM3MzA4Mjk0NjcwMDdiZTA2YzZlNjZhNmQ0
NGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNv
bnZlcnNpb24vY2FjaGVkLXBvd2Vycy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAot
Ly8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyAgICAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gICAgICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkCi0vLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAgICBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLS8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0NB
Q0hFRF9QT1dFUlNfSF8KLSNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVEX1BPV0VSU19I
XwotCi0jaW5jbHVkZSAiZGl5LWZwLmgiCi0KLW5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7
Ci0KLWNsYXNzIFBvd2Vyc09mVGVuQ2FjaGUgewotIHB1YmxpYzoKLQotICAvLyBOb3QgYWxsIHBv
d2VycyBvZiB0ZW4gYXJlIGNhY2hlZC4gVGhlIGRlY2ltYWwgZXhwb25lbnQgb2YgdHdvIG5laWdo
Ym9yaW5nCi0gIC8vIGNhY2hlZCBudW1iZXJzIHdpbGwgZGlmZmVyIGJ5IGtEZWNpbWFsRXhwb25l
bnREaXN0YW5jZS4KLSAgc3RhdGljIGNvbnN0IGludCBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2U7
Ci0KLSAgc3RhdGljIGNvbnN0IGludCBrTWluRGVjaW1hbEV4cG9uZW50OwotICBzdGF0aWMgY29u
c3QgaW50IGtNYXhEZWNpbWFsRXhwb25lbnQ7Ci0KLSAgLy8gUmV0dXJucyBhIGNhY2hlZCBwb3dl
ci1vZi10ZW4gd2l0aCBhIGJpbmFyeSBleHBvbmVudCBpbiB0aGUgcmFuZ2UKLSAgLy8gW21pbl9l
eHBvbmVudDsgbWF4X2V4cG9uZW50XSAoYm91bmRhcmllcyBpbmNsdWRlZCkuCi0gIHN0YXRpYyB2
b2lkIEdldENhY2hlZFBvd2VyRm9yQmluYXJ5RXhwb25lbnRSYW5nZShpbnQgbWluX2V4cG9uZW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG1heF9leHBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERpeUZwKiBwb3dlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9leHBvbmVudCk7Ci0KLSAgLy8gUmV0dXJu
cyBhIGNhY2hlZCBwb3dlciBvZiB0ZW4geCB+PSAxMF5rIHN1Y2ggdGhhdAotICAvLyAgIGsgPD0g
ZGVjaW1hbF9leHBvbmVudCA8IGsgKyBrQ2FjaGVkUG93ZXJzRGVjaW1hbERpc3RhbmNlLgotICAv
LyBUaGUgZ2l2ZW4gZGVjaW1hbF9leHBvbmVudCBtdXN0IHNhdGlzZnkKLSAgLy8gICBrTWluRGVj
aW1hbEV4cG9uZW50IDw9IHJlcXVlc3RlZF9leHBvbmVudCwgYW5kCi0gIC8vICAgcmVxdWVzdGVk
X2V4cG9uZW50IDwga01heERlY2ltYWxFeHBvbmVudCArIGtEZWNpbWFsRXhwb25lbnREaXN0YW5j
ZS4KLSAgc3RhdGljIHZvaWQgR2V0Q2FjaGVkUG93ZXJGb3JEZWNpbWFsRXhwb25lbnQoaW50IHJl
cXVlc3RlZF9leHBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGl5RnAqIHBvd2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQqIGZvdW5kX2V4cG9uZW50KTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFj
ZSBkb3VibGVfY29udmVyc2lvbgotCi0jZW5kaWYgIC8vIERPVUJMRV9DT05WRVJTSU9OX0NBQ0hF
RF9QT1dFUlNfSF8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2RvdWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uL2RpeS1mcC5jYyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2RvdWJsZS1jb252ZXJzaW9uL2RvdWJsZS1j
b252ZXJzaW9uL2RpeS1mcC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRkMTg5
MWIxNjhhZGEwYjY3YjNkMTI0ZmYzYzYzYjM1MmQ3ZmRhNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9kb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi9kaXktZnAuY2MKKysrIC9k
ZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVj
dCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCi0vLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLS8vICAgICAgIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQot
I2luY2x1ZGUgImRpeS1mcC5oIgotI2luY2x1ZGUgInV0aWxzLmgiCi0KLW5hbWVzcGFjZSBkb3Vi
bGVfY29udmVyc2lvbiB7Ci0KLXZvaWQgRGl5RnA6Ok11bHRpcGx5KGNvbnN0IERpeUZwJiBvdGhl
cikgewotICAvLyBTaW1wbHkgImVtdWxhdGVzIiBhIDEyOCBiaXQgbXVsdGlwbGljYXRpb24uCi0g
IC8vIEhvd2V2ZXI6IHRoZSByZXN1bHRpbmcgbnVtYmVyIG9ubHkgY29udGFpbnMgNjQgYml0cy4g
VGhlIGxlYXN0Ci0gIC8vIHNpZ25pZmljYW50IDY0IGJpdHMgYXJlIG9ubHkgdXNlZCBmb3Igcm91
bmRpbmcgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgNjQKLSAgLy8gYml0cy4KLSAgY29uc3QgdWludDY0
X3Qga00zMiA9IDB4RkZGRkZGRkZVOwotICB1aW50NjRfdCBhID0gZl8gPj4gMzI7Ci0gIHVpbnQ2
NF90IGIgPSBmXyAmIGtNMzI7Ci0gIHVpbnQ2NF90IGMgPSBvdGhlci5mXyA+PiAzMjsKLSAgdWlu
dDY0X3QgZCA9IG90aGVyLmZfICYga00zMjsKLSAgdWludDY0X3QgYWMgPSBhICogYzsKLSAgdWlu
dDY0X3QgYmMgPSBiICogYzsKLSAgdWludDY0X3QgYWQgPSBhICogZDsKLSAgdWludDY0X3QgYmQg
PSBiICogZDsKLSAgdWludDY0X3QgdG1wID0gKGJkID4+IDMyKSArIChhZCAmIGtNMzIpICsgKGJj
ICYga00zMik7Ci0gIC8vIEJ5IGFkZGluZyAxVSA8PCAzMSB0byB0bXAgd2Ugcm91bmQgdGhlIGZp
bmFsIHJlc3VsdC4KLSAgLy8gSGFsZndheSBjYXNlcyB3aWxsIGJlIHJvdW5kIHVwLgotICB0bXAg
Kz0gMVUgPDwgMzE7Ci0gIHVpbnQ2NF90IHJlc3VsdF9mID0gYWMgKyAoYWQgPj4gMzIpICsgKGJj
ID4+IDMyKSArICh0bXAgPj4gMzIpOwotICBlXyArPSBvdGhlci5lXyArIDY0OwotICBmXyA9IHJl
c3VsdF9mOwotfQotCi19ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2RvdWJsZS1jb252ZXJzaW9u
L2RvdWJsZS1jb252ZXJzaW9uL2RpeS1mcC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNpb24vZGl5LWZwLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZGYzNDY3NGVlMjVjMzQ5Njk0MDZkNmY0YmRj
ZmIyMTU5MjQ3MzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24v
ZG91YmxlLWNvbnZlcnNpb24vZGl5LWZwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBA
QAotLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyAgICAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gICAg
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkCi0vLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAg
ICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLS8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIERPVUJMRV9DT05WRVJTSU9O
X0RJWV9GUF9IXwotI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9ESVlfRlBfSF8KLQotI2luY2x1
ZGUgInV0aWxzLmgiCi0KLW5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7Ci0KLS8vIFRoaXMg
IkRvIEl0IFlvdXJzZWxmIEZsb2F0aW5nIFBvaW50IiBjbGFzcyBpbXBsZW1lbnRzIGEgZmxvYXRp
bmctcG9pbnQgbnVtYmVyCi0vLyB3aXRoIGEgdWludDY0IHNpZ25pZmljYW5kIGFuZCBhbiBpbnQg
ZXhwb25lbnQuIE5vcm1hbGl6ZWQgRGl5RnAgbnVtYmVycyB3aWxsCi0vLyBoYXZlIHRoZSBtb3N0
IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgc2lnbmlmaWNhbmQgc2V0LgotLy8gTXVsdGlwbGljYXRp
b24gYW5kIFN1YnRyYWN0aW9uIGRvIG5vdCBub3JtYWxpemUgdGhlaXIgcmVzdWx0cy4KLS8vIERp
eUZwIGFyZSBub3QgZGVzaWduZWQgdG8gY29udGFpbiBzcGVjaWFsIGRvdWJsZXMgKE5hTiBhbmQg
SW5maW5pdHkpLgotY2xhc3MgRGl5RnAgewotIHB1YmxpYzoKLSAgc3RhdGljIGNvbnN0IGludCBr
U2lnbmlmaWNhbmRTaXplID0gNjQ7Ci0KLSAgRGl5RnAoKSA6IGZfKDApLCBlXygwKSB7fQotICBE
aXlGcCh1aW50NjRfdCBzaWduaWZpY2FuZCwgaW50IGV4cG9uZW50KSA6IGZfKHNpZ25pZmljYW5k
KSwgZV8oZXhwb25lbnQpIHt9Ci0KLSAgLy8gdGhpcyA9IHRoaXMgLSBvdGhlci4KLSAgLy8gVGhl
IGV4cG9uZW50cyBvZiBib3RoIG51bWJlcnMgbXVzdCBiZSB0aGUgc2FtZSBhbmQgdGhlIHNpZ25p
ZmljYW5kIG9mIHRoaXMKLSAgLy8gbXVzdCBiZSBiaWdnZXIgdGhhbiB0aGUgc2lnbmlmaWNhbmQg
b2Ygb3RoZXIuCi0gIC8vIFRoZSByZXN1bHQgd2lsbCBub3QgYmUgbm9ybWFsaXplZC4KLSAgdm9p
ZCBTdWJ0cmFjdChjb25zdCBEaXlGcCYgb3RoZXIpIHsKLSAgICBBU1NFUlQoZV8gPT0gb3RoZXIu
ZV8pOwotICAgIEFTU0VSVChmXyA+PSBvdGhlci5mXyk7Ci0gICAgZl8gLT0gb3RoZXIuZl87Ci0g
IH0KLQotICAvLyBSZXR1cm5zIGEgLSBiLgotICAvLyBUaGUgZXhwb25lbnRzIG9mIGJvdGggbnVt
YmVycyBtdXN0IGJlIHRoZSBzYW1lIGFuZCB0aGlzIG11c3QgYmUgYmlnZ2VyCi0gIC8vIHRoYW4g
b3RoZXIuIFRoZSByZXN1bHQgd2lsbCBub3QgYmUgbm9ybWFsaXplZC4KLSAgc3RhdGljIERpeUZw
IE1pbnVzKGNvbnN0IERpeUZwJiBhLCBjb25zdCBEaXlGcCYgYikgewotICAgIERpeUZwIHJlc3Vs
dCA9IGE7Ci0gICAgcmVzdWx0LlN1YnRyYWN0KGIpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0K
LQotCi0gIC8vIHRoaXMgPSB0aGlzICogb3RoZXIuCi0gIHZvaWQgTXVsdGlwbHkoY29uc3QgRGl5
RnAmIG90aGVyKTsKLQotICAvLyByZXR1cm5zIGEgKiBiOwotICBzdGF0aWMgRGl5RnAgVGltZXMo
Y29uc3QgRGl5RnAmIGEsIGNvbnN0IERpeUZwJiBiKSB7Ci0gICAgRGl5RnAgcmVzdWx0ID0gYTsK
LSAgICByZXN1bHQuTXVsdGlwbHkoYik7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHZv
aWQgTm9ybWFsaXplKCkgewotICAgIEFTU0VSVChmXyAhPSAwKTsKLSAgICB1aW50NjRfdCBzaWdu
aWZpY2FuZCA9IGZfOwotICAgIGludCBleHBvbmVudCA9IGVfOwotCi0gICAgLy8gVGhpcyBtZXRo
b2QgaXMgbWFpbmx5IGNhbGxlZCBmb3Igbm9ybWFsaXppbmcgYm91bmRhcmllcy4gSW4gZ2VuZXJh
bAotICAgIC8vIGJvdW5kYXJpZXMgbmVlZCB0byBiZSBzaGlmdGVkIGJ5IDEwIGJpdHMuIFdlIHRo
dXMgb3B0aW1pemUgZm9yIHRoaXMgY2FzZS4KLSAgICBjb25zdCB1aW50NjRfdCBrMTBNU0JpdHMg
PSBVSU5UNjRfMlBBUlRfQygweEZGQzAwMDAwLCAwMDAwMDAwMCk7Ci0gICAgd2hpbGUgKChzaWdu
aWZpY2FuZCAmIGsxME1TQml0cykgPT0gMCkgewotICAgICAgc2lnbmlmaWNhbmQgPDw9IDEwOwot
ICAgICAgZXhwb25lbnQgLT0gMTA7Ci0gICAgfQotICAgIHdoaWxlICgoc2lnbmlmaWNhbmQgJiBr
VWludDY0TVNCKSA9PSAwKSB7Ci0gICAgICBzaWduaWZpY2FuZCA8PD0gMTsKLSAgICAgIGV4cG9u
ZW50LS07Ci0gICAgfQotICAgIGZfID0gc2lnbmlmaWNhbmQ7Ci0gICAgZV8gPSBleHBvbmVudDsK
LSAgfQotCi0gIHN0YXRpYyBEaXlGcCBOb3JtYWxpemUoY29uc3QgRGl5RnAmIGEpIHsKLSAgICBE
aXlGcCByZXN1bHQgPSBhOwotICAgIHJlc3VsdC5Ob3JtYWxpemUoKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotICB9Ci0KLSAgdWludDY0X3QgZigpIGNvbnN0IHsgcmV0dXJuIGZfOyB9Ci0gIGludCBl
KCkgY29uc3QgeyByZXR1cm4gZV87IH0KLQotICB2b2lkIHNldF9mKHVpbnQ2NF90IG5ld192YWx1
ZSkgeyBmXyA9IG5ld192YWx1ZTsgfQotICB2b2lkIHNldF9lKGludCBuZXdfdmFsdWUpIHsgZV8g
PSBuZXdfdmFsdWU7IH0KLQotIHByaXZhdGU6Ci0gIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrVWlu
dDY0TVNCID0gVUlOVDY0XzJQQVJUX0MoMHg4MDAwMDAwMCwgMDAwMDAwMDApOwotCi0gIHVpbnQ2
NF90IGZfOwotICBpbnQgZV87Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNp
b24KLQotI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9ESVlfRlBfSF8KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2RvdWJsZS1jb252ZXJzaW9uL2Rv
dWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uLmNjIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNpb24vZG91
YmxlLWNvbnZlcnNpb24uY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMjFhMDEy
NGM0M2RlY2RmZWYyNjc5Nzk0Yjc2Nzg1OTBlNjkzMjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNpb24u
Y2MKKysrIC9kZXYvbnVsbApAQCAtMSw5ODIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTAgdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0vLyAgICAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLS8vICAgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVk
ZSAiZG91YmxlLWNvbnZlcnNpb24uaCIKLQotI2luY2x1ZGUgImJpZ251bS1kdG9hLmgiCi0jaW5j
bHVkZSAiZmFzdC1kdG9hLmgiCi0jaW5jbHVkZSAiZml4ZWQtZHRvYS5oIgotI2luY2x1ZGUgImll
ZWUuaCIKLSNpbmNsdWRlICJzdHJ0b2QuaCIKLSNpbmNsdWRlICJ1dGlscy5oIgotCi1uYW1lc3Bh
Y2UgZG91YmxlX2NvbnZlcnNpb24gewotCi1jb25zdCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciYg
RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKSB7Ci0gIGludCBm
bGFncyA9IFVOSVFVRV9aRVJPIHwgRU1JVF9QT1NJVElWRV9FWFBPTkVOVF9TSUdOOwotICBzdGF0
aWMgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIgY29udmVydGVyKGZsYWdzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZpbml0eSIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hTiIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC02LCAyMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA2LCAwKTsKLSAgcmV0dXJuIGNvbnZlcnRlcjsKLX0KLQotCi1ib29sIERvdWJs
ZVRvU3RyaW5nQ29udmVydGVyOjpIYW5kbGVTcGVjaWFsVmFsdWVzKAotICAgIGRvdWJsZSB2YWx1
ZSwKLSAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgewotICBEb3VibGUg
ZG91YmxlX2luc3BlY3QodmFsdWUpOwotICBpZiAoZG91YmxlX2luc3BlY3QuSXNJbmZpbml0ZSgp
KSB7Ci0gICAgaWYgKGluZmluaXR5X3N5bWJvbF8gPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwotICAg
IGlmICh2YWx1ZSA8IDApIHsKLSAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0n
KTsKLSAgICB9Ci0gICAgcmVzdWx0X2J1aWxkZXItPkFkZFN0cmluZyhpbmZpbml0eV9zeW1ib2xf
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBpZiAoZG91YmxlX2luc3BlY3QuSXNOYW4oKSkg
ewotICAgIGlmIChuYW5fc3ltYm9sXyA9PSBOVUxMKSByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0
X2J1aWxkZXItPkFkZFN0cmluZyhuYW5fc3ltYm9sXyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0K
LSAgcmV0dXJuIGZhbHNlOwotfQotCi0KLXZvaWQgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkNy
ZWF0ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oCi0gICAgY29uc3QgY2hhciogZGVjaW1hbF9k
aWdpdHMsCi0gICAgaW50IGxlbmd0aCwKLSAgICBpbnQgZXhwb25lbnQsCi0gICAgU3RyaW5nQnVp
bGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKLSAgQVNTRVJUKGxlbmd0aCAhPSAwKTsKLSAg
cmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcihkZWNpbWFsX2RpZ2l0c1swXSk7Ci0gIGlmIChs
ZW5ndGggIT0gMSkgewotICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy4nKTsKLSAg
ICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKCZkZWNpbWFsX2RpZ2l0c1sxXSwgbGVuZ3Ro
LTEpOwotICB9Ci0gIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoZXhwb25lbnRfY2hhcmFj
dGVyXyk7Ci0gIGlmIChleHBvbmVudCA8IDApIHsKLSAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hh
cmFjdGVyKCctJyk7Ci0gICAgZXhwb25lbnQgPSAtZXhwb25lbnQ7Ci0gIH0gZWxzZSB7Ci0gICAg
aWYgKChmbGFnc18gJiBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04pICE9IDApIHsKLSAgICAg
IHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJysnKTsKLSAgICB9Ci0gIH0KLSAgaWYgKGV4
cG9uZW50ID09IDApIHsKLSAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcwJyk7Ci0g
ICAgcmV0dXJuOwotICB9Ci0gIEFTU0VSVChleHBvbmVudCA8IDFlNCk7Ci0gIGNvbnN0IGludCBr
TWF4RXhwb25lbnRMZW5ndGggPSA1OwotICBjaGFyIGJ1ZmZlcltrTWF4RXhwb25lbnRMZW5ndGgg
KyAxXTsKLSAgYnVmZmVyW2tNYXhFeHBvbmVudExlbmd0aF0gPSAnXDAnOwotICBpbnQgZmlyc3Rf
Y2hhcl9wb3MgPSBrTWF4RXhwb25lbnRMZW5ndGg7Ci0gIHdoaWxlIChleHBvbmVudCA+IDApIHsK
LSAgICBidWZmZXJbLS1maXJzdF9jaGFyX3Bvc10gPSAnMCcgKyAoZXhwb25lbnQgJSAxMCk7Ci0g
ICAgZXhwb25lbnQgLz0gMTA7Ci0gIH0KLSAgcmVzdWx0X2J1aWxkZXItPkFkZFN1YnN0cmluZygm
YnVmZmVyW2ZpcnN0X2NoYXJfcG9zXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
TWF4RXhwb25lbnRMZW5ndGggLSBmaXJzdF9jaGFyX3Bvcyk7Ci19Ci0KLQotdm9pZCBEb3VibGVU
b1N0cmluZ0NvbnZlcnRlcjo6Q3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKAotICAgIGNvbnN0
IGNoYXIqIGRlY2ltYWxfZGlnaXRzLAotICAgIGludCBsZW5ndGgsCi0gICAgaW50IGRlY2ltYWxf
cG9pbnQsCi0gICAgaW50IGRpZ2l0c19hZnRlcl9wb2ludCwKLSAgICBTdHJpbmdCdWlsZGVyKiBy
ZXN1bHRfYnVpbGRlcikgY29uc3QgewotICAvLyBDcmVhdGUgYSByZXByZXNlbnRhdGlvbiB0aGF0
IGlzIHBhZGRlZCB3aXRoIHplcm9zIGlmIG5lZWRlZC4KLSAgaWYgKGRlY2ltYWxfcG9pbnQgPD0g
MCkgewotICAgICAgLy8gIjAuMDAwMDBkZWNpbWFsX3JlcCIgb3IgIjAuMDAwZGVjaW1hbF9yZXAw
MCIuCi0gICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignMCcpOwotICAgIGlmIChkaWdp
dHNfYWZ0ZXJfcG9pbnQgPiAwKSB7Ci0gICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVy
KCcuJyk7Ci0gICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFkZGluZygnMCcsIC1kZWNpbWFsX3Bv
aW50KTsKLSAgICAgIEFTU0VSVChsZW5ndGggPD0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKC1kZWNp
bWFsX3BvaW50KSk7Ci0gICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKGRlY2ltYWxf
ZGlnaXRzLCBsZW5ndGgpOwotICAgICAgaW50IHJlbWFpbmluZ19kaWdpdHMgPSBkaWdpdHNfYWZ0
ZXJfcG9pbnQgLSAoLWRlY2ltYWxfcG9pbnQpIC0gbGVuZ3RoOwotICAgICAgcmVzdWx0X2J1aWxk
ZXItPkFkZFBhZGRpbmcoJzAnLCByZW1haW5pbmdfZGlnaXRzKTsKLSAgICB9Ci0gIH0gZWxzZSBp
ZiAoZGVjaW1hbF9wb2ludCA+PSBsZW5ndGgpIHsKLSAgICAvLyAiZGVjaW1hbF9yZXAwMDAwLjAw
MDAwIiBvciAiZGVjaW1hbF9yZXAuMDAwMCIuCi0gICAgcmVzdWx0X2J1aWxkZXItPkFkZFN1YnN0
cmluZyhkZWNpbWFsX2RpZ2l0cywgbGVuZ3RoKTsKLSAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFk
ZGluZygnMCcsIGRlY2ltYWxfcG9pbnQgLSBsZW5ndGgpOwotICAgIGlmIChkaWdpdHNfYWZ0ZXJf
cG9pbnQgPiAwKSB7Ci0gICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7Ci0g
ICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFkZGluZygnMCcsIGRpZ2l0c19hZnRlcl9wb2ludCk7
Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8vICJkZWNpbWEubF9yZXAwMDAiLgotICAgIEFTU0VS
VChkaWdpdHNfYWZ0ZXJfcG9pbnQgPiAwKTsKLSAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3Ry
aW5nKGRlY2ltYWxfZGlnaXRzLCBkZWNpbWFsX3BvaW50KTsKLSAgICByZXN1bHRfYnVpbGRlci0+
QWRkQ2hhcmFjdGVyKCcuJyk7Ci0gICAgQVNTRVJUKGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQgPD0g
ZGlnaXRzX2FmdGVyX3BvaW50KTsKLSAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKCZk
ZWNpbWFsX2RpZ2l0c1tkZWNpbWFsX3BvaW50XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQpOwotICAgIGludCByZW1haW5pbmdfZGlnaXRz
ID0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQpOwotICAgIHJl
c3VsdF9idWlsZGVyLT5BZGRQYWRkaW5nKCcwJywgcmVtYWluaW5nX2RpZ2l0cyk7Ci0gIH0KLSAg
aWYgKGRpZ2l0c19hZnRlcl9wb2ludCA9PSAwKSB7Ci0gICAgaWYgKChmbGFnc18gJiBFTUlUX1RS
QUlMSU5HX0RFQ0lNQUxfUE9JTlQpICE9IDApIHsKLSAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRD
aGFyYWN0ZXIoJy4nKTsKLSAgICB9Ci0gICAgaWYgKChmbGFnc18gJiBFTUlUX1RSQUlMSU5HX1pF
Uk9fQUZURVJfUE9JTlQpICE9IDApIHsKLSAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0
ZXIoJzAnKTsKLSAgICB9Ci0gIH0KLX0KLQotCi1ib29sIERvdWJsZVRvU3RyaW5nQ29udmVydGVy
OjpUb1Nob3J0ZXN0SWVlZU51bWJlcigKLSAgICBkb3VibGUgdmFsdWUsCi0gICAgU3RyaW5nQnVp
bGRlciogcmVzdWx0X2J1aWxkZXIsCi0gICAgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkR0b2FN
b2RlIG1vZGUpIGNvbnN0IHsKLSAgQVNTRVJUKG1vZGUgPT0gU0hPUlRFU1QgfHwgbW9kZSA9PSBT
SE9SVEVTVF9TSU5HTEUpOwotICBpZiAoRG91YmxlKHZhbHVlKS5Jc1NwZWNpYWwoKSkgewotICAg
IHJldHVybiBIYW5kbGVTcGVjaWFsVmFsdWVzKHZhbHVlLCByZXN1bHRfYnVpbGRlcik7Ci0gIH0K
LQotICBpbnQgZGVjaW1hbF9wb2ludDsKLSAgYm9vbCBzaWduOwotICBjb25zdCBpbnQga0RlY2lt
YWxSZXBDYXBhY2l0eSA9IGtCYXNlMTBNYXhpbWFsTGVuZ3RoICsgMTsKLSAgY2hhciBkZWNpbWFs
X3JlcFtrRGVjaW1hbFJlcENhcGFjaXR5XTsKLSAgaW50IGRlY2ltYWxfcmVwX2xlbmd0aDsKLQot
ICBEb3VibGVUb0FzY2lpKHZhbHVlLCBtb2RlLCAwLCBkZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBD
YXBhY2l0eSwKLSAgICAgICAgICAgICAgICAmc2lnbiwgJmRlY2ltYWxfcmVwX2xlbmd0aCwgJmRl
Y2ltYWxfcG9pbnQpOwotCi0gIGJvb2wgdW5pcXVlX3plcm8gPSAoZmxhZ3NfICYgVU5JUVVFX1pF
Uk8pICE9IDA7Ci0gIGlmIChzaWduICYmICh2YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkg
ewotICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsKLSAgfQotCi0gIGludCBl
eHBvbmVudCA9IGRlY2ltYWxfcG9pbnQgLSAxOwotICBpZiAoKGRlY2ltYWxfaW5fc2hvcnRlc3Rf
bG93XyA8PSBleHBvbmVudCkgJiYKLSAgICAgIChleHBvbmVudCA8IGRlY2ltYWxfaW5fc2hvcnRl
c3RfaGlnaF8pKSB7Ci0gICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGRlY2ltYWxfcmVw
LCBkZWNpbWFsX3JlcF9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
Y2ltYWxfcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heCgwLCBkZWNp
bWFsX3JlcF9sZW5ndGggLSBkZWNpbWFsX3BvaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0X2J1aWxkZXIpOwotICB9IGVsc2UgewotICAgIENyZWF0ZUV4cG9uZW50
aWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsIGRlY2ltYWxfcmVwX2xlbmd0aCwgZXhwb25l
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7
Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLQotYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRl
cjo6VG9GaXhlZChkb3VibGUgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgewotICBBU1NF
UlQoa01heEZpeGVkRGlnaXRzQmVmb3JlUG9pbnQgPT0gNjApOwotICBjb25zdCBkb3VibGUga0Zp
cnN0Tm9uRml4ZWQgPSAxZTYwOwotCi0gIGlmIChEb3VibGUodmFsdWUpLklzU3BlY2lhbCgpKSB7
Ci0gICAgcmV0dXJuIEhhbmRsZVNwZWNpYWxWYWx1ZXModmFsdWUsIHJlc3VsdF9idWlsZGVyKTsK
LSAgfQotCi0gIGlmIChyZXF1ZXN0ZWRfZGlnaXRzID4ga01heEZpeGVkRGlnaXRzQWZ0ZXJQb2lu
dCkgcmV0dXJuIGZhbHNlOwotICBpZiAodmFsdWUgPj0ga0ZpcnN0Tm9uRml4ZWQgfHwgdmFsdWUg
PD0gLWtGaXJzdE5vbkZpeGVkKSByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gRmluZCBhIHN1ZmZpY2ll
bnRseSBwcmVjaXNlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygbi4KLSAgaW50IGRlY2ltYWxf
cG9pbnQ7Ci0gIGJvb2wgc2lnbjsKLSAgLy8gQWRkIHNwYWNlIGZvciB0aGUgJ1wwJyBieXRlLgot
ICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9Ci0gICAgICBrTWF4Rml4ZWREaWdpdHNC
ZWZvcmVQb2ludCArIGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQgKyAxOwotICBjaGFyIGRlY2lt
YWxfcmVwW2tEZWNpbWFsUmVwQ2FwYWNpdHldOwotICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOwot
ICBEb3VibGVUb0FzY2lpKHZhbHVlLCBGSVhFRCwgcmVxdWVzdGVkX2RpZ2l0cywKLSAgICAgICAg
ICAgICAgICBkZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKLSAgICAgICAgICAgICAg
ICAmc2lnbiwgJmRlY2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQpOwotCi0gIGJvb2wg
dW5pcXVlX3plcm8gPSAoKGZsYWdzXyAmIFVOSVFVRV9aRVJPKSAhPSAwKTsKLSAgaWYgKHNpZ24g
JiYgKHZhbHVlICE9IDAuMCB8fCAhdW5pcXVlX3plcm8pKSB7Ci0gICAgcmVzdWx0X2J1aWxkZXIt
PkFkZENoYXJhY3RlcignLScpOwotICB9Ci0KLSAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9u
KGRlY2ltYWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsIGRlY2ltYWxfcG9pbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRfZGlnaXRzLCByZXN1bHRfYnVpbGRlcik7
Ci0gIHJldHVybiB0cnVlOwotfQotCi0KLWJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OlRv
RXhwb25lbnRpYWwoCi0gICAgZG91YmxlIHZhbHVlLAotICAgIGludCByZXF1ZXN0ZWRfZGlnaXRz
LAotICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7Ci0gIGlmIChEb3Vi
bGUodmFsdWUpLklzU3BlY2lhbCgpKSB7Ci0gICAgcmV0dXJuIEhhbmRsZVNwZWNpYWxWYWx1ZXMo
dmFsdWUsIHJlc3VsdF9idWlsZGVyKTsKLSAgfQotCi0gIGlmIChyZXF1ZXN0ZWRfZGlnaXRzIDwg
LTEpIHJldHVybiBmYWxzZTsKLSAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgPiBrTWF4RXhwb25lbnRp
YWxEaWdpdHMpIHJldHVybiBmYWxzZTsKLQotICBpbnQgZGVjaW1hbF9wb2ludDsKLSAgYm9vbCBz
aWduOwotICAvLyBBZGQgc3BhY2UgZm9yIGRpZ2l0IGJlZm9yZSB0aGUgZGVjaW1hbCBwb2ludCBh
bmQgdGhlICdcMCcgY2hhcmFjdGVyLgotICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9
IGtNYXhFeHBvbmVudGlhbERpZ2l0cyArIDI7Ci0gIEFTU0VSVChrRGVjaW1hbFJlcENhcGFjaXR5
ID4ga0Jhc2UxME1heGltYWxMZW5ndGgpOwotICBjaGFyIGRlY2ltYWxfcmVwW2tEZWNpbWFsUmVw
Q2FwYWNpdHldOwotICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOwotCi0gIGlmIChyZXF1ZXN0ZWRf
ZGlnaXRzID09IC0xKSB7Ci0gICAgRG91YmxlVG9Bc2NpaSh2YWx1ZSwgU0hPUlRFU1QsIDAsCi0g
ICAgICAgICAgICAgICAgICBkZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKLSAgICAg
ICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9yZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7
Ci0gIH0gZWxzZSB7Ci0gICAgRG91YmxlVG9Bc2NpaSh2YWx1ZSwgUFJFQ0lTSU9OLCByZXF1ZXN0
ZWRfZGlnaXRzICsgMSwKLSAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBrRGVjaW1hbFJl
cENhcGFjaXR5LAotICAgICAgICAgICAgICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgs
ICZkZWNpbWFsX3BvaW50KTsKLSAgICBBU1NFUlQoZGVjaW1hbF9yZXBfbGVuZ3RoIDw9IHJlcXVl
c3RlZF9kaWdpdHMgKyAxKTsKLQotICAgIGZvciAoaW50IGkgPSBkZWNpbWFsX3JlcF9sZW5ndGg7
IGkgPCByZXF1ZXN0ZWRfZGlnaXRzICsgMTsgKytpKSB7Ci0gICAgICBkZWNpbWFsX3JlcFtpXSA9
ICcwJzsKLSAgICB9Ci0gICAgZGVjaW1hbF9yZXBfbGVuZ3RoID0gcmVxdWVzdGVkX2RpZ2l0cyAr
IDE7Ci0gIH0KLQotICBib29sIHVuaXF1ZV96ZXJvID0gKChmbGFnc18gJiBVTklRVUVfWkVSTykg
IT0gMCk7Ci0gIGlmIChzaWduICYmICh2YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgewot
ICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsKLSAgfQotCi0gIGludCBleHBv
bmVudCA9IGRlY2ltYWxfcG9pbnQgLSAxOwotICBDcmVhdGVFeHBvbmVudGlhbFJlcHJlc2VudGF0
aW9uKGRlY2ltYWxfcmVwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2lt
YWxfcmVwX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7Ci0g
IHJldHVybiB0cnVlOwotfQotCi0KLWJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OlRvUHJl
Y2lzaW9uKGRvdWJsZSB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBwcmVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgewotICBpZiAoRG91
YmxlKHZhbHVlKS5Jc1NwZWNpYWwoKSkgewotICAgIHJldHVybiBIYW5kbGVTcGVjaWFsVmFsdWVz
KHZhbHVlLCByZXN1bHRfYnVpbGRlcik7Ci0gIH0KLQotICBpZiAocHJlY2lzaW9uIDwga01pblBy
ZWNpc2lvbkRpZ2l0cyB8fCBwcmVjaXNpb24gPiBrTWF4UHJlY2lzaW9uRGlnaXRzKSB7Ci0gICAg
cmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gRmluZCBhIHN1ZmZpY2llbnRseSBwcmVjaXNlIGRl
Y2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygbi4KLSAgaW50IGRlY2ltYWxfcG9pbnQ7Ci0gIGJvb2wg
c2lnbjsKLSAgLy8gQWRkIG9uZSBmb3IgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLgot
ICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9IGtNYXhQcmVjaXNpb25EaWdpdHMgKyAx
OwotICBjaGFyIGRlY2ltYWxfcmVwW2tEZWNpbWFsUmVwQ2FwYWNpdHldOwotICBpbnQgZGVjaW1h
bF9yZXBfbGVuZ3RoOwotCi0gIERvdWJsZVRvQXNjaWkodmFsdWUsIFBSRUNJU0lPTiwgcHJlY2lz
aW9uLAotICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBrRGVjaW1hbFJlcENhcGFjaXR5LAot
ICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9yZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2lu
dCk7Ci0gIEFTU0VSVChkZWNpbWFsX3JlcF9sZW5ndGggPD0gcHJlY2lzaW9uKTsKLQotICBib29s
IHVuaXF1ZV96ZXJvID0gKChmbGFnc18gJiBVTklRVUVfWkVSTykgIT0gMCk7Ci0gIGlmIChzaWdu
ICYmICh2YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgewotICAgIHJlc3VsdF9idWlsZGVy
LT5BZGRDaGFyYWN0ZXIoJy0nKTsKLSAgfQotCi0gIC8vIFRoZSBleHBvbmVudCBpZiB3ZSBwcmlu
dCB0aGUgbnVtYmVyIGFzIHgueHhleXl5LiBUaGF0IGlzIHdpdGggdGhlCi0gIC8vIGRlY2ltYWwg
cG9pbnQgYWZ0ZXIgdGhlIGZpcnN0IGRpZ2l0LgotICBpbnQgZXhwb25lbnQgPSBkZWNpbWFsX3Bv
aW50IC0gMTsKLQotICBpbnQgZXh0cmFfemVybyA9ICgoZmxhZ3NfICYgRU1JVF9UUkFJTElOR19a
RVJPX0FGVEVSX1BPSU5UKSAhPSAwKSA/IDEgOiAwOwotICBpZiAoKC1kZWNpbWFsX3BvaW50ICsg
MSA+IG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlXykgfHwKLSAg
ICAgIChkZWNpbWFsX3BvaW50IC0gcHJlY2lzaW9uICsgZXh0cmFfemVybyA+Ci0gICAgICAgbWF4
X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlXykpIHsKLSAgICAvLyBG
aWxsIGJ1ZmZlciB0byBjb250YWluICdwcmVjaXNpb24nIGRpZ2l0cy4KLSAgICAvLyBVc3VhbGx5
IHRoZSBidWZmZXIgaXMgYWxyZWFkeSBhdCB0aGUgY29ycmVjdCBsZW5ndGgsIGJ1dCAnRG91Ymxl
VG9Bc2NpaScKLSAgICAvLyBpcyBhbGxvd2VkIHRvIHJldHVybiBsZXNzIGNoYXJhY3RlcnMuCi0g
ICAgZm9yIChpbnQgaSA9IGRlY2ltYWxfcmVwX2xlbmd0aDsgaSA8IHByZWNpc2lvbjsgKytpKSB7
Ci0gICAgICBkZWNpbWFsX3JlcFtpXSA9ICcwJzsKLSAgICB9Ci0KLSAgICBDcmVhdGVFeHBvbmVu
dGlhbFJlcHJlc2VudGF0aW9uKGRlY2ltYWxfcmVwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRf
YnVpbGRlcik7Ci0gIH0gZWxzZSB7Ci0gICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGRl
Y2ltYWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsIGRlY2ltYWxfcG9pbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1heCgwLCBwcmVjaXNpb24gLSBkZWNpbWFsX3BvaW50KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIpOwotICB9Ci0g
IHJldHVybiB0cnVlOwotfQotCi0KLXN0YXRpYyBCaWdudW1EdG9hTW9kZSBEdG9hVG9CaWdudW1E
dG9hTW9kZSgKLSAgICBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RHRvYU1vZGUgZHRvYV9tb2Rl
KSB7Ci0gIHN3aXRjaCAoZHRvYV9tb2RlKSB7Ci0gICAgY2FzZSBEb3VibGVUb1N0cmluZ0NvbnZl
cnRlcjo6U0hPUlRFU1Q6ICByZXR1cm4gQklHTlVNX0RUT0FfU0hPUlRFU1Q7Ci0gICAgY2FzZSBE
b3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6U0hPUlRFU1RfU0lOR0xFOgotICAgICAgICByZXR1cm4g
QklHTlVNX0RUT0FfU0hPUlRFU1RfU0lOR0xFOwotICAgIGNhc2UgRG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXI6OkZJWEVEOiAgICAgcmV0dXJuIEJJR05VTV9EVE9BX0ZJWEVEOwotICAgIGNhc2UgRG91
YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OlBSRUNJU0lPTjogcmV0dXJuIEJJR05VTV9EVE9BX1BSRUNJ
U0lPTjsKLSAgICBkZWZhdWx0OgotICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgfQotfQotCi0KLXZv
aWQgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkRvdWJsZVRvQXNjaWkoZG91YmxlIHYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER0b2FNb2RlIG1vZGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRf
ZGlnaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
KiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBidWZmZXJfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sKiBzaWduLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQqIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50KiBwb2ludCkgewotICBWZWN0b3I8Y2hhcj4gdmVjdG9yKGJ1ZmZlciwgYnVmZmVy
X2xlbmd0aCk7Ci0gIEFTU0VSVCghRG91YmxlKHYpLklzU3BlY2lhbCgpKTsKLSAgQVNTRVJUKG1v
ZGUgPT0gU0hPUlRFU1QgfHwgbW9kZSA9PSBTSE9SVEVTVF9TSU5HTEUgfHwgcmVxdWVzdGVkX2Rp
Z2l0cyA+PSAwKTsKLQotICBpZiAoRG91YmxlKHYpLlNpZ24oKSA8IDApIHsKLSAgICAqc2lnbiA9
IHRydWU7Ci0gICAgdiA9IC12OwotICB9IGVsc2UgewotICAgICpzaWduID0gZmFsc2U7Ci0gIH0K
LQotICBpZiAobW9kZSA9PSBQUkVDSVNJT04gJiYgcmVxdWVzdGVkX2RpZ2l0cyA9PSAwKSB7Ci0g
ICAgdmVjdG9yWzBdID0gJ1wwJzsKLSAgICAqbGVuZ3RoID0gMDsKLSAgICByZXR1cm47Ci0gIH0K
LQotICBpZiAodiA9PSAwKSB7Ci0gICAgdmVjdG9yWzBdID0gJzAnOwotICAgIHZlY3RvclsxXSA9
ICdcMCc7Ci0gICAgKmxlbmd0aCA9IDE7Ci0gICAgKnBvaW50ID0gMTsKLSAgICByZXR1cm47Ci0g
IH0KLQotICBib29sIGZhc3Rfd29ya2VkOwotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIFNI
T1JURVNUOgotICAgICAgZmFzdF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNUX0RUT0FfU0hPUlRF
U1QsIDAsIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNI
T1JURVNUX1NJTkdMRToKLSAgICAgIGZhc3Rfd29ya2VkID0gRmFzdER0b2EodiwgRkFTVF9EVE9B
X1NIT1JURVNUX1NJTkdMRSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9y
LCBsZW5ndGgsIHBvaW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRklYRUQ6Ci0gICAgICBm
YXN0X3dvcmtlZCA9IEZhc3RGaXhlZER0b2EodiwgcmVxdWVzdGVkX2RpZ2l0cywgdmVjdG9yLCBs
ZW5ndGgsIHBvaW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJFQ0lTSU9OOgotICAgICAg
ZmFzdF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNUX0RUT0FfUFJFQ0lTSU9OLCByZXF1ZXN0ZWRf
ZGlnaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IsIGxlbmd0aCwgcG9p
bnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGZhc3Rfd29ya2VkID0gZmFs
c2U7Ci0gICAgICBVTlJFQUNIQUJMRSgpOwotICB9Ci0gIGlmIChmYXN0X3dvcmtlZCkgcmV0dXJu
OwotCi0gIC8vIElmIHRoZSBmYXN0IGR0b2EgZGlkbid0IHN1Y2NlZWQgdXNlIHRoZSBzbG93ZXIg
YmlnbnVtIHZlcnNpb24uCi0gIEJpZ251bUR0b2FNb2RlIGJpZ251bV9tb2RlID0gRHRvYVRvQmln
bnVtRHRvYU1vZGUobW9kZSk7Ci0gIEJpZ251bUR0b2EodiwgYmlnbnVtX21vZGUsIHJlcXVlc3Rl
ZF9kaWdpdHMsIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7Ci0gIHZlY3RvclsqbGVuZ3RoXSA9ICdc
MCc7Ci19Ci0KLQotLy8gQ29uc3VtZXMgdGhlIGdpdmVuIHN1YnN0cmluZyBmcm9tIHRoZSBpdGVy
YXRvci4KLS8vIFJldHVybnMgZmFsc2UsIGlmIHRoZSBzdWJzdHJpbmcgZG9lcyBub3QgbWF0Y2gu
Ci10ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+Ci1zdGF0aWMgYm9vbCBDb25zdW1lU3ViU3RyaW5n
KEl0ZXJhdG9yKiBjdXJyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRv
ciBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN1YnN0cmlu
ZykgewotICBBU1NFUlQoKipjdXJyZW50ID09ICpzdWJzdHJpbmcpOwotICBmb3IgKHN1YnN0cmlu
ZysrOyAqc3Vic3RyaW5nICE9ICdcMCc7IHN1YnN0cmluZysrKSB7Ci0gICAgKysqY3VycmVudDsK
LSAgICBpZiAoKmN1cnJlbnQgPT0gZW5kIHx8ICoqY3VycmVudCAhPSAqc3Vic3RyaW5nKSByZXR1
cm4gZmFsc2U7Ci0gIH0KLSAgKysqY3VycmVudDsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLQotLy8g
TWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGluIGRlY2ltYWwgcmVwcmVzZW50
YXRpb24uCi0vLyBUaGUgbG9uZ2VzdCBwb3NzaWJsZSBkb3VibGUgaW4gZGVjaW1hbCByZXByZXNl
bnRhdGlvbiBpcwotLy8gKDJeNTMgLSAxKSAqIDIgXiAtMTA3NCB0aGF0IGlzICgyIF4gNTMgLSAx
KSAqIDUgXiAxMDc0IC8gMTAgXiAxMDc0Ci0vLyAoNzY4IGRpZ2l0cykuIElmIHdlIHBhcnNlIGEg
bnVtYmVyIHdob3NlIGZpcnN0IGRpZ2l0cyBhcmUgZXF1YWwgdG8gYQotLy8gbWVhbiBvZiAyIGFk
amFjZW50IGRvdWJsZXMgKHRoYXQgY291bGQgaGF2ZSB1cCB0byA3NjkgZGlnaXRzKSB0aGUgcmVz
dWx0Ci0vLyBtdXN0IGJlIHJvdW5kZWQgdG8gdGhlIGJpZ2dlciBvbmUgdW5sZXNzIHRoZSB0YWls
IGNvbnNpc3RzIG9mIHplcm9zLCBzbwotLy8gd2UgZG9uJ3QgbmVlZCB0byBwcmVzZXJ2ZSBhbGwg
dGhlIGRpZ2l0cy4KLWNvbnN0IGludCBrTWF4U2lnbmlmaWNhbnREaWdpdHMgPSA3NzI7Ci0KLQot
c3RhdGljIGNvbnN0IGNoYXIga1doaXRlc3BhY2VUYWJsZTdbXSA9IHsgMzIsIDEzLCAxMCwgOSwg
MTEsIDEyIH07Ci1zdGF0aWMgY29uc3QgaW50IGtXaGl0ZXNwYWNlVGFibGU3TGVuZ3RoID0gQVJS
QVlfU0laRShrV2hpdGVzcGFjZVRhYmxlNyk7Ci0KLQotc3RhdGljIGNvbnN0IHVjMTYga1doaXRl
c3BhY2VUYWJsZTE2W10gPSB7Ci0gIDE2MCwgODIzMiwgODIzMywgNTc2MCwgNjE1OCwgODE5Miwg
ODE5MywgODE5NCwgODE5NSwKLSAgODE5NiwgODE5NywgODE5OCwgODE5OSwgODIwMCwgODIwMSwg
ODIwMiwgODIzOSwgODI4NywgMTIyODgsIDY1Mjc5Ci19Owotc3RhdGljIGNvbnN0IGludCBrV2hp
dGVzcGFjZVRhYmxlMTZMZW5ndGggPSBBUlJBWV9TSVpFKGtXaGl0ZXNwYWNlVGFibGUxNik7Ci0K
LQotc3RhdGljIGJvb2wgaXNXaGl0ZXNwYWNlKGludCB4KSB7Ci0gIGlmICh4IDwgMTI4KSB7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrV2hpdGVzcGFjZVRhYmxlN0xlbmd0aDsgaSsrKSB7Ci0g
ICAgICBpZiAoa1doaXRlc3BhY2VUYWJsZTdbaV0gPT0geCkgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICB9IGVsc2UgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwga1doaXRlc3BhY2VUYWJsZTE2TGVu
Z3RoOyBpKyspIHsKLSAgICAgIGlmIChrV2hpdGVzcGFjZVRhYmxlMTZbaV0gPT0geCkgcmV0dXJu
IHRydWU7Ci0gICAgfQotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotCi0vLyBSZXR1cm5zIHRy
dWUgaWYgYSBub25zcGFjZSBmb3VuZCBhbmQgZmFsc2UgaWYgdGhlIGVuZCBoYXMgcmVhY2hlZC4K
LXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4KLXN0YXRpYyBpbmxpbmUgYm9vbCBBZHZhbmNlVG9O
b25zcGFjZShJdGVyYXRvciogY3VycmVudCwgSXRlcmF0b3IgZW5kKSB7Ci0gIHdoaWxlICgqY3Vy
cmVudCAhPSBlbmQpIHsKLSAgICBpZiAoIWlzV2hpdGVzcGFjZSgqKmN1cnJlbnQpKSByZXR1cm4g
dHJ1ZTsKLSAgICArKypjdXJyZW50OwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotCi1zdGF0
aWMgYm9vbCBpc0RpZ2l0KGludCB4LCBpbnQgcmFkaXgpIHsKLSAgcmV0dXJuICh4ID49ICcwJyAm
JiB4IDw9ICc5JyAmJiB4IDwgJzAnICsgcmFkaXgpCi0gICAgICB8fCAocmFkaXggPiAxMCAmJiB4
ID49ICdhJyAmJiB4IDwgJ2EnICsgcmFkaXggLSAxMCkKLSAgICAgIHx8IChyYWRpeCA+IDEwICYm
IHggPj0gJ0EnICYmIHggPCAnQScgKyByYWRpeCAtIDEwKTsKLX0KLQotCi1zdGF0aWMgZG91Ymxl
IFNpZ25lZFplcm8oYm9vbCBzaWduKSB7Ci0gIHJldHVybiBzaWduID8gLTAuMCA6IDAuMDsKLX0K
LQotCi0vLyBSZXR1cm5zIHRydWUgaWYgJ2MnIGlzIGEgZGVjaW1hbCBkaWdpdCB0aGF0IGlzIHZh
bGlkIGZvciB0aGUgZ2l2ZW4gcmFkaXguCi0vLwotLy8gVGhlIGZ1bmN0aW9uIGlzIHNtYWxsIGFu
ZCBjb3VsZCBiZSBpbmxpbmVkLCBidXQgVlMyMDEyIGVtaXR0ZWQgYSB3YXJuaW5nCi0vLyBiZWNh
dXNlIGl0IGNvbnN0YW50LXByb3BhZ2F0ZWQgdGhlIHJhZGl4IGFuZCBjb25jbHVkZWQgdGhhdCB0
aGUgbGFzdAotLy8gY29uZGl0aW9uIHdhcyBhbHdheXMgdHJ1ZS4gQnkgbW92aW5nIGl0IGludG8g
YSBzZXBhcmF0ZSBmdW5jdGlvbiB0aGUKLS8vIGNvbXBpbGVyIHdvdWxkbid0IHdhcm4gYW55bW9y
ZS4KLSNpZiBfTVNDX1ZFUgotI3ByYWdtYSBvcHRpbWl6ZSgiIixvZmYpCi1zdGF0aWMgYm9vbCBJ
c0RlY2ltYWxEaWdpdEZvclJhZGl4KGludCBjLCBpbnQgcmFkaXgpIHsKLSAgcmV0dXJuICcwJyA8
PSBjICYmIGMgPD0gJzknICYmIChjIC0gJzAnKSA8IHJhZGl4OwotfQotI3ByYWdtYSBvcHRpbWl6
ZSgiIixvbikKLSNlbHNlCi1zdGF0aWMgYm9vbCBpbmxpbmUgSXNEZWNpbWFsRGlnaXRGb3JSYWRp
eChpbnQgYywgaW50IHJhZGl4KSB7Ci0JcmV0dXJuICcwJyA8PSBjICYmIGMgPD0gJzknICYmIChj
IC0gJzAnKSA8IHJhZGl4OwotfQotI2VuZGlmCi0vLyBSZXR1cm5zIHRydWUgaWYgJ2MnIGlzIGEg
Y2hhcmFjdGVyIGRpZ2l0IHRoYXQgaXMgdmFsaWQgZm9yIHRoZSBnaXZlbiByYWRpeC4KLS8vIFRo
ZSAnYV9jaGFyYWN0ZXInIHNob3VsZCBiZSAnYScgb3IgJ0EnLgotLy8KLS8vIFRoZSBmdW5jdGlv
biBpcyBzbWFsbCBhbmQgY291bGQgYmUgaW5saW5lZCwgYnV0IFZTMjAxMiBlbWl0dGVkIGEgd2Fy
bmluZwotLy8gYmVjYXVzZSBpdCBjb25zdGFudC1wcm9wYWdhdGVkIHRoZSByYWRpeCBhbmQgY29u
Y2x1ZGVkIHRoYXQgdGhlIGZpcnN0Ci0vLyBjb25kaXRpb24gd2FzIGFsd2F5cyBmYWxzZS4gQnkg
bW92aW5nIGl0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0aGUKLS8vIGNvbXBpbGVyIHdvdWxk
bid0IHdhcm4gYW55bW9yZS4KLXN0YXRpYyBib29sIElzQ2hhcmFjdGVyRGlnaXRGb3JSYWRpeChp
bnQgYywgaW50IHJhZGl4LCBjaGFyIGFfY2hhcmFjdGVyKSB7Ci0gIHJldHVybiByYWRpeCA+IDEw
ICYmIGMgPj0gYV9jaGFyYWN0ZXIgJiYgYyA8IGFfY2hhcmFjdGVyICsgcmFkaXggLSAxMDsKLX0K
LQotCi0vLyBQYXJzaW5nIGludGVnZXJzIHdpdGggcmFkaXggMiwgNCwgOCwgMTYsIDMyLiBBc3N1
bWVzIGN1cnJlbnQgIT0gZW5kLgotdGVtcGxhdGUgPGludCByYWRpeF9sb2dfMiwgY2xhc3MgSXRl
cmF0b3I+Ci1zdGF0aWMgZG91YmxlIFJhZGl4U3RyaW5nVG9JZWVlKEl0ZXJhdG9yKiBjdXJyZW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlbmQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2lnbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhbGxvd190cmFpbGluZ19qdW5rLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUganVua19zdHJpbmdfdmFsdWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgcmVhZF9hc19kb3VibGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wqIHJlc3VsdF9pc19qdW5rKSB7Ci0gIEFTU0VSVCgqY3VycmVudCAh
PSBlbmQpOwotCi0gIGNvbnN0IGludCBrRG91YmxlU2l6ZSA9IERvdWJsZTo6a1NpZ25pZmljYW5k
U2l6ZTsKLSAgY29uc3QgaW50IGtTaW5nbGVTaXplID0gU2luZ2xlOjprU2lnbmlmaWNhbmRTaXpl
OwotICBjb25zdCBpbnQga1NpZ25pZmljYW5kU2l6ZSA9IHJlYWRfYXNfZG91YmxlPyBrRG91Ymxl
U2l6ZToga1NpbmdsZVNpemU7Ci0KLSAgKnJlc3VsdF9pc19qdW5rID0gdHJ1ZTsKLQotICAvLyBT
a2lwIGxlYWRpbmcgMHMuCi0gIHdoaWxlICgqKmN1cnJlbnQgPT0gJzAnKSB7Ci0gICAgKysoKmN1
cnJlbnQpOwotICAgIGlmICgqY3VycmVudCA9PSBlbmQpIHsKLSAgICAgICpyZXN1bHRfaXNfanVu
ayA9IGZhbHNlOwotICAgICAgcmV0dXJuIFNpZ25lZFplcm8oc2lnbik7Ci0gICAgfQotICB9Ci0K
LSAgaW50NjRfdCBudW1iZXIgPSAwOwotICBpbnQgZXhwb25lbnQgPSAwOwotICBjb25zdCBpbnQg
cmFkaXggPSAoMSA8PCByYWRpeF9sb2dfMik7Ci0KLSAgZG8gewotICAgIGludCBkaWdpdDsKLSAg
ICBpZiAoSXNEZWNpbWFsRGlnaXRGb3JSYWRpeCgqKmN1cnJlbnQsIHJhZGl4KSkgewotICAgICAg
ZGlnaXQgPSBzdGF0aWNfY2FzdDxjaGFyPigqKmN1cnJlbnQpIC0gJzAnOwotICAgIH0gZWxzZSBp
ZiAoSXNDaGFyYWN0ZXJEaWdpdEZvclJhZGl4KCoqY3VycmVudCwgcmFkaXgsICdhJykpIHsKLSAg
ICAgIGRpZ2l0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKipjdXJyZW50KSAtICdhJyArIDEwOwotICAg
IH0gZWxzZSBpZiAoSXNDaGFyYWN0ZXJEaWdpdEZvclJhZGl4KCoqY3VycmVudCwgcmFkaXgsICdB
JykpIHsKLSAgICAgIGRpZ2l0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKipjdXJyZW50KSAtICdBJyAr
IDEwOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVuayB8fCAhQWR2
YW5jZVRvTm9uc3BhY2UoY3VycmVudCwgZW5kKSkgewotICAgICAgICBicmVhazsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBudW1iZXIgPSBudW1iZXIgKiByYWRpeCArIGRpZ2l0OwotICAgIGludCBvdmVyZmxv
dyA9IHN0YXRpY19jYXN0PGludD4obnVtYmVyID4+IGtTaWduaWZpY2FuZFNpemUpOwotICAgIGlm
IChvdmVyZmxvdyAhPSAwKSB7Ci0gICAgICAvLyBPdmVyZmxvdyBvY2N1cnJlZC4gTmVlZCB0byBk
ZXRlcm1pbmUgd2hpY2ggZGlyZWN0aW9uIHRvIHJvdW5kIHRoZQotICAgICAgLy8gcmVzdWx0Lgot
ICAgICAgaW50IG92ZXJmbG93X2JpdHNfY291bnQgPSAxOwotICAgICAgd2hpbGUgKG92ZXJmbG93
ID4gMSkgewotICAgICAgICBvdmVyZmxvd19iaXRzX2NvdW50Kys7Ci0gICAgICAgIG92ZXJmbG93
ID4+PSAxOwotICAgICAgfQotCi0gICAgICBpbnQgZHJvcHBlZF9iaXRzX21hc2sgPSAoKDEgPDwg
b3ZlcmZsb3dfYml0c19jb3VudCkgLSAxKTsKLSAgICAgIGludCBkcm9wcGVkX2JpdHMgPSBzdGF0
aWNfY2FzdDxpbnQ+KG51bWJlcikgJiBkcm9wcGVkX2JpdHNfbWFzazsKLSAgICAgIG51bWJlciA+
Pj0gb3ZlcmZsb3dfYml0c19jb3VudDsKLSAgICAgIGV4cG9uZW50ID0gb3ZlcmZsb3dfYml0c19j
b3VudDsKLQotICAgICAgYm9vbCB6ZXJvX3RhaWwgPSB0cnVlOwotICAgICAgZm9yICg7Oykgewot
ICAgICAgICArKygqY3VycmVudCk7Ci0gICAgICAgIGlmICgqY3VycmVudCA9PSBlbmQgfHwgIWlz
RGlnaXQoKipjdXJyZW50LCByYWRpeCkpIGJyZWFrOwotICAgICAgICB6ZXJvX3RhaWwgPSB6ZXJv
X3RhaWwgJiYgKipjdXJyZW50ID09ICcwJzsKLSAgICAgICAgZXhwb25lbnQgKz0gcmFkaXhfbG9n
XzI7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghYWxsb3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNl
VG9Ob25zcGFjZShjdXJyZW50LCBlbmQpKSB7Ci0gICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192
YWx1ZTsKLSAgICAgIH0KLQotICAgICAgaW50IG1pZGRsZV92YWx1ZSA9ICgxIDw8IChvdmVyZmxv
d19iaXRzX2NvdW50IC0gMSkpOwotICAgICAgaWYgKGRyb3BwZWRfYml0cyA+IG1pZGRsZV92YWx1
ZSkgewotICAgICAgICBudW1iZXIrKzsgIC8vIFJvdW5kaW5nIHVwLgotICAgICAgfSBlbHNlIGlm
IChkcm9wcGVkX2JpdHMgPT0gbWlkZGxlX3ZhbHVlKSB7Ci0gICAgICAgIC8vIFJvdW5kaW5nIHRv
IGV2ZW4gdG8gY29uc2lzdGVuY3kgd2l0aCBkZWNpbWFsczogaGFsZi13YXkgY2FzZSByb3VuZHMK
LSAgICAgICAgLy8gdXAgaWYgc2lnbmlmaWNhbnQgcGFydCBpcyBvZGQgYW5kIGRvd24gb3RoZXJ3
aXNlLgotICAgICAgICBpZiAoKG51bWJlciAmIDEpICE9IDAgfHwgIXplcm9fdGFpbCkgewotICAg
ICAgICAgIG51bWJlcisrOyAgLy8gUm91bmRpbmcgdXAuCi0gICAgICAgIH0KLSAgICAgIH0KLQot
ICAgICAgLy8gUm91bmRpbmcgdXAgbWF5IGNhdXNlIG92ZXJmbG93LgotICAgICAgaWYgKChudW1i
ZXIgJiAoKGludDY0X3QpMSA8PCBrU2lnbmlmaWNhbmRTaXplKSkgIT0gMCkgewotICAgICAgICBl
eHBvbmVudCsrOwotICAgICAgICBudW1iZXIgPj49IDE7Ci0gICAgICB9Ci0gICAgICBicmVhazsK
LSAgICB9Ci0gICAgKysoKmN1cnJlbnQpOwotICB9IHdoaWxlICgqY3VycmVudCAhPSBlbmQpOwot
Ci0gIEFTU0VSVChudW1iZXIgPCAoKGludDY0X3QpMSA8PCBrU2lnbmlmaWNhbmRTaXplKSk7Ci0g
IEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KG51bWJlcikp
ID09IG51bWJlcik7Ci0KLSAgKnJlc3VsdF9pc19qdW5rID0gZmFsc2U7Ci0KLSAgaWYgKGV4cG9u
ZW50ID09IDApIHsKLSAgICBpZiAoc2lnbikgewotICAgICAgaWYgKG51bWJlciA9PSAwKSByZXR1
cm4gLTAuMDsKLSAgICAgIG51bWJlciA9IC1udW1iZXI7Ci0gICAgfQotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxkb3VibGU+KG51bWJlcik7Ci0gIH0KLQotICBBU1NFUlQobnVtYmVyICE9IDApOwot
ICByZXR1cm4gRG91YmxlKERpeUZwKG51bWJlciwgZXhwb25lbnQpKS52YWx1ZSgpOwotfQotCi0K
LXRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvcj4KLWRvdWJsZSBTdHJpbmdUb0RvdWJsZUNvbnZlcnRl
cjo6U3RyaW5nVG9JZWVlKAotICAgIEl0ZXJhdG9yIGlucHV0LAotICAgIGludCBsZW5ndGgsCi0g
ICAgYm9vbCByZWFkX2FzX2RvdWJsZSwKLSAgICBpbnQqIHByb2Nlc3NlZF9jaGFyYWN0ZXJzX2Nv
dW50KSBjb25zdCB7Ci0gIEl0ZXJhdG9yIGN1cnJlbnQgPSBpbnB1dDsKLSAgSXRlcmF0b3IgZW5k
ID0gaW5wdXQgKyBsZW5ndGg7Ci0KLSAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gMDsK
LQotICBjb25zdCBib29sIGFsbG93X3RyYWlsaW5nX2p1bmsgPSAoZmxhZ3NfICYgQUxMT1dfVFJB
SUxJTkdfSlVOSykgIT0gMDsKLSAgY29uc3QgYm9vbCBhbGxvd19sZWFkaW5nX3NwYWNlcyA9IChm
bGFnc18gJiBBTExPV19MRUFESU5HX1NQQUNFUykgIT0gMDsKLSAgY29uc3QgYm9vbCBhbGxvd190
cmFpbGluZ19zcGFjZXMgPSAoZmxhZ3NfICYgQUxMT1dfVFJBSUxJTkdfU1BBQ0VTKSAhPSAwOwot
ICBjb25zdCBib29sIGFsbG93X3NwYWNlc19hZnRlcl9zaWduID0gKGZsYWdzXyAmIEFMTE9XX1NQ
QUNFU19BRlRFUl9TSUdOKSAhPSAwOwotCi0gIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IGl0ZXJhdG9y
IGRlcmVmZXJlbmNpbmcgaXMgdmFsaWQgdGhlIGZvbGxvd2luZwotICAvLyBjb252ZW50aW9uIGlz
IHVzZWQ6Ci0gIC8vIDEuIEVhY2ggJysrY3VycmVudCcgc3RhdGVtZW50IGlzIGZvbGxvd2VkIGJ5
IGNoZWNrIGZvciBlcXVhbGl0eSB0byAnZW5kJy4KLSAgLy8gMi4gSWYgQWR2YW5jZVRvTm9uc3Bh
Y2UgcmV0dXJuZWQgZmFsc2UgdGhlbiBjdXJyZW50ID09IGVuZC4KLSAgLy8gMy4gSWYgJ2N1cnJl
bnQnIGJlY29tZXMgZXF1YWwgdG8gJ2VuZCcgdGhlIGZ1bmN0aW9uIHJldHVybnMgb3IgZ29lcyB0
bwotICAvLyAncGFyc2luZ19kb25lJy4KLSAgLy8gNC4gJ2N1cnJlbnQnIGlzIG5vdCBkZXJlZmVy
ZW5jZWQgYWZ0ZXIgdGhlICdwYXJzaW5nX2RvbmUnIGxhYmVsLgotICAvLyA1LiBDb2RlIGJlZm9y
ZSAncGFyc2luZ19kb25lJyBtYXkgcmVseSBvbiAnY3VycmVudCAhPSBlbmQnLgotICBpZiAoY3Vy
cmVudCA9PSBlbmQpIHJldHVybiBlbXB0eV9zdHJpbmdfdmFsdWVfOwotCi0gIGlmIChhbGxvd19s
ZWFkaW5nX3NwYWNlcyB8fCBhbGxvd190cmFpbGluZ19zcGFjZXMpIHsKLSAgICBpZiAoIUFkdmFu
Y2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7Ci0gICAgICAqcHJvY2Vzc2VkX2NoYXJhY3Rl
cnNfY291bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGN1cnJlbnQgLSBpbnB1dCk7Ci0gICAgICByZXR1
cm4gZW1wdHlfc3RyaW5nX3ZhbHVlXzsKLSAgICB9Ci0gICAgaWYgKCFhbGxvd19sZWFkaW5nX3Nw
YWNlcyAmJiAoaW5wdXQgIT0gY3VycmVudCkpIHsKLSAgICAgIC8vIE5vIGxlYWRpbmcgc3BhY2Vz
IGFsbG93ZWQsIGJ1dCBBZHZhbmNlVG9Ob25zcGFjZSBtb3ZlZCBmb3J3YXJkLgotICAgICAgcmV0
dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICB9Ci0gIH0KLQotICAvLyBUaGUgbG9uZ2VzdCBm
b3JtIG9mIHNpbXBsaWZpZWQgbnVtYmVyIGlzOiAiLTxzaWduaWZpY2FudCBkaWdpdHM+LjFlWFhY
XDAiLgotICBjb25zdCBpbnQga0J1ZmZlclNpemUgPSBrTWF4U2lnbmlmaWNhbnREaWdpdHMgKyAx
MDsKLSAgY2hhciBidWZmZXJba0J1ZmZlclNpemVdOyAgLy8gTk9MSU5UOiBzaXplIGlzIGtub3du
IGF0IGNvbXBpbGUgdGltZS4KLSAgaW50IGJ1ZmZlcl9wb3MgPSAwOwotCi0gIC8vIEV4cG9uZW50
IHdpbGwgYmUgYWRqdXN0ZWQgaWYgaW5zaWduaWZpY2FudCBkaWdpdHMgb2YgdGhlIGludGVnZXIg
cGFydAotICAvLyBvciBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3Mgb2YgdGhlIGZyYWN0aW9u
YWwgcGFydCBhcmUgZHJvcHBlZC4KLSAgaW50IGV4cG9uZW50ID0gMDsKLSAgaW50IHNpZ25pZmlj
YW50X2RpZ2l0cyA9IDA7Ci0gIGludCBpbnNpZ25pZmljYW50X2RpZ2l0cyA9IDA7Ci0gIGJvb2wg
bm9uemVyb19kaWdpdF9kcm9wcGVkID0gZmFsc2U7Ci0KLSAgYm9vbCBzaWduID0gZmFsc2U7Ci0K
LSAgaWYgKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScpIHsKLSAgICBzaWduID0g
KCpjdXJyZW50ID09ICctJyk7Ci0gICAgKytjdXJyZW50OwotICAgIEl0ZXJhdG9yIG5leHRfbm9u
X3NwYWNlID0gY3VycmVudDsKLSAgICAvLyBTa2lwIGZvbGxvd2luZyBzcGFjZXMgKGlmIGFsbG93
ZWQpLgotICAgIGlmICghQWR2YW5jZVRvTm9uc3BhY2UoJm5leHRfbm9uX3NwYWNlLCBlbmQpKSBy
ZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgIGlmICghYWxsb3dfc3BhY2VzX2FmdGVyX3Np
Z24gJiYgKGN1cnJlbnQgIT0gbmV4dF9ub25fc3BhY2UpKSB7Ci0gICAgICByZXR1cm4ganVua19z
dHJpbmdfdmFsdWVfOwotICAgIH0KLSAgICBjdXJyZW50ID0gbmV4dF9ub25fc3BhY2U7Ci0gIH0K
LQotICBpZiAoaW5maW5pdHlfc3ltYm9sXyAhPSBOVUxMKSB7Ci0gICAgaWYgKCpjdXJyZW50ID09
IGluZmluaXR5X3N5bWJvbF9bMF0pIHsKLSAgICAgIGlmICghQ29uc3VtZVN1YlN0cmluZygmY3Vy
cmVudCwgZW5kLCBpbmZpbml0eV9zeW1ib2xfKSkgewotICAgICAgICByZXR1cm4ganVua19zdHJp
bmdfdmFsdWVfOwotICAgICAgfQotCi0gICAgICBpZiAoIShhbGxvd190cmFpbGluZ19zcGFjZXMg
fHwgYWxsb3dfdHJhaWxpbmdfanVuaykgJiYgKGN1cnJlbnQgIT0gZW5kKSkgewotICAgICAgICBy
ZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgfQotICAgICAgaWYgKCFhbGxvd190cmFp
bGluZ19qdW5rICYmIEFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7Ci0gICAgICAg
IHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Ci0gICAgICB9Ci0KLSAgICAgIEFTU0VSVChidWZm
ZXJfcG9zID09IDApOwotICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gc3RhdGlj
X2Nhc3Q8aW50PihjdXJyZW50IC0gaW5wdXQpOwotICAgICAgcmV0dXJuIHNpZ24gPyAtRG91Ymxl
OjpJbmZpbml0eSgpIDogRG91YmxlOjpJbmZpbml0eSgpOwotICAgIH0KLSAgfQotCi0gIGlmIChu
YW5fc3ltYm9sXyAhPSBOVUxMKSB7Ci0gICAgaWYgKCpjdXJyZW50ID09IG5hbl9zeW1ib2xfWzBd
KSB7Ci0gICAgICBpZiAoIUNvbnN1bWVTdWJTdHJpbmcoJmN1cnJlbnQsIGVuZCwgbmFuX3N5bWJv
bF8pKSB7Ci0gICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Ci0gICAgICB9Ci0KLSAg
ICAgIGlmICghKGFsbG93X3RyYWlsaW5nX3NwYWNlcyB8fCBhbGxvd190cmFpbGluZ19qdW5rKSAm
JiAoY3VycmVudCAhPSBlbmQpKSB7Ci0gICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87
Ci0gICAgICB9Ci0gICAgICBpZiAoIWFsbG93X3RyYWlsaW5nX2p1bmsgJiYgQWR2YW5jZVRvTm9u
c3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKLSAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVl
XzsKLSAgICAgIH0KLQotICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPT0gMCk7Ci0gICAgICAqcHJv
Y2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGN1cnJlbnQgLSBpbnB1
dCk7Ci0gICAgICByZXR1cm4gc2lnbiA/IC1Eb3VibGU6Ok5hTigpIDogRG91YmxlOjpOYU4oKTsK
LSAgICB9Ci0gIH0KLQotICBib29sIGxlYWRpbmdfemVybyA9IGZhbHNlOwotICBpZiAoKmN1cnJl
bnQgPT0gJzAnKSB7Ci0gICAgKytjdXJyZW50OwotICAgIGlmIChjdXJyZW50ID09IGVuZCkgewot
ICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gc3RhdGljX2Nhc3Q8aW50PihjdXJy
ZW50IC0gaW5wdXQpOwotICAgICAgcmV0dXJuIFNpZ25lZFplcm8oc2lnbik7Ci0gICAgfQotCi0g
ICAgbGVhZGluZ196ZXJvID0gdHJ1ZTsKLQotICAgIC8vIEl0IGNvdWxkIGJlIGhleGFkZWNpbWFs
IHZhbHVlLgotICAgIGlmICgoZmxhZ3NfICYgQUxMT1dfSEVYKSAmJiAoKmN1cnJlbnQgPT0gJ3gn
IHx8ICpjdXJyZW50ID09ICdYJykpIHsKLSAgICAgICsrY3VycmVudDsKLSAgICAgIGlmIChjdXJy
ZW50ID09IGVuZCB8fCAhaXNEaWdpdCgqY3VycmVudCwgMTYpKSB7Ci0gICAgICAgIHJldHVybiBq
dW5rX3N0cmluZ192YWx1ZV87ICAvLyAiMHgiLgotICAgICAgfQotCi0gICAgICBib29sIHJlc3Vs
dF9pc19qdW5rOwotICAgICAgZG91YmxlIHJlc3VsdCA9IFJhZGl4U3RyaW5nVG9JZWVlPDQ+KCZj
dXJyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3RyYWlsaW5nX2p1bmss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVua19zdHJpbmdf
dmFsdWVfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRf
YXNfZG91YmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZy
ZXN1bHRfaXNfanVuayk7Ci0gICAgICBpZiAoIXJlc3VsdF9pc19qdW5rKSB7Ci0gICAgICAgIGlm
IChhbGxvd190cmFpbGluZ19zcGFjZXMpIEFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQp
OwotICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSBzdGF0aWNfY2FzdDxpbnQ+
KGN1cnJlbnQgLSBpbnB1dCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LQotICAgIC8vIElnbm9yZSBsZWFkaW5nIHplcm9zIGluIHRoZSBpbnRlZ2VyIHBhcnQuCi0gICAg
d2hpbGUgKCpjdXJyZW50ID09ICcwJykgewotICAgICAgKytjdXJyZW50OwotICAgICAgaWYgKGN1
cnJlbnQgPT0gZW5kKSB7Ci0gICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IHN0
YXRpY19jYXN0PGludD4oY3VycmVudCAtIGlucHV0KTsKLSAgICAgICAgcmV0dXJuIFNpZ25lZFpl
cm8oc2lnbik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgYm9vbCBvY3RhbCA9IGxlYWRpbmdf
emVybyAmJiAoZmxhZ3NfICYgQUxMT1dfT0NUQUxTKSAhPSAwOwotCi0gIC8vIENvcHkgc2lnbmlm
aWNhbnQgZGlnaXRzIG9mIHRoZSBpbnRlZ2VyIHBhcnQgKGlmIGFueSkgdG8gdGhlIGJ1ZmZlci4K
LSAgd2hpbGUgKCpjdXJyZW50ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScpIHsKLSAgICBpZiAo
c2lnbmlmaWNhbnRfZGlnaXRzIDwga01heFNpZ25pZmljYW50RGlnaXRzKSB7Ci0gICAgICBBU1NF
UlQoYnVmZmVyX3BvcyA8IGtCdWZmZXJTaXplKTsKLSAgICAgIGJ1ZmZlcltidWZmZXJfcG9zKytd
ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpOwotICAgICAgc2lnbmlmaWNhbnRfZGlnaXRz
Kys7Ci0gICAgICAvLyBXaWxsIGxhdGVyIGNoZWNrIGlmIGl0J3MgYW4gb2N0YWwgaW4gdGhlIGJ1
ZmZlci4KLSAgICB9IGVsc2UgewotICAgICAgaW5zaWduaWZpY2FudF9kaWdpdHMrKzsgIC8vIE1v
dmUgdGhlIGRpZ2l0IGludG8gdGhlIGV4cG9uZW50aWFsIHBhcnQuCi0gICAgICBub256ZXJvX2Rp
Z2l0X2Ryb3BwZWQgPSBub256ZXJvX2RpZ2l0X2Ryb3BwZWQgfHwgKmN1cnJlbnQgIT0gJzAnOwot
ICAgIH0KLSAgICBvY3RhbCA9IG9jdGFsICYmICpjdXJyZW50IDwgJzgnOwotICAgICsrY3VycmVu
dDsKLSAgICBpZiAoY3VycmVudCA9PSBlbmQpIGdvdG8gcGFyc2luZ19kb25lOwotICB9Ci0KLSAg
aWYgKHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwKSB7Ci0gICAgb2N0YWwgPSBmYWxzZTsKLSAgfQot
Ci0gIGlmICgqY3VycmVudCA9PSAnLicpIHsKLSAgICBpZiAob2N0YWwgJiYgIWFsbG93X3RyYWls
aW5nX2p1bmspIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Ci0gICAgaWYgKG9jdGFsKSBnb3Rv
IHBhcnNpbmdfZG9uZTsKLQotICAgICsrY3VycmVudDsKLSAgICBpZiAoY3VycmVudCA9PSBlbmQp
IHsKLSAgICAgIGlmIChzaWduaWZpY2FudF9kaWdpdHMgPT0gMCAmJiAhbGVhZGluZ196ZXJvKSB7
Ci0gICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc2lnbmlm
aWNhbnRfZGlnaXRzID09IDApIHsKLSAgICAgIC8vIG9jdGFsID0gZmFsc2U7Ci0gICAgICAvLyBJ
bnRlZ2VyIHBhcnQgY29uc2lzdHMgb2YgMCBvciBpcyBhYnNlbnQuIFNpZ25pZmljYW50IGRpZ2l0
cyBzdGFydCBhZnRlcgotICAgICAgLy8gbGVhZGluZyB6ZXJvcyAoaWYgYW55KS4KLSAgICAgIHdo
aWxlICgqY3VycmVudCA9PSAnMCcpIHsKLSAgICAgICAgKytjdXJyZW50OwotICAgICAgICBpZiAo
Y3VycmVudCA9PSBlbmQpIHsKLSAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQg
PSBzdGF0aWNfY2FzdDxpbnQ+KGN1cnJlbnQgLSBpbnB1dCk7Ci0gICAgICAgICAgcmV0dXJuIFNp
Z25lZFplcm8oc2lnbik7Ci0gICAgICAgIH0KLSAgICAgICAgZXhwb25lbnQtLTsgIC8vIE1vdmUg
dGhpcyAwIGludG8gdGhlIGV4cG9uZW50LgotICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZXJl
IGlzIGEgZnJhY3Rpb25hbCBwYXJ0LgotICAgIC8vIFdlIGRvbid0IGVtaXQgYSAnLicsIGJ1dCBh
ZGp1c3QgdGhlIGV4cG9uZW50IGluc3RlYWQuCi0gICAgd2hpbGUgKCpjdXJyZW50ID49ICcwJyAm
JiAqY3VycmVudCA8PSAnOScpIHsKLSAgICAgIGlmIChzaWduaWZpY2FudF9kaWdpdHMgPCBrTWF4
U2lnbmlmaWNhbnREaWdpdHMpIHsKLSAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPCBrQnVmZmVy
U2l6ZSk7Ci0gICAgICAgIGJ1ZmZlcltidWZmZXJfcG9zKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4o
KmN1cnJlbnQpOwotICAgICAgICBzaWduaWZpY2FudF9kaWdpdHMrKzsKLSAgICAgICAgZXhwb25l
bnQtLTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElnbm9yZSBpbnNpZ25pZmljYW50IGRp
Z2l0cyBpbiB0aGUgZnJhY3Rpb25hbCBwYXJ0LgotICAgICAgICBub256ZXJvX2RpZ2l0X2Ryb3Bw
ZWQgPSBub256ZXJvX2RpZ2l0X2Ryb3BwZWQgfHwgKmN1cnJlbnQgIT0gJzAnOwotICAgICAgfQot
ICAgICAgKytjdXJyZW50OwotICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSBnb3RvIHBhcnNpbmdf
ZG9uZTsKLSAgICB9Ci0gIH0KLQotICBpZiAoIWxlYWRpbmdfemVybyAmJiBleHBvbmVudCA9PSAw
ICYmIHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwKSB7Ci0gICAgLy8gSWYgbGVhZGluZ196ZXJvcyBp
cyB0cnVlIHRoZW4gdGhlIHN0cmluZyBjb250YWlucyB6ZXJvcy4KLSAgICAvLyBJZiBleHBvbmVu
dCA8IDAgdGhlbiBzdHJpbmcgd2FzIFsrLV1cLjAqLi4uCi0gICAgLy8gSWYgc2lnbmlmaWNhbnRf
ZGlnaXRzICE9IDAgdGhlIHN0cmluZyBpcyBub3QgZXF1YWwgdG8gMC4KLSAgICAvLyBPdGhlcndp
c2UgdGhlcmUgYXJlIG5vIGRpZ2l0cyBpbiB0aGUgc3RyaW5nLgotICAgIHJldHVybiBqdW5rX3N0
cmluZ192YWx1ZV87Ci0gIH0KLQotICAvLyBQYXJzZSBleHBvbmVudGlhbCBwYXJ0LgotICBpZiAo
KmN1cnJlbnQgPT0gJ2UnIHx8ICpjdXJyZW50ID09ICdFJykgewotICAgIGlmIChvY3RhbCAmJiAh
YWxsb3dfdHJhaWxpbmdfanVuaykgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICBpZiAo
b2N0YWwpIGdvdG8gcGFyc2luZ19kb25lOwotICAgICsrY3VycmVudDsKLSAgICBpZiAoY3VycmVu
dCA9PSBlbmQpIHsKLSAgICAgIGlmIChhbGxvd190cmFpbGluZ19qdW5rKSB7Ci0gICAgICAgIGdv
dG8gcGFyc2luZ19kb25lOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGp1bmtfc3Ry
aW5nX3ZhbHVlXzsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2hhciBleHBvbmVuX3NpZ24gPSAnKyc7
Ci0gICAgaWYgKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScpIHsKLSAgICAgIGV4
cG9uZW5fc2lnbiA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KTsKLSAgICAgICsrY3VycmVu
dDsKLSAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgewotICAgICAgICBpZiAoYWxsb3dfdHJhaWxp
bmdfanVuaykgewotICAgICAgICAgIGdvdG8gcGFyc2luZ19kb25lOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwgKmN1cnJlbnQgPCAnMCcgfHwg
KmN1cnJlbnQgPiAnOScpIHsKLSAgICAgIGlmIChhbGxvd190cmFpbGluZ19qdW5rKSB7Ci0gICAg
ICAgIGdvdG8gcGFyc2luZ19kb25lOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGp1
bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBpbnQgbWF4X2V4
cG9uZW50ID0gSU5UX01BWCAvIDI7Ci0gICAgQVNTRVJUKC1tYXhfZXhwb25lbnQgLyAyIDw9IGV4
cG9uZW50ICYmIGV4cG9uZW50IDw9IG1heF9leHBvbmVudCAvIDIpOwotICAgIGludCBudW0gPSAw
OwotICAgIGRvIHsKLSAgICAgIC8vIENoZWNrIG92ZXJmbG93LgotICAgICAgaW50IGRpZ2l0ID0g
KmN1cnJlbnQgLSAnMCc7Ci0gICAgICBpZiAobnVtID49IG1heF9leHBvbmVudCAvIDEwCi0gICAg
ICAgICAgJiYgIShudW0gPT0gbWF4X2V4cG9uZW50IC8gMTAgJiYgZGlnaXQgPD0gbWF4X2V4cG9u
ZW50ICUgMTApKSB7Ci0gICAgICAgIG51bSA9IG1heF9leHBvbmVudDsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIG51bSA9IG51bSAqIDEwICsgZGlnaXQ7Ci0gICAgICB9Ci0gICAgICArK2N1cnJl
bnQ7Ci0gICAgfSB3aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgKmN1cnJlbnQgPj0gJzAnICYmICpj
dXJyZW50IDw9ICc5Jyk7Ci0KLSAgICBleHBvbmVudCArPSAoZXhwb25lbl9zaWduID09ICctJyA/
IC1udW0gOiBudW0pOwotICB9Ci0KLSAgaWYgKCEoYWxsb3dfdHJhaWxpbmdfc3BhY2VzIHx8IGFs
bG93X3RyYWlsaW5nX2p1bmspICYmIChjdXJyZW50ICE9IGVuZCkpIHsKLSAgICByZXR1cm4ganVu
a19zdHJpbmdfdmFsdWVfOwotICB9Ci0gIGlmICghYWxsb3dfdHJhaWxpbmdfanVuayAmJiBBZHZh
bmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgewotICAgIHJldHVybiBqdW5rX3N0cmluZ192
YWx1ZV87Ci0gIH0KLSAgaWYgKGFsbG93X3RyYWlsaW5nX3NwYWNlcykgewotICAgIEFkdmFuY2VU
b05vbnNwYWNlKCZjdXJyZW50LCBlbmQpOwotICB9Ci0KLSAgcGFyc2luZ19kb25lOgotICBleHBv
bmVudCArPSBpbnNpZ25pZmljYW50X2RpZ2l0czsKLQotICBpZiAob2N0YWwpIHsKLSAgICBkb3Vi
bGUgcmVzdWx0OwotICAgIGJvb2wgcmVzdWx0X2lzX2p1bms7Ci0gICAgY2hhciogc3RhcnQgPSBi
dWZmZXI7Ci0gICAgcmVzdWx0ID0gUmFkaXhTdHJpbmdUb0llZWU8Mz4oJnN0YXJ0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArIGJ1ZmZlcl9wb3MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbGxvd190cmFpbGluZ19qdW5rLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGp1bmtfc3RyaW5nX3ZhbHVlXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWFkX2FzX2RvdWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmcmVzdWx0X2lzX2p1bmspOwotICAgIEFTU0VSVCghcmVzdWx0X2lzX2p1bmspOwotICAgICpw
cm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IHN0YXRpY19jYXN0PGludD4oY3VycmVudCAtIGlu
cHV0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgaWYgKG5vbnplcm9fZGlnaXRfZHJv
cHBlZCkgewotICAgIGJ1ZmZlcltidWZmZXJfcG9zKytdID0gJzEnOwotICAgIGV4cG9uZW50LS07
Ci0gIH0KLQotICBBU1NFUlQoYnVmZmVyX3BvcyA8IGtCdWZmZXJTaXplKTsKLSAgYnVmZmVyW2J1
ZmZlcl9wb3NdID0gJ1wwJzsKLQotICBkb3VibGUgY29udmVydGVkOwotICBpZiAocmVhZF9hc19k
b3VibGUpIHsKLSAgICBjb252ZXJ0ZWQgPSBTdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+KGJ1ZmZl
ciwgYnVmZmVyX3BvcyksIGV4cG9uZW50KTsKLSAgfSBlbHNlIHsKLSAgICBjb252ZXJ0ZWQgPSBT
dHJ0b2YoVmVjdG9yPGNvbnN0IGNoYXI+KGJ1ZmZlciwgYnVmZmVyX3BvcyksIGV4cG9uZW50KTsK
LSAgfQotICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGN1
cnJlbnQgLSBpbnB1dCk7Ci0gIHJldHVybiBzaWduPyAtY29udmVydGVkOiBjb252ZXJ0ZWQ7Ci19
Ci0KLQotZG91YmxlIFN0cmluZ1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdUb0RvdWJsZSgKLSAg
ICBjb25zdCBjaGFyKiBidWZmZXIsCi0gICAgaW50IGxlbmd0aCwKLSAgICBpbnQqIHByb2Nlc3Nl
ZF9jaGFyYWN0ZXJzX2NvdW50KSBjb25zdCB7Ci0gIHJldHVybiBTdHJpbmdUb0llZWUoYnVmZmVy
LCBsZW5ndGgsIHRydWUsIHByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50KTsKLX0KLQotCi1kb3Vi
bGUgU3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXI6OlN0cmluZ1RvRG91YmxlKAotICAgIGNvbnN0IHVj
MTYqIGJ1ZmZlciwKLSAgICBpbnQgbGVuZ3RoLAotICAgIGludCogcHJvY2Vzc2VkX2NoYXJhY3Rl
cnNfY291bnQpIGNvbnN0IHsKLSAgcmV0dXJuIFN0cmluZ1RvSWVlZShidWZmZXIsIGxlbmd0aCwg
dHJ1ZSwgcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQpOwotfQotCi0KLWZsb2F0IFN0cmluZ1Rv
RG91YmxlQ29udmVydGVyOjpTdHJpbmdUb0Zsb2F0KAotICAgIGNvbnN0IGNoYXIqIGJ1ZmZlciwK
LSAgICBpbnQgbGVuZ3RoLAotICAgIGludCogcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQpIGNv
bnN0IHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihTdHJpbmdUb0llZWUoYnVmZmVyLCBs
ZW5ndGgsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCkpOwotfQotCi0KLWZsb2F0IFN0cmluZ1RvRG91Ymxl
Q29udmVydGVyOjpTdHJpbmdUb0Zsb2F0KAotICAgIGNvbnN0IHVjMTYqIGJ1ZmZlciwKLSAgICBp
bnQgbGVuZ3RoLAotICAgIGludCogcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQpIGNvbnN0IHsK
LSAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihTdHJpbmdUb0llZWUoYnVmZmVyLCBsZW5ndGgs
IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNz
ZWRfY2hhcmFjdGVyc19jb3VudCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZl
cnNpb24KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Rv
dWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uLmggYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3Vi
bGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2YmRmYThkMjVkNzY4YTY0MGFjNDYwZWMxMjgzZjJjZWFlMTA5OGFhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2RvdWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uL2Rv
dWJsZS1jb252ZXJzaW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NDMgKzAsMCBAQAotLy8gQ29w
eXJpZ2h0IDIwMTIgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
Ci0vLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LS8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9D
T05WRVJTSU9OX0hfCi0jZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9DT05WRVJTSU9O
X0hfCi0KLSNpbmNsdWRlICJ1dGlscy5oIgotCi1uYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24g
ewotCi1jbGFzcyBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciB7Ci0gcHVibGljOgotICAvLyBXaGVu
IGNhbGxpbmcgVG9GaXhlZCB3aXRoIGEgZG91YmxlID4gMTBea01heEZpeGVkRGlnaXRzQmVmb3Jl
UG9pbnQKLSAgLy8gb3IgYSByZXF1ZXN0ZWRfZGlnaXRzIHBhcmFtZXRlciA+IGtNYXhGaXhlZERp
Z2l0c0FmdGVyUG9pbnQgdGhlbiB0aGUKLSAgLy8gZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KLSAg
c3RhdGljIGNvbnN0IGludCBrTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCA9IDYwOwotICBzdGF0
aWMgY29uc3QgaW50IGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQgPSA2MDsKLQotICAvLyBXaGVu
IGNhbGxpbmcgVG9FeHBvbmVudGlhbCB3aXRoIGEgcmVxdWVzdGVkX2RpZ2l0cwotICAvLyBwYXJh
bWV0ZXIgPiBrTWF4RXhwb25lbnRpYWxEaWdpdHMgdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBm
YWxzZS4KLSAgc3RhdGljIGNvbnN0IGludCBrTWF4RXhwb25lbnRpYWxEaWdpdHMgPSAxMjA7Ci0K
LSAgLy8gV2hlbiBjYWxsaW5nIFRvUHJlY2lzaW9uIHdpdGggYSByZXF1ZXN0ZWRfZGlnaXRzCi0g
IC8vIHBhcmFtZXRlciA8IGtNaW5QcmVjaXNpb25EaWdpdHMgb3IgcmVxdWVzdGVkX2RpZ2l0cyA+
IGtNYXhQcmVjaXNpb25EaWdpdHMKLSAgLy8gdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxz
ZS4KLSAgc3RhdGljIGNvbnN0IGludCBrTWluUHJlY2lzaW9uRGlnaXRzID0gMTsKLSAgc3RhdGlj
IGNvbnN0IGludCBrTWF4UHJlY2lzaW9uRGlnaXRzID0gMTIwOwotCi0gIGVudW0gRmxhZ3Mgewot
ICAgIE5PX0ZMQUdTID0gMCwKLSAgICBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04gPSAxLAot
ICAgIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVCA9IDIsCi0gICAgRU1JVF9UUkFJTElOR19a
RVJPX0FGVEVSX1BPSU5UID0gNCwKLSAgICBVTklRVUVfWkVSTyA9IDgKLSAgfTsKLQotICAvLyBG
bGFncyBzaG91bGQgYmUgYSBiaXQtb3IgY29tYmluYXRpb24gb2YgdGhlIHBvc3NpYmxlIEZsYWdz
LWVudW0uCi0gIC8vICAtIE5PX0ZMQUdTOiBubyBzcGVjaWFsIGZsYWdzLgotICAvLyAgLSBFTUlU
X1BPU0lUSVZFX0VYUE9ORU5UX1NJR046IHdoZW4gdGhlIG51bWJlciBpcyBjb252ZXJ0ZWQgaW50
byBleHBvbmVudAotICAvLyAgICBmb3JtLCBlbWl0cyBhICcrJyBmb3IgcG9zaXRpdmUgZXhwb25l
bnRzLiBFeGFtcGxlOiAxLjJlKzIuCi0gIC8vICAtIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lO
VDogd2hlbiB0aGUgaW5wdXQgbnVtYmVyIGlzIGFuIGludGVnZXIgYW5kIGlzCi0gIC8vICAgIGNv
bnZlcnRlZCBpbnRvIGRlY2ltYWwgZm9ybWF0IHRoZW4gYSB0cmFpbGluZyBkZWNpbWFsIHBvaW50
IGlzIGFwcGVuZGVkLgotICAvLyAgICBFeGFtcGxlOiAyMzQ1LjAgaXMgY29udmVydGVkIHRvICIy
MzQ1LiIuCi0gIC8vICAtIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVDogaW4gYWRkaXRp
b24gdG8gYSB0cmFpbGluZyBkZWNpbWFsIHBvaW50Ci0gIC8vICAgIGVtaXRzIGEgdHJhaWxpbmcg
JzAnLWNoYXJhY3Rlci4gVGhpcyBmbGFnIHJlcXVpcmVzIHRoZQotICAvLyAgICBFWE1JVF9UUkFJ
TElOR19ERUNJTUFMX1BPSU5UIGZsYWcuCi0gIC8vICAgIEV4YW1wbGU6IDIzNDUuMCBpcyBjb252
ZXJ0ZWQgdG8gIjIzNDUuMCIuCi0gIC8vICAtIFVOSVFVRV9aRVJPOiAiLTAuMCIgaXMgY29udmVy
dGVkIHRvICIwLjAiLgotICAvLwotICAvLyBJbmZpbml0eSBzeW1ib2wgYW5kIG5hbl9zeW1ib2wg
cHJvdmlkZSB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGVzZQotICAvLyBzcGVjaWFs
IHZhbHVlcy4gSWYgdGhlIHN0cmluZyBpcyBOVUxMIGFuZCB0aGUgc3BlY2lhbCB2YWx1ZSBpcyBl
bmNvdW50ZXJlZAotICAvLyB0aGVuIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyByZXR1cm4gZmFs
c2UuCi0gIC8vCi0gIC8vIFRoZSBleHBvbmVudF9jaGFyYWN0ZXIgaXMgdXNlZCBpbiBleHBvbmVu
dGlhbCByZXByZXNlbnRhdGlvbnMuIEl0IGlzCi0gIC8vIHVzdWFsbHkgJ2UnIG9yICdFJy4KLSAg
Ly8KLSAgLy8gV2hlbiBjb252ZXJ0aW5nIHRvIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiB0
aGUgY29udmVydGVyIHdpbGwKLSAgLy8gcmVwcmVzZW50IGlucHV0IG51bWJlcnMgaW4gZGVjaW1h
bCBmb3JtYXQgaWYgdGhleSBhcmUgaW4gdGhlIGludGVydmFsCi0gIC8vIFsxMF5kZWNpbWFsX2lu
X3Nob3J0ZXN0X2xvdzsgMTBeZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoWwotICAvLyAgICAobG93
ZXIgYm91bmRhcnkgaW5jbHVkZWQsIGdyZWF0ZXIgYm91bmRhcnkgZXhjbHVkZWQpLgotICAvLyBF
eGFtcGxlOiB3aXRoIGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93ID0gLTYgYW5kCi0gIC8vICAgICAg
ICAgICAgICAgZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoID0gMjE6Ci0gIC8vICAgVG9TaG9ydGVz
dCgwLjAwMDAwMSkgIC0+ICIwLjAwMDAwMSIKLSAgLy8gICBUb1Nob3J0ZXN0KDAuMDAwMDAwMSkg
LT4gIjFlLTciCi0gIC8vICAgVG9TaG9ydGVzdCgxMTExMTExMTExMTExMTExMTExMTEuMCkgIC0+
ICIxMTExMTExMTExMTExMTExMTAwMDAiCi0gIC8vICAgVG9TaG9ydGVzdCgxMDAwMDAwMDAwMDAw
MDAwMDAwMDAuMCkgIC0+ICIxMDAwMDAwMDAwMDAwMDAwMDAwMDAiCi0gIC8vICAgVG9TaG9ydGVz
dCgxMTExMTExMTExMTExMTExMTExMTExLjApIC0+ICIxLjExMTExMTExMTExMTExMTFlKzIxIgot
ICAvLwotICAvLyBXaGVuIGNvbnZlcnRpbmcgdG8gcHJlY2lzaW9uIG1vZGUgdGhlIGNvbnZlcnRl
ciBtYXkgYWRkCi0gIC8vIG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzIGJlZm9yZSByZXR1cm5p
bmcgdGhlIG51bWJlciBpbiBleHBvbmVudGlhbAotICAvLyBmb3JtYXQuCi0gIC8vIEV4YW1wbGUg
d2l0aCBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDYuCi0g
IC8vICAgVG9QcmVjaXNpb24oMC4wMDAwMDEyMzQ1LCAyKSAtPiAiMC4wMDAwMDEyIgotICAvLyAg
IFRvUHJlY2lzaW9uKDAuMDAwMDAwMTIzNDUsIDIpIC0+ICIxLjJlLTciCi0gIC8vIFNpbWlsYXJp
bHkgdGhlIGNvbnZlcnRlciBtYXkgYWRkIHVwIHRvCi0gIC8vIG1heF90cmFpbGluZ19wYWRkaW5n
X3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSBpbiBwcmVjaXNpb24gbW9kZSB0byBhdm9pZAotICAv
LyByZXR1cm5pbmcgYW4gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24uIEEgemVybyBhZGRlZCBi
eSB0aGUKLSAgLy8gRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UIGZsYWcgaXMgY291bnRl
ZCBmb3IgdGhpcyBsaW1pdC4KLSAgLy8gRXhhbXBsZXMgZm9yIG1heF90cmFpbGluZ19wYWRkaW5n
X3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDE6Ci0gIC8vICAgVG9QcmVjaXNpb24oMjMwLjAs
IDIpIC0+ICIyMzAiCi0gIC8vICAgVG9QcmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyMzAuIiAgd2l0
aCBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQuCi0gIC8vICAgVG9QcmVjaXNpb24oMjMwLjAs
IDIpIC0+ICIyLjNlMiIgd2l0aCBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQuCi0gIERv
dWJsZVRvU3RyaW5nQ29udmVydGVyKGludCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogaW5maW5pdHlfc3ltYm9sLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBuYW5fc3ltYm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
IGV4cG9uZW50X2NoYXJhY3RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlY2lt
YWxfaW5fc2hvcnRlc3RfbG93LAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVjaW1h
bF9pbl9zaG9ydGVzdF9oaWdoLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X2xl
YWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21v
ZGUpCi0gICAgICA6IGZsYWdzXyhmbGFncyksCi0gICAgICAgIGluZmluaXR5X3N5bWJvbF8oaW5m
aW5pdHlfc3ltYm9sKSwKLSAgICAgICAgbmFuX3N5bWJvbF8obmFuX3N5bWJvbCksCi0gICAgICAg
IGV4cG9uZW50X2NoYXJhY3Rlcl8oZXhwb25lbnRfY2hhcmFjdGVyKSwKLSAgICAgICAgZGVjaW1h
bF9pbl9zaG9ydGVzdF9sb3dfKGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93KSwKLSAgICAgICAgZGVj
aW1hbF9pbl9zaG9ydGVzdF9oaWdoXyhkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2gpLAotICAgICAg
ICBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV8oCi0gICAgICAg
ICAgICBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSksCi0gICAg
ICAgIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV8oCi0gICAg
ICAgICAgICBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUpIHsK
LSAgICAvLyBXaGVuICd0cmFpbGluZyB6ZXJvIGFmdGVyIHRoZSBwb2ludCcgaXMgc2V0LCB0aGVu
ICd0cmFpbGluZyBwb2ludCcKLSAgICAvLyBtdXN0IGJlIHNldCB0b28uCi0gICAgQVNTRVJUKCgo
ZmxhZ3MgJiBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQpICE9IDApIHx8Ci0gICAgICAgICEo
KGZsYWdzICYgRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UKSAhPSAwKSk7Ci0gIH0KLQot
ICAvLyBSZXR1cm5zIGEgY29udmVydGVyIGZvbGxvd2luZyB0aGUgRWNtYVNjcmlwdCBzcGVjaWZp
Y2F0aW9uLgotICBzdGF0aWMgY29uc3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIEVjbWFTY3Jp
cHRDb252ZXJ0ZXIoKTsKLQotICAvLyBDb21wdXRlcyB0aGUgc2hvcnRlc3Qgc3RyaW5nIG9mIGRp
Z2l0cyB0aGF0IGNvcnJlY3RseSByZXByZXNlbnQgdGhlIGlucHV0Ci0gIC8vIG51bWJlci4gRGVw
ZW5kaW5nIG9uIGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93IGFuZCBkZWNpbWFsX2luX3Nob3J0ZXN0
X2hpZ2gKLSAgLy8gKHNlZSBjb25zdHJ1Y3RvcikgaXQgdGhlbiBlaXRoZXIgcmV0dXJucyBhIGRl
Y2ltYWwgcmVwcmVzZW50YXRpb24sIG9yIGFuCi0gIC8vIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0
aW9uLgotICAvLyBFeGFtcGxlIHdpdGggZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3cgPSAtNiwKLSAg
Ly8gICAgICAgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaCA9IDIxLAotICAvLyAgICAg
ICAgICAgICAgRU1JVF9QT1NJVElWRV9FWFBPTkVOVF9TSUdOIGFjdGl2YXRlZCwgYW5kCi0gIC8v
ICAgICAgICAgICAgICBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgZGVhY3RpdmVkOgotICAv
LyAgIFRvU2hvcnRlc3QoMC4wMDAwMDEpICAtPiAiMC4wMDAwMDEiCi0gIC8vICAgVG9TaG9ydGVz
dCgwLjAwMDAwMDEpIC0+ICIxZS03IgotICAvLyAgIFRvU2hvcnRlc3QoMTExMTExMTExMTExMTEx
MTExMTExLjApICAtPiAiMTExMTExMTExMTExMTExMTEwMDAwIgotICAvLyAgIFRvU2hvcnRlc3Qo
MTAwMDAwMDAwMDAwMDAwMDAwMDAwLjApICAtPiAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwIgotICAv
LyAgIFRvU2hvcnRlc3QoMTExMTExMTExMTExMTExMTExMTExMS4wKSAtPiAiMS4xMTExMTExMTEx
MTExMTExZSsyMSIKLSAgLy8KLSAgLy8gTm90ZTogdGhlIGNvbnZlcnNpb24gbWF5IHJvdW5kIHRo
ZSBvdXRwdXQgaWYgdGhlIHJldHVybmVkIHN0cmluZwotICAvLyBpcyBhY2N1cmF0ZSBlbm91Z2gg
dG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGlucHV0LW51bWJlci4KLSAgLy8gRm9yIGV4YW1wbGUg
dGhlIG1vc3QgcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG91YmxlIDllNTkgZXF1YWxz
Ci0gIC8vICI4OTk5OTk5OTk5OTk5OTk5MTg3NjcyMjk0NDk3MTc2MTk5NTM4MTAxMzEyNzM2NzQ2
OTA2NTYyMDY4NDgiLCBidXQKLSAgLy8gdGhlIGNvbnZlcnRlciB3aWxsIHJldHVybiB0aGUgc2hv
cnRlciAoYnV0IHN0aWxsIGNvcnJlY3QpICI5ZTU5Ii4KLSAgLy8KLSAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBjb252ZXJzaW9uIHN1Y2NlZWRzLiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2Vl
ZHMKLSAgLy8gZXhjZXB0IHdoZW4gdGhlIGlucHV0IHZhbHVlIGlzIHNwZWNpYWwgYW5kIG5vIGlu
ZmluaXR5X3N5bWJvbCBvcgotICAvLyBuYW5fc3ltYm9sIGhhcyBiZWVuIGdpdmVuIHRvIHRoZSBj
b25zdHJ1Y3Rvci4KLSAgYm9vbCBUb1Nob3J0ZXN0KGRvdWJsZSB2YWx1ZSwgU3RyaW5nQnVpbGRl
ciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKLSAgICByZXR1cm4gVG9TaG9ydGVzdEllZWVOdW1i
ZXIodmFsdWUsIHJlc3VsdF9idWlsZGVyLCBTSE9SVEVTVCk7Ci0gIH0KLQotICAvLyBTYW1lIGFz
IFRvU2hvcnRlc3QsIGJ1dCBmb3Igc2luZ2xlLXByZWNpc2lvbiBmbG9hdHMuCi0gIGJvb2wgVG9T
aG9ydGVzdFNpbmdsZShmbG9hdCB2YWx1ZSwgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIp
IGNvbnN0IHsKLSAgICByZXR1cm4gVG9TaG9ydGVzdEllZWVOdW1iZXIodmFsdWUsIHJlc3VsdF9i
dWlsZGVyLCBTSE9SVEVTVF9TSU5HTEUpOwotICB9Ci0KLQotICAvLyBDb21wdXRlcyBhIGRlY2lt
YWwgcmVwcmVzZW50YXRpb24gd2l0aCBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhl
Ci0gIC8vIGRlY2ltYWwgcG9pbnQuIFRoZSBsYXN0IGVtaXR0ZWQgZGlnaXQgaXMgcm91bmRlZC4K
LSAgLy8KLSAgLy8gRXhhbXBsZXM6Ci0gIC8vICAgVG9GaXhlZCgzLjEyLCAxKSAtPiAiMy4xIgot
ICAvLyAgIFRvRml4ZWQoMy4xNDE1LCAzKSAtPiAiMy4xNDIiCi0gIC8vICAgVG9GaXhlZCgxMjM0
LjU2Nzg5LCA0KSAtPiAiMTIzNC41Njc5IgotICAvLyAgIFRvRml4ZWQoMS4yMywgNSkgLT4gIjEu
MjMwMDAiCi0gIC8vICAgVG9GaXhlZCgwLjEsIDQpIC0+ICIwLjEwMDAiCi0gIC8vICAgVG9GaXhl
ZCgxZTMwLCAyKSAtPiAiMTAwMDAwMDAwMDAwMDAwMDAxOTg4NDYyNDgzODY1Ni4wMCIKLSAgLy8g
ICBUb0ZpeGVkKDAuMSwgMzApIC0+ICIwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNiIK
LSAgLy8gICBUb0ZpeGVkKDAuMSwgMTcpIC0+ICIwLjEwMDAwMDAwMDAwMDAwMDAxIgotICAvLwot
ICAvLyBJZiByZXF1ZXN0ZWRfZGlnaXRzIGVxdWFscyAwLCB0aGVuIHRoZSB0YWlsIG9mIHRoZSBy
ZXN1bHQgZGVwZW5kcyBvbgotICAvLyB0aGUgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UIGFu
ZCBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQuCi0gIC8vIEV4YW1wbGVzLCBmb3IgcmVx
dWVzdGVkX2RpZ2l0cyA9PSAwLAotICAvLyAgIGxldCBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9J
TlQgYW5kIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCBiZQotICAvLyAgICAtIGZhbHNl
IGFuZCBmYWxzZTogdGhlbiAxMjMuNDUgLT4gMTIzCi0gIC8vICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLjY3OCAtPiAxCi0gIC8vICAgIC0gdHJ1ZSBhbmQgZmFsc2U6IHRoZW4gMTIzLjQ1
IC0+IDEyMy4KLSAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMC42NzggLT4gMS4KLSAg
Ly8gICAgLSB0cnVlIGFuZCB0cnVlOiB0aGVuIDEyMy40NSAtPiAxMjMuMAotICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAuNjc4IC0+IDEuMAotICAvLwotICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIGNvbnZlcnNpb24gc3VjY2VlZHMuIFRoZSBjb252ZXJzaW9uIGFsd2F5cyBzdWNjZWVk
cwotICAvLyBleGNlcHQgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6Ci0gIC8vICAgLSB0aGUgaW5w
dXQgdmFsdWUgaXMgc3BlY2lhbCBhbmQgbm8gaW5maW5pdHlfc3ltYm9sIG9yIG5hbl9zeW1ib2wg
aGFzCi0gIC8vICAgICBiZWVuIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3RvciwKLSAgLy8gICAt
ICd2YWx1ZScgPiAxMF5rTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCwgb3IKLSAgLy8gICAtICdy
ZXF1ZXN0ZWRfZGlnaXRzJyA+IGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQuCi0gIC8vIFRoZSBs
YXN0IHR3byBjb25kaXRpb25zIGltcGx5IHRoYXQgdGhlIHJlc3VsdCB3aWxsIG5ldmVyIGNvbnRh
aW4gbW9yZSB0aGFuCi0gIC8vIDEgKyBrTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCArIDEgKyBr
TWF4Rml4ZWREaWdpdHNBZnRlclBvaW50IGNoYXJhY3RlcnMKLSAgLy8gKG9uZSBhZGRpdGlvbmFs
IGNoYXJhY3RlciBmb3IgdGhlIHNpZ24sIGFuZCBvbmUgZm9yIHRoZSBkZWNpbWFsIHBvaW50KS4K
LSAgYm9vbCBUb0ZpeGVkKGRvdWJsZSB2YWx1ZSwKLSAgICAgICAgICAgICAgIGludCByZXF1ZXN0
ZWRfZGlnaXRzLAotICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIp
IGNvbnN0OwotCi0gIC8vIENvbXB1dGVzIGEgcmVwcmVzZW50YXRpb24gaW4gZXhwb25lbnRpYWwg
Zm9ybWF0IHdpdGggcmVxdWVzdGVkX2RpZ2l0cwotICAvLyBhZnRlciB0aGUgZGVjaW1hbCBwb2lu
dC4gVGhlIGxhc3QgZW1pdHRlZCBkaWdpdCBpcyByb3VuZGVkLgotICAvLyBJZiByZXF1ZXN0ZWRf
ZGlnaXRzIGVxdWFscyAtMSwgdGhlbiB0aGUgc2hvcnRlc3QgZXhwb25lbnRpYWwgcmVwcmVzZW50
YXRpb24KLSAgLy8gaXMgY29tcHV0ZWQuCi0gIC8vCi0gIC8vIEV4YW1wbGVzIHdpdGggRU1JVF9Q
T1NJVElWRV9FWFBPTkVOVF9TSUdOIGRlYWN0aXZhdGVkLCBhbmQKLSAgLy8gICAgICAgICAgICAg
ICBleHBvbmVudF9jaGFyYWN0ZXIgc2V0IHRvICdlJy4KLSAgLy8gICBUb0V4cG9uZW50aWFsKDMu
MTIsIDEpIC0+ICIzLjFlMCIKLSAgLy8gICBUb0V4cG9uZW50aWFsKDUuMCwgMykgLT4gIjUuMDAw
ZTAiCi0gIC8vICAgVG9FeHBvbmVudGlhbCgwLjAwMSwgMikgLT4gIjEuMDBlLTMiCi0gIC8vICAg
VG9FeHBvbmVudGlhbCgzLjE0MTUsIC0xKSAtPiAiMy4xNDE1ZTAiCi0gIC8vICAgVG9FeHBvbmVu
dGlhbCgzLjE0MTUsIDQpIC0+ICIzLjE0MTVlMCIKLSAgLy8gICBUb0V4cG9uZW50aWFsKDMuMTQx
NSwgMykgLT4gIjMuMTQyZTAiCi0gIC8vICAgVG9FeHBvbmVudGlhbCgxMjM0NTY3ODkwMDAwMDAs
IDMpIC0+ICIxLjIzNWUxNCIKLSAgLy8gICBUb0V4cG9uZW50aWFsKDEwMDAwMDAwMDAwMDAwMDAw
MTk4ODQ2MjQ4Mzg2NTYuMCwgLTEpIC0+ICIxZTMwIgotICAvLyAgIFRvRXhwb25lbnRpYWwoMTAw
MDAwMDAwMDAwMDAwMDAxOTg4NDYyNDgzODY1Ni4wLCAzMikgLT4KLSAgLy8gICAgICAgICAgICAg
ICAgICAgICAiMS4wMDAwMDAwMDAwMDAwMDAwMTk4ODQ2MjQ4Mzg2NTYwMGUzMCIKLSAgLy8gICBU
b0V4cG9uZW50aWFsKDEyMzQsIDApIC0+ICIxZTMiCi0gIC8vCi0gIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgY29udmVyc2lvbiBzdWNjZWVkcy4gVGhlIGNvbnZlcnNpb24gYWx3YXlzIHN1Y2NlZWRz
Ci0gIC8vIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKLSAgLy8gICAtIHRoZSBpbnB1
dCB2YWx1ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3IgbmFuX3N5bWJvbCBo
YXMKLSAgLy8gICAgIGJlZW4gcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLAotICAvLyAgIC0g
J3JlcXVlc3RlZF9kaWdpdHMnID4ga01heEV4cG9uZW50aWFsRGlnaXRzLgotICAvLyBUaGUgbGFz
dCBjb25kaXRpb24gaW1wbGllcyB0aGF0IHRoZSByZXN1bHQgd2lsbCBuZXZlciBjb250YWluIG1v
cmUgdGhhbgotICAvLyBrTWF4RXhwb25lbnRpYWxEaWdpdHMgKyA4IGNoYXJhY3RlcnMgKHRoZSBz
aWduLCB0aGUgZGlnaXQgYmVmb3JlIHRoZQotICAvLyBkZWNpbWFsIHBvaW50LCB0aGUgZGVjaW1h
bCBwb2ludCwgdGhlIGV4cG9uZW50IGNoYXJhY3RlciwgdGhlCi0gIC8vIGV4cG9uZW50J3Mgc2ln
biwgYW5kIGF0IG1vc3QgMyBleHBvbmVudCBkaWdpdHMpLgotICBib29sIFRvRXhwb25lbnRpYWwo
ZG91YmxlIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMs
Ci0gICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29u
c3Q7Ci0KLSAgLy8gQ29tcHV0ZXMgJ3ByZWNpc2lvbicgbGVhZGluZyBkaWdpdHMgb2YgdGhlIGdp
dmVuICd2YWx1ZScgYW5kIHJldHVybnMgdGhlbQotICAvLyBlaXRoZXIgaW4gZXhwb25lbnRpYWwg
b3IgZGVjaW1hbCBmb3JtYXQsIGRlcGVuZGluZyBvbgotICAvLyBtYXhfe2xlYWRpbmd8dHJhaWxp
bmd9X3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlIChnaXZlbiB0byB0aGUKLSAgLy8g
Y29uc3RydWN0b3IpLgotICAvLyBUaGUgbGFzdCBjb21wdXRlZCBkaWdpdCBpcyByb3VuZGVkLgot
ICAvLwotICAvLyBFeGFtcGxlIHdpdGggbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJl
Y2lzaW9uX21vZGUgPSA2LgotICAvLyAgIFRvUHJlY2lzaW9uKDAuMDAwMDAxMjM0NSwgMikgLT4g
IjAuMDAwMDAxMiIKLSAgLy8gICBUb1ByZWNpc2lvbigwLjAwMDAwMDEyMzQ1LCAyKSAtPiAiMS4y
ZS03IgotICAvLyBTaW1pbGFyaWx5IHRoZSBjb252ZXJ0ZXIgbWF5IGFkZCB1cCB0bwotICAvLyBt
YXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgaW4gcHJlY2lzaW9u
IG1vZGUgdG8gYXZvaWQKLSAgLy8gcmV0dXJuaW5nIGFuIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0
aW9uLiBBIHplcm8gYWRkZWQgYnkgdGhlCi0gIC8vIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9Q
T0lOVCBmbGFnIGlzIGNvdW50ZWQgZm9yIHRoaXMgbGltaXQuCi0gIC8vIEV4YW1wbGVzIGZvciBt
YXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgPSAxOgotICAvLyAg
IFRvUHJlY2lzaW9uKDIzMC4wLCAyKSAtPiAiMjMwIgotICAvLyAgIFRvUHJlY2lzaW9uKDIzMC4w
LCAyKSAtPiAiMjMwLiIgIHdpdGggRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5ULgotICAvLyAg
IFRvUHJlY2lzaW9uKDIzMC4wLCAyKSAtPiAiMi4zZTIiIHdpdGggRU1JVF9UUkFJTElOR19aRVJP
X0FGVEVSX1BPSU5ULgotICAvLyBFeGFtcGxlcyBmb3IgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVy
b2VzX2luX3ByZWNpc2lvbl9tb2RlID0gMywgYW5kIG5vCi0gIC8vICAgIEVNSVRfVFJBSUxJTkdf
WkVST19BRlRFUl9QT0lOVDoKLSAgLy8gICBUb1ByZWNpc2lvbigxMjM0NTAuMCwgNikgLT4gIjEy
MzQ1MCIKLSAgLy8gICBUb1ByZWNpc2lvbigxMjM0NTAuMCwgNSkgLT4gIjEyMzQ1MCIKLSAgLy8g
ICBUb1ByZWNpc2lvbigxMjM0NTAuMCwgNCkgLT4gIjEyMzUwMCIKLSAgLy8gICBUb1ByZWNpc2lv
bigxMjM0NTAuMCwgMykgLT4gIjEyMzAwMCIKLSAgLy8gICBUb1ByZWNpc2lvbigxMjM0NTAuMCwg
MikgLT4gIjEuMmU1IgotICAvLwotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnZlcnNpb24g
c3VjY2VlZHMuIFRoZSBjb252ZXJzaW9uIGFsd2F5cyBzdWNjZWVkcwotICAvLyBleGNlcHQgZm9y
IHRoZSBmb2xsb3dpbmcgY2FzZXM6Ci0gIC8vICAgLSB0aGUgaW5wdXQgdmFsdWUgaXMgc3BlY2lh
bCBhbmQgbm8gaW5maW5pdHlfc3ltYm9sIG9yIG5hbl9zeW1ib2wgaGFzCi0gIC8vICAgICBiZWVu
IHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3RvciwKLSAgLy8gICAtIHByZWNpc2lvbiA8IGtNaW5Q
ZXJpY2lzaW9uRGlnaXRzCi0gIC8vICAgLSBwcmVjaXNpb24gPiBrTWF4UHJlY2lzaW9uRGlnaXRz
Ci0gIC8vIFRoZSBsYXN0IGNvbmRpdGlvbiBpbXBsaWVzIHRoYXQgdGhlIHJlc3VsdCB3aWxsIG5l
dmVyIGNvbnRhaW4gbW9yZSB0aGFuCi0gIC8vIGtNYXhQcmVjaXNpb25EaWdpdHMgKyA3IGNoYXJh
Y3RlcnMgKHRoZSBzaWduLCB0aGUgZGVjaW1hbCBwb2ludCwgdGhlCi0gIC8vIGV4cG9uZW50IGNo
YXJhY3RlciwgdGhlIGV4cG9uZW50J3Mgc2lnbiwgYW5kIGF0IG1vc3QgMyBleHBvbmVudCBkaWdp
dHMpLgotICBib29sIFRvUHJlY2lzaW9uKGRvdWJsZSB2YWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICBpbnQgcHJlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3Vs
dF9idWlsZGVyKSBjb25zdDsKLQotICBlbnVtIER0b2FNb2RlIHsKLSAgICAvLyBQcm9kdWNlIHRo
ZSBzaG9ydGVzdCBjb3JyZWN0IHJlcHJlc2VudGF0aW9uLgotICAgIC8vIEZvciBleGFtcGxlIHRo
ZSBvdXRwdXQgb2YgMC4yOTk5OTk5OTk5OTk5OTk5ODg4OTcgaXMgKHRoZSBsZXNzIGFjY3VyYXRl
Ci0gICAgLy8gYnV0IGNvcnJlY3QpIDAuMy4KLSAgICBTSE9SVEVTVCwKLSAgICAvLyBTYW1lIGFz
IFNIT1JURVNULCBidXQgZm9yIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRzLgotICAgIFNIT1JURVNU
X1NJTkdMRSwKLSAgICAvLyBQcm9kdWNlIGEgZml4ZWQgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0
aGUgZGVjaW1hbCBwb2ludC4KLSAgICAvLyBGb3IgaW5zdGFuY2UgZml4ZWQoMC4xLCA0KSBiZWNv
bWVzIDAuMTAwMAotICAgIC8vIElmIHRoZSBpbnB1dCBudW1iZXIgaXMgYmlnLCB0aGUgb3V0cHV0
IHdpbGwgYmUgYmlnLgotICAgIEZJWEVELAotICAgIC8vIEZpeGVkIG51bWJlciBvZiBkaWdpdHMg
KGluZGVwZW5kZW50IG9mIHRoZSBkZWNpbWFsIHBvaW50KS4KLSAgICBQUkVDSVNJT04KLSAgfTsK
LQotICAvLyBUaGUgbWF4aW1hbCBudW1iZXIgb2YgZGlnaXRzIHRoYXQgYXJlIG5lZWRlZCB0byBl
bWl0IGEgZG91YmxlIGluIGJhc2UgMTAuCi0gIC8vIEEgaGlnaGVyIHByZWNpc2lvbiBjYW4gYmUg
YWNoaWV2ZWQgYnkgdXNpbmcgbW9yZSBkaWdpdHMsIGJ1dCB0aGUgc2hvcnRlc3QKLSAgLy8gYWNj
dXJhdGUgcmVwcmVzZW50YXRpb24gb2YgYW55IGRvdWJsZSB3aWxsIG5ldmVyIHVzZSBtb3JlIGRp
Z2l0cyB0aGFuCi0gIC8vIGtCYXNlMTBNYXhpbWFsTGVuZ3RoLgotICAvLyBOb3RlIHRoYXQgRG91
YmxlVG9Bc2NpaSBudWxsLXRlcm1pbmF0ZXMgaXRzIGlucHV0LiBTbyB0aGUgZ2l2ZW4gYnVmZmVy
Ci0gIC8vIHNob3VsZCBiZSBhdCBsZWFzdCBrQmFzZTEwTWF4aW1hbExlbmd0aCArIDEgY2hhcmFj
dGVycyBsb25nLgotICBzdGF0aWMgY29uc3QgaW50IGtCYXNlMTBNYXhpbWFsTGVuZ3RoID0gMTc7
Ci0KLSAgLy8gQ29udmVydHMgdGhlIGdpdmVuIGRvdWJsZSAndicgdG8gYXNjaWkuICd2JyBtdXN0
IG5vdCBiZSBOYU4sICtJbmZpbml0eSwgb3IKLSAgLy8gLUluZmluaXR5LiBJbiBTSE9SVEVTVF9T
SU5HTEUtbW9kZSB0aGlzIHJlc3RyaWN0aW9uIGFsc28gYXBwbGllcyB0byAndicKLSAgLy8gYWZ0
ZXIgaXQgaGFzIGJlZW4gY2FzdGVkIHRvIGEgc2luZ2xlLXByZWNpc2lvbiBmbG9hdC4gVGhhdCBp
cywgaW4gdGhpcwotICAvLyBtb2RlIHN0YXRpY19jYXN0PGZsb2F0Pih2KSBtdXN0IG5vdCBiZSBO
YU4sICtJbmZpbml0eSBvciAtSW5maW5pdHkuCi0gIC8vCi0gIC8vIFRoZSByZXN1bHQgc2hvdWxk
IGJlIGludGVycHJldGVkIGFzIGJ1ZmZlciAqIDEwXihwb2ludC1sZW5ndGgpLgotICAvLwotICAv
LyBUaGUgb3V0cHV0IGRlcGVuZHMgb24gdGhlIGdpdmVuIG1vZGU6Ci0gIC8vICAtIFNIT1JURVNU
OiBwcm9kdWNlIHRoZSBsZWFzdCBhbW91bnQgb2YgZGlnaXRzIGZvciB3aGljaCB0aGUgaW50ZXJu
YWwKLSAgLy8gICBpZGVudGl0eSByZXF1aXJlbWVudCBpcyBzdGlsbCBzYXRpc2ZpZWQuIElmIHRo
ZSBkaWdpdHMgYXJlIHByaW50ZWQKLSAgLy8gICAodG9nZXRoZXIgd2l0aCB0aGUgY29ycmVjdCBl
eHBvbmVudCkgdGhlbiByZWFkaW5nIHRoaXMgbnVtYmVyIHdpbGwgZ2l2ZQotICAvLyAgICd2JyBh
Z2Fpbi4gVGhlIGJ1ZmZlciB3aWxsIGNob29zZSB0aGUgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBj
bG9zZXN0IHRvCi0gIC8vICAgJ3YnLiBJZiB0aGVyZSBhcmUgdHdvIGF0IHRoZSBzYW1lIGRpc3Rh
bmNlLCB0aGFuIHRoZSBvbmUgZmFydGhlciBhd2F5Ci0gIC8vICAgZnJvbSAwIGlzIGNob3NlbiAo
aGFsZndheSBjYXNlcyAtIGVuZGluZyB3aXRoIDUgLSBhcmUgcm91bmRlZCB1cCkuCi0gIC8vICAg
SW4gdGhpcyBtb2RlIHRoZSAncmVxdWVzdGVkX2RpZ2l0cycgcGFyYW1ldGVyIGlzIGlnbm9yZWQu
Ci0gIC8vICAtIFNIT1JURVNUX1NJTkdMRTogc2FtZSBhcyBTSE9SVEVTVCBidXQgd2l0aCBzaW5n
bGUtcHJlY2lzaW9uLgotICAvLyAgLSBGSVhFRDogcHJvZHVjZXMgZGlnaXRzIG5lY2Vzc2FyeSB0
byBwcmludCBhIGdpdmVuIG51bWJlciB3aXRoCi0gIC8vICAgJ3JlcXVlc3RlZF9kaWdpdHMnIGRp
Z2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gVGhlIHByb2R1Y2VkIGRpZ2l0cwotICAvLyAg
IG1pZ2h0IGJlIHRvbyBzaG9ydCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgaGFzIHRvIGZpbGwg
dGhlIHJlbWFpbmRlcgotICAvLyAgIHdpdGggJzAncy4KLSAgLy8gICBFeGFtcGxlOiB0b0ZpeGVk
KDAuMDAxLCA1KSBpcyBhbGxvd2VkIHRvIHJldHVybiBidWZmZXI9IjEiLCBwb2ludD0tMi4KLSAg
Ly8gICBIYWxmd2F5IGNhc2VzIGFyZSByb3VuZGVkIHRvd2FyZHMgKy8tSW5maW5pdHkgKGF3YXkg
ZnJvbSAwKS4gVGhlIGNhbGwKLSAgLy8gICB0b0ZpeGVkKDAuMTUsIDIpIHRodXMgcmV0dXJucyBi
dWZmZXI9IjIiLCBwb2ludD0wLgotICAvLyAgIFRoZSByZXR1cm5lZCBidWZmZXIgbWF5IGNvbnRh
aW4gZGlnaXRzIHRoYXQgd291bGQgYmUgdHJ1bmNhdGVkIGZyb20gdGhlCi0gIC8vICAgc2hvcnRl
c3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0LgotICAvLyAgLSBQUkVDSVNJT046IHByb2R1
Y2VzICdyZXF1ZXN0ZWRfZGlnaXRzJyB3aGVyZSB0aGUgZmlyc3QgZGlnaXQgaXMgbm90ICcwJy4K
LSAgLy8gICBFdmVuIHRob3VnaCB0aGUgbGVuZ3RoIG9mIHByb2R1Y2VkIGRpZ2l0cyB1c3VhbGx5
IGVxdWFscwotICAvLyAgICdyZXF1ZXN0ZWRfZGlnaXRzJywgdGhlIGZ1bmN0aW9uIGlzIGFsbG93
ZWQgdG8gcmV0dXJuIGZld2VyIGRpZ2l0cywgaW4KLSAgLy8gICB3aGljaCBjYXNlIHRoZSBjYWxs
ZXIgaGFzIHRvIGZpbGwgdGhlIG1pc3NpbmcgZGlnaXRzIHdpdGggJzAncy4KLSAgLy8gICBIYWxm
d2F5IGNhc2VzIGFyZSBhZ2FpbiByb3VuZGVkIGF3YXkgZnJvbSAwLgotICAvLyBEb3VibGVUb0Fz
Y2lpIGV4cGVjdHMgdGhlIGdpdmVuIGJ1ZmZlciB0byBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgYWxs
Ci0gIC8vIGRpZ2l0cyBhbmQgYSB0ZXJtaW5hdGluZyBudWxsLWNoYXJhY3Rlci4gSW4gU0hPUlRF
U1QtbW9kZSBpdCBleHBlY3RzIGEKLSAgLy8gYnVmZmVyIG9mIGF0IGxlYXN0IGtCYXNlMTBNYXhp
bWFsTGVuZ3RoICsgMS4gSW4gYWxsIG90aGVyIG1vZGVzIHRoZQotICAvLyByZXF1ZXN0ZWRfZGln
aXRzIHBhcmFtZXRlciBhbmQgdGhlIHBhZGRpbmctemVyb2VzIGxpbWl0IHRoZSBzaXplIG9mIHRo
ZQotICAvLyBvdXRwdXQuIERvbid0IGZvcmdldCB0aGUgZGVjaW1hbCBwb2ludCwgdGhlIGV4cG9u
ZW50IGNoYXJhY3RlciBhbmQgdGhlCi0gIC8vIHRlcm1pbmF0aW5nIG51bGwtY2hhcmFjdGVyIHdo
ZW4gY29tcHV0aW5nIHRoZSBtYXhpbWFsIG91dHB1dCBzaXplLgotICAvLyBUaGUgZ2l2ZW4gbGVu
Z3RoIGlzIG9ubHkgdXNlZCBpbiBkZWJ1ZyBtb2RlIHRvIGVuc3VyZSB0aGUgYnVmZmVyIGlzIGJp
ZwotICAvLyBlbm91Z2guCi0gIHN0YXRpYyB2b2lkIERvdWJsZVRvQXNjaWkoZG91YmxlIHYsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRHRvYU1vZGUgbW9kZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyKiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1
ZmZlcl9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogc2lnbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQqIHBvaW50KTsKLQotIHByaXZhdGU6Ci0gIC8vIEltcGxlbWVudGF0aW9u
IGZvciBUb1Nob3J0ZXN0IGFuZCBUb1Nob3J0ZXN0U2luZ2xlLgotICBib29sIFRvU2hvcnRlc3RJ
ZWVlTnVtYmVyKGRvdWJsZSB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJp
bmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
dG9hTW9kZSBtb2RlKSBjb25zdDsKLQotICAvLyBJZiB0aGUgdmFsdWUgaXMgYSBzcGVjaWFsIHZh
bHVlIChOYU4gb3IgSW5maW5pdHkpIGNvbnN0cnVjdHMgdGhlCi0gIC8vIGNvcnJlc3BvbmRpbmcg
c3RyaW5nIHVzaW5nIHRoZSBjb25maWd1cmVkIGluZmluaXR5L25hbi1zeW1ib2wuCi0gIC8vIElm
IGVpdGhlciBvZiB0aGVtIGlzIE5VTEwgb3IgdGhlIHZhbHVlIGlzIG5vdCBzcGVjaWFsIHRoZW4g
dGhlCi0gIC8vIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCi0gIGJvb2wgSGFuZGxlU3BlY2lhbFZh
bHVlcyhkb3VibGUgdmFsdWUsIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsK
LSAgLy8gQ29uc3RydWN0cyBhbiBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbiAoaS5lLiAxLjIz
NGU1NikuCi0gIC8vIFRoZSBnaXZlbiBleHBvbmVudCBhc3N1bWVzIGEgZGVjaW1hbCBwb2ludCBh
ZnRlciB0aGUgZmlyc3QgZGVjaW1hbCBkaWdpdC4KLSAgdm9pZCBDcmVhdGVFeHBvbmVudGlhbFJl
cHJlc2VudGF0aW9uKGNvbnN0IGNoYXIqIGRlY2ltYWxfZGlnaXRzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKLSAg
Ly8gQ3JlYXRlcyBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gKGkuZSAxMjM0LjU2NzgpLgotICB2
b2lkIENyZWF0ZURlY2ltYWxSZXByZXNlbnRhdGlvbihjb25zdCBjaGFyKiBkZWNpbWFsX2RpZ2l0
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdHNfYWZ0ZXJfcG9pbnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWls
ZGVyKSBjb25zdDsKLQotICBjb25zdCBpbnQgZmxhZ3NfOwotICBjb25zdCBjaGFyKiBjb25zdCBp
bmZpbml0eV9zeW1ib2xfOwotICBjb25zdCBjaGFyKiBjb25zdCBuYW5fc3ltYm9sXzsKLSAgY29u
c3QgY2hhciBleHBvbmVudF9jaGFyYWN0ZXJfOwotICBjb25zdCBpbnQgZGVjaW1hbF9pbl9zaG9y
dGVzdF9sb3dfOwotICBjb25zdCBpbnQgZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoXzsKLSAgY29u
c3QgaW50IG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlXzsKLSAg
Y29uc3QgaW50IG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV87
Ci0KLSAgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKERvdWJsZVRvU3RyaW5nQ29udmVy
dGVyKTsKLX07Ci0KLQotY2xhc3MgU3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXIgewotIHB1YmxpYzoK
LSAgLy8gRW51bWVyYXRpb24gZm9yIGFsbG93aW5nIG9jdGFscyBhbmQgaWdub3JpbmcganVuayB3
aGVuIGNvbnZlcnRpbmcKLSAgLy8gc3RyaW5ncyB0byBudW1iZXJzLgotICBlbnVtIEZsYWdzIHsK
LSAgICBOT19GTEFHUyA9IDAsCi0gICAgQUxMT1dfSEVYID0gMSwKLSAgICBBTExPV19PQ1RBTFMg
PSAyLAotICAgIEFMTE9XX1RSQUlMSU5HX0pVTksgPSA0LAotICAgIEFMTE9XX0xFQURJTkdfU1BB
Q0VTID0gOCwKLSAgICBBTExPV19UUkFJTElOR19TUEFDRVMgPSAxNiwKLSAgICBBTExPV19TUEFD
RVNfQUZURVJfU0lHTiA9IDMyCi0gIH07Ci0KLSAgLy8gRmxhZ3Mgc2hvdWxkIGJlIGEgYml0LW9y
IGNvbWJpbmF0aW9uIG9mIHRoZSBwb3NzaWJsZSBGbGFncy1lbnVtLgotICAvLyAgLSBOT19GTEFH
Uzogbm8gc3BlY2lhbCBmbGFncy4KLSAgLy8gIC0gQUxMT1dfSEVYOiByZWNvZ25pemVzIHRoZSBw
cmVmaXggIjB4Ii4gSGV4IG51bWJlcnMgbWF5IG9ubHkgYmUgaW50ZWdlcnMuCi0gIC8vICAgICAg
RXg6IFN0cmluZ1RvRG91YmxlKCIweDEyMzQiKSAtPiA0NjYwLjAKLSAgLy8gICAgICAgICAgSW4g
U3RyaW5nVG9Eb3VibGUoIjB4MTIzNC41NiIpIHRoZSBjaGFyYWN0ZXJzICIuNTYiIGFyZSB0cmFp
bGluZwotICAvLyAgICAgICAgICBqdW5rLiBUaGUgcmVzdWx0IG9mIHRoZSBjYWxsIGlzIGhlbmNl
IGRlcGVuZGVudCBvbgotICAvLyAgICAgICAgICB0aGUgQUxMT1dfVFJBSUxJTkdfSlVOSyBmbGFn
IGFuZC9vciB0aGUganVuayB2YWx1ZS4KLSAgLy8gICAgICBXaXRoIHRoaXMgZmxhZyAiMHgiIGlz
IGEganVuay1zdHJpbmcuIEV2ZW4gd2l0aCBBTExPV19UUkFJTElOR19KVU5LLAotICAvLyAgICAg
IHRoZSBzdHJpbmcgd2lsbCBub3QgYmUgcGFyc2VkIGFzICIwIiBmb2xsb3dlZCBieSBqdW5rLgot
ICAvLwotICAvLyAgLSBBTExPV19PQ1RBTFM6IHJlY29nbml6ZXMgdGhlIHByZWZpeCAiMCIgZm9y
IG9jdGFsczoKLSAgLy8gICAgICBJZiBhIHNlcXVlbmNlIG9mIG9jdGFsIGRpZ2l0cyBzdGFydHMg
d2l0aCAnMCcsIHRoZW4gdGhlIG51bWJlciBpcwotICAvLyAgICAgIHJlYWQgYXMgb2N0YWwgaW50
ZWdlci4gT2N0YWwgbnVtYmVycyBtYXkgb25seSBiZSBpbnRlZ2Vycy4KLSAgLy8gICAgICBFeDog
U3RyaW5nVG9Eb3VibGUoIjAxMjM0IikgLT4gNjY4LjAKLSAgLy8gICAgICAgICAgU3RyaW5nVG9E
b3VibGUoIjAxMjM0OSIpIC0+IDEyMzQ5LjAgIC8vIE5vdCBhIHNlcXVlbmNlIG9mIG9jdGFsCi0g
IC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkaWdp
dHMuCi0gIC8vICAgICAgICAgIEluIFN0cmluZ1RvRG91YmxlKCIwMTIzNC41NiIpIHRoZSBjaGFy
YWN0ZXJzICIuNTYiIGFyZSB0cmFpbGluZwotICAvLyAgICAgICAgICBqdW5rLiBUaGUgcmVzdWx0
IG9mIHRoZSBjYWxsIGlzIGhlbmNlIGRlcGVuZGVudCBvbgotICAvLyAgICAgICAgICB0aGUgQUxM
T1dfVFJBSUxJTkdfSlVOSyBmbGFnIGFuZC9vciB0aGUganVuayB2YWx1ZS4KLSAgLy8gICAgICAg
ICAgSW4gU3RyaW5nVG9Eb3VibGUoIjAxMjM0ZTU2IikgdGhlIGNoYXJhY3RlcnMgImU1NiIgYXJl
IHRyYWlsaW5nCi0gIC8vICAgICAgICAgIGp1bmssIHRvby4KLSAgLy8gIC0gQUxMT1dfVFJBSUxJ
TkdfSlVOSzogaWdub3JlIHRyYWlsaW5nIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHBhcnQgb2YK
LSAgLy8gICAgICBhIGRvdWJsZSBsaXRlcmFsLgotICAvLyAgLSBBTExPV19MRUFESU5HX1NQQUNF
Uzogc2tpcCBvdmVyIGxlYWRpbmcgd2hpdGVzcGFjZSwgaW5jbHVkaW5nIHNwYWNlcywKLSAgLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ldy1saW5lcywgYW5kIHRhYnMuCi0gIC8vICAtIEFM
TE9XX1RSQUlMSU5HX1NQQUNFUzogaWdub3JlIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0gIC8vICAt
IEFMTE9XX1NQQUNFU19BRlRFUl9TSUdOOiBpZ25vcmUgd2hpdGVzcGFjZSBhZnRlciB0aGUgc2ln
bi4KLSAgLy8gICAgICAgRXg6IFN0cmluZ1RvRG91YmxlKCItICAgMTIzLjIiKSAtPiAtMTIzLjIu
Ci0gIC8vICAgICAgICAgICBTdHJpbmdUb0RvdWJsZSgiKyAgIDEyMy4yIikgLT4gMTIzLjIKLSAg
Ly8KLSAgLy8gZW1wdHlfc3RyaW5nX3ZhbHVlIGlzIHJldHVybmVkIHdoZW4gYW4gZW1wdHkgc3Ry
aW5nIGlzIGdpdmVuIGFzIGlucHV0LgotICAvLyBJZiBBTExPV19MRUFESU5HX1NQQUNFUyBvciBB
TExPV19UUkFJTElOR19TUEFDRVMgYXJlIHNldCwgdGhlbiBhIHN0cmluZwotICAvLyBjb250YWlu
aW5nIG9ubHkgc3BhY2VzIGlzIGNvbnZlcnRlZCB0byB0aGUgJ2VtcHR5X3N0cmluZ192YWx1ZScs
IHRvby4KLSAgLy8KLSAgLy8ganVua19zdHJpbmdfdmFsdWUgaXMgcmV0dXJuZWQgd2hlbgotICAv
LyAgYSkgQUxMT1dfVFJBSUxJTkdfSlVOSyBpcyBub3Qgc2V0LCBhbmQgYSBqdW5rIGNoYXJhY3Rl
ciAoYSBjaGFyYWN0ZXIgbm90Ci0gIC8vICAgICBwYXJ0IG9mIGEgZG91YmxlLWxpdGVyYWwpIGlz
IGZvdW5kLgotICAvLyAgYikgQUxMT1dfVFJBSUxJTkdfSlVOSyBpcyBzZXQsIGJ1dCB0aGUgc3Ry
aW5nIGRvZXMgbm90IHN0YXJ0IHdpdGggYQotICAvLyAgICAgZG91YmxlIGxpdGVyYWwuCi0gIC8v
Ci0gIC8vIGluZmluaXR5X3N5bWJvbCBhbmQgbmFuX3N5bWJvbCBhcmUgc3RyaW5ncyB0aGF0IGFy
ZSB1c2VkIHRvIGRldGVjdAotICAvLyBpbnB1dHMgdGhhdCByZXByZXNlbnQgaW5maW5pdHkgYW5k
IE5hTi4gVGhleSBjYW4gYmUgbnVsbCwgaW4gd2hpY2ggY2FzZQotICAvLyB0aGV5IGFyZSBpZ25v
cmVkLgotICAvLyBUaGUgY29udmVyc2lvbiByb3V0aW5lIGZpcnN0IHJlYWRzIGFueSBwb3NzaWJs
ZSBzaWducy4gVGhlbiBpdCBjb21wYXJlcyB0aGUKLSAgLy8gZm9sbG93aW5nIGNoYXJhY3RlciBv
ZiB0aGUgaW5wdXQtc3RyaW5nIHdpdGggdGhlIGZpcnN0IGNoYXJhY3RlciBvZgotICAvLyB0aGUg
aW5maW5pdHksIGFuZCBuYW4tc3ltYm9sLiBJZiBlaXRoZXIgbWF0Y2hlcywgdGhlIGZ1bmN0aW9u
IGFzc3VtZXMsIHRoYXQKLSAgLy8gYSBtYXRjaCBoYXMgYmVlbiBmb3VuZCwgYW5kIGV4cGVjdHMg
dGhlIGZvbGxvd2luZyBpbnB1dCBjaGFyYWN0ZXJzIHRvIG1hdGNoCi0gIC8vIHRoZSByZW1haW5p
bmcgY2hhcmFjdGVycyBvZiB0aGUgc3BlY2lhbC12YWx1ZSBzeW1ib2wuCi0gIC8vIFRoaXMgbWVh
bnMgdGhhdCB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBhcHBseSB0byBzcGVjaWFsLXZhbHVl
IHN5bWJvbHM6Ci0gIC8vICAtIHRoZXkgbXVzdCBub3Qgc3RhcnQgd2l0aCBzaWducyAoJysnLCBv
ciAnLScpLAotICAvLyAgLSB0aGV5IG11c3Qgbm90IGhhdmUgdGhlIHNhbWUgZmlyc3QgY2hhcmFj
dGVyLgotICAvLyAgLSB0aGV5IG11c3Qgbm90IHN0YXJ0IHdpdGggZGlnaXRzLgotICAvLwotICAv
LyBFeGFtcGxlczoKLSAgLy8gIGZsYWdzID0gQUxMT1dfSEVYIHwgQUxMT1dfVFJBSUxJTkdfSlVO
SywKLSAgLy8gIGVtcHR5X3N0cmluZ192YWx1ZSA9IDAuMCwKLSAgLy8gIGp1bmtfc3RyaW5nX3Zh
bHVlID0gTmFOLAotICAvLyAgaW5maW5pdHlfc3ltYm9sID0gImluZmluaXR5IiwKLSAgLy8gIG5h
bl9zeW1ib2wgPSAibmFuIjoKLSAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNCIpIC0+IDQ2
NjAuMC4KLSAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNEsiKSAtPiA0NjYwLjAuCi0gIC8v
ICAgIFN0cmluZ1RvRG91YmxlKCIiKSAtPiAwLjAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZS4KLSAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIiAiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgot
ICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiIDEiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVl
LgotICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3Zh
bHVlLgotICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiLTEyMy40NSIpIC0+IC0xMjMuNDUuCi0gIC8v
ICAgIFN0cmluZ1RvRG91YmxlKCItLTEyMy40NSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFs
dWUuCi0gIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlNDUiKSAtPiAxMjNlNDUuCi0gIC8vICAg
IFN0cmluZ1RvRG91YmxlKCIxMjNFNDUiKSAtPiAxMjNlNDUuCi0gIC8vICAgIFN0cmluZ1RvRG91
YmxlKCIxMjNlKzQ1IikgLT4gMTIzZTQ1LgotICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzRS00
NSIpIC0+IDEyM2UtNDUuCi0gIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlIikgLT4gMTIzLjAg
IC8vIHRyYWlsaW5nIGp1bmsgaWdub3JlZC4KLSAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM2Ut
IikgLT4gMTIzLjAgIC8vIHRyYWlsaW5nIGp1bmsgaWdub3JlZC4KLSAgLy8gICAgU3RyaW5nVG9E
b3VibGUoIitOYU4iKSAtPiBOYU4gIC8vIE5hTiBzdHJpbmcgbGl0ZXJhbC4KLSAgLy8gICAgU3Ry
aW5nVG9Eb3VibGUoIi1pbmZpbml0eSIpIC0+IC1pbmYuICAvLyBpbmZpbml0eSBsaXRlcmFsLgot
ICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiSW5maW5pdHkiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5n
X3ZhbHVlLgotICAvLwotICAvLyAgZmxhZ3MgPSBBTExPV19PQ1RBTCB8IEFMTE9XX0xFQURJTkdf
U1BBQ0VTLAotICAvLyAgZW1wdHlfc3RyaW5nX3ZhbHVlID0gMC4wLAotICAvLyAganVua19zdHJp
bmdfdmFsdWUgPSBOYU4sCi0gIC8vICBpbmZpbml0eV9zeW1ib2wgPSBOVUxMLAotICAvLyAgbmFu
X3N5bWJvbCA9IE5VTEw6Ci0gIC8vICAgIFN0cmluZ1RvRG91YmxlKCIweDEyMzQiKSAtPiBOYU4g
IC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgotICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMDEyMzQiKSAt
PiA2NjguMC4KLSAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiIpIC0+IDAuMCAgLy8gZW1wdHlfc3Ry
aW5nX3ZhbHVlLgotICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiICIpIC0+IDAuMCAgLy8gZW1wdHlf
c3RyaW5nX3ZhbHVlLgotICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiIDEiKSAtPiAxLjAKLSAgLy8g
ICAgU3RyaW5nVG9Eb3VibGUoIjB4IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KLSAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIjAxMjNlNDUiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3Zh
bHVlLgotICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMDEyMzlFNDUiKSAtPiAxMjM5ZTQ1LgotICAv
LyAgICBTdHJpbmdUb0RvdWJsZSgiLWluZmluaXR5IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192
YWx1ZS4KLSAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIk5hTiIpIC0+IE5hTiAgLy8ganVua19zdHJp
bmdfdmFsdWUuCi0gIFN0cmluZ1RvRG91YmxlQ29udmVydGVyKGludCBmbGFncywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIGVtcHR5X3N0cmluZ192YWx1ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIGp1bmtfc3RyaW5nX3ZhbHVlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBpbmZpbml0eV9zeW1ib2wsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbl9zeW1ib2wpCi0gICAgICA6IGZsYWdzXyhmbGFncyks
Ci0gICAgICAgIGVtcHR5X3N0cmluZ192YWx1ZV8oZW1wdHlfc3RyaW5nX3ZhbHVlKSwKLSAgICAg
ICAganVua19zdHJpbmdfdmFsdWVfKGp1bmtfc3RyaW5nX3ZhbHVlKSwKLSAgICAgICAgaW5maW5p
dHlfc3ltYm9sXyhpbmZpbml0eV9zeW1ib2wpLAotICAgICAgICBuYW5fc3ltYm9sXyhuYW5fc3lt
Ym9sKSB7Ci0gIH0KLQotICAvLyBQZXJmb3JtcyB0aGUgY29udmVyc2lvbi4KLSAgLy8gVGhlIG91
dHB1dCBwYXJhbWV0ZXIgJ3Byb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50JyBpcyBzZXQgdG8gdGhl
IG51bWJlcgotICAvLyBvZiBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZCB0byBy
ZWFkIHRoZSBudW1iZXIuCi0gIC8vIFNwYWNlcyB0aGFuIGFyZSBwcm9jZXNzZWQgd2l0aCBBTExP
V197TEVBRElOR3xUUkFJTElOR31fU1BBQ0VTIGFyZSBpbmNsdWRlZAotICAvLyBpbiB0aGUgJ3By
b2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50Jy4gVHJhaWxpbmcganVuayBpcyBuZXZlciBpbmNsdWRl
ZC4KLSAgZG91YmxlIFN0cmluZ1RvRG91YmxlKGNvbnN0IGNoYXIqIGJ1ZmZlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQq
IHByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50KSBjb25zdDsKLQotICAvLyBTYW1lIGFzIFN0cmlu
Z1RvRG91YmxlIGFib3ZlIGJ1dCBmb3IgMTYgYml0IGNoYXJhY3RlcnMuCi0gIGRvdWJsZSBTdHJp
bmdUb0RvdWJsZShjb25zdCB1YzE2KiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBwcm9jZXNzZWRfY2hhcmFj
dGVyc19jb3VudCkgY29uc3Q7Ci0KLSAgLy8gU2FtZSBhcyBTdHJpbmdUb0RvdWJsZSBidXQgcmVh
ZHMgYSBmbG9hdC4KLSAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgbm90IGVxdWl2YWxlbnQgdG8gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KFN0cmluZ1RvRG91YmxlKC4uLikpCi0gIC8vIGR1ZSB0byBwb3RlbnRp
YWwgZG91YmxlLXJvdW5kaW5nLgotICBmbG9hdCBTdHJpbmdUb0Zsb2F0KGNvbnN0IGNoYXIqIGJ1
ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAotICAgICAgICAgICAgICAg
ICAgICAgIGludCogcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQpIGNvbnN0OwotCi0gIC8vIFNh
bWUgYXMgU3RyaW5nVG9GbG9hdCBhYm92ZSBidXQgZm9yIDE2IGJpdCBjaGFyYWN0ZXJzLgotICBm
bG9hdCBTdHJpbmdUb0Zsb2F0KGNvbnN0IHVjMTYqIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgIGludCogcHJvY2Vzc2VkX2No
YXJhY3RlcnNfY291bnQpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgY29uc3QgaW50IGZsYWdzXzsK
LSAgY29uc3QgZG91YmxlIGVtcHR5X3N0cmluZ192YWx1ZV87Ci0gIGNvbnN0IGRvdWJsZSBqdW5r
X3N0cmluZ192YWx1ZV87Ci0gIGNvbnN0IGNoYXIqIGNvbnN0IGluZmluaXR5X3N5bWJvbF87Ci0g
IGNvbnN0IGNoYXIqIGNvbnN0IG5hbl9zeW1ib2xfOwotCi0gIHRlbXBsYXRlIDxjbGFzcyBJdGVy
YXRvcj4KLSAgZG91YmxlIFN0cmluZ1RvSWVlZShJdGVyYXRvciBzdGFydF9wb2ludGVyLAotICAg
ICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgYm9v
bCByZWFkX2FzX2RvdWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQqIHByb2Nlc3NlZF9j
aGFyYWN0ZXJzX2NvdW50KSBjb25zdDsKLQotICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RP
UlMoU3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGRvdWJs
ZV9jb252ZXJzaW9uCi0KLSNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZF
UlNJT05fSF8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2RvdWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uL2Zhc3QtZHRvYS5jYyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2RvdWJsZS1jb252ZXJzaW9uL2RvdWJsZS1j
b252ZXJzaW9uL2Zhc3QtZHRvYS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEz
NTAzODNhOTVlYTY5ZTczNjA0YmQ2OTJhZTIwMzdmZjRiN2IxNC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi9mYXN0LWR0b2EuY2MK
KysrIC9kZXYvbnVsbApAQCAtMSw2NjUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTIgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0vLyAgICAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLS8vICAgICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0jaW5jbHVkZSAiZmFzdC1kdG9hLmgiCi0KLSNpbmNsdWRlICJjYWNoZWQtcG93ZXJzLmgi
Ci0jaW5jbHVkZSAiZGl5LWZwLmgiCi0jaW5jbHVkZSAiaWVlZS5oIgotCi1uYW1lc3BhY2UgZG91
YmxlX2NvbnZlcnNpb24gewotCi0vLyBUaGUgbWluaW1hbCBhbmQgbWF4aW1hbCB0YXJnZXQgZXhw
b25lbnQgZGVmaW5lIHRoZSByYW5nZSBvZiB3J3MgYmluYXJ5Ci0vLyBleHBvbmVudCwgd2hlcmUg
J3cnIGlzIHRoZSByZXN1bHQgb2YgbXVsdGlwbHlpbmcgdGhlIGlucHV0IGJ5IGEgY2FjaGVkIHBv
d2VyCi0vLyBvZiB0ZW4uCi0vLwotLy8gQSBkaWZmZXJlbnQgcmFuZ2UgbWlnaHQgYmUgY2hvc2Vu
IG9uIGEgZGlmZmVyZW50IHBsYXRmb3JtLCB0byBvcHRpbWl6ZSBkaWdpdAotLy8gZ2VuZXJhdGlv
biwgYnV0IGEgc21hbGxlciByYW5nZSByZXF1aXJlcyBtb3JlIHBvd2VycyBvZiB0ZW4gdG8gYmUg
Y2FjaGVkLgotc3RhdGljIGNvbnN0IGludCBrTWluaW1hbFRhcmdldEV4cG9uZW50ID0gLTYwOwot
c3RhdGljIGNvbnN0IGludCBrTWF4aW1hbFRhcmdldEV4cG9uZW50ID0gLTMyOwotCi0KLS8vIEFk
anVzdHMgdGhlIGxhc3QgZGlnaXQgb2YgdGhlIGdlbmVyYXRlZCBudW1iZXIsIGFuZCBzY3JlZW5z
IG91dCBnZW5lcmF0ZWQKLS8vIHNvbHV0aW9ucyB0aGF0IG1heSBiZSBpbmFjY3VyYXRlLiBBIHNv
bHV0aW9uIG1heSBiZSBpbmFjY3VyYXRlIGlmIGl0IGlzCi0vLyBvdXRzaWRlIHRoZSBzYWZlIGlu
dGVydmFsLCBvciBpZiB3ZSBjYW5ub3QgcHJvdmUgdGhhdCBpdCBpcyBjbG9zZXIgdG8gdGhlCi0v
LyBpbnB1dCB0aGFuIGEgbmVpZ2hib3JpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNhbWUgbGVu
Z3RoLgotLy8KLS8vIElucHV0OiAqIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkaWdpdHMgb2YgdG9v
X2hpZ2ggLyAxMF5rYXBwYQotLy8gICAgICAgICogdGhlIGJ1ZmZlcidzIGxlbmd0aAotLy8gICAg
ICAgICogZGlzdGFuY2VfdG9vX2hpZ2hfdyA9PSAodG9vX2hpZ2ggLSB3KS5mKCkgKiB1bml0Ci0v
LyAgICAgICAgKiB1bnNhZmVfaW50ZXJ2YWwgPT0gKHRvb19oaWdoIC0gdG9vX2xvdykuZigpICog
dW5pdAotLy8gICAgICAgICogcmVzdCA9ICh0b29faGlnaCAtIGJ1ZmZlciAqIDEwXmthcHBhKS5m
KCkgKiB1bml0Ci0vLyAgICAgICAgKiB0ZW5fa2FwcGEgPSAxMF5rYXBwYSAqIHVuaXQKLS8vICAg
ICAgICAqIHVuaXQgPSB0aGUgY29tbW9uIG11bHRpcGxpZXIKLS8vIE91dHB1dDogcmV0dXJucyB0
cnVlIGlmIHRoZSBidWZmZXIgaXMgZ3VhcmFudGVlZCB0byBjb250YWluIHRoZSBjbG9zZXN0Ci0v
LyAgICByZXByZXNlbnRhYmxlIG51bWJlciB0byB0aGUgaW5wdXQuCi0vLyAgTW9kaWZpZXMgdGhl
IGdlbmVyYXRlZCBkaWdpdHMgaW4gdGhlIGJ1ZmZlciB0byBhcHByb2FjaCAocm91bmQgdG93YXJk
cykgdy4KLXN0YXRpYyBib29sIFJvdW5kV2VlZChWZWN0b3I8Y2hhcj4gYnVmZmVyLAotICAgICAg
ICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgdWludDY0
X3QgZGlzdGFuY2VfdG9vX2hpZ2hfdywKLSAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB1
bnNhZmVfaW50ZXJ2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgcmVzdCwKLSAg
ICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB0ZW5fa2FwcGEsCi0gICAgICAgICAgICAgICAg
ICAgICAgdWludDY0X3QgdW5pdCkgewotICB1aW50NjRfdCBzbWFsbF9kaXN0YW5jZSA9IGRpc3Rh
bmNlX3Rvb19oaWdoX3cgLSB1bml0OwotICB1aW50NjRfdCBiaWdfZGlzdGFuY2UgPSBkaXN0YW5j
ZV90b29faGlnaF93ICsgdW5pdDsKLSAgLy8gTGV0IHdfbG93ICA9IHRvb19oaWdoIC0gYmlnX2Rp
c3RhbmNlLCBhbmQKLSAgLy8gICAgIHdfaGlnaCA9IHRvb19oaWdoIC0gc21hbGxfZGlzdGFuY2Uu
Ci0gIC8vIE5vdGU6IHdfbG93IDwgdyA8IHdfaGlnaAotICAvLwotICAvLyBUaGUgcmVhbCB3ICgq
IHVuaXQpIG11c3QgbGllIHNvbWV3aGVyZSBpbnNpZGUgdGhlIGludGVydmFsCi0gIC8vIF13X2xv
dzsgd19oaWdoWyAob2Z0ZW4gd3JpdHRlbiBhcyAiKHdfbG93OyB3X2hpZ2gpIikKLQotICAvLyBC
YXNpY2FsbHkgdGhlIGJ1ZmZlciBjdXJyZW50bHkgY29udGFpbnMgYSBudW1iZXIgaW4gdGhlIHVu
c2FmZSBpbnRlcnZhbAotICAvLyBddG9vX2xvdzsgdG9vX2hpZ2hbIHdpdGggdG9vX2xvdyA8IHcg
PCB0b29faGlnaAotICAvLwotICAvLyAgdG9vX2hpZ2ggLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KLSAgLy8gICAgICAgICAg
ICAgICAgICAgICBediAxIHVuaXQgICAgICAgICAgICBeICAgICAgXiAgICAgICAgICAgICAgICAg
XiAgICAgIF4KLSAgLy8gIGJvdW5kYXJ5X2hpZ2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAu
ICAgICAgLiAgICAgICAgICAgICAgICAgLiAgICAgIC4KLSAgLy8gICAgICAgICAgICAgICAgICAg
ICBediAxIHVuaXQgICAgICAgICAgICAuICAgICAgLiAgICAgICAgICAgICAgICAgLiAgICAgIC4K
LSAgLy8gICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICArICAtIC0gKyAt
IC0gLSAtIC0gLSAgICAgLiAgICAgIC4KLSAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuICAgICAgLiAgICAgICAgIF4gICAgICAgLiAgICAgIC4KLSAgLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICBiaWdfZGlzdGFuY2UgIC4g
ICAgICAgLiAgICAgIC4KLSAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuICAgICAgLiAgICAgICAgIC4gICAgICAgLiAgICByZXN0Ci0gIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc21hbGxfZGlzdGFuY2UgICAgIC4gICAgICAgICAuICAgICAgIC4g
ICAgICAuCi0gIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAg
ICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCi0gIC8vICB3X2hpZ2ggLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCi0g
IC8vICAgICAgICAgICAgICAgICAgICAgXnYgMSB1bml0ICAgICAgICAgICAgICAgICAgIC4gICAg
ICAgICAuICAgICAgIC4gICAgICAuCi0gIC8vICB3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCi0gIC8vICAgICAg
ICAgICAgICAgICAgICAgXnYgMSB1bml0ICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAuICAg
ICAgIC4gICAgICAuCi0gIC8vICB3X2xvdyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gICAgICAgICAuICAgICAgIC4gICAgICAuCi0gIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICAgICAgIC4gICAg
ICB2Ci0gIC8vICBidWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLQotICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAuCi0gIC8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX2ludGVydmFs
ICAgIC4KLSAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHYgICAgICAgLgotICAvLyAgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICAgICAuCi0gIC8vICAgICAgICAgICAg
ICAgICAgICAgXnYgMSB1bml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4K
LSAgLy8gIGJvdW5kYXJ5X2xvdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAg
ICAgICAgICAgdW5zYWZlX2ludGVydmFsCi0gIC8vICAgICAgICAgICAgICAgICAgICAgXnYgMSB1
bml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYKLSAgLy8gIHRvb19sb3cg
IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtCi0gIC8vCi0gIC8vCi0gIC8vIE5vdGUgdGhhdCB0aGUgdmFsdWUgb2YgYnVmZmVy
IGNvdWxkIGxpZSBhbnl3aGVyZSBpbnNpZGUgdGhlIHJhbmdlIHRvb19sb3cKLSAgLy8gdG8gdG9v
X2hpZ2guCi0gIC8vCi0gIC8vIGJvdW5kYXJ5X2xvdywgYm91bmRhcnlfaGlnaCBhbmQgdyBhcmUg
YXBwcm94aW1hdGlvbnMgb2YgdGhlIHJlYWwgYm91bmRhcmllcwotICAvLyBhbmQgdiAodGhlIGlu
cHV0IG51bWJlcikuIFRoZXkgYXJlIGd1YXJhbnRlZWQgdG8gYmUgcHJlY2lzZSB1cCB0byBvbmUg
dW5pdC4KLSAgLy8gSW4gZmFjdCB0aGUgZXJyb3IgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHJpY3Rs
eSBsZXNzIHRoYW4gb25lIHVuaXQuCi0gIC8vCi0gIC8vIEFueXRoaW5nIHRoYXQgbGllcyBvdXRz
aWRlIHRoZSB1bnNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCBub3QgdG8gcm91bmQKLSAgLy8g
dG8gdiB3aGVuIHJlYWQgYWdhaW4uCi0gIC8vIEFueXRoaW5nIHRoYXQgbGllcyBpbnNpZGUgdGhl
IHNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCB0byByb3VuZCB0byB2Ci0gIC8vIHdoZW4gcmVh
ZCBhZ2Fpbi4KLSAgLy8gSWYgdGhlIG51bWJlciBpbnNpZGUgdGhlIGJ1ZmZlciBsaWVzIGluc2lk
ZSB0aGUgdW5zYWZlIGludGVydmFsIGJ1dCBub3QKLSAgLy8gaW5zaWRlIHRoZSBzYWZlIGludGVy
dmFsIHRoZW4gd2Ugc2ltcGx5IGRvIG5vdCBrbm93IGFuZCBiYWlsIG91dCAocmV0dXJuaW5nCi0g
IC8vIGZhbHNlKS4KLSAgLy8KLSAgLy8gU2ltaWxhcmx5IHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFj
Y291bnQgdGhlIGltcHJlY2lzaW9uIG9mICd3JyB3aGVuIGZpbmRpbmcKLSAgLy8gdGhlIGNsb3Nl
c3QgcmVwcmVzZW50YXRpb24gb2YgJ3cnLiBJZiB3ZSBoYXZlIHR3byBwb3RlbnRpYWwKLSAgLy8g
cmVwcmVzZW50YXRpb25zLCBhbmQgb25lIGlzIGNsb3NlciB0byBib3RoIHdfbG93IGFuZCB3X2hp
Z2gsIHRoZW4gd2Uga25vdwotICAvLyBpdCBpcyBjbG9zZXIgdG8gdGhlIGFjdHVhbCB2YWx1ZSB2
LgotICAvLwotICAvLyBCeSBnZW5lcmF0aW5nIHRoZSBkaWdpdHMgb2YgdG9vX2hpZ2ggd2UgZ290
IHRoZSBsYXJnZXN0IChjbG9zZXN0IHRvCi0gIC8vIHRvb19oaWdoKSBidWZmZXIgdGhhdCBpcyBz
dGlsbCBpbiB0aGUgdW5zYWZlIGludGVydmFsLiBJbiB0aGUgY2FzZSB3aGVyZQotICAvLyB3X2hp
Z2ggPCBidWZmZXIgPCB0b29faGlnaCB3ZSB0cnkgdG8gZGVjcmVtZW50IHRoZSBidWZmZXIuCi0g
IC8vIFRoaXMgd2F5IHRoZSBidWZmZXIgYXBwcm9hY2hlcyAocm91bmRzIHRvd2FyZHMpIHcuCi0g
IC8vIFRoZXJlIGFyZSAzIGNvbmRpdGlvbnMgdGhhdCBzdG9wIHRoZSBkZWNyZW1lbnRhdGlvbiBw
cm9jZXNzOgotICAvLyAgIDEpIHRoZSBidWZmZXIgaXMgYWxyZWFkeSBiZWxvdyB3X2hpZ2gKLSAg
Ly8gICAyKSBkZWNyZW1lbnRpbmcgdGhlIGJ1ZmZlciB3b3VsZCBtYWtlIGl0IGxlYXZlIHRoZSB1
bnNhZmUgaW50ZXJ2YWwKLSAgLy8gICAzKSBkZWNyZW1lbnRpbmcgdGhlIGJ1ZmZlciB3b3VsZCB5
aWVsZCBhIG51bWJlciBiZWxvdyB3X2hpZ2ggYW5kIGZhcnRoZXIKLSAgLy8gICAgICBhd2F5IHRo
YW4gdGhlIGN1cnJlbnQgbnVtYmVyLiBJbiBvdGhlciB3b3JkczoKLSAgLy8gICAgICAgICAgICAg
IChidWZmZXJ7LTF9IDwgd19oaWdoKSAmJiB3X2hpZ2ggLSBidWZmZXJ7LTF9ID4gYnVmZmVyIC0g
d19oaWdoCi0gIC8vIEluc3RlYWQgb2YgdXNpbmcgdGhlIGJ1ZmZlciBkaXJlY3RseSB3ZSB1c2Ug
aXRzIGRpc3RhbmNlIHRvIHRvb19oaWdoLgotICAvLyBDb25jZXB0dWFsbHkgcmVzdCB+PSB0b29f
aGlnaCAtIGJ1ZmZlcgotICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmcgdGVzdHMgaW4g
dGhpcyBvcmRlciB0byBhdm9pZCBvdmVyLSBhbmQKLSAgLy8gdW5kZXJmbG93cy4KLSAgQVNTRVJU
KHJlc3QgPD0gdW5zYWZlX2ludGVydmFsKTsKLSAgd2hpbGUgKHJlc3QgPCBzbWFsbF9kaXN0YW5j
ZSAmJiAgLy8gTmVnYXRlZCBjb25kaXRpb24gMQotICAgICAgICAgdW5zYWZlX2ludGVydmFsIC0g
cmVzdCA+PSB0ZW5fa2FwcGEgJiYgIC8vIE5lZ2F0ZWQgY29uZGl0aW9uIDIKLSAgICAgICAgIChy
ZXN0ICsgdGVuX2thcHBhIDwgc21hbGxfZGlzdGFuY2UgfHwgIC8vIGJ1ZmZlcnstMX0gPiB3X2hp
Z2gKLSAgICAgICAgICBzbWFsbF9kaXN0YW5jZSAtIHJlc3QgPj0gcmVzdCArIHRlbl9rYXBwYSAt
IHNtYWxsX2Rpc3RhbmNlKSkgewotICAgIGJ1ZmZlcltsZW5ndGggLSAxXS0tOwotICAgIHJlc3Qg
Kz0gdGVuX2thcHBhOwotICB9Ci0KLSAgLy8gV2UgaGF2ZSBhcHByb2FjaGVkIHcrIGFzIG11Y2gg
YXMgcG9zc2libGUuIFdlIG5vdyB0ZXN0IGlmIGFwcHJvYWNoaW5nIHctCi0gIC8vIHdvdWxkIHJl
cXVpcmUgY2hhbmdpbmcgdGhlIGJ1ZmZlci4gSWYgeWVzLCB0aGVuIHdlIGhhdmUgdHdvIHBvc3Np
YmxlCi0gIC8vIHJlcHJlc2VudGF0aW9ucyBjbG9zZSB0byB3LCBidXQgd2UgY2Fubm90IGRlY2lk
ZSB3aGljaCBvbmUgaXMgY2xvc2VyLgotICBpZiAocmVzdCA8IGJpZ19kaXN0YW5jZSAmJgotICAg
ICAgdW5zYWZlX2ludGVydmFsIC0gcmVzdCA+PSB0ZW5fa2FwcGEgJiYKLSAgICAgIChyZXN0ICsg
dGVuX2thcHBhIDwgYmlnX2Rpc3RhbmNlIHx8Ci0gICAgICAgYmlnX2Rpc3RhbmNlIC0gcmVzdCA+
IHJlc3QgKyB0ZW5fa2FwcGEgLSBiaWdfZGlzdGFuY2UpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICB9Ci0KLSAgLy8gV2VlZGluZyB0ZXN0LgotICAvLyAgIFRoZSBzYWZlIGludGVydmFsIGlzIFt0
b29fbG93ICsgMiB1bHA7IHRvb19oaWdoIC0gMiB1bHBdCi0gIC8vICAgU2luY2UgdG9vX2xvdyA9
IHRvb19oaWdoIC0gdW5zYWZlX2ludGVydmFsIHRoaXMgaXMgZXF1aXZhbGVudCB0bwotICAvLyAg
ICAgIFt0b29faGlnaCAtIHVuc2FmZV9pbnRlcnZhbCArIDQgdWxwOyB0b29faGlnaCAtIDIgdWxw
XQotICAvLyAgIENvbmNlcHR1YWxseSB3ZSBoYXZlOiByZXN0IH49IHRvb19oaWdoIC0gYnVmZmVy
Ci0gIHJldHVybiAoMiAqIHVuaXQgPD0gcmVzdCkgJiYgKHJlc3QgPD0gdW5zYWZlX2ludGVydmFs
IC0gNCAqIHVuaXQpOwotfQotCi0KLS8vIFJvdW5kcyB0aGUgYnVmZmVyIHVwd2FyZHMgaWYgdGhl
IHJlc3VsdCBpcyBjbG9zZXIgdG8gdiBieSBwb3NzaWJseSBhZGRpbmcKLS8vIDEgdG8gdGhlIGJ1
ZmZlci4gSWYgdGhlIHByZWNpc2lvbiBvZiB0aGUgY2FsY3VsYXRpb24gaXMgbm90IHN1ZmZpY2ll
bnQgdG8KLS8vIHJvdW5kIGNvcnJlY3RseSwgcmV0dXJuIGZhbHNlLgotLy8gVGhlIHJvdW5kaW5n
IG1pZ2h0IHNoaWZ0IHRoZSB3aG9sZSBidWZmZXIgaW4gd2hpY2ggY2FzZSB0aGUga2FwcGEgaXMK
LS8vIGFkanVzdGVkLiBGb3IgZXhhbXBsZSAiOTkiLCBrYXBwYSA9IDMgbWlnaHQgYmVjb21lICIx
MCIsIGthcHBhID0gNC4KLS8vCi0vLyBJZiAyKnJlc3QgPiB0ZW5fa2FwcGEgdGhlbiB0aGUgYnVm
ZmVyIG5lZWRzIHRvIGJlIHJvdW5kIHVwLgotLy8gcmVzdCBjYW4gaGF2ZSBhbiBlcnJvciBvZiAr
Ly0gMSB1bml0LiBUaGlzIGZ1bmN0aW9uIGFjY291bnRzIGZvciB0aGUKLS8vIGltcHJlY2lzaW9u
IGFuZCByZXR1cm5zIGZhbHNlLCBpZiB0aGUgcm91bmRpbmcgZGlyZWN0aW9uIGNhbm5vdCBiZQot
Ly8gdW5hbWJpZ3VvdXNseSBkZXRlcm1pbmVkLgotLy8KLS8vIFByZWNvbmRpdGlvbjogcmVzdCA8
IHRlbl9rYXBwYS4KLXN0YXRpYyBib29sIFJvdW5kV2VlZENvdW50ZWQoVmVjdG9yPGNoYXI+IGJ1
ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgcmVzdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDY0X3QgdGVuX2thcHBhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50NjRfdCB1bml0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGthcHBh
KSB7Ci0gIEFTU0VSVChyZXN0IDwgdGVuX2thcHBhKTsKLSAgLy8gVGhlIGZvbGxvd2luZyB0ZXN0
cyBhcmUgZG9uZSBpbiBhIHNwZWNpZmljIG9yZGVyIHRvIGF2b2lkIG92ZXJmbG93cy4gVGhleQot
ICAvLyB3aWxsIHdvcmsgY29ycmVjdGx5IHdpdGggYW55IHVpbnQ2NCB2YWx1ZXMgb2YgcmVzdCA8
IHRlbl9rYXBwYSBhbmQgdW5pdC4KLSAgLy8KLSAgLy8gSWYgdGhlIHVuaXQgaXMgdG9vIGJpZywg
dGhlbiB3ZSBkb24ndCBrbm93IHdoaWNoIHdheSB0byByb3VuZC4gRm9yIGV4YW1wbGUKLSAgLy8g
YSB1bml0IG9mIDUwIG1lYW5zIHRoYXQgdGhlIHJlYWwgbnVtYmVyIGxpZXMgd2l0aGluIHJlc3Qg
Ky8tIDUwLiBJZgotICAvLyAxMF5rYXBwYSA9PSA0MCB0aGVuIHRoZXJlIGlzIG5vIHdheSB0byB0
ZWxsIHdoaWNoIHdheSB0byByb3VuZC4KLSAgaWYgKHVuaXQgPj0gdGVuX2thcHBhKSByZXR1cm4g
ZmFsc2U7Ci0gIC8vIEV2ZW4gaWYgdW5pdCBpcyBqdXN0IGhhbGYgdGhlIHNpemUgb2YgMTBea2Fw
cGEgd2UgYXJlIGFscmVhZHkgY29tcGxldGVseQotICAvLyBsb3N0LiAoQW5kIGFmdGVyIHRoZSBw
cmV2aW91cyB0ZXN0IHdlIGtub3cgdGhhdCB0aGUgZXhwcmVzc2lvbiB3aWxsIG5vdAotICAvLyBv
dmVyL3VuZGVyZmxvdy4pCi0gIGlmICh0ZW5fa2FwcGEgLSB1bml0IDw9IHVuaXQpIHJldHVybiBm
YWxzZTsKLSAgLy8gSWYgMiAqIChyZXN0ICsgdW5pdCkgPD0gMTBea2FwcGEgd2UgY2FuIHNhZmVs
eSByb3VuZCBkb3duLgotICBpZiAoKHRlbl9rYXBwYSAtIHJlc3QgPiByZXN0KSAmJiAodGVuX2th
cHBhIC0gMiAqIHJlc3QgPj0gMiAqIHVuaXQpKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAg
Ly8gSWYgMiAqIChyZXN0IC0gdW5pdCkgPj0gMTBea2FwcGEsIHRoZW4gd2UgY2FuIHNhZmVseSBy
b3VuZCB1cC4KLSAgaWYgKChyZXN0ID4gdW5pdCkgJiYgKHRlbl9rYXBwYSAtIChyZXN0IC0gdW5p
dCkgPD0gKHJlc3QgLSB1bml0KSkpIHsKLSAgICAvLyBJbmNyZW1lbnQgdGhlIGxhc3QgZGlnaXQg
cmVjdXJzaXZlbHkgdW50aWwgd2UgZmluZCBhIG5vbiAnOScgZGlnaXQuCi0gICAgYnVmZmVyW2xl
bmd0aCAtIDFdKys7Ci0gICAgZm9yIChpbnQgaSA9IGxlbmd0aCAtIDE7IGkgPiAwOyAtLWkpIHsK
LSAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnICsgMTApIGJyZWFrOwotICAgICAgYnVmZmVyW2ld
ID0gJzAnOwotICAgICAgYnVmZmVyW2kgLSAxXSsrOwotICAgIH0KLSAgICAvLyBJZiB0aGUgZmly
c3QgZGlnaXQgaXMgbm93ICcwJysgMTAgd2UgaGFkIGEgYnVmZmVyIHdpdGggYWxsICc5J3MuIFdp
dGggdGhlCi0gICAgLy8gZXhjZXB0aW9uIG9mIHRoZSBmaXJzdCBkaWdpdCBhbGwgZGlnaXRzIGFy
ZSBub3cgJzAnLiBTaW1wbHkgc3dpdGNoIHRoZQotICAgIC8vIGZpcnN0IGRpZ2l0IHRvICcxJyBh
bmQgYWRqdXN0IHRoZSBrYXBwYS4gRXhhbXBsZTogIjk5IiBiZWNvbWVzICIxMCIgYW5kCi0gICAg
Ly8gdGhlIHBvd2VyICh0aGUga2FwcGEpIGlzIGluY3JlYXNlZC4KLSAgICBpZiAoYnVmZmVyWzBd
ID09ICcwJyArIDEwKSB7Ci0gICAgICBidWZmZXJbMF0gPSAnMSc7Ci0gICAgICAoKmthcHBhKSAr
PSAxOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0K
LS8vIFJldHVybnMgdGhlIGJpZ2dlc3QgcG93ZXIgb2YgdGVuIHRoYXQgaXMgbGVzcyB0aGFuIG9y
IGVxdWFsIHRvIHRoZSBnaXZlbgotLy8gbnVtYmVyLiBXZSBmdXJ0aGVybW9yZSByZWNlaXZlIHRo
ZSBtYXhpbXVtIG51bWJlciBvZiBiaXRzICdudW1iZXInIGhhcy4KLS8vCi0vLyBSZXR1cm5zIHBv
d2VyID09IDEwXihleHBvbmVudF9wbHVzX29uZS0xKSBzdWNoIHRoYXQKLS8vICAgIHBvd2VyIDw9
IG51bWJlciA8IHBvd2VyICogMTAuCi0vLyBJZiBudW1iZXJfYml0cyA9PSAwIHRoZW4gMF4oMC0x
KSBpcyByZXR1cm5lZC4KLS8vIFRoZSBudW1iZXIgb2YgYml0cyBtdXN0IGJlIDw9IDMyLgotLy8g
UHJlY29uZGl0aW9uOiBudW1iZXIgPCAoMSA8PCAobnVtYmVyX2JpdHMgKyAxKSkuCi0KLS8vIElu
c3BpcmVkIGJ5IHRoZSBtZXRob2QgZm9yIGZpbmRpbmcgYW4gaW50ZWdlciBsb2cgYmFzZSAxMCBm
cm9tIGhlcmU6Ci0vLyBodHRwOi8vZ3JhcGhpY3Muc3RhbmZvcmQuZWR1L35zZWFuZGVyL2JpdGhh
Y2tzLmh0bWwjSW50ZWdlckxvZzEwCi1zdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IGtTbWFsbFBv
d2Vyc09mVGVuW10gPQotICAgIHswLCAxLCAxMCwgMTAwLCAxMDAwLCAxMDAwMCwgMTAwMDAwLCAx
MDAwMDAwLCAxMDAwMDAwMCwgMTAwMDAwMDAwLAotICAgICAxMDAwMDAwMDAwfTsKLQotc3RhdGlj
IHZvaWQgQmlnZ2VzdFBvd2VyVGVuKHVpbnQzMl90IG51bWJlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbnVtYmVyX2JpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QqIHBvd2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZXhwb25l
bnRfcGx1c19vbmUpIHsKLSAgQVNTRVJUKG51bWJlciA8ICgxdSA8PCAobnVtYmVyX2JpdHMgKyAx
KSkpOwotICAvLyAxMjMzLzQwOTYgaXMgYXBwcm94aW1hdGVseSAxL2xnKDEwKS4KLSAgaW50IGV4
cG9uZW50X3BsdXNfb25lX2d1ZXNzID0gKChudW1iZXJfYml0cyArIDEpICogMTIzMyA+PiAxMik7
Ci0gIC8vIFdlIGluY3JlbWVudCB0byBza2lwIG92ZXIgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBr
UG93ZXJzT2YxMCB0YWJsZS4KLSAgLy8gTm90ZToga1Bvd2Vyc09mMTBbaV0gPT0gMTBeKGktMSku
Ci0gIGV4cG9uZW50X3BsdXNfb25lX2d1ZXNzKys7Ci0gIC8vIFdlIGRvbid0IGhhdmUgYW55IGd1
YXJhbnRlZXMgdGhhdCAyXm51bWJlcl9iaXRzIDw9IG51bWJlci4KLSAgaWYgKG51bWJlciA8IGtT
bWFsbFBvd2Vyc09mVGVuW2V4cG9uZW50X3BsdXNfb25lX2d1ZXNzXSkgewotICAgIGV4cG9uZW50
X3BsdXNfb25lX2d1ZXNzLS07Ci0gIH0KLSAgKnBvd2VyID0ga1NtYWxsUG93ZXJzT2ZUZW5bZXhw
b25lbnRfcGx1c19vbmVfZ3Vlc3NdOwotICAqZXhwb25lbnRfcGx1c19vbmUgPSBleHBvbmVudF9w
bHVzX29uZV9ndWVzczsKLX0KLQotLy8gR2VuZXJhdGVzIHRoZSBkaWdpdHMgb2YgaW5wdXQgbnVt
YmVyIHcuCi0vLyB3IGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChEaXlGcCksIGNvbnNpc3Rp
bmcgb2YgYSBzaWduaWZpY2FuZCBhbmQgYW4KLS8vIGV4cG9uZW50LiBJdHMgZXhwb25lbnQgaXMg
Ym91bmRlZCBieSBrTWluaW1hbFRhcmdldEV4cG9uZW50IGFuZAotLy8ga01heGltYWxUYXJnZXRF
eHBvbmVudC4KLS8vICAgICAgIEhlbmNlIC02MCA8PSB3LmUoKSA8PSAtMzIuCi0vLwotLy8gUmV0
dXJucyBmYWxzZSBpZiBpdCBmYWlscywgaW4gd2hpY2ggY2FzZSB0aGUgZ2VuZXJhdGVkIGRpZ2l0
cyBpbiB0aGUgYnVmZmVyCi0vLyBzaG91bGQgbm90IGJlIHVzZWQuCi0vLyBQcmVjb25kaXRpb25z
OgotLy8gICogbG93LCB3IGFuZCBoaWdoIGFyZSBjb3JyZWN0IHVwIHRvIDEgdWxwICh1bml0IGlu
IHRoZSBsYXN0IHBsYWNlKS4gVGhhdAotLy8gICAgaXMsIHRoZWlyIGVycm9yIG11c3QgYmUgbGVz
cyB0aGFuIGEgdW5pdCBvZiB0aGVpciBsYXN0IGRpZ2l0cy4KLS8vICAqIGxvdy5lKCkgPT0gdy5l
KCkgPT0gaGlnaC5lKCkKLS8vICAqIGxvdyA8IHcgPCBoaWdoLCBhbmQgdGFraW5nIGludG8gYWNj
b3VudCB0aGVpciBlcnJvcjogbG93fiA8PSBoaWdofgotLy8gICoga01pbmltYWxUYXJnZXRFeHBv
bmVudCA8PSB3LmUoKSA8PSBrTWF4aW1hbFRhcmdldEV4cG9uZW50Ci0vLyBQb3N0Y29uZGl0aW9u
czogcmV0dXJucyBmYWxzZSBpZiBwcm9jZWR1cmUgZmFpbHMuCi0vLyAgIG90aGVyd2lzZToKLS8v
ICAgICAqIGJ1ZmZlciBpcyBub3QgbnVsbC10ZXJtaW5hdGVkLCBidXQgbGVuIGNvbnRhaW5zIHRo
ZSBudW1iZXIgb2YgZGlnaXRzLgotLy8gICAgICogYnVmZmVyIGNvbnRhaW5zIHRoZSBzaG9ydGVz
dCBwb3NzaWJsZSBkZWNpbWFsIGRpZ2l0LXNlcXVlbmNlCi0vLyAgICAgICBzdWNoIHRoYXQgTE9X
IDwgYnVmZmVyICogMTBea2FwcGEgPCBISUdILCB3aGVyZSBMT1cgYW5kIEhJR0ggYXJlIHRoZQot
Ly8gICAgICAgY29ycmVjdCB2YWx1ZXMgb2YgbG93IGFuZCBoaWdoICh3aXRob3V0IHRoZWlyIGVy
cm9yKS4KLS8vICAgICAqIGlmIG1vcmUgdGhhbiBvbmUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBn
aXZlcyB0aGUgbWluaW1hbCBudW1iZXIgb2YKLS8vICAgICAgIGRlY2ltYWwgZGlnaXRzIHRoZW4g
dGhlIG9uZSBjbG9zZXN0IHRvIFcgKHdoZXJlIFcgaXMgdGhlIGNvcnJlY3QgdmFsdWUKLS8vICAg
ICAgIG9mIHcpIGlzIGNob3Nlbi4KLS8vIFJlbWFyazogdGhpcyBwcm9jZWR1cmUgdGFrZXMgaW50
byBhY2NvdW50IHRoZSBpbXByZWNpc2lvbiBvZiBpdHMgaW5wdXQKLS8vICAgbnVtYmVycy4gSWYg
dGhlIHByZWNpc2lvbiBpcyBub3QgZW5vdWdoIHRvIGd1YXJhbnRlZSBhbGwgdGhlIHBvc3Rjb25k
aXRpb25zCi0vLyAgIHRoZW4gZmFsc2UgaXMgcmV0dXJuZWQuIFRoaXMgdXN1YWxseSBoYXBwZW5z
IHJhcmVseSAofjAuNSUpLgotLy8KLS8vIFNheSwgZm9yIHRoZSBzYWtlIG9mIGV4YW1wbGUsIHRo
YXQKLS8vICAgdy5lKCkgPT0gLTQ4LCBhbmQgdy5mKCkgPT0gMHgxMjM0NTY3ODkwYWJjZGVmCi0v
LyB3J3MgdmFsdWUgY2FuIGJlIGNvbXB1dGVkIGJ5IHcuZigpICogMl53LmUoKQotLy8gV2UgY2Fu
IG9idGFpbiB3J3MgaW50ZWdyYWwgZGlnaXRzIGJ5IHNpbXBseSBzaGlmdGluZyB3LmYoKSBieSAt
dy5lKCkuCi0vLyAgLT4gdydzIGludGVncmFsIHBhcnQgaXMgMHgxMjM0Ci0vLyAgdydzIGZyYWN0
aW9uYWwgcGFydCBpcyB0aGVyZWZvcmUgMHg1Njc4OTBhYmNkZWYuCi0vLyBQcmludGluZyB3J3Mg
aW50ZWdyYWwgcGFydCBpcyBlYXN5IChzaW1wbHkgcHJpbnQgMHgxMjM0IGluIGRlY2ltYWwpLgot
Ly8gSW4gb3JkZXIgdG8gcHJpbnQgaXRzIGZyYWN0aW9uIHdlIHJlcGVhdGVkbHkgbXVsdGlwbHkg
dGhlIGZyYWN0aW9uIGJ5IDEwIGFuZAotLy8gZ2V0IGVhY2ggZGlnaXQuIEV4YW1wbGUgdGhlIGZp
cnN0IGRpZ2l0IGFmdGVyIHRoZSBwb2ludCB3b3VsZCBiZSBjb21wdXRlZCBieQotLy8gICAoMHg1
Njc4OTBhYmNkZWYgKiAxMCkgPj4gNDguIC0+IDMKLS8vIFRoZSB3aG9sZSB0aGluZyBiZWNvbWVz
IHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSB3ZSB3YW50IHRvIHN0b3AKLS8vIG9u
Y2Ugd2UgaGF2ZSBlbm91Z2ggZGlnaXRzLiBUaGF0IGlzLCBvbmNlIHRoZSBkaWdpdHMgaW5zaWRl
IHRoZSBidWZmZXIKLS8vIHJlcHJlc2VudCAndycgd2UgY2FuIHN0b3AuIEV2ZXJ5dGhpbmcgaW5z
aWRlIHRoZSBpbnRlcnZhbCBsb3cgLSBoaWdoCi0vLyByZXByZXNlbnRzIHcuIEhvd2V2ZXIgd2Ug
aGF2ZSB0byBwYXkgYXR0ZW50aW9uIHRvIGxvdywgaGlnaCBhbmQgdydzCi0vLyBpbXByZWNpc2lv
bi4KLXN0YXRpYyBib29sIERpZ2l0R2VuKERpeUZwIGxvdywKLSAgICAgICAgICAgICAgICAgICAg
IERpeUZwIHcsCi0gICAgICAgICAgICAgICAgICAgICBEaXlGcCBoaWdoLAotICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgIGludCog
bGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgaW50KiBrYXBwYSkgewotICBBU1NFUlQobG93
LmUoKSA9PSB3LmUoKSAmJiB3LmUoKSA9PSBoaWdoLmUoKSk7Ci0gIEFTU0VSVChsb3cuZigpICsg
MSA8PSBoaWdoLmYoKSAtIDEpOwotICBBU1NFUlQoa01pbmltYWxUYXJnZXRFeHBvbmVudCA8PSB3
LmUoKSAmJiB3LmUoKSA8PSBrTWF4aW1hbFRhcmdldEV4cG9uZW50KTsKLSAgLy8gbG93LCB3IGFu
ZCBoaWdoIGFyZSBpbXByZWNpc2UsIGJ1dCBieSBsZXNzIHRoYW4gb25lIHVscCAodW5pdCBpbiB0
aGUgbGFzdAotICAvLyBwbGFjZSkuCi0gIC8vIElmIHdlIHJlbW92ZSAocmVzcC4gYWRkKSAxIHVs
cCBmcm9tIGxvdyAocmVzcC4gaGlnaCkgd2UgYXJlIGNlcnRhaW4gdGhhdAotICAvLyB0aGUgbmV3
IG51bWJlcnMgYXJlIG91dHNpZGUgb2YgdGhlIGludGVydmFsIHdlIHdhbnQgdGhlIGZpbmFsCi0g
IC8vIHJlcHJlc2VudGF0aW9uIHRvIGxpZSBpbi4KLSAgLy8gSW52ZXJzZWx5IGFkZGluZyAocmVz
cC4gcmVtb3ZpbmcpIDEgdWxwIGZyb20gbG93IChyZXNwLiBoaWdoKSB3b3VsZCB5aWVsZAotICAv
LyBudW1iZXJzIHRoYXQgYXJlIGNlcnRhaW4gdG8gbGllIGluIHRoZSBpbnRlcnZhbC4gV2Ugd2ls
bCB1c2UgdGhpcyBmYWN0Ci0gIC8vIGxhdGVyIG9uLgotICAvLyBXZSB3aWxsIG5vdyBzdGFydCBi
eSBnZW5lcmF0aW5nIHRoZSBkaWdpdHMgd2l0aGluIHRoZSB1bmNlcnRhaW4KLSAgLy8gaW50ZXJ2
YWwuIExhdGVyIHdlIHdpbGwgd2VlZCBvdXQgcmVwcmVzZW50YXRpb25zIHRoYXQgbGllIG91dHNp
ZGUgdGhlIHNhZmUKLSAgLy8gaW50ZXJ2YWwgYW5kIHRodXMgX21pZ2h0XyBsaWUgb3V0c2lkZSB0
aGUgY29ycmVjdCBpbnRlcnZhbC4KLSAgdWludDY0X3QgdW5pdCA9IDE7Ci0gIERpeUZwIHRvb19s
b3cgPSBEaXlGcChsb3cuZigpIC0gdW5pdCwgbG93LmUoKSk7Ci0gIERpeUZwIHRvb19oaWdoID0g
RGl5RnAoaGlnaC5mKCkgKyB1bml0LCBoaWdoLmUoKSk7Ci0gIC8vIHRvb19sb3cgYW5kIHRvb19o
aWdoIGFyZSBndWFyYW50ZWVkIHRvIGxpZSBvdXRzaWRlIHRoZSBpbnRlcnZhbCB3ZSB3YW50IHRo
ZQotICAvLyBnZW5lcmF0ZWQgbnVtYmVyIGluLgotICBEaXlGcCB1bnNhZmVfaW50ZXJ2YWwgPSBE
aXlGcDo6TWludXModG9vX2hpZ2gsIHRvb19sb3cpOwotICAvLyBXZSBub3cgY3V0IHRoZSBpbnB1
dCBudW1iZXIgaW50byB0d28gcGFydHM6IHRoZSBpbnRlZ3JhbCBkaWdpdHMgYW5kIHRoZQotICAv
LyBmcmFjdGlvbmFscy4gV2Ugd2lsbCBub3Qgd3JpdGUgYW55IGRlY2ltYWwgc2VwYXJhdG9yIHRo
b3VnaCwgYnV0IGFkYXB0Ci0gIC8vIGthcHBhIGluc3RlYWQuCi0gIC8vIFJlbWluZGVyOiB3ZSBh
cmUgY3VycmVudGx5IGNvbXB1dGluZyB0aGUgZGlnaXRzIChzdG9yZWQgaW5zaWRlIHRoZSBidWZm
ZXIpCi0gIC8vIHN1Y2ggdGhhdDogICB0b29fbG93IDwgYnVmZmVyICogMTBea2FwcGEgPCB0b29f
aGlnaAotICAvLyBXZSB1c2UgdG9vX2hpZ2ggZm9yIHRoZSBkaWdpdF9nZW5lcmF0aW9uIGFuZCBz
dG9wIGFzIHNvb24gYXMgcG9zc2libGUuCi0gIC8vIElmIHdlIHN0b3AgZWFybHkgd2UgZWZmZWN0
aXZlbHkgcm91bmQgZG93bi4KLSAgRGl5RnAgb25lID0gRGl5RnAoc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KDEpIDw8IC13LmUoKSwgdy5lKCkpOwotICAvLyBEaXZpc2lvbiBieSBvbmUgaXMgYSBzaGlm
dC4KLSAgdWludDMyX3QgaW50ZWdyYWxzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvb19oaWdo
LmYoKSA+PiAtb25lLmUoKSk7Ci0gIC8vIE1vZHVsbyBieSBvbmUgaXMgYW4gYW5kLgotICB1aW50
NjRfdCBmcmFjdGlvbmFscyA9IHRvb19oaWdoLmYoKSAmIChvbmUuZigpIC0gMSk7Ci0gIHVpbnQz
Ml90IGRpdmlzb3I7Ci0gIGludCBkaXZpc29yX2V4cG9uZW50X3BsdXNfb25lOwotICBCaWdnZXN0
UG93ZXJUZW4oaW50ZWdyYWxzLCBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSAtICgtb25lLmUoKSks
Ci0gICAgICAgICAgICAgICAgICAmZGl2aXNvciwgJmRpdmlzb3JfZXhwb25lbnRfcGx1c19vbmUp
OwotICAqa2FwcGEgPSBkaXZpc29yX2V4cG9uZW50X3BsdXNfb25lOwotICAqbGVuZ3RoID0gMDsK
LSAgLy8gTG9vcCBpbnZhcmlhbnQ6IGJ1ZmZlciA9IHRvb19oaWdoIC8gMTBea2FwcGEgIChpbnRl
Z2VyIGRpdmlzaW9uKQotICAvLyBUaGUgaW52YXJpYW50IGhvbGRzIGZvciB0aGUgZmlyc3QgaXRl
cmF0aW9uOiBrYXBwYSBoYXMgYmVlbiBpbml0aWFsaXplZAotICAvLyB3aXRoIHRoZSBkaXZpc29y
IGV4cG9uZW50ICsgMS4gQW5kIHRoZSBkaXZpc29yIGlzIHRoZSBiaWdnZXN0IHBvd2VyIG9mIHRl
bgotICAvLyB0aGF0IGlzIHNtYWxsZXIgdGhhbiBpbnRlZ3JhbHMuCi0gIHdoaWxlICgqa2FwcGEg
PiAwKSB7Ci0gICAgaW50IGRpZ2l0ID0gaW50ZWdyYWxzIC8gZGl2aXNvcjsKLSAgICBBU1NFUlQo
ZGlnaXQgPD0gOSk7Ci0gICAgYnVmZmVyWypsZW5ndGhdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAn
ICsgZGlnaXQpOwotICAgICgqbGVuZ3RoKSsrOwotICAgIGludGVncmFscyAlPSBkaXZpc29yOwot
ICAgICgqa2FwcGEpLS07Ci0gICAgLy8gTm90ZSB0aGF0IGthcHBhIG5vdyBlcXVhbHMgdGhlIGV4
cG9uZW50IG9mIHRoZSBkaXZpc29yIGFuZCB0aGF0IHRoZQotICAgIC8vIGludmFyaWFudCB0aHVz
IGhvbGRzIGFnYWluLgotICAgIHVpbnQ2NF90IHJlc3QgPQotICAgICAgICAoc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGludGVncmFscykgPDwgLW9uZS5lKCkpICsgZnJhY3Rpb25hbHM7Ci0gICAgLy8g
SW52YXJpYW50OiB0b29faGlnaCA9IGJ1ZmZlciAqIDEwXmthcHBhICsgRGl5RnAocmVzdCwgb25l
LmUoKSkKLSAgICAvLyBSZW1pbmRlcjogdW5zYWZlX2ludGVydmFsLmUoKSA9PSBvbmUuZSgpCi0g
ICAgaWYgKHJlc3QgPCB1bnNhZmVfaW50ZXJ2YWwuZigpKSB7Ci0gICAgICAvLyBSb3VuZGluZyBk
b3duIChieSBub3QgZW1pdHRpbmcgdGhlIHJlbWFpbmluZyBkaWdpdHMpIHlpZWxkcyBhIG51bWJl
cgotICAgICAgLy8gdGhhdCBsaWVzIHdpdGhpbiB0aGUgdW5zYWZlIGludGVydmFsLgotICAgICAg
cmV0dXJuIFJvdW5kV2VlZChidWZmZXIsICpsZW5ndGgsIERpeUZwOjpNaW51cyh0b29faGlnaCwg
dykuZigpLAotICAgICAgICAgICAgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2YWwuZigpLCByZXN0
LAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZGl2aXNvcikg
PDwgLW9uZS5lKCksIHVuaXQpOwotICAgIH0KLSAgICBkaXZpc29yIC89IDEwOwotICB9Ci0KLSAg
Ly8gVGhlIGludGVncmFscyBoYXZlIGJlZW4gZ2VuZXJhdGVkLiBXZSBhcmUgYXQgdGhlIHBvaW50
IG9mIHRoZSBkZWNpbWFsCi0gIC8vIHNlcGFyYXRvci4gSW4gdGhlIGZvbGxvd2luZyBsb29wIHdl
IHNpbXBseSBtdWx0aXBseSB0aGUgcmVtYWluaW5nIGRpZ2l0cyBieQotICAvLyAxMCBhbmQgZGl2
aWRlIGJ5IG9uZS4gV2UganVzdCBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gbXVsdGlwbHkgYXNz
b2NpYXRlZAotICAvLyBkYXRhIChsaWtlIHRoZSBpbnRlcnZhbCBvciAndW5pdCcpLCB0b28uCi0g
IC8vIE5vdGUgdGhhdCB0aGUgbXVsdGlwbGljYXRpb24gYnkgMTAgZG9lcyBub3Qgb3ZlcmZsb3cs
IGJlY2F1c2Ugdy5lID49IC02MAotICAvLyBhbmQgdGh1cyBvbmUuZSA+PSAtNjAuCi0gIEFTU0VS
VChvbmUuZSgpID49IC02MCk7Ci0gIEFTU0VSVChmcmFjdGlvbmFscyA8IG9uZS5mKCkpOwotICBB
U1NFUlQoVUlOVDY0XzJQQVJUX0MoMHhGRkZGRkZGRiwgRkZGRkZGRkYpIC8gMTAgPj0gb25lLmYo
KSk7Ci0gIGZvciAoOzspIHsKLSAgICBmcmFjdGlvbmFscyAqPSAxMDsKLSAgICB1bml0ICo9IDEw
OwotICAgIHVuc2FmZV9pbnRlcnZhbC5zZXRfZih1bnNhZmVfaW50ZXJ2YWwuZigpICogMTApOwot
ICAgIC8vIEludGVnZXIgZGl2aXNpb24gYnkgb25lLgotICAgIGludCBkaWdpdCA9IHN0YXRpY19j
YXN0PGludD4oZnJhY3Rpb25hbHMgPj4gLW9uZS5lKCkpOwotICAgIEFTU0VSVChkaWdpdCA8PSA5
KTsKLSAgICBidWZmZXJbKmxlbmd0aF0gPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBkaWdpdCk7
Ci0gICAgKCpsZW5ndGgpKys7Ci0gICAgZnJhY3Rpb25hbHMgJj0gb25lLmYoKSAtIDE7ICAvLyBN
b2R1bG8gYnkgb25lLgotICAgICgqa2FwcGEpLS07Ci0gICAgaWYgKGZyYWN0aW9uYWxzIDwgdW5z
YWZlX2ludGVydmFsLmYoKSkgewotICAgICAgcmV0dXJuIFJvdW5kV2VlZChidWZmZXIsICpsZW5n
dGgsIERpeUZwOjpNaW51cyh0b29faGlnaCwgdykuZigpICogdW5pdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgdW5zYWZlX2ludGVydmFsLmYoKSwgZnJhY3Rpb25hbHMsIG9uZS5mKCksIHVuaXQp
OwotICAgIH0KLSAgfQotfQotCi0KLQotLy8gR2VuZXJhdGVzIChhdCBtb3N0KSByZXF1ZXN0ZWRf
ZGlnaXRzIGRpZ2l0cyBvZiBpbnB1dCBudW1iZXIgdy4KLS8vIHcgaXMgYSBmbG9hdGluZy1wb2lu
dCBudW1iZXIgKERpeUZwKSwgY29uc2lzdGluZyBvZiBhIHNpZ25pZmljYW5kIGFuZCBhbgotLy8g
ZXhwb25lbnQuIEl0cyBleHBvbmVudCBpcyBib3VuZGVkIGJ5IGtNaW5pbWFsVGFyZ2V0RXhwb25l
bnQgYW5kCi0vLyBrTWF4aW1hbFRhcmdldEV4cG9uZW50LgotLy8gICAgICAgSGVuY2UgLTYwIDw9
IHcuZSgpIDw9IC0zMi4KLS8vCi0vLyBSZXR1cm5zIGZhbHNlIGlmIGl0IGZhaWxzLCBpbiB3aGlj
aCBjYXNlIHRoZSBnZW5lcmF0ZWQgZGlnaXRzIGluIHRoZSBidWZmZXIKLS8vIHNob3VsZCBub3Qg
YmUgdXNlZC4KLS8vIFByZWNvbmRpdGlvbnM6Ci0vLyAgKiB3IGlzIGNvcnJlY3QgdXAgdG8gMSB1
bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLiBUaGF0Ci0vLyAgICBpcywgaXRzIGVycm9yIG11
c3QgYmUgc3RyaWN0bHkgbGVzcyB0aGFuIGEgdW5pdCBvZiBpdHMgbGFzdCBkaWdpdC4KLS8vICAq
IGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgPD0ga01heGltYWxUYXJnZXRFeHBvbmVu
dAotLy8KLS8vIFBvc3Rjb25kaXRpb25zOiByZXR1cm5zIGZhbHNlIGlmIHByb2NlZHVyZSBmYWls
cy4KLS8vICAgb3RoZXJ3aXNlOgotLy8gICAgICogYnVmZmVyIGlzIG5vdCBudWxsLXRlcm1pbmF0
ZWQsIGJ1dCBsZW5ndGggY29udGFpbnMgdGhlIG51bWJlciBvZgotLy8gICAgICAgZGlnaXRzLgot
Ly8gICAgICogdGhlIHJlcHJlc2VudGF0aW9uIGluIGJ1ZmZlciBpcyB0aGUgbW9zdCBwcmVjaXNl
IHJlcHJlc2VudGF0aW9uIG9mCi0vLyAgICAgICByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cy4KLS8v
ICAgICAqIGJ1ZmZlciBjb250YWlucyBhdCBtb3N0IHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIG9m
IHcuIElmIHRoZXJlIGFyZSBsZXNzCi0vLyAgICAgICB0aGFuIHJlcXVlc3RlZF9kaWdpdHMgZGln
aXRzIHRoZW4gc29tZSB0cmFpbGluZyAnMCdzIGhhdmUgYmVlbiByZW1vdmVkLgotLy8gICAgICog
a2FwcGEgaXMgc3VjaCB0aGF0Ci0vLyAgICAgICAgICAgIHcgPSBidWZmZXIgKiAxMF5rYXBwYSAr
IGVwcyB3aXRoIHxlcHN8IDwgMTBea2FwcGEgLyAyLgotLy8KLS8vIFJlbWFyazogVGhpcyBwcm9j
ZWR1cmUgdGFrZXMgaW50byBhY2NvdW50IHRoZSBpbXByZWNpc2lvbiBvZiBpdHMgaW5wdXQKLS8v
ICAgbnVtYmVycy4gSWYgdGhlIHByZWNpc2lvbiBpcyBub3QgZW5vdWdoIHRvIGd1YXJhbnRlZSBh
bGwgdGhlIHBvc3Rjb25kaXRpb25zCi0vLyAgIHRoZW4gZmFsc2UgaXMgcmV0dXJuZWQuIFRoaXMg
dXN1YWxseSBoYXBwZW5zIHJhcmVseSwgYnV0IHRoZSBmYWlsdXJlLXJhdGUKLS8vICAgaW5jcmVh
c2VzIHdpdGggaGlnaGVyIHJlcXVlc3RlZF9kaWdpdHMuCi1zdGF0aWMgYm9vbCBEaWdpdEdlbkNv
dW50ZWQoRGl5RnAgdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVk
X2RpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCoga2FwcGEpIHsKLSAgQVNTRVJUKGtNaW5pbWFsVGFyZ2V0RXhw
b25lbnQgPD0gdy5lKCkgJiYgdy5lKCkgPD0ga01heGltYWxUYXJnZXRFeHBvbmVudCk7Ci0gIEFT
U0VSVChrTWluaW1hbFRhcmdldEV4cG9uZW50ID49IC02MCk7Ci0gIEFTU0VSVChrTWF4aW1hbFRh
cmdldEV4cG9uZW50IDw9IC0zMik7Ci0gIC8vIHcgaXMgYXNzdW1lZCB0byBoYXZlIGFuIGVycm9y
IGxlc3MgdGhhbiAxIHVuaXQuIFdoZW5ldmVyIHcgaXMgc2NhbGVkIHdlCi0gIC8vIGFsc28gc2Nh
bGUgaXRzIGVycm9yLgotICB1aW50NjRfdCB3X2Vycm9yID0gMTsKLSAgLy8gV2UgY3V0IHRoZSBp
bnB1dCBudW1iZXIgaW50byB0d28gcGFydHM6IHRoZSBpbnRlZ3JhbCBkaWdpdHMgYW5kIHRoZQot
ICAvLyBmcmFjdGlvbmFsIGRpZ2l0cy4gV2UgZG9uJ3QgZW1pdCBhbnkgZGVjaW1hbCBzZXBhcmF0
b3IsIGJ1dCBhZGFwdCBrYXBwYQotICAvLyBpbnN0ZWFkLiBFeGFtcGxlOiBpbnN0ZWFkIG9mIHdy
aXRpbmcgIjEuMiIgd2UgcHV0ICIxMiIgaW50byB0aGUgYnVmZmVyIGFuZAotICAvLyBpbmNyZWFz
ZSBrYXBwYSBieSAxLgotICBEaXlGcCBvbmUgPSBEaXlGcChzdGF0aWNfY2FzdDx1aW50NjRfdD4o
MSkgPDwgLXcuZSgpLCB3LmUoKSk7Ci0gIC8vIERpdmlzaW9uIGJ5IG9uZSBpcyBhIHNoaWZ0Lgot
ICB1aW50MzJfdCBpbnRlZ3JhbHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ody5mKCkgPj4gLW9u
ZS5lKCkpOwotICAvLyBNb2R1bG8gYnkgb25lIGlzIGFuIGFuZC4KLSAgdWludDY0X3QgZnJhY3Rp
b25hbHMgPSB3LmYoKSAmIChvbmUuZigpIC0gMSk7Ci0gIHVpbnQzMl90IGRpdmlzb3I7Ci0gIGlu
dCBkaXZpc29yX2V4cG9uZW50X3BsdXNfb25lOwotICBCaWdnZXN0UG93ZXJUZW4oaW50ZWdyYWxz
LCBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSAtICgtb25lLmUoKSksCi0gICAgICAgICAgICAgICAg
ICAmZGl2aXNvciwgJmRpdmlzb3JfZXhwb25lbnRfcGx1c19vbmUpOwotICAqa2FwcGEgPSBkaXZp
c29yX2V4cG9uZW50X3BsdXNfb25lOwotICAqbGVuZ3RoID0gMDsKLQotICAvLyBMb29wIGludmFy
aWFudDogYnVmZmVyID0gdyAvIDEwXmthcHBhICAoaW50ZWdlciBkaXZpc2lvbikKLSAgLy8gVGhl
IGludmFyaWFudCBob2xkcyBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbjoga2FwcGEgaGFzIGJlZW4g
aW5pdGlhbGl6ZWQKLSAgLy8gd2l0aCB0aGUgZGl2aXNvciBleHBvbmVudCArIDEuIEFuZCB0aGUg
ZGl2aXNvciBpcyB0aGUgYmlnZ2VzdCBwb3dlciBvZiB0ZW4KLSAgLy8gdGhhdCBpcyBzbWFsbGVy
IHRoYW4gJ2ludGVncmFscycuCi0gIHdoaWxlICgqa2FwcGEgPiAwKSB7Ci0gICAgaW50IGRpZ2l0
ID0gaW50ZWdyYWxzIC8gZGl2aXNvcjsKLSAgICBBU1NFUlQoZGlnaXQgPD0gOSk7Ci0gICAgYnVm
ZmVyWypsZW5ndGhdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgZGlnaXQpOwotICAgICgqbGVu
Z3RoKSsrOwotICAgIHJlcXVlc3RlZF9kaWdpdHMtLTsKLSAgICBpbnRlZ3JhbHMgJT0gZGl2aXNv
cjsKLSAgICAoKmthcHBhKS0tOwotICAgIC8vIE5vdGUgdGhhdCBrYXBwYSBub3cgZXF1YWxzIHRo
ZSBleHBvbmVudCBvZiB0aGUgZGl2aXNvciBhbmQgdGhhdCB0aGUKLSAgICAvLyBpbnZhcmlhbnQg
dGh1cyBob2xkcyBhZ2Fpbi4KLSAgICBpZiAocmVxdWVzdGVkX2RpZ2l0cyA9PSAwKSBicmVhazsK
LSAgICBkaXZpc29yIC89IDEwOwotICB9Ci0KLSAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgPT0gMCkg
ewotICAgIHVpbnQ2NF90IHJlc3QgPQotICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGlu
dGVncmFscykgPDwgLW9uZS5lKCkpICsgZnJhY3Rpb25hbHM7Ci0gICAgcmV0dXJuIFJvdW5kV2Vl
ZENvdW50ZWQoYnVmZmVyLCAqbGVuZ3RoLCByZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihkaXZpc29yKSA8PCAtb25lLmUoKSwgd19lcnJvciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXBwYSk7Ci0gIH0KLQotICAvLyBUaGUgaW50
ZWdyYWxzIGhhdmUgYmVlbiBnZW5lcmF0ZWQuIFdlIGFyZSBhdCB0aGUgcG9pbnQgb2YgdGhlIGRl
Y2ltYWwKLSAgLy8gc2VwYXJhdG9yLiBJbiB0aGUgZm9sbG93aW5nIGxvb3Agd2Ugc2ltcGx5IG11
bHRpcGx5IHRoZSByZW1haW5pbmcgZGlnaXRzIGJ5Ci0gIC8vIDEwIGFuZCBkaXZpZGUgYnkgb25l
LiBXZSBqdXN0IG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBtdWx0aXBseSBhc3NvY2lhdGVkCi0g
IC8vIGRhdGEgKHRoZSAndW5pdCcpLCB0b28uCi0gIC8vIE5vdGUgdGhhdCB0aGUgbXVsdGlwbGlj
YXRpb24gYnkgMTAgZG9lcyBub3Qgb3ZlcmZsb3csIGJlY2F1c2Ugdy5lID49IC02MAotICAvLyBh
bmQgdGh1cyBvbmUuZSA+PSAtNjAuCi0gIEFTU0VSVChvbmUuZSgpID49IC02MCk7Ci0gIEFTU0VS
VChmcmFjdGlvbmFscyA8IG9uZS5mKCkpOwotICBBU1NFUlQoVUlOVDY0XzJQQVJUX0MoMHhGRkZG
RkZGRiwgRkZGRkZGRkYpIC8gMTAgPj0gb25lLmYoKSk7Ci0gIHdoaWxlIChyZXF1ZXN0ZWRfZGln
aXRzID4gMCAmJiBmcmFjdGlvbmFscyA+IHdfZXJyb3IpIHsKLSAgICBmcmFjdGlvbmFscyAqPSAx
MDsKLSAgICB3X2Vycm9yICo9IDEwOwotICAgIC8vIEludGVnZXIgZGl2aXNpb24gYnkgb25lLgot
ICAgIGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGludD4oZnJhY3Rpb25hbHMgPj4gLW9uZS5lKCkp
OwotICAgIEFTU0VSVChkaWdpdCA8PSA5KTsKLSAgICBidWZmZXJbKmxlbmd0aF0gPSBzdGF0aWNf
Y2FzdDxjaGFyPignMCcgKyBkaWdpdCk7Ci0gICAgKCpsZW5ndGgpKys7Ci0gICAgcmVxdWVzdGVk
X2RpZ2l0cy0tOwotICAgIGZyYWN0aW9uYWxzICY9IG9uZS5mKCkgLSAxOyAgLy8gTW9kdWxvIGJ5
IG9uZS4KLSAgICAoKmthcHBhKS0tOwotICB9Ci0gIGlmIChyZXF1ZXN0ZWRfZGlnaXRzICE9IDAp
IHJldHVybiBmYWxzZTsKLSAgcmV0dXJuIFJvdW5kV2VlZENvdW50ZWQoYnVmZmVyLCAqbGVuZ3Ro
LCBmcmFjdGlvbmFscywgb25lLmYoKSwgd19lcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAga2FwcGEpOwotfQotCi0KLS8vIFByb3ZpZGVzIGEgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBv
ZiB2LgotLy8gUmV0dXJucyB0cnVlIGlmIGl0IHN1Y2NlZWRzLCBvdGhlcndpc2UgdGhlIHJlc3Vs
dCBjYW5ub3QgYmUgdHJ1c3RlZC4KLS8vIFRoZXJlIHdpbGwgYmUgKmxlbmd0aCBkaWdpdHMgaW5z
aWRlIHRoZSBidWZmZXIgKG5vdCBudWxsLXRlcm1pbmF0ZWQpLgotLy8gSWYgdGhlIGZ1bmN0aW9u
IHJldHVybnMgdHJ1ZSB0aGVuCi0vLyAgICAgICAgdiA9PSAoZG91YmxlKSAoYnVmZmVyICogMTBe
ZGVjaW1hbF9leHBvbmVudCkuCi0vLyBUaGUgZGlnaXRzIGluIHRoZSBidWZmZXIgYXJlIHRoZSBz
aG9ydGVzdCByZXByZXNlbnRhdGlvbiBwb3NzaWJsZTogbm8KLS8vIDAuMDk5OTk5OTk5OTk5OTk5
OTkgaW5zdGVhZCBvZiAwLjEuIFRoZSBzaG9ydGVyIHJlcHJlc2VudGF0aW9uIHdpbGwgZXZlbiBi
ZQotLy8gY2hvc2VuIGV2ZW4gaWYgdGhlIGxvbmdlciBvbmUgd291bGQgYmUgY2xvc2VyIHRvIHYu
Ci0vLyBUaGUgbGFzdCBkaWdpdCB3aWxsIGJlIGNsb3Nlc3QgdG8gdGhlIGFjdHVhbCB2LiBUaGF0
IGlzLCBldmVuIGlmIHNldmVyYWwKLS8vIGRpZ2l0cyBtaWdodCBjb3JyZWN0bHkgeWllbGQgJ3Yn
IHdoZW4gcmVhZCBhZ2FpbiwgdGhlIGNsb3Nlc3Qgd2lsbCBiZQotLy8gY29tcHV0ZWQuCi1zdGF0
aWMgYm9vbCBHcmlzdTMoZG91YmxlIHYsCi0gICAgICAgICAgICAgICAgICAgRmFzdER0b2FNb2Rl
IG1vZGUsCi0gICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKLSAgICAgICAg
ICAgICAgICAgICBpbnQqIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxf
ZXhwb25lbnQpIHsKLSAgRGl5RnAgdyA9IERvdWJsZSh2KS5Bc05vcm1hbGl6ZWREaXlGcCgpOwot
ICAvLyBib3VuZGFyeV9taW51cyBhbmQgYm91bmRhcnlfcGx1cyBhcmUgdGhlIGJvdW5kYXJpZXMg
YmV0d2VlbiB2IGFuZCBpdHMKLSAgLy8gY2xvc2VzdCBmbG9hdGluZy1wb2ludCBuZWlnaGJvcnMu
IEFueSBudW1iZXIgc3RyaWN0bHkgYmV0d2VlbgotICAvLyBib3VuZGFyeV9taW51cyBhbmQgYm91
bmRhcnlfcGx1cyB3aWxsIHJvdW5kIHRvIHYgd2hlbiBjb252ZXJ0IHRvIGEgZG91YmxlLgotICAv
LyBHcmlzdTMgd2lsbCBuZXZlciBvdXRwdXQgcmVwcmVzZW50YXRpb25zIHRoYXQgbGllIGV4YWN0
bHkgb24gYSBib3VuZGFyeS4KLSAgRGl5RnAgYm91bmRhcnlfbWludXMsIGJvdW5kYXJ5X3BsdXM7
Ci0gIGlmIChtb2RlID09IEZBU1RfRFRPQV9TSE9SVEVTVCkgewotICAgIERvdWJsZSh2KS5Ob3Jt
YWxpemVkQm91bmRhcmllcygmYm91bmRhcnlfbWludXMsICZib3VuZGFyeV9wbHVzKTsKLSAgfSBl
bHNlIHsKLSAgICBBU1NFUlQobW9kZSA9PSBGQVNUX0RUT0FfU0hPUlRFU1RfU0lOR0xFKTsKLSAg
ICBmbG9hdCBzaW5nbGVfdiA9IHN0YXRpY19jYXN0PGZsb2F0Pih2KTsKLSAgICBTaW5nbGUoc2lu
Z2xlX3YpLk5vcm1hbGl6ZWRCb3VuZGFyaWVzKCZib3VuZGFyeV9taW51cywgJmJvdW5kYXJ5X3Bs
dXMpOwotICB9Ci0gIEFTU0VSVChib3VuZGFyeV9wbHVzLmUoKSA9PSB3LmUoKSk7Ci0gIERpeUZw
IHRlbl9tazsgIC8vIENhY2hlZCBwb3dlciBvZiB0ZW46IDEwXi1rCi0gIGludCBtazsgICAgICAg
IC8vIC1rCi0gIGludCB0ZW5fbWtfbWluaW1hbF9iaW5hcnlfZXhwb25lbnQgPQotICAgICBrTWlu
aW1hbFRhcmdldEV4cG9uZW50IC0gKHcuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOwot
ICBpbnQgdGVuX21rX21heGltYWxfYmluYXJ5X2V4cG9uZW50ID0KLSAgICAga01heGltYWxUYXJn
ZXRFeHBvbmVudCAtICh3LmUoKSArIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKTsKLSAgUG93ZXJz
T2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBvbmVudFJhbmdlKAotICAgICAg
dGVuX21rX21pbmltYWxfYmluYXJ5X2V4cG9uZW50LAotICAgICAgdGVuX21rX21heGltYWxfYmlu
YXJ5X2V4cG9uZW50LAotICAgICAgJnRlbl9taywgJm1rKTsKLSAgQVNTRVJUKChrTWluaW1hbFRh
cmdldEV4cG9uZW50IDw9IHcuZSgpICsgdGVuX21rLmUoKSArCi0gICAgICAgICAgRGl5RnA6OmtT
aWduaWZpY2FuZFNpemUpICYmCi0gICAgICAgICAoa01heGltYWxUYXJnZXRFeHBvbmVudCA+PSB3
LmUoKSArIHRlbl9tay5lKCkgKwotICAgICAgICAgIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKSk7
Ci0gIC8vIE5vdGUgdGhhdCB0ZW5fbWsgaXMgb25seSBhbiBhcHByb3hpbWF0aW9uIG9mIDEwXi1r
LiBBIERpeUZwIG9ubHkgY29udGFpbnMgYQotICAvLyA2NCBiaXQgc2lnbmlmaWNhbmQgYW5kIHRl
bl9tayBpcyB0aHVzIG9ubHkgcHJlY2lzZSB1cCB0byA2NCBiaXRzLgotCi0gIC8vIFRoZSBEaXlG
cDo6VGltZXMgcHJvY2VkdXJlIHJvdW5kcyBpdHMgcmVzdWx0LCBhbmQgdGVuX21rIGlzIGFwcHJv
eGltYXRlZAotICAvLyB0b28uIFRoZSB2YXJpYWJsZSBzY2FsZWRfdyAoYXMgd2VsbCBhcyBzY2Fs
ZWRfYm91bmRhcnlfbWludXMvcGx1cykgYXJlIG5vdwotICAvLyBvZmYgYnkgYSBzbWFsbCBhbW91
bnQuCi0gIC8vIEluIGZhY3Q6IHNjYWxlZF93IC0gdyoxMF5rIDwgMXVscCAodW5pdCBpbiB0aGUg
bGFzdCBwbGFjZSkgb2Ygc2NhbGVkX3cuCi0gIC8vIEluIG90aGVyIHdvcmRzOiBsZXQgZiA9IHNj
YWxlZF93LmYoKSBhbmQgZSA9IHNjYWxlZF93LmUoKSwgdGhlbgotICAvLyAgICAgICAgICAgKGYt
MSkgKiAyXmUgPCB3KjEwXmsgPCAoZisxKSAqIDJeZQotICBEaXlGcCBzY2FsZWRfdyA9IERpeUZw
OjpUaW1lcyh3LCB0ZW5fbWspOwotICBBU1NFUlQoc2NhbGVkX3cuZSgpID09Ci0gICAgICAgICBi
b3VuZGFyeV9wbHVzLmUoKSArIHRlbl9tay5lKCkgKyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7
Ci0gIC8vIEluIHRoZW9yeSBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBhdm9pZCBzb21lIHJlY29t
cHV0YXRpb25zIGJ5IGNvbXB1dGluZwotICAvLyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHcgYW5k
IGJvdW5kYXJ5X21pbnVzL3BsdXMgKGEgcG93ZXIgb2YgMikgYW5kIHRvCi0gIC8vIGNvbXB1dGUg
c2NhbGVkX2JvdW5kYXJ5X21pbnVzL3BsdXMgYnkgc3VidHJhY3RpbmcvYWRkaW5nIGZyb20KLSAg
Ly8gc2NhbGVkX3cuIEhvd2V2ZXIgdGhlIGNvZGUgYmVjb21lcyBtdWNoIGxlc3MgcmVhZGFibGUg
YW5kIHRoZSBzcGVlZAotICAvLyBlbmhhbmNlbWVudHMgYXJlIG5vdCB0ZXJyaWZmaWMuCi0gIERp
eUZwIHNjYWxlZF9ib3VuZGFyeV9taW51cyA9IERpeUZwOjpUaW1lcyhib3VuZGFyeV9taW51cywg
dGVuX21rKTsKLSAgRGl5RnAgc2NhbGVkX2JvdW5kYXJ5X3BsdXMgID0gRGl5RnA6OlRpbWVzKGJv
dW5kYXJ5X3BsdXMsICB0ZW5fbWspOwotCi0gIC8vIERpZ2l0R2VuIHdpbGwgZ2VuZXJhdGUgdGhl
IGRpZ2l0cyBvZiBzY2FsZWRfdy4gVGhlcmVmb3JlIHdlIGhhdmUKLSAgLy8gdiA9PSAoZG91Ymxl
KSAoc2NhbGVkX3cgKiAxMF4tbWspLgotICAvLyBTZXQgZGVjaW1hbF9leHBvbmVudCA9PSAtbWsg
YW5kIHBhc3MgaXQgdG8gRGlnaXRHZW4uIElmIHNjYWxlZF93IGlzIG5vdCBhbgotICAvLyBpbnRl
Z2VyIHRoYW4gaXQgd2lsbCBiZSB1cGRhdGVkLiBGb3IgaW5zdGFuY2UgaWYgc2NhbGVkX3cgPT0g
MS4yMyB0aGVuCi0gIC8vIHRoZSBidWZmZXIgd2lsbCBiZSBmaWxsZWQgd2l0aCAiMTIzIiB1bmQg
dGhlIGRlY2ltYWxfZXhwb25lbnQgd2lsbCBiZQotICAvLyBkZWNyZWFzZWQgYnkgMi4KLSAgaW50
IGthcHBhOwotICBib29sIHJlc3VsdCA9IERpZ2l0R2VuKHNjYWxlZF9ib3VuZGFyeV9taW51cywg
c2NhbGVkX3csIHNjYWxlZF9ib3VuZGFyeV9wbHVzLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1ZmZlciwgbGVuZ3RoLCAma2FwcGEpOwotICAqZGVjaW1hbF9leHBvbmVudCA9IC1tayArIGth
cHBhOwotICByZXR1cm4gcmVzdWx0OwotfQotCi0KLS8vIFRoZSAiY291bnRlZCIgdmVyc2lvbiBv
ZiBncmlzdTMgKHNlZSBhYm92ZSkgb25seSBnZW5lcmF0ZXMgcmVxdWVzdGVkX2RpZ2l0cwotLy8g
bnVtYmVyIG9mIGRpZ2l0cy4gVGhpcyB2ZXJzaW9uIGRvZXMgbm90IGdlbmVyYXRlIHRoZSBzaG9y
dGVzdCByZXByZXNlbnRhdGlvbiwKLS8vIGFuZCB3aXRoIGVub3VnaCByZXF1ZXN0ZWQgZGlnaXRz
IDAuMSB3aWxsIGF0IHNvbWUgcG9pbnQgcHJpbnQgYXMgMC45OTk5OTk5Li4uCi0vLyBHcmlzdTMg
aXMgdG9vIGltcHJlY2lzZSBmb3IgcmVhbCBoYWxmd2F5IGNhc2VzICgxLjUgd2lsbCBub3Qgd29y
aykgYW5kCi0vLyB0aGVyZWZvcmUgdGhlIHJvdW5kaW5nIHN0cmF0ZWd5IGZvciBoYWxmd2F5IGNh
c2VzIGlzIGlycmVsZXZhbnQuCi1zdGF0aWMgYm9vbCBHcmlzdTNDb3VudGVkKGRvdWJsZSB2LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50KiBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZGVj
aW1hbF9leHBvbmVudCkgewotICBEaXlGcCB3ID0gRG91YmxlKHYpLkFzTm9ybWFsaXplZERpeUZw
KCk7Ci0gIERpeUZwIHRlbl9tazsgIC8vIENhY2hlZCBwb3dlciBvZiB0ZW46IDEwXi1rCi0gIGlu
dCBtazsgICAgICAgIC8vIC1rCi0gIGludCB0ZW5fbWtfbWluaW1hbF9iaW5hcnlfZXhwb25lbnQg
PQotICAgICBrTWluaW1hbFRhcmdldEV4cG9uZW50IC0gKHcuZSgpICsgRGl5RnA6OmtTaWduaWZp
Y2FuZFNpemUpOwotICBpbnQgdGVuX21rX21heGltYWxfYmluYXJ5X2V4cG9uZW50ID0KLSAgICAg
a01heGltYWxUYXJnZXRFeHBvbmVudCAtICh3LmUoKSArIERpeUZwOjprU2lnbmlmaWNhbmRTaXpl
KTsKLSAgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBvbmVudFJh
bmdlKAotICAgICAgdGVuX21rX21pbmltYWxfYmluYXJ5X2V4cG9uZW50LAotICAgICAgdGVuX21r
X21heGltYWxfYmluYXJ5X2V4cG9uZW50LAotICAgICAgJnRlbl9taywgJm1rKTsKLSAgQVNTRVJU
KChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpICsgdGVuX21rLmUoKSArCi0gICAgICAg
ICAgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpICYmCi0gICAgICAgICAoa01heGltYWxUYXJnZXRF
eHBvbmVudCA+PSB3LmUoKSArIHRlbl9tay5lKCkgKwotICAgICAgICAgIERpeUZwOjprU2lnbmlm
aWNhbmRTaXplKSk7Ci0gIC8vIE5vdGUgdGhhdCB0ZW5fbWsgaXMgb25seSBhbiBhcHByb3hpbWF0
aW9uIG9mIDEwXi1rLiBBIERpeUZwIG9ubHkgY29udGFpbnMgYQotICAvLyA2NCBiaXQgc2lnbmlm
aWNhbmQgYW5kIHRlbl9tayBpcyB0aHVzIG9ubHkgcHJlY2lzZSB1cCB0byA2NCBiaXRzLgotCi0g
IC8vIFRoZSBEaXlGcDo6VGltZXMgcHJvY2VkdXJlIHJvdW5kcyBpdHMgcmVzdWx0LCBhbmQgdGVu
X21rIGlzIGFwcHJveGltYXRlZAotICAvLyB0b28uIFRoZSB2YXJpYWJsZSBzY2FsZWRfdyAoYXMg
d2VsbCBhcyBzY2FsZWRfYm91bmRhcnlfbWludXMvcGx1cykgYXJlIG5vdwotICAvLyBvZmYgYnkg
YSBzbWFsbCBhbW91bnQuCi0gIC8vIEluIGZhY3Q6IHNjYWxlZF93IC0gdyoxMF5rIDwgMXVscCAo
dW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkgb2Ygc2NhbGVkX3cuCi0gIC8vIEluIG90aGVyIHdvcmRz
OiBsZXQgZiA9IHNjYWxlZF93LmYoKSBhbmQgZSA9IHNjYWxlZF93LmUoKSwgdGhlbgotICAvLyAg
ICAgICAgICAgKGYtMSkgKiAyXmUgPCB3KjEwXmsgPCAoZisxKSAqIDJeZQotICBEaXlGcCBzY2Fs
ZWRfdyA9IERpeUZwOjpUaW1lcyh3LCB0ZW5fbWspOwotCi0gIC8vIFdlIG5vdyBoYXZlIChkb3Vi
bGUpIChzY2FsZWRfdyAqIDEwXi1taykuCi0gIC8vIERpZ2l0R2VuIHdpbGwgZ2VuZXJhdGUgdGhl
IGZpcnN0IHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIG9mIHNjYWxlZF93IGFuZAotICAvLyByZXR1
cm4gdG9nZXRoZXIgd2l0aCBhIGthcHBhIHN1Y2ggdGhhdCBzY2FsZWRfdyB+PSBidWZmZXIgKiAx
MF5rYXBwYS4gKEl0Ci0gIC8vIHdpbGwgbm90IGFsd2F5cyBiZSBleGFjdGx5IHRoZSBzYW1lIHNp
bmNlIERpZ2l0R2VuQ291bnRlZCBvbmx5IHByb2R1Y2VzIGEKLSAgLy8gbGltaXRlZCBudW1iZXIg
b2YgZGlnaXRzLikKLSAgaW50IGthcHBhOwotICBib29sIHJlc3VsdCA9IERpZ2l0R2VuQ291bnRl
ZChzY2FsZWRfdywgcmVxdWVzdGVkX2RpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnVmZmVyLCBsZW5ndGgsICZrYXBwYSk7Ci0gICpkZWNpbWFsX2V4cG9uZW50ID0gLW1r
ICsga2FwcGE7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotYm9vbCBGYXN0RHRvYShkb3VibGUg
diwKLSAgICAgICAgICAgICAgRmFzdER0b2FNb2RlIG1vZGUsCi0gICAgICAgICAgICAgIGludCBy
ZXF1ZXN0ZWRfZGlnaXRzLAotICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAotICAg
ICAgICAgICAgICBpbnQqIGxlbmd0aCwKLSAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50
KSB7Ci0gIEFTU0VSVCh2ID4gMCk7Ci0gIEFTU0VSVCghRG91YmxlKHYpLklzU3BlY2lhbCgpKTsK
LQotICBib29sIHJlc3VsdCA9IGZhbHNlOwotICBpbnQgZGVjaW1hbF9leHBvbmVudCA9IDA7Ci0g
IHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgRkFTVF9EVE9BX1NIT1JURVNUOgotICAgIGNhc2Ug
RkFTVF9EVE9BX1NIT1JURVNUX1NJTkdMRToKLSAgICAgIHJlc3VsdCA9IEdyaXN1Myh2LCBtb2Rl
LCBidWZmZXIsIGxlbmd0aCwgJmRlY2ltYWxfZXhwb25lbnQpOwotICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGQVNUX0RUT0FfUFJFQ0lTSU9OOgotICAgICAgcmVzdWx0ID0gR3Jpc3UzQ291bnRlZCh2
LCByZXF1ZXN0ZWRfZGlnaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIs
IGxlbmd0aCwgJmRlY2ltYWxfZXhwb25lbnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gIH0KLSAgaWYgKHJlc3VsdCkgewotICAgICpkZWNpbWFs
X3BvaW50ID0gKmxlbmd0aCArIGRlY2ltYWxfZXhwb25lbnQ7Ci0gICAgYnVmZmVyWypsZW5ndGhd
ID0gJ1wwJzsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi19ICAvLyBuYW1lc3BhY2UgZG91
YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2RvdWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uL2Zhc3QtZHRvYS5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91
YmxlLWNvbnZlcnNpb24vZmFzdC1kdG9hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDVmMWU4ZWVlNWU1NmU3YzQ5NmM4NGRjMGE1YmY5ZGFkMGI5N2ZjOWYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNpb24vZmFzdC1kdG9h
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMCB0aGUg
VjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0vLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLS8vICAgICAgIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotLy8gICAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRkFTVF9EVE9BX0hfCi0jZGVmaW5lIERP
VUJMRV9DT05WRVJTSU9OX0ZBU1RfRFRPQV9IXwotCi0jaW5jbHVkZSAidXRpbHMuaCIKLQotbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKLQotZW51bSBGYXN0RHRvYU1vZGUgewotICAvLyBD
b21wdXRlcyB0aGUgc2hvcnRlc3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGlucHV0LiBU
aGUgcmV0dXJuZWQKLSAgLy8gcmVzdWx0IHdpbGwgYmUgdGhlIG1vc3QgYWNjdXJhdGUgbnVtYmVy
IG9mIHRoaXMgbGVuZ3RoLiBMb25nZXIKLSAgLy8gcmVwcmVzZW50YXRpb25zIG1pZ2h0IGJlIG1v
cmUgYWNjdXJhdGUuCi0gIEZBU1RfRFRPQV9TSE9SVEVTVCwKLSAgLy8gU2FtZSBhcyBGQVNUX0RU
T0FfU0hPUlRFU1QgYnV0IGZvciBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0cy4KLSAgRkFTVF9EVE9B
X1NIT1JURVNUX1NJTkdMRSwKLSAgLy8gQ29tcHV0ZXMgYSByZXByZXNlbnRhdGlvbiB3aGVyZSB0
aGUgcHJlY2lzaW9uIChudW1iZXIgb2YgZGlnaXRzKSBpcwotICAvLyBnaXZlbiBhcyBpbnB1dC4g
VGhlIHByZWNpc2lvbiBpcyBpbmRlcGVuZGVudCBvZiB0aGUgZGVjaW1hbCBwb2ludC4KLSAgRkFT
VF9EVE9BX1BSRUNJU0lPTgotfTsKLQotLy8gRmFzdER0b2Egd2lsbCBwcm9kdWNlIGF0IG1vc3Qg
a0Zhc3REdG9hTWF4aW1hbExlbmd0aCBkaWdpdHMuIFRoaXMgZG9lcyBub3QKLS8vIGluY2x1ZGUg
dGhlIHRlcm1pbmF0aW5nICdcMCcgY2hhcmFjdGVyLgotc3RhdGljIGNvbnN0IGludCBrRmFzdER0
b2FNYXhpbWFsTGVuZ3RoID0gMTc7Ci0vLyBTYW1lIGZvciBzaW5nbGUtcHJlY2lzaW9uIG51bWJl
cnMuCi1zdGF0aWMgY29uc3QgaW50IGtGYXN0RHRvYU1heGltYWxTaW5nbGVMZW5ndGggPSA5Owot
Ci0vLyBQcm92aWRlcyBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygdi4KLS8vIFRoZSByZXN1
bHQgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJ1ZmZlciAqIDEwXihwb2ludCAtIGxlbmd0aCku
Ci0vLwotLy8gUHJlY29uZGl0aW9uOgotLy8gICAqIHYgbXVzdCBiZSBhIHN0cmljdGx5IHBvc2l0
aXZlIGZpbml0ZSBkb3VibGUuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIGl0IHN1Y2NlZWRzLCBv
dGhlcndpc2UgdGhlIHJlc3VsdCBjYW4gbm90IGJlIHRydXN0ZWQuCi0vLyBUaGVyZSB3aWxsIGJl
ICpsZW5ndGggZGlnaXRzIGluc2lkZSB0aGUgYnVmZmVyIGZvbGxvd2VkIGJ5IGEgbnVsbCB0ZXJt
aW5hdG9yLgotLy8gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBhbmQgbW9kZSBlcXVhbHMK
LS8vICAgLSBGQVNUX0RUT0FfU0hPUlRFU1QsIHRoZW4KLS8vICAgICB0aGUgcGFyYW1ldGVyIHJl
cXVlc3RlZF9kaWdpdHMgaXMgaWdub3JlZC4KLS8vICAgICBUaGUgcmVzdWx0IHNhdGlzZmllcwot
Ly8gICAgICAgICB2ID09IChkb3VibGUpIChidWZmZXIgKiAxMF4ocG9pbnQgLSBsZW5ndGgpKS4K
LS8vICAgICBUaGUgZGlnaXRzIGluIHRoZSBidWZmZXIgYXJlIHRoZSBzaG9ydGVzdCByZXByZXNl
bnRhdGlvbiBwb3NzaWJsZS4gRS5nLgotLy8gICAgIGlmIDAuMDk5OTk5OTk5OTk5IGFuZCAwLjEg
cmVwcmVzZW50IHRoZSBzYW1lIGRvdWJsZSB0aGVuICIxIiBpcyByZXR1cm5lZAotLy8gICAgIHdp
dGggcG9pbnQgPSAwLgotLy8gICAgIFRoZSBsYXN0IGRpZ2l0IHdpbGwgYmUgY2xvc2VzdCB0byB0
aGUgYWN0dWFsIHYuIFRoYXQgaXMsIGV2ZW4gaWYgc2V2ZXJhbAotLy8gICAgIGRpZ2l0cyBtaWdo
dCBjb3JyZWN0bHkgeWllbGQgJ3YnIHdoZW4gcmVhZCBhZ2FpbiwgdGhlIGJ1ZmZlciB3aWxsIGNv
bnRhaW4KLS8vICAgICB0aGUgb25lIGNsb3Nlc3QgdG8gdi4KLS8vICAgLSBGQVNUX0RUT0FfUFJF
Q0lTSU9OLCB0aGVuCi0vLyAgICAgdGhlIGJ1ZmZlciBjb250YWlucyByZXF1ZXN0ZWRfZGlnaXRz
IGRpZ2l0cy4KLS8vICAgICB0aGUgZGlmZmVyZW5jZSB2IC0gKGJ1ZmZlciAqIDEwXihwb2ludC1s
ZW5ndGgpKSBpcyBjbG9zZXN0IHRvIHplcm8gZm9yCi0vLyAgICAgYWxsIHBvc3NpYmxlIHJlcHJl
c2VudGF0aW9ucyBvZiByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cy4KLS8vICAgICBJZiB0aGVyZSBh
cmUgdHdvIHZhbHVlcyB0aGF0IGFyZSBlcXVhbGx5IGNsb3NlLCB0aGVuIEZhc3REdG9hIHJldHVy
bnMKLS8vICAgICBmYWxzZS4KLS8vIEZvciBib3RoIG1vZGVzIHRoZSBidWZmZXIgbXVzdCBiZSBs
YXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgcmVzdWx0LgotYm9vbCBGYXN0RHRvYShkb3VibGUgZCwK
LSAgICAgICAgICAgICAgRmFzdER0b2FNb2RlIG1vZGUsCi0gICAgICAgICAgICAgIGludCByZXF1
ZXN0ZWRfZGlnaXRzLAotICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAotICAgICAg
ICAgICAgICBpbnQqIGxlbmd0aCwKLSAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50KTsK
LQotfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCi0KLSNlbmRpZiAgLy8gRE9VQkxF
X0NPTlZFUlNJT05fRkFTVF9EVE9BX0hfCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi9maXhl
ZC1kdG9hLmNjIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNv
bnZlcnNpb24vZG91YmxlLWNvbnZlcnNpb24vZml4ZWQtZHRvYS5jYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMGY1NWEwYjZlYjNiZjczY2MxNzhkNDM1NzY4MWUyY2NjOWRiOTVjZC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVy
c2lvbi9maXhlZC1kdG9hLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDA1ICswLDAgQEAKLS8vIENv
cHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vICAgICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZAotLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gICAgICAgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0vLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgImZp
eGVkLWR0b2EuaCIKLSNpbmNsdWRlICJpZWVlLmgiCi0KLW5hbWVzcGFjZSBkb3VibGVfY29udmVy
c2lvbiB7Ci0KLS8vIFJlcHJlc2VudHMgYSAxMjhiaXQgdHlwZS4gVGhpcyBjbGFzcyBzaG91bGQg
YmUgcmVwbGFjZWQgYnkgYSBuYXRpdmUgdHlwZSBvbgotLy8gcGxhdGZvcm1zIHRoYXQgc3VwcG9y
dCAxMjhiaXQgaW50ZWdlcnMuCi1jbGFzcyBVSW50MTI4IHsKLSBwdWJsaWM6Ci0gIFVJbnQxMjgo
KSA6IGhpZ2hfYml0c18oMCksIGxvd19iaXRzXygwKSB7IH0KLSAgVUludDEyOCh1aW50NjRfdCBo
aWdoLCB1aW50NjRfdCBsb3cpIDogaGlnaF9iaXRzXyhoaWdoKSwgbG93X2JpdHNfKGxvdykgeyB9
Ci0KLSAgdm9pZCBNdWx0aXBseSh1aW50MzJfdCBtdWx0aXBsaWNhbmQpIHsKLSAgICB1aW50NjRf
dCBhY2N1bXVsYXRvcjsKLQotICAgIGFjY3VtdWxhdG9yID0gKGxvd19iaXRzXyAmIGtNYXNrMzIp
ICogbXVsdGlwbGljYW5kOwotICAgIHVpbnQzMl90IHBhcnQgPSBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oYWNjdW11bGF0b3IgJiBrTWFzazMyKTsKLSAgICBhY2N1bXVsYXRvciA+Pj0gMzI7Ci0gICAg
YWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvciArIChsb3dfYml0c18gPj4gMzIpICogbXVsdGlwbGlj
YW5kOwotICAgIGxvd19iaXRzXyA9IChhY2N1bXVsYXRvciA8PCAzMikgKyBwYXJ0OwotICAgIGFj
Y3VtdWxhdG9yID4+PSAzMjsKLSAgICBhY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yICsgKGhpZ2hf
Yml0c18gJiBrTWFzazMyKSAqIG11bHRpcGxpY2FuZDsKLSAgICBwYXJ0ID0gc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGFjY3VtdWxhdG9yICYga01hc2szMik7Ci0gICAgYWNjdW11bGF0b3IgPj49IDMy
OwotICAgIGFjY3VtdWxhdG9yID0gYWNjdW11bGF0b3IgKyAoaGlnaF9iaXRzXyA+PiAzMikgKiBt
dWx0aXBsaWNhbmQ7Ci0gICAgaGlnaF9iaXRzXyA9IChhY2N1bXVsYXRvciA8PCAzMikgKyBwYXJ0
OwotICAgIEFTU0VSVCgoYWNjdW11bGF0b3IgPj4gMzIpID09IDApOwotICB9Ci0KLSAgdm9pZCBT
aGlmdChpbnQgc2hpZnRfYW1vdW50KSB7Ci0gICAgQVNTRVJUKC02NCA8PSBzaGlmdF9hbW91bnQg
JiYgc2hpZnRfYW1vdW50IDw9IDY0KTsKLSAgICBpZiAoc2hpZnRfYW1vdW50ID09IDApIHsKLSAg
ICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHNoaWZ0X2Ftb3VudCA9PSAtNjQpIHsKLSAgICAg
IGhpZ2hfYml0c18gPSBsb3dfYml0c187Ci0gICAgICBsb3dfYml0c18gPSAwOwotICAgIH0gZWxz
ZSBpZiAoc2hpZnRfYW1vdW50ID09IDY0KSB7Ci0gICAgICBsb3dfYml0c18gPSBoaWdoX2JpdHNf
OwotICAgICAgaGlnaF9iaXRzXyA9IDA7Ci0gICAgfSBlbHNlIGlmIChzaGlmdF9hbW91bnQgPD0g
MCkgewotICAgICAgaGlnaF9iaXRzXyA8PD0gLXNoaWZ0X2Ftb3VudDsKLSAgICAgIGhpZ2hfYml0
c18gKz0gbG93X2JpdHNfID4+ICg2NCArIHNoaWZ0X2Ftb3VudCk7Ci0gICAgICBsb3dfYml0c18g
PDw9IC1zaGlmdF9hbW91bnQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGxvd19iaXRzXyA+Pj0gc2hp
ZnRfYW1vdW50OwotICAgICAgbG93X2JpdHNfICs9IGhpZ2hfYml0c18gPDwgKDY0IC0gc2hpZnRf
YW1vdW50KTsKLSAgICAgIGhpZ2hfYml0c18gPj49IHNoaWZ0X2Ftb3VudDsKLSAgICB9Ci0gIH0K
LQotICAvLyBNb2RpZmllcyAqdGhpcyB0byAqdGhpcyBNT0QgKDJecG93ZXIpLgotICAvLyBSZXR1
cm5zICp0aGlzIERJViAoMl5wb3dlcikuCi0gIGludCBEaXZNb2RQb3dlck9mMihpbnQgcG93ZXIp
IHsKLSAgICBpZiAocG93ZXIgPj0gNjQpIHsKLSAgICAgIGludCByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGhpZ2hfYml0c18gPj4gKHBvd2VyIC0gNjQpKTsKLSAgICAgIGhpZ2hfYml0c18gLT0g
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJlc3VsdCkgPDwgKHBvd2VyIC0gNjQpOwotICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9IGVsc2UgewotICAgICAgdWludDY0X3QgcGFydF9sb3cgPSBsb3df
Yml0c18gPj4gcG93ZXI7Ci0gICAgICB1aW50NjRfdCBwYXJ0X2hpZ2ggPSBoaWdoX2JpdHNfIDw8
ICg2NCAtIHBvd2VyKTsKLSAgICAgIGludCByZXN1bHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnRf
bG93ICsgcGFydF9oaWdoKTsKLSAgICAgIGhpZ2hfYml0c18gPSAwOwotICAgICAgbG93X2JpdHNf
IC09IHBhcnRfbG93IDw8IHBvd2VyOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gIH0K
LQotICBib29sIElzWmVybygpIGNvbnN0IHsKLSAgICByZXR1cm4gaGlnaF9iaXRzXyA9PSAwICYm
IGxvd19iaXRzXyA9PSAwOwotICB9Ci0KLSAgaW50IEJpdEF0KGludCBwb3NpdGlvbikgY29uc3Qg
ewotICAgIGlmIChwb3NpdGlvbiA+PSA2NCkgewotICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4oaGlnaF9iaXRzXyA+PiAocG9zaXRpb24gLSA2NCkpICYgMTsKLSAgICB9IGVsc2UgewotICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obG93X2JpdHNfID4+IHBvc2l0aW9uKSAmIDE7Ci0g
ICAgfQotICB9Ci0KLSBwcml2YXRlOgotICBzdGF0aWMgY29uc3QgdWludDY0X3Qga01hc2szMiA9
IDB4RkZGRkZGRkY7Ci0gIC8vIFZhbHVlID09IChoaWdoX2JpdHNfIDw8IDY0KSArIGxvd19iaXRz
XwotICB1aW50NjRfdCBoaWdoX2JpdHNfOwotICB1aW50NjRfdCBsb3dfYml0c187Ci19OwotCi0K
LXN0YXRpYyBjb25zdCBpbnQga0RvdWJsZVNpZ25pZmljYW5kU2l6ZSA9IDUzOyAgLy8gSW5jbHVk
ZXMgdGhlIGhpZGRlbiBiaXQuCi0KLQotc3RhdGljIHZvaWQgRmlsbERpZ2l0czMyRml4ZWRMZW5n
dGgodWludDMyX3QgbnVtYmVyLCBpbnQgcmVxdWVzdGVkX2xlbmd0aCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7
Ci0gIGZvciAoaW50IGkgPSByZXF1ZXN0ZWRfbGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAg
ICBidWZmZXJbKCpsZW5ndGgpICsgaV0gPSAnMCcgKyBudW1iZXIgJSAxMDsKLSAgICBudW1iZXIg
Lz0gMTA7Ci0gIH0KLSAgKmxlbmd0aCArPSByZXF1ZXN0ZWRfbGVuZ3RoOwotfQotCi0KLXN0YXRp
YyB2b2lkIEZpbGxEaWdpdHMzMih1aW50MzJfdCBudW1iZXIsIFZlY3RvcjxjaGFyPiBidWZmZXIs
IGludCogbGVuZ3RoKSB7Ci0gIGludCBudW1iZXJfbGVuZ3RoID0gMDsKLSAgLy8gV2UgZmlsbCB0
aGUgZGlnaXRzIGluIHJldmVyc2Ugb3JkZXIgYW5kIGV4Y2hhbmdlIHRoZW0gYWZ0ZXJ3YXJkcy4K
LSAgd2hpbGUgKG51bWJlciAhPSAwKSB7Ci0gICAgaW50IGRpZ2l0ID0gbnVtYmVyICUgMTA7Ci0g
ICAgbnVtYmVyIC89IDEwOwotICAgIGJ1ZmZlclsoKmxlbmd0aCkgKyBudW1iZXJfbGVuZ3RoXSA9
IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGRpZ2l0KTsKLSAgICBudW1iZXJfbGVuZ3RoKys7Ci0g
IH0KLSAgLy8gRXhjaGFuZ2UgdGhlIGRpZ2l0cy4KLSAgaW50IGkgPSAqbGVuZ3RoOwotICBpbnQg
aiA9ICpsZW5ndGggKyBudW1iZXJfbGVuZ3RoIC0gMTsKLSAgd2hpbGUgKGkgPCBqKSB7Ci0gICAg
Y2hhciB0bXAgPSBidWZmZXJbaV07Ci0gICAgYnVmZmVyW2ldID0gYnVmZmVyW2pdOwotICAgIGJ1
ZmZlcltqXSA9IHRtcDsKLSAgICBpKys7Ci0gICAgai0tOwotICB9Ci0gICpsZW5ndGggKz0gbnVt
YmVyX2xlbmd0aDsKLX0KLQotCi1zdGF0aWMgdm9pZCBGaWxsRGlnaXRzNjRGaXhlZExlbmd0aCh1
aW50NjRfdCBudW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCkgewotICBjb25zdCB1aW50MzJfdCBrVGVuNyA9
IDEwMDAwMDAwOwotICAvLyBGb3IgZWZmaWNpZW5jeSBjdXQgdGhlIG51bWJlciBpbnRvIDMgdWlu
dDMyX3QgcGFydHMsIGFuZCBwcmludCB0aG9zZS4KLSAgdWludDMyX3QgcGFydDIgPSBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4obnVtYmVyICUga1RlbjcpOwotICBudW1iZXIgLz0ga1Rlbjc7Ci0gIHVp
bnQzMl90IHBhcnQxID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAlIGtUZW43KTsKLSAg
dWludDMyX3QgcGFydDAgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyIC8ga1RlbjcpOwot
Ci0gIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQwLCAzLCBidWZmZXIsIGxlbmd0aCk7Ci0g
IEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQxLCA3LCBidWZmZXIsIGxlbmd0aCk7Ci0gIEZp
bGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQyLCA3LCBidWZmZXIsIGxlbmd0aCk7Ci19Ci0KLQot
c3RhdGljIHZvaWQgRmlsbERpZ2l0czY0KHVpbnQ2NF90IG51bWJlciwgVmVjdG9yPGNoYXI+IGJ1
ZmZlciwgaW50KiBsZW5ndGgpIHsKLSAgY29uc3QgdWludDMyX3Qga1RlbjcgPSAxMDAwMDAwMDsK
LSAgLy8gRm9yIGVmZmljaWVuY3kgY3V0IHRoZSBudW1iZXIgaW50byAzIHVpbnQzMl90IHBhcnRz
LCBhbmQgcHJpbnQgdGhvc2UuCi0gIHVpbnQzMl90IHBhcnQyID0gc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KG51bWJlciAlIGtUZW43KTsKLSAgbnVtYmVyIC89IGtUZW43OwotICB1aW50MzJfdCBwYXJ0
MSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIgJSBrVGVuNyk7Ci0gIHVpbnQzMl90IHBh
cnQwID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAvIGtUZW43KTsKLQotICBpZiAocGFy
dDAgIT0gMCkgewotICAgIEZpbGxEaWdpdHMzMihwYXJ0MCwgYnVmZmVyLCBsZW5ndGgpOwotICAg
IEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQxLCA3LCBidWZmZXIsIGxlbmd0aCk7Ci0gICAg
RmlsbERpZ2l0czMyRml4ZWRMZW5ndGgocGFydDIsIDcsIGJ1ZmZlciwgbGVuZ3RoKTsKLSAgfSBl
bHNlIGlmIChwYXJ0MSAhPSAwKSB7Ci0gICAgRmlsbERpZ2l0czMyKHBhcnQxLCBidWZmZXIsIGxl
bmd0aCk7Ci0gICAgRmlsbERpZ2l0czMyRml4ZWRMZW5ndGgocGFydDIsIDcsIGJ1ZmZlciwgbGVu
Z3RoKTsKLSAgfSBlbHNlIHsKLSAgICBGaWxsRGlnaXRzMzIocGFydDIsIGJ1ZmZlciwgbGVuZ3Ro
KTsKLSAgfQotfQotCi0KLXN0YXRpYyB2b2lkIFJvdW5kVXAoVmVjdG9yPGNoYXI+IGJ1ZmZlciwg
aW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9wb2ludCkgewotICAvLyBBbiBlbXB0eSBidWZmZXIg
cmVwcmVzZW50cyAwLgotICBpZiAoKmxlbmd0aCA9PSAwKSB7Ci0gICAgYnVmZmVyWzBdID0gJzEn
OwotICAgICpkZWNpbWFsX3BvaW50ID0gMTsKLSAgICAqbGVuZ3RoID0gMTsKLSAgICByZXR1cm47
Ci0gIH0KLSAgLy8gUm91bmQgdGhlIGxhc3QgZGlnaXQgdW50aWwgd2UgZWl0aGVyIGhhdmUgYSBk
aWdpdCB0aGF0IHdhcyBub3QgJzknIG9yIHVudGlsCi0gIC8vIHdlIHJlYWNoZWQgdGhlIGZpcnN0
IGRpZ2l0LgotICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKLSAgZm9yIChpbnQgaSA9ICgqbGVu
Z3RoKSAtIDE7IGkgPiAwOyAtLWkpIHsKLSAgICBpZiAoYnVmZmVyW2ldICE9ICcwJyArIDEwKSB7
Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGJ1ZmZlcltpXSA9ICcwJzsKLSAgICBidWZmZXJb
aSAtIDFdKys7Ci0gIH0KLSAgLy8gSWYgdGhlIGZpcnN0IGRpZ2l0IGlzIG5vdyAnMCcgKyAxMCwg
d2Ugd291bGQgbmVlZCB0byBzZXQgaXQgdG8gJzAnIGFuZCBhZGQKLSAgLy8gYSAnMScgaW4gZnJv
bnQuIEhvd2V2ZXIgd2UgcmVhY2ggdGhlIGZpcnN0IGRpZ2l0IG9ubHkgaWYgYWxsIGZvbGxvd2lu
ZwotICAvLyBkaWdpdHMgaGFkIGJlZW4gJzknIGJlZm9yZSByb3VuZGluZyB1cC4gTm93IGFsbCB0
cmFpbGluZyBkaWdpdHMgYXJlICcwJyBhbmQKLSAgLy8gd2Ugc2ltcGx5IHN3aXRjaCB0aGUgZmly
c3QgZGlnaXQgdG8gJzEnIGFuZCB1cGRhdGUgdGhlIGRlY2ltYWwtcG9pbnQKLSAgLy8gKGluZGlj
YXRpbmcgdGhhdCB0aGUgcG9pbnQgaXMgbm93IG9uZSBkaWdpdCB0byB0aGUgcmlnaHQpLgotICBp
ZiAoYnVmZmVyWzBdID09ICcwJyArIDEwKSB7Ci0gICAgYnVmZmVyWzBdID0gJzEnOwotICAgICgq
ZGVjaW1hbF9wb2ludCkrKzsKLSAgfQotfQotCi0KLS8vIFRoZSBnaXZlbiBmcmFjdGlvbmFscyBu
dW1iZXIgcmVwcmVzZW50cyBhIGZpeGVkLXBvaW50IG51bWJlciB3aXRoIGJpbmFyeQotLy8gcG9p
bnQgYXQgYml0ICgtZXhwb25lbnQpLgotLy8gUHJlY29uZGl0aW9uczoKLS8vICAgLTEyOCA8PSBl
eHBvbmVudCA8PSAwLgotLy8gICAwIDw9IGZyYWN0aW9uYWxzICogMl5leHBvbmVudCA8IDEKLS8v
ICAgVGhlIGJ1ZmZlciBob2xkcyB0aGUgcmVzdWx0LgotLy8gVGhlIGZ1bmN0aW9uIHdpbGwgcm91
bmQgaXRzIHJlc3VsdC4gRHVyaW5nIHRoZSByb3VuZGluZy1wcm9jZXNzIGRpZ2l0cyBub3QKLS8v
IGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIHVwZGF0ZWQsIGFuZCB0aGUgZGVj
aW1hbC1wb2ludCB2YXJpYWJsZQotLy8gbWlnaHQgYmUgdXBkYXRlZC4gSWYgdGhpcyBmdW5jdGlv
biBnZW5lcmF0ZXMgdGhlIGRpZ2l0cyA5OSBhbmQgdGhlIGJ1ZmZlcgotLy8gYWxyZWFkeSBjb250
YWluZWQgIjE5OSIgKHRodXMgeWllbGRpbmcgYSBidWZmZXIgb2YgIjE5OTk5IikgdGhlbiBhCi0v
LyByb3VuZGluZy11cCB3aWxsIGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB0byAi
MjAwMDAiLgotc3RhdGljIHZvaWQgRmlsbEZyYWN0aW9uYWxzKHVpbnQ2NF90IGZyYWN0aW9uYWxz
LCBpbnQgZXhwb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyYWN0aW9u
YWxfY291bnQsIFZlY3RvcjxjaGFyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9wb2ludCkgewotICBBU1NFUlQoLTEyOCA8PSBl
eHBvbmVudCAmJiBleHBvbmVudCA8PSAwKTsKLSAgLy8gJ2ZyYWN0aW9uYWxzJyBpcyBhIGZpeGVk
LXBvaW50IG51bWJlciwgd2l0aCBiaW5hcnkgcG9pbnQgYXQgYml0Ci0gIC8vICgtZXhwb25lbnQp
LiBJbnNpZGUgdGhlIGZ1bmN0aW9uIHRoZSBub24tY29udmVydGVkIHJlbWFpbmRlciBvZiBmcmFj
dGlvbmFscwotICAvLyBpcyBhIGZpeGVkLXBvaW50IG51bWJlciwgd2l0aCBiaW5hcnkgcG9pbnQg
YXQgYml0ICdwb2ludCcuCi0gIGlmICgtZXhwb25lbnQgPD0gNjQpIHsKLSAgICAvLyBPbmUgNjQg
Yml0IG51bWJlciBpcyBzdWZmaWNpZW50LgotICAgIEFTU0VSVChmcmFjdGlvbmFscyA+PiA1NiA9
PSAwKTsKLSAgICBpbnQgcG9pbnQgPSAtZXhwb25lbnQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBmcmFjdGlvbmFsX2NvdW50OyArK2kpIHsKLSAgICAgIGlmIChmcmFjdGlvbmFscyA9PSAwKSBi
cmVhazsKLSAgICAgIC8vIEluc3RlYWQgb2YgbXVsdGlwbHlpbmcgYnkgMTAgd2UgbXVsdGlwbHkg
YnkgNSBhbmQgYWRqdXN0IHRoZSBwb2ludAotICAgICAgLy8gbG9jYXRpb24uIFRoaXMgd2F5IHRo
ZSBmcmFjdGlvbmFscyB2YXJpYWJsZSB3aWxsIG5vdCBvdmVyZmxvdy4KLSAgICAgIC8vIEludmFy
aWFudCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wOiBmcmFjdGlvbmFscyA8IDJecG9pbnQu
Ci0gICAgICAvLyBJbml0aWFsbHkgd2UgaGF2ZTogcG9pbnQgPD0gNjQgYW5kIGZyYWN0aW9uYWxz
IDwgMl41NgotICAgICAgLy8gQWZ0ZXIgZWFjaCBpdGVyYXRpb24gdGhlIHBvaW50IGlzIGRlY3Jl
bWVudGVkIGJ5IG9uZS4KLSAgICAgIC8vIE5vdGUgdGhhdCA1XjMgPSAxMjUgPCAxMjggPSAyXjcu
Ci0gICAgICAvLyBUaGVyZWZvcmUgdGhyZWUgaXRlcmF0aW9ucyBvZiB0aGlzIGxvb3Agd2lsbCBu
b3Qgb3ZlcmZsb3cgZnJhY3Rpb25hbHMKLSAgICAgIC8vIChldmVuIHdpdGhvdXQgdGhlIHN1YnRy
YWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYm9keSkuIEF0IHRoaXMKLSAgICAgIC8vIHRp
bWUgcG9pbnQgd2lsbCBzYXRpc2Z5IHBvaW50IDw9IDYxIGFuZCB0aGVyZWZvcmUgZnJhY3Rpb25h
bHMgPCAyXnBvaW50Ci0gICAgICAvLyBhbmQgYW55IGZ1cnRoZXIgbXVsdGlwbGljYXRpb24gb2Yg
ZnJhY3Rpb25hbHMgYnkgNSB3aWxsIG5vdCBvdmVyZmxvdy4KLSAgICAgIGZyYWN0aW9uYWxzICo9
IDU7Ci0gICAgICBwb2ludC0tOwotICAgICAgaW50IGRpZ2l0ID0gc3RhdGljX2Nhc3Q8aW50Pihm
cmFjdGlvbmFscyA+PiBwb2ludCk7Ci0gICAgICBBU1NFUlQoZGlnaXQgPD0gOSk7Ci0gICAgICBi
dWZmZXJbKmxlbmd0aF0gPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBkaWdpdCk7Ci0gICAgICAo
Kmxlbmd0aCkrKzsKLSAgICAgIGZyYWN0aW9uYWxzIC09IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihk
aWdpdCkgPDwgcG9pbnQ7Ci0gICAgfQotICAgIC8vIElmIHRoZSBmaXJzdCBiaXQgYWZ0ZXIgdGhl
IHBvaW50IGlzIHNldCB3ZSBoYXZlIHRvIHJvdW5kIHVwLgotICAgIEFTU0VSVChmcmFjdGlvbmFs
cyA9PSAwIHx8IHBvaW50IC0gMSA+PSAwKTsKLSAgICBpZiAoKGZyYWN0aW9uYWxzICE9IDApICYm
ICgoZnJhY3Rpb25hbHMgPj4gKHBvaW50IC0gMSkpICYgMSkgPT0gMSkgewotICAgICAgUm91bmRV
cChidWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7Ci0gICAgfQotICB9IGVsc2UgeyAgLy8g
V2UgbmVlZCAxMjggYml0cy4KLSAgICBBU1NFUlQoNjQgPCAtZXhwb25lbnQgJiYgLWV4cG9uZW50
IDw9IDEyOCk7Ci0gICAgVUludDEyOCBmcmFjdGlvbmFsczEyOCA9IFVJbnQxMjgoZnJhY3Rpb25h
bHMsIDApOwotICAgIGZyYWN0aW9uYWxzMTI4LlNoaWZ0KC1leHBvbmVudCAtIDY0KTsKLSAgICBp
bnQgcG9pbnQgPSAxMjg7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFjdGlvbmFsX2NvdW50
OyArK2kpIHsKLSAgICAgIGlmIChmcmFjdGlvbmFsczEyOC5Jc1plcm8oKSkgYnJlYWs7Ci0gICAg
ICAvLyBBcyBiZWZvcmU6IGluc3RlYWQgb2YgbXVsdGlwbHlpbmcgYnkgMTAgd2UgbXVsdGlwbHkg
YnkgNSBhbmQgYWRqdXN0IHRoZQotICAgICAgLy8gcG9pbnQgbG9jYXRpb24uCi0gICAgICAvLyBU
aGlzIG11bHRpcGxpY2F0aW9uIHdpbGwgbm90IG92ZXJmbG93IGZvciB0aGUgc2FtZSByZWFzb25z
IGFzIGJlZm9yZS4KLSAgICAgIGZyYWN0aW9uYWxzMTI4Lk11bHRpcGx5KDUpOwotICAgICAgcG9p
bnQtLTsKLSAgICAgIGludCBkaWdpdCA9IGZyYWN0aW9uYWxzMTI4LkRpdk1vZFBvd2VyT2YyKHBv
aW50KTsKLSAgICAgIEFTU0VSVChkaWdpdCA8PSA5KTsKLSAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9
IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGRpZ2l0KTsKLSAgICAgICgqbGVuZ3RoKSsrOwotICAg
IH0KLSAgICBpZiAoZnJhY3Rpb25hbHMxMjguQml0QXQocG9pbnQgLSAxKSA9PSAxKSB7Ci0gICAg
ICBSb3VuZFVwKGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsKLSAgICB9Ci0gIH0KLX0K
LQotCi0vLyBSZW1vdmVzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHplcm9zLgotLy8gSWYgbGVhZGlu
ZyB6ZXJvcyBhcmUgcmVtb3ZlZCB0aGVuIHRoZSBkZWNpbWFsIHBvaW50IHBvc2l0aW9uIGlzIGFk
anVzdGVkLgotc3RhdGljIHZvaWQgVHJpbVplcm9zKFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCog
bGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKLSAgd2hpbGUgKCpsZW5ndGggPiAwICYmIGJ1
ZmZlclsoKmxlbmd0aCkgLSAxXSA9PSAnMCcpIHsKLSAgICAoKmxlbmd0aCktLTsKLSAgfQotICBp
bnQgZmlyc3Rfbm9uX3plcm8gPSAwOwotICB3aGlsZSAoZmlyc3Rfbm9uX3plcm8gPCAqbGVuZ3Ro
ICYmIGJ1ZmZlcltmaXJzdF9ub25femVyb10gPT0gJzAnKSB7Ci0gICAgZmlyc3Rfbm9uX3plcm8r
KzsKLSAgfQotICBpZiAoZmlyc3Rfbm9uX3plcm8gIT0gMCkgewotICAgIGZvciAoaW50IGkgPSBm
aXJzdF9ub25femVybzsgaSA8ICpsZW5ndGg7ICsraSkgewotICAgICAgYnVmZmVyW2kgLSBmaXJz
dF9ub25femVyb10gPSBidWZmZXJbaV07Ci0gICAgfQotICAgICpsZW5ndGggLT0gZmlyc3Rfbm9u
X3plcm87Ci0gICAgKmRlY2ltYWxfcG9pbnQgLT0gZmlyc3Rfbm9uX3plcm87Ci0gIH0KLX0KLQot
Ci1ib29sIEZhc3RGaXhlZER0b2EoZG91YmxlIHYsCi0gICAgICAgICAgICAgICAgICAgaW50IGZy
YWN0aW9uYWxfY291bnQsCi0gICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwK
LSAgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICBpbnQq
IGRlY2ltYWxfcG9pbnQpIHsKLSAgY29uc3QgdWludDMyX3Qga01heFVJbnQzMiA9IDB4RkZGRkZG
RkY7Ci0gIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gRG91YmxlKHYpLlNpZ25pZmljYW5kKCk7Ci0g
IGludCBleHBvbmVudCA9IERvdWJsZSh2KS5FeHBvbmVudCgpOwotICAvLyB2ID0gc2lnbmlmaWNh
bmQgKiAyXmV4cG9uZW50ICh3aXRoIHNpZ25pZmljYW5kIGEgNTNiaXQgaW50ZWdlcikuCi0gIC8v
IElmIHRoZSBleHBvbmVudCBpcyBsYXJnZXIgdGhhbiAyMCAoaS5lLiB3ZSBtYXkgaGF2ZSBhIDcz
Yml0IG51bWJlcikgdGhlbiB3ZQotICAvLyBkb24ndCBrbm93IGhvdyB0byBjb21wdXRlIHRoZSBy
ZXByZXNlbnRhdGlvbi4gMl43MyB+PSA5LjUqMTBeMjEuCi0gIC8vIElmIG5lY2Vzc2FyeSB0aGlz
IGxpbWl0IGNvdWxkIHByb2JhYmx5IGJlIGluY3JlYXNlZCwgYnV0IHdlIGRvbid0IG5lZWQKLSAg
Ly8gbW9yZS4KLSAgaWYgKGV4cG9uZW50ID4gMjApIHJldHVybiBmYWxzZTsKLSAgaWYgKGZyYWN0
aW9uYWxfY291bnQgPiAyMCkgcmV0dXJuIGZhbHNlOwotICAqbGVuZ3RoID0gMDsKLSAgLy8gQXQg
bW9zdCBrRG91YmxlU2lnbmlmaWNhbmRTaXplIGJpdHMgb2YgdGhlIHNpZ25pZmljYW5kIGFyZSBu
b24temVyby4KLSAgLy8gR2l2ZW4gYSA2NCBiaXQgaW50ZWdlciB3ZSBoYXZlIDExIDBzIGZvbGxv
d2VkIGJ5IDUzIHBvdGVudGlhbGx5IG5vbi16ZXJvCi0gIC8vIGJpdHM6ICAwLi4xMSouLjB4eHgu
LjUzKi4ueHgKLSAgaWYgKGV4cG9uZW50ICsga0RvdWJsZVNpZ25pZmljYW5kU2l6ZSA+IDY0KSB7
Ci0gICAgLy8gVGhlIGV4cG9uZW50IG11c3QgYmUgPiAxMS4KLSAgICAvLwotICAgIC8vIFdlIGtu
b3cgdGhhdCB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50LgotICAgIC8vIEFuZCB0aGUgZXhw
b25lbnQgPiAxMS4KLSAgICAvLyBXZSBzaW1wbGlmeSB0aGUgdGFzayBieSBkaXZpZGluZyB2IGJ5
IDEwXjE3LgotICAgIC8vIFRoZSBxdW90aWVudCBkZWxpdmVycyB0aGUgZmlyc3QgZGlnaXRzLCBh
bmQgdGhlIHJlbWFpbmRlciBmaXRzIGludG8gYSA2NAotICAgIC8vIGJpdCBudW1iZXIuCi0gICAg
Ly8gRGl2aWRpbmcgYnkgMTBeMTcgaXMgZXF1aXZhbGVudCB0byBkaXZpZGluZyBieSA1XjE3KjJe
MTcuCi0gICAgY29uc3QgdWludDY0X3Qga0ZpdmUxNyA9IFVJTlQ2NF8yUEFSVF9DKDB4QjEsIEEy
QkMyRUM1KTsgIC8vIDVeMTcKLSAgICB1aW50NjRfdCBkaXZpc29yID0ga0ZpdmUxNzsKLSAgICBp
bnQgZGl2aXNvcl9wb3dlciA9IDE3OwotICAgIHVpbnQ2NF90IGRpdmlkZW5kID0gc2lnbmlmaWNh
bmQ7Ci0gICAgdWludDMyX3QgcXVvdGllbnQ7Ci0gICAgdWludDY0X3QgcmVtYWluZGVyOwotICAg
IC8vIExldCB2ID0gZiAqIDJeZSB3aXRoIGYgPT0gc2lnbmlmaWNhbmQgYW5kIGUgPT0gZXhwb25l
bnQuCi0gICAgLy8gVGhlbiBuZWVkIHEgKHF1b3RpZW50KSBhbmQgciAocmVtYWluZGVyKSBhcyBm
b2xsb3dzOgotICAgIC8vICAgdiAgICAgICAgICAgID0gcSAqIDEwXjE3ICAgICAgICsgcgotICAg
IC8vICAgZiAqIDJeZSAgICAgID0gcSAqIDEwXjE3ICAgICAgICsgcgotICAgIC8vICAgZiAqIDJe
ZSAgICAgID0gcSAqIDVeMTcgKiAyXjE3ICsgcgotICAgIC8vIElmIGUgPiAxNyB0aGVuCi0gICAg
Ly8gICBmICogMl4oZS0xNykgPSBxICogNV4xNyAgICAgICAgKyByLzJeMTcKLSAgICAvLyBlbHNl
Ci0gICAgLy8gICBmICA9IHEgKiA1XjE3ICogMl4oMTctZSkgKyByLzJeZQotICAgIGlmIChleHBv
bmVudCA+IGRpdmlzb3JfcG93ZXIpIHsKLSAgICAgIC8vIFdlIG9ubHkgYWxsb3cgZXhwb25lbnRz
IG9mIHVwIHRvIDIwIGFuZCB0aGVyZWZvcmUgKDE3IC0gZSkgPD0gMwotICAgICAgZGl2aWRlbmQg
PDw9IGV4cG9uZW50IC0gZGl2aXNvcl9wb3dlcjsKLSAgICAgIHF1b3RpZW50ID0gc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGRpdmlkZW5kIC8gZGl2aXNvcik7Ci0gICAgICByZW1haW5kZXIgPSAoZGl2
aWRlbmQgJSBkaXZpc29yKSA8PCBkaXZpc29yX3Bvd2VyOwotICAgIH0gZWxzZSB7Ci0gICAgICBk
aXZpc29yIDw8PSBkaXZpc29yX3Bvd2VyIC0gZXhwb25lbnQ7Ci0gICAgICBxdW90aWVudCA9IHN0
YXRpY19jYXN0PHVpbnQzMl90PihkaXZpZGVuZCAvIGRpdmlzb3IpOwotICAgICAgcmVtYWluZGVy
ID0gKGRpdmlkZW5kICUgZGl2aXNvcikgPDwgZXhwb25lbnQ7Ci0gICAgfQotICAgIEZpbGxEaWdp
dHMzMihxdW90aWVudCwgYnVmZmVyLCBsZW5ndGgpOwotICAgIEZpbGxEaWdpdHM2NEZpeGVkTGVu
Z3RoKHJlbWFpbmRlciwgYnVmZmVyLCBsZW5ndGgpOwotICAgICpkZWNpbWFsX3BvaW50ID0gKmxl
bmd0aDsKLSAgfSBlbHNlIGlmIChleHBvbmVudCA+PSAwKSB7Ci0gICAgLy8gMCA8PSBleHBvbmVu
dCA8PSAxMQotICAgIHNpZ25pZmljYW5kIDw8PSBleHBvbmVudDsKLSAgICBGaWxsRGlnaXRzNjQo
c2lnbmlmaWNhbmQsIGJ1ZmZlciwgbGVuZ3RoKTsKLSAgICAqZGVjaW1hbF9wb2ludCA9ICpsZW5n
dGg7Ci0gIH0gZWxzZSBpZiAoZXhwb25lbnQgPiAta0RvdWJsZVNpZ25pZmljYW5kU2l6ZSkgewot
ICAgIC8vIFdlIGhhdmUgdG8gY3V0IHRoZSBudW1iZXIuCi0gICAgdWludDY0X3QgaW50ZWdyYWxz
ID0gc2lnbmlmaWNhbmQgPj4gLWV4cG9uZW50OwotICAgIHVpbnQ2NF90IGZyYWN0aW9uYWxzID0g
c2lnbmlmaWNhbmQgLSAoaW50ZWdyYWxzIDw8IC1leHBvbmVudCk7Ci0gICAgaWYgKGludGVncmFs
cyA+IGtNYXhVSW50MzIpIHsKLSAgICAgIEZpbGxEaWdpdHM2NChpbnRlZ3JhbHMsIGJ1ZmZlciwg
bGVuZ3RoKTsKLSAgICB9IGVsc2UgewotICAgICAgRmlsbERpZ2l0czMyKHN0YXRpY19jYXN0PHVp
bnQzMl90PihpbnRlZ3JhbHMpLCBidWZmZXIsIGxlbmd0aCk7Ci0gICAgfQotICAgICpkZWNpbWFs
X3BvaW50ID0gKmxlbmd0aDsKLSAgICBGaWxsRnJhY3Rpb25hbHMoZnJhY3Rpb25hbHMsIGV4cG9u
ZW50LCBmcmFjdGlvbmFsX2NvdW50LAotICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0
aCwgZGVjaW1hbF9wb2ludCk7Ci0gIH0gZWxzZSBpZiAoZXhwb25lbnQgPCAtMTI4KSB7Ci0gICAg
Ly8gVGhpcyBjb25maWd1cmF0aW9uICh3aXRoIGF0IG1vc3QgMjAgZGlnaXRzKSBtZWFucyB0aGF0
IGFsbCBkaWdpdHMgbXVzdCBiZQotICAgIC8vIDAuCi0gICAgQVNTRVJUKGZyYWN0aW9uYWxfY291
bnQgPD0gMjApOwotICAgIGJ1ZmZlclswXSA9ICdcMCc7Ci0gICAgKmxlbmd0aCA9IDA7Ci0gICAg
KmRlY2ltYWxfcG9pbnQgPSAtZnJhY3Rpb25hbF9jb3VudDsKLSAgfSBlbHNlIHsKLSAgICAqZGVj
aW1hbF9wb2ludCA9IDA7Ci0gICAgRmlsbEZyYWN0aW9uYWxzKHNpZ25pZmljYW5kLCBleHBvbmVu
dCwgZnJhY3Rpb25hbF9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgs
IGRlY2ltYWxfcG9pbnQpOwotICB9Ci0gIFRyaW1aZXJvcyhidWZmZXIsIGxlbmd0aCwgZGVjaW1h
bF9wb2ludCk7Ci0gIGJ1ZmZlclsqbGVuZ3RoXSA9ICdcMCc7Ci0gIGlmICgoKmxlbmd0aCkgPT0g
MCkgewotICAgIC8vIFRoZSBzdHJpbmcgaXMgZW1wdHkgYW5kIHRoZSBkZWNpbWFsX3BvaW50IHRo
dXMgaGFzIG5vIGltcG9ydGFuY2UuIE1pbWljawotICAgIC8vIEdheSdzIGR0b2EgYW5kIGFuZCBz
ZXQgaXQgdG8gLWZyYWN0aW9uYWxfY291bnQuCi0gICAgKmRlY2ltYWxfcG9pbnQgPSAtZnJhY3Rp
b25hbF9jb3VudDsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGRv
dWJsZV9jb252ZXJzaW9uCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi9maXhlZC1kdG9hLmgg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9k
b3VibGUtY29udmVyc2lvbi9maXhlZC1kdG9hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDNiZGQwOGUyMWY1OWQ1ZmVjZTM3ZWIxNGE2ZjUxMGY0NjRjM2YyYmEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNpb24vZml4ZWQt
ZHRvYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTAg
dGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0vLyAgICAgICB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLS8vICAgICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0jaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0ZJWEVEX0RUT0FfSF8KLSNkZWZp
bmUgRE9VQkxFX0NPTlZFUlNJT05fRklYRURfRFRPQV9IXwotCi0jaW5jbHVkZSAidXRpbHMuaCIK
LQotbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKLQotLy8gUHJvZHVjZXMgZGlnaXRzIG5l
Y2Vzc2FyeSB0byBwcmludCBhIGdpdmVuIG51bWJlciB3aXRoCi0vLyAnZnJhY3Rpb25hbF9jb3Vu
dCcgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LgotLy8gVGhlIGJ1ZmZlciBtdXN0IGJl
IGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUgcmVzdWx0IHBsdXMgb25lIHRlcm1pbmF0aW5nIG51bGwK
LS8vIGNoYXJhY3Rlci4KLS8vCi0vLyBUaGUgcHJvZHVjZWQgZGlnaXRzIG1pZ2h0IGJlIHRvbyBz
aG9ydCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgaGFzIHRvIGZpbGwKLS8vIHRoZSBnYXBzIHdp
dGggJzAncy4KLS8vIEV4YW1wbGU6IEZhc3RGaXhlZER0b2EoMC4wMDEsIDUsIC4uLikgaXMgYWxs
b3dlZCB0byByZXR1cm4gYnVmZmVyID0gIjEiLCBhbmQKLS8vIGRlY2ltYWxfcG9pbnQgPSAtMi4K
LS8vIEhhbGZ3YXkgY2FzZXMgYXJlIHJvdW5kZWQgdG93YXJkcyArLy1JbmZpbml0eSAoYXdheSBm
cm9tIDApLiBUaGUgY2FsbAotLy8gRmFzdEZpeGVkRHRvYSgwLjE1LCAyLCAuLi4pIHRodXMgcmV0
dXJucyBidWZmZXIgPSAiMiIsIGRlY2ltYWxfcG9pbnQgPSAwLgotLy8gVGhlIHJldHVybmVkIGJ1
ZmZlciBtYXkgY29udGFpbiBkaWdpdHMgdGhhdCB3b3VsZCBiZSB0cnVuY2F0ZWQgZnJvbSB0aGUK
LS8vIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnB1dC4KLS8vCi0vLyBUaGlzIG1l
dGhvZCBvbmx5IHdvcmtzIGZvciBzb21lIHBhcmFtZXRlcnMuIElmIGl0IGNhbid0IGhhbmRsZSB0
aGUgaW5wdXQgaXQKLS8vIHJldHVybnMgZmFsc2UuIFRoZSBvdXRwdXQgaXMgbnVsbC10ZXJtaW5h
dGVkIHdoZW4gdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLgotYm9vbCBGYXN0Rml4ZWREdG9hKGRvdWJs
ZSB2LCBpbnQgZnJhY3Rpb25hbF9jb3VudCwKLSAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hh
cj4gYnVmZmVyLCBpbnQqIGxlbmd0aCwgaW50KiBkZWNpbWFsX3BvaW50KTsKLQotfSAgLy8gbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCi0KLSNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05f
RklYRURfRFRPQV9IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNpb24vaWVlZS5oIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNv
bnZlcnNpb24vaWVlZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTRjZjRmNzE3
MmFjNzc0ZWQ5NzU4NjQyZDA4Y2JmNTRmMDhlMjRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2RvdWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uL2llZWUuaAorKysgL2Rldi9udWxs
CkBAIC0xLDQwMiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMiB0aGUgVjggcHJvamVjdCBhdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8v
ICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0vLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLS8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLS8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYg
RE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0hfCi0jZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0RP
VUJMRV9IXwotCi0jaW5jbHVkZSAiZGl5LWZwLmgiCi0KLW5hbWVzcGFjZSBkb3VibGVfY29udmVy
c2lvbiB7Ci0KLS8vIFdlIGFzc3VtZSB0aGF0IGRvdWJsZXMgYW5kIHVpbnQ2NF90IGhhdmUgdGhl
IHNhbWUgZW5kaWFubmVzcy4KLXN0YXRpYyB1aW50NjRfdCBkb3VibGVfdG9fdWludDY0KGRvdWJs
ZSBkKSB7IHJldHVybiBCaXRDYXN0PHVpbnQ2NF90PihkKTsgfQotc3RhdGljIGRvdWJsZSB1aW50
NjRfdG9fZG91YmxlKHVpbnQ2NF90IGQ2NCkgeyByZXR1cm4gQml0Q2FzdDxkb3VibGU+KGQ2NCk7
IH0KLXN0YXRpYyB1aW50MzJfdCBmbG9hdF90b191aW50MzIoZmxvYXQgZikgeyByZXR1cm4gQml0
Q2FzdDx1aW50MzJfdD4oZik7IH0KLXN0YXRpYyBmbG9hdCB1aW50MzJfdG9fZmxvYXQodWludDMy
X3QgZDMyKSB7IHJldHVybiBCaXRDYXN0PGZsb2F0PihkMzIpOyB9Ci0KLS8vIEhlbHBlciBmdW5j
dGlvbnMgZm9yIGRvdWJsZXMuCi1jbGFzcyBEb3VibGUgewotIHB1YmxpYzoKLSAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IGtTaWduTWFzayA9IFVJTlQ2NF8yUEFSVF9DKDB4ODAwMDAwMDAsIDAwMDAw
MDAwKTsKLSAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtFeHBvbmVudE1hc2sgPSBVSU5UNjRfMlBB
UlRfQygweDdGRjAwMDAwLCAwMDAwMDAwMCk7Ci0gIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrU2ln
bmlmaWNhbmRNYXNrID0gVUlOVDY0XzJQQVJUX0MoMHgwMDBGRkZGRiwgRkZGRkZGRkYpOwotICBz
dGF0aWMgY29uc3QgdWludDY0X3Qga0hpZGRlbkJpdCA9IFVJTlQ2NF8yUEFSVF9DKDB4MDAxMDAw
MDAsIDAwMDAwMDAwKTsKLSAgc3RhdGljIGNvbnN0IGludCBrUGh5c2ljYWxTaWduaWZpY2FuZFNp
emUgPSA1MjsgIC8vIEV4Y2x1ZGVzIHRoZSBoaWRkZW4gYml0LgotICBzdGF0aWMgY29uc3QgaW50
IGtTaWduaWZpY2FuZFNpemUgPSA1MzsKLQotICBEb3VibGUoKSA6IGQ2NF8oMCkge30KLSAgZXhw
bGljaXQgRG91YmxlKGRvdWJsZSBkKSA6IGQ2NF8oZG91YmxlX3RvX3VpbnQ2NChkKSkge30KLSAg
ZXhwbGljaXQgRG91YmxlKHVpbnQ2NF90IGQ2NCkgOiBkNjRfKGQ2NCkge30KLSAgZXhwbGljaXQg
RG91YmxlKERpeUZwIGRpeV9mcCkKLSAgICA6IGQ2NF8oRGl5RnBUb1VpbnQ2NChkaXlfZnApKSB7
fQotCi0gIC8vIFRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91YmxlIG11c3QgYmUgZ3JlYXRl
ciBvciBlcXVhbCB0byArMC4wLgotICAvLyBJdCBtdXN0IG5vdCBiZSBzcGVjaWFsIChpbmZpbml0
eSwgb3IgTmFOKS4KLSAgRGl5RnAgQXNEaXlGcCgpIGNvbnN0IHsKLSAgICBBU1NFUlQoU2lnbigp
ID4gMCk7Ci0gICAgQVNTRVJUKCFJc1NwZWNpYWwoKSk7Ci0gICAgcmV0dXJuIERpeUZwKFNpZ25p
ZmljYW5kKCksIEV4cG9uZW50KCkpOwotICB9Ci0KLSAgLy8gVGhlIHZhbHVlIGVuY29kZWQgYnkg
dGhpcyBEb3VibGUgbXVzdCBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gMC4KLSAgRGl5RnAgQXNO
b3JtYWxpemVkRGl5RnAoKSBjb25zdCB7Ci0gICAgQVNTRVJUKHZhbHVlKCkgPiAwLjApOwotICAg
IHVpbnQ2NF90IGYgPSBTaWduaWZpY2FuZCgpOwotICAgIGludCBlID0gRXhwb25lbnQoKTsKLQot
ICAgIC8vIFRoZSBjdXJyZW50IGRvdWJsZSBjb3VsZCBiZSBhIGRlbm9ybWFsLgotICAgIHdoaWxl
ICgoZiAmIGtIaWRkZW5CaXQpID09IDApIHsKLSAgICAgIGYgPDw9IDE7Ci0gICAgICBlLS07Ci0g
ICAgfQotICAgIC8vIERvIHRoZSBmaW5hbCBzaGlmdHMgaW4gb25lIGdvLgotICAgIGYgPDw9IERp
eUZwOjprU2lnbmlmaWNhbmRTaXplIC0ga1NpZ25pZmljYW5kU2l6ZTsKLSAgICBlIC09IERpeUZw
OjprU2lnbmlmaWNhbmRTaXplIC0ga1NpZ25pZmljYW5kU2l6ZTsKLSAgICByZXR1cm4gRGl5RnAo
ZiwgZSk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBkb3VibGUncyBiaXQgYXMgdWludDY0Lgot
ICB1aW50NjRfdCBBc1VpbnQ2NCgpIGNvbnN0IHsKLSAgICByZXR1cm4gZDY0XzsKLSAgfQotCi0g
IC8vIFJldHVybnMgdGhlIG5leHQgZ3JlYXRlciBkb3VibGUuIFJldHVybnMgK2luZmluaXR5IG9u
IGlucHV0ICtpbmZpbml0eS4KLSAgZG91YmxlIE5leHREb3VibGUoKSBjb25zdCB7Ci0gICAgaWYg
KGQ2NF8gPT0ga0luZmluaXR5KSByZXR1cm4gRG91YmxlKGtJbmZpbml0eSkudmFsdWUoKTsKLSAg
ICBpZiAoU2lnbigpIDwgMCAmJiBTaWduaWZpY2FuZCgpID09IDApIHsKLSAgICAgIC8vIC0wLjAK
LSAgICAgIHJldHVybiAwLjA7Ci0gICAgfQotICAgIGlmIChTaWduKCkgPCAwKSB7Ci0gICAgICBy
ZXR1cm4gRG91YmxlKGQ2NF8gLSAxKS52YWx1ZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1
cm4gRG91YmxlKGQ2NF8gKyAxKS52YWx1ZSgpOwotICAgIH0KLSAgfQotCi0gIGRvdWJsZSBQcmV2
aW91c0RvdWJsZSgpIGNvbnN0IHsKLSAgICBpZiAoZDY0XyA9PSAoa0luZmluaXR5IHwga1NpZ25N
YXNrKSkgcmV0dXJuIC1JbmZpbml0eSgpOwotICAgIGlmIChTaWduKCkgPCAwKSB7Ci0gICAgICBy
ZXR1cm4gRG91YmxlKGQ2NF8gKyAxKS52YWx1ZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAo
U2lnbmlmaWNhbmQoKSA9PSAwKSByZXR1cm4gLTAuMDsKLSAgICAgIHJldHVybiBEb3VibGUoZDY0
XyAtIDEpLnZhbHVlKCk7Ci0gICAgfQotICB9Ci0KLSAgaW50IEV4cG9uZW50KCkgY29uc3Qgewot
ICAgIGlmIChJc0Rlbm9ybWFsKCkpIHJldHVybiBrRGVub3JtYWxFeHBvbmVudDsKLQotICAgIHVp
bnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7Ci0gICAgaW50IGJpYXNlZF9lID0KLSAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50PigoZDY0ICYga0V4cG9uZW50TWFzaykgPj4ga1BoeXNpY2FsU2lnbmlmaWNh
bmRTaXplKTsKLSAgICByZXR1cm4gYmlhc2VkX2UgLSBrRXhwb25lbnRCaWFzOwotICB9Ci0KLSAg
dWludDY0X3QgU2lnbmlmaWNhbmQoKSBjb25zdCB7Ci0gICAgdWludDY0X3QgZDY0ID0gQXNVaW50
NjQoKTsKLSAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IGQ2NCAmIGtTaWduaWZpY2FuZE1hc2s7
Ci0gICAgaWYgKCFJc0Rlbm9ybWFsKCkpIHsKLSAgICAgIHJldHVybiBzaWduaWZpY2FuZCArIGtI
aWRkZW5CaXQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBzaWduaWZpY2FuZDsKLSAgICB9
Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRvdWJsZSBpcyBhIGRlbm9ybWFsLgot
ICBib29sIElzRGVub3JtYWwoKSBjb25zdCB7Ci0gICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQo
KTsKLSAgICByZXR1cm4gKGQ2NCAmIGtFeHBvbmVudE1hc2spID09IDA7Ci0gIH0KLQotICAvLyBX
ZSBjb25zaWRlciBkZW5vcm1hbHMgbm90IHRvIGJlIHNwZWNpYWwuCi0gIC8vIEhlbmNlIG9ubHkg
SW5maW5pdHkgYW5kIE5hTiBhcmUgc3BlY2lhbC4KLSAgYm9vbCBJc1NwZWNpYWwoKSBjb25zdCB7
Ci0gICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsKLSAgICByZXR1cm4gKGQ2NCAmIGtFeHBv
bmVudE1hc2spID09IGtFeHBvbmVudE1hc2s7Ci0gIH0KLQotICBib29sIElzTmFuKCkgY29uc3Qg
ewotICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7Ci0gICAgcmV0dXJuICgoZDY0ICYga0V4
cG9uZW50TWFzaykgPT0ga0V4cG9uZW50TWFzaykgJiYKLSAgICAgICAgKChkNjQgJiBrU2lnbmlm
aWNhbmRNYXNrKSAhPSAwKTsKLSAgfQotCi0gIGJvb2wgSXNJbmZpbml0ZSgpIGNvbnN0IHsKLSAg
ICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgpOwotICAgIHJldHVybiAoKGQ2NCAmIGtFeHBvbmVu
dE1hc2spID09IGtFeHBvbmVudE1hc2spICYmCi0gICAgICAgICgoZDY0ICYga1NpZ25pZmljYW5k
TWFzaykgPT0gMCk7Ci0gIH0KLQotICBpbnQgU2lnbigpIGNvbnN0IHsKLSAgICB1aW50NjRfdCBk
NjQgPSBBc1VpbnQ2NCgpOwotICAgIHJldHVybiAoZDY0ICYga1NpZ25NYXNrKSA9PSAwPyAxOiAt
MTsKLSAgfQotCi0gIC8vIFByZWNvbmRpdGlvbjogdGhlIHZhbHVlIGVuY29kZWQgYnkgdGhpcyBE
b3VibGUgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsCi0gIC8vIHRoYW4gKzAuMC4KLSAgRGl5RnAg
VXBwZXJCb3VuZGFyeSgpIGNvbnN0IHsKLSAgICBBU1NFUlQoU2lnbigpID4gMCk7Ci0gICAgcmV0
dXJuIERpeUZwKFNpZ25pZmljYW5kKCkgKiAyICsgMSwgRXhwb25lbnQoKSAtIDEpOwotICB9Ci0K
LSAgLy8gQ29tcHV0ZXMgdGhlIHR3byBib3VuZGFyaWVzIG9mIHRoaXMuCi0gIC8vIFRoZSBiaWdn
ZXIgYm91bmRhcnkgKG1fcGx1cykgaXMgbm9ybWFsaXplZC4gVGhlIGxvd2VyIGJvdW5kYXJ5IGhh
cyB0aGUgc2FtZQotICAvLyBleHBvbmVudCBhcyBtX3BsdXMuCi0gIC8vIFByZWNvbmRpdGlvbjog
dGhlIHZhbHVlIGVuY29kZWQgYnkgdGhpcyBEb3VibGUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4K
LSAgdm9pZCBOb3JtYWxpemVkQm91bmRhcmllcyhEaXlGcCogb3V0X21fbWludXMsIERpeUZwKiBv
dXRfbV9wbHVzKSBjb25zdCB7Ci0gICAgQVNTRVJUKHZhbHVlKCkgPiAwLjApOwotICAgIERpeUZw
IHYgPSB0aGlzLT5Bc0RpeUZwKCk7Ci0gICAgRGl5RnAgbV9wbHVzID0gRGl5RnA6Ok5vcm1hbGl6
ZShEaXlGcCgodi5mKCkgPDwgMSkgKyAxLCB2LmUoKSAtIDEpKTsKLSAgICBEaXlGcCBtX21pbnVz
OwotICAgIGlmIChMb3dlckJvdW5kYXJ5SXNDbG9zZXIoKSkgewotICAgICAgbV9taW51cyA9IERp
eUZwKCh2LmYoKSA8PCAyKSAtIDEsIHYuZSgpIC0gMik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1f
bWludXMgPSBEaXlGcCgodi5mKCkgPDwgMSkgLSAxLCB2LmUoKSAtIDEpOwotICAgIH0KLSAgICBt
X21pbnVzLnNldF9mKG1fbWludXMuZigpIDw8IChtX21pbnVzLmUoKSAtIG1fcGx1cy5lKCkpKTsK
LSAgICBtX21pbnVzLnNldF9lKG1fcGx1cy5lKCkpOwotICAgICpvdXRfbV9wbHVzID0gbV9wbHVz
OwotICAgICpvdXRfbV9taW51cyA9IG1fbWludXM7Ci0gIH0KLQotICBib29sIExvd2VyQm91bmRh
cnlJc0Nsb3NlcigpIGNvbnN0IHsKLSAgICAvLyBUaGUgYm91bmRhcnkgaXMgY2xvc2VyIGlmIHRo
ZSBzaWduaWZpY2FuZCBpcyBvZiB0aGUgZm9ybSBmID09IDJecC0xIHRoZW4KLSAgICAvLyB0aGUg
bG93ZXIgYm91bmRhcnkgaXMgY2xvc2VyLgotICAgIC8vIFRoaW5rIG9mIHYgPSAxMDAwZTEwIGFu
ZCB2LSA9IDk5OTllOS4KLSAgICAvLyBUaGVuIHRoZSBib3VuZGFyeSAoPT0gKHYgLSB2LSkvMikg
aXMgbm90IGp1c3QgYXQgYSBkaXN0YW5jZSBvZiAxZTkgYnV0Ci0gICAgLy8gYXQgYSBkaXN0YW5j
ZSBvZiAxZTguCi0gICAgLy8gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGZvciB0aGUgc21hbGxlc3Qg
bm9ybWFsOiB0aGUgbGFyZ2VzdCBkZW5vcm1hbCBpcwotICAgIC8vIGF0IHRoZSBzYW1lIGRpc3Rh
bmNlIGFzIGl0cyBzdWNjZXNzb3IuCi0gICAgLy8gTm90ZTogZGVub3JtYWxzIGhhdmUgdGhlIHNh
bWUgZXhwb25lbnQgYXMgdGhlIHNtYWxsZXN0IG5vcm1hbHMuCi0gICAgYm9vbCBwaHlzaWNhbF9z
aWduaWZpY2FuZF9pc196ZXJvID0gKChBc1VpbnQ2NCgpICYga1NpZ25pZmljYW5kTWFzaykgPT0g
MCk7Ci0gICAgcmV0dXJuIHBoeXNpY2FsX3NpZ25pZmljYW5kX2lzX3plcm8gJiYgKEV4cG9uZW50
KCkgIT0ga0Rlbm9ybWFsRXhwb25lbnQpOwotICB9Ci0KLSAgZG91YmxlIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gdWludDY0X3RvX2RvdWJsZShkNjRfKTsgfQotCi0gIC8vIFJldHVybnMgdGhlIHNp
Z25pZmljYW5kIHNpemUgZm9yIGEgZ2l2ZW4gb3JkZXIgb2YgbWFnbml0dWRlLgotICAvLyBJZiB2
ID0gZioyXmUgd2l0aCAyXnAtMSA8PSBmIDw9IDJecCB0aGVuIHArZSBpcyB2J3Mgb3JkZXIgb2Yg
bWFnbml0dWRlLgotICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBzaWdu
aWZpY2FudCBiaW5hcnkgZGlnaXRzIHYgd2lsbCBoYXZlCi0gIC8vIG9uY2UgaXQncyBlbmNvZGVk
IGludG8gYSBkb3VibGUuIEluIGFsbW9zdCBhbGwgY2FzZXMgdGhpcyBpcyBlcXVhbCB0bwotICAv
LyBrU2lnbmlmaWNhbmRTaXplLiBUaGUgb25seSBleGNlcHRpb25zIGFyZSBkZW5vcm1hbHMuIFRo
ZXkgc3RhcnQgd2l0aAotICAvLyBsZWFkaW5nIHplcm9lcyBhbmQgdGhlaXIgZWZmZWN0aXZlIHNp
Z25pZmljYW5kLXNpemUgaXMgaGVuY2Ugc21hbGxlci4KLSAgc3RhdGljIGludCBTaWduaWZpY2Fu
ZFNpemVGb3JPcmRlck9mTWFnbml0dWRlKGludCBvcmRlcikgewotICAgIGlmIChvcmRlciA+PSAo
a0Rlbm9ybWFsRXhwb25lbnQgKyBrU2lnbmlmaWNhbmRTaXplKSkgewotICAgICAgcmV0dXJuIGtT
aWduaWZpY2FuZFNpemU7Ci0gICAgfQotICAgIGlmIChvcmRlciA8PSBrRGVub3JtYWxFeHBvbmVu
dCkgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG9yZGVyIC0ga0Rlbm9ybWFsRXhwb25lbnQ7Ci0gIH0K
LQotICBzdGF0aWMgZG91YmxlIEluZmluaXR5KCkgewotICAgIHJldHVybiBEb3VibGUoa0luZmlu
aXR5KS52YWx1ZSgpOwotICB9Ci0KLSAgc3RhdGljIGRvdWJsZSBOYU4oKSB7Ci0gICAgcmV0dXJu
IERvdWJsZShrTmFOKS52YWx1ZSgpOwotICB9Ci0KLSBwcml2YXRlOgotICBzdGF0aWMgY29uc3Qg
aW50IGtFeHBvbmVudEJpYXMgPSAweDNGRiArIGtQaHlzaWNhbFNpZ25pZmljYW5kU2l6ZTsKLSAg
c3RhdGljIGNvbnN0IGludCBrRGVub3JtYWxFeHBvbmVudCA9IC1rRXhwb25lbnRCaWFzICsgMTsK
LSAgc3RhdGljIGNvbnN0IGludCBrTWF4RXhwb25lbnQgPSAweDdGRiAtIGtFeHBvbmVudEJpYXM7
Ci0gIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrSW5maW5pdHkgPSBVSU5UNjRfMlBBUlRfQygweDdG
RjAwMDAwLCAwMDAwMDAwMCk7Ci0gIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrTmFOID0gVUlOVDY0
XzJQQVJUX0MoMHg3RkY4MDAwMCwgMDAwMDAwMDApOwotCi0gIGNvbnN0IHVpbnQ2NF90IGQ2NF87
Ci0KLSAgc3RhdGljIHVpbnQ2NF90IERpeUZwVG9VaW50NjQoRGl5RnAgZGl5X2ZwKSB7Ci0gICAg
dWludDY0X3Qgc2lnbmlmaWNhbmQgPSBkaXlfZnAuZigpOwotICAgIGludCBleHBvbmVudCA9IGRp
eV9mcC5lKCk7Ci0gICAgd2hpbGUgKHNpZ25pZmljYW5kID4ga0hpZGRlbkJpdCArIGtTaWduaWZp
Y2FuZE1hc2spIHsKLSAgICAgIHNpZ25pZmljYW5kID4+PSAxOwotICAgICAgZXhwb25lbnQrKzsK
LSAgICB9Ci0gICAgaWYgKGV4cG9uZW50ID49IGtNYXhFeHBvbmVudCkgewotICAgICAgcmV0dXJu
IGtJbmZpbml0eTsKLSAgICB9Ci0gICAgaWYgKGV4cG9uZW50IDwga0Rlbm9ybWFsRXhwb25lbnQp
IHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB3aGlsZSAoZXhwb25lbnQgPiBrRGVub3Jt
YWxFeHBvbmVudCAmJiAoc2lnbmlmaWNhbmQgJiBrSGlkZGVuQml0KSA9PSAwKSB7Ci0gICAgICBz
aWduaWZpY2FuZCA8PD0gMTsKLSAgICAgIGV4cG9uZW50LS07Ci0gICAgfQotICAgIHVpbnQ2NF90
IGJpYXNlZF9leHBvbmVudDsKLSAgICBpZiAoZXhwb25lbnQgPT0ga0Rlbm9ybWFsRXhwb25lbnQg
JiYgKHNpZ25pZmljYW5kICYga0hpZGRlbkJpdCkgPT0gMCkgewotICAgICAgYmlhc2VkX2V4cG9u
ZW50ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgYmlhc2VkX2V4cG9uZW50ID0gc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGV4cG9uZW50ICsga0V4cG9uZW50Qmlhcyk7Ci0gICAgfQotICAgIHJldHVy
biAoc2lnbmlmaWNhbmQgJiBrU2lnbmlmaWNhbmRNYXNrKSB8Ci0gICAgICAgIChiaWFzZWRfZXhw
b25lbnQgPDwga1BoeXNpY2FsU2lnbmlmaWNhbmRTaXplKTsKLSAgfQotCi0gIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihEb3VibGUpOwotfTsKLQotY2xhc3MgU2luZ2xlIHsKLSBwdWJsaWM6Ci0g
IHN0YXRpYyBjb25zdCB1aW50MzJfdCBrU2lnbk1hc2sgPSAweDgwMDAwMDAwOwotICBzdGF0aWMg
Y29uc3QgdWludDMyX3Qga0V4cG9uZW50TWFzayA9IDB4N0Y4MDAwMDA7Ci0gIHN0YXRpYyBjb25z
dCB1aW50MzJfdCBrU2lnbmlmaWNhbmRNYXNrID0gMHgwMDdGRkZGRjsKLSAgc3RhdGljIGNvbnN0
IHVpbnQzMl90IGtIaWRkZW5CaXQgPSAweDAwODAwMDAwOwotICBzdGF0aWMgY29uc3QgaW50IGtQ
aHlzaWNhbFNpZ25pZmljYW5kU2l6ZSA9IDIzOyAgLy8gRXhjbHVkZXMgdGhlIGhpZGRlbiBiaXQu
Ci0gIHN0YXRpYyBjb25zdCBpbnQga1NpZ25pZmljYW5kU2l6ZSA9IDI0OwotCi0gIFNpbmdsZSgp
IDogZDMyXygwKSB7fQotICBleHBsaWNpdCBTaW5nbGUoZmxvYXQgZikgOiBkMzJfKGZsb2F0X3Rv
X3VpbnQzMihmKSkge30KLSAgZXhwbGljaXQgU2luZ2xlKHVpbnQzMl90IGQzMikgOiBkMzJfKGQz
Mikge30KLQotICAvLyBUaGUgdmFsdWUgZW5jb2RlZCBieSB0aGlzIFNpbmdsZSBtdXN0IGJlIGdy
ZWF0ZXIgb3IgZXF1YWwgdG8gKzAuMC4KLSAgLy8gSXQgbXVzdCBub3QgYmUgc3BlY2lhbCAoaW5m
aW5pdHksIG9yIE5hTikuCi0gIERpeUZwIEFzRGl5RnAoKSBjb25zdCB7Ci0gICAgQVNTRVJUKFNp
Z24oKSA+IDApOwotICAgIEFTU0VSVCghSXNTcGVjaWFsKCkpOwotICAgIHJldHVybiBEaXlGcChT
aWduaWZpY2FuZCgpLCBFeHBvbmVudCgpKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhlIHNpbmds
ZSdzIGJpdCBhcyB1aW50NjQuCi0gIHVpbnQzMl90IEFzVWludDMyKCkgY29uc3QgewotICAgIHJl
dHVybiBkMzJfOwotICB9Ci0KLSAgaW50IEV4cG9uZW50KCkgY29uc3QgewotICAgIGlmIChJc0Rl
bm9ybWFsKCkpIHJldHVybiBrRGVub3JtYWxFeHBvbmVudDsKLQotICAgIHVpbnQzMl90IGQzMiA9
IEFzVWludDMyKCk7Ci0gICAgaW50IGJpYXNlZF9lID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50
PigoZDMyICYga0V4cG9uZW50TWFzaykgPj4ga1BoeXNpY2FsU2lnbmlmaWNhbmRTaXplKTsKLSAg
ICByZXR1cm4gYmlhc2VkX2UgLSBrRXhwb25lbnRCaWFzOwotICB9Ci0KLSAgdWludDMyX3QgU2ln
bmlmaWNhbmQoKSBjb25zdCB7Ci0gICAgdWludDMyX3QgZDMyID0gQXNVaW50MzIoKTsKLSAgICB1
aW50MzJfdCBzaWduaWZpY2FuZCA9IGQzMiAmIGtTaWduaWZpY2FuZE1hc2s7Ci0gICAgaWYgKCFJ
c0Rlbm9ybWFsKCkpIHsKLSAgICAgIHJldHVybiBzaWduaWZpY2FuZCArIGtIaWRkZW5CaXQ7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBzaWduaWZpY2FuZDsKLSAgICB9Ci0gIH0KLQotICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHNpbmdsZSBpcyBhIGRlbm9ybWFsLgotICBib29sIElzRGVu
b3JtYWwoKSBjb25zdCB7Ci0gICAgdWludDMyX3QgZDMyID0gQXNVaW50MzIoKTsKLSAgICByZXR1
cm4gKGQzMiAmIGtFeHBvbmVudE1hc2spID09IDA7Ci0gIH0KLQotICAvLyBXZSBjb25zaWRlciBk
ZW5vcm1hbHMgbm90IHRvIGJlIHNwZWNpYWwuCi0gIC8vIEhlbmNlIG9ubHkgSW5maW5pdHkgYW5k
IE5hTiBhcmUgc3BlY2lhbC4KLSAgYm9vbCBJc1NwZWNpYWwoKSBjb25zdCB7Ci0gICAgdWludDMy
X3QgZDMyID0gQXNVaW50MzIoKTsKLSAgICByZXR1cm4gKGQzMiAmIGtFeHBvbmVudE1hc2spID09
IGtFeHBvbmVudE1hc2s7Ci0gIH0KLQotICBib29sIElzTmFuKCkgY29uc3QgewotICAgIHVpbnQz
Ml90IGQzMiA9IEFzVWludDMyKCk7Ci0gICAgcmV0dXJuICgoZDMyICYga0V4cG9uZW50TWFzaykg
PT0ga0V4cG9uZW50TWFzaykgJiYKLSAgICAgICAgKChkMzIgJiBrU2lnbmlmaWNhbmRNYXNrKSAh
PSAwKTsKLSAgfQotCi0gIGJvb2wgSXNJbmZpbml0ZSgpIGNvbnN0IHsKLSAgICB1aW50MzJfdCBk
MzIgPSBBc1VpbnQzMigpOwotICAgIHJldHVybiAoKGQzMiAmIGtFeHBvbmVudE1hc2spID09IGtF
eHBvbmVudE1hc2spICYmCi0gICAgICAgICgoZDMyICYga1NpZ25pZmljYW5kTWFzaykgPT0gMCk7
Ci0gIH0KLQotICBpbnQgU2lnbigpIGNvbnN0IHsKLSAgICB1aW50MzJfdCBkMzIgPSBBc1VpbnQz
MigpOwotICAgIHJldHVybiAoZDMyICYga1NpZ25NYXNrKSA9PSAwPyAxOiAtMTsKLSAgfQotCi0g
IC8vIENvbXB1dGVzIHRoZSB0d28gYm91bmRhcmllcyBvZiB0aGlzLgotICAvLyBUaGUgYmlnZ2Vy
IGJvdW5kYXJ5IChtX3BsdXMpIGlzIG5vcm1hbGl6ZWQuIFRoZSBsb3dlciBib3VuZGFyeSBoYXMg
dGhlIHNhbWUKLSAgLy8gZXhwb25lbnQgYXMgbV9wbHVzLgotICAvLyBQcmVjb25kaXRpb246IHRo
ZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgU2luZ2xlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCi0g
IHZvaWQgTm9ybWFsaXplZEJvdW5kYXJpZXMoRGl5RnAqIG91dF9tX21pbnVzLCBEaXlGcCogb3V0
X21fcGx1cykgY29uc3QgewotICAgIEFTU0VSVCh2YWx1ZSgpID4gMC4wKTsKLSAgICBEaXlGcCB2
ID0gdGhpcy0+QXNEaXlGcCgpOwotICAgIERpeUZwIG1fcGx1cyA9IERpeUZwOjpOb3JtYWxpemUo
RGl5RnAoKHYuZigpIDw8IDEpICsgMSwgdi5lKCkgLSAxKSk7Ci0gICAgRGl5RnAgbV9taW51czsK
LSAgICBpZiAoTG93ZXJCb3VuZGFyeUlzQ2xvc2VyKCkpIHsKLSAgICAgIG1fbWludXMgPSBEaXlG
cCgodi5mKCkgPDwgMikgLSAxLCB2LmUoKSAtIDIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBtX21p
bnVzID0gRGl5RnAoKHYuZigpIDw8IDEpIC0gMSwgdi5lKCkgLSAxKTsKLSAgICB9Ci0gICAgbV9t
aW51cy5zZXRfZihtX21pbnVzLmYoKSA8PCAobV9taW51cy5lKCkgLSBtX3BsdXMuZSgpKSk7Ci0g
ICAgbV9taW51cy5zZXRfZShtX3BsdXMuZSgpKTsKLSAgICAqb3V0X21fcGx1cyA9IG1fcGx1czsK
LSAgICAqb3V0X21fbWludXMgPSBtX21pbnVzOwotICB9Ci0KLSAgLy8gUHJlY29uZGl0aW9uOiB0
aGUgdmFsdWUgZW5jb2RlZCBieSB0aGlzIFNpbmdsZSBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwK
LSAgLy8gdGhhbiArMC4wLgotICBEaXlGcCBVcHBlckJvdW5kYXJ5KCkgY29uc3QgewotICAgIEFT
U0VSVChTaWduKCkgPiAwKTsKLSAgICByZXR1cm4gRGl5RnAoU2lnbmlmaWNhbmQoKSAqIDIgKyAx
LCBFeHBvbmVudCgpIC0gMSk7Ci0gIH0KLQotICBib29sIExvd2VyQm91bmRhcnlJc0Nsb3Nlcigp
IGNvbnN0IHsKLSAgICAvLyBUaGUgYm91bmRhcnkgaXMgY2xvc2VyIGlmIHRoZSBzaWduaWZpY2Fu
ZCBpcyBvZiB0aGUgZm9ybSBmID09IDJecC0xIHRoZW4KLSAgICAvLyB0aGUgbG93ZXIgYm91bmRh
cnkgaXMgY2xvc2VyLgotICAgIC8vIFRoaW5rIG9mIHYgPSAxMDAwZTEwIGFuZCB2LSA9IDk5OTll
OS4KLSAgICAvLyBUaGVuIHRoZSBib3VuZGFyeSAoPT0gKHYgLSB2LSkvMikgaXMgbm90IGp1c3Qg
YXQgYSBkaXN0YW5jZSBvZiAxZTkgYnV0Ci0gICAgLy8gYXQgYSBkaXN0YW5jZSBvZiAxZTguCi0g
ICAgLy8gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGZvciB0aGUgc21hbGxlc3Qgbm9ybWFsOiB0aGUg
bGFyZ2VzdCBkZW5vcm1hbCBpcwotICAgIC8vIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGFzIGl0cyBz
dWNjZXNzb3IuCi0gICAgLy8gTm90ZTogZGVub3JtYWxzIGhhdmUgdGhlIHNhbWUgZXhwb25lbnQg
YXMgdGhlIHNtYWxsZXN0IG5vcm1hbHMuCi0gICAgYm9vbCBwaHlzaWNhbF9zaWduaWZpY2FuZF9p
c196ZXJvID0gKChBc1VpbnQzMigpICYga1NpZ25pZmljYW5kTWFzaykgPT0gMCk7Ci0gICAgcmV0
dXJuIHBoeXNpY2FsX3NpZ25pZmljYW5kX2lzX3plcm8gJiYgKEV4cG9uZW50KCkgIT0ga0Rlbm9y
bWFsRXhwb25lbnQpOwotICB9Ci0KLSAgZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVybiB1aW50
MzJfdG9fZmxvYXQoZDMyXyk7IH0KLQotICBzdGF0aWMgZmxvYXQgSW5maW5pdHkoKSB7Ci0gICAg
cmV0dXJuIFNpbmdsZShrSW5maW5pdHkpLnZhbHVlKCk7Ci0gIH0KLQotICBzdGF0aWMgZmxvYXQg
TmFOKCkgewotICAgIHJldHVybiBTaW5nbGUoa05hTikudmFsdWUoKTsKLSAgfQotCi0gcHJpdmF0
ZToKLSAgc3RhdGljIGNvbnN0IGludCBrRXhwb25lbnRCaWFzID0gMHg3RiArIGtQaHlzaWNhbFNp
Z25pZmljYW5kU2l6ZTsKLSAgc3RhdGljIGNvbnN0IGludCBrRGVub3JtYWxFeHBvbmVudCA9IC1r
RXhwb25lbnRCaWFzICsgMTsKLSAgc3RhdGljIGNvbnN0IGludCBrTWF4RXhwb25lbnQgPSAweEZG
IC0ga0V4cG9uZW50QmlhczsKLSAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtJbmZpbml0eSA9IDB4
N0Y4MDAwMDA7Ci0gIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrTmFOID0gMHg3RkMwMDAwMDsKLQot
ICBjb25zdCB1aW50MzJfdCBkMzJfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaW5n
bGUpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCi0KLSNlbmRpZiAg
Ly8gRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0hfCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lv
bi9zdHJ0b2QuY2MgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9kb3VibGUt
Y29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi9zdHJ0b2QuY2MKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDE3YWJjYmIyYTU1N2I1ZTE5NzNiNjU1YTk0NzEwMDgzNDliOGFjYmYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNp
b24vc3RydG9kLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNTU1ICswLDAgQEAKLS8vIENvcHlyaWdo
dCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vICAgICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotLy8g
ICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gICAgICAgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0vLyAg
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPGxpbWl0cy5o
PgotCi0jaW5jbHVkZSAic3RydG9kLmgiCi0jaW5jbHVkZSAiYmlnbnVtLmgiCi0jaW5jbHVkZSAi
Y2FjaGVkLXBvd2Vycy5oIgotI2luY2x1ZGUgImllZWUuaCIKLQotbmFtZXNwYWNlIGRvdWJsZV9j
b252ZXJzaW9uIHsKLQotLy8gMl41MyA9IDkwMDcxOTkyNTQ3NDA5OTIuCi0vLyBBbnkgaW50ZWdl
ciB3aXRoIGF0IG1vc3QgMTUgZGVjaW1hbCBkaWdpdHMgd2lsbCBoZW5jZSBmaXQgaW50byBhIGRv
dWJsZQotLy8gKHdoaWNoIGhhcyBhIDUzYml0IHNpZ25pZmljYW5kKSB3aXRob3V0IGxvc3Mgb2Yg
cHJlY2lzaW9uLgotc3RhdGljIGNvbnN0IGludCBrTWF4RXhhY3REb3VibGVJbnRlZ2VyRGVjaW1h
bERpZ2l0cyA9IDE1OwotLy8gMl42NCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE2ID4gMTBeMTkKLXN0
YXRpYyBjb25zdCBpbnQga01heFVpbnQ2NERlY2ltYWxEaWdpdHMgPSAxOTsKLQotLy8gTWF4IGRv
dWJsZTogMS43OTc2OTMxMzQ4NjIzMTU3IHggMTBeMzA4Ci0vLyBNaW4gbm9uLXplcm8gZG91Ymxl
OiA0Ljk0MDY1NjQ1ODQxMjQ2NTQgeCAxMF4tMzI0Ci0vLyBBbnkgeCA+PSAxMF4zMDkgaXMgaW50
ZXJwcmV0ZWQgYXMgK2luZmluaXR5LgotLy8gQW55IHggPD0gMTBeLTMyNCBpcyBpbnRlcnByZXRl
ZCBhcyAwLgotLy8gTm90ZSB0aGF0IDIuNWUtMzI0IChkZXNwaXRlIGJlaW5nIHNtYWxsZXIgdGhh
biB0aGUgbWluIGRvdWJsZSkgd2lsbCBiZSByZWFkCi0vLyBhcyBub24temVybyAoZXF1YWwgdG8g
dGhlIG1pbiBub24temVybyBkb3VibGUpLgotc3RhdGljIGNvbnN0IGludCBrTWF4RGVjaW1hbFBv
d2VyID0gMzA5Owotc3RhdGljIGNvbnN0IGludCBrTWluRGVjaW1hbFBvd2VyID0gLTMyNDsKLQot
Ly8gMl42NCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE2Ci1zdGF0aWMgY29uc3QgdWludDY0X3Qga01h
eFVpbnQ2NCA9IFVJTlQ2NF8yUEFSVF9DKDB4RkZGRkZGRkYsIEZGRkZGRkZGKTsKLQotCi1zdGF0
aWMgY29uc3QgZG91YmxlIGV4YWN0X3Bvd2Vyc19vZl90ZW5bXSA9IHsKLSAgMS4wLCAgLy8gMTBe
MAotICAxMC4wLAotICAxMDAuMCwKLSAgMTAwMC4wLAotICAxMDAwMC4wLAotICAxMDAwMDAuMCwK
LSAgMTAwMDAwMC4wLAotICAxMDAwMDAwMC4wLAotICAxMDAwMDAwMDAuMCwKLSAgMTAwMDAwMDAw
MC4wLAotICAxMDAwMDAwMDAwMC4wLCAgLy8gMTBeMTAKLSAgMTAwMDAwMDAwMDAwLjAsCi0gIDEw
MDAwMDAwMDAwMDAuMCwKLSAgMTAwMDAwMDAwMDAwMDAuMCwKLSAgMTAwMDAwMDAwMDAwMDAwLjAs
Ci0gIDEwMDAwMDAwMDAwMDAwMDAuMCwKLSAgMTAwMDAwMDAwMDAwMDAwMDAuMCwKLSAgMTAwMDAw
MDAwMDAwMDAwMDAwLjAsCi0gIDEwMDAwMDAwMDAwMDAwMDAwMDAuMCwKLSAgMTAwMDAwMDAwMDAw
MDAwMDAwMDAuMCwKLSAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwLjAsICAvLyAxMF4yMAotICAxMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLjAsCi0gIC8vIDEwXjIyID0gMHgyMWUxOWUwYzliYWIyNDAwMDAw
ID0gMHg4Nzg2NzgzMjZlYWM5ICogMl4yMgotICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wCi19
Owotc3RhdGljIGNvbnN0IGludCBrRXhhY3RQb3dlcnNPZlRlblNpemUgPSBBUlJBWV9TSVpFKGV4
YWN0X3Bvd2Vyc19vZl90ZW4pOwotCi0vLyBNYXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBk
aWdpdHMgaW4gdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24uCi0vLyBJbiBmYWN0IHRoZSB2YWx1
ZSBpcyA3NzIgKHNlZSBjb252ZXJzaW9ucy5jYyksIGJ1dCB0byBnaXZlIHVzIHNvbWUgbWFyZ2lu
Ci0vLyB3ZSByb3VuZCB1cCB0byA3ODAuCi1zdGF0aWMgY29uc3QgaW50IGtNYXhTaWduaWZpY2Fu
dERlY2ltYWxEaWdpdHMgPSA3ODA7Ci0KLXN0YXRpYyBWZWN0b3I8Y29uc3QgY2hhcj4gVHJpbUxl
YWRpbmdaZXJvcyhWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyKSB7Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDwgYnVmZmVyLmxlbmd0aCgpOyBpKyspIHsKLSAgICBpZiAoYnVmZmVyW2ldICE9ICcwJykg
ewotICAgICAgcmV0dXJuIGJ1ZmZlci5TdWJWZWN0b3IoaSwgYnVmZmVyLmxlbmd0aCgpKTsKLSAg
ICB9Ci0gIH0KLSAgcmV0dXJuIFZlY3Rvcjxjb25zdCBjaGFyPihidWZmZXIuc3RhcnQoKSwgMCk7
Ci19Ci0KLQotc3RhdGljIFZlY3Rvcjxjb25zdCBjaGFyPiBUcmltVHJhaWxpbmdaZXJvcyhWZWN0
b3I8Y29uc3QgY2hhcj4gYnVmZmVyKSB7Ci0gIGZvciAoaW50IGkgPSBidWZmZXIubGVuZ3RoKCkg
LSAxOyBpID49IDA7IC0taSkgewotICAgIGlmIChidWZmZXJbaV0gIT0gJzAnKSB7Ci0gICAgICBy
ZXR1cm4gYnVmZmVyLlN1YlZlY3RvcigwLCBpICsgMSk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBW
ZWN0b3I8Y29uc3QgY2hhcj4oYnVmZmVyLnN0YXJ0KCksIDApOwotfQotCi0KLXN0YXRpYyB2b2lk
IEN1dFRvTWF4U2lnbmlmaWNhbnREaWdpdHMoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIHNpZ25pZmljYW50X2J1ZmZl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogc2lnbmlmaWNh
bnRfZXhwb25lbnQpIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4U2lnbmlmaWNhbnREZWNp
bWFsRGlnaXRzIC0gMTsgKytpKSB7Ci0gICAgc2lnbmlmaWNhbnRfYnVmZmVyW2ldID0gYnVmZmVy
W2ldOwotICB9Ci0gIC8vIFRoZSBpbnB1dCBidWZmZXIgaGFzIGJlZW4gdHJpbW1lZC4gVGhlcmVm
b3JlIHRoZSBsYXN0IGRpZ2l0IG11c3QgYmUKLSAgLy8gZGlmZmVyZW50IGZyb20gJzAnLgotICBB
U1NFUlQoYnVmZmVyW2J1ZmZlci5sZW5ndGgoKSAtIDFdICE9ICcwJyk7Ci0gIC8vIFNldCB0aGUg
bGFzdCBkaWdpdCB0byBiZSBub24temVyby4gVGhpcyBpcyBzdWZmaWNpZW50IHRvIGd1YXJhbnRl
ZQotICAvLyBjb3JyZWN0IHJvdW5kaW5nLgotICBzaWduaWZpY2FudF9idWZmZXJba01heFNpZ25p
ZmljYW50RGVjaW1hbERpZ2l0cyAtIDFdID0gJzEnOwotICAqc2lnbmlmaWNhbnRfZXhwb25lbnQg
PQotICAgICAgZXhwb25lbnQgKyAoYnVmZmVyLmxlbmd0aCgpIC0ga01heFNpZ25pZmljYW50RGVj
aW1hbERpZ2l0cyk7Ci19Ci0KLQotLy8gVHJpbXMgdGhlIGJ1ZmZlciBhbmQgY3V0cyBpdCB0byBh
dCBtb3N0IGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMuCi0vLyBJZiBwb3NzaWJsZSB0aGUg
aW5wdXQtYnVmZmVyIGlzIHJldXNlZCwgYnV0IGlmIHRoZSBidWZmZXIgbmVlZHMgdG8gYmUKLS8v
IG1vZGlmaWVkIChkdWUgdG8gY3V0dGluZyksIHRoZW4gdGhlIGlucHV0IG5lZWRzIHRvIGJlIGNv
cGllZCBpbnRvIHRoZQotLy8gYnVmZmVyX2NvcHlfc3BhY2UuCi1zdGF0aWMgdm9pZCBUcmltQW5k
Q3V0KFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsIGludCBleHBvbmVudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciogYnVmZmVyX2NvcHlfc3BhY2UsIGludCBzcGFjZV9zaXplLAotICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y29uc3QgY2hhcj4qIHRyaW1tZWQsIGludCogdXBk
YXRlZF9leHBvbmVudCkgewotICBWZWN0b3I8Y29uc3QgY2hhcj4gbGVmdF90cmltbWVkID0gVHJp
bUxlYWRpbmdaZXJvcyhidWZmZXIpOwotICBWZWN0b3I8Y29uc3QgY2hhcj4gcmlnaHRfdHJpbW1l
ZCA9IFRyaW1UcmFpbGluZ1plcm9zKGxlZnRfdHJpbW1lZCk7Ci0gIGV4cG9uZW50ICs9IGxlZnRf
dHJpbW1lZC5sZW5ndGgoKSAtIHJpZ2h0X3RyaW1tZWQubGVuZ3RoKCk7Ci0gIGlmIChyaWdodF90
cmltbWVkLmxlbmd0aCgpID4ga01heFNpZ25pZmljYW50RGVjaW1hbERpZ2l0cykgewotICAgICh2
b2lkKSBzcGFjZV9zaXplOyAgLy8gTWFyayB2YXJpYWJsZSBhcyB1c2VkLgotICAgIEFTU0VSVChz
cGFjZV9zaXplID49IGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMpOwotICAgIEN1dFRvTWF4
U2lnbmlmaWNhbnREaWdpdHMocmlnaHRfdHJpbW1lZCwgZXhwb25lbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBidWZmZXJfY29weV9zcGFjZSwgdXBkYXRlZF9leHBvbmVudCk7Ci0g
ICAgKnRyaW1tZWQgPSBWZWN0b3I8Y29uc3QgY2hhcj4oYnVmZmVyX2NvcHlfc3BhY2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWF4U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRz
KTsKLSAgfSBlbHNlIHsKLSAgICAqdHJpbW1lZCA9IHJpZ2h0X3RyaW1tZWQ7Ci0gICAgKnVwZGF0
ZWRfZXhwb25lbnQgPSBleHBvbmVudDsKLSAgfQotfQotCi0KLS8vIFJlYWRzIGRpZ2l0cyBmcm9t
IHRoZSBidWZmZXIgYW5kIGNvbnZlcnRzIHRoZW0gdG8gYSB1aW50NjQuCi0vLyBSZWFkcyBpbiBh
cyBtYW55IGRpZ2l0cyBhcyBmaXQgaW50byBhIHVpbnQ2NC4KLS8vIFdoZW4gdGhlIHN0cmluZyBz
dGFydHMgd2l0aCAiMTg0NDY3NDQwNzM3MDk1NTE2MSIgbm8gZnVydGhlciBkaWdpdCBpcyByZWFk
LgotLy8gU2luY2UgMl42NCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE2IGl0IHdvdWxkIHN0aWxsIGJl
IHBvc3NpYmxlIHJlYWQgYW5vdGhlcgotLy8gZGlnaXQgaWYgaXQgd2FzIGxlc3Mgb3IgZXF1YWwg
dGhhbiA2LCBidXQgdGhpcyB3b3VsZCBjb21wbGljYXRlIHRoZSBjb2RlLgotc3RhdGljIHVpbnQ2
NF90IFJlYWRVaW50NjQoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCogbnVtYmVyX29mX3JlYWRfZGlnaXRzKSB7Ci0gIHVpbnQ2NF90IHJl
c3VsdCA9IDA7Ci0gIGludCBpID0gMDsKLSAgd2hpbGUgKGkgPCBidWZmZXIubGVuZ3RoKCkgJiYg
cmVzdWx0IDw9IChrTWF4VWludDY0IC8gMTAgLSAxKSkgewotICAgIGludCBkaWdpdCA9IGJ1ZmZl
cltpKytdIC0gJzAnOwotICAgIEFTU0VSVCgwIDw9IGRpZ2l0ICYmIGRpZ2l0IDw9IDkpOwotICAg
IHJlc3VsdCA9IDEwICogcmVzdWx0ICsgZGlnaXQ7Ci0gIH0KLSAgKm51bWJlcl9vZl9yZWFkX2Rp
Z2l0cyA9IGk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotLy8gUmVhZHMgYSBEaXlGcCBmcm9t
IHRoZSBidWZmZXIuCi0vLyBUaGUgcmV0dXJuZWQgRGl5RnAgaXMgbm90IG5lY2Vzc2FyaWx5IG5v
cm1hbGl6ZWQuCi0vLyBJZiByZW1haW5pbmdfZGVjaW1hbHMgaXMgemVybyB0aGVuIHRoZSByZXR1
cm5lZCBEaXlGcCBpcyBhY2N1cmF0ZS4KLS8vIE90aGVyd2lzZSBpdCBoYXMgYmVlbiByb3VuZGVk
IGFuZCBoYXMgZXJyb3Igb2YgYXQgbW9zdCAxLzIgdWxwLgotc3RhdGljIHZvaWQgUmVhZERpeUZw
KFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgRGl5RnAq
IHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQqIHJlbWFpbmluZ19kZWNpbWFscykg
ewotICBpbnQgcmVhZF9kaWdpdHM7Ci0gIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gUmVhZFVpbnQ2
NChidWZmZXIsICZyZWFkX2RpZ2l0cyk7Ci0gIGlmIChidWZmZXIubGVuZ3RoKCkgPT0gcmVhZF9k
aWdpdHMpIHsKLSAgICAqcmVzdWx0ID0gRGl5RnAoc2lnbmlmaWNhbmQsIDApOwotICAgICpyZW1h
aW5pbmdfZGVjaW1hbHMgPSAwOwotICB9IGVsc2UgewotICAgIC8vIFJvdW5kIHRoZSBzaWduaWZp
Y2FuZC4KLSAgICBpZiAoYnVmZmVyW3JlYWRfZGlnaXRzXSA+PSAnNScpIHsKLSAgICAgIHNpZ25p
ZmljYW5kKys7Ci0gICAgfQotICAgIC8vIENvbXB1dGUgdGhlIGJpbmFyeSBleHBvbmVudC4KLSAg
ICBpbnQgZXhwb25lbnQgPSAwOwotICAgICpyZXN1bHQgPSBEaXlGcChzaWduaWZpY2FuZCwgZXhw
b25lbnQpOwotICAgICpyZW1haW5pbmdfZGVjaW1hbHMgPSBidWZmZXIubGVuZ3RoKCkgLSByZWFk
X2RpZ2l0czsKLSAgfQotfQotCi0KLXN0YXRpYyBib29sIERvdWJsZVN0cnRvZChWZWN0b3I8Y29u
c3QgY2hhcj4gdHJpbW1lZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwb25lbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlKiByZXN1bHQpIHsKLSNpZiAhZGVmaW5l
ZChET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TKQotICAvLyBPbiB4
ODYgdGhlIGZsb2F0aW5nLXBvaW50IHN0YWNrIGNhbiBiZSA2NCBvciA4MCBiaXRzIHdpZGUuIElm
IGl0IGlzCi0gIC8vIDgwIGJpdHMgd2lkZSAoYXMgaXMgdGhlIGNhc2Ugb24gTGludXgpIHRoZW4g
ZG91YmxlLXJvdW5kaW5nIG9jY3VycyBhbmQgdGhlCi0gIC8vIHJlc3VsdCBpcyBub3QgYWNjdXJh
dGUuCi0gIC8vIFdlIGtub3cgdGhhdCBXaW5kb3dzMzIgdXNlcyA2NCBiaXRzIGFuZCBpcyB0aGVy
ZWZvcmUgYWNjdXJhdGUuCi0gIC8vIE5vdGUgdGhhdCB0aGUgQVJNIHNpbXVsYXRvciBpcyBjb21w
aWxlZCBmb3IgMzJiaXRzLiBJdCB0aGVyZWZvcmUgZXhoaWJpdHMKLSAgLy8gdGhlIHNhbWUgcHJv
YmxlbS4KLSAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0gIGlmICh0cmltbWVkLmxlbmd0aCgpIDw9
IGtNYXhFeGFjdERvdWJsZUludGVnZXJEZWNpbWFsRGlnaXRzKSB7Ci0gICAgaW50IHJlYWRfZGln
aXRzOwotICAgIC8vIFRoZSB0cmltbWVkIGlucHV0IGZpdHMgaW50byBhIGRvdWJsZS4KLSAgICAv
LyBJZiB0aGUgMTBeZXhwb25lbnQgKHJlc3AuIDEwXi1leHBvbmVudCkgZml0cyBpbnRvIGEgZG91
YmxlIHRvbyB0aGVuIHdlCi0gICAgLy8gY2FuIGNvbXB1dGUgdGhlIHJlc3VsdC1kb3VibGUgc2lt
cGx5IGJ5IG11bHRpcGx5aW5nIChyZXNwLiBkaXZpZGluZykgdGhlCi0gICAgLy8gdHdvIG51bWJl
cnMuCi0gICAgLy8gVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIElFRUUgZ3VhcmFudGVlcyB0aGF0
IGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMKLSAgICAvLyByZXR1cm4gdGhlIGJlc3QgcG9zc2li
bGUgYXBwcm94aW1hdGlvbi4KLSAgICBpZiAoZXhwb25lbnQgPCAwICYmIC1leHBvbmVudCA8IGtF
eGFjdFBvd2Vyc09mVGVuU2l6ZSkgewotICAgICAgLy8gMTBeLWV4cG9uZW50IGZpdHMgaW50byBh
IGRvdWJsZS4KLSAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KFJlYWRVaW50NjQo
dHJpbW1lZCwgJnJlYWRfZGlnaXRzKSk7Ci0gICAgICBBU1NFUlQocmVhZF9kaWdpdHMgPT0gdHJp
bW1lZC5sZW5ndGgoKSk7Ci0gICAgICAqcmVzdWx0IC89IGV4YWN0X3Bvd2Vyc19vZl90ZW5bLWV4
cG9uZW50XTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoMCA8PSBleHBvbmVu
dCAmJiBleHBvbmVudCA8IGtFeGFjdFBvd2Vyc09mVGVuU2l6ZSkgewotICAgICAgLy8gMTBeZXhw
b25lbnQgZml0cyBpbnRvIGEgZG91YmxlLgotICAgICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0PGRv
dWJsZT4oUmVhZFVpbnQ2NCh0cmltbWVkLCAmcmVhZF9kaWdpdHMpKTsKLSAgICAgIEFTU0VSVChy
ZWFkX2RpZ2l0cyA9PSB0cmltbWVkLmxlbmd0aCgpKTsKLSAgICAgICpyZXN1bHQgKj0gZXhhY3Rf
cG93ZXJzX29mX3RlbltleHBvbmVudF07Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
aW50IHJlbWFpbmluZ19kaWdpdHMgPQotICAgICAgICBrTWF4RXhhY3REb3VibGVJbnRlZ2VyRGVj
aW1hbERpZ2l0cyAtIHRyaW1tZWQubGVuZ3RoKCk7Ci0gICAgaWYgKCgwIDw9IGV4cG9uZW50KSAm
JgotICAgICAgICAoZXhwb25lbnQgLSByZW1haW5pbmdfZGlnaXRzIDwga0V4YWN0UG93ZXJzT2ZU
ZW5TaXplKSkgewotICAgICAgLy8gVGhlIHRyaW1tZWQgc3RyaW5nIHdhcyBzaG9ydCBhbmQgd2Ug
Y2FuIG11bHRpcGx5IGl0IHdpdGgKLSAgICAgIC8vIDEwXnJlbWFpbmluZ19kaWdpdHMuIEFzIGEg
cmVzdWx0IHRoZSByZW1haW5pbmcgZXhwb25lbnQgbm93IGZpdHMKLSAgICAgIC8vIGludG8gYSBk
b3VibGUgdG9vLgotICAgICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oUmVhZFVpbnQ2
NCh0cmltbWVkLCAmcmVhZF9kaWdpdHMpKTsKLSAgICAgIEFTU0VSVChyZWFkX2RpZ2l0cyA9PSB0
cmltbWVkLmxlbmd0aCgpKTsKLSAgICAgICpyZXN1bHQgKj0gZXhhY3RfcG93ZXJzX29mX3Rlblty
ZW1haW5pbmdfZGlnaXRzXTsKLSAgICAgICpyZXN1bHQgKj0gZXhhY3RfcG93ZXJzX29mX3Rlbltl
eHBvbmVudCAtIHJlbWFpbmluZ19kaWdpdHNdOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotCi0vLyBSZXR1cm5zIDEwXmV4cG9uZW50IGFzIGFu
IGV4YWN0IERpeUZwLgotLy8gVGhlIGdpdmVuIGV4cG9uZW50IG11c3QgYmUgaW4gdGhlIHJhbmdl
IFsxOyBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2VbLgotc3RhdGljIERpeUZwIEFkanVzdG1lbnRQ
b3dlck9mVGVuKGludCBleHBvbmVudCkgewotICBBU1NFUlQoMCA8IGV4cG9uZW50KTsKLSAgQVNT
RVJUKGV4cG9uZW50IDwgUG93ZXJzT2ZUZW5DYWNoZTo6a0RlY2ltYWxFeHBvbmVudERpc3RhbmNl
KTsKLSAgLy8gU2ltcGx5IGhhcmRjb2RlIHRoZSByZW1haW5pbmcgcG93ZXJzIGZvciB0aGUgZ2l2
ZW4gZGVjaW1hbCBleHBvbmVudAotICAvLyBkaXN0YW5jZS4KLSAgQVNTRVJUKFBvd2Vyc09mVGVu
Q2FjaGU6OmtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSA9PSA4KTsKLSAgc3dpdGNoIChleHBvbmVu
dCkgewotICAgIGNhc2UgMTogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4YTAwMDAwMDAs
IDAwMDAwMDAwKSwgLTYwKTsKLSAgICBjYXNlIDI6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRf
QygweGM4MDAwMDAwLCAwMDAwMDAwMCksIC01Nyk7Ci0gICAgY2FzZSAzOiByZXR1cm4gRGl5RnAo
VUlOVDY0XzJQQVJUX0MoMHhmYTAwMDAwMCwgMDAwMDAwMDApLCAtNTQpOwotICAgIGNhc2UgNDog
cmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4OWM0MDAwMDAsIDAwMDAwMDAwKSwgLTUwKTsK
LSAgICBjYXNlIDU6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweGMzNTAwMDAwLCAwMDAw
MDAwMCksIC00Nyk7Ci0gICAgY2FzZSA2OiByZXR1cm4gRGl5RnAoVUlOVDY0XzJQQVJUX0MoMHhm
NDI0MDAwMCwgMDAwMDAwMDApLCAtNDQpOwotICAgIGNhc2UgNzogcmV0dXJuIERpeUZwKFVJTlQ2
NF8yUEFSVF9DKDB4OTg5NjgwMDAsIDAwMDAwMDAwKSwgLTQwKTsKLSAgICBkZWZhdWx0OgotICAg
ICAgVU5SRUFDSEFCTEUoKTsKLSAgfQotfQotCi0KLS8vIElmIHRoZSBmdW5jdGlvbiByZXR1cm5z
IHRydWUgdGhlbiB0aGUgcmVzdWx0IGlzIHRoZSBjb3JyZWN0IGRvdWJsZS4KLS8vIE90aGVyd2lz
ZSBpdCBpcyBlaXRoZXIgdGhlIGNvcnJlY3QgZG91YmxlIG9yIHRoZSBkb3VibGUgdGhhdCBpcyBq
dXN0IGJlbG93Ci0vLyB0aGUgY29ycmVjdCBkb3VibGUuCi1zdGF0aWMgYm9vbCBEaXlGcFN0cnRv
ZChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGV4cG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlKiByZXN1bHQpIHsKLSAg
RGl5RnAgaW5wdXQ7Ci0gIGludCByZW1haW5pbmdfZGVjaW1hbHM7Ci0gIFJlYWREaXlGcChidWZm
ZXIsICZpbnB1dCwgJnJlbWFpbmluZ19kZWNpbWFscyk7Ci0gIC8vIFNpbmNlIHdlIG1heSBoYXZl
IGRyb3BwZWQgc29tZSBkaWdpdHMgdGhlIGlucHV0IGlzIG5vdCBhY2N1cmF0ZS4KLSAgLy8gSWYg
cmVtYWluaW5nX2RlY2ltYWxzIGlzIGRpZmZlcmVudCB0aGFuIDAgdGhhbiB0aGUgZXJyb3IgaXMg
YXQgbW9zdAotICAvLyAuNSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLgotICAvLyBXZSBk
b24ndCB3YW50IHRvIGRlYWwgd2l0aCBmcmFjdGlvbnMgYW5kIHRoZXJlZm9yZSBrZWVwIGEgY29t
bW9uCi0gIC8vIGRlbm9taW5hdG9yLgotICBjb25zdCBpbnQga0Rlbm9taW5hdG9yTG9nID0gMzsK
LSAgY29uc3QgaW50IGtEZW5vbWluYXRvciA9IDEgPDwga0Rlbm9taW5hdG9yTG9nOwotICAvLyBN
b3ZlIHRoZSByZW1haW5pbmcgZGVjaW1hbHMgaW50byB0aGUgZXhwb25lbnQuCi0gIGV4cG9uZW50
ICs9IHJlbWFpbmluZ19kZWNpbWFsczsKLSAgdWludDY0X3QgZXJyb3IgPSAocmVtYWluaW5nX2Rl
Y2ltYWxzID09IDAgPyAwIDoga0Rlbm9taW5hdG9yIC8gMik7Ci0KLSAgaW50IG9sZF9lID0gaW5w
dXQuZSgpOwotICBpbnB1dC5Ob3JtYWxpemUoKTsKLSAgZXJyb3IgPDw9IG9sZF9lIC0gaW5wdXQu
ZSgpOwotCi0gIEFTU0VSVChleHBvbmVudCA8PSBQb3dlcnNPZlRlbkNhY2hlOjprTWF4RGVjaW1h
bEV4cG9uZW50KTsKLSAgaWYgKGV4cG9uZW50IDwgUG93ZXJzT2ZUZW5DYWNoZTo6a01pbkRlY2lt
YWxFeHBvbmVudCkgewotICAgICpyZXN1bHQgPSAwLjA7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0K
LSAgRGl5RnAgY2FjaGVkX3Bvd2VyOwotICBpbnQgY2FjaGVkX2RlY2ltYWxfZXhwb25lbnQ7Ci0g
IFBvd2Vyc09mVGVuQ2FjaGU6OkdldENhY2hlZFBvd2VyRm9yRGVjaW1hbEV4cG9uZW50KGV4cG9u
ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmY2FjaGVkX3Bvd2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmY2FjaGVkX2RlY2ltYWxfZXhwb25lbnQpOwotCi0gIGlmIChjYWNoZWRf
ZGVjaW1hbF9leHBvbmVudCAhPSBleHBvbmVudCkgewotICAgIGludCBhZGp1c3RtZW50X2V4cG9u
ZW50ID0gZXhwb25lbnQgLSBjYWNoZWRfZGVjaW1hbF9leHBvbmVudDsKLSAgICBEaXlGcCBhZGp1
c3RtZW50X3Bvd2VyID0gQWRqdXN0bWVudFBvd2VyT2ZUZW4oYWRqdXN0bWVudF9leHBvbmVudCk7
Ci0gICAgaW5wdXQuTXVsdGlwbHkoYWRqdXN0bWVudF9wb3dlcik7Ci0gICAgaWYgKGtNYXhVaW50
NjREZWNpbWFsRGlnaXRzIC0gYnVmZmVyLmxlbmd0aCgpID49IGFkanVzdG1lbnRfZXhwb25lbnQp
IHsKLSAgICAgIC8vIFRoZSBwcm9kdWN0IG9mIGlucHV0IHdpdGggdGhlIGFkanVzdG1lbnQgcG93
ZXIgZml0cyBpbnRvIGEgNjQgYml0Ci0gICAgICAvLyBpbnRlZ2VyLgotICAgICAgQVNTRVJUKERp
eUZwOjprU2lnbmlmaWNhbmRTaXplID09IDY0KTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gVGhl
IGFkanVzdG1lbnQgcG93ZXIgaXMgZXhhY3QuIFRoZXJlIGlzIGhlbmNlIG9ubHkgYW4gZXJyb3Ig
b2YgMC41LgotICAgICAgZXJyb3IgKz0ga0Rlbm9taW5hdG9yIC8gMjsKLSAgICB9Ci0gIH0KLQot
ICBpbnB1dC5NdWx0aXBseShjYWNoZWRfcG93ZXIpOwotICAvLyBUaGUgZXJyb3IgaW50cm9kdWNl
ZCBieSBhIG11bHRpcGxpY2F0aW9uIG9mIGEqYiBlcXVhbHMKLSAgLy8gICBlcnJvcl9hICsgZXJy
b3JfYiArIGVycm9yX2EqZXJyb3JfYi8yXjY0ICsgMC41Ci0gIC8vIFN1YnN0aXR1dGluZyBhIHdp
dGggJ2lucHV0JyBhbmQgYiB3aXRoICdjYWNoZWRfcG93ZXInIHdlIGhhdmUKLSAgLy8gICBlcnJv
cl9iID0gMC41ICAoYWxsIGNhY2hlZCBwb3dlcnMgaGF2ZSBhbiBlcnJvciBvZiBsZXNzIHRoYW4g
MC41IHVscCksCi0gIC8vICAgZXJyb3JfYWIgPSAwIG9yIDEgLyBrRGVub21pbmF0b3IgPiBlcnJv
cl9hKmVycm9yX2IvIDJeNjQKLSAgaW50IGVycm9yX2IgPSBrRGVub21pbmF0b3IgLyAyOwotICBp
bnQgZXJyb3JfYWIgPSAoZXJyb3IgPT0gMCA/IDAgOiAxKTsgIC8vIFdlIHJvdW5kIHVwIHRvIDEu
Ci0gIGludCBmaXhlZF9lcnJvciA9IGtEZW5vbWluYXRvciAvIDI7Ci0gIGVycm9yICs9IGVycm9y
X2IgKyBlcnJvcl9hYiArIGZpeGVkX2Vycm9yOwotCi0gIG9sZF9lID0gaW5wdXQuZSgpOwotICBp
bnB1dC5Ob3JtYWxpemUoKTsKLSAgZXJyb3IgPDw9IG9sZF9lIC0gaW5wdXQuZSgpOwotCi0gIC8v
IFNlZSBpZiB0aGUgZG91YmxlJ3Mgc2lnbmlmaWNhbmQgY2hhbmdlcyBpZiB3ZSBhZGQvc3VidHJh
Y3QgdGhlIGVycm9yLgotICBpbnQgb3JkZXJfb2ZfbWFnbml0dWRlID0gRGl5RnA6OmtTaWduaWZp
Y2FuZFNpemUgKyBpbnB1dC5lKCk7Ci0gIGludCBlZmZlY3RpdmVfc2lnbmlmaWNhbmRfc2l6ZSA9
Ci0gICAgICBEb3VibGU6OlNpZ25pZmljYW5kU2l6ZUZvck9yZGVyT2ZNYWduaXR1ZGUob3JkZXJf
b2ZfbWFnbml0dWRlKTsKLSAgaW50IHByZWNpc2lvbl9kaWdpdHNfY291bnQgPQotICAgICAgRGl5
RnA6OmtTaWduaWZpY2FuZFNpemUgLSBlZmZlY3RpdmVfc2lnbmlmaWNhbmRfc2l6ZTsKLSAgaWYg
KHByZWNpc2lvbl9kaWdpdHNfY291bnQgKyBrRGVub21pbmF0b3JMb2cgPj0gRGl5RnA6OmtTaWdu
aWZpY2FuZFNpemUpIHsKLSAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBmb3IgdmVyeSBzbWFs
bCBkZW5vcm1hbHMuIEluIHRoaXMgY2FzZSB0aGUKLSAgICAvLyBoYWxmLXdheSBtdWx0aXBsaWVk
IGJ5IHRoZSBkZW5vbWluYXRvciBleGNlZWRzIHRoZSByYW5nZSBvZiBhbiB1aW50NjQuCi0gICAg
Ly8gU2ltcGx5IHNoaWZ0IGV2ZXJ5dGhpbmcgdG8gdGhlIHJpZ2h0LgotICAgIGludCBzaGlmdF9h
bW91bnQgPSAocHJlY2lzaW9uX2RpZ2l0c19jb3VudCArIGtEZW5vbWluYXRvckxvZykgLQotICAg
ICAgICBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSArIDE7Ci0gICAgaW5wdXQuc2V0X2YoaW5wdXQu
ZigpID4+IHNoaWZ0X2Ftb3VudCk7Ci0gICAgaW5wdXQuc2V0X2UoaW5wdXQuZSgpICsgc2hpZnRf
YW1vdW50KTsKLSAgICAvLyBXZSBhZGQgMSBmb3IgdGhlIGxvc3QgcHJlY2lzaW9uIG9mIGVycm9y
LCBhbmQga0Rlbm9taW5hdG9yIGZvcgotICAgIC8vIHRoZSBsb3N0IHByZWNpc2lvbiBvZiBpbnB1
dC5mKCkuCi0gICAgZXJyb3IgPSAoZXJyb3IgPj4gc2hpZnRfYW1vdW50KSArIDEgKyBrRGVub21p
bmF0b3I7Ci0gICAgcHJlY2lzaW9uX2RpZ2l0c19jb3VudCAtPSBzaGlmdF9hbW91bnQ7Ci0gIH0K
LSAgLy8gV2UgdXNlIHVpbnQ2NF90cyBub3cuIFRoaXMgb25seSB3b3JrcyBpZiB0aGUgRGl5RnAg
dXNlcyB1aW50NjRfdHMgdG9vLgotICBBU1NFUlQoRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgPT0g
NjQpOwotICBBU1NFUlQocHJlY2lzaW9uX2RpZ2l0c19jb3VudCA8IDY0KTsKLSAgdWludDY0X3Qg
b25lNjQgPSAxOwotICB1aW50NjRfdCBwcmVjaXNpb25fYml0c19tYXNrID0gKG9uZTY0IDw8IHBy
ZWNpc2lvbl9kaWdpdHNfY291bnQpIC0gMTsKLSAgdWludDY0X3QgcHJlY2lzaW9uX2JpdHMgPSBp
bnB1dC5mKCkgJiBwcmVjaXNpb25fYml0c19tYXNrOwotICB1aW50NjRfdCBoYWxmX3dheSA9IG9u
ZTY0IDw8IChwcmVjaXNpb25fZGlnaXRzX2NvdW50IC0gMSk7Ci0gIHByZWNpc2lvbl9iaXRzICo9
IGtEZW5vbWluYXRvcjsKLSAgaGFsZl93YXkgKj0ga0Rlbm9taW5hdG9yOwotICBEaXlGcCByb3Vu
ZGVkX2lucHV0KGlucHV0LmYoKSA+PiBwcmVjaXNpb25fZGlnaXRzX2NvdW50LAotICAgICAgICAg
ICAgICAgICAgICAgIGlucHV0LmUoKSArIHByZWNpc2lvbl9kaWdpdHNfY291bnQpOwotICBpZiAo
cHJlY2lzaW9uX2JpdHMgPj0gaGFsZl93YXkgKyBlcnJvcikgewotICAgIHJvdW5kZWRfaW5wdXQu
c2V0X2Yocm91bmRlZF9pbnB1dC5mKCkgKyAxKTsKLSAgfQotICAvLyBJZiB0aGUgbGFzdF9iaXRz
IGFyZSB0b28gY2xvc2UgdG8gdGhlIGhhbGYtd2F5IGNhc2UgdGhhbiB3ZSBhcmUgdG9vCi0gIC8v
IGluYWNjdXJhdGUgYW5kIHJvdW5kIGRvd24uIEluIHRoaXMgY2FzZSB3ZSByZXR1cm4gZmFsc2Ug
c28gdGhhdCB3ZSBjYW4KLSAgLy8gZmFsbCBiYWNrIHRvIGEgbW9yZSBwcmVjaXNlIGFsZ29yaXRo
bS4KLQotICAqcmVzdWx0ID0gRG91YmxlKHJvdW5kZWRfaW5wdXQpLnZhbHVlKCk7Ci0gIGlmICho
YWxmX3dheSAtIGVycm9yIDwgcHJlY2lzaW9uX2JpdHMgJiYgcHJlY2lzaW9uX2JpdHMgPCBoYWxm
X3dheSArIGVycm9yKSB7Ci0gICAgLy8gVG9vIGltcHJlY2lzZS4gVGhlIGNhbGxlciB3aWxsIGhh
dmUgdG8gZmFsbCBiYWNrIHRvIGEgc2xvd2VyIHZlcnNpb24uCi0gICAgLy8gSG93ZXZlciB0aGUg
cmV0dXJuZWQgbnVtYmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgZWl0aGVyIHRoZSBjb3JyZWN0Ci0g
ICAgLy8gZG91YmxlLCBvciB0aGUgbmV4dC1sb3dlciBkb3VibGUuCi0gICAgcmV0dXJuIGZhbHNl
OwotICB9IGVsc2UgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19Ci0KLQotLy8gUmV0dXJucwot
Ly8gICAtIC0xIGlmIGJ1ZmZlcioxMF5leHBvbmVudCA8IGRpeV9mcC4KLS8vICAgLSAgMCBpZiBi
dWZmZXIqMTBeZXhwb25lbnQgPT0gZGl5X2ZwLgotLy8gICAtICsxIGlmIGJ1ZmZlcioxMF5leHBv
bmVudCA+IGRpeV9mcC4KLS8vIFByZWNvbmRpdGlvbnM6Ci0vLyAgIGJ1ZmZlci5sZW5ndGgoKSAr
IGV4cG9uZW50IDw9IGtNYXhEZWNpbWFsUG93ZXIgKyAxCi0vLyAgIGJ1ZmZlci5sZW5ndGgoKSAr
IGV4cG9uZW50ID4ga01pbkRlY2ltYWxQb3dlcgotLy8gICBidWZmZXIubGVuZ3RoKCkgPD0ga01h
eERlY2ltYWxTaWduaWZpY2FudERpZ2l0cwotc3RhdGljIGludCBDb21wYXJlQnVmZmVyV2l0aERp
eUZwKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGV4cG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERpeUZwIGRpeV9mcCkgewotICBBU1NFUlQoYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPD0g
a01heERlY2ltYWxQb3dlciArIDEpOwotICBBU1NFUlQoYnVmZmVyLmxlbmd0aCgpICsgZXhwb25l
bnQgPiBrTWluRGVjaW1hbFBvd2VyKTsKLSAgQVNTRVJUKGJ1ZmZlci5sZW5ndGgoKSA8PSBrTWF4
U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRzKTsKLSAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIEJpZ251
bSB3aWxsIGJlIGFibGUgdG8gaG9sZCBhbGwgb3VyIG51bWJlcnMuCi0gIC8vIE91ciBCaWdudW0g
aW1wbGVtZW50YXRpb24gaGFzIGEgc2VwYXJhdGUgZmllbGQgZm9yIGV4cG9uZW50cy4gU2hpZnRz
IHdpbGwKLSAgLy8gY29uc3VtZSBhdCBtb3N0IG9uZSBiaWdpdCAoPCA2NCBiaXRzKS4KLSAgLy8g
bG4oMTApID09IDMuMzIxOS4uLgotICBBU1NFUlQoKChrTWF4RGVjaW1hbFBvd2VyICsgMSkgKiAz
MzMgLyAxMDApIDwgQmlnbnVtOjprTWF4U2lnbmlmaWNhbnRCaXRzKTsKLSAgQmlnbnVtIGJ1ZmZl
cl9iaWdudW07Ci0gIEJpZ251bSBkaXlfZnBfYmlnbnVtOwotICBidWZmZXJfYmlnbnVtLkFzc2ln
bkRlY2ltYWxTdHJpbmcoYnVmZmVyKTsKLSAgZGl5X2ZwX2JpZ251bS5Bc3NpZ25VSW50NjQoZGl5
X2ZwLmYoKSk7Ci0gIGlmIChleHBvbmVudCA+PSAwKSB7Ci0gICAgYnVmZmVyX2JpZ251bS5NdWx0
aXBseUJ5UG93ZXJPZlRlbihleHBvbmVudCk7Ci0gIH0gZWxzZSB7Ci0gICAgZGl5X2ZwX2JpZ251
bS5NdWx0aXBseUJ5UG93ZXJPZlRlbigtZXhwb25lbnQpOwotICB9Ci0gIGlmIChkaXlfZnAuZSgp
ID4gMCkgewotICAgIGRpeV9mcF9iaWdudW0uU2hpZnRMZWZ0KGRpeV9mcC5lKCkpOwotICB9IGVs
c2UgewotICAgIGJ1ZmZlcl9iaWdudW0uU2hpZnRMZWZ0KC1kaXlfZnAuZSgpKTsKLSAgfQotICBy
ZXR1cm4gQmlnbnVtOjpDb21wYXJlKGJ1ZmZlcl9iaWdudW0sIGRpeV9mcF9iaWdudW0pOwotfQot
Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ3Vlc3MgaXMgdGhlIGNvcnJlY3QgZG91YmxlLgot
Ly8gUmV0dXJucyBmYWxzZSwgd2hlbiBndWVzcyBpcyBlaXRoZXIgY29ycmVjdCBvciB0aGUgbmV4
dC1sb3dlciBkb3VibGUuCi1zdGF0aWMgYm9vbCBDb21wdXRlR3Vlc3MoVmVjdG9yPGNvbnN0IGNo
YXI+IHRyaW1tZWQsIGludCBleHBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUqIGd1ZXNzKSB7Ci0gIGlmICh0cmltbWVkLmxlbmd0aCgpID09IDApIHsKLSAgICAqZ3Vlc3Mg
PSAwLjA7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgaWYgKGV4cG9uZW50ICsgdHJpbW1lZC5s
ZW5ndGgoKSAtIDEgPj0ga01heERlY2ltYWxQb3dlcikgewotICAgICpndWVzcyA9IERvdWJsZTo6
SW5maW5pdHkoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBpZiAoZXhwb25lbnQgKyB0cmlt
bWVkLmxlbmd0aCgpIDw9IGtNaW5EZWNpbWFsUG93ZXIpIHsKLSAgICAqZ3Vlc3MgPSAwLjA7Ci0g
ICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBpZiAoRG91YmxlU3RydG9kKHRyaW1tZWQsIGV4cG9u
ZW50LCBndWVzcykgfHwKLSAgICAgIERpeUZwU3RydG9kKHRyaW1tZWQsIGV4cG9uZW50LCBndWVz
cykpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBpZiAoKmd1ZXNzID09IERvdWJsZTo6SW5m
aW5pdHkoKSkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQot
ZG91YmxlIFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLCBpbnQgZXhwb25lbnQpIHsK
LSAgY2hhciBjb3B5X2J1ZmZlcltrTWF4U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRzXTsKLSAgVmVj
dG9yPGNvbnN0IGNoYXI+IHRyaW1tZWQ7Ci0gIGludCB1cGRhdGVkX2V4cG9uZW50OwotICBUcmlt
QW5kQ3V0KGJ1ZmZlciwgZXhwb25lbnQsIGNvcHlfYnVmZmVyLCBrTWF4U2lnbmlmaWNhbnREZWNp
bWFsRGlnaXRzLAotICAgICAgICAgICAgICZ0cmltbWVkLCAmdXBkYXRlZF9leHBvbmVudCk7Ci0g
IGV4cG9uZW50ID0gdXBkYXRlZF9leHBvbmVudDsKLQotICBkb3VibGUgZ3Vlc3M7Ci0gIGJvb2wg
aXNfY29ycmVjdCA9IENvbXB1dGVHdWVzcyh0cmltbWVkLCBleHBvbmVudCwgJmd1ZXNzKTsKLSAg
aWYgKGlzX2NvcnJlY3QpIHJldHVybiBndWVzczsKLQotICBEaXlGcCB1cHBlcl9ib3VuZGFyeSA9
IERvdWJsZShndWVzcykuVXBwZXJCb3VuZGFyeSgpOwotICBpbnQgY29tcGFyaXNvbiA9IENvbXBh
cmVCdWZmZXJXaXRoRGl5RnAodHJpbW1lZCwgZXhwb25lbnQsIHVwcGVyX2JvdW5kYXJ5KTsKLSAg
aWYgKGNvbXBhcmlzb24gPCAwKSB7Ci0gICAgcmV0dXJuIGd1ZXNzOwotICB9IGVsc2UgaWYgKGNv
bXBhcmlzb24gPiAwKSB7Ci0gICAgcmV0dXJuIERvdWJsZShndWVzcykuTmV4dERvdWJsZSgpOwot
ICB9IGVsc2UgaWYgKChEb3VibGUoZ3Vlc3MpLlNpZ25pZmljYW5kKCkgJiAxKSA9PSAwKSB7Ci0g
ICAgLy8gUm91bmQgdG93YXJkcyBldmVuLgotICAgIHJldHVybiBndWVzczsKLSAgfSBlbHNlIHsK
LSAgICByZXR1cm4gRG91YmxlKGd1ZXNzKS5OZXh0RG91YmxlKCk7Ci0gIH0KLX0KLQotZmxvYXQg
U3RydG9mKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsIGludCBleHBvbmVudCkgewotICBjaGFy
IGNvcHlfYnVmZmVyW2tNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHNdOwotICBWZWN0b3I8Y29u
c3QgY2hhcj4gdHJpbW1lZDsKLSAgaW50IHVwZGF0ZWRfZXhwb25lbnQ7Ci0gIFRyaW1BbmRDdXQo
YnVmZmVyLCBleHBvbmVudCwgY29weV9idWZmZXIsIGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdp
dHMsCi0gICAgICAgICAgICAgJnRyaW1tZWQsICZ1cGRhdGVkX2V4cG9uZW50KTsKLSAgZXhwb25l
bnQgPSB1cGRhdGVkX2V4cG9uZW50OwotCi0gIGRvdWJsZSBkb3VibGVfZ3Vlc3M7Ci0gIGJvb2wg
aXNfY29ycmVjdCA9IENvbXB1dGVHdWVzcyh0cmltbWVkLCBleHBvbmVudCwgJmRvdWJsZV9ndWVz
cyk7Ci0KLSAgZmxvYXQgZmxvYXRfZ3Vlc3MgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZG91YmxlX2d1
ZXNzKTsKLSAgaWYgKGZsb2F0X2d1ZXNzID09IGRvdWJsZV9ndWVzcykgewotICAgIC8vIFRoaXMg
c2hvcnRjdXQgdHJpZ2dlcnMgZm9yIGludGVnZXIgdmFsdWVzLgotICAgIHJldHVybiBmbG9hdF9n
dWVzczsKLSAgfQotCi0gIC8vIFdlIG11c3QgY2F0Y2ggZG91YmxlLXJvdW5kaW5nLiBTYXkgdGhl
IGRvdWJsZSBoYXMgYmVlbiByb3VuZGVkIHVwLCBhbmQgaXMKLSAgLy8gbm93IGEgYm91bmRhcnkg
b2YgYSBmbG9hdCwgYW5kIHJvdW5kcyB1cCBhZ2Fpbi4gVGhpcyBpcyB3aHkgd2UgaGF2ZSB0bwot
ICAvLyBsb29rIGF0IHByZXZpb3VzIHRvby4KLSAgLy8gRXhhbXBsZSAoaW4gZGVjaW1hbCBudW1i
ZXJzKToKLSAgLy8gICAgaW5wdXQ6IDEyMzQ5Ci0gIC8vICAgIGhpZ2gtcHJlY2lzaW9uICg0IGRp
Z2l0cyk6IDEyMzUKLSAgLy8gICAgbG93LXByZWNpc2lvbiAoMyBkaWdpdHMpOgotICAvLyAgICAg
ICB3aGVuIHJlYWQgZnJvbSBpbnB1dDogMTIzCi0gIC8vICAgICAgIHdoZW4gcm91bmRlZCBmcm9t
IGhpZ2ggcHJlY2lzaW9uOiAxMjQuCi0gIC8vIFRvIGRvIHRoaXMgd2Ugc2ltcGx5IGxvb2sgYXQg
dGhlIG5laWdib3JzIG9mIHRoZSBjb3JyZWN0IHJlc3VsdCBhbmQgc2VlCi0gIC8vIGlmIHRoZXkg
d291bGQgcm91bmQgdG8gdGhlIHNhbWUgZmxvYXQuIElmIHRoZSBndWVzcyBpcyBub3QgY29ycmVj
dCB3ZSBoYXZlCi0gIC8vIHRvIGxvb2sgYXQgZm91ciB2YWx1ZXMgKHNpbmNlIHR3byBkaWZmZXJl
bnQgZG91YmxlcyBjb3VsZCBiZSB0aGUgY29ycmVjdAotICAvLyBkb3VibGUpLgotCi0gIGRvdWJs
ZSBkb3VibGVfbmV4dCA9IERvdWJsZShkb3VibGVfZ3Vlc3MpLk5leHREb3VibGUoKTsKLSAgZG91
YmxlIGRvdWJsZV9wcmV2aW91cyA9IERvdWJsZShkb3VibGVfZ3Vlc3MpLlByZXZpb3VzRG91Ymxl
KCk7Ci0KLSAgZmxvYXQgZjEgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZG91YmxlX3ByZXZpb3VzKTsK
LSAgZmxvYXQgZjIgPSBmbG9hdF9ndWVzczsKLSAgZmxvYXQgZjMgPSBzdGF0aWNfY2FzdDxmbG9h
dD4oZG91YmxlX25leHQpOwotICBmbG9hdCBmNDsKLSAgaWYgKGlzX2NvcnJlY3QpIHsKLSAgICBm
NCA9IGYzOwotICB9IGVsc2UgewotICAgIGRvdWJsZSBkb3VibGVfbmV4dDIgPSBEb3VibGUoZG91
YmxlX25leHQpLk5leHREb3VibGUoKTsKLSAgICBmNCA9IHN0YXRpY19jYXN0PGZsb2F0Pihkb3Vi
bGVfbmV4dDIpOwotICB9Ci0gICh2b2lkKSBmMjsgIC8vIE1hcmsgdmFyaWFibGUgYXMgdXNlZC4K
LSAgQVNTRVJUKGYxIDw9IGYyICYmIGYyIDw9IGYzICYmIGYzIDw9IGY0KTsKLQotICAvLyBJZiB0
aGUgZ3Vlc3MgZG9lc24ndCBsaWUgbmVhciBhIHNpbmdsZS1wcmVjaXNpb24gYm91bmRhcnkgd2Ug
Y2FuIHNpbXBseQotICAvLyByZXR1cm4gaXRzIGZsb2F0LXZhbHVlLgotICBpZiAoZjEgPT0gZjQp
IHsKLSAgICByZXR1cm4gZmxvYXRfZ3Vlc3M7Ci0gIH0KLQotICBBU1NFUlQoKGYxICE9IGYyICYm
IGYyID09IGYzICYmIGYzID09IGY0KSB8fAotICAgICAgICAgKGYxID09IGYyICYmIGYyICE9IGYz
ICYmIGYzID09IGY0KSB8fAotICAgICAgICAgKGYxID09IGYyICYmIGYyID09IGYzICYmIGYzICE9
IGY0KSk7Ci0KLSAgLy8gZ3Vlc3MgYW5kIG5leHQgYXJlIHRoZSB0d28gcG9zc2libGUgY2FuZGl0
YXRlcyAoaW4gdGhlIHNhbWUgd2F5IHRoYXQKLSAgLy8gZG91YmxlX2d1ZXNzIHdhcyB0aGUgbG93
ZXIgY2FuZGlkYXRlIGZvciBhIGRvdWJsZS1wcmVjaXNpb24gZ3Vlc3MpLgotICBmbG9hdCBndWVz
cyA9IGYxOwotICBmbG9hdCBuZXh0ID0gZjQ7Ci0gIERpeUZwIHVwcGVyX2JvdW5kYXJ5OwotICBp
ZiAoZ3Vlc3MgPT0gMC4wZikgewotICAgIGZsb2F0IG1pbl9mbG9hdCA9IDFlLTQ1ZjsKLSAgICB1
cHBlcl9ib3VuZGFyeSA9IERvdWJsZShzdGF0aWNfY2FzdDxkb3VibGU+KG1pbl9mbG9hdCkgLyAy
KS5Bc0RpeUZwKCk7Ci0gIH0gZWxzZSB7Ci0gICAgdXBwZXJfYm91bmRhcnkgPSBTaW5nbGUoZ3Vl
c3MpLlVwcGVyQm91bmRhcnkoKTsKLSAgfQotICBpbnQgY29tcGFyaXNvbiA9IENvbXBhcmVCdWZm
ZXJXaXRoRGl5RnAodHJpbW1lZCwgZXhwb25lbnQsIHVwcGVyX2JvdW5kYXJ5KTsKLSAgaWYgKGNv
bXBhcmlzb24gPCAwKSB7Ci0gICAgcmV0dXJuIGd1ZXNzOwotICB9IGVsc2UgaWYgKGNvbXBhcmlz
b24gPiAwKSB7Ci0gICAgcmV0dXJuIG5leHQ7Ci0gIH0gZWxzZSBpZiAoKFNpbmdsZShndWVzcyku
U2lnbmlmaWNhbmQoKSAmIDEpID09IDApIHsKLSAgICAvLyBSb3VuZCB0b3dhcmRzIGV2ZW4uCi0g
ICAgcmV0dXJuIGd1ZXNzOwotICB9IGVsc2UgewotICAgIHJldHVybiBuZXh0OwotICB9Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZl
cnNpb24vc3RydG9kLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9kb3Vi
bGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi9zdHJ0b2QuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZWQwMjkzYjhmNTRhMzczNzYyZjE3ZmU0ZGQ3MGYyODk2ZWIxZDE5My4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVy
c2lvbi9zdHJ0b2QuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8vIENvcHlyaWdo
dCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vICAgICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotLy8g
ICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gICAgICAgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0vLyAg
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9TVFJUT0RfSF8KLSNk
ZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fU1RSVE9EX0hfCi0KLSNpbmNsdWRlICJ1dGlscy5oIgot
Ci1uYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24gewotCi0vLyBUaGUgYnVmZmVyIG11c3Qgb25s
eSBjb250YWluIGRpZ2l0cyBpbiB0aGUgcmFuZ2UgWzAtOV0uIEl0IG11c3Qgbm90Ci0vLyBjb250
YWluIGEgZG90IG9yIGEgc2lnbi4gSXQgbXVzdCBub3Qgc3RhcnQgd2l0aCAnMCcsIGFuZCBtdXN0
IG5vdCBiZSBlbXB0eS4KLWRvdWJsZSBTdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwg
aW50IGV4cG9uZW50KTsKLQotLy8gVGhlIGJ1ZmZlciBtdXN0IG9ubHkgY29udGFpbiBkaWdpdHMg
aW4gdGhlIHJhbmdlIFswLTldLiBJdCBtdXN0IG5vdAotLy8gY29udGFpbiBhIGRvdCBvciBhIHNp
Z24uIEl0IG11c3Qgbm90IHN0YXJ0IHdpdGggJzAnLCBhbmQgbXVzdCBub3QgYmUgZW1wdHkuCi1m
bG9hdCBTdHJ0b2YoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwgaW50IGV4cG9uZW50KTsKLQot
fSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCi0KLSNlbmRpZiAgLy8gRE9VQkxFX0NP
TlZFUlNJT05fU1RSVE9EX0hfCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi91dGlscy5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZG91YmxlLWNvbnZlcnNpb24vZG91
YmxlLWNvbnZlcnNpb24vdXRpbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM3
NDVmMzYzZjY5NDgwY2ZkNGM1NGYwMGY4ZWNkZGRmY2NhMmQzOS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9kb3VibGUtY29udmVyc2lvbi9kb3VibGUtY29udmVyc2lvbi91dGlscy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMzQyICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKLS8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotLy8gICAgICAgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0vLyAgICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
I2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9VVElMU19IXwotI2RlZmluZSBET1VCTEVfQ09OVkVS
U0lPTl9VVElMU19IXwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+
Ci0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpZm5kZWYgQVNTRVJUCi0jZGVmaW5lIEFTU0VSVChj
b25kaXRpb24pICAgICAgICAgXAotICAgIGFzc2VydChjb25kaXRpb24pOwotI2VuZGlmCi0jaWZu
ZGVmIFVOSU1QTEVNRU5URUQKLSNkZWZpbmUgVU5JTVBMRU1FTlRFRCgpIChhYm9ydCgpKQotI2Vu
ZGlmCi0jaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX05PX1JFVFVSTgotI2lmZGVmIF9NU0NfVkVS
Ci0jZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX05PX1JFVFVSTiBfX2RlY2xzcGVjKG5vcmV0dXJu
KQotI2Vsc2UKLSNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fTk9fUkVUVVJOIF9fYXR0cmlidXRl
X18oKG5vcmV0dXJuKSkKLSNlbmRpZgotI2VuZGlmCi0jaWZuZGVmIFVOUkVBQ0hBQkxFCi0jaWZk
ZWYgX01TQ19WRVIKLXZvaWQgRE9VQkxFX0NPTlZFUlNJT05fTk9fUkVUVVJOIGFib3J0X25vcmV0
dXJuKCk7Ci1pbmxpbmUgdm9pZCBhYm9ydF9ub3JldHVybigpIHsgYWJvcnQoKTsgfQotI2RlZmlu
ZSBVTlJFQUNIQUJMRSgpICAgKGFib3J0X25vcmV0dXJuKCkpCi0jZWxzZQotI2RlZmluZSBVTlJF
QUNIQUJMRSgpICAgKGFib3J0KCkpCi0jZW5kaWYKLSNlbmRpZgotCi0KLS8vIERvdWJsZSBvcGVy
YXRpb25zIGRldGVjdGlvbiBiYXNlZCBvbiB0YXJnZXQgYXJjaGl0ZWN0dXJlLgotLy8gTGludXgg
dXNlcyBhIDgwYml0IHdpZGUgZmxvYXRpbmcgcG9pbnQgc3RhY2sgb24geDg2LiBUaGlzIGluZHVj
ZXMgZG91YmxlCi0vLyByb3VuZGluZywgd2hpY2ggaW4gdHVybiBsZWFkcyB0byB3cm9uZyByZXN1
bHRzLgotLy8gQW4gZWFzeSB3YXkgdG8gdGVzdCBpZiB0aGUgZmxvYXRpbmctcG9pbnQgb3BlcmF0
aW9ucyBhcmUgY29ycmVjdCBpcyB0bwotLy8gZXZhbHVhdGU6IDg5MjU1LjAvMWUyMi4gSWYgdGhl
IGZsb2F0aW5nLXBvaW50IHN0YWNrIGlzIDY0IGJpdHMgd2lkZSB0aGVuCi0vLyB0aGUgcmVzdWx0
IGlzIGVxdWFsIHRvIDg5MjU1ZS0yMi4KLS8vIFRoZSBiZXN0IHdheSB0byB0ZXN0IHRoaXMsIGlz
IHRvIGNyZWF0ZSBhIGRpdmlzaW9uLWZ1bmN0aW9uIGFuZCB0byBjb21wYXJlCi0vLyB0aGUgb3V0
cHV0IG9mIHRoZSBkaXZpc2lvbiB3aXRoIHRoZSBleHBlY3RlZCByZXN1bHQuIChJbmxpbmluZyBt
dXN0IGJlCi0vLyBkaXNhYmxlZC4pCi0vLyBPbiBMaW51eCx4ODYgODkyNTVlLTIyICE9IERpdl9k
b3VibGUoODkyNTUuMC8xZTIyKQotI2lmIGRlZmluZWQoX01fWDY0KSB8fCBkZWZpbmVkKF9feDg2
XzY0X18pIHx8IFwKLSAgICBkZWZpbmVkKF9fQVJNRUxfXykgfHwgZGVmaW5lZChfX2F2cjMyX18p
IHx8IFwKLSAgICBkZWZpbmVkKF9faHBwYV9fKSB8fCBkZWZpbmVkKF9faWE2NF9fKSB8fCBcCi0g
ICAgZGVmaW5lZChfX21pcHNfXykgfHwgXAotICAgIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRl
ZmluZWQoX19wcGNfXykgfHwgZGVmaW5lZChfX3BwYzY0X18pIHx8IFwKLSAgICBkZWZpbmVkKF9Q
T1dFUikgfHwgZGVmaW5lZChfQVJDSF9QUEMpIHx8IGRlZmluZWQoX0FSQ0hfUFBDNjQpIHx8IFwK
LSAgICBkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZChfX3NwYXJjKSB8fCBkZWZpbmVkKF9f
czM5MF9fKSB8fCBcCi0gICAgZGVmaW5lZChfX1NINF9fKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykg
fHwgXAotICAgIGRlZmluZWQoX01JUFNfQVJDSF9NSVBTMzJSMikgfHwgXAotICAgIGRlZmluZWQo
X19BQVJDSDY0RUxfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykgfHwgXAotICAgIGRlZmluZWQo
X19yaXNjdikKLSNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQ09SUkVDVF9ET1VCTEVfT1BFUkFU
SU9OUyAxCi0jZWxpZiBkZWZpbmVkKF9fbWM2ODAwMF9fKQotI3VuZGVmIERPVUJMRV9DT05WRVJT
SU9OX0NPUlJFQ1RfRE9VQkxFX09QRVJBVElPTlMKLSNlbGlmIGRlZmluZWQoX01fSVg4NikgfHwg
ZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpCi0jaWYgZGVmaW5lZChfV0lOMzIp
Ci0vLyBXaW5kb3dzIHVzZXMgYSA2NGJpdCB3aWRlIGZsb2F0aW5nIHBvaW50IHN0YWNrLgotI2Rl
ZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TIDEKLSNlbHNl
Ci0jdW5kZWYgRE9VQkxFX0NPTlZFUlNJT05fQ09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUwotI2Vu
ZGlmICAvLyBfV0lOMzIKLSNlbHNlCi0jZXJyb3IgVGFyZ2V0IGFyY2hpdGVjdHVyZSB3YXMgbm90
IGRldGVjdGVkIGFzIHN1cHBvcnRlZCBieSBEb3VibGUtQ29udmVyc2lvbi4KLSNlbmRpZgotCi0j
aWYgZGVmaW5lZChfX0dOVUNfXykKLSNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fVU5VU0VEIF9f
YXR0cmlidXRlX18oKHVudXNlZCkpCi0jZWxzZQotI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9V
TlVTRUQKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fTUlOR1cz
Ml9fKQotCi10eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hh
ciB1aW50OF90OwotdHlwZWRlZiBzaG9ydCBpbnQxNl90OyAgLy8gTk9MSU5UCi10eXBlZGVmIHVu
c2lnbmVkIHNob3J0IHVpbnQxNl90OyAgLy8gTk9MSU5UCi10eXBlZGVmIGludCBpbnQzMl90Owot
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7Ci10eXBlZGVmIF9faW50NjQgaW50NjRfdDsK
LXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKLS8vIGludHB0cl90IGFuZCBmcmll
bmRzIGFyZSBkZWZpbmVkIGluIGNydGRlZnMuaCB0aHJvdWdoIHN0ZGlvLmguCi0KLSNlbHNlCi0K
LSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotI2VuZGlmCi0KLXR5cGVkZWYgdWludDE2X3QgdWMxNjsK
LQotLy8gVGhlIGZvbGxvd2luZyBtYWNybyB3b3JrcyBvbiBib3RoIDMyIGFuZCA2NC1iaXQgcGxh
dGZvcm1zLgotLy8gVXNhZ2U6IGluc3RlYWQgb2Ygd3JpdGluZyAweDEyMzQ1Njc4OTAxMjM0NTYK
LS8vICAgICAgd3JpdGUgVUlOVDY0XzJQQVJUX0MoMHgxMjM0NTY3OCw5MDEyMzQ1Nik7Ci0jZGVm
aW5lIFVJTlQ2NF8yUEFSVF9DKGEsIGIpICgoKHN0YXRpY19jYXN0PHVpbnQ2NF90PihhKSA8PCAz
MikgKyAweCMjYiMjdSkpCi0KLQotLy8gVGhlIGV4cHJlc3Npb24gQVJSQVlfU0laRShhKSBpcyBh
IGNvbXBpbGUtdGltZSBjb25zdGFudCBvZiB0eXBlCi0vLyBzaXplX3Qgd2hpY2ggcmVwcmVzZW50
cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoZSBnaXZlbgotLy8gYXJyYXkuIFlvdSBzaG91
bGQgb25seSB1c2UgQVJSQVlfU0laRSBvbiBzdGF0aWNhbGx5IGFsbG9jYXRlZAotLy8gYXJyYXlz
LgotI2lmbmRlZiBBUlJBWV9TSVpFCi0jZGVmaW5lIEFSUkFZX1NJWkUoYSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKChzaXplb2YoYSkgLyBzaXplb2YoKihhKSkpIC8g
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWNfY2FzdDxzaXplX3Q+KCEoc2l6ZW9m
KGEpICUgc2l6ZW9mKCooYSkpKSkpCi0jZW5kaWYKLQotLy8gQSBtYWNybyB0byBkaXNhbGxvdyB0
aGUgZXZpbCBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zCi0vLyBUaGlz
IHNob3VsZCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEgY2xhc3MK
LSNpZm5kZWYgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOCi0jZGVmaW5lIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihUeXBlTmFtZSkgICAgICBcCi0gIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7
ICAgICAgICAgICAgICAgICAgICBcCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lJikK
LSNlbmRpZgotCi0vLyBBIG1hY3JvIHRvIGRpc2FsbG93IGFsbCB0aGUgaW1wbGljaXQgY29uc3Ry
dWN0b3JzLCBuYW1lbHkgdGhlCi0vLyBkZWZhdWx0IGNvbnN0cnVjdG9yLCBjb3B5IGNvbnN0cnVj
dG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zLgotLy8KLS8vIFRoaXMgc2hvdWxkIGJlIHVzZWQg
aW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFzcwotLy8gdGhhdCB3YW50cyB0
byBwcmV2ZW50IGFueW9uZSBmcm9tIGluc3RhbnRpYXRpbmcgaXQuIFRoaXMgaXMKLS8vIGVzcGVj
aWFsbHkgdXNlZnVsIGZvciBjbGFzc2VzIGNvbnRhaW5pbmcgb25seSBzdGF0aWMgbWV0aG9kcy4K
LSNpZm5kZWYgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTCi0jZGVmaW5lIERJU0FMTE9X
X0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhUeXBlTmFtZSkgXAotICBUeXBlTmFtZSgpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFR5cGVOYW1lKQotI2VuZGlmCi0KLW5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7Ci0KLXN0
YXRpYyBjb25zdCBpbnQga0NoYXJTaXplID0gc2l6ZW9mKGNoYXIpOwotCi0vLyBSZXR1cm5zIHRo
ZSBtYXhpbXVtIG9mIHRoZSB0d28gcGFyYW1ldGVycy4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
c3RhdGljIFQgTWF4KFQgYSwgVCBiKSB7Ci0gIHJldHVybiBhIDwgYiA/IGIgOiBhOwotfQotCi0K
LS8vIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdGhlIHR3byBwYXJhbWV0ZXJzLgotdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci1zdGF0aWMgVCBNaW4oVCBhLCBUIGIpIHsKLSAgcmV0dXJuIGEgPCBiID8g
YSA6IGI7Ci19Ci0KLQotaW5saW5lIGludCBTdHJMZW5ndGgoY29uc3QgY2hhciogc3RyaW5nKSB7
Ci0gIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKLSAgQVNTRVJUKGxlbmd0aCA9PSBz
dGF0aWNfY2FzdDxzaXplX3Q+KHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSkpOwotICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpOwotfQotCi0vLyBUaGlzIGlzIGEgc2ltcGxpZmllZCB2
ZXJzaW9uIG9mIFY4J3MgVmVjdG9yIGNsYXNzLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFz
cyBWZWN0b3IgewotIHB1YmxpYzoKLSAgVmVjdG9yKCkgOiBzdGFydF8oTlVMTCksIGxlbmd0aF8o
MCkge30KLSAgVmVjdG9yKFQqIGRhdGEsIGludCBsZW4pIDogc3RhcnRfKGRhdGEpLCBsZW5ndGhf
KGxlbikgewotICAgIEFTU0VSVChsZW4gPT0gMCB8fCAobGVuID4gMCAmJiBkYXRhICE9IE5VTEwp
KTsKLSAgfQotCi0gIC8vIFJldHVybnMgYSB2ZWN0b3IgdXNpbmcgdGhlIHNhbWUgYmFja2luZyBz
dG9yYWdlIGFzIHRoaXMgb25lLAotICAvLyBzcGFubmluZyBmcm9tIGFuZCBpbmNsdWRpbmcgJ2Zy
b20nLCB0byBidXQgbm90IGluY2x1ZGluZyAndG8nLgotICBWZWN0b3I8VD4gU3ViVmVjdG9yKGlu
dCBmcm9tLCBpbnQgdG8pIHsKLSAgICBBU1NFUlQodG8gPD0gbGVuZ3RoXyk7Ci0gICAgQVNTRVJU
KGZyb20gPCB0byk7Ci0gICAgQVNTRVJUKDAgPD0gZnJvbSk7Ci0gICAgcmV0dXJuIFZlY3RvcjxU
PihzdGFydCgpICsgZnJvbSwgdG8gLSBmcm9tKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhlIGxl
bmd0aCBvZiB0aGUgdmVjdG9yLgotICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbGVuZ3Ro
XzsgfQotCi0gIC8vIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvciBpcyBlbXB0eS4K
LSAgYm9vbCBpc19lbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGxlbmd0aF8gPT0gMDsgfQotCi0gIC8v
IFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBkYXRhIGluIHRoZSB2ZWN0
b3IuCi0gIFQqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gc3RhcnRfOyB9Ci0KLSAgLy8gQWNjZXNz
IGluZGl2aWR1YWwgdmVjdG9yIGVsZW1lbnRzIC0gY2hlY2tzIGJvdW5kcyBpbiBkZWJ1ZyBtb2Rl
LgotICBUJiBvcGVyYXRvcltdKGludCBpbmRleCkgY29uc3QgewotICAgIEFTU0VSVCgwIDw9IGlu
ZGV4ICYmIGluZGV4IDwgbGVuZ3RoXyk7Ci0gICAgcmV0dXJuIHN0YXJ0X1tpbmRleF07Ci0gIH0K
LQotICBUJiBmaXJzdCgpIHsgcmV0dXJuIHN0YXJ0X1swXTsgfQotCi0gIFQmIGxhc3QoKSB7IHJl
dHVybiBzdGFydF9bbGVuZ3RoXyAtIDFdOyB9Ci0KLSBwcml2YXRlOgotICBUKiBzdGFydF87Ci0g
IGludCBsZW5ndGhfOwotfTsKLQotCi0vLyBIZWxwZXIgY2xhc3MgZm9yIGJ1aWxkaW5nIHJlc3Vs
dCBzdHJpbmdzIGluIGEgY2hhcmFjdGVyIGJ1ZmZlci4gVGhlCi0vLyBwdXJwb3NlIG9mIHRoZSBj
bGFzcyBpcyB0byB1c2Ugc2FmZSBvcGVyYXRpb25zIHRoYXQgY2hlY2tzIHRoZQotLy8gYnVmZmVy
IGJvdW5kcyBvbiBhbGwgb3BlcmF0aW9ucyBpbiBkZWJ1ZyBtb2RlLgotY2xhc3MgU3RyaW5nQnVp
bGRlciB7Ci0gcHVibGljOgotICBTdHJpbmdCdWlsZGVyKGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZmZl
cl9zaXplKQotICAgICAgOiBidWZmZXJfKGJ1ZmZlciwgYnVmZmVyX3NpemUpLCBwb3NpdGlvbl8o
MCkgeyB9Ci0KLSAgflN0cmluZ0J1aWxkZXIoKSB7IGlmICghaXNfZmluYWxpemVkKCkpIEZpbmFs
aXplKCk7IH0KLQotICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGJ1ZmZlcl8ubGVuZ3RoKCk7
IH0KLQotICAvLyBHZXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGJ1aWxkZXIuCi0gIGlu
dCBwb3NpdGlvbigpIGNvbnN0IHsKLSAgICBBU1NFUlQoIWlzX2ZpbmFsaXplZCgpKTsKLSAgICBy
ZXR1cm4gcG9zaXRpb25fOwotICB9Ci0KLSAgLy8gUmVzZXQgdGhlIHBvc2l0aW9uLgotICB2b2lk
IFJlc2V0KCkgeyBwb3NpdGlvbl8gPSAwOyB9Ci0KLSAgLy8gQWRkIGEgc2luZ2xlIGNoYXJhY3Rl
ciB0byB0aGUgYnVpbGRlci4gSXQgaXMgbm90IGFsbG93ZWQgdG8gYWRkCi0gIC8vIDAtY2hhcmFj
dGVyczsgdXNlIHRoZSBGaW5hbGl6ZSgpIG1ldGhvZCB0byB0ZXJtaW5hdGUgdGhlIHN0cmluZwot
ICAvLyBpbnN0ZWFkLgotICB2b2lkIEFkZENoYXJhY3RlcihjaGFyIGMpIHsKLSAgICBBU1NFUlQo
YyAhPSAnXDAnKTsKLSAgICBBU1NFUlQoIWlzX2ZpbmFsaXplZCgpICYmIHBvc2l0aW9uXyA8IGJ1
ZmZlcl8ubGVuZ3RoKCkpOwotICAgIGJ1ZmZlcl9bcG9zaXRpb25fKytdID0gYzsKLSAgfQotCi0g
IC8vIEFkZCBhbiBlbnRpcmUgc3RyaW5nIHRvIHRoZSBidWlsZGVyLiBVc2VzIHN0cmxlbigpIGlu
dGVybmFsbHkgdG8KLSAgLy8gY29tcHV0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBzdHJpbmcu
Ci0gIHZvaWQgQWRkU3RyaW5nKGNvbnN0IGNoYXIqIHMpIHsKLSAgICBBZGRTdWJzdHJpbmcocywg
U3RyTGVuZ3RoKHMpKTsKLSAgfQotCi0gIC8vIEFkZCB0aGUgZmlyc3QgJ24nIGNoYXJhY3RlcnMg
b2YgdGhlIGdpdmVuIHN0cmluZyAncycgdG8gdGhlCi0gIC8vIGJ1aWxkZXIuIFRoZSBpbnB1dCBz
dHJpbmcgbXVzdCBoYXZlIGVub3VnaCBjaGFyYWN0ZXJzLgotICB2b2lkIEFkZFN1YnN0cmluZyhj
b25zdCBjaGFyKiBzLCBpbnQgbikgewotICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkgJiYgcG9z
aXRpb25fICsgbiA8IGJ1ZmZlcl8ubGVuZ3RoKCkpOwotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxz
aXplX3Q+KG4pIDw9IHN0cmxlbihzKSk7Ci0gICAgbWVtbW92ZSgmYnVmZmVyX1twb3NpdGlvbl9d
LCBzLCBuICoga0NoYXJTaXplKTsKLSAgICBwb3NpdGlvbl8gKz0gbjsKLSAgfQotCi0KLSAgLy8g
QWRkIGNoYXJhY3RlciBwYWRkaW5nIHRvIHRoZSBidWlsZGVyLiBJZiBjb3VudCBpcyBub24tcG9z
aXRpdmUsCi0gIC8vIG5vdGhpbmcgaXMgYWRkZWQgdG8gdGhlIGJ1aWxkZXIuCi0gIHZvaWQgQWRk
UGFkZGluZyhjaGFyIGMsIGludCBjb3VudCkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykgewotICAgICAgQWRkQ2hhcmFjdGVyKGMpOwotICAgIH0KLSAgfQotCi0gIC8vIEZp
bmFsaXplIHRoZSBzdHJpbmcgYnkgMC10ZXJtaW5hdGluZyBpdCBhbmQgcmV0dXJuaW5nIHRoZSBi
dWZmZXIuCi0gIGNoYXIqIEZpbmFsaXplKCkgewotICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkg
JiYgcG9zaXRpb25fIDwgYnVmZmVyXy5sZW5ndGgoKSk7Ci0gICAgYnVmZmVyX1twb3NpdGlvbl9d
ID0gJ1wwJzsKLSAgICAvLyBNYWtlIHN1cmUgbm9ib2R5IG1hbmFnZWQgdG8gYWRkIGEgMC1jaGFy
YWN0ZXIgdG8gdGhlCi0gICAgLy8gYnVmZmVyIHdoaWxlIGJ1aWxkaW5nIHRoZSBzdHJpbmcuCi0g
ICAgQVNTRVJUKHN0cmxlbihidWZmZXJfLnN0YXJ0KCkpID09IHN0YXRpY19jYXN0PHNpemVfdD4o
cG9zaXRpb25fKSk7Ci0gICAgcG9zaXRpb25fID0gLTE7Ci0gICAgQVNTRVJUKGlzX2ZpbmFsaXpl
ZCgpKTsKLSAgICByZXR1cm4gYnVmZmVyXy5zdGFydCgpOwotICB9Ci0KLSBwcml2YXRlOgotICBW
ZWN0b3I8Y2hhcj4gYnVmZmVyXzsKLSAgaW50IHBvc2l0aW9uXzsKLQotICBib29sIGlzX2ZpbmFs
aXplZCgpIGNvbnN0IHsgcmV0dXJuIHBvc2l0aW9uXyA8IDA7IH0KLQotICBESVNBTExPV19JTVBM
SUNJVF9DT05TVFJVQ1RPUlMoU3RyaW5nQnVpbGRlcik7Ci19OwotCi0vLyBUaGUgdHlwZS1iYXNl
ZCBhbGlhc2luZyBydWxlIGFsbG93cyB0aGUgY29tcGlsZXIgdG8gYXNzdW1lIHRoYXQgcG9pbnRl
cnMgb2YKLS8vIGRpZmZlcmVudCB0eXBlcyAoZm9yIHNvbWUgZGVmaW5pdGlvbiBvZiBkaWZmZXJl
bnQpIG5ldmVyIGFsaWFzIGVhY2ggb3RoZXIuCi0vLyBUaHVzIHRoZSBmb2xsb3dpbmcgY29kZSBk
b2VzIG5vdCB3b3JrOgotLy8KLS8vIGZsb2F0IGYgPSBmb28oKTsKLS8vIGludCBmYml0cyA9ICoo
aW50KikoJmYpOwotLy8KLS8vIFRoZSBjb21waWxlciAna25vd3MnIHRoYXQgdGhlIGludCBwb2lu
dGVyIGNhbid0IHJlZmVyIHRvIGYgc2luY2UgdGhlIHR5cGVzCi0vLyBkb24ndCBtYXRjaCwgc28g
dGhlIGNvbXBpbGVyIG1heSBjYWNoZSBmIGluIGEgcmVnaXN0ZXIsIGxlYXZpbmcgcmFuZG9tIGRh
dGEKLS8vIGluIGZiaXRzLiAgVXNpbmcgQysrIHN0eWxlIGNhc3RzIG1ha2VzIG5vIGRpZmZlcmVu
Y2UsIGhvd2V2ZXIgYSBwb2ludGVyIHRvCi0vLyBjaGFyIGRhdGEgaXMgYXNzdW1lZCB0byBhbGlh
cyBhbnkgb3RoZXIgcG9pbnRlci4gIFRoaXMgaXMgdGhlICdtZW1jcHkKLS8vIGV4Y2VwdGlvbicu
Ci0vLwotLy8gQml0X2Nhc3QgdXNlcyB0aGUgbWVtY3B5IGV4Y2VwdGlvbiB0byBtb3ZlIHRoZSBi
aXRzIGZyb20gYSB2YXJpYWJsZSBvZiBvbmUKLS8vIHR5cGUgb2YgYSB2YXJpYWJsZSBvZiBhbm90
aGVyIHR5cGUuICBPZiBjb3Vyc2UgdGhlIGVuZCByZXN1bHQgaXMgbGlrZWx5IHRvCi0vLyBiZSBp
bXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBNb3N0IGNvbXBpbGVycyAoZ2NjLTQuMiBhbmQgTVNW
QyAyMDA1KQotLy8gd2lsbCBjb21wbGV0ZWx5IG9wdGltaXplIEJpdENhc3QgYXdheS4KLS8vCi0v
LyBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIHVzZSBmb3IgQml0Q2FzdC4KLS8vIFJlY2VudCBnY2Nz
IHdpbGwgd2FybiB3aGVuIHRoZXkgc2VlIGNhc3RzIHRoYXQgbWF5IHJlc3VsdCBpbiBicmVha2Fn
ZSBkdWUgdG8KLS8vIHRoZSB0eXBlLWJhc2VkIGFsaWFzaW5nIHJ1bGUuICBJZiB5b3UgaGF2ZSBj
aGVja2VkIHRoYXQgdGhlcmUgaXMgbm8gYnJlYWthZ2UKLS8vIHlvdSBjYW4gdXNlIEJpdENhc3Qg
dG8gY2FzdCBvbmUgcG9pbnRlciB0eXBlIHRvIGFub3RoZXIuICBUaGlzIGNvbmZ1c2VzIGdjYwot
Ly8gZW5vdWdoIHRoYXQgaXQgY2FuIG5vIGxvbmdlciBzZWUgdGhhdCB5b3UgaGF2ZSBjYXN0IG9u
ZSBwb2ludGVyIHR5cGUgdG8KLS8vIGFub3RoZXIgdGh1cyBhdm9pZGluZyB0aGUgd2FybmluZy4K
LXRlbXBsYXRlIDxjbGFzcyBEZXN0LCBjbGFzcyBTb3VyY2U+Ci1pbmxpbmUgRGVzdCBCaXRDYXN0
KGNvbnN0IFNvdXJjZSYgc291cmNlKSB7Ci0gIC8vIENvbXBpbGUgdGltZSBhc3NlcnRpb246IHNp
emVvZihEZXN0KSA9PSBzaXplb2YoU291cmNlKQotICAvLyBBIGNvbXBpbGUgZXJyb3IgaGVyZSBt
ZWFucyB5b3VyIERlc3QgYW5kIFNvdXJjZSBoYXZlIGRpZmZlcmVudCBzaXplcy4KLSAgRE9VQkxF
X0NPTlZFUlNJT05fVU5VU0VECi0gICAgICB0eXBlZGVmIGNoYXIgVmVyaWZ5U2l6ZXNBcmVFcXVh
bFtzaXplb2YoRGVzdCkgPT0gc2l6ZW9mKFNvdXJjZSkgPyAxIDogLTFdOwotCi0gIERlc3QgZGVz
dDsKLSAgbWVtbW92ZSgmZGVzdCwgJnNvdXJjZSwgc2l6ZW9mKGRlc3QpKTsKLSAgcmV0dXJuIGRl
c3Q7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBEZXN0LCBjbGFzcyBTb3VyY2U+Ci1pbmxpbmUgRGVz
dCBCaXRDYXN0KFNvdXJjZSogc291cmNlKSB7Ci0gIHJldHVybiBCaXRDYXN0PERlc3Q+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihzb3VyY2UpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGRv
dWJsZV9jb252ZXJzaW9uCi0KLSNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fVVRJTFNfSF8K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0Fw
cGx5VHVwbGUuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0Fw
cGx5VHVwbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlNmZlYzA3ZDZlM2Uy
M2JmMGU2YTU3NGY4YWMzNTI1MzU5NTNkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xs
eS9BcHBseVR1cGxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFw
YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0g
KiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
LSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qCi0gKiBEZWZpbmVzIGEgZnVuY3Rp
b24gZm9sbHk6OmFwcGx5VHVwbGUsIHdoaWNoIHRha2VzIGEgZnVuY3Rpb24gYW5kIGEKLSAqIHN0
ZDo6dHVwbGUgb2YgYXJndW1lbnRzIGFuZCBjYWxscyB0aGUgZnVuY3Rpb24gd2l0aCB0aG9zZQot
ICogYXJndW1lbnRzLgotICoKLSAqIEV4YW1wbGU6Ci0gKgotICogICAgaW50IHggPSBmb2xseTo6
YXBwbHlUdXBsZShzdGQ6OnBsdXM8aW50PigpLCBzdGQ6Om1ha2VfdHVwbGUoMTIsIDEyKSk7Ci0g
KiAgICBBU1NFUlQoeCA9PSAyNCk7Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxm
dW5jdGlvbmFsPgotI2luY2x1ZGUgPHR1cGxlPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNs
dWRlIDxmb2xseS9VdGlsaXR5Lmg+Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLS8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KLQotbmFtZXNwYWNlIGRldGFpbCB7Ci1uYW1lc3BhY2UgYXBwbHlfdHVwbGUgewotCi1pbmxp
bmUgY29uc3RleHByIHN0ZDo6c2l6ZV90IHN1bSgpIHsKLSAgcmV0dXJuIDA7Ci19Ci10ZW1wbGF0
ZSA8dHlwZW5hbWUuLi4gQXJncz4KLWlubGluZSBjb25zdGV4cHIgc3RkOjpzaXplX3Qgc3VtKHN0
ZDo6c2l6ZV90IHYxLCBBcmdzLi4uIHZzKSB7Ci0gIHJldHVybiB2MSArIHN1bSh2cy4uLik7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUdXBsZXM+Ci1zdHJ1Y3QgVHVwbGVTaXplU3VtIHsK
LSAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHZhbHVlID0gc3VtKHN0ZDo6dHVwbGVfc2l6ZTxUdXBs
ZXM+Ojp2YWx1ZS4uLik7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHVwbGVzPgotdXNp
bmcgTWFrZUluZGV4U2VxdWVuY2VGcm9tVHVwbGUgPSBmb2xseTo6bWFrZV9pbmRleF9zZXF1ZW5j
ZTwKLSAgICBUdXBsZVNpemVTdW08dHlwZW5hbWUgc3RkOjpkZWNheTxUdXBsZXM+Ojp0eXBlLi4u
Pjo6dmFsdWU+OwotCi0vLyBUaGlzIGlzIHRvIGFsbG93IHVzaW5nIHRoaXMgd2l0aCBwb2ludGVy
cyB0byBtZW1iZXIgZnVuY3Rpb25zLAotLy8gd2hlcmUgdGhlIGZpcnN0IGFyZ3VtZW50IGluIHRo
ZSB0dXBsZSB3aWxsIGJlIHRoZSB0aGlzIHBvaW50ZXIuCi10ZW1wbGF0ZSA8Y2xhc3MgRj4KLWlu
bGluZSBjb25zdGV4cHIgRiYmIG1ha2VDYWxsYWJsZShGJiYgZikgewotICByZXR1cm4gc3RkOjpm
b3J3YXJkPEY+KGYpOwotfQotdGVtcGxhdGUgPGNsYXNzIE0sIGNsYXNzIEM+Ci1pbmxpbmUgY29u
c3RleHByIGF1dG8gbWFrZUNhbGxhYmxlKE0oQzo6KmQpKSAtPiBkZWNsdHlwZShzdGQ6Om1lbV9m
bihkKSkgewotICByZXR1cm4gc3RkOjptZW1fZm4oZCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBG
LCBjbGFzcyBUdXBsZSwgc3RkOjpzaXplX3QuLi4gSW5kZXhlcz4KLWlubGluZSBjb25zdGV4cHIg
YXV0byBjYWxsKEYmJiBmLCBUdXBsZSYmIHQsIGZvbGx5OjppbmRleF9zZXF1ZW5jZTxJbmRleGVz
Li4uPikKLSAgICAtPiBkZWNsdHlwZSgKLSAgICAgICAgc3RkOjpmb3J3YXJkPEY+KGYpKHN0ZDo6
Z2V0PEluZGV4ZXM+KHN0ZDo6Zm9yd2FyZDxUdXBsZT4odCkpLi4uKSkgewotICByZXR1cm4gc3Rk
Ojpmb3J3YXJkPEY+KGYpKHN0ZDo6Z2V0PEluZGV4ZXM+KHN0ZDo6Zm9yd2FyZDxUdXBsZT4odCkp
Li4uKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFR1cGxlLCBzdGQ6OnNpemVfdC4uLiBJbmRleGVz
PgotaW5saW5lIGNvbnN0ZXhwciBhdXRvIGZvcndhcmRUdXBsZShUdXBsZSYmIHQsIGZvbGx5Ojpp
bmRleF9zZXF1ZW5jZTxJbmRleGVzLi4uPikKLSAgICAtPiBkZWNsdHlwZSgKLSAgICAgICAgc3Rk
Ojpmb3J3YXJkX2FzX3R1cGxlKHN0ZDo6Z2V0PEluZGV4ZXM+KHN0ZDo6Zm9yd2FyZDxUdXBsZT4o
dCkpLi4uKSkgewotICByZXR1cm4gc3RkOjpmb3J3YXJkX2FzX3R1cGxlKHN0ZDo6Z2V0PEluZGV4
ZXM+KHN0ZDo6Zm9yd2FyZDxUdXBsZT4odCkpLi4uKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYXBw
bHlfdHVwbGUKLX0gLy8gbmFtZXNwYWNlIGRldGFpbAotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8qKgot
ICogSW52b2tlIGEgY2FsbGFibGUgb2JqZWN0IHdpdGggYSBzZXQgb2YgYXJndW1lbnRzIHBhc3Nl
ZCBhcyBhIHR1cGxlLCBvciBhCi0gKiAgICAgc2VyaWVzIG9mIHR1cGxlcwotICoKLSAqIEV4YW1w
bGU6IHRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGVxdWl2YWxlbnQKLSAqICAgICBmdW5jKDEsIDIs
IDMsICJmb28iKTsKLSAqICAgICBhcHBseVR1cGxlKGZ1bmMsIHN0ZDo6bWFrZV90dXBsZSgxLCAy
LCAzLCAiZm9vIikpOwotICogICAgIGFwcGx5VHVwbGUoZnVuYywgc3RkOjptYWtlX3R1cGxlKDEs
IDIpLCBzdGQ6Om1ha2VfdHVwbGUoMywgImZvbyIpKTsKLSAqLwotCi10ZW1wbGF0ZSA8Y2xhc3Mg
RiwgY2xhc3MuLi4gVHVwbGVzPgotaW5saW5lIGNvbnN0ZXhwciBhdXRvIGFwcGx5VHVwbGUoRiYm
IGYsIFR1cGxlcyYmLi4uIHQpCi0gICAgLT4gZGVjbHR5cGUoZGV0YWlsOjphcHBseV90dXBsZTo6
Y2FsbCgKLSAgICAgICAgZGV0YWlsOjphcHBseV90dXBsZTo6bWFrZUNhbGxhYmxlKHN0ZDo6Zm9y
d2FyZDxGPihmKSksCi0gICAgICAgIHN0ZDo6dHVwbGVfY2F0KGRldGFpbDo6YXBwbHlfdHVwbGU6
OmZvcndhcmRUdXBsZSgKLSAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxUdXBsZXM+KHQpLAotICAg
ICAgICAgICAgZGV0YWlsOjphcHBseV90dXBsZTo6TWFrZUluZGV4U2VxdWVuY2VGcm9tVHVwbGU8
VHVwbGVzPnt9KS4uLiksCi0gICAgICAgIGRldGFpbDo6YXBwbHlfdHVwbGU6Ok1ha2VJbmRleFNl
cXVlbmNlRnJvbVR1cGxlPFR1cGxlcy4uLj57fSkpIHsKLSAgcmV0dXJuIGRldGFpbDo6YXBwbHlf
dHVwbGU6OmNhbGwoCi0gICAgICBkZXRhaWw6OmFwcGx5X3R1cGxlOjptYWtlQ2FsbGFibGUoc3Rk
Ojpmb3J3YXJkPEY+KGYpKSwKLSAgICAgIHN0ZDo6dHVwbGVfY2F0KGRldGFpbDo6YXBwbHlfdHVw
bGU6OmZvcndhcmRUdXBsZSgKLSAgICAgICAgICBzdGQ6OmZvcndhcmQ8VHVwbGVzPih0KSwKLSAg
ICAgICAgICBkZXRhaWw6OmFwcGx5X3R1cGxlOjpNYWtlSW5kZXhTZXF1ZW5jZUZyb21UdXBsZTxU
dXBsZXM+e30pLi4uKSwKLSAgICAgIGRldGFpbDo6YXBwbHlfdHVwbGU6Ok1ha2VJbmRleFNlcXVl
bmNlRnJvbVR1cGxlPFR1cGxlcy4uLj57fSk7Ci19Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotbmFt
ZXNwYWNlIGFwcGx5X3R1cGxlIHsKLQotdGVtcGxhdGUgPGNsYXNzIEY+Ci1jbGFzcyBVbmN1cnJ5
IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IFVuY3VycnkoRiYmIGZ1bmMpIDogZnVuY18oc3RkOjpt
b3ZlKGZ1bmMpKSB7fQotICBleHBsaWNpdCBVbmN1cnJ5KGNvbnN0IEYmIGZ1bmMpIDogZnVuY18o
ZnVuYykge30KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVHVwbGU+Ci0gIGF1dG8gb3BlcmF0b3IoKShU
dXBsZSYmIHR1cGxlKSBjb25zdAotICAgICAgLT4gZGVjbHR5cGUoYXBwbHlUdXBsZShzdGQ6OmRl
Y2x2YWw8Rj4oKSwgc3RkOjpmb3J3YXJkPFR1cGxlPih0dXBsZSkpKSB7Ci0gICAgcmV0dXJuIGFw
cGx5VHVwbGUoZnVuY18sIHN0ZDo6Zm9yd2FyZDxUdXBsZT4odHVwbGUpKTsKLSAgfQotCi0gcHJp
dmF0ZToKLSAgRiBmdW5jXzsKLX07Ci19IC8vIG5hbWVzcGFjZSBhcHBseV90dXBsZQotfSAvLyBu
YW1lc3BhY2UgZGV0YWlsCi0KLS8qKgotICogV3JhcHMgYSBmdW5jdGlvbiB0YWtpbmcgTiBhcmd1
bWVudHMgaW50byBhIGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgYSB0dXBsZSBvZgotICogTiBhcmd1
bWVudHMuIE5vdGU6IFRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGFjY2VwdCBhbiBzdGQ6OnBhaXIg
aWYgTiA9PSAyLgotICoKLSAqIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgYmVsb3cgY29kZToKLSAq
Ci0gKiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnR1cGxlPGludCwgaW50LCBpbnQ+PiByb3dzID0gLi4u
OwotICogICAgYXV0byB0ZXN0ID0gW10oc3RkOjp0dXBsZTxpbnQsIGludCwgaW50PiYgcm93KSB7
Ci0gKiAgICAgIHJldHVybiBzdGQ6OmdldDwwPihyb3cpICogc3RkOjpnZXQ8MT4ocm93KSAqIHN0
ZDo6Z2V0PDI+KHJvdykgPT0gMjQ7Ci0gKiAgICB9OwotICogICAgYXV0byBmb3VuZCA9IHN0ZDo6
ZmluZF9pZihyb3dzLmJlZ2luKCksIHJvd3MuZW5kKCksIHRlc3QpOwotICoKLSAqCi0gKiAndGVz
dCcgY291bGQgYmUgcmV3cml0dGVuIGFzOgotICoKLSAqICAgIGF1dG8gdGVzdCA9Ci0gKiAgICAg
ICAgZm9sbHk6OnVuY3VycnkoW10oaW50IGEsIGludCBiLCBpbnQgYykgeyByZXR1cm4gYSAqIGIg
KiBjID09IDI0OyB9KTsKLSAqCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBGPgotYXV0byB1bmN1cnJ5
KEYmJiBmKQotICAgIC0+IGRldGFpbDo6YXBwbHlfdHVwbGU6OlVuY3Vycnk8dHlwZW5hbWUgc3Rk
OjpkZWNheTxGPjo6dHlwZT4gewotICByZXR1cm4gZGV0YWlsOjphcHBseV90dXBsZTo6VW5jdXJy
eTx0eXBlbmFtZSBzdGQ6OmRlY2F5PEY+Ojp0eXBlPigKLSAgICAgIHN0ZDo6Zm9yd2FyZDxGPihm
KSk7Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0Fzc3VtZS5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9mb2xseS9Bc3N1bWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhOTg2ZjVjMzcyMmQ0MThjZWM4MGQ1ZjU0NmE1NGI5YjMyNTA3YjMyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0Fzc3VtZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBM
aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu
c2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w
Ci0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
biB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICog
U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
c3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lu
Y2x1ZGUgPGZvbGx5L0Fzc3VtZS5oPgotCi0jaW5jbHVkZSA8Z2xvZy9sb2dnaW5nLmg+Ci0KLW5h
bWVzcGFjZSBmb2xseSB7Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotCi12b2lkIGFzc3VtZV9jaGVj
ayhib29sIGNvbmQpIHsKLSAgQ0hFQ0soY29uZCkgPDwgImNvbXBpbGVyLWhpbnQgYXNzdW1wdGlv
biBmYWlscyBhdCBydW50aW1lIjsKLX0KLQotfQotCi19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9Bc3N1bWUuaCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0Fzc3VtZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmOTA1ZGNlN2NhNzUyOGY2YTdhZTNiYjM3NGFiN2ViNzc4MGIzNGY5Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0Fzc3VtZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
NzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Y3N0ZGxpYj4KLQotI2luY2x1ZGUgPGZvbGx5L1BvcnRh
YmlsaXR5Lmg+Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotCi1l
eHRlcm4gdm9pZCBhc3N1bWVfY2hlY2soYm9vbCBjb25kKTsKLQotfQotCi0vKioKLSAqIEluZm9y
bSB0aGUgY29tcGlsZXIgdGhhdCB0aGUgYXJndW1lbnQgY2FuIGJlIGFzc3VtZWQgdHJ1ZS4gSXQg
aXMKLSAqIHVuZGVmaW5lZCBiZWhhdmlvciBpZiB0aGUgYXJndW1lbnQgaXMgbm90IGFjdHVhbGx5
IHRydWUsIHNvIHVzZQotICogd2l0aCBjYXJlLgotICoKLSAqIEltcGxlbWVudGVkIGFzIGEgZnVu
Y3Rpb24gaW5zdGVhZCBvZiBhIG1hY3JvIGJlY2F1c2UKLSAqIF9fYnVpbHRpbl9hc3N1bWUgZG9l
cyBub3QgZXZhbHVhdGUgaXRzIGFyZ3VtZW50IGF0IHJ1bnRpbWUsIHNvIGl0Ci0gKiBjYW5ub3Qg
YmUgdXNlZCB3aXRoIGV4cHJlc3Npb25zIHRoYXQgaGF2ZSBzaWRlLWVmZmVjdHMuCi0gKi8KLQot
Rk9MTFlfQUxXQVlTX0lOTElORSB2b2lkIGFzc3VtZShib29sIGNvbmQpIHsKLSAgaWYgKGtJc0Rl
YnVnKSB7Ci0gICAgZGV0YWlsOjphc3N1bWVfY2hlY2soY29uZCk7Ci0gIH0gZWxzZSB7Ci0jaWYg
ZGVmaW5lZChfX2NsYW5nX18pICAvLyBNdXN0IGdvIGZpcnN0IGJlY2F1c2UgQ2xhbmcgYWxzbyBk
ZWZpbmVzIF9fR05VQ19fLgotICAgIF9fYnVpbHRpbl9hc3N1bWUoY29uZCk7Ci0jZWxpZiBkZWZp
bmVkKF9fR05VQ19fKQotICAgIGlmICghY29uZCkgeyBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsg
fQotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICBfX2Fzc3VtZShjb25kKTsKLSNlbHNlCi0g
ICAgLy8gRG8gbm90aGluZy4KLSNlbmRpZgotICB9Ci19Ci0KLVtbbm9yZXR1cm5dXSBGT0xMWV9B
TFdBWVNfSU5MSU5FIHZvaWQgYXNzdW1lX3VucmVhY2hhYmxlKCkgewotICBhc3N1bWUoZmFsc2Up
OwotICAvLyBEbyBhIGJpdCBtb3JlIHRvIGdldCB0aGUgY29tcGlsZXIgdG8gdW5kZXJzdGFuZAot
ICAvLyB0aGF0IHRoaXMgZnVuY3Rpb24gcmVhbGx5IHdpbGwgbmV2ZXIgcmV0dXJuLgotI2lmIGRl
ZmluZWQoX19HTlVDX18pCi0gIF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpOwotI2VsaWYgZGVmaW5l
ZChfTVNDX1ZFUikKLSAgX19hc3N1bWUoMCk7Ci0jZWxzZQotICAvLyBXZWxsLCBpdCdzIGJldHRl
ciB0aGFuIG5vdGhpbmcuCi0gIHN0ZDo6YWJvcnQoKTsKLSNlbmRpZgotfQotCi19ICAvLyBuYW1l
c3BhY2UgZm9sbHkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2ZvbGx5L0F0b21pY1N0cnVjdC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvQXRvbWljU3RydWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQxNWQwZDkzMTJlOWI5NmIxZTI5MzUzNzI0YjA4MTlkNmIyOTIyMTEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZm9sbHkvQXRvbWljU3RydWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGlj
ZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNl
Iik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
YXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAot
ICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g
d3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNl
ZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNz
aW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8Zm9sbHkvVHJhaXRzLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvZGV0
YWlsL0F0b21pY1V0aWxzLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgotCi1uYW1lc3Bh
Y2UgZm9sbHkgewotCi1uYW1lc3BhY2UgZGV0YWlsIHsKLXRlbXBsYXRlIDxpbnQgTj4gc3RydWN0
IEF0b21pY1N0cnVjdEludFBpY2sge307Ci19Ci0KLS8vLyBBdG9taWNTdHJ1Y3Q8VD4gd29yayBs
aWtlIEMrKyBhdG9taWNzLCBidXQgY2FuIGJlIHVzZWQgb24gYW55IFBPRAotLy8vIHR5cGUgPD0g
OCBieXRlcy4KLXRlbXBsYXRlIDwKLSAgICB0eXBlbmFtZSBULAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lPiBjbGFzcyBBdG9tID0gc3RkOjphdG9taWMsCi0gICAgdHlwZW5hbWUgUmF3ID0gdHlwZW5h
bWUgZGV0YWlsOjpBdG9taWNTdHJ1Y3RJbnRQaWNrPHNpemVvZihUKT46OnR5cGU+Ci1jbGFzcyBB
dG9taWNTdHJ1Y3QgewotICBzdGF0aWNfYXNzZXJ0KGFsaWdub2YoVCkgPD0gYWxpZ25vZihSYXcp
LAotICAgICAgInRhcmdldCB0eXBlIGNhbid0IGhhdmUgc3RyaWN0ZXIgYWxpZ25tZW50IHRoYW4g
bWF0Y2hpbmcgaW50Iik7Ci0gIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpIDw9IHNpemVvZihSYXcp
LAotICAgICAgInVuZGVybHlpbmcgdHlwZSBpc24ndCBiaWcgZW5vdWdoIik7Ci0gIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSB8fAotICAgICAgICAgICAgICAgIGZvbGx5
OjpJc1RyaXZpYWxseUNvcHlhYmxlPFQ+Ojp2YWx1ZSwKLSAgICAgICJ0YXJnZXQgdHlwZSBtdXN0
IGJlIHRyaXZpYWxseSBjb3B5YWJsZSIpOwotCi0gIHVuaW9uIHsKLSAgICBBdG9tPFJhdz4gZGF0
YTsKLSAgICBUIHR5cGVkRGF0YTsKLSAgfTsKLQotICBzdGF0aWMgUmF3IGVuY29kZShUIHYpIG5v
ZXhjZXB0IHsKLSAgICAvLyB3ZSBleHBlY3QgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGF3YXkg
dGhlIG1lbWNweSwgYnV0IHdpdGhvdXQKLSAgICAvLyBpdCB3ZSB3b3VsZCB2aW9sYXRlIHN0cmlj
dCBhbGlhc2luZyBydWxlcwotICAgIFJhdyBkID0gMDsKLSAgICBtZW1jcHkoJmQsICZ2LCBzaXpl
b2YoVCkpOwotICAgIHJldHVybiBkOwotICB9Ci0KLSAgc3RhdGljIFQgZGVjb2RlKFJhdyBkKSBu
b2V4Y2VwdCB7Ci0gICAgVCB2OwotICAgIG1lbWNweSgmdiwgJmQsIHNpemVvZihUKSk7Ci0gICAg
cmV0dXJuIHY7Ci0gIH0KLQotIHB1YmxpYzoKLSAgQXRvbWljU3RydWN0KCkgPSBkZWZhdWx0Owot
ICB+QXRvbWljU3RydWN0KCkgPSBkZWZhdWx0OwotICBBdG9taWNTdHJ1Y3QoQXRvbWljU3RydWN0
PFQ+IGNvbnN0ICYpID0gZGVsZXRlOwotICBBdG9taWNTdHJ1Y3Q8VD4mIG9wZXJhdG9yPSAoQXRv
bWljU3RydWN0PFQ+IGNvbnN0ICYpID0gZGVsZXRlOwotCi0gIGNvbnN0ZXhwciAvKiBpbXBsaWNp
dCAqLyBBdG9taWNTdHJ1Y3QoVCB2KSBub2V4Y2VwdCA6IHR5cGVkRGF0YSh2KSB7fQotCi0gIGJv
b2wgaXNfbG9ja19mcmVlKCkgY29uc3Qgbm9leGNlcHQgewotICAgIHJldHVybiBkYXRhLmlzX2xv
Y2tfZnJlZSgpOwotICB9Ci0KLSAgYm9vbCBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZygKLSAgICAg
IFQmIHYwLAotICAgICAgVCB2MSwKLSAgICAgIHN0ZDo6bWVtb3J5X29yZGVyIG1vID0gc3RkOjpt
ZW1vcnlfb3JkZXJfc2VxX2NzdCkgbm9leGNlcHQgewotICAgIHJldHVybiBjb21wYXJlX2V4Y2hh
bmdlX3N0cm9uZygKLSAgICAgICAgdjAsIHYxLCBtbywgZGV0YWlsOjpkZWZhdWx0X2ZhaWx1cmVf
bWVtb3J5X29yZGVyKG1vKSk7Ci0gIH0KLSAgYm9vbCBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZygK
LSAgICAgIFQmIHYwLAotICAgICAgVCB2MSwKLSAgICAgIHN0ZDo6bWVtb3J5X29yZGVyIHN1Y2Nl
c3MsCi0gICAgICBzdGQ6Om1lbW9yeV9vcmRlciBmYWlsdXJlKSBub2V4Y2VwdCB7Ci0gICAgUmF3
IGQwID0gZW5jb2RlKHYwKTsKLSAgICBib29sIHJ2ID0gZGF0YS5jb21wYXJlX2V4Y2hhbmdlX3N0
cm9uZyhkMCwgZW5jb2RlKHYxKSwgc3VjY2VzcywgZmFpbHVyZSk7Ci0gICAgaWYgKCFydikgewot
ICAgICAgdjAgPSBkZWNvZGUoZDApOwotICAgIH0KLSAgICByZXR1cm4gcnY7Ci0gIH0KLQotICBi
b29sIGNvbXBhcmVfZXhjaGFuZ2Vfd2VhaygKLSAgICAgIFQmIHYwLAotICAgICAgVCB2MSwKLSAg
ICAgIHN0ZDo6bWVtb3J5X29yZGVyIG1vID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgbm9l
eGNlcHQgewotICAgIHJldHVybiBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoCi0gICAgICAgIHYwLCB2
MSwgbW8sIGRldGFpbDo6ZGVmYXVsdF9mYWlsdXJlX21lbW9yeV9vcmRlcihtbykpOwotICB9Ci0g
IGJvb2wgY29tcGFyZV9leGNoYW5nZV93ZWFrKAotICAgICAgVCYgdjAsCi0gICAgICBUIHYxLAot
ICAgICAgc3RkOjptZW1vcnlfb3JkZXIgc3VjY2VzcywKLSAgICAgIHN0ZDo6bWVtb3J5X29yZGVy
IGZhaWx1cmUpIG5vZXhjZXB0IHsKLSAgICBSYXcgZDAgPSBlbmNvZGUodjApOwotICAgIGJvb2wg
cnYgPSBkYXRhLmNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhkMCwgZW5jb2RlKHYxKSwgc3VjY2Vzcywg
ZmFpbHVyZSk7Ci0gICAgaWYgKCFydikgewotICAgICAgdjAgPSBkZWNvZGUoZDApOwotICAgIH0K
LSAgICByZXR1cm4gcnY7Ci0gIH0KLQotICBUIGV4Y2hhbmdlKFQgdiwgc3RkOjptZW1vcnlfb3Jk
ZXIgbW8gPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdCB7Ci0gICAgcmV0dXJu
IGRlY29kZShkYXRhLmV4Y2hhbmdlKGVuY29kZSh2KSwgbW8pKTsKLSAgfQotCi0gIC8qIGltcGxp
Y2l0ICovIG9wZXJhdG9yIFQgKCkgY29uc3Qgbm9leGNlcHQgewotICAgIHJldHVybiBkZWNvZGUo
ZGF0YSk7Ci0gIH0KLQotICBUIGxvYWQoc3RkOjptZW1vcnlfb3JkZXIgbW8gPSBzdGQ6Om1lbW9y
eV9vcmRlcl9zZXFfY3N0KSBjb25zdCBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuIGRlY29kZShkYXRh
LmxvYWQobW8pKTsKLSAgfQotCi0gIFQgb3BlcmF0b3I9IChUIHYpIG5vZXhjZXB0IHsKLSAgICBy
ZXR1cm4gZGVjb2RlKGRhdGEgPSBlbmNvZGUodikpOwotICB9Ci0KLSAgdm9pZCBzdG9yZShUIHYs
IHN0ZDo6bWVtb3J5X29yZGVyIG1vID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgbm9leGNl
cHQgewotICAgIGRhdGEuc3RvcmUoZW5jb2RlKHYpLCBtbyk7Ci0gIH0KLQotICAvLyBzdGQ6OmF0
b21pYyBhbHNvIHByb3ZpZGVzIHZvbGF0aWxlIHZlcnNpb25zIG9mIGFsbCBvZiB0aGUgYWNjZXNz
Ci0gIC8vIG1ldGhvZHMuICBUaGVzZSBhcmUgY2FsbGFibGUgb24gdm9sYXRpbGUgb2JqZWN0cywg
YW5kIGFsc28gY2FuCi0gIC8vIHRoZW9yZXRpY2FsbHkgaGF2ZSBkaWZmZXJlbnQgaW1wbGVtZW50
YXRpb25zIHRoYW4gdGhlaXIgbm9uLXZvbGF0aWxlCi0gIC8vIGNvdW50ZXJwYXJ0LiAgSWYgc29t
ZW9uZSB3YW50cyB0aGVtIGhlcmUgdGhleSBjYW4gZWFzaWx5IGJlIGFkZGVkCi0gIC8vIGJ5IGR1
cGxpY2F0aW5nIHRoZSBhYm92ZSBjb2RlIGFuZCB0aGUgY29ycmVzcG9uZGluZyB1bml0IHRlc3Rz
LgotfTsKLQotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBBdG9taWNT
dHJ1Y3RJbnRQaWNrPDE+IHsgdHlwZWRlZiB1aW50OF90IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgQXRvbWljU3RydWN0SW50UGljazwyPiB7IHR5cGVkZWYgdWludDE2X3QgdHlwZTsgfTsK
LXRlbXBsYXRlIDw+IHN0cnVjdCBBdG9taWNTdHJ1Y3RJbnRQaWNrPDM+IHsgdHlwZWRlZiB1aW50
MzJfdCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEF0b21pY1N0cnVjdEludFBpY2s8ND4g
eyB0eXBlZGVmIHVpbnQzMl90IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQXRvbWljU3Ry
dWN0SW50UGljazw1PiB7IHR5cGVkZWYgdWludDY0X3QgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBBdG9taWNTdHJ1Y3RJbnRQaWNrPDY+IHsgdHlwZWRlZiB1aW50NjRfdCB0eXBlOyB9Owot
dGVtcGxhdGUgPD4gc3RydWN0IEF0b21pY1N0cnVjdEludFBpY2s8Nz4geyB0eXBlZGVmIHVpbnQ2
NF90IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQXRvbWljU3RydWN0SW50UGljazw4PiB7
IHR5cGVkZWYgdWludDY0X3QgdHlwZTsgfTsKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLX0g
Ly8gbmFtZXNwYWNlIGZvbGx5CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9mb2xseS9CYXRvbi5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvQmF0b24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMzMjM5
MTUzZDg1NjdmYjM1NjI1OGM0MmY0ODRkYjNlZThiMDM0My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9mb2xseS9CYXRvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzczICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRo
ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1h
eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBo
dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3Mg
cmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3
YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
biAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2Ug
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBs
aW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+
Ci0jaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPHRocmVhZD4KLQotI2luY2x1ZGUgPGZvbGx5
L2RldGFpbC9GdXRleC5oPgotI2luY2x1ZGUgPGZvbGx5L2RldGFpbC9NZW1vcnlJZGxlci5oPgot
I2luY2x1ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L0FzbS5oPgotCi1uYW1lc3BhY2UgZm9sbHkgewot
Ci0vLy8gQSBCYXRvbiBhbGxvd3MgYSB0aHJlYWQgdG8gYmxvY2sgb25jZSBhbmQgYmUgYXdva2Vu
LiBUaGUgc2luZ2xlCi0vLy8gcG9zdGVyIHZlcnNpb24gKHdpdGggU2luZ2xlUG9zdGVyID09IHRy
dWUpIGNhcHR1cmVzIGEgc2luZ2xlCi0vLy8gaGFuZG9mZiwgYW5kIGR1cmluZyBpdHMgbGlmZWN5
Y2xlIChmcm9tIGNvbnN0cnVjdGlvbi9yZXNldCB0bwotLy8vIGRlc3RydWN0aW9uL3Jlc2V0KSBh
IGJhdG9uIG11c3QgZWl0aGVyIGJlIHBvc3QoKWVkIGFuZCB3YWl0KCllZAotLy8vIGV4YWN0bHkg
b25jZSBlYWNoLCBvciBub3QgYXQgYWxsLgotLy8vCi0vLy8gVGhlIG11bHRpLXBvc3RlciB2ZXJz
aW9uIChTaW5nbGVQb3N0ZXIgPT0gZmFsc2UpIGFsbG93cyBtdWx0aXBsZQotLy8vIGNvbmN1cnJl
bnQgaGFuZG9mZiBhdHRlbXB0cywgdGhlIGZpcnN0IG9mIHdoaWNoIGNvbXBsZXRlcyB0aGUKLS8v
LyBoYW5kb2ZmIGFuZCB0aGUgcmVzdCBpZiBhbnkgYXJlIGlkZW1wb3RlbnQuCi0vLy8KLS8vLyBC
YXRvbiBpbmNsdWRlcyBubyBpbnRlcm5hbCBwYWRkaW5nLCBhbmQgaXMgb25seSA0IGJ5dGVzIGlu
IHNpemUuCi0vLy8gQW55IGFsaWdubWVudCBvciBwYWRkaW5nIHRvIGF2b2lkIGZhbHNlIHNoYXJp
bmcgaXMgdXAgdG8gdGhlIHVzZXIuCi0vLy8KLS8vLyBUaGlzIGlzIGJhc2ljYWxseSBhIHN0cmlw
cGVkLWRvd24gc2VtYXBob3JlIHRoYXQgc3VwcG9ydHMgKG9ubHkgYQotLy8vIHNpbmdsZSBjYWxs
IHRvIHNlbV9wb3N0LCB3aGVuIFNpbmdsZVBvc3RlciA9PSB0cnVlKSBhbmQgYSBzaW5nbGUKLS8v
LyBjYWxsIHRvIHNlbV93YWl0LgotLy8vCi0vLy8gVGhlIG5vbi1ibG9ja2luZyB2ZXJzaW9uIChC
bG9ja2luZyA9PSBmYWxzZSkgcHJvdmlkZXMgbW9yZSBzcGVlZAotLy8vIGJ5IHVzaW5nIG9ubHkg
bG9hZCBhY3F1aXJlIGFuZCBzdG9yZSByZWxlYXNlIG9wZXJhdGlvbnMgaW4gdGhlCi0vLy8gY3Jp
dGljYWwgcGF0aCwgYXQgdGhlIGNvc3Qgb2YgZGlzYWxsb3dpbmcgYmxvY2tpbmcgYW5kIHRpbWlu
ZyBvdXQuCi0vLy8KLS8vLyBUaGUgY3VycmVudCBwb3NpeCBzZW1hcGhvcmUgc2VtX3QgaXNuJ3Qg
dG9vIGJhZCwgYnV0IHRoaXMgcHJvdmlkZXMKLS8vLyBtb3JlIGEgYml0IG1vcmUgc3BlZWQsIGlu
bGluaW5nLCBzbWFsbGVyIHNpemUsIGEgZ3VhcmFudGVlIHRoYXQKLS8vLyB0aGUgaW1wbGVtZW50
YXRpb24gd29uJ3QgY2hhbmdlLCBhbmQgY29tcGF0aWJpbGl0eSB3aXRoCi0vLy8gRGV0ZXJtaW5p
c3RpY1NjaGVkdWxlLiAgQnkgaGF2aW5nIGEgbXVjaCBtb3JlIHJlc3RyaWN0aXZlCi0vLy8gbGlm
ZWN5Y2xlIHdlIGNhbiBhbHNvIGFkZCBhIGJ1bmNoIG9mIGFzc2VydGlvbnMgdGhhdCBjYW4gaGVs
cCB0bwotLy8vIGNhdGNoIHJhY2UgY29uZGl0aW9ucyBhaGVhZCBvZiB0aW1lLgotdGVtcGxhdGUg
PAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3MgQXRvbSA9IHN0ZDo6YXRvbWljLAotICAg
IGJvb2wgU2luZ2xlUG9zdGVyID0gdHJ1ZSwgLy8gIHNpbmdsZSB2cyBtdWx0aXBsZSBwb3N0ZXJz
Ci0gICAgYm9vbCBCbG9ja2luZyA9IHRydWU+IC8vIGJsb2NraW5nIHZzIHNwaW5uaW5nCi1zdHJ1
Y3QgQmF0b24gewotICBjb25zdGV4cHIgQmF0b24oKSA6IHN0YXRlXyhJTklUKSB7fQotCi0gIEJh
dG9uKEJhdG9uIGNvbnN0JikgPSBkZWxldGU7Ci0gIEJhdG9uJiBvcGVyYXRvcj0oQmF0b24gY29u
c3QmKSA9IGRlbGV0ZTsKLQotICAvLy8gSXQgaXMgYW4gZXJyb3IgdG8gZGVzdHJveSBhIEJhdG9u
IG9uIHdoaWNoIGEgdGhyZWFkIGlzIGN1cnJlbnRseQotICAvLy8gd2FpdCgpaW5nLiAgSW4gcHJh
Y3RpY2UgdGhpcyBtZWFucyB0aGF0IHRoZSB3YWl0ZXIgdXN1YWxseSB0YWtlcwotICAvLy8gcmVz
cG9uc2liaWxpdHkgZm9yIGRlc3Ryb3lpbmcgdGhlIEJhdG9uLgotICB+QmF0b24oKSB7Ci0gICAg
Ly8gVGhlIGRvY2Jsb2NrIGZvciB0aGlzIGZ1bmN0aW9uIHNheXMgdGhhdCBpdCBjYW4ndCBiZSBj
YWxsZWQgd2hlbgotICAgIC8vIHRoZXJlIGlzIGEgY29uY3VycmVudCB3YWl0ZXIuICBXZSBhc3N1
bWUgYSBzdHJvbmcgdmVyc2lvbiBvZiB0aGlzCi0gICAgLy8gcmVxdWlyZW1lbnQgaW4gd2hpY2gg
dGhlIGNhbGxlciBtdXN0IF9rbm93XyB0aGF0IHRoaXMgaXMgdHJ1ZSwgdGhleQotICAgIC8vIGFy
ZSBub3QgYWxsb3dlZCB0byBiZSBtZXJlbHkgbHVja3kuICBJZiB0d28gdGhyZWFkcyBhcmUgaW52
b2x2ZWQsCi0gICAgLy8gdGhlIGRlc3Ryb3lpbmcgdGhyZWFkIG11c3QgYWN0dWFsbHkgaGF2ZSBz
eW5jaHJvbml6ZWQgd2l0aCB0aGUKLSAgICAvLyB3YWl0aW5nIHRocmVhZCBhZnRlciB3YWl0KCkg
cmV0dXJuZWQuICBUbyBjb252ZXkgY2F1c2FsaXR5IHRoZSB0aGUKLSAgICAvLyB3YWl0aW5nIHRo
cmVhZCBtdXN0IGhhdmUgdXNlZCByZWxlYXNlIHNlbWFudGljcyBhbmQgdGhlIGRlc3Ryb3lpbmcK
LSAgICAvLyB0aHJlYWQgbXVzdCBoYXZlIHVzZWQgYWNxdWlyZSBzZW1hbnRpY3MgZm9yIHRoYXQg
Y29tbXVuaWNhdGlvbiwKLSAgICAvLyBzbyB3ZSBhcmUgZ3VhcmFudGVlZCB0byBzZWUgdGhlIHBv
c3Qtd2FpdCgpIHZhbHVlIG9mIHN0YXRlXywKLSAgICAvLyB3aGljaCBjYW5ub3QgYmUgV0FJVElO
Ry4KLSAgICAvLwotICAgIC8vIE5vdGUgdGhhdCBzaW5jZSB3ZSBvbmx5IGNhcmUgYWJvdXQgYSBz
aW5nbGUgbWVtb3J5IGxvY2F0aW9uLAotICAgIC8vIHRoZSBvbmx5IHR3byBwbGF1c2libGUgbWVt
b3J5IG9yZGVycyBoZXJlIGFyZSByZWxheGVkIGFuZCBzZXFfY3N0LgotICAgIGFzc2VydChzdGF0
ZV8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSAhPSBXQUlUSU5HKTsKLSAgfQotCi0g
IC8vLyBFcXVpdmFsZW50IHRvIGRlc3Ryb3lpbmcgdGhlIEJhdG9uIGFuZCBjcmVhdGluZyBhIG5l
dyBvbmUuICBJdCBpcwotICAvLy8gYSBidWcgdG8gY2FsbCB0aGlzIHdoaWxlIHRoZXJlIGlzIGEg
d2FpdGluZyB0aHJlYWQsIHNvIGluIHByYWN0aWNlCi0gIC8vLyB0aGUgd2FpdGVyIHdpbGwgYmUg
dGhlIG9uZSB0aGF0IHJlc2V0cyB0aGUgYmF0b24uCi0gIHZvaWQgcmVzZXQoKSB7Ci0gICAgLy8g
U2VlIH5CYXRvbiBmb3IgYSBkaXNjdXNzaW9uIGFib3V0IHdoeSByZWxheGVkIGlzIG9rYXkgaGVy
ZQotICAgIGFzc2VydChzdGF0ZV8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSAhPSBX
QUlUSU5HKTsKLQotICAgIC8vIFdlIHVzZSBhIHNpbWlsYXIgYXJndW1lbnQgdG8ganVzdGlmeSB0
aGUgdXNlIG9mIGEgcmVsYXhlZCBzdG9yZQotICAgIC8vIGhlcmUuICBTaW5jZSBib3RoIHdhaXQo
KSBhbmQgcG9zdCgpIGFyZSByZXF1aXJlZCB0byBiZSBjYWxsZWQKLSAgICAvLyBvbmx5IG9uY2Ug
cGVyIGxpZmV0aW1lLCBubyB0aHJlYWQgY2FuIGFjdHVhbGx5IGNhbGwgdGhvc2UgbWV0aG9kcwot
ICAgIC8vIGNvcnJlY3RseSBhZnRlciBhIHJlc2V0KCkgdW5sZXNzIGl0IHN5bmNocm9uaXplcyB3
aXRoIHRoZSB0aHJlYWQKLSAgICAvLyB0aGF0IHBlcmZvcm1lZCB0aGUgcmVzZXQoKS4gIElmIGEg
cG9zdCgpIG9yIHdhaXQoKSBvbiBhbm90aGVyIHRocmVhZAotICAgIC8vIGRpZG4ndCBzeW5jaHJv
bml6ZSwgdGhlbiByZWdhcmRsZXNzIG9mIHdoYXQgb3BlcmF0aW9uIHdlIHBlcmZvcm1lZAotICAg
IC8vIGhlcmUgdGhlcmUgd291bGQgYmUgYSByYWNlIG9uIHByb3BlciB1c2Ugb2YgdGhlIEJhdG9u
J3Mgc3BlYwotICAgIC8vIChhbHRob3VnaCBub3Qgb24gYW55IHBhcnRpY3VsYXIgbG9hZCBhbmQg
c3RvcmUpLiAgUHV0IGFub3RoZXIgd2F5LAotICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gc3luY2hy
b25pemUgaGVyZSBiZWNhdXNlIGFueWJvZHkgdGhhdCBtaWdodCByZWx5Ci0gICAgLy8gb24gc3Vj
aCBzeW5jaHJvbml6YXRpb24gaXMgcmVxdWlyZWQgYnkgdGhlIGJhdG9uIHJ1bGVzIHRvIHBlcmZv
cm0KLSAgICAvLyBhbiBhZGRpdGlvbmFsIHN5bmNocm9uaXphdGlvbiB0aGF0IGhhcyB0aGUgZGVz
aXJlZCBlZmZlY3QgYW55d2F5LgotICAgIC8vCi0gICAgLy8gVGhlcmUgaXMgYWN0dWFsbHkgYSBz
aW1pbGFyIGFyZ3VtZW50IHRvIGJlIG1hZGUgYWJvdXQgdGhlCi0gICAgLy8gY29uc3RydWN0b3Is
IGluIHdoaWNoIHRoZSBmZW5jZWxlc3MgY29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24KLSAgICAv
LyBvZiBzdGF0ZV8gaXMgcGlnZ3liYWNrZWQgb24gd2hhdGV2ZXIgc3luY2hyb25pemF0aW9uIG1l
Y2hhbmlzbQotICAgIC8vIGRpc3RyaWJ1dGVzIGtub3dsZWRnZSBvZiB0aGUgQmF0b24ncyBleGlz
dGVuY2UKLSAgICBzdGF0ZV8uc3RvcmUoSU5JVCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7
Ci0gIH0KLQotICAvLy8gQ2F1c2VzIHdhaXQoKSB0byB3YWtlIHVwLiAgRm9yIGVhY2ggbGlmZXRp
bWUgb2YgYSBCYXRvbiAod2hlcmUgYQotICAvLy8gbGlmZXRpbWUgc3RhcnRzIGF0IGNvbnN0cnVj
dGlvbiBvciByZXNldCgpIGFuZCBlbmRzIGF0Ci0gIC8vLyBkZXN0cnVjdGlvbiBvciByZXNldCgp
KSB0aGVyZSBjYW4gYmUgYXQgbW9zdCBvbmUgY2FsbCB0byBwb3N0KCksCi0gIC8vLyBpbiB0aGUg
c2luZ2xlIHBvc3RlciB2ZXJzaW9uLiAgQW55IHRocmVhZCBtYXkgY2FsbCBwb3N0KCkuCi0gIHZv
aWQgcG9zdCgpIHsKLSAgICBpZiAoIUJsb2NraW5nKSB7Ci0gICAgICAvLy8gTm9uLWJsb2NraW5n
IHZlcnNpb24KLSAgICAgIC8vLwotICAgICAgYXNzZXJ0KFsmXSB7Ci0gICAgICAgIGF1dG8gc3Rh
dGUgPSBzdGF0ZV8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICAgICAgcmV0
dXJuIChzdGF0ZSA9PSBJTklUIHx8IHN0YXRlID09IEVBUkxZX0RFTElWRVJZKTsKLSAgICAgIH0o
KSk7Ci0gICAgICBzdGF0ZV8uc3RvcmUoRUFSTFlfREVMSVZFUlksIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGVhc2UpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vLyBCbG9ja2luZyB2ZXJz
aW9ucwotICAgIC8vLwotICAgIGlmIChTaW5nbGVQb3N0ZXIpIHsKLSAgICAgIC8vLyBTaW5nbGUg
cG9zdGVyIHZlcnNpb24KLSAgICAgIC8vLwotICAgICAgdWludDMyX3QgYmVmb3JlID0gc3RhdGVf
LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7Ci0KLSAgICAgIGFzc2VydChiZWZvcmUg
PT0gSU5JVCB8fCBiZWZvcmUgPT0gV0FJVElORyB8fCBiZWZvcmUgPT0gVElNRURfT1VUKTsKLQot
ICAgICAgaWYgKGJlZm9yZSA9PSBJTklUICYmCi0gICAgICAgICAgc3RhdGVfLmNvbXBhcmVfZXhj
aGFuZ2Vfc3Ryb25nKGJlZm9yZSwgRUFSTFlfREVMSVZFUlkpKSB7Ci0gICAgICAgIHJldHVybjsK
LSAgICAgIH0KLQotICAgICAgYXNzZXJ0KGJlZm9yZSA9PSBXQUlUSU5HIHx8IGJlZm9yZSA9PSBU
SU1FRF9PVVQpOwotCi0gICAgICBpZiAoYmVmb3JlID09IFRJTUVEX09VVCkgewotICAgICAgICBy
ZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGFzc2VydChiZWZvcmUgPT0gV0FJVElORyk7Ci0gICAg
ICBzdGF0ZV8uc3RvcmUoTEFURV9ERUxJVkVSWSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7
Ci0gICAgICBzdGF0ZV8uZnV0ZXhXYWtlKDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLy8gTXVs
dGktcG9zdGVyIHZlcnNpb24KLSAgICAgIC8vLwotICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
ICAgdWludDMyX3QgYmVmb3JlID0gc3RhdGVfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWly
ZSk7Ci0KLSAgICAgICAgaWYgKGJlZm9yZSA9PSBJTklUICYmCi0gICAgICAgICAgICBzdGF0ZV8u
Y29tcGFyZV9leGNoYW5nZV9zdHJvbmcoYmVmb3JlLCBFQVJMWV9ERUxJVkVSWSkpIHsKLSAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYmVmb3JlID09IFRJTUVEX09V
VCkgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChiZWZvcmUg
PT0gRUFSTFlfREVMSVZFUlkgfHwgYmVmb3JlID09IExBVEVfREVMSVZFUlkpIHsKLSAgICAgICAg
ICAvLyBUaGUgcmVhc29uIGZvciBub3Qgc2ltcGx5IHJldHVybmluZyAod2l0aG91dCB0aGUgZm9s
bG93aW5nCi0gICAgICAgICAgLy8gYXRvbWljIG9wZXJhdGlvbikgaXMgdG8gYXZvaWQgdGhlIGZv
bGxvd2luZyBjYXNlOgotICAgICAgICAgIC8vCi0gICAgICAgICAgLy8gIFQxOiAgICAgICAgICAg
ICBUMjogICAgICAgICAgICAgVDM6Ci0gICAgICAgICAgLy8gIGxvY2FsMS5wb3N0KCk7ICBsb2Nh
bDIucG9zdCgpOyAgZ2xvYmFsLndhaXQoKTsKLSAgICAgICAgICAvLyAgZ2xvYmFsLnBvc3QoKTsg
IGdsb2JhbC5wb3N0KCk7ICBsb2NhbDEudHJ5X3dhaXQoKSA9PSB0cnVlOwotICAgICAgICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsMi50cnlfd2FpdCgpID09IGZh
bHNlOwotICAgICAgICAgIC8vCi0gICAgICAgICAgaWYgKHN0YXRlXy5mZXRjaF9hZGQoMCkgIT0g
YmVmb3JlKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0KGJlZm9yZSA9PSBXQUlUSU5HKTsK
LSAgICAgICAgaWYgKCFzdGF0ZV8uY29tcGFyZV9leGNoYW5nZV93ZWFrKGJlZm9yZSwgTEFURV9E
RUxJVkVSWSkpIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBzdGF0
ZV8uZnV0ZXhXYWtlKDEpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0K
LSAgLy8vIFdhaXRzIHVudGlsIHBvc3QoKSBoYXMgYmVlbiBjYWxsZWQgaW4gdGhlIGN1cnJlbnQg
QmF0b24gbGlmZXRpbWUuCi0gIC8vLyBNYXkgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSBkdXJpbmcg
YSBCYXRvbiBsaWZldGltZSAoY29uc3RydWN0aW9uCi0gIC8vLyB8cmVzZXQgdW50aWwgZGVzdHJ1
Y3Rpb258cmVzZXQpLiAgSWYgcG9zdCBpcyBjYWxsZWQgYmVmb3JlIHdhaXQgaW4KLSAgLy8vIHRo
ZSBjdXJyZW50IGxpZmV0aW1lIHRoZW4gdGhpcyBtZXRob2QgcmV0dXJucyBpbW1lZGlhdGVseS4K
LSAgLy8vCi0gIC8vLyBUaGUgcmVzdHJpY3Rpb24gdGhhdCB0aGVyZSBjYW4gYmUgYXQgbW9zdCBv
bmUgd2FpdCgpIHBlciBsaWZldGltZQotICAvLy8gY291bGQgYmUgcmVsYXhlZCBzb21ld2hhdCB3
aXRob3V0IGFueSBwZXJmIG9yIHNpemUgcmVncmVzc2lvbnMsCi0gIC8vLyBidXQgYnkgbWFraW5n
IHRoaXMgY29uZGl0aW9uIHZlcnkgcmVzdHJpY3RpdmUgd2UgY2FuIHByb3ZpZGUgYmV0dGVyCi0g
IC8vLyBjaGVja2luZyBpbiBkZWJ1ZyBidWlsZHMuCi0gIHZvaWQgd2FpdCgpIHsKLSAgICBpZiAo
c3BpbldhaXRGb3JFYXJseURlbGl2ZXJ5KCkpIHsKLSAgICAgIGFzc2VydChzdGF0ZV8ubG9hZChz
dGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSA9PSBFQVJMWV9ERUxJVkVSWSk7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKCFCbG9ja2luZykgewotICAgICAgd2hpbGUgKCF0cnlfd2Fp
dCgpKSB7Ci0gICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7Ci0gICAgICB9Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gZ3Vlc3Mgd2UgaGF2ZSB0byBibG9jayA6KAotICAg
IHVpbnQzMl90IGV4cGVjdGVkID0gSU5JVDsKLSAgICBpZiAoIXN0YXRlXy5jb21wYXJlX2V4Y2hh
bmdlX3N0cm9uZyhleHBlY3RlZCwgV0FJVElORykpIHsKLSAgICAgIC8vIENBUyBmYWlsZWQsIGxh
c3QgbWludXRlIHJlcHJpZXZlCi0gICAgICBhc3NlcnQoZXhwZWN0ZWQgPT0gRUFSTFlfREVMSVZF
UlkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBk
ZXRhaWw6Ok1lbW9yeUlkbGVyOjpmdXRleFdhaXQoc3RhdGVfLCBXQUlUSU5HKTsKLQotICAgICAg
Ly8gc3RhdGVfIGlzIHRoZSB0cnV0aCBldmVuIGlmIEZVVEVYX1dBSVQgcmVwb3J0ZWQgYSBtYXRj
aGluZwotICAgICAgLy8gRlVURVhfV0FLRSwgc2luY2Ugd2UgYXJlbid0IHVzaW5nIHR5cGUtc3Rh
YmxlIHN0b3JhZ2UgYW5kIHdlCi0gICAgICAvLyBkb24ndCBndWFyYW50ZWUgcmV1c2UuICBUaGUg
c2NlbmFyaW8gZ29lcyBsaWtlIHRoaXM6IHRocmVhZAotICAgICAgLy8gQSdzIGxhc3QgdG91Y2gg
b2YgYSBCYXRvbiBpcyBhIGNhbGwgdG8gd2FrZSgpLCB3aGljaCBzdG9yZXMKLSAgICAgIC8vIExB
VEVfREVMSVZFUlkgYW5kIGdldHMgYW4gdW5sdWNreSBjb250ZXh0IHN3aXRjaCBiZWZvcmUgZGVs
aXZlcmluZwotICAgICAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgZnV0ZXhXYWtlLiAgVGhyZWFkIEIg
c2VlcyBMQVRFX0RFTElWRVJZCi0gICAgICAvLyB3aXRob3V0IGNvbnN1bWluZyBhIGZ1dGV4IGV2
ZW50LCBiZWNhdXNlIGl0IGNhbGxzIGZ1dGV4V2FpdAotICAgICAgLy8gd2l0aCBhbiBleHBlY3Rl
ZCB2YWx1ZSBvZiBXQUlUSU5HIGFuZCBoZW5jZSBkb2Vzbid0IGdvIHRvIHNsZWVwLgotICAgICAg
Ly8gQiByZXR1cm5zLCBzbyB0aGUgQmF0b24ncyBtZW1vcnkgaXMgcmV1c2VkIGFuZCBiZWNvbWVz
IGFub3RoZXIKLSAgICAgIC8vIEJhdG9uIChvciBhIHJldXNlIG9mIHRoaXMgb25lKS4gIEIgY2Fs
bHMgZnV0ZXhXYWl0IG9uIHRoZSBuZXcKLSAgICAgIC8vIEJhdG9uIGxpZmV0aW1lLCB0aGVuIEEg
d2FrZXMgdXAgYW5kIGRlbGl2ZXJzIGEgc3B1cmlvdXMgZnV0ZXhXYWtlCi0gICAgICAvLyB0byB0
aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24uICBCJ3MgZnV0ZXhXYWl0IHdpbGwgdGhlbiByZXBvcnQg
YQotICAgICAgLy8gY29uc3VtZWQgd2FrZSBldmVudCBldmVuIHRob3VnaCBzdGF0ZV8gaXMgc3Rp
bGwgV0FJVElORy4KLSAgICAgIC8vCi0gICAgICAvLyBJdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBh
ZGQgYW4gZXh0cmEgc3RhdGVfIGRhbmNlIHRvIGNvbW11bmljYXRlCi0gICAgICAvLyB0aGF0IHRo
ZSBmdXRleFdha2UgaGFzIGJlZW4gc2VudCBzbyB0aGF0IHdlIGNhbiBiZSBzdXJlIHRvIGNvbnN1
bWUKLSAgICAgIC8vIGl0IGJlZm9yZSByZXR1cm5pbmcsIGJ1dCB0aGF0IHdvdWxkIGJlIGEgcGVy
ZiBhbmQgY29tcGxleGl0eSBoaXQuCi0gICAgICB1aW50MzJfdCBzID0gc3RhdGVfLmxvYWQoc3Rk
OjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7Ci0gICAgICBhc3NlcnQocyA9PSBXQUlUSU5HIHx8IHMg
PT0gTEFURV9ERUxJVkVSWSk7Ci0KLSAgICAgIGlmIChzID09IExBVEVfREVMSVZFUlkpIHsKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgLy8gcmV0cnkKLSAgICB9Ci0gIH0KLQotICAv
Ly8gU2ltaWxhciB0byB3YWl0LCBidXQgd2l0aCBhIHRpbWVvdXQuIFRoZSB0aHJlYWQgaXMgdW5i
bG9ja2VkIGlmIHRoZQotICAvLy8gdGltZW91dCBleHBpcmVzLgotICAvLy8gTm90ZTogT25seSBh
IHNpbmdsZSBjYWxsIHRvIHRpbWVkX3dhaXQvd2FpdCBpcyBhbGxvd2VkIGR1cmluZyBhIGJhdG9u
J3MKLSAgLy8vIGxpZmUtY3ljbGUgKGZyb20gY29uc3RydWN0aW9uL3Jlc2V0IHRvIGRlc3RydWN0
aW9uL3Jlc2V0KS4gSW4gb3RoZXIKLSAgLy8vIHdvcmRzLCBhZnRlciB0aW1lZF93YWl0IHRoZSBj
YWxsZXIgY2FuJ3QgaW52b2tlIHdhaXQvdGltZWRfd2FpdC90cnlfd2FpdAotICAvLy8gYWdhaW4g
b24gdGhlIHNhbWUgYmF0b24gd2l0aG91dCByZXNldHRpbmcgaXQuCi0gIC8vLwotICAvLy8gQHBh
cmFtICBkZWFkbGluZSAgICAgIFRpbWUgdW50aWwgd2hpY2ggdGhlIHRocmVhZCBjYW4gYmxvY2sK
LSAgLy8vIEByZXR1cm4gICAgICAgICAgICAgICB0cnVlIGlmIHRoZSBiYXRvbiB3YXMgcG9zdGVk
IHRvIGJlZm9yZSB0aW1lb3V0LAotICAvLy8gICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIG90
aGVyd2lzZQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xvY2ssIHR5cGVuYW1lIER1cmF0aW9uID0g
dHlwZW5hbWUgQ2xvY2s6OmR1cmF0aW9uPgotICBib29sIHRpbWVkX3dhaXQoY29uc3Qgc3RkOjpj
aHJvbm86OnRpbWVfcG9pbnQ8Q2xvY2ssRHVyYXRpb24+JiBkZWFkbGluZSkgewotICAgIHN0YXRp
Y19hc3NlcnQoQmxvY2tpbmcsICJOb24tYmxvY2tpbmcgQmF0b24gZG9lcyBub3Qgc3VwcG9ydCB0
aW1lZCB3YWl0LiIpOwotCi0gICAgaWYgKHNwaW5XYWl0Rm9yRWFybHlEZWxpdmVyeSgpKSB7Ci0g
ICAgICBhc3NlcnQoc3RhdGVfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgPT0gRUFS
TFlfREVMSVZFUlkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gZ3Vlc3Mg
d2UgaGF2ZSB0byBibG9jayA6KAotICAgIHVpbnQzMl90IGV4cGVjdGVkID0gSU5JVDsKLSAgICBp
ZiAoIXN0YXRlXy5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhleHBlY3RlZCwgV0FJVElORykpIHsK
LSAgICAgIC8vIENBUyBmYWlsZWQsIGxhc3QgbWludXRlIHJlcHJpZXZlCi0gICAgICBhc3NlcnQo
ZXhwZWN0ZWQgPT0gRUFSTFlfREVMSVZFUlkpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgIGF1dG8gcnYgPSBzdGF0ZV8uZnV0ZXhXYWl0VW50
aWwoV0FJVElORywgZGVhZGxpbmUpOwotICAgICAgaWYgKHJ2ID09IGZvbGx5OjpkZXRhaWw6OkZ1
dGV4UmVzdWx0OjpUSU1FRE9VVCkgewotICAgICAgICBzdGF0ZV8uc3RvcmUoVElNRURfT1VULCBz
dGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
fQotCi0gICAgICB1aW50MzJfdCBzID0gc3RhdGVfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNx
dWlyZSk7Ci0gICAgICBhc3NlcnQocyA9PSBXQUlUSU5HIHx8IHMgPT0gTEFURV9ERUxJVkVSWSk7
Ci0gICAgICBpZiAocyA9PSBMQVRFX0RFTElWRVJZKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vLyBTaW1pbGFyIHRvIHRpbWVkX3dhaXQsIGJ1dCB3
aXRoIGEgZHVyYXRpb24uCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9jayA9IHN0ZDo6Y2hyb25v
OjpzdGVhZHlfY2xvY2ssIHR5cGVuYW1lIER1cmF0aW9uPgotICBib29sIHRpbWVkX3dhaXQoY29u
c3QgRHVyYXRpb24mIGR1cmF0aW9uKSB7Ci0gICAgYXV0byBkZWFkbGluZSA9IENsb2NrOjpub3co
KSArIGR1cmF0aW9uOwotICAgIHJldHVybiB0aW1lZF93YWl0KGRlYWRsaW5lKTsKLSAgfQotCi0g
IC8vLyBTaW1pbGFyIHRvIHdhaXQsIGJ1dCBkb2Vzbid0IGJsb2NrIHRoZSB0aHJlYWQgaWYgaXQg
aGFzbid0IGJlZW4gcG9zdGVkLgotICAvLy8KLSAgLy8vIHRyeV93YWl0IGhhcyB0aGUgZm9sbG93
aW5nIHNlbWFudGljczoKLSAgLy8vIC0gSXQgaXMgb2sgdG8gY2FsbCB0cnlfd2FpdCBhbnkgbnVt
YmVyIHRpbWVzIG9uIHRoZSBzYW1lIGJhdG9uIHVudGlsCi0gIC8vLyAgIHRyeV93YWl0IHJlcG9y
dHMgdGhhdCB0aGUgYmF0b24gaGFzIGJlZW4gcG9zdGVkLgotICAvLy8gLSBJdCBpcyBvayB0byBj
YWxsIHRpbWVkX3dhaXQgb3Igd2FpdCBvbiB0aGUgc2FtZSBiYXRvbiBpZiB0cnlfd2FpdAotICAv
Ly8gICByZXBvcnRzIHRoYXQgYmF0b24gaGFzbid0IGJlZW4gcG9zdGVkLgotICAvLy8gLSBJZiB0
cnlfd2FpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgYmF0b24gaGFzIGJlZW4gcG9zdGVkLCBpdCBpcyBp
bnZhbGlkIHRvCi0gIC8vLyAgIGNhbGwgd2FpdCwgdHJ5X3dhaXQgb3IgdGltZWRfd2FpdCBvbiB0
aGUgc2FtZSBiYXRvbiB3aXRob3V0IHJlc2V0dGluZwotICAvLy8KLSAgLy8vIEByZXR1cm4gICAg
ICAgdHJ1ZSBpZiBiYXRvbiBoYXMgYmVlbiBwb3N0ZWQsIGZhbHNlIG90aGV3aXNlCi0gIGJvb2wg
dHJ5X3dhaXQoKSBjb25zdCB7Ci0gICAgYXV0byBzID0gc3RhdGVfLmxvYWQoc3RkOjptZW1vcnlf
b3JkZXJfYWNxdWlyZSk7Ci0gICAgYXNzZXJ0KHMgPT0gSU5JVCB8fCBzID09IEVBUkxZX0RFTElW
RVJZKTsKLSAgICByZXR1cm4gcyA9PSBFQVJMWV9ERUxJVkVSWTsKLSAgfQotCi0gcHJpdmF0ZToK
LSAgZW51bSBTdGF0ZSA6IHVpbnQzMl90IHsKLSAgICBJTklUID0gMCwKLSAgICBFQVJMWV9ERUxJ
VkVSWSA9IDEsCi0gICAgV0FJVElORyA9IDIsCi0gICAgTEFURV9ERUxJVkVSWSA9IDMsCi0gICAg
VElNRURfT1VUID0gNAotICB9OwotCi0gIGVudW0gewotICAgIC8vIE11c3QgYmUgcG9zaXRpdmUu
ICBJZiBtdWx0aXBsZSB0aHJlYWRzIGFyZSBhY3RpdmVseSB1c2luZyBhCi0gICAgLy8gaGlnaGVy
LWxldmVsIGRhdGEgc3RydWN0dXJlIHRoYXQgdXNlcyBiYXRvbnMgaW50ZXJuYWxseSwgaXQgaXMK
LSAgICAvLyBsaWtlbHkgdGhhdCB0aGUgcG9zdCgpIGFuZCB3YWl0KCkgY2FsbHMgaGFwcGVuIGFs
bW9zdCBhdCB0aGUgc2FtZQotICAgIC8vIHRpbWUuICBJbiB0aGlzIHN0YXRlLCB3ZSBsb3NlIGJp
ZyA1MCUgb2YgdGhlIHRpbWUgaWYgdGhlIHdhaXQgZ29lcwotICAgIC8vIHRvIHNsZWVwIGltbWVk
aWF0ZWx5LiAgT24gY2lyY2EtMjAxMyBkZXZib3ggaGFyZHdhcmUgaXQgY29zdHMgYWJvdXQKLSAg
ICAvLyA3IHVzZWMgdG8gRlVURVhfV0FJVCBhbmQgdGhlbiBiZSBhd29rZW4gKGhhbGYgdGhlIHQv
aXRlciBhcyB0aGUKLSAgICAvLyBwb3NpeF9zZW1fcGluZ3BvbmcgdGVzdCBpbiBCYXRvblRlc3Rz
KS4gIFdlIGNhbiBpbXByb3ZlIG91ciBjaGFuY2VzCi0gICAgLy8gb2YgRUFSTFlfREVMSVZFUlkg
Ynkgc3Bpbm5pbmcgZm9yIGEgYml0LCBhbHRob3VnaCB3ZSBoYXZlIHRvIGJhbGFuY2UKLSAgICAv
LyB0aGlzIGFnYWluc3QgdGhlIGxvc3MgaWYgd2UgZW5kIHVwIHNsZWVwaW5nIGFueSB3YXkuICBT
cGlucyBvbiB0aGlzCi0gICAgLy8gaHcgdGFrZSBhYm91dCA3IG5hbm9zIChhbGwgYnV0IDAuNSBu
YW5vcyBpcyB0aGUgcGF1c2UgaW5zdHJ1Y3Rpb24pLgotICAgIC8vIFdlIGdpdmUgb3Vyc2VsZiAz
MDAgc3BpbnMsIHdoaWNoIGlzIGFib3V0IDIgdXNlYyBvZiB3YWl0aW5nLiAgQXMgYQotICAgIC8v
IHBhcnRpYWwgY29uc29sYXRpb24sIHNpbmNlIHdlIGFyZSB1c2luZyB0aGUgcGF1c2UgaW5zdHJ1
Y3Rpb24gd2UKLSAgICAvLyBhcmUgZ2l2aW5nIGEgc3BlZWQgYm9vc3QgdG8gdGhlIGNvbG9jYXRl
ZCBoeXBlcnRocmVhZC4KLSAgICBQcmVCbG9ja0F0dGVtcHRzID0gMzAwLAotICB9OwotCi0gIC8v
IFNwaW4gZm9yICJzb21lIHRpbWUiIChzZWUgZGlzY3Vzc2lvbiBvbiBQcmVCbG9ja0F0dGVtcHRz
KSB3YWl0aW5nCi0gIC8vIGZvciBhIHBvc3QuCi0gIC8vCi0gIC8vIEByZXR1cm4gICAgICAgdHJ1
ZSBpZiB3ZSByZWNlaXZlZCBhbiBlYXJseSBkZWxpdmVyeSBkdXJpbmcgdGhlIHdhaXQsCi0gIC8v
ICAgICAgICAgICAgICAgZmFsc2Ugb3RoZXJ3aXNlLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0
cnVlIHRoZW4KLSAgLy8gICAgICAgICAgICAgICBzdGF0ZV8gaXMgZ3VhcmFudGVlZCB0byBiZSBF
QVJMWV9ERUxJVkVSWQotICBib29sIHNwaW5XYWl0Rm9yRWFybHlEZWxpdmVyeSgpIHsKLQotICAg
IHN0YXRpY19hc3NlcnQoUHJlQmxvY2tBdHRlbXB0cyA+IDAsCi0gICAgICAgICJpc24ndCB0aGlz
IGFzc2VydCBjbGVhcmVyIHRoYW4gYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nPyIp
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUHJlQmxvY2tBdHRlbXB0czsgKytpKSB7Ci0gICAg
ICBpZiAodHJ5X3dhaXQoKSkgewotICAgICAgICAvLyBob29yYXkhCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgfQotICAgICAgLy8gVGhlIHBhdXNlIGluc3RydWN0aW9uIGlzIHRoZSBwb2xp
dGUgd2F5IHRvIHNwaW4sIGJ1dCBpdCBkb2Vzbid0Ci0gICAgICAvLyBhY3R1YWxseSBhZmZlY3Qg
Y29ycmVjdG5lc3MgdG8gb21pdCBpdCBpZiB3ZSBkb24ndCBoYXZlIGl0LgotICAgICAgLy8gUGF1
c2luZyBkb25hdGVzIHRoZSBmdWxsIGNhcGFiaWxpdGllcyBvZiB0aGUgY3VycmVudCBjb3JlIHRv
Ci0gICAgICAvLyBpdHMgb3RoZXIgaHlwZXJ0aHJlYWRzIGZvciBhIGRvemVuIGN5Y2xlcyBvciBz
bwotICAgICAgYXNtX3ZvbGF0aWxlX3BhdXNlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotICB9Ci0KLSAgZGV0YWlsOjpGdXRleDxBdG9tPiBzdGF0ZV87Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBmb2xseQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZm9sbHkvQmVuY2htYXJrLmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2ZvbGx5L0JlbmNobWFyay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRi
ODgxYTkwYTBiOTMzMzViZjljZjgyNjc2MzMxYWFjZTUzODk2MjcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZm9sbHkvQmVuY2htYXJrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyNyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
LSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAot
ICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgot
ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0
aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRo
ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
IGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8gQGF1dGhv
ciBBbmRyZWkgQWxleGFuZHJlc2N1IChhbmRyZWkuYWxleGFuZHJlc2N1QGZiLmNvbSkKLQotI2lu
Y2x1ZGUgPGZvbGx5L0JlbmNobWFyay5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1
ZGUgPGNtYXRoPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5j
bHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0j
aW5jbHVkZSA8Zm9sbHkvRm9yZWFjaC5oPgotI2luY2x1ZGUgPGZvbGx5L1N0cmluZy5oPgotCi11
c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1zdGF0aWMgY29uc3RleHByIGludDY0X3QgRkxBR1NfYm1f
bWluX3VzZWMgPSAxMDA7Ci1zdGF0aWMgY29uc3RleHByIGludDMyX3QgRkxBR1NfYm1fbWluX2l0
ZXJzID0gMTsKLXN0YXRpYyBjb25zdGV4cHIgaW50NjRfdCBGTEFHU19ibV9tYXhfaXRlcnMgPSAx
IDw8IDMwOwotc3RhdGljIGNvbnN0ZXhwciBpbnQzMl90IEZMQUdTX2JtX21heF9zZWNzID0gMTsK
LQotbmFtZXNwYWNlIGZvbGx5IHsKLQotc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9j
azo6ZHVyYXRpb24gQmVuY2htYXJrU3VzcGVuZGVyOjp0aW1lU3BlbnQ7Ci0KLXR5cGVkZWYgZnVu
Y3Rpb248ZGV0YWlsOjpUaW1lSXRlclBhaXIodW5zaWduZWQgaW50KT4gQmVuY2htYXJrRnVuOwot
Ci0KLXZlY3Rvcjx0dXBsZTxzdHJpbmcsIHN0cmluZywgQmVuY2htYXJrRnVuPj4mIGJlbmNobWFy
a3MoKSB7Ci0gIHN0YXRpYyB2ZWN0b3I8dHVwbGU8c3RyaW5nLCBzdHJpbmcsIEJlbmNobWFya0Z1
bj4+IF9iZW5jaG1hcmtzOwotICByZXR1cm4gX2JlbmNobWFya3M7Ci19Ci0KLSNkZWZpbmUgRkJf
Rk9MTFlfR0xPQkFMX0JFTkNITUFSS19CQVNFTElORSBmYkZvbGx5R2xvYmFsQmVuY2htYXJrQmFz
ZWxpbmUKLSNkZWZpbmUgRkJfU1RSSU5HSVpFX1gyKHgpIEZCX1NUUklOR0laRSh4KQotCi0vLyBB
ZGQgdGhlIGdsb2JhbCBiYXNlbGluZQotQkVOQ0hNQVJLKEZCX0ZPTExZX0dMT0JBTF9CRU5DSE1B
UktfQkFTRUxJTkUpIHsKLSNpZmRlZiBfTVNDX1ZFUgotICBfUmVhZFdyaXRlQmFycmllcigpOwot
I2Vsc2UKLSAgYXNtIHZvbGF0aWxlKCIiKTsKLSNlbmRpZgotfQotCi1zaXplX3QgZ2V0R2xvYmFs
QmVuY2htYXJrQmFzZWxpbmVJbmRleCgpIHsKLSAgY29uc3QgY2hhciAqZ2xvYmFsID0gRkJfU1RS
SU5HSVpFX1gyKEZCX0ZPTExZX0dMT0JBTF9CRU5DSE1BUktfQkFTRUxJTkUpOwotICBhdXRvIGl0
ID0gc3RkOjpmaW5kX2lmKAotICAgIGJlbmNobWFya3MoKS5iZWdpbigpLAotICAgIGJlbmNobWFy
a3MoKS5lbmQoKSwKLSAgICBbZ2xvYmFsXShjb25zdCB0dXBsZTxzdHJpbmcsIHN0cmluZywgQmVu
Y2htYXJrRnVuPiAmdikgewotICAgICAgcmV0dXJuIGdldDwxPih2KSA9PSBnbG9iYWw7Ci0gICAg
fQotICApOwotICBDSEVDSyhpdCAhPSBiZW5jaG1hcmtzKCkuZW5kKCkpOwotICByZXR1cm4gc2l6
ZV90KHN0ZDo6ZGlzdGFuY2UoYmVuY2htYXJrcygpLmJlZ2luKCksIGl0KSk7Ci19Ci0KLSN1bmRl
ZiBGQl9TVFJJTkdJWkVfWDIKLSN1bmRlZiBGQl9GT0xMWV9HTE9CQUxfQkVOQ0hNQVJLX0JBU0VM
SU5FCi0KLXZvaWQgZGV0YWlsOjphZGRCZW5jaG1hcmtJbXBsKGNvbnN0IGNoYXIqIGZpbGUsIGNv
bnN0IGNoYXIqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5jaG1hcmtG
dW4gZnVuKSB7Ci0gIGJlbmNobWFya3MoKS5lbXBsYWNlX2JhY2soZmlsZSwgbmFtZSwgc3RkOjpt
b3ZlKGZ1bikpOwotfQotCi0vKioKLSAqIEdpdmVuIGEgYnVuY2ggb2YgYmVuY2htYXJrIHNhbXBs
ZXMsIGVzdGltYXRlIHRoZSBhY3R1YWwgcnVuIHRpbWUuCi0gKi8KLXN0YXRpYyBkb3VibGUgZXN0
aW1hdGVUaW1lKGRvdWJsZSAqIGJlZ2luLCBkb3VibGUgKiBlbmQpIHsKLSAgYXNzZXJ0KGJlZ2lu
IDwgZW5kKTsKLQotICAvLyBDdXJyZW50IHN0YXRlIG9mIHRoZSBhcnQ6IGdldCB0aGUgbWluaW11
bS4gQWZ0ZXIgc29tZQotICAvLyBleHBlcmltZW50YXRpb24sIGl0IHNlZW1zIHRha2luZyB0aGUg
bWluaW11bSBpcyB0aGUgYmVzdC4KLSAgcmV0dXJuICptaW5fZWxlbWVudChiZWdpbiwgZW5kKTsK
LX0KLQotc3RhdGljIGRvdWJsZSBydW5CZW5jaG1hcmtHZXROU1Blckl0ZXJhdGlvbihjb25zdCBC
ZW5jaG1hcmtGdW4mIGZ1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZG91YmxlIGdsb2JhbEJhc2VsaW5lKSB7Ci0gIHVzaW5nIHN0ZDo6Y2hyb25v
OjpkdXJhdGlvbl9jYXN0OwotICB1c2luZyBzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Ns
b2NrOwotICB1c2luZyBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzOwotICB1c2luZyBzdGQ6OmNo
cm9ubzo6bmFub3NlY29uZHM7Ci0gIHVzaW5nIHN0ZDo6Y2hyb25vOjpzZWNvbmRzOwotCi0gIC8v
IFRoZXkga2V5IGhlcmUgaXMgYWNjdXJhY3k7IHRvbyBsb3cgbnVtYmVycyBtZWFucyB0aGUgYWNj
dXJhY3kgd2FzCi0gIC8vIGNvYXJzZS4gV2UgdXAgdGhlIGFudGUgdW50aWwgd2UgZ2V0IHRvIGF0
IGxlYXN0IG1pbk5hbm9zZWNvbmRzCi0gIC8vIHRpbWluZ3MuCi0gIHN0YXRpY19hc3NlcnQoCi0g
ICAgICBzdGQ6OmlzX3NhbWU8aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpkdXJhdGlvbiwgbmFub3Nl
Y29uZHM+Ojp2YWx1ZSwKLSAgICAgICJIaWdoIHJlc29sdXRpb24gY2xvY2sgbXVzdCBiZSBuYW5v
c2Vjb25kIHJlc29sdXRpb24uIik7Ci0gIC8vIFdlIGNob29zZSBhIG1pbmltdW0gbWluaW11bSAo
c2ljKSBvZiAxMDAsMDAwIG5hbm9zZWNvbmRzLCBidXQgaWYKLSAgLy8gdGhlIGNsb2NrIHJlc29s
dXRpb24gaXMgd29yc2UgdGhhbiB0aGF0LCBpdCB3aWxsIGJlIGxhcmdlci4gSW4KLSAgLy8gZXNz
ZW5jZSB3ZSdyZSBhaW1pbmcgYXQgbWFraW5nIHRoZSBxdWFudGl6YXRpb24gbm9pc2UgMC4wMSUu
Ci0gIHN0YXRpYyBjb25zdCBhdXRvIG1pbk5hbm9zZWNvbmRzID0gc3RkOjptYXg8bmFub3NlY29u
ZHM+KAotICAgICAgbmFub3NlY29uZHMoMTAwMDAwKSwgbWljcm9zZWNvbmRzKEZMQUdTX2JtX21p
bl91c2VjKSk7Ci0KLSAgLy8gV2UgZG8gbWVhc3VyZW1lbnRzIGluIHNldmVyYWwgZXBvY2hzIGFu
ZCB0YWtlIHRoZSBtaW5pbXVtLCB0bwotICAvLyBhY2NvdW50IGZvciBqaXR0ZXIuCi0gIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBpbnQgZXBvY2hzID0gMTAwMDsKLSAgLy8gV2UgZXN0YWJsaXNoIGEg
dG90YWwgdGltZSBidWRnZXQgYXMgd2UgZG9uJ3Qgd2FudCBhIG1lYXN1cmVtZW50Ci0gIC8vIHRv
IHRha2UgdG9vIGxvbmcuIFRoaXMgd2lsbCBjdXJ0YWlsIHRoZSBudW1iZXIgb2YgYWN0dWFsIGVw
b2Nocy4KLSAgY29uc3QgYXV0byB0aW1lQnVkZ2V0ID0gc2Vjb25kcyhGTEFHU19ibV9tYXhfc2Vj
cyk7Ci0gIGF1dG8gZ2xvYmFsID0gaGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsKLQotICBk
b3VibGUgZXBvY2hSZXN1bHRzW2Vwb2Noc10gPSB7IDAgfTsKLSAgc2l6ZV90IGFjdHVhbEVwb2No
cyA9IDA7Ci0KLSAgZm9yICg7IGFjdHVhbEVwb2NocyA8IGVwb2NoczsgKythY3R1YWxFcG9jaHMp
IHsKLSAgICBjb25zdCBhdXRvIG1heEl0ZXJzID0gdWludDMyX3QoRkxBR1NfYm1fbWF4X2l0ZXJz
KTsKLSAgICBmb3IgKGF1dG8gbiA9IHVpbnQzMl90KEZMQUdTX2JtX21pbl9pdGVycyk7IG4gPCBt
YXhJdGVyczsgbiAqPSAyKSB7Ci0gICAgICBhdXRvIGNvbnN0IG5zZWNzQW5kSXRlciA9IGZ1bihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG4pKTsKLSAgICAgIGlmIChuc2Vjc0FuZEl0ZXIuZmly
c3QgPCBtaW5OYW5vc2Vjb25kcykgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAg
IC8vIFdlIGdvdCBhbiBhY2N1cmF0ZSBlbm91Z2ggdGltaW5nLCBkb25lLiBCdXQgb25seSBzYXZl
IGlmCi0gICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgcmVzdWx0LgotICAgICAgYXV0
byBuc2VjcyA9IGR1cmF0aW9uX2Nhc3Q8bmFub3NlY29uZHM+KG5zZWNzQW5kSXRlci5maXJzdCku
Y291bnQoKTsKLSAgICAgIGVwb2NoUmVzdWx0c1thY3R1YWxFcG9jaHNdID0KLSAgICAgICAgICBt
YXgoMC4wLCBkb3VibGUobnNlY3MpIC8gbnNlY3NBbmRJdGVyLnNlY29uZCAtIGdsb2JhbEJhc2Vs
aW5lKTsKLSAgICAgIC8vIERvbmUgd2l0aCB0aGUgY3VycmVudCBlcG9jaCwgd2UgZ290IGEgbWVh
bmluZ2Z1bCB0aW1pbmcuCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgYXV0byBub3cgPSBoaWdo
X3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwotICAgIGlmIChub3cgLSBnbG9iYWwgPj0gdGltZUJ1
ZGdldCkgewotICAgICAgLy8gTm8gbW9yZSB0aW1lIGJ1ZGdldCBhdmFpbGFibGUuCi0gICAgICAr
K2FjdHVhbEVwb2NoczsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIC8vIElmIHRoZSBi
ZW5jaG1hcmsgd2FzIGJhc2ljYWxseSBkcm93bmVkIGluIGJhc2VsaW5lIG5vaXNlLCBpdCdzCi0g
IC8vIHBvc3NpYmxlIGl0IGJlY2FtZSBuZWdhdGl2ZS4KLSAgcmV0dXJuIG1heCgwLjAsIGVzdGlt
YXRlVGltZShlcG9jaFJlc3VsdHMsIGVwb2NoUmVzdWx0cyArIGFjdHVhbEVwb2NocykpOwotfQot
Ci1zdHJ1Y3QgU2NhbGVJbmZvIHsKLSAgZG91YmxlIGJvdW5kYXJ5OwotICBjb25zdCBjaGFyKiBz
dWZmaXg7Ci19OwotCi1zdGF0aWMgY29uc3QgU2NhbGVJbmZvIGtUaW1lU3VmZml4ZXNbXSB7Ci0g
IHsgMzY1LjI1ICogMjQgKiAzNjAwLCAieWVhcnMiIH0sCi0gIHsgMjQgKiAzNjAwLCAiZGF5cyIg
fSwKLSAgeyAzNjAwLCAiaHIiIH0sCi0gIHsgNjAsICJtaW4iIH0sCi0gIHsgMSwgInMiIH0sCi0g
IHsgMUUtMywgIm1zIiB9LAotICB7IDFFLTYsICJ1cyIgfSwKLSAgeyAxRS05LCAibnMiIH0sCi0g
IHsgMUUtMTIsICJwcyIgfSwKLSAgeyAxRS0xNSwgImZzIiB9LAotICB7IDAsIG51bGxwdHIgfSwK
LX07Ci0KLXN0YXRpYyBjb25zdCBTY2FsZUluZm8ga01ldHJpY1N1ZmZpeGVzW10gewotICB7IDFF
MjQsICJZIiB9LCAgLy8geW90dGEKLSAgeyAxRTIxLCAiWiIgfSwgIC8vIHpldHRhCi0gIHsgMUUx
OCwgIlgiIH0sICAvLyAiZXhhIiB3cml0dGVuIHdpdGggc3VmZml4ICdYJyBzbyBhcyB0byBub3Qg
Y3JlYXRlCi0gICAgICAgICAgICAgICAgICAvLyAgIGNvbmZ1c2lvbiB3aXRoIHNjaWVudGlmaWMg
bm90YXRpb24KLSAgeyAxRTE1LCAiUCIgfSwgIC8vIHBldGEKLSAgeyAxRTEyLCAiVCIgfSwgIC8v
IHRlcnJhCi0gIHsgMUU5LCAiRyIgfSwgICAvLyBnaWdhCi0gIHsgMUU2LCAiTSIgfSwgICAvLyBt
ZWdhCi0gIHsgMUUzLCAiSyIgfSwgICAvLyBraWxvCi0gIHsgMSwgIiIgfSwKLSAgeyAxRS0zLCAi
bSIgfSwgIC8vIG1pbGxpCi0gIHsgMUUtNiwgInUiIH0sICAvLyBtaWNybwotICB7IDFFLTksICJu
IiB9LCAgLy8gbmFubwotICB7IDFFLTEyLCAicCIgfSwgLy8gcGljbwotICB7IDFFLTE1LCAiZiIg
fSwgLy8gZmVtdG8KLSAgeyAxRS0xOCwgImEiIH0sIC8vIGF0dG8KLSAgeyAxRS0yMSwgInoiIH0s
IC8vIHplcHRvCi0gIHsgMUUtMjQsICJ5IiB9LCAvLyB5b2N0bwotICB7IDAsIG51bGxwdHIgfSwK
LX07Ci0KLXN0YXRpYyBzdHJpbmcgaHVtYW5SZWFkYWJsZShkb3VibGUgbiwgdW5zaWduZWQgaW50
IGRlY2ltYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNjYWxlSW5mbyog
c2NhbGVzKSB7Ci0gIGlmIChzdGQ6OmlzaW5mKG4pIHx8IHN0ZDo6aXNuYW4obikpIHsKLSAgICBy
ZXR1cm4gZm9sbHk6OnRvPHN0cmluZz4obik7Ci0gIH0KLQotICBjb25zdCBkb3VibGUgYWJzVmFs
dWUgPSBmYWJzKG4pOwotICBjb25zdCBTY2FsZUluZm8qIHNjYWxlID0gc2NhbGVzOwotICB3aGls
ZSAoYWJzVmFsdWUgPCBzY2FsZVswXS5ib3VuZGFyeSAmJiBzY2FsZVsxXS5zdWZmaXggIT0gbnVs
bHB0cikgewotICAgICsrc2NhbGU7Ci0gIH0KLQotICBjb25zdCBkb3VibGUgc2NhbGVkVmFsdWUg
PSBuIC8gc2NhbGUtPmJvdW5kYXJ5OwotICByZXR1cm4gc3RyaW5nUHJpbnRmKCIlLipmJXMiLCBk
ZWNpbWFscywgc2NhbGVkVmFsdWUsIHNjYWxlLT5zdWZmaXgpOwotfQotCi1zdGF0aWMgc3RyaW5n
IHJlYWRhYmxlVGltZShkb3VibGUgbiwgdW5zaWduZWQgaW50IGRlY2ltYWxzKSB7Ci0gIHJldHVy
biBodW1hblJlYWRhYmxlKG4sIGRlY2ltYWxzLCBrVGltZVN1ZmZpeGVzKTsKLX0KLQotc3RhdGlj
IHN0cmluZyBtZXRyaWNSZWFkYWJsZShkb3VibGUgbiwgdW5zaWduZWQgaW50IGRlY2ltYWxzKSB7
Ci0gIHJldHVybiBodW1hblJlYWRhYmxlKG4sIGRlY2ltYWxzLCBrTWV0cmljU3VmZml4ZXMpOwot
fQotCi1zdGF0aWMgdm9pZCBwcmludEJlbmNobWFya1Jlc3VsdHNBc1RhYmxlKAotICBjb25zdCB2
ZWN0b3I8dHVwbGU8c3RyaW5nLCBzdHJpbmcsIGRvdWJsZT4gPiYgZGF0YSkgewotICAvLyBXaWR0
aCBhdmFpbGFibGUKLSAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjb2x1bW5zID0gNzY7Ci0K
LSAgLy8gQ29tcHV0ZSB0aGUgbG9uZ2VzdCBiZW5jaG1hcmsgbmFtZQotICBzaXplX3QgbG9uZ2Vz
dE5hbWUgPSAwOwotICBGT1JfRUFDSF9SQU5HRSAoaSwgMSwgYmVuY2htYXJrcygpLnNpemUoKSkg
ewotICAgIGxvbmdlc3ROYW1lID0gbWF4KGxvbmdlc3ROYW1lLCBnZXQ8MT4oYmVuY2htYXJrcygp
W2ldKS5zaXplKCkpOwotICB9Ci0KLSAgLy8gUHJpbnQgYSBob3Jpem9udGFsIHJ1bGUKLSAgYXV0
byBzZXBhcmF0b3IgPSBbJl0oY2hhciBwYWQpIHsKLSAgICBwdXRzKHN0cmluZyhjb2x1bW5zLCBw
YWQpLmNfc3RyKCkpOwotICB9OwotCi0gIC8vIFByaW50IGhlYWRlciBmb3IgYSBmaWxlCi0gIGF1
dG8gaGVhZGVyID0gWyZdKGNvbnN0IHN0cmluZyYgZmlsZSkgewotICAgIHNlcGFyYXRvcignPScp
OwotICAgIHByaW50ZigiJS0qc3JlbGF0aXZlICB0aW1lL2l0ZXIgIGl0ZXJzL3NcbiIsCi0gICAg
ICAgICAgIGNvbHVtbnMgLSAyOCwgZmlsZS5jX3N0cigpKTsKLSAgICBzZXBhcmF0b3IoJz0nKTsK
LSAgfTsKLQotICBkb3VibGUgYmFzZWxpbmVOc1Blckl0ZXIgPSBudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjptYXgoKTsKLSAgc3RyaW5nIGxhc3RGaWxlOwotCi0gIGZvciAoYXV0byYgZGF0dW0gOiBk
YXRhKSB7Ci0gICAgYXV0byBmaWxlID0gZ2V0PDA+KGRhdHVtKTsKLSAgICBpZiAoZmlsZSAhPSBs
YXN0RmlsZSkgewotICAgICAgLy8gTmV3IGZpbGUgc3RhcnRpbmcKLSAgICAgIGhlYWRlcihmaWxl
KTsKLSAgICAgIGxhc3RGaWxlID0gZmlsZTsKLSAgICB9Ci0KLSAgICBzdHJpbmcgcyA9IGdldDwx
PihkYXR1bSk7Ci0gICAgaWYgKHMgPT0gIi0iKSB7Ci0gICAgICBzZXBhcmF0b3IoJy0nKTsKLSAg
ICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBib29sIHVzZUJhc2VsaW5lIC8qID0gdm9pZCAqLzsK
LSAgICBpZiAoc1swXSA9PSAnJScpIHsKLSAgICAgIHMuZXJhc2UoMCwgMSk7Ci0gICAgICB1c2VC
YXNlbGluZSA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGJhc2VsaW5lTnNQZXJJdGVyID0g
Z2V0PDI+KGRhdHVtKTsKLSAgICAgIHVzZUJhc2VsaW5lID0gZmFsc2U7Ci0gICAgfQotICAgIHMu
cmVzaXplKGNvbHVtbnMgLSAyOSwgJyAnKTsKLSAgICBhdXRvIG5zUGVySXRlciA9IGdldDwyPihk
YXR1bSk7Ci0gICAgYXV0byBzZWNQZXJJdGVyID0gbnNQZXJJdGVyIC8gMUU5OwotICAgIGF1dG8g
aXRlcnNQZXJTZWMgPSAoc2VjUGVySXRlciA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPyBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogKDEgLyBzZWNQZXJJdGVyKTsKLSAgICBpZiAoIXVzZUJhc2VsaW5l
KSB7Ci0gICAgICAvLyBQcmludCB3aXRob3V0IGJhc2VsaW5lCi0gICAgICBwcmludGYoIiUqcyAg
ICAgICAgICAgJTlzICAlN3NcbiIsCi0gICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzLnNp
emUoKSksIHMuY19zdHIoKSwKLSAgICAgICAgICAgICByZWFkYWJsZVRpbWUoc2VjUGVySXRlciwg
MikuY19zdHIoKSwKLSAgICAgICAgICAgICBtZXRyaWNSZWFkYWJsZShpdGVyc1BlclNlYywgMiku
Y19zdHIoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIFByaW50IHdpdGggYmFzZWxpbmUKLSAg
ICAgIGF1dG8gcmVsID0gYmFzZWxpbmVOc1Blckl0ZXIgLyBuc1Blckl0ZXIgKiAxMDAuMDsKLSAg
ICAgIHByaW50ZigiJSpzICU3LjJmJSUgICU5cyAgJTdzXG4iLAotICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludD4ocy5zaXplKCkpLCBzLmNfc3RyKCksCi0gICAgICAgICAgICAgcmVsLAotICAg
ICAgICAgICAgIHJlYWRhYmxlVGltZShzZWNQZXJJdGVyLCAyKS5jX3N0cigpLAotICAgICAgICAg
ICAgIG1ldHJpY1JlYWRhYmxlKGl0ZXJzUGVyU2VjLCAyKS5jX3N0cigpKTsKLSAgICB9Ci0gIH0K
LSAgc2VwYXJhdG9yKCc9Jyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50QmVuY2htYXJrUmVzdWx0
cygKLSAgY29uc3QgdmVjdG9yPHR1cGxlPHN0cmluZywgc3RyaW5nLCBkb3VibGU+ID4mIGRhdGEp
IHsKLSAgcHJpbnRCZW5jaG1hcmtSZXN1bHRzQXNUYWJsZShkYXRhKTsKLX0KLQotdm9pZCBydW5C
ZW5jaG1hcmtzKCkgewotICBDSEVDSyghYmVuY2htYXJrcygpLmVtcHR5KCkpOwotCi0gIHZlY3Rv
cjx0dXBsZTxzdHJpbmcsIHN0cmluZywgZG91YmxlPj4gcmVzdWx0czsKLSAgcmVzdWx0cy5yZXNl
cnZlKGJlbmNobWFya3MoKS5zaXplKCkgLSAxKTsKLQotICAvLyBQTEVBU0UgS0VFUCBRVUlFVC4g
TUVBU1VSRU1FTlRTIElOIFBST0dSRVNTLgotCi0gIHNpemVfdCBiYXNlbGluZUluZGV4ID0gZ2V0
R2xvYmFsQmVuY2htYXJrQmFzZWxpbmVJbmRleCgpOwotCi0gIGF1dG8gY29uc3QgZ2xvYmFsQmFz
ZWxpbmUgPQotICAgICAgcnVuQmVuY2htYXJrR2V0TlNQZXJJdGVyYXRpb24oZ2V0PDI+KGJlbmNo
bWFya3MoKVtiYXNlbGluZUluZGV4XSksIDApOwotICBGT1JfRUFDSF9SQU5HRSAoaSwgMCwgYmVu
Y2htYXJrcygpLnNpemUoKSkgewotICAgIGlmIChpID09IGJhc2VsaW5lSW5kZXgpIHsKLSAgICAg
IGNvbnRpbnVlOwotICAgIH0KLSAgICBkb3VibGUgZWxhcHNlZCA9IDAuMDsKLSAgICBpZiAoZ2V0
PDE+KGJlbmNobWFya3MoKVtpXSkgIT0gIi0iKSB7IC8vIHNraXAgc2VwYXJhdG9ycwotICAgICAg
ZWxhcHNlZCA9IHJ1bkJlbmNobWFya0dldE5TUGVySXRlcmF0aW9uKGdldDwyPihiZW5jaG1hcmtz
KClbaV0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
b2JhbEJhc2VsaW5lKTsKLSAgICB9Ci0gICAgcmVzdWx0cy5lbXBsYWNlX2JhY2soZ2V0PDA+KGJl
bmNobWFya3MoKVtpXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ2V0PDE+KGJlbmNobWFy
a3MoKVtpXSksIGVsYXBzZWQpOwotICB9Ci0KLSAgLy8gUExFQVNFIE1BS0UgTk9JU0UuIE1FQVNV
UkVNRU5UUyBET05FLgotCi0gIHByaW50QmVuY2htYXJrUmVzdWx0cyhyZXN1bHRzKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgZm9sbHkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2ZvbGx5L0JlbmNobWFyay5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZm9sbHkvQmVuY2htYXJrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDNkN2M0YzIwZGI5NTA0MjM5Y2YxYTA3ZjkxMDc5MWRiYjNkZjJhMzguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvZm9sbHkvQmVuY2htYXJrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1Mzgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGlj
ZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNl
Iik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
YXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAot
ICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g
d3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNl
ZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNz
aW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8Zm9sbHkvUG9ydGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxmb2xs
eS9QcmVwcm9jZXNzb3IuaD4gLy8gZm9yIEZCX0FOT05ZTU9VU19WQVJJQUJMRQotI2luY2x1ZGUg
PGZvbGx5L1Njb3BlR3VhcmQuaD4KLSNpbmNsdWRlIDxmb2xseS9UcmFpdHMuaD4KLS8vI2luY2x1
ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L0dGbGFncy5oPgotCi0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNp
bmNsdWRlIDxjaHJvbm8+Ci0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNpbmNsdWRlIDxsaW1pdHM+
Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0KLSNpbmNsdWRlIDxib29zdC9mdW5jdGlvbl90eXBl
cy9mdW5jdGlvbl9hcml0eS5ocHA+Ci0jaW5jbHVkZSA8Z2xvZy9sb2dnaW5nLmg+Ci0KLWNvbnN0
ZXhwciBib29sIEZMQUdTX2JlbmNobWFyayA9IHRydWU7Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci0K
LS8qKgotICogUnVucyBhbGwgYmVuY2htYXJrcyBkZWZpbmVkLiBVc3VhbGx5IHB1dCBpbiBtYWlu
KCkuCi0gKi8KLXZvaWQgcnVuQmVuY2htYXJrcygpOwotCi1pbmxpbmUgYm9vbCBydW5CZW5jaG1h
cmtzT25GbGFnKCkgewotICByZXR1cm4gdHJ1ZTsKLX0KLQotbmFtZXNwYWNlIGRldGFpbCB7Ci0K
LXVzaW5nIFRpbWVJdGVyUGFpciA9Ci0gICAgc3RkOjpwYWlyPHN0ZDo6Y2hyb25vOjpoaWdoX3Jl
c29sdXRpb25fY2xvY2s6OmR1cmF0aW9uLCB1bnNpZ25lZCBpbnQ+OwotCi0vKioKLSAqIEFkZHMg
YSBiZW5jaG1hcmsgd3JhcHBlZCBpbiBhIHN0ZDo6ZnVuY3Rpb24uIE9ubHkgdXNlZAotICogaW50
ZXJuYWxseS4gUGFzcyBieSB2YWx1ZSBpcyBpbnRlbnRpb25hbC4KLSAqLwotdm9pZCBhZGRCZW5j
aG1hcmtJbXBsKGNvbnN0IGNoYXIqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRpbWVJdGVy
UGFpcih1bnNpZ25lZCBpbnQpPik7Ci0KLX0gLy8gbmFtZXNwYWNlIGRldGFpbAotCi0vKioKLSAq
IFN1cHBvcnRpbmcgdHlwZSBmb3IgQkVOQ0hNQVJLX1NVU1BFTkQgZGVmaW5lZCBiZWxvdy4KLSAq
Lwotc3RydWN0IEJlbmNobWFya1N1c3BlbmRlciB7Ci0gIHVzaW5nIENsb2NrID0gc3RkOjpjaHJv
bm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazsKLSAgdXNpbmcgVGltZVBvaW50ID0gQ2xvY2s6OnRp
bWVfcG9pbnQ7Ci0gIHVzaW5nIER1cmF0aW9uID0gQ2xvY2s6OmR1cmF0aW9uOwotCi0gIEJlbmNo
bWFya1N1c3BlbmRlcigpIHsKLSAgICBzdGFydCA9IENsb2NrOjpub3coKTsKLSAgfQotCi0gIEJl
bmNobWFya1N1c3BlbmRlcihjb25zdCBCZW5jaG1hcmtTdXNwZW5kZXIgJikgPSBkZWxldGU7Ci0g
IEJlbmNobWFya1N1c3BlbmRlcihCZW5jaG1hcmtTdXNwZW5kZXIgJiYgcmhzKSBub2V4Y2VwdCB7
Ci0gICAgc3RhcnQgPSByaHMuc3RhcnQ7Ci0gICAgcmhzLnN0YXJ0ID0ge307Ci0gIH0KLQotICBC
ZW5jaG1hcmtTdXNwZW5kZXImIG9wZXJhdG9yPShjb25zdCBCZW5jaG1hcmtTdXNwZW5kZXIgJikg
PSBkZWxldGU7Ci0gIEJlbmNobWFya1N1c3BlbmRlciYgb3BlcmF0b3I9KEJlbmNobWFya1N1c3Bl
bmRlciAmJiByaHMpIHsKLSAgICBpZiAoc3RhcnQgIT0gVGltZVBvaW50e30pIHsKLSAgICAgIHRh
bGx5KCk7Ci0gICAgfQotICAgIHN0YXJ0ID0gcmhzLnN0YXJ0OwotICAgIHJocy5zdGFydCA9IHt9
OwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIH5CZW5jaG1hcmtTdXNwZW5kZXIoKSB7Ci0g
ICAgaWYgKHN0YXJ0ICE9IFRpbWVQb2ludHt9KSB7Ci0gICAgICB0YWxseSgpOwotICAgIH0KLSAg
fQotCi0gIHZvaWQgZGlzbWlzcygpIHsKLSAgICBhc3NlcnQoc3RhcnQgIT0gVGltZVBvaW50e30p
OwotICAgIHRhbGx5KCk7Ci0gICAgc3RhcnQgPSB7fTsKLSAgfQotCi0gIHZvaWQgcmVoaXJlKCkg
ewotICAgIGFzc2VydChzdGFydCA9PSBUaW1lUG9pbnR7fSk7Ci0gICAgc3RhcnQgPSBDbG9jazo6
bm93KCk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgRj4KLSAgYXV0byBkaXNtaXNzaW5nKEYg
ZikgLT4gdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8RigpPjo6dHlwZSB7Ci0gICAgU0NPUEVfRVhJ
VCB7IHJlaGlyZSgpOyB9OwotICAgIGRpc21pc3MoKTsKLSAgICByZXR1cm4gZigpOwotICB9Ci0K
LSAgLyoqCi0gICAqIFRoaXMgaXMgZm9yIHVzZSBpbnNpZGUgb2YgaWYtY29uZGl0aW9ucywgdXNl
ZCBpbiBCRU5DSE1BUksgbWFjcm9zLgotICAgKiBJZi1jb25kaXRpb25zIGJ5cGFzcyB0aGUgZXhw
bGljaXQgb24gb3BlcmF0b3IgYm9vbC4KLSAgICovCi0gIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIEFjY3VtdWxh
dGVzIHRpbWUgc3BlbnQgb3V0c2lkZSBiZW5jaG1hcmsuCi0gICAqLwotICBzdGF0aWMgRHVyYXRp
b24gdGltZVNwZW50OwotCi0gcHJpdmF0ZToKLSAgdm9pZCB0YWxseSgpIHsKLSAgICBhdXRvIGVu
ZCA9IENsb2NrOjpub3coKTsKLSAgICB0aW1lU3BlbnQgKz0gZW5kIC0gc3RhcnQ7Ci0gICAgc3Rh
cnQgPSBlbmQ7Ci0gIH0KLQotICBUaW1lUG9pbnQgc3RhcnQ7Ci19OwotCi0vKioKLSAqIEFkZHMg
YSBiZW5jaG1hcmsuIFVzdWFsbHkgbm90IGNhbGxlZCBkaXJlY3RseSBidXQgaW5zdGVhZCB0aHJv
dWdoCi0gKiB0aGUgbWFjcm8gQkVOQ0hNQVJLIGRlZmluZWQgYmVsb3cuIFRoZSBsYW1iZGEgZnVu
Y3Rpb24gaW52b2x2ZWQKLSAqIG11c3QgdGFrZSBleGFjdGx5IG9uZSBwYXJhbWV0ZXIgb2YgdHlw
ZSB1bnNpZ25lZCwgYW5kIHRoZSBiZW5jaG1hcmsKLSAqIHVzZXMgaXQgd2l0aCBjb3VudGVyIHNl
bWFudGljcyAoaXRlcmF0aW9uIG9jY3VycyBpbnNpZGUgdGhlCi0gKiBmdW5jdGlvbikuCi0gKi8K
LXRlbXBsYXRlIDx0eXBlbmFtZSBMYW1iZGE+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAg
Ym9vc3Q6OmZ1bmN0aW9uX3R5cGVzOjpmdW5jdGlvbl9hcml0eTxkZWNsdHlwZSgmTGFtYmRhOjpv
cGVyYXRvcigpKT46OnZhbHVlCi0gID09IDIKLT46OnR5cGUKLWFkZEJlbmNobWFyayhjb25zdCBj
aGFyKiBmaWxlLCBjb25zdCBjaGFyKiBuYW1lLCBMYW1iZGEmJiBsYW1iZGEpIHsKLSAgYXV0byBl
eGVjdXRlID0gWz1dKHVuc2lnbmVkIGludCB0aW1lcykgewotICAgIEJlbmNobWFya1N1c3BlbmRl
cjo6dGltZVNwZW50ID0ge307Ci0gICAgdW5zaWduZWQgaW50IG5pdGVyOwotCi0gICAgLy8gQ09S
RSBNRUFTVVJFTUVOVCBTVEFSVFMKLSAgICBhdXRvIHN0YXJ0ID0gc3RkOjpjaHJvbm86OmhpZ2hf
cmVzb2x1dGlvbl9jbG9jazo6bm93KCk7Ci0gICAgbml0ZXIgPSBsYW1iZGEodGltZXMpOwotICAg
IGF1dG8gZW5kID0gc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCk7Ci0g
ICAgLy8gQ09SRSBNRUFTVVJFTUVOVCBFTkRTCi0KLSAgICByZXR1cm4gZGV0YWlsOjpUaW1lSXRl
clBhaXIoCi0gICAgICAgIChlbmQgLSBzdGFydCkgLSBCZW5jaG1hcmtTdXNwZW5kZXI6OnRpbWVT
cGVudCwgbml0ZXIpOwotICB9OwotCi0gIGRldGFpbDo6YWRkQmVuY2htYXJrSW1wbChmaWxlLCBu
YW1lLAotICAgIHN0ZDo6ZnVuY3Rpb248ZGV0YWlsOjpUaW1lSXRlclBhaXIodW5zaWduZWQgaW50
KT4oZXhlY3V0ZSkpOwotfQotCi0vKioKLSAqIEFkZHMgYSBiZW5jaG1hcmsuIFVzdWFsbHkgbm90
IGNhbGxlZCBkaXJlY3RseSBidXQgaW5zdGVhZCB0aHJvdWdoCi0gKiB0aGUgbWFjcm8gQkVOQ0hN
QVJLIGRlZmluZWQgYmVsb3cuIFRoZSBsYW1iZGEgZnVuY3Rpb24gaW52b2x2ZWQKLSAqIG11c3Qg
dGFrZSB6ZXJvIHBhcmFtZXRlcnMsIGFuZCB0aGUgYmVuY2htYXJrIGNhbGxzIGl0IHJlcGVhdGVk
bHkKLSAqIChpdGVyYXRpb24gb2NjdXJzIG91dHNpZGUgdGhlIGZ1bmN0aW9uKS4KLSAqLwotdGVt
cGxhdGUgPHR5cGVuYW1lIExhbWJkYT4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICBib29z
dDo6ZnVuY3Rpb25fdHlwZXM6OmZ1bmN0aW9uX2FyaXR5PGRlY2x0eXBlKCZMYW1iZGE6Om9wZXJh
dG9yKCkpPjo6dmFsdWUKLSAgPT0gMQotPjo6dHlwZQotYWRkQmVuY2htYXJrKGNvbnN0IGNoYXIq
IGZpbGUsIGNvbnN0IGNoYXIqIG5hbWUsIExhbWJkYSYmIGxhbWJkYSkgewotICBhZGRCZW5jaG1h
cmsoZmlsZSwgbmFtZSwgWz1dKHVuc2lnbmVkIGludCB0aW1lcykgewotICAgICAgdW5zaWduZWQg
aW50IG5pdGVyID0gMDsKLSAgICAgIHdoaWxlICh0aW1lcy0tID4gMCkgewotICAgICAgICBuaXRl
ciArPSBsYW1iZGEoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuaXRlcjsKLSAgICB9KTsKLX0K
LQotLyoqCi0gKiBDYWxsIGRvTm90T3B0aW1pemVBd2F5KHZhcikgdG8gZW5zdXJlIHRoYXQgdmFy
IHdpbGwgYmUgY29tcHV0ZWQgZXZlbgotICogcG9zdC1vcHRpbWl6YXRpb24uICBVc2UgaXQgZm9y
IHZhcmlhYmxlcyB0aGF0IGFyZSBjb21wdXRlZCBkdXJpbmcKLSAqIGJlbmNobWFya2luZyBidXQg
b3RoZXJ3aXNlIGFyZSB1c2VsZXNzLiBUaGUgY29tcGlsZXIgdGVuZHMgdG8gZG8gYQotICogZ29v
ZCBqb2IgYXQgZWxpbWluYXRpbmcgdW51c2VkIHZhcmlhYmxlcywgYW5kIHRoaXMgZnVuY3Rpb24g
Zm9vbHMgaXQKLSAqIGludG8gdGhpbmtpbmcgdmFyIGlzIGluIGZhY3QgbmVlZGVkLgotICoKLSAq
IENhbGwgbWFrZVVucHJlZGljdGFibGUodmFyKSB3aGVuIHlvdSBkb24ndCB3YW50IHRoZSBvcHRp
bWl6ZXIgdG8gdXNlCi0gKiBpdHMga25vd2xlZGdlIG9mIHZhciB0byBzaGFwZSB0aGUgZm9sbG93
aW5nIGNvZGUuICBUaGlzIGlzIHVzZWZ1bAotICogd2hlbiBjb25zdGFudCBwcm9wYWdhdGlvbiBv
ciBwb3dlciByZWR1Y3Rpb24gaXMgcG9zc2libGUgZHVyaW5nIHlvdXIKLSAqIGJlbmNobWFyayBi
dXQgbm90IGluIHJlYWwgdXNlIGNhc2VzLgotICovCi0KLSNpZmRlZiBfTVNDX1ZFUgotCi0jcHJh
Z21hIG9wdGltaXplKCIiLCBvZmYpCi0KLWlubGluZSB2b2lkIGRvTm90T3B0aW1pemVEZXBlbmRl
bmN5U2luayhjb25zdCB2b2lkKikge30KLQotI3ByYWdtYSBvcHRpbWl6ZSgiIiwgb24pCi0KLXRl
bXBsYXRlIDxjbGFzcyBUPgotdm9pZCBkb05vdE9wdGltaXplQXdheShjb25zdCBUJiBkYXR1bSkg
ewotICBkb05vdE9wdGltaXplRGVwZW5kZW5jeVNpbmsoJmRhdHVtKTsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci12b2lkIG1ha2VVbnByZWRpY3RhYmxlKFQmIGRhdHVtKSB7Ci0gIGRvTm90
T3B0aW1pemVEZXBlbmRlbmN5U2luaygmZGF0dW0pOwotfQotCi0jZWxzZQotCi1uYW1lc3BhY2Ug
ZGV0YWlsIHsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IERvTm90T3B0aW1pemVBd2F5
TmVlZHNJbmRpcmVjdCB7Ci0gIHVzaW5nIERlY2F5ZWQgPSB0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+
Ojp0eXBlOwotCi0gIC8vIEZpcnN0IHR3byBjb25zdHJhaW50cyBlbnN1cmUgaXQgY2FuIGJlIGFu
ICJyIiBvcGVyYW5kLgotICAvLyBzdGQ6OmlzX3BvaW50ZXIgY2hlY2sgaXMgYmVjYXVzZSBjYWxs
ZXJzIHNlZW0gdG8gZXhwZWN0IHRoYXQKLSAgLy8gZG9Ob3RPcHRpbWl6ZUF3YXkoJngpIGlzIGVx
dWl2YWxlbnQgdG8gZG9Ob3RPcHRpbWl6ZUF3YXkoeCkuCi0gIGNvbnN0ZXhwciBzdGF0aWMgYm9v
bCB2YWx1ZSA9ICFmb2xseTo6SXNUcml2aWFsbHlDb3B5YWJsZTxEZWNheWVkPjo6dmFsdWUgfHwK
LSAgICAgIHNpemVvZihEZWNheWVkKSA+IHNpemVvZihsb25nKSB8fCBzdGQ6OmlzX3BvaW50ZXI8
RGVjYXllZD46OnZhbHVlOwotfTsKLX0gLy8gZGV0YWlsIG5hbWVzcGFjZQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KLWF1dG8gZG9Ob3RPcHRpbWl6ZUF3YXkoY29uc3QgVCYgZGF0dW0pIC0+IHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICFkZXRhaWw6OkRvTm90T3B0aW1pemVBd2F5TmVl
ZHNJbmRpcmVjdDxUPjo6dmFsdWU+Ojp0eXBlIHsKLSAgLy8gVGhlICJyIiBjb25zdHJhaW50IGZv
cmNlcyB0aGUgY29tcGlsZXIgdG8gbWFrZSBkYXR1bSBhdmFpbGFibGUKLSAgLy8gaW4gYSByZWdp
c3RlciB0byB0aGUgYXNtIGJsb2NrLCB3aGljaCBtZWFucyB0aGF0IGl0IG11c3QgaGF2ZQotICAv
LyBjb21wdXRlZC9sb2FkZWQgaXQuICBXZSB1c2UgdGhpcyBwYXRoIGZvciB0aGluZ3MgdGhhdCBh
cmUgPD0KLSAgLy8gc2l6ZW9mKGxvbmcpICh0aGV5IGhhdmUgdG8gZml0KSwgdHJpdmlhbCAob3Ro
ZXJ3aXNlIHRoZSBjb21waWxlcgotICAvLyBkb2Vzbid0IHdhbnQgdG8gcHV0IHRoZW0gaW4gYSBy
ZWdpc3RlciksIGFuZCBub3QgYSBwb2ludGVyIChiZWNhdXNlCi0gIC8vIGRvTm90T3B0aW1pemVB
d2F5KCZmb28pIHdvdWxkIG90aGVyd2lzZSBiZSBhIGZvb3QgZ3VuIHRoYXQgZGlkbid0Ci0gIC8v
IG5lY2Vzc2FyaWx5IGNvbXB1dGUgZm9vKS4KLSAgLy8KLSAgLy8gQW4gZWFybGllciB2ZXJzaW9u
IG9mIHRoaXMgbWV0aG9kIGhhZCBhIG1vcmUgcGVybWlzc2l2ZSBpbnB1dCBvcGVyYW5kCi0gIC8v
IGNvbnN0cmFpbnQsIGJ1dCB0aGF0IGNhdXNlZCB1bm5lY2Vzc2FyeSB2YXJpYXRpb24gYmV0d2Vl
biBjbGFuZyBhbmQKLSAgLy8gZ2NjIGJlbmNobWFya3MuCi0gIGFzbSB2b2xhdGlsZSgiIiA6OiJy
IihkYXR1bSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWF1dG8gZG9Ob3RPcHRpbWl6
ZUF3YXkoY29uc3QgVCYgZGF0dW0pIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgIGRl
dGFpbDo6RG9Ob3RPcHRpbWl6ZUF3YXlOZWVkc0luZGlyZWN0PFQ+Ojp2YWx1ZT46OnR5cGUgewot
ICAvLyBUaGlzIHZlcnNpb24gb2YgZG9Ob3RPcHRpbWl6ZUF3YXkgdGVsbHMgdGhlIGNvbXBpbGVy
IHRoYXQgdGhlIGFzbQotICAvLyBibG9jayB3aWxsIHJlYWQgZGF0dW0gZnJvbSBtZW1vcnksIGFu
ZCB0aGF0IGluIGFkZGl0aW9uIGl0IG1pZ2h0IHJlYWQKLSAgLy8gb3Igd3JpdGUgZnJvbSBhbnkg
bWVtb3J5IGxvY2F0aW9uLiAgSWYgdGhlIG1lbW9yeSBjbG9iYmVyIGNvdWxkIGJlCi0gIC8vIHNl
cGFyYXRlZCBpbnRvIGlucHV0IGFuZCBvdXRwdXQgdGhhdCB3b3VsZCBiZSBwcmVmZXJyYWJsZS4K
LSAgYXNtIHZvbGF0aWxlKCIiIDo6Im0iKGRhdHVtKSA6ICJtZW1vcnkiKTsKLX0KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Ci1hdXRvIG1ha2VVbnByZWRpY3RhYmxlKFQmIGRhdHVtKSAtPiB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAhZGV0YWlsOjpEb05vdE9wdGltaXplQXdheU5lZWRz
SW5kaXJlY3Q8VD46OnZhbHVlPjo6dHlwZSB7Ci0gIGFzbSB2b2xhdGlsZSgiIiA6ICIrciIoZGF0
dW0pKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1hdXRvIG1ha2VVbnByZWRpY3RhYmxl
KFQmIGRhdHVtKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICBkZXRhaWw6OkRvTm90
T3B0aW1pemVBd2F5TmVlZHNJbmRpcmVjdDxUPjo6dmFsdWU+Ojp0eXBlIHsKLSAgYXNtIHZvbGF0
aWxlKCIiIDo6Im0iKGRhdHVtKSA6ICJtZW1vcnkiKTsKLX0KLQotI2VuZGlmCi0KLX0gLy8gbmFt
ZXNwYWNlIGZvbGx5Ci0KLS8qKgotICogSW50cm9kdWNlcyBhIGJlbmNobWFyayBmdW5jdGlvbi4g
VXNlZCBpbnRlcm5hbGx5LCBzZWUgQkVOQ0hNQVJLIGFuZAotICogZnJpZW5kcyBiZWxvdy4KLSAq
LwotI2RlZmluZSBCRU5DSE1BUktfSU1QTChmdW5OYW1lLCBzdHJpbmdOYW1lLCBydiwgcGFyYW1U
eXBlLCBwYXJhbU5hbWUpICAgXAotICBzdGF0aWMgdm9pZCBmdW5OYW1lKHBhcmFtVHlwZSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgYm9vbCBGQl9B
Tk9OWU1PVVNfVkFSSUFCTEUoZm9sbHlCZW5jaG1hcmtVbnVzZWQpID0gKCAgICAgICAgICAgXAot
ICAgIDo6Zm9sbHk6OmFkZEJlbmNobWFyayhfX0ZJTEVfXywgc3RyaW5nTmFtZSwgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgW10ocGFyYW1UeXBlIHBhcmFtTmFtZSkgLT4gdW5zaWdu
ZWQgeyBmdW5OYW1lKHBhcmFtTmFtZSk7ICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnY7IH0pLCAgICAgICAgICAgICAgXAotICAg
IHRydWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBzdGF0aWMgdm9pZCBmdW5OYW1lKHBhcmFtVHlwZSBwYXJhbU5hbWUp
Ci0KLS8qKgotICogSW50cm9kdWNlcyBhIGJlbmNobWFyayBmdW5jdGlvbiB3aXRoIHN1cHBvcnQg
Zm9yIHJldHVybmluZyB0aGUgYWN0dWFsCi0gKiBudW1iZXIgb2YgaXRlcmF0aW9ucy4gVXNlZCBp
bnRlcm5hbGx5LCBzZWUgQkVOQ0hNQVJLX01VTFRJIGFuZCBmcmllbmRzCi0gKiBiZWxvdy4KLSAq
LwotI2RlZmluZSBCRU5DSE1BUktfTVVMVElfSU1QTChmdW5OYW1lLCBzdHJpbmdOYW1lLCBwYXJh
bVR5cGUsIHBhcmFtTmFtZSkgXAotICBzdGF0aWMgdW5zaWduZWQgZnVuTmFtZShwYXJhbVR5cGUp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgYm9vbCBGQl9B
Tk9OWU1PVVNfVkFSSUFCTEUoZm9sbHlCZW5jaG1hcmtVbnVzZWQpID0gKCAgICAgICAgICAgXAot
ICAgIDo6Zm9sbHk6OmFkZEJlbmNobWFyayhfX0ZJTEVfXywgc3RyaW5nTmFtZSwgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgW10ocGFyYW1UeXBlIHBhcmFtTmFtZSkgeyByZXR1cm4g
ZnVuTmFtZShwYXJhbU5hbWUpOyB9KSwgICAgICAgICAgXAotICAgIHRydWUpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBz
dGF0aWMgdW5zaWduZWQgZnVuTmFtZShwYXJhbVR5cGUgcGFyYW1OYW1lKQotCi0vKioKLSAqIElu
dHJvZHVjZXMgYSBiZW5jaG1hcmsgZnVuY3Rpb24uIFVzZSB3aXRoIGVpdGhlciBvbmUgb3IgdHdv
IGFyZ3VtZW50cy4KLSAqIFRoZSBmaXJzdCBpcyB0aGUgbmFtZSBvZiB0aGUgYmVuY2htYXJrLiBV
c2Ugc29tZXRoaW5nIGRlc2NyaXB0aXZlLCBzdWNoCi0gKiBhcyBpbnNlcnRWZWN0b3JCZWdpbi4g
VGhlIHNlY29uZCBhcmd1bWVudCBtYXkgYmUgbWlzc2luZywgb3IgY291bGQgYmUgYQotICogc3lt
Ym9saWMgY291bnRlci4gVGhlIGNvdW50ZXIgZGljdGF0ZXMgaG93IG1hbnkgaW50ZXJuYWwgaXRl
cmF0aW9uIHRoZQotICogYmVuY2htYXJrIGRvZXMuIEV4YW1wbGU6Ci0gKgotICogQkVOQ0hNQVJL
KHZlY3RvclB1c2hCYWNrKSB7Ci0gKiAgIHZlY3RvcjxpbnQ+IHY7Ci0gKiAgIHYucHVzaF9iYWNr
KDQyKTsKLSAqIH0KLSAqCi0gKiBCRU5DSE1BUksoaW5zZXJ0VmVjdG9yQmVnaW4sIG4pIHsKLSAq
ICAgdmVjdG9yPGludD4gdjsKLSAqICAgRk9SX0VBQ0hfUkFOR0UgKGksIDAsIG4pIHsKLSAqICAg
ICB2Lmluc2VydCh2LmJlZ2luKCksIDQyKTsKLSAqICAgfQotICogfQotICovCi0jZGVmaW5lIEJF
TkNITUFSSyhuYW1lLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBCRU5DSE1BUktfSU1QTCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBuYW1lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgRkJfU1RSSU5HSVpFKG5hbWUpLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZCX0FSR18yX09SXzEoMSwgIyMgX19W
QV9BUkdTX18pLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGQl9PTkVfT1JfTk9O
RSh1bnNpZ25lZCwgIyMgX19WQV9BUkdTX18pLCAgICAgICAgICAgICAgICAgICBcCi0gICAgX19W
QV9BUkdTX18pCi0KLS8qKgotICogTGlrZSBCRU5DSE1BUksgYWJvdmUsIGJ1dCBhbGxvd3MgdGhl
IHVzZXIgdG8gcmV0dXJuIHRoZSBhY3R1YWwKLSAqIG51bWJlciBvZiBpdGVyYXRpb25zIGV4ZWN1
dGVkIGluIHRoZSBmdW5jdGlvbiBib2R5LiBUaGlzIGNhbiBiZQotICogdXNlZnVsIGlmIHRoZSBi
ZW5jaG1hcmsgZnVuY3Rpb24gZG9lc24ndCBrbm93IHVwZnJvbnQgaG93IG1hbnkKLSAqIGl0ZXJh
dGlvbnMgaXQncyBnb2luZyB0byBydW4gb3IgaWYgaXQgcnVucyB0aHJvdWdoIGEgY2VydGFpbgot
ICogbnVtYmVyIG9mIHRlc3QgY2FzZXMsIGUuZy46Ci0gKgotICogQkVOQ0hNQVJLX01VTFRJKGJl
bmNobWFya1NvbWV0aGluZykgewotICogICBzdGQ6OnZlY3RvcjxpbnQ+IHRlc3RDYXNlcyB7IDAs
IDEsIDEsIDIsIDMsIDUgfTsKLSAqICAgZm9yIChpbnQgYyA6IHRlc3RDYXNlcykgewotICogICAg
IGRvU29tZXRoaW5nKGMpOwotICogICB9Ci0gKiAgIHJldHVybiB0ZXN0Q2FzZXMuc2l6ZSgpOwot
ICogfQotICovCi0jZGVmaW5lIEJFTkNITUFSS19NVUxUSShuYW1lLCAuLi4pICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBCRU5DSE1BUktfTVVMVElfSU1QTCggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBuYW1lLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRkJfU1RSSU5HSVpF
KG5hbWUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZC
X09ORV9PUl9OT05FKHVuc2lnbmVkLCAjIyBfX1ZBX0FSR1NfXyksICAgICAgICAgICAgICAgICAg
IFwKLSAgICBfX1ZBX0FSR1NfXykKLQotLyoqCi0gKiBEZWZpbmVzIGEgYmVuY2htYXJrIHRoYXQg
cGFzc2VzIGEgcGFyYW1ldGVyIHRvIGFub3RoZXIgb25lLiBUaGlzIGlzCi0gKiBjb21tb24gZm9y
IGJlbmNobWFya3MgdGhhdCBuZWVkIGEgInByb2JsZW0gc2l6ZSIgaW4gYWRkaXRpb24gdG8KLSAq
ICJudW1iZXIgb2YgaXRlcmF0aW9ucyIuIENvbnNpZGVyOgotICoKLSAqIHZvaWQgcHVzaEJhY2so
dWludCBuLCBzaXplX3QgaW5pdGlhbFNpemUpIHsKLSAqICAgdmVjdG9yPGludD4gdjsKLSAqICAg
QkVOQ0hNQVJLX1NVU1BFTkQgewotICogICAgIHYucmVzaXplKGluaXRpYWxTaXplKTsKLSAqICAg
fQotICogICBGT1JfRUFDSF9SQU5HRSAoaSwgMCwgbikgewotICogICAgdi5wdXNoX2JhY2soaSk7
Ci0gKiAgIH0KLSAqIH0KLSAqIEJFTkNITUFSS19QQVJBTShwdXNoQmFjaywgMCkKLSAqIEJFTkNI
TUFSS19QQVJBTShwdXNoQmFjaywgMTAwMCkKLSAqIEJFTkNITUFSS19QQVJBTShwdXNoQmFjaywg
MTAwMDAwMCkKLSAqCi0gKiBUaGUgYmVuY2htYXJrIGFib3ZlIGVzdGltYXRlcyB0aGUgc3BlZWQg
b2YgcHVzaF9iYWNrIGF0IGRpZmZlcmVudAotICogaW5pdGlhbCBzaXplcyBvZiB0aGUgdmVjdG9y
LiBUaGUgZnJhbWV3b3JrIHdpbGwgcGFzcyAwLCAxMDAwLCBhbmQKLSAqIDEwMDAwMDAgZm9yIGlu
aXRpYWxTaXplLCBhbmQgdGhlIGl0ZXJhdGlvbiBjb3VudCBmb3Igbi4KLSAqLwotI2RlZmluZSBC
RU5DSE1BUktfUEFSQU0obmFtZSwgcGFyYW0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBCRU5DSE1BUktfTkFNRURfUEFSQU0obmFtZSwgcGFyYW0sIHBhcmFtKQotCi0v
KioKLSAqIFNhbWUgYXMgQkVOQ0hNQVJLX1BBUkFNLCBidXQgYWxsb3dzIG9uZSB0byByZXR1cm4g
dGhlIGFjdHVhbCBudW1iZXIgb2YKLSAqIGl0ZXJhdGlvbnMgdGhhdCBoYXZlIGJlZW4gcnVuLgot
ICovCi0jZGVmaW5lIEJFTkNITUFSS19QQVJBTV9NVUxUSShuYW1lLCBwYXJhbSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIEJFTkNITUFSS19OQU1FRF9QQVJBTV9NVUxUSShuYW1l
LCBwYXJhbSwgcGFyYW0pCi0KLS8qCi0gKiBMaWtlIEJFTkNITUFSS19QQVJBTSgpLCBidXQgYWxs
b3dzIGEgY3VzdG9tIG5hbWUgdG8gYmUgc3BlY2lmaWVkIGZvciBlYWNoCi0gKiBwYXJhbWV0ZXIs
IHJhdGhlciB0aGFuIHVzaW5nIHRoZSBwYXJhbWV0ZXIgdmFsdWUuCi0gKgotICogVXNlZnVsIHdo
ZW4gdGhlIHBhcmFtZXRlciB2YWx1ZSBpcyBub3QgYSB2YWxpZCB0b2tlbiBmb3Igc3RyaW5nIHBh
c3RpbmcsCi0gKiBvZiB3aGVuIHlvdSB3YW50IHRvIHNwZWNpZnkgbXVsdGlwbGUgcGFyYW1ldGVy
IGFyZ3VtZW50cy4KLSAqCi0gKiBGb3IgZXhhbXBsZToKLSAqCi0gKiB2b2lkIGFkZFZhbHVlKHVp
bnQgbiwgaW50NjRfdCBidWNrZXRTaXplLCBpbnQ2NF90IG1pbiwgaW50NjRfdCBtYXgpIHsKLSAq
ICAgSGlzdG9ncmFtPGludDY0X3Q+IGhpc3QoYnVja2V0U2l6ZSwgbWluLCBtYXgpOwotICogICBp
bnQ2NF90IG51bSA9IG1pbjsKLSAqICAgRk9SX0VBQ0hfUkFOR0UgKGksIDAsIG4pIHsKLSAqICAg
ICBoaXN0LmFkZFZhbHVlKG51bSk7Ci0gKiAgICAgKytudW07Ci0gKiAgICAgaWYgKG51bSA+IG1h
eCkgeyBudW0gPSBtaW47IH0KLSAqICAgfQotICogfQotICoKLSAqIEJFTkNITUFSS19OQU1FRF9Q
QVJBTShhZGRWYWx1ZSwgMF90b18xMDAsIDEsIDAsIDEwMCkKLSAqIEJFTkNITUFSS19OQU1FRF9Q
QVJBTShhZGRWYWx1ZSwgMF90b18xMDAwLCAxMCwgMCwgMTAwMCkKLSAqIEJFTkNITUFSS19OQU1F
RF9QQVJBTShhZGRWYWx1ZSwgNWtfdG9fMjBrLCAyNTAsIDUwMDAsIDIwMDAwKQotICovCi0jZGVm
aW5lIEJFTkNITUFSS19OQU1FRF9QQVJBTShuYW1lLCBwYXJhbV9uYW1lLCAuLi4pICAgICAgICAg
ICAgICAgICAgICBcCi0gIEJFTkNITUFSS19JTVBMKCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBGQl9DT05DQVRFTkFURShuYW1l
LCBGQl9DT05DQVRFTkFURShfLCBwYXJhbV9uYW1lKSksICAgICAgICAgICAgICBcCi0gICAgICBG
Ql9TVFJJTkdJWkUobmFtZSkgIigiIEZCX1NUUklOR0laRShwYXJhbV9uYW1lKSAiKSIsICAgICAg
ICAgICAgICBcCi0gICAgICBpdGVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB1bnNpZ25lZCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpdGVy
cykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgbmFtZShpdGVycywgIyMgX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotLyoqCi0gKiBTYW1lIGFzIEJFTkNITUFS
S19OQU1FRF9QQVJBTSwgYnV0IGFsbG93cyBvbmUgdG8gcmV0dXJuIHRoZSBhY3R1YWwgbnVtYmVy
Ci0gKiBvZiBpdGVyYXRpb25zIHRoYXQgaGF2ZSBiZWVuIHJ1bi4KLSAqLwotI2RlZmluZSBCRU5D
SE1BUktfTkFNRURfUEFSQU1fTVVMVEkobmFtZSwgcGFyYW1fbmFtZSwgLi4uKSAgICAgICAgICAg
ICAgXAotICBCRU5DSE1BUktfTVVMVElfSU1QTCggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgRkJfQ09OQ0FURU5BVEUobmFtZSwgRkJfQ09O
Q0FURU5BVEUoXywgcGFyYW1fbmFtZSkpLCAgICAgICAgICAgICAgXAotICAgICAgRkJfU1RSSU5H
SVpFKG5hbWUpICIoIiBGQl9TVFJJTkdJWkUocGFyYW1fbmFtZSkgIikiLCAgICAgICAgICAgICAg
XAotICAgICAgdW5zaWduZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgaXRlcnMpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBuYW1lKGl0
ZXJzLCAjIyBfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICB9Ci0KLS8qKgotICogSnVzdCBsaWtlIEJFTkNITUFSSywgYnV0IHByaW50cyB0aGUgdGltZSBy
ZWxhdGl2ZSB0byBhCi0gKiBiYXNlbGluZS4gVGhlIGJhc2VsaW5lIGlzIHRoZSBtb3N0IHJlY2Vu
dCBCRU5DSE1BUksoKSBzZWVuIGluCi0gKiB0aGUgY3VycmVudCBzY29wZS4gRXhhbXBsZToKLSAq
Ci0gKiAvLyBUaGlzIGlzIHRoZSBiYXNlbGluZQotICogQkVOQ0hNQVJLKGluc2VydFZlY3RvckJl
Z2luLCBuKSB7Ci0gKiAgIHZlY3RvcjxpbnQ+IHY7Ci0gKiAgIEZPUl9FQUNIX1JBTkdFIChpLCAw
LCBuKSB7Ci0gKiAgICAgdi5pbnNlcnQodi5iZWdpbigpLCA0Mik7Ci0gKiAgIH0KLSAqIH0KLSAq
Ci0gKiBCRU5DSE1BUktfUkVMQVRJVkUoaW5zZXJ0TGlzdEJlZ2luLCBuKSB7Ci0gKiAgIGxpc3Q8
aW50PiBzOwotICogICBGT1JfRUFDSF9SQU5HRSAoaSwgMCwgbikgewotICogICAgIHMuaW5zZXJ0
KHMuYmVnaW4oKSwgNDIpOwotICogICB9Ci0gKiB9Ci0gKgotICogQW55IG51bWJlciBvZiByZWxh
dGl2ZSBiZW5jaG1hcmsgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhCi0gKiBiYXNlbGluZS4gQW5v
dGhlciBCRU5DSE1BUksoKSBvY2N1cnJlbmNlIGVmZmVjdGl2ZWx5IGVzdGFibGlzaGVzIGEKLSAq
IG5ldyBiYXNlbGluZS4KLSAqLwotI2RlZmluZSBCRU5DSE1BUktfUkVMQVRJVkUobmFtZSwgLi4u
KSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgQkVOQ0hNQVJLX0lNUEwoICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbmFtZSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICIl
IiBGQl9TVFJJTkdJWkUobmFtZSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICBGQl9BUkdfMl9PUl8xKDEsICMjIF9fVkFfQVJHU19fKSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgRkJfT05FX09SX05PTkUodW5zaWduZWQsICMjIF9fVkFfQVJHU19f
KSwgICAgICAgICAgICAgICAgICAgXAotICAgIF9fVkFfQVJHU19fKQotCi0vKioKLSAqIFNhbWUg
YXMgQkVOQ0hNQVJLX1JFTEFUSVZFLCBidXQgYWxsb3dzIG9uZSB0byByZXR1cm4gdGhlIGFjdHVh
bCBudW1iZXIKLSAqIG9mIGl0ZXJhdGlvbnMgdGhhdCBoYXZlIGJlZW4gcnVuLgotICovCi0jZGVm
aW5lIEJFTkNITUFSS19SRUxBVElWRV9NVUxUSShuYW1lLCAuLi4pICAgICAgICAgICAgICAgICAg
ICAgXAotICBCRU5DSE1BUktfTVVMVElfSU1QTCggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBuYW1lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiUiIEZCX1NUUklOR0laRShuYW1lKSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZCX09ORV9PUl9OT05FKHVu
c2lnbmVkLCAjIyBfX1ZBX0FSR1NfXyksICAgICAgICAgICAgICAgICAgIFwKLSAgICBfX1ZBX0FS
R1NfXykKLQotLyoqCi0gKiBBIGNvbWJpbmF0aW9uIG9mIEJFTkNITUFSS19SRUxBVElWRSBhbmQg
QkVOQ0hNQVJLX1BBUkFNLgotICovCi0jZGVmaW5lIEJFTkNITUFSS19SRUxBVElWRV9QQVJBTShu
YW1lLCBwYXJhbSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEJFTkNITUFSS19SRUxB
VElWRV9OQU1FRF9QQVJBTShuYW1lLCBwYXJhbSwgcGFyYW0pCi0KLS8qKgotICogU2FtZSBhcyBC
RU5DSE1BUktfUkVMQVRJVkVfUEFSQU0sIGJ1dCBhbGxvd3Mgb25lIHRvIHJldHVybiB0aGUgYWN0
dWFsCi0gKiBudW1iZXIgb2YgaXRlcmF0aW9ucyB0aGF0IGhhdmUgYmVlbiBydW4uCi0gKi8KLSNk
ZWZpbmUgQkVOQ0hNQVJLX1JFTEFUSVZFX1BBUkFNX01VTFRJKG5hbWUsIHBhcmFtKSAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgQkVOQ0hNQVJLX1JFTEFUSVZFX05BTUVEX1BBUkFNX01VTFRJKG5h
bWUsIHBhcmFtLCBwYXJhbSkKLQotLyoqCi0gKiBBIGNvbWJpbmF0aW9uIG9mIEJFTkNITUFSS19S
RUxBVElWRSBhbmQgQkVOQ0hNQVJLX05BTUVEX1BBUkFNLgotICovCi0jZGVmaW5lIEJFTkNITUFS
S19SRUxBVElWRV9OQU1FRF9QQVJBTShuYW1lLCBwYXJhbV9uYW1lLCAuLi4pICAgICAgICAgICBc
Ci0gIEJFTkNITUFSS19JTVBMKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICBGQl9DT05DQVRFTkFURShuYW1lLCBGQl9DT05DQVRF
TkFURShfLCBwYXJhbV9uYW1lKSksICAgICAgICAgICAgICBcCi0gICAgICAiJSIgRkJfU1RSSU5H
SVpFKG5hbWUpICIoIiBGQl9TVFJJTkdJWkUocGFyYW1fbmFtZSkgIikiLCAgICAgICAgICBcCi0g
ICAgICBpdGVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICB1bnNpZ25lZCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpdGVycykgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
bmFtZShpdGVycywgIyMgX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIH0KLQotLyoqCi0gKiBTYW1lIGFzIEJFTkNITUFSS19SRUxBVElWRV9O
QU1FRF9QQVJBTSwgYnV0IGFsbG93cyBvbmUgdG8gcmV0dXJuIHRoZQotICogYWN0dWFsIG51bWJl
ciBvZiBpdGVyYXRpb25zIHRoYXQgaGF2ZSBiZWVuIHJ1bi4KLSAqLwotI2RlZmluZSBCRU5DSE1B
UktfUkVMQVRJVkVfTkFNRURfUEFSQU1fTVVMVEkobmFtZSwgcGFyYW1fbmFtZSwgLi4uKSAgICAg
XAotICBCRU5DSE1BUktfTVVMVElfSU1QTCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgRkJfQ09OQ0FURU5BVEUobmFtZSwgRkJfQ09OQ0FU
RU5BVEUoXywgcGFyYW1fbmFtZSkpLCAgICAgICAgICAgICAgXAotICAgICAgIiUiIEZCX1NUUklO
R0laRShuYW1lKSAiKCIgRkJfU1RSSU5HSVpFKHBhcmFtX25hbWUpICIpIiwgICAgICAgICAgXAot
ICAgICAgdW5zaWduZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgaXRlcnMpIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBuYW1lKGl0ZXJz
LCAjIyBfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9
Ci0KLS8qKgotICogRHJhd3MgYSBsaW5lIG9mIGRhc2hlcy4KLSAqLwotI2RlZmluZSBCRU5DSE1B
UktfRFJBV19MSU5FKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIHN0YXRpYyBib29sIEZCX0FOT05ZTU9VU19WQVJJQUJMRShmb2xseUJlbmNobWFya1Vu
dXNlZCkgPSAoICAgICAgICAgICAgIFwKLSAgICA6OmZvbGx5OjphZGRCZW5jaG1hcmsoX19GSUxF
X18sICItIiwgW10oKSAtPiB1bnNpZ25lZCB7IHJldHVybiAwOyB9KSwgXAotICAgIHRydWUpOwot
Ci0vKioKLSAqIEFsbG93cyBleGVjdXRpb24gb2YgY29kZSB0aGF0IGRvZXNuJ3QgY291bnQgdG9y
d2FyZCB0aGUgYmVuY2htYXJrJ3MKLSAqIHRpbWUgYnVkZ2V0LiBFeGFtcGxlOgotICoKLSAqIEJF
TkNITUFSS19TVEFSVF9HUk9VUChpbnNlcnRWZWN0b3JCZWdpbiwgbikgewotICogICB2ZWN0b3I8
aW50PiB2OwotICogICBCRU5DSE1BUktfU1VTUEVORCB7Ci0gKiAgICAgdi5yZXNlcnZlKG4pOwot
ICogICB9Ci0gKiAgIEZPUl9FQUNIX1JBTkdFIChpLCAwLCBuKSB7Ci0gKiAgICAgdi5pbnNlcnQo
di5iZWdpbigpLCA0Mik7Ci0gKiAgIH0KLSAqIH0KLSAqLwotI2RlZmluZSBCRU5DSE1BUktfU1VT
UEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChhdXRvIEZCX0FOT05Z
TU9VU19WQVJJQUJMRShCRU5DSE1BUktfU1VTUEVORCkgPSAgIFwKLSAgICAgIDo6Zm9sbHk6OkJl
bmNobWFya1N1c3BlbmRlcigpKSB7fSAgICAgICAgICAgICAgICAgXAotICBlbHNlCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9CaXRzLmggYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9CaXRzLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MGI3YmYwNWM0ZGQ5OTY0NTVjYjdjNTU2ODEwYjczMGMw
NTk1M2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvQml0cy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5j
LgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAg
KHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4g
Y29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9m
IHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
TElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig
YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUg
TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
LSAqLwotCi0vKioKLSAqIFZhcmlvdXMgbG93LWxldmVsLCBiaXQtbWFuaXB1bGF0aW9uIHJvdXRp
bmVzLgotICoKLSAqIGZpbmRGaXJzdFNldCh4KSAgW2NvbnN0ZXhwcl0KLSAqICAgIGZpbmQgZmly
c3QgKGxlYXN0IHNpZ25pZmljYW50KSBiaXQgc2V0IGluIGEgdmFsdWUgb2YgYW4gaW50ZWdyYWwg
dHlwZSwKLSAqICAgIDEtYmFzZWQgKGxpa2UgZmZzKCkpLiAgMCA9IG5vIGJpdHMgYXJlIHNldCAo
eCA9PSAwKQotICoKLSAqIGZpbmRMYXN0U2V0KHgpICBbY29uc3RleHByXQotICogICAgZmluZCBs
YXN0IChtb3N0IHNpZ25pZmljYW50KSBiaXQgc2V0IGluIGEgdmFsdWUgb2YgYW4gaW50ZWdyYWwg
dHlwZSwKLSAqICAgIDEtYmFzZWQuICAwID0gbm8gYml0cyBhcmUgc2V0ICh4ID09IDApCi0gKiAg
ICBmb3IgeCAhPSAwLCBmaW5kTGFzdFNldCh4KSA9PSAxICsgZmxvb3IobG9nMih4KSkKLSAqCi0g
KiBuZXh0UG93VHdvKHgpICBbY29uc3RleHByXQotICogICAgRmluZHMgdGhlIG5leHQgcG93ZXIg
b2YgdHdvID49IHguCi0gKgotICogaXNQb3dUd28oeCkgIFtjb25zdGV4cHJdCi0gKiAgICByZXR1
cm4gdHJ1ZSBpZmYgeCBpcyBhIHBvd2VyIG9mIHR3bwotICoKLSAqIHBvcGNvdW50KHgpCi0gKiAg
ICByZXR1cm4gdGhlIG51bWJlciBvZiAxIGJpdHMgaW4geAotICoKLSAqIEVuZGlhbgotICogICAg
Y29udmVydCBiZXR3ZWVuIG5hdGl2ZSwgYmlnLCBhbmQgbGl0dGxlIGVuZGlhbiByZXByZXNlbnRh
dGlvbgotICogICAgRW5kaWFuOjpiaWcoeCkgICAgICBiaWcgPC0+IG5hdGl2ZQotICogICAgRW5k
aWFuOjpsaXR0bGUoeCkgICBsaXR0bGUgPC0+IG5hdGl2ZQotICogICAgRW5kaWFuOjpzd2FwKHgp
ICAgICBiaWcgPC0+IGxpdHRsZQotICoKLSAqIEJpdEl0ZXJhdG9yCi0gKiAgICBXcmFwcGVyIGFy
b3VuZCBhbiBpdGVyYXRvciBvdmVyIGFuIGludGVncmFsIHR5cGUgdGhhdCBpdGVyYXRlcwotICog
ICAgb3ZlciBpdHMgdW5kZXJseWluZyBiaXRzIGluIE1TYiB0byBMU2Igb3JkZXIKLSAqCi0gKiBm
aW5kRmlyc3RTZXQoQml0SXRlcmF0b3IgYmVnaW4sIEJpdEl0ZXJhdG9yIGVuZCkKLSAqICAgIHJl
dHVybiBhIEJpdEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCAxIGJpdCBpbiBbYmVnaW4s
IGVuZCksIG9yCi0gKiAgICBlbmQgaWYgYWxsIGJpdHMgaW4gW2JlZ2luLCBlbmQpIGFyZSAwCi0g
KgotICogQGF1dGhvciBUdWRvciBCb3NtYW4gKHR1ZG9yYkBmYi5jb20pCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiAhZGVmaW5lZChfX2NsYW5nX18pICYmICEoZGVmaW5lZChfTVNDX1ZFUikg
JiYgKF9NU0NfVkVSIDwgMTkwMCkpCi0jZGVmaW5lIEZPTExZX0lOVFJJTlNJQ19DT05TVEVYUFIg
Y29uc3RleHByCi0jZWxzZQotLy8gR0NDIGFuZCBNU1ZDIDIwMTUrIGFyZSB0aGUgb25seSBjb21w
aWxlcnMgd2l0aAotLy8gaW50cmluc2ljcyBjb25zdGV4cHIuCi0jZGVmaW5lIEZPTExZX0lOVFJJ
TlNJQ19DT05TVEVYUFIgY29uc3QKLSNlbmRpZgotCi0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNs
dWRlIDxjaW50dHlwZXM+Ci0jaW5jbHVkZSA8Y3N0ZGludD4KLSNpbmNsdWRlIDxjc3RyaW5nPgot
I2luY2x1ZGUgPGl0ZXJhdG9yPgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDx0eXBlX3Ry
YWl0cz4KLQotI2luY2x1ZGUgPGJvb3N0L2l0ZXJhdG9yL2l0ZXJhdG9yX2FkYXB0b3IuaHBwPgot
Ci0jaW5jbHVkZSA8Zm9sbHkvQXNzdW1lLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvTGlrZWx5Lmg+Ci0j
aW5jbHVkZSA8Zm9sbHkvUG9ydGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxmb2xseS9kZXRhaWwvQml0
SXRlcmF0b3JEZXRhaWwuaD4KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9CdWlsdGlucy5o
PgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi0vLyBHZW5lcmF0ZSBvdmVybG9hZHMgZm9yIGZpbmRG
aXJzdFNldCBhcyB3cmFwcGVycyBhcm91bmQKLS8vIGFwcHJvcHJpYXRlIGZmcywgZmZzbCwgZmZz
bGwgZ2NjIGJ1aWx0aW5zCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWlubGluZSBGT0xMWV9JTlRSSU5T
SUNfQ09OU1RFWFBSCi10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgKHN0ZDo6aXNfaW50ZWdy
YWw8VD46OnZhbHVlICYmCi0gICBzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSAmJgotICAgc2l6
ZW9mKFQpIDw9IHNpemVvZih1bnNpZ25lZCBpbnQpKSwKLSAgdW5zaWduZWQgaW50Pjo6dHlwZQot
ICBmaW5kRmlyc3RTZXQoVCB4KSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KF9fYnVpbHRpbl9mZnMoc3RhdGljX2Nhc3Q8aW50Pih4KSkpOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4KLWlubGluZSBGT0xMWV9JTlRSSU5TSUNfQ09OU1RFWFBSCi10eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjwKLSAgKHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlICYmCi0gICBzdGQ6OmlzX3Vu
c2lnbmVkPFQ+Ojp2YWx1ZSAmJgotICAgc2l6ZW9mKFQpID4gc2l6ZW9mKHVuc2lnbmVkIGludCkg
JiYKLSAgIHNpemVvZihUKSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpLAotICB1bnNpZ25lZCBp
bnQ+Ojp0eXBlCi0gIGZpbmRGaXJzdFNldChUIHgpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oX19idWlsdGluX2Zmc2woc3RhdGljX2Nhc3Q8bG9uZz4oeCkpKTsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIFQ+Ci1pbmxpbmUgRk9MTFlfSU5UUklOU0lDX0NPTlNURVhQUgotdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gIChzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAmJgot
ICAgc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUgJiYKLSAgIHNpemVvZihUKSA+IHNpemVvZih1
bnNpZ25lZCBsb25nKSAmJgotICAgc2l6ZW9mKFQpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nIGxv
bmcpKSwKLSAgdW5zaWduZWQgaW50Pjo6dHlwZQotICBmaW5kRmlyc3RTZXQoVCB4KSB7Ci0gIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fYnVpbHRpbl9mZnNsbChzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KHgpKSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotaW5saW5lIEZPTExZ
X0lOVFJJTlNJQ19DT05TVEVYUFIKLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAoc3RkOjpp
c19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYgc3RkOjppc19zaWduZWQ8VD46OnZhbHVlKSwKLSAgdW5z
aWduZWQgaW50Pjo6dHlwZQotICBmaW5kRmlyc3RTZXQoVCB4KSB7Ci0gIC8vIE5vdGUgdGhhdCBj
b252ZXJzaW9uIGZyb20gYSBzaWduZWQgdHlwZSB0byB0aGUgY29ycmVzcG9uZGluZyB1bnNpZ25l
ZAotICAvLyB0eXBlIGlzIHRlY2huaWNhbGx5IGltcGxlbWVudGF0aW9uLWRlZmluZWQsIGJ1dCB3
aWxsIGxpa2VseSB3b3JrCi0gIC8vIG9uIGFueSBpbXBlbWVudGF0aW9uIHRoYXQgdXNlcyB0d28n
cyBjb21wbGVtZW50LgotICByZXR1cm4gZmluZEZpcnN0U2V0KHN0YXRpY19jYXN0PHR5cGVuYW1l
IHN0ZDo6bWFrZV91bnNpZ25lZDxUPjo6dHlwZT4oeCkpOwotfQotCi0vLyBmaW5kTGFzdFNldDog
cmV0dXJuIHRoZSAxLWJhc2VkIGluZGV4IG9mIHRoZSBoaWdoZXN0IGJpdCBzZXQKLS8vIGZvciB4
ID4gMCwgZmluZExhc3RTZXQoeCkgPT0gMSArIGZsb29yKGxvZzIoeCkpCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4KLWlubGluZSBGT0xMWV9JTlRSSU5TSUNfQ09OU1RFWFBSCi10eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjwKLSAgKHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlICYmCi0gICBzdGQ6OmlzX3Vu
c2lnbmVkPFQ+Ojp2YWx1ZSAmJgotICAgc2l6ZW9mKFQpIDw9IHNpemVvZih1bnNpZ25lZCBpbnQp
KSwKLSAgdW5zaWduZWQgaW50Pjo6dHlwZQotICBmaW5kTGFzdFNldChUIHgpIHsKLSAgLy8gSWYg
WCBpcyBhIHBvd2VyIG9mIHR3byBYIC0gWSA9ICgoWCAtIDEpIF4gWSkgKyAxLiBEb2luZyB0aGlz
IHRyYW5zZm9ybWF0aW9uCi0gIC8vIGFsbG93cyBHQ0MgdG8gcmVtb3ZlIGl0cyBvd24geG9yIHRo
YXQgaXQgYWRkcyB0byBpbXBsZW1lbnQgY2x6IHVzaW5nIGJzcgotICByZXR1cm4geCA/ICgoOCAq
IHNpemVvZih1bnNpZ25lZCBpbnQpIC0gMSkgXiBfX2J1aWx0aW5fY2x6KHgpKSArIDEgOiAwOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWlubGluZSBGT0xMWV9JTlRSSU5TSUNfQ09OU1RFWFBS
Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgKHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVl
ICYmCi0gICBzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSAmJgotICAgc2l6ZW9mKFQpID4gc2l6
ZW9mKHVuc2lnbmVkIGludCkgJiYKLSAgIHNpemVvZihUKSA8PSBzaXplb2YodW5zaWduZWQgbG9u
ZykpLAotICB1bnNpZ25lZCBpbnQ+Ojp0eXBlCi0gIGZpbmRMYXN0U2V0KFQgeCkgewotICByZXR1
cm4geCA/ICgoOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEpIF4gX19idWlsdGluX2Nsemwo
eCkpICsgMSA6IDA7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotaW5saW5lIEZPTExZX0lOVFJJ
TlNJQ19DT05TVEVYUFIKLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAoc3RkOjppc19pbnRl
Z3JhbDxUPjo6dmFsdWUgJiYKLSAgIHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlICYmCi0gICBz
aXplb2YoVCkgPiBzaXplb2YodW5zaWduZWQgbG9uZykgJiYKLSAgIHNpemVvZihUKSA8PSBzaXpl
b2YodW5zaWduZWQgbG9uZyBsb25nKSksCi0gIHVuc2lnbmVkIGludD46OnR5cGUKLSAgZmluZExh
c3RTZXQoVCB4KSB7Ci0gIHJldHVybiB4ID8gKCg4ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9u
ZykgLSAxKSBeIF9fYnVpbHRpbl9jbHpsbCh4KSkgKyAxCi0gICAgICAgICAgIDogMDsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIFQ+Ci1pbmxpbmUgRk9MTFlfSU5UUklOU0lDX0NPTlNURVhQUgotdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gIChzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAmJgot
ICAgc3RkOjppc19zaWduZWQ8VD46OnZhbHVlKSwKLSAgdW5zaWduZWQgaW50Pjo6dHlwZQotICBm
aW5kTGFzdFNldChUIHgpIHsKLSAgcmV0dXJuIGZpbmRMYXN0U2V0KHN0YXRpY19jYXN0PHR5cGVu
YW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxUPjo6dHlwZT4oeCkpOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4KLWlubGluZSBGT0xMWV9JTlRSSU5TSUNfQ09OU1RFWFBSCi10eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjwKLSAgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYgc3RkOjppc191bnNpZ25l
ZDxUPjo6dmFsdWUsCi0gIFQ+Ojp0eXBlCi1uZXh0UG93VHdvKFQgdikgewotICByZXR1cm4gdiA/
IChUKDEpIDw8IGZpbmRMYXN0U2V0KHYgLSAxKSkgOiAxOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4KLWlubGluZSBGT0xMWV9JTlRSSU5TSUNfQ09OU1RFWFBSIHR5cGVuYW1lIHN0ZDo6Ci0gICAg
ZW5hYmxlX2lmPHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlICYmIHN0ZDo6aXNfdW5zaWduZWQ8
VD46OnZhbHVlLCBUPjo6dHlwZQotICAgIHByZXZQb3dUd28oVCB2KSB7Ci0gIHJldHVybiB2ID8g
KFQoMSkgPDwgKGZpbmRMYXN0U2V0KHYpIC0gMSkpIDogMDsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IFQ+Ci1pbmxpbmUgY29uc3RleHByIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgIHN0ZDo6
aXNfaW50ZWdyYWw8VD46OnZhbHVlICYmIHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlLAotICAg
IGJvb2w+Ojp0eXBlCi1pc1Bvd1R3byhUIHYpIHsKLSAgcmV0dXJuICh2ICE9IDApICYmICEodiAm
ICh2IC0gMSkpOwotfQotCi0vKioKLSAqIFBvcHVsYXRpb24gY291bnQKLSAqLwotdGVtcGxhdGUg
PGNsYXNzIFQ+Ci1pbmxpbmUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gIChzdGQ6OmlzX2lu
dGVncmFsPFQ+Ojp2YWx1ZSAmJgotICAgc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUgJiYKLSAg
IHNpemVvZihUKSA8PSBzaXplb2YodW5zaWduZWQgaW50KSksCi0gIHNpemVfdD46OnR5cGUKLSAg
cG9wY291bnQoVCB4KSB7Ci0gIHJldHVybiBzaXplX3QoX19idWlsdGluX3BvcGNvdW50KHgpKTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1pbmxpbmUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
Ci0gIChzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAmJgotICAgc3RkOjppc191bnNpZ25lZDxU
Pjo6dmFsdWUgJiYKLSAgIHNpemVvZihUKSA+IHNpemVvZih1bnNpZ25lZCBpbnQpICYmCi0gICBz
aXplb2YoVCkgPD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpLAotICBzaXplX3Q+Ojp0eXBl
Ci0gIHBvcGNvdW50KFQgeCkgewotICByZXR1cm4gc2l6ZV90KF9fYnVpbHRpbl9wb3Bjb3VudGxs
KHgpKTsKLX0KLQotLyoqCi0gKiBFbmRpYW5uZXNzIGRldGVjdGlvbiBhbmQgbWFuaXB1bGF0aW9u
IHByaW1pdGl2ZXMuCi0gKi8KLW5hbWVzcGFjZSBkZXRhaWwgewotCi10ZW1wbGF0ZSA8c2l6ZV90
IFNpemU+Ci1zdHJ1Y3QgdWludF90eXBlc19ieV9zaXplOwotCi0jZGVmaW5lIEZCX0dFTihzeiwg
Zm4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHN0YXRpYyBpbmxp
bmUgdWludCMjc3ojI190IGJ5dGVzd2FwX2dlbih1aW50IyNzeiMjX3QgdikgeyBcCi0gICAgcmV0
dXJuIGZuKHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIHRlbXBsYXRlIDw+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIHN0cnVjdCB1aW50X3R5cGVzX2J5X3NpemU8c3ogLyA4PiB7ICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgdXNpbmcgdHlwZSA9IHVpbnQjI3N6IyNfdDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIH07Ci0KLUZCX0dFTig4LCB1aW50OF90KQotI2lmZGVm
IF9NU0NfVkVSCi1GQl9HRU4oNjQsIF9ieXRlc3dhcF91aW50NjQpCi1GQl9HRU4oMzIsIF9ieXRl
c3dhcF91bG9uZykKLUZCX0dFTigxNiwgX2J5dGVzd2FwX3VzaG9ydCkKLSNlbHNlCi1GQl9HRU4o
NjQsIF9fYnVpbHRpbl9ic3dhcDY0KQotRkJfR0VOKDMyLCBfX2J1aWx0aW5fYnN3YXAzMikKLUZC
X0dFTigxNiwgX19idWlsdGluX2Jzd2FwMTYpCi0jZW5kaWYKLQotI3VuZGVmIEZCX0dFTgotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBFbmRpYW5JbnQgewotICBzdGF0aWNfYXNzZXJ0KAot
ICAgICAgKHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgYm9v
bD46OnZhbHVlKSB8fAotICAgICAgICAgIHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVl
LAotICAgICAgInRlbXBsYXRlIHR5cGUgcGFyYW1ldGVyIG11c3QgYmUgbm9uLWJvb2wgaW50ZWdy
YWwgb3IgZmxvYXRpbmcgcG9pbnQiKTsKLSAgc3RhdGljIFQgc3dhcChUIHgpIHsKLSAgICAvLyB3
ZSBpbXBsZW1lbnQgdGhpcyB3aXRoIG1lbWNweSBiZWNhdXNlIHRoYXQgaXMgZGVmaW5lZCBiZWhh
dmlvciBpbiBDKysKLSAgICAvLyB3ZSByZWx5IG9uIGNvbXBpbGVycyB0byBvcHRpbWl6ZSBhd2F5
IHRoZSBtZW1jcHkgY2FsbHMKLSAgICBjb25zdGV4cHIgYXV0byBzID0gc2l6ZW9mKFQpOwotICAg
IHVzaW5nIEIgPSB0eXBlbmFtZSB1aW50X3R5cGVzX2J5X3NpemU8cz46OnR5cGU7Ci0gICAgQiBi
OwotICAgIHN0ZDo6bWVtY3B5KCZiLCAmeCwgcyk7Ci0gICAgYiA9IGJ5dGVzd2FwX2dlbihiKTsK
LSAgICBzdGQ6Om1lbWNweSgmeCwgJmIsIHMpOwotICAgIHJldHVybiB4OwotICB9Ci0gIHN0YXRp
YyBUIGJpZyhUIHgpIHsKLSAgICByZXR1cm4ga0lzTGl0dGxlRW5kaWFuID8gRW5kaWFuSW50Ojpz
d2FwKHgpIDogeDsKLSAgfQotICBzdGF0aWMgVCBsaXR0bGUoVCB4KSB7Ci0gICAgcmV0dXJuIGtJ
c0JpZ0VuZGlhbiA/IEVuZGlhbkludDo6c3dhcCh4KSA6IHg7Ci0gIH0KLX07Ci0KLX0gIC8vIG5h
bWVzcGFjZSBkZXRhaWwKLQotLy8gYmlnKiBjb252ZXJ0IGJldHdlZW4gbmF0aXZlIGFuZCBiaWct
ZW5kaWFuIHJlcHJlc2VudGF0aW9ucwotLy8gbGl0dGxlKiBjb252ZXJ0IGJldHdlZW4gbmF0aXZl
IGFuZCBsaXR0bGUtZW5kaWFuIHJlcHJlc2VudGF0aW9ucwotLy8gc3dhcCogY29udmVydCBiZXR3
ZWVuIGJpZy1lbmRpYW4gYW5kIGxpdHRsZS1lbmRpYW4gcmVwcmVzZW50YXRpb25zCi0vLwotLy8g
bnRvaHMsIGh0b25zID09IGJpZzE2Ci0vLyBudG9obCwgaHRvbmwgPT0gYmlnMzIKLSNkZWZpbmUg
RkJfR0VOMShmbiwgdCwgc3opIFwKLSAgc3RhdGljIHQgZm4jI3N6KHQgeCkgeyByZXR1cm4gZm48
dD4oeCk7IH0gXAotCi0jZGVmaW5lIEZCX0dFTjIodCwgc3opIFwKLSAgRkJfR0VOMShzd2FwLCB0
LCBzeikgXAotICBGQl9HRU4xKGJpZywgdCwgc3opIFwKLSAgRkJfR0VOMShsaXR0bGUsIHQsIHN6
KQotCi0jZGVmaW5lIEZCX0dFTihzeikgXAotICBGQl9HRU4yKHVpbnQjI3N6IyNfdCwgc3opIFwK
LSAgRkJfR0VOMihpbnQjI3N6IyNfdCwgc3opCi0KLWNsYXNzIEVuZGlhbiB7Ci0gcHVibGljOgot
ICBlbnVtIGNsYXNzIE9yZGVyIDogdWludDhfdCB7Ci0gICAgTElUVExFLAotICAgIEJJRwotICB9
OwotCi0gIHN0YXRpYyBjb25zdGV4cHIgT3JkZXIgb3JkZXIgPSBrSXNMaXR0bGVFbmRpYW4gPyBP
cmRlcjo6TElUVExFIDogT3JkZXI6OkJJRzsKLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RhdGlj
IFQgc3dhcChUIHgpIHsKLSAgICByZXR1cm4gZm9sbHk6OmRldGFpbDo6RW5kaWFuSW50PFQ+Ojpz
d2FwKHgpOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBUPiBzdGF0aWMgVCBiaWcoVCB4KSB7Ci0g
ICAgcmV0dXJuIGZvbGx5OjpkZXRhaWw6OkVuZGlhbkludDxUPjo6YmlnKHgpOwotICB9Ci0gIHRl
bXBsYXRlIDxjbGFzcyBUPiBzdGF0aWMgVCBsaXR0bGUoVCB4KSB7Ci0gICAgcmV0dXJuIGZvbGx5
OjpkZXRhaWw6OkVuZGlhbkludDxUPjo6bGl0dGxlKHgpOwotICB9Ci0KLSNpZiAhZGVmaW5lZChf
X0FORFJPSURfXykKLSAgRkJfR0VOKDY0KQotICBGQl9HRU4oMzIpCi0gIEZCX0dFTigxNikKLSAg
RkJfR0VOKDgpCi0jZW5kaWYKLX07Ci0KLSN1bmRlZiBGQl9HRU4KLSN1bmRlZiBGQl9HRU4yCi0j
dW5kZWYgRkJfR0VOMQotCi0vKioKLSAqIEZhc3QgYml0IGl0ZXJhdGlvbiBmYWNpbGl0eS4KLSAq
LwotCi0KLXRlbXBsYXRlIDxjbGFzcyBCYXNlSXRlcj4gY2xhc3MgQml0SXRlcmF0b3I7Ci10ZW1w
bGF0ZSA8Y2xhc3MgQmFzZUl0ZXI+Ci1CaXRJdGVyYXRvcjxCYXNlSXRlcj4gZmluZEZpcnN0U2V0
KEJpdEl0ZXJhdG9yPEJhc2VJdGVyPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQml0SXRlcmF0b3I8QmFzZUl0ZXI+KTsKLS8qKgotICogV3JhcHBlciBhcm91bmQgYW4gaXRl
cmF0b3Igb3ZlciBhbiBpbnRlZ2VyIHR5cGUgdGhhdCBpdGVyYXRlcwotICogb3ZlciBpdHMgdW5k
ZXJseWluZyBiaXRzIGluIExTYiB0byBNU2Igb3JkZXIuCi0gKgotICogQml0SXRlcmF0b3IgbW9k
ZWxzIHRoZSBzYW1lIGl0ZXJhdG9yIGNvbmNlcHRzIGFzIHRoZSBiYXNlIGl0ZXJhdG9yLgotICov
Ci10ZW1wbGF0ZSA8Y2xhc3MgQmFzZUl0ZXI+Ci1jbGFzcyBCaXRJdGVyYXRvcgotICA6IHB1Ymxp
YyBiaXRpdGVyYXRvcl9kZXRhaWw6OkJpdEl0ZXJhdG9yQmFzZTxCYXNlSXRlcj46OnR5cGUgewot
IHB1YmxpYzoKLSAgLyoqCi0gICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYW4gZWxl
bWVudCBvZiB0aGUgdW5kZXJseWluZyBpdGVyYXRvci4KLSAgICovCi0gIHN0YXRpYyB1bnNpZ25l
ZCBpbnQgYml0c1BlckJsb2NrKCkgewotICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPAot
ICAgICAgdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPAotICAgICAgICB0eXBlbmFtZSBzdGQ6
Oml0ZXJhdG9yX3RyYWl0czxCYXNlSXRlcj46OnZhbHVlX3R5cGUKLSAgICAgID46OnR5cGUKLSAg
ICA+OjpkaWdpdHM7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0IGEgQml0SXRlcmF0b3Ig
dGhhdCBwb2ludHMgYXQgYSBnaXZlbiBiaXQgb2Zmc2V0IChkZWZhdWx0IDApCi0gICAqIGluIGl0
ZXIuCi0gICAqLwotICBleHBsaWNpdCBCaXRJdGVyYXRvcihjb25zdCBCYXNlSXRlciYgaXRlciwg
c2l6ZV90IGJpdE9mZj0wKQotICAgIDogYml0aXRlcmF0b3JfZGV0YWlsOjpCaXRJdGVyYXRvckJh
c2U8QmFzZUl0ZXI+Ojp0eXBlKGl0ZXIpLAotICAgICAgYml0T2Zmc2V0XyhiaXRPZmYpIHsKLSAg
ICBhc3NlcnQoYml0T2Zmc2V0XyA8IGJpdHNQZXJCbG9jaygpKTsKLSAgfQotCi0gIHNpemVfdCBi
aXRPZmZzZXQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGJpdE9mZnNldF87Ci0gIH0KLQotICB2b2lk
IGFkdmFuY2VUb05leHRCbG9jaygpIHsKLSAgICBiaXRPZmZzZXRfID0gMDsKLSAgICArK3RoaXMt
PmJhc2VfcmVmZXJlbmNlKCk7Ci0gIH0KLQotICBCaXRJdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0
IEJhc2VJdGVyJiBvdGhlcikgewotICAgIHRoaXMtPn5CaXRJdGVyYXRvcigpOwotICAgIG5ldyAo
dGhpcykgQml0SXRlcmF0b3Iob3RoZXIpOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gcHJp
dmF0ZToKLSAgZnJpZW5kIGNsYXNzIGJvb3N0OjppdGVyYXRvcl9jb3JlX2FjY2VzczsKLSAgZnJp
ZW5kIEJpdEl0ZXJhdG9yIGZpbmRGaXJzdFNldDw+KEJpdEl0ZXJhdG9yLCBCaXRJdGVyYXRvcik7
Ci0KLSAgdHlwZWRlZiBiaXRpdGVyYXRvcl9kZXRhaWw6OkJpdFJlZmVyZW5jZTwKLSAgICAgIHR5
cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEJhc2VJdGVyPjo6cmVmZXJlbmNlLAotICAgICAg
dHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8QmFzZUl0ZXI+Ojp2YWx1ZV90eXBlCi0gICAg
PiBCaXRSZWY7Ci0KLSAgdm9pZCBhZHZhbmNlSW5CbG9jayhzaXplX3QgbikgewotICAgIGJpdE9m
ZnNldF8gKz0gbjsKLSAgICBhc3NlcnQoYml0T2Zmc2V0XyA8IGJpdHNQZXJCbG9jaygpKTsKLSAg
fQotCi0gIEJpdFJlZiBkZXJlZmVyZW5jZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gQml0UmVmKCp0
aGlzLT5iYXNlX3JlZmVyZW5jZSgpLCBiaXRPZmZzZXRfKTsKLSAgfQotCi0gIHZvaWQgYWR2YW5j
ZShzc2l6ZV90IG4pIHsKLSAgICBzaXplX3QgYnBiID0gYml0c1BlckJsb2NrKCk7Ci0gICAgc3Np
emVfdCBibG9ja3MgPSBuIC8gc3NpemVfdChicGIpOwotICAgIGJpdE9mZnNldF8gKz0gbiAlIGJw
YjsKLSAgICBpZiAoYml0T2Zmc2V0XyA+PSBicGIpIHsKLSAgICAgIGJpdE9mZnNldF8gLT0gYnBi
OwotICAgICAgKytibG9ja3M7Ci0gICAgfQotICAgIHRoaXMtPmJhc2VfcmVmZXJlbmNlKCkgKz0g
YmxvY2tzOwotICB9Ci0KLSAgdm9pZCBpbmNyZW1lbnQoKSB7Ci0gICAgaWYgKCsrYml0T2Zmc2V0
XyA9PSBiaXRzUGVyQmxvY2soKSkgewotICAgICAgYWR2YW5jZVRvTmV4dEJsb2NrKCk7Ci0gICAg
fQotICB9Ci0KLSAgdm9pZCBkZWNyZW1lbnQoKSB7Ci0gICAgaWYgKGJpdE9mZnNldF8tLSA9PSAw
KSB7Ci0gICAgICBiaXRPZmZzZXRfID0gYml0c1BlckJsb2NrKCkgLSAxOwotICAgICAgLS10aGlz
LT5iYXNlX3JlZmVyZW5jZSgpOwotICAgIH0KLSAgfQotCi0gIGJvb2wgZXF1YWwoY29uc3QgQml0
SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7Ci0gICAgcmV0dXJuIChiaXRPZmZzZXRfID09IG90aGVy
LmJpdE9mZnNldF8gJiYKLSAgICAgICAgICAgIHRoaXMtPmJhc2VfcmVmZXJlbmNlKCkgPT0gb3Ro
ZXIuYmFzZV9yZWZlcmVuY2UoKSk7Ci0gIH0KLQotICBzc2l6ZV90IGRpc3RhbmNlX3RvKGNvbnN0
IEJpdEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgewotICAgIHJldHVybiBzc2l6ZV90KAotICAgICAg
ICAob3RoZXIuYmFzZV9yZWZlcmVuY2UoKSAtIHRoaXMtPmJhc2VfcmVmZXJlbmNlKCkpICogYml0
c1BlckJsb2NrKCkgKwotICAgICAgICBvdGhlci5iaXRPZmZzZXRfIC0gYml0T2Zmc2V0Xyk7Ci0g
IH0KLQotICBzaXplX3QgYml0T2Zmc2V0XzsKLX07Ci0KLS8qKgotICogSGVscGVyIGZ1bmN0aW9u
LCBzbyB5b3UgY2FuIHdyaXRlCi0gKiBhdXRvIGJpID0gbWFrZUJpdEl0ZXJhdG9yKGNvbnRhaW5l
ci5iZWdpbigpKTsKLSAqLwotdGVtcGxhdGUgPGNsYXNzIEJhc2VJdGVyPgotQml0SXRlcmF0b3I8
QmFzZUl0ZXI+IG1ha2VCaXRJdGVyYXRvcihjb25zdCBCYXNlSXRlciYgaXRlcikgewotICByZXR1
cm4gQml0SXRlcmF0b3I8QmFzZUl0ZXI+KGl0ZXIpOwotfQotCi0KLS8qKgotICogRmluZCBmaXJz
dCBiaXQgc2V0IGluIGEgcmFuZ2Ugb2YgYml0IGl0ZXJhdG9ycy4KLSAqIDQuNXggZmFzdGVyIHRo
YW4gdGhlIG9idmlvdXMgc3RkOjpmaW5kKGJlZ2luLCBlbmQsIHRydWUpOwotICovCi10ZW1wbGF0
ZSA8Y2xhc3MgQmFzZUl0ZXI+Ci1CaXRJdGVyYXRvcjxCYXNlSXRlcj4gZmluZEZpcnN0U2V0KEJp
dEl0ZXJhdG9yPEJhc2VJdGVyPiBiZWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQml0SXRlcmF0b3I8QmFzZUl0ZXI+IGVuZCkgewotICAvLyBzaG9ydGN1dCB0byBhdm9p
ZCB1Z2x5IHN0YXRpY19jYXN0PD4KLSAgc3RhdGljIGNvbnN0IHR5cGVuYW1lIEJhc2VJdGVyOjp2
YWx1ZV90eXBlIG9uZSA9IDE7Ci0KLSAgd2hpbGUgKGJlZ2luLmJhc2UoKSAhPSBlbmQuYmFzZSgp
KSB7Ci0gICAgdHlwZW5hbWUgQmFzZUl0ZXI6OnZhbHVlX3R5cGUgdiA9ICpiZWdpbi5iYXNlKCk7
Ci0gICAgLy8gbWFzayBvdXQgdGhlIGJpdHMgdGhhdCBkb24ndCBtYXR0ZXIgKDwgYmVnaW4uYml0
T2Zmc2V0KQotICAgIHYgJj0gfigob25lIDw8IGJlZ2luLmJpdE9mZnNldCgpKSAtIDEpOwotICAg
IHNpemVfdCBmaXJzdFNldCA9IGZpbmRGaXJzdFNldCh2KTsKLSAgICBpZiAoZmlyc3RTZXQpIHsK
LSAgICAgIC0tZmlyc3RTZXQ7ICAvLyBub3cgaXQncyAwLWJhc2VkCi0gICAgICBhc3NlcnQoZmly
c3RTZXQgPj0gYmVnaW4uYml0T2Zmc2V0KCkpOwotICAgICAgYmVnaW4uYWR2YW5jZUluQmxvY2so
Zmlyc3RTZXQgLSBiZWdpbi5iaXRPZmZzZXQoKSk7Ci0gICAgICByZXR1cm4gYmVnaW47Ci0gICAg
fQotICAgIGJlZ2luLmFkdmFuY2VUb05leHRCbG9jaygpOwotICB9Ci0KLSAgLy8gbm93IGJlZ2lu
IHBvaW50cyB0byB0aGUgc2FtZSBibG9jayBhcyBlbmQKLSAgaWYgKGVuZC5iaXRPZmZzZXQoKSAh
PSAwKSB7ICAvLyBhc3N1bWUgZW5kIGlzIGRlcmVmZXJlbmNlYWJsZQotICAgIHR5cGVuYW1lIEJh
c2VJdGVyOjp2YWx1ZV90eXBlIHYgPSAqYmVnaW4uYmFzZSgpOwotICAgIC8vIG1hc2sgb3V0IHRo
ZSBiaXRzIHRoYXQgZG9uJ3QgbWF0dGVyICg8IGJlZ2luLmJpdE9mZnNldCkKLSAgICB2ICY9IH4o
KG9uZSA8PCBiZWdpbi5iaXRPZmZzZXQoKSkgLSAxKTsKLSAgICAvLyBtYXNrIG91dCB0aGUgYml0
cyB0aGF0IGRvbid0IG1hdHRlciAoPj0gZW5kLmJpdE9mZnNldCkKLSAgICB2ICY9IChvbmUgPDwg
ZW5kLmJpdE9mZnNldCgpKSAtIDE7Ci0gICAgc2l6ZV90IGZpcnN0U2V0ID0gZmluZEZpcnN0U2V0
KHYpOwotICAgIGlmIChmaXJzdFNldCkgewotICAgICAgLS1maXJzdFNldDsgIC8vIG5vdyBpdCdz
IDAtYmFzZWQKLSAgICAgIGFzc2VydChmaXJzdFNldCA+PSBiZWdpbi5iaXRPZmZzZXQoKSk7Ci0g
ICAgICBiZWdpbi5hZHZhbmNlSW5CbG9jayhmaXJzdFNldCAtIGJlZ2luLmJpdE9mZnNldCgpKTsK
LSAgICAgIHJldHVybiBiZWdpbjsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gZW5kOwotfQotCi0K
LXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFbmFibGU9dm9pZD4gc3RydWN0IFVuYWxpZ25lZDsK
LQotLyoqCi0gKiBSZXByZXNlbnRhdGlvbiBvZiBhbiB1bmFsaWduZWQgdmFsdWUgb2YgYSBQT0Qg
dHlwZS4KLSAqLwotRk9MTFlfUEFDS19QVVNICi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBV
bmFsaWduZWQ8Ci0gICAgVCwKLSAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Bv
ZDxUPjo6dmFsdWU+Ojp0eXBlPiB7Ci0gIFVuYWxpZ25lZCgpID0gZGVmYXVsdDsgIC8vIHVuaW5p
dGlhbGl6ZWQKLSAgLyogaW1wbGljaXQgKi8gVW5hbGlnbmVkKFQgdikgOiB2YWx1ZSh2KSB7IH0K
LSAgVCB2YWx1ZTsKLX0gRk9MTFlfUEFDS19BVFRSOwotRk9MTFlfUEFDS19QT1AKLQotLyoqCi0g
KiBSZWFkIGFuIHVuYWxpZ25lZCB2YWx1ZSBvZiB0eXBlIFQgYW5kIHJldHVybiBpdC4KLSAqLwot
dGVtcGxhdGUgPGNsYXNzIFQ+Ci1pbmxpbmUgVCBsb2FkVW5hbGlnbmVkKGNvbnN0IHZvaWQqIHAp
IHsKLSAgc3RhdGljX2Fzc2VydChzaXplb2YoVW5hbGlnbmVkPFQ+KSA9PSBzaXplb2YoVCksICJJ
bnZhbGlkIHVuYWxpZ25lZCBzaXplIik7Ci0gIHN0YXRpY19hc3NlcnQoYWxpZ25vZihVbmFsaWdu
ZWQ8VD4pID09IDEsICJJbnZhbGlkIGFsaWdubWVudCIpOwotICBpZiAoa0hhc1VuYWxpZ25lZEFj
Y2VzcykgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBVbmFsaWduZWQ8VD4qPihwKS0+
dmFsdWU7Ci0gIH0gZWxzZSB7Ci0gICAgVCB2YWx1ZTsKLSAgICBtZW1jcHkoJnZhbHVlLCBwLCBz
aXplb2YoVCkpOwotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotfQotCi0vKioKLSAqIFdyaXRlIGFu
IHVuYWxpZ25lZCB2YWx1ZSBvZiB0eXBlIFQuCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBUPgotaW5s
aW5lIHZvaWQgc3RvcmVVbmFsaWduZWQodm9pZCogcCwgVCB2YWx1ZSkgewotICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihVbmFsaWduZWQ8VD4pID09IHNpemVvZihUKSwgIkludmFsaWQgdW5hbGlnbmVk
IHNpemUiKTsKLSAgc3RhdGljX2Fzc2VydChhbGlnbm9mKFVuYWxpZ25lZDxUPikgPT0gMSwgIklu
dmFsaWQgYWxpZ25tZW50Iik7Ci0gIGlmIChrSGFzVW5hbGlnbmVkQWNjZXNzKSB7Ci0gICAgLy8g
UHJpb3IgdG8gQysrMTQsIHRoZSBzcGVjIHNheXMgdGhhdCBhIHBsYWNlbWVudCBuZXcgbGlrZSB0
aGlzCi0gICAgLy8gaXMgcmVxdWlyZWQgdG8gY2hlY2sgdGhhdCBwIGlzIG5vdCBudWxscHRyLCBh
bmQgdG8gZG8gbm90aGluZwotICAgIC8vIGlmIHAgaXMgYSBudWxscHRyLiBCeSBhc3N1bWluZyBp
dCdzIG5vdCBhIG51bGxwdHIsIHdlIGdldCBhCi0gICAgLy8gbmljZSBsb3VkIHNlZ2ZhdWx0IGlu
IG9wdGltaXplZCBidWlsZHMgaWYgcCBpcyBudWxscHRyLCByYXRoZXIKLSAgICAvLyB0aGFuIGp1
c3Qgc2lsZW50bHkgZG9pbmcgbm90aGluZy4KLSAgICBmb2xseTo6YXNzdW1lKHAgIT0gbnVsbHB0
cik7Ci0gICAgbmV3IChwKSBVbmFsaWduZWQ8VD4odmFsdWUpOwotICB9IGVsc2UgewotICAgIG1l
bWNweShwLCAmdmFsdWUsIHNpemVvZihUKSk7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIGZv
bGx5CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xs
eS9DUG9ydGFiaWxpdHkuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Zv
bGx5L0NQb3J0YWJpbGl0eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmEzMTY4
M2RmZjMyNTFlNDFiZjk0OWZlMzk3YTQxMmJlZmVlMTk5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2ZvbGx5L0NQb3J0YWJpbGl0eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICog
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgot
ICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBV
bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
IHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
Ci0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotLyogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGluIGEgc2VwYXJhdGUgZmlsZSBzbyB0aGF0IHRo
ZXkKLSAqIG1heSBiZSBpbmNsdWRlZCBmcm9tIEMtIGFzIHdlbGwgYXMgQysrLWJhc2VkIHByb2pl
Y3RzLiAqLwotCi0vKioKLSAqIFBvcnRhYmxlIHZlcnNpb24gY2hlY2suCi0gKi8KLSNpZm5kZWYg
X19HTlVDX1BSRVJFUQotIyBpZiBkZWZpbmVkIF9fR05VQ19fICYmIGRlZmluZWQgX19HTlVDX01J
Tk9SX18KLS8qIG5vbGludCAqLwotIyAgZGVmaW5lIF9fR05VQ19QUkVSRVEobWFqLCBtaW4pICgo
X19HTlVDX18gPDwgMTYpICsgX19HTlVDX01JTk9SX18gPj0gXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoKG1haikgPDwgMTYpICsgKG1pbikpCi0jIGVsc2UKLS8qIG5vbGlu
dCAqLwotIyAgZGVmaW5lIF9fR05VQ19QUkVSRVEobWFqLCBtaW4pIDAKLSMgZW5kaWYKLSNlbmRp
ZgotCi0vLyBwb3J0YWJsZSB2ZXJzaW9uIGNoZWNrIGZvciBjbGFuZwotI2lmbmRlZiBfX0NMQU5H
X1BSRVJFUQotIyBpZiBkZWZpbmVkIF9fY2xhbmdfXyAmJiBkZWZpbmVkIF9fY2xhbmdfbWFqb3Jf
XyAmJiBkZWZpbmVkIF9fY2xhbmdfbWlub3JfXwotLyogbm9saW50ICovCi0jICBkZWZpbmUgX19D
TEFOR19QUkVSRVEobWFqLCBtaW4pIFwKLSAgICAoKF9fY2xhbmdfbWFqb3JfXyA8PCAxNikgKyBf
X2NsYW5nX21pbm9yX18gPj0gKChtYWopIDw8IDE2KSArIChtaW4pKQotIyBlbHNlCi0vKiBub2xp
bnQgKi8KLSMgIGRlZmluZSBfX0NMQU5HX1BSRVJFUShtYWosIG1pbikgMAotIyBlbmRpZgotI2Vu
ZGlmCi0KLSNpZiBkZWZpbmVkKF9faGFzX2J1aWx0aW4pCi0jZGVmaW5lIEZPTExZX0hBU19CVUlM
VElOKC4uLikgX19oYXNfYnVpbHRpbihfX1ZBX0FSR1NfXykKLSNlbHNlCi0jZGVmaW5lIEZPTExZ
X0hBU19CVUlMVElOKC4uLikgMAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9faGFzX2ZlYXR1cmUp
Ci0jZGVmaW5lIEZPTExZX0hBU19GRUFUVVJFKC4uLikgX19oYXNfZmVhdHVyZShfX1ZBX0FSR1Nf
XykKLSNlbHNlCi0jZGVmaW5lIEZPTExZX0hBU19GRUFUVVJFKC4uLikgMAotI2VuZGlmCi0KLS8q
IERlZmluZSBhIGNvbnZlbmllbmNlIG1hY3JvIHRvIHRlc3Qgd2hlbiBhZGRyZXNzIHNhbml0aXpl
ciBpcyBiZWluZyB1c2VkCi0gKiBhY3Jvc3MgdGhlIGRpZmZlcmVudCBjb21waWxlcnMgKGUuZy4g
Y2xhbmcsIGdjYykgKi8KLSNpZiBGT0xMWV9IQVNfRkVBVFVSRShhZGRyZXNzX3Nhbml0aXplcikg
fHwgX19TQU5JVElaRV9BRERSRVNTX18KLSMgZGVmaW5lIEZPTExZX1NBTklUSVpFX0FERFJFU1Mg
MQotI2VuZGlmCi0KLS8qIERlZmluZSBhdHRyaWJ1dGUgd3JhcHBlciBmb3IgZnVuY3Rpb24gYXR0
cmlidXRlIHVzZWQgdG8gZGlzYWJsZQotICogYWRkcmVzcyBzYW5pdGl6ZXIgaW5zdHJ1bWVudGF0
aW9uLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGF0dHJpYnV0ZQotICogaGFzIGlzc3VlcyB3aGVuIGlu
bGluaW5nIGlzIHVzZWQsIHNvIGRpc2FibGUgdGhhdCBhcyB3ZWxsLiAqLwotI2lmZGVmIEZPTExZ
X1NBTklUSVpFX0FERFJFU1MKLSMgaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jICBpZiBfX2hhc19h
dHRyaWJ1dGUoX19ub19zYW5pdGl6ZV9fKQotIyAgIGRlZmluZSBGT0xMWV9ESVNBQkxFX0FERFJF
U1NfU0FOSVRJWkVSIFwKLSAgICAgIF9fYXR0cmlidXRlX18oKF9fbm9fc2FuaXRpemVfXygiYWRk
cmVzcyIpLCBfX25vaW5saW5lX18pKQotIyAgZWxpZiBfX2hhc19hdHRyaWJ1dGUoX19ub19hZGRy
ZXNzX3NhZmV0eV9hbmFseXNpc19fKQotIyAgIGRlZmluZSBGT0xMWV9ESVNBQkxFX0FERFJFU1Nf
U0FOSVRJWkVSIFwKLSAgICAgIF9fYXR0cmlidXRlX18oKF9fbm9fYWRkcmVzc19zYWZldHlfYW5h
bHlzaXNfXywgX19ub2lubGluZV9fKSkKLSMgIGVsaWYgX19oYXNfYXR0cmlidXRlKF9fbm9fc2Fu
aXRpemVfYWRkcmVzc19fKQotIyAgIGRlZmluZSBGT0xMWV9ESVNBQkxFX0FERFJFU1NfU0FOSVRJ
WkVSIFwKLSAgICAgIF9fYXR0cmlidXRlX18oKF9fbm9fc2FuaXRpemVfYWRkcmVzc19fLCBfX25v
aW5saW5lX18pKQotIyAgZW5kaWYKLSMgZWxpZiBkZWZpbmVkKF9fR05VQ19fKQotIyAgZGVmaW5l
IEZPTExZX0RJU0FCTEVfQUREUkVTU19TQU5JVElaRVIgXAotICAgICBfX2F0dHJpYnV0ZV9fKChf
X25vX2FkZHJlc3Nfc2FmZXR5X2FuYWx5c2lzX18sIF9fbm9pbmxpbmVfXykpCi0jIGVuZGlmCi0j
ZW5kaWYKLSNpZm5kZWYgRk9MTFlfRElTQUJMRV9BRERSRVNTX1NBTklUSVpFUgotIyBkZWZpbmUg
Rk9MTFlfRElTQUJMRV9BRERSRVNTX1NBTklUSVpFUgotI2VuZGlmCi0KLS8qIERlZmluZSBhIGNv
bnZlbmllbmNlIG1hY3JvIHRvIHRlc3Qgd2hlbiB0aHJlYWQgc2FuaXRpemVyIGlzIGJlaW5nIHVz
ZWQKLSAqIGFjcm9zcyB0aGUgZGlmZmVyZW50IGNvbXBpbGVycyAoZS5nLiBjbGFuZywgZ2NjKSAq
LwotI2lmIEZPTExZX0hBU19GRUFUVVJFKHRocmVhZF9zYW5pdGl6ZXIpIHx8IF9fU0FOSVRJWkVf
VEhSRUFEX18KLSMgZGVmaW5lIEZPTExZX1NBTklUSVpFX1RIUkVBRCAxCi0jZW5kaWYKLQotLyoq
Ci0gKiBBU0FOL01TQU4vVFNBTiBkZWZpbmUgcHJlLXByb2Nlc3NvciBzeW1ib2xzOgotICogQURE
UkVTU19TQU5JVElaRVIvTUVNT1JZX1NBTklUSVpFUi9USFJFQURfU0FOSVRJWkVSLgotICoKLSAq
IFVCU0FOIGRvZXNuJ3QgZGVmaW5lIGFueXRoaW5nIGFuZCBtYWtlcyBpdCBoYXJkIHRvCi0gKiBj
b25kaXRpb25hbGx5IGNvbXBpbGUuCi0gKgotICogVGhlIGJ1aWxkIHN5c3RlbSBzaG91bGQgZGVm
aW5lIFVOREVGSU5FRF9TQU5JVElaRVI9MSB3aGVuIFVCU0FOIGlzCi0gKiB1c2VkIGFzIGZvbGx5
IHdoaXRlbGlzdHMgc29tZSBmdW5jdGlvbnMuCi0gKi8KLSNpZiBVTkRFRklORURfU0FOSVRJWkVS
Ci0jZGVmaW5lIEZPTExZX0RJU0FCTEVfVU5ERUZJTkVEX0JFSEFWSU9SX1NBTklUSVpFUiguLi4p
IFwKLSAgX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoX19WQV9BUkdTX18pKSkKLSNlbHNlCi0j
ZGVmaW5lIEZPTExZX0RJU0FCTEVfVU5ERUZJTkVEX0JFSEFWSU9SX1NBTklUSVpFUiguLi4pCi0j
ZW5kaWYgLy8gVU5ERUZJTkVEX1NBTklUSVpFUgotCi0vKioKLSAqIE1hY3JvIGZvciBtYXJraW5n
IGZ1bmN0aW9ucyBhcyBoYXZpbmcgcHVibGljIHZpc2liaWxpdHkuCi0gKi8KLSNpZiBkZWZpbmVk
KF9fR05VQ19fKQotIyBpZiBfX0dOVUNfUFJFUkVRKDQsIDkpCi0jICBkZWZpbmUgRk9MTFlfRVhQ
T1JUIFtbZ251Ojp2aXNpYmlsaXR5KCJkZWZhdWx0IildXQotIyBlbHNlCi0jICBkZWZpbmUgRk9M
TFlfRVhQT1JUIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJkZWZhdWx0IikpKQotIyBl
bmRpZgotI2Vsc2UKLSMgZGVmaW5lIEZPTExZX0VYUE9SVAotI2VuZGlmCi0KLS8vIG5vaW5saW5l
Ci0jaWZkZWYgX01TQ19WRVIKLSMgZGVmaW5lIEZPTExZX05PSU5MSU5FIF9fZGVjbHNwZWMobm9p
bmxpbmUpCi0jZWxpZiBkZWZpbmVkKF9fY2xhbmdfXykgfHwgZGVmaW5lZChfX0dOVUNfXykKLSMg
ZGVmaW5lIEZPTExZX05PSU5MSU5FIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpCi0jZWxz
ZQotIyBkZWZpbmUgRk9MTFlfTk9JTkxJTkUKLSNlbmRpZgotCi0vLyBhbHdheXMgaW5saW5lCi0j
aWZkZWYgX01TQ19WRVIKLSMgZGVmaW5lIEZPTExZX0FMV0FZU19JTkxJTkUgX19mb3JjZWlubGlu
ZQotI2VsaWYgZGVmaW5lZChfX2NsYW5nX18pIHx8IGRlZmluZWQoX19HTlVDX18pCi0jIGRlZmlu
ZSBGT0xMWV9BTFdBWVNfSU5MSU5FIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp
bmVfXykpCi0jZWxzZQotIyBkZWZpbmUgRk9MTFlfQUxXQVlTX0lOTElORSBpbmxpbmUKLSNlbmRp
ZgotCi0vLyBhdHRyaWJ1dGUgaGlkZGVuCi0jaWYgX01TQ19WRVIKLSNkZWZpbmUgRk9MTFlfQVRU
Ul9WSVNJQklMSVRZX0hJRERFTgotI2VsaWYgZGVmaW5lZChfX2NsYW5nX18pIHx8IGRlZmluZWQo
X19HTlVDX18pCi0jZGVmaW5lIEZPTExZX0FUVFJfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1
dGVfXygoX192aXNpYmlsaXR5X18oImhpZGRlbiIpKSkKLSNlbHNlCi0jZGVmaW5lIEZPTExZX0FU
VFJfVklTSUJJTElUWV9ISURERU4KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvQ2FsbE9uY2UuaCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0NhbGxPbmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDRkZDA2OTQxYTI1YmIzZjU4NGY2NDRmOTg4NzM4ZDUxZTk1ODhmM2YuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvQ2FsbE9uY2UuaAorKysgL2Rldi9udWxsCkBAIC0x
LDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAq
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0y
LjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv
IGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp
cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0g
KiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVy
bWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0v
KgotICogRHJvcC1pbiByZXBsYWNlbWVudCBmb3Igc3RkOjpjYWxsX29uY2UoKSB3aXRoIGEgZmFz
dCBwYXRoLCB3aGljaCB0aGUgR0NDCi0gKiBpbXBsZW1lbnRhdGlvbiBsYWNrcy4gIFRoZSB0cmFk
ZW9mZiBpcyBhIHNsaWdodGx5IGxhcmdlciBgb25jZV9mbGFnJyBzdHJ1Y3QKLSAqICg4IGJ5dGVz
IHZzIDQgYnl0ZXMgd2l0aCBHQ0Mgb24gTGludXgveDY0KS4KLSAqCi0gKiAkIGNhbGxfb25jZV90
ZXN0IC0tYmVuY2htYXJrIC0tYm1fbWluX2l0ZXJzPTEwMDAwMDAwMCAtLXRocmVhZHM9MTYKLSAq
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLSAqIGZvbGx5L3Rlc3QvQ2FsbE9uY2VUZXN0LmNwcCAgICAg
ICAgICAgICAgICAgICAgIHJlbGF0aXZlICB0aW1lL2l0ZXIgIGl0ZXJzL3MKLSAqID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLSAqIFN0ZENhbGxPbmNlQmVuY2ggICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzLjU0bnMgIDI4Mi44Mk0KLSAqIEZvbGx5Q2FsbE9uY2VCZW5j
aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjk4LjQ4cHMgICAgMS40
M0cKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgPGF0b21pYz4KLSNpbmNsdWRlIDxtdXRleD4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5j
bHVkZSA8Zm9sbHkvTGlrZWx5Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvUG9ydGFiaWxpdHkuaD4KLSNp
bmNsdWRlIDxmb2xseS9TaGFyZWRNdXRleC5oPgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi1jbGFz
cyBvbmNlX2ZsYWcgewotIHB1YmxpYzoKLSAgY29uc3RleHByIG9uY2VfZmxhZygpIG5vZXhjZXB0
ID0gZGVmYXVsdDsKLSAgb25jZV9mbGFnKGNvbnN0IG9uY2VfZmxhZyYpID0gZGVsZXRlOwotICBv
bmNlX2ZsYWcmIG9wZXJhdG9yPShjb25zdCBvbmNlX2ZsYWcmKSA9IGRlbGV0ZTsKLQotICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2FsbGFibGUsIGNsYXNzLi4uIEFyZ3M+Ci0gIGZyaWVuZCB2b2lkIGNh
bGxfb25jZShvbmNlX2ZsYWcmIGZsYWcsIENhbGxhYmxlJiYgZiwgQXJncyYmLi4uIGFyZ3MpOwot
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2FsbGFibGUsIGNsYXNzLi4uIEFyZ3M+Ci0gIGZyaWVuZCB2
b2lkIGNhbGxfb25jZV9pbXBsX25vX2lubGluZShvbmNlX2ZsYWcmIGZsYWcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsYWJsZSYmIGYsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzJiYuLi4gYXJncyk7Ci0KLSBwcml2YXRlOgot
ICBzdGQ6OmF0b21pYzxib29sPiBjYWxsZWRfe2ZhbHNlfTsKLSAgZm9sbHk6OlNoYXJlZE11dGV4
IG11dGV4XzsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBDYWxsYWJsZSwgY2xhc3MuLi4gQXJncz4K
LXZvaWQgRk9MTFlfQUxXQVlTX0lOTElORQotY2FsbF9vbmNlKG9uY2VfZmxhZyYgZmxhZywgQ2Fs
bGFibGUmJiBmLCBBcmdzJiYuLi4gYXJncykgewotICBpZiAoTElLRUxZKGZsYWcuY2FsbGVkXy5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgewotICAgIHJldHVybjsKLSAgfQotICBj
YWxsX29uY2VfaW1wbF9ub19pbmxpbmUoCi0gICAgICBmbGFnLCBzdGQ6OmZvcndhcmQ8Q2FsbGFi
bGU+KGYpLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotfQotCi0vLyBJbXBsZW1lbnRh
dGlvbiBkZXRhaWw6IG91dC1vZi1saW5lIHNsb3cgcGF0aAotdGVtcGxhdGUgPGNsYXNzIENhbGxh
YmxlLCBjbGFzcy4uLiBBcmdzPgotdm9pZCBGT0xMWV9OT0lOTElORQotY2FsbF9vbmNlX2ltcGxf
bm9faW5saW5lKG9uY2VfZmxhZyYgZmxhZywgQ2FsbGFibGUmJiBmLCBBcmdzJiYuLi4gYXJncykg
ewotICBzdGQ6OmxvY2tfZ3VhcmQ8Zm9sbHk6OlNoYXJlZE11dGV4PiBsZyhmbGFnLm11dGV4Xyk7
Ci0gIGlmIChmbGFnLmNhbGxlZF8pIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBzdGQ6OmZvcndh
cmQ8Q2FsbGFibGU+KGYpKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0KLSAgZmxhZy5j
YWxsZWRfLnN0b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotfQotfQpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvQ29uY3Vy
cmVudFNraXBMaXN0LWlubC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Zm9sbHkvQ29uY3VycmVudFNraXBMaXN0LWlubC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2MTI3OWE5NjUyYWMxZTMxYjNhMDIzZDg1Yzk5MTA5MDNiYmM3YjllLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0NvbmN1cnJlbnRTa2lwTGlzdC1pbmwuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDMzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIElu
Yy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
ICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
L0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQg
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
bXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
Ci0gKi8KLQotLy8gQGF1dGhvcjogWGluIExpdSA8eGxpdXhAZmIuY29tPgotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxhdG9taWM+Ci0jaW5jbHVkZSA8
Y2xpbWl0cz4KLSNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8
bXV0ZXg+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5j
bHVkZSA8Ym9vc3Qvbm9uY29weWFibGUuaHBwPgotI2luY2x1ZGUgPGJvb3N0L3JhbmRvbS5ocHA+
Ci0jaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMuaHBwPgotI2luY2x1ZGUgPGdsb2cvbG9nZ2lu
Zy5oPgotCi0jaW5jbHVkZSA8Zm9sbHkvTWVtb3J5Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvTWljcm9T
cGluTG9jay5oPgotI2luY2x1ZGUgPGZvbGx5L1RocmVhZExvY2FsLmg+Ci0KLW5hbWVzcGFjZSBm
b2xseSB7IG5hbWVzcGFjZSBkZXRhaWwgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWxULCB0eXBl
bmFtZSBOb2RlVD4gY2xhc3MgY3NsX2l0ZXJhdG9yOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
Y2xhc3MgU2tpcExpc3ROb2RlIDogcHJpdmF0ZSBib29zdDo6bm9uY29weWFibGUgewotICBlbnVt
IDogdWludDE2X3QgewotICAgIElTX0hFQURfTk9ERSA9IDEsCi0gICAgTUFSS0VEX0ZPUl9SRU1P
VkFMID0gKDEgPDwgMSksCi0gICAgRlVMTFlfTElOS0VEID0gKDEgPDwgMiksCi0gIH07Ci0KLSBw
dWJsaWM6Ci0gIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwotCi0gIHRlbXBsYXRlPHR5cGVuYW1lIE5v
ZGVBbGxvYywgdHlwZW5hbWUgVSwKLSAgICB0eXBlbmFtZT10eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzdGQ6OmlzX2NvbnZlcnRpYmxlPFUsIFQ+Ojp2YWx1ZT46OnR5cGU+Ci0gIHN0YXRpYyBTa2lw
TGlzdE5vZGUqIGNyZWF0ZSgKLSAgICAgIE5vZGVBbGxvYyYgYWxsb2MsIGludCBoZWlnaHQsIFUm
JiBkYXRhLCBib29sIGlzSGVhZCA9IGZhbHNlKSB7Ci0gICAgRENIRUNLKGhlaWdodCA+PSAxICYm
IGhlaWdodCA8IDY0KSA8PCBoZWlnaHQ7Ci0KLSAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihTa2lw
TGlzdE5vZGUpICsKLSAgICAgIGhlaWdodCAqIHNpemVvZihzdGQ6OmF0b21pYzxTa2lwTGlzdE5v
ZGUqPik7Ci0gICAgYXV0byogbm9kZSA9IHN0YXRpY19jYXN0PFNraXBMaXN0Tm9kZSo+KGFsbG9j
LmFsbG9jYXRlKHNpemUpKTsKLSAgICAvLyBkbyBwbGFjZW1lbnQgbmV3Ci0gICAgbmV3IChub2Rl
KSBTa2lwTGlzdE5vZGUodWludDhfdChoZWlnaHQpLCBzdGQ6OmZvcndhcmQ8VT4oZGF0YSksIGlz
SGVhZCk7Ci0gICAgcmV0dXJuIG5vZGU7Ci0gIH0KLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2Rl
QWxsb2M+Ci0gIHN0YXRpYyB2b2lkIGRlc3Ryb3koTm9kZUFsbG9jJiBhbGxvYywgU2tpcExpc3RO
b2RlKiBub2RlKSB7Ci0gICAgbm9kZS0+flNraXBMaXN0Tm9kZSgpOwotICAgIGFsbG9jLmRlYWxs
b2NhdGUobm9kZSk7Ci0gIH0KLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlQWxsb2M+Ci0gIHN0
cnVjdCBEZXN0cm95SXNOb09wIDogc3RkOjppbnRlZ3JhbF9jb25zdGFudDxib29sLAotICAgIElz
QXJlbmFBbGxvY2F0b3I8Tm9kZUFsbG9jPjo6dmFsdWUgJiYKLSAgICBib29zdDo6aGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjxTa2lwTGlzdE5vZGU+Ojp2YWx1ZT4geyB9OwotCi0gIC8vIGNvcHkgdGhl
IGhlYWQgbm9kZSB0byBhIG5ldyBoZWFkIG5vZGUgYXNzdW1pbmcgbG9jayBhY3F1aXJlZAotICBT
a2lwTGlzdE5vZGUqIGNvcHlIZWFkKFNraXBMaXN0Tm9kZSogbm9kZSkgewotICAgIERDSEVDSyhu
b2RlICE9IG51bGxwdHIgJiYgaGVpZ2h0XyA+IG5vZGUtPmhlaWdodF8pOwotICAgIHNldEZsYWdz
KG5vZGUtPmdldEZsYWdzKCkpOwotICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG5vZGUtPmhl
aWdodF87ICsraSkgewotICAgICAgc2V0U2tpcChpLCBub2RlLT5za2lwKGkpKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICBpbmxpbmUgU2tpcExpc3ROb2RlKiBza2lwKGludCBs
YXllcikgY29uc3QgewotICAgIERDSEVDS19MVChsYXllciwgaGVpZ2h0Xyk7Ci0gICAgcmV0dXJu
IHNraXBfW2xheWVyXS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpOwotICB9Ci0KLSAg
Ly8gbmV4dCB2YWxpZCBub2RlIGFzIGluIHRoZSBsaW5rZWQgbGlzdAotICBTa2lwTGlzdE5vZGUq
IG5leHQoKSB7Ci0gICAgU2tpcExpc3ROb2RlKiBub2RlOwotICAgIGZvciAobm9kZSA9IHNraXAo
MCk7Ci0gICAgICAgIChub2RlICE9IG51bGxwdHIgJiYgbm9kZS0+bWFya2VkRm9yUmVtb3ZhbCgp
KTsKLSAgICAgICAgbm9kZSA9IG5vZGUtPnNraXAoMCkpIHt9Ci0gICAgcmV0dXJuIG5vZGU7Ci0g
IH0KLQotICB2b2lkIHNldFNraXAodWludDhfdCBoLCBTa2lwTGlzdE5vZGUqIG5leHQpIHsKLSAg
ICBEQ0hFQ0tfTFQoaCwgaGVpZ2h0Xyk7Ci0gICAgc2tpcF9baF0uc3RvcmUobmV4dCwgc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gIH0KLQotICB2YWx1ZV90eXBlJiBkYXRhKCkgeyByZXR1
cm4gZGF0YV87IH0KLSAgY29uc3QgdmFsdWVfdHlwZSYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGRh
dGFfOyB9Ci0gIGludCBtYXhMYXllcigpIGNvbnN0IHsgcmV0dXJuIGhlaWdodF8gLSAxOyB9Ci0g
IGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBoZWlnaHRfOyB9Ci0KLSAgc3RkOjp1bmlxdWVf
bG9jazxNaWNyb1NwaW5Mb2NrPiBhY3F1aXJlR3VhcmQoKSB7Ci0gICAgcmV0dXJuIHN0ZDo6dW5p
cXVlX2xvY2s8TWljcm9TcGluTG9jaz4oc3BpbkxvY2tfKTsKLSAgfQotCi0gIGJvb2wgZnVsbHlM
aW5rZWQoKSBjb25zdCAgICAgIHsgcmV0dXJuIGdldEZsYWdzKCkgJiBGVUxMWV9MSU5LRUQ7IH0K
LSAgYm9vbCBtYXJrZWRGb3JSZW1vdmFsKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZ3MoKSAmIE1B
UktFRF9GT1JfUkVNT1ZBTDsgfQotICBib29sIGlzSGVhZE5vZGUoKSBjb25zdCAgICAgICB7IHJl
dHVybiBnZXRGbGFncygpICYgSVNfSEVBRF9OT0RFOyB9Ci0KLSAgdm9pZCBzZXRJc0hlYWROb2Rl
KCkgewotICAgIHNldEZsYWdzKHVpbnQxNl90KGdldEZsYWdzKCkgfCBJU19IRUFEX05PREUpKTsK
LSAgfQotICB2b2lkIHNldEZ1bGx5TGlua2VkKCkgewotICAgIHNldEZsYWdzKHVpbnQxNl90KGdl
dEZsYWdzKCkgfCBGVUxMWV9MSU5LRUQpKTsKLSAgfQotICB2b2lkIHNldE1hcmtlZEZvclJlbW92
YWwoKSB7Ci0gICAgc2V0RmxhZ3ModWludDE2X3QoZ2V0RmxhZ3MoKSB8IE1BUktFRF9GT1JfUkVN
T1ZBTCkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBOb3RlISB0aGlzIGNhbiBvbmx5IGJlIGNh
bGxlZCBmcm9tIGNyZWF0ZSgpIGFzIGEgcGxhY2VtZW50IG5ldy4KLSAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLSAgU2tpcExpc3ROb2RlKHVpbnQ4X3QgaGVpZ2h0LCBVJiYgZGF0YSwgYm9vbCBpc0hl
YWQpIDoKLSAgICAgIGhlaWdodF8oaGVpZ2h0KSwgZGF0YV8oc3RkOjpmb3J3YXJkPFU+KGRhdGEp
KSB7Ci0gICAgc3BpbkxvY2tfLmluaXQoKTsKLSAgICBzZXRGbGFncygwKTsKLSAgICBpZiAoaXNI
ZWFkKSBzZXRJc0hlYWROb2RlKCk7Ci0gICAgLy8gbmVlZCB0byBleHBsaWNpdGx5IGluaXQgdGhl
IGR5bmFtaWMgYXRvbWljIHBvaW50ZXIgYXJyYXkKLSAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkg
PCBoZWlnaHRfOyArK2kpIHsKLSAgICAgIG5ldyAoJnNraXBfW2ldKSBzdGQ6OmF0b21pYzxTa2lw
TGlzdE5vZGUqPihudWxscHRyKTsKLSAgICB9Ci0gIH0KLQotICB+U2tpcExpc3ROb2RlKCkgewot
ICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGhlaWdodF87ICsraSkgewotICAgICAgc2tpcF9b
aV0ufmF0b21pYygpOwotICAgIH0KLSAgfQotCi0gIHVpbnQxNl90IGdldEZsYWdzKCkgY29uc3Qg
ewotICAgIHJldHVybiBmbGFnc18ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lKTsKLSAg
fQotICB2b2lkIHNldEZsYWdzKHVpbnQxNl90IGZsYWdzKSB7Ci0gICAgZmxhZ3NfLnN0b3JlKGZs
YWdzLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAgfQotCi0gIC8vIFRPRE8oeGxpdSk6
IG9uIHg4Nl82NCwgaXQncyBwb3NzaWJsZSB0byBzcXVlZXplIHRoZXNlIGludG8KLSAgLy8gc2tp
cF9bMF0gdG8gbWF5YmUgc2F2ZSA4IGJ5dGVzIGRlcGVuZGluZyBvbiB0aGUgZGF0YSBhbGlnbm1l
bnRzLgotICAvLyBOT1RFOiBjdXJyZW50bHkgdGhpcyBpcyB4ODZfNjQgb25seSBhbnl3YXksIGR1
ZSB0byB0aGUKLSAgLy8gTWljcm9TcGluTG9jay4KLSAgc3RkOjphdG9taWM8dWludDE2X3Q+IGZs
YWdzXzsKLSAgY29uc3QgdWludDhfdCBoZWlnaHRfOwotICBNaWNyb1NwaW5Mb2NrIHNwaW5Mb2Nr
XzsKLQotICB2YWx1ZV90eXBlIGRhdGFfOwotCi0gIHN0ZDo6YXRvbWljPFNraXBMaXN0Tm9kZSo+
IHNraXBfWzBdOwotfTsKLQotY2xhc3MgU2tpcExpc3RSYW5kb21IZWlnaHQgewotICBlbnVtIHsg
a01heEhlaWdodCA9IDY0IH07Ci0gcHVibGljOgotICAvLyBtYWtlIGl0IGEgc2luZ2xldG9uLgot
ICBzdGF0aWMgU2tpcExpc3RSYW5kb21IZWlnaHQgKmluc3RhbmNlKCkgewotICAgIHN0YXRpYyBT
a2lwTGlzdFJhbmRvbUhlaWdodCBpbnN0YW5jZV87Ci0gICAgcmV0dXJuICZpbnN0YW5jZV87Ci0g
IH0KLQotICBpbnQgZ2V0SGVpZ2h0KGludCBtYXhIZWlnaHQpIGNvbnN0IHsKLSAgICBEQ0hFQ0tf
TEUobWF4SGVpZ2h0LCBrTWF4SGVpZ2h0KSA8PCAibWF4IGhlaWdodCB0b28gYmlnISI7Ci0gICAg
ZG91YmxlIHAgPSByYW5kb21Qcm9iKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhIZWln
aHQ7ICsraSkgewotICAgICAgaWYgKHAgPCBsb29rdXBUYWJsZV9baV0pIHsKLSAgICAgICAgcmV0
dXJuIGkgKyAxOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbWF4SGVpZ2h0OwotICB9Ci0K
LSAgc2l6ZV90IGdldFNpemVMaW1pdChpbnQgaGVpZ2h0KSBjb25zdCB7Ci0gICAgRENIRUNLX0xU
KGhlaWdodCwga01heEhlaWdodCk7Ci0gICAgcmV0dXJuIHNpemVMaW1pdFRhYmxlX1toZWlnaHRd
OwotICB9Ci0KLSBwcml2YXRlOgotICBTa2lwTGlzdFJhbmRvbUhlaWdodCgpIHsgaW5pdExvb2t1
cFRhYmxlKCk7IH0KLQotICB2b2lkIGluaXRMb29rdXBUYWJsZSgpIHsKLSAgICAvLyBzZXQgc2tp
cCBwcm9iID0gMS9FCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBrUHJvYkludiA9IGV4cCgxKTsK
LSAgICBzdGF0aWMgY29uc3QgZG91YmxlIGtQcm9iID0gMS4wIC8ga1Byb2JJbnY7Ci0gICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBrTWF4U2l6ZUxpbWl0ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKTsKLQotICAgIGRvdWJsZSBzaXplTGltaXQgPSAxOwotICAgIGRvdWJsZSBwID0g
bG9va3VwVGFibGVfWzBdID0gKDEgLSBrUHJvYik7Ci0gICAgc2l6ZUxpbWl0VGFibGVfWzBdID0g
MTsKLSAgICBmb3IgKGludCBpID0gMTsgaSA8IGtNYXhIZWlnaHQgLSAxOyArK2kpIHsKLSAgICAg
IHAgKj0ga1Byb2I7Ci0gICAgICBzaXplTGltaXQgKj0ga1Byb2JJbnY7Ci0gICAgICBsb29rdXBU
YWJsZV9baV0gPSBsb29rdXBUYWJsZV9baSAtIDFdICsgcDsKLSAgICAgIHNpemVMaW1pdFRhYmxl
X1tpXSA9IHNpemVMaW1pdCA+IGtNYXhTaXplTGltaXQgPwotICAgICAgICBrTWF4U2l6ZUxpbWl0
IDoKLSAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplTGltaXQpOwotICAgIH0KLSAgICBs
b29rdXBUYWJsZV9ba01heEhlaWdodCAtIDFdID0gMTsKLSAgICBzaXplTGltaXRUYWJsZV9ba01h
eEhlaWdodCAtIDFdID0ga01heFNpemVMaW1pdDsKLSAgfQotCi0gIHN0YXRpYyBkb3VibGUgcmFu
ZG9tUHJvYigpIHsKLSAgICBzdGF0aWMgVGhyZWFkTG9jYWw8Ym9vc3Q6OmxhZ2dlZF9maWJvbmFj
Y2kyMjgxPiBybmdfOwotICAgIHJldHVybiAoKnJuZ18pKCk7Ci0gIH0KLQotICBkb3VibGUgbG9v
a3VwVGFibGVfW2tNYXhIZWlnaHRdOwotICBzaXplX3Qgc2l6ZUxpbWl0VGFibGVfW2tNYXhIZWln
aHRdOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgTm9kZVR5cGUsIHR5cGVuYW1lIE5vZGVBbGxv
YywgdHlwZW5hbWUgPSB2b2lkPgotY2xhc3MgTm9kZVJlY3ljbGVyOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBOb2RlVHlwZSwgdHlwZW5hbWUgTm9kZUFsbG9jPgotY2xhc3MgTm9kZVJlY3ljbGVyPE5v
ZGVUeXBlLCBOb2RlQWxsb2MsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAhTm9kZVR5cGU6
OnRlbXBsYXRlIERlc3Ryb3lJc05vT3A8Tm9kZUFsbG9jPjo6dmFsdWU+Ojp0eXBlPiB7Ci0gcHVi
bGljOgotICBleHBsaWNpdCBOb2RlUmVjeWNsZXIoY29uc3QgTm9kZUFsbG9jJiBhbGxvYykKLSAg
ICA6IHJlZnNfKDApLCBkaXJ0eV8oZmFsc2UpLCBhbGxvY18oYWxsb2MpIHsgbG9ja18uaW5pdCgp
OyB9Ci0KLSAgZXhwbGljaXQgTm9kZVJlY3ljbGVyKCkgOiByZWZzXygwKSwgZGlydHlfKGZhbHNl
KSB7IGxvY2tfLmluaXQoKTsgfQotCi0gIH5Ob2RlUmVjeWNsZXIoKSB7Ci0gICAgQ0hFQ0tfRVEo
cmVmcygpLCAwKTsKLSAgICBpZiAobm9kZXNfKSB7Ci0gICAgICBmb3IgKGF1dG8mIG5vZGUgOiAq
bm9kZXNfKSB7Ci0gICAgICAgIE5vZGVUeXBlOjpkZXN0cm95KGFsbG9jXywgbm9kZSk7Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBhZGQoTm9kZVR5cGUqIG5vZGUpIHsKLSAgICBzdGQ6
OmxvY2tfZ3VhcmQ8TWljcm9TcGluTG9jaz4gZyhsb2NrXyk7Ci0gICAgaWYgKG5vZGVzXy5nZXQo
KSA9PSBudWxscHRyKSB7Ci0gICAgICBub2Rlc18ucmVzZXQobmV3IHN0ZDo6dmVjdG9yPE5vZGVU
eXBlKj4oMSwgbm9kZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBub2Rlc18tPnB1c2hfYmFjayhu
b2RlKTsKLSAgICB9Ci0gICAgRENIRUNLX0dUKHJlZnMoKSwgMCk7Ci0gICAgZGlydHlfLnN0b3Jl
KHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICB9Ci0KLSAgaW50IGFkZFJlZigp
IHsKLSAgICByZXR1cm4gcmVmc18uZmV0Y2hfYWRkKDEsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4
ZWQpOwotICB9Ci0KLSAgaW50IHJlbGVhc2VSZWYoKSB7Ci0gICAgLy8gV2UgZG9uJ3QgZXhwZWN0
IHRvIGNsZWFuIHRoZSByZWN5Y2xlciBpbW1lZGlhdGVseSBldmVyeXRpbWUgaXQgaXMgT0sKLSAg
ICAvLyB0byBkbyBzby4gSGVyZSwgaXQgaXMgcG9zc2libGUgdGhhdCBtdWx0aXBsZSBhY2Nlc3Nv
cnMgYWxsIHJlbGVhc2UgYXQKLSAgICAvLyB0aGUgc2FtZSB0aW1lIGJ1dCBub2JvZHkgd291bGQg
Y2xlYW4gdGhlIHJlY3ljbGVyIGhlcmUuIElmIHRoaXMKLSAgICAvLyBoYXBwZW5zLCB0aGUgcmVj
eWNsZXIgd2lsbCB1c3VhbGx5IHN0aWxsIGdldCBjbGVhbmVkIHdoZW4KLSAgICAvLyBzdWNoIGEg
cmFjZSBkb2Vzbid0IGhhcHBlbi4gVGhlIHdvcnN0IGNhc2UgaXMgdGhlIHJlY3ljbGVyIHdpbGwK
LSAgICAvLyBldmVudHVhbGx5IGdldCBkZWxldGVkIGFsb25nIHdpdGggdGhlIHNraXBsaXN0Lgot
ICAgIGlmIChMSUtFTFkoIWRpcnR5Xy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpIHx8
IHJlZnMoKSA+IDEpKSB7Ci0gICAgICByZXR1cm4gcmVmc18uZmV0Y2hfYWRkKC0xLCBzdGQ6Om1l
bW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp2
ZWN0b3I8Tm9kZVR5cGUqPj4gbmV3Tm9kZXM7Ci0gICAgewotICAgICAgc3RkOjpsb2NrX2d1YXJk
PE1pY3JvU3BpbkxvY2s+IGcobG9ja18pOwotICAgICAgaWYgKG5vZGVzXy5nZXQoKSA9PSBudWxs
cHRyIHx8IHJlZnMoKSA+IDEpIHsKLSAgICAgICAgcmV0dXJuIHJlZnNfLmZldGNoX2FkZCgtMSwg
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgICB9Ci0gICAgICAvLyBvbmNlIHJlZnNf
IHJlYWNoZXMgMSBhbmQgdGhlcmUgaXMgbm8gb3RoZXIgYWNjZXNzb3IsIGl0IGlzIHNhZmUgdG8K
LSAgICAgIC8vIHJlbW92ZSBhbGwgdGhlIGN1cnJlbnQgbm9kZXMgaW4gdGhlIHJlY3ljbGVyLCBh
cyB3ZSBhbHJlYWR5IGFjcXVpcmVkCi0gICAgICAvLyB0aGUgbG9jayBoZXJlIHNvIG5vIG1vcmUg
bmV3IG5vZGVzIGNhbiBiZSBhZGRlZCwgZXZlbiB0aG91Z2ggbmV3Ci0gICAgICAvLyBhY2Nlc3Nv
cnMgbWF5IGJlIGFkZGVkIGFmdGVyIHRoYXQuCi0gICAgICBuZXdOb2Rlcy5zd2FwKG5vZGVzXyk7
Ci0gICAgICBkaXJ0eV8uc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwot
ICAgIH0KLQotICAgIC8vIFRPRE8oeGxpdSkgc2hvdWxkIHdlIHNwYXduIGEgdGhyZWFkIHRvIGRv
IHRoaXMgd2hlbiB0aGVyZSBhcmUgbGFyZ2UKLSAgICAvLyBudW1iZXIgb2Ygbm9kZXMgaW4gdGhl
IHJlY3ljbGVyPwotICAgIGZvciAoYXV0byYgbm9kZSA6ICpuZXdOb2RlcykgewotICAgICAgTm9k
ZVR5cGU6OmRlc3Ryb3koYWxsb2NfLCBub2RlKTsKLSAgICB9Ci0KLSAgICAvLyBkZWNyZWFzZSB0
aGUgcmVmIGNvdW50IGF0IHRoZSB2ZXJ5IGVuZCwgdG8gbWluaW1pemUgdGhlCi0gICAgLy8gY2hh
bmNlIG9mIG90aGVyIHRocmVhZHMgYWNxdWlyaW5nIGxvY2tfIHRvIGNsZWFyIHRoZSBkZWxldGVk
Ci0gICAgLy8gbm9kZXMgYWdhaW4uCi0gICAgcmV0dXJuIHJlZnNfLmZldGNoX2FkZCgtMSwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gIH0KLQotICBOb2RlQWxsb2MmIGFsbG9jKCkgeyBy
ZXR1cm4gYWxsb2NfOyB9Ci0KLSBwcml2YXRlOgotICBpbnQgcmVmcygpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gcmVmc18ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgfQotCi0gIHN0
ZDo6dW5pcXVlX3B0cjxzdGQ6OnZlY3RvcjxOb2RlVHlwZSo+PiBub2Rlc187Ci0gIHN0ZDo6YXRv
bWljPGludDMyX3Q+IHJlZnNfOyAvLyBjdXJyZW50IG51bWJlciBvZiB2aXNpdG9ycyB0byB0aGUg
bGlzdAotICBzdGQ6OmF0b21pYzxib29sPiBkaXJ0eV87IC8vIHdoZXRoZXIgKm5vZGVzXyBpcyBu
b24tZW1wdHkKLSAgTWljcm9TcGluTG9jayBsb2NrXzsgLy8gcHJvdGVjdHMgYWNjZXNzIHRvICpu
b2Rlc18KLSAgTm9kZUFsbG9jIGFsbG9jXzsKLX07Ci0KLS8vIEluIGNhc2Ugb2YgYXJlbmEgYWxs
b2NhdG9yLCBubyByZWN5Y2xpbmcgaXMgbmVjZXNzYXJ5LCBhbmQgaXQncyBwb3NzaWJsZQotLy8g
dG8gc2F2ZSBvbiBDb25jdXJyZW50U2tpcExpc3Qgc2l6ZS4KLXRlbXBsYXRlPHR5cGVuYW1lIE5v
ZGVUeXBlLCB0eXBlbmFtZSBOb2RlQWxsb2M+Ci1jbGFzcyBOb2RlUmVjeWNsZXI8Tm9kZVR5cGUs
IE5vZGVBbGxvYywgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gIE5vZGVUeXBlOjp0ZW1wbGF0
ZSBEZXN0cm95SXNOb09wPE5vZGVBbGxvYz46OnZhbHVlPjo6dHlwZT4gewotIHB1YmxpYzoKLSAg
ZXhwbGljaXQgTm9kZVJlY3ljbGVyKGNvbnN0IE5vZGVBbGxvYyYgYWxsb2MpIDogYWxsb2NfKGFs
bG9jKSB7IH0KLQotICB2b2lkIGFkZFJlZigpIHsgfQotICB2b2lkIHJlbGVhc2VSZWYoKSB7IH0K
LQotICB2b2lkIGFkZChOb2RlVHlwZSogLyogbm9kZSAqLykge30KLQotICBOb2RlQWxsb2MmIGFs
bG9jKCkgeyByZXR1cm4gYWxsb2NfOyB9Ci0KLSBwcml2YXRlOgotICBOb2RlQWxsb2MgYWxsb2Nf
OwotfTsKLQotfX0gIC8vIG5hbWVzcGFjZXMKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0NvbmN1cnJlbnRTa2lwTGlzdC5oIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvQ29uY3VycmVudFNraXBMaXN0LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExYTY5NGE2ZTNmMjk3MzQ0YTczY2UzM2RjYjdh
ZmY1YWM5MzI3YmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvQ29uY3VycmVudFNr
aXBMaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8vIEBhdXRob3I6IFhpbiBMaXUgPHhsaXV4QGZi
LmNvbT4KLS8vCi0vLyBBIGNvbmN1cnJlbnQgc2tpcCBsaXN0IChDU0wpIGltcGxlbWVudGF0aW9u
LgotLy8gUmVmOiBodHRwOi8vd3d3LmNzLnRhdS5hYy5pbC9+c2hhbmlyL25pci1wdWJzLXdlYi9Q
YXBlcnMvT1BPRElTMjAwNi1CQS5wZGYKLQotLyoKLQotVGhpcyBpbXBsZW1lbnRzIGEgc29ydGVk
IGFzc29jaWF0aXZlIGNvbnRhaW5lciB0aGF0IHN1cHBvcnRzIG9ubHkKLXVuaXF1ZSBrZXlzLiAg
KFNpbWlsYXIgdG8gc3RkOjpzZXQuKQotCi1GZWF0dXJlczoKLQotICAxLiBTbWFsbCBtZW1vcnkg
b3ZlcmhlYWQ6IH40MCUgbGVzcyBtZW1vcnkgb3ZlcmhlYWQgY29tcGFyZWQgd2l0aAotICAgICBz
dGQ6OnNldCAoMS42IHdvcmRzIHBlciBub2RlIHZlcnN1cyAzKS4gSXQgaGFzIGFuIG1pbmltdW0g
b2YgNAotICAgICB3b3JkcyAoNyB3b3JkcyBpZiB0aGVyZSBub2RlcyBnb3QgZGVsZXRlZCkgcGVy
LWxpc3Qgb3ZlcmhlYWQKLSAgICAgdGhvdWdoLgotCi0gIDIuIFJlYWQgYWNjZXNzZXMgKGNvdW50
LCBmaW5kIGl0ZXJhdG9yLCBza2lwcGVyKSBhcmUgbG9jay1mcmVlIGFuZAotICAgICBtb3N0bHkg
d2FpdC1mcmVlICh0aGUgb25seSB3YWl0IGEgcmVhZGVyIG1heSBuZWVkIHRvIGRvIGlzIHdoZW4K
LSAgICAgdGhlIG5vZGUgaXQgaXMgdmlzaXRpbmcgaXMgaW4gYSBwZW5kaW5nIHN0YWdlLCBpLmUu
IGRlbGV0aW5nLAotICAgICBhZGRpbmcgYW5kIG5vdCBmdWxseSBsaW5rZWQpLiAgV3JpdGUgYWNj
ZXNzZXMgKHJlbW92ZSwgYWRkKSBuZWVkCi0gICAgIHRvIGFjcXVpcmUgbG9ja3MsIGJ1dCBsb2Nr
cyBhcmUgbG9jYWwgdG8gdGhlIHByZWRlY2Vzc29yIG5vZGVzCi0gICAgIGFuZC9vciBzdWNjZXNz
b3Igbm9kZXMuCi0KLSAgMy4gR29vZCBoaWdoIGNvbnRlbnRpb24gcGVyZm9ybWFuY2UsIGNvbXBh
cmFibGUgc2luZ2xlLXRocmVhZAotICAgICBwZXJmb3JtYW5jZS4gIEluIHRoZSBtdWx0aXRocmVh
ZGVkIGNhc2UgKDEyIHdvcmtlcnMpLCBDU0wgdGVzdGVkCi0gICAgIDEweCBmYXN0ZXIgdGhhbiBh
IFJXU3BpbkxvY2tlZCBzdGQ6OnNldCBmb3IgYW4gYXZlcmFnZWQgc2l6ZWQKLSAgICAgbGlzdCAo
MUsgLSAxTSBub2RlcykuCi0KLSAgICAgQ29tcGFyYWJsZSByZWFkIHBlcmZvcm1hbmNlIHRvIHN0
ZDo6c2V0IHdoZW4gc2luZ2xlIHRocmVhZGVkLAotICAgICBlc3BlY2lhbGx5IHdoZW4gdGhlIGxp
c3Qgc2l6ZSBpcyBsYXJnZSwgYW5kIHNjYWxlcyBiZXR0ZXIgdG8KLSAgICAgbGFyZ2VyIGxpc3Rz
OiB3aGVuIHRoZSBzaXplIGlzIHNtYWxsLCBDU0wgY2FuIGJlIDIwLTUwJSBzbG93ZXIgb24KLSAg
ICAgZmluZCgpL2NvbnRhaW5zKCkuICBBcyB0aGUgc2l6ZSBnZXRzIGxhcmdlICg+IDFNIGVsZW1l
bnRzKSwKLSAgICAgZmluZCgpL2NvbnRhaW5zKCkgY2FuIGJlIDMwJSBmYXN0ZXIuCi0KLSAgICAg
SXRlcmF0aW5nIHRocm91Z2ggYSBza2lwbGlzdCBpcyBzaW1pbGFyIHRvIGl0ZXJhdGluZyB0aHJv
dWdoIGEKLSAgICAgbGlua2VkIGxpc3QsIHRodXMgaXMgbXVjaCAoMi02eCkgZmFzdGVyIHRoYW4g
b24gYSBzdGQ6OnNldAotICAgICAodHJlZS1iYXNlZCkuICBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1
ZSBmb3Igc2hvcnQgbGlzdHMgZHVlIHRvCi0gICAgIGJldHRlciBjYWNoZSBsb2NhbGl0eS4gIEJh
c2VkIG9uIHRoYXQsIGl0J3MgYWxzbyBmYXN0ZXIgdG8KLSAgICAgaW50ZXJzZWN0IHR3byBza2lw
bGlzdHMuCi0KLSAgNC4gTGF6eSByZW1vdmFsIHdpdGggR0Mgc3VwcG9ydC4gIFRoZSByZW1vdmVk
IG5vZGVzIGdldCBkZWxldGVkIHdoZW4KLSAgICAgdGhlIGxhc3QgQWNjZXNzb3IgdG8gdGhlIHNr
aXBsaXN0IGlzIGRlc3Ryb3llZC4KLQotQ2F2ZWF0czoKLQotICAxLiBXcml0ZSBvcGVyYXRpb25z
IGFyZSB1c3VhbGx5IDMwJSBzbG93ZXIgdGhhbiBzdGQ6OnNldCBpbiBhIHNpbmdsZQotICAgICB0
aHJlYWRlZCBlbnZpcm9ubWVudC4KLQotICAyLiBOZWVkIHRvIGhhdmUgYSBoZWFkIG5vZGUgZm9y
IGVhY2ggbGlzdCwgd2hpY2ggaGFzIGEgNCB3b3JkCi0gICAgIG92ZXJoZWFkLgotCi0gIDMuIFdo
ZW4gdGhlIGxpc3QgaXMgcXVpdGUgc21hbGwgKDwgMTAwMCBlbGVtZW50cyksIHNpbmdsZSB0aHJl
YWRlZAotICAgICBiZW5jaG1hcmtzIHNob3cgQ1NMIGNhbiBiZSAxMHggc2xvd2VyIHRoYW4gc3Rk
OnNldC4KLQotICA0LiBUaGUgaW50ZXJmYWNlIHJlcXVpcmVzIHVzaW5nIGFuIEFjY2Vzc29yIHRv
IGFjY2VzcyB0aGUgc2tpcGxpc3QuCi0gICAgKFNlZSBiZWxvdy4pCi0KLSAgNS4gQ3VycmVudGx5
IHg2NCBvbmx5LCBkdWUgdG8gdXNlIG9mIE1pY3JvU3BpbkxvY2suCi0KLSAgNi4gRnJlZWQgbm9k
ZXMgd2lsbCBub3QgYmUgcmVjbGFpbWVkIGFzIGxvbmcgYXMgdGhlcmUgYXJlIG9uZ29pbmcKLSAg
ICAgdXNlcyBvZiB0aGUgbGlzdC4KLQotU2FtcGxlIHVzYWdlOgotCi0gICAgIHR5cGVkZWYgQ29u
Y3VycmVudFNraXBMaXN0PGludD4gU2tpcExpc3RUOwotICAgICBzaGFyZWRfcHRyPFNraXBMaXN0
VD4gc2woU2tpcExpc3RUOjpjcmVhdGVJbnN0YW5jZShpbml0X2hlYWRfaGVpZ2h0KTsKLSAgICAg
ewotICAgICAgIC8vIEl0J3MgdXN1YWxseSBnb29kIHByYWN0aWNlIHRvIGhvbGQgYW4gYWNjZXNz
b3Igb25seSBkdXJpbmcKLSAgICAgICAvLyBpdHMgbmVjZXNzYXJ5IGxpZmUgY3ljbGUgKGJ1dCBu
b3QgaW4gYSB0aWdodCBsb29wIGFzCi0gICAgICAgLy8gQWNjZXNzb3IgY3JlYXRpb24gaW5jdXJz
IHJlZi1jb3VudGluZyBvdmVyaGVhZCkuCi0gICAgICAgLy8KLSAgICAgICAvLyBIb2xkaW5nIGl0
IGxvbmdlciBkZWxheXMgZ2FyYmFnZS1jb2xsZWN0aW5nIHRoZSBkZWxldGVkCi0gICAgICAgLy8g
bm9kZXMgaW4gdGhlIGxpc3QuCi0gICAgICAgU2tpcExpc3RUOjpBY2Nlc3NvciBhY2Nlc3Nvcihz
bCk7Ci0gICAgICAgYWNjZXNzb3IuaW5zZXJ0KDIzKTsKLSAgICAgICBhY2Nlc3Nvci5lcmFzZSgy
KTsKLSAgICAgICBmb3IgKGF1dG8gJmVsZW0gOiBhY2Nlc3NvcikgewotICAgICAgICAgLy8gdXNl
IGVsZW0gdG8gYWNjZXNzIGRhdGEKLSAgICAgICB9Ci0gICAgICAgLi4uIC4uLgotICAgICB9Ci0K
LSBBbm90aGVyIHVzZWZ1bCB0eXBlIGlzIHRoZSBTa2lwcGVyIGFjY2Vzc29yLiAgVGhpcyBpcyB1
c2VmdWwgaWYgeW91Ci0gd2FudCB0byBza2lwIHRvIGxvY2F0aW9ucyBpbiB0aGUgd2F5IHN0ZDo6
bG93ZXJfYm91bmQoKSB3b3JrcywKLSBpLmUuIGl0IGNhbiBiZSB1c2VkIGZvciBnb2luZyB0aHJv
dWdoIHRoZSBsaXN0IGJ5IHNraXBwaW5nIHRvIHRoZQotIG5vZGUgbm8gbGVzcyB0aGFuIGEgc3Bl
Y2lmaWVkIGtleS4gIFRoZSBTa2lwcGVyIGtlZXBzIGl0cyBsb2NhdGlvbiBhcwotIHN0YXRlLCB3
aGljaCBtYWtlcyBpdCBjb252ZW5pZW50IGZvciB0aGluZ3MgbGlrZSBpbXBsZW1lbnRpbmcKLSBp
bnRlcnNlY3Rpb24gb2YgdHdvIHNldHMgZWZmaWNpZW50bHksIGFzIGl0IGNhbiBzdGFydCBmcm9t
IHRoZSBsYXN0Ci0gdmlzaXRlZCBwb3NpdGlvbi4KLQotICAgICB7Ci0gICAgICAgU2tpcExpc3RU
OjpBY2Nlc3NvciBhY2Nlc3NvcihzbCk7Ci0gICAgICAgU2tpcExpc3RUOjpTa2lwcGVyIHNraXBw
ZXIoYWNjZXNzb3IpOwotICAgICAgIHNraXBwZXIudG8oMzApOwotICAgICAgIGlmIChza2lwcGVy
KSB7Ci0gICAgICAgICBDSEVDS19MRSgzMCwgKnNraXBwZXIpOwotICAgICAgIH0KLSAgICAgICAu
Li4gIC4uLgotICAgICAgIC8vIEdDIG1heSBoYXBwZW4gd2hlbiB0aGUgYWNjZXNzb3IgZ2V0cyBk
ZXN0cnVjdGVkLgotICAgICB9Ci0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGFsZ29y
aXRobT4KLSNpbmNsdWRlIDxhdG9taWM+Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPG1l
bW9yeT4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLQotI2luY2x1ZGUgPGJvb3N0L2l0ZXJhdG9y
L2l0ZXJhdG9yX2ZhY2FkZS5ocHA+Ci0jaW5jbHVkZSA8Z2xvZy9sb2dnaW5nLmg+Ci0KLSNpbmNs
dWRlIDxmb2xseS9Db25jdXJyZW50U2tpcExpc3QtaW5sLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvTGlr
ZWx5Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvTWVtb3J5Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvTWljcm9T
cGluTG9jay5oPgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULAot
ICAgICAgICAgdHlwZW5hbWUgQ29tcCA9IHN0ZDo6bGVzczxUPiwKLSAgICAgICAgIC8vIEFsbCBu
b2RlcyBhcmUgYWxsb2NhdGVkIHVzaW5nIHByb3ZpZGVkIFNpbXBsZUFsbG9jYXRvciwKLSAgICAg
ICAgIC8vIGl0IHNob3VsZCBiZSB0aHJlYWQtc2FmZS4KLSAgICAgICAgIHR5cGVuYW1lIE5vZGVB
bGxvYyA9IFN5c0FsbG9jLAotICAgICAgICAgaW50IE1BWF9IRUlHSFQgPSAyND4KLWNsYXNzIENv
bmN1cnJlbnRTa2lwTGlzdCB7Ci0gIC8vIE1BWF9IRUlHSFQgbmVlZHMgdG8gYmUgYXQgbGVhc3Qg
MiB0byBzdXBwcmVzcyBjb21waWxlcgotICAvLyB3YXJuaW5ncy9lcnJvcnMgKFdlcnJvcj11bmlu
aXRpYWxpemVkIHRpZ2dlcmVkIGR1ZSB0byBwcmVkc19bMV0KLSAgLy8gYmVpbmcgdHJlYXRlZCBh
cyBhIHNjYWxhciBpbiB0aGUgY29tcGlsZXIpLgotICBzdGF0aWNfYXNzZXJ0KE1BWF9IRUlHSFQg
Pj0gMiAmJiBNQVhfSEVJR0hUIDwgNjQsCi0gICAgICAiTUFYX0hFSUdIVCBjYW4gb25seSBiZSBp
biB0aGUgcmFuZ2Ugb2YgWzIsIDY0KSIpOwotICB0eXBlZGVmIHN0ZDo6dW5pcXVlX2xvY2s8Zm9s
bHk6Ok1pY3JvU3BpbkxvY2s+IFNjb3BlZExvY2tlcjsKLSAgdHlwZWRlZiBDb25jdXJyZW50U2tp
cExpc3Q8VCwgQ29tcCwgTm9kZUFsbG9jLCBNQVhfSEVJR0hUPiBTa2lwTGlzdFR5cGU7Ci0KLSBw
dWJsaWM6Ci0gIHR5cGVkZWYgZGV0YWlsOjpTa2lwTGlzdE5vZGU8VD4gTm9kZVR5cGU7Ci0gIHR5
cGVkZWYgVCB2YWx1ZV90eXBlOwotICB0eXBlZGVmIFQga2V5X3R5cGU7Ci0KLSAgdHlwZWRlZiBk
ZXRhaWw6OmNzbF9pdGVyYXRvcjx2YWx1ZV90eXBlLCBOb2RlVHlwZT4gaXRlcmF0b3I7Ci0gIHR5
cGVkZWYgZGV0YWlsOjpjc2xfaXRlcmF0b3I8Y29uc3QgdmFsdWVfdHlwZSwgY29uc3QgTm9kZVR5
cGU+IGNvbnN0X2l0ZXJhdG9yOwotCi0gIGNsYXNzIEFjY2Vzc29yOwotICBjbGFzcyBTa2lwcGVy
OwotCi0gIGV4cGxpY2l0IENvbmN1cnJlbnRTa2lwTGlzdChpbnQgaGVpZ2h0LCBjb25zdCBOb2Rl
QWxsb2MmIGFsbG9jKQotICAgICAgOiByZWN5Y2xlcl8oYWxsb2MpLAotICAgICAgICBoZWFkXyhO
b2RlVHlwZTo6Y3JlYXRlKHJlY3ljbGVyXy5hbGxvYygpLCBoZWlnaHQsIHZhbHVlX3R5cGUoKSwg
dHJ1ZSkpLAotICAgICAgICBzaXplXygwKSB7fQotCi0gIGV4cGxpY2l0IENvbmN1cnJlbnRTa2lw
TGlzdChpbnQgaGVpZ2h0KQotICAgICAgOiByZWN5Y2xlcl8oKSwKLSAgICAgICAgaGVhZF8oTm9k
ZVR5cGU6OmNyZWF0ZShyZWN5Y2xlcl8uYWxsb2MoKSwgaGVpZ2h0LCB2YWx1ZV90eXBlKCksIHRy
dWUpKSwKLSAgICAgICAgc2l6ZV8oMCkge30KLQotICAvLyBDb252ZW5pZW50IGZ1bmN0aW9uIHRv
IGdldCBhbiBBY2Nlc3NvciB0byBhIG5ldyBpbnN0YW5jZS4KLSAgc3RhdGljIEFjY2Vzc29yIGNy
ZWF0ZShpbnQgaGVpZ2h0LCBjb25zdCBOb2RlQWxsb2MmIGFsbG9jKSB7Ci0gICAgcmV0dXJuIEFj
Y2Vzc29yKGNyZWF0ZUluc3RhbmNlKGhlaWdodCwgYWxsb2MpKTsKLSAgfQotCi0gIHN0YXRpYyBB
Y2Nlc3NvciBjcmVhdGUoaW50IGhlaWdodCA9IDEpIHsKLSAgICByZXR1cm4gQWNjZXNzb3IoY3Jl
YXRlSW5zdGFuY2UoaGVpZ2h0KSk7Ci0gIH0KLQotICAvLyBDcmVhdGUgYSBzaGFyZWRfcHRyIHNr
aXBsaXN0IG9iamVjdCB3aXRoIGluaXRpYWwgaGVhZCBoZWlnaHQuCi0gIHN0YXRpYyBzdGQ6OnNo
YXJlZF9wdHI8U2tpcExpc3RUeXBlPiBjcmVhdGVJbnN0YW5jZShpbnQgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTm9k
ZUFsbG9jJiBhbGxvYykgewotICAgIHJldHVybiBzdGQ6Om1ha2Vfc2hhcmVkPENvbmN1cnJlbnRT
a2lwTGlzdD4oaGVpZ2h0LCBhbGxvYyk7Ci0gIH0KLQotICBzdGF0aWMgc3RkOjpzaGFyZWRfcHRy
PFNraXBMaXN0VHlwZT4gY3JlYXRlSW5zdGFuY2UoaW50IGhlaWdodCA9IDEpIHsKLSAgICByZXR1
cm4gc3RkOjptYWtlX3NoYXJlZDxDb25jdXJyZW50U2tpcExpc3Q+KGhlaWdodCk7Ci0gIH0KLQot
ICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLSAgLy8gQmVsb3cgYXJlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCi0g
IC8vIFBsZWFzZSBzZWUgQ29uY3VycmVudFNraXBMaXN0OjpBY2Nlc3NvciBmb3Igc3RkbGliLWxp
a2UgQVBJcy4KLSAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgfkNvbmN1cnJlbnRTa2lwTGlzdCgpIHsKLSAg
ICAvKiBzdGF0aWMgKi8gaWYgKE5vZGVUeXBlOjp0ZW1wbGF0ZSBEZXN0cm95SXNOb09wPE5vZGVB
bGxvYz46OnZhbHVlKSB7Ci0gICAgICAvLyBBdm9pZCB0cmF2ZXJzaW5nIHRoZSBsaXN0IGlmIHVz
aW5nIGFyZW5hIGFsbG9jYXRvci4KLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZm9yIChOb2Rl
VHlwZSogY3VycmVudCA9IGhlYWRfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IGN1
cnJlbnQ7ICkgewotICAgICAgTm9kZVR5cGUqIHRtcCA9IGN1cnJlbnQtPnNraXAoMCk7Ci0gICAg
ICBOb2RlVHlwZTo6ZGVzdHJveShyZWN5Y2xlcl8uYWxsb2MoKSwgY3VycmVudCk7Ci0gICAgICBj
dXJyZW50ID0gdG1wOwotICAgIH0KLSAgfQotCi0gcHJpdmF0ZToKLSAgc3RhdGljIGJvb2wgZ3Jl
YXRlcihjb25zdCB2YWx1ZV90eXBlICZkYXRhLCBjb25zdCBOb2RlVHlwZSAqbm9kZSkgewotICAg
IHJldHVybiBub2RlICYmIENvbXAoKShub2RlLT5kYXRhKCksIGRhdGEpOwotICB9Ci0KLSAgc3Rh
dGljIGJvb2wgbGVzcyhjb25zdCB2YWx1ZV90eXBlICZkYXRhLCBjb25zdCBOb2RlVHlwZSAqbm9k
ZSkgewotICAgIHJldHVybiAobm9kZSA9PSBudWxscHRyKSB8fCBDb21wKCkoZGF0YSwgbm9kZS0+
ZGF0YSgpKTsKLSAgfQotCi0gIHN0YXRpYyBpbnQgZmluZEluc2VydGlvblBvaW50KE5vZGVUeXBl
ICpjdXIsIGludCBjdXJfbGF5ZXIsCi0gICAgICBjb25zdCB2YWx1ZV90eXBlICZkYXRhLAotICAg
ICAgTm9kZVR5cGUgKnByZWRzW10sIE5vZGVUeXBlICpzdWNjc1tdKSB7Ci0gICAgaW50IGZvdW5k
TGF5ZXIgPSAtMTsKLSAgICBOb2RlVHlwZSAqcHJlZCA9IGN1cjsKLSAgICBOb2RlVHlwZSAqZm91
bmROb2RlID0gbnVsbHB0cjsKLSAgICBmb3IgKGludCBsYXllciA9IGN1cl9sYXllcjsgbGF5ZXIg
Pj0gMDsgLS1sYXllcikgewotICAgICAgTm9kZVR5cGUgKm5vZGUgPSBwcmVkLT5za2lwKGxheWVy
KTsKLSAgICAgIHdoaWxlIChncmVhdGVyKGRhdGEsIG5vZGUpKSB7Ci0gICAgICAgIHByZWQgPSBu
b2RlOwotICAgICAgICBub2RlID0gbm9kZS0+c2tpcChsYXllcik7Ci0gICAgICB9Ci0gICAgICBp
ZiAoZm91bmRMYXllciA9PSAtMSAmJiAhbGVzcyhkYXRhLCBub2RlKSkgeyAvLyB0aGUgdHdvIGtl
eXMgZXF1YWwKLSAgICAgICAgZm91bmRMYXllciA9IGxheWVyOwotICAgICAgICBmb3VuZE5vZGUg
PSBub2RlOwotICAgICAgfQotICAgICAgcHJlZHNbbGF5ZXJdID0gcHJlZDsKLQotICAgICAgLy8g
aWYgZm91bmQsIHN1Y2NzWzAuLmZvdW5kTGF5ZXJdIG5lZWQgdG8gcG9pbnQgdG8gdGhlIGNhY2hl
ZCBmb3VuZE5vZGUsCi0gICAgICAvLyBhcyBmb3VuZE5vZGUgbWlnaHQgYmUgZGVsZXRlZCBhdCB0
aGUgc2FtZSB0aW1lIHRodXMgcHJlZC0+c2tpcCgpIGNhbgotICAgICAgLy8gcmV0dXJuIG51bGxw
dHIgb3IgYW5vdGhlciBub2RlLgotICAgICAgc3VjY3NbbGF5ZXJdID0gZm91bmROb2RlID8gZm91
bmROb2RlIDogbm9kZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZvdW5kTGF5ZXI7Ci0gIH0KLQotICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJf
cmVsYXhlZCk7IH0KLQotICBpbnQgaGVpZ2h0KCkgY29uc3QgewotICAgIHJldHVybiBoZWFkXy5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpLT5oZWlnaHQoKTsKLSAgfQotCi0gIGludCBt
YXhMYXllcigpIGNvbnN0IHsgcmV0dXJuIGhlaWdodCgpIC0gMTsgfQotCi0gIHNpemVfdCBpbmNy
ZW1lbnRTaXplKGludCBkZWx0YSkgewotICAgIHJldHVybiBzaXplXy5mZXRjaF9hZGQoZGVsdGEs
IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpICsgZGVsdGE7Ci0gIH0KLQotICAvLyBSZXR1cm5z
IHRoZSBub2RlIGlmIGZvdW5kLCBudWxscHRyIG90aGVyd2lzZS4KLSAgTm9kZVR5cGUqIGZpbmQo
Y29uc3QgdmFsdWVfdHlwZSAmZGF0YSkgewotICAgIGF1dG8gcmV0ID0gZmluZE5vZGUoZGF0YSk7
Ci0gICAgaWYgKHJldC5zZWNvbmQgJiYgIXJldC5maXJzdC0+bWFya2VkRm9yUmVtb3ZhbCgpKSBy
ZXR1cm4gcmV0LmZpcnN0OwotICAgIHJldHVybiBudWxscHRyOwotICB9Ci0KLSAgLy8gbG9jayBh
bGwgdGhlIG5lY2Vzc2FyeSBub2RlcyBmb3IgY2hhbmdpbmcgKGFkZGluZyBvciByZW1vdmluZykg
dGhlIGxpc3QuCi0gIC8vIHJldHVybnMgdHJ1ZSBpZiBhbGwgdGhlIGxvY2sgYWNxdXJpZWQgc3Vj
Y2Vzc2Z1bGx5IGFuZCB0aGUgcmVsYXRlZCBub2RlcwotICAvLyBhcmUgYWxsIHZhbGlkYXRlIChu
b3QgaW4gY2VydGFpbiBwZW5kaW5nIHN0YXRlcyksIGZhbHNlIG90aGVyd2lzZS4KLSAgYm9vbCBs
b2NrTm9kZXNGb3JDaGFuZ2UoaW50IG5vZGVIZWlnaHQsCi0gICAgICBTY29wZWRMb2NrZXIgZ3Vh
cmRzW01BWF9IRUlHSFRdLAotICAgICAgTm9kZVR5cGUgKnByZWRzW01BWF9IRUlHSFRdLAotICAg
ICAgTm9kZVR5cGUgKnN1Y2NzW01BWF9IRUlHSFRdLAotICAgICAgYm9vbCBhZGRpbmc9dHJ1ZSkg
ewotICAgIE5vZGVUeXBlICpwcmVkLCAqc3VjYywgKnByZXZQcmVkID0gbnVsbHB0cjsKLSAgICBi
b29sIHZhbGlkID0gdHJ1ZTsKLSAgICBmb3IgKGludCBsYXllciA9IDA7IHZhbGlkICYmIGxheWVy
IDwgbm9kZUhlaWdodDsgKytsYXllcikgewotICAgICAgcHJlZCA9IHByZWRzW2xheWVyXTsKLSAg
ICAgIERDSEVDSyhwcmVkICE9IG51bGxwdHIpIDw8ICJsYXllcj0iIDw8IGxheWVyIDw8ICIgaGVp
Z2h0PSIgPDwgaGVpZ2h0KCkKLSAgICAgICAgPDwgIiBub2RlaGVpZ2h0PSIgPDwgbm9kZUhlaWdo
dDsKLSAgICAgIHN1Y2MgPSBzdWNjc1tsYXllcl07Ci0gICAgICBpZiAocHJlZCAhPSBwcmV2UHJl
ZCkgewotICAgICAgICBndWFyZHNbbGF5ZXJdID0gcHJlZC0+YWNxdWlyZUd1YXJkKCk7Ci0gICAg
ICAgIHByZXZQcmVkID0gcHJlZDsKLSAgICAgIH0KLSAgICAgIHZhbGlkID0gIXByZWQtPm1hcmtl
ZEZvclJlbW92YWwoKSAmJgotICAgICAgICBwcmVkLT5za2lwKGxheWVyKSA9PSBzdWNjOyAgLy8g
Y2hlY2sgYWdhaW4gYWZ0ZXIgbG9ja2luZwotCi0gICAgICBpZiAoYWRkaW5nKSB7ICAvLyB3aGVu
IGFkZGluZyBhIG5vZGUsIHRoZSBzdWNjIHNob3VsZG4ndCBiZSBnb2luZyBhd2F5Ci0gICAgICAg
IHZhbGlkID0gdmFsaWQgJiYgKHN1Y2MgPT0gbnVsbHB0ciB8fCAhc3VjYy0+bWFya2VkRm9yUmVt
b3ZhbCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWQ7Ci0gIH0KLQotICAv
LyBSZXR1cm5zIGEgcGFpcmVkIHZhbHVlOgotICAvLyAgIHBhaXIuZmlyc3QgYWx3YXlzIHN0b3Jl
cyB0aGUgcG9pbnRlciB0byB0aGUgbm9kZSB3aXRoIHRoZSBzYW1lIGlucHV0IGtleS4KLSAgLy8g
ICAgIEl0IGNvdWxkIGJlIGVpdGhlciB0aGUgbmV3bHkgYWRkZWQgZGF0YSwgb3IgdGhlIGV4aXN0
ZWQgZGF0YSBpbiB0aGUKLSAgLy8gICAgIGxpc3Qgd2l0aCB0aGUgc2FtZSBrZXkuCi0gIC8vICAg
cGFpci5zZWNvbmQgc3RvcmVzIHdoZXRoZXIgdGhlIGRhdGEgaXMgYWRkZWQgc3VjY2Vzc2Z1bGx5
OgotICAvLyAgICAgMCBtZWFucyBub3QgYWRkZWQsIG90aGVyd2lzZSByZXV0cm5zIHRoZSBuZXcg
c2l6ZS4KLSAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgc3RkOjpwYWlyPE5vZGVUeXBlKiwgc2l6
ZV90PiBhZGRPckdldERhdGEoVSAmJmRhdGEpIHsKLSAgICBOb2RlVHlwZSAqcHJlZHNbTUFYX0hF
SUdIVF0sICpzdWNjc1tNQVhfSEVJR0hUXTsKLSAgICBOb2RlVHlwZSAqbmV3Tm9kZTsKLSAgICBz
aXplX3QgbmV3U2l6ZTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgaW50IG1heF9sYXllciA9
IDA7Ci0gICAgICBpbnQgbGF5ZXIgPSBmaW5kSW5zZXJ0aW9uUG9pbnRHZXRNYXhMYXllcihkYXRh
LCBwcmVkcywgc3VjY3MsICZtYXhfbGF5ZXIpOwotCi0gICAgICBpZiAobGF5ZXIgPj0gMCkgewot
ICAgICAgICBOb2RlVHlwZSAqbm9kZUZvdW5kID0gc3VjY3NbbGF5ZXJdOwotICAgICAgICBEQ0hF
Q0sobm9kZUZvdW5kICE9IG51bGxwdHIpOwotICAgICAgICBpZiAobm9kZUZvdW5kLT5tYXJrZWRG
b3JSZW1vdmFsKCkpIHsKLSAgICAgICAgICBjb250aW51ZTsgIC8vIGlmIGl0J3MgZ2V0dGluZyBk
ZWxldGVkIHJldHJ5IGZpbmRpbmcgbm9kZS4KLSAgICAgICAgfQotICAgICAgICAvLyB3YWl0IHVu
dGlsIGZ1bGx5IGxpbmtlZC4KLSAgICAgICAgd2hpbGUgKFVOTElLRUxZKCFub2RlRm91bmQtPmZ1
bGx5TGlua2VkKCkpKSB7fQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobm9kZUZvdW5k
LCAwKTsKLSAgICAgIH0KLQotICAgICAgLy8gbmVlZCB0byBjYXBwZWQgYXQgdGhlIG9yaWdpbmFs
IGhlaWdodCAtLSB0aGUgcmVhbCBoZWlnaHQgbWF5IGhhdmUgZ3Jvd24KLSAgICAgIGludCBub2Rl
SGVpZ2h0ID0gZGV0YWlsOjpTa2lwTGlzdFJhbmRvbUhlaWdodDo6aW5zdGFuY2UoKS0+Ci0gICAg
ICAgIGdldEhlaWdodChtYXhfbGF5ZXIgKyAxKTsKLQotICAgICAgU2NvcGVkTG9ja2VyIGd1YXJk
c1tNQVhfSEVJR0hUXTsKLSAgICAgIGlmICghbG9ja05vZGVzRm9yQ2hhbmdlKG5vZGVIZWlnaHQs
IGd1YXJkcywgcHJlZHMsIHN1Y2NzKSkgewotICAgICAgICBjb250aW51ZTsgLy8gZ2l2ZSB1cCB0
aGUgbG9ja3MgYW5kIHJldHJ5IHVudGlsIGFsbCB2YWxpZAotICAgICAgfQotCi0gICAgICAvLyBs
b2NrcyBhY3F1aXJlZCBhbmQgYWxsIHZhbGlkLCBuZWVkIHRvIG1vZGlmeSB0aGUgbGlua3MgdW5k
ZXIgdGhlIGxvY2tzLgotICAgICAgbmV3Tm9kZSA9Ci0gICAgICAgIE5vZGVUeXBlOjpjcmVhdGUo
cmVjeWNsZXJfLmFsbG9jKCksIG5vZGVIZWlnaHQsIHN0ZDo6Zm9yd2FyZDxVPihkYXRhKSk7Ci0g
ICAgICBmb3IgKGludCBrID0gMDsgayA8IG5vZGVIZWlnaHQ7ICsraykgewotICAgICAgICBuZXdO
b2RlLT5zZXRTa2lwKGssIHN1Y2NzW2tdKTsKLSAgICAgICAgcHJlZHNba10tPnNldFNraXAoaywg
bmV3Tm9kZSk7Ci0gICAgICB9Ci0KLSAgICAgIG5ld05vZGUtPnNldEZ1bGx5TGlua2VkKCk7Ci0g
ICAgICBuZXdTaXplID0gaW5jcmVtZW50U2l6ZSgxKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIGludCBoZ3QgPSBoZWlnaHQoKTsKLSAgICBzaXplX3Qgc2l6ZUxpbWl0ID0KLSAgICAgIGRl
dGFpbDo6U2tpcExpc3RSYW5kb21IZWlnaHQ6Omluc3RhbmNlKCktPmdldFNpemVMaW1pdChoZ3Qp
OwotCi0gICAgaWYgKGhndCA8IE1BWF9IRUlHSFQgJiYgbmV3U2l6ZSA+IHNpemVMaW1pdCkgewot
ICAgICAgZ3Jvd0hlaWdodChoZ3QgKyAxKTsKLSAgICB9Ci0gICAgQ0hFQ0tfR1QobmV3U2l6ZSwg
MCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG5ld05vZGUsIG5ld1NpemUpOwotICB9Ci0K
LSAgYm9vbCByZW1vdmUoY29uc3QgdmFsdWVfdHlwZSAmZGF0YSkgewotICAgIE5vZGVUeXBlICpu
b2RlVG9EZWxldGUgPSBudWxscHRyOwotICAgIFNjb3BlZExvY2tlciBub2RlR3VhcmQ7Ci0gICAg
Ym9vbCBpc01hcmtlZCA9IGZhbHNlOwotICAgIGludCBub2RlSGVpZ2h0ID0gMDsKLSAgICBOb2Rl
VHlwZSogcHJlZHNbTUFYX0hFSUdIVF0sICpzdWNjc1tNQVhfSEVJR0hUXTsKLQotICAgIHdoaWxl
ICh0cnVlKSB7Ci0gICAgICBpbnQgbWF4X2xheWVyID0gMDsKLSAgICAgIGludCBsYXllciA9IGZp
bmRJbnNlcnRpb25Qb2ludEdldE1heExheWVyKGRhdGEsIHByZWRzLCBzdWNjcywgJm1heF9sYXll
cik7Ci0gICAgICBpZiAoIWlzTWFya2VkICYmIChsYXllciA8IDAgfHwgIW9rVG9EZWxldGUoc3Vj
Y3NbbGF5ZXJdLCBsYXllcikpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQot
ICAgICAgaWYgKCFpc01hcmtlZCkgewotICAgICAgICBub2RlVG9EZWxldGUgPSBzdWNjc1tsYXll
cl07Ci0gICAgICAgIG5vZGVIZWlnaHQgPSBub2RlVG9EZWxldGUtPmhlaWdodCgpOwotICAgICAg
ICBub2RlR3VhcmQgPSBub2RlVG9EZWxldGUtPmFjcXVpcmVHdWFyZCgpOwotICAgICAgICBpZiAo
bm9kZVRvRGVsZXRlLT5tYXJrZWRGb3JSZW1vdmFsKCkpIHJldHVybiBmYWxzZTsKLSAgICAgICAg
bm9kZVRvRGVsZXRlLT5zZXRNYXJrZWRGb3JSZW1vdmFsKCk7Ci0gICAgICAgIGlzTWFya2VkID0g
dHJ1ZTsKLSAgICAgIH0KLQotICAgICAgLy8gYWNxdWlyZSBwcmVkIGxvY2tzIGZyb20gYm90dG9t
IGxheWVyIHVwCi0gICAgICBTY29wZWRMb2NrZXIgZ3VhcmRzW01BWF9IRUlHSFRdOwotICAgICAg
aWYgKCFsb2NrTm9kZXNGb3JDaGFuZ2Uobm9kZUhlaWdodCwgZ3VhcmRzLCBwcmVkcywgc3VjY3Ms
IGZhbHNlKSkgewotICAgICAgICBjb250aW51ZTsgIC8vIHRoaXMgd2lsbCB1bmxvY2sgYWxsIHRo
ZSBsb2NrcwotICAgICAgfQotCi0gICAgICBmb3IgKGludCBrID0gbm9kZUhlaWdodCAtIDE7IGsg
Pj0gMDsgLS1rKSB7Ci0gICAgICAgIHByZWRzW2tdLT5zZXRTa2lwKGssIG5vZGVUb0RlbGV0ZS0+
c2tpcChrKSk7Ci0gICAgICB9Ci0KLSAgICAgIGluY3JlbWVudFNpemUoLTEpOwotICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIHJlY3ljbGUobm9kZVRvRGVsZXRlKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfQotCi0gIGNvbnN0IHZhbHVlX3R5cGUgKmZpcnN0KCkgY29uc3QgewotICAgIGF1dG8gbm9k
ZSA9IGhlYWRfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfY29uc3VtZSktPnNraXAoMCk7Ci0gICAg
cmV0dXJuIG5vZGUgPyAmbm9kZS0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgfQotCi0gIGNvbnN0IHZh
bHVlX3R5cGUgKmxhc3QoKSBjb25zdCB7Ci0gICAgTm9kZVR5cGUgKnByZWQgPSBoZWFkXy5sb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpOwotICAgIE5vZGVUeXBlICpub2RlID0gbnVsbHB0
cjsKLSAgICBmb3IgKGludCBsYXllciA9IG1heExheWVyKCk7IGxheWVyID49IDA7IC0tbGF5ZXIp
IHsKLSAgICAgIGRvIHsKLSAgICAgICAgbm9kZSA9IHByZWQtPnNraXAobGF5ZXIpOwotICAgICAg
ICBpZiAobm9kZSkgcHJlZCA9IG5vZGU7Ci0gICAgICB9IHdoaWxlIChub2RlICE9IG51bGxwdHIp
OwotICAgIH0KLSAgICByZXR1cm4gcHJlZCA9PSBoZWFkXy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGF4ZWQpCi0gICAgICA/IG51bGxwdHIgOiAmcHJlZC0+ZGF0YSgpOwotICB9Ci0KLSAgc3Rh
dGljIGJvb2wgb2tUb0RlbGV0ZShOb2RlVHlwZSAqY2FuZGlkYXRlLCBpbnQgbGF5ZXIpIHsKLSAg
ICBEQ0hFQ0soY2FuZGlkYXRlICE9IG51bGxwdHIpOwotICAgIHJldHVybiBjYW5kaWRhdGUtPmZ1
bGx5TGlua2VkKCkgJiYKLSAgICAgIGNhbmRpZGF0ZS0+bWF4TGF5ZXIoKSA9PSBsYXllciAmJgot
ICAgICAgIWNhbmRpZGF0ZS0+bWFya2VkRm9yUmVtb3ZhbCgpOwotICB9Ci0KLSAgLy8gZmluZCBu
b2RlIGZvciBpbnNlcnRpb24vZGVsZXRpbmcKLSAgaW50IGZpbmRJbnNlcnRpb25Qb2ludEdldE1h
eExheWVyKGNvbnN0IHZhbHVlX3R5cGUgJmRhdGEsCi0gICAgICBOb2RlVHlwZSAqcHJlZHNbXSwg
Tm9kZVR5cGUgKnN1Y2NzW10sIGludCAqbWF4X2xheWVyKSBjb25zdCB7Ci0gICAgKm1heF9sYXll
ciA9IG1heExheWVyKCk7Ci0gICAgcmV0dXJuIGZpbmRJbnNlcnRpb25Qb2ludChoZWFkXy5sb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpLAotICAgICAgKm1heF9sYXllciwgZGF0YSwgcHJl
ZHMsIHN1Y2NzKTsKLSAgfQotCi0gIC8vIEZpbmQgbm9kZSBmb3IgYWNjZXNzLiBSZXR1cm5zIGEg
cGFpcmVkIHZhbHVlczoKLSAgLy8gcGFpci5maXJzdCA9IHRoZSBmaXJzdCBub2RlIHRoYXQgbm8t
bGVzcyB0aGFuIGRhdGEgdmFsdWUKLSAgLy8gcGFpci5zZWNvbmQgPSAxIHdoZW4gdGhlIGRhdGEg
dmFsdWUgaXMgZm91bmRlZCwgb3IgMCBvdGhlcndpc2UuCi0gIC8vIFRoaXMgaXMgbGlrZSBsb3dl
cl9ib3VuZCwgYnV0IG5vdCBleGFjdDogd2UgY291bGQgaGF2ZSB0aGUgbm9kZSBtYXJrZWQgZm9y
Ci0gIC8vIHJlbW92YWwgc28gc3RpbGwgbmVlZCB0byBjaGVjayB0aGF0LgotICBzdGQ6OnBhaXI8
Tm9kZVR5cGUqLCBpbnQ+IGZpbmROb2RlKGNvbnN0IHZhbHVlX3R5cGUgJmRhdGEpIGNvbnN0IHsK
LSAgICByZXR1cm4gZmluZE5vZGVEb3duUmlnaHQoZGF0YSk7Ci0gIH0KLQotICAvLyBGaW5kIG5v
ZGUgYnkgZmlyc3Qgc3RlcHBpbmcgZG93biB0aGVuIHN0ZXBwaW5nIHJpZ2h0LiBCYXNlZCBvbiBi
ZW5jaG1hcmsKLSAgLy8gcmVzdWx0cywgdGhpcyBpcyBzbGlnaHRseSBmYXN0ZXIgdGhhbiBmaW5k
Tm9kZVJpZ2h0RG93biBmb3IgYmV0dGVyCi0gIC8vIGxvY2FsYWxpdHkgb24gdGhlIHNraXBwaW5n
IHBvaW50ZXJzLgotICBzdGQ6OnBhaXI8Tm9kZVR5cGUqLCBpbnQ+IGZpbmROb2RlRG93blJpZ2h0
KGNvbnN0IHZhbHVlX3R5cGUgJmRhdGEpIGNvbnN0IHsKLSAgICBOb2RlVHlwZSAqcHJlZCA9IGhl
YWRfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfY29uc3VtZSk7Ci0gICAgaW50IGh0ID0gcHJlZC0+
aGVpZ2h0KCk7Ci0gICAgTm9kZVR5cGUgKm5vZGUgPSBudWxscHRyOwotCi0gICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOwotICAgIHdoaWxlICghZm91bmQpIHsKLSAgICAgIC8vIHN0ZXBwaW5nIGRvd24K
LSAgICAgIGZvciAoOyBodCA+IDAgJiYgbGVzcyhkYXRhLCBub2RlID0gcHJlZC0+c2tpcChodCAt
IDEpKTsgLS1odCkge30KLSAgICAgIGlmIChodCA9PSAwKSByZXR1cm4gc3RkOjptYWtlX3BhaXIo
bm9kZSwgMCk7ICAvLyBub3QgZm91bmQKLSAgICAgIC8vIG5vZGUgPD0gZGF0YSBub3csIGJ1dCB3
ZSBuZWVkIHRvIGZpeCB1cCBodAotICAgICAgLS1odDsKLQotICAgICAgLy8gc3RlcHBpbmcgcmln
aHQKLSAgICAgIHdoaWxlIChncmVhdGVyKGRhdGEsIG5vZGUpKSB7Ci0gICAgICAgIHByZWQgPSBu
b2RlOwotICAgICAgICBub2RlID0gbm9kZS0+c2tpcChodCk7Ci0gICAgICB9Ci0gICAgICBmb3Vu
ZCA9ICFsZXNzKGRhdGEsIG5vZGUpOwotICAgIH0KLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
bm9kZSwgZm91bmQpOwotICB9Ci0KLSAgLy8gZmluZCBub2RlIGJ5IGZpcnN0IHN0ZXBwaW5nIHJp
Z2h0IHRoZW4gc3RlcHBpbmcgZG93bi4KLSAgLy8gV2Ugc3RpbGwga2VlcCB0aGlzIGZvciByZWZl
cmVuY2UgcHVycG9zZXMuCi0gIHN0ZDo6cGFpcjxOb2RlVHlwZSosIGludD4gZmluZE5vZGVSaWdo
dERvd24oY29uc3QgdmFsdWVfdHlwZSAmZGF0YSkgY29uc3QgewotICAgIE5vZGVUeXBlICpwcmVk
ID0gaGVhZF8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lKTsKLSAgICBOb2RlVHlwZSAq
bm9kZSA9IG51bGxwdHI7Ci0gICAgYXV0byB0b3AgPSBtYXhMYXllcigpOwotICAgIGludCBmb3Vu
ZCA9IDA7Ci0gICAgZm9yIChpbnQgbGF5ZXIgPSB0b3A7ICFmb3VuZCAmJiBsYXllciA+PSAwOyAt
LWxheWVyKSB7Ci0gICAgICBub2RlID0gcHJlZC0+c2tpcChsYXllcik7Ci0gICAgICB3aGlsZSAo
Z3JlYXRlcihkYXRhLCBub2RlKSkgewotICAgICAgICBwcmVkID0gbm9kZTsKLSAgICAgICAgbm9k
ZSA9IG5vZGUtPnNraXAobGF5ZXIpOwotICAgICAgfQotICAgICAgZm91bmQgPSAhbGVzcyhkYXRh
LCBub2RlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG5vZGUsIGZvdW5kKTsK
LSAgfQotCi0gIE5vZGVUeXBlKiBsb3dlcl9ib3VuZChjb25zdCB2YWx1ZV90eXBlICZkYXRhKSBj
b25zdCB7Ci0gICAgYXV0byBub2RlID0gZmluZE5vZGUoZGF0YSkuZmlyc3Q7Ci0gICAgd2hpbGUg
KG5vZGUgIT0gbnVsbHB0ciAmJiBub2RlLT5tYXJrZWRGb3JSZW1vdmFsKCkpIHsKLSAgICAgIG5v
ZGUgPSBub2RlLT5za2lwKDApOwotICAgIH0KLSAgICByZXR1cm4gbm9kZTsKLSAgfQotCi0gIHZv
aWQgZ3Jvd0hlaWdodChpbnQgaGVpZ2h0KSB7Ci0gICAgTm9kZVR5cGUqIG9sZEhlYWQgPSBoZWFk
Xy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpOwotICAgIGlmIChvbGRIZWFkLT5oZWln
aHQoKSA+PSBoZWlnaHQpIHsgIC8vIHNvbWVvbmUgZWxzZSBhbHJlYWR5IGRpZCB0aGlzCi0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgTm9kZVR5cGUqIG5ld0hlYWQgPQotICAgICAgTm9kZVR5
cGU6OmNyZWF0ZShyZWN5Y2xlcl8uYWxsb2MoKSwgaGVpZ2h0LCB2YWx1ZV90eXBlKCksIHRydWUp
OwotCi0gICAgeyAvLyBuZWVkIHRvIGd1YXJkIHRoZSBoZWFkIG5vZGUgaW4gY2FzZSBvdGhlcnMg
YXJlIGFkZGluZy9yZW1vdmluZwotICAgICAgLy8gbm9kZXMgbGlua2VkIHRvIHRoZSBoZWFkLgot
ICAgICAgU2NvcGVkTG9ja2VyIGcgPSBvbGRIZWFkLT5hY3F1aXJlR3VhcmQoKTsKLSAgICAgIG5l
d0hlYWQtPmNvcHlIZWFkKG9sZEhlYWQpOwotICAgICAgTm9kZVR5cGUqIGV4cGVjdGVkID0gb2xk
SGVhZDsKLSAgICAgIGlmICghaGVhZF8uY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoZXhwZWN0ZWQs
IG5ld0hlYWQsCi0gICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpIHsKLSAgICAg
ICAgLy8gaWYgc29tZW9uZSBoYXMgYWxyZWFkeSBkb25lIHRoZSBzd2FwLCBqdXN0IHJldHVybi4K
LSAgICAgICAgTm9kZVR5cGU6OmRlc3Ryb3kocmVjeWNsZXJfLmFsbG9jKCksIG5ld0hlYWQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBvbGRIZWFkLT5zZXRNYXJrZWRGb3JSZW1v
dmFsKCk7Ci0gICAgfQotICAgIHJlY3ljbGUob2xkSGVhZCk7Ci0gIH0KLQotICB2b2lkIHJlY3lj
bGUoTm9kZVR5cGUgKm5vZGUpIHsKLSAgICByZWN5Y2xlcl8uYWRkKG5vZGUpOwotICB9Ci0KLSAg
ZGV0YWlsOjpOb2RlUmVjeWNsZXI8Tm9kZVR5cGUsIE5vZGVBbGxvYz4gcmVjeWNsZXJfOwotICBz
dGQ6OmF0b21pYzxOb2RlVHlwZSo+IGhlYWRfOwotICBzdGQ6OmF0b21pYzxzaXplX3Q+IHNpemVf
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29tcCwgdHlwZW5hbWUgTm9k
ZUFsbG9jLCBpbnQgTUFYX0hFSUdIVD4KLWNsYXNzIENvbmN1cnJlbnRTa2lwTGlzdDxULCBDb21w
LCBOb2RlQWxsb2MsIE1BWF9IRUlHSFQ+OjpBY2Nlc3NvciB7Ci0gIHR5cGVkZWYgZGV0YWlsOjpT
a2lwTGlzdE5vZGU8VD4gTm9kZVR5cGU7Ci0gIHR5cGVkZWYgQ29uY3VycmVudFNraXBMaXN0PFQs
IENvbXAsIE5vZGVBbGxvYywgTUFYX0hFSUdIVD4gU2tpcExpc3RUeXBlOwotIHB1YmxpYzoKLSAg
dHlwZWRlZiBUIHZhbHVlX3R5cGU7Ci0gIHR5cGVkZWYgVCBrZXlfdHlwZTsKLSAgdHlwZWRlZiBU
JiByZWZlcmVuY2U7Ci0gIHR5cGVkZWYgVCogcG9pbnRlcjsKLSAgdHlwZWRlZiBjb25zdCBUJiBj
b25zdF9yZWZlcmVuY2U7Ci0gIHR5cGVkZWYgY29uc3QgVCogY29uc3RfcG9pbnRlcjsKLSAgdHlw
ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwotICB0eXBlZGVmIENvbXAga2V5X2NvbXBhcmU7Ci0gIHR5
cGVkZWYgQ29tcCB2YWx1ZV9jb21wYXJlOwotCi0gIHR5cGVkZWYgdHlwZW5hbWUgU2tpcExpc3RU
eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKLSAgdHlwZWRlZiB0eXBlbmFtZSBTa2lwTGlzdFR5cGU6
OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwotICB0eXBlZGVmIHR5cGVuYW1lIFNraXBM
aXN0VHlwZTo6U2tpcHBlciBTa2lwcGVyOwotCi0gIGV4cGxpY2l0IEFjY2Vzc29yKHN0ZDo6c2hh
cmVkX3B0cjxDb25jdXJyZW50U2tpcExpc3Q+IHNraXBfbGlzdCkKLSAgICA6IHNsSG9sZGVyXyhz
dGQ6Om1vdmUoc2tpcF9saXN0KSkKLSAgewotICAgIHNsXyA9IHNsSG9sZGVyXy5nZXQoKTsKLSAg
ICBEQ0hFQ0soc2xfICE9IG51bGxwdHIpOwotICAgIHNsXy0+cmVjeWNsZXJfLmFkZFJlZigpOwot
ICB9Ci0KLSAgLy8gVW5zYWZlIGluaXRpYWxpemVyOiB0aGUgY2FsbGVyIGFzc3VtZXMgdGhlIHJl
c3BvbnNpYmlsaXR5IHRvIGtlZXAKLSAgLy8gc2tpcF9saXN0IHZhbGlkIGR1cmluZyB0aGUgd2hv
bGUgbGlmZSBjeWNsZSBvZiB0aGUgQWNlc3Nvci4KLSAgZXhwbGljaXQgQWNjZXNzb3IoQ29uY3Vy
cmVudFNraXBMaXN0ICpza2lwX2xpc3QpIDogc2xfKHNraXBfbGlzdCkgewotICAgIERDSEVDSyhz
bF8gIT0gbnVsbHB0cik7Ci0gICAgc2xfLT5yZWN5Y2xlcl8uYWRkUmVmKCk7Ci0gIH0KLQotICBB
Y2Nlc3Nvcihjb25zdCBBY2Nlc3NvciAmYWNjZXNzb3IpIDoKLSAgICAgIHNsXyhhY2Nlc3Nvci5z
bF8pLAotICAgICAgc2xIb2xkZXJfKGFjY2Vzc29yLnNsSG9sZGVyXykgewotICAgIHNsXy0+cmVj
eWNsZXJfLmFkZFJlZigpOwotICB9Ci0KLSAgQWNjZXNzb3ImIG9wZXJhdG9yPShjb25zdCBBY2Nl
c3NvciAmYWNjZXNzb3IpIHsKLSAgICBpZiAodGhpcyAhPSAmYWNjZXNzb3IpIHsKLSAgICAgIHNs
SG9sZGVyXyA9IGFjY2Vzc29yLnNsSG9sZGVyXzsKLSAgICAgIHNsXy0+cmVjeWNsZXJfLnJlbGVh
c2VSZWYoKTsKLSAgICAgIHNsXyA9IGFjY2Vzc29yLnNsXzsKLSAgICAgIHNsXy0+cmVjeWNsZXJf
LmFkZFJlZigpOwotICAgIH0KLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB+QWNjZXNzb3Io
KSB7Ci0gICAgc2xfLT5yZWN5Y2xlcl8ucmVsZWFzZVJlZigpOwotICB9Ci0KLSAgYm9vbCBlbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIHNsXy0+c2l6ZSgpID09IDA7IH0KLSAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBzbF8tPnNpemUoKTsgfQotICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25z
dCB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdHlwZT46Om1heCgpOyB9Ci0KLSAg
Ly8gcmV0dXJucyBlbmQoKSBpZiB0aGUgdmFsdWUgaXMgbm90IGluIHRoZSBsaXN0LCBvdGhlcndp
c2UgcmV0dXJucyBhbgotICAvLyBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZGF0YSwgYW5kIGl0
J3MgZ3VhcmFudGVlZCB0aGF0IHRoZSBkYXRhIGlzIHZhbGlkCi0gIC8vIGFzIGZhciBhcyB0aGUg
QWNjZXNzb3IgaXMgaG9sZC4KLSAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSAmdmFsdWUp
IHsgcmV0dXJuIGl0ZXJhdG9yKHNsXy0+ZmluZCh2YWx1ZSkpOyB9Ci0gIGNvbnN0X2l0ZXJhdG9y
IGZpbmQoY29uc3Qga2V5X3R5cGUgJnZhbHVlKSBjb25zdCB7Ci0gICAgcmV0dXJuIGl0ZXJhdG9y
KHNsXy0+ZmluZCh2YWx1ZSkpOwotICB9Ci0gIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlw
ZSAmZGF0YSkgY29uc3QgeyByZXR1cm4gY29udGFpbnMoZGF0YSk7IH0KLQotICBpdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsKLSAgICBOb2RlVHlwZSogaGVhZCA9IHNsXy0+aGVhZF8ubG9hZChzdGQ6
Om1lbW9yeV9vcmRlcl9jb25zdW1lKTsKLSAgICByZXR1cm4gaXRlcmF0b3IoaGVhZC0+bmV4dCgp
KTsKLSAgfQotICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihudWxscHRy
KTsgfQotICBjb25zdF9pdGVyYXRvciBjYmVnaW4oKSBjb25zdCB7IHJldHVybiBiZWdpbigpOyB9
Ci0gIGNvbnN0X2l0ZXJhdG9yIGNlbmQoKSBjb25zdCB7IHJldHVybiBlbmQoKTsgfQotCi0gIHRl
bXBsYXRlPHR5cGVuYW1lIFUsCi0gICAgdHlwZW5hbWU9dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19jb252ZXJ0aWJsZTxVLCBUPjo6dmFsdWU+Ojp0eXBlPgotICBzdGQ6OnBhaXI8aXRl
cmF0b3IsIGJvb2w+IGluc2VydChVJiYgZGF0YSkgewotICAgIGF1dG8gcmV0ID0gc2xfLT5hZGRP
ckdldERhdGEoc3RkOjpmb3J3YXJkPFU+KGRhdGEpKTsKLSAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoaXRlcmF0b3IocmV0LmZpcnN0KSwgcmV0LnNlY29uZCk7Ci0gIH0KLSAgc2l6ZV90IGVyYXNl
KGNvbnN0IGtleV90eXBlICZkYXRhKSB7IHJldHVybiByZW1vdmUoZGF0YSk7IH0KLQotICBpdGVy
YXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSAmZGF0YSkgY29uc3QgewotICAgIHJldHVy
biBpdGVyYXRvcihzbF8tPmxvd2VyX2JvdW5kKGRhdGEpKTsKLSAgfQotCi0gIHNpemVfdCBoZWln
aHQoKSBjb25zdCB7IHJldHVybiBzbF8tPmhlaWdodCgpOyB9Ci0KLSAgLy8gZmlyc3QoKSByZXR1
cm5zIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNraXBsaXN0LCBvcgotICAv
LyBudWxscHRyIGlmIGVtcHR5LgotICAvLwotICAvLyBsYXN0KCkgcmV0dXJucyB0aGUgcG9pbnRl
ciB0byB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBza2lwbGlzdCwKLSAgLy8gbnVsbHB0ciBpZiBs
aXN0IGlzIGVtcHR5LgotICAvLwotICAvLyBOb3RlOiBBcyBjb25jdXJyZW50IHdyaXRpbmcgY2Fu
IGhhcHBlbiwgZmlyc3QoKSBpcyBub3QKLSAgLy8gICBndWFyYW50ZWVkIHRvIGJlIHRoZSBtaW5f
ZWxlbWVudCgpIGluIHRoZSBsaXN0LiBTaW1pbGFybHkKLSAgLy8gICBsYXN0KCkgaXMgbm90IGd1
YXJhbnRlZWQgdG8gYmUgdGhlIG1heF9lbGVtZW50KCksIGFuZCBib3RoIG9mIHRoZW0gY2FuCi0g
IC8vICAgYmUgaW52YWxpZCAoaS5lLiBudWxscHRyKSwgc28gd2UgbmFtZSB0aGVtIGRpZmZlcmVu
dGx5IGZyb20gZnJvbnQoKSBhbmQKLSAgLy8gICB0YWlsKCkgaGVyZS4KLSAgY29uc3Qga2V5X3R5
cGUgKmZpcnN0KCkgY29uc3QgeyByZXR1cm4gc2xfLT5maXJzdCgpOyB9Ci0gIGNvbnN0IGtleV90
eXBlICpsYXN0KCkgY29uc3QgeyByZXR1cm4gc2xfLT5sYXN0KCk7IH0KLQotICAvLyBUcnkgdG8g
cmVtb3ZlIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIHNraXAgbGlzdC4KLSAgLy8KLSAgLy8gUmV0
dXJucyB0cnVlIGlmIHdlIHJlbW92ZWQgaXQsIGZhbHNlIGlmIGVpdGhlciB0aGUgbGlzdCBpcyBl
bXB0eQotICAvLyBvciBhIHJhY2UgY29uZGl0aW9uIGhhcHBlbmVkIChpLmUuIHRoZSB1c2VkLXRv
LWJlIGxhc3QgZWxlbWVudAotICAvLyB3YXMgYWxyZWFkeSByZW1vdmVkIGJ5IGFub3RoZXIgdGhy
ZWFkKS4KLSAgYm9vbCBwb3BfYmFjaygpIHsKLSAgICBhdXRvIGxhc3QgPSBzbF8tPmxhc3QoKTsK
LSAgICByZXR1cm4gbGFzdCA/IHNsXy0+cmVtb3ZlKCpsYXN0KSA6IGZhbHNlOwotICB9Ci0KLSAg
c3RkOjpwYWlyPGtleV90eXBlKiwgYm9vbD4gYWRkT3JHZXREYXRhKGNvbnN0IGtleV90eXBlICZk
YXRhKSB7Ci0gICAgYXV0byByZXQgPSBzbF8tPmFkZE9yR2V0RGF0YShkYXRhKTsKLSAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIoJnJldC5maXJzdC0+ZGF0YSgpLCByZXQuc2Vjb25kKTsKLSAgfQot
Ci0gIFNraXBMaXN0VHlwZSogc2tpcGxpc3QoKSBjb25zdCB7IHJldHVybiBzbF87IH0KLQotICAv
LyBsZWdhY3kgaW50ZXJmYWNlcwotICAvLyBUT0RPOih4bGl1KSByZW1vdmUgdGhlc2UuCi0gIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgbm9kZSBpcyBhZGRlZCBzdWNjZXNzZnVsbHksIGZhbHNlIGlm
IG5vdCwgaS5lLiB0aGUKLSAgLy8gbm9kZSB3aXRoIHRoZSBzYW1lIGtleSBhbHJlYWR5IGV4aXN0
ZWQgaW4gdGhlIGxpc3QuCi0gIGJvb2wgY29udGFpbnMoY29uc3Qga2V5X3R5cGUgJmRhdGEpIGNv
bnN0IHsgcmV0dXJuIHNsXy0+ZmluZChkYXRhKTsgfQotICBib29sIGFkZChjb25zdCBrZXlfdHlw
ZSAmZGF0YSkgeyByZXR1cm4gc2xfLT5hZGRPckdldERhdGEoZGF0YSkuc2Vjb25kOyB9Ci0gIGJv
b2wgcmVtb3ZlKGNvbnN0IGtleV90eXBlICZkYXRhKSB7IHJldHVybiBzbF8tPnJlbW92ZShkYXRh
KTsgfQotCi0gcHJpdmF0ZToKLSAgU2tpcExpc3RUeXBlICpzbF87Ci0gIHN0ZDo6c2hhcmVkX3B0
cjxTa2lwTGlzdFR5cGU+IHNsSG9sZGVyXzsKLX07Ci0KLS8vIGltcGxlbWVudHMgZm9yd2FyZCBp
dGVyYXRvciBjb25jZXB0LgotdGVtcGxhdGU8dHlwZW5hbWUgVmFsVCwgdHlwZW5hbWUgTm9kZVQ+
Ci1jbGFzcyBkZXRhaWw6OmNzbF9pdGVyYXRvciA6Ci0gIHB1YmxpYyBib29zdDo6aXRlcmF0b3Jf
ZmFjYWRlPGNzbF9pdGVyYXRvcjxWYWxULCBOb2RlVD4sCi0gICAgVmFsVCwgYm9vc3Q6OmZvcndh
cmRfdHJhdmVyc2FsX3RhZz4gewotIHB1YmxpYzoKLSAgdHlwZWRlZiBWYWxUIHZhbHVlX3R5cGU7
Ci0gIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwotICB0eXBlZGVmIHZhbHVlX3R5cGUq
IHBvaW50ZXI7Ci0gIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKLQotICBleHBs
aWNpdCBjc2xfaXRlcmF0b3IoTm9kZVQqIG5vZGUgPSBudWxscHRyKSA6IG5vZGVfKG5vZGUpIHt9
Ci0KLSAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJWYWwsIHR5cGVuYW1lIE90aGVyTm9kZT4KLSAg
Y3NsX2l0ZXJhdG9yKGNvbnN0IGNzbF9pdGVyYXRvcjxPdGhlclZhbCwgT3RoZXJOb2RlPiAmb3Ro
ZXIsCi0gICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnZlcnRpYmxlPE90
aGVyVmFsLCBWYWxUPjo6dmFsdWU+Ojp0eXBlKgotICAgICAgPSAwKSA6IG5vZGVfKG90aGVyLm5v
ZGVfKSB7fQotCi0gIHNpemVfdCBub2RlU2l6ZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gbm9kZV8g
PT0gbnVsbHB0ciA/IDAgOgotICAgICAgbm9kZV8tPmhlaWdodCgpICogc2l6ZW9mKE5vZGVUKikg
KyBzaXplb2YoKnRoaXMpOwotICB9Ci0KLSAgYm9vbCBnb29kKCkgY29uc3QgeyByZXR1cm4gbm9k
ZV8gIT0gbnVsbHB0cjsgfQotCi0gcHJpdmF0ZToKLSAgZnJpZW5kIGNsYXNzIGJvb3N0OjppdGVy
YXRvcl9jb3JlX2FjY2VzczsKLSAgdGVtcGxhdGU8Y2xhc3MsY2xhc3M+IGZyaWVuZCBjbGFzcyBj
c2xfaXRlcmF0b3I7Ci0KLSAgdm9pZCBpbmNyZW1lbnQoKSB7IG5vZGVfID0gbm9kZV8tPm5leHQo
KTsgfQotICBib29sIGVxdWFsKGNvbnN0IGNzbF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIG5vZGVfID09IG90aGVyLm5vZGVfOyB9Ci0gIHZhbHVlX3R5cGUmIGRlcmVmZXJlbmNlKCkg
Y29uc3QgeyByZXR1cm4gbm9kZV8tPmRhdGEoKTsgfQotCi0gIE5vZGVUKiBub2RlXzsKLX07Ci0K
LS8vIFNraXBwZXIgaW50ZXJmYWNlCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb21w
LCB0eXBlbmFtZSBOb2RlQWxsb2MsIGludCBNQVhfSEVJR0hUPgotY2xhc3MgQ29uY3VycmVudFNr
aXBMaXN0PFQsIENvbXAsIE5vZGVBbGxvYywgTUFYX0hFSUdIVD46OlNraXBwZXIgewotICB0eXBl
ZGVmIGRldGFpbDo6U2tpcExpc3ROb2RlPFQ+IE5vZGVUeXBlOwotICB0eXBlZGVmIENvbmN1cnJl
bnRTa2lwTGlzdDxULCBDb21wLCBOb2RlQWxsb2MsIE1BWF9IRUlHSFQ+IFNraXBMaXN0VHlwZTsK
LSAgdHlwZWRlZiB0eXBlbmFtZSBTa2lwTGlzdFR5cGU6OkFjY2Vzc29yIEFjY2Vzc29yOwotCi0g
cHVibGljOgotICB0eXBlZGVmIFQgIHZhbHVlX3R5cGU7Ci0gIHR5cGVkZWYgVCYgcmVmZXJlbmNl
OwotICB0eXBlZGVmIFQqIHBvaW50ZXI7Ci0gIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsKLQotICBTa2lwcGVyKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxTa2lwTGlzdFR5cGU+JiBz
a2lwTGlzdCkgOgotICAgIGFjY2Vzc29yXyhza2lwTGlzdCkgewotICAgIGluaXQoKTsKLSAgfQot
Ci0gIFNraXBwZXIoY29uc3QgQWNjZXNzb3ImIGFjY2Vzc29yKSA6IGFjY2Vzc29yXyhhY2Nlc3Nv
cikgewotICAgIGluaXQoKTsKLSAgfQotCi0gIHZvaWQgaW5pdCgpIHsKLSAgICAvLyBuZWVkIHRv
IGNhY2hlIHRoZSBoZWFkIG5vZGUKLSAgICBOb2RlVHlwZSogaGVhZF9ub2RlID0gaGVhZCgpOwot
ICAgIGhlYWRIZWlnaHRfID0gaGVhZF9ub2RlLT5oZWlnaHQoKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGhlYWRIZWlnaHRfOyArK2kpIHsKLSAgICAgIHByZWRzX1tpXSA9IGhlYWRfbm9kZTsK
LSAgICAgIHN1Y2NzX1tpXSA9IGhlYWRfbm9kZS0+c2tpcChpKTsKLSAgICB9Ci0gICAgaW50IG1h
eF9sYXllciA9IG1heExheWVyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhfbGF5ZXI7
ICsraSkgewotICAgICAgaGludHNfW2ldID0gdWludDhfdChpICsgMSk7Ci0gICAgfQotICAgIGhp
bnRzX1ttYXhfbGF5ZXJdID0gbWF4X2xheWVyOwotICB9Ci0KLSAgLy8gYWR2YW5jZSB0byB0aGUg
bmV4dCBub2RlIGluIHRoZSBsaXN0LgotICBTa2lwcGVyJiBvcGVyYXRvciArKygpIHsKLSAgICBw
cmVkc19bMF0gPSBzdWNjc19bMF07Ci0gICAgc3VjY3NfWzBdID0gcHJlZHNfWzBdLT5za2lwKDAp
OwotICAgIGludCBoZWlnaHQgPSBjdXJIZWlnaHQoKTsKLSAgICBmb3IgKGludCBpID0gMTsgaSA8
IGhlaWdodCAmJiBwcmVkc19bMF0gPT0gc3VjY3NfW2ldOyArK2kpIHsKLSAgICAgIHByZWRzX1tp
XSA9IHN1Y2NzX1tpXTsKLSAgICAgIHN1Y2NzX1tpXSA9IHByZWRzX1tpXS0+c2tpcChpKTsKLSAg
ICB9Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgYm9vbCBnb29kKCkgY29uc3QgeyByZXR1
cm4gc3VjY3NfWzBdICE9IG51bGxwdHI7IH0KLQotICBpbnQgbWF4TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBoZWFkSGVpZ2h0XyAtIDE7IH0KLQotICBpbnQgY3VySGVpZ2h0KCkgY29uc3QgewotICAg
IC8vIG5lZWQgdG8gY2FwIHRoZSBoZWlnaHQgdG8gdGhlIGNhY2hlZCBoZWFkIGhlaWdodCwgYXMg
dGhlIGN1cnJlbnQgbm9kZQotICAgIC8vIG1pZ2h0IGJlIHNvbWUgbmV3bHkgaW5zZXJ0ZWQgbm9k
ZSBhbmQgYWxzbyBkdXJpbmcgdGhlIHRpbWUgcGVyaW9kIHRoZQotICAgIC8vIGhlYWQgaGVpZ2h0
IG1heSBoYXZlIGdyb3duLgotICAgIHJldHVybiBzdWNjc19bMF0gPyBzdGQ6Om1pbihoZWFkSGVp
Z2h0Xywgc3VjY3NfWzBdLT5oZWlnaHQoKSkgOiAwOwotICB9Ci0KLSAgY29uc3QgdmFsdWVfdHlw
ZSAmZGF0YSgpIGNvbnN0IHsKLSAgICBEQ0hFQ0soc3VjY3NfWzBdICE9IG51bGxwdHIpOwotICAg
IHJldHVybiBzdWNjc19bMF0tPmRhdGEoKTsKLSAgfQotCi0gIHZhbHVlX3R5cGUgJm9wZXJhdG9y
ICooKSBjb25zdCB7Ci0gICAgRENIRUNLKHN1Y2NzX1swXSAhPSBudWxscHRyKTsKLSAgICByZXR1
cm4gc3VjY3NfWzBdLT5kYXRhKCk7Ci0gIH0KLQotICB2YWx1ZV90eXBlICpvcGVyYXRvci0+KCkg
ewotICAgIERDSEVDSyhzdWNjc19bMF0gIT0gbnVsbHB0cik7Ci0gICAgcmV0dXJuICZzdWNjc19b
MF0tPmRhdGEoKTsKLSAgfQotCi0gIC8qCi0gICAqIFNraXAgdG8gdGhlIHBvc2l0aW9uIHdob3Nl
IGRhdGEgaXMgbm8gbGVzcyB0aGFuIHRoZSBwYXJhbWV0ZXIuCi0gICAqIChJLmUuIHRoZSBsb3dl
cl9ib3VuZCkuCi0gICAqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0YSBpcyBmb3VuZCwg
ZmFsc2Ugb3RoZXJ3aXNlLgotICAgKi8KLSAgYm9vbCB0byhjb25zdCB2YWx1ZV90eXBlICZkYXRh
KSB7Ci0gICAgaW50IGxheWVyID0gY3VySGVpZ2h0KCkgLSAxOwotICAgIGlmIChsYXllciA8IDAp
IHJldHVybiBmYWxzZTsgICAvLyByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGxpc3QKLQotICAgIGlu
dCBseXIgPSBoaW50c19bbGF5ZXJdOwotICAgIGludCBtYXhfbGF5ZXIgPSBtYXhMYXllcigpOwot
ICAgIHdoaWxlIChTa2lwTGlzdFR5cGU6OmdyZWF0ZXIoZGF0YSwgc3VjY3NfW2x5cl0pICYmIGx5
ciA8IG1heF9sYXllcikgewotICAgICAgKytseXI7Ci0gICAgfQotICAgIGhpbnRzX1tsYXllcl0g
PSBseXI7ICAvLyB1cGRhdGUgdGhlIGhpbnQKLQotICAgIGludCBmb3VuZExheWVyID0gU2tpcExp
c3RUeXBlOjoKLSAgICAgIGZpbmRJbnNlcnRpb25Qb2ludChwcmVkc19bbHlyXSwgbHlyLCBkYXRh
LCBwcmVkc18sIHN1Y2NzXyk7Ci0gICAgaWYgKGZvdW5kTGF5ZXIgPCAwKSByZXR1cm4gZmFsc2U7
Ci0KLSAgICBEQ0hFQ0soc3VjY3NfWzBdICE9IG51bGxwdHIpIDw8ICJseXI9IiA8PCBseXIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICI7IG1heF9sYXllcj0iIDw8IG1heF9s
YXllcjsKLSAgICByZXR1cm4gIXN1Y2NzX1swXS0+bWFya2VkRm9yUmVtb3ZhbCgpOwotICB9Ci0K
LSBwcml2YXRlOgotICBOb2RlVHlwZSogaGVhZCgpIGNvbnN0IHsKLSAgICByZXR1cm4gYWNjZXNz
b3JfLnNraXBsaXN0KCktPmhlYWRfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfY29uc3VtZSk7Ci0g
IH0KLQotICBBY2Nlc3NvciBhY2Nlc3Nvcl87Ci0gIGludCBoZWFkSGVpZ2h0XzsKLSAgTm9kZVR5
cGUgKnN1Y2NzX1tNQVhfSEVJR0hUXSwgKnByZWRzX1tNQVhfSEVJR0hUXTsKLSAgdWludDhfdCBo
aW50c19bTUFYX0hFSUdIVF07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBmb2xseQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvQ29udi5jcHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9Db252LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFmMGY5MGZiZWNkNTE3NTRjNmRjZjliMDVhODJjYTJk
MWQ5YWE0YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9Db252LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDc2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ss
IEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24g
Mi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu
c2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3
IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhP
VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
ciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
Z292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vu
c2UuCi0gKi8KLSNpbmNsdWRlIDxmb2xseS9Db252Lmg+Ci0jaW5jbHVkZSA8YXJyYXk+Ci0KLW5h
bWVzcGFjZSBmb2xseSB7Ci1uYW1lc3BhY2UgZGV0YWlsIHsKLQotbmFtZXNwYWNlIHsKLQotLyoq
Ci0gKiBGaW5kcyB0aGUgZmlyc3Qgbm9uLWRpZ2l0IGluIGEgc3RyaW5nLiBUaGUgbnVtYmVyIG9m
IGRpZ2l0cwotICogc2VhcmNoZWQgZGVwZW5kcyBvbiB0aGUgcHJlY2lzaW9uIG9mIHRoZSBUZ3Qg
aW50ZWdyYWwuIEFzc3VtZXMgdGhlCi0gKiBzdHJpbmcgc3RhcnRzIHdpdGggTk8gd2hpdGVzcGFj
ZSBhbmQgTk8gc2lnbi4KLSAqCi0gKiBUaGUgc2VtYW50aWNzIG9mIHRoZSByb3V0aW5lIGlzOgot
ICogICBmb3IgKDs7ICsrYikgewotICogICAgIGlmIChiID49IGUgfHwgIWlzZGlnaXQoKmIpKSBy
ZXR1cm4gYjsKLSAqICAgfQotICoKLSAqICBDb21wbGV0ZSB1bnJvbGxpbmcgbWFya3MgYm90dG9t
LWxpbmUgKGkuZS4gZW50aXJlIGNvbnZlcnNpb24pCi0gKiAgaW1wcm92ZW1lbnRzIG9mIDIwJS4K
LSAqLwotaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRGaXJzdE5vbkRpZ2l0KGNvbnN0IGNoYXIqIGIs
IGNvbnN0IGNoYXIqIGUpIHsKLSAgZm9yICg7IGIgPCBlOyArK2IpIHsKLSAgICBhdXRvIGNvbnN0
IGMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKmIpIC0gJzAnOwotICAgIGlmIChjID49IDEwKSB7
Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGI7Ci19Ci0KLS8vIE1heGltdW0g
dmFsdWUgb2YgbnVtYmVyIHdoZW4gcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcKLXRlbXBsYXRlIDxj
bGFzcyBUPgotc3RydWN0IE1heFN0cmluZyB7Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB2
YWx1ZTsKLX07Ci0KLXRlbXBsYXRlIDw+IGNvbnN0IGNoYXIgKmNvbnN0IE1heFN0cmluZzx1aW50
OF90Pjo6dmFsdWUgPSAiMjU1IjsKLXRlbXBsYXRlIDw+IGNvbnN0IGNoYXIgKmNvbnN0IE1heFN0
cmluZzx1aW50MTZfdD46OnZhbHVlID0gIjY1NTM1IjsKLXRlbXBsYXRlIDw+IGNvbnN0IGNoYXIg
KmNvbnN0IE1heFN0cmluZzx1aW50MzJfdD46OnZhbHVlID0gIjQyOTQ5NjcyOTUiOwotI2lmIF9f
U0laRU9GX0xPTkdfXyA9PSA0Ci10ZW1wbGF0ZSA8PiBjb25zdCBjaGFyICpjb25zdCBNYXhTdHJp
bmc8dW5zaWduZWQgbG9uZz46OnZhbHVlID0KLSAgIjQyOTQ5NjcyOTUiOwotI2Vsc2UKLXRlbXBs
YXRlIDw+IGNvbnN0IGNoYXIgKmNvbnN0IE1heFN0cmluZzx1bnNpZ25lZCBsb25nPjo6dmFsdWUg
PQotICAiMTg0NDY3NDQwNzM3MDk1NTE2MTUiOwotI2VuZGlmCi1zdGF0aWNfYXNzZXJ0KHNpemVv
Zih1bnNpZ25lZCBsb25nKSA+PSA0LAotICAgICAgICAgICAgICAiV3JvbmcgdmFsdWUgZm9yIE1h
eFN0cmluZzx1bnNpZ25lZCBsb25nPjo6dmFsdWUsIgotICAgICAgICAgICAgICAiIHBsZWFzZSB1
cGRhdGUuIik7Ci10ZW1wbGF0ZSA8PiBjb25zdCBjaGFyICpjb25zdCBNYXhTdHJpbmc8dW5zaWdu
ZWQgbG9uZyBsb25nPjo6dmFsdWUgPQotICAiMTg0NDY3NDQwNzM3MDk1NTE2MTUiOwotc3RhdGlj
X2Fzc2VydChzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSA+PSA4LAotICAgICAgICAgICAgICAi
V3JvbmcgdmFsdWUgZm9yIE1heFN0cmluZzx1bnNpZ25lZCBsb25nIGxvbmc+Ojp2YWx1ZSIKLSAg
ICAgICAgICAgICAgIiwgcGxlYXNlIHVwZGF0ZS4iKTsKLQotI2lmIEZPTExZX0hBVkVfSU5UMTI4
X1QKLXRlbXBsYXRlIDw+IGNvbnN0IGNoYXIgKmNvbnN0IE1heFN0cmluZzxfX3VpbnQxMjhfdD46
OnZhbHVlID0KLSAgIjM0MDI4MjM2NjkyMDkzODQ2MzQ2MzM3NDYwNzQzMTc2ODIxMTQ1NSI7Ci0j
ZW5kaWYKLQotLyoKLSAqIExvb2t1cCB0YWJsZXMgdGhhdCBjb252ZXJ0cyBmcm9tIGEgZGVjaW1h
bCBjaGFyYWN0ZXIgdmFsdWUgdG8gYW4gaW50ZWdyYWwKLSAqIGJpbmFyeSB2YWx1ZSwgc2hpZnRl
ZCBieSBhIGRlY2ltYWwgInNoaWZ0IiBtdWx0aXBsaWVyLgotICogRm9yIGFsbCBjaGFyYWN0ZXIg
dmFsdWVzIGluIHRoZSByYW5nZSAnMCcuLic5JywgdGhlIHRhYmxlIGF0IHRob3NlCi0gKiBpbmRl
eCBsb2NhdGlvbnMgcmV0dXJucyB0aGUgYWN0dWFsIGRlY2ltYWwgdmFsdWUgc2hpZnRlZCBieSB0
aGUgbXVsdGlwbGllci4KLSAqIEZvciBhbGwgb3RoZXIgdmFsdWVzLCB0aGUgbG9va3VwIHRhYmxl
IHJldHVybnMgYW4gaW52YWxpZCBPT1IgdmFsdWUuCi0gKi8KLS8vIE91dC1vZi1yYW5nZSBmbGFn
IHZhbHVlLCBsYXJnZXIgdGhhbiB0aGUgbGFyZ2VzdCB2YWx1ZSB0aGF0IGNhbiBmaXQgaW4KLS8v
IGZvdXIgZGVjaW1hbCBieXRlcyAoOTk5OSksIGJ1dCBmb3VyIG9mIHRoZXNlIGFkZGVkIHVwIHRv
Z2V0aGVyIHNob3VsZAotLy8gc3RpbGwgbm90IG92ZXJmbG93IHVpbnQxNl90LgotY29uc3RleHBy
IGludDMyX3QgT09SID0gMTAwMDA7Ci0KLUZPTExZX0FMSUdORUQoMTYpIGNvbnN0ZXhwciB1aW50
MTZfdCBzaGlmdDFbXSA9IHsKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBP
T1IsIE9PUiwgT09SLCAgLy8gMC05Ci0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9P
UiwgT09SLCBPT1IsIE9PUiwgIC8vICAxMAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09S
LCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAgMjAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gIDMwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwg
T09SLCBPT1IsIE9PUiwgT09SLCAwLCAgICAgICAgIC8vICA0MAotICAxLCAyLCAzLCA0LCA1LCA2
LCA3LCA4LCA5LCBPT1IsIE9PUiwKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09S
LCBPT1IsIE9PUiwgT09SLCAgLy8gIDYwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vICA3MAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwg
T09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAgODAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBP
T1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gIDkwCi0gIE9PUiwgT09SLCBPT1IsIE9P
UiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vIDEwMAotICBPT1IsIE9PUiwgT09S
LCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAxMTAKLSAgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gMTIwCi0gIE9PUiwg
T09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vIDEzMAotICBP
T1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAxNDAK
LSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8g
MTUwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwg
IC8vIDE2MAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBP
T1IsICAvLyAxNzAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9P
UiwgT09SLCAgLy8gMTgwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09S
LCBPT1IsIE9PUiwgIC8vIDE5MAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IsICAvLyAyMDAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwg
T09SLCBPT1IsIE9PUiwgT09SLCAgLy8gMjEwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBP
T1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vIDIyMAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9P
UiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAyMzAKLSAgT09SLCBPT1IsIE9PUiwgT09S
LCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gMjQwCi0gIE9PUiwgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IgICAgICAgICAgICAgICAgICAgICAgIC8vIDI1MAotfTsKLQotRk9MTFlf
QUxJR05FRCgxNikgY29uc3RleHByIHVpbnQxNl90IHNoaWZ0MTBbXSA9IHsKLSAgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gMC05Ci0gIE9PUiwg
T09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vICAxMAotICBP
T1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAgMjAK
LSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8g
IDMwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAwLCAgICAgICAg
IC8vICA0MAotICAxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCwgODAsIDkwLCBPT1IsIE9PUiwK
LSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8g
IDYwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwg
IC8vICA3MAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBP
T1IsICAvLyAgODAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9P
UiwgT09SLCAgLy8gIDkwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09S
LCBPT1IsIE9PUiwgIC8vIDEwMAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IsICAvLyAxMTAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwg
T09SLCBPT1IsIE9PUiwgT09SLCAgLy8gMTIwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBP
T1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vIDEzMAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9P
UiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAxNDAKLSAgT09SLCBPT1IsIE9PUiwgT09S
LCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gMTUwCi0gIE9PUiwgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vIDE2MAotICBPT1IsIE9PUiwg
T09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAxNzAKLSAgT09SLCBP
T1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gMTgwCi0gIE9P
UiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vIDE5MAot
ICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAy
MDAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAg
Ly8gMjEwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9P
UiwgIC8vIDIyMAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09S
LCBPT1IsICAvLyAyMzAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1Is
IE9PUiwgT09SLCAgLy8gMjQwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IgICAgICAg
ICAgICAgICAgICAgICAgIC8vIDI1MAotfTsKLQotRk9MTFlfQUxJR05FRCgxNikgY29uc3RleHBy
IHVpbnQxNl90IHNoaWZ0MTAwW10gPSB7Ci0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vIDAtOQotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwg
T09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAgMTAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBP
T1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gIDIwCi0gIE9PUiwgT09SLCBPT1IsIE9P
UiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vICAzMAotICBPT1IsIE9PUiwgT09S
LCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgMCwgICAgICAgICAvLyAgNDAKLSAgMTAwLCAyMDAs
IDMwMCwgNDAwLCA1MDAsIDYwMCwgNzAwLCA4MDAsIDkwMCwgT09SLCBPT1IsCi0gIE9PUiwgT09S
LCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vICA2MAotICBPT1Is
IE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAgNzAKLSAg
T09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gIDgw
Ci0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8v
ICA5MAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1Is
ICAvLyAxMDAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwg
T09SLCAgLy8gMTEwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBP
T1IsIE9PUiwgIC8vIDEyMAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9P
UiwgT09SLCBPT1IsICAvLyAxMzAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09S
LCBPT1IsIE9PUiwgT09SLCAgLy8gMTQwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vIDE1MAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwg
T09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAxNjAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBP
T1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gMTcwCi0gIE9PUiwgT09SLCBPT1IsIE9P
UiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vIDE4MAotICBPT1IsIE9PUiwgT09S
LCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAxOTAKLSAgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gMjAwCi0gIE9PUiwg
T09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vIDIxMAotICBP
T1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAyMjAK
LSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8g
MjMwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwg
IC8vIDI0MAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SICAgICAgICAgICAgICAgICAg
ICAgICAvLyAyNTAKLX07Ci0KLUZPTExZX0FMSUdORUQoMTYpIGNvbnN0ZXhwciB1aW50MTZfdCBz
aGlmdDEwMDBbXSA9IHsKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1Is
IE9PUiwgT09SLCAgLy8gMC05Ci0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwg
T09SLCBPT1IsIE9PUiwgIC8vICAxMAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBP
T1IsIE9PUiwgT09SLCBPT1IsICAvLyAgMjAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9P
UiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gIDMwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09S
LCBPT1IsIE9PUiwgT09SLCAwLCAgICAgICAgIC8vICA0MAotICAxMDAwLCAyMDAwLCAzMDAwLCA0
MDAwLCA1MDAwLCA2MDAwLCA3MDAwLCA4MDAwLCA5MDAwLCBPT1IsIE9PUiwKLSAgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gIDYwCi0gIE9PUiwg
T09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vICA3MAotICBP
T1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAgODAK
LSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8g
IDkwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwg
IC8vIDEwMAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBP
T1IsICAvLyAxMTAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9P
UiwgT09SLCAgLy8gMTIwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09S
LCBPT1IsIE9PUiwgIC8vIDEzMAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IsICAvLyAxNDAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwg
T09SLCBPT1IsIE9PUiwgT09SLCAgLy8gMTUwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBP
T1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vIDE2MAotICBPT1IsIE9PUiwgT09SLCBPT1IsIE9P
UiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAxNzAKLSAgT09SLCBPT1IsIE9PUiwgT09S
LCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gMTgwCi0gIE9PUiwgT09SLCBPT1Is
IE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vIDE5MAotICBPT1IsIE9PUiwg
T09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAyMDAKLSAgT09SLCBP
T1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAgLy8gMjEwCi0gIE9P
UiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgIC8vIDIyMAot
ICBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsICAvLyAy
MzAKLSAgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCAg
Ly8gMjQwCi0gIE9PUiwgT09SLCBPT1IsIE9PUiwgT09SLCBPT1IgICAgICAgICAgICAgICAgICAg
ICAgIC8vIDI1MAotfTsKLQotc3RydWN0IEVycm9yU3RyaW5nIHsKLSAgY29uc3QgY2hhciogc3Ry
aW5nOwotICBib29sIHF1b3RlOwotfTsKLQotLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBDb252
ZXJzaW9uQ29kZSBpbiBDb252LmgKLWNvbnN0ZXhwciBjb25zdCBzdGQ6OmFycmF5PAotICAgIEVy
cm9yU3RyaW5nLAotICAgIHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihDb252ZXJzaW9uQ29kZTo6
TlVNX0VSUk9SX0NPREVTKT4KLSAgICBrRXJyb3JTdHJpbmdze3sKLSAgICAgICAgeyJTdWNjZXNz
IiwgdHJ1ZX0sCi0gICAgICAgIHsiRW1wdHkgaW5wdXQgc3RyaW5nIiwgdHJ1ZX0sCi0gICAgICAg
IHsiTm8gZGlnaXRzIGZvdW5kIGluIGlucHV0IHN0cmluZyIsIHRydWV9LAotICAgICAgICB7Iklu
dGVnZXIgb3ZlcmZsb3cgd2hlbiBwYXJzaW5nIGJvb2wgKG11c3QgYmUgMCBvciAxKSIsIHRydWV9
LAotICAgICAgICB7IkludmFsaWQgdmFsdWUgZm9yIGJvb2wiLCB0cnVlfSwKLSAgICAgICAgeyJO
b24tZGlnaXQgY2hhcmFjdGVyIGZvdW5kIiwgdHJ1ZX0sCi0gICAgICAgIHsiSW52YWxpZCBsZWFk
aW5nIGNoYXJhY3RlciIsIHRydWV9LAotICAgICAgICB7Ik92ZXJmbG93IGR1cmluZyBjb252ZXJz
aW9uIiwgdHJ1ZX0sCi0gICAgICAgIHsiTmVnYXRpdmUgb3ZlcmZsb3cgZHVyaW5nIGNvbnZlcnNp
b24iLCB0cnVlfSwKLSAgICAgICAgeyJVbmFibGUgdG8gY29udmVydCBzdHJpbmcgdG8gZmxvYXRp
bmcgcG9pbnQgdmFsdWUiLCB0cnVlfSwKLSAgICAgICAgeyJOb24td2hpdGVzcGFjZSBjaGFyYWN0
ZXIgZm91bmQgYWZ0ZXIgZW5kIG9mIGNvbnZlcnNpb24iLCB0cnVlfSwKLSAgICAgICAgeyJPdmVy
ZmxvdyBkdXJpbmcgYXJpdGhtZXRpYyBjb252ZXJzaW9uIiwgZmFsc2V9LAotICAgICAgICB7Ik5l
Z2F0aXZlIG92ZXJmbG93IGR1cmluZyBhcml0aG1ldGljIGNvbnZlcnNpb24iLCBmYWxzZX0sCi0g
ICAgICAgIHsiTG9zcyBvZiBwcmVjaXNpb24gZHVyaW5nIGFyaXRobWV0aWMgY29udmVyc2lvbiIs
IGZhbHNlfSwKLSAgICB9fTsKLQotLy8gQ2hlY2sgaWYgQVNDSUkgaXMgcmVhbGx5IEFTQ0lJCi11
c2luZyBJc0FzY2lpID0gc3RkOjoKLSAgICBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAnQScgPT0g
NjUgJiYgJ1onID09IDkwICYmICdhJyA9PSA5NyAmJiAneicgPT0gMTIyPjsKLQotLy8gVGhlIGNv
ZGUgaW4gdGhpcyBmaWxlIHRoYXQgdXNlcyB0b2xvd2VyKCkgcmVhbGx5IG9ubHkgY2FyZXMgYWJv
dXQKLS8vIDctYml0IEFTQ0lJIGNoYXJhY3RlcnMsIHNvIHdlIGNhbiB0YWtlIGEgbmljZSBzaG9y
dGN1dCBoZXJlLgotaW5saW5lIGNoYXIgdG9sb3dlcl9hc2NpaShjaGFyIGluKSB7Ci0gIHJldHVy
biBJc0FzY2lpOjp2YWx1ZSA/IGluIHwgMHgyMCA6IGNoYXIoc3RkOjp0b2xvd2VyKGluKSk7Ci19
Ci0KLWlubGluZSBib29sIGJvb2xfc3RyX2NtcChjb25zdCBjaGFyKiogYiwgc2l6ZV90IGxlbiwg
Y29uc3QgY2hhciogdmFsdWUpIHsKLSAgLy8gQ2FuJ3QgdXNlIHN0cm5jYXNlY21wLCBzaW5jZSB3
ZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmdWxsIHZhbHVlIG1hdGNoZXMKLSAgY29uc3QgY2hh
ciogcCA9ICpiOwotICBjb25zdCBjaGFyKiBlID0gKmIgKyBsZW47Ci0gIGNvbnN0IGNoYXIqIHYg
PSB2YWx1ZTsKLSAgd2hpbGUgKCp2ICE9ICdcMCcpIHsKLSAgICBpZiAocCA9PSBlIHx8IHRvbG93
ZXJfYXNjaWkoKnApICE9ICp2KSB7IC8vIHZhbHVlIGlzIGFscmVhZHkgbG93ZXJjYXNlCi0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgICsrcDsKLSAgICArK3Y7Ci0gIH0KLQotICAqYiA9
IHA7Ci0gIHJldHVybiB0cnVlOwotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotRXhw
ZWN0ZWQ8Ym9vbCwgQ29udmVyc2lvbkNvZGU+IHN0cl90b19ib29sKFN0cmluZ1BpZWNlKiBzcmMp
IG5vZXhjZXB0IHsKLSAgYXV0byBiID0gc3JjLT5iZWdpbigpLCBlID0gc3JjLT5lbmQoKTsKLSAg
Zm9yICg7OyArK2IpIHsKLSAgICBpZiAoYiA+PSBlKSB7Ci0gICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoQ29udmVyc2lvbkNvZGU6OkVNUFRZX0lOUFVUX1NUUklORyk7Ci0gICAgfQotICAgIGlm
ICghc3RkOjppc3NwYWNlKCpiKSkgewotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgYm9v
bCByZXN1bHQ7Ci0gIHNpemVfdCBsZW4gPSBzaXplX3QoZSAtIGIpOwotICBzd2l0Y2ggKCpiKSB7
Ci0gICAgY2FzZSAnMCc6Ci0gICAgY2FzZSAnMSc6IHsKLSAgICAgIHJlc3VsdCA9IGZhbHNlOwot
ICAgICAgZm9yICg7IGIgPCBlICYmIGlzZGlnaXQoKmIpOyArK2IpIHsKLSAgICAgICAgaWYgKHJl
c3VsdCB8fCAoKmIgIT0gJzAnICYmICpiICE9ICcxJykpIHsKLSAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQ29udmVyc2lvbkNvZGU6OkJPT0xfT1ZFUkZMT1cpOwotICAgICAgICB9Ci0g
ICAgICAgIHJlc3VsdCA9ICgqYiA9PSAnMScpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgJ3knOgotICAgIGNhc2UgJ1knOgotICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAg
ICAgIGlmICghYm9vbF9zdHJfY21wKCZiLCBsZW4sICJ5ZXMiKSkgewotICAgICAgICArK2I7ICAv
LyBhY2NlcHQgdGhlIHNpbmdsZSAneScgY2hhcmFjdGVyCi0gICAgICB9Ci0gICAgICBicmVhazsK
LSAgICBjYXNlICduJzoKLSAgICBjYXNlICdOJzoKLSAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAg
ICAgaWYgKCFib29sX3N0cl9jbXAoJmIsIGxlbiwgIm5vIikpIHsKLSAgICAgICAgKytiOwotICAg
ICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAndCc6Ci0gICAgY2FzZSAnVCc6Ci0gICAgICBy
ZXN1bHQgPSB0cnVlOwotICAgICAgaWYgKCFib29sX3N0cl9jbXAoJmIsIGxlbiwgInRydWUiKSkg
ewotICAgICAgICArK2I7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdmJzoKLSAg
ICBjYXNlICdGJzoKLSAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgaWYgKCFib29sX3N0cl9j
bXAoJmIsIGxlbiwgImZhbHNlIikpIHsKLSAgICAgICAgKytiOwotICAgICAgfQotICAgICAgYnJl
YWs7Ci0gICAgY2FzZSAnbyc6Ci0gICAgY2FzZSAnTyc6Ci0gICAgICBpZiAoYm9vbF9zdHJfY21w
KCZiLCBsZW4sICJvbiIpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAgICB9IGVsc2Ug
aWYgKGJvb2xfc3RyX2NtcCgmYiwgbGVuLCAib2ZmIikpIHsKLSAgICAgICAgcmVzdWx0ID0gZmFs
c2U7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udmVy
c2lvbkNvZGU6OkJPT0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnZlcnNpb25Db2RlOjpC
T09MX0lOVkFMSURfVkFMVUUpOwotICB9Ci0KLSAgc3JjLT5hc3NpZ24oYiwgZSk7Ci0KLSAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBTdHJpbmdQaWVjZSB0byBkb3VibGUsIHdpdGggcHJv
Z3Jlc3MgaW5mb3JtYXRpb24uIEFsdGVycyB0aGUKLSAqIFN0cmluZ1BpZWNlIHBhcmFtZXRlciB0
byBtdW5jaCB0aGUgYWxyZWFkeS1wYXJzZWQgY2hhcmFjdGVycy4KLSAqLwotdGVtcGxhdGUgPGNs
YXNzIFRndD4KLUV4cGVjdGVkPFRndCwgQ29udmVyc2lvbkNvZGU+IHN0cl90b19mbG9hdGluZyhT
dHJpbmdQaWVjZSogc3JjKSBub2V4Y2VwdCB7Ci0gIHVzaW5nIG5hbWVzcGFjZSBkb3VibGVfY29u
dmVyc2lvbjsKLSAgc3RhdGljIFN0cmluZ1RvRG91YmxlQ29udmVydGVyCi0gICAgY29udihTdHJp
bmdUb0RvdWJsZUNvbnZlcnRlcjo6QUxMT1dfVFJBSUxJTkdfSlVOSwotICAgICAgICAgfCBTdHJp
bmdUb0RvdWJsZUNvbnZlcnRlcjo6QUxMT1dfTEVBRElOR19TUEFDRVMsCi0gICAgICAgICAwLjAs
Ci0gICAgICAgICAvLyByZXR1cm4gdGhpcyBmb3IganVuayBpbnB1dCBzdHJpbmcKLSAgICAgICAg
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCksCi0gICAgICAgICBudWxs
cHRyLCBudWxscHRyKTsKLQotICBpZiAoc3JjLT5lbXB0eSgpKSB7Ci0gICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKENvbnZlcnNpb25Db2RlOjpFTVBUWV9JTlBVVF9TVFJJTkcpOwotICB9Ci0KLSAg
aW50IGxlbmd0aDsKLSAgYXV0byByZXN1bHQgPSBjb252LlN0cmluZ1RvRG91YmxlKHNyYy0+ZGF0
YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
PihzcmMtPnNpemUoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVu
Z3RoKTsgLy8gcHJvY2Vzc2VkIGNoYXIgY291bnQKLQotICBpZiAoIXN0ZDo6aXNuYW4ocmVzdWx0
KSkgewotICAgIC8vIElmIHdlIGdldCBoZXJlIHdpdGggbGVuZ3RoID0gMCwgdGhlIGlucHV0IHN0
cmluZyBpcyBlbXB0eS4KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIHJlc3VsdCA9IDAuMCwg
aXQncyBlaXRoZXIgYmVjYXVzZSB0aGUgc3RyaW5nCi0gICAgLy8gY29udGFpbmVkIG9ubHkgd2hp
dGVzcGFjZSwgb3IgYmVjYXVzZSB3ZSBoYWQgYW4gYWN0dWFsIHplcm8gdmFsdWUKLSAgICAvLyAo
d2l0aCBwb3RlbnRpYWwgdHJhaWxpbmcganVuaykuIElmIGl0IHdhcyBvbmx5IHdoaXRlc3BhY2Us
IHdlCi0gICAgLy8gd2FudCB0byByYWlzZSBhbiBlcnJvcjsgbGVuZ3RoIHdpbGwgcG9pbnQgcGFz
dCB0aGUgbGFzdCBjaGFyYWN0ZXIKLSAgICAvLyB0aGF0IHdhcyBwcm9jZXNzZWQsIHNvIHdlIG5l
ZWQgdG8gY2hlY2sgaWYgdGhhdCBjaGFyYWN0ZXIgd2FzCi0gICAgLy8gd2hpdGVzcGFjZSBvciBu
b3QuCi0gICAgaWYgKGxlbmd0aCA9PSAwIHx8Ci0gICAgICAgIChyZXN1bHQgPT0gMC4wICYmIHN0
ZDo6aXNzcGFjZSgoKnNyYylbc2l6ZV90KGxlbmd0aCkgLSAxXSkpKSB7Ci0gICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoQ29udmVyc2lvbkNvZGU6OkVNUFRZX0lOUFVUX1NUUklORyk7Ci0gICAg
fQotICAgIHNyYy0+YWR2YW5jZShzaXplX3QobGVuZ3RoKSk7Ci0gICAgcmV0dXJuIFRndChyZXN1
bHQpOwotICB9Ci0KLSAgYXV0byogZSA9IHNyYy0+ZW5kKCk7Ci0gIGF1dG8qIGIgPQotICAgICAg
c3RkOjpmaW5kX2lmX25vdChzcmMtPmJlZ2luKCksIGUsIFtdKGNoYXIgYykgeyByZXR1cm4gc3Rk
Ojppc3NwYWNlKGMpOyB9KTsKLQotICAvLyBUaGVyZSBtdXN0IGJlIG5vbi13aGl0ZXNwYWNlLCBv
dGhlcndpc2Ugd2Ugd291bGQgaGF2ZSBjYXVnaHQgdGhpcyBhYm92ZQotICBhc3NlcnQoYiA8IGUp
OwotICBzaXplX3Qgc2l6ZSA9IHNpemVfdChlIC0gYik7Ci0KLSAgYm9vbCBuZWdhdGl2ZSA9IGZh
bHNlOwotICBpZiAoKmIgPT0gJy0nKSB7Ci0gICAgbmVnYXRpdmUgPSB0cnVlOwotICAgICsrYjsK
LSAgICAtLXNpemU7Ci0gIH0KLQotICByZXN1bHQgPSAwLjA7Ci0KLSAgc3dpdGNoICh0b2xvd2Vy
X2FzY2lpKCpiKSkgewotICAgIGNhc2UgJ2knOgotICAgICAgaWYgKHNpemUgPj0gMyAmJiB0b2xv
d2VyX2FzY2lpKGJbMV0pID09ICduJyAmJgotICAgICAgICAgIHRvbG93ZXJfYXNjaWkoYlsyXSkg
PT0gJ2YnKSB7Ci0gICAgICAgIGlmIChzaXplID49IDggJiYgdG9sb3dlcl9hc2NpaShiWzNdKSA9
PSAnaScgJiYKLSAgICAgICAgICAgIHRvbG93ZXJfYXNjaWkoYls0XSkgPT0gJ24nICYmIHRvbG93
ZXJfYXNjaWkoYls1XSkgPT0gJ2knICYmCi0gICAgICAgICAgICB0b2xvd2VyX2FzY2lpKGJbNl0p
ID09ICd0JyAmJiB0b2xvd2VyX2FzY2lpKGJbN10pID09ICd5JykgewotICAgICAgICAgIGIgKz0g
ODsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBiICs9IDM7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmVzdWx0ID0gc3RkOjpudW1lcmljX2xpbWl0czxUZ3Q+OjppbmZpbml0eSgpOwotICAgICAg
fQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlICduJzoKLSAgICAgIGlmIChzaXplID49IDMgJiYg
dG9sb3dlcl9hc2NpaShiWzFdKSA9PSAnYScgJiYKLSAgICAgICAgICB0b2xvd2VyX2FzY2lpKGJb
Ml0pID09ICduJykgewotICAgICAgICBiICs9IDM7Ci0gICAgICAgIHJlc3VsdCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8VGd0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQot
ICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChyZXN1bHQgPT0gMC4wKSB7
Ci0gICAgLy8gQWxsIGJldHMgYXJlIG9mZgotICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb252
ZXJzaW9uQ29kZTo6U1RSSU5HX1RPX0ZMT0FUX0VSUk9SKTsKLSAgfQotCi0gIGlmIChuZWdhdGl2
ZSkgewotICAgIHJlc3VsdCA9IC1yZXN1bHQ7Ci0gIH0KLQotICBzcmMtPmFzc2lnbihiLCBlKTsK
LQotICByZXR1cm4gVGd0KHJlc3VsdCk7Ci19Ci0KLXRlbXBsYXRlIEV4cGVjdGVkPGZsb2F0LCBD
b252ZXJzaW9uQ29kZT4gc3RyX3RvX2Zsb2F0aW5nPGZsb2F0PigKLSAgICBTdHJpbmdQaWVjZSog
c3JjKSBub2V4Y2VwdDsKLXRlbXBsYXRlIEV4cGVjdGVkPGRvdWJsZSwgQ29udmVyc2lvbkNvZGU+
IHN0cl90b19mbG9hdGluZzxkb3VibGU+KAotICAgIFN0cmluZ1BpZWNlKiBzcmMpIG5vZXhjZXB0
OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgdGFrZXMgY2FyZSBvZiBhZGRpdGlvbmFsIHByb2Nlc3Np
bmcgbmVlZGVkIGZvciBzaWduZWQgdmFsdWVzLAotICogbGlrZSBsZWFkaW5nIHNpZ24gY2hhcmFj
dGVyIGFuZCBvdmVyZmxvdyBjaGVja3MuCi0gKi8KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBib29s
IElzU2lnbmVkID0gc3RkOjppc19zaWduZWQ8VD46OnZhbHVlPgotY2xhc3MgU2lnbmVkVmFsdWVI
YW5kbGVyOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFNpZ25lZFZhbHVlSGFuZGxl
cjxULCB0cnVlPiB7Ci0gcHVibGljOgotICBDb252ZXJzaW9uQ29kZSBpbml0KGNvbnN0IGNoYXIq
JiBiKSB7Ci0gICAgbmVnYXRpdmVfID0gZmFsc2U7Ci0gICAgaWYgKCFzdGQ6OmlzZGlnaXQoKmIp
KSB7Ci0gICAgICBpZiAoKmIgPT0gJy0nKSB7Ci0gICAgICAgIG5lZ2F0aXZlXyA9IHRydWU7Ci0g
ICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKCpiICE9ICcrJykpIHsKLSAgICAgICAgcmV0dXJuIENv
bnZlcnNpb25Db2RlOjpJTlZBTElEX0xFQURJTkdfQ0hBUjsKLSAgICAgIH0KLSAgICAgICsrYjsK
LSAgICB9Ci0gICAgcmV0dXJuIENvbnZlcnNpb25Db2RlOjpTVUNDRVNTOwotICB9Ci0KLSAgQ29u
dmVyc2lvbkNvZGUgb3ZlcmZsb3coKSB7Ci0gICAgcmV0dXJuIG5lZ2F0aXZlXyA/IENvbnZlcnNp
b25Db2RlOjpORUdBVElWRV9PVkVSRkxPVwotICAgICAgICAgICAgICAgICAgICAgOiBDb252ZXJz
aW9uQ29kZTo6UE9TSVRJVkVfT1ZFUkZMT1c7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4KLSAgRXhwZWN0ZWQ8VCwgQ29udmVyc2lvbkNvZGU+IGZpbmFsaXplKFUgdmFsdWUpIHsKLSAg
ICBUIHJ2OwotICAgIGlmIChuZWdhdGl2ZV8pIHsKLSAgICAgIHJ2ID0gVCgtdmFsdWUpOwotICAg
ICAgaWYgKFVOTElLRUxZKHJ2ID4gMCkpIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KENvbnZlcnNpb25Db2RlOjpORUdBVElWRV9PVkVSRkxPVyk7Ci0gICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgIHJ2ID0gVCh2YWx1ZSk7Ci0gICAgICBpZiAoVU5MSUtFTFkocnYgPCAwKSkgewot
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udmVyc2lvbkNvZGU6OlBPU0lUSVZFX09W
RVJGTE9XKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJ2OwotICB9Ci0KLSBwcml2YXRl
OgotICBib29sIG5lZ2F0aXZlXzsKLX07Ci0KLS8vIEZvciB1bnNpZ25lZCB0eXBlcywgd2UgZG9u
J3QgbmVlZCBhbnkgZXh0cmEgcHJvY2Vzc2luZwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFz
cyBTaWduZWRWYWx1ZUhhbmRsZXI8VCwgZmFsc2U+IHsKLSBwdWJsaWM6Ci0gIENvbnZlcnNpb25D
b2RlIGluaXQoY29uc3QgY2hhciomKSB7Ci0gICAgcmV0dXJuIENvbnZlcnNpb25Db2RlOjpTVUND
RVNTOwotICB9Ci0KLSAgQ29udmVyc2lvbkNvZGUgb3ZlcmZsb3coKSB7Ci0gICAgcmV0dXJuIENv
bnZlcnNpb25Db2RlOjpQT1NJVElWRV9PVkVSRkxPVzsKLSAgfQotCi0gIEV4cGVjdGVkPFQsIENv
bnZlcnNpb25Db2RlPiBmaW5hbGl6ZShUIHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9
Ci19OwotCi0vKioKLSAqIFN0cmluZyByZXByZXNlbnRlZCBhcyBhIHBhaXIgb2YgcG9pbnRlcnMg
dG8gY2hhciB0byBzaWduZWQvdW5zaWduZWQKLSAqIGludGVncmFscy4gQXNzdW1lcyBOTyB3aGl0
ZXNwYWNlIGJlZm9yZSBvciBhZnRlciwgYW5kIGFsc28gdGhhdCB0aGUKLSAqIHN0cmluZyBpcyBj
b21wb3NlZCBlbnRpcmVseSBvZiBkaWdpdHMgKGFuZCBhbiBvcHRpb25hbCBzaWduIG9ubHkgZm9y
Ci0gKiBzaWduZWQgdHlwZXMpLiBTdHJpbmcgbWF5IGJlIGVtcHR5LCBpbiB3aGljaCBjYXNlIGRp
Z2l0c190byByZXR1cm5zCi0gKiBhbiBhcHByb3ByaWF0ZSBlcnJvci4KLSAqLwotdGVtcGxhdGUg
PGNsYXNzIFRndD4KLWlubGluZSBFeHBlY3RlZDxUZ3QsIENvbnZlcnNpb25Db2RlPiBkaWdpdHNf
dG8oCi0gICAgY29uc3QgY2hhciogYiwKLSAgICBjb25zdCBjaGFyKiBjb25zdCBlKSBub2V4Y2Vw
dCB7Ci0gIHVzaW5nIFVUID0gdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFRndD46OnR5cGU7
Ci0gIGFzc2VydChiIDw9IGUpOwotCi0gIFNpZ25lZFZhbHVlSGFuZGxlcjxUZ3Q+IHNnbjsKLQot
ICBhdXRvIGVyciA9IHNnbi5pbml0KGIpOwotICBpZiAoVU5MSUtFTFkoZXJyICE9IENvbnZlcnNp
b25Db2RlOjpTVUNDRVNTKSkgewotICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnIpOwotICB9
Ci0KLSAgc2l6ZV90IHNpemUgPSBzaXplX3QoZSAtIGIpOwotCi0gIC8qIEFsdGhvdWdoIHRoZSBz
dHJpbmcgaXMgZW50aXJlbHkgbWFkZSBvZiBkaWdpdHMsIHdlIHN0aWxsIG5lZWQgdG8KLSAgICog
Y2hlY2sgZm9yIG92ZXJmbG93LgotICAgKi8KLSAgaWYgKHNpemUgPiBzdGQ6Om51bWVyaWNfbGlt
aXRzPFVUPjo6ZGlnaXRzMTApIHsKLSAgICAvLyBMZWFkaW5nIHplcm9zPwotICAgIGlmIChiIDwg
ZSAmJiAqYiA9PSAnMCcpIHsKLSAgICAgIGZvciAoKytiOzsgKytiKSB7Ci0gICAgICAgIGlmIChi
ID09IGUpIHsKLSAgICAgICAgICByZXR1cm4gVGd0KDApOyAvLyBqdXN0IHplcm9zLCBlLmcuICIw
MDAwIgotICAgICAgICB9Ci0gICAgICAgIGlmICgqYiAhPSAnMCcpIHsKLSAgICAgICAgICBzaXpl
ID0gc2l6ZV90KGUgLSBiKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQot
ICAgIH0KLSAgICBpZiAoc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8VVQ+OjpkaWdpdHMxMCAm
JgotICAgICAgICAoc2l6ZSAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPFVUPjo6ZGlnaXRzMTAgKyAx
IHx8Ci0gICAgICAgICBzdHJuY21wKGIsIE1heFN0cmluZzxVVD46OnZhbHVlLCBzaXplKSA+IDAp
KSB7Ci0gICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoc2duLm92ZXJmbG93KCkpOwotICAgIH0K
LSAgfQotCi0gIC8vIEhlcmUgd2Uga25vdyB0aGF0IHRoZSBudW1iZXIgd29uJ3Qgb3ZlcmZsb3cg
d2hlbgotICAvLyBjb252ZXJ0ZWQuIFByb2NlZWQgd2l0aG91dCBjaGVja3MuCi0KLSAgVVQgcmVz
dWx0ID0gMDsKLQotICBmb3IgKDsgZSAtIGIgPj0gNDsgYiArPSA0KSB7Ci0gICAgcmVzdWx0ICo9
IHN0YXRpY19jYXN0PFVUPigxMDAwMCk7Ci0gICAgY29uc3QgaW50MzJfdCByMCA9IHNoaWZ0MTAw
MFtzdGF0aWNfY2FzdDxzaXplX3Q+KGJbMF0pXTsKLSAgICBjb25zdCBpbnQzMl90IHIxID0gc2hp
ZnQxMDBbc3RhdGljX2Nhc3Q8c2l6ZV90PihiWzFdKV07Ci0gICAgY29uc3QgaW50MzJfdCByMiA9
IHNoaWZ0MTBbc3RhdGljX2Nhc3Q8c2l6ZV90PihiWzJdKV07Ci0gICAgY29uc3QgaW50MzJfdCBy
MyA9IHNoaWZ0MVtzdGF0aWNfY2FzdDxzaXplX3Q+KGJbM10pXTsKLSAgICBjb25zdCBhdXRvIHN1
bSA9IHIwICsgcjEgKyByMiArIHIzOwotICAgIGlmIChzdW0gPj0gT09SKSB7Ci0gICAgICBnb3Rv
IG91dE9mUmFuZ2U7Ci0gICAgfQotICAgIHJlc3VsdCArPSBVVChzdW0pOwotICB9Ci0KLSAgc3dp
dGNoIChlIC0gYikgewotICBjYXNlIDM6IHsKLSAgICBjb25zdCBpbnQzMl90IHIwID0gc2hpZnQx
MDBbc3RhdGljX2Nhc3Q8c2l6ZV90PihiWzBdKV07Ci0gICAgY29uc3QgaW50MzJfdCByMSA9IHNo
aWZ0MTBbc3RhdGljX2Nhc3Q8c2l6ZV90PihiWzFdKV07Ci0gICAgY29uc3QgaW50MzJfdCByMiA9
IHNoaWZ0MVtzdGF0aWNfY2FzdDxzaXplX3Q+KGJbMl0pXTsKLSAgICBjb25zdCBhdXRvIHN1bSA9
IHIwICsgcjEgKyByMjsKLSAgICBpZiAoc3VtID49IE9PUikgewotICAgICAgZ290byBvdXRPZlJh
bmdlOwotICAgIH0KLSAgICByZXN1bHQgPSBVVCgxMDAwICogcmVzdWx0ICsgc3VtKTsKLSAgICBi
cmVhazsKLSAgfQotICBjYXNlIDI6IHsKLSAgICBjb25zdCBpbnQzMl90IHIwID0gc2hpZnQxMFtz
dGF0aWNfY2FzdDxzaXplX3Q+KGJbMF0pXTsKLSAgICBjb25zdCBpbnQzMl90IHIxID0gc2hpZnQx
W3N0YXRpY19jYXN0PHNpemVfdD4oYlsxXSldOwotICAgIGNvbnN0IGF1dG8gc3VtID0gcjAgKyBy
MTsKLSAgICBpZiAoc3VtID49IE9PUikgewotICAgICAgZ290byBvdXRPZlJhbmdlOwotICAgIH0K
LSAgICByZXN1bHQgPSBVVCgxMDAgKiByZXN1bHQgKyBzdW0pOwotICAgIGJyZWFrOwotICB9Ci0g
IGNhc2UgMTogewotICAgIGNvbnN0IGludDMyX3Qgc3VtID0gc2hpZnQxW3N0YXRpY19jYXN0PHNp
emVfdD4oYlswXSldOwotICAgIGlmIChzdW0gPj0gT09SKSB7Ci0gICAgICBnb3RvIG91dE9mUmFu
Z2U7Ci0gICAgfQotICAgIHJlc3VsdCA9IFVUKDEwICogcmVzdWx0ICsgc3VtKTsKLSAgICBicmVh
azsKLSAgfQotICBkZWZhdWx0OgotICAgIGFzc2VydChiID09IGUpOwotICAgIGlmIChzaXplID09
IDApIHsKLSAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb252ZXJzaW9uQ29kZTo6Tk9fRElH
SVRTKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gc2duLmZpbmFsaXplKHJl
c3VsdCk7Ci0KLW91dE9mUmFuZ2U6Ci0gIHJldHVybiBtYWtlVW5leHBlY3RlZChDb252ZXJzaW9u
Q29kZTo6Tk9OX0RJR0lUX0NIQVIpOwotfQotCi10ZW1wbGF0ZSBFeHBlY3RlZDxjaGFyLCBDb252
ZXJzaW9uQ29kZT4gZGlnaXRzX3RvPGNoYXI+KAotICAgIGNvbnN0IGNoYXIqLAotICAgIGNvbnN0
IGNoYXIqKSBub2V4Y2VwdDsKLXRlbXBsYXRlIEV4cGVjdGVkPHNpZ25lZCBjaGFyLCBDb252ZXJz
aW9uQ29kZT4gZGlnaXRzX3RvPHNpZ25lZCBjaGFyPigKLSAgICBjb25zdCBjaGFyKiwKLSAgICBj
b25zdCBjaGFyKikgbm9leGNlcHQ7Ci10ZW1wbGF0ZSBFeHBlY3RlZDx1bnNpZ25lZCBjaGFyLCBD
b252ZXJzaW9uQ29kZT4gZGlnaXRzX3RvPHVuc2lnbmVkIGNoYXI+KAotICAgIGNvbnN0IGNoYXIq
LAotICAgIGNvbnN0IGNoYXIqKSBub2V4Y2VwdDsKLQotdGVtcGxhdGUgRXhwZWN0ZWQ8c2hvcnQs
IENvbnZlcnNpb25Db2RlPiBkaWdpdHNfdG88c2hvcnQ+KAotICAgIGNvbnN0IGNoYXIqLAotICAg
IGNvbnN0IGNoYXIqKSBub2V4Y2VwdDsKLXRlbXBsYXRlIEV4cGVjdGVkPHVuc2lnbmVkIHNob3J0
LCBDb252ZXJzaW9uQ29kZT4gZGlnaXRzX3RvPHVuc2lnbmVkIHNob3J0PigKLSAgICBjb25zdCBj
aGFyKiwKLSAgICBjb25zdCBjaGFyKikgbm9leGNlcHQ7Ci0KLXRlbXBsYXRlIEV4cGVjdGVkPGlu
dCwgQ29udmVyc2lvbkNvZGU+IGRpZ2l0c190bzxpbnQ+KAotICAgIGNvbnN0IGNoYXIqLAotICAg
IGNvbnN0IGNoYXIqKSBub2V4Y2VwdDsKLXRlbXBsYXRlIEV4cGVjdGVkPHVuc2lnbmVkIGludCwg
Q29udmVyc2lvbkNvZGU+IGRpZ2l0c190bzx1bnNpZ25lZCBpbnQ+KAotICAgIGNvbnN0IGNoYXIq
LAotICAgIGNvbnN0IGNoYXIqKSBub2V4Y2VwdDsKLQotdGVtcGxhdGUgRXhwZWN0ZWQ8bG9uZywg
Q29udmVyc2lvbkNvZGU+IGRpZ2l0c190bzxsb25nPigKLSAgICBjb25zdCBjaGFyKiwKLSAgICBj
b25zdCBjaGFyKikgbm9leGNlcHQ7Ci10ZW1wbGF0ZSBFeHBlY3RlZDx1bnNpZ25lZCBsb25nLCBD
b252ZXJzaW9uQ29kZT4gZGlnaXRzX3RvPHVuc2lnbmVkIGxvbmc+KAotICAgIGNvbnN0IGNoYXIq
LAotICAgIGNvbnN0IGNoYXIqKSBub2V4Y2VwdDsKLQotdGVtcGxhdGUgRXhwZWN0ZWQ8bG9uZyBs
b25nLCBDb252ZXJzaW9uQ29kZT4gZGlnaXRzX3RvPGxvbmcgbG9uZz4oCi0gICAgY29uc3QgY2hh
ciosCi0gICAgY29uc3QgY2hhciopIG5vZXhjZXB0OwotdGVtcGxhdGUgRXhwZWN0ZWQ8dW5zaWdu
ZWQgbG9uZyBsb25nLCBDb252ZXJzaW9uQ29kZT4KLWRpZ2l0c190bzx1bnNpZ25lZCBsb25nIGxv
bmc+KGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikgbm9leGNlcHQ7Ci0KLSNpZiBGT0xMWV9IQVZF
X0lOVDEyOF9UCi10ZW1wbGF0ZSBFeHBlY3RlZDxfX2ludDEyOCwgQ29udmVyc2lvbkNvZGU+IGRp
Z2l0c190bzxfX2ludDEyOD4oCi0gICAgY29uc3QgY2hhciosCi0gICAgY29uc3QgY2hhciopIG5v
ZXhjZXB0OwotdGVtcGxhdGUgRXhwZWN0ZWQ8dW5zaWduZWQgX19pbnQxMjgsIENvbnZlcnNpb25D
b2RlPgotZGlnaXRzX3RvPHVuc2lnbmVkIF9faW50MTI4Pihjb25zdCBjaGFyKiwgY29uc3QgY2hh
ciopIG5vZXhjZXB0OwotI2VuZGlmCi0KLS8qKgotICogU3RyaW5nUGllY2UgdG8gaW50ZWdyYWxz
LCB3aXRoIHByb2dyZXNzIGluZm9ybWF0aW9uLiBBbHRlcnMgdGhlCi0gKiBTdHJpbmdQaWVjZSBw
YXJhbWV0ZXIgdG8gbXVuY2ggdGhlIGFscmVhZHktcGFyc2VkIGNoYXJhY3RlcnMuCi0gKi8KLXRl
bXBsYXRlIDxjbGFzcyBUZ3Q+Ci1FeHBlY3RlZDxUZ3QsIENvbnZlcnNpb25Db2RlPiBzdHJfdG9f
aW50ZWdyYWwoU3RyaW5nUGllY2UqIHNyYykgbm9leGNlcHQgewotICB1c2luZyBVVCA9IHR5cGVu
YW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxUZ3Q+Ojp0eXBlOwotCi0gIGF1dG8gYiA9IHNyYy0+ZGF0
YSgpLCBwYXN0ID0gc3JjLT5kYXRhKCkgKyBzcmMtPnNpemUoKTsKLQotICBmb3IgKDs7ICsrYikg
ewotICAgIGlmIChVTkxJS0VMWShiID49IHBhc3QpKSB7Ci0gICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoQ29udmVyc2lvbkNvZGU6OkVNUFRZX0lOUFVUX1NUUklORyk7Ci0gICAgfQotICAgIGlm
ICghc3RkOjppc3NwYWNlKCpiKSkgewotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgU2ln
bmVkVmFsdWVIYW5kbGVyPFRndD4gc2duOwotICBhdXRvIGVyciA9IHNnbi5pbml0KGIpOwotCi0g
IGlmIChVTkxJS0VMWShlcnIgIT0gQ29udmVyc2lvbkNvZGU6OlNVQ0NFU1MpKSB7Ci0gICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycik7Ci0gIH0KLSAgaWYgKHN0ZDo6aXNfc2lnbmVkPFRndD46
OnZhbHVlICYmIFVOTElLRUxZKGIgPj0gcGFzdCkpIHsKLSAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoQ29udmVyc2lvbkNvZGU6Ok5PX0RJR0lUUyk7Ci0gIH0KLSAgaWYgKFVOTElLRUxZKCFpc2Rp
Z2l0KCpiKSkpIHsKLSAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udmVyc2lvbkNvZGU6Ok5P
Tl9ESUdJVF9DSEFSKTsKLSAgfQotCi0gIGF1dG8gbSA9IGZpbmRGaXJzdE5vbkRpZ2l0KGIgKyAx
LCBwYXN0KTsKLQotICBhdXRvIHRtcCA9IGRpZ2l0c190bzxVVD4oYiwgbSk7Ci0KLSAgaWYgKFVO
TElLRUxZKCF0bXAuaGFzVmFsdWUoKSkpIHsKLSAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoCi0g
ICAgICAgIHRtcC5lcnJvcigpID09IENvbnZlcnNpb25Db2RlOjpQT1NJVElWRV9PVkVSRkxPVyA/
IHNnbi5vdmVyZmxvdygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IHRtcC5lcnJvcigpKTsKLSAgfQotCi0gIGF1dG8gcmVzID0gc2du
LmZpbmFsaXplKHRtcC52YWx1ZSgpKTsKLQotICBpZiAocmVzLmhhc1ZhbHVlKCkpIHsKLSAgICBz
cmMtPmFkdmFuY2Uoc2l6ZV90KG0gLSBzcmMtPmRhdGEoKSkpOwotICB9Ci0KLSAgcmV0dXJuIHJl
czsKLX0KLQotdGVtcGxhdGUgRXhwZWN0ZWQ8Y2hhciwgQ29udmVyc2lvbkNvZGU+IHN0cl90b19p
bnRlZ3JhbDxjaGFyPigKLSAgICBTdHJpbmdQaWVjZSogc3JjKSBub2V4Y2VwdDsKLXRlbXBsYXRl
IEV4cGVjdGVkPHNpZ25lZCBjaGFyLCBDb252ZXJzaW9uQ29kZT4gc3RyX3RvX2ludGVncmFsPHNp
Z25lZCBjaGFyPigKLSAgICBTdHJpbmdQaWVjZSogc3JjKSBub2V4Y2VwdDsKLXRlbXBsYXRlIEV4
cGVjdGVkPHVuc2lnbmVkIGNoYXIsIENvbnZlcnNpb25Db2RlPiBzdHJfdG9faW50ZWdyYWw8dW5z
aWduZWQgY2hhcj4oCi0gICAgU3RyaW5nUGllY2UqIHNyYykgbm9leGNlcHQ7Ci0KLXRlbXBsYXRl
IEV4cGVjdGVkPHNob3J0LCBDb252ZXJzaW9uQ29kZT4gc3RyX3RvX2ludGVncmFsPHNob3J0PigK
LSAgICBTdHJpbmdQaWVjZSogc3JjKSBub2V4Y2VwdDsKLXRlbXBsYXRlIEV4cGVjdGVkPHVuc2ln
bmVkIHNob3J0LCBDb252ZXJzaW9uQ29kZT4KLXN0cl90b19pbnRlZ3JhbDx1bnNpZ25lZCBzaG9y
dD4oU3RyaW5nUGllY2UqIHNyYykgbm9leGNlcHQ7Ci0KLXRlbXBsYXRlIEV4cGVjdGVkPGludCwg
Q29udmVyc2lvbkNvZGU+IHN0cl90b19pbnRlZ3JhbDxpbnQ+KAotICAgIFN0cmluZ1BpZWNlKiBz
cmMpIG5vZXhjZXB0OwotdGVtcGxhdGUgRXhwZWN0ZWQ8dW5zaWduZWQgaW50LCBDb252ZXJzaW9u
Q29kZT4gc3RyX3RvX2ludGVncmFsPHVuc2lnbmVkIGludD4oCi0gICAgU3RyaW5nUGllY2UqIHNy
Yykgbm9leGNlcHQ7Ci0KLXRlbXBsYXRlIEV4cGVjdGVkPGxvbmcsIENvbnZlcnNpb25Db2RlPiBz
dHJfdG9faW50ZWdyYWw8bG9uZz4oCi0gICAgU3RyaW5nUGllY2UqIHNyYykgbm9leGNlcHQ7Ci10
ZW1wbGF0ZSBFeHBlY3RlZDx1bnNpZ25lZCBsb25nLCBDb252ZXJzaW9uQ29kZT4gc3RyX3RvX2lu
dGVncmFsPHVuc2lnbmVkIGxvbmc+KAotICAgIFN0cmluZ1BpZWNlKiBzcmMpIG5vZXhjZXB0Owot
Ci10ZW1wbGF0ZSBFeHBlY3RlZDxsb25nIGxvbmcsIENvbnZlcnNpb25Db2RlPiBzdHJfdG9faW50
ZWdyYWw8bG9uZyBsb25nPigKLSAgICBTdHJpbmdQaWVjZSogc3JjKSBub2V4Y2VwdDsKLXRlbXBs
YXRlIEV4cGVjdGVkPHVuc2lnbmVkIGxvbmcgbG9uZywgQ29udmVyc2lvbkNvZGU+Ci1zdHJfdG9f
aW50ZWdyYWw8dW5zaWduZWQgbG9uZyBsb25nPihTdHJpbmdQaWVjZSogc3JjKSBub2V4Y2VwdDsK
LQotI2lmIEZPTExZX0hBVkVfSU5UMTI4X1QKLXRlbXBsYXRlIEV4cGVjdGVkPF9faW50MTI4LCBD
b252ZXJzaW9uQ29kZT4gc3RyX3RvX2ludGVncmFsPF9faW50MTI4PigKLSAgICBTdHJpbmdQaWVj
ZSogc3JjKSBub2V4Y2VwdDsKLXRlbXBsYXRlIEV4cGVjdGVkPHVuc2lnbmVkIF9faW50MTI4LCBD
b252ZXJzaW9uQ29kZT4KLXN0cl90b19pbnRlZ3JhbDx1bnNpZ25lZCBfX2ludDEyOD4oU3RyaW5n
UGllY2UqIHNyYykgbm9leGNlcHQ7Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0K
LUNvbnZlcnNpb25FcnJvciBtYWtlQ29udmVyc2lvbkVycm9yKENvbnZlcnNpb25Db2RlIGNvZGUs
IFN0cmluZ1BpZWNlIGlucHV0KSB7Ci0gIHVzaW5nIG5hbWVzcGFjZSBkZXRhaWw7Ci0gIHN0YXRp
Y19hc3NlcnQoCi0gICAgICBzdGQ6OmlzX3Vuc2lnbmVkPHN0ZDo6dW5kZXJseWluZ190eXBlPENv
bnZlcnNpb25Db2RlPjo6dHlwZT46OnZhbHVlLAotICAgICAgIkNvbnZlcnNpb25Db2RlIHNob3Vs
ZCBiZSB1bnNpZ25lZCIpOwotICBhc3NlcnQoKHN0ZDo6c2l6ZV90KWNvZGUgPCBrRXJyb3JTdHJp
bmdzLnNpemUoKSk7Ci0gIGNvbnN0IEVycm9yU3RyaW5nJiBlcnIgPSBrRXJyb3JTdHJpbmdzWyhz
dGQ6OnNpemVfdCljb2RlXTsKLSAgaWYgKGNvZGUgPT0gQ29udmVyc2lvbkNvZGU6OkVNUFRZX0lO
UFVUX1NUUklORyAmJiBpbnB1dC5lbXB0eSgpKSB7Ci0gICAgcmV0dXJuIHtlcnIuc3RyaW5nLCBj
b2RlfTsKLSAgfQotICBzdGQ6OnN0cmluZyB0bXAoZXJyLnN0cmluZyk7Ci0gIHRtcC5hcHBlbmQo
IjogIik7Ci0gIGlmIChlcnIucXVvdGUpIHsKLSAgICB0bXAuYXBwZW5kKDEsICciJyk7Ci0gIH0K
LSAgaWYgKGlucHV0LnNpemUoKSA+IDApIHsKLSAgICB0bXAuYXBwZW5kKGlucHV0LmRhdGEoKSwg
aW5wdXQuc2l6ZSgpKTsKLSAgfQotICBpZiAoZXJyLnF1b3RlKSB7Ci0gICAgdG1wLmFwcGVuZCgx
LCAnIicpOwotICB9Ci0gIHJldHVybiB7dG1wLCBjb2RlfTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
Zm9sbHkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Zv
bGx5L0NvbnYuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0Nv
bnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI1MThkODA4ZjVhZDg5NWFkMDRj
MzNlYWRiNWE4N2E3MTFmNWNjOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9Db252
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAx
NyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5z
ZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNo
ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBw
bGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
LAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIENvbnZlcnRzIGFueXRoaW5nIHRvIGFueXRo
aW5nLCB3aXRoIGFuIGVtcGhhc2lzIG9uIHBlcmZvcm1hbmNlIGFuZAotICogc2FmZXR5LgotICoK
LSAqIEBhdXRob3IgQW5kcmVpIEFsZXhhbmRyZXNjdSAoYW5kcmVpLmFsZXhhbmRyZXNjdUBmYi5j
b20pCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVk
ZSA8Y2N0eXBlPgotI2luY2x1ZGUgPGNsaW1pdHM+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNs
dWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8c3RkZXhjZXB0PgotI2luY2x1ZGUgPHN0cmluZz4KLSNp
bmNsdWRlIDx0dXBsZT4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSNpbmNsdWRlIDx0eXBlaW5m
bz4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSA8Ym9vc3QvaW1wbGljaXRfY2FzdC5o
cHA+Ci0jaW5jbHVkZSA8ZG91YmxlLWNvbnZlcnNpb24vZG91YmxlLWNvbnZlcnNpb24uaD4gLy8g
VjggSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbgotCi0jaW5jbHVkZSA8Zm9sbHkvRGVtYW5nbGUu
aD4KLSNpbmNsdWRlIDxmb2xseS9FeHBlY3RlZC5oPgotI2luY2x1ZGUgPGZvbGx5L0ZCU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvTGlrZWx5Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvUmFuZ2UuaD4K
LSNpbmNsdWRlIDxmb2xseS9UcmFpdHMuaD4KLSNpbmNsdWRlIDxmb2xseS9Vbml0Lmg+Ci0jaW5j
bHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvTWF0aC5oPgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi0v
LyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIGtFcnJvclN0cmluZ3MgaW4gQ29udi5jcHAKLWVudW0g
Y2xhc3MgQ29udmVyc2lvbkNvZGUgOiB1bnNpZ25lZCBjaGFyIHsKLSAgU1VDQ0VTUywKLSAgRU1Q
VFlfSU5QVVRfU1RSSU5HLAotICBOT19ESUdJVFMsCi0gIEJPT0xfT1ZFUkZMT1csCi0gIEJPT0xf
SU5WQUxJRF9WQUxVRSwKLSAgTk9OX0RJR0lUX0NIQVIsCi0gIElOVkFMSURfTEVBRElOR19DSEFS
LAotICBQT1NJVElWRV9PVkVSRkxPVywKLSAgTkVHQVRJVkVfT1ZFUkZMT1csCi0gIFNUUklOR19U
T19GTE9BVF9FUlJPUiwKLSAgTk9OX1dISVRFU1BBQ0VfQUZURVJfRU5ELAotICBBUklUSF9QT1NJ
VElWRV9PVkVSRkxPVywKLSAgQVJJVEhfTkVHQVRJVkVfT1ZFUkZMT1csCi0gIEFSSVRIX0xPU1Nf
T0ZfUFJFQ0lTSU9OLAotICBOVU1fRVJST1JfQ09ERVMsIC8vIGhhcyB0byBiZSB0aGUgbGFzdCBl
bnRyeQotfTsKLQotc3RydWN0IENvbnZlcnNpb25FcnJvckJhc2UgOiBzdGQ6OnJhbmdlX2Vycm9y
IHsKLSAgdXNpbmcgc3RkOjpyYW5nZV9lcnJvcjo6cmFuZ2VfZXJyb3I7Ci19OwotCi1jbGFzcyBD
b252ZXJzaW9uRXJyb3IgOiBwdWJsaWMgQ29udmVyc2lvbkVycm9yQmFzZSB7Ci0gcHVibGljOgot
ICBDb252ZXJzaW9uRXJyb3IoY29uc3Qgc3RkOjpzdHJpbmcmIHN0ciwgQ29udmVyc2lvbkNvZGUg
Y29kZSkKLSAgICAgIDogQ29udmVyc2lvbkVycm9yQmFzZShzdHIpLCBjb2RlXyhjb2RlKSB7fQot
Ci0gIENvbnZlcnNpb25FcnJvcihjb25zdCBjaGFyKiBzdHIsIENvbnZlcnNpb25Db2RlIGNvZGUp
Ci0gICAgICA6IENvbnZlcnNpb25FcnJvckJhc2Uoc3RyKSwgY29kZV8oY29kZSkge30KLQotICBD
b252ZXJzaW9uQ29kZSBlcnJvckNvZGUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGNvZGVfOwotICB9
Ci0KLSBwcml2YXRlOgotICBDb252ZXJzaW9uQ29kZSBjb2RlXzsKLX07Ci0KLS8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCi0gKiBDdXN0b20gRXJyb3IgVHJhbnNsYXRpb24KLSAqCi0gKiBZb3VyIG92
ZXJsb2FkZWQgcGFyc2VUbygpIGZ1bmN0aW9uIGNhbiByZXR1cm4gYSBjdXN0b20gZXJyb3IgY29k
ZSBvbiBmYWlsdXJlLgotICogOjpmb2xseTo6dG8oKSB3aWxsIGNhbGwgbWFrZUNvbnZlcnNpb25F
cnJvciB0byB0cmFuc2xhdGUgdGhhdCBlcnJvciBjb2RlIGludG8KLSAqIGFuIG9iamVjdCB0byB0
aHJvdy4gbWFrZUNvbnZlcnNpb25FcnJvciBpcyBmb3VuZCBieSBhcmd1bWVudC1kZXBlbmRlbnQK
LSAqIGxvb2t1cC4gSXQgc2hvdWxkIGhhdmUgdGhpcyBzaWduYXR1cmU6Ci0gKgotICogbmFtZXNw
YWNlIG90aGVyX25hbWVzcGFjZSB7Ci0gKiBlbnVtIFlvdXJFcnJvckNvZGUgeyBCQURfRVJST1Is
IFdPUlNFX0VSUk9SIH07Ci0gKgotICogc3RydWN0IFlvdXJDb252ZXJzaW9uRXJyb3IgOiBDb252
ZXJzaW9uRXJyb3JCYXNlIHsKLSAqICAgWW91ckNvbnZlcnNpb25FcnJvcihjb25zdCBjaGFyKiB3
aGF0KSA6IENvbnZlcnNpb25FcnJvckJhc2Uod2hhdCkge30KLSAqIH07Ci0gKgotICogWW91ckNv
bnZlcnNpb25FcnJvcgotICogbWFrZUNvbnZlcnNpb25FcnJvcihZb3VyRXJyb3JDb2RlIGNvZGUs
IDo6Zm9sbHk6OlN0cmluZ1BpZWNlIHNwKSB7Ci0gKiAgIC4uLgotICogICByZXR1cm4gWW91ckNv
bnZlcnNpb25FcnJvcihtZXNzYWdlU3RyaW5nKTsKLSAqIH0KLSAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi1Db252ZXJzaW9uRXJyb3IgbWFrZUNvbnZlcnNpb25FcnJvcihDb252ZXJzaW9uQ29kZSBj
b2RlLCBTdHJpbmdQaWVjZSBzcCk7Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotLyoqCi0gKiBFbmZv
cmNlIHRoYXQgdGhlIHN1ZmZpeCBmb2xsb3dpbmcgYSBudW1iZXIgaXMgbWFkZSB1cCBvbmx5IG9m
IHdoaXRlc3BhY2UuCi0gKi8KLWlubGluZSBDb252ZXJzaW9uQ29kZSBlbmZvcmNlV2hpdGVzcGFj
ZUVycihTdHJpbmdQaWVjZSBzcCkgewotICBmb3IgKGF1dG8gYyA6IHNwKSB7Ci0gICAgaWYgKFVO
TElLRUxZKCFzdGQ6Omlzc3BhY2UoYykpKSB7Ci0gICAgICByZXR1cm4gQ29udmVyc2lvbkNvZGU6
Ok5PTl9XSElURVNQQUNFX0FGVEVSX0VORDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIENvbnZlcnNp
b25Db2RlOjpTVUNDRVNTOwotfQotCi0vKioKLSAqIEtlZXAgdGhpcyBpbXBsZW1lbnRhdGlvbiBh
cm91bmQgZm9yIHByZXR0eVRvRG91YmxlKCkuCi0gKi8KLWlubGluZSB2b2lkIGVuZm9yY2VXaGl0
ZXNwYWNlKFN0cmluZ1BpZWNlIHNwKSB7Ci0gIGF1dG8gZXJyID0gZW5mb3JjZVdoaXRlc3BhY2VF
cnIoc3ApOwotICBpZiAoZXJyICE9IENvbnZlcnNpb25Db2RlOjpTVUNDRVNTKSB7Ci0gICAgdGhy
b3cgbWFrZUNvbnZlcnNpb25FcnJvcihlcnIsIHNwKTsKLSAgfQotfQotfQotCi0vKioKLSAqIFRo
ZSBpZGVudGl0eSBjb252ZXJzaW9uIGZ1bmN0aW9uLgotICogdHJ5VG88VD4oVCkgcmV0dXJucyBp
dHNlbGYgZm9yIGFsbCB0eXBlcyBULgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgVGd0LCBjbGFzcyBT
cmM+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICBzdGQ6OmlzX3NhbWU8VGd0LCB0eXBl
bmFtZSBzdGQ6OmRlY2F5PFNyYz46OnR5cGU+Ojp2YWx1ZSwKLSAgICBFeHBlY3RlZDxUZ3QsIENv
bnZlcnNpb25Db2RlPj46OnR5cGUKLXRyeVRvKFNyYyYmIHZhbHVlKSB7Ci0gIHJldHVybiBzdGQ6
OmZvcndhcmQ8U3JjPih2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUZ3QsIGNsYXNzIFNy
Yz4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgIHN0ZDo6aXNfc2FtZTxUZ3QsIHR5cGVu
YW1lIHN0ZDo6ZGVjYXk8U3JjPjo6dHlwZT46OnZhbHVlLAotICAgIFRndD46OnR5cGUKLXRvKFNy
YyYmIHZhbHVlKSB7Ci0gIHJldHVybiBzdGQ6OmZvcndhcmQ8U3JjPih2YWx1ZSk7Ci19Ci0KLS8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCi0gKiBBcml0aG1ldGljIHRvIGJvb2xlYW4KLSAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCi0KLS8qKgotICogVW5jaGVja2VkIGNvbnZlcnNpb24gZnJvbSBhcml0
aG1ldGljIHRvIGJvb2xlYW4uIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlCi0gKiBvdGhlciBh
cml0aG1ldGljIGNvbnZlcnNpb25zIGJlY2F1c2Ugd2UgdXNlIHRoZSBDIGNvbnZlbnRpb24gb2Yg
dHJlYXRpbmcgYW55Ci0gKiBub24temVybyB2YWx1ZSBhcyB0cnVlLCBpbnN0ZWFkIG9mIHJhbmdl
IGNoZWNraW5nLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgVGd0LCBjbGFzcyBTcmM+Ci10eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICBzdGQ6OmlzX2FyaXRobWV0aWM8U3JjPjo6dmFsdWUgJiYg
IXN0ZDo6aXNfc2FtZTxUZ3QsIFNyYz46OnZhbHVlICYmCi0gICAgICAgIHN0ZDo6aXNfc2FtZTxU
Z3QsIGJvb2w+Ojp2YWx1ZSwKLSAgICBFeHBlY3RlZDxUZ3QsIENvbnZlcnNpb25Db2RlPj46OnR5
cGUKLXRyeVRvKGNvbnN0IFNyYyYgdmFsdWUpIHsKLSAgcmV0dXJuIHZhbHVlICE9IFNyYygpOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVGd0LCBjbGFzcyBTcmM+Ci10eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjwKLSAgICBzdGQ6OmlzX2FyaXRobWV0aWM8U3JjPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2Ft
ZTxUZ3QsIFNyYz46OnZhbHVlICYmCi0gICAgICAgIHN0ZDo6aXNfc2FtZTxUZ3QsIGJvb2w+Ojp2
YWx1ZSwKLSAgICBUZ3Q+Ojp0eXBlCi10byhjb25zdCBTcmMmIHZhbHVlKSB7Ci0gIHJldHVybiB2
YWx1ZSAhPSBTcmMoKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEFueXRoaW5n
IHRvIHN0cmluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotbmFtZXNwYWNlIGRldGFpbCB7
Ci0KLSNpZmRlZiBfTVNDX1ZFUgotLy8gTVNWQyBjYW4ndCBxdWl0ZSBmaWd1cmUgb3V0IHRoZSBM
YXN0RWxlbWVudEltcGw6OmNhbGwoKSBzdHVmZgotLy8gaW4gdGhlIGJhc2UgaW1wbGVtZW50YXRp
b24sIHNvIHdlIGhhdmUgdG8gdXNlIHR1cGxlcyBpbnN0ZWFkLAotLy8gd2hpY2ggcmVzdWx0IGlu
IHNpZ25pZmljYW50bHkgbW9yZSB0ZW1wbGF0ZXMgYmVpbmcgY29tcGlsZWQsCi0vLyB0aG91Z2gg
dGhlIHJ1bnRpbWUgcGVyZm9ybWFuY2UgaXMgdGhlIHNhbWUuCi0KLXRlbXBsYXRlIDx0eXBlbmFt
ZS4uLiBUcz4KLWF1dG8gZ2V0TGFzdEVsZW1lbnQoVHMmJi4uLiB0cykgLT4gZGVjbHR5cGUoCi0g
ICAgc3RkOjpnZXQ8c2l6ZW9mLi4uKFRzKS0xPihzdGQ6OmZvcndhcmRfYXNfdHVwbGUoc3RkOjpm
b3J3YXJkPFRzPih0cykuLi4pKSkgewotICByZXR1cm4gc3RkOjpnZXQ8c2l6ZW9mLi4uKFRzKS0x
PigKLSAgICAgIHN0ZDo6Zm9yd2FyZF9hc190dXBsZShzdGQ6OmZvcndhcmQ8VHM+KHRzKS4uLikp
OwotfQotCi1pbmxpbmUgdm9pZCBnZXRMYXN0RWxlbWVudCgpIHt9Ci0KLXRlbXBsYXRlIDxzaXpl
X3Qgc2l6ZSwgdHlwZW5hbWUuLi4gVHM+Ci1zdHJ1Y3QgTGFzdEVsZW1lbnRUeXBlIDogc3RkOjp0
dXBsZV9lbGVtZW50PHNpemUgLSAxLCBzdGQ6OnR1cGxlPFRzLi4uPj4ge307Ci0KLXRlbXBsYXRl
IDw+Ci1zdHJ1Y3QgTGFzdEVsZW1lbnRUeXBlPDA+IHsKLSAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci19
OwotCi10ZW1wbGF0ZSA8Y2xhc3MuLi4gVHM+Ci1zdHJ1Y3QgTGFzdEVsZW1lbnQKLSAgICA6IHN0
ZDo6ZGVjYXk8dHlwZW5hbWUgTGFzdEVsZW1lbnRUeXBlPHNpemVvZi4uLihUcyksIFRzLi4uPjo6
dHlwZT4ge307Ci0jZWxzZQotdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgotc3RydWN0IExhc3RF
bGVtZW50SW1wbCB7Ci0gIHN0YXRpYyB2b2lkIGNhbGwoSWdub3JlZDxUcz4uLi4pIHt9Ci19Owot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgSGVhZCwgdHlwZW5hbWUuLi4gVHM+Ci1zdHJ1Y3QgTGFzdEVs
ZW1lbnRJbXBsPEhlYWQsIFRzLi4uPiB7Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXN0PgotICBz
dGF0aWMgTGFzdCBjYWxsKElnbm9yZWQ8VHM+Li4uLCBMYXN0JiYgbGFzdCkgewotICAgIHJldHVy
biBzdGQ6OmZvcndhcmQ8TGFzdD4obGFzdCk7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZS4uLiBUcz4KLWF1dG8gZ2V0TGFzdEVsZW1lbnQoY29uc3QgVHMmLi4uIHRzKQotICAgIC0+IGRl
Y2x0eXBlKExhc3RFbGVtZW50SW1wbDxUcy4uLj46OmNhbGwodHMuLi4pKSB7Ci0gIHJldHVybiBM
YXN0RWxlbWVudEltcGw8VHMuLi4+OjpjYWxsKHRzLi4uKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
Li4uIFRzPgotc3RydWN0IExhc3RFbGVtZW50IDogc3RkOjpkZWNheTxkZWNsdHlwZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBMYXN0RWxlbWVudEltcGw8VHMuLi4+OjpjYWxsKHN0ZDo6ZGVj
bHZhbDxUcz4oKS4uLikpPiB7Ci19OwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGRldGFpbAot
Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29udmVyc2lvbnMgZnJvbSBpbnRlZ3JhbCB0
eXBlcyB0byBzdHJpbmcgdHlwZXMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWYgRk9M
TFlfSEFWRV9JTlQxMjhfVAotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBJbnRlZ2VyVHlwZT4KLWNvbnN0ZXhwciB1bnNpZ25lZCBpbnQKLWRpZ2l0c0Vub3VnaCgpIHsK
LSAgcmV0dXJuICh1bnNpZ25lZCBpbnQpKGNlaWwoc2l6ZW9mKEludGVnZXJUeXBlKSAqIENIQVJf
QklUICogTV9MTjIgLyBNX0xOMTApKTsKLX0KLQotaW5saW5lIHNpemVfdAotdW5zYWZlVGVsZXNj
b3BlMTI4KGNoYXIgKiBidWZmZXIsIHNpemVfdCByb29tLCB1bnNpZ25lZCBfX2ludDEyOCB4KSB7
Ci0gIHR5cGVkZWYgdW5zaWduZWQgX19pbnQxMjggVXNyYzsKLSAgc2l6ZV90IHAgPSByb29tIC0g
MTsKLQotICB3aGlsZSAoeCA+PSAoVXNyYygxKSA8PCA2NCkpIHsgLy8gVXNpbmcgMTI4LWJpdCBk
aXZpc2lvbiB3aGlsZSBuZWVkZWQKLSAgICBjb25zdCBhdXRvIHkgPSB4IC8gMTA7Ci0gICAgY29u
c3QgYXV0byBkaWdpdCA9IHggJSAxMDsKLQotICAgIGJ1ZmZlcltwLS1dID0gJzAnICsgZGlnaXQ7
Ci0gICAgeCA9IHk7Ci0gIH0KLQotICB1aW50NjRfdCB4eCA9IHg7IC8vIE1vdmluZyB0byBmYXN0
ZXIgNjQtYml0IGRpdmlzaW9uIHRoZXJlYWZ0ZXIKLQotICB3aGlsZSAoeHggPj0gMTApIHsKLSAg
ICBjb25zdCBhdXRvIHkgPSB4eCAvIDEwVUxMOwotICAgIGNvbnN0IGF1dG8gZGlnaXQgPSB4eCAl
IDEwVUxMOwotCi0gICAgYnVmZmVyW3AtLV0gPSAnMCcgKyBkaWdpdDsKLSAgICB4eCA9IHk7Ci0g
IH0KLQotICBidWZmZXJbcF0gPSAnMCcgKyB4eDsKLQotICByZXR1cm4gcDsKLX0KLQotfQotI2Vu
ZGlmCi0KLS8qKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgYmFzZSAx
MCByZXByZXNlbnRhdGlvbiBvZiBhbgotICogdWludDY0X3QuIFVzZWZ1bCBmb3IgcHJlYWxsb2Nh
dGluZyBidWZmZXJzIGFuZCBzdWNoLiBJdCdzIGFsc28gdXNlZAotICogaW50ZXJuYWxseSwgc2Vl
IGJlbG93LiBNZWFzdXJlbWVudHMgc3VnZ2VzdCB0aGF0IGRlZmluaW5nIGEKLSAqIHNlcGFyYXRl
IG92ZXJsb2FkIGZvciAzMi1iaXQgaW50ZWdlcnMgaXMgbm90IHdvcnRod2hpbGUuCi0gKi8KLQot
aW5saW5lIHVpbnQzMl90IGRpZ2l0czEwKHVpbnQ2NF90IHYpIHsKLSNpZmRlZiBfX3g4Nl82NF9f
Ci0KLSAgLy8gRm9yIHRoaXMgYXJjaCB3ZSBjYW4gZ2V0IGEgbGl0dGxlIGhlbHAgZnJvbSBzcGVj
aWFsaXplZCBDUFUgaW5zdHJ1Y3Rpb25zCi0gIC8vIHdoaWNoIGNhbiBjb3VudCBsZWFkaW5nIHpl
cm9lczsgNjQgbWludXMgdGhhdCBpcyBhcHB4LiBsb2cgKGJhc2UgMikuCi0gIC8vIFVzZSB0aGF0
IHRvIGFwcHJveGltYXRlIGJhc2UtMTAgZGlnaXRzIChsb2dfMTApIGFuZCB0aGVuIGFkanVzdCBp
ZiBuZWVkZWQuCi0KLSAgLy8gMTBeaSwgZGVmaW5lZCBmb3IgaSAwIHRocm91Z2ggMTkuCi0gIC8v
IFRoaXMgaXMgMjAgKiA4ID09IDE2MCBieXRlcywgd2hpY2ggZml0cyBuZWF0bHkgaW50byA1IGNh
Y2hlIGxpbmVzCi0gIC8vIChhc3N1bWluZyBhIGNhY2hlIGxpbmUgc2l6ZSBvZiA2NCkuCi0gIHN0
YXRpYyBjb25zdCB1aW50NjRfdCBwb3dlcnNPZjEwWzIwXSBGT0xMWV9BTElHTkVEKDY0KSA9IHsK
LSAgICAgIDEsCi0gICAgICAxMCwKLSAgICAgIDEwMCwKLSAgICAgIDEwMDAsCi0gICAgICAxMDAw
MCwKLSAgICAgIDEwMDAwMCwKLSAgICAgIDEwMDAwMDAsCi0gICAgICAxMDAwMDAwMCwKLSAgICAg
IDEwMDAwMDAwMCwKLSAgICAgIDEwMDAwMDAwMDAsCi0gICAgICAxMDAwMDAwMDAwMCwKLSAgICAg
IDEwMDAwMDAwMDAwMCwKLSAgICAgIDEwMDAwMDAwMDAwMDAsCi0gICAgICAxMDAwMDAwMDAwMDAw
MCwKLSAgICAgIDEwMDAwMDAwMDAwMDAwMCwKLSAgICAgIDEwMDAwMDAwMDAwMDAwMDAsCi0gICAg
ICAxMDAwMDAwMDAwMDAwMDAwMCwKLSAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMCwKLSAgICAgIDEw
MDAwMDAwMDAwMDAwMDAwMDAsCi0gICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMFVMLAotICB9Owot
Ci0gIC8vICJjb3VudCBsZWFkaW5nIHplcm9lcyIgb3BlcmF0aW9uIG5vdCB2YWxpZDsgZm9yIDA7
IHNwZWNpYWwgY2FzZSB0aGlzLgotICBpZiBVTkxJS0VMWSAoISB2KSB7Ci0gICAgcmV0dXJuIDE7
Ci0gIH0KLQotICAvLyBiaXRzIGlzIGluIHRoZSBiYWxscGFyayBvZiBsb2dfMih2KS4KLSAgY29u
c3QgdWludDhfdCBsZWFkaW5nWmVyb2VzID0gX19idWlsdGluX2NsemxsKHYpOwotICBjb25zdCBh
dXRvIGJpdHMgPSA2MyAtIGxlYWRpbmdaZXJvZXM7Ci0KLSAgLy8gYXBwcm94aW1hdGUgbG9nXzEw
KHYpID09IGxvZ18xMCgyKSAqIGJpdHMuCi0gIC8vIEludGVnZXIgbWFnaWMgYmVsb3c6IDc3LzI1
NiBpcyBhcHB4LiAwLjMwMTAgKGxvZ18xMCgyKSkuCi0gIC8vIFRoZSArMSBpcyB0byBtYWtlIHRo
aXMgdGhlIGNlaWxpbmcgb2YgdGhlIGxvZ18xMCBlc3RpbWF0ZS4KLSAgY29uc3QgdWludDMyX3Qg
bWluTGVuZ3RoID0gMSArICgoYml0cyAqIDc3KSA+PiA4KTsKLQotICAvLyByZXR1cm4gdGhhdCBs
b2dfMTAgbG93ZXIgYm91bmQsIHBsdXMgYWRqdXN0IGlmIGlucHV0ID49IDEwXih0aGF0IGJvdW5k
KQotICAvLyBpbiBjYXNlIHRoZXJlJ3MgYSBzbWFsbCBlcnJvciBhbmQgd2UgbWlzanVkZ2VkIGxl
bmd0aC4KLSAgcmV0dXJuIG1pbkxlbmd0aCArICh1aW50MzJfdCkgKFVOTElLRUxZICh2ID49IHBv
d2Vyc09mMTBbbWluTGVuZ3RoXSkpOwotCi0jZWxzZQotCi0gIHVpbnQzMl90IHJlc3VsdCA9IDE7
Ci0gIGZvciAoOzspIHsKLSAgICBpZiAoTElLRUxZKHYgPCAxMCkpIHJldHVybiByZXN1bHQ7Ci0g
ICAgaWYgKExJS0VMWSh2IDwgMTAwKSkgcmV0dXJuIHJlc3VsdCArIDE7Ci0gICAgaWYgKExJS0VM
WSh2IDwgMTAwMCkpIHJldHVybiByZXN1bHQgKyAyOwotICAgIGlmIChMSUtFTFkodiA8IDEwMDAw
KSkgcmV0dXJuIHJlc3VsdCArIDM7Ci0gICAgLy8gU2tpcCBhaGVhZCBieSA0IG9yZGVycyBvZiBt
YWduaXR1ZGUKLSAgICB2IC89IDEwMDAwVTsKLSAgICByZXN1bHQgKz0gNDsKLSAgfQotCi0jZW5k
aWYKLX0KLQotLyoqCi0gKiBDb3BpZXMgdGhlIEFTQ0lJIGJhc2UgMTAgcmVwcmVzZW50YXRpb24g
b2YgdiBpbnRvIGJ1ZmZlciBhbmQKLSAqIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0
dGVuLiBEb2VzIE5PVCBhcHBlbmQgYSBcMC4gQXNzdW1lcwotICogdGhlIGJ1ZmZlciBwb2ludHMg
dG8gZGlnaXRzMTAodikgYnl0ZXMgb2YgdmFsaWQgbWVtb3J5LiBOb3RlIHRoYXQKLSAqIHVpbnQ2
NCBuZWVkcyBhdCBtb3N0IDIwIGJ5dGVzLCB1aW50MzJfdCBuZWVkcyBhdCBtb3N0IDEwIGJ5dGVz
LAotICogdWludDE2X3QgbmVlZHMgYXQgbW9zdCA1IGJ5dGVzLCBhbmQgc28gb24uIE1lYXN1cmVt
ZW50cyBzdWdnZXN0Ci0gKiB0aGF0IGRlZmluaW5nIGEgc2VwYXJhdGUgb3ZlcmxvYWQgZm9yIDMy
LWJpdCBpbnRlZ2VycyBpcyBub3QKLSAqIHdvcnRod2hpbGUuCi0gKgotICogVGhpcyBwcmltaXRp
dmUgaXMgdW5zYWZlIGJlY2F1c2UgaXQgbWFrZXMgdGhlIHNpemUgYXNzdW1wdGlvbiBhbmQKLSAq
IGJlY2F1c2UgaXQgZG9lcyBub3QgYWRkIGEgdGVybWluYXRpbmcgXDAuCi0gKi8KLQotaW5saW5l
IHVpbnQzMl90IHVpbnQ2NFRvQnVmZmVyVW5zYWZlKHVpbnQ2NF90IHYsIGNoYXIgKmNvbnN0IGJ1
ZmZlcikgewotICBhdXRvIGNvbnN0IHJlc3VsdCA9IGRpZ2l0czEwKHYpOwotICAvLyBXQVJOSU5H
OiB1c2luZyBzaXplX3Qgb3IgcG9pbnRlciBhcml0aG1ldGljIGZvciBwb3Mgc2xvd3MgZG93bgot
ICAvLyB0aGUgbG9vcCBiZWxvdyAyMHguIFRoaXMgaXMgYmVjYXVzZSBzZXZlcmFsIDMyLWJpdCBv
cHMgY2FuIGJlCi0gIC8vIGRvbmUgaW4gcGFyYWxsZWwsIGJ1dCBvbmx5IGZld2VyIDY0LWJpdCBv
bmVzLgotICB1aW50MzJfdCBwb3MgPSByZXN1bHQgLSAxOwotICB3aGlsZSAodiA+PSAxMCkgewot
ICAgIC8vIEtlZXAgdGhlc2UgdG9nZXRoZXIgc28gYSBwZWVwaG9sZSBvcHRpbWl6YXRpb24gInNl
ZXMiIHRoZW0gYW5kCi0gICAgLy8gY29tcHV0ZXMgdGhlbSBpbiBvbmUgc2hvdC4KLSAgICBhdXRv
IGNvbnN0IHEgPSB2IC8gMTA7Ci0gICAgYXV0byBjb25zdCByID0gc3RhdGljX2Nhc3Q8Y2hhcj4o
diAlIDEwKTsKLSAgICBidWZmZXJbcG9zLS1dID0gJzAnICsgcjsKLSAgICB2ID0gcTsKLSAgfQot
ICAvLyBMYXN0IGRpZ2l0IGlzIHRyaXZpYWwgdG8gaGFuZGxlCi0gIGJ1ZmZlcltwb3NdID0gc3Rh
dGljX2Nhc3Q8Y2hhcj4odikgKyAnMCc7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICog
QSBzaW5nbGUgY2hhciBnZXRzIGFwcGVuZGVkLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgVGd0Pgot
dm9pZCB0b0FwcGVuZChjaGFyIHZhbHVlLCBUZ3QgKiByZXN1bHQpIHsKLSAgKnJlc3VsdCArPSB2
YWx1ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgVD4KLWNvbnN0ZXhwciB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjwKLSAgc3RkOjppc19zYW1lPFQsIGNoYXI+Ojp2YWx1ZSwKLSAgc2l6ZV90Pjo6dHlw
ZQotZXN0aW1hdGVTcGFjZU5lZWRlZChUKSB7Ci0gIHJldHVybiAxOwotfQotCi0vKioKLSAqIEV2
ZXJ5dGhpbmcgaW1wbGljaXRseSBjb252ZXJ0aWJsZSB0byBjb25zdCBjaGFyKiBnZXRzIGFwcGVu
ZGVkLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgVGd0LCBjbGFzcyBTcmM+Ci10eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjwKLSAgc3RkOjppc19jb252ZXJ0aWJsZTxTcmMsIGNvbnN0IGNoYXIqPjo6dmFs
dWUKLSAgJiYgSXNTb21lU3RyaW5nPFRndD46OnZhbHVlPjo6dHlwZQotdG9BcHBlbmQoU3JjIHZh
bHVlLCBUZ3QgKiByZXN1bHQpIHsKLSAgLy8gVHJlYXQgbnVsbCBwb2ludGVycyBsaWtlIGFuIGVt
cHR5IHN0cmluZywgYXMgaW46Ci0gIC8vIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiwgY29uc3Qg
Y2hhciopLgotICBjb25zdCBjaGFyKiBjID0gdmFsdWU7Ci0gIGlmIChjKSB7Ci0gICAgcmVzdWx0
LT5hcHBlbmQodmFsdWUpOwotICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBTcmM+Ci10eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnZlcnRpYmxlPFNyYywgY29uc3QgY2hhcio+Ojp2
YWx1ZSwgc2l6ZV90Pjo6Ci0gICAgdHlwZQotICAgIGVzdGltYXRlU3BhY2VOZWVkZWQoU3JjIHZh
bHVlKSB7Ci0gIGNvbnN0IGNoYXIgKmMgPSB2YWx1ZTsKLSAgaWYgKGMpIHsKLSAgICByZXR1cm4g
Zm9sbHk6OlN0cmluZ1BpZWNlKHZhbHVlKS5zaXplKCk7Ci0gIH07Ci0gIHJldHVybiAwOwotfQot
Ci10ZW1wbGF0ZTxjbGFzcyBTcmM+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgKHN0ZDo6
aXNfY29udmVydGlibGU8U3JjLCBmb2xseTo6U3RyaW5nUGllY2U+Ojp2YWx1ZSB8fAotICBJc1Nv
bWVTdHJpbmc8U3JjPjo6dmFsdWUpICYmCi0gICFzdGQ6OmlzX2NvbnZlcnRpYmxlPFNyYywgY29u
c3QgY2hhcio+Ojp2YWx1ZSwKLSAgc2l6ZV90Pjo6dHlwZQotZXN0aW1hdGVTcGFjZU5lZWRlZChT
cmMgdmFsdWUpIHsKLSAgcmV0dXJuIGZvbGx5OjpTdHJpbmdQaWVjZSh2YWx1ZSkuc2l6ZSgpOwot
fQotCi10ZW1wbGF0ZSA8PgotaW5saW5lIHNpemVfdCBlc3RpbWF0ZVNwYWNlTmVlZGVkKHN0ZDo6
bnVsbHB0cl90IC8qIHZhbHVlICovKSB7Ci0gIHJldHVybiAwOwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBTcmM+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgc3RkOjppc19wb2ludGVyPFNyYz46
OnZhbHVlICYmCi0gIElzU29tZVN0cmluZzxzdGQ6OnJlbW92ZV9wb2ludGVyPFNyYz4+Ojp2YWx1
ZSwKLSAgc2l6ZV90Pjo6dHlwZQotZXN0aW1hdGVTcGFjZU5lZWRlZChTcmMgdmFsdWUpIHsKLSAg
cmV0dXJuIHZhbHVlLT5zaXplKCk7Ci19Ci0KLS8qKgotICogU3RyaW5ncyBnZXQgYXBwZW5kZWQs
IHRvby4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIFRndCwgY2xhc3MgU3JjPgotdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8Ci0gIElzU29tZVN0cmluZzxTcmM+Ojp2YWx1ZSAmJiBJc1NvbWVTdHJpbmc8
VGd0Pjo6dmFsdWU+Ojp0eXBlCi10b0FwcGVuZChjb25zdCBTcmMmIHZhbHVlLCBUZ3QgKiByZXN1
bHQpIHsKLSAgcmVzdWx0LT5hcHBlbmQodmFsdWUpOwotfQotCi0vKioKLSAqIGFuZCBTdHJpbmdQ
aWVjZSBvYmplY3RzIHRvbwotICovCi10ZW1wbGF0ZSA8Y2xhc3MgVGd0PgotdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8Ci0gICBJc1NvbWVTdHJpbmc8VGd0Pjo6dmFsdWU+Ojp0eXBlCi10b0FwcGVu
ZChTdHJpbmdQaWVjZSB2YWx1ZSwgVGd0ICogcmVzdWx0KSB7Ci0gIHJlc3VsdC0+YXBwZW5kKHZh
bHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpKTsKLX0KLQotLyoqCi0gKiBUaGVyZSdzIG5vIGltcGxp
Y2l0IGNvbnZlcnNpb24gZnJvbSBmYnN0cmluZyB0byBvdGhlciBzdHJpbmcgdHlwZXMsCi0gKiBz
byBtYWtlIGEgc3BlY2lhbGl6YXRpb24uCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBUZ3Q+Ci10eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgIElzU29tZVN0cmluZzxUZ3Q+Ojp2YWx1ZT46OnR5cGUK
LXRvQXBwZW5kKGNvbnN0IGZic3RyaW5nJiB2YWx1ZSwgVGd0ICogcmVzdWx0KSB7Ci0gIHJlc3Vs
dC0+YXBwZW5kKHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpKTsKLX0KLQotI2lmIEZPTExZX0hB
VkVfSU5UMTI4X1QKLS8qKgotICogU3BlY2lhbCBoYW5kbGluZyBmb3IgMTI4IGJpdCBpbnRlZ2Vy
cy4KLSAqLwotCi10ZW1wbGF0ZSA8Y2xhc3MgVGd0Pgotdm9pZAotdG9BcHBlbmQoX19pbnQxMjgg
dmFsdWUsIFRndCAqIHJlc3VsdCkgewotICB0eXBlZGVmIHVuc2lnbmVkIF9faW50MTI4IFVzcmM7
Ci0gIGNoYXIgYnVmZmVyW2RldGFpbDo6ZGlnaXRzRW5vdWdoPHVuc2lnbmVkIF9faW50MTI4Pigp
ICsgMV07Ci0gIHNpemVfdCBwOwotCi0gIGlmICh2YWx1ZSA8IDApIHsKLSAgICBwID0gZGV0YWls
Ojp1bnNhZmVUZWxlc2NvcGUxMjgoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgLVVzcmModmFsdWUp
KTsKLSAgICBidWZmZXJbLS1wXSA9ICctJzsKLSAgfSBlbHNlIHsKLSAgICBwID0gZGV0YWlsOjp1
bnNhZmVUZWxlc2NvcGUxMjgoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgdmFsdWUpOwotICB9Ci0K
LSAgcmVzdWx0LT5hcHBlbmQoYnVmZmVyICsgcCwgYnVmZmVyICsgc2l6ZW9mKGJ1ZmZlcikpOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVGd0Pgotdm9pZAotdG9BcHBlbmQodW5zaWduZWQgX19pbnQx
MjggdmFsdWUsIFRndCAqIHJlc3VsdCkgewotICBjaGFyIGJ1ZmZlcltkZXRhaWw6OmRpZ2l0c0Vu
b3VnaDx1bnNpZ25lZCBfX2ludDEyOD4oKV07Ci0gIHNpemVfdCBwOwotCi0gIHAgPSBkZXRhaWw6
OnVuc2FmZVRlbGVzY29wZTEyOChidWZmZXIsIHNpemVvZihidWZmZXIpLCB2YWx1ZSk7Ci0KLSAg
cmVzdWx0LT5hcHBlbmQoYnVmZmVyICsgcCwgYnVmZmVyICsgc2l6ZW9mKGJ1ZmZlcikpOwotfQot
Ci10ZW1wbGF0ZTxjbGFzcyBUPgotY29uc3RleHByIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAot
ICBzdGQ6OmlzX3NhbWU8VCwgX19pbnQxMjg+Ojp2YWx1ZSwKLSAgc2l6ZV90Pjo6dHlwZQotZXN0
aW1hdGVTcGFjZU5lZWRlZChUKSB7Ci0gIHJldHVybiBkZXRhaWw6OmRpZ2l0c0Vub3VnaDxfX2lu
dDEyOD4oKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgVD4KLWNvbnN0ZXhwciB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjwKLSAgc3RkOjppc19zYW1lPFQsIHVuc2lnbmVkIF9faW50MTI4Pjo6dmFsdWUs
Ci0gIHNpemVfdD46OnR5cGUKLWVzdGltYXRlU3BhY2VOZWVkZWQoVCkgewotICByZXR1cm4gZGV0
YWlsOjpkaWdpdHNFbm91Z2g8dW5zaWduZWQgX19pbnQxMjg+KCk7Ci19Ci0KLSNlbmRpZgotCi0v
KioKLSAqIGludDMyX3QgYW5kIGludDY0X3QgdG8gc3RyaW5nIChieSBhcHBlbmRpbmcpIGdvIHRo
cm91Z2ggaGVyZS4gVGhlCi0gKiByZXN1bHQgaXMgQVBQRU5ERUQgdG8gYSBwcmVleGlzdGluZyBz
dHJpbmcgcGFzc2VkIGFzIHRoZSBzZWNvbmQKLSAqIHBhcmFtZXRlci4gVGhpcyBzaG91bGQgYmUg
ZWZmaWNpZW50IHdpdGggZmJzdHJpbmcgYmVjYXVzZSBmYnN0cmluZwotICogaW5jdXJzIG5vIGR5
bmFtaWMgYWxsb2NhdGlvbiBiZWxvdyAyMyBieXRlcyBhbmQgbm8gbnVtYmVyIGhhcyBtb3JlCi0g
KiB0aGFuIDIyIGJ5dGVzIGluIGl0cyB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uICgyMCBmb3IgZGln
aXRzLCBvbmUgZm9yCi0gKiBzaWduLCBvbmUgZm9yIHRoZSB0ZXJtaW5hdGluZyAwKS4KLSAqLwot
dGVtcGxhdGUgPGNsYXNzIFRndCwgY2xhc3MgU3JjPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
Ci0gIHN0ZDo6aXNfaW50ZWdyYWw8U3JjPjo6dmFsdWUgJiYgc3RkOjppc19zaWduZWQ8U3JjPjo6
dmFsdWUgJiYKLSAgSXNTb21lU3RyaW5nPFRndD46OnZhbHVlICYmIHNpemVvZihTcmMpID49IDQ+
Ojp0eXBlCi10b0FwcGVuZChTcmMgdmFsdWUsIFRndCAqIHJlc3VsdCkgewotICBjaGFyIGJ1ZmZl
clsyMF07Ci0gIGlmICh2YWx1ZSA8IDApIHsKLSAgICByZXN1bHQtPnB1c2hfYmFjaygnLScpOwot
ICAgIHJlc3VsdC0+YXBwZW5kKAotICAgICAgICBidWZmZXIsCi0gICAgICAgIHVpbnQ2NFRvQnVm
ZmVyVW5zYWZlKH5zdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUpICsgMSwgYnVmZmVyKSk7Ci0g
IH0gZWxzZSB7Ci0gICAgcmVzdWx0LT5hcHBlbmQoYnVmZmVyLCB1aW50NjRUb0J1ZmZlclVuc2Fm
ZSh1aW50NjRfdCh2YWx1ZSksIGJ1ZmZlcikpOwotICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBT
cmM+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgc3RkOjppc19pbnRlZ3JhbDxTcmM+Ojp2
YWx1ZSAmJiBzdGQ6OmlzX3NpZ25lZDxTcmM+Ojp2YWx1ZQotICAmJiBzaXplb2YoU3JjKSA+PSA0
ICYmIHNpemVvZihTcmMpIDwgMTYsCi0gIHNpemVfdD46OnR5cGUKLWVzdGltYXRlU3BhY2VOZWVk
ZWQoU3JjIHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA8IDApIHsKLSAgICAvLyBXaGVuICJ2YWx1ZSIg
aXMgdGhlIHNtYWxsZXN0IG5lZ2F0aXZlLCBuZWdhdGluZyBpdCB3b3VsZCBldm9rZQotICAgIC8v
IHVuZGVmaW5lZCBiZWhhdmlvciwgc28sIGluc3RlYWQgb2Ygd3JpdGluZyAiLXZhbHVlIiBiZWxv
dywgd2Ugd3JpdGUKLSAgICAvLyAifnN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkgKyAxIgot
ICAgIHJldHVybiAxICsgZGlnaXRzMTAofnN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkgKyAx
KTsKLSAgfQotCi0gIHJldHVybiBkaWdpdHMxMChzdGF0aWNfY2FzdDx1aW50NjRfdD4odmFsdWUp
KTsKLX0KLQotLyoqCi0gKiBBcyBhYm92ZSwgYnV0IGZvciB1aW50MzJfdCBhbmQgdWludDY0X3Qu
Ci0gKi8KLXRlbXBsYXRlIDxjbGFzcyBUZ3QsIGNsYXNzIFNyYz4KLXR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPAotICBzdGQ6OmlzX2ludGVncmFsPFNyYz46OnZhbHVlICYmICFzdGQ6OmlzX3NpZ25l
ZDxTcmM+Ojp2YWx1ZQotICAmJiBJc1NvbWVTdHJpbmc8VGd0Pjo6dmFsdWUgJiYgc2l6ZW9mKFNy
YykgPj0gND46OnR5cGUKLXRvQXBwZW5kKFNyYyB2YWx1ZSwgVGd0ICogcmVzdWx0KSB7Ci0gIGNo
YXIgYnVmZmVyWzIwXTsKLSAgcmVzdWx0LT5hcHBlbmQoYnVmZmVyLCB1aW50NjRUb0J1ZmZlclVu
c2FmZSh2YWx1ZSwgYnVmZmVyKSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBTcmM+Ci10eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjwKLSAgc3RkOjppc19pbnRlZ3JhbDxTcmM+Ojp2YWx1ZSAmJiAhc3Rk
Ojppc19zaWduZWQ8U3JjPjo6dmFsdWUKLSAgJiYgc2l6ZW9mKFNyYykgPj0gNCAmJiBzaXplb2Yo
U3JjKSA8IDE2LAotICBzaXplX3Q+Ojp0eXBlCi1lc3RpbWF0ZVNwYWNlTmVlZGVkKFNyYyB2YWx1
ZSkgewotICByZXR1cm4gZGlnaXRzMTAodmFsdWUpOwotfQotCi0vKioKLSAqIEFsbCBzbWFsbCBz
aWduZWQgYW5kIHVuc2lnbmVkIGludGVnZXJzIHRvIHN0cmluZyBnbyB0aHJvdWdoIDMyLWJpdAot
ICogdHlwZXMgaW50MzJfdCBhbmQgdWludDMyX3QsIHJlc3BlY3RpdmVseS4KLSAqLwotdGVtcGxh
dGUgPGNsYXNzIFRndCwgY2xhc3MgU3JjPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gIHN0
ZDo6aXNfaW50ZWdyYWw8U3JjPjo6dmFsdWUKLSAgJiYgSXNTb21lU3RyaW5nPFRndD46OnZhbHVl
ICYmIHNpemVvZihTcmMpIDwgND46OnR5cGUKLXRvQXBwZW5kKFNyYyB2YWx1ZSwgVGd0ICogcmVz
dWx0KSB7Ci0gIHR5cGVkZWYgdHlwZW5hbWUKLSAgICBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6aXNf
c2lnbmVkPFNyYz46OnZhbHVlLCBpbnQ2NF90LCB1aW50NjRfdD46OnR5cGUKLSAgICBJbnRlcm1l
ZGlhdGU7Ci0gIHRvQXBwZW5kPFRndD4oc3RhdGljX2Nhc3Q8SW50ZXJtZWRpYXRlPih2YWx1ZSks
IHJlc3VsdCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBTcmM+Ci10eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjwKLSAgc3RkOjppc19pbnRlZ3JhbDxTcmM+Ojp2YWx1ZQotICAmJiBzaXplb2YoU3JjKSA8
IDQKLSAgJiYgIXN0ZDo6aXNfc2FtZTxTcmMsIGNoYXI+Ojp2YWx1ZSwKLSAgc2l6ZV90Pjo6dHlw
ZQotZXN0aW1hdGVTcGFjZU5lZWRlZChTcmMgdmFsdWUpIHsKLSAgdHlwZWRlZiB0eXBlbmFtZQot
ICAgIHN0ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19zaWduZWQ8U3JjPjo6dmFsdWUsIGludDY0X3Qs
IHVpbnQ2NF90Pjo6dHlwZQotICAgIEludGVybWVkaWF0ZTsKLSAgcmV0dXJuIGVzdGltYXRlU3Bh
Y2VOZWVkZWQoc3RhdGljX2Nhc3Q8SW50ZXJtZWRpYXRlPih2YWx1ZSkpOwotfQotCi0vKioKLSAq
IEVudW1lcmF0ZWQgdmFsdWVzIGdldCBhcHBlbmRlZCBhcyBpbnRlZ2Vycy4KLSAqLwotdGVtcGxh
dGUgPGNsYXNzIFRndCwgY2xhc3MgU3JjPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gIHN0
ZDo6aXNfZW51bTxTcmM+Ojp2YWx1ZSAmJiBJc1NvbWVTdHJpbmc8VGd0Pjo6dmFsdWU+Ojp0eXBl
Ci10b0FwcGVuZChTcmMgdmFsdWUsIFRndCAqIHJlc3VsdCkgewotICB0b0FwcGVuZCgKLSAgICAg
IHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPFNyYz46OnR5cGU+KHZh
bHVlKSwgcmVzdWx0KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFNyYz4KLXR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPAotICBzdGQ6OmlzX2VudW08U3JjPjo6dmFsdWUsIHNpemVfdD46OnR5cGUKLWVz
dGltYXRlU3BhY2VOZWVkZWQoU3JjIHZhbHVlKSB7Ci0gIHJldHVybiBlc3RpbWF0ZVNwYWNlTmVl
ZGVkKAotICAgICAgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8U3Jj
Pjo6dHlwZT4odmFsdWUpKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvbnZl
cnNpb25zIGZyb20gZmxvYXRpbmctcG9pbnQgdHlwZXMgdG8gc3RyaW5nIHR5cGVzLgotICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KLQotbmFtZXNwYWNlIGRldGFpbCB7Ci1jb25zdGV4cHIgaW50IGtD
b252TWF4RGVjaW1hbEluU2hvcnRlc3RMb3cgPSAtNjsKLWNvbnN0ZXhwciBpbnQga0NvbnZNYXhE
ZWNpbWFsSW5TaG9ydGVzdEhpZ2ggPSAyMTsKLX0gLy8gZm9sbHk6OmRldGFpbAotCi0vKiogV3Jh
cHBlciBhcm91bmQgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIgKiovCi10ZW1wbGF0ZSA8Y2xhc3Mg
VGd0LCBjbGFzcyBTcmM+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgc3RkOjppc19mbG9h
dGluZ19wb2ludDxTcmM+Ojp2YWx1ZQotICAmJiBJc1NvbWVTdHJpbmc8VGd0Pjo6dmFsdWU+Ojp0
eXBlCi10b0FwcGVuZCgKLSAgU3JjIHZhbHVlLAotICBUZ3QgKiByZXN1bHQsCi0gIGRvdWJsZV9j
b252ZXJzaW9uOjpEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RHRvYU1vZGUgbW9kZSwKLSAgdW5z
aWduZWQgaW50IG51bURpZ2l0cykgewotICB1c2luZyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNp
b247Ci0gIERvdWJsZVRvU3RyaW5nQ29udmVydGVyCi0gICAgY29udihEb3VibGVUb1N0cmluZ0Nv
bnZlcnRlcjo6Tk9fRkxBR1MsCi0gICAgICAgICAiSW5maW5pdHkiLCAiTmFOIiwgJ0UnLAotICAg
ICAgICAgZGV0YWlsOjprQ29udk1heERlY2ltYWxJblNob3J0ZXN0TG93LAotICAgICAgICAgZGV0
YWlsOjprQ29udk1heERlY2ltYWxJblNob3J0ZXN0SGlnaCwKLSAgICAgICAgIDYsICAgLy8gbWF4
IGxlYWRpbmcgcGFkZGluZyB6ZXJvcwotICAgICAgICAgMSk7ICAvLyBtYXggdHJhaWxpbmcgcGFk
ZGluZyB6ZXJvcwotICBjaGFyIGJ1ZmZlclsyNTZdOwotICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIo
YnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgRG91
YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OlNIT1JURVNUOgotICAgICAgY29udi5Ub1Nob3J0ZXN0KHZh
bHVlLCAmYnVpbGRlcik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIERvdWJsZVRvU3RyaW5nQ29u
dmVydGVyOjpGSVhFRDoKLSAgICAgIGNvbnYuVG9GaXhlZCh2YWx1ZSwgaW50KG51bURpZ2l0cyks
ICZidWlsZGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBDSEVDSyhtb2Rl
ID09IERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpQUkVDSVNJT04pOwotICAgICAgY29udi5Ub1By
ZWNpc2lvbih2YWx1ZSwgaW50KG51bURpZ2l0cyksICZidWlsZGVyKTsKLSAgICAgIGJyZWFrOwot
ICB9Ci0gIGNvbnN0IHNpemVfdCBsZW5ndGggPSBzaXplX3QoYnVpbGRlci5wb3NpdGlvbigpKTsK
LSAgYnVpbGRlci5GaW5hbGl6ZSgpOwotICByZXN1bHQtPmFwcGVuZChidWZmZXIsIGxlbmd0aCk7
Ci19Ci0KLS8qKgotICogQXMgYWJvdmUsIGJ1dCBmb3IgZmxvYXRpbmcgcG9pbnQKLSAqLwotdGVt
cGxhdGUgPGNsYXNzIFRndCwgY2xhc3MgU3JjPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0g
IHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8U3JjPjo6dmFsdWUKLSAgJiYgSXNTb21lU3RyaW5nPFRn
dD46OnZhbHVlPjo6dHlwZQotdG9BcHBlbmQoU3JjIHZhbHVlLCBUZ3QgKiByZXN1bHQpIHsKLSAg
dG9BcHBlbmQoCi0gICAgdmFsdWUsIHJlc3VsdCwgZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZVRv
U3RyaW5nQ29udmVydGVyOjpTSE9SVEVTVCwgMCk7Ci19Ci0KLS8qKgotICogVXBwZXIgYm91bmQg
b2YgdGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGZyb20KLSAqIERvdWJsZVRvU3RyaW5nQ29udmVy
dGVyOjpUb1Nob3J0ZXN0KGRvdWJsZSwgU3RyaW5nQnVpbGRlciopLAotICogYXMgdXNlZCBpbiB0
b0FwcGVuZChkb3VibGUsIHN0cmluZyopLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgU3JjPgotdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gIHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8U3JjPjo6dmFs
dWUsIHNpemVfdD46OnR5cGUKLWVzdGltYXRlU3BhY2VOZWVkZWQoU3JjIHZhbHVlKSB7Ci0gIC8v
IGtCYXNlMTBNYXhpbWFsTGVuZ3RoIGlzIDE3LiBXZSBhZGQgMSBmb3IgZGVjaW1hbCBwb2ludCwK
LSAgLy8gZS5nLiAxMC4wLzkgaXMgMTcgZGlnaXRzIGFuZCAxOCBjaGFyYWN0ZXJzLCBpbmNsdWRp
bmcgdGhlIGRlY2ltYWwgcG9pbnQuCi0gIGNvbnN0ZXhwciBpbnQga01heE1hbnRpc3NhU3BhY2Ug
PQotICAgIGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6a0Jhc2Ux
ME1heGltYWxMZW5ndGggKyAxOwotICAvLyBzdHJsZW4oIkUtIikgKyBkaWdpdHMxMChudW1lcmlj
X2xpbWl0czxkb3VibGU+OjptYXhfZXhwb25lbnQxMCkKLSAgY29uc3RleHByIGludCBrTWF4RXhw
b25lbnRTcGFjZSA9IDIgKyAzOwotICBzdGF0aWMgY29uc3QgaW50IGtNYXhQb3NpdGl2ZVNwYWNl
ID0gc3RkOjptYXgoewotICAgICAgLy8gRS5nLiAxLjExMTExMTExMTExMTExMTFFLTEwMC4KLSAg
ICAgIGtNYXhNYW50aXNzYVNwYWNlICsga01heEV4cG9uZW50U3BhY2UsCi0gICAgICAvLyBFLmcu
IDAuMDAwMDAxLjExMTExMTExMTExMTExMTEsIGlmIGtDb252TWF4RGVjaW1hbEluU2hvcnRlc3RM
b3cgaXMgLTYuCi0gICAgICBrTWF4TWFudGlzc2FTcGFjZSAtIGRldGFpbDo6a0NvbnZNYXhEZWNp
bWFsSW5TaG9ydGVzdExvdywKLSAgICAgIC8vIElmIGtDb252TWF4RGVjaW1hbEluU2hvcnRlc3RI
aWdoIGlzIDIxLCB0aGVuIDFlMjEgaXMgdGhlIHNtYWxsZXN0Ci0gICAgICAvLyBudW1iZXIgPiAx
IHdoaWNoIFRvU2hvcnRlc3Qgb3V0cHV0cyBpbiBleHBvbmVudGlhbCBub3RhdGlvbiwKLSAgICAg
IC8vIHNvIDIxIGlzIHRoZSBsb25nZXN0IG5vbi1leHBvbmVudGlhbCBudW1iZXIgPiAxLgotICAg
ICAgZGV0YWlsOjprQ29udk1heERlY2ltYWxJblNob3J0ZXN0SGlnaAotICAgIH0pOwotICByZXR1
cm4gc2l6ZV90KAotICAgICAga01heFBvc2l0aXZlU3BhY2UgKwotICAgICAgKHZhbHVlIDwgMCA/
IDEgOiAwKSk7IC8vICsxIGZvciBtaW51cyBzaWduLCBpZiBuZWdhdGl2ZQotfQotCi0vKioKLSAq
IFRoaXMgY2FuIGJlIHNwZWNpYWxpemVkLCB0b2dldGhlciB3aXRoIGFkZGluZyBzcGVjaWFsaXph
dGlvbgotICogZm9yIGVzdGltYXRlU3BhY2VOZWVkIGZvciB5b3VyIHR5cGUsIHNvIHRoYXQgd2Ug
YWxsb2NhdGUKLSAqIGFzIG11Y2ggYXMgeW91IG5lZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdAot
ICovCi10ZW1wbGF0ZTxjbGFzcyBTcmM+Ci1zdHJ1Y3QgSGFzTGVuZ3RoRXN0aW1hdG9yIDogc3Rk
OjpmYWxzZV90eXBlIHt9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgU3JjPgotY29uc3RleHByIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAhc3RkOjppc19mdW5kYW1lbnRhbDxTcmM+Ojp2YWx1ZQot
I2lmIEZPTExZX0hBVkVfSU5UMTI4X1QKLSAgLy8gT24gT1NYIDEwLjEwLCBpc19mdW5kYW1lbnRh
bDxfX2ludDEyOD4gaXMgZmFsc2UgOi1PCi0gICYmICFzdGQ6OmlzX3NhbWU8X19pbnQxMjgsIFNy
Yz46OnZhbHVlCi0gICYmICFzdGQ6OmlzX3NhbWU8dW5zaWduZWQgX19pbnQxMjgsIFNyYz46OnZh
bHVlCi0jZW5kaWYKLSAgJiYgIUlzU29tZVN0cmluZzxTcmM+Ojp2YWx1ZQotICAmJiAhc3RkOjpp
c19jb252ZXJ0aWJsZTxTcmMsIGNvbnN0IGNoYXIqPjo6dmFsdWUKLSAgJiYgIXN0ZDo6aXNfY29u
dmVydGlibGU8U3JjLCBTdHJpbmdQaWVjZT46OnZhbHVlCi0gICYmICFzdGQ6OmlzX2VudW08U3Jj
Pjo6dmFsdWUKLSAgJiYgIUhhc0xlbmd0aEVzdGltYXRvcjxTcmM+Ojp2YWx1ZSwKLSAgc2l6ZV90
Pjo6dHlwZQotZXN0aW1hdGVTcGFjZU5lZWRlZChjb25zdCBTcmMmKSB7Ci0gIHJldHVybiBzaXpl
b2YoU3JjKSArIDE7IC8vIGR1bWJlc3QgYmVzdCBlZmZvcnQgZXZlcj8KLX0KLQotbmFtZXNwYWNl
IGRldGFpbCB7Ci0KLXRlbXBsYXRlIDxjbGFzcyBUZ3Q+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NvbWVTdHJpbmc8VGd0Pjo6dmFsdWUsIHNpemVfdD46OnR5cGUKLWVzdGltYXRlU3BhY2VU
b1Jlc2VydmUoc2l6ZV90IHNvZmFyLCBUZ3QqKSB7Ci0gIHJldHVybiBzb2ZhcjsKLX0KLQotdGVt
cGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIFRzPgotc2l6ZV90IGVzdGltYXRlU3BhY2VUb1Jlc2Vy
dmUoc2l6ZV90IHNvZmFyLCBjb25zdCBUJiB2LCBjb25zdCBUcyYuLi4gdnMpIHsKLSAgcmV0dXJu
IGVzdGltYXRlU3BhY2VUb1Jlc2VydmUoc29mYXIgKyBlc3RpbWF0ZVNwYWNlTmVlZGVkKHYpLCB2
cy4uLik7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzLi4uVHM+Ci12b2lkIHJlc2VydmVJblRhcmdldChj
b25zdCBUcyYuLi52cykgewotICBnZXRMYXN0RWxlbWVudCh2cy4uLiktPnJlc2VydmUoZXN0aW1h
dGVTcGFjZVRvUmVzZXJ2ZSgwLCB2cy4uLikpOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWxpbWl0
ZXIsIGNsYXNzLi4uVHM+Ci12b2lkIHJlc2VydmVJblRhcmdldERlbGltKGNvbnN0IERlbGltaXRl
ciYgZCwgY29uc3QgVHMmLi4udnMpIHsKLSAgc3RhdGljX2Fzc2VydChzaXplb2YuLi4odnMpID49
IDIsICJOZWVkcyBhdCBsZWFzdCAyIGFyZ3MiKTsKLSAgc2l6ZV90IGZvcmRlbGltID0gKHNpemVv
Zi4uLih2cykgLSAyKSAqCi0gICAgICBlc3RpbWF0ZVNwYWNlVG9SZXNlcnZlKDAsIGQsIHN0YXRp
Y19jYXN0PHN0ZDo6c3RyaW5nKj4obnVsbHB0cikpOwotICBnZXRMYXN0RWxlbWVudCh2cy4uLikt
PnJlc2VydmUoZXN0aW1hdGVTcGFjZVRvUmVzZXJ2ZShmb3JkZWxpbSwgdnMuLi4pKTsKLX0KLQot
LyoqCi0gKiBWYXJpYWRpYyBiYXNlIGNhc2U6IGFwcGVuZCBvbmUgZWxlbWVudAotICovCi10ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVGd0PgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gIElz
U29tZVN0cmluZzx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPFRndD46OnR5cGU+Ci0gIDo6
dmFsdWU+Ojp0eXBlCi10b0FwcGVuZFN0ckltcGwoY29uc3QgVCYgdiwgVGd0IHJlc3VsdCkgewot
ICB0b0FwcGVuZCh2LCByZXN1bHQpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4g
VHM+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICBzaXplb2YuLi4oVHMpID49IDIgJiYK
LSAgICBJc1NvbWVTdHJpbmc8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjwKLSAgICAgICAg
dHlwZW5hbWUgZGV0YWlsOjpMYXN0RWxlbWVudDxjb25zdCBUcyYuLi4+Ojp0eXBlPjo6dHlwZT46
OnZhbHVlPjo6dHlwZQotdG9BcHBlbmRTdHJJbXBsKGNvbnN0IFQmIHYsIGNvbnN0IFRzJi4uLiB2
cykgewotICB0b0FwcGVuZCh2LCBnZXRMYXN0RWxlbWVudCh2cy4uLikpOwotICB0b0FwcGVuZFN0
ckltcGwodnMuLi4pOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgRGVsaW1pdGVyLCBjbGFzcyBULCBj
bGFzcyBUZ3Q+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICBJc1NvbWVTdHJpbmc8dHlw
ZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxUZ3Q+Ojp0eXBlPjo6dmFsdWU+Ojp0eXBlCi10b0Fw
cGVuZERlbGltU3RySW1wbChjb25zdCBEZWxpbWl0ZXImIC8qIGRlbGltICovLCBjb25zdCBUJiB2
LCBUZ3QgcmVzdWx0KSB7Ci0gIHRvQXBwZW5kKHYsIHJlc3VsdCk7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBEZWxpbWl0ZXIsIGNsYXNzIFQsIGNsYXNzLi4uIFRzPgotdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8Ci0gICAgc2l6ZW9mLi4uKFRzKSA+PSAyICYmCi0gICAgSXNTb21lU3RyaW5nPHR5cGVu
YW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8Ci0gICAgICAgIHR5cGVuYW1lIGRldGFpbDo6TGFzdEVs
ZW1lbnQ8Y29uc3QgVHMmLi4uPjo6dHlwZT46OnR5cGU+Ojp2YWx1ZT46OnR5cGUKLXRvQXBwZW5k
RGVsaW1TdHJJbXBsKGNvbnN0IERlbGltaXRlciYgZGVsaW0sIGNvbnN0IFQmIHYsIGNvbnN0IFRz
Ji4uLiB2cykgewotICAvLyB3ZSBhcmUgcmVhbGx5IGNhcmVmdWwgaGVyZSwgY2FsbGluZyB0b0Fw
cGVuZCB3aXRoIGp1c3Qgb25lIGVsZW1lbnQgZG9lcwotICAvLyBub3QgdHJ5IHRvIGVzdGltYXRl
IHNwYWNlIG5lZWRlZCAoYXMgd2UgYWxyZWFkeSBkaWQgdGhhdCkuIElmIHdlIGNhbGwKLSAgLy8g
dG9BcHBlbmQodiwgZGVsaW0sIC4uLi4pIHdlIHdvdWxkIGRvIHVubmVjZXNhcnkgc2l6ZSBjYWxj
dWxhdGlvbgotICB0b0FwcGVuZCh2LCBkZXRhaWw6OmdldExhc3RFbGVtZW50KHZzLi4uKSk7Ci0g
IHRvQXBwZW5kKGRlbGltLCBkZXRhaWw6OmdldExhc3RFbGVtZW50KHZzLi4uKSk7Ci0gIHRvQXBw
ZW5kRGVsaW1TdHJJbXBsKGRlbGltLCB2cy4uLik7Ci19Ci19IC8vIGZvbGx5OjpkZXRhaWwKLQot
Ci0vKioKLSAqIFZhcmlhZGljIGNvbnZlcnNpb24gdG8gc3RyaW5nLiBBcHBlbmRzIGVhY2ggZWxl
bWVudCBpbiB0dXJuLgotICogSWYgd2UgaGF2ZSB0d28gb3IgbW9yZSB0aGluZ3MgdG8gYXBwZW5k
LCB3ZSBpdCB3aWxsIG5vdCByZXNlcnZlCi0gKiB0aGUgc3BhY2UgZm9yIHRoZW0gYW5kIHdpbGwg
ZGVwZW5kIG9uIHN0cmluZ3MgZXhwb25lbnRpYWwgZ3Jvd3RoLgotICogSWYgeW91IGp1c3QgYXBw
ZW5kIG9uY2UgY29uc2lkZXIgdXNpbmcgdG9BcHBlbmRGaXQgd2hpY2ggcmVzZXJ2ZXMKLSAqIHRo
ZSBzcGFjZSBuZWVkZWQgKGJ1dCBkb2VzIG5vdCBoYXZlIGV4cG9uZW50aWFsIGFzIGEgcmVzdWx0
KS4KLSAqCi0gKiBDdXN0b20gaW1wbGVtZW50YXRpb25zIG9mIHRvQXBwZW5kKCkgY2FuIGJlIHBy
b3ZpZGVkIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhcwotICogdGhlIHR5cGUgdG8gY3VzdG9taXpl
IHByaW50aW5nLiBlc3RpbWF0ZVNwYWNlTmVlZCgpIG1heSBhbHNvIGJlIHByb3ZpZGVkIHRvCi0g
KiBhdm9pZCByZWFsbG9jYXRpb25zIGluIHRvQXBwZW5kRml0KCk6Ci0gKgotICogbmFtZXNwYWNl
IG90aGVyX25hbWVzcGFjZSB7Ci0gKgotICogdGVtcGxhdGUgPGNsYXNzIFN0cmluZz4KLSAqIHZv
aWQgdG9BcHBlbmQoY29uc3QgT3RoZXJUeXBlJiwgU3RyaW5nKiBvdXQpOwotICoKLSAqIC8vIG9w
dGlvbmFsCi0gKiBzaXplX3QgZXN0aW1hdGVTcGFjZU5lZWRlZChjb25zdCBPdGhlclR5cGUmKTsK
LSAqCi0gKiB9Ci0gKi8KLXRlbXBsYXRlIDxjbGFzcy4uLiBUcz4KLXR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPAotICAgIHNpemVvZi4uLihUcykgPj0gMyAmJgotICAgIElzU29tZVN0cmluZzx0eXBl
bmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPAotICAgICAgICB0eXBlbmFtZSBkZXRhaWw6Okxhc3RF
bGVtZW50PGNvbnN0IFRzJi4uLj46OnR5cGU+Ojp0eXBlPjo6dmFsdWU+Ojp0eXBlCi10b0FwcGVu
ZChjb25zdCBUcyYuLi4gdnMpIHsKLSAgOjpmb2xseTo6ZGV0YWlsOjp0b0FwcGVuZFN0ckltcGwo
dnMuLi4pOwotfQotCi0jaWZkZWYgX01TQ19WRVIKLS8vIFNwZWNpYWwgY2FzZSBwaWRfdCBvbiBN
U1ZDLCBiZWNhdXNlIGl0J3MgYSB2b2lkKiByYXRoZXIgdGhhbiBhbgotLy8gaW50ZWdyYWwgdHlw
ZS4gV2UgY2FuJ3QgZG8gYSBnbG9iYWwgc3BlY2lhbCBjYXNlIGJlY2F1c2UgdGhpcyBpcyBhbHJl
YWR5Ci0vLyBkYW5nZXJvdXMgZW5vdWdoIChhcyBtb3N0IHBvaW50ZXJzIHdpbGwgaW1wbGljaXRs
eSBjb252ZXJ0IHRvIGEgdm9pZCopCi0vLyBqdXN0IGRvaW5nIGl0IGZvciBNU1ZDLgotdGVtcGxh
dGUgPGNsYXNzIFRndD4KLXZvaWQgdG9BcHBlbmQoY29uc3QgcGlkX3QgYSwgVGd0KiByZXMpIHsK
LSAgdG9BcHBlbmQodWludDY0X3QoYSksIHJlcyk7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBTcGVj
aWFsIHZlcnNpb24gb2YgdGhlIGNhbGwgdGhhdCBwcmVhbGxvY2F0ZXMgZXhhY2x0eSBhcyBtdWNo
IG1lbW9yeQotICogYXMgbmVlZCBmb3IgYXJndW1lbnRzIHRvIGJlIHN0b3JlZCBpbiB0YXJnZXQu
IFRoaXMgbWVhbnMgd2UgYXJlCi0gKiBub3QgZG9pbmcgZXhwb25lbnRpYWwgZ3Jvd3RoIHdoZW4g
d2UgYXBwZW5kLiBJZiB5b3UgYXJlIHVzaW5nIGl0Ci0gKiBpbiBhIGxvb3AgeW91IGFyZSBhaW1p
bmcgYXQgeW91ciBmb290IHdpdGggYSBiaWcgcGVyZi1kZXN0cm95aW5nCi0gKiBiYXpvb2thLgot
ICogT24gdGhlIG90aGVyIGhhbmQgaWYgeW91IGFyZSBhcHBlbmRpbmcgdG8gYSBzdHJpbmcgb25j
ZSwgdGhpcwotICogd2lsbCBwcm9iYWJseSBzYXZlIGEgZmV3IGNhbGxzIHRvIG1hbGxvYy4KLSAq
LwotdGVtcGxhdGUgPGNsYXNzLi4uIFRzPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTb21l
U3RyaW5nPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8Ci0gICAgdHlwZW5hbWUgZGV0YWls
OjpMYXN0RWxlbWVudDxjb25zdCBUcyYuLi4+Ojp0eXBlPjo6dHlwZT46OnZhbHVlPjo6dHlwZQot
dG9BcHBlbmRGaXQoY29uc3QgVHMmLi4uIHZzKSB7Ci0gIDo6Zm9sbHk6OmRldGFpbDo6cmVzZXJ2
ZUluVGFyZ2V0KHZzLi4uKTsKLSAgdG9BcHBlbmQodnMuLi4pOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVHM+Ci12b2lkIHRvQXBwZW5kRml0KGNvbnN0IFRzJikge30KLQotLyoqCi0gKiBWYXJpYWRp
YyBiYXNlIGNhc2U6IGRvIG5vdGhpbmcuCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBUZ3Q+Ci10eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NvbWVTdHJpbmc8VGd0Pjo6dmFsdWU+Ojp0eXBlIHRvQXBw
ZW5kKAotICAgIFRndCogLyogcmVzdWx0ICovKSB7fQotCi0vKioKLSAqIFZhcmlhZGljIGJhc2Ug
Y2FzZTogZG8gbm90aGluZy4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIERlbGltaXRlciwgY2xhc3Mg
VGd0PgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTb21lU3RyaW5nPFRndD46OnZhbHVlPjo6
dHlwZSB0b0FwcGVuZERlbGltKAotICAgIGNvbnN0IERlbGltaXRlciYgLyogZGVsaW0gKi8sIFRn
dCogLyogcmVzdWx0ICovKSB7fQotCi0vKioKLSAqIDEgZWxlbWVudDogc2FtZSBhcyB0b0FwcGVu
ZC4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIERlbGltaXRlciwgY2xhc3MgVCwgY2xhc3MgVGd0Pgot
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTb21lU3RyaW5nPFRndD46OnZhbHVlPjo6dHlwZSB0
b0FwcGVuZERlbGltKAotICAgIGNvbnN0IERlbGltaXRlciYgLyogZGVsaW0gKi8sIGNvbnN0IFQm
IHYsIFRndCogdGd0KSB7Ci0gIHRvQXBwZW5kKHYsIHRndCk7Ci19Ci0KLS8qKgotICogQXBwZW5k
IHRvIHN0cmluZyB3aXRoIGEgZGVsaW1pdGVyIGluIGJldHdlZW4gZWxlbWVudHMuIENoZWNrIG91
dAotICogY29tbWVudHMgZm9yIHRvQXBwZW5kIGZvciBkZXRhaWxzIGFib3V0IG1lbW9yeSBhbGxv
Y2F0aW9uLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgRGVsaW1pdGVyLCBjbGFzcy4uLiBUcz4KLXR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgIHNpemVvZi4uLihUcykgPj0gMyAmJgotICAgIElz
U29tZVN0cmluZzx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPAotICAgICAgICB0eXBlbmFt
ZSBkZXRhaWw6Okxhc3RFbGVtZW50PGNvbnN0IFRzJi4uLj46OnR5cGU+Ojp0eXBlPjo6dmFsdWU+
Ojp0eXBlCi10b0FwcGVuZERlbGltKGNvbnN0IERlbGltaXRlciYgZGVsaW0sIGNvbnN0IFRzJi4u
LiB2cykgewotICBkZXRhaWw6OnRvQXBwZW5kRGVsaW1TdHJJbXBsKGRlbGltLCB2cy4uLik7Ci19
Ci0KLS8qKgotICogRGV0YWlsIGluIGNvbW1lbnQgZm9yIHRvQXBwZW5kRml0Ci0gKi8KLXRlbXBs
YXRlIDxjbGFzcyBEZWxpbWl0ZXIsIGNsYXNzLi4uIFRzPgotdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SXNTb21lU3RyaW5nPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8Ci0gICAgdHlwZW5h
bWUgZGV0YWlsOjpMYXN0RWxlbWVudDxjb25zdCBUcyYuLi4+Ojp0eXBlPjo6dHlwZT46OnZhbHVl
Pjo6dHlwZQotdG9BcHBlbmREZWxpbUZpdChjb25zdCBEZWxpbWl0ZXImIGRlbGltLCBjb25zdCBU
cyYuLi4gdnMpIHsKLSAgZGV0YWlsOjpyZXNlcnZlSW5UYXJnZXREZWxpbShkZWxpbSwgdnMuLi4p
OwotICB0b0FwcGVuZERlbGltKGRlbGltLCB2cy4uLik7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBE
ZSwgY2xhc3MgVHM+Ci12b2lkIHRvQXBwZW5kRGVsaW1GaXQoY29uc3QgRGUmLCBjb25zdCBUcyYp
IHt9Ci0KLS8qKgotICogdG88U29tZVN0cmluZz4odjEsIHYyLCAuLi4pIHVzZXMgdG9BcHBlbmQo
KSAoc2VlIGJlbG93KSBhcyBiYWNrLWVuZAotICogZm9yIGFsbCB0eXBlcy4KLSAqLwotdGVtcGxh
dGUgPGNsYXNzIFRndCwgY2xhc3MuLi4gVHM+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAg
ICBJc1NvbWVTdHJpbmc8VGd0Pjo6dmFsdWUgJiYKLSAgICAgICAgKHNpemVvZi4uLihUcykgIT0g
MSB8fAotICAgICAgICAgIXN0ZDo6aXNfc2FtZTxUZ3QsIHR5cGVuYW1lIGRldGFpbDo6TGFzdEVs
ZW1lbnQ8Y29uc3QgVHMmLi4uPjo6dHlwZT46OgotICAgICAgICAgICAgIHZhbHVlKSwKLSAgICBU
Z3Q+Ojp0eXBlCi10byhjb25zdCBUcyYuLi4gdnMpIHsKLSAgVGd0IHJlc3VsdDsKLSAgdG9BcHBl
bmRGaXQodnMuLi4sICZyZXN1bHQpOwotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIFNw
ZWNpYWwgdmVyc2lvbiBvZiB0bzxTb21lU3RyaW5nPiBmb3IgZmxvYXRpbmcgcG9pbnQuIFdoZW4g
Y2FsbGluZwotICogZm9sbHk6OnRvPFNvbWVTdHJpbmc+KGRvdWJsZSksIGdlbmVyaWMgaW1wbGVt
ZW50YXRpb24gYWJvdmUgd2lsbAotICogZmlyc3RseSByZXNlcnZlIDI0IChvciAyNSB3aGVuIG5l
Z2F0aXZlIHZhbHVlKSBieXRlcy4gVGhpcyB3aWxsCi0gKiBpbnRyb2R1Y2UgYSBtYWxsb2MgY2Fs
bCBmb3IgbW9zdCBtYWluc3RyZWFtIHN0cmluZyBpbXBsZW1lbnRhdGlvbnMuCi0gKgotICogQnV0
IGZvciBtb3N0IGNhc2VzLCBhIGZsb2F0aW5nIHBvaW50IGRvZXNuJ3QgbmVlZCAyNCAob3IgMjUp
IGJ5dGVzIHRvCi0gKiBiZSBjb252ZXJ0ZWQgYXMgYSBzdHJpbmcuCi0gKgotICogVGhpcyBzcGVj
aWFsIHZlcnNpb24gd2lsbCBub3QgZG8gc3RyaW5nIHJlc2VydmUuCi0gKi8KLXRlbXBsYXRlIDxj
bGFzcyBUZ3QsIGNsYXNzIFNyYz4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgIElzU29t
ZVN0cmluZzxUZ3Q+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PFNyYz46OnZhbHVl
LAotICAgIFRndD46OnR5cGUKLXRvKFNyYyB2YWx1ZSkgewotICBUZ3QgcmVzdWx0OwotICB0b0Fw
cGVuZCh2YWx1ZSwgJnJlc3VsdCk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogdG9E
ZWxpbTxTb21lU3RyaW5nPihTb21lU3RyaW5nIHN0cikgcmV0dXJucyBpdHNlbGYuCi0gKi8KLXRl
bXBsYXRlIDxjbGFzcyBUZ3QsIGNsYXNzIERlbGltLCBjbGFzcyBTcmM+Ci10eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjwKLSAgICBJc1NvbWVTdHJpbmc8VGd0Pjo6dmFsdWUgJiYKLSAgICAgICAgc3Rk
Ojppc19zYW1lPFRndCwgdHlwZW5hbWUgc3RkOjpkZWNheTxTcmM+Ojp0eXBlPjo6dmFsdWUsCi0g
ICAgVGd0Pjo6dHlwZQotdG9EZWxpbShjb25zdCBEZWxpbSYgLyogZGVsaW0gKi8sIFNyYyYmIHZh
bHVlKSB7Ci0gIHJldHVybiBzdGQ6OmZvcndhcmQ8U3JjPih2YWx1ZSk7Ci19Ci0KLS8qKgotICog
dG9EZWxpbTxTb21lU3RyaW5nPihkZWxpbSwgdjEsIHYyLCAuLi4pIHVzZXMgdG9BcHBlbmREZWxp
bSgpIGFzCi0gKiBiYWNrLWVuZCBmb3IgYWxsIHR5cGVzLgotICovCi10ZW1wbGF0ZSA8Y2xhc3Mg
VGd0LCBjbGFzcyBEZWxpbSwgY2xhc3MuLi4gVHM+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwK
LSAgICBJc1NvbWVTdHJpbmc8VGd0Pjo6dmFsdWUgJiYKLSAgICAgICAgKHNpemVvZi4uLihUcykg
IT0gMSB8fAotICAgICAgICAgIXN0ZDo6aXNfc2FtZTxUZ3QsIHR5cGVuYW1lIGRldGFpbDo6TGFz
dEVsZW1lbnQ8Y29uc3QgVHMmLi4uPjo6dHlwZT46OgotICAgICAgICAgICAgIHZhbHVlKSwKLSAg
ICBUZ3Q+Ojp0eXBlCi10b0RlbGltKGNvbnN0IERlbGltJiBkZWxpbSwgY29uc3QgVHMmLi4uIHZz
KSB7Ci0gIFRndCByZXN1bHQ7Ci0gIHRvQXBwZW5kRGVsaW1GaXQoZGVsaW0sIHZzLi4uLCAmcmVz
dWx0KTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAq
IENvbnZlcnNpb25zIGZyb20gc3RyaW5nIHR5cGVzIHRvIGludGVncmFsIHR5cGVzLgotICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KLQotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLUV4cGVjdGVkPGJvb2ws
IENvbnZlcnNpb25Db2RlPiBzdHJfdG9fYm9vbChTdHJpbmdQaWVjZSogc3JjKSBub2V4Y2VwdDsK
LQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1FeHBlY3RlZDxULCBDb252ZXJzaW9uQ29kZT4gc3Ry
X3RvX2Zsb2F0aW5nKFN0cmluZ1BpZWNlKiBzcmMpIG5vZXhjZXB0OwotCi1leHRlcm4gdGVtcGxh
dGUgRXhwZWN0ZWQ8ZmxvYXQsIENvbnZlcnNpb25Db2RlPiBzdHJfdG9fZmxvYXRpbmc8ZmxvYXQ+
KAotICAgIFN0cmluZ1BpZWNlKiBzcmMpIG5vZXhjZXB0OwotZXh0ZXJuIHRlbXBsYXRlIEV4cGVj
dGVkPGRvdWJsZSwgQ29udmVyc2lvbkNvZGU+IHN0cl90b19mbG9hdGluZzxkb3VibGU+KAotICAg
IFN0cmluZ1BpZWNlKiBzcmMpIG5vZXhjZXB0OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVGd0PgotRXhw
ZWN0ZWQ8VGd0LCBDb252ZXJzaW9uQ29kZT4gZGlnaXRzX3RvKGNvbnN0IGNoYXIqIGIsIGNvbnN0
IGNoYXIqIGUpIG5vZXhjZXB0OwotCi1leHRlcm4gdGVtcGxhdGUgRXhwZWN0ZWQ8Y2hhciwgQ29u
dmVyc2lvbkNvZGU+IGRpZ2l0c190bzxjaGFyPigKLSAgICBjb25zdCBjaGFyKiwKLSAgICBjb25z
dCBjaGFyKikgbm9leGNlcHQ7Ci1leHRlcm4gdGVtcGxhdGUgRXhwZWN0ZWQ8c2lnbmVkIGNoYXIs
IENvbnZlcnNpb25Db2RlPiBkaWdpdHNfdG88c2lnbmVkIGNoYXI+KAotICAgIGNvbnN0IGNoYXIq
LAotICAgIGNvbnN0IGNoYXIqKSBub2V4Y2VwdDsKLWV4dGVybiB0ZW1wbGF0ZSBFeHBlY3RlZDx1
bnNpZ25lZCBjaGFyLCBDb252ZXJzaW9uQ29kZT4KLWRpZ2l0c190bzx1bnNpZ25lZCBjaGFyPihj
b25zdCBjaGFyKiwgY29uc3QgY2hhciopIG5vZXhjZXB0OwotCi1leHRlcm4gdGVtcGxhdGUgRXhw
ZWN0ZWQ8c2hvcnQsIENvbnZlcnNpb25Db2RlPiBkaWdpdHNfdG88c2hvcnQ+KAotICAgIGNvbnN0
IGNoYXIqLAotICAgIGNvbnN0IGNoYXIqKSBub2V4Y2VwdDsKLWV4dGVybiB0ZW1wbGF0ZSBFeHBl
Y3RlZDx1bnNpZ25lZCBzaG9ydCwgQ29udmVyc2lvbkNvZGU+Ci1kaWdpdHNfdG88dW5zaWduZWQg
c2hvcnQ+KGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikgbm9leGNlcHQ7Ci0KLWV4dGVybiB0ZW1w
bGF0ZSBFeHBlY3RlZDxpbnQsIENvbnZlcnNpb25Db2RlPiBkaWdpdHNfdG88aW50PigKLSAgICBj
b25zdCBjaGFyKiwKLSAgICBjb25zdCBjaGFyKikgbm9leGNlcHQ7Ci1leHRlcm4gdGVtcGxhdGUg
RXhwZWN0ZWQ8dW5zaWduZWQgaW50LCBDb252ZXJzaW9uQ29kZT4gZGlnaXRzX3RvPHVuc2lnbmVk
IGludD4oCi0gICAgY29uc3QgY2hhciosCi0gICAgY29uc3QgY2hhciopIG5vZXhjZXB0OwotCi1l
eHRlcm4gdGVtcGxhdGUgRXhwZWN0ZWQ8bG9uZywgQ29udmVyc2lvbkNvZGU+IGRpZ2l0c190bzxs
b25nPigKLSAgICBjb25zdCBjaGFyKiwKLSAgICBjb25zdCBjaGFyKikgbm9leGNlcHQ7Ci1leHRl
cm4gdGVtcGxhdGUgRXhwZWN0ZWQ8dW5zaWduZWQgbG9uZywgQ29udmVyc2lvbkNvZGU+Ci1kaWdp
dHNfdG88dW5zaWduZWQgbG9uZz4oY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSBub2V4Y2VwdDsK
LQotZXh0ZXJuIHRlbXBsYXRlIEV4cGVjdGVkPGxvbmcgbG9uZywgQ29udmVyc2lvbkNvZGU+IGRp
Z2l0c190bzxsb25nIGxvbmc+KAotICAgIGNvbnN0IGNoYXIqLAotICAgIGNvbnN0IGNoYXIqKSBu
b2V4Y2VwdDsKLWV4dGVybiB0ZW1wbGF0ZSBFeHBlY3RlZDx1bnNpZ25lZCBsb25nIGxvbmcsIENv
bnZlcnNpb25Db2RlPgotZGlnaXRzX3RvPHVuc2lnbmVkIGxvbmcgbG9uZz4oY29uc3QgY2hhcios
IGNvbnN0IGNoYXIqKSBub2V4Y2VwdDsKLQotI2lmIEZPTExZX0hBVkVfSU5UMTI4X1QKLWV4dGVy
biB0ZW1wbGF0ZSBFeHBlY3RlZDxfX2ludDEyOCwgQ29udmVyc2lvbkNvZGU+IGRpZ2l0c190bzxf
X2ludDEyOD4oCi0gICAgY29uc3QgY2hhciosCi0gICAgY29uc3QgY2hhciopIG5vZXhjZXB0Owot
ZXh0ZXJuIHRlbXBsYXRlIEV4cGVjdGVkPHVuc2lnbmVkIF9faW50MTI4LCBDb252ZXJzaW9uQ29k
ZT4KLWRpZ2l0c190bzx1bnNpZ25lZCBfX2ludDEyOD4oY29uc3QgY2hhciosIGNvbnN0IGNoYXIq
KSBub2V4Y2VwdDsKLSNlbmRpZgotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLUV4cGVjdGVkPFQsIENv
bnZlcnNpb25Db2RlPiBzdHJfdG9faW50ZWdyYWwoU3RyaW5nUGllY2UqIHNyYykgbm9leGNlcHQ7
Ci0KLWV4dGVybiB0ZW1wbGF0ZSBFeHBlY3RlZDxjaGFyLCBDb252ZXJzaW9uQ29kZT4gc3RyX3Rv
X2ludGVncmFsPGNoYXI+KAotICAgIFN0cmluZ1BpZWNlKiBzcmMpIG5vZXhjZXB0OwotZXh0ZXJu
IHRlbXBsYXRlIEV4cGVjdGVkPHNpZ25lZCBjaGFyLCBDb252ZXJzaW9uQ29kZT4KLXN0cl90b19p
bnRlZ3JhbDxzaWduZWQgY2hhcj4oU3RyaW5nUGllY2UqIHNyYykgbm9leGNlcHQ7Ci1leHRlcm4g
dGVtcGxhdGUgRXhwZWN0ZWQ8dW5zaWduZWQgY2hhciwgQ29udmVyc2lvbkNvZGU+Ci1zdHJfdG9f
aW50ZWdyYWw8dW5zaWduZWQgY2hhcj4oU3RyaW5nUGllY2UqIHNyYykgbm9leGNlcHQ7Ci0KLWV4
dGVybiB0ZW1wbGF0ZSBFeHBlY3RlZDxzaG9ydCwgQ29udmVyc2lvbkNvZGU+IHN0cl90b19pbnRl
Z3JhbDxzaG9ydD4oCi0gICAgU3RyaW5nUGllY2UqIHNyYykgbm9leGNlcHQ7Ci1leHRlcm4gdGVt
cGxhdGUgRXhwZWN0ZWQ8dW5zaWduZWQgc2hvcnQsIENvbnZlcnNpb25Db2RlPgotc3RyX3RvX2lu
dGVncmFsPHVuc2lnbmVkIHNob3J0PihTdHJpbmdQaWVjZSogc3JjKSBub2V4Y2VwdDsKLQotZXh0
ZXJuIHRlbXBsYXRlIEV4cGVjdGVkPGludCwgQ29udmVyc2lvbkNvZGU+IHN0cl90b19pbnRlZ3Jh
bDxpbnQ+KAotICAgIFN0cmluZ1BpZWNlKiBzcmMpIG5vZXhjZXB0OwotZXh0ZXJuIHRlbXBsYXRl
IEV4cGVjdGVkPHVuc2lnbmVkIGludCwgQ29udmVyc2lvbkNvZGU+Ci1zdHJfdG9faW50ZWdyYWw8
dW5zaWduZWQgaW50PihTdHJpbmdQaWVjZSogc3JjKSBub2V4Y2VwdDsKLQotZXh0ZXJuIHRlbXBs
YXRlIEV4cGVjdGVkPGxvbmcsIENvbnZlcnNpb25Db2RlPiBzdHJfdG9faW50ZWdyYWw8bG9uZz4o
Ci0gICAgU3RyaW5nUGllY2UqIHNyYykgbm9leGNlcHQ7Ci1leHRlcm4gdGVtcGxhdGUgRXhwZWN0
ZWQ8dW5zaWduZWQgbG9uZywgQ29udmVyc2lvbkNvZGU+Ci1zdHJfdG9faW50ZWdyYWw8dW5zaWdu
ZWQgbG9uZz4oU3RyaW5nUGllY2UqIHNyYykgbm9leGNlcHQ7Ci0KLWV4dGVybiB0ZW1wbGF0ZSBF
eHBlY3RlZDxsb25nIGxvbmcsIENvbnZlcnNpb25Db2RlPiBzdHJfdG9faW50ZWdyYWw8bG9uZyBs
b25nPigKLSAgICBTdHJpbmdQaWVjZSogc3JjKSBub2V4Y2VwdDsKLWV4dGVybiB0ZW1wbGF0ZSBF
eHBlY3RlZDx1bnNpZ25lZCBsb25nIGxvbmcsIENvbnZlcnNpb25Db2RlPgotc3RyX3RvX2ludGVn
cmFsPHVuc2lnbmVkIGxvbmcgbG9uZz4oU3RyaW5nUGllY2UqIHNyYykgbm9leGNlcHQ7Ci0KLSNp
ZiBGT0xMWV9IQVZFX0lOVDEyOF9UCi1leHRlcm4gdGVtcGxhdGUgRXhwZWN0ZWQ8X19pbnQxMjgs
IENvbnZlcnNpb25Db2RlPiBzdHJfdG9faW50ZWdyYWw8X19pbnQxMjg+KAotICAgIFN0cmluZ1Bp
ZWNlKiBzcmMpIG5vZXhjZXB0OwotZXh0ZXJuIHRlbXBsYXRlIEV4cGVjdGVkPHVuc2lnbmVkIF9f
aW50MTI4LCBDb252ZXJzaW9uQ29kZT4KLXN0cl90b19pbnRlZ3JhbDx1bnNpZ25lZCBfX2ludDEy
OD4oU3RyaW5nUGllY2UqIHNyYykgbm9leGNlcHQ7Ci0jZW5kaWYKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci10eXBlbmFtZSBzdGQ6OgotICAgIGVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgYm9v
bD46OnZhbHVlLCBFeHBlY3RlZDxULCBDb252ZXJzaW9uQ29kZT4+Ojp0eXBlCi0gICAgY29udmVy
dFRvKFN0cmluZ1BpZWNlKiBzcmMpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIHN0cl90b19ib29sKHNy
Yyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
Ci0gICAgc3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWUsCi0gICAgRXhwZWN0ZWQ8VCwg
Q29udmVyc2lvbkNvZGU+Pjo6dHlwZQotY29udmVydFRvKFN0cmluZ1BpZWNlKiBzcmMpIG5vZXhj
ZXB0IHsKLSAgcmV0dXJuIHN0cl90b19mbG9hdGluZzxUPihzcmMpOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgIHN0ZDo6aXNfaW50ZWdy
YWw8VD46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgYm9vbD46OnZhbHVlLAotICAgIEV4cGVj
dGVkPFQsIENvbnZlcnNpb25Db2RlPj46OnR5cGUKLWNvbnZlcnRUbyhTdHJpbmdQaWVjZSogc3Jj
KSBub2V4Y2VwdCB7Ci0gIHJldHVybiBzdHJfdG9faW50ZWdyYWw8VD4oc3JjKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgZGV0YWlsCi0KLS8qKgotICogU3RyaW5nIHJlcHJlc2VudGVkIGFzIGEgcGFp
ciBvZiBwb2ludGVycyB0byBjaGFyIHRvIHVuc2lnbmVkCi0gKiBpbnRlZ3JhbHMuIEFzc3VtZXMg
Tk8gd2hpdGVzcGFjZSBiZWZvcmUgb3IgYWZ0ZXIuCi0gKi8KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
Z3Q+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICBzdGQ6OmlzX2ludGVncmFsPFRndD46
OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VGd0LCBib29sPjo6dmFsdWUsCi0gICAgRXhwZWN0ZWQ8
VGd0LCBDb252ZXJzaW9uQ29kZT4+Ojp0eXBlCi10cnlUbyhjb25zdCBjaGFyKiBiLCBjb25zdCBj
aGFyKiBlKSB7Ci0gIHJldHVybiBkZXRhaWw6OmRpZ2l0c190bzxUZ3Q+KGIsIGUpOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVGd0PgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gICAgc3Rk
Ojppc19pbnRlZ3JhbDxUZ3Q+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFRndCwgYm9vbD46OnZh
bHVlLAotICAgIFRndD46OnR5cGUKLXRvKGNvbnN0IGNoYXIqIGIsIGNvbnN0IGNoYXIqIGUpIHsK
LSAgcmV0dXJuIHRyeVRvPFRndD4oYiwgZSkudGhlbk9yVGhyb3coCi0gICAgICBbXShUZ3QgcmVz
KSB7IHJldHVybiByZXM7IH0sCi0gICAgICBbPV0oQ29udmVyc2lvbkNvZGUgY29kZSkgewotICAg
ICAgICByZXR1cm4gbWFrZUNvbnZlcnNpb25FcnJvcihjb2RlLCBTdHJpbmdQaWVjZShiLCBlKSk7
Ci0gICAgICB9KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvbnZlcnNpb25z
IGZyb20gc3RyaW5nIHR5cGVzIHRvIGFyaXRobWV0aWMgdHlwZXMuCi0gKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwotCi0vKioKLSAqIFBhcnNpbmcgc3RyaW5ncyB0byBudW1lcmljIHR5cGVzLgotICov
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVGd0PgotRk9MTFlfTk9ESVNDQVJEIGlubGluZSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICBzdGQ6OmlzX2FyaXRobWV0aWM8VGd0Pjo6dmFsdWUsCi0g
ICAgRXhwZWN0ZWQ8U3RyaW5nUGllY2UsIENvbnZlcnNpb25Db2RlPj46OnR5cGUKLXBhcnNlVG8o
U3RyaW5nUGllY2Ugc3JjLCBUZ3QmIG91dCkgewotICByZXR1cm4gZGV0YWlsOjpjb252ZXJ0VG88
VGd0Pigmc3JjKS50aGVuKAotICAgICAgWyZdKFRndCByZXMpIHsgcmV0dXJuIHZvaWQob3V0ID0g
cmVzKSwgc3JjOyB9KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEludGVncmFs
IC8gRmxvYXRpbmcgUG9pbnQgdG8gaW50ZWdyYWwgLyBGbG9hdGluZyBQb2ludAotICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLQotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLS8qKgotICogQm9vbCB0byBp
bnRlZ3JhbC9mbG9hdCBkb2Vzbid0IG5lZWQgYW55IHNwZWNpYWwgY2hlY2tzLCBhbmQgdGhpcwot
ICogb3ZlcmxvYWQgbWVhbnMgd2UgYXJlbid0IHRyeWluZyB0byBzZWUgaWYgYSBib29sIGlzIGxl
c3MgdGhhbgotICogYW4gaW50ZWdlci4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIFRndD4KLXR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICFzdGQ6OmlzX3NhbWU8VGd0LCBib29sPjo6dmFsdWUg
JiYKLSAgICAgICAgKHN0ZDo6aXNfaW50ZWdyYWw8VGd0Pjo6dmFsdWUgfHwgc3RkOjppc19mbG9h
dGluZ19wb2ludDxUZ3Q+Ojp2YWx1ZSksCi0gICAgRXhwZWN0ZWQ8VGd0LCBDb252ZXJzaW9uQ29k
ZT4+Ojp0eXBlCi1jb252ZXJ0VG8oY29uc3QgYm9vbCYgdmFsdWUpIG5vZXhjZXB0IHsKLSAgcmV0
dXJuIHN0YXRpY19jYXN0PFRndD4odmFsdWUgPyAxIDogMCk7Ci19Ci0KLS8qKgotICogQ2hlY2tl
ZCBjb252ZXJzaW9uIGZyb20gaW50ZWdyYWwgdG8gaW50ZWdyYWwuIFRoZSBjaGVja3MgYXJlIG9u
bHkKLSAqIHBlcmZvcm1lZCB3aGVuIG1lYW5pbmdmdWwsIGUuZy4gY29udmVyc2lvbiBmcm9tIGlu
dCB0byBsb25nIGdvZXMKLSAqIHVuY2hlY2tlZC4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIFRndCwg
Y2xhc3MgU3JjPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gICAgc3RkOjppc19pbnRlZ3Jh
bDxTcmM+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFRndCwgU3JjPjo6dmFsdWUgJiYKLSAgICAg
ICAgIXN0ZDo6aXNfc2FtZTxUZ3QsIGJvb2w+Ojp2YWx1ZSAmJgotICAgICAgICBzdGQ6OmlzX2lu
dGVncmFsPFRndD46OnZhbHVlLAotICAgIEV4cGVjdGVkPFRndCwgQ29udmVyc2lvbkNvZGU+Pjo6
dHlwZQotY29udmVydFRvKGNvbnN0IFNyYyYgdmFsdWUpIG5vZXhjZXB0IHsKLSAgLyogc3RhdGlj
ICovIGlmICgKLSAgICAgIGZvbGx5OjpfdDxzdGQ6Om1ha2VfdW5zaWduZWQ8VGd0Pj4oc3RkOjpu
dW1lcmljX2xpbWl0czxUZ3Q+OjptYXgoKSkgPAotICAgICAgZm9sbHk6Ol90PHN0ZDo6bWFrZV91
bnNpZ25lZDxTcmM+PihzdGQ6Om51bWVyaWNfbGltaXRzPFNyYz46Om1heCgpKSkgewotICAgIGlm
IChncmVhdGVyX3RoYW48VGd0LCBzdGQ6Om51bWVyaWNfbGltaXRzPFRndD46Om1heCgpPih2YWx1
ZSkpIHsKLSAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChDb252ZXJzaW9uQ29kZTo6QVJJVEhf
UE9TSVRJVkVfT1ZFUkZMT1cpOwotICAgIH0KLSAgfQotICAvKiBzdGF0aWMgKi8gaWYgKAotICAg
ICAgc3RkOjppc19zaWduZWQ8U3JjPjo6dmFsdWUgJiYKLSAgICAgICghc3RkOjppc19zaWduZWQ8
VGd0Pjo6dmFsdWUgfHwgc2l6ZW9mKFNyYykgPiBzaXplb2YoVGd0KSkpIHsKLSAgICBpZiAobGVz
c190aGFuPFRndCwgc3RkOjpudW1lcmljX2xpbWl0czxUZ3Q+OjptaW4oKT4odmFsdWUpKSB7Ci0g
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQ29udmVyc2lvbkNvZGU6OkFSSVRIX05FR0FUSVZF
X09WRVJGTE9XKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHN0YXRpY19jYXN0PFRndD4odmFsdWUp
OwotfQotCi0vKioKLSAqIENoZWNrZWQgY29udmVyc2lvbiBmcm9tIGZsb2F0aW5nIHRvIGZsb2F0
aW5nLiBUaGUgY2hlY2tzIGFyZSBvbmx5Ci0gKiBwZXJmb3JtZWQgd2hlbiBtZWFuaW5nZnVsLCBl
LmcuIGNvbnZlcnNpb24gZnJvbSBmbG9hdCB0byBkb3VibGUgZ29lcwotICogdW5jaGVja2VkLgot
ICovCi10ZW1wbGF0ZSA8Y2xhc3MgVGd0LCBjbGFzcyBTcmM+Ci10eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjwKLSAgICBzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PFRndD46OnZhbHVlICYmIHN0ZDo6aXNf
ZmxvYXRpbmdfcG9pbnQ8U3JjPjo6dmFsdWUgJiYKLSAgICAgICAgIXN0ZDo6aXNfc2FtZTxUZ3Qs
IFNyYz46OnZhbHVlLAotICAgIEV4cGVjdGVkPFRndCwgQ29udmVyc2lvbkNvZGU+Pjo6dHlwZQot
Y29udmVydFRvKGNvbnN0IFNyYyYgdmFsdWUpIG5vZXhjZXB0IHsKLSAgLyogc3RhdGljICovIGlm
ICgKLSAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8VGd0Pjo6bWF4KCkgPCBzdGQ6Om51bWVyaWNf
bGltaXRzPFNyYz46Om1heCgpKSB7Ci0gICAgaWYgKHZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0
czxUZ3Q+OjptYXgoKSkgewotICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKENvbnZlcnNpb25D
b2RlOjpBUklUSF9QT1NJVElWRV9PVkVSRkxPVyk7Ci0gICAgfQotICAgIGlmICh2YWx1ZSA8IHN0
ZDo6bnVtZXJpY19saW1pdHM8VGd0Pjo6bG93ZXN0KCkpIHsKLSAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChDb252ZXJzaW9uQ29kZTo6QVJJVEhfTkVHQVRJVkVfT1ZFUkZMT1cpOwotICAgIH0K
LSAgfQotICByZXR1cm4gc3RhdGljX2Nhc3Q8VGd0Pih2YWx1ZSk7Ci19Ci0KLS8qKgotICogQ2hl
Y2sgaWYgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBjYW4gc2FmZWx5IGJlIGNvbnZlcnRlZCB0byBh
bgotICogaW50ZWdlciB2YWx1ZSB3aXRob3V0IHRyaWdnZXJpbmcgdW5kZWZpbmVkIGJlaGF2aW91
ci4KLSAqLwotdGVtcGxhdGUgPHR5cGVuYW1lIFRndCwgdHlwZW5hbWUgU3JjPgotaW5saW5lIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgIHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8U3JjPjo6
dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUZ3Q+Ojp2YWx1ZSAmJgotICAgICAgICAhc3RkOjpp
c19zYW1lPFRndCwgYm9vbD46OnZhbHVlLAotICAgIGJvb2w+Ojp0eXBlCi1jaGVja0NvbnZlcnNp
b24oY29uc3QgU3JjJiB2YWx1ZSkgewotICBjb25zdGV4cHIgU3JjIHRndE1heEFzU3JjID0gc3Rh
dGljX2Nhc3Q8U3JjPihzdGQ6Om51bWVyaWNfbGltaXRzPFRndD46Om1heCgpKTsKLSAgY29uc3Rl
eHByIFNyYyB0Z3RNaW5Bc1NyYyA9IHN0YXRpY19jYXN0PFNyYz4oc3RkOjpudW1lcmljX2xpbWl0
czxUZ3Q+OjptaW4oKSk7Ci0gIGlmICh2YWx1ZSA+PSB0Z3RNYXhBc1NyYykgewotICAgIGlmICh2
YWx1ZSA+IHRndE1heEFzU3JjKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNv
bnN0IFNyYyBtbWF4ID0gZm9sbHk6Om5leHRhZnRlcih0Z3RNYXhBc1NyYywgU3JjKCkpOwotICAg
IGlmIChzdGF0aWNfY2FzdDxUZ3Q+KHZhbHVlIC0gbW1heCkgPgotICAgICAgICBzdGQ6Om51bWVy
aWNfbGltaXRzPFRndD46Om1heCgpIC0gc3RhdGljX2Nhc3Q8VGd0PihtbWF4KSkgewotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdGQ6OmlzX3NpZ25lZDxUZ3Q+Ojp2
YWx1ZSAmJiB2YWx1ZSA8PSB0Z3RNaW5Bc1NyYykgewotICAgIGlmICh2YWx1ZSA8IHRndE1pbkFz
U3JjKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNvbnN0IFNyYyBtbWluID0g
Zm9sbHk6Om5leHRhZnRlcih0Z3RNaW5Bc1NyYywgU3JjKCkpOwotICAgIGlmIChzdGF0aWNfY2Fz
dDxUZ3Q+KHZhbHVlIC0gbW1pbikgPAotICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPFRndD46
Om1pbigpIC0gc3RhdGljX2Nhc3Q8VGd0PihtbWluKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gSW50ZWdlcnMgY2FuIGFsd2F5cyBz
YWZlbHkgYmUgY29udmVydGVkIHRvIGZsb2F0aW5nIHBvaW50IHZhbHVlcwotdGVtcGxhdGUgPHR5
cGVuYW1lIFRndCwgdHlwZW5hbWUgU3JjPgotY29uc3RleHByIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPAotICAgIHN0ZDo6aXNfaW50ZWdyYWw8U3JjPjo6dmFsdWUgJiYgc3RkOjppc19mbG9hdGlu
Z19wb2ludDxUZ3Q+Ojp2YWx1ZSwKLSAgICBib29sPjo6dHlwZQotY2hlY2tDb252ZXJzaW9uKGNv
bnN0IFNyYyYpIHsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEFsc28sIGZsb2F0aW5nIHBvaW50
IHZhbHVlcyBjYW4gYWx3YXlzIGJlIHNhZmVseSBjb252ZXJ0ZWQgdG8gYm9vbAotLy8gUGVyIHRo
ZSBzdGFuZGFyZCwgYW55IGZsb2F0aW5nIHBvaW50IHZhbHVlIHRoYXQgaXMgbm90IHplcm8gd2ls
bCB5aWVsZCB0cnVlCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVGd0LCB0eXBlbmFtZSBTcmM+Ci1jb25z
dGV4cHIgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gICAgc3RkOjppc19mbG9hdGluZ19wb2lu
dDxTcmM+Ojp2YWx1ZSAmJiBzdGQ6OmlzX3NhbWU8VGd0LCBib29sPjo6dmFsdWUsCi0gICAgYm9v
bD46OnR5cGUKLWNoZWNrQ29udmVyc2lvbihjb25zdCBTcmMmKSB7Ci0gIHJldHVybiB0cnVlOwot
fQotCi0vKioKLSAqIENoZWNrZWQgY29udmVyc2lvbiBmcm9tIGludGVncmFsIHRvIGZsb2F0aW5n
IHBvaW50IGFuZCBiYWNrLiBUaGUKLSAqIHJlc3VsdCBtdXN0IGJlIGNvbnZlcnRpYmxlIGJhY2sg
dG8gdGhlIHNvdXJjZSB0eXBlIHdpdGhvdXQgbG9zcyBvZgotICogcHJlY2lzaW9uLiBUaGlzIHNl
ZW1zIERyYWNvbmlhbiBidXQgc29tZXRpbWVzIGlzIHdoYXQncyBuZWVkZWQsIGFuZAotICogY29t
cGxlbWVudHMgZXhpc3Rpbmcgcm91dGluZXMgbmljZWx5LiBGb3IgdmFyaW91cyByb3VuZGluZwot
ICogcm91dGluZXMsIHNlZSA8bWF0aD4uCi0gKi8KLXRlbXBsYXRlIDx0eXBlbmFtZSBUZ3QsIHR5
cGVuYW1lIFNyYz4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgIChzdGQ6OmlzX2ludGVn
cmFsPFNyYz46OnZhbHVlICYmIHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VGd0Pjo6dmFsdWUpIHx8
Ci0gICAgICAgIChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PFNyYz46OnZhbHVlICYmIHN0ZDo6aXNf
aW50ZWdyYWw8VGd0Pjo6dmFsdWUpLAotICAgIEV4cGVjdGVkPFRndCwgQ29udmVyc2lvbkNvZGU+
Pjo6dHlwZQotY29udmVydFRvKGNvbnN0IFNyYyYgdmFsdWUpIG5vZXhjZXB0IHsKLSAgaWYgKExJ
S0VMWShjaGVja0NvbnZlcnNpb248VGd0Pih2YWx1ZSkpKSB7Ci0gICAgVGd0IHJlc3VsdCA9IHN0
YXRpY19jYXN0PFRndD4odmFsdWUpOwotICAgIGlmIChMSUtFTFkoY2hlY2tDb252ZXJzaW9uPFNy
Yz4ocmVzdWx0KSkpIHsKLSAgICAgIFNyYyB3aXRuZXNzID0gc3RhdGljX2Nhc3Q8U3JjPihyZXN1
bHQpOwotICAgICAgaWYgKExJS0VMWSh2YWx1ZSA9PSB3aXRuZXNzKSkgewotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
Q29udmVyc2lvbkNvZGU6OkFSSVRIX0xPU1NfT0ZfUFJFQ0lTSU9OKTsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFRndCwgdHlwZW5hbWUgU3JjPgotaW5saW5lIHN0ZDo6c3RyaW5nIGVycm9yVmFs
dWUoY29uc3QgU3JjJiB2YWx1ZSkgewotI2lmZGVmIEZPTExZX0hBU19SVFRJCi0gIHJldHVybiB0
bzxzdGQ6OnN0cmluZz4oIigiLCBkZW1hbmdsZSh0eXBlaWQoVGd0KSksICIpICIsIHZhbHVlKTsK
LSNlbHNlCi0gIHJldHVybiB0bzxzdGQ6OnN0cmluZz4odmFsdWUpOwotI2VuZGlmCi19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUZ3QsIHR5cGVuYW1lIFNyYz4KLXVzaW5nIElzQXJpdGhUb0FyaXRo
ID0gc3RkOjppbnRlZ3JhbF9jb25zdGFudDwKLSAgICBib29sLAotICAgICFzdGQ6OmlzX3NhbWU8
VGd0LCBTcmM+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFRndCwgYm9vbD46OnZhbHVlICYmCi0g
ICAgICAgIHN0ZDo6aXNfYXJpdGhtZXRpYzxTcmM+Ojp2YWx1ZSAmJgotICAgICAgICBzdGQ6Omlz
X2FyaXRobWV0aWM8VGd0Pjo6dmFsdWU+OwotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFRndCwgdHlwZW5hbWUgU3JjPgotdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8Ci0gICAgZGV0YWlsOjpJc0FyaXRoVG9Bcml0aDxUZ3QsIFNyYz46OnZhbHVlLAotICAgIEV4
cGVjdGVkPFRndCwgQ29udmVyc2lvbkNvZGU+Pjo6dHlwZQotdHJ5VG8oY29uc3QgU3JjJiB2YWx1
ZSkgbm9leGNlcHQgewotICByZXR1cm4gZGV0YWlsOjpjb252ZXJ0VG88VGd0Pih2YWx1ZSk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUZ3QsIHR5cGVuYW1lIFNyYz4KLXR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPGRldGFpbDo6SXNBcml0aFRvQXJpdGg8VGd0LCBTcmM+Ojp2YWx1ZSwgVGd0Pjo6
dHlwZSB0bygKLSAgICBjb25zdCBTcmMmIHZhbHVlKSB7Ci0gIHJldHVybiB0cnlUbzxUZ3Q+KHZh
bHVlKS50aGVuT3JUaHJvdygKLSAgICAgIFtdKFRndCByZXMpIHsgcmV0dXJuIHJlczsgfSwKLSAg
ICAgIFsmXShDb252ZXJzaW9uQ29kZSBlKSB7Ci0gICAgICAgIHJldHVybiBtYWtlQ29udmVyc2lv
bkVycm9yKGUsIGRldGFpbDo6ZXJyb3JWYWx1ZTxUZ3Q+KHZhbHVlKSk7Ci0gICAgICB9KTsKLX0K
LQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEN1c3RvbSBDb252ZXJzaW9ucwotICoKLSAq
IEFueSB0eXBlIGNhbiBiZSB1c2VkIHdpdGggZm9sbHk6OnRvIGJ5IGltcGxlbWVudGluZyBwYXJz
ZVRvLiBUaGUKLSAqIGltcGxlbWVudGF0aW9uIHNob3VsZCBiZSBwcm92aWRlZCBpbiB0aGUgbmFt
ZXNwYWNlIG9mIHRoZSB0eXBlIHRvIGZhY2lsaXRhdGUKLSAqIGFyZ3VtZW50LWRlcGVuZGVudCBs
b29rdXA6Ci0gKgotICogbmFtZXNwYWNlIG90aGVyX25hbWVzcGFjZSB7Ci0gKiA6OmZvbGx5OjpF
eHBlY3RlZDw6OmZvbGx5OjpTdHJpbmdQaWVjZSwgU29tZUVycm9yQ29kZT4KLSAqICAgcGFyc2VU
byg6OmZvbGx5OjpTdHJpbmdQaWVjZSwgT3RoZXJUeXBlJikgbm9leGNlcHQ7Ci0gKiB9Ci0gKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLwotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1GT0xMWV9OT0RJU0NBUkQg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gICAgc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZSwKLSAg
ICBFeHBlY3RlZDxTdHJpbmdQaWVjZSwgQ29udmVyc2lvbkNvZGU+Pjo6dHlwZQotcGFyc2VUbyhT
dHJpbmdQaWVjZSBpbiwgVCYgb3V0KSBub2V4Y2VwdCB7Ci0gIHR5cGVuYW1lIHN0ZDo6dW5kZXJs
eWluZ190eXBlPFQ+Ojp0eXBlIHRtcHt9OwotICBhdXRvIHJlc3RPckVycm9yID0gcGFyc2VUbyhp
biwgdG1wKTsKLSAgb3V0ID0gc3RhdGljX2Nhc3Q8VD4odG1wKTsgLy8gSGFybWxlc3MgaWYgcGFy
c2VUbyBmYWlscwotICByZXR1cm4gcmVzdE9yRXJyb3I7Ci19Ci0KLUZPTExZX05PRElTQ0FSRAot
aW5saW5lIEV4cGVjdGVkPFN0cmluZ1BpZWNlLCBDb252ZXJzaW9uQ29kZT4gcGFyc2VUbygKLSAg
ICBTdHJpbmdQaWVjZSBpbiwKLSAgICBTdHJpbmdQaWVjZSYgb3V0KSBub2V4Y2VwdCB7Ci0gIG91
dCA9IGluOwotICByZXR1cm4gU3RyaW5nUGllY2V7aW4uZW5kKCksIGluLmVuZCgpfTsKLX0KLQot
Rk9MTFlfTk9ESVNDQVJECi1pbmxpbmUgRXhwZWN0ZWQ8U3RyaW5nUGllY2UsIENvbnZlcnNpb25D
b2RlPiBwYXJzZVRvKAotICAgIFN0cmluZ1BpZWNlIGluLAotICAgIHN0ZDo6c3RyaW5nJiBvdXQp
IHsKLSAgb3V0LmNsZWFyKCk7Ci0gIG91dC5hcHBlbmQoaW4uZGF0YSgpLCBpbi5zaXplKCkpOyAv
LyBUT0RPIHRyeS9jYXRjaD8KLSAgcmV0dXJuIFN0cmluZ1BpZWNle2luLmVuZCgpLCBpbi5lbmQo
KX07Ci19Ci0KLUZPTExZX05PRElTQ0FSRAotaW5saW5lIEV4cGVjdGVkPFN0cmluZ1BpZWNlLCBD
b252ZXJzaW9uQ29kZT4gcGFyc2VUbygKLSAgICBTdHJpbmdQaWVjZSBpbiwKLSAgICBmYnN0cmlu
ZyYgb3V0KSB7Ci0gIG91dC5jbGVhcigpOwotICBvdXQuYXBwZW5kKGluLmRhdGEoKSwgaW4uc2l6
ZSgpKTsgLy8gVE9ETyB0cnkvY2F0Y2g/Ci0gIHJldHVybiBTdHJpbmdQaWVjZXtpbi5lbmQoKSwg
aW4uZW5kKCl9OwotfQotCi1uYW1lc3BhY2UgZGV0YWlsIHsKLXRlbXBsYXRlIDx0eXBlbmFtZSBU
Z3Q+Ci11c2luZyBQYXJzZVRvUmVzdWx0ID0gZGVjbHR5cGUocGFyc2VUbyhTdHJpbmdQaWVjZXt9
LCBzdGQ6OmRlY2x2YWw8VGd0Jj4oKSkpOwotCi1zdHJ1Y3QgQ2hlY2tUcmFpbGluZ1NwYWNlIHsK
LSAgRXhwZWN0ZWQ8VW5pdCwgQ29udmVyc2lvbkNvZGU+IG9wZXJhdG9yKCkoU3RyaW5nUGllY2Ug
c3ApIGNvbnN0IHsKLSAgICBhdXRvIGUgPSBlbmZvcmNlV2hpdGVzcGFjZUVycihzcCk7Ci0gICAg
aWYgKFVOTElLRUxZKGUgIT0gQ29udmVyc2lvbkNvZGU6OlNVQ0NFU1MpKQotICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGUpOwotICAgIHJldHVybiB1bml0OwotICB9Ci19OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgRXJyb3I+Ci1zdHJ1Y3QgUmV0dXJuVW5pdCB7Ci0gIHRlbXBsYXRlIDxjbGFzcyBU
PgotICBjb25zdGV4cHIgRXhwZWN0ZWQ8VW5pdCwgRXJyb3I+IG9wZXJhdG9yKCkoVCYmKSBjb25z
dCB7Ci0gICAgcmV0dXJuIHVuaXQ7Ci0gIH0KLX07Ci0KLS8vIE9sZGVyIHZlcnNpb25zIG9mIHRo
ZSBwYXJzZVRvIGN1c3RvbWl6YXRpb24gcG9pbnQgdGhyZXcgb24gZXJyb3IgYW5kCi0vLyByZXR1
cm5lZCB2b2lkLiBIYW5kbGUgdGhhdC4KLXRlbXBsYXRlIDxjbGFzcyBUZ3Q+Ci1pbmxpbmUgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gICAgc3RkOjppc192b2lkPFBhcnNlVG9SZXN1bHQ8VGd0
Pj46OnZhbHVlLAotICAgIEV4cGVjdGVkPFN0cmluZ1BpZWNlLCBDb252ZXJzaW9uQ29kZT4+Ojp0
eXBlCi1wYXJzZVRvV3JhcChTdHJpbmdQaWVjZSBzcCwgVGd0JiBvdXQpIHsKLSAgcGFyc2VUbyhz
cCwgb3V0KTsKLSAgcmV0dXJuIFN0cmluZ1BpZWNlKHNwLmVuZCgpLCBzcC5lbmQoKSk7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUZ3Q+Ci1pbmxpbmUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0g
ICAgIXN0ZDo6aXNfdm9pZDxQYXJzZVRvUmVzdWx0PFRndD4+Ojp2YWx1ZSwKLSAgICBQYXJzZVRv
UmVzdWx0PFRndD4+Ojp0eXBlCi1wYXJzZVRvV3JhcChTdHJpbmdQaWVjZSBzcCwgVGd0JiBvdXQp
IHsKLSAgcmV0dXJuIHBhcnNlVG8oc3AsIG91dCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
Z3Q+Ci11c2luZyBQYXJzZVRvRXJyb3IgPSBFeHBlY3RlZEVycm9yVHlwZTxkZWNsdHlwZSgKLSAg
ICBkZXRhaWw6OnBhcnNlVG9XcmFwKFN0cmluZ1BpZWNle30sIHN0ZDo6ZGVjbHZhbDxUZ3QmPigp
KSk+OwotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotLyoqCi0gKiBTdHJpbmcgb3IgU3RyaW5n
UGllY2UgdG8gdGFyZ2V0IGNvbnZlcnNpb24uIEFjY2VwdHMgbGVhZGluZyBhbmQgdHJhaWxpbmcK
LSAqIHdoaXRlc3BhY2UsIGJ1dCBubyBub24tc3BhY2UgdHJhaWxpbmcgY2hhcmFjdGVycy4KLSAq
LwotCi10ZW1wbGF0ZSA8Y2xhc3MgVGd0PgotaW5saW5lIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PAotICAgICFzdGQ6OmlzX3NhbWU8U3RyaW5nUGllY2UsIFRndD46OnZhbHVlLAotICAgIEV4cGVj
dGVkPFRndCwgZGV0YWlsOjpQYXJzZVRvRXJyb3I8VGd0Pj4+Ojp0eXBlCi10cnlUbyhTdHJpbmdQ
aWVjZSBzcmMpIHsKLSAgVGd0IHJlc3VsdHt9OwotICB1c2luZyBFcnJvciA9IGRldGFpbDo6UGFy
c2VUb0Vycm9yPFRndD47Ci0gIHVzaW5nIENoZWNrID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25h
bDwKLSAgICAgIHN0ZDo6aXNfYXJpdGhtZXRpYzxUZ3Q+Ojp2YWx1ZSwKLSAgICAgIGRldGFpbDo6
Q2hlY2tUcmFpbGluZ1NwYWNlLAotICAgICAgZGV0YWlsOjpSZXR1cm5Vbml0PEVycm9yPj46OnR5
cGU7Ci0gIHJldHVybiBwYXJzZVRvKHNyYywgcmVzdWx0KS50aGVuKENoZWNrKCksIFsmXShVbml0
KSB7Ci0gICAgcmV0dXJuIHN0ZDo6bW92ZShyZXN1bHQpOwotICB9KTsKLX0KLQotdGVtcGxhdGUg
PGNsYXNzIFRndD4KLWlubGluZQotICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6Omlz
X3NhbWU8U3RyaW5nUGllY2UsIFRndD46OnZhbHVlLCBUZ3Q+Ojp0eXBlCi0gICAgdG8oU3RyaW5n
UGllY2Ugc3JjKSB7Ci0gIFRndCByZXN1bHR7fTsKLSAgdXNpbmcgRXJyb3IgPSBkZXRhaWw6OlBh
cnNlVG9FcnJvcjxUZ3Q+OwotICB1c2luZyBDaGVjayA9IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9u
YWw8Ci0gICAgICBzdGQ6OmlzX2FyaXRobWV0aWM8VGd0Pjo6dmFsdWUsCi0gICAgICBkZXRhaWw6
OkNoZWNrVHJhaWxpbmdTcGFjZSwKLSAgICAgIGRldGFpbDo6UmV0dXJuVW5pdDxFcnJvcj4+Ojp0
eXBlOwotICBhdXRvIHRtcCA9IGRldGFpbDo6cGFyc2VUb1dyYXAoc3JjLCByZXN1bHQpOwotICBy
ZXR1cm4gdG1wCi0gICAgICAudGhlbk9yVGhyb3coQ2hlY2soKSwgWyZdKEVycm9yIGUpIHsgdGhy
b3cgbWFrZUNvbnZlcnNpb25FcnJvcihlLCBzcmMpOyB9KQotICAgICAgLnRoZW5PclRocm93KAot
ICAgICAgICAgIFsmXShVbml0KSB7IHJldHVybiBzdGQ6Om1vdmUocmVzdWx0KTsgfSwKLSAgICAg
ICAgICBbJl0oRXJyb3IgZSkgeyB0aHJvdyBtYWtlQ29udmVyc2lvbkVycm9yKGUsIHRtcC52YWx1
ZSgpKTsgfSk7Ci19Ci0KLS8qKgotICogdHJ5VG8vdG8gdGhhdCB0YWtlIHRoZSBzdHJpbmdzIGJ5
IHBvaW50ZXIgc28gdGhlIGNhbGxlciBnZXRzIGluZm9ybWF0aW9uCi0gKiBhYm91dCBob3cgbXVj
aCBvZiB0aGUgc3RyaW5nIHdhcyBjb25zdW1lZCBieSB0aGUgY29udmVyc2lvbi4gVGhlc2UgZG8g
bm90Ci0gKiBjaGVjayBmb3IgdHJhaWxpbmcgd2hpdGVwc2FjZS4KLSAqLwotdGVtcGxhdGUgPGNs
YXNzIFRndD4KLUV4cGVjdGVkPFRndCwgZGV0YWlsOjpQYXJzZVRvRXJyb3I8VGd0Pj4gdHJ5VG8o
U3RyaW5nUGllY2UqIHNyYykgewotICBUZ3QgcmVzdWx0OwotICByZXR1cm4gcGFyc2VUbygqc3Jj
LCByZXN1bHQpLnRoZW4oWyYsIHNyY10oU3RyaW5nUGllY2Ugc3ApIC0+IFRndCB7Ci0gICAgKnNy
YyA9IHNwOwotICAgIHJldHVybiBzdGQ6Om1vdmUocmVzdWx0KTsKLSAgfSk7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUZ3Q+Ci1UZ3QgdG8oU3RyaW5nUGllY2UqIHNyYykgewotICBUZ3QgcmVzdWx0
e307Ci0gIHVzaW5nIEVycm9yID0gZGV0YWlsOjpQYXJzZVRvRXJyb3I8VGd0PjsKLSAgcmV0dXJu
IHBhcnNlVG8oKnNyYywgcmVzdWx0KQotICAgICAgLnRoZW5PclRocm93KAotICAgICAgICAgIFsm
LCBzcmNdKFN0cmluZ1BpZWNlIHNwKSAtPiBUZ3QgewotICAgICAgICAgICAgKnNyYyA9IHNwOwot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShyZXN1bHQpOwotICAgICAgICAgIH0sCi0gICAg
ICAgICAgWz1dKEVycm9yIGUpIHsgcmV0dXJuIG1ha2VDb252ZXJzaW9uRXJyb3IoZSwgKnNyYyk7
IH0pOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRW51bSB0byBhbnl0aGluZyBh
bmQgYmFjawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdGVtcGxhdGUgPGNsYXNzIFRndCwg
Y2xhc3MgU3JjPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gICAgc3RkOjppc19lbnVtPFNy
Yz46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8U3JjLCBUZ3Q+Ojp2YWx1ZSwKLSAgICBFeHBlY3Rl
ZDxUZ3QsIENvbnZlcnNpb25Db2RlPj46OnR5cGUKLXRyeVRvKGNvbnN0IFNyYyYgdmFsdWUpIHsK
LSAgdXNpbmcgSSA9IHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPFNyYz46OnR5cGU7Ci0g
IHJldHVybiB0cnlUbzxUZ3Q+KHN0YXRpY19jYXN0PEk+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRl
IDxjbGFzcyBUZ3QsIGNsYXNzIFNyYz4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgIHN0
ZDo6aXNfZW51bTxUZ3Q+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFNyYywgVGd0Pjo6dmFsdWUs
Ci0gICAgRXhwZWN0ZWQ8VGd0LCBDb252ZXJzaW9uQ29kZT4+Ojp0eXBlCi10cnlUbyhjb25zdCBT
cmMmIHZhbHVlKSB7Ci0gIHVzaW5nIEkgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxU
Z3Q+Ojp0eXBlOwotICByZXR1cm4gdHJ5VG88ST4odmFsdWUpLnRoZW4oW10oSSBpKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxUZ3Q+KGkpOyB9KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFRndCwgY2xh
c3MgU3JjPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gICAgc3RkOjppc19lbnVtPFNyYz46
OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8U3JjLCBUZ3Q+Ojp2YWx1ZSwKLSAgICBUZ3Q+Ojp0eXBl
Ci10byhjb25zdCBTcmMmIHZhbHVlKSB7Ci0gIHJldHVybiB0bzxUZ3Q+KHN0YXRpY19jYXN0PHR5
cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPFNyYz46OnR5cGU+KHZhbHVlKSk7Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBUZ3QsIGNsYXNzIFNyYz4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAot
ICBzdGQ6OmlzX2VudW08VGd0Pjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxTcmMsIFRndD46OnZh
bHVlLCBUZ3Q+Ojp0eXBlCi10byhjb25zdCBTcmMgJiB2YWx1ZSkgewotICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VGd0Pih0bzx0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxUZ3Q+Ojp0eXBlPih2
YWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBmb2xseQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvQ3BwQXR0cmlidXRlcy5oIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvQ3BwQXR0cmlidXRlcy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDM1MjEyZDE1Nzk4NmMyOGFhMzRjMjcxOTk0MDAw
MTQ2NzViMDFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0NwcEF0dHJpYnV0ZXMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBG
YWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwg
VmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmls
ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRh
aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5v
cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGlj
YWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAot
ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBl
eHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBs
YW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0
aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEdDQyBjb21wYXRpYmxlIHdyYXBwZXJzIGFyb3Vu
ZCBjbGFuZyBhdHRyaWJ1dGVzLgotICoKLSAqIEBhdXRob3IgRG9taW5payBHYWJpCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpZm5kZWYgX19oYXNfY3BwX2F0dHJpYnV0ZQotI2RlZmluZSBGT0xM
WV9IQVNfQ1BQX0FUVFJJQlVURSh4KSAwCi0jZWxzZQotI2RlZmluZSBGT0xMWV9IQVNfQ1BQX0FU
VFJJQlVURSh4KSBfX2hhc19jcHBfYXR0cmlidXRlKHgpCi0jZW5kaWYKLQotI2lmbmRlZiBfX2hh
c19leHRlbnNpb24KLSNkZWZpbmUgRk9MTFlfSEFTX0VYVEVOU0lPTih4KSAwCi0jZWxzZQotI2Rl
ZmluZSBGT0xMWV9IQVNfRVhURU5TSU9OKHgpIF9faGFzX2V4dGVuc2lvbih4KQotI2VuZGlmCi0K
LS8qKgotICogRmFsbHRocm91Z2ggdG8gaW5kaWNhdGUgdGhhdCBgYnJlYWtgIHdhcyBsZWZ0IG91
dCBvbiBwdXJwb3NlIGluIGEgc3dpdGNoCi0gKiBzdGF0ZW1lbnQsIGUuZy4KLSAqCi0gKiBzd2l0
Y2ggKG4pIHsKLSAqICAgY2FzZSAyMjoKLSAqICAgY2FzZSAzMzogIC8vIG5vIHdhcm5pbmc6IG5v
IHN0YXRlbWVudHMgYmV0d2VlbiBjYXNlIGxhYmVscwotICogICAgIGYoKTsKLSAqICAgY2FzZSA0
NDogIC8vIHdhcm5pbmc6IHVuYW5ub3RhdGVkIGZhbGwtdGhyb3VnaAotICogICAgIGcoKTsKLSAq
ICAgICBGT0xMWV9GQUxMVEhST1VHSDsgLy8gbm8gd2FybmluZzogYW5ub3RhdGVkIGZhbGwtdGhy
b3VnaAotICogfQotICovCi0jaWYgRk9MTFlfSEFTX0NQUF9BVFRSSUJVVEUoY2xhbmc6OmZhbGx0
aHJvdWdoKQotI2RlZmluZSBGT0xMWV9GQUxMVEhST1VHSCBbW2NsYW5nOjpmYWxsdGhyb3VnaF1d
Ci0jZWxzZQotI2RlZmluZSBGT0xMWV9GQUxMVEhST1VHSAotI2VuZGlmCi0KLS8qKgotICogIE1h
eWJlX3VudXNlZCBpbmRpY2F0ZXMgdGhhdCBhIGZ1bmN0aW9uLCB2YXJpYWJsZSBvciBwYXJhbWV0
ZXIgbWlnaHQgb3IKLSAqICBtaWdodCBub3QgYmUgdXNlZCwgZS5nLgotICoKLSAqICBpbnQgZm9v
KEZPTExZX01BWUJFX1VOVVNFRCBpbnQgeCkgewotICogICAgI2lmZGVmIFVTRV9YCi0gKiAgICAg
IHJldHVybiB4OwotICogICAgI2Vsc2UKLSAqICAgICAgcmV0dXJuIDA7Ci0gKiAgICAjZW5kaWYK
LSAqICB9Ci0gKi8KLSNpZiBGT0xMWV9IQVNfQ1BQX0FUVFJJQlVURShfX3VudXNlZF9fKQotI2Rl
ZmluZSBGT0xMWV9NQVlCRV9VTlVTRUQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCi0jZWxz
ZQotI2RlZmluZSBGT0xMWV9NQVlCRV9VTlVTRUQKLSNlbmRpZgotCi0vKioKLSAqIE51bGxhYmxl
IGluZGljYXRlcyB0aGF0IGEgcmV0dXJuIHZhbHVlIG9yIGEgcGFyYW1ldGVyIG1heSBiZSBhIGBu
dWxscHRyYCwKLSAqIGUuZy4KLSAqCi0gKiBpbnQqIEZPTExZX05VTExBQkxFIGZvbyhpbnQqIGEs
IGludCogRk9MTFlfTlVMTEFCTEUgYikgewotICogICBpZiAoKmEgPiAwKSB7ICAvLyBzYWZlIGRl
cmVmZXJlbmNlCi0gKiAgICAgcmV0dXJuIG51bGxwdHI7Ci0gKiAgIH0KLSAqICAgaWYgKCpiIDwg
MCkgeyAgLy8gdW5zYWZlIGRlcmVmZXJlbmNlCi0gKiAgICAgcmV0dXJuICphOwotICogICB9Ci0g
KiAgIGlmIChiICE9IG51bGxwdHIgJiYgKmIgPT0gMSkgeyAgLy8gc2FmZSBjaGVja2VkIGRlcmVm
ZXJlbmNlCi0gKiAgICAgcmV0dXJuIG5ldyBpbnQoMSk7Ci0gKiAgIH0KLSAqICAgcmV0dXJuIG51
bGxwdHI7Ci0gKiB9Ci0gKi8KLSNpZiBGT0xMWV9IQVNfRVhURU5TSU9OKG51bGxhYmlsaXR5KQot
I2RlZmluZSBGT0xMWV9OVUxMQUJMRSBfTnVsbGFibGUKLSNkZWZpbmUgRk9MTFlfTk9OTlVMTCBf
Tm9ubnVsbAotI2Vsc2UKLSNkZWZpbmUgRk9MTFlfTlVMTEFCTEUKLSNkZWZpbmUgRk9MTFlfTk9O
TlVMTAotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9mb2xseS9DcHVJZC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Zm9sbHkvQ3B1SWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNiZWExOTcxNDMy
MDI0ODA5NGM1MmI2MGQ1ODVmYzYwOGRmZWE3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9m
b2xseS9DcHVJZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFj
aGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3Qg
dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICog
WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWly
ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0g
KiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo
ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0
aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
PGNzdGRpbnQ+Ci0KLSNpbmNsdWRlIDxmb2xseS9Qb3J0YWJpbGl0eS5oPgotCi0jaWZkZWYgX01T
Q19WRVIKLSNpbmNsdWRlIDxpbnRyaW4uaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgZm9sbHkgewot
Ci0vKioKLSAqIElkZW50aWZpY2F0aW9uIG9mIGFuIEludGVsIENQVS4KLSAqIFN1cHBvcnRzIENQ
VUlEIGZlYXR1cmUgZmxhZ3MgKEVBWD0xKSBhbmQgZXh0ZW5kZWQgZmVhdHVyZXMgKEVBWD03LCBF
Q1g9MCkuCi0gKiBWYWx1ZXMgZnJvbSBodHRwOi8vd3d3LmludGVsLmNvbS9jb250ZW50L3d3dy91
cy9lbi9wcm9jZXNzb3JzL3Byb2Nlc3Nvci1pZGVudGlmaWNhdGlvbi1jcHVpZC1pbnN0cnVjdGlv
bi1ub3RlLmh0bWwKLSAqLwotY2xhc3MgQ3B1SWQgewotIHB1YmxpYzoKLSAgLy8gQWx3YXlzIGlu
bGluZSBpbiBvcmRlciBmb3IgdGhpcyB0byBiZSB1c2FibGUgZnJvbSBhIF9faWZ1bmNfXy4KLSAg
Ly8gSW4gc2hhcmVkIGxpYnJhcnkgbW9kZSwgYSBfX2lmdW5jX18gcnVucyBhdCByZWxvY2F0aW9u
IHRpbWUsIHdoaWxlIHRoZQotICAvLyBQTFQgaGFzbid0IGJlZW4gZnVsbHkgcG9wdWxhdGVkIHll
dDsgdGh1cywgaWZ1bmNzIGNhbm5vdCB1c2Ugc3ltYm9scwotICAvLyB3aXRoIHBvdGVudGlhbGx5
IGV4dGVybmFsIGxpbmthZ2UuIChUaGlzIGlzc3VlIGlzIGxlc3MgbGlrZWx5IGluIG9wdAotICAv
LyBtb2RlIHNpbmNlIGlubGluaW5nIGhhcHBlbnMgbW9yZSBsaWtlbHksIGFuZCBpdCBkb2Vzbid0
IGhhcHBlbiBmb3IKLSAgLy8gc3RhdGljYWxseSBsaW5rZWQgYmluYXJpZXMgd2hpY2ggZG9uJ3Qg
ZGVwZW5kIG9uIHRoZSBQTFQpCi0gIEZPTExZX0FMV0FZU19JTkxJTkUgQ3B1SWQoKSB7Ci0jaWZk
ZWYgX01TQ19WRVIKLSAgICBpbnQgcmVnWzRdOwotICAgIF9fY3B1aWQoc3RhdGljX2Nhc3Q8aW50
Kj4ocmVnKSwgMCk7Ci0gICAgY29uc3QgaW50IG4gPSByZWdbMF07Ci0gICAgaWYgKG4gPj0gMSkg
ewotICAgICAgX19jcHVpZChzdGF0aWNfY2FzdDxpbnQqPihyZWcpLCAxKTsKLSAgICAgIGYxY18g
PSB1aW50MzJfdChyZWdbMl0pOwotICAgICAgZjFkXyA9IHVpbnQzMl90KHJlZ1szXSk7Ci0gICAg
fQotICAgIGlmIChuID49IDcpIHsKLSAgICAgIF9fY3B1aWRleChzdGF0aWNfY2FzdDxpbnQqPihy
ZWcpLCA3LCAwKTsKLSAgICAgIGY3Yl8gPSB1aW50MzJfdChyZWdbMV0pOwotICAgICAgZjdjXyA9
IHVpbnQzMl90KHJlZ1syXSk7Ci0gICAgfQotI2VsaWYgZGVmaW5lZChfX2kzODZfXykgJiYgZGVm
aW5lZChfX1BJQ19fKSAmJiAhZGVmaW5lZChfX2NsYW5nX18pICYmIFwKLSAgICBkZWZpbmVkKF9f
R05VQ19fKQotICAgIC8vIFRoZSBmb2xsb3dpbmcgYmxvY2sgbGlrZSB0aGUgbm9ybWFsIGNwdWlk
IGJyYW5jaCBiZWxvdywgYnV0IGdjYwotICAgIC8vIHJlc2VydmVzIGVieCBmb3IgdXNlIG9mIGl0
cyBwaWMgcmVnaXN0ZXIgc28gd2UgbXVzdCBzcGVjaWFsbHkKLSAgICAvLyBoYW5kbGUgdGhlIHNh
dmUgYW5kIHJlc3RvcmUgdG8gYXZvaWQgY2xvYmJlcmluZyB0aGUgcmVnaXN0ZXIKLSAgICB1aW50
MzJfdCBuOwotICAgIF9fYXNtX18oCi0gICAgICAgICJwdXNobCAlJWVieFxuXHQiCi0gICAgICAg
ICJjcHVpZFxuXHQiCi0gICAgICAgICJwb3BsICUlZWJ4XG5cdCIKLSAgICAgICAgOiAiPWEiKG4p
Ci0gICAgICAgIDogImEiKDApCi0gICAgICAgIDogImVjeCIsICJlZHgiKTsKLSAgICBpZiAobiA+
PSAxKSB7Ci0gICAgICB1aW50MzJfdCBmMWE7Ci0gICAgICBfX2FzbV9fKAotICAgICAgICAgICJw
dXNobCAlJWVieFxuXHQiCi0gICAgICAgICAgImNwdWlkXG5cdCIKLSAgICAgICAgICAicG9wbCAl
JWVieFxuXHQiCi0gICAgICAgICAgOiAiPWEiKGYxYSksICI9YyIoZjFjXyksICI9ZCIoZjFkXykK
LSAgICAgICAgICA6ICJhIigxKQotICAgICAgICAgIDopOwotICAgIH0KLSAgICBpZiAobiA+PSA3
KSB7Ci0gICAgICBfX2FzbV9fKAotICAgICAgICAgICJwdXNobCAlJWVieFxuXHQiCi0gICAgICAg
ICAgImNwdWlkXG5cdCIKLSAgICAgICAgICAibW92bCAlJWVieCwgJSVlYXhcblxyIgotICAgICAg
ICAgICJwb3BsICUlZWJ4IgotICAgICAgICAgIDogIj1hIihmN2JfKSwgIj1jIihmN2NfKQotICAg
ICAgICAgIDogImEiKDcpLCAiYyIoMCkKLSAgICAgICAgICA6ICJlZHgiKTsKLSAgICB9Ci0jZWxp
ZiBGT0xMWV9YNjQgfHwgZGVmaW5lZChfX2kzODZfXykKLSAgICB1aW50MzJfdCBuOwotICAgIF9f
YXNtX18oImNwdWlkIiA6ICI9YSIobikgOiAiYSIoMCkgOiAiZWJ4IiwgImVjeCIsICJlZHgiKTsK
LSAgICBpZiAobiA+PSAxKSB7Ci0gICAgICB1aW50MzJfdCBmMWE7Ci0gICAgICBfX2FzbV9fKCJj
cHVpZCIgOiAiPWEiKGYxYSksICI9YyIoZjFjXyksICI9ZCIoZjFkXykgOiAiYSIoMSkgOiAiZWJ4
Iik7Ci0gICAgfQotICAgIGlmIChuID49IDcpIHsKLSAgICAgIHVpbnQzMl90IGY3YTsKLSAgICAg
IF9fYXNtX18oImNwdWlkIgotICAgICAgICAgICAgICA6ICI9YSIoZjdhKSwgIj1iIihmN2JfKSwg
Ij1jIihmN2NfKQotICAgICAgICAgICAgICA6ICJhIig3KSwgImMiKDApCi0gICAgICAgICAgICAg
IDogImVkeCIpOwotICAgIH0KLSNlbmRpZgotICB9Ci0KLSNkZWZpbmUgWChuYW1lLCByLCBiaXQp
ICAgICAgICAgICAgICAgICAgIFwKLSAgRk9MTFlfQUxXQVlTX0lOTElORSBib29sIG5hbWUoKSBj
b25zdCB7IFwKLSAgICByZXR1cm4gKChyKSAmICgxVSA8PCBiaXQpKSAhPSAwOyAgICAgIFwKLSAg
fQotCi0vLyBjcHVpZCgxKTogUHJvY2Vzc29yIEluZm8gYW5kIEZlYXR1cmUgQml0cy4KLSNkZWZp
bmUgQyhuYW1lLCBiaXQpIFgobmFtZSwgZjFjXywgYml0KQotICBDKHNzZTMsIDApCi0gIEMocGNs
bXVsZHEsIDEpCi0gIEMoZHRlczY0LCAyKQotICBDKG1vbml0b3IsIDMpCi0gIEMoZHNjcGwsIDQp
Ci0gIEModm14LCA1KQotICBDKHNteCwgNikKLSAgQyhlaXN0LCA3KQotICBDKHRtMiwgOCkKLSAg
Qyhzc3NlMywgOSkKLSAgQyhjbnh0aWQsIDEwKQotICBDKGZtYSwgMTIpCi0gIEMoY3gxNiwgMTMp
Ci0gIEMoeHRwciwgMTQpCi0gIEMocGRjbSwgMTUpCi0gIEMocGNpZCwgMTcpCi0gIEMoZGNhLCAx
OCkKLSAgQyhzc2U0MSwgMTkpCi0gIEMoc3NlNDIsIDIwKQotICBDKHgyYXBpYywgMjEpCi0gIEMo
bW92YmUsIDIyKQotICBDKHBvcGNudCwgMjMpCi0gIEModHNjZGVhZGxpbmUsIDI0KQotICBDKGFl
cywgMjUpCi0gIEMoeHNhdmUsIDI2KQotICBDKG9zeHNhdmUsIDI3KQotICBDKGF2eCwgMjgpCi0g
IEMoZjE2YywgMjkpCi0gIEMocmRyYW5kLCAzMCkKLSN1bmRlZiBDCi0jZGVmaW5lIEQobmFtZSwg
Yml0KSBYKG5hbWUsIGYxZF8sIGJpdCkKLSAgRChmcHUsIDApCi0gIEQodm1lLCAxKQotICBEKGRl
LCAyKQotICBEKHBzZSwgMykKLSAgRCh0c2MsIDQpCi0gIEQobXNyLCA1KQotICBEKHBhZSwgNikK
LSAgRChtY2UsIDcpCi0gIEQoY3g4LCA4KQotICBEKGFwaWMsIDkpCi0gIEQoc2VwLCAxMSkKLSAg
RChtdHJyLCAxMikKLSAgRChwZ2UsIDEzKQotICBEKG1jYSwgMTQpCi0gIEQoY21vdiwgMTUpCi0g
IEQocGF0LCAxNikKLSAgRChwc2UzNiwgMTcpCi0gIEQocHNuLCAxOCkKLSAgRChjbGZzaCwgMTkp
Ci0gIEQoZHMsIDIxKQotICBEKGFjcGksIDIyKQotICBEKG1teCwgMjMpCi0gIEQoZnhzciwgMjQp
Ci0gIEQoc3NlLCAyNSkKLSAgRChzc2UyLCAyNikKLSAgRChzcywgMjcpCi0gIEQoaHR0LCAyOCkK
LSAgRCh0bSwgMjkpCi0gIEQocGJlLCAzMSkKLSN1bmRlZiBECi0KLSAgLy8gY3B1aWQoNyk6IEV4
dGVuZGVkIEZlYXR1cmVzLgotI2RlZmluZSBCKG5hbWUsIGJpdCkgWChuYW1lLCBmN2JfLCBiaXQp
Ci0gIEIoYm1pMSwgMykKLSAgQihobGUsIDQpCi0gIEIoYXZ4MiwgNSkKLSAgQihzbWVwLCA3KQot
ICBCKGJtaTIsIDgpCi0gIEIoZXJtcywgOSkKLSAgQihpbnZwY2lkLCAxMCkKLSAgQihydG0sIDEx
KQotICBCKG1weCwgMTQpCi0gIEIoYXZ4NTEyZiwgMTYpCi0gIEIoYXZ4NTEyZHEsIDE3KQotICBC
KHJkc2VlZCwgMTgpCi0gIEIoYWR4LCAxOSkKLSAgQihzbWFwLCAyMCkKLSAgQihhdng1MTJpZm1h
LCAyMSkKLSAgQihwY29tbWl0LCAyMikKLSAgQihjbGZsdXNob3B0LCAyMykKLSAgQihjbHdiLCAy
NCkKLSAgQihhdng1MTJwZiwgMjYpCi0gIEIoYXZ4NTEyZXIsIDI3KQotICBCKGF2eDUxMmNkLCAy
OCkKLSAgQihzaGEsIDI5KQotICBCKGF2eDUxMmJ3LCAzMCkKLSAgQihhdng1MTJ2bCwgMzEpCi0j
dW5kZWYgQgotI2RlZmluZSBDKG5hbWUsIGJpdCkgWChuYW1lLCBmN2NfLCBiaXQpCi0gIEMocHJl
ZmV0Y2h3dDEsIDApCi0gIEMoYXZ4NTEydmJtaSwgMSkKLSN1bmRlZiBDCi0KLSN1bmRlZiBYCi0K
LSBwcml2YXRlOgotICB1aW50MzJfdCBmMWNfID0gMDsKLSAgdWludDMyX3QgZjFkXyA9IDA7Ci0g
IHVpbnQzMl90IGY3Yl8gPSAwOwotICB1aW50MzJfdCBmN2NfID0gMDsKLX07Ci0KLX0gIC8vIG5h
bWVzcGFjZSBmb2xseQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvRGVtYW5nbGUuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvRGVtYW5nbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
NGViMWFkN2RiYWM2MmZlNjcyNmMzZTNjOWZlYzY1MGE4NWEyZjQwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2ZvbGx5L0RlbWFuZ2xlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
LSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAot
ICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgot
ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0
aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRo
ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
IGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUg
PGZvbGx5L0RlbWFuZ2xlLmg+Ci0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3N0
cmluZz4KLQotI2luY2x1ZGUgPGZvbGx5L01hbGxvYy5oPgotI2luY2x1ZGUgPGZvbGx5L3BvcnRh
YmlsaXR5L0NvbmZpZy5oPgotCi0jaWYgRk9MTFlfSEFWRV9DUExVU19ERU1BTkdMRV9WM19DQUxM
QkFDSwotI2luY2x1ZGUgPGN4eGFiaS5oPgotCi0vLyBGcm9tIGxpYmliZXJ0eQotLy8KLS8vIFRP
RE8odHVkb3JiKTogRGV0ZWN0IHRoaXMgd2l0aCBhdXRvY29uZiBmb3IgdGhlIG9wZW4tc291cmNl
IHZlcnNpb24uCi0vLwotLy8gX19hdHRyaWJ1dGVfXygoX193ZWFrX18pKSBkb2Vzbid0IHdvcmss
IGJlY2F1c2UgY3BsdXNfZGVtYW5nbGVfdjNfY2FsbGJhY2sKLS8vIGlzIGV4cG9ydGVkIGJ5IGFu
IG9iamVjdCBmaWxlIGluIGxpYmliZXJ0eS5hLCBhbmQgdGhlIEVMRiBzcGVjIHNheXMKLS8vICJU
aGUgbGluayBlZGl0b3IgZG9lcyBub3QgZXh0cmFjdCBhcmNoaXZlIG1lbWJlcnMgdG8gcmVzb2x2
ZSB1bmRlZmluZWQgd2VhawotLy8gc3ltYm9scyIgKGJ1dCwgaW50ZXJlc3RpbmdseSBlbm91Z2gs
IHdpbGwgcmVzb2x2ZSB1bmRlZmluZWQgd2VhayBzeW1ib2xzCi0vLyB3aXRoIGRlZmluaXRpb25z
IGZyb20gYXJjaGl2ZSBtZW1iZXJzIHRoYXQgd2VyZSBleHRyYWN0ZWQgaW4gb3JkZXIgdG8KLS8v
IHJlc29sdmUgYW4gdW5kZWZpbmVkIGdsb2JhbCAoc3Ryb25nKSBzeW1ib2wpCi0KLSMgaWZuZGVm
IERNR0xfTk9fT1BUUwotIyAgZGVmaW5lIEZPTExZX0RFRklORURfRE1HTCAxCi0jICBkZWZpbmUg
RE1HTF9OT19PUFRTICAgIDAgICAgICAgICAgLyogRm9yIHJlYWRhYmlsaXR5Li4uICovCi0jICBk
ZWZpbmUgRE1HTF9QQVJBTVMgICAgICgxIDw8IDApICAgLyogSW5jbHVkZSBmdW5jdGlvbiBhcmdz
ICovCi0jICBkZWZpbmUgRE1HTF9BTlNJICAgICAgICgxIDw8IDEpICAgLyogSW5jbHVkZSBjb25z
dCwgdm9sYXRpbGUsIGV0YyAqLwotIyAgZGVmaW5lIERNR0xfSkFWQSAgICAgICAoMSA8PCAyKSAg
IC8qIERlbWFuZ2xlIGFzIEphdmEgcmF0aGVyIHRoYW4gQysrLiAqLwotIyAgZGVmaW5lIERNR0xf
VkVSQk9TRSAgICAoMSA8PCAzKSAgIC8qIEluY2x1ZGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4g
ICovCi0jICBkZWZpbmUgRE1HTF9UWVBFUyAgICAgICgxIDw8IDQpICAgLyogQWxzbyB0cnkgdG8g
ZGVtYW5nbGUgdHlwZSBlbmNvZGluZ3MuICAqLwotIyAgZGVmaW5lIERNR0xfUkVUX1BPU1RGSVgg
KDEgPDwgNSkgIC8qIFByaW50IGZ1bmN0aW9uIHJldHVybiB0eXBlcyAod2hlbgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnQpIGFmdGVyIGZ1bmN0aW9uIHNp
Z25hdHVyZSAqLwotIyBlbmRpZgotCi1leHRlcm4gIkMiIGludCBjcGx1c19kZW1hbmdsZV92M19j
YWxsYmFjaygKLSAgICBjb25zdCBjaGFyKiBtYW5nbGVkLAotICAgIGludCBvcHRpb25zLCAgLy8g
V2UgdXNlIERNR0xfUEFSQU1TIHwgRE1HTF9UWVBFUywgYWthIDB4MTEKLSAgICB2b2lkICgqY2Fs
bGJhY2spKGNvbnN0IGNoYXIqLCBzaXplX3QsIHZvaWQqKSwKLSAgICB2b2lkKiBhcmcpOwotCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotI2lmIEZPTExZX0hBVkVfQ1BMVVNfREVNQU5H
TEVfVjNfQ0FMTEJBQ0sKLQotZmJzdHJpbmcgZGVtYW5nbGUoY29uc3QgY2hhciogbmFtZSkgewot
I2lmZGVmIEZPTExZX0RFTUFOR0xFX01BWF9TWU1CT0xfU0laRQotICAvLyBHQ0MncyBfX2N4YV9k
ZW1hbmdsZSgpIHVzZXMgb24tc3RhY2sgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUKLSAgLy8gcGFy
c2VyIHN0YXRlIHdoaWNoIGFyZSBsaW5lYXIgaW4gdGhlIG51bWJlciBvZiBjb21wb25lbnRzIG9m
IHRoZQotICAvLyBzeW1ib2wuIEZvciBleHRyZW1lbHkgbG9uZyBzeW1ib2xzLCB0aGlzIGNhbiBj
YXVzZSBhIHN0YWNrCi0gIC8vIG92ZXJmbG93LiBXZSBzZXQgYW4gYXJiaXRyYXJ5IHN5bWJvbCBs
ZW5ndGggbGltaXQgYWJvdmUgd2hpY2ggd2UKLSAgLy8ganVzdCByZXR1cm4gdGhlIG1hbmdsZWQg
bmFtZS4KLSAgc2l6ZV90IG1hbmdsZWRMZW4gPSBzdHJsZW4obmFtZSk7Ci0gIGlmIChtYW5nbGVk
TGVuID4gRk9MTFlfREVNQU5HTEVfTUFYX1NZTUJPTF9TSVpFKSB7Ci0gICAgcmV0dXJuIGZic3Ry
aW5nKG5hbWUsIG1hbmdsZWRMZW4pOwotICB9Ci0jZW5kaWYKLQotICBpbnQgc3RhdHVzOwotICBz
aXplX3QgbGVuID0gMDsKLSAgLy8gbWFsbG9jKCkgbWVtb3J5IGZvciB0aGUgZGVtYW5nbGVkIHR5
cGUgbmFtZQotICBjaGFyKiBkZW1hbmdsZWQgPSBhYmk6Ol9fY3hhX2RlbWFuZ2xlKG5hbWUsIG51
bGxwdHIsICZsZW4sICZzdGF0dXMpOwotICBpZiAoc3RhdHVzICE9IDApIHsKLSAgICByZXR1cm4g
bmFtZTsKLSAgfQotICAvLyBsZW4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIChpbmNsdWRp
bmcgTlVMIHRlcm1pbmF0b3IgYW5kIG1heWJlCi0gIC8vIG90aGVyIGp1bmspCi0gIHJldHVybiBm
YnN0cmluZyhkZW1hbmdsZWQsIHN0cmxlbihkZW1hbmdsZWQpLCBsZW4sIEFjcXVpcmVNYWxsb2Nh
dGVkU3RyaW5nKCkpOwotfQotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVtYW5nbGVCdWYgewot
ICBjaGFyKiBkZXN0OwotICBzaXplX3QgcmVtYWluaW5nOwotICBzaXplX3QgdG90YWw7Ci19Owot
Ci12b2lkIGRlbWFuZ2xlQ2FsbGJhY2soY29uc3QgY2hhciogc3RyLCBzaXplX3Qgc2l6ZSwgdm9p
ZCogcCkgewotICBEZW1hbmdsZUJ1ZiogYnVmID0gc3RhdGljX2Nhc3Q8RGVtYW5nbGVCdWYqPihw
KTsKLSAgc2l6ZV90IG4gPSBzdGQ6Om1pbihidWYtPnJlbWFpbmluZywgc2l6ZSk7Ci0gIG1lbWNw
eShidWYtPmRlc3QsIHN0ciwgbik7Ci0gIGJ1Zi0+ZGVzdCArPSBuOwotICBidWYtPnJlbWFpbmlu
ZyAtPSBuOwotICBidWYtPnRvdGFsICs9IHNpemU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1z
aXplX3QgZGVtYW5nbGUoY29uc3QgY2hhciogbmFtZSwgY2hhciogb3V0LCBzaXplX3Qgb3V0U2l6
ZSkgewotI2lmZGVmIEZPTExZX0RFTUFOR0xFX01BWF9TWU1CT0xfU0laRQotICBzaXplX3QgbWFu
Z2xlZExlbiA9IHN0cmxlbihuYW1lKTsKLSAgaWYgKG1hbmdsZWRMZW4gPiBGT0xMWV9ERU1BTkdM
RV9NQVhfU1lNQk9MX1NJWkUpIHsKLSAgICBpZiAob3V0U2l6ZSkgewotICAgICAgc2l6ZV90IG4g
PSBzdGQ6Om1pbihtYW5nbGVkTGVuLCBvdXRTaXplIC0gMSk7Ci0gICAgICBtZW1jcHkob3V0LCBu
YW1lLCBuKTsKLSAgICAgIG91dFtuXSA9ICdcMCc7Ci0gICAgfQotICAgIHJldHVybiBtYW5nbGVk
TGVuOwotICB9Ci0jZW5kaWYKLQotICBEZW1hbmdsZUJ1ZiBkYnVmOwotICBkYnVmLmRlc3QgPSBv
dXQ7Ci0gIGRidWYucmVtYWluaW5nID0gb3V0U2l6ZSA/IG91dFNpemUgLSAxIDogMDsgICAvLyBs
ZWF2ZSByb29tIGZvciBudWxsIHRlcm0KLSAgZGJ1Zi50b3RhbCA9IDA7Ci0KLSAgLy8gVW5saWtl
IG1vc3QgbGlicmFyeSBmdW5jdGlvbnMsIHRoaXMgcmV0dXJucyAxIG9uIHN1Y2Nlc3MgYW5kIDAg
b24gZmFpbHVyZQotICBpbnQgc3RhdHVzID0gY3BsdXNfZGVtYW5nbGVfdjNfY2FsbGJhY2soCi0g
ICAgICBuYW1lLAotICAgICAgRE1HTF9QQVJBTVMgfCBETUdMX0FOU0kgfCBETUdMX1RZUEVTLAot
ICAgICAgZGVtYW5nbGVDYWxsYmFjaywKLSAgICAgICZkYnVmKTsKLSAgaWYgKHN0YXR1cyA9PSAw
KSB7ICAvLyBmYWlsZWQsIHJldHVybiBvcmlnaW5hbAotICAgIHJldHVybiBmb2xseTo6c3RybGNw
eShvdXQsIG5hbWUsIG91dFNpemUpOwotICB9Ci0gIGlmIChvdXRTaXplICE9IDApIHsKLSAgICAq
ZGJ1Zi5kZXN0ID0gJ1wwJzsKLSAgfQotICByZXR1cm4gZGJ1Zi50b3RhbDsKLX0KLQotI2Vsc2UK
LQotZmJzdHJpbmcgZGVtYW5nbGUoY29uc3QgY2hhciogbmFtZSkgewotICByZXR1cm4gbmFtZTsK
LX0KLQotc2l6ZV90IGRlbWFuZ2xlKGNvbnN0IGNoYXIqIG5hbWUsIGNoYXIqIG91dCwgc2l6ZV90
IG91dFNpemUpIHsKLSAgcmV0dXJuIGZvbGx5OjpzdHJsY3B5KG91dCwgbmFtZSwgb3V0U2l6ZSk7
Ci19Ci0KLSNlbmRpZgotCi1zaXplX3Qgc3RybGNweShjaGFyKiBkZXN0LCBjb25zdCBjaGFyKiBj
b25zdCBzcmMsIHNpemVfdCBzaXplKSB7Ci0gIHNpemVfdCBsZW4gPSBzdHJsZW4oc3JjKTsKLSAg
aWYgKHNpemUgIT0gMCkgewotICAgIHNpemVfdCBuID0gc3RkOjptaW4obGVuLCBzaXplIC0gMSk7
ICAvLyBhbHdheXMgbnVsbCB0ZXJtaW5hdGUhCi0gICAgbWVtY3B5KGRlc3QsIHNyYywgbik7Ci0g
ICAgZGVzdFtuXSA9ICdcMCc7Ci0gIH0KLSAgcmV0dXJuIGxlbjsKLX0KLQotfSAvLyBmb2xseQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvRGVt
YW5nbGUuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0RlbWFu
Z2xlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhOWNmOTY4MjQ4NGUzYzllOTlm
NzlkNjQzZjU0MWRmZGUzZmQ4YzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvRGVt
YW5nbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
MjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGlj
ZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRo
aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1h
eSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFw
YWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkg
YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJB
U0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGZvbGx5
L0ZCU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLS8qKgotICogUmV0dXJuIHRoZSBk
ZW1hbmdsZWQgKHByZXR0eWZpZWQpIHZlcnNpb24gb2YgYSBDKysgdHlwZS4KLSAqCi0gKiBUaGlz
IGZ1bmN0aW9uIHRyaWVzIHRvIHByb2R1Y2UgYSBodW1hbi1yZWFkYWJsZSB0eXBlLCBidXQgdGhl
IHR5cGUgbmFtZSB3aWxsCi0gKiBiZSByZXR1cm5lZCB1bmNoYW5nZWQgaW4gY2FzZSBvZiBlcnJv
ciBvciBpZiBkZW1hbmdsaW5nIGlzbid0IHN1cHBvcnRlZCBvbgotICogeW91ciBzeXN0ZW0uCi0g
KgotICogVXNlIGZvciBkZWJ1Z2dpbmcgLS0gZG8gbm90IHJlbHkgb24gZGVtYW5nbGUoKSByZXR1
cm5pbmcgYW55dGhpbmcgdXNlZnVsLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gbWF5IGFsbG9jYXRl
IG1lbW9yeSAoYW5kIHRoZXJlZm9yZSB0aHJvdyBzdGQ6OmJhZF9hbGxvYykuCi0gKi8KLWZic3Ry
aW5nIGRlbWFuZ2xlKGNvbnN0IGNoYXIqIG5hbWUpOwotaW5saW5lIGZic3RyaW5nIGRlbWFuZ2xl
KGNvbnN0IHN0ZDo6dHlwZV9pbmZvJiB0eXBlKSB7Ci0gIHJldHVybiBkZW1hbmdsZSh0eXBlLm5h
bWUoKSk7Ci19Ci0KLS8qKgotICogUmV0dXJuIHRoZSBkZW1hbmdsZWQgKHByZXR0eWZpZWQpIHZl
cnNpb24gb2YgYSBDKysgdHlwZSBpbiBhIHVzZXItcHJvdmlkZWQKLSAqIGJ1ZmZlci4KLSAqCi0g
KiBUaGUgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSBhcyBmb3Igc25wcmludGYgb3Igc3RybGNweTog
YnVmU2l6ZSBpcyB0aGUgc2l6ZQotICogb2YgdGhlIGJ1ZmZlciwgdGhlIHN0cmluZyBpcyBhbHdh
eXMgbnVsbC10ZXJtaW5hdGVkLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcwotICogdGhlIG51bWJl
ciBvZiBjaGFyYWN0ZXJzIChub3QgaW5jbHVkaW5nIHRoZSBudWxsIHRlcm1pbmF0b3IpIHRoYXQg
d291bGQgaGF2ZQotICogYmVlbiB3cml0dGVuIGlmIHRoZSBidWZmZXIgd2FzIGJpZyBlbm91Z2gu
IChTbyBhIHJldHVybiB2YWx1ZSA+PSBidWZTaXplCi0gKiBpbmRpY2F0ZXMgdGhhdCB0aGUgb3V0
cHV0IHdhcyB0cnVuY2F0ZWQpCi0gKgotICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhbGxvY2F0
ZSBtZW1vcnkgYW5kIGlzIGFzeW5jLXNpZ25hbC1zYWZlLgotICoKLSAqIE5vdGUgdGhhdCB0aGUg
dW5kZXJseWluZyBmdW5jdGlvbiBmb3IgdGhlIGZic3RyaW5nLXJldHVybmluZyBkZW1hbmdsZSBp
cwotICogc29tZXdoYXQgc3RhbmRhcmQgKGFiaTo6X19jeGFfZGVtYW5nbGUsIHdoaWNoIHVzZXMg
bWFsbG9jKSwgdGhlIHVuZGVybHlpbmcKLSAqIGZ1bmN0aW9uIGZvciB0aGlzIHZlcnNpb24gaXMg
bGVzcyBzbyAoY3BsdXNfZGVtYW5nbGVfdjNfY2FsbGJhY2sgZnJvbQotICogbGliaWJlcnR5KSwg
c28gaXQgaXMgcG9zc2libGUgZm9yIHRoZSBmYnN0cmluZyB2ZXJzaW9uIHRvIHdvcmssIHdoaWxl
IHRoaXMKLSAqIHZlcnNpb24gcmV0dXJucyB0aGUgb3JpZ2luYWwsIG1hbmdsZWQgbmFtZS4KLSAq
Lwotc2l6ZV90IGRlbWFuZ2xlKGNvbnN0IGNoYXIqIG5hbWUsIGNoYXIqIGJ1Ziwgc2l6ZV90IGJ1
ZlNpemUpOwotaW5saW5lIHNpemVfdCBkZW1hbmdsZShjb25zdCBzdGQ6OnR5cGVfaW5mbyYgdHlw
ZSwgY2hhciogYnVmLCBzaXplX3QgYnVmU2l6ZSkgewotICByZXR1cm4gZGVtYW5nbGUodHlwZS5u
YW1lKCksIGJ1ZiwgYnVmU2l6ZSk7Ci19Ci0KLS8vIGdsaWJjIGRvZXNuJ3QgaGF2ZSBzdHJsY3B5
Ci1zaXplX3Qgc3RybGNweShjaGFyKiBkZXN0LCBjb25zdCBjaGFyKiBjb25zdCBzcmMsIHNpemVf
dCBzaXplKTsKLQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvRXhjZXB0aW9uLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9mb2xseS9FeGNlcHRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEw
NTUzNWIzZjVkODI4MDgxOTgxZjk4YzViNDJjYTAxOGMwNGM1Ny4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9mb2xseS9FeGNlcHRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAq
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoK
LSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICog
VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n
LCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBM
aWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu
ZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaW5jbHVkZSA8Y3N0ZGlvPgotI2luY2x1ZGUgPHN0
ZGV4Y2VwdD4KLSNpbmNsdWRlIDxzeXN0ZW1fZXJyb3I+Ci0KLSNpbmNsdWRlIDxmb2xseS9Db252
Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvRkJTdHJpbmcuaD4KLSNpbmNsdWRlIDxmb2xseS9MaWtlbHku
aD4KLSNpbmNsdWRlIDxmb2xseS9Qb3J0YWJpbGl0eS5oPgotCi1uYW1lc3BhY2UgZm9sbHkgewot
Ci0vLyBWYXJpb3VzIGhlbHBlcnMgdG8gdGhyb3cgYXBwcm9wcmlhdGUgc3RkOjpzeXN0ZW1fZXJy
b3IgZXhjZXB0aW9ucyBmcm9tIEMKLS8vIGxpYnJhcnkgZXJyb3JzIChyZXR1cm5lZCBpbiBlcnJu
bywgYXMgcG9zaXRpdmUgcmV0dXJuIHZhbHVlcyAobWFueSBQT1NJWAotLy8gZnVuY3Rpb25zKSwg
b3IgYXMgbmVnYXRpdmUgcmV0dXJuIHZhbHVlcyAoTGludXggc3lzY2FsbHMpKQotLy8KLS8vIFRo
ZSAqRXhwbGljaXQgZnVuY3Rpb25zIHRha2UgYW4gZXhwbGljaXQgdmFsdWUgZm9yIGVycm5vLgot
Ci0vLyBIZWxwZXIgdG8gdGhyb3cgc3RkOjpzeXN0ZW1fZXJyb3IKLVtbbm9yZXR1cm5dXSBpbmxp
bmUgdm9pZCB0aHJvd1N5c3RlbUVycm9yRXhwbGljaXQoaW50IGVyciwgY29uc3QgY2hhciogbXNn
KSB7Ci0gIHRocm93IHN0ZDo6c3lzdGVtX2Vycm9yKGVyciwgc3RkOjpzeXN0ZW1fY2F0ZWdvcnko
KSwgbXNnKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci1bW25vcmV0dXJuXV0gdm9p
ZCB0aHJvd1N5c3RlbUVycm9yRXhwbGljaXQoaW50IGVyciwgQXJncyYmLi4uIGFyZ3MpIHsKLSAg
dGhyb3dTeXN0ZW1FcnJvckV4cGxpY2l0KAotICAgICAgZXJyLCB0bzxmYnN0cmluZz4oc3RkOjpm
b3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKS5jX3N0cigpKTsKLX0KLQotLy8gSGVscGVyIHRvIHRocm93
IHN0ZDo6c3lzdGVtX2Vycm9yIGZyb20gZXJybm8gYW5kIGNvbXBvbmVudHMgb2YgYSBzdHJpbmcK
LXRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotW1tub3JldHVybl1dIHZvaWQgdGhyb3dTeXN0ZW1F
cnJvcihBcmdzJiYuLi4gYXJncykgewotICB0aHJvd1N5c3RlbUVycm9yRXhwbGljaXQoZXJybm8s
IHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci19Ci0KLS8vIENoZWNrIGEgUG9zaXggcmV0
dXJuIGNvZGUgKDAgb24gc3VjY2VzcywgZXJyb3IgbnVtYmVyIG9uIGVycm9yKSwgdGhyb3cKLS8v
IG9uIGVycm9yLgotdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci12b2lkIGNoZWNrUG9zaXhFcnJv
cihpbnQgZXJyLCBBcmdzJiYuLi4gYXJncykgewotICBpZiAoVU5MSUtFTFkoZXJyICE9IDApKSB7
Ci0gICAgdGhyb3dTeXN0ZW1FcnJvckV4cGxpY2l0KGVyciwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKTsKLSAgfQotfQotCi0vLyBDaGVjayBhIExpbnV4IGtlcm5lbC1zdHlsZSByZXR1cm4g
Y29kZSAoPj0gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvcgotLy8gbnVtYmVyIG9uIGVycm9y
KSwgdGhyb3cgb24gZXJyb3IuCi10ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KLXZvaWQgY2hlY2tL
ZXJuZWxFcnJvcihzc2l6ZV90IHJldCwgQXJncyYmLi4uIGFyZ3MpIHsKLSAgaWYgKFVOTElLRUxZ
KHJldCA8IDApKSB7Ci0gICAgdGhyb3dTeXN0ZW1FcnJvckV4cGxpY2l0KGludCgtcmV0KSwgc3Rk
Ojpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgfQotfQotCi0vLyBDaGVjayBhIHRyYWRpdGlv
bmFsIFVuaXggcmV0dXJuIGNvZGUgKC0xIGFuZCBzZXRzIGVycm5vIG9uIGVycm9yKSwgdGhyb3cK
LS8vIG9uIGVycm9yLgotdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci12b2lkIGNoZWNrVW5peEVy
cm9yKHNzaXplX3QgcmV0LCBBcmdzJiYuLi4gYXJncykgewotICBpZiAoVU5MSUtFTFkocmV0ID09
IC0xKSkgewotICAgIHRocm93U3lzdGVtRXJyb3Ioc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKLSAgfQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KLXZvaWQgY2hlY2tVbml4RXJy
b3JFeHBsaWNpdChzc2l6ZV90IHJldCwgaW50IHNhdmVkRXJybm8sIEFyZ3MmJi4uLiBhcmdzKSB7
Ci0gIGlmIChVTkxJS0VMWShyZXQgPT0gLTEpKSB7Ci0gICAgdGhyb3dTeXN0ZW1FcnJvckV4cGxp
Y2l0KHNhdmVkRXJybm8sIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gIH0KLX0KLQot
Ly8gQ2hlY2sgdGhlIHJldHVybiBjb2RlIGZyb20gYSBmb3Blbi1zdHlsZSBmdW5jdGlvbiAocmV0
dXJucyBhIG5vbi1udWxscHRyCi0vLyBGSUxFKiBvbiBzdWNjZXNzLCBudWxscHRyIG9uIGVycm9y
LCBzZXRzIGVycm5vKS4gIFdvcmtzIHdpdGggZm9wZW4sIGZkb3BlbiwKLS8vIGZyZW9wZW4sIHRt
cGZpbGUsIGV0Yy4KLXRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotdm9pZCBjaGVja0ZvcGVuRXJy
b3IoRklMRSogZnAsIEFyZ3MmJi4uLiBhcmdzKSB7Ci0gIGlmIChVTkxJS0VMWSghZnApKSB7Ci0g
ICAgdGhyb3dTeXN0ZW1FcnJvcihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICB9Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotdm9pZCBjaGVja0ZvcGVuRXJyb3JFeHBsaWNp
dChGSUxFKiBmcCwgaW50IHNhdmVkRXJybm8sIEFyZ3MmJi4uLiBhcmdzKSB7Ci0gIGlmIChVTkxJ
S0VMWSghZnApKSB7Ci0gICAgdGhyb3dTeXN0ZW1FcnJvckV4cGxpY2l0KHNhdmVkRXJybm8sIHN0
ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gIH0KLX0KLQotLyoqCi0gKiBJZiBjb25kIGlz
IG5vdCB0cnVlLCByYWlzZSBhbiBleGNlcHRpb24gb2YgdHlwZSBFLiAgRSBtdXN0IGhhdmUgYSBj
dG9yIHRoYXQKLSAqIHdvcmtzIHdpdGggY29uc3QgY2hhciogKGEgZGVzY3JpcHRpb24gb2YgdGhl
IGZhaWx1cmUpLgotICovCi0jZGVmaW5lIENIRUNLX1RIUk9XKGNvbmQsIEUpICAgICAgICAgICBc
Ci0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCEoY29u
ZCkpIHsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB0aHJvdyBFKCJDaGVjayBmYWlsZWQ6
ICIgI2NvbmQpOyBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IH0gd2hpbGUgKDApCi0KLX0gIC8vIG5hbWVzcGFjZSBmb2xseQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvRXhjZXB0aW9uU3RyaW5nLmggYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9FeGNlcHRpb25TdHJpbmcu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkxZGYwMjRkZDdhMTc4OTU0YjljOWYz
ZTc1MjRiODNkNjhmOWU3Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9FeGNlcHRp
b25TdHJpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUg
TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3
LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQg
YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9u
cyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGV4
Y2VwdGlvbj4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0KLSNp
bmNsdWRlIDxmb2xseS9EZW1hbmdsZS5oPgotI2luY2x1ZGUgPGZvbGx5L0ZCU3RyaW5nLmg+Ci0j
aW5jbHVkZSA8Zm9sbHkvUG9ydGFiaWxpdHkuaD4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotLyoq
Ci0gKiBEZWJ1ZyBzdHJpbmcgZm9yIGFuIGV4Y2VwdGlvbjogaW5jbHVkZSB0eXBlIGFuZCB3aGF0
KCksIGlmCi0gKiBkZWZpbmVkLgotICovCi1pbmxpbmUgZmJzdHJpbmcgZXhjZXB0aW9uU3RyKGNv
bnN0IHN0ZDo6ZXhjZXB0aW9uJiBlKSB7Ci0jaWZkZWYgRk9MTFlfSEFTX1JUVEkKLSAgZmJzdHJp
bmcgcnYoZGVtYW5nbGUodHlwZWlkKGUpKSk7Ci0gIHJ2ICs9ICI6ICI7Ci0jZWxzZQotICBmYnN0
cmluZyBydigiRXhjZXB0aW9uIChubyBSVFRJIGF2YWlsYWJsZSk6ICIpOwotI2VuZGlmCi0gIHJ2
ICs9IGUud2hhdCgpOwotICByZXR1cm4gcnY7Ci19Ci0KLS8vIEVtcGlyaWNhbGx5LCB0aGlzIGlu
ZGljYXRlcyBpZiB0aGUgcnVudGltZSBzdXBwb3J0cwotLy8gc3RkOjpleGNlcHRpb25fcHRyLCBh
cyBub3QgYWxsIChhcm0sIGZvciBpbnN0YW5jZSkgZG8uCi0jaWYgZGVmaW5lZChfX0dOVUNfXykg
JiYgZGVmaW5lZChfX0dDQ19BVE9NSUNfSU5UX0xPQ0tfRlJFRSkgJiYgXAotICAgIF9fR0NDX0FU
T01JQ19JTlRfTE9DS19GUkVFID4gMQotaW5saW5lIGZic3RyaW5nIGV4Y2VwdGlvblN0cihzdGQ6
OmV4Y2VwdGlvbl9wdHIgZXApIHsKLSAgdHJ5IHsKLSAgICBzdGQ6OnJldGhyb3dfZXhjZXB0aW9u
KGVwKTsKLSAgfSBjYXRjaCAoY29uc3Qgc3RkOjpleGNlcHRpb24mIGUpIHsKLSAgICByZXR1cm4g
ZXhjZXB0aW9uU3RyKGUpOwotICB9IGNhdGNoICguLi4pIHsKLSAgICByZXR1cm4gIjx1bmtub3du
IGV4Y2VwdGlvbj4iOwotICB9Ci19Ci0jZW5kaWYKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEU+Ci1h
dXRvIGV4Y2VwdGlvblN0cihjb25zdCBFJiBlKSAtPiB0eXBlbmFtZSBzdGQ6OgotICAgIGVuYWJs
ZV9pZjwhc3RkOjppc19iYXNlX29mPHN0ZDo6ZXhjZXB0aW9uLCBFPjo6dmFsdWUsIGZic3RyaW5n
Pjo6dHlwZSB7Ci0jaWZkZWYgRk9MTFlfSEFTX1JUVEkKLSAgcmV0dXJuIGRlbWFuZ2xlKHR5cGVp
ZChlKSk7Ci0jZWxzZQotICByZXR1cm4gIkV4Y2VwdGlvbiAobm8gUlRUSSBhdmFpbGFibGUpIjsK
LSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBmb2xseQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvRXhjZXB0aW9uV3JhcHBlci1pbmwuaCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0V4Y2VwdGlvbldyYXBw
ZXItaW5sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhOTY1NTI1YWVlMzAyY2Mw
ZjFmMTU0MTc0YmJiNDFkZTRhMDE5OGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkv
RXhjZXB0aW9uV3JhcHBlci1pbmwuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp
OwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
IHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAq
Ci0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotLyoKLSAqCi0g
KiBBdXRob3I6IEVyaWMgTmllYmxlciA8ZW5pZWJsZXJAZmIuY29tPgotICovCi0KLSNpbmNsdWRl
IDxmb2xseS9Qb3J0YWJpbGl0eS5oPgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi10ZW1wbGF0ZSA8
Y2xhc3MgRm4+Ci1zdHJ1Y3QgZXhjZXB0aW9uX3dyYXBwZXI6OmFyZ190eXBlXwotICAgIDogcHVi
bGljIGFyZ190eXBlXzxkZWNsdHlwZSgmRm46Om9wZXJhdG9yKCkpPiB7Ci19OwotdGVtcGxhdGUg
PGNsYXNzIFJldCwgY2xhc3MgQ2xhc3MsIGNsYXNzIEFyZz4KLXN0cnVjdCBleGNlcHRpb25fd3Jh
cHBlcjo6YXJnX3R5cGVfPFJldCAoQ2xhc3M6OiopKEFyZyk+IHsKLSAgdXNpbmcgdHlwZSA9IEFy
ZzsKLX07Ci10ZW1wbGF0ZSA8Y2xhc3MgUmV0LCBjbGFzcyBDbGFzcywgY2xhc3MgQXJnPgotc3Ry
dWN0IGV4Y2VwdGlvbl93cmFwcGVyOjphcmdfdHlwZV88UmV0IChDbGFzczo6KikoQXJnKSBjb25z
dD4gewotICB1c2luZyB0eXBlID0gQXJnOwotfTsKLXRlbXBsYXRlIDxjbGFzcyBSZXQsIGNsYXNz
IEFyZz4KLXN0cnVjdCBleGNlcHRpb25fd3JhcHBlcjo6YXJnX3R5cGVfPFJldCAoQXJnKT4gewot
ICB1c2luZyB0eXBlID0gQXJnOwotfTsKLXRlbXBsYXRlIDxjbGFzcyBSZXQsIGNsYXNzIEFyZz4K
LXN0cnVjdCBleGNlcHRpb25fd3JhcHBlcjo6YXJnX3R5cGVfPFJldCAoKikoQXJnKT4gewotICB1
c2luZyB0eXBlID0gQXJnOwotfTsKLXRlbXBsYXRlIDxjbGFzcyBSZXQsIGNsYXNzIENsYXNzPgot
c3RydWN0IGV4Y2VwdGlvbl93cmFwcGVyOjphcmdfdHlwZV88UmV0IChDbGFzczo6KikoLi4uKT4g
ewotICB1c2luZyB0eXBlID0gQW55RXhjZXB0aW9uOwotfTsKLXRlbXBsYXRlIDxjbGFzcyBSZXQs
IGNsYXNzIENsYXNzPgotc3RydWN0IGV4Y2VwdGlvbl93cmFwcGVyOjphcmdfdHlwZV88UmV0IChD
bGFzczo6KikoLi4uKSBjb25zdD4gewotICB1c2luZyB0eXBlID0gQW55RXhjZXB0aW9uOwotfTsK
LXRlbXBsYXRlIDxjbGFzcyBSZXQ+Ci1zdHJ1Y3QgZXhjZXB0aW9uX3dyYXBwZXI6OmFyZ190eXBl
XzxSZXQgKC4uLik+IHsKLSAgdXNpbmcgdHlwZSA9IEFueUV4Y2VwdGlvbjsKLX07Ci10ZW1wbGF0
ZSA8Y2xhc3MgUmV0Pgotc3RydWN0IGV4Y2VwdGlvbl93cmFwcGVyOjphcmdfdHlwZV88UmV0ICgq
KSguLi4pPiB7Ci0gIHVzaW5nIHR5cGUgPSBBbnlFeGNlcHRpb247Ci19OwotCi10ZW1wbGF0ZSA8
Y2xhc3MgUmV0LCBjbGFzcy4uLiBBcmdzPgotaW5saW5lIFJldCBleGNlcHRpb25fd3JhcHBlcjo6
bm9vcF8oQXJncy4uLikgewotICByZXR1cm4gUmV0KCk7Ci19Ci0KLWlubGluZSBzdGQ6OnR5cGVf
aW5mbyBjb25zdCogZXhjZXB0aW9uX3dyYXBwZXI6OnVuaW5pdF90eXBlXygKLSAgICBleGNlcHRp
b25fd3JhcHBlciBjb25zdCopIHsKLSAgcmV0dXJuICZ0eXBlaWQodm9pZCk7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBFeCwgdHlwZW5hbWUuLi4gQXM+Ci1pbmxpbmUgZXhjZXB0aW9uX3dyYXBwZXI6
OkJ1ZmZlcjo6QnVmZmVyKGluX3BsYWNlX3R5cGVfdDxFeD4sIEFzJiYuLi4gYXNfKSB7Ci0gIDo6
bmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oJmJ1ZmZfKSkgRXgoc3RkOjpmb3J3YXJkPEFzPihhc18p
Li4uKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIEV4PgotaW5saW5lIEV4JiBleGNlcHRpb25fd3Jh
cHBlcjo6QnVmZmVyOjphcygpIG5vZXhjZXB0IHsKLSAgcmV0dXJuICpzdGF0aWNfY2FzdDxFeCo+
KHN0YXRpY19jYXN0PHZvaWQqPigmYnVmZl8pKTsKLX0KLXRlbXBsYXRlIDxjbGFzcyBFeD4KLWlu
bGluZSBFeCBjb25zdCYgZXhjZXB0aW9uX3dyYXBwZXI6OkJ1ZmZlcjo6YXMoKSBjb25zdCBub2V4
Y2VwdCB7Ci0gIHJldHVybiAqc3RhdGljX2Nhc3Q8RXggY29uc3QqPihzdGF0aWNfY2FzdDx2b2lk
IGNvbnN0Kj4oJmJ1ZmZfKSk7Ci19Ci0KLWlubGluZSBzdGQ6OmV4Y2VwdGlvbiBjb25zdCogZXhj
ZXB0aW9uX3dyYXBwZXI6OmFzX2V4Y2VwdGlvbl9vcl9udWxsXygKLSAgICBzdGQ6OmV4Y2VwdGlv
biBjb25zdCYgZXgpIHsKLSAgcmV0dXJuICZleDsKLX0KLWlubGluZSBzdGQ6OmV4Y2VwdGlvbiBj
b25zdCogZXhjZXB0aW9uX3dyYXBwZXI6OmFzX2V4Y2VwdGlvbl9vcl9udWxsXygKLSAgICBBbnlF
eGNlcHRpb24pIHsKLSAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXN0YXRpY19hc3NlcnQoCi0gICAg
IWtJc1dpbmRvd3MgfHwgc2l6ZW9mKHZvaWQqKSA9PSA4LAotICAgICJleGNlcHRpb25fd3JhcHBl
ciBpcyB1bnRlc3RlZCBvbiAzMiBiaXQgV2luZG93cy4iKTsKLXN0YXRpY19hc3NlcnQoCi0gICAg
IWtJc1dpbmRvd3MgfHwgKGtNc2NWZXIgPj0gMTkwMCAmJiBrTXNjVmVyIDw9IDIwMDApLAotICAg
ICJleGNlcHRpb25fd3JhcHBlciBpcyB1bnRlc3RlZCBhbmQgcG9zc2libHkgYnJva2VuIG9uIHlv
dXIgdmVyc2lvbiBvZiAiCi0gICAgIk1TVkMiKTsKLQotaW5saW5lIHN0ZDo6dWludHB0cl90IGV4
Y2VwdGlvbl93cmFwcGVyOjpFeGNlcHRpb25QdHI6OmFzX2ludF8oCi0gICAgc3RkOjpleGNlcHRp
b25fcHRyIGNvbnN0JiBwdHIsCi0gICAgc3RkOjpleGNlcHRpb24gY29uc3QmIGUpIHsKLSAgaWYg
KCFrSXNXaW5kb3dzKSB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjp1aW50cHRy
X3Q+KCZlKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBPbiBXaW5kb3dzLCBhcyBvZiBNU1ZDMjAxNywg
YWxsIHRocm93biBleGNlcHRpb25zIGFyZSBjb3BpZWQgdG8gdGhlIHN0YWNrCi0gICAgLy8gZmly
c3QuIFRodXMsIHdlIGNhbm5vdCBkZXBlbmQgb24gZXhjZXB0aW9uIHJlZmVyZW5jZXMgYXNzb2Np
YXRlZCB3aXRoIGFuCi0gICAgLy8gZXhjZXB0aW9uX3B0ciB0byBiZSBsaXZlIGZvciB0aGUgZHVy
YXRpb24gb2YgdGhlIGV4Y2VwdGlvbl9wdHIuIFdlIG5lZWQKLSAgICAvLyB0byBkaXJlY3RseSBh
Y2Nlc3MgdGhlIGhlYXAgYWxsb2NhdGVkIG1lbW9yeSBpbnNpZGUgdGhlIGV4Y2VwdGlvbl9wdHIu
Ci0gICAgLy8KLSAgICAvLyBzdGQ6OmV4Y2VwdGlvbl9wdHIgaXMgYW4gb3BhcXVlIHJlaW50ZXJw
cmV0X2Nhc3Qgb2YKLSAgICAvLyBzdGQ6OnNoYXJlZF9wdHI8X19FeGNlcHRpb25QdHI+Ci0gICAg
Ly8gX19FeGNlcHRpb25QdHIgaXMgYSBub24tdmlydHVhbCBjbGFzcyB3aXRoIHR3byBtZW1iZXJz
LCBhIHVuaW9uIGFuZCBhCi0gICAgLy8gYm9vbC4gVGhlIHVuaW9uIGNvbnRhaW5zIHRoZSBub3ct
dW5kb2N1bWVudGVkIEVIRXhjZXB0aW9uUmVjb3JkLCB3aGljaAotICAgIC8vIGNvbnRhaW5zIGEg
c3RydWN0IHdoaWNoIGNvbnRhaW5zIGEgdm9pZCogd2hpY2ggcG9pbnRzIHRvIHRoZSBoZWFwCi0g
ICAgLy8gYWxsb2NhdGVkIGV4Y2VwdGlvbi4KLSAgICAvLyBXZSBkZXJpdmUgdGhlIG9mZnNldCB0
byBwRXhjZXB0aW9uT2JqZWN0IHZpYSBtYW51YWwgbWVhbnMuCi0gICAgRk9MTFlfUEFDS19QVVNI
Ci0gICAgc3RydWN0IFdpbjMyRXhjZXB0aW9uUHRyIHsKLSAgICAgIGNoYXIgb2Zmc2V0WzQwXTsK
LSAgICAgIHZvaWQqIGV4Y2VwdGlvbk9iamVjdDsKLSAgICB9IEZPTExZX1BBQ0tfQVRUUjsKLSAg
ICBGT0xMWV9QQUNLX1BPUAotCi0gICAgYXV0byogd2luMzJFeGNlcHRpb25QdHIgPQotICAgICAg
ICByZWludGVycHJldF9jYXN0PHN0ZDo6c2hhcmVkX3B0cjxXaW4zMkV4Y2VwdGlvblB0cj4gY29u
c3QqPigKLSAgICAgICAgICAgICZwdHIpLT5nZXQoKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxzdGQ6OnVpbnRwdHJfdD4od2luMzJFeGNlcHRpb25QdHItPmV4Y2VwdGlvbk9iamVjdCk7
Ci0gIH0KLX0KLWlubGluZSBzdGQ6OnVpbnRwdHJfdCBleGNlcHRpb25fd3JhcHBlcjo6RXhjZXB0
aW9uUHRyOjphc19pbnRfKAotICAgIHN0ZDo6ZXhjZXB0aW9uX3B0ciBjb25zdCYsCi0gICAgQW55
RXhjZXB0aW9uIGUpIHsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjp1aW50cHRyX3Q+
KGUudHlwZWluZm9fKSArIDE7Ci19Ci1pbmxpbmUgYm9vbCBleGNlcHRpb25fd3JhcHBlcjo6RXhj
ZXB0aW9uUHRyOjpoYXNfZXhjZXB0aW9uXygpIGNvbnN0IHsKLSAgcmV0dXJuIDAgPT0gZXhjZXB0
aW9uX29yX3R5cGVfICUgMjsKLX0KLWlubGluZSBzdGQ6OmV4Y2VwdGlvbiBjb25zdCogZXhjZXB0
aW9uX3dyYXBwZXI6OkV4Y2VwdGlvblB0cjo6YXNfZXhjZXB0aW9uXygpCi0gICAgY29uc3Qgewot
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxzdGQ6OmV4Y2VwdGlvbiBjb25zdCo+KGV4Y2VwdGlv
bl9vcl90eXBlXyk7Ci19Ci1pbmxpbmUgc3RkOjp0eXBlX2luZm8gY29uc3QqIGV4Y2VwdGlvbl93
cmFwcGVyOjpFeGNlcHRpb25QdHI6OmFzX3R5cGVfKCkgY29uc3QgewotICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxzdGQ6OnR5cGVfaW5mbyBjb25zdCo+KGV4Y2VwdGlvbl9vcl90eXBlXyAtIDEp
OwotfQotCi1pbmxpbmUgdm9pZCBleGNlcHRpb25fd3JhcHBlcjo6RXhjZXB0aW9uUHRyOjpjb3B5
XygKLSAgICBleGNlcHRpb25fd3JhcHBlciBjb25zdCogZnJvbSwgZXhjZXB0aW9uX3dyYXBwZXIq
IHRvKSB7Ci0gIDo6bmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oJnRvLT5lcHRyXykpIEV4Y2VwdGlv
blB0cihmcm9tLT5lcHRyXyk7Ci19Ci1pbmxpbmUgdm9pZCBleGNlcHRpb25fd3JhcHBlcjo6RXhj
ZXB0aW9uUHRyOjptb3ZlXygKLSAgICBleGNlcHRpb25fd3JhcHBlciogZnJvbSwgZXhjZXB0aW9u
X3dyYXBwZXIqIHRvKSB7Ci0gIDo6bmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oJnRvLT5lcHRyXykp
Ci0gICAgICBFeGNlcHRpb25QdHIoc3RkOjptb3ZlKGZyb20tPmVwdHJfKSk7Ci0gIGRlbGV0ZV8o
ZnJvbSk7Ci19Ci1pbmxpbmUgdm9pZCBleGNlcHRpb25fd3JhcHBlcjo6RXhjZXB0aW9uUHRyOjpk
ZWxldGVfKAotICAgIGV4Y2VwdGlvbl93cmFwcGVyKiB0aGF0KSB7Ci0gIHRoYXQtPmVwdHJfLn5F
eGNlcHRpb25QdHIoKTsKLSAgdGhhdC0+dnB0cl8gPSAmdW5pbml0XzsKLX0KLVtbbm9yZXR1cm5d
XSBpbmxpbmUgdm9pZCBleGNlcHRpb25fd3JhcHBlcjo6RXhjZXB0aW9uUHRyOjp0aHJvd18oCi0g
ICAgZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QqIHRoYXQpIHsKLSAgc3RkOjpyZXRocm93X2V4Y2Vw
dGlvbih0aGF0LT5lcHRyXy5wdHJfKTsKLX0KLWlubGluZSBzdGQ6OnR5cGVfaW5mbyBjb25zdCog
ZXhjZXB0aW9uX3dyYXBwZXI6OkV4Y2VwdGlvblB0cjo6dHlwZV8oCi0gICAgZXhjZXB0aW9uX3dy
YXBwZXIgY29uc3QqIHRoYXQpIHsKLSAgaWYgKGF1dG8gZSA9IGdldF9leGNlcHRpb25fKHRoYXQp
KSB7Ci0gICAgcmV0dXJuICZ0eXBlaWQoKmUpOwotICB9Ci0gIHJldHVybiB0aGF0LT5lcHRyXy5h
c190eXBlXygpOwotfQotaW5saW5lIHN0ZDo6ZXhjZXB0aW9uIGNvbnN0KiBleGNlcHRpb25fd3Jh
cHBlcjo6RXhjZXB0aW9uUHRyOjpnZXRfZXhjZXB0aW9uXygKLSAgICBleGNlcHRpb25fd3JhcHBl
ciBjb25zdCogdGhhdCkgewotICByZXR1cm4gdGhhdC0+ZXB0cl8uaGFzX2V4Y2VwdGlvbl8oKSA/
IHRoYXQtPmVwdHJfLmFzX2V4Y2VwdGlvbl8oKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IG51bGxwdHI7Ci19Ci1pbmxpbmUgZXhjZXB0aW9uX3dyYXBwZXIgZXhjZXB0
aW9uX3dyYXBwZXI6OkV4Y2VwdGlvblB0cjo6Z2V0X2V4Y2VwdGlvbl9wdHJfKAotICAgIGV4Y2Vw
dGlvbl93cmFwcGVyIGNvbnN0KiB0aGF0KSB7Ci0gIHJldHVybiAqdGhhdDsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIEV4PgotaW5saW5lIHZvaWQgZXhjZXB0aW9uX3dyYXBwZXI6OkluUGxhY2U8RXg+
Ojpjb3B5XygKLSAgICBleGNlcHRpb25fd3JhcHBlciBjb25zdCogZnJvbSwgZXhjZXB0aW9uX3dy
YXBwZXIqIHRvKSB7Ci0gIDo6bmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oc3RkOjphZGRyZXNzb2Yo
dG8tPmJ1ZmZfLmFzPEV4PigpKSkpCi0gICAgICBFeChmcm9tLT5idWZmXy5hczxFeD4oKSk7Ci19
Ci10ZW1wbGF0ZSA8Y2xhc3MgRXg+Ci1pbmxpbmUgdm9pZCBleGNlcHRpb25fd3JhcHBlcjo6SW5Q
bGFjZTxFeD46Om1vdmVfKAotICAgIGV4Y2VwdGlvbl93cmFwcGVyKiBmcm9tLCBleGNlcHRpb25f
d3JhcHBlciogdG8pIHsKLSAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihzdGQ6OmFkZHJlc3Nv
Zih0by0+YnVmZl8uYXM8RXg+KCkpKSkKLSAgICAgIEV4KHN0ZDo6bW92ZShmcm9tLT5idWZmXy5h
czxFeD4oKSkpOwotICBkZWxldGVfKGZyb20pOwotfQotdGVtcGxhdGUgPGNsYXNzIEV4PgotaW5s
aW5lIHZvaWQgZXhjZXB0aW9uX3dyYXBwZXI6OkluUGxhY2U8RXg+OjpkZWxldGVfKAotICAgIGV4
Y2VwdGlvbl93cmFwcGVyKiB0aGF0KSB7Ci0gIHRoYXQtPmJ1ZmZfLmFzPEV4PigpLn5FeCgpOwot
ICB0aGF0LT52cHRyXyA9ICZ1bmluaXRfOwotfQotdGVtcGxhdGUgPGNsYXNzIEV4PgotW1tub3Jl
dHVybl1dIGlubGluZSB2b2lkIGV4Y2VwdGlvbl93cmFwcGVyOjpJblBsYWNlPEV4Pjo6dGhyb3df
KAotICAgIGV4Y2VwdGlvbl93cmFwcGVyIGNvbnN0KiB0aGF0KSB7Ci0gIHRocm93IHRoYXQtPmJ1
ZmZfLmFzPEV4PigpOyAvLyBAbm9saW50Ci19Ci10ZW1wbGF0ZSA8Y2xhc3MgRXg+Ci1pbmxpbmUg
c3RkOjp0eXBlX2luZm8gY29uc3QqIGV4Y2VwdGlvbl93cmFwcGVyOjpJblBsYWNlPEV4Pjo6dHlw
ZV8oCi0gICAgZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QqKSB7Ci0gIHJldHVybiAmdHlwZWlkKEV4
KTsKLX0KLXRlbXBsYXRlIDxjbGFzcyBFeD4KLWlubGluZSBzdGQ6OmV4Y2VwdGlvbiBjb25zdCog
ZXhjZXB0aW9uX3dyYXBwZXI6OkluUGxhY2U8RXg+OjpnZXRfZXhjZXB0aW9uXygKLSAgICBleGNl
cHRpb25fd3JhcHBlciBjb25zdCogdGhhdCkgewotICByZXR1cm4gYXNfZXhjZXB0aW9uX29yX251
bGxfKHRoYXQtPmJ1ZmZfLmFzPEV4PigpKTsKLX0KLXRlbXBsYXRlIDxjbGFzcyBFeD4KLWlubGlu
ZSBleGNlcHRpb25fd3JhcHBlciBleGNlcHRpb25fd3JhcHBlcjo6SW5QbGFjZTxFeD46OmdldF9l
eGNlcHRpb25fcHRyXygKLSAgICBleGNlcHRpb25fd3JhcHBlciBjb25zdCogdGhhdCkgewotICB0
cnkgewotICAgIHRocm93Xyh0aGF0KTsKLSAgfSBjYXRjaCAoRXggY29uc3QmIGV4KSB7Ci0gICAg
cmV0dXJuIGV4Y2VwdGlvbl93cmFwcGVye3N0ZDo6Y3VycmVudF9leGNlcHRpb24oKSwgZXh9Owot
ICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBFeD4KLVtbbm9yZXR1cm5dXSBpbmxpbmUgdm9pZAot
ZXhjZXB0aW9uX3dyYXBwZXI6OlNoYXJlZFB0cjo6SW1wbDxFeD46OnRocm93XygpIGNvbnN0IHsK
LSAgdGhyb3cgZXhfOyAvLyBAbm9saW50Ci19Ci10ZW1wbGF0ZSA8Y2xhc3MgRXg+Ci1pbmxpbmUg
c3RkOjpleGNlcHRpb24gY29uc3QqCi1leGNlcHRpb25fd3JhcHBlcjo6U2hhcmVkUHRyOjpJbXBs
PEV4Pjo6Z2V0X2V4Y2VwdGlvbl8oKSBjb25zdCBub2V4Y2VwdCB7Ci0gIHJldHVybiBhc19leGNl
cHRpb25fb3JfbnVsbF8oZXhfKTsKLX0KLXRlbXBsYXRlIDxjbGFzcyBFeD4KLWlubGluZSBleGNl
cHRpb25fd3JhcHBlcgotZXhjZXB0aW9uX3dyYXBwZXI6OlNoYXJlZFB0cjo6SW1wbDxFeD46Omdl
dF9leGNlcHRpb25fcHRyXygpIGNvbnN0IG5vZXhjZXB0IHsKLSAgdHJ5IHsKLSAgICB0aHJvd18o
KTsKLSAgfSBjYXRjaCAoRXgmIGV4KSB7Ci0gICAgcmV0dXJuIGV4Y2VwdGlvbl93cmFwcGVye3N0
ZDo6Y3VycmVudF9leGNlcHRpb24oKSwgZXh9OwotICB9Ci19Ci1pbmxpbmUgdm9pZCBleGNlcHRp
b25fd3JhcHBlcjo6U2hhcmVkUHRyOjpjb3B5XygKLSAgICBleGNlcHRpb25fd3JhcHBlciBjb25z
dCogZnJvbSwgZXhjZXB0aW9uX3dyYXBwZXIqIHRvKSB7Ci0gIDo6bmV3IChzdGF0aWNfY2FzdDx2
b2lkKj4oc3RkOjphZGRyZXNzb2YodG8tPnNwdHJfKSkpCi0gICAgICBTaGFyZWRQdHIoZnJvbS0+
c3B0cl8pOwotfQotaW5saW5lIHZvaWQgZXhjZXB0aW9uX3dyYXBwZXI6OlNoYXJlZFB0cjo6bW92
ZV8oCi0gICAgZXhjZXB0aW9uX3dyYXBwZXIqIGZyb20sIGV4Y2VwdGlvbl93cmFwcGVyKiB0bykg
ewotICA6Om5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KHN0ZDo6YWRkcmVzc29mKHRvLT5zcHRyXykp
KQotICAgICAgU2hhcmVkUHRyKHN0ZDo6bW92ZShmcm9tLT5zcHRyXykpOwotICBkZWxldGVfKGZy
b20pOwotfQotaW5saW5lIHZvaWQgZXhjZXB0aW9uX3dyYXBwZXI6OlNoYXJlZFB0cjo6ZGVsZXRl
XygKLSAgICBleGNlcHRpb25fd3JhcHBlciogdGhhdCkgewotICB0aGF0LT5zcHRyXy5+U2hhcmVk
UHRyKCk7Ci0gIHRoYXQtPnZwdHJfID0gJnVuaW5pdF87Ci19Ci1bW25vcmV0dXJuXV0gaW5saW5l
IHZvaWQgZXhjZXB0aW9uX3dyYXBwZXI6OlNoYXJlZFB0cjo6dGhyb3dfKAotICAgIGV4Y2VwdGlv
bl93cmFwcGVyIGNvbnN0KiB0aGF0KSB7Ci0gIHRoYXQtPnNwdHJfLnB0cl8tPnRocm93XygpOwot
ICBmb2xseTo6YXNzdW1lX3VucmVhY2hhYmxlKCk7Ci19Ci1pbmxpbmUgc3RkOjp0eXBlX2luZm8g
Y29uc3QqIGV4Y2VwdGlvbl93cmFwcGVyOjpTaGFyZWRQdHI6OnR5cGVfKAotICAgIGV4Y2VwdGlv
bl93cmFwcGVyIGNvbnN0KiB0aGF0KSB7Ci0gIHJldHVybiB0aGF0LT5zcHRyXy5wdHJfLT5pbmZv
XzsKLX0KLWlubGluZSBzdGQ6OmV4Y2VwdGlvbiBjb25zdCogZXhjZXB0aW9uX3dyYXBwZXI6OlNo
YXJlZFB0cjo6Z2V0X2V4Y2VwdGlvbl8oCi0gICAgZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QqIHRo
YXQpIHsKLSAgcmV0dXJuIHRoYXQtPnNwdHJfLnB0cl8tPmdldF9leGNlcHRpb25fKCk7Ci19Ci1p
bmxpbmUgZXhjZXB0aW9uX3dyYXBwZXIgZXhjZXB0aW9uX3dyYXBwZXI6OlNoYXJlZFB0cjo6Z2V0
X2V4Y2VwdGlvbl9wdHJfKAotICAgIGV4Y2VwdGlvbl93cmFwcGVyIGNvbnN0KiB0aGF0KSB7Ci0g
IHJldHVybiB0aGF0LT5zcHRyXy5wdHJfLT5nZXRfZXhjZXB0aW9uX3B0cl8oKTsKLX0KLQotdGVt
cGxhdGUgPGNsYXNzIEV4LCB0eXBlbmFtZS4uLiBBcz4KLWlubGluZSBleGNlcHRpb25fd3JhcHBl
cjo6ZXhjZXB0aW9uX3dyYXBwZXIoT25IZWFwVGFnLCBpbl9wbGFjZV90eXBlX3Q8RXg+LCBBcyYm
Li4uIGFzKQotICAgIDogc3B0cl97c3RkOjptYWtlX3NoYXJlZDxTaGFyZWRQdHI6OkltcGw8RXg+
PihzdGQ6OmZvcndhcmQ8QXM+KGFzKS4uLil9LAotICAgICAgdnB0cl8oJlNoYXJlZFB0cjo6b3Bz
Xykge30KLQotdGVtcGxhdGUgPGNsYXNzIEV4LCB0eXBlbmFtZS4uLiBBcz4KLWlubGluZSBleGNl
cHRpb25fd3JhcHBlcjo6ZXhjZXB0aW9uX3dyYXBwZXIoSW5TaXR1VGFnLCBpbl9wbGFjZV90eXBl
X3Q8RXg+LCBBcyYmLi4uIGFzKQotICAgIDogYnVmZl97aW5fcGxhY2VfdHlwZTxFeD4sIHN0ZDo6
Zm9yd2FyZDxBcz4oYXMpLi4ufSwKLSAgICAgIHZwdHJfKCZJblBsYWNlPEV4Pjo6b3BzXykge30K
LQotaW5saW5lIGV4Y2VwdGlvbl93cmFwcGVyOjpleGNlcHRpb25fd3JhcHBlcihleGNlcHRpb25f
d3JhcHBlciYmIHRoYXQpIG5vZXhjZXB0Ci0gICAgOiBleGNlcHRpb25fd3JhcHBlcnt9IHsKLSAg
KHZwdHJfID0gdGhhdC52cHRyXyktPm1vdmVfKCZ0aGF0LCB0aGlzKTsgLy8gTW92ZSBpbnRvICp0
aGlzLCB3b24ndCB0aHJvdwotfQotCi1pbmxpbmUgZXhjZXB0aW9uX3dyYXBwZXI6OmV4Y2VwdGlv
bl93cmFwcGVyKAotICAgIGV4Y2VwdGlvbl93cmFwcGVyIGNvbnN0JiB0aGF0KSA6IGV4Y2VwdGlv
bl93cmFwcGVye30gewotICB0aGF0LnZwdHJfLT5jb3B5XygmdGhhdCwgdGhpcyk7IC8vIGNvdWxk
IHRocm93Ci0gIHZwdHJfID0gdGhhdC52cHRyXzsKLX0KLQotLy8gSWYgYHRoaXMgPT0gJnRoYXRg
LCB0aGlzIG1vdmUgYXNzaWdubWVudCBvcGVyYXRvciBsZWF2ZXMgdGhlIG9iamVjdCBpbiBhCi0v
LyB2YWxpZCBidXQgdW5zcGVjaWZpZWQgc3RhdGUuCi1pbmxpbmUgZXhjZXB0aW9uX3dyYXBwZXIm
IGV4Y2VwdGlvbl93cmFwcGVyOjpvcGVyYXRvcj0oCi0gICAgZXhjZXB0aW9uX3dyYXBwZXImJiB0
aGF0KSBub2V4Y2VwdCB7Ci0gIHZwdHJfLT5kZWxldGVfKHRoaXMpOyAvLyBGcmVlIHRoZSBjdXJy
ZW50IGV4Y2VwdGlvbgotICAodnB0cl8gPSB0aGF0LnZwdHJfKS0+bW92ZV8oJnRoYXQsIHRoaXMp
OyAvLyBNb3ZlIGludG8gKnRoaXMsIHdvbid0IHRocm93Ci0gIHJldHVybiAqdGhpczsKLX0KLQot
aW5saW5lIGV4Y2VwdGlvbl93cmFwcGVyJiBleGNlcHRpb25fd3JhcHBlcjo6b3BlcmF0b3I9KAot
ICAgIGV4Y2VwdGlvbl93cmFwcGVyIGNvbnN0JiB0aGF0KSB7Ci0gIGV4Y2VwdGlvbl93cmFwcGVy
KHRoYXQpLnN3YXAoKnRoaXMpOwotICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSBleGNlcHRp
b25fd3JhcHBlcjo6fmV4Y2VwdGlvbl93cmFwcGVyKCkgewotICByZXNldCgpOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgRXg+Ci1pbmxpbmUgZXhjZXB0aW9uX3dyYXBwZXI6OmV4Y2VwdGlvbl93cmFw
cGVyKHN0ZDo6ZXhjZXB0aW9uX3B0ciBwdHIsIEV4JiBleCkKLSAgICA6IGVwdHJfe3B0ciwgRXhj
ZXB0aW9uUHRyOjphc19pbnRfKHB0ciwgZXgpfSwKLSAgICAgIHZwdHJfKCZFeGNlcHRpb25QdHI6
Om9wc18pIHsKLSAgYXNzZXJ0KGVwdHJfLnB0cl8pOwotfQotCi1uYW1lc3BhY2UgZXhjZXB0aW9u
X3dyYXBwZXJfZGV0YWlsIHsKLXRlbXBsYXRlIDxjbGFzcyBFeD4KLUV4JiYgZG9udF9zbGljZShF
eCYmIGV4KSB7Ci0gIGFzc2VydCh0eXBlaWQoZXgpID09IHR5cGVpZChfdDxzdGQ6OmRlY2F5PEV4
Pj4pIHx8Ci0gICAgICAgISJEeW5hbWljIGFuZCBzdGF0aWMgZXhjZXB0aW9uIHR5cGVzIGRvbid0
IG1hdGNoLiBFeGNlcHRpb24gd291bGQgIgotICAgICAgICAiYmUgc2xpY2VkIHdoZW4gc3Rvcmlu
ZyBpbiBleGNlcHRpb25fd3JhcHBlci4iKTsKLSAgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxFeD4oZXgp
OwotfQotfQotCi10ZW1wbGF0ZSA8Ci0gICAgY2xhc3MgRXgsCi0gICAgY2xhc3MgRXhfLAotICAg
IEZPTExZX1JFUVVJUkVTX0RFRigKLSAgICAgICAgQ29uanVuY3Rpb248Ci0gICAgICAgICAgICBl
eGNlcHRpb25fd3JhcHBlcjo6SXNTdGRFeGNlcHRpb248RXhfPiwKLSAgICAgICAgICAgIGV4Y2Vw
dGlvbl93cmFwcGVyOjpJc1JlZ3VsYXJFeGNlcHRpb25UeXBlPEV4Xz4+Ojp2YWx1ZSk+Ci1pbmxp
bmUgZXhjZXB0aW9uX3dyYXBwZXI6OmV4Y2VwdGlvbl93cmFwcGVyKEV4JiYgZXgpCi0gICAgOiBl
eGNlcHRpb25fd3JhcHBlcnsKLSAgICAgICAgUGxhY2VtZW50T2Y8RXhfPnt9LAotICAgICAgICBp
bl9wbGFjZV90eXBlPEV4Xz4sCi0gICAgICAgIGV4Y2VwdGlvbl93cmFwcGVyX2RldGFpbDo6ZG9u
dF9zbGljZShzdGQ6OmZvcndhcmQ8RXg+KGV4KSl9IHsKLX0KLQotdGVtcGxhdGUgPAotICAgIGNs
YXNzIEV4LAotICAgIGNsYXNzIEV4XywKLSAgICBGT0xMWV9SRVFVSVJFU19ERUYoCi0gICAgICAg
IGV4Y2VwdGlvbl93cmFwcGVyOjpJc1JlZ3VsYXJFeGNlcHRpb25UeXBlPEV4Xz46OnZhbHVlKT4K
LWlubGluZSBleGNlcHRpb25fd3JhcHBlcjo6ZXhjZXB0aW9uX3dyYXBwZXIoaW5fcGxhY2VfdCwg
RXgmJiBleCkKLSAgICA6IGV4Y2VwdGlvbl93cmFwcGVyewotICAgICAgICBQbGFjZW1lbnRPZjxF
eF8+e30sCi0gICAgICAgIGluX3BsYWNlX3R5cGU8RXhfPiwKLSAgICAgICAgZXhjZXB0aW9uX3dy
YXBwZXJfZGV0YWlsOjpkb250X3NsaWNlKHN0ZDo6Zm9yd2FyZDxFeD4oZXgpKX0gewotfQotCi10
ZW1wbGF0ZSA8Ci0gICAgY2xhc3MgRXgsCi0gICAgdHlwZW5hbWUuLi4gQXMsCi0gICAgRk9MTFlf
UkVRVUlSRVNfREVGKAotICAgICAgICBleGNlcHRpb25fd3JhcHBlcjo6SXNSZWd1bGFyRXhjZXB0
aW9uVHlwZTxFeD46OnZhbHVlKT4KLWlubGluZSBleGNlcHRpb25fd3JhcHBlcjo6ZXhjZXB0aW9u
X3dyYXBwZXIoaW5fcGxhY2VfdHlwZV90PEV4PiwgQXMmJi4uLiBhcykKLSAgICA6IGV4Y2VwdGlv
bl93cmFwcGVyewotICAgICAgICBQbGFjZW1lbnRPZjxFeD57fSwKLSAgICAgICAgaW5fcGxhY2Vf
dHlwZTxFeD4sCi0gICAgICAgIHN0ZDo6Zm9yd2FyZDxBcz4oYXMpLi4ufSB7Ci19Ci0KLWlubGlu
ZSB2b2lkIGV4Y2VwdGlvbl93cmFwcGVyOjpzd2FwKGV4Y2VwdGlvbl93cmFwcGVyJiB0aGF0KSBu
b2V4Y2VwdCB7Ci0gIGV4Y2VwdGlvbl93cmFwcGVyIHRtcChzdGQ6Om1vdmUodGhhdCkpOwotICB0
aGF0ID0gc3RkOjptb3ZlKCp0aGlzKTsKLSAgKnRoaXMgPSBzdGQ6Om1vdmUodG1wKTsKLX0KLQot
aW5saW5lIGV4Y2VwdGlvbl93cmFwcGVyOjpvcGVyYXRvciBib29sKCkgY29uc3Qgbm9leGNlcHQg
ewotICByZXR1cm4gdnB0cl8gIT0gJnVuaW5pdF87Ci19Ci0KLWlubGluZSBib29sIGV4Y2VwdGlv
bl93cmFwcGVyOjpvcGVyYXRvciEoKSBjb25zdCBub2V4Y2VwdCB7Ci0gIHJldHVybiAhc3RhdGlj
X2Nhc3Q8Ym9vbD4oKnRoaXMpOwotfQotCi1pbmxpbmUgdm9pZCBleGNlcHRpb25fd3JhcHBlcjo6
cmVzZXQoKSB7Ci0gIHZwdHJfLT5kZWxldGVfKHRoaXMpOwotfQotCi1pbmxpbmUgYm9vbCBleGNl
cHRpb25fd3JhcHBlcjo6aGFzX2V4Y2VwdGlvbl9wdHIoKSBjb25zdCBub2V4Y2VwdCB7Ci0gIHJl
dHVybiB2cHRyXyA9PSAmRXhjZXB0aW9uUHRyOjpvcHNfOwotfQotCi1pbmxpbmUgc3RkOjpleGNl
cHRpb24qIGV4Y2VwdGlvbl93cmFwcGVyOjpnZXRfZXhjZXB0aW9uKCkgbm9leGNlcHQgewotICBy
ZXR1cm4gY29uc3RfY2FzdDxzdGQ6OmV4Y2VwdGlvbio+KHZwdHJfLT5nZXRfZXhjZXB0aW9uXyh0
aGlzKSk7Ci19Ci1pbmxpbmUgc3RkOjpleGNlcHRpb24gY29uc3QqIGV4Y2VwdGlvbl93cmFwcGVy
OjpnZXRfZXhjZXB0aW9uKCkgY29uc3Qgbm9leGNlcHQgewotICByZXR1cm4gdnB0cl8tPmdldF9l
eGNlcHRpb25fKHRoaXMpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRXg+Ci1pbmxpbmUgRXgq
IGV4Y2VwdGlvbl93cmFwcGVyOjpnZXRfZXhjZXB0aW9uKCkgbm9leGNlcHQgewotICBFeCogb2Jq
ZWN0e251bGxwdHJ9OwotICB3aXRoX2V4Y2VwdGlvbihbJl0oRXgmIGV4KSB7IG9iamVjdCA9ICZl
eDsgfSk7Ci0gIHJldHVybiBvYmplY3Q7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFeD4KLWlu
bGluZSBFeCBjb25zdCogZXhjZXB0aW9uX3dyYXBwZXI6OmdldF9leGNlcHRpb24oKSBjb25zdCBu
b2V4Y2VwdCB7Ci0gIEV4IGNvbnN0KiBvYmplY3R7bnVsbHB0cn07Ci0gIHdpdGhfZXhjZXB0aW9u
KFsmXShFeCBjb25zdCYgZXgpIHsgb2JqZWN0ID0gJmV4OyB9KTsKLSAgcmV0dXJuIG9iamVjdDsK
LX0KLQotaW5saW5lIHN0ZDo6ZXhjZXB0aW9uX3B0ciBjb25zdCYgZXhjZXB0aW9uX3dyYXBwZXI6
OnRvX2V4Y2VwdGlvbl9wdHIoKQotICAgIG5vZXhjZXB0IHsKLSAgLy8gQ29tcHV0aW5nIGFuIGV4
Y2VwdGlvbl9wdHIgaXMgZXhwZW5zaXZlIHNvIGNhY2hlIHRoZSByZXN1bHQuCi0gIHJldHVybiAo
KnRoaXMgPSB2cHRyXy0+Z2V0X2V4Y2VwdGlvbl9wdHJfKHRoaXMpKS5lcHRyXy5wdHJfOwotfQot
aW5saW5lIHN0ZDo6ZXhjZXB0aW9uX3B0ciBleGNlcHRpb25fd3JhcHBlcjo6dG9fZXhjZXB0aW9u
X3B0cigpIGNvbnN0IG5vZXhjZXB0IHsKLSAgcmV0dXJuIHZwdHJfLT5nZXRfZXhjZXB0aW9uX3B0
cl8odGhpcykuZXB0cl8ucHRyXzsKLX0KLQotaW5saW5lIHN0ZDo6dHlwZV9pbmZvIGNvbnN0JiBl
eGNlcHRpb25fd3JhcHBlcjo6bm9uZSgpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIHR5cGVpZCh2b2lk
KTsKLX0KLWlubGluZSBzdGQ6OnR5cGVfaW5mbyBjb25zdCYgZXhjZXB0aW9uX3dyYXBwZXI6OnVu
a25vd24oKSBub2V4Y2VwdCB7Ci0gIHJldHVybiB0eXBlaWQoVW5rbm93bik7Ci19Ci0KLWlubGlu
ZSBzdGQ6OnR5cGVfaW5mbyBjb25zdCYgZXhjZXB0aW9uX3dyYXBwZXI6OnR5cGUoKSBjb25zdCBu
b2V4Y2VwdCB7Ci0gIHJldHVybiAqdnB0cl8tPnR5cGVfKHRoaXMpOwotfQotCi1pbmxpbmUgZm9s
bHk6OmZic3RyaW5nIGV4Y2VwdGlvbl93cmFwcGVyOjp3aGF0KCkgY29uc3QgewotICBpZiAoYXV0
byBlID0gZ2V0X2V4Y2VwdGlvbigpKSB7Ci0gICAgcmV0dXJuIGNsYXNzX25hbWUoKSArICI6ICIg
KyBlLT53aGF0KCk7Ci0gIH0KLSAgcmV0dXJuIGNsYXNzX25hbWUoKTsKLX0KLQotaW5saW5lIGZv
bGx5OjpmYnN0cmluZyBleGNlcHRpb25fd3JhcHBlcjo6Y2xhc3NfbmFtZSgpIGNvbnN0IHsKLSAg
YXV0byYgdGkgPSB0eXBlKCk7Ci0gIHJldHVybiB0aSA9PSBub25lKCkKLSAgICAgID8gIiIKLSAg
ICAgIDogdGkgPT0gdW5rbm93bigpID8gIjx1bmtub3duIGV4Y2VwdGlvbj4iIDogZm9sbHk6OmRl
bWFuZ2xlKHRpKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIEV4PgotaW5saW5lIGJvb2wgZXhjZXB0
aW9uX3dyYXBwZXI6OmlzX2NvbXBhdGlibGVfd2l0aCgpIGNvbnN0IG5vZXhjZXB0IHsKLSAgcmV0
dXJuIHdpdGhfZXhjZXB0aW9uKFtdKEV4IGNvbnN0Jikge30pOwotfQotCi1bW25vcmV0dXJuXV0g
aW5saW5lIHZvaWQgZXhjZXB0aW9uX3dyYXBwZXI6OnRocm93X2V4Y2VwdGlvbigpIGNvbnN0IHsK
LSAgdnB0cl8tPnRocm93Xyh0aGlzKTsKLSAgb25Ob0V4Y2VwdGlvbkVycm9yKF9fZnVuY19fKTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIENhdGNoRm4sIGJvb2wgSXNDb25zdD4KLXN0cnVjdCBleGNl
cHRpb25fd3JhcHBlcjo6RXhjZXB0aW9uVHlwZU9mIHsKLSAgdXNpbmcgdHlwZSA9IGFyZ190eXBl
PF90PHN0ZDo6ZGVjYXk8Q2F0Y2hGbj4+PjsKLSAgc3RhdGljX2Fzc2VydCgKLSAgICAgIHN0ZDo6
aXNfcmVmZXJlbmNlPHR5cGU+Ojp2YWx1ZSwKLSAgICAgICJBbHdheXMgY2F0Y2ggZXhjZXB0aW9u
cyBieSByZWZlcmVuY2UuIik7Ci0gIHN0YXRpY19hc3NlcnQoCi0gICAgICAhSXNDb25zdCB8fCBz
dGQ6OmlzX2NvbnN0PF90PHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTx0eXBlPj4+Ojp2YWx1ZSwKLSAg
ICAgICJoYW5kbGUoKSBvciB3aXRoX2V4Y2VwdGlvbigpIGNhbGxlZCBvbiBhIGNvbnN0IGV4Y2Vw
dGlvbl93cmFwcGVyICIKLSAgICAgICJhbmQgYXNrZWQgdG8gY2F0Y2ggYSBub24tY29uc3QgZXhj
ZXB0aW9uLiBIYW5kbGVyIHdpbGwgbmV2ZXIgZmlyZS4gIgotICAgICAgIkNhdGNoIGV4Y2VwdGlv
biBieSBjb25zdCByZWZlcmVuY2UgdG8gZml4IHRoaXMuIik7Ci19OwotCi0vLyBOZXN0cyBhIHRo
cm93IGluIHRoZSBwcm9wZXIgdHJ5L2NhdGNoIGJsb2NrcwotdGVtcGxhdGUgPGJvb2wgSXNDb25z
dD4KLXN0cnVjdCBleGNlcHRpb25fd3JhcHBlcjo6SGFuZGxlUmVkdWNlIHsKLSAgYm9vbCogaGFu
ZGxlZF87Ci0KLSAgdGVtcGxhdGUgPAotICAgICAgY2xhc3MgVGhyb3dGbiwKLSAgICAgIGNsYXNz
IENhdGNoRm4sCi0gICAgICBGT0xMWV9SRVFVSVJFUyghSXNDYXRjaEFsbDxDYXRjaEZuPjo6dmFs
dWUpPgotICBhdXRvIG9wZXJhdG9yKCkoVGhyb3dGbiYmIHRoLCBDYXRjaEZuJiBjYSkgY29uc3Qg
ewotICAgIHVzaW5nIEV4ID0gX3Q8RXhjZXB0aW9uVHlwZU9mPENhdGNoRm4sIElzQ29uc3Q+PjsK
LSAgICByZXR1cm4gWyB0aCA9IHN0ZDo6Zm9yd2FyZDxUaHJvd0ZuPih0aCksICZjYSwgaGFuZGxl
ZF8gPSBoYW5kbGVkXyBdIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIHRoKCk7Ci0gICAgICB9IGNh
dGNoIChFeCYgZSkgewotICAgICAgICAvLyBJZiB3ZSBnb3QgaGVyZSBiZWNhdXNlIGEgY2F0Y2gg
ZnVuY3Rpb24gdGhyZXcsIHJldGhyb3cuCi0gICAgICAgIGlmICgqaGFuZGxlZF8pIHsKLSAgICAg
ICAgICB0aHJvdzsKLSAgICAgICAgfQotICAgICAgICAqaGFuZGxlZF8gPSB0cnVlOwotICAgICAg
ICBjYShlKTsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0KLSAgdGVtcGxhdGUgPAotICAgICAgY2xh
c3MgVGhyb3dGbiwKLSAgICAgIGNsYXNzIENhdGNoRm4sCi0gICAgICBGT0xMWV9SRVFVSVJFUyhJ
c0NhdGNoQWxsPENhdGNoRm4+Ojp2YWx1ZSk+Ci0gIGF1dG8gb3BlcmF0b3IoKShUaHJvd0ZuJiYg
dGgsIENhdGNoRm4mIGNhKSBjb25zdCB7Ci0gICAgcmV0dXJuIFsgdGggPSBzdGQ6OmZvcndhcmQ8
VGhyb3dGbj4odGgpLCAmY2EsIGhhbmRsZWRfID0gaGFuZGxlZF8gXSB7Ci0gICAgICB0cnkgewot
ICAgICAgICB0aCgpOwotICAgICAgfSBjYXRjaCAoLi4uKSB7Ci0gICAgICAgIC8vIElmIHdlIGdv
dCBoZXJlIGJlY2F1c2UgYSBjYXRjaCBmdW5jdGlvbiB0aHJldywgcmV0aHJvdy4KLSAgICAgICAg
aWYgKCpoYW5kbGVkXykgewotICAgICAgICAgIHRocm93OwotICAgICAgICB9Ci0gICAgICAgICpo
YW5kbGVkXyA9IHRydWU7Ci0gICAgICAgIGNhKCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotfTsK
LQotLy8gV2hlbiBhbGwgdGhlIGhhbmRsZXJzIGV4cGVjdCB0eXBlcyBkZXJpdmVkIGZyb20gc3Rk
OjpleGNlcHRpb24sIHdlIGNhbgotLy8gc29tZXRpbWVzIGludm9rZSB0aGUgaGFuZGxlcnMgd2l0
aG91dCB0aHJvd2luZyBhbnkgZXhjZXB0aW9ucy4KLXRlbXBsYXRlIDxib29sIElzQ29uc3Q+Ci1z
dHJ1Y3QgZXhjZXB0aW9uX3dyYXBwZXI6OkhhbmRsZVN0ZEV4Y2VwdFJlZHVjZSB7Ci0gIHVzaW5n
IFN0ZEV4ID0gQWRkQ29uc3RJZjxJc0NvbnN0LCBzdGQ6OmV4Y2VwdGlvbj47Ci0KLSAgdGVtcGxh
dGUgPAotICAgICAgY2xhc3MgVGhyb3dGbiwKLSAgICAgIGNsYXNzIENhdGNoRm4sCi0gICAgICBG
T0xMWV9SRVFVSVJFUyghSXNDYXRjaEFsbDxDYXRjaEZuPjo6dmFsdWUpPgotICBhdXRvIG9wZXJh
dG9yKCkoVGhyb3dGbiYmIHRoLCBDYXRjaEZuJiBjYSkgY29uc3QgewotICAgIHVzaW5nIEV4ID0g
X3Q8RXhjZXB0aW9uVHlwZU9mPENhdGNoRm4sIElzQ29uc3Q+PjsKLSAgICByZXR1cm4gWyB0aCA9
IHN0ZDo6Zm9yd2FyZDxUaHJvd0ZuPih0aCksICZjYSBdKGF1dG8mJiBjb250aW51YXRpb24pCi0g
ICAgICAgIC0+IFN0ZEV4KiB7Ci0gICAgICBpZiAoYXV0byBlID0gY29uc3RfY2FzdDxTdGRFeCo+
KHRoKGNvbnRpbnVhdGlvbikpKSB7Ci0gICAgICAgIGlmIChhdXRvIGUyID0gZHluYW1pY19jYXN0
PF90PHN0ZDo6YWRkX3BvaW50ZXI8RXg+Pj4oZSkpIHsKLSAgICAgICAgICBjYSgqZTIpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIHJldHVybiBlOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9OwotICB9Ci0KLSAgdGVtcGxhdGUgPAotICAgICAg
Y2xhc3MgVGhyb3dGbiwKLSAgICAgIGNsYXNzIENhdGNoRm4sCi0gICAgICBGT0xMWV9SRVFVSVJF
UyhJc0NhdGNoQWxsPENhdGNoRm4+Ojp2YWx1ZSk+Ci0gIGF1dG8gb3BlcmF0b3IoKShUaHJvd0Zu
JiYgdGgsIENhdGNoRm4mIGNhKSBjb25zdCB7Ci0gICAgcmV0dXJuIFsgdGggPSBzdGQ6OmZvcndh
cmQ8VGhyb3dGbj4odGgpLCAmY2EgXShhdXRvJiYpIC0+IFN0ZEV4KiB7Ci0gICAgICAvLyBUaGUg
Zm9sbG93aW5nIGNvbnRpbnVhdGlvbiBjYXVzZXMgY2EoKSB0byBleGVjdXRlIGlmICp0aGlzIGNv
bnRhaW5zCi0gICAgICAvLyBhbiBleGNlcHRpb24gL25vdC8gZGVyaXZlZCBmcm9tIHN0ZDo6ZXhj
ZXB0aW9uLgotICAgICAgYXV0byBjb250aW51YXRpb24gPSBbJmNhXShTdGRFeCogZSkgewotICAg
ICAgICByZXR1cm4gZSAhPSBudWxscHRyID8gZSA6ICgodm9pZCljYSgpLCBudWxscHRyKTsKLSAg
ICAgIH07Ci0gICAgICBpZiAodGgoY29udGludWF0aW9uKSAhPSBudWxscHRyKSB7Ci0gICAgICAg
IGNhKCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9OwotICB9Ci19Owot
Ci0vLyBDYWxsZWQgd2hlbiBzb21lIHR5cGVzIGluIHRoZSBjYXRjaCBjbGF1c2VzIGFyZSBub3Qg
ZGVyaXZlZCBmcm9tCi0vLyBzdGQ6OmV4Y2VwdGlvbi4KLXRlbXBsYXRlIDxjbGFzcyBUaGlzLCBj
bGFzcy4uLiBDYXRjaEZucz4KLWlubGluZSB2b2lkIGV4Y2VwdGlvbl93cmFwcGVyOjpoYW5kbGVf
KAotICAgIHN0ZDo6ZmFsc2VfdHlwZSwgVGhpcyYgdGhpc18sIENhdGNoRm5zJi4uLiBmbnMpIHsK
LSAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gIGF1dG8gaW1wbCA9IGV4Y2VwdGlvbl93cmFwcGVy
X2RldGFpbDo6Zm9sZCgKLSAgICAgIEhhbmRsZVJlZHVjZTxzdGQ6OmlzX2NvbnN0PFRoaXM+Ojp2
YWx1ZT57JmhhbmRsZWR9LAotICAgICAgWyZdIHsgdGhpc18udGhyb3dfZXhjZXB0aW9uKCk7IH0s
Ci0gICAgICBmbnMuLi4pOwotICBpbXBsKCk7Ci19Ci0KLS8vIENhbGxlZCB3aGVuIGFsbCB0eXBl
cyBpbiB0aGUgY2F0Y2ggY2xhdXNlcyBhcmUgZWl0aGVyIGRlcml2ZWQgZnJvbQotLy8gc3RkOjpl
eGNlcHRpb24gb3IgYSBjYXRjaC1hbGwgY2xhdXNlLgotdGVtcGxhdGUgPGNsYXNzIFRoaXMsIGNs
YXNzLi4uIENhdGNoRm5zPgotaW5saW5lIHZvaWQgZXhjZXB0aW9uX3dyYXBwZXI6OmhhbmRsZV8o
Ci0gICAgc3RkOjp0cnVlX3R5cGUsIFRoaXMmIHRoaXNfLCBDYXRjaEZucyYuLi4gZm5zKSB7Ci0g
IHVzaW5nIFN0ZEV4ID0gZXhjZXB0aW9uX3dyYXBwZXJfZGV0YWlsOjoKLSAgICAgIEFkZENvbnN0
SWY8c3RkOjppc19jb25zdDxUaGlzPjo6dmFsdWUsIHN0ZDo6ZXhjZXB0aW9uPjsKLSAgYXV0byBp
bXBsID0gZXhjZXB0aW9uX3dyYXBwZXJfZGV0YWlsOjpmb2xkKAotICAgICAgSGFuZGxlU3RkRXhj
ZXB0UmVkdWNlPHN0ZDo6aXNfY29uc3Q8VGhpcz46OnZhbHVlPnt9LAotICAgICAgWyZdKGF1dG8m
JiBjb250aW51YXRpb24pIHsKLSAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbigKLSAgICAgICAg
ICAgIGNvbnN0X2Nhc3Q8U3RkRXgqPih0aGlzXy52cHRyXy0+Z2V0X2V4Y2VwdGlvbl8oJnRoaXNf
KSkpOwotICAgICAgfSwKLSAgICAgIGZucy4uLik7Ci0gIC8vIFRoaXMgY29udGludWF0aW9uIGdl
dHMgZXZhbHVhdGVkIGlmIENhdGNoRm5zLi4uIGRvZXMgbm90IGluY2x1ZGUgYQotICAvLyBjYXRj
aC1hbGwgaGFuZGxlci4gSXQgaXMgYSBuby1vcC4KLSAgYXV0byBjb250aW51YXRpb24gPSBbXShT
dGRFeCogZXgpIHsgcmV0dXJuIGV4OyB9OwotICBpZiAoU3RkRXgqIGUgPSBpbXBsKGNvbnRpbnVh
dGlvbikpIHsKLSAgICB0aHJvdyAqZTsgLy8gTm90IGhhbmRsZWQuIFRocm93LgotICB9Ci19Ci0K
LW5hbWVzcGFjZSBleGNlcHRpb25fd3JhcHBlcl9kZXRhaWwgewotdGVtcGxhdGUgPGNsYXNzIEV4
LCBjbGFzcyBGbj4KLXN0cnVjdCBjYXRjaF9mbiB7Ci0gIEZuIGZuXzsKLSAgYXV0byBvcGVyYXRv
cigpKEV4JiBleCkgewotICAgIHJldHVybiBmbl8oZXgpOwotICB9Ci19OwotCi10ZW1wbGF0ZSA8
Y2xhc3MgRXgsIGNsYXNzIEZuPgotaW5saW5lIGNhdGNoX2ZuPEV4LCBGbj4gY2F0Y2hfKEV4Kiwg
Rm4gZm4pIHsKLSAgcmV0dXJuIHtzdGQ6Om1vdmUoZm4pfTsKLX0KLXRlbXBsYXRlIDxjbGFzcyBG
bj4KLWlubGluZSBGbiBjYXRjaF8odm9pZCBjb25zdCosIEZuIGZuKSB7Ci0gIHJldHVybiBmbjsK
LX0KLX0gLy8gbmFtZXNwYWNlIGV4Y2VwdGlvbl93cmFwcGVyX2RldGFpbAotCi10ZW1wbGF0ZSA8
Y2xhc3MgRXgsIGNsYXNzIFRoaXMsIGNsYXNzIEZuPgotaW5saW5lIGJvb2wgZXhjZXB0aW9uX3dy
YXBwZXI6OndpdGhfZXhjZXB0aW9uXyhUaGlzJiB0aGlzXywgRm4gZm5fKSB7Ci0gIGlmICghdGhp
c18pIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgYm9vbCBoYW5kbGVkID0gdHJ1ZTsKLSAg
YXV0byBmbiA9IGV4Y2VwdGlvbl93cmFwcGVyX2RldGFpbDo6Y2F0Y2hfKAotICAgICAgc3RhdGlj
X2Nhc3Q8RXgqPihudWxscHRyKSwgc3RkOjptb3ZlKGZuXykpOwotICBhdXRvJiYgYWxsID0gWyZd
KC4uLikgeyBoYW5kbGVkID0gZmFsc2U7IH07Ci0gIGhhbmRsZV8oSXNTdGRFeGNlcHRpb248YXJn
X3R5cGU8ZGVjbHR5cGUoZm4pPj57fSwgdGhpc18sIGZuLCBhbGwpOwotICByZXR1cm4gaGFuZGxl
ZDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIEV4LCBjbGFzcyBGbj4KLWlubGluZSBib29sIGV4Y2Vw
dGlvbl93cmFwcGVyOjp3aXRoX2V4Y2VwdGlvbihGbiBmbikgewotICByZXR1cm4gd2l0aF9leGNl
cHRpb25fPEV4PigqdGhpcywgc3RkOjptb3ZlKGZuKSk7Ci19Ci10ZW1wbGF0ZSA8Y2xhc3MgRXgs
IGNsYXNzIEZuPgotaW5saW5lIGJvb2wgZXhjZXB0aW9uX3dyYXBwZXI6OndpdGhfZXhjZXB0aW9u
KEZuIGZuKSBjb25zdCB7Ci0gIHJldHVybiB3aXRoX2V4Y2VwdGlvbl88RXggY29uc3Q+KCp0aGlz
LCBzdGQ6Om1vdmUoZm4pKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzLi4uIENhdGNoRm5zPgotaW5s
aW5lIHZvaWQgZXhjZXB0aW9uX3dyYXBwZXI6OmhhbmRsZShDYXRjaEZucy4uLiBmbnMpIHsKLSAg
dXNpbmcgQWxsU3RkRXggPQotICAgICAgZXhjZXB0aW9uX3dyYXBwZXJfZGV0YWlsOjpBbGxPZjxJ
c1N0ZEV4Y2VwdGlvbiwgYXJnX3R5cGU8Q2F0Y2hGbnM+Li4uPjsKLSAgaWYgKCEqdGhpcykgewot
ICAgIG9uTm9FeGNlcHRpb25FcnJvcihfX2Z1bmNfXyk7Ci0gIH0KLSAgdGhpcy0+aGFuZGxlXyhB
bGxTdGRFeHt9LCAqdGhpcywgZm5zLi4uKTsKLX0KLXRlbXBsYXRlIDxjbGFzcy4uLiBDYXRjaEZu
cz4KLWlubGluZSB2b2lkIGV4Y2VwdGlvbl93cmFwcGVyOjpoYW5kbGUoQ2F0Y2hGbnMuLi4gZm5z
KSBjb25zdCB7Ci0gIHVzaW5nIEFsbFN0ZEV4ID0KLSAgICAgIGV4Y2VwdGlvbl93cmFwcGVyX2Rl
dGFpbDo6QWxsT2Y8SXNTdGRFeGNlcHRpb24sIGFyZ190eXBlPENhdGNoRm5zPi4uLj47Ci0gIGlm
ICghKnRoaXMpIHsKLSAgICBvbk5vRXhjZXB0aW9uRXJyb3IoX19mdW5jX18pOwotICB9Ci0gIHRo
aXMtPmhhbmRsZV8oQWxsU3RkRXh7fSwgKnRoaXMsIGZucy4uLik7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIGZvbGx5CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9mb2xseS9FeGNlcHRpb25XcmFwcGVyLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9mb2xseS9FeGNlcHRpb25XcmFwcGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDVmMWQ2NWEyY2ZhNWNlZTY4ODFhOWVlN2I2MmYzOTUyN2ZiNTJhYzUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvRXhjZXB0aW9uV3JhcHBlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsNjk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNy1wcmVzZW50IEZhY2Vib29r
LCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u
IDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw
dCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNv
cHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl
bnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxh
dyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRI
T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mg
b3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
bnNlLgotICovCi0vKgotICogQXV0aG9yOiBFcmljIE5pZWJsZXIgPGVuaWVibGVyQGZiLmNvbT4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8Y3N0
ZGludD4KLSNpbmNsdWRlIDxleGNlcHRpb24+Ci0jaW5jbHVkZSA8aW9zZndkPgotI2luY2x1ZGUg
PG1lbW9yeT4KLSNpbmNsdWRlIDxuZXc+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVk
ZSA8dHlwZWluZm8+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgPGZvbGx5L0Fzc3Vt
ZS5oPgotI2luY2x1ZGUgPGZvbGx5L0NQb3J0YWJpbGl0eS5oPgotI2luY2x1ZGUgPGZvbGx5L0Rl
bWFuZ2xlLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvRXhjZXB0aW9uU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
Zm9sbHkvRkJTdHJpbmcuaD4KLSNpbmNsdWRlIDxmb2xseS9Qb3J0YWJpbGl0eS5oPgotI2luY2x1
ZGUgPGZvbGx5L1RyYWl0cy5oPgotI2luY2x1ZGUgPGZvbGx5L1V0aWxpdHkuaD4KLQotI2lmZGVm
IF9fR05VQ19fCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdwcmFnbWFzIgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV3BvdGVudGlhbGx5LWV2YWx1YXRlZC1leHByZXNzaW9uIgotLy8gR0NDIGdldHMgY29uZnVz
ZWQgYWJvdXQgbGFtYmRhIHNjb3BlcyBhbmQgaXNzdWVzIHNoYWRvdy1sb2NhbCB3YXJuaW5ncyBm
b3IKLS8vIHBhcmFtZXRlcnMgaW4gdG90YWxseSBkaWZmZXJlbnQgZnVuY3Rpb25zLgotRk9MTFlf
R0NDX0RJU0FCTEVfTkVXX1NIQURPV19XQVJOSU5HUwotI2VuZGlmCi0KLSNkZWZpbmUgRk9MTFlf
RVhDRVBUSU9OX1dSQVBQRVJfSF9JTkNMVURFRAotCi1uYW1lc3BhY2UgZm9sbHkgewotCi0jZGVm
aW5lIEZPTExZX1JFUVVJUkVTX0RFRiguLi4pIFwKLSAgX3Q8c3RkOjplbmFibGVfaWY8c3RhdGlj
X2Nhc3Q8Ym9vbD4oX19WQV9BUkdTX18pLCBsb25nPj4KLQotI2RlZmluZSBGT0xMWV9SRVFVSVJF
UyguLi4pIEZPTExZX1JFUVVJUkVTX0RFRihfX1ZBX0FSR1NfXykgPSBfX0xJTkVfXwotCi1uYW1l
c3BhY2UgZXhjZXB0aW9uX3dyYXBwZXJfZGV0YWlsIHsKLQotdGVtcGxhdGUgPHRlbXBsYXRlIDxj
bGFzcz4gY2xhc3MgVCwgY2xhc3MuLi4gQXM+Ci11c2luZyBBbGxPZiA9IFN0cmljdENvbmp1bmN0
aW9uPFQ8QXM+Li4uPjsKLQotdGVtcGxhdGUgPGJvb2wgSWYsIGNsYXNzIFQ+Ci11c2luZyBBZGRD
b25zdElmID0gX3Q8c3RkOjpjb25kaXRpb25hbDxJZiwgY29uc3QgVCwgVD4+OwotCi10ZW1wbGF0
ZSA8Y2xhc3MgRm4sIGNsYXNzIEE+Ci1GT0xMWV9BTFdBWVNfSU5MSU5FIEZPTExZX0FUVFJfVklT
SUJJTElUWV9ISURERU4KLWF1dG8gZm9sZChGbiYmLCBBJiYgYSkgewotICByZXR1cm4gc3RhdGlj
X2Nhc3Q8QSYmPihhKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIEZuLCBjbGFzcyBBLCBjbGFzcyBC
LCBjbGFzcy4uLiBCcz4KLUZPTExZX0FMV0FZU19JTkxJTkUgRk9MTFlfQVRUUl9WSVNJQklMSVRZ
X0hJRERFTgotYXV0byBmb2xkKEZuJiYgZm4sIEEmJiBhLCBCJiYgYiwgQnMmJi4uLiBicykgewot
ICByZXR1cm4gZm9sZCgKLSAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIHVzZSBvZiBmbiBhZnRl
ciBhIG1vdmUgb2YgZm4sIGJ1dCBpbiByZWFsaXR5LCB0aGlzIGlzCi0gICAgICAvLyBqdXN0IGEg
Y2FzdCBhbmQgbm90IGEgbW92ZS4gVGhhdCdzIGJlY2F1c2UgcmVnYXJkbGVzcyBvZiB3aGljaCBm
b2xkCi0gICAgICAvLyBvdmVybG9hZCBpcyBzZWxlY3RlZCwgZm4gZ2V0cyBib3VuZCB0byBhICYm
LiBIYWQgZm9sZCB0YWtlbiBmbiBieSB2YWx1ZQotICAgICAgLy8gdGhlcmUgd291bGQgaW5kZWVk
IGJlIGEgcHJvYmxlbSBoZXJlLgotICAgICAgc3RhdGljX2Nhc3Q8Rm4mJj4oZm4pLAotICAgICAg
c3RhdGljX2Nhc3Q8Rm4mJj4oZm4pKHN0YXRpY19jYXN0PEEmJj4oYSksIHN0YXRpY19jYXN0PEIm
Jj4oYikpLAotICAgICAgc3RhdGljX2Nhc3Q8QnMmJj4oYnMpLi4uKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgZXhjZXB0aW9uX3dyYXBwZXJfZGV0YWlsCi0KLS8vISBUaHJvd2luZyBleGNlcHRpb25z
IGNhbiBiZSBhIGNvbnZlbmllbnQgd2F5IHRvIGhhbmRsZSBlcnJvcnMuIFN0b3JpbmcKLS8vISBl
eGNlcHRpb25zIGluIGFuIGBleGNlcHRpb25fcHRyYCBtYWtlcyBpdCBlYXN5IHRvIGhhbmRsZSBl
eGNlcHRpb25zIGluIGEKLS8vISBkaWZmZXJlbnQgdGhyZWFkIG9yIGF0IGEgbGF0ZXIgdGltZS4g
YGV4Y2VwdGlvbl9wdHJgIGNhbiBhbHNvIGJlIHVzZWQgaW4gYQotLy8hIHZlcnkgZ2VuZXJpYyBy
ZXN1bHQvZXhjZXB0aW9uIHdyYXBwZXIuCi0vLyEKLS8vISBIb3dldmVyLCB0aGVyZSBhcmUgc29t
ZSBpc3N1ZXMgd2l0aCB0aHJvd2luZyBleGNlcHRpb25zIGFuZAotLy8hIGBzdGQ6OmV4Y2VwdGlv
bl9wdHJgLiBUaGVzZSBpc3N1ZXMgcmV2b2x2ZSBhcm91bmQgYHRocm93YCBiZWluZyBleHBlbnNp
dmUsCi0vLyEgcGFydGljdWxhcmx5IGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudCAoc2Vl
Ci0vLyEgRXhjZXB0aW9uV3JhcHBlckJlbmNobWFyay5jcHApLgotLy8hCi0vLyEgSW1hZ2luZSB3
ZSBoYXZlIGEgbGlicmFyeSB0aGF0IGhhcyBhbiBBUEkgd2hpY2ggcmV0dXJucyBhIHJlc3VsdC9l
eGNlcHRpb24KLS8vISB3cmFwcGVyLiBMZXQncyBjb25zaWRlciBzb21lIGFwcHJvYWNoZXMgZm9y
IGltcGxlbWVudGluZyB0aGlzIHdyYXBwZXIuCi0vLyEgRmlyc3QsIHdlIGNvdWxkIHN0b3JlIGEg
YHN0ZDo6ZXhjZXB0aW9uYC4gVGhpcyBhcHByb2FjaCBsb3NlcyB0aGUgZGVyaXZlZAotLy8hIGV4
Y2VwdGlvbiB0eXBlLCB3aGljaCBjYW4gbWFrZSBleGNlcHRpb24gaGFuZGxpbmcgbW9yZSBkaWZm
aWN1bHQgZm9yIHVzZXJzCi0vLyEgdGhhdCBwcmVmZXIgcmV0aHJvd2luZyB0aGUgZXhjZXB0aW9u
LiBXZSBjb3VsZCB1c2UgYSBgZm9sbHk6OmR5bmFtaWNgIGZvcgotLy8hIGV2ZXJ5IHBvc3NpYmxl
IHR5cGUgb2YgZXhjZXB0aW9uLiBUaGlzIGlzIG5vdCB2ZXJ5IGZsZXhpYmxlIC0gYWRkaW5nIG5l
dwotLy8hIHR5cGVzIG9mIGV4Y2VwdGlvbnMgcmVxdWlyZXMgYSBjaGFuZ2UgdG8gdGhlIHJlc3Vs
dC9leGNlcHRpb24gd3JhcHBlci4gV2UKLS8vISBjb3VsZCB1c2UgYW4gYGV4Y2VwdGlvbl9wdHJg
LiBIb3dldmVyLCBjb25zdHJ1Y3RpbmcgYW4gYGV4Y2VwdGlvbl9wdHJgIGFzCi0vLyEgd2VsbCBh
cyBhY2Nlc3NpbmcgdGhlIGVycm9yIHJlcXVpcmVzIGEgY2FsbCB0byB0aHJvdy4gVGhhdCBtZWFu
cyB0aGF0IHRoZXJlCi0vLyEgd2lsbCBiZSB0d28gY2FsbHMgdG8gdGhyb3cgaW4gb3JkZXIgdG8g
cHJvY2VzcyB0aGUgZXhjZXB0aW9uLiBGb3IKLS8vISBwZXJmb3JtYW5jZSBzZW5zaXRpdmUgYXBw
bGljYXRpb25zLCB0aGlzIG1heSBiZSB1bmFjY2VwdGFibGUuCi0vLyEKLS8vISBgZXhjZXB0aW9u
X3dyYXBwZXJgIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSBleGNlcHRpb24gbWFuYWdlbWVudCBmb3Ig
Ym90aAotLy8hIGNvbnZlbmllbmNlIGFuZCBoaWdoIHBlcmZvcm1hbmNlIHVzZSBjYXNlcy4gYG1h
a2VfZXhjZXB0aW9uX3dyYXBwZXJgIGlzCi0vLyEgdGVtcGxhdGVkIG9uIGRlcml2ZWQgdHlwZSwg
YWxsb3dpbmcgdXMgdG8gcmV0aHJvdyB0aGUgZXhjZXB0aW9uIHByb3Blcmx5IGZvcgotLy8hIHVz
ZXJzIHRoYXQgcHJlZmVyIGNvbnZlbmllbmNlLiBUaGVzZSBleHBsaWNpdGx5IG5hbWVkIGV4Y2Vw
dGlvbiB0eXBlcyBjYW4KLS8vISB0aGVyZWZvcmUgYmUgaGFuZGxlZCB3aXRob3V0IGFueSBwZWZv
cm1hbmNlIHBlbmFsdHkuIGBleGNlcHRpb25fd3JhcHBlcmAgaXMKLS8vISBhbHNvIGZsZXhpYmxl
IGVub3VnaCB0byBhY2NlcHQgYW55IHR5cGUuIElmIGEgY2F1Z2h0IGV4Y2VwdGlvbiBpcyBub3Qg
b2YgYW4KLS8vISBleHBsaWNpdGx5IG5hbWVkIHR5cGUsIHRoZW4gYHN0ZDo6ZXhjZXB0aW9uX3B0
cmAgaXMgdXNlZCB0byBwcmVzZXJ2ZSB0aGUKLS8vISBleGNlcHRpb24gc3RhdGUuIEZvciBwZXJm
b3JtYW5jZSBzZW5zaXRpdmUgYXBwbGljYXRpb25zLCB0aGUgYWNjZXNzb3IKLS8vISBtZXRob2Rz
IGNhbiB0ZXN0IG9yIGV4dHJhY3QgYSBwb2ludGVyIHRvIGEgc3BlY2lmaWMgZXhjZXB0aW9uIHR5
cGUgd2l0aCB2ZXJ5Ci0vLyEgbGl0dGxlIG92ZXJoZWFkLgotLy8hCi0vLyEgXHBhciBFeGFtcGxl
IHVzYWdlOgotLy8hIFxwYXIKLS8vISBcY29kZQotLy8hIGV4Y2VwdGlvbl93cmFwcGVyIGdsb2Jh
bEV4Y2VwdGlvbldyYXBwZXI7Ci0vLyEKLS8vISAvLyBUaHJlYWQxCi0vLyEgdm9pZCBkb1NvbWV0
aGluZ0NyYXp5KCkgewotLy8hICAgaW50IHJjID0gZG9Tb21ldGhpbmdDcmF6eVdpdGhMYW1lUmV0
dXJuQ29kZXMoKTsKLS8vISAgIGlmIChyYyA9PSBOQUlMRURfSVQpIHsKLS8vISAgICAgZ2xvYmFs
RXhjZXB0aW9uV3JhcHBlciA9IGV4Y2VwdGlvbl93cmFwcGVyKCk7Ci0vLyEgICB9IGVsc2UgaWYg
KHJjID09IEZBQ0VfUExBTlQpIHsKLS8vISAgICAgZ2xvYmFsRXhjZXB0aW9uV3JhcHBlciA9IG1h
a2VfZXhjZXB0aW9uX3dyYXBwZXI8RmFjZVBsYW50RXhjZXB0aW9uPigpOwotLy8hICAgfSBlbHNl
IGlmIChyYyA9PSBGQUlMX1dIQUxFKSB7Ci0vLyEgICAgIGdsb2JhbEV4Y2VwdGlvbldyYXBwZXIg
PSBtYWtlX2V4Y2VwdGlvbl93cmFwcGVyPEZhaWxXaGFsZUV4Y2VwdGlvbj4oKTsKLS8vISAgIH0K
LS8vISB9Ci0vLyEKLS8vISAvLyBUaHJlYWQyOiBFeGNlcHRpb25zIGFyZSBvayEKLS8vISB2b2lk
IHByb2Nlc3NSZXN1bHQoKSB7Ci0vLyEgICB0cnkgewotLy8hICAgICBnbG9iYWxFeGNlcHRpb25X
cmFwcGVyLnRocm93X2V4Y2VwdGlvbigpOwotLy8hICAgfSBjYXRjaCAoY29uc3QgRmFjZVBsYW50
RXhjZXB0aW9uJiBlKSB7Ci0vLyEgICAgIExPRyhFUlJPUikgPDwgIkZBQ0VQTEFOVCEiOwotLy8h
ICAgfSBjYXRjaCAoY29uc3QgRmFpbFdoYWxlRXhjZXB0aW9uJiBlKSB7Ci0vLyEgICAgIExPRyhF
UlJPUikgPDwgIkZBSUxXSEFMRSEiOwotLy8hICAgfQotLy8hIH0KLS8vIQotLy8hIC8vIFRocmVh
ZDI6IEV4Y2VwdGlvbnMgYXJlIGJhZCEKLS8vISB2b2lkIHByb2Nlc3NSZXN1bHQoKSB7Ci0vLyEg
ICBnbG9iYWxFeGNlcHRpb25XcmFwcGVyLmhhbmRsZSgKLS8vISAgICAgICBbJl0oRmFjZVBsYW50
RXhjZXB0aW9uJiBmYWNlcGxhbnQpIHsKLS8vISAgICAgICAgIExPRyhFUlJPUikgPDwgIkZBQ0VQ
TEFOVCI7Ci0vLyEgICAgICAgfSwKLS8vISAgICAgICBbJl0oRmFpbFdoYWxlRXhjZXB0aW9uJiBm
YWlsd2hhbGUpIHsKLS8vISAgICAgICAgIExPRyhFUlJPUikgPDwgIkZBSUxXSEFMRSEiOwotLy8h
ICAgICAgIH0sCi0vLyEgICAgICAgW10oLi4uKSB7Ci0vLyEgICAgICAgICBMT0coRkFUQUwpIDw8
ICJVbnJlY29nbml6ZWQgZXhjZXB0aW9uIjsKLS8vISAgICAgICB9KTsKLS8vISB9Ci0vLyEgXGVu
ZGNvZGUKLWNsYXNzIGV4Y2VwdGlvbl93cmFwcGVyIGZpbmFsIHsKLSBwcml2YXRlOgotICBzdHJ1
Y3QgQW55RXhjZXB0aW9uIDogc3RkOjpleGNlcHRpb24gewotICAgIHN0ZDo6dHlwZV9pbmZvIGNv
bnN0KiB0eXBlaW5mb187Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgLyogaW1wbGljaXQg
Ki8gQW55RXhjZXB0aW9uKFQmJiB0KSBub2V4Y2VwdCA6IHR5cGVpbmZvXygmdHlwZWlkKHQpKSB7
fQotICB9OwotCi0gIHRlbXBsYXRlIDxjbGFzcyBGbj4KLSAgc3RydWN0IGFyZ190eXBlXzsKLSAg
dGVtcGxhdGUgPGNsYXNzIEZuPgotICB1c2luZyBhcmdfdHlwZSA9IF90PGFyZ190eXBlXzxGbj4+
OwotCi0gIC8vIGV4Y2VwdGlvbl93cmFwcGVyIGlzIGltcGxlbWVudGVkIGFzIGEgc2ltcGxlIHZh
cmlhbnQgb3ZlciBmb3VyCi0gIC8vIGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnM6Ci0gIC8vICAw
LiBFbXB0eSwgbm8gZXhjZXB0aW9uLgotICAvLyAgMS4gQW4gc21hbGwgb2JqZWN0IHN0b3JlZCBp
bi1zaXR1LgotICAvLyAgMi4gQSBsYXJnZXIgb2JqZWN0IHN0b3JlZCBvbiB0aGUgaGVhcCBhbmQg
cmVmZXJlbmNlZCB3aXRoIGEKLSAgLy8gICAgIHN0ZDo6c2hhcmVkX3B0ci4KLSAgLy8gIDMuIEEg
c3RkOjpleGNlcHRpb25fcHRyLCB0b2dldGhlciB3aXRoIGVpdGhlcjoKLSAgLy8gICAgICAgYS4g
QSBwb2ludGVyIHRvIHRoZSByZWZlcmVuY2VkIHN0ZDo6ZXhjZXB0aW9uIG9iamVjdCwgb3IKLSAg
Ly8gICAgICAgYi4gQSBwb2ludGVyIHRvIGEgc3RkOjp0eXBlX2luZm8gb2JqZWN0IGZvciB0aGUg
cmVmZXJlbmNlZCBleGNlcHRpb24sCi0gIC8vICAgICAgICAgIG9yIGZvciBhbiB1bnNwZWNpZmll
ZCB0eXBlIGlmIHRoZSB0eXBlIGlzIHVua25vd24uCi0gIC8vIFRoaXMgaXMgYWNjb21wbGlzaGVk
IHdpdGggdGhlIGhlbHAgb2YgYSB1bmlvbiBhbmQgYSBwb2ludGVyIHRvIGEgaGFuZC0KLSAgLy8g
cm9sbGVkIHZpcnR1YWwgdGFibGUuIFRoaXMgdmlydHVhbCB0YWJsZSBjb250YWlucyBwb2ludGVy
cyB0byBmdW5jdGlvbnMKLSAgLy8gdGhhdCBrbm93IHdoaWNoIGZpZWxkIG9mIHRoZSB1bmlvbiBp
cyBhY3RpdmUgYW5kIGRvIHRoZSBwcm9wZXIgYWN0aW9uLgotICAvLyBUaGUgY2xhc3MgaW52YXJp
YW50IGVuc3VyZXMgdGhhdCB0aGUgdnRhYmxlIHB0ciBhbmQgdGhlIHVuaW9uIHN0YXkgaW4gc3lu
Yy4KLSAgc3RydWN0IFZUYWJsZSB7Ci0gICAgdm9pZCAoKmNvcHlfKShleGNlcHRpb25fd3JhcHBl
ciBjb25zdCosIGV4Y2VwdGlvbl93cmFwcGVyKik7Ci0gICAgdm9pZCAoKm1vdmVfKShleGNlcHRp
b25fd3JhcHBlciosIGV4Y2VwdGlvbl93cmFwcGVyKik7Ci0gICAgdm9pZCAoKmRlbGV0ZV8pKGV4
Y2VwdGlvbl93cmFwcGVyKik7Ci0gICAgdm9pZCAoKnRocm93XykoZXhjZXB0aW9uX3dyYXBwZXIg
Y29uc3QqKTsKLSAgICBzdGQ6OnR5cGVfaW5mbyBjb25zdCogKCp0eXBlXykoZXhjZXB0aW9uX3dy
YXBwZXIgY29uc3QqKTsKLSAgICBzdGQ6OmV4Y2VwdGlvbiBjb25zdCogKCpnZXRfZXhjZXB0aW9u
XykoZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QqKTsKLSAgICBleGNlcHRpb25fd3JhcHBlciAoKmdl
dF9leGNlcHRpb25fcHRyXykoZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QqKTsKLSAgfTsKLQotICBb
W25vcmV0dXJuXV0gc3RhdGljIHZvaWQgb25Ob0V4Y2VwdGlvbkVycm9yKGNoYXIgY29uc3QqIG5h
bWUpOwotCi0gIHRlbXBsYXRlIDxjbGFzcyBSZXQsIGNsYXNzLi4uIEFyZ3M+Ci0gIHN0YXRpYyBS
ZXQgbm9vcF8oQXJncy4uLik7Ci0KLSAgc3RhdGljIHN0ZDo6dHlwZV9pbmZvIGNvbnN0KiB1bmlu
aXRfdHlwZV8oZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QqKTsKLQotICBzdGF0aWMgVlRhYmxlIGNv
bnN0IHVuaW5pdF87Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIEV4PgotICB1c2luZyBJc1N0ZEV4Y2Vw
dGlvbiA9IHN0ZDo6aXNfYmFzZV9vZjxzdGQ6OmV4Y2VwdGlvbiwgX3Q8c3RkOjpkZWNheTxFeD4+
PjsKLSAgdGVtcGxhdGUgPGJvb2wgQiwgY2xhc3MgVD4KLSAgdXNpbmcgQWRkQ29uc3RJZiA9IGV4
Y2VwdGlvbl93cmFwcGVyX2RldGFpbDo6QWRkQ29uc3RJZjxCLCBUPjsKLSAgdGVtcGxhdGUgPGNs
YXNzIENhdGNoRm4+Ci0gIHVzaW5nIElzQ2F0Y2hBbGwgPQotICAgICAgc3RkOjppc19zYW1lPGFy
Z190eXBlPF90PHN0ZDo6ZGVjYXk8Q2F0Y2hGbj4+PiwgQW55RXhjZXB0aW9uPjsKLQotICBzdHJ1
Y3QgVW5rbm93biB7fTsKLQotICAvLyBTYWRseSwgd2l0aCB0aGUgZ2NjLTQuOSBwbGF0Zm9ybSwg
c3RkOjpsb2dpY19lcnJvciBhbmQgc3RkOjpydW50aW1lX2Vycm9yCi0gIC8vIGRvIG5vdCBmaXQg
aGVyZS4gVGhleSBhbHNvIGRvbid0IGhhdmUgbm9leGNlcHQgY29weS1jdG9ycywgc28gdGhlIGlu
dGVybmFsCi0gIC8vIHN0b3JhZ2Ugd291bGRuJ3QgYmUgdXNlZCBhbnl3YXkuIEZvciB0aGUgZ2Nj
LTUgcGxhdGZvcm0sIGJvdGggbG9naWNfZXJyb3IKLSAgLy8gYW5kIHJ1bnRpbWVfZXJyb3IgY2Fu
IGJlIHNhZmVseSBzdG9yZWQgaW50ZXJuYWxseS4KLSAgc3RydWN0IEJ1ZmZlciB7Ci0gICAgdXNp
bmcgU3RvcmFnZSA9Ci0gICAgICAgIF90PHN0ZDo6YWxpZ25lZF9zdG9yYWdlPDIgKiBzaXplb2Yo
dm9pZCopLCBhbGlnbm9mKHN0ZDo6ZXhjZXB0aW9uKT4+OwotICAgIFN0b3JhZ2UgYnVmZl87Ci0K
LSAgICBCdWZmZXIoKSA6IGJ1ZmZfe30ge30KLQotICAgIHRlbXBsYXRlIDxjbGFzcyBFeCwgdHlw
ZW5hbWUuLi4gQXM+Ci0gICAgQnVmZmVyKGluX3BsYWNlX3R5cGVfdDxFeD4sIEFzJiYuLi4gYXNf
KTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgRXg+Ci0gICAgRXgmIGFzKCkgbm9leGNlcHQ7Ci0gICAg
dGVtcGxhdGUgPGNsYXNzIEV4PgotICAgIEV4IGNvbnN0JiBhcygpIGNvbnN0IG5vZXhjZXB0Owot
ICB9OwotCi0gIGVudW0gY2xhc3MgUGxhY2VtZW50IHsga0luU2l0dSwga09uSGVhcCB9OwotICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgdXNpbmcgUGxhY2VtZW50T2YgPSBzdGQ6OmludGVncmFsX2Nv
bnN0YW50PAotICAgICAgUGxhY2VtZW50LAotICAgICAgc2l6ZW9mKFQpIDw9IHNpemVvZihCdWZm
ZXI6OlN0b3JhZ2UpICYmCi0gICAgICAgICAgICAgIGFsaWdub2YoVCkgPD0gYWxpZ25vZihCdWZm
ZXI6OlN0b3JhZ2UpICYmCi0gICAgICAgICAgICAgIG5vZXhjZXB0KFQoc3RkOjpkZWNsdmFsPFQm
Jj4oKSkpCi0gICAgICAgICAgPyBQbGFjZW1lbnQ6OmtJblNpdHUKLSAgICAgICAgICA6IFBsYWNl
bWVudDo6a09uSGVhcD47Ci0KLSAgdXNpbmcgSW5TaXR1VGFnID0gc3RkOjppbnRlZ3JhbF9jb25z
dGFudDxQbGFjZW1lbnQsIFBsYWNlbWVudDo6a0luU2l0dT47Ci0gIHVzaW5nIE9uSGVhcFRhZyA9
IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8UGxhY2VtZW50LCBQbGFjZW1lbnQ6OmtPbkhlYXA+Owot
Ci0gIHN0YXRpYyBzdGQ6OmV4Y2VwdGlvbiBjb25zdCogYXNfZXhjZXB0aW9uX29yX251bGxfKHN0
ZDo6ZXhjZXB0aW9uIGNvbnN0JiBleCk7Ci0gIHN0YXRpYyBzdGQ6OmV4Y2VwdGlvbiBjb25zdCog
YXNfZXhjZXB0aW9uX29yX251bGxfKEFueUV4Y2VwdGlvbik7Ci0KLSAgc3RydWN0IEV4Y2VwdGlv
blB0ciB7Ci0gICAgc3RkOjpleGNlcHRpb25fcHRyIHB0cl87Ci0gICAgc3RkOjp1aW50cHRyX3Qg
ZXhjZXB0aW9uX29yX3R5cGVfOyAvLyBvZGQgZm9yIHR5cGVfaW5mbwotICAgIHN0YXRpY19hc3Nl
cnQoCi0gICAgICAgIDEgPCBhbGlnbm9mKHN0ZDo6ZXhjZXB0aW9uKSAmJiAxIDwgYWxpZ25vZihz
dGQ6OnR5cGVfaW5mbyksCi0gICAgICAgICJTdXJwcmlzZSEgc3RkOjpleGNlcHRpb24gYW5kIHN0
ZDo6dHlwZV9pbmZvIGRvbid0IGhhdmUgYWxpZ25tZW50ICIKLSAgICAgICAgImdyZWF0ZXIgdGhh
biBvbmUuIGFzX2ludF8gYmVsb3cgd2lsbCBub3Qgd29yayEiKTsKLQotICAgIHN0YXRpYyBzdGQ6
OnVpbnRwdHJfdCBhc19pbnRfKAotICAgICAgICBzdGQ6OmV4Y2VwdGlvbl9wdHIgY29uc3QmIHB0
ciwKLSAgICAgICAgc3RkOjpleGNlcHRpb24gY29uc3QmIGUpOwotICAgIHN0YXRpYyBzdGQ6OnVp
bnRwdHJfdCBhc19pbnRfKAotICAgICAgICBzdGQ6OmV4Y2VwdGlvbl9wdHIgY29uc3QmIHB0ciwK
LSAgICAgICAgQW55RXhjZXB0aW9uIGUpOwotICAgIGJvb2wgaGFzX2V4Y2VwdGlvbl8oKSBjb25z
dDsKLSAgICBzdGQ6OmV4Y2VwdGlvbiBjb25zdCogYXNfZXhjZXB0aW9uXygpIGNvbnN0OwotICAg
IHN0ZDo6dHlwZV9pbmZvIGNvbnN0KiBhc190eXBlXygpIGNvbnN0OwotICAgIHN0YXRpYyB2b2lk
IGNvcHlfKGV4Y2VwdGlvbl93cmFwcGVyIGNvbnN0KiBmcm9tLCBleGNlcHRpb25fd3JhcHBlciog
dG8pOwotICAgIHN0YXRpYyB2b2lkIG1vdmVfKGV4Y2VwdGlvbl93cmFwcGVyKiBmcm9tLCBleGNl
cHRpb25fd3JhcHBlciogdG8pOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZV8oZXhjZXB0aW9uX3dy
YXBwZXIqIHRoYXQpOwotICAgIFtbbm9yZXR1cm5dXSBzdGF0aWMgdm9pZCB0aHJvd18oZXhjZXB0
aW9uX3dyYXBwZXIgY29uc3QqIHRoYXQpOwotICAgIHN0YXRpYyBzdGQ6OnR5cGVfaW5mbyBjb25z
dCogdHlwZV8oZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QqIHRoYXQpOwotICAgIHN0YXRpYyBzdGQ6
OmV4Y2VwdGlvbiBjb25zdCogZ2V0X2V4Y2VwdGlvbl8oZXhjZXB0aW9uX3dyYXBwZXIgY29uc3Qq
IHRoYXQpOwotICAgIHN0YXRpYyBleGNlcHRpb25fd3JhcHBlciBnZXRfZXhjZXB0aW9uX3B0cl8o
ZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QqIHRoYXQpOwotICAgIHN0YXRpYyBWVGFibGUgY29uc3Qg
b3BzXzsKLSAgfTsKLQotICB0ZW1wbGF0ZSA8Y2xhc3MgRXg+Ci0gIHN0cnVjdCBJblBsYWNlIHsK
LSAgICBzdGF0aWMgdm9pZCBjb3B5XyhleGNlcHRpb25fd3JhcHBlciBjb25zdCogZnJvbSwgZXhj
ZXB0aW9uX3dyYXBwZXIqIHRvKTsKLSAgICBzdGF0aWMgdm9pZCBtb3ZlXyhleGNlcHRpb25fd3Jh
cHBlciogZnJvbSwgZXhjZXB0aW9uX3dyYXBwZXIqIHRvKTsKLSAgICBzdGF0aWMgdm9pZCBkZWxl
dGVfKGV4Y2VwdGlvbl93cmFwcGVyKiB0aGF0KTsKLSAgICBbW25vcmV0dXJuXV0gc3RhdGljIHZv
aWQgdGhyb3dfKGV4Y2VwdGlvbl93cmFwcGVyIGNvbnN0KiB0aGF0KTsKLSAgICBzdGF0aWMgc3Rk
Ojp0eXBlX2luZm8gY29uc3QqIHR5cGVfKGV4Y2VwdGlvbl93cmFwcGVyIGNvbnN0Kik7Ci0gICAg
c3RhdGljIHN0ZDo6ZXhjZXB0aW9uIGNvbnN0KiBnZXRfZXhjZXB0aW9uXyhleGNlcHRpb25fd3Jh
cHBlciBjb25zdCogdGhhdCk7Ci0gICAgc3RhdGljIGV4Y2VwdGlvbl93cmFwcGVyIGdldF9leGNl
cHRpb25fcHRyXyhleGNlcHRpb25fd3JhcHBlciBjb25zdCogdGhhdCk7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBWVGFibGUgY29uc3Qgb3BzX3tjb3B5XywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vdmVfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93XywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2V4Y2VwdGlvbl8sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfZXhjZXB0aW9uX3B0cl99Owot
ICB9OwotCi0gIHN0cnVjdCBTaGFyZWRQdHIgewotICAgIHN0cnVjdCBCYXNlIHsKLSAgICAgIHN0
ZDo6dHlwZV9pbmZvIGNvbnN0KiBpbmZvXzsKLSAgICAgIEJhc2UoKSA9IGRlZmF1bHQ7Ci0gICAg
ICBleHBsaWNpdCBCYXNlKHN0ZDo6dHlwZV9pbmZvIGNvbnN0JiBpbmZvKSA6IGluZm9fKCZpbmZv
KSB7fQotICAgICAgdmlydHVhbCB+QmFzZSgpIHt9Ci0gICAgICB2aXJ0dWFsIHZvaWQgdGhyb3df
KCkgY29uc3QgPSAwOwotICAgICAgdmlydHVhbCBzdGQ6OmV4Y2VwdGlvbiBjb25zdCogZ2V0X2V4
Y2VwdGlvbl8oKSBjb25zdCBub2V4Y2VwdCA9IDA7Ci0gICAgICB2aXJ0dWFsIGV4Y2VwdGlvbl93
cmFwcGVyIGdldF9leGNlcHRpb25fcHRyXygpIGNvbnN0IG5vZXhjZXB0ID0gMDsKLSAgICB9Owot
ICAgIHRlbXBsYXRlIDxjbGFzcyBFeD4KLSAgICBzdHJ1Y3QgSW1wbCBmaW5hbCA6IHB1YmxpYyBC
YXNlIHsKLSAgICAgIEV4IGV4XzsKLSAgICAgIEltcGwoKSA9IGRlZmF1bHQ7Ci0gICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUuLi4gQXM+Ci0gICAgICBleHBsaWNpdCBJbXBsKEFzJiYuLi4gYXMpCi0g
ICAgICAgICAgOiBCYXNle3R5cGVpZChFeCl9LCBleF8oc3RkOjpmb3J3YXJkPEFzPihhcykuLi4p
IHt9Ci0gICAgICBbW25vcmV0dXJuXV0gdm9pZCB0aHJvd18oKSBjb25zdCBvdmVycmlkZTsKLSAg
ICAgIHN0ZDo6ZXhjZXB0aW9uIGNvbnN0KiBnZXRfZXhjZXB0aW9uXygpIGNvbnN0IG5vZXhjZXB0
IG92ZXJyaWRlOwotICAgICAgZXhjZXB0aW9uX3dyYXBwZXIgZ2V0X2V4Y2VwdGlvbl9wdHJfKCkg
Y29uc3Qgbm9leGNlcHQgb3ZlcnJpZGU7Ci0gICAgfTsKLSAgICBzdGQ6OnNoYXJlZF9wdHI8QmFz
ZT4gcHRyXzsKLQotICAgIHN0YXRpYyB2b2lkIGNvcHlfKGV4Y2VwdGlvbl93cmFwcGVyIGNvbnN0
KiBmcm9tLCBleGNlcHRpb25fd3JhcHBlciogdG8pOwotICAgIHN0YXRpYyB2b2lkIG1vdmVfKGV4
Y2VwdGlvbl93cmFwcGVyKiBmcm9tLCBleGNlcHRpb25fd3JhcHBlciogdG8pOwotICAgIHN0YXRp
YyB2b2lkIGRlbGV0ZV8oZXhjZXB0aW9uX3dyYXBwZXIqIHRoYXQpOwotICAgIFtbbm9yZXR1cm5d
XSBzdGF0aWMgdm9pZCB0aHJvd18oZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QqIHRoYXQpOwotICAg
IHN0YXRpYyBzdGQ6OnR5cGVfaW5mbyBjb25zdCogdHlwZV8oZXhjZXB0aW9uX3dyYXBwZXIgY29u
c3QqIHRoYXQpOwotICAgIHN0YXRpYyBzdGQ6OmV4Y2VwdGlvbiBjb25zdCogZ2V0X2V4Y2VwdGlv
bl8oZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QqIHRoYXQpOwotICAgIHN0YXRpYyBleGNlcHRpb25f
d3JhcHBlciBnZXRfZXhjZXB0aW9uX3B0cl8oZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QqIHRoYXQp
OwotICAgIHN0YXRpYyBWVGFibGUgY29uc3Qgb3BzXzsKLSAgfTsKLQotICB1bmlvbiB7Ci0gICAg
QnVmZmVyIGJ1ZmZfe307Ci0gICAgRXhjZXB0aW9uUHRyIGVwdHJfOwotICAgIFNoYXJlZFB0ciBz
cHRyXzsKLSAgfTsKLSAgVlRhYmxlIGNvbnN0KiB2cHRyX3smdW5pbml0X307Ci0KLSAgdGVtcGxh
dGUgPGNsYXNzIEV4LCB0eXBlbmFtZS4uLiBBcz4KLSAgZXhjZXB0aW9uX3dyYXBwZXIoT25IZWFw
VGFnLCBpbl9wbGFjZV90eXBlX3Q8RXg+LCBBcyYmLi4uIGFzKTsKLQotICB0ZW1wbGF0ZSA8Y2xh
c3MgRXgsIHR5cGVuYW1lLi4uIEFzPgotICBleGNlcHRpb25fd3JhcHBlcihJblNpdHVUYWcsIGlu
X3BsYWNlX3R5cGVfdDxFeD4sIEFzJiYuLi4gYXMpOwotCi0gIHRlbXBsYXRlIDxjbGFzcyBUPgot
ICBzdHJ1Y3QgSXNSZWd1bGFyRXhjZXB0aW9uVHlwZQotICAgICAgOiBTdHJpY3RDb25qdW5jdGlv
bjwKLSAgICAgICAgICAgIHN0ZDo6aXNfY29weV9jb25zdHJ1Y3RpYmxlPFQ+LAotICAgICAgICAg
ICAgTmVnYXRpb248c3RkOjppc19iYXNlX29mPGV4Y2VwdGlvbl93cmFwcGVyLCBUPj4sCi0gICAg
ICAgICAgICBOZWdhdGlvbjxzdGQ6OmlzX2Fic3RyYWN0PFQ+Pj4ge307Ci0KLSAgdGVtcGxhdGUg
PGNsYXNzIENhdGNoRm4sIGJvb2wgSXNDb25zdCA9IGZhbHNlPgotICBzdHJ1Y3QgRXhjZXB0aW9u
VHlwZU9mOwotCi0gIHRlbXBsYXRlIDxib29sIElzQ29uc3Q+Ci0gIHN0cnVjdCBIYW5kbGVSZWR1
Y2U7Ci0KLSAgdGVtcGxhdGUgPGJvb2wgSXNDb25zdD4KLSAgc3RydWN0IEhhbmRsZVN0ZEV4Y2Vw
dFJlZHVjZTsKLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVGhpcywgY2xhc3MuLi4gQ2F0Y2hGbnM+Ci0g
IHN0YXRpYyB2b2lkIGhhbmRsZV8oc3RkOjpmYWxzZV90eXBlLCBUaGlzJiB0aGlzXywgQ2F0Y2hG
bnMmLi4uIGZucyk7Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFRoaXMsIGNsYXNzLi4uIENhdGNoRm5z
PgotICBzdGF0aWMgdm9pZCBoYW5kbGVfKHN0ZDo6dHJ1ZV90eXBlLCBUaGlzJiB0aGlzXywgQ2F0
Y2hGbnMmLi4uIGZucyk7Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIEV4LCBjbGFzcyBUaGlzLCBjbGFz
cyBGbj4KLSAgc3RhdGljIGJvb2wgd2l0aF9leGNlcHRpb25fKFRoaXMmIHRoaXNfLCBGbiBmbl8p
OwotCi0gcHVibGljOgotICAvLyEgRGVmYXVsdC1jb25zdHJ1Y3RzIGFuIGVtcHR5IGBleGNlcHRp
b25fd3JhcHBlcmAKLSAgLy8hIFxwb3N0IGB0eXBlKCkgPT0gbm9uZSgpYAotICBleGNlcHRpb25f
d3JhcHBlcigpIG5vZXhjZXB0IHt9Ci0KLSAgLy8hIE1vdmUtY29uc3RydWN0cyBhbiBgZXhjZXB0
aW9uX3dyYXBwZXJgCi0gIC8vISBccG9zdCBgKnRoaXNgIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiBg
dGhhdGAgcHJpb3IgdG8gdGhlIG1vdmUKLSAgLy8hIFxwb3N0IGB0aGF0LnR5cGUoKSA9PSBub25l
KClgCi0gIGV4Y2VwdGlvbl93cmFwcGVyKGV4Y2VwdGlvbl93cmFwcGVyJiYgdGhhdCkgbm9leGNl
cHQ7Ci0KLSAgLy8hIENvcHktY29uc3RydWN0cyBhbiBgZXhjZXB0aW9uX3dyYXBwZXJgCi0gIC8v
ISBccG9zdCBgKnRoaXNgIGNvbnRhaW5zIGEgY29weSBvZiBgdGhhdGAsIGFuZCBgdGhhdGAgaXMg
dW5tb2RpZmllZAotICAvLyEgXHBvc3QgYHR5cGUoKSA9PSB0aGF0LnR5cGUoKWAKLSAgZXhjZXB0
aW9uX3dyYXBwZXIoZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QmIHRoYXQpOwotCi0gIC8vISBNb3Zl
LWFzc2lnbnMgYW4gYGV4Y2VwdGlvbl93cmFwcGVyYAotICAvLyEgXHByZSBgdGhpcyAhPSAmdGhh
dGAKLSAgLy8hIFxwb3N0IGAqdGhpc2AgY29udGFpbnMgdGhlIHZhbHVlIG9mIGB0aGF0YCBwcmlv
ciB0byB0aGUgbW92ZQotICAvLyEgXHBvc3QgYHRoYXQudHlwZSgpID09IG5vbmUoKWAKLSAgZXhj
ZXB0aW9uX3dyYXBwZXImIG9wZXJhdG9yPShleGNlcHRpb25fd3JhcHBlciYmIHRoYXQpIG5vZXhj
ZXB0OwotCi0gIC8vISBDb3B5LWFzc2lnbnMgYW4gYGV4Y2VwdGlvbl93cmFwcGVyYAotICAvLyEg
XHBvc3QgYCp0aGlzYCBjb250YWlucyBhIGNvcHkgb2YgYHRoYXRgLCBhbmQgYHRoYXRgIGlzIHVu
bW9kaWZpZWQKLSAgLy8hIFxwb3N0IGB0eXBlKCkgPT0gdGhhdC50eXBlKClgCi0gIGV4Y2VwdGlv
bl93cmFwcGVyJiBvcGVyYXRvcj0oZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QmIHRoYXQpOwotCi0g
IH5leGNlcHRpb25fd3JhcHBlcigpOwotCi0gIC8vISBccHJlIGBwdHJgIGlzIGVtcHR5LCBvciBp
dCBob2xkcyBhIHJlZmVyZW5jZSB0byBhbiBleGNlcHRpb24gdGhhdCBpcyBub3QKLSAgLy8hICAg
ICBkZXJpdmVkIGZyb20gYHN0ZDo6ZXhjZXB0aW9uYC4KLSAgLy8hIFxwb3N0IGAhcHRyIHx8IGJv
b2woKnRoaXMpYAotICAvLyEgXHBvc3QgYGhhc1Rocm93bkV4Y2VwdGlvbigpID09IHRydWVgCi0g
IC8vISBccG9zdCBgdHlwZSgpID09IHVua25vd24oKWAKLSAgZXhwbGljaXQgZXhjZXB0aW9uX3dy
YXBwZXIoc3RkOjpleGNlcHRpb25fcHRyIHB0cikgbm9leGNlcHQ7Ci0KLSAgLy8hIFxwcmUgYHB0
cmAgaG9sZHMgYSByZWZlcmVuY2UgdG8gYGV4YC4KLSAgLy8hIFxwb3N0IGBoYXNUaHJvd25FeGNl
cHRpb24oKSA9PSB0cnVlYAotICAvLyEgXHBvc3QgYGJvb2woKnRoaXMpYAotICAvLyEgXHBvc3Qg
YHR5cGUoKSA9PSB0eXBlaWQoZXgpYAotICB0ZW1wbGF0ZSA8Y2xhc3MgRXg+Ci0gIGV4Y2VwdGlv
bl93cmFwcGVyKHN0ZDo6ZXhjZXB0aW9uX3B0ciBwdHIsIEV4JiBleCk7Ci0KLSAgLy8hIFxwcmUg
YHR5cGVpZChleCkgPT0gdHlwZWlkKHR5cGVuYW1lIGRlY2F5PEV4Pjo6dHlwZSlgCi0gIC8vISBc
cG9zdCBgYm9vbCgqdGhpcylgCi0gIC8vISBccG9zdCBgaGFzVGhyb3duRXhjZXB0aW9uKCkgPT0g
ZmFsc2VgCi0gIC8vISBccG9zdCBgdHlwZSgpID09IHR5cGVpZChleClgCi0gIC8vISBcbm90ZSBF
eGNlcHRpb25zIG9mIHR5cGVzIGRlcml2ZWQgZnJvbSBgc3RkOjpleGNlcHRpb25gIGNhbiBiZSBp
bXBsaWNpdGx5Ci0gIC8vISAgICAgY29udmVydGVkIHRvIGFuIGBleGNlcHRpb25fd3JhcHBlcmAu
Ci0gIHRlbXBsYXRlIDwKLSAgICAgIGNsYXNzIEV4LAotICAgICAgY2xhc3MgRXhfID0gX3Q8c3Rk
OjpkZWNheTxFeD4+LAotICAgICAgRk9MTFlfUkVRVUlSRVMoCi0gICAgICAgICAgQ29uanVuY3Rp
b248SXNTdGRFeGNlcHRpb248RXhfPiwgSXNSZWd1bGFyRXhjZXB0aW9uVHlwZTxFeF8+Pjo6dmFs
dWUpPgotICAvKiBpbXBsaWNpdCAqLyBleGNlcHRpb25fd3JhcHBlcihFeCYmIGV4KTsKLQotICAv
LyEgXHByZSBgdHlwZWlkKGV4KSA9PSB0eXBlaWQodHlwZW5hbWUgZGVjYXk8RXg+Ojp0eXBlKWAK
LSAgLy8hIFxwb3N0IGBib29sKCp0aGlzKWAKLSAgLy8hIFxwb3N0IGBoYXNUaHJvd25FeGNlcHRp
b24oKSA9PSBmYWxzZWAKLSAgLy8hIFxwb3N0IGB0eXBlKCkgPT0gdHlwZWlkKGV4KWAKLSAgLy8h
IFxub3RlIEV4Y2VwdGlvbnMgb2YgdHlwZXMgbm90IGRlcml2ZWQgZnJvbSBgc3RkOjpleGNlcHRp
b25gIGNhbiBzdGlsbCBiZQotICAvLyEgICAgIHVzZWQgdG8gY29uc3RydWN0IGFuIGBleGNlcHRp
b25fd3JhcHBlcmAsIGJ1dCB5b3UgbXVzdCBzcGVjaWZ5Ci0gIC8vISAgICAgYGZvbGx5Ojppbl9w
bGFjZWAgYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4KLSAgdGVtcGxhdGUgPAotICAgICAgY2xhc3Mg
RXgsCi0gICAgICBjbGFzcyBFeF8gPSBfdDxzdGQ6OmRlY2F5PEV4Pj4sCi0gICAgICBGT0xMWV9S
RVFVSVJFUyhJc1JlZ3VsYXJFeGNlcHRpb25UeXBlPEV4Xz46OnZhbHVlKT4KLSAgZXhjZXB0aW9u
X3dyYXBwZXIoaW5fcGxhY2VfdCwgRXgmJiBleCk7Ci0KLSAgdGVtcGxhdGUgPAotICAgICAgY2xh
c3MgRXgsCi0gICAgICB0eXBlbmFtZS4uLiBBcywKLSAgICAgIEZPTExZX1JFUVVJUkVTKElzUmVn
dWxhckV4Y2VwdGlvblR5cGU8RXg+Ojp2YWx1ZSk+Ci0gIGV4Y2VwdGlvbl93cmFwcGVyKGluX3Bs
YWNlX3R5cGVfdDxFeD4sIEFzJiYuLi4gYXMpOwotCi0gIC8vISBTd2FwcyB0aGUgdmFsdWUgb2Yg
YCp0aGlzYCB3aXRoIHRoZSB2YWx1ZSBvZiBgdGhhdGAKLSAgdm9pZCBzd2FwKGV4Y2VwdGlvbl93
cmFwcGVyJiB0aGF0KSBub2V4Y2VwdDsKLQotICAvLyEgXHJldHVybiBgdHJ1ZWAgaWYgYCp0aGlz
YCBpcyBob2xkaW5nIGFuIGV4Y2VwdGlvbi4KLSAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IG5vZXhjZXB0OwotCi0gIC8vISBccmV0dXJuIGAhYm9vbCgqdGhpcylgCi0gIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3Qgbm9leGNlcHQ7Ci0KLSAgLy8hIE1ha2UgdGhpcyBgZXhjZXB0aW9uX3dy
YXBwZXJgIGVtcHR5Ci0gIC8vISBccG9zdCBgISp0aGlzYAotICB2b2lkIHJlc2V0KCk7Ci0KLSAg
Ly8hIFxyZXR1cm4gYHRydWVgIGlmIHRoaXMgYGV4Y2VwdGlvbl93cmFwcGVyYCBob2xkcyBhIHJl
ZmVyZW5jZSB0byBhbgotICAvLyEgICAgIGV4Y2VwdGlvbiB0aGF0IHdhcyB0aHJvd24gKGkuZS4s
IGlmIGl0IHdhcyBjb25zdHJ1Y3RlZCB3aXRoCi0gIC8vISAgICAgYSBgc3RkOjpleGNlcHRpb25f
cHRyYCwgb3IgaWYgYHRvX2V4Y2VwdGlvbl9wdHIoKWAgd2FzIGNhbGxlZCBvbiBhCi0gIC8vISAg
ICAgKG5vbi1jb25zdCkgcmVmZXJlbmNlIHRvIGAqdGhpc2ApLgotICBib29sIGhhc19leGNlcHRp
b25fcHRyKCkgY29uc3Qgbm9leGNlcHQ7Ci0KLSAgLy8hIFxyZXR1cm4gYSBwb2ludGVyIHRvIHRo
ZSBgc3RkOjpleGNlcHRpb25gIGhlbGQgYnkgYCp0aGlzYCwgaWYgaXQgaG9sZHMKLSAgLy8hICAg
ICBvbmU7IG90aGVyd2lzZSwgcmV0dXJucyBgbnVsbHB0cmAuCi0gIC8vISBcbm90ZSBUaGlzIGZ1
bmN0aW9uIGRvZXMgbm90IG11dGF0ZSB0aGUgYGV4Y2VwdGlvbl93cmFwcGVyYCBvYmplY3QuCi0g
IC8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIG5ldmVyIGNhdXNlcyBhbiBleGNlcHRpb24gdG8gYmUg
dGhyb3duLgotICBzdGQ6OmV4Y2VwdGlvbiogZ2V0X2V4Y2VwdGlvbigpIG5vZXhjZXB0OwotICAv
LyEgXG92ZXJsb2FkCi0gIHN0ZDo6ZXhjZXB0aW9uIGNvbnN0KiBnZXRfZXhjZXB0aW9uKCkgY29u
c3Qgbm9leGNlcHQ7Ci0KLSAgLy8hIFxyZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYEV4YCBoZWxk
IGJ5IGAqdGhpc2AsIGlmIGl0IGhvbGRzIGFuIG9iamVjdAotICAvLyEgICAgIHdob3NlIHR5cGUg
YEZyb21gIHBlcm1pdHMgYHN0ZDo6aXNfY29udmVydGlibGU8RnJvbSosIEV4Kj5gOwotICAvLyEg
ICAgIG90aGVyd2lzZSwgcmV0dXJucyBgbnVsbHB0cmAuCi0gIC8vISBcbm90ZSBUaGlzIGZ1bmN0
aW9uIGRvZXMgbm90IG11dGF0ZSB0aGUgYGV4Y2VwdGlvbl93cmFwcGVyYCBvYmplY3QuCi0gIC8v
ISBcbm90ZSBUaGlzIGZ1bmN0aW9uIG1heSBjYXVzZSBhbiBleGNlcHRpb24gdG8gYmUgdGhyb3du
IGFuZCBpbW1lZGlhdGVseQotICAvLyEgICAgIGNhdWdodCBpbnRlcm5hbGx5LCBhZmZlY3Rpbmcg
cnVudGltZSBwZXJmb3JtYW5jZS4KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEV4PgotICBFeCogZ2V0
X2V4Y2VwdGlvbigpIG5vZXhjZXB0OwotICAvLyEgXG92ZXJsb2FkCi0gIHRlbXBsYXRlIDx0eXBl
bmFtZSBFeD4KLSAgRXggY29uc3QqIGdldF9leGNlcHRpb24oKSBjb25zdCBub2V4Y2VwdDsKLQot
ICAvLyEgXHJldHVybiBBIGBzdGQ6OmV4Y2VwdGlvbl9wdHJgIHRoYXQgcmVmZXJlbmNlcyBlaXRo
ZXIgdGhlIGV4Y2VwdGlvbiBoZWxkCi0gIC8vISAgICAgYnkgYCp0aGlzYCwgb3IgYSBjb3B5IG9m
IHNhbWUuCi0gIC8vISBcbm90ZSBUaGlzIGZ1bmN0aW9uIG1heSBuZWVkIHRvIHRocm93IGFuIGV4
Y2VwdGlvbiB0byBjb21wbGV0ZSB0aGUgYWN0aW9uLgotICAvLyEgXG5vdGUgVGhlIG5vbi1jb25z
dCBvdmVybG9hZCBvZiB0aGlzIGZ1bmN0aW9uIG11dGF0ZXMgYCp0aGlzYCB0byBjYWNoZSB0aGUK
LSAgLy8hICAgICBjb21wdXRlZCBgc3RkOjpleGNlcHRpb25fcHRyYDsgdGhhdCBpcywgdGhpcyBm
dW5jdGlvbiBtYXkgY2F1c2UKLSAgLy8hICAgICBgaGFzX2V4Y2VwdGlvbl9wdHIoKWAgdG8gY2hh
bmdlIGZyb20gYGZhbHNlYCB0byBgdHJ1ZWAuCi0gIHN0ZDo6ZXhjZXB0aW9uX3B0ciBjb25zdCYg
dG9fZXhjZXB0aW9uX3B0cigpIG5vZXhjZXB0OwotICAvLyEgXG92ZXJsb2FkCi0gIHN0ZDo6ZXhj
ZXB0aW9uX3B0ciB0b19leGNlcHRpb25fcHRyKCkgY29uc3Qgbm9leGNlcHQ7Ci0KLSAgLy8hIFxy
ZXR1cm4gdGhlIGB0eXBlaWRgIG9mIGFuIHVuc3BlY2lmaWVkIHR5cGUgdXNlZCBieQotICAvLyEg
ICAgIGBleGNlcHRpb25fd3JhcHBlcjo6dHlwZSgpYCB0byBkZW5vdGUgYW4gZW1wdHkgYGV4Y2Vw
dGlvbl93cmFwcGVyYC4KLSAgc3RhdGljIHN0ZDo6dHlwZV9pbmZvIGNvbnN0JiBub25lKCkgbm9l
eGNlcHQ7Ci0gIC8vISBccmV0dXJuIHRoZSBgdHlwZWlkYCBvZiBhbiB1bnNwZWNpZmllZCB0eXBl
IHVzZWQgYnkKLSAgLy8hICAgICBgZXhjZXB0aW9uX3dyYXBwZXI6OnR5cGUoKWAgdG8gZGVub3Rl
IGFuIGBleGNlcHRpb25fd3JhcHBlcmAgdGhhdAotICAvLyEgICAgIGhvbGRzIGFuIGV4Y2VwdGlv
biBvZiB1bmtub3duIHR5cGUuCi0gIHN0YXRpYyBzdGQ6OnR5cGVfaW5mbyBjb25zdCYgdW5rbm93
bigpIG5vZXhjZXB0OwotCi0gIC8vISBSZXR1cm5zIHRoZSBgdHlwZWlkYCBvZiB0aGUgd3JhcHBl
ZCBleGNlcHRpb24gb2JqZWN0LiBJZiB0aGVyZSBpcyBubwotICAvLyEgICAgIHdyYXBwZWQgZXhj
ZXB0aW9uIG9iamVjdCwgcmV0dXJucyBgZXhjZXB0aW9uX3dyYXBwZXI6Om5vbmUoKWAuIElmCi0g
IC8vISAgICAgdGhpcyBpbnN0YW5jZSB3cmFwcyBhbiBleGNlcHRpb24gb2YgdW5rbm93biB0eXBl
IG5vdCBkZXJpdmVkIGZyb20KLSAgLy8hICAgICBgc3RkOjpleGNlcHRpb25gLCByZXR1cm5zIGBl
eGNlcHRpb25fd3JhcHBlcjo6dW5rbm93bigpYC4KLSAgc3RkOjp0eXBlX2luZm8gY29uc3QmIHR5
cGUoKSBjb25zdCBub2V4Y2VwdDsKLQotICAvLyEgXHJldHVybiBJZiBgZ2V0X2V4Y2VwdGlvbigp
ICE9IG51bGxwdHJgLCBgY2xhc3NfbmFtZSgpICsgIjogIiArCi0gIC8vISAgICAgZ2V0X2V4Y2Vw
dGlvbigpLT53aGF0KClgOyBvdGhlcndpc2UsIGBjbGFzc19uYW1lKClgLgotICBmb2xseTo6ZmJz
dHJpbmcgd2hhdCgpIGNvbnN0OwotCi0gIC8vISBccmV0dXJuIElmIGAhKnRoaXNgLCB0aGUgZW1w
dHkgc3RyaW5nOyBvdGhlcndpc2UsIGlmCi0gIC8vISAgICAgYHR5cGUoKSA9PSB1bmtub3duKClg
LCB0aGUgc3RyaW5nIGAiPHVua25vd24gZXhjZXB0aW9uPiJgOyBvdGhlcndpc2UsCi0gIC8vISAg
ICAgdGhlIHJlc3VsdCBvZiBgdHlwZSgpLm5hbWUoKWAgYWZ0ZXIgZGVtYW5nbGluZy4KLSAgZm9s
bHk6OmZic3RyaW5nIGNsYXNzX25hbWUoKSBjb25zdDsKLQotICAvLyEgXHRwYXJhbSBFeCBUaGUg
ZXhwcmVzc2lvbiB0eXBlIHRvIGNoZWNrIGZvciBjb21wYXRpYmlsaXR5IHdpdGguCi0gIC8vISBc
cmV0dXJuIGB0cnVlYCBpZiBhbmQgb25seSBpZiBgKnRoaXNgIHdyYXBzIGFuIGV4Y2VwdGlvbiB0
aGF0IHdvdWxkIGJlCi0gIC8vISAgICAgY2F1Z2h0IHdpdGggYSBgY2F0Y2goRXggY29uc3QmKWAg
Y2xhdXNlLgotICAvLyEgXG5vdGUgSWYgYCp0aGlzYCBpcyBlbXB0eSwgdGhpcyBmdW5jdGlvbiBy
ZXR1cm5zIGBmYWxzZWAuCi0gIHRlbXBsYXRlIDxjbGFzcyBFeD4KLSAgYm9vbCBpc19jb21wYXRp
YmxlX3dpdGgoKSBjb25zdCBub2V4Y2VwdDsKLQotICAvLyEgXHByZSBgYm9vbCgqdGhpcylgCi0g
IC8vISBUaHJvd3MgdGhlIHdyYXBwZWQgZXhwcmVzc2lvbi4KLSAgW1tub3JldHVybl1dIHZvaWQg
dGhyb3dfZXhjZXB0aW9uKCkgY29uc3Q7Ci0KLSAgLy8hIENhbGwgYGZuYCB3aXRoIHRoZSB3cmFw
cGVkIGV4Y2VwdGlvbiAoaWYgYW55KSwgaWYgYGZuYCBjYW4gYWNjZXB0IGl0LgotICAvLyEgXHBh
ciBFeGFtcGxlCi0gIC8vISBcY29kZQotICAvLyEgZXhjZXB0aW9uX3dyYXBwZXIgZXd7c3RkOjpy
dW50aW1lX2Vycm9yKCJnb29kYnllIGNydWVsIHdvcmxkIil9OwotICAvLyEKLSAgLy8hIGFzc2Vy
dCggZXcud2l0aF9leGNlcHRpb24oW10oc3RkOjpydW50aW1lX2Vycm9yJiBlKXsvKi4uLiovfSkg
KTsKLSAgLy8hCi0gIC8vISBhc3NlcnQoICFldy53aXRoX2V4Y2VwdGlvbihbXShpbnQmIGUpey8q
Li4uKi99KSApOwotICAvLyEKLSAgLy8hIGFzc2VydCggIWV4Y2VwdGlvbl93cmFwcGVye30ud2l0
aF9leGNlcHRpb24oW10oaW50JiBlKXsvKi4uLiovfSkgKTsKLSAgLy8hIFxlbmRjb2RlCi0gIC8v
ISBcdHBhcmFtIEV4IE9wdGlvbmFsbHksIHRoZSB0eXBlIG9mIHRoZSBleGNlcHRpb24gdGhhdCBg
Zm5gIGFjY2VwdHMuCi0gIC8vISBcdHBhcmFtIEZuIFRoZSB0eXBlIG9mIGEgbW9ub21vcGhpYyBm
dW5jdGlvbiBvYmplY3QuCi0gIC8vISBccGFyYW0gZm4gQSBmdW5jdGlvbiBvYmplY3QgdG8gY2Fs
bCB3aXRoIHRoZSB3cmFwcGVkIGV4Y2VwdGlvbgotICAvLyEgXHJldHVybiBgdHJ1ZWAgaWYgYW5k
IG9ubHkgaWYgYGZuYCB3YXMgY2FsbGVkLgotICAvLyEgXG5vdGUgT3B0aW9uYWxseSwgeW91IG1h
eSBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIHR5cGUgb2YgdGhlIGV4Y2VwdGlvbgotICAvLyEgICAg
IHRoYXQgYGZuYCBleHBlY3RzLCBhcyBpbgotICAvLyEgXGNvZGUKLSAgLy8hIGV3LndpdGhfZXhj
ZXB0aW9uPHN0ZDo6cnVudGltZV9lcnJvcj4oW10oYXV0byYmIGUpIHsgLyouLi4qLzsgfSk7Ci0g
IC8vISBcZW5kY29kZQotICAvLyEgXG5vdGUgVGhlIGhhbmRsZXIgbWF5IG9yIG1heSBub3QgYmUg
aW52b2tlZCB3aXRoIGFuIGFjdGl2ZSBleGNlcHRpb24uCi0gIC8vISAgICAgKipEbyBub3QgdHJ5
IHRvIHJldGhyb3cgdGhlIGV4Y2VwdGlvbiB3aXRoIGB0aHJvdztgIGZyb20gd2l0aGluIHlvdXIK
LSAgLy8hICAgICBoYW5kbGVyIC0tIHRoYXQgaXMsIGEgdGhyb3cgZXhwcmVzc2lvbiB3aXRoIG5v
IG9wZXJhbmQuKiogVGhpcyBtYXkKLSAgLy8hICAgICBjYXVzZSB5b3VyIHByb2Nlc3MgdG8gdGVy
bWluYXRlLiAoSXQgaXMgcGVyZmVjdGx5IG9rIHRvIHRocm93IGZyb20KLSAgLy8hICAgICBhIGhh
bmRsZXIgc28gbG9uZyBhcyB5b3Ugc3BlY2lmeSB0aGUgZXhjZXB0aW9uIHRvIHRocm93LCBhcyBp
bgotICAvLyEgICAgIGB0aHJvdyBlO2AuKQotICB0ZW1wbGF0ZSA8Y2xhc3MgRXggPSB2b2lkIGNv
bnN0LCBjbGFzcyBGbj4KLSAgYm9vbCB3aXRoX2V4Y2VwdGlvbihGbiBmbik7Ci0gIC8vISBcb3Zl
cmxvYWQKLSAgdGVtcGxhdGUgPGNsYXNzIEV4ID0gdm9pZCBjb25zdCwgY2xhc3MgRm4+Ci0gIGJv
b2wgd2l0aF9leGNlcHRpb24oRm4gZm4pIGNvbnN0OwotCi0gIC8vISBIYW5kbGUgdGhlIHdyYXBw
ZWQgZXhwcmVzc2lvbiBhcyBpZiB3aXRoIGEgc2VyaWVzIG9mIGBjYXRjaGAgY2xhdXNlcywKLSAg
Ly8hICAgICBwcm9wYWdhdGluZyB0aGUgZXhjZXB0aW9uIGlmIG5vIGhhbmRsZXIgbWF0Y2hlcy4K
LSAgLy8hIFxwYXIgRXhhbXBsZQotICAvLyEgXGNvZGUKLSAgLy8hIGV4Y2VwdGlvbl93cmFwcGVy
IGV3e3N0ZDo6cnVudGltZV9lcnJvcigiZ29vZGJ5ZSBjcnVlbCB3b3JsZCIpfTsKLSAgLy8hCi0g
IC8vISBldy5oYW5kbGUoCi0gIC8vISAgIFsmXShzdGQ6OmxvZ2ljX2Vycm9yIGNvbnN0JiBlKSB7
Ci0gIC8vISAgICAgIExPRyhERkFUQUwpIDw8ICJydWggcm9oIjsKLSAgLy8hICAgICAgZXcudGhy
b3dfZXhjZXB0aW9uKCk7IC8vIHJldGhyb3cgdGhlIGFjdGl2ZSBleGNlcHRpb24gd2l0aG91dAot
ICAvLyEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbGljaW5nIGl0LiBXaWxsIG5vdCBi
ZSBjYXVnaHQgYnkgb3RoZXIKLSAgLy8hICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFu
ZGxlcnMgaW4gdGhpcyBjYWxsLgotICAvLyEgICB9LAotICAvLyEgICBbJl0oc3RkOjpleGNlcHRp
b24gY29uc3QmIGUpIHsKLSAgLy8hICAgICAgTE9HKEVSUk9SKSA8PCBldy53aGF0KCk7Ci0gIC8v
ISAgIH0pOwotICAvLyEgXGVuZGNvZGUKLSAgLy8hIEluIHRoZSBhYm92ZSBleGFtcGxlLCBhbnkg
ZXhjZXB0aW9uIF9ub3RfIGRlcml2ZWQgZnJvbSBgc3RkOjpleGNlcHRpb25gCi0gIC8vISAgICAg
d2lsbCBiZSBwcm9wYWdhdGVkLiBUbyBzcGVjaWZ5IGEgY2F0Y2gtYWxsIGNsYXVzZSwgcGFzcyBh
IGxhbWJkYSB0aGF0Ci0gIC8vISAgICAgdGFrZXMgYSBDLXN0eWxlIGVsaXBzZXMsIGFzIGluOgot
ICAvLyEgXGNvZGUKLSAgLy8hIGV3LmhhbmRsZSgvKi4uLiogLywgW10oLi4uKSB7IC8qIGhhbmRs
ZSB1bmtub3duIGV4Y2VwdGlvbiAqLyB9ICkKLSAgLy8hIFxlbmRjb2RlCi0gIC8vISBccHJlIGAh
KnRoaXNgCi0gIC8vISBcdHBhcmFtIENhdGNoRm5zLi4uIEEgcGFjayBvZiB1bmFyeSBtb25vbW9y
cGhpYyBmdW5jdGlvbiBvYmplY3QgdHlwZXMuCi0gIC8vISBccGFyYW0gZm5zIEEgcGFjayBvZiB1
bmFyeSBtb25vbW9ycGhpYyBmdW5jdGlvbiBvYmplY3RzIHRvIGJlIHRyZWF0ZWQgYXMKLSAgLy8h
ICAgICBhbiBvcmRlcmVkIGxpc3Qgb2YgcG90ZW50aWFsIGV4Y2VwdGlvbiBoYW5kbGVycy4KLSAg
Ly8hIFxub3RlIFRoZSBoYW5kbGVycyBtYXkgb3IgbWF5IG5vdCBiZSBpbnZva2VkIHdpdGggYW4g
YWN0aXZlIGV4Y2VwdGlvbi4KLSAgLy8hICAgICAqKkRvIG5vdCB0cnkgdG8gcmV0aHJvdyB0aGUg
ZXhjZXB0aW9uIHdpdGggYHRocm93O2AgZnJvbSB3aXRoaW4geW91cgotICAvLyEgICAgIGhhbmRs
ZXIgLS0gdGhhdCBpcywgYSB0aHJvdyBleHByZXNzaW9uIHdpdGggbm8gb3BlcmFuZC4qKiBUaGlz
IG1heQotICAvLyEgICAgIGNhdXNlIHlvdXIgcHJvY2VzcyB0byB0ZXJtaW5hdGUuIChJdCBpcyBw
ZXJmZWN0bHkgb2sgdG8gdGhyb3cgZnJvbQotICAvLyEgICAgIGEgaGFuZGxlciBzbyBsb25nIGFz
IHlvdSBzcGVjaWZ5IHRoZSBleGNlcHRpb24gdG8gdGhyb3csIGFzIGluCi0gIC8vISAgICAgYHRo
cm93IGU7YC4pCi0gIHRlbXBsYXRlIDxjbGFzcy4uLiBDYXRjaEZucz4KLSAgdm9pZCBoYW5kbGUo
Q2F0Y2hGbnMuLi4gZm5zKTsKLSAgLy8hIFxvdmVybG9hZAotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4g
Q2F0Y2hGbnM+Ci0gIHZvaWQgaGFuZGxlKENhdGNoRm5zLi4uIGZucykgY29uc3Q7Ci19OwotCi10
ZW1wbGF0ZSA8Y2xhc3MgRXg+Ci1jb25zdGV4cHIgZXhjZXB0aW9uX3dyYXBwZXI6OlZUYWJsZSBl
eGNlcHRpb25fd3JhcHBlcjo6SW5QbGFjZTxFeD46Om9wc187Ci0KLS8qKgotICogXHJldHVybiBB
biBgZXhjZXB0aW9uX3dyYXBwZXJgIHRoYXQgd3JhcHMgYW4gaW5zdGFuY2Ugb2YgdHlwZSBgRXhg
Ci0gKiAgICAgdGhhdCBoYXMgYmVlbiBjb25zdHJ1Y3RlZCB3aXRoIGFyZ3VtZW50cyBgc3RkOjpm
b3J3YXJkPEFzPihhcykuLi5gLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgRXgsIHR5cGVuYW1lLi4u
IEFzPgotZXhjZXB0aW9uX3dyYXBwZXIgbWFrZV9leGNlcHRpb25fd3JhcHBlcihBcyYmLi4uIGFz
KSB7Ci0gIHJldHVybiBleGNlcHRpb25fd3JhcHBlcntpbl9wbGFjZV90eXBlPEV4Piwgc3RkOjpm
b3J3YXJkPEFzPihhcykuLi59OwotfQotCi0vKioKLSAqIEluc2VydHMgYGV3LndoYXQoKWAgaW50
byB0aGUgb3N0cmVhbSBgc291dGAuCi0gKiBccmV0dXJuIGBzb3V0YAotICovCi10ZW1wbGF0ZSA8
Y2xhc3MgQ2g+Ci1zdGQ6OmJhc2ljX29zdHJlYW08Q2g+JiBvcGVyYXRvcjw8KAotICAgIHN0ZDo6
YmFzaWNfb3N0cmVhbTxDaD4mIHNvdXQsCi0gICAgZXhjZXB0aW9uX3dyYXBwZXIgY29uc3QmIGV3
KSB7Ci0gIHJldHVybiBzb3V0IDw8IGV3LndoYXQoKTsKLX0KLQotLyoqCi0gKiBTd2FwcyB0aGUg
dmFsdWUgb2YgYGFgIHdpdGggdGhlIHZhbHVlIG9mIGBiYC4KLSAqLwotaW5saW5lIHZvaWQgc3dh
cChleGNlcHRpb25fd3JhcHBlciYgYSwgZXhjZXB0aW9uX3dyYXBwZXImIGIpIG5vZXhjZXB0IHsK
LSAgYS5zd2FwKGIpOwotfQotCi0vLyBGb3IgY29uc2lzdGVuY3kgd2l0aCBleGNlcHRpb25TdHIo
KSBmdW5jdGlvbnMgaW4gRXhjZXB0aW9uU3RyaW5nLmgKLWZic3RyaW5nIGV4Y2VwdGlvblN0cihl
eGNlcHRpb25fd3JhcHBlciBjb25zdCYgZXcpOwotCi1uYW1lc3BhY2UgZGV0YWlsIHsKLXRlbXBs
YXRlIDx0eXBlbmFtZSBGPgotaW5saW5lIGV4Y2VwdGlvbl93cmFwcGVyIHRyeV9hbmRfY2F0Y2hf
KEYmJiBmKSB7Ci0gIHJldHVybiAoZigpLCBleGNlcHRpb25fd3JhcHBlcigpKTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lIEV4LCB0eXBlbmFtZS4uLiBFeHM+Ci1pbmxpbmUg
ZXhjZXB0aW9uX3dyYXBwZXIgdHJ5X2FuZF9jYXRjaF8oRiYmIGYpIHsKLSAgdHJ5IHsKLSAgICBy
ZXR1cm4gdHJ5X2FuZF9jYXRjaF88RiwgRXhzLi4uPihzdGQ6OmZvcndhcmQ8Rj4oZikpOwotICB9
IGNhdGNoIChFeCYgZXgpIHsKLSAgICByZXR1cm4gZXhjZXB0aW9uX3dyYXBwZXIoc3RkOjpjdXJy
ZW50X2V4Y2VwdGlvbigpLCBleCk7Ci0gIH0KLX0KLX0gLy8gZGV0YWlsCi0KLS8vISBgdHJ5X2Fu
ZF9jYXRjaGAgaXMgYSBzaW1wbGUgcmVwbGFjZW1lbnQgZm9yIGB0cnkge30gY2F0Y2goKXt9YGAg
dGhhdCBhbGxvd3MKLS8vISB5b3UgdG8gc3BlY2lmeSB3aGljaCBkZXJpdmVkIGV4Y2VwdGlvbnMg
eW91IHdvdWxkIGxpa2UgdG8gY2F0Y2ggYW5kIHN0b3JlIGluCi0vLyEgYW4gYGV4Y2VwdGlvbl93
cmFwcGVyYC4KLS8vIQotLy8hIEJlY2F1c2Ugd2UgY2Fubm90IGJ1aWxkIGFuIGVxdWl2YWxlbnQg
b2YgYHN0ZDo6Y3VycmVudF9leGNlcHRpb24oKWAsIHdlIG5lZWQKLS8vISB0byBjYXRjaCBldmVy
eSBkZXJpdmVkIGV4Y2VwdGlvbiB0aGF0IHdlIGFyZSBpbnRlcmVzdGVkIGluIGNhdGNoaW5nLgot
Ly8hCi0vLyEgRXhjZXB0aW9ucyBzaG91bGQgYmUgbGlzdGVkIGluIHRoZSByZXZlcnNlIG9yZGVy
IHRoYXQgeW91IHdvdWxkIHdyaXRlIHlvdXIKLS8vISBjYXRjaCBzdGF0ZW1lbnRzICh0aGF0IGlz
LCBgc3RkOjpleGNlcHRpb24mYCBzaG91bGQgYmUgZmlyc3QpLgotLy8hCi0vLyEgXHBhciBFeGFt
cGxlIFVzYWdlOgotLy8hIFxjb2RlCi0vLyEgLy8gVGhpcyBjYXRjaGVzIG15IHJ1bnRpbWVfZXJy
b3IgYW5kIGlmIEkgY2FsbCB0aHJvd19leGNlcHRpb24oKSBvbiBldywgaXQKLS8vISAvLyB3aWxs
IHRocm93IGEgcnVudGltZV9lcnJvcgotLy8hIGF1dG8gZXcgPSBmb2xseTo6dHJ5X2FuZF9jYXRj
aDxzdGQ6OmV4Y2VwdGlvbiwgc3RkOjpydW50aW1lX2Vycm9yPihbPV0oKSB7Ci0vLyEgICBpZiAo
YmFkVGhpbmdIYXBwZW5zKCkpIHsKLS8vISAgICAgdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJa
T01HISIpOwotLy8hICAgfQotLy8hIH0pOwotLy8hCi0vLyEgLy8gVGhpcyB3aWxsIGNhdGNoIHRo
ZSBleGNlcHRpb24gYW5kIGlmIEkgY2FsbCB0aHJvd19leGNlcHRpb24oKSBvbiBldywgaXQKLS8v
ISAvLyB3aWxsIHRocm93IGEgc3RkOjpleGNlcHRpb24KLS8vISBhdXRvIGV3ID0gZm9sbHk6OnRy
eV9hbmRfY2F0Y2g8c3RkOjpleGNlcHRpb24sIHN0ZDo6cnVudGltZV9lcnJvcj4oWz1dKCkgewot
Ly8hICAgaWYgKGJhZFRoaW5nSGFwcGVucygpKSB7Ci0vLyEgICAgIHRocm93IHN0ZDo6ZXhjZXB0
aW9uKCk7Ci0vLyEgICB9Ci0vLyEgfSk7Ci0vLyEKLS8vISAvLyBUaGlzIHdpbGwgbm90IGNhdGNo
IHRoZSBleGNlcHRpb24gYW5kIGl0IHdpbGwgYmUgdGhyb3duLgotLy8hIGF1dG8gZXcgPSBmb2xs
eTo6dHJ5X2FuZF9jYXRjaDxzdGQ6OnJ1bnRpbWVfZXJyb3I+KFs9XSgpIHsKLS8vISAgIGlmIChi
YWRUaGluZ0hhcHBlbnMoKSkgewotLy8hICAgICB0aHJvdyBzdGQ6OmV4Y2VwdGlvbigpOwotLy8h
ICAgfQotLy8hIH0pOwotLy8hIFxlbmRjb2RlCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gRXhjZXB0
aW9ucywgdHlwZW5hbWUgRj4KLWV4Y2VwdGlvbl93cmFwcGVyIHRyeV9hbmRfY2F0Y2goRiYmIGZu
KSB7Ci0gIHJldHVybiBkZXRhaWw6OnRyeV9hbmRfY2F0Y2hfPEYsIEV4Y2VwdGlvbnMuLi4+KHN0
ZDo6Zm9yd2FyZDxGPihmbikpOwotfQotfSAvLyBmb2xseQotCi0jaW5jbHVkZSA8Zm9sbHkvRXhj
ZXB0aW9uV3JhcHBlci1pbmwuaD4KLQotI3VuZGVmIEZPTExZX1JFUVVJUkVTCi0jdW5kZWYgRk9M
TFlfUkVRVUlSRVNfREVGCi0jaWZkZWYgX19HTlVDX18KLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMg
cG9wCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2ZvbGx5L0V4ZWN1dG9yLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9mb2xseS9FeGVjdXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGYxMDc3
OWViNTAyZTRlYWJhNTNhYzEyOTY1ZmUyOGM0YWQzMDk1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2ZvbGx5L0V4ZWN1dG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAg
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAq
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8Y2xpbWl0cz4KLQotI2luY2x1ZGUgPGZvbGx5L0Z1bmN0aW9uLmg+Ci0KLW5hbWVz
cGFjZSBmb2xseSB7Ci0KLXVzaW5nIEZ1bmMgPSBGdW5jdGlvbjx2b2lkKCk+OwotCi0vLy8gQW4g
RXhlY3V0b3IgYWNjZXB0cyB1bml0cyBvZiB3b3JrIHdpdGggYWRkKCksIHdoaWNoIHNob3VsZCBi
ZQotLy8vIHRocmVhZHNhZmUuCi1jbGFzcyBFeGVjdXRvciB7Ci0gcHVibGljOgotICB2aXJ0dWFs
IH5FeGVjdXRvcigpID0gZGVmYXVsdDsKLQotICAvLy8gRW5xdWV1ZSBhIGZ1bmN0aW9uIHRvIGV4
ZWN1dGVkIGJ5IHRoaXMgZXhlY3V0b3IuIFRoaXMgYW5kIGFsbAotICAvLy8gdmFyaWFudHMgbXVz
dCBiZSB0aHJlYWRzYWZlLgotICB2aXJ0dWFsIHZvaWQgYWRkKEZ1bmMpID0gMDsKLQotICAvLy8g
RW5xdWV1ZSBhIGZ1bmN0aW9uIHdpdGggYSBnaXZlbiBwcmlvcml0eSwgd2hlcmUgMCBpcyB0aGUg
bWVkaXVtIHByaW9yaXR5Ci0gIC8vLyBUaGlzIGlzIHVwIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiB0
byBlbmZvcmNlCi0gIHZpcnR1YWwgdm9pZCBhZGRXaXRoUHJpb3JpdHkoRnVuYywgaW50OF90IHBy
aW9yaXR5KTsKLQotICB2aXJ0dWFsIHVpbnQ4X3QgZ2V0TnVtUHJpb3JpdGllcygpIGNvbnN0IHsK
LSAgICByZXR1cm4gMTsKLSAgfQotCi0gIHN0YXRpYyBjb25zdCBpbnQ4X3QgTE9fUFJJICA9IFND
SEFSX01JTjsKLSAgc3RhdGljIGNvbnN0IGludDhfdCBNSURfUFJJID0gMDsKLSAgc3RhdGljIGNv
bnN0IGludDhfdCBISV9QUkkgID0gU0NIQVJfTUFYOwotCi0gIC8vLyBBIGNvbnZlbmllbmNlIGZ1
bmN0aW9uIGZvciBzaGFyZWRfcHRyIHRvIGxlZ2FjeSBmdW5jdG9ycy4KLSAgLy8vCi0gIC8vLyBT
b21ldGltZXMgeW91IGhhdmUgYSBmdW5jdG9yIHRoYXQgaXMgbW92ZS1vbmx5LCBhbmQgdGhlcmVm
b3JlIGNhbid0IGJlCi0gIC8vLyBjb252ZXJ0ZWQgdG8gYSBzdGQ6OmZ1bmN0aW9uIChlLmcuIHN0
ZDo6cGFja2FnZWRfdGFzaykuIEluIHRoYXQgY2FzZSwKLSAgLy8vIHdyYXAgaXQgaW4gYSBzaGFy
ZWRfcHRyIChvciBtYXliZSBmb2xseTo6TW92ZVdyYXBwZXIpIGFuZCB1c2UgdGhpcy4KLSAgdGVt
cGxhdGUgPGNsYXNzIFA+Ci0gIHZvaWQgYWRkUHRyKFAgZm4pIHsKLSAgICB0aGlzLT5hZGQoW2Zu
XSgpIG11dGFibGUgeyAoKmZuKSgpOyB9KTsKLSAgfQotCi0gIGNsYXNzIEtlZXBBbGl2ZSB7Ci0g
ICBwdWJsaWM6Ci0gICAgS2VlcEFsaXZlKCkge30KLQotICAgIHZvaWQgcmVzZXQoKSB7Ci0gICAg
ICBleGVjdXRvcl8ucmVzZXQoKTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgewotICAgICAgcmV0dXJuIGV4ZWN1dG9yXyAhPSBudWxscHRyOwotICAgIH0KLQot
ICAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRXhlY3V0b3I7Ci0gICAgZXhwbGljaXQgS2Vl
cEFsaXZlKGZvbGx5OjpFeGVjdXRvciogZXhlY3V0b3IpIDogZXhlY3V0b3JfKGV4ZWN1dG9yKSB7
fQotCi0gICAgc3RydWN0IERlbGV0ZXIgewotICAgICAgdm9pZCBvcGVyYXRvcigpKGZvbGx5OjpF
eGVjdXRvciogZXhlY3V0b3IpIHsKLSAgICAgICAgZXhlY3V0b3ItPmtlZXBBbGl2ZVJlbGVhc2Uo
KTsKLSAgICAgIH0KLSAgICB9OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxmb2xseTo6RXhlY3V0b3Is
IERlbGV0ZXI+IGV4ZWN1dG9yXzsKLSAgfTsKLQotICAvLy8gUmV0dXJucyBhIGtlZXAtYWxpdmUg
dG9rZW4gd2hpY2ggZ3VhcmFudGVlcyB0aGF0IEV4ZWN1dG9yIHdpbGwga2VlcAotICAvLy8gcHJv
Y2Vzc2luZyB0YXNrcyB1bnRpbCB0aGUgdG9rZW4gaXMgcmVsZWFzZWQuIGtlZXAtYWxpdmUgdG9r
ZW4gY2FuIG9ubHkKLSAgLy8vIGJlIGRlc3Ryb3llZCBmcm9tIHdpdGhpbiB0aGUgdGFzaywgc2No
ZWR1bGVkIHRvIGJlIHJ1biBvbiBhbiBleGVjdXRvci4KLSAgLy8vCi0gIC8vLyBJZiBleGVjdXRv
ciBkb2VzIG5vdCBzdXBwb3J0IGtlZXAtYWxpdmUgZnVuY3Rpb25hbGl0eSAtIGR1bW15IHRva2Vu
IHdpbGwKLSAgLy8vIGJlIHJldHVybmVkLgotICB2aXJ0dWFsIEtlZXBBbGl2ZSBnZXRLZWVwQWxp
dmVUb2tlbigpIHsKLSAgICByZXR1cm4ge307Ci0gIH0KLQotIHByb3RlY3RlZDoKLSAgdmlydHVh
bCB2b2lkIGtlZXBBbGl2ZVJlbGVhc2UoKTsKLQotICBLZWVwQWxpdmUgbWFrZUtlZXBBbGl2ZSgp
IHsKLSAgICByZXR1cm4gS2VlcEFsaXZle3RoaXN9OwotICB9Ci19OwotCi19IC8vIGZvbGx5CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9FeHBl
Y3RlZC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvRXhwZWN0
ZWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEyYTZmYzRlMzQ4MWYxMTNiYzJj
YTQxZDI4NWQyMzU1OTMwY2UxZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9FeHBl
Y3RlZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp
Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5h
cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5
IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBC
QVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBl
aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBMaWtlIGZvbGx5OjpPcHRpb25hbCwg
YnV0IGNhbiBzdG9yZSBhIHZhbHVlICpvciogYW5kIGVycm9yLgotICoKLSAqIEBhdXRob3IgRXJp
YyBOaWVibGVyIChlbmllYmxlckBmYi5jb20pCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+Ci0jaW5jbHVkZSA8bmV3
PgotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSNpbmNsdWRl
IDx1dGlsaXR5PgotCi0jaW5jbHVkZSA8Zm9sbHkvTGlrZWx5Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkv
UG9ydGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxmb2xseS9QcmVwcm9jZXNzb3IuaD4KLSNpbmNsdWRl
IDxmb2xseS9UcmFpdHMuaD4KLSNpbmNsdWRlIDxmb2xseS9Vbml0Lmg+Ci0jaW5jbHVkZSA8Zm9s
bHkvVXRpbGl0eS5oPgotCi0jZGVmaW5lIEZPTExZX0VYUEVDVEVEX0lEKFgpIEZCX0NPTkNBVEVO
QVRFKEZCX0NPTkNBVEVOQVRFKEZvbGx5LCBYKSwgX19MSU5FX18pCi0KLSNkZWZpbmUgRk9MTFlf
UkVRVUlSRVNfSU1QTCguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGJvb2wgRk9MTFlfRVhQRUNURURfSUQoUmVxdWlyZXMpID0gZmFsc2UsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgKEZPTExZX0VYUEVDVEVEX0lEKFJlcXVpcmVzKSB8fCBzdGF0aWNfY2FzdDxib29sPihf
X1ZBX0FSR1NfXykpLCBcCi0gICAgICAgICAgIGludD46OnR5cGUgPSAwCi0KLSNkZWZpbmUgRk9M
TFlfUkVRVUlSRVNfVFJBSUxJTkcoLi4uKSAsIEZPTExZX1JFUVVJUkVTX0lNUEwoX19WQV9BUkdT
X18pCi0KLSNkZWZpbmUgRk9MTFlfUkVRVUlSRVMoLi4uKSB0ZW1wbGF0ZSA8Rk9MTFlfUkVRVUlS
RVNfSU1QTChfX1ZBX0FSR1NfXyk+Ci0KLS8qKgotICogZ2NjLTQuNyB3YXJucyBhYm91dCB1c2Ug
b2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJvdW5kIHRoZSB1c2Ugb2Ygc3RvcmFnZV8KLSAqIGV2
ZW4gdGhvdWdoIHRoaXMgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBhdCBlYWNoIHBvaW50Lgot
ICovCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdt
YSBHQ0MgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1X
dW5pbml0aWFsaXplZCIKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdwcmFnbWFz
IgotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21heWJlLXVuaW5pdGlhbGl6ZWQi
Ci0jZW5kaWYgLy8gX19HTlVDX18KLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotLyoqCi0gKiBGb3J3
YXJkIGRlY2xhcmF0aW9ucwotICovCi10ZW1wbGF0ZSA8Y2xhc3MgRXJyb3I+Ci1jbGFzcyBVbmV4
cGVjdGVkOwotCi10ZW1wbGF0ZSA8Y2xhc3MgRXJyb3I+Ci1jb25zdGV4cHIgVW5leHBlY3RlZDx0
eXBlbmFtZSBzdGQ6OmRlY2F5PEVycm9yPjo6dHlwZT4gbWFrZVVuZXhwZWN0ZWQoRXJyb3ImJik7
Ci0KLXRlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgRXJyb3I+Ci1jbGFzcyBFeHBlY3RlZDsK
LQotdGVtcGxhdGUgPGNsYXNzIEVycm9yLCBjbGFzcyBWYWx1ZT4KLWNvbnN0ZXhwciBFeHBlY3Rl
ZDx0eXBlbmFtZSBzdGQ6OmRlY2F5PFZhbHVlPjo6dHlwZSwgRXJyb3I+IG1ha2VFeHBlY3RlZCgK
LSAgICBWYWx1ZSYmKTsKLQotLyoqCi0gKiBBbGlhcyBmb3IgYW4gRXhwZWN0ZWQgdHlwZSdzIGFz
c2ljaWF0ZWQgdmFsdWVfdHlwZQotICovCi10ZW1wbGF0ZSA8Y2xhc3MgRXhwZWN0ZWQ+Ci11c2lu
ZyBFeHBlY3RlZFZhbHVlVHlwZSA9Ci0gICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNl
PEV4cGVjdGVkPjo6dHlwZTo6dmFsdWVfdHlwZTsKLQotLyoqCi0gKiBBbGlhcyBmb3IgYW4gRXhw
ZWN0ZWQgdHlwZSdzIGFzc2ljaWF0ZWQgZXJyb3JfdHlwZQotICovCi10ZW1wbGF0ZSA8Y2xhc3Mg
RXhwZWN0ZWQ+Ci11c2luZyBFeHBlY3RlZEVycm9yVHlwZSA9Ci0gICAgdHlwZW5hbWUgc3RkOjpy
ZW1vdmVfcmVmZXJlbmNlPEV4cGVjdGVkPjo6dHlwZTo6ZXJyb3JfdHlwZTsKLQotLy8gRGV0YWls
cy4uLgotbmFtZXNwYWNlIGV4cGVjdGVkX2RldGFpbCB7Ci0jaWZkZWYgX01TQ19WRVIKLS8vIE1T
VkMgMjAxNSBjYW4ndCBoYW5kbGUgdGhlIFN0cmljdENvbmp1bmN0aW9uLCBzbyB3ZSBoYXZlCi0v
LyB0byB1c2Ugc3RkOjpjb25qdW5jdGlvbiBpbnN0ZWFkLgotdGVtcGxhdGUgPHRlbXBsYXRlIDxj
bGFzcy4uLj4gY2xhc3MgVHJhaXQsIGNsYXNzLi4uIFRzPgotdXNpbmcgU3RyaWN0QWxsT2YgPSBz
dGQ6OmNvbmp1bmN0aW9uPFRyYWl0PFRzPi4uLj47Ci0jZWxzZQotdGVtcGxhdGUgPHRlbXBsYXRl
IDxjbGFzcy4uLj4gY2xhc3MgVHJhaXQsIGNsYXNzLi4uIFRzPgotdXNpbmcgU3RyaWN0QWxsT2Yg
PSBTdHJpY3RDb25qdW5jdGlvbjxUcmFpdDxUcz4uLi4+OwotI2VuZGlmCi0KLXRlbXBsYXRlIDxj
bGFzcyBUPgotdXNpbmcgSXNDb3B5YWJsZSA9IFN0cmljdENvbmp1bmN0aW9uPAotICAgIHN0ZDo6
aXNfY29weV9jb25zdHJ1Y3RpYmxlPFQ+LAotICAgIHN0ZDo6aXNfY29weV9hc3NpZ25hYmxlPFQ+
PjsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci11c2luZyBJc01vdmFibGUgPSBTdHJpY3RDb25qdW5j
dGlvbjwKLSAgICBzdGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxUPiwKLSAgICBzdGQ6OmlzX21v
dmVfYXNzaWduYWJsZTxUPj47Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotdXNpbmcgSXNOb3Rocm93
Q29weWFibGUgPSBTdHJpY3RDb25qdW5jdGlvbjwKLSAgICBzdGQ6OmlzX25vdGhyb3dfY29weV9j
b25zdHJ1Y3RpYmxlPFQ+LAotICAgIHN0ZDo6aXNfbm90aHJvd19jb3B5X2Fzc2lnbmFibGU8VD4+
OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXVzaW5nIElzTm90aHJvd01vdmFibGUgPSBTdHJpY3RD
b25qdW5jdGlvbjwKLSAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPFQ+LAot
ICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8VD4+OwotCi10ZW1wbGF0ZSA8Y2xh
c3MgRnJvbSwgY2xhc3MgVG8+Ci11c2luZyBJc0NvbnZlcnRpYmxlID0gU3RyaWN0Q29uanVuY3Rp
b248Ci0gICAgc3RkOjppc19jb25zdHJ1Y3RpYmxlPFRvLCBGcm9tPiwKLSAgICBzdGQ6OmlzX2Fz
c2lnbmFibGU8VG8mLCBGcm9tPj47Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgotYXV0
byBkb0VtcGxhY2VBc3NpZ24oaW50LCBUJiB0LCBVJiYgdSkgLT4gZGVjbHR5cGUodm9pZCh0ID0g
KFUgJiYpdSkpIHsKLSAgdCA9IChVICYmKXU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBVPgotYXV0byBkb0VtcGxhY2VBc3NpZ24obG9uZywgVCYgdCwgVSYmIHUpIC0+IGRlY2x0eXBl
KHZvaWQoVCgoVSAmJil1KSkpIHsKLSAgdC5+VCgpOwotICA6Om5ldyAoKHZvaWQqKXN0ZDo6YWRk
cmVzc29mKHQpKSBUKChVICYmKXUpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4g
VXM+Ci1hdXRvIGRvRW1wbGFjZUFzc2lnbihpbnQsIFQmIHQsIFVzJiYuLi4gdXMpCi0gICAgLT4g
ZGVjbHR5cGUodm9pZCh0ID0gVCgoVXMgJiYpdXMuLi4pKSkgewotICB0ID0gVCgoVXMgJiYpdXMu
Li4pOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVXM+Ci1hdXRvIGRvRW1wbGFj
ZUFzc2lnbihsb25nLCBUJiB0LCBVcyYmLi4uIHVzKQotICAgIC0+IGRlY2x0eXBlKHZvaWQoVCgo
VXMgJiYpdXMuLi4pKSkgewotICB0Ln5UKCk7Ci0gIDo6bmV3ICgodm9pZCopc3RkOjphZGRyZXNz
b2YodCkpIFQoKFVzICYmKXVzLi4uKTsKLX0KLQotc3RydWN0IEVtcHR5VGFnIHt9Owotc3RydWN0
IFZhbHVlVGFnIHt9Owotc3RydWN0IEVycm9yVGFnIHt9OwotZW51bSBjbGFzcyBXaGljaCA6IHVu
c2lnbmVkIGNoYXIgeyBlRW1wdHksIGVWYWx1ZSwgZUVycm9yIH07Ci1lbnVtIGNsYXNzIFN0b3Jh
Z2VUeXBlIHsgZVBPRFN0cnVjdCwgZVBPRFVuaW9uLCBlVW5pb24gfTsKLQotdGVtcGxhdGUgPGNs
YXNzIFZhbHVlLCBjbGFzcyBFcnJvcj4KLWNvbnN0ZXhwciBTdG9yYWdlVHlwZSBnZXRTdG9yYWdl
VHlwZSgpIHsKLSAgcmV0dXJuIFN0cmljdEFsbE9mPElzVHJpdmlhbGx5Q29weWFibGUsIFZhbHVl
LCBFcnJvcj46OnZhbHVlCi0gICAgICA/IChzaXplb2Yoc3RkOjpwYWlyPFZhbHVlLCBFcnJvcj4p
IDw9IHNpemVvZih2b2lkICogWzJdKSAmJgotICAgICAgICAgICAgICAgICBTdHJpY3RBbGxPZjxz
dGQ6OmlzX3RyaXZpYWwsIFZhbHVlLCBFcnJvcj46OnZhbHVlCi0gICAgICAgICAgICAgPyBTdG9y
YWdlVHlwZTo6ZVBPRFN0cnVjdAotICAgICAgICAgICAgIDogU3RvcmFnZVR5cGU6OmVQT0RVbmlv
bikKLSAgICAgIDogU3RvcmFnZVR5cGU6OmVVbmlvbjsKLX0KLQotdGVtcGxhdGUgPAotICAgIGNs
YXNzIFZhbHVlLAotICAgIGNsYXNzIEVycm9yLAotICAgIFN0b3JhZ2VUeXBlID0gZXhwZWN0ZWRf
ZGV0YWlsOjpnZXRTdG9yYWdlVHlwZTxWYWx1ZSwgRXJyb3I+KCk+IC8vIGVQT0RVbmlvbgotc3Ry
dWN0IEV4cGVjdGVkU3RvcmFnZSB7Ci0gIHVzaW5nIHZhbHVlX3R5cGUgPSBWYWx1ZTsKLSAgdXNp
bmcgZXJyb3JfdHlwZSA9IEVycm9yOwotICB1bmlvbiB7Ci0gICAgVmFsdWUgdmFsdWVfOwotICAg
IEVycm9yIGVycm9yXzsKLSAgICBjaGFyIGNoXzsKLSAgfTsKLSAgV2hpY2ggd2hpY2hfOwotCi0g
IHRlbXBsYXRlIDxjbGFzcyBFID0gRXJyb3IsIGNsYXNzID0gZGVjbHR5cGUoRXt9KT4KLSAgY29u
c3RleHByIEV4cGVjdGVkU3RvcmFnZSgpIG5vZXhjZXB0KG5vZXhjZXB0KEV7fSkpCi0gICAgICA6
IGVycm9yX3t9LCB3aGljaF8oV2hpY2g6OmVFcnJvcikge30KLSAgZXhwbGljaXQgY29uc3RleHBy
IEV4cGVjdGVkU3RvcmFnZShFbXB0eVRhZykgbm9leGNlcHQKLSAgICAgIDogY2hfe30sIHdoaWNo
XyhXaGljaDo6ZUVtcHR5KSB7fQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVnM+Ci0gIGV4cGxpY2l0
IGNvbnN0ZXhwciBFeHBlY3RlZFN0b3JhZ2UoVmFsdWVUYWcsIFZzJiYuLi4gdnMpIG5vZXhjZXB0
KAotICAgICAgbm9leGNlcHQoVmFsdWUoc3RhdGljX2Nhc3Q8VnMmJj4odnMpLi4uKSkpCi0gICAg
ICA6IHZhbHVlXyhzdGF0aWNfY2FzdDxWcyYmPih2cykuLi4pLCB3aGljaF8oV2hpY2g6OmVWYWx1
ZSkge30KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEVzPgotICBleHBsaWNpdCBjb25zdGV4cHIgRXhw
ZWN0ZWRTdG9yYWdlKEVycm9yVGFnLCBFcyYmLi4uIGVzKSBub2V4Y2VwdCgKLSAgICAgIG5vZXhj
ZXB0KEVycm9yKHN0YXRpY19jYXN0PEVzJiY+KGVzKS4uLikpKQotICAgICAgOiBlcnJvcl8oc3Rh
dGljX2Nhc3Q8RXMmJj4oZXMpLi4uKSwgd2hpY2hfKFdoaWNoOjplRXJyb3IpIHt9Ci0gIHZvaWQg
Y2xlYXIoKSBub2V4Y2VwdCB7fQotICBzdGF0aWMgY29uc3RleHByIGJvb2wgdW5pbml0aWFsaXpl
ZEJ5RXhjZXB0aW9uKCkgbm9leGNlcHQgewotICAgIC8vIEFsdGhvdWdoIHdoaWNoXyBtYXkgdGVt
cG9yYXJpbHkgYmUgZUVtcHR5IGR1cmluZyBjb25zdHJ1Y3Rpb24sIGl0Ci0gICAgLy8gaXMgYWx3
YXlzIGVpdGhlciBlVmFsdWUgb3IgZUVycm9yIGZvciBhIGZ1bGx5LWNvbnN0cnVjdGVkIEV4cGVj
dGVkLgotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVnM+Ci0g
IHZvaWQgYXNzaWduVmFsdWUoVnMmJi4uLiB2cykgewotICAgIGV4cGVjdGVkX2RldGFpbDo6ZG9F
bXBsYWNlQXNzaWduKDAsIHZhbHVlXywgc3RhdGljX2Nhc3Q8VnMmJj4odnMpLi4uKTsKLSAgICB3
aGljaF8gPSBXaGljaDo6ZVZhbHVlOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcy4uLiBFcz4KLSAg
dm9pZCBhc3NpZ25FcnJvcihFcyYmLi4uIGVzKSB7Ci0gICAgZXhwZWN0ZWRfZGV0YWlsOjpkb0Vt
cGxhY2VBc3NpZ24oMCwgZXJyb3JfLCBzdGF0aWNfY2FzdDxFcyYmPihlcykuLi4pOwotICAgIHdo
aWNoXyA9IFdoaWNoOjplRXJyb3I7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIE90aGVyPgotICB2
b2lkIGFzc2lnbihPdGhlciYmIHRoYXQpIHsKLSAgICBzd2l0Y2ggKHRoYXQud2hpY2hfKSB7Ci0g
ICAgICBjYXNlIFdoaWNoOjplVmFsdWU6Ci0gICAgICAgIHRoaXMtPmFzc2lnblZhbHVlKHN0YXRp
Y19jYXN0PE90aGVyJiY+KHRoYXQpLnZhbHVlKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgV2hpY2g6OmVFcnJvcjoKLSAgICAgICAgdGhpcy0+YXNzaWduRXJyb3Ioc3RhdGljX2Nhc3Q8
T3RoZXImJj4odGhhdCkuZXJyb3IoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgdGhpcy0+Y2xlYXIoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIFZh
bHVlJiB2YWx1ZSgpICYgewotICAgIHJldHVybiB2YWx1ZV87Ci0gIH0KLSAgY29uc3QgVmFsdWUm
IHZhbHVlKCkgY29uc3QmIHsKLSAgICByZXR1cm4gdmFsdWVfOwotICB9Ci0gIFZhbHVlJiYgdmFs
dWUoKSAmJiB7Ci0gICAgcmV0dXJuIHN0ZDo6bW92ZSh2YWx1ZV8pOwotICB9Ci0gIC8vIFRPRE8g
KHQxNzMyMjQyNik6IHJlbW92ZSB3aGVuIFZTMjAxNSBzdXBwb3J0IGlzIGRlcHJlY2F0ZWQKLSAg
Ly8gVlMyMDE1IHN0YXRpYyBhbmFseXplciBpbmNvcnJlY3RseSBmbGFncyB0aGVzZSBhcyB1bnJl
YWNoYWJsZSBpbiBjZXJ0YWluCi0gIC8vIGNpcmN1bXN0YW5jZXMuIFZTMjAxNyBkb2VzIG5vdCBo
YXZlIHRoaXMgcHJvYmxlbSBvbiB0aGUgc2FtZSBjb2RlLgotICBGT0xMWV9QVVNIX1dBUk5JTkcK
LSAgRk9MTFlfTVNWQ19ESVNBQkxFX1dBUk5JTkcoNDcwMikgLy8gdW5yZWFjaGFibGUgY29kZQot
ICBFcnJvciYgZXJyb3IoKSAmIHsKLSAgICByZXR1cm4gZXJyb3JfOwotICB9Ci0gIGNvbnN0IEVy
cm9yJiBlcnJvcigpIGNvbnN0JiB7Ci0gICAgcmV0dXJuIGVycm9yXzsKLSAgfQotICBFcnJvciYm
IGVycm9yKCkgJiYgewotICAgIHJldHVybiBzdGQ6Om1vdmUoZXJyb3JfKTsKLSAgfQotICBGT0xM
WV9QT1BfV0FSTklORwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBFcnJvcj4K
LXN0cnVjdCBFeHBlY3RlZFVuaW9uIHsKLSAgdW5pb24gewotICAgIFZhbHVlIHZhbHVlXzsKLSAg
ICBFcnJvciBlcnJvcl87Ci0gICAgY2hhciBjaF97fTsKLSAgfTsKLSAgV2hpY2ggd2hpY2hfID0g
V2hpY2g6OmVFbXB0eTsKLQotICBleHBsaWNpdCBjb25zdGV4cHIgRXhwZWN0ZWRVbmlvbihFbXB0
eVRhZykgbm9leGNlcHQge30KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIFZzPgotICBleHBsaWNpdCBj
b25zdGV4cHIgRXhwZWN0ZWRVbmlvbihWYWx1ZVRhZywgVnMmJi4uLiB2cykgbm9leGNlcHQoCi0g
ICAgICBub2V4Y2VwdChWYWx1ZShzdGF0aWNfY2FzdDxWcyYmPih2cykuLi4pKSkKLSAgICAgIDog
dmFsdWVfKHN0YXRpY19jYXN0PFZzJiY+KHZzKS4uLiksIHdoaWNoXyhXaGljaDo6ZVZhbHVlKSB7
fQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gRXM+Ci0gIGV4cGxpY2l0IGNvbnN0ZXhwciBFeHBlY3Rl
ZFVuaW9uKEVycm9yVGFnLCBFcyYmLi4uIGVzKSBub2V4Y2VwdCgKLSAgICAgIG5vZXhjZXB0KEVy
cm9yKHN0YXRpY19jYXN0PEVzJiY+KGVzKS4uLikpKQotICAgICAgOiBlcnJvcl8oc3RhdGljX2Nh
c3Q8RXMmJj4oZXMpLi4uKSwgd2hpY2hfKFdoaWNoOjplRXJyb3IpIHt9Ci0gIEV4cGVjdGVkVW5p
b24oY29uc3QgRXhwZWN0ZWRVbmlvbiYpIHt9Ci0gIEV4cGVjdGVkVW5pb24oRXhwZWN0ZWRVbmlv
biYmKSBub2V4Y2VwdCB7fQotICBFeHBlY3RlZFVuaW9uJiBvcGVyYXRvcj0oY29uc3QgRXhwZWN0
ZWRVbmlvbiYpIHsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLSAgRXhwZWN0ZWRVbmlvbiYgb3Bl
cmF0b3I9KEV4cGVjdGVkVW5pb24mJikgbm9leGNlcHQgewotICAgIHJldHVybiAqdGhpczsKLSAg
fQotICB+RXhwZWN0ZWRVbmlvbigpIHt9Ci0gIFZhbHVlJiB2YWx1ZSgpICYgewotICAgIHJldHVy
biB2YWx1ZV87Ci0gIH0KLSAgY29uc3QgVmFsdWUmIHZhbHVlKCkgY29uc3QmIHsKLSAgICByZXR1
cm4gdmFsdWVfOwotICB9Ci0gIFZhbHVlJiYgdmFsdWUoKSAmJiB7Ci0gICAgcmV0dXJuIHN0ZDo6
bW92ZSh2YWx1ZV8pOwotICB9Ci0gIEVycm9yJiBlcnJvcigpICYgewotICAgIHJldHVybiBlcnJv
cl87Ci0gIH0KLSAgY29uc3QgRXJyb3ImIGVycm9yKCkgY29uc3QmIHsKLSAgICByZXR1cm4gZXJy
b3JfOwotICB9Ci0gIEVycm9yJiYgZXJyb3IoKSAmJiB7Ci0gICAgcmV0dXJuIHN0ZDo6bW92ZShl
cnJvcl8pOwotICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgRGVyaXZlZCwgYm9vbCwgYm9vbCBO
b2V4Y2VwdD4KLXN0cnVjdCBDb3B5Q29uc3RydWN0aWJsZSB7Ci0gIGNvbnN0ZXhwciBDb3B5Q29u
c3RydWN0aWJsZSgpID0gZGVmYXVsdDsKLSAgQ29weUNvbnN0cnVjdGlibGUoY29uc3QgQ29weUNv
bnN0cnVjdGlibGUmIHRoYXQpIG5vZXhjZXB0KE5vZXhjZXB0KSB7Ci0gICAgc3RhdGljX2Nhc3Q8
RGVyaXZlZCo+KHRoaXMpLT5hc3NpZ24oc3RhdGljX2Nhc3Q8Y29uc3QgRGVyaXZlZCY+KHRoYXQp
KTsKLSAgfQotICBjb25zdGV4cHIgQ29weUNvbnN0cnVjdGlibGUoQ29weUNvbnN0cnVjdGlibGUm
JikgPSBkZWZhdWx0OwotICBDb3B5Q29uc3RydWN0aWJsZSYgb3BlcmF0b3I9KGNvbnN0IENvcHlD
b25zdHJ1Y3RpYmxlJikgPSBkZWZhdWx0OwotICBDb3B5Q29uc3RydWN0aWJsZSYgb3BlcmF0b3I9
KENvcHlDb25zdHJ1Y3RpYmxlJiYpID0gZGVmYXVsdDsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBE
ZXJpdmVkLCBib29sIE5vZXhjZXB0Pgotc3RydWN0IENvcHlDb25zdHJ1Y3RpYmxlPERlcml2ZWQs
IGZhbHNlLCBOb2V4Y2VwdD4gewotICBjb25zdGV4cHIgQ29weUNvbnN0cnVjdGlibGUoKSA9IGRl
ZmF1bHQ7Ci0gIENvcHlDb25zdHJ1Y3RpYmxlKGNvbnN0IENvcHlDb25zdHJ1Y3RpYmxlJikgPSBk
ZWxldGU7Ci0gIGNvbnN0ZXhwciBDb3B5Q29uc3RydWN0aWJsZShDb3B5Q29uc3RydWN0aWJsZSYm
KSA9IGRlZmF1bHQ7Ci0gIENvcHlDb25zdHJ1Y3RpYmxlJiBvcGVyYXRvcj0oY29uc3QgQ29weUNv
bnN0cnVjdGlibGUmKSA9IGRlZmF1bHQ7Ci0gIENvcHlDb25zdHJ1Y3RpYmxlJiBvcGVyYXRvcj0o
Q29weUNvbnN0cnVjdGlibGUmJikgPSBkZWZhdWx0OwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIERl
cml2ZWQsIGJvb2wsIGJvb2wgTm9leGNlcHQ+Ci1zdHJ1Y3QgTW92ZUNvbnN0cnVjdGlibGUgewot
ICBjb25zdGV4cHIgTW92ZUNvbnN0cnVjdGlibGUoKSA9IGRlZmF1bHQ7Ci0gIGNvbnN0ZXhwciBN
b3ZlQ29uc3RydWN0aWJsZShjb25zdCBNb3ZlQ29uc3RydWN0aWJsZSYpID0gZGVmYXVsdDsKLSAg
TW92ZUNvbnN0cnVjdGlibGUoTW92ZUNvbnN0cnVjdGlibGUmJiB0aGF0KSBub2V4Y2VwdChOb2V4
Y2VwdCkgewotICAgIHN0YXRpY19jYXN0PERlcml2ZWQqPih0aGlzKS0+YXNzaWduKHN0ZDo6bW92
ZShzdGF0aWNfY2FzdDxEZXJpdmVkJj4odGhhdCkpKTsKLSAgfQotICBNb3ZlQ29uc3RydWN0aWJs
ZSYgb3BlcmF0b3I9KGNvbnN0IE1vdmVDb25zdHJ1Y3RpYmxlJikgPSBkZWZhdWx0OwotICBNb3Zl
Q29uc3RydWN0aWJsZSYgb3BlcmF0b3I9KE1vdmVDb25zdHJ1Y3RpYmxlJiYpID0gZGVmYXVsdDsK
LX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBEZXJpdmVkLCBib29sIE5vZXhjZXB0Pgotc3RydWN0IE1v
dmVDb25zdHJ1Y3RpYmxlPERlcml2ZWQsIGZhbHNlLCBOb2V4Y2VwdD4gewotICBjb25zdGV4cHIg
TW92ZUNvbnN0cnVjdGlibGUoKSA9IGRlZmF1bHQ7Ci0gIGNvbnN0ZXhwciBNb3ZlQ29uc3RydWN0
aWJsZShjb25zdCBNb3ZlQ29uc3RydWN0aWJsZSYpID0gZGVmYXVsdDsKLSAgTW92ZUNvbnN0cnVj
dGlibGUoTW92ZUNvbnN0cnVjdGlibGUmJikgPSBkZWxldGU7Ci0gIE1vdmVDb25zdHJ1Y3RpYmxl
JiBvcGVyYXRvcj0oY29uc3QgTW92ZUNvbnN0cnVjdGlibGUmKSA9IGRlZmF1bHQ7Ci0gIE1vdmVD
b25zdHJ1Y3RpYmxlJiBvcGVyYXRvcj0oTW92ZUNvbnN0cnVjdGlibGUmJikgPSBkZWZhdWx0Owot
fTsKLQotdGVtcGxhdGUgPGNsYXNzIERlcml2ZWQsIGJvb2wsIGJvb2wgTm9leGNlcHQ+Ci1zdHJ1
Y3QgQ29weUFzc2lnbmFibGUgewotICBjb25zdGV4cHIgQ29weUFzc2lnbmFibGUoKSA9IGRlZmF1
bHQ7Ci0gIGNvbnN0ZXhwciBDb3B5QXNzaWduYWJsZShjb25zdCBDb3B5QXNzaWduYWJsZSYpID0g
ZGVmYXVsdDsKLSAgY29uc3RleHByIENvcHlBc3NpZ25hYmxlKENvcHlBc3NpZ25hYmxlJiYpID0g
ZGVmYXVsdDsKLSAgQ29weUFzc2lnbmFibGUmIG9wZXJhdG9yPShjb25zdCBDb3B5QXNzaWduYWJs
ZSYgdGhhdCkgbm9leGNlcHQoTm9leGNlcHQpIHsKLSAgICBzdGF0aWNfY2FzdDxEZXJpdmVkKj4o
dGhpcyktPmFzc2lnbihzdGF0aWNfY2FzdDxjb25zdCBEZXJpdmVkJj4odGhhdCkpOwotICAgIHJl
dHVybiAqdGhpczsKLSAgfQotICBDb3B5QXNzaWduYWJsZSYgb3BlcmF0b3I9KENvcHlBc3NpZ25h
YmxlJiYpID0gZGVmYXVsdDsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBEZXJpdmVkLCBib29sIE5v
ZXhjZXB0Pgotc3RydWN0IENvcHlBc3NpZ25hYmxlPERlcml2ZWQsIGZhbHNlLCBOb2V4Y2VwdD4g
ewotICBjb25zdGV4cHIgQ29weUFzc2lnbmFibGUoKSA9IGRlZmF1bHQ7Ci0gIGNvbnN0ZXhwciBD
b3B5QXNzaWduYWJsZShjb25zdCBDb3B5QXNzaWduYWJsZSYpID0gZGVmYXVsdDsKLSAgY29uc3Rl
eHByIENvcHlBc3NpZ25hYmxlKENvcHlBc3NpZ25hYmxlJiYpID0gZGVmYXVsdDsKLSAgQ29weUFz
c2lnbmFibGUmIG9wZXJhdG9yPShjb25zdCBDb3B5QXNzaWduYWJsZSYpID0gZGVsZXRlOwotICBD
b3B5QXNzaWduYWJsZSYgb3BlcmF0b3I9KENvcHlBc3NpZ25hYmxlJiYpID0gZGVmYXVsdDsKLX07
Ci0KLXRlbXBsYXRlIDxjbGFzcyBEZXJpdmVkLCBib29sLCBib29sIE5vZXhjZXB0Pgotc3RydWN0
IE1vdmVBc3NpZ25hYmxlIHsKLSAgY29uc3RleHByIE1vdmVBc3NpZ25hYmxlKCkgPSBkZWZhdWx0
OwotICBjb25zdGV4cHIgTW92ZUFzc2lnbmFibGUoY29uc3QgTW92ZUFzc2lnbmFibGUmKSA9IGRl
ZmF1bHQ7Ci0gIGNvbnN0ZXhwciBNb3ZlQXNzaWduYWJsZShNb3ZlQXNzaWduYWJsZSYmKSA9IGRl
ZmF1bHQ7Ci0gIE1vdmVBc3NpZ25hYmxlJiBvcGVyYXRvcj0oY29uc3QgTW92ZUFzc2lnbmFibGUm
KSA9IGRlZmF1bHQ7Ci0gIE1vdmVBc3NpZ25hYmxlJiBvcGVyYXRvcj0oTW92ZUFzc2lnbmFibGUm
JiB0aGF0KSBub2V4Y2VwdChOb2V4Y2VwdCkgewotICAgIHN0YXRpY19jYXN0PERlcml2ZWQqPih0
aGlzKS0+YXNzaWduKHN0ZDo6bW92ZShzdGF0aWNfY2FzdDxEZXJpdmVkJj4odGhhdCkpKTsKLSAg
ICByZXR1cm4gKnRoaXM7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBEZXJpdmVkLCBib29s
IE5vZXhjZXB0Pgotc3RydWN0IE1vdmVBc3NpZ25hYmxlPERlcml2ZWQsIGZhbHNlLCBOb2V4Y2Vw
dD4gewotICBjb25zdGV4cHIgTW92ZUFzc2lnbmFibGUoKSA9IGRlZmF1bHQ7Ci0gIGNvbnN0ZXhw
ciBNb3ZlQXNzaWduYWJsZShjb25zdCBNb3ZlQXNzaWduYWJsZSYpID0gZGVmYXVsdDsKLSAgY29u
c3RleHByIE1vdmVBc3NpZ25hYmxlKE1vdmVBc3NpZ25hYmxlJiYpID0gZGVmYXVsdDsKLSAgTW92
ZUFzc2lnbmFibGUmIG9wZXJhdG9yPShjb25zdCBNb3ZlQXNzaWduYWJsZSYpID0gZGVmYXVsdDsK
LSAgTW92ZUFzc2lnbmFibGUmIG9wZXJhdG9yPShNb3ZlQXNzaWduYWJsZSYmIHRoYXQpID0gZGVs
ZXRlOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBFcnJvcj4KLXN0cnVjdCBF
eHBlY3RlZFN0b3JhZ2U8VmFsdWUsIEVycm9yLCBTdG9yYWdlVHlwZTo6ZVVuaW9uPgotICAgIDog
RXhwZWN0ZWRVbmlvbjxWYWx1ZSwgRXJyb3I+LAotICAgICAgQ29weUNvbnN0cnVjdGlibGU8Ci0g
ICAgICAgICAgRXhwZWN0ZWRTdG9yYWdlPFZhbHVlLCBFcnJvciwgU3RvcmFnZVR5cGU6OmVVbmlv
bj4sCi0gICAgICAgICAgU3RyaWN0QWxsT2Y8c3RkOjppc19jb3B5X2NvbnN0cnVjdGlibGUsIFZh
bHVlLCBFcnJvcj46OnZhbHVlLAotICAgICAgICAgIFN0cmljdEFsbE9mPHN0ZDo6aXNfbm90aHJv
d19jb3B5X2NvbnN0cnVjdGlibGUsIFZhbHVlLCBFcnJvcj46OnZhbHVlPiwKLSAgICAgIE1vdmVD
b25zdHJ1Y3RpYmxlPAotICAgICAgICAgIEV4cGVjdGVkU3RvcmFnZTxWYWx1ZSwgRXJyb3IsIFN0
b3JhZ2VUeXBlOjplVW5pb24+LAotICAgICAgICAgIFN0cmljdEFsbE9mPHN0ZDo6aXNfbW92ZV9j
b25zdHJ1Y3RpYmxlLCBWYWx1ZSwgRXJyb3I+Ojp2YWx1ZSwKLSAgICAgICAgICBTdHJpY3RBbGxP
ZjxzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlLCBWYWx1ZSwgRXJyb3I+Ojp2YWx1
ZT4sCi0gICAgICBDb3B5QXNzaWduYWJsZTwKLSAgICAgICAgICBFeHBlY3RlZFN0b3JhZ2U8VmFs
dWUsIEVycm9yLCBTdG9yYWdlVHlwZTo6ZVVuaW9uPiwKLSAgICAgICAgICBTdHJpY3RBbGxPZjxJ
c0NvcHlhYmxlLCBWYWx1ZSwgRXJyb3I+Ojp2YWx1ZSwKLSAgICAgICAgICBTdHJpY3RBbGxPZjxJ
c05vdGhyb3dDb3B5YWJsZSwgVmFsdWUsIEVycm9yPjo6dmFsdWU+LAotICAgICAgTW92ZUFzc2ln
bmFibGU8Ci0gICAgICAgICAgRXhwZWN0ZWRTdG9yYWdlPFZhbHVlLCBFcnJvciwgU3RvcmFnZVR5
cGU6OmVVbmlvbj4sCi0gICAgICAgICAgU3RyaWN0QWxsT2Y8SXNNb3ZhYmxlLCBWYWx1ZSwgRXJy
b3I+Ojp2YWx1ZSwKLSAgICAgICAgICBTdHJpY3RBbGxPZjxJc05vdGhyb3dNb3ZhYmxlLCBWYWx1
ZSwgRXJyb3I+Ojp2YWx1ZT4gewotICB1c2luZyB2YWx1ZV90eXBlID0gVmFsdWU7Ci0gIHVzaW5n
IGVycm9yX3R5cGUgPSBFcnJvcjsKLSAgdXNpbmcgQmFzZSA9IEV4cGVjdGVkVW5pb248VmFsdWUs
IEVycm9yPjsKLSAgdGVtcGxhdGUgPGNsYXNzIEUgPSBFcnJvciwgY2xhc3MgPSBkZWNsdHlwZShF
e30pPgotICBjb25zdGV4cHIgRXhwZWN0ZWRTdG9yYWdlKCkgbm9leGNlcHQobm9leGNlcHQoRXt9
KSkgOiBCYXNle0Vycm9yVGFne319IHt9Ci0gIEV4cGVjdGVkU3RvcmFnZShjb25zdCBFeHBlY3Rl
ZFN0b3JhZ2UmKSA9IGRlZmF1bHQ7Ci0gIEV4cGVjdGVkU3RvcmFnZShFeHBlY3RlZFN0b3JhZ2Um
JikgPSBkZWZhdWx0OwotICBFeHBlY3RlZFN0b3JhZ2UmIG9wZXJhdG9yPShjb25zdCBFeHBlY3Rl
ZFN0b3JhZ2UmKSA9IGRlZmF1bHQ7Ci0gIEV4cGVjdGVkU3RvcmFnZSYgb3BlcmF0b3I9KEV4cGVj
dGVkU3RvcmFnZSYmKSA9IGRlZmF1bHQ7Ci0gIHVzaW5nIEV4cGVjdGVkVW5pb248VmFsdWUsIEVy
cm9yPjo6RXhwZWN0ZWRVbmlvbjsKLSAgfkV4cGVjdGVkU3RvcmFnZSgpIHsKLSAgICBjbGVhcigp
OwotICB9Ci0gIHZvaWQgY2xlYXIoKSBub2V4Y2VwdCB7Ci0gICAgc3dpdGNoICh0aGlzLT53aGlj
aF8pIHsKLSAgICAgIGNhc2UgV2hpY2g6OmVWYWx1ZToKLSAgICAgICAgdGhpcy0+dmFsdWUoKS5+
VmFsdWUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFdoaWNoOjplRXJyb3I6Ci0gICAg
ICAgIHRoaXMtPmVycm9yKCkufkVycm9yKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHRoaXMtPndoaWNoXyA9IFdoaWNoOjplRW1w
dHk7Ci0gIH0KLSAgYm9vbCB1bmluaXRpYWxpemVkQnlFeGNlcHRpb24oKSBjb25zdCBub2V4Y2Vw
dCB7Ci0gICAgcmV0dXJuIHRoaXMtPndoaWNoXyA9PSBXaGljaDo6ZUVtcHR5OwotICB9Ci0gIHRl
bXBsYXRlIDxjbGFzcy4uLiBWcz4KLSAgdm9pZCBhc3NpZ25WYWx1ZShWcyYmLi4uIHZzKSB7Ci0g
ICAgaWYgKHRoaXMtPndoaWNoXyA9PSBXaGljaDo6ZVZhbHVlKSB7Ci0gICAgICBleHBlY3RlZF9k
ZXRhaWw6OmRvRW1wbGFjZUFzc2lnbigKLSAgICAgICAgICAwLCB0aGlzLT52YWx1ZSgpLCBzdGF0
aWNfY2FzdDxWcyYmPih2cykuLi4pOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLT5jbGVhcigp
OwotICAgICAgOjpuZXcgKCh2b2lkKilzdGQ6OmFkZHJlc3NvZih0aGlzLT52YWx1ZSgpKSkKLSAg
ICAgICAgICBWYWx1ZShzdGF0aWNfY2FzdDxWcyYmPih2cykuLi4pOwotICAgICAgdGhpcy0+d2hp
Y2hfID0gV2hpY2g6OmVWYWx1ZTsKLSAgICB9Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEVz
PgotICB2b2lkIGFzc2lnbkVycm9yKEVzJiYuLi4gZXMpIHsKLSAgICBpZiAodGhpcy0+d2hpY2hf
ID09IFdoaWNoOjplRXJyb3IpIHsKLSAgICAgIGV4cGVjdGVkX2RldGFpbDo6ZG9FbXBsYWNlQXNz
aWduKAotICAgICAgICAgIDAsIHRoaXMtPmVycm9yKCksIHN0YXRpY19jYXN0PEVzJiY+KGVzKS4u
Lik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRoaXMtPmNsZWFyKCk7Ci0gICAgICA6Om5ldyAoKHZv
aWQqKXN0ZDo6YWRkcmVzc29mKHRoaXMtPmVycm9yKCkpKQotICAgICAgICAgIEVycm9yKHN0YXRp
Y19jYXN0PEVzJiY+KGVzKS4uLik7Ci0gICAgICB0aGlzLT53aGljaF8gPSBXaGljaDo6ZUVycm9y
OwotICAgIH0KLSAgfQotICBib29sIGlzU2VsZkFzc2lnbihjb25zdCBFeHBlY3RlZFN0b3JhZ2Uq
IHRoYXQpIGNvbnN0IHsKLSAgICByZXR1cm4gdGhpcyA9PSB0aGF0OwotICB9Ci0gIGNvbnN0ZXhw
ciBib29sIGlzU2VsZkFzc2lnbihjb25zdCB2b2lkKikgY29uc3QgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgT3RoZXI+Ci0gIHZvaWQgYXNzaWduKE90aGVyJiYg
dGhhdCkgewotICAgIGlmIChpc1NlbGZBc3NpZ24oJnRoYXQpKQotICAgICAgcmV0dXJuOwotICAg
IHN3aXRjaCAodGhhdC53aGljaF8pIHsKLSAgICAgIGNhc2UgV2hpY2g6OmVWYWx1ZToKLSAgICAg
ICAgdGhpcy0+YXNzaWduVmFsdWUoc3RhdGljX2Nhc3Q8T3RoZXImJj4odGhhdCkudmFsdWUoKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXaGljaDo6ZUVycm9yOgotICAgICAgICB0aGlz
LT5hc3NpZ25FcnJvcihzdGF0aWNfY2FzdDxPdGhlciYmPih0aGF0KS5lcnJvcigpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB0aGlzLT5jbGVhcigpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gIH0KLX07Ci0KLS8vIEZvciBzbWFsbCAocG9pbnRlci1zaXplZCkg
dHJpdmlhbCB0eXBlcywgYSBzdHJ1Y3QgaXMgZmFzdGVyIHRoYW4gYSB1bmlvbi4KLXRlbXBsYXRl
IDxjbGFzcyBWYWx1ZSwgY2xhc3MgRXJyb3I+Ci1zdHJ1Y3QgRXhwZWN0ZWRTdG9yYWdlPFZhbHVl
LCBFcnJvciwgU3RvcmFnZVR5cGU6OmVQT0RTdHJ1Y3Q+IHsKLSAgdXNpbmcgdmFsdWVfdHlwZSA9
IFZhbHVlOwotICB1c2luZyBlcnJvcl90eXBlID0gRXJyb3I7Ci0gIFdoaWNoIHdoaWNoXzsKLSAg
RXJyb3IgZXJyb3JfOwotICBWYWx1ZSB2YWx1ZV87Ci0KLSAgY29uc3RleHByIEV4cGVjdGVkU3Rv
cmFnZSgpIG5vZXhjZXB0Ci0gICAgICA6IHdoaWNoXyhXaGljaDo6ZUVycm9yKSwgZXJyb3Jfe30s
IHZhbHVlX3t9IHt9Ci0gIGV4cGxpY2l0IGNvbnN0ZXhwciBFeHBlY3RlZFN0b3JhZ2UoRW1wdHlU
YWcpIG5vZXhjZXB0Ci0gICAgICA6IHdoaWNoXyhXaGljaDo6ZUVtcHR5KSwgZXJyb3Jfe30sIHZh
bHVlX3t9IHt9Ci0gIHRlbXBsYXRlIDxjbGFzcy4uLiBWcz4KLSAgZXhwbGljaXQgY29uc3RleHBy
IEV4cGVjdGVkU3RvcmFnZShWYWx1ZVRhZywgVnMmJi4uLiB2cykgbm9leGNlcHQoCi0gICAgICBu
b2V4Y2VwdChWYWx1ZShzdGF0aWNfY2FzdDxWcyYmPih2cykuLi4pKSkKLSAgICAgIDogd2hpY2hf
KFdoaWNoOjplVmFsdWUpLCBlcnJvcl97fSwgdmFsdWVfKHN0YXRpY19jYXN0PFZzJiY+KHZzKS4u
Likge30KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEVzPgotICBleHBsaWNpdCBjb25zdGV4cHIgRXhw
ZWN0ZWRTdG9yYWdlKEVycm9yVGFnLCBFcyYmLi4uIGVzKSBub2V4Y2VwdCgKLSAgICAgIG5vZXhj
ZXB0KEVycm9yKHN0YXRpY19jYXN0PEVzJiY+KGVzKS4uLikpKQotICAgICAgOiB3aGljaF8oV2hp
Y2g6OmVFcnJvciksIGVycm9yXyhzdGF0aWNfY2FzdDxFcyYmPihlcykuLi4pLCB2YWx1ZV97fSB7
fQotICB2b2lkIGNsZWFyKCkgbm9leGNlcHQge30KLSAgY29uc3RleHByIHN0YXRpYyBib29sIHVu
aW5pdGlhbGl6ZWRCeUV4Y2VwdGlvbigpIG5vZXhjZXB0IHsKLSAgICByZXR1cm4gZmFsc2U7Ci0g
IH0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIFZzPgotICB2b2lkIGFzc2lnblZhbHVlKFZzJiYuLi4g
dnMpIHsKLSAgICBleHBlY3RlZF9kZXRhaWw6OmRvRW1wbGFjZUFzc2lnbigwLCB2YWx1ZV8sIHN0
YXRpY19jYXN0PFZzJiY+KHZzKS4uLik7Ci0gICAgd2hpY2hfID0gV2hpY2g6OmVWYWx1ZTsKLSAg
fQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gRXM+Ci0gIHZvaWQgYXNzaWduRXJyb3IoRXMmJi4uLiBl
cykgewotICAgIGV4cGVjdGVkX2RldGFpbDo6ZG9FbXBsYWNlQXNzaWduKDAsIGVycm9yXywgc3Rh
dGljX2Nhc3Q8RXMmJj4oZXMpLi4uKTsKLSAgICB3aGljaF8gPSBXaGljaDo6ZUVycm9yOwotICB9
Ci0gIHRlbXBsYXRlIDxjbGFzcyBPdGhlcj4KLSAgdm9pZCBhc3NpZ24oT3RoZXImJiB0aGF0KSB7
Ci0gICAgc3dpdGNoICh0aGF0LndoaWNoXykgewotICAgICAgY2FzZSBXaGljaDo6ZVZhbHVlOgot
ICAgICAgICB0aGlzLT5hc3NpZ25WYWx1ZShzdGF0aWNfY2FzdDxPdGhlciYmPih0aGF0KS52YWx1
ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFdoaWNoOjplRXJyb3I6Ci0gICAgICAg
IHRoaXMtPmFzc2lnbkVycm9yKHN0YXRpY19jYXN0PE90aGVyJiY+KHRoYXQpLmVycm9yKCkpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHRoaXMtPmNsZWFyKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBWYWx1ZSYgdmFsdWUoKSAmIHsKLSAgICByZXR1
cm4gdmFsdWVfOwotICB9Ci0gIGNvbnN0IFZhbHVlJiB2YWx1ZSgpIGNvbnN0JiB7Ci0gICAgcmV0
dXJuIHZhbHVlXzsKLSAgfQotICBWYWx1ZSYmIHZhbHVlKCkgJiYgewotICAgIHJldHVybiBzdGQ6
Om1vdmUodmFsdWVfKTsKLSAgfQotICAvLyBUT0RPICh0MTczMjI0MjYpOiByZW1vdmUgd2hlbiBW
UzIwMTUgc3VwcG9ydCBpcyBkZXByZWNhdGVkCi0gIC8vIFZTMjAxNSBzdGF0aWMgYW5hbHl6ZXIg
aW5jb3JyZWN0bHkgZmxhZ3MgdGhlc2UgYXMgdW5yZWFjaGFibGUgaW4gY2VydGFpbgotICAvLyBj
aXJjdW1zdGFuY2VzLiBWUzIwMTcgZG9lcyBub3QgaGF2ZSB0aGlzIHByb2JsZW0gb24gdGhlIHNh
bWUgY29kZS4KLSAgRk9MTFlfUFVTSF9XQVJOSU5HCi0gIEZPTExZX01TVkNfRElTQUJMRV9XQVJO
SU5HKDQ3MDIpIC8vIHVucmVhY2hhYmxlIGNvZGUKLSAgRXJyb3ImIGVycm9yKCkgJiB7Ci0gICAg
cmV0dXJuIGVycm9yXzsKLSAgfQotICBjb25zdCBFcnJvciYgZXJyb3IoKSBjb25zdCYgewotICAg
IHJldHVybiBlcnJvcl87Ci0gIH0KLSAgRXJyb3ImJiBlcnJvcigpICYmIHsKLSAgICByZXR1cm4g
c3RkOjptb3ZlKGVycm9yXyk7Ci0gIH0KLSAgRk9MTFlfUE9QX1dBUk5JTkcKLX07Ci0KLW5hbWVz
cGFjZSBleHBlY3RlZF9kZXRhaWxfRXhwZWN0ZWRIZWxwZXIgewotLy8gVHJpY2t5IGhhY2sgc28g
dGhhdCBFeHBlY3RlZDo6dGhlbiBjYW4gaGFuZGxlIGxhbWJkYXMgdGhhdCByZXR1cm4gdm9pZAot
dGVtcGxhdGUgPGNsYXNzIFQ+Ci1pbmxpbmUgVCYmIG9wZXJhdG9yLChUJiYgdCwgVW5pdCkgbm9l
eGNlcHQgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8VCYmPih0KTsKLX0KLQotc3RydWN0IEV4cGVj
dGVkSGVscGVyIHsKLSAgdGVtcGxhdGUgPGNsYXNzIEVycm9yLCBjbGFzcyBUPgotICBzdGF0aWMg
Y29uc3RleHByIEV4cGVjdGVkPFQsIEVycm9yPiByZXR1cm5fKFQgdCkgewotICAgIHJldHVybiBm
b2xseTo6bWFrZUV4cGVjdGVkPEVycm9yPih0KTsKLSAgfQotICB0ZW1wbGF0ZSA8Ci0gICAgICBj
bGFzcyBFcnJvciwKLSAgICAgIGNsYXNzIFQsCi0gICAgICBjbGFzcyBVIEZPTExZX1JFUVVJUkVT
X1RSQUlMSU5HKAotICAgICAgICAgIGV4cGVjdGVkX2RldGFpbDo6SXNDb252ZXJ0aWJsZTxVJiYs
IEVycm9yPjo6dmFsdWUpPgotICBzdGF0aWMgY29uc3RleHByIEV4cGVjdGVkPFQsIEVycm9yPiBy
ZXR1cm5fKEV4cGVjdGVkPFQsIFU+IHQpIHsKLSAgICByZXR1cm4gdDsKLSAgfQotCi0gIHRlbXBs
YXRlIDxjbGFzcyBUaGlzPgotICBzdGF0aWMgdHlwZW5hbWUgc3RkOjpkZWNheTxUaGlzPjo6dHlw
ZSB0aGVuXyhUaGlzJiYgZXgpIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhpcyYmPihleCk7
Ci0gIH0KLQotICBGT0xMWV9QVVNIX1dBUk5JTkcKLSAgLy8gRG9uJ3Qgd2FybiBhYm91dCBub3Qg
dXNpbmcgdGhlIG92ZXJsb2FkZWQgY29tbWEgb3BlcmF0b3IuCi0gIEZPTExZX01TVkNfRElTQUJM
RV9XQVJOSU5HKDQ5MTMpCi0gIHRlbXBsYXRlIDwKLSAgICAgIGNsYXNzIFRoaXMsCi0gICAgICBj
bGFzcyBGbiwKLSAgICAgIGNsYXNzLi4uIEZucywKLSAgICAgIGNsYXNzIEUgPSBFeHBlY3RlZEVy
cm9yVHlwZTxUaGlzPiwKLSAgICAgIGNsYXNzIFQgPSBFeHBlY3RlZEhlbHBlcj4KLSAgc3RhdGlj
IGF1dG8gdGhlbl8oVGhpcyYmIGV4LCBGbiYmIGZuLCBGbnMmJi4uLiBmbnMpIC0+IGRlY2x0eXBl
KFQ6OnRoZW5fKAotICAgICAgVDo6dGVtcGxhdGUgcmV0dXJuXzxFPigKLSAgICAgICAgICAoc3Rk
OjpkZWNsdmFsPEZuPigpKHN0ZDo6ZGVjbHZhbDxUaGlzPigpLnZhbHVlKCkpLCB1bml0KSksCi0g
ICAgICBzdGQ6OmRlY2x2YWw8Rm5zPigpLi4uKSkgewotICAgIGlmIChMSUtFTFkoZXgud2hpY2hf
ID09IGV4cGVjdGVkX2RldGFpbDo6V2hpY2g6OmVWYWx1ZSkpCi0gICAgICByZXR1cm4gVDo6dGhl
bl8oCi0gICAgICAgICAgVDo6dGVtcGxhdGUgcmV0dXJuXzxFPigKLSAgICAgICAgICAgICAgLy8g
VXNlcyB0aGUgY29tbWEgb3BlcmF0b3IgZGVmaW5lZCBhYm92ZSBJRkYgdGhlIGxhbWJkYQotICAg
ICAgICAgICAgICAvLyByZXR1cm5zIG5vbi12b2lkLgotICAgICAgICAgICAgICAoc3RhdGljX2Nh
c3Q8Rm4mJj4oZm4pKHN0YXRpY19jYXN0PFRoaXMmJj4oZXgpLnZhbHVlKCkpLCB1bml0KSksCi0g
ICAgICAgICAgc3RhdGljX2Nhc3Q8Rm5zJiY+KGZucykuLi4pOwotICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChzdGF0aWNfY2FzdDxUaGlzJiY+KGV4KS5lcnJvcigpKTsKLSAgfQotCi0gIHRlbXBs
YXRlIDwKLSAgICAgIGNsYXNzIFRoaXMsCi0gICAgICBjbGFzcyBZZXMsCi0gICAgICBjbGFzcyBO
bywKLSAgICAgIGNsYXNzIFJldCA9IGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxZZXM+KCkoc3RkOjpk
ZWNsdmFsPFRoaXM+KCkudmFsdWUoKSkpLAotICAgICAgY2xhc3MgRXJyID0gZGVjbHR5cGUoc3Rk
OjpkZWNsdmFsPE5vPigpKHN0ZDo6ZGVjbHZhbDxUaGlzPigpLmVycm9yKCkpKQotICAgICAgICAg
IEZPTExZX1JFUVVJUkVTX1RSQUlMSU5HKCFzdGQ6OmlzX3ZvaWQ8RXJyPjo6dmFsdWUpPgotICBz
dGF0aWMgUmV0IHRoZW5PclRocm93XyhUaGlzJiYgZXgsIFllcyYmIHllcywgTm8mJiBubykgewot
ICAgIGlmIChMSUtFTFkoZXgud2hpY2hfID09IGV4cGVjdGVkX2RldGFpbDo6V2hpY2g6OmVWYWx1
ZSkpCi0gICAgICByZXR1cm4gUmV0KHN0YXRpY19jYXN0PFllcyYmPih5ZXMpKHN0YXRpY19jYXN0
PFRoaXMmJj4oZXgpLnZhbHVlKCkpKTsKLSAgICB0aHJvdyBzdGF0aWNfY2FzdDxObyYmPihubyko
c3RhdGljX2Nhc3Q8VGhpcyYmPihleCkuZXJyb3IoKSk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Ci0g
ICAgICBjbGFzcyBUaGlzLAotICAgICAgY2xhc3MgWWVzLAotICAgICAgY2xhc3MgTm8sCi0gICAg
ICBjbGFzcyBSZXQgPSBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8WWVzPigpKHN0ZDo6ZGVjbHZhbDxU
aGlzPigpLnZhbHVlKCkpKSwKLSAgICAgIGNsYXNzIEVyciA9IGRlY2x0eXBlKHN0ZDo6ZGVjbHZh
bDxObz4oKShzdGQ6OmRlY2x2YWw8VGhpcyY+KCkuZXJyb3IoKSkpCi0gICAgICAgICAgRk9MTFlf
UkVRVUlSRVNfVFJBSUxJTkcoc3RkOjppc192b2lkPEVycj46OnZhbHVlKT4KLSAgc3RhdGljIFJl
dCB0aGVuT3JUaHJvd18oVGhpcyYmIGV4LCBZZXMmJiB5ZXMsIE5vJiYgbm8pIHsKLSAgICBpZiAo
TElLRUxZKGV4LndoaWNoXyA9PSBleHBlY3RlZF9kZXRhaWw6OldoaWNoOjplVmFsdWUpKQotICAg
ICAgcmV0dXJuIFJldChzdGF0aWNfY2FzdDxZZXMmJj4oeWVzKShzdGF0aWNfY2FzdDxUaGlzJiY+
KGV4KS52YWx1ZSgpKSk7Ci0gICAgc3RhdGljX2Nhc3Q8Tm8mJj4obm8pKGV4LmVycm9yKCkpOwot
ICAgIHRocm93IHR5cGVuYW1lIFVuZXhwZWN0ZWQ8RXhwZWN0ZWRFcnJvclR5cGU8VGhpcz4+OjpN
YWtlQmFkRXhwZWN0ZWRBY2Nlc3MoKSgKLSAgICAgICAgc3RhdGljX2Nhc3Q8VGhpcyYmPihleCku
ZXJyb3IoKSk7Ci0gIH0KLSAgRk9MTFlfUE9QX1dBUk5JTkcKLX07Ci19Ci0vKiB1c2luZyBvdmVy
cmlkZSAqLyB1c2luZyBleHBlY3RlZF9kZXRhaWxfRXhwZWN0ZWRIZWxwZXI6OkV4cGVjdGVkSGVs
cGVyOwotCi1zdHJ1Y3QgVW5leHBlY3RlZFRhZyB7fTsKLQotfSAvLyBuYW1lc3BhY2UgZXhwZWN0
ZWRfZGV0YWlsCi0KLXVzaW5nIHVuZXhwZWN0ZWRfdCA9Ci0gICAgZXhwZWN0ZWRfZGV0YWlsOjpV
bmV4cGVjdGVkVGFnICgmKShleHBlY3RlZF9kZXRhaWw6OlVuZXhwZWN0ZWRUYWcpOwotCi1pbmxp
bmUgZXhwZWN0ZWRfZGV0YWlsOjpVbmV4cGVjdGVkVGFnIHVuZXhwZWN0ZWQoCi0gICAgZXhwZWN0
ZWRfZGV0YWlsOjpVbmV4cGVjdGVkVGFnID0ge30pIHsKLSAgcmV0dXJuIHt9OwotfQotCi0vKioK
LSAqIEFuIGV4Y2VwdGlvbiB0eXBlIHRocm93biBieSBFeHBlY3RlZCBvbiBjYXRhc3Ryb3BoaWMg
bG9naWMgZXJyb3JzLgotICovCi1jbGFzcyBCYWRFeHBlY3RlZEFjY2VzcyA6IHB1YmxpYyBzdGQ6
OmxvZ2ljX2Vycm9yIHsKLSBwdWJsaWM6Ci0gIEJhZEV4cGVjdGVkQWNjZXNzKCkgOiBzdGQ6Omxv
Z2ljX2Vycm9yKCJiYWQgRXhwZWN0ZWQgYWNjZXNzIikge30KLX07Ci0KLS8qKgotICogVW5leHBl
Y3RlZCAtIGEgaGVscGVyIHR5cGUgdXNlZCB0byBkaXNhbWJpZ3VhdGUgdGhlIGNvbnN0cnVjdGlv
biBvZgotICogRXhwZWN0ZWQgb2JqZWN0cyBpbiB0aGUgZXJyb3Igc3RhdGUuCi0gKi8KLXRlbXBs
YXRlIDxjbGFzcyBFcnJvcj4KLWNsYXNzIFVuZXhwZWN0ZWQgZmluYWwgewotICB0ZW1wbGF0ZSA8
Y2xhc3MgRT4KLSAgZnJpZW5kIGNsYXNzIFVuZXhwZWN0ZWQ7Ci0gIHRlbXBsYXRlIDxjbGFzcyBW
LCBjbGFzcyBFPgotICBmcmllbmQgY2xhc3MgRXhwZWN0ZWQ7Ci0gIGZyaWVuZCBzdHJ1Y3QgZXhw
ZWN0ZWRfZGV0YWlsOjpFeHBlY3RlZEhlbHBlcjsKLQotIHB1YmxpYzoKLSAgLyoqCi0gICAqIFVu
ZXhwZWN0ZWQ6OkJhZEV4cGVjdGVkQWNjZXNzIC0gQW4gZXhjZXB0aW9uIHR5cGUgdGhyb3duIGJ5
IEV4cGVjdGVkCi0gICAqIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gYWNjZXNzIHRoZSBuZXN0ZWQg
dmFsdWUgYnV0IHRoZSBFeHBlY3RlZCBvYmplY3QgaXMKLSAgICogYWN0dWFsbHkgc3RvcmluZyBh
biBlcnJvciBjb2RlLgotICAgKi8KLSAgY2xhc3MgQmFkRXhwZWN0ZWRBY2Nlc3MgOiBwdWJsaWMg
Zm9sbHk6OkJhZEV4cGVjdGVkQWNjZXNzIHsKLSAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBCYWRF
eHBlY3RlZEFjY2VzcyhFcnJvciBlcnIpCi0gICAgICAgIDogZm9sbHk6OkJhZEV4cGVjdGVkQWNj
ZXNze30sIGVycm9yXyhzdGQ6Om1vdmUoZXJyKSkge30KLSAgICAvKioKLSAgICAgKiBUaGUgZXJy
b3IgY29kZSB0aGF0IHdhcyBoZWxkIGJ5IHRoZSBFeHBlY3RlZCBvYmplY3Qgd2hlbiB0aGUgdXNl
cgotICAgICAqIGVycm9uZW91c2x5IHJlcXVlc3RlZCB0aGUgdmFsdWUuCi0gICAgICovCi0gICAg
RXJyb3IgZXJyb3IoKSBjb25zdCB7Ci0gICAgICByZXR1cm4gZXJyb3JfOwotICAgIH0KLQotICAg
cHJpdmF0ZToKLSAgICBFcnJvciBlcnJvcl87Ci0gIH07Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVj
dG9ycwotICAgKi8KLSAgVW5leHBlY3RlZCgpID0gZGVmYXVsdDsKLSAgVW5leHBlY3RlZChjb25z
dCBVbmV4cGVjdGVkJikgPSBkZWZhdWx0OwotICBVbmV4cGVjdGVkKFVuZXhwZWN0ZWQmJikgPSBk
ZWZhdWx0OwotICBVbmV4cGVjdGVkJiBvcGVyYXRvcj0oY29uc3QgVW5leHBlY3RlZCYpID0gZGVm
YXVsdDsKLSAgVW5leHBlY3RlZCYgb3BlcmF0b3I9KFVuZXhwZWN0ZWQmJikgPSBkZWZhdWx0Owot
ICBjb25zdGV4cHIgLyogaW1wbGljaXQgKi8gVW5leHBlY3RlZChjb25zdCBFcnJvciYgZXJyKSA6
IGVycm9yXyhlcnIpIHt9Ci0gIGNvbnN0ZXhwciAvKiBpbXBsaWNpdCAqLyBVbmV4cGVjdGVkKEVy
cm9yJiYgZXJyKSA6IGVycm9yXyhzdGQ6Om1vdmUoZXJyKSkge30KLQotICB0ZW1wbGF0ZSA8Y2xh
c3MgT3RoZXIgRk9MTFlfUkVRVUlSRVNfVFJBSUxJTkcoCi0gICAgICBzdGQ6OmlzX2NvbnN0cnVj
dGlibGU8RXJyb3IsIE90aGVyJiY+Ojp2YWx1ZSk+Ci0gIGNvbnN0ZXhwciAvKiBpbXBsaWNpdCAq
LyBVbmV4cGVjdGVkKFVuZXhwZWN0ZWQ8T3RoZXI+IHRoYXQpCi0gICAgICA6IGVycm9yXyhzdGQ6
Om1vdmUodGhhdC5lcnJvcigpKSkge30KLQotICAvKioKLSAgICogQXNzaWdubWVudAotICAgKi8K
LSAgdGVtcGxhdGUgPGNsYXNzIE90aGVyIEZPTExZX1JFUVVJUkVTX1RSQUlMSU5HKAotICAgICAg
c3RkOjppc19hc3NpZ25hYmxlPEVycm9yJiwgT3RoZXImJj46OnZhbHVlKT4KLSAgVW5leHBlY3Rl
ZCYgb3BlcmF0b3I9KFVuZXhwZWN0ZWQ8T3RoZXI+IHRoYXQpIHsKLSAgICBlcnJvcl8gPSBzdGQ6
Om1vdmUodGhhdC5lcnJvcigpKTsKLSAgfQotCi0gIC8qKgotICAgKiBPYnNlcnZlcnMKLSAgICov
Ci0gIEVycm9yJiBlcnJvcigpICYgewotICAgIHJldHVybiBlcnJvcl87Ci0gIH0KLSAgY29uc3Qg
RXJyb3ImIGVycm9yKCkgY29uc3QmIHsKLSAgICByZXR1cm4gZXJyb3JfOwotICB9Ci0gIEVycm9y
JiYgZXJyb3IoKSAmJiB7Ci0gICAgcmV0dXJuIHN0ZDo6bW92ZShlcnJvcl8pOwotICB9Ci0KLSBw
cml2YXRlOgotICBzdHJ1Y3QgTWFrZUJhZEV4cGVjdGVkQWNjZXNzIHsKLSAgICB0ZW1wbGF0ZSA8
Y2xhc3MgRT4KLSAgICBCYWRFeHBlY3RlZEFjY2VzcyBvcGVyYXRvcigpKEUmJiBlcnIpIGNvbnN0
IHsKLSAgICAgIHJldHVybiBCYWRFeHBlY3RlZEFjY2VzcyhzdGF0aWNfY2FzdDxFJiY+KGVycikp
OwotICAgIH0KLSAgfTsKLQotICBFcnJvciBlcnJvcl87Ci19OwotCi10ZW1wbGF0ZSA8Ci0gICAg
Y2xhc3MgRXJyb3IgRk9MTFlfUkVRVUlSRVNfVFJBSUxJTkcoSXNFcXVhbGl0eUNvbXBhcmFibGU8
RXJyb3I+Ojp2YWx1ZSk+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KAotICAgIGNvbnN0IFVuZXhw
ZWN0ZWQ8RXJyb3I+JiBsaHMsCi0gICAgY29uc3QgVW5leHBlY3RlZDxFcnJvcj4mIHJocykgewot
ICByZXR1cm4gbGhzLmVycm9yKCkgPT0gcmhzLmVycm9yKCk7Ci19Ci0KLXRlbXBsYXRlIDwKLSAg
ICBjbGFzcyBFcnJvciBGT0xMWV9SRVFVSVJFU19UUkFJTElORyhJc0VxdWFsaXR5Q29tcGFyYWJs
ZTxFcnJvcj46OnZhbHVlKT4KLWlubGluZSBib29sIG9wZXJhdG9yIT0oCi0gICAgY29uc3QgVW5l
eHBlY3RlZDxFcnJvcj4mIGxocywKLSAgICBjb25zdCBVbmV4cGVjdGVkPEVycm9yPiYgcmhzKSB7
Ci0gIHJldHVybiAhKGxocyA9PSByaHMpOwotfQotCi0vKioKLSAqIEZvciBjb25zdHJ1Y3Rpbmcg
YW4gVW5leHBlY3RlZCBvYmplY3QgZnJvbSBhbiBlcnJvciBjb2RlLiBVbmV4cGVjdGVkIG9iamVj
dHMKLSAqIGFyZSBpbXBsaWNpdGx5IGNvbnZlcnRpYmxlIHRvIEV4cGVjdGVkIG9iamVjdCBpbiB0
aGUgZXJyb3Igc3RhdGUuIFVzYWdlIGlzCi0gKiBhcyBmb2xsb3dzOgotICoKLSAqIGVudW0gY2xh
c3MgTXlFcnJvckNvZGUgeyBCQURfRVJST1IsIFdPUlNFX0VSUk9SIH07Ci0gKiBFeHBlY3RlZDxp
bnQsIE15RXJyb3JDb2RlPiBteUFQSSgpIHsKLSAqICAgaW50IGkgPSAvLyAuLi47Ci0gKiAgIHJl
dHVybiBpID8gbWFrZUV4cGVjdGVkPE15RXJyb3JDb2RlPihpKQotICogICAgICAgICAgICA6IG1h
a2VVbmV4cGVjdGVkKE15RXJyb3JDb2RlOjpCQURfRVJST1IpOwotICogfQotICovCi10ZW1wbGF0
ZSA8Y2xhc3MgRXJyb3I+Ci1jb25zdGV4cHIgVW5leHBlY3RlZDx0eXBlbmFtZSBzdGQ6OmRlY2F5
PEVycm9yPjo6dHlwZT4gbWFrZVVuZXhwZWN0ZWQoCi0gICAgRXJyb3ImJiBlcnIpIHsKLSAgcmV0
dXJuIFVuZXhwZWN0ZWQ8dHlwZW5hbWUgc3RkOjpkZWNheTxFcnJvcj46OnR5cGU+ewotICAgICAg
c3RhdGljX2Nhc3Q8RXJyb3ImJj4oZXJyKX07Ci19Ci0KLS8qKgotICogRXhwZWN0ZWQgLSBGb3Ig
aG9sZGluZyBhIHZhbHVlIG9yIGFuIGVycm9yLiBVc2VmdWwgYXMgYW4gYWx0ZXJuYXRpdmUgdG8K
LSAqIGV4Y2VwdGlvbnMsIGZvciBBUElzIHdoZXJlIHRocm93aW5nIG9uIGZhaWx1cmUgd291bGQg
YmUgdG9vIGV4cGVuc2l2ZS4KLSAqCi0gKiBFeHBlY3RlZDxWYWx1ZSwgRXJyb3I+IGlzIGEgdmFy
aWFudCBvdmVyIHRoZSB0eXBlcyBWYWx1ZSBhbmQgRXJyb3IuCi0gKgotICogRXhwZWN0ZWQgZG9l
cyBub3Qgb2ZmZXIgc3VwcG9ydCBmb3IgcmVmZXJlbmNlcy4gVXNlCi0gKiBFeHBlY3RlZDxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFQ+LCBFcnJvcj4gaWYgeW91ciBBUEkgbmVlZHMgdG8gcmV0dXJu
IGEKLSAqIHJlZmVyZW5jZSBvciBhbiBlcnJvci4KLSAqCi0gKiBFeHBlY3RlZCBvZmZlcnMgYSBj
b250aW51YXRpb24tYmFzZWQgaW50ZXJmYWNlIHRvIHJlZHVjZSB0aGUgYm9pbGVycGxhdGUKLSAq
IG9mIGNoZWNraW5nIGVycm9yIGNvZGVzLiBUaGUgRXhwZWN0ZWQ6OnRoZW4gbWVtYmVyIGZ1bmN0
aW9uIHRha2VzIGEgbGFtYmRhCi0gKiB0aGF0IGlzIHRvIGV4ZWN1dGUgc2hvdWxkIHRoZSBFeHBl
Y3RlZCBvYmplY3QgY29udGFpbiBhIHZhbHVlLiBUaGUgcmV0dXJuCi0gKiB2YWx1ZSBvZiB0aGUg
bGFtYmRhIGlzIHdyYXBwZWQgaW4gYW4gRXhwZWN0ZWQgYW5kIHJldHVybmVkLiBJZiB0aGUgbGFt
YmRhIGlzCi0gKiBub3QgZXhlY3V0ZWQgYmVjYXVzZSB0aGUgRXhwZWN0ZWQgY29udGFpbnMgYW4g
ZXJyb3IsIHRoZSBlcnJvciBpcyByZXR1cm5lZAotICogaW1tZWRpYXRlbHkgaW4gYSBuZXcgRXhw
ZWN0ZWQgb2JqZWN0LgotICoKLSAqIEV4cGVjdGVkPGludCwgRXJyb3I+IGZ1bmNUaGVGaXJzdCgp
OwotICogRXhwZWN0ZWQ8c3RkOjpzdHJpbmcsIEVycm9yPiBmdW5jVGhlU2Vjb25kKCkgewotICog
ICByZXR1cm4gZnVuY1RoZUZpcnN0KCkudGhlbihbXShpbnQgaSkgeyByZXR1cm4gc3RkOjp0b19z
dHJpbmcoaSk7IH0pOwotICogfQotICoKLSAqIFRoZSBhYm92ZSBsaW5lIG9mIGNvZGUgY291bGQg
bW9yZSB2ZXJib3NlbHkgd3JpdHRlbiBhczoKLSAqCi0gKiBFeHBlY3RlZDxzdGQ6OnN0cmluZywg
RXJyb3I+IGZ1bmNUaGVTZWNvbmQoKSB7Ci0gKiAgIGlmIChhdXRvIGV4ID0gZnVuY1RoZUZpcnN0
KCkpIHsKLSAqICAgICByZXR1cm4gc3RkOjp0b19zdHJpbmcoKmV4KTsKLSAqICAgfQotICogICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXguZXJyb3IoKSk7Ci0gKiB9Ci0gKgotICogQ29udGludWF0
aW9ucyBjYW4gY2hhaW4sIGxpa2U6Ci0gKgotICogRXhwZWN0ZWQ8RCwgRXJyb3I+IG1heWJlRCA9
IHNvbWVGdW5jKCkKLSAqICAgICAudGhlbihbXShBIGEpe3JldHVybiBCKGEpO30pCi0gKiAgICAg
LnRoZW4oW10oQiBiKXtyZXR1cm4gQyhiKTt9KQotICogICAgIC50aGVuKFtdKEMgYyl7cmV0dXJu
IEQoYyk7fSk7Ci0gKgotICogVG8gYXZvaWQgdGhlIHJlZHVuZGFudCBlcnJvciBjaGVja2luZyB0
aGF0IHdvdWxkIGhhcHBlbiBpZiBhIGNhbGwgYXQgdGhlCi0gKiBmcm9udCBvZiB0aGUgY2hhaW4g
cmV0dXJucyBhbiBlcnJvciwgdGhlc2UgY2FsbCBjaGFpbnMgY2FuIGJlIGNvbGxhcGVkIGludG8K
LSAqIGEgc2luZ2xlIGNhbGwgdG8gLnRoZW46Ci0gKgotICogRXhwZWN0ZWQ8RCwgRXJyb3I+IG1h
eWJlRCA9IHNvbWVGdW5jKCkKLSAqICAgICAudGhlbihbXShBIGEpe3JldHVybiBCKGEpO30sCi0g
KiAgICAgICAgICAgW10oQiBiKXtyZXR1cm4gQyhiKTt9LAotICogICAgICAgICAgIFtdKEMgYyl7
cmV0dXJuIEQoYyk7fSk7Ci0gKgotICogVGhlIHJlc3VsdCBvZiAudGhlbigpIGlzIHdyYXBwZWQg
aW50byBFeHBlY3RlZDwgfiwgRXJyb3IgPiBpZiBpdCBpc24ndAotICogb2YgdGhhdCBmb3JtIGFs
cmVhZHkuIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY29kZToKLSAqCi0gKiBleHRlcm4gRXhwZWN0
ZWQ8c3RkOjpzdHJpbmcsIEVycm9yPiByZWFkTGluZUZyb21JTygpOwotICogZXh0ZXJuIEV4cGVj
dGVkPGludCwgRXJyb3I+IHBhcnNlSW50KHN0ZDo6c3RyaW5nKTsKLSAqIGV4dGVybiBpbnQgaW5j
cmVtZW50KGludCk7Ci0gKgotICogRXhwZWN0ZWQ8aW50LCBFcnJvcj4geCA9IHJlYWRMaW5lRnJv
bUlPKCkudGhlbihwYXJzZUludCkudGhlbihpbmNyZW1lbnQpOwotICoKLSAqIEZyb20gdGhlIGNv
ZGUgYWJvdmUsIHdlIHNlZSB0aGF0IC50aGVuKCkgd29ya3MgYm90aCB3aXRoIGZ1bmN0aW9ucyB0
aGF0Ci0gKiByZXR1cm4gYW4gRXhwZWN0ZWQ8IH4sIEVycm9yID4gKGxpa2UgcGFyc2VJbnQpIGFu
ZCB3aXRoIG9uZXMgdGhhdCByZXR1cm4KLSAqIGEgcGxhaW4gdmFsdWUgKGxpa2UgaW5jcmVtZW50
KS4gSW4gdGhlIGNhc2Ugb2YgcGFyc2VJbnQsIC50aGVuKCkgcmV0dXJucwotICogdGhlIHJlc3Vs
dCBvZiBwYXJzZUludCBhcy1pcy4gSW4gdGhlIGNhc2Ugb2YgaW5jcmVtZW50LCBpdCB3cmFwcyB0
aGUgaW50Ci0gKiB0aGF0IGluY3JlbWVudCByZXR1cm5zIGludG8gYW4gRXhwZWN0ZWQ8IGludCwg
RXJyb3IgPi4KLSAqCi0gKiBTb21ldGltZXMgd2hlbiB1c2luZyBhIGNvbnRpbnVhdGlvbiB5b3Ug
d291bGQgcHJlZmVyIGFuIGV4Y2VwdGlvbiB0byBiZQotICogdGhyb3duIGZvciBhIHZhbHVlLWxl
c3MgRXhwZWN0ZWQuIEZvciB0aGF0IHlvdSBjYW4gdXNlIC50aGVuT3JUaHJvdywgYXMKLSAqIGZv
bGxvd3M6Ci0gKgotICogQiBiID0gc29tZUZ1bmMoKQotICogICAgIC50aGVuT3JUaHJvdyhbXShB
IGEpe3JldHVybiBCKGEpO30pOwotICoKLSAqIFRoZSBhYm92ZSBjYWxsIHRvIHRoZW5PclRocm93
IHdpbGwgaW52b2tlIHRoZSBsYW1iZGEgaWYgdGhlIEV4cGVjdGVkIHJldHVybmVkCi0gKiBieSBz
b21lRnVuYygpIGNvbnRhaW5zIGEgdmFsdWUuIE90aGVyd2lzZSwgaXQgd2lsbCB0aHJvdyBhbiBl
eGNlcHRpb24gb2YgdHlwZQotICogVW5leHBlY3RlZDxFcnJvcj46OkJhZEV4cGVjdGVkQWNjZXNz
LiBJZiB5b3UgcHJlZmVyIGl0IHRocm93IGFuIGV4Y2VwdGlvbiBvZgotICogYSBkaWZmZXJlbnQg
dHlwZSwgeW91IGNhbiBwYXNzIGEgc2Vjb25kIGxhbWJkYSB0byB0aGVuT3JUaHJvdzoKLSAqCi0g
KiBCIGIgPSBzb21lRnVuYygpCi0gKiAgICAgLnRoZW5PclRocm93KFtdKEEgYSl7cmV0dXJuIEIo
YSk7fSwKLSAqICAgICAgICAgICAgICAgICAgW10oRXJyb3IgZSkge3Rocm93IE15RXhjZXB0aW9u
KGUpO30pOwotICoKLSAqIExpa2UgQysrMTcncyBzdGQ6OnZhcmlhbnQsIEV4cGVjdGVkIG9mZmVy
cyB0aGUgYWxtb3N0LW5ldmVyLWVtcHR5IGd1YXJhbnRlZTsKLSAqIHRoYXQgaXMsIGFuIEV4cGVj
dGVkPFZhbHVlLCBFcnJvcj4gYWxtb3N0IGFsd2F5cyBjb250YWlucyBlaXRoZXIgYSBWYWx1ZSBv
cgotICogYW5kIEVycm9yLiBQYXJ0aWFsbHktZm9ybWVkIEV4cGVjdGVkIG9iamVjdHMgb2NjdXIg
d2hlbiBhbiBhc3NpZ25tZW50IHRvCi0gKiBhbiBFeHBlY3RlZCBvYmplY3QgdGhhdCB3b3VsZCBj
aGFuZ2UgdGhlIHR5cGUgb2YgdGhlIGNvbnRhaW5lZCBvYmplY3QgKFZhbHVlLQotICogdG8tRXJy
b3Igb3IgdmljZSB2ZXJzYSkgdGhyb3dzLiBUcnlpbmcgdG8gYWNjZXNzIGVpdGhlciB0aGUgY29u
dGFpbmVkIHZhbHVlCi0gKiBvciBlcnJvciBvYmplY3QgY2F1c2VzIEV4cGVjdGVkIHRvIHRocm93
IGZvbGx5OjpCYWRFeHBlY3RlZEFjY2Vzcy4KLSAqCi0gKiBFeHBlY3RlZCBtb2RlbHMgT3B0aW9u
YWxQb2ludGVlLCBzbyBjYWxsaW5nICdnZXRfcG9pbnRlcihleCknIHdpbGwgcmV0dXJuIGEKLSAq
IHBvaW50ZXIgdG8gbnVsbHB0ciBpZiB0aGUgJ2V4JyBpcyBpbiB0aGUgZXJyb3Igc3RhdGUsIGFu
ZCBhIHBvaW50ZXIgdG8gdGhlCi0gKiB2YWx1ZSBvdGhlcndpc2U6Ci0gKgotICogIEV4cGVjdGVk
PGludCwgRXJyb3I+IG1heWJlSW50ID0gLi4uOwotICogIGlmIChpbnQqIHYgPSBnZXRfcG9pbnRl
cihtYXliZUludCkpIHsKLSAqICAgIGNvdXQgPDwgKnYgPDwgZW5kbDsKLSAqICB9Ci0gKi8KLXRl
bXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgRXJyb3I+Ci1jbGFzcyBFeHBlY3RlZCBmaW5hbCA6
IGV4cGVjdGVkX2RldGFpbDo6RXhwZWN0ZWRTdG9yYWdlPFZhbHVlLCBFcnJvcj4gewotICB0ZW1w
bGF0ZSA8Y2xhc3MsIGNsYXNzPgotICBmcmllbmQgY2xhc3MgRXhwZWN0ZWQ7Ci0gIHRlbXBsYXRl
IDxjbGFzcywgY2xhc3MsIGV4cGVjdGVkX2RldGFpbDo6U3RvcmFnZVR5cGU+Ci0gIGZyaWVuZCBz
dHJ1Y3QgZXhwZWN0ZWRfZGV0YWlsOjpFeHBlY3RlZFN0b3JhZ2U7Ci0gIGZyaWVuZCBzdHJ1Y3Qg
ZXhwZWN0ZWRfZGV0YWlsOjpFeHBlY3RlZEhlbHBlcjsKLSAgdXNpbmcgQmFzZSA9IGV4cGVjdGVk
X2RldGFpbDo6RXhwZWN0ZWRTdG9yYWdlPFZhbHVlLCBFcnJvcj47Ci0gIHVzaW5nIE1ha2VCYWRF
eHBlY3RlZEFjY2VzcyA9Ci0gICAgICB0eXBlbmFtZSBVbmV4cGVjdGVkPEVycm9yPjo6TWFrZUJh
ZEV4cGVjdGVkQWNjZXNzOwotICBCYXNlJiBiYXNlKCkgJiB7Ci0gICAgcmV0dXJuICp0aGlzOwot
ICB9Ci0gIGNvbnN0IEJhc2UmIGJhc2UoKSBjb25zdCYgewotICAgIHJldHVybiAqdGhpczsKLSAg
fQotICBCYXNlJiYgYmFzZSgpICYmIHsKLSAgICByZXR1cm4gc3RkOjptb3ZlKCp0aGlzKTsKLSAg
fQotCi0gcHVibGljOgotICB1c2luZyB2YWx1ZV90eXBlID0gVmFsdWU7Ci0gIHVzaW5nIGVycm9y
X3R5cGUgPSBFcnJvcjsKLSAgdXNpbmcgSXNUcml2aWFsbHlDb3B5YWJsZSA9IHR5cGVuYW1lIGV4
cGVjdGVkX2RldGFpbDo6Ci0gICAgICBTdHJpY3RBbGxPZjxJc1RyaXZpYWxseUNvcHlhYmxlLCBW
YWx1ZSwgRXJyb3I+Ojp0eXBlOwotCi0gIHRlbXBsYXRlIDxjbGFzcyBVPgotICB1c2luZyByZWJp
bmQgPSBFeHBlY3RlZDxVLCBFcnJvcj47Ci0KLSAgc3RhdGljX2Fzc2VydCgKLSAgICAgICFzdGQ6
OmlzX3JlZmVyZW5jZTxWYWx1ZT46OnZhbHVlLAotICAgICAgIkV4cGVjdGVkIG1heSBub3QgYmUg
dXNlZCB3aXRoIHJlZmVyZW5jZSB0eXBlcyIpOwotICBzdGF0aWNfYXNzZXJ0KAotICAgICAgIXN0
ZDo6aXNfYWJzdHJhY3Q8VmFsdWU+Ojp2YWx1ZSwKLSAgICAgICJFeHBlY3RlZCBtYXkgbm90IGJl
IHVzZWQgd2l0aCBhYnN0cmFjdCB0eXBlcyIpOwotCi0gIC8qCi0gICAqIENvbnN0cnVjdG9ycwot
ICAgKi8KLSAgdGVtcGxhdGUgPGNsYXNzIEIgPSBCYXNlLCBjbGFzcyA9IGRlY2x0eXBlKEJ7fSk+
Ci0gIEV4cGVjdGVkKCkgbm9leGNlcHQobm9leGNlcHQoQnt9KSkgOiBCYXNle30ge30KLSAgRXhw
ZWN0ZWQoY29uc3QgRXhwZWN0ZWQmIHRoYXQpID0gZGVmYXVsdDsKLSAgRXhwZWN0ZWQoRXhwZWN0
ZWQmJiB0aGF0KSA9IGRlZmF1bHQ7Ci0KLSAgdGVtcGxhdGUgPAotICAgICAgY2xhc3MgViwKLSAg
ICAgIGNsYXNzIEUgRk9MTFlfUkVRVUlSRVNfVFJBSUxJTkcoCi0gICAgICAgICAgIXN0ZDo6aXNf
c2FtZTxFeHBlY3RlZDxWLCBFPiwgRXhwZWN0ZWQ+Ojp2YWx1ZSAmJgotICAgICAgICAgIHN0ZDo6
aXNfY29uc3RydWN0aWJsZTxWYWx1ZSwgViYmPjo6dmFsdWUgJiYKLSAgICAgICAgICBzdGQ6Omlz
X2NvbnN0cnVjdGlibGU8RXJyb3IsIEUmJj46OnZhbHVlKT4KLSAgRXhwZWN0ZWQoRXhwZWN0ZWQ8
ViwgRT4gdGhhdCkgOiBCYXNle2V4cGVjdGVkX2RldGFpbDo6RW1wdHlUYWd7fX0gewotICAgICp0
aGlzID0gc3RkOjptb3ZlKHRoYXQpOwotICB9Ci0KLSAgRk9MTFlfUkVRVUlSRVMoc3RkOjppc19j
b3B5X2NvbnN0cnVjdGlibGU8VmFsdWU+Ojp2YWx1ZSkKLSAgY29uc3RleHByIC8qIGltcGxpY2l0
ICovIEV4cGVjdGVkKGNvbnN0IFZhbHVlJiB2YWwpIG5vZXhjZXB0KAotICAgICAgbm9leGNlcHQo
VmFsdWUodmFsKSkpCi0gICAgICA6IEJhc2V7ZXhwZWN0ZWRfZGV0YWlsOjpWYWx1ZVRhZ3t9LCB2
YWx9IHt9Ci0KLSAgRk9MTFlfUkVRVUlSRVMoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8VmFs
dWU+Ojp2YWx1ZSkKLSAgY29uc3RleHByIC8qIGltcGxpY2l0ICovIEV4cGVjdGVkKFZhbHVlJiYg
dmFsKSBub2V4Y2VwdCgKLSAgICAgIG5vZXhjZXB0KFZhbHVlKHN0ZDo6bW92ZSh2YWwpKSkpCi0g
ICAgICA6IEJhc2V7ZXhwZWN0ZWRfZGV0YWlsOjpWYWx1ZVRhZ3t9LCBzdGQ6Om1vdmUodmFsKX0g
e30KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVCBGT0xMWV9SRVFVSVJFU19UUkFJTElORygKLSAgICAg
IHN0ZDo6aXNfY29udmVydGlibGU8VCwgVmFsdWU+Ojp2YWx1ZSAmJgotICAgICAgIXN0ZDo6aXNf
Y29udmVydGlibGU8VCwgRXJyb3I+Ojp2YWx1ZSk+Ci0gIGNvbnN0ZXhwciAvKiBpbXBsaWNpdCAq
LyBFeHBlY3RlZChUJiYgdmFsKSBub2V4Y2VwdCgKLSAgICAgIG5vZXhjZXB0KFZhbHVlKHN0YXRp
Y19jYXN0PFQmJj4odmFsKSkpKQotICAgICAgOiBCYXNle2V4cGVjdGVkX2RldGFpbDo6VmFsdWVU
YWd7fSwgc3RhdGljX2Nhc3Q8VCYmPih2YWwpfSB7fQotCi0gIHRlbXBsYXRlIDxjbGFzcy4uLiBU
cyBGT0xMWV9SRVFVSVJFU19UUkFJTElORygKLSAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxW
YWx1ZSwgVHMmJi4uLj46OnZhbHVlKT4KLSAgZXhwbGljaXQgY29uc3RleHByIEV4cGVjdGVkKGlu
X3BsYWNlX3QsIFRzJiYuLi4gdHMpIG5vZXhjZXB0KAotICAgICAgbm9leGNlcHQoVmFsdWUoc3Rk
OjpkZWNsdmFsPFRzPigpLi4uKSkpCi0gICAgICA6IEJhc2V7ZXhwZWN0ZWRfZGV0YWlsOjpWYWx1
ZVRhZ3t9LCBzdGF0aWNfY2FzdDxUcyYmPih0cykuLi59IHt9Ci0KLSAgdGVtcGxhdGUgPAotICAg
ICAgY2xhc3MgVSwKLSAgICAgIGNsYXNzLi4uIFRzIEZPTExZX1JFUVVJUkVTX1RSQUlMSU5HKAot
ICAgICAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxWYWx1ZSwgc3RkOjppbml0aWFsaXplcl9s
aXN0PFU+JiwgVHMmJi4uLj46OgotICAgICAgICAgICAgICB2YWx1ZSk+Ci0gIGV4cGxpY2l0IGNv
bnN0ZXhwciBFeHBlY3RlZCgKLSAgICAgIGluX3BsYWNlX3QsCi0gICAgICBzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8VT4gaWwsCi0gICAgICBUcyYmLi4uIHRzKSBub2V4Y2VwdChub2V4Y2VwdChWYWx1
ZShzdGQ6OmRlY2x2YWw8VHM+KCkuLi4pKSkKLSAgICAgIDogQmFzZXtleHBlY3RlZF9kZXRhaWw6
OlZhbHVlVGFne30sIGlsLCBzdGF0aWNfY2FzdDxUcyYmPih0cykuLi59IHt9Ci0KLSAgLy8gSWYg
b3ZlcmxvYWQgcmVzb2x1dGlvbiBzZWxlY3RzIG9uZSBvZiB0aGVzZSBkZWxldGVkIGZ1bmN0aW9u
cywgdGhhdAotICAvLyBtZWFucyB5b3UgbmVlZCB0byB1c2UgbWFrZVVuZXhwZWN0ZWQKLSAgLyog
aW1wbGljaXQgKi8gRXhwZWN0ZWQoY29uc3QgRXJyb3ImKSA9IGRlbGV0ZTsKLSAgLyogaW1wbGlj
aXQgKi8gRXhwZWN0ZWQoRXJyb3ImJikgPSBkZWxldGU7Ci0KLSAgRk9MTFlfUkVRVUlSRVMoc3Rk
Ojppc19jb3B5X2NvbnN0cnVjdGlibGU8RXJyb3I+Ojp2YWx1ZSkKLSAgY29uc3RleHByIEV4cGVj
dGVkKHVuZXhwZWN0ZWRfdCwgY29uc3QgRXJyb3ImIGVycikgbm9leGNlcHQoCi0gICAgICBub2V4
Y2VwdChFcnJvcihlcnIpKSkKLSAgICAgIDogQmFzZXtleHBlY3RlZF9kZXRhaWw6OkVycm9yVGFn
e30sIGVycn0ge30KLQotICBGT0xMWV9SRVFVSVJFUyhzdGQ6OmlzX21vdmVfY29uc3RydWN0aWJs
ZTxFcnJvcj46OnZhbHVlKQotICBjb25zdGV4cHIgRXhwZWN0ZWQodW5leHBlY3RlZF90LCBFcnJv
ciYmIGVycikgbm9leGNlcHQoCi0gICAgICBub2V4Y2VwdChFcnJvcihzdGQ6Om1vdmUoZXJyKSkp
KQotICAgICAgOiBCYXNle2V4cGVjdGVkX2RldGFpbDo6RXJyb3JUYWd7fSwgc3RkOjptb3ZlKGVy
cil9IHt9Ci0KLSAgRk9MTFlfUkVRVUlSRVMoc3RkOjppc19jb3B5X2NvbnN0cnVjdGlibGU8RXJy
b3I+Ojp2YWx1ZSkKLSAgY29uc3RleHByIC8qIGltcGxpY2l0ICovIEV4cGVjdGVkKGNvbnN0IFVu
ZXhwZWN0ZWQ8RXJyb3I+JiBlcnIpIG5vZXhjZXB0KAotICAgICAgbm9leGNlcHQoRXJyb3IoZXJy
LmVycm9yKCkpKSkKLSAgICAgIDogQmFzZXtleHBlY3RlZF9kZXRhaWw6OkVycm9yVGFne30sIGVy
ci5lcnJvcigpfSB7fQotCi0gIEZPTExZX1JFUVVJUkVTKHN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3Rp
YmxlPEVycm9yPjo6dmFsdWUpCi0gIGNvbnN0ZXhwciAvKiBpbXBsaWNpdCAqLyBFeHBlY3RlZChV
bmV4cGVjdGVkPEVycm9yPiYmIGVycikgbm9leGNlcHQoCi0gICAgICBub2V4Y2VwdChFcnJvcihz
dGQ6Om1vdmUoZXJyLmVycm9yKCkpKSkpCi0gICAgICA6IEJhc2V7ZXhwZWN0ZWRfZGV0YWlsOjpF
cnJvclRhZ3t9LCBzdGQ6Om1vdmUoZXJyLmVycm9yKCkpfSB7fQotCi0gIC8qCi0gICAqIEFzc2ln
bm1lbnQgb3BlcmF0b3JzCi0gICAqLwotICBFeHBlY3RlZCYgb3BlcmF0b3I9KGNvbnN0IEV4cGVj
dGVkJiB0aGF0KSA9IGRlZmF1bHQ7Ci0gIEV4cGVjdGVkJiBvcGVyYXRvcj0oRXhwZWN0ZWQmJiB0
aGF0KSA9IGRlZmF1bHQ7Ci0KLSAgdGVtcGxhdGUgPAotICAgICAgY2xhc3MgViwKLSAgICAgIGNs
YXNzIEUgRk9MTFlfUkVRVUlSRVNfVFJBSUxJTkcoCi0gICAgICAgICAgIXN0ZDo6aXNfc2FtZTxF
eHBlY3RlZDxWLCBFPiwgRXhwZWN0ZWQ+Ojp2YWx1ZSAmJgotICAgICAgICAgIGV4cGVjdGVkX2Rl
dGFpbDo6SXNDb252ZXJ0aWJsZTxWJiYsIFZhbHVlPjo6dmFsdWUgJiYKLSAgICAgICAgICBleHBl
Y3RlZF9kZXRhaWw6OklzQ29udmVydGlibGU8RSYmLCBFcnJvcj46OnZhbHVlKT4KLSAgRXhwZWN0
ZWQmIG9wZXJhdG9yPShFeHBlY3RlZDxWLCBFPiB0aGF0KSB7Ci0gICAgdGhpcy0+YXNzaWduKHN0
ZDo6bW92ZSh0aGF0KSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgRk9MTFlfUkVRVUlS
RVMoZXhwZWN0ZWRfZGV0YWlsOjpJc0NvcHlhYmxlPFZhbHVlPjo6dmFsdWUpCi0gIEV4cGVjdGVk
JiBvcGVyYXRvcj0oY29uc3QgVmFsdWUmIHZhbCkgbm9leGNlcHQoCi0gICAgICBleHBlY3RlZF9k
ZXRhaWw6OklzTm90aHJvd0NvcHlhYmxlPFZhbHVlPjo6dmFsdWUpIHsKLSAgICB0aGlzLT5hc3Np
Z25WYWx1ZSh2YWwpOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIEZPTExZX1JFUVVJUkVT
KGV4cGVjdGVkX2RldGFpbDo6SXNNb3ZhYmxlPFZhbHVlPjo6dmFsdWUpCi0gIEV4cGVjdGVkJiBv
cGVyYXRvcj0oVmFsdWUmJiB2YWwpIG5vZXhjZXB0KAotICAgICAgZXhwZWN0ZWRfZGV0YWlsOjpJ
c05vdGhyb3dNb3ZhYmxlPFZhbHVlPjo6dmFsdWUpIHsKLSAgICB0aGlzLT5hc3NpZ25WYWx1ZShz
dGQ6Om1vdmUodmFsKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNs
YXNzIFQgRk9MTFlfUkVRVUlSRVNfVFJBSUxJTkcoCi0gICAgICBzdGQ6OmlzX2NvbnZlcnRpYmxl
PFQsIFZhbHVlPjo6dmFsdWUgJiYKLSAgICAgICFzdGQ6OmlzX2NvbnZlcnRpYmxlPFQsIEVycm9y
Pjo6dmFsdWUpPgotICBFeHBlY3RlZCYgb3BlcmF0b3I9KFQmJiB2YWwpIHsKLSAgICB0aGlzLT5h
c3NpZ25WYWx1ZShzdGF0aWNfY2FzdDxUJiY+KHZhbCkpOwotICAgIHJldHVybiAqdGhpczsKLSAg
fQotCi0gIEZPTExZX1JFUVVJUkVTKGV4cGVjdGVkX2RldGFpbDo6SXNDb3B5YWJsZTxFcnJvcj46
OnZhbHVlKQotICBFeHBlY3RlZCYgb3BlcmF0b3I9KGNvbnN0IFVuZXhwZWN0ZWQ8RXJyb3I+JiBl
cnIpIG5vZXhjZXB0KAotICAgICAgZXhwZWN0ZWRfZGV0YWlsOjpJc05vdGhyb3dDb3B5YWJsZTxF
cnJvcj46OnZhbHVlKSB7Ci0gICAgdGhpcy0+YXNzaWduRXJyb3IoZXJyLmVycm9yKCkpOwotICAg
IHJldHVybiAqdGhpczsKLSAgfQotCi0gIEZPTExZX1JFUVVJUkVTKGV4cGVjdGVkX2RldGFpbDo6
SXNNb3ZhYmxlPEVycm9yPjo6dmFsdWUpCi0gIEV4cGVjdGVkJiBvcGVyYXRvcj0oVW5leHBlY3Rl
ZDxFcnJvcj4mJiBlcnIpIG5vZXhjZXB0KAotICAgICAgZXhwZWN0ZWRfZGV0YWlsOjpJc05vdGhy
b3dNb3ZhYmxlPEVycm9yPjo6dmFsdWUpIHsKLSAgICB0aGlzLT5hc3NpZ25FcnJvcihzdGQ6Om1v
dmUoZXJyLmVycm9yKCkpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8
Y2xhc3MuLi4gVHMgRk9MTFlfUkVRVUlSRVNfVFJBSUxJTkcoCi0gICAgICBzdGQ6OmlzX2NvbnN0
cnVjdGlibGU8VmFsdWUsIFRzJiYuLi4+Ojp2YWx1ZSk+Ci0gIHZvaWQgZW1wbGFjZShUcyYmLi4u
IHRzKSB7Ci0gICAgdGhpcy0+YXNzaWduVmFsdWUoc3RhdGljX2Nhc3Q8VHMmJj4odHMpLi4uKTsK
LSAgfQotCi0gIC8qKgotICAgKiBzd2FwCi0gICAqLwotICB2b2lkIHN3YXAoRXhwZWN0ZWQmIHRo
YXQpIG5vZXhjZXB0KAotICAgICAgZXhwZWN0ZWRfZGV0YWlsOjpTdHJpY3RBbGxPZjxJc05vdGhy
b3dTd2FwcGFibGUsIFZhbHVlLCBFcnJvcj46OnZhbHVlKSB7Ci0gICAgaWYgKHRoaXMtPnVuaW5p
dGlhbGl6ZWRCeUV4Y2VwdGlvbigpIHx8IHRoYXQudW5pbml0aWFsaXplZEJ5RXhjZXB0aW9uKCkp
Ci0gICAgICB0aHJvdyBCYWRFeHBlY3RlZEFjY2VzcygpOwotICAgIHVzaW5nIHN0ZDo6c3dhcDsK
LSAgICBpZiAoKnRoaXMpIHsKLSAgICAgIGlmICh0aGF0KSB7Ci0gICAgICAgIHN3YXAodGhpcy0+
dmFsdWVfLCB0aGF0LnZhbHVlXyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBFcnJvciBlKHN0
ZDo6bW92ZSh0aGF0LmVycm9yXykpOwotICAgICAgICB0aGF0LmFzc2lnblZhbHVlKHN0ZDo6bW92
ZSh0aGlzLT52YWx1ZV8pKTsKLSAgICAgICAgdGhpcy0+YXNzaWduRXJyb3Ioc3RkOjptb3ZlKGUp
KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKCF0aGF0KSB7Ci0gICAgICAgIHN3
YXAodGhpcy0+ZXJyb3JfLCB0aGF0LmVycm9yXyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBF
cnJvciBlKHN0ZDo6bW92ZSh0aGlzLT5lcnJvcl8pKTsKLSAgICAgICAgdGhpcy0+YXNzaWduVmFs
dWUoc3RkOjptb3ZlKHRoYXQudmFsdWVfKSk7Ci0gICAgICAgIHRoYXQuYXNzaWduRXJyb3Ioc3Rk
Ojptb3ZlKGUpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBJZiBvdmVybG9hZCByZXNv
bHV0aW9uIHNlbGVjdHMgb25lIG9mIHRoZXNlIGRlbGV0ZWQgZnVuY3Rpb25zLCB0aGF0Ci0gIC8v
IG1lYW5zIHlvdSBuZWVkIHRvIHVzZSBtYWtlVW5leHBlY3RlZAotICAvKiBpbXBsaWNpdCAqLyBF
eHBlY3RlZCYgb3BlcmF0b3I9KGNvbnN0IEVycm9yJikgPSBkZWxldGU7Ci0gIC8qIGltcGxpY2l0
ICovIEV4cGVjdGVkJiBvcGVyYXRvcj0oRXJyb3ImJikgPSBkZWxldGU7Ci0KLSAgLyoqCi0gICAq
IFJlbGF0aW9uYWwgT3BlcmF0b3JzCi0gICAqLwotICB0ZW1wbGF0ZSA8Y2xhc3MgVmFsLCBjbGFz
cyBFcnI+Ci0gIGZyaWVuZCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc0VxdWFsaXR5Q29tcGFy
YWJsZTxWYWw+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKLSAgb3BlcmF0b3I9PShjb25zdCBFeHBlY3Rl
ZDxWYWwsIEVycj4mIGxocywgY29uc3QgRXhwZWN0ZWQ8VmFsLCBFcnI+JiByaHMpOwotICB0ZW1w
bGF0ZSA8Y2xhc3MgVmFsLCBjbGFzcyBFcnI+Ci0gIGZyaWVuZCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxJc0xlc3NUaGFuQ29tcGFyYWJsZTxWYWw+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKLSAgb3Bl
cmF0b3I8KGNvbnN0IEV4cGVjdGVkPFZhbCwgRXJyPiYgbGhzLCBjb25zdCBFeHBlY3RlZDxWYWws
IEVycj4mIHJocyk7Ci0KLSAgLyoKLSAgICogQWNjZXNzb3JzCi0gICAqLwotICBjb25zdGV4cHIg
Ym9vbCBoYXNWYWx1ZSgpIGNvbnN0IG5vZXhjZXB0IHsKLSAgICByZXR1cm4gZXhwZWN0ZWRfZGV0
YWlsOjpXaGljaDo6ZVZhbHVlID09IHRoaXMtPndoaWNoXzsKLSAgfQotCi0gIGNvbnN0ZXhwciBi
b29sIGhhc0Vycm9yKCkgY29uc3Qgbm9leGNlcHQgewotICAgIHJldHVybiBleHBlY3RlZF9kZXRh
aWw6OldoaWNoOjplRXJyb3IgPT0gdGhpcy0+d2hpY2hfOwotICB9Ci0KLSAgdXNpbmcgQmFzZTo6
dW5pbml0aWFsaXplZEJ5RXhjZXB0aW9uOwotCi0gIGNvbnN0IFZhbHVlJiB2YWx1ZSgpIGNvbnN0
JiB7Ci0gICAgcmVxdWlyZVZhbHVlKCk7Ci0gICAgcmV0dXJuIHRoaXMtPkJhc2U6OnZhbHVlKCk7
Ci0gIH0KLQotICBWYWx1ZSYgdmFsdWUoKSAmIHsKLSAgICByZXF1aXJlVmFsdWUoKTsKLSAgICBy
ZXR1cm4gdGhpcy0+QmFzZTo6dmFsdWUoKTsKLSAgfQotCi0gIFZhbHVlJiYgdmFsdWUoKSAmJiB7
Ci0gICAgcmVxdWlyZVZhbHVlKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bW92ZSh0aGlzLT5CYXNlOjp2
YWx1ZSgpKTsKLSAgfQotCi0gIGNvbnN0IEVycm9yJiBlcnJvcigpIGNvbnN0JiB7Ci0gICAgcmVx
dWlyZUVycm9yKCk7Ci0gICAgcmV0dXJuIHRoaXMtPkJhc2U6OmVycm9yKCk7Ci0gIH0KLQotICBF
cnJvciYgZXJyb3IoKSAmIHsKLSAgICByZXF1aXJlRXJyb3IoKTsKLSAgICByZXR1cm4gdGhpcy0+
QmFzZTo6ZXJyb3IoKTsKLSAgfQotCi0gIEVycm9yJiYgZXJyb3IoKSAmJiB7Ci0gICAgcmVxdWly
ZUVycm9yKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bW92ZSh0aGlzLT5CYXNlOjplcnJvcigpKTsKLSAg
fQotCi0gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIHZhbHVlIGlmIHNldCwgb3IgYSBnaXZlbiBk
ZWZhdWx0IGlmIG5vdC4KLSAgdGVtcGxhdGUgPGNsYXNzIFU+Ci0gIFZhbHVlIHZhbHVlX29yKFUm
JiBkZmx0KSBjb25zdCYgewotICAgIGlmIChMSUtFTFkodGhpcy0+d2hpY2hfID09IGV4cGVjdGVk
X2RldGFpbDo6V2hpY2g6OmVWYWx1ZSkpIHsKLSAgICAgIHJldHVybiB0aGlzLT52YWx1ZV87Ci0g
ICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxVJiY+KGRmbHQpOwotICB9Ci0KLSAgdGVtcGxh
dGUgPGNsYXNzIFU+Ci0gIFZhbHVlIHZhbHVlX29yKFUmJiBkZmx0KSAmJiB7Ci0gICAgaWYgKExJ
S0VMWSh0aGlzLT53aGljaF8gPT0gZXhwZWN0ZWRfZGV0YWlsOjpXaGljaDo6ZVZhbHVlKSkgewot
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZSh0aGlzLT52YWx1ZV8pOwotICAgIH0KLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VSYmPihkZmx0KTsKLSAgfQotCi0gIGV4cGxpY2l0IGNvbnN0ZXhwciBvcGVy
YXRvciBib29sKCkgY29uc3Qgbm9leGNlcHQgewotICAgIHJldHVybiBoYXNWYWx1ZSgpOwotICB9
Ci0KLSAgY29uc3QgVmFsdWUmIG9wZXJhdG9yKigpIGNvbnN0JiB7Ci0gICAgcmV0dXJuIHRoaXMt
PnZhbHVlKCk7Ci0gIH0KLQotICBWYWx1ZSYgb3BlcmF0b3IqKCkgJiB7Ci0gICAgcmV0dXJuIHRo
aXMtPnZhbHVlKCk7Ci0gIH0KLQotICBWYWx1ZSYmIG9wZXJhdG9yKigpICYmIHsKLSAgICByZXR1
cm4gc3RkOjptb3ZlKHRoaXMtPnZhbHVlKCkpOwotICB9Ci0KLSAgY29uc3QgVmFsdWUqIG9wZXJh
dG9yLT4oKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0ZDo6YWRkcmVzc29mKHRoaXMtPnZhbHVlKCkp
OwotICB9Ci0KLSAgVmFsdWUqIG9wZXJhdG9yLT4oKSB7Ci0gICAgcmV0dXJuIHN0ZDo6YWRkcmVz
c29mKHRoaXMtPnZhbHVlKCkpOwotICB9Ci0KLSAgY29uc3QgVmFsdWUqIGdldF9wb2ludGVyKCkg
Y29uc3QmIG5vZXhjZXB0IHsKLSAgICByZXR1cm4gaGFzVmFsdWUoKSA/IHN0ZDo6YWRkcmVzc29m
KHRoaXMtPnZhbHVlXykgOiBudWxscHRyOwotICB9Ci0KLSAgVmFsdWUqIGdldF9wb2ludGVyKCkg
JiBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuIGhhc1ZhbHVlKCkgPyBzdGQ6OmFkZHJlc3NvZih0aGlz
LT52YWx1ZV8pIDogbnVsbHB0cjsKLSAgfQotCi0gIFZhbHVlKiBnZXRfcG9pbnRlcigpICYmID0g
ZGVsZXRlOwotCi0gIC8qKgotICAgKiB0aGVuCi0gICAqLwotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4g
Rm5zIEZPTExZX1JFUVVJUkVTX1RSQUlMSU5HKHNpemVvZi4uLihGbnMpID49IDEpPgotICBhdXRv
IHRoZW4oRm5zJiYuLi4gZm5zKSBjb25zdCYgLT4gZGVjbHR5cGUoCi0gICAgICBleHBlY3RlZF9k
ZXRhaWw6OkV4cGVjdGVkSGVscGVyOjp0aGVuXygKLSAgICAgICAgICBzdGQ6OmRlY2x2YWw8Y29u
c3QgQmFzZSY+KCksCi0gICAgICAgICAgc3RkOjpkZWNsdmFsPEZucz4oKS4uLikpIHsKLSAgICBp
ZiAodGhpcy0+dW5pbml0aWFsaXplZEJ5RXhjZXB0aW9uKCkpCi0gICAgICB0aHJvdyBCYWRFeHBl
Y3RlZEFjY2VzcygpOwotICAgIHJldHVybiBleHBlY3RlZF9kZXRhaWw6OkV4cGVjdGVkSGVscGVy
Ojp0aGVuXygKLSAgICAgICAgYmFzZSgpLCBzdGF0aWNfY2FzdDxGbnMmJj4oZm5zKS4uLik7Ci0g
IH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gRm5zIEZPTExZX1JFUVVJUkVTX1RSQUlMSU5HKHNp
emVvZi4uLihGbnMpID49IDEpPgotICBhdXRvIHRoZW4oRm5zJiYuLi4gZm5zKSAmIC0+IGRlY2x0
eXBlKGV4cGVjdGVkX2RldGFpbDo6RXhwZWN0ZWRIZWxwZXI6OnRoZW5fKAotICAgICAgc3RkOjpk
ZWNsdmFsPEJhc2UmPigpLAotICAgICAgc3RkOjpkZWNsdmFsPEZucz4oKS4uLikpIHsKLSAgICBp
ZiAodGhpcy0+dW5pbml0aWFsaXplZEJ5RXhjZXB0aW9uKCkpCi0gICAgICB0aHJvdyBCYWRFeHBl
Y3RlZEFjY2VzcygpOwotICAgIHJldHVybiBleHBlY3RlZF9kZXRhaWw6OkV4cGVjdGVkSGVscGVy
Ojp0aGVuXygKLSAgICAgICAgYmFzZSgpLCBzdGF0aWNfY2FzdDxGbnMmJj4oZm5zKS4uLik7Ci0g
IH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gRm5zIEZPTExZX1JFUVVJUkVTX1RSQUlMSU5HKHNp
emVvZi4uLihGbnMpID49IDEpPgotICBhdXRvIHRoZW4oRm5zJiYuLi4gZm5zKSAmJiAtPiBkZWNs
dHlwZShleHBlY3RlZF9kZXRhaWw6OkV4cGVjdGVkSGVscGVyOjp0aGVuXygKLSAgICAgIHN0ZDo6
ZGVjbHZhbDxCYXNlJiY+KCksCi0gICAgICBzdGQ6OmRlY2x2YWw8Rm5zPigpLi4uKSkgewotICAg
IGlmICh0aGlzLT51bmluaXRpYWxpemVkQnlFeGNlcHRpb24oKSkKLSAgICAgIHRocm93IEJhZEV4
cGVjdGVkQWNjZXNzKCk7Ci0gICAgcmV0dXJuIGV4cGVjdGVkX2RldGFpbDo6RXhwZWN0ZWRIZWxw
ZXI6OnRoZW5fKAotICAgICAgICBzdGQ6Om1vdmUoYmFzZSgpKSwgc3RhdGljX2Nhc3Q8Rm5zJiY+
KGZucykuLi4pOwotICB9Ci0KLSAgLyoqCi0gICAqIHRoZW5PclRocm93Ci0gICAqLwotICB0ZW1w
bGF0ZSA8Y2xhc3MgWWVzLCBjbGFzcyBObyA9IE1ha2VCYWRFeHBlY3RlZEFjY2Vzcz4KLSAgYXV0
byB0aGVuT3JUaHJvdyhZZXMmJiB5ZXMsIE5vJiYgbm8gPSBOb3t9KSBjb25zdCYgLT4gZGVjbHR5
cGUoCi0gICAgICBzdGQ6OmRlY2x2YWw8WWVzPigpKHN0ZDo6ZGVjbHZhbDxjb25zdCBWYWx1ZSY+
KCkpKSB7Ci0gICAgdXNpbmcgUmV0ID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPFllcz4oKShzdGQ6
OmRlY2x2YWw8Y29uc3QgVmFsdWUmPigpKSk7Ci0gICAgaWYgKHRoaXMtPnVuaW5pdGlhbGl6ZWRC
eUV4Y2VwdGlvbigpKQotICAgICAgdGhyb3cgQmFkRXhwZWN0ZWRBY2Nlc3MoKTsKLSAgICByZXR1
cm4gUmV0KGV4cGVjdGVkX2RldGFpbDo6RXhwZWN0ZWRIZWxwZXI6OnRoZW5PclRocm93XygKLSAg
ICAgICAgYmFzZSgpLCBzdGF0aWNfY2FzdDxZZXMmJj4oeWVzKSwgc3RhdGljX2Nhc3Q8Tm8mJj4o
bm8pKSk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgWWVzLCBjbGFzcyBObyA9IE1ha2VCYWRF
eHBlY3RlZEFjY2Vzcz4KLSAgYXV0byB0aGVuT3JUaHJvdyhZZXMmJiB5ZXMsIE5vJiYgbm8gPSBO
b3t9KSAmIC0+IGRlY2x0eXBlKAotICAgICAgc3RkOjpkZWNsdmFsPFllcz4oKShzdGQ6OmRlY2x2
YWw8VmFsdWUmPigpKSkgewotICAgIHVzaW5nIFJldCA9IGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxZ
ZXM+KCkoc3RkOjpkZWNsdmFsPFZhbHVlJj4oKSkpOwotICAgIGlmICh0aGlzLT51bmluaXRpYWxp
emVkQnlFeGNlcHRpb24oKSkKLSAgICAgIHRocm93IEJhZEV4cGVjdGVkQWNjZXNzKCk7Ci0gICAg
cmV0dXJuIFJldChleHBlY3RlZF9kZXRhaWw6OkV4cGVjdGVkSGVscGVyOjp0aGVuT3JUaHJvd18o
Ci0gICAgICAgIGJhc2UoKSwgc3RhdGljX2Nhc3Q8WWVzJiY+KHllcyksIHN0YXRpY19jYXN0PE5v
JiY+KG5vKSkpOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFllcywgY2xhc3MgTm8gPSBNYWtl
QmFkRXhwZWN0ZWRBY2Nlc3M+Ci0gIGF1dG8gdGhlbk9yVGhyb3coWWVzJiYgeWVzLCBObyYmIG5v
ID0gTm97fSkgJiYgLT4gZGVjbHR5cGUoCi0gICAgICBzdGQ6OmRlY2x2YWw8WWVzPigpKHN0ZDo6
ZGVjbHZhbDxWYWx1ZSYmPigpKSkgewotICAgIHVzaW5nIFJldCA9IGRlY2x0eXBlKHN0ZDo6ZGVj
bHZhbDxZZXM+KCkoc3RkOjpkZWNsdmFsPFZhbHVlJiY+KCkpKTsKLSAgICBpZiAodGhpcy0+dW5p
bml0aWFsaXplZEJ5RXhjZXB0aW9uKCkpCi0gICAgICB0aHJvdyBCYWRFeHBlY3RlZEFjY2Vzcygp
OwotICAgIHJldHVybiBSZXQoZXhwZWN0ZWRfZGV0YWlsOjpFeHBlY3RlZEhlbHBlcjo6dGhlbk9y
VGhyb3dfKAotICAgICAgICBzdGQ6Om1vdmUoYmFzZSgpKSwgc3RhdGljX2Nhc3Q8WWVzJiY+KHll
cyksIHN0YXRpY19jYXN0PE5vJiY+KG5vKSkpOwotICB9Ci0KLSBwcml2YXRlOgotICB2b2lkIHJl
cXVpcmVWYWx1ZSgpIGNvbnN0IHsKLSAgICBpZiAoVU5MSUtFTFkoIWhhc1ZhbHVlKCkpKSB7Ci0g
ICAgICBpZiAoTElLRUxZKGhhc0Vycm9yKCkpKQotICAgICAgICB0aHJvdyB0eXBlbmFtZSBVbmV4
cGVjdGVkPEVycm9yPjo6QmFkRXhwZWN0ZWRBY2Nlc3ModGhpcy0+ZXJyb3JfKTsKLSAgICAgIHRo
cm93IEJhZEV4cGVjdGVkQWNjZXNzKCk7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCByZXF1aXJlRXJy
b3IoKSBjb25zdCB7Ci0gICAgaWYgKFVOTElLRUxZKCFoYXNFcnJvcigpKSkgewotICAgICAgdGhy
b3cgQmFkRXhwZWN0ZWRBY2Nlc3MoKTsKLSAgICB9Ci0gIH0KLQotICBleHBlY3RlZF9kZXRhaWw6
OldoaWNoIHdoaWNoKCkgY29uc3Qgbm9leGNlcHQgewotICAgIHJldHVybiB0aGlzLT53aGljaF87
Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgRXJyb3I+Ci1pbmxpbmUg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNFcXVhbGl0eUNvbXBhcmFibGU8VmFsdWU+Ojp2YWx1
ZSwgYm9vbD46OnR5cGUKLW9wZXJhdG9yPT0oCi0gICAgY29uc3QgRXhwZWN0ZWQ8VmFsdWUsIEVy
cm9yPiYgbGhzLAotICAgIGNvbnN0IEV4cGVjdGVkPFZhbHVlLCBFcnJvcj4mIHJocykgewotICBp
ZiAoVU5MSUtFTFkobGhzLndoaWNoXyAhPSByaHMud2hpY2hfKSkKLSAgICByZXR1cm4gVU5MSUtF
TFkobGhzLnVuaW5pdGlhbGl6ZWRCeUV4Y2VwdGlvbigpKSA/IGZhbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aHJvdyBCYWRFeHBlY3Rl
ZEFjY2VzcygpOwotICBpZiAoVU5MSUtFTFkobGhzLnVuaW5pdGlhbGl6ZWRCeUV4Y2VwdGlvbigp
KSkKLSAgICB0aHJvdyBCYWRFeHBlY3RlZEFjY2VzcygpOwotICBpZiAoVU5MSUtFTFkobGhzLmhh
c0Vycm9yKCkpKQotICAgIHJldHVybiB0cnVlOyAvLyBBbGwgZXJyb3Igc3RhdGVzIGFyZSBjb25z
aWRlcmVkIGVxdWFsCi0gIHJldHVybiBsaHMudmFsdWVfID09IHJocy52YWx1ZV87Ci19Ci0KLXRl
bXBsYXRlIDwKLSAgICBjbGFzcyBWYWx1ZSwKLSAgICBjbGFzcyBFcnJvciBGT0xMWV9SRVFVSVJF
U19UUkFJTElORyhJc0VxdWFsaXR5Q29tcGFyYWJsZTxWYWx1ZT46OnZhbHVlKT4KLWlubGluZSBi
b29sIG9wZXJhdG9yIT0oCi0gICAgY29uc3QgRXhwZWN0ZWQ8VmFsdWUsIEVycm9yPiYgbGhzLAot
ICAgIGNvbnN0IEV4cGVjdGVkPFZhbHVlLCBFcnJvcj4mIHJocykgewotICByZXR1cm4gIShyaHMg
PT0gbGhzKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBFcnJvcj4KLWlubGlu
ZSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc0xlc3NUaGFuQ29tcGFyYWJsZTxWYWx1ZT46OnZh
bHVlLCBib29sPjo6dHlwZQotb3BlcmF0b3I8KAotICAgIGNvbnN0IEV4cGVjdGVkPFZhbHVlLCBF
cnJvcj4mIGxocywKLSAgICBjb25zdCBFeHBlY3RlZDxWYWx1ZSwgRXJyb3I+JiByaHMpIHsKLSAg
aWYgKFVOTElLRUxZKAotICAgICAgICAgIGxocy51bmluaXRpYWxpemVkQnlFeGNlcHRpb24oKSB8
fCByaHMudW5pbml0aWFsaXplZEJ5RXhjZXB0aW9uKCkpKQotICAgIHRocm93IEJhZEV4cGVjdGVk
QWNjZXNzKCk7Ci0gIGlmIChVTkxJS0VMWShsaHMuaGFzRXJyb3IoKSkpCi0gICAgcmV0dXJuICFy
aHMuaGFzRXJyb3IoKTsKLSAgaWYgKFVOTElLRUxZKHJocy5oYXNFcnJvcigpKSkKLSAgICByZXR1
cm4gZmFsc2U7Ci0gIHJldHVybiBsaHMudmFsdWVfIDwgcmhzLnZhbHVlXzsKLX0KLQotdGVtcGxh
dGUgPAotICAgIGNsYXNzIFZhbHVlLAotICAgIGNsYXNzIEVycm9yIEZPTExZX1JFUVVJUkVTX1RS
QUlMSU5HKElzTGVzc1RoYW5Db21wYXJhYmxlPFZhbHVlPjo6dmFsdWUpPgotaW5saW5lIGJvb2wg
b3BlcmF0b3I8PSgKLSAgICBjb25zdCBFeHBlY3RlZDxWYWx1ZSwgRXJyb3I+JiBsaHMsCi0gICAg
Y29uc3QgRXhwZWN0ZWQ8VmFsdWUsIEVycm9yPiYgcmhzKSB7Ci0gIHJldHVybiAhKHJocyA8IGxo
cyk7Ci19Ci0KLXRlbXBsYXRlIDwKLSAgICBjbGFzcyBWYWx1ZSwKLSAgICBjbGFzcyBFcnJvciBG
T0xMWV9SRVFVSVJFU19UUkFJTElORyhJc0xlc3NUaGFuQ29tcGFyYWJsZTxWYWx1ZT46OnZhbHVl
KT4KLWlubGluZSBib29sIG9wZXJhdG9yPigKLSAgICBjb25zdCBFeHBlY3RlZDxWYWx1ZSwgRXJy
b3I+JiBsaHMsCi0gICAgY29uc3QgRXhwZWN0ZWQ8VmFsdWUsIEVycm9yPiYgcmhzKSB7Ci0gIHJl
dHVybiByaHMgPCBsaHM7Ci19Ci0KLXRlbXBsYXRlIDwKLSAgICBjbGFzcyBWYWx1ZSwKLSAgICBj
bGFzcyBFcnJvciBGT0xMWV9SRVFVSVJFU19UUkFJTElORyhJc0xlc3NUaGFuQ29tcGFyYWJsZTxW
YWx1ZT46OnZhbHVlKT4KLWlubGluZSBib29sIG9wZXJhdG9yPj0oCi0gICAgY29uc3QgRXhwZWN0
ZWQ8VmFsdWUsIEVycm9yPiYgbGhzLAotICAgIGNvbnN0IEV4cGVjdGVkPFZhbHVlLCBFcnJvcj4m
IHJocykgewotICByZXR1cm4gIShsaHMgPCByaHMpOwotfQotCi0vKioKLSAqIHN3YXAgRXhwZWN0
ZWQgdmFsdWVzCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBFcnJvciwgY2xhc3MgVmFsdWU+Ci12b2lk
IHN3YXAoRXhwZWN0ZWQ8RXJyb3IsIFZhbHVlPiYgbGhzLCBFeHBlY3RlZDxWYWx1ZSwgRXJyb3I+
JiByaHMpIG5vZXhjZXB0KAotICAgIGV4cGVjdGVkX2RldGFpbDo6U3RyaWN0QWxsT2Y8SXNOb3Ro
cm93U3dhcHBhYmxlLCBWYWx1ZSwgRXJyb3I+Ojp2YWx1ZSkgewotICBsaHMuc3dhcChyaHMpOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEVycm9yPgotY29uc3QgVmFsdWUqIGdl
dF9wb2ludGVyKGNvbnN0IEV4cGVjdGVkPFZhbHVlLCBFcnJvcj4mIGV4KSBub2V4Y2VwdCB7Ci0g
IHJldHVybiBleC5nZXRfcG9pbnRlcigpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNs
YXNzIEVycm9yPgotVmFsdWUqIGdldF9wb2ludGVyKEV4cGVjdGVkPFZhbHVlLCBFcnJvcj4mIGV4
KSBub2V4Y2VwdCB7Ci0gIHJldHVybiBleC5nZXRfcG9pbnRlcigpOwotfQotCi0vKioKLSAqIEZv
ciBjb25zdHJ1Y3RpbmcgYW4gRXhwZWN0ZWQgb2JqZWN0IGZyb20gYSB2YWx1ZSwgd2l0aCB0aGUg
c3BlY2lmaWVkCi0gKiBFcnJvciB0eXBlLiBVc2FnZSBpcyBhcyBmb2xsb3dzOgotICoKLSAqIGVu
dW0gTXlFcnJvckNvZGUgeyBCQURfRVJST1IsIFdPUlNFX0VSUk9SIH07Ci0gKiBFeHBlY3RlZDxp
bnQsIE15RXJyb3JDb2RlPiBteUFQSSgpIHsKLSAqICAgaW50IGkgPSAvLyAuLi47Ci0gKiAgIHJl
dHVybiBpID8gbWFrZUV4cGVjdGVkPE15RXJyb3JDb2RlPihpKSA6IG1ha2VVbmV4cGVjdGVkKEJB
RF9FUlJPUik7Ci0gKiB9Ci0gKi8KLXRlbXBsYXRlIDxjbGFzcyBFcnJvciwgY2xhc3MgVmFsdWU+
Ci1jb25zdGV4cHIgRXhwZWN0ZWQ8dHlwZW5hbWUgc3RkOjpkZWNheTxWYWx1ZT46OnR5cGUsIEVy
cm9yPiBtYWtlRXhwZWN0ZWQoCi0gICAgVmFsdWUmJiB2YWwpIHsKLSAgcmV0dXJuIEV4cGVjdGVk
PHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VmFsdWU+Ojp0eXBlLCBFcnJvcj57Ci0gICAgICBpbl9wbGFj
ZSwgc3RhdGljX2Nhc3Q8VmFsdWUmJj4odmFsKX07Ci19Ci0KLS8vIFN1cHByZXNzIGNvbXBhcmFi
aWxpdHkgb2YgT3B0aW9uYWw8VD4gd2l0aCBULCBkZXNwaXRlIGltcGxpY2l0IGNvbnZlcnNpb24u
Ci10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEVycm9yPgotYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEV4cGVjdGVkPFZhbHVlLCBFcnJvcj4mLCBjb25zdCBWYWx1ZSYgb3RoZXIpID0gZGVsZXRl
OwotdGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBFcnJvcj4KLWJvb2wgb3BlcmF0b3IhPShj
b25zdCBFeHBlY3RlZDxWYWx1ZSwgRXJyb3I+JiwgY29uc3QgVmFsdWUmIG90aGVyKSA9IGRlbGV0
ZTsKLXRlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgRXJyb3I+Ci1ib29sIG9wZXJhdG9yPChj
b25zdCBFeHBlY3RlZDxWYWx1ZSwgRXJyb3I+JiwgY29uc3QgVmFsdWUmIG90aGVyKSA9IGRlbGV0
ZTsKLXRlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgRXJyb3I+Ci1ib29sIG9wZXJhdG9yPD0o
Y29uc3QgRXhwZWN0ZWQ8VmFsdWUsIEVycm9yPiYsIGNvbnN0IFZhbHVlJiBvdGhlcikgPSBkZWxl
dGU7Ci10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEVycm9yPgotYm9vbCBvcGVyYXRvcj49
KGNvbnN0IEV4cGVjdGVkPFZhbHVlLCBFcnJvcj4mLCBjb25zdCBWYWx1ZSYgb3RoZXIpID0gZGVs
ZXRlOwotdGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBFcnJvcj4KLWJvb2wgb3BlcmF0b3I+
KGNvbnN0IEV4cGVjdGVkPFZhbHVlLCBFcnJvcj4mLCBjb25zdCBWYWx1ZSYgb3RoZXIpID0gZGVs
ZXRlOwotdGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBFcnJvcj4KLWJvb2wgb3BlcmF0b3I9
PShjb25zdCBWYWx1ZSYgb3RoZXIsIGNvbnN0IEV4cGVjdGVkPFZhbHVlLCBFcnJvcj4mKSA9IGRl
bGV0ZTsKLXRlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgRXJyb3I+Ci1ib29sIG9wZXJhdG9y
IT0oY29uc3QgVmFsdWUmIG90aGVyLCBjb25zdCBFeHBlY3RlZDxWYWx1ZSwgRXJyb3I+JikgPSBk
ZWxldGU7Ci10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEVycm9yPgotYm9vbCBvcGVyYXRv
cjwoY29uc3QgVmFsdWUmIG90aGVyLCBjb25zdCBFeHBlY3RlZDxWYWx1ZSwgRXJyb3I+JikgPSBk
ZWxldGU7Ci10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNsYXNzIEVycm9yPgotYm9vbCBvcGVyYXRv
cjw9KGNvbnN0IFZhbHVlJiBvdGhlciwgY29uc3QgRXhwZWN0ZWQ8VmFsdWUsIEVycm9yPiYpID0g
ZGVsZXRlOwotdGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBFcnJvcj4KLWJvb2wgb3BlcmF0
b3I+PShjb25zdCBWYWx1ZSYgb3RoZXIsIGNvbnN0IEV4cGVjdGVkPFZhbHVlLCBFcnJvcj4mKSA9
IGRlbGV0ZTsKLXRlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgRXJyb3I+Ci1ib29sIG9wZXJh
dG9yPihjb25zdCBWYWx1ZSYgb3RoZXIsIGNvbnN0IEV4cGVjdGVkPFZhbHVlLCBFcnJvcj4mKSA9
IGRlbGV0ZTsKLQotfSAvLyBuYW1lc3BhY2UgZm9sbHkKLQotI2lmIGRlZmluZWQoX19HTlVDX18p
ICYmICFkZWZpbmVkKF9fY2xhbmdfXykKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCi0jZW5k
aWYKLQotI3VuZGVmIEZPTExZX1JFUVVJUkVTCi0jdW5kZWYgRk9MTFlfUkVRVUlSRVNfVFJBSUxJ
TkcKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5
L0ZCU3RyaW5nLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9G
QlN0cmluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDMyZGY1MzVmNmQyYTI2
ODkyMzIxODg4MTA2MWNiNDBlMjNjM2E1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5
L0ZCU3RyaW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyODk0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFj
aGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3Qg
dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICog
WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWly
ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0g
KiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo
ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0
aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLyBAYXV0aG9yOiBBbmRyZWkgQWxleGFu
ZHJlc2N1IChhYWxleGFuZHJlKQotLy8gU3RyaW5nIHR5cGUuCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8aW9zZndkPgot
I2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLQotLy8gVGhpcyBmaWxl
IGFwcGVhcnMgaW4gdHdvIGxvY2F0aW9uczogaW5zaWRlIGZiY29kZSBhbmQgaW4gdGhlCi0vLyBs
aWJzdGRjKysgc291cmNlIGNvZGUgKHdoZW4gZW1iZWRkaW5nIGZic3RyaW5nIGFzIHN0ZDo6c3Ry
aW5nKS4KLS8vIFRvIGFpZCBpbiB0aGlzIHNjaGl6b3BocmVuaWMgdXNlLCBfTElCU1REQ1hYX0ZC
U1RSSU5HIGlzIGRlZmluZWQgaW4KLS8vIGxpYnN0ZGMrKydzIGMrK2NvbmZpZy5oLCB0byBnYXRl
IHVzZSBpbnNpZGUgZmJjb2RlIHYuIGxpYnN0ZGMrKy4KLSNpZmRlZiBfTElCU1REQ1hYX0ZCU1RS
SU5HCi0KLSNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKLQotI2luY2x1ZGUgImJhc2ljX2Zic3Ry
aW5nX21hbGxvYy5oIiAvLyBAbWFudWFsCi0KLS8vIFdoZW4gdXNlZCBhcyBzdGQ6OnN0cmluZyBy
ZXBsYWNlbWVudCBhbHdheXMgZGlzYWJsZSBhc3NlcnRpb25zLgotI2RlZmluZSBGQlNUUklOR19B
U1NFUlQoZXhwcikgLyogZW1wdHkgKi8KLQotI2Vsc2UgLy8gIV9MSUJTVERDWFhfRkJTVFJJTkcK
LQotI2luY2x1ZGUgPGZvbGx5L0NwcEF0dHJpYnV0ZXMuaD4KLSNpbmNsdWRlIDxmb2xseS9Qb3J0
YWJpbGl0eS5oPgotCi0vLyBsaWJjKysgZG9lc24ndCBwcm92aWRlIHRoaXMgaGVhZGVyLCBub3Ig
ZG9lcyBtc3ZjCi0jaWZkZWYgRk9MTFlfSEFWRV9CSVRTX0NYWENPTkZJR19ICi0jaW5jbHVkZSA8
Yml0cy9jKytjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1
ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5j
bHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgPGZvbGx5L0hhc2guaD4KLSNpbmNsdWRlIDxmb2xs
eS9NYWxsb2MuaD4KLSNpbmNsdWRlIDxmb2xseS9UcmFpdHMuaD4KLSNpbmNsdWRlIDxmb2xseS9w
b3J0YWJpbGl0eS9CaXRzRnVuY3RleGNlcHQuaD4KLQotLy8gV2hlbiB1c2VkIGluIGZvbGx5LCBh
c3NlcnRpb25zIGFyZSBub3QgZGlzYWJsZWQuCi0jZGVmaW5lIEZCU1RSSU5HX0FTU0VSVChleHBy
KSBhc3NlcnQoZXhwcikKLQotI2VuZGlmCi0KLS8vIFdlIGRlZmluZWQgdGhlc2UgaGVyZSByYXRo
ZXIgdGhhbiBpbmNsdWRpbmcgTGlrZWx5LmggdG8gYXZvaWQKLS8vIHJlZGVmaW5pdGlvbiBlcnJv
cnMgd2hlbiBmYnN0cmluZyBpcyBpbXBvcnRlZCBpbnRvIGxpYnN0ZGMrKy4KLSNpZiBkZWZpbmVk
KF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSA0Ci0jZGVmaW5lIEZCU1RSSU5HX0xJS0VMWSh4KSAg
IChfX2J1aWx0aW5fZXhwZWN0KCh4KSwgMSkpCi0jZGVmaW5lIEZCU1RSSU5HX1VOTElLRUxZKHgp
IChfX2J1aWx0aW5fZXhwZWN0KCh4KSwgMCkpCi0jZWxzZQotI2RlZmluZSBGQlNUUklOR19MSUtF
TFkoeCkgICAoeCkKLSNkZWZpbmUgRkJTVFJJTkdfVU5MSUtFTFkoeCkgKHgpCi0jZW5kaWYKLQot
Rk9MTFlfUFVTSF9XQVJOSU5HCi0vLyBJZ25vcmUgc2hhZG93aW5nIHdhcm5pbmdzIHdpdGhpbiB0
aGlzIGZpbGUsIHNvIGluY2x1ZGVycyBjYW4gdXNlIC1Xc2hhZG93LgotRk9MTFlfR0NDX0RJU0FC
TEVfV0FSTklORygiLVdzaGFkb3ciKQotLy8gR0NDIDQuOSBoYXMgYSBmYWxzZSBwb3NpdGl2ZSBp
biBzZXRTbWFsbFNpemUgKHByb2JhYmx5Ci0vLyBodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxh
L3Nob3dfYnVnLmNnaT9pZD01OTEyNCksIGRpc2FibGUKLS8vIGNvbXBpbGUtdGltZSBhcnJheSBi
b3VuZCBjaGVja2luZy4KLUZPTExZX0dDQ19ESVNBQkxFX1dBUk5JTkcoIi1XYXJyYXktYm91bmRz
IikKLQotLy8gRkJTdHJpbmcgY2Fubm90IHVzZSB0aHJvdyB3aGVuIHJlcGxhY2luZyBzdGQ6OnN0
cmluZywgdGhvdWdoIGl0IG1heSBzdGlsbAotLy8gdXNlIHN0ZDo6X190aHJvd18qCi0vLyBub2xp
bnQKLSNkZWZpbmUgdGhyb3cgRk9MTFlfRkJTVFJJTkdfTUFZX05PVF9VU0VfVEhST1cKLQotI2lm
ZGVmIF9MSUJTVERDWFhfRkJTVFJJTkcKLSNkZWZpbmUgRk9MTFlfRkJTVFJJTkdfQkVHSU5fTkFN
RVNQQUNFICAgICAgICAgXAotICBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVm
YXVsdCkgeyBcCi0gICAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KLSNkZWZpbmUg
Rk9MTFlfRkJTVFJJTkdfRU5EX05BTUVTUEFDRSBcCi0gIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0Vf
VkVSU0lPTiAgICAgXAotICB9IC8vIG5hbWVzcGFjZSBzdGQKLSNlbHNlCi0jZGVmaW5lIEZPTExZ
X0ZCU1RSSU5HX0JFR0lOX05BTUVTUEFDRSBuYW1lc3BhY2UgZm9sbHkgewotI2RlZmluZSBGT0xM
WV9GQlNUUklOR19FTkRfTkFNRVNQQUNFIH0gLy8gbmFtZXNwYWNlIGZvbGx5Ci0jZW5kaWYKLQot
Rk9MTFlfRkJTVFJJTkdfQkVHSU5fTkFNRVNQQUNFCi0KLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykK
LSMgaWYgX19oYXNfZmVhdHVyZShhZGRyZXNzX3Nhbml0aXplcikKLSMgIGRlZmluZSBGQlNUUklO
R19TQU5JVElaRV9BRERSRVNTCi0jIGVuZGlmCi0jZWxpZiBkZWZpbmVkIChfX0dOVUNfXykgJiYg
XAotICAgICAgKCgoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDgpKSB8fCAo
X19HTlVDX18gPj0gNSkpICYmIFwKLSAgICAgIF9fU0FOSVRJWkVfQUREUkVTU19fCi0jIGRlZmlu
ZSBGQlNUUklOR19TQU5JVElaRV9BRERSRVNTCi0jZW5kaWYKLQotLy8gV2hlbiBjb21waWxpbmcg
d2l0aCBBU2FuLCBhbHdheXMgaGVhcC1hbGxvY2F0ZSB0aGUgc3RyaW5nIGV2ZW4gaWYKLS8vIGl0
IHdvdWxkIGZpdCBpbi1zaXR1LCBzbyB0aGF0IEFTYW4gY2FuIGRldGVjdCBhY2Nlc3MgdG8gdGhl
IHN0cmluZwotLy8gYnVmZmVyIGFmdGVyIGl0IGhhcyBiZWVuIGludmFsaWRhdGVkIChkZXN0cm95
ZWQsIHJlc2l6ZWQsIGV0Yy4pLgotLy8gTm90ZSB0aGF0IHRoaXMgZmxhZyBkb2Vzbid0IHJlbW92
ZSBzdXBwb3J0IGZvciBpbi1zaXR1IHN0cmluZ3MsIGFzCi0vLyB0aGF0IHdvdWxkIGJyZWFrIEFC
SS1jb21wYXRpYmlsaXR5IGFuZCB3b3VsZG4ndCBhbGxvdyBsaW5raW5nIGNvZGUKLS8vIGNvbXBp
bGVkIHdpdGggdGhpcyBmbGFnIHdpdGggY29kZSBjb21waWxlZCB3aXRob3V0LgotI2lmZGVmIEZC
U1RSSU5HX1NBTklUSVpFX0FERFJFU1MKLSMgZGVmaW5lIEZCU1RSSU5HX0RJU0FCTEVfU1NPIHRy
dWUKLSNlbHNlCi0jIGRlZmluZSBGQlNUUklOR19ESVNBQkxFX1NTTyBmYWxzZQotI2VuZGlmCi0K
LW5hbWVzcGFjZSBmYnN0cmluZ19kZXRhaWwgewotCi10ZW1wbGF0ZSA8Y2xhc3MgSW5JdCwgY2xh
c3MgT3V0SXQ+Ci1pbmxpbmUgc3RkOjpwYWlyPEluSXQsIE91dEl0PiBjb3B5X24oCi0gICAgSW5J
dCBiLAotICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEluSXQ+OjpkaWZmZXJlbmNl
X3R5cGUgbiwKLSAgICBPdXRJdCBkKSB7Ci0gIGZvciAoOyBuICE9IDA7IC0tbiwgKytiLCArK2Qp
IHsKLSAgICAqZCA9ICpiOwotICB9Ci0gIHJldHVybiBzdGQ6Om1ha2VfcGFpcihiLCBkKTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFBvZCwgY2xhc3MgVD4KLWlubGluZSB2b2lkIHBvZEZpbGwoUG9k
KiBiLCBQb2QqIGUsIFQgYykgewotICBGQlNUUklOR19BU1NFUlQoYiAmJiBlICYmIGIgPD0gZSk7
Ci0gIGNvbnN0ZXhwciBhdXRvIGtVc2VNZW1zZXQgPSBzaXplb2YoVCkgPT0gMTsKLSAgLyogc3Rh
dGljICovIGlmIChrVXNlTWVtc2V0KSB7Ci0gICAgbWVtc2V0KGIsIGMsIHNpemVfdChlIC0gYikp
OwotICB9IGVsc2UgewotICAgIGF1dG8gY29uc3QgZWUgPSBiICsgKChlIC0gYikgJiB+N3UpOwot
ICAgIGZvciAoOyBiICE9IGVlOyBiICs9IDgpIHsKLSAgICAgIGJbMF0gPSBjOwotICAgICAgYlsx
XSA9IGM7Ci0gICAgICBiWzJdID0gYzsKLSAgICAgIGJbM10gPSBjOwotICAgICAgYls0XSA9IGM7
Ci0gICAgICBiWzVdID0gYzsKLSAgICAgIGJbNl0gPSBjOwotICAgICAgYls3XSA9IGM7Ci0gICAg
fQotICAgIC8vIExlZnRvdmVycwotICAgIGZvciAoOyBiICE9IGU7ICsrYikgewotICAgICAgKmIg
PSBjOwotICAgIH0KLSAgfQotfQotCi0vKgotICogTGlnaHRseSBzdHJ1Y3R1cmVkIG1lbWNweSwg
c2ltcGxpZmllcyBjb3B5aW5nIFBPRHMgYW5kIGludHJvZHVjZXMKLSAqIHNvbWUgYXNzZXJ0cy4g
VW5mb3J0dW5hdGVseSB1c2luZyB0aGlzIGZ1bmN0aW9uIG1heSBjYXVzZQotICogbWVhc3VyYWJs
ZSBvdmVyaGVhZCAocHJlc3VtYWJseSBiZWNhdXNlIGl0IGFkanVzdHMgZnJvbSBhIGJlZ2luL2Vu
ZAotICogY29udmVudGlvbiB0byBhIHBvaW50ZXIvc2l6ZSBjb252ZW50aW9uLCBzbyBpdCBkb2Vz
IHNvbWUgZXh0cmEKLSAqIGFyaXRobWV0aWMgZXZlbiB0aG91Z2ggdGhlIGNhbGxlciBtaWdodCBo
YXZlIGRvbmUgdGhlIGludmVyc2UKLSAqIGFkYXB0YXRpb24gb3V0c2lkZSkuCi0gKi8KLXRlbXBs
YXRlIDxjbGFzcyBQb2Q+Ci1pbmxpbmUgdm9pZCBwb2RDb3B5KGNvbnN0IFBvZCogYiwgY29uc3Qg
UG9kKiBlLCBQb2QqIGQpIHsKLSAgRkJTVFJJTkdfQVNTRVJUKGIgIT0gbnVsbHB0cik7Ci0gIEZC
U1RSSU5HX0FTU0VSVChlICE9IG51bGxwdHIpOwotICBGQlNUUklOR19BU1NFUlQoZCAhPSBudWxs
cHRyKTsKLSAgRkJTVFJJTkdfQVNTRVJUKGUgPj0gYik7Ci0gIEZCU1RSSU5HX0FTU0VSVChkID49
IGUgfHwgZCArIChlIC0gYikgPD0gYik7Ci0gIG1lbWNweShkLCBiLCAoZSAtIGIpICogc2l6ZW9m
KFBvZCkpOwotfQotCi0vKgotICogTGlnaHRseSBzdHJ1Y3R1cmVkIG1lbW1vdmUsIHNpbXBsaWZp
ZXMgY29weWluZyBQT0RzIGFuZCBpbnRyb2R1Y2VzCi0gKiBzb21lIGFzc2VydHMKLSAqLwotdGVt
cGxhdGUgPGNsYXNzIFBvZD4KLWlubGluZSB2b2lkIHBvZE1vdmUoY29uc3QgUG9kKiBiLCBjb25z
dCBQb2QqIGUsIFBvZCogZCkgewotICBGQlNUUklOR19BU1NFUlQoZSA+PSBiKTsKLSAgbWVtbW92
ZShkLCBiLCAoZSAtIGIpICogc2l6ZW9mKCpiKSk7Ci19Ci0KLS8vIGFsd2F5cyBpbmxpbmUKLSNp
ZiBkZWZpbmVkKF9fR05VQ19fKSAvLyBDbGFuZyBhbHNvIGRlZmluZXMgX19HTlVDX18KLSMgZGVm
aW5lIEZCU1RSSU5HX0FMV0FZU19JTkxJTkUgaW5saW5lIF9fYXR0cmlidXRlX18oKF9fYWx3YXlz
X2lubGluZV9fKSkKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0jIGRlZmluZSBGQlNUUklOR19B
TFdBWVNfSU5MSU5FIF9fZm9yY2VpbmxpbmUKLSNlbHNlCi0jIGRlZmluZSBGQlNUUklOR19BTFdB
WVNfSU5MSU5FIGlubGluZQotI2VuZGlmCi0KLVtbbm9yZXR1cm5dXSBGQlNUUklOR19BTFdBWVNf
SU5MSU5FIHZvaWQgYXNzdW1lX3VucmVhY2hhYmxlKCkgewotI2lmIGRlZmluZWQoX19HTlVDX18p
IC8vIENsYW5nIGFsc28gZGVmaW5lcyBfX0dOVUNfXwotICBfX2J1aWx0aW5fdW5yZWFjaGFibGUo
KTsKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0gIF9fYXNzdW1lKDApOwotI2Vsc2UKLSAgLy8g
V2VsbCwgaXQncyBiZXR0ZXIgdGhhbiBub3RoaW5nLgotICBzdGQ6OmFib3J0KCk7Ci0jZW5kaWYK
LX0KLQotfSAvLyBuYW1lc3BhY2UgZmJzdHJpbmdfZGV0YWlsCi0KLS8qKgotICogRGVmaW5lcyBh
IHNwZWNpYWwgYWNxdWlzaXRpb24gbWV0aG9kIGZvciBjb25zdHJ1Y3RpbmcgZmJzdHJpbmcKLSAq
IG9iamVjdHMuIEFjcXVpcmVNYWxsb2NhdGVkU3RyaW5nIG1lYW5zIHRoYXQgdGhlIHVzZXIgcGFz
c2VzIGEKLSAqIHBvaW50ZXIgdG8gYSBtYWxsb2MtYWxsb2NhdGVkIHN0cmluZyB0aGF0IHRoZSBm
YnN0cmluZyBvYmplY3Qgd2lsbAotICogdGFrZSBpbnRvIGN1c3RvZHkuCi0gKi8KLWVudW0gY2xh
c3MgQWNxdWlyZU1hbGxvY2F0ZWRTdHJpbmcge307Ci0KLS8qCi0gKiBmYnN0cmluZ19jb3JlX21v
ZGVsIGlzIGEgbW9jay11cCB0eXBlIHRoYXQgZGVmaW5lcyBhbGwgcmVxdWlyZWQKLSAqIHNpZ25h
dHVyZXMgb2YgYSBmYnN0cmluZyBjb3JlLiBUaGUgZmJzdHJpbmcgY2xhc3MgaXRzZWxmIHVzZXMg
c3VjaAotICogYSBjb3JlIG9iamVjdCB0byBpbXBsZW1lbnQgYWxsIG9mIHRoZSBudW1lcm91cyBt
ZW1iZXIgZnVuY3Rpb25zCi0gKiByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQuCi0gKgotICogSWYg
eW91IHdhbnQgdG8gZGVmaW5lIGEgbmV3IGNvcmUsIGNvcHkgdGhlIGRlZmluaXRpb24gYmVsb3cg
YW5kCi0gKiBpbXBsZW1lbnQgdGhlIHByaW1pdGl2ZXMuIFRoZW4gcGx1ZyB0aGUgY29yZSBpbnRv
IGJhc2ljX2Zic3RyaW5nIGFzCi0gKiBhIHRlbXBsYXRlIGFyZ3VtZW50LgotCi10ZW1wbGF0ZSA8
Y2xhc3MgQ2hhcj4KLWNsYXNzIGZic3RyaW5nX2NvcmVfbW9kZWwgewotcHVibGljOgotICBmYnN0
cmluZ19jb3JlX21vZGVsKCk7Ci0gIGZic3RyaW5nX2NvcmVfbW9kZWwoY29uc3QgZmJzdHJpbmdf
Y29yZV9tb2RlbCAmKTsKLSAgfmZic3RyaW5nX2NvcmVfbW9kZWwoKTsKLSAgLy8gUmV0dXJucyBh
IHBvaW50ZXIgdG8gc3RyaW5nJ3MgYnVmZmVyIChjdXJyZW50bHkgb25seSBjb250aWd1b3VzCi0g
IC8vIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCkuIFRoZSBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8g
YmUgdmFsaWQKLSAgLy8gdW50aWwgdGhlIG5leHQgY2FsbCB0byBhIG5vbi1jb25zdCBtZW1iZXIg
ZnVuY3Rpb24uCi0gIGNvbnN0IENoYXIgKiBkYXRhKCkgY29uc3Q7Ci0gIC8vIE11Y2ggbGlrZSBk
YXRhKCksIGV4Y2VwdCB0aGUgc3RyaW5nIGlzIHByZXBhcmVkIHRvIHN1cHBvcnQKLSAgLy8gY2hh
cmFjdGVyLWxldmVsIGNoYW5nZXMuIFRoaXMgY2FsbCBpcyBhIHNpZ25hbCBmb3IKLSAgLy8gZS5n
LiByZWZlcmVuY2UtY291bnRlZCBpbXBsZW1lbnRhdGlvbiB0byBmb3JrIHRoZSBkYXRhLiBUaGUK
LSAgLy8gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIHVudGlsIHRoZSBuZXh0IGNh
bGwgdG8gYQotICAvLyBub24tY29uc3QgbWVtYmVyIGZ1bmN0aW9uLgotICBDaGFyKiBtdXRhYmxl
RGF0YSgpOwotICAvLyBSZXR1cm5zIGEgcG9pbnRlciB0byBzdHJpbmcncyBidWZmZXIgYW5kIGd1
YXJhbnRlZXMgdGhhdCBhCi0gIC8vIHJlYWRhYmxlICdcMCcgbGllcyByaWdodCBhZnRlciB0aGUg
YnVmZmVyLiBUaGUgcG9pbnRlciBpcwotICAvLyBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIHVudGls
IHRoZSBuZXh0IGNhbGwgdG8gYSBub24tY29uc3QgbWVtYmVyCi0gIC8vIGZ1bmN0aW9uLgotICBj
b25zdCBDaGFyICogY19zdHIoKSBjb25zdDsKLSAgLy8gU2hyaW5rcyB0aGUgc3RyaW5nIGJ5IGRl
bHRhIGNoYXJhY3RlcnMuIEFzc2VydHMgdGhhdCBkZWx0YSA8PQotICAvLyBzaXplKCkuCi0gIHZv
aWQgc2hyaW5rKHNpemVfdCBkZWx0YSk7Ci0gIC8vIEV4cGFuZHMgdGhlIHN0cmluZyBieSBkZWx0
YSBjaGFyYWN0ZXJzIChpLmUuIGFmdGVyIHRoaXMgY2FsbAotICAvLyBzaXplKCkgd2lsbCByZXBv
cnQgdGhlIG9sZCBzaXplKCkgcGx1cyBkZWx0YSkgYnV0IHdpdGhvdXQKLSAgLy8gaW5pdGlhbGl6
aW5nIHRoZSBleHBhbmRlZCByZWdpb24uIFRoZSBleHBhbmRlZCByZWdpb24gaXMKLSAgLy8gemVy
by10ZXJtaW5hdGVkLiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbWVtb3J5IHRvIGJlCi0gIC8v
IGluaXRpYWxpemVkICh0aGUgYmVnaW5uaW5nIG9mIHRoZSBleHBhbmRlZCBwb3J0aW9uKS4gVGhl
IGNhbGxlcgotICAvLyBpcyBleHBlY3RlZCB0byBmaWxsIHRoZSBleHBhbmRlZCBhcmVhIGFwcHJv
cHJpYXRlbHkuCi0gIC8vIElmIGV4cEdyb3d0aCBpcyB0cnVlLCBleHBvbmVudGlhbCBncm93dGgg
aXMgZ3VhcmFudGVlZC4KLSAgLy8gSXQgaXMgbm90IGd1YXJhbnRlZWQgbm90IHRvIHJlYWxsb2Nh
dGUgZXZlbiBpZiBzaXplKCkgKyBkZWx0YSA8Ci0gIC8vIGNhcGFjaXR5KCksIHNvIGFsbCByZWZl
cmVuY2VzIHRvIHRoZSBidWZmZXIgYXJlIGludmFsaWRhdGVkLgotICBDaGFyKiBleHBhbmROb2lu
aXQoc2l6ZV90IGRlbHRhLCBib29sIGV4cEdyb3d0aCk7Ci0gIC8vIEV4cGFuZHMgdGhlIHN0cmlu
ZyBieSBvbmUgY2hhcmFjdGVyIGFuZCBzZXRzIHRoZSBsYXN0IGNoYXJhY3RlcgotICAvLyB0byBj
LgotICB2b2lkIHB1c2hfYmFjayhDaGFyIGMpOwotICAvLyBSZXR1cm5zIHRoZSBzdHJpbmcncyBz
aXplLgotICBzaXplX3Qgc2l6ZSgpIGNvbnN0OwotICAvLyBSZXR1cm5zIHRoZSBzdHJpbmcncyBj
YXBhY2l0eSwgaS5lLiBtYXhpbXVtIHNpemUgdGhhdCB0aGUgc3RyaW5nCi0gIC8vIGNhbiBncm93
IHRvIHdpdGhvdXQgcmVhbGxvY2F0aW9uLiBOb3RlIHRoYXQgZm9yIHJlZmVyZW5jZSBjb3VudGVk
Ci0gIC8vIHN0cmluZ3MgdGhhdCdzIHRlY2huaWNhbGx5IGEgbGllIC0gZXZlbiBhc3NpZ25pbmcg
Y2hhcmFjdGVycwotICAvLyB3aXRoaW4gdGhlIGV4aXN0aW5nIHNpemUgd291bGQgY2F1c2UgYSBy
ZWFsbG9jYXRpb24uCi0gIHNpemVfdCBjYXBhY2l0eSgpIGNvbnN0OwotICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIGRhdGEgdW5kZXJseWluZyB0aGUgc3RyaW5nIGlzIGFjdHVhbGx5IHNoYXJlZAot
ICAvLyBhY3Jvc3MgbXVsdGlwbGUgc3RyaW5ncyAoaW4gYSByZWZjb3VudGVkIGZhc2hpb24pLgot
ICBib29sIGlzU2hhcmVkKCkgY29uc3Q7Ci0gIC8vIE1ha2VzIHN1cmUgdGhhdCBhdCBsZWFzdCBt
aW5DYXBhY2l0eSBjaGFyYWN0ZXJzIGFyZSBhdmFpbGFibGUgZm9yCi0gIC8vIHRoZSBzdHJpbmcg
d2l0aG91dCByZWFsbG9jYXRpb24uIEZvciByZWZlcmVuY2UtY291bnRlZCBzdHJpbmdzLAotICAv
LyBpdCBzaG91bGQgZm9yayB0aGUgZGF0YSBldmVuIGlmIG1pbkNhcGFjaXR5IDwgc2l6ZSgpLgot
ICB2b2lkIHJlc2VydmUoc2l6ZV90IG1pbkNhcGFjaXR5KTsKLXByaXZhdGU6Ci0gIC8vIERvIG5v
dCBpbXBsZW1lbnQKLSAgZmJzdHJpbmdfY29yZV9tb2RlbCYgb3BlcmF0b3I9KGNvbnN0IGZic3Ry
aW5nX2NvcmVfbW9kZWwgJik7Ci19OwotKi8KLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBjb3JlIG9m
IHRoZSBzdHJpbmcuIFRoZSBjb2RlIHNob3VsZCB3b3JrIG9uIDMyLSBhbmQKLSAqIDY0LWJpdCBh
bmQgYm90aCBiaWctIGFuZCBsaXR0bGUtZW5kaWFuYW4gYXJjaGl0ZWN0dXJlcyB3aXRoIGFueQot
ICogQ2hhciBzaXplLgotICoKLSAqIFRoZSBzdG9yYWdlIGlzIHNlbGVjdGVkIGFzIGZvbGxvd3Mg
KGFzc3VtaW5nIHdlIHN0b3JlIG9uZS1ieXRlCi0gKiBjaGFyYWN0ZXJzIG9uIGEgNjQtYml0IG1h
Y2hpbmUpOiAoYSkgInNtYWxsIiBzdHJpbmdzIGJldHdlZW4gMCBhbmQKLSAqIDIzIGNoYXJzIGFy
ZSBzdG9yZWQgaW4tc2l0dSB3aXRob3V0IGFsbG9jYXRpb24gKHRoZSByaWdodG1vc3QgYnl0ZQot
ICogc3RvcmVzIHRoZSBzaXplKTsgKGIpICJtZWRpdW0iIHN0cmluZ3MgZnJvbSAyNCB0aHJvdWdo
IDI1NCBjaGFycwotICogYXJlIHN0b3JlZCBpbiBtYWxsb2MtYWxsb2NhdGVkIG1lbW9yeSB0aGF0
IGlzIGNvcGllZCBlYWdlcmx5OyAoYykKLSAqICJsYXJnZSIgc3RyaW5ncyBvZiAyNTUgY2hhcnMg
YW5kIGFib3ZlIGFyZSBzdG9yZWQgaW4gYSBzaW1pbGFyCi0gKiBzdHJ1Y3R1cmUgYXMgbWVkaXVt
IGFycmF5cywgZXhjZXB0IHRoYXQgdGhlIHN0cmluZyBpcwotICogcmVmZXJlbmNlLWNvdW50ZWQg
YW5kIGNvcGllZCBsYXppbHkuIHRoZSByZWZlcmVuY2UgY291bnQgaXMKLSAqIGFsbG9jYXRlZCBy
aWdodCBiZWZvcmUgdGhlIGNoYXJhY3RlciBhcnJheS4KLSAqCi0gKiBUaGUgZGlzY3JpbWluYXRv
ciBiZXR3ZWVuIHRoZXNlIHRocmVlIHN0cmF0ZWdpZXMgc2l0cyBpbiB0d28KLSAqIGJpdHMgb2Yg
dGhlIHJpZ2h0bW9zdCBjaGFyIG9mIHRoZSBzdG9yYWdlLiBJZiBuZWl0aGVyIGlzIHNldCwgdGhl
biB0aGUKLSAqIHN0cmluZyBpcyBzbWFsbCAoYW5kIGl0cyBsZW5ndGggc2l0cyBpbiB0aGUgbG93
ZXItb3JkZXIgYml0cyBvbgotICogbGl0dGxlLWVuZGlhbiBvciB0aGUgaGlnaC1vcmRlciBiaXRz
IG9uIGJpZy1lbmRpYW4gb2YgdGhhdAotICogcmlnaHRtb3N0IGNoYXJhY3RlcikuIElmIHRoZSBN
U2IgaXMgc2V0LCB0aGUgc3RyaW5nIGlzIG1lZGl1bSB3aWR0aC4KLSAqIElmIHRoZSBzZWNvbmQg
TVNiIGlzIHNldCwgdGhlbiB0aGUgc3RyaW5nIGlzIGxhcmdlLiBPbiBsaXR0bGUtZW5kaWFuLAot
ICogdGhlc2UgMiBiaXRzIGFyZSB0aGUgMiBNU2JzIG9mIE1lZGl1bUxhcmdlOjpjYXBhY2l0eV8s
IHdoaWxlIG9uCi0gKiBiaWctZW5kaWFuLCB0aGVzZSAyIGJpdHMgYXJlIHRoZSAyIExTYnMuIFRo
aXMga2VlcHMgYm90aCBsaXR0bGUtZW5kaWFuCi0gKiBhbmQgYmlnLWVuZGlhbiBmYnN0cmluZ19j
b3JlIGVxdWl2YWxlbnQgd2l0aCBtZXJlbHkgZGlmZmVyZW50IG9wcyB1c2VkCi0gKiB0byBleHRy
YWN0IGNhcGFjaXR5L2NhdGVnb3J5LgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgQ2hhcj4gY2xhc3Mg
ZmJzdHJpbmdfY29yZSB7Ci1wcm90ZWN0ZWQ6Ci0vLyBJdCdzIE1TVkMsIHNvIHdlIGp1c3QgaGF2
ZSB0byBndWVzcyAuLi4gYW5kIGFsbG93IGFuIG92ZXJyaWRlCi0jaWZkZWYgX01TQ19WRVIKLSMg
aWZkZWYgRk9MTFlfRU5ESUFOX0JFCi0gIHN0YXRpYyBjb25zdGV4cHIgYXV0byBrSXNMaXR0bGVF
bmRpYW4gPSBmYWxzZTsKLSMgZWxzZQotICBzdGF0aWMgY29uc3RleHByIGF1dG8ga0lzTGl0dGxl
RW5kaWFuID0gdHJ1ZTsKLSMgZW5kaWYKLSNlbHNlCi0gIHN0YXRpYyBjb25zdGV4cHIgYXV0byBr
SXNMaXR0bGVFbmRpYW4gPQotICAgICAgX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9MSVRUTEVf
RU5ESUFOX187Ci0jZW5kaWYKLXB1YmxpYzoKLSAgZmJzdHJpbmdfY29yZSgpIG5vZXhjZXB0IHsg
cmVzZXQoKTsgfQotCi0gIGZic3RyaW5nX2NvcmUoY29uc3QgZmJzdHJpbmdfY29yZSAmIHJocykg
ewotICAgIEZCU1RSSU5HX0FTU0VSVCgmcmhzICE9IHRoaXMpOwotICAgIHN3aXRjaCAocmhzLmNh
dGVnb3J5KCkpIHsKLSAgICAgIGNhc2UgQ2F0ZWdvcnk6OmlzU21hbGw6Ci0gICAgICAgIGNvcHlT
bWFsbChyaHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ2F0ZWdvcnk6OmlzTWVkaXVt
OgotICAgICAgICBjb3B5TWVkaXVtKHJocyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBD
YXRlZ29yeTo6aXNMYXJnZToKLSAgICAgICAgY29weUxhcmdlKHJocyk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZmJzdHJpbmdfZGV0YWlsOjphc3N1bWVfdW5yZWFj
aGFibGUoKTsKLSAgICB9Ci0gICAgRkJTVFJJTkdfQVNTRVJUKHNpemUoKSA9PSByaHMuc2l6ZSgp
KTsKLSAgICBGQlNUUklOR19BU1NFUlQobWVtY21wKGRhdGEoKSwgcmhzLmRhdGEoKSwgc2l6ZSgp
ICogc2l6ZW9mKENoYXIpKSA9PSAwKTsKLSAgfQotCi0gIGZic3RyaW5nX2NvcmUoZmJzdHJpbmdf
Y29yZSYmIGdvbmVyKSBub2V4Y2VwdCB7Ci0gICAgLy8gVGFrZSBnb25lcidzIGd1dHMKLSAgICBt
bF8gPSBnb25lci5tbF87Ci0gICAgLy8gQ2xlYW4gZ29uZXIncyBjYXJjYXNzCi0gICAgZ29uZXIu
cmVzZXQoKTsKLSAgfQotCi0gIGZic3RyaW5nX2NvcmUoY29uc3QgQ2hhciAqY29uc3QgZGF0YSwK
LSAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAgICBib29s
IGRpc2FibGVTU08gPSBGQlNUUklOR19ESVNBQkxFX1NTTykgewotICAgIGlmICghZGlzYWJsZVNT
TyAmJiBzaXplIDw9IG1heFNtYWxsU2l6ZSkgewotICAgICAgaW5pdFNtYWxsKGRhdGEsIHNpemUp
OwotICAgIH0gZWxzZSBpZiAoc2l6ZSA8PSBtYXhNZWRpdW1TaXplKSB7Ci0gICAgICBpbml0TWVk
aXVtKGRhdGEsIHNpemUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpbml0TGFyZ2UoZGF0YSwgc2l6
ZSk7Ci0gICAgfQotICAgIEZCU1RSSU5HX0FTU0VSVCh0aGlzLT5zaXplKCkgPT0gc2l6ZSk7Ci0g
ICAgRkJTVFJJTkdfQVNTRVJUKAotICAgICAgICBzaXplID09IDAgfHwgbWVtY21wKHRoaXMtPmRh
dGEoKSwgZGF0YSwgc2l6ZSAqIHNpemVvZihDaGFyKSkgPT0gMCk7Ci0gIH0KLQotICB+ZmJzdHJp
bmdfY29yZSgpIG5vZXhjZXB0IHsKLSAgICBpZiAoY2F0ZWdvcnkoKSA9PSBDYXRlZ29yeTo6aXNT
bWFsbCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBkZXN0cm95TWVkaXVtTGFyZ2UoKTsK
LSAgfQotCi0gIC8vIFNuYXRjaGVzIGEgcHJldmlvdXNseSBtYWxsb2NhdGVkIHN0cmluZy4gVGhl
IHBhcmFtZXRlciAic2l6ZSIKLSAgLy8gaXMgdGhlIHNpemUgb2YgdGhlIHN0cmluZywgYW5kIHRo
ZSBwYXJhbWV0ZXIgImFsbG9jYXRlZFNpemUiCi0gIC8vIGlzIHRoZSBzaXplIG9mIHRoZSBtYWxs
b2NhdGVkIGJsb2NrLiAgVGhlIHN0cmluZyBtdXN0IGJlCi0gIC8vIFwwLXRlcm1pbmF0ZWQsIHNv
IGFsbG9jYXRlZFNpemUgPj0gc2l6ZSArIDEgYW5kIGRhdGFbc2l6ZV0gPT0gJ1wwJy4KLSAgLy8K
LSAgLy8gU28gaWYgeW91IHdhbnQgYSAyLWNoYXJhY3RlciBzdHJpbmcsIHBhc3MgbWFsbG9jKDMp
IGFzICJkYXRhIiwKLSAgLy8gcGFzcyAyIGFzICJzaXplIiwgYW5kIHBhc3MgMyBhcyAiYWxsb2Nh
dGVkU2l6ZSIuCi0gIGZic3RyaW5nX2NvcmUoQ2hhciAqIGNvbnN0IGRhdGEsCi0gICAgICAgICAg
ICAgICAgY29uc3Qgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFs
bG9jYXRlZFNpemUsCi0gICAgICAgICAgICAgICAgQWNxdWlyZU1hbGxvY2F0ZWRTdHJpbmcpIHsK
LSAgICBpZiAoc2l6ZSA+IDApIHsKLSAgICAgIEZCU1RSSU5HX0FTU0VSVChhbGxvY2F0ZWRTaXpl
ID49IHNpemUgKyAxKTsKLSAgICAgIEZCU1RSSU5HX0FTU0VSVChkYXRhW3NpemVdID09ICdcMCcp
OwotICAgICAgLy8gVXNlIHRoZSBtZWRpdW0gc3RyaW5nIHN0b3JhZ2UKLSAgICAgIG1sXy5kYXRh
XyA9IGRhdGE7Ci0gICAgICBtbF8uc2l6ZV8gPSBzaXplOwotICAgICAgLy8gRG9uJ3QgZm9yZ2V0
IGFib3V0IG51bGwgdGVybWluYXRvcgotICAgICAgbWxfLnNldENhcGFjaXR5KGFsbG9jYXRlZFNp
emUgLSAxLCBDYXRlZ29yeTo6aXNNZWRpdW0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBObyBu
ZWVkIGZvciB0aGUgbWVtb3J5Ci0gICAgICBmcmVlKGRhdGEpOwotICAgICAgcmVzZXQoKTsKLSAg
ICB9Ci0gIH0KLQotICAvLyBzd2FwIGJlbG93IGRvZXNuJ3QgdGVzdCB3aGV0aGVyICZyaHMgPT0g
dGhpcyAoYW5kIGluc3RlYWQKLSAgLy8gcG90ZW50aWFsbHkgZG9lcyBleHRyYSB3b3JrKSBvbiB0
aGUgcHJlbWlzZSB0aGF0IHRoZSByYXJpdHkgb2YKLSAgLy8gdGhhdCBzaXR1YXRpb24gYWN0dWFs
bHkgbWFrZXMgdGhlIGNoZWNrIG1vcmUgZXhwZW5zaXZlIHRoYW4gaXMKLSAgLy8gd29ydGguCi0g
IHZvaWQgc3dhcChmYnN0cmluZ19jb3JlICYgcmhzKSB7Ci0gICAgYXV0byBjb25zdCB0ID0gbWxf
OwotICAgIG1sXyA9IHJocy5tbF87Ci0gICAgcmhzLm1sXyA9IHQ7Ci0gIH0KLQotICAvLyBJbiBD
KysxMSBkYXRhKCkgYW5kIGNfc3RyKCkgYXJlIDEwMCUgZXF1aXZhbGVudC4KLSAgY29uc3QgQ2hh
ciAqIGRhdGEoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGNfc3RyKCk7Ci0gIH0KLQotICBDaGFyKiBt
dXRhYmxlRGF0YSgpIHsKLSAgICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKLSAgICBjYXNlIENhdGVn
b3J5Ojppc1NtYWxsOgotICAgICAgcmV0dXJuIHNtYWxsXzsKLSAgICBjYXNlIENhdGVnb3J5Ojpp
c01lZGl1bToKLSAgICAgIHJldHVybiBtbF8uZGF0YV87Ci0gICAgY2FzZSBDYXRlZ29yeTo6aXNM
YXJnZToKLSAgICAgIHJldHVybiBtdXRhYmxlRGF0YUxhcmdlKCk7Ci0gICAgfQotICAgIGZic3Ry
aW5nX2RldGFpbDo6YXNzdW1lX3VucmVhY2hhYmxlKCk7Ci0gIH0KLQotICBjb25zdCBDaGFyKiBj
X3N0cigpIGNvbnN0IHsKLSAgICBjb25zdCBDaGFyKiBwdHIgPSBtbF8uZGF0YV87Ci0gICAgLy8g
V2l0aCB0aGlzIHN5bnRheCwgR0NDIGFuZCBDbGFuZyBnZW5lcmF0ZSBhIENNT1YgaW5zdGVhZCBv
ZiBhIGJyYW5jaC4KLSAgICBwdHIgPSAoY2F0ZWdvcnkoKSA9PSBDYXRlZ29yeTo6aXNTbWFsbCkg
PyBzbWFsbF8gOiBwdHI7Ci0gICAgcmV0dXJuIHB0cjsKLSAgfQotCi0gIHZvaWQgc2hyaW5rKGNv
bnN0IHNpemVfdCBkZWx0YSkgewotICAgIGlmIChjYXRlZ29yeSgpID09IENhdGVnb3J5Ojppc1Nt
YWxsKSB7Ci0gICAgICBzaHJpbmtTbWFsbChkZWx0YSk7Ci0gICAgfSBlbHNlIGlmIChjYXRlZ29y
eSgpID09IENhdGVnb3J5Ojppc01lZGl1bSB8fAotICAgICAgICAgICAgICAgUmVmQ291bnRlZDo6
cmVmcyhtbF8uZGF0YV8pID09IDEpIHsKLSAgICAgIHNocmlua01lZGl1bShkZWx0YSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIHNocmlua0xhcmdlKGRlbHRhKTsKLSAgICB9Ci0gIH0KLQotICBGT0xM
WV9NQUxMT0NfTk9JTkxJTkUKLSAgdm9pZCByZXNlcnZlKHNpemVfdCBtaW5DYXBhY2l0eSwgYm9v
bCBkaXNhYmxlU1NPID0gRkJTVFJJTkdfRElTQUJMRV9TU08pIHsKLSAgICBzd2l0Y2ggKGNhdGVn
b3J5KCkpIHsKLSAgICAgIGNhc2UgQ2F0ZWdvcnk6OmlzU21hbGw6Ci0gICAgICAgIHJlc2VydmVT
bWFsbChtaW5DYXBhY2l0eSwgZGlzYWJsZVNTTyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBDYXRlZ29yeTo6aXNNZWRpdW06Ci0gICAgICAgIHJlc2VydmVNZWRpdW0obWluQ2FwYWNpdHkp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ2F0ZWdvcnk6OmlzTGFyZ2U6Ci0gICAgICAg
IHJlc2VydmVMYXJnZShtaW5DYXBhY2l0eSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgZmJzdHJpbmdfZGV0YWlsOjphc3N1bWVfdW5yZWFjaGFibGUoKTsKLSAgICB9
Ci0gICAgRkJTVFJJTkdfQVNTRVJUKGNhcGFjaXR5KCkgPj0gbWluQ2FwYWNpdHkpOwotICB9Ci0K
LSAgQ2hhciogZXhwYW5kTm9pbml0KAotICAgICAgY29uc3Qgc2l6ZV90IGRlbHRhLAotICAgICAg
Ym9vbCBleHBHcm93dGggPSBmYWxzZSwKLSAgICAgIGJvb2wgZGlzYWJsZVNTTyA9IEZCU1RSSU5H
X0RJU0FCTEVfU1NPKTsKLQotICB2b2lkIHB1c2hfYmFjayhDaGFyIGMpIHsKLSAgICAqZXhwYW5k
Tm9pbml0KDEsIC8qIGV4cEdyb3d0aCA9ICovIHRydWUpID0gYzsKLSAgfQotCi0gIHNpemVfdCBz
aXplKCkgY29uc3QgewotICAgIHNpemVfdCByZXQgPSBtbF8uc2l6ZV87Ci0gICAgLyogc3RhdGlj
ICovIGlmIChrSXNMaXR0bGVFbmRpYW4pIHsKLSAgICAgIC8vIFdlIGNhbiBzYXZlIGEgY291cGxl
IGluc3RydWN0aW9ucywgYmVjYXVzZSB0aGUgY2F0ZWdvcnkgaXMKLSAgICAgIC8vIHNtYWxsIGlm
ZiB0aGUgbGFzdCBjaGFyLCBhcyB1bnNpZ25lZCwgaXMgPD0gbWF4U21hbGxTaXplLgotICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8Q2hhcj46OnR5cGUgVUNoYXI7Ci0g
ICAgICBhdXRvIG1heWJlU21hbGxTaXplID0gc2l6ZV90KG1heFNtYWxsU2l6ZSkgLQotICAgICAg
ICAgIHNpemVfdChzdGF0aWNfY2FzdDxVQ2hhcj4oc21hbGxfW21heFNtYWxsU2l6ZV0pKTsKLSAg
ICAgIC8vIFdpdGggdGhpcyBzeW50YXgsIEdDQyBhbmQgQ2xhbmcgZ2VuZXJhdGUgYSBDTU9WIGlu
c3RlYWQgb2YgYSBicmFuY2guCi0gICAgICByZXQgPSAoc3RhdGljX2Nhc3Q8c3NpemVfdD4obWF5
YmVTbWFsbFNpemUpID49IDApID8gbWF5YmVTbWFsbFNpemUgOiByZXQ7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIHJldCA9IChjYXRlZ29yeSgpID09IENhdGVnb3J5Ojppc1NtYWxsKSA/IHNtYWxsU2l6
ZSgpIDogcmV0OwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgc2l6ZV90IGNhcGFj
aXR5KCkgY29uc3QgewotICAgIHN3aXRjaCAoY2F0ZWdvcnkoKSkgewotICAgICAgY2FzZSBDYXRl
Z29yeTo6aXNTbWFsbDoKLSAgICAgICAgcmV0dXJuIG1heFNtYWxsU2l6ZTsKLSAgICAgIGNhc2Ug
Q2F0ZWdvcnk6OmlzTGFyZ2U6Ci0gICAgICAgIC8vIEZvciBsYXJnZS1zaXplZCBzdHJpbmdzLCBh
IG11bHRpLXJlZmVyZW5jZWQgY2h1bmsgaGFzIG5vCi0gICAgICAgIC8vIGF2YWlsYWJsZSBjYXBh
Y2l0eS4gVGhpcyBpcyBiZWNhdXNlIGFueSBhdHRlbXB0IHRvIGFwcGVuZAotICAgICAgICAvLyBk
YXRhIHdvdWxkIHRyaWdnZXIgYSBuZXcgYWxsb2NhdGlvbi4KLSAgICAgICAgaWYgKFJlZkNvdW50
ZWQ6OnJlZnMobWxfLmRhdGFfKSA+IDEpIHsKLSAgICAgICAgICByZXR1cm4gbWxfLnNpemVfOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIHJldHVybiBtbF8uY2FwYWNpdHkoKTsKLSAgfQotCi0gIGJvb2wgaXNTaGFy
ZWQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGNhdGVnb3J5KCkgPT0gQ2F0ZWdvcnk6OmlzTGFyZ2Ug
JiYgUmVmQ291bnRlZDo6cmVmcyhtbF8uZGF0YV8pID4gMTsKLSAgfQotCi1wcml2YXRlOgotICAv
LyBEaXNhYmxlZAotICBmYnN0cmluZ19jb3JlICYgb3BlcmF0b3I9KGNvbnN0IGZic3RyaW5nX2Nv
cmUgJiByaHMpOwotCi0gIHZvaWQgcmVzZXQoKSB7Ci0gICAgc2V0U21hbGxTaXplKDApOwotICB9
Ci0KLSAgRk9MTFlfTUFMTE9DX05PSU5MSU5FIHZvaWQgZGVzdHJveU1lZGl1bUxhcmdlKCkgbm9l
eGNlcHQgewotICAgIGF1dG8gY29uc3QgYyA9IGNhdGVnb3J5KCk7Ci0gICAgRkJTVFJJTkdfQVNT
RVJUKGMgIT0gQ2F0ZWdvcnk6OmlzU21hbGwpOwotICAgIGlmIChjID09IENhdGVnb3J5Ojppc01l
ZGl1bSkgewotICAgICAgZnJlZShtbF8uZGF0YV8pOwotICAgIH0gZWxzZSB7Ci0gICAgICBSZWZD
b3VudGVkOjpkZWNyZW1lbnRSZWZzKG1sXy5kYXRhXyk7Ci0gICAgfQotICB9Ci0KLSAgc3RydWN0
IFJlZkNvdW50ZWQgewotICAgIHN0ZDo6YXRvbWljPHNpemVfdD4gcmVmQ291bnRfOwotICAgIENo
YXIgZGF0YV9bMV07Ci0KLSAgICBjb25zdGV4cHIgc3RhdGljIHNpemVfdCBnZXREYXRhT2Zmc2V0
KCkgewotICAgICAgcmV0dXJuIG9mZnNldG9mKFJlZkNvdW50ZWQsIGRhdGFfKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgUmVmQ291bnRlZCAqIGZyb21EYXRhKENoYXIgKiBwKSB7Ci0gICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVmQ291bnRlZCo+KHN0YXRpY19jYXN0PHZvaWQqPigKLSAgICAgICAg
ICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KHApKSAtCi0g
ICAgICAgICAgZ2V0RGF0YU9mZnNldCgpKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHNpemVfdCBy
ZWZzKENoYXIgKiBwKSB7Ci0gICAgICByZXR1cm4gZnJvbURhdGEocCktPnJlZkNvdW50Xy5sb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGlu
Y3JlbWVudFJlZnMoQ2hhciAqIHApIHsKLSAgICAgIGZyb21EYXRhKHApLT5yZWZDb3VudF8uZmV0
Y2hfYWRkKDEsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpOwotICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIGRlY3JlbWVudFJlZnMoQ2hhciAqIHApIHsKLSAgICAgIGF1dG8gY29uc3QgZGlzID0g
ZnJvbURhdGEocCk7Ci0gICAgICBzaXplX3Qgb2xkY250ID0gZGlzLT5yZWZDb3VudF8uZmV0Y2hf
c3ViKDEsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWwpOwotICAgICAgRkJTVFJJTkdfQVNTRVJU
KG9sZGNudCA+IDApOwotICAgICAgaWYgKG9sZGNudCA9PSAxKSB7Ci0gICAgICAgIGZyZWUoZGlz
KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVmQ291bnRlZCAqIGNyZWF0ZShzaXpl
X3QgKiBzaXplKSB7Ci0gICAgICBjb25zdCBzaXplX3QgYWxsb2NTaXplID0KLSAgICAgICAgICBn
b29kTWFsbG9jU2l6ZShnZXREYXRhT2Zmc2V0KCkgKyAoKnNpemUgKyAxKSAqIHNpemVvZihDaGFy
KSk7Ci0gICAgICBhdXRvIHJlc3VsdCA9IHN0YXRpY19jYXN0PFJlZkNvdW50ZWQqPihjaGVja2Vk
TWFsbG9jKGFsbG9jU2l6ZSkpOwotICAgICAgcmVzdWx0LT5yZWZDb3VudF8uc3RvcmUoMSwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgICAqc2l6ZSA9IChhbGxvY1NpemUgLSBnZXRE
YXRhT2Zmc2V0KCkpIC8gc2l6ZW9mKENoYXIpIC0gMTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotCi0gICAgc3RhdGljIFJlZkNvdW50ZWQgKiBjcmVhdGUoY29uc3QgQ2hhciAqIGRhdGEs
IHNpemVfdCAqIHNpemUpIHsKLSAgICAgIGNvbnN0IHNpemVfdCBlZmZlY3RpdmVTaXplID0gKnNp
emU7Ci0gICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZShzaXplKTsKLSAgICAgIGlmIChGQlNUUklO
R19MSUtFTFkoZWZmZWN0aXZlU2l6ZSA+IDApKSB7Ci0gICAgICAgIGZic3RyaW5nX2RldGFpbDo6
cG9kQ29weShkYXRhLCBkYXRhICsgZWZmZWN0aXZlU2l6ZSwgcmVzdWx0LT5kYXRhXyk7Ci0gICAg
ICB9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHN0YXRpYyBSZWZDb3VudGVk
ICogcmVhbGxvY2F0ZShDaGFyICpjb25zdCBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzaXplX3QgY3VycmVudFNpemUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBjdXJyZW50Q2FwYWNpdHksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG5ld0NhcGFjaXR5KSB7Ci0gICAgICBG
QlNUUklOR19BU1NFUlQoKm5ld0NhcGFjaXR5ID4gMCAmJiAqbmV3Q2FwYWNpdHkgPiBjdXJyZW50
U2l6ZSk7Ci0gICAgICBjb25zdCBzaXplX3QgYWxsb2NOZXdDYXBhY2l0eSA9Ci0gICAgICAgICAg
Z29vZE1hbGxvY1NpemUoZ2V0RGF0YU9mZnNldCgpICsgKCpuZXdDYXBhY2l0eSArIDEpICogc2l6
ZW9mKENoYXIpKTsKLSAgICAgIGF1dG8gY29uc3QgZGlzID0gZnJvbURhdGEoZGF0YSk7Ci0gICAg
ICBGQlNUUklOR19BU1NFUlQoZGlzLT5yZWZDb3VudF8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9h
Y3F1aXJlKSA9PSAxKTsKLSAgICAgIGF1dG8gcmVzdWx0ID0gc3RhdGljX2Nhc3Q8UmVmQ291bnRl
ZCo+KHNtYXJ0UmVhbGxvYygKLSAgICAgICAgICBkaXMsCi0gICAgICAgICAgZ2V0RGF0YU9mZnNl
dCgpICsgKGN1cnJlbnRTaXplICsgMSkgKiBzaXplb2YoQ2hhciksCi0gICAgICAgICAgZ2V0RGF0
YU9mZnNldCgpICsgKGN1cnJlbnRDYXBhY2l0eSArIDEpICogc2l6ZW9mKENoYXIpLAotICAgICAg
ICAgIGFsbG9jTmV3Q2FwYWNpdHkpKTsKLSAgICAgIEZCU1RSSU5HX0FTU0VSVChyZXN1bHQtPnJl
ZkNvdW50Xy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpID09IDEpOwotICAgICAgKm5l
d0NhcGFjaXR5ID0gKGFsbG9jTmV3Q2FwYWNpdHkgLSBnZXREYXRhT2Zmc2V0KCkpIC8gc2l6ZW9m
KENoYXIpIC0gMTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICB9OwotCi0gIHR5cGVk
ZWYgdWludDhfdCBjYXRlZ29yeV90eXBlOwotCi0gIGVudW0gY2xhc3MgQ2F0ZWdvcnkgOiBjYXRl
Z29yeV90eXBlIHsKLSAgICBpc1NtYWxsID0gMCwKLSAgICBpc01lZGl1bSA9IGtJc0xpdHRsZUVu
ZGlhbiA/IDB4ODAgOiAweDIsCi0gICAgaXNMYXJnZSA9IGtJc0xpdHRsZUVuZGlhbiA/IDB4NDAg
OiAweDEsCi0gIH07Ci0KLSAgQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7Ci0gICAgLy8gd29y
a3MgZm9yIGJvdGggYmlnLWVuZGlhbiBhbmQgbGl0dGxlLWVuZGlhbgotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDYXRlZ29yeT4oYnl0ZXNfW2xhc3RDaGFyXSAmIGNhdGVnb3J5RXh0cmFjdE1hc2sp
OwotICB9Ci0KLSAgc3RydWN0IE1lZGl1bUxhcmdlIHsKLSAgICBDaGFyICogZGF0YV87Ci0gICAg
c2l6ZV90IHNpemVfOwotICAgIHNpemVfdCBjYXBhY2l0eV87Ci0KLSAgICBzaXplX3QgY2FwYWNp
dHkoKSBjb25zdCB7Ci0gICAgICByZXR1cm4ga0lzTGl0dGxlRW5kaWFuCi0gICAgICAgID8gY2Fw
YWNpdHlfICYgY2FwYWNpdHlFeHRyYWN0TWFzawotICAgICAgICA6IGNhcGFjaXR5XyA+PiAyOwot
ICAgIH0KLQotICAgIHZvaWQgc2V0Q2FwYWNpdHkoc2l6ZV90IGNhcCwgQ2F0ZWdvcnkgY2F0KSB7
Ci0gICAgICBjYXBhY2l0eV8gPSBrSXNMaXR0bGVFbmRpYW4KLSAgICAgICAgICA/IGNhcCB8IChz
dGF0aWNfY2FzdDxzaXplX3Q+KGNhdCkgPDwga0NhdGVnb3J5U2hpZnQpCi0gICAgICAgICAgOiAo
Y2FwIDw8IDIpIHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihjYXQpOwotICAgIH0KLSAgfTsKLQotICB1
bmlvbiB7Ci0gICAgdWludDhfdCBieXRlc19bc2l6ZW9mKE1lZGl1bUxhcmdlKV07IC8vIEZvciBh
Y2Nlc3NpbmcgdGhlIGxhc3QgYnl0ZS4KLSAgICBDaGFyIHNtYWxsX1tzaXplb2YoTWVkaXVtTGFy
Z2UpIC8gc2l6ZW9mKENoYXIpXTsKLSAgICBNZWRpdW1MYXJnZSBtbF87Ci0gIH07Ci0KLSAgY29u
c3RleHByIHN0YXRpYyBzaXplX3QgbGFzdENoYXIgPSBzaXplb2YoTWVkaXVtTGFyZ2UpIC0gMTsK
LSAgY29uc3RleHByIHN0YXRpYyBzaXplX3QgbWF4U21hbGxTaXplID0gbGFzdENoYXIgLyBzaXpl
b2YoQ2hhcik7Ci0gIGNvbnN0ZXhwciBzdGF0aWMgc2l6ZV90IG1heE1lZGl1bVNpemUgPSAyNTQg
LyBzaXplb2YoQ2hhcik7Ci0gIGNvbnN0ZXhwciBzdGF0aWMgdWludDhfdCBjYXRlZ29yeUV4dHJh
Y3RNYXNrID0ga0lzTGl0dGxlRW5kaWFuID8gMHhDMCA6IDB4MzsKLSAgY29uc3RleHByIHN0YXRp
YyBzaXplX3Qga0NhdGVnb3J5U2hpZnQgPSAoc2l6ZW9mKHNpemVfdCkgLSAxKSAqIDg7Ci0gIGNv
bnN0ZXhwciBzdGF0aWMgc2l6ZV90IGNhcGFjaXR5RXh0cmFjdE1hc2sgPSBrSXNMaXR0bGVFbmRp
YW4KLSAgICAgID8gfihzaXplX3QoY2F0ZWdvcnlFeHRyYWN0TWFzaykgPDwga0NhdGVnb3J5U2hp
ZnQpCi0gICAgICA6IDB4MCAvKiB1bnVzZWQgKi87Ci0KLSAgc3RhdGljX2Fzc2VydCghKHNpemVv
ZihNZWRpdW1MYXJnZSkgJSBzaXplb2YoQ2hhcikpLAotICAgICAgICAgICAgICAgICJDb3JydXB0
IG1lbW9yeSBsYXlvdXQgZm9yIGZic3RyaW5nLiIpOwotCi0gIHNpemVfdCBzbWFsbFNpemUoKSBj
b25zdCB7Ci0gICAgRkJTVFJJTkdfQVNTRVJUKGNhdGVnb3J5KCkgPT0gQ2F0ZWdvcnk6OmlzU21h
bGwpOwotICAgIGNvbnN0ZXhwciBhdXRvIHNoaWZ0ID0ga0lzTGl0dGxlRW5kaWFuID8gMCA6IDI7
Ci0gICAgYXV0byBzbWFsbFNoaWZ0ZWQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNtYWxsX1ttYXhT
bWFsbFNpemVdKSA+PiBzaGlmdDsKLSAgICBGQlNUUklOR19BU1NFUlQoc3RhdGljX2Nhc3Q8c2l6
ZV90PihtYXhTbWFsbFNpemUpID49IHNtYWxsU2hpZnRlZCk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PHNpemVfdD4obWF4U21hbGxTaXplKSAtIHNtYWxsU2hpZnRlZDsKLSAgfQotCi0gIHZvaWQg
c2V0U21hbGxTaXplKHNpemVfdCBzKSB7Ci0gICAgLy8gV2FybmluZzogdGhpcyBzaG91bGQgd29y
ayB3aXRoIHVuaW5pdGlhbGl6ZWQgc3RyaW5ncyB0b28sCi0gICAgLy8gc28gZG9uJ3QgYXNzdW1l
IGFueXRoaW5nIGFib3V0IHRoZSBwcmV2aW91cyB2YWx1ZSBvZgotICAgIC8vIHNtYWxsX1ttYXhT
bWFsbFNpemVdLgotICAgIEZCU1RSSU5HX0FTU0VSVChzIDw9IG1heFNtYWxsU2l6ZSk7Ci0gICAg
Y29uc3RleHByIGF1dG8gc2hpZnQgPSBrSXNMaXR0bGVFbmRpYW4gPyAwIDogMjsKLSAgICBzbWFs
bF9bbWF4U21hbGxTaXplXSA9IGNoYXIoKG1heFNtYWxsU2l6ZSAtIHMpIDw8IHNoaWZ0KTsKLSAg
ICBzbWFsbF9bc10gPSAnXDAnOwotICAgIEZCU1RSSU5HX0FTU0VSVChjYXRlZ29yeSgpID09IENh
dGVnb3J5Ojppc1NtYWxsICYmIHNpemUoKSA9PSBzKTsKLSAgfQotCi0gIHZvaWQgY29weVNtYWxs
KGNvbnN0IGZic3RyaW5nX2NvcmUmKTsKLSAgdm9pZCBjb3B5TWVkaXVtKGNvbnN0IGZic3RyaW5n
X2NvcmUmKTsKLSAgdm9pZCBjb3B5TGFyZ2UoY29uc3QgZmJzdHJpbmdfY29yZSYpOwotCi0gIHZv
aWQgaW5pdFNtYWxsKGNvbnN0IENoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsKLSAgdm9pZCBpbml0
TWVkaXVtKGNvbnN0IENoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsKLSAgdm9pZCBpbml0TGFyZ2Uo
Y29uc3QgQ2hhciogZGF0YSwgc2l6ZV90IHNpemUpOwotCi0gIHZvaWQgcmVzZXJ2ZVNtYWxsKHNp
emVfdCBtaW5DYXBhY2l0eSwgYm9vbCBkaXNhYmxlU1NPKTsKLSAgdm9pZCByZXNlcnZlTWVkaXVt
KHNpemVfdCBtaW5DYXBhY2l0eSk7Ci0gIHZvaWQgcmVzZXJ2ZUxhcmdlKHNpemVfdCBtaW5DYXBh
Y2l0eSk7Ci0KLSAgdm9pZCBzaHJpbmtTbWFsbChzaXplX3QgZGVsdGEpOwotICB2b2lkIHNocmlu
a01lZGl1bShzaXplX3QgZGVsdGEpOwotICB2b2lkIHNocmlua0xhcmdlKHNpemVfdCBkZWx0YSk7
Ci0KLSAgdm9pZCB1bnNoYXJlKHNpemVfdCBtaW5DYXBhY2l0eSA9IDApOwotICBDaGFyKiBtdXRh
YmxlRGF0YUxhcmdlKCk7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgQ2hhcj4KLWlubGluZSB2b2lk
IGZic3RyaW5nX2NvcmU8Q2hhcj46OmNvcHlTbWFsbChjb25zdCBmYnN0cmluZ19jb3JlJiByaHMp
IHsKLSAgc3RhdGljX2Fzc2VydChvZmZzZXRvZihNZWRpdW1MYXJnZSwgZGF0YV8pID09IDAsICJm
YnN0cmluZyBsYXlvdXQgZmFpbHVyZSIpOwotICBzdGF0aWNfYXNzZXJ0KAotICAgICAgb2Zmc2V0
b2YoTWVkaXVtTGFyZ2UsIHNpemVfKSA9PSBzaXplb2YobWxfLmRhdGFfKSwKLSAgICAgICJmYnN0
cmluZyBsYXlvdXQgZmFpbHVyZSIpOwotICBzdGF0aWNfYXNzZXJ0KAotICAgICAgb2Zmc2V0b2Yo
TWVkaXVtTGFyZ2UsIGNhcGFjaXR5XykgPT0gMiAqIHNpemVvZihtbF8uZGF0YV8pLAotICAgICAg
ImZic3RyaW5nIGxheW91dCBmYWlsdXJlIik7Ci0gIC8vIEp1c3Qgd3JpdGUgdGhlIHdob2xlIHRo
aW5nLCBkb24ndCBsb29rIGF0IGRldGFpbHMuIEluCi0gIC8vIHBhcnRpY3VsYXIgd2UgbmVlZCB0
byBjb3B5IGNhcGFjaXR5IGFueXdheSBiZWNhdXNlIHdlIHdhbnQKLSAgLy8gdG8gc2V0IHRoZSBz
aXplIChkb24ndCBmb3JnZXQgdGhhdCB0aGUgbGFzdCBjaGFyYWN0ZXIsCi0gIC8vIHdoaWNoIHN0
b3JlcyBhIHNob3J0IHN0cmluZydzIGxlbmd0aCwgaXMgc2hhcmVkIHdpdGggdGhlCi0gIC8vIG1s
Xy5jYXBhY2l0eSBmaWVsZCkuCi0gIG1sXyA9IHJocy5tbF87Ci0gIEZCU1RSSU5HX0FTU0VSVCgK
LSAgICAgIGNhdGVnb3J5KCkgPT0gQ2F0ZWdvcnk6OmlzU21hbGwgJiYgdGhpcy0+c2l6ZSgpID09
IHJocy5zaXplKCkpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ2hhcj4KLUZPTExZX01BTExPQ19O
T0lOTElORSBpbmxpbmUgdm9pZCBmYnN0cmluZ19jb3JlPENoYXI+Ojpjb3B5TWVkaXVtKAotICAg
IGNvbnN0IGZic3RyaW5nX2NvcmUmIHJocykgewotICAvLyBNZWRpdW0gc3RyaW5ncyBhcmUgY29w
aWVkIGVhZ2VybHkuIERvbid0IGZvcmdldCB0byBhbGxvY2F0ZQotICAvLyBvbmUgZXh0cmEgQ2hh
ciBmb3IgdGhlIG51bGwgdGVybWluYXRvci4KLSAgYXV0byBjb25zdCBhbGxvY1NpemUgPSBnb29k
TWFsbG9jU2l6ZSgoMSArIHJocy5tbF8uc2l6ZV8pICogc2l6ZW9mKENoYXIpKTsKLSAgbWxfLmRh
dGFfID0gc3RhdGljX2Nhc3Q8Q2hhcio+KGNoZWNrZWRNYWxsb2MoYWxsb2NTaXplKSk7Ci0gIC8v
IEFsc28gY29waWVzIHRlcm1pbmF0b3IuCi0gIGZic3RyaW5nX2RldGFpbDo6cG9kQ29weSgKLSAg
ICAgIHJocy5tbF8uZGF0YV8sIHJocy5tbF8uZGF0YV8gKyByaHMubWxfLnNpemVfICsgMSwgbWxf
LmRhdGFfKTsKLSAgbWxfLnNpemVfID0gcmhzLm1sXy5zaXplXzsKLSAgbWxfLnNldENhcGFjaXR5
KGFsbG9jU2l6ZSAvIHNpemVvZihDaGFyKSAtIDEsIENhdGVnb3J5Ojppc01lZGl1bSk7Ci0gIEZC
U1RSSU5HX0FTU0VSVChjYXRlZ29yeSgpID09IENhdGVnb3J5Ojppc01lZGl1bSk7Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBDaGFyPgotRk9MTFlfTUFMTE9DX05PSU5MSU5FIGlubGluZSB2b2lkIGZi
c3RyaW5nX2NvcmU8Q2hhcj46OmNvcHlMYXJnZSgKLSAgICBjb25zdCBmYnN0cmluZ19jb3JlJiBy
aHMpIHsKLSAgLy8gTGFyZ2Ugc3RyaW5ncyBhcmUganVzdCByZWZjb3VudGVkCi0gIG1sXyA9IHJo
cy5tbF87Ci0gIFJlZkNvdW50ZWQ6OmluY3JlbWVudFJlZnMobWxfLmRhdGFfKTsKLSAgRkJTVFJJ
TkdfQVNTRVJUKGNhdGVnb3J5KCkgPT0gQ2F0ZWdvcnk6OmlzTGFyZ2UgJiYgc2l6ZSgpID09IHJo
cy5zaXplKCkpOwotfQotCi0vLyBTbWFsbCBzdHJpbmdzIGFyZSBiaXRibGl0dGVkCi10ZW1wbGF0
ZSA8Y2xhc3MgQ2hhcj4KLWlubGluZSB2b2lkIGZic3RyaW5nX2NvcmU8Q2hhcj46OmluaXRTbWFs
bCgKLSAgICBjb25zdCBDaGFyKiBjb25zdCBkYXRhLCBjb25zdCBzaXplX3Qgc2l6ZSkgewotICAv
LyBMYXlvdXQgaXM6IENoYXIqIGRhdGFfLCBzaXplX3Qgc2l6ZV8sIHNpemVfdCBjYXBhY2l0eV8K
LSAgc3RhdGljX2Fzc2VydCgKLSAgICAgIHNpemVvZigqdGhpcykgPT0gc2l6ZW9mKENoYXIqKSAr
IDIgKiBzaXplb2Yoc2l6ZV90KSwKLSAgICAgICJmYnN0cmluZyBoYXMgdW5leHBlY3RlZCBzaXpl
Iik7Ci0gIHN0YXRpY19hc3NlcnQoCi0gICAgICBzaXplb2YoQ2hhciopID09IHNpemVvZihzaXpl
X3QpLCAiZmJzdHJpbmcgc2l6ZSBhc3N1bXB0aW9uIHZpb2xhdGlvbiIpOwotICAvLyBzaXplb2Yo
c2l6ZV90KSBtdXN0IGJlIGEgcG93ZXIgb2YgMgotICBzdGF0aWNfYXNzZXJ0KAotICAgICAgKHNp
emVvZihzaXplX3QpICYgKHNpemVvZihzaXplX3QpIC0gMSkpID09IDAsCi0gICAgICAiZmJzdHJp
bmcgc2l6ZSBhc3N1bXB0aW9uIHZpb2xhdGlvbiIpOwotCi0vLyBJZiBkYXRhIGlzIGFsaWduZWQs
IHVzZSBmYXN0IHdvcmQtd2lzZSBjb3B5aW5nLiBPdGhlcndpc2UsCi0vLyB1c2UgY29uc2VydmF0
aXZlIG1lbWNweS4KLS8vIFRoZSB3b3JkLXdpc2UgcGF0aCByZWFkcyBieXRlcyB3aGljaCBhcmUg
b3V0c2lkZSB0aGUgcmFuZ2Ugb2YKLS8vIHRoZSBzdHJpbmcsIGFuZCBtYWtlcyBBU2FuIHVuaGFw
cHksIHNvIHdlIGRpc2FibGUgaXQgd2hlbgotLy8gY29tcGlsaW5nIHdpdGggQVNhbi4KLSNpZm5k
ZWYgRkJTVFJJTkdfU0FOSVRJWkVfQUREUkVTUwotICBpZiAoKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6
ZV90PihkYXRhKSAmIChzaXplb2Yoc2l6ZV90KSAtIDEpKSA9PSAwKSB7Ci0gICAgY29uc3Qgc2l6
ZV90IGJ5dGVTaXplID0gc2l6ZSAqIHNpemVvZihDaGFyKTsKLSAgICBjb25zdGV4cHIgc2l6ZV90
IHdvcmRXaWR0aCA9IHNpemVvZihzaXplX3QpOwotICAgIHN3aXRjaCAoKGJ5dGVTaXplICsgd29y
ZFdpZHRoIC0gMSkgLyB3b3JkV2lkdGgpIHsgLy8gTnVtYmVyIG9mIHdvcmRzLgotICAgICAgY2Fz
ZSAzOgotICAgICAgICBtbF8uY2FwYWNpdHlfID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzaXpl
X3QqPihkYXRhKVsyXTsKLSAgICAgICAgRk9MTFlfRkFMTFRIUk9VR0g7Ci0gICAgICBjYXNlIDI6
Ci0gICAgICAgIG1sXy5zaXplXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc2l6ZV90Kj4oZGF0
YSlbMV07Ci0gICAgICAgIEZPTExZX0ZBTExUSFJPVUdIOwotICAgICAgY2FzZSAxOgotICAgICAg
ICBtbF8uZGF0YV8gPSAqcmVpbnRlcnByZXRfY2FzdDxDaGFyKio+KGNvbnN0X2Nhc3Q8Q2hhcio+
KGRhdGEpKTsKLSAgICAgICAgRk9MTFlfRkFMTFRIUk9VR0g7Ci0gICAgICBjYXNlIDA6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgfSBlbHNlCi0jZW5kaWYKLSAgewotICAgIGlmIChzaXplICE9
IDApIHsKLSAgICAgIGZic3RyaW5nX2RldGFpbDo6cG9kQ29weShkYXRhLCBkYXRhICsgc2l6ZSwg
c21hbGxfKTsKLSAgICB9Ci0gIH0KLSAgc2V0U21hbGxTaXplKHNpemUpOwotfQotCi10ZW1wbGF0
ZSA8Y2xhc3MgQ2hhcj4KLUZPTExZX01BTExPQ19OT0lOTElORSBpbmxpbmUgdm9pZCBmYnN0cmlu
Z19jb3JlPENoYXI+Ojppbml0TWVkaXVtKAotICAgIGNvbnN0IENoYXIqIGNvbnN0IGRhdGEsIGNv
bnN0IHNpemVfdCBzaXplKSB7Ci0gIC8vIE1lZGl1bSBzdHJpbmdzIGFyZSBhbGxvY2F0ZWQgbm9y
bWFsbHkuIERvbid0IGZvcmdldCB0bwotICAvLyBhbGxvY2F0ZSBvbmUgZXh0cmEgQ2hhciBmb3Ig
dGhlIHRlcm1pbmF0aW5nIG51bGwuCi0gIGF1dG8gY29uc3QgYWxsb2NTaXplID0gZ29vZE1hbGxv
Y1NpemUoKDEgKyBzaXplKSAqIHNpemVvZihDaGFyKSk7Ci0gIG1sXy5kYXRhXyA9IHN0YXRpY19j
YXN0PENoYXIqPihjaGVja2VkTWFsbG9jKGFsbG9jU2l6ZSkpOwotICBpZiAoRkJTVFJJTkdfTElL
RUxZKHNpemUgPiAwKSkgewotICAgIGZic3RyaW5nX2RldGFpbDo6cG9kQ29weShkYXRhLCBkYXRh
ICsgc2l6ZSwgbWxfLmRhdGFfKTsKLSAgfQotICBtbF8uc2l6ZV8gPSBzaXplOwotICBtbF8uc2V0
Q2FwYWNpdHkoYWxsb2NTaXplIC8gc2l6ZW9mKENoYXIpIC0gMSwgQ2F0ZWdvcnk6OmlzTWVkaXVt
KTsKLSAgbWxfLmRhdGFfW3NpemVdID0gJ1wwJzsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIENoYXI+
Ci1GT0xMWV9NQUxMT0NfTk9JTkxJTkUgaW5saW5lIHZvaWQgZmJzdHJpbmdfY29yZTxDaGFyPjo6
aW5pdExhcmdlKAotICAgIGNvbnN0IENoYXIqIGNvbnN0IGRhdGEsIGNvbnN0IHNpemVfdCBzaXpl
KSB7Ci0gIC8vIExhcmdlIHN0cmluZ3MgYXJlIGFsbG9jYXRlZCBkaWZmZXJlbnRseQotICBzaXpl
X3QgZWZmZWN0aXZlQ2FwYWNpdHkgPSBzaXplOwotICBhdXRvIGNvbnN0IG5ld1JDID0gUmVmQ291
bnRlZDo6Y3JlYXRlKGRhdGEsICZlZmZlY3RpdmVDYXBhY2l0eSk7Ci0gIG1sXy5kYXRhXyA9IG5l
d1JDLT5kYXRhXzsKLSAgbWxfLnNpemVfID0gc2l6ZTsKLSAgbWxfLnNldENhcGFjaXR5KGVmZmVj
dGl2ZUNhcGFjaXR5LCBDYXRlZ29yeTo6aXNMYXJnZSk7Ci0gIG1sXy5kYXRhX1tzaXplXSA9ICdc
MCc7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDaGFyPgotRk9MTFlfTUFMTE9DX05PSU5MSU5FIGlu
bGluZSB2b2lkIGZic3RyaW5nX2NvcmU8Q2hhcj46OnVuc2hhcmUoCi0gICAgc2l6ZV90IG1pbkNh
cGFjaXR5KSB7Ci0gIEZCU1RSSU5HX0FTU0VSVChjYXRlZ29yeSgpID09IENhdGVnb3J5Ojppc0xh
cmdlKTsKLSAgc2l6ZV90IGVmZmVjdGl2ZUNhcGFjaXR5ID0gc3RkOjptYXgobWluQ2FwYWNpdHks
IG1sXy5jYXBhY2l0eSgpKTsKLSAgYXV0byBjb25zdCBuZXdSQyA9IFJlZkNvdW50ZWQ6OmNyZWF0
ZSgmZWZmZWN0aXZlQ2FwYWNpdHkpOwotICAvLyBJZiB0aGlzIGZhaWxzLCBzb21lb25lIHBsYWNl
ZCB0aGUgd3JvbmcgY2FwYWNpdHkgaW4gYW4KLSAgLy8gZmJzdHJpbmcuCi0gIEZCU1RSSU5HX0FT
U0VSVChlZmZlY3RpdmVDYXBhY2l0eSA+PSBtbF8uY2FwYWNpdHkoKSk7Ci0gIC8vIEFsc28gY29w
aWVzIHRlcm1pbmF0b3IuCi0gIGZic3RyaW5nX2RldGFpbDo6cG9kQ29weShtbF8uZGF0YV8sIG1s
Xy5kYXRhXyArIG1sXy5zaXplXyArIDEsIG5ld1JDLT5kYXRhXyk7Ci0gIFJlZkNvdW50ZWQ6OmRl
Y3JlbWVudFJlZnMobWxfLmRhdGFfKTsKLSAgbWxfLmRhdGFfID0gbmV3UkMtPmRhdGFfOwotICBt
bF8uc2V0Q2FwYWNpdHkoZWZmZWN0aXZlQ2FwYWNpdHksIENhdGVnb3J5Ojppc0xhcmdlKTsKLSAg
Ly8gc2l6ZV8gcmVtYWlucyB1bmNoYW5nZWQuCi19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDaGFyPgot
aW5saW5lIENoYXIqIGZic3RyaW5nX2NvcmU8Q2hhcj46Om11dGFibGVEYXRhTGFyZ2UoKSB7Ci0g
IEZCU1RSSU5HX0FTU0VSVChjYXRlZ29yeSgpID09IENhdGVnb3J5Ojppc0xhcmdlKTsKLSAgaWYg
KFJlZkNvdW50ZWQ6OnJlZnMobWxfLmRhdGFfKSA+IDEpIHsgLy8gRW5zdXJlIHVuaXF1ZS4KLSAg
ICB1bnNoYXJlKCk7Ci0gIH0KLSAgcmV0dXJuIG1sXy5kYXRhXzsKLX0KLQotdGVtcGxhdGUgPGNs
YXNzIENoYXI+Ci1GT0xMWV9NQUxMT0NfTk9JTkxJTkUgaW5saW5lIHZvaWQgZmJzdHJpbmdfY29y
ZTxDaGFyPjo6cmVzZXJ2ZUxhcmdlKAotICAgIHNpemVfdCBtaW5DYXBhY2l0eSkgewotICBGQlNU
UklOR19BU1NFUlQoY2F0ZWdvcnkoKSA9PSBDYXRlZ29yeTo6aXNMYXJnZSk7Ci0gIGlmIChSZWZD
b3VudGVkOjpyZWZzKG1sXy5kYXRhXykgPiAxKSB7IC8vIEVuc3VyZSB1bmlxdWUKLSAgICAvLyBX
ZSBtdXN0IG1ha2UgaXQgdW5pcXVlIHJlZ2FyZGxlc3M7IGluLXBsYWNlIHJlYWxsb2NhdGlvbiBp
cwotICAgIC8vIHVzZWxlc3MgaWYgdGhlIHN0cmluZyBpcyBzaGFyZWQuIEluIG9yZGVyIHRvIG5v
dCBzdXJwcmlzZQotICAgIC8vIHBlb3BsZSwgcmVzZXJ2ZSB0aGUgbmV3IGJsb2NrIGF0IGN1cnJl
bnQgY2FwYWNpdHkgb3IKLSAgICAvLyBtb3JlLiBUaGF0IHdheSwgYSBzdHJpbmcncyBjYXBhY2l0
eSBuZXZlciBzaHJpbmtzIGFmdGVyIGEKLSAgICAvLyBjYWxsIHRvIHJlc2VydmUuCi0gICAgdW5z
aGFyZShtaW5DYXBhY2l0eSk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gU3RyaW5nIGlzIG5vdCBzaGFy
ZWQsIHNvIGxldCdzIHRyeSB0byByZWFsbG9jIChpZiBuZWVkZWQpCi0gICAgaWYgKG1pbkNhcGFj
aXR5ID4gbWxfLmNhcGFjaXR5KCkpIHsKLSAgICAgIC8vIEFza2luZyBmb3IgbW9yZSBtZW1vcnkK
LSAgICAgIGF1dG8gY29uc3QgbmV3UkMgPSBSZWZDb3VudGVkOjpyZWFsbG9jYXRlKAotICAgICAg
ICAgIG1sXy5kYXRhXywgbWxfLnNpemVfLCBtbF8uY2FwYWNpdHkoKSwgJm1pbkNhcGFjaXR5KTsK
LSAgICAgIG1sXy5kYXRhXyA9IG5ld1JDLT5kYXRhXzsKLSAgICAgIG1sXy5zZXRDYXBhY2l0eSht
aW5DYXBhY2l0eSwgQ2F0ZWdvcnk6OmlzTGFyZ2UpOwotICAgIH0KLSAgICBGQlNUUklOR19BU1NF
UlQoY2FwYWNpdHkoKSA+PSBtaW5DYXBhY2l0eSk7Ci0gIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNz
IENoYXI+Ci1GT0xMWV9NQUxMT0NfTk9JTkxJTkUgaW5saW5lIHZvaWQgZmJzdHJpbmdfY29yZTxD
aGFyPjo6cmVzZXJ2ZU1lZGl1bSgKLSAgICBjb25zdCBzaXplX3QgbWluQ2FwYWNpdHkpIHsKLSAg
RkJTVFJJTkdfQVNTRVJUKGNhdGVnb3J5KCkgPT0gQ2F0ZWdvcnk6OmlzTWVkaXVtKTsKLSAgLy8g
U3RyaW5nIGlzIG5vdCBzaGFyZWQKLSAgaWYgKG1pbkNhcGFjaXR5IDw9IG1sXy5jYXBhY2l0eSgp
KSB7Ci0gICAgcmV0dXJuOyAvLyBub3RoaW5nIHRvIGRvLCB0aGVyZSdzIGVub3VnaCByb29tCi0g
IH0KLSAgaWYgKG1pbkNhcGFjaXR5IDw9IG1heE1lZGl1bVNpemUpIHsKLSAgICAvLyBLZWVwIHRo
ZSBzdHJpbmcgYXQgbWVkaXVtIHNpemUuIERvbid0IGZvcmdldCB0byBhbGxvY2F0ZQotICAgIC8v
IG9uZSBleHRyYSBDaGFyIGZvciB0aGUgdGVybWluYXRpbmcgbnVsbC4KLSAgICBzaXplX3QgY2Fw
YWNpdHlCeXRlcyA9IGdvb2RNYWxsb2NTaXplKCgxICsgbWluQ2FwYWNpdHkpICogc2l6ZW9mKENo
YXIpKTsKLSAgICAvLyBBbHNvIGNvcGllcyB0ZXJtaW5hdG9yLgotICAgIG1sXy5kYXRhXyA9IHN0
YXRpY19jYXN0PENoYXIqPihzbWFydFJlYWxsb2MoCi0gICAgICAgIG1sXy5kYXRhXywKLSAgICAg
ICAgKG1sXy5zaXplXyArIDEpICogc2l6ZW9mKENoYXIpLAotICAgICAgICAobWxfLmNhcGFjaXR5
KCkgKyAxKSAqIHNpemVvZihDaGFyKSwKLSAgICAgICAgY2FwYWNpdHlCeXRlcykpOwotICAgIG1s
Xy5zZXRDYXBhY2l0eShjYXBhY2l0eUJ5dGVzIC8gc2l6ZW9mKENoYXIpIC0gMSwgQ2F0ZWdvcnk6
OmlzTWVkaXVtKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBDb252ZXJzaW9uIGZyb20gbWVkaXVtIHRv
IGxhcmdlIHN0cmluZwotICAgIGZic3RyaW5nX2NvcmUgbmFzY2VudDsKLSAgICAvLyBXaWxsIHJl
Y3Vyc2UgdG8gYW5vdGhlciBicmFuY2ggb2YgdGhpcyBmdW5jdGlvbgotICAgIG5hc2NlbnQucmVz
ZXJ2ZShtaW5DYXBhY2l0eSk7Ci0gICAgbmFzY2VudC5tbF8uc2l6ZV8gPSBtbF8uc2l6ZV87Ci0g
ICAgLy8gQWxzbyBjb3BpZXMgdGVybWluYXRvci4KLSAgICBmYnN0cmluZ19kZXRhaWw6OnBvZENv
cHkoCi0gICAgICAgIG1sXy5kYXRhXywgbWxfLmRhdGFfICsgbWxfLnNpemVfICsgMSwgbmFzY2Vu
dC5tbF8uZGF0YV8pOwotICAgIG5hc2NlbnQuc3dhcCgqdGhpcyk7Ci0gICAgRkJTVFJJTkdfQVNT
RVJUKGNhcGFjaXR5KCkgPj0gbWluQ2FwYWNpdHkpOwotICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBDaGFyPgotRk9MTFlfTUFMTE9DX05PSU5MSU5FIGlubGluZSB2b2lkIGZic3RyaW5nX2NvcmU8
Q2hhcj46OnJlc2VydmVTbWFsbCgKLSAgICBzaXplX3QgbWluQ2FwYWNpdHksIGNvbnN0IGJvb2wg
ZGlzYWJsZVNTTykgewotICBGQlNUUklOR19BU1NFUlQoY2F0ZWdvcnkoKSA9PSBDYXRlZ29yeTo6
aXNTbWFsbCk7Ci0gIGlmICghZGlzYWJsZVNTTyAmJiBtaW5DYXBhY2l0eSA8PSBtYXhTbWFsbFNp
emUpIHsKLSAgICAvLyBzbWFsbAotICAgIC8vIE5vdGhpbmcgdG8gZG8sIGV2ZXJ5dGhpbmcgc3Rh
eXMgcHV0Ci0gIH0gZWxzZSBpZiAobWluQ2FwYWNpdHkgPD0gbWF4TWVkaXVtU2l6ZSkgewotICAg
IC8vIG1lZGl1bQotICAgIC8vIERvbid0IGZvcmdldCB0byBhbGxvY2F0ZSBvbmUgZXh0cmEgQ2hh
ciBmb3IgdGhlIHRlcm1pbmF0aW5nIG51bGwKLSAgICBhdXRvIGNvbnN0IGFsbG9jU2l6ZUJ5dGVz
ID0KLSAgICAgICAgZ29vZE1hbGxvY1NpemUoKDEgKyBtaW5DYXBhY2l0eSkgKiBzaXplb2YoQ2hh
cikpOwotICAgIGF1dG8gY29uc3QgcERhdGEgPSBzdGF0aWNfY2FzdDxDaGFyKj4oY2hlY2tlZE1h
bGxvYyhhbGxvY1NpemVCeXRlcykpOwotICAgIGF1dG8gY29uc3Qgc2l6ZSA9IHNtYWxsU2l6ZSgp
OwotICAgIC8vIEFsc28gY29waWVzIHRlcm1pbmF0b3IuCi0gICAgZmJzdHJpbmdfZGV0YWlsOjpw
b2RDb3B5KHNtYWxsXywgc21hbGxfICsgc2l6ZSArIDEsIHBEYXRhKTsKLSAgICBtbF8uZGF0YV8g
PSBwRGF0YTsKLSAgICBtbF8uc2l6ZV8gPSBzaXplOwotICAgIG1sXy5zZXRDYXBhY2l0eShhbGxv
Y1NpemVCeXRlcyAvIHNpemVvZihDaGFyKSAtIDEsIENhdGVnb3J5Ojppc01lZGl1bSk7Ci0gIH0g
ZWxzZSB7Ci0gICAgLy8gbGFyZ2UKLSAgICBhdXRvIGNvbnN0IG5ld1JDID0gUmVmQ291bnRlZDo6
Y3JlYXRlKCZtaW5DYXBhY2l0eSk7Ci0gICAgYXV0byBjb25zdCBzaXplID0gc21hbGxTaXplKCk7
Ci0gICAgLy8gQWxzbyBjb3BpZXMgdGVybWluYXRvci4KLSAgICBmYnN0cmluZ19kZXRhaWw6OnBv
ZENvcHkoc21hbGxfLCBzbWFsbF8gKyBzaXplICsgMSwgbmV3UkMtPmRhdGFfKTsKLSAgICBtbF8u
ZGF0YV8gPSBuZXdSQy0+ZGF0YV87Ci0gICAgbWxfLnNpemVfID0gc2l6ZTsKLSAgICBtbF8uc2V0
Q2FwYWNpdHkobWluQ2FwYWNpdHksIENhdGVnb3J5Ojppc0xhcmdlKTsKLSAgICBGQlNUUklOR19B
U1NFUlQoY2FwYWNpdHkoKSA+PSBtaW5DYXBhY2l0eSk7Ci0gIH0KLX0KLQotdGVtcGxhdGUgPGNs
YXNzIENoYXI+Ci1pbmxpbmUgQ2hhciogZmJzdHJpbmdfY29yZTxDaGFyPjo6ZXhwYW5kTm9pbml0
KAotICAgIGNvbnN0IHNpemVfdCBkZWx0YSwKLSAgICBib29sIGV4cEdyb3d0aCwgLyogPSBmYWxz
ZSAqLwotICAgIGJvb2wgZGlzYWJsZVNTTyAvKiA9IEZCU1RSSU5HX0RJU0FCTEVfU1NPICovKSB7
Ci0gIC8vIFN0cmF0ZWd5IGlzIHNpbXBsZTogbWFrZSByb29tLCB0aGVuIGNoYW5nZSBzaXplCi0g
IEZCU1RSSU5HX0FTU0VSVChjYXBhY2l0eSgpID49IHNpemUoKSk7Ci0gIHNpemVfdCBzeiwgbmV3
U3o7Ci0gIGlmIChjYXRlZ29yeSgpID09IENhdGVnb3J5Ojppc1NtYWxsKSB7Ci0gICAgc3ogPSBz
bWFsbFNpemUoKTsKLSAgICBuZXdTeiA9IHN6ICsgZGVsdGE7Ci0gICAgaWYgKCFkaXNhYmxlU1NP
ICYmIEZCU1RSSU5HX0xJS0VMWShuZXdTeiA8PSBtYXhTbWFsbFNpemUpKSB7Ci0gICAgICBzZXRT
bWFsbFNpemUobmV3U3opOwotICAgICAgcmV0dXJuIHNtYWxsXyArIHN6OwotICAgIH0KLSAgICBy
ZXNlcnZlU21hbGwoCi0gICAgICAgIGV4cEdyb3d0aCA/IHN0ZDo6bWF4KG5ld1N6LCAyICogbWF4
U21hbGxTaXplKSA6IG5ld1N6LCBkaXNhYmxlU1NPKTsKLSAgfSBlbHNlIHsKLSAgICBzeiA9IG1s
Xy5zaXplXzsKLSAgICBuZXdTeiA9IHN6ICsgZGVsdGE7Ci0gICAgaWYgKEZCU1RSSU5HX1VOTElL
RUxZKG5ld1N6ID4gY2FwYWNpdHkoKSkpIHsKLSAgICAgIC8vIGVuc3VyZXMgbm90IHNoYXJlZAot
ICAgICAgcmVzZXJ2ZShleHBHcm93dGggPyBzdGQ6Om1heChuZXdTeiwgMSArIGNhcGFjaXR5KCkg
KiAzIC8gMikgOiBuZXdTeik7Ci0gICAgfQotICB9Ci0gIEZCU1RSSU5HX0FTU0VSVChjYXBhY2l0
eSgpID49IG5ld1N6KTsKLSAgLy8gQ2F0ZWdvcnkgY2FuJ3QgYmUgc21hbGwgLSB3ZSB0b29rIGNh
cmUgb2YgdGhhdCBhYm92ZQotICBGQlNUUklOR19BU1NFUlQoCi0gICAgICBjYXRlZ29yeSgpID09
IENhdGVnb3J5Ojppc01lZGl1bSB8fCBjYXRlZ29yeSgpID09IENhdGVnb3J5Ojppc0xhcmdlKTsK
LSAgbWxfLnNpemVfID0gbmV3U3o7Ci0gIG1sXy5kYXRhX1tuZXdTel0gPSAnXDAnOwotICBGQlNU
UklOR19BU1NFUlQoc2l6ZSgpID09IG5ld1N6KTsKLSAgcmV0dXJuIG1sXy5kYXRhXyArIHN6Owot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ2hhcj4KLWlubGluZSB2b2lkIGZic3RyaW5nX2NvcmU8Q2hh
cj46OnNocmlua1NtYWxsKGNvbnN0IHNpemVfdCBkZWx0YSkgewotICAvLyBDaGVjayBmb3IgdW5k
ZXJmbG93Ci0gIEZCU1RSSU5HX0FTU0VSVChkZWx0YSA8PSBzbWFsbFNpemUoKSk7Ci0gIHNldFNt
YWxsU2l6ZShzbWFsbFNpemUoKSAtIGRlbHRhKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIENoYXI+
Ci1pbmxpbmUgdm9pZCBmYnN0cmluZ19jb3JlPENoYXI+OjpzaHJpbmtNZWRpdW0oY29uc3Qgc2l6
ZV90IGRlbHRhKSB7Ci0gIC8vIE1lZGl1bSBzdHJpbmdzIGFuZCB1bmlxdWUgbGFyZ2Ugc3RyaW5n
cyBuZWVkIG5vIHNwZWNpYWwKLSAgLy8gaGFuZGxpbmcuCi0gIEZCU1RSSU5HX0FTU0VSVChtbF8u
c2l6ZV8gPj0gZGVsdGEpOwotICBtbF8uc2l6ZV8gLT0gZGVsdGE7Ci0gIG1sXy5kYXRhX1ttbF8u
c2l6ZV9dID0gJ1wwJzsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIENoYXI+Ci1pbmxpbmUgdm9pZCBm
YnN0cmluZ19jb3JlPENoYXI+OjpzaHJpbmtMYXJnZShjb25zdCBzaXplX3QgZGVsdGEpIHsKLSAg
RkJTVFJJTkdfQVNTRVJUKG1sXy5zaXplXyA+PSBkZWx0YSk7Ci0gIC8vIFNoYXJlZCBsYXJnZSBz
dHJpbmcsIG11c3QgbWFrZSB1bmlxdWUuIFRoaXMgaXMgYmVjYXVzZSBvZiB0aGUKLSAgLy8gZHVy
biB0ZXJtaW5hdG9yIG11c3QgYmUgd3JpdHRlbiwgd2hpY2ggbWF5IHRyYW1wbGUgdGhlIHNoYXJl
ZAotICAvLyBkYXRhLgotICBpZiAoZGVsdGEpIHsKLSAgICBmYnN0cmluZ19jb3JlKG1sXy5kYXRh
XywgbWxfLnNpemVfIC0gZGVsdGEpLnN3YXAoKnRoaXMpOwotICB9Ci0gIC8vIE5vIG5lZWQgdG8g
d3JpdGUgdGhlIHRlcm1pbmF0b3IuCi19Ci0KLSNpZm5kZWYgX0xJQlNURENYWF9GQlNUUklORwot
LyoqCi0gKiBEdW1teSBmYnN0cmluZyBjb3JlIHRoYXQgdXNlcyBhbiBhY3R1YWwgc3RkOjpzdHJp
bmcuIFRoaXMgZG9lc24ndAotICogbWFrZSBhbnkgc2Vuc2UgLSBpdCdzIGp1c3QgZm9yIHRlc3Rp
bmcgcHVycG9zZXMuCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBDaGFyPgotY2xhc3MgZHVtbXlfZmJz
dHJpbmdfY29yZSB7Ci1wdWJsaWM6Ci0gIGR1bW15X2Zic3RyaW5nX2NvcmUoKSB7Ci0gIH0KLSAg
ZHVtbXlfZmJzdHJpbmdfY29yZShjb25zdCBkdW1teV9mYnN0cmluZ19jb3JlJiBhbm90aGVyKQot
ICAgICAgOiBiYWNrZW5kXyhhbm90aGVyLmJhY2tlbmRfKSB7Ci0gIH0KLSAgZHVtbXlfZmJzdHJp
bmdfY29yZShjb25zdCBDaGFyICogcywgc2l6ZV90IG4pCi0gICAgICA6IGJhY2tlbmRfKHMsIG4p
IHsKLSAgfQotICB2b2lkIHN3YXAoZHVtbXlfZmJzdHJpbmdfY29yZSAmIHJocykgewotICAgIGJh
Y2tlbmRfLnN3YXAocmhzLmJhY2tlbmRfKTsKLSAgfQotICBjb25zdCBDaGFyICogZGF0YSgpIGNv
bnN0IHsKLSAgICByZXR1cm4gYmFja2VuZF8uZGF0YSgpOwotICB9Ci0gIENoYXIqIG11dGFibGVE
YXRhKCkgewotICAgIHJldHVybiBjb25zdF9jYXN0PENoYXIqPihiYWNrZW5kXy5kYXRhKCkpOwot
ICB9Ci0gIHZvaWQgc2hyaW5rKHNpemVfdCBkZWx0YSkgewotICAgIEZCU1RSSU5HX0FTU0VSVChk
ZWx0YSA8PSBzaXplKCkpOwotICAgIGJhY2tlbmRfLnJlc2l6ZShzaXplKCkgLSBkZWx0YSk7Ci0g
IH0KLSAgQ2hhciogZXhwYW5kTm9pbml0KHNpemVfdCBkZWx0YSkgewotICAgIGF1dG8gY29uc3Qg
c3ogPSBzaXplKCk7Ci0gICAgYmFja2VuZF8ucmVzaXplKHNpemUoKSArIGRlbHRhKTsKLSAgICBy
ZXR1cm4gYmFja2VuZF8uZGF0YSgpICsgc3o7Ci0gIH0KLSAgdm9pZCBwdXNoX2JhY2soQ2hhciBj
KSB7Ci0gICAgYmFja2VuZF8ucHVzaF9iYWNrKGMpOwotICB9Ci0gIHNpemVfdCBzaXplKCkgY29u
c3QgewotICAgIHJldHVybiBiYWNrZW5kXy5zaXplKCk7Ci0gIH0KLSAgc2l6ZV90IGNhcGFjaXR5
KCkgY29uc3QgewotICAgIHJldHVybiBiYWNrZW5kXy5jYXBhY2l0eSgpOwotICB9Ci0gIGJvb2wg
aXNTaGFyZWQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHZvaWQgcmVzZXJ2
ZShzaXplX3QgbWluQ2FwYWNpdHkpIHsKLSAgICBiYWNrZW5kXy5yZXNlcnZlKG1pbkNhcGFjaXR5
KTsKLSAgfQotCi1wcml2YXRlOgotICBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyPiBiYWNrZW5kXzsK
LX07Ci0jZW5kaWYgLy8gIV9MSUJTVERDWFhfRkJTVFJJTkcKLQotLyoqCi0gKiBUaGlzIGlzIHRo
ZSBiYXNpY19zdHJpbmcgcmVwbGFjZW1lbnQuIEZvciBjb25mb3JtaXR5LAotICogYmFzaWNfZmJz
dHJpbmcgdGFrZXMgdGhlIHNhbWUgdGVtcGxhdGUgcGFyYW1ldGVycywgcGx1cyB0aGUgbGFzdAot
ICogb25lIHdoaWNoIGlzIHRoZSBjb3JlLgotICovCi0jaWZkZWYgX0xJQlNURENYWF9GQlNUUklO
RwotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFN0b3JhZ2U+
Ci0jZWxzZQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsCi0gICAgICAgICAgY2xhc3MgVCA9IHN0ZDo6
Y2hhcl90cmFpdHM8RT4sCi0gICAgICAgICAgY2xhc3MgQSA9IHN0ZDo6YWxsb2NhdG9yPEU+LAot
ICAgICAgICAgIGNsYXNzIFN0b3JhZ2UgPSBmYnN0cmluZ19jb3JlPEU+ID4KLSNlbmRpZgotY2xh
c3MgYmFzaWNfZmJzdHJpbmcgewotICBzdGF0aWMgdm9pZCBlbmZvcmNlKAotICAgICAgYm9vbCBj
b25kaXRpb24sCi0gICAgICB2b2lkICgqdGhyb3dfZXhjKShjb25zdCBjaGFyKiksCi0gICAgICBj
b25zdCBjaGFyKiBtc2cpIHsKLSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgdGhyb3dfZXhj
KG1zZyk7Ci0gICAgfQotICB9Ci0KLSAgYm9vbCBpc1NhbmUoKSBjb25zdCB7Ci0gICAgcmV0dXJu
Ci0gICAgICBiZWdpbigpIDw9IGVuZCgpICYmCi0gICAgICBlbXB0eSgpID09IChzaXplKCkgPT0g
MCkgJiYKLSAgICAgIGVtcHR5KCkgPT0gKGJlZ2luKCkgPT0gZW5kKCkpICYmCi0gICAgICBzaXpl
KCkgPD0gbWF4X3NpemUoKSAmJgotICAgICAgY2FwYWNpdHkoKSA8PSBtYXhfc2l6ZSgpICYmCi0g
ICAgICBzaXplKCkgPD0gY2FwYWNpdHkoKSAmJgotICAgICAgYmVnaW4oKVtzaXplKCldID09ICdc
MCc7Ci0gIH0KLQotICBzdHJ1Y3QgSW52YXJpYW50IHsKLSAgICBJbnZhcmlhbnQmIG9wZXJhdG9y
PShjb25zdCBJbnZhcmlhbnQmKSA9IGRlbGV0ZTsKLSAgICBleHBsaWNpdCBJbnZhcmlhbnQoY29u
c3QgYmFzaWNfZmJzdHJpbmcmIHMpIG5vZXhjZXB0IDogc18ocykgewotICAgICAgRkJTVFJJTkdf
QVNTRVJUKHNfLmlzU2FuZSgpKTsKLSAgICB9Ci0gICAgfkludmFyaWFudCgpIG5vZXhjZXB0IHsK
LSAgICAgIEZCU1RSSU5HX0FTU0VSVChzXy5pc1NhbmUoKSk7Ci0gICAgfQotCi0gICBwcml2YXRl
OgotICAgIGNvbnN0IGJhc2ljX2Zic3RyaW5nJiBzXzsKLSAgfTsKLQotIHB1YmxpYzoKLSAgLy8g
dHlwZXMKLSAgdHlwZWRlZiBUIHRyYWl0c190eXBlOwotICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0
c190eXBlOjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsKLSAgdHlwZWRlZiBBIGFsbG9jYXRvcl90eXBl
OwotICB0eXBlZGVmIHR5cGVuYW1lIEE6OnNpemVfdHlwZSBzaXplX3R5cGU7Ci0gIHR5cGVkZWYg
dHlwZW5hbWUgQTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKLQotICB0eXBlZGVm
IHR5cGVuYW1lIEE6OnJlZmVyZW5jZSByZWZlcmVuY2U7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgQTo6
Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBBOjpw
b2ludGVyIHBvaW50ZXI7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgQTo6Y29uc3RfcG9pbnRlciBjb25z
dF9wb2ludGVyOwotCi0gIHR5cGVkZWYgRSogaXRlcmF0b3I7Ci0gIHR5cGVkZWYgY29uc3QgRSog
Y29uc3RfaXRlcmF0b3I7Ci0gIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9y
Ci0jaWZkZWYgTk9fSVRFUkFUT1JfVFJBSVRTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgdmFsdWVfdHlwZQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ID4gcmV2ZXJzZV9pdGVyYXRvcjsKLSAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29u
c3RfaXRlcmF0b3IKLSNpZmRlZiBOT19JVEVSQVRPUl9UUkFJVFMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCBjb25zdCB2YWx1ZV90eXBlCi0jZW5kaWYKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwotCi0gIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90eXBlIG5wb3MgPSBzaXplX3R5cGUoLTEpOwotICB0eXBlZGVmIHN0ZDo6
dHJ1ZV90eXBlIElzUmVsb2NhdGFibGU7Ci0KLXByaXZhdGU6Ci0gIHN0YXRpYyB2b2lkIHByb2Ny
dXN0ZXMoc2l6ZV90eXBlJiBuLCBzaXplX3R5cGUgbm1heCkgewotICAgIGlmIChuID4gbm1heCkg
ewotICAgICAgbiA9IG5tYXg7Ci0gICAgfQotICB9Ci0KLSAgc3RhdGljIHNpemVfdHlwZSB0cmFp
dHNMZW5ndGgoY29uc3QgdmFsdWVfdHlwZSogcyk7Ci0KLXB1YmxpYzoKLSAgLy8gQysrMTEgMjEu
NC4yIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3kKLQotICAvLyBOb3RlOiB3aGlsZSB0aGUgZm9sbG93
aW5nIHR3byBjb25zdHJ1Y3RvcnMgY2FuIGJlIChhbmQgcHJldmlvdXNseSB3ZXJlKQotICAvLyBj
b2xsYXBzZWQgaW50byBvbmUgY29uc3RydWN0b3Igd3JpdHRlbiB0aGlzIHdheToKLSAgLy8KLSAg
Ly8gICBleHBsaWNpdCBiYXNpY19mYnN0cmluZyhjb25zdCBBJiBhID0gQSgpKSBub2V4Y2VwdCB7
IH0KLSAgLy8KLSAgLy8gVGhpcyBjYW4gY2F1c2UgQ2xhbmcgKGF0IGxlYXN0IHZlcnNpb24gMy43
KSB0byBmYWlsIHdpdGggdGhlIGVycm9yOgotICAvLyAgICJjaG9zZW4gY29uc3RydWN0b3IgaXMg
ZXhwbGljaXQgaW4gY29weS1pbml0aWFsaXphdGlvbiAuLi4KLSAgLy8gICBpbiBpbXBsaWNpdCBp
bml0aWFsaXphdGlvbiBvZiBmaWVsZCAnKHgpJyB3aXRoIG9taXR0ZWQgaW5pdGlhbGl6ZXIiCi0g
IC8vCi0gIC8vIGlmIHVzZWQgaW4gYSBzdHJ1Y3Qgd2hpY2ggaXMgZGVmYXVsdC1pbml0aWFsaXpl
ZC4gIEhlbmNlIHRoZSBzcGxpdCBpbnRvCi0gIC8vIHRoZXNlIHR3byBzZXBhcmF0ZSBjb25zdHJ1
Y3RvcnMuCi0KLSAgYmFzaWNfZmJzdHJpbmcoKSBub2V4Y2VwdCA6IGJhc2ljX2Zic3RyaW5nKEEo
KSkgewotICB9Ci0KLSAgZXhwbGljaXQgYmFzaWNfZmJzdHJpbmcoY29uc3QgQSYpIG5vZXhjZXB0
IHsKLSAgfQotCi0gIGJhc2ljX2Zic3RyaW5nKGNvbnN0IGJhc2ljX2Zic3RyaW5nJiBzdHIpCi0g
ICAgICA6IHN0b3JlXyhzdHIuc3RvcmVfKSB7Ci0gIH0KLQotICAvLyBNb3ZlIGNvbnN0cnVjdG9y
Ci0gIGJhc2ljX2Zic3RyaW5nKGJhc2ljX2Zic3RyaW5nJiYgZ29uZXIpIG5vZXhjZXB0Ci0gICAg
ICA6IHN0b3JlXyhzdGQ6Om1vdmUoZ29uZXIuc3RvcmVfKSkgewotICB9Ci0KLSNpZm5kZWYgX0xJ
QlNURENYWF9GQlNUUklORwotICAvLyBUaGlzIGlzIGRlZmluZWQgZm9yIGNvbXBhdGliaWxpdHkg
d2l0aCBzdGQ6OnN0cmluZwotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQTI+Ci0gIC8qIGltcGxpY2l0
ICovIGJhc2ljX2Zic3RyaW5nKGNvbnN0IHN0ZDo6YmFzaWNfc3RyaW5nPEUsIFQsIEEyPiYgc3Ry
KQotICAgICAgOiBzdG9yZV8oc3RyLmRhdGEoKSwgc3RyLnNpemUoKSkge30KLSNlbmRpZgotCi0g
IGJhc2ljX2Zic3RyaW5nKGNvbnN0IGJhc2ljX2Zic3RyaW5nJiBzdHIsCi0gICAgICAgICAgICAg
ICAgIHNpemVfdHlwZSBwb3MsCi0gICAgICAgICAgICAgICAgIHNpemVfdHlwZSBuID0gbnBvcywK
LSAgICAgICAgICAgICAgICAgY29uc3QgQSYgLyogYSAqLyA9IEEoKSkgewotICAgIGFzc2lnbihz
dHIsIHBvcywgbik7Ci0gIH0KLQotICBGT0xMWV9NQUxMT0NfTk9JTkxJTkUKLSAgLyogaW1wbGlj
aXQgKi8gYmFzaWNfZmJzdHJpbmcoY29uc3QgdmFsdWVfdHlwZSogcywgY29uc3QgQSYgLyphKi8g
PSBBKCkpCi0gICAgICA6IHN0b3JlXyhzLCB0cmFpdHNMZW5ndGgocykpIHt9Ci0KLSAgRk9MTFlf
TUFMTE9DX05PSU5MSU5FCi0gIGJhc2ljX2Zic3RyaW5nKGNvbnN0IHZhbHVlX3R5cGUqIHMsIHNp
emVfdHlwZSBuLCBjb25zdCBBJiAvKmEqLyA9IEEoKSkKLSAgICAgIDogc3RvcmVfKHMsIG4pIHsK
LSAgfQotCi0gIEZPTExZX01BTExPQ19OT0lOTElORQotICBiYXNpY19mYnN0cmluZyhzaXplX3R5
cGUgbiwgdmFsdWVfdHlwZSBjLCBjb25zdCBBJiAvKmEqLyA9IEEoKSkgewotICAgIGF1dG8gY29u
c3QgcERhdGEgPSBzdG9yZV8uZXhwYW5kTm9pbml0KG4pOwotICAgIGZic3RyaW5nX2RldGFpbDo6
cG9kRmlsbChwRGF0YSwgcERhdGEgKyBuLCBjKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBJ
bkl0PgotICBGT0xMWV9NQUxMT0NfTk9JTkxJTkUgYmFzaWNfZmJzdHJpbmcoCi0gICAgICBJbkl0
IGJlZ2luLAotICAgICAgSW5JdCBlbmQsCi0gICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwK
LSAgICAgICAgICAhc3RkOjppc19zYW1lPEluSXQsIHZhbHVlX3R5cGUqPjo6dmFsdWUsCi0gICAg
ICAgICAgY29uc3QgQT46OnR5cGUmIC8qYSovID0gQSgpKSB7Ci0gICAgYXNzaWduKGJlZ2luLCBl
bmQpOwotICB9Ci0KLSAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIGNvbnN0IGNoYXIqLCBjb25zdCBj
aGFyKgotICBGT0xMWV9NQUxMT0NfTk9JTkxJTkUKLSAgYmFzaWNfZmJzdHJpbmcoY29uc3QgdmFs
dWVfdHlwZSogYiwgY29uc3QgdmFsdWVfdHlwZSogZSwgY29uc3QgQSYgLyphKi8gPSBBKCkpCi0g
ICAgICA6IHN0b3JlXyhiLCBzaXplX3R5cGUoZSAtIGIpKSB7Ci0gIH0KLQotICAvLyBOb25zdGFu
ZGFyZCBjb25zdHJ1Y3RvcgotICBiYXNpY19mYnN0cmluZyh2YWx1ZV90eXBlICpzLCBzaXplX3R5
cGUgbiwgc2l6ZV90eXBlIGMsCi0gICAgICAgICAgICAgICAgIEFjcXVpcmVNYWxsb2NhdGVkU3Ry
aW5nIGEpCi0gICAgICA6IHN0b3JlXyhzLCBuLCBjLCBhKSB7Ci0gIH0KLQotICAvLyBDb25zdHJ1
Y3Rpb24gZnJvbSBpbml0aWFsaXphdGlvbiBsaXN0Ci0gIEZPTExZX01BTExPQ19OT0lOTElORQot
ICBiYXNpY19mYnN0cmluZyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gaWwpIHsK
LSAgICBhc3NpZ24oaWwuYmVnaW4oKSwgaWwuZW5kKCkpOwotICB9Ci0KLSAgfmJhc2ljX2Zic3Ry
aW5nKCkgbm9leGNlcHQge30KLQotICBiYXNpY19mYnN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IGJh
c2ljX2Zic3RyaW5nJiBsaHMpOwotCi0gIC8vIE1vdmUgYXNzaWdubWVudAotICBiYXNpY19mYnN0
cmluZyYgb3BlcmF0b3I9KGJhc2ljX2Zic3RyaW5nJiYgZ29uZXIpIG5vZXhjZXB0OwotCi0jaWZu
ZGVmIF9MSUJTVERDWFhfRkJTVFJJTkcKLSAgLy8gQ29tcGF0aWJpbGl0eSB3aXRoIHN0ZDo6c3Ry
aW5nCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBBMj4KLSAgYmFzaWNfZmJzdHJpbmcmIG9wZXJhdG9y
PShjb25zdCBzdGQ6OmJhc2ljX3N0cmluZzxFLCBULCBBMj4mIHJocykgewotICAgIHJldHVybiBh
c3NpZ24ocmhzLmRhdGEoKSwgcmhzLnNpemUoKSk7Ci0gIH0KLQotICAvLyBDb21wYXRpYmlsaXR5
IHdpdGggc3RkOjpzdHJpbmcKLSAgc3RkOjpiYXNpY19zdHJpbmc8RSwgVCwgQT4gdG9TdGRTdHJp
bmcoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0ZDo6YmFzaWNfc3RyaW5nPEUsIFQsIEE+KGRhdGEo
KSwgc2l6ZSgpKTsKLSAgfQotI2Vsc2UKLSAgLy8gQSBsb3Qgb2YgY29kZSBpbiBmYmNvZGUgc3Rp
bGwgdXNlcyB0aGlzIG1ldGhvZCwgc28ga2VlcCBpdCBoZXJlIGZvciBub3cuCi0gIGNvbnN0IGJh
c2ljX2Zic3RyaW5nJiB0b1N0ZFN0cmluZygpIGNvbnN0IHsKLSAgICByZXR1cm4gKnRoaXM7Ci0g
IH0KLSNlbmRpZgotCi0gIGJhc2ljX2Zic3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgdmFsdWVfdHlw
ZSogcykgewotICAgIHJldHVybiBhc3NpZ24ocyk7Ci0gIH0KLQotICAvLyBUaGlzIGFjdHVhbGx5
IGdvZXMgZGlyZWN0bHkgYWdhaW5zdCB0aGUgQysrIHNwZWMsIGJ1dCB0aGUKLSAgLy8gdmFsdWVf
dHlwZSBvdmVybG9hZCBpcyBkYW5nZXJvdXMsIHNvIHdlJ3JlIGV4cGxpY2l0bHkgZGVsZXRpbmcK
LSAgLy8gYW55IG92ZXJsb2FkcyBvZiBvcGVyYXRvcj0gdGhhdCBjb3VsZCBpbXBsaWNpdGx5IGNv
bnZlcnQgdG8KLSAgLy8gdmFsdWVfdHlwZS4KLSAgLy8gTm90ZSB0aGF0IHdlIGRvIG5lZWQgdG8g
ZXhwbGljaXRseSBzcGVjaWZ5IHRoZSB0ZW1wbGF0ZSB0eXBlcyBiZWNhdXNlCi0gIC8vIG90aGVy
d2lzZSBNU1ZDIDIwMTcgd2lsbCBhZ2dyZXNzaXZlbHkgcHJlLXJlc29sdmUgdmFsdWVfdHlwZSB0
bwotICAvLyB0cmFpdHNfdHlwZTo6Y2hhcl90eXBlLCB3aGljaCB3b24ndCBjb21wYXJlIGFzIGVx
dWFsIHdoZW4gZGV0ZXJtaW5pbmcKLSAgLy8gd2hpY2ggb3ZlcmxvYWQgdGhlIGltcGxlbWVudGF0
aW9uIGlzIHJlZmVycmluZyB0by4KLSAgLy8gQWxzbyBub3RlIHRoYXQgTVNWQyAyMDE1IFVwZGF0
ZSAzIHJlcXVpcmVzIHVzIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUKLSAgLy8gbmFtZXNwYWNl
IGluLXdoaWNoIHRvIHNlYXJjaCBmb3IgYmFzaWNfZmJzdHJpbmcsIG90aGVyd2lzZSBpdCB0cmll
cyB0bwotICAvLyBsb29rIGZvciBiYXNpY19mYnN0cmluZzo6YmFzaWNfZmJzdHJpbmcsIHdoaWNo
IGlzIGp1c3QgcGxhaW4gd3JvbmcuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUUD4KLSAgdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8Ci0gICAgICBzdGQ6OmlzX3NhbWU8Ci0gICAgICAgICAgdHlwZW5h
bWUgc3RkOjpkZWNheTxUUD46OnR5cGUsCi0gICAgICAgICAgdHlwZW5hbWUgZm9sbHk6OmJhc2lj
X2Zic3RyaW5nPEUsIFQsIEEsIFN0b3JhZ2U+Ojp2YWx1ZV90eXBlPjo6dmFsdWUsCi0gICAgICBi
YXNpY19mYnN0cmluZzxFLCBULCBBLCBTdG9yYWdlPiY+Ojp0eXBlCi0gIG9wZXJhdG9yPShUUCBj
KTsKLQotICBiYXNpY19mYnN0cmluZyYgb3BlcmF0b3I9KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2
YWx1ZV90eXBlPiBpbCkgewotICAgIHJldHVybiBhc3NpZ24oaWwuYmVnaW4oKSwgaWwuZW5kKCkp
OwotICB9Ci0KLSAgLy8gQysrMTEgMjEuNC4zIGl0ZXJhdG9yczoKLSAgaXRlcmF0b3IgYmVnaW4o
KSB7Ci0gICAgcmV0dXJuIHN0b3JlXy5tdXRhYmxlRGF0YSgpOwotICB9Ci0KLSAgY29uc3RfaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0b3JlXy5kYXRhKCk7Ci0gIH0KLQot
ICBjb25zdF9pdGVyYXRvciBjYmVnaW4oKSBjb25zdCB7Ci0gICAgcmV0dXJuIGJlZ2luKCk7Ci0g
IH0KLQotICBpdGVyYXRvciBlbmQoKSB7Ci0gICAgcmV0dXJuIHN0b3JlXy5tdXRhYmxlRGF0YSgp
ICsgc3RvcmVfLnNpemUoKTsKLSAgfQotCi0gIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsK
LSAgICByZXR1cm4gc3RvcmVfLmRhdGEoKSArIHN0b3JlXy5zaXplKCk7Ci0gIH0KLQotICBjb25z
dF9pdGVyYXRvciBjZW5kKCkgY29uc3QgeyByZXR1cm4gZW5kKCk7IH0KLQotICByZXZlcnNlX2l0
ZXJhdG9yIHJiZWdpbigpIHsKLSAgICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7Ci0g
IH0KLQotICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsKLSAgICByZXR1
cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7Ci0gIH0KLQotICBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yIGNyYmVnaW4oKSBjb25zdCB7IHJldHVybiByYmVnaW4oKTsgfQotCi0gIHJldmVy
c2VfaXRlcmF0b3IgcmVuZCgpIHsKLSAgICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigp
KTsKLSAgfQotCi0gIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKLSAgfQotCi0gIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgY3JlbmQoKSBjb25zdCB7IHJldHVybiByZW5kKCk7IH0KLQotICAvLyBB
ZGRlZCBieSBDKysxMQotICAvLyBDKysxMSAyMS40LjUsIGVsZW1lbnQgYWNjZXNzOgotICBjb25z
dCB2YWx1ZV90eXBlJiBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9Ci0gIGNvbnN0
IHZhbHVlX3R5cGUmIGJhY2soKSBjb25zdCB7Ci0gICAgRkJTVFJJTkdfQVNTRVJUKCFlbXB0eSgp
KTsKLSAgICAvLyBTaG91bGQgYmUgYmVnaW4oKVtzaXplKCkgLSAxXSwgYnV0IHRoYXQgYnJhbmNo
ZXMgdHdpY2UKLSAgICByZXR1cm4gKihlbmQoKSAtIDEpOwotICB9Ci0gIHZhbHVlX3R5cGUmIGZy
b250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KLSAgdmFsdWVfdHlwZSYgYmFjaygpIHsKLSAgICBG
QlNUUklOR19BU1NFUlQoIWVtcHR5KCkpOwotICAgIC8vIFNob3VsZCBiZSBiZWdpbigpW3NpemUo
KSAtIDFdLCBidXQgdGhhdCBicmFuY2hlcyB0d2ljZQotICAgIHJldHVybiAqKGVuZCgpIC0gMSk7
Ci0gIH0KLSAgdm9pZCBwb3BfYmFjaygpIHsKLSAgICBGQlNUUklOR19BU1NFUlQoIWVtcHR5KCkp
OwotICAgIHN0b3JlXy5zaHJpbmsoMSk7Ci0gIH0KLQotICAvLyBDKysxMSAyMS40LjQgY2FwYWNp
dHk6Ci0gIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gc3RvcmVfLnNpemUoKTsgfQot
Ci0gIHNpemVfdHlwZSBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBzaXplKCk7IH0KLQotICBzaXpl
X3R5cGUgbWF4X3NpemUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
c2l6ZV90eXBlPjo6bWF4KCk7Ci0gIH0KLQotICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgbiwgdmFs
dWVfdHlwZSBjID0gdmFsdWVfdHlwZSgpKTsKLQotICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25z
dCB7IHJldHVybiBzdG9yZV8uY2FwYWNpdHkoKTsgfQotCi0gIHZvaWQgcmVzZXJ2ZShzaXplX3R5
cGUgcmVzX2FyZyA9IDApIHsKLSAgICBlbmZvcmNlKHJlc19hcmcgPD0gbWF4X3NpemUoKSwgc3Rk
OjpfX3Rocm93X2xlbmd0aF9lcnJvciwgIiIpOwotICAgIHN0b3JlXy5yZXNlcnZlKHJlc19hcmcp
OwotICB9Ci0KLSAgdm9pZCBzaHJpbmtfdG9fZml0KCkgewotICAgIC8vIFNocmluayBvbmx5IGlm
IHNsYWNrIG1lbW9yeSBpcyBzdWZmaWNpZW50bHkgbGFyZ2UKLSAgICBpZiAoY2FwYWNpdHkoKSA8
IHNpemUoKSAqIDMgLyAyKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGJhc2ljX2Zic3Ry
aW5nKGNiZWdpbigpLCBjZW5kKCkpLnN3YXAoKnRoaXMpOwotICB9Ci0KLSAgdm9pZCBjbGVhcigp
IHsgcmVzaXplKDApOyB9Ci0KLSAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKSA9
PSAwOyB9Ci0KLSAgLy8gQysrMTEgMjEuNC41IGVsZW1lbnQgYWNjZXNzOgotICBjb25zdF9yZWZl
cmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgcG9zKSBjb25zdCB7Ci0gICAgcmV0dXJuICooYmVn
aW4oKSArIHBvcyk7Ci0gIH0KLQotICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgcG9z
KSB7Ci0gICAgcmV0dXJuICooYmVnaW4oKSArIHBvcyk7Ci0gIH0KLQotICBjb25zdF9yZWZlcmVu
Y2UgYXQoc2l6ZV90eXBlIG4pIGNvbnN0IHsKLSAgICBlbmZvcmNlKG4gPD0gc2l6ZSgpLCBzdGQ6
Ol9fdGhyb3dfb3V0X29mX3JhbmdlLCAiIik7Ci0gICAgcmV0dXJuICgqdGhpcylbbl07Ci0gIH0K
LQotICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIG4pIHsKLSAgICBlbmZvcmNlKG4gPCBzaXplKCks
IHN0ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UsICIiKTsKLSAgICByZXR1cm4gKCp0aGlzKVtuXTsK
LSAgfQotCi0gIC8vIEMrKzExIDIxLjQuNiBtb2RpZmllcnM6Ci0gIGJhc2ljX2Zic3RyaW5nJiBv
cGVyYXRvcis9KGNvbnN0IGJhc2ljX2Zic3RyaW5nJiBzdHIpIHsKLSAgICByZXR1cm4gYXBwZW5k
KHN0cik7Ci0gIH0KLQotICBiYXNpY19mYnN0cmluZyYgb3BlcmF0b3IrPShjb25zdCB2YWx1ZV90
eXBlKiBzKSB7Ci0gICAgcmV0dXJuIGFwcGVuZChzKTsKLSAgfQotCi0gIGJhc2ljX2Zic3RyaW5n
JiBvcGVyYXRvcis9KGNvbnN0IHZhbHVlX3R5cGUgYykgewotICAgIHB1c2hfYmFjayhjKTsKLSAg
ICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBiYXNpY19mYnN0cmluZyYgb3BlcmF0b3IrPShzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gaWwpIHsKLSAgICBhcHBlbmQoaWwpOwotICAg
IHJldHVybiAqdGhpczsKLSAgfQotCi0gIGJhc2ljX2Zic3RyaW5nJiBhcHBlbmQoY29uc3QgYmFz
aWNfZmJzdHJpbmcmIHN0cik7Ci0KLSAgYmFzaWNfZmJzdHJpbmcmCi0gIGFwcGVuZChjb25zdCBi
YXNpY19mYnN0cmluZyYgc3RyLCBjb25zdCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbik7Ci0K
LSAgYmFzaWNfZmJzdHJpbmcmIGFwcGVuZChjb25zdCB2YWx1ZV90eXBlKiBzLCBzaXplX3R5cGUg
bik7Ci0KLSAgYmFzaWNfZmJzdHJpbmcmIGFwcGVuZChjb25zdCB2YWx1ZV90eXBlKiBzKSB7Ci0g
ICAgcmV0dXJuIGFwcGVuZChzLCB0cmFpdHNMZW5ndGgocykpOwotICB9Ci0KLSAgYmFzaWNfZmJz
dHJpbmcmIGFwcGVuZChzaXplX3R5cGUgbiwgdmFsdWVfdHlwZSBjKTsKLQotICB0ZW1wbGF0ZTxj
bGFzcyBJbnB1dEl0ZXJhdG9yPgotICBiYXNpY19mYnN0cmluZyYgYXBwZW5kKElucHV0SXRlcmF0
b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkgewotICAgIGluc2VydChlbmQoKSwgZmlyc3Qs
IGxhc3QpOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIGJhc2ljX2Zic3RyaW5nJiBhcHBl
bmQoc3RkOjppbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IGlsKSB7Ci0gICAgcmV0dXJuIGFw
cGVuZChpbC5iZWdpbigpLCBpbC5lbmQoKSk7Ci0gIH0KLQotICB2b2lkIHB1c2hfYmFjayhjb25z
dCB2YWx1ZV90eXBlIGMpIHsgICAgICAgICAgICAgLy8gcHJpbWl0aXZlCi0gICAgc3RvcmVfLnB1
c2hfYmFjayhjKTsKLSAgfQotCi0gIGJhc2ljX2Zic3RyaW5nJiBhc3NpZ24oY29uc3QgYmFzaWNf
ZmJzdHJpbmcmIHN0cikgewotICAgIGlmICgmc3RyID09IHRoaXMpIHJldHVybiAqdGhpczsKLSAg
ICByZXR1cm4gYXNzaWduKHN0ci5kYXRhKCksIHN0ci5zaXplKCkpOwotICB9Ci0KLSAgYmFzaWNf
ZmJzdHJpbmcmIGFzc2lnbihiYXNpY19mYnN0cmluZyYmIHN0cikgewotICAgIHJldHVybiAqdGhp
cyA9IHN0ZDo6bW92ZShzdHIpOwotICB9Ci0KLSAgYmFzaWNfZmJzdHJpbmcmCi0gIGFzc2lnbihj
b25zdCBiYXNpY19mYnN0cmluZyYgc3RyLCBjb25zdCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUg
bik7Ci0KLSAgYmFzaWNfZmJzdHJpbmcmIGFzc2lnbihjb25zdCB2YWx1ZV90eXBlKiBzLCBjb25z
dCBzaXplX3R5cGUgbik7Ci0KLSAgYmFzaWNfZmJzdHJpbmcmIGFzc2lnbihjb25zdCB2YWx1ZV90
eXBlKiBzKSB7Ci0gICAgcmV0dXJuIGFzc2lnbihzLCB0cmFpdHNMZW5ndGgocykpOwotICB9Ci0K
LSAgYmFzaWNfZmJzdHJpbmcmIGFzc2lnbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlw
ZT4gaWwpIHsKLSAgICByZXR1cm4gYXNzaWduKGlsLmJlZ2luKCksIGlsLmVuZCgpKTsKLSAgfQot
Ci0gIHRlbXBsYXRlIDxjbGFzcyBJdE9yTGVuZ3RoLCBjbGFzcyBJdE9yQ2hhcj4KLSAgYmFzaWNf
ZmJzdHJpbmcmIGFzc2lnbihJdE9yTGVuZ3RoIGZpcnN0X29yX24sIEl0T3JDaGFyIGxhc3Rfb3Jf
YykgewotICAgIHJldHVybiByZXBsYWNlKGJlZ2luKCksIGVuZCgpLCBmaXJzdF9vcl9uLCBsYXN0
X29yX2MpOwotICB9Ci0KLSAgYmFzaWNfZmJzdHJpbmcmIGluc2VydChzaXplX3R5cGUgcG9zMSwg
Y29uc3QgYmFzaWNfZmJzdHJpbmcmIHN0cikgewotICAgIHJldHVybiBpbnNlcnQocG9zMSwgc3Ry
LmRhdGEoKSwgc3RyLnNpemUoKSk7Ci0gIH0KLQotICBiYXNpY19mYnN0cmluZyYgaW5zZXJ0KHNp
emVfdHlwZSBwb3MxLCBjb25zdCBiYXNpY19mYnN0cmluZyYgc3RyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdHlwZSBwb3MyLCBzaXplX3R5cGUgbikgewotICAgIGVuZm9yY2UocG9z
MiA8PSBzdHIubGVuZ3RoKCksIHN0ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UsICIiKTsKLSAgICBw
cm9jcnVzdGVzKG4sIHN0ci5sZW5ndGgoKSAtIHBvczIpOwotICAgIHJldHVybiBpbnNlcnQocG9z
MSwgc3RyLmRhdGEoKSArIHBvczIsIG4pOwotICB9Ci0KLSAgYmFzaWNfZmJzdHJpbmcmIGluc2Vy
dChzaXplX3R5cGUgcG9zLCBjb25zdCB2YWx1ZV90eXBlKiBzLCBzaXplX3R5cGUgbikgewotICAg
IGVuZm9yY2UocG9zIDw9IGxlbmd0aCgpLCBzdGQ6Ol9fdGhyb3dfb3V0X29mX3JhbmdlLCAiIik7
Ci0gICAgaW5zZXJ0KGJlZ2luKCkgKyBwb3MsIHMsIHMgKyBuKTsKLSAgICByZXR1cm4gKnRoaXM7
Ci0gIH0KLQotICBiYXNpY19mYnN0cmluZyYgaW5zZXJ0KHNpemVfdHlwZSBwb3MsIGNvbnN0IHZh
bHVlX3R5cGUqIHMpIHsKLSAgICByZXR1cm4gaW5zZXJ0KHBvcywgcywgdHJhaXRzTGVuZ3RoKHMp
KTsKLSAgfQotCi0gIGJhc2ljX2Zic3RyaW5nJiBpbnNlcnQoc2l6ZV90eXBlIHBvcywgc2l6ZV90
eXBlIG4sIHZhbHVlX3R5cGUgYykgewotICAgIGVuZm9yY2UocG9zIDw9IGxlbmd0aCgpLCBzdGQ6
Ol9fdGhyb3dfb3V0X29mX3JhbmdlLCAiIik7Ci0gICAgaW5zZXJ0KGJlZ2luKCkgKyBwb3MsIG4s
IGMpOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIGl0ZXJhdG9yIGluc2VydChjb25zdF9p
dGVyYXRvciBwLCBjb25zdCB2YWx1ZV90eXBlIGMpIHsKLSAgICBjb25zdCBzaXplX3R5cGUgcG9z
ID0gcCAtIGNiZWdpbigpOwotICAgIGluc2VydChwLCAxLCBjKTsKLSAgICByZXR1cm4gYmVnaW4o
KSArIHBvczsKLSAgfQotCi0jaWZuZGVmIF9MSUJTVERDWFhfRkJTVFJJTkcKLSBwcml2YXRlOgot
ICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTx2YWx1ZV90eXBlLCB0cmFpdHNfdHlwZT4gaXN0
cmVhbV90eXBlOwotICBpc3RyZWFtX3R5cGUmIGdldGxpbmVJbXBsKGlzdHJlYW1fdHlwZSYgaXMs
IHZhbHVlX3R5cGUgZGVsaW0pOwotCi0gcHVibGljOgotICBmcmllbmQgaW5saW5lIGlzdHJlYW1f
dHlwZSYgZ2V0bGluZShpc3RyZWFtX3R5cGUmIGlzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiYXNpY19mYnN0cmluZyYgc3RyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlIGRlbGltKSB7Ci0gICAgcmV0dXJuIHN0ci5nZXRs
aW5lSW1wbChpcywgZGVsaW0pOwotICB9Ci0KLSAgZnJpZW5kIGlubGluZSBpc3RyZWFtX3R5cGUm
IGdldGxpbmUoaXN0cmVhbV90eXBlJiBpcywgYmFzaWNfZmJzdHJpbmcmIHN0cikgewotICAgIHJl
dHVybiBnZXRsaW5lKGlzLCBzdHIsICdcbicpOwotICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSBp
dGVyYXRvcgotIGluc2VydEltcGxEaXNjcihjb25zdF9pdGVyYXRvciBpLCBzaXplX3R5cGUgbiwg
dmFsdWVfdHlwZSBjLCBzdGQ6OnRydWVfdHlwZSk7Ci0KLSB0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJ
dGVyPgotIGl0ZXJhdG9yCi0gaW5zZXJ0SW1wbERpc2NyKGNvbnN0X2l0ZXJhdG9yIGksIElucHV0
SXRlciBiLCBJbnB1dEl0ZXIgZSwgc3RkOjpmYWxzZV90eXBlKTsKLQotIHRlbXBsYXRlIDxjbGFz
cyBGd2RJdGVyYXRvcj4KLSBpdGVyYXRvciBpbnNlcnRJbXBsKAotICAgICBjb25zdF9pdGVyYXRv
ciBpLAotICAgICBGd2RJdGVyYXRvciBzMSwKLSAgICAgRndkSXRlcmF0b3IgczIsCi0gICAgIHN0
ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpOwotCi0gdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0
b3I+Ci0gaXRlcmF0b3IgaW5zZXJ0SW1wbCgKLSAgICAgY29uc3RfaXRlcmF0b3IgaSwKLSAgICAg
SW5wdXRJdGVyYXRvciBiLAotICAgICBJbnB1dEl0ZXJhdG9yIGUsCi0gICAgIHN0ZDo6aW5wdXRf
aXRlcmF0b3JfdGFnKTsKLQotcHVibGljOgotICB0ZW1wbGF0ZSA8Y2xhc3MgSXRPckxlbmd0aCwg
Y2xhc3MgSXRPckNoYXI+Ci0gIGl0ZXJhdG9yIGluc2VydChjb25zdF9pdGVyYXRvciBwLCBJdE9y
TGVuZ3RoIGZpcnN0X29yX24sIEl0T3JDaGFyIGxhc3Rfb3JfYykgewotICAgIHVzaW5nIFNlbCA9
IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8Ci0gICAgICAgIGJvb2wsCi0gICAgICAgIHN0ZDo6bnVt
ZXJpY19saW1pdHM8SXRPckxlbmd0aD46OmlzX3NwZWNpYWxpemVkPjsKLSAgICByZXR1cm4gaW5z
ZXJ0SW1wbERpc2NyKHAsIGZpcnN0X29yX24sIGxhc3Rfb3JfYywgU2VsKCkpOwotICB9Ci0KLSAg
aXRlcmF0b3IgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIHAsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2
YWx1ZV90eXBlPiBpbCkgewotICAgIHJldHVybiBpbnNlcnQocCwgaWwuYmVnaW4oKSwgaWwuZW5k
KCkpOwotICB9Ci0KLSAgYmFzaWNfZmJzdHJpbmcmIGVyYXNlKHNpemVfdHlwZSBwb3MgPSAwLCBz
aXplX3R5cGUgbiA9IG5wb3MpIHsKLSAgICBJbnZhcmlhbnQgY2hlY2tlcigqdGhpcyk7Ci0KLSAg
ICBlbmZvcmNlKHBvcyA8PSBsZW5ndGgoKSwgc3RkOjpfX3Rocm93X291dF9vZl9yYW5nZSwgIiIp
OwotICAgIHByb2NydXN0ZXMobiwgbGVuZ3RoKCkgLSBwb3MpOwotICAgIHN0ZDo6Y29weShiZWdp
bigpICsgcG9zICsgbiwgZW5kKCksIGJlZ2luKCkgKyBwb3MpOwotICAgIHJlc2l6ZShsZW5ndGgo
KSAtIG4pOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIGl0ZXJhdG9yIGVyYXNlKGl0ZXJh
dG9yIHBvc2l0aW9uKSB7Ci0gICAgY29uc3Qgc2l6ZV90eXBlIHBvcyhwb3NpdGlvbiAtIGJlZ2lu
KCkpOwotICAgIGVuZm9yY2UocG9zIDw9IHNpemUoKSwgc3RkOjpfX3Rocm93X291dF9vZl9yYW5n
ZSwgIiIpOwotICAgIGVyYXNlKHBvcywgMSk7Ci0gICAgcmV0dXJuIGJlZ2luKCkgKyBwb3M7Ci0g
IH0KLQotICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBmaXJzdCwgaXRlcmF0b3IgbGFzdCkgewot
ICAgIGNvbnN0IHNpemVfdHlwZSBwb3MoZmlyc3QgLSBiZWdpbigpKTsKLSAgICBlcmFzZShwb3Ms
IGxhc3QgLSBmaXJzdCk7Ci0gICAgcmV0dXJuIGJlZ2luKCkgKyBwb3M7Ci0gIH0KLQotICAvLyBS
ZXBsYWNlcyBhdCBtb3N0IG4xIGNoYXJzIG9mICp0aGlzLCBzdGFydGluZyB3aXRoIHBvczEgd2l0
aCB0aGUKLSAgLy8gY29udGVudCBvZiBzdHIKLSAgYmFzaWNfZmJzdHJpbmcmIHJlcGxhY2Uoc2l6
ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgYmFzaWNfZmJzdHJpbmcmIHN0cikgewotICAgIHJldHVybiByZXBsYWNlKHBvczEsIG4xLCBz
dHIuZGF0YSgpLCBzdHIuc2l6ZSgpKTsKLSAgfQotCi0gIC8vIFJlcGxhY2VzIGF0IG1vc3QgbjEg
Y2hhcnMgb2YgKnRoaXMsIHN0YXJ0aW5nIHdpdGggcG9zMSwKLSAgLy8gd2l0aCBhdCBtb3N0IG4y
IGNoYXJzIG9mIHN0ciBzdGFydGluZyB3aXRoIHBvczIKLSAgYmFzaWNfZmJzdHJpbmcmIHJlcGxh
Y2Uoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgYmFzaWNfZmJzdHJpbmcmIHN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90eXBlIHBvczIsIHNpemVfdHlwZSBuMikgewotICAgIGVuZm9yY2UocG9zMiA8PSBzdHIu
bGVuZ3RoKCksIHN0ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UsICIiKTsKLSAgICByZXR1cm4gcmVw
bGFjZShwb3MxLCBuMSwgc3RyLmRhdGEoKSArIHBvczIsCi0gICAgICAgICAgICAgICAgICAgc3Rk
OjptaW4objIsIHN0ci5zaXplKCkgLSBwb3MyKSk7Ci0gIH0KLQotICAvLyBSZXBsYWNlcyBhdCBt
b3N0IG4xIGNoYXJzIG9mICp0aGlzLCBzdGFydGluZyB3aXRoIHBvcywgd2l0aCBjaGFycyBmcm9t
IHMKLSAgYmFzaWNfZmJzdHJpbmcmIHJlcGxhY2Uoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4x
LCBjb25zdCB2YWx1ZV90eXBlKiBzKSB7Ci0gICAgcmV0dXJuIHJlcGxhY2UocG9zLCBuMSwgcywg
dHJhaXRzTGVuZ3RoKHMpKTsKLSAgfQotCi0gIC8vIFJlcGxhY2VzIGF0IG1vc3QgbjEgY2hhcnMg
b2YgKnRoaXMsIHN0YXJ0aW5nIHdpdGggcG9zLCB3aXRoIG4yCi0gIC8vIG9jY3VycmVuY2VzIG9m
IGMKLSAgLy8KLSAgLy8gY29uc29saWRhdGVkIHdpdGgKLSAgLy8KLSAgLy8gUmVwbGFjZXMgYXQg
bW9zdCBuMSBjaGFycyBvZiAqdGhpcywgc3RhcnRpbmcgd2l0aCBwb3MsIHdpdGggYXQKLSAgLy8g
bW9zdCBuMiBjaGFycyBvZiBzdHIuICBzdHIgbXVzdCBoYXZlIGF0IGxlYXN0IG4yIGNoYXJzLgot
ICB0ZW1wbGF0ZSA8Y2xhc3MgU3RyT3JMZW5ndGgsIGNsYXNzIE51bU9yQ2hhcj4KLSAgYmFzaWNf
ZmJzdHJpbmcmIHJlcGxhY2Uoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBTdHJPckxlbmd0aCBzX29yX24yLCBOdW1PckNoYXIgbl9vcl9jKSB7
Ci0gICAgSW52YXJpYW50IGNoZWNrZXIoKnRoaXMpOwotCi0gICAgZW5mb3JjZShwb3MgPD0gc2l6
ZSgpLCBzdGQ6Ol9fdGhyb3dfb3V0X29mX3JhbmdlLCAiIik7Ci0gICAgcHJvY3J1c3RlcyhuMSwg
bGVuZ3RoKCkgLSBwb3MpOwotICAgIGNvbnN0IGl0ZXJhdG9yIGIgPSBiZWdpbigpICsgcG9zOwot
ICAgIHJldHVybiByZXBsYWNlKGIsIGIgKyBuMSwgc19vcl9uMiwgbl9vcl9jKTsKLSAgfQotCi0g
IGJhc2ljX2Zic3RyaW5nJiByZXBsYWNlKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgY29uc3Qg
YmFzaWNfZmJzdHJpbmcmIHN0cikgewotICAgIHJldHVybiByZXBsYWNlKGkxLCBpMiwgc3RyLmRh
dGEoKSwgc3RyLmxlbmd0aCgpKTsKLSAgfQotCi0gIGJhc2ljX2Zic3RyaW5nJiByZXBsYWNlKGl0
ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgY29uc3QgdmFsdWVfdHlwZSogcykgewotICAgIHJldHVy
biByZXBsYWNlKGkxLCBpMiwgcywgdHJhaXRzTGVuZ3RoKHMpKTsKLSAgfQotCi1wcml2YXRlOgot
IGJhc2ljX2Zic3RyaW5nJiByZXBsYWNlSW1wbERpc2NyKAotICAgICBpdGVyYXRvciBpMSwKLSAg
ICAgaXRlcmF0b3IgaTIsCi0gICAgIGNvbnN0IHZhbHVlX3R5cGUqIHMsCi0gICAgIHNpemVfdHlw
ZSBuLAotICAgICBzdGQ6OmludGVncmFsX2NvbnN0YW50PGludCwgMj4pOwotCi0gYmFzaWNfZmJz
dHJpbmcmIHJlcGxhY2VJbXBsRGlzY3IoCi0gICAgIGl0ZXJhdG9yIGkxLAotICAgICBpdGVyYXRv
ciBpMiwKLSAgICAgc2l6ZV90eXBlIG4yLAotICAgICB2YWx1ZV90eXBlIGMsCi0gICAgIHN0ZDo6
aW50ZWdyYWxfY29uc3RhbnQ8aW50LCAxPik7Ci0KLSB0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVy
PgotIGJhc2ljX2Zic3RyaW5nJiByZXBsYWNlSW1wbERpc2NyKAotICAgICBpdGVyYXRvciBpMSwK
LSAgICAgaXRlcmF0b3IgaTIsCi0gICAgIElucHV0SXRlciBiLAotICAgICBJbnB1dEl0ZXIgZSwK
LSAgICAgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxpbnQsIDA+KTsKLQotcHJpdmF0ZToKLSB0ZW1w
bGF0ZSA8Y2xhc3MgRndkSXRlcmF0b3I+Ci0gYm9vbCByZXBsYWNlQWxpYXNlZChpdGVyYXRvciAv
KiBpMSAqLywKLSAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yIC8qIGkyICovLAotICAgICAg
ICAgICAgICAgICAgICAgRndkSXRlcmF0b3IgLyogczEgKi8sCi0gICAgICAgICAgICAgICAgICAg
ICBGd2RJdGVyYXRvciAvKiBzMiAqLywKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6ZmFsc2Vf
dHlwZSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBGd2RJ
dGVyYXRvcj4KLSAgYm9vbCByZXBsYWNlQWxpYXNlZCgKLSAgICAgIGl0ZXJhdG9yIGkxLAotICAg
ICAgaXRlcmF0b3IgaTIsCi0gICAgICBGd2RJdGVyYXRvciBzMSwKLSAgICAgIEZ3ZEl0ZXJhdG9y
IHMyLAotICAgICAgc3RkOjp0cnVlX3R5cGUpOwotCi0gIHRlbXBsYXRlIDxjbGFzcyBGd2RJdGVy
YXRvcj4KLSAgdm9pZCByZXBsYWNlSW1wbCgKLSAgICAgIGl0ZXJhdG9yIGkxLAotICAgICAgaXRl
cmF0b3IgaTIsCi0gICAgICBGd2RJdGVyYXRvciBzMSwKLSAgICAgIEZ3ZEl0ZXJhdG9yIHMyLAot
ICAgICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIElu
cHV0SXRlcmF0b3I+Ci0gIHZvaWQgcmVwbGFjZUltcGwoCi0gICAgICBpdGVyYXRvciBpMSwKLSAg
ICAgIGl0ZXJhdG9yIGkyLAotICAgICAgSW5wdXRJdGVyYXRvciBiLAotICAgICAgSW5wdXRJdGVy
YXRvciBlLAotICAgICAgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpOwotCi0gcHVibGljOgotICB0
ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgotICBiYXNpY19mYnN0cmluZyYgcmVwbGFjZShp
dGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFQxIGZp
cnN0X29yX25fb3JfcywgVDIgbGFzdF9vcl9jX29yX24pIHsKLSAgICBjb25zdGV4cHIgYm9vbCBu
dW0xID0gc3RkOjpudW1lcmljX2xpbWl0czxUMT46OmlzX3NwZWNpYWxpemVkLAotICAgICAgICAg
ICAgICAgICAgIG51bTIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQyPjo6aXNfc3BlY2lhbGl6ZWQ7
Ci0gICAgdXNpbmcgU2VsID0KLSAgICAgICAgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxpbnQsIG51
bTEgPyAobnVtMiA/IDEgOiAtMSkgOiAobnVtMiA/IDIgOiAwKT47Ci0gICAgcmV0dXJuIHJlcGxh
Y2VJbXBsRGlzY3IoaTEsIGkyLCBmaXJzdF9vcl9uX29yX3MsIGxhc3Rfb3JfY19vcl9uLCBTZWwo
KSk7Ci0gIH0KLQotICBzaXplX3R5cGUgY29weSh2YWx1ZV90eXBlKiBzLCBzaXplX3R5cGUgbiwg
c2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0IHsKLSAgICBlbmZvcmNlKHBvcyA8PSBzaXplKCksIHN0
ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UsICIiKTsKLSAgICBwcm9jcnVzdGVzKG4sIHNpemUoKSAt
IHBvcyk7Ci0KLSAgICBpZiAobiAhPSAwKSB7Ci0gICAgICBmYnN0cmluZ19kZXRhaWw6OnBvZENv
cHkoZGF0YSgpICsgcG9zLCBkYXRhKCkgKyBwb3MgKyBuLCBzKTsKLSAgICB9Ci0gICAgcmV0dXJu
IG47Ci0gIH0KLQotICB2b2lkIHN3YXAoYmFzaWNfZmJzdHJpbmcmIHJocykgewotICAgIHN0b3Jl
Xy5zd2FwKHJocy5zdG9yZV8pOwotICB9Ci0KLSAgY29uc3QgdmFsdWVfdHlwZSogY19zdHIoKSBj
b25zdCB7Ci0gICAgcmV0dXJuIHN0b3JlXy5jX3N0cigpOwotICB9Ci0KLSAgY29uc3QgdmFsdWVf
dHlwZSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGNfc3RyKCk7IH0KLQotICBhbGxvY2F0b3JfdHlw
ZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgewotICAgIHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOwot
ICB9Ci0KLSAgc2l6ZV90eXBlIGZpbmQoY29uc3QgYmFzaWNfZmJzdHJpbmcmIHN0ciwgc2l6ZV90
eXBlIHBvcyA9IDApIGNvbnN0IHsKLSAgICByZXR1cm4gZmluZChzdHIuZGF0YSgpLCBwb3MsIHN0
ci5sZW5ndGgoKSk7Ci0gIH0KLQotICBzaXplX3R5cGUgZmluZChjb25zdCB2YWx1ZV90eXBlKiBu
ZWVkbGUsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuc2l6ZSkKLSAgICAgIGNvbnN0OwotCi0g
IHNpemVfdHlwZSBmaW5kKGNvbnN0IHZhbHVlX3R5cGUqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBj
b25zdCB7Ci0gICAgcmV0dXJuIGZpbmQocywgcG9zLCB0cmFpdHNMZW5ndGgocykpOwotICB9Ci0K
LSAgc2l6ZV90eXBlIGZpbmQgKHZhbHVlX3R5cGUgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0
IHsKLSAgICByZXR1cm4gZmluZCgmYywgcG9zLCAxKTsKLSAgfQotCi0gIHNpemVfdHlwZSByZmlu
ZChjb25zdCBiYXNpY19mYnN0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Qg
ewotICAgIHJldHVybiByZmluZChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7Ci0gIH0K
LQotICBzaXplX3R5cGUgcmZpbmQoY29uc3QgdmFsdWVfdHlwZSogcywgc2l6ZV90eXBlIHBvcywg
c2l6ZV90eXBlIG4pIGNvbnN0OwotCi0gIHNpemVfdHlwZSByZmluZChjb25zdCB2YWx1ZV90eXBl
KiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QgewotICAgIHJldHVybiByZmluZChzLCBw
b3MsIHRyYWl0c0xlbmd0aChzKSk7Ci0gIH0KLQotICBzaXplX3R5cGUgcmZpbmQodmFsdWVfdHlw
ZSBjLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QgewotICAgIHJldHVybiByZmluZCgmYywg
cG9zLCAxKTsKLSAgfQotCi0gIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mKGNvbnN0IGJhc2ljX2Zi
c3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZpbmRf
Zmlyc3Rfb2Yoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOwotICB9Ci0KLSAgc2l6ZV90
eXBlIGZpbmRfZmlyc3Rfb2YoY29uc3QgdmFsdWVfdHlwZSogcywgc2l6ZV90eXBlIHBvcywgc2l6
ZV90eXBlIG4pCi0gICAgICBjb25zdDsKLQotICBzaXplX3R5cGUgZmluZF9maXJzdF9vZihjb25z
dCB2YWx1ZV90eXBlKiBzLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QgewotICAgIHJldHVybiBm
aW5kX2ZpcnN0X29mKHMsIHBvcywgdHJhaXRzTGVuZ3RoKHMpKTsKLSAgfQotCi0gIHNpemVfdHlw
ZSBmaW5kX2ZpcnN0X29mKHZhbHVlX3R5cGUgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0IHsK
LSAgICByZXR1cm4gZmluZF9maXJzdF9vZigmYywgcG9zLCAxKTsKLSAgfQotCi0gIHNpemVfdHlw
ZSBmaW5kX2xhc3Rfb2YoY29uc3QgYmFzaWNfZmJzdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9
IG5wb3MpCi0gICAgICBjb25zdCB7Ci0gICAgcmV0dXJuIGZpbmRfbGFzdF9vZihzdHIuZGF0YSgp
LCBwb3MsIHN0ci5sZW5ndGgoKSk7Ci0gIH0KLQotICBzaXplX3R5cGUgZmluZF9sYXN0X29mKGNv
bnN0IHZhbHVlX3R5cGUqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKLQot
ICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCB2YWx1ZV90eXBlKiBzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QgewotICAgIHJldHVy
biBmaW5kX2xhc3Rfb2YocywgcG9zLCB0cmFpdHNMZW5ndGgocykpOwotICB9Ci0KLSAgc2l6ZV90
eXBlIGZpbmRfbGFzdF9vZiAodmFsdWVfdHlwZSBjLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29u
c3QgewotICAgIHJldHVybiBmaW5kX2xhc3Rfb2YoJmMsIHBvcywgMSk7Ci0gIH0KLQotICBzaXpl
X3R5cGUgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfZmJzdHJpbmcmIHN0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdCB7Ci0gICAg
cmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mKHN0ci5kYXRhKCksIHBvcywgc3RyLnNpemUoKSk7Ci0g
IH0KLQotICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgdmFsdWVfdHlwZSogcywg
c2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pCi0gICAgICBjb25zdDsKLQotICBzaXplX3R5cGUg
ZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgdmFsdWVfdHlwZSogcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZpbmRf
Zmlyc3Rfbm90X29mKHMsIHBvcywgdHJhaXRzTGVuZ3RoKHMpKTsKLSAgfQotCi0gIHNpemVfdHlw
ZSBmaW5kX2ZpcnN0X25vdF9vZih2YWx1ZV90eXBlIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25z
dCB7Ci0gICAgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mKCZjLCBwb3MsIDEpOwotICB9Ci0KLSAg
c2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFzaWNfZmJzdHJpbmcmIHN0ciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0IHsK
LSAgICByZXR1cm4gZmluZF9sYXN0X25vdF9vZihzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgo
KSk7Ci0gIH0KLQotICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZihjb25zdCB2YWx1ZV90eXBl
KiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikKLSAgICAgIGNvbnN0OwotCi0gIHNpemVf
dHlwZSBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IHZhbHVlX3R5cGUqIHMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdCB7Ci0gICAgcmV0dXJu
IGZpbmRfbGFzdF9ub3Rfb2YocywgcG9zLCB0cmFpdHNMZW5ndGgocykpOwotICB9Ci0KLSAgc2l6
ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKHZhbHVlX3R5cGUgYywgc2l6ZV90eXBlIHBvcyA9IG5w
b3MpIGNvbnN0IHsKLSAgICByZXR1cm4gZmluZF9sYXN0X25vdF9vZigmYywgcG9zLCAxKTsKLSAg
fQotCi0gIGJhc2ljX2Zic3RyaW5nIHN1YnN0cihzaXplX3R5cGUgcG9zID0gMCwgc2l6ZV90eXBl
IG4gPSBucG9zKSBjb25zdCYgewotICAgIGVuZm9yY2UocG9zIDw9IHNpemUoKSwgc3RkOjpfX3Ro
cm93X291dF9vZl9yYW5nZSwgIiIpOwotICAgIHJldHVybiBiYXNpY19mYnN0cmluZyhkYXRhKCkg
KyBwb3MsIHN0ZDo6bWluKG4sIHNpemUoKSAtIHBvcykpOwotICB9Ci0KLSAgYmFzaWNfZmJzdHJp
bmcgc3Vic3RyKHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpICYmIHsKLSAg
ICBlbmZvcmNlKHBvcyA8PSBzaXplKCksIHN0ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UsICIiKTsK
LSAgICBlcmFzZSgwLCBwb3MpOwotICAgIGlmIChuIDwgc2l6ZSgpKSB7Ci0gICAgICByZXNpemUo
bik7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om1vdmUoKnRoaXMpOwotICB9Ci0KLSAgaW50IGNv
bXBhcmUoY29uc3QgYmFzaWNfZmJzdHJpbmcmIHN0cikgY29uc3QgewotICAgIC8vIEZJWCBkdWUg
dG8gR29uY2FsbyBOIE0gZGUgQ2FydmFsaG8gSnVseSAxOCwgMjAwNQotICAgIHJldHVybiBjb21w
YXJlKDAsIHNpemUoKSwgc3RyKTsKLSAgfQotCi0gIGludCBjb21wYXJlKHNpemVfdHlwZSBwb3Mx
LCBzaXplX3R5cGUgbjEsCi0gICAgICAgICAgICAgIGNvbnN0IGJhc2ljX2Zic3RyaW5nJiBzdHIp
IGNvbnN0IHsKLSAgICByZXR1cm4gY29tcGFyZShwb3MxLCBuMSwgc3RyLmRhdGEoKSwgc3RyLnNp
emUoKSk7Ci0gIH0KLQotICBpbnQgY29tcGFyZShzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4x
LAotICAgICAgICAgICAgICBjb25zdCB2YWx1ZV90eXBlKiBzKSBjb25zdCB7Ci0gICAgcmV0dXJu
IGNvbXBhcmUocG9zMSwgbjEsIHMsIHRyYWl0c0xlbmd0aChzKSk7Ci0gIH0KLQotICBpbnQgY29t
cGFyZShzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLAotICAgICAgICAgICAgICBjb25zdCB2
YWx1ZV90eXBlKiBzLCBzaXplX3R5cGUgbjIpIGNvbnN0IHsKLSAgICBlbmZvcmNlKHBvczEgPD0g
c2l6ZSgpLCBzdGQ6Ol9fdGhyb3dfb3V0X29mX3JhbmdlLCAiIik7Ci0gICAgcHJvY3J1c3Rlcyhu
MSwgc2l6ZSgpIC0gcG9zMSk7Ci0gICAgLy8gVGhlIGxpbmUgYmVsb3cgZml4ZWQgYnkgSmVhbi1G
cmFuY29pcyBCYXN0aWVuLCAwNC0yMy0yMDA3LiBUaGFua3MhCi0gICAgY29uc3QgaW50IHIgPSB0
cmFpdHNfdHlwZTo6Y29tcGFyZShwb3MxICsgZGF0YSgpLCBzLCBzdGQ6Om1pbihuMSwgbjIpKTsK
LSAgICByZXR1cm4gciAhPSAwID8gciA6IG4xID4gbjIgPyAxIDogbjEgPCBuMiA/IC0xIDogMDsK
LSAgfQotCi0gIGludCBjb21wYXJlKHNpemVfdHlwZSBwb3MxLCBzaXplX3R5cGUgbjEsCi0gICAg
ICAgICAgICAgIGNvbnN0IGJhc2ljX2Zic3RyaW5nJiBzdHIsCi0gICAgICAgICAgICAgIHNpemVf
dHlwZSBwb3MyLCBzaXplX3R5cGUgbjIpIGNvbnN0IHsKLSAgICBlbmZvcmNlKHBvczIgPD0gc3Ry
LnNpemUoKSwgc3RkOjpfX3Rocm93X291dF9vZl9yYW5nZSwgIiIpOwotICAgIHJldHVybiBjb21w
YXJlKHBvczEsIG4xLCBzdHIuZGF0YSgpICsgcG9zMiwKLSAgICAgICAgICAgICAgICAgICBzdGQ6
Om1pbihuMiwgc3RyLnNpemUoKSAtIHBvczIpKTsKLSAgfQotCi0gIC8vIENvZGUgZnJvbSBKZWFu
LUZyYW5jb2lzIEJhc3RpZW4gKDAzLzI2LzIwMDcpCi0gIGludCBjb21wYXJlKGNvbnN0IHZhbHVl
X3R5cGUqIHMpIGNvbnN0IHsKLSAgICAvLyBDb3VsZCBmb3J3YXJkIHRvIGNvbXBhcmUoMCwgc2l6
ZSgpLCBzLCB0cmFpdHNMZW5ndGgocykpCi0gICAgLy8gYnV0IHRoYXQgZG9lcyB0d28gZXh0cmEg
Y2hlY2tzCi0gICAgY29uc3Qgc2l6ZV90eXBlIG4xKHNpemUoKSksIG4yKHRyYWl0c0xlbmd0aChz
KSk7Ci0gICAgY29uc3QgaW50IHIgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShkYXRhKCksIHMsIHN0
ZDo6bWluKG4xLCBuMikpOwotICAgIHJldHVybiByICE9IDAgPyByIDogbjEgPiBuMiA/IDEgOiBu
MSA8IG4yID8gLTEgOiAwOwotICB9Ci0KLXByaXZhdGU6Ci0gIC8vIERhdGEKLSAgU3RvcmFnZSBz
dG9yZV87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xh
c3MgUz4KLUZPTExZX01BTExPQ19OT0lOTElORSBpbmxpbmUgdHlwZW5hbWUgYmFzaWNfZmJzdHJp
bmc8RSwgVCwgQSwgUz46OnNpemVfdHlwZQotYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OnRy
YWl0c0xlbmd0aChjb25zdCB2YWx1ZV90eXBlKiBzKSB7Ci0gIHJldHVybiBzID8gdHJhaXRzX3R5
cGU6Omxlbmd0aChzKQotICAgICAgICAgICA6IChzdGQ6Ol9fdGhyb3dfbG9naWNfZXJyb3IoCi0g
ICAgICAgICAgICAgICAgICAiYmFzaWNfZmJzdHJpbmc6IG51bGwgcG9pbnRlciBpbml0aWFsaXpl
ciBub3QgdmFsaWQiKSwKLSAgICAgICAgICAgICAgMCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFzcyBTPgotaW5saW5lIGJhc2ljX2Zic3RyaW5nPEUs
IFQsIEEsIFM+JiBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6b3BlcmF0b3I9KAotICAgIGNv
bnN0IGJhc2ljX2Zic3RyaW5nJiBsaHMpIHsKLSAgSW52YXJpYW50IGNoZWNrZXIoKnRoaXMpOwot
Ci0gIGlmIChGQlNUUklOR19VTkxJS0VMWSgmbGhzID09IHRoaXMpKSB7Ci0gICAgcmV0dXJuICp0
aGlzOwotICB9Ci0KLSAgcmV0dXJuIGFzc2lnbihsaHMuZGF0YSgpLCBsaHMuc2l6ZSgpKTsKLX0K
LQotLy8gTW92ZSBhc3NpZ25tZW50Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xh
c3MgQSwgY2xhc3MgUz4KLWlubGluZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYgYmFzaWNf
ZmJzdHJpbmc8RSwgVCwgQSwgUz46Om9wZXJhdG9yPSgKLSAgICBiYXNpY19mYnN0cmluZyYmIGdv
bmVyKSBub2V4Y2VwdCB7Ci0gIGlmIChGQlNUUklOR19VTkxJS0VMWSgmZ29uZXIgPT0gdGhpcykp
IHsKLSAgICAvLyBDb21wYXRpYmlsaXR5IHdpdGggc3RkOjpiYXNpY19zdHJpbmc8PiwKLSAgICAv
LyBDKysxMSAyMS40LjIgW3N0cmluZy5jb25zXSAvIDIzIHJlcXVpcmVzIHNlbGYtbW92ZS1hc3Np
Z25tZW50IHN1cHBvcnQuCi0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0gIC8vIE5vIG5lZWQgb2Yg
dGhpcyBhbnltb3JlCi0gIHRoaXMtPn5iYXNpY19mYnN0cmluZygpOwotICAvLyBNb3ZlIHRoZSBn
b25lciBpbnRvIHRoaXMKLSAgbmV3ICgmc3RvcmVfKSBTKHN0ZDo6bW92ZShnb25lci5zdG9yZV8p
KTsKLSAgcmV0dXJuICp0aGlzOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwg
Y2xhc3MgQSwgY2xhc3MgUz4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUUD4KLWlubGluZSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICBzdGQ6OmlzX3NhbWU8Ci0gICAgICAgIHR5cGVuYW1lIHN0
ZDo6ZGVjYXk8VFA+Ojp0eXBlLAotICAgICAgICB0eXBlbmFtZSBiYXNpY19mYnN0cmluZzxFLCBU
LCBBLCBTPjo6dmFsdWVfdHlwZT46OnZhbHVlLAotICAgIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEs
IFM+Jj46OnR5cGUKLWJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+OjpvcGVyYXRvcj0oVFAgYykg
ewotICBJbnZhcmlhbnQgY2hlY2tlcigqdGhpcyk7Ci0KLSAgaWYgKGVtcHR5KCkpIHsKLSAgICBz
dG9yZV8uZXhwYW5kTm9pbml0KDEpOwotICB9IGVsc2UgaWYgKHN0b3JlXy5pc1NoYXJlZCgpKSB7
Ci0gICAgYmFzaWNfZmJzdHJpbmcoMSwgYykuc3dhcCgqdGhpcyk7Ci0gICAgcmV0dXJuICp0aGlz
OwotICB9IGVsc2UgewotICAgIHN0b3JlXy5zaHJpbmsoc2l6ZSgpIC0gMSk7Ci0gIH0KLSAgZnJv
bnQoKSA9IGM7Ci0gIHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNs
YXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci1pbmxpbmUgdm9pZCBiYXNpY19mYnN0cmluZzxFLCBU
LCBBLCBTPjo6cmVzaXplKAotICAgIGNvbnN0IHNpemVfdHlwZSBuLCBjb25zdCB2YWx1ZV90eXBl
IGMgLyo9IHZhbHVlX3R5cGUoKSovKSB7Ci0gIEludmFyaWFudCBjaGVja2VyKCp0aGlzKTsKLQot
ICBhdXRvIHNpemUgPSB0aGlzLT5zaXplKCk7Ci0gIGlmIChuIDw9IHNpemUpIHsKLSAgICBzdG9y
ZV8uc2hyaW5rKHNpemUgLSBuKTsKLSAgfSBlbHNlIHsKLSAgICBhdXRvIGNvbnN0IGRlbHRhID0g
biAtIHNpemU7Ci0gICAgYXV0byBwRGF0YSA9IHN0b3JlXy5leHBhbmROb2luaXQoZGVsdGEpOwot
ICAgIGZic3RyaW5nX2RldGFpbDo6cG9kRmlsbChwRGF0YSwgcERhdGEgKyBkZWx0YSwgYyk7Ci0g
IH0KLSAgRkJTVFJJTkdfQVNTRVJUKHRoaXMtPnNpemUoKSA9PSBuKTsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci1pbmxpbmUgYmFzaWNfZmJz
dHJpbmc8RSwgVCwgQSwgUz4mIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+OjphcHBlbmQoCi0g
ICAgY29uc3QgYmFzaWNfZmJzdHJpbmcmIHN0cikgewotI2lmbmRlZiBOREVCVUcKLSAgYXV0byBk
ZXNpcmVkU2l6ZSA9IHNpemUoKSArIHN0ci5zaXplKCk7Ci0jZW5kaWYKLSAgYXBwZW5kKHN0ci5k
YXRhKCksIHN0ci5zaXplKCkpOwotICBGQlNUUklOR19BU1NFUlQoc2l6ZSgpID09IGRlc2lyZWRT
aXplKTsKLSAgcmV0dXJuICp0aGlzOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3Mg
VCwgY2xhc3MgQSwgY2xhc3MgUz4KLWlubGluZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYg
YmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OmFwcGVuZCgKLSAgICBjb25zdCBiYXNpY19mYnN0
cmluZyYgc3RyLCBjb25zdCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgewotICBjb25zdCBz
aXplX3R5cGUgc3ogPSBzdHIuc2l6ZSgpOwotICBlbmZvcmNlKHBvcyA8PSBzeiwgc3RkOjpfX3Ro
cm93X291dF9vZl9yYW5nZSwgIiIpOwotICBwcm9jcnVzdGVzKG4sIHN6IC0gcG9zKTsKLSAgcmV0
dXJuIGFwcGVuZChzdHIuZGF0YSgpICsgcG9zLCBuKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci1GT0xMWV9NQUxMT0NfTk9JTkxJTkUgaW5s
aW5lIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JgotYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwg
Uz46OmFwcGVuZChjb25zdCB2YWx1ZV90eXBlKiBzLCBzaXplX3R5cGUgbikgewotICBJbnZhcmlh
bnQgY2hlY2tlcigqdGhpcyk7Ci0KLSAgaWYgKEZCU1RSSU5HX1VOTElLRUxZKCFuKSkgewotICAg
IC8vIFVubGlrZWx5IGJ1dCBtdXN0IGJlIGRvbmUKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLSAg
YXV0byBjb25zdCBvbGRTaXplID0gc2l6ZSgpOwotICBhdXRvIGNvbnN0IG9sZERhdGEgPSBkYXRh
KCk7Ci0gIGF1dG8gcERhdGEgPSBzdG9yZV8uZXhwYW5kTm9pbml0KG4sIC8qIGV4cEdyb3d0aCA9
ICovIHRydWUpOwotCi0gIC8vIENoZWNrIGZvciBhbGlhc2luZyAocmFyZSkuIFdlIGNvdWxkIHVz
ZSAiPD0iIGhlcmUgYnV0IGluIHRoZW9yeQotICAvLyB0aG9zZSBkbyBub3Qgd29yayBmb3IgcG9p
bnRlcnMgdW5sZXNzIHRoZSBwb2ludGVycyBwb2ludCB0bwotICAvLyBlbGVtZW50cyBpbiB0aGUg
c2FtZSBhcnJheS4gRm9yIHRoYXQgcmVhc29uIHdlIHVzZQotICAvLyBzdGQ6Omxlc3NfZXF1YWws
IHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gb2ZmZXIgYSB0b3RhbCBvcmRlcgotICAvLyBvdmVyIHBv
aW50ZXJzLiBTZWUgZGlzY3Vzc2lvbiBhdCBodHRwOi8vZ29vLmdsL0N5MnlhIGZvciBtb3JlCi0g
IC8vIGluZm8uCi0gIHN0ZDo6bGVzc19lcXVhbDxjb25zdCB2YWx1ZV90eXBlKj4gbGU7Ci0gIGlm
IChGQlNUUklOR19VTkxJS0VMWShsZShvbGREYXRhLCBzKSAmJiAhbGUob2xkRGF0YSArIG9sZFNp
emUsIHMpKSkgewotICAgIEZCU1RSSU5HX0FTU0VSVChsZShzICsgbiwgb2xkRGF0YSArIG9sZFNp
emUpKTsKLSAgICAvLyBleHBhbmROb2luaXQoKSBjb3VsZCBoYXZlIG1vdmVkIHRoZSBzdG9yYWdl
LCByZXN0b3JlIHRoZSBzb3VyY2UuCi0gICAgcyA9IGRhdGEoKSArIChzIC0gb2xkRGF0YSk7Ci0g
ICAgZmJzdHJpbmdfZGV0YWlsOjpwb2RNb3ZlKHMsIHMgKyBuLCBwRGF0YSk7Ci0gIH0gZWxzZSB7
Ci0gICAgZmJzdHJpbmdfZGV0YWlsOjpwb2RDb3B5KHMsIHMgKyBuLCBwRGF0YSk7Ci0gIH0KLQot
ICBGQlNUUklOR19BU1NFUlQoc2l6ZSgpID09IG9sZFNpemUgKyBuKTsKLSAgcmV0dXJuICp0aGlz
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUz4K
LWlubGluZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYgYmFzaWNfZmJzdHJpbmc8RSwgVCwg
QSwgUz46OmFwcGVuZCgKLSAgICBzaXplX3R5cGUgbiwgdmFsdWVfdHlwZSBjKSB7Ci0gIEludmFy
aWFudCBjaGVja2VyKCp0aGlzKTsKLSAgYXV0byBwRGF0YSA9IHN0b3JlXy5leHBhbmROb2luaXQo
biwgLyogZXhwR3Jvd3RoID0gKi8gdHJ1ZSk7Ci0gIGZic3RyaW5nX2RldGFpbDo6cG9kRmlsbChw
RGF0YSwgcERhdGEgKyBuLCBjKTsKLSAgcmV0dXJuICp0aGlzOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUz4KLWlubGluZSBiYXNpY19mYnN0cmlu
ZzxFLCBULCBBLCBTPiYgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OmFzc2lnbigKLSAgICBj
b25zdCBiYXNpY19mYnN0cmluZyYgc3RyLCBjb25zdCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUg
bikgewotICBjb25zdCBzaXplX3R5cGUgc3ogPSBzdHIuc2l6ZSgpOwotICBlbmZvcmNlKHBvcyA8
PSBzeiwgc3RkOjpfX3Rocm93X291dF9vZl9yYW5nZSwgIiIpOwotICBwcm9jcnVzdGVzKG4sIHN6
IC0gcG9zKTsKLSAgcmV0dXJuIGFzc2lnbihzdHIuZGF0YSgpICsgcG9zLCBuKTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci1GT0xMWV9NQUxM
T0NfTk9JTkxJTkUgaW5saW5lIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JgotYmFzaWNfZmJz
dHJpbmc8RSwgVCwgQSwgUz46OmFzc2lnbihjb25zdCB2YWx1ZV90eXBlKiBzLCBjb25zdCBzaXpl
X3R5cGUgbikgewotICBJbnZhcmlhbnQgY2hlY2tlcigqdGhpcyk7Ci0KLSAgaWYgKG4gPT0gMCkg
ewotICAgIHJlc2l6ZSgwKTsKLSAgfSBlbHNlIGlmIChzaXplKCkgPj0gbikgewotICAgIC8vIHMg
Y2FuIGFsaWFzIHRoaXMsIHdlIG5lZWQgdG8gdXNlIHBvZE1vdmUuCi0gICAgZmJzdHJpbmdfZGV0
YWlsOjpwb2RNb3ZlKHMsIHMgKyBuLCBzdG9yZV8ubXV0YWJsZURhdGEoKSk7Ci0gICAgc3RvcmVf
LnNocmluayhzaXplKCkgLSBuKTsKLSAgICBGQlNUUklOR19BU1NFUlQoc2l6ZSgpID09IG4pOwot
ICB9IGVsc2UgewotICAgIC8vIElmIG4gaXMgbGFyZ2VyIHRoYW4gc2l6ZSgpLCBzIGNhbm5vdCBh
bGlhcyB0aGlzIHN0cmluZydzCi0gICAgLy8gc3RvcmFnZS4KLSAgICByZXNpemUoMCk7Ci0gICAg
Ly8gRG8gbm90IHVzZSBleHBvbmVudGlhbCBncm93dGggaGVyZTogYXNzaWduKCkgc2hvdWxkIGJl
IHRpZ2h0LAotICAgIC8vIHRvIG1pcnJvciB0aGUgYmVoYXZpb3Igb2YgdGhlIGVxdWl2YWxlbnQg
Y29uc3RydWN0b3IuCi0gICAgZmJzdHJpbmdfZGV0YWlsOjpwb2RDb3B5KHMsIHMgKyBuLCBzdG9y
ZV8uZXhwYW5kTm9pbml0KG4pKTsKLSAgfQotCi0gIEZCU1RSSU5HX0FTU0VSVChzaXplKCkgPT0g
bik7Ci0gIHJldHVybiAqdGhpczsKLX0KLQotI2lmbmRlZiBfTElCU1REQ1hYX0ZCU1RSSU5HCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUz4KLWlubGluZSB0
eXBlbmFtZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6aXN0cmVhbV90eXBlJgotYmFzaWNf
ZmJzdHJpbmc8RSwgVCwgQSwgUz46OmdldGxpbmVJbXBsKGlzdHJlYW1fdHlwZSAmIGlzLCB2YWx1
ZV90eXBlIGRlbGltKSB7Ci0gIEludmFyaWFudCBjaGVja2VyKCp0aGlzKTsKLQotICBjbGVhcigp
OwotICBzaXplX3Qgc2l6ZSA9IDA7Ci0gIHdoaWxlICh0cnVlKSB7Ci0gICAgc2l6ZV90IGF2YWls
ID0gY2FwYWNpdHkoKSAtIHNpemU7Ci0gICAgLy8gZmJzdHJpbmcgaGFzIDEgYnl0ZSBleHRyYSBj
YXBhY2l0eSBmb3IgdGhlIG51bGwgdGVybWluYXRvciwKLSAgICAvLyBhbmQgZ2V0bGluZSBudWxs
LXRlcm1pbmF0ZXMgdGhlIHJlYWQgc3RyaW5nLgotICAgIGlzLmdldGxpbmUoc3RvcmVfLmV4cGFu
ZE5vaW5pdChhdmFpbCksIGF2YWlsICsgMSwgZGVsaW0pOwotICAgIHNpemUgKz0gaXMuZ2NvdW50
KCk7Ci0KLSAgICBpZiAoaXMuYmFkKCkgfHwgaXMuZW9mKCkgfHwgIWlzLmZhaWwoKSkgewotICAg
ICAgLy8gRG9uZSBieSBlaXRoZXIgZmFpbHVyZSwgZW5kIG9mIGZpbGUsIG9yIG5vcm1hbCByZWFk
LgotICAgICAgaWYgKCFpcy5iYWQoKSAmJiAhaXMuZW9mKCkpIHsKLSAgICAgICAgLS1zaXplOyAv
LyBnY291bnQoKSBhbHNvIGFjY291bnRzIGZvciB0aGUgZGVsaW1pdGVyLgotICAgICAgfQotICAg
ICAgcmVzaXplKHNpemUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgRkJTVFJJTkdfQVNT
RVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKLSAgICBGQlNUUklOR19BU1NFUlQoc2l6ZSA9PSBj
YXBhY2l0eSgpKTsKLSAgICAvLyBTdGFydCBhdCBtaW5pbXVtIGFsbG9jYXRpb24gNjMgKyB0ZXJt
aW5hdG9yID0gNjQuCi0gICAgcmVzZXJ2ZShzdGQ6Om1heDxzaXplX3Q+KDYzLCAzICogc2l6ZSAv
IDIpKTsKLSAgICAvLyBDbGVhciB0aGUgZXJyb3Igc28gd2UgY2FuIGNvbnRpbnVlIHJlYWRpbmcu
Ci0gICAgaXMuY2xlYXIoKTsKLSAgfQotICByZXR1cm4gaXM7Ci19Ci0jZW5kaWYKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci1pbmxpbmUgdHlwZW5h
bWUgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OnNpemVfdHlwZQotYmFzaWNfZmJzdHJpbmc8
RSwgVCwgQSwgUz46OmZpbmQoCi0gICAgY29uc3QgdmFsdWVfdHlwZSogbmVlZGxlLCBjb25zdCBz
aXplX3R5cGUgcG9zLCBjb25zdCBzaXplX3R5cGUgbnNpemUpCi0gICAgY29uc3QgewotICBhdXRv
IGNvbnN0IHNpemUgPSB0aGlzLT5zaXplKCk7Ci0gIC8vIG5zaXplICsgcG9zIGNhbiBvdmVyZmxv
dyAoZWcgcG9zID09IG5wb3MpLCBndWFyZCBhZ2FpbnN0IHRoYXQgYnkgY2hlY2tpbmcKLSAgLy8g
dGhhdCBuc2l6ZSArIHBvcyBkb2VzIG5vdCB3cmFwIGFyb3VuZC4KLSAgaWYgKG5zaXplICsgcG9z
ID4gc2l6ZSB8fCBuc2l6ZSArIHBvcyA8IHBvcykgewotICAgIHJldHVybiBucG9zOwotICB9Ci0K
LSAgaWYgKG5zaXplID09IDApIHsKLSAgICByZXR1cm4gcG9zOwotICB9Ci0gIC8vIERvbid0IHVz
ZSBzdGQ6OnNlYXJjaCwgdXNlIGEgQm95ZXItTW9vcmUtbGlrZSB0cmljayBieSBjb21wYXJpbmcK
LSAgLy8gdGhlIGxhc3QgY2hhcmFjdGVycyBmaXJzdAotICBhdXRvIGNvbnN0IGhheXN0YWNrID0g
ZGF0YSgpOwotICBhdXRvIGNvbnN0IG5zaXplXzEgPSBuc2l6ZSAtIDE7Ci0gIGF1dG8gY29uc3Qg
bGFzdE5lZWRsZSA9IG5lZWRsZVtuc2l6ZV8xXTsKLQotICAvLyBCb3llci1Nb29yZSBza2lwIHZh
bHVlIGZvciB0aGUgbGFzdCBjaGFyIGluIHRoZSBuZWVkbGUuIFplcm8gaXMKLSAgLy8gbm90IGEg
dmFsaWQgdmFsdWU7IHNraXAgd2lsbCBiZSBjb21wdXRlZCB0aGUgZmlyc3QgdGltZSBpdCdzCi0g
IC8vIG5lZWRlZC4KLSAgc2l6ZV90eXBlIHNraXAgPSAwOwotCi0gIGNvbnN0IEUqIGkgPSBoYXlz
dGFjayArIHBvczsKLSAgYXV0byBpRW5kID0gaGF5c3RhY2sgKyBzaXplIC0gbnNpemVfMTsKLQot
ICB3aGlsZSAoaSA8IGlFbmQpIHsKLSAgICAvLyBCb3llci1Nb29yZTogbWF0Y2ggdGhlIGxhc3Qg
ZWxlbWVudCBpbiB0aGUgbmVlZGxlCi0gICAgd2hpbGUgKGlbbnNpemVfMV0gIT0gbGFzdE5lZWRs
ZSkgewotICAgICAgaWYgKCsraSA9PSBpRW5kKSB7Ci0gICAgICAgIC8vIG5vdCBmb3VuZAotICAg
ICAgICByZXR1cm4gbnBvczsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gSGVyZSB3ZSBrbm93IHRo
YXQgdGhlIGxhc3QgY2hhciBtYXRjaGVzCi0gICAgLy8gQ29udGludWUgaW4gcGVkZXN0cmlhbiBt
b2RlCi0gICAgZm9yIChzaXplX3QgaiA9IDA7OykgewotICAgICAgRkJTVFJJTkdfQVNTRVJUKGog
PCBuc2l6ZSk7Ci0gICAgICBpZiAoaVtqXSAhPSBuZWVkbGVbal0pIHsKLSAgICAgICAgLy8gTm90
IGZvdW5kLCB3ZSBjYW4gc2tpcAotICAgICAgICAvLyBDb21wdXRlIHRoZSBza2lwIHZhbHVlIGxh
emlseQotICAgICAgICBpZiAoc2tpcCA9PSAwKSB7Ci0gICAgICAgICAgc2tpcCA9IDE7Ci0gICAg
ICAgICAgd2hpbGUgKHNraXAgPD0gbnNpemVfMSAmJiBuZWVkbGVbbnNpemVfMSAtIHNraXBdICE9
IGxhc3ROZWVkbGUpIHsKLSAgICAgICAgICAgICsrc2tpcDsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaSArPSBza2lwOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8v
IENoZWNrIGlmIGRvbmUgc2VhcmNoaW5nCi0gICAgICBpZiAoKytqID09IG5zaXplKSB7Ci0gICAg
ICAgIC8vIFlheQotICAgICAgICByZXR1cm4gaSAtIGhheXN0YWNrOwotICAgICAgfQotICAgIH0K
LSAgfQotICByZXR1cm4gbnBvczsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQs
IGNsYXNzIEEsIGNsYXNzIFM+Ci1pbmxpbmUgdHlwZW5hbWUgYmFzaWNfZmJzdHJpbmc8RSwgVCwg
QSwgUz46Oml0ZXJhdG9yCi1iYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6aW5zZXJ0SW1wbERp
c2NyKAotICAgIGNvbnN0X2l0ZXJhdG9yIGksIHNpemVfdHlwZSBuLCB2YWx1ZV90eXBlIGMsIHN0
ZDo6dHJ1ZV90eXBlKSB7Ci0gIEludmFyaWFudCBjaGVja2VyKCp0aGlzKTsKLQotICBGQlNUUklO
R19BU1NFUlQoaSA+PSBjYmVnaW4oKSAmJiBpIDw9IGNlbmQoKSk7Ci0gIGNvbnN0IHNpemVfdHlw
ZSBwb3MgPSBpIC0gY2JlZ2luKCk7Ci0KLSAgYXV0byBvbGRTaXplID0gc2l6ZSgpOwotICBzdG9y
ZV8uZXhwYW5kTm9pbml0KG4sIC8qIGV4cEdyb3d0aCA9ICovIHRydWUpOwotICBhdXRvIGIgPSBi
ZWdpbigpOwotICBmYnN0cmluZ19kZXRhaWw6OnBvZE1vdmUoYiArIHBvcywgYiArIG9sZFNpemUs
IGIgKyBwb3MgKyBuKTsKLSAgZmJzdHJpbmdfZGV0YWlsOjpwb2RGaWxsKGIgKyBwb3MsIGIgKyBw
b3MgKyBuLCBjKTsKLQotICByZXR1cm4gYiArIHBvczsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci10ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVy
PgotaW5saW5lIHR5cGVuYW1lIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+OjppdGVyYXRvcgot
YmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46Omluc2VydEltcGxEaXNjcigKLSAgICBjb25zdF9p
dGVyYXRvciBpLCBJbnB1dEl0ZXIgYiwgSW5wdXRJdGVyIGUsIHN0ZDo6ZmFsc2VfdHlwZSkgewot
ICByZXR1cm4gaW5zZXJ0SW1wbCgKLSAgICAgIGksIGIsIGUsIHR5cGVuYW1lIHN0ZDo6aXRlcmF0
b3JfdHJhaXRzPElucHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwotfQotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUz4KLXRlbXBsYXRlIDxjbGFz
cyBGd2RJdGVyYXRvcj4KLWlubGluZSB0eXBlbmFtZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBT
Pjo6aXRlcmF0b3IKLWJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+OjppbnNlcnRJbXBsKAotICAg
IGNvbnN0X2l0ZXJhdG9yIGksCi0gICAgRndkSXRlcmF0b3IgczEsCi0gICAgRndkSXRlcmF0b3Ig
czIsCi0gICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewotICBJbnZhcmlhbnQgY2hlY2tl
cigqdGhpcyk7Ci0KLSAgRkJTVFJJTkdfQVNTRVJUKGkgPj0gY2JlZ2luKCkgJiYgaSA8PSBjZW5k
KCkpOwotICBjb25zdCBzaXplX3R5cGUgcG9zID0gaSAtIGNiZWdpbigpOwotICBhdXRvIG4gPSBz
dGQ6OmRpc3RhbmNlKHMxLCBzMik7Ci0gIEZCU1RSSU5HX0FTU0VSVChuID49IDApOwotCi0gIGF1
dG8gb2xkU2l6ZSA9IHNpemUoKTsKLSAgc3RvcmVfLmV4cGFuZE5vaW5pdChuLCAvKiBleHBHcm93
dGggPSAqLyB0cnVlKTsKLSAgYXV0byBiID0gYmVnaW4oKTsKLSAgZmJzdHJpbmdfZGV0YWlsOjpw
b2RNb3ZlKGIgKyBwb3MsIGIgKyBvbGRTaXplLCBiICsgcG9zICsgbik7Ci0gIHN0ZDo6Y29weShz
MSwgczIsIGIgKyBwb3MpOwotCi0gIHJldHVybiBiICsgcG9zOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUz4KLXRlbXBsYXRlIDxjbGFzcyBJbnB1
dEl0ZXJhdG9yPgotaW5saW5lIHR5cGVuYW1lIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+Ojpp
dGVyYXRvcgotYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46Omluc2VydEltcGwoCi0gICAgY29u
c3RfaXRlcmF0b3IgaSwKLSAgICBJbnB1dEl0ZXJhdG9yIGIsCi0gICAgSW5wdXRJdGVyYXRvciBl
LAotICAgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKSB7Ci0gIGNvbnN0IGF1dG8gcG9zID0gaSAt
IGNiZWdpbigpOwotICBiYXNpY19mYnN0cmluZyB0ZW1wKGNiZWdpbigpLCBpKTsKLSAgZm9yICg7
IGIgIT0gZTsgKytiKSB7Ci0gICAgdGVtcC5wdXNoX2JhY2soKmIpOwotICB9Ci0gIHRlbXAuYXBw
ZW5kKGksIGNlbmQoKSk7Ci0gIHN3YXAodGVtcCk7Ci0gIHJldHVybiBiZWdpbigpICsgcG9zOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUz4KLWlu
bGluZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwg
Uz46OnJlcGxhY2VJbXBsRGlzY3IoCi0gICAgaXRlcmF0b3IgaTEsCi0gICAgaXRlcmF0b3IgaTIs
Ci0gICAgY29uc3QgdmFsdWVfdHlwZSogcywKLSAgICBzaXplX3R5cGUgbiwKLSAgICBzdGQ6Omlu
dGVncmFsX2NvbnN0YW50PGludCwgMj4pIHsKLSAgRkJTVFJJTkdfQVNTRVJUKGkxIDw9IGkyKTsK
LSAgRkJTVFJJTkdfQVNTRVJUKGJlZ2luKCkgPD0gaTEgJiYgaTEgPD0gZW5kKCkpOwotICBGQlNU
UklOR19BU1NFUlQoYmVnaW4oKSA8PSBpMiAmJiBpMiA8PSBlbmQoKSk7Ci0gIHJldHVybiByZXBs
YWNlKGkxLCBpMiwgcywgcyArIG4pOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3Mg
VCwgY2xhc3MgQSwgY2xhc3MgUz4KLWlubGluZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYg
YmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OnJlcGxhY2VJbXBsRGlzY3IoCi0gICAgaXRlcmF0
b3IgaTEsCi0gICAgaXRlcmF0b3IgaTIsCi0gICAgc2l6ZV90eXBlIG4yLAotICAgIHZhbHVlX3R5
cGUgYywKLSAgICBzdGQ6OmludGVncmFsX2NvbnN0YW50PGludCwgMT4pIHsKLSAgY29uc3Qgc2l6
ZV90eXBlIG4xID0gaTIgLSBpMTsKLSAgaWYgKG4xID4gbjIpIHsKLSAgICBzdGQ6OmZpbGwoaTEs
IGkxICsgbjIsIGMpOwotICAgIGVyYXNlKGkxICsgbjIsIGkyKTsKLSAgfSBlbHNlIHsKLSAgICBz
dGQ6OmZpbGwoaTEsIGkyLCBjKTsKLSAgICBpbnNlcnQoaTIsIG4yIC0gbjEsIGMpOwotICB9Ci0g
IEZCU1RSSU5HX0FTU0VSVChpc1NhbmUoKSk7Ci0gIHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci10ZW1wbGF0ZSA8Y2xh
c3MgSW5wdXRJdGVyPgotaW5saW5lIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JiBiYXNpY19m
YnN0cmluZzxFLCBULCBBLCBTPjo6cmVwbGFjZUltcGxEaXNjcigKLSAgICBpdGVyYXRvciBpMSwK
LSAgICBpdGVyYXRvciBpMiwKLSAgICBJbnB1dEl0ZXIgYiwKLSAgICBJbnB1dEl0ZXIgZSwKLSAg
ICBzdGQ6OmludGVncmFsX2NvbnN0YW50PGludCwgMD4pIHsKLSAgdXNpbmcgQ2F0ID0gdHlwZW5h
bWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SW5wdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnk7Ci0g
IHJlcGxhY2VJbXBsKGkxLCBpMiwgYiwgZSwgQ2F0KCkpOwotICByZXR1cm4gKnRoaXM7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFzcyBTPgotdGVtcGxh
dGUgPGNsYXNzIEZ3ZEl0ZXJhdG9yPgotaW5saW5lIGJvb2wgYmFzaWNfZmJzdHJpbmc8RSwgVCwg
QSwgUz46OnJlcGxhY2VBbGlhc2VkKAotICAgIGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgRndk
SXRlcmF0b3IgczEsIEZ3ZEl0ZXJhdG9yIHMyLCBzdGQ6OnRydWVfdHlwZSkgewotICBzdGQ6Omxl
c3NfZXF1YWw8Y29uc3QgdmFsdWVfdHlwZSo+IGxle307Ci0gIGNvbnN0IGJvb2wgYWxpYXNlZCA9
IGxlKCYqYmVnaW4oKSwgJipzMSkgJiYgbGUoJipzMSwgJiplbmQoKSk7Ci0gIGlmICghYWxpYXNl
ZCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICAvLyBBbGlhc2VkIHJlcGxhY2UsIGNvcHkg
dG8gbmV3IHN0cmluZwotICBiYXNpY19mYnN0cmluZyB0ZW1wOwotICB0ZW1wLnJlc2VydmUoc2l6
ZSgpIC0gKGkyIC0gaTEpICsgc3RkOjpkaXN0YW5jZShzMSwgczIpKTsKLSAgdGVtcC5hcHBlbmQo
YmVnaW4oKSwgaTEpLmFwcGVuZChzMSwgczIpLmFwcGVuZChpMiwgZW5kKCkpOwotICBzd2FwKHRl
bXApOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQs
IGNsYXNzIEEsIGNsYXNzIFM+Ci10ZW1wbGF0ZSA8Y2xhc3MgRndkSXRlcmF0b3I+Ci1pbmxpbmUg
dm9pZCBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6cmVwbGFjZUltcGwoCi0gICAgaXRlcmF0
b3IgaTEsCi0gICAgaXRlcmF0b3IgaTIsCi0gICAgRndkSXRlcmF0b3IgczEsCi0gICAgRndkSXRl
cmF0b3IgczIsCi0gICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewotICBJbnZhcmlhbnQg
Y2hlY2tlcigqdGhpcyk7Ci0KLSAgLy8gSGFuZGxlIGFsaWFzZWQgcmVwbGFjZQotICB1c2luZyBT
ZWwgPSBzdGQ6OmludGVncmFsX2NvbnN0YW50PAotICAgICAgYm9vbCwKLSAgICAgIHN0ZDo6aXNf
c2FtZTxGd2RJdGVyYXRvciwgaXRlcmF0b3I+Ojp2YWx1ZSB8fAotICAgICAgICAgIHN0ZDo6aXNf
c2FtZTxGd2RJdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+Ojp2YWx1ZT47Ci0gIGlmIChyZXBsYWNl
QWxpYXNlZChpMSwgaTIsIHMxLCBzMiwgU2VsKCkpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAg
YXV0byBjb25zdCBuMSA9IGkyIC0gaTE7Ci0gIEZCU1RSSU5HX0FTU0VSVChuMSA+PSAwKTsKLSAg
YXV0byBjb25zdCBuMiA9IHN0ZDo6ZGlzdGFuY2UoczEsIHMyKTsKLSAgRkJTVFJJTkdfQVNTRVJU
KG4yID49IDApOwotCi0gIGlmIChuMSA+IG4yKSB7Ci0gICAgLy8gc2hyaW5rcwotICAgIHN0ZDo6
Y29weShzMSwgczIsIGkxKTsKLSAgICBlcmFzZShpMSArIG4yLCBpMik7Ci0gIH0gZWxzZSB7Ci0g
ICAgLy8gZ3Jvd3MKLSAgICBzMSA9IGZic3RyaW5nX2RldGFpbDo6Y29weV9uKHMxLCBuMSwgaTEp
LmZpcnN0OwotICAgIGluc2VydChpMiwgczEsIHMyKTsKLSAgfQotICBGQlNUUklOR19BU1NFUlQo
aXNTYW5lKCkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwg
Y2xhc3MgUz4KLXRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgotaW5saW5lIHZvaWQgYmFz
aWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OnJlcGxhY2VJbXBsKAotICAgIGl0ZXJhdG9yIGkxLAot
ICAgIGl0ZXJhdG9yIGkyLAotICAgIElucHV0SXRlcmF0b3IgYiwKLSAgICBJbnB1dEl0ZXJhdG9y
IGUsCi0gICAgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpIHsKLSAgYmFzaWNfZmJzdHJpbmcgdGVt
cChiZWdpbigpLCBpMSk7Ci0gIHRlbXAuYXBwZW5kKGIsIGUpLmFwcGVuZChpMiwgZW5kKCkpOwot
ICBzd2FwKHRlbXApOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3Mg
QSwgY2xhc3MgUz4KLWlubGluZSB0eXBlbmFtZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6
c2l6ZV90eXBlCi1iYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6cmZpbmQoCi0gICAgY29uc3Qg
dmFsdWVfdHlwZSogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0IHsKLSAgaWYg
KG4gPiBsZW5ndGgoKSkgewotICAgIHJldHVybiBucG9zOwotICB9Ci0gIHBvcyA9IHN0ZDo6bWlu
KHBvcywgbGVuZ3RoKCkgLSBuKTsKLSAgaWYgKG4gPT0gMCkgewotICAgIHJldHVybiBwb3M7Ci0g
IH0KLQotICBjb25zdF9pdGVyYXRvciBpKGJlZ2luKCkgKyBwb3MpOwotICBmb3IgKDs7IC0taSkg
ewotICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoKmksICpzKSAmJiB0cmFpdHNfdHlwZTo6Y29tcGFy
ZSgmKmksIHMsIG4pID09IDApIHsKLSAgICAgIHJldHVybiBpIC0gYmVnaW4oKTsKLSAgICB9Ci0g
ICAgaWYgKGkgPT0gYmVnaW4oKSkgewotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIHJldHVy
biBucG9zOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xh
c3MgUz4KLWlubGluZSB0eXBlbmFtZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6c2l6ZV90
eXBlCi1iYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6ZmluZF9maXJzdF9vZigKLSAgICBjb25z
dCB2YWx1ZV90eXBlKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QgewotICBp
ZiAocG9zID4gbGVuZ3RoKCkgfHwgbiA9PSAwKSB7Ci0gICAgcmV0dXJuIG5wb3M7Ci0gIH0KLSAg
Y29uc3RfaXRlcmF0b3IgaShiZWdpbigpICsgcG9zKSwgZmluaXNoKGVuZCgpKTsKLSAgZm9yICg7
IGkgIT0gZmluaXNoOyArK2kpIHsKLSAgICBpZiAodHJhaXRzX3R5cGU6OmZpbmQocywgbiwgKmkp
ICE9IDApIHsKLSAgICAgIHJldHVybiBpIC0gYmVnaW4oKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJu
IG5wb3M7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFz
cyBTPgotaW5saW5lIHR5cGVuYW1lIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+OjpzaXplX3R5
cGUKLWJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+OjpmaW5kX2xhc3Rfb2YoCi0gICAgY29uc3Qg
dmFsdWVfdHlwZSogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0IHsKLSAgaWYg
KCFlbXB0eSgpICYmIG4gPiAwKSB7Ci0gICAgcG9zID0gc3RkOjptaW4ocG9zLCBsZW5ndGgoKSAt
IDEpOwotICAgIGNvbnN0X2l0ZXJhdG9yIGkoYmVnaW4oKSArIHBvcyk7Ci0gICAgZm9yICg7OyAt
LWkpIHsKLSAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChzLCBuLCAqaSkgIT0gMCkgewotICAg
ICAgICByZXR1cm4gaSAtIGJlZ2luKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoaSA9PSBiZWdpbigp
KSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gbnBvczsK
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci1p
bmxpbmUgdHlwZW5hbWUgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OnNpemVfdHlwZQotYmFz
aWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OmZpbmRfZmlyc3Rfbm90X29mKAotICAgIGNvbnN0IHZh
bHVlX3R5cGUqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdCB7Ci0gIGlmIChw
b3MgPCBsZW5ndGgoKSkgewotICAgIGNvbnN0X2l0ZXJhdG9yIGkoYmVnaW4oKSArIHBvcyksIGZp
bmlzaChlbmQoKSk7Ci0gICAgZm9yICg7IGkgIT0gZmluaXNoOyArK2kpIHsKLSAgICAgIGlmICh0
cmFpdHNfdHlwZTo6ZmluZChzLCBuLCAqaSkgPT0gMCkgewotICAgICAgICByZXR1cm4gaSAtIGJl
Z2luKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBucG9zOwotfQotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUz4KLWlubGluZSB0eXBlbmFt
ZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6c2l6ZV90eXBlCi1iYXNpY19mYnN0cmluZzxF
LCBULCBBLCBTPjo6ZmluZF9sYXN0X25vdF9vZigKLSAgICBjb25zdCB2YWx1ZV90eXBlKiBzLCBz
aXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QgewotICBpZiAoIXRoaXMtPmVtcHR5KCkp
IHsKLSAgICBwb3MgPSBzdGQ6Om1pbihwb3MsIHNpemUoKSAtIDEpOwotICAgIGNvbnN0X2l0ZXJh
dG9yIGkoYmVnaW4oKSArIHBvcyk7Ci0gICAgZm9yICg7OyAtLWkpIHsKLSAgICAgIGlmICh0cmFp
dHNfdHlwZTo6ZmluZChzLCBuLCAqaSkgPT0gMCkgewotICAgICAgICByZXR1cm4gaSAtIGJlZ2lu
KCk7Ci0gICAgICB9Ci0gICAgICBpZiAoaSA9PSBiZWdpbigpKSB7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gbnBvczsKLX0KLQotLy8gbm9uLW1lbWJlciBm
dW5jdGlvbnMKLS8vIEMrKzExIDIxLjQuOC4xLzEKLXRlbXBsYXRlIDx0eXBlbmFtZSBFLCBjbGFz
cyBULCBjbGFzcyBBLCBjbGFzcyBTPgotaW5saW5lCi1iYXNpY19mYnN0cmluZzxFLCBULCBBLCBT
PiBvcGVyYXRvcisoY29uc3QgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4mIGxocywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19mYnN0cmluZzxFLCBU
LCBBLCBTPiYgcmhzKSB7Ci0KLSAgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4gcmVzdWx0Owot
ICByZXN1bHQucmVzZXJ2ZShsaHMuc2l6ZSgpICsgcmhzLnNpemUoKSk7Ci0gIHJlc3VsdC5hcHBl
bmQobGhzKS5hcHBlbmQocmhzKTsKLSAgcmV0dXJuIHN0ZDo6bW92ZShyZXN1bHQpOwotfQotCi0v
LyBDKysxMSAyMS40LjguMS8yCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3Mg
QSwgY2xhc3MgUz4KLWlubGluZQotYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4gb3BlcmF0b3Ir
KGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JiYgbGhzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JiByaHMpIHsK
LSAgcmV0dXJuIHN0ZDo6bW92ZShsaHMuYXBwZW5kKHJocykpOwotfQotCi0vLyBDKysxMSAyMS40
LjguMS8zCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUz4K
LWlubGluZQotYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4gb3BlcmF0b3IrKGNvbnN0IGJhc2lj
X2Zic3RyaW5nPEUsIFQsIEEsIFM+JiBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4mJiByaHMpIHsKLSAgaWYgKHJocy5j
YXBhY2l0eSgpID49IGxocy5zaXplKCkgKyByaHMuc2l6ZSgpKSB7Ci0gICAgLy8gR29vZCwgYXQg
bGVhc3Qgd2UgZG9uJ3QgbmVlZCB0byByZWFsbG9jYXRlCi0gICAgcmV0dXJuIHN0ZDo6bW92ZShy
aHMuaW5zZXJ0KDAsIGxocykpOwotICB9Ci0gIC8vIE1laCwgbm8gZ28uIEZvcndhcmQgdG8gb3Bl
cmF0b3IrKGNvbnN0JiwgY29uc3QmKS4KLSAgYXV0byBjb25zdCYgcmhzQyA9IHJoczsKLSAgcmV0
dXJuIGxocyArIHJoc0M7Ci19Ci0KLS8vIEMrKzExIDIxLjQuOC4xLzQKLXRlbXBsYXRlIDx0eXBl
bmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFzcyBTPgotaW5saW5lCi1iYXNpY19mYnN0cmlu
ZzxFLCBULCBBLCBTPiBvcGVyYXRvcisoYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4mJiBsaHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNfZmJzdHJpbmc8RSwg
VCwgQSwgUz4mJiByaHMpIHsKLSAgcmV0dXJuIHN0ZDo6bW92ZShsaHMuYXBwZW5kKHJocykpOwot
fQotCi0vLyBDKysxMSAyMS40LjguMS81Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwg
Y2xhc3MgQSwgY2xhc3MgUz4KLWlubGluZQotYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4gb3Bl
cmF0b3IrKAotICBjb25zdCBFKiBsaHMsCi0gIGNvbnN0IGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEs
IFM+JiByaHMpIHsKLSAgLy8KLSAgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4gcmVzdWx0Owot
ICBjb25zdCBhdXRvIGxlbiA9IGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+Ojp0cmFpdHNfdHlw
ZTo6bGVuZ3RoKGxocyk7Ci0gIHJlc3VsdC5yZXNlcnZlKGxlbiArIHJocy5zaXplKCkpOwotICBy
ZXN1bHQuYXBwZW5kKGxocywgbGVuKS5hcHBlbmQocmhzKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotLy8gQysrMTEgMjEuNC44LjEvNgotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNs
YXNzIEEsIGNsYXNzIFM+Ci1pbmxpbmUKLWJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+IG9wZXJh
dG9yKygKLSAgY29uc3QgRSogbGhzLAotICBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYmIHJo
cykgewotICAvLwotICBjb25zdCBhdXRvIGxlbiA9IGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+
Ojp0cmFpdHNfdHlwZTo6bGVuZ3RoKGxocyk7Ci0gIGlmIChyaHMuY2FwYWNpdHkoKSA+PSBsZW4g
KyByaHMuc2l6ZSgpKSB7Ci0gICAgLy8gR29vZCwgYXQgbGVhc3Qgd2UgZG9uJ3QgbmVlZCB0byBy
ZWFsbG9jYXRlCi0gICAgcmhzLmluc2VydChyaHMuYmVnaW4oKSwgbGhzLCBsaHMgKyBsZW4pOwot
ICAgIHJldHVybiByaHM7Ci0gIH0KLSAgLy8gTWVoLCBubyBnby4gRG8gaXQgYnkgaGFuZCBzaW5j
ZSB3ZSBoYXZlIGxlbiBhbHJlYWR5LgotICBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiByZXN1
bHQ7Ci0gIHJlc3VsdC5yZXNlcnZlKGxlbiArIHJocy5zaXplKCkpOwotICByZXN1bHQuYXBwZW5k
KGxocywgbGVuKS5hcHBlbmQocmhzKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gQysrMTEg
MjEuNC44LjEvNwotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNz
IFM+Ci1pbmxpbmUKLWJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+IG9wZXJhdG9yKygKLSAgRSBs
aHMsCi0gIGNvbnN0IGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JiByaHMpIHsKLQotICBiYXNp
Y19mYnN0cmluZzxFLCBULCBBLCBTPiByZXN1bHQ7Ci0gIHJlc3VsdC5yZXNlcnZlKDEgKyByaHMu
c2l6ZSgpKTsKLSAgcmVzdWx0LnB1c2hfYmFjayhsaHMpOwotICByZXN1bHQuYXBwZW5kKHJocyk7
Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIEMrKzExIDIxLjQuOC4xLzgKLXRlbXBsYXRlIDx0
eXBlbmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFzcyBTPgotaW5saW5lCi1iYXNpY19mYnN0
cmluZzxFLCBULCBBLCBTPiBvcGVyYXRvcisoCi0gIEUgbGhzLAotICBiYXNpY19mYnN0cmluZzxF
LCBULCBBLCBTPiYmIHJocykgewotICAvLwotICBpZiAocmhzLmNhcGFjaXR5KCkgPiByaHMuc2l6
ZSgpKSB7Ci0gICAgLy8gR29vZCwgYXQgbGVhc3Qgd2UgZG9uJ3QgbmVlZCB0byByZWFsbG9jYXRl
Ci0gICAgcmhzLmluc2VydChyaHMuYmVnaW4oKSwgbGhzKTsKLSAgICByZXR1cm4gcmhzOwotICB9
Ci0gIC8vIE1laCwgbm8gZ28uIEZvcndhcmQgdG8gb3BlcmF0b3IrKEUsIGNvbnN0JikuCi0gIGF1
dG8gY29uc3QmIHJoc0MgPSByaHM7Ci0gIHJldHVybiBsaHMgKyByaHNDOwotfQotCi0vLyBDKysx
MSAyMS40LjguMS85Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xh
c3MgUz4KLWlubGluZQotYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4gb3BlcmF0b3IrKAotICBj
b25zdCBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYgbGhzLAotICBjb25zdCBFKiByaHMpIHsK
LQotICB0eXBlZGVmIHR5cGVuYW1lIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+OjpzaXplX3R5
cGUgc2l6ZV90eXBlOwotICB0eXBlZGVmIHR5cGVuYW1lIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEs
IFM+Ojp0cmFpdHNfdHlwZSB0cmFpdHNfdHlwZTsKLQotICBiYXNpY19mYnN0cmluZzxFLCBULCBB
LCBTPiByZXN1bHQ7Ci0gIGNvbnN0IHNpemVfdHlwZSBsZW4gPSB0cmFpdHNfdHlwZTo6bGVuZ3Ro
KHJocyk7Ci0gIHJlc3VsdC5yZXNlcnZlKGxocy5zaXplKCkgKyBsZW4pOwotICByZXN1bHQuYXBw
ZW5kKGxocykuYXBwZW5kKHJocywgbGVuKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gQysr
MTEgMjEuNC44LjEvMTAKLXRlbXBsYXRlIDx0eXBlbmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBj
bGFzcyBTPgotaW5saW5lCi1iYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiBvcGVyYXRvcisoCi0g
IGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JiYgbGhzLAotICBjb25zdCBFKiByaHMpIHsKLSAg
Ly8KLSAgcmV0dXJuIHN0ZDo6bW92ZShsaHMgKz0gcmhzKTsKLX0KLQotLy8gQysrMTEgMjEuNC44
LjEvMTEKLXRlbXBsYXRlIDx0eXBlbmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFzcyBTPgot
aW5saW5lCi1iYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiBvcGVyYXRvcisoCi0gIGNvbnN0IGJh
c2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JiBsaHMsCi0gIEUgcmhzKSB7Ci0KLSAgYmFzaWNfZmJz
dHJpbmc8RSwgVCwgQSwgUz4gcmVzdWx0OwotICByZXN1bHQucmVzZXJ2ZShsaHMuc2l6ZSgpICsg
MSk7Ci0gIHJlc3VsdC5hcHBlbmQobGhzKTsKLSAgcmVzdWx0LnB1c2hfYmFjayhyaHMpOwotICBy
ZXR1cm4gcmVzdWx0OwotfQotCi0vLyBDKysxMSAyMS40LjguMS8xMgotdGVtcGxhdGUgPHR5cGVu
YW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci1pbmxpbmUKLWJhc2ljX2Zic3RyaW5n
PEUsIFQsIEEsIFM+IG9wZXJhdG9yKygKLSAgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4mJiBs
aHMsCi0gIEUgcmhzKSB7Ci0gIC8vCi0gIHJldHVybiBzdGQ6Om1vdmUobGhzICs9IHJocyk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFzcyBTPgotaW5s
aW5lCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4mIGxo
cywKLSAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYgcmhz
KSB7Ci0gIHJldHVybiBsaHMuc2l6ZSgpID09IHJocy5zaXplKCkgJiYgbGhzLmNvbXBhcmUocmhz
KSA9PSAwOyB9Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFz
cyBTPgotaW5saW5lCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgdHlwZW5hbWUgYmFzaWNfZmJzdHJp
bmc8RSwgVCwgQSwgUz46OnZhbHVlX3R5cGUqIGxocywKLSAgICAgICAgICAgICAgICBjb25zdCBi
YXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYgcmhzKSB7Ci0gIHJldHVybiByaHMgPT0gbGhzOyB9
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFzcyBTPgotaW5s
aW5lCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4mIGxo
cywKLSAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19mYnN0cmluZzxFLCBULCBB
LCBTPjo6dmFsdWVfdHlwZSogcmhzKSB7Ci0gIHJldHVybiBsaHMuY29tcGFyZShyaHMpID09IDA7
IH0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci1p
bmxpbmUKLWJvb2wgb3BlcmF0b3IhPShjb25zdCBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYg
bGhzLAotICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JiBy
aHMpIHsKLSAgcmV0dXJuICEobGhzID09IHJocyk7IH0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUs
IGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci1pbmxpbmUKLWJvb2wgb3BlcmF0b3IhPShjb25z
dCB0eXBlbmFtZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6dmFsdWVfdHlwZSogbGhzLAot
ICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JiByaHMpIHsK
LSAgcmV0dXJuICEobGhzID09IHJocyk7IH0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNz
IFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci1pbmxpbmUKLWJvb2wgb3BlcmF0b3IhPShjb25zdCBiYXNp
Y19mYnN0cmluZzxFLCBULCBBLCBTPiYgbGhzLAotICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVu
YW1lIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+Ojp2YWx1ZV90eXBlKiByaHMpIHsKLSAgcmV0
dXJuICEobGhzID09IHJocyk7IH0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNs
YXNzIEEsIGNsYXNzIFM+Ci1pbmxpbmUKLWJvb2wgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX2Zic3Ry
aW5nPEUsIFQsIEEsIFM+JiBsaHMsCi0gICAgICAgICAgICAgICBjb25zdCBiYXNpY19mYnN0cmlu
ZzxFLCBULCBBLCBTPiYgcmhzKSB7Ci0gIHJldHVybiBsaHMuY29tcGFyZShyaHMpIDwgMDsgfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUz4KLWlubGlu
ZQotYm9vbCBvcGVyYXRvcjwoY29uc3QgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4mIGxocywK
LSAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+
Ojp2YWx1ZV90eXBlKiByaHMpIHsKLSAgcmV0dXJuIGxocy5jb21wYXJlKHJocykgPCAwOyB9Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFzcyBTPgotaW5saW5l
Ci1ib29sIG9wZXJhdG9yPChjb25zdCB0eXBlbmFtZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBT
Pjo6dmFsdWVfdHlwZSogbGhzLAotICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfZmJzdHJpbmc8
RSwgVCwgQSwgUz4mIHJocykgewotICByZXR1cm4gcmhzLmNvbXBhcmUobGhzKSA+IDA7IH0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci1pbmxpbmUK
LWJvb2wgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JiBsaHMsCi0g
ICAgICAgICAgICAgICBjb25zdCBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYgcmhzKSB7Ci0g
IHJldHVybiByaHMgPCBsaHM7IH0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNs
YXNzIEEsIGNsYXNzIFM+Ci1pbmxpbmUKLWJvb2wgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX2Zic3Ry
aW5nPEUsIFQsIEEsIFM+JiBsaHMsCi0gICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBiYXNp
Y19mYnN0cmluZzxFLCBULCBBLCBTPjo6dmFsdWVfdHlwZSogcmhzKSB7Ci0gIHJldHVybiByaHMg
PCBsaHM7IH0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNz
IFM+Ci1pbmxpbmUKLWJvb2wgb3BlcmF0b3I+KGNvbnN0IHR5cGVuYW1lIGJhc2ljX2Zic3RyaW5n
PEUsIFQsIEEsIFM+Ojp2YWx1ZV90eXBlKiBsaHMsCi0gICAgICAgICAgICAgICBjb25zdCBiYXNp
Y19mYnN0cmluZzxFLCBULCBBLCBTPiYgcmhzKSB7Ci0gIHJldHVybiByaHMgPCBsaHM7IH0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci1pbmxpbmUK
LWJvb2wgb3BlcmF0b3I8PShjb25zdCBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYgbGhzLAot
ICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JiByaHMpIHsK
LSAgcmV0dXJuICEocmhzIDwgbGhzKTsgfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3Mg
VCwgY2xhc3MgQSwgY2xhc3MgUz4KLWlubGluZQotYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGJhc2lj
X2Zic3RyaW5nPEUsIFQsIEEsIFM+JiBsaHMsCi0gICAgICAgICAgICAgICAgY29uc3QgdHlwZW5h
bWUgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OnZhbHVlX3R5cGUqIHJocykgewotICByZXR1
cm4gIShyaHMgPCBsaHMpOyB9Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFLCBjbGFzcyBULCBjbGFz
cyBBLCBjbGFzcyBTPgotaW5saW5lCi1ib29sIG9wZXJhdG9yPD0oY29uc3QgdHlwZW5hbWUgYmFz
aWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OnZhbHVlX3R5cGUqIGxocywKLSAgICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYgcmhzKSB7Ci0gIHJldHVybiAhKHJo
cyA8IGxocyk7IH0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNs
YXNzIFM+Ci1pbmxpbmUKLWJvb2wgb3BlcmF0b3I+PShjb25zdCBiYXNpY19mYnN0cmluZzxFLCBU
LCBBLCBTPiYgbGhzLAotICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX2Zic3RyaW5nPEUsIFQs
IEEsIFM+JiByaHMpIHsKLSAgcmV0dXJuICEobGhzIDwgcmhzKTsgfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUz4KLWlubGluZQotYm9vbCBvcGVyYXRv
cj49KGNvbnN0IGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JiBsaHMsCi0gICAgICAgICAgICAg
ICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OnZhbHVlX3R5cGUq
IHJocykgewotICByZXR1cm4gIShsaHMgPCByaHMpOyB9Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBF
LCBjbGFzcyBULCBjbGFzcyBBLCBjbGFzcyBTPgotaW5saW5lCi1ib29sIG9wZXJhdG9yPj0oY29u
c3QgdHlwZW5hbWUgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OnZhbHVlX3R5cGUqIGxocywK
LSAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYgcmhzKSB7
Ci0gcmV0dXJuICEobGhzIDwgcmhzKTsKLX0KLQotLy8gQysrMTEgMjEuNC44LjgKLXRlbXBsYXRl
IDx0eXBlbmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFzcyBTPgotdm9pZCBzd2FwKGJhc2lj
X2Zic3RyaW5nPEUsIFQsIEEsIFM+JiBsaHMsIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JiBy
aHMpIHsKLSAgbGhzLnN3YXAocmhzKTsKLX0KLQotLy8gVE9ETzogbWFrZSB0aGlzIGZhc3Rlci4K
LXRlbXBsYXRlIDx0eXBlbmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFzcyBTPgotaW5saW5l
Ci1zdGQ6OmJhc2ljX2lzdHJlYW08Ci0gIHR5cGVuYW1lIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEs
IFM+Ojp2YWx1ZV90eXBlLAotICB0eXBlbmFtZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6
dHJhaXRzX3R5cGU+JgotICBvcGVyYXRvcj4+KAotICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTx0eXBl
bmFtZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6dmFsdWVfdHlwZSwKLSAgICB0eXBlbmFt
ZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6dHJhaXRzX3R5cGU+JiBpcywKLSAgICBiYXNp
Y19mYnN0cmluZzxFLCBULCBBLCBTPiYgc3RyKSB7Ci0gIHR5cGVkZWYgc3RkOjpiYXNpY19pc3Ry
ZWFtPAotICAgICAgdHlwZW5hbWUgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OnZhbHVlX3R5
cGUsCi0gICAgICB0eXBlbmFtZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6dHJhaXRzX3R5
cGU+Ci0gICAgICBfaXN0cmVhbV90eXBlOwotICB0eXBlbmFtZSBfaXN0cmVhbV90eXBlOjpzZW50
cnkgc2VudHJ5KGlzKTsKLSAgc2l6ZV90IGV4dHJhY3RlZCA9IDA7Ci0gIGF1dG8gZXJyID0gX2lz
dHJlYW1fdHlwZTo6Z29vZGJpdDsKLSAgaWYgKHNlbnRyeSkgewotICAgIGF1dG8gbiA9IGlzLndp
ZHRoKCk7Ci0gICAgaWYgKG4gPD0gMCkgewotICAgICAgbiA9IHN0ci5tYXhfc2l6ZSgpOwotICAg
IH0KLSAgICBzdHIuZXJhc2UoKTsKLSAgICBmb3IgKGF1dG8gZ290ID0gaXMucmRidWYoKS0+c2dl
dGMoKTsgZXh0cmFjdGVkICE9IHNpemVfdChuKTsgKytleHRyYWN0ZWQpIHsKLSAgICAgIGlmIChn
b3QgPT0gVDo6ZW9mKCkpIHsKLSAgICAgICAgZXJyIHw9IF9pc3RyZWFtX3R5cGU6OmVvZmJpdDsK
LSAgICAgICAgaXMud2lkdGgoMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYg
KGlzc3BhY2UoZ290KSkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0ci5wdXNo
X2JhY2soZ290KTsKLSAgICAgIGdvdCA9IGlzLnJkYnVmKCktPnNuZXh0YygpOwotICAgIH0KLSAg
fQotICBpZiAoIWV4dHJhY3RlZCkgewotICAgIGVyciB8PSBfaXN0cmVhbV90eXBlOjpmYWlsYml0
OwotICB9Ci0gIGlmIChlcnIpIHsKLSAgICBpcy5zZXRzdGF0ZShlcnIpOwotICB9Ci0gIHJldHVy
biBpczsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNz
IFM+Ci1pbmxpbmUKLXN0ZDo6YmFzaWNfb3N0cmVhbTx0eXBlbmFtZSBiYXNpY19mYnN0cmluZzxF
LCBULCBBLCBTPjo6dmFsdWVfdHlwZSwKLSAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBiYXNp
Y19mYnN0cmluZzxFLCBULCBBLCBTPjo6dHJhaXRzX3R5cGU+Jgotb3BlcmF0b3I8PCgKLSAgc3Rk
OjpiYXNpY19vc3RyZWFtPHR5cGVuYW1lIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+Ojp2YWx1
ZV90eXBlLAotICB0eXBlbmFtZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6dHJhaXRzX3R5
cGU+JiBvcywKLSAgICBjb25zdCBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYgc3RyKSB7Ci0j
aWYgX0xJQkNQUF9WRVJTSU9OCi0gIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPAotICAgICAg
dHlwZW5hbWUgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OnZhbHVlX3R5cGUsCi0gICAgICB0
eXBlbmFtZSBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPjo6dHJhaXRzX3R5cGU+Ci0gICAgICBf
b3N0cmVhbV90eXBlOwotICB0eXBlbmFtZSBfb3N0cmVhbV90eXBlOjpzZW50cnkgX3Mob3MpOwot
ICBpZiAoX3MpIHsKLSAgICB0eXBlZGVmIHN0ZDo6b3N0cmVhbWJ1Zl9pdGVyYXRvcjwKLSAgICAg
IHR5cGVuYW1lIGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+Ojp2YWx1ZV90eXBlLAotICAgICAg
dHlwZW5hbWUgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz46OnRyYWl0c190eXBlPiBfSXA7Ci0g
ICAgc2l6ZV90IF9fbGVuID0gc3RyLnNpemUoKTsKLSAgICBib29sIF9fbGVmdCA9Ci0gICAgICAg
IChvcy5mbGFncygpICYgX29zdHJlYW1fdHlwZTo6YWRqdXN0ZmllbGQpID09IF9vc3RyZWFtX3R5
cGU6OmxlZnQ7Ci0gICAgaWYgKF9fcGFkX2FuZF9vdXRwdXQoX0lwKG9zKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHIuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVm
dCA/IHN0ci5kYXRhKCkgKyBfX2xlbiA6IHN0ci5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyLmRhdGEoKSArIF9fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgIG9zLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmZpbGwoKSkuZmFpbGVkKCkpIHsKLSAgICAgIG9z
LnNldHN0YXRlKF9vc3RyZWFtX3R5cGU6OmJhZGJpdCB8IF9vc3RyZWFtX3R5cGU6OmZhaWxiaXQp
OwotICAgIH0KLSAgfQotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgdHlwZWRlZiBkZWNsdHlw
ZShvcy5wcmVjaXNpb24oKSkgc3RyZWFtc2l6ZTsKLSAgLy8gTVNWQyBkb2Vzbid0IGRlZmluZSBf
X29zdHJlYW1faW5zZXJ0Ci0gIG9zLndyaXRlKHN0ci5kYXRhKCksIHN0YXRpY19jYXN0PHN0cmVh
bXNpemU+KHN0ci5zaXplKCkpKTsKLSNlbHNlCi0gIHN0ZDo6X19vc3RyZWFtX2luc2VydChvcywg
c3RyLmRhdGEoKSwgc3RyLnNpemUoKSk7Ci0jZW5kaWYKLSAgcmV0dXJuIG9zOwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgRTEsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFM+Ci1jb25zdGV4cHIg
dHlwZW5hbWUgYmFzaWNfZmJzdHJpbmc8RTEsIFQsIEEsIFM+OjpzaXplX3R5cGUKLSAgICBiYXNp
Y19mYnN0cmluZzxFMSwgVCwgQSwgUz46Om5wb3M7Ci0KLSNpZm5kZWYgX0xJQlNURENYWF9GQlNU
UklORwotLy8gYmFzaWNfc3RyaW5nIGNvbXBhdGliaWxpdHkgcm91dGluZXMKLQotdGVtcGxhdGUg
PHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNsYXNzIFMsIGNsYXNzIEEyPgotaW5saW5l
IGJvb2wgb3BlcmF0b3I9PSgKLSAgICBjb25zdCBiYXNpY19mYnN0cmluZzxFLCBULCBBLCBTPiYg
bGhzLAotICAgIGNvbnN0IHN0ZDo6YmFzaWNfc3RyaW5nPEUsIFQsIEEyPiYgcmhzKSB7Ci0gIHJl
dHVybiBsaHMuY29tcGFyZSgwLCBsaHMuc2l6ZSgpLCByaHMuZGF0YSgpLCByaHMuc2l6ZSgpKSA9
PSAwOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3Mg
UywgY2xhc3MgQTI+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KAotICAgIGNvbnN0IHN0ZDo6YmFz
aWNfc3RyaW5nPEUsIFQsIEEyPiYgbGhzLAotICAgIGNvbnN0IGJhc2ljX2Zic3RyaW5nPEUsIFQs
IEEsIFM+JiByaHMpIHsKLSAgcmV0dXJuIHJocyA9PSBsaHM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFzcyBTLCBjbGFzcyBBMj4KLWlubGluZSBib29s
IG9wZXJhdG9yIT0oCi0gICAgY29uc3QgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4mIGxocywK
LSAgICBjb25zdCBzdGQ6OmJhc2ljX3N0cmluZzxFLCBULCBBMj4mIHJocykgewotICByZXR1cm4g
IShsaHMgPT0gcmhzKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNz
IEEsIGNsYXNzIFMsIGNsYXNzIEEyPgotaW5saW5lIGJvb2wgb3BlcmF0b3IhPSgKLSAgICBjb25z
dCBzdGQ6OmJhc2ljX3N0cmluZzxFLCBULCBBMj4mIGxocywKLSAgICBjb25zdCBiYXNpY19mYnN0
cmluZzxFLCBULCBBLCBTPiYgcmhzKSB7Ci0gIHJldHVybiAhKGxocyA9PSByaHMpOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUywgY2xhc3MgQTI+
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoCi0gICAgY29uc3QgYmFzaWNfZmJzdHJpbmc8RSwgVCwg
QSwgUz4mIGxocywKLSAgICBjb25zdCBzdGQ6OmJhc2ljX3N0cmluZzxFLCBULCBBMj4mIHJocykg
ewotICByZXR1cm4gbGhzLmNvbXBhcmUoMCwgbGhzLnNpemUoKSwgcmhzLmRhdGEoKSwgcmhzLnNp
emUoKSkgPCAwOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwg
Y2xhc3MgUywgY2xhc3MgQTI+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oCi0gICAgY29uc3QgYmFz
aWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4mIGxocywKLSAgICBjb25zdCBzdGQ6OmJhc2ljX3N0cmlu
ZzxFLCBULCBBMj4mIHJocykgewotICByZXR1cm4gbGhzLmNvbXBhcmUoMCwgbGhzLnNpemUoKSwg
cmhzLmRhdGEoKSwgcmhzLnNpemUoKSkgPiAwOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwg
Y2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUywgY2xhc3MgQTI+Ci1pbmxpbmUgYm9vbCBvcGVyYXRv
cjwoCi0gICAgY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8RSwgVCwgQTI+JiBsaHMsCi0gICAgY29u
c3QgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4mIHJocykgewotICByZXR1cm4gcmhzID4gbGhz
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUywg
Y2xhc3MgQTI+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oCi0gICAgY29uc3Qgc3RkOjpiYXNpY19z
dHJpbmc8RSwgVCwgQTI+JiBsaHMsCi0gICAgY29uc3QgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwg
Uz4mIHJocykgewotICByZXR1cm4gcmhzIDwgbGhzOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
RSwgY2xhc3MgVCwgY2xhc3MgQSwgY2xhc3MgUywgY2xhc3MgQTI+Ci1pbmxpbmUgYm9vbCBvcGVy
YXRvcjw9KAotICAgIGNvbnN0IGJhc2ljX2Zic3RyaW5nPEUsIFQsIEEsIFM+JiBsaHMsCi0gICAg
Y29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8RSwgVCwgQTI+JiByaHMpIHsKLSAgcmV0dXJuICEobGhz
ID4gcmhzKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEUsIGNsYXNzIFQsIGNsYXNzIEEsIGNs
YXNzIFMsIGNsYXNzIEEyPgotaW5saW5lIGJvb2wgb3BlcmF0b3I+PSgKLSAgICBjb25zdCBiYXNp
Y19mYnN0cmluZzxFLCBULCBBLCBTPiYgbGhzLAotICAgIGNvbnN0IHN0ZDo6YmFzaWNfc3RyaW5n
PEUsIFQsIEEyPiYgcmhzKSB7Ci0gIHJldHVybiAhKGxocyA8IHJocyk7Ci19Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBFLCBjbGFzcyBULCBjbGFzcyBBLCBjbGFzcyBTLCBjbGFzcyBBMj4KLWlubGlu
ZSBib29sIG9wZXJhdG9yPD0oCi0gICAgY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8RSwgVCwgQTI+
JiBsaHMsCi0gICAgY29uc3QgYmFzaWNfZmJzdHJpbmc8RSwgVCwgQSwgUz4mIHJocykgewotICBy
ZXR1cm4gIShsaHMgPiByaHMpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRSwgY2xhc3MgVCwg
Y2xhc3MgQSwgY2xhc3MgUywgY2xhc3MgQTI+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj49KAotICAg
IGNvbnN0IHN0ZDo6YmFzaWNfc3RyaW5nPEUsIFQsIEEyPiYgbGhzLAotICAgIGNvbnN0IGJhc2lj
X2Zic3RyaW5nPEUsIFQsIEEsIFM+JiByaHMpIHsKLSAgcmV0dXJuICEobGhzIDwgcmhzKTsKLX0K
LQotI2lmICFkZWZpbmVkKF9MSUJTVERDWFhfRkJTVFJJTkcpCi10eXBlZGVmIGJhc2ljX2Zic3Ry
aW5nPGNoYXI+IGZic3RyaW5nOwotI2VuZGlmCi0KLS8vIGZic3RyaW5nIGlzIHJlbG9jYXRhYmxl
Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUiwgY2xhc3MgQSwgY2xhc3MgUz4KLUZPTExZX0FT
U1VNRV9SRUxPQ0FUQUJMRShiYXNpY19mYnN0cmluZzxULCBSLCBBLCBTPik7Ci0KLSNlbmRpZgot
Ci1GT0xMWV9GQlNUUklOR19FTkRfTkFNRVNQQUNFCi0KLSNpZm5kZWYgX0xJQlNURENYWF9GQlNU
UklORwotCi0vLyBIYXNoIGZ1bmN0aW9ucyB0byBtYWtlIGZic3RyaW5nIHVzYWJsZSB3aXRoIGUu
Zy4gaGFzaF9tYXAKLS8vCi0vLyBIYW5kbGUgaW50ZXJhY3Rpb24gd2l0aCBkaWZmZXJlbnQgQysr
IHN0YW5kYXJkIGxpYnJhcmllcywgd2hpY2gKLS8vIGV4cGVjdCB0aGVzZSB0eXBlcyB0byBiZSBp
biBkaWZmZXJlbnQgbmFtZXNwYWNlcy4KLQotI2RlZmluZSBGT0xMWV9GQlNUUklOR19IQVNIMShU
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDw+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgc3RydWN0IGhhc2g8IDo6Zm9sbHk6OmJhc2ljX2Zic3RyaW5nPFQ+PiB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IDo6Zm9sbHk6
OmJhc2ljX2Zic3RyaW5nPFQ+JiBzKSBjb25zdCB7ICAgICBcCi0gICAgICByZXR1cm4gOjpmb2xs
eTo6aGFzaDo6Zm52MzJfYnVmKHMuZGF0YSgpLCBzLnNpemUoKSAqIHNpemVvZihUKSk7IFwKLSAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICB9OwotCi0vLyBUaGUgQysrMTEgc3RhbmRhcmQgc2F5cyB0aGF0IHRo
ZXNlIGZvdXIgYXJlIGRlZmluZWQKLSNkZWZpbmUgRk9MTFlfRkJTVFJJTkdfSEFTSCBcCi0gIEZP
TExZX0ZCU1RSSU5HX0hBU0gxKGNoYXIpIFwKLSAgRk9MTFlfRkJTVFJJTkdfSEFTSDEoY2hhcjE2
X3QpIFwKLSAgRk9MTFlfRkJTVFJJTkdfSEFTSDEoY2hhcjMyX3QpIFwKLSAgRk9MTFlfRkJTVFJJ
TkdfSEFTSDEod2NoYXJfdCkKLQotbmFtZXNwYWNlIHN0ZCB7Ci0KLUZPTExZX0ZCU1RSSU5HX0hB
U0gKLQotfSAgLy8gbmFtZXNwYWNlIHN0ZAotCi0jdW5kZWYgRk9MTFlfRkJTVFJJTkdfSEFTSAot
I3VuZGVmIEZPTExZX0ZCU1RSSU5HX0hBU0gxCi0KLSNlbmRpZiAvLyBfTElCU1REQ1hYX0ZCU1RS
SU5HCi0KLUZPTExZX1BPUF9XQVJOSU5HCi0KLSN1bmRlZiBGQlNUUklOR19ESVNBQkxFX1NTTwot
I3VuZGVmIEZCU1RSSU5HX1NBTklUSVpFX0FERFJFU1MKLSN1bmRlZiB0aHJvdwotI3VuZGVmIEZC
U1RSSU5HX0xJS0VMWQotI3VuZGVmIEZCU1RSSU5HX1VOTElLRUxZCi0jdW5kZWYgRkJTVFJJTkdf
QVNTRVJUCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9m
b2xseS9GQlZlY3Rvci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9s
bHkvRkJWZWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE3OTJhZjAyNWQy
ZTZkZmJiMWY3NDQyMjE4YzNiYjk1Mzc0MjJkMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9m
b2xseS9GQlZlY3Rvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY5MyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUg
QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K
LSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0
cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJl
cXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2Fy
ZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g
IkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZv
ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGlt
aXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoKLSAqIE5pY2hvbGFzIE9ybXJv
ZCAgICAgIChuam9ybXJvZCkKLSAqIEFuZHJlaSBBbGV4YW5kcmVzY3UgIChhYWxleGFuZHJlKQot
ICoKLSAqIEZCVmVjdG9yIGlzIEZhY2Vib29rJ3MgZHJvcC1pbiBpbXBsZW1lbnRhdGlvbiBvZiBz
dGQ6OnZlY3Rvci4gSXQgaGFzIHNwZWNpYWwKLSAqIG9wdGltaXphdGlvbnMgZm9yIHVzZSB3aXRo
IHJlbG9jYXRhYmxlIHR5cGVzIGFuZCBqZW1hbGxvYy4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLy8gaGVhZGVycwotCi0jaW5jbHVkZSA8YWxnb3JpdGht
PgotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8aXRlcmF0b3I+Ci0jaW5jbHVkZSA8bWVt
b3J5PgotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSNpbmNs
dWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSA8Zm9sbHkvRm9ybWF0VHJhaXRzLmg+Ci0jaW5jbHVk
ZSA8Zm9sbHkvTGlrZWx5Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8
Zm9sbHkvVHJhaXRzLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvQml0c0Z1bmN0ZXhj
ZXB0Lmg+Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGZvcndhcmQgZGVjbGFyYXRpb24K
LQotbmFtZXNwYWNlIGZvbGx5IHsKLSAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFsbG9jYXRv
ciA9IHN0ZDo6YWxsb2NhdG9yPFQ+PgotICBjbGFzcyBmYnZlY3RvcjsKLX0KLQotLy89PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLy8gdW5yb2xsaW5nCi0KLSNkZWZpbmUgRk9MTFlfRkJWX1VOUk9MTF9Q
VFIoZmlyc3QsIGxhc3QsIE9QKSBkbyB7ICBcCi0gIGZvciAoOyAobGFzdCkgLSAoZmlyc3QpID49
IDQ7IChmaXJzdCkgKz0gNCkgeyAgICAgXAotICAgIE9QKCgoZmlyc3QpICsgMCkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBPUCgoKGZpcnN0KSArIDEpKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgT1AoKChmaXJzdCkgKyAyKSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIE9QKCgoZmlyc3QpICsgMykpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGZvciAoOyAoZmlyc3QpICE9IChsYXN0KTsgKysoZmlyc3QpKSBP
UCgoZmlyc3QpKTsgXAotfSB3aGlsZSgwKTsKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYnZlY3RvciBjbGFzcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotCi1uYW1lc3BhY2UgZm9sbHkgewotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQWxsb2Nh
dG9yPgotY2xhc3MgZmJ2ZWN0b3IgewotCi0gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gIC8vIGltcGxlbWVudGF0aW9uCi1wcml2YXRlOgotCi0gIHR5cGVk
ZWYgc3RkOjphbGxvY2F0b3JfdHJhaXRzPEFsbG9jYXRvcj4gQTsKLQotICBzdHJ1Y3QgSW1wbCA6
IHB1YmxpYyBBbGxvY2F0b3IgewotICAgIC8vIHR5cGVkZWZzCi0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBBOjpwb2ludGVyIHBvaW50ZXI7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBBOjpzaXplX3R5cGUg
c2l6ZV90eXBlOwotCi0gICAgLy8gZGF0YQotICAgIHBvaW50ZXIgYl8sIGVfLCB6XzsKLQotICAg
IC8vIGNvbnN0cnVjdG9ycwotICAgIEltcGwoKSA6IEFsbG9jYXRvcigpLCBiXyhudWxscHRyKSwg
ZV8obnVsbHB0ciksIHpfKG51bGxwdHIpIHt9Ci0gICAgLyogaW1wbGljaXQgKi8gSW1wbChjb25z
dCBBbGxvY2F0b3ImIGEpCi0gICAgICA6IEFsbG9jYXRvcihhKSwgYl8obnVsbHB0ciksIGVfKG51
bGxwdHIpLCB6XyhudWxscHRyKSB7fQotICAgIC8qIGltcGxpY2l0ICovIEltcGwoQWxsb2NhdG9y
JiYgYSkKLSAgICAgIDogQWxsb2NhdG9yKHN0ZDo6bW92ZShhKSksIGJfKG51bGxwdHIpLCBlXyhu
dWxscHRyKSwgel8obnVsbHB0cikge30KLQotICAgIC8qIGltcGxpY2l0ICovIEltcGwoc2l6ZV90
eXBlIG4sIGNvbnN0IEFsbG9jYXRvciYgYSA9IEFsbG9jYXRvcigpKQotICAgICAgOiBBbGxvY2F0
b3IoYSkKLSAgICAgIHsgaW5pdChuKTsgfQotCi0gICAgSW1wbChJbXBsJiYgb3RoZXIpIG5vZXhj
ZXB0Ci0gICAgICA6IEFsbG9jYXRvcihzdGQ6Om1vdmUob3RoZXIpKSwKLSAgICAgICAgYl8ob3Ro
ZXIuYl8pLCBlXyhvdGhlci5lXyksIHpfKG90aGVyLnpfKQotICAgICAgeyBvdGhlci5iXyA9IG90
aGVyLmVfID0gb3RoZXIuel8gPSBudWxscHRyOyB9Ci0KLSAgICAvLyBkZXN0cnVjdG9yCi0gICAg
fkltcGwoKSB7Ci0gICAgICBkZXN0cm95KCk7Ci0gICAgfQotCi0gICAgLy8gYWxsb2NhdGlvbgot
ICAgIC8vIG5vdGUgdGhhdCAnYWxsb2NhdGUnIGFuZCAnZGVhbGxvY2F0ZScgYXJlIGluaGVyaXRl
ZCBmcm9tIEFsbG9jYXRvcgotICAgIFQqIERfYWxsb2NhdGUoc2l6ZV90eXBlIG4pIHsKLSAgICAg
IGlmICh1c2luZ1N0ZEFsbG9jYXRvcjo6dmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFQqPihtYWxsb2MobiAqIHNpemVvZihUKSkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxBbGxvY2F0b3I+OjphbGxvY2F0ZSgqdGhpcywg
bik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBEX2RlYWxsb2NhdGUoVCogcCwgc2l6ZV90
eXBlIG4pIG5vZXhjZXB0IHsKLSAgICAgIGlmICh1c2luZ1N0ZEFsbG9jYXRvcjo6dmFsdWUpIHsK
LSAgICAgICAgZnJlZShwKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0ZDo6YWxsb2NhdG9y
X3RyYWl0czxBbGxvY2F0b3I+OjpkZWFsbG9jYXRlKCp0aGlzLCBwLCBuKTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBoZWxwZXJzCi0gICAgdm9pZCBzd2FwRGF0YShJbXBsJiBvdGhlcikgewot
ICAgICAgc3RkOjpzd2FwKGJfLCBvdGhlci5iXyk7Ci0gICAgICBzdGQ6OnN3YXAoZV8sIG90aGVy
LmVfKTsKLSAgICAgIHN0ZDo6c3dhcCh6Xywgb3RoZXIuel8pOwotICAgIH0KLQotICAgIC8vIGRh
dGEgb3BzCi0gICAgaW5saW5lIHZvaWQgZGVzdHJveSgpIG5vZXhjZXB0IHsKLSAgICAgIGlmIChi
XykgewotICAgICAgICAvLyBUSElTIERJU1BBVENIIENPREUgSVMgRFVQTElDQVRFRCBJTiBmYnZl
Y3Rvcjo6RF9kZXN0cm95X3JhbmdlX2EuCi0gICAgICAgIC8vIEl0IGhhcyBiZWVuIGlubGluZWQg
aGVyZSBmb3Igc3BlZWQuIEl0IGNhbGxzIHRoZSBzdGF0aWMgZmJ2ZWN0b3IKLSAgICAgICAgLy8g
IG1ldGhvZHMgdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGRlc3RydWN0aW9uLgotICAgICAgICBpZiAo
dXNpbmdTdGRBbGxvY2F0b3I6OnZhbHVlKSB7Ci0gICAgICAgICAgU19kZXN0cm95X3JhbmdlKGJf
LCBlXyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgU19kZXN0cm95X3JhbmdlX2EoKnRo
aXMsIGJfLCBlXyk7Ci0gICAgICAgIH0KLQotICAgICAgICBEX2RlYWxsb2NhdGUoYl8sIHNpemVf
dHlwZSh6XyAtIGJfKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBpbml0KHNpemVfdHlw
ZSBuKSB7Ci0gICAgICBpZiAoVU5MSUtFTFkobiA9PSAwKSkgewotICAgICAgICBiXyA9IGVfID0g
el8gPSBudWxscHRyOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc2l6ZV90eXBlIHN6ID0gZm9s
bHk6Omdvb2RNYWxsb2NTaXplKG4gKiBzaXplb2YoVCkpIC8gc2l6ZW9mKFQpOwotICAgICAgICBi
XyA9IERfYWxsb2NhdGUoc3opOwotICAgICAgICBlXyA9IGJfOwotICAgICAgICB6XyA9IGJfICsg
c3o7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBzZXQocG9pbnRlciBuZXdCLCBzaXplX3R5
cGUgbmV3U2l6ZSwgc2l6ZV90eXBlIG5ld0NhcCkgewotICAgICAgel8gPSBuZXdCICsgbmV3Q2Fw
OwotICAgICAgZV8gPSBuZXdCICsgbmV3U2l6ZTsKLSAgICAgIGJfID0gbmV3QjsKLSAgICB9Ci0K
LSAgICB2b2lkIHJlc2V0KHNpemVfdHlwZSBuZXdDYXApIHsKLSAgICAgIGRlc3Ryb3koKTsKLSAg
ICAgIHRyeSB7Ci0gICAgICAgIGluaXQobmV3Q2FwKTsKLSAgICAgIH0gY2F0Y2ggKC4uLikgewot
ICAgICAgICBpbml0KDApOwotICAgICAgICB0aHJvdzsKLSAgICAgIH0KLSAgICB9Ci0gICAgdm9p
ZCByZXNldCgpIHsgLy8gc2FtZSBhcyByZXNldCgwKQotICAgICAgZGVzdHJveSgpOwotICAgICAg
Yl8gPSBlXyA9IHpfID0gbnVsbHB0cjsKLSAgICB9Ci0gIH0gaW1wbF87Ci0KLSAgc3RhdGljIHZv
aWQgc3dhcChJbXBsJiBhLCBJbXBsJiBiKSB7Ci0gICAgdXNpbmcgc3RkOjpzd2FwOwotICAgIGlm
ICghdXNpbmdTdGRBbGxvY2F0b3I6OnZhbHVlKSBzd2FwPEFsbG9jYXRvcj4oYSwgYik7Ci0gICAg
YS5zd2FwRGF0YShiKTsKLSAgfQotCi0gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gIC8vIHR5cGVzIGFuZCBjb25zdGFudHMKLXB1YmxpYzoKLQotICB0eXBl
ZGVmIFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlw
ZTsKLSAgdHlwZWRlZiB2YWx1ZV90eXBlJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlZmVyZW5jZTsKLSAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKLSAgdHlwZWRlZiBUKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOwotICB0eXBlZGVmIGNvbnN0IFQqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7Ci0gIHR5cGVk
ZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGU7
Ci0gIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjptYWtlX3NpZ25lZDxzaXplX3R5cGU+Ojp0eXBlICBk
aWZmZXJlbmNlX3R5cGU7Ci0gIHR5cGVkZWYgQWxsb2NhdG9yICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBBOjpwb2lu
dGVyICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7Ci0gIHR5cGVkZWYgdHlwZW5hbWUg
QTo6Y29uc3RfcG9pbnRlciAgICAgICAgICAgICAgICAgICBjb25zdF9wb2ludGVyOwotICB0eXBl
ZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgICAgICAgcmV2ZXJzZV9p
dGVyYXRvcjsKLSAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+
ICAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7Ci0KLXByaXZhdGU6Ci0KLSAgdHlwZWRlZiBz
dGQ6OmludGVncmFsX2NvbnN0YW50PGJvb2wsCi0gICAgICBJc1RyaXZpYWxseUNvcHlhYmxlPFQ+
Ojp2YWx1ZSAmJgotICAgICAgc2l6ZW9mKFQpIDw9IDE2IC8vIGRvbid0IGZvcmNlIGxhcmdlIHN0
cnVjdHVyZXMgdG8gYmUgcGFzc2VkIGJ5IHZhbHVlCi0gICAgPiBzaG91bGRfcGFzc19ieV92YWx1
ZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgc2hvdWxkX3Bh
c3NfYnlfdmFsdWU6OnZhbHVlLCBULCBjb25zdCBUJj46OnR5cGUgVlQ7Ci0gIHR5cGVkZWYgdHlw
ZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgIHNob3VsZF9wYXNzX2J5X3ZhbHVlOjp2YWx1
ZSwgVCwgVCYmPjo6dHlwZSBNVDsKLQotICB0eXBlZGVmIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8
Ym9vbCwKLSAgICAgIHN0ZDo6aXNfc2FtZTxBbGxvY2F0b3IsIHN0ZDo6YWxsb2NhdG9yPFQ+Pjo6
dmFsdWU+IHVzaW5nU3RkQWxsb2NhdG9yOwotICB0eXBlZGVmIHN0ZDo6aW50ZWdyYWxfY29uc3Rh
bnQ8Ym9vbCwKLSAgICAgIHVzaW5nU3RkQWxsb2NhdG9yOjp2YWx1ZSB8fAotICAgICAgQTo6cHJv
cGFnYXRlX29uX2NvbnRhaW5lcl9tb3ZlX2Fzc2lnbm1lbnQ6OnZhbHVlPiBtb3ZlSXNTd2FwOwot
Ci0gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIGFs
bG9jYXRvciBoZWxwZXJzCi1wcml2YXRlOgotCi0gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8v
IGFsbG9jYXRlCi0KLSAgVCogTV9hbGxvY2F0ZShzaXplX3R5cGUgbikgewotICAgIHJldHVybiBp
bXBsXy5EX2FsbG9jYXRlKG4pOwotICB9Ci0KLSAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8g
ZGVhbGxvY2F0ZQotCi0gIHZvaWQgTV9kZWFsbG9jYXRlKFQqIHAsIHNpemVfdHlwZSBuKSBub2V4
Y2VwdCB7Ci0gICAgaW1wbF8uRF9kZWFsbG9jYXRlKHAsIG4pOwotICB9Ci0KLSAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgLy8gY29uc3RydWN0Ci0KLSAgLy8gR0NDIGlzIHZlcnkgc2Vuc2l0aXZl
IHRvIHRoZSBleGFjdCB3YXkgdGhhdCBjb25zdHJ1Y3QgaXMgY2FsbGVkLiBGb3IKLSAgLy8gIHRo
YXQgcmVhc29uIHRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCBzcGVjaWFsaXphdGlvbnMgb2Yg
Y29uc3RydWN0LgotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZS4uLiBBcmdzPgot
ICB2b2lkIE1fY29uc3RydWN0KFUqIHAsIEFyZ3MmJi4uLiBhcmdzKSB7Ci0gICAgaWYgKHVzaW5n
U3RkQWxsb2NhdG9yOjp2YWx1ZSkgewotICAgICAgbmV3IChwKSBVKHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxB
bGxvY2F0b3I+Ojpjb25zdHJ1Y3QoCi0gICAgICAgIGltcGxfLCBwLCBzdGQ6OmZvcndhcmQ8QXJn
cz4oYXJncykuLi4pOwotICAgIH0KLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBl
bmFtZS4uLiBBcmdzPgotICBzdGF0aWMgdm9pZCBTX2NvbnN0cnVjdChVKiBwLCBBcmdzJiYuLi4g
YXJncykgewotICAgIG5ldyAocCkgVShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICB9
Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gIHN0YXRpYyB2
b2lkIFNfY29uc3RydWN0X2EoQWxsb2NhdG9yJiBhLCBVKiBwLCBBcmdzJiYuLi4gYXJncykgewot
ICAgIHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxBbGxvY2F0b3I+Ojpjb25zdHJ1Y3QoCi0gICAgICBh
LCBwLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICB9Ci0KLSAgLy8gc2NhbGFyIG9w
dGltaXphdGlvbgotICAvLyBUT0RPIHdlIGNhbiBleHBhbmQgdGhpcyBvcHRpbWl6YXRpb24gdG86
IGRlZmF1bHQgY29weWFibGUgYW5kIGFzc2lnbmFibGUKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFUs
IHR5cGVuYW1lIEVuYWJsZSA9IHR5cGVuYW1lCi0gICAgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
Y2FsYXI8VT46OnZhbHVlPjo6dHlwZT4KLSAgdm9pZCBNX2NvbnN0cnVjdChVKiBwLCBVIGFyZykg
ewotICAgIGlmICh1c2luZ1N0ZEFsbG9jYXRvcjo6dmFsdWUpIHsKLSAgICAgICpwID0gYXJnOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBzdGQ6OmFsbG9jYXRvcl90cmFpdHM8QWxsb2NhdG9yPjo6Y29u
c3RydWN0KGltcGxfLCBwLCBhcmcpOwotICAgIH0KLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBFbmFibGUgPSB0eXBlbmFtZQotICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfc2NhbGFyPFU+Ojp2YWx1ZT46OnR5cGU+Ci0gIHN0YXRpYyB2b2lkIFNfY29uc3RydWN0KFUq
IHAsIFUgYXJnKSB7Ci0gICAgKnAgPSBhcmc7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VSwgdHlwZW5hbWUgRW5hYmxlID0gdHlwZW5hbWUKLSAgICBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NjYWxhcjxVPjo6dmFsdWU+Ojp0eXBlPgotICBzdGF0aWMgdm9pZCBTX2NvbnN0cnVjdF9hKEFs
bG9jYXRvciYgYSwgVSogcCwgVSBhcmcpIHsKLSAgICBzdGQ6OmFsbG9jYXRvcl90cmFpdHM8QWxs
b2NhdG9yPjo6Y29uc3RydWN0KGEsIHAsIGFyZyk7Ci0gIH0KLQotICAvLyBjb25zdCYgb3B0aW1p
emF0aW9uCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBFbmFibGUgPSB0eXBlbmFt
ZQotICAgIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NjYWxhcjxVPjo6dmFsdWU+Ojp0eXBlPgot
ICB2b2lkIE1fY29uc3RydWN0KFUqIHAsIGNvbnN0IFUmIHZhbHVlKSB7Ci0gICAgaWYgKHVzaW5n
U3RkQWxsb2NhdG9yOjp2YWx1ZSkgewotICAgICAgbmV3IChwKSBVKHZhbHVlKTsKLSAgICB9IGVs
c2UgewotICAgICAgc3RkOjphbGxvY2F0b3JfdHJhaXRzPEFsbG9jYXRvcj46OmNvbnN0cnVjdChp
bXBsXywgcCwgdmFsdWUpOwotICAgIH0KLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0
eXBlbmFtZSBFbmFibGUgPSB0eXBlbmFtZQotICAgIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3Nj
YWxhcjxVPjo6dmFsdWU+Ojp0eXBlPgotICBzdGF0aWMgdm9pZCBTX2NvbnN0cnVjdChVKiBwLCBj
b25zdCBVJiB2YWx1ZSkgewotICAgIG5ldyAocCkgVSh2YWx1ZSk7Ci0gIH0KLQotICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgRW5hYmxlID0gdHlwZW5hbWUKLSAgICBzdGQ6OmVuYWJs
ZV9pZjwhc3RkOjppc19zY2FsYXI8VT46OnZhbHVlPjo6dHlwZT4KLSAgc3RhdGljIHZvaWQgU19j
b25zdHJ1Y3RfYShBbGxvY2F0b3ImIGEsIFUqIHAsIGNvbnN0IFUmIHZhbHVlKSB7Ci0gICAgc3Rk
OjphbGxvY2F0b3JfdHJhaXRzPEFsbG9jYXRvcj46OmNvbnN0cnVjdChhLCBwLCB2YWx1ZSk7Ci0g
IH0KLQotICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBkZXN0cm95Ci0KLSAgdm9pZCBNX2Rl
c3Ryb3koVCogcCkgbm9leGNlcHQgewotICAgIGlmICh1c2luZ1N0ZEFsbG9jYXRvcjo6dmFsdWUp
IHsKLSAgICAgIGlmICghc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSkK
LSAgICAgICAgcC0+flQoKTsKLSAgICB9IGVsc2UgewotICAgICAgc3RkOjphbGxvY2F0b3JfdHJh
aXRzPEFsbG9jYXRvcj46OmRlc3Ryb3koaW1wbF8sIHApOwotICAgIH0KLSAgfQotCi0gIC8vPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIGFsZ29yaXRobWlj
IGhlbHBlcnMKLXByaXZhdGU6Ci0KLSAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gZGVzdHJv
eV9yYW5nZQotCi0gIC8vIHdyYXBwZXJzCi0gIHZvaWQgTV9kZXN0cm95X3JhbmdlX2UoVCogcG9z
KSBub2V4Y2VwdCB7Ci0gICAgRF9kZXN0cm95X3JhbmdlX2EocG9zLCBpbXBsXy5lXyk7Ci0gICAg
aW1wbF8uZV8gPSBwb3M7Ci0gIH0KLQotICAvLyBkaXNwYXRjaAotICAvLyBUSElTIERJU1BBVENI
IENPREUgSVMgRFVQTElDQVRFRCBJTiBJTVBMLiBTRUUgSU1QTCBGT1IgREVUQUlMUy4KLSAgdm9p
ZCBEX2Rlc3Ryb3lfcmFuZ2VfYShUKiBmaXJzdCwgVCogbGFzdCkgbm9leGNlcHQgewotICAgIGlm
ICh1c2luZ1N0ZEFsbG9jYXRvcjo6dmFsdWUpIHsKLSAgICAgIFNfZGVzdHJveV9yYW5nZShmaXJz
dCwgbGFzdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFNfZGVzdHJveV9yYW5nZV9hKGltcGxfLCBm
aXJzdCwgbGFzdCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gYWxsb2NhdG9yCi0gIHN0YXRpYyB2b2lk
IFNfZGVzdHJveV9yYW5nZV9hKEFsbG9jYXRvciYgYSwgVCogZmlyc3QsIFQqIGxhc3QpIG5vZXhj
ZXB0IHsKLSAgICBmb3IgKDsgZmlyc3QgIT0gbGFzdDsgKytmaXJzdCkKLSAgICAgIHN0ZDo6YWxs
b2NhdG9yX3RyYWl0czxBbGxvY2F0b3I+OjpkZXN0cm95KGEsIGZpcnN0KTsKLSAgfQotCi0gIC8v
IG9wdGltaXplZAotICBzdGF0aWMgdm9pZCBTX2Rlc3Ryb3lfcmFuZ2UoVCogZmlyc3QsIFQqIGxh
c3QpIG5vZXhjZXB0IHsKLSAgICBpZiAoIXN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxU
Pjo6dmFsdWUpIHsKLSAgICAgIC8vIEVYUEVSSU1FTlRBTCBEQVRBIG9uIGZidmVjdG9yPHZlY3Rv
cjxpbnQ+PiAod2hlcmUgZWFjaCB2ZWN0b3I8aW50PiBoYXMKLSAgICAgIC8vICBzaXplIDApLgot
ICAgICAgLy8gVGhlIHVucm9sbGVkIHZlcnNpb24gc2VlbXMgdG8gd29yayBmYXN0ZXIgZm9yIHNt
YWxsIHRvIG1lZGl1bSBzaXplZAotICAgICAgLy8gIGZidmVjdG9ycy4gSXQgZ2V0cyBhIDEwJSBz
cGVlZHVwIG9uIGZidmVjdG9ycyBvZiBzaXplIDEwMjQsIDY0LCBhbmQKLSAgICAgIC8vICAxNi4K
LSAgICAgIC8vIFRoZSBzaW1wbGUgbG9vcCB2ZXJzaW9uIHNlZW1zIHRvIHdvcmsgZmFzdGVyIGZv
ciBsYXJnZSBmYnZlY3RvcnMuIFRoZQotICAgICAgLy8gIHVucm9sbGVkIHZlcnNpb24gaXMgYWJv
dXQgNiUgc2xvd2VyIG9uIGZidmVjdG9ycyBvbiBzaXplIDE2Mzg0LgotICAgICAgLy8gVGhlIHR3
byBtZXRob2RzIHNlZW0gdGllZCBmb3IgdmVyeSBsYXJnZSBmYnZlY3RvcnMuIFRoZSB1bnJvbGxl
ZAotICAgICAgLy8gIHZlcnNpb24gaXMgYWJvdXQgMC41JSBzbG93ZXIgb24gc2l6ZSAyNjIxNDQu
Ci0KLSAgICAgIC8vIGZvciAoOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0KSBmaXJzdC0+flQoKTsK
LSAgICAgICNkZWZpbmUgRk9MTFlfRkJWX09QKHApIChwKS0+flQoKQotICAgICAgRk9MTFlfRkJW
X1VOUk9MTF9QVFIoZmlyc3QsIGxhc3QsIEZPTExZX0ZCVl9PUCkKLSAgICAgICN1bmRlZiBGT0xM
WV9GQlZfT1AKLSAgICB9Ci0gIH0KLQotICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyB1bmlu
aXRpYWxpemVkX2ZpbGxfbgotCi0gIC8vIHdyYXBwZXJzCi0gIHZvaWQgTV91bmluaXRpYWxpemVk
X2ZpbGxfbl9lKHNpemVfdHlwZSBzeikgewotICAgIERfdW5pbml0aWFsaXplZF9maWxsX25fYShp
bXBsXy5lXywgc3opOwotICAgIGltcGxfLmVfICs9IHN6OwotICB9Ci0KLSAgdm9pZCBNX3VuaW5p
dGlhbGl6ZWRfZmlsbF9uX2Uoc2l6ZV90eXBlIHN6LCBWVCB2YWx1ZSkgewotICAgIERfdW5pbml0
aWFsaXplZF9maWxsX25fYShpbXBsXy5lXywgc3osIHZhbHVlKTsKLSAgICBpbXBsXy5lXyArPSBz
ejsKLSAgfQotCi0gIC8vIGRpc3BhdGNoCi0gIHZvaWQgRF91bmluaXRpYWxpemVkX2ZpbGxfbl9h
KFQqIGRlc3QsIHNpemVfdHlwZSBzeikgewotICAgIGlmICh1c2luZ1N0ZEFsbG9jYXRvcjo6dmFs
dWUpIHsKLSAgICAgIFNfdW5pbml0aWFsaXplZF9maWxsX24oZGVzdCwgc3opOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBTX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2EoaW1wbF8sIGRlc3QsIHN6KTsKLSAg
ICB9Ci0gIH0KLQotICB2b2lkIERfdW5pbml0aWFsaXplZF9maWxsX25fYShUKiBkZXN0LCBzaXpl
X3R5cGUgc3osIFZUIHZhbHVlKSB7Ci0gICAgaWYgKHVzaW5nU3RkQWxsb2NhdG9yOjp2YWx1ZSkg
ewotICAgICAgU191bmluaXRpYWxpemVkX2ZpbGxfbihkZXN0LCBzeiwgdmFsdWUpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBTX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2EoaW1wbF8sIGRlc3QsIHN6LCB2
YWx1ZSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gYWxsb2NhdG9yCi0gIHRlbXBsYXRlIDx0eXBlbmFt
ZS4uLiBBcmdzPgotICBzdGF0aWMgdm9pZCBTX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2EoQWxsb2Nh
dG9yJiBhLCBUKiBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90eXBlIHN6LCBBcmdzJiYuLi4gYXJncykgewotICAgIGF1dG8gYiA9IGRlc3Q7Ci0gICAg
YXV0byBlID0gZGVzdCArIHN6OwotICAgIHRyeSB7Ci0gICAgICBmb3IgKDsgYiAhPSBlOyArK2Ip
Ci0gICAgICAgIHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxBbGxvY2F0b3I+Ojpjb25zdHJ1Y3QoYSwg
YiwKLSAgICAgICAgICBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAgIH0gY2F0Y2gg
KC4uLikgewotICAgICAgU19kZXN0cm95X3JhbmdlX2EoYSwgZGVzdCwgYik7Ci0gICAgICB0aHJv
dzsKLSAgICB9Ci0gIH0KLQotICAvLyBvcHRpbWl6ZWQKLSAgc3RhdGljIHZvaWQgU191bmluaXRp
YWxpemVkX2ZpbGxfbihUKiBkZXN0LCBzaXplX3R5cGUgbikgewotICAgIGlmIChmb2xseTo6SXNa
ZXJvSW5pdGlhbGl6YWJsZTxUPjo6dmFsdWUpIHsKLSAgICAgIGlmIChMSUtFTFkobiAhPSAwKSkg
ewotICAgICAgICBzdGQ6Om1lbXNldChkZXN0LCAwLCBzaXplb2YoVCkgKiBuKTsKLSAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgYXV0byBiID0gZGVzdDsKLSAgICAgIGF1dG8gZSA9IGRlc3Qg
KyBuOwotICAgICAgdHJ5IHsKLSAgICAgICAgZm9yICg7IGIgIT0gZTsgKytiKSBTX2NvbnN0cnVj
dChiKTsKLSAgICAgIH0gY2F0Y2ggKC4uLikgewotICAgICAgICAtLWI7Ci0gICAgICAgIGZvciAo
OyBiID49IGRlc3Q7IC0tYikgYi0+flQoKTsKLSAgICAgICAgdGhyb3c7Ci0gICAgICB9Ci0gICAg
fQotICB9Ci0KLSAgc3RhdGljIHZvaWQgU191bmluaXRpYWxpemVkX2ZpbGxfbihUKiBkZXN0LCBz
aXplX3R5cGUgbiwgY29uc3QgVCYgdmFsdWUpIHsKLSAgICBhdXRvIGIgPSBkZXN0OwotICAgIGF1
dG8gZSA9IGRlc3QgKyBuOwotICAgIHRyeSB7Ci0gICAgICBmb3IgKDsgYiAhPSBlOyArK2IpIFNf
Y29uc3RydWN0KGIsIHZhbHVlKTsKLSAgICB9IGNhdGNoICguLi4pIHsKLSAgICAgIFNfZGVzdHJv
eV9yYW5nZShkZXN0LCBiKTsKLSAgICAgIHRocm93OwotICAgIH0KLSAgfQotCi0gIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gIC8vIHVuaW5pdGlhbGl6ZWRfY29weQotCi0gIC8vIGl0IGlzIHBvc3Np
YmxlIHRvIGFkZCBhbiBvcHRpbWl6YXRpb24gZm9yIHRoZSBjYXNlIHdoZXJlCi0gIC8vIEl0ID0g
bW92ZShUKikgYW5kIElzUmVsb2NhdGFibGU8VD4gYW5kIElzMEluaXRpYWlsaXphYmxlPFQ+Ci0K
LSAgLy8gd3JhcHBlcnMKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0PgotICB2b2lkIE1fdW5pbml0
aWFsaXplZF9jb3B5X2UoSXQgZmlyc3QsIEl0IGxhc3QpIHsKLSAgICBEX3VuaW5pdGlhbGl6ZWRf
Y29weV9hKGltcGxfLmVfLCBmaXJzdCwgbGFzdCk7Ci0gICAgaW1wbF8uZV8gKz0gc3RkOjpkaXN0
YW5jZShmaXJzdCwgbGFzdCk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXQ+Ci0gIHZv
aWQgTV91bmluaXRpYWxpemVkX21vdmVfZShJdCBmaXJzdCwgSXQgbGFzdCkgewotICAgIERfdW5p
bml0aWFsaXplZF9tb3ZlX2EoaW1wbF8uZV8sIGZpcnN0LCBsYXN0KTsKLSAgICBpbXBsXy5lXyAr
PSBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KTsKLSAgfQotCi0gIC8vIGRpc3BhdGNoCi0gIHRl
bXBsYXRlIDx0eXBlbmFtZSBJdD4KLSAgdm9pZCBEX3VuaW5pdGlhbGl6ZWRfY29weV9hKFQqIGRl
c3QsIEl0IGZpcnN0LCBJdCBsYXN0KSB7Ci0gICAgaWYgKHVzaW5nU3RkQWxsb2NhdG9yOjp2YWx1
ZSkgewotICAgICAgaWYgKGZvbGx5OjpJc1RyaXZpYWxseUNvcHlhYmxlPFQ+Ojp2YWx1ZSkgewot
ICAgICAgICBTX3VuaW5pdGlhbGl6ZWRfY29weV9iaXRzKGRlc3QsIGZpcnN0LCBsYXN0KTsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFNfdW5pbml0aWFsaXplZF9jb3B5KGRlc3QsIGZpcnN0LCBs
YXN0KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgU191bmluaXRpYWxpemVkX2NvcHlf
YShpbXBsXywgZGVzdCwgZmlyc3QsIGxhc3QpOwotICAgIH0KLSAgfQotCi0gIHRlbXBsYXRlIDx0
eXBlbmFtZSBJdD4KLSAgdm9pZCBEX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKFQqIGRlc3QsIEl0IGZp
cnN0LCBJdCBsYXN0KSB7Ci0gICAgRF91bmluaXRpYWxpemVkX2NvcHlfYShkZXN0LAotICAgICAg
c3RkOjptYWtlX21vdmVfaXRlcmF0b3IoZmlyc3QpLCBzdGQ6Om1ha2VfbW92ZV9pdGVyYXRvcihs
YXN0KSk7Ci0gIH0KLQotICAvLyBhbGxvY2F0b3IKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0Pgot
ICBzdGF0aWMgdm9pZAotICBTX3VuaW5pdGlhbGl6ZWRfY29weV9hKEFsbG9jYXRvciYgYSwgVCog
ZGVzdCwgSXQgZmlyc3QsIEl0IGxhc3QpIHsKLSAgICBhdXRvIGIgPSBkZXN0OwotICAgIHRyeSB7
Ci0gICAgICBmb3IgKDsgZmlyc3QgIT0gbGFzdDsgKytmaXJzdCwgKytiKQotICAgICAgICBzdGQ6
OmFsbG9jYXRvcl90cmFpdHM8QWxsb2NhdG9yPjo6Y29uc3RydWN0KGEsIGIsICpmaXJzdCk7Ci0g
ICAgfSBjYXRjaCAoLi4uKSB7Ci0gICAgICBTX2Rlc3Ryb3lfcmFuZ2VfYShhLCBkZXN0LCBiKTsK
LSAgICAgIHRocm93OwotICAgIH0KLSAgfQotCi0gIC8vIG9wdGltaXplZAotICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgSXQ+Ci0gIHN0YXRpYyB2b2lkIFNfdW5pbml0aWFsaXplZF9jb3B5KFQqIGRlc3Qs
IEl0IGZpcnN0LCBJdCBsYXN0KSB7Ci0gICAgYXV0byBiID0gZGVzdDsKLSAgICB0cnkgewotICAg
ICAgZm9yICg7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QsICsrYikKLSAgICAgICAgU19jb25zdHJ1
Y3QoYiwgKmZpcnN0KTsKLSAgICB9IGNhdGNoICguLi4pIHsKLSAgICAgIFNfZGVzdHJveV9yYW5n
ZShkZXN0LCBiKTsKLSAgICAgIHRocm93OwotICAgIH0KLSAgfQotCi0gIHN0YXRpYyB2b2lkCi0g
IFNfdW5pbml0aWFsaXplZF9jb3B5X2JpdHMoVCogZGVzdCwgY29uc3QgVCogZmlyc3QsIGNvbnN0
IFQqIGxhc3QpIHsKLSAgICBpZiAobGFzdCAhPSBmaXJzdCkgewotICAgICAgc3RkOjptZW1jcHko
KHZvaWQqKWRlc3QsICh2b2lkKilmaXJzdCwgKGxhc3QgLSBmaXJzdCkgKiBzaXplb2YoVCkpOwot
ICAgIH0KLSAgfQotCi0gIHN0YXRpYyB2b2lkCi0gIFNfdW5pbml0aWFsaXplZF9jb3B5X2JpdHMo
VCogZGVzdCwgc3RkOjptb3ZlX2l0ZXJhdG9yPFQqPiBmaXJzdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjptb3ZlX2l0ZXJhdG9yPFQqPiBsYXN0KSB7Ci0gICAgVCogYkZpcnN0ID0gZmly
c3QuYmFzZSgpOwotICAgIFQqIGJMYXN0ID0gbGFzdC5iYXNlKCk7Ci0gICAgaWYgKGJMYXN0ICE9
IGJGaXJzdCkgewotICAgICAgc3RkOjptZW1jcHkoKHZvaWQqKWRlc3QsICh2b2lkKiliRmlyc3Qs
IChiTGFzdCAtIGJGaXJzdCkgKiBzaXplb2YoVCkpOwotICAgIH0KLSAgfQotCi0gIHRlbXBsYXRl
IDx0eXBlbmFtZSBJdD4KLSAgc3RhdGljIHZvaWQKLSAgU191bmluaXRpYWxpemVkX2NvcHlfYml0
cyhUKiBkZXN0LCBJdCBmaXJzdCwgSXQgbGFzdCkgewotICAgIFNfdW5pbml0aWFsaXplZF9jb3B5
KGRlc3QsIGZpcnN0LCBsYXN0KTsKLSAgfQotCi0gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8v
IGNvcHlfbgotCi0gIC8vIFRoaXMgZnVuY3Rpb24gaXMgInVuc2FmZSI6IGl0IGFzc3VtZXMgdGhh
dCB0aGUgaXRlcmF0b3IgY2FuIGJlIGFkdmFuY2VkIGF0Ci0gIC8vICBsZWFzdCBuIHRpbWVzLiBI
b3dldmVyLCBhcyBhIHByaXZhdGUgZnVuY3Rpb24sIHRoYXQgdW5zYWZldHkgaXMgbWFuYWdlZAot
ICAvLyAgd2hvbGx5IGJ5IGZidmVjdG9yIGl0c2VsZi4KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
SXQ+Ci0gIHN0YXRpYyBJdCBTX2NvcHlfbihUKiBkZXN0LCBJdCBmaXJzdCwgc2l6ZV90eXBlIG4p
IHsKLSAgICBhdXRvIGUgPSBkZXN0ICsgbjsKLSAgICBmb3IgKDsgZGVzdCAhPSBlOyArK2Rlc3Qs
ICsrZmlyc3QpICpkZXN0ID0gKmZpcnN0OwotICAgIHJldHVybiBmaXJzdDsKLSAgfQotCi0gIHN0
YXRpYyBjb25zdCBUKiBTX2NvcHlfbihUKiBkZXN0LCBjb25zdCBUKiBmaXJzdCwgc2l6ZV90eXBl
IG4pIHsKLSAgICBpZiAoZm9sbHk6OklzVHJpdmlhbGx5Q29weWFibGU8VD46OnZhbHVlKSB7Ci0g
ICAgICBzdGQ6Om1lbWNweSgodm9pZCopZGVzdCwgKHZvaWQqKWZpcnN0LCBuICogc2l6ZW9mKFQp
KTsKLSAgICAgIHJldHVybiBmaXJzdCArIG47Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBT
X2NvcHlfbjxjb25zdCBUKj4oZGVzdCwgZmlyc3QsIG4pOwotICAgIH0KLSAgfQotCi0gIHN0YXRp
YyBzdGQ6Om1vdmVfaXRlcmF0b3I8VCo+Ci0gIFNfY29weV9uKFQqIGRlc3QsIHN0ZDo6bW92ZV9p
dGVyYXRvcjxUKj4gbUl0LCBzaXplX3R5cGUgbikgewotICAgIGlmIChmb2xseTo6SXNUcml2aWFs
bHlDb3B5YWJsZTxUPjo6dmFsdWUpIHsKLSAgICAgIFQqIGZpcnN0ID0gbUl0LmJhc2UoKTsKLSAg
ICAgIHN0ZDo6bWVtY3B5KCh2b2lkKilkZXN0LCAodm9pZCopZmlyc3QsIG4gKiBzaXplb2YoVCkp
OwotICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9tb3ZlX2l0ZXJhdG9yKGZpcnN0ICsgbik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIHJldHVybiBTX2NvcHlfbjxzdGQ6Om1vdmVfaXRlcmF0b3I8VCo+Pihk
ZXN0LCBtSXQsIG4pOwotICAgIH0KLSAgfQotCi0gIC8vPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIHJlbG9jYXRpb24gaGVscGVycwotcHJpdmF0ZToKLQot
ICAvLyBSZWxvY2F0aW9uIGlzIGRpdmlkZWQgaW50byB0aHJlZSBwYXJ0czoKLSAgLy8KLSAgLy8g
IDE6IHJlbG9jYXRlX21vdmUKLSAgLy8gICAgIFBlcmZvcm1zIHRoZSBhY3R1YWwgbW92ZW1lbnQg
b2YgZGF0YSBmcm9tIHBvaW50IGEgdG8gcG9pbnQgYi4KLSAgLy8KLSAgLy8gIDI6IHJlbG9jYXRl
X2RvbmUKLSAgLy8gICAgIERlc3Ryb3lzIHRoZSBvbGQgZGF0YS4KLSAgLy8KLSAgLy8gIDM6IHJl
bG9jYXRlX3VuZG8KLSAgLy8gICAgIERlc3RveXMgdGhlIG5ldyBkYXRhIGFuZCByZXN0b3JlcyB0
aGUgb2xkIGRhdGEuCi0gIC8vCi0gIC8vIFRoZSB0aHJlZSBzdGVwcyBhcmUgdXNlZCBiZWNhdXNl
IHRoZXJlIG1heSBiZSBhbiBleGNlcHRpb24gYWZ0ZXIgcGFydCAxCi0gIC8vICBoYXMgY29tcGxl
dGVkLiBJZiB0aGF0IGlzIHRoZSBjYXNlLCB0aGVuIHJlbG9jYXRlX3VuZG8gY2FuIG51bGxpZnkg
dGhlCi0gIC8vICBpbml0aWFsIG1vdmUuIE90aGVyd2lzZSwgcmVsb2NhdGVfZG9uZSBwZXJmb3Jt
cyB0aGUgbGFzdCBiaXQgb2YgdGlkeWluZwotICAvLyAgdXAuCi0gIC8vCi0gIC8vIFRoZSByZWxv
Y2F0aW9uIHRyaW8gbWF5IHVzZSBlaXRoZXIgbWVtY3B5LCBtb3ZlLCBvciBjb3B5LiBJdCBpcyBk
ZWNpZGVkCi0gIC8vICBieSB0aGUgZm9sbG93aW5nIGNhc2Ugc3RhdGVtZW50OgotICAvLwotICAv
LyAgSXNSZWxvY2F0YWJsZSAmJiB1c2luZ1N0ZEFsbG9jYXRvciAgICAtPiBtZW1jcHkKLSAgLy8g
IGhhc19ub3Rocm93X21vdmUgJiYgdXNpbmdTdGRBbGxvY2F0b3IgLT4gbW92ZQotICAvLyAgY2Fu
bm90IGNvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBtb3ZlCi0gIC8vICBkZWZhdWx0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IGNvcHkKLSAgLy8KLSAgLy8gSWYgdGhl
IGNsYXNzIGlzIG5vbi1jb3B5YWJsZSB0aGVuIGl0IG11c3QgYmUgbW92YWJsZS4gSG93ZXZlciwg
aWYgdGhlCi0gIC8vICBtb3ZlIGNvbnN0cnVjdG9yIGlzIG5vdCBub2V4Y2VwdCwgaS5lLiBhbiBl
cnJvciBjb3VsZCBiZSB0aHJvd24sIHRoZW4KLSAgLy8gIHJlbG9jYXRlX3VuZG8gd2lsbCBiZSB1
bmFibGUgdG8gcmVzdG9yZSB0aGUgb2xkIGRhdGEsIGZvciBmZWFyIG9mIGEKLSAgLy8gIHNlY29u
ZCBleGNlcHRpb24gYmVpbmcgdGhyb3duLiBUaGlzIGlzIGEga25vd24gYW5kIHVuYXZvaWRhYmxl
Ci0gIC8vICBkZWZpY2llbmN5LiBJbiBsaWV1IG9mIGEgc3Ryb25nIGV4Y2VwdGlvbiBndWFyYW50
ZWUsIHJlbG9jYXRlX3VuZG8gZG9lcwotICAvLyAgdGhlIG5leHQgYmVzdCB0aGluZzogaXQgcHJv
dmlkZXMgYSB3ZWFrIGV4Y2VwdGlvbiBndWFyYW50ZWUgYnkKLSAgLy8gIGRlc3RvcnlpbmcgdGhl
IG5ldyBkYXRhLCBidXQgbGVhdmluZyB0aGUgb2xkIGRhdGEgaW4gYW4gaW5kZXRlcm1pbmF0ZQot
ICAvLyAgc3RhdGUuIE5vdGUgdGhhdCB0aGF0IGluZGV0ZXJtaW5hdGUgc3RhdGUgd2lsbCBiZSB2
YWxpZCwgc2luY2UgdGhlCi0gIC8vICBvbGQgZGF0YSBoYXMgbm90IGJlZW4gZGVzdHJveWVkOyBp
dCBoYXMgbWVyZWx5IGJlZW4gdGhlIHNvdXJjZSBvZiBhCi0gIC8vICBtb3ZlLCB3aGljaCBpcyBy
ZXF1aXJlZCB0byBsZWF2ZSB0aGUgc291cmNlIGluIGEgdmFsaWQgc3RhdGUuCi0KLSAgLy8gd3Jh
cHBlcnMKLSAgdm9pZCBNX3JlbG9jYXRlKFQqIG5ld0IpIHsKLSAgICByZWxvY2F0ZV9tb3ZlKG5l
d0IsIGltcGxfLmJfLCBpbXBsXy5lXyk7Ci0gICAgcmVsb2NhdGVfZG9uZShuZXdCLCBpbXBsXy5i
XywgaW1wbF8uZV8pOwotICB9Ci0KLSAgLy8gZGlzcGF0Y2ggdHlwZSB0cmFpdAotICB0eXBlZGVm
IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwKLSAgICAgIGZvbGx5OjpJc1JlbG9jYXRhYmxl
PFQ+Ojp2YWx1ZSAmJiB1c2luZ1N0ZEFsbG9jYXRvcjo6dmFsdWUKLSAgICA+IHJlbG9jYXRlX3Vz
ZV9tZW1jcHk7Ci0KLSAgdHlwZWRlZiBzdGQ6OmludGVncmFsX2NvbnN0YW50PGJvb2wsCi0gICAg
ICAoc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxUPjo6dmFsdWUKLSAgICAgICAm
JiB1c2luZ1N0ZEFsbG9jYXRvcjo6dmFsdWUpCi0gICAgICB8fCAhc3RkOjppc19jb3B5X2NvbnN0
cnVjdGlibGU8VD46OnZhbHVlCi0gICAgPiByZWxvY2F0ZV91c2VfbW92ZTsKLQotICAvLyBtb3Zl
Ci0gIHZvaWQgcmVsb2NhdGVfbW92ZShUKiBkZXN0LCBUKiBmaXJzdCwgVCogbGFzdCkgewotICAg
IHJlbG9jYXRlX21vdmVfb3JfbWVtY3B5KGRlc3QsIGZpcnN0LCBsYXN0LCByZWxvY2F0ZV91c2Vf
bWVtY3B5KCkpOwotICB9Ci0KLSAgdm9pZCByZWxvY2F0ZV9tb3ZlX29yX21lbWNweShUKiBkZXN0
LCBUKiBmaXJzdCwgVCogbGFzdCwgc3RkOjp0cnVlX3R5cGUpIHsKLSAgICBpZiAoZmlyc3QgIT0g
bnVsbHB0cikgewotICAgICAgc3RkOjptZW1jcHkoKHZvaWQqKWRlc3QsICh2b2lkKilmaXJzdCwg
KGxhc3QgLSBmaXJzdCkgKiBzaXplb2YoVCkpOwotICAgIH0KLSAgfQotCi0gIHZvaWQgcmVsb2Nh
dGVfbW92ZV9vcl9tZW1jcHkoVCogZGVzdCwgVCogZmlyc3QsIFQqIGxhc3QsIHN0ZDo6ZmFsc2Vf
dHlwZSkgewotICAgIHJlbG9jYXRlX21vdmVfb3JfY29weShkZXN0LCBmaXJzdCwgbGFzdCwgcmVs
b2NhdGVfdXNlX21vdmUoKSk7Ci0gIH0KLQotICB2b2lkIHJlbG9jYXRlX21vdmVfb3JfY29weShU
KiBkZXN0LCBUKiBmaXJzdCwgVCogbGFzdCwgc3RkOjp0cnVlX3R5cGUpIHsKLSAgICBEX3VuaW5p
dGlhbGl6ZWRfbW92ZV9hKGRlc3QsIGZpcnN0LCBsYXN0KTsKLSAgfQotCi0gIHZvaWQgcmVsb2Nh
dGVfbW92ZV9vcl9jb3B5KFQqIGRlc3QsIFQqIGZpcnN0LCBUKiBsYXN0LCBzdGQ6OmZhbHNlX3R5
cGUpIHsKLSAgICBEX3VuaW5pdGlhbGl6ZWRfY29weV9hKGRlc3QsIGZpcnN0LCBsYXN0KTsKLSAg
fQotCi0gIC8vIGRvbmUKLSAgdm9pZCByZWxvY2F0ZV9kb25lKFQqIC8qZGVzdCovLCBUKiBmaXJz
dCwgVCogbGFzdCkgbm9leGNlcHQgewotICAgIGlmIChmb2xseTo6SXNSZWxvY2F0YWJsZTxUPjo6
dmFsdWUgJiYgdXNpbmdTdGRBbGxvY2F0b3I6OnZhbHVlKSB7Ci0gICAgICAvLyB1c2VkIG1lbWNw
eTsgZGF0YSBoYXMgYmVlbiByZWxvY2F0ZWQsIGRvIG5vdCBjYWxsIGRlc3RydWN0b3IKLSAgICB9
IGVsc2UgewotICAgICAgRF9kZXN0cm95X3JhbmdlX2EoZmlyc3QsIGxhc3QpOwotICAgIH0KLSAg
fQotCi0gIC8vIHVuZG8KLSAgdm9pZCByZWxvY2F0ZV91bmRvKFQqIGRlc3QsIFQqIGZpcnN0LCBU
KiBsYXN0KSBub2V4Y2VwdCB7Ci0gICAgaWYgKGZvbGx5OjpJc1JlbG9jYXRhYmxlPFQ+Ojp2YWx1
ZSAmJiB1c2luZ1N0ZEFsbG9jYXRvcjo6dmFsdWUpIHsKLSAgICAgIC8vIHVzZWQgbWVtY3B5LCBv
bGQgZGF0YSBpcyBzdGlsbCB2YWxpZCwgbm90aGluZyB0byBkbwotICAgIH0gZWxzZSBpZiAoc3Rk
Ojppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxUPjo6dmFsdWUgJiYKLSAgICAgICAgICAg
ICAgIHVzaW5nU3RkQWxsb2NhdG9yOjp2YWx1ZSkgewotICAgICAgLy8gbm9leGNlcHQgbW92ZSBl
dmVyeXRoaW5nIGJhY2ssIGFrYSByZWxvY2F0ZV9tb3ZlCi0gICAgICByZWxvY2F0ZV9tb3ZlKGZp
cnN0LCBkZXN0LCBkZXN0ICsgKGxhc3QgLSBmaXJzdCkpOwotICAgIH0gZWxzZSBpZiAoIXN0ZDo6
aXNfY29weV9jb25zdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSkgewotICAgICAgLy8gd2VhayBndWFyYW50
ZWUKLSAgICAgIERfZGVzdHJveV9yYW5nZV9hKGRlc3QsIGRlc3QgKyAobGFzdCAtIGZpcnN0KSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIHVzZWQgY29weSwgb2xkIGRhdGEgaXMgc3RpbGwgdmFs
aWQKLSAgICAgIERfZGVzdHJveV9yYW5nZV9hKGRlc3QsIGRlc3QgKyAobGFzdCAtIGZpcnN0KSk7
Ci0gICAgfQotICB9Ci0KLQotICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAvLyBjb25zdHJ1Y3QvY29weS9kZXN0cm95Ci1wdWJsaWM6Ci0KLSAgZmJ2ZWN0
b3IoKSA9IGRlZmF1bHQ7Ci0KLSAgZXhwbGljaXQgZmJ2ZWN0b3IoY29uc3QgQWxsb2NhdG9yJiBh
KSA6IGltcGxfKGEpIHt9Ci0KLSAgZXhwbGljaXQgZmJ2ZWN0b3Ioc2l6ZV90eXBlIG4sIGNvbnN0
IEFsbG9jYXRvciYgYSA9IEFsbG9jYXRvcigpKQotICAgIDogaW1wbF8obiwgYSkKLSAgICB7IE1f
dW5pbml0aWFsaXplZF9maWxsX25fZShuKTsgfQotCi0gIGZidmVjdG9yKHNpemVfdHlwZSBuLCBW
VCB2YWx1ZSwgY29uc3QgQWxsb2NhdG9yJiBhID0gQWxsb2NhdG9yKCkpCi0gICAgOiBpbXBsXyhu
LCBhKQotICAgIHsgTV91bmluaXRpYWxpemVkX2ZpbGxfbl9lKG4sIHZhbHVlKTsgfQotCi0gIHRl
bXBsYXRlIDxjbGFzcyBJdCwgY2xhc3MgQ2F0ZWdvcnkgPSB0eXBlbmFtZQotICAgICAgICAgICAg
c3RkOjppdGVyYXRvcl90cmFpdHM8SXQ+OjppdGVyYXRvcl9jYXRlZ29yeT4KLSAgZmJ2ZWN0b3Io
SXQgZmlyc3QsIEl0IGxhc3QsIGNvbnN0IEFsbG9jYXRvciYgYSA9IEFsbG9jYXRvcigpKQotICAg
IDogZmJ2ZWN0b3IoZmlyc3QsIGxhc3QsIGEsIENhdGVnb3J5KCkpIHt9Ci0KLSAgZmJ2ZWN0b3Io
Y29uc3QgZmJ2ZWN0b3ImIG90aGVyKQotICAgIDogaW1wbF8ob3RoZXIuc2l6ZSgpLCBBOjpzZWxl
Y3Rfb25fY29udGFpbmVyX2NvcHlfY29uc3RydWN0aW9uKG90aGVyLmltcGxfKSkKLSAgICB7IE1f
dW5pbml0aWFsaXplZF9jb3B5X2Uob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCkpOyB9Ci0KLSAg
ZmJ2ZWN0b3IoZmJ2ZWN0b3ImJiBvdGhlcikgbm9leGNlcHQgOiBpbXBsXyhzdGQ6Om1vdmUob3Ro
ZXIuaW1wbF8pKSB7fQotCi0gIGZidmVjdG9yKGNvbnN0IGZidmVjdG9yJiBvdGhlciwgY29uc3Qg
QWxsb2NhdG9yJiBhKQotICAgIDogZmJ2ZWN0b3Iob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCks
IGEpIHt9Ci0KLSAgLyogbWF5IHRocm93ICovIGZidmVjdG9yKGZidmVjdG9yJiYgb3RoZXIsIGNv
bnN0IEFsbG9jYXRvciYgYSkgOiBpbXBsXyhhKSB7Ci0gICAgaWYgKGltcGxfID09IG90aGVyLmlt
cGxfKSB7Ci0gICAgICBpbXBsXy5zd2FwRGF0YShvdGhlci5pbXBsXyk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIGltcGxfLmluaXQob3RoZXIuc2l6ZSgpKTsKLSAgICAgIE1fdW5pbml0aWFsaXplZF9t
b3ZlX2Uob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCkpOwotICAgIH0KLSAgfQotCi0gIGZidmVj
dG9yKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiBpbCwgY29uc3QgQWxsb2NhdG9yJiBhID0gQWxs
b2NhdG9yKCkpCi0gICAgOiBmYnZlY3RvcihpbC5iZWdpbigpLCBpbC5lbmQoKSwgYSkge30KLQot
ICB+ZmJ2ZWN0b3IoKSA9IGRlZmF1bHQ7IC8vIHRoZSBjbGVhbnVwIG9jY3VycyBpbiBpbXBsXwot
Ci0gIGZidmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgZmJ2ZWN0b3ImIG90aGVyKSB7Ci0gICAgaWYg
KFVOTElLRUxZKHRoaXMgPT0gJm90aGVyKSkgcmV0dXJuICp0aGlzOwotCi0gICAgaWYgKCF1c2lu
Z1N0ZEFsbG9jYXRvcjo6dmFsdWUgJiYKLSAgICAgICAgQTo6cHJvcGFnYXRlX29uX2NvbnRhaW5l
cl9jb3B5X2Fzc2lnbm1lbnQ6OnZhbHVlKSB7Ci0gICAgICBpZiAoaW1wbF8gIT0gb3RoZXIuaW1w
bF8pIHsKLSAgICAgICAgLy8gY2FuJ3QgdXNlIG90aGVyJ3MgZGlmZmVyZW50IGFsbG9jYXRvciB0
byBjbGVhbiB1cCBzZWxmCi0gICAgICAgIGltcGxfLnJlc2V0KCk7Ci0gICAgICB9Ci0gICAgICAo
QWxsb2NhdG9yJilpbXBsXyA9IChBbGxvY2F0b3ImKW90aGVyLmltcGxfOwotICAgIH0KLQotICAg
IGFzc2lnbihvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSk7Ci0gICAgcmV0dXJuICp0aGlzOwot
ICB9Ci0KLSAgZmJ2ZWN0b3ImIG9wZXJhdG9yPShmYnZlY3RvciYmIG90aGVyKSB7Ci0gICAgaWYg
KFVOTElLRUxZKHRoaXMgPT0gJm90aGVyKSkgcmV0dXJuICp0aGlzOwotICAgIG1vdmVGcm9tKHN0
ZDo6bW92ZShvdGhlciksIG1vdmVJc1N3YXAoKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0K
LSAgZmJ2ZWN0b3ImIG9wZXJhdG9yPShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gaWwpIHsKLSAg
ICBhc3NpZ24oaWwuYmVnaW4oKSwgaWwuZW5kKCkpOwotICAgIHJldHVybiAqdGhpczsKLSAgfQot
Ci0gIHRlbXBsYXRlIDxjbGFzcyBJdCwgY2xhc3MgQ2F0ZWdvcnkgPSB0eXBlbmFtZQotICAgICAg
ICAgICAgc3RkOjppdGVyYXRvcl90cmFpdHM8SXQ+OjppdGVyYXRvcl9jYXRlZ29yeT4KLSAgdm9p
ZCBhc3NpZ24oSXQgZmlyc3QsIEl0IGxhc3QpIHsKLSAgICBhc3NpZ24oZmlyc3QsIGxhc3QsIENh
dGVnb3J5KCkpOwotICB9Ci0KLSAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIG4sIFZUIHZhbHVlKSB7
Ci0gICAgaWYgKG4gPiBjYXBhY2l0eSgpKSB7Ci0gICAgICAvLyBOb3QgZW5vdWdoIHNwYWNlLiBE
byBub3QgcmVzZXJ2ZSBpbiBwbGFjZSwgc2luY2Ugd2Ugd2lsbAotICAgICAgLy8gZGlzY2FyZCB0
aGUgb2xkIHZhbHVlcyBhbnl3YXlzLgotICAgICAgaWYgKGRhdGFJc0ludGVybmFsQW5kTm90VlQo
dmFsdWUpKSB7Ci0gICAgICAgIFQgY29weShzdGQ6Om1vdmUodmFsdWUpKTsKLSAgICAgICAgaW1w
bF8ucmVzZXQobik7Ci0gICAgICAgIE1fdW5pbml0aWFsaXplZF9maWxsX25fZShuLCBjb3B5KTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGltcGxfLnJlc2V0KG4pOwotICAgICAgICBNX3VuaW5p
dGlhbGl6ZWRfZmlsbF9uX2UobiwgdmFsdWUpOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAobiA8
PSBzaXplKCkpIHsKLSAgICAgIGF1dG8gbmV3RSA9IGltcGxfLmJfICsgbjsKLSAgICAgIHN0ZDo6
ZmlsbChpbXBsXy5iXywgbmV3RSwgdmFsdWUpOwotICAgICAgTV9kZXN0cm95X3JhbmdlX2UobmV3
RSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN0ZDo6ZmlsbChpbXBsXy5iXywgaW1wbF8uZV8sIHZh
bHVlKTsKLSAgICAgIE1fdW5pbml0aWFsaXplZF9maWxsX25fZShuIC0gc2l6ZSgpLCB2YWx1ZSk7
Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBhc3NpZ24oc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGls
KSB7Ci0gICAgYXNzaWduKGlsLmJlZ2luKCksIGlsLmVuZCgpKTsKLSAgfQotCi0gIGFsbG9jYXRv
cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuIGltcGxf
OwotICB9Ci0KLXByaXZhdGU6Ci0KLSAgLy8gY29udHJhY3QgZGlzcGF0Y2ggZm9yIGl0ZXJhdG9y
IHR5cGVzIGZidmVjdG9yKEl0IGZpcnN0LCBJdCBsYXN0KQotICB0ZW1wbGF0ZSA8Y2xhc3MgRm9y
d2FyZEl0ZXJhdG9yPgotICBmYnZlY3RvcihGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJ
dGVyYXRvciBsYXN0LAotICAgICAgICAgICBjb25zdCBBbGxvY2F0b3ImIGEsIHN0ZDo6Zm9yd2Fy
ZF9pdGVyYXRvcl90YWcpCi0gICAgOiBpbXBsXyhzaXplX3R5cGUoc3RkOjpkaXN0YW5jZShmaXJz
dCwgbGFzdCkpLCBhKQotICAgIHsgTV91bmluaXRpYWxpemVkX2NvcHlfZShmaXJzdCwgbGFzdCk7
IH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KLSAgZmJ2ZWN0b3IoSW5wdXRJ
dGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAotICAgICAgICAgICBjb25zdCBBbGxv
Y2F0b3ImIGEsIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQotICAgIDogaW1wbF8oYSkKLSAgICB7
IGZvciAoOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0KSBlbXBsYWNlX2JhY2soKmZpcnN0KTsgfQot
Ci0gIC8vIGNvbnRyYWN0IGRpc3BhdGNoIGZvciBhbGxvY2F0b3IgbW92ZW1lbnQgaW4gb3BlcmF0
b3I9KGZidmVjdG9yJiYpCi0gIHZvaWQKLSAgbW92ZUZyb20oZmJ2ZWN0b3ImJiBvdGhlciwgc3Rk
Ojp0cnVlX3R5cGUpIHsKLSAgICBzd2FwKGltcGxfLCBvdGhlci5pbXBsXyk7Ci0gIH0KLSAgdm9p
ZCBtb3ZlRnJvbShmYnZlY3RvciYmIG90aGVyLCBzdGQ6OmZhbHNlX3R5cGUpIHsKLSAgICBpZiAo
aW1wbF8gPT0gb3RoZXIuaW1wbF8pIHsKLSAgICAgIGltcGxfLnN3YXBEYXRhKG90aGVyLmltcGxf
KTsKLSAgICB9IGVsc2UgewotICAgICAgaW1wbF8ucmVzZXQob3RoZXIuc2l6ZSgpKTsKLSAgICAg
IE1fdW5pbml0aWFsaXplZF9tb3ZlX2Uob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCkpOwotICAg
IH0KLSAgfQotCi0gIC8vIGNvbnRyYWN0IGRpc3BhdGNoIGZvciBpdGVyYXRvciB0eXBlcyBpbiBh
c3NpZ24oSXQgZmlyc3QsIEl0IGxhc3QpCi0gIHRlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0
b3I+Ci0gIHZvaWQgYXNzaWduKEZvcndhcmRJdGVyYXRvciBmaXJzdCwgRm9yd2FyZEl0ZXJhdG9y
IGxhc3QsCi0gICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKLSAgICBj
b25zdCBhdXRvIG5ld1NpemUgPSBzaXplX3R5cGUoc3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCkp
OwotICAgIGlmIChuZXdTaXplID4gY2FwYWNpdHkoKSkgewotICAgICAgaW1wbF8ucmVzZXQobmV3
U2l6ZSk7Ci0gICAgICBNX3VuaW5pdGlhbGl6ZWRfY29weV9lKGZpcnN0LCBsYXN0KTsKLSAgICB9
IGVsc2UgaWYgKG5ld1NpemUgPD0gc2l6ZSgpKSB7Ci0gICAgICBhdXRvIG5ld0VuZCA9IHN0ZDo6
Y29weShmaXJzdCwgbGFzdCwgaW1wbF8uYl8pOwotICAgICAgTV9kZXN0cm95X3JhbmdlX2UobmV3
RW5kKTsKLSAgICB9IGVsc2UgewotICAgICAgYXV0byBtaWQgPSBTX2NvcHlfbihpbXBsXy5iXywg
Zmlyc3QsIHNpemUoKSk7Ci0gICAgICBNX3VuaW5pdGlhbGl6ZWRfY29weV9lPGRlY2x0eXBlKGxh
c3QpPihtaWQsIGxhc3QpOwotICAgIH0KLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0
ZXJhdG9yPgotICB2b2lkIGFzc2lnbihJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9y
IGxhc3QsCi0gICAgICAgICAgICAgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKSB7Ci0gICAgYXV0
byBwID0gaW1wbF8uYl87Ci0gICAgZm9yICg7IGZpcnN0ICE9IGxhc3QgJiYgcCAhPSBpbXBsXy5l
XzsgKytmaXJzdCwgKytwKSB7Ci0gICAgICAqcCA9ICpmaXJzdDsKLSAgICB9Ci0gICAgaWYgKHAg
IT0gaW1wbF8uZV8pIHsKLSAgICAgIE1fZGVzdHJveV9yYW5nZV9lKHApOwotICAgIH0gZWxzZSB7
Ci0gICAgICBmb3IgKDsgZmlyc3QgIT0gbGFzdDsgKytmaXJzdCkgZW1wbGFjZV9iYWNrKCpmaXJz
dCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gY29udHJhY3QgZGlzcGF0Y2ggZm9yIGFsaWFzaW5nIHVu
ZGVyIFZUIG9wdGltaXphdGlvbgotICBib29sIGRhdGFJc0ludGVybmFsQW5kTm90VlQoY29uc3Qg
VCYgdCkgewotICAgIGlmIChzaG91bGRfcGFzc19ieV92YWx1ZTo6dmFsdWUpIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gZGF0YUlzSW50ZXJuYWwodCk7Ci0gIH0KLSAgYm9vbCBkYXRhSXNJbnRl
cm5hbChjb25zdCBUJiB0KSB7Ci0gICAgcmV0dXJuIFVOTElLRUxZKGltcGxfLmJfIDw9IHN0ZDo6
YWRkcmVzc29mKHQpICYmCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6YWRkcmVzc29mKHQpIDwg
aW1wbF8uZV8pOwotICB9Ci0KLQotICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICAvLyBpdGVyYXRvcnMKLXB1YmxpYzoKLQotICBpdGVyYXRvciBiZWdpbigp
IG5vZXhjZXB0IHsKLSAgICByZXR1cm4gaW1wbF8uYl87Ci0gIH0KLSAgY29uc3RfaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuIGltcGxfLmJfOwotICB9Ci0gIGl0
ZXJhdG9yIGVuZCgpIG5vZXhjZXB0IHsKLSAgICByZXR1cm4gaW1wbF8uZV87Ci0gIH0KLSAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQgewotICAgIHJldHVybiBpbXBsXy5lXzsK
LSAgfQotICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIG5vZXhjZXB0IHsKLSAgICByZXR1cm4g
cmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7Ci0gIH0KLSAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBy
YmVnaW4oKSBjb25zdCBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IoZW5kKCkpOwotICB9Ci0gIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIG5vZXhjZXB0IHsKLSAg
ICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKLSAgfQotICBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yIHJlbmQoKSBjb25zdCBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IoYmVnaW4oKSk7Ci0gIH0KLQotICBjb25zdF9pdGVyYXRvciBjYmVnaW4oKSBj
b25zdCBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuIGltcGxfLmJfOwotICB9Ci0gIGNvbnN0X2l0ZXJh
dG9yIGNlbmQoKSBjb25zdCBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuIGltcGxfLmVfOwotICB9Ci0g
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY3JiZWdpbigpIGNvbnN0IG5vZXhjZXB0IHsKLSAgICBy
ZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7Ci0gIH0KLSAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvciBjcmVuZCgpIGNvbnN0IG5vZXhjZXB0IHsKLSAgICByZXR1cm4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKLSAgfQotCi0gIC8vPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0g
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIGNhcGFjaXR5Ci1wdWJsaWM6Ci0KLSAgc2l6ZV90
eXBlIHNpemUoKSBjb25zdCBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuIHNpemVfdHlwZShpbXBsXy5l
XyAtIGltcGxfLmJfKTsKLSAgfQotCi0gIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IG5vZXhj
ZXB0IHsKLSAgICAvLyBnb29kIGx1Y2sgZ2V0dGluJyB0aGVyZQotICAgIHJldHVybiB+c2l6ZV90
eXBlKDApOwotICB9Ci0KLSAgdm9pZCByZXNpemUoc2l6ZV90eXBlIG4pIHsKLSAgICBpZiAobiA8
PSBzaXplKCkpIHsKLSAgICAgIE1fZGVzdHJveV9yYW5nZV9lKGltcGxfLmJfICsgbik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIHJlc2VydmUobik7Ci0gICAgICBNX3VuaW5pdGlhbGl6ZWRfZmlsbF9u
X2UobiAtIHNpemUoKSk7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCByZXNpemUoc2l6ZV90eXBlIG4s
IFZUIHQpIHsKLSAgICBpZiAobiA8PSBzaXplKCkpIHsKLSAgICAgIE1fZGVzdHJveV9yYW5nZV9l
KGltcGxfLmJfICsgbik7Ci0gICAgfSBlbHNlIGlmIChkYXRhSXNJbnRlcm5hbEFuZE5vdFZUKHQp
ICYmIG4gPiBjYXBhY2l0eSgpKSB7Ci0gICAgICBUIGNvcHkodCk7Ci0gICAgICByZXNlcnZlKG4p
OwotICAgICAgTV91bmluaXRpYWxpemVkX2ZpbGxfbl9lKG4gLSBzaXplKCksIGNvcHkpOwotICAg
IH0gZWxzZSB7Ci0gICAgICByZXNlcnZlKG4pOwotICAgICAgTV91bmluaXRpYWxpemVkX2ZpbGxf
bl9lKG4gLSBzaXplKCksIHQpOwotICAgIH0KLSAgfQotCi0gIHNpemVfdHlwZSBjYXBhY2l0eSgp
IGNvbnN0IG5vZXhjZXB0IHsKLSAgICByZXR1cm4gc2l6ZV90eXBlKGltcGxfLnpfIC0gaW1wbF8u
Yl8pOwotICB9Ci0KLSAgYm9vbCBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0IHsKLSAgICByZXR1cm4g
aW1wbF8uYl8gPT0gaW1wbF8uZV87Ci0gIH0KLQotICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIG4p
IHsKLSAgICBpZiAobiA8PSBjYXBhY2l0eSgpKSByZXR1cm47Ci0gICAgaWYgKGltcGxfLmJfICYm
IHJlc2VydmVfaW5fcGxhY2UobikpIHJldHVybjsKLQotICAgIGF1dG8gbmV3Q2FwID0gZm9sbHk6
Omdvb2RNYWxsb2NTaXplKG4gKiBzaXplb2YoVCkpIC8gc2l6ZW9mKFQpOwotICAgIGF1dG8gbmV3
QiA9IE1fYWxsb2NhdGUobmV3Q2FwKTsKLSAgICB0cnkgewotICAgICAgTV9yZWxvY2F0ZShuZXdC
KTsKLSAgICB9IGNhdGNoICguLi4pIHsKLSAgICAgIE1fZGVhbGxvY2F0ZShuZXdCLCBuZXdDYXAp
OwotICAgICAgdGhyb3c7Ci0gICAgfQotICAgIGlmIChpbXBsXy5iXykKLSAgICAgIE1fZGVhbGxv
Y2F0ZShpbXBsXy5iXywgc2l6ZV90eXBlKGltcGxfLnpfIC0gaW1wbF8uYl8pKTsKLSAgICBpbXBs
Xy56XyA9IG5ld0IgKyBuZXdDYXA7Ci0gICAgaW1wbF8uZV8gPSBuZXdCICsgKGltcGxfLmVfIC0g
aW1wbF8uYl8pOwotICAgIGltcGxfLmJfID0gbmV3QjsKLSAgfQotCi0gIHZvaWQgc2hyaW5rX3Rv
X2ZpdCgpIG5vZXhjZXB0IHsKLSAgICBpZiAoZW1wdHkoKSkgewotICAgICAgaW1wbF8ucmVzZXQo
KTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbnN0IG5ld0NhcGFjaXR5Qnl0
ZXMgPSBmb2xseTo6Z29vZE1hbGxvY1NpemUoc2l6ZSgpICogc2l6ZW9mKFQpKTsKLSAgICBhdXRv
IGNvbnN0IG5ld0NhcCA9IG5ld0NhcGFjaXR5Qnl0ZXMgLyBzaXplb2YoVCk7Ci0gICAgYXV0byBj
b25zdCBvbGRDYXAgPSBjYXBhY2l0eSgpOwotCi0gICAgaWYgKG5ld0NhcCA+PSBvbGRDYXApIHJl
dHVybjsKLQotICAgIHZvaWQqIHAgPSBpbXBsXy5iXzsKLSAgICAvLyB4YWxsb2N4KCkgd2lsbCBz
aHJpbmsgdG8gcHJlY2lzZWx5IG5ld0NhcGFjaXR5Qnl0ZXMgKHdoaWNoIHdhcyBnZW5lcmF0ZWQK
LSAgICAvLyBieSBnb29kTWFsbG9jU2l6ZSgpKSBpZiBpdCBzdWNjZXNzZnVsbHkgc2hyaW5rcyBp
biBwbGFjZS4KLSAgICBpZiAoKHVzaW5nSkVNYWxsb2MoKSAmJiB1c2luZ1N0ZEFsbG9jYXRvcjo6
dmFsdWUpICYmCi0gICAgICAgIG5ld0NhcGFjaXR5Qnl0ZXMgPj0gZm9sbHk6OmplbWFsbG9jTWlu
SW5QbGFjZUV4cGFuZGFibGUgJiYKLSAgICAgICAgeGFsbG9jeChwLCBuZXdDYXBhY2l0eUJ5dGVz
LCAwLCAwKSA9PSBuZXdDYXBhY2l0eUJ5dGVzKSB7Ci0gICAgICBpbXBsXy56XyArPSBuZXdDYXAg
LSBvbGRDYXA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFQqIG5ld0I7IC8vIGludGVudGlvbmFsbHkg
dW5pbml0aWFsaXplZAotICAgICAgdHJ5IHsKLSAgICAgICAgbmV3QiA9IE1fYWxsb2NhdGUobmV3
Q2FwKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBNX3JlbG9jYXRlKG5ld0IpOwotICAgICAg
ICB9IGNhdGNoICguLi4pIHsKLSAgICAgICAgICBNX2RlYWxsb2NhdGUobmV3QiwgbmV3Q2FwKTsK
LSAgICAgICAgICByZXR1cm47IC8vIHN3YWxsb3cgdGhlIGVycm9yCi0gICAgICAgIH0KLSAgICAg
IH0gY2F0Y2ggKC4uLikgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAoaW1w
bF8uYl8pCi0gICAgICAgIE1fZGVhbGxvY2F0ZShpbXBsXy5iXywgc2l6ZV90eXBlKGltcGxfLnpf
IC0gaW1wbF8uYl8pKTsKLSAgICAgIGltcGxfLnpfID0gbmV3QiArIG5ld0NhcDsKLSAgICAgIGlt
cGxfLmVfID0gbmV3QiArIChpbXBsXy5lXyAtIGltcGxfLmJfKTsKLSAgICAgIGltcGxfLmJfID0g
bmV3QjsKLSAgICB9Ci0gIH0KLQotcHJpdmF0ZToKLQotICBib29sIHJlc2VydmVfaW5fcGxhY2Uo
c2l6ZV90eXBlIG4pIHsKLSAgICBpZiAoIXVzaW5nU3RkQWxsb2NhdG9yOjp2YWx1ZSB8fCAhdXNp
bmdKRU1hbGxvYygpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBqZW1hbGxvYyBjYW4gbmV2ZXIg
Z3JvdyBpbiBwbGFjZSBibG9ja3Mgc21hbGxlciB0aGFuIDQwOTYgYnl0ZXMuCi0gICAgaWYgKChp
bXBsXy56XyAtIGltcGxfLmJfKSAqIHNpemVvZihUKSA8Ci0gICAgICBmb2xseTo6amVtYWxsb2NN
aW5JblBsYWNlRXhwYW5kYWJsZSkgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBjb25zdCBuZXdD
YXBhY2l0eUJ5dGVzID0gZm9sbHk6Omdvb2RNYWxsb2NTaXplKG4gKiBzaXplb2YoVCkpOwotICAg
IHZvaWQqIHAgPSBpbXBsXy5iXzsKLSAgICBpZiAoeGFsbG9jeChwLCBuZXdDYXBhY2l0eUJ5dGVz
LCAwLCAwKSA9PSBuZXdDYXBhY2l0eUJ5dGVzKSB7Ci0gICAgICBpbXBsXy56XyA9IGltcGxfLmJf
ICsgbmV3Q2FwYWNpdHlCeXRlcyAvIHNpemVvZihUKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLz09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBlbGVtZW50IGFjY2VzcwotcHVibGljOgotCi0gIHJl
ZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBuKSB7Ci0gICAgYXNzZXJ0KG4gPCBzaXplKCkp
OwotICAgIHJldHVybiBpbXBsXy5iX1tuXTsKLSAgfQotICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0
b3JbXShzaXplX3R5cGUgbikgY29uc3QgewotICAgIGFzc2VydChuIDwgc2l6ZSgpKTsKLSAgICBy
ZXR1cm4gaW1wbF8uYl9bbl07Ci0gIH0KLSAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBu
KSBjb25zdCB7Ci0gICAgaWYgKFVOTElLRUxZKG4gPj0gc2l6ZSgpKSkgewotICAgICAgc3RkOjpf
X3Rocm93X291dF9vZl9yYW5nZSgiZmJ2ZWN0b3I6IGluZGV4IGlzIGdyZWF0ZXIgdGhhbiBzaXpl
LiIpOwotICAgIH0KLSAgICByZXR1cm4gKCp0aGlzKVtuXTsKLSAgfQotICByZWZlcmVuY2UgYXQo
c2l6ZV90eXBlIG4pIHsKLSAgICBhdXRvIGNvbnN0JiBjVGhpcyA9ICp0aGlzOwotICAgIHJldHVy
biBjb25zdF9jYXN0PHJlZmVyZW5jZT4oY1RoaXMuYXQobikpOwotICB9Ci0gIHJlZmVyZW5jZSBm
cm9udCgpIHsKLSAgICBhc3NlcnQoIWVtcHR5KCkpOwotICAgIHJldHVybiAqaW1wbF8uYl87Ci0g
IH0KLSAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgewotICAgIGFzc2VydCghZW1wdHko
KSk7Ci0gICAgcmV0dXJuICppbXBsXy5iXzsKLSAgfQotICByZWZlcmVuY2UgYmFjaygpICB7Ci0g
ICAgYXNzZXJ0KCFlbXB0eSgpKTsKLSAgICByZXR1cm4gaW1wbF8uZV9bLTFdOwotICB9Ci0gIGNv
bnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgewotICAgIGFzc2VydCghZW1wdHkoKSk7Ci0gICAg
cmV0dXJuIGltcGxfLmVfWy0xXTsKLSAgfQotCi0gIC8vPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIGRhdGEgYWNjZXNzCi1wdWJsaWM6Ci0KLSAgVCogZGF0
YSgpIG5vZXhjZXB0IHsKLSAgICByZXR1cm4gaW1wbF8uYl87Ci0gIH0KLSAgY29uc3QgVCogZGF0
YSgpIGNvbnN0IG5vZXhjZXB0IHsKLSAgICByZXR1cm4gaW1wbF8uYl87Ci0gIH0KLQotICAvLz09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBtb2RpZmllcnMg
KGNvbW1vbikKLXB1YmxpYzoKLQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KLSAgdm9pZCBl
bXBsYWNlX2JhY2soQXJncyYmLi4uIGFyZ3MpICB7Ci0gICAgaWYgKGltcGxfLmVfICE9IGltcGxf
LnpfKSB7Ci0gICAgICBNX2NvbnN0cnVjdChpbXBsXy5lXywgc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKTsKLSAgICAgICsraW1wbF8uZV87Ci0gICAgfSBlbHNlIHsKLSAgICAgIGVtcGxhY2Vf
YmFja19hdXgoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICB9Ci0gIH0KLQotICB2
b2lkCi0gIHB1c2hfYmFjayhjb25zdCBUJiB2YWx1ZSkgewotICAgIGlmIChpbXBsXy5lXyAhPSBp
bXBsXy56XykgewotICAgICAgTV9jb25zdHJ1Y3QoaW1wbF8uZV8sIHZhbHVlKTsKLSAgICAgICsr
aW1wbF8uZV87Ci0gICAgfSBlbHNlIHsKLSAgICAgIGVtcGxhY2VfYmFja19hdXgodmFsdWUpOwot
ICAgIH0KLSAgfQotCi0gIHZvaWQKLSAgcHVzaF9iYWNrKFQmJiB2YWx1ZSkgewotICAgIGlmIChp
bXBsXy5lXyAhPSBpbXBsXy56XykgewotICAgICAgTV9jb25zdHJ1Y3QoaW1wbF8uZV8sIHN0ZDo6
bW92ZSh2YWx1ZSkpOwotICAgICAgKytpbXBsXy5lXzsKLSAgICB9IGVsc2UgewotICAgICAgZW1w
bGFjZV9iYWNrX2F1eChzdGQ6Om1vdmUodmFsdWUpKTsKLSAgICB9Ci0gIH0KLQotICB2b2lkIHBv
cF9iYWNrKCkgewotICAgIGFzc2VydCghZW1wdHkoKSk7Ci0gICAgLS1pbXBsXy5lXzsKLSAgICBN
X2Rlc3Ryb3koaW1wbF8uZV8pOwotICB9Ci0KLSAgdm9pZCBzd2FwKGZidmVjdG9yJiBvdGhlcikg
bm9leGNlcHQgewotICAgIGlmICghdXNpbmdTdGRBbGxvY2F0b3I6OnZhbHVlICYmCi0gICAgICAg
IEE6OnByb3BhZ2F0ZV9vbl9jb250YWluZXJfc3dhcDo6dmFsdWUpCi0gICAgICBzd2FwKGltcGxf
LCBvdGhlci5pbXBsXyk7Ci0gICAgZWxzZSBpbXBsXy5zd2FwRGF0YShvdGhlci5pbXBsXyk7Ci0g
IH0KLQotICB2b2lkIGNsZWFyKCkgbm9leGNlcHQgewotICAgIE1fZGVzdHJveV9yYW5nZV9lKGlt
cGxfLmJfKTsKLSAgfQotCi1wcml2YXRlOgotCi0gIC8vIHN0ZDo6dmVjdG9yIGltcGxlbWVudHMg
YSBzaW1pbGFyIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgZ3Jvd3RoCi0gIC8vICBzdHJhdGVn
eTogZW1wdHkoKSA/IDEgOiBjYXBhY2l0eSgpICogMi4KLSAgLy8KLSAgLy8gZmJ2ZWN0b3IgZ3Jv
d3MgZGlmZmVyZW50bHkgb24gdHdvIGNvdW50czoKLSAgLy8KLSAgLy8gKDEpIGluaXRpYWwgc2l6
ZQotICAvLyAgICAgSW5zdGVhZCBvZiBncm93aW5nIHRvIHNpemUgMSBmcm9tIGVtcHR5LCBmYnZl
Y3RvciBhbGxvY2F0ZXMgYXQgbGVhc3QKLSAgLy8gICAgIDY0IGJ5dGVzLiBZb3UgbWF5IHN0aWxs
IHVzZSByZXNlcnZlIHRvIHJlc2VydmUgYSBsZXNzZXIgYW1vdW50IG9mCi0gIC8vICAgICBtZW1v
cnkuCi0gIC8vICgyKSAxLjV4Ci0gIC8vICAgICBGb3IgbWVkaXVtLXNpemVkIHZlY3RvcnMsIHRo
ZSBncm93dGggc3RyYXRlZ3kgaXMgMS41eC4gU2VlIHRoZSBkb2NzCi0gIC8vICAgICBmb3IgZGV0
YWlscy4KLSAgLy8gICAgIFRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdmVyeSBzbWFsbCBvciB2ZXJ5
IGxhcmdlIGZidmVjdG9ycy4gVGhpcyBpcyBhCi0gIC8vICAgICBoZXVyaXN0aWMuCi0gIC8vICAg
ICBBIG5pY2UgYWRkaXRpb24gdG8gZmJ2ZWN0b3Igd291bGQgYmUgdGhlIGNhcGFiaWxpdHkgb2Yg
aGF2aW5nIGEgdXNlci0KLSAgLy8gICAgIGRlZmluZWQgZ3Jvd3RoIHN0cmF0ZWd5LCBwcm9iYWJs
eSBhcyBwYXJ0IG9mIHRoZSBhbGxvY2F0b3IuCi0gIC8vCi0KLSAgc2l6ZV90eXBlIGNvbXB1dGVQ
dXNoQmFja0NhcGFjaXR5KCkgY29uc3QgewotICAgIGlmIChjYXBhY2l0eSgpID09IDApIHsKLSAg
ICAgIHJldHVybiBzdGQ6Om1heCg2NCAvIHNpemVvZihUKSwgc2l6ZV90eXBlKDEpKTsKLSAgICB9
Ci0gICAgaWYgKGNhcGFjaXR5KCkgPCBmb2xseTo6amVtYWxsb2NNaW5JblBsYWNlRXhwYW5kYWJs
ZSAvIHNpemVvZihUKSkgewotICAgICAgcmV0dXJuIGNhcGFjaXR5KCkgKiAyOwotICAgIH0KLSAg
ICBpZiAoY2FwYWNpdHkoKSA+IDQwOTYgKiAzMiAvIHNpemVvZihUKSkgewotICAgICAgcmV0dXJu
IGNhcGFjaXR5KCkgKiAyOwotICAgIH0KLSAgICByZXR1cm4gKGNhcGFjaXR5KCkgKiAzICsgMSkg
LyAyOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci0gIHZvaWQgZW1wbGFjZV9i
YWNrX2F1eChBcmdzJiYuLi4gYXJncyk7Ci0KLSAgLy89PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gbW9kaWZpZXJzIChlcmFzZSkKLXB1YmxpYzoKLQotICBp
dGVyYXRvciBlcmFzZShjb25zdF9pdGVyYXRvciBwb3NpdGlvbikgewotICAgIHJldHVybiBlcmFz
ZShwb3NpdGlvbiwgcG9zaXRpb24gKyAxKTsKLSAgfQotCi0gIGl0ZXJhdG9yIGVyYXNlKGNvbnN0
X2l0ZXJhdG9yIGZpcnN0LCBjb25zdF9pdGVyYXRvciBsYXN0KSB7Ci0gICAgYXNzZXJ0KGlzVmFs
aWQoZmlyc3QpICYmIGlzVmFsaWQobGFzdCkpOwotICAgIGFzc2VydChmaXJzdCA8PSBsYXN0KTsK
LSAgICBpZiAoZmlyc3QgIT0gbGFzdCkgewotICAgICAgaWYgKGxhc3QgPT0gZW5kKCkpIHsKLSAg
ICAgICAgTV9kZXN0cm95X3JhbmdlX2UoKGl0ZXJhdG9yKWZpcnN0KTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChmb2xseTo6SXNSZWxvY2F0YWJsZTxUPjo6dmFsdWUgJiYgdXNpbmdTdGRB
bGxvY2F0b3I6OnZhbHVlKSB7Ci0gICAgICAgICAgRF9kZXN0cm95X3JhbmdlX2EoKGl0ZXJhdG9y
KWZpcnN0LCAoaXRlcmF0b3IpbGFzdCk7Ci0gICAgICAgICAgaWYgKGxhc3QgLSBmaXJzdCA+PSBj
ZW5kKCkgLSBsYXN0KSB7Ci0gICAgICAgICAgICBzdGQ6Om1lbWNweSgodm9pZCopZmlyc3QsICh2
b2lkKilsYXN0LCAoY2VuZCgpIC0gbGFzdCkgKiBzaXplb2YoVCkpOwotICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBzdGQ6Om1lbW1vdmUoKGl0ZXJhdG9yKWZpcnN0LCBsYXN0LCAoY2Vu
ZCgpIC0gbGFzdCkgKiBzaXplb2YoVCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpbXBsXy5l
XyAtPSAobGFzdCAtIGZpcnN0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzdGQ6OmNv
cHkoc3RkOjptYWtlX21vdmVfaXRlcmF0b3IoKGl0ZXJhdG9yKWxhc3QpLAotICAgICAgICAgICAg
ICAgICAgICBzdGQ6Om1ha2VfbW92ZV9pdGVyYXRvcihlbmQoKSksIChpdGVyYXRvcilmaXJzdCk7
Ci0gICAgICAgICAgYXV0byBuZXdFbmQgPSBpbXBsXy5lXyAtIHN0ZDo6ZGlzdGFuY2UoZmlyc3Qs
IGxhc3QpOwotICAgICAgICAgIE1fZGVzdHJveV9yYW5nZV9lKG5ld0VuZCk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChpdGVyYXRvcilmaXJzdDsKLSAgfQotCi0gIC8v
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIG1vZGlmaWVy
cyAoaW5zZXJ0KQotcHJpdmF0ZTogLy8gd2UgaGF2ZSB0aGUgcHJpdmF0ZSBzZWN0aW9uIGZpcnN0
IGJlY2F1c2UgaXQgZGVmaW5lcyBzb21lIG1hY3JvcwotCi0gIGJvb2wgaXNWYWxpZChjb25zdF9p
dGVyYXRvciBpdCkgewotICAgIHJldHVybiBjYmVnaW4oKSA8PSBpdCAmJiBpdCA8PSBjZW5kKCk7
Ci0gIH0KLQotICBzaXplX3R5cGUgY29tcHV0ZUluc2VydENhcGFjaXR5KHNpemVfdHlwZSBuKSB7
Ci0gICAgc2l6ZV90eXBlIG5jID0gc3RkOjptYXgoY29tcHV0ZVB1c2hCYWNrQ2FwYWNpdHkoKSwg
c2l6ZSgpICsgbik7Ci0gICAgc2l6ZV90eXBlIGFjID0gZm9sbHk6Omdvb2RNYWxsb2NTaXplKG5j
ICogc2l6ZW9mKFQpKSAvIHNpemVvZihUKTsKLSAgICByZXR1cm4gYWM7Ci0gIH0KLQotICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAvLwotICAvLyBtYWtlX3dpbmRvdyB0YWtlcyBhbiBmYnZlY3Rv
ciwgYW5kIGNyZWF0ZXMgYW4gdW5pbml0aWFsaXplZCBnYXAgKGEKLSAgLy8gIHdpbmRvdykgYXQg
dGhlIGdpdmVuIHBvc2l0aW9uLCBvZiB0aGUgZ2l2ZW4gc2l6ZS4gVGhlIGZidmVjdG9yIG11c3QK
LSAgLy8gIGhhdmUgZW5vdWdoIGNhcGFjaXR5LgotICAvLwotICAvLyBFeHBsYW5hdGlvbiBieSBw
aWN0dXJlLgotICAvLwotICAvLyAgICAxMjM0NTY3ODlfX19fX18KLSAgLy8gICAgICAgIF4KLSAg
Ly8gICAgICAgIG1ha2Vfd2luZG93IGhlcmUgb2Ygc2l6ZSAzCi0gIC8vCi0gIC8vICAgIDEyMzRf
X181Njc4OV9fXwotICAvLwotICAvLyBJZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBhbmQgdGhlIHdp
bmRvdyBtdXN0IGJlIGRlc3Ryb3llZCwgdXNlCi0gIC8vICB1bmRvX3dpbmRvdyB0byBwcm92aWRl
IGEgd2VhayBleGNlcHRpb24gZ3VhcmFudGVlLiBJdCBkZXN0cm95cwotICAvLyAgdGhlIHJpZ2h0
IGxlZGdlLgotICAvLwotICAvLyAgICAxMjM0X19fX19fX19fX18KLSAgLy8KLSAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgLy8KLSAgLy8gd3JhcF9mcmFtZSB0YWtlcyBhbiBpbnZlcnNlIHdpbmRv
dyBhbmQgcmVsb2NhdGVzIGFuIGZidmVjdG9yIGFyb3VuZCBpdC4KLSAgLy8gIFRoZSBmYnZlY3Rv
ciBtdXN0IGhhdmUgYXQgbGVhc3QgYXMgbWFueSBlbGVtZW50cyBhcyB0aGUgbGVmdCBsZWRnZS4K
LSAgLy8KLSAgLy8gRXhwbGFuYXRpb24gYnkgcGljdHVyZS4KLSAgLy8KLSAgLy8gICAgICAgIFNU
QVJUCi0gIC8vICAgIGZidmVjdG9yOiAgICAgICAgICAgICBpbnZlcnNlIHdpbmRvdzoKLSAgLy8g
ICAgMTIzNDU2Nzg5X19fX19fICAgICAgIF9fX19fYWJjZGVfX19fX19fCi0gIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICBbaWR4XVsgbiBdCi0gIC8vCi0gIC8vICAgICAgICBSRVNVTFQKLSAg
Ly8gICAgX19fX19fX19fX19fX19fICAgICAgIDEyMzQ1YWJjZGU2Nzg5X19fCi0gIC8vCi0gIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vCi0gIC8vIGluc2VydF91c2VfZnJlc2hfbWVtb3J5IHJl
dHVybnMgdHJ1ZSBpZmYgdGhlIGZidmVjdG9yIHNob3VsZCB1c2UgYSBmcmVzaAotICAvLyAgYmxv
Y2sgb2YgbWVtb3J5IGZvciB0aGUgaW5zZXJ0aW9uLiBJZiB0aGUgZmJ2ZWN0b3IgZG9lcyBub3Qg
aGF2ZSBlbm91Z2gKLSAgLy8gIHNwYXJlIGNhcGFjaXR5LCB0aGVuIGl0IG11c3QgcmV0dXJuIHRy
dWUuIE90aGVyd2lzZSBlaXRoZXIgdHJ1ZSBvciBmYWxzZQotICAvLyAgbWF5IGJlIHJldHVybmVk
LgotICAvLwotICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLwotICAvLyBUaGVzZSB0aHJlZSBm
dW5jdGlvbnMsIG1ha2Vfd2luZG93LCB3cmFwX2ZyYW1lLCBhbmQKLSAgLy8gIGluc2VydF91c2Vf
ZnJlc2hfbWVtb3J5LCBjYW4gYmUgY29tYmluZWQgaW50byBhIHVuaWZvcm0gaW50ZXJmYWNlLgot
ICAvLyBTaW5jZSB0aGF0IGludGVyZmFjZSBpbnZvbHZlcyBhIGxvdCBvZiBjYXNlLXdvcmssIGl0
IGlzIGJ1aWx0IGludG8KLSAgLy8gIHNvbWUgbWFjcm9zOiBGT0xMWV9GQlZFQ1RPUl9JTlNFUlRf
KFBSRXxTVEFSVHxUUll8RU5EKQotICAvLyBNYWNyb3MgYXJlIHVzZWQgaW4gYW4gYXR0ZW1wdCB0
byBsZXQgR0NDIHBlcmZvcm0gYmV0dGVyIG9wdGltaXphdGlvbnMsCi0gIC8vICBlc3BlY2lhbGx5
IGNvbnRyb2wgZmxvdyBvcHRpbWl6YXRpb24uCi0gIC8vCi0KLSAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgLy8gd2luZG93Ci0KLSAgdm9pZCBtYWtlX3dpbmRvdyhpdGVyYXRvciBwb3NpdGlvbiwg
c2l6ZV90eXBlIG4pIHsKLSAgICAvLyBUaGUgcmVzdWx0IGlzIGd1YXJhbnRlZWQgdG8gYmUgbm9u
LW5lZ2F0aXZlLCBzbyB1c2UgYW4gdW5zaWduZWQgdHlwZToKLSAgICBzaXplX3R5cGUgdGFpbCA9
IHNpemVfdHlwZShzdGQ6OmRpc3RhbmNlKHBvc2l0aW9uLCBpbXBsXy5lXykpOwotCi0gICAgaWYg
KHRhaWwgPD0gbikgewotICAgICAgcmVsb2NhdGVfbW92ZShwb3NpdGlvbiArIG4sIHBvc2l0aW9u
LCBpbXBsXy5lXyk7Ci0gICAgICByZWxvY2F0ZV9kb25lKHBvc2l0aW9uICsgbiwgcG9zaXRpb24s
IGltcGxfLmVfKTsKLSAgICAgIGltcGxfLmVfICs9IG47Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlm
IChmb2xseTo6SXNSZWxvY2F0YWJsZTxUPjo6dmFsdWUgJiYgdXNpbmdTdGRBbGxvY2F0b3I6OnZh
bHVlKSB7Ci0gICAgICAgIHN0ZDo6bWVtbW92ZShwb3NpdGlvbiArIG4sIHBvc2l0aW9uLCB0YWls
ICogc2l6ZW9mKFQpKTsKLSAgICAgICAgaW1wbF8uZV8gKz0gbjsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIERfdW5pbml0aWFsaXplZF9tb3ZlX2EoaW1wbF8uZV8sIGltcGxfLmVfIC0gbiwgaW1w
bF8uZV8pOwotICAgICAgICB0cnkgewotICAgICAgICAgIHN0ZDo6Y29weV9iYWNrd2FyZChzdGQ6
Om1ha2VfbW92ZV9pdGVyYXRvcihwb3NpdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bWFrZV9tb3ZlX2l0ZXJhdG9yKGltcGxfLmVfIC0gbiksIGltcGxfLmVfKTsKLSAg
ICAgICAgfSBjYXRjaCAoLi4uKSB7Ci0gICAgICAgICAgRF9kZXN0cm95X3JhbmdlX2EoaW1wbF8u
ZV8gLSBuLCBpbXBsXy5lXyArIG4pOwotICAgICAgICAgIGltcGxfLmVfIC09IG47Ci0gICAgICAg
ICAgdGhyb3c7Ci0gICAgICAgIH0KLSAgICAgICAgaW1wbF8uZV8gKz0gbjsKLSAgICAgICAgRF9k
ZXN0cm95X3JhbmdlX2EocG9zaXRpb24sIHBvc2l0aW9uICsgbik7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0KLSAgdm9pZCB1bmRvX3dpbmRvdyhpdGVyYXRvciBwb3NpdGlvbiwgc2l6ZV90eXBlIG4p
IG5vZXhjZXB0IHsKLSAgICBEX2Rlc3Ryb3lfcmFuZ2VfYShwb3NpdGlvbiArIG4sIGltcGxfLmVf
KTsKLSAgICBpbXBsXy5lXyA9IHBvc2l0aW9uOwotICB9Ci0KLSAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgLy8gZnJhbWUKLQotICB2b2lkIHdyYXBfZnJhbWUoVCogbGVkZ2UsIHNpemVfdHlwZSBp
ZHgsIHNpemVfdHlwZSBuKSB7Ci0gICAgYXNzZXJ0KHNpemUoKSA+PSBpZHgpOwotICAgIGFzc2Vy
dChuICE9IDApOwotCi0gICAgcmVsb2NhdGVfbW92ZShsZWRnZSwgaW1wbF8uYl8sIGltcGxfLmJf
ICsgaWR4KTsKLSAgICB0cnkgewotICAgICAgcmVsb2NhdGVfbW92ZShsZWRnZSArIGlkeCArIG4s
IGltcGxfLmJfICsgaWR4LCBpbXBsXy5lXyk7Ci0gICAgfSBjYXRjaCAoLi4uKSB7Ci0gICAgICBy
ZWxvY2F0ZV91bmRvKGxlZGdlLCBpbXBsXy5iXywgaW1wbF8uYl8gKyBpZHgpOwotICAgICAgdGhy
b3c7Ci0gICAgfQotICAgIHJlbG9jYXRlX2RvbmUobGVkZ2UsIGltcGxfLmJfLCBpbXBsXy5iXyAr
IGlkeCk7Ci0gICAgcmVsb2NhdGVfZG9uZShsZWRnZSArIGlkeCArIG4sIGltcGxfLmJfICsgaWR4
LCBpbXBsXy5lXyk7Ci0gIH0KLQotICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyB1c2UgZnJl
c2g/Ci0KLSAgYm9vbCBpbnNlcnRfdXNlX2ZyZXNoKGJvb2wgYXRfZW5kLCBzaXplX3R5cGUgbikg
ewotICAgIGlmIChhdF9lbmQpIHsKLSAgICAgIGlmIChzaXplKCkgKyBuIDw9IGNhcGFjaXR5KCkp
IHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChyZXNlcnZlX2luX3BsYWNlKHNpemUoKSArIG4pKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc2l6ZSgp
ICsgbiA+IGNhcGFjaXR5KCkpIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci0KLSAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gaW50ZXJmYWNlCi0KLSAgdGVtcGxhdGUg
PAotICAgICAgdHlwZW5hbWUgSXNJbnRlcm5hbEZ1bmMsCi0gICAgICB0eXBlbmFtZSBJbnNlcnRJ
bnRlcm5hbEZ1bmMsCi0gICAgICB0eXBlbmFtZSBDb25zdHJ1Y3RGdW5jLAotICAgICAgdHlwZW5h
bWUgRGVzdHJveUZ1bmM+Ci0gIGl0ZXJhdG9yIGRvX3JlYWxfaW5zZXJ0KAotICAgICAgY29uc3Rf
aXRlcmF0b3IgY3BvcywKLSAgICAgIHNpemVfdHlwZSBuLAotICAgICAgSXNJbnRlcm5hbEZ1bmMm
JiBpc0ludGVybmFsRnVuYywKLSAgICAgIEluc2VydEludGVybmFsRnVuYyYmIGluc2VydEludGVy
bmFsRnVuYywKLSAgICAgIENvbnN0cnVjdEZ1bmMmJiBjb25zdHJ1Y3RGdW5jLAotICAgICAgRGVz
dHJveUZ1bmMmJiBkZXN0cm95RnVuYykgewotICAgIGlmIChuID09IDApIHsKLSAgICAgIHJldHVy
biBpdGVyYXRvcihjcG9zKTsKLSAgICB9Ci0gICAgYm9vbCBhdF9lbmQgPSBjcG9zID09IGNlbmQo
KTsKLSAgICBib29sIGZyZXNoID0gaW5zZXJ0X3VzZV9mcmVzaChhdF9lbmQsIG4pOwotICAgIGlm
ICghYXRfZW5kKSB7Ci0gICAgICBpZiAoIWZyZXNoICYmIGlzSW50ZXJuYWxGdW5jKCkpIHsKLSAg
ICAgICAgLy8gY2hlY2sgZm9yIGludGVybmFsIGRhdGEgKHRlY2huaWNhbGx5IG5vdCByZXF1aXJl
ZCBieSB0aGUgc3RhbmRhcmQpCi0gICAgICAgIHJldHVybiBpbnNlcnRJbnRlcm5hbEZ1bmMoKTsK
LSAgICAgIH0KLSAgICAgIGFzc2VydChpc1ZhbGlkKGNwb3MpKTsKLSAgICB9Ci0gICAgVCogcG9z
aXRpb24gPSBjb25zdF9jYXN0PFQqPihjcG9zKTsKLSAgICBzaXplX3R5cGUgaWR4ID0gc2l6ZV90
eXBlKHN0ZDo6ZGlzdGFuY2UoaW1wbF8uYl8sIHBvc2l0aW9uKSk7Ci0gICAgVCogYjsKLSAgICBz
aXplX3R5cGUgbmV3Q2FwOyAvKiBpbnRlbnRpb25hbGx5IHVuaW5pdGlhbGl6ZWQgKi8KLQotICAg
IGlmIChmcmVzaCkgewotICAgICAgbmV3Q2FwID0gY29tcHV0ZUluc2VydENhcGFjaXR5KG4pOwot
ICAgICAgYiA9IE1fYWxsb2NhdGUobmV3Q2FwKTsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKCFh
dF9lbmQpIHsKLSAgICAgICAgbWFrZV93aW5kb3cocG9zaXRpb24sIG4pOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgaW1wbF8uZV8gKz0gbjsKLSAgICAgIH0KLSAgICAgIGIgPSBpbXBsXy5iXzsK
LSAgICB9Ci0KLSAgICBUKiBzdGFydCA9IGIgKyBpZHg7Ci0gICAgdHJ5IHsKLSAgICAgIC8vIGNv
bnN0cnVjdCB0aGUgaW5zZXJ0ZWQgZWxlbWVudHMKLSAgICAgIGNvbnN0cnVjdEZ1bmMoc3RhcnQp
OwotICAgIH0gY2F0Y2ggKC4uLikgewotICAgICAgaWYgKGZyZXNoKSB7Ci0gICAgICAgIE1fZGVh
bGxvY2F0ZShiLCBuZXdDYXApOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFhdF9lbmQp
IHsKLSAgICAgICAgICB1bmRvX3dpbmRvdyhwb3NpdGlvbiwgbik7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgaW1wbF8uZV8gLT0gbjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgdGhy
b3c7Ci0gICAgfQotCi0gICAgaWYgKGZyZXNoKSB7Ci0gICAgICB0cnkgewotICAgICAgICB3cmFw
X2ZyYW1lKGIsIGlkeCwgbik7Ci0gICAgICB9IGNhdGNoICguLi4pIHsKLSAgICAgICAgLy8gZGVs
ZXRlIHRoZSBpbnNlcnRlZCBlbGVtZW50cyAoZXhjZXB0aW9uIGhhcyBiZWVuIHRocm93bikKLSAg
ICAgICAgZGVzdHJveUZ1bmMoc3RhcnQpOwotICAgICAgICBNX2RlYWxsb2NhdGUoYiwgbmV3Q2Fw
KTsKLSAgICAgICAgdGhyb3c7Ci0gICAgICB9Ci0gICAgICBpZiAoaW1wbF8uYl8pIHsKLSAgICAg
ICAgTV9kZWFsbG9jYXRlKGltcGxfLmJfLCBjYXBhY2l0eSgpKTsKLSAgICAgIH0KLSAgICAgIGlt
cGxfLnNldChiLCBzaXplKCkgKyBuLCBuZXdDYXApOwotICAgICAgcmV0dXJuIGltcGxfLmJfICsg
aWR4OwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gcG9zaXRpb247Ci0gICAgfQotICB9Ci0K
LSBwdWJsaWM6Ci0gIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotICBpdGVyYXRvciBlbXBsYWNl
KGNvbnN0X2l0ZXJhdG9yIGNwb3MsIEFyZ3MmJi4uLiBhcmdzKSB7Ci0gICAgcmV0dXJuIGRvX3Jl
YWxfaW5zZXJ0KAotICAgICAgICBjcG9zLAotICAgICAgICAxLAotICAgICAgICBbJl0geyByZXR1
cm4gZmFsc2U7IH0sCi0gICAgICAgIFsmXSB7IHJldHVybiBpdGVyYXRvcnt9OyB9LAotICAgICAg
ICBbJl0oaXRlcmF0b3Igc3RhcnQpIHsKLSAgICAgICAgICBNX2NvbnN0cnVjdChzdGFydCwgc3Rk
Ojpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdKGl0ZXJh
dG9yIHN0YXJ0KSB7IE1fZGVzdHJveShzdGFydCk7IH0pOwotICB9Ci0KLSAgaXRlcmF0b3IgaW5z
ZXJ0KGNvbnN0X2l0ZXJhdG9yIGNwb3MsIGNvbnN0IFQmIHZhbHVlKSB7Ci0gICAgcmV0dXJuIGRv
X3JlYWxfaW5zZXJ0KAotICAgICAgICBjcG9zLAotICAgICAgICAxLAotICAgICAgICBbJl0geyBy
ZXR1cm4gZGF0YUlzSW50ZXJuYWwodmFsdWUpOyB9LAotICAgICAgICBbJl0geyByZXR1cm4gaW5z
ZXJ0KGNwb3MsIFQodmFsdWUpKTsgfSwKLSAgICAgICAgWyZdKGl0ZXJhdG9yIHN0YXJ0KSB7IE1f
Y29uc3RydWN0KHN0YXJ0LCB2YWx1ZSk7IH0sCi0gICAgICAgIFsmXShpdGVyYXRvciBzdGFydCkg
eyBNX2Rlc3Ryb3koc3RhcnQpOyB9KTsKLSAgfQotCi0gIGl0ZXJhdG9yIGluc2VydChjb25zdF9p
dGVyYXRvciBjcG9zLCBUJiYgdmFsdWUpIHsKLSAgICByZXR1cm4gZG9fcmVhbF9pbnNlcnQoCi0g
ICAgICAgIGNwb3MsCi0gICAgICAgIDEsCi0gICAgICAgIFsmXSB7IHJldHVybiBkYXRhSXNJbnRl
cm5hbCh2YWx1ZSk7IH0sCi0gICAgICAgIFsmXSB7IHJldHVybiBpbnNlcnQoY3BvcywgVChzdGQ6
Om1vdmUodmFsdWUpKSk7IH0sCi0gICAgICAgIFsmXShpdGVyYXRvciBzdGFydCkgeyBNX2NvbnN0
cnVjdChzdGFydCwgc3RkOjptb3ZlKHZhbHVlKSk7IH0sCi0gICAgICAgIFsmXShpdGVyYXRvciBz
dGFydCkgeyBNX2Rlc3Ryb3koc3RhcnQpOyB9KTsKLSAgfQotCi0gIGl0ZXJhdG9yIGluc2VydChj
b25zdF9pdGVyYXRvciBjcG9zLCBzaXplX3R5cGUgbiwgVlQgdmFsdWUpIHsKLSAgICByZXR1cm4g
ZG9fcmVhbF9pbnNlcnQoCi0gICAgICAgIGNwb3MsCi0gICAgICAgIG4sCi0gICAgICAgIFsmXSB7
IHJldHVybiBkYXRhSXNJbnRlcm5hbEFuZE5vdFZUKHZhbHVlKTsgfSwKLSAgICAgICAgWyZdIHsg
cmV0dXJuIGluc2VydChjcG9zLCBuLCBUKHZhbHVlKSk7IH0sCi0gICAgICAgIFsmXShpdGVyYXRv
ciBzdGFydCkgeyBEX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2Eoc3RhcnQsIG4sIHZhbHVlKTsgfSwK
LSAgICAgICAgWyZdKGl0ZXJhdG9yIHN0YXJ0KSB7IERfZGVzdHJveV9yYW5nZV9hKHN0YXJ0LCBz
dGFydCArIG4pOyB9KTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBJdCwgY2xhc3MgQ2F0ZWdv
cnkgPSB0eXBlbmFtZQotICAgICAgICAgICAgc3RkOjppdGVyYXRvcl90cmFpdHM8SXQ+OjppdGVy
YXRvcl9jYXRlZ29yeT4KLSAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIGNwb3MsIEl0
IGZpcnN0LCBJdCBsYXN0KSB7Ci0gICAgcmV0dXJuIGluc2VydChjcG9zLCBmaXJzdCwgbGFzdCwg
Q2F0ZWdvcnkoKSk7Ci0gIH0KLQotICBpdGVyYXRvciBpbnNlcnQoY29uc3RfaXRlcmF0b3IgY3Bv
cywgc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGlsKSB7Ci0gICAgcmV0dXJuIGluc2VydChjcG9z
LCBpbC5iZWdpbigpLCBpbC5lbmQoKSk7Ci0gIH0KLQotICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAvLyBpbnNlcnQgZGlzcGF0Y2ggZm9yIGl0ZXJhdG9yIHR5cGVzCi1wcml2YXRlOgotCi0gIHRl
bXBsYXRlIDxjbGFzcyBGSXQ+Ci0gIGl0ZXJhdG9yIGluc2VydChjb25zdF9pdGVyYXRvciBjcG9z
LCBGSXQgZmlyc3QsIEZJdCBsYXN0LAotICAgICAgICAgICAgICAgICAgc3RkOjpmb3J3YXJkX2l0
ZXJhdG9yX3RhZykgewotICAgIHNpemVfdHlwZSBuID0gc2l6ZV90eXBlKHN0ZDo6ZGlzdGFuY2Uo
Zmlyc3QsIGxhc3QpKTsKLSAgICByZXR1cm4gZG9fcmVhbF9pbnNlcnQoCi0gICAgICAgIGNwb3Ms
Ci0gICAgICAgIG4sCi0gICAgICAgIFsmXSB7IHJldHVybiBmYWxzZTsgfSwKLSAgICAgICAgWyZd
IHsgcmV0dXJuIGl0ZXJhdG9ye307IH0sCi0gICAgICAgIFsmXShpdGVyYXRvciBzdGFydCkgeyBE
X3VuaW5pdGlhbGl6ZWRfY29weV9hKHN0YXJ0LCBmaXJzdCwgbGFzdCk7IH0sCi0gICAgICAgIFsm
XShpdGVyYXRvciBzdGFydCkgeyBEX2Rlc3Ryb3lfcmFuZ2VfYShzdGFydCwgc3RhcnQgKyBuKTsg
fSk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgSUl0PgotICBpdGVyYXRvciBpbnNlcnQoY29u
c3RfaXRlcmF0b3IgY3BvcywgSUl0IGZpcnN0LCBJSXQgbGFzdCwKLSAgICAgICAgICAgICAgICAg
IHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKSB7Ci0gICAgVCogcG9zaXRpb24gPSBjb25zdF9jYXN0
PFQqPihjcG9zKTsKLSAgICBhc3NlcnQoaXNWYWxpZChwb3NpdGlvbikpOwotICAgIHNpemVfdHlw
ZSBpZHggPSBzdGQ6OmRpc3RhbmNlKGJlZ2luKCksIHBvc2l0aW9uKTsKLQotICAgIGZidmVjdG9y
IHN0b3JhZ2Uoc3RkOjptYWtlX21vdmVfaXRlcmF0b3IocG9zaXRpb24pLAotICAgICAgICAgICAg
ICAgICAgICAgc3RkOjptYWtlX21vdmVfaXRlcmF0b3IoZW5kKCkpLAotICAgICAgICAgICAgICAg
ICAgICAgQTo6c2VsZWN0X29uX2NvbnRhaW5lcl9jb3B5X2NvbnN0cnVjdGlvbihpbXBsXykpOwot
ICAgIE1fZGVzdHJveV9yYW5nZV9lKHBvc2l0aW9uKTsKLSAgICBmb3IgKDsgZmlyc3QgIT0gbGFz
dDsgKytmaXJzdCkgZW1wbGFjZV9iYWNrKCpmaXJzdCk7Ci0gICAgaW5zZXJ0KGNlbmQoKSwgc3Rk
OjptYWtlX21vdmVfaXRlcmF0b3Ioc3RvcmFnZS5iZWdpbigpKSwKLSAgICAgICAgICAgc3RkOjpt
YWtlX21vdmVfaXRlcmF0b3Ioc3RvcmFnZS5lbmQoKSkpOwotICAgIHJldHVybiBpbXBsXy5iXyAr
IGlkeDsKLSAgfQotCi0gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gIC8vIGxleGljb2dyYXBoaWNhbCBmdW5jdGlvbnMKLXB1YmxpYzoKLQotICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgZmJ2ZWN0b3ImIG90aGVyKSBjb25zdCB7Ci0gICAgcmV0dXJuIHNpemUo
KSA9PSBvdGhlci5zaXplKCkgJiYgc3RkOjplcXVhbChiZWdpbigpLCBlbmQoKSwgb3RoZXIuYmVn
aW4oKSk7Ci0gIH0KLQotICBib29sIG9wZXJhdG9yIT0oY29uc3QgZmJ2ZWN0b3ImIG90aGVyKSBj
b25zdCB7Ci0gICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICB9Ci0KLSAgYm9vbCBvcGVy
YXRvcjwoY29uc3QgZmJ2ZWN0b3ImIG90aGVyKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0ZDo6bGV4
aWNvZ3JhcGhpY2FsX2NvbXBhcmUoCi0gICAgICBiZWdpbigpLCBlbmQoKSwgb3RoZXIuYmVnaW4o
KSwgb3RoZXIuZW5kKCkpOwotICB9Ci0KLSAgYm9vbCBvcGVyYXRvcj4oY29uc3QgZmJ2ZWN0b3Im
IG90aGVyKSBjb25zdCB7Ci0gICAgcmV0dXJuIG90aGVyIDwgKnRoaXM7Ci0gIH0KLQotICBib29s
IG9wZXJhdG9yPD0oY29uc3QgZmJ2ZWN0b3ImIG90aGVyKSBjb25zdCB7Ci0gICAgcmV0dXJuICEo
KnRoaXMgPiBvdGhlcik7Ci0gIH0KLQotICBib29sIG9wZXJhdG9yPj0oY29uc3QgZmJ2ZWN0b3Im
IG90aGVyKSBjb25zdCB7Ci0gICAgcmV0dXJuICEoKnRoaXMgPCBvdGhlcik7Ci0gIH0KLQotICAv
Lz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBmcmllbmRz
Ci1wcml2YXRlOgotCi0gIHRlbXBsYXRlIDxjbGFzcyBfVCwgY2xhc3MgX0E+Ci0gIGZyaWVuZCBf
VCogcmVsaW5xdWlzaChmYnZlY3RvcjxfVCwgX0E+Jik7Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIF9U
LCBjbGFzcyBfQT4KLSAgZnJpZW5kIHZvaWQgYXR0YWNoKGZidmVjdG9yPF9ULCBfQT4mLCBfVCog
ZGF0YSwgc2l6ZV90IHN6LCBzaXplX3QgY2FwKTsKLQotfTsgLy8gY2xhc3MgZmJ2ZWN0b3IKLQot
Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBvdXRs
aW5lZCBmdW5jdGlvbnMgKGdjYywgeW91IGZpbmlja3kgY29tcGlsZXIgeW91KQotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxsb2NhdG9yPgotdGVtcGxhdGUgPGNsYXNzLi4uIEFy
Z3M+Ci12b2lkIGZidmVjdG9yPFQsIEFsbG9jYXRvcj46OmVtcGxhY2VfYmFja19hdXgoQXJncyYm
Li4uIGFyZ3MpIHsKLSAgc2l6ZV90eXBlIGJ5dGVfc3ogPSBmb2xseTo6Z29vZE1hbGxvY1NpemUo
Ci0gICAgY29tcHV0ZVB1c2hCYWNrQ2FwYWNpdHkoKSAqIHNpemVvZihUKSk7Ci0gIGlmICh1c2lu
Z1N0ZEFsbG9jYXRvcjo6dmFsdWUKLSAgICAgICYmIHVzaW5nSkVNYWxsb2MoKQotICAgICAgJiYg
KChpbXBsXy56XyAtIGltcGxfLmJfKSAqIHNpemVvZihUKSA+PQotICAgICAgICAgIGZvbGx5Ojpq
ZW1hbGxvY01pbkluUGxhY2VFeHBhbmRhYmxlKSkgewotICAgIC8vIFRyeSB0byByZXNlcnZlIGlu
IHBsYWNlLgotICAgIC8vIEFzayB4YWxsb2N4IHRvIGFsbG9jYXRlIGluIHBsYWNlIGF0IGxlYXN0
IHNpemUoKSsxIGFuZCBhdCBtb3N0IHN6IHNwYWNlLgotICAgIC8vIHhhbGxvY3ggd2lsbCBhbGxv
Y2F0ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpdGhpbiB0aGF0IHJhbmdlLCB3aGljaAotICAgIC8v
ICBpcyB0aGUgYmVzdCBwb3NzaWJsZSBvdXRjb21lOiBpZiBzeiBzcGFjZSBpcyBhdmFpbGFibGUs
IHRha2UgaXQgYWxsLAotICAgIC8vICBvdGhlcndpc2UgdGFrZSBhcyBtdWNoIGFzIHBvc3NpYmxl
LiBJZiBub3RoaW5nIGlzIGF2YWlsYWJsZSwgdGhlbiBmYWlsLgotICAgIC8vIEluIHRoaXMgZmFz
aGlvbiwgd2UgbmV2ZXIgcmVsb2NhdGUgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSBvZgotICAg
IC8vICBleHBhbmRpbmcgaW4gcGxhY2UsIGFuZCB3ZSBuZXZlciByZWFsbG9jYXRlIGJ5IGxlc3Mg
dGhhbiB0aGUgZGVzaXJlZAotICAgIC8vICBhbW91bnQgdW5sZXNzIHdlIGNhbm5vdCBleHBhbmQg
ZnVydGhlci4gSGVuY2Ugd2Ugd2lsbCBub3QgcmVhbGxvY2F0ZQotICAgIC8vICBzdWItb3B0aW1h
bGx5IHR3aWNlIGluIGEgcm93IChtb2R1bG8gdGhlIGJsb2NraW5nIG1lbW9yeSBiZWluZyBmcmVl
ZCkuCi0gICAgc2l6ZV90eXBlIGxvd2VyID0gZm9sbHk6Omdvb2RNYWxsb2NTaXplKHNpemVvZihU
KSArIHNpemUoKSAqIHNpemVvZihUKSk7Ci0gICAgc2l6ZV90eXBlIHVwcGVyID0gYnl0ZV9zejsK
LSAgICBzaXplX3R5cGUgZXh0cmEgPSB1cHBlciAtIGxvd2VyOwotCi0gICAgdm9pZCogcCA9IGlt
cGxfLmJfOwotICAgIHNpemVfdCBhY3R1YWw7Ci0KLSAgICBpZiAoKGFjdHVhbCA9IHhhbGxvY3go
cCwgbG93ZXIsIGV4dHJhLCAwKSkgPj0gbG93ZXIpIHsKLSAgICAgIGltcGxfLnpfID0gaW1wbF8u
Yl8gKyBhY3R1YWwgLyBzaXplb2YoVCk7Ci0gICAgICBNX2NvbnN0cnVjdChpbXBsXy5lXywgc3Rk
Ojpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICsraW1wbF8uZV87Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICB9Ci0KLSAgLy8gUmVhbGxvY2F0aW9uIGZhaWxlZC4gUGVyZm9ybSBhIG1h
bnVhbCByZWxvY2F0aW9uLgotICBzaXplX3R5cGUgc3ogPSBieXRlX3N6IC8gc2l6ZW9mKFQpOwot
ICBhdXRvIG5ld0IgPSBNX2FsbG9jYXRlKHN6KTsKLSAgYXV0byBuZXdFID0gbmV3QiArIHNpemUo
KTsKLSAgdHJ5IHsKLSAgICBpZiAoZm9sbHk6OklzUmVsb2NhdGFibGU8VD46OnZhbHVlICYmIHVz
aW5nU3RkQWxsb2NhdG9yOjp2YWx1ZSkgewotICAgICAgLy8gRm9yIGxpbmVhciBtZW1vcnkgYWNj
ZXNzLCByZWxvY2F0ZSBiZWZvcmUgY29uc3RydWN0aW9uLgotICAgICAgLy8gQnkgdGhlIHRlc3Qg
Y29uZGl0aW9uLCByZWxvY2F0ZSBpcyBub2V4Y2VwdC4KLSAgICAgIC8vIE5vdGUgdGhhdCB0aGVy
ZSBpcyBubyBjbGVhbnVwIHRvIGRvIGlmIE1fY29uc3RydWN0IHRocm93cyAtIHRoYXQncwotICAg
ICAgLy8gIG9uZSBvZiB0aGUgYmVhdXRpZXMgb2YgcmVsb2NhdGlvbi4KLSAgICAgIC8vIEJlbmNo
bWFya3MgZm9yIHRoaXMgY29kZSBoYXZlIGhpZ2ggdmFyaWFuY2UsIGFuZCBzZWVtIHRvIGJlIGNs
b3NlLgotICAgICAgcmVsb2NhdGVfbW92ZShuZXdCLCBpbXBsXy5iXywgaW1wbF8uZV8pOwotICAg
ICAgTV9jb25zdHJ1Y3QobmV3RSwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAg
ICsrbmV3RTsKLSAgICB9IGVsc2UgewotICAgICAgTV9jb25zdHJ1Y3QobmV3RSwgc3RkOjpmb3J3
YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICsrbmV3RTsKLSAgICAgIHRyeSB7Ci0gICAgICAg
IE1fcmVsb2NhdGUobmV3Qik7Ci0gICAgICB9IGNhdGNoICguLi4pIHsKLSAgICAgICAgTV9kZXN0
cm95KG5ld0UgLSAxKTsKLSAgICAgICAgdGhyb3c7Ci0gICAgICB9Ci0gICAgfQotICB9IGNhdGNo
ICguLi4pIHsKLSAgICBNX2RlYWxsb2NhdGUobmV3Qiwgc3opOwotICAgIHRocm93OwotICB9Ci0g
IGlmIChpbXBsXy5iXykgTV9kZWFsbG9jYXRlKGltcGxfLmJfLCBzaXplKCkpOwotICBpbXBsXy5i
XyA9IG5ld0I7Ci0gIGltcGxfLmVfID0gbmV3RTsKLSAgaW1wbF8uel8gPSBuZXdCICsgc3o7Ci19
Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHNw
ZWNpYWxpemVkIGZ1bmN0aW9ucwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQT4KLXZvaWQg
c3dhcChmYnZlY3RvcjxULCBBPiYgbGhzLCBmYnZlY3RvcjxULCBBPiYgcmhzKSBub2V4Y2VwdCB7
Ci0gIGxocy5zd2FwKHJocyk7Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLS8vIG90aGVyCi0KLW5hbWVzcGFjZSBkZXRhaWwgewotCi0vLyBGb3Jt
YXQgc3VwcG9ydC4KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBPgotc3RydWN0IEluZGV4YWJs
ZVRyYWl0czxmYnZlY3RvcjxULCBBPj4KLSAgOiBwdWJsaWMgSW5kZXhhYmxlVHJhaXRzU2VxPGZi
dmVjdG9yPFQsIEE+PiB7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLXRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBBPgotdm9pZCBjb21wYWN0UmVzaXplKGZidmVjdG9yPFQsIEE+KiB2
LCBzaXplX3Qgc3opIHsKLSAgdi0+cmVzaXplKHN6KTsKLSAgdi0+c2hyaW5rX3RvX2ZpdCgpOwot
fQotCi0vLyBEQU5HRVIKLS8vCi0vLyByZWxpbnF1aXNoIGFuZCBhdHRhY2ggYXJlIG5vdCBhIG1l
bWJlcnMgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IHNvIHRoYXQgaXQgaXMKLS8vICBhd2t3YXJkIHRv
IGNhbGwgdGhlbS4gSXQgaXMgdmVyeSBlYXN5IHRvIHNob290IHlvdXJzZWxmIGluIHRoZSBmb290
IHdpdGgKLS8vICB0aGVzZSBmdW5jdGlvbnMuCi0vLwotLy8gSWYgeW91IGNhbGwgcmVsaW5xdWlz
aCwgdGhlbiBpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdGhlIGRhdGEKLS8vICBh
bmQgdGhlIHN0b3JhZ2UsIGJvdGggb2Ygd2hpY2ggbWF5IGhhdmUgYmVlbiBnZW5lcmF0ZWQgaW4g
YSBub24tc3RhbmRhcmQKLS8vICB3YXkgdGhyb3VnaCB0aGUgZmJ2ZWN0b3IncyBhbGxvY2F0b3Iu
Ci0vLwotLy8gSWYgeW91IGNhbGwgYXR0YWNoLCBpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRv
IGVuc3VyZSB0aGF0IHRoZSBmYnZlY3RvcgotLy8gIGlzIGZyZXNoIChzaXplIGFuZCBjYXBhY2l0
eSBib3RoIHplcm8pLCBhbmQgdGhhdCB0aGUgc3VwcGxpZWQgZGF0YSBpcwotLy8gIGNhcGFibGUg
b2YgYmVpbmcgbWFuaXB1bGF0ZWQgYnkgdGhlIGFsbG9jYXRvci4KLS8vIEl0IGlzIGFjY2VwdGFi
bGUgdG8gc3VwcGx5IGEgc3RhY2sgcG9pbnRlciBJRjoKLS8vICAoMSkgVGhlIHZlY3RvcidzIGRh
dGEgZG9lcyBub3Qgb3V0bGl2ZSB0aGUgc3RhY2sgcG9pbnRlci4gVGhpcyBpbmNsdWRlcwotLy8g
ICAgICBleHRlbnNpb24gb2YgdGhlIGRhdGEncyBsaWZlIHRocm91Z2ggYSBtb3ZlIG9wZXJhdGlv
bi4KLS8vICAoMikgVGhlIHBvaW50ZXIgaGFzIGVub3VnaCBjYXBhY2l0eSB0aGF0IHRoZSB2ZWN0
b3Igd2lsbCBuZXZlciBiZQotLy8gICAgICByZWxvY2F0ZWQuCi0vLyAgKDMpIEluc2VydCBpcyBu
b3QgY2FsbGVkIG9uIHRoZSB2ZWN0b3I7IHRoZXNlIGZ1bmN0aW9ucyBoYXZlIGxlZXdheSB0bwot
Ly8gICAgICByZWxvY2F0ZSB0aGUgdmVjdG9yIGV2ZW4gaWYgdGhlcmUgaXMgZW5vdWdoIGNhcGFj
aXR5LgotLy8gICg0KSBBIHN0YWNrIHBvaW50ZXIgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBmYnZl
Y3RvcidzIGFsbG9jYXRvci4KLS8vCi0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBPgotVCog
cmVsaW5xdWlzaChmYnZlY3RvcjxULCBBPiYgdikgewotICBUKiByZXQgPSB2LmRhdGEoKTsKLSAg
di5pbXBsXy5iXyA9IHYuaW1wbF8uZV8gPSB2LmltcGxfLnpfID0gbnVsbHB0cjsKLSAgcmV0dXJu
IHJldDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEE+Ci12b2lkIGF0dGFjaChmYnZl
Y3RvcjxULCBBPiYgdiwgVCogZGF0YSwgc2l6ZV90IHN6LCBzaXplX3QgY2FwKSB7Ci0gIGFzc2Vy
dCh2LmRhdGEoKSA9PSBudWxscHRyKTsKLSAgdi5pbXBsXy5iXyA9IGRhdGE7Ci0gIHYuaW1wbF8u
ZV8gPSBkYXRhICsgc3o7Ci0gIHYuaW1wbF8uel8gPSBkYXRhICsgY2FwOwotfQotCi19IC8vIG5h
bWVzcGFjZSBmb2xseQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvRmlsZS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Zm9sbHkvRmlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjY2MjA5NjBiNmUz
YmIzNmUzNTRhNmY0NDE3YTkzOTJmOWNhMjVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Zv
bGx5L0ZpbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3
dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVk
IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICog
ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT
IiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlv
bnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxm
Y250bC5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0K
LSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8c3lzdGVtX2Vycm9yPgotCi0jaW5jbHVkZSA8
Zm9sbHkvRXhjZXB0aW9uV3JhcHBlci5oPgotI2luY2x1ZGUgPGZvbGx5L0V4cGVjdGVkLmg+Ci0j
aW5jbHVkZSA8Zm9sbHkvUG9ydGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxmb2xseS9SYW5nZS5oPgot
I2luY2x1ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L1VuaXN0ZC5oPgotCi1uYW1lc3BhY2UgZm9sbHkg
ewotCi0vKioKLSAqIEEgRmlsZSByZXByZXNlbnRzIGFuIG9wZW4gZmlsZS4KLSAqLwotY2xhc3Mg
RmlsZSB7Ci0gcHVibGljOgotICAvKioKLSAgICogQ3JlYXRlcyBhbiBlbXB0eSBGaWxlIG9iamVj
dCwgZm9yIGxhdGUgaW5pdGlhbGl6YXRpb24uCi0gICAqLwotICBGaWxlKCkgbm9leGNlcHQ7Ci0K
LSAgLyoqCi0gICAqIENyZWF0ZSBhIEZpbGUgb2JqZWN0IGZyb20gYW4gZXhpc3RpbmcgZmlsZSBk
ZXNjcmlwdG9yLgotICAgKiBUYWtlcyBvd25lcnNoaXAgb2YgdGhlIGZpbGUgZGVzY3JpcHRvciBp
ZiBvd25zRmQgaXMgdHJ1ZS4KLSAgICovCi0gIGV4cGxpY2l0IEZpbGUoaW50IGZkLCBib29sIG93
bnNGZCA9IGZhbHNlKSBub2V4Y2VwdDsKLQotICAvKioKLSAgICogT3BlbiBhbmQgY3JlYXRlIGEg
ZmlsZSBvYmplY3QuICBUaHJvd3Mgb24gZXJyb3IuCi0gICAqLwotICBleHBsaWNpdCBGaWxlKGNv
bnN0IGNoYXIqIG5hbWUsIGludCBmbGFncyA9IE9fUkRPTkxZLCBtb2RlX3QgbW9kZSA9IDA2NjYp
OwotICBleHBsaWNpdCBGaWxlKAotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGludCBm
bGFncyA9IE9fUkRPTkxZLCBtb2RlX3QgbW9kZSA9IDA2NjYpOwotICBleHBsaWNpdCBGaWxlKFN0
cmluZ1BpZWNlIG5hbWUsIGludCBmbGFncyA9IE9fUkRPTkxZLCBtb2RlX3QgbW9kZSA9IDA2NjYp
OwotCi0gIC8qKgotICAgKiBBbGwgdGhlIGNvbnN0cnVjdG9ycyB0aGF0IGFyZSBub3Qgbm9leGNl
cHQgY2FuIHRocm93IHN0ZDo6c3lzdGVtX2Vycm9yLgotICAgKiBUaGlzIGlzIGEgaGVscGVyIG1l
dGhvZCB0byB1c2UgZm9sbHk6OkV4cGVjdGVkIHRvIGNoYWluIGEgZmlsZSBvcGVuIGV2ZW50Ci0g
ICAqIHRvIHNvbWV0aGluZyBlbHNlIHlvdSB3YW50IHRvIGRvIHdpdGggdGhlIG9wZW4gZmQuCi0g
ICAqLwotICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KLSAgc3RhdGljIEV4cGVjdGVkPEZp
bGUsIGV4Y2VwdGlvbl93cmFwcGVyPiBtYWtlRmlsZShBcmdzJiYuLi4gYXJncykgbm9leGNlcHQg
ewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gRmlsZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncyku
Li4pOwotICAgIH0gY2F0Y2ggKGNvbnN0IHN0ZDo6c3lzdGVtX2Vycm9yJiBzZSkgewotICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGV4Y2VwdGlvbl93cmFwcGVyKHN0ZDo6Y3VycmVudF9leGNl
cHRpb24oKSwgc2UpKTsKLSAgICB9Ci0gIH0KLQotICB+RmlsZSgpOwotCi0gIC8qKgotICAgKiBD
cmVhdGUgYW5kIHJldHVybiBhIHRlbXBvcmFyeSwgb3duZWQgZmlsZSAodXNlcyB0bXBmaWxlKCkp
LgotICAgKi8KLSAgc3RhdGljIEZpbGUgdGVtcG9yYXJ5KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVy
biB0aGUgZmlsZSBkZXNjcmlwdG9yLCBvciAtMSBpZiB0aGUgZmlsZSB3YXMgY2xvc2VkLgotICAg
Ki8KLSAgaW50IGZkKCkgY29uc3QgeyByZXR1cm4gZmRfOyB9Ci0KLSAgLyoqCi0gICAqIFJldHVy
bnMgJ3RydWUnIGlmZiB0aGUgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZC4KLSAgICovCi0g
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZkXyAhPSAtMTsK
LSAgfQotCi0gIC8qKgotICAgKiBEdXBsaWNhdGUgZmlsZSBkZXNjcmlwdG9yIGFuZCByZXR1cm4g
RmlsZSB0aGF0IG93bnMgaXQuCi0gICAqLwotICBGaWxlIGR1cCgpIGNvbnN0OwotCi0gIC8qKgot
ICAgKiBJZiB3ZSBvd24gdGhlIGZpbGUgZGVzY3JpcHRvciwgY2xvc2UgdGhlIGZpbGUgYW5kIHRo
cm93IG9uIGVycm9yLgotICAgKiBPdGhlcndpc2UsIGRvIG5vdGhpbmcuCi0gICAqLwotICB2b2lk
IGNsb3NlKCk7Ci0KLSAgLyoqCi0gICAqIENsb3NlcyB0aGUgZmlsZSAoaWYgb3duZWQpLiAgUmV0
dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIChhbmQgc2V0cwotICAgKiBlcnJubykgb24gZXJy
b3IuCi0gICAqLwotICBib29sIGNsb3NlTm9UaHJvdygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5z
IGFuZCByZWxlYXNlcyB0aGUgZmlsZSBkZXNjcmlwdG9yOyBubyBsb25nZXIgb3duZWQgYnkgdGhp
cyBGaWxlLgotICAgKiBSZXR1cm5zIC0xIGlmIHRoZSBGaWxlIG9iamVjdCBkaWRuJ3Qgd3JhcCBh
IGZpbGUuCi0gICAqLwotICBpbnQgcmVsZWFzZSgpIG5vZXhjZXB0OwotCi0gIC8qKgotICAgKiBT
d2FwIHRoaXMgRmlsZSB3aXRoIGFub3RoZXIuCi0gICAqLwotICB2b2lkIHN3YXAoRmlsZSYgb3Ro
ZXIpOwotCi0gIC8vIG1vdmFibGUKLSAgRmlsZShGaWxlJiYpIG5vZXhjZXB0OwotICBGaWxlJiBv
cGVyYXRvcj0oRmlsZSYmKTsKLQotICAvLyBGTE9DSyAoSU5URVJQUk9DRVNTKSBMT0NLUwotICAv
LwotICAvLyBOT1RFIFRIQVQgVEhFU0UgTE9DS1MgQVJFIGZsb2NrKCkgTE9DS1MuICBUaGF0IGlz
LCB0aGV5IG1heSBvbmx5IGJlIHVzZWQKLSAgLy8gZm9yIGludGVyLXByb2Nlc3Mgc3luY2hyb25p
emF0aW9uIC0tIGFuIGF0dGVtcHQgdG8gYWNxdWlyZSBhIHNlY29uZCBsb2NrCi0gIC8vIG9uIHRo
ZSBzYW1lIGZpbGUgZGVzY3JpcHRvciBmcm9tIHRoZSBzYW1lIHByb2Nlc3MgbWF5IHN1Y2NlZWQu
ICBBdHRlbXB0aW5nCi0gIC8vIHRvIGFjcXVpcmUgYSBzZWNvbmQgbG9jayBvbiBhIGRpZmZlcmVu
dCBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBzYW1lIGZpbGUKLSAgLy8gc2hvdWxkIGZhaWwsIGJ1
dCBzb21lIHN5c3RlbXMgbWlnaHQgaW1wbGVtZW50IGZsb2NrKCkgdXNpbmcgZmNudGwoKSBsb2Nr
cywKLSAgLy8gaW4gd2hpY2ggY2FzZSBpdCB3aWxsIHN1Y2NlZWQuCi0gIHZvaWQgbG9jaygpOwot
ICBib29sIHRyeV9sb2NrKCk7Ci0gIHZvaWQgdW5sb2NrKCk7Ci0KLSAgdm9pZCBsb2NrX3NoYXJl
ZCgpOwotICBib29sIHRyeV9sb2NrX3NoYXJlZCgpOwotICB2b2lkIHVubG9ja19zaGFyZWQoKTsK
LQotIHByaXZhdGU6Ci0gIHZvaWQgZG9Mb2NrKGludCBvcCk7Ci0gIGJvb2wgZG9UcnlMb2NrKGlu
dCBvcCk7Ci0KLSAgLy8gdW5pcXVlCi0gIEZpbGUoY29uc3QgRmlsZSYpID0gZGVsZXRlOwotICBG
aWxlJiBvcGVyYXRvcj0oY29uc3QgRmlsZSYpID0gZGVsZXRlOwotCi0gIGludCBmZF87Ci0gIGJv
b2wgb3duc0ZkXzsKLX07Ci0KLXZvaWQgc3dhcChGaWxlJiBhLCBGaWxlJiBiKTsKLQotCi19ICAv
LyBuYW1lc3BhY2UgZm9sbHkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2ZvbGx5L0ZpbGVVdGlsLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9mb2xseS9GaWxlVXRpbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
MjdlMjQ5YWY0ZTI3MjdkNWExYzIwYjA5M2VkMWFlZTA5YzgzOTNkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2ZvbGx5L0ZpbGVVdGlsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNTUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0g
KiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAq
Ci0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAq
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotI2lu
Y2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8bGltaXRzPgotCi0jaW5jbHVkZSA8Zm9sbHkvUG9y
dGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxmb2xseS9SYW5nZS5oPgotI2luY2x1ZGUgPGZvbGx5L1Nj
b3BlR3VhcmQuaD4KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9GY250bC5oPgotI2luY2x1
ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L1N5c1Vpby5oPgotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmls
aXR5L1VuaXN0ZC5oPgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi0vKioKLSAqIENvbnZlbmllbmNl
IHdyYXBwZXJzIGFyb3VuZCBzb21lIGNvbW1vbmx5IHVzZWQgc3lzdGVtIGNhbGxzLiAgVGhlICpO
b0ludAotICogd3JhcHBlcnMgcmV0cnkgb24gRUlOVFIuICBUaGUgKkZ1bGwgd3JhcHBlcnMgcmV0
cnkgb24gRUlOVFIgYW5kIGFsc28gbG9vcAotICogdW50aWwgYWxsIGRhdGEgaXMgd3JpdHRlbi4g
IE5vdGUgdGhhdCAqRnVsbCB3cmFwcGVycyB3ZWFrZW4gdGhlIHRocmVhZAotICogc2VtYW50aWNz
IG9mIHVuZGVybHlpbmcgc3lzdGVtIGNhbGxzLgotICovCi1pbnQgb3Blbk5vSW50KGNvbnN0IGNo
YXIqIG5hbWUsIGludCBmbGFncywgbW9kZV90IG1vZGUgPSAwNjY2KTsKLWludCBjbG9zZU5vSW50
KGludCBmZCk7Ci1pbnQgZHVwTm9JbnQoaW50IGZkKTsKLWludCBkdXAyTm9JbnQoaW50IG9sZGZk
LCBpbnQgbmV3ZmQpOwotaW50IGZzeW5jTm9JbnQoaW50IGZkKTsKLWludCBmZGF0YXN5bmNOb0lu
dChpbnQgZmQpOwotaW50IGZ0cnVuY2F0ZU5vSW50KGludCBmZCwgb2ZmX3QgbGVuKTsKLWludCB0
cnVuY2F0ZU5vSW50KGNvbnN0IGNoYXIqIHBhdGgsIG9mZl90IGxlbik7Ci1pbnQgZmxvY2tOb0lu
dChpbnQgZmQsIGludCBvcGVyYXRpb24pOwotaW50IHNodXRkb3duTm9JbnQoaW50IGZkLCBpbnQg
aG93KTsKLQotc3NpemVfdCByZWFkTm9JbnQoaW50IGZkLCB2b2lkKiBidWYsIHNpemVfdCBuKTsK
LXNzaXplX3QgcHJlYWROb0ludChpbnQgZmQsIHZvaWQqIGJ1Ziwgc2l6ZV90IG4sIG9mZl90IG9m
ZnNldCk7Ci1zc2l6ZV90IHJlYWR2Tm9JbnQoaW50IGZkLCBjb25zdCBpb3ZlYyogaW92LCBpbnQg
Y291bnQpOwotCi1zc2l6ZV90IHdyaXRlTm9JbnQoaW50IGZkLCBjb25zdCB2b2lkKiBidWYsIHNp
emVfdCBuKTsKLXNzaXplX3QgcHdyaXRlTm9JbnQoaW50IGZkLCBjb25zdCB2b2lkKiBidWYsIHNp
emVfdCBuLCBvZmZfdCBvZmZzZXQpOwotc3NpemVfdCB3cml0ZXZOb0ludChpbnQgZmQsIGNvbnN0
IGlvdmVjKiBpb3YsIGludCBjb3VudCk7Ci0KLS8qKgotICogV3JhcHBlciBhcm91bmQgcmVhZCgp
IChhbmQgcHJlYWQoKSkgdGhhdCwgaW4gYWRkaXRpb24gdG8gcmV0cnlpbmcgb24KLSAqIEVJTlRS
LCB3aWxsIGxvb3AgdW50aWwgYWxsIGRhdGEgaXMgcmVhZC4KLSAqCi0gKiBUaGlzIHdyYXBwZXIg
aXMgb25seSB1c2VmdWwgZm9yIGJsb2NraW5nIGZpbGUgZGVzY3JpcHRvcnMgKGZvciBub24tYmxv
Y2tpbmcKLSAqIGZpbGUgZGVzY3JpcHRvcnMsIHlvdSBoYXZlIHRvIGJlIHByZXBhcmVkIHRvIGRl
YWwgd2l0aCBpbmNvbXBsZXRlIHJlYWRzCi0gKiBhbnl3YXkpLCBhbmQgb25seSBleGlzdHMgYmVj
YXVzZSBQT1NJWCBhbGxvd3MgcmVhZCgpIHRvIHJldHVybiBhbiBpbmNvbXBsZXRlCi0gKiByZWFk
IGlmIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIChpbnN0ZWFkIG9mIHJldHVybmluZyAtMSBhbmQg
c2V0dGluZyBlcnJubwotICogdG8gRUlOVFIpLgotICoKLSAqIE5vdGUgdGhhdCB0aGlzIHdyYXBw
ZXIgd2Vha2VucyB0aGUgdGhyZWFkIHNhZmV0eSBvZiByZWFkKCk6IHRoZSBmaWxlIHBvaW50ZXIK
LSAqIGlzIHNoYXJlZCBiZXR3ZWVuIHRocmVhZHMsIGJ1dCB0aGUgc3lzdGVtIGNhbGwgaXMgYXRv
bWljLiAgSWYgbXVsdGlwbGUKLSAqIHRocmVhZHMgYXJlIHJlYWRpbmcgZnJvbSBhIGZpbGUgYXQg
dGhlIHNhbWUgdGltZSwgeW91IGRvbid0IGtub3cgd2hlcmUgeW91cgotICogZGF0YSBjYW1lIGZy
b20gaW4gdGhlIGZpbGUsIGJ1dCB5b3UgZG8ga25vdyB0aGF0IHRoZSByZXR1cm5lZCBieXRlcyB3
ZXJlCi0gKiBjb250aWd1b3VzLiAgWW91IGNhbiBubyBsb25nZXIgbWFrZSB0aGlzIGFzc3VtcHRp
b24gaWYgdXNpbmcgcmVhZEZ1bGwoKS4KLSAqIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIHByZWFk
KCkgd2hlbiByZWFkaW5nIGZyb20gdGhlIHNhbWUgZmlsZSBkZXNjcmlwdG9yCi0gKiBmcm9tIG11
bHRpcGxlIHRocmVhZHMgc2ltdWx0YW5lb3VzbHksIGFueXdheS4KLSAqCi0gKiBOb3RlIHRoYXQg
cmVhZHZGdWxsIGFuZCBwcmVhZHZGdWxsIHJlcXVpcmUgaW92IHRvIGJlIG5vbi1jb25zdCwgdW5s
aWtlCi0gKiByZWFkdiBhbmQgcHJlYWR2LiAgVGhlIGNvbnRlbnRzIG9mIGlvdiBhZnRlciB0aGVz
ZSBmdW5jdGlvbnMgcmV0dXJuCi0gKiBpcyB1bnNwZWNpZmllZC4KLSAqLwotc3NpemVfdCByZWFk
RnVsbChpbnQgZmQsIHZvaWQqIGJ1Ziwgc2l6ZV90IG4pOwotc3NpemVfdCBwcmVhZEZ1bGwoaW50
IGZkLCB2b2lkKiBidWYsIHNpemVfdCBuLCBvZmZfdCBvZmZzZXQpOwotc3NpemVfdCByZWFkdkZ1
bGwoaW50IGZkLCBpb3ZlYyogaW92LCBpbnQgY291bnQpOwotc3NpemVfdCBwcmVhZHZGdWxsKGlu
dCBmZCwgaW92ZWMqIGlvdiwgaW50IGNvdW50LCBvZmZfdCBvZmZzZXQpOwotCi0vKioKLSAqIFNp
bWlsYXIgdG8gcmVhZEZ1bGwgYW5kIHByZWFkRnVsbCBhYm92ZSwgd3JhcHBlcnMgYXJvdW5kIHdy
aXRlKCkgYW5kCi0gKiBwd3JpdGUoKSB0aGF0IGxvb3AgdW50aWwgYWxsIGRhdGEgaXMgd3JpdHRl
bi4KLSAqCi0gKiBHZW5lcmFsbHksIHRoZSB3cml0ZSgpIC8gcHdyaXRlKCkgc3lzdGVtIGNhbGwg
bWF5IGFsd2F5cyB3cml0ZSBmZXdlciBieXRlcwotICogdGhhbiByZXF1ZXN0ZWQsIGp1c3QgbGlr
ZSByZWFkKCkuICBJbiBjZXJ0YWluIGNhc2VzIChzdWNoIGFzIHdoZW4gd3JpdGluZyB0bwotICog
YSBwaXBlKSwgUE9TSVggcHJvdmlkZXMgc3Ryb25nZXIgZ3VhcmFudGVlcywgYnV0IG5vdCBpbiB0
aGUgZ2VuZXJhbCBjYXNlLgotICogRm9yIGV4YW1wbGUsIExpbnV4IChldmVuIG9uIGEgNjQtYml0
IHBsYXRmb3JtKSB3b24ndCB3cml0ZSBtb3JlIHRoYW4gMkdCIGluCi0gKiBvbmUgd3JpdGUoKSBz
eXN0ZW0gY2FsbC4KLSAqCi0gKiBOb3RlIHRoYXQgd3JpdGV2RnVsbCBhbmQgcHdyaXRldkZ1bGwg
cmVxdWlyZSBpb3YgdG8gYmUgbm9uLWNvbnN0LCB1bmxpa2UKLSAqIHdyaXRldiBhbmQgcHdyaXRl
di4gIFRoZSBjb250ZW50cyBvZiBpb3YgYWZ0ZXIgdGhlc2UgZnVuY3Rpb25zIHJldHVybgotICog
aXMgdW5zcGVjaWZpZWQuCi0gKgotICogVGhlc2UgZnVuY3Rpb25zIHJldHVybiAtMSBvbiBlcnJv
ciwgb3IgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyB3cml0dGVuCi0gKiAod2hpY2ggaXMgYWx3
YXlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgcmVxdWVzdGVkIGJ5dGVzKSBvbiBzdWNjZXNz
LgotICovCi1zc2l6ZV90IHdyaXRlRnVsbChpbnQgZmQsIGNvbnN0IHZvaWQqIGJ1Ziwgc2l6ZV90
IG4pOwotc3NpemVfdCBwd3JpdGVGdWxsKGludCBmZCwgY29uc3Qgdm9pZCogYnVmLCBzaXplX3Qg
biwgb2ZmX3Qgb2Zmc2V0KTsKLXNzaXplX3Qgd3JpdGV2RnVsbChpbnQgZmQsIGlvdmVjKiBpb3Ys
IGludCBjb3VudCk7Ci1zc2l6ZV90IHB3cml0ZXZGdWxsKGludCBmZCwgaW92ZWMqIGlvdiwgaW50
IGNvdW50LCBvZmZfdCBvZmZzZXQpOwotCi0vKioKLSAqIFJlYWQgZW50aXJlIGZpbGUgKGlmIG51
bV9ieXRlcyBpcyBkZWZhdWx0ZWQpIG9yIG5vIG1vcmUgdGhhbgotICogbnVtX2J5dGVzIChvdGhl
cndpc2UpIGludG8gY29udGFpbmVyICpvdXQuIFRoZSBjb250YWluZXIgaXMgYXNzdW1lZAotICog
dG8gYmUgY29udGlndW91cywgd2l0aCBlbGVtZW50IHNpemUgZXF1YWwgdG8gMSwgYW5kIG9mZmVy
IHNpemUoKSwKLSAqIHJlc2VydmUoKSwgYW5kIHJhbmRvbSBhY2Nlc3MgKGUuZy4gc3RkOjp2ZWN0
b3I8Y2hhcj4sIHN0ZDo6c3RyaW5nLAotICogZmJzdHJpbmcpLgotICoKLSAqIFJldHVybnM6IHRy
dWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLiBJbiB0aGUgbGF0dGVyIGNhc2UKLSAq
IGVycm5vIHdpbGwgYmUgc2V0IGFwcHJvcHJpYXRlbHkgYnkgdGhlIGZhaWxpbmcgc3lzdGVtIHBy
aW1pdGl2ZS4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5lcj4KLWJvb2wgcmVhZEZpbGUo
Ci0gICAgaW50IGZkLAotICAgIENvbnRhaW5lciYgb3V0LAotICAgIHNpemVfdCBudW1fYnl0ZXMg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKSB7Ci0gIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKG91dFswXSkgPT0gMSwKLSAgICAgICAgICAgICAgICAicmVhZEZpbGU6IG9ubHkgY29u
dGFpbmVycyB3aXRoIGJ5dGUtc2l6ZWQgZWxlbWVudHMgYWNjZXB0ZWQiKTsKLQotICBzaXplX3Qg
c29GYXIgPSAwOyAvLyBhbW91bnQgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5IHJlYWQKLSAgU0NPUEVf
RVhJVCB7Ci0gICAgRENIRUNLKG91dC5zaXplKCkgPj0gc29GYXIpOyAvLyByZXNpemUgYmV0dGVy
IGRvZXNuJ3QgdGhyb3cKLSAgICBvdXQucmVzaXplKHNvRmFyKTsKLSAgfTsKLQotICAvLyBPYnRh
aW4gZmlsZSBzaXplOgotICBzdHJ1Y3Qgc3RhdCBidWY7Ci0gIGlmIChmc3RhdChmZCwgJmJ1Zikg
PT0gLTEpIHJldHVybiBmYWxzZTsKLSAgLy8gU29tZSBmaWxlcyAobm90YWJseSB1bmRlciAvcHJv
YyBhbmQgL3N5cyBvbiBMaW51eCkgbGllIGFib3V0Ci0gIC8vIHRoZWlyIHNpemUsIHNvIHRyZWF0
IHRoZSBzaXplIGFkdmVydGlzZWQgYnkgZnN0YXQgdW5kZXIgYWR2aXNlCi0gIC8vIGJ1dCBkb24n
dCByZWx5IG9uIGl0LiBJbiBwYXJ0aWN1bGFyLCBpZiB0aGUgc2l6ZSBpcyB6ZXJvLCB3ZQotICAv
LyBzaG91bGQgYXR0ZW1wdCB0byByZWFkIHN0dWZmLiBJZiBub3QgemVybywgd2UnbGwgYXR0ZW1w
dCB0byByZWFkCi0gIC8vIG9uZSBleHRyYSBieXRlLgotICBjb25zdGV4cHIgc2l6ZV90IGluaXRp
YWxBbGxvYyA9IDEwMjQgKiA0OwotICBvdXQucmVzaXplKAotICAgIHN0ZDo6bWluKAotICAgICAg
YnVmLnN0X3NpemUgPiAwID8gKHNpemVfdChidWYuc3Rfc2l6ZSkgKyAxKSA6IGluaXRpYWxBbGxv
YywgbnVtX2J5dGVzKSk7Ci0KLSAgd2hpbGUgKHNvRmFyIDwgb3V0LnNpemUoKSkgewotICAgIGNv
bnN0IGF1dG8gYWN0dWFsID0gcmVhZEZ1bGwoZmQsICZvdXRbc29GYXJdLCBvdXQuc2l6ZSgpIC0g
c29GYXIpOwotICAgIGlmIChhY3R1YWwgPT0gLTEpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgc29GYXIgKz0gYWN0dWFsOwotICAgIGlmIChzb0ZhciA8IG91dC5zaXplKCkpIHsK
LSAgICAgIC8vIEZpbGUgZXhoYXVzdGVkCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gRXcs
IGFsbG9jYXRlIG1vcmUgbWVtb3J5LiBVc2UgZXhwb25lbnRpYWwgZ3Jvd3RoIHRvIGF2b2lkCi0g
ICAgLy8gcXVhZHJhdGljIGJlaGF2aW9yLiBDYXAgc2l6ZSB0byBudW1fYnl0ZXMuCi0gICAgb3V0
LnJlc2l6ZShzdGQ6Om1pbihvdXQuc2l6ZSgpICogMyAvIDIsIG51bV9ieXRlcykpOwotICB9Ci0K
LSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qKgotICogU2FtZSBhcyBhYm92ZSwgYnV0IHRha2VzIGlu
IGEgZmlsZSBuYW1lIGluc3RlYWQgb2YgZmQKLSAqLwotdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5l
cj4KLWJvb2wgcmVhZEZpbGUoCi0gICAgY29uc3QgY2hhciogZmlsZV9uYW1lLAotICAgIENvbnRh
aW5lciYgb3V0LAotICAgIHNpemVfdCBudW1fYnl0ZXMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNp
emVfdD46Om1heCgpKSB7Ci0gIERDSEVDSyhmaWxlX25hbWUpOwotCi0gIGNvbnN0IGF1dG8gZmQg
PSBvcGVuTm9JbnQoZmlsZV9uYW1lLCBPX1JET05MWSk7Ci0gIGlmIChmZCA9PSAtMSkgewotICAg
IHJldHVybiBmYWxzZTsKLSAgfQotCi0gIFNDT1BFX0VYSVQgewotICAgIC8vIElnbm9yZSBlcnJv
cnMgd2hlbiBjbG9zaW5nIHRoZSBmaWxlCi0gICAgY2xvc2VOb0ludChmZCk7Ci0gIH07Ci0KLSAg
cmV0dXJuIHJlYWRGaWxlKGZkLCBvdXQsIG51bV9ieXRlcyk7Ci19Ci0KLS8qKgotICogV3JpdGVz
IGNvbnRhaW5lciB0byBmaWxlLiBUaGUgY29udGFpbmVyIGlzIGFzc3VtZWQgdG8gYmUKLSAqIGNv
bnRpZ3VvdXMsIHdpdGggZWxlbWVudCBzaXplIGVxdWFsIHRvIDEsIGFuZCBvZmZlcmluZyBTVEwt
bGlrZQotICogbWV0aG9kcyBlbXB0eSgpLCBzaXplKCksIGFuZCBpbmRleGVkIGFjY2VzcwotICog
KGUuZy4gc3RkOjp2ZWN0b3I8Y2hhcj4sIHN0ZDo6c3RyaW5nLCBmYnN0cmluZywgU3RyaW5nUGll
Y2UpLgotICoKLSAqICJmbGFncyIgZGljdGF0ZXMgdGhlIG9wZW4gZmxhZ3MgdG8gdXNlLiBEZWZh
dWx0IGlzIHRvIGNyZWF0ZSBmaWxlCi0gKiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFuZCB0cnVuY2F0
ZSBpdC4KLSAqCi0gKiBSZXR1cm5zOiB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVy
ZS4gSW4gdGhlIGxhdHRlciBjYXNlCi0gKiBlcnJubyB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5
IGJ5IHRoZSBmYWlsaW5nIHN5c3RlbSBwcmltaXRpdmUuCi0gKgotICogTm90ZSB0aGF0IHRoaXMg
ZnVuY3Rpb24gbWF5IGxlYXZlIHRoZSBmaWxlIGluIGEgcGFydGlhbGx5IHdyaXR0ZW4gc3RhdGUg
b24KLSAqIGZhaWx1cmUuICBVc2Ugd3JpdGVGaWxlQXRvbWljKCkgaWYgeW91IHdhbnQgdG8gZW5z
dXJlIHRoYXQgdGhlIGV4aXN0aW5nIGZpbGUKLSAqIHN0YXRlIHdpbGwgYmUgdW5jaGFuZ2VkIG9u
IGVycm9yLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyPgotYm9vbCB3cml0ZUZpbGUo
Y29uc3QgQ29udGFpbmVyJiBkYXRhLAotICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZW5h
bWUsCi0gICAgICAgICAgICAgICBpbnQgZmxhZ3MgPSBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RS
VU5DLAotICAgICAgICAgICAgICAgbW9kZV90IG1vZGUgPSAwNjY2KSB7Ci0gIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKGRhdGFbMF0pID09IDEsCi0gICAgICAgICAgICAgICAgIndyaXRlRmlsZSB3b3Jr
cyB3aXRoIGVsZW1lbnQgc2l6ZSBlcXVhbCB0byAxIik7Ci0gIGludCBmZCA9IG9wZW4oZmlsZW5h
bWUsIGZsYWdzLCBtb2RlKTsKLSAgaWYgKGZkID09IC0xKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICB9Ci0gIGJvb2wgb2sgPSBkYXRhLmVtcHR5KCkgfHwKLSAgICB3cml0ZUZ1bGwoZmQsICZkYXRh
WzBdLCBkYXRhLnNpemUoKSkgPT0gc3RhdGljX2Nhc3Q8c3NpemVfdD4oZGF0YS5zaXplKCkpOwot
ICByZXR1cm4gY2xvc2VOb0ludChmZCkgPT0gMCAmJiBvazsKLX0KLQotLyoqCi0gKiBXcml0ZSBm
aWxlIGNvbnRlbnRzICJhdG9taWNhbGx5Ii4KLSAqCi0gKiBUaGlzIHdyaXRlcyB0aGUgZGF0YSB0
byBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnksIGFuZAotICog
dGhlbiByZW5hbWVzIGl0IHRvIHRoZSBzcGVjaWZpZWQgcGF0aC4gIFRoaXMgZ3VhcmFudGVlcyB0
aGF0IHRoZSBzcGVjaWZpZWQKLSAqIGZpbGUgd2lsbCBiZSByZXBsYWNlZCB0aGUgdGhlIHNwZWNp
ZmllZCBjb250ZW50cyBvbiBzdWNjZXNzLCBvciB3aWxsIG5vdCBiZQotICogbW9kaWZpZWQgb24g
ZmFpbHVyZS4KLSAqCi0gKiBOb3RlIHRoYXQgb24gcGxhdGZvcm1zIHRoYXQgZG8gbm90IHByb3Zp
ZGUgYXRvbWljIGZpbGVzeXN0ZW0gcmVuYW1lCi0gKiBmdW5jdGlvbmFsaXR5IChlLmcuLCBXaW5k
b3dzKSB0aGlzIGJlaGF2aW9yIG1heSBub3QgYmUgdHJ1bHkgYXRvbWljLgotICovCi12b2lkIHdy
aXRlRmlsZUF0b21pYygKLSAgICBTdHJpbmdQaWVjZSBmaWxlbmFtZSwKLSAgICBpb3ZlYyogaW92
LAotICAgIGludCBjb3VudCwKLSAgICBtb2RlX3QgcGVybWlzc2lvbnMgPSAwNjQ0KTsKLXZvaWQg
d3JpdGVGaWxlQXRvbWljKAotICAgIFN0cmluZ1BpZWNlIGZpbGVuYW1lLAotICAgIEJ5dGVSYW5n
ZSBkYXRhLAotICAgIG1vZGVfdCBwZXJtaXNzaW9ucyA9IDA2NDQpOwotdm9pZCB3cml0ZUZpbGVB
dG9taWMoCi0gICAgU3RyaW5nUGllY2UgZmlsZW5hbWUsCi0gICAgU3RyaW5nUGllY2UgZGF0YSwK
LSAgICBtb2RlX3QgcGVybWlzc2lvbnMgPSAwNjQ0KTsKLQotLyoqCi0gKiBBIHZlcnNpb24gb2Yg
d3JpdGVGaWxlQXRvbWljKCkgdGhhdCByZXR1cm5zIGFuIGVycm5vIHZhbHVlIGluc3RlYWQgb2YK
LSAqIHRocm93aW5nIG9uIGVycm9yLgotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGFu
IGVycm5vIHZhbHVlIG9uIGVycm9yLgotICovCi1pbnQgd3JpdGVGaWxlQXRvbWljTm9UaHJvdygK
LSAgICBTdHJpbmdQaWVjZSBmaWxlbmFtZSwKLSAgICBpb3ZlYyogaW92LAotICAgIGludCBjb3Vu
dCwKLSAgICBtb2RlX3QgcGVybWlzc2lvbnMgPSAwNjQ0KTsKLQotfSAgLy8gbmFtZXNwYWNlcwpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvRm9y
ZWFjaC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvRm9yZWFj
aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWE5YjNhNDNkYmQ3YWEyMGYzYzk3
ZDVlNzJlYjNjZmJmZTVjZjJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0ZvcmVh
Y2guaAorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIw
MTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu
c2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFj
aGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFw
cGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ
UywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRo
ZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lm
aWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5k
ZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLS8qKgotICogVGhpcyBoZWFk
ZXIgaXMgZGVwcmVjYXRlZAotICoKLSAqIFVzZSByYW5nZS1iYXNlZCBmb3IgbG9vcHMsIGFuZCBp
ZiBuZWNlc3NhcnkgUmFuZ2VzLXYzLgotICoKLSAqIFNvbWUgb2YgdGhlIG1lc3NhZ2luZyBoZXJl
IHByZXN1bWVzIHRoYXQgeW91IGhhdmUgY29kZWQ6Ci0gKgotICogICAgICNpbmNsdWRlIDxyYW5n
ZS92My9hbGwuaHBwPgotICogICAgIHVzaW5nIG5hbWVzcGFjZSByYW5nZXM7Ci0gKi8KLQotI2lu
Y2x1ZGUgPGZvbGx5L1ByZXByb2Nlc3Nvci5oPgotI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgotCi0v
KgotICogRm9ybSBhIGxvY2FsIHZhcmlhYmxlIG5hbWUgZnJvbSAiRk9SX0VBQ0hfIiB4IF9fTElO
RV9fLCBzbyB0aGF0Ci0gKiBGT1JfRUFDSCBjYW4gYmUgbmVzdGVkIHdpdGhvdXQgY3JlYXRpbmcg
c2hhZG93ZWQgZGVjbGFyYXRpb25zLgotICovCi0jZGVmaW5lIF9GRV9BTk9OKHgpIEZCX0NPTkNB
VEVOQVRFKEZPUl9FQUNIXywgRkJfQ09OQ0FURU5BVEUoeCwgX19MSU5FX18pKQotCi0vKgotICog
SWYgeW91IGp1c3Qgd2FudCB0aGUgZWxlbWVudCB2YWx1ZXMsIHBsZWFzZSB1c2U6Ci0gKgotICog
ICAgZm9yIChhdXRvJiYgZWxlbWVudCA6IGNvbGxlY3Rpb24pCi0gKgotICogSWYgeW91IG5lZWQg
YWNjZXNzIHRvIHRoZSBpdGVyYXRvcnMgcGxlYXNlIHdyaXRlIGFuIGV4cGxpY2l0IGl0ZXJhdG9y
IGxvb3AKLSAqLwotI2RlZmluZSBGT1JfRUFDSChpLCBjKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIGlmIChib29sIF9GRV9BTk9OKHMxXykgPSBmYWxzZSkge30gZWxzZSAg
ICAgICAgICAgICAgIFwKLSAgICBmb3IgKGF1dG8gJiYgX0ZFX0FOT04oczJfKSA9IChjKTsgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgIV9GRV9BTk9OKHMxXyk7IF9GRV9BTk9OKHMxXykg
PSB0cnVlKSAgICAgICAgICBcCi0gICAgICBmb3IgKGF1dG8gaSA9IF9GRV9BTk9OKHMyXykuYmVn
aW4oKTsgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgaSAhPSBfRkVfQU5PTihzMl8pLmVuZCgp
OyArK2kpCi0KLS8qCi0gKiBJZiB5b3UganVzdCB3YW50IHRoZSBlbGVtZW50IHZhbHVlcywgcGxl
YXNlIHVzZSB0aGlzIChyYW5nZXMtdjMpIGNvbnN0cnVjdDoKLSAqCi0gKiAgICBmb3IgKGF1dG8m
JiBlbGVtZW50IDogY29sbGVjdGlvbiB8IHZpZXc6OnJldmVyc2UpCi0gKgotICogSWYgeW91IG5l
ZWQgYWNjZXNzIHRvIHRoZSBpdGVyYXRvcnMgcGxlYXNlIHdyaXRlIGFuIGV4cGxpY2l0IGl0ZXJh
dG9yIGxvb3AKLSAqLwotI2RlZmluZSBGT1JfRUFDSF9SKGksIGMpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIGlmIChib29sIF9GRV9BTk9OKHMxXykgPSBmYWxzZSkge30gZWxz
ZSAgICAgICAgICAgICAgIFwKLSAgICBmb3IgKGF1dG8gJiYgX0ZFX0FOT04oczJfKSA9IChjKTsg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIV9GRV9BTk9OKHMxXyk7IF9GRV9BTk9OKHMx
XykgPSB0cnVlKSAgICAgICAgICBcCi0gICAgICBmb3IgKGF1dG8gaSA9IF9GRV9BTk9OKHMyXyku
cmJlZ2luKCk7ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgaSAhPSBfRkVfQU5PTihzMl8pLnJl
bmQoKTsgKytpKQotCi0vKgotICogSWYgeW91IGp1c3Qgd2FudCB0aGUgZWxlbWVudCB2YWx1ZXMs
IHBsZWFzZSB1c2UgdGhpcyAocmFuZ2VzLXYzKSBjb25zdHJ1Y3Q6Ci0gKgotICogICAgZm9yIChh
dXRvJiYgZWxlbWVudCA6IGNvbGxlY3Rpb24gfCB2aWV3Ojp6aXAodmlldzo6aW50cykpCi0gKgot
ICogSWYgeW91IG5lZWQgYWNjZXNzIHRvIHRoZSBpdGVyYXRvcnMgcGxlYXNlIHdyaXRlIGFuIGV4
cGxpY2l0IGl0ZXJhdG9yIGxvb3AKLSAqIGFuZCB1c2UgYSBjb3VudGVyIHZhcmlhYmxlCi0gKi8K
LSNkZWZpbmUgRk9SX0VBQ0hfRU5VTUVSQVRFKGNvdW50LCBpLCBjKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBpZiAoYm9vbCBfRkVfQU5PTihzMV8pID0gZmFsc2UpIHt9IGVs
c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGZvciAoYXV0byAmJiBGT1JfRUFD
SF9zdGF0ZTIgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAhX0ZFX0FOT04oczFfKTsgX0ZFX0FOT04oczFfKSA9IHRydWUpICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgaWYgKHNpemVfdCBfRkVfQU5PTihuMV8pID0gMCkge30gZWxzZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChjb25zdCBzaXplX3QmIGNvdW50ID0g
X0ZFX0FOT04objFfKSkge30gZWxzZSAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBmb3IgKGF1
dG8gaSA9IEZPUl9FQUNIX3N0YXRlMi5iZWdpbigpOyAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgaSAhPSBGT1JfRUFDSF9zdGF0ZTIuZW5kKCk7ICsrX0ZFX0FOT04objFf
KSwgKytpKQotLyoqCi0gKiBJZiB5b3UganVzdCB3YW50IHRoZSBrZXlzLCBwbGVhc2UgdXNlIHRo
aXMgKHJhbmdlcy12MykgY29uc3RydWN0OgotICoKLSAqICAgIGZvciAoYXV0byYmIGVsZW1lbnQg
OiBjb2xsZWN0aW9uIHwgdmlldzo6a2V5cykKLSAqCi0gKiBJZiB5b3UganVzdCB3YW50IHRoZSB2
YWx1ZXMsIHBsZWFzZSB1c2UgdGhpcyAocmFuZ2VzLXYzKSBjb25zdHJ1Y3Q6Ci0gKgotICogICAg
Zm9yIChhdXRvJiYgZWxlbWVudCA6IGNvbGxlY3Rpb24gfCB2aWV3Ojp2YWx1ZXMpCi0gKgotICog
SWYgeW91IG5lZWQgdG8gc2VlIGJvdGgsIHVzZToKLSAqCi0gKiAgICBmb3IgKGF1dG8mJiBlbGVt
ZW50IDogY29sbGVjdGlvbikgewotICogICAgICBhdXRvIGNvbnN0JiBrZXkgPSBlbGVtZW50LmZp
cnN0OwotICogICAgICBhdXRvJiB2YWx1ZSA9IGVsZW1lbnQuc2Vjb25kOwotICogICAgICAuLi4u
Li4KLSAqICAgIH0KLSAqCi0gKi8KLSNkZWZpbmUgRk9SX0VBQ0hfS1YoaywgdiwgYykgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAodW5zaWduZWQgaW50IF9GRV9BTk9O
KHMxXykgPSAwKSB7fSBlbHNlICAgICAgICAgICAgICAgICBcCi0gICAgZm9yIChhdXRvICYmIF9G
RV9BTk9OKHMyXykgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICFf
RkVfQU5PTihzMV8pOyBfRkVfQU5PTihzMV8pID0gMSkgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgZm9yIChhdXRvIF9GRV9BTk9OKHMzXykgPSBfRkVfQU5PTihzMl8pLmJlZ2luKCk7ICAgICAg
ICBcCi0gICAgICAgICAgIF9GRV9BTk9OKHMzXykgIT0gX0ZFX0FOT04oczJfKS5lbmQoKTsgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgX0ZFX0FOT04oczFfKSA9PSAyICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgID8gKChfRkVfQU5PTihzMV8pID0gMCks
ICsrX0ZFX0FOT04oczNfKSkgICAgICAgICBcCi0gICAgICAgICAgICAgOiAoX0ZFX0FOT04oczNf
KSA9IF9GRV9BTk9OKHMyXykuZW5kKCkpKSAgICAgICAgIFwKLSAgICAgICAgZm9yIChhdXRvICZr
ID0gX0ZFX0FOT04oczNfKS0+Zmlyc3Q7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICFfRkVfQU5PTihzMV8pOyArK19GRV9BTk9OKHMxXykpICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgZm9yIChhdXRvICZ2ID0gX0ZFX0FOT04oczNfKS0+c2Vjb25kOyAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICFfRkVfQU5PTihzMV8pOyArK19GRV9BTk9OKHMxXykpCi0KLW5h
bWVzcGFjZSBmb2xseSB7IG5hbWVzcGFjZSBkZXRhaWwgewotCi0vLyBCb29zdCAxLjQ4IGxhY2tz
IGhhc19sZXNzLCB3ZSBlbXVsYXRlIGEgc3Vic2V0IG9mIGl0IGhlcmUuCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWNsYXNzIEhhc0xlc3MgewotICBzdHJ1Y3QgQmlnZ2VyVGhh
bkNoYXIgeyBjaGFyIHVudXNlZFsyXTsgfTsKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEMsIHR5cGVu
YW1lIEQ+IHN0YXRpYyBjaGFyIHRlc3QoZGVjbHR5cGUoQygpIDwgRCgpKSopOwotICB0ZW1wbGF0
ZSA8dHlwZW5hbWUsIHR5cGVuYW1lPiBzdGF0aWMgQmlnZ2VyVGhhbkNoYXIgdGVzdCguLi4pOwot
cHVibGljOgotICBlbnVtIHsgdmFsdWUgPSBzaXplb2YodGVzdDxULCBVPigwKSkgPT0gMSB9Owot
fTsKLQotLyoqCi0gKiBub3RUaGVyZVlldCBoZWxwcyB0aGUgRk9SX0VBQ0hfUkFOR0UgbWFjcm8g
Ynkgb3Bwb3J0dW5pc3RpY2FsbHkKLSAqIHVzaW5nICI8IiBpbnN0ZWFkIG9mICIhPSIgd2hlbmV2
ZXIgYXZhaWxhYmxlIHdoZW4gY2hlY2tpbmcgZm9yIGxvb3AKLSAqIHRlcm1pbmF0aW9uLiBUaGlz
IG1ha2VzIGUuZy4gZXhhbXBsZXMgc3VjaCBhcyBGT1JfRUFDSF9SQU5HRSAoaSwKLSAqIDEwLCA1
KSBleGVjdXRlIHplcm8gaXRlcmF0aW9ucyBpbnN0ZWFkIG9mIGxvb3BpbmcgdmlydHVhbGx5Ci0g
KiBmb3JldmVyLiBBdCB0aGUgc2FtZSB0aW1lLCBzb21lIGl0ZXJhdG9yIHR5cGVzIGRlZmluZSAi
IT0iIGJ1dCBub3QKLSAqICI8Ii4gVGhlIG5vdFRoZXJlWWV0IGZ1bmN0aW9uIHdpbGwgZGlzcGF0
Y2ggZGlmZmVyZW50bHkgZm9yIHRob3NlLgotICoKLSAqIEJlbG93IGlzIHRoZSBjb3JyZWN0IGlt
cGxlbWVudGF0aW9uIG9mIG5vdFRoZXJlWWV0LiBJdCBpcyBkaXNhYmxlZAotICogYmVjYXVzZSBv
ZiBhIGJ1ZyBpbiBCb29zdCAxLjQ2OiBUaGUgZmlsZXN5c3RlbTo6cGF0aDo6aXRlcmF0b3IKLSAq
IGRlZmluZXMgb3BlcmF0b3I8ICh2aWEgYm9vc3Q6Oml0ZXJhdG9yX2ZhY2FkZSksIGJ1dCB0aGF0
IGluIHR1cm4KLSAqIHVzZXMgZGlzdGFuY2VfdG8gd2hpY2ggaXMgdW5kZWZpbmVkIGZvciB0aGF0
IHBhcnRpY3VsYXIKLSAqIGl0ZXJhdG9yLiBTbyBIYXNMZXNzIChkZWZpbmVkIGFib3ZlKSBpZGVu
dGlmaWVzCi0gKiBib29zdDo6ZmlsZXN5c3RlbTo6cGF0aCBhcyBwcm9wZXJseSBjb21wYXJhYmxl
IHdpdGggPCwgYnV0IGluIGZhY3QKLSAqIGF0dGVtcHRpbmcgdG8gZG8gc28gd2lsbCB5aWVsZCBh
IGNvbXBpbGUtdGltZSBlcnJvci4KLSAqCi0gKiBUaGUgZWxzZSBicmFuY2ggKGFjdGl2ZSkgY29u
dGFpbnMgYSBjb25zZXJ2YXRpdmUKLSAqIGltcGxlbWVudGF0aW9uLgotICovCi0KLSNpZiAwCi0K
LXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SGFz
TGVzczxULCBVPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCi1ub3RUaGVyZVlldChUJiBpdGVyLCBjb25z
dCBVJiBlbmQpIHsKLSAgcmV0dXJuIGl0ZXIgPCBlbmQ7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBVPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IUhhc0xlc3M8VCwgVT46OnZhbHVl
LCBib29sPjo6dHlwZQotbm90VGhlcmVZZXQoVCYgaXRlciwgY29uc3QgVSYgZW5kKSB7Ci0gIHJl
dHVybiBpdGVyICE9IGVuZDsKLX0KLQotI2Vsc2UKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IFU+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgKHN0ZDo6aXNfYXJpdGhtZXRpYzxUPjo6
dmFsdWUgJiYgc3RkOjppc19hcml0aG1ldGljPFU+Ojp2YWx1ZSkgfHwKLSAgKHN0ZDo6aXNfcG9p
bnRlcjxUPjo6dmFsdWUgJiYgc3RkOjppc19wb2ludGVyPFU+Ojp2YWx1ZSksCi0gIGJvb2w+Ojp0
eXBlCi1ub3RUaGVyZVlldChUJiBpdGVyLCBjb25zdCBVJiBlbmQpIHsKLSAgcmV0dXJuIGl0ZXIg
PCBlbmQ7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgotdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8Ci0gICEoCi0gICAgKHN0ZDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUgJiYgc3Rk
Ojppc19hcml0aG1ldGljPFU+Ojp2YWx1ZSkgfHwKLSAgICAoc3RkOjppc19wb2ludGVyPFQ+Ojp2
YWx1ZSAmJiBzdGQ6OmlzX3BvaW50ZXI8VT46OnZhbHVlKQotICApLAotICBib29sPjo6dHlwZQot
bm90VGhlcmVZZXQoVCYgaXRlciwgY29uc3QgVSYgZW5kKSB7Ci0gIHJldHVybiBpdGVyICE9IGVu
ZDsKLX0KLQotI2VuZGlmCi0KLQotLyoqCi0gKiBkb3duVG8gaXMgc2ltaWxhciB0byBub3RUaGVy
ZVlldCwgYnV0IGluIHJldmVyc2UgLSBpdCBoZWxwcyB0aGUKLSAqIEZPUl9FQUNIX1JBTkdFX1Ig
bWFjcm8uCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgotdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8SGFzTGVzczxVLCBUPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCi1kb3duVG8oVCYgaXRl
ciwgY29uc3QgVSYgYmVnaW4pIHsKLSAgcmV0dXJuIGJlZ2luIDwgaXRlci0tOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFIYXNMZXNz
PFUsIFQ+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKLWRvd25UbyhUJiBpdGVyLCBjb25zdCBVJiBiZWdp
bikgewotICBpZiAoaXRlciA9PSBiZWdpbikgcmV0dXJuIGZhbHNlOwotICAtLWl0ZXI7Ci0gIHJl
dHVybiB0cnVlOwotfQotCi19IH0KLQotLyoKLSAqIExvb2sgYXQgdGhlIFJhbmdlcy12MyB2aWV3
cyBhbmQgeW91J2xsIHByb2JhYmx5IGZpbmQgYW4gZWFzaWVyIHdheSB0byBidWlsZAotICogdGhl
IHZpZXcgeW91IHdhbnQgYnV0IHRoZSBlcXVpdmFsZW50IGlzIHJvdWdobHk6Ci0gKgotICogICAg
Zm9yIChhdXRvJiBlbGVtZW50IDogbWFrZV9pdGVyYXRvcl9yYW5nZShiZWdpbiwgZW5kKSkKLSAq
LwotI2RlZmluZSBGT1JfRUFDSF9SQU5HRShpLCBiZWdpbiwgZW5kKSAgICAgICAgICAgXAotICBm
b3IgKGF1dG8gaSA9ICh0cnVlID8gKGJlZ2luKSA6IChlbmQpKTsgICAgICAgXAotICAgICAgIDo6
Zm9sbHk6OmRldGFpbDo6bm90VGhlcmVZZXQoaSwgKGVuZCkpOyAgXAotICAgICAgICsraSkKLQot
LyoKLSAqIExvb2sgYXQgdGhlIFJhbmdlcy12MyB2aWV3cyBhbmQgeW91J2xsIHByb2JhYmx5IGZp
bmQgYW4gZWFzaWVyIHdheSB0byBidWlsZAotICogdGhlIHZpZXcgeW91IHdhbnQgYnV0IHRoZSBl
cXVpdmFsZW50IGlzIHJvdWdobHk6Ci0gKgotICogICAgZm9yIChhdXRvJiBlbGVtZW50IDogbWFr
ZV9pdGVyYXRvcl9yYW5nZShiZWdpbiwgZW5kKSB8IHZpZXc6OnJldmVyc2UpCi0gKi8KLSNkZWZp
bmUgRk9SX0VBQ0hfUkFOR0VfUihpLCBiZWdpbiwgZW5kKSBcCi0gIGZvciAoYXV0byBpID0gKGZh
bHNlID8gKGJlZ2luKSA6IChlbmQpKTsgOjpmb2xseTo6ZGV0YWlsOjpkb3duVG8oaSwgKGJlZ2lu
KSk7KQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9s
bHkvRm9ybWF0LWlubC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9s
bHkvRm9ybWF0LWlubC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2VhODdhNGI1
ZTA3Y2MyZjRhYjM5YTdhZGJiMjA2ODk4ZDA3ZWE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2ZvbGx5L0Zvcm1hdC1pbmwuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMjQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAg
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAq
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgRk9MTFlfRk9S
TUFUX0hfCi0jZXJyb3IgVGhpcyBmaWxlIG1heSBvbmx5IGJlIGluY2x1ZGVkIGZyb20gRm9ybWF0
LmguCi0jZW5kaWYKLQotI2luY2x1ZGUgPGFycmF5PgotI2luY2x1ZGUgPGNpbnR0eXBlcz4KLSNp
bmNsdWRlIDxkZXF1ZT4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4K
LSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDxmb2xseS9FeGNlcHRpb24uaD4KLSNpbmNs
dWRlIDxmb2xseS9Gb3JtYXRUcmFpdHMuaD4KLSNpbmNsdWRlIDxmb2xseS9UcmFpdHMuaD4KLSNp
bmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9XaW5kb3dzLmg+Ci0KLS8vIElnbm9yZSAtV2Zvcm1h
dC1ub25saXRlcmFsIHdhcm5pbmdzIHdpdGhpbiB0aGlzIGZpbGUKLUZPTExZX1BVU0hfV0FSTklO
RwotRk9MTFlfR0NDX0RJU0FCTEVfV0FSTklORygiLVdmb3JtYXQtbm9ubGl0ZXJhbCIpCi0KLW5h
bWVzcGFjZSBmb2xseSB7Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotCi0vLyBVcGRhdGVzIHRoZSBl
bmQgb2YgdGhlIGJ1ZmZlciBhZnRlciB0aGUgY29tbWEgc2VwYXJhdG9ycyBoYXZlIGJlZW4gYWRk
ZWQuCi12b2lkIGluc2VydFRob3VzYW5kc0dyb3VwaW5nVW5zYWZlKGNoYXIqIHN0YXJ0X2J1ZmZl
ciwgY2hhcioqIGVuZF9idWZmZXIpOwotCi1leHRlcm4gY29uc3QgY2hhciBmb3JtYXRIZXhVcHBl
clsyNTZdWzJdOwotZXh0ZXJuIGNvbnN0IGNoYXIgZm9ybWF0SGV4TG93ZXJbMjU2XVsyXTsKLWV4
dGVybiBjb25zdCBjaGFyIGZvcm1hdE9jdGFsWzUxMl1bM107Ci1leHRlcm4gY29uc3QgY2hhciBm
b3JtYXRCaW5hcnlbMjU2XVs4XTsKLQotY29uc3Qgc2l6ZV90IGtNYXhIZXhMZW5ndGggPSAyICog
c2l6ZW9mKHVpbnRtYXhfdCk7Ci1jb25zdCBzaXplX3Qga01heE9jdGFsTGVuZ3RoID0gMyAqIHNp
emVvZih1aW50bWF4X3QpOwotY29uc3Qgc2l6ZV90IGtNYXhCaW5hcnlMZW5ndGggPSA4ICogc2l6
ZW9mKHVpbnRtYXhfdCk7Ci0KLS8qKgotICogQ29udmVydCBhbiB1bnNpZ25lZCB0byBoZXgsIHVz
aW5nIHJlcHIgKHdoaWNoIG1hcHMgZnJvbSBlYWNoIHBvc3NpYmxlCi0gKiAyLWhleC1ieXRlcyB2
YWx1ZSB0byB0aGUgMi1jaGFyYWN0ZXIgcmVwcmVzZW50YXRpb24pLgotICoKLSAqIEp1c3QgbGlr
ZSBmb2xseTo6ZGV0YWlsOjp1aW50VG9CdWZmZXIgaW4gQ29udi5oLCB3cml0ZXMgYXQgdGhlICpl
bmQqIG9mCi0gKiB0aGUgc3VwcGxpZWQgYnVmZmVyIGFuZCByZXR1cm5zIHRoZSBvZmZzZXQgb2Yg
dGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nCi0gKiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgYnVm
ZmVyLiAgVGhlIGZvcm1hdHRlZCBzdHJpbmcgd2lsbCBiZSBpbiByYW5nZQotICogW2J1ZitiZWdp
biwgYnVmK2J1ZkxlbikuCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBVaW50Pgotc2l6ZV90Ci11aW50
VG9IZXgoY2hhciogYnVmZmVyLCBzaXplX3QgYnVmTGVuLCBVaW50IHYsIGNvbnN0IGNoYXIgKCZy
ZXByKVsyNTZdWzJdKSB7Ci0gIC8vICd2ID4+PSA3LCB2ID4+PSAxJyBpcyBubyBtb3JlIHRoYW4g
YSB3b3JrIGFyb3VuZCB0byBnZXQgcmlkIG9mIHNoaWZ0IHNpemUKLSAgLy8gd2FybmluZyB3aGVu
IFVpbnQgPSB1aW50OF90IChpdCdzIGZhbHNlIGFzIHYgPj0gMjU2IGltcGxpZXMgc2l6ZW9mKHYp
ID4gMSkuCi0gIGZvciAoOyAhbGVzc190aGFuPHVuc2lnbmVkLCAyNTY+KHYpOyB2ID4+PSA3LCB2
ID4+PSAxKSB7Ci0gICAgYXV0byBiID0gdiAmIDB4ZmY7Ci0gICAgYnVmTGVuIC09IDI7Ci0gICAg
YnVmZmVyW2J1Zkxlbl0gPSByZXByW2JdWzBdOwotICAgIGJ1ZmZlcltidWZMZW4gKyAxXSA9IHJl
cHJbYl1bMV07Ci0gIH0KLSAgYnVmZmVyWy0tYnVmTGVuXSA9IHJlcHJbdl1bMV07Ci0gIGlmICh2
ID49IDE2KSB7Ci0gICAgYnVmZmVyWy0tYnVmTGVuXSA9IHJlcHJbdl1bMF07Ci0gIH0KLSAgcmV0
dXJuIGJ1ZkxlbjsKLX0KLQotLyoqCi0gKiBDb252ZXJ0IGFuIHVuc2lnbmVkIHRvIGhleCwgdXNp
bmcgbG93ZXItY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzCi0gKiBhYm92ZSA5LiAgU2VlIHRo
ZSBjb21tZW50cyBmb3IgdWludFRvSGV4LgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgVWludD4KLWlu
bGluZSBzaXplX3QgdWludFRvSGV4TG93ZXIoY2hhciogYnVmZmVyLCBzaXplX3QgYnVmTGVuLCBV
aW50IHYpIHsKLSAgcmV0dXJuIHVpbnRUb0hleChidWZmZXIsIGJ1ZkxlbiwgdiwgZm9ybWF0SGV4
TG93ZXIpOwotfQotCi0vKioKLSAqIENvbnZlcnQgYW4gdW5zaWduZWQgdG8gaGV4LCB1c2luZyB1
cHBlci1jYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMKLSAqIGFib3ZlIDkuICBTZWUgdGhlIGNv
bW1lbnRzIGZvciB1aW50VG9IZXguCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBVaW50PgotaW5saW5l
IHNpemVfdCB1aW50VG9IZXhVcHBlcihjaGFyKiBidWZmZXIsIHNpemVfdCBidWZMZW4sIFVpbnQg
dikgewotICByZXR1cm4gdWludFRvSGV4KGJ1ZmZlciwgYnVmTGVuLCB2LCBmb3JtYXRIZXhVcHBl
cik7Ci19Ci0KLS8qKgotICogQ29udmVydCBhbiB1bnNpZ25lZCB0byBvY3RhbC4KLSAqCi0gKiBK
dXN0IGxpa2UgZm9sbHk6OmRldGFpbDo6dWludFRvQnVmZmVyIGluIENvbnYuaCwgd3JpdGVzIGF0
IHRoZSAqZW5kKiBvZgotICogdGhlIHN1cHBsaWVkIGJ1ZmZlciBhbmQgcmV0dXJucyB0aGUgb2Zm
c2V0IG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZwotICogZnJvbSB0aGUgc3RhcnQgb2Yg
dGhlIGJ1ZmZlci4gIFRoZSBmb3JtYXR0ZWQgc3RyaW5nIHdpbGwgYmUgaW4gcmFuZ2UKLSAqIFti
dWYrYmVnaW4sIGJ1ZitidWZMZW4pLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgVWludD4KLXNpemVf
dCB1aW50VG9PY3RhbChjaGFyKiBidWZmZXIsIHNpemVfdCBidWZMZW4sIFVpbnQgdikgewotICBh
dXRvJiByZXByID0gZm9ybWF0T2N0YWw7Ci0gIC8vICd2ID4+PSA3LCB2ID4+PSAyJyBpcyBubyBt
b3JlIHRoYW4gYSB3b3JrIGFyb3VuZCB0byBnZXQgcmlkIG9mIHNoaWZ0IHNpemUKLSAgLy8gd2Fy
bmluZyB3aGVuIFVpbnQgPSB1aW50OF90IChpdCdzIGZhbHNlIGFzIHYgPj0gNTEyIGltcGxpZXMg
c2l6ZW9mKHYpID4gMSkuCi0gIGZvciAoOyAhbGVzc190aGFuPHVuc2lnbmVkLCA1MTI+KHYpOyB2
ID4+PSA3LCB2ID4+PSAyKSB7Ci0gICAgYXV0byBiID0gdiAmIDB4MWZmOwotICAgIGJ1ZkxlbiAt
PSAzOwotICAgIGJ1ZmZlcltidWZMZW5dID0gcmVwcltiXVswXTsKLSAgICBidWZmZXJbYnVmTGVu
ICsgMV0gPSByZXByW2JdWzFdOwotICAgIGJ1ZmZlcltidWZMZW4gKyAyXSA9IHJlcHJbYl1bMl07
Ci0gIH0KLSAgYnVmZmVyWy0tYnVmTGVuXSA9IHJlcHJbdl1bMl07Ci0gIGlmICh2ID49IDgpIHsK
LSAgICBidWZmZXJbLS1idWZMZW5dID0gcmVwclt2XVsxXTsKLSAgfQotICBpZiAodiA+PSA2NCkg
ewotICAgIGJ1ZmZlclstLWJ1Zkxlbl0gPSByZXByW3ZdWzBdOwotICB9Ci0gIHJldHVybiBidWZM
ZW47Ci19Ci0KLS8qKgotICogQ29udmVydCBhbiB1bnNpZ25lZCB0byBiaW5hcnkuCi0gKgotICog
SnVzdCBsaWtlIGZvbGx5OjpkZXRhaWw6OnVpbnRUb0J1ZmZlciBpbiBDb252LmgsIHdyaXRlcyBh
dCB0aGUgKmVuZCogb2YKLSAqIHRoZSBzdXBwbGllZCBidWZmZXIgYW5kIHJldHVybnMgdGhlIG9m
ZnNldCBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcKLSAqIGZyb20gdGhlIHN0YXJ0IG9m
IHRoZSBidWZmZXIuICBUaGUgZm9ybWF0dGVkIHN0cmluZyB3aWxsIGJlIGluIHJhbmdlCi0gKiBb
YnVmK2JlZ2luLCBidWYrYnVmTGVuKS4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIFVpbnQ+Ci1zaXpl
X3QgdWludFRvQmluYXJ5KGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZkxlbiwgVWludCB2KSB7Ci0g
IGF1dG8mIHJlcHIgPSBmb3JtYXRCaW5hcnk7Ci0gIGlmICh2ID09IDApIHsKLSAgICBidWZmZXJb
LS1idWZMZW5dID0gJzAnOwotICAgIHJldHVybiBidWZMZW47Ci0gIH0KLSAgZm9yICg7IHY7IHYg
Pj49IDcsIHYgPj49IDEpIHsKLSAgICBhdXRvIGIgPSB2ICYgMHhmZjsKLSAgICBidWZMZW4gLT0g
ODsKLSAgICBtZW1jcHkoYnVmZmVyICsgYnVmTGVuLCAmKHJlcHJbYl1bMF0pLCA4KTsKLSAgfQot
ICB3aGlsZSAoYnVmZmVyW2J1Zkxlbl0gPT0gJzAnKSB7Ci0gICAgKytidWZMZW47Ci0gIH0KLSAg
cmV0dXJuIGJ1ZkxlbjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLXRlbXBsYXRlIDxj
bGFzcyBEZXJpdmVkLCBib29sIGNvbnRhaW5lck1vZGUsIGNsYXNzLi4uIEFyZ3M+Ci1CYXNlRm9y
bWF0dGVyPERlcml2ZWQsIGNvbnRhaW5lck1vZGUsIEFyZ3MuLi4+OjpCYXNlRm9ybWF0dGVyKAot
ICAgIFN0cmluZ1BpZWNlIHN0ciwKLSAgICBBcmdzJiYuLi4gYXJncykKLSAgICA6IHN0cl8oc3Ry
KSwgdmFsdWVzXyhzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9Ci0KLXRlbXBsYXRlIDxj
bGFzcyBEZXJpdmVkLCBib29sIGNvbnRhaW5lck1vZGUsIGNsYXNzLi4uIEFyZ3M+Ci10ZW1wbGF0
ZSA8Y2xhc3MgT3V0cHV0Pgotdm9pZCBCYXNlRm9ybWF0dGVyPERlcml2ZWQsIGNvbnRhaW5lck1v
ZGUsIEFyZ3MuLi4+OjpvcGVyYXRvcigpKAotICAgIE91dHB1dCYgb3V0KSBjb25zdCB7Ci0gIC8v
IENvcHkgcmF3IHN0cmluZyAod2l0aG91dCBmb3JtYXQgc3BlY2lmaWVycykgdG8gb3V0cHV0Owot
ICAvLyBub3QgYXMgc2ltcGxlIGFzIHdlJ2QgbGlrZSwgYXMgd2Ugc3RpbGwgbmVlZCB0byB0cmFu
c2xhdGUgIn19IiB0byAifSIKLSAgLy8gYW5kIHRocm93IGlmIHdlIHNlZSBhbnkgbG9uZSAifSIK
LSAgYXV0byBvdXRwdXRTdHJpbmcgPSBbJm91dF0oU3RyaW5nUGllY2UgcykgewotICAgIGF1dG8g
cCA9IHMuYmVnaW4oKTsKLSAgICBhdXRvIGVuZCA9IHMuZW5kKCk7Ci0gICAgd2hpbGUgKHAgIT0g
ZW5kKSB7Ci0gICAgICBhdXRvIHEgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obWVtY2hyKHAs
ICd9Jywgc2l6ZV90KGVuZCAtIHApKSk7Ci0gICAgICBpZiAoIXEpIHsKLSAgICAgICAgb3V0KFN0
cmluZ1BpZWNlKHAsIGVuZCkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgICsrcTsK
LSAgICAgIG91dChTdHJpbmdQaWVjZShwLCBxKSk7Ci0gICAgICBwID0gcTsKLQotICAgICAgaWYg
KHAgPT0gZW5kIHx8ICpwICE9ICd9JykgewotICAgICAgICB0aHJvdyBCYWRGb3JtYXRBcmcoImZv
bGx5Ojpmb3JtYXQ6IHNpbmdsZSAnfScgaW4gZm9ybWF0IHN0cmluZyIpOwotICAgICAgfQotICAg
ICAgKytwOwotICAgIH0KLSAgfTsKLQotICBhdXRvIHAgPSBzdHJfLmJlZ2luKCk7Ci0gIGF1dG8g
ZW5kID0gc3RyXy5lbmQoKTsKLQotICBpbnQgbmV4dEFyZyA9IDA7Ci0gIGJvb2wgaGFzRGVmYXVs
dEFyZ0luZGV4ID0gZmFsc2U7Ci0gIGJvb2wgaGFzRXhwbGljaXRBcmdJbmRleCA9IGZhbHNlOwot
ICB3aGlsZSAocCAhPSBlbmQpIHsKLSAgICBhdXRvIHEgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4obWVtY2hyKHAsICd7Jywgc2l6ZV90KGVuZCAtIHApKSk7Ci0gICAgaWYgKCFxKSB7Ci0gICAg
ICBvdXRwdXRTdHJpbmcoU3RyaW5nUGllY2UocCwgZW5kKSk7Ci0gICAgICBicmVhazsKLSAgICB9
Ci0gICAgb3V0cHV0U3RyaW5nKFN0cmluZ1BpZWNlKHAsIHEpKTsKLSAgICBwID0gcSArIDE7Ci0K
LSAgICBpZiAocCA9PSBlbmQpIHsKLSAgICAgIHRocm93IEJhZEZvcm1hdEFyZygiZm9sbHk6OmZv
cm1hdDogJ30nIGF0IGVuZCBvZiBmb3JtYXQgc3RyaW5nIik7Ci0gICAgfQotCi0gICAgLy8gInt7
IiAtPiAieyIKLSAgICBpZiAoKnAgPT0gJ3snKSB7Ci0gICAgICBvdXQoU3RyaW5nUGllY2UocCwg
MSkpOwotICAgICAgKytwOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgLy8gRm9ybWF0
IHN0cmluZwotICAgIHEgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obWVtY2hyKHAsICd9Jywg
c2l6ZV90KGVuZCAtIHApKSk7Ci0gICAgaWYgKHEgPT0gbnVsbHB0cikgewotICAgICAgdGhyb3cg
QmFkRm9ybWF0QXJnKCJmb2xseTo6Zm9ybWF0OiBtaXNzaW5nIGVuZGluZyAnfSciKTsKLSAgICB9
Ci0gICAgRm9ybWF0QXJnIGFyZyhTdHJpbmdQaWVjZShwLCBxKSk7Ci0gICAgcCA9IHEgKyAxOwot
Ci0gICAgaW50IGFyZ0luZGV4ID0gMDsKLSAgICBhdXRvIHBpZWNlID0gYXJnLnNwbGl0S2V5PHRy
dWU+KCk7IC8vIGVtcHR5IGtleSBjb21wb25lbnQgaXMgb2theQotICAgIGlmIChjb250YWluZXJN
b2RlKSB7IC8vIHN0YXRpYwotICAgICAgYXJnLmVuZm9yY2UoCi0gICAgICAgICAgYXJnLndpZHRo
ICE9IEZvcm1hdEFyZzo6a0R5bmFtaWNXaWR0aCwKLSAgICAgICAgICAiZHluYW1pYyBmaWVsZCB3
aWR0aCBub3Qgc3VwcG9ydGVkIGluIHZmb3JtYXQoKSIpOwotICAgICAgaWYgKHBpZWNlLmVtcHR5
KCkpIHsKLSAgICAgICAgYXJnLnNldE5leHRJbnRLZXkobmV4dEFyZysrKTsKLSAgICAgICAgaGFz
RGVmYXVsdEFyZ0luZGV4ID0gdHJ1ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGFyZy5zZXRO
ZXh0S2V5KHBpZWNlKTsKLSAgICAgICAgaGFzRXhwbGljaXRBcmdJbmRleCA9IHRydWU7Ci0gICAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChwaWVjZS5lbXB0eSgpKSB7Ci0gICAgICAgIGlm
IChhcmcud2lkdGggPT0gRm9ybWF0QXJnOjprRHluYW1pY1dpZHRoKSB7Ci0gICAgICAgICAgYXJn
LmVuZm9yY2UoCi0gICAgICAgICAgICAgIGFyZy53aWR0aEluZGV4ID09IEZvcm1hdEFyZzo6a05v
SW5kZXgsCi0gICAgICAgICAgICAgICJjYW5ub3QgcHJvdmlkZSB3aWR0aCBhcmcgaW5kZXggd2l0
aG91dCB2YWx1ZSBhcmcgaW5kZXgiKTsKLSAgICAgICAgICBpbnQgc2l6ZUFyZyA9IG5leHRBcmcr
KzsKLSAgICAgICAgICBhcmcud2lkdGggPSBhc0Rlcml2ZWQoKS5nZXRTaXplQXJnKHNpemVfdChz
aXplQXJnKSwgYXJnKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFyZ0luZGV4ID0gbmV4dEFyZysr
OwotICAgICAgICBoYXNEZWZhdWx0QXJnSW5kZXggPSB0cnVlOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKGFyZy53aWR0aCA9PSBGb3JtYXRBcmc6OmtEeW5hbWljV2lkdGgpIHsKLSAgICAg
ICAgICBhcmcuZW5mb3JjZSgKLSAgICAgICAgICAgICAgYXJnLndpZHRoSW5kZXggIT0gRm9ybWF0
QXJnOjprTm9JbmRleCwKLSAgICAgICAgICAgICAgImNhbm5vdCBwcm92aWRlIHZhbHVlIGFyZyBp
bmRleCB3aXRob3V0IHdpZHRoIGFyZyBpbmRleCIpOwotICAgICAgICAgIGFyZy53aWR0aCA9IGFz
RGVyaXZlZCgpLmdldFNpemVBcmcoc2l6ZV90KGFyZy53aWR0aEluZGV4KSwgYXJnKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgYXJnSW5kZXggPSB0bzxpbnQ+KHBpZWNl
KTsKLSAgICAgICAgfSBjYXRjaCAoY29uc3Qgc3RkOjpvdXRfb2ZfcmFuZ2UmKSB7Ci0gICAgICAg
ICAgYXJnLmVycm9yKCJhcmd1bWVudCBpbmRleCBtdXN0IGJlIGludGVnZXIiKTsKLSAgICAgICAg
fQotICAgICAgICBhcmcuZW5mb3JjZShhcmdJbmRleCA+PSAwLCAiYXJndW1lbnQgaW5kZXggbXVz
dCBiZSBub24tbmVnYXRpdmUiKTsKLSAgICAgICAgaGFzRXhwbGljaXRBcmdJbmRleCA9IHRydWU7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGhhc0RlZmF1bHRBcmdJbmRleCAmJiBoYXNFeHBs
aWNpdEFyZ0luZGV4KSB7Ci0gICAgICB0aHJvdyBCYWRGb3JtYXRBcmcoCi0gICAgICAgICAgImZv
bGx5Ojpmb3JtYXQ6IG1heSBub3QgaGF2ZSBib3RoIGRlZmF1bHQgYW5kIGV4cGxpY2l0IGFyZyBp
bmRleGVzIik7Ci0gICAgfQotCi0gICAgYXNEZXJpdmVkKCkuZG9Gb3JtYXQoc2l6ZV90KGFyZ0lu
ZGV4KSwgYXJnLCBvdXQpOwotICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBEZXJpdmVkLCBib29s
IGNvbnRhaW5lck1vZGUsIGNsYXNzLi4uIEFyZ3M+Ci12b2lkIHdyaXRlVG8oCi0gICAgRklMRSog
ZnAsCi0gICAgY29uc3QgQmFzZUZvcm1hdHRlcjxEZXJpdmVkLCBjb250YWluZXJNb2RlLCBBcmdz
Li4uPiYgZm9ybWF0dGVyKSB7Ci0gIGF1dG8gd3JpdGVyID0gW2ZwXShTdHJpbmdQaWVjZSBzcCkg
ewotICAgIHNpemVfdCBuID0gZndyaXRlKHNwLmRhdGEoKSwgMSwgc3Auc2l6ZSgpLCBmcCk7Ci0g
ICAgaWYgKG4gPCBzcC5zaXplKCkpIHsKLSAgICAgIHRocm93U3lzdGVtRXJyb3IoIkZvcm1hdHRl
ciB3cml0ZVRvIiwgImZ3cml0ZSBmYWlsZWQiKTsKLSAgICB9Ci0gIH07Ci0gIGZvcm1hdHRlcih3
cml0ZXIpOwotfQotCi1uYW1lc3BhY2UgZm9ybWF0X3ZhbHVlIHsKLQotdGVtcGxhdGUgPGNsYXNz
IEZvcm1hdENhbGxiYWNrPgotdm9pZCBmb3JtYXRTdHJpbmcoU3RyaW5nUGllY2UgdmFsLCBGb3Jt
YXRBcmcmIGFyZywgRm9ybWF0Q2FsbGJhY2smIGNiKSB7Ci0gIGlmIChhcmcud2lkdGggIT0gRm9y
bWF0QXJnOjprRGVmYXVsdFdpZHRoICYmIGFyZy53aWR0aCA8IDApIHsKLSAgICB0aHJvdyBCYWRG
b3JtYXRBcmcoImZvbGx5Ojpmb3JtYXQ6IGludmFsaWQgd2lkdGgiKTsKLSAgfQotICBpZiAoYXJn
LnByZWNpc2lvbiAhPSBGb3JtYXRBcmc6OmtEZWZhdWx0UHJlY2lzaW9uICYmIGFyZy5wcmVjaXNp
b24gPCAwKSB7Ci0gICAgdGhyb3cgQmFkRm9ybWF0QXJnKCJmb2xseTo6Zm9ybWF0OiBpbnZhbGlk
IHByZWNpc2lvbiIpOwotICB9Ci0KLSAgaWYgKGFyZy5wcmVjaXNpb24gIT0gRm9ybWF0QXJnOjpr
RGVmYXVsdFByZWNpc2lvbiAmJgotICAgICAgdmFsLnNpemUoKSA+IHN0YXRpY19jYXN0PHNpemVf
dD4oYXJnLnByZWNpc2lvbikpIHsKLSAgICB2YWwucmVzZXQodmFsLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihhcmcucHJlY2lzaW9uKSk7Ci0gIH0KLQotICBjb25zdGV4cHIgaW50IHBhZEJ1
ZlNpemUgPSAxMjg7Ci0gIGNoYXIgcGFkQnVmW3BhZEJ1ZlNpemVdOwotCi0gIC8vIE91dHB1dCBw
YWRkaW5nLCBubyBtb3JlIHRoYW4gcGFkQnVmU2l6ZSBhdCBvbmNlCi0gIGF1dG8gcGFkID0gWyZw
YWRCdWYsICZjYiwgcGFkQnVmU2l6ZV0oaW50IGNoYXJzKSB7Ci0gICAgd2hpbGUgKGNoYXJzKSB7
Ci0gICAgICBpbnQgbiA9IHN0ZDo6bWluKGNoYXJzLCBwYWRCdWZTaXplKTsKLSAgICAgIGNiKFN0
cmluZ1BpZWNlKHBhZEJ1Ziwgc2l6ZV90KG4pKSk7Ci0gICAgICBjaGFycyAtPSBuOwotICAgIH0K
LSAgfTsKLQotICBpbnQgcGFkUmVtYWluaW5nID0gMDsKLSAgaWYgKGFyZy53aWR0aCAhPSBGb3Jt
YXRBcmc6OmtEZWZhdWx0V2lkdGggJiYKLSAgICAgIHZhbC5zaXplKCkgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGFyZy53aWR0aCkpIHsKLSAgICBjaGFyIGZpbGwgPSBhcmcuZmlsbCA9PSBGb3JtYXRB
cmc6OmtEZWZhdWx0RmlsbCA/ICcgJyA6IGFyZy5maWxsOwotICAgIGludCBwYWRDaGFycyA9IHN0
YXRpY19jYXN0PGludD4oYXJnLndpZHRoIC0gdmFsLnNpemUoKSk7Ci0gICAgbWVtc2V0KHBhZEJ1
ZiwgZmlsbCwgc2l6ZV90KHN0ZDo6bWluKHBhZEJ1ZlNpemUsIHBhZENoYXJzKSkpOwotCi0gICAg
c3dpdGNoIChhcmcuYWxpZ24pIHsKLSAgICAgIGNhc2UgRm9ybWF0QXJnOjpBbGlnbjo6REVGQVVM
VDoKLSAgICAgIGNhc2UgRm9ybWF0QXJnOjpBbGlnbjo6TEVGVDoKLSAgICAgICAgcGFkUmVtYWlu
aW5nID0gcGFkQ2hhcnM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGb3JtYXRBcmc6OkFs
aWduOjpDRU5URVI6Ci0gICAgICAgIHBhZChwYWRDaGFycyAvIDIpOwotICAgICAgICBwYWRSZW1h
aW5pbmcgPSBwYWRDaGFycyAtIHBhZENoYXJzIC8gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEZvcm1hdEFyZzo6QWxpZ246OlJJR0hUOgotICAgICAgY2FzZSBGb3JtYXRBcmc6OkFsaWdu
OjpQQURfQUZURVJfU0lHTjoKLSAgICAgICAgcGFkKHBhZENoYXJzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBhYm9ydCgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gIH0KLQotICBjYih2YWwpOwotCi0gIGlmIChwYWRSZW1haW5pbmcpIHsKLSAgICBwYWQocGFk
UmVtYWluaW5nKTsKLSAgfQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgRm9ybWF0Q2FsbGJhY2s+Ci12
b2lkIGZvcm1hdE51bWJlcigKLSAgICBTdHJpbmdQaWVjZSB2YWwsCi0gICAgaW50IHByZWZpeExl
biwKLSAgICBGb3JtYXRBcmcmIGFyZywKLSAgICBGb3JtYXRDYWxsYmFjayYgY2IpIHsKLSAgLy8g
cHJlY2lzaW9uIG1lYW5zIHNvbWV0aGluZyBkaWZmZXJlbnQgZm9yIG51bWJlcnMKLSAgYXJnLnBy
ZWNpc2lvbiA9IEZvcm1hdEFyZzo6a0RlZmF1bHRQcmVjaXNpb247Ci0gIGlmIChhcmcuYWxpZ24g
PT0gRm9ybWF0QXJnOjpBbGlnbjo6REVGQVVMVCkgewotICAgIGFyZy5hbGlnbiA9IEZvcm1hdEFy
Zzo6QWxpZ246OlJJR0hUOwotICB9IGVsc2UgaWYgKHByZWZpeExlbiAmJiBhcmcuYWxpZ24gPT0g
Rm9ybWF0QXJnOjpBbGlnbjo6UEFEX0FGVEVSX1NJR04pIHsKLSAgICAvLyBTcGxpdCBvZmYgdGhl
IHByZWZpeCwgdGhlbiBkbyBhbnkgcGFkZGluZyBpZiBuZWNlc3NhcnkKLSAgICBjYih2YWwuc3Vi
cGllY2UoMCwgc2l6ZV90KHByZWZpeExlbikpKTsKLSAgICB2YWwuYWR2YW5jZShzaXplX3QocHJl
Zml4TGVuKSk7Ci0gICAgYXJnLndpZHRoID0gc3RkOjptYXgoYXJnLndpZHRoIC0gcHJlZml4TGVu
LCAwKTsKLSAgfQotICBmb3JtYXRfdmFsdWU6OmZvcm1hdFN0cmluZyh2YWwsIGFyZywgY2IpOwot
fQotCi10ZW1wbGF0ZSA8Ci0gICAgY2xhc3MgRm9ybWF0Q2FsbGJhY2ssCi0gICAgY2xhc3MgRGVy
aXZlZCwKLSAgICBib29sIGNvbnRhaW5lck1vZGUsCi0gICAgY2xhc3MuLi4gQXJncz4KLXZvaWQg
Zm9ybWF0Rm9ybWF0dGVyKAotICAgIGNvbnN0IEJhc2VGb3JtYXR0ZXI8RGVyaXZlZCwgY29udGFp
bmVyTW9kZSwgQXJncy4uLj4mIGZvcm1hdHRlciwKLSAgICBGb3JtYXRBcmcmIGFyZywKLSAgICBG
b3JtYXRDYWxsYmFjayYgY2IpIHsKLSAgaWYgKGFyZy53aWR0aCA9PSBGb3JtYXRBcmc6OmtEZWZh
dWx0V2lkdGggJiYKLSAgICAgIGFyZy5wcmVjaXNpb24gPT0gRm9ybWF0QXJnOjprRGVmYXVsdFBy
ZWNpc2lvbikgewotICAgIC8vIG5vdGhpbmcgdG8gZG8KLSAgICBmb3JtYXR0ZXIoY2IpOwotICB9
IGVsc2UgaWYgKAotICAgICAgYXJnLmFsaWduICE9IEZvcm1hdEFyZzo6QWxpZ246OkxFRlQgJiYK
LSAgICAgIGFyZy5hbGlnbiAhPSBGb3JtYXRBcmc6OkFsaWduOjpERUZBVUxUKSB7Ci0gICAgLy8g
V2UgY2FuIG9ubHkgYXZvaWQgY3JlYXRpbmcgYSB0ZW1wb3Jhcnkgc3RyaW5nIGlmIHdlIGFsaWdu
IGxlZnQsCi0gICAgLy8gYXMgd2UnZCBuZWVkIHRvIGtub3cgdGhlIHNpemUgYmVmb3JlaGFuZCBv
dGhlcndpc2UKLSAgICBmb3JtYXRfdmFsdWU6OmZvcm1hdFN0cmluZyhmb3JtYXR0ZXIuZmJzdHIo
KSwgYXJnLCBjYik7Ci0gIH0gZWxzZSB7Ci0gICAgYXV0byBmbiA9IFsmYXJnLCAmY2JdKFN0cmlu
Z1BpZWNlIHNwKSBtdXRhYmxlIHsKLSAgICAgIGludCBzeiA9IHN0YXRpY19jYXN0PGludD4oc3Au
c2l6ZSgpKTsKLSAgICAgIGlmIChhcmcucHJlY2lzaW9uICE9IEZvcm1hdEFyZzo6a0RlZmF1bHRQ
cmVjaXNpb24pIHsKLSAgICAgICAgc3ogPSBzdGQ6Om1pbihhcmcucHJlY2lzaW9uLCBzeik7Ci0g
ICAgICAgIHNwLnJlc2V0KHNwLmRhdGEoKSwgc2l6ZV90KHN6KSk7Ci0gICAgICAgIGFyZy5wcmVj
aXNpb24gLT0gc3o7Ci0gICAgICB9Ci0gICAgICBpZiAoIXNwLmVtcHR5KCkpIHsKLSAgICAgICAg
Y2Ioc3ApOwotICAgICAgICBpZiAoYXJnLndpZHRoICE9IEZvcm1hdEFyZzo6a0RlZmF1bHRXaWR0
aCkgewotICAgICAgICAgIGFyZy53aWR0aCA9IHN0ZDo6bWF4KGFyZy53aWR0aCAtIHN6LCAwKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH07Ci0gICAgZm9ybWF0dGVyKGZuKTsKLSAgICBpZiAo
YXJnLndpZHRoICE9IEZvcm1hdEFyZzo6a0RlZmF1bHRXaWR0aCAmJiBhcmcud2lkdGggIT0gMCkg
ewotICAgICAgLy8gUmVseSBvbiBmb3JtYXRTdHJpbmcgdG8gZG8gYXBwcm9wcmlhdGUgcGFkZGlu
ZwotICAgICAgZm9ybWF0X3ZhbHVlOjpmb3JtYXRTdHJpbmcoU3RyaW5nUGllY2UoKSwgYXJnLCBj
Yik7Ci0gICAgfQotICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGZvcm1hdF92YWx1ZQotCi0vLyBE
ZWZpbml0aW9ucyBmb3IgZGVmYXVsdCBGb3JtYXRWYWx1ZSBjbGFzc2VzCi0KLS8vIEludGVncmFs
IHR5cGVzIChleGNlcHQgYm9vbCkKLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xhc3MgRm9ybWF0VmFs
dWU8Ci0gICAgVCwKLSAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgc3RkOjpp
c19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWU+Ojp0
eXBlPiB7Ci0gcHVibGljOgotICBleHBsaWNpdCBGb3JtYXRWYWx1ZShUIHZhbCkgOiB2YWxfKHZh
bCkge30KLQotICBUIGdldFZhbHVlKCkgY29uc3QgewotICAgIHJldHVybiB2YWxfOwotICB9Ci0K
LSAgdGVtcGxhdGUgPGNsYXNzIEZvcm1hdENhbGxiYWNrPgotICB2b2lkIGZvcm1hdChGb3JtYXRB
cmcmIGFyZywgRm9ybWF0Q2FsbGJhY2smIGNiKSBjb25zdCB7Ci0gICAgYXJnLnZhbGlkYXRlKEZv
cm1hdEFyZzo6VHlwZTo6SU5URUdFUik7Ci0gICAgZG9Gb3JtYXQoYXJnLCBjYik7Ci0gIH0KLQot
ICB0ZW1wbGF0ZSA8Y2xhc3MgRm9ybWF0Q2FsbGJhY2s+Ci0gIHZvaWQgZG9Gb3JtYXQoRm9ybWF0
QXJnJiBhcmcsIEZvcm1hdENhbGxiYWNrJiBjYikgY29uc3QgewotICAgIGNoYXIgcHJlc2VudGF0
aW9uID0gYXJnLnByZXNlbnRhdGlvbjsKLSAgICBpZiAocHJlc2VudGF0aW9uID09IEZvcm1hdEFy
Zzo6a0RlZmF1bHRQcmVzZW50YXRpb24pIHsKLSAgICAgIHByZXNlbnRhdGlvbiA9IHN0ZDo6aXNf
c2FtZTxULCBjaGFyPjo6dmFsdWUgPyAnYycgOiAnZCc7Ci0gICAgfQotCi0gICAgLy8gRG8gYWxs
IHdvcmsgYXMgdW5zaWduZWQsIHdlJ2xsIGFkZCB0aGUgcHJlZml4ICgnMCcgb3IgJzB4JyBpZiBu
ZWNlc3NhcnkpCi0gICAgLy8gYW5kIHNpZ24gb3Vyc2VsdmVzLgotICAgIHR5cGVkZWYgdHlwZW5h
bWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlIFVUOwotICAgIFVUIHV2YWw7Ci0gICAgY2hh
ciBzaWduOwotICAgIGlmIChzdGQ6OmlzX3NpZ25lZDxUPjo6dmFsdWUpIHsKLSAgICAgIGlmIChm
b2xseTo6aXNfbmVnYXRpdmUodmFsXykpIHsKLSAgICAgICAgdXZhbCA9IFVUKC1zdGF0aWNfY2Fz
dDxVVD4odmFsXykpOwotICAgICAgICBzaWduID0gJy0nOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgdXZhbCA9IHN0YXRpY19jYXN0PFVUPih2YWxfKTsKLSAgICAgICAgc3dpdGNoIChhcmcuc2ln
bikgewotICAgICAgICAgIGNhc2UgRm9ybWF0QXJnOjpTaWduOjpQTFVTX09SX01JTlVTOgotICAg
ICAgICAgICAgc2lnbiA9ICcrJzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
Rm9ybWF0QXJnOjpTaWduOjpTUEFDRV9PUl9NSU5VUzoKLSAgICAgICAgICAgIHNpZ24gPSAnICc7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc2ln
biA9ICdcMCc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICB1dmFsID0gc3RhdGljX2Nhc3Q8VVQ+KHZhbF8pOwotICAgICAgc2lnbiA9
ICdcMCc7Ci0KLSAgICAgIGFyZy5lbmZvcmNlKAotICAgICAgICAgIGFyZy5zaWduID09IEZvcm1h
dEFyZzo6U2lnbjo6REVGQVVMVCwKLSAgICAgICAgICAic2lnbiBzcGVjaWZpY2F0aW9ucyBub3Qg
YWxsb3dlZCBmb3IgdW5zaWduZWQgdmFsdWVzIik7Ci0gICAgfQotCi0gICAgLy8gbWF4IG9mOgot
ICAgIC8vICN4OiAweCBwcmVmaXggKyAxNiBieXRlcyA9IDE4IGJ5dGVzCi0gICAgLy8gI286IDAg
cHJlZml4ICsgMjIgYnl0ZXMgPSAyMyBieXRlcwotICAgIC8vICNiOiAwYiBwcmVmaXggKyA2NCBi
eXRlcyA9IDY1IGJ5dGVzCi0gICAgLy8gLGQ6IDI2IGJ5dGVzIChpbmNsdWRpbmcgdGhvdXNhbmRz
IHNlcGFyYXRvcnMhKQotICAgIC8vICsgbnVsIHRlcm1pbmF0b3IKLSAgICAvLyArIDMgZm9yIHNp
Z24gYW5kIHByZWZpeCBzaGVuYW5pZ2FucyAoc2VlIGJlbG93KQotICAgIGNvbnN0ZXhwciBzaXpl
X3QgdmFsQnVmU2l6ZSA9IDY5OwotICAgIGNoYXIgdmFsQnVmW3ZhbEJ1ZlNpemVdOwotICAgIGNo
YXIqIHZhbEJ1ZkJlZ2luID0gbnVsbHB0cjsKLSAgICBjaGFyKiB2YWxCdWZFbmQgPSBudWxscHRy
OwotCi0gICAgaW50IHByZWZpeExlbiA9IDA7Ci0gICAgc3dpdGNoIChwcmVzZW50YXRpb24pIHsK
LSAgICAgIGNhc2UgJ24nOiB7Ci0gICAgICAgIGFyZy5lbmZvcmNlKAotICAgICAgICAgICAgIWFy
Zy5iYXNlUHJlZml4LAotICAgICAgICAgICAgImJhc2UgcHJlZml4IG5vdCBhbGxvd2VkIHdpdGgg
JyIsCi0gICAgICAgICAgICBwcmVzZW50YXRpb24sCi0gICAgICAgICAgICAiJyBzcGVjaWZpZXIi
KTsKLQotICAgICAgICBhcmcuZW5mb3JjZSgKLSAgICAgICAgICAgICFhcmcudGhvdXNhbmRzU2Vw
YXJhdG9yLAotICAgICAgICAgICAgImNhbm5vdCB1c2UgJywnIHdpdGggdGhlICciLAotICAgICAg
ICAgICAgcHJlc2VudGF0aW9uLAotICAgICAgICAgICAgIicgc3BlY2lmaWVyIik7Ci0KLSAgICAg
ICAgdmFsQnVmQmVnaW4gPSB2YWxCdWYgKyAzOyAvLyByb29tIGZvciBzaWduIGFuZCBiYXNlIHBy
ZWZpeAotI2lmIGRlZmluZWQoX19BTkRST0lEX18pCi0gICAgICAgIGludCBsZW4gPSBzbnByaW50
ZigKLSAgICAgICAgICAgIHZhbEJ1ZkJlZ2luLAotICAgICAgICAgICAgKHZhbEJ1ZiArIHZhbEJ1
ZlNpemUpIC0gdmFsQnVmQmVnaW4sCi0gICAgICAgICAgICAiJSIgUFJJdU1BWCwKLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHVpbnRtYXhfdD4odXZhbCkpOwotI2Vsc2UKLSAgICAgICAgaW50IGxl
biA9IHNucHJpbnRmKAotICAgICAgICAgICAgdmFsQnVmQmVnaW4sCi0gICAgICAgICAgICBzaXpl
X3QoKHZhbEJ1ZiArIHZhbEJ1ZlNpemUpIC0gdmFsQnVmQmVnaW4pLAotICAgICAgICAgICAgIiVq
dSIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KHV2YWwpKTsKLSNlbmRpZgot
ICAgICAgICAvLyB2YWxCdWZTaXplIHNob3VsZCBhbHdheXMgYmUgYmlnIGVub3VnaCwgc28gdGhp
cyBzaG91bGQgbmV2ZXIKLSAgICAgICAgLy8gaGFwcGVuLgotICAgICAgICBhc3NlcnQobGVuIDwg
dmFsQnVmICsgdmFsQnVmU2l6ZSAtIHZhbEJ1ZkJlZ2luKTsKLSAgICAgICAgdmFsQnVmRW5kID0g
dmFsQnVmQmVnaW4gKyBsZW47Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSAn
ZCc6Ci0gICAgICAgIGFyZy5lbmZvcmNlKAotICAgICAgICAgICAgIWFyZy5iYXNlUHJlZml4LAot
ICAgICAgICAgICAgImJhc2UgcHJlZml4IG5vdCBhbGxvd2VkIHdpdGggJyIsCi0gICAgICAgICAg
ICBwcmVzZW50YXRpb24sCi0gICAgICAgICAgICAiJyBzcGVjaWZpZXIiKTsKLSAgICAgICAgdmFs
QnVmQmVnaW4gPSB2YWxCdWYgKyAzOyAvLyByb29tIGZvciBzaWduIGFuZCBiYXNlIHByZWZpeAot
Ci0gICAgICAgIC8vIFVzZSB1aW50VG9CdWZmZXIsIGZhc3RlciB0aGFuIHNwcmludGYKLSAgICAg
ICAgdmFsQnVmRW5kID0gdmFsQnVmQmVnaW4gKyB1aW50NjRUb0J1ZmZlclVuc2FmZSh1dmFsLCB2
YWxCdWZCZWdpbik7Ci0gICAgICAgIGlmIChhcmcudGhvdXNhbmRzU2VwYXJhdG9yKSB7Ci0gICAg
ICAgICAgZGV0YWlsOjppbnNlcnRUaG91c2FuZHNHcm91cGluZ1Vuc2FmZSh2YWxCdWZCZWdpbiwg
JnZhbEJ1ZkVuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICdjJzoK
LSAgICAgICAgYXJnLmVuZm9yY2UoCi0gICAgICAgICAgICAhYXJnLmJhc2VQcmVmaXgsCi0gICAg
ICAgICAgICAiYmFzZSBwcmVmaXggbm90IGFsbG93ZWQgd2l0aCAnIiwKLSAgICAgICAgICAgIHBy
ZXNlbnRhdGlvbiwKLSAgICAgICAgICAgICInIHNwZWNpZmllciIpOwotICAgICAgICBhcmcuZW5m
b3JjZSgKLSAgICAgICAgICAgICFhcmcudGhvdXNhbmRzU2VwYXJhdG9yLAotICAgICAgICAgICAg
InRob3VzYW5kcyBzZXBhcmF0b3IgKCcsJykgbm90IGFsbG93ZWQgd2l0aCAnIiwKLSAgICAgICAg
ICAgIHByZXNlbnRhdGlvbiwKLSAgICAgICAgICAgICInIHNwZWNpZmllciIpOwotICAgICAgICB2
YWxCdWZCZWdpbiA9IHZhbEJ1ZiArIDM7Ci0gICAgICAgICp2YWxCdWZCZWdpbiA9IHN0YXRpY19j
YXN0PGNoYXI+KHV2YWwpOwotICAgICAgICB2YWxCdWZFbmQgPSB2YWxCdWZCZWdpbiArIDE7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAnbyc6Ci0gICAgICBjYXNlICdPJzoKLSAgICAgICAg
YXJnLmVuZm9yY2UoCi0gICAgICAgICAgICAhYXJnLnRob3VzYW5kc1NlcGFyYXRvciwKLSAgICAg
ICAgICAgICJ0aG91c2FuZHMgc2VwYXJhdG9yICgnLCcpIG5vdCBhbGxvd2VkIHdpdGggJyIsCi0g
ICAgICAgICAgICBwcmVzZW50YXRpb24sCi0gICAgICAgICAgICAiJyBzcGVjaWZpZXIiKTsKLSAg
ICAgICAgdmFsQnVmRW5kID0gdmFsQnVmICsgdmFsQnVmU2l6ZSAtIDE7Ci0gICAgICAgIHZhbEJ1
ZkJlZ2luID0KLSAgICAgICAgICAgIHZhbEJ1ZiArIGRldGFpbDo6dWludFRvT2N0YWwodmFsQnVm
LCB2YWxCdWZTaXplIC0gMSwgdXZhbCk7Ci0gICAgICAgIGlmIChhcmcuYmFzZVByZWZpeCkgewot
ICAgICAgICAgICotLXZhbEJ1ZkJlZ2luID0gJzAnOwotICAgICAgICAgIHByZWZpeExlbiA9IDE7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICd4JzoKLSAgICAgICAgYXJn
LmVuZm9yY2UoCi0gICAgICAgICAgICAhYXJnLnRob3VzYW5kc1NlcGFyYXRvciwKLSAgICAgICAg
ICAgICJ0aG91c2FuZHMgc2VwYXJhdG9yICgnLCcpIG5vdCBhbGxvd2VkIHdpdGggJyIsCi0gICAg
ICAgICAgICBwcmVzZW50YXRpb24sCi0gICAgICAgICAgICAiJyBzcGVjaWZpZXIiKTsKLSAgICAg
ICAgdmFsQnVmRW5kID0gdmFsQnVmICsgdmFsQnVmU2l6ZSAtIDE7Ci0gICAgICAgIHZhbEJ1ZkJl
Z2luID0KLSAgICAgICAgICAgIHZhbEJ1ZiArIGRldGFpbDo6dWludFRvSGV4TG93ZXIodmFsQnVm
LCB2YWxCdWZTaXplIC0gMSwgdXZhbCk7Ci0gICAgICAgIGlmIChhcmcuYmFzZVByZWZpeCkgewot
ICAgICAgICAgICotLXZhbEJ1ZkJlZ2luID0gJ3gnOwotICAgICAgICAgICotLXZhbEJ1ZkJlZ2lu
ID0gJzAnOwotICAgICAgICAgIHByZWZpeExlbiA9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlICdYJzoKLSAgICAgICAgYXJnLmVuZm9yY2UoCi0gICAgICAgICAgICAh
YXJnLnRob3VzYW5kc1NlcGFyYXRvciwKLSAgICAgICAgICAgICJ0aG91c2FuZHMgc2VwYXJhdG9y
ICgnLCcpIG5vdCBhbGxvd2VkIHdpdGggJyIsCi0gICAgICAgICAgICBwcmVzZW50YXRpb24sCi0g
ICAgICAgICAgICAiJyBzcGVjaWZpZXIiKTsKLSAgICAgICAgdmFsQnVmRW5kID0gdmFsQnVmICsg
dmFsQnVmU2l6ZSAtIDE7Ci0gICAgICAgIHZhbEJ1ZkJlZ2luID0KLSAgICAgICAgICAgIHZhbEJ1
ZiArIGRldGFpbDo6dWludFRvSGV4VXBwZXIodmFsQnVmLCB2YWxCdWZTaXplIC0gMSwgdXZhbCk7
Ci0gICAgICAgIGlmIChhcmcuYmFzZVByZWZpeCkgewotICAgICAgICAgICotLXZhbEJ1ZkJlZ2lu
ID0gJ1gnOwotICAgICAgICAgICotLXZhbEJ1ZkJlZ2luID0gJzAnOwotICAgICAgICAgIHByZWZp
eExlbiA9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICdiJzoKLSAg
ICAgIGNhc2UgJ0InOgotICAgICAgICBhcmcuZW5mb3JjZSgKLSAgICAgICAgICAgICFhcmcudGhv
dXNhbmRzU2VwYXJhdG9yLAotICAgICAgICAgICAgInRob3VzYW5kcyBzZXBhcmF0b3IgKCcsJykg
bm90IGFsbG93ZWQgd2l0aCAnIiwKLSAgICAgICAgICAgIHByZXNlbnRhdGlvbiwKLSAgICAgICAg
ICAgICInIHNwZWNpZmllciIpOwotICAgICAgICB2YWxCdWZFbmQgPSB2YWxCdWYgKyB2YWxCdWZT
aXplIC0gMTsKLSAgICAgICAgdmFsQnVmQmVnaW4gPQotICAgICAgICAgICAgdmFsQnVmICsgZGV0
YWlsOjp1aW50VG9CaW5hcnkodmFsQnVmLCB2YWxCdWZTaXplIC0gMSwgdXZhbCk7Ci0gICAgICAg
IGlmIChhcmcuYmFzZVByZWZpeCkgewotICAgICAgICAgICotLXZhbEJ1ZkJlZ2luID0gcHJlc2Vu
dGF0aW9uOyAvLyAwYiBvciAwQgotICAgICAgICAgICotLXZhbEJ1ZkJlZ2luID0gJzAnOwotICAg
ICAgICAgIHByZWZpeExlbiA9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICBhcmcuZXJyb3IoImludmFsaWQgc3BlY2lmaWVyICciLCBwcmVzZW50
YXRpb24sICInIik7Ci0gICAgfQotCi0gICAgaWYgKHNpZ24pIHsKLSAgICAgICotLXZhbEJ1ZkJl
Z2luID0gc2lnbjsKLSAgICAgICsrcHJlZml4TGVuOwotICAgIH0KLQotICAgIGZvcm1hdF92YWx1
ZTo6Zm9ybWF0TnVtYmVyKAotICAgICAgICBTdHJpbmdQaWVjZSh2YWxCdWZCZWdpbiwgdmFsQnVm
RW5kKSwgcHJlZml4TGVuLCBhcmcsIGNiKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgVCB2YWxfOwot
fTsKLQotLy8gQm9vbAotdGVtcGxhdGUgPD4KLWNsYXNzIEZvcm1hdFZhbHVlPGJvb2w+IHsKLSBw
dWJsaWM6Ci0gIGV4cGxpY2l0IEZvcm1hdFZhbHVlKGJvb2wgdmFsKSA6IHZhbF8odmFsKSB7fQot
Ci0gIHRlbXBsYXRlIDxjbGFzcyBGb3JtYXRDYWxsYmFjaz4KLSAgdm9pZCBmb3JtYXQoRm9ybWF0
QXJnJiBhcmcsIEZvcm1hdENhbGxiYWNrJiBjYikgY29uc3QgewotICAgIGlmIChhcmcucHJlc2Vu
dGF0aW9uID09IEZvcm1hdEFyZzo6a0RlZmF1bHRQcmVzZW50YXRpb24pIHsKLSAgICAgIGFyZy52
YWxpZGF0ZShGb3JtYXRBcmc6OlR5cGU6Ok9USEVSKTsKLSAgICAgIGZvcm1hdF92YWx1ZTo6Zm9y
bWF0U3RyaW5nKHZhbF8gPyAidHJ1ZSIgOiAiZmFsc2UiLCBhcmcsIGNiKTsKLSAgICB9IGVsc2Ug
eyAvLyBudW1iZXIKLSAgICAgIEZvcm1hdFZhbHVlPGludD4odmFsXykuZm9ybWF0KGFyZywgY2Ip
OwotICAgIH0KLSAgfQotCi0gcHJpdmF0ZToKLSAgYm9vbCB2YWxfOwotfTsKLQotLy8gZG91Ymxl
Ci10ZW1wbGF0ZSA8PgotY2xhc3MgRm9ybWF0VmFsdWU8ZG91YmxlPiB7Ci0gcHVibGljOgotICBl
eHBsaWNpdCBGb3JtYXRWYWx1ZShkb3VibGUgdmFsKSA6IHZhbF8odmFsKSB7fQotCi0gIHRlbXBs
YXRlIDxjbGFzcyBGb3JtYXRDYWxsYmFjaz4KLSAgdm9pZCBmb3JtYXQoRm9ybWF0QXJnJiBhcmcs
IEZvcm1hdENhbGxiYWNrJiBjYikgY29uc3QgewotICAgIGZic3RyaW5nIHBpZWNlOwotICAgIGlu
dCBwcmVmaXhMZW47Ci0gICAgZm9ybWF0SGVscGVyKHBpZWNlLCBwcmVmaXhMZW4sIGFyZyk7Ci0g
ICAgZm9ybWF0X3ZhbHVlOjpmb3JtYXROdW1iZXIocGllY2UsIHByZWZpeExlbiwgYXJnLCBjYik7
Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHZvaWQgZm9ybWF0SGVscGVyKGZic3RyaW5nJiBwaWVjZSwg
aW50JiBwcmVmaXhMZW4sIEZvcm1hdEFyZyYgYXJnKSBjb25zdDsKLQotICBkb3VibGUgdmFsXzsK
LX07Ci0KLS8vIGZsb2F0IChkZWZlciB0byBkb3VibGUpCi10ZW1wbGF0ZSA8PgotY2xhc3MgRm9y
bWF0VmFsdWU8ZmxvYXQ+IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEZvcm1hdFZhbHVlKGZsb2F0
IHZhbCkgOiB2YWxfKHZhbCkge30KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgRm9ybWF0Q2FsbGJhY2s+
Ci0gIHZvaWQgZm9ybWF0KEZvcm1hdEFyZyYgYXJnLCBGb3JtYXRDYWxsYmFjayYgY2IpIGNvbnN0
IHsKLSAgICBGb3JtYXRWYWx1ZTxkb3VibGU+KHZhbF8pLmZvcm1hdChhcmcsIGNiKTsKLSAgfQot
Ci0gcHJpdmF0ZToKLSAgZmxvYXQgdmFsXzsKLX07Ci0KLS8vIFN0cmluZy15IHR5cGVzIChpbXBs
aWNpdGx5IGNvbnZlcnRpYmxlIHRvIFN0cmluZ1BpZWNlLCBleGNlcHQgY2hhciopCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4KLWNsYXNzIEZvcm1hdFZhbHVlPAotICAgIFQsCi0gICAgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8Ci0gICAgICAgICghc3RkOjppc19wb2ludGVyPFQ+Ojp2YWx1ZSB8fAotICAg
ICAgICAgIXN0ZDo6aXNfc2FtZTwKLSAgICAgICAgICAgICBjaGFyLAotICAgICAgICAgICAgIHR5
cGVuYW1lIHN0ZDo6ZGVjYXk8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxUPjo6dHlwZT46
OnR5cGU+OjoKLSAgICAgICAgICAgICB2YWx1ZSkgJiYKLSAgICAgICAgc3RkOjppc19jb252ZXJ0
aWJsZTxULCBTdHJpbmdQaWVjZT46OnZhbHVlPjo6dHlwZT4gewotIHB1YmxpYzoKLSAgZXhwbGlj
aXQgRm9ybWF0VmFsdWUoU3RyaW5nUGllY2UgdmFsKSA6IHZhbF8odmFsKSB7fQotCi0gIHRlbXBs
YXRlIDxjbGFzcyBGb3JtYXRDYWxsYmFjaz4KLSAgdm9pZCBmb3JtYXQoRm9ybWF0QXJnJiBhcmcs
IEZvcm1hdENhbGxiYWNrJiBjYikgY29uc3QgewotICAgIGlmIChhcmcua2V5RW1wdHkoKSkgewot
ICAgICAgYXJnLnZhbGlkYXRlKEZvcm1hdEFyZzo6VHlwZTo6T1RIRVIpOwotICAgICAgYXJnLmVu
Zm9yY2UoCi0gICAgICAgICAgYXJnLnByZXNlbnRhdGlvbiA9PSBGb3JtYXRBcmc6OmtEZWZhdWx0
UHJlc2VudGF0aW9uIHx8Ci0gICAgICAgICAgICAgIGFyZy5wcmVzZW50YXRpb24gPT0gJ3MnLAot
ICAgICAgICAgICJpbnZhbGlkIHNwZWNpZmllciAnIiwKLSAgICAgICAgICBhcmcucHJlc2VudGF0
aW9uLAotICAgICAgICAgICInIik7Ci0gICAgICBmb3JtYXRfdmFsdWU6OmZvcm1hdFN0cmluZyh2
YWxfLCBhcmcsIGNiKTsKLSAgICB9IGVsc2UgewotICAgICAgRm9ybWF0VmFsdWU8Y2hhcj4odmFs
Xy5hdChzaXplX3QoYXJnLnNwbGl0SW50S2V5KCkpKSkuZm9ybWF0KGFyZywgY2IpOwotICAgIH0K
LSAgfQotCi0gcHJpdmF0ZToKLSAgU3RyaW5nUGllY2UgdmFsXzsKLX07Ci0KLS8vIE51bGwKLXRl
bXBsYXRlIDw+Ci1jbGFzcyBGb3JtYXRWYWx1ZTxzdGQ6Om51bGxwdHJfdD4gewotIHB1YmxpYzoK
LSAgZXhwbGljaXQgRm9ybWF0VmFsdWUoc3RkOjpudWxscHRyX3QpIHt9Ci0KLSAgdGVtcGxhdGUg
PGNsYXNzIEZvcm1hdENhbGxiYWNrPgotICB2b2lkIGZvcm1hdChGb3JtYXRBcmcmIGFyZywgRm9y
bWF0Q2FsbGJhY2smIGNiKSBjb25zdCB7Ci0gICAgYXJnLnZhbGlkYXRlKEZvcm1hdEFyZzo6VHlw
ZTo6T1RIRVIpOwotICAgIGFyZy5lbmZvcmNlKAotICAgICAgICBhcmcucHJlc2VudGF0aW9uID09
IEZvcm1hdEFyZzo6a0RlZmF1bHRQcmVzZW50YXRpb24sCi0gICAgICAgICJpbnZhbGlkIHNwZWNp
ZmllciAnIiwKLSAgICAgICAgYXJnLnByZXNlbnRhdGlvbiwKLSAgICAgICAgIiciKTsKLSAgICBm
b3JtYXRfdmFsdWU6OmZvcm1hdFN0cmluZygiKG51bGwpIiwgYXJnLCBjYik7Ci0gIH0KLX07Ci0K
LS8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2YgRm9ybWF0VmFsdWUgZm9yIGNoYXIqCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4KLWNsYXNzIEZvcm1hdFZhbHVlPAotICAgIFQqLAotICAgIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICBzdGQ6OmlzX3NhbWU8Y2hhciwgdHlwZW5hbWUgc3Rk
OjpkZWNheTxUPjo6dHlwZT46OnZhbHVlPjo6dHlwZT4gewotIHB1YmxpYzoKLSAgZXhwbGljaXQg
Rm9ybWF0VmFsdWUoVCogdmFsKSA6IHZhbF8odmFsKSB7fQotCi0gIHRlbXBsYXRlIDxjbGFzcyBG
b3JtYXRDYWxsYmFjaz4KLSAgdm9pZCBmb3JtYXQoRm9ybWF0QXJnJiBhcmcsIEZvcm1hdENhbGxi
YWNrJiBjYikgY29uc3QgewotICAgIGlmIChhcmcua2V5RW1wdHkoKSkgewotICAgICAgaWYgKCF2
YWxfKSB7Ci0gICAgICAgIEZvcm1hdFZhbHVlPHN0ZDo6bnVsbHB0cl90PihudWxscHRyKS5mb3Jt
YXQoYXJnLCBjYik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBGb3JtYXRWYWx1ZTxTdHJpbmdQ
aWVjZT4odmFsXykuZm9ybWF0KGFyZywgY2IpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICBGb3JtYXRWYWx1ZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPih2YWxfW2FyZy5zcGxp
dEludEtleSgpXSkKLSAgICAgICAgICAuZm9ybWF0KGFyZywgY2IpOwotICAgIH0KLSAgfQotCi0g
cHJpdmF0ZToKLSAgVCogdmFsXzsKLX07Ci0KLS8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2Yg
Rm9ybWF0VmFsdWUgZm9yIHZvaWQqCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWNsYXNzIEZvcm1hdFZh
bHVlPAotICAgIFQqLAotICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICBzdGQ6
OmlzX3NhbWU8dm9pZCwgdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZT46OnZhbHVlPjo6dHlw
ZT4gewotIHB1YmxpYzoKLSAgZXhwbGljaXQgRm9ybWF0VmFsdWUoVCogdmFsKSA6IHZhbF8odmFs
KSB7fQotCi0gIHRlbXBsYXRlIDxjbGFzcyBGb3JtYXRDYWxsYmFjaz4KLSAgdm9pZCBmb3JtYXQo
Rm9ybWF0QXJnJiBhcmcsIEZvcm1hdENhbGxiYWNrJiBjYikgY29uc3QgewotICAgIGlmICghdmFs
XykgewotICAgICAgRm9ybWF0VmFsdWU8c3RkOjpudWxscHRyX3Q+KG51bGxwdHIpLmZvcm1hdChh
cmcsIGNiKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gUHJpbnQgYXMgYSBwb2ludGVyLCBpbiBo
ZXguCi0gICAgICBhcmcudmFsaWRhdGUoRm9ybWF0QXJnOjpUeXBlOjpPVEhFUik7Ci0gICAgICBh
cmcuZW5mb3JjZSgKLSAgICAgICAgICBhcmcucHJlc2VudGF0aW9uID09IEZvcm1hdEFyZzo6a0Rl
ZmF1bHRQcmVzZW50YXRpb24sCi0gICAgICAgICAgImludmFsaWQgc3BlY2lmaWVyICciLAotICAg
ICAgICAgIGFyZy5wcmVzZW50YXRpb24sCi0gICAgICAgICAgIiciKTsKLSAgICAgIGFyZy5iYXNl
UHJlZml4ID0gdHJ1ZTsKLSAgICAgIGFyZy5wcmVzZW50YXRpb24gPSAneCc7Ci0gICAgICBpZiAo
YXJnLmFsaWduID09IEZvcm1hdEFyZzo6QWxpZ246OkRFRkFVTFQpIHsKLSAgICAgICAgYXJnLmFs
aWduID0gRm9ybWF0QXJnOjpBbGlnbjo6TEVGVDsKLSAgICAgIH0KLSAgICAgIEZvcm1hdFZhbHVl
PHVpbnRwdHJfdD4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHZhbF8pKQotICAgICAgICAg
IC5kb0Zvcm1hdChhcmcsIGNiKTsKLSAgICB9Ci0gIH0KLQotIHByaXZhdGU6Ci0gIFQqIHZhbF87
Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgPSB2b2lkPgotY2xhc3MgVHJ5Rm9ybWF0
VmFsdWUgewotIHB1YmxpYzoKLSAgdGVtcGxhdGUgPGNsYXNzIEZvcm1hdENhbGxiYWNrPgotICBz
dGF0aWMgdm9pZAotICBmb3JtYXRPckZhaWwoVCYgLyogdmFsdWUgKi8sIEZvcm1hdEFyZyYgYXJn
LCBGb3JtYXRDYWxsYmFjayYgLyogY2IgKi8pIHsKLSAgICBhcmcuZXJyb3IoIk5vIGZvcm1hdHRl
ciBhdmFpbGFibGUgZm9yIHRoaXMgdHlwZSIpOwotICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4KLWNsYXNzIFRyeUZvcm1hdFZhbHVlPAotICAgIFQsCi0gICAgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8Ci0gICAgICAgIDAgPCBzaXplb2YoRm9ybWF0VmFsdWU8dHlwZW5hbWUgc3RkOjpkZWNh
eTxUPjo6dHlwZT4pPjo6dHlwZT4gewotIHB1YmxpYzoKLSAgdGVtcGxhdGUgPGNsYXNzIEZvcm1h
dENhbGxiYWNrPgotICBzdGF0aWMgdm9pZCBmb3JtYXRPckZhaWwoVCYgdmFsdWUsIEZvcm1hdEFy
ZyYgYXJnLCBGb3JtYXRDYWxsYmFjayYgY2IpIHsKLSAgICBGb3JtYXRWYWx1ZTx0eXBlbmFtZSBz
dGQ6OmRlY2F5PFQ+Ojp0eXBlPih2YWx1ZSkuZm9ybWF0KGFyZywgY2IpOwotICB9Ci19OwotCi0v
LyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uIG9mIEZvcm1hdFZhbHVlIGZvciBvdGhlciBwb2ludGVy
cwotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1jbGFzcyBGb3JtYXRWYWx1ZTwKLSAgICBUKiwKLSAgICB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgIXN0ZDo6aXNfc2FtZTxjaGFyLCB0eXBl
bmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPjo6dmFsdWUgJiYKLSAgICAgICAgIXN0ZDo6aXNfc2Ft
ZTx2b2lkLCB0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPjo6dmFsdWU+Ojp0eXBlPiB7Ci0g
cHVibGljOgotICBleHBsaWNpdCBGb3JtYXRWYWx1ZShUKiB2YWwpIDogdmFsXyh2YWwpIHt9Ci0K
LSAgdGVtcGxhdGUgPGNsYXNzIEZvcm1hdENhbGxiYWNrPgotICB2b2lkIGZvcm1hdChGb3JtYXRB
cmcmIGFyZywgRm9ybWF0Q2FsbGJhY2smIGNiKSBjb25zdCB7Ci0gICAgaWYgKGFyZy5rZXlFbXB0
eSgpKSB7Ci0gICAgICBGb3JtYXRWYWx1ZTx2b2lkKj4oKHZvaWQqKXZhbF8pLmZvcm1hdChhcmcs
IGNiKTsKLSAgICB9IGVsc2UgewotICAgICAgVHJ5Rm9ybWF0VmFsdWU8VD46OmZvcm1hdE9yRmFp
bCh2YWxfW2FyZy5zcGxpdEludEtleSgpXSwgYXJnLCBjYik7Ci0gICAgfQotICB9Ci0KLSBwcml2
YXRlOgotICBUKiB2YWxfOwotfTsKLQotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLS8vIHN0ZDo6YXJy
YXkKLXRlbXBsYXRlIDxjbGFzcyBULCBzaXplX3QgTj4KLXN0cnVjdCBJbmRleGFibGVUcmFpdHM8
c3RkOjphcnJheTxULCBOPj4KLSAgICA6IHB1YmxpYyBJbmRleGFibGVUcmFpdHNTZXE8c3RkOjph
cnJheTxULCBOPj4ge307Ci0KLS8vIHN0ZDo6dmVjdG9yCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgQT4KLXN0cnVjdCBJbmRleGFibGVUcmFpdHM8c3RkOjp2ZWN0b3I8VCwgQT4+Ci0gICAgOiBw
dWJsaWMgSW5kZXhhYmxlVHJhaXRzU2VxPHN0ZDo6dmVjdG9yPFQsIEE+PiB7fTsKLQotLy8gc3Rk
OjpkZXF1ZQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEE+Ci1zdHJ1Y3QgSW5kZXhhYmxlVHJh
aXRzPHN0ZDo6ZGVxdWU8VCwgQT4+Ci0gICAgOiBwdWJsaWMgSW5kZXhhYmxlVHJhaXRzU2VxPHN0
ZDo6ZGVxdWU8VCwgQT4+IHt9OwotCi0vLyBzdGQ6Om1hcCB3aXRoIGludGVncmFsIGtleXMKLXRl
bXBsYXRlIDxjbGFzcyBLLCBjbGFzcyBULCBjbGFzcyBDLCBjbGFzcyBBPgotc3RydWN0IEluZGV4
YWJsZVRyYWl0czwKLSAgICBzdGQ6Om1hcDxLLCBULCBDLCBBPiwKLSAgICB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX2ludGVncmFsPEs+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgOiBwdWJs
aWMgSW5kZXhhYmxlVHJhaXRzQXNzb2M8c3RkOjptYXA8SywgVCwgQywgQT4+IHt9OwotCi0vLyBz
dGQ6OnVub3JkZXJlZF9tYXAgd2l0aCBpbnRlZ3JhbCBrZXlzCi10ZW1wbGF0ZSA8Y2xhc3MgSywg
Y2xhc3MgVCwgY2xhc3MgSCwgY2xhc3MgRSwgY2xhc3MgQT4KLXN0cnVjdCBJbmRleGFibGVUcmFp
dHM8Ci0gICAgc3RkOjp1bm9yZGVyZWRfbWFwPEssIFQsIEgsIEUsIEE+LAotICAgIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50ZWdyYWw8Sz46OnZhbHVlPjo6dHlwZT4KLSAgICA6
IHB1YmxpYyBJbmRleGFibGVUcmFpdHNBc3NvYzxzdGQ6OnVub3JkZXJlZF9tYXA8SywgVCwgSCwg
RSwgQT4+IHt9OwotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotLy8gUGFydGlhbCBzcGVjaWFs
aXphdGlvbiBvZiBGb3JtYXRWYWx1ZSBmb3IgaW50ZWdlci1pbmRleGFibGUgY29udGFpbmVycwot
dGVtcGxhdGUgPGNsYXNzIFQ+Ci1jbGFzcyBGb3JtYXRWYWx1ZTxULCB0eXBlbmFtZSBkZXRhaWw6
OkluZGV4YWJsZVRyYWl0czxUPjo6ZW5hYmxlZD4gewotIHB1YmxpYzoKLSAgZXhwbGljaXQgRm9y
bWF0VmFsdWUoY29uc3QgVCYgdmFsKSA6IHZhbF8odmFsKSB7fQotCi0gIHRlbXBsYXRlIDxjbGFz
cyBGb3JtYXRDYWxsYmFjaz4KLSAgdm9pZCBmb3JtYXQoRm9ybWF0QXJnJiBhcmcsIEZvcm1hdENh
bGxiYWNrJiBjYikgY29uc3QgewotICAgIEZvcm1hdFZhbHVlPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8
Ci0gICAgICAgIHR5cGVuYW1lIGRldGFpbDo6SW5kZXhhYmxlVHJhaXRzPFQ+Ojp2YWx1ZV90eXBl
Pjo6dHlwZT4oCi0gICAgICAgIGRldGFpbDo6SW5kZXhhYmxlVHJhaXRzPFQ+OjphdCh2YWxfLCBh
cmcuc3BsaXRJbnRLZXkoKSkpCi0gICAgICAgIC5mb3JtYXQoYXJnLCBjYik7Ci0gIH0KLQotIHBy
aXZhdGU6Ci0gIGNvbnN0IFQmIHZhbF87Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVy
LCBjbGFzcyBWYWx1ZT4KLWNsYXNzIEZvcm1hdFZhbHVlPAotICAgIGRldGFpbDo6RGVmYXVsdFZh
bHVlV3JhcHBlcjxDb250YWluZXIsIFZhbHVlPiwKLSAgICB0eXBlbmFtZSBkZXRhaWw6OkluZGV4
YWJsZVRyYWl0czxDb250YWluZXI+OjplbmFibGVkPiB7Ci0gcHVibGljOgotICBleHBsaWNpdCBG
b3JtYXRWYWx1ZShjb25zdCBkZXRhaWw6OkRlZmF1bHRWYWx1ZVdyYXBwZXI8Q29udGFpbmVyLCBW
YWx1ZT4mIHZhbCkKLSAgICAgIDogdmFsXyh2YWwpIHt9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIEZv
cm1hdENhbGxiYWNrPgotICB2b2lkIGZvcm1hdChGb3JtYXRBcmcmIGFyZywgRm9ybWF0Q2FsbGJh
Y2smIGNiKSBjb25zdCB7Ci0gICAgRm9ybWF0VmFsdWU8dHlwZW5hbWUgc3RkOjpkZWNheTwKLSAg
ICAgICAgdHlwZW5hbWUgZGV0YWlsOjpJbmRleGFibGVUcmFpdHM8Q29udGFpbmVyPjo6dmFsdWVf
dHlwZT46OnR5cGU+KAotICAgICAgICBkZXRhaWw6OkluZGV4YWJsZVRyYWl0czxDb250YWluZXI+
OjphdCgKLSAgICAgICAgICAgIHZhbF8uY29udGFpbmVyLCBhcmcuc3BsaXRJbnRLZXkoKSwgdmFs
Xy5kZWZhdWx0VmFsdWUpKQotICAgICAgICAuZm9ybWF0KGFyZywgY2IpOwotICB9Ci0KLSBwcml2
YXRlOgotICBjb25zdCBkZXRhaWw6OkRlZmF1bHRWYWx1ZVdyYXBwZXI8Q29udGFpbmVyLCBWYWx1
ZT4mIHZhbF87Ci19OwotCi1uYW1lc3BhY2UgZGV0YWlsIHsKLQotLy8gRGVmaW5lIGVuYWJsZWQs
IGtleV90eXBlLCBjb252ZXJ0IGZyb20gU3RyaW5nUGllY2UgdG8gdGhlIGtleSB0eXBlcwotLy8g
dGhhdCB3ZSBzdXBwb3J0Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBLZXlGcm9tU3RyaW5n
UGllY2U7Ci0KLS8vIHN0ZDo6c3RyaW5nCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEtleUZyb21TdHJp
bmdQaWVjZTxzdGQ6OnN0cmluZz4gOiBwdWJsaWMgRm9ybWF0VHJhaXRzQmFzZSB7Ci0gIHR5cGVk
ZWYgc3RkOjpzdHJpbmcga2V5X3R5cGU7Ci0gIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KFN0
cmluZ1BpZWNlIHMpIHsKLSAgICByZXR1cm4gcy50b1N0cmluZygpOwotICB9Ci0gIHR5cGVkZWYg
dm9pZCBlbmFibGVkOwotfTsKLQotLy8gZmJzdHJpbmcKLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgS2V5
RnJvbVN0cmluZ1BpZWNlPGZic3RyaW5nPiA6IHB1YmxpYyBGb3JtYXRUcmFpdHNCYXNlIHsKLSAg
dHlwZWRlZiBmYnN0cmluZyBrZXlfdHlwZTsKLSAgc3RhdGljIGZic3RyaW5nIGNvbnZlcnQoU3Ry
aW5nUGllY2UgcykgewotICAgIHJldHVybiBzLnRvRmJzdHJpbmcoKTsKLSAgfQotfTsKLQotLy8g
U3RyaW5nUGllY2UKLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgS2V5RnJvbVN0cmluZ1BpZWNlPFN0cmlu
Z1BpZWNlPiA6IHB1YmxpYyBGb3JtYXRUcmFpdHNCYXNlIHsKLSAgdHlwZWRlZiBTdHJpbmdQaWVj
ZSBrZXlfdHlwZTsKLSAgc3RhdGljIFN0cmluZ1BpZWNlIGNvbnZlcnQoU3RyaW5nUGllY2Ugcykg
ewotICAgIHJldHVybiBzOwotICB9Ci19OwotCi0vLyBCYXNlIGNsYXNzIGZvciBhc3NvY2lhdGl2
ZSB0eXBlcyBrZXllZCBieSBzdHJpbmdzCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBLZXlh
YmxlVHJhaXRzQXNzb2MgOiBwdWJsaWMgRm9ybWF0VHJhaXRzQmFzZSB7Ci0gIHR5cGVkZWYgdHlw
ZW5hbWUgVDo6a2V5X3R5cGUga2V5X3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgVDo6dmFsdWVf
dHlwZTo6c2Vjb25kX3R5cGUgdmFsdWVfdHlwZTsKLSAgc3RhdGljIGNvbnN0IHZhbHVlX3R5cGUm
IGF0KGNvbnN0IFQmIG1hcCwgU3RyaW5nUGllY2Uga2V5KSB7Ci0gICAgcmV0dXJuIG1hcC5hdChL
ZXlGcm9tU3RyaW5nUGllY2U8a2V5X3R5cGU+Ojpjb252ZXJ0KGtleSkpOwotICB9Ci0gIHN0YXRp
YyBjb25zdCB2YWx1ZV90eXBlJgotICBhdChjb25zdCBUJiBtYXAsIFN0cmluZ1BpZWNlIGtleSwg
Y29uc3QgdmFsdWVfdHlwZSYgZGZsdCkgewotICAgIGF1dG8gcG9zID0gbWFwLmZpbmQoS2V5RnJv
bVN0cmluZ1BpZWNlPGtleV90eXBlPjo6Y29udmVydChrZXkpKTsKLSAgICByZXR1cm4gcG9zICE9
IG1hcC5lbmQoKSA/IHBvcy0+c2Vjb25kIDogZGZsdDsKLSAgfQotfTsKLQotLy8gRGVmaW5lIGVu
YWJsZWQsIGtleV90eXBlLCB2YWx1ZV90eXBlLCBhdCgpIGZvciBzdXBwb3J0ZWQgc3RyaW5nLWtl
eWVkCi0vLyB0eXBlcwotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEVuYWJsZWQgPSB2b2lkPgot
c3RydWN0IEtleWFibGVUcmFpdHM7Ci0KLS8vIHN0ZDo6bWFwIHdpdGggc3RyaW5nIGtleQotdGVt
cGxhdGUgPGNsYXNzIEssIGNsYXNzIFQsIGNsYXNzIEMsIGNsYXNzIEE+Ci1zdHJ1Y3QgS2V5YWJs
ZVRyYWl0czwKLSAgICBzdGQ6Om1hcDxLLCBULCBDLCBBPiwKLSAgICB0eXBlbmFtZSBLZXlGcm9t
U3RyaW5nUGllY2U8Sz46OmVuYWJsZWQ+Ci0gICAgOiBwdWJsaWMgS2V5YWJsZVRyYWl0c0Fzc29j
PHN0ZDo6bWFwPEssIFQsIEMsIEE+PiB7fTsKLQotLy8gc3RkOjp1bm9yZGVyZWRfbWFwIHdpdGgg
c3RyaW5nIGtleQotdGVtcGxhdGUgPGNsYXNzIEssIGNsYXNzIFQsIGNsYXNzIEgsIGNsYXNzIEUs
IGNsYXNzIEE+Ci1zdHJ1Y3QgS2V5YWJsZVRyYWl0czwKLSAgICBzdGQ6OnVub3JkZXJlZF9tYXA8
SywgVCwgSCwgRSwgQT4sCi0gICAgdHlwZW5hbWUgS2V5RnJvbVN0cmluZ1BpZWNlPEs+OjplbmFi
bGVkPgotICAgIDogcHVibGljIEtleWFibGVUcmFpdHNBc3NvYzxzdGQ6OnVub3JkZXJlZF9tYXA8
SywgVCwgSCwgRSwgQT4+IHt9OwotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotLy8gUGFydGlh
bCBzcGVjaWFsaXphdGlvbiBvZiBGb3JtYXRWYWx1ZSBmb3Igc3RyaW5nLWtleWVkIGNvbnRhaW5l
cnMKLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xhc3MgRm9ybWF0VmFsdWU8VCwgdHlwZW5hbWUgZGV0
YWlsOjpLZXlhYmxlVHJhaXRzPFQ+OjplbmFibGVkPiB7Ci0gcHVibGljOgotICBleHBsaWNpdCBG
b3JtYXRWYWx1ZShjb25zdCBUJiB2YWwpIDogdmFsXyh2YWwpIHt9Ci0KLSAgdGVtcGxhdGUgPGNs
YXNzIEZvcm1hdENhbGxiYWNrPgotICB2b2lkIGZvcm1hdChGb3JtYXRBcmcmIGFyZywgRm9ybWF0
Q2FsbGJhY2smIGNiKSBjb25zdCB7Ci0gICAgRm9ybWF0VmFsdWU8dHlwZW5hbWUgc3RkOjpkZWNh
eTwKLSAgICAgICAgdHlwZW5hbWUgZGV0YWlsOjpLZXlhYmxlVHJhaXRzPFQ+Ojp2YWx1ZV90eXBl
Pjo6dHlwZT4oCi0gICAgICAgIGRldGFpbDo6S2V5YWJsZVRyYWl0czxUPjo6YXQodmFsXywgYXJn
LnNwbGl0S2V5KCkpKQotICAgICAgICAuZm9ybWF0KGFyZywgY2IpOwotICB9Ci0KLSBwcml2YXRl
OgotICBjb25zdCBUJiB2YWxfOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5lciwgY2xh
c3MgVmFsdWU+Ci1jbGFzcyBGb3JtYXRWYWx1ZTwKLSAgICBkZXRhaWw6OkRlZmF1bHRWYWx1ZVdy
YXBwZXI8Q29udGFpbmVyLCBWYWx1ZT4sCi0gICAgdHlwZW5hbWUgZGV0YWlsOjpLZXlhYmxlVHJh
aXRzPENvbnRhaW5lcj46OmVuYWJsZWQ+IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEZvcm1hdFZh
bHVlKGNvbnN0IGRldGFpbDo6RGVmYXVsdFZhbHVlV3JhcHBlcjxDb250YWluZXIsIFZhbHVlPiYg
dmFsKQotICAgICAgOiB2YWxfKHZhbCkge30KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgRm9ybWF0Q2Fs
bGJhY2s+Ci0gIHZvaWQgZm9ybWF0KEZvcm1hdEFyZyYgYXJnLCBGb3JtYXRDYWxsYmFjayYgY2Ip
IGNvbnN0IHsKLSAgICBGb3JtYXRWYWx1ZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PAotICAgICAgICB0
eXBlbmFtZSBkZXRhaWw6OktleWFibGVUcmFpdHM8Q29udGFpbmVyPjo6dmFsdWVfdHlwZT46OnR5
cGU+KAotICAgICAgICBkZXRhaWw6OktleWFibGVUcmFpdHM8Q29udGFpbmVyPjo6YXQoCi0gICAg
ICAgICAgICB2YWxfLmNvbnRhaW5lciwgYXJnLnNwbGl0S2V5KCksIHZhbF8uZGVmYXVsdFZhbHVl
KSkKLSAgICAgICAgLmZvcm1hdChhcmcsIGNiKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgY29uc3Qg
ZGV0YWlsOjpEZWZhdWx0VmFsdWVXcmFwcGVyPENvbnRhaW5lciwgVmFsdWU+JiB2YWxfOwotfTsK
LQotLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbiBvZiBGb3JtYXRWYWx1ZSBmb3IgcGFpcnMKLXRl
bXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgotY2xhc3MgRm9ybWF0VmFsdWU8c3RkOjpwYWlyPEEs
IEI+PiB7Ci0gcHVibGljOgotICBleHBsaWNpdCBGb3JtYXRWYWx1ZShjb25zdCBzdGQ6OnBhaXI8
QSwgQj4mIHZhbCkgOiB2YWxfKHZhbCkge30KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgRm9ybWF0Q2Fs
bGJhY2s+Ci0gIHZvaWQgZm9ybWF0KEZvcm1hdEFyZyYgYXJnLCBGb3JtYXRDYWxsYmFjayYgY2Ip
IGNvbnN0IHsKLSAgICBpbnQga2V5ID0gYXJnLnNwbGl0SW50S2V5KCk7Ci0gICAgc3dpdGNoIChr
ZXkpIHsKLSAgICAgIGNhc2UgMDoKLSAgICAgICAgRm9ybWF0VmFsdWU8dHlwZW5hbWUgc3RkOjpk
ZWNheTxBPjo6dHlwZT4odmFsXy5maXJzdCkuZm9ybWF0KGFyZywgY2IpOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgMToKLSAgICAgICAgRm9ybWF0VmFsdWU8dHlwZW5hbWUgc3RkOjpkZWNh
eTxCPjo6dHlwZT4odmFsXy5zZWNvbmQpLmZvcm1hdChhcmcsIGNiKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBhcmcuZXJyb3IoImludmFsaWQgaW5kZXggZm9yIHBh
aXIiKTsKLSAgICB9Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGNvbnN0IHN0ZDo6cGFpcjxBLCBCPiYg
dmFsXzsKLX07Ci0KLS8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2YgRm9ybWF0VmFsdWUgZm9y
IHR1cGxlcwotdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci1jbGFzcyBGb3JtYXRWYWx1ZTxzdGQ6
OnR1cGxlPEFyZ3MuLi4+PiB7Ci0gIHR5cGVkZWYgc3RkOjp0dXBsZTxBcmdzLi4uPiBUdXBsZTsK
LQotIHB1YmxpYzoKLSAgZXhwbGljaXQgRm9ybWF0VmFsdWUoY29uc3QgVHVwbGUmIHZhbCkgOiB2
YWxfKHZhbCkge30KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgRm9ybWF0Q2FsbGJhY2s+Ci0gIHZvaWQg
Zm9ybWF0KEZvcm1hdEFyZyYgYXJnLCBGb3JtYXRDYWxsYmFjayYgY2IpIGNvbnN0IHsKLSAgICBp
bnQga2V5ID0gYXJnLnNwbGl0SW50S2V5KCk7Ci0gICAgYXJnLmVuZm9yY2Uoa2V5ID49IDAsICJ0
dXBsZSBpbmRleCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpOwotICAgIGRvRm9ybWF0KHNpemVfdChr
ZXkpLCBhcmcsIGNiKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgdmFsdWVDb3VudCA9IHN0ZDo6dHVwbGVfc2l6ZTxUdXBsZT46OnZhbHVlOwotCi0gIHRlbXBs
YXRlIDxzaXplX3QgSywgY2xhc3MgQ2FsbGJhY2s+Ci0gIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PEsgPT0gdmFsdWVDb3VudD46OnR5cGUKLSAgZG9Gb3JtYXRGcm9tKHNpemVfdCBpLCBGb3JtYXRB
cmcmIGFyZywgQ2FsbGJhY2smIC8qIGNiICovKSBjb25zdCB7Ci0gICAgYXJnLmVuZm9yY2UoInR1
cGxlIGluZGV4IG91dCBvZiByYW5nZSwgbWF4PSIsIGkpOwotICB9Ci0KLSAgdGVtcGxhdGUgPHNp
emVfdCBLLCBjbGFzcyBDYWxsYmFjaz4KLSAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8KEsgPCB2
YWx1ZUNvdW50KT46OnR5cGUKLSAgZG9Gb3JtYXRGcm9tKHNpemVfdCBpLCBGb3JtYXRBcmcmIGFy
ZywgQ2FsbGJhY2smIGNiKSBjb25zdCB7Ci0gICAgaWYgKGkgPT0gSykgewotICAgICAgRm9ybWF0
VmFsdWU8dHlwZW5hbWUgc3RkOjpkZWNheTwKLSAgICAgICAgICB0eXBlbmFtZSBzdGQ6OnR1cGxl
X2VsZW1lbnQ8SywgVHVwbGU+Ojp0eXBlPjo6dHlwZT4oc3RkOjpnZXQ8Sz4odmFsXykpCi0gICAg
ICAgICAgLmZvcm1hdChhcmcsIGNiKTsKLSAgICB9IGVsc2UgewotICAgICAgZG9Gb3JtYXRGcm9t
PEsgKyAxPihpLCBhcmcsIGNiKTsKLSAgICB9Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgQ2Fs
bGJhY2s+Ci0gIHZvaWQgZG9Gb3JtYXQoc2l6ZV90IGksIEZvcm1hdEFyZyYgYXJnLCBDYWxsYmFj
ayYgY2IpIGNvbnN0IHsKLSAgICByZXR1cm4gZG9Gb3JtYXRGcm9tPDA+KGksIGFyZywgY2IpOwot
ICB9Ci0KLSAgY29uc3QgVHVwbGUmIHZhbF87Ci19OwotCi0vLyBQYXJ0aWFsIHNwZWNpYWxpemF0
aW9uIG9mIEZvcm1hdFZhbHVlIGZvciBuZXN0ZWQgRm9ybWF0dGVycwotdGVtcGxhdGUgPGJvb2wg
Y29udGFpbmVyTW9kZSwgY2xhc3MuLi4gQXJncywgdGVtcGxhdGUgPGJvb2wsIGNsYXNzLi4uPiBj
bGFzcyBGPgotY2xhc3MgRm9ybWF0VmFsdWU8Ci0gICAgRjxjb250YWluZXJNb2RlLCBBcmdzLi4u
PiwKLSAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgZGV0YWlsOjpJc0Zvcm1h
dHRlcjxGPGNvbnRhaW5lck1vZGUsIEFyZ3MuLi4+Pjo6dmFsdWU+Ojp0eXBlPiB7Ci0gIHR5cGVk
ZWYgdHlwZW5hbWUgRjxjb250YWluZXJNb2RlLCBBcmdzLi4uPjo6QmFzZVR5cGUgRm9ybWF0dGVy
VmFsdWU7Ci0KLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEZvcm1hdFZhbHVlKGNvbnN0IEZvcm1hdHRl
clZhbHVlJiBmKSA6IGZfKGYpIHt9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIEZvcm1hdENhbGxiYWNr
PgotICB2b2lkIGZvcm1hdChGb3JtYXRBcmcmIGFyZywgRm9ybWF0Q2FsbGJhY2smIGNiKSBjb25z
dCB7Ci0gICAgZm9ybWF0X3ZhbHVlOjpmb3JtYXRGb3JtYXR0ZXIoZl8sIGFyZywgY2IpOwotICB9
Ci0KLSBwcml2YXRlOgotICBjb25zdCBGb3JtYXR0ZXJWYWx1ZSYgZl87Ci19OwotCi0vKioKLSAq
IEZvcm1hdHRlciBvYmplY3RzIGNhbiBiZSBhcHBlbmRlZCB0byBzdHJpbmdzLCBhbmQgdGhlcmVm
b3JlIHRoZXkncmUKLSAqIGNvbXBhdGlibGUgd2l0aCBmb2xseTo6dG9BcHBlbmQgYW5kIGZvbGx5
Ojp0by4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIFRndCwgY2xhc3MgRGVyaXZlZCwgYm9vbCBjb250
YWluZXJNb2RlLCBjbGFzcy4uLiBBcmdzPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTb21l
U3RyaW5nPFRndD46OnZhbHVlPjo6dHlwZSB0b0FwcGVuZCgKLSAgICBjb25zdCBCYXNlRm9ybWF0
dGVyPERlcml2ZWQsIGNvbnRhaW5lck1vZGUsIEFyZ3MuLi4+JiB2YWx1ZSwKLSAgICBUZ3QqIHJl
c3VsdCkgewotICB2YWx1ZS5hcHBlbmRUbygqcmVzdWx0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
Zm9sbHkKLQotRk9MTFlfUE9QX1dBUk5JTkcKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0Zvcm1hdC5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9mb2xseS9Gb3JtYXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyNWRkZjYzMTJiZGQ4Zjg0NjJjMGEyYjZmNDViYTZhMzg2YTFkNjYwLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0Zvcm1hdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
MzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNp
bmNsdWRlIDxmb2xseS9Gb3JtYXQuaD4KLQotI2luY2x1ZGUgPGZvbGx5L0NwcEF0dHJpYnV0ZXMu
aD4KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9Db25zdGV4cHIuaD4KLQotI2luY2x1ZGUg
PGRvdWJsZS1jb252ZXJzaW9uL2RvdWJsZS1jb252ZXJzaW9uLmg+Ci0KLW5hbWVzcGFjZSBmb2xs
eSB7Ci1uYW1lc3BhY2UgZGV0YWlsIHsKLQotZXh0ZXJuIGNvbnN0IEZvcm1hdEFyZzo6QWxpZ24g
Zm9ybWF0QWxpZ25UYWJsZVtdOwotZXh0ZXJuIGNvbnN0IEZvcm1hdEFyZzo6U2lnbiBmb3JtYXRT
aWduVGFibGVbXTsKLQotfSAgLy8gbmFtZXNwYWNlIGRldGFpbAotCi11c2luZyBuYW1lc3BhY2Ug
Zm9sbHk6OmRldGFpbDsKLQotdm9pZCBGb3JtYXRWYWx1ZTxkb3VibGU+Ojpmb3JtYXRIZWxwZXIo
Ci0gICAgZmJzdHJpbmcmIHBpZWNlLCBpbnQmIHByZWZpeExlbiwgRm9ybWF0QXJnJiBhcmcpIGNv
bnN0IHsKLSAgdXNpbmcgOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlVG9TdHJpbmdDb252ZXJ0
ZXI7Ci0gIHVzaW5nIDo6ZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxkZXI7Ci0KLSAgYXJn
LnZhbGlkYXRlKEZvcm1hdEFyZzo6VHlwZTo6RkxPQVQpOwotCi0gIGlmIChhcmcucHJlc2VudGF0
aW9uID09IEZvcm1hdEFyZzo6a0RlZmF1bHRQcmVzZW50YXRpb24pIHsKLSAgICBhcmcucHJlc2Vu
dGF0aW9uID0gJ2cnOwotICB9Ci0KLSAgY29uc3QgY2hhciogaW5maW5pdHlTeW1ib2wgPSBpc3Vw
cGVyKGFyZy5wcmVzZW50YXRpb24pID8gIklORiIgOiAiaW5mIjsKLSAgY29uc3QgY2hhciogbmFu
U3ltYm9sID0gaXN1cHBlcihhcmcucHJlc2VudGF0aW9uKSA/ICJOQU4iIDogIm5hbiI7Ci0gIGNo
YXIgZXhwb25lbnRTeW1ib2wgPSBpc3VwcGVyKGFyZy5wcmVzZW50YXRpb24pID8gJ0UnIDogJ2Un
OwotCi0gIGlmIChhcmcucHJlY2lzaW9uID09IEZvcm1hdEFyZzo6a0RlZmF1bHRQcmVjaXNpb24p
IHsKLSAgICBhcmcucHJlY2lzaW9uID0gNjsKLSAgfQotCi0gIC8vIDIrOiBmb3IgbnVsbCB0ZXJt
aW5hdG9yIGFuZCBvcHRpb25hbCBzaWduIHNoZW5hbmlnYW5zLgotICBjb25zdGV4cHIgaW50IGJ1
ZkxlbiA9Ci0gICAgICAyICsgY29uc3RleHByX21heCgKLSAgICAgICAgICAgICAgMiArIERvdWJs
ZVRvU3RyaW5nQ29udmVydGVyOjprTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCArCi0gICAgICAg
ICAgICAgICAgICBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6a01heEZpeGVkRGlnaXRzQWZ0ZXJQ
b2ludCwKLSAgICAgICAgICAgICAgY29uc3RleHByX21heCg4ICsgRG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXI6OmtNYXhFeHBvbmVudGlhbERpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA3ICsgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OmtNYXhQcmVjaXNpb25EaWdpdHMpKTsKLSAg
Y2hhciBidWZbYnVmTGVuXTsKLSAgU3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZiArIDEsIGJ1Zkxl
biAtIDEpOwotCi0gIGNoYXIgcGx1c1NpZ247Ci0gIHN3aXRjaCAoYXJnLnNpZ24pIHsKLSAgY2Fz
ZSBGb3JtYXRBcmc6OlNpZ246OlBMVVNfT1JfTUlOVVM6Ci0gICAgcGx1c1NpZ24gPSAnKyc7Ci0g
ICAgYnJlYWs7Ci0gIGNhc2UgRm9ybWF0QXJnOjpTaWduOjpTUEFDRV9PUl9NSU5VUzoKLSAgICBw
bHVzU2lnbiA9ICcgJzsKLSAgICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICBwbHVzU2lnbiA9ICdc
MCc7Ci0gICAgYnJlYWs7Ci0gIH07Ci0KLSAgYXV0byBmbGFncyA9Ci0gICAgICBEb3VibGVUb1N0
cmluZ0NvbnZlcnRlcjo6RU1JVF9QT1NJVElWRV9FWFBPTkVOVF9TSUdOIHwKLSAgICAgIChhcmcu
dHJhaWxpbmdEb3QgPyBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RU1JVF9UUkFJTElOR19ERUNJ
TUFMX1BPSU5UCi0gICAgICAgICAgICAgICAgICAgICAgIDogMCk7Ci0KLSAgZG91YmxlIHZhbCA9
IHZhbF87Ci0gIHN3aXRjaCAoYXJnLnByZXNlbnRhdGlvbikgewotICBjYXNlICclJzoKLSAgICB2
YWwgKj0gMTAwOwotICAgIEZPTExZX0ZBTExUSFJPVUdIOwotICBjYXNlICdmJzoKLSAgY2FzZSAn
Ric6Ci0gICAgewotICAgICAgaWYgKGFyZy5wcmVjaXNpb24gPgotICAgICAgICAgIERvdWJsZVRv
U3RyaW5nQ29udmVydGVyOjprTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50KSB7Ci0gICAgICAgIGFy
Zy5wcmVjaXNpb24gPSBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6a01heEZpeGVkRGlnaXRzQWZ0
ZXJQb2ludDsKLSAgICAgIH0KLSAgICAgIERvdWJsZVRvU3RyaW5nQ29udmVydGVyIGNvbnYoZmxh
Z3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZmluaXR5U3ltYm9sLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW5TeW1ib2wsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50U3ltYm9sLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJnLnByZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Ci0gICAgICBhcmcuZW5mb3Jj
ZShjb252LlRvRml4ZWQodmFsLCBhcmcucHJlY2lzaW9uLCAmYnVpbGRlciksCi0gICAgICAgICAg
ICAgICAgICAiZml4ZWQgZG91YmxlIGNvbnZlcnNpb24gZmFpbGVkIik7Ci0gICAgfQotICAgIGJy
ZWFrOwotICBjYXNlICdlJzoKLSAgY2FzZSAnRSc6Ci0gICAgewotICAgICAgaWYgKGFyZy5wcmVj
aXNpb24gPiBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6a01heEV4cG9uZW50aWFsRGlnaXRzKSB7
Ci0gICAgICAgIGFyZy5wcmVjaXNpb24gPSBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6a01heEV4
cG9uZW50aWFsRGlnaXRzOwotICAgICAgfQotCi0gICAgICBEb3VibGVUb1N0cmluZ0NvbnZlcnRl
ciBjb252KGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZpbml0
eVN5bWJvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFuU3ltYm9sLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudFN5bWJvbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZy5wcmVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwotICAgICAg
YXJnLmVuZm9yY2UoY29udi5Ub0V4cG9uZW50aWFsKHZhbCwgYXJnLnByZWNpc2lvbiwgJmJ1aWxk
ZXIpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIGNhc2UgJ24nOiAgLy8gc2hvdWxkIGJlIGxvY2Fs
ZS1hd2FyZSwgYnV0IGlzbid0Ci0gIGNhc2UgJ2cnOgotICBjYXNlICdHJzoKLSAgICB7Ci0gICAg
ICBpZiAoYXJnLnByZWNpc2lvbiA8IERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjprTWluUHJlY2lz
aW9uRGlnaXRzKSB7Ci0gICAgICAgIGFyZy5wcmVjaXNpb24gPSBEb3VibGVUb1N0cmluZ0NvbnZl
cnRlcjo6a01pblByZWNpc2lvbkRpZ2l0czsKLSAgICAgIH0gZWxzZSBpZiAoYXJnLnByZWNpc2lv
biA+Ci0gICAgICAgICAgICAgICAgIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjprTWF4UHJlY2lz
aW9uRGlnaXRzKSB7Ci0gICAgICAgIGFyZy5wcmVjaXNpb24gPSBEb3VibGVUb1N0cmluZ0NvbnZl
cnRlcjo6a01heFByZWNpc2lvbkRpZ2l0czsKLSAgICAgIH0KLSAgICAgIERvdWJsZVRvU3RyaW5n
Q29udmVydGVyIGNvbnYoZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluZmluaXR5U3ltYm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW5T
eW1ib2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50U3ltYm9s
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtNCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJnLnByZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7
Ci0gICAgICBhcmcuZW5mb3JjZShjb252LlRvU2hvcnRlc3QodmFsLCAmYnVpbGRlcikpOwotICAg
IH0KLSAgICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICBhcmcuZXJyb3IoImludmFsaWQgc3BlY2lm
aWVyICciLCBhcmcucHJlc2VudGF0aW9uLCAiJyIpOwotICB9Ci0KLSAgaW50IGxlbiA9IGJ1aWxk
ZXIucG9zaXRpb24oKTsKLSAgYnVpbGRlci5GaW5hbGl6ZSgpOwotICBEQ0hFQ0tfR1QobGVuLCAw
KTsKLQotICAvLyBBZGQgJysnIG9yICcgJyBzaWduIGlmIG5lZWRlZAotICBjaGFyKiBwID0gYnVm
ICsgMTsKLSAgLy8gYW55dGhpbmcgdGhhdCdzIG5laXRoZXIgbmVnYXRpdmUgbm9yIG5hbgotICBw
cmVmaXhMZW4gPSAwOwotICBpZiAocGx1c1NpZ24gJiYgKCpwICE9ICctJyAmJiAqcCAhPSAnbicg
JiYgKnAgIT0gJ04nKSkgewotICAgICotLXAgPSBwbHVzU2lnbjsKLSAgICArK2xlbjsKLSAgICBw
cmVmaXhMZW4gPSAxOwotICB9IGVsc2UgaWYgKCpwID09ICctJykgewotICAgIHByZWZpeExlbiA9
IDE7Ci0gIH0KLQotICBwaWVjZSA9IGZic3RyaW5nKHAsIHNpemVfdChsZW4pKTsKLX0KLQotCi12
b2lkIEZvcm1hdEFyZzo6aW5pdFNsb3coKSB7Ci0gIGF1dG8gYiA9IGZ1bGxBcmdTdHJpbmcuYmVn
aW4oKTsKLSAgYXV0byBlbmQgPSBmdWxsQXJnU3RyaW5nLmVuZCgpOwotCi0gIC8vIFBhcnNlIGtl
eQotICBhdXRvIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obWVtY2hyKGIsICc6Jywgc2l6
ZV90KGVuZCAtIGIpKSk7Ci0gIGlmICghcCkgewotICAgIGtleV8gPSBTdHJpbmdQaWVjZShiLCBl
bmQpOwotICAgIHJldHVybjsKLSAgfQotICBrZXlfID0gU3RyaW5nUGllY2UoYiwgcCk7Ci0KLSAg
aWYgKCpwID09ICc6JykgewotICAgIC8vIHBhcnNlIGZvcm1hdCBzcGVjCi0gICAgaWYgKCsrcCA9
PSBlbmQpIHJldHVybjsKLQotICAgIC8vIGZpbGwvYWxpZ24sIG9yIGp1c3QgYWxpZ24KLSAgICBB
bGlnbiBhOwotICAgIGlmIChwICsgMSAhPSBlbmQgJiYKLSAgICAgICAgKGEgPSBmb3JtYXRBbGln
blRhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHBbMV0pXSkgIT0KLSAgICAgICAgQWxp
Z246OklOVkFMSUQpIHsKLSAgICAgIGZpbGwgPSAqcDsKLSAgICAgIGFsaWduID0gYTsKLSAgICAg
IHAgKz0gMjsKLSAgICAgIGlmIChwID09IGVuZCkgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoKGEg
PSBmb3JtYXRBbGlnblRhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpwKV0pICE9Ci0g
ICAgICAgICAgICAgICBBbGlnbjo6SU5WQUxJRCkgewotICAgICAgYWxpZ24gPSBhOwotICAgICAg
aWYgKCsrcCA9PSBlbmQpIHJldHVybjsKLSAgICB9Ci0KLSAgICBTaWduIHM7Ci0gICAgdW5zaWdu
ZWQgY2hhciB1U2lnbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpwKTsKLSAgICBpZiAo
KHMgPSBmb3JtYXRTaWduVGFibGVbdVNpZ25dKSAhPSBTaWduOjpJTlZBTElEKSB7Ci0gICAgICBz
aWduID0gczsKLSAgICAgIGlmICgrK3AgPT0gZW5kKSByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCpwID09ICcjJykgewotICAgICAgYmFzZVByZWZpeCA9IHRydWU7Ci0gICAgICBpZiAoKytwID09
IGVuZCkgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgqcCA9PSAnMCcpIHsKLSAgICAgIGVuZm9y
Y2UoYWxpZ24gPT0gQWxpZ246OkRFRkFVTFQsICJhbGlnbm1lbnQgc3BlY2lmaWVkIHR3aWNlIik7
Ci0gICAgICBmaWxsID0gJzAnOwotICAgICAgYWxpZ24gPSBBbGlnbjo6UEFEX0FGVEVSX1NJR047
Ci0gICAgICBpZiAoKytwID09IGVuZCkgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gcmVhZElu
dCA9IFsmXSB7Ci0gICAgICBhdXRvIGNvbnN0IGMgPSBwOwotICAgICAgZG8gewotICAgICAgICAr
K3A7Ci0gICAgICB9IHdoaWxlIChwICE9IGVuZCAmJiAqcCA+PSAnMCcgJiYgKnAgPD0gJzknKTsK
LSAgICAgIHJldHVybiB0bzxpbnQ+KFN0cmluZ1BpZWNlKGMsIHApKTsKLSAgICB9OwotCi0gICAg
aWYgKCpwID09ICcqJykgewotICAgICAgd2lkdGggPSBrRHluYW1pY1dpZHRoOwotICAgICAgKytw
OwotCi0gICAgICBpZiAocCA9PSBlbmQpIHJldHVybjsKLQotICAgICAgaWYgKCpwID49ICcwJyAm
JiAqcCA8PSAnOScpIHdpZHRoSW5kZXggPSByZWFkSW50KCk7Ci0KLSAgICAgIGlmIChwID09IGVu
ZCkgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoKnAgPj0gJzAnICYmICpwIDw9ICc5JykgewotICAg
ICAgd2lkdGggPSByZWFkSW50KCk7Ci0KLSAgICAgIGlmIChwID09IGVuZCkgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICgqcCA9PSAnLCcpIHsKLSAgICAgIHRob3VzYW5kc1NlcGFyYXRvciA9IHRy
dWU7Ci0gICAgICBpZiAoKytwID09IGVuZCkgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgqcCA9
PSAnLicpIHsKLSAgICAgIGF1dG8gZCA9ICsrcDsKLSAgICAgIHdoaWxlIChwICE9IGVuZCAmJiAq
cCA+PSAnMCcgJiYgKnAgPD0gJzknKSB7Ci0gICAgICAgICsrcDsKLSAgICAgIH0KLSAgICAgIGlm
IChwICE9IGQpIHsKLSAgICAgICAgcHJlY2lzaW9uID0gdG88aW50PihTdHJpbmdQaWVjZShkLCBw
KSk7Ci0gICAgICAgIGlmIChwICE9IGVuZCAmJiAqcCA9PSAnLicpIHsKLSAgICAgICAgICB0cmFp
bGluZ0RvdCA9IHRydWU7Ci0gICAgICAgICAgKytwOwotICAgICAgICB9Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICB0cmFpbGluZ0RvdCA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwID09
IGVuZCkgcmV0dXJuOwotICAgIH0KLQotICAgIHByZXNlbnRhdGlvbiA9ICpwOwotICAgIGlmICgr
K3AgPT0gZW5kKSByZXR1cm47Ci0gIH0KLQotICBlcnJvcigiZXh0cmEgY2hhcmFjdGVycyBpbiBm
b3JtYXQgc3RyaW5nIik7Ci19Ci0KLXZvaWQgRm9ybWF0QXJnOjp2YWxpZGF0ZShUeXBlIHR5cGUp
IGNvbnN0IHsKLSAgZW5mb3JjZShrZXlFbXB0eSgpLCAiaW5kZXggbm90IGFsbG93ZWQiKTsKLSAg
c3dpdGNoICh0eXBlKSB7Ci0gIGNhc2UgVHlwZTo6SU5URUdFUjoKLSAgICBlbmZvcmNlKHByZWNp
c2lvbiA9PSBrRGVmYXVsdFByZWNpc2lvbiwKLSAgICAgICAgICAgICJwcmVjaXNpb24gbm90IGFs
bG93ZWQgb24gaW50ZWdlcnMiKTsKLSAgICBicmVhazsKLSAgY2FzZSBUeXBlOjpGTE9BVDoKLSAg
ICBlbmZvcmNlKCFiYXNlUHJlZml4LAotICAgICAgICAgICAgImJhc2UgcHJlZml4ICgnIycpIHNw
ZWNpZmllciBvbmx5IGFsbG93ZWQgb24gaW50ZWdlcnMiKTsKLSAgICBlbmZvcmNlKCF0aG91c2Fu
ZHNTZXBhcmF0b3IsCi0gICAgICAgICAgICAidGhvdXNhbmRzIHNlcGFyYXRvciAoJywnKSBvbmx5
IGFsbG93ZWQgb24gaW50ZWdlcnMiKTsKLSAgICBicmVhazsKLSAgY2FzZSBUeXBlOjpPVEhFUjoK
LSAgICBlbmZvcmNlKGFsaWduICE9IEFsaWduOjpQQURfQUZURVJfU0lHTiwKLSAgICAgICAgICAg
ICInPSdhbGlnbm1lbnQgb25seSBhbGxvd2VkIG9uIG51bWJlcnMiKTsKLSAgICBlbmZvcmNlKHNp
Z24gPT0gU2lnbjo6REVGQVVMVCwKLSAgICAgICAgICAgICJzaWduIHNwZWNpZmllciBvbmx5IGFs
bG93ZWQgb24gbnVtYmVycyIpOwotICAgIGVuZm9yY2UoIWJhc2VQcmVmaXgsCi0gICAgICAgICAg
ICAiYmFzZSBwcmVmaXggKCcjJykgc3BlY2lmaWVyIG9ubHkgYWxsb3dlZCBvbiBpbnRlZ2VycyIp
OwotICAgIGVuZm9yY2UoIXRob3VzYW5kc1NlcGFyYXRvciwKLSAgICAgICAgICAgICJ0aG91c2Fu
ZHMgc2VwYXJhdG9yICgnLCcpIG9ubHkgYWxsb3dlZCBvbiBpbnRlZ2VycyIpOwotICAgIGJyZWFr
OwotICB9Ci19Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotdm9pZCBpbnNlcnRUaG91c2FuZHNHcm91
cGluZ1Vuc2FmZShjaGFyKiBzdGFydF9idWZmZXIsIGNoYXIqKiBlbmRfYnVmZmVyKSB7Ci0gIHVp
bnQzMl90IHJlbWFpbmluZ19kaWdpdHMgPSB1aW50MzJfdCgqZW5kX2J1ZmZlciAtIHN0YXJ0X2J1
ZmZlcik7Ci0gIHVpbnQzMl90IHNlcGFyYXRvcl9zaXplID0gKHJlbWFpbmluZ19kaWdpdHMgLSAx
KSAvIDM7Ci0gIHVpbnQzMl90IHJlc3VsdF9zaXplID0gcmVtYWluaW5nX2RpZ2l0cyArIHNlcGFy
YXRvcl9zaXplOwotICAqZW5kX2J1ZmZlciA9ICplbmRfYnVmZmVyICsgc2VwYXJhdG9yX3NpemU7
Ci0KLSAgLy8gZ2V0IHRoZSBlbmQgb2YgdGhlIG5ldyBzdHJpbmcgd2l0aCB0aGUgc2VwYXJhdG9y
cwotICB1aW50MzJfdCBidWZmZXJfd3JpdGVfaW5kZXggPSByZXN1bHRfc2l6ZSAtIDE7Ci0gIHVp
bnQzMl90IGJ1ZmZlcl9yZWFkX2luZGV4ID0gcmVtYWluaW5nX2RpZ2l0cyAtIDE7Ci0gIHN0YXJ0
X2J1ZmZlcltidWZmZXJfd3JpdGVfaW5kZXggKyAxXSA9IDA7Ci0KLSAgYm9vbCBkb25lID0gZmFs
c2U7Ci0gIHVpbnQzMl90IG5leHRfZ3JvdXBfc2l6ZSA9IDM7Ci0KLSAgd2hpbGUgKCFkb25lKSB7
Ci0gICAgdWludDMyX3QgY3VycmVudF9ncm91cF9zaXplID0gc3RkOjptYXg8dWludDMyX3Q+KDEs
Ci0gICAgICBzdGQ6Om1pbjx1aW50MzJfdD4ocmVtYWluaW5nX2RpZ2l0cywgbmV4dF9ncm91cF9z
aXplKSk7Ci0KLSAgICAvLyB3cml0ZSBvdXQgdGhlIGN1cnJlbnQgZ3JvdXAncyBkaWdpdHMgdG8g
dGhlIGJ1ZmZlciBpbmRleAotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjdXJyZW50X2dy
b3VwX3NpemU7IGkrKykgewotICAgICAgc3RhcnRfYnVmZmVyW2J1ZmZlcl93cml0ZV9pbmRleC0t
XSA9IHN0YXJ0X2J1ZmZlcltidWZmZXJfcmVhZF9pbmRleC0tXTsKLSAgICB9Ci0KLSAgICAvLyBp
ZiBub3QgZmluaXNoZWQsIHdyaXRlIHRoZSBzZXBhcmF0b3IgYmVmb3JlIHRoZSBuZXh0IGdyb3Vw
Ci0gICAgaWYgKGJ1ZmZlcl93cml0ZV9pbmRleCA8IGJ1ZmZlcl93cml0ZV9pbmRleCArIDEpIHsK
LSAgICAgIHN0YXJ0X2J1ZmZlcltidWZmZXJfd3JpdGVfaW5kZXgtLV0gPSAnLCc7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIGRvbmUgPSB0cnVlOwotICAgIH0KLQotICAgIHJlbWFpbmluZ19kaWdpdHMg
LT0gY3VycmVudF9ncm91cF9zaXplOwotICB9Ci19Ci19IC8vIGRldGFpbAotCi19ICAvLyBuYW1l
c3BhY2UgZm9sbHkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2ZvbGx5L0Zvcm1hdC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Zm9sbHkvRm9ybWF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZmQyZmYwYzNh
MDM4ZDY5ZGE2NzgzNDE1YWVkYTg5ZjM1NWIzMjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Zm9sbHkvRm9ybWF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NzIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFw
YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0g
KiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
LSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotI2RlZmluZSBG
T0xMWV9GT1JNQVRfSF8KLQotI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDx0dXBsZT4KLSNp
bmNsdWRlIDx0eXBlX3RyYWl0cz4KLQotI2luY2x1ZGUgPGZvbGx5L0NvbnYuaD4KLSNpbmNsdWRl
IDxmb2xseS9Gb3JtYXRBcmcuaD4KLSNpbmNsdWRlIDxmb2xseS9SYW5nZS5oPgotI2luY2x1ZGUg
PGZvbGx5L1N0cmluZy5oPgotI2luY2x1ZGUgPGZvbGx5L1RyYWl0cy5oPgotCi0vLyBJZ25vcmUg
c2hhZG93aW5nIHdhcm5pbmdzIHdpdGhpbiB0aGlzIGZpbGUsIHNvIGluY2x1ZGVycyBjYW4gdXNl
IC1Xc2hhZG93LgotRk9MTFlfUFVTSF9XQVJOSU5HCi1GT0xMWV9HQ0NfRElTQUJMRV9XQVJOSU5H
KCItV3NoYWRvdyIpCi0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLS8vIGZvcndhcmQgZGVjbGFyYXRp
b25zCi10ZW1wbGF0ZSA8Ym9vbCBjb250YWluZXJNb2RlLCBjbGFzcy4uLiBBcmdzPgotY2xhc3Mg
Rm9ybWF0dGVyOwotdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci1Gb3JtYXR0ZXI8ZmFsc2UsIEFy
Z3MuLi4+IGZvcm1hdChTdHJpbmdQaWVjZSBmbXQsIEFyZ3MmJi4uLiBhcmdzKTsKLXRlbXBsYXRl
IDxjbGFzcyBDPgotRm9ybWF0dGVyPHRydWUsIEM+IHZmb3JtYXQoU3RyaW5nUGllY2UgZm10LCBD
JiYgY29udGFpbmVyKTsKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFbmFibGUgPSB2b2lkPgot
Y2xhc3MgRm9ybWF0VmFsdWU7Ci0KLS8vIG1ldGEtYXR0cmlidXRlIHRvIGlkZW50aWZ5IGZvcm1h
dHRlcnMgaW4gdGhpcyBzZWEgb2YgdGVtcGxhdGUgd2VpcmRuZXNzCi1uYW1lc3BhY2UgZGV0YWls
IHsKLWNsYXNzIEZvcm1hdHRlclRhZyB7fTsKLX07Ci0KLS8qKgotICogRm9ybWF0dGVyIGNsYXNz
LgotICoKLSAqIE5vdGUgdGhhdCB0aGlzIGNsYXNzIGlzIHRyaWNreSwgYXMgaXQga2VlcHMgKnJl
ZmVyZW5jZXMqIHRvIGl0cyBsdmFsdWUKLSAqIGFyZ3VtZW50cyAod2hpbGUgaXQgdGFrZXMgb3du
ZXJzaGlwIG9mIHRoZSB0ZW1wb3JhcmllcyksIGFuZCBpdCBkb2Vzbid0Ci0gKiBjb3B5IHRoZSBw
YXNzZWQtaW4gZm9ybWF0IHN0cmluZy4gVGhhbmtmdWxseSwgeW91IGNhbid0IHVzZSB0aGlzCi0g
KiBkaXJlY3RseSwgeW91IGhhdmUgdG8gdXNlIGZvcm1hdCguLi4pIGJlbG93LgotICovCi0KLS8q
IEJhc2VGb3JtYXR0ZXIgY2xhc3MuCi0gKiBPdmVycmlkYWJsZSBiZWhhdmlvdXJzOgotICogWW91
IG1heSBvdmVycmlkZSB0aGUgYWN0dWFsIGZvcm1hdHRpbmcgb2YgcG9zaXRpb25hbCBwYXJhbWV0
ZXJzIGluCi0gKiBgZG9Gb3JtYXRBcmdgLiBUaGUgRm9ybWF0dGVyIGNsYXNzIHByb3ZpZGVzIHRo
ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgotICoKLSAqIFlvdSBtYXkgYWxzbyBvdmVycmlkZSBg
ZG9Gb3JtYXRgIGFuZCBgZ2V0U2l6ZUFyZ2AuIFRoZXNlIG92ZXJyaWRlIHBvaW50cyB3ZXJlCi0g
KiBhZGRlZCB0byBwZXJtaXQgc3RhdGljIGFuYWx5c2lzIG9mIGZvcm1hdCBzdHJpbmdzLCB3aGVu
IGl0IGlzIGluY29udmVuaWVudAotICogb3IgaW1wb3NzaWJsZSB0byBpbnN0YW50aWF0ZSBhIEJh
c2VGb3JtYXR0ZXIgd2l0aCB0aGUgY29ycmVjdCBzdG9yYWdlCi0gKi8KLXRlbXBsYXRlIDxjbGFz
cyBEZXJpdmVkLCBib29sIGNvbnRhaW5lck1vZGUsIGNsYXNzLi4uIEFyZ3M+Ci1jbGFzcyBCYXNl
Rm9ybWF0dGVyIHsKLSBwdWJsaWM6Ci0gIC8qKgotICAgKiBBcHBlbmQgdG8gb3V0cHV0LiAgb3V0
KFN0cmluZ1BpZWNlIHNwKSBtYXkgYmUgY2FsbGVkIChtb3JlIHRoYW4gb25jZSkKLSAgICovCi0g
IHRlbXBsYXRlIDxjbGFzcyBPdXRwdXQ+Ci0gIHZvaWQgb3BlcmF0b3IoKShPdXRwdXQmIG91dCkg
Y29uc3Q7Ci0KLSAgLyoqCi0gICAqIEFwcGVuZCB0byBhIHN0cmluZy4KLSAgICovCi0gIHRlbXBs
YXRlIDxjbGFzcyBTdHI+Ci0gIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU29tZVN0cmluZzxT
dHI+Ojp2YWx1ZT46OnR5cGUgYXBwZW5kVG8oCi0gICAgICBTdHImIHN0cikgY29uc3QgewotICAg
IGF1dG8gYXBwZW5kZXIgPSBbJnN0cl0oU3RyaW5nUGllY2UgcykgeyBzdHIuYXBwZW5kKHMuZGF0
YSgpLCBzLnNpemUoKSk7IH07Ci0gICAgKCp0aGlzKShhcHBlbmRlcik7Ci0gIH0KLQotICAvKioK
LSAgICogQ29udmVyc2lvbiB0byBzdHJpbmcKLSAgICovCi0gIHN0ZDo6c3RyaW5nIHN0cigpIGNv
bnN0IHsKLSAgICBzdGQ6OnN0cmluZyBzOwotICAgIGFwcGVuZFRvKHMpOwotICAgIHJldHVybiBz
OwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlcnNpb24gdG8gZmJzdHJpbmcKLSAgICovCi0gIGZi
c3RyaW5nIGZic3RyKCkgY29uc3QgewotICAgIGZic3RyaW5nIHM7Ci0gICAgYXBwZW5kVG8ocyk7
Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLQotICAvKioKLSAgICogTWV0YWRhdGEgdG8gaWRlbnRpZnkg
Z2VuZXJhdGVkIGNoaWxkcmVuIG9mIEJhc2VGb3JtYXR0ZXIKLSAgICovCi0gIHR5cGVkZWYgZGV0
YWlsOjpGb3JtYXR0ZXJUYWcgSXNGb3JtYXR0ZXI7Ci0gIHR5cGVkZWYgQmFzZUZvcm1hdHRlciBC
YXNlVHlwZTsKLQotIHByaXZhdGU6Ci0gIHR5cGVkZWYgc3RkOjp0dXBsZTxBcmdzLi4uPiBWYWx1
ZVR1cGxlOwotICBzdGF0aWMgY29uc3RleHByIHNpemVfdCB2YWx1ZUNvdW50ID0gc3RkOjp0dXBs
ZV9zaXplPFZhbHVlVHVwbGU+Ojp2YWx1ZTsKLQotICBEZXJpdmVkIGNvbnN0JiBhc0Rlcml2ZWQo
KSBjb25zdCB7Ci0gICAgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBEZXJpdmVkKj4odGhpcyk7
Ci0gIH0KLQotICB0ZW1wbGF0ZSA8c2l6ZV90IEssIGNsYXNzIENhbGxiYWNrPgotICB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxLID09IHZhbHVlQ291bnQ+Ojp0eXBlCi0gIGRvRm9ybWF0RnJvbShz
aXplX3QgaSwgRm9ybWF0QXJnJiBhcmcsIENhbGxiYWNrJiAvKmNiKi8pIGNvbnN0IHsKLSAgICBh
cmcuZXJyb3IoImFyZ3VtZW50IGluZGV4IG91dCBvZiByYW5nZSwgbWF4PSIsIGkpOwotICB9Ci0K
LSAgdGVtcGxhdGUgPHNpemVfdCBLLCBjbGFzcyBDYWxsYmFjaz4KLSAgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8KEsgPCB2YWx1ZUNvdW50KT46OnR5cGUKLSAgZG9Gb3JtYXRGcm9tKHNpemVfdCBp
LCBGb3JtYXRBcmcmIGFyZywgQ2FsbGJhY2smIGNiKSBjb25zdCB7Ci0gICAgaWYgKGkgPT0gSykg
ewotICAgICAgYXNEZXJpdmVkKCkudGVtcGxhdGUgZG9Gb3JtYXRBcmc8Sz4oYXJnLCBjYik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIGRvRm9ybWF0RnJvbTxLICsgMT4oaSwgYXJnLCBjYik7Ci0gICAg
fQotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrPgotICB2b2lkIGRvRm9ybWF0KHNp
emVfdCBpLCBGb3JtYXRBcmcmIGFyZywgQ2FsbGJhY2smIGNiKSBjb25zdCB7Ci0gICAgcmV0dXJu
IGRvRm9ybWF0RnJvbTwwPihpLCBhcmcsIGNiKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxzaXplX3Qg
Sz4KLSAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SyA9PSB2YWx1ZUNvdW50LCBpbnQ+Ojp0eXBl
IGdldFNpemVBcmdGcm9tKAotICAgICAgc2l6ZV90IGksCi0gICAgICBjb25zdCBGb3JtYXRBcmcm
IGFyZykgY29uc3QgewotICAgIGFyZy5lcnJvcigiYXJndW1lbnQgaW5kZXggb3V0IG9mIHJhbmdl
LCBtYXg9IiwgaSk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8Ci0gICAgICBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAmJiAhc3RkOjpp
c19zYW1lPFQsIGJvb2w+Ojp2YWx1ZSwKLSAgICAgIGludD46OnR5cGUKLSAgZ2V0VmFsdWUoY29u
c3QgRm9ybWF0VmFsdWU8VD4mIGZvcm1hdCwgY29uc3QgRm9ybWF0QXJnJikgY29uc3QgewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGZvcm1hdC5nZXRWYWx1ZSgpKTsKLSAgfQotCi0gIHRl
bXBsYXRlIDxjbGFzcyBUPgotICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAgICFzdGQ6
OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgYm9vbD46OnZhbHVlLAot
ICAgICAgaW50Pjo6dHlwZQotICBnZXRWYWx1ZShjb25zdCBGb3JtYXRWYWx1ZTxUPiYsIGNvbnN0
IEZvcm1hdEFyZyYgYXJnKSBjb25zdCB7Ci0gICAgYXJnLmVycm9yKCJkeW5hbWljIGZpZWxkIHdp
ZHRoIGFyZ3VtZW50IG11c3QgYmUgaW50ZWdyYWwiKTsKLSAgfQotCi0gIHRlbXBsYXRlIDxzaXpl
X3QgSz4KLSAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmIDwKLSAgICAgIEs8dmFsdWVDb3Vu
dCwgaW50Pjo6dHlwZSBnZXRTaXplQXJnRnJvbShzaXplX3QgaSwgY29uc3QgRm9ybWF0QXJnJiBh
cmcpCi0gICAgICAgICAgY29uc3QgewotICAgIGlmIChpID09IEspIHsKLSAgICAgIHJldHVybiBn
ZXRWYWx1ZShnZXRGb3JtYXRWYWx1ZTxLPigpLCBhcmcpOwotICAgIH0KLSAgICByZXR1cm4gZ2V0
U2l6ZUFyZ0Zyb208SyArIDE+KGksIGFyZyk7Ci0gIH0KLQotICBpbnQgZ2V0U2l6ZUFyZyhzaXpl
X3QgaSwgY29uc3QgRm9ybWF0QXJnJiBhcmcpIGNvbnN0IHsKLSAgICByZXR1cm4gZ2V0U2l6ZUFy
Z0Zyb208MD4oaSwgYXJnKTsKLSAgfQotCi0gIFN0cmluZ1BpZWNlIHN0cl87Ci0KLSBwcm90ZWN0
ZWQ6Ci0gIGV4cGxpY2l0IEJhc2VGb3JtYXR0ZXIoU3RyaW5nUGllY2Ugc3RyLCBBcmdzJiYuLi4g
YXJncyk7Ci0KLSAgLy8gTm90IGNvcHlhYmxlCi0gIEJhc2VGb3JtYXR0ZXIoY29uc3QgQmFzZUZv
cm1hdHRlciYpID0gZGVsZXRlOwotICBCYXNlRm9ybWF0dGVyJiBvcGVyYXRvcj0oY29uc3QgQmFz
ZUZvcm1hdHRlciYpID0gZGVsZXRlOwotCi0gIC8vIE1vdmFibGUsIGJ1dCB0aGUgbW92ZSBjb25z
dHJ1Y3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvciBhcmUgcHJpdmF0ZSwKLSAgLy8gZm9yIHRo
ZSBleGNsdXNpdmUgdXNlIG9mIGZvcm1hdCgpIChiZWxvdykuICBUaGlzIHdheSwgeW91IGNhbid0
IGNyZWF0ZQotICAvLyBhIEZvcm1hdHRlciBvYmplY3QsIGJ1dCBjYW4gaGFuZGxlIHJlZmVyZW5j
ZXMgdG8gaXQgKGZvciBzdHJlYW1pbmcsCi0gIC8vIGNvbnZlcnNpb24gdG8gc3RyaW5nLCBldGMp
IC0tIHdoaWNoIGlzIGdvb2QsIGFzIEZvcm1hdHRlciBvYmplY3RzIGFyZQotICAvLyBkYW5nZXJv
dXMgKHRoZXkgbWF5IGhvbGQgcmVmZXJlbmNlcykuCi0gIEJhc2VGb3JtYXR0ZXIoQmFzZUZvcm1h
dHRlciYmKSA9IGRlZmF1bHQ7Ci0gIEJhc2VGb3JtYXR0ZXImIG9wZXJhdG9yPShCYXNlRm9ybWF0
dGVyJiYpID0gZGVmYXVsdDsKLQotICB0ZW1wbGF0ZSA8c2l6ZV90IEs+Ci0gIHVzaW5nIEFyZ1R5
cGUgPSB0eXBlbmFtZSBzdGQ6OnR1cGxlX2VsZW1lbnQ8SywgVmFsdWVUdXBsZT46OnR5cGU7Ci0K
LSAgdGVtcGxhdGUgPHNpemVfdCBLPgotICBGb3JtYXRWYWx1ZTx0eXBlbmFtZSBzdGQ6OmRlY2F5
PEFyZ1R5cGU8Sz4+Ojp0eXBlPiBnZXRGb3JtYXRWYWx1ZSgpIGNvbnN0IHsKLSAgICByZXR1cm4g
Rm9ybWF0VmFsdWU8dHlwZW5hbWUgc3RkOjpkZWNheTxBcmdUeXBlPEs+Pjo6dHlwZT4oCi0gICAg
ICAgIHN0ZDo6Z2V0PEs+KHZhbHVlc18pKTsKLSAgfQotCi0gIFZhbHVlVHVwbGUgdmFsdWVzXzsK
LX07Ci0KLXRlbXBsYXRlIDxib29sIGNvbnRhaW5lck1vZGUsIGNsYXNzLi4uIEFyZ3M+Ci1jbGFz
cyBGb3JtYXR0ZXIgOiBwdWJsaWMgQmFzZUZvcm1hdHRlcjwKLSAgICAgICAgICAgICAgICAgICAg
ICBGb3JtYXR0ZXI8Y29udGFpbmVyTW9kZSwgQXJncy4uLj4sCi0gICAgICAgICAgICAgICAgICAg
ICAgY29udGFpbmVyTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4uPiB7Ci0gcHJp
dmF0ZToKLSAgZXhwbGljaXQgRm9ybWF0dGVyKFN0cmluZ1BpZWNlJiBzdHIsIEFyZ3MmJi4uLiBh
cmdzKQotICAgICAgOiBCYXNlRm9ybWF0dGVyPAotICAgICAgICAgICAgRm9ybWF0dGVyPGNvbnRh
aW5lck1vZGUsIEFyZ3MuLi4+LAotICAgICAgICAgICAgY29udGFpbmVyTW9kZSwKLSAgICAgICAg
ICAgIEFyZ3MuLi4+KHN0ciwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7Ci0gICAgc3Rh
dGljX2Fzc2VydCgKLSAgICAgICAgIWNvbnRhaW5lck1vZGUgfHwgc2l6ZW9mLi4uKEFyZ3MpID09
IDEsCi0gICAgICAgICJFeGFjdGx5IG9uZSBhcmd1bWVudCByZXF1aXJlZCBpbiBjb250YWluZXIg
bW9kZSIpOwotICB9Ci0KLSAgdGVtcGxhdGUgPHNpemVfdCBLLCBjbGFzcyBDYWxsYmFjaz4KLSAg
dm9pZCBkb0Zvcm1hdEFyZyhGb3JtYXRBcmcmIGFyZywgQ2FsbGJhY2smIGNiKSBjb25zdCB7Ci0g
ICAgdGhpcy0+dGVtcGxhdGUgZ2V0Rm9ybWF0VmFsdWU8Sz4oKS5mb3JtYXQoYXJnLCBjYik7Ci0g
IH0KLQotICBmcmllbmQgY2xhc3MgQmFzZUZvcm1hdHRlcjwKLSAgICAgIEZvcm1hdHRlcjxjb250
YWluZXJNb2RlLCBBcmdzLi4uPiwKLSAgICAgIGNvbnRhaW5lck1vZGUsCi0gICAgICBBcmdzLi4u
PjsKLQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQT4KLSAgZnJpZW5kIEZvcm1hdHRlcjxmYWxzZSwg
QS4uLj4gZm9ybWF0KFN0cmluZ1BpZWNlIGZtdCwgQSYmLi4uIGFyZyk7Ci0gIHRlbXBsYXRlIDxj
bGFzcyBDPgotICBmcmllbmQgRm9ybWF0dGVyPHRydWUsIEM+IHZmb3JtYXQoU3RyaW5nUGllY2Ug
Zm10LCBDJiYgY29udGFpbmVyKTsKLX07Ci0KLS8qKgotICogRm9ybWF0dGVyIG9iamVjdHMgY2Fu
IGJlIHdyaXR0ZW4gdG8gc3RyZWFtcy4KLSAqLwotdGVtcGxhdGUgPGJvb2wgY29udGFpbmVyTW9k
ZSwgY2xhc3MuLi4gQXJncz4KLXN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PCgKLSAgICBzdGQ6Om9z
dHJlYW0mIG91dCwKLSAgICBjb25zdCBGb3JtYXR0ZXI8Y29udGFpbmVyTW9kZSwgQXJncy4uLj4m
IGZvcm1hdHRlcikgewotICBhdXRvIHdyaXRlciA9IFsmb3V0XShTdHJpbmdQaWVjZSBzcCkgewot
ICAgIG91dC53cml0ZShzcC5kYXRhKCksIHN0ZDo6c3RyZWFtc2l6ZShzcC5zaXplKCkpKTsKLSAg
fTsKLSAgZm9ybWF0dGVyKHdyaXRlcik7Ci0gIHJldHVybiBvdXQ7Ci19Ci0KLS8qKgotICogRm9y
bWF0dGVyIG9iamVjdHMgY2FuIGJlIHdyaXR0ZW4gdG8gc3RkaW8gRklMRXMuCi0gKi8KLXRlbXBs
YXRlIDxjbGFzcyBEZXJpdmVkLCBib29sIGNvbnRhaW5lck1vZGUsIGNsYXNzLi4uIEFyZ3M+Ci12
b2lkIHdyaXRlVG8oCi0gICAgRklMRSogZnAsCi0gICAgY29uc3QgQmFzZUZvcm1hdHRlcjxEZXJp
dmVkLCBjb250YWluZXJNb2RlLCBBcmdzLi4uPiYgZm9ybWF0dGVyKTsKLQotLyoqCi0gKiBDcmVh
dGUgYSBmb3JtYXR0ZXIgb2JqZWN0LgotICoKLSAqIHN0ZDo6c3RyaW5nIGZvcm1hdHRlZCA9IGZv
cm1hdCgie30ge30iLCAyMywgNDIpLnN0cigpOwotICogTE9HKElORk8pIDw8IGZvcm1hdCgie30g
e30iLCAyMywgNDIpOwotICogd3JpdGVUbyhzdGRvdXQsIGZvcm1hdCgie30ge30iLCAyMywgNDIp
KTsKLSAqLwotdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci1Gb3JtYXR0ZXI8ZmFsc2UsIEFyZ3Mu
Li4+IGZvcm1hdChTdHJpbmdQaWVjZSBmbXQsIEFyZ3MmJi4uLiBhcmdzKSB7Ci0gIHJldHVybiBG
b3JtYXR0ZXI8ZmFsc2UsIEFyZ3MuLi4+KGZtdCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKLX0KLQotLyoqCi0gKiBMaWtlIGZvcm1hdCgpLCBidXQgaW1tZWRpYXRlbHkgcmV0dXJucyB0
aGUgZm9ybWF0dGVkIHN0cmluZyBpbnN0ZWFkIG9mIGFuCi0gKiBpbnRlcm1lZGlhdGUgZm9ybWF0
IG9iamVjdC4KLSAqLwotdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci1pbmxpbmUgc3RkOjpzdHJp
bmcgc2Zvcm1hdChTdHJpbmdQaWVjZSBmbXQsIEFyZ3MmJi4uLiBhcmdzKSB7Ci0gIHJldHVybiBm
b3JtYXQoZm10LCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pLnN0cigpOwotfQotCi0vKioK
LSAqIENyZWF0ZSBhIGZvcm1hdHRlciBvYmplY3QgdGhhdCB0YWtlcyBvbmUgYXJndW1lbnQgKG9m
IGNvbnRhaW5lciB0eXBlKQotICogYW5kIHVzZXMgdGhhdCBjb250YWluZXIgdG8gZ2V0IGFyZ3Vt
ZW50IHZhbHVlcyBmcm9tLgotICoKLSAqIHN0ZDo6bWFwPHN0cmluZywgc3RyaW5nPiBtYXAgeyB7
ImhlbGxvIiwgIndvcmxkIn0sIHsiYW5zd2VyIiwgIjQyIn0gfTsKLSAqCi0gKiBUaGUgZm9sbG93
aW5nIGFyZSBlcXVpdmFsZW50OgotICogZm9ybWF0KCJ7MFtoZWxsb119IHswW2Fuc3dlcl19Iiwg
bWFwKTsKLSAqCi0gKiB2Zm9ybWF0KCJ7aGVsbG99IHthbnN3ZXJ9IiwgbWFwKTsKLSAqCi0gKiBi
dXQgdGhlIGxhdHRlciBpcyBjbGVhbmVyLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVy
PgotRm9ybWF0dGVyPHRydWUsIENvbnRhaW5lcj4gdmZvcm1hdChTdHJpbmdQaWVjZSBmbXQsIENv
bnRhaW5lciYmIGNvbnRhaW5lcikgewotICByZXR1cm4gRm9ybWF0dGVyPHRydWUsIENvbnRhaW5l
cj4oZm10LCBzdGQ6OmZvcndhcmQ8Q29udGFpbmVyPihjb250YWluZXIpKTsKLX0KLQotLyoqCi0g
KiBMaWtlIHZmb3JtYXQoKSwgYnV0IGltbWVkaWF0ZWx5IHJldHVybnMgdGhlIGZvcm1hdHRlZCBz
dHJpbmcgaW5zdGVhZCBvZiBhbgotICogaW50ZXJtZWRpYXRlIGZvcm1hdCBvYmplY3QuCi0gKi8K
LXRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+Ci1pbmxpbmUgc3RkOjpzdHJpbmcgc3Zmb3JtYXQo
U3RyaW5nUGllY2UgZm10LCBDb250YWluZXImJiBjb250YWluZXIpIHsKLSAgcmV0dXJuIHZmb3Jt
YXQoZm10LCBzdGQ6OmZvcndhcmQ8Q29udGFpbmVyPihjb250YWluZXIpKS5zdHIoKTsKLX0KLQot
LyoqCi0gKiBXcmFwIGEgc2VxdWVuY2Ugb3IgYXNzb2NpYXRpdmUgY29udGFpbmVyIHNvIHRoYXQg
b3V0LW9mLXJhbmdlIGxvb2t1cHMKLSAqIHJldHVybiBhIGRlZmF1bHQgdmFsdWUgcmF0aGVyIHRo
YW4gdGhyb3dpbmcgYW4gZXhjZXB0aW9uLgotICoKLSAqIFVzYWdlOgotICogZm9ybWF0KCJbbm9f
c3VjaF9rZXkiXSwgZGVmYXVsdGVkKG1hcCwgNDIpKSAgLT4gNDIKLSAqLwotbmFtZXNwYWNlIGRl
dGFpbCB7Ci10ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyLCBjbGFzcyBWYWx1ZT4KLXN0cnVjdCBE
ZWZhdWx0VmFsdWVXcmFwcGVyIHsKLSAgRGVmYXVsdFZhbHVlV3JhcHBlcihjb25zdCBDb250YWlu
ZXImIGNvbnRhaW5lciwgY29uc3QgVmFsdWUmIGRlZmF1bHRWYWx1ZSkKLSAgICAgIDogY29udGFp
bmVyKGNvbnRhaW5lciksIGRlZmF1bHRWYWx1ZShkZWZhdWx0VmFsdWUpIHt9Ci0KLSAgY29uc3Qg
Q29udGFpbmVyJiBjb250YWluZXI7Ci0gIGNvbnN0IFZhbHVlJiBkZWZhdWx0VmFsdWU7Ci19Owot
fSAvLyBuYW1lc3BhY2UKLQotdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5lciwgY2xhc3MgVmFsdWU+
Ci1kZXRhaWw6OkRlZmF1bHRWYWx1ZVdyYXBwZXI8Q29udGFpbmVyLCBWYWx1ZT4gZGVmYXVsdGVk
KAotICAgIGNvbnN0IENvbnRhaW5lciYgYywKLSAgICBjb25zdCBWYWx1ZSYgdikgewotICByZXR1
cm4gZGV0YWlsOjpEZWZhdWx0VmFsdWVXcmFwcGVyPENvbnRhaW5lciwgVmFsdWU+KGMsIHYpOwot
fQotCi0vKioKLSAqIEFwcGVuZCBmb3JtYXR0ZWQgb3V0cHV0IHRvIGEgc3RyaW5nLgotICoKLSAq
IHN0ZDo6c3RyaW5nIGZvbzsKLSAqIGZvcm1hdCgmZm9vLCAie30ge30iLCA0MiwgMjMpOwotICoK
LSAqIFNob3J0Y3V0IGZvciB0b0FwcGVuZChmb3JtYXQoLi4uKSwgJmZvbyk7Ci0gKi8KLXRlbXBs
YXRlIDxjbGFzcyBTdHIsIGNsYXNzLi4uIEFyZ3M+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJ
c1NvbWVTdHJpbmc8U3RyPjo6dmFsdWU+Ojp0eXBlCi1mb3JtYXQoU3RyKiBvdXQsIFN0cmluZ1Bp
ZWNlIGZtdCwgQXJncyYmLi4uIGFyZ3MpIHsKLSAgZm9ybWF0KGZtdCwgc3RkOjpmb3J3YXJkPEFy
Z3M+KGFyZ3MpLi4uKS5hcHBlbmRUbygqb3V0KTsKLX0KLQotLyoqCi0gKiBBcHBlbmQgdmZvcm1h
dHRlZCBvdXRwdXQgdG8gYSBzdHJpbmcuCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBTdHIsIGNsYXNz
IENvbnRhaW5lcj4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU29tZVN0cmluZzxTdHI+Ojp2
YWx1ZT46OnR5cGUKLXZmb3JtYXQoU3RyKiBvdXQsIFN0cmluZ1BpZWNlIGZtdCwgQ29udGFpbmVy
JiYgY29udGFpbmVyKSB7Ci0gIHZmb3JtYXQoZm10LCBzdGQ6OmZvcndhcmQ8Q29udGFpbmVyPihj
b250YWluZXIpKS5hcHBlbmRUbygqb3V0KTsKLX0KLQotLyoqCi0gKiBVdGlsaXRpZXMgZm9yIGFs
bCBmb3JtYXQgdmFsdWUgc3BlY2lhbGl6YXRpb25zLgotICovCi1uYW1lc3BhY2UgZm9ybWF0X3Zh
bHVlIHsKLQotLyoqCi0gKiBGb3JtYXQgYSBzdHJpbmcgaW4gInZhbCIsIG9iZXlpbmcgYXBwcm9w
cmlhdGUgYWxpZ25tZW50LCBwYWRkaW5nLCB3aWR0aCwKLSAqIGFuZCBwcmVjaXNpb24uICBUcmVh
dHMgQWxpZ246OkRFRkFVTFQgYXMgQWxpZ246OkxFRlQsIGFuZAotICogQWxpZ246OlBBRF9BRlRF
Ul9TSUdOIGFzIEFsaWduOjpSSUdIVDsgdXNlIGZvcm1hdE51bWJlciBmb3IKLSAqIG51bWJlci1z
cGVjaWZpYyBmb3JtYXR0aW5nLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgRm9ybWF0Q2FsbGJhY2s+
Ci12b2lkIGZvcm1hdFN0cmluZyhTdHJpbmdQaWVjZSB2YWwsIEZvcm1hdEFyZyYgYXJnLCBGb3Jt
YXRDYWxsYmFjayYgY2IpOwotCi0vKioKLSAqIEZvcm1hdCBhIG51bWJlciBpbiAidmFsIjsgdGhl
IGZpcnN0IHByZWZpeExlbiBjaGFyYWN0ZXJzIGZvcm0gdGhlIHByZWZpeAotICogKHNpZ24sICIw
eCIgYmFzZSBwcmVmaXgsIGV0Yykgd2hpY2ggbXVzdCBiZSBsZWZ0LWFsaWduZWQgaWYgdGhlIGFs
aWdubWVudAotICogaXMgQWxpZ246OlBBRF9BRlRFUl9TSUdOLiAgVHJlYXRzIEFsaWduOjpERUZB
VUxUIGFzIEFsaWduOjpMRUZULiAgSWdub3JlcwotICogYXJnLnByZWNpc2lvbiwgYXMgdGhhdCBo
YXMgYSBkaWZmZXJlbnQgbWVhbmluZyBmb3IgbnVtYmVycyAobm90ICJtYXhpbXVtCi0gKiBmaWVs
ZCB3aWR0aCIpCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBGb3JtYXRDYWxsYmFjaz4KLXZvaWQgZm9y
bWF0TnVtYmVyKAotICAgIFN0cmluZ1BpZWNlIHZhbCwKLSAgICBpbnQgcHJlZml4TGVuLAotICAg
IEZvcm1hdEFyZyYgYXJnLAotICAgIEZvcm1hdENhbGxiYWNrJiBjYik7Ci0KLS8qKgotICogRm9y
bWF0IGEgRm9ybWF0dGVyIG9iamVjdCByZWN1cnNpdmVseS4gIEJlaGF2ZXMganVzdCBsaWtlCi0g
KiBmb3JtYXRTdHJpbmcoZm10LnN0cigpLCBhcmcsIGNiKTsgYnV0IGF2b2lkcyBjcmVhdGluZyBh
IHRlbXBvcmFyeQotICogc3RyaW5nIGlmIHBvc3NpYmxlLgotICovCi10ZW1wbGF0ZSA8Ci0gICAg
Y2xhc3MgRm9ybWF0Q2FsbGJhY2ssCi0gICAgY2xhc3MgRGVyaXZlZCwKLSAgICBib29sIGNvbnRh
aW5lck1vZGUsCi0gICAgY2xhc3MuLi4gQXJncz4KLXZvaWQgZm9ybWF0Rm9ybWF0dGVyKAotICAg
IGNvbnN0IEJhc2VGb3JtYXR0ZXI8RGVyaXZlZCwgY29udGFpbmVyTW9kZSwgQXJncy4uLj4mIGZv
cm1hdHRlciwKLSAgICBGb3JtYXRBcmcmIGFyZywKLSAgICBGb3JtYXRDYWxsYmFjayYgY2IpOwot
Ci19IC8vIG5hbWVzcGFjZSBmb3JtYXRfdmFsdWUKLQotLyoKLSAqIFNwZWNpYWxpemUgZm9sbHk6
OkZvcm1hdFZhbHVlIGZvciB5b3VyIHR5cGUuCi0gKgotICogRm9ybWF0VmFsdWU8VD4gaXMgY29u
c3RydWN0ZWQgd2l0aCBhIChyZWZlcmVuY2UtY29sbGFwc2VkKSBUJiYsIHdoaWNoIGlzCi0gKiBn
dWFyYW50ZWVkIHRvIHN0YXkgYWxpdmUgdW50aWwgdGhlIEZvcm1hdFZhbHVlIG9iamVjdCBpcyBk
ZXN0cm95ZWQsIHNvIHlvdQotICogbWF5IGtlZXAgYSByZWZlcmVuY2UgKG9yIHBvaW50ZXIpIHRv
IGl0IGluc3RlYWQgb2YgbWFraW5nIGEgY29weS4KLSAqCi0gKiBZb3UgbXVzdCBkZWZpbmUKLSAq
ICAgdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrPgotICogICB2b2lkIGZvcm1hdChGb3JtYXRBcmcm
IGFyZywgQ2FsbGJhY2smIGNiKSBjb25zdDsKLSAqIHdpdGggdGhlIGZvbGxvd2luZyBzZW1hbnRp
Y3M6IGZvcm1hdCB0aGUgdmFsdWUgdXNpbmcgdGhlIGdpdmVuIGFyZ3VtZW50LgotICoKLSAqIGFy
ZyBpcyBnaXZlbiBieSBub24tY29uc3QgcmVmZXJlbmNlIGZvciBjb252ZW5pZW5jZSAtLSBpdCB3
b24ndCBiZSByZXVzZWQsCi0gKiBzbyBmZWVsIGZyZWUgdG8gbW9kaWZ5IGl0IGluIHBsYWNlIGlm
IG5lY2Vzc2FyeS4gIChGb3IgZXhhbXBsZSwgd3JhcCBhbgotICogZXhpc3RpbmcgY29udmVyc2lv
biBidXQgY2hhbmdlIHRoZSBkZWZhdWx0LCBvciByZW1vdmUgdGhlICJrZXkiIHdoZW4KLSAqIGV4
dHJhY3RpbmcgYW4gZWxlbWVudCBmcm9tIGEgY29udGFpbmVyKQotICoKLSAqIENhbGwgdGhlIGNh
bGxiYWNrIHRvIGFwcGVuZCBkYXRhIHRvIHRoZSBvdXRwdXQuICBZb3UgbWF5IGNhbGwgdGhlIGNh
bGxiYWNrCi0gKiBhcyBtYW55IHRpbWVzIGFzIHlvdSdkIGxpa2UgKG9yIG5vdCBhdCBhbGwsIGlm
IHlvdSB3YW50IHRvIG91dHB1dCBhbgotICogZW1wdHkgc3RyaW5nKQotICovCi0KLW5hbWVzcGFj
ZSBkZXRhaWwgewotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRW5hYmxlID0gdm9pZD4KLXN0
cnVjdCBJc0Zvcm1hdHRlciA6IHB1YmxpYyBzdGQ6OmZhbHNlX3R5cGUge307Ci0KLXRlbXBsYXRl
IDxjbGFzcyBUPgotc3RydWN0IElzRm9ybWF0dGVyPAotICAgIFQsCi0gICAgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8Ci0gICAgICAgIHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBUOjpJc0Zvcm1hdHRl
ciwgZGV0YWlsOjpGb3JtYXR0ZXJUYWc+Ojp2YWx1ZT46OgotICAgICAgICB0eXBlPiA6IHB1Ymxp
YyBzdGQ6OnRydWVfdHlwZSB7fTsKLX0gLy8gZm9sbHk6OmRldGFpbAotCi0vLyBEZXByZWNhdGVk
IEFQSS4gZm9ybWF0Q2hlY2tlZCgpIGV0LiBhbC4gbm93IGJlaGF2ZSBpZGVudGljYWxseSB0byB0
aGVpcgotLy8gbm9uLUNoZWNrZWQgY291bnRlcnBhcnRzLgotdGVtcGxhdGUgPGNsYXNzLi4uIEFy
Z3M+Ci1Gb3JtYXR0ZXI8ZmFsc2UsIEFyZ3MuLi4+IGZvcm1hdENoZWNrZWQoU3RyaW5nUGllY2Ug
Zm10LCBBcmdzJiYuLi4gYXJncykgewotICByZXR1cm4gZm9ybWF0KGZtdCwgc3RkOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKTsKLX0KLXRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgotaW5saW5lIHN0
ZDo6c3RyaW5nIHNmb3JtYXRDaGVja2VkKFN0cmluZ1BpZWNlIGZtdCwgQXJncyYmLi4uIGFyZ3Mp
IHsKLSAgcmV0dXJuIGZvcm1hdENoZWNrZWQoZm10LCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncyku
Li4pLnN0cigpOwotfQotdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5lcj4KLUZvcm1hdHRlcjx0cnVl
LCBDb250YWluZXI+IHZmb3JtYXRDaGVja2VkKAotICAgIFN0cmluZ1BpZWNlIGZtdCwKLSAgICBD
b250YWluZXImJiBjb250YWluZXIpIHsKLSAgcmV0dXJuIHZmb3JtYXQoZm10LCBzdGQ6OmZvcndh
cmQ8Q29udGFpbmVyPihjb250YWluZXIpKTsKLX0KLXRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+
Ci1pbmxpbmUgc3RkOjpzdHJpbmcgc3Zmb3JtYXRDaGVja2VkKFN0cmluZ1BpZWNlIGZtdCwgQ29u
dGFpbmVyJiYgY29udGFpbmVyKSB7Ci0gIHJldHVybiB2Zm9ybWF0Q2hlY2tlZChmbXQsIHN0ZDo6
Zm9yd2FyZDxDb250YWluZXI+KGNvbnRhaW5lcikpLnN0cigpOwotfQotdGVtcGxhdGUgPGNsYXNz
IFN0ciwgY2xhc3MuLi4gQXJncz4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU29tZVN0cmlu
ZzxTdHI+Ojp2YWx1ZT46OnR5cGUKLWZvcm1hdENoZWNrZWQoU3RyKiBvdXQsIFN0cmluZ1BpZWNl
IGZtdCwgQXJncyYmLi4uIGFyZ3MpIHsKLSAgZm9ybWF0Q2hlY2tlZChmbXQsIHN0ZDo6Zm9yd2Fy
ZDxBcmdzPihhcmdzKS4uLikuYXBwZW5kVG8oKm91dCk7Ci19Ci10ZW1wbGF0ZSA8Y2xhc3MgU3Ry
LCBjbGFzcyBDb250YWluZXI+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NvbWVTdHJpbmc8
U3RyPjo6dmFsdWU+Ojp0eXBlCi12Zm9ybWF0Q2hlY2tlZChTdHIqIG91dCwgU3RyaW5nUGllY2Ug
Zm10LCBDb250YWluZXImJiBjb250YWluZXIpIHsKLSAgdmZvcm1hdENoZWNrZWQoZm10LCBzdGQ6
OmZvcndhcmQ8Q29udGFpbmVyPihjb250YWluZXIpKS5hcHBlbmRUbygqb3V0KTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgZm9sbHkKLQotI2luY2x1ZGUgPGZvbGx5L0Zvcm1hdC1pbmwuaD4KLQotRk9M
TFlfUE9QX1dBUk5JTkcKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2ZvbGx5L0Zvcm1hdEFyZy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvRm9ybWF0QXJnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZl
YzZlODExNzczYWJlNDIyNDg2Y2RmMmRkMTFjNmYyMzRjNDYyYzUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZm9sbHkvRm9ybWF0QXJnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0g
KiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAq
Ci0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAq
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSA8c3RkZXhjZXB0PgotCi0jaW5jbHVkZSA8Zm9sbHkvQ29udi5oPgotI2lu
Y2x1ZGUgPGZvbGx5L0xpa2VseS5oPgotI2luY2x1ZGUgPGZvbGx5L1BvcnRhYmlsaXR5Lmg+Ci0j
aW5jbHVkZSA8Zm9sbHkvUmFuZ2UuaD4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotY2xhc3MgQmFk
Rm9ybWF0QXJnIDogcHVibGljIHN0ZDo6aW52YWxpZF9hcmd1bWVudCB7Ci0gcHVibGljOgotICBl
eHBsaWNpdCBCYWRGb3JtYXRBcmcoY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykKLSAgICA6IHN0ZDo6
aW52YWxpZF9hcmd1bWVudChtc2cpIHt9Ci19OwotCi0vKioKLSAqIFBhcnNlZCBmb3JtYXQgYXJn
dW1lbnQuCi0gKi8KLXN0cnVjdCBGb3JtYXRBcmcgewotICAvKioKLSAgICogUGFyc2UgYSBmb3Jt
YXQgYXJndW1lbnQgZnJvbSBhIHN0cmluZy4gIEtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZQotICAg
KiBwYXNzZWQtaW4gc3RyaW5nIC0tIGRvZXMgbm90IGNvcHkgdGhlIGdpdmVuIGNoYXJhY3RlcnMu
Ci0gICAqLwotICBleHBsaWNpdCBGb3JtYXRBcmcoU3RyaW5nUGllY2Ugc3ApCi0gICAgOiBmdWxs
QXJnU3RyaW5nKHNwKSwKLSAgICAgIGZpbGwoa0RlZmF1bHRGaWxsKSwKLSAgICAgIGFsaWduKEFs
aWduOjpERUZBVUxUKSwKLSAgICAgIHNpZ24oU2lnbjo6REVGQVVMVCksCi0gICAgICBiYXNlUHJl
Zml4KGZhbHNlKSwKLSAgICAgIHRob3VzYW5kc1NlcGFyYXRvcihmYWxzZSksCi0gICAgICB0cmFp
bGluZ0RvdChmYWxzZSksCi0gICAgICB3aWR0aChrRGVmYXVsdFdpZHRoKSwKLSAgICAgIHdpZHRo
SW5kZXgoa05vSW5kZXgpLAotICAgICAgcHJlY2lzaW9uKGtEZWZhdWx0UHJlY2lzaW9uKSwKLSAg
ICAgIHByZXNlbnRhdGlvbihrRGVmYXVsdFByZXNlbnRhdGlvbiksCi0gICAgICBuZXh0S2V5TW9k
ZV8oTmV4dEtleU1vZGU6Ok5PTkUpIHsKLSAgICBpZiAoIXNwLmVtcHR5KCkpIHsKLSAgICAgIGlu
aXRTbG93KCk7Ci0gICAgfQotICB9Ci0KLSAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICBJTlRFR0VS
LAotICAgIEZMT0FULAotICAgIE9USEVSCi0gIH07Ci0gIC8qKgotICAgKiBWYWxpZGF0ZSB0aGUg
YXJndW1lbnQgZm9yIHRoZSBnaXZlbiB0eXBlOyB0aHJvd3Mgb24gZXJyb3IuCi0gICAqLwotICB2
b2lkIHZhbGlkYXRlKFR5cGUgdHlwZSkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIFRocm93IGFuIGV4
Y2VwdGlvbiBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgZmFsc2UuICBUaGUgZXhjZXB0aW9uCi0g
ICAqIG1lc3NhZ2Ugd2lsbCBjb250YWluIHRoZSBhcmd1bWVudCBzdHJpbmcgYXMgd2VsbCBhcyBh
bnkgcGFzc2VkLWluCi0gICAqIGFyZ3VtZW50cyB0byBlbmZvcmNlLCBmb3JtYXR0ZWQgdXNpbmcg
Zm9sbHk6OnRvPHN0ZDo6c3RyaW5nPi4KLSAgICovCi0gIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBB
cmdzPgotICB2b2lkIGVuZm9yY2UoYm9vbCB2LCBBcmdzJiYuLi4gYXJncykgY29uc3QgewotICAg
IGlmIChVTkxJS0VMWSghdikpIHsKLSAgICAgIGVycm9yKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLik7Ci0gICAgfQotICB9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+Ci0gIHN0
ZDo6c3RyaW5nIGVycm9yU3RyKEFyZ3MmJi4uLiBhcmdzKSBjb25zdDsKLSAgdGVtcGxhdGUgPHR5
cGVuYW1lLi4uIEFyZ3M+Ci0gIFtbbm9yZXR1cm5dXSB2b2lkIGVycm9yKEFyZ3MmJi4uLiBhcmdz
KSBjb25zdDsKLQotICAvKioKLSAgICogRnVsbCBhcmd1bWVudCBzdHJpbmcsIGFzIHBhc3NlZCBp
biB0byB0aGUgY29uc3RydWN0b3IuCi0gICAqLwotICBTdHJpbmdQaWVjZSBmdWxsQXJnU3RyaW5n
OwotCi0gIC8qKgotICAgKiBGaWxsCi0gICAqLwotICBzdGF0aWMgY29uc3RleHByIGNoYXIga0Rl
ZmF1bHRGaWxsID0gJ1wwJzsKLSAgY2hhciBmaWxsOwotCi0gIC8qKgotICAgKiBBbGlnbm1lbnQK
LSAgICovCi0gIGVudW0gY2xhc3MgQWxpZ24gOiB1aW50OF90IHsKLSAgICBERUZBVUxULAotICAg
IExFRlQsCi0gICAgUklHSFQsCi0gICAgUEFEX0FGVEVSX1NJR04sCi0gICAgQ0VOVEVSLAotICAg
IElOVkFMSUQKLSAgfTsKLSAgQWxpZ24gYWxpZ247Ci0KLSAgLyoqCi0gICAqIFNpZ24KLSAgICov
Ci0gIGVudW0gY2xhc3MgU2lnbiA6IHVpbnQ4X3QgewotICAgIERFRkFVTFQsCi0gICAgUExVU19P
Ul9NSU5VUywKLSAgICBNSU5VUywKLSAgICBTUEFDRV9PUl9NSU5VUywKLSAgICBJTlZBTElECi0g
IH07Ci0gIFNpZ24gc2lnbjsKLQotICAvKioKLSAgICogT3V0cHV0IGJhc2UgcHJlZml4ICgwIGZv
ciBvY3RhbCwgMHggZm9yIGhleCkKLSAgICovCi0gIGJvb2wgYmFzZVByZWZpeDsKLQotICAvKioK
LSAgICogT3V0cHV0IHRob3VzYW5kcyBzZXBhcmF0b3IgKGNvbW1hKQotICAgKi8KLSAgYm9vbCB0
aG91c2FuZHNTZXBhcmF0b3I7Ci0KLSAgLyoqCi0gICAqIEZvcmNlIGEgdHJhaWxpbmcgZGVjaW1h
bCBvbiBkb3VibGVzIHdoaWNoIGNvdWxkIGJlIHJlbmRlcmVkIGFzIGludHMKLSAgICovCi0gIGJv
b2wgdHJhaWxpbmdEb3Q7Ci0KLSAgLyoqCi0gICAqIEZpZWxkIHdpZHRoIGFuZCBvcHRpb25hbCBh
cmd1bWVudCBpbmRleAotICAgKi8KLSAgc3RhdGljIGNvbnN0ZXhwciBpbnQga0RlZmF1bHRXaWR0
aCA9IC0xOwotICBzdGF0aWMgY29uc3RleHByIGludCBrRHluYW1pY1dpZHRoID0gLTI7Ci0gIHN0
YXRpYyBjb25zdGV4cHIgaW50IGtOb0luZGV4ID0gLTE7Ci0gIGludCB3aWR0aDsKLSAgaW50IHdp
ZHRoSW5kZXg7Ci0KLSAgLyoqCi0gICAqIFByZWNpc2lvbgotICAgKi8KLSAgc3RhdGljIGNvbnN0
ZXhwciBpbnQga0RlZmF1bHRQcmVjaXNpb24gPSAtMTsKLSAgaW50IHByZWNpc2lvbjsKLQotICAv
KioKLSAgICogUHJlc2VudGF0aW9uCi0gICAqLwotICBzdGF0aWMgY29uc3RleHByIGNoYXIga0Rl
ZmF1bHRQcmVzZW50YXRpb24gPSAnXDAnOwotICBjaGFyIHByZXNlbnRhdGlvbjsKLQotICAvKioK
LSAgICogU3BsaXQgYSBrZXkgY29tcG9uZW50IGZyb20gImtleSIsIHdoaWNoIG11c3QgYmUgbm9u
LWVtcHR5IChhbiBleGNlcHRpb24KLSAgICogaXMgdGhyb3duIG90aGVyd2lzZSkuCi0gICAqLwot
ICB0ZW1wbGF0ZSA8Ym9vbCBlbXB0eU9rPWZhbHNlPgotICBTdHJpbmdQaWVjZSBzcGxpdEtleSgp
OwotCi0gIC8qKgotICAgKiBJcyB0aGUgZW50aXJlIGtleSBlbXB0eT8KLSAgICovCi0gIGJvb2wg
a2V5RW1wdHkoKSBjb25zdCB7Ci0gICAgcmV0dXJuIG5leHRLZXlNb2RlXyA9PSBOZXh0S2V5TW9k
ZTo6Tk9ORSAmJiBrZXlfLmVtcHR5KCk7Ci0gIH0KLQotICAvKioKLSAgICogU3BsaXQgYW4ga2V5
IGNvbXBvbmVudCBmcm9tICJrZXkiLCB3aGljaCBtdXN0IGJlIG5vbi1lbXB0eSBhbmQgYSB2YWxp
ZAotICAgKiBpbnRlZ2VyIChhbiBleGNlcHRpb24gaXMgdGhyb3duIG90aGVyd2lzZSkuCi0gICAq
LwotICBpbnQgc3BsaXRJbnRLZXkoKTsKLQotICB2b2lkIHNldE5leHRJbnRLZXkoaW50IHZhbCkg
ewotICAgIGFzc2VydChuZXh0S2V5TW9kZV8gPT0gTmV4dEtleU1vZGU6Ok5PTkUpOwotICAgIG5l
eHRLZXlNb2RlXyA9IE5leHRLZXlNb2RlOjpJTlQ7Ci0gICAgbmV4dEludEtleV8gPSB2YWw7Ci0g
IH0KLQotICB2b2lkIHNldE5leHRLZXkoU3RyaW5nUGllY2UgdmFsKSB7Ci0gICAgYXNzZXJ0KG5l
eHRLZXlNb2RlXyA9PSBOZXh0S2V5TW9kZTo6Tk9ORSk7Ci0gICAgbmV4dEtleU1vZGVfID0gTmV4
dEtleU1vZGU6OlNUUklORzsKLSAgICBuZXh0S2V5XyA9IHZhbDsKLSAgfQotCi0gcHJpdmF0ZToK
LSAgdm9pZCBpbml0U2xvdygpOwotICB0ZW1wbGF0ZSA8Ym9vbCBlbXB0eU9rPgotICBTdHJpbmdQ
aWVjZSBkb1NwbGl0S2V5KCk7Ci0KLSAgU3RyaW5nUGllY2Uga2V5XzsKLSAgaW50IG5leHRJbnRL
ZXlfOwotICBTdHJpbmdQaWVjZSBuZXh0S2V5XzsKLSAgZW51bSBjbGFzcyBOZXh0S2V5TW9kZSB7
Ci0gICAgTk9ORSwKLSAgICBJTlQsCi0gICAgU1RSSU5HLAotICB9OwotICBOZXh0S2V5TW9kZSBu
ZXh0S2V5TW9kZV87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KLWlubGluZSBz
dGQ6OnN0cmluZyBGb3JtYXRBcmc6OmVycm9yU3RyKEFyZ3MmJi4uLiBhcmdzKSBjb25zdCB7Ci0g
IHJldHVybiB0bzxzdGQ6OnN0cmluZz4oCi0gICAgImludmFsaWQgZm9ybWF0IGFyZ3VtZW50IHsi
LCBmdWxsQXJnU3RyaW5nLCAifTogIiwKLSAgICBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4p
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KLVtbbm9yZXR1cm5dXSBpbmxpbmUg
dm9pZCBGb3JtYXRBcmc6OmVycm9yKEFyZ3MmJi4uLiBhcmdzKSBjb25zdCB7Ci0gIHRocm93IEJh
ZEZvcm1hdEFyZyhlcnJvclN0cihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsKLX0KLQot
dGVtcGxhdGUgPGJvb2wgZW1wdHlPaz4KLWlubGluZSBTdHJpbmdQaWVjZSBGb3JtYXRBcmc6OnNw
bGl0S2V5KCkgewotICBlbmZvcmNlKG5leHRLZXlNb2RlXyAhPSBOZXh0S2V5TW9kZTo6SU5ULCAi
aW50ZWdlciBrZXkgZXhwZWN0ZWQiKTsKLSAgcmV0dXJuIGRvU3BsaXRLZXk8ZW1wdHlPaz4oKTsK
LX0KLQotdGVtcGxhdGUgPGJvb2wgZW1wdHlPaz4KLWlubGluZSBTdHJpbmdQaWVjZSBGb3JtYXRB
cmc6OmRvU3BsaXRLZXkoKSB7Ci0gIGlmIChuZXh0S2V5TW9kZV8gPT0gTmV4dEtleU1vZGU6OlNU
UklORykgewotICAgIG5leHRLZXlNb2RlXyA9IE5leHRLZXlNb2RlOjpOT05FOwotICAgIGlmICgh
ZW1wdHlPaykgeyAgLy8gc3RhdGljCi0gICAgICBlbmZvcmNlKCFuZXh0S2V5Xy5lbXB0eSgpLCAi
bm9uLWVtcHR5IGtleSByZXF1aXJlZCIpOwotICAgIH0KLSAgICByZXR1cm4gbmV4dEtleV87Ci0g
IH0KLQotICBpZiAoa2V5Xy5lbXB0eSgpKSB7Ci0gICAgaWYgKCFlbXB0eU9rKSB7ICAvLyBzdGF0
aWMKLSAgICAgIGVycm9yKCJub24tZW1wdHkga2V5IHJlcXVpcmVkIik7Ci0gICAgfQotICAgIHJl
dHVybiBTdHJpbmdQaWVjZSgpOwotICB9Ci0KLSAgY29uc3QgY2hhciogYiA9IGtleV8uYmVnaW4o
KTsKLSAgY29uc3QgY2hhciogZSA9IGtleV8uZW5kKCk7Ci0gIGNvbnN0IGNoYXIqIHA7Ci0gIGlm
IChlWy0xXSA9PSAnXScpIHsKLSAgICAtLWU7Ci0gICAgcCA9IHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihtZW1jaHIoYiwgJ1snLCBzaXplX3QoZSAtIGIpKSk7Ci0gICAgZW5mb3JjZShwICE9IG51
bGxwdHIsICJ1bm1hdGNoZWQgJ10nIik7Ci0gIH0gZWxzZSB7Ci0gICAgcCA9IHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihtZW1jaHIoYiwgJy4nLCBzaXplX3QoZSAtIGIpKSk7Ci0gIH0KLSAgaWYg
KHApIHsKLSAgICBrZXlfLmFzc2lnbihwICsgMSwgZSk7Ci0gIH0gZWxzZSB7Ci0gICAgcCA9IGU7
Ci0gICAga2V5Xy5jbGVhcigpOwotICB9Ci0gIGlmICghZW1wdHlPaykgeyAgLy8gc3RhdGljCi0g
ICAgZW5mb3JjZShiICE9IHAsICJub24tZW1wdHkga2V5IHJlcXVpcmVkIik7Ci0gIH0KLSAgcmV0
dXJuIFN0cmluZ1BpZWNlKGIsIHApOwotfQotCi1pbmxpbmUgaW50IEZvcm1hdEFyZzo6c3BsaXRJ
bnRLZXkoKSB7Ci0gIGlmIChuZXh0S2V5TW9kZV8gPT0gTmV4dEtleU1vZGU6OklOVCkgewotICAg
IG5leHRLZXlNb2RlXyA9IE5leHRLZXlNb2RlOjpOT05FOwotICAgIHJldHVybiBuZXh0SW50S2V5
XzsKLSAgfQotICB0cnkgewotICAgIHJldHVybiB0bzxpbnQ+KGRvU3BsaXRLZXk8dHJ1ZT4oKSk7
Ci0gIH0gY2F0Y2ggKGNvbnN0IHN0ZDo6b3V0X29mX3JhbmdlJikgewotICAgIGVycm9yKCJpbnRl
Z2VyIGtleSByZXF1aXJlZCIpOwotICAgIHJldHVybiAwOyAgLy8gdW5yZWFjaGVkCi0gIH0KLX0K
LQotfSAgLy8gbmFtZXNwYWNlIGZvbGx5CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9mb2xseS9Gb3JtYXRUYWJsZXMuY3BwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvRm9ybWF0VGFibGVzLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZmMwMmJjZTdhN2M0YzIyZDRhYjYxNWQzNTY4MDI1MzlkMGU0Njhj
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9Gb3JtYXRUYWJsZXMuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNzUxICswLDAgQEAKLSNpbmNsdWRlIDxmb2xseS9Gb3JtYXRBcmcuaD4K
LQotbmFtZXNwYWNlIGZvbGx5IHsKLW5hbWVzcGFjZSBkZXRhaWwgewotCi1leHRlcm4gY29uc3Qg
Rm9ybWF0QXJnOjpBbGlnbiBmb3JtYXRBbGlnblRhYmxlW10gPSB7Ci0gIEZvcm1hdEFyZzo6QWxp
Z246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFs
aWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpB
bGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6
QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6
OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJn
OjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFy
Zzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRB
cmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0
QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1h
dEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3Jt
YXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9y
bWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZv
cm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBG
b3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAg
Rm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0g
IEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAot
ICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAK
LSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwg
Ci0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQs
IAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElE
LCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJ
RCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFM
SUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZB
TElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5W
QUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklO
VkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJ
TlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6
SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246
OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWdu
OjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGln
bjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OkxFRlQsIEZvcm1hdEFyZzo6QWxpZ246
OlBBRF9BRlRFUl9TSUdOLCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6UklHSFQsIEZvcm1hdEFyZzo6
QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6
OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJn
OjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFy
Zzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRB
cmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0
QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1h
dEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3Jt
YXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9y
bWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZv
cm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBG
b3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwg
Rm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQs
IEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElE
LCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJ
RCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFM
SUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpDRU5U
RVIsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZB
TElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5W
QUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklO
VkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJ
TlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6
SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246
OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWdu
OjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGln
bjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxp
Z246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFs
aWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpB
bGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6
QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6
OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJn
OjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFy
Zzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRB
cmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0
QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1h
dEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3Jt
YXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9y
bWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZv
cm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBG
b3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAg
Rm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0g
IEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAot
ICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAK
LSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwg
Ci0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQs
IAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElE
LCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJ
RCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFM
SUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZB
TElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5W
QUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklO
VkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJ
TlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6
SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246
OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWdu
OjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGln
bjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxp
Z246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFs
aWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpB
bGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6
QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6
OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJn
OjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFy
Zzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRB
cmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0
QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1h
dEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3Jt
YXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9y
bWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZv
cm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBG
b3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwg
Rm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQs
IEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElE
LCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJ
RCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklOVkFM
SUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJTlZB
TElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6SU5W
QUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246OklO
VkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWduOjpJ
TlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGlnbjo6
SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxpZ246
OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFsaWdu
OjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpBbGln
bjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6QWxp
Z246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OkFs
aWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpB
bGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6
QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6
OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJn
OjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFy
Zzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3JtYXRB
cmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9ybWF0
QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZvcm1h
dEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBGb3Jt
YXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAgRm9y
bWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi0gIEZv
cm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6QWxpZ246OklOVkFMSUQsIAotICBG
b3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OkFsaWduOjpJTlZBTElELCAKLSAg
Rm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpBbGlnbjo6SU5WQUxJRCwgCi19
OwotCi1leHRlcm4gY29uc3QgRm9ybWF0QXJnOjpTaWduIGZvcm1hdFNpZ25UYWJsZVtdID0gewot
ICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0g
IEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAg
Rm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBG
b3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZv
cm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9y
bWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3Jt
YXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1h
dEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0
QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRB
cmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFy
Zzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJn
OjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6
OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6
U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpT
aWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNp
Z246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2ln
bjo6U1BBQ0VfT1JfTUlOVVMsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFy
Zzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJn
OjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6
OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6
U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpT
aWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OlBMVVNfT1JfTUlOVVMsIAotICBGb3JtYXRB
cmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6TUlOVVMsIAotICBGb3JtYXRBcmc6
OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6
U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpT
aWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNp
Z246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2ln
bjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWdu
OjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246
OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6
SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJ
TlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklO
VkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5W
QUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZB
TElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFM
SUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJ
RCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElE
LCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQs
IEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwg
Rm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBG
b3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZv
cm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9y
bWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3Jt
YXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1h
dEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0
QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRB
cmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFy
Zzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJn
OjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6
OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6
U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpT
aWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNp
Z246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2ln
bjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWdu
OjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246
OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6
SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJ
TlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklO
VkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5W
QUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZB
TElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFM
SUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJ
RCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElE
LCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQs
IAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwg
Ci0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAK
LSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAot
ICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0g
IEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAg
Rm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBG
b3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZv
cm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9y
bWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3Jt
YXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1h
dEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0
QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRB
cmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFy
Zzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJn
OjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6
OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6
U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpT
aWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNp
Z246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2ln
bjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWdu
OjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246
OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6
SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJ
TlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklO
VkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5W
QUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZB
TElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFM
SUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJ
RCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElE
LCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQs
IEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwg
Rm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBG
b3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZv
cm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9y
bWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3Jt
YXRBcmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1h
dEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0
QXJnOjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRB
cmc6OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFy
Zzo6U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJn
OjpTaWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6
OlNpZ246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6
U2lnbjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpT
aWduOjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNp
Z246OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2ln
bjo6SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWdu
OjpJTlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246
OklOVkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6
SU5WQUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJ
TlZBTElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklO
VkFMSUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5W
QUxJRCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZB
TElELCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFM
SUQsIAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJ
RCwgCi0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElE
LCAKLSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQs
IAotICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwg
Ci0gIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAK
LSAgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAot
ICBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgCi0g
IEZvcm1hdEFyZzo6U2lnbjo6SU5WQUxJRCwgRm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCAKLSAg
Rm9ybWF0QXJnOjpTaWduOjpJTlZBTElELCBGb3JtYXRBcmc6OlNpZ246OklOVkFMSUQsIAotfTsK
LQotZXh0ZXJuIGNvbnN0IGNoYXIgZm9ybWF0T2N0YWxbNTEyXVszXSA9IHsKLXsnMCcsICcwJywg
JzAnfSwgeycwJywgJzAnLCAnMSd9LCB7JzAnLCAnMCcsICcyJ30sIHsnMCcsICcwJywgJzMnfSwg
Ci17JzAnLCAnMCcsICc0J30sIHsnMCcsICcwJywgJzUnfSwgeycwJywgJzAnLCAnNid9LCB7JzAn
LCAnMCcsICc3J30sIAoteycwJywgJzEnLCAnMCd9LCB7JzAnLCAnMScsICcxJ30sIHsnMCcsICcx
JywgJzInfSwgeycwJywgJzEnLCAnMyd9LCAKLXsnMCcsICcxJywgJzQnfSwgeycwJywgJzEnLCAn
NSd9LCB7JzAnLCAnMScsICc2J30sIHsnMCcsICcxJywgJzcnfSwgCi17JzAnLCAnMicsICcwJ30s
IHsnMCcsICcyJywgJzEnfSwgeycwJywgJzInLCAnMid9LCB7JzAnLCAnMicsICczJ30sIAoteycw
JywgJzInLCAnNCd9LCB7JzAnLCAnMicsICc1J30sIHsnMCcsICcyJywgJzYnfSwgeycwJywgJzIn
LCAnNyd9LCAKLXsnMCcsICczJywgJzAnfSwgeycwJywgJzMnLCAnMSd9LCB7JzAnLCAnMycsICcy
J30sIHsnMCcsICczJywgJzMnfSwgCi17JzAnLCAnMycsICc0J30sIHsnMCcsICczJywgJzUnfSwg
eycwJywgJzMnLCAnNid9LCB7JzAnLCAnMycsICc3J30sIAoteycwJywgJzQnLCAnMCd9LCB7JzAn
LCAnNCcsICcxJ30sIHsnMCcsICc0JywgJzInfSwgeycwJywgJzQnLCAnMyd9LCAKLXsnMCcsICc0
JywgJzQnfSwgeycwJywgJzQnLCAnNSd9LCB7JzAnLCAnNCcsICc2J30sIHsnMCcsICc0JywgJzcn
fSwgCi17JzAnLCAnNScsICcwJ30sIHsnMCcsICc1JywgJzEnfSwgeycwJywgJzUnLCAnMid9LCB7
JzAnLCAnNScsICczJ30sIAoteycwJywgJzUnLCAnNCd9LCB7JzAnLCAnNScsICc1J30sIHsnMCcs
ICc1JywgJzYnfSwgeycwJywgJzUnLCAnNyd9LCAKLXsnMCcsICc2JywgJzAnfSwgeycwJywgJzYn
LCAnMSd9LCB7JzAnLCAnNicsICcyJ30sIHsnMCcsICc2JywgJzMnfSwgCi17JzAnLCAnNicsICc0
J30sIHsnMCcsICc2JywgJzUnfSwgeycwJywgJzYnLCAnNid9LCB7JzAnLCAnNicsICc3J30sIAot
eycwJywgJzcnLCAnMCd9LCB7JzAnLCAnNycsICcxJ30sIHsnMCcsICc3JywgJzInfSwgeycwJywg
JzcnLCAnMyd9LCAKLXsnMCcsICc3JywgJzQnfSwgeycwJywgJzcnLCAnNSd9LCB7JzAnLCAnNycs
ICc2J30sIHsnMCcsICc3JywgJzcnfSwgCi17JzEnLCAnMCcsICcwJ30sIHsnMScsICcwJywgJzEn
fSwgeycxJywgJzAnLCAnMid9LCB7JzEnLCAnMCcsICczJ30sIAoteycxJywgJzAnLCAnNCd9LCB7
JzEnLCAnMCcsICc1J30sIHsnMScsICcwJywgJzYnfSwgeycxJywgJzAnLCAnNyd9LCAKLXsnMScs
ICcxJywgJzAnfSwgeycxJywgJzEnLCAnMSd9LCB7JzEnLCAnMScsICcyJ30sIHsnMScsICcxJywg
JzMnfSwgCi17JzEnLCAnMScsICc0J30sIHsnMScsICcxJywgJzUnfSwgeycxJywgJzEnLCAnNid9
LCB7JzEnLCAnMScsICc3J30sIAoteycxJywgJzInLCAnMCd9LCB7JzEnLCAnMicsICcxJ30sIHsn
MScsICcyJywgJzInfSwgeycxJywgJzInLCAnMyd9LCAKLXsnMScsICcyJywgJzQnfSwgeycxJywg
JzInLCAnNSd9LCB7JzEnLCAnMicsICc2J30sIHsnMScsICcyJywgJzcnfSwgCi17JzEnLCAnMycs
ICcwJ30sIHsnMScsICczJywgJzEnfSwgeycxJywgJzMnLCAnMid9LCB7JzEnLCAnMycsICczJ30s
IAoteycxJywgJzMnLCAnNCd9LCB7JzEnLCAnMycsICc1J30sIHsnMScsICczJywgJzYnfSwgeycx
JywgJzMnLCAnNyd9LCAKLXsnMScsICc0JywgJzAnfSwgeycxJywgJzQnLCAnMSd9LCB7JzEnLCAn
NCcsICcyJ30sIHsnMScsICc0JywgJzMnfSwgCi17JzEnLCAnNCcsICc0J30sIHsnMScsICc0Jywg
JzUnfSwgeycxJywgJzQnLCAnNid9LCB7JzEnLCAnNCcsICc3J30sIAoteycxJywgJzUnLCAnMCd9
LCB7JzEnLCAnNScsICcxJ30sIHsnMScsICc1JywgJzInfSwgeycxJywgJzUnLCAnMyd9LCAKLXsn
MScsICc1JywgJzQnfSwgeycxJywgJzUnLCAnNSd9LCB7JzEnLCAnNScsICc2J30sIHsnMScsICc1
JywgJzcnfSwgCi17JzEnLCAnNicsICcwJ30sIHsnMScsICc2JywgJzEnfSwgeycxJywgJzYnLCAn
Mid9LCB7JzEnLCAnNicsICczJ30sIAoteycxJywgJzYnLCAnNCd9LCB7JzEnLCAnNicsICc1J30s
IHsnMScsICc2JywgJzYnfSwgeycxJywgJzYnLCAnNyd9LCAKLXsnMScsICc3JywgJzAnfSwgeycx
JywgJzcnLCAnMSd9LCB7JzEnLCAnNycsICcyJ30sIHsnMScsICc3JywgJzMnfSwgCi17JzEnLCAn
NycsICc0J30sIHsnMScsICc3JywgJzUnfSwgeycxJywgJzcnLCAnNid9LCB7JzEnLCAnNycsICc3
J30sIAoteycyJywgJzAnLCAnMCd9LCB7JzInLCAnMCcsICcxJ30sIHsnMicsICcwJywgJzInfSwg
eycyJywgJzAnLCAnMyd9LCAKLXsnMicsICcwJywgJzQnfSwgeycyJywgJzAnLCAnNSd9LCB7JzIn
LCAnMCcsICc2J30sIHsnMicsICcwJywgJzcnfSwgCi17JzInLCAnMScsICcwJ30sIHsnMicsICcx
JywgJzEnfSwgeycyJywgJzEnLCAnMid9LCB7JzInLCAnMScsICczJ30sIAoteycyJywgJzEnLCAn
NCd9LCB7JzInLCAnMScsICc1J30sIHsnMicsICcxJywgJzYnfSwgeycyJywgJzEnLCAnNyd9LCAK
LXsnMicsICcyJywgJzAnfSwgeycyJywgJzInLCAnMSd9LCB7JzInLCAnMicsICcyJ30sIHsnMics
ICcyJywgJzMnfSwgCi17JzInLCAnMicsICc0J30sIHsnMicsICcyJywgJzUnfSwgeycyJywgJzIn
LCAnNid9LCB7JzInLCAnMicsICc3J30sIAoteycyJywgJzMnLCAnMCd9LCB7JzInLCAnMycsICcx
J30sIHsnMicsICczJywgJzInfSwgeycyJywgJzMnLCAnMyd9LCAKLXsnMicsICczJywgJzQnfSwg
eycyJywgJzMnLCAnNSd9LCB7JzInLCAnMycsICc2J30sIHsnMicsICczJywgJzcnfSwgCi17JzIn
LCAnNCcsICcwJ30sIHsnMicsICc0JywgJzEnfSwgeycyJywgJzQnLCAnMid9LCB7JzInLCAnNCcs
ICczJ30sIAoteycyJywgJzQnLCAnNCd9LCB7JzInLCAnNCcsICc1J30sIHsnMicsICc0JywgJzYn
fSwgeycyJywgJzQnLCAnNyd9LCAKLXsnMicsICc1JywgJzAnfSwgeycyJywgJzUnLCAnMSd9LCB7
JzInLCAnNScsICcyJ30sIHsnMicsICc1JywgJzMnfSwgCi17JzInLCAnNScsICc0J30sIHsnMics
ICc1JywgJzUnfSwgeycyJywgJzUnLCAnNid9LCB7JzInLCAnNScsICc3J30sIAoteycyJywgJzYn
LCAnMCd9LCB7JzInLCAnNicsICcxJ30sIHsnMicsICc2JywgJzInfSwgeycyJywgJzYnLCAnMyd9
LCAKLXsnMicsICc2JywgJzQnfSwgeycyJywgJzYnLCAnNSd9LCB7JzInLCAnNicsICc2J30sIHsn
MicsICc2JywgJzcnfSwgCi17JzInLCAnNycsICcwJ30sIHsnMicsICc3JywgJzEnfSwgeycyJywg
JzcnLCAnMid9LCB7JzInLCAnNycsICczJ30sIAoteycyJywgJzcnLCAnNCd9LCB7JzInLCAnNycs
ICc1J30sIHsnMicsICc3JywgJzYnfSwgeycyJywgJzcnLCAnNyd9LCAKLXsnMycsICcwJywgJzAn
fSwgeyczJywgJzAnLCAnMSd9LCB7JzMnLCAnMCcsICcyJ30sIHsnMycsICcwJywgJzMnfSwgCi17
JzMnLCAnMCcsICc0J30sIHsnMycsICcwJywgJzUnfSwgeyczJywgJzAnLCAnNid9LCB7JzMnLCAn
MCcsICc3J30sIAoteyczJywgJzEnLCAnMCd9LCB7JzMnLCAnMScsICcxJ30sIHsnMycsICcxJywg
JzInfSwgeyczJywgJzEnLCAnMyd9LCAKLXsnMycsICcxJywgJzQnfSwgeyczJywgJzEnLCAnNSd9
LCB7JzMnLCAnMScsICc2J30sIHsnMycsICcxJywgJzcnfSwgCi17JzMnLCAnMicsICcwJ30sIHsn
MycsICcyJywgJzEnfSwgeyczJywgJzInLCAnMid9LCB7JzMnLCAnMicsICczJ30sIAoteyczJywg
JzInLCAnNCd9LCB7JzMnLCAnMicsICc1J30sIHsnMycsICcyJywgJzYnfSwgeyczJywgJzInLCAn
Nyd9LCAKLXsnMycsICczJywgJzAnfSwgeyczJywgJzMnLCAnMSd9LCB7JzMnLCAnMycsICcyJ30s
IHsnMycsICczJywgJzMnfSwgCi17JzMnLCAnMycsICc0J30sIHsnMycsICczJywgJzUnfSwgeycz
JywgJzMnLCAnNid9LCB7JzMnLCAnMycsICc3J30sIAoteyczJywgJzQnLCAnMCd9LCB7JzMnLCAn
NCcsICcxJ30sIHsnMycsICc0JywgJzInfSwgeyczJywgJzQnLCAnMyd9LCAKLXsnMycsICc0Jywg
JzQnfSwgeyczJywgJzQnLCAnNSd9LCB7JzMnLCAnNCcsICc2J30sIHsnMycsICc0JywgJzcnfSwg
Ci17JzMnLCAnNScsICcwJ30sIHsnMycsICc1JywgJzEnfSwgeyczJywgJzUnLCAnMid9LCB7JzMn
LCAnNScsICczJ30sIAoteyczJywgJzUnLCAnNCd9LCB7JzMnLCAnNScsICc1J30sIHsnMycsICc1
JywgJzYnfSwgeyczJywgJzUnLCAnNyd9LCAKLXsnMycsICc2JywgJzAnfSwgeyczJywgJzYnLCAn
MSd9LCB7JzMnLCAnNicsICcyJ30sIHsnMycsICc2JywgJzMnfSwgCi17JzMnLCAnNicsICc0J30s
IHsnMycsICc2JywgJzUnfSwgeyczJywgJzYnLCAnNid9LCB7JzMnLCAnNicsICc3J30sIAoteycz
JywgJzcnLCAnMCd9LCB7JzMnLCAnNycsICcxJ30sIHsnMycsICc3JywgJzInfSwgeyczJywgJzcn
LCAnMyd9LCAKLXsnMycsICc3JywgJzQnfSwgeyczJywgJzcnLCAnNSd9LCB7JzMnLCAnNycsICc2
J30sIHsnMycsICc3JywgJzcnfSwgCi17JzQnLCAnMCcsICcwJ30sIHsnNCcsICcwJywgJzEnfSwg
eyc0JywgJzAnLCAnMid9LCB7JzQnLCAnMCcsICczJ30sIAoteyc0JywgJzAnLCAnNCd9LCB7JzQn
LCAnMCcsICc1J30sIHsnNCcsICcwJywgJzYnfSwgeyc0JywgJzAnLCAnNyd9LCAKLXsnNCcsICcx
JywgJzAnfSwgeyc0JywgJzEnLCAnMSd9LCB7JzQnLCAnMScsICcyJ30sIHsnNCcsICcxJywgJzMn
fSwgCi17JzQnLCAnMScsICc0J30sIHsnNCcsICcxJywgJzUnfSwgeyc0JywgJzEnLCAnNid9LCB7
JzQnLCAnMScsICc3J30sIAoteyc0JywgJzInLCAnMCd9LCB7JzQnLCAnMicsICcxJ30sIHsnNCcs
ICcyJywgJzInfSwgeyc0JywgJzInLCAnMyd9LCAKLXsnNCcsICcyJywgJzQnfSwgeyc0JywgJzIn
LCAnNSd9LCB7JzQnLCAnMicsICc2J30sIHsnNCcsICcyJywgJzcnfSwgCi17JzQnLCAnMycsICcw
J30sIHsnNCcsICczJywgJzEnfSwgeyc0JywgJzMnLCAnMid9LCB7JzQnLCAnMycsICczJ30sIAot
eyc0JywgJzMnLCAnNCd9LCB7JzQnLCAnMycsICc1J30sIHsnNCcsICczJywgJzYnfSwgeyc0Jywg
JzMnLCAnNyd9LCAKLXsnNCcsICc0JywgJzAnfSwgeyc0JywgJzQnLCAnMSd9LCB7JzQnLCAnNCcs
ICcyJ30sIHsnNCcsICc0JywgJzMnfSwgCi17JzQnLCAnNCcsICc0J30sIHsnNCcsICc0JywgJzUn
fSwgeyc0JywgJzQnLCAnNid9LCB7JzQnLCAnNCcsICc3J30sIAoteyc0JywgJzUnLCAnMCd9LCB7
JzQnLCAnNScsICcxJ30sIHsnNCcsICc1JywgJzInfSwgeyc0JywgJzUnLCAnMyd9LCAKLXsnNCcs
ICc1JywgJzQnfSwgeyc0JywgJzUnLCAnNSd9LCB7JzQnLCAnNScsICc2J30sIHsnNCcsICc1Jywg
JzcnfSwgCi17JzQnLCAnNicsICcwJ30sIHsnNCcsICc2JywgJzEnfSwgeyc0JywgJzYnLCAnMid9
LCB7JzQnLCAnNicsICczJ30sIAoteyc0JywgJzYnLCAnNCd9LCB7JzQnLCAnNicsICc1J30sIHsn
NCcsICc2JywgJzYnfSwgeyc0JywgJzYnLCAnNyd9LCAKLXsnNCcsICc3JywgJzAnfSwgeyc0Jywg
JzcnLCAnMSd9LCB7JzQnLCAnNycsICcyJ30sIHsnNCcsICc3JywgJzMnfSwgCi17JzQnLCAnNycs
ICc0J30sIHsnNCcsICc3JywgJzUnfSwgeyc0JywgJzcnLCAnNid9LCB7JzQnLCAnNycsICc3J30s
IAoteyc1JywgJzAnLCAnMCd9LCB7JzUnLCAnMCcsICcxJ30sIHsnNScsICcwJywgJzInfSwgeyc1
JywgJzAnLCAnMyd9LCAKLXsnNScsICcwJywgJzQnfSwgeyc1JywgJzAnLCAnNSd9LCB7JzUnLCAn
MCcsICc2J30sIHsnNScsICcwJywgJzcnfSwgCi17JzUnLCAnMScsICcwJ30sIHsnNScsICcxJywg
JzEnfSwgeyc1JywgJzEnLCAnMid9LCB7JzUnLCAnMScsICczJ30sIAoteyc1JywgJzEnLCAnNCd9
LCB7JzUnLCAnMScsICc1J30sIHsnNScsICcxJywgJzYnfSwgeyc1JywgJzEnLCAnNyd9LCAKLXsn
NScsICcyJywgJzAnfSwgeyc1JywgJzInLCAnMSd9LCB7JzUnLCAnMicsICcyJ30sIHsnNScsICcy
JywgJzMnfSwgCi17JzUnLCAnMicsICc0J30sIHsnNScsICcyJywgJzUnfSwgeyc1JywgJzInLCAn
Nid9LCB7JzUnLCAnMicsICc3J30sIAoteyc1JywgJzMnLCAnMCd9LCB7JzUnLCAnMycsICcxJ30s
IHsnNScsICczJywgJzInfSwgeyc1JywgJzMnLCAnMyd9LCAKLXsnNScsICczJywgJzQnfSwgeyc1
JywgJzMnLCAnNSd9LCB7JzUnLCAnMycsICc2J30sIHsnNScsICczJywgJzcnfSwgCi17JzUnLCAn
NCcsICcwJ30sIHsnNScsICc0JywgJzEnfSwgeyc1JywgJzQnLCAnMid9LCB7JzUnLCAnNCcsICcz
J30sIAoteyc1JywgJzQnLCAnNCd9LCB7JzUnLCAnNCcsICc1J30sIHsnNScsICc0JywgJzYnfSwg
eyc1JywgJzQnLCAnNyd9LCAKLXsnNScsICc1JywgJzAnfSwgeyc1JywgJzUnLCAnMSd9LCB7JzUn
LCAnNScsICcyJ30sIHsnNScsICc1JywgJzMnfSwgCi17JzUnLCAnNScsICc0J30sIHsnNScsICc1
JywgJzUnfSwgeyc1JywgJzUnLCAnNid9LCB7JzUnLCAnNScsICc3J30sIAoteyc1JywgJzYnLCAn
MCd9LCB7JzUnLCAnNicsICcxJ30sIHsnNScsICc2JywgJzInfSwgeyc1JywgJzYnLCAnMyd9LCAK
LXsnNScsICc2JywgJzQnfSwgeyc1JywgJzYnLCAnNSd9LCB7JzUnLCAnNicsICc2J30sIHsnNScs
ICc2JywgJzcnfSwgCi17JzUnLCAnNycsICcwJ30sIHsnNScsICc3JywgJzEnfSwgeyc1JywgJzcn
LCAnMid9LCB7JzUnLCAnNycsICczJ30sIAoteyc1JywgJzcnLCAnNCd9LCB7JzUnLCAnNycsICc1
J30sIHsnNScsICc3JywgJzYnfSwgeyc1JywgJzcnLCAnNyd9LCAKLXsnNicsICcwJywgJzAnfSwg
eyc2JywgJzAnLCAnMSd9LCB7JzYnLCAnMCcsICcyJ30sIHsnNicsICcwJywgJzMnfSwgCi17JzYn
LCAnMCcsICc0J30sIHsnNicsICcwJywgJzUnfSwgeyc2JywgJzAnLCAnNid9LCB7JzYnLCAnMCcs
ICc3J30sIAoteyc2JywgJzEnLCAnMCd9LCB7JzYnLCAnMScsICcxJ30sIHsnNicsICcxJywgJzIn
fSwgeyc2JywgJzEnLCAnMyd9LCAKLXsnNicsICcxJywgJzQnfSwgeyc2JywgJzEnLCAnNSd9LCB7
JzYnLCAnMScsICc2J30sIHsnNicsICcxJywgJzcnfSwgCi17JzYnLCAnMicsICcwJ30sIHsnNics
ICcyJywgJzEnfSwgeyc2JywgJzInLCAnMid9LCB7JzYnLCAnMicsICczJ30sIAoteyc2JywgJzIn
LCAnNCd9LCB7JzYnLCAnMicsICc1J30sIHsnNicsICcyJywgJzYnfSwgeyc2JywgJzInLCAnNyd9
LCAKLXsnNicsICczJywgJzAnfSwgeyc2JywgJzMnLCAnMSd9LCB7JzYnLCAnMycsICcyJ30sIHsn
NicsICczJywgJzMnfSwgCi17JzYnLCAnMycsICc0J30sIHsnNicsICczJywgJzUnfSwgeyc2Jywg
JzMnLCAnNid9LCB7JzYnLCAnMycsICc3J30sIAoteyc2JywgJzQnLCAnMCd9LCB7JzYnLCAnNCcs
ICcxJ30sIHsnNicsICc0JywgJzInfSwgeyc2JywgJzQnLCAnMyd9LCAKLXsnNicsICc0JywgJzQn
fSwgeyc2JywgJzQnLCAnNSd9LCB7JzYnLCAnNCcsICc2J30sIHsnNicsICc0JywgJzcnfSwgCi17
JzYnLCAnNScsICcwJ30sIHsnNicsICc1JywgJzEnfSwgeyc2JywgJzUnLCAnMid9LCB7JzYnLCAn
NScsICczJ30sIAoteyc2JywgJzUnLCAnNCd9LCB7JzYnLCAnNScsICc1J30sIHsnNicsICc1Jywg
JzYnfSwgeyc2JywgJzUnLCAnNyd9LCAKLXsnNicsICc2JywgJzAnfSwgeyc2JywgJzYnLCAnMSd9
LCB7JzYnLCAnNicsICcyJ30sIHsnNicsICc2JywgJzMnfSwgCi17JzYnLCAnNicsICc0J30sIHsn
NicsICc2JywgJzUnfSwgeyc2JywgJzYnLCAnNid9LCB7JzYnLCAnNicsICc3J30sIAoteyc2Jywg
JzcnLCAnMCd9LCB7JzYnLCAnNycsICcxJ30sIHsnNicsICc3JywgJzInfSwgeyc2JywgJzcnLCAn
Myd9LCAKLXsnNicsICc3JywgJzQnfSwgeyc2JywgJzcnLCAnNSd9LCB7JzYnLCAnNycsICc2J30s
IHsnNicsICc3JywgJzcnfSwgCi17JzcnLCAnMCcsICcwJ30sIHsnNycsICcwJywgJzEnfSwgeyc3
JywgJzAnLCAnMid9LCB7JzcnLCAnMCcsICczJ30sIAoteyc3JywgJzAnLCAnNCd9LCB7JzcnLCAn
MCcsICc1J30sIHsnNycsICcwJywgJzYnfSwgeyc3JywgJzAnLCAnNyd9LCAKLXsnNycsICcxJywg
JzAnfSwgeyc3JywgJzEnLCAnMSd9LCB7JzcnLCAnMScsICcyJ30sIHsnNycsICcxJywgJzMnfSwg
Ci17JzcnLCAnMScsICc0J30sIHsnNycsICcxJywgJzUnfSwgeyc3JywgJzEnLCAnNid9LCB7Jzcn
LCAnMScsICc3J30sIAoteyc3JywgJzInLCAnMCd9LCB7JzcnLCAnMicsICcxJ30sIHsnNycsICcy
JywgJzInfSwgeyc3JywgJzInLCAnMyd9LCAKLXsnNycsICcyJywgJzQnfSwgeyc3JywgJzInLCAn
NSd9LCB7JzcnLCAnMicsICc2J30sIHsnNycsICcyJywgJzcnfSwgCi17JzcnLCAnMycsICcwJ30s
IHsnNycsICczJywgJzEnfSwgeyc3JywgJzMnLCAnMid9LCB7JzcnLCAnMycsICczJ30sIAoteyc3
JywgJzMnLCAnNCd9LCB7JzcnLCAnMycsICc1J30sIHsnNycsICczJywgJzYnfSwgeyc3JywgJzMn
LCAnNyd9LCAKLXsnNycsICc0JywgJzAnfSwgeyc3JywgJzQnLCAnMSd9LCB7JzcnLCAnNCcsICcy
J30sIHsnNycsICc0JywgJzMnfSwgCi17JzcnLCAnNCcsICc0J30sIHsnNycsICc0JywgJzUnfSwg
eyc3JywgJzQnLCAnNid9LCB7JzcnLCAnNCcsICc3J30sIAoteyc3JywgJzUnLCAnMCd9LCB7Jzcn
LCAnNScsICcxJ30sIHsnNycsICc1JywgJzInfSwgeyc3JywgJzUnLCAnMyd9LCAKLXsnNycsICc1
JywgJzQnfSwgeyc3JywgJzUnLCAnNSd9LCB7JzcnLCAnNScsICc2J30sIHsnNycsICc1JywgJzcn
fSwgCi17JzcnLCAnNicsICcwJ30sIHsnNycsICc2JywgJzEnfSwgeyc3JywgJzYnLCAnMid9LCB7
JzcnLCAnNicsICczJ30sIAoteyc3JywgJzYnLCAnNCd9LCB7JzcnLCAnNicsICc1J30sIHsnNycs
ICc2JywgJzYnfSwgeyc3JywgJzYnLCAnNyd9LCAKLXsnNycsICc3JywgJzAnfSwgeyc3JywgJzcn
LCAnMSd9LCB7JzcnLCAnNycsICcyJ30sIHsnNycsICc3JywgJzMnfSwgCi17JzcnLCAnNycsICc0
J30sIHsnNycsICc3JywgJzUnfSwgeyc3JywgJzcnLCAnNid9LCB7JzcnLCAnNycsICc3J30sIAot
fTsKLQotZXh0ZXJuIGNvbnN0IGNoYXIgZm9ybWF0SGV4TG93ZXJbMjU2XVsyXSA9IHsKLXsnMCcs
ICcwJ30sIHsnMCcsICcxJ30sIHsnMCcsICcyJ30sIHsnMCcsICczJ30sIHsnMCcsICc0J30sIHsn
MCcsICc1J30sIAoteycwJywgJzYnfSwgeycwJywgJzcnfSwgeycwJywgJzgnfSwgeycwJywgJzkn
fSwgeycwJywgJ2EnfSwgeycwJywgJ2InfSwgCi17JzAnLCAnYyd9LCB7JzAnLCAnZCd9LCB7JzAn
LCAnZSd9LCB7JzAnLCAnZid9LCB7JzEnLCAnMCd9LCB7JzEnLCAnMSd9LCAKLXsnMScsICcyJ30s
IHsnMScsICczJ30sIHsnMScsICc0J30sIHsnMScsICc1J30sIHsnMScsICc2J30sIHsnMScsICc3
J30sIAoteycxJywgJzgnfSwgeycxJywgJzknfSwgeycxJywgJ2EnfSwgeycxJywgJ2InfSwgeycx
JywgJ2MnfSwgeycxJywgJ2QnfSwgCi17JzEnLCAnZSd9LCB7JzEnLCAnZid9LCB7JzInLCAnMCd9
LCB7JzInLCAnMSd9LCB7JzInLCAnMid9LCB7JzInLCAnMyd9LCAKLXsnMicsICc0J30sIHsnMics
ICc1J30sIHsnMicsICc2J30sIHsnMicsICc3J30sIHsnMicsICc4J30sIHsnMicsICc5J30sIAot
eycyJywgJ2EnfSwgeycyJywgJ2InfSwgeycyJywgJ2MnfSwgeycyJywgJ2QnfSwgeycyJywgJ2Un
fSwgeycyJywgJ2YnfSwgCi17JzMnLCAnMCd9LCB7JzMnLCAnMSd9LCB7JzMnLCAnMid9LCB7JzMn
LCAnMyd9LCB7JzMnLCAnNCd9LCB7JzMnLCAnNSd9LCAKLXsnMycsICc2J30sIHsnMycsICc3J30s
IHsnMycsICc4J30sIHsnMycsICc5J30sIHsnMycsICdhJ30sIHsnMycsICdiJ30sIAoteyczJywg
J2MnfSwgeyczJywgJ2QnfSwgeyczJywgJ2UnfSwgeyczJywgJ2YnfSwgeyc0JywgJzAnfSwgeyc0
JywgJzEnfSwgCi17JzQnLCAnMid9LCB7JzQnLCAnMyd9LCB7JzQnLCAnNCd9LCB7JzQnLCAnNSd9
LCB7JzQnLCAnNid9LCB7JzQnLCAnNyd9LCAKLXsnNCcsICc4J30sIHsnNCcsICc5J30sIHsnNCcs
ICdhJ30sIHsnNCcsICdiJ30sIHsnNCcsICdjJ30sIHsnNCcsICdkJ30sIAoteyc0JywgJ2UnfSwg
eyc0JywgJ2YnfSwgeyc1JywgJzAnfSwgeyc1JywgJzEnfSwgeyc1JywgJzInfSwgeyc1JywgJzMn
fSwgCi17JzUnLCAnNCd9LCB7JzUnLCAnNSd9LCB7JzUnLCAnNid9LCB7JzUnLCAnNyd9LCB7JzUn
LCAnOCd9LCB7JzUnLCAnOSd9LCAKLXsnNScsICdhJ30sIHsnNScsICdiJ30sIHsnNScsICdjJ30s
IHsnNScsICdkJ30sIHsnNScsICdlJ30sIHsnNScsICdmJ30sIAoteyc2JywgJzAnfSwgeyc2Jywg
JzEnfSwgeyc2JywgJzInfSwgeyc2JywgJzMnfSwgeyc2JywgJzQnfSwgeyc2JywgJzUnfSwgCi17
JzYnLCAnNid9LCB7JzYnLCAnNyd9LCB7JzYnLCAnOCd9LCB7JzYnLCAnOSd9LCB7JzYnLCAnYSd9
LCB7JzYnLCAnYid9LCAKLXsnNicsICdjJ30sIHsnNicsICdkJ30sIHsnNicsICdlJ30sIHsnNics
ICdmJ30sIHsnNycsICcwJ30sIHsnNycsICcxJ30sIAoteyc3JywgJzInfSwgeyc3JywgJzMnfSwg
eyc3JywgJzQnfSwgeyc3JywgJzUnfSwgeyc3JywgJzYnfSwgeyc3JywgJzcnfSwgCi17JzcnLCAn
OCd9LCB7JzcnLCAnOSd9LCB7JzcnLCAnYSd9LCB7JzcnLCAnYid9LCB7JzcnLCAnYyd9LCB7Jzcn
LCAnZCd9LCAKLXsnNycsICdlJ30sIHsnNycsICdmJ30sIHsnOCcsICcwJ30sIHsnOCcsICcxJ30s
IHsnOCcsICcyJ30sIHsnOCcsICczJ30sIAoteyc4JywgJzQnfSwgeyc4JywgJzUnfSwgeyc4Jywg
JzYnfSwgeyc4JywgJzcnfSwgeyc4JywgJzgnfSwgeyc4JywgJzknfSwgCi17JzgnLCAnYSd9LCB7
JzgnLCAnYid9LCB7JzgnLCAnYyd9LCB7JzgnLCAnZCd9LCB7JzgnLCAnZSd9LCB7JzgnLCAnZid9
LCAKLXsnOScsICcwJ30sIHsnOScsICcxJ30sIHsnOScsICcyJ30sIHsnOScsICczJ30sIHsnOScs
ICc0J30sIHsnOScsICc1J30sIAoteyc5JywgJzYnfSwgeyc5JywgJzcnfSwgeyc5JywgJzgnfSwg
eyc5JywgJzknfSwgeyc5JywgJ2EnfSwgeyc5JywgJ2InfSwgCi17JzknLCAnYyd9LCB7JzknLCAn
ZCd9LCB7JzknLCAnZSd9LCB7JzknLCAnZid9LCB7J2EnLCAnMCd9LCB7J2EnLCAnMSd9LCAKLXsn
YScsICcyJ30sIHsnYScsICczJ30sIHsnYScsICc0J30sIHsnYScsICc1J30sIHsnYScsICc2J30s
IHsnYScsICc3J30sIAoteydhJywgJzgnfSwgeydhJywgJzknfSwgeydhJywgJ2EnfSwgeydhJywg
J2InfSwgeydhJywgJ2MnfSwgeydhJywgJ2QnfSwgCi17J2EnLCAnZSd9LCB7J2EnLCAnZid9LCB7
J2InLCAnMCd9LCB7J2InLCAnMSd9LCB7J2InLCAnMid9LCB7J2InLCAnMyd9LCAKLXsnYicsICc0
J30sIHsnYicsICc1J30sIHsnYicsICc2J30sIHsnYicsICc3J30sIHsnYicsICc4J30sIHsnYics
ICc5J30sIAoteydiJywgJ2EnfSwgeydiJywgJ2InfSwgeydiJywgJ2MnfSwgeydiJywgJ2QnfSwg
eydiJywgJ2UnfSwgeydiJywgJ2YnfSwgCi17J2MnLCAnMCd9LCB7J2MnLCAnMSd9LCB7J2MnLCAn
Mid9LCB7J2MnLCAnMyd9LCB7J2MnLCAnNCd9LCB7J2MnLCAnNSd9LCAKLXsnYycsICc2J30sIHsn
YycsICc3J30sIHsnYycsICc4J30sIHsnYycsICc5J30sIHsnYycsICdhJ30sIHsnYycsICdiJ30s
IAoteydjJywgJ2MnfSwgeydjJywgJ2QnfSwgeydjJywgJ2UnfSwgeydjJywgJ2YnfSwgeydkJywg
JzAnfSwgeydkJywgJzEnfSwgCi17J2QnLCAnMid9LCB7J2QnLCAnMyd9LCB7J2QnLCAnNCd9LCB7
J2QnLCAnNSd9LCB7J2QnLCAnNid9LCB7J2QnLCAnNyd9LCAKLXsnZCcsICc4J30sIHsnZCcsICc5
J30sIHsnZCcsICdhJ30sIHsnZCcsICdiJ30sIHsnZCcsICdjJ30sIHsnZCcsICdkJ30sIAoteydk
JywgJ2UnfSwgeydkJywgJ2YnfSwgeydlJywgJzAnfSwgeydlJywgJzEnfSwgeydlJywgJzInfSwg
eydlJywgJzMnfSwgCi17J2UnLCAnNCd9LCB7J2UnLCAnNSd9LCB7J2UnLCAnNid9LCB7J2UnLCAn
Nyd9LCB7J2UnLCAnOCd9LCB7J2UnLCAnOSd9LCAKLXsnZScsICdhJ30sIHsnZScsICdiJ30sIHsn
ZScsICdjJ30sIHsnZScsICdkJ30sIHsnZScsICdlJ30sIHsnZScsICdmJ30sIAoteydmJywgJzAn
fSwgeydmJywgJzEnfSwgeydmJywgJzInfSwgeydmJywgJzMnfSwgeydmJywgJzQnfSwgeydmJywg
JzUnfSwgCi17J2YnLCAnNid9LCB7J2YnLCAnNyd9LCB7J2YnLCAnOCd9LCB7J2YnLCAnOSd9LCB7
J2YnLCAnYSd9LCB7J2YnLCAnYid9LCAKLXsnZicsICdjJ30sIHsnZicsICdkJ30sIHsnZicsICdl
J30sIHsnZicsICdmJ30sIAotfTsKLQotZXh0ZXJuIGNvbnN0IGNoYXIgZm9ybWF0SGV4VXBwZXJb
MjU2XVsyXSA9IHsKLXsnMCcsICcwJ30sIHsnMCcsICcxJ30sIHsnMCcsICcyJ30sIHsnMCcsICcz
J30sIHsnMCcsICc0J30sIHsnMCcsICc1J30sIAoteycwJywgJzYnfSwgeycwJywgJzcnfSwgeycw
JywgJzgnfSwgeycwJywgJzknfSwgeycwJywgJ0EnfSwgeycwJywgJ0InfSwgCi17JzAnLCAnQyd9
LCB7JzAnLCAnRCd9LCB7JzAnLCAnRSd9LCB7JzAnLCAnRid9LCB7JzEnLCAnMCd9LCB7JzEnLCAn
MSd9LCAKLXsnMScsICcyJ30sIHsnMScsICczJ30sIHsnMScsICc0J30sIHsnMScsICc1J30sIHsn
MScsICc2J30sIHsnMScsICc3J30sIAoteycxJywgJzgnfSwgeycxJywgJzknfSwgeycxJywgJ0En
fSwgeycxJywgJ0InfSwgeycxJywgJ0MnfSwgeycxJywgJ0QnfSwgCi17JzEnLCAnRSd9LCB7JzEn
LCAnRid9LCB7JzInLCAnMCd9LCB7JzInLCAnMSd9LCB7JzInLCAnMid9LCB7JzInLCAnMyd9LCAK
LXsnMicsICc0J30sIHsnMicsICc1J30sIHsnMicsICc2J30sIHsnMicsICc3J30sIHsnMicsICc4
J30sIHsnMicsICc5J30sIAoteycyJywgJ0EnfSwgeycyJywgJ0InfSwgeycyJywgJ0MnfSwgeycy
JywgJ0QnfSwgeycyJywgJ0UnfSwgeycyJywgJ0YnfSwgCi17JzMnLCAnMCd9LCB7JzMnLCAnMSd9
LCB7JzMnLCAnMid9LCB7JzMnLCAnMyd9LCB7JzMnLCAnNCd9LCB7JzMnLCAnNSd9LCAKLXsnMycs
ICc2J30sIHsnMycsICc3J30sIHsnMycsICc4J30sIHsnMycsICc5J30sIHsnMycsICdBJ30sIHsn
MycsICdCJ30sIAoteyczJywgJ0MnfSwgeyczJywgJ0QnfSwgeyczJywgJ0UnfSwgeyczJywgJ0Yn
fSwgeyc0JywgJzAnfSwgeyc0JywgJzEnfSwgCi17JzQnLCAnMid9LCB7JzQnLCAnMyd9LCB7JzQn
LCAnNCd9LCB7JzQnLCAnNSd9LCB7JzQnLCAnNid9LCB7JzQnLCAnNyd9LCAKLXsnNCcsICc4J30s
IHsnNCcsICc5J30sIHsnNCcsICdBJ30sIHsnNCcsICdCJ30sIHsnNCcsICdDJ30sIHsnNCcsICdE
J30sIAoteyc0JywgJ0UnfSwgeyc0JywgJ0YnfSwgeyc1JywgJzAnfSwgeyc1JywgJzEnfSwgeyc1
JywgJzInfSwgeyc1JywgJzMnfSwgCi17JzUnLCAnNCd9LCB7JzUnLCAnNSd9LCB7JzUnLCAnNid9
LCB7JzUnLCAnNyd9LCB7JzUnLCAnOCd9LCB7JzUnLCAnOSd9LCAKLXsnNScsICdBJ30sIHsnNScs
ICdCJ30sIHsnNScsICdDJ30sIHsnNScsICdEJ30sIHsnNScsICdFJ30sIHsnNScsICdGJ30sIAot
eyc2JywgJzAnfSwgeyc2JywgJzEnfSwgeyc2JywgJzInfSwgeyc2JywgJzMnfSwgeyc2JywgJzQn
fSwgeyc2JywgJzUnfSwgCi17JzYnLCAnNid9LCB7JzYnLCAnNyd9LCB7JzYnLCAnOCd9LCB7JzYn
LCAnOSd9LCB7JzYnLCAnQSd9LCB7JzYnLCAnQid9LCAKLXsnNicsICdDJ30sIHsnNicsICdEJ30s
IHsnNicsICdFJ30sIHsnNicsICdGJ30sIHsnNycsICcwJ30sIHsnNycsICcxJ30sIAoteyc3Jywg
JzInfSwgeyc3JywgJzMnfSwgeyc3JywgJzQnfSwgeyc3JywgJzUnfSwgeyc3JywgJzYnfSwgeyc3
JywgJzcnfSwgCi17JzcnLCAnOCd9LCB7JzcnLCAnOSd9LCB7JzcnLCAnQSd9LCB7JzcnLCAnQid9
LCB7JzcnLCAnQyd9LCB7JzcnLCAnRCd9LCAKLXsnNycsICdFJ30sIHsnNycsICdGJ30sIHsnOCcs
ICcwJ30sIHsnOCcsICcxJ30sIHsnOCcsICcyJ30sIHsnOCcsICczJ30sIAoteyc4JywgJzQnfSwg
eyc4JywgJzUnfSwgeyc4JywgJzYnfSwgeyc4JywgJzcnfSwgeyc4JywgJzgnfSwgeyc4JywgJzkn
fSwgCi17JzgnLCAnQSd9LCB7JzgnLCAnQid9LCB7JzgnLCAnQyd9LCB7JzgnLCAnRCd9LCB7Jzgn
LCAnRSd9LCB7JzgnLCAnRid9LCAKLXsnOScsICcwJ30sIHsnOScsICcxJ30sIHsnOScsICcyJ30s
IHsnOScsICczJ30sIHsnOScsICc0J30sIHsnOScsICc1J30sIAoteyc5JywgJzYnfSwgeyc5Jywg
JzcnfSwgeyc5JywgJzgnfSwgeyc5JywgJzknfSwgeyc5JywgJ0EnfSwgeyc5JywgJ0InfSwgCi17
JzknLCAnQyd9LCB7JzknLCAnRCd9LCB7JzknLCAnRSd9LCB7JzknLCAnRid9LCB7J0EnLCAnMCd9
LCB7J0EnLCAnMSd9LCAKLXsnQScsICcyJ30sIHsnQScsICczJ30sIHsnQScsICc0J30sIHsnQScs
ICc1J30sIHsnQScsICc2J30sIHsnQScsICc3J30sIAoteydBJywgJzgnfSwgeydBJywgJzknfSwg
eydBJywgJ0EnfSwgeydBJywgJ0InfSwgeydBJywgJ0MnfSwgeydBJywgJ0QnfSwgCi17J0EnLCAn
RSd9LCB7J0EnLCAnRid9LCB7J0InLCAnMCd9LCB7J0InLCAnMSd9LCB7J0InLCAnMid9LCB7J0In
LCAnMyd9LCAKLXsnQicsICc0J30sIHsnQicsICc1J30sIHsnQicsICc2J30sIHsnQicsICc3J30s
IHsnQicsICc4J30sIHsnQicsICc5J30sIAoteydCJywgJ0EnfSwgeydCJywgJ0InfSwgeydCJywg
J0MnfSwgeydCJywgJ0QnfSwgeydCJywgJ0UnfSwgeydCJywgJ0YnfSwgCi17J0MnLCAnMCd9LCB7
J0MnLCAnMSd9LCB7J0MnLCAnMid9LCB7J0MnLCAnMyd9LCB7J0MnLCAnNCd9LCB7J0MnLCAnNSd9
LCAKLXsnQycsICc2J30sIHsnQycsICc3J30sIHsnQycsICc4J30sIHsnQycsICc5J30sIHsnQycs
ICdBJ30sIHsnQycsICdCJ30sIAoteydDJywgJ0MnfSwgeydDJywgJ0QnfSwgeydDJywgJ0UnfSwg
eydDJywgJ0YnfSwgeydEJywgJzAnfSwgeydEJywgJzEnfSwgCi17J0QnLCAnMid9LCB7J0QnLCAn
Myd9LCB7J0QnLCAnNCd9LCB7J0QnLCAnNSd9LCB7J0QnLCAnNid9LCB7J0QnLCAnNyd9LCAKLXsn
RCcsICc4J30sIHsnRCcsICc5J30sIHsnRCcsICdBJ30sIHsnRCcsICdCJ30sIHsnRCcsICdDJ30s
IHsnRCcsICdEJ30sIAoteydEJywgJ0UnfSwgeydEJywgJ0YnfSwgeydFJywgJzAnfSwgeydFJywg
JzEnfSwgeydFJywgJzInfSwgeydFJywgJzMnfSwgCi17J0UnLCAnNCd9LCB7J0UnLCAnNSd9LCB7
J0UnLCAnNid9LCB7J0UnLCAnNyd9LCB7J0UnLCAnOCd9LCB7J0UnLCAnOSd9LCAKLXsnRScsICdB
J30sIHsnRScsICdCJ30sIHsnRScsICdDJ30sIHsnRScsICdEJ30sIHsnRScsICdFJ30sIHsnRScs
ICdGJ30sIAoteydGJywgJzAnfSwgeydGJywgJzEnfSwgeydGJywgJzInfSwgeydGJywgJzMnfSwg
eydGJywgJzQnfSwgeydGJywgJzUnfSwgCi17J0YnLCAnNid9LCB7J0YnLCAnNyd9LCB7J0YnLCAn
OCd9LCB7J0YnLCAnOSd9LCB7J0YnLCAnQSd9LCB7J0YnLCAnQid9LCAKLXsnRicsICdDJ30sIHsn
RicsICdEJ30sIHsnRicsICdFJ30sIHsnRicsICdGJ30sIAotfTsKLQotZXh0ZXJuIGNvbnN0IGNo
YXIgZm9ybWF0QmluYXJ5WzI1Nl1bOF0gPSB7Ci17JzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcw
JywgJzAnLCAnMCd9LCAKLXsnMCcsICcwJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcxJ30s
IAoteycwJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcxJywgJzAnfSwgCi17JzAnLCAnMCcs
ICcwJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMSd9LCAKLXsnMCcsICcwJywgJzAnLCAnMCcsICcw
JywgJzEnLCAnMCcsICcwJ30sIAoteycwJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMScsICcwJywg
JzEnfSwgCi17JzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMCd9LCAKLXsnMCcs
ICcwJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJ30sIAoteycwJywgJzAnLCAnMCcsICcw
JywgJzEnLCAnMCcsICcwJywgJzAnfSwgCi17JzAnLCAnMCcsICcwJywgJzAnLCAnMScsICcwJywg
JzAnLCAnMSd9LCAKLXsnMCcsICcwJywgJzAnLCAnMCcsICcxJywgJzAnLCAnMScsICcwJ30sIAot
eycwJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMCcsICcxJywgJzEnfSwgCi17JzAnLCAnMCcsICcw
JywgJzAnLCAnMScsICcxJywgJzAnLCAnMCd9LCAKLXsnMCcsICcwJywgJzAnLCAnMCcsICcxJywg
JzEnLCAnMCcsICcxJ30sIAoteycwJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzAn
fSwgCi17JzAnLCAnMCcsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMSd9LCAKLXsnMCcsICcw
JywgJzAnLCAnMScsICcwJywgJzAnLCAnMCcsICcwJ30sIAoteycwJywgJzAnLCAnMCcsICcxJywg
JzAnLCAnMCcsICcwJywgJzEnfSwgCi17JzAnLCAnMCcsICcwJywgJzEnLCAnMCcsICcwJywgJzEn
LCAnMCd9LCAKLXsnMCcsICcwJywgJzAnLCAnMScsICcwJywgJzAnLCAnMScsICcxJ30sIAoteycw
JywgJzAnLCAnMCcsICcxJywgJzAnLCAnMScsICcwJywgJzAnfSwgCi17JzAnLCAnMCcsICcwJywg
JzEnLCAnMCcsICcxJywgJzAnLCAnMSd9LCAKLXsnMCcsICcwJywgJzAnLCAnMScsICcwJywgJzEn
LCAnMScsICcwJ30sIAoteycwJywgJzAnLCAnMCcsICcxJywgJzAnLCAnMScsICcxJywgJzEnfSwg
Ci17JzAnLCAnMCcsICcwJywgJzEnLCAnMScsICcwJywgJzAnLCAnMCd9LCAKLXsnMCcsICcwJywg
JzAnLCAnMScsICcxJywgJzAnLCAnMCcsICcxJ30sIAoteycwJywgJzAnLCAnMCcsICcxJywgJzEn
LCAnMCcsICcxJywgJzAnfSwgCi17JzAnLCAnMCcsICcwJywgJzEnLCAnMScsICcwJywgJzEnLCAn
MSd9LCAKLXsnMCcsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMCcsICcwJ30sIAoteycwJywg
JzAnLCAnMCcsICcxJywgJzEnLCAnMScsICcwJywgJzEnfSwgCi17JzAnLCAnMCcsICcwJywgJzEn
LCAnMScsICcxJywgJzEnLCAnMCd9LCAKLXsnMCcsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAn
MScsICcxJ30sIAoteycwJywgJzAnLCAnMScsICcwJywgJzAnLCAnMCcsICcwJywgJzAnfSwgCi17
JzAnLCAnMCcsICcxJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMSd9LCAKLXsnMCcsICcwJywgJzEn
LCAnMCcsICcwJywgJzAnLCAnMScsICcwJ30sIAoteycwJywgJzAnLCAnMScsICcwJywgJzAnLCAn
MCcsICcxJywgJzEnfSwgCi17JzAnLCAnMCcsICcxJywgJzAnLCAnMCcsICcxJywgJzAnLCAnMCd9
LCAKLXsnMCcsICcwJywgJzEnLCAnMCcsICcwJywgJzEnLCAnMCcsICcxJ30sIAoteycwJywgJzAn
LCAnMScsICcwJywgJzAnLCAnMScsICcxJywgJzAnfSwgCi17JzAnLCAnMCcsICcxJywgJzAnLCAn
MCcsICcxJywgJzEnLCAnMSd9LCAKLXsnMCcsICcwJywgJzEnLCAnMCcsICcxJywgJzAnLCAnMCcs
ICcwJ30sIAoteycwJywgJzAnLCAnMScsICcwJywgJzEnLCAnMCcsICcwJywgJzEnfSwgCi17JzAn
LCAnMCcsICcxJywgJzAnLCAnMScsICcwJywgJzEnLCAnMCd9LCAKLXsnMCcsICcwJywgJzEnLCAn
MCcsICcxJywgJzAnLCAnMScsICcxJ30sIAoteycwJywgJzAnLCAnMScsICcwJywgJzEnLCAnMScs
ICcwJywgJzAnfSwgCi17JzAnLCAnMCcsICcxJywgJzAnLCAnMScsICcxJywgJzAnLCAnMSd9LCAK
LXsnMCcsICcwJywgJzEnLCAnMCcsICcxJywgJzEnLCAnMScsICcwJ30sIAoteycwJywgJzAnLCAn
MScsICcwJywgJzEnLCAnMScsICcxJywgJzEnfSwgCi17JzAnLCAnMCcsICcxJywgJzEnLCAnMCcs
ICcwJywgJzAnLCAnMCd9LCAKLXsnMCcsICcwJywgJzEnLCAnMScsICcwJywgJzAnLCAnMCcsICcx
J30sIAoteycwJywgJzAnLCAnMScsICcxJywgJzAnLCAnMCcsICcxJywgJzAnfSwgCi17JzAnLCAn
MCcsICcxJywgJzEnLCAnMCcsICcwJywgJzEnLCAnMSd9LCAKLXsnMCcsICcwJywgJzEnLCAnMScs
ICcwJywgJzEnLCAnMCcsICcwJ30sIAoteycwJywgJzAnLCAnMScsICcxJywgJzAnLCAnMScsICcw
JywgJzEnfSwgCi17JzAnLCAnMCcsICcxJywgJzEnLCAnMCcsICcxJywgJzEnLCAnMCd9LCAKLXsn
MCcsICcwJywgJzEnLCAnMScsICcwJywgJzEnLCAnMScsICcxJ30sIAoteycwJywgJzAnLCAnMScs
ICcxJywgJzEnLCAnMCcsICcwJywgJzAnfSwgCi17JzAnLCAnMCcsICcxJywgJzEnLCAnMScsICcw
JywgJzAnLCAnMSd9LCAKLXsnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzAnLCAnMScsICcwJ30s
IAoteycwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMCcsICcxJywgJzEnfSwgCi17JzAnLCAnMCcs
ICcxJywgJzEnLCAnMScsICcxJywgJzAnLCAnMCd9LCAKLXsnMCcsICcwJywgJzEnLCAnMScsICcx
JywgJzEnLCAnMCcsICcxJ30sIAoteycwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywg
JzAnfSwgCi17JzAnLCAnMCcsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMSd9LCAKLXsnMCcs
ICcxJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcwJ30sIAoteycwJywgJzEnLCAnMCcsICcw
JywgJzAnLCAnMCcsICcwJywgJzEnfSwgCi17JzAnLCAnMScsICcwJywgJzAnLCAnMCcsICcwJywg
JzEnLCAnMCd9LCAKLXsnMCcsICcxJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMScsICcxJ30sIAot
eycwJywgJzEnLCAnMCcsICcwJywgJzAnLCAnMScsICcwJywgJzAnfSwgCi17JzAnLCAnMScsICcw
JywgJzAnLCAnMCcsICcxJywgJzAnLCAnMSd9LCAKLXsnMCcsICcxJywgJzAnLCAnMCcsICcwJywg
JzEnLCAnMScsICcwJ30sIAoteycwJywgJzEnLCAnMCcsICcwJywgJzAnLCAnMScsICcxJywgJzEn
fSwgCi17JzAnLCAnMScsICcwJywgJzAnLCAnMScsICcwJywgJzAnLCAnMCd9LCAKLXsnMCcsICcx
JywgJzAnLCAnMCcsICcxJywgJzAnLCAnMCcsICcxJ30sIAoteycwJywgJzEnLCAnMCcsICcwJywg
JzEnLCAnMCcsICcxJywgJzAnfSwgCi17JzAnLCAnMScsICcwJywgJzAnLCAnMScsICcwJywgJzEn
LCAnMSd9LCAKLXsnMCcsICcxJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMCcsICcwJ30sIAoteycw
JywgJzEnLCAnMCcsICcwJywgJzEnLCAnMScsICcwJywgJzEnfSwgCi17JzAnLCAnMScsICcwJywg
JzAnLCAnMScsICcxJywgJzEnLCAnMCd9LCAKLXsnMCcsICcxJywgJzAnLCAnMCcsICcxJywgJzEn
LCAnMScsICcxJ30sIAoteycwJywgJzEnLCAnMCcsICcxJywgJzAnLCAnMCcsICcwJywgJzAnfSwg
Ci17JzAnLCAnMScsICcwJywgJzEnLCAnMCcsICcwJywgJzAnLCAnMSd9LCAKLXsnMCcsICcxJywg
JzAnLCAnMScsICcwJywgJzAnLCAnMScsICcwJ30sIAoteycwJywgJzEnLCAnMCcsICcxJywgJzAn
LCAnMCcsICcxJywgJzEnfSwgCi17JzAnLCAnMScsICcwJywgJzEnLCAnMCcsICcxJywgJzAnLCAn
MCd9LCAKLXsnMCcsICcxJywgJzAnLCAnMScsICcwJywgJzEnLCAnMCcsICcxJ30sIAoteycwJywg
JzEnLCAnMCcsICcxJywgJzAnLCAnMScsICcxJywgJzAnfSwgCi17JzAnLCAnMScsICcwJywgJzEn
LCAnMCcsICcxJywgJzEnLCAnMSd9LCAKLXsnMCcsICcxJywgJzAnLCAnMScsICcxJywgJzAnLCAn
MCcsICcwJ30sIAoteycwJywgJzEnLCAnMCcsICcxJywgJzEnLCAnMCcsICcwJywgJzEnfSwgCi17
JzAnLCAnMScsICcwJywgJzEnLCAnMScsICcwJywgJzEnLCAnMCd9LCAKLXsnMCcsICcxJywgJzAn
LCAnMScsICcxJywgJzAnLCAnMScsICcxJ30sIAoteycwJywgJzEnLCAnMCcsICcxJywgJzEnLCAn
MScsICcwJywgJzAnfSwgCi17JzAnLCAnMScsICcwJywgJzEnLCAnMScsICcxJywgJzAnLCAnMSd9
LCAKLXsnMCcsICcxJywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICcwJ30sIAoteycwJywgJzEn
LCAnMCcsICcxJywgJzEnLCAnMScsICcxJywgJzEnfSwgCi17JzAnLCAnMScsICcxJywgJzAnLCAn
MCcsICcwJywgJzAnLCAnMCd9LCAKLXsnMCcsICcxJywgJzEnLCAnMCcsICcwJywgJzAnLCAnMCcs
ICcxJ30sIAoteycwJywgJzEnLCAnMScsICcwJywgJzAnLCAnMCcsICcxJywgJzAnfSwgCi17JzAn
LCAnMScsICcxJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMSd9LCAKLXsnMCcsICcxJywgJzEnLCAn
MCcsICcwJywgJzEnLCAnMCcsICcwJ30sIAoteycwJywgJzEnLCAnMScsICcwJywgJzAnLCAnMScs
ICcwJywgJzEnfSwgCi17JzAnLCAnMScsICcxJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMCd9LCAK
LXsnMCcsICcxJywgJzEnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJ30sIAoteycwJywgJzEnLCAn
MScsICcwJywgJzEnLCAnMCcsICcwJywgJzAnfSwgCi17JzAnLCAnMScsICcxJywgJzAnLCAnMScs
ICcwJywgJzAnLCAnMSd9LCAKLXsnMCcsICcxJywgJzEnLCAnMCcsICcxJywgJzAnLCAnMScsICcw
J30sIAoteycwJywgJzEnLCAnMScsICcwJywgJzEnLCAnMCcsICcxJywgJzEnfSwgCi17JzAnLCAn
MScsICcxJywgJzAnLCAnMScsICcxJywgJzAnLCAnMCd9LCAKLXsnMCcsICcxJywgJzEnLCAnMCcs
ICcxJywgJzEnLCAnMCcsICcxJ30sIAoteycwJywgJzEnLCAnMScsICcwJywgJzEnLCAnMScsICcx
JywgJzAnfSwgCi17JzAnLCAnMScsICcxJywgJzAnLCAnMScsICcxJywgJzEnLCAnMSd9LCAKLXsn
MCcsICcxJywgJzEnLCAnMScsICcwJywgJzAnLCAnMCcsICcwJ30sIAoteycwJywgJzEnLCAnMScs
ICcxJywgJzAnLCAnMCcsICcwJywgJzEnfSwgCi17JzAnLCAnMScsICcxJywgJzEnLCAnMCcsICcw
JywgJzEnLCAnMCd9LCAKLXsnMCcsICcxJywgJzEnLCAnMScsICcwJywgJzAnLCAnMScsICcxJ30s
IAoteycwJywgJzEnLCAnMScsICcxJywgJzAnLCAnMScsICcwJywgJzAnfSwgCi17JzAnLCAnMScs
ICcxJywgJzEnLCAnMCcsICcxJywgJzAnLCAnMSd9LCAKLXsnMCcsICcxJywgJzEnLCAnMScsICcw
JywgJzEnLCAnMScsICcwJ30sIAoteycwJywgJzEnLCAnMScsICcxJywgJzAnLCAnMScsICcxJywg
JzEnfSwgCi17JzAnLCAnMScsICcxJywgJzEnLCAnMScsICcwJywgJzAnLCAnMCd9LCAKLXsnMCcs
ICcxJywgJzEnLCAnMScsICcxJywgJzAnLCAnMCcsICcxJ30sIAoteycwJywgJzEnLCAnMScsICcx
JywgJzEnLCAnMCcsICcxJywgJzAnfSwgCi17JzAnLCAnMScsICcxJywgJzEnLCAnMScsICcwJywg
JzEnLCAnMSd9LCAKLXsnMCcsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMCcsICcwJ30sIAot
eycwJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcwJywgJzEnfSwgCi17JzAnLCAnMScsICcx
JywgJzEnLCAnMScsICcxJywgJzEnLCAnMCd9LCAKLXsnMCcsICcxJywgJzEnLCAnMScsICcxJywg
JzEnLCAnMScsICcxJ30sIAoteycxJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcwJywgJzAn
fSwgCi17JzEnLCAnMCcsICcwJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMSd9LCAKLXsnMScsICcw
JywgJzAnLCAnMCcsICcwJywgJzAnLCAnMScsICcwJ30sIAoteycxJywgJzAnLCAnMCcsICcwJywg
JzAnLCAnMCcsICcxJywgJzEnfSwgCi17JzEnLCAnMCcsICcwJywgJzAnLCAnMCcsICcxJywgJzAn
LCAnMCd9LCAKLXsnMScsICcwJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMCcsICcxJ30sIAoteycx
JywgJzAnLCAnMCcsICcwJywgJzAnLCAnMScsICcxJywgJzAnfSwgCi17JzEnLCAnMCcsICcwJywg
JzAnLCAnMCcsICcxJywgJzEnLCAnMSd9LCAKLXsnMScsICcwJywgJzAnLCAnMCcsICcxJywgJzAn
LCAnMCcsICcwJ30sIAoteycxJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMCcsICcwJywgJzEnfSwg
Ci17JzEnLCAnMCcsICcwJywgJzAnLCAnMScsICcwJywgJzEnLCAnMCd9LCAKLXsnMScsICcwJywg
JzAnLCAnMCcsICcxJywgJzAnLCAnMScsICcxJ30sIAoteycxJywgJzAnLCAnMCcsICcwJywgJzEn
LCAnMScsICcwJywgJzAnfSwgCi17JzEnLCAnMCcsICcwJywgJzAnLCAnMScsICcxJywgJzAnLCAn
MSd9LCAKLXsnMScsICcwJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMScsICcwJ30sIAoteycxJywg
JzAnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnfSwgCi17JzEnLCAnMCcsICcwJywgJzEn
LCAnMCcsICcwJywgJzAnLCAnMCd9LCAKLXsnMScsICcwJywgJzAnLCAnMScsICcwJywgJzAnLCAn
MCcsICcxJ30sIAoteycxJywgJzAnLCAnMCcsICcxJywgJzAnLCAnMCcsICcxJywgJzAnfSwgCi17
JzEnLCAnMCcsICcwJywgJzEnLCAnMCcsICcwJywgJzEnLCAnMSd9LCAKLXsnMScsICcwJywgJzAn
LCAnMScsICcwJywgJzEnLCAnMCcsICcwJ30sIAoteycxJywgJzAnLCAnMCcsICcxJywgJzAnLCAn
MScsICcwJywgJzEnfSwgCi17JzEnLCAnMCcsICcwJywgJzEnLCAnMCcsICcxJywgJzEnLCAnMCd9
LCAKLXsnMScsICcwJywgJzAnLCAnMScsICcwJywgJzEnLCAnMScsICcxJ30sIAoteycxJywgJzAn
LCAnMCcsICcxJywgJzEnLCAnMCcsICcwJywgJzAnfSwgCi17JzEnLCAnMCcsICcwJywgJzEnLCAn
MScsICcwJywgJzAnLCAnMSd9LCAKLXsnMScsICcwJywgJzAnLCAnMScsICcxJywgJzAnLCAnMScs
ICcwJ30sIAoteycxJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMCcsICcxJywgJzEnfSwgCi17JzEn
LCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzAnLCAnMCd9LCAKLXsnMScsICcwJywgJzAnLCAn
MScsICcxJywgJzEnLCAnMCcsICcxJ30sIAoteycxJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMScs
ICcxJywgJzAnfSwgCi17JzEnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnMSd9LCAK
LXsnMScsICcwJywgJzEnLCAnMCcsICcwJywgJzAnLCAnMCcsICcwJ30sIAoteycxJywgJzAnLCAn
MScsICcwJywgJzAnLCAnMCcsICcwJywgJzEnfSwgCi17JzEnLCAnMCcsICcxJywgJzAnLCAnMCcs
ICcwJywgJzEnLCAnMCd9LCAKLXsnMScsICcwJywgJzEnLCAnMCcsICcwJywgJzAnLCAnMScsICcx
J30sIAoteycxJywgJzAnLCAnMScsICcwJywgJzAnLCAnMScsICcwJywgJzAnfSwgCi17JzEnLCAn
MCcsICcxJywgJzAnLCAnMCcsICcxJywgJzAnLCAnMSd9LCAKLXsnMScsICcwJywgJzEnLCAnMCcs
ICcwJywgJzEnLCAnMScsICcwJ30sIAoteycxJywgJzAnLCAnMScsICcwJywgJzAnLCAnMScsICcx
JywgJzEnfSwgCi17JzEnLCAnMCcsICcxJywgJzAnLCAnMScsICcwJywgJzAnLCAnMCd9LCAKLXsn
MScsICcwJywgJzEnLCAnMCcsICcxJywgJzAnLCAnMCcsICcxJ30sIAoteycxJywgJzAnLCAnMScs
ICcwJywgJzEnLCAnMCcsICcxJywgJzAnfSwgCi17JzEnLCAnMCcsICcxJywgJzAnLCAnMScsICcw
JywgJzEnLCAnMSd9LCAKLXsnMScsICcwJywgJzEnLCAnMCcsICcxJywgJzEnLCAnMCcsICcwJ30s
IAoteycxJywgJzAnLCAnMScsICcwJywgJzEnLCAnMScsICcwJywgJzEnfSwgCi17JzEnLCAnMCcs
ICcxJywgJzAnLCAnMScsICcxJywgJzEnLCAnMCd9LCAKLXsnMScsICcwJywgJzEnLCAnMCcsICcx
JywgJzEnLCAnMScsICcxJ30sIAoteycxJywgJzAnLCAnMScsICcxJywgJzAnLCAnMCcsICcwJywg
JzAnfSwgCi17JzEnLCAnMCcsICcxJywgJzEnLCAnMCcsICcwJywgJzAnLCAnMSd9LCAKLXsnMScs
ICcwJywgJzEnLCAnMScsICcwJywgJzAnLCAnMScsICcwJ30sIAoteycxJywgJzAnLCAnMScsICcx
JywgJzAnLCAnMCcsICcxJywgJzEnfSwgCi17JzEnLCAnMCcsICcxJywgJzEnLCAnMCcsICcxJywg
JzAnLCAnMCd9LCAKLXsnMScsICcwJywgJzEnLCAnMScsICcwJywgJzEnLCAnMCcsICcxJ30sIAot
eycxJywgJzAnLCAnMScsICcxJywgJzAnLCAnMScsICcxJywgJzAnfSwgCi17JzEnLCAnMCcsICcx
JywgJzEnLCAnMCcsICcxJywgJzEnLCAnMSd9LCAKLXsnMScsICcwJywgJzEnLCAnMScsICcxJywg
JzAnLCAnMCcsICcwJ30sIAoteycxJywgJzAnLCAnMScsICcxJywgJzEnLCAnMCcsICcwJywgJzEn
fSwgCi17JzEnLCAnMCcsICcxJywgJzEnLCAnMScsICcwJywgJzEnLCAnMCd9LCAKLXsnMScsICcw
JywgJzEnLCAnMScsICcxJywgJzAnLCAnMScsICcxJ30sIAoteycxJywgJzAnLCAnMScsICcxJywg
JzEnLCAnMScsICcwJywgJzAnfSwgCi17JzEnLCAnMCcsICcxJywgJzEnLCAnMScsICcxJywgJzAn
LCAnMSd9LCAKLXsnMScsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcwJ30sIAoteycx
JywgJzAnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnfSwgCi17JzEnLCAnMScsICcwJywg
JzAnLCAnMCcsICcwJywgJzAnLCAnMCd9LCAKLXsnMScsICcxJywgJzAnLCAnMCcsICcwJywgJzAn
LCAnMCcsICcxJ30sIAoteycxJywgJzEnLCAnMCcsICcwJywgJzAnLCAnMCcsICcxJywgJzAnfSwg
Ci17JzEnLCAnMScsICcwJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMSd9LCAKLXsnMScsICcxJywg
JzAnLCAnMCcsICcwJywgJzEnLCAnMCcsICcwJ30sIAoteycxJywgJzEnLCAnMCcsICcwJywgJzAn
LCAnMScsICcwJywgJzEnfSwgCi17JzEnLCAnMScsICcwJywgJzAnLCAnMCcsICcxJywgJzEnLCAn
MCd9LCAKLXsnMScsICcxJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMScsICcxJ30sIAoteycxJywg
JzEnLCAnMCcsICcwJywgJzEnLCAnMCcsICcwJywgJzAnfSwgCi17JzEnLCAnMScsICcwJywgJzAn
LCAnMScsICcwJywgJzAnLCAnMSd9LCAKLXsnMScsICcxJywgJzAnLCAnMCcsICcxJywgJzAnLCAn
MScsICcwJ30sIAoteycxJywgJzEnLCAnMCcsICcwJywgJzEnLCAnMCcsICcxJywgJzEnfSwgCi17
JzEnLCAnMScsICcwJywgJzAnLCAnMScsICcxJywgJzAnLCAnMCd9LCAKLXsnMScsICcxJywgJzAn
LCAnMCcsICcxJywgJzEnLCAnMCcsICcxJ30sIAoteycxJywgJzEnLCAnMCcsICcwJywgJzEnLCAn
MScsICcxJywgJzAnfSwgCi17JzEnLCAnMScsICcwJywgJzAnLCAnMScsICcxJywgJzEnLCAnMSd9
LCAKLXsnMScsICcxJywgJzAnLCAnMScsICcwJywgJzAnLCAnMCcsICcwJ30sIAoteycxJywgJzEn
LCAnMCcsICcxJywgJzAnLCAnMCcsICcwJywgJzEnfSwgCi17JzEnLCAnMScsICcwJywgJzEnLCAn
MCcsICcwJywgJzEnLCAnMCd9LCAKLXsnMScsICcxJywgJzAnLCAnMScsICcwJywgJzAnLCAnMScs
ICcxJ30sIAoteycxJywgJzEnLCAnMCcsICcxJywgJzAnLCAnMScsICcwJywgJzAnfSwgCi17JzEn
LCAnMScsICcwJywgJzEnLCAnMCcsICcxJywgJzAnLCAnMSd9LCAKLXsnMScsICcxJywgJzAnLCAn
MScsICcwJywgJzEnLCAnMScsICcwJ30sIAoteycxJywgJzEnLCAnMCcsICcxJywgJzAnLCAnMScs
ICcxJywgJzEnfSwgCi17JzEnLCAnMScsICcwJywgJzEnLCAnMScsICcwJywgJzAnLCAnMCd9LCAK
LXsnMScsICcxJywgJzAnLCAnMScsICcxJywgJzAnLCAnMCcsICcxJ30sIAoteycxJywgJzEnLCAn
MCcsICcxJywgJzEnLCAnMCcsICcxJywgJzAnfSwgCi17JzEnLCAnMScsICcwJywgJzEnLCAnMScs
ICcwJywgJzEnLCAnMSd9LCAKLXsnMScsICcxJywgJzAnLCAnMScsICcxJywgJzEnLCAnMCcsICcw
J30sIAoteycxJywgJzEnLCAnMCcsICcxJywgJzEnLCAnMScsICcwJywgJzEnfSwgCi17JzEnLCAn
MScsICcwJywgJzEnLCAnMScsICcxJywgJzEnLCAnMCd9LCAKLXsnMScsICcxJywgJzAnLCAnMScs
ICcxJywgJzEnLCAnMScsICcxJ30sIAoteycxJywgJzEnLCAnMScsICcwJywgJzAnLCAnMCcsICcw
JywgJzAnfSwgCi17JzEnLCAnMScsICcxJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMSd9LCAKLXsn
MScsICcxJywgJzEnLCAnMCcsICcwJywgJzAnLCAnMScsICcwJ30sIAoteycxJywgJzEnLCAnMScs
ICcwJywgJzAnLCAnMCcsICcxJywgJzEnfSwgCi17JzEnLCAnMScsICcxJywgJzAnLCAnMCcsICcx
JywgJzAnLCAnMCd9LCAKLXsnMScsICcxJywgJzEnLCAnMCcsICcwJywgJzEnLCAnMCcsICcxJ30s
IAoteycxJywgJzEnLCAnMScsICcwJywgJzAnLCAnMScsICcxJywgJzAnfSwgCi17JzEnLCAnMScs
ICcxJywgJzAnLCAnMCcsICcxJywgJzEnLCAnMSd9LCAKLXsnMScsICcxJywgJzEnLCAnMCcsICcx
JywgJzAnLCAnMCcsICcwJ30sIAoteycxJywgJzEnLCAnMScsICcwJywgJzEnLCAnMCcsICcwJywg
JzEnfSwgCi17JzEnLCAnMScsICcxJywgJzAnLCAnMScsICcwJywgJzEnLCAnMCd9LCAKLXsnMScs
ICcxJywgJzEnLCAnMCcsICcxJywgJzAnLCAnMScsICcxJ30sIAoteycxJywgJzEnLCAnMScsICcw
JywgJzEnLCAnMScsICcwJywgJzAnfSwgCi17JzEnLCAnMScsICcxJywgJzAnLCAnMScsICcxJywg
JzAnLCAnMSd9LCAKLXsnMScsICcxJywgJzEnLCAnMCcsICcxJywgJzEnLCAnMScsICcwJ30sIAot
eycxJywgJzEnLCAnMScsICcwJywgJzEnLCAnMScsICcxJywgJzEnfSwgCi17JzEnLCAnMScsICcx
JywgJzEnLCAnMCcsICcwJywgJzAnLCAnMCd9LCAKLXsnMScsICcxJywgJzEnLCAnMScsICcwJywg
JzAnLCAnMCcsICcxJ30sIAoteycxJywgJzEnLCAnMScsICcxJywgJzAnLCAnMCcsICcxJywgJzAn
fSwgCi17JzEnLCAnMScsICcxJywgJzEnLCAnMCcsICcwJywgJzEnLCAnMSd9LCAKLXsnMScsICcx
JywgJzEnLCAnMScsICcwJywgJzEnLCAnMCcsICcwJ30sIAoteycxJywgJzEnLCAnMScsICcxJywg
JzAnLCAnMScsICcwJywgJzEnfSwgCi17JzEnLCAnMScsICcxJywgJzEnLCAnMCcsICcxJywgJzEn
LCAnMCd9LCAKLXsnMScsICcxJywgJzEnLCAnMScsICcwJywgJzEnLCAnMScsICcxJ30sIAoteycx
JywgJzEnLCAnMScsICcxJywgJzEnLCAnMCcsICcwJywgJzAnfSwgCi17JzEnLCAnMScsICcxJywg
JzEnLCAnMScsICcwJywgJzAnLCAnMSd9LCAKLXsnMScsICcxJywgJzEnLCAnMScsICcxJywgJzAn
LCAnMScsICcwJ30sIAoteycxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMCcsICcxJywgJzEnfSwg
Ci17JzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzAnLCAnMCd9LCAKLXsnMScsICcxJywg
JzEnLCAnMScsICcxJywgJzEnLCAnMCcsICcxJ30sIAoteycxJywgJzEnLCAnMScsICcxJywgJzEn
LCAnMScsICcxJywgJzAnfSwgCi17JzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAn
MSd9LCAKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKLX0gIC8vIG5hbWVzcGFjZSBmb2xs
eQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkv
Rm9ybWF0VHJhaXRzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xs
eS9Gb3JtYXRUcmFpdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ1YzI1NmRh
MTYwYTg0YjQyMzlkNDAxZTRlZWVlZDg3MjI2MGNjYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9mb2xseS9Gb3JtYXRUcmFpdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICog
ICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxl
c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
ZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vu
c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0g
KiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgotCi1uYW1lc3BhY2UgZm9sbHkgeyBuYW1lc3BhY2UgZGV0
YWlsIHsKLQotLy8gU2hvcnRjdXQsIHNvIHdlIGRvbid0IGhhdmUgdG8gdXNlIGVuYWJsZV9pZiBl
dmVyeXdoZXJlCi1zdHJ1Y3QgRm9ybWF0VHJhaXRzQmFzZSB7Ci0gIHR5cGVkZWYgdm9pZCBlbmFi
bGVkOwotfTsKLQotLy8gVHJhaXRzIHRoYXQgZGVmaW5lIGVuYWJsZWQsIHZhbHVlX3R5cGUsIGFu
ZCBhdCgpIGZvciBhbnl0aGluZwotLy8gaW5kZXhhYmxlIHdpdGggaW50ZWdyYWwga2V5czogcG9p
bnRlcnMsIGFycmF5cywgdmVjdG9ycywgYW5kIG1hcHMKLS8vIHdpdGggaW50ZWdyYWwga2V5cwot
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEVuYWJsZSA9IHZvaWQ+IHN0cnVjdCBJbmRleGFibGVU
cmFpdHM7Ci0KLS8vIEJhc2UgY2xhc3MgZm9yIHNlcXVlbmNlcyAodmVjdG9ycywgZGVxdWVzKQot
dGVtcGxhdGUgPGNsYXNzIEM+Ci1zdHJ1Y3QgSW5kZXhhYmxlVHJhaXRzU2VxIDogcHVibGljIEZv
cm1hdFRyYWl0c0Jhc2UgewotICB0eXBlZGVmIEMgY29udGFpbmVyX3R5cGU7Ci0gIHR5cGVkZWYg
dHlwZW5hbWUgQzo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwotCi0gIHN0YXRpYyBjb25zdCB2YWx1
ZV90eXBlJiBhdChjb25zdCBDJiBjLCBpbnQgaWR4KSB7Ci0gICAgcmV0dXJuIGMuYXQoaWR4KTsK
LSAgfQotCi0gIHN0YXRpYyBjb25zdCB2YWx1ZV90eXBlJiBhdChjb25zdCBDJiBjLCBpbnQgaWR4
LCBjb25zdCB2YWx1ZV90eXBlJiBkZmx0KSB7Ci0gICAgcmV0dXJuIChpZHggPj0gMCAmJiBzaXpl
X3QoaWR4KSA8IGMuc2l6ZSgpKSA/IGMuYXQoaWR4KSA6IGRmbHQ7Ci0gIH0KLX07Ci0KLS8vIEJh
c2UgY2xhc3MgZm9yIGFzc29jaWF0aXZlIHR5cGVzIChtYXBzKQotdGVtcGxhdGUgPGNsYXNzIEM+
Ci1zdHJ1Y3QgSW5kZXhhYmxlVHJhaXRzQXNzb2MgOiBwdWJsaWMgRm9ybWF0VHJhaXRzQmFzZSB7
Ci0gIHR5cGVkZWYgdHlwZW5hbWUgQzo6dmFsdWVfdHlwZTo6c2Vjb25kX3R5cGUgdmFsdWVfdHlw
ZTsKLQotICBzdGF0aWMgY29uc3QgdmFsdWVfdHlwZSYgYXQoY29uc3QgQyYgYywgaW50IGlkeCkg
ewotICAgIHJldHVybiBjLmF0KHN0YXRpY19jYXN0PHR5cGVuYW1lIEM6OmtleV90eXBlPihpZHgp
KTsKLSAgfQotCi0gIHN0YXRpYyBjb25zdCB2YWx1ZV90eXBlJiBhdChjb25zdCBDJiBjLCBpbnQg
aWR4LCBjb25zdCB2YWx1ZV90eXBlJiBkZmx0KSB7Ci0gICAgYXV0byBwb3MgPSBjLmZpbmQoc3Rh
dGljX2Nhc3Q8dHlwZW5hbWUgQzo6a2V5X3R5cGU+KGlkeCkpOwotICAgIHJldHVybiBwb3MgIT0g
Yy5lbmQoKSA/IHBvcy0+c2Vjb25kIDogZGZsdDsKLSAgfQotfTsKLQotfX0gIC8vIG5hbWVzcGFj
ZXMKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5
L0Z1bmN0aW9uLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9G
dW5jdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTFkZTljYTE2ZTQ2Nzli
NzA1ZTY0ZjgyNTlkZTk3NTVhMjdhNDIzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5
L0Z1bmN0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NDAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAyMDE3LXByZXNlbnQgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICog
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLS8qCi0gKiBAYXV0aG9yIEVyaWMg
TmllYmxlciAoZW5pZWJsZXJAZmIuY29tKSwgU3ZlbiBPdmVyIChvdmVyQGZiLmNvbSkKLSAqIEFj
a25vd2xlZGdlbWVudHM6IEdpdXNlcHBlIE90dGF2aWFubyAob3R0QGZiLmNvbSkKLSAqLwotCi0v
KioKLSAqIEBjbGFzcyBGdW5jdGlvbgotICoKLSAqIEBicmllZiBBIHBvbHltb3JwaGljIGZ1bmN0
aW9uIHdyYXBwZXIgdGhhdCBpcyBub3QgY29weWFibGUgYW5kIGRvZXMgbm90Ci0gKiAgICByZXF1
aXJlIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHRvIGJlIGNvcHkgY29uc3RydWN0aWJsZS4KLSAqCi0g
KiBgZm9sbHk6OkZ1bmN0aW9uYCBpcyBhIHBvbHltb3JwaGljIGZ1bmN0aW9uIHdyYXBwZXIsIHNp
bWlsYXIgdG8KLSAqIGBzdGQ6OmZ1bmN0aW9uYC4gVGhlIHRlbXBsYXRlIHBhcmFtZXRlcnMgb2Yg
dGhlIGBmb2xseTo6RnVuY3Rpb25gIGRlZmluZQotICogdGhlIHBhcmFtZXRlciBzaWduYXR1cmUg
b2YgdGhlIHdyYXBwZWQgY2FsbGFibGUsIGJ1dCBub3QgdGhlIHNwZWNpZmljCi0gKiB0eXBlIG9m
IHRoZSBlbWJlZGRlZCBjYWxsYWJsZS4gRS5nLiBhIGBmb2xseTo6RnVuY3Rpb248aW50KGludCk+
YAotICogY2FuIHdyYXAgY2FsbGFibGVzIHRoYXQgcmV0dXJuIGFuIGBpbnRgIHdoZW4gcGFzc2Vk
IGFuIGBpbnRgLiBUaGlzIGNhbiBiZSBhCi0gKiBmdW5jdGlvbiBwb2ludGVyIG9yIGFueSBjbGFz
cyBvYmplY3QgaW1wbGVtZW50aW5nIG9uZSBvciBib3RoIG9mCi0gKgotICogICAgIGludCBvcGVy
YXRvcihpbnQpOwotICogICAgIGludCBvcGVyYXRvcihpbnQpIGNvbnN0OwotICoKLSAqIElmIGJv
dGggYXJlIGRlZmluZWQsIHRoZSBub24tY29uc3Qgb25lIHRha2VzIHByZWNlZGVuY2UuCi0gKgot
ICogVW5saWtlIGBzdGQ6OmZ1bmN0aW9uYCwgYSBgZm9sbHk6OkZ1bmN0aW9uYCBjYW4gd3JhcCBv
YmplY3RzIHRoYXQgYXJlIG5vdAotICogY29weSBjb25zdHJ1Y3RpYmxlLiBBcyBhIGNvbnNlcXVl
bmNlIG9mIHRoaXMsIGBmb2xseTo6RnVuY3Rpb25gIGl0c2VsZgotICogaXMgbm90IGNvcHlhYmxl
LCBlaXRoZXIuCi0gKgotICogQW5vdGhlciBkaWZmZXJlbmNlIGlzIHRoYXQsIHVubGlrZSBgc3Rk
OjpmdW5jdGlvbmAsIGBmb2xseTo6RnVuY3Rpb25gIHRyZWF0cwotICogY29uc3QtbmVzcyBvZiBt
ZXRob2RzIGNvcnJlY3RseS4gV2hpbGUgYSBgc3RkOjpmdW5jdGlvbmAgYWxsb3dzIHRvIHdyYXAK
LSAqIGFuIG9iamVjdCB0aGF0IG9ubHkgaW1wbGVtZW50cyBhIG5vbi1jb25zdCBgb3BlcmF0b3Io
KWAgYW5kIGludm9rZQotICogYSBjb25zdC1yZWZlcmVuY2Ugb2YgdGhlIGBzdGQ6OmZ1bmN0aW9u
YCwgYGZvbGx5OjpGdW5jdGlvbmAgcmVxdWlyZXMgeW91IHRvCi0gKiBkZWNsYXJlIGEgZnVuY3Rp
b24gdHlwZSBhcyBjb25zdCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIGV4ZWN1dGUgaXQgb24gYQot
ICogY29uc3QtcmVmZXJlbmNlLgotICoKLSAqIEZvciBleGFtcGxlOgotICoKLSAqICAgICBjbGFz
cyBGb28gewotICogICAgICBwdWJsaWM6Ci0gKiAgICAgICB2b2lkIG9wZXJhdG9yKCkoKSB7Ci0g
KiAgICAgICAgIC8vIG11dGF0ZXMgdGhlIEZvbyBvYmplY3QKLSAqICAgICAgIH0KLSAqICAgICB9
OwotICoKLSAqICAgICBjbGFzcyBCYXIgewotICogICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKHZv
aWQpPiBmb29fOyAvLyB3cmFwcyBhIEZvbyBvYmplY3QKLSAqICAgICAgcHVibGljOgotICogICAg
ICAgdm9pZCBtdXRhdGVGb28oKSBjb25zdAotICogICAgICAgewotICogICAgICAgICBmb29fKCk7
Ci0gKiAgICAgICB9Ci0gKiAgICAgfTsKLSAqCi0gKiBFdmVuIHRob3VnaCBgbXV0YXRlRm9vYCBp
cyBhIGNvbnN0LW1ldGhvZCwgc28gaXQgY2FuIG9ubHkgcmVmZXJlbmNlIGBmb29fYAotICogYXMg
Y29uc3QsIGl0IGlzIGFibGUgdG8gY2FsbCB0aGUgbm9uLWNvbnN0IGBvcGVyYXRvcigpYCBvZiB0
aGUgRm9vCi0gKiBvYmplY3QgdGhhdCBpcyBlbWJlZGRlZCBpbiB0aGUgZm9vXyBmdW5jdGlvbi4K
LSAqCi0gKiBgZm9sbHk6OkZ1bmN0aW9uYCB3aWxsIG5vdCBhbGxvdyB5b3UgdG8gZG8gdGhhdC4g
WW91IHdpbGwgaGF2ZSB0byBkZWNpZGUKLSAqIHdoZXRoZXIgeW91IG5lZWQgdG8gaW52b2tlIHlv
dXIgd3JhcHBlZCBjYWxsYWJsZSBmcm9tIGEgY29uc3QgcmVmZXJlbmNlCi0gKiAobGlrZSBpbiB0
aGUgZXhhbXBsZSBhYm92ZSksIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBvbmx5IHdyYXAgYQotICog
YG9wZXJhdG9yKCkgY29uc3RgLiBJZiB5b3VyIGZ1bmN0b3IgZG9lcyBub3QgaW1wbGVtZW50IHRo
YXQsCi0gKiBjb21waWxhdGlvbiB3aWxsIGZhaWwuIElmIHlvdSBkbyBub3QgcmVxdWlyZSB0byBi
ZSBhYmxlIHRvIGludm9rZSB0aGUKLSAqIHdyYXBwZWQgZnVuY3Rpb24gaW4gYSBjb25zdCBjb250
ZXh0LCB5b3UgY2FuIHdyYXAgYW55IGZ1bmN0b3IgdGhhdAotICogaW1wbGVtZW50cyBlaXRoZXIg
b3IgYm90aCBvZiBjb25zdCBhbmQgbm9uLWNvbnN0IGBvcGVyYXRvcigpYC4KLSAqCi0gKiBUaGUg
dGVtcGxhdGUgcGFyYW1ldGVyIG9mIGBmb2xseTo6RnVuY3Rpb25gLCB0aGUgYEZ1bmN0aW9uVHlw
ZWAsIGNhbiBiZQotICogY29uc3QtcXVhbGlmaWVkLiBCZSBhd2FyZSB0aGF0IHRoZSBjb25zdCBp
cyBwYXJ0IG9mIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUuCi0gKiBJdCBkb2VzIG5vdCBtZWFuIHRo
YXQgdGhlIGZ1bmN0aW9uIHR5cGUgaXMgYSBjb25zdCB0eXBlLgotICoKLSAqICAgdXNpbmcgRnVu
Y3Rpb25UeXBlID0gUihBcmdzLi4uKTsKLSAqICAgdXNpbmcgQ29uc3RGdW5jdGlvblR5cGUgPSBS
KEFyZ3MuLi4pIGNvbnN0OwotICoKLSAqIEluIHRoaXMgZXhhbXBsZSwgYEZ1bmN0aW9uVHlwZWAg
YW5kIGBDb25zdEZ1bmN0aW9uVHlwZWAgYXJlIGRpZmZlcmVudAotICogdHlwZXMuIGBDb25zdEZ1
bmN0aW9uVHlwZWAgaXMgbm90IHRoZSBzYW1lIGFzIGBjb25zdCBGdW5jdGlvblR5cGVgLgotICog
QXMgYSBtYXR0ZXIgb2YgZmFjdCwgdHJ5aW5nIHRvIHVzZSB0aGUgbGF0dGVyIHNob3VsZCBlbWl0
IGEgY29tcGlsZXIKLSAqIHdhcm5pbmcgb3IgZXJyb3IsIGJlY2F1c2UgaXQgaGFzIG5vIGRlZmlu
ZWQgbWVhbmluZy4KLSAqCi0gKiAgICAgLy8gVGhpcyB3aWxsIG5vdCBjb21waWxlOgotICogICAg
IGZvbGx5OjpGdW5jdGlvbjx2b2lkKHZvaWQpIGNvbnN0PiBmdW5jID0gRm9vKCk7Ci0gKiAgICAg
Ly8gYmVjYXVzZSBGb28gZG9lcyBub3QgaGF2ZSBhIG1lbWJlciBmdW5jdGlvbiBvZiB0aGUgZm9y
bToKLSAqICAgICAvLyAgIHZvaWQgb3BlcmF0b3IoKSgpIGNvbnN0OwotICoKLSAqICAgICAvLyBU
aGlzIHdpbGwgY29tcGlsZSBqdXN0IGZpbmU6Ci0gKiAgICAgZm9sbHk6OkZ1bmN0aW9uPHZvaWQo
dm9pZCk+IGZ1bmMgPSBGb28oKTsKLSAqICAgICAvLyBhbmQgaXQgd2lsbCB3cmFwIHRoZSBleGlz
dGluZyBtZW1iZXIgZnVuY3Rpb246Ci0gKiAgICAgLy8gICB2b2lkIG9wZXJhdG9yKCkoKTsKLSAq
Ci0gKiBXaGVuIHNob3VsZCBhIGNvbnN0IGZ1bmN0aW9uIHR5cGUgYmUgdXNlZD8gQXMgYSBtYXR0
ZXIgb2YgZmFjdCwgeW91IHdpbGwKLSAqIHByb2JhYmx5IG5vdCBuZWVkIHRvIHVzZSBjb25zdCBm
dW5jdGlvbiB0eXBlcyB2ZXJ5IG9mdGVuLiBTZWUgdGhlIGZvbGxvd2luZwotICogZXhhbXBsZToK
LSAqCi0gKiAgICAgY2xhc3MgQmFyIHsKLSAqICAgICAgIGZvbGx5OjpGdW5jdGlvbjx2b2lkKCk+
IGZ1bmNfOwotICogICAgICAgZm9sbHk6OkZ1bmN0aW9uPHZvaWQoKSBjb25zdD4gY29uc3RGdW5j
XzsKLSAqCi0gKiAgICAgICB2b2lkIHNvbWVNZXRob2QoKSB7Ci0gKiAgICAgICAgIC8vIENhbiBj
YWxsIGZ1bmNfLgotICogICAgICAgICBmdW5jXygpOwotICogICAgICAgICAvLyBDYW4gY2FsbCBj
b25zdEZ1bmNfLgotICogICAgICAgICBjb25zdEZ1bmNfKCk7Ci0gKiAgICAgICB9Ci0gKgotICog
ICAgICAgdm9pZCBzb21lQ29uc3RNZXRob2QoKSBjb25zdCB7Ci0gKiAgICAgICAgIC8vIENhbiBj
YWxsIGNvbnN0RnVuY18uCi0gKiAgICAgICAgIGNvbnN0RnVuY18oKTsKLSAqICAgICAgICAgLy8g
SG93ZXZlciwgY2Fubm90IGNhbGwgZnVuY18gYmVjYXVzZSBhIG5vbi1jb25zdCBtZXRob2QgY2Fu
bm90Ci0gKiAgICAgICAgIC8vIGJlIGNhbGxlZCBmcm9tIGEgY29uc3Qgb25lLgotICogICAgICAg
fQotICogICAgIH07Ci0gKgotICogQXMgeW91IGNhbiBzZWUsIHdoZXRoZXIgdGhlIGBmb2xseTo6
RnVuY3Rpb25gJ3MgZnVuY3Rpb24gdHlwZSBzaG91bGQKLSAqIGJlIGRlY2xhcmVkIGNvbnN0IG9y
IG5vdCBpcyBpZGVudGljYWwgdG8gd2hldGhlciBhIGNvcnJlc3BvbmRpbmcgbWV0aG9kCi0gKiB3
b3VsZCBiZSBkZWNsYXJlZCBjb25zdCBvciBub3QuCi0gKgotICogWW91IG9ubHkgcmVxdWlyZSBh
IGBmb2xseTo6RnVuY3Rpb25gIHRvIGhvbGQgYSBjb25zdCBmdW5jdGlvbiB0eXBlLCBpZiB5b3UK
LSAqIGludGVuZCB0byBpbnZva2UgaXQgZnJvbSB3aXRoaW4gYSBjb25zdCBjb250ZXh0LiBUaGlz
IGlzIHRvIGVuc3VyZSB0aGF0Ci0gKiB5b3UgY2Fubm90IG11dGF0ZSBpdHMgaW5uZXIgc3RhdGUg
d2hlbiBjYWxsaW5nIGluIGEgY29uc3QgY29udGV4dC4KLSAqCi0gKiBUaGlzIGlzIGhvdyB0aGUg
Y29uc3Qvbm9uLWNvbnN0IGNob2ljZSByZWxhdGVzIHRvIGxhbWJkYSBmdW5jdGlvbnM6Ci0gKgot
ICogICAgIC8vIE5vbi1tdXRhYmxlIGxhbWJkYXM6IGNhbiBiZSBzdG9yZWQgaW4gYSBub24tY29u
c3QuLi4KLSAqICAgICBmb2xseTo6RnVuY3Rpb248dm9pZChpbnQpPiBwcmludF9udW1iZXIgPQot
ICogICAgICAgW10gKGludCBudW1iZXIpIHsgc3RkOjpjb3V0IDw8IG51bWJlciA8PCBzdGQ6OmVu
ZGw7IH07Ci0gKgotICogICAgIC8vIC4uLmFzIHdlbGwgYXMgaW4gYSBjb25zdCBmb2xseTo6RnVu
Y3Rpb24KLSAqICAgICBmb2xseTo6RnVuY3Rpb248dm9pZChpbnQpIGNvbnN0PiBwcmludF9udW1i
ZXJfY29uc3QgPQotICogICAgICAgW10gKGludCBudW1iZXIpIHsgc3RkOjpjb3V0IDw8IG51bWJl
ciA8PCBzdGQ6OmVuZGw7IH07Ci0gKgotICogICAgIC8vIE11dGFibGUgbGFtYmRhOiBjYW4gb25s
eSBiZSBzdG9yZWQgaW4gYSBub24tY29uc3QgZm9sbHk6OkZ1bmN0aW9uOgotICogICAgIGludCBu
dW1iZXIgPSAwOwotICogICAgIGZvbGx5OjpGdW5jdGlvbjx2b2lkKCk+IHByaW50X251bWJlciA9
Ci0gKiAgICAgICBbbnVtYmVyXSAoKSBtdXRhYmxlIHsgc3RkOjpjb3V0IDw8ICsrbnVtYmVyIDw8
IHN0ZDo6ZW5kbDsgfTsKLSAqICAgICAvLyBUcnlpbmcgdG8gc3RvcmUgdGhlIGFib3ZlIG11dGFi
bGUgbGFtYmRhIGluIGEKLSAqICAgICAvLyBgZm9sbHk6OkZ1bmN0aW9uPHZvaWQoKSBjb25zdD5g
IHdvdWxkIGxlYWQgdG8gYSBjb21waWxlciBlcnJvcjoKLSAqICAgICAvLyBlcnJvcjogbm8gdmlh
YmxlIGNvbnZlcnNpb24gZnJvbSAnKGxhbWJkYSBhdCAuLi4pJyB0bwotICogICAgIC8vICdmb2xs
eTo6RnVuY3Rpb248dm9pZCAoKSBjb25zdD4nCi0gKgotICogQ2FzdGluZyBiZXR3ZWVuIGNvbnN0
IGFuZCBub24tY29uc3QgYGZvbGx5OjpGdW5jdGlvbmBzOgotICogY29udmVyc2lvbiBmcm9tIGNv
bnN0IHRvIG5vbi1jb25zdCBzaWduYXR1cmVzIGhhcHBlbnMgaW1wbGljaXRseS4gQW55Ci0gKiBm
dW5jdGlvbiB0aGF0IHRha2VzIGEgYGZvbGx5OjpGdW5jdGlvbjxSKEFyZ3MuLi4pPmAgY2FuIGJl
IHBhc3NlZAotICogYSBgZm9sbHk6OkZ1bmN0aW9uPFIoQXJncy4uLikgY29uc3Q+YCB3aXRob3V0
IGV4cGxpY2l0IGNvbnZlcnNpb24uCi0gKiBUaGlzIGlzIHNhZmUsIGJlY2F1c2UgY2FzdGluZyBm
cm9tIGNvbnN0IHRvIG5vbi1jb25zdCBvbmx5IGVudGFpbHMgZ2l2aW5nCi0gKiB1cCB0aGUgYWJp
bGl0eSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIGZyb20gYSBjb25zdCBjb250ZXh0LgotICogQ2Fz
dGluZyBmcm9tIGEgbm9uLWNvbnN0IHRvIGEgY29uc3Qgc2lnbmF0dXJlIGlzIHBvdGVudGlhbGx5
IGRhbmdlcm91cywKLSAqIGFzIGl0IG1lYW5zIHRoYXQgYSBmdW5jdGlvbiB0aGF0IG1heSBjaGFu
Z2UgaXRzIGlubmVyIHN0YXRlIHdoZW4gaW52b2tlZAotICogaXMgbWFkZSBwb3NzaWJsZSB0byBj
YWxsIGZyb20gYSBjb25zdCBjb250ZXh0LiBUaGVyZWZvcmUgdGhpcyBjYXN0IGRvZXMKLSAqIG5v
dCBoYXBwZW4gaW1wbGljaXRseS4gVGhlIGZ1bmN0aW9uIGBmb2xseTo6Y29uc3RDYXN0RnVuY3Rp
b25gIGNhbgotICogYmUgdXNlZCB0byBwZXJmb3JtIHRoZSBjYXN0LgotICoKLSAqICAgICAvLyBN
dXRhYmxlIGxhbWJkYTogY2FuIG9ubHkgYmUgc3RvcmVkIGluIGEgbm9uLWNvbnN0IGZvbGx5OjpG
dW5jdGlvbjoKLSAqICAgICBpbnQgbnVtYmVyID0gMDsKLSAqICAgICBmb2xseTo6RnVuY3Rpb248
dm9pZCgpPiBwcmludF9udW1iZXIgPQotICogICAgICAgW251bWJlcl0gKCkgbXV0YWJsZSB7IHN0
ZDo6Y291dCA8PCArK251bWJlciA8PCBzdGQ6OmVuZGw7IH07Ci0gKgotICogICAgIC8vIGNvbnN0
LWNhc3QgdG8gYSBjb25zdCBmb2xseTo6RnVuY3Rpb246Ci0gKiAgICAgZm9sbHk6OkZ1bmN0aW9u
PHZvaWQoKSBjb25zdD4gcHJpbnRfbnVtYmVyX2NvbnN0ID0KLSAqICAgICAgIGNvbnN0Q2FzdEZ1
bmN0aW9uKHN0ZDo6bW92ZShwcmludF9udW1iZXIpKTsKLSAqCi0gKiBXaGVuIHRvIHVzZSBjb25z
dCBmdW5jdGlvbiB0eXBlcz8KLSAqIEdlbmVyYWxseSwgb25seSB3aGVuIHlvdSBuZWVkIHRoZW0u
IFdoZW4geW91IHVzZSBhIGBmb2xseTo6RnVuY3Rpb25gIGFzIGEKLSAqIG1lbWJlciBvZiBhIHN0
cnVjdCBvciBjbGFzcywgb25seSB1c2UgYSBjb25zdCBmdW5jdGlvbiBzaWduYXR1cmUgd2hlbiB5
b3UKLSAqIG5lZWQgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiBmcm9tIGNvbnN0IGNvbnRleHQuCi0g
KiBXaGVuIHBhc3NpbmcgYSBgZm9sbHk6OkZ1bmN0aW9uYCB0byBhIGZ1bmN0aW9uLCB0aGUgZnVu
Y3Rpb24gc2hvdWxkIGFjY2VwdAotICogYSBub24tY29uc3QgYGZvbGx5OjpGdW5jdGlvbmAgd2hl
bmV2ZXIgcG9zc2libGUsIGkuZS4gd2hlbiBpdCBkb2VzIG5vdAotICogbmVlZCB0byBwYXNzIG9u
IG9yIHN0b3JlIGEgY29uc3QgYGZvbGx5OjpGdW5jdGlvbmAuIFRoaXMgaXMgdGhlIGxlYXN0Ci0g
KiBwb3NzaWJsZSBjb25zdHJhaW50OiB5b3UgY2FuIGFsd2F5cyBwYXNzIGEgY29uc3QgYGZvbGx5
OjpGdW5jdGlvbmAgd2hlbgotICogdGhlIGZ1bmN0aW9uIGFjY2VwdHMgYSBub24tY29uc3Qgb25l
LgotICoKLSAqIEhvdyBkb2VzIHRoZSBjb25zdCBiZWhhdmlvdXIgY29tcGFyZSB0byBgc3RkOjpm
dW5jdGlvbmA/Ci0gKiBgc3RkOjpmdW5jdGlvbmAgY2FuIHdyYXAgb2JqZWN0IHdpdGggbm9uLWNv
bnN0IGludm9rYXRpb24gYmVoYXZpb3VyIGJ1dAotICogZXhwb3NlcyB0aGVtIGFzIGNvbnN0LiBU
aGUgZXF1aXZhbGVudCBiZWhhdmlvdXIgY2FuIGJlIGFjaGlldmVkIHdpdGgKLSAqIGBmb2xseTo6
RnVuY3Rpb25gIGxpa2Ugc286Ci0gKgotICogICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCh2b2lkKT4g
c3RkZnVuYyA9IHNvbWVDYWxsYWJsZTsKLSAqCi0gKiAgICAgZm9sbHk6OkZ1bmN0aW9uPHZvaWQo
dm9pZCkgY29uc3Q+IHVuaXFmdW5jID0gY29uc3RDYXN0RnVuY3Rpb24oCi0gKiAgICAgICBmb2xs
eTo6RnVuY3Rpb248dm9pZCh2b2lkKT4oc29tZUNhbGxhYmxlKQotICogICAgICk7Ci0gKgotICog
WW91IG5lZWQgdG8gd3JhcCB0aGUgY2FsbGFibGUgZmlyc3QgaW4gYSBub24tY29uc3QgYGZvbGx5
OjpGdW5jdGlvbmAgdG8KLSAqIHNlbGVjdCBhIG5vbi1jb25zdCBpbnZva2Ugb3BlcmF0b3IgKG9y
IHRoZSBjb25zdCBvbmUgaWYgbm8gbm9uLWNvbnN0IG9uZSBpcwotICogcHJlc2VudCksIGFuZCB0
aGVuIG1vdmUgaXQgaW50byBhIGNvbnN0IGBmb2xseTo6RnVuY3Rpb25gIHVzaW5nCi0gKiBgY29u
c3RDYXN0RnVuY3Rpb25gLgotICogVGhlIG5hbWUgb2YgYGNvbnN0Q2FzdEZ1bmN0aW9uYCBzaG91
bGQgd2FybiB5b3UgdGhhdCBzb21ldGhpbmcKLSAqIHBvdGVudGlhbGx5IGRhbmdlcm91cyBpcyBo
YXBwZW5pbmcuIEFzIGEgbWF0dGVyIG9mIGZhY3QsIHVzaW5nCi0gKiBgc3RkOjpmdW5jdGlvbmAg
YWx3YXlzIGludm9sdmVzIHRoaXMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGFzcGVjdCwgd2hpY2gK
LSAqIGlzIHdoeSBpdCBpcyBub3QgY29uc2lkZXJlZCBmdWxseSBjb25zdC1zYWZlIG9yIGV2ZW4g
Y29uc3QtY29ycmVjdC4KLSAqIEhvd2V2ZXIsIGluIG1vc3Qgb2YgdGhlIGNhc2VzIHlvdSB3aWxs
IG5vdCBuZWVkIHRoZSBkYW5nZXJvdXMgYXNwZWN0IGF0IGFsbC4KLSAqIEVpdGhlciB5b3UgZG8g
bm90IHJlcXVpcmUgaW52b2thdGlvbiBvZiB0aGUgZnVuY3Rpb24gZnJvbSBhIGNvbnN0IGNvbnRl
eHQsCi0gKiBpbiB3aGljaCBjYXNlIHlvdSBkbyBub3QgbmVlZCB0byB1c2UgYGNvbnN0Q2FzdEZ1
bmN0aW9uYCBhbmQganVzdAotICogdXNlIHRoZSBpbm5lciBgZm9sbHk6OkZ1bmN0aW9uYCBpbiB0
aGUgZXhhbXBsZSBhYm92ZSwgaS5lLiBqdXN0IHVzZSBhCi0gKiBub24tY29uc3QgYGZvbGx5OjpG
dW5jdGlvbmAuIE9yLCB5b3UgbWF5IG5lZWQgaW52b2thdGlvbiBmcm9tIGNvbnN0LCBidXQKLSAq
IHRoZSBjYWxsYWJsZSB5b3UgYXJlIHdyYXBwaW5nIGRvZXMgbm90IG11dGF0ZSBpdHMgc3RhdGUg
KGUuZy4gaXQgaXMgYSBjbGFzcwotICogb2JqZWN0IGFuZCBpbXBsZW1lbnRzIGBvcGVyYXRvcigp
IGNvbnN0YCwgb3IgaXQgaXMgYSBub3JtYWwsCi0gKiBub24tbXV0YWJsZSBsYW1iZGEpLCBpbiB3
aGljaCBjYXNlIHlvdSBjYW4gd3JhcCB0aGUgY2FsbGFibGUgaW4gYSBjb25zdAotICogYGZvbGx5
OjpGdW5jdGlvbmAgZGlyZWN0bHksIHdpdGhvdXQgdXNpbmcgYGNvbnN0Q2FzdEZ1bmN0aW9uYC4K
LSAqIE9ubHkgaWYgeW91IHJlcXVpcmUgaW52b2thdGlvbiBmcm9tIGEgY29uc3QgY29udGV4dCBv
ZiBhIGNhbGxhYmxlIHRoYXQKLSAqIG1heSBtdXRhdGUgaXRzZWxmIHdoZW4gaW52b2tlZCB5b3Ug
aGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBhYm92ZSBwcm9jZWR1cmUuCi0gKiBIb3dldmVyLCBpbiB0
aGF0IGNhc2Ugd2hhdCB5b3UgZG8gaXMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGFuZCByZXF1aXJl
cwotICogdGhlIGVxdWl2YWxlbnQgb2YgYSBgY29uc3RfY2FzdGAsIGhlbmNlIHlvdSBuZWVkIHRv
IGNhbGwKLSAqIGBjb25zdENhc3RGdW5jdGlvbmAuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxuZXc+Ci0j
aW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgPGZv
bGx5L0NwcEF0dHJpYnV0ZXMuaD4KLSNpbmNsdWRlIDxmb2xseS9Qb3J0YWJpbGl0eS5oPgotI2lu
Y2x1ZGUgPGZvbGx5L1RyYWl0cy5oPgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgotY2xhc3MgRnVuY3Rpb247Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotRnVuY3Rpb248UmV0dXJuVHlwZShB
cmdzLi4uKSBjb25zdD4gY29uc3RDYXN0RnVuY3Rpb24oCi0gICAgRnVuY3Rpb248UmV0dXJuVHlw
ZShBcmdzLi4uKT4mJikgbm9leGNlcHQ7Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotbmFtZXNwYWNl
IGZ1bmN0aW9uIHsKLQotZW51bSBjbGFzcyBPcCB7IE1PVkUsIE5VS0UsIEZVTEwsIEhFQVAgfTsK
LQotdW5pb24gRGF0YSB7Ci0gIHZvaWQqIGJpZzsKLSAgc3RkOjphbGlnbmVkX3N0b3JhZ2U8NiAq
IHNpemVvZih2b2lkKik+Ojp0eXBlIHRpbnk7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
LCB0eXBlbmFtZSBGdW5UID0gdHlwZW5hbWUgc3RkOjpkZWNheTxGdW4+Ojp0eXBlPgotdXNpbmcg
SXNTbWFsbCA9IENvbmp1bmN0aW9uPAotICAgIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwg
KHNpemVvZihGdW5UKSA8PSBzaXplb2YoRGF0YTo6dGlueSkpPiwKLSAgICBzdGQ6OmlzX25vdGhy
b3dfbW92ZV9jb25zdHJ1Y3RpYmxlPEZ1blQ+PjsKLXVzaW5nIFNtYWxsVGFnID0gc3RkOjp0cnVl
X3R5cGU7Ci11c2luZyBIZWFwVGFnID0gc3RkOjpmYWxzZV90eXBlOwotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4KLXN0cnVjdCBOb3RGdW5jdGlvbiA6IHN0ZDo6dHJ1ZV90eXBlIHt9OwotdGVtcGxhdGUg
PGNsYXNzIFQ+Ci1zdHJ1Y3QgTm90RnVuY3Rpb248RnVuY3Rpb248VD4+IDogc3RkOjpmYWxzZV90
eXBlIHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuLCB0eXBlbmFtZSBGdW5UID0gdHlwZW5h
bWUgc3RkOjpkZWNheTxGdW4+Ojp0eXBlPgotdXNpbmcgRGVjYXlJZkNvbnN0cnVjdGlibGUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICBDb25qdW5jdGlvbjxOb3RGdW5jdGlvbjxGdW5U
Piwgc3RkOjppc19jb25zdHJ1Y3RpYmxlPEZ1blQsIEZ1bj4+Ojp2YWx1ZSwKLSAgICBGdW5UPjo6
dHlwZTsKLQotc3RydWN0IENvZXJjZVRhZyB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1i
b29sIGlzTnVsbFB0ckZuKFQqIHApIHsKLSAgcmV0dXJuIHAgPT0gbnVsbHB0cjsKLX0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotc3RkOjpmYWxzZV90eXBlIGlzTnVsbFB0ckZuKFQmJikgewotICBy
ZXR1cm4ge307Ci19Ci0KLWlubGluZSBib29sIHVuaW5pdE5vb3AoT3AsIERhdGEqLCBEYXRhKikg
ewotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvblR5cGU+
Ci1zdHJ1Y3QgRnVuY3Rpb25UcmFpdHM7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSZXR1cm5UeXBl
LCB0eXBlbmFtZS4uLiBBcmdzPgotc3RydWN0IEZ1bmN0aW9uVHJhaXRzPFJldHVyblR5cGUoQXJn
cy4uLik+IHsKLSAgdXNpbmcgQ2FsbCA9IFJldHVyblR5cGUgKCopKERhdGEmLCBBcmdzJiYuLi4p
OwotICB1c2luZyBJc0NvbnN0ID0gc3RkOjpmYWxzZV90eXBlOwotICB1c2luZyBDb25zdFNpZ25h
dHVyZSA9IFJldHVyblR5cGUoQXJncy4uLikgY29uc3Q7Ci0gIHVzaW5nIE5vbkNvbnN0U2lnbmF0
dXJlID0gUmV0dXJuVHlwZShBcmdzLi4uKTsKLSAgdXNpbmcgT3RoZXJTaWduYXR1cmUgPSBDb25z
dFNpZ25hdHVyZTsKLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUgRyA9IHR5cGVu
YW1lIHN0ZDo6ZGVjYXk8Rj46OnR5cGU+Ci0gIHVzaW5nIFJlc3VsdE9mID0gZGVjbHR5cGUoCi0g
ICAgICBzdGF0aWNfY2FzdDxSZXR1cm5UeXBlPihzdGQ6OmRlY2x2YWw8RyY+KCkoc3RkOjpkZWNs
dmFsPEFyZ3M+KCkuLi4pKSk7Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bj4KLSAgc3RhdGlj
IFJldHVyblR5cGUgY2FsbFNtYWxsKERhdGEmIHAsIEFyZ3MmJi4uLiBhcmdzKSB7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJldHVyblR5cGU+KCgqc3RhdGljX2Nhc3Q8RnVuKj4oCi0gICAgICAg
IHN0YXRpY19jYXN0PHZvaWQqPigmcC50aW55KSkpKHN0YXRpY19jYXN0PEFyZ3MmJj4oYXJncyku
Li4pKTsKLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW4+Ci0gIHN0YXRpYyBSZXR1cm5U
eXBlIGNhbGxCaWcoRGF0YSYgcCwgQXJncyYmLi4uIGFyZ3MpIHsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UmV0dXJuVHlwZT4oCi0gICAgICAgICgqc3RhdGljX2Nhc3Q8RnVuKj4ocC5iaWcpKShz
dGF0aWNfY2FzdDxBcmdzJiY+KGFyZ3MpLi4uKSk7Ci0gIH0KLQotICBzdGF0aWMgUmV0dXJuVHlw
ZSB1bmluaXRDYWxsKERhdGEmLCBBcmdzJiYuLi4pIHsKLSAgICB0aHJvdyBzdGQ6OmJhZF9mdW5j
dGlvbl9jYWxsKCk7Ci0gIH0KLQotICBSZXR1cm5UeXBlIG9wZXJhdG9yKCkoQXJncy4uLiBhcmdz
KSB7Ci0gICAgYXV0byYgZm4gPSAqc3RhdGljX2Nhc3Q8RnVuY3Rpb248UmV0dXJuVHlwZShBcmdz
Li4uKT4qPih0aGlzKTsKLSAgICByZXR1cm4gZm4uY2FsbF8oZm4uZGF0YV8sIHN0YXRpY19jYXN0
PEFyZ3MmJj4oYXJncykuLi4pOwotICB9Ci0KLSAgY2xhc3MgU2hhcmVkUHJveHkgewotICAgIHN0
ZDo6c2hhcmVkX3B0cjxGdW5jdGlvbjxSZXR1cm5UeXBlKEFyZ3MuLi4pPj4gc3BfOwotCi0gICBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgU2hhcmVkUHJveHkoRnVuY3Rpb248UmV0dXJuVHlwZShBcmdz
Li4uKT4mJiBmdW5jKQotICAgICAgICA6IHNwXyhzdGQ6Om1ha2Vfc2hhcmVkPEZ1bmN0aW9uPFJl
dHVyblR5cGUoQXJncy4uLik+PigKLSAgICAgICAgICAgICAgc3RkOjptb3ZlKGZ1bmMpKSkge30K
LSAgICBSZXR1cm5UeXBlIG9wZXJhdG9yKCkoQXJncyYmLi4uIGFyZ3MpIGNvbnN0IHsKLSAgICAg
IHJldHVybiAoKnNwXykoc3RhdGljX2Nhc3Q8QXJncyYmPihhcmdzKS4uLik7Ci0gICAgfQotICB9
OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+
Ci1zdHJ1Y3QgRnVuY3Rpb25UcmFpdHM8UmV0dXJuVHlwZShBcmdzLi4uKSBjb25zdD4gewotICB1
c2luZyBDYWxsID0gUmV0dXJuVHlwZSAoKikoRGF0YSYsIEFyZ3MmJi4uLik7Ci0gIHVzaW5nIElz
Q29uc3QgPSBzdGQ6OnRydWVfdHlwZTsKLSAgdXNpbmcgQ29uc3RTaWduYXR1cmUgPSBSZXR1cm5U
eXBlKEFyZ3MuLi4pIGNvbnN0OwotICB1c2luZyBOb25Db25zdFNpZ25hdHVyZSA9IFJldHVyblR5
cGUoQXJncy4uLik7Ci0gIHVzaW5nIE90aGVyU2lnbmF0dXJlID0gTm9uQ29uc3RTaWduYXR1cmU7
Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lIEcgPSB0eXBlbmFtZSBzdGQ6OmRl
Y2F5PEY+Ojp0eXBlPgotICB1c2luZyBSZXN1bHRPZiA9IGRlY2x0eXBlKHN0YXRpY19jYXN0PFJl
dHVyblR5cGU+KAotICAgICAgc3RkOjpkZWNsdmFsPGNvbnN0IEcmPigpKHN0ZDo6ZGVjbHZhbDxB
cmdzPigpLi4uKSkpOwotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW4+Ci0gIHN0YXRpYyBSZXR1
cm5UeXBlIGNhbGxTbWFsbChEYXRhJiBwLCBBcmdzJiYuLi4gYXJncykgewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxSZXR1cm5UeXBlPigoKnN0YXRpY19jYXN0PGNvbnN0IEZ1bio+KAotICAgICAg
ICBzdGF0aWNfY2FzdDx2b2lkKj4oJnAudGlueSkpKShzdGF0aWNfY2FzdDxBcmdzJiY+KGFyZ3Mp
Li4uKSk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuPgotICBzdGF0aWMgUmV0dXJu
VHlwZSBjYWxsQmlnKERhdGEmIHAsIEFyZ3MmJi4uLiBhcmdzKSB7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFJldHVyblR5cGU+KAotICAgICAgICAoKnN0YXRpY19jYXN0PGNvbnN0IEZ1bio+KHAu
YmlnKSkoc3RhdGljX2Nhc3Q8QXJncyYmPihhcmdzKS4uLikpOwotICB9Ci0KLSAgc3RhdGljIFJl
dHVyblR5cGUgdW5pbml0Q2FsbChEYXRhJiwgQXJncyYmLi4uKSB7Ci0gICAgdGhyb3cgc3RkOjpi
YWRfZnVuY3Rpb25fY2FsbCgpOwotICB9Ci0KLSAgUmV0dXJuVHlwZSBvcGVyYXRvcigpKEFyZ3Mu
Li4gYXJncykgY29uc3QgewotICAgIGF1dG8mIGZuID0gKnN0YXRpY19jYXN0PGNvbnN0IEZ1bmN0
aW9uPFJldHVyblR5cGUoQXJncy4uLikgY29uc3Q+Kj4odGhpcyk7Ci0gICAgcmV0dXJuIGZuLmNh
bGxfKGZuLmRhdGFfLCBzdGF0aWNfY2FzdDxBcmdzJiY+KGFyZ3MpLi4uKTsKLSAgfQotCi0gIGNs
YXNzIFNoYXJlZFByb3h5IHsKLSAgICBzdGQ6OnNoYXJlZF9wdHI8RnVuY3Rpb248UmV0dXJuVHlw
ZShBcmdzLi4uKSBjb25zdD4+IHNwXzsKLQotICAgcHVibGljOgotICAgIGV4cGxpY2l0IFNoYXJl
ZFByb3h5KEZ1bmN0aW9uPFJldHVyblR5cGUoQXJncy4uLikgY29uc3Q+JiYgZnVuYykKLSAgICAg
ICAgOiBzcF8oc3RkOjptYWtlX3NoYXJlZDxGdW5jdGlvbjxSZXR1cm5UeXBlKEFyZ3MuLi4pIGNv
bnN0Pj4oCi0gICAgICAgICAgICAgIHN0ZDo6bW92ZShmdW5jKSkpIHt9Ci0gICAgUmV0dXJuVHlw
ZSBvcGVyYXRvcigpKEFyZ3MmJi4uLiBhcmdzKSBjb25zdCB7Ci0gICAgICByZXR1cm4gKCpzcF8p
KHN0YXRpY19jYXN0PEFyZ3MmJj4oYXJncykuLi4pOwotICAgIH0KLSAgfTsKLX07Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBGdW4+Ci1ib29sIGV4ZWNTbWFsbChPcCBvLCBEYXRhKiBzcmMsIERhdGEq
IGRzdCkgewotICBzd2l0Y2ggKG8pIHsKLSAgICBjYXNlIE9wOjpNT1ZFOgotICAgICAgOjpuZXcg
KHN0YXRpY19jYXN0PHZvaWQqPigmZHN0LT50aW55KSkKLSAgICAgICAgICBGdW4oc3RkOjptb3Zl
KCpzdGF0aWNfY2FzdDxGdW4qPihzdGF0aWNfY2FzdDx2b2lkKj4oJnNyYy0+dGlueSkpKSk7Ci0g
ICAgICBGT0xMWV9GQUxMVEhST1VHSDsKLSAgICBjYXNlIE9wOjpOVUtFOgotICAgICAgc3RhdGlj
X2Nhc3Q8RnVuKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KCZzcmMtPnRpbnkpKS0+fkZ1bigpOwotICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBPcDo6RlVMTDoKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNh
c2UgT3A6OkhFQVA6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBGdW4+Ci1ib29sIGV4ZWNCaWcoT3AgbywgRGF0YSogc3JjLCBEYXRh
KiBkc3QpIHsKLSAgc3dpdGNoIChvKSB7Ci0gICAgY2FzZSBPcDo6TU9WRToKLSAgICAgIGRzdC0+
YmlnID0gc3JjLT5iaWc7Ci0gICAgICBzcmMtPmJpZyA9IG51bGxwdHI7Ci0gICAgICBicmVhazsK
LSAgICBjYXNlIE9wOjpOVUtFOgotICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PEZ1bio+KHNyYy0+
YmlnKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgT3A6OkZVTEw6Ci0gICAgY2FzZSBPcDo6SEVB
UDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi0vLyBJbnZva2UgaGVs
cGVyCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gQXJncz4KLWlubGluZSBjb25z
dGV4cHIgYXV0byBpbnZva2UoRiYmIGYsIEFyZ3MmJi4uLiBhcmdzKQotICAgIC0+IGRlY2x0eXBl
KHN0ZDo6Zm9yd2FyZDxGPihmKShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKSB7Ci0gIHJl
dHVybiBzdGQ6OmZvcndhcmQ8Rj4oZikoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIE0sIHR5cGVuYW1lIEMsIHR5cGVuYW1lLi4uIEFyZ3M+Ci1p
bmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKE0oQzo6KmQpLCBBcmdzJiYuLi4gYXJncykKLSAg
ICAtPiBkZWNsdHlwZShzdGQ6Om1lbV9mbihkKShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4p
KSB7Ci0gIHJldHVybiBzdGQ6Om1lbV9mbihkKShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4p
OwotfQotCi19IC8vIG5hbWVzcGFjZSBmdW5jdGlvbgotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvblR5cGU+Ci1jbGFzcyBGdW5jdGlvbiBmaW5hbCA6
IHByaXZhdGUgZGV0YWlsOjpmdW5jdGlvbjo6RnVuY3Rpb25UcmFpdHM8RnVuY3Rpb25UeXBlPiB7
Ci0gIC8vIFRoZXNlIHV0aWxpdHkgdHlwZXMgYXJlIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgdGVt
cGxhdGUgdG8gcmVkdWNlCi0gIC8vIHRoZSBudW1iZXIgb2YgaW5zdGFudGlhdGlvbnMsIGFuZCB0
aGVuIGltcG9ydGVkIGluIHRoZSBjbGFzcwotICAvLyBuYW1lc3BhY2UgZm9yIGNvbnZlbmllbmNl
LgotICB1c2luZyBEYXRhID0gZGV0YWlsOjpmdW5jdGlvbjo6RGF0YTsKLSAgdXNpbmcgT3AgPSBk
ZXRhaWw6OmZ1bmN0aW9uOjpPcDsKLSAgdXNpbmcgU21hbGxUYWcgPSBkZXRhaWw6OmZ1bmN0aW9u
OjpTbWFsbFRhZzsKLSAgdXNpbmcgSGVhcFRhZyA9IGRldGFpbDo6ZnVuY3Rpb246OkhlYXBUYWc7
Ci0gIHVzaW5nIENvZXJjZVRhZyA9IGRldGFpbDo6ZnVuY3Rpb246OkNvZXJjZVRhZzsKLQotICB1
c2luZyBUcmFpdHMgPSBkZXRhaWw6OmZ1bmN0aW9uOjpGdW5jdGlvblRyYWl0czxGdW5jdGlvblR5
cGU+OwotICB1c2luZyBDYWxsID0gdHlwZW5hbWUgVHJhaXRzOjpDYWxsOwotICB1c2luZyBFeGVj
ID0gYm9vbCAoKikoT3AsIERhdGEqLCBEYXRhKik7Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bj4KLSAgdXNpbmcgSXNTbWFsbCA9IGRldGFpbDo6ZnVuY3Rpb246OklzU21hbGw8RnVuPjsKLQot
ICAvLyBUaGUgYGRhdGFfYCBtZW1iZXIgaXMgbXV0YWJsZSB0byBhbGxvdyBgY29uc3RDYXN0RnVu
Y3Rpb25gIHRvIHdvcmsgd2l0aG91dAotICAvLyBpbnZva2luZyB1bmRlZmluZWQgYmVoYXZpb3Iu
IENvbnN0LWNvcnJlY3RuZXNzIGlzIG9ubHkgdmlvbGF0ZWQgd2hlbgotICAvLyBgRnVuY3Rpb25U
eXBlYCBpcyBhIGNvbnN0IGZ1bmN0aW9uIHR5cGUgKGUuZy4sIGBpbnQoKSBjb25zdGApIGFuZCBg
KnRoaXNgCi0gIC8vIGlzIHRoZSByZXN1bHQgb2YgY2FsbGluZyBgY29uc3RDYXN0RnVuY3Rpb25g
LgotICBtdXRhYmxlIERhdGEgZGF0YV87Ci0gIENhbGwgY2FsbF97JlRyYWl0czo6dW5pbml0Q2Fs
bH07Ci0gIEV4ZWMgZXhlY197JmRldGFpbDo6ZnVuY3Rpb246OnVuaW5pdE5vb3B9OwotCi0gIGZy
aWVuZCBUcmFpdHM7Ci0gIGZyaWVuZCBGdW5jdGlvbjx0eXBlbmFtZSBUcmFpdHM6OkNvbnN0U2ln
bmF0dXJlPiBmb2xseTo6Y29uc3RDYXN0RnVuY3Rpb248PigKLSAgICAgIEZ1bmN0aW9uPHR5cGVu
YW1lIFRyYWl0czo6Tm9uQ29uc3RTaWduYXR1cmU+JiYpIG5vZXhjZXB0OwotICBmcmllbmQgY2xh
c3MgRnVuY3Rpb248dHlwZW5hbWUgVHJhaXRzOjpPdGhlclNpZ25hdHVyZT47Ci0KLSAgdGVtcGxh
dGUgPHR5cGVuYW1lIEZ1bj4KLSAgRnVuY3Rpb24oRnVuJiYgZnVuLCBTbWFsbFRhZykgbm9leGNl
cHQgewotICAgIHVzaW5nIEZ1blQgPSB0eXBlbmFtZSBzdGQ6OmRlY2F5PEZ1bj46OnR5cGU7Ci0g
ICAgaWYgKCFkZXRhaWw6OmZ1bmN0aW9uOjppc051bGxQdHJGbihmdW4pKSB7Ci0gICAgICA6Om5l
dyAoc3RhdGljX2Nhc3Q8dm9pZCo+KCZkYXRhXy50aW55KSkgRnVuVChzdGF0aWNfY2FzdDxGdW4m
Jj4oZnVuKSk7Ci0gICAgICBjYWxsXyA9ICZUcmFpdHM6OnRlbXBsYXRlIGNhbGxTbWFsbDxGdW5U
PjsKLSAgICAgIGV4ZWNfID0gJmRldGFpbDo6ZnVuY3Rpb246OmV4ZWNTbWFsbDxGdW5UPjsKLSAg
ICB9Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuPgotICBGdW5jdGlvbihGdW4mJiBm
dW4sIEhlYXBUYWcpIHsKLSAgICB1c2luZyBGdW5UID0gdHlwZW5hbWUgc3RkOjpkZWNheTxGdW4+
Ojp0eXBlOwotICAgIGRhdGFfLmJpZyA9IG5ldyBGdW5UKHN0YXRpY19jYXN0PEZ1biYmPihmdW4p
KTsKLSAgICBjYWxsXyA9ICZUcmFpdHM6OnRlbXBsYXRlIGNhbGxCaWc8RnVuVD47Ci0gICAgZXhl
Y18gPSAmZGV0YWlsOjpmdW5jdGlvbjo6ZXhlY0JpZzxGdW5UPjsKLSAgfQotCi0gIHRlbXBsYXRl
IDx0eXBlbmFtZSBTaWduYXR1cmU+Ci0gIEZ1bmN0aW9uKEZ1bmN0aW9uPFNpZ25hdHVyZT4mJiB0
aGF0LCBDb2VyY2VUYWcpCi0gICAgICA6IEZ1bmN0aW9uKHN0YXRpY19jYXN0PEZ1bmN0aW9uPFNp
Z25hdHVyZT4mJj4odGhhdCksIEhlYXBUYWd7fSkge30KLQotICBGdW5jdGlvbigKLSAgICAgIEZ1
bmN0aW9uPHR5cGVuYW1lIFRyYWl0czo6T3RoZXJTaWduYXR1cmU+JiYgdGhhdCwKLSAgICAgIENv
ZXJjZVRhZykgbm9leGNlcHQgewotICAgIHRoYXQuZXhlY18oT3A6Ok1PVkUsICZ0aGF0LmRhdGFf
LCAmZGF0YV8pOwotICAgIHN0ZDo6c3dhcChjYWxsXywgdGhhdC5jYWxsXyk7Ci0gICAgc3RkOjpz
d2FwKGV4ZWNfLCB0aGF0LmV4ZWNfKTsKLSAgfQotCi0gcHVibGljOgotICAvKioKLSAgICogRGVm
YXVsdCBjb25zdHJ1Y3Rvci4gQ29uc3RydWN0cyBhbiBlbXB0eSBGdW5jdGlvbi4KLSAgICovCi0g
IEZ1bmN0aW9uKCkgPSBkZWZhdWx0OwotCi0gIC8vIG5vdCBjb3B5YWJsZQotICBGdW5jdGlvbihj
b25zdCBGdW5jdGlvbiYpID0gZGVsZXRlOwotCi0gIC8qKgotICAgKiBNb3ZlIGNvbnN0cnVjdG9y
Ci0gICAqLwotICBGdW5jdGlvbihGdW5jdGlvbiYmIHRoYXQpIG5vZXhjZXB0IHsKLSAgICB0aGF0
LmV4ZWNfKE9wOjpNT1ZFLCAmdGhhdC5kYXRhXywgJmRhdGFfKTsKLSAgICBzdGQ6OnN3YXAoY2Fs
bF8sIHRoYXQuY2FsbF8pOwotICAgIHN0ZDo6c3dhcChleGVjXywgdGhhdC5leGVjXyk7Ci0gIH0K
LQotICAvKioKLSAgICogQ29uc3RydWN0cyBhbiBlbXB0eSBgRnVuY3Rpb25gLgotICAgKi8KLSAg
LyogaW1wbGljaXQgKi8gRnVuY3Rpb24oc3RkOjpudWxscHRyX3QpIG5vZXhjZXB0IHt9Ci0KLSAg
LyoqCi0gICAqIENvbnN0cnVjdHMgYSBuZXcgYEZ1bmN0aW9uYCBmcm9tIGFueSBjYWxsYWJsZSBv
YmplY3QgdGhhdCBpcyBfbm90XyBhCi0gICAqIGBmb2xseTo6RnVuY3Rpb25gLiBUaGlzIGhhbmRs
ZXMgZnVuY3Rpb24gcG9pbnRlcnMsIHBvaW50ZXJzIHRvIHN0YXRpYwotICAgKiBtZW1iZXIgZnVu
Y3Rpb25zLCBgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcmAgb2JqZWN0cywgYHN0ZDo6ZnVuY3Rpb25g
Ci0gICAqIG9iamVjdHMsIGFuZCBhcmJpdHJhcnkgb2JqZWN0cyB0aGF0IGltcGxlbWVudCBgb3Bl
cmF0b3IoKWAgaWYgdGhlIHBhcmFtZXRlcgotICAgKiBzaWduYXR1cmUgbWF0Y2hlcyAoaS5lLiBp
dCByZXR1cm5zIGFuIG9iamVjdCBjb252ZXJ0aWJsZSB0byBgUmAgd2hlbiBjYWxsZWQKLSAgICog
d2l0aCBgQXJncy4uLmApLgotICAgKgotICAgKiBcbm90ZSBgdHlwZW5hbWUgPSBSZXN1bHRPZjxG
dW4+YCBwcmV2ZW50cyB0aGlzIG92ZXJsb2FkIGZyb20gYmVpbmcKLSAgICogc2VsZWN0ZWQgYnkg
b3ZlcmxvYWQgcmVzb2x1dGlvbiB3aGVuIGBmdW5gIGlzIG5vdCBhIGNvbXBhdGlibGUgZnVuY3Rp
b24uCi0gICAqCi0gICAqIFxub3RlIFRoZSBub2V4Y2VwdCByZXF1aXJlcyBzb21lIGV4cGxhbmF0
aW9uLiBJc1NtYWxsIGlzIHRydWUgd2hlbiB0aGUKLSAgICogZGVjYXllZCB0eXBlIGZpdHMgd2l0
aGluIHRoZSBpbnRlcm5hbCBidWZmZXIgYW5kIGlzIG5vZXhjZXB0LW1vdmFibGUuIEJ1dAotICAg
KiB0aGlzIGN0b3IgbWlnaHQgY29weSwgbm90IG1vdmUuIFdoYXQgd2UgbmVlZCBoZXJlLCBpZiB0
aGlzIGN0b3IgZG9lcyBhCi0gICAqIGNvcHksIGlzIHRoYXQgdGhpcyBjdG9yIGJlIG5vZXhjZXB0
IHdoZW4gdGhlIGNvcHkgaXMgbm9leGNlcHQuIFRoYXQgaXMgbm90Ci0gICAqIGNoZWNrZWQgaW4g
SXNTbWFsbCwgYW5kIHNob3VsZG4ndCBiZSwgYmVjYXVzZSBvbmNlIHRoZSBGdW5jdGlvbiBpcwot
ICAgKiBjb25zdHJ1Y3RlZCwgdGhlIGNvbnRhaW5lZCBvYmplY3QgaXMgbmV2ZXIgY29waWVkLiBU
aGlzIGNoZWNrIGlzIGZvciB0aGlzCi0gICAqIGN0b3Igb25seSwgaW4gdGhlIGNhc2UgdGhhdCB0
aGlzIGN0b3IgZG9lcyBhIGNvcHkuCi0gICAqLwotICB0ZW1wbGF0ZSA8Ci0gICAgICB0eXBlbmFt
ZSBGdW4sCi0gICAgICB0eXBlbmFtZSBGdW5UID0gZGV0YWlsOjpmdW5jdGlvbjo6RGVjYXlJZkNv
bnN0cnVjdGlibGU8RnVuPiwKLSAgICAgIHR5cGVuYW1lID0gdHlwZW5hbWUgVHJhaXRzOjp0ZW1w
bGF0ZSBSZXN1bHRPZjxGdW4+PgotICAvKiBpbXBsaWNpdCAqLyBGdW5jdGlvbihGdW4mJiBmdW4p
IG5vZXhjZXB0KAotICAgICAgSXNTbWFsbDxGdW4+Ojp2YWx1ZSAmJiBub2V4Y2VwdChGdW5UKHN0
ZDo6ZGVjbHZhbDxGdW4+KCkpKSkKLSAgICAgIDogRnVuY3Rpb24oc3RhdGljX2Nhc3Q8RnVuJiY+
KGZ1biksIElzU21hbGw8RnVuPnt9KSB7fQotCi0gIC8qKgotICAgKiBGb3IgbW92ZS1jb25zdHJ1
Y3RpbmcgZnJvbSBhIGBmb2xseTo6RnVuY3Rpb248WChZcy4uLikgW2NvbnN0P10+YC4KLSAgICog
Rm9yIGEgYEZ1bmN0aW9uYCB3aXRoIGEgYGNvbnN0YCBmdW5jdGlvbiB0eXBlLCB0aGUgb2JqZWN0
IG11c3QgYmUKLSAgICogY2FsbGFibGUgZnJvbSBhIGBjb25zdGAtcmVmZXJlbmNlLCBpLmUuIGlt
cGxlbWVudCBgb3BlcmF0b3IoKSBjb25zdGAuCi0gICAqIEZvciBhIGBGdW5jdGlvbmAgd2l0aCBh
IG5vbi1gY29uc3RgIGZ1bmN0aW9uIHR5cGUsIHRoZSBvYmplY3Qgd2lsbAotICAgKiBiZSBjYWxs
ZWQgZnJvbSBhIG5vbi1jb25zdCByZWZlcmVuY2UsIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2lsbCBl
eGVjdXRlCi0gICAqIGEgbm9uLWNvbnN0IGBvcGVyYXRvcigpYCBpZiBpdCBpcyBkZWZpbmVkLCBh
bmQgZmFsbHMgYmFjayB0bwotICAgKiBgb3BlcmF0b3IoKSBjb25zdGAgb3RoZXJ3aXNlLgotICAg
Ki8KLSAgdGVtcGxhdGUgPAotICAgICAgdHlwZW5hbWUgU2lnbmF0dXJlLAotICAgICAgdHlwZW5h
bWUgPSB0eXBlbmFtZSBUcmFpdHM6OnRlbXBsYXRlIFJlc3VsdE9mPEZ1bmN0aW9uPFNpZ25hdHVy
ZT4+PgotICBGdW5jdGlvbihGdW5jdGlvbjxTaWduYXR1cmU+JiYgdGhhdCkgbm9leGNlcHQoCi0g
ICAgICBub2V4Y2VwdChGdW5jdGlvbihzdGQ6Om1vdmUodGhhdCksIENvZXJjZVRhZ3t9KSkpCi0g
ICAgICA6IEZ1bmN0aW9uKHN0ZDo6bW92ZSh0aGF0KSwgQ29lcmNlVGFne30pIHt9Ci0KLSAgLyoq
Ci0gICAqIElmIGBwdHJgIGlzIG51bGwsIGNvbnN0cnVjdHMgYW4gZW1wdHkgYEZ1bmN0aW9uYC4g
T3RoZXJ3aXNlLAotICAgKiB0aGlzIGNvbnN0cnVjdG9yIGlzIGVxdWl2YWxlbnQgdG8gYEZ1bmN0
aW9uKHN0ZDo6bWVtX2ZuKHB0cikpYC4KLSAgICovCi0gIHRlbXBsYXRlIDwKLSAgICAgIHR5cGVu
YW1lIE1lbWJlciwKLSAgICAgIHR5cGVuYW1lIENsYXNzLAotICAgICAgLy8gUHJldmVudCB0aGlz
IG92ZXJsb2FkIGZyb20gYmVpbmcgc2VsZWN0ZWQgd2hlbiBgcHRyYCBpcyBub3QgYQotICAgICAg
Ly8gY29tcGF0aWJsZSBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlci4KLSAgICAgIHR5cGVuYW1lID0g
ZGVjbHR5cGUoRnVuY3Rpb24oc3RkOjptZW1fZm4oKE1lbWJlciBDbGFzczo6KikwKSkpPgotICAv
KiBpbXBsaWNpdCAqLyBGdW5jdGlvbihNZW1iZXIgQ2xhc3M6OipwdHIpIG5vZXhjZXB0IHsKLSAg
ICBpZiAocHRyKSB7Ci0gICAgICAqdGhpcyA9IHN0ZDo6bWVtX2ZuKHB0cik7Ci0gICAgfQotICB9
Ci0KLSAgfkZ1bmN0aW9uKCkgewotICAgIGV4ZWNfKE9wOjpOVUtFLCAmZGF0YV8sIG51bGxwdHIp
OwotICB9Ci0KLSAgRnVuY3Rpb24mIG9wZXJhdG9yPShjb25zdCBGdW5jdGlvbiYpID0gZGVsZXRl
OwotCi0gIC8qKgotICAgKiBNb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IKLSAgICoKLSAgICogXG5v
dGUgTGVhdmVzIGB0aGF0YCBpbiBhIHZhbGlkIGJ1dCB1bnNwZWNpZmllZCBzdGF0ZS4gSWYgYCZ0
aGF0ID09IHRoaXNgCi0gICAqIHRoZW4gYCp0aGlzYCBpcyBsZWZ0IGluIGEgdmFsaWQgYnV0IHVu
c3BlY2lmaWVkIHN0YXRlLgotICAgKi8KLSAgRnVuY3Rpb24mIG9wZXJhdG9yPShGdW5jdGlvbiYm
IHRoYXQpIG5vZXhjZXB0IHsKLSAgICAvLyBROiBXaHkgaXMgaXMgc2FmZSB0byBkZXN0cm95IGFu
ZCByZWNvbnN0cnVjdCB0aGlzIG9iamVjdCBpbiBwbGFjZT8KLSAgICAvLyBBOiBUd28gcmVhc29u
czogRmlyc3QsIGBGdW5jdGlvbmAgaXMgYSBmaW5hbCBjbGFzcywgc28gaW4gZG9pbmcgdGhpcwot
ICAgIC8vICAgIHdlIGFyZW4ndCBzbGljaW5nIG9mZiBhbnkgZGVyaXZlZCBwYXJ0cy4gQW5kIHNl
Y29uZCwgdGhlIG1vdmUKLSAgICAvLyAgICBvcGVyYXRpb24gaXMgZ3VhcmFudGVlZCBub3QgdG8g
dGhyb3cgc28gd2UgYWx3YXlzIGxlYXZlIHRoZSBvYmplY3QKLSAgICAvLyAgICBpbiBhIHZhbGlk
IHN0YXRlLgotICAgIC8vIEluIHRoZSBjYXNlIG9mIHNlbGYtbW92ZSAodGhpcyA9PSAmdGhhdCks
IHRoaXMgbGVhdmVzIHRoZSBvYmplY3QgaW4KLSAgICAvLyBhIGRlZmF1bHQtY29uc3RydWN0ZWQg
c3RhdGUuIEZpcnN0IHRoZSBvYmplY3QgaXMgZGVzdHJveWVkLCB0aGVuIHdlCi0gICAgLy8gcGFz
cyB0aGUgZGVzdHJveWVkIG9iamVjdCB0byB0aGUgbW92ZSBjb25zdHJ1Y3Rvci4gVGhlIGZpcnN0
IHRoaW5nIHRoZQotICAgIC8vIG1vdmUgY29uc3RydWN0b3IgZG9lcyBpcyBkZWZhdWx0LWNvbnN0
cnVjdCB0aGUgb2JqZWN0LiBUaGF0IG9iamVjdCBpcwotICAgIC8vICJtb3ZlZCIgaW50byBpdHNl
bGYsIHdoaWNoIGlzIGEgbm8tb3AgZm9yIGEgZGVmYXVsdC1jb25zdHJ1Y3RlZCBGdW5jdGlvbi4K
LSAgICB0aGlzLT5+RnVuY3Rpb24oKTsKLSAgICA6Om5ldyAodGhpcykgRnVuY3Rpb24oc3RkOjpt
b3ZlKHRoYXQpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogQXNzaWdu
cyBhIGNhbGxhYmxlIG9iamVjdCB0byB0aGlzIGBGdW5jdGlvbmAuIElmIHRoZSBvcGVyYXRpb24g
ZmFpbHMsCi0gICAqIGAqdGhpc2AgaXMgbGVmdCB1bm1vZGlmaWVkLgotICAgKgotICAgKiBcbm90
ZSBgdHlwZW5hbWUgPSBSZXN1bHRPZjxGdW4+YCBwcmV2ZW50cyB0aGlzIG92ZXJsb2FkIGZyb20g
YmVpbmcKLSAgICogc2VsZWN0ZWQgYnkgb3ZlcmxvYWQgcmVzb2x1dGlvbiB3aGVuIGBmdW5gIGlz
IG5vdCBhIGNvbXBhdGlibGUgZnVuY3Rpb24uCi0gICAqLwotICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuLCB0eXBlbmFtZSA9IGRlY2x0eXBlKEZ1bmN0aW9uKHN0ZDo6ZGVjbHZhbDxGdW4+KCkpKT4K
LSAgRnVuY3Rpb24mIG9wZXJhdG9yPShGdW4mJiBmdW4pIG5vZXhjZXB0KAotICAgICAgbm9leGNl
cHQoLyogaW1wbGljaXQgKi8gRnVuY3Rpb24oc3RkOjpkZWNsdmFsPEZ1bj4oKSkpKSB7Ci0gICAg
Ly8gRG9pbmcgdGhpcyBpbiBwbGFjZSBpcyBtb3JlIGVmZmljaWVudCB3aGVuIHdlIGNhbiBkbyBz
byBzYWZlbHkuCi0gICAgaWYgKG5vZXhjZXB0KC8qIGltcGxpY2l0ICovIEZ1bmN0aW9uKHN0ZDo6
ZGVjbHZhbDxGdW4+KCkpKSkgewotICAgICAgLy8gUTogV2h5IGlzIGlzIHNhZmUgdG8gZGVzdHJv
eSBhbmQgcmVjb25zdHJ1Y3QgdGhpcyBvYmplY3QgaW4gcGxhY2U/Ci0gICAgICAvLyBBOiBTZWUg
dGhlIGV4cGxhbmF0aW9uIGluIHRoZSBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IuCi0gICAgICB0
aGlzLT5+RnVuY3Rpb24oKTsKLSAgICAgIDo6bmV3ICh0aGlzKSBGdW5jdGlvbihzdGF0aWNfY2Fz
dDxGdW4mJj4oZnVuKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIENvbnN0cnVjdCBhIHRlbXBv
cmFyeSBhbmQgKG5vdGhyb3cpIHN3YXAuCi0gICAgICBGdW5jdGlvbihzdGF0aWNfY2FzdDxGdW4m
Jj4oZnVuKSkuc3dhcCgqdGhpcyk7Ci0gICAgfQotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0g
IC8qKgotICAgKiBGb3IgYXNzaWduaW5nIGZyb20gYSBgRnVuY3Rpb248WChZcy4uKSBbY29uc3Q/
XT5gLgotICAgKi8KLSAgdGVtcGxhdGUgPAotICAgICAgdHlwZW5hbWUgU2lnbmF0dXJlLAotICAg
ICAgdHlwZW5hbWUgPSB0eXBlbmFtZSBUcmFpdHM6OnRlbXBsYXRlIFJlc3VsdE9mPEZ1bmN0aW9u
PFNpZ25hdHVyZT4+PgotICBGdW5jdGlvbiYgb3BlcmF0b3I9KEZ1bmN0aW9uPFNpZ25hdHVyZT4m
JiB0aGF0KSBub2V4Y2VwdCgKLSAgICAgIG5vZXhjZXB0KEZ1bmN0aW9uKHN0ZDo6bW92ZSh0aGF0
KSkpKSB7Ci0gICAgcmV0dXJuICgqdGhpcyA9IEZ1bmN0aW9uKHN0ZDo6bW92ZSh0aGF0KSkpOwot
ICB9Ci0KLSAgLyoqCi0gICAqIENsZWFycyB0aGlzIGBGdW5jdGlvbmAuCi0gICAqLwotICBGdW5j
dGlvbiYgb3BlcmF0b3I9KHN0ZDo6bnVsbHB0cl90KSBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuICgq
dGhpcyA9IEZ1bmN0aW9uKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIElmIGBwdHJgIGlzIG51bGws
IGNsZWFycyB0aGlzIGBGdW5jdGlvbmAuIE90aGVyd2lzZSwgdGhpcyBhc3NpZ25tZW50Ci0gICAq
IG9wZXJhdG9yIGlzIGVxdWl2YWxlbnQgdG8gYCp0aGlzID0gc3RkOjptZW1fZm4ocHRyKWAuCi0g
ICAqLwotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTWVtYmVyLCB0eXBlbmFtZSBDbGFzcz4KLSAgYXV0
byBvcGVyYXRvcj0oTWVtYmVyIENsYXNzOjoqcHRyKSBub2V4Y2VwdAotICAgICAgLy8gUHJldmVu
dCB0aGlzIG92ZXJsb2FkIGZyb20gYmVpbmcgc2VsZWN0ZWQgd2hlbiBgcHRyYCBpcyBub3QgYQot
ICAgICAgLy8gY29tcGF0aWJsZSBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlci4KLSAgICAgIC0+IGRl
Y2x0eXBlKG9wZXJhdG9yPShzdGQ6Om1lbV9mbihwdHIpKSkgewotICAgIHJldHVybiBwdHIgPyAo
KnRoaXMgPSBzdGQ6Om1lbV9mbihwdHIpKSA6ICgqdGhpcyA9IEZ1bmN0aW9uKCkpOwotICB9Ci0K
LSAgLyoqCi0gICAqIENhbGwgdGhlIHdyYXBwZWQgY2FsbGFibGUgb2JqZWN0IHdpdGggdGhlIHNw
ZWNpZmllZCBhcmd1bWVudHMuCi0gICAqLwotICB1c2luZyBUcmFpdHM6Om9wZXJhdG9yKCk7Ci0K
LSAgLyoqCi0gICAqIEV4Y2hhbmdlcyB0aGUgY2FsbGFibGUgb2JqZWN0cyBvZiBgKnRoaXNgIGFu
ZCBgdGhhdGAuCi0gICAqLwotICB2b2lkIHN3YXAoRnVuY3Rpb24mIHRoYXQpIG5vZXhjZXB0IHsK
LSAgICBzdGQ6OnN3YXAoKnRoaXMsIHRoYXQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMg
YHRydWVgIGlmIHRoaXMgYEZ1bmN0aW9uYCBjb250YWlucyBhIGNhbGxhYmxlLCBpLmUuIGlzCi0g
ICAqIG5vbi1lbXB0eS4KLSAgICovCi0gIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCBu
b2V4Y2VwdCB7Ci0gICAgcmV0dXJuIGV4ZWNfKE9wOjpGVUxMLCBudWxscHRyLCBudWxscHRyKTsK
LSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIGBGdW5jdGlvbmAgc3Rv
cmVzIHRoZSBjYWxsYWJsZSBvbiB0aGUKLSAgICogaGVhcC4gSWYgYGZhbHNlYCBpcyByZXR1cm5l
ZCwgdGhlcmUgaGFzIGJlZW4gbm8gYWRkaXRpb25hbCBtZW1vcnkKLSAgICogYWxsb2NhdGlvbiBh
bmQgdGhlIGNhbGxhYmxlIGlzIHN0b3JlZCBpbnNpZGUgdGhlIGBGdW5jdGlvbmAKLSAgICogb2Jq
ZWN0IGl0c2VsZi4KLSAgICovCi0gIGJvb2wgaGFzQWxsb2NhdGVkTWVtb3J5KCkgY29uc3Qgbm9l
eGNlcHQgewotICAgIHJldHVybiBleGVjXyhPcDo6SEVBUCwgbnVsbHB0ciwgbnVsbHB0cik7Ci0g
IH0KLQotICB1c2luZyB0eXBlbmFtZSBUcmFpdHM6OlNoYXJlZFByb3h5OwotCi0gIC8qKgotICAg
KiBNb3ZlIHRoaXMgYEZ1bmN0aW9uYCBpbnRvIGEgY29weWFibGUgY2FsbGFibGUgb2JqZWN0LCBv
ZiB3aGljaCBhbGwgY29waWVzCi0gICAqIHNoYXJlIHRoZSBzdGF0ZS4KLSAgICovCi0gIFNoYXJl
ZFByb3h5IGFzU2hhcmVkUHJveHkoKSAmJiB7Ci0gICAgcmV0dXJuIFNoYXJlZFByb3h5e3N0ZDo6
bW92ZSgqdGhpcyl9OwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdCBhIGBzdGQ6OmZ1bmN0
aW9uYCBieSBtb3ZpbmcgaW4gdGhlIGNvbnRlbnRzIG9mIHRoaXMgYEZ1bmN0aW9uYC4KLSAgICog
Tm90ZSB0aGF0IHRoZSByZXR1cm5lZCBgc3RkOjpmdW5jdGlvbmAgd2lsbCBzaGFyZSBpdHMgc3Rh
dGUgKGkuZS4gY2FwdHVyZWQKLSAgICogZGF0YSkgYWNyb3NzIGFsbCBjb3BpZXMgeW91IG1ha2Ug
b2YgaXQsIHNvIGJlIHZlcnkgY2FyZWZ1bCB3aGVuIGNvcHlpbmcuCi0gICAqLwotICBzdGQ6OmZ1
bmN0aW9uPHR5cGVuYW1lIFRyYWl0czo6Tm9uQ29uc3RTaWduYXR1cmU+IGFzU3RkRnVuY3Rpb24o
KSAmJiB7Ci0gICAgcmV0dXJuIHN0ZDo6bW92ZSgqdGhpcykuYXNTaGFyZWRQcm94eSgpOwotICB9
Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgotdm9pZCBzd2FwKEZ1bmN0
aW9uPEZ1bmN0aW9uVHlwZT4mIGxocywgRnVuY3Rpb248RnVuY3Rpb25UeXBlPiYgcmhzKSBub2V4
Y2VwdCB7Ci0gIGxocy5zd2FwKHJocyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlv
blR5cGU+Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgRnVuY3Rpb248RnVuY3Rpb25UeXBlPiYgZm4s
IHN0ZDo6bnVsbHB0cl90KSB7Ci0gIHJldHVybiAhZm47Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdGlvblR5cGU+Ci1ib29sIG9wZXJhdG9yPT0oc3RkOjpudWxscHRyX3QsIGNvbnN0IEZ1
bmN0aW9uPEZ1bmN0aW9uVHlwZT4mIGZuKSB7Ci0gIHJldHVybiAhZm47Ci19Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBGdW5jdGlvblR5cGU+Ci1ib29sIG9wZXJhdG9yIT0oY29uc3QgRnVuY3Rpb248
RnVuY3Rpb25UeXBlPiYgZm4sIHN0ZDo6bnVsbHB0cl90KSB7Ci0gIHJldHVybiAhKGZuID09IG51
bGxwdHIpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgotYm9vbCBvcGVy
YXRvciE9KHN0ZDo6bnVsbHB0cl90LCBjb25zdCBGdW5jdGlvbjxGdW5jdGlvblR5cGU+JiBmbikg
ewotICByZXR1cm4gIShudWxscHRyID09IGZuKTsKLX0KLQotLyoqCi0gKiBOT1RFOiBTZWUgZGV0
YWlsZWQgbm90ZSBhYm91dCBgY29uc3RDYXN0RnVuY3Rpb25gIGF0IHRoZSB0b3Agb2YgdGhlIGZp
bGUuCi0gKiBUaGlzIGlzIHBvdGVudGlhbGx5IGRhbmdlcm91cyBhbmQgcmVxdWlyZXMgdGhlIGVx
dWl2YWxlbnQgb2YgYSBgY29uc3RfY2FzdGAuCi0gKi8KLXRlbXBsYXRlIDx0eXBlbmFtZSBSZXR1
cm5UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotRnVuY3Rpb248UmV0dXJuVHlwZShBcmdzLi4uKSBj
b25zdD4gY29uc3RDYXN0RnVuY3Rpb24oCi0gICAgRnVuY3Rpb248UmV0dXJuVHlwZShBcmdzLi4u
KT4mJiB0aGF0KSBub2V4Y2VwdCB7Ci0gIHJldHVybiBGdW5jdGlvbjxSZXR1cm5UeXBlKEFyZ3Mu
Li4pIGNvbnN0PntzdGQ6Om1vdmUodGhhdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXRhaWw6OmZ1bmN0aW9uOjpDb2VyY2VUYWd7fX07Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgotRnVuY3Rpb248
UmV0dXJuVHlwZShBcmdzLi4uKSBjb25zdD4gY29uc3RDYXN0RnVuY3Rpb24oCi0gICAgRnVuY3Rp
b248UmV0dXJuVHlwZShBcmdzLi4uKSBjb25zdD4mJiB0aGF0KSBub2V4Y2VwdCB7Ci0gIHJldHVy
biBzdGQ6Om1vdmUodGhhdCk7Ci19Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotbmFtZXNwYWNlIGZ1
bmN0aW9uIHsKLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW4sIHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwg
dHlwZW5hbWUgPSB2b2lkPgotc3RydWN0IElzQ2FsbGFibGVBc0ltcGwgOiBzdGQ6OmZhbHNlX3R5
cGUge307Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW4sIHR5cGVuYW1lIFJldHVyblR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3M+Ci1zdHJ1Y3QgSXNDYWxsYWJsZUFzSW1wbDwKLSAgICBGdW4sCi0gICAg
UmV0dXJuVHlwZShBcmdzLi4uKSwKLSAgICB2b2lkX3Q8dHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8
RnVuICYmIChBcmdzICYmIC4uLik+Ojp0eXBlPj4KLSAgICA6IHN0ZDo6aXNfY29udmVydGlibGU8
Ci0gICAgICAgICAgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8RnVuICYmIChBcmdzICYmIC4uLik+
Ojp0eXBlLAotICAgICAgICAgIFJldHVyblR5cGU+IHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuLCB0eXBlbmFtZSBGdW5jdGlvblR5cGU+Ci1zdHJ1Y3QgSXNDYWxsYWJsZUFzIDogSXNDYWxs
YWJsZUFzSW1wbDxGdW4sIEZ1bmN0aW9uVHlwZT4ge307Ci19Ci19Ci0KLS8qKgotICogQGNsYXNz
IEZ1bmN0aW9uUmVmCi0gKgotICogQGJyaWVmIEEgcmVmZXJlbmNlIHdyYXBwZXIgZm9yIGNhbGxh
YmxlIG9iamVjdHMKLSAqCi0gKiBGdW5jdGlvblJlZiBpcyBzaW1pbGFyIHRvIHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXIsIGJ1dCB0aGUgdGVtcGxhdGUgcGFyYW1ldGVyCi0gKiBpcyB0aGUgZnVuY3Rp
b24gc2lnbmF0dXJlIHR5cGUgcmF0aGVyIHRoYW4gdGhlIHR5cGUgb2YgdGhlIHJlZmVyZW5jZWQg
b2JqZWN0LgotICogQSBmb2xseTo6RnVuY3Rpb25SZWYgaXMgY2hlYXAgdG8gY29uc3RydWN0IGFz
IGl0IGNvbnRhaW5zIG9ubHkgYSBwb2ludGVyIHRvCi0gKiB0aGUgcmVmZXJlbmNlZCBjYWxsYWJs
ZSBhbmQgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gd2hpY2ggaW52b2tlcyB0aGUKLSAqIGNhbGxh
YmxlLgotICoKLSAqIFRoZSB1c2VyIG9mIEZ1bmN0aW9uUmVmIG11c3QgYmUgYXdhcmUgb2YgdGhl
IHJlZmVyZW5jZSBzZW1hbnRpY3M6IHN0b3JpbmcgYQotICogY29weSBvZiBhIEZ1bmN0aW9uUmVm
IGlzIHBvdGVudGlhbGx5IGRhbmdlcm91cyBhbmQgc2hvdWxkIGJlIGF2b2lkZWQgdW5sZXNzCi0g
KiB0aGUgcmVmZXJlbmNlZCBvYmplY3QgZGVmaW5pdGVseSBvdXRsaXZlcyB0aGUgRnVuY3Rpb25S
ZWYgb2JqZWN0LiBUaHVzIGFueQotICogZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgRnVuY3Rpb25S
ZWYgcGFyYW1ldGVyIHNob3VsZCBvbmx5IHVzZSBpdCB0byBpbnZva2UKLSAqIHRoZSByZWZlcmVu
Y2VkIGZ1bmN0aW9uIGFuZCBub3Qgc3RvcmUgYSBjb3B5IG9mIGl0LiBLbm93aW5nIHRoYXQgRnVu
Y3Rpb25SZWYKLSAqIGl0c2VsZiBoYXMgcmVmZXJlbmNlIHNlbWFudGljcywgaXQgaXMgZ2VuZXJh
bGx5IG9rYXkgdG8gdXNlIGl0IHRvIHJlZmVyZW5jZQotICogbGFtYmRhcyB0aGF0IGNhcHR1cmUg
YnkgcmVmZXJlbmNlLgotICovCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvblR5cGU+Ci1j
bGFzcyBGdW5jdGlvblJlZjsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3M+Ci1jbGFzcyBGdW5jdGlvblJlZjxSZXR1cm5UeXBlKEFyZ3MuLi4pPiBmaW5h
bCB7Ci0gIHVzaW5nIENhbGwgPSBSZXR1cm5UeXBlICgqKSh2b2lkKiwgQXJncyYmLi4uKTsKLQot
ICBzdGF0aWMgUmV0dXJuVHlwZSB1bmluaXRDYWxsKHZvaWQqLCBBcmdzJiYuLi4pIHsKLSAgICB0
aHJvdyBzdGQ6OmJhZF9mdW5jdGlvbl9jYWxsKCk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgRnVuPgotICBzdGF0aWMgUmV0dXJuVHlwZSBjYWxsKHZvaWQqIG9iamVjdCwgQXJncyYmLi4u
IGFyZ3MpIHsKLSAgICB1c2luZyBQb2ludGVyID0gX3Q8c3RkOjphZGRfcG9pbnRlcjxGdW4+PjsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmV0dXJuVHlwZT4oZGV0YWlsOjpmdW5jdGlvbjo6aW52
b2tlKAotICAgICAgICBzdGF0aWNfY2FzdDxGdW4mJj4oKnN0YXRpY19jYXN0PFBvaW50ZXI+KG9i
amVjdCkpLAotICAgICAgICBzdGF0aWNfY2FzdDxBcmdzJiY+KGFyZ3MpLi4uKSk7Ci0gIH0KLQot
ICB2b2lkKiBvYmplY3Rfe251bGxwdHJ9OwotICBDYWxsIGNhbGxfeyZGdW5jdGlvblJlZjo6dW5p
bml0Q2FsbH07Ci0KLSBwdWJsaWM6Ci0gIC8qKgotICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLiBD
b25zdHJ1Y3RzIGFuIGVtcHR5IEZ1bmN0aW9uUmVmLgotICAgKgotICAgKiBJbnZva2luZyBpdCB3
aWxsIHRocm93IHN0ZDo6YmFkX2Z1bmN0aW9uX2NhbGwuCi0gICAqLwotICBGdW5jdGlvblJlZigp
ID0gZGVmYXVsdDsKLQotICAvKioKLSAgICogQ29uc3RydWN0IGEgRnVuY3Rpb25SZWYgZnJvbSBh
IHJlZmVyZW5jZSB0byBhIGNhbGxhYmxlIG9iamVjdC4KLSAgICovCi0gIHRlbXBsYXRlIDwKLSAg
ICAgIHR5cGVuYW1lIEZ1biwKLSAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAg
ICAgIENvbmp1bmN0aW9uPAotICAgICAgICAgICAgICBOZWdhdGlvbjxzdGQ6OmlzX3NhbWU8RnVu
Y3Rpb25SZWYsIF90PHN0ZDo6ZGVjYXk8RnVuPj4+PiwKLSAgICAgICAgICAgICAgZGV0YWlsOjpm
dW5jdGlvbjo6SXNDYWxsYWJsZUFzPEZ1biwgUmV0dXJuVHlwZShBcmdzLi4uKT4+Ojp2YWx1ZSwK
LSAgICAgICAgICBpbnQ+Ojp0eXBlID0gMD4KLSAgY29uc3RleHByIC8qIGltcGxpY2l0ICovIEZ1
bmN0aW9uUmVmKEZ1biYmIGZ1bikgbm9leGNlcHQKLSAgICAgIC8vIGBGdW5gIG1heSBiZSBhIGNv
bnN0IHR5cGUsIGluIHdoaWNoIGNhc2Ugd2UgaGF2ZSB0byBkbyBhIGNvbnN0X2Nhc3QKLSAgICAg
IC8vIHRvIHN0b3JlIHRoZSBhZGRyZXNzIGluIGEgYHZvaWQqYC4gVGhpcyBpcyBzYWZlIGJlY2F1
c2UgdGhlIGB2b2lkKmAKLSAgICAgIC8vIHdpbGwgYmUgY2FzdCBiYWNrIHRvIGBGdW4qYCAod2hp
Y2ggaXMgYSBjb25zdCBwb2ludGVyIHdoZW5ldmVyIGBGdW5gCi0gICAgICAvLyBpcyBhIGNvbnN0
IHR5cGUpIGluc2lkZSBgRnVuY3Rpb25SZWY6OmNhbGxgCi0gICAgICA6IG9iamVjdF8oCi0gICAg
ICAgICAgICBjb25zdF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx2b2lkIGNvbnN0Kj4oc3RkOjph
ZGRyZXNzb2YoZnVuKSkpKSwKLSAgICAgICAgY2FsbF8oJkZ1bmN0aW9uUmVmOjpjYWxsPEZ1bj4p
IHt9Ci0KLSAgUmV0dXJuVHlwZSBvcGVyYXRvcigpKEFyZ3MuLi4gYXJncykgY29uc3QgewotICAg
IHJldHVybiBjYWxsXyhvYmplY3RfLCBzdGF0aWNfY2FzdDxBcmdzJiY+KGFyZ3MpLi4uKTsKLSAg
fQotCi0gIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgewotICAgIHJl
dHVybiBvYmplY3RfOwotICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBmb2xseQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvSGFzaC5oIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvSGFzaC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlOGI3NWRmMzc3OTcyYmUyN2I0NjczNjc5Yzk2ZmIxOGU3NTM0
MDYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0hhc2guaAorKysgL2Rldi9udWxs
CkBAIC0xLDUyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4K
LSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0
aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxjc3RkaW50PgotI2luY2x1ZGUgPGNzdHJp
bmc+Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx0dXBs
ZT4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVk
ZSA8Zm9sbHkvQXBwbHlUdXBsZS5oPgotI2luY2x1ZGUgPGZvbGx5L0JpdHMuaD4KLSNpbmNsdWRl
IDxmb2xseS9oYXNoL1Nwb29reUhhc2hWMS5oPgotI2luY2x1ZGUgPGZvbGx5L2hhc2gvU3Bvb2t5
SGFzaFYyLmg+Ci0KLS8qCi0gKiBWYXJpb3VzIGhhc2hpbmcgZnVuY3Rpb25zLgotICovCi0KLW5h
bWVzcGFjZSBmb2xseSB7IG5hbWVzcGFjZSBoYXNoIHsKLQotLy8gVGhpcyBpcyBhIGdlbmVyYWwt
cHVycG9zZSB3YXkgdG8gY3JlYXRlIGEgc2luZ2xlIGhhc2ggZnJvbSBtdWx0aXBsZQotLy8gaGFz
aGFibGUgb2JqZWN0cy4gaGFzaF9jb21iaW5lX2dlbmVyaWMgdGFrZXMgYSBjbGFzcyBIYXNoZXIg
aW1wbGVtZW50aW5nCi0vLyBoYXNoPFQ+OyBoYXNoX2NvbWJpbmUgdXNlcyBhIGRlZmF1bHQgaGFz
aGVyIFN0ZEhhc2hlciB0aGF0IHVzZXMgc3RkOjpoYXNoLgotLy8gaGFzaF9jb21iaW5lX2dlbmVy
aWMgaGFzaGVzIGVhY2ggYXJndW1lbnQgYW5kIGNvbWJpbmVzIHRob3NlIGhhc2hlcyBpbgotLy8g
YW4gb3JkZXItZGVwZW5kZW50IHdheSB0byB5aWVsZCBhIG5ldyBoYXNoLgotCi0KLS8vIFRoaXMg
aXMgdGhlIEhhc2gxMjh0bzY0IGZ1bmN0aW9uIGZyb20gR29vZ2xlJ3MgY2l0eWhhc2ggKGF2YWls
YWJsZQotLy8gdW5kZXIgdGhlIE1JVCBMaWNlbnNlKS4gIFdlIHVzZSBpdCB0byByZWR1Y2UgbXVs
dGlwbGUgNjQgYml0IGhhc2hlcwotLy8gaW50byBhIHNpbmdsZSBoYXNoLgotaW5saW5lIHVpbnQ2
NF90IGhhc2hfMTI4X3RvXzY0KGNvbnN0IHVpbnQ2NF90IHVwcGVyLCBjb25zdCB1aW50NjRfdCBs
b3dlcikgewotICAvLyBNdXJtdXItaW5zcGlyZWQgaGFzaGluZy4KLSAgY29uc3QgdWludDY0X3Qg
a011bCA9IDB4OWRkZmVhMDhlYjM4MmQ2OVVMTDsKLSAgdWludDY0X3QgYSA9IChsb3dlciBeIHVw
cGVyKSAqIGtNdWw7Ci0gIGEgXj0gKGEgPj4gNDcpOwotICB1aW50NjRfdCBiID0gKHVwcGVyIF4g
YSkgKiBrTXVsOwotICBiIF49IChiID4+IDQ3KTsKLSAgYiAqPSBrTXVsOwotICByZXR1cm4gYjsK
LX0KLQotLy8gTmV2ZXIgdXNlZCwgYnV0IGdjYyBkZW1hbmRzIGl0LgotdGVtcGxhdGUgPGNsYXNz
IEhhc2hlcj4KLWlubGluZSBzaXplX3QgaGFzaF9jb21iaW5lX2dlbmVyaWMoKSB7Ci0gIHJldHVy
biAwOwotfQotCi10ZW1wbGF0ZSA8Ci0gICAgY2xhc3MgSXRlciwKLSAgICBjbGFzcyBIYXNoID0g
c3RkOjpoYXNoPHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXI+Ojp2YWx1ZV90eXBl
Pj4KLXVpbnQ2NF90IGhhc2hfcmFuZ2UoSXRlciBiZWdpbiwKLSAgICAgICAgICAgICAgICAgICAg
SXRlciBlbmQsCi0gICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGhhc2ggPSAwLAotICAgICAg
ICAgICAgICAgICAgICBIYXNoIGhhc2hlciA9IEhhc2goKSkgewotICBmb3IgKDsgYmVnaW4gIT0g
ZW5kOyArK2JlZ2luKSB7Ci0gICAgaGFzaCA9IGhhc2hfMTI4X3RvXzY0KGhhc2gsIGhhc2hlcigq
YmVnaW4pKTsKLSAgfQotICByZXR1cm4gaGFzaDsKLX0KLQotaW5saW5lIHVpbnQzMl90IHR3YW5n
XzMyZnJvbTY0KHVpbnQ2NF90IGtleSk7Ci0KLXRlbXBsYXRlIDxjbGFzcyBIYXNoZXIsIHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIFRzPgotc2l6ZV90IGhhc2hfY29tYmluZV9nZW5lcmljKGNvbnN0
IFQmIHQsIGNvbnN0IFRzJi4uLiB0cykgewotICBzaXplX3Qgc2VlZCA9IEhhc2hlcjo6aGFzaCh0
KTsKLSAgaWYgKHNpemVvZi4uLih0cykgPT0gMCkgewotICAgIHJldHVybiBzZWVkOwotICB9Ci0g
IHNpemVfdCByZW1haW5kZXIgPSBoYXNoX2NvbWJpbmVfZ2VuZXJpYzxIYXNoZXI+KHRzLi4uKTsK
LSAgLyogc3RhdGljICovIGlmIChzaXplb2Yoc2l6ZV90KSA9PSBzaXplb2YodWludDMyX3QpKSB7
Ci0gICAgcmV0dXJuIHR3YW5nXzMyZnJvbTY0KCh1aW50NjRfdChzZWVkKSA8PCAzMikgfCByZW1h
aW5kZXIpOwotICB9IGVsc2UgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGhhc2hf
MTI4X3RvXzY0KHNlZWQsIHJlbWFpbmRlcikpOwotICB9Ci19Ci0KLS8vIFNpbXBseSB1c2VzIHN0
ZDo6aGFzaCB0byBoYXNoLiAgTm90ZSB0aGF0IHN0ZDo6aGFzaCBpcyBub3QgZ3VhcmFudGVlZAot
Ly8gdG8gYmUgYSB2ZXJ5IGdvb2QgaGFzaCBmdW5jdGlvbjsgcHJvdmlkZWQgc3RkOjpoYXNoIGRv
ZXNuJ3QgY29sbGlkZSBvbgotLy8gdGhlIGluZGl2aWR1YWwgaW5wdXRzLCB5b3UgYXJlIGZpbmUs
IGJ1dCB0aGF0IHdvbid0IGJlIHRydWUgZm9yLCBzYXksCi0vLyBzdHJpbmdzIG9yIHBhaXJzCi1j
bGFzcyBTdGRIYXNoZXIgewotIHB1YmxpYzoKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIHN0
YXRpYyBzaXplX3QgaGFzaChjb25zdCBUJiB0KSB7Ci0gICAgcmV0dXJuIHN0ZDo6aGFzaDxUPigp
KHQpOwotICB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+Ci1z
aXplX3QgaGFzaF9jb21iaW5lKGNvbnN0IFQmIHQsIGNvbnN0IFRzJi4uLiB0cykgewotICByZXR1
cm4gaGFzaF9jb21iaW5lX2dlbmVyaWM8U3RkSGFzaGVyPih0LCB0cy4uLik7Ci19Ci0KLS8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLQotLyoKLSAqIFRob21hcyBXYW5nIDY0IGJpdCBtaXggaGFzaCBmdW5jdGlvbgot
ICovCi0KLWlubGluZSB1aW50NjRfdCB0d2FuZ19taXg2NCh1aW50NjRfdCBrZXkpIHsKLSAga2V5
ID0gKH5rZXkpICsgKGtleSA8PCAyMSk7ICAvLyBrZXkgKj0gKDEgPDwgMjEpIC0gMTsga2V5IC09
IDE7Ci0gIGtleSA9IGtleSBeIChrZXkgPj4gMjQpOwotICBrZXkgPSBrZXkgKyAoa2V5IDw8IDMp
ICsgKGtleSA8PCA4KTsgIC8vIGtleSAqPSAxICsgKDEgPDwgMykgKyAoMSA8PCA4KQotICBrZXkg
PSBrZXkgXiAoa2V5ID4+IDE0KTsKLSAga2V5ID0ga2V5ICsgKGtleSA8PCAyKSArIChrZXkgPDwg
NCk7ICAvLyBrZXkgKj0gMSArICgxIDw8IDIpICsgKDEgPDwgNCkKLSAga2V5ID0ga2V5IF4gKGtl
eSA+PiAyOCk7Ci0gIGtleSA9IGtleSArIChrZXkgPDwgMzEpOyAgLy8ga2V5ICo9IDEgKyAoMSA8
PCAzMSkKLSAgcmV0dXJuIGtleTsKLX0KLQotLyoKLSAqIEludmVyc2Ugb2YgdHdhbmdfbWl4NjQK
LSAqCi0gKiBOb3RlIHRoYXQgdHdhbmdfdW5taXg2NCBpcyBzaWduaWZpY2FudGx5IHNsb3dlciB0
aGFuIHR3YW5nX21peDY0LgotICovCi0KLWlubGluZSB1aW50NjRfdCB0d2FuZ191bm1peDY0KHVp
bnQ2NF90IGtleSkgewotICAvLyBTZWUgdGhlIGNvbW1lbnRzIGluIGplbmtpbnNfcmV2X3VubWl4
MzIgZm9yIGFuIGV4cGxhbmF0aW9uIGFzIHRvIGhvdyB0aGlzCi0gIC8vIHdhcyBnZW5lcmF0ZWQK
LSAga2V5ICo9IDQ2MTE2ODYwMTYyNzk5MDQyNTdVOwotICBrZXkgXj0gKGtleSA+PiAyOCkgXiAo
a2V5ID4+IDU2KTsKLSAga2V5ICo9IDE0OTMzMDc4NTM1ODYwMTEzMjEzVTsKLSAga2V5IF49IChr
ZXkgPj4gMTQpIF4gKGtleSA+PiAyOCkgXiAoa2V5ID4+IDQyKSBeIChrZXkgPj4gNTYpOwotICBr
ZXkgKj0gMTUyNDQ2Njc3NDM5MzM1NTM5NzdVOwotICBrZXkgXj0gKGtleSA+PiAyNCkgXiAoa2V5
ID4+IDQ4KTsKLSAga2V5ID0gKGtleSArIDEpICogOTIyMzM2NzYzODgwNjE2NzU1MVU7Ci0gIHJl
dHVybiBrZXk7Ci19Ci0KLS8qCi0gKiBUaG9tYXMgV2FuZyBkb3duc2NhbGluZyBoYXNoIGZ1bmN0
aW9uCi0gKi8KLQotaW5saW5lIHVpbnQzMl90IHR3YW5nXzMyZnJvbTY0KHVpbnQ2NF90IGtleSkg
ewotICBrZXkgPSAofmtleSkgKyAoa2V5IDw8IDE4KTsKLSAga2V5ID0ga2V5IF4gKGtleSA+PiAz
MSk7Ci0gIGtleSA9IGtleSAqIDIxOwotICBrZXkgPSBrZXkgXiAoa2V5ID4+IDExKTsKLSAga2V5
ID0ga2V5ICsgKGtleSA8PCA2KTsKLSAga2V5ID0ga2V5IF4gKGtleSA+PiAyMik7Ci0gIHJldHVy
biAodWludDMyX3QpIGtleTsKLX0KLQotLyoKLSAqIFJvYmVydCBKZW5raW5zJyByZXZlcnNpYmxl
IDMyIGJpdCBtaXggaGFzaCBmdW5jdGlvbgotICovCi0KLWlubGluZSB1aW50MzJfdCBqZW5raW5z
X3Jldl9taXgzMih1aW50MzJfdCBrZXkpIHsKLSAga2V5ICs9IChrZXkgPDwgMTIpOyAgLy8ga2V5
ICo9ICgxICsgKDEgPDwgMTIpKQotICBrZXkgXj0gKGtleSA+PiAyMik7Ci0gIGtleSArPSAoa2V5
IDw8IDQpOyAgIC8vIGtleSAqPSAoMSArICgxIDw8IDQpKQotICBrZXkgXj0gKGtleSA+PiA5KTsK
LSAga2V5ICs9IChrZXkgPDwgMTApOyAgLy8ga2V5ICo9ICgxICsgKDEgPDwgMTApKQotICBrZXkg
Xj0gKGtleSA+PiAyKTsKLSAgLy8ga2V5ICo9ICgxICsgKDEgPDwgNykpICogKDEgKyAoMSA8PCAx
MikpCi0gIGtleSArPSAoa2V5IDw8IDcpOwotICBrZXkgKz0gKGtleSA8PCAxMik7Ci0gIHJldHVy
biBrZXk7Ci19Ci0KLS8qCi0gKiBJbnZlcnNlIG9mIGplbmtpbnNfcmV2X21peDMyCi0gKgotICog
Tm90ZSB0aGF0IGplbmtpbmtzX3Jldl91bm1peDMyIGlzIHNpZ25pZmljYW50bHkgc2xvd2VyIHRo
YW4KLSAqIGplbmtpbnNfcmV2X21peDMyLgotICovCi0KLWlubGluZSB1aW50MzJfdCBqZW5raW5z
X3Jldl91bm1peDMyKHVpbnQzMl90IGtleSkgewotICAvLyBUaGVzZSBhcmUgdGhlIG1vZHVsYXIg
bXVsdGlwbGljYXRpdmUgaW52ZXJzZXMgKGluIFpfMl4zMikgb2YgdGhlCi0gIC8vIG11bHRpcGxp
Y2F0aW9uIGZhY3RvcnMgaW4gamVua2luc19yZXZfbWl4MzIsIGluIHJldmVyc2Ugb3JkZXIuICBU
aGV5IHdlcmUKLSAgLy8gY29tcHV0ZWQgdXNpbmcgdGhlIEV4dGVuZGVkIEV1Y2xpZGVhbiBhbGdv
cml0aG0sIHNlZQotICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01vZHVsYXJfbXVs
dGlwbGljYXRpdmVfaW52ZXJzZQotICBrZXkgKj0gMjM2NDAyNjc1M1U7Ci0KLSAgLy8gVGhlIGlu
dmVyc2Ugb2YgYSBePSAoYSA+PiBuKSBpcwotICAvLyBiID0gYQotICAvLyBmb3IgKGludCBpID0g
bjsgaSA8IDMyOyBpICs9IG4pIHsKLSAgLy8gICBiIF49IChhID4+IGkpOwotICAvLyB9Ci0gIGtl
eSBePQotICAgIChrZXkgPj4gMikgXiAoa2V5ID4+IDQpIF4gKGtleSA+PiA2KSBeIChrZXkgPj4g
OCkgXgotICAgIChrZXkgPj4gMTApIF4gKGtleSA+PiAxMikgXiAoa2V5ID4+IDE0KSBeIChrZXkg
Pj4gMTYpIF4KLSAgICAoa2V5ID4+IDE4KSBeIChrZXkgPj4gMjApIF4gKGtleSA+PiAyMikgXiAo
a2V5ID4+IDI0KSBeCi0gICAgKGtleSA+PiAyNikgXiAoa2V5ID4+IDI4KSBeIChrZXkgPj4gMzAp
OwotICBrZXkgKj0gMzIyMjI3MzAyNVU7Ci0gIGtleSBePSAoa2V5ID4+IDkpIF4gKGtleSA+PiAx
OCkgXiAoa2V5ID4+IDI3KTsKLSAga2V5ICo9IDQwNDIzMjIxNjFVOwotICBrZXkgXj0gKGtleSA+
PiAyMik7Ci0gIGtleSAqPSAxNjc3MzEyMVU7Ci0gIHJldHVybiBrZXk7Ci19Ci0KLS8qCi0gKiBG
b3dsZXIgLyBOb2xsIC8gVm8gKEZOVikgSGFzaAotICogICAgIGh0dHA6Ly93d3cuaXN0aGUuY29t
L2Nob25nby90ZWNoL2NvbXAvZm52LwotICovCi0KLWNvbnN0IHVpbnQzMl90IEZOVl8zMl9IQVNI
X1NUQVJUID0gMjE2NjEzNjI2MVVMOwotY29uc3QgdWludDY0X3QgRk5WXzY0X0hBU0hfU1RBUlQg
PSAxNDY5NTk4MTAzOTM0NjY1NjAzN1VMTDsKLWNvbnN0IHVpbnQ2NF90IEZOVkFfNjRfSEFTSF9T
VEFSVCA9IDE0Njk1OTgxMDM5MzQ2NjU2MDM3VUxMOwotCi1pbmxpbmUgdWludDMyX3QgZm52MzIo
Y29uc3QgY2hhciogYnVmLCB1aW50MzJfdCBoYXNoID0gRk5WXzMyX0hBU0hfU1RBUlQpIHsKLSAg
Ly8gZm9yY2luZyBzaWduZWQgY2hhciwgc2luY2Ugb3RoZXIgcGxhdGZvcm1zIGNhbiB1c2UgdW5z
aWduZWQKLSAgY29uc3Qgc2lnbmVkIGNoYXIqIHMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHNp
Z25lZCBjaGFyKj4oYnVmKTsKLQotICBmb3IgKDsgKnM7ICsrcykgewotICAgIGhhc2ggKz0gKGhh
c2ggPDwgMSkgKyAoaGFzaCA8PCA0KSArIChoYXNoIDw8IDcpICsKLSAgICAgICAgICAgIChoYXNo
IDw8IDgpICsgKGhhc2ggPDwgMjQpOwotICAgIGhhc2ggXj0gKnM7Ci0gIH0KLSAgcmV0dXJuIGhh
c2g7Ci19Ci0KLWlubGluZSB1aW50MzJfdCBmbnYzMl9idWYoY29uc3Qgdm9pZCogYnVmLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgaGFzaCA9IEZOVl8zMl9IQVNIX1NUQVJUKSB7Ci0gIC8vIGZvcmNpbmcgc2ln
bmVkIGNoYXIsIHNpbmNlIG90aGVyIHBsYXRmb3JtcyBjYW4gdXNlIHVuc2lnbmVkCi0gIGNvbnN0
IHNpZ25lZCBjaGFyKiBjaGFyX2J1ZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc2lnbmVkIGNo
YXIqPihidWYpOwotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0gICAgaGFz
aCArPSAoaGFzaCA8PCAxKSArIChoYXNoIDw8IDQpICsgKGhhc2ggPDwgNykgKwotICAgICAgICAg
ICAgKGhhc2ggPDwgOCkgKyAoaGFzaCA8PCAyNCk7Ci0gICAgaGFzaCBePSBjaGFyX2J1ZltpXTsK
LSAgfQotCi0gIHJldHVybiBoYXNoOwotfQotCi1pbmxpbmUgdWludDMyX3QgZm52MzIoY29uc3Qg
c3RkOjpzdHJpbmcmIHN0ciwKLSAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoYXNoID0g
Rk5WXzMyX0hBU0hfU1RBUlQpIHsKLSAgcmV0dXJuIGZudjMyX2J1ZihzdHIuZGF0YSgpLCBzdHIu
c2l6ZSgpLCBoYXNoKTsKLX0KLQotaW5saW5lIHVpbnQ2NF90IGZudjY0KGNvbnN0IGNoYXIqIGJ1
ZiwgdWludDY0X3QgaGFzaCA9IEZOVl82NF9IQVNIX1NUQVJUKSB7Ci0gIC8vIGZvcmNpbmcgc2ln
bmVkIGNoYXIsIHNpbmNlIG90aGVyIHBsYXRmb3JtcyBjYW4gdXNlIHVuc2lnbmVkCi0gIGNvbnN0
IHNpZ25lZCBjaGFyKiBzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzaWduZWQgY2hhcio+KGJ1
Zik7Ci0KLSAgZm9yICg7ICpzOyArK3MpIHsKLSAgICBoYXNoICs9IChoYXNoIDw8IDEpICsgKGhh
c2ggPDwgNCkgKyAoaGFzaCA8PCA1KSArIChoYXNoIDw8IDcpICsKLSAgICAgIChoYXNoIDw8IDgp
ICsgKGhhc2ggPDwgNDApOwotICAgIGhhc2ggXj0gKnM7Ci0gIH0KLSAgcmV0dXJuIGhhc2g7Ci19
Ci0KLWlubGluZSB1aW50NjRfdCBmbnY2NF9idWYoY29uc3Qgdm9pZCogYnVmLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDY0X3QgaGFzaCA9IEZOVl82NF9IQVNIX1NUQVJUKSB7Ci0gIC8vIGZvcmNpbmcgc2lnbmVkIGNo
YXIsIHNpbmNlIG90aGVyIHBsYXRmb3JtcyBjYW4gdXNlIHVuc2lnbmVkCi0gIGNvbnN0IHNpZ25l
ZCBjaGFyKiBjaGFyX2J1ZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc2lnbmVkIGNoYXIqPihi
dWYpOwotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0gICAgaGFzaCArPSAo
aGFzaCA8PCAxKSArIChoYXNoIDw8IDQpICsgKGhhc2ggPDwgNSkgKyAoaGFzaCA8PCA3KSArCi0g
ICAgICAoaGFzaCA8PCA4KSArIChoYXNoIDw8IDQwKTsKLSAgICBoYXNoIF49IGNoYXJfYnVmW2ld
OwotICB9Ci0gIHJldHVybiBoYXNoOwotfQotCi1pbmxpbmUgdWludDY0X3QgZm52NjQoY29uc3Qg
c3RkOjpzdHJpbmcmIHN0ciwKLSAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBoYXNoID0g
Rk5WXzY0X0hBU0hfU1RBUlQpIHsKLSAgcmV0dXJuIGZudjY0X2J1ZihzdHIuZGF0YSgpLCBzdHIu
c2l6ZSgpLCBoYXNoKTsKLX0KLQotaW5saW5lIHVpbnQ2NF90IGZudmE2NF9idWYoY29uc3Qgdm9p
ZCogYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50NjRfdCBoYXNoID0gRk5WQV82NF9IQVNIX1NUQVJUKSB7Ci0g
IGNvbnN0IHVpbnQ4X3QqIGNoYXJfYnVmID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oYnVmKTsKLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewotICAgIGhhc2gg
Xj0gY2hhcl9idWZbaV07Ci0gICAgaGFzaCArPSAoaGFzaCA8PCAxKSArIChoYXNoIDw8IDQpICsg
KGhhc2ggPDwgNSkgKyAoaGFzaCA8PCA3KSArCi0gICAgICAgICAgICAoaGFzaCA8PCA4KSArICho
YXNoIDw8IDQwKTsKLSAgfQotICByZXR1cm4gaGFzaDsKLX0KLQotaW5saW5lIHVpbnQ2NF90IGZu
dmE2NChjb25zdCBzdGQ6OnN0cmluZyYgc3RyLAotICAgICAgICAgICAgICAgICAgICAgICB1aW50
NjRfdCBoYXNoID0gRk5WQV82NF9IQVNIX1NUQVJUKSB7Ci0gIHJldHVybiBmbnZhNjRfYnVmKHN0
ci5kYXRhKCksIHN0ci5zaXplKCksIGhhc2gpOwotfQotCi0vKgotICogUGF1bCBIc2llaDogaHR0
cDovL3d3dy5hemlsbGlvbm1vbmtleXMuY29tL3FlZC9oYXNoLmh0bWwKLSAqLwotCi0jZGVmaW5l
IGdldDE2Yml0cyhkKSBmb2xseTo6bG9hZFVuYWxpZ25lZDx1aW50MTZfdD4oZCkKLQotaW5saW5l
IHVpbnQzMl90IGhzaWVoX2hhc2gzMl9idWYoY29uc3Qgdm9pZCogYnVmLCBzaXplX3QgbGVuKSB7
Ci0gIC8vIGZvcmNpbmcgc2lnbmVkIGNoYXIsIHNpbmNlIG90aGVyIHBsYXRmb3JtcyBjYW4gdXNl
IHVuc2lnbmVkCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHMgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihidWYpOwotICB1aW50MzJfdCBoYXNoID0gc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGxlbik7Ci0gIHVpbnQzMl90IHRtcDsKLSAgc2l6ZV90IHJlbTsKLQotICBpZiAo
bGVuIDw9IDAgfHwgYnVmID09IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHJlbSA9IGxl
biAmIDM7Ci0gIGxlbiA+Pj0gMjsKLQotICAvKiBNYWluIGxvb3AgKi8KLSAgZm9yICg7bGVuID4g
MDsgbGVuLS0pIHsKLSAgICBoYXNoICArPSBnZXQxNmJpdHMgKHMpOwotICAgIHRtcCAgICA9IChn
ZXQxNmJpdHMgKHMrMikgPDwgMTEpIF4gaGFzaDsKLSAgICBoYXNoICAgPSAoaGFzaCA8PCAxNikg
XiB0bXA7Ci0gICAgcyAgKz0gMipzaXplb2YgKHVpbnQxNl90KTsKLSAgICBoYXNoICArPSBoYXNo
ID4+IDExOwotICB9Ci0KLSAgLyogSGFuZGxlIGVuZCBjYXNlcyAqLwotICBzd2l0Y2ggKHJlbSkg
ewotICBjYXNlIDM6Ci0gICAgaGFzaCArPSBnZXQxNmJpdHMocyk7Ci0gICAgaGFzaCBePSBoYXNo
IDw8IDE2OwotICAgIGhhc2ggXj0gc1tzaXplb2YgKHVpbnQxNl90KV0gPDwgMTg7Ci0gICAgaGFz
aCArPSBoYXNoID4+IDExOwotICAgIGJyZWFrOwotICBjYXNlIDI6Ci0gICAgaGFzaCArPSBnZXQx
NmJpdHMocyk7Ci0gICAgaGFzaCBePSBoYXNoIDw8IDExOwotICAgIGhhc2ggKz0gaGFzaCA+PiAx
NzsKLSAgICBicmVhazsKLSAgY2FzZSAxOgotICAgIGhhc2ggKz0gKnM7Ci0gICAgaGFzaCBePSBo
YXNoIDw8IDEwOwotICAgIGhhc2ggKz0gaGFzaCA+PiAxOwotICB9Ci0KLSAgLyogRm9yY2UgImF2
YWxhbmNoaW5nIiBvZiBmaW5hbCAxMjcgYml0cyAqLwotICBoYXNoIF49IGhhc2ggPDwgMzsKLSAg
aGFzaCArPSBoYXNoID4+IDU7Ci0gIGhhc2ggXj0gaGFzaCA8PCA0OwotICBoYXNoICs9IGhhc2gg
Pj4gMTc7Ci0gIGhhc2ggXj0gaGFzaCA8PCAyNTsKLSAgaGFzaCArPSBoYXNoID4+IDY7Ci0KLSAg
cmV0dXJuIGhhc2g7Ci19OwotCi0jdW5kZWYgZ2V0MTZiaXRzCi0KLWlubGluZSB1aW50MzJfdCBo
c2llaF9oYXNoMzIoY29uc3QgY2hhciogcykgewotICByZXR1cm4gaHNpZWhfaGFzaDMyX2J1Zihz
LCBzdGQ6OnN0cmxlbihzKSk7Ci19Ci0KLWlubGluZSB1aW50MzJfdCBoc2llaF9oYXNoMzJfc3Ry
KGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpIHsKLSAgcmV0dXJuIGhzaWVoX2hhc2gzMl9idWYoc3Ry
LmRhdGEoKSwgc3RyLnNpemUoKSk7Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotfSAvLyBuYW1lc3Bh
Y2UgaGFzaAotCi10ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIEVuYWJsZSA9IHZvaWQ+Ci1zdHJ1
Y3QgaGFzaGVyOwotCi1zdHJ1Y3QgSGFzaCB7Ci0gIHRlbXBsYXRlIDxjbGFzcyBUPgotICBzaXpl
X3Qgb3BlcmF0b3IoKShjb25zdCBUJiB2KSBjb25zdCB7Ci0gICAgcmV0dXJuIGhhc2hlcjxUPigp
KHYpOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIFRzPgotICBzaXplX3Qg
b3BlcmF0b3IoKShjb25zdCBUJiB0LCBjb25zdCBUcyYuLi4gdHMpIGNvbnN0IHsKLSAgICByZXR1
cm4gaGFzaDo6aGFzaF8xMjhfdG9fNjQoKCp0aGlzKSh0KSwgKCp0aGlzKSh0cy4uLikpOwotICB9
Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IGhhc2hlcjxib29sPiB7Ci0gIHNpemVfdCBvcGVy
YXRvcigpKGJvb2wga2V5KSBjb25zdCB7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxsIHRoZSBv
dXRwdXQgYml0cyBkZXBlbmQgb24gdGhlIGlucHV0LgotICAgIHJldHVybiBrZXkgPyBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIDogMDsKLSAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgaGFzaGVyPGludDMyX3Q+IHsKLSAgc2l6ZV90IG9wZXJhdG9yKCkoaW50MzJfdCBrZXkp
IGNvbnN0IHsKLSAgICByZXR1cm4gaGFzaDo6amVua2luc19yZXZfbWl4MzIodWludDMyX3Qoa2V5
KSk7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IGhhc2hlcjx1aW50MzJfdD4gewotICBz
aXplX3Qgb3BlcmF0b3IoKSh1aW50MzJfdCBrZXkpIGNvbnN0IHsKLSAgICByZXR1cm4gaGFzaDo6
amVua2luc19yZXZfbWl4MzIoa2V5KTsKLSAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgaGFz
aGVyPGludDE2X3Q+IHsKLSAgc2l6ZV90IG9wZXJhdG9yKCkoaW50MTZfdCBrZXkpIGNvbnN0IHsK
LSAgICByZXR1cm4gaGFzaGVyPGludDMyX3Q+KCkoa2V5KTsgLy8gYXMgaW1wbCBhY2NpZGVudCwg
c2lnbi1leHRlbmRzCi0gIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IGhhc2hlcjx1aW50MTZf
dD4gewotICBzaXplX3Qgb3BlcmF0b3IoKSh1aW50MTZfdCBrZXkpIGNvbnN0IHsKLSAgICByZXR1
cm4gaGFzaGVyPHVpbnQzMl90PigpKGtleSk7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IGhhc2hlcjxpbnQ4X3Q+IHsKLSAgc2l6ZV90IG9wZXJhdG9yKCkoaW50OF90IGtleSkgY29uc3Qg
ewotICAgIHJldHVybiBoYXNoZXI8aW50MzJfdD4oKShrZXkpOyAvLyBhcyBpbXBsIGFjY2lkZW50
LCBzaWduLWV4dGVuZHMKLSAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgaGFzaGVyPHVpbnQ4
X3Q+IHsKLSAgc2l6ZV90IG9wZXJhdG9yKCkodWludDhfdCBrZXkpIGNvbnN0IHsKLSAgICByZXR1
cm4gaGFzaGVyPHVpbnQzMl90PigpKGtleSk7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IGhhc2hlcjxjaGFyPiB7Ci0gIHVzaW5nIGV4cGxpY2l0X3R5cGUgPQotICAgICAgc3RkOjpjb25k
aXRpb25hbDxzdGQ6OmlzX3NpZ25lZDxjaGFyPjo6dmFsdWUsIGludDhfdCwgdWludDhfdD46OnR5
cGU7Ci0gIHNpemVfdCBvcGVyYXRvcigpKGNoYXIga2V5KSBjb25zdCB7Ci0gICAgcmV0dXJuIGhh
c2hlcjxleHBsaWNpdF90eXBlPigpKGtleSk7IC8vIGFzIGltcGwgYWNjaWRlbnQsIHNpZ24tZXh0
ZW5kcwotICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBoYXNoZXI8aW50NjRfdD4gewotICBz
aXplX3Qgb3BlcmF0b3IoKShpbnQ2NF90IGtleSkgY29uc3QgewotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGhhc2g6OnR3YW5nX21peDY0KHVpbnQ2NF90KGtleSkpKTsKLSAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgaGFzaGVyPHVpbnQ2NF90PiB7Ci0gIHNpemVfdCBvcGVyYXRv
cigpKHVpbnQ2NF90IGtleSkgY29uc3QgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+
KGhhc2g6OnR3YW5nX21peDY0KGtleSkpOwotICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBo
YXNoZXI8c3RkOjpzdHJpbmc+IHsKLSAgc2l6ZV90IG9wZXJhdG9yKCkoY29uc3Qgc3RkOjpzdHJp
bmcmIGtleSkgY29uc3QgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KAotICAgICAg
ICBoYXNoOjpTcG9va3lIYXNoVjI6Okhhc2g2NChrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpLCAwKSk7
Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGhhc2hlcjxULCB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2VudW08VD46OnZhbHVlLCB2b2lkPjo6dHlwZT4gewot
ICBzaXplX3Qgb3BlcmF0b3IoKShUIGtleSkgY29uc3QgewotICAgIHJldHVybiBIYXNoKCkoc3Rh
dGljX2Nhc3Q8dHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5cGU8VD46OnR5cGU+KGtleSkpOwot
ICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgotc3RydWN0IGhhc2hlcjxz
dGQ6OnBhaXI8VDEsIFQyPj4gewotICBzaXplX3Qgb3BlcmF0b3IoKShjb25zdCBzdGQ6OnBhaXI8
VDEsIFQyPiYga2V5KSBjb25zdCB7Ci0gICAgcmV0dXJuIEhhc2goKShrZXkuZmlyc3QsIGtleS5z
ZWNvbmQpOwotICB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+Ci1zdHJ1Y3QgaGFz
aGVyPHN0ZDo6dHVwbGU8VHMuLi4+PiB7Ci0gIHNpemVfdCBvcGVyYXRvcigpIChjb25zdCBzdGQ6
OnR1cGxlPFRzLi4uPiYga2V5KSBjb25zdCB7Ci0gICAgcmV0dXJuIGFwcGx5VHVwbGUoSGFzaCgp
LCBrZXkpOwotICB9Ci19OwotCi0vLyByZWN1cnNpb24KLXRlbXBsYXRlIDxzaXplX3QgaW5kZXgs
IHR5cGVuYW1lLi4uIFRzPgotc3RydWN0IFR1cGxlSGFzaGVyIHsKLSAgc2l6ZV90IG9wZXJhdG9y
KCkoc3RkOjp0dXBsZTxUcy4uLj4gY29uc3QmIGtleSkgY29uc3QgewotICAgIHJldHVybiBoYXNo
OjpoYXNoX2NvbWJpbmUoCi0gICAgICBUdXBsZUhhc2hlcjxpbmRleCAtIDEsIFRzLi4uPigpKGtl
eSksCi0gICAgICBzdGQ6OmdldDxpbmRleD4oa2V5KSk7Ci0gIH0KLX07Ci0KLS8vIGJhc2UKLXRl
bXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KLXN0cnVjdCBUdXBsZUhhc2hlcjwwLCBUcy4uLj4gewot
ICBzaXplX3Qgb3BlcmF0b3IoKShzdGQ6OnR1cGxlPFRzLi4uPiBjb25zdCYga2V5KSBjb25zdCB7
Ci0gICAgLy8gd2UgY291bGQgZG8gc3RkOjpoYXNoIGhlcmUgZGlyZWN0bHksIGJ1dCBoYXNoX2Nv
bWJpbmUgaGlkZXMgYWxsIHRoZQotICAgIC8vIHVnbHkgdGVtcGxhdGluZyBpbXBsaWNpdGx5Ci0g
ICAgcmV0dXJuIGhhc2g6Omhhc2hfY29tYmluZShzdGQ6OmdldDwwPihrZXkpKTsKLSAgfQotfTsK
LQotfSAvLyBuYW1lc3BhY2UgZm9sbHkKLQotLy8gQ3VzdG9tIGhhc2ggZnVuY3Rpb25zLgotbmFt
ZXNwYWNlIHN0ZCB7Ci0gIC8vIEhhc2ggZnVuY3Rpb24gZm9yIHBhaXJzLiBSZXF1aXJlcyBkZWZh
dWx0IGhhc2ggZnVuY3Rpb25zIGZvciBib3RoCi0gIC8vIGl0ZW1zIGluIHRoZSBwYWlyLgotICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgotICBzdHJ1Y3QgaGFzaDxzdGQ6OnBh
aXI8VDEsIFQyPiA+IHsKLSAgcHVibGljOgotICAgIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IHN0
ZDo6cGFpcjxUMSwgVDI+JiB4KSBjb25zdCB7Ci0gICAgICByZXR1cm4gZm9sbHk6Omhhc2g6Omhh
c2hfY29tYmluZSh4LmZpcnN0LCB4LnNlY29uZCk7Ci0gICAgfQotICB9OwotCi0gIC8vIEhhc2gg
ZnVuY3Rpb24gZm9yIHR1cGxlcy4gUmVxdWlyZXMgZGVmYXVsdCBoYXNoIGZ1bmN0aW9ucyBmb3Ig
YWxsIHR5cGVzLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+Ci0gIHN0cnVjdCBoYXNoPHN0
ZDo6dHVwbGU8VHMuLi4+PiB7Ci0gICAgc2l6ZV90IG9wZXJhdG9yKCkoc3RkOjp0dXBsZTxUcy4u
Lj4gY29uc3QmIGtleSkgY29uc3QgewotICAgICAgZm9sbHk6OlR1cGxlSGFzaGVyPAotICAgICAg
ICBzdGQ6OnR1cGxlX3NpemU8c3RkOjp0dXBsZTxUcy4uLj4+Ojp2YWx1ZSAtIDEsIC8vIHN0YXJ0
IGluZGV4Ci0gICAgICAgIFRzLi4uPiBoYXNoZXI7Ci0KLSAgICAgIHJldHVybiBoYXNoZXIoa2V5
KTsKLSAgICB9Ci0gIH07Ci19IC8vIG5hbWVzcGFjZSBzdGQKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0luZGVzdHJ1Y3RpYmxlLmggYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9JbmRlc3RydWN0aWJsZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDFkMjFjYmZlYjNmY2YwNjEzOTIxNWQzODVk
NjllNjkzMGZkNjRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0luZGVzdHJ1Y3Rp
YmxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAy
MDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
SVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Y2Fzc2Vy
dD4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi0vKioqCi0gKiAg
SW5kZXN0cnVjdGlibGUKLSAqCi0gKiAgV2hlbiB5b3UgbmVlZCBhIE1leWVycyBzaW5nbGV0b24g
dGhhdCB3aWxsIG5vdCBnZXQgZGVzdHJ1Y3RlZCwgZXZlbiBhdAotICogIHNodXRkb3duLCBhbmQg
eW91IGFsc28gd2FudCB0aGUgb2JqZWN0IHN0b3JlZCBpbmxpbmUuCi0gKgotICogIFVzZSBsaWtl
OgotICoKLSAqICAgICAgdm9pZCBkb1NvbWV0aGluZ1dpdGhFeHBlbnNpdmVEYXRhKCk7Ci0gKgot
ICogICAgICB2b2lkIGRvU29tZXRoaW5nV2l0aEV4cGVuc2l2ZURhdGEoKSB7Ci0gKiAgICAgICAg
c3RhdGljIGNvbnN0IEluZGVzdHJ1Y3RpYmxlPG1hcDxzdHJpbmcsIGludD4+IGRhdGF7Ci0gKiAg
ICAgICAgICBtYXA8c3RyaW5nLCBpbnQ+e3sia2V5MSIsIDE3fSwgeyJrZXkyIiwgMTl9LCB7Imtl
eTMiLCAyM319LAotICogICAgICAgIH07Ci0gKiAgICAgICAgY2FsbFNvbWV0aGluZ1Rha2luZ0FN
YXBCeVJlZigqZGF0YSk7Ci0gKiAgICAgIH0KLSAqCi0gKiAgVGhpcyBzaG91bGQgYmUgdXNlZCBv
bmx5IGZvciBNZXllcnMgc2luZ2xldG9ucywgYW5kLCBldmVuIHRoZW4sIG9ubHkgd2hlbgotICog
IHRoZSBpbnN0YW5jZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGRlc3RydWN0ZWQgZXZlci4KLSAqCi0g
KiAgVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgbW9yZSBnZW5lcmFsbHksIGUuZy4sIGFzIG1lbWJl
ciBmaWVsZHMsIGV0Yy4KLSAqCi0gKiAgVGhpcyBpcyBkZXNpZ25lZCBhcyBhbiBhbHRlcm5hdGl2
ZSwgYnV0IHdpdGggb25lIGZld2VyIGFsbG9jYXRpb24gYXQKLSAqICBjb25zdHJ1Y3Rpb24gdGlt
ZSBhbmQgb25lIGZld2VyIHBvaW50ZXIgZGVyZWZlcmVuY2UgYXQgYWNjZXNzIHRpbWUsIHRvIHRo
ZQotICogIE1leWVycyBzaW5nbGV0b24gcGF0dGVybiBvZjoKLSAqCi0gKiAgICB2b2lkIGRvU29t
ZXRoaW5nV2l0aEV4cGVuc2l2ZURhdGEoKSB7Ci0gKiAgICAgIHN0YXRpYyBjb25zdCBhdXRvIGRh
dGEgPSAgLy8gbmV2ZXIgYGRlbGV0ZWBkCi0gKiAgICAgICAgICBuZXcgbWFwPHN0cmluZywgaW50
Pnt7ImtleTEiLCAxN30sIHsia2V5MiIsIDE5fSwgeyJrZXkzIiwgMjN9fTsKLSAqICAgICAgY2Fs
bFNvbWV0aGluZ1Rha2luZ0FNYXBCeVJlZigqZGF0YSk7Ci0gKiAgICB9Ci0gKi8KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBJbmRlc3RydWN0aWJsZSBmaW5hbCB7Ci0KLSBwdWJsaWM6
Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBTID0gVCwgdHlwZW5hbWUgPSBkZWNsdHlwZShTKCkpPgot
ICBjb25zdGV4cHIgSW5kZXN0cnVjdGlibGUoKSBub2V4Y2VwdChub2V4Y2VwdChUKCkpKSB7fQot
Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzLCB0eXBlbmFtZSA9IGRlY2x0eXBlKFQoc3Rk
OjpkZWNsdmFsPEFyZ3MmJj4oKS4uLikpPgotICBleHBsaWNpdCBjb25zdGV4cHIgSW5kZXN0cnVj
dGlibGUoQXJncyYmLi4uIGFyZ3MpIG5vZXhjZXB0KAotICAgICAgbm9leGNlcHQoVChzdGQ6OmRl
Y2x2YWw8QXJncyYmPigpLi4uKSkpCi0gICAgICA6IHN0b3JhZ2VfKHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLikge30KLQotICB+SW5kZXN0cnVjdGlibGUoKSA9IGRlZmF1bHQ7Ci0KLSAgSW5k
ZXN0cnVjdGlibGUoSW5kZXN0cnVjdGlibGUgY29uc3QmKSA9IGRlbGV0ZTsKLSAgSW5kZXN0cnVj
dGlibGUmIG9wZXJhdG9yPShJbmRlc3RydWN0aWJsZSBjb25zdCYpID0gZGVsZXRlOwotCi0gIElu
ZGVzdHJ1Y3RpYmxlKEluZGVzdHJ1Y3RpYmxlJiYgb3RoZXIpIG5vZXhjZXB0KAotICAgICAgbm9l
eGNlcHQoVChzdGQ6OmRlY2x2YWw8VCYmPigpKSkpCi0gICAgICA6IHN0b3JhZ2VfKHN0ZDo6bW92
ZShvdGhlci5zdG9yYWdlXy52YWx1ZSkpIHsKLSAgICBvdGhlci5lcmFzZWRfID0gdHJ1ZTsKLSAg
fQotICBJbmRlc3RydWN0aWJsZSYgb3BlcmF0b3I9KEluZGVzdHJ1Y3RpYmxlJiYgb3RoZXIpIG5v
ZXhjZXB0KAotICAgICAgbm9leGNlcHQoVChzdGQ6OmRlY2x2YWw8VCYmPigpKSkpIHsKLSAgICBz
dG9yYWdlXy52YWx1ZSA9IHN0ZDo6bW92ZShvdGhlci5zdG9yYWdlXy52YWx1ZSk7Ci0gICAgb3Ro
ZXIuZXJhc2VkXyA9IHRydWU7Ci0gIH0KLQotICBUKiBnZXQoKSBub2V4Y2VwdCB7Ci0gICAgY2hl
Y2soKTsKLSAgICByZXR1cm4gJnN0b3JhZ2VfLnZhbHVlOwotICB9Ci0gIFQgY29uc3QqIGdldCgp
IGNvbnN0IG5vZXhjZXB0IHsKLSAgICBjaGVjaygpOwotICAgIHJldHVybiAmc3RvcmFnZV8udmFs
dWU7Ci0gIH0KLSAgVCYgb3BlcmF0b3IqKCkgbm9leGNlcHQgeyByZXR1cm4gKmdldCgpOyB9Ci0g
IFQgY29uc3QmIG9wZXJhdG9yKigpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuICpnZXQoKTsgfQot
ICBUKiBvcGVyYXRvci0+KCkgbm9leGNlcHQgeyByZXR1cm4gZ2V0KCk7IH0KLSAgVCBjb25zdCog
b3BlcmF0b3ItPigpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIGdldCgpOyB9Ci0KLSBwcml2YXRl
OgotICB2b2lkIGNoZWNrKCkgY29uc3Qgbm9leGNlcHQgewotICAgIGFzc2VydCghZXJhc2VkXyk7
Ci0gIH0KLQotICB1bmlvbiBTdG9yYWdlIHsKLSAgICBUIHZhbHVlOwotCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFMgPSBULCB0eXBlbmFtZSA9IGRlY2x0eXBlKFMoKSk+Ci0gICAgY29uc3RleHBy
IFN0b3JhZ2UoKSBub2V4Y2VwdChub2V4Y2VwdChUKCkpKSA6IHZhbHVlKCkge30KLQotICAgIHRl
bXBsYXRlIDwKLSAgICAgICAgdHlwZW5hbWUuLi4gQXJncywKLSAgICAgICAgdHlwZW5hbWUgPSBk
ZWNsdHlwZShUKHN0ZDo6ZGVjbHZhbDxBcmdzJiY+KCkuLi4pKT4KLSAgICBleHBsaWNpdCBjb25z
dGV4cHIgU3RvcmFnZShBcmdzJiYuLi4gYXJncykgbm9leGNlcHQoCi0gICAgICAgIG5vZXhjZXB0
KFQoc3RkOjpkZWNsdmFsPEFyZ3MmJj4oKS4uLikpKQotICAgICAgICA6IHZhbHVlKHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICAgIH5TdG9yYWdlKCkge30KLSAgfTsKLQotICBT
dG9yYWdlIHN0b3JhZ2Vfe307Ci0gIGJvb2wgZXJhc2VkX3tmYWxzZX07Ci19OwotfQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvSW5kZXhlZE1l
bVBvb2wuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L0luZGV4
ZWRNZW1Qb29sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiM2ZhNTNhMmY2MzFk
NzIzMmJjMTlhMGM1MTYzN2EwMmVkZDZjZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9s
bHkvSW5kZXhlZE1lbVBvb2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICog
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGludC5o
PgotCi0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0KLSNpbmNsdWRlIDxib29zdC9ub25jb3B5YWJs
ZS5ocHA+Ci0jaW5jbHVkZSA8Zm9sbHkvQXRvbWljU3RydWN0Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkv
UG9ydGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxmb2xseS9jb25jdXJyZW5jeS9DYWNoZUxvY2FsaXR5
Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvU3lzTW1hbi5oPgotI2luY2x1ZGUgPGZv
bGx5L3BvcnRhYmlsaXR5L1VuaXN0ZC5oPgotCi0vLyBJZ25vcmUgc2hhZG93aW5nIHdhcm5pbmdz
IHdpdGhpbiB0aGlzIGZpbGUsIHNvIGluY2x1ZGVycyBjYW4gdXNlIC1Xc2hhZG93LgotRk9MTFlf
UFVTSF9XQVJOSU5HCi1GT0xMWV9HQ0NfRElTQUJMRV9XQVJOSU5HKCItV3NoYWRvdyIpCi0KLW5h
bWVzcGFjZSBmb2xseSB7Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotdGVtcGxhdGUgPHR5cGVuYW1l
IFBvb2w+Ci1zdHJ1Y3QgSW5kZXhlZE1lbVBvb2xSZWN5Y2xlcjsKLX0KLQotdGVtcGxhdGUgPAot
ICAgIHR5cGVuYW1lIFQsCi0gICAgYm9vbCBFYWdlclJlY3ljbGVXaGVuVHJpdmlhbCA9IGZhbHNl
LAotICAgIGJvb2wgRWFnZXJSZWN5Y2xlV2hlbk5vdFRyaXZpYWwgPSB0cnVlPgotc3RydWN0IElu
ZGV4ZWRNZW1Qb29sVHJhaXRzIHsKLSAgc3RhdGljIGNvbnN0ZXhwciBib29sIGVhZ2VyUmVjeWNs
ZSgpIHsKLSAgICByZXR1cm4gc3RkOjppc190cml2aWFsPFQ+Ojp2YWx1ZSA/IEVhZ2VyUmVjeWNs
ZVdoZW5Ucml2aWFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBFYWdl
clJlY3ljbGVXaGVuTm90VHJpdmlhbDsKLSAgfQotCi0gIC8vLyBDYWxsZWQgd2hlbiB0aGUgZWxl
bWVudCBwb2ludGVkIHRvIGJ5IHB0ciBpcyBhbGxvY2F0ZWQgZm9yIHRoZQotICAvLy8gZmlyc3Qg
dGltZS4KLSAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShUKiBwdHIpIHsKLSAgICBpZiAoIWVhZ2Vy
UmVjeWNsZSgpKSB7Ci0gICAgICBuZXcgKHB0cikgVCgpOwotICAgIH0KLSAgfQotCi0gIC8vLyBD
YWxsZWQgd2hlbiB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IHB0ciBpcyBmcmVlZCBhdCB0aGUg
cG9vbAotICAvLy8gZGVzdHJ1Y3Rpb24gdGltZS4KLSAgc3RhdGljIHZvaWQgY2xlYW51cChUKiBw
dHIpIHsKLSAgICBpZiAoIWVhZ2VyUmVjeWNsZSgpKSB7Ci0gICAgICBwdHItPn5UKCk7Ci0gICAg
fQotICB9Ci0KLSAgLy8vIENhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGFsbG9jYXRlZCB3aXRo
IHRoZSBhcmd1bWVudHMgZm9yd2FyZGVkIGZyb20KLSAgLy8vIEluZGV4ZWRNZW1Qb29sOjphbGxv
Y0VsZW0uCi0gIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgotICBzdGF0aWMgdm9pZCBvbkFs
bG9jYXRlKFQqIHB0ciwgQXJncyYmLi4uIGFyZ3MpIHsKLSAgICBzdGF0aWNfYXNzZXJ0KAotICAg
ICAgICBzaXplb2YuLi4oQXJncykgPT0gMCB8fCBlYWdlclJlY3ljbGUoKSwKLSAgICAgICAgImVt
cGxhY2Utc3R5bGUgYWxsb2NhdGlvbiByZXF1aXJlcyBlYWdlciByZWN5Y2xlLCAiCi0gICAgICAg
ICJ3aGljaCBpcyBkZWZhdWx0ZWQgb25seSBmb3Igbm9uLXRyaXZpYWwgdHlwZXMiKTsKLSAgICBp
ZiAoZWFnZXJSZWN5Y2xlKCkpIHsKLSAgICAgIG5ldyAocHRyKSBUKHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLik7Ci0gICAgfQotICB9Ci0KLSAgLy8vIENhbGxlZCB3aGVuIHRoZSBlbGVtZW50
IGlzIHJlY3ljbGVkLgotICBzdGF0aWMgdm9pZCBvblJlY3ljbGUoVCogcHRyKSB7Ci0gICAgaWYg
KGVhZ2VyUmVjeWNsZSgpKSB7Ci0gICAgICBwdHItPn5UKCk7Ci0gICAgfQotICB9Ci19OwotCi0v
Ly8gSW5kZXhlZE1lbVBvb2wgdHJhaXRzIHRoYXQgaW1wbGVtZW50cyB0aGUgbGF6eSBsaWZlY3lj
bGUgc3RyYXRlZ3kuIEluIHRoaXMKLS8vLyBzdHJhdGVneSBlbGVtZW50cyBhcmUgZGVmYXVsdC1j
b25zdHJ1Y3RlZCB0aGUgZmlyc3QgdGltZSB0aGV5IGFyZSBhbGxvY2F0ZWQsCi0vLy8gYW5kIGRl
c3Ryb3llZCB3aGVuIHRoZSBwb29sIGl0c2VsZiBpcyBkZXN0cm95ZWQuCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLXVzaW5nIEluZGV4ZWRNZW1Qb29sVHJhaXRzTGF6eVJlY3ljbGUgPSBJbmRleGVk
TWVtUG9vbFRyYWl0czxULCBmYWxzZSwgZmFsc2U+OwotCi0vLy8gSW5kZXhlZE1lbVBvb2wgdHJh
aXRzIHRoYXQgaW1wbGVtZW50cyB0aGUgZWFnZXIgbGlmZWN5Y2xlIHN0cmF0ZWd5LiBJbiB0aGlz
Ci0vLy8gc3RyYXRlZ3kgZWxlbWVudHMgYXJlIGNvbnN0cnVjdGVkIHdoZW4gdGhleSBhcmUgYWxs
b2NhdGVkIGZyb20gdGhlIHBvb2wgYW5kCi0vLy8gZGVzdHJveWVkIHdoZW4gcmVjeWNsZWQuCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXVzaW5nIEluZGV4ZWRNZW1Qb29sVHJhaXRzRWFnZXJSZWN5
Y2xlID0gSW5kZXhlZE1lbVBvb2xUcmFpdHM8VCwgdHJ1ZSwgdHJ1ZT47Ci0KLS8vLyBJbnN0YW5j
ZXMgb2YgSW5kZXhlZE1lbVBvb2wgZHluYW1pY2FsbHkgYWxsb2NhdGUgYW5kIHRoZW4gcG9vbCB0
aGVpcgotLy8vIGVsZW1lbnQgdHlwZSAoVCksIHJldHVybmluZyA0LWJ5dGUgaW50ZWdlciBpbmRp
Y2VzIHRoYXQgY2FuIGJlIHBhc3NlZAotLy8vIHRvIHRoZSBwb29sJ3Mgb3BlcmF0b3JbXSBtZXRo
b2QgdG8gYWNjZXNzIG9yIG9idGFpbiBwb2ludGVycyB0byB0aGUKLS8vLyBhY3R1YWwgZWxlbWVu
dHMuICBUaGUgbWVtb3J5IGJhY2tpbmcgaXRlbXMgcmV0dXJuZWQgZnJvbSB0aGUgcG9vbAotLy8v
IHdpbGwgYWx3YXlzIGJlIHJlYWRhYmxlLCBldmVuIGlmIGl0ZW1zIGhhdmUgYmVlbiByZXR1cm5l
ZCB0byB0aGUgcG9vbC4KLS8vLyBUaGVzZSB0d28gZmVhdHVyZXMgYXJlIHVzZWZ1bCBmb3IgbG9j
ay1mcmVlIGFsZ29yaXRobXMuICBUaGUgaW5kZXhpbmcKLS8vLyBiZWhhdmlvciBtYWtlcyBpdCBl
YXN5IHRvIGJ1aWxkIHRhZ2dlZCBwb2ludGVyLWxpa2UtdGhpbmdzLCBzaW5jZQotLy8vIGEgbGFy
Z2UgbnVtYmVyIG9mIGVsZW1lbnRzIGNhbiBiZSBtYW5hZ2VkIHVzaW5nIGZld2VyIGJpdHMgdGhh
biBhCi0vLy8gZnVsbCBwb2ludGVyLiAgVGhlIGFjY2Vzcy1hZnRlci1mcmVlIGJlaGF2aW9yIG1h
a2VzIGl0IHNhZmUgdG8gcmVhZAotLy8vIGZyb20gVC1zIGV2ZW4gYWZ0ZXIgdGhleSBoYXZlIGJl
ZW4gcmVjeWNsZWQsIHNpbmNlIGl0IGlzIGd1YXJhbnRlZWQKLS8vLyB0aGF0IHRoZSBtZW1vcnkg
d29uJ3QgaGF2ZSBiZWVuIHJldHVybmVkIHRvIHRoZSBPUyBhbmQgdW5tYXBwZWQKLS8vLyAodGhl
IGFsZ29yaXRobSBtdXN0IHN0aWxsIHVzZSBhIG1lY2hhbmlzbSB0byB2YWxpZGF0ZSB0aGF0IHRo
ZSByZWFkCi0vLy8gd2FzIGNvcnJlY3QsIGJ1dCBpdCBkb2Vzbid0IGhhdmUgdG8gd29ycnkgYWJv
dXQgcGFnZSBmYXVsdHMpLCBhbmQgaWYKLS8vLyB0aGUgZWxlbWVudHMgdXNlIGludGVybmFsIHNl
cXVlbmNlIG51bWJlcnMgaXQgY2FuIGJlIGd1YXJhbnRlZWQgdGhhdAotLy8vIHRoZXJlIHdvbid0
IGJlIGFuIEFCQSBtYXRjaCBkdWUgdG8gdGhlIGVsZW1lbnQgYmVpbmcgb3ZlcndyaXR0ZW4gd2l0
aAotLy8vIGEgZGlmZmVyZW50IHR5cGUgdGhhdCBoYXMgdGhlIHNhbWUgYml0IHBhdHRlcm4uCi0v
Ly8KLS8vLyBUaGUgb2JqZWN0IGxpZmVjeWNsZSBzdHJhdGVneSBpcyBjb250cm9sbGVkIGJ5IHRo
ZSBUcmFpdHMgcGFyYW1ldGVyLgotLy8vIE9uZSBzdHJhdGVneSwgaW1wbGVtZW50ZWQgYnkgSW5k
ZXhlZE1lbVBvb2xUcmFpdHNFYWdlclJlY3ljbGUsIGlzIHRvCi0vLy8gY29uc3RydWN0IG9iamVj
dHMgd2hlbiB0aGV5IGFyZSBhbGxvY2F0ZWQgZnJvbSB0aGUgcG9vbCBhbmQgZGVzdHJveQotLy8v
IHRoZW0gd2hlbiB0aGV5IGFyZSByZWN5Y2xlZC4gIEluIHRoaXMgbW9kZSBhbGxvY0luZGV4IGFu
ZCBhbGxvY0VsZW0KLS8vLyBoYXZlIGVtcGxhY2UtbGlrZSBzZW1hbnRpY3MuICBJbiBhbm90aGVy
IHN0cmF0ZWd5LCBpbXBsZW1lbnRlZCBieQotLy8vIEluZGV4ZWRNZW1Qb29sVHJhaXRzTGF6eVJl
Y3ljbGUsIG9iamVjdHMgYXJlIGRlZmF1bHQtY29uc3RydWN0ZWQgdGhlCi0vLy8gZmlyc3QgdGlt
ZSB0aGV5IGFyZSByZW1vdmVkIGZyb20gdGhlIHBvb2wsIGFuZCBkZWxldGVkIHdoZW4gdGhlIHBv
b2wKLS8vLyBpdHNlbGYgaXMgZGVsZXRlZC4gIEJ5IGRlZmF1bHQgdGhlIGZpcnN0IG1vZGUgaXMg
dXNlZCBmb3Igbm9uLXRyaXZpYWwKLS8vLyBULCBhbmQgdGhlIHNlY29uZCBpcyB1c2VkIGZvciB0
cml2aWFsIFQuICBDbGllbnRzIGNhbiBjdXN0b21pemUgdGhlCi0vLy8gb2JqZWN0IGxpZmVjeWNs
ZSBieSBwcm92aWRpbmcgdGhlaXIgb3duIFRyYWl0cyBpbXBsZW1lbnRhdGlvbi4KLS8vLyBTZWUg
SW5kZXhlZE1lbVBvb2xUcmFpdHMgZm9yIGEgVHJhaXRzIGV4YW1wbGUuCi0vLy8KLS8vLyBJTVBP
UlRBTlQ6IFNwYWNlIGZvciBleHRyYSBlbGVtZW50cyBpcyBhbGxvY2F0ZWQgdG8gYWNjb3VudCBm
b3IgdGhvc2UKLS8vLyB0aGF0IGFyZSBpbmFjY2Vzc2libGUgYmVjYXVzZSB0aGV5IGFyZSBpbiBv
dGhlciBsb2NhbCBsaXN0cywgc28gdGhlCi0vLy8gYWN0dWFsIG51bWJlciBvZiBpdGVtcyB0aGF0
IGNhbiBiZSBhbGxvY2F0ZWQgcmFuZ2VzIGZyb20gY2FwYWNpdHkgdG8KLS8vLyBjYXBhY2l0eSAr
IChOdW1Mb2NhbExpc3RzXy0xKSpMb2NhbExpc3RMaW1pdF8uICBUaGlzIGlzIGltcG9ydGFudCBp
ZgotLy8vIHlvdSBhcmUgdHJ5aW5nIHRvIG1heGltaXplIHRoZSBjYXBhY2l0eSBvZiB0aGUgcG9v
bCB3aGlsZSBjb25zdHJhaW5pbmcKLS8vLyB0aGUgYml0IHNpemUgb2YgdGhlIHJlc3VsdGluZyBw
b2ludGVycywgYmVjYXVzZSB0aGUgcG9pbnRlcnMgd2lsbAotLy8vIGFjdHVhbGx5IHJhbmdlIHVw
IHRvIHRoZSBib29zdGVkIGNhcGFjaXR5LiAgU2VlIG1heEluZGV4Rm9yQ2FwYWNpdHkKLS8vLyBh
bmQgY2FwYWNpdHlGb3JNYXhJbmRleC4KLS8vLwotLy8vIFRvIGF2b2lkIGNvbnRlbnRpb24sIE51
bUxvY2FsTGlzdHNfIGZyZWUgbGlzdHMgb2YgbGltaXRlZCAobGVzcyB0aGFuCi0vLy8gb3IgZXF1
YWwgdG8gTG9jYWxMaXN0TGltaXRfKSBzaXplIGFyZSBtYWludGFpbmVkLCBhbmQgZWFjaCB0aHJl
YWQKLS8vLyByZXRyaWV2ZXMgYW5kIHJldHVybnMgZW50cmllcyBmcm9tIGl0cyBhc3NvY2lhdGVk
IGxvY2FsIGxpc3QuICBJZiB0aGUKLS8vLyBsb2NhbCBsaXN0IGJlY29tZXMgdG9vIGxhcmdlIHRo
ZW4gZWxlbWVudHMgYXJlIHBsYWNlZCBpbiBidWxrIGluIGEKLS8vLyBnbG9iYWwgZnJlZSBsaXN0
LiAgVGhpcyBhbGxvd3MgaXRlbXMgdG8gYmUgZWZmaWNpZW50bHkgcmVjaXJjdWxhdGVkCi0vLy8g
ZnJvbSBjb25zdW1lcnMgdG8gcHJvZHVjZXJzLiAgQWNjZXNzU3ByZWFkZXIgaXMgdXNlZCB0byBh
Y2Nlc3MgdGhlCi0vLy8gbG9jYWwgbGlzdHMsIHNvIHRoZXJlIGlzIG5vIHBlcmZvcm1hbmNlIGFk
dmFudGFnZSB0byBoYXZpbmcgbW9yZQotLy8vIGxvY2FsIGxpc3RzIHRoYW4gTDEgY2FjaGVzLgot
Ly8vCi0vLy8gVGhlIHBvb2wgbW1hcC1zIHRoZSBlbnRpcmUgbmVjZXNzYXJ5IGFkZHJlc3Mgc3Bh
Y2Ugd2hlbiB0aGUgcG9vbCBpcwotLy8vIGNvbnN0cnVjdGVkLCBidXQgZGVsYXlzIGVsZW1lbnQg
Y29uc3RydWN0aW9uLiAgVGhpcyBtZWFucyB0aGF0IG9ubHkKLS8vLyBlbGVtZW50cyB0aGF0IGFy
ZSBhY3R1YWxseSByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGdldCBwYWdlZCBpbnRvIHRoZQotLy8v
IHByb2Nlc3MncyByZXNpZGVudCBzZXQgKFJTUykuCi10ZW1wbGF0ZSA8Ci0gICAgdHlwZW5hbWUg
VCwKLSAgICB1aW50MzJfdCBOdW1Mb2NhbExpc3RzXyA9IDMyLAotICAgIHVpbnQzMl90IExvY2Fs
TGlzdExpbWl0XyA9IDIwMCwKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWU+IGNsYXNzIEF0b20gPSBz
dGQ6OmF0b21pYywKLSAgICB0eXBlbmFtZSBUcmFpdHMgPSBJbmRleGVkTWVtUG9vbFRyYWl0czxU
Pj4KLXN0cnVjdCBJbmRleGVkTWVtUG9vbCA6IGJvb3N0Ojpub25jb3B5YWJsZSB7Ci0gIHR5cGVk
ZWYgVCB2YWx1ZV90eXBlOwotCi0gIHR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPFQsIGRldGFpbDo6
SW5kZXhlZE1lbVBvb2xSZWN5Y2xlcjxJbmRleGVkTWVtUG9vbD4+Ci0gICAgICBVbmlxdWVQdHI7
Ci0KLSAgc3RhdGljX2Fzc2VydChMb2NhbExpc3RMaW1pdF8gPD0gMjU1LCAiTG9jYWxMaXN0TGlt
aXQgbXVzdCBmaXQgaW4gOCBiaXRzIik7Ci0gIGVudW0gewotICAgIE51bUxvY2FsTGlzdHMgPSBO
dW1Mb2NhbExpc3RzXywKLSAgICBMb2NhbExpc3RMaW1pdCA9IExvY2FsTGlzdExpbWl0XwotICB9
OwotCi0gIC8vIHRoZXNlIGFyZSBwdWJsaWMgYmVjYXVzZSBjbGllbnRzIG1heSBuZWVkIHRvIHJl
YXNvbiBhYm91dCB0aGUgbnVtYmVyCi0gIC8vIG9mIGJpdHMgcmVxdWlyZWQgdG8gaG9sZCBpbmRp
Y2VzIGZyb20gYSBwb29sLCBnaXZlbiBpdHMgY2FwYWNpdHkKLQotICBzdGF0aWMgY29uc3RleHBy
IHVpbnQzMl90IG1heEluZGV4Rm9yQ2FwYWNpdHkodWludDMyX3QgY2FwYWNpdHkpIHsKLSAgICAv
LyBpbmRleCBvZiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkgaXMgcmVzZXJ2
ZWQgZm9yIGlzQWxsb2NhdGVkCi0gICAgLy8gdHJhY2tpbmcKLSAgICByZXR1cm4gdWludDMyX3Qo
c3RkOjptaW4oCi0gICAgICAgIHVpbnQ2NF90KGNhcGFjaXR5KSArIChOdW1Mb2NhbExpc3RzIC0g
MSkgKiBMb2NhbExpc3RMaW1pdCwKLSAgICAgICAgdWludDY0X3Qoc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpIC0gMSkpKTsKLSAgfQotCi0gIHN0YXRpYyBjb25zdGV4cHIgdWlu
dDMyX3QgY2FwYWNpdHlGb3JNYXhJbmRleCh1aW50MzJfdCBtYXhJbmRleCkgewotICAgIHJldHVy
biBtYXhJbmRleCAtIChOdW1Mb2NhbExpc3RzIC0gMSkgKiBMb2NhbExpc3RMaW1pdDsKLSAgfQot
Ci0KLSAgLy8vIENvbnN0cnVjdHMgYSBwb29sIHRoYXQgY2FuIGFsbG9jYXRlIGF0IGxlYXN0IF9j
YXBhY2l0eV8gZWxlbWVudHMsCi0gIC8vLyBldmVuIGlmIGFsbCB0aGUgbG9jYWwgbGlzdHMgYXJl
IGZ1bGwKLSAgZXhwbGljaXQgSW5kZXhlZE1lbVBvb2wodWludDMyX3QgY2FwYWNpdHkpCi0gICAg
OiBhY3R1YWxDYXBhY2l0eV8obWF4SW5kZXhGb3JDYXBhY2l0eShjYXBhY2l0eSkpCi0gICAgLCBz
aXplXygwKQotICAgICwgZ2xvYmFsSGVhZF8oVGFnZ2VkUHRye30pCi0gIHsKLSAgICBjb25zdCBz
aXplX3QgbmVlZGVkID0gc2l6ZW9mKFNsb3QpICogKGFjdHVhbENhcGFjaXR5XyArIDEpOwotICAg
IHNpemVfdCBwYWdlc2l6ZSA9IHNpemVfdChzeXNjb25mKF9TQ19QQUdFU0laRSkpOwotICAgIG1t
YXBMZW5ndGhfID0gKChuZWVkZWQgLSAxKSAmIH4ocGFnZXNpemUgLSAxKSkgKyBwYWdlc2l6ZTsK
LSAgICBhc3NlcnQobmVlZGVkIDw9IG1tYXBMZW5ndGhfICYmIG1tYXBMZW5ndGhfIDwgbmVlZGVk
ICsgcGFnZXNpemUpOwotICAgIGFzc2VydCgobW1hcExlbmd0aF8gJSBwYWdlc2l6ZSkgPT0gMCk7
Ci0KLSAgICBzbG90c18gPSBzdGF0aWNfY2FzdDxTbG90Kj4obW1hcChudWxscHRyLCBtbWFwTGVu
Z3RoXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQ
Uk9UX1dSSVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9QUklW
QVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApKTsKLSAgICBpZiAoc2xvdHNfID09IE1BUF9GQUlM
RUQpIHsKLSAgICAgIGFzc2VydChlcnJubyA9PSBFTk9NRU0pOwotICAgICAgdGhyb3cgc3RkOjpi
YWRfYWxsb2MoKTsKLSAgICB9Ci0gIH0KLQotICAvLy8gRGVzdHJveXMgYWxsIG9mIHRoZSBjb250
YWluZWQgZWxlbWVudHMKLSAgfkluZGV4ZWRNZW1Qb29sKCkgewotICAgIGZvciAodWludDMyX3Qg
aSA9IG1heEFsbG9jYXRlZEluZGV4KCk7IGkgPiAwOyAtLWkpIHsKLSAgICAgIFRyYWl0czo6Y2xl
YW51cCgmc2xvdHNfW2ldLmVsZW0pOwotICAgIH0KLSAgICBtdW5tYXAoc2xvdHNfLCBtbWFwTGVu
Z3RoXyk7Ci0gIH0KLQotICAvLy8gUmV0dXJucyBhIGxvd2VyIGJvdW5kIG9uIHRoZSBudW1iZXIg
b2YgZWxlbWVudHMgdGhhdCBtYXkgYmUKLSAgLy8vIHNpbXVsdGFuZW91c2x5IGFsbG9jYXRlZCBh
bmQgbm90IHlldCByZWN5Y2xlZC4gIEJlY2F1c2Ugb2YgdGhlCi0gIC8vLyBsb2NhbCBsaXN0cyBp
dCBpcyBwb3NzaWJsZSB0aGF0IG1vcmUgZWxlbWVudHMgdGhhbiB0aGlzIGFyZSByZXR1cm5lZAot
ICAvLy8gc3VjY2Vzc2Z1bGx5Ci0gIHVpbnQzMl90IGNhcGFjaXR5KCkgewotICAgIHJldHVybiBj
YXBhY2l0eUZvck1heEluZGV4KGFjdHVhbENhcGFjaXR5Xyk7Ci0gIH0KLQotICAvLy8gUmV0dXJu
cyB0aGUgbWF4aW11bSBpbmRleCBvZiBlbGVtZW50cyBldmVyIGFsbG9jYXRlZCBpbiB0aGlzIHBv
b2wKLSAgLy8vIGluY2x1ZGluZyBlbGVtZW50cyB0aGF0IGhhdmUgYmVlbiByZWN5Y2xlZC4KLSAg
dWludDMyX3QgbWF4QWxsb2NhdGVkSW5kZXgoKSBjb25zdCB7Ci0gICAgLy8gVGFrZSB0aGUgbWlu
aW11bSBzaW5jZSBpdCBpcyBwb3NzaWJsZSB0aGF0IHNpemVfID4gYWN0dWFsQ2FwYWNpdHlfLgot
ICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29uY3VycmVudCBy
ZXF1ZXN0cwotICAgIC8vIHdoZW4gc2l6ZV8gPT0gYWN0dWFsQ2FwYWNpdHlfIC0gMS4KLSAgICBy
ZXR1cm4gc3RkOjptaW4odWludDMyX3Qoc2l6ZV8pLCB1aW50MzJfdChhY3R1YWxDYXBhY2l0eV8p
KTsKLSAgfQotCi0gIC8vLyBGaW5kcyBhIHNsb3Qgd2l0aCBhIG5vbi16ZXJvIGluZGV4LCBlbXBs
YWNlcyBhIFQgdGhlcmUgaWYgd2UncmUKLSAgLy8vIHVzaW5nIHRoZSBlYWdlciByZWN5Y2xlIGxp
ZmVjeWNsZSBtb2RlLCBhbmQgcmV0dXJucyB0aGUgaW5kZXgsCi0gIC8vLyBvciByZXR1cm5zIDAg
aWYgbm8gZWxlbWVudHMgYXJlIGF2YWlsYWJsZS4gIFBhc3NlcyBhIHBvaW50ZXIgdG8KLSAgLy8v
IHRoZSBlbGVtZW50IHRvIFRyYWl0czo6b25BbGxvY2F0ZSBiZWZvcmUgdGhlIHNsb3QgaXMgbWFy
a2VkIGFzCi0gIC8vLyBhbGxvY2F0ZWQuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgot
ICB1aW50MzJfdCBhbGxvY0luZGV4KEFyZ3MmJi4uLiBhcmdzKSB7Ci0gICAgYXV0byBpZHggPSBs
b2NhbFBvcChsb2NhbEhlYWQoKSk7Ci0gICAgaWYgKGlkeCAhPSAwKSB7Ci0gICAgICBTbG90JiBz
ID0gc2xvdChpZHgpOwotICAgICAgVHJhaXRzOjpvbkFsbG9jYXRlKCZzLmVsZW0sIHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgICBtYXJrQWxsb2NhdGVkKHMpOwotICAgIH0KLSAg
ICByZXR1cm4gaWR4OwotICB9Ci0KLSAgLy8vIElmIGFuIGVsZW1lbnQgaXMgYXZhaWxhYmxlLCBy
ZXR1cm5zIGEgc3RkOjp1bmlxdWVfcHRyIHRvIGl0IHRoYXQgd2lsbAotICAvLy8gcmVjeWNsZSB0
aGUgZWxlbWVudCB0byB0aGUgcG9vbCB3aGVuIGl0IGlzIHJlY2xhaW1lZCwgb3RoZXJ3aXNlIHJl
dHVybnMKLSAgLy8vIGEgbnVsbCAoZmFsc3kpIHN0ZDo6dW5pcXVlX3B0ci4gIFBhc3NlcyBhIHBv
aW50ZXIgdG8gdGhlIGVsZW1lbnQgdG8KLSAgLy8vIFRyYWl0czo6b25BbGxvY2F0ZSBiZWZvcmUg
dGhlIHNsb3QgaXMgbWFya2VkIGFzIGFsbG9jYXRlZC4KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIC4u
LkFyZ3M+Ci0gIFVuaXF1ZVB0ciBhbGxvY0VsZW0oQXJncyYmLi4uIGFyZ3MpIHsKLSAgICBhdXRv
IGlkeCA9IGFsbG9jSW5kZXgoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICBUKiBw
dHIgPSBpZHggPT0gMCA/IG51bGxwdHIgOiAmc2xvdChpZHgpLmVsZW07Ci0gICAgcmV0dXJuIFVu
aXF1ZVB0cihwdHIsIHR5cGVuYW1lIFVuaXF1ZVB0cjo6ZGVsZXRlcl90eXBlKHRoaXMpKTsKLSAg
fQotCi0gIC8vLyBHaXZlcyB1cCBvd25lcnNoaXAgcHJldmlvdXNseSBncmFudGVkIGJ5IGFsbG9j
KCkKLSAgdm9pZCByZWN5Y2xlSW5kZXgodWludDMyX3QgaWR4KSB7Ci0gICAgYXNzZXJ0KGlzQWxs
b2NhdGVkKGlkeCkpOwotICAgIGxvY2FsUHVzaChsb2NhbEhlYWQoKSwgaWR4KTsKLSAgfQotCi0g
IC8vLyBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHBvb2xlZCBlbGVtZW50IHJlZmVyZW5jZWQgYnkg
aWR4Ci0gIFQmIG9wZXJhdG9yW10odWludDMyX3QgaWR4KSB7Ci0gICAgcmV0dXJuIHNsb3QoaWR4
KS5lbGVtOwotICB9Ci0KLSAgLy8vIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgcG9vbGVkIGVsZW1l
bnQgcmVmZXJlbmNlZCBieSBpZHgKLSAgY29uc3QgVCYgb3BlcmF0b3JbXSh1aW50MzJfdCBpZHgp
IGNvbnN0IHsKLSAgICByZXR1cm4gc2xvdChpZHgpLmVsZW07Ci0gIH0KLQotICAvLy8gSWYgZWxl
bSA9PSAmcG9vbFtpZHhdLCB0aGVuIHBvb2wubG9jYXRlRWxlbShlbGVtKSA9PSBpZHguICBBbHNv
LAotICAvLy8gcG9vbC5sb2NhdGVFbGVtKG51bGxwdHIpID09IDAKLSAgdWludDMyX3QgbG9jYXRl
RWxlbShjb25zdCBUKiBlbGVtKSBjb25zdCB7Ci0gICAgaWYgKCFlbGVtKSB7Ci0gICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc3RhbmRhcmRfbGF5b3V0
PFNsb3Q+Ojp2YWx1ZSwgIm9mZnNldG9mIG5lZWRzIFBPRCIpOwotCi0gICAgYXV0byBzbG90ID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBTbG90Kj4oCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KGVsZW0pIC0gb2Zmc2V0b2YoU2xvdCwgZWxlbSkpOwotICAgIGF1dG8gcnYg
PSB1aW50MzJfdChzbG90IC0gc2xvdHNfKTsKLQotICAgIC8vIHRoaXMgYXNzZXJ0IGFsc28gdGVz
dHMgdGhhdCBydiBpcyBpbiByYW5nZQotICAgIGFzc2VydChlbGVtID09ICYoKnRoaXMpW3J2XSk7
Ci0gICAgcmV0dXJuIHJ2OwotICB9Ci0KLSAgLy8vIFJldHVybnMgdHJ1ZSBpZmYgaWR4IGhhcyBi
ZWVuIGFsbG9jKCllZCBhbmQgbm90IHJlY3ljbGVJbmRleCgpZWQKLSAgYm9vbCBpc0FsbG9jYXRl
ZCh1aW50MzJfdCBpZHgpIGNvbnN0IHsKLSAgICByZXR1cm4gc2xvdChpZHgpLmxvY2FsTmV4dC5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpID09IHVpbnQzMl90KC0xKTsKLSAgfQotCi0K
LSBwcml2YXRlOgotICAvLy8vLy8vLy8vLy8vIHR5cGVzCi0KLSAgc3RydWN0IFNsb3QgewotICAg
IFQgZWxlbTsKLSAgICBBdG9tPHVpbnQzMl90PiBsb2NhbE5leHQ7Ci0gICAgQXRvbTx1aW50MzJf
dD4gZ2xvYmFsTmV4dDsKLQotICAgIFNsb3QoKSA6IGxvY2FsTmV4dHt9LCBnbG9iYWxOZXh0e30g
e30KLSAgfTsKLQotICBzdHJ1Y3QgVGFnZ2VkUHRyIHsKLSAgICB1aW50MzJfdCBpZHg7Ci0KLSAg
ICAvLyBzaXplIGlzIGJvdHRvbSA4IGJpdHMsIHRhZyBpbiB0b3AgMjQuICBnKysncyBjb2RlIGdl
bmVyYXRpb24gZm9yCi0gICAgLy8gYml0ZmllbGRzIHNlZW1zIHRvIGRlcGVuZCBvbiB0aGUgcGhh
c2Ugb2YgdGhlIG1vb24sIHBsdXMgd2UgY2FuCi0gICAgLy8gZG8gYmV0dGVyIGJlY2F1c2Ugd2Ug
Y2FuIHJlbHkgb24gb3RoZXIgY2hlY2tzIHRvIGF2b2lkIG1hc2tpbmcKLSAgICB1aW50MzJfdCB0
YWdBbmRTaXplOwotCi0gICAgZW51bSA6IHVpbnQzMl90IHsKLSAgICAgICAgU2l6ZUJpdHMgPSA4
LAotICAgICAgICBTaXplTWFzayA9ICgxVSA8PCBTaXplQml0cykgLSAxLAotICAgICAgICBUYWdJ
bmNyID0gMVUgPDwgU2l6ZUJpdHMsCi0gICAgfTsKLQotICAgIHVpbnQzMl90IHNpemUoKSBjb25z
dCB7Ci0gICAgICByZXR1cm4gdGFnQW5kU2l6ZSAmIFNpemVNYXNrOwotICAgIH0KLQotICAgIFRh
Z2dlZFB0ciB3aXRoU2l6ZSh1aW50MzJfdCByZXBsKSBjb25zdCB7Ci0gICAgICBhc3NlcnQocmVw
bCA8PSBMb2NhbExpc3RMaW1pdCk7Ci0gICAgICByZXR1cm4gVGFnZ2VkUHRyeyBpZHgsICh0YWdB
bmRTaXplICYgflNpemVNYXNrKSB8IHJlcGwgfTsKLSAgICB9Ci0KLSAgICBUYWdnZWRQdHIgd2l0
aFNpemVJbmNyKCkgY29uc3QgewotICAgICAgYXNzZXJ0KHNpemUoKSA8IExvY2FsTGlzdExpbWl0
KTsKLSAgICAgIHJldHVybiBUYWdnZWRQdHJ7IGlkeCwgdGFnQW5kU2l6ZSArIDEgfTsKLSAgICB9
Ci0KLSAgICBUYWdnZWRQdHIgd2l0aFNpemVEZWNyKCkgY29uc3QgewotICAgICAgYXNzZXJ0KHNp
emUoKSA+IDApOwotICAgICAgcmV0dXJuIFRhZ2dlZFB0cnsgaWR4LCB0YWdBbmRTaXplIC0gMSB9
OwotICAgIH0KLQotICAgIFRhZ2dlZFB0ciB3aXRoSWR4KHVpbnQzMl90IHJlcGwpIGNvbnN0IHsK
LSAgICAgIHJldHVybiBUYWdnZWRQdHJ7IHJlcGwsIHRhZ0FuZFNpemUgKyBUYWdJbmNyIH07Ci0g
ICAgfQotCi0gICAgVGFnZ2VkUHRyIHdpdGhFbXB0eSgpIGNvbnN0IHsKLSAgICAgIHJldHVybiB3
aXRoSWR4KDApLndpdGhTaXplKDApOwotICAgIH0KLSAgfTsKLQotICBzdHJ1Y3QgRk9MTFlfQUxJ
R05fVE9fQVZPSURfRkFMU0VfU0hBUklORyBMb2NhbExpc3QgewotICAgIEF0b21pY1N0cnVjdDxU
YWdnZWRQdHIsQXRvbT4gaGVhZDsKLQotICAgIExvY2FsTGlzdCgpIDogaGVhZChUYWdnZWRQdHJ7
fSkge30KLSAgfTsKLQotICAvLy8vLy8vLy8vIGZpZWxkcwotCi0gIC8vLyB0aGUgbnVtYmVyIG9m
IGJ5dGVzIGFsbG9jYXRlZCBmcm9tIG1tYXAsIHdoaWNoIGlzIGEgbXVsdGlwbGUgb2YKLSAgLy8v
IHRoZSBwYWdlIHNpemUgb2YgdGhlIG1hY2hpbmUKLSAgc2l6ZV90IG1tYXBMZW5ndGhfOwotCi0g
IC8vLyB0aGUgYWN0dWFsIG51bWJlciBvZiBzbG90cyB0aGF0IHdlIHdpbGwgYWxsb2NhdGUsIHRv
IGd1YXJhbnRlZQotICAvLy8gdGhhdCB3ZSB3aWxsIHNhdGlzZnkgdGhlIGNhcGFjaXR5IHJlcXVl
c3RlZCBhdCBjb25zdHJ1Y3Rpb24gdGltZS4KLSAgLy8vIFRoZXkgd2lsbCBiZSBudW1iZXJlZCAx
Li5hY3R1YWxDYXBhY2l0eV8gKG5vdGUgdGhlIDEtYmFzZWQgY291bnRpbmcpLAotICAvLy8gYW5k
IG9jY3VweSBzbG90c19bMS4uYWN0dWFsQ2FwYWNpdHlfXS4KLSAgdWludDMyX3QgYWN0dWFsQ2Fw
YWNpdHlfOwotCi0gIC8vLyB0aGlzIHJlY29yZHMgdGhlIG51bWJlciBvZiBzbG90cyB0aGF0IGhh
dmUgYWN0dWFsbHkgYmVlbiBjb25zdHJ1Y3RlZC4KLSAgLy8vIFRvIGFsbG93IHVzZSBvZiBhdG9t
aWMgKysgaW5zdGVhZCBvZiBDQVMsIHdlIGxldCB0aGlzIG92ZXJmbG93LgotICAvLy8gVGhlIGFj
dHVhbCBudW1iZXIgb2YgY29uc3RydWN0ZWQgZWxlbWVudHMgaXMgbWluKGFjdHVhbENhcGFjaXR5
XywKLSAgLy8vIHNpemVfKQotICBBdG9tPHVpbnQzMl90PiBzaXplXzsKLQotICAvLy8gcmF3IHN0
b3JhZ2UsIG9ubHkgMS4ubWluKHNpemVfLGFjdHVhbENhcGFjaXR5XykgKGluY2x1c2l2ZSkgYXJl
Ci0gIC8vLyBhY3R1YWxseSBjb25zdHJ1Y3RlZC4gIE5vdGUgdGhhdCBzbG90c19bMF0gaXMgbm90
IGNvbnN0cnVjdGVkIG9yIHVzZWQKLSAgRk9MTFlfQUxJR05fVE9fQVZPSURfRkFMU0VfU0hBUklO
RyBTbG90KiBzbG90c187Ci0KLSAgLy8vIHVzZSBBY2Nlc3NTcHJlYWRlciB0byBmaW5kIHlvdXIg
bGlzdC4gIFdlIHVzZSBzdHJpcGVzIGluc3RlYWQgb2YKLSAgLy8vIHRocmVhZC1sb2NhbCB0byBh
dm9pZCB0aGUgbmVlZCB0byBncm93IG9yIHNocmluayBvbiB0aHJlYWQgc3RhcnQKLSAgLy8vIG9y
IGpvaW4uICAgVGhlc2UgYXJlIGhlYWRzIG9mIGxpc3RzIGNoYWluZWQgd2l0aCBsb2NhbE5leHQK
LSAgTG9jYWxMaXN0IGxvY2FsX1tOdW1Mb2NhbExpc3RzXTsKLQotICAvLy8gdGhpcyBpcyB0aGUg
aGVhZCBvZiBhIGxpc3Qgb2Ygbm9kZSBjaGFpbmVkIGJ5IGdsb2JhbE5leHQsIHRoYXQgYXJlCi0g
IC8vLyB0aGVtc2VsdmVzIGVhY2ggdGhlIGhlYWQgb2YgYSBsaXN0IGNoYWluZWQgYnkgbG9jYWxO
ZXh0Ci0gIEZPTExZX0FMSUdOX1RPX0FWT0lEX0ZBTFNFX1NIQVJJTkcgQXRvbWljU3RydWN0PFRh
Z2dlZFB0cixBdG9tPiBnbG9iYWxIZWFkXzsKLQotICAvLy8vLy8vLy8vLy8vIHByaXZhdGUgbWV0
aG9kcwotCi0gIHVpbnQzMl90IHNsb3RJbmRleCh1aW50MzJfdCBpZHgpIGNvbnN0IHsKLSAgICBh
c3NlcnQoMCA8IGlkeCAmJgotICAgICAgICAgICBpZHggPD0gYWN0dWFsQ2FwYWNpdHlfICYmCi0g
ICAgICAgICAgIGlkeCA8PSBzaXplXy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKTsK
LSAgICByZXR1cm4gaWR4OwotICB9Ci0KLSAgU2xvdCYgc2xvdCh1aW50MzJfdCBpZHgpIHsKLSAg
ICByZXR1cm4gc2xvdHNfW3Nsb3RJbmRleChpZHgpXTsKLSAgfQotCi0gIGNvbnN0IFNsb3QmIHNs
b3QodWludDMyX3QgaWR4KSBjb25zdCB7Ci0gICAgcmV0dXJuIHNsb3RzX1tzbG90SW5kZXgoaWR4
KV07Ci0gIH0KLQotICAvLyBsb2NhbEhlYWQgcmVmZXJlbmNlcyBhIGZ1bGwgbGlzdCBjaGFpbmVk
IGJ5IGxvY2FsTmV4dC4gIHMgc2hvdWxkCi0gIC8vIHJlZmVyZW5jZSBzbG90KGxvY2FsSGVhZCks
IGl0IGlzIHBhc3NlZCBhcyBhIG1pY3JvLW9wdGltaXphdGlvbgotICB2b2lkIGdsb2JhbFB1c2go
U2xvdCYgcywgdWludDMyX3QgbG9jYWxIZWFkKSB7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
IFRhZ2dlZFB0ciBnaCA9IGdsb2JhbEhlYWRfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWly
ZSk7Ci0gICAgICBzLmdsb2JhbE5leHQuc3RvcmUoZ2guaWR4LCBzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxheGVkKTsKLSAgICAgIGlmIChnbG9iYWxIZWFkXy5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhn
aCwgZ2gud2l0aElkeChsb2NhbEhlYWQpKSkgewotICAgICAgICAvLyBzdWNjZXNzCi0gICAgICAg
IHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBpZHggcmVmZXJlbmNlcyBhIHNp
bmdsZSBub2RlCi0gIHZvaWQgbG9jYWxQdXNoKEF0b21pY1N0cnVjdDxUYWdnZWRQdHIsQXRvbT4m
IGhlYWQsIHVpbnQzMl90IGlkeCkgewotICAgIFNsb3QmIHMgPSBzbG90KGlkeCk7Ci0gICAgVGFn
Z2VkUHRyIGggPSBoZWFkLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7Ci0gICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgIHMubG9jYWxOZXh0LnN0b3JlKGguaWR4LCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxlYXNlKTsKLSAgICAgIFRyYWl0czo6b25SZWN5Y2xlKCZzbG90KGlkeCkuZWxlbSk7
Ci0KLSAgICAgIGlmIChoLnNpemUoKSA9PSBMb2NhbExpc3RMaW1pdCkgewotICAgICAgICAvLyBw
dXNoIHdpbGwgb3ZlcmZsb3cgbG9jYWwgbGlzdCwgc3RlYWwgaXQgaW5zdGVhZAotICAgICAgICBp
ZiAoaGVhZC5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhoLCBoLndpdGhFbXB0eSgpKSkgewotICAg
ICAgICAgIC8vIHN0ZWFsIHdhcyBzdWNjZXNzZnVsLCBwdXQgZXZlcnl0aGluZyBpbiB0aGUgZ2xv
YmFsIGxpc3QKLSAgICAgICAgICBnbG9iYWxQdXNoKHMsIGlkeCk7Ci0gICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBsb2NhbCBsaXN0IGhhcyBz
cGFjZQotICAgICAgICBpZiAoaGVhZC5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhoLCBoLndpdGhJ
ZHgoaWR4KS53aXRoU2l6ZUluY3IoKSkpIHsKLSAgICAgICAgICAvLyBzdWNjZXNzCi0gICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBoIHdhcyB1cGRhdGVkIGJ5
IGZhaWxpbmcgQ0FTCi0gICAgfQotICB9Ci0KLSAgLy8gcmV0dXJucyAwIGlmIGVtcHR5Ci0gIHVp
bnQzMl90IGdsb2JhbFBvcCgpIHsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgVGFnZ2VkUHRy
IGdoID0gZ2xvYmFsSGVhZF8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKLSAgICAg
IGlmIChnaC5pZHggPT0gMCB8fAotICAgICAgICAgIGdsb2JhbEhlYWRfLmNvbXBhcmVfZXhjaGFu
Z2Vfc3Ryb25nKAotICAgICAgICAgICAgICBnaCwKLSAgICAgICAgICAgICAgZ2gud2l0aElkeCgK
LSAgICAgICAgICAgICAgICAgIHNsb3QoZ2guaWR4KS5nbG9iYWxOZXh0LmxvYWQoc3RkOjptZW1v
cnlfb3JkZXJfcmVsYXhlZCkpKSkgewotICAgICAgICAvLyBnbG9iYWwgbGlzdCBpcyBlbXB0eSwg
b3IgcG9wIHdhcyBzdWNjZXNzZnVsCi0gICAgICAgIHJldHVybiBnaC5pZHg7Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0KLSAgLy8gcmV0dXJucyAwIGlmIGFsbG9jYXRpb24gZmFpbGVkCi0gIHVpbnQz
Ml90IGxvY2FsUG9wKEF0b21pY1N0cnVjdDxUYWdnZWRQdHIsQXRvbT4mIGhlYWQpIHsKLSAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgVGFnZ2VkUHRyIGggPSBoZWFkLmxvYWQoc3RkOjptZW1vcnlf
b3JkZXJfYWNxdWlyZSk7Ci0gICAgICBpZiAoaC5pZHggIT0gMCkgewotICAgICAgICAvLyBsb2Nh
bCBsaXN0IGlzIG5vbi1lbXB0eSwgdHJ5IHRvIHBvcAotICAgICAgICBTbG90JiBzID0gc2xvdCho
LmlkeCk7Ci0gICAgICAgIGF1dG8gbmV4dCA9IHMubG9jYWxOZXh0LmxvYWQoc3RkOjptZW1vcnlf
b3JkZXJfcmVsYXhlZCk7Ci0gICAgICAgIGlmIChoZWFkLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25n
KGgsIGgud2l0aElkeChuZXh0KS53aXRoU2l6ZURlY3IoKSkpIHsKLSAgICAgICAgICAvLyBzdWNj
ZXNzCi0gICAgICAgICAgcmV0dXJuIGguaWR4OwotICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVl
OwotICAgICAgfQotCi0gICAgICB1aW50MzJfdCBpZHggPSBnbG9iYWxQb3AoKTsKLSAgICAgIGlm
IChpZHggPT0gMCkgewotICAgICAgICAvLyBnbG9iYWwgbGlzdCBpcyBlbXB0eSwgYWxsb2NhdGUg
YW5kIGNvbnN0cnVjdCBuZXcgc2xvdAotICAgICAgICBpZiAoc2l6ZV8ubG9hZChzdGQ6Om1lbW9y
eV9vcmRlcl9yZWxheGVkKSA+PSBhY3R1YWxDYXBhY2l0eV8gfHwKLSAgICAgICAgICAgIChpZHgg
PSArK3NpemVfKSA+IGFjdHVhbENhcGFjaXR5XykgewotICAgICAgICAgIC8vIGFsbG9jYXRpb24g
ZmFpbGVkCi0gICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgVHJhaXRzOjpp
bml0aWFsaXplKCZzbG90KGlkeCkuZWxlbSk7Ci0gICAgICAgIHJldHVybiBpZHg7Ci0gICAgICB9
Ci0KLSAgICAgIFNsb3QmIHMgPSBzbG90KGlkeCk7Ci0gICAgICBhdXRvIG5leHQgPSBzLmxvY2Fs
TmV4dC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAgICAgaWYgKGhlYWQuY29t
cGFyZV9leGNoYW5nZV9zdHJvbmcoCi0gICAgICAgICAgICAgIGgsIGgud2l0aElkeChuZXh0KS53
aXRoU2l6ZShMb2NhbExpc3RMaW1pdCkpKSB7Ci0gICAgICAgIC8vIGdsb2JhbCBsaXN0IG1vdmVk
IHRvIGxvY2FsIGxpc3QsIGtlZXAgaGVhZCBmb3IgdXMKLSAgICAgICAgcmV0dXJuIGlkeDsKLSAg
ICAgIH0KLSAgICAgIC8vIGxvY2FsIGJ1bGsgcHVzaCBmYWlsZWQsIHJldHVybiBpZHggdG8gdGhl
IGdsb2JhbCBsaXN0IGFuZCB0cnkgYWdhaW4KLSAgICAgIGdsb2JhbFB1c2gocywgaWR4KTsKLSAg
ICB9Ci0gIH0KLQotICBBdG9taWNTdHJ1Y3Q8VGFnZ2VkUHRyLEF0b20+JiBsb2NhbEhlYWQoKSB7
Ci0gICAgYXV0byBzdHJpcGUgPSBBY2Nlc3NTcHJlYWRlcjxBdG9tPjo6Y3VycmVudChOdW1Mb2Nh
bExpc3RzKTsKLSAgICByZXR1cm4gbG9jYWxfW3N0cmlwZV0uaGVhZDsKLSAgfQotCi0gIHZvaWQg
bWFya0FsbG9jYXRlZChTbG90JiBzbG90KSB7Ci0gICAgc2xvdC5sb2NhbE5leHQuc3RvcmUodWlu
dDMyX3QoLTEpLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAgfQotfTsKLQotbmFtZXNw
YWNlIGRldGFpbCB7Ci0KLS8vLyBUaGlzIGlzIGEgc3RhdGVmdWwgRGVsZXRlciBmdW5jdG9yLCB3
aGljaCBhbGxvd3Mgc3RkOjp1bmlxdWVfcHRyCi0vLy8gdG8gdHJhY2sgZWxlbWVudHMgYWxsb2Nh
dGVkIGZyb20gYW4gSW5kZXhlZE1lbVBvb2wgYnkgdHJhY2tpbmcgdGhlCi0vLy8gYXNzb2NpYXRl
ZCBwb29sLiAgU2VlIEluZGV4ZWRNZW1Qb29sOjphbGxvY0VsZW0uCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgUG9vbD4KLXN0cnVjdCBJbmRleGVkTWVtUG9vbFJlY3ljbGVyIHsKLSAgUG9vbCogcG9vbDsK
LQotICBleHBsaWNpdCBJbmRleGVkTWVtUG9vbFJlY3ljbGVyKFBvb2wqIHBvb2wpIDogcG9vbChw
b29sKSB7fQotCi0gIEluZGV4ZWRNZW1Qb29sUmVjeWNsZXIoY29uc3QgSW5kZXhlZE1lbVBvb2xS
ZWN5Y2xlcjxQb29sPiYgcmhzKQotICAgICAgPSBkZWZhdWx0OwotICBJbmRleGVkTWVtUG9vbFJl
Y3ljbGVyJiBvcGVyYXRvcj0gKGNvbnN0IEluZGV4ZWRNZW1Qb29sUmVjeWNsZXI8UG9vbD4mIHJo
cykKLSAgICAgID0gZGVmYXVsdDsKLQotICB2b2lkIG9wZXJhdG9yKCkodHlwZW5hbWUgUG9vbDo6
dmFsdWVfdHlwZSogZWxlbSkgY29uc3QgewotICAgIHBvb2wtPnJlY3ljbGVJbmRleChwb29sLT5s
b2NhdGVFbGVtKGVsZW0pKTsKLSAgfQotfTsKLQotfQotCi19IC8vIG5hbWVzcGFjZSBmb2xseQot
Ci1GT0xMWV9QT1BfV0FSTklORwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZm9sbHkvTGlrZWx5LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9mb2xseS9MaWtlbHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM3
ZGE1ZTQ4ODU5ZGQ2YTRkNGNhMDY2OGI0ZDg0ZWU2NGY3M2NlZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9mb2xseS9MaWtlbHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICog
ICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxl
c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
ZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vu
c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0g
KiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIENvbXBpbGVy
IGhpbnRzIHRvIGluZGljYXRlIHRoZSBmYXN0IHBhdGggb2YgYW4gImlmIiBicmFuY2g6IHdoZXRo
ZXIKLSAqIHRoZSBpZiBjb25kaXRpb24gaXMgbGlrZWx5IHRvIGJlIHRydWUgb3IgZmFsc2UuCi0g
KgotICogQGF1dGhvciBUdWRvciBCb3NtYW4gKHR1ZG9yYkBmYi5jb20pCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSN1bmRlZiBMSUtFTFkKLSN1bmRlZiBVTkxJS0VMWQotCi0jaWYgZGVmaW5lZChf
X0dOVUNfXykgJiYgX19HTlVDX18gPj0gNAotI2RlZmluZSBMSUtFTFkoeCkgICAoX19idWlsdGlu
X2V4cGVjdCgoeCksIDEpKQotI2RlZmluZSBVTkxJS0VMWSh4KSAoX19idWlsdGluX2V4cGVjdCgo
eCksIDApKQotI2Vsc2UKLSNkZWZpbmUgTElLRUxZKHgpICAgKHgpCi0jZGVmaW5lIFVOTElLRUxZ
KHgpICh4KQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9mb2xseS9Mb2NrVHJhaXRzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9mb2xseS9Mb2NrVHJhaXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGI4ZmM1NTM5MjVmY2Y4YmE0YThkMjBiMGZmMDExNjNkM2U2OTAxMTIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZm9sbHkvTG9ja1RyYWl0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp
OwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
IHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAq
Ci0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAq
IFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgdHJhaXRzIGNsYXNzIGZvciBkZXNjcmliaW5nIHByb3Bl
cnRpZXMgYWJvdXQgbXV0ZXgKLSAqIGNsYXNzZXMuCi0gKgotICogVGhpcyBpcyBhIHByaW1pdGl2
ZSBmb3IgYnVpbGRpbmcgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9ucyB0aGF0IGNhbiB3b3JrCi0g
KiB3aXRoIGEgdmFyaWV0eSBvZiBtdXRleCBjbGFzc2VzLiAgRm9yIGluc3RhbmNlLCB0aGlzIGFs
bG93cwotICogZm9sbHk6OlN5bmNocm9uaXplZCB0byBzdXBwb3J0IGEgbnVtYmVyIG9mIGRpZmZl
cmVudCBtdXRleCB0eXBlcy4KLSAqLwotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxjaHJvbm8+
Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0KLS8vIEFuZHJvaWQsIE9TWCwgYW5kIEN5Z3dpbiBk
b24ndCBoYXZlIHRpbWVkIG11dGV4ZXMKLSNpZiBkZWZpbmVkKEFORFJPSUQpIHx8IGRlZmluZWQo
X19BTkRST0lEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBcCi0gICAgZGVmaW5lZChfX0NZ
R1dJTl9fKQotI2RlZmluZSBGT0xMWV9MT0NLX1RSQUlUU19IQVZFX1RJTUVEX01VVEVYRVMgMAot
I2Vsc2UKLSNkZWZpbmUgRk9MTFlfTE9DS19UUkFJVFNfSEFWRV9USU1FRF9NVVRFWEVTIDEKLSNl
bmRpZgotCi1uYW1lc3BhY2UgZm9sbHkgewotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLS8qKgotICog
QW4gZW51bSB0byBkZXNjcmliZSB0aGUgImxldmVsIiBvZiBhIG11dGV4LiAgVGhlIHN1cHBvcnRl
ZCBsZXZlbHMgYXJlCi0gKiAgVW5pcXVlIC0gYSBub3JtYWwgbXV0ZXggdGhhdCBzdXBwb3J0cyBv
bmx5IGV4Y2x1c2l2ZSBsb2NraW5nCi0gKiAgU2hhcmVkIC0gYSBzaGFyZWQgbXV0ZXggd2hpY2gg
aGFzIHNoYXJlZCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgZnVuY3Rpb25zOwotICogIFVwZ3JhZGUg
LSBhIG11dGV4IHRoYXQgaGFzIGFsbCB0aGUgbWV0aG9kcyBvZiB0aGUgdHdvIGFib3ZlIGFsb25n
IHdpdGgKLSAqICAgICAgICAgICAgc3VwcG9ydCBmb3IgdXBncmFkYWJsZSBsb2NraW5nCi0gKi8K
LWVudW0gY2xhc3MgTXV0ZXhMZXZlbCB7IFVOSVFVRSwgU0hBUkVELCBVUEdSQURFIH07Ci0KLS8q
KgotICogQSB0ZW1wbGF0ZSBkaXNwYXRjaCBtZWNoYW5pc20gdGhhdCBpcyB1c2VkIHRvIGRldGVy
bWluZSB0aGUgbGV2ZWwgb2YgdGhlCi0gKiBtdXRleCBiYXNlZCBvbiBpdHMgaW50ZXJmYWNlLiAg
QXMgZGVjaWRlZCBieSBMb2NrSW50ZXJmYWNlRGlzcGF0Y2hlci4KLSAqLwotdGVtcGxhdGUgPGJv
b2wgaXNfdW5pcXVlLCBib29sIGlzX3NoYXJlZCwgYm9vbCBpc191cGdyYWRlPgotc3RydWN0IE11
dGV4TGV2ZWxWYWx1ZUltcGw7Ci10ZW1wbGF0ZSA8Pgotc3RydWN0IE11dGV4TGV2ZWxWYWx1ZUlt
cGw8dHJ1ZSwgZmFsc2UsIGZhbHNlPiB7Ci0gIHN0YXRpYyBjb25zdGV4cHIgTXV0ZXhMZXZlbCB2
YWx1ZSA9IE11dGV4TGV2ZWw6OlVOSVFVRTsKLX07Ci10ZW1wbGF0ZSA8Pgotc3RydWN0IE11dGV4
TGV2ZWxWYWx1ZUltcGw8dHJ1ZSwgdHJ1ZSwgZmFsc2U+IHsKLSAgc3RhdGljIGNvbnN0ZXhwciBN
dXRleExldmVsIHZhbHVlID0gTXV0ZXhMZXZlbDo6U0hBUkVEOwotfTsKLXRlbXBsYXRlIDw+Ci1z
dHJ1Y3QgTXV0ZXhMZXZlbFZhbHVlSW1wbDx0cnVlLCB0cnVlLCB0cnVlPiB7Ci0gIHN0YXRpYyBj
b25zdGV4cHIgTXV0ZXhMZXZlbCB2YWx1ZSA9IE11dGV4TGV2ZWw6OlVQR1JBREU7Ci19OwotCi0v
KioKLSAqIEFuIGludGVybmFsIGhlbHBlciBjbGFzcyB0byBoZWxwIGlkZW50aWZ5IHRoZSBpbnRl
cmZhY2Ugc3VwcG9ydGVkIGJ5IHRoZQotICogbXV0ZXguICBUaGlzIGlzIHVzZWQgaW4gY29uanVu
Y3Rpb24gd2l0aCB0aGUgYWJvdmUgTXV0ZXhMZXZlbAotICogc3BlY2lhbGl6YXRpb25zIGFuZCB0
aGUgTG9ja1RyYWl0c0ltcGwgdG8gZGV0ZXJtaW5lIHdoYXQgZnVuY3Rpb25zIGFyZQotICogc3Vw
cG9ydGVkIGJ5IG9iamVjdHMgb2YgdHlwZSBNdXRleAotICoKLSAqIFRoZSBpbXBsZW1lbnRhdGlv
biB1c2VzIFNJTkFFIGluIHRoZSByZXR1cm4gdmFsdWUgd2l0aCB0cmFpbGluZyByZXR1cm4KLSAq
IHR5cGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBsZXZlbCBhIG11dGV4IGlzCi0gKi8KLXRlbXBsYXRl
IDxjbGFzcyBNdXRleD4KLWNsYXNzIExvY2tJbnRlcmZhY2VEaXNwYXRjaGVyIHsKLSBwcml2YXRl
OgotICAvLyBhc3NlcnQgdGhhdCB0aGUgbXV0ZXggdHlwZSBoYXMgYmFzaWMgbG9jayBhbmQgdW5s
b2NrIGZ1bmN0aW9ucwotICBzdGF0aWNfYXNzZXJ0KAotICAgICAgc3RkOjppc19zYW1lPGRlY2x0
eXBlKHN0ZDo6ZGVjbHZhbDxNdXRleD4oKS5sb2NrKCkpLCB2b2lkPjo6dmFsdWUsCi0gICAgICAi
VGhlIG11dGV4IHR5cGUgbXVzdCBzdXBwb3J0IGxvY2sgYW5kIHVubG9jayBmdW5jdGlvbnMiKTsK
LQotICAvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBpbXBsZW1lbnRpbmcgdGhlIHRyYWl0cyB1c2lu
ZyBTRklOQUUKLSAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gIHN0YXRpYyBhdXRvIHRpbWVkX2xvY2tf
dGVzdChUKikgLT4gdHlwZW5hbWUgc3RkOjppc19zYW1lPAotICAgICAgZGVjbHR5cGUoc3RkOjpk
ZWNsdmFsPFQ+KCkudHJ5X2xvY2tfZm9yKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMCkpKSwK
LSAgICAgIGJvb2w+Ojp0eXBlOwotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgc3RhdGljIHN0ZDo6
ZmFsc2VfdHlwZSB0aW1lZF9sb2NrX3Rlc3QoLi4uKTsKLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4K
LSAgc3RhdGljIGF1dG8gbG9ja19zaGFyZWRfdGVzdChUKikgLT4gdHlwZW5hbWUgc3RkOjoKLSAg
ICAgIGlzX3NhbWU8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPFQ+KCkubG9ja19zaGFyZWQoKSksIHZv
aWQ+Ojp0eXBlOwotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgc3RhdGljIHN0ZDo6ZmFsc2VfdHlw
ZSBsb2NrX3NoYXJlZF90ZXN0KC4uLik7Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gIHN0YXRp
YyBhdXRvIGxvY2tfdXBncmFkZV90ZXN0KFQqKSAtPiB0eXBlbmFtZSBzdGQ6OgotICAgICAgaXNf
c2FtZTxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8VD4oKS5sb2NrX3VwZ3JhZGUoKSksIHZvaWQ+Ojp0
eXBlOwotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgc3RhdGljIHN0ZDo6ZmFsc2VfdHlwZSBsb2Nr
X3VwZ3JhZGVfdGVzdCguLi4pOwotCi0gcHVibGljOgotICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aGFzX2xvY2tfdW5pcXVlID0gdHJ1ZTsKLSAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc19sb2Nr
X3RpbWVkID0KLSAgICAgIGRlY2x0eXBlKHRpbWVkX2xvY2tfdGVzdDxNdXRleD4oMCkpOjp2YWx1
ZTsKLSAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc19sb2NrX3NoYXJlZCA9Ci0gICAgICBkZWNs
dHlwZShsb2NrX3NoYXJlZF90ZXN0PE11dGV4PigwKSk6OnZhbHVlOwotICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaGFzX2xvY2tfdXBncmFkZSA9Ci0gICAgICBkZWNsdHlwZShsb2NrX3VwZ3JhZGVf
dGVzdDxNdXRleD4oMCkpOjp2YWx1ZTsKLX07Ci0KLS8qKgotICogTG9ja1RyYWl0c0ltcGwgaXMg
dGhlIGJhc2UgdGhhdCBpcyB1c2VkIHRvIGRlc3JpYmUgdGhlIGludGVyZmFjZSB1c2VkIGJ5Ci0g
KiBkaWZmZXJlbnQgbXV0ZXggdHlwZXMuICBJdCBhY2NlcHRzIGEgTXV0ZXhMZXZlbCBhcmd1bWVu
dCBhbmQgYSBib29sZWFuIHRvCi0gKiBzaG93IHdoZXRoZXIgdGhlIG11dGV4IGlzIGEgdGltZWQg
bXV0ZXggb3Igbm90LiAgVGhlIGltcGxlbWVudGF0aW9ucyBhcmUKLSAqIHBhcnRpYWxseSBzcGVj
aWFsaXplZCBhbmQgaW5oZXJpdCBmcm9tIHRoZSBvdGhlciBpbXBsZW1lbnRhdGlvbnMgdG8gZ2V0
Ci0gKiBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkKLSAqLwotdGVtcGxhdGUgPGNsYXNzIE11dGV4LCBN
dXRleExldmVsIGxldmVsLCBib29sIGlzX3RpbWVkPgotc3RydWN0IExvY2tUcmFpdHNJbXBsOwot
Ci10ZW1wbGF0ZSA8Y2xhc3MgTXV0ZXg+Ci1zdHJ1Y3QgTG9ja1RyYWl0c0ltcGw8TXV0ZXgsIE11
dGV4TGV2ZWw6OlVOSVFVRSwgZmFsc2U+IHsKLSAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX3Rp
bWVke2ZhbHNlfTsKLSAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX3NoYXJlZHtmYWxzZX07Ci0g
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc191cGdyYWRle2ZhbHNlfTsKLQotICAvKioKLSAgICog
QWNxdWlyZSB0aGUgbG9jayBleGNsdXNpdmVseS4KLSAgICovCi0gIHN0YXRpYyB2b2lkIGxvY2so
TXV0ZXgmIG11dGV4KSB7Ci0gICAgbXV0ZXgubG9jaygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJl
bGVhc2UgYW4gZXhjbHVzaXZlbHktaGVsZCBsb2NrLgotICAgKi8KLSAgc3RhdGljIHZvaWQgdW5s
b2NrKE11dGV4JiBtdXRleCkgewotICAgIG11dGV4LnVubG9jaygpOwotICB9Ci19OwotCi0vKioK
LSAqIEhpZ2hlciBsZXZlbCBtdXRleGVzIGhhdmUgYWxsIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhl
IGxvd2VyIGxldmVscyBzbwotICogaW5oZXJpdAotICovCi10ZW1wbGF0ZSA8Y2xhc3MgTXV0ZXg+
Ci1zdHJ1Y3QgTG9ja1RyYWl0c0ltcGw8TXV0ZXgsIE11dGV4TGV2ZWw6OlNIQVJFRCwgZmFsc2U+
Ci0gICAgOiBwdWJsaWMgTG9ja1RyYWl0c0ltcGw8TXV0ZXgsIE11dGV4TGV2ZWw6OlVOSVFVRSwg
ZmFsc2U+IHsKLSAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX3RpbWVke2ZhbHNlfTsKLSAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzX3NoYXJlZHt0cnVlfTsKLSAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzX3VwZ3JhZGV7ZmFsc2V9OwotCi0gIC8qKgotICAgKiBBY3F1aXJlIHRoZSBsb2NrIGlu
IHNoYXJlZCAocmVhZCkgbW9kZS4KLSAgICovCi0gIHN0YXRpYyB2b2lkIGxvY2tfc2hhcmVkKE11
dGV4JiBtdXRleCkgewotICAgIG11dGV4LmxvY2tfc2hhcmVkKCk7Ci0gIH0KLQotICAvKioKLSAg
ICogUmVsZWFzZSBhIGxvY2sgaGVsZCBpbiBzaGFyZWQgbW9kZS4KLSAgICovCi0gIHN0YXRpYyB2
b2lkIHVubG9ja19zaGFyZWQoTXV0ZXgmIG11dGV4KSB7Ci0gICAgbXV0ZXgudW5sb2NrX3NoYXJl
ZCgpOwotICB9Ci19OwotCi0vKioKLSAqIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgc3VwcG9y
dGVkLiAgVGhlcmUgYXJlIGEgZmV3IG1ldGhvZHMKLSAqCi0gKiAgbS5sb2NrX3VwZ3JhZGUoKQot
ICogIG0udW5sb2NrX3VwZ3JhZGUoKQotICoKLSAqICBtLnVubG9ja191cGdyYWRlX2FuZF9sb2Nr
KCkKLSAqCi0gKiAgbS51bmxvY2tfYW5kX2xvY2tfdXBncmFkZSgpCi0gKiAgbS51bmxvY2tfYW5k
X2xvY2tfc2hhcmVkKCkKLSAqICBtLnVubG9ja191cGdyYWRlX2FuZF9sb2NrX3NoYXJlZCgpCi0g
KgotICogIG0udHJ5X2xvY2tfdXBncmFkZV9mb3IocmVsX3RpbWUpCi0gKiAgbS50cnlfdW5sb2Nr
X3VwZ3JhZGVfYW5kX2xvY2tfZm9yKHJlbF90aW1lKQotICoKLSAqIFVwZ3JhZGluZyBhIHNoYXJl
ZCBsb2NrIGlzIGxpa2VseSB0byBkZWFkbG9jayB3aGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUK
LSAqIHRocmVhZCBwZXJmb3JtaW5nIGFuIHVwZ3JhZGUuICBUaGlzIGFwcGxpZXMgYm90aCB0byB1
cGdyYWRpbmcgYSBzaGFyZWQgbG9jawotICogdG8gYW4gdXBncmFkZSBsb2NrIGFuZCB0byB1cGdy
YWRpbmcgYSBzaGFyZWQgbG9jayB0byBhIHVuaXF1ZSBsb2NrLgotICoKLSAqIFRoZXJlZm9yZSwg
bm9uZSBvZiB0aGUgZm9sbG93aW5nIG1ldGhvZHMgaXMgc3VwcG9ydGVkOgotICogIHVubG9ja19z
aGFyZWRfYW5kX2xvY2tfdXBncmFkZQotICogIHVubG9ja19zaGFyZWRfYW5kX2xvY2sKLSAqICB0
cnlfdW5sb2NrX3NoYXJlZF9hbmRfbG9ja191cGdyYWRlCi0gKiAgdHJ5X3VubG9ja19zaGFyZWRf
YW5kX2xvY2sKLSAqICB0cnlfdW5sb2NrX3NoYXJlZF9hbmRfbG9ja191cGdyYWRlX2ZvcgotICog
IHRyeV91bmxvY2tfc2hhcmVkX2FuZF9sb2NrX2ZvcgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgTXV0
ZXg+Ci1zdHJ1Y3QgTG9ja1RyYWl0c0ltcGw8TXV0ZXgsIE11dGV4TGV2ZWw6OlVQR1JBREUsIGZh
bHNlPgotICAgIDogcHVibGljIExvY2tUcmFpdHNJbXBsPE11dGV4LCBNdXRleExldmVsOjpTSEFS
RUQsIGZhbHNlPiB7Ci0gIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc190aW1lZHtmYWxzZX07Ci0g
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19zaGFyZWR7dHJ1ZX07Ci0gIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc191cGdyYWRle3RydWV9OwotCi0gIC8qKgotICAgKiBBY3F1aXJlIHRoZSBsb2Nr
IGluIHVwZ3JhZGFibGUgbW9kZS4KLSAgICovCi0gIHN0YXRpYyB2b2lkIGxvY2tfdXBncmFkZShN
dXRleCYgbXV0ZXgpIHsKLSAgICBtdXRleC5sb2NrX3VwZ3JhZGUoKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBSZWxlYXNlIHRoZSBsb2NrIGluIHVwZ3JhZGUgbW9kZQotICAgKi8KLSAgc3RhdGljIHZv
aWQgdW5sb2NrX3VwZ3JhZGUoTXV0ZXgmIG11dGV4KSB7Ci0gICAgbXV0ZXgudW5sb2NrX3VwZ3Jh
ZGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBVcGdyYWRlIGZyb20gYW4gdXBncmFkYWJsZSBzdGF0
ZSB0byBhbiBleGNsdXNpdmUgc3RhdGUKLSAgICovCi0gIHN0YXRpYyB2b2lkIHVubG9ja191cGdy
YWRlX2FuZF9sb2NrKE11dGV4JiBtdXRleCkgewotICAgIG11dGV4LnVubG9ja191cGdyYWRlX2Fu
ZF9sb2NrKCk7Ci0gIH0KLQotICAvKioKLSAgICogRG93bmdyYWRlIGZyb20gYW4gZXhjbHVzaXZl
IHN0YXRlIHRvIGFuIHVwZ3JhZGUgc3RhdGUKLSAgICovCi0gIHN0YXRpYyB2b2lkIHVubG9ja19h
bmRfbG9ja191cGdyYWRlKE11dGV4JiBtdXRleCkgewotICAgIG11dGV4LnVubG9ja19hbmRfbG9j
a191cGdyYWRlKCk7Ci0gIH0KLQotICAvKioKLSAgICogRG93bmdyYWRlIGZyb20gYW4gZXhjbHVz
aXZlIHN0YXRlIHRvIGEgc2hhcmVkIHN0YXRlCi0gICAqLwotICBzdGF0aWMgdm9pZCB1bmxvY2tf
YW5kX2xvY2tfc2hhcmVkKE11dGV4JiBtdXRleCkgewotICAgIG11dGV4LnVubG9ja19hbmRfbG9j
a19zaGFyZWQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEb3duZ3JhZGUgZnJvbSBhbiB1cGdyYWRl
IHN0YXRlIHRvIGEgc2hhcmVkIHN0YXRlCi0gICAqLwotICBzdGF0aWMgdm9pZCB1bmxvY2tfdXBn
cmFkZV9hbmRfbG9ja19zaGFyZWQoTXV0ZXgmIG11dGV4KSB7Ci0gICAgbXV0ZXgudW5sb2NrX3Vw
Z3JhZGVfYW5kX2xvY2tfc2hhcmVkKCk7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBNdXRl
eD4KLXN0cnVjdCBMb2NrVHJhaXRzSW1wbDxNdXRleCwgTXV0ZXhMZXZlbDo6VU5JUVVFLCB0cnVl
PgotICAgIDogcHVibGljIExvY2tUcmFpdHNJbXBsPE11dGV4LCBNdXRleExldmVsOjpVTklRVUUs
IGZhbHNlPiB7Ci0gIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc190aW1lZHt0cnVlfTsKLSAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzX3NoYXJlZHtmYWxzZX07Ci0gIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc191cGdyYWRle2ZhbHNlfTsKLQotICAvKioKLSAgICogQWNxdWlyZSB0aGUgbG9jayBl
eGNsdXNpdmVseSwgd2l0aCBhIHRpbWVvdXQuCi0gICAqCi0gICAqIFJldHVybnMgdHJ1ZSBvciBm
YWxzZSBpbmRpY2F0aW5nIGlmIHRoZSBsb2NrIHdhcyBhY3F1aXJlZCBvciBub3QuCi0gICAqLwot
ICB0ZW1wbGF0ZSA8Y2xhc3MgUmVwLCBjbGFzcyBQZXJpb2Q+Ci0gIHN0YXRpYyBib29sIHRyeV9s
b2NrX2ZvcigKLSAgICAgIE11dGV4JiBtdXRleCwKLSAgICAgIGNvbnN0IHN0ZDo6Y2hyb25vOjpk
dXJhdGlvbjxSZXAsIFBlcmlvZD4mIHRpbWVvdXQpIHsKLSAgICByZXR1cm4gbXV0ZXgudHJ5X2xv
Y2tfZm9yKHRpbWVvdXQpOwotICB9Ci19OwotCi0vKioKLSAqIE5vdGUgdGhhdCB0aGVyZSBpcyBu
byBkZWFkbHkgZGlhbW9uZCBoZXJlIGJlY2F1c2UgYWxsIHRoZSBzdHJ1Y3RzIG9ubHkgaGF2ZQot
ICogc3RhdGljIGZ1bmN0aW9ucyBhbmQgc3RhdGljIGJvb2xzIHdoaWNoIGFyZSBnb2luZyB0byBi
ZSBvdmVycmlkZGVuIGJ5IHRoZQotICogbG93ZXN0IGxldmVsIGltcGxlbWVudGF0aW9uCi0gKi8K
LXRlbXBsYXRlIDxjbGFzcyBNdXRleD4KLXN0cnVjdCBMb2NrVHJhaXRzSW1wbDxNdXRleCwgTXV0
ZXhMZXZlbDo6U0hBUkVELCB0cnVlPgotICAgIDogcHVibGljIExvY2tUcmFpdHNJbXBsPE11dGV4
LCBNdXRleExldmVsOjpTSEFSRUQsIGZhbHNlPiwKLSAgICAgIHB1YmxpYyBMb2NrVHJhaXRzSW1w
bDxNdXRleCwgTXV0ZXhMZXZlbDo6VU5JUVVFLCB0cnVlPiB7Ci0gIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc190aW1lZHt0cnVlfTsKLSAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX3NoYXJlZHt0
cnVlfTsKLSAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX3VwZ3JhZGV7ZmFsc2V9OwotCi0gIC8q
KgotICAgKiBBY3F1aXJlIHRoZSBsb2NrIGV4Y2x1c2l2ZWx5LCB3aXRoIGEgdGltZW91dC4KLSAg
ICoKLSAgICogUmV0dXJucyB0cnVlIG9yIGZhbHNlIGluZGljYXRpbmcgaWYgdGhlIGxvY2sgd2Fz
IGFjcXVpcmVkIG9yIG5vdC4KLSAgICovCi0gIHRlbXBsYXRlIDxjbGFzcyBSZXAsIGNsYXNzIFBl
cmlvZD4KLSAgc3RhdGljIGJvb2wgdHJ5X2xvY2tfZm9yKAotICAgICAgTXV0ZXgmIG11dGV4LAot
ICAgICAgY29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiYgdGltZW91dCkg
ewotICAgIHJldHVybiBtdXRleC50cnlfbG9ja19mb3IodGltZW91dCk7Ci0gIH0KLQotICAvKioK
LSAgICogQWNxdWlyZSB0aGUgbG9jayBpbiBzaGFyZWQgKHJlYWQpIG1vZGUsIHdpdGggYSB0aW1l
b3V0LgotICAgKgotICAgKiBSZXR1cm5zIHRydWUgb3IgZmFsc2UgaW5kaWNhdGluZyBpZiB0aGUg
bG9jayB3YXMgYWNxdWlyZWQgb3Igbm90LgotICAgKi8KLSAgdGVtcGxhdGUgPGNsYXNzIFJlcCwg
Y2xhc3MgUGVyaW9kPgotICBzdGF0aWMgYm9vbCB0cnlfbG9ja19zaGFyZWRfZm9yKAotICAgICAg
TXV0ZXgmIG11dGV4LAotICAgICAgY29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVy
aW9kPiYgdGltZW91dCkgewotICAgIHJldHVybiBtdXRleC50cnlfbG9ja19zaGFyZWRfZm9yKHRp
bWVvdXQpOwotICB9Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgTXV0ZXg+Ci1zdHJ1Y3QgTG9ja1Ry
YWl0c0ltcGw8TXV0ZXgsIE11dGV4TGV2ZWw6OlVQR1JBREUsIHRydWU+Ci0gICAgOiBwdWJsaWMg
TG9ja1RyYWl0c0ltcGw8TXV0ZXgsIE11dGV4TGV2ZWw6OlVQR1JBREUsIGZhbHNlPiwKLSAgICAg
IHB1YmxpYyBMb2NrVHJhaXRzSW1wbDxNdXRleCwgTXV0ZXhMZXZlbDo6U0hBUkVELCB0cnVlPiB7
Ci0gIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc190aW1lZHt0cnVlfTsKLSAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzX3NoYXJlZHt0cnVlfTsKLSAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX3Vw
Z3JhZGV7dHJ1ZX07Ci0KLSAgLyoqCi0gICAqIEFjcXVpcmUgdGhlIGxvY2sgaW4gdXBncmFkZSBt
b2RlIHdpdGggYSB0aW1lb3V0Ci0gICAqCi0gICAqIFJldHVybnMgdHJ1ZSBvciBmYWxzZSBpbmRp
Y2F0aW5nIHdoZXRoZXIgdGhlIGxvY2sgd2FzIGFjcXVpcmVkIG9yIG5vdAotICAgKi8KLSAgdGVt
cGxhdGUgPGNsYXNzIFJlcCwgY2xhc3MgUGVyaW9kPgotICBzdGF0aWMgYm9vbCB0cnlfbG9ja191
cGdyYWRlX2ZvcigKLSAgICAgIE11dGV4JiBtdXRleCwKLSAgICAgIGNvbnN0IHN0ZDo6Y2hyb25v
OjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIHRpbWVvdXQpIHsKLSAgICByZXR1cm4gbXV0ZXgudHJ5
X2xvY2tfdXBncmFkZV9mb3IodGltZW91dCk7Ci0gIH0KLQotICAvKioKLSAgICogVHJ5IHRvIHVw
Z3JhZGUgZnJvbSBhbiB1cGdyYWRhYmxlIHN0YXRlIHRvIGFuIGV4Y2x1c2l2ZSBzdGF0ZS4KLSAg
ICoKLSAgICogUmV0dXJucyB0cnVlIG9yIGZhbHNlIGluZGljYXRpbmcgd2hldGhlciB0aGUgbG9j
ayB3YXMgYWNxdWlyZWQgb3Igbm90Ci0gICAqLwotICB0ZW1wbGF0ZSA8Y2xhc3MgUmVwLCBjbGFz
cyBQZXJpb2Q+Ci0gIHN0YXRpYyBib29sIHRyeV91bmxvY2tfdXBncmFkZV9hbmRfbG9ja19mb3Io
Ci0gICAgICBNdXRleCYgbXV0ZXgsCi0gICAgICBjb25zdCBzdGQ6OmNocm9ubzo6ZHVyYXRpb248
UmVwLCBQZXJpb2Q+JiB0aW1lb3V0KSB7Ci0gICAgcmV0dXJuIG11dGV4LnRyeV91bmxvY2tfdXBn
cmFkZV9hbmRfbG9ja19mb3IodGltZW91dCk7Ci0gIH0KLX07Ci0KLX0gLy8gZGV0YWlsCi0KLS8q
KgotICogTG9ja1RyYWl0cyBkZXNjcmliZXMgZGV0YWlscyBhYm91dCBhIHBhcnRpY3VsYXIgbXV0
ZXggdHlwZS4KLSAqCi0gKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhdXRvbWF0aWNhbGx5
IGF0dGVtcHRzIHRvIGRldGVjdCB0cmFpdHMKLSAqIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiB2
YXJpb3VzIG1lbWJlciBmdW5jdGlvbnMuCi0gKgotICogWW91IGNhbiBzcGVjaWFsaXplIExvY2tU
cmFpdHMgdG8gcHJvdmlkZSBjdXN0b20gYmVoYXZpb3IgZm9yIGxvY2sKLSAqIGNsYXNzZXMgdGhh
dCBkbyBub3QgdXNlIHRoZSBzdGFuZGFyZCBtZXRob2QgbmFtZXMKLSAqIChsb2NrKCkvdW5sb2Nr
KCkvbG9ja19zaGFyZWQoKS91bmxvY2tfc2hhcmVkKCkvdHJ5X2xvY2tfZm9yKCkpCi0gKgotICoK
LSAqIExvY2tUcmFpdHMgY29udGFpbnMgdGhlIGZvbGxvd2luZyBtZW1iZXJzIHZhcmlhYmxlczoK
LSAqIC0gc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX3NoYXJlZAotICogICBUcnVlIGlmIHRoZSBs
b2NrIHN1cHBvcnRzIHNlcGFyYXRlIHNoYXJlZCB2cyBleGNsdXNpdmUgbG9ja2luZyBzdGF0ZXMu
Ci0gKiAtIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc190aW1lZAotICogICBUcnVlIGlmIHRoZSBs
b2NrIHN1cHBvcnRzIGFjcXVpcmluZyB0aGUgbG9jayB3aXRoIGEgdGltZW91dC4KLSAqIC0gc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzX3VwZ3JhZGUKLSAqICAgVHJ1ZSBpZiB0aGUgbG9jayBzdXBw
b3J0cyBhbiB1cGdyYWRhYmxlIHN0YXRlCi0gKgotICogVGhlIGZvbGxvd2luZyBzdGF0aWMgbWV0
aG9kcyBhbHdheXMgZXhpc3Q6Ci0gKiAtIGxvY2soTXV0ZXgmIG11dGV4KQotICogLSB1bmxvY2so
TXV0ZXgmIG11dGV4KQotICoKLSAqIFRoZSBmb2xsb3dpbmcgc3RhdGljIG1ldGhvZHMgbWF5IGV4
aXN0LCBkZXBlbmRpbmcgb24gaXNfc2hhcmVkLCBpc190aW1lZAotICogYW5kIGlzX3VwZ3JhZGU6
Ci0gKiAtIGxvY2tfc2hhcmVkKCkKLSAqCi0gKiAtIHRyeV9sb2NrX2ZvcigpCi0gKiAtIHRyeV9s
b2NrX3NoYXJlZF9mb3IoKQotICoKLSAqIC0gbG9ja191cGdyYWRlKCkKLSAqIC0gdW5sb2NrX3Vw
Z3JhZGVfYW5kX2xvY2soKQotICogLSB1bmxvY2tfYW5kX2xvY2tfdXBncmFkZSgpCi0gKiAtIHVu
bG9ja19hbmRfbG9ja19zaGFyZWQoKQotICogLSB1bmxvY2tfdXBncmFkZV9hbmRfbG9ja19zaGFy
ZWQoKQotICoKLSAqIC0gdHJ5X2xvY2tfdXBncmFkZV9mb3IoKQotICogLSB0cnlfdW5sb2NrX3Vw
Z3JhZGVfYW5kX2xvY2tfZm9yKCkKLSAqCi0gKiAtIHVubG9ja19zaGFyZWQoKQotICogLSB1bmxv
Y2tfdXBncmFkZSgpCi0gKi8KLQotLyoqCi0gKiBEZWNvdXBsaW5nIExvY2tUcmFpdHMgYW5kIExv
Y2tUcmFpdHNCYXNlIHNvIHRoYXQgaWYgcGVvcGxlIHdhbnQgdG8gZnVsbHkKLSAqIHNwZWNpYWxp
emUgTG9ja1RyYWl0cyB0aGVuIHRoZXkgY2FuIGluaGVyaXQgZnJvbSBMb2NrVHJhaXRzQmFzZSBp
bnN0ZWFkCi0gKiBvZiBMb2NrVHJhaXRzIHdpdGggYWxsIHRoZSBzYW1lIGdvb2RpZXMgOikKLSAq
LwotdGVtcGxhdGUgPGNsYXNzIE11dGV4Pgotc3RydWN0IExvY2tUcmFpdHNCYXNlCi0gICAgOiBw
dWJsaWMgZGV0YWlsOjpMb2NrVHJhaXRzSW1wbDwKLSAgICAgICAgICBNdXRleCwKLSAgICAgICAg
ICBkZXRhaWw6Ok11dGV4TGV2ZWxWYWx1ZUltcGw8Ci0gICAgICAgICAgICAgIGRldGFpbDo6TG9j
a0ludGVyZmFjZURpc3BhdGNoZXI8TXV0ZXg+OjpoYXNfbG9ja191bmlxdWUsCi0gICAgICAgICAg
ICAgIGRldGFpbDo6TG9ja0ludGVyZmFjZURpc3BhdGNoZXI8TXV0ZXg+OjpoYXNfbG9ja19zaGFy
ZWQsCi0gICAgICAgICAgICAgIGRldGFpbDo6TG9ja0ludGVyZmFjZURpc3BhdGNoZXI8TXV0ZXg+
OjpoYXNfbG9ja191cGdyYWRlPjo6dmFsdWUsCi0gICAgICAgICAgZGV0YWlsOjpMb2NrSW50ZXJm
YWNlRGlzcGF0Y2hlcjxNdXRleD46Omhhc19sb2NrX3RpbWVkPiB7fTsKLQotdGVtcGxhdGUgPGNs
YXNzIE11dGV4Pgotc3RydWN0IExvY2tUcmFpdHMgOiBwdWJsaWMgTG9ja1RyYWl0c0Jhc2U8TXV0
ZXg+IHt9OwotCi0vKioKLSAqIElmIHRoZSBsb2NrIGlzIGEgc2hhcmVkIGxvY2ssIGFjcXVpcmUg
aXQgaW4gc2hhcmVkIG1vZGUuCi0gKiBPdGhlcndpc2UsIGZvciBwbGFpbiAoZXhjbHVzaXZlLW9u
bHkpIGxvY2tzLCBwZXJmb3JtIGEgbm9ybWFsIGFjcXVpcmUuCi0gKi8KLXRlbXBsYXRlIDxjbGFz
cyBNdXRleD4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPExvY2tUcmFpdHM8TXV0ZXg+Ojppc19z
aGFyZWQ+Ojp0eXBlCi1sb2NrX3NoYXJlZF9vcl91bmlxdWUoTXV0ZXgmIG11dGV4KSB7Ci0gIExv
Y2tUcmFpdHM8TXV0ZXg+Ojpsb2NrX3NoYXJlZChtdXRleCk7Ci19Ci10ZW1wbGF0ZSA8Y2xhc3Mg
TXV0ZXg+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhTG9ja1RyYWl0czxNdXRleD46OmlzX3No
YXJlZD46OnR5cGUKLWxvY2tfc2hhcmVkX29yX3VuaXF1ZShNdXRleCYgbXV0ZXgpIHsKLSAgTG9j
a1RyYWl0czxNdXRleD46OmxvY2sobXV0ZXgpOwotfQotCi0vKioKLSAqIElmIHRoZSBsb2NrIGlz
IGEgc2hhcmVkIGxvY2ssIHRyeSB0byBhY3F1aXJlIGl0IGluIHNoYXJlZCBtb2RlLCBmb3IgdXAg
dG8KLSAqIHRoZSBnaXZlbiB0aW1lb3V0LiAgT3RoZXJ3aXNlLCBmb3IgcGxhaW4gKGV4Y2x1c2l2
ZS1vbmx5KSBsb2NrcywgdHJ5IHRvCi0gKiBwZXJmb3JtIGEgbm9ybWFsIGFjcXVpcmUuCi0gKgot
ICogUmV0dXJucyB0cnVlIGlmIHRoZSBsb2NrIHdhcyBhY3F1aXJlZCwgb3IgZmFsc2Ugb24gdGlt
ZSBvdXQuCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBNdXRleCwgY2xhc3MgUmVwLCBjbGFzcyBQZXJp
b2Q+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxMb2NrVHJhaXRzPE11dGV4Pjo6aXNfc2hhcmVk
LCBib29sPjo6dHlwZQotdHJ5X2xvY2tfc2hhcmVkX29yX3VuaXF1ZV9mb3IoCi0gICAgTXV0ZXgm
IG11dGV4LAotICAgIGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIHRp
bWVvdXQpIHsKLSAgcmV0dXJuIExvY2tUcmFpdHM8TXV0ZXg+Ojp0cnlfbG9ja19zaGFyZWRfZm9y
KG11dGV4LCB0aW1lb3V0KTsKLX0KLXRlbXBsYXRlIDxjbGFzcyBNdXRleCwgY2xhc3MgUmVwLCBj
bGFzcyBQZXJpb2Q+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhTG9ja1RyYWl0czxNdXRleD46
OmlzX3NoYXJlZCwgYm9vbD46OnR5cGUKLXRyeV9sb2NrX3NoYXJlZF9vcl91bmlxdWVfZm9yKAot
ICAgIE11dGV4JiBtdXRleCwKLSAgICBjb25zdCBzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQ
ZXJpb2Q+JiB0aW1lb3V0KSB7Ci0gIHJldHVybiBMb2NrVHJhaXRzPE11dGV4Pjo6dHJ5X2xvY2tf
Zm9yKG11dGV4LCB0aW1lb3V0KTsKLX0KLQotLyoqCi0gKiBSZWxlYXNlIGEgbG9jayBhY3F1aXJl
ZCB3aXRoIGxvY2tfc2hhcmVkX29yX3VuaXF1ZSgpCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBNdXRl
eD4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPExvY2tUcmFpdHM8TXV0ZXg+Ojppc19zaGFyZWQ+
Ojp0eXBlCi11bmxvY2tfc2hhcmVkX29yX3VuaXF1ZShNdXRleCYgbXV0ZXgpIHsKLSAgTG9ja1Ry
YWl0czxNdXRleD46OnVubG9ja19zaGFyZWQobXV0ZXgpOwotfQotdGVtcGxhdGUgPGNsYXNzIE11
dGV4PgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IUxvY2tUcmFpdHM8TXV0ZXg+Ojppc19zaGFy
ZWQ+Ojp0eXBlCi11bmxvY2tfc2hhcmVkX29yX3VuaXF1ZShNdXRleCYgbXV0ZXgpIHsKLSAgTG9j
a1RyYWl0czxNdXRleD46OnVubG9jayhtdXRleCk7Ci19Ci0KLS8qCi0gKiBMb2NrIHBvbGljeSBj
bGFzc2VzLgotICoKLSAqIFRoZXNlIGNhbiBiZSB1c2VkIGFzIHRlbXBsYXRlIHBhcmFtZXRlcnMg
dG8gcHJvdmlkZSBjb21waWxlLXRpbWUKLSAqIHNlbGVjdGlvbiBvdmVyIHRoZSB0eXBlIG9mIGxv
Y2sgb3BlcmF0aW9uIHRvIHBlcmZvcm0uCi0gKi8KLQotLyoqCi0gKiBBIGxvY2sgcG9saWN5IHRo
YXQgcGVyZm9ybXMgZXhjbHVzaXZlIGxvY2sgb3BlcmF0aW9ucy4KLSAqLwotc3RydWN0IExvY2tQ
b2xpY3lFeGNsdXNpdmUgewotICB0ZW1wbGF0ZSA8Y2xhc3MgTXV0ZXg+Ci0gIHN0YXRpYyB2b2lk
IGxvY2soTXV0ZXgmIG11dGV4KSB7Ci0gICAgTG9ja1RyYWl0czxNdXRleD46OmxvY2sobXV0ZXgp
OwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBNdXRleCwgY2xhc3MgUmVwLCBjbGFzcyBQZXJpb2Q+
Ci0gIHN0YXRpYyBib29sIHRyeV9sb2NrX2ZvcigKLSAgICAgIE11dGV4JiBtdXRleCwKLSAgICAg
IGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIHRpbWVvdXQpIHsKLSAg
ICByZXR1cm4gTG9ja1RyYWl0czxNdXRleD46OnRyeV9sb2NrX2ZvcihtdXRleCwgdGltZW91dCk7
Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIE11dGV4PgotICBzdGF0aWMgdm9pZCB1bmxvY2soTXV0
ZXgmIG11dGV4KSB7Ci0gICAgTG9ja1RyYWl0czxNdXRleD46OnVubG9jayhtdXRleCk7Ci0gIH0K
LX07Ci0KLS8qKgotICogQSBsb2NrIHBvbGljeSB0aGF0IHBlcmZvcm1zIHNoYXJlZCBsb2NrIG9w
ZXJhdGlvbnMuCi0gKiBUaGlzIHBvbGljeSBvbmx5IHdvcmtzIHdpdGggc2hhcmVkIG11dGV4IHR5
cGVzLgotICovCi1zdHJ1Y3QgTG9ja1BvbGljeVNoYXJlZCB7Ci0gIHRlbXBsYXRlIDxjbGFzcyBN
dXRleD4KLSAgc3RhdGljIHZvaWQgbG9jayhNdXRleCYgbXV0ZXgpIHsKLSAgICBMb2NrVHJhaXRz
PE11dGV4Pjo6bG9ja19zaGFyZWQobXV0ZXgpOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBNdXRl
eCwgY2xhc3MgUmVwLCBjbGFzcyBQZXJpb2Q+Ci0gIHN0YXRpYyBib29sIHRyeV9sb2NrX2ZvcigK
LSAgICAgIE11dGV4JiBtdXRleCwKLSAgICAgIGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxS
ZXAsIFBlcmlvZD4mIHRpbWVvdXQpIHsKLSAgICByZXR1cm4gTG9ja1RyYWl0czxNdXRleD46OnRy
eV9sb2NrX3NoYXJlZF9mb3IobXV0ZXgsIHRpbWVvdXQpOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFz
cyBNdXRleD4KLSAgc3RhdGljIHZvaWQgdW5sb2NrKE11dGV4JiBtdXRleCkgewotICAgIExvY2tU
cmFpdHM8TXV0ZXg+Ojp1bmxvY2tfc2hhcmVkKG11dGV4KTsKLSAgfQotfTsKLQotLyoqCi0gKiBB
IGxvY2sgcG9saWN5IHRoYXQgcGVyZm9ybXMgYSBzaGFyZWQgbG9jayBvcGVyYXRpb24gaWYgYSBz
aGFyZWQgbXV0ZXggdHlwZQotICogaXMgZ2l2ZW4sIG9yIGEgbm9ybWFsIGV4Y2x1c2l2ZSBsb2Nr
IG9wZXJhdGlvbiBvbiBub24tc2hhcmVkIG11dGV4IHR5cGVzLgotICovCi1zdHJ1Y3QgTG9ja1Bv
bGljeVNoYXJlYWJsZSB7Ci0gIHRlbXBsYXRlIDxjbGFzcyBNdXRleD4KLSAgc3RhdGljIHZvaWQg
bG9jayhNdXRleCYgbXV0ZXgpIHsKLSAgICBsb2NrX3NoYXJlZF9vcl91bmlxdWUobXV0ZXgpOwot
ICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBNdXRleCwgY2xhc3MgUmVwLCBjbGFzcyBQZXJpb2Q+Ci0g
IHN0YXRpYyBib29sIHRyeV9sb2NrX2ZvcigKLSAgICAgIE11dGV4JiBtdXRleCwKLSAgICAgIGNv
bnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIHRpbWVvdXQpIHsKLSAgICBy
ZXR1cm4gdHJ5X2xvY2tfc2hhcmVkX29yX3VuaXF1ZV9mb3IobXV0ZXgsIHRpbWVvdXQpOwotICB9
Ci0gIHRlbXBsYXRlIDxjbGFzcyBNdXRleD4KLSAgc3RhdGljIHZvaWQgdW5sb2NrKE11dGV4JiBt
dXRleCkgewotICAgIHVubG9ja19zaGFyZWRfb3JfdW5pcXVlKG11dGV4KTsKLSAgfQotfTsKLQot
LyoqCi0gKiBBIGxvY2sgcG9saWN5IHdpdGggdGhlIGZvbGxvd2luZyBtYXBwaW5nCi0gKgotICog
IGxvY2soKSAtPiBsb2NrX3VwZ3JhZGUoKQotICogIHVubG9jaygpIC0+IHVubG9ja191cGdyYWRl
KCkKLSAqICB0cnlfbG9ja19mb3IgLT4gdHJ5X2xvY2tfdXBncmFkZV9mb3IoKQotICovCi1zdHJ1
Y3QgTG9ja1BvbGljeVVwZ3JhZGUgewotICB0ZW1wbGF0ZSA8Y2xhc3MgTXV0ZXg+Ci0gIHN0YXRp
YyB2b2lkIGxvY2soTXV0ZXgmIG11dGV4KSB7Ci0gICAgTG9ja1RyYWl0czxNdXRleD46OmxvY2tf
dXBncmFkZShtdXRleCk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIE11dGV4LCBjbGFzcyBSZXAs
IGNsYXNzIFBlcmlvZD4KLSAgc3RhdGljIGJvb2wgdHJ5X2xvY2tfZm9yKAotICAgICAgTXV0ZXgm
IG11dGV4LAotICAgICAgY29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiYg
dGltZW91dCkgewotICAgIHJldHVybiBMb2NrVHJhaXRzPE11dGV4Pjo6dHJ5X2xvY2tfdXBncmFk
ZV9mb3IobXV0ZXgsIHRpbWVvdXQpOwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBNdXRleD4KLSAg
c3RhdGljIHZvaWQgdW5sb2NrKE11dGV4JiBtdXRleCkgewotICAgIExvY2tUcmFpdHM8TXV0ZXg+
Ojp1bmxvY2tfdXBncmFkZShtdXRleCk7Ci0gIH0KLX07Ci0KLS8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgotICogUG9saWNpZXMgZm9yIGFsbCB0aGUgdHJhbnNpdGlvbnMgZnJvbSBwb3NzaWJsZSBtdXRl
eCBsZXZlbHMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqCi0gKiBBIGxvY2sgcG9saWN5IHdp
dGggdGhlIGZvbGxvd2luZyBtYXBwaW5nCi0gKgotICogIGxvY2soKSAtPiB1bmxvY2tfdXBncmFk
ZV9hbmRfbG9jaygpCi0gKiAgdW5sb2NrKCkgLT4gdW5sb2NrKCkKLSAqICB0cnlfbG9ja19mb3Ig
LT4gdHJ5X3VubG9ja191cGdyYWRlX2FuZF9sb2NrX2ZvcigpCi0gKi8KLXN0cnVjdCBMb2NrUG9s
aWN5RnJvbVVwZ3JhZGVUb0V4Y2x1c2l2ZSA6IHB1YmxpYyBMb2NrUG9saWN5RXhjbHVzaXZlIHsK
LSAgdGVtcGxhdGUgPGNsYXNzIE11dGV4PgotICBzdGF0aWMgdm9pZCBsb2NrKE11dGV4JiBtdXRl
eCkgewotICAgIExvY2tUcmFpdHM8TXV0ZXg+Ojp1bmxvY2tfdXBncmFkZV9hbmRfbG9jayhtdXRl
eCk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIE11dGV4LCBjbGFzcyBSZXAsIGNsYXNzIFBlcmlv
ZD4KLSAgc3RhdGljIGJvb2wgdHJ5X2xvY2tfZm9yKAotICAgICAgTXV0ZXgmIG11dGV4LAotICAg
ICAgY29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiYgdGltZW91dCkgewot
ICAgIHJldHVybiBMb2NrVHJhaXRzPE11dGV4Pjo6dHJ5X3VubG9ja191cGdyYWRlX2FuZF9sb2Nr
X2ZvcihtdXRleCwgdGltZW91dCk7Ci0gIH0KLX07Ci0KLS8qKgotICogQSBsb2NrIHBvbGljeSB3
aXRoIHRoZSBmb2xsb3dpbmcgbWFwcGluZwotICoKLSAqICBsb2NrKCkgLT4gdW5sb2NrX2FuZF9s
b2NrX3VwZ3JhZGUoKQotICogIHVubG9jaygpIC0+IHVubG9ja191cGdyYWRlKCkKLSAqICB0cnlf
bG9ja19mb3IgLT4gdW5sb2NrX2FuZF9sb2NrX3VwZ3JhZGUoKQotICovCi1zdHJ1Y3QgTG9ja1Bv
bGljeUZyb21FeGNsdXNpdmVUb1VwZ3JhZGUgOiBwdWJsaWMgTG9ja1BvbGljeVVwZ3JhZGUgewot
ICB0ZW1wbGF0ZSA8Y2xhc3MgTXV0ZXg+Ci0gIHN0YXRpYyB2b2lkIGxvY2soTXV0ZXgmIG11dGV4
KSB7Ci0gICAgTG9ja1RyYWl0czxNdXRleD46OnVubG9ja19hbmRfbG9ja191cGdyYWRlKG11dGV4
KTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgTXV0ZXgsIGNsYXNzIFJlcCwgY2xhc3MgUGVyaW9k
PgotICBzdGF0aWMgYm9vbCB0cnlfbG9ja19mb3IoCi0gICAgICBNdXRleCYgbXV0ZXgsCi0gICAg
ICBjb25zdCBzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+JikgewotICAgIExvY2tU
cmFpdHM8TXV0ZXg+Ojp1bmxvY2tfYW5kX2xvY2tfdXBncmFkZShtdXRleCk7Ci0KLSAgICAvLyBk
b3duZ3JhZGUgc2hvdWxkIGJlIG5vbiBibG9ja2luZyBhbmQgc2hvdWxkIHN1Y2NlZWQKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfQotfTsKLQotLyoqCi0gKiBBIGxvY2sgcG9saWN5IHdpdGggdGhlIGZv
bGxvd2luZyBtYXBwaW5nCi0gKgotICogIGxvY2soKSAtPiB1bmxvY2tfdXBncmFkZV9hbmRfbG9j
a19zaGFyZWQoKQotICogIHVubG9jaygpIC0+IHVubG9ja19zaGFyZWQoKQotICogIHRyeV9sb2Nr
X2ZvciAtPiB1bmxvY2tfdXBncmFkZV9hbmRfbG9ja19zaGFyZWQoKQotICovCi1zdHJ1Y3QgTG9j
a1BvbGljeUZyb21VcGdyYWRlVG9TaGFyZWQgOiBwdWJsaWMgTG9ja1BvbGljeVNoYXJlZCB7Ci0g
IHRlbXBsYXRlIDxjbGFzcyBNdXRleD4KLSAgc3RhdGljIHZvaWQgbG9jayhNdXRleCYgbXV0ZXgp
IHsKLSAgICBMb2NrVHJhaXRzPE11dGV4Pjo6dW5sb2NrX3VwZ3JhZGVfYW5kX2xvY2tfc2hhcmVk
KG11dGV4KTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgTXV0ZXgsIGNsYXNzIFJlcCwgY2xhc3Mg
UGVyaW9kPgotICBzdGF0aWMgYm9vbCB0cnlfbG9ja19mb3IoCi0gICAgICBNdXRleCYgbXV0ZXgs
Ci0gICAgICBjb25zdCBzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+JikgewotICAg
IExvY2tUcmFpdHM8TXV0ZXg+Ojp1bmxvY2tfdXBncmFkZV9hbmRfbG9ja19zaGFyZWQobXV0ZXgp
OwotCi0gICAgLy8gZG93bmdyYWRlIHNob3VsZCBiZSBub24gYmxvY2tpbmcgYW5kIHNob3VsZCBz
dWNjZWVkCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX07Ci0KLS8qKgotICogQSBsb2NrIHBvbGlj
eSB3aXRoIHRoZSBmb2xsb3dpbmcgbWFwcGluZwotICoKLSAqICBsb2NrKCkgLT4gdW5sb2NrX2Fu
ZF9sb2NrX3NoYXJlZCgpCi0gKiAgdW5sb2NrKCkgLT4gdW5sb2NrX3NoYXJlZCgpCi0gKiAgdHJ5
X2xvY2tfZm9yKCkgLT4gdW5sb2NrX2FuZF9sb2NrX3NoYXJlZCgpCi0gKi8KLXN0cnVjdCBMb2Nr
UG9saWN5RnJvbUV4Y2x1c2l2ZVRvU2hhcmVkIDogcHVibGljIExvY2tQb2xpY3lTaGFyZWQgewot
ICB0ZW1wbGF0ZSA8Y2xhc3MgTXV0ZXg+Ci0gIHN0YXRpYyB2b2lkIGxvY2soTXV0ZXgmIG11dGV4
KSB7Ci0gICAgTG9ja1RyYWl0czxNdXRleD46OnVubG9ja19hbmRfbG9ja19zaGFyZWQobXV0ZXgp
OwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBNdXRleCwgY2xhc3MgUmVwLCBjbGFzcyBQZXJpb2Q+
Ci0gIHN0YXRpYyBib29sIHRyeV9sb2NrX2ZvcigKLSAgICAgIE11dGV4JiBtdXRleCwKLSAgICAg
IGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mKSB7Ci0gICAgTG9ja1Ry
YWl0czxNdXRleD46OnVubG9ja19hbmRfbG9ja19zaGFyZWQobXV0ZXgpOwotCi0gICAgLy8gZG93
bmdyYWRlIHNob3VsZCBiZSBub24gYmxvY2tpbmcgYW5kIHNob3VsZCBzdWNjZWVkCi0gICAgcmV0
dXJuIHRydWU7Ci0gIH0KLX07Ci0KLX0gLy8gZm9sbHkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L01hbGxvYy5oIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvTWFsbG9jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNiN2JmZTM3YmQ1N2M3MjAyNzkxM2IzZGI0YmViYWM3MWY3ZGZjMGEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvTWFsbG9jLmgKKysrIC9kZXYvbnVsbApAQCAtMSwz
MDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8v
IEZ1bmN0aW9ucyB0byBwcm92aWRlIHNtYXJ0ZXIgdXNlIG9mIGplbWFsbG9jLCBpZiBqZW1hbGxv
YyBpcyBiZWluZyB1c2VkLgotLy8gaHR0cDovL3d3dy5jYW5vbndhcmUuY29tL2Rvd25sb2FkL2pl
bWFsbG9jL2plbWFsbG9jLWxhdGVzdC9kb2MvamVtYWxsb2MuaHRtbAotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L0NvbmZpZy5oPgotCi0vKioKLSAqIERlZmlu
ZSB2YXJpb3VzIE1BTExPQ1hfKiBtYWNyb3Mgbm9ybWFsbHkgcHJvdmlkZWQgYnkgamVtYWxsb2Mu
ICBXZSBkZWZpbmUKLSAqIHRoZW0gc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGluY2x1ZGUgamVt
YWxsb2MuaCwgaW4gY2FzZSB0aGUgcHJvZ3JhbSBpcwotICogYnVpbHQgd2l0aG91dCBqZW1hbGxv
YyBzdXBwb3J0LgotICovCi0jaWYgZGVmaW5lZChVU0VfSkVNQUxMT0MpIHx8IGRlZmluZWQoRk9M
TFlfVVNFX0pFTUFMTE9DKQotLy8gV2UgaGF2ZSBKRU1hbGxvYywgc28gdXNlIGl0LgotIyBpbmNs
dWRlIDxqZW1hbGxvYy9qZW1hbGxvYy5oPgotI2Vsc2UKLSMgaWZuZGVmIE1BTExPQ1hfTEdfQUxJ
R04KLSMgIGRlZmluZSBNQUxMT0NYX0xHX0FMSUdOKGxhKSAobGEpCi0jIGVuZGlmCi0jIGlmbmRl
ZiBNQUxMT0NYX1pFUk8KLSMgIGRlZmluZSBNQUxMT0NYX1pFUk8gKHN0YXRpY19jYXN0PGludD4o
MHg0MCkpCi0jIGVuZGlmCi0jZW5kaWYKLQotLy8gSWYgdXNpbmcgZmJzdHJpbmcgZnJvbSBsaWJz
dGRjKysgKHNlZSBjb21tZW50IGluIEZCU3RyaW5nLmgpLCB0aGVuCi0vLyBqdXN0IGRlZmluZSBz
dHViIGNvZGUgaGVyZSB0byB0eXBlZGVmIHRoZSBmYnN0cmluZyB0eXBlIGludG8gdGhlCi0vLyBm
b2xseSBuYW1lc3BhY2UuCi0vLyBUaGlzIHByb3ZpZGVzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5
IGZvciBjb2RlIHRoYXQgZXhwbGljaXRseQotLy8gaW5jbHVkZXMgYW5kIHVzZXMgZmJzdHJpbmcu
Ci0jaWYgZGVmaW5lZChfR0xJQkNYWF9VU0VfRkIpICYmICFkZWZpbmVkKF9MSUJTVERDWFhfRkJT
VFJJTkcpCi0KLSNpbmNsdWRlIDxmb2xseS9kZXRhaWwvTWFsbG9jSW1wbC5oPgotI2luY2x1ZGUg
PGZvbGx5L3BvcnRhYmlsaXR5L0JpdHNGdW5jdGV4Y2VwdC5oPgotCi0jaW5jbHVkZSA8c3RyaW5n
PgotCi1uYW1lc3BhY2UgZm9sbHkgewotICB1c2luZyBzdGQ6Omdvb2RNYWxsb2NTaXplOwotICB1
c2luZyBzdGQ6OmplbWFsbG9jTWluSW5QbGFjZUV4cGFuZGFibGU7Ci0gIHVzaW5nIHN0ZDo6dXNp
bmdKRU1hbGxvYzsKLSAgdXNpbmcgc3RkOjpzbWFydFJlYWxsb2M7Ci0gIHVzaW5nIHN0ZDo6Y2hl
Y2tlZE1hbGxvYzsKLSAgdXNpbmcgc3RkOjpjaGVja2VkQ2FsbG9jOwotICB1c2luZyBzdGQ6OmNo
ZWNrZWRSZWFsbG9jOwotfQotCi0jZWxzZSAvLyAhZGVmaW5lZChfR0xJQkNYWF9VU0VfRkIpIHx8
IGRlZmluZWQoX0xJQlNURENYWF9GQlNUUklORykKLQotI2lmZGVmIF9MSUJTVERDWFhfRkJTVFJJ
TkcKLSNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKLQotLyoqCi0gKiBEZWNsYXJlICphbGxvY3go
KSBhbmQgbWFsbGN0bCooKSBhcyB3ZWFrIHN5bWJvbHMuIFRoZXNlIHdpbGwgYmUgcHJvdmlkZWQg
YnkKLSAqIGplbWFsbG9jIGlmIHdlIGFyZSB1c2luZyBqZW1hbGxvYywgb3Igd2lsbCBiZSBudWxs
cHRyIGlmIHdlIGFyZSB1c2luZyBhbm90aGVyCi0gKiBtYWxsb2MgaW1wbGVtZW50YXRpb24uCi0g
Ki8KLWV4dGVybiAiQyIgdm9pZCogbWFsbG9jeChzaXplX3QsIGludCkKLV9fYXR0cmlidXRlX18o
KF9fd2Vha19fKSk7Ci1leHRlcm4gIkMiIHZvaWQqIHJhbGxvY3godm9pZCosIHNpemVfdCwgaW50
KQotX19hdHRyaWJ1dGVfXygoX193ZWFrX18pKTsKLWV4dGVybiAiQyIgc2l6ZV90IHhhbGxvY3go
dm9pZCosIHNpemVfdCwgc2l6ZV90LCBpbnQpCi1fX2F0dHJpYnV0ZV9fKChfX3dlYWtfXykpOwot
ZXh0ZXJuICJDIiBzaXplX3Qgc2FsbG9jeChjb25zdCB2b2lkKiwgaW50KQotX19hdHRyaWJ1dGVf
XygoX193ZWFrX18pKTsKLWV4dGVybiAiQyIgdm9pZCBkYWxsb2N4KHZvaWQqLCBpbnQpCi1fX2F0
dHJpYnV0ZV9fKChfX3dlYWtfXykpOwotZXh0ZXJuICJDIiB2b2lkIHNkYWxsb2N4KHZvaWQqLCBz
aXplX3QsIGludCkKLV9fYXR0cmlidXRlX18oKF9fd2Vha19fKSk7Ci1leHRlcm4gIkMiIHNpemVf
dCBuYWxsb2N4KHNpemVfdCwgaW50KQotX19hdHRyaWJ1dGVfXygoX193ZWFrX18pKTsKLWV4dGVy
biAiQyIgaW50IG1hbGxjdGwoY29uc3QgY2hhciosIHZvaWQqLCBzaXplX3QqLCB2b2lkKiwgc2l6
ZV90KQotX19hdHRyaWJ1dGVfXygoX193ZWFrX18pKTsKLWV4dGVybiAiQyIgaW50IG1hbGxjdGxu
YW1ldG9taWIoY29uc3QgY2hhciosIHNpemVfdCosIHNpemVfdCopCi1fX2F0dHJpYnV0ZV9fKChf
X3dlYWtfXykpOwotZXh0ZXJuICJDIiBpbnQgbWFsbGN0bGJ5bWliKGNvbnN0IHNpemVfdCosIHNp
emVfdCwgdm9pZCosIHNpemVfdCosIHZvaWQqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCkKLV9fYXR0cmlidXRlX18oKF9fd2Vha19fKSk7Ci0KLSNpbmNsdWRlIDxiaXRzL2Z1
bmN0ZXhjZXB0Lmg+Ci0KLSNkZWZpbmUgRk9MTFlfSEFWRV9NQUxMT0NfSCAxCi0KLSNlbHNlIC8v
ICFkZWZpbmVkKF9MSUJTVERDWFhfRkJTVFJJTkcpCi0KLSNpbmNsdWRlIDxmb2xseS9kZXRhaWwv
TWFsbG9jSW1wbC5oPiAvKiBub2xpbnQgKi8KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9C
aXRzRnVuY3RleGNlcHQuaD4gLyogbm9saW50ICovCi0KLSNlbmRpZgotCi0vLyBmb3IgbWFsbG9j
X3VzYWJsZV9zaXplCi0vLyBOT1RFOiBGcmVlQlNEIDkgZG9lc24ndCBoYXZlIG1hbGxvYy5oLiAg
SXRzIGRlZmluaXRpb25zCi0vLyBhcmUgZm91bmQgaW4gc3RkbGliLmguCi0jaWYgRk9MTFlfSEFW
RV9NQUxMT0NfSAotI2luY2x1ZGUgPG1hbGxvYy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdGRsaWIu
aD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxjc3RkZGVmPgotI2lu
Y2x1ZGUgPGNzdGRpbnQ+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxjc3RyaW5nPgot
Ci0jaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPG5ldz4KLQotI2lmZGVmIF9MSUJTVERDWFhf
RkJTVFJJTkcKLW5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KSB7Ci1f
R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgotI2Vsc2UKLW5hbWVzcGFjZSBmb2xseSB7
Ci0jZW5kaWYKLQotLy8gQ2Fubm90IGRlcGVuZCBvbiBQb3J0YWJpbGl0eS5oIHdoZW4gX0xJQlNU
RENYWF9GQlNUUklORy4KLSNpZiBkZWZpbmVkKF9fR05VQ19fKQotI2RlZmluZSBGT0xMWV9NQUxM
T0NfTk9JTkxJTkUgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkKLSNpZiAoX19HTlVDX18g
KiAxMDAwMCArIF9fR05VQ19NSU5PUl9fICogMTAwICsgX19HTlVDX1BBVENITEVWRUwpID49IDQw
OTAwCi0vLyBUaGlzIGlzIGZvciBjaGVja2VkIG1hbGxvYy1saWtlIGZ1bmN0aW9ucyAocmV0dXJu
cyBub24tbnVsbCBwb2ludGVyCi0vLyB3aGljaCBjYW5ub3QgYWxpYXMgYW55IG91dHN0YW5kaW5n
IHBvaW50ZXIpLgotI2RlZmluZSBGT0xMWV9NQUxMT0NfQ0hFQ0tFRF9NQUxMT0MgICAgICAgICAg
ICAgICAgICAgICBcCi0gIF9fYXR0cmlidXRlX18oKF9fcmV0dXJuc19ub25udWxsX18sIF9fbWFs
bG9jX18pKQotI2Vsc2UKLSNkZWZpbmUgRk9MTFlfTUFMTE9DX0NIRUNLRURfTUFMTE9DIF9fYXR0
cmlidXRlX18oKF9fbWFsbG9jX18pKQotI2VuZGlmCi0jZWxzZQotI2RlZmluZSBGT0xMWV9NQUxM
T0NfTk9JTkxJTkUKLSNkZWZpbmUgRk9MTFlfTUFMTE9DX0NIRUNLRURfTUFMTE9DCi0jZW5kaWYK
LQotLyoqCi0gKiBEZXRlcm1pbmUgaWYgd2UgYXJlIHVzaW5nIGplbWFsbG9jIG9yIG5vdC4KLSAq
LwotRk9MTFlfTUFMTE9DX05PSU5MSU5FIGlubGluZSBib29sIHVzaW5nSkVNYWxsb2MoKSBub2V4
Y2VwdCB7Ci0gIC8vIENoZWNraW5nIGZvciByYWxsb2N4ICE9IG51bGxwdHIgaXMgbm90IHN1ZmZp
Y2llbnQ7IHdlIG1heSBiZSBpbiBhCi0gIC8vIGRsb3BlbigpZWQgbW9kdWxlIHRoYXQgZGVwZW5k
cyBvbiBsaWJqZW1hbGxvYywgc28gcmFsbG9jeCBpcyByZXNvbHZlZCwgYnV0Ci0gIC8vIHRoZSBt
YWluIHByb2dyYW0gbWlnaHQgYmUgdXNpbmcgYSBkaWZmZXJlbnQgbWVtb3J5IGFsbG9jYXRvci4K
LSAgLy8gSG93IGRvIHdlIGRldGVybWluZSB0aGF0IHdlJ3JlIHVzaW5nIGplbWFsbG9jPyBJbiB0
aGUgaGFja2llc3QKLSAgLy8gd2F5IHBvc3NpYmxlLiBXZSBhbGxvY2F0ZSBtZW1vcnkgdXNpbmcg
bWFsbG9jKCkgYW5kIHNlZSBpZiB0aGUKLSAgLy8gcGVyLXRocmVhZCBjb3VudGVyIG9mIGFsbG9j
YXRlZCBtZW1vcnkgaW5jcmVhc2VzLiBUaGlzIG1ha2VzIG1lCi0gIC8vIGZlZWwgZGlydHkgaW5z
aWRlLiBBbHNvIG5vdGUgdGhhdCB0aGlzIHJlcXVpcmVzIGplbWFsbG9jIHRvIGhhdmUKLSAgLy8g
YmVlbiBjb21waWxlZCB3aXRoIC0tZW5hYmxlLXN0YXRzLgotICBzdGF0aWMgY29uc3QgYm9vbCBy
ZXN1bHQgPSBbXSAoKSBub2V4Y2VwdCB7Ci0gICAgLy8gU29tZSBwbGF0Zm9ybXMgKCpjb3VnaCog
T1NYICpjb3VnaCopIHJlcXVpcmUgd2VhayBzeW1ib2wgY2hlY2tzIHRvIGJlCi0gICAgLy8gaW4g
dGhlIGZvcm0gaWYgKG1hbGxjdGwgIT0gbnVsbHB0cikuIE5vdCBpZiAobWFsbGN0bCkgb3IgaWYg
KCFtYWxsY3RsKQotICAgIC8vICghISkuIGh0dHA6Ly9nb28uZ2wveHBtY3RtCi0gICAgaWYgKG1h
bGxvY3ggPT0gbnVsbHB0ciB8fCByYWxsb2N4ID09IG51bGxwdHIgfHwgeGFsbG9jeCA9PSBudWxs
cHRyCi0gICAgICAgIHx8IHNhbGxvY3ggPT0gbnVsbHB0ciB8fCBkYWxsb2N4ID09IG51bGxwdHIg
fHwgc2RhbGxvY3ggPT0gbnVsbHB0cgotICAgICAgICB8fCBuYWxsb2N4ID09IG51bGxwdHIgfHwg
bWFsbGN0bCA9PSBudWxscHRyCi0gICAgICAgIHx8IG1hbGxjdGxuYW1ldG9taWIgPT0gbnVsbHB0
ciB8fCBtYWxsY3RsYnltaWIgPT0gbnVsbHB0cikgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vICJ2b2xhdGlsZSIgYmVjYXVzZSBnY2Mgb3B0aW1pemVzIG91dCB0aGUgcmVh
ZHMgZnJvbSAqY291bnRlciwgYmVjYXVzZQotICAgIC8vIGl0ICJrbm93cyIgbWFsbG9jIGRvZXNu
J3QgbW9kaWZ5IGdsb2JhbCBzdGF0ZS4uLgotICAgIC8qIG5vbGludCAqLyB2b2xhdGlsZSB1aW50
NjRfdCogY291bnRlcjsKLSAgICBzaXplX3QgY291bnRlckxlbiA9IHNpemVvZih1aW50NjRfdCop
OwotCi0gICAgaWYgKG1hbGxjdGwoInRocmVhZC5hbGxvY2F0ZWRwIiwgc3RhdGljX2Nhc3Q8dm9p
ZCo+KCZjb3VudGVyKSwgJmNvdW50ZXJMZW4sCi0gICAgICAgICAgICAgICAgbnVsbHB0ciwgMCkg
IT0gMCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChjb3VudGVyTGVu
ICE9IHNpemVvZih1aW50NjRfdCopKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgdWludDY0X3Qgb3JpZ0FsbG9jYXRlZCA9ICpjb3VudGVyOwotCi0gICAgLy8gU3RhdGljIGJl
Y2F1c2Ugb3RoZXJ3aXNlIGNsZXZlciBjb21waWxlcnMgd2lsbCBmaW5kIG91dCB0aGF0Ci0gICAg
Ly8gdGhlIHB0ciBpcyBub3QgdXNlZCBhbmQgZG9lcyBub3QgZXNjYXBlIHRoZSBzY29wZSwgc28g
dGhleSB3aWxsCi0gICAgLy8ganVzdCBvcHRpbWl6ZSBhd2F5IHRoZSBtYWxsb2MuCi0gICAgc3Rh
dGljIGNvbnN0IHZvaWQqIHB0ciA9IG1hbGxvYygxKTsKLSAgICBpZiAoIXB0cikgewotICAgICAg
Ly8gd3RmLCBmYWlsaW5nIHRvIGFsbG9jYXRlIDEgYnl0ZQotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiAob3JpZ0FsbG9jYXRlZCAhPSAqY291bnRlcik7Ci0gIH0oKTsK
LQotICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgc2l6ZV90IGdvb2RNYWxsb2NTaXplKHNp
emVfdCBtaW5TaXplKSBub2V4Y2VwdCB7Ci0gIGlmIChtaW5TaXplID09IDApIHsKLSAgICByZXR1
cm4gMDsKLSAgfQotCi0gIGlmICghdXNpbmdKRU1hbGxvYygpKSB7Ci0gICAgLy8gTm90IHVzaW5n
IGplbWFsbG9jIC0gbm8gc21hcnRzCi0gICAgcmV0dXJuIG1pblNpemU7Ci0gIH0KLQotICByZXR1
cm4gbmFsbG9jeChtaW5TaXplLCAwKTsKLX0KLQotLy8gV2UgYWx3YXlzIHJlcXVlc3QgImdvb2Qi
IHNpemVzIGZvciBhbGxvY2F0aW9uLCBzbyBqZW1hbGxvYyBjYW4KLS8vIG5ldmVyIGdyb3cgaW4g
cGxhY2Ugc21hbGwgYmxvY2tzOyB0aGV5J3JlIGFscmVhZHkgb2NjdXBpZWQgdG8gdGhlCi0vLyBi
cmltLiAgQmxvY2tzIGxhcmdlciB0aGFuIG9yIGVxdWFsIHRvIDQwOTYgYnl0ZXMgY2FuIGluIGZh
Y3QgYmUKLS8vIGV4cGFuZGVkIGluIHBsYWNlLCBhbmQgdGhpcyBjb25zdGFudCByZWZsZWN0cyB0
aGF0Lgotc3RhdGljIGNvbnN0IHNpemVfdCBqZW1hbGxvY01pbkluUGxhY2VFeHBhbmRhYmxlID0g
NDA5NjsKLQotLyoqCi0gKiBUcml2aWFsIHdyYXBwZXJzIGFyb3VuZCBtYWxsb2MsIGNhbGxvYywg
cmVhbGxvYyB0aGF0IGNoZWNrIGZvciBhbGxvY2F0aW9uCi0gKiBmYWlsdXJlIGFuZCB0aHJvdyBz
dGQ6OmJhZF9hbGxvYyBpbiB0aGF0IGNhc2UuCi0gKi8KLWlubGluZSB2b2lkKiBjaGVja2VkTWFs
bG9jKHNpemVfdCBzaXplKSB7Ci0gIHZvaWQqIHAgPSBtYWxsb2Moc2l6ZSk7Ci0gIGlmICghcCkg
c3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOwotICByZXR1cm4gcDsKLX0KLQotaW5saW5lIHZvaWQq
IGNoZWNrZWRDYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBzaXplKSB7Ci0gIHZvaWQqIHAgPSBjYWxs
b2Mobiwgc2l6ZSk7Ci0gIGlmICghcCkgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOwotICByZXR1
cm4gcDsKLX0KLQotaW5saW5lIHZvaWQqIGNoZWNrZWRSZWFsbG9jKHZvaWQqIHB0ciwgc2l6ZV90
IHNpemUpIHsKLSAgdm9pZCogcCA9IHJlYWxsb2MocHRyLCBzaXplKTsKLSAgaWYgKCFwKSBzdGQ6
Ol9fdGhyb3dfYmFkX2FsbG9jKCk7Ci0gIHJldHVybiBwOwotfQotCi0vKioKLSAqIFRoaXMgZnVu
Y3Rpb24gdHJpZXMgdG8gcmVhbGxvY2F0ZSBhIGJ1ZmZlciBvZiB3aGljaCBvbmx5IHRoZSBmaXJz
dAotICogY3VycmVudFNpemUgYnl0ZXMgYXJlIHVzZWQuIFRoZSBwcm9ibGVtIHdpdGggdXNpbmcg
cmVhbGxvYyBpcyB0aGF0Ci0gKiBpZiBjdXJyZW50U2l6ZSBpcyByZWxhdGl2ZWx5IHNtYWxsIF9h
bmRfIGlmIHJlYWxsb2MgZGVjaWRlcyBpdAotICogbmVlZHMgdG8gbW92ZSB0aGUgbWVtb3J5IGNo
dW5rIHRvIGEgbmV3IGJ1ZmZlciwgdGhlbiByZWFsbG9jIGVuZHMKLSAqIHVwIGNvcHlpbmcgZGF0
YSB0aGF0IGlzIG5vdCB1c2VkLiBJdCdzIGltcG9zc2libGUgdG8gaG9vayBpbnRvCi0gKiBHTlUn
cyBtYWxsb2MgdG8gZmlndXJlIHdoZXRoZXIgZXhwYW5zaW9uIHdpbGwgb2NjdXIgaW4tcGxhY2Ug
b3IgYXMKLSAqIGEgbWFsbG9jLWNvcHktZnJlZSB0cm9pa2EuIChJZiBhbiBleHBhbmRfaW5fcGxh
Y2UgcHJpbWl0aXZlIHdvdWxkCi0gKiBiZSBhdmFpbGFibGUsIHNtYXJ0UmVhbGxvYyB3b3VsZCB1
c2UgaXQuKSBBcyB0aGluZ3Mgc3RhbmQsIHRoaXMKLSAqIHJvdXRpbmUganVzdCB0cmllcyB0byBj
YWxsIHJlYWxsb2MoKSAodGh1cyBiZW5lZml0dGluZyBvZiBwb3RlbnRpYWwKLSAqIGNvcHktZnJl
ZSBjb2FsZXNjaW5nKSB1bmxlc3MgdGhlcmUncyB0b28gbXVjaCBzbGFjayBtZW1vcnkuCi0gKi8K
LUZPTExZX01BTExPQ19DSEVDS0VEX01BTExPQyBGT0xMWV9NQUxMT0NfTk9JTkxJTkUgaW5saW5l
IHZvaWQqIHNtYXJ0UmVhbGxvYygKLSAgICB2b2lkKiBwLAotICAgIGNvbnN0IHNpemVfdCBjdXJy
ZW50U2l6ZSwKLSAgICBjb25zdCBzaXplX3QgY3VycmVudENhcGFjaXR5LAotICAgIGNvbnN0IHNp
emVfdCBuZXdDYXBhY2l0eSkgewotICBhc3NlcnQocCk7Ci0gIGFzc2VydChjdXJyZW50U2l6ZSA8
PSBjdXJyZW50Q2FwYWNpdHkgJiYKLSAgICAgICAgIGN1cnJlbnRDYXBhY2l0eSA8IG5ld0NhcGFj
aXR5KTsKLQotICBpZiAodXNpbmdKRU1hbGxvYygpKSB7Ci0gICAgLy8gdXNpbmcgamVtYWxsb2Mn
cyBBUEkuIERvbid0IGZvcmdldCB0aGF0IGplbWFsbG9jIGNhbiBuZXZlciBncm93Ci0gICAgLy8g
aW4gcGxhY2UgYmxvY2tzIHNtYWxsZXIgdGhhbiA0MDk2IGJ5dGVzLgotICAgIC8vCi0gICAgLy8g
TkI6IG5ld0NhcGFjaXR5IG1heSBub3QgYmUgcHJlY2lzZWx5IGVxdWFsIHRvIGEgamVtYWxsb2Mg
c2l6ZSBjbGFzcywKLSAgICAvLyBpLmUuIG5ld0NhcGFjaXR5IGlzIG5vdCBndWFyYW50ZWVkIHRv
IGJlIHRoZSByZXN1bHQgb2YgYQotICAgIC8vIGdvb2RNYWxsb2NTaXplKCkgY2FsbCwgdGhlcmVm
b3JlIHhhbGxvY3goKSBtYXkgcmV0dXJuIG1vcmUgdGhhbgotICAgIC8vIG5ld0NhcGFjaXR5IGJ5
dGVzIG9mIHNwYWNlLiAgVXNlID49IHJhdGhlciB0aGFuID09IHRvIGNoZWNrIHdoZXRoZXIKLSAg
ICAvLyB4YWxsb2N4KCkgc3VjY2Vzc2Z1bGx5IGV4cGFuZGVkIGluIHBsYWNlLgotICAgIGlmIChj
dXJyZW50Q2FwYWNpdHkgPj0gamVtYWxsb2NNaW5JblBsYWNlRXhwYW5kYWJsZSAmJgotICAgICAg
ICB4YWxsb2N4KHAsIG5ld0NhcGFjaXR5LCAwLCAwKSA+PSBuZXdDYXBhY2l0eSkgewotICAgICAg
Ly8gTWFuYWdlZCB0byBleHBhbmQgaW4gcGxhY2UKLSAgICAgIHJldHVybiBwOwotICAgIH0KLSAg
ICAvLyBDYW5ub3QgZXhwYW5kOyBtdXN0IG1vdmUKLSAgICBhdXRvIGNvbnN0IHJlc3VsdCA9IGNo
ZWNrZWRNYWxsb2MobmV3Q2FwYWNpdHkpOwotICAgIHN0ZDo6bWVtY3B5KHJlc3VsdCwgcCwgY3Vy
cmVudFNpemUpOwotICAgIGZyZWUocCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8v
IE5vIGplbWFsbG9jIG5vIGhvbmV5Ci0gIGF1dG8gY29uc3Qgc2xhY2sgPSBjdXJyZW50Q2FwYWNp
dHkgLSBjdXJyZW50U2l6ZTsKLSAgaWYgKHNsYWNrICogMiA+IGN1cnJlbnRTaXplKSB7Ci0gICAg
Ly8gVG9vIG11Y2ggc2xhY2ssIG1hbGxvYy1jb3B5LWZyZWUgY3ljbGU6Ci0gICAgYXV0byBjb25z
dCByZXN1bHQgPSBjaGVja2VkTWFsbG9jKG5ld0NhcGFjaXR5KTsKLSAgICBzdGQ6Om1lbWNweShy
ZXN1bHQsIHAsIGN1cnJlbnRTaXplKTsKLSAgICBmcmVlKHApOwotICAgIHJldHVybiByZXN1bHQ7
Ci0gIH0KLSAgLy8gSWYgdGhlcmUncyBub3QgdG9vIG11Y2ggc2xhY2ssIHdlIHJlYWxsb2MgaW4g
aG9wZSBvZiBjb2FsZXNjaW5nCi0gIHJldHVybiBjaGVja2VkUmVhbGxvYyhwLCBuZXdDYXBhY2l0
eSk7Ci19Ci0KLSNpZmRlZiBfTElCU1REQ1hYX0ZCU1RSSU5HCi1fR0xJQkNYWF9FTkRfTkFNRVNQ
QUNFX1ZFUlNJT04KLSNlbmRpZgotCi19IC8vIGZvbGx5Ci0KLSNlbmRpZiAvLyAhZGVmaW5lZChf
R0xJQkNYWF9VU0VfRkIpIHx8IGRlZmluZWQoX0xJQlNURENYWF9GQlNUUklORykKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L01lbW9yeS5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvTWVtb3J5LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MmQ2NGRjNjhkYTViNmU5OTdmNmFjYjQ5ZTkyYmU1
ZDBkMGE0YjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvTWVtb3J5LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw1NDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29r
LCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u
IDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw
dCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNv
cHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl
bnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxh
dyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRI
T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mg
b3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
bnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Zm9sbHkvVHJhaXRzLmg+Ci0K
LSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8ZXhjZXB0
aW9uPgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3Rk
ZXhjZXB0PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLS8qKgot
ICogRm9yIGV4Y2VwdGlvbiBzYWZldHkgYW5kIGNvbnNpc3RlbmN5IHdpdGggbWFrZV9zaGFyZWQu
IEVyYXNlIG1lIHdoZW4KLSAqIHdlIGhhdmUgc3RkOjptYWtlX3VuaXF1ZSgpLgotICoKLSAqIEBh
dXRob3IgTG91aXMgQnJhbmR5IChsZGJyYW5keUBmYi5jb20pCi0gKiBAYXV0aG9yIFh1IE5pbmcg
KHhuaW5nQGZiLmNvbSkKLSAqLwotCi0jaWYgX19jcGx1c3BsdXMgPj0gMjAxNDAyTCB8fCBfX2Nw
cF9saWJfbWFrZV91bmlxdWUgPj0gMjAxMzA0TCB8fCBcCi0gICAgKF9fQU5EUk9JRF9fICYmIF9f
Y3BsdXNwbHVzID49IDIwMTMwMEwpIHx8IF9NU0NfVkVSID49IDE5MDAKLQotLyogdXNpbmcgb3Zl
cnJpZGUgKi8gdXNpbmcgc3RkOjptYWtlX3VuaXF1ZTsKLQotI2Vsc2UKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6
OmlzX2FycmF5PFQ+Ojp2YWx1ZSwgc3RkOjp1bmlxdWVfcHRyPFQ+Pjo6dHlwZQotbWFrZV91bmlx
dWUoQXJncyYmLi4uIGFyZ3MpIHsKLSAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxUPihuZXcgVChz
dGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsKLX0KLQotLy8gQWxsb3dzICdtYWtlX3VuaXF1
ZTxUW10+KDEwKScuIChOMzY5MCBzMjAuOS4xLjQgcDMtNCkKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2FycmF5PFQ+Ojp2YWx1ZSwgc3RkOjp1
bmlxdWVfcHRyPFQ+Pjo6dHlwZQotbWFrZV91bmlxdWUoY29uc3Qgc2l6ZV90IG4pIHsKLSAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjxUPihuZXcgdHlwZW5hbWUgc3RkOjpyZW1vdmVfZXh0ZW50PFQ+
Ojp0eXBlW25dKCkpOwotfQotCi0vLyBEaXNhbGxvd3MgJ21ha2VfdW5pcXVlPFRbMTBdPigpJy4g
KE4zNjkwIHMyMC45LjEuNCBwNSkKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFy
Z3M+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgc3RkOjpleHRlbnQ8VD46OnZhbHVlICE9
IDAsIHN0ZDo6dW5pcXVlX3B0cjxUPj46OnR5cGUKLW1ha2VfdW5pcXVlKEFyZ3MmJi4uLikgPSBk
ZWxldGU7Ci0KLSNlbmRpZgotCi0vKioKLSAqIHN0YXRpY19mdW5jdGlvbl9kZWxldGVyCi0gKgot
ICogU28geW91IGNhbiB3cml0ZSB0aGlzOgotICoKLSAqICAgICAgdXNpbmcgUlNBX2RlbGV0ZXIg
PSBmb2xseTo6c3RhdGljX2Z1bmN0aW9uX2RlbGV0ZXI8UlNBLCAmUlNBX2ZyZWU+OwotICogICAg
ICBhdXRvIHJzYSA9IHN0ZDo6dW5pcXVlX3B0cjxSU0EsIFJTQV9kZWxldGVyPihSU0FfbmV3KCkp
OwotICogICAgICBSU0FfZ2VuZXJhdGVfa2V5X2V4KHJzYS5nZXQoKSwgYml0cywgZXhwb25lbnQs
IG51bGxwdHIpOwotICogICAgICByc2EgPSBudWxscHRyOyAgLy8gY2FsbHMgUlNBX2ZyZWUocnNh
LmdldCgpKQotICoKLSAqIFRoaXMgd291bGQgYmUgc3dlZXQgYXMgd2VsbCBmb3IgQklPLCBidXQg
dW5mb3J0dW5hdGVseSBCSU9fZnJlZSBoYXMgc2lnbmF0dXJlCi0gKiBpbnQoQklPKikgd2hpbGUg
d2UgcmVxdWlyZSBzaWduYXR1cmUgdm9pZChCSU8qKS4gU28geW91IHdvdWxkIG5lZWQgdG8gbWFr
ZSBhCi0gKiB3cmFwcGVyIGZvciBpdDoKLSAqCi0gKiAgICAgIGlubGluZSB2b2lkIEJJT19mcmVl
X2ZiKEJJTyogYmlvKSB7IENIRUNLX0VRKDEsIEJJT19mcmVlKGJpbykpOyB9Ci0gKiAgICAgIHVz
aW5nIEJJT19kZWxldGVyID0gZm9sbHk6OnN0YXRpY19mdW5jdGlvbl9kZWxldGVyPEJJTywgJkJJ
T19mcmVlX2ZiPjsKLSAqICAgICAgYXV0byBidWYgPSBzdGQ6OnVuaXF1ZV9wdHI8QklPLCBCSU9f
ZGVsZXRlcj4oQklPX25ldyhCSU9fc19tZW0oKSkpOwotICogICAgICBidWYgPSBudWxscHRyOyAg
Ly8gY2FsbHMgQklPX2ZyZWUoYnVmLmdldCgpKQotICovCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB2b2lkKCpmKShUKik+Ci1zdHJ1Y3Qgc3RhdGljX2Z1bmN0aW9uX2RlbGV0ZXIgewotICB2b2lk
IG9wZXJhdG9yKCkoVCogdCkgY29uc3QgewotICAgIGYodCk7Ci0gIH0KLX07Ci0KLS8qKgotICog
IHRvX3NoYXJlZF9wdHIKLSAqCi0gKiAgQ29udmVydCB1bmlxdWVfcHRyIHRvIHNoYXJlZF9wdHIg
d2l0aG91dCBzcGVjaWZ5aW5nIHRoZSB0ZW1wbGF0ZSB0eXBlCi0gKiAgcGFyYW1ldGVyIGFuZCBs
ZXR0aW5nIHRoZSBjb21waWxlciBkZWR1Y2UgaXQuCi0gKgotICogIFNvIHlvdSBjYW4gd3JpdGUg
dGhpczoKLSAqCi0gKiAgICAgIGF1dG8gc3B0ciA9IHRvX3NoYXJlZF9wdHIoZ2V0U29tZXRoaW5n
VW5pcXVlPFQ+KCkpOwotICoKLSAqICBJbnN0ZWFkIG9mIHRoaXM6Ci0gKgotICogICAgICBhdXRv
IHNwdHIgPSBzaGFyZWRfcHRyPFQ+KGdldFNvbWV0aGluZ1VuaXF1ZTxUPigpKTsKLSAqCi0gKiAg
VXNlZnVsIHdoZW4gYFRgIGlzIGxvbmcsIHN1Y2ggYXM6Ci0gKgotICogICAgICB1c2luZyBUID0g
Zm9vYmFyOjpGb29CYXJBc3luY0NsaWVudDsKLSAqLwotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEQ+Ci1zdGQ6OnNoYXJlZF9wdHI8VD4gdG9fc2hhcmVkX3B0cihzdGQ6OnVuaXF1ZV9w
dHI8VCwgRD4mJiBwdHIpIHsKLSAgcmV0dXJuIHN0ZDo6c2hhcmVkX3B0cjxUPihzdGQ6Om1vdmUo
cHRyKSk7Ci19Ci0KLS8qKgotICogIHRvX3dlYWtfcHRyCi0gKgotICogIE1ha2UgYSB3ZWFrX3B0
ciBhbmQgcmV0dXJuIGl0IGZyb20gYSBzaGFyZWRfcHRyIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUK
LSAqICB0ZW1wbGF0ZSB0eXBlIHBhcmFtZXRlciBhbmQgbGV0dGluZyB0aGUgY29tcGlsZXIgZGVk
dWNlIGl0LgotICoKLSAqICBTbyB5b3UgY2FuIHdyaXRlIHRoaXM6Ci0gKgotICogICAgICBhdXRv
IHdwdHIgPSB0b193ZWFrX3B0cihnZXRTb21ldGhpbmdTaGFyZWQ8VD4oKSk7Ci0gKgotICogIElu
c3RlYWQgb2YgdGhpczoKLSAqCi0gKiAgICAgIGF1dG8gd3B0ciA9IHdlYWtfcHRyPFQ+KGdldFNv
bWV0aGluZ1NoYXJlZDxUPigpKTsKLSAqCi0gKiAgVXNlZnVsIHdoZW4gYFRgIGlzIGxvbmcsIHN1
Y2ggYXM6Ci0gKgotICogICAgICB1c2luZyBUID0gZm9vYmFyOjpGb29CYXJBc3luY0NsaWVudDsK
LSAqLwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGQ6OndlYWtfcHRyPFQ+IHRvX3dlYWtfcHRy
KGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxUPiYgcHRyKSB7Ci0gIHJldHVybiBzdGQ6OndlYWtfcHRy
PFQ+KHB0cik7Ci19Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotLyoqCi0gKiBOb3QgYWxsIFNUTCBp
bXBsZW1lbnRhdGlvbnMgZGVmaW5lIDo6ZnJlZSBpbiBhIHdheSB0aGF0IGl0cyBhZGRyZXNzIGNh
biBiZQotICogZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUuIFNvIHdlIG11c3Qgd3JhcCA6OmZy
ZWUgaW4gYSBmdW5jdGlvbiB3aG9zZQotICogYWRkcmVzcyBjYW4gYmUgZGV0ZXJtaW5lZC4KLSAq
LwotaW5saW5lIHZvaWQgU3lzRnJlZSh2b2lkKiBwKSB7Ci0gIDo6ZnJlZShwKTsKLX0KLX0KLQot
dXNpbmcgU3lzQnVmZmVyRGVsZXRlciA9IHN0YXRpY19mdW5jdGlvbl9kZWxldGVyPHZvaWQsICZk
ZXRhaWw6OlN5c0ZyZWU+OwotdXNpbmcgU3lzQnVmZmVyVW5pcXVlUHRyID0gc3RkOjp1bmlxdWVf
cHRyPHZvaWQsIFN5c0J1ZmZlckRlbGV0ZXI+OwotaW5saW5lIFN5c0J1ZmZlclVuaXF1ZVB0ciBh
bGxvY2F0ZV9zeXNfYnVmZmVyKHNpemVfdCBzaXplKSB7Ci0gIHJldHVybiBTeXNCdWZmZXJVbmlx
dWVQdHIoOjptYWxsb2Moc2l6ZSkpOwotfQotCi0vKioKLSAqIEEgU2ltcGxlQWxsb2NhdG9yIG11
c3QgcHJvdmlkZSB0d28gbWV0aG9kczoKLSAqCi0gKiAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3Qg
c2l6ZSk7Ci0gKiAgICB2b2lkIGRlYWxsb2NhdGUodm9pZCogcHRyKTsKLSAqCi0gKiB3aGljaCwg
cmVzcGVjdGl2ZWx5LCBhbGxvY2F0ZSBhIGJsb2NrIG9mIHNpemUgYnl0ZXMgKGFsaWduZWQgdG8g
dGhlCi0gKiBtYXhpbXVtIGFsaWdubWVudCByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSksIHRocm93
aW5nIHN0ZDo6YmFkX2FsbG9jCi0gKiBpZiB0aGUgYWxsb2NhdGlvbiBjYW4ndCBiZSBzYXRpc2Zp
ZWQsIGFuZCBmcmVlIGEgcHJldmlvdXNseQotICogYWxsb2NhdGVkIGJsb2NrLgotICoKLSAqIFN5
c0FsbG9jIHJlc2VtYmxlcyB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yLgotICovCi1jbGFzcyBTeXNB
bGxvYyB7Ci0gcHVibGljOgotICB2b2lkKiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSkgewotICAgIHZv
aWQqIHAgPSA6Om1hbGxvYyhzaXplKTsKLSAgICBpZiAoIXApIHRocm93IHN0ZDo6YmFkX2FsbG9j
KCk7Ci0gICAgcmV0dXJuIHA7Ci0gIH0KLSAgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIHApIHsKLSAg
ICA6OmZyZWUocCk7Ci0gIH0KLX07Ci0KLS8qKgotICogU3RsQWxsb2NhdG9yIHdyYXBzIGEgU2lt
cGxlQWxsb2NhdG9yIGludG8gYSBTVEwtY29tcGxpYW50Ci0gKiBhbGxvY2F0b3IsIG1haW50YWlu
aW5nIGFuIGluc3RhbmNlIHBvaW50ZXIgdG8gdGhlIHNpbXBsZSBhbGxvY2F0b3IKLSAqIG9iamVj
dC4gIFRoZSB1bmRlcmx5aW5nIFNpbXBsZUFsbG9jYXRvciBvYmplY3QgbXVzdCBvdXRsaXZlIGFs
bAotICogaW5zdGFuY2VzIG9mIFN0bEFsbG9jYXRvciB1c2luZyBpdC4KLSAqCi0gKiBCdXQgbm90
ZSB0aGF0IGlmIHlvdSBwYXNzIFN0bEFsbG9jYXRvcjxNYWxsb2NBbGxvY2F0b3IsLi4uPiB0byBh
Ci0gKiBzdGFuZGFyZCBjb250YWluZXIgaXQgd2lsbCBiZSBsYXJnZXIgZHVlIHRvIHRoZSBjb250
YWluZWQgc3RhdGUKLSAqIHBvaW50ZXIuCi0gKgotICogQGF1dGhvcjogVHVkb3IgQm9zbWFuIDx0
dWRvcmJAZmIuY29tPgotICovCi0KLS8vIFRoaXMgd291bGQgYmUgc28gbXVjaCBzaW1wbGVyIHdp
dGggc3RkOjphbGxvY2F0b3JfdHJhaXRzLCBidXQgZ2NjIDQuNi4yCi0vLyBkb2Vzbid0IHN1cHBv
cnQgaXQuCi10ZW1wbGF0ZSA8Y2xhc3MgQWxsb2MsIGNsYXNzIFQ+IGNsYXNzIFN0bEFsbG9jYXRv
cjsKLQotdGVtcGxhdGUgPGNsYXNzIEFsbG9jPiBjbGFzcyBTdGxBbGxvY2F0b3I8QWxsb2MsIHZv
aWQ+IHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwotICB0eXBlZGVmIHZv
aWQqIHBvaW50ZXI7Ci0gIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKLQotICBT
dGxBbGxvY2F0b3IoKSA6IGFsbG9jXyhudWxscHRyKSB7IH0KLSAgZXhwbGljaXQgU3RsQWxsb2Nh
dG9yKEFsbG9jKiBhKSA6IGFsbG9jXyhhKSB7IH0KLQotICBBbGxvYyogYWxsb2MoKSBjb25zdCB7
Ci0gICAgcmV0dXJuIGFsbG9jXzsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBVPiBzdHJ1Y3Qg
cmViaW5kIHsKLSAgICB0eXBlZGVmIFN0bEFsbG9jYXRvcjxBbGxvYywgVT4gb3RoZXI7Ci0gIH07
Ci0KLSAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0bEFsbG9jYXRvcjxBbGxvYywgdm9pZD4mIG90
aGVyKSBjb25zdCB7Ci0gICAgcmV0dXJuIGFsbG9jXyAhPSBvdGhlci5hbGxvY187Ci0gIH0KLQot
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RsQWxsb2NhdG9yPEFsbG9jLCB2b2lkPiYgb3RoZXIp
IGNvbnN0IHsKLSAgICByZXR1cm4gYWxsb2NfID09IG90aGVyLmFsbG9jXzsKLSAgfQotCi0gcHJp
dmF0ZToKLSAgQWxsb2MqIGFsbG9jXzsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBBbGxvYywgY2xh
c3MgVD4KLWNsYXNzIFN0bEFsbG9jYXRvciB7Ci0gcHVibGljOgotICB0eXBlZGVmIFQgdmFsdWVf
dHlwZTsKLSAgdHlwZWRlZiBUKiBwb2ludGVyOwotICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X3Bv
aW50ZXI7Ci0gIHR5cGVkZWYgVCYgcmVmZXJlbmNlOwotICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0
X3JlZmVyZW5jZTsKLQotICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7Ci0gIHR5
cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKLQotICBTdGxBbGxvY2F0b3IoKSA6IGFsbG9jXyhudWxs
cHRyKSB7IH0KLSAgZXhwbGljaXQgU3RsQWxsb2NhdG9yKEFsbG9jKiBhKSA6IGFsbG9jXyhhKSB7
IH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gU3RsQWxsb2NhdG9yKGNvbnN0IFN0bEFsbG9jYXRv
cjxBbGxvYywgVT4mIG90aGVyKQotICAgIDogYWxsb2NfKG90aGVyLmFsbG9jKCkpIHsgfQotCi0g
IFQqIGFsbG9jYXRlKHNpemVfdCBuLCBjb25zdCB2b2lkKiAvKiBoaW50ICovID0gbnVsbHB0cikg
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4oYWxsb2NfLT5hbGxvY2F0ZShuICogc2l6ZW9m
KFQpKSk7Ci0gIH0KLQotICB2b2lkIGRlYWxsb2NhdGUoVCogcCwgc2l6ZV90IC8qIG4gKi8pIHsg
YWxsb2NfLT5kZWFsbG9jYXRlKHApOyB9Ci0KLSAgc2l6ZV90IG1heF9zaXplKCkgY29uc3Qgewot
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOwotICB9Ci0KLSAg
VCogYWRkcmVzcyhUJiB4KSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0ZDo6YWRkcmVzc29mKHgpOwot
ICB9Ci0KLSAgY29uc3QgVCogYWRkcmVzcyhjb25zdCBUJiB4KSBjb25zdCB7Ci0gICAgcmV0dXJu
IHN0ZDo6YWRkcmVzc29mKHgpOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci0g
IHZvaWQgY29uc3RydWN0KFQqIHAsIEFyZ3MmJi4uLiBhcmdzKSB7Ci0gICAgbmV3IChwKSBUKHN0
ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gIH0KLQotICB2b2lkIGRlc3Ryb3koVCogcCkg
ewotICAgIHAtPn5UKCk7Ci0gIH0KLQotICBBbGxvYyogYWxsb2MoKSBjb25zdCB7Ci0gICAgcmV0
dXJuIGFsbG9jXzsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBVPiBzdHJ1Y3QgcmViaW5kIHsK
LSAgICB0eXBlZGVmIFN0bEFsbG9jYXRvcjxBbGxvYywgVT4gb3RoZXI7Ci0gIH07Ci0KLSAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFN0bEFsbG9jYXRvcjxBbGxvYywgVD4mIG90aGVyKSBjb25zdCB7
Ci0gICAgcmV0dXJuIGFsbG9jXyAhPSBvdGhlci5hbGxvY187Ci0gIH0KLQotICBib29sIG9wZXJh
dG9yPT0oY29uc3QgU3RsQWxsb2NhdG9yPEFsbG9jLCBUPiYgb3RoZXIpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gYWxsb2NfID09IG90aGVyLmFsbG9jXzsKLSAgfQotCi0gcHJpdmF0ZToKLSAgQWxsb2Mq
IGFsbG9jXzsKLX07Ci0KLS8qKgotICogSGVscGVyIGZ1bmN0aW9uIHRvIG9idGFpbiByZWJvdW5k
IGFsbG9jYXRvcnMKLSAqCi0gKiBAYXV0aG9yOiBNYXJjZWxvIEp1Y2hlbSA8bWFyY2Vsb0BmYi5j
b20+Ci0gKi8KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBbGxvY2F0b3I+Ci10eXBl
bmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxUPjo6b3RoZXIgcmViaW5kX2FsbG9jYXRv
cigKLSAgQWxsb2NhdG9yIGNvbnN0JiBhbGxvY2F0b3IKLSkgewotICByZXR1cm4gdHlwZW5hbWUg
QWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8VD46Om90aGVyKGFsbG9jYXRvcik7Ci19Ci0KLS8q
Ci0gKiBIZWxwZXIgY2xhc3Nlcy9mdW5jdGlvbnMgZm9yIGNyZWF0aW5nIGEgdW5pcXVlX3B0ciB1
c2luZyBhIGN1c3RvbQotICogYWxsb2NhdG9yLgotICoKLSAqIEBhdXRob3I6IE1hcmNlbG8gSnVj
aGVtIDxtYXJjZWxvQGZiLmNvbT4KLSAqLwotCi0vLyBEZXJpdmVzIGZyb20gdGhlIGFsbG9jYXRv
ciB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZW1wdHkgYmFzZQotLy8gb3B0aW1pemF0aW9uIHdo
ZW4gcG9zc2libGUuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQWxsb2NhdG9yPgotY2xhc3MgYWxsb2Nh
dG9yX2RlbGV0ZQotICA6IHByaXZhdGUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPEFsbG9jYXRvcj46
OnR5cGUKLXsKLSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8QWxsb2Nh
dG9yPjo6dHlwZSBhbGxvY2F0b3JfdHlwZTsKLQotcHVibGljOgotICB0eXBlZGVmIHR5cGVuYW1l
IEFsbG9jYXRvcjo6cG9pbnRlciBwb2ludGVyOwotCi0gIGFsbG9jYXRvcl9kZWxldGUoKSA9IGRl
ZmF1bHQ7Ci0KLSAgZXhwbGljaXQgYWxsb2NhdG9yX2RlbGV0ZShjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgYWxsb2NhdG9yKQotICAgIDogYWxsb2NhdG9yX3R5cGUoYWxsb2NhdG9yKQotICB7fQotCi0g
IGV4cGxpY2l0IGFsbG9jYXRvcl9kZWxldGUoYWxsb2NhdG9yX3R5cGUmJiBhbGxvY2F0b3IpCi0g
ICAgOiBhbGxvY2F0b3JfdHlwZShzdGQ6Om1vdmUoYWxsb2NhdG9yKSkKLSAge30KLQotICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVT4KLSAgYWxsb2NhdG9yX2RlbGV0ZShjb25zdCBhbGxvY2F0b3JfZGVs
ZXRlPFU+JiBvdGhlcikKLSAgICA6IGFsbG9jYXRvcl90eXBlKG90aGVyLmdldF9hbGxvY2F0b3Io
KSkKLSAge30KLQotICBhbGxvY2F0b3JfdHlwZSYgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsKLSAg
ICByZXR1cm4gKmNvbnN0X2Nhc3Q8YWxsb2NhdG9yX2RlbGV0ZSo+KHRoaXMpOwotICB9Ci0KLSAg
dm9pZCBvcGVyYXRvcigpKHBvaW50ZXIgcCkgY29uc3QgewotICAgIGlmICghcCkgcmV0dXJuOwot
ICAgIGNvbnN0X2Nhc3Q8YWxsb2NhdG9yX2RlbGV0ZSo+KHRoaXMpLT5kZXN0cm95KHApOwotICAg
IGNvbnN0X2Nhc3Q8YWxsb2NhdG9yX2RlbGV0ZSo+KHRoaXMpLT5kZWFsbG9jYXRlKHAsIDEpOwot
ICB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxsb2NhdG9yPgotY2xh
c3MgaXNfc2ltcGxlX2FsbG9jYXRvciB7Ci0gIEZPTExZX0NSRUFURV9IQVNfTUVNQkVSX0ZOX1RS
QUlUUyhoYXNfZGVzdHJveSwgZGVzdHJveSk7Ci0KLSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnJl
bW92ZV9jb25zdDwKLSAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8QWxsb2NhdG9y
Pjo6dHlwZQotICA+Ojp0eXBlIGFsbG9jYXRvcjsKLSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnJl
bW92ZV9yZWZlcmVuY2U8VD46OnR5cGUgdmFsdWVfdHlwZTsKLSAgdHlwZWRlZiB2YWx1ZV90eXBl
KiBwb2ludGVyOwotCi1wdWJsaWM6Ci0gIGNvbnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9ICFo
YXNfZGVzdHJveTxhbGxvY2F0b3IsIHZvaWQocG9pbnRlcik+Ojp2YWx1ZQotICAgICYmICFoYXNf
ZGVzdHJveTxhbGxvY2F0b3IsIHZvaWQodm9pZCopPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxsb2NhdG9yPgotc3RydWN0IGFzX3N0bF9hbGxvY2F0b3Ig
ewotICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgaXNfc2ltcGxlX2Fs
bG9jYXRvcjxULCBBbGxvY2F0b3I+Ojp2YWx1ZSwKLSAgICBmb2xseTo6U3RsQWxsb2NhdG9yPAot
ICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPEFsbG9jYXRvcj46OnR5cGUsCi0g
ICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUKLSAgICA+LAotICAg
IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxBbGxvY2F0b3I+Ojp0eXBlCi0gID46OnR5
cGUgdHlwZTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBbGxvY2F0b3I+
Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgaXNfc2ltcGxlX2FsbG9jYXRvcjxULCBBbGxv
Y2F0b3I+Ojp2YWx1ZSwKLSAgZm9sbHk6OlN0bEFsbG9jYXRvcjwKLSAgICB0eXBlbmFtZSBzdGQ6
OnJlbW92ZV9yZWZlcmVuY2U8QWxsb2NhdG9yPjo6dHlwZSwKLSAgICB0eXBlbmFtZSBzdGQ6OnJl
bW92ZV9yZWZlcmVuY2U8VD46OnR5cGUKLSAgPgotPjo6dHlwZSBtYWtlX3N0bF9hbGxvY2F0b3Io
QWxsb2NhdG9yJiYgYWxsb2NhdG9yKSB7Ci0gIHJldHVybiBmb2xseTo6U3RsQWxsb2NhdG9yPAot
ICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxBbGxvY2F0b3I+Ojp0eXBlLAotICAg
IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZQotICA+KCZhbGxvY2F0b3Ip
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxsb2NhdG9yPgotdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8Ci0gICFpc19zaW1wbGVfYWxsb2NhdG9yPFQsIEFsbG9jYXRvcj46
OnZhbHVlLAotICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8QWxsb2NhdG9yPjo6dHlw
ZQotPjo6dHlwZSBtYWtlX3N0bF9hbGxvY2F0b3IoQWxsb2NhdG9yJiYgYWxsb2NhdG9yKSB7Ci0g
IHJldHVybiBzdGQ6Om1vdmUoYWxsb2NhdG9yKTsKLX0KLQotLyoqCi0gKiBBbGxvY2F0b3JVbmlx
dWVQdHI6IGEgdW5pcXVlX3B0ciB0aGF0IHN1cHBvcnRzIGJvdGggU1RMLXN0eWxlCi0gKiBhbGxv
Y2F0b3JzIGFuZCBTaW1wbGVBbGxvY2F0b3IKLSAqCi0gKiBAYXV0aG9yOiBNYXJjZWxvIEp1Y2hl
bSA8bWFyY2Vsb0BmYi5jb20+Ci0gKi8KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEFsbG9jYXRvcj4KLXN0cnVjdCBBbGxvY2F0b3JVbmlxdWVQdHIgewotICB0eXBlZGVmIHN0ZDo6
dW5pcXVlX3B0cjxULAotICAgIGZvbGx5OjphbGxvY2F0b3JfZGVsZXRlPAotICAgICAgdHlwZW5h
bWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgaXNfc2ltcGxlX2FsbG9jYXRvcjxULCBBbGxv
Y2F0b3I+Ojp2YWx1ZSwKLSAgICAgICAgZm9sbHk6OlN0bEFsbG9jYXRvcjx0eXBlbmFtZSBzdGQ6
OnJlbW92ZV9yZWZlcmVuY2U8QWxsb2NhdG9yPjo6dHlwZSwgVD4sCi0gICAgICAgIHR5cGVuYW1l
IHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxBbGxvY2F0b3I+Ojp0eXBlCi0gICAgICA+Ojp0eXBlCi0g
ICAgPgotICA+IHR5cGU7Ci19OwotCi0vKioKLSAqIEZ1bmN0aW9ucyB0byBhbGxvY2F0ZSBhIHVu
aXF1ZV9wdHIgLyBzaGFyZWRfcHRyLCBzdXBwb3J0aW5nIGJvdGgKLSAqIFNUTC1zdHlsZSBhbGxv
Y2F0b3JzIGFuZCBTaW1wbGVBbGxvY2F0b3IsIGFuYWxvZyB0byBzdGQ6OmFsbG9jYXRlX3NoYXJl
ZAotICoKLSAqIEBhdXRob3I6IE1hcmNlbG8gSnVjaGVtIDxtYXJjZWxvQGZiLmNvbT4KLSAqLwot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxsb2NhdG9yLCB0eXBlbmFtZSAuLi5B
cmdzPgotdHlwZW5hbWUgQWxsb2NhdG9yVW5pcXVlUHRyPFQsIEFsbG9jYXRvcj46OnR5cGUgYWxs
b2NhdGVfdW5pcXVlKAotICBBbGxvY2F0b3ImJiBhbGxvY2F0b3IsIEFyZ3MmJi4uLiBhcmdzCi0p
IHsKLSAgYXV0byBzdGxBbGxvY2F0b3IgPSBmb2xseTo6bWFrZV9zdGxfYWxsb2NhdG9yPFQ+KAot
ICAgIHN0ZDo6Zm9yd2FyZDxBbGxvY2F0b3I+KGFsbG9jYXRvcikKLSAgKTsKLSAgYXV0byBwID0g
c3RsQWxsb2NhdG9yLmFsbG9jYXRlKDEpOwotCi0gIHRyeSB7Ci0gICAgc3RsQWxsb2NhdG9yLmNv
bnN0cnVjdChwLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotCi0gICAgcmV0dXJuIHtw
LAotICAgICAgZm9sbHk6OmFsbG9jYXRvcl9kZWxldGU8ZGVjbHR5cGUoc3RsQWxsb2NhdG9yKT4o
c3RkOjptb3ZlKHN0bEFsbG9jYXRvcikpCi0gICAgfTsKLSAgfSBjYXRjaCAoLi4uKSB7Ci0gICAg
c3RsQWxsb2NhdG9yLmRlYWxsb2NhdGUocCwgMSk7Ci0gICAgdGhyb3c7Ci0gIH0KLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFsbG9jYXRvciwgdHlwZW5hbWUgLi4uQXJncz4K
LXN0ZDo6c2hhcmVkX3B0cjxUPiBhbGxvY2F0ZV9zaGFyZWQoQWxsb2NhdG9yJiYgYWxsb2NhdG9y
LCBBcmdzJiYuLi4gYXJncykgewotICByZXR1cm4gc3RkOjphbGxvY2F0ZV9zaGFyZWQ8VD4oCi0g
ICAgZm9sbHk6Om1ha2Vfc3RsX2FsbG9jYXRvcjxUPihzdGQ6OmZvcndhcmQ8QWxsb2NhdG9yPihh
bGxvY2F0b3IpKSwKLSAgICBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4KLSAgKTsKLX0KLQot
LyoqCi0gKiBJc0FyZW5hQWxsb2NhdG9yPFQ+Ojp2YWx1ZSBkZXNjcmliZXMgd2hldGhlciBTaW1w
bGVBbGxvY2F0b3IgaGFzCi0gKiBuby1vcCBkZWFsbG9jYXRlKCkuCi0gKi8KLXRlbXBsYXRlIDxj
bGFzcyBUPiBzdHJ1Y3QgSXNBcmVuYUFsbG9jYXRvciA6IHN0ZDo6ZmFsc2VfdHlwZSB7IH07Ci0K
LS8qCi0gKiBmb2xseTo6ZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMKLSAqCi0gKiBUbyBiZSByZW1v
dmVkIG9uY2UgQysrMTcgYmVjb21lcyBhIG1pbmltdW0gcmVxdWlyZW1lbnQgZm9yIGZvbGx5Lgot
ICovCi0jaWYgX19jcGx1c3BsdXMgPj0gMjAxNzAwTCB8fCBcCi0gICAgX19jcHBfbGliX2VuYWJs
ZV9zaGFyZWRfZnJvbV90aGlzID49IDIwMTYwM0wKLQotLy8gR3VhcmFudGVlZCB0byBoYXZlIHN0
ZDo6ZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM6OndlYWtfZnJvbV90aGlzKCkuIFByZWZlcgotLy8g
dHlwZSBhbGlhcyBvdmVyIG91ciBvd24gY2xhc3MuCi0vKiB1c2luZyBvdmVycmlkZSAqLyB1c2lu
ZyBzdGQ6OmVuYWJsZV9zaGFyZWRfZnJvbV90aGlzOwotCi0jZWxzZQotCi0vKioKLSAqIEV4dGVu
ZHMgc3RkOjplbmFibGVkX3NoYXJlZF9mcm9tX3RoaXMuIE9mZmVycyB3ZWFrX2Zyb21fdGhpcygp
IHRvIHByZS1DKysxNwotICogY29kZS4gVXNlIGFzIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHN0
ZDo6ZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMuCi0gKgotICogQysrMTQgaGFzIG5vIGRpcmVjdCBt
ZWFucyBvZiBjcmVhdGluZyBhIHN0ZDo6d2Vha19wdHIsIG9uZSBtdXN0IGFsd2F5cwotICogY3Jl
YXRlIGEgKHRlbXBvcmFyeSkgc3RkOjpzaGFyZWRfcHRyIGZpcnN0LiBDKysxNyBhZGRzIHdlYWtf
ZnJvbV90aGlzKCkgdG8KLSAqIHN0ZDo6ZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMgdG8gYXZvaWQg
dGhhdCBvdmVyaGVhZC4gQWxhcyBjb2RlIHRoYXQgbXVzdAotICogY29tcGlsZSB1bmRlciBkaWZm
ZXJlbnQgbGFuZ3VhZ2UgdmVyc2lvbnMgY2Fubm90IGNhbGwKLSAqIHN0ZDo6ZW5hYmxlX3NoYXJl
ZF9mcm9tX3RoaXM6OndlYWtfZnJvbV90aGlzKCkgZGlyZWN0bHkuIEhlbmNlIHRoaXMgY2xhc3Mu
Ci0gKgotICogQGV4YW1wbGUKLSAqICAgY2xhc3MgTXlDbGFzcyA6IHB1YmxpYyBmb2xseTo6ZW5h
YmxlX3NoYXJlZF9mcm9tX3RoaXM8TXlDbGFzcz4ge307Ci0gKgotICogICBpbnQgbWFpbigpIHsK
LSAqICAgICBzdGQ6OnNoYXJlZF9wdHI8TXlDbGFzcz4gc3AgPSBzdGQ6Om1ha2Vfc2hhcmVkPE15
Q2xhc3M+KCk7Ci0gKiAgICAgc3RkOjp3ZWFrX3B0cjxNeUNsYXNzPiB3cCA9IHNwLT53ZWFrX2Zy
b21fdGhpcygpOwotICogICB9Ci0gKi8KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgZW5h
YmxlX3NoYXJlZF9mcm9tX3RoaXMgOiBwdWJsaWMgc3RkOjplbmFibGVfc2hhcmVkX2Zyb21fdGhp
czxUPiB7Ci1wdWJsaWM6Ci0gIGNvbnN0ZXhwciBlbmFibGVfc2hhcmVkX2Zyb21fdGhpcygpIG5v
ZXhjZXB0ID0gZGVmYXVsdDsKLQotICBzdGQ6OndlYWtfcHRyPFQ+IHdlYWtfZnJvbV90aGlzKCkg
bm9leGNlcHQgewotICAgIHJldHVybiB3ZWFrX2Zyb21fdGhpc188VD4odGhpcyk7Ci0gIH0KLQot
ICBzdGQ6OndlYWtfcHRyPFQgY29uc3Q+IHdlYWtfZnJvbV90aGlzKCkgY29uc3Qgbm9leGNlcHQg
ewotICAgIHJldHVybiB3ZWFrX2Zyb21fdGhpc188VD4odGhpcyk7Ci0gIH0KLQotcHJpdmF0ZToK
LSAgLy8gVXNlcyBTRklOQUUgdG8gZGV0ZWN0IGFuZCBjYWxsCi0gIC8vIHN0ZDo6ZW5hYmxlX3No
YXJlZF9mcm9tX3RoaXM8VD46OndlYWtfZnJvbV90aGlzKCkgaWYgYXZhaWxhYmxlLiBGYWxscwot
ICAvLyBiYWNrIHRvIHN0ZDo6ZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8VD46OnNoYXJlZF9mcm9t
X3RoaXMoKSBvdGhlcndpc2UuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICBhdXRvIHdlYWtf
ZnJvbV90aGlzXyhzdGQ6OmVuYWJsZV9zaGFyZWRfZnJvbV90aGlzPFU+KiBiYXNlX3B0cikKLSAg
bm9leGNlcHQgLT4gZGVjbHR5cGUoYmFzZV9wdHItPndlYWtfZnJvbV90aGlzKCkpIHsKLSAgICBy
ZXR1cm4gYmFzZV9wdHItPndlYWtfZnJvbV90aGlzKCk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4KLSAgYXV0byB3ZWFrX2Zyb21fdGhpc18oc3RkOjplbmFibGVfc2hhcmVkX2Zyb21f
dGhpczxVPiBjb25zdCogYmFzZV9wdHIpCi0gIGNvbnN0IG5vZXhjZXB0IC0+IGRlY2x0eXBlKGJh
c2VfcHRyLT53ZWFrX2Zyb21fdGhpcygpKSB7Ci0gICAgcmV0dXJuIGJhc2VfcHRyLT53ZWFrX2Zy
b21fdGhpcygpOwotICB9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gIHN0ZDo6d2Vha19w
dHI8VT4gd2Vha19mcm9tX3RoaXNfKC4uLikgbm9leGNlcHQgewotICAgIHRyeSB7Ci0gICAgICBy
ZXR1cm4gdGhpcy0+c2hhcmVkX2Zyb21fdGhpcygpOwotICAgIH0gY2F0Y2ggKHN0ZDo6YmFkX3dl
YWtfcHRyIGNvbnN0JikgewotICAgICAgLy8gQysrMTcgcmVxdWlyZXMgdGhhdCB3ZWFrX2Zyb21f
dGhpcygpIG9uIGFuIG9iamVjdCBub3Qgb3duZWQgYnkgYQotICAgICAgLy8gc2hhcmVkX3B0ciBy
ZXR1cm5zIGFuIGVtcHR5IHdlYWtfcHRyLiBTYWRseSwgaW4gQysrMTQsCi0gICAgICAvLyBzaGFy
ZWRfZnJvbV90aGlzKCkgb24gc3VjaCBhbiBvYmplY3QgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCBh
bmQgdGhlcmUKLSAgICAgIC8vIGlzIG5vdGhpbmcgd2UgY2FuIGRvIHRvIGRldGVjdCBhbmQgaGFu
ZGxlIHRoZSBzaXR1YXRpb24gaW4gYSBwb3J0YWJsZQotICAgICAgLy8gbWFubmVyLiBCdXQgaW4g
Y2FzZSBhIGNvbXBpbGVyIGlzIG5pY2UgZW5vdWdoIHRvIGltcGxlbWVudCBDKysxNwotICAgICAg
Ly8gc2VtYW50aWNzIG9mIHNoYXJlZF9mcm9tX3RoaXMoKSBhbmQgdGhyb3dzIGEgYmFkX3dlYWtf
cHRyLCB3ZSBjYXRjaCBpdAotICAgICAgLy8gYW5kIHJldHVybiBhbiBlbXB0eSB3ZWFrX3B0ci4K
LSAgICAgIHJldHVybiBzdGQ6OndlYWtfcHRyPFU+e307Ci0gICAgfQotICB9Ci0KLSAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+Ci0gIHN0ZDo6d2Vha19wdHI8VSBjb25zdD4gd2Vha19mcm9tX3RoaXNf
KC4uLikgY29uc3Qgbm9leGNlcHQgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gdGhpcy0+c2hh
cmVkX2Zyb21fdGhpcygpOwotICAgIH0gY2F0Y2ggKHN0ZDo6YmFkX3dlYWtfcHRyIGNvbnN0Jikg
ewotICAgICAgcmV0dXJuIHN0ZDo6d2Vha19wdHI8VSBjb25zdD57fTsKLSAgICB9Ci0gIH0KLX07
Ci0KLSNlbmRpZgotCi19ICAvLyBuYW1lc3BhY2UgZm9sbHkKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L01pY3JvU3BpbkxvY2suaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L01pY3JvU3BpbkxvY2suaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUyYzQ0MjBmNjJhMzM5NTNkNjhkOTQ4ODU3MDhl
Y2U2Y2RkZmUwYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9NaWNyb1NwaW5Mb2Nr
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3
IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl
LCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hl
Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBs
aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs
Ci0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVy
IHRoZSBMaWNlbnNlLgotICovCi0KLS8qCi0gKiBOLkIuIFlvdSBtb3N0IGxpa2VseSBkbyBfbm90
XyB3YW50IHRvIHVzZSBNaWNyb1NwaW5Mb2NrIG9yIGFueQotICogb3RoZXIga2luZCBvZiBzcGlu
bG9jay4gIENvbnNpZGVyIE1pY3JvTG9jayBpbnN0ZWFkLgotICoKLSAqIEluIHNob3J0LCBzcGlu
bG9ja3MgaW4gcHJlZW1wdGl2ZSBtdWx0aS10YXNraW5nIG9wZXJhdGluZyBzeXN0ZW1zCi0gKiBo
YXZlIHNlcmlvdXMgcHJvYmxlbXMgYW5kIGZhc3QgbXV0ZXhlcyBsaWtlIHN0ZDo6bXV0ZXggYXJl
IGFsbW9zdAotICogY2VydGFpbmx5IHRoZSBiZXR0ZXIgY2hvaWNlLCBiZWNhdXNlIGxldHRpbmcg
dGhlIE9TIHNjaGVkdWxlciBwdXQgYQotICogdGhyZWFkIHRvIHNsZWVwIGlzIGJldHRlciBmb3Ig
c3lzdGVtIHJlc3BvbnNpdmVuZXNzIGFuZCB0aHJvdWdocHV0Ci0gKiB0aGFuIHdhc3RpbmcgYSB0
aW1lc2xpY2UgcmVwZWF0ZWRseSBxdWVyeWluZyBhIGxvY2sgaGVsZCBieSBhCi0gKiB0aHJlYWQg
dGhhdCdzIGJsb2NrZWQsIGFuZCB5b3UgY2FuJ3QgcHJldmVudCB1c2Vyc3BhY2UKLSAqIHByb2dy
YW1zIGJsb2NraW5nLgotICoKLSAqIFNwaW5sb2NrcyBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtIGtl
cm5lbCBtYWtlIG11Y2ggbW9yZSBzZW5zZSB0aGFuCi0gKiB0aGV5IGRvIGluIHVzZXJzcGFjZS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotLyoKLSAqIEBhdXRob3IgS2VpdGggQWRhbXMgPGttYUBm
Yi5jb20+Ci0gKiBAYXV0aG9yIEpvcmRhbiBEZUxvbmcgPGRlbG9uZy5qQGZiLmNvbT4KLSAqLwot
Ci0jaW5jbHVkZSA8YXJyYXk+Ci0jaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPGNpbnR0eXBl
cz4KLSNpbmNsdWRlIDxjc3RkbGliPgotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHR5cGVf
dHJhaXRzPgotCi0jaW5jbHVkZSA8Ym9vc3Qvbm9uY29weWFibGUuaHBwPgotI2luY2x1ZGUgPGds
b2cvbG9nZ2luZy5oPgotCi0jaW5jbHVkZSA8Zm9sbHkvUG9ydGFiaWxpdHkuaD4KLSNpbmNsdWRl
IDxmb2xseS9kZXRhaWwvU2xlZXBlci5oPgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi0vKgotICog
QSByZWFsbHksICpyZWFsbHkqIHNtYWxsIHNwaW5sb2NrIGZvciBmaW5lLWdyYWluZWQgbG9ja2lu
ZyBvZiBsb3RzCi0gKiBvZiB0ZWVueS10aW55IGRhdGEuCi0gKgotICogWmVybyBpbml0aWFsaXpp
bmcgdGhlc2UgaXMgZ3VhcmFudGVlZCB0byBiZSBhcyBnb29kIGFzIGNhbGxpbmcKLSAqIGluaXQo
KSwgc2luY2UgdGhlIGZyZWUgc3RhdGUgaXMgZ3VhcmFudGVlZCB0byBiZSBhbGwtYml0cyB6ZXJv
LgotICoKLSAqIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGtlcHQgYSBQT0QsIHNvIHdlIGNhbiB1c2Vk
IGl0IGluIG90aGVyIHBhY2tlZAotICogc3RydWN0cyAoZ2NjIGRvZXMgbm90IGFsbG93IF9fYXR0
cmlidXRlX18oKF9fcGFja2VkX18pKSBvbiBzdHJ1Y3RzIHRoYXQKLSAqIGNvbnRhaW4gbm9uLVBP
RCBkYXRhKS4gIFRoaXMgbWVhbnMgYXZvaWQgYWRkaW5nIGEgY29uc3RydWN0b3IsIG9yCi0gKiBt
YWtpbmcgc29tZSBtZW1iZXJzIHByaXZhdGUsIGV0Yy4KLSAqLwotc3RydWN0IE1pY3JvU3Bpbkxv
Y2sgewotICBlbnVtIHsgRlJFRSA9IDAsIExPQ0tFRCA9IDEgfTsKLSAgLy8gbG9ja18gY2FuJ3Qg
YmUgc3RkOjphdG9taWM8PiB0byBwcmVzZXJ2ZSBQT0QtbmVzcy4KLSAgdWludDhfdCBsb2NrXzsK
LQotICAvLyBJbml0aWFsaXplIHRoaXMgTVNMLiAgSXQgaXMgdW5uZWNlc3NhcnkgdG8gY2FsbCB0
aGlzIGlmIHlvdQotICAvLyB6ZXJvLWluaXRpYWxpemUgdGhlIE1pY3JvU3BpbkxvY2suCi0gIHZv
aWQgaW5pdCgpIHsKLSAgICBwYXlsb2FkKCktPnN0b3JlKEZSRUUpOwotICB9Ci0KLSAgYm9vbCB0
cnlfbG9jaygpIHsKLSAgICByZXR1cm4gY2FzKEZSRUUsIExPQ0tFRCk7Ci0gIH0KLQotICB2b2lk
IGxvY2soKSB7Ci0gICAgZGV0YWlsOjpTbGVlcGVyIHNsZWVwZXI7Ci0gICAgZG8gewotICAgICAg
d2hpbGUgKHBheWxvYWQoKS0+bG9hZCgpICE9IEZSRUUpIHsKLSAgICAgICAgc2xlZXBlci53YWl0
KCk7Ci0gICAgICB9Ci0gICAgfSB3aGlsZSAoIXRyeV9sb2NrKCkpOwotICAgIERDSEVDSyhwYXls
b2FkKCktPmxvYWQoKSA9PSBMT0NLRUQpOwotICB9Ci0KLSAgdm9pZCB1bmxvY2soKSB7Ci0gICAg
Q0hFQ0socGF5bG9hZCgpLT5sb2FkKCkgPT0gTE9DS0VEKTsKLSAgICBwYXlsb2FkKCktPnN0b3Jl
KEZSRUUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICB9Ci0KLSBwcml2YXRlOgotICBz
dGQ6OmF0b21pYzx1aW50OF90PiogcGF5bG9hZCgpIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxzdGQ6OmF0b21pYzx1aW50OF90Pio+KCZ0aGlzLT5sb2NrXyk7Ci0gIH0KLQotICBib29s
IGNhcyh1aW50OF90IGNvbXBhcmUsIHVpbnQ4X3QgbmV3VmFsKSB7Ci0gICAgcmV0dXJuIHN0ZDo6
YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KHBheWxvYWQoKSwgJmNvbXBh
cmUsIG5ld1ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJf
cmVsYXhlZCk7Ci0gIH0KLX07Ci1zdGF0aWNfYXNzZXJ0KAotICAgIHN0ZDo6aXNfcG9kPE1pY3Jv
U3BpbkxvY2s+Ojp2YWx1ZSwKLSAgICAiTWljcm9TcGluTG9jayBtdXN0IGJlIGtlcHQgYSBQT0Qg
dHlwZS4iKTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKioKLSAqIEFycmF5IG9mIHNwaW5sb2NrcyB3
aGVyZSBlYWNoIG9uZSBpcyBwYWRkZWQgdG8gcHJldmVudCBmYWxzZSBzaGFyaW5nLgotICogVXNl
ZnVsIGZvciBzaGFyZC1iYXNlZCBsb2NraW5nIGltcGxlbWVudGF0aW9ucyBpbiBlbnZpcm9ubWVu
dHMgd2hlcmUKLSAqIGNvbnRlbnRpb24gaXMgdW5saWtlbHkuCi0gKi8KLQotLy8gVE9ETzogZ2Vu
ZXJhdGUgaXQgZnJvbSBjb25maWd1cmUgKGBnZXRjb25mIExFVkVMMV9EQ0FDSEVfTElORVNJWkVg
KQotI2RlZmluZSBGT0xMWV9DQUNIRV9MSU5FX1NJWkUgNjQKLQotdGVtcGxhdGUgPGNsYXNzIFQs
IHNpemVfdCBOPgotc3RydWN0IEZPTExZX0FMSUdORURfTUFYIFNwaW5Mb2NrQXJyYXkgewotICBU
JiBvcGVyYXRvcltdKHNpemVfdCBpKSB7Ci0gICAgcmV0dXJuIGRhdGFfW2ldLmxvY2s7Ci0gIH0K
LQotICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7Ci0gICAgcmV0dXJuIGRh
dGFfW2ldLmxvY2s7Ci0gIH0KLQotICBjb25zdGV4cHIgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBOOyB9Ci0KLSBwcml2YXRlOgotICBzdHJ1Y3QgUGFkZGVkU3BpbkxvY2sgewotICAgIFBh
ZGRlZFNwaW5Mb2NrKCkgOiBsb2NrKCkge30KLSAgICBUIGxvY2s7Ci0gICAgY2hhciBwYWRkaW5n
W0ZPTExZX0NBQ0hFX0xJTkVfU0laRSAtIHNpemVvZihUKV07Ci0gIH07Ci0gIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKFBhZGRlZFNwaW5Mb2NrKSA9PSBGT0xMWV9DQUNIRV9MSU5FX1NJWkUsCi0gICAg
ICAgICAgICAgICAgIkludmFsaWQgc2l6ZSBvZiBQYWRkZWRTcGluTG9jayIpOwotCi0gIC8vIENo
ZWNrIGlmIFQgY2FuIHRoZW9yZXRpY2FsbHkgY3Jvc3MgYSBjYWNoZSBsaW5lLgotICBzdGF0aWNf
YXNzZXJ0KAotICAgICAgZm9sbHk6Om1heF9hbGlnbl92ID4gMCAmJgotICAgICAgICAgIEZPTExZ
X0NBQ0hFX0xJTkVfU0laRSAlIGZvbGx5OjptYXhfYWxpZ25fdiA9PSAwICYmCi0gICAgICAgICAg
c2l6ZW9mKFQpIDw9IGZvbGx5OjptYXhfYWxpZ25fdiwKLSAgICAgICJUIGNhbiBjcm9zcyBjYWNo
ZSBsaW5lIGJvdW5kYXJpZXMiKTsKLQotICBjaGFyIHBhZGRpbmdfW0ZPTExZX0NBQ0hFX0xJTkVf
U0laRV07Ci0gIHN0ZDo6YXJyYXk8UGFkZGVkU3BpbkxvY2ssIE4+IGRhdGFfOwotfTsKLQotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotCi10eXBlZGVmIHN0ZDo6bG9ja19ndWFyZDxNaWNyb1NwaW5Mb2NrPiBNU0xH
dWFyZDsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9Qb3J0YWJpbGl0eS5oIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvUG9ydGFiaWxpdHkuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNDIzYzlhMmNhMDQzOWEwZGFlMjE3NTgwYzkxNDlmOTI3OGVhYjNkNS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9Qb3J0YWJpbGl0eS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDA5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5j
LgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAg
KHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4g
Y29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9m
IHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
TElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig
YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUg
TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8
Y3N0ZGRlZj4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLQotI2luY2x1ZGUgPGZvbGx5L3BvcnRh
YmlsaXR5L0NvbmZpZy5oPgotCi0jaW5jbHVkZSA8Zm9sbHkvQ1BvcnRhYmlsaXR5Lmg+Ci0KLS8v
IFVuYWxpZ25lZCBsb2FkcyBhbmQgc3RvcmVzCi1uYW1lc3BhY2UgZm9sbHkgewotI2lmIEZPTExZ
X0hBVkVfVU5BTElHTkVEX0FDQ0VTUwotY29uc3RleHByIGJvb2wga0hhc1VuYWxpZ25lZEFjY2Vz
cyA9IHRydWU7Ci0jZWxzZQotY29uc3RleHByIGJvb2wga0hhc1VuYWxpZ25lZEFjY2VzcyA9IGZh
bHNlOwotI2VuZGlmCi0KLW5hbWVzcGFjZSBwb3J0YWJpbGl0eV9kZXRhaWwgewotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgSSwgSSBBLCBJIEI+Ci11c2luZyBpbnRlZ3JhbF9tYXggPSBzdGQ6OmludGVn
cmFsX2NvbnN0YW50PEksIChBIDwgQikgPyBCIDogQT47Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBJ
LCBJIEEsIEkuLi4gQnM+Ci1zdHJ1Y3QgaW50ZWdyYWxfc2VxdWVuY2VfbWF4Ci0gICAgOiBpbnRl
Z3JhbF9tYXg8SSwgQSwgaW50ZWdyYWxfc2VxdWVuY2VfbWF4PEksIEJzLi4uPjo6dmFsdWU+IHt9
OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSSwgSSBBPgotc3RydWN0IGludGVncmFsX3NlcXVlbmNl
X21heDxJLCBBPiA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8SSwgQT4ge307Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZS4uLiBUcz4KLXVzaW5nIG1heF9hbGlnbm1lbnQgPSBpbnRlZ3JhbF9zZXF1ZW5j
ZV9tYXg8c2l6ZV90LCBhbGlnbm9mKFRzKS4uLj47Ci0KLXVzaW5nIG1heF9iYXNpY19hbGlnbm1l
bnQgPSBtYXhfYWxpZ25tZW50PAotICAgIHN0ZDo6bWF4X2FsaWduX3QsCi0gICAgbG9uZyBkb3Vi
bGUsCi0gICAgZG91YmxlLAotICAgIGZsb2F0LAotICAgIGxvbmcgbG9uZyBpbnQsCi0gICAgbG9u
ZyBpbnQsCi0gICAgaW50LAotICAgIHNob3J0IGludCwKLSAgICBib29sLAotICAgIGNoYXIsCi0g
ICAgY2hhcjE2X3QsCi0gICAgY2hhcjMyX3QsCi0gICAgd2NoYXJfdCwKLSAgICBzdGQ6Om51bGxw
dHJfdD47Ci19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotY29uc3RleHByIHNpemVfdCBtYXhfYWxp
Z25fdiA9IHBvcnRhYmlsaXR5X2RldGFpbDo6bWF4X2Jhc2ljX2FsaWdubWVudDo6dmFsdWU7Ci0K
LS8vIG1heF9hbGlnbl90IGlzIGEgdHlwZSB3aGljaCBpcyBhbGlnbmVkIGF0IGxlYXN0IGFzIHN0
cmljdGx5IGFzIHRoZQotLy8gbW9zdC1hbGlnbmVkIGJhc2ljIHR5cGUgKHNlZSB0aGUgc3BlY2lm
aWNhdGlvbiBvZiBzdGQ6Om1heF9hbGlnbl90KS4gVGhpcwotLy8gaW1wbGVtZW50YXRpb24gZXhp
c3RzIGJlY2F1c2UgMzItYml0IGlPUyBwbGF0Zm9ybXMgaGF2ZSBhIGJyb2tlbgotLy8gc3RkOjpt
YXhfYWxpZ25fdCAoc2VlIGJlbG93KS4KLS8vCi0vLyBZb3Ugc2hvdWxkIHJlZmVyIHRvIHRoaXMg
YXMgYDo6Zm9sbHk6Om1heF9hbGlnbl90YCBpbiBwb3J0YWJsZSBjb2RlLCBldmVuIGlmCi0vLyB5
b3UgaGF2ZSBgdXNpbmcgbmFtZXNwYWNlIGZvbGx5O2AgYmVjYXVzZSBDMTEgZGVmaW5lcyBhIGds
b2JhbCBuYW1lc3BhY2UKLS8vIGBtYXhfYWxpZ25fdGAgdHlwZS4KLS8vCi0vLyBUbyBiZSBjZXJ0
YWluLCB3ZSBjb25zaWRlciBldmVyeSBub24tdm9pZCBmdW5kYW1lbnRhbCB0eXBlIHNwZWNpZmll
ZCBieSB0aGUKLS8vIHN0YW5kYXJkLiBPbiBtb3N0IHBsYXRmb3JtcyBgbG9uZyBkb3VibGVgIHdv
dWxkIGJlIGVub3VnaCwgYnV0IGlPUyAzMi1iaXQKLS8vIGhhcyBhbiA4LWJ5dGUgYWxpZ25lZCBg
ZG91YmxlYCBhbmQgYGxvbmcgbG9uZyBpbnRgIGFuZCBhIDQtYnl0ZSBhbGlnbmVkCi0vLyBgbG9u
ZyBkb3VibGVgLgotLy8KLS8vIFNvIGZhciB3ZSd2ZSBjb3ZlcmVkIGxvY2FscyBhbmQgb3RoZXIg
bm9uLWFsbG9jYXRlZCBzdG9yYWdlLCBidXQgd2UgYWxzbyBuZWVkCi0vLyBjb25maWRlbmNlIHRo
YXQgYWxsb2NhdGVkIHN0b3JhZ2UgZnJvbSBgbWFsbG9jYCwgYG5ld2AsIGV0YyB3aWxsIGFsc28g
YmUKLS8vIHN1aXRhYmxlIGZvciBvYmplY3RzIHdpdGggdGhpcyBhbGlnbm1lbnQgcmV1aXJlbWVu
dC4KLS8vCi0vLyBBcHBsZSBkb2N1bWVudCB0aGF0IHRoZWlyIGltcGxlbWVudGF0aW9uIG9mIG1h
bGxvYyB3aWxsIGlzc3VlIDE2LWJ5dGUKLS8vIGdyYW51bGFyaXR5IGNodW5rcyBmb3Igc21hbGwg
YWxsb2NhdGlvbnMgKGxhcmdlIGFsbG9jYXRpb25zIGFyZSBwYWdlLXNpemUKLS8vIGdyYW51bGFy
aXR5IGFuZCBwYWdlLWFsaWduZWQpLiBXZSB0aGluayB0aGF0IGFsbG9jYXRlZCBzdG9yYWdlIHdp
bGwgYmUKLS8vIHN1aXRhYmxlIGZvciB0aGVzZSBvYmplY3RzIGJhc2VkIG9uIHRoZSBmb2xsb3dp
bmcgYXNzdW1wdGlvbnM6Ci0vLwotLy8gMS4gMTYtYnl0ZSBncmFudWxhcml0eSBhbHNvIG1lYW5z
IDE2LWJ5dGUgYWxpZ25lZC4KLS8vIDIuIGBuZXdgIGFuZCBvdGhlciBhbGxvY2F0b3JzIGZvbGxv
dyB0aGUgYG1hbGxvY2AgcnVsZXMuCi0vLwotLy8gV2UgYWxzbyBoYXZlIHNvbWUgYW5lY2RvdGFs
IGV2aWRlbmNlOiB3ZSBkb24ndCBzZWUgbG90cyBvZiBtaXNhbGlnbmVkLXN0b3JhZ2UKLS8vIGNy
YXNoZXMgb24gMzItYml0IGlPUyBhcHBzIHRoYXQgdXNlIGBkb3VibGVgLgotLy8KLS8vIEFwcGxl
J3MgYWxsb2NhdGlvbiByZWZlcmVuY2U6IGh0dHA6Ly9iaXQubHkvbWFsbG9jLXNtYWxsCi1zdHJ1
Y3QgYWxpZ25hcyhtYXhfYWxpZ25fdikgbWF4X2FsaWduX3Qge307Ci0KLX0gLy8gbmFtZXNwYWNl
IGZvbGx5Ci0KLS8vIGNvbXBpbGVyIHNwZWNpZmljIGF0dHJpYnV0ZSB0cmFuc2xhdGlvbgotLy8g
bXN2YyBzaG91bGQgY29tZSBmaXJzdCwgc28gaWYgY2xhbmcgaXMgaW4gbXN2YyBtb2RlIGl0IGdl
dHMgdGhlIHJpZ2h0IGRlZmluZXMKLQotI2lmIGRlZmluZWQoX19jbGFuZ19fKSB8fCBkZWZpbmVk
KF9fR05VQ19fKQotIyBkZWZpbmUgRk9MTFlfQUxJR05FRChzaXplKSBfX2F0dHJpYnV0ZV9fKChf
X2FsaWduZWRfXyhzaXplKSkpCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyBkZWZpbmUgRk9M
TFlfQUxJR05FRChzaXplKSBfX2RlY2xzcGVjKGFsaWduKHNpemUpKQotI2Vsc2UKLSMgZXJyb3Ig
Q2Fubm90IGRlZmluZSBGT0xMWV9BTElHTkVEIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotI2Rl
ZmluZSBGT0xMWV9BTElHTkVEX01BWCBGT0xMWV9BTElHTkVEKDo6Zm9sbHk6Om1heF9hbGlnbl92
KQotCi0vLyBOT1RFOiB0aGlzIHdpbGwgb25seSBkbyBjaGVja2luZyBpbiBtc3ZjIHdpdGggdmVy
c2lvbnMgdGhhdCBzdXBwb3J0IC9hbmFseXplCi0jaWYgX01TQ19WRVIKLSMgaWZkZWYgX1VTRV9B
VFRSSUJVVEVTX0ZPUl9TQUwKLSMgICAgdW5kZWYgX1VTRV9BVFRSSUJVVEVTX0ZPUl9TQUwKLSMg
ZW5kaWYKLS8qIG5vbGludCAqLwotIyBkZWZpbmUgX1VTRV9BVFRSSUJVVEVTX0ZPUl9TQUwgMQot
IyBpbmNsdWRlIDxzYWwuaD4gLy8gQG1hbnVhbAotIyBkZWZpbmUgRk9MTFlfUFJJTlRGX0ZPUk1B
VCBfUHJpbnRmX2Zvcm1hdF9zdHJpbmdfCi0jIGRlZmluZSBGT0xMWV9QUklOVEZfRk9STUFUX0FU
VFIoZm9ybWF0X3BhcmFtLCBkb3RzX3BhcmFtKSAvKiovCi0jZWxzZQotIyBkZWZpbmUgRk9MTFlf
UFJJTlRGX0ZPUk1BVCAvKiovCi0jIGRlZmluZSBGT0xMWV9QUklOVEZfRk9STUFUX0FUVFIoZm9y
bWF0X3BhcmFtLCBkb3RzX3BhcmFtKSBcCi0gIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18oX19w
cmludGZfXywgZm9ybWF0X3BhcmFtLCBkb3RzX3BhcmFtKSkpCi0jZW5kaWYKLQotLy8gZGVwcmVj
YXRlZAotI2lmIGRlZmluZWQoX19jbGFuZ19fKSB8fCBkZWZpbmVkKF9fR05VQ19fKQotIyBkZWZp
bmUgRk9MTFlfREVQUkVDQVRFRChtc2cpIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKG1z
ZykpKQotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLSMgZGVmaW5lIEZPTExZX0RFUFJFQ0FURUQo
bXNnKSBfX2RlY2xzcGVjKGRlcHJlY2F0ZWQobXNnKSkKLSNlbHNlCi0jIGRlZmluZSBGT0xMWV9E
RVBSRUNBVEVEKG1zZykKLSNlbmRpZgotCi0vLyB3YXJuIHVudXNlZCByZXN1bHQKLSNpZiBkZWZp
bmVkKF9faGFzX2NwcF9hdHRyaWJ1dGUpCi0jaWYgX19oYXNfY3BwX2F0dHJpYnV0ZShub2Rpc2Nh
cmQpCi0jZGVmaW5lIEZPTExZX05PRElTQ0FSRCBbW25vZGlzY2FyZF1dCi0jZW5kaWYKLSNlbmRp
ZgotI2lmICFkZWZpbmVkIEZPTExZX05PRElTQ0FSRAotI2lmIGRlZmluZWQoX01TQ19WRVIpICYm
IChfTVNDX1ZFUiA+PSAxNzAwKQotI2RlZmluZSBGT0xMWV9OT0RJU0NBUkQgX0NoZWNrX3JldHVy
bl8KLSNlbGlmIGRlZmluZWQoX19jbGFuZ19fKSB8fCBkZWZpbmVkKF9fR05VQ19fKQotI2RlZmlu
ZSBGT0xMWV9OT0RJU0NBUkQgX19hdHRyaWJ1dGVfXygoX193YXJuX3VudXNlZF9yZXN1bHRfXykp
Ci0jZWxzZQotI2RlZmluZSBGT0xMWV9OT0RJU0NBUkQKLSNlbmRpZgotI2VuZGlmCi0KLS8vIHRh
cmdldAotI2lmZGVmIF9NU0NfVkVSCi0jIGRlZmluZSBGT0xMWV9UQVJHRVRfQVRUUklCVVRFKHRh
cmdldCkKLSNlbHNlCi0jIGRlZmluZSBGT0xMWV9UQVJHRVRfQVRUUklCVVRFKHRhcmdldCkgX19h
dHRyaWJ1dGVfXygoX190YXJnZXRfXyh0YXJnZXQpKSkKLSNlbmRpZgotCi0vLyBkZXRlY3Rpb24g
Zm9yIDY0IGJpdAotI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9YNjQpCi0j
IGRlZmluZSBGT0xMWV9YNjQgMQotI2Vsc2UKLSMgZGVmaW5lIEZPTExZX1g2NCAwCi0jZW5kaWYK
LQotI2lmIGRlZmluZWQoX19hYXJjaDY0X18pCi0jIGRlZmluZSBGT0xMWV9BNjQgMQotI2Vsc2UK
LSMgZGVmaW5lIEZPTExZX0E2NCAwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKF9fcG93ZXJwYzY0
X18pCi0jIGRlZmluZSBGT0xMWV9QUEM2NCAxCi0jZWxzZQotIyBkZWZpbmUgRk9MTFlfUFBDNjQg
MAotI2VuZGlmCi0KLW5hbWVzcGFjZSBmb2xseSB7Ci1jb25zdGV4cHIgYm9vbCBrSXNBcmNoQW1k
NjQgPSBGT0xMWV9YNjQgPT0gMTsKLWNvbnN0ZXhwciBib29sIGtJc0FyY2hBQXJjaDY0ID0gRk9M
TFlfQTY0ID09IDE7Ci1jb25zdGV4cHIgYm9vbCBrSXNBcmNoUFBDNjQgPSBGT0xMWV9QUEM2NCA9
PSAxOwotfQotCi1uYW1lc3BhY2UgZm9sbHkgewotCi0jaWYgRk9MTFlfU0FOSVRJWkVfQUREUkVT
UwotY29uc3RleHByIGJvb2wga0lzU2FuaXRpemVBZGRyZXNzID0gdHJ1ZTsKLSNlbHNlCi1jb25z
dGV4cHIgYm9vbCBrSXNTYW5pdGl6ZUFkZHJlc3MgPSBmYWxzZTsKLSNlbmRpZgotCi0jaWYgRk9M
TFlfU0FOSVRJWkVfVEhSRUFECi1jb25zdGV4cHIgYm9vbCBrSXNTYW5pdGl6ZVRocmVhZCA9IHRy
dWU7Ci0jZWxzZQotY29uc3RleHByIGJvb2wga0lzU2FuaXRpemVUaHJlYWQgPSBmYWxzZTsKLSNl
bmRpZgotfQotCi0vLyBwYWNraW5nIGlzIHZlcnkgdWdseSBpbiBtc3ZjCi0jaWZkZWYgX01TQ19W
RVIKLSMgZGVmaW5lIEZPTExZX1BBQ0tfQVRUUiAvKiovCi0jIGRlZmluZSBGT0xMWV9QQUNLX1BV
U0ggX19wcmFnbWEocGFjayhwdXNoLCAxKSkKLSMgZGVmaW5lIEZPTExZX1BBQ0tfUE9QIF9fcHJh
Z21hKHBhY2socG9wKSkKLSNlbGlmIGRlZmluZWQoX19jbGFuZ19fKSB8fCBkZWZpbmVkKF9fR05V
Q19fKQotIyBkZWZpbmUgRk9MTFlfUEFDS19BVFRSIF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18p
KQotIyBkZWZpbmUgRk9MTFlfUEFDS19QVVNIIC8qKi8KLSMgZGVmaW5lIEZPTExZX1BBQ0tfUE9Q
IC8qKi8KLSNlbHNlCi0jIGRlZmluZSBGT0xMWV9QQUNLX0FUVFIgLyoqLwotIyBkZWZpbmUgRk9M
TFlfUEFDS19QVVNIIC8qKi8KLSMgZGVmaW5lIEZPTExZX1BBQ0tfUE9QIC8qKi8KLSNlbmRpZgot
Ci0vLyBHZW5lcmFsaXplIHdhcm5pbmcgcHVzaC9wb3AuCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikK
LSMgZGVmaW5lIEZPTExZX1BVU0hfV0FSTklORyBfX3ByYWdtYSh3YXJuaW5nKHB1c2gpKQotIyBk
ZWZpbmUgRk9MTFlfUE9QX1dBUk5JTkcgX19wcmFnbWEod2FybmluZyhwb3ApKQotLy8gRGlzYWJs
ZSB0aGUgR0NDIHdhcm5pbmdzLgotIyBkZWZpbmUgRk9MTFlfR0NDX0RJU0FCTEVfV0FSTklORyh3
YXJuaW5nTmFtZSkKLSMgZGVmaW5lIEZPTExZX01TVkNfRElTQUJMRV9XQVJOSU5HKHdhcm5pbmdO
dW1iZXIpIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTogd2FybmluZ051bWJlcikpCi0jZWxpZiBk
ZWZpbmVkKF9fY2xhbmdfXykgfHwgZGVmaW5lZChfX0dOVUNfXykKLSMgZGVmaW5lIEZPTExZX1BV
U0hfV0FSTklORyBfUHJhZ21hKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikKLSMgZGVmaW5lIEZPTExZ
X1BPUF9XQVJOSU5HIF9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIHBvcCIpCi0jIGRlZmluZSBGT0xM
WV9HQ0NfRElTQUJMRV9XQVJOSU5HX0lOVEVSTkFMMih3YXJuaW5nTmFtZSkgI3dhcm5pbmdOYW1l
Ci0jIGRlZmluZSBGT0xMWV9HQ0NfRElTQUJMRV9XQVJOSU5HKHdhcm5pbmdOYW1lKSBcCi0gIF9Q
cmFnbWEoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZPTExZX0dD
Q19ESVNBQkxFX1dBUk5JTkdfSU5URVJOQUwyKEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgd2Fybmlu
Z05hbWUpKQotLy8gRGlzYWJsZSB0aGUgTVNWQyB3YXJuaW5ncy4KLSMgZGVmaW5lIEZPTExZX01T
VkNfRElTQUJMRV9XQVJOSU5HKHdhcm5pbmdOdW1iZXIpCi0jZWxzZQotIyBkZWZpbmUgRk9MTFlf
UFVTSF9XQVJOSU5HCi0jIGRlZmluZSBGT0xMWV9QT1BfV0FSTklORwotIyBkZWZpbmUgRk9MTFlf
R0NDX0RJU0FCTEVfV0FSTklORyh3YXJuaW5nTmFtZSkKLSMgZGVmaW5lIEZPTExZX01TVkNfRElT
QUJMRV9XQVJOSU5HKHdhcm5pbmdOdW1iZXIpCi0jZW5kaWYKLQotI2lmZGVmIEZPTExZX0hBVkVf
U0hBRE9XX0xPQ0FMX1dBUk5JTkdTCi0jZGVmaW5lIEZPTExZX0dDQ19ESVNBQkxFX05FV19TSEFE
T1dfV0FSTklOR1MgICAgICAgIFwKLSAgRk9MTFlfR0NDX0RJU0FCTEVfV0FSTklORygiLVdzaGFk
b3ctY29tcGF0aWJsZS1sb2NhbCIpIFwKLSAgRk9MTFlfR0NDX0RJU0FCTEVfV0FSTklORygiLVdz
aGFkb3ctbG9jYWwiKQotI2Vsc2UKLSNkZWZpbmUgRk9MTFlfR0NDX0RJU0FCTEVfTkVXX1NIQURP
V19XQVJOSU5HUyAvKiBlbXB0eSAqLwotI2VuZGlmCi0KLS8qIFBsYXRmb3JtIHNwZWNpZmljIFRM
UyBzdXBwb3J0Ci0gKiBnY2MgaW1wbGVtZW50cyBfX3RocmVhZAotICogbXN2YyBpbXBsZW1lbnRz
IF9fZGVjbHNwZWModGhyZWFkKQotICogdGhlIHNlbWFudGljcyBhcmUgdGhlIHNhbWUKLSAqIChi
dXQgcmVtZW1iZXIgX190aHJlYWQgaGFzIGRpZmZlcmVudCBzZW1hbnRpY3Mgd2hlbiB1c2luZyBl
bXV0bHMgKGV4LiBhcHBsZSkpCi0gKi8KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyBkZWZpbmUg
Rk9MTFlfVExTIF9fZGVjbHNwZWModGhyZWFkKQotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgfHwg
ZGVmaW5lZChfX2NsYW5nX18pCi0jIGRlZmluZSBGT0xMWV9UTFMgX190aHJlYWQKLSNlbHNlCi0j
IGVycm9yIGNhbm5vdCBkZWZpbmUgcGxhdGZvcm0gc3BlY2lmaWMgdGhyZWFkIGxvY2FsIHN0b3Jh
Z2UKLSNlbmRpZgotCi0jaWYgRk9MTFlfTU9CSUxFCi0jdW5kZWYgRk9MTFlfVExTCi0jZW5kaWYK
LQotLy8gSXQgdHVybnMgb3V0IHRoYXQgR05VIGxpYnN0ZGMrKyBhbmQgTExWTSBsaWJjKysgZGlm
ZmVyIG9uIGhvdyB0aGV5IGltcGxlbWVudAotLy8gdGhlICdzdGQnIG5hbWVzcGFjZTsgdGhlIGxh
dHRlciB1c2VzIGlubGluZSBuYW1lc3BhY2VzLiBXcmFwIHRoaXMgZGVjaXNpb24KLS8vIHVwIGlu
IGEgbWFjcm8gdG8gbWFrZSBmb3J3YXJkLWRlY2xhcmF0aW9ucyBlYXNpZXIuCi0jaWYgRk9MTFlf
VVNFX0xJQkNQUAotI2luY2x1ZGUgPF9fY29uZmlnPiAvLyBAbWFudWFsCi0jZGVmaW5lIEZPTExZ
X05BTUVTUEFDRV9TVERfQkVHSU4gICAgIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX1NURAotI2Rl
ZmluZSBGT0xMWV9OQU1FU1BBQ0VfU1REX0VORCAgICAgICBfTElCQ1BQX0VORF9OQU1FU1BBQ0Vf
U1RECi0jZWxzZQotI2RlZmluZSBGT0xMWV9OQU1FU1BBQ0VfU1REX0JFR0lOICAgICBuYW1lc3Bh
Y2Ugc3RkIHsKLSNkZWZpbmUgRk9MTFlfTkFNRVNQQUNFX1NURF9FTkQgICAgICAgfQotI2VuZGlm
Ci0KLS8vIElmIHRoZSBuZXcgYysrIEFCSSBpcyB1c2VkLCBfX2N4eDExIGlubGluZSBuYW1lc3Bh
Y2UgbmVlZHMgdG8gYmUgYWRkZWQgdG8KLS8vIHNvbWUgdHlwZXMsIGUuZy4gc3RkOjpsaXN0Lgot
I2lmIF9HTElCQ1hYX1VTRV9DWFgxMV9BQkkKLSNkZWZpbmUgRk9MTFlfR0xJQkNYWF9OQU1FU1BB
Q0VfQ1hYMTFfQkVHSU4gXAotICBpbmxpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NYWDEx
Ci0jIGRlZmluZSBGT0xMWV9HTElCQ1hYX05BTUVTUEFDRV9DWFgxMV9FTkQgICBfR0xJQkNYWF9F
TkRfTkFNRVNQQUNFX0NYWDExCi0jZWxzZQotIyBkZWZpbmUgRk9MTFlfR0xJQkNYWF9OQU1FU1BB
Q0VfQ1hYMTFfQkVHSU4KLSMgZGVmaW5lIEZPTExZX0dMSUJDWFhfTkFNRVNQQUNFX0NYWDExX0VO
RAotI2VuZGlmCi0KLS8vIE1TVkMgc3BlY2lmaWMgZGVmaW5lcwotLy8gbWFpbmx5IGZvciBwb3Np
eCBjb21wYXQKLSNpZmRlZiBfTVNDX1ZFUgotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L1N5
c1R5cGVzLmg+Ci0KLS8vIGNvbXBpbGVyIHNwZWNpZmljIHRvIGNvbXBpbGVyIHNwZWNpZmljCi0v
LyBub2xpbnQKLSMgZGVmaW5lIF9fUFJFVFRZX0ZVTkNUSU9OX18gX19GVU5DU0lHX18KLQotLy8g
SGlkZSBhIEdDQyBzcGVjaWZpYyB0aGluZyB0aGF0IGJyZWFrcyBNU1ZDIGlmIGxlZnQgYWxvbmUu
Ci0jIGRlZmluZSBfX2V4dGVuc2lvbl9fCi0KLS8vIFdlIGhhdmUgY29tcGlsZXIgc3VwcG9ydCBm
b3IgdGhlIG5ld2VzdCBvZiB0aGUgbmV3LCBidXQKLS8vIE1TVkMgZG9lc24ndCB0ZWxsIHVzIHRo
YXQuCi0jZGVmaW5lIF9fU1NFNF8yX18gMQotCi0jZW5kaWYKLQotLy8gRGVidWcKLW5hbWVzcGFj
ZSBmb2xseSB7Ci0jaWZkZWYgTkRFQlVHCi1jb25zdGV4cHIgYXV0byBrSXNEZWJ1ZyA9IGZhbHNl
OwotI2Vsc2UKLWNvbnN0ZXhwciBhdXRvIGtJc0RlYnVnID0gdHJ1ZTsKLSNlbmRpZgotfQotCi0v
LyBFbmRpYW5uZXNzCi1uYW1lc3BhY2UgZm9sbHkgewotI2lmZGVmIF9NU0NfVkVSCi0vLyBJdCdz
IE1TVkMsIHNvIHdlIGp1c3QgaGF2ZSB0byBndWVzcyAuLi4gYW5kIGFsbG93IGFuIG92ZXJyaWRl
Ci0jaWZkZWYgRk9MTFlfRU5ESUFOX0JFCi1jb25zdGV4cHIgYXV0byBrSXNMaXR0bGVFbmRpYW4g
PSBmYWxzZTsKLSNlbHNlCi1jb25zdGV4cHIgYXV0byBrSXNMaXR0bGVFbmRpYW4gPSB0cnVlOwot
I2VuZGlmCi0jZWxzZQotY29uc3RleHByIGF1dG8ga0lzTGl0dGxlRW5kaWFuID0gX19CWVRFX09S
REVSX18gPT0gX19PUkRFUl9MSVRUTEVfRU5ESUFOX187Ci0jZW5kaWYKLWNvbnN0ZXhwciBhdXRv
IGtJc0JpZ0VuZGlhbiA9ICFrSXNMaXR0bGVFbmRpYW47Ci19Ci0KLSNpZm5kZWYgRk9MTFlfU1NF
Ci0jIGlmIGRlZmluZWQoX19TU0U0XzJfXykKLSMgIGRlZmluZSBGT0xMWV9TU0UgNAotIyAgZGVm
aW5lIEZPTExZX1NTRV9NSU5PUiAyCi0jIGVsaWYgZGVmaW5lZChfX1NTRTRfMV9fKQotIyAgZGVm
aW5lIEZPTExZX1NTRSA0Ci0jICBkZWZpbmUgRk9MTFlfU1NFX01JTk9SIDEKLSMgZWxpZiBkZWZp
bmVkKF9fU1NFNF9fKQotIyAgZGVmaW5lIEZPTExZX1NTRSA0Ci0jICBkZWZpbmUgRk9MTFlfU1NF
X01JTk9SIDAKLSMgZWxpZiBkZWZpbmVkKF9fU1NFM19fKQotIyAgZGVmaW5lIEZPTExZX1NTRSAz
Ci0jICBkZWZpbmUgRk9MTFlfU1NFX01JTk9SIDAKLSMgZWxpZiBkZWZpbmVkKF9fU1NFMl9fKQot
IyAgZGVmaW5lIEZPTExZX1NTRSAyCi0jICBkZWZpbmUgRk9MTFlfU1NFX01JTk9SIDAKLSMgZWxp
ZiBkZWZpbmVkKF9fU1NFX18pCi0jICBkZWZpbmUgRk9MTFlfU1NFIDEKLSMgIGRlZmluZSBGT0xM
WV9TU0VfTUlOT1IgMAotIyBlbHNlCi0jICBkZWZpbmUgRk9MTFlfU1NFIDAKLSMgIGRlZmluZSBG
T0xMWV9TU0VfTUlOT1IgMAotIyBlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgRk9MTFlfU1NFX1BS
RVJFUShtYWpvciwgbWlub3IpIFwKLSAgKEZPTExZX1NTRSA+IG1ham9yIHx8IEZPTExZX1NTRSA9
PSBtYWpvciAmJiBGT0xMWV9TU0VfTUlOT1IgPj0gbWlub3IpCi0KLSNpZiBGT0xMWV9VTlVTVUFM
X0dGTEFHU19OQU1FU1BBQ0UKLW5hbWVzcGFjZSBGT0xMWV9HRkxBR1NfTkFNRVNQQUNFIHsgfQot
bmFtZXNwYWNlIGdmbGFncyB7Ci11c2luZyBuYW1lc3BhY2UgRk9MTFlfR0ZMQUdTX05BTUVTUEFD
RTsKLX0gIC8vIG5hbWVzcGFjZSBnZmxhZ3MKLSNlbmRpZgotCi0vLyBmb3IgVEFSR0VUX09TX0lQ
SE9ORQotI2lmZGVmIF9fQVBQTEVfXwotI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPiAv
LyBAbWFudWFsCi0jZW5kaWYKLQotLy8gUlRUSSBtYXkgbm90IGJlIGVuYWJsZWQgZm9yIHRoaXMg
Y29tcGlsYXRpb24gdW5pdC4KLSNpZiBkZWZpbmVkKF9fR1hYX1JUVEkpIHx8IGRlZmluZWQoX19j
cHBfcnR0aSkgfHwgXAotICAgIChkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9DUFBSVFRJ
KSkKLSMgZGVmaW5lIEZPTExZX0hBU19SVFRJIDEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoX01TQ19WRVIpCi0jZGVmaW5lIEZPTExZX1NUQVRJQ19DVE9SX1BS
SU9SSVRZX01BWAotI2Vsc2UKLS8vIDEwMSBpcyB0aGUgaGlnaGVzdCBwcmlvcml0eSBhbGxvd2Vk
IGJ5IHRoZSBpbml0X3ByaW9yaXR5IGF0dHJpYnV0ZS4KLS8vIFRoaXMgcHJpb3JpdHkgaXMgYWxy
ZWFkeSB1c2VkIGJ5IEpFTWFsbG9jIGFuZCBvdGhlciBtZW1vcnkgYWxsb2NhdG9ycyBzbwotLy8g
d2Ugd2lsbCB0YWtlIHRoZSBuZXh0IG9uZS4KLSNkZWZpbmUgRk9MTFlfU1RBVElDX0NUT1JfUFJJ
T1JJVFlfTUFYIF9fYXR0cmlidXRlX18oKF9faW5pdF9wcmlvcml0eV9fKDEwMikpKQotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLSNpZiBfX09CSkNfXwotY29uc3RleHByIGF1dG8ga0lz
T2JqQyA9IHRydWU7Ci0jZWxzZQotY29uc3RleHByIGF1dG8ga0lzT2JqQyA9IGZhbHNlOwotI2Vu
ZGlmCi0KLSNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgIUZPTExZX01PQklMRQotY29uc3RleHBy
IGF1dG8ga0lzTGludXggPSB0cnVlOwotI2Vsc2UKLWNvbnN0ZXhwciBhdXRvIGtJc0xpbnV4ID0g
ZmFsc2U7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX1dJTjMyKQotY29uc3RleHByIGF1dG8ga0lz
V2luZG93cyA9IHRydWU7Ci1jb25zdGV4cHIgYXV0byBrTXNjVmVyID0gX01TQ19WRVI7Ci0jZWxz
ZQotY29uc3RleHByIGF1dG8ga0lzV2luZG93cyA9IGZhbHNlOwotY29uc3RleHByIGF1dG8ga01z
Y1ZlciA9IDA7Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2ZvbGx5L1ByZXByb2Nlc3Nvci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvZm9sbHkvUHJlcHJvY2Vzc29yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGI5NGMwODJiNmNjMWFmMGE3MzJmZjU4YTViYTAwMGZhMjZhZWJmZjcuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvUHJlcHJvY2Vzc29yLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAq
Ci0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8K
LQotLy8gQGF1dGhvcjogQW5kcmVpIEFsZXhhbmRyZXNjdQotCi0jcHJhZ21hIG9uY2UKLQotLyoq
Ci0gKiBOZWNlc3NhcmlseSBldmlsIHByZXByb2Nlc3Nvci1yZWxhdGVkIGFtZW5pdGllcy4KLSAq
LwotCi0vLyBNU1ZDJ3MgcHJlcHJvY2Vzc29yIGlzIGEgcGFpbiwgc28gd2UgaGF2ZSB0bwotLy8g
Zm9yY2VmdWxseSBleHBhbmQgdGhlIFZBIGFyZ3MgaW4gc29tZSBwbGFjZXMuCi0jZGVmaW5lIEZC
X1ZBX0dMVUUoYSwgYikgYSBiCi0KLS8qKgotICogRkJfT05FX09SX05PTkUoaGVsbG8sIHdvcmxk
KSBleHBhbmRzIHRvIGhlbGxvIGFuZAotICogRkJfT05FX09SX05PTkUoaGVsbG8pIGV4cGFuZHMg
dG8gbm90aGluZy4gVGhpcyBtYWNybyBpcyB1c2VkIHRvCi0gKiBpbnNlcnQgb3IgZWxpbWluYXRl
IHRleHQgYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGFub3RoZXIgYXJndW1lbnQuCi0gKi8KLSNk
ZWZpbmUgRkJfT05FX09SX05PTkUoYSwgLi4uKSBGQl9WQV9HTFVFKEZCX1RISVJELCAoYSwgIyMg
X19WQV9BUkdTX18sIGEpKQotI2RlZmluZSBGQl9USElSRChhLCBiLCAuLi4pIF9fVkFfQVJHU19f
Ci0KLS8qKgotICogSGVscGVyIG1hY3JvIHRoYXQgZXh0cmFjdHMgdGhlIGZpcnN0IGFyZ3VtZW50
IG91dCBvZiBhIGxpc3Qgb2YgYW55Ci0gKiBudW1iZXIgb2YgYXJndW1lbnRzLgotICovCi0jZGVm
aW5lIEZCX0FSR18xKGEsIC4uLikgYQotCi0vKioKLSAqIEhlbHBlciBtYWNybyB0aGF0IGV4dHJh
Y3RzIHRoZSBzZWNvbmQgYXJndW1lbnQgb3V0IG9mIGEgbGlzdCBvZiBhbnkKLSAqIG51bWJlciBv
ZiBhcmd1bWVudHMuIElmIG9ubHkgb25lIGFyZ3VtZW50IGlzIGdpdmVuLCBpdCByZXR1cm5zCi0g
KiB0aGF0LgotICovCi0jaWZkZWYgX01TQ19WRVIKLS8vIEdDQyByZWZ1c2VzIHRvIGV4cGFuZCB0
aGlzIGNvcnJlY3RseSBpZiB0aGlzIG1hY3JvIGl0c2VsZiB3YXMKLS8vIGNhbGxlZCB3aXRoIEZC
X1ZBX0dMVUUgOigKLSNkZWZpbmUgRkJfQVJHXzJfT1JfMSguLi4pIFwKLSAgRkJfVkFfR0xVRShG
Ql9BUkdfMl9PUl8xX0lNUEwsIChfX1ZBX0FSR1NfXywgX19WQV9BUkdTX18pKQotI2Vsc2UKLSNk
ZWZpbmUgRkJfQVJHXzJfT1JfMSguLi4pIEZCX0FSR18yX09SXzFfSU1QTChfX1ZBX0FSR1NfXywg
X19WQV9BUkdTX18pCi0jZW5kaWYKLS8vIFN1cHBvcnQgbWFjcm8gZm9yIHRoZSBhYm92ZQotI2Rl
ZmluZSBGQl9BUkdfMl9PUl8xX0lNUEwoYSwgYiwgLi4uKSBiCi0KLS8qKgotICogSGVscGVyIG1h
Y3JvIHRoYXQgcHJvdmlkZXMgYSB3YXkgdG8gcGFzcyBhcmd1bWVudCB3aXRoIGNvbW1hcyBpbiBp
dCB0bwotICogc29tZSBvdGhlciBtYWNybyB3aG9zZSBzeW50YXggZG9lc24ndCBhbGxvdyB1c2lu
ZyBleHRyYSBwYXJlbnRoZXNlcy4KLSAqIEV4YW1wbGU6Ci0gKgotICogICAjZGVmaW5lIE1BQ1JP
KHR5cGUsIG5hbWUpIHR5cGUgbmFtZQotICogICBNQUNSTyhGQl9TSU5HTEVfQVJHKHN0ZDo6cGFp
cjxzaXplX3QsIHNpemVfdD4pLCB4KTsKLSAqCi0gKi8KLSNkZWZpbmUgRkJfU0lOR0xFX0FSRygu
Li4pIF9fVkFfQVJHU19fCi0KLS8qKgotICogSGVscGVyIG1hY3JvIHRoYXQganVzdCBpZ25vcmVz
IGl0cyBwYXJhbWV0ZXJzLgotICovCi0jZGVmaW5lIEZPTExZX0lHTk9SRSguLi4pCi0KLS8qKgot
ICogSGVscGVyIG1hY3JvIHRoYXQganVzdCBpZ25vcmVzIGl0cyBwYXJhbWV0ZXJzIGFuZCBpbnNl
cnRzIGEgc2VtaWNvbG9uLgotICovCi0jZGVmaW5lIEZPTExZX1NFTUlDT0xPTiguLi4pIDsKLQot
LyoqCi0gKiBGQl9BTk9OWU1PVVNfVkFSSUFCTEUoc3RyKSBpbnRyb2R1Y2VzIGFuIGlkZW50aWZp
ZXIgc3RhcnRpbmcgd2l0aAotICogc3RyIGFuZCBlbmRpbmcgd2l0aCBhIG51bWJlciB0aGF0IHZh
cmllcyB3aXRoIHRoZSBsaW5lLgotICovCi0jaWZuZGVmIEZCX0FOT05ZTU9VU19WQVJJQUJMRQot
I2RlZmluZSBGQl9DT05DQVRFTkFURV9JTVBMKHMxLCBzMikgczEjI3MyCi0jZGVmaW5lIEZCX0NP
TkNBVEVOQVRFKHMxLCBzMikgRkJfQ09OQ0FURU5BVEVfSU1QTChzMSwgczIpCi0jaWZkZWYgX19D
T1VOVEVSX18KLSNkZWZpbmUgRkJfQU5PTllNT1VTX1ZBUklBQkxFKHN0cikgRkJfQ09OQ0FURU5B
VEUoc3RyLCBfX0NPVU5URVJfXykKLSNlbHNlCi0jZGVmaW5lIEZCX0FOT05ZTU9VU19WQVJJQUJM
RShzdHIpIEZCX0NPTkNBVEVOQVRFKHN0ciwgX19MSU5FX18pCi0jZW5kaWYKLSNlbmRpZgotCi0v
KioKLSAqIFVzZSBGQl9TVFJJTkdJWkUoeCkgd2hlbiB5b3UnZCB3YW50IHRvIGRvIHdoYXQgI3gg
ZG9lcyBpbnNpZGUKLSAqIGFub3RoZXIgbWFjcm8gZXhwYW5zaW9uLgotICovCi0jZGVmaW5lIEZC
X1NUUklOR0laRSh4KSAjeApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZm9sbHkvUHJvZHVjZXJDb25zdW1lclF1ZXVlLmggYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9Qcm9kdWNlckNvbnN1bWVyUXVldWUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJmMmJmNDI3YzMzY2U5NDg1YWMzOTNkNDIwOTdmNmIx
YTFhMTc0MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9Qcm9kdWNlckNvbnN1bWVy
UXVldWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp
Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5h
cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5
IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBC
QVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBl
aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8gQGF1dGhvciBCbyBIdSAoYmh1QGZiLmNvbSkK
LS8vIEBhdXRob3IgSm9yZGFuIERlTG9uZyAoZGVsb25nLmpAZmIuY29tKQotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgPGF0b21pYz4KLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1ZGUgPGNz
dGRsaWI+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KLSNpbmNsdWRl
IDx0eXBlX3RyYWl0cz4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSA8Zm9sbHkvY29u
Y3VycmVuY3kvQ2FjaGVMb2NhbGl0eS5oPgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi0vKgotICog
UHJvZHVjZXJDb25zdW1lclF1ZXVlIGlzIGEgb25lIHByb2R1Y2VyIGFuZCBvbmUgY29uc3VtZXIg
cXVldWUKLSAqIHdpdGhvdXQgbG9ja3MuCi0gKi8KLXRlbXBsYXRlPGNsYXNzIFQ+Ci1zdHJ1Y3Qg
UHJvZHVjZXJDb25zdW1lclF1ZXVlIHsKLSAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7Ci0KLSAgUHJv
ZHVjZXJDb25zdW1lclF1ZXVlKGNvbnN0IFByb2R1Y2VyQ29uc3VtZXJRdWV1ZSYpID0gZGVsZXRl
OwotICBQcm9kdWNlckNvbnN1bWVyUXVldWUmIG9wZXJhdG9yID0gKGNvbnN0IFByb2R1Y2VyQ29u
c3VtZXJRdWV1ZSYpID0gZGVsZXRlOwotCi0gIC8vIHNpemUgbXVzdCBiZSA+PSAyLgotICAvLwot
ICAvLyBBbHNvLCBub3RlIHRoYXQgdGhlIG51bWJlciBvZiB1c2FibGUgc2xvdHMgaW4gdGhlIHF1
ZXVlIGF0IGFueQotICAvLyBnaXZlbiB0aW1lIGlzIGFjdHVhbGx5IChzaXplLTEpLCBzbyBpZiB5
b3Ugc3RhcnQgd2l0aCBhbiBlbXB0eSBxdWV1ZSwKLSAgLy8gaXNGdWxsKCkgd2lsbCByZXR1cm4g
dHJ1ZSBhZnRlciBzaXplLTEgaW5zZXJ0aW9ucy4KLSAgZXhwbGljaXQgUHJvZHVjZXJDb25zdW1l
clF1ZXVlKHVpbnQzMl90IHNpemUpCi0gICAgOiBzaXplXyhzaXplKQotICAgICwgcmVjb3Jkc18o
c3RhdGljX2Nhc3Q8VCo+KHN0ZDo6bWFsbG9jKHNpemVvZihUKSAqIHNpemUpKSkKLSAgICAsIHJl
YWRJbmRleF8oMCkKLSAgICAsIHdyaXRlSW5kZXhfKDApCi0gIHsKLSAgICBhc3NlcnQoc2l6ZSA+
PSAyKTsKLSAgICBpZiAoIXJlY29yZHNfKSB7Ci0gICAgICB0aHJvdyBzdGQ6OmJhZF9hbGxvYygp
OwotICAgIH0KLSAgfQotCi0gIH5Qcm9kdWNlckNvbnN1bWVyUXVldWUoKSB7Ci0gICAgLy8gV2Ug
bmVlZCB0byBkZXN0cnVjdCBhbnl0aGluZyB0aGF0IG1heSBzdGlsbCBleGlzdCBpbiBvdXIgcXVl
dWUuCi0gICAgLy8gKE5vIHJlYWwgc3luY2hyb25pemF0aW9uIG5lZWRlZCBhdCBkZXN0cnVjdG9y
IHRpbWU6IG9ubHkgb25lCi0gICAgLy8gdGhyZWFkIGNhbiBiZSBkb2luZyB0aGlzLikKLSAgICBp
ZiAoIXN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUpIHsKLSAgICAgIHNp
emVfdCByZWFkSW5kZXggPSByZWFkSW5kZXhfOwotICAgICAgc2l6ZV90IGVuZEluZGV4ID0gd3Jp
dGVJbmRleF87Ci0gICAgICB3aGlsZSAocmVhZEluZGV4ICE9IGVuZEluZGV4KSB7Ci0gICAgICAg
IHJlY29yZHNfW3JlYWRJbmRleF0uflQoKTsKLSAgICAgICAgaWYgKCsrcmVhZEluZGV4ID09IHNp
emVfKSB7Ci0gICAgICAgICAgcmVhZEluZGV4ID0gMDsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLQotICAgIHN0ZDo6ZnJlZShyZWNvcmRzXyk7Ci0gIH0KLQotICB0ZW1wbGF0ZTxjbGFzcyAu
Li5BcmdzPgotICBib29sIHdyaXRlKEFyZ3MmJi4uLiByZWNvcmRBcmdzKSB7Ci0gICAgYXV0byBj
b25zdCBjdXJyZW50V3JpdGUgPSB3cml0ZUluZGV4Xy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGF4ZWQpOwotICAgIGF1dG8gbmV4dFJlY29yZCA9IGN1cnJlbnRXcml0ZSArIDE7Ci0gICAgaWYg
KG5leHRSZWNvcmQgPT0gc2l6ZV8pIHsKLSAgICAgIG5leHRSZWNvcmQgPSAwOwotICAgIH0KLSAg
ICBpZiAobmV4dFJlY29yZCAhPSByZWFkSW5kZXhfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNx
dWlyZSkpIHsKLSAgICAgIG5ldyAoJnJlY29yZHNfW2N1cnJlbnRXcml0ZV0pIFQoc3RkOjpmb3J3
YXJkPEFyZ3M+KHJlY29yZEFyZ3MpLi4uKTsKLSAgICAgIHdyaXRlSW5kZXhfLnN0b3JlKG5leHRS
ZWNvcmQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgLy8gcXVldWUgaXMgZnVsbAotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0g
IC8vIG1vdmUgKG9yIGNvcHkpIHRoZSB2YWx1ZSBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlIHRv
IGdpdmVuIHZhcmlhYmxlCi0gIGJvb2wgcmVhZChUJiByZWNvcmQpIHsKLSAgICBhdXRvIGNvbnN0
IGN1cnJlbnRSZWFkID0gcmVhZEluZGV4Xy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQp
OwotICAgIGlmIChjdXJyZW50UmVhZCA9PSB3cml0ZUluZGV4Xy5sb2FkKHN0ZDo6bWVtb3J5X29y
ZGVyX2FjcXVpcmUpKSB7Ci0gICAgICAvLyBxdWV1ZSBpcyBlbXB0eQotICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGF1dG8gbmV4dFJlY29yZCA9IGN1cnJlbnRSZWFkICsgMTsKLSAg
ICBpZiAobmV4dFJlY29yZCA9PSBzaXplXykgewotICAgICAgbmV4dFJlY29yZCA9IDA7Ci0gICAg
fQotICAgIHJlY29yZCA9IHN0ZDo6bW92ZShyZWNvcmRzX1tjdXJyZW50UmVhZF0pOwotICAgIHJl
Y29yZHNfW2N1cnJlbnRSZWFkXS5+VCgpOwotICAgIHJlYWRJbmRleF8uc3RvcmUobmV4dFJlY29y
ZCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQot
ICAvLyBwb2ludGVyIHRvIHRoZSB2YWx1ZSBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlIChmb3Ig
dXNlIGluLXBsYWNlKSBvcgotICAvLyBudWxscHRyIGlmIGVtcHR5LgotICBUKiBmcm9udFB0cigp
IHsKLSAgICBhdXRvIGNvbnN0IGN1cnJlbnRSZWFkID0gcmVhZEluZGV4Xy5sb2FkKHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOwotICAgIGlmIChjdXJyZW50UmVhZCA9PSB3cml0ZUluZGV4Xy5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSB7Ci0gICAgICAvLyBxdWV1ZSBpcyBlbXB0
eQotICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiAmcmVjb3Jkc19bY3Vy
cmVudFJlYWRdOwotICB9Ci0KLSAgLy8gcXVldWUgbXVzdCBub3QgYmUgZW1wdHkKLSAgdm9pZCBw
b3BGcm9udCgpIHsKLSAgICBhdXRvIGNvbnN0IGN1cnJlbnRSZWFkID0gcmVhZEluZGV4Xy5sb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAgIGFzc2VydChjdXJyZW50UmVhZCAhPSB3
cml0ZUluZGV4Xy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKTsKLQotICAgIGF1dG8g
bmV4dFJlY29yZCA9IGN1cnJlbnRSZWFkICsgMTsKLSAgICBpZiAobmV4dFJlY29yZCA9PSBzaXpl
XykgewotICAgICAgbmV4dFJlY29yZCA9IDA7Ci0gICAgfQotICAgIHJlY29yZHNfW2N1cnJlbnRS
ZWFkXS5+VCgpOwotICAgIHJlYWRJbmRleF8uc3RvcmUobmV4dFJlY29yZCwgc3RkOjptZW1vcnlf
b3JkZXJfcmVsZWFzZSk7Ci0gIH0KLQotICBib29sIGlzRW1wdHkoKSBjb25zdCB7Ci0gICAgcmV0
dXJuIHJlYWRJbmRleF8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSA9PQotICAgICAg
ICB3cml0ZUluZGV4Xy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwotICB9Ci0KLSAg
Ym9vbCBpc0Z1bGwoKSBjb25zdCB7Ci0gICAgYXV0byBuZXh0UmVjb3JkID0gd3JpdGVJbmRleF8u
bG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSArIDE7Ci0gICAgaWYgKG5leHRSZWNvcmQg
PT0gc2l6ZV8pIHsKLSAgICAgIG5leHRSZWNvcmQgPSAwOwotICAgIH0KLSAgICBpZiAobmV4dFJl
Y29yZCAhPSByZWFkSW5kZXhfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpIHsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gcXVldWUgaXMgZnVsbAotICAgIHJldHVy
biB0cnVlOwotICB9Ci0KLSAgLy8gKiBJZiBjYWxsZWQgYnkgY29uc3VtZXIsIHRoZW4gdHJ1ZSBz
aXplIG1heSBiZSBtb3JlIChiZWNhdXNlIHByb2R1Y2VyIG1heQotICAvLyAgIGJlIGFkZGluZyBp
dGVtcyBjb25jdXJyZW50bHkpLgotICAvLyAqIElmIGNhbGxlZCBieSBwcm9kdWNlciwgdGhlbiB0
cnVlIHNpemUgbWF5IGJlIGxlc3MgKGJlY2F1c2UgY29uc3VtZXIgbWF5Ci0gIC8vICAgYmUgcmVt
b3ZpbmcgaXRlbXMgY29uY3VycmVudGx5KS4KLSAgLy8gKiBJdCBpcyB1bmRlZmluZWQgdG8gY2Fs
bCB0aGlzIGZyb20gYW55IG90aGVyIHRocmVhZC4KLSAgc2l6ZV90IHNpemVHdWVzcygpIGNvbnN0
IHsKLSAgICBpbnQgcmV0ID0gd3JpdGVJbmRleF8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1
aXJlKSAtCi0gICAgICAgIHJlYWRJbmRleF8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJl
KTsKLSAgICBpZiAocmV0IDwgMCkgewotICAgICAgcmV0ICs9IHNpemVfOwotICAgIH0KLSAgICBy
ZXR1cm4gcmV0OwotICB9Ci0KLXByaXZhdGU6Ci0gY2hhciBwYWQwX1tDYWNoZUxvY2FsaXR5Ojpr
RmFsc2VTaGFyaW5nUmFuZ2VdOwotIGNvbnN0IHVpbnQzMl90IHNpemVfOwotIFQqIGNvbnN0IHJl
Y29yZHNfOwotCi0gRk9MTFlfQUxJR05fVE9fQVZPSURfRkFMU0VfU0hBUklORyBzdGQ6OmF0b21p
Yzx1bnNpZ25lZCBpbnQ+IHJlYWRJbmRleF87Ci0gRk9MTFlfQUxJR05fVE9fQVZPSURfRkFMU0Vf
U0hBUklORyBzdGQ6OmF0b21pYzx1bnNpZ25lZCBpbnQ+IHdyaXRlSW5kZXhfOwotCi0gY2hhciBw
YWQxX1tDYWNoZUxvY2FsaXR5OjprRmFsc2VTaGFyaW5nUmFuZ2UgLSBzaXplb2Yod3JpdGVJbmRl
eF8pXTsKLX07Ci0KLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2ZvbGx5L1JXU3BpbkxvY2suaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2ZvbGx5L1JXU3BpbkxvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MjFkZjBjMGRhZTE3YmEzMWQ0OGI5NGY2Y2I1MTlkZTQ2MDNkNTY4ZS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9mb2xseS9SV1NwaW5Mb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
LSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoK
LSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3Jp
dGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry
aWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0
aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9u
cyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qCi0gKiBO
LkIuIFlvdSBtb3N0IGxpa2VseSBkbyBfbm90XyB3YW50IHRvIHVzZSBSV1NwaW5Mb2NrIG9yIGFu
eSBvdGhlcgotICoga2luZCBvZiBzcGlubG9jay4gIFVzZSBTaGFyZWRNdXRleCBpbnN0ZWFkLgot
ICoKLSAqIEluIHNob3J0LCBzcGlubG9ja3MgaW4gcHJlZW1wdGl2ZSBtdWx0aS10YXNraW5nIG9w
ZXJhdGluZyBzeXN0ZW1zCi0gKiBoYXZlIHNlcmlvdXMgcHJvYmxlbXMgYW5kIGZhc3QgbXV0ZXhl
cyBsaWtlIFNoYXJlZE11dGV4IGFyZSBhbG1vc3QKLSAqIGNlcnRhaW5seSB0aGUgYmV0dGVyIGNo
b2ljZSwgYmVjYXVzZSBsZXR0aW5nIHRoZSBPUyBzY2hlZHVsZXIgcHV0IGEKLSAqIHRocmVhZCB0
byBzbGVlcCBpcyBiZXR0ZXIgZm9yIHN5c3RlbSByZXNwb25zaXZlbmVzcyBhbmQgdGhyb3VnaHB1
dAotICogdGhhbiB3YXN0aW5nIGEgdGltZXNsaWNlIHJlcGVhdGVkbHkgcXVlcnlpbmcgYSBsb2Nr
IGhlbGQgYnkgYQotICogdGhyZWFkIHRoYXQncyBibG9ja2VkLCBhbmQgeW91IGNhbid0IHByZXZl
bnQgdXNlcnNwYWNlCi0gKiBwcm9ncmFtcyBibG9ja2luZy4KLSAqCi0gKiBTcGlubG9ja3MgaW4g
YW4gb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwgbWFrZSBtdWNoIG1vcmUgc2Vuc2UgdGhhbgotICog
dGhleSBkbyBpbiB1c2Vyc3BhY2UuCi0gKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFR3byBSZWFk
LVdyaXRlIHNwaW4gbG9jayBpbXBsZW1lbnRhdGlvbnMuCi0gKgotICogIFJlZjogaHR0cDovL2xv
Y2tsZXNzaW5jLmNvbS9hcnRpY2xlcy9sb2NrcwotICoKLSAqICBCb3RoIGxvY2tzIGhlcmUgYXJl
IGZhc3RlciB0aGFuIHB0aHJlYWRfcndsb2NrIGFuZCBoYXZlIHZlcnkgbG93Ci0gKiAgb3Zlcmhl
YWQgKHVzdWFsbHkgMjAtMzBucykuICBUaGV5IGRvbid0IHVzZSBhbnkgc3lzdGVtIG11dGV4ZXMg
YW5kCi0gKiAgYXJlIHZlcnkgY29tcGFjdCAoNC84IGJ5dGVzKSwgc28gYXJlIHN1aXRhYmxlIGZv
ciBwZXItaW5zdGFuY2UKLSAqICBiYXNlZCBsb2NraW5nLCBwYXJ0aWN1bGFybHkgd2hlbiBjb250
ZW50aW9uIGlzIG5vdCBleHBlY3RlZC4KLSAqCi0gKiAgRm9yIGEgc3BpbmxvY2ssIFJXU3Bpbkxv
Y2sgaXMgYSByZWFzb25hYmxlIGNob2ljZS4gIChTZWUgdGhlIG5vdGUKLSAqICBhYm91dCBmb3Ig
d2h5IGEgc3BpbiBsb2NrIGlzIGZyZXF1ZW50bHkgYSBiYWQgaWRlYSBnZW5lcmFsbHkuKQotICog
IFJXU3BpbkxvY2sgaGFzIG1pbmltYWwgb3ZlcmhlYWQsIGFuZCBjb21wYXJhYmxlIGNvbnRlbnRp
b24KLSAqICBwZXJmb3JtYW5jZSB3aGVuIHRoZSBudW1iZXIgb2YgY29tcGV0aW5nIHRocmVhZHMg
aXMgbGVzcyB0aGFuIG9yCi0gKiAgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBsb2dpY2FsIENQVXMu
ICBFdmVuIGFzIHRoZSBudW1iZXIgb2YKLSAqICB0aHJlYWRzIGdldHMgbGFyZ2VyLCBSV1NwaW5M
b2NrIGNhbiBzdGlsbCBiZSB2ZXJ5IGNvbXBldGl0aXZlIGluCi0gKiAgUkVBRCwgYWx0aG91Z2gg
aXQgaXMgc2xvd2VyIG9uIFdSSVRFLCBhbmQgYWxzbyBpbmhlcmVudGx5IHVuZmFpcgotICogIHRv
IHdyaXRlcnMuCi0gKgotICogIFJXVGlja2V0U3BpbkxvY2sgc2hvd3MgbW9yZSBiYWxhbmNlZCBS
RUFEL1dSSVRFIHBlcmZvcm1hbmNlLiAgSWYKLSAqICB5b3VyIGFwcGxpY2F0aW9uIHJlYWxseSBu
ZWVkcyBhIGxvdCBtb3JlIHRocmVhZHMsIGFuZCBhCi0gKiAgaGlnaGVyLXByaW9yaXR5IHdyaXRl
ciwgcHJlZmVyIG9uZSBvZiB0aGUgUldUaWNrZXRTcGluTG9jayBsb2Nrcy4KLSAqCi0gKiAgQ2F2
ZWF0czoKLSAqCi0gKiAgICBSV1RpY2tldFNwaW5Mb2NrIGxvY2tzIGNhbiBvbmx5IGJlIHVzZWQg
d2l0aCBHQ0Mgb24geDg2L3g4Ni02NAotICogICAgYmFzZWQgc3lzdGVtcy4KLSAqCi0gKiAgICBS
V1RpY2tldFNwaW5Mb2NrPDMyPiBvbmx5IGFsbG93cyB1cCB0byAyXjggLSAxIGNvbmN1cnJlbnQK
LSAqICAgIHJlYWRlcnMgYW5kIHdyaXRlcnMuCi0gKgotICogICAgUldUaWNrZXRTcGluTG9jazw2
ND4gb25seSBhbGxvd3MgdXAgdG8gMl4xNiAtIDEgY29uY3VycmVudAotICogICAgcmVhZGVycyBh
bmQgd3JpdGVycy4KLSAqCi0gKiAgICBSV1RpY2tldFNwaW5Mb2NrPC4uLiwgdHJ1ZT4gKGtGYXZv
cldyaXRlciA9IHRydWUsIHRoYXQgaXMsIHN0cmljdAotICogICAgd3JpdGVyIHByaW9yaXR5KSBp
cyBOT1QgcmVlbnRyYW50LCBldmVuIGZvciBsb2NrX3NoYXJlZCgpLgotICoKLSAqICAgIFRoZSBs
b2NrIHdpbGwgbm90IGdyYW50IGFueSBuZXcgc2hhcmVkIChyZWFkKSBhY2Nlc3NlcyB3aGlsZSBh
IHRocmVhZAotICogICAgYXR0ZW1wdGluZyB0byBhY3F1aXJlIHRoZSBsb2NrIGluIHdyaXRlIG1v
ZGUgaXMgYmxvY2tlZC4gKFRoYXQgaXMsCi0gKiAgICBpZiB0aGUgbG9jayBpcyBoZWxkIGluIHNo
YXJlZCBtb2RlIGJ5IE4gdGhyZWFkcywgYW5kIGEgdGhyZWFkIGF0dGVtcHRzCi0gKiAgICB0byBh
Y3F1aXJlIGl0IGluIHdyaXRlIG1vZGUsIG5vIG9uZSBlbHNlIGNhbiBhY3F1aXJlIGl0IGluIHNo
YXJlZCBtb2RlCi0gKiAgICB1bnRpbCB0aGVzZSBOIHRocmVhZHMgcmVsZWFzZSB0aGUgbG9jayBh
bmQgdGhlbiB0aGUgYmxvY2tlZCB0aHJlYWQKLSAqICAgIGFjcXVpcmVzIGFuZCByZWxlYXNlcyB0
aGUgZXhjbHVzaXZlIGxvY2suKSBUaGlzIGFsc28gYXBwbGllcyBmb3IKLSAqICAgIGF0dGVtcHRz
IHRvIHJlYWNxdWlyZSB0aGUgbG9jayBpbiBzaGFyZWQgbW9kZSBieSB0aHJlYWRzIHRoYXQgYWxy
ZWFkeQotICogICAgaG9sZCBpdCBpbiBzaGFyZWQgbW9kZSwgbWFraW5nIHRoZSBsb2NrIG5vbi1y
ZWVudHJhbnQuCi0gKgotICogICAgUldTcGluTG9jayBoYW5kbGVzIDJeMzAgLSAxIGNvbmN1cnJl
bnQgcmVhZGVycy4KLSAqCi0gKiBAYXV0aG9yIFhpbiBMaXUgPHhsaXV4QGZiLmNvbT4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotLyoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQmVuY2htYXJrIG9uIChJbnRl
bChSKSBYZW9uKFIpIENQVSAgTDU2MzAgIEAgMi4xM0dIeikgIDggY29yZXMoMTYgSFRzKQotPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotMS4gU2luZ2xlIHRocmVhZCBi
ZW5jaG1hcmsgKHJlYWQvd3JpdGUgbG9jayArIHVubG9jayBvdmVyaGVhZCkKLUJlbmNobWFyayAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJzICAgVG90YWwgdCAgICB0L2l0
ZXIgaXRlci9zZWMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogICAgICBCTV9SV1NwaW5Mb2Nr
UmVhZCAgICAgICAgICAgICAgICAgICAgIDEwMDAwMCAgMS43ODYgbXMgIDE3Ljg2IG5zICAgNTMu
NE0KLSszMC41JSBCTV9SV1NwaW5Mb2NrV3JpdGUgICAgICAgICAgICAgICAgICAgIDEwMDAwMCAg
Mi4zMzEgbXMgIDIzLjMxIG5zICA0MC45MU0KLSs4NS43JSBCTV9SV1RpY2tldFNwaW5Mb2NrMzJS
ZWFkICAgICAgICAgICAgIDEwMDAwMCAgMy4zMTcgbXMgIDMzLjE3IG5zICAyOC43NU0KLSs5Ni4w
JSBCTV9SV1RpY2tldFNwaW5Mb2NrMzJXcml0ZSAgICAgICAgICAgIDEwMDAwMCAgICAzLjUgbXMg
ICAgIDM1IG5zICAyNy4yNU0KLSs4NS42JSBCTV9SV1RpY2tldFNwaW5Mb2NrNjRSZWFkICAgICAg
ICAgICAgIDEwMDAwMCAgMy4zMTUgbXMgIDMzLjE1IG5zICAyOC43N00KLSs5Ni4wJSBCTV9SV1Rp
Y2tldFNwaW5Mb2NrNjRXcml0ZSAgICAgICAgICAgIDEwMDAwMCAgICAzLjUgbXMgICAgIDM1IG5z
ICAyNy4yNU0KLSs4NS43JSBCTV9SV1RpY2tldFNwaW5Mb2NrMzJGYXZvcldyaXRlclJlYWQgIDEw
MDAwMCAgMy4zMTcgbXMgIDMzLjE3IG5zICAyOC43NU0KLSsyOS43JSBCTV9SV1RpY2tldFNwaW5M
b2NrMzJGYXZvcldyaXRlcldyaXRlIDEwMDAwMCAgMi4zMTYgbXMgIDIzLjE2IG5zICA0MS4xOE0K
LSs4NS4zJSBCTV9SV1RpY2tldFNwaW5Mb2NrNjRGYXZvcldyaXRlclJlYWQgIDEwMDAwMCAgMy4z
MDkgbXMgIDMzLjA5IG5zICAyOC44Mk0KLSszMC4yJSBCTV9SV1RpY2tldFNwaW5Mb2NrNjRGYXZv
cldyaXRlcldyaXRlIDEwMDAwMCAgMi4zMjUgbXMgIDIzLjI1IG5zICA0MS4wMk0KLSsgMTc1JSBC
TV9QVGhyZWFkUldNdXRleFJlYWQgICAgICAgICAgICAgICAgIDEwMDAwMCAgNC45MTcgbXMgIDQ5
LjE3IG5zICAgMTkuNE0KLSsgMTY2JSBCTV9QVGhyZWFkUldNdXRleFdyaXRlICAgICAgICAgICAg
ICAgIDEwMDAwMCAgNC43NTcgbXMgIDQ3LjU3IG5zICAyMC4wNU0KLQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0yLiBDb250ZW50aW9uIEJlbmNobWFyayAgICAgIDkwJSByZWFkICAxMCUgd3JpdGUK
LUJlbmNobWFyayAgICAgICAgICAgICAgICAgICAgaGl0cyAgICAgICBhdmVyYWdlICAgIG1pbiAg
ICAgICBtYXggICAgICAgIHNpZ21hCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0tLS0tLS0g
OCAgdGhyZWFkcyAtLS0tLS0tLS0tLS0KLVJXU3BpbkxvY2sgICAgICAgV3JpdGUgICAgICAgMTQy
NjY2ICAgICAyMjBucyAgICAgIDc4bnMgICAgICA0MC44dXMgICAgIDI2OW5zCi1SV1NwaW5Mb2Nr
ICAgICAgIFJlYWQgICAgICAgIDEyODIyOTcgICAgMjIybnMgICAgICA4MG5zICAgICAgMzcuN3Vz
ICAgICAyNDhucwotUldUaWNrZXRTcGluTG9jayBXcml0ZSAgICAgICA4NTY5MiAgICAgIDIwOW5z
ICAgICAgNzFucyAgICAgIDE3Ljl1cyAgICAgMjUybnMKLVJXVGlja2V0U3BpbkxvY2sgUmVhZCAg
ICAgICAgNzY5NTcxICAgICAyMTVucyAgICAgIDc4bnMgICAgICAzMy40dXMgICAgIDI1MW5zCi1w
dGhyZWFkX3J3bG9ja190IFdyaXRlICAgICAgIDg0MjQ4ICAgICAgMi40OHVzICAgICA5OW5zICAg
ICAgMjY5dXMgICAgICA4LjE5dXMKLXB0aHJlYWRfcndsb2NrX3QgUmVhZCAgICAgICAgNzYxNjQ2
ICAgICA5MzNucyAgICAgIDEwMW5zICAgICAzNzR1cyAgICAgIDMuMjV1cwotCi0tLS0tLS0tLS0t
IDE2IHRocmVhZHMgLS0tLS0tLS0tLS0tCi1SV1NwaW5Mb2NrICAgICAgIFdyaXRlICAgICAgIDEy
NDIzNiAgICAgMjM3bnMgICAgICA3OG5zICAgICAgMjYxdXMgICAgICA4MDFucwotUldTcGluTG9j
ayAgICAgICBSZWFkICAgICAgICAxMTE1ODA3ICAgIDIzNm5zICAgICAgNzhucyAgICAgIDIuMjdt
cyAgICAgMi4xN3VzCi1SV1RpY2tldFNwaW5Mb2NrIFdyaXRlICAgICAgIDgxNzgxICAgICAgMjMx
bnMgICAgICA3MW5zICAgICAgMzEuNHVzICAgICAzNTFucwotUldUaWNrZXRTcGluTG9jayBSZWFk
ICAgICAgICA3MzQ1MTggICAgIDIzOG5zICAgICAgNzhucyAgICAgIDczLjZ1cyAgICAgMzc5bnMK
LXB0aHJlYWRfcndsb2NrX3QgV3JpdGUgICAgICAgODMzNjMgICAgICA3LjEydXMgICAgIDk5bnMg
ICAgICA3ODV1cyAgICAgIDI4LjF1cwotcHRocmVhZF9yd2xvY2tfdCBSZWFkICAgICAgICA3NTQ5
NzggICAgIDIuMTh1cyAgICAgMTAxbnMgICAgIDEuMDJtcyAgICAgMTQuM3VzCi0KLS0tLS0tLS0t
LS0gNTAgdGhyZWFkcyAtLS0tLS0tLS0tLS0KLVJXU3BpbkxvY2sgICAgICAgV3JpdGUgICAgICAg
MTMxMTQyICAgICAxLjM3dXMgICAgIDgybnMgICAgICA3LjUzbXMgICAgIDY4LjJ1cwotUldTcGlu
TG9jayAgICAgICBSZWFkICAgICAgICAxMTgxMjQwICAgIDI2Mm5zICAgICAgNzhucyAgICAgIDYu
NjJtcyAgICAgMTIuN3VzCi1SV1RpY2tldFNwaW5Mb2NrIFdyaXRlICAgICAgIDgzMDQ1ICAgICAg
Mzk3bnMgICAgICA3M25zICAgICAgNy4wMW1zICAgICAzMS41dXMKLVJXVGlja2V0U3BpbkxvY2sg
UmVhZCAgICAgICAgNzQ0MTMzICAgICAzODZucyAgICAgIDc4bnMgICAgICAgIDExbXMgICAgIDMx
LjR1cwotcHRocmVhZF9yd2xvY2tfdCBXcml0ZSAgICAgICA4MDg0OSAgICAgIDExMnVzICAgICAg
MTAzbnMgICAgIDQuNTJtcyAgICAgMjYzdXMKLXB0aHJlYWRfcndsb2NrX3QgUmVhZCAgICAgICAg
NzI4Njk4ICAgICAyNHVzICAgICAgIDEwMW5zICAgICA3LjI4bXMgICAgIDE5NHVzCi0KLSovCi0K
LSNpbmNsdWRlIDxmb2xseS9Qb3J0YWJpbGl0eS5oPgotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmls
aXR5L0FzbS5oPgotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2KSB8
fCBGT0xMWV9YNjQgfHwgZGVmaW5lZChBUkNIX0s4KSkKLSNkZWZpbmUgUldfU1BJTkxPQ0tfVVNF
X1g4Nl9JTlRSSU5TSUNfCi0jaW5jbHVkZSA8eDg2aW50cmluLmg+Ci0jZWxpZiBkZWZpbmVkKF9N
U0NfVkVSKSAmJiBkZWZpbmVkKEZPTExZX1g2NCkKLSNkZWZpbmUgUldfU1BJTkxPQ0tfVVNFX1g4
Nl9JTlRSSU5TSUNfCi0jZWxzZQotI3VuZGVmIFJXX1NQSU5MT0NLX1VTRV9YODZfSU5UUklOU0lD
XwotI2VuZGlmCi0KLS8vIGlPUyBkb2Vzbid0IGRlZmluZSBfbW1fY3Z0c2k2NF9zaTEyOCBhbmQg
ZnJpZW5kcwotI2lmIChGT0xMWV9TU0UgPj0gMikgJiYgIUZPTExZX01PQklMRQotI2RlZmluZSBS
V19TUElOTE9DS19VU0VfU1NFX0lOU1RSVUNUSU9OU18KLSNlbHNlCi0jdW5kZWYgUldfU1BJTkxP
Q0tfVVNFX1NTRV9JTlNUUlVDVElPTlNfCi0jZW5kaWYKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4K
LSNpbmNsdWRlIDxhdG9taWM+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHRocmVhZD4K
LQotI2luY2x1ZGUgPGdsb2cvbG9nZ2luZy5oPgotCi0jaW5jbHVkZSA8Zm9sbHkvTGlrZWx5Lmg+
Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLS8qCi0gKiBBIHNpbXBsZSwgc21hbGwgKDQtYnl0ZXMp
LCBidXQgdW5mYWlyIHJ3bG9jay4gIFVzZSBpdCB3aGVuIHlvdSB3YW50Ci0gKiBhIG5pY2Ugd3Jp
dGVyIGFuZCBkb24ndCBleHBlY3QgYSBsb3Qgb2Ygd3JpdGUvcmVhZCBjb250ZW50aW9uLCBvcgot
ICogd2hlbiB5b3UgbmVlZCBzbWFsbCByd2xvY2tzIHNpbmNlIHlvdSBhcmUgY3JlYXRpbmcgYSBs
YXJnZSBudW1iZXIKLSAqIG9mIHRoZW0uCi0gKgotICogTm90ZSB0aGF0IHRoZSB1bmZhaXJuZXNz
IGhlcmUgaXMgZXh0cmVtZTogaWYgdGhlIGxvY2sgaXMKLSAqIGNvbnRpbnVhbGx5IGFjY2Vzc2Vk
IGZvciByZWFkLCB3cml0ZXJzIHdpbGwgbmV2ZXIgZ2V0IGEgY2hhbmNlLiAgSWYKLSAqIHRoZSBs
b2NrIGNhbiBiZSB0aGF0IGhpZ2hseSBjb250ZW5kZWQgdGhpcyBjbGFzcyBpcyBwcm9iYWJseSBu
b3QgYW4KLSAqIGlkZWFsIGNob2ljZSBhbnl3YXkuCi0gKgotICogSXQgY3VycmVudGx5IGltcGxl
bWVudHMgbW9zdCBvZiB0aGUgTG9ja2FibGUsIFNoYXJlZExvY2thYmxlIGFuZAotICogVXBncmFk
ZUxvY2thYmxlIGNvbmNlcHRzIGV4Y2VwdCB0aGUgVGltZWRMb2NrYWJsZSByZWxhdGVkIGxvY2tp
bmcvdW5sb2NraW5nCi0gKiBpbnRlcmZhY2VzLgotICovCi1jbGFzcyBSV1NwaW5Mb2NrIHsKLSAg
ZW51bSA6IGludDMyX3QgeyBSRUFERVIgPSA0LCBVUEdSQURFRCA9IDIsIFdSSVRFUiA9IDEgfTsK
LSBwdWJsaWM6Ci0gIGNvbnN0ZXhwciBSV1NwaW5Mb2NrKCkgOiBiaXRzXygwKSB7fQotCi0gIFJX
U3BpbkxvY2soUldTcGluTG9jayBjb25zdCYpID0gZGVsZXRlOwotICBSV1NwaW5Mb2NrJiBvcGVy
YXRvcj0oUldTcGluTG9jayBjb25zdCYpID0gZGVsZXRlOwotCi0gIC8vIExvY2thYmxlIENvbmNl
cHQKLSAgdm9pZCBsb2NrKCkgewotICAgIGludCBjb3VudCA9IDA7Ci0gICAgd2hpbGUgKCFMSUtF
TFkodHJ5X2xvY2soKSkpIHsKLSAgICAgIGlmICgrK2NvdW50ID4gMTAwMCkgc3RkOjp0aGlzX3Ro
cmVhZDo6eWllbGQoKTsKLSAgICB9Ci0gIH0KLQotICAvLyBXcml0ZXIgaXMgcmVzcG9uc2libGUg
Zm9yIGNsZWFyaW5nIHVwIGJvdGggdGhlIFVQR1JBREVEIGFuZCBXUklURVIgYml0cy4KLSAgdm9p
ZCB1bmxvY2soKSB7Ci0gICAgc3RhdGljX2Fzc2VydChSRUFERVIgPiBXUklURVIgKyBVUEdSQURF
RCwgIndyb25nIGJpdHMhIik7Ci0gICAgYml0c18uZmV0Y2hfYW5kKH4oV1JJVEVSIHwgVVBHUkFE
RUQpLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAgfQotCi0gIC8vIFNoYXJlZExvY2th
YmxlIENvbmNlcHQKLSAgdm9pZCBsb2NrX3NoYXJlZCgpIHsKLSAgICBpbnQgY291bnQgPSAwOwot
ICAgIHdoaWxlICghTElLRUxZKHRyeV9sb2NrX3NoYXJlZCgpKSkgewotICAgICAgaWYgKCsrY291
bnQgPiAxMDAwKSBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOwotICAgIH0KLSAgfQotCi0gIHZv
aWQgdW5sb2NrX3NoYXJlZCgpIHsKLSAgICBiaXRzXy5mZXRjaF9hZGQoLVJFQURFUiwgc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gIH0KLQotICAvLyBEb3duZ3JhZGUgdGhlIGxvY2sgZnJv
bSB3cml0ZXIgc3RhdHVzIHRvIHJlYWRlciBzdGF0dXMuCi0gIHZvaWQgdW5sb2NrX2FuZF9sb2Nr
X3NoYXJlZCgpIHsKLSAgICBiaXRzXy5mZXRjaF9hZGQoUkVBREVSLCBzdGQ6Om1lbW9yeV9vcmRl
cl9hY3F1aXJlKTsKLSAgICB1bmxvY2soKTsKLSAgfQotCi0gIC8vIFVwZ3JhZGVMb2NrYWJsZSBD
b25jZXB0Ci0gIHZvaWQgbG9ja191cGdyYWRlKCkgewotICAgIGludCBjb3VudCA9IDA7Ci0gICAg
d2hpbGUgKCF0cnlfbG9ja191cGdyYWRlKCkpIHsKLSAgICAgIGlmICgrK2NvdW50ID4gMTAwMCkg
c3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKLSAgICB9Ci0gIH0KLQotICB2b2lkIHVubG9ja191
cGdyYWRlKCkgewotICAgIGJpdHNfLmZldGNoX2FkZCgtVVBHUkFERUQsIHN0ZDo6bWVtb3J5X29y
ZGVyX2FjcV9yZWwpOwotICB9Ci0KLSAgLy8gdW5sb2NrIHVwZ3JhZGUgYW5kIHRyeSB0byBhY3F1
aXJlIHdyaXRlIGxvY2sKLSAgdm9pZCB1bmxvY2tfdXBncmFkZV9hbmRfbG9jaygpIHsKLSAgICBp
bnQ2NF90IGNvdW50ID0gMDsKLSAgICB3aGlsZSAoIXRyeV91bmxvY2tfdXBncmFkZV9hbmRfbG9j
aygpKSB7Ci0gICAgICBpZiAoKytjb3VudCA+IDEwMDApIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxk
KCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gdW5sb2NrIHVwZ3JhZGUgYW5kIHJlYWQgbG9jayBhdG9t
aWNhbGx5Ci0gIHZvaWQgdW5sb2NrX3VwZ3JhZGVfYW5kX2xvY2tfc2hhcmVkKCkgewotICAgIGJp
dHNfLmZldGNoX2FkZChSRUFERVIgLSBVUEdSQURFRCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxX3Jl
bCk7Ci0gIH0KLQotICAvLyB3cml0ZSB1bmxvY2sgYW5kIHVwZ3JhZGUgbG9jayBhdG9taWNhbGx5
Ci0gIHZvaWQgdW5sb2NrX2FuZF9sb2NrX3VwZ3JhZGUoKSB7Ci0gICAgLy8gbmVlZCB0byBkbyBp
dCBpbiB0d28gc3RlcHMgaGVyZSAtLSBhcyB0aGUgVVBHUkFERUQgYml0IG1pZ2h0IGJlIE9SLWVk
IGF0Ci0gICAgLy8gdGhlIHNhbWUgdGltZSB3aGVuIG90aGVyIHRocmVhZHMgYXJlIHRyeWluZyBk
byB0cnlfbG9ja191cGdyYWRlKCkuCi0gICAgYml0c18uZmV0Y2hfb3IoVVBHUkFERUQsIHN0ZDo6
bWVtb3J5X29yZGVyX2FjcXVpcmUpOwotICAgIGJpdHNfLmZldGNoX2FkZCgtV1JJVEVSLCBzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAgfQotCi0KLSAgLy8gQXR0ZW1wdCB0byBhY3F1aXJl
IHdyaXRlciBwZXJtaXNzaW9uLiBSZXR1cm4gZmFsc2UgaWYgd2UgZGlkbid0IGdldCBpdC4KLSAg
Ym9vbCB0cnlfbG9jaygpIHsKLSAgICBpbnQzMl90IGV4cGVjdCA9IDA7Ci0gICAgcmV0dXJuIGJp
dHNfLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGV4cGVjdCwgV1JJVEVSLAotICAgICAgc3RkOjpt
ZW1vcnlfb3JkZXJfYWNxX3JlbCk7Ci0gIH0KLQotICAvLyBUcnkgdG8gZ2V0IHJlYWRlciBwZXJt
aXNzaW9uIG9uIHRoZSBsb2NrLiBUaGlzIGNhbiBmYWlsIGlmIHdlCi0gIC8vIGZpbmQgb3V0IHNv
bWVvbmUgaXMgYSB3cml0ZXIgb3IgdXBncmFkZXIuCi0gIC8vIFNldHRpbmcgdGhlIFVQR1JBREVE
IGJpdCB3b3VsZCBhbGxvdyBhIHdyaXRlci10by1iZSB0byBpbmRpY2F0ZQotICAvLyBpdHMgaW50
ZW50aW9uIHRvIHdyaXRlIGFuZCBibG9jayBhbnkgbmV3IHJlYWRlcnMgd2hpbGUgd2FpdGluZwot
ICAvLyBmb3IgZXhpc3RpbmcgcmVhZGVycyB0byBmaW5pc2ggYW5kIHJlbGVhc2UgdGhlaXIgcmVh
ZCBsb2Nrcy4gVGhpcwotICAvLyBoZWxwcyBhdm9pZCBzdGFydmluZyB3cml0ZXJzIChwcm9tb3Rl
ZCBmcm9tIHVwZ3JhZGVycykuCi0gIGJvb2wgdHJ5X2xvY2tfc2hhcmVkKCkgewotICAgIC8vIGZl
dGNoX2FkZCBpcyBjb25zaWRlcmFibHkgKDEwMCUpIGZhc3RlciB0aGFuIGNvbXBhcmVfZXhjaGFu
Z2UsCi0gICAgLy8gc28gaGVyZSB3ZSBhcmUgb3B0aW1pemluZyBmb3IgdGhlIGNvbW1vbiAobG9j
ayBzdWNjZXNzKSBjYXNlLgotICAgIGludDMyX3QgdmFsdWUgPSBiaXRzXy5mZXRjaF9hZGQoUkVB
REVSLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUg
JiAoV1JJVEVSfFVQR1JBREVEKSkpIHsKLSAgICAgIGJpdHNfLmZldGNoX2FkZCgtUkVBREVSLCBz
dGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyB0cnkgdG8gdW5sb2NrIHVwZ3JhZGUgYW5kIHdy
aXRlIGxvY2sgYXRvbWljYWxseQotICBib29sIHRyeV91bmxvY2tfdXBncmFkZV9hbmRfbG9jaygp
IHsKLSAgICBpbnQzMl90IGV4cGVjdCA9IFVQR1JBREVEOwotICAgIHJldHVybiBiaXRzXy5jb21w
YXJlX2V4Y2hhbmdlX3N0cm9uZyhleHBlY3QsIFdSSVRFUiwKLSAgICAgICAgc3RkOjptZW1vcnlf
b3JkZXJfYWNxX3JlbCk7Ci0gIH0KLQotICAvLyB0cnkgdG8gYWNxdWlyZSBhbiB1cGdyYWRhYmxl
IGxvY2suCi0gIGJvb2wgdHJ5X2xvY2tfdXBncmFkZSgpIHsKLSAgICBpbnQzMl90IHZhbHVlID0g
Yml0c18uZmV0Y2hfb3IoVVBHUkFERUQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwotCi0g
ICAgLy8gTm90ZTogd2hlbiBmYWlsZWQsIHdlIGNhbm5vdCBmbGlwIHRoZSBVUEdSQURFRCBiaXQg
YmFjaywKLSAgICAvLyBhcyBpbiB0aGlzIGNhc2UgdGhlcmUgaXMgZWl0aGVyIGFub3RoZXIgdXBn
cmFkZSBsb2NrIG9yIGEgd3JpdGUgbG9jay4KLSAgICAvLyBJZiBpdCdzIGEgd3JpdGUgbG9jaywg
dGhlIGJpdCB3aWxsIGdldCBjbGVhcmVkIHVwIHdoZW4gdGhhdCBsb2NrJ3MgZG9uZQotICAgIC8v
IHdpdGggdW5sb2NrKCkuCi0gICAgcmV0dXJuICgodmFsdWUgJiAoVVBHUkFERUQgfCBXUklURVIp
KSA9PSAwKTsKLSAgfQotCi0gIC8vIG1haW5seSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgotICBp
bnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBiaXRzXy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVy
X2FjcXVpcmUpOyB9Ci0KLSAgY2xhc3MgUmVhZEhvbGRlcjsKLSAgY2xhc3MgVXBncmFkZWRIb2xk
ZXI7Ci0gIGNsYXNzIFdyaXRlSG9sZGVyOwotCi0gIGNsYXNzIFJlYWRIb2xkZXIgewotICAgcHVi
bGljOgotICAgIGV4cGxpY2l0IFJlYWRIb2xkZXIoUldTcGluTG9jayogbG9jaykgOiBsb2NrXyhs
b2NrKSB7Ci0gICAgICBpZiAobG9ja18pIGxvY2tfLT5sb2NrX3NoYXJlZCgpOwotICAgIH0KLQot
ICAgIGV4cGxpY2l0IFJlYWRIb2xkZXIoUldTcGluTG9jayYgbG9jaykgOiBsb2NrXygmbG9jaykg
ewotICAgICAgbG9ja18tPmxvY2tfc2hhcmVkKCk7Ci0gICAgfQotCi0gICAgUmVhZEhvbGRlcihS
ZWFkSG9sZGVyJiYgb3RoZXIpIG5vZXhjZXB0IDogbG9ja18ob3RoZXIubG9ja18pIHsKLSAgICAg
IG90aGVyLmxvY2tfID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLyBkb3duLWdyYWRlCi0gICAg
ZXhwbGljaXQgUmVhZEhvbGRlcihVcGdyYWRlZEhvbGRlciYmIHVwZ3JhZGVkKSA6IGxvY2tfKHVw
Z3JhZGVkLmxvY2tfKSB7Ci0gICAgICB1cGdyYWRlZC5sb2NrXyA9IG51bGxwdHI7Ci0gICAgICBp
ZiAobG9ja18pIGxvY2tfLT51bmxvY2tfdXBncmFkZV9hbmRfbG9ja19zaGFyZWQoKTsKLSAgICB9
Ci0KLSAgICBleHBsaWNpdCBSZWFkSG9sZGVyKFdyaXRlSG9sZGVyJiYgd3JpdGVyKSA6IGxvY2tf
KHdyaXRlci5sb2NrXykgewotICAgICAgd3JpdGVyLmxvY2tfID0gbnVsbHB0cjsKLSAgICAgIGlm
IChsb2NrXykgbG9ja18tPnVubG9ja19hbmRfbG9ja19zaGFyZWQoKTsKLSAgICB9Ci0KLSAgICBS
ZWFkSG9sZGVyJiBvcGVyYXRvcj0oUmVhZEhvbGRlciYmIG90aGVyKSB7Ci0gICAgICB1c2luZyBz
dGQ6OnN3YXA7Ci0gICAgICBzd2FwKGxvY2tfLCBvdGhlci5sb2NrXyk7Ci0gICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgfQotCi0gICAgUmVhZEhvbGRlcihjb25zdCBSZWFkSG9sZGVyJiBvdGhlcikg
PSBkZWxldGU7Ci0gICAgUmVhZEhvbGRlciYgb3BlcmF0b3I9KGNvbnN0IFJlYWRIb2xkZXImIG90
aGVyKSA9IGRlbGV0ZTsKLQotICAgIH5SZWFkSG9sZGVyKCkgeyBpZiAobG9ja18pIGxvY2tfLT51
bmxvY2tfc2hhcmVkKCk7IH0KLQotICAgIHZvaWQgcmVzZXQoUldTcGluTG9jayogbG9jayA9IG51
bGxwdHIpIHsKLSAgICAgIGlmIChsb2NrID09IGxvY2tfKSByZXR1cm47Ci0gICAgICBpZiAobG9j
a18pIGxvY2tfLT51bmxvY2tfc2hhcmVkKCk7Ci0gICAgICBsb2NrXyA9IGxvY2s7Ci0gICAgICBp
ZiAobG9ja18pIGxvY2tfLT5sb2NrX3NoYXJlZCgpOwotICAgIH0KLQotICAgIHZvaWQgc3dhcChS
ZWFkSG9sZGVyKiBvdGhlcikgewotICAgICAgc3RkOjpzd2FwKGxvY2tfLCBvdGhlci0+bG9ja18p
OwotICAgIH0KLQotICAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgVXBncmFkZWRIb2xkZXI7
Ci0gICAgZnJpZW5kIGNsYXNzIFdyaXRlSG9sZGVyOwotICAgIFJXU3BpbkxvY2sqIGxvY2tfOwot
ICB9OwotCi0gIGNsYXNzIFVwZ3JhZGVkSG9sZGVyIHsKLSAgIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBVcGdyYWRlZEhvbGRlcihSV1NwaW5Mb2NrKiBsb2NrKSA6IGxvY2tfKGxvY2spIHsKLSAgICAg
IGlmIChsb2NrXykgbG9ja18tPmxvY2tfdXBncmFkZSgpOwotICAgIH0KLQotICAgIGV4cGxpY2l0
IFVwZ3JhZGVkSG9sZGVyKFJXU3BpbkxvY2smIGxvY2spIDogbG9ja18oJmxvY2spIHsKLSAgICAg
IGxvY2tfLT5sb2NrX3VwZ3JhZGUoKTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBVcGdyYWRlZEhv
bGRlcihXcml0ZUhvbGRlciYmIHdyaXRlcikgewotICAgICAgbG9ja18gPSB3cml0ZXIubG9ja187
Ci0gICAgICB3cml0ZXIubG9ja18gPSBudWxscHRyOwotICAgICAgaWYgKGxvY2tfKSBsb2NrXy0+
dW5sb2NrX2FuZF9sb2NrX3VwZ3JhZGUoKTsKLSAgICB9Ci0KLSAgICBVcGdyYWRlZEhvbGRlcihV
cGdyYWRlZEhvbGRlciYmIG90aGVyKSBub2V4Y2VwdCA6IGxvY2tfKG90aGVyLmxvY2tfKSB7Ci0g
ICAgICBvdGhlci5sb2NrXyA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgVXBncmFkZWRIb2xkZXIm
IG9wZXJhdG9yID0oVXBncmFkZWRIb2xkZXImJiBvdGhlcikgewotICAgICAgdXNpbmcgc3RkOjpz
d2FwOwotICAgICAgc3dhcChsb2NrXywgb3RoZXIubG9ja18pOwotICAgICAgcmV0dXJuICp0aGlz
OwotICAgIH0KLQotICAgIFVwZ3JhZGVkSG9sZGVyKGNvbnN0IFVwZ3JhZGVkSG9sZGVyJiBvdGhl
cikgPSBkZWxldGU7Ci0gICAgVXBncmFkZWRIb2xkZXImIG9wZXJhdG9yID0oY29uc3QgVXBncmFk
ZWRIb2xkZXImIG90aGVyKSA9IGRlbGV0ZTsKLQotICAgIH5VcGdyYWRlZEhvbGRlcigpIHsgaWYg
KGxvY2tfKSBsb2NrXy0+dW5sb2NrX3VwZ3JhZGUoKTsgfQotCi0gICAgdm9pZCByZXNldChSV1Nw
aW5Mb2NrKiBsb2NrID0gbnVsbHB0cikgewotICAgICAgaWYgKGxvY2sgPT0gbG9ja18pIHJldHVy
bjsKLSAgICAgIGlmIChsb2NrXykgbG9ja18tPnVubG9ja191cGdyYWRlKCk7Ci0gICAgICBsb2Nr
XyA9IGxvY2s7Ci0gICAgICBpZiAobG9ja18pIGxvY2tfLT5sb2NrX3VwZ3JhZGUoKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHN3YXAoVXBncmFkZWRIb2xkZXIqIG90aGVyKSB7Ci0gICAgICB1c2luZyBz
dGQ6OnN3YXA7Ci0gICAgICBzd2FwKGxvY2tfLCBvdGhlci0+bG9ja18pOwotICAgIH0KLQotICAg
cHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV3JpdGVIb2xkZXI7Ci0gICAgZnJpZW5kIGNsYXNz
IFJlYWRIb2xkZXI7Ci0gICAgUldTcGluTG9jayogbG9ja187Ci0gIH07Ci0KLSAgY2xhc3MgV3Jp
dGVIb2xkZXIgewotICAgcHVibGljOgotICAgIGV4cGxpY2l0IFdyaXRlSG9sZGVyKFJXU3Bpbkxv
Y2sqIGxvY2spIDogbG9ja18obG9jaykgewotICAgICAgaWYgKGxvY2tfKSBsb2NrXy0+bG9jaygp
OwotICAgIH0KLQotICAgIGV4cGxpY2l0IFdyaXRlSG9sZGVyKFJXU3BpbkxvY2smIGxvY2spIDog
bG9ja18oJmxvY2spIHsKLSAgICAgIGxvY2tfLT5sb2NrKCk7Ci0gICAgfQotCi0gICAgLy8gcHJv
bW90ZWQgZnJvbSBhbiB1cGdyYWRlIGxvY2sgaG9sZGVyCi0gICAgZXhwbGljaXQgV3JpdGVIb2xk
ZXIoVXBncmFkZWRIb2xkZXImJiB1cGdyYWRlZCkgewotICAgICAgbG9ja18gPSB1cGdyYWRlZC5s
b2NrXzsKLSAgICAgIHVwZ3JhZGVkLmxvY2tfID0gbnVsbHB0cjsKLSAgICAgIGlmIChsb2NrXykg
bG9ja18tPnVubG9ja191cGdyYWRlX2FuZF9sb2NrKCk7Ci0gICAgfQotCi0gICAgV3JpdGVIb2xk
ZXIoV3JpdGVIb2xkZXImJiBvdGhlcikgbm9leGNlcHQgOiBsb2NrXyhvdGhlci5sb2NrXykgewot
ICAgICAgb3RoZXIubG9ja18gPSBudWxscHRyOwotICAgIH0KLQotICAgIFdyaXRlSG9sZGVyJiBv
cGVyYXRvciA9KFdyaXRlSG9sZGVyJiYgb3RoZXIpIHsKLSAgICAgIHVzaW5nIHN0ZDo6c3dhcDsK
LSAgICAgIHN3YXAobG9ja18sIG90aGVyLmxvY2tfKTsKLSAgICAgIHJldHVybiAqdGhpczsKLSAg
ICB9Ci0KLSAgICBXcml0ZUhvbGRlcihjb25zdCBXcml0ZUhvbGRlciYgb3RoZXIpID0gZGVsZXRl
OwotICAgIFdyaXRlSG9sZGVyJiBvcGVyYXRvciA9KGNvbnN0IFdyaXRlSG9sZGVyJiBvdGhlcikg
PSBkZWxldGU7Ci0KLSAgICB+V3JpdGVIb2xkZXIgKCkgeyBpZiAobG9ja18pIGxvY2tfLT51bmxv
Y2soKTsgfQotCi0gICAgdm9pZCByZXNldChSV1NwaW5Mb2NrKiBsb2NrID0gbnVsbHB0cikgewot
ICAgICAgaWYgKGxvY2sgPT0gbG9ja18pIHJldHVybjsKLSAgICAgIGlmIChsb2NrXykgbG9ja18t
PnVubG9jaygpOwotICAgICAgbG9ja18gPSBsb2NrOwotICAgICAgaWYgKGxvY2tfKSBsb2NrXy0+
bG9jaygpOwotICAgIH0KLQotICAgIHZvaWQgc3dhcChXcml0ZUhvbGRlciogb3RoZXIpIHsKLSAg
ICAgIHVzaW5nIHN0ZDo6c3dhcDsKLSAgICAgIHN3YXAobG9ja18sIG90aGVyLT5sb2NrXyk7Ci0g
ICAgfQotCi0gICBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBSZWFkSG9sZGVyOwotICAgIGZy
aWVuZCBjbGFzcyBVcGdyYWRlZEhvbGRlcjsKLSAgICBSV1NwaW5Mb2NrKiBsb2NrXzsKLSAgfTsK
LQotIHByaXZhdGU6Ci0gIHN0ZDo6YXRvbWljPGludDMyX3Q+IGJpdHNfOwotfTsKLQotCi0jaWZk
ZWYgUldfU1BJTkxPQ0tfVVNFX1g4Nl9JTlRSSU5TSUNfCi0vLyBBIG1vcmUgYmFsYW5jZWQgUmVh
ZC1Xcml0ZSBzcGluIGxvY2sgaW1wbGVtZW50ZWQgYmFzZWQgb24gR0NDIGludHJpbnNpY3MuCi0K
LW5hbWVzcGFjZSBkZXRhaWwgewotdGVtcGxhdGUgPHNpemVfdCBrQml0V2lkdGg+IHN0cnVjdCBS
V1RpY2tldEludFRyYWl0IHsKLSAgc3RhdGljX2Fzc2VydChrQml0V2lkdGggPT0gMzIgfHwga0Jp
dFdpZHRoID09IDY0LAotICAgICAgImJpdCB3aWR0aCBoYXMgdG8gYmUgZWl0aGVyIDMyIG9yIDY0
ICIpOwotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBSV1RpY2tldEludFRyYWl0PDY0PiB7Ci0g
IHR5cGVkZWYgdWludDY0X3QgRnVsbEludDsKLSAgdHlwZWRlZiB1aW50MzJfdCBIYWxmSW50Owot
ICB0eXBlZGVmIHVpbnQxNl90IFF1YXJ0ZXJJbnQ7Ci0KLSNpZmRlZiBSV19TUElOTE9DS19VU0Vf
U1NFX0lOU1RSVUNUSU9OU18KLSAgc3RhdGljIF9fbTEyOGkgbWFrZTEyOChjb25zdCB1aW50MTZf
dCB2WzRdKSB7Ci0gICAgcmV0dXJuIF9tbV9zZXRfZXBpMTYoMCwgMCwgMCwgMCwKLSAgICAgICAg
c2hvcnQodlszXSksIHNob3J0KHZbMl0pLCBzaG9ydCh2WzFdKSwgc2hvcnQodlswXSkpOwotICB9
Ci0gIHN0YXRpYyBpbmxpbmUgX19tMTI4aSBmcm9tSW50ZWdlcih1aW50NjRfdCBmcm9tKSB7Ci0g
ICAgcmV0dXJuIF9tbV9jdnRzaTY0X3NpMTI4KGludDY0X3QoZnJvbSkpOwotICB9Ci0gIHN0YXRp
YyBpbmxpbmUgdWludDY0X3QgdG9JbnRlZ2VyKF9fbTEyOGkgaW4pIHsKLSAgICByZXR1cm4gdWlu
dDY0X3QoX21tX2N2dHNpMTI4X3NpNjQoaW4pKTsKLSAgfQotICBzdGF0aWMgaW5saW5lIHVpbnQ2
NF90IGFkZFBhcmFsbGVsKF9fbTEyOGkgaW4sIF9fbTEyOGkga0RlbHRhKSB7Ci0gICAgcmV0dXJu
IHRvSW50ZWdlcihfbW1fYWRkX2VwaTE2KGluLCBrRGVsdGEpKTsKLSAgfQotI2VuZGlmCi19Owot
Ci10ZW1wbGF0ZSA8Pgotc3RydWN0IFJXVGlja2V0SW50VHJhaXQ8MzI+IHsKLSAgdHlwZWRlZiB1
aW50MzJfdCBGdWxsSW50OwotICB0eXBlZGVmIHVpbnQxNl90IEhhbGZJbnQ7Ci0gIHR5cGVkZWYg
dWludDhfdCBRdWFydGVySW50OwotCi0jaWZkZWYgUldfU1BJTkxPQ0tfVVNFX1NTRV9JTlNUUlVD
VElPTlNfCi0gIHN0YXRpYyBfX20xMjhpIG1ha2UxMjgoY29uc3QgdWludDhfdCB2WzRdKSB7Ci0g
ICAgcmV0dXJuIF9tbV9zZXRfZXBpOCgKLSAgICAgICAgMCwgMCwgMCwgMCwKLSAgICAgICAgMCwg
MCwgMCwgMCwKLSAgICAgICAgMCwgMCwgMCwgMCwKLSAgICAgICAgY2hhcih2WzNdKSwgY2hhcih2
WzJdKSwgY2hhcih2WzFdKSwgY2hhcih2WzBdKSk7Ci0gIH0KLSAgc3RhdGljIGlubGluZSBfX20x
MjhpIGZyb21JbnRlZ2VyKHVpbnQzMl90IGZyb20pIHsKLSAgICByZXR1cm4gX21tX2N2dHNpMzJf
c2kxMjgoaW50MzJfdChmcm9tKSk7Ci0gIH0KLSAgc3RhdGljIGlubGluZSB1aW50MzJfdCB0b0lu
dGVnZXIoX19tMTI4aSBpbikgewotICAgIHJldHVybiB1aW50MzJfdChfbW1fY3Z0c2kxMjhfc2kz
MihpbikpOwotICB9Ci0gIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgYWRkUGFyYWxsZWwoX19tMTI4
aSBpbiwgX19tMTI4aSBrRGVsdGEpIHsKLSAgICByZXR1cm4gdG9JbnRlZ2VyKF9tbV9hZGRfZXBp
OChpbiwga0RlbHRhKSk7Ci0gIH0KLSNlbmRpZgotfTsKLX0gIC8vIGRldGFpbAotCi0KLXRlbXBs
YXRlPHNpemVfdCBrQml0V2lkdGgsIGJvb2wga0Zhdm9yV3JpdGVyPWZhbHNlPgotY2xhc3MgUldU
aWNrZXRTcGluTG9ja1QgewotICB0eXBlZGVmIGRldGFpbDo6UldUaWNrZXRJbnRUcmFpdDxrQml0
V2lkdGg+IEludFRyYWl0VHlwZTsKLSAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OlJXVGlja2V0
SW50VHJhaXQ8a0JpdFdpZHRoPjo6RnVsbEludCBGdWxsSW50OwotICB0eXBlZGVmIHR5cGVuYW1l
IGRldGFpbDo6UldUaWNrZXRJbnRUcmFpdDxrQml0V2lkdGg+OjpIYWxmSW50IEhhbGZJbnQ7Ci0g
IHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpSV1RpY2tldEludFRyYWl0PGtCaXRXaWR0aD46OlF1
YXJ0ZXJJbnQKLSAgICBRdWFydGVySW50OwotCi0gIHVuaW9uIFJXVGlja2V0IHsKLSAgICBjb25z
dGV4cHIgUldUaWNrZXQoKSA6IHdob2xlKDApIHt9Ci0gICAgRnVsbEludCB3aG9sZTsKLSAgICBI
YWxmSW50IHJlYWRXcml0ZTsKLSAgICBfX2V4dGVuc2lvbl9fIHN0cnVjdCB7Ci0gICAgICBRdWFy
dGVySW50IHdyaXRlOwotICAgICAgUXVhcnRlckludCByZWFkOwotICAgICAgUXVhcnRlckludCB1
c2VyczsKLSAgICB9OwotICB9IHRpY2tldDsKLQotIHByaXZhdGU6IC8vIFNvbWUgeDY0LXNwZWNp
ZmljIHV0aWxpdGllcyBmb3IgYXRvbWljIGFjY2VzcyB0byB0aWNrZXQuCi0gIHRlbXBsYXRlPGNs
YXNzIFQ+IHN0YXRpYyBUIGxvYWRfYWNxdWlyZShUKiBhZGRyKSB7Ci0gICAgVCB0ID0gKmFkZHI7
IC8vIGFjcXVpcmUgYmFycmllcgotICAgIGFzbV92b2xhdGlsZV9tZW1vcnkoKTsKLSAgICByZXR1
cm4gdDsKLSAgfQotCi0gIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gIHN0YXRpYyB2b2lkIHN0b3JlX3Jl
bGVhc2UoVCogYWRkciwgVCB2KSB7Ci0gICAgYXNtX3ZvbGF0aWxlX21lbW9yeSgpOwotICAgICph
ZGRyID0gdjsgLy8gcmVsZWFzZSBiYXJyaWVyCi0gIH0KLQotIHB1YmxpYzoKLQotICBjb25zdGV4
cHIgUldUaWNrZXRTcGluTG9ja1QoKSB7fQotCi0gIFJXVGlja2V0U3BpbkxvY2tUKFJXVGlja2V0
U3BpbkxvY2tUIGNvbnN0JikgPSBkZWxldGU7Ci0gIFJXVGlja2V0U3BpbkxvY2tUJiBvcGVyYXRv
cj0oUldUaWNrZXRTcGluTG9ja1QgY29uc3QmKSA9IGRlbGV0ZTsKLQotICB2b2lkIGxvY2soKSB7
Ci0gICAgaWYgKGtGYXZvcldyaXRlcikgewotICAgICAgd3JpdGVMb2NrQWdncmVzc2l2ZSgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICB3cml0ZUxvY2tOaWNlKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoK
LSAgICogQm90aCB0cnlfbG9jayBhbmQgdHJ5X2xvY2tfc2hhcmVkIGRpdmVyZ2UgaW4gb3VyIGlt
cGxlbWVudGF0aW9uIGZyb20gdGhlCi0gICAqIGxvY2sgYWxnb3JpdGhtIGRlc2NyaWJlZCBpbiB0
aGUgbGluayBhYm92ZS4KLSAgICoKLSAgICogSW4gdGhlIHJlYWQgY2FzZSwgaXQgaXMgdW5kZXNp
cmFibGUgdGhhdCB0aGUgcmVhZGVycyBjb3VsZCB3YWl0Ci0gICAqIGZvciBhbm90aGVyIHJlYWRl
ciAoYmVmb3JlIGluY3JlYXNpbmcgdGlja2V0LnJlYWQgaW4gdGhlIG90aGVyCi0gICAqIGltcGxl
bWVudGF0aW9uKS4gIE91ciBhcHByb2FjaCBnaXZlcyB1cCBvbgotICAgKiBmaXJzdC1jb21lLWZp
cnN0LXNlcnZlLCBidXQgb3VyIGJlbmNobWFya3Mgc2hvd2VkIGltcHJvdmUKLSAgICogcGVyZm9y
bWFuY2UgZm9yIGJvdGggcmVhZGVycyBhbmQgd3JpdGVycyB1bmRlciBoZWF2aWx5IGNvbnRlbmRl
ZAotICAgKiBjYXNlcywgcGFydGljdWxhcmx5IHdoZW4gdGhlIG51bWJlciBvZiB0aHJlYWRzIGV4
Y2VlZHMgdGhlIG51bWJlcgotICAgKiBvZiBsb2dpY2FsIENQVXMuCi0gICAqCi0gICAqIFdlIGhh
dmUgd3JpdGVMb2NrQWdncmVzc2l2ZSgpIHVzaW5nIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlv
bgotICAgKiBmb3IgYSB3cml0ZXIsIHdoaWNoIGdpdmVzIHNvbWUgYWR2YW50YWdlIHRvIHRoZSB3
cml0ZXIgb3ZlciB0aGUKLSAgICogcmVhZGVycy0tLWZvciB0aGF0IHBhdGggaXQgaXMgZ3VhcmFu
dGVlZCB0aGF0IHRoZSB3cml0ZXIgd2lsbAotICAgKiBhY3F1aXJlIHRoZSBsb2NrIGFmdGVyIGFs
bCB0aGUgZXhpc3RpbmcgcmVhZGVycyBleGl0LgotICAgKi8KLSAgYm9vbCB0cnlfbG9jaygpIHsK
LSAgICBSV1RpY2tldCB0OwotICAgIEZ1bGxJbnQgb2xkID0gdC53aG9sZSA9IGxvYWRfYWNxdWly
ZSgmdGlja2V0Lndob2xlKTsKLSAgICBpZiAodC51c2VycyAhPSB0LndyaXRlKSByZXR1cm4gZmFs
c2U7Ci0gICAgKyt0LnVzZXJzOwotICAgIHJldHVybiBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9z
d2FwKCZ0aWNrZXQud2hvbGUsIG9sZCwgdC53aG9sZSk7Ci0gIH0KLQotICAvKgotICAgKiBDYWxs
IHRoaXMgaWYgeW91IHdhbnQgdG8gcHJpb3JpdGl6ZSB3cml0ZXIgdG8gYXZvaWQgc3RhcnZhdGlv
bi4KLSAgICogVW5saWtlIHdyaXRlTG9ja05pY2UsIGltbWVkaWF0ZWx5IGFjcXVpcmVzIHRoZSB3
cml0ZSBsb2NrIHdoZW4KLSAgICogdGhlIGV4aXN0aW5nIHJlYWRlcnMgKGFycml2aW5nIGJlZm9y
ZSB0aGUgd3JpdGVyKSBmaW5pc2ggdGhlaXIKLSAgICogdHVybnMuCi0gICAqLwotICB2b2lkIHdy
aXRlTG9ja0FnZ3Jlc3NpdmUoKSB7Ci0gICAgLy8gc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKSBp
cyBuZWVkZWQgaGVyZSB0byBhdm9pZCBhIHBhdGhvbG9neSBpZiB0aGUgbnVtYmVyCi0gICAgLy8g
b2YgdGhyZWFkcyBhdHRlbXB0aW5nIGNvbmN1cnJlbnQgd3JpdGVzIGlzID49IHRoZSBudW1iZXIg
b2YgcmVhbAotICAgIC8vIGNvcmVzIGFsbG9jYXRlZCB0byB0aGlzIHByb2Nlc3MuIFRoaXMgaXMg
bGVzcyBsaWtlbHkgdGhhbiB0aGUKLSAgICAvLyBjb3JyZXNwb25kaW5nIHNpdHVhdGlvbiBpbiBs
b2NrX3NoYXJlZCgpLCBidXQgd2Ugc3RpbGwgd2FudCB0bwotICAgIC8vIGF2b2lkIGl0Ci0gICAg
aW50IGNvdW50ID0gMDsKLSAgICBRdWFydGVySW50IHZhbCA9IF9fc3luY19mZXRjaF9hbmRfYWRk
KCZ0aWNrZXQudXNlcnMsIDEpOwotICAgIHdoaWxlICh2YWwgIT0gbG9hZF9hY3F1aXJlKCZ0aWNr
ZXQud3JpdGUpKSB7Ci0gICAgICBhc21fdm9sYXRpbGVfcGF1c2UoKTsKLSAgICAgIGlmIChVTkxJ
S0VMWSgrK2NvdW50ID4gMTAwMCkpIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7Ci0gICAgfQot
ICB9Ci0KLSAgLy8gQ2FsbCB0aGlzIHdoZW4gdGhlIHdyaXRlciBzaG91bGQgYmUgbmljZXIgdG8g
dGhlIHJlYWRlcnMuCi0gIHZvaWQgd3JpdGVMb2NrTmljZSgpIHsKLSAgICAvLyBIZXJlIGl0IGRv
ZXNuJ3QgY3B1LXJlbGF4IHRoZSB3cml0ZXIuCi0gICAgLy8KLSAgICAvLyBUaGlzIGlzIGJlY2F1
c2UgdXN1YWxseSB3ZSBoYXZlIG1hbnkgbW9yZSByZWFkZXJzIHRoYW4gdGhlCi0gICAgLy8gd3Jp
dGVycywgc28gdGhlIHdyaXRlciBoYXMgbGVzcyBjaGFuY2UgdG8gZ2V0IHRoZSBsb2NrIHdoZW4K
LSAgICAvLyB0aGVyZSBhcmUgYSBsb3Qgb2YgY29tcGV0aW5nIHJlYWRlcnMuICBUaGUgYWdncmVz
c2l2ZSBzcGlubmluZwotICAgIC8vIGNhbiBoZWxwIHRvIGF2b2lkIHN0YXJ2aW5nIHdyaXRlcnMu
Ci0gICAgLy8KLSAgICAvLyBXZSBkb24ndCB3b3JyeSBhYm91dCBzdGQ6OnRoaXNfdGhyZWFkOjp5
aWVsZCgpIGhlcmUgYmVjYXVzZSB0aGUgY2FsbGVyCi0gICAgLy8gaGFzIGFscmVhZHkgZXhwbGlj
aXRseSBhYmFuZG9uZWQgZmFpcm5lc3MuCi0gICAgd2hpbGUgKCF0cnlfbG9jaygpKSB7fQotICB9
Ci0KLSAgLy8gQXRvbWljYWxseSB1bmxvY2sgdGhlIHdyaXRlLWxvY2sgZnJvbSB3cml0ZXIgYW5k
IGFjcXVpcmUgdGhlIHJlYWQtbG9jay4KLSAgdm9pZCB1bmxvY2tfYW5kX2xvY2tfc2hhcmVkKCkg
ewotICAgIFF1YXJ0ZXJJbnQgdmFsID0gX19zeW5jX2ZldGNoX2FuZF9hZGQoJnRpY2tldC5yZWFk
LCAxKTsKLSAgfQotCi0gIC8vIFJlbGVhc2Ugd3JpdGVyIHBlcm1pc3Npb24gb24gdGhlIGxvY2su
Ci0gIHZvaWQgdW5sb2NrKCkgewotICAgIFJXVGlja2V0IHQ7Ci0gICAgdC53aG9sZSA9IGxvYWRf
YWNxdWlyZSgmdGlja2V0Lndob2xlKTsKLSAgICBGdWxsSW50IG9sZCA9IHQud2hvbGU7Ci0KLSNp
ZmRlZiBSV19TUElOTE9DS19VU0VfU1NFX0lOU1RSVUNUSU9OU18KLSAgICAvLyBTU0UyIGNhbiBy
ZWR1Y2UgdGhlIGxvY2sgYW5kIHVubG9jayBvdmVyaGVhZCBieSAxMCUKLSAgICBzdGF0aWMgY29u
c3QgUXVhcnRlckludCBrRGVsdGFCdWZbNF0gPSB7IDEsIDEsIDAsIDAgfTsgICAvLyB3cml0ZS9y
ZWFkL3VzZXIKLSAgICBzdGF0aWMgY29uc3QgX19tMTI4aSBrRGVsdGEgPSBJbnRUcmFpdFR5cGU6
Om1ha2UxMjgoa0RlbHRhQnVmKTsKLSAgICBfX20xMjhpIG0gPSBJbnRUcmFpdFR5cGU6OmZyb21J
bnRlZ2VyKG9sZCk7Ci0gICAgdC53aG9sZSA9IEludFRyYWl0VHlwZTo6YWRkUGFyYWxsZWwobSwg
a0RlbHRhKTsKLSNlbHNlCi0gICAgKyt0LnJlYWQ7Ci0gICAgKyt0LndyaXRlOwotI2VuZGlmCi0g
ICAgc3RvcmVfcmVsZWFzZSgmdGlja2V0LnJlYWRXcml0ZSwgdC5yZWFkV3JpdGUpOwotICB9Ci0K
LSAgdm9pZCBsb2NrX3NoYXJlZCgpIHsKLSAgICAvLyBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgp
IGlzIGltcG9ydGFudCBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgZ3JhYiB0aGUKLSAgICAvLyBzaGFy
ZWQgbG9jayBpZiB0aGVyZSBpcyBhIHBlbmRpbmcgd3JpdGVMb2NrQWdncmVzc2l2ZSwgc28gd2UK
LSAgICAvLyBuZWVkIHRvIGxldCB0aHJlYWRzIHRoYXQgYWxyZWFkeSBoYXZlIGEgc2hhcmVkIGxv
Y2sgY29tcGxldGUKLSAgICBpbnQgY291bnQgPSAwOwotICAgIHdoaWxlICghTElLRUxZKHRyeV9s
b2NrX3NoYXJlZCgpKSkgewotICAgICAgYXNtX3ZvbGF0aWxlX3BhdXNlKCk7Ci0gICAgICBpZiAo
VU5MSUtFTFkoKCsrY291bnQgJiAxMDIzKSA9PSAwKSkgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQo
KTsKLSAgICB9Ci0gIH0KLQotICBib29sIHRyeV9sb2NrX3NoYXJlZCgpIHsKLSAgICBSV1RpY2tl
dCB0LCBvbGQ7Ci0gICAgb2xkLndob2xlID0gdC53aG9sZSA9IGxvYWRfYWNxdWlyZSgmdGlja2V0
Lndob2xlKTsKLSAgICBvbGQudXNlcnMgPSBvbGQucmVhZDsKLSNpZmRlZiBSV19TUElOTE9DS19V
U0VfU1NFX0lOU1RSVUNUSU9OU18KLSAgICAvLyBTU0UyIG1heSByZWR1Y2UgdGhlIHRvdGFsIGxv
Y2sgYW5kIHVubG9jayBvdmVyaGVhZCBieSAxMCUKLSAgICBzdGF0aWMgY29uc3QgUXVhcnRlcklu
dCBrRGVsdGFCdWZbNF0gPSB7IDAsIDEsIDEsIDAgfTsgICAvLyB3cml0ZS9yZWFkL3VzZXIKLSAg
ICBzdGF0aWMgY29uc3QgX19tMTI4aSBrRGVsdGEgPSBJbnRUcmFpdFR5cGU6Om1ha2UxMjgoa0Rl
bHRhQnVmKTsKLSAgICBfX20xMjhpIG0gPSBJbnRUcmFpdFR5cGU6OmZyb21JbnRlZ2VyKG9sZC53
aG9sZSk7Ci0gICAgdC53aG9sZSA9IEludFRyYWl0VHlwZTo6YWRkUGFyYWxsZWwobSwga0RlbHRh
KTsKLSNlbHNlCi0gICAgKyt0LnJlYWQ7Ci0gICAgKyt0LnVzZXJzOwotI2VuZGlmCi0gICAgcmV0
dXJuIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAoJnRpY2tldC53aG9sZSwgb2xkLndob2xl
LCB0Lndob2xlKTsKLSAgfQotCi0gIHZvaWQgdW5sb2NrX3NoYXJlZCgpIHsKLSAgICBRdWFydGVy
SW50IHZhbCA9IF9fc3luY19mZXRjaF9hbmRfYWRkKCZ0aWNrZXQud3JpdGUsIDEpOwotICB9Ci0K
LSAgY2xhc3MgV3JpdGVIb2xkZXI7Ci0KLSAgdHlwZWRlZiBSV1RpY2tldFNwaW5Mb2NrVDxrQml0
V2lkdGgsIGtGYXZvcldyaXRlcj4gUldTcGluTG9jazsKLSAgY2xhc3MgUmVhZEhvbGRlciB7Ci0g
ICBwdWJsaWM6Ci0gICAgUmVhZEhvbGRlcihSZWFkSG9sZGVyIGNvbnN0JikgPSBkZWxldGU7Ci0g
ICAgUmVhZEhvbGRlciYgb3BlcmF0b3I9KFJlYWRIb2xkZXIgY29uc3QmKSA9IGRlbGV0ZTsKLQot
ICAgIGV4cGxpY2l0IFJlYWRIb2xkZXIoUldTcGluTG9jayogbG9jaykgOiBsb2NrXyhsb2NrKSB7
Ci0gICAgICBpZiAobG9ja18pIGxvY2tfLT5sb2NrX3NoYXJlZCgpOwotICAgIH0KLQotICAgIGV4
cGxpY2l0IFJlYWRIb2xkZXIoUldTcGluTG9jayAmbG9jaykgOiBsb2NrXyAoJmxvY2spIHsKLSAg
ICAgIGlmIChsb2NrXykgbG9ja18tPmxvY2tfc2hhcmVkKCk7Ci0gICAgfQotCi0gICAgLy8gYXRv
bWljYWxseSB1bmxvY2sgdGhlIHdyaXRlLWxvY2sgZnJvbSB3cml0ZXIgYW5kIGFjcXVpcmUgdGhl
IHJlYWQtbG9jawotICAgIGV4cGxpY2l0IFJlYWRIb2xkZXIoV3JpdGVIb2xkZXIgKndyaXRlcikg
OiBsb2NrXyhudWxscHRyKSB7Ci0gICAgICBzdGQ6OnN3YXAodGhpcy0+bG9ja18sIHdyaXRlci0+
bG9ja18pOwotICAgICAgaWYgKGxvY2tfKSB7Ci0gICAgICAgIGxvY2tfLT51bmxvY2tfYW5kX2xv
Y2tfc2hhcmVkKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgflJlYWRIb2xkZXIoKSB7Ci0gICAg
ICBpZiAobG9ja18pIGxvY2tfLT51bmxvY2tfc2hhcmVkKCk7Ci0gICAgfQotCi0gICAgdm9pZCBy
ZXNldChSV1NwaW5Mb2NrICpsb2NrID0gbnVsbHB0cikgewotICAgICAgaWYgKGxvY2tfKSBsb2Nr
Xy0+dW5sb2NrX3NoYXJlZCgpOwotICAgICAgbG9ja18gPSBsb2NrOwotICAgICAgaWYgKGxvY2tf
KSBsb2NrXy0+bG9ja19zaGFyZWQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN3YXAoUmVhZEhvbGRl
ciAqb3RoZXIpIHsKLSAgICAgIHN0ZDo6c3dhcCh0aGlzLT5sb2NrXywgb3RoZXItPmxvY2tfKTsK
LSAgICB9Ci0KLSAgIHByaXZhdGU6Ci0gICAgUldTcGluTG9jayAqbG9ja187Ci0gIH07Ci0KLSAg
Y2xhc3MgV3JpdGVIb2xkZXIgewotICAgcHVibGljOgotICAgIFdyaXRlSG9sZGVyKFdyaXRlSG9s
ZGVyIGNvbnN0JikgPSBkZWxldGU7Ci0gICAgV3JpdGVIb2xkZXImIG9wZXJhdG9yPShXcml0ZUhv
bGRlciBjb25zdCYpID0gZGVsZXRlOwotCi0gICAgZXhwbGljaXQgV3JpdGVIb2xkZXIoUldTcGlu
TG9jayogbG9jaykgOiBsb2NrXyhsb2NrKSB7Ci0gICAgICBpZiAobG9ja18pIGxvY2tfLT5sb2Nr
KCk7Ci0gICAgfQotICAgIGV4cGxpY2l0IFdyaXRlSG9sZGVyKFJXU3BpbkxvY2sgJmxvY2spIDog
bG9ja18gKCZsb2NrKSB7Ci0gICAgICBpZiAobG9ja18pIGxvY2tfLT5sb2NrKCk7Ci0gICAgfQot
Ci0gICAgfldyaXRlSG9sZGVyKCkgewotICAgICAgaWYgKGxvY2tfKSBsb2NrXy0+dW5sb2NrKCk7
Ci0gICAgfQotCi0gICAgdm9pZCByZXNldChSV1NwaW5Mb2NrICpsb2NrID0gbnVsbHB0cikgewot
ICAgICAgaWYgKGxvY2sgPT0gbG9ja18pIHJldHVybjsKLSAgICAgIGlmIChsb2NrXykgbG9ja18t
PnVubG9jaygpOwotICAgICAgbG9ja18gPSBsb2NrOwotICAgICAgaWYgKGxvY2tfKSBsb2NrXy0+
bG9jaygpOwotICAgIH0KLQotICAgIHZvaWQgc3dhcChXcml0ZUhvbGRlciAqb3RoZXIpIHsKLSAg
ICAgIHN0ZDo6c3dhcCh0aGlzLT5sb2NrXywgb3RoZXItPmxvY2tfKTsKLSAgICB9Ci0KLSAgIHBy
aXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFJlYWRIb2xkZXI7Ci0gICAgUldTcGluTG9jayAqbG9j
a187Ci0gIH07Ci19OwotCi10eXBlZGVmIFJXVGlja2V0U3BpbkxvY2tUPDMyPiBSV1RpY2tldFNw
aW5Mb2NrMzI7Ci10eXBlZGVmIFJXVGlja2V0U3BpbkxvY2tUPDY0PiBSV1RpY2tldFNwaW5Mb2Nr
NjQ7Ci0KLSNlbmRpZiAgLy8gUldfU1BJTkxPQ0tfVVNFX1g4Nl9JTlRSSU5TSUNfCi0KLX0gIC8v
IG5hbWVzcGFjZSBmb2xseQotCi0jaWZkZWYgUldfU1BJTkxPQ0tfVVNFX1g4Nl9JTlRSSU5TSUNf
Ci0jdW5kZWYgUldfU1BJTkxPQ0tfVVNFX1g4Nl9JTlRSSU5TSUNfCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1JhbmRvbS1pbmwu
aCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1JhbmRvbS1pbmwu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA1ZWYxZmZhMTg5Nzk4Yjg2NTY2YjMz
MjlkMWJkYWRjY2FiMzEzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9SYW5kb20t
aW5sLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAy
MDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
SVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgRk9MTFlfUkFORE9NX0hfCi0jZXJyb3Ig
VGhpcyBmaWxlIG1heSBvbmx5IGJlIGluY2x1ZGVkIGZyb20gZm9sbHkvUmFuZG9tLmgKLSNlbmRp
ZgotCi0jaW5jbHVkZSA8YXJyYXk+Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLW5hbWVzcGFjZSBk
ZXRhaWwgewotCi0vLyBSZXR1cm4gdGhlIHN0YXRlIHNpemUgbmVlZGVkIGJ5IFJORywgZXhwcmVz
c2VkIGFzIGEgbnVtYmVyIG9mIHVpbnQzMl90Ci0vLyBpbnRlZ2Vycy4gU3BlY2lhbGl6ZWQgZm9y
IGFsbCB0ZW1wbGF0ZXMgc3BlY2lmaWVkIGluIHRoZSBDKysxMSBzdGFuZGFyZC4KLS8vIEZvciBz
b21lIChtZXJzZW5uZV90d2lzdGVyX2VuZ2luZSksIHRoaXMgaXMgZXhwb3J0ZWQgYXMgYSBzdGF0
ZV9zaXplIHN0YXRpYwotLy8gZGF0YSBtZW1iZXI7IGZvciBvdGhlcnMsIHRoZSBzdGFuZGFyZCBz
aG93cyBmb3JtdWxhcy4KLQotdGVtcGxhdGUgPGNsYXNzIFJORz4gc3RydWN0IFN0YXRlU2l6ZSB7
Ci0gIC8vIEEgc2FuZSBkZWZhdWx0LgotICBzdGF0aWMgY29uc3RleHByIHNpemVfdCB2YWx1ZSA9
IDUxMjsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBSTkc+Ci1jb25zdGV4cHIgc2l6ZV90IFN0YXRl
U2l6ZTxSTkc+Ojp2YWx1ZTsKLQotdGVtcGxhdGUgPGNsYXNzIFVJbnRUeXBlLCBVSW50VHlwZSBh
LCBVSW50VHlwZSBjLCBVSW50VHlwZSBtPgotc3RydWN0IFN0YXRlU2l6ZTxzdGQ6OmxpbmVhcl9j
b25ncnVlbnRpYWxfZW5naW5lPFVJbnRUeXBlLCBhLCBjLCBtPj4gewotICAvLyBGcm9tIHRoZSBz
dGFuZGFyZCBbcmFuZC5lbmcubGNvbmddLCB0aGlzIGlzIGNlaWwobG9nMihtKSAvIDMyKSArIDMs
Ci0gIC8vIHdoaWNoIGlzIHRoZSBzYW1lIGFzIGNlaWwoY2VpbChsb2cyKG0pIC8gMzIpICsgMywg
YW5kCi0gIC8vIGNlaWwobG9nMihtKSkgPD0gc3RkOjpudW1lcmljX2xpbWl0czxVSW50VHlwZT46
OmRpZ2l0cwotICBzdGF0aWMgY29uc3RleHByIHNpemVfdCB2YWx1ZSA9Ci0gICAgKHN0ZDo6bnVt
ZXJpY19saW1pdHM8VUludFR5cGU+OjpkaWdpdHMgKyAzMSkgLyAzMiArIDM7Ci19OwotCi10ZW1w
bGF0ZSA8Y2xhc3MgVUludFR5cGUsIFVJbnRUeXBlIGEsIFVJbnRUeXBlIGMsIFVJbnRUeXBlIG0+
Ci1jb25zdGV4cHIgc2l6ZV90Ci1TdGF0ZVNpemU8c3RkOjpsaW5lYXJfY29uZ3J1ZW50aWFsX2Vu
Z2luZTxVSW50VHlwZSwgYSwgYywgbT4+Ojp2YWx1ZTsKLQotdGVtcGxhdGUgPGNsYXNzIFVJbnRU
eXBlLCBzaXplX3Qgdywgc2l6ZV90IG4sIHNpemVfdCBtLCBzaXplX3QgciwKLSAgICAgICAgICBV
SW50VHlwZSBhLCBzaXplX3QgdSwgVUludFR5cGUgZCwgc2l6ZV90IHMsCi0gICAgICAgICAgVUlu
dFR5cGUgYiwgc2l6ZV90IHQsCi0gICAgICAgICAgVUludFR5cGUgYywgc2l6ZV90IGwsIFVJbnRU
eXBlIGY+Ci1zdHJ1Y3QgU3RhdGVTaXplPHN0ZDo6bWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8VUlu
dFR5cGUsIHcsIG4sIG0sIHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYSwgdSwgZCwgcywgYiwgdCwgYywgbCwgZj4+IHsKLSAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgdmFsdWUgPQotICAgIHN0ZDo6bWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8VUludFR5
cGUsIHcsIG4sIG0sIHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLCB1LCBk
LCBzLCBiLCB0LCBjLCBsLCBmPjo6c3RhdGVfc2l6ZTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBV
SW50VHlwZSwgc2l6ZV90IHcsIHNpemVfdCBuLCBzaXplX3QgbSwgc2l6ZV90IHIsCi0gICAgICAg
ICAgVUludFR5cGUgYSwgc2l6ZV90IHUsIFVJbnRUeXBlIGQsIHNpemVfdCBzLAotICAgICAgICAg
IFVJbnRUeXBlIGIsIHNpemVfdCB0LAotICAgICAgICAgIFVJbnRUeXBlIGMsIHNpemVfdCBsLCBV
SW50VHlwZSBmPgotY29uc3RleHByIHNpemVfdAotU3RhdGVTaXplPHN0ZDo6bWVyc2VubmVfdHdp
c3Rlcl9lbmdpbmU8VUludFR5cGUsIHcsIG4sIG0sIHIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhLCB1LCBkLCBzLCBiLCB0LCBjLCBsLCBmPj46OnZhbHVlOwotCi0j
aWYgRk9MTFlfSEFWRV9FWFRSQU5ET01fU0ZNVDE5OTM3Ci0KLXRlbXBsYXRlIDxjbGFzcyBVSW50
VHlwZSwgc2l6ZV90IG0sIHNpemVfdCBwb3MxLCBzaXplX3Qgc2wxLCBzaXplX3Qgc2wyLAotICAg
ICAgICAgIHNpemVfdCBzcjEsIHNpemVfdCBzcjIsIHVpbnQzMl90IG1zazEsIHVpbnQzMl90IG1z
azIsIHVpbnQzMl90IG1zazMsCi0gICAgICAgICAgdWludDMyX3QgbXNrNCwgdWludDMyX3QgcGFy
aXR5MSwgdWludDMyX3QgcGFyaXR5MiwgdWludDMyX3QgcGFyaXR5MywKLSAgICAgICAgICB1aW50
MzJfdCBwYXJpdHk0Pgotc3RydWN0IFN0YXRlU2l6ZTxfX2dudV9jeHg6OnNpbWRfZmFzdF9tZXJz
ZW5uZV90d2lzdGVyX2VuZ2luZTwKLSAgICBVSW50VHlwZSwgbSwgcG9zMSwgc2wxLCBzbDIsIHNy
MSwgc3IyLCBtc2sxLCBtc2syLCBtc2szLCBtc2s0LAotICAgIHBhcml0eTEsIHBhcml0eTIsIHBh
cml0eTMsIHBhcml0eTQ+PiB7Ci0gIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHZhbHVlID0KLSAg
ICBfX2dudV9jeHg6OnNpbWRfZmFzdF9tZXJzZW5uZV90d2lzdGVyX2VuZ2luZTwKLSAgICAgICAg
VUludFR5cGUsIG0sIHBvczEsIHNsMSwgc2wyLCBzcjEsIHNyMiwKLSAgICAgICAgbXNrMSwgbXNr
MiwgbXNrMywgbXNrNCwKLSAgICAgICAgcGFyaXR5MSwgcGFyaXR5MiwgcGFyaXR5MywgcGFyaXR5
ND46OnN0YXRlX3NpemU7Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVUludFR5cGUsIHNpemVfdCBt
LCBzaXplX3QgcG9zMSwgc2l6ZV90IHNsMSwgc2l6ZV90IHNsMiwKLSAgICAgICAgICBzaXplX3Qg
c3IxLCBzaXplX3Qgc3IyLCB1aW50MzJfdCBtc2sxLCB1aW50MzJfdCBtc2syLCB1aW50MzJfdCBt
c2szLAotICAgICAgICAgIHVpbnQzMl90IG1zazQsIHVpbnQzMl90IHBhcml0eTEsIHVpbnQzMl90
IHBhcml0eTIsIHVpbnQzMl90IHBhcml0eTMsCi0gICAgICAgICAgdWludDMyX3QgcGFyaXR5ND4K
LWNvbnN0ZXhwciBzaXplX3QKLVN0YXRlU2l6ZTxfX2dudV9jeHg6OnNpbWRfZmFzdF9tZXJzZW5u
ZV90d2lzdGVyX2VuZ2luZTwKLSAgICBVSW50VHlwZSwgbSwgcG9zMSwgc2wxLCBzbDIsIHNyMSwg
c3IyLCBtc2sxLCBtc2syLCBtc2szLCBtc2s0LAotICAgIHBhcml0eTEsIHBhcml0eTIsIHBhcml0
eTMsIHBhcml0eTQ+Pjo6dmFsdWU7Ci0KLSNlbmRpZgotCi10ZW1wbGF0ZSA8Y2xhc3MgVUludFR5
cGUsIHNpemVfdCB3LCBzaXplX3Qgcywgc2l6ZV90IHI+Ci1zdHJ1Y3QgU3RhdGVTaXplPHN0ZDo6
c3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU8VUludFR5cGUsIHcsIHMsIHI+PiB7Ci0gIC8vIFty
YW5kLmVuZy5zdWJdOiByICogY2VpbCh3IC8gMzIpCi0gIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IHZhbHVlID0gciAqICgodyArIDMxKSAvIDMyKTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBVSW50
VHlwZSwgc2l6ZV90IHcsIHNpemVfdCBzLCBzaXplX3Qgcj4KLWNvbnN0ZXhwciBzaXplX3QKLVN0
YXRlU2l6ZTxzdGQ6OnN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPFVJbnRUeXBlLCB3LCBzLCBy
Pj46OnZhbHVlOwotCi10ZW1wbGF0ZSA8Y2xhc3MgUk5HPgotc3RydWN0IFNlZWREYXRhIHsKLSAg
U2VlZERhdGEoKSB7Ci0gICAgUmFuZG9tOjpzZWN1cmVSYW5kb20oc2VlZERhdGEuZGF0YSgpLCBz
ZWVkRGF0YS5zaXplKCkgKiBzaXplb2YodWludDMyX3QpKTsKLSAgfQotCi0gIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IHN0YXRlU2l6ZSA9IFN0YXRlU2l6ZTxSTkc+Ojp2YWx1ZTsKLSAgc3RkOjph
cnJheTx1aW50MzJfdCwgc3RhdGVTaXplPiBzZWVkRGF0YTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFj
ZSBkZXRhaWwKLQotdGVtcGxhdGUgPGNsYXNzIFJORywgY2xhc3MgLyogRW5hYmxlSWYgKi8+Ci12
b2lkIFJhbmRvbTo6c2VlZChSTkcmIHJuZykgewotICBkZXRhaWw6OlNlZWREYXRhPFJORz4gc2Q7
Ci0gIHN0ZDo6c2VlZF9zZXEgcyhzdGQ6OmJlZ2luKHNkLnNlZWREYXRhKSwgc3RkOjplbmQoc2Qu
c2VlZERhdGEpKTsKLSAgcm5nLnNlZWQocyk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBSTkcsIGNs
YXNzIC8qIEVuYWJsZUlmICovPgotYXV0byBSYW5kb206OmNyZWF0ZSgpIC0+IFJORyB7Ci0gIGRl
dGFpbDo6U2VlZERhdGE8Uk5HPiBzZDsKLSAgc3RkOjpzZWVkX3NlcSBzKHN0ZDo6YmVnaW4oc2Qu
c2VlZERhdGEpLCBzdGQ6OmVuZChzZC5zZWVkRGF0YSkpOwotICByZXR1cm4gUk5HKHMpOwotfQot
Ci19ICAvLyBuYW1lc3BhY2VzCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9mb2xseS9SYW5kb20uY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZm9sbHkvUmFuZG9tLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NzJkY2Q2OWIyOGJkZDQ3MzhlOTMzZTA4MWEyMGU1MmQ4MzI1NGViZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9mb2xseS9SYW5kb20uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2Vk
IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwot
ICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo
ZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0g
KgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0g
KiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8
Zm9sbHkvUmFuZG9tLmg+Ci0KLSNpbmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDxhdG9taWM+Ci0j
aW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8cmFuZG9tPgotCi0jaW5jbHVkZSA8Zm9sbHkvQ2Fs
bE9uY2UuaD4KLSNpbmNsdWRlIDxmb2xseS9GaWxlLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvRmlsZVV0
aWwuaD4KLSNpbmNsdWRlIDxmb2xseS9kZXRhaWwvRmlsZVV0aWxEZXRhaWwuaD4KLSNpbmNsdWRl
IDxmb2xseS9TaW5nbGV0b25UaHJlYWRMb2NhbC5oPgotI2luY2x1ZGUgPGZvbGx5L1RocmVhZExv
Y2FsLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvU3lzVGltZS5oPgotI2luY2x1ZGUg
PGZvbGx5L3BvcnRhYmlsaXR5L1VuaXN0ZC5oPgotI2luY2x1ZGUgPGdsb2cvbG9nZ2luZy5oPgot
Ci0jaWZkZWYgX01TQ19WRVIKLSNpbmNsdWRlIDx3aW5jcnlwdC5oPiAvLyBAbWFudWFsCi0jZW5k
aWYKLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotbmFtZXNwYWNlIHsKLQotdm9pZCByZWFkUmFuZG9t
RGV2aWNlKHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0jaWZkZWYgX01TQ19WRVIKLSAgc3Rh
dGljIGZvbGx5OjpvbmNlX2ZsYWcgZmxhZzsKLSAgc3RhdGljIEhDUllQVFBST1YgY3J5cHRvUHJv
djsKLSAgZm9sbHk6OmNhbGxfb25jZShmbGFnLCBbJl0gewotICAgIGlmICghQ3J5cHRBY3F1aXJl
Q29udGV4dCgKLSAgICAgICAgICAgICZjcnlwdG9Qcm92LAotICAgICAgICAgICAgbnVsbHB0ciwK
LSAgICAgICAgICAgIG51bGxwdHIsCi0gICAgICAgICAgICBQUk9WX1JTQV9GVUxMLAotICAgICAg
ICAgICAgQ1JZUFRfVkVSSUZZQ09OVEVYVCkpIHsKLSAgICAgIGlmIChHZXRMYXN0RXJyb3IoKSA9
PSBOVEVfQkFEX0tFWVNFVCkgewotICAgICAgICAvLyBNb3N0bHkgbGlrZWx5IGNhdXNlIG9mIHRo
aXMgaXMgdGhhdCBubyBrZXkgY29udGFpbmVyCi0gICAgICAgIC8vIGV4aXN0cyB5ZXQsIHNvIHRy
eSB0byBjcmVhdGUgb25lLgotICAgICAgICBQQ0hFQ0soQ3J5cHRBY3F1aXJlQ29udGV4dCgKLSAg
ICAgICAgICAgICZjcnlwdG9Qcm92LCBudWxscHRyLCBudWxscHRyLCBQUk9WX1JTQV9GVUxMLCBD
UllQVF9ORVdLRVlTRVQpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIExPRyhGQVRBTCkgPDwg
IkZhaWxlZCB0byBhY3F1aXJlIHRoZSBkZWZhdWx0IGNyeXB0byBjb250ZXh0LiI7Ci0gICAgICB9
Ci0gICAgfQotICB9KTsKLSAgQ0hFQ0soc2l6ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPERXT1JE
Pjo6bWF4KCkpOwotICBQQ0hFQ0soQ3J5cHRHZW5SYW5kb20oY3J5cHRvUHJvdiwgKERXT1JEKXNp
emUsIChCWVRFKilkYXRhKSk7Ci0jZWxzZQotICAvLyBLZWVwIHRoZSByYW5kb20gZGV2aWNlIG9w
ZW4gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcHJvZ3JhbS4KLSAgc3RhdGljIGludCByYW5kb21G
ZCA9IDo6b3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOwotICBQQ0hFQ0socmFuZG9tRmQg
Pj0gMCk7Ci0gIGF1dG8gYnl0ZXNSZWFkID0gZm9sbHk6OmZpbGV1dGlsX2RldGFpbDo6d3JhcEZ1
bGwocmVhZCwgcmFuZG9tRmQsIGRhdGEsIHNpemUpOwotICBQQ0hFQ0soYnl0ZXNSZWFkID49IDAg
JiYgc2l6ZV90KGJ5dGVzUmVhZCkgPT0gc2l6ZSk7Ci0jZW5kaWYKLX0KLQotY2xhc3MgQnVmZmVy
ZWRSYW5kb21EZXZpY2UgewotIHB1YmxpYzoKLSAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga0Rl
ZmF1bHRCdWZmZXJTaXplID0gMTI4OwotCi0gIGV4cGxpY2l0IEJ1ZmZlcmVkUmFuZG9tRGV2aWNl
KHNpemVfdCBidWZmZXJTaXplID0ga0RlZmF1bHRCdWZmZXJTaXplKTsKLQotICB2b2lkIGdldCh2
b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICAgIGlmIChMSUtFTFkoc2l6ZSA8PSByZW1haW5p
bmcoKSkpIHsKLSAgICAgIG1lbWNweShkYXRhLCBwdHJfLCBzaXplKTsKLSAgICAgIHB0cl8gKz0g
c2l6ZTsKLSAgICB9IGVsc2UgewotICAgICAgZ2V0U2xvdyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4oZGF0YSksIHNpemUpOwotICAgIH0KLSAgfQotCi0gcHJpdmF0ZToKLSAgdm9pZCBnZXRT
bG93KHVuc2lnbmVkIGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsKLQotICBpbmxpbmUgc2l6ZV90
IHJlbWFpbmluZygpIGNvbnN0IHsKLSAgICByZXR1cm4gc2l6ZV90KGJ1ZmZlcl8uZ2V0KCkgKyBi
dWZmZXJTaXplXyAtIHB0cl8pOwotICB9Ci0KLSAgY29uc3Qgc2l6ZV90IGJ1ZmZlclNpemVfOwot
ICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hhcltdPiBidWZmZXJfOwotICB1bnNpZ25lZCBj
aGFyKiBwdHJfOwotfTsKLQotQnVmZmVyZWRSYW5kb21EZXZpY2U6OkJ1ZmZlcmVkUmFuZG9tRGV2
aWNlKHNpemVfdCBidWZmZXJTaXplKQotICA6IGJ1ZmZlclNpemVfKGJ1ZmZlclNpemUpLAotICAg
IGJ1ZmZlcl8obmV3IHVuc2lnbmVkIGNoYXJbYnVmZmVyU2l6ZV0pLAotICAgIHB0cl8oYnVmZmVy
Xy5nZXQoKSArIGJ1ZmZlclNpemUpIHsgIC8vIHJlZmlsbCBvbiBmaXJzdCB1c2UKLX0KLQotdm9p
ZCBCdWZmZXJlZFJhbmRvbURldmljZTo6Z2V0U2xvdyh1bnNpZ25lZCBjaGFyKiBkYXRhLCBzaXpl
X3Qgc2l6ZSkgewotICBEQ0hFQ0tfR1Qoc2l6ZSwgcmVtYWluaW5nKCkpOwotICBpZiAoc2l6ZSA+
PSBidWZmZXJTaXplXykgewotICAgIC8vIEp1c3QgcmVhZCBkaXJlY3RseS4KLSAgICByZWFkUmFu
ZG9tRGV2aWNlKGRhdGEsIHNpemUpOwotICAgIHJldHVybjsKLSAgfQotCi0gIHNpemVfdCBjb3Bp
ZWQgPSByZW1haW5pbmcoKTsKLSAgbWVtY3B5KGRhdGEsIHB0cl8sIGNvcGllZCk7Ci0gIGRhdGEg
Kz0gY29waWVkOwotICBzaXplIC09IGNvcGllZDsKLQotICAvLyByZWZpbGwKLSAgcmVhZFJhbmRv
bURldmljZShidWZmZXJfLmdldCgpLCBidWZmZXJTaXplXyk7Ci0gIHB0cl8gPSBidWZmZXJfLmdl
dCgpOwotCi0gIG1lbWNweShkYXRhLCBwdHJfLCBzaXplKTsKLSAgcHRyXyArPSBzaXplOwotfQot
Ci1zdHJ1Y3QgUmFuZG9tVGFnIHt9OwotCi19IC8vIG5hbWVzcGFjZQotCi12b2lkIFJhbmRvbTo6
c2VjdXJlUmFuZG9tKHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gIHN0YXRpYyBTaW5nbGV0
b25UaHJlYWRMb2NhbDxCdWZmZXJlZFJhbmRvbURldmljZSwgUmFuZG9tVGFnPgotICAgICAgYnVm
ZmVyZWRSYW5kb21EZXZpY2U7Ci0gIGJ1ZmZlcmVkUmFuZG9tRGV2aWNlLmdldCgpLmdldChkYXRh
LCBzaXplKTsKLX0KLQotY2xhc3MgVGhyZWFkTG9jYWxQUk5HOjpMb2NhbEluc3RhbmNlUFJORyB7
Ci0gcHVibGljOgotICBMb2NhbEluc3RhbmNlUFJORygpIDogcm5nKFJhbmRvbTo6Y3JlYXRlKCkp
IHt9Ci0KLSAgUmFuZG9tOjpEZWZhdWx0R2VuZXJhdG9yIHJuZzsKLX07Ci0KLVRocmVhZExvY2Fs
UFJORzo6VGhyZWFkTG9jYWxQUk5HKCkgewotICBzdGF0aWMgU2luZ2xldG9uVGhyZWFkTG9jYWw8
VGhyZWFkTG9jYWxQUk5HOjpMb2NhbEluc3RhbmNlUFJORywgUmFuZG9tVGFnPgotICAgICAgbG9j
YWxJbnN0YW5jZVBSTkc7Ci0gIGxvY2FsXyA9ICZsb2NhbEluc3RhbmNlUFJORy5nZXQoKTsKLX0K
LQotdWludDMyX3QgVGhyZWFkTG9jYWxQUk5HOjpnZXRJbXBsKExvY2FsSW5zdGFuY2VQUk5HKiBs
b2NhbCkgewotICByZXR1cm4gbG9jYWwtPnJuZygpOwotfQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvUmFuZG9tLmggYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9SYW5kb20uaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDA0MjE3NmI2OGQ0NzRjMmE3M2Q4ZTlhMjBkMThiZjQ5YWUxMDVhOS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9SYW5kb20uaAorKysgL2Rldi9udWxsCkBA
IC0xLDI5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAq
Ci0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0jZGVmaW5lIEZPTExZX1JBTkRPTV9IXwotCi0jaW5jbHVkZSA8Y3N0
ZGludD4KLSNpbmNsdWRlIDxyYW5kb20+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0KLSNpbmNs
dWRlIDxmb2xseS9Qb3J0YWJpbGl0eS5oPgotCi0jaWYgRk9MTFlfSEFWRV9FWFRSQU5ET01fU0ZN
VDE5OTM3Ci0jaW5jbHVkZSA8ZXh0L3JhbmRvbT4KLSNlbmRpZgotCi1uYW1lc3BhY2UgZm9sbHkg
ewotCi0vKioKLSAqIEEgUFJORyB3aXRoIG9uZSBpbnN0YW5jZSBwZXIgdGhyZWFkLiBUaGlzIFBS
TkcgdXNlcyBhIG1lcnNlbm5lIHR3aXN0ZXIgcmFuZG9tCi0gKiBudW1iZXIgZ2VuZXJhdG9yIGFu
ZCBpcyBzZWVkZWQgZnJvbSAvZGV2L3VyYW5kb20uIEl0IHNob3VsZCBub3QgYmUgdXNlZCBmb3IK
LSAqIGFueXRoaW5nIHdoaWNoIHJlcXVpcmVzIHNlY3VyaXR5LCBvbmx5IGZvciBzdGF0aXN0aWNh
bCByYW5kb21uZXNzLgotICoKLSAqIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50
cyB0aGUgY3VycmVudCB0aHJlYWRzIFBSTkcuIFRoaXMgbWVhbnMKLSAqIGNvcHlpbmcgYW4gaW5z
dGFuY2Ugb2YgdGhpcyBjbGFzcyBhY3Jvc3MgdGhyZWFkcyB3aWxsIHJlc3VsdCBpbiBjb3JydXB0
aW9uCi0gKgotICogTW9zdCB1c2VycyB3aWxsIHVzZSB0aGUgUmFuZG9tIGNsYXNzIHdoaWNoIGlt
cGxpY2l0bHkgY3JlYXRlcyB0aGlzIGNsYXNzLgotICogSG93ZXZlciwgaWYgeW91IGFyZSB3b3Jy
aWVkIGFib3V0IHBlcmZvcm1hbmNlLCB5b3UgY2FuIG1lbW9pemUgdGhlIFRMUwotICogbG9va3Vw
cyB0aGF0IGdldCB0aGUgcGVyIHRocmVhZCBzdGF0ZSBieSBtYW51YWxseSB1c2luZyB0aGlzIGNs
YXNzOgotICoKLSAqIFRocmVhZExvY2FsUFJORyBybmc7Ci0gKiBmb3IgKC4uLikgewotICogICBS
YW5kb206OnJhbmQzMihybmcpOwotICogfQotICovCi1jbGFzcyBUaHJlYWRMb2NhbFBSTkcgewot
IHB1YmxpYzoKLSAgdHlwZWRlZiB1aW50MzJfdCByZXN1bHRfdHlwZTsKLQotICB1aW50MzJfdCBv
cGVyYXRvcigpKCkgewotICAgIC8vIFVzaW5nIGEgc3RhdGljIG1ldGhvZCBhbGxvd3MgdGhlIGNv
bXBpbGVyIHRvIGF2b2lkIGFsbG9jYXRpbmcgc3RhY2sgc3BhY2UKLSAgICAvLyBmb3IgdGhpcyBj
bGFzcy4KLSAgICByZXR1cm4gZ2V0SW1wbChsb2NhbF8pOwotICB9Ci0KLSAgc3RhdGljIGNvbnN0
ZXhwciByZXN1bHRfdHlwZSBtaW4oKSB7Ci0gICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
cmVzdWx0X3R5cGU+OjptaW4oKTsKLSAgfQotICBzdGF0aWMgY29uc3RleHByIHJlc3VsdF90eXBl
IG1heCgpIHsKLSAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1h
eCgpOwotICB9Ci0gIGZyaWVuZCBjbGFzcyBSYW5kb207Ci0KLSAgVGhyZWFkTG9jYWxQUk5HKCk7
Ci0KLSAgY2xhc3MgTG9jYWxJbnN0YW5jZVBSTkc7Ci0KLSBwcml2YXRlOgotICBzdGF0aWMgcmVz
dWx0X3R5cGUgZ2V0SW1wbChMb2NhbEluc3RhbmNlUFJORyogbG9jYWwpOwotICBMb2NhbEluc3Rh
bmNlUFJORyogbG9jYWxfOwotfTsKLQotCi1jbGFzcyBSYW5kb20gewotCi0gcHJpdmF0ZToKLSAg
dGVtcGxhdGUgPGNsYXNzIFJORz4KLSAgdXNpbmcgVmFsaWRSTkcgPSB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjwKLSAgICAgIHN0ZDo6aXNfdW5zaWduZWQ8dHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8
Uk5HJigpPjo6dHlwZT46OnZhbHVlLAotICAgICAgUk5HPjo6dHlwZTsKLQotIHB1YmxpYzoKLSAg
Ly8gRGVmYXVsdCBnZW5lcmF0b3IgdHlwZS4KLSNpZiBGT0xMWV9IQVZFX0VYVFJBTkRPTV9TRk1U
MTk5MzcKLSAgdHlwZWRlZiBfX2dudV9jeHg6OnNmbXQxOTkzNyBEZWZhdWx0R2VuZXJhdG9yOwot
I2Vsc2UKLSAgdHlwZWRlZiBzdGQ6Om10MTk5MzcgRGVmYXVsdEdlbmVyYXRvcjsKLSNlbmRpZgot
Ci0gIC8qKgotICAgKiBHZXQgc2VjdXJlIHJhbmRvbSBieXRlcy4gKE9uIExpbnV4IGFuZCBPU1gs
IHRoaXMgbWVhbnMgL2Rldi91cmFuZG9tKS4KLSAgICovCi0gIHN0YXRpYyB2b2lkIHNlY3VyZVJh
bmRvbSh2b2lkKiBkYXRhLCBzaXplX3QgbGVuKTsKLQotICAvKioKLSAgICogU2hvcnRjdXQgdG8g
Z2V0IGEgc2VjdXJlIHJhbmRvbSB2YWx1ZSBvZiBpbnRlZ3JhbCB0eXBlLgotICAgKi8KLSAgdGVt
cGxhdGUgPGNsYXNzIFQ+Ci0gIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICBz
dGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQsYm9vbD46OnZhbHVl
LAotICAgIFQ+Ojp0eXBlCi0gIHNlY3VyZVJhbmRvbSgpIHsKLSAgICBUIHZhbDsKLSAgICBzZWN1
cmVSYW5kb20oJnZhbCwgc2l6ZW9mKHZhbCkpOwotICAgIHJldHVybiB2YWw7Ci0gIH0KLQotICAv
KioKLSAgICogKFJlLSlTZWVkIGFuIGV4aXN0aW5nIFJORyB3aXRoIGEgZ29vZCBzZWVkLgotICAg
KgotICAgKiBOb3RlIHRoYXQgeW91IHNob3VsZCB1c3VhbGx5IHVzZSBUaHJlYWRMb2NhbFBSTkcg
dW5sZXNzIHlvdSBuZWVkCi0gICAqIHJlcHJvZHVjaWJpbGl0eSAoc3VjaCBhcyBkdXJpbmcgYSB0
ZXN0KSwgaW4gd2hpY2ggY2FzZSB5b3UnZCB3YW50Ci0gICAqIHRvIGNyZWF0ZSBhIFJORyB3aXRo
IGEgZ29vZCBzZWVkIGluIHByb2R1Y3Rpb24sIGFuZCBzZWVkIGl0IHlvdXJzZWxmCi0gICAqIGlu
IHRlc3QuCi0gICAqLwotICB0ZW1wbGF0ZSA8Y2xhc3MgUk5HID0gRGVmYXVsdEdlbmVyYXRvciwg
Y2xhc3MgLyogRW5hYmxlSWYgKi8gPSBWYWxpZFJORzxSTkc+PgotICBzdGF0aWMgdm9pZCBzZWVk
KFJORyYgcm5nKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgbmV3IFJORywgc2VlZGVkIHdpdGgg
YSBnb29kIHNlZWQuCi0gICAqCi0gICAqIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIHVzdWFsbHkgdXNl
IFRocmVhZExvY2FsUFJORyB1bmxlc3MgeW91IG5lZWQKLSAgICogcmVwcm9kdWNpYmlsaXR5IChz
dWNoIGFzIGR1cmluZyBhIHRlc3QpLCBpbiB3aGljaCBjYXNlIHlvdSdkIHdhbnQKLSAgICogdG8g
Y3JlYXRlIGEgUk5HIHdpdGggYSBnb29kIHNlZWQgaW4gcHJvZHVjdGlvbiwgYW5kIHNlZWQgaXQg
eW91cnNlbGYKLSAgICogaW4gdGVzdC4KLSAgICovCi0gIHRlbXBsYXRlIDxjbGFzcyBSTkcgPSBE
ZWZhdWx0R2VuZXJhdG9yLCBjbGFzcyAvKiBFbmFibGVJZiAqLyA9IFZhbGlkUk5HPFJORz4+Ci0g
IHN0YXRpYyBSTkcgY3JlYXRlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSByYW5kb20gdWlu
dDMyX3QKLSAgICovCi0gIHN0YXRpYyB1aW50MzJfdCByYW5kMzIoKSB7Ci0gICAgcmV0dXJuIHJh
bmQzMihUaHJlYWRMb2NhbFBSTkcoKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIHJh
bmRvbSB1aW50MzJfdCBnaXZlbiBhIHNwZWNpZmljIFJORwotICAgKi8KLSAgdGVtcGxhdGUgPGNs
YXNzIFJORywgY2xhc3MgLyogRW5hYmxlSWYgKi8gPSBWYWxpZFJORzxSTkc+PgotICBzdGF0aWMg
dWludDMyX3QgcmFuZDMyKFJORyYmIHJuZykgewotICAgIHJldHVybiBybmcoKTsKLSAgfQotCi0g
IC8qKgotICAgKiBSZXR1cm5zIGEgcmFuZG9tIHVpbnQzMl90IGluIFswLCBtYXgpLiBJZiBtYXgg
PT0gMCwgcmV0dXJucyAwLgotICAgKi8KLSAgc3RhdGljIHVpbnQzMl90IHJhbmQzMih1aW50MzJf
dCBtYXgpIHsKLSAgICByZXR1cm4gcmFuZDMyKDAsIG1heCwgVGhyZWFkTG9jYWxQUk5HKCkpOwot
ICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSByYW5kb20gdWludDMyX3QgaW4gWzAsIG1heCkg
Z2l2ZW4gYSBzcGVjaWZpYyBSTkcuCi0gICAqIElmIG1heCA9PSAwLCByZXR1cm5zIDAuCi0gICAq
LwotICB0ZW1wbGF0ZSA8Y2xhc3MgUk5HID0gVGhyZWFkTG9jYWxQUk5HLCBjbGFzcyAvKiBFbmFi
bGVJZiAqLyA9IFZhbGlkUk5HPFJORz4+Ci0gIHN0YXRpYyB1aW50MzJfdCByYW5kMzIodWludDMy
X3QgbWF4LCBSTkcmJiBybmcpIHsKLSAgICByZXR1cm4gcmFuZDMyKDAsIG1heCwgcm5nKTsKLSAg
fQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgcmFuZG9tIHVpbnQzMl90IGluIFttaW4sIG1heCku
IElmIG1pbiA9PSBtYXgsIHJldHVybnMgMC4KLSAgICovCi0gIHN0YXRpYyB1aW50MzJfdCByYW5k
MzIodWludDMyX3QgbWluLCB1aW50MzJfdCBtYXgpIHsKLSAgICByZXR1cm4gcmFuZDMyKG1pbiwg
bWF4LCBUaHJlYWRMb2NhbFBSTkcoKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIHJh
bmRvbSB1aW50MzJfdCBpbiBbbWluLCBtYXgpIGdpdmVuIGEgc3BlY2lmaWMgUk5HLgotICAgKiBJ
ZiBtaW4gPT0gbWF4LCByZXR1cm5zIDAuCi0gICAqLwotICB0ZW1wbGF0ZSA8Y2xhc3MgUk5HID0g
VGhyZWFkTG9jYWxQUk5HLCBjbGFzcyAvKiBFbmFibGVJZiAqLyA9IFZhbGlkUk5HPFJORz4+Ci0g
IHN0YXRpYyB1aW50MzJfdCByYW5kMzIodWludDMyX3QgbWluLCB1aW50MzJfdCBtYXgsIFJORyYm
IHJuZykgewotICAgIGlmIChtaW4gPT0gbWF4KSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgcmV0dXJuIHN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPHVpbnQzMl90PihtaW4sIG1h
eCAtIDEpKHJuZyk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIHJhbmRvbSB1aW50NjRf
dAotICAgKi8KLSAgc3RhdGljIHVpbnQ2NF90IHJhbmQ2NCgpIHsKLSAgICByZXR1cm4gcmFuZDY0
KFRocmVhZExvY2FsUFJORygpKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgcmFuZG9t
IHVpbnQ2NF90Ci0gICAqLwotICB0ZW1wbGF0ZSA8Y2xhc3MgUk5HID0gVGhyZWFkTG9jYWxQUk5H
LCBjbGFzcyAvKiBFbmFibGVJZiAqLyA9IFZhbGlkUk5HPFJORz4+Ci0gIHN0YXRpYyB1aW50NjRf
dCByYW5kNjQoUk5HJiYgcm5nKSB7Ci0gICAgcmV0dXJuICgodWludDY0X3Qpcm5nKCkgPDwgMzIp
IHwgcm5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIHJhbmRvbSB1aW50NjRfdCBp
biBbMCwgbWF4KS4gSWYgbWF4ID09IDAsIHJldHVybnMgMC4KLSAgICovCi0gIHN0YXRpYyB1aW50
NjRfdCByYW5kNjQodWludDY0X3QgbWF4KSB7Ci0gICAgcmV0dXJuIHJhbmQ2NCgwLCBtYXgsIFRo
cmVhZExvY2FsUFJORygpKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgcmFuZG9tIHVp
bnQ2NF90IGluIFswLCBtYXgpLiBJZiBtYXggPT0gMCwgcmV0dXJucyAwLgotICAgKi8KLSAgdGVt
cGxhdGUgPGNsYXNzIFJORyA9IFRocmVhZExvY2FsUFJORywgY2xhc3MgLyogRW5hYmxlSWYgKi8g
PSBWYWxpZFJORzxSTkc+PgotICBzdGF0aWMgdWludDY0X3QgcmFuZDY0KHVpbnQ2NF90IG1heCwg
Uk5HJiYgcm5nKSB7Ci0gICAgcmV0dXJuIHJhbmQ2NCgwLCBtYXgsIHJuZyk7Ci0gIH0KLQotICAv
KioKLSAgICogUmV0dXJucyBhIHJhbmRvbSB1aW50NjRfdCBpbiBbbWluLCBtYXgpLiBJZiBtaW4g
PT0gbWF4LCByZXR1cm5zIDAuCi0gICAqLwotICBzdGF0aWMgdWludDY0X3QgcmFuZDY0KHVpbnQ2
NF90IG1pbiwgdWludDY0X3QgbWF4KSB7Ci0gICAgcmV0dXJuIHJhbmQ2NChtaW4sIG1heCwgVGhy
ZWFkTG9jYWxQUk5HKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSByYW5kb20gdWlu
dDY0X3QgaW4gW21pbiwgbWF4KS4gSWYgbWluID09IG1heCwgcmV0dXJucyAwLgotICAgKi8KLSAg
dGVtcGxhdGUgPGNsYXNzIFJORyA9IFRocmVhZExvY2FsUFJORywgY2xhc3MgLyogRW5hYmxlSWYg
Ki8gPSBWYWxpZFJORzxSTkc+PgotICBzdGF0aWMgdWludDY0X3QgcmFuZDY0KHVpbnQ2NF90IG1p
biwgdWludDY0X3QgbWF4LCBSTkcmJiBybmcpIHsKLSAgICBpZiAobWluID09IG1heCkgewotICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1
dGlvbjx1aW50NjRfdD4obWluLCBtYXggLSAxKShybmcpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJl
dHVybnMgdHJ1ZSAxL24gb2YgdGhlIHRpbWUuIElmIG4gPT0gMCwgYWx3YXlzIHJldHVybnMgZmFs
c2UKLSAgICovCi0gIHN0YXRpYyBib29sIG9uZUluKHVpbnQzMl90IG4pIHsKLSAgICByZXR1cm4g
b25lSW4obiwgVGhyZWFkTG9jYWxQUk5HKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMg
dHJ1ZSAxL24gb2YgdGhlIHRpbWUuIElmIG4gPT0gMCwgYWx3YXlzIHJldHVybnMgZmFsc2UKLSAg
ICovCi0gIHRlbXBsYXRlIDxjbGFzcyBSTkcgPSBUaHJlYWRMb2NhbFBSTkcsIGNsYXNzIC8qIEVu
YWJsZUlmICovID0gVmFsaWRSTkc8Uk5HPj4KLSAgc3RhdGljIGJvb2wgb25lSW4odWludDMyX3Qg
biwgUk5HJiYgcm5nKSB7Ci0gICAgaWYgKG4gPT0gMCkgewotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gcmFuZDMyKDAsIG4sIHJuZykgPT0gMDsKLSAgfQotCi0gIC8qKgot
ICAgKiBSZXR1cm5zIGEgZG91YmxlIGluIFswLCAxKQotICAgKi8KLSAgc3RhdGljIGRvdWJsZSBy
YW5kRG91YmxlMDEoKSB7Ci0gICAgcmV0dXJuIHJhbmREb3VibGUwMShUaHJlYWRMb2NhbFBSTkco
KSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIGRvdWJsZSBpbiBbMCwgMSkKLSAgICov
Ci0gIHRlbXBsYXRlIDxjbGFzcyBSTkcgPSBUaHJlYWRMb2NhbFBSTkcsIGNsYXNzIC8qIEVuYWJs
ZUlmICovID0gVmFsaWRSTkc8Uk5HPj4KLSAgc3RhdGljIGRvdWJsZSByYW5kRG91YmxlMDEoUk5H
JiYgcm5nKSB7Ci0gICAgcmV0dXJuIHN0ZDo6Z2VuZXJhdGVfY2Fub25pY2FsPGRvdWJsZSwgc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpkaWdpdHM+KAotICAgICAgICBybmcpOwotICB9Ci0K
LSAgLyoqCi0gICAgKiBSZXR1cm5zIGEgZG91YmxlIGluIFttaW4sIG1heCksIGlmIG1pbiA9PSBt
YXgsIHJldHVybnMgMC4KLSAgICAqLwotICBzdGF0aWMgZG91YmxlIHJhbmREb3VibGUoZG91Ymxl
IG1pbiwgZG91YmxlIG1heCkgewotICAgIHJldHVybiByYW5kRG91YmxlKG1pbiwgbWF4LCBUaHJl
YWRMb2NhbFBSTkcoKSk7Ci0gIH0KLQotICAvKioKLSAgICAqIFJldHVybnMgYSBkb3VibGUgaW4g
W21pbiwgbWF4KSwgaWYgbWluID09IG1heCwgcmV0dXJucyAwLgotICAgICovCi0gIHRlbXBsYXRl
IDxjbGFzcyBSTkcgPSBUaHJlYWRMb2NhbFBSTkcsIGNsYXNzIC8qIEVuYWJsZUlmICovID0gVmFs
aWRSTkc8Uk5HPj4KLSAgc3RhdGljIGRvdWJsZSByYW5kRG91YmxlKGRvdWJsZSBtaW4sIGRvdWJs
ZSBtYXgsIFJORyYmIHJuZykgewotICAgIGlmIChzdGQ6OmZhYnMobWF4IC0gbWluKSA8IHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZXBzaWxvbigpKSB7Ci0gICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgcmV0dXJuIHN0ZDo6dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbjxkb3VibGU+KG1p
biwgbWF4KShybmcpOwotICB9Ci0KLX07Ci0KLS8qCi0gKiBSZXR1cm4gYSBnb29kIHNlZWQgZm9y
IGEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCi0gKiBOb3RlIHRoYXQgdGhpcyBpcyBhIGxlZ2Fj
eSBmdW5jdGlvbiwgYXMgaXQgcmV0dXJucyBhIDMyLWJpdCB2YWx1ZSwgd2hpY2gKLSAqIGlzIHRv
byBzbWFsbCB0byBiZSB1c2VmdWwgYXMgYSAicmVhbCIgUk5HIHNlZWQuIFVzZSB0aGUgZnVuY3Rp
b25zIGluIGNsYXNzCi0gKiBSYW5kb20gaW5zdGVhZC4KLSAqLwotaW5saW5lIHVpbnQzMl90IHJh
bmRvbU51bWJlclNlZWQoKSB7Ci0gIHJldHVybiBSYW5kb206OnJhbmQzMigpOwotfQotCi19Ci0K
LSNpbmNsdWRlIDxmb2xseS9SYW5kb20taW5sLmg+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9SYW5nZS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvUmFuZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTJjMWQ5NmNjOTExNTNlODdmMTg0M2ZiOGE0YzZiMzhhNGU1Y2I1YS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9mb2xseS9SYW5nZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI4NSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNl
bnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2Ui
KTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0g
KgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3
cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlz
dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2Vl
IHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Np
b25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8gQGF1
dGhvciBNYXJrIFJhYmtpbiAobXJhYmtpbkBmYi5jb20pCi0vLyBAYXV0aG9yIEFuZHJlaSBBbGV4
YW5kcmVzY3UgKGFuZHJlaS5hbGV4YW5kcmVzY3VAZmIuY29tKQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPGZvbGx5L0ZCU3RyaW5nLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvUG9ydGFiaWxpdHku
aD4KLSNpbmNsdWRlIDxmb2xseS9oYXNoL1Nwb29reUhhc2hWMi5oPgotI2luY2x1ZGUgPGZvbGx5
L3BvcnRhYmlsaXR5L0JpdHNGdW5jdGV4Y2VwdC5oPgotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmls
aXR5L0NvbnN0ZXhwci5oPgotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L1N0cmluZy5oPgot
Ci0jaW5jbHVkZSA8Ym9vc3Qvb3BlcmF0b3JzLmhwcD4KLSNpbmNsdWRlIDxnbG9nL2xvZ2dpbmcu
aD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8YXJyYXk+Ci0jaW5jbHVkZSA8Y2xp
bWl0cz4KLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8
aW9zZndkPgotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVk
ZSA8dHlwZV90cmFpdHM+Ci0KLS8vIGxpYmMrKyBkb2Vzbid0IHByb3ZpZGUgdGhpcyBoZWFkZXIs
IG5vciBkb2VzIG1zdmMKLSNpZmRlZiBGT0xMWV9IQVZFX0JJVFNfQ1hYQ09ORklHX0gKLS8vIFRo
aXMgZmlsZSBhcHBlYXJzIGluIHR3byBsb2NhdGlvbnM6IGluc2lkZSBmYmNvZGUgYW5kIGluIHRo
ZQotLy8gbGlic3RkYysrIHNvdXJjZSBjb2RlICh3aGVuIGVtYmVkZGluZyBmYnN0cmluZyBhcyBz
dGQ6OnN0cmluZykuCi0vLyBUbyBhaWQgaW4gdGhpcyBzY2hpem9waHJlbmljIHVzZSwgdHdvIG1h
Y3JvcyBhcmUgZGVmaW5lZCBpbgotLy8gYysrY29uZmlnLmg6Ci0vLyAgIF9MSUJTVERDWFhfRkJT
VFJJTkcgLSBTZXQgaW5zaWRlIGxpYnN0ZGMrKy4gIFRoaXMgaXMgdXNlZnVsIHRvCi0vLyAgICAg
IGdhdGUgdXNlIGluc2lkZSBmYmNvZGUgdi4gbGlic3RkYysrCi0jaW5jbHVkZSA8Yml0cy9jKytj
b25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Zm9sbHkvQ3B1SWQuaD4KLSNpbmNsdWRlIDxm
b2xseS9UcmFpdHMuaD4KLSNpbmNsdWRlIDxmb2xseS9MaWtlbHkuaD4KLSNpbmNsdWRlIDxmb2xs
eS9kZXRhaWwvUmFuZ2VDb21tb24uaD4KLSNpbmNsdWRlIDxmb2xseS9kZXRhaWwvUmFuZ2VTc2U0
Mi5oPgotCi0vLyBJZ25vcmUgc2hhZG93aW5nIHdhcm5pbmdzIHdpdGhpbiB0aGlzIGZpbGUsIHNv
IGluY2x1ZGVycyBjYW4gdXNlIC1Xc2hhZG93LgotRk9MTFlfUFVTSF9XQVJOSU5HCi1GT0xMWV9H
Q0NfRElTQUJMRV9XQVJOSU5HKCItV3NoYWRvdyIpCi0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLXRl
bXBsYXRlIDxjbGFzcyBJdGVyPiBjbGFzcyBSYW5nZTsKLQotLyoqCi0gKiBGaW5kcyB0aGUgZmly
c3Qgb2NjdXJyZW5jZSBvZiBuZWVkbGUgaW4gaGF5c3RhY2suIFRoZSBhbGdvcml0aG0gaXMgb24K
LSAqIGF2ZXJhZ2UgZmFzdGVyIHRoYW4gTyhoYXlzdGFjay5zaXplKCkgKiBuZWVkbGUuc2l6ZSgp
KSBidXQgbm90IGFzIGZhc3QKLSAqIGFzIEJveWVyLU1vb3JlLiBPbiB0aGUgdXBzaWRlLCBpdCBk
b2VzIG5vdCBkbyBhbnkgdXBmcm9udAotICogcHJlcHJvY2Vzc2luZyBhbmQgZG9lcyBub3QgYWxs
b2NhdGUgbWVtb3J5LgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgSXRlciwKLSAgICAgICAgICBjbGFz
cyBDb21wID0gc3RkOjplcXVhbF90bzx0eXBlbmFtZSBSYW5nZTxJdGVyPjo6dmFsdWVfdHlwZT4+
Ci1pbmxpbmUgc2l6ZV90IHFmaW5kKGNvbnN0IFJhbmdlPEl0ZXI+ICYgaGF5c3RhY2ssCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFJhbmdlPEl0ZXI+ICYgbmVlZGxlLAotICAgICAgICAgICAg
ICAgICAgICBDb21wIGVxID0gQ29tcCgpKTsKLQotLyoqCi0gKiBGaW5kcyB0aGUgZmlyc3Qgb2Nj
dXJyZW5jZSBvZiBuZWVkbGUgaW4gaGF5c3RhY2suIFRoZSByZXN1bHQgaXMgdGhlCi0gKiBvZmZz
ZXQgcmVwb3J0ZWQgdG8gdGhlIGJlZ2lubmluZyBvZiBoYXlzdGFjaywgb3Igc3RyaW5nOjpucG9z
IGlmCi0gKiBuZWVkbGUgd2Fzbid0IGZvdW5kLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgSXRlcj4K
LXNpemVfdCBxZmluZChjb25zdCBSYW5nZTxJdGVyPiAmIGhheXN0YWNrLAotICAgICAgICAgICAg
IGNvbnN0IHR5cGVuYW1lIFJhbmdlPEl0ZXI+Ojp2YWx1ZV90eXBlJiBuZWVkbGUpOwotCi0vKioK
LSAqIEZpbmRzIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgbmVlZGxlIGluIGhheXN0YWNrLiBUaGUg
cmVzdWx0IGlzIHRoZQotICogb2Zmc2V0IHJlcG9ydGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgaGF5
c3RhY2ssIG9yIHN0cmluZzo6bnBvcyBpZgotICogbmVlZGxlIHdhc24ndCBmb3VuZC4KLSAqLwot
dGVtcGxhdGUgPGNsYXNzIEl0ZXI+Ci1zaXplX3QgcmZpbmQoY29uc3QgUmFuZ2U8SXRlcj4gJiBo
YXlzdGFjaywKLSAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBSYW5nZTxJdGVyPjo6dmFsdWVf
dHlwZSYgbmVlZGxlKTsKLQotCi0vKioKLSAqIEZpbmRzIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9m
IGFueSBlbGVtZW50IG9mIG5lZWRsZSBpbgotICogaGF5c3RhY2suIFRoZSBhbGdvcml0aG0gaXMg
TyhoYXlzdGFjay5zaXplKCkgKiBuZWVkbGUuc2l6ZSgpKS4KLSAqLwotdGVtcGxhdGUgPGNsYXNz
IEl0ZXI+Ci1pbmxpbmUgc2l6ZV90IHFmaW5kX2ZpcnN0X29mKGNvbnN0IFJhbmdlPEl0ZXI+ICYg
aGF5c3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJhbmdlPEl0ZXI+
ICYgbmVlZGxlKTsKLQotLyoqCi0gKiBTbWFsbCBpbnRlcm5hbCBoZWxwZXIgLSByZXR1cm5zIHRo
ZSB2YWx1ZSBqdXN0IGJlZm9yZSBhbiBpdGVyYXRvci4KLSAqLwotbmFtZXNwYWNlIGRldGFpbCB7
Ci0KLS8qKgotICogRm9yIHJhbmRvbS1hY2Nlc3MgaXRlcmF0b3JzLCB0aGUgdmFsdWUgYmVmb3Jl
IGlzIHNpbXBseSBpWy0xXS4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIEl0ZXI+Ci10eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjwKLSAgc3RkOjppc19zYW1lPHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJh
aXRzPEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSwKLSAgICAgICAgICAgICAgIHN0ZDo6cmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWc+Ojp2YWx1ZSwKLSAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90
cmFpdHM8SXRlcj46OnJlZmVyZW5jZT46OnR5cGUKLXZhbHVlX2JlZm9yZShJdGVyIGkpIHsKLSAg
cmV0dXJuIGlbLTFdOwotfQotCi0vKioKLSAqIEZvciBhbGwgb3RoZXIgaXRlcmF0b3JzLCB3ZSBu
ZWVkIHRvIHVzZSB0aGUgZGVjcmVtZW50IG9wZXJhdG9yLgotICovCi10ZW1wbGF0ZSA8Y2xhc3Mg
SXRlcj4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAhc3RkOjppc19zYW1lPHR5cGVuYW1l
IHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSwKLSAgICAgICAg
ICAgICAgICBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPjo6dmFsdWUsCi0gIHR5cGVu
YW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXI+OjpyZWZlcmVuY2U+Ojp0eXBlCi12YWx1ZV9i
ZWZvcmUoSXRlciBpKSB7Ci0gIHJldHVybiAqLS1pOwotfQotCi0vKgotICogVXNlIElzQ2hhclBv
aW50ZXI8VD46OnR5cGUgdG8gZW5hYmxlIGNvbnN0IGNoYXIqIG9yIGNoYXIqLgotICogVXNlIElz
Q2hhclBvaW50ZXI8VD46OmNvbnN0X3R5cGUgdG8gZW5hYmxlIG9ubHkgY29uc3QgY2hhciouCi0g
Ki8KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgSXNDaGFyUG9pbnRlciB7fTsKLQotdGVtcGxh
dGUgPD4KLXN0cnVjdCBJc0NoYXJQb2ludGVyPGNoYXIqPiB7Ci0gIHR5cGVkZWYgaW50IHR5cGU7
Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IElzQ2hhclBvaW50ZXI8Y29uc3QgY2hhcio+IHsK
LSAgdHlwZWRlZiBpbnQgY29uc3RfdHlwZTsKLSAgdHlwZWRlZiBpbnQgdHlwZTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIGRldGFpbAotCi0vKioKLSAqIFJhbmdlIGFic3RyYWN0aW9uIGtlZXBpbmcg
YSBwYWlyIG9mIGl0ZXJhdG9ycy4gV2UgY291bGRuJ3QgdXNlCi0gKiBib29zdCdzIHNpbWlsYXIg
cmFuZ2UgYWJzdHJhY3Rpb24gYmVjYXVzZSB3ZSBuZWVkIGFuIEFQSSBpZGVudGljYWwKLSAqIHdp
dGggdGhlIGZvcm1lciBTdHJpbmdQaWVjZSBjbGFzcywgd2hpY2ggaXMgdXNlZCBieSBhIGxvdCBv
ZiBvdGhlcgotICogY29kZS4gVGhpcyBhYnN0cmFjdGlvbiBkb2VzIGZ1bGZpbGwgdGhlIG5lZWRz
IG9mIGJvb3N0J3MKLSAqIHJhbmdlLW9yaWVudGVkIGFsZ29yaXRobXMgdGhvdWdoLgotICoKLSAq
IChLZWVwIG1lbW9yeSBsaWZldGltZSBpbiBtaW5kIHdoZW4gdXNpbmcgdGhpcyBjbGFzcywgc2lu
Y2UgaXQKLSAqIGRvZXNuJ3QgbWFuYWdlIHRoZSBkYXRhIGl0IHJlZmVycyB0byAtIGp1c3QgbGlr
ZSBhbiBpdGVyYXRvcgotICogd291bGRuJ3QuKQotICovCi10ZW1wbGF0ZSA8Y2xhc3MgSXRlcj4K
LWNsYXNzIFJhbmdlIDogcHJpdmF0ZSBib29zdDo6dG90YWxseV9vcmRlcmVkPFJhbmdlPEl0ZXI+
ID4gewotcHVibGljOgotICB0eXBlZGVmIHN0ZDo6c2l6ZV90IHNpemVfdHlwZTsKLSAgdHlwZWRl
ZiBJdGVyIGl0ZXJhdG9yOwotICB0eXBlZGVmIEl0ZXIgY29uc3RfaXRlcmF0b3I7Ci0gIHR5cGVk
ZWYgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPAotICAgIHR5cGVuYW1lIHN0ZDo6aXRl
cmF0b3JfdHJhaXRzPEl0ZXI+OjpyZWZlcmVuY2U+Ojp0eXBlCi0gIHZhbHVlX3R5cGU7Ci0gIHVz
aW5nIGRpZmZlcmVuY2VfdHlwZSA9IHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXI+
OjpkaWZmZXJlbmNlX3R5cGU7Ci0gIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFp
dHM8SXRlcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7Ci0KLSAgLyoqCi0gICAqIEZvciBNdXRhYmxl
U3RyaW5nUGllY2UgYW5kIE11dGFibGVCeXRlUmFuZ2Ugd2UgZGVmaW5lIFN0cmluZ1BpZWNlCi0g
ICAqIGFuZCBCeXRlUmFuZ2UgYXMgY29uc3RfcmFuZ2VfdHlwZSAoZm9yIGV2ZXJ5dGhpbmcgZWxz
ZSBpdHMganVzdAotICAgKiBpZGVudGl0eSkuIFdlIGRvIHRoYXQgdG8gZW5hYmxlIG9wZXJhdGlv
bnMgc3VjaCBhcyBmaW5kIHdpdGgKLSAgICogYXJncyB3aGljaCBhcmUgY29uc3QuCi0gICAqLwot
ICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgc3RkOjppc19zYW1lPEl0
ZXIsIGNoYXIqPjo6dmFsdWUKLSAgICAgIHx8IHN0ZDo6aXNfc2FtZTxJdGVyLCB1bnNpZ25lZCBj
aGFyKj46OnZhbHVlLAotICAgIFJhbmdlPGNvbnN0IHZhbHVlX3R5cGUqPiwKLSAgICBSYW5nZTxJ
dGVyPj46OnR5cGUgY29uc3RfcmFuZ2VfdHlwZTsKLQotICB0eXBlZGVmIHN0ZDo6Y2hhcl90cmFp
dHM8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8dmFsdWVfdHlwZT46OnR5cGU+Ci0gICAgdHJh
aXRzX3R5cGU7Ci0KLSAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBucG9zOwotCi0gIC8vIFdvcmtz
IGZvciBhbGwgaXRlcmF0b3JzCi0gIGNvbnN0ZXhwciBSYW5nZSgpIDogYl8oKSwgZV8oKSB7Ci0g
IH0KLQotICBjb25zdGV4cHIgUmFuZ2UoY29uc3QgUmFuZ2UmKSA9IGRlZmF1bHQ7Ci0gIGNvbnN0
ZXhwciBSYW5nZShSYW5nZSYmKSA9IGRlZmF1bHQ7Ci0KLXB1YmxpYzoKLSAgLy8gV29ya3MgZm9y
IGFsbCBpdGVyYXRvcnMKLSAgY29uc3RleHByIFJhbmdlKEl0ZXIgc3RhcnQsIEl0ZXIgZW5kKSA6
IGJfKHN0YXJ0KSwgZV8oZW5kKSB7Ci0gIH0KLQotICAvLyBXb3JrcyBvbmx5IGZvciByYW5kb20t
YWNjZXNzIGl0ZXJhdG9ycwotICBjb25zdGV4cHIgUmFuZ2UoSXRlciBzdGFydCwgc2l6ZV90IHNp
emUpCi0gICAgICA6IGJfKHN0YXJ0KSwgZV8oc3RhcnQgKyBzaXplKSB7IH0KLQotIyBpZiAhX19j
bGFuZ19fIHx8IF9fQ0xBTkdfUFJFUkVRKDMsIDcpIC8vIENsYW5nIDMuNiBjcmFzaGVzIG9uIHRo
aXMgbGluZQotICAvKiBpbXBsaWNpdCAqLyBSYW5nZShzdGQ6Om51bGxwdHJfdCkgPSBkZWxldGU7
Ci0jIGVuZGlmCi0KLSAgdGVtcGxhdGUgPGNsYXNzIFQgPSBJdGVyLCB0eXBlbmFtZSBkZXRhaWw6
OklzQ2hhclBvaW50ZXI8VD46OnR5cGUgPSAwPgotICBjb25zdGV4cHIgLyogaW1wbGljaXQgKi8g
UmFuZ2UoSXRlciBzdHIpCi0gICAgICA6IGJfKHN0ciksIGVfKHN0ciArIGNvbnN0ZXhwcl9zdHJs
ZW4oc3RyKSkge30KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVCA9IEl0ZXIsIHR5cGVuYW1lIGRldGFp
bDo6SXNDaGFyUG9pbnRlcjxUPjo6Y29uc3RfdHlwZSA9IDA+Ci0gIC8qIGltcGxpY2l0ICovIFJh
bmdlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpCi0gICAgICA6IGJfKHN0ci5kYXRhKCkpLCBlXyhi
XyArIHN0ci5zaXplKCkpIHt9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFQgPSBJdGVyLCB0eXBlbmFt
ZSBkZXRhaWw6OklzQ2hhclBvaW50ZXI8VD46OmNvbnN0X3R5cGUgPSAwPgotICBSYW5nZShjb25z
dCBzdGQ6OnN0cmluZyYgc3RyLCBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHN0YXJ0RnJvbSkgewot
ICAgIGlmIChVTkxJS0VMWShzdGFydEZyb20gPiBzdHIuc2l6ZSgpKSkgewotICAgICAgc3RkOjpf
X3Rocm93X291dF9vZl9yYW5nZSgiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgfQotICAgIGJf
ID0gc3RyLmRhdGEoKSArIHN0YXJ0RnJvbTsKLSAgICBlXyA9IHN0ci5kYXRhKCkgKyBzdHIuc2l6
ZSgpOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFQgPSBJdGVyLCB0eXBlbmFtZSBkZXRhaWw6
OklzQ2hhclBvaW50ZXI8VD46OmNvbnN0X3R5cGUgPSAwPgotICBSYW5nZShjb25zdCBzdGQ6OnN0
cmluZyYgc3RyLAotICAgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHN0YXJ0RnJvbSwKLSAg
ICAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBzaXplKSB7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXJ0RnJvbSA+IHN0ci5zaXplKCkpKSB7Ci0gICAgICBzdGQ6Ol9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICB9Ci0gICAgYl8gPSBzdHIuZGF0YSgpICsgc3Rh
cnRGcm9tOwotICAgIGlmIChzdHIuc2l6ZSgpIC0gc3RhcnRGcm9tIDwgc2l6ZSkgewotICAgICAg
ZV8gPSBzdHIuZGF0YSgpICsgc3RyLnNpemUoKTsKLSAgICB9IGVsc2UgewotICAgICAgZV8gPSBi
XyArIHNpemU7Ci0gICAgfQotICB9Ci0KLSAgUmFuZ2UoY29uc3QgUmFuZ2UmIG90aGVyLAotICAg
ICAgICBzaXplX3R5cGUgZmlyc3QsCi0gICAgICAgIHNpemVfdHlwZSBsZW5ndGggPSBucG9zKQot
ICAgICAgOiBSYW5nZShvdGhlci5zdWJwaWVjZShmaXJzdCwgbGVuZ3RoKSkKLSAgICB7IH0KLQot
ICB0ZW1wbGF0ZSA8Y2xhc3MgVCA9IEl0ZXIsIHR5cGVuYW1lIGRldGFpbDo6SXNDaGFyUG9pbnRl
cjxUPjo6Y29uc3RfdHlwZSA9IDA+Ci0gIC8qIGltcGxpY2l0ICovIFJhbmdlKGNvbnN0IGZic3Ry
aW5nJiBzdHIpCi0gICAgOiBiXyhzdHIuZGF0YSgpKSwgZV8oYl8gKyBzdHIuc2l6ZSgpKSB7IH0K
LQotICB0ZW1wbGF0ZSA8Y2xhc3MgVCA9IEl0ZXIsIHR5cGVuYW1lIGRldGFpbDo6SXNDaGFyUG9p
bnRlcjxUPjo6Y29uc3RfdHlwZSA9IDA+Ci0gIFJhbmdlKGNvbnN0IGZic3RyaW5nJiBzdHIsIGZi
c3RyaW5nOjpzaXplX3R5cGUgc3RhcnRGcm9tKSB7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXJ0RnJv
bSA+IHN0ci5zaXplKCkpKSB7Ci0gICAgICBzdGQ6Ol9fdGhyb3dfb3V0X29mX3JhbmdlKCJpbmRl
eCBvdXQgb2YgcmFuZ2UiKTsKLSAgICB9Ci0gICAgYl8gPSBzdHIuZGF0YSgpICsgc3RhcnRGcm9t
OwotICAgIGVfID0gc3RyLmRhdGEoKSArIHN0ci5zaXplKCk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8
Y2xhc3MgVCA9IEl0ZXIsIHR5cGVuYW1lIGRldGFpbDo6SXNDaGFyUG9pbnRlcjxUPjo6Y29uc3Rf
dHlwZSA9IDA+Ci0gIFJhbmdlKGNvbnN0IGZic3RyaW5nJiBzdHIsIGZic3RyaW5nOjpzaXplX3R5
cGUgc3RhcnRGcm9tLAotICAgICAgICBmYnN0cmluZzo6c2l6ZV90eXBlIHNpemUpIHsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhcnRGcm9tID4gc3RyLnNpemUoKSkpIHsKLSAgICAgIHN0ZDo6X190aHJv
d19vdXRfb2ZfcmFuZ2UoImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgIH0KLSAgICBiXyA9IHN0
ci5kYXRhKCkgKyBzdGFydEZyb207Ci0gICAgaWYgKHN0ci5zaXplKCkgLSBzdGFydEZyb20gPCBz
aXplKSB7Ci0gICAgICBlXyA9IHN0ci5kYXRhKCkgKyBzdHIuc2l6ZSgpOwotICAgIH0gZWxzZSB7
Ci0gICAgICBlXyA9IGJfICsgc2l6ZTsKLSAgICB9Ci0gIH0KLQotICAvLyBBbGxvdyBpbXBsaWNp
dCBjb252ZXJzaW9uIGZyb20gUmFuZ2U8Y29uc3QgY2hhcio+IChha2EgU3RyaW5nUGllY2UpIHRv
Ci0gIC8vIFJhbmdlPGNvbnN0IHVuc2lnbmVkIGNoYXIqPiAoYWthIEJ5dGVSYW5nZSksIGFzIHRo
ZXkncmUgYm90aCBmcmVxdWVudGx5Ci0gIC8vIHVzZWQgdG8gcmVwcmVzZW50IHJhbmdlcyBvZiBi
eXRlcy4gIEFsbG93IGV4cGxpY2l0IGNvbnZlcnNpb24gaW4gdGhlIG90aGVyCi0gIC8vIGRpcmVj
dGlvbi4KLSAgdGVtcGxhdGUgPGNsYXNzIE90aGVySXRlciwgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8Ci0gICAgICAoc3RkOjppc19zYW1lPEl0ZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqPjo6dmFs
dWUgJiYKLSAgICAgICAoc3RkOjppc19zYW1lPE90aGVySXRlciwgY29uc3QgY2hhcio+Ojp2YWx1
ZSB8fAotICAgICAgICBzdGQ6OmlzX3NhbWU8T3RoZXJJdGVyLCBjaGFyKj46OnZhbHVlKSksIGlu
dD46OnR5cGUgPSAwPgotICAvKiBpbXBsaWNpdCAqLyBSYW5nZShjb25zdCBSYW5nZTxPdGhlckl0
ZXI+JiBvdGhlcikKLSAgICA6IGJfKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KG90aGVyLmJlZ2luKCkpKSwKLSAgICAgIGVfKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KG90aGVyLmVuZCgpKSkgewotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIE90
aGVySXRlciwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gICAgICAoc3RkOjppc19zYW1lPEl0
ZXIsIHVuc2lnbmVkIGNoYXIqPjo6dmFsdWUgJiYKLSAgICAgICBzdGQ6OmlzX3NhbWU8T3RoZXJJ
dGVyLCBjaGFyKj46OnZhbHVlKSwgaW50Pjo6dHlwZSA9IDA+Ci0gIC8qIGltcGxpY2l0ICovIFJh
bmdlKGNvbnN0IFJhbmdlPE90aGVySXRlcj4mIG90aGVyKQotICAgIDogYl8ocmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3RoZXIuYmVnaW4oKSkpLAotICAgICAgZV8ocmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3RoZXIuZW5kKCkpKSB7Ci0gIH0KLQotICB0ZW1wbGF0
ZSA8Y2xhc3MgT3RoZXJJdGVyLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAgIChzdGQ6
OmlzX3NhbWU8SXRlciwgY29uc3QgY2hhcio+Ojp2YWx1ZSAmJgotICAgICAgIChzdGQ6OmlzX3Nh
bWU8T3RoZXJJdGVyLCBjb25zdCB1bnNpZ25lZCBjaGFyKj46OnZhbHVlIHx8Ci0gICAgICAgIHN0
ZDo6aXNfc2FtZTxPdGhlckl0ZXIsIHVuc2lnbmVkIGNoYXIqPjo6dmFsdWUpKSwgaW50Pjo6dHlw
ZSA9IDA+Ci0gIGV4cGxpY2l0IFJhbmdlKGNvbnN0IFJhbmdlPE90aGVySXRlcj4mIG90aGVyKQot
ICAgIDogYl8ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ob3RoZXIuYmVnaW4oKSkpLAot
ICAgICAgZV8ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ob3RoZXIuZW5kKCkpKSB7Ci0g
IH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgT3RoZXJJdGVyLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjwKLSAgICAgIChzdGQ6OmlzX3NhbWU8SXRlciwgY2hhcio+Ojp2YWx1ZSAmJgotICAgICAgIHN0
ZDo6aXNfc2FtZTxPdGhlckl0ZXIsIHVuc2lnbmVkIGNoYXIqPjo6dmFsdWUpLCBpbnQ+Ojp0eXBl
ID0gMD4KLSAgZXhwbGljaXQgUmFuZ2UoY29uc3QgUmFuZ2U8T3RoZXJJdGVyPiYgb3RoZXIpCi0g
ICAgOiBiXyhyZWludGVycHJldF9jYXN0PGNoYXIqPihvdGhlci5iZWdpbigpKSksCi0gICAgICBl
XyhyZWludGVycHJldF9jYXN0PGNoYXIqPihvdGhlci5lbmQoKSkpIHsKLSAgfQotCi0gIC8vIEFs
bG93IGltcGxpY2l0IGNvbnZlcnNpb24gZnJvbSBSYW5nZTxGcm9tPiB0byBSYW5nZTxUbz4gaWYg
RnJvbSBpcwotICAvLyBpbXBsaWNpdGx5IGNvbnZlcnRpYmxlIHRvIFRvLgotICB0ZW1wbGF0ZSA8
Y2xhc3MgT3RoZXJJdGVyLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAgKCFzdGQ6Omlz
X3NhbWU8SXRlciwgT3RoZXJJdGVyPjo6dmFsdWUgJiYKLSAgICAgIHN0ZDo6aXNfY29udmVydGli
bGU8T3RoZXJJdGVyLCBJdGVyPjo6dmFsdWUpLCBpbnQ+Ojp0eXBlID0gMD4KLSAgY29uc3RleHBy
IC8qIGltcGxpY2l0ICovIFJhbmdlKGNvbnN0IFJhbmdlPE90aGVySXRlcj4mIG90aGVyKQotICAg
IDogYl8ob3RoZXIuYmVnaW4oKSksCi0gICAgICBlXyhvdGhlci5lbmQoKSkgewotICB9Ci0KLSAg
Ly8gQWxsb3cgZXhwbGljaXQgY29udmVyc2lvbiBmcm9tIFJhbmdlPEZyb20+IHRvIFJhbmdlPFRv
PiBpZiBGcm9tIGlzCi0gIC8vIGV4cGxpY2l0bHkgY29udmVydGlibGUgdG8gVG8uCi0gIHRlbXBs
YXRlIDxjbGFzcyBPdGhlckl0ZXIsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICghc3Rk
Ojppc19zYW1lPEl0ZXIsIE90aGVySXRlcj46OnZhbHVlICYmCi0gICAgICFzdGQ6OmlzX2NvbnZl
cnRpYmxlPE90aGVySXRlciwgSXRlcj46OnZhbHVlICYmCi0gICAgIHN0ZDo6aXNfY29uc3RydWN0
aWJsZTxJdGVyLCBjb25zdCBPdGhlckl0ZXImPjo6dmFsdWUpLCBpbnQ+Ojp0eXBlID0gMD4KLSAg
Y29uc3RleHByIGV4cGxpY2l0IFJhbmdlKGNvbnN0IFJhbmdlPE90aGVySXRlcj4mIG90aGVyKQot
ICAgIDogYl8ob3RoZXIuYmVnaW4oKSksCi0gICAgICBlXyhvdGhlci5lbmQoKSkgewotICB9Ci0K
LSAgLyoqCi0gICAqIEFsbG93IGV4cGxpY2l0IGNvbnN0cnVjdGlvbiBvZiBSYW5nZSgpIGZyb20g
YSBzdGQ6OmFycmF5IG9mIGEKLSAgICogY29udmVydGlibGUgdHlwZS4KLSAgICoKLSAgICogRm9y
IGluc3RhbmNlLCB0aGlzIGFsbG93cyBjb25zdHJ1Y3RpbmcgU3RyaW5nUGllY2UgZnJvbSBhCi0g
ICAqIHN0ZDo6YXJyYXk8Y2hhciwgTj4gb3IgYSBzdGQ6OmFycmF5PGNvbnN0IGNoYXIsIE4+Ci0g
ICAqLwotICB0ZW1wbGF0ZSA8Ci0gICAgICBjbGFzcyBULAotICAgICAgc2l6ZV90IE4sCi0gICAg
ICB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICAgIHN0ZDo6aXNf
Y29udmVydGlibGU8Y29uc3QgVCosIEl0ZXI+Ojp2YWx1ZT46OnR5cGU+Ci0gIGNvbnN0ZXhwciBl
eHBsaWNpdCBSYW5nZShjb25zdCBzdGQ6OmFycmF5PFQsIE4+JiBhcnJheSkKLSAgICAgIDogYl97
YXJyYXkuZW1wdHkoKSA/IG51bGxwdHIgOiAmYXJyYXkuYXQoMCl9LAotICAgICAgICBlX3thcnJh
eS5lbXB0eSgpID8gbnVsbHB0ciA6ICZhcnJheS5hdCgwKSArIE59IHt9Ci0gIHRlbXBsYXRlIDwK
LSAgICAgIGNsYXNzIFQsCi0gICAgICBzaXplX3QgTiwKLSAgICAgIHR5cGVuYW1lID0KLSAgICAg
ICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnZlcnRpYmxlPFQqLCBJdGVy
Pjo6dmFsdWU+Ojp0eXBlPgotICBjb25zdGV4cHIgZXhwbGljaXQgUmFuZ2Uoc3RkOjphcnJheTxU
LCBOPiYgYXJyYXkpCi0gICAgICA6IGJfe2FycmF5LmVtcHR5KCkgPyBudWxscHRyIDogJmFycmF5
LmF0KDApfSwKLSAgICAgICAgZV97YXJyYXkuZW1wdHkoKSA/IG51bGxwdHIgOiAmYXJyYXkuYXQo
MCkgKyBOfSB7fQotCi0gIFJhbmdlJiBvcGVyYXRvcj0oY29uc3QgUmFuZ2UmIHJocykgJiA9IGRl
ZmF1bHQ7Ci0gIFJhbmdlJiBvcGVyYXRvcj0oUmFuZ2UmJiByaHMpICYgPSBkZWZhdWx0OwotCi0g
IHRlbXBsYXRlIDxjbGFzcyBUID0gSXRlciwgdHlwZW5hbWUgZGV0YWlsOjpJc0NoYXJQb2ludGVy
PFQ+Ojpjb25zdF90eXBlID0gMD4KLSAgUmFuZ2UmIG9wZXJhdG9yPShzdGQ6OnN0cmluZyYmIHJo
cykgPSBkZWxldGU7Ci0KLSAgdm9pZCBjbGVhcigpIHsKLSAgICBiXyA9IEl0ZXIoKTsKLSAgICBl
XyA9IEl0ZXIoKTsKLSAgfQotCi0gIHZvaWQgYXNzaWduKEl0ZXIgc3RhcnQsIEl0ZXIgZW5kKSB7
Ci0gICAgYl8gPSBzdGFydDsKLSAgICBlXyA9IGVuZDsKLSAgfQotCi0gIHZvaWQgcmVzZXQoSXRl
ciBzdGFydCwgc2l6ZV90eXBlIHNpemUpIHsKLSAgICBiXyA9IHN0YXJ0OwotICAgIGVfID0gc3Rh
cnQgKyBzaXplOwotICB9Ci0KLSAgLy8gV29ya3Mgb25seSBmb3IgUmFuZ2U8Y29uc3QgY2hhcio+
Ci0gIHZvaWQgcmVzZXQoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikgewotICAgIHJlc2V0KHN0ci5k
YXRhKCksIHN0ci5zaXplKCkpOwotICB9Ci0KLSAgY29uc3RleHByIHNpemVfdHlwZSBzaXplKCkg
Y29uc3QgewotICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gYXNzZXJ0KGJfIDw9IGVfKSBoZXJl
LiAgVGhpcyBjYW4gYmUgYWNoaWV2ZWQgZXZlbgotICAgIC8vIGluIGEgQysrMTEgY29tcGF0aWJs
ZSBjb25zdGV4cHIgZnVuY3Rpb246Ci0gICAgLy8gaHR0cDovL2VyaWNuaWVibGVyLmNvbS8yMDE0
LzA5LzI3L2Fzc2VydC1hbmQtY29uc3RleHByLWluLWN4eDExLwotICAgIC8vIFVuZm9ydHVuYXRl
bHkgY3VycmVudCBnY2MgdmVyc2lvbnMgaGF2ZSBhIGJ1ZyBjYXVzaW5nIGl0IHRvIHJlamVjdAot
ICAgIC8vIHRoaXMgY2hlY2sgaW4gYSBjb25zdGV4cHIgZnVuY3Rpb246Ci0gICAgLy8gaHR0cHM6
Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NzE0NDgKLSAgICByZXR1cm4g
c2l6ZV90eXBlKGVfIC0gYl8pOwotICB9Ci0gIGNvbnN0ZXhwciBzaXplX3R5cGUgd2Fsa19zaXpl
KCkgY29uc3QgewotICAgIHJldHVybiBzaXplX3R5cGUoc3RkOjpkaXN0YW5jZShiXywgZV8pKTsK
LSAgfQotICBjb25zdGV4cHIgYm9vbCBlbXB0eSgpIGNvbnN0IHsKLSAgICByZXR1cm4gYl8gPT0g
ZV87Ci0gIH0KLSAgY29uc3RleHByIEl0ZXIgZGF0YSgpIGNvbnN0IHsKLSAgICByZXR1cm4gYl87
Ci0gIH0KLSAgY29uc3RleHByIEl0ZXIgc3RhcnQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGJfOwot
ICB9Ci0gIGNvbnN0ZXhwciBJdGVyIGJlZ2luKCkgY29uc3QgewotICAgIHJldHVybiBiXzsKLSAg
fQotICBjb25zdGV4cHIgSXRlciBlbmQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGVfOwotICB9Ci0g
IGNvbnN0ZXhwciBJdGVyIGNiZWdpbigpIGNvbnN0IHsKLSAgICByZXR1cm4gYl87Ci0gIH0KLSAg
Y29uc3RleHByIEl0ZXIgY2VuZCgpIGNvbnN0IHsKLSAgICByZXR1cm4gZV87Ci0gIH0KLSAgdmFs
dWVfdHlwZSYgZnJvbnQoKSB7Ci0gICAgYXNzZXJ0KGJfIDwgZV8pOwotICAgIHJldHVybiAqYl87
Ci0gIH0KLSAgdmFsdWVfdHlwZSYgYmFjaygpIHsKLSAgICBhc3NlcnQoYl8gPCBlXyk7Ci0gICAg
cmV0dXJuIGRldGFpbDo6dmFsdWVfYmVmb3JlKGVfKTsKLSAgfQotICBjb25zdCB2YWx1ZV90eXBl
JiBmcm9udCgpIGNvbnN0IHsKLSAgICBhc3NlcnQoYl8gPCBlXyk7Ci0gICAgcmV0dXJuICpiXzsK
LSAgfQotICBjb25zdCB2YWx1ZV90eXBlJiBiYWNrKCkgY29uc3QgewotICAgIGFzc2VydChiXyA8
IGVfKTsKLSAgICByZXR1cm4gZGV0YWlsOjp2YWx1ZV9iZWZvcmUoZV8pOwotICB9Ci0gIC8vIFdv
cmtzIG9ubHkgZm9yIFJhbmdlPGNvbnN0IGNoYXIqPiBhbmQgUmFuZ2U8Y2hhcio+Ci0gIHN0ZDo6
c3RyaW5nIHN0cigpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6c3RyaW5nKGJfLCBzaXplKCkpOyB9Ci0g
IHN0ZDo6c3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gc3RyKCk7IH0KLSAgLy8gV29y
a3Mgb25seSBmb3IgUmFuZ2U8Y29uc3QgY2hhcio+IGFuZCBSYW5nZTxjaGFyKj4KLSAgZmJzdHJp
bmcgZmJzdHIoKSBjb25zdCB7IHJldHVybiBmYnN0cmluZyhiXywgc2l6ZSgpKTsgfQotICBmYnN0
cmluZyB0b0Zic3RyaW5nKCkgY29uc3QgeyByZXR1cm4gZmJzdHIoKTsgfQotCi0gIGNvbnN0X3Jh
bmdlX3R5cGUgY2FzdFRvQ29uc3QoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGNvbnN0X3JhbmdlX3R5
cGUoKnRoaXMpOwotICB9Ci0KLSAgLy8gV29ya3Mgb25seSBmb3IgUmFuZ2U8Y29uc3QgY2hhcio+
IGFuZCBSYW5nZTxjaGFyKj4KLSAgaW50IGNvbXBhcmUoY29uc3QgY29uc3RfcmFuZ2VfdHlwZSYg
bykgY29uc3QgewotICAgIGNvbnN0IHNpemVfdHlwZSB0c2l6ZSA9IHRoaXMtPnNpemUoKTsKLSAg
ICBjb25zdCBzaXplX3R5cGUgb3NpemUgPSBvLnNpemUoKTsKLSAgICBjb25zdCBzaXplX3R5cGUg
bXNpemUgPSBzdGQ6Om1pbih0c2l6ZSwgb3NpemUpOwotICAgIGludCByID0gdHJhaXRzX3R5cGU6
OmNvbXBhcmUoZGF0YSgpLCBvLmRhdGEoKSwgbXNpemUpOwotICAgIGlmIChyID09IDAgJiYgdHNp
emUgIT0gb3NpemUpIHsKLSAgICAgIC8vIFdlIGNoZWNrIHRoZSBzaWduZWQgYml0IG9mIHRoZSBz
dWJ0cmFjdGlvbiBhbmQgYml0IHNoaWZ0IGl0Ci0gICAgICAvLyB0byBwcm9kdWNlIGVpdGhlciAw
IG9yIDIuIFRoZSBzdWJ0cmFjdGlvbiB5aWVsZHMgdGhlCi0gICAgICAvLyBjb21wYXJpc29uIHZh
bHVlcyBvZiBlaXRoZXIgLTEgb3IgMS4KLSAgICAgIHIgPSAoc3RhdGljX2Nhc3Q8aW50PigKLSAg
ICAgICAgICAgICAob3NpemUgLSB0c2l6ZSkgPj4gKENIQVJfQklUICogc2l6ZW9mKHNpemVfdCkg
LSAxKSkgPDwgMSkgLSAxOwotICAgIH0KLSAgICByZXR1cm4gcjsKLSAgfQotCi0gIHZhbHVlX3R5
cGUmIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsKLSAgICBEQ0hFQ0tfR1Qoc2l6ZSgpLCBpKTsKLSAg
ICByZXR1cm4gYl9baV07Ci0gIH0KLQotICBjb25zdCB2YWx1ZV90eXBlJiBvcGVyYXRvcltdKHNp
emVfdCBpKSBjb25zdCB7Ci0gICAgRENIRUNLX0dUKHNpemUoKSwgaSk7Ci0gICAgcmV0dXJuIGJf
W2ldOwotICB9Ci0KLSAgdmFsdWVfdHlwZSYgYXQoc2l6ZV90IGkpIHsKLSAgICBpZiAoaSA+PSBz
aXplKCkpIHN0ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UoImluZGV4IG91dCBvZiByYW5nZSIpOwot
ICAgIHJldHVybiBiX1tpXTsKLSAgfQotCi0gIGNvbnN0IHZhbHVlX3R5cGUmIGF0KHNpemVfdCBp
KSBjb25zdCB7Ci0gICAgaWYgKGkgPj0gc2l6ZSgpKSBzdGQ6Ol9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICByZXR1cm4gYl9baV07Ci0gIH0KLQotICAvLyBE
byBOT1QgdXNlIHRoaXMgZnVuY3Rpb24sIHdoaWNoIHdhcyBsZWZ0IGJlaGluZCBmb3IgYmFja3dh
cmRzCi0gIC8vIGNvbXBhdGliaWxpdHkuICBVc2UgU3Bvb2t5SGFzaFYyIGluc3RlYWQgLS0gaXQg
aXMgZmFzdGVyLCBhbmQgcHJvZHVjZXMKLSAgLy8gYSA2NC1iaXQgaGFzaCwgd2hpY2ggbWVhbnMg
ZHJhbWF0aWNhbGx5IGZld2VyIGNvbGxpc2lvbnMgaW4gbGFyZ2UgbWFwcy4KLSAgLy8gKFRoZSBh
Ym92ZSBhZHZpY2UgZG9lcyBub3QgYXBwbHkgaWYgeW91IGFyZSB0YXJnZXRpbmcgYSAzMi1iaXQg
c3lzdGVtLikKLSAgLy8KLSAgLy8gV29ya3Mgb25seSBmb3IgUmFuZ2U8Y29uc3QgY2hhcio+IGFu
ZCBSYW5nZTxjaGFyKj4KLSAgLy8KLSAgLy8KLSAgLy8gICAgICAgICAqKiBXQU5UIFRPIEdFVCBS
SUQgT0YgVEhJUyBMSU5UPyAqKgotICAvLwotICAvLyBBKSBVc2UgYSBiZXR0ZXIgaGFzaCBmdW5j
dGlvbiAoKmNvdWdoKmZvbGx5OjpIYXNoKmNvdWdoKiksIGJ1dAotICAvLyAgICBvbmx5IGlmIHlv
dSBkb24ndCBzZXJpYWxpemUgZGF0YSBpbiBhIGZvcm1hdCB0aGF0IGRlcGVuZHMgb24KLSAgLy8g
ICAgdGhpcyBmb3JtdWxhIChpZSB0aGUgd3JpdGVyIGFuZCByZWFkZXIgYXNzdW1lIHRoaXMgZXhh
Y3QgaGFzaAotICAvLyAgICBmdW5jdGlvbiBpcyB1c2VkKS4KLSAgLy8KLSAgLy8gQikgSWYgeW91
IGhhdmUgdG8gdXNlIHRoaXMgZXhhY3QgZnVuY3Rpb24gdGhlbiBtYWtlIHlvdXIgb3duIGhhc2hl
cgotICAvLyAgICBvYmplY3QgYW5kIGNvcHkgdGhlIGJvZHkgb3ZlciAoc2VlIHRocmlmdCBleGFt
cGxlOiBEMzk3MjM2MikuCi0gIC8vICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mYnRo
cmlmdC9jb21taXQvZjhlZDUwMmUyNGFiNGEzMmE5ZDVmMjY2NTgwCi0gIEZPTExZX0RFUFJFQ0FU
RUQoIlJlcGxhY2Ugd2l0aCBmb2xseTo6SGFzaCBpZiB0aGUgaGFzaCBpcyBub3Qgc2VyaWFsaXpl
ZCIpCi0gIHVpbnQzMl90IGhhc2goKSBjb25zdCB7Ci0gICAgLy8gVGFrZW4gZnJvbSBmYmkvbnN0
cmluZy5oOgotICAgIC8vICAgIFF1aWNrIGFuZCBkaXJ0eSBiZXJuc3RlaW4gaGFzaC4uLmZpbmUg
Zm9yIHNob3J0IGFzY2lpIHN0cmluZ3MKLSAgICB1aW50MzJfdCBoYXNoID0gNTM4MTsKLSAgICBm
b3IgKHNpemVfdCBpeCA9IDA7IGl4IDwgc2l6ZSgpOyBpeCsrKSB7Ci0gICAgICBoYXNoID0gKCho
YXNoIDw8IDUpICsgaGFzaCkgKyBiX1tpeF07Ci0gICAgfQotICAgIHJldHVybiBoYXNoOwotICB9
Ci0KLSAgdm9pZCBhZHZhbmNlKHNpemVfdHlwZSBuKSB7Ci0gICAgaWYgKFVOTElLRUxZKG4gPiBz
aXplKCkpKSB7Ci0gICAgICBzdGQ6Ol9fdGhyb3dfb3V0X29mX3JhbmdlKCJpbmRleCBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICB9Ci0gICAgYl8gKz0gbjsKLSAgfQotCi0gIHZvaWQgc3VidHJhY3Qoc2l6
ZV90eXBlIG4pIHsKLSAgICBpZiAoVU5MSUtFTFkobiA+IHNpemUoKSkpIHsKLSAgICAgIHN0ZDo6
X190aHJvd19vdXRfb2ZfcmFuZ2UoImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgIH0KLSAgICBl
XyAtPSBuOwotICB9Ci0KLSAgUmFuZ2Ugc3VicGllY2Uoc2l6ZV90eXBlIGZpcnN0LCBzaXplX3R5
cGUgbGVuZ3RoID0gbnBvcykgY29uc3QgewotICAgIGlmIChVTkxJS0VMWShmaXJzdCA+IHNpemUo
KSkpIHsKLSAgICAgIHN0ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UoImluZGV4IG91dCBvZiByYW5n
ZSIpOwotICAgIH0KLQotICAgIHJldHVybiBSYW5nZShiXyArIGZpcnN0LCBzdGQ6Om1pbihsZW5n
dGgsIHNpemUoKSAtIGZpcnN0KSk7Ci0gIH0KLQotICAvLyB1bmNoZWNrZWQgdmVyc2lvbnMKLSAg
dm9pZCB1bmNoZWNrZWRBZHZhbmNlKHNpemVfdHlwZSBuKSB7Ci0gICAgRENIRUNLX0xFKG4sIHNp
emUoKSk7Ci0gICAgYl8gKz0gbjsKLSAgfQotCi0gIHZvaWQgdW5jaGVja2VkU3VidHJhY3Qoc2l6
ZV90eXBlIG4pIHsKLSAgICBEQ0hFQ0tfTEUobiwgc2l6ZSgpKTsKLSAgICBlXyAtPSBuOwotICB9
Ci0KLSAgUmFuZ2UgdW5jaGVja2VkU3VicGllY2Uoc2l6ZV90eXBlIGZpcnN0LCBzaXplX3R5cGUg
bGVuZ3RoID0gbnBvcykgY29uc3QgewotICAgIERDSEVDS19MRShmaXJzdCwgc2l6ZSgpKTsKLSAg
ICByZXR1cm4gUmFuZ2UoYl8gKyBmaXJzdCwgc3RkOjptaW4obGVuZ3RoLCBzaXplKCkgLSBmaXJz
dCkpOwotICB9Ci0KLSAgdm9pZCBwb3BfZnJvbnQoKSB7Ci0gICAgYXNzZXJ0KGJfIDwgZV8pOwot
ICAgICsrYl87Ci0gIH0KLQotICB2b2lkIHBvcF9iYWNrKCkgewotICAgIGFzc2VydChiXyA8IGVf
KTsKLSAgICAtLWVfOwotICB9Ci0KLSAgLy8gc3RyaW5nIHdvcmstYWxpa2UgZnVuY3Rpb25zCi0g
IHNpemVfdHlwZSBmaW5kKGNvbnN0X3JhbmdlX3R5cGUgc3RyKSBjb25zdCB7Ci0gICAgcmV0dXJu
IHFmaW5kKGNhc3RUb0NvbnN0KCksIHN0cik7Ci0gIH0KLQotICBzaXplX3R5cGUgZmluZChjb25z
dF9yYW5nZV90eXBlIHN0ciwgc2l6ZV90IHBvcykgY29uc3QgewotICAgIGlmIChwb3MgPiBzaXpl
KCkpIHJldHVybiBzdGQ6OnN0cmluZzo6bnBvczsKLSAgICBzaXplX3QgcmV0ID0gcWZpbmQoY2Fz
dFRvQ29uc3QoKS5zdWJwaWVjZShwb3MpLCBzdHIpOwotICAgIHJldHVybiByZXQgPT0gbnBvcyA/
IHJldCA6IHJldCArIHBvczsKLSAgfQotCi0gIHNpemVfdHlwZSBmaW5kKEl0ZXIgcywgc2l6ZV90
IHBvcywgc2l6ZV90IG4pIGNvbnN0IHsKLSAgICBpZiAocG9zID4gc2l6ZSgpKSByZXR1cm4gc3Rk
OjpzdHJpbmc6Om5wb3M7Ci0gICAgYXV0byBmb3JGaW5kaW5nID0gY2FzdFRvQ29uc3QoKTsKLSAg
ICBzaXplX3QgcmV0ID0gcWZpbmQoCi0gICAgICAgIHBvcyA/IGZvckZpbmRpbmcuc3VicGllY2Uo
cG9zKSA6IGZvckZpbmRpbmcsIGNvbnN0X3JhbmdlX3R5cGUocywgbikpOwotICAgIHJldHVybiBy
ZXQgPT0gbnBvcyA/IHJldCA6IHJldCArIHBvczsKLSAgfQotCi0gIC8vIFdvcmtzIG9ubHkgZm9y
IFJhbmdlPChjb25zdCkgKHVuc2lnbmVkKSBjaGFyKj4gd2hpY2ggaGF2ZSBSYW5nZShJdGVyKSBj
dG9yCi0gIHNpemVfdHlwZSBmaW5kKGNvbnN0IEl0ZXIgcykgY29uc3QgewotICAgIHJldHVybiBx
ZmluZChjYXN0VG9Db25zdCgpLCBjb25zdF9yYW5nZV90eXBlKHMpKTsKLSAgfQotCi0gIC8vIFdv
cmtzIG9ubHkgZm9yIFJhbmdlPChjb25zdCkgKHVuc2lnbmVkKSBjaGFyKj4gd2hpY2ggaGF2ZSBS
YW5nZShJdGVyKSBjdG9yCi0gIHNpemVfdHlwZSBmaW5kKGNvbnN0IEl0ZXIgcywgc2l6ZV90IHBv
cykgY29uc3QgewotICAgIGlmIChwb3MgPiBzaXplKCkpIHJldHVybiBzdGQ6OnN0cmluZzo6bnBv
czsKLSAgICBzaXplX3R5cGUgcmV0ID0gcWZpbmQoY2FzdFRvQ29uc3QoKS5zdWJwaWVjZShwb3Mp
LCBjb25zdF9yYW5nZV90eXBlKHMpKTsKLSAgICByZXR1cm4gcmV0ID09IG5wb3MgPyByZXQgOiBy
ZXQgKyBwb3M7Ci0gIH0KLQotICBzaXplX3R5cGUgZmluZCh2YWx1ZV90eXBlIGMpIGNvbnN0IHsK
LSAgICByZXR1cm4gcWZpbmQoY2FzdFRvQ29uc3QoKSwgYyk7Ci0gIH0KLQotICBzaXplX3R5cGUg
cmZpbmQodmFsdWVfdHlwZSBjKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZvbGx5OjpyZmluZChjYXN0
VG9Db25zdCgpLCBjKTsKLSAgfQotCi0gIHNpemVfdHlwZSBmaW5kKHZhbHVlX3R5cGUgYywgc2l6
ZV90IHBvcykgY29uc3QgewotICAgIGlmIChwb3MgPiBzaXplKCkpIHJldHVybiBzdGQ6OnN0cmlu
Zzo6bnBvczsKLSAgICBzaXplX3R5cGUgcmV0ID0gcWZpbmQoY2FzdFRvQ29uc3QoKS5zdWJwaWVj
ZShwb3MpLCBjKTsKLSAgICByZXR1cm4gcmV0ID09IG5wb3MgPyByZXQgOiByZXQgKyBwb3M7Ci0g
IH0KLQotICBzaXplX3R5cGUgZmluZF9maXJzdF9vZihjb25zdF9yYW5nZV90eXBlIG5lZWRsZXMp
IGNvbnN0IHsKLSAgICByZXR1cm4gcWZpbmRfZmlyc3Rfb2YoY2FzdFRvQ29uc3QoKSwgbmVlZGxl
cyk7Ci0gIH0KLQotICBzaXplX3R5cGUgZmluZF9maXJzdF9vZihjb25zdF9yYW5nZV90eXBlIG5l
ZWRsZXMsIHNpemVfdCBwb3MpIGNvbnN0IHsKLSAgICBpZiAocG9zID4gc2l6ZSgpKSByZXR1cm4g
c3RkOjpzdHJpbmc6Om5wb3M7Ci0gICAgc2l6ZV90eXBlIHJldCA9IHFmaW5kX2ZpcnN0X29mKGNh
c3RUb0NvbnN0KCkuc3VicGllY2UocG9zKSwgbmVlZGxlcyk7Ci0gICAgcmV0dXJuIHJldCA9PSBu
cG9zID8gcmV0IDogcmV0ICsgcG9zOwotICB9Ci0KLSAgLy8gV29ya3Mgb25seSBmb3IgUmFuZ2U8
KGNvbnN0KSAodW5zaWduZWQpIGNoYXIqPiB3aGljaCBoYXZlIFJhbmdlKEl0ZXIpIGN0b3IKLSAg
c2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YoSXRlciBuZWVkbGVzKSBjb25zdCB7Ci0gICAgcmV0dXJu
IGZpbmRfZmlyc3Rfb2YoY29uc3RfcmFuZ2VfdHlwZShuZWVkbGVzKSk7Ci0gIH0KLQotICAvLyBX
b3JrcyBvbmx5IGZvciBSYW5nZTwoY29uc3QpICh1bnNpZ25lZCkgY2hhcio+IHdoaWNoIGhhdmUg
UmFuZ2UoSXRlcikgY3RvcgotICBzaXplX3R5cGUgZmluZF9maXJzdF9vZihJdGVyIG5lZWRsZXMs
IHNpemVfdCBwb3MpIGNvbnN0IHsKLSAgICByZXR1cm4gZmluZF9maXJzdF9vZihjb25zdF9yYW5n
ZV90eXBlKG5lZWRsZXMpLCBwb3MpOwotICB9Ci0KLSAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2Yo
SXRlciBuZWVkbGVzLCBzaXplX3QgcG9zLCBzaXplX3QgbikgY29uc3QgewotICAgIHJldHVybiBm
aW5kX2ZpcnN0X29mKGNvbnN0X3JhbmdlX3R5cGUobmVlZGxlcywgbiksIHBvcyk7Ci0gIH0KLQot
ICBzaXplX3R5cGUgZmluZF9maXJzdF9vZih2YWx1ZV90eXBlIGMpIGNvbnN0IHsKLSAgICByZXR1
cm4gZmluZChjKTsKLSAgfQotCi0gIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mKHZhbHVlX3R5cGUg
Yywgc2l6ZV90IHBvcykgY29uc3QgewotICAgIHJldHVybiBmaW5kKGMsIHBvcyk7Ci0gIH0KLQot
ICAvKioKLSAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHJhbmdlIGNvbnRhaW5zIHRoZSBnaXZl
biBzdWJyYW5nZSBvciBpdGVtLgotICAgKgotICAgKiBOb3RlOiBDYWxsIGZpbmQoKSBkaXJlY3Rs
eSBpZiB0aGUgaW5kZXggaXMgbmVlZGVkLgotICAgKi8KLSAgYm9vbCBjb250YWlucyhjb25zdCBj
b25zdF9yYW5nZV90eXBlJiBvdGhlcikgY29uc3QgewotICAgIHJldHVybiBmaW5kKG90aGVyKSAh
PSBzdGQ6OnN0cmluZzo6bnBvczsKLSAgfQotCi0gIGJvb2wgY29udGFpbnMoY29uc3QgdmFsdWVf
dHlwZSYgb3RoZXIpIGNvbnN0IHsKLSAgICByZXR1cm4gZmluZChvdGhlcikgIT0gc3RkOjpzdHJp
bmc6Om5wb3M7Ci0gIH0KLQotICB2b2lkIHN3YXAoUmFuZ2UmIHJocykgewotICAgIHN0ZDo6c3dh
cChiXywgcmhzLmJfKTsKLSAgICBzdGQ6OnN3YXAoZV8sIHJocy5lXyk7Ci0gIH0KLQotICAvKioK
LSAgICogRG9lcyB0aGlzIFJhbmdlIHN0YXJ0IHdpdGggYW5vdGhlciByYW5nZT8KLSAgICovCi0g
IGJvb2wgc3RhcnRzV2l0aChjb25zdCBjb25zdF9yYW5nZV90eXBlJiBvdGhlcikgY29uc3Qgewot
ICAgIHJldHVybiBzaXplKCkgPj0gb3RoZXIuc2l6ZSgpCi0gICAgICAmJiBjYXN0VG9Db25zdCgp
LnN1YnBpZWNlKDAsIG90aGVyLnNpemUoKSkgPT0gb3RoZXI7Ci0gIH0KLSAgYm9vbCBzdGFydHNX
aXRoKHZhbHVlX3R5cGUgYykgY29uc3QgewotICAgIHJldHVybiAhZW1wdHkoKSAmJiBmcm9udCgp
ID09IGM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgQ29tcD4KLSAgYm9vbCBzdGFydHNXaXRo
KGNvbnN0IGNvbnN0X3JhbmdlX3R5cGUmIG90aGVyLCBDb21wJiYgZXEpIGNvbnN0IHsKLSAgICBp
ZiAoc2l6ZSgpIDwgb3RoZXIuc2l6ZSgpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIGF1dG8gY29uc3QgdHJ1bmMgPSBzdWJwaWVjZSgwLCBvdGhlci5zaXplKCkpOwotICAgIHJl
dHVybiBzdGQ6OmVxdWFsKAotICAgICAgICB0cnVuYy5iZWdpbigpLCB0cnVuYy5lbmQoKSwgb3Ro
ZXIuYmVnaW4oKSwgc3RkOjpmb3J3YXJkPENvbXA+KGVxKSk7Ci0gIH0KLQotICAvKioKLSAgICog
RG9lcyB0aGlzIFJhbmdlIGVuZCB3aXRoIGFub3RoZXIgcmFuZ2U/Ci0gICAqLwotICBib29sIGVu
ZHNXaXRoKGNvbnN0IGNvbnN0X3JhbmdlX3R5cGUmIG90aGVyKSBjb25zdCB7Ci0gICAgcmV0dXJu
IHNpemUoKSA+PSBvdGhlci5zaXplKCkKLSAgICAgICYmIGNhc3RUb0NvbnN0KCkuc3VicGllY2Uo
c2l6ZSgpIC0gb3RoZXIuc2l6ZSgpKSA9PSBvdGhlcjsKLSAgfQotICBib29sIGVuZHNXaXRoKHZh
bHVlX3R5cGUgYykgY29uc3QgewotICAgIHJldHVybiAhZW1wdHkoKSAmJiBiYWNrKCkgPT0gYzsK
LSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBDb21wPgotICBib29sIGVuZHNXaXRoKGNvbnN0IGNv
bnN0X3JhbmdlX3R5cGUmIG90aGVyLCBDb21wJiYgZXEpIGNvbnN0IHsKLSAgICBpZiAoc2l6ZSgp
IDwgb3RoZXIuc2l6ZSgpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGF1dG8g
Y29uc3QgdHJ1bmMgPSBzdWJwaWVjZShzaXplKCkgLSBvdGhlci5zaXplKCkpOwotICAgIHJldHVy
biBzdGQ6OmVxdWFsKAotICAgICAgICB0cnVuYy5iZWdpbigpLCB0cnVuYy5lbmQoKSwgb3RoZXIu
YmVnaW4oKSwgc3RkOjpmb3J3YXJkPENvbXA+KGVxKSk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xh
c3MgQ29tcD4KLSAgYm9vbCBlcXVhbHMoY29uc3QgY29uc3RfcmFuZ2VfdHlwZSYgb3RoZXIsIENv
bXAmJiBlcSkgY29uc3QgewotICAgIHJldHVybiBzaXplKCkgPT0gb3RoZXIuc2l6ZSgpICYmCi0g
ICAgICAgIHN0ZDo6ZXF1YWwoYmVnaW4oKSwgZW5kKCksIG90aGVyLmJlZ2luKCksIHN0ZDo6Zm9y
d2FyZDxDb21wPihlcSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92ZSB0aGUgaXRlbXMgaW4g
W2IsIGUpLCBhcyBsb25nIGFzIHRoaXMgc3VicmFuZ2UgaXMgYXQgdGhlIGJlZ2lubmluZwotICAg
KiBvciBlbmQgb2YgdGhlIFJhbmdlLgotICAgKgotICAgKiBSZXF1aXJlZCBmb3IgYm9vc3Q6OmFs
Z29yaXRobTo6dHJpbSgpCi0gICAqLwotICB2b2lkIGVyYXNlKEl0ZXIgYiwgSXRlciBlKSB7Ci0g
ICAgaWYgKGIgPT0gYl8pIHsKLSAgICAgIGJfID0gZTsKLSAgICB9IGVsc2UgaWYgKGUgPT0gZV8p
IHsKLSAgICAgIGVfID0gYjsKLSAgICB9IGVsc2UgewotICAgICAgc3RkOjpfX3Rocm93X291dF9v
Zl9yYW5nZSgiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAq
IFJlbW92ZSB0aGUgZ2l2ZW4gcHJlZml4IGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGUgcmFuZ2Ugc3Rh
cnRzIHdpdGggdGhlIGdpdmVuCi0gICAqIHByZWZpeDsgcmV0dXJuIGZhbHNlIG90aGVyd2lzZS4K
LSAgICovCi0gIGJvb2wgcmVtb3ZlUHJlZml4KGNvbnN0IGNvbnN0X3JhbmdlX3R5cGUmIHByZWZp
eCkgewotICAgIHJldHVybiBzdGFydHNXaXRoKHByZWZpeCkgJiYgKGJfICs9IHByZWZpeC5zaXpl
KCksIHRydWUpOwotICB9Ci0gIGJvb2wgcmVtb3ZlUHJlZml4KHZhbHVlX3R5cGUgcHJlZml4KSB7
Ci0gICAgcmV0dXJuIHN0YXJ0c1dpdGgocHJlZml4KSAmJiAoKytiXywgdHJ1ZSk7Ci0gIH0KLQot
ICAvKioKLSAgICogUmVtb3ZlIHRoZSBnaXZlbiBzdWZmaXggYW5kIHJldHVybiB0cnVlIGlmIHRo
ZSByYW5nZSBlbmRzIHdpdGggdGhlIGdpdmVuCi0gICAqIHN1ZmZpeDsgcmV0dXJuIGZhbHNlIG90
aGVyd2lzZS4KLSAgICovCi0gIGJvb2wgcmVtb3ZlU3VmZml4KGNvbnN0IGNvbnN0X3JhbmdlX3R5
cGUmIHN1ZmZpeCkgewotICAgIHJldHVybiBlbmRzV2l0aChzdWZmaXgpICYmIChlXyAtPSBzdWZm
aXguc2l6ZSgpLCB0cnVlKTsKLSAgfQotICBib29sIHJlbW92ZVN1ZmZpeCh2YWx1ZV90eXBlIHN1
ZmZpeCkgewotICAgIHJldHVybiBlbmRzV2l0aChzdWZmaXgpICYmICgtLWVfLCB0cnVlKTsKLSAg
fQotCi0gIC8qKgotICAgKiBSZXBsYWNlcyB0aGUgY29udGVudCBvZiB0aGUgcmFuZ2UsIHN0YXJ0
aW5nIGF0IHBvc2l0aW9uICdwb3MnLCB3aXRoCi0gICAqIGNvbnRlbnRzIG9mICdyZXBsYWNlbWVu
dCcuIEVudGlyZSAncmVwbGFjZW1lbnQnIG11c3QgZml0IGludG8gdGhlCi0gICAqIHJhbmdlLiBS
ZXR1cm5zIGZhbHNlIGlmICdyZXBsYWNlbWVudHMnIGRvZXMgbm90IGZpdC4gRXhhbXBsZSB1c2U6
Ci0gICAqCi0gICAqIGNoYXIgaW5bXSA9ICJidWZmZXIiOwotICAgKiBhdXRvIG1zcCA9IE11dGFi
bGVzU3RyaW5nUGllY2UoaW5wdXQpOwotICAgKiBFWFBFQ1RfVFJVRShtc3AucmVwbGFjZUF0KDIs
ICJ0dCIpKTsKLSAgICogRVhQRUNUX0VRKG1zcCwgImJ1dHRlciIpOwotICAgKgotICAgKiAvLyBu
b3QgZW5vdWdoIHNwYWNlCi0gICAqIEVYUEVDVF9GQUxTRShtc3AucmVwbGFjZShtc3Auc2l6ZSgp
IC0gMSwgInJyIikpOwotICAgKiBFWFBFQ1RfRVEobXNwLCAiYnV0dGVyIik7IC8vIHVuY2hhbmdl
ZAotICAgKi8KLSAgYm9vbCByZXBsYWNlQXQoc2l6ZV90IHBvcywgY29uc3RfcmFuZ2VfdHlwZSBy
ZXBsYWNlbWVudCkgewotICAgIGlmIChzaXplKCkgPCBwb3MgKyByZXBsYWNlbWVudC5zaXplKCkp
IHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzdGQ6OmNvcHkocmVwbGFjZW1l
bnQuYmVnaW4oKSwgcmVwbGFjZW1lbnQuZW5kKCksIGJlZ2luKCkgKyBwb3MpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogUmVwbGFjZXMgYWxsIG9jY3VyZW5jZXMgb2Yg
J3NvdXJjZScgd2l0aCAnZGVzdCcuIFJldHVybnMgbnVtYmVyCi0gICAqIG9mIHJlcGxhY2VtZW50
cyBtYWRlLiBTb3VyY2UgYW5kIGRlc3QgaGF2ZSB0byBoYXZlIHRoZSBzYW1lCi0gICAqIGxlbmd0
aC4gVGhyb3dzIGlmIHRoZSBsZW5ndGhzIGFyZSBkaWZmZXJlbnQuIElmICdzb3VyY2UnIGlzIGEK
LSAgICogcGF0dGVybiB0aGF0IGlzIG92ZXJsYXBwaW5nIHdpdGggaXRzZWxmLCB3ZSBwZXJmb3Jt
IHNlcXVlbnRpYWwKLSAgICogcmVwbGFjZW1lbnQ6ICJhYWFhYWFhIi5yZXBsYWNlQWxsKCJhYSIs
ICJiYSIpIC0tPiAiYmFiYWJhYSIKLSAgICoKLSAgICogRXhhbXBsZSB1c2U6Ci0gICAqCi0gICAq
IGNoYXIgaW5bXSA9ICJidWZmZXIiOwotICAgKiBhdXRvIG1zcCA9IE11dGFibGVzU3RyaW5nUGll
Y2UoaW5wdXQpOwotICAgKiBFWFBFQ1RfRVEobXNwLnJlcGxhY2VBbGwoImZmIiwidHQiKSwgMSk7
Ci0gICAqIEVYUEVDVF9FUShtc3AsICJidXR0ZXIiKTsKLSAgICovCi0gIHNpemVfdCByZXBsYWNl
QWxsKGNvbnN0X3JhbmdlX3R5cGUgc291cmNlLCBjb25zdF9yYW5nZV90eXBlIGRlc3QpIHsKLSAg
ICBpZiAoc291cmNlLnNpemUoKSAhPSBkZXN0LnNpemUoKSkgewotICAgICAgdGhyb3cgc3RkOjpp
bnZhbGlkX2FyZ3VtZW50KAotICAgICAgICAgICJyZXBsYWNlbWVudCBtdXN0IGhhdmUgdGhlIHNh
bWUgc2l6ZSBhcyBzb3VyY2UiKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdC5lbXB0eSgpKSB7Ci0g
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBzaXplX3QgcG9zID0gMDsKLSAgICBzaXplX3Qg
bnVtX3JlcGxhY2VkID0gMDsKLSAgICBzaXplX3R5cGUgZm91bmQgPSBzdGQ6OnN0cmluZzo6bnBv
czsKLSAgICB3aGlsZSAoKGZvdW5kID0gZmluZChzb3VyY2UsIHBvcykpICE9IHN0ZDo6c3RyaW5n
OjpucG9zKSB7Ci0gICAgICByZXBsYWNlQXQoZm91bmQsIGRlc3QpOwotICAgICAgcG9zICs9IHNv
dXJjZS5zaXplKCk7Ci0gICAgICArK251bV9yZXBsYWNlZDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bnVtX3JlcGxhY2VkOwotICB9Ci0KLSAgLyoqCi0gICAqIFNwbGl0cyB0aGlzIGBSYW5nZWAgYFti
LCBlKWAgaW4gdGhlIHBvc2l0aW9uIGBpYCBkaWN0YXRlZCBieSB0aGUgbmV4dAotICAgKiBvY2N1
cmVuY2Ugb2YgYGRlbGltaXRlcmAuCi0gICAqCi0gICAqIFJldHVybnMgYSBuZXcgYFJhbmdlYCBg
W2IsIGkpYCBhbmQgYWRqdXN0cyB0aGlzIHJhbmdlIHRvIHN0YXJ0IHJpZ2h0IGFmdGVyCi0gICAq
IHRoZSBkZWxpbWl0ZXIncyBwb3NpdGlvbi4gVGhpcyByYW5nZSB3aWxsIGJlIGVtcHR5IGlmIHRo
ZSBkZWxpbWl0ZXIgaXMgbm90Ci0gICAqIGZvdW5kLiBJZiBjYWxsZWQgb24gYW4gZW1wdHkgYFJh
bmdlYCwgYm90aCB0aGlzIGFuZCB0aGUgcmV0dXJuZWQgYFJhbmdlYAotICAgKiB3aWxsIGJlIGVt
cHR5LgotICAgKgotICAgKiBFeGFtcGxlOgotICAgKgotICAgKiAgZm9sbHk6OlN0cmluZ1BpZWNl
IHMoInNhbXBsZSBzdHJpbmcgZm9yIHNwbGl0X25leHQiKTsKLSAgICogIGF1dG8gcCA9IHMuc3Bs
aXRfc3RlcCgnICcpOwotICAgKgotICAgKiAgLy8gcHJpbnRzICJzdHJpbmcgZm9yIHNwbGl0X25l
eHQiCi0gICAqICBjb3V0IDw8IHMgPDwgZW5kbDsKLSAgICoKLSAgICogIC8vIHByaW50cyAic2Ft
cGxlIgotICAgKiAgY291dCA8PCBwIDw8IGVuZGw7Ci0gICAqCi0gICAqIEV4YW1wbGUgMjoKLSAg
ICoKLSAgICogIHZvaWQgdG9rZW5pemUoU3RyaW5nUGllY2UgcywgY2hhciBkZWxpbWl0ZXIpIHsK
LSAgICogICAgd2hpbGUgKCFzLmVtcHR5KCkpIHsKLSAgICogICAgICBjb3V0IDw8IHMuc3BsaXRf
c3RlcChkZWxpbWl0ZXIpOwotICAgKiAgICB9Ci0gICAqICB9Ci0gICAqCi0gICAqIEBhdXRob3I6
IE1hcmNlbG8gSnVjaGVtIDxtYXJjZWxvQGZiLmNvbT4KLSAgICovCi0gIFJhbmdlIHNwbGl0X3N0
ZXAodmFsdWVfdHlwZSBkZWxpbWl0ZXIpIHsKLSAgICBhdXRvIGkgPSBzdGQ6OmZpbmQoYl8sIGVf
LCBkZWxpbWl0ZXIpOwotICAgIFJhbmdlIHJlc3VsdChiXywgaSk7Ci0KLSAgICBiXyA9IGkgPT0g
ZV8gPyBlXyA6IHN0ZDo6bmV4dChpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBS
YW5nZSBzcGxpdF9zdGVwKFJhbmdlIGRlbGltaXRlcikgewotICAgIGF1dG8gaSA9IGZpbmQoZGVs
aW1pdGVyKTsKLSAgICBSYW5nZSByZXN1bHQoYl8sIGkgPT0gc3RkOjpzdHJpbmc6Om5wb3MgPyBz
aXplKCkgOiBpKTsKLQotICAgIGJfID0gcmVzdWx0LmVuZCgpID09IGVfCi0gICAgICAgID8gZV8K
LSAgICAgICAgOiBzdGQ6Om5leHQoCi0gICAgICAgICAgICAgIHJlc3VsdC5lbmQoKSwKLSAgICAg
ICAgICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSgKLSAgICAgICAgICAgICAgICAgIGRlbGltaXRlci5zaXplKCkpKTsKLQotICAgIHJldHVy
biByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY2Fs
bHMgYHNwbGl0X3N0ZXAoKWAgYW5kIHBhc3NlcyB0aGUgcmVzdWx0IHRvIGEKLSAgICogZnVuY3Rv
ciwgcmV0dXJuaW5nIHdoYXRldmVyIHRoZSBmdW5jdG9yIGRvZXMuIEFueSBhZGRpdGlvbmFsIGFy
Z3VtZW50cwotICAgKiBgYXJnc2AgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gYXJlIHBlcmZlY3Rs
eSBmb3J3YXJkZWQgdG8gdGhlIGZ1bmN0b3IuCi0gICAqCi0gICAqIFNheSB5b3UgaGF2ZSBhIGZ1
bmN0b3Igd2l0aCB0aGlzIHNpZ25hdHVyZToKLSAgICoKLSAgICogIEZvbyBmbihSYW5nZSByKSB7
IH0KLSAgICoKLSAgICogYHNwbGl0X3N0ZXAoKWAncyByZXR1cm4gdHlwZSB3aWxsIGJlIGBGb29g
LiBJdCB3b3JrcyBqdXN0IGxpa2U6Ci0gICAqCi0gICAqICBhdXRvIHJlc3VsdCA9IGZuKG15UmFu
Z2Uuc3BsaXRfc3RlcCgnICcpKTsKLSAgICoKLSAgICogQSBmdW5jdG9yIHJldHVybmluZyBgdm9p
ZGAgaXMgYWxzbyBzdXBwb3J0ZWQuCi0gICAqCi0gICAqIEV4YW1wbGU6Ci0gICAqCi0gICAqICB2
b2lkIGRvX3NvbWVfcGFyc2luZyhmb2xseTo6U3RyaW5nUGllY2UgcykgewotICAgKiAgICBhdXRv
IHZlcnNpb24gPSBzLnNwbGl0X3N0ZXAoJyAnLCBbJl0oZm9sbHk6OlN0cmluZ1BpZWNlIHgpIHsK
LSAgICogICAgICBpZiAoeC5lbXB0eSgpKSB7Ci0gICAqICAgICAgICB0aHJvdyBzdGQ6OmludmFs
aWRfYXJndW1lbnQoImVtcHR5IHN0cmluZyIpOwotICAgKiAgICAgIH0KLSAgICogICAgICByZXR1
cm4gc3RkOjpzdHJ0b3VsbCh4LmJlZ2luKCksIHguZW5kKCksIDE2KTsKLSAgICogICAgfSk7Ci0g
ICAqCi0gICAqICAgIC8vIC4uLgotICAgKiAgfQotICAgKgotICAgKiAgc3RydWN0IEZvbyB7Ci0g
ICAqICAgIHZvaWQgcGFyc2UoZm9sbHk6OlN0cmluZ1BpZWNlIHMpIHsKLSAgICogICAgICBzLnNw
bGl0X3N0ZXAoJyAnLCBwYXJzZV9maWVsZCwgYmFyLCAxMCk7Ci0gICAqICAgICAgcy5zcGxpdF9z
dGVwKCdcdCcsIHBhcnNlX2ZpZWxkLCBiYXosIDIwKTsKLSAgICoKLSAgICogICAgICBhdXRvIGNv
bnN0IGtsdWRnZSA9IFtdKGZvbGx5OjpTdHJpbmdQaWVjZSB4LCBpbnQgJm91dCwgaW50IGRlZikg
ewotICAgKiAgICAgICAgaWYgKHggPT0gIm51bGwiKSB7Ci0gICAqICAgICAgICAgIG91dCA9IDA7
Ci0gICAqICAgICAgICB9IGVsc2UgewotICAgKiAgICAgICAgICBwYXJzZV9maWVsZCh4LCBvdXQs
IGRlZik7Ci0gICAqICAgICAgICB9Ci0gICAqICAgICAgfTsKLSAgICoKLSAgICogICAgICBzLnNw
bGl0X3N0ZXAoJ1x0Jywga2x1ZGdlLCBnYXopOwotICAgKiAgICAgIHMuc3BsaXRfc3RlcCgnICcs
IGtsdWRnZSwgZm9vKTsKLSAgICogICAgfQotICAgKgotICAgKiAgcHJpdmF0ZToKLSAgICogICAg
aW50IGJhcjsKLSAgICogICAgaW50IGJhejsKLSAgICogICAgaW50IGdhejsKLSAgICogICAgaW50
IGZvbzsKLSAgICoKLSAgICogICAgc3RhdGljIHBhcnNlX2ZpZWxkKGZvbGx5OjpTdHJpbmdQaWVj
ZSBzLCBpbnQgJm91dCwgaW50IGRlZikgewotICAgKiAgICAgIHRyeSB7Ci0gICAqICAgICAgICBv
dXQgPSBmb2xseTo6dG88aW50PihzKTsKLSAgICogICAgICB9IGNhdGNoIChzdGQ6OmV4Y2VwdGlv
biBjb25zdCAmKSB7Ci0gICAqICAgICAgICB2YWx1ZSA9IGRlZjsKLSAgICogICAgICB9Ci0gICAq
ICAgIH0KLSAgICogIH07Ci0gICAqCi0gICAqIEBhdXRob3I6IE1hcmNlbG8gSnVjaGVtIDxtYXJj
ZWxvQGZiLmNvbT4KLSAgICovCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUUHJvY2VzcywgdHlwZW5h
bWUuLi4gQXJncz4KLSAgYXV0byBzcGxpdF9zdGVwKHZhbHVlX3R5cGUgZGVsaW1pdGVyLCBUUHJv
Y2VzcyAmJnByb2Nlc3MsIEFyZ3MgJiYuLi5hcmdzKQotICAgIC0+IGRlY2x0eXBlKHByb2Nlc3Mo
c3RkOjpkZWNsdmFsPFJhbmdlPigpLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKQotICB7
IHJldHVybiBwcm9jZXNzKHNwbGl0X3N0ZXAoZGVsaW1pdGVyKSwgc3RkOjpmb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKTsgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUUHJvY2VzcywgdHlwZW5hbWUu
Li4gQXJncz4KLSAgYXV0byBzcGxpdF9zdGVwKFJhbmdlIGRlbGltaXRlciwgVFByb2Nlc3MgJiZw
cm9jZXNzLCBBcmdzICYmLi4uYXJncykKLSAgICAtPiBkZWNsdHlwZShwcm9jZXNzKHN0ZDo6ZGVj
bHZhbDxSYW5nZT4oKSwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSkKLSAgeyByZXR1cm4g
cHJvY2VzcyhzcGxpdF9zdGVwKGRlbGltaXRlciksIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
Lik7IH0KLQotcHJpdmF0ZToKLSAgSXRlciBiXywgZV87Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3Mg
SXRlcj4KLWNvbnN0IHR5cGVuYW1lIFJhbmdlPEl0ZXI+OjpzaXplX3R5cGUgUmFuZ2U8SXRlcj46
Om5wb3MgPSBzdGQ6OnN0cmluZzo6bnBvczsKLQotdGVtcGxhdGUgPGNsYXNzIEl0ZXI+Ci12b2lk
IHN3YXAoUmFuZ2U8SXRlcj4mIGxocywgUmFuZ2U8SXRlcj4mIHJocykgewotICBsaHMuc3dhcChy
aHMpOwotfQotCi0vKioKLSAqIENyZWF0ZSBhIHJhbmdlIGZyb20gdHdvIGl0ZXJhdG9ycywgd2l0
aCB0eXBlIGRlZHVjdGlvbi4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIEl0ZXI+Ci1jb25zdGV4cHIg
UmFuZ2U8SXRlcj4gcmFuZ2UoSXRlciBmaXJzdCwgSXRlciBsYXN0KSB7Ci0gIHJldHVybiBSYW5n
ZTxJdGVyPihmaXJzdCwgbGFzdCk7Ci19Ci0KLS8qCi0gKiBDcmVhdGVzIGEgcmFuZ2UgdG8gcmVm
ZXJlbmNlIHRoZSBjb250ZW50cyBvZiBhIGNvbnRpZ3VvdXMtc3RvcmFnZSBjb250YWluZXIuCi0g
Ki8KLS8vIFVzZSBwb2ludGVycyBmb3IgdHlwZXMgd2l0aCAnLmRhdGEoKScgbWVtYmVyCi10ZW1w
bGF0ZSA8Ci0gICAgY2xhc3MgQ29sbGVjdGlvbiwKLSAgICBjbGFzcyBUID0gdHlwZW5hbWUgc3Rk
OjpyZW1vdmVfcG9pbnRlcjwKLSAgICAgICAgZGVjbHR5cGUoc3RkOjpkZWNsdmFsPENvbGxlY3Rp
b24+KCkuZGF0YSgpKT46OnR5cGU+Ci1jb25zdGV4cHIgUmFuZ2U8VCo+IHJhbmdlKENvbGxlY3Rp
b24mJiB2KSB7Ci0gIHJldHVybiBSYW5nZTxUKj4odi5kYXRhKCksIHYuZGF0YSgpICsgdi5zaXpl
KCkpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgc2l6ZV90IG4+Ci1jb25zdGV4cHIgUmFuZ2U8
VCo+IHJhbmdlKFQgKCZhcnJheSlbbl0pIHsKLSAgcmV0dXJuIFJhbmdlPFQqPihhcnJheSwgYXJy
YXkgKyBuKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQsIHNpemVfdCBuPgotY29uc3RleHByIFJh
bmdlPGNvbnN0IFQqPiByYW5nZShjb25zdCBzdGQ6OmFycmF5PFQsIG4+JiBhcnJheSkgewotICBy
ZXR1cm4gUmFuZ2U8Y29uc3QgVCo+e2FycmF5fTsKLX0KLQotdHlwZWRlZiBSYW5nZTxjb25zdCBj
aGFyKj4gU3RyaW5nUGllY2U7Ci10eXBlZGVmIFJhbmdlPGNoYXIqPiBNdXRhYmxlU3RyaW5nUGll
Y2U7Ci10eXBlZGVmIFJhbmdlPGNvbnN0IHVuc2lnbmVkIGNoYXIqPiBCeXRlUmFuZ2U7Ci10eXBl
ZGVmIFJhbmdlPHVuc2lnbmVkIGNoYXIqPiBNdXRhYmxlQnl0ZVJhbmdlOwotCi10ZW1wbGF0ZSA8
Y2xhc3MgQz4KLXN0ZDo6YmFzaWNfb3N0cmVhbTxDPiYgb3BlcmF0b3I8PCgKLSAgICBzdGQ6OmJh
c2ljX29zdHJlYW08Qz4mIG9zLAotICAgIFJhbmdlPEMgY29uc3QqPiBwaWVjZSkgewotICB1c2lu
ZyBTdHJlYW1TaXplID0gZGVjbHR5cGUob3Mud2lkdGgoKSk7Ci0gIG9zLndyaXRlKHBpZWNlLnN0
YXJ0KCksIHN0YXRpY19jYXN0PFN0cmVhbVNpemU+KHBpZWNlLnNpemUoKSkpOwotICByZXR1cm4g
b3M7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDPgotc3RkOjpiYXNpY19vc3RyZWFtPEM+JiBvcGVy
YXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxDPiYgb3MsIFJhbmdlPEMqPiBwaWVjZSkgewotICB1
c2luZyBTdHJlYW1TaXplID0gZGVjbHR5cGUob3Mud2lkdGgoKSk7Ci0gIG9zLndyaXRlKHBpZWNl
LnN0YXJ0KCksIHN0YXRpY19jYXN0PFN0cmVhbVNpemU+KHBpZWNlLnNpemUoKSkpOwotICByZXR1
cm4gb3M7Ci19Ci0KLS8qKgotICogVGVtcGxhdGVkIGNvbXBhcmlzb24gb3BlcmF0b3JzCi0gKi8K
LQotdGVtcGxhdGUgPGNsYXNzIEl0ZXI+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJh
bmdlPEl0ZXI+JiBsaHMsIGNvbnN0IFJhbmdlPEl0ZXI+JiByaHMpIHsKLSAgcmV0dXJuIGxocy5z
aXplKCkgPT0gcmhzLnNpemUoKSAmJiBsaHMuY29tcGFyZShyaHMpID09IDA7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBJdGVyPgotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFJhbmdlPEl0ZXI+
JiBsaHMsIGNvbnN0IFJhbmdlPEl0ZXI+JiByaHMpIHsKLSAgcmV0dXJuIGxocy5jb21wYXJlKHJo
cykgPCAwOwotfQotCi0vKioKLSAqIFNwZWNpYWxpemF0aW9ucyBvZiBjb21wYXJpc29uIG9wZXJh
dG9ycyBmb3IgU3RyaW5nUGllY2UKLSAqLwotCi1uYW1lc3BhY2UgZGV0YWlsIHsKLQotdGVtcGxh
dGUgPGNsYXNzIEEsIGNsYXNzIEI+Ci1zdHJ1Y3QgQ29tcGFyYWJsZUFzU3RyaW5nUGllY2Ugewot
ICBlbnVtIHsKLSAgICB2YWx1ZSA9Ci0gICAgKHN0ZDo6aXNfY29udmVydGlibGU8QSwgU3RyaW5n
UGllY2U+Ojp2YWx1ZQotICAgICAmJiBzdGQ6OmlzX3NhbWU8QiwgU3RyaW5nUGllY2U+Ojp2YWx1
ZSkKLSAgICB8fAotICAgIChzdGQ6OmlzX2NvbnZlcnRpYmxlPEIsIFN0cmluZ1BpZWNlPjo6dmFs
dWUKLSAgICAgJiYgc3RkOjppc19zYW1lPEEsIFN0cmluZ1BpZWNlPjo6dmFsdWUpCi0gIH07Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotLyoqCi0gKiBvcGVyYXRvcj09IHRocm91Z2gg
Y29udmVyc2lvbiBmb3IgUmFuZ2U8Y29uc3QgY2hhcio+Ci0gKi8KLXRlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBVPgotdHlwZW5hbWUKLXN0ZDo6ZW5hYmxlX2lmPGRldGFpbDo6Q29tcGFyYWJsZUFz
U3RyaW5nUGllY2U8VCwgVT46OnZhbHVlLCBib29sPjo6dHlwZQotb3BlcmF0b3I9PShjb25zdCBU
JiBsaHMsIGNvbnN0IFUmIHJocykgewotICByZXR1cm4gU3RyaW5nUGllY2UobGhzKSA9PSBTdHJp
bmdQaWVjZShyaHMpOwotfQotCi0vKioKLSAqIG9wZXJhdG9yPCB0aHJvdWdoIGNvbnZlcnNpb24g
Zm9yIFJhbmdlPGNvbnN0IGNoYXIqPgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4K
LXR5cGVuYW1lCi1zdGQ6OmVuYWJsZV9pZjxkZXRhaWw6OkNvbXBhcmFibGVBc1N0cmluZ1BpZWNl
PFQsIFU+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKLW9wZXJhdG9yPChjb25zdCBUJiBsaHMsIGNvbnN0
IFUmIHJocykgewotICByZXR1cm4gU3RyaW5nUGllY2UobGhzKSA8IFN0cmluZ1BpZWNlKHJocyk7
Ci19Ci0KLS8qKgotICogb3BlcmF0b3I+IHRocm91Z2ggY29udmVyc2lvbiBmb3IgUmFuZ2U8Y29u
c3QgY2hhcio+Ci0gKi8KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgotdHlwZW5hbWUKLXN0
ZDo6ZW5hYmxlX2lmPGRldGFpbDo6Q29tcGFyYWJsZUFzU3RyaW5nUGllY2U8VCwgVT46OnZhbHVl
LCBib29sPjo6dHlwZQotb3BlcmF0b3I+KGNvbnN0IFQmIGxocywgY29uc3QgVSYgcmhzKSB7Ci0g
IHJldHVybiBTdHJpbmdQaWVjZShsaHMpID4gU3RyaW5nUGllY2UocmhzKTsKLX0KLQotLyoqCi0g
KiBvcGVyYXRvcjwgdGhyb3VnaCBjb252ZXJzaW9uIGZvciBSYW5nZTxjb25zdCBjaGFyKj4KLSAq
LwotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+Ci10eXBlbmFtZQotc3RkOjplbmFibGVfaWY8
ZGV0YWlsOjpDb21wYXJhYmxlQXNTdHJpbmdQaWVjZTxULCBVPjo6dmFsdWUsIGJvb2w+Ojp0eXBl
Ci1vcGVyYXRvcjw9KGNvbnN0IFQmIGxocywgY29uc3QgVSYgcmhzKSB7Ci0gIHJldHVybiBTdHJp
bmdQaWVjZShsaHMpIDw9IFN0cmluZ1BpZWNlKHJocyk7Ci19Ci0KLS8qKgotICogb3BlcmF0b3I+
IHRocm91Z2ggY29udmVyc2lvbiBmb3IgUmFuZ2U8Y29uc3QgY2hhcio+Ci0gKi8KLXRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBVPgotdHlwZW5hbWUKLXN0ZDo6ZW5hYmxlX2lmPGRldGFpbDo6Q29t
cGFyYWJsZUFzU3RyaW5nUGllY2U8VCwgVT46OnZhbHVlLCBib29sPjo6dHlwZQotb3BlcmF0b3I+
PShjb25zdCBUJiBsaHMsIGNvbnN0IFUmIHJocykgewotICByZXR1cm4gU3RyaW5nUGllY2UobGhz
KSA+PSBTdHJpbmdQaWVjZShyaHMpOwotfQotCi0vKioKLSAqIEZpbmRzIHN1YnN0cmluZ3MgZmFz
dGVyIHRoYW4gYnJ1dGUgZm9yY2UgYnkgYm9ycm93aW5nIGZyb20gQm95ZXItTW9vcmUKLSAqLwot
dGVtcGxhdGUgPGNsYXNzIEl0ZXIsIGNsYXNzIENvbXA+Ci1zaXplX3QgcWZpbmQoY29uc3QgUmFu
Z2U8SXRlcj4mIGhheXN0YWNrLAotICAgICAgICAgICAgIGNvbnN0IFJhbmdlPEl0ZXI+JiBuZWVk
bGUsCi0gICAgICAgICAgICAgQ29tcCBlcSkgewotICAvLyBEb24ndCB1c2Ugc3RkOjpzZWFyY2gs
IHVzZSBhIEJveWVyLU1vb3JlLWxpa2UgdHJpY2sgYnkgY29tcGFyaW5nCi0gIC8vIHRoZSBsYXN0
IGNoYXJhY3RlcnMgZmlyc3QKLSAgYXV0byBjb25zdCBuc2l6ZSA9IG5lZWRsZS5zaXplKCk7Ci0g
IGlmIChoYXlzdGFjay5zaXplKCkgPCBuc2l6ZSkgewotICAgIHJldHVybiBzdGQ6OnN0cmluZzo6
bnBvczsKLSAgfQotICBpZiAoIW5zaXplKSByZXR1cm4gMDsKLSAgYXV0byBjb25zdCBuc2l6ZV8x
ID0gbnNpemUgLSAxOwotICBhdXRvIGNvbnN0IGxhc3ROZWVkbGUgPSBuZWVkbGVbbnNpemVfMV07
Ci0KLSAgLy8gQm95ZXItTW9vcmUgc2tpcCB2YWx1ZSBmb3IgdGhlIGxhc3QgY2hhciBpbiB0aGUg
bmVlZGxlLiBaZXJvIGlzCi0gIC8vIG5vdCBhIHZhbGlkIHZhbHVlOyBza2lwIHdpbGwgYmUgY29t
cHV0ZWQgdGhlIGZpcnN0IHRpbWUgaXQncwotICAvLyBuZWVkZWQuCi0gIHN0ZDo6c3RyaW5nOjpz
aXplX3R5cGUgc2tpcCA9IDA7Ci0KLSAgYXV0byBpID0gaGF5c3RhY2suYmVnaW4oKTsKLSAgYXV0
byBpRW5kID0gaGF5c3RhY2suZW5kKCkgLSBuc2l6ZV8xOwotCi0gIHdoaWxlIChpIDwgaUVuZCkg
ewotICAgIC8vIEJveWVyLU1vb3JlOiBtYXRjaCB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBuZWVk
bGUKLSAgICB3aGlsZSAoIWVxKGlbbnNpemVfMV0sIGxhc3ROZWVkbGUpKSB7Ci0gICAgICBpZiAo
KytpID09IGlFbmQpIHsKLSAgICAgICAgLy8gbm90IGZvdW5kCi0gICAgICAgIHJldHVybiBzdGQ6
OnN0cmluZzo6bnBvczsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gSGVyZSB3ZSBrbm93IHRoYXQg
dGhlIGxhc3QgY2hhciBtYXRjaGVzCi0gICAgLy8gQ29udGludWUgaW4gcGVkZXN0cmlhbiBtb2Rl
Ci0gICAgZm9yIChzaXplX3QgaiA9IDA7IDsgKSB7Ci0gICAgICBhc3NlcnQoaiA8IG5zaXplKTsK
LSAgICAgIGlmICghZXEoaVtqXSwgbmVlZGxlW2pdKSkgewotICAgICAgICAvLyBOb3QgZm91bmQs
IHdlIGNhbiBza2lwCi0gICAgICAgIC8vIENvbXB1dGUgdGhlIHNraXAgdmFsdWUgbGF6aWx5Ci0g
ICAgICAgIGlmIChza2lwID09IDApIHsKLSAgICAgICAgICBza2lwID0gMTsKLSAgICAgICAgICB3
aGlsZSAoc2tpcCA8PSBuc2l6ZV8xICYmICFlcShuZWVkbGVbbnNpemVfMSAtIHNraXBdLCBsYXN0
TmVlZGxlKSkgewotICAgICAgICAgICAgKytza2lwOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBpICs9IHNraXA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgLy8gQ2hl
Y2sgaWYgZG9uZSBzZWFyY2hpbmcKLSAgICAgIGlmICgrK2ogPT0gbnNpemUpIHsKLSAgICAgICAg
Ly8gWWF5Ci0gICAgICAgIHJldHVybiBzaXplX3QoaSAtIGhheXN0YWNrLmJlZ2luKCkpOwotICAg
ICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc3RkOjpzdHJpbmc6Om5wb3M7Ci19Ci0KLW5hbWVz
cGFjZSBkZXRhaWwgewotCi1pbmxpbmUgc2l6ZV90IHFmaW5kX2ZpcnN0X2J5dGVfb2YoY29uc3Qg
U3RyaW5nUGllY2UgaGF5c3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nUGllY2UgbmVlZGxlcykgewotICBzdGF0aWMgYXV0byBjb25zdCBxZmluZF9m
aXJzdF9ieXRlX29mX2ZuID0KLSAgICBmb2xseTo6Q3B1SWQoKS5zc2U0MigpID8gcWZpbmRfZmly
c3RfYnl0ZV9vZl9zc2U0MgotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBxZmluZF9maXJz
dF9ieXRlX29mX25vc3NlOwotICByZXR1cm4gcWZpbmRfZmlyc3RfYnl0ZV9vZl9mbihoYXlzdGFj
aywgbmVlZGxlcyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGRldGFpbAotCi10ZW1wbGF0ZSA8Y2xh
c3MgSXRlciwgY2xhc3MgQ29tcD4KLXNpemVfdCBxZmluZF9maXJzdF9vZihjb25zdCBSYW5nZTxJ
dGVyPiAmIGhheXN0YWNrLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJhbmdlPEl0ZXI+
ICYgbmVlZGxlcywKLSAgICAgICAgICAgICAgICAgICAgICBDb21wIGVxKSB7Ci0gIGF1dG8gcmV0
ID0gc3RkOjpmaW5kX2ZpcnN0X29mKGhheXN0YWNrLmJlZ2luKCksIGhheXN0YWNrLmVuZCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkbGVzLmJlZ2luKCksIG5lZWRsZXMu
ZW5kKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxKTsKLSAgcmV0dXJuIHJl
dCA9PSBoYXlzdGFjay5lbmQoKSA/IHN0ZDo6c3RyaW5nOjpucG9zIDogcmV0IC0gaGF5c3RhY2su
YmVnaW4oKTsKLX0KLQotc3RydWN0IEFzY2lpQ2FzZVNlbnNpdGl2ZSB7Ci0gIGJvb2wgb3BlcmF0
b3IoKShjaGFyIGxocywgY2hhciByaHMpIGNvbnN0IHsKLSAgICByZXR1cm4gbGhzID09IHJoczsK
LSAgfQotfTsKLQotLyoqCi0gKiBDaGVjayBpZiB0d28gYXNjaWkgY2hhcmFjdGVycyBhcmUgY2Fz
ZSBpbnNlbnNpdGl2ZSBlcXVhbC4KLSAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGxvd2Vy
L3VwcGVyIGNhc2UgY2hhcmFjdGVycyBhcmUgdGhlIDYtdGggYml0LgotICogV2UgYWxzbyBjaGVj
ayB0aGV5IGFyZSBhbHBoYSBjaGFycywgaW4gY2FzZSBvZiB4b3IgPSAzMi4KLSAqLwotc3RydWN0
IEFzY2lpQ2FzZUluc2Vuc2l0aXZlIHsKLSAgYm9vbCBvcGVyYXRvcigpKGNoYXIgbGhzLCBjaGFy
IHJocykgY29uc3QgewotICAgIGNoYXIgayA9IGxocyBeIHJoczsKLSAgICBpZiAoayA9PSAwKSBy
ZXR1cm4gdHJ1ZTsKLSAgICBpZiAoayAhPSAzMikgcmV0dXJuIGZhbHNlOwotICAgIGsgPSBsaHMg
fCByaHM7Ci0gICAgcmV0dXJuIChrID49ICdhJyAmJiBrIDw9ICd6Jyk7Ci0gIH0KLX07Ci0KLXRl
bXBsYXRlIDxjbGFzcyBJdGVyPgotc2l6ZV90IHFmaW5kKGNvbnN0IFJhbmdlPEl0ZXI+JiBoYXlz
dGFjaywKLSAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBSYW5nZTxJdGVyPjo6dmFsdWVfdHlw
ZSYgbmVlZGxlKSB7Ci0gIGF1dG8gcG9zID0gc3RkOjpmaW5kKGhheXN0YWNrLmJlZ2luKCksIGhh
eXN0YWNrLmVuZCgpLCBuZWVkbGUpOwotICByZXR1cm4gcG9zID09IGhheXN0YWNrLmVuZCgpID8g
c3RkOjpzdHJpbmc6Om5wb3MgOiBwb3MgLSBoYXlzdGFjay5kYXRhKCk7Ci19Ci0KLXRlbXBsYXRl
IDxjbGFzcyBJdGVyPgotc2l6ZV90IHJmaW5kKGNvbnN0IFJhbmdlPEl0ZXI+JiBoYXlzdGFjaywK
LSAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBSYW5nZTxJdGVyPjo6dmFsdWVfdHlwZSYgbmVl
ZGxlKSB7Ci0gIGZvciAoYXV0byBpID0gaGF5c3RhY2suc2l6ZSgpOyBpLS0gPiAwOyApIHsKLSAg
ICBpZiAoaGF5c3RhY2tbaV0gPT0gbmVlZGxlKSB7Ci0gICAgICByZXR1cm4gaTsKLSAgICB9Ci0g
IH0KLSAgcmV0dXJuIHN0ZDo6c3RyaW5nOjpucG9zOwotfQotCi0vLyBzcGVjaWFsaXphdGlvbiBm
b3IgU3RyaW5nUGllY2UKLXRlbXBsYXRlIDw+Ci1pbmxpbmUgc2l6ZV90IHFmaW5kKGNvbnN0IFJh
bmdlPGNvbnN0IGNoYXIqPiYgaGF5c3RhY2ssIGNvbnN0IGNoYXImIG5lZWRsZSkgewotICAvLyBt
ZW1jaHIgZXhwZWN0cyBhIG5vdC1udWxsIHBvaW50ZXIsIGVhcmx5IHJldHVybiBpZiB0aGUgcmFu
Z2UgaXMgZW1wdHkuCi0gIGlmIChoYXlzdGFjay5lbXB0eSgpKSB7Ci0gICAgcmV0dXJuIHN0ZDo6
c3RyaW5nOjpucG9zOwotICB9Ci0gIGF1dG8gcG9zID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KAotICAgIDo6bWVtY2hyKGhheXN0YWNrLmRhdGEoKSwgbmVlZGxlLCBoYXlzdGFjay5zaXplKCkp
KTsKLSAgcmV0dXJuIHBvcyA9PSBudWxscHRyID8gc3RkOjpzdHJpbmc6Om5wb3MgOiBwb3MgLSBo
YXlzdGFjay5kYXRhKCk7Ci19Ci0KLXRlbXBsYXRlIDw+Ci1pbmxpbmUgc2l6ZV90IHJmaW5kKGNv
bnN0IFJhbmdlPGNvbnN0IGNoYXIqPiYgaGF5c3RhY2ssIGNvbnN0IGNoYXImIG5lZWRsZSkgewot
ICAvLyBtZW1jaHIgZXhwZWN0cyBhIG5vdC1udWxsIHBvaW50ZXIsIGVhcmx5IHJldHVybiBpZiB0
aGUgcmFuZ2UgaXMgZW1wdHkuCi0gIGlmIChoYXlzdGFjay5lbXB0eSgpKSB7Ci0gICAgcmV0dXJu
IHN0ZDo6c3RyaW5nOjpucG9zOwotICB9Ci0gIGF1dG8gcG9zID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KAotICAgIDo6bWVtcmNocihoYXlzdGFjay5kYXRhKCksIG5lZWRsZSwgaGF5c3RhY2su
c2l6ZSgpKSk7Ci0gIHJldHVybiBwb3MgPT0gbnVsbHB0ciA/IHN0ZDo6c3RyaW5nOjpucG9zIDog
cG9zIC0gaGF5c3RhY2suZGF0YSgpOwotfQotCi0vLyBzcGVjaWFsaXphdGlvbiBmb3IgQnl0ZVJh
bmdlCi10ZW1wbGF0ZSA8PgotaW5saW5lIHNpemVfdCBxZmluZChjb25zdCBSYW5nZTxjb25zdCB1
bnNpZ25lZCBjaGFyKj4mIGhheXN0YWNrLAotICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyJiBuZWVkbGUpIHsKLSAgLy8gbWVtY2hyIGV4cGVjdHMgYSBub3QtbnVsbCBwb2lu
dGVyLCBlYXJseSByZXR1cm4gaWYgdGhlIHJhbmdlIGlzIGVtcHR5LgotICBpZiAoaGF5c3RhY2su
ZW1wdHkoKSkgewotICAgIHJldHVybiBzdGQ6OnN0cmluZzo6bnBvczsKLSAgfQotICBhdXRvIHBv
cyA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigKLSAgICA6Om1lbWNocihoYXlz
dGFjay5kYXRhKCksIG5lZWRsZSwgaGF5c3RhY2suc2l6ZSgpKSk7Ci0gIHJldHVybiBwb3MgPT0g
bnVsbHB0ciA/IHN0ZDo6c3RyaW5nOjpucG9zIDogcG9zIC0gaGF5c3RhY2suZGF0YSgpOwotfQot
Ci10ZW1wbGF0ZSA8PgotaW5saW5lIHNpemVfdCByZmluZChjb25zdCBSYW5nZTxjb25zdCB1bnNp
Z25lZCBjaGFyKj4mIGhheXN0YWNrLAotICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyJiBuZWVkbGUpIHsKLSAgLy8gbWVtY2hyIGV4cGVjdHMgYSBub3QtbnVsbCBwb2ludGVy
LCBlYXJseSByZXR1cm4gaWYgdGhlIHJhbmdlIGlzIGVtcHR5LgotICBpZiAoaGF5c3RhY2suZW1w
dHkoKSkgewotICAgIHJldHVybiBzdGQ6OnN0cmluZzo6bnBvczsKLSAgfQotICBhdXRvIHBvcyA9
IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigKLSAgICA6Om1lbXJjaHIoaGF5c3Rh
Y2suZGF0YSgpLCBuZWVkbGUsIGhheXN0YWNrLnNpemUoKSkpOwotICByZXR1cm4gcG9zID09IG51
bGxwdHIgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IHBvcyAtIGhheXN0YWNrLmRhdGEoKTsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIEl0ZXI+Ci1zaXplX3QgcWZpbmRfZmlyc3Rfb2YoY29uc3QgUmFuZ2U8
SXRlcj4mIGhheXN0YWNrLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJhbmdlPEl0ZXI+
JiBuZWVkbGVzKSB7Ci0gIHJldHVybiBxZmluZF9maXJzdF9vZihoYXlzdGFjaywgbmVlZGxlcywg
QXNjaWlDYXNlU2Vuc2l0aXZlKCkpOwotfQotCi0vLyBzcGVjaWFsaXphdGlvbiBmb3IgU3RyaW5n
UGllY2UKLXRlbXBsYXRlIDw+Ci1pbmxpbmUgc2l6ZV90IHFmaW5kX2ZpcnN0X29mKGNvbnN0IFJh
bmdlPGNvbnN0IGNoYXIqPiYgaGF5c3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFJhbmdlPGNvbnN0IGNoYXIqPiYgbmVlZGxlcykgewotICByZXR1cm4gZGV0YWlsOjpx
ZmluZF9maXJzdF9ieXRlX29mKGhheXN0YWNrLCBuZWVkbGVzKTsKLX0KLQotLy8gc3BlY2lhbGl6
YXRpb24gZm9yIEJ5dGVSYW5nZQotdGVtcGxhdGUgPD4KLWlubGluZSBzaXplX3QgcWZpbmRfZmly
c3Rfb2YoY29uc3QgUmFuZ2U8Y29uc3QgdW5zaWduZWQgY2hhcio+JiBoYXlzdGFjaywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmFuZ2U8Y29uc3QgdW5zaWduZWQgY2hhcio+
JiBuZWVkbGVzKSB7Ci0gIHJldHVybiBkZXRhaWw6OnFmaW5kX2ZpcnN0X2J5dGVfb2YoU3RyaW5n
UGllY2UoaGF5c3RhY2spLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZ1BpZWNlKG5lZWRsZXMpKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFzcyBFbmFi
bGU+Ci1zdHJ1Y3QgaGFzaGVyOwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBoYXNoZXI8
Zm9sbHk6OlJhbmdlPFQqPiwKLSAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19wb2Q8VD46OnZhbHVlLCB2b2lkPjo6dHlwZT4gewotICBzaXplX3Qgb3BlcmF0b3Io
KShmb2xseTo6UmFuZ2U8VCo+IHIpIGNvbnN0IHsKLSAgICByZXR1cm4gaGFzaDo6U3Bvb2t5SGFz
aFYyOjpIYXNoNjQoci5iZWdpbigpLCByLnNpemUoKSAqIHNpemVvZihUKSwgMCk7Ci0gIH0KLX07
Ci0KLS8qKgotICogVWJpcXVpdG91cyBoZWxwZXIgdGVtcGxhdGUgZm9yIGtub3dpbmcgd2hhdCdz
IGEgc3RyaW5nCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgSXNTb21lU3RyaW5nIHsK
LSAgZW51bSB7IHZhbHVlID0gc3RkOjppc19zYW1lPFQsIHN0ZDo6c3RyaW5nPjo6dmFsdWUKLSAg
ICAgICAgIHx8IHN0ZDo6aXNfc2FtZTxULCBmYnN0cmluZz46OnZhbHVlIH07Ci19OwotCi19ICAv
LyAhbmFtZXNwYWNlIGZvbGx5Ci0KLUZPTExZX1BPUF9XQVJOSU5HCi0KLUZPTExZX0FTU1VNRV9G
QlZFQ1RPUl9DT01QQVRJQkxFXzEoZm9sbHk6OlJhbmdlKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1Njb3BlR3VhcmQuY3BwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvU2NvcGVHdWFyZC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNjdhMjYxY2QxNmMwODk2NTUzNjVhMzY1NzQ1YzEy
NWJhMmQ0YTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvU2NvcGVHdWFyZC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFj
ZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3Jn
L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi
bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAq
IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhl
IExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgIlNjb3BlR3VhcmQuaCIKLQotI2luY2x1ZGUgPGlv
c3RyZWFtPgotCi0vKnN0YXRpYyovIHZvaWQgZm9sbHk6OlNjb3BlR3VhcmRJbXBsQmFzZTo6d2Fy
bkFib3V0VG9DcmFzaCgpIG5vZXhjZXB0IHsKLSAgLy8gRW5zdXJlIHRoZSBhdmFpbGFiaWxpdHkg
b2Ygc3RkOjpjZXJyCi0gIHN0ZDo6aW9zX2Jhc2U6OkluaXQgaW9Jbml0OwotICBzdGQ6OmNlcnIK
LSAgICAgIDw8ICJUaGlzIHByb2dyYW0gd2lsbCBub3cgdGVybWluYXRlIGJlY2F1c2UgYSBmb2xs
eTo6U2NvcGVHdWFyZCBjYWxsYmFjayAiCi0gICAgICAgICAidGhyZXcgYW4gXG5leGNlcHRpb24u
XG4iOwotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Zm9sbHkvU2NvcGVHdWFyZC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Zm9sbHkvU2NvcGVHdWFyZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDk2YWZk
YzRjNWEzN2ExYTk5NDQ0MzdkMWI3N2E5YjhkYWJhNTkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2ZvbGx5L1Njb3BlR3VhcmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAq
ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAot
ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8bmV3
PgotI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRl
IDxmb2xseS9Qb3J0YWJpbGl0eS5oPgotI2luY2x1ZGUgPGZvbGx5L1ByZXByb2Nlc3Nvci5oPgot
I2luY2x1ZGUgPGZvbGx5L2RldGFpbC9VbmNhdWdodEV4Y2VwdGlvbkNvdW50ZXIuaD4KLQotbmFt
ZXNwYWNlIGZvbGx5IHsKLQotLyoqCi0gKiBTY29wZUd1YXJkIGlzIGEgZ2VuZXJhbCBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUgIkluaXRpYWxpemF0aW9uIGlzCi0gKiBSZXNvdXJjZSBBY3F1aXNpdGlv
biIgaWRpb20uICBCYXNpY2FsbHksIGl0IGd1YXJhbnRlZXMgdGhhdCBhIGZ1bmN0aW9uCi0gKiBp
cyBleGVjdXRlZCB1cG9uIGxlYXZpbmcgdGhlIGN1cnJyZW50IHNjb3BlIHVubGVzcyBvdGhlcndp
c2UgdG9sZC4KLSAqCi0gKiBUaGUgbWFrZUd1YXJkKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBjcmVh
dGUgYSBuZXcgU2NvcGVHdWFyZCBvYmplY3QuCi0gKiBJdCBjYW4gYmUgaW5zdGFudGlhdGVkIHdp
dGggYSBsYW1iZGEgZnVuY3Rpb24sIGEgc3RkOjpmdW5jdGlvbjx2b2lkKCk+LAotICogYSBmdW5j
dG9yLCBvciBhIHZvaWQoKikoKSBmdW5jdGlvbiBwb2ludGVyLgotICoKLSAqCi0gKiBVc2FnZSBl
eGFtcGxlOiBBZGQgYSBmcmllbmQgdG8gbWVtb3J5IGlmIGFuZCBvbmx5IGlmIGl0IGlzIGFsc28g
YWRkZWQKLSAqIHRvIHRoZSBkYi4KLSAqCi0gKiB2b2lkIFVzZXI6OmFkZEZyaWVuZChVc2VyJiBu
ZXdGcmllbmQpIHsKLSAqICAgLy8gYWRkIHRoZSBmcmllbmQgdG8gbWVtb3J5Ci0gKiAgIGZyaWVu
ZHNfLnB1c2hfYmFjaygmbmV3RnJpZW5kKTsKLSAqCi0gKiAgIC8vIElmIHRoZSBkYiBpbnNlcnRp
b24gdGhhdCBmb2xsb3dzIGZhaWxzLCB3ZSBzaG91bGQKLSAqICAgLy8gcmVtb3ZlIGl0IGZyb20g
bWVtb3J5LgotICogICAvLyAoWW91IGNvdWxkIGFsc28gZGVjbGFyZSB0aGlzIGFzICJhdXRvIGd1
YXJkID0gbWFrZUd1YXJkKC4uLikiKQotICogICBTY29wZUd1YXJkIGd1YXJkID0gbWFrZUd1YXJk
KFsmXSB7IGZyaWVuZHNfLnBvcF9iYWNrKCk7IH0pOwotICoKLSAqICAgLy8gdGhpcyB3aWxsIHRo
cm93IGFuIGV4Y2VwdGlvbiB1cG9uIGVycm9yLCB3aGljaAotICogICAvLyBtYWtlcyB0aGUgU2Nv
cGVHdWFyZCBleGVjdXRlIFVzZXJDb250Ojpwb3BfYmFjaygpCi0gKiAgIC8vIG9uY2UgdGhlIEd1
YXJkJ3MgZGVzdHJ1Y3RvciBpcyBjYWxsZWQuCi0gKiAgIGRiXy0+YWRkRnJpZW5kKEdldE5hbWUo
KSwgbmV3RnJpZW5kLkdldE5hbWUoKSk7Ci0gKgotICogICAvLyBhbiBleGNlcHRpb24gd2FzIG5v
dCB0aHJvd24sIHNvIGRvbid0IGV4ZWN1dGUKLSAqICAgLy8gdGhlIEd1YXJkLgotICogICBndWFy
ZC5kaXNtaXNzKCk7Ci0gKiB9Ci0gKgotICogRXhhbWluZSBTY29wZUd1YXJkVGVzdC5jcHAgZm9y
IHNvbWUgbW9yZSBzYW1wbGUgdXNhZ2UuCi0gKgotICogU3RvbGVuIGZyb206Ci0gKiAgIEFuZHJl
aSdzIGFuZCBQZXRydSBNYXJnaW5lYW4ncyBDVUogYXJ0aWNsZToKLSAqICAgICBodHRwOi8vZHJk
b2Jicy5jb20vMTg0NDAzNzU4Ci0gKiAgIGFuZCB0aGUgbG9raSBsaWJyYXJ5OgotICogICAgIGh0
dHA6Ly9sb2tpLWxpYi5zb3VyY2Vmb3JnZS5uZXQvaW5kZXgucGhwP249SWRpb21zLlNjb3BlR3Vh
cmRQb2ludGVyCi0gKiAgIGFuZCB0cmllbmRsLmtqIGFydGljbGU6Ci0gKiAgICAgaHR0cDovL3d3
dy5jb2RlcHJvamVjdC5jb20vS0IvY3BwL3Njb3BlX2d1YXJkLmFzcHgKLSAqLwotY2xhc3MgU2Nv
cGVHdWFyZEltcGxCYXNlIHsKLSBwdWJsaWM6Ci0gIHZvaWQgZGlzbWlzcygpIG5vZXhjZXB0IHsK
LSAgICBkaXNtaXNzZWRfID0gdHJ1ZTsKLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
ICBGT0xMWV9BTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHJ1bkFuZFdhcm5BYm91dFRvQ3Jhc2hP
bkV4Y2VwdGlvbigKLSAgICAgIFQmIGZ1bmN0aW9uKSBub2V4Y2VwdCB7Ci0gICAgdHJ5IHsKLSAg
ICAgIGZ1bmN0aW9uKCk7Ci0gICAgfSBjYXRjaCAoLi4uKSB7Ci0gICAgICB3YXJuQWJvdXRUb0Ny
YXNoKCk7Ci0gICAgICBzdGQ6OnRlcm1pbmF0ZSgpOwotICAgIH0KLSAgfQotCi0gcHJvdGVjdGVk
OgotICBTY29wZUd1YXJkSW1wbEJhc2UoKSBub2V4Y2VwdCA6IGRpc21pc3NlZF8oZmFsc2UpIHt9
Ci0KLSAgc3RhdGljIFNjb3BlR3VhcmRJbXBsQmFzZSBtYWtlRW1wdHlTY29wZUd1YXJkKCkgbm9l
eGNlcHQgewotICAgIHJldHVybiBTY29wZUd1YXJkSW1wbEJhc2V7fTsKLSAgfQotCi0gIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotICBzdGF0aWMgY29uc3QgVCYgYXNDb25zdChjb25zdCBUJiB0KSBu
b2V4Y2VwdCB7Ci0gICAgcmV0dXJuIHQ7Ci0gIH0KLQotICBib29sIGRpc21pc3NlZF87Ci0KLSBw
cml2YXRlOgotICBzdGF0aWMgdm9pZCB3YXJuQWJvdXRUb0NyYXNoKCkgbm9leGNlcHQ7Ci19Owot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgotY2xhc3MgU2NvcGVHdWFyZEltcGwg
OiBwdWJsaWMgU2NvcGVHdWFyZEltcGxCYXNlIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IFNjb3Bl
R3VhcmRJbXBsKEZ1bmN0aW9uVHlwZSYgZm4pIG5vZXhjZXB0KAotICAgICAgc3RkOjppc19ub3Ro
cm93X2NvcHlfY29uc3RydWN0aWJsZTxGdW5jdGlvblR5cGU+Ojp2YWx1ZSkKLSAgICAgIDogU2Nv
cGVHdWFyZEltcGwoCi0gICAgICAgICAgICBhc0NvbnN0KGZuKSwKLSAgICAgICAgICAgIG1ha2VG
YWlsc2FmZShzdGQ6OmlzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlPEZ1bmN0aW9uVHlwZT57
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAmZm4pKSB7fQotCi0gIGV4cGxpY2l0IFNjb3Bl
R3VhcmRJbXBsKGNvbnN0IEZ1bmN0aW9uVHlwZSYgZm4pIG5vZXhjZXB0KAotICAgICAgc3RkOjpp
c19ub3Rocm93X2NvcHlfY29uc3RydWN0aWJsZTxGdW5jdGlvblR5cGU+Ojp2YWx1ZSkKLSAgICAg
IDogU2NvcGVHdWFyZEltcGwoCi0gICAgICAgICAgICBmbiwKLSAgICAgICAgICAgIG1ha2VGYWls
c2FmZShzdGQ6OmlzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlPEZ1bmN0aW9uVHlwZT57fSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAmZm4pKSB7fQotCi0gIGV4cGxpY2l0IFNjb3BlR3Vh
cmRJbXBsKEZ1bmN0aW9uVHlwZSYmIGZuKSBub2V4Y2VwdCgKLSAgICAgIHN0ZDo6aXNfbm90aHJv
d19tb3ZlX2NvbnN0cnVjdGlibGU8RnVuY3Rpb25UeXBlPjo6dmFsdWUpCi0gICAgICA6IFNjb3Bl
R3VhcmRJbXBsKAotICAgICAgICAgICAgc3RkOjptb3ZlX2lmX25vZXhjZXB0KGZuKSwKLSAgICAg
ICAgICAgIG1ha2VGYWlsc2FmZShzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPEZ1
bmN0aW9uVHlwZT57fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAmZm4pKSB7fQotCi0gIFNj
b3BlR3VhcmRJbXBsKFNjb3BlR3VhcmRJbXBsJiYgb3RoZXIpIG5vZXhjZXB0KAotICAgICAgc3Rk
Ojppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxGdW5jdGlvblR5cGU+Ojp2YWx1ZSkKLSAg
ICAgIDogZnVuY3Rpb25fKHN0ZDo6bW92ZV9pZl9ub2V4Y2VwdChvdGhlci5mdW5jdGlvbl8pKSB7
Ci0gICAgLy8gSWYgdGhlIGFib3ZlIGxpbmUgYXR0ZW1wdHMgYSBjb3B5IGFuZCB0aGUgY29weSB0
aHJvd3MsIG90aGVyIGlzCi0gICAgLy8gbGVmdCBvd25pbmcgdGhlIGNsZWFudXAgYWN0aW9uIGFu
ZCB3aWxsIGV4ZWN1dGUgaXQgKG9yIG5vdCkgZGVwZW5kaW5nCi0gICAgLy8gb24gdGhlIHZhbHVl
IG9mIG90aGVyLmRpc21pc3NlZF8uIFRoZSBmb2xsb3dpbmcgbGluZXMgb25seSBleGVjdXRlCi0g
ICAgLy8gaWYgdGhlIG1vdmUvY29weSBzdWNjZWVkZWQsIGluIHdoaWNoIGNhc2UgKnRoaXMgYXNz
dW1lcyBvd25lcnNoaXAgb2YKLSAgICAvLyB0aGUgY2xlYW51cCBhY3Rpb24gYW5kIGRpc21pc3Nl
cyBvdGhlci4KLSAgICBkaXNtaXNzZWRfID0gb3RoZXIuZGlzbWlzc2VkXzsKLSAgICBvdGhlci5k
aXNtaXNzZWRfID0gdHJ1ZTsKLSAgfQotCi0gIH5TY29wZUd1YXJkSW1wbCgpIG5vZXhjZXB0IHsK
LSAgICBpZiAoIWRpc21pc3NlZF8pIHsKLSAgICAgIGV4ZWN1dGUoKTsKLSAgICB9Ci0gIH0KLQot
IHByaXZhdGU6Ci0gIHN0YXRpYyBTY29wZUd1YXJkSW1wbEJhc2UgbWFrZUZhaWxzYWZlKHN0ZDo6
dHJ1ZV90eXBlLCBjb25zdCB2b2lkKikgbm9leGNlcHQgewotICAgIHJldHVybiBtYWtlRW1wdHlT
Y29wZUd1YXJkKCk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRm4+Ci0gIHN0YXRpYyBh
dXRvIG1ha2VGYWlsc2FmZShzdGQ6OmZhbHNlX3R5cGUsIEZuKiBmbikgbm9leGNlcHQKLSAgICAg
IC0+IFNjb3BlR3VhcmRJbXBsPGRlY2x0eXBlKHN0ZDo6cmVmKCpmbikpPiB7Ci0gICAgcmV0dXJu
IFNjb3BlR3VhcmRJbXBsPGRlY2x0eXBlKHN0ZDo6cmVmKCpmbikpPntzdGQ6OnJlZigqZm4pfTsK
LSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBGbj4KLSAgZXhwbGljaXQgU2NvcGVHdWFyZElt
cGwoRm4mJiBmbiwgU2NvcGVHdWFyZEltcGxCYXNlJiYgZmFpbHNhZmUpCi0gICAgICA6IFNjb3Bl
R3VhcmRJbXBsQmFzZXt9LCBmdW5jdGlvbl8oc3RkOjpmb3J3YXJkPEZuPihmbikpIHsKLSAgICBm
YWlsc2FmZS5kaXNtaXNzKCk7Ci0gIH0KLQotICB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXpl
X3QpID0gZGVsZXRlOwotCi0gIHZvaWQgZXhlY3V0ZSgpIG5vZXhjZXB0IHsKLSAgICBydW5BbmRX
YXJuQWJvdXRUb0NyYXNoT25FeGNlcHRpb24oZnVuY3Rpb25fKTsKLSAgfQotCi0gIEZ1bmN0aW9u
VHlwZSBmdW5jdGlvbl87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgot
U2NvcGVHdWFyZEltcGw8dHlwZW5hbWUgc3RkOjpkZWNheTxGdW5jdGlvblR5cGU+Ojp0eXBlPgot
bWFrZUd1YXJkKEZ1bmN0aW9uVHlwZSYmIGZuKSBub2V4Y2VwdCgKLSAgICBzdGQ6OmlzX25vdGhy
b3dfY29uc3RydWN0aWJsZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PEZ1bmN0aW9uVHlwZT46OnR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlPjo6dmFsdWUp
IHsKLSAgcmV0dXJuIFNjb3BlR3VhcmRJbXBsPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8RnVuY3Rpb25U
eXBlPjo6dHlwZT4oCi0gICAgICBzdGQ6OmZvcndhcmQ8RnVuY3Rpb25UeXBlPihmbikpOwotfQot
Ci0vKioKLSAqIFRoaXMgaXMgbGFyZ2VseSB1bm5lZWRlZCBpZiB5b3UganVzdCB1c2UgYXV0byBm
b3IgeW91ciBndWFyZHMuCi0gKi8KLXR5cGVkZWYgU2NvcGVHdWFyZEltcGxCYXNlJiYgU2NvcGVH
dWFyZDsKLQotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLSNpZiBkZWZpbmVkKEZPTExZX0VYQ0VQVElP
Tl9DT1VOVF9VU0VfQ1hBX0dFVF9HTE9CQUxTKSB8fCBcCi0gICAgZGVmaW5lZChGT0xMWV9FWENF
UFRJT05fQ09VTlRfVVNFX0dFVFBURCkgfHwgICAgICAgICAgXAotICAgIGRlZmluZWQoRk9MTFlf
RVhDRVBUSU9OX0NPVU5UX1VTRV9TVEQpCi0KLS8qKgotICogU2NvcGVHdWFyZCB1c2VkIGZvciBl
eGVjdXRpbmcgYSBmdW5jdGlvbiB3aGVuIGxlYXZpbmcgdGhlIGN1cnJlbnQgc2NvcGUKLSAqIGRl
cGVuZGluZyBvbiB0aGUgcHJlc2VuY2Ugb2YgYSBuZXcgdW5jYXVnaHQgZXhjZXB0aW9uLgotICoK
LSAqIElmIHRoZSBleGVjdXRlT25FeGNlcHRpb24gdGVtcGxhdGUgcGFyYW1ldGVyIGlzIHRydWUs
IHRoZSBmdW5jdGlvbiBpcwotICogZXhlY3V0ZWQgaWYgYSBuZXcgdW5jYXVnaHQgZXhjZXB0aW9u
IGlzIHByZXNlbnQgYXQgdGhlIGVuZCBvZiB0aGUgc2NvcGUuCi0gKiBJZiB0aGUgcGFyYW1ldGVy
IGlzIGZhbHNlLCB0aGVuIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCBpZiBubyBuZXcgdW5jYXVn
aHQKLSAqIGV4Y2VwdGlvbnMgYXJlIHByZXNlbnQgYXQgdGhlIGVuZCBvZiB0aGUgc2NvcGUuCi0g
KgotICogVXNlZCB0byBpbXBsZW1lbnQgU0NPUEVfRkFJTCBhbmQgU0NPUEVfU1VDQ0VTUyBiZWxv
dy4KLSAqLwotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgYm9vbCBleGVjdXRlT25F
eGNlcHRpb24+Ci1jbGFzcyBTY29wZUd1YXJkRm9yTmV3RXhjZXB0aW9uIHsKLSBwdWJsaWM6Ci0g
IGV4cGxpY2l0IFNjb3BlR3VhcmRGb3JOZXdFeGNlcHRpb24oY29uc3QgRnVuY3Rpb25UeXBlJiBm
bikKLSAgICAgIDogZnVuY3Rpb25fKGZuKSB7Ci0gIH0KLQotICBleHBsaWNpdCBTY29wZUd1YXJk
Rm9yTmV3RXhjZXB0aW9uKEZ1bmN0aW9uVHlwZSYmIGZuKQotICAgICAgOiBmdW5jdGlvbl8oc3Rk
Ojptb3ZlKGZuKSkgewotICB9Ci0KLSAgU2NvcGVHdWFyZEZvck5ld0V4Y2VwdGlvbihTY29wZUd1
YXJkRm9yTmV3RXhjZXB0aW9uJiYgb3RoZXIpCi0gICAgICA6IGZ1bmN0aW9uXyhzdGQ6Om1vdmUo
b3RoZXIuZnVuY3Rpb25fKSkKLSAgICAgICwgZXhjZXB0aW9uQ291bnRlcl8oc3RkOjptb3ZlKG90
aGVyLmV4Y2VwdGlvbkNvdW50ZXJfKSkgewotICB9Ci0KLSAgflNjb3BlR3VhcmRGb3JOZXdFeGNl
cHRpb24oKSBub2V4Y2VwdChleGVjdXRlT25FeGNlcHRpb24pIHsKLSAgICBpZiAoZXhlY3V0ZU9u
RXhjZXB0aW9uID09IGV4Y2VwdGlvbkNvdW50ZXJfLmlzTmV3VW5jYXVnaHRFeGNlcHRpb24oKSkg
ewotICAgICAgaWYgKGV4ZWN1dGVPbkV4Y2VwdGlvbikgewotICAgICAgICBTY29wZUd1YXJkSW1w
bEJhc2U6OnJ1bkFuZFdhcm5BYm91dFRvQ3Jhc2hPbkV4Y2VwdGlvbihmdW5jdGlvbl8pOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZnVuY3Rpb25fKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0K
LSBwcml2YXRlOgotICBTY29wZUd1YXJkRm9yTmV3RXhjZXB0aW9uKGNvbnN0IFNjb3BlR3VhcmRG
b3JOZXdFeGNlcHRpb24mIG90aGVyKSA9IGRlbGV0ZTsKLQotICB2b2lkKiBvcGVyYXRvciBuZXco
c3RkOjpzaXplX3QpID0gZGVsZXRlOwotCi0gIEZ1bmN0aW9uVHlwZSBmdW5jdGlvbl87Ci0gIFVu
Y2F1Z2h0RXhjZXB0aW9uQ291bnRlciBleGNlcHRpb25Db3VudGVyXzsKLX07Ci0KLS8qKgotICog
SW50ZXJuYWwgdXNlIGZvciB0aGUgbWFjcm8gU0NPUEVfRkFJTCBiZWxvdwotICovCi1lbnVtIGNs
YXNzIFNjb3BlR3VhcmRPbkZhaWwge307Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvblR5
cGU+Ci1TY29wZUd1YXJkRm9yTmV3RXhjZXB0aW9uPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8RnVuY3Rp
b25UeXBlPjo6dHlwZSwgdHJ1ZT4KLW9wZXJhdG9yKyhkZXRhaWw6OlNjb3BlR3VhcmRPbkZhaWws
IEZ1bmN0aW9uVHlwZSYmIGZuKSB7Ci0gIHJldHVybgotICAgICAgU2NvcGVHdWFyZEZvck5ld0V4
Y2VwdGlvbjx0eXBlbmFtZSBzdGQ6OmRlY2F5PEZ1bmN0aW9uVHlwZT46OnR5cGUsIHRydWU+KAot
ICAgICAgc3RkOjpmb3J3YXJkPEZ1bmN0aW9uVHlwZT4oZm4pKTsKLX0KLQotLyoqCi0gKiBJbnRl
cm5hbCB1c2UgZm9yIHRoZSBtYWNybyBTQ09QRV9TVUNDRVNTIGJlbG93Ci0gKi8KLWVudW0gY2xh
c3MgU2NvcGVHdWFyZE9uU3VjY2VzcyB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9u
VHlwZT4KLVNjb3BlR3VhcmRGb3JOZXdFeGNlcHRpb248dHlwZW5hbWUgc3RkOjpkZWNheTxGdW5j
dGlvblR5cGU+Ojp0eXBlLCBmYWxzZT4KLW9wZXJhdG9yKyhTY29wZUd1YXJkT25TdWNjZXNzLCBG
dW5jdGlvblR5cGUmJiBmbikgewotICByZXR1cm4KLSAgICAgIFNjb3BlR3VhcmRGb3JOZXdFeGNl
cHRpb248dHlwZW5hbWUgc3RkOjpkZWNheTxGdW5jdGlvblR5cGU+Ojp0eXBlLCBmYWxzZT4oCi0g
ICAgICBzdGQ6OmZvcndhcmQ8RnVuY3Rpb25UeXBlPihmbikpOwotfQotCi0jZW5kaWYgLy8gbmF0
aXZlIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHN1cHBvcnRlZAotCi0vKioKLSAqIEludGVybmFsIHVz
ZSBmb3IgdGhlIG1hY3JvIFNDT1BFX0VYSVQgYmVsb3cKLSAqLwotZW51bSBjbGFzcyBTY29wZUd1
YXJkT25FeGl0IHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgotU2NvcGVH
dWFyZEltcGw8dHlwZW5hbWUgc3RkOjpkZWNheTxGdW5jdGlvblR5cGU+Ojp0eXBlPgotb3BlcmF0
b3IrKGRldGFpbDo6U2NvcGVHdWFyZE9uRXhpdCwgRnVuY3Rpb25UeXBlJiYgZm4pIHsKLSAgcmV0
dXJuIFNjb3BlR3VhcmRJbXBsPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8RnVuY3Rpb25UeXBlPjo6dHlw
ZT4oCi0gICAgICBzdGQ6OmZvcndhcmQ8RnVuY3Rpb25UeXBlPihmbikpOwotfQotfSAvLyBuYW1l
c3BhY2UgZGV0YWlsCi0KLX0gLy8gZm9sbHkKLQotI2RlZmluZSBTQ09QRV9FWElUIFwKLSAgYXV0
byBGQl9BTk9OWU1PVVNfVkFSSUFCTEUoU0NPUEVfRVhJVF9TVEFURSkgXAotICA9IDo6Zm9sbHk6
OmRldGFpbDo6U2NvcGVHdWFyZE9uRXhpdCgpICsgWyZdKCkgbm9leGNlcHQKLQotI2lmIGRlZmlu
ZWQoRk9MTFlfRVhDRVBUSU9OX0NPVU5UX1VTRV9DWEFfR0VUX0dMT0JBTFMpIHx8IFwKLSAgICBk
ZWZpbmVkKEZPTExZX0VYQ0VQVElPTl9DT1VOVF9VU0VfR0VUUFREKSB8fCAgICAgICAgICBcCi0g
ICAgZGVmaW5lZChGT0xMWV9FWENFUFRJT05fQ09VTlRfVVNFX1NURCkKLSNkZWZpbmUgU0NPUEVf
RkFJTCBcCi0gIGF1dG8gRkJfQU5PTllNT1VTX1ZBUklBQkxFKFNDT1BFX0ZBSUxfU1RBVEUpIFwK
LSAgPSA6OmZvbGx5OjpkZXRhaWw6OlNjb3BlR3VhcmRPbkZhaWwoKSArIFsmXSgpIG5vZXhjZXB0
Ci0KLSNkZWZpbmUgU0NPUEVfU1VDQ0VTUyBcCi0gIGF1dG8gRkJfQU5PTllNT1VTX1ZBUklBQkxF
KFNDT1BFX1NVQ0NFU1NfU1RBVEUpIFwKLSAgPSA6OmZvbGx5OjpkZXRhaWw6OlNjb3BlR3VhcmRP
blN1Y2Nlc3MoKSArIFsmXSgpCi0jZW5kaWYgLy8gbmF0aXZlIHVuY2F1Z2h0X2V4Y2VwdGlvbigp
IHN1cHBvcnRlZApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZm9sbHkvU2hhcmVkTXV0ZXguY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvU2hhcmVkTXV0ZXguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkOGI0OTg4N2FmNzNmNDFmMmYwZjYzY2FjNjA5NTZhMTc2YjkxMGFiLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2ZvbGx5L1NoYXJlZE11dGV4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExp
Y2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5z
ZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
LSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBT
ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz
c2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5j
bHVkZSA8Zm9sbHkvU2hhcmVkTXV0ZXguaD4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLS8vIEV4cGxp
Y2l0bHkgaW5zdGFudGlhdGUgU2hhcmVkTXV0ZXggaGVyZToKLXRlbXBsYXRlIGNsYXNzIFNoYXJl
ZE11dGV4SW1wbDx0cnVlPjsKLXRlbXBsYXRlIGNsYXNzIFNoYXJlZE11dGV4SW1wbDxmYWxzZT47
Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xs
eS9TaGFyZWRNdXRleC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9s
bHkvU2hhcmVkTXV0ZXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYzMzgyYWIz
NGI4MTU1ZGM3ZTBiNjBjZDk1ZjIzZWY0YWY3NmNlNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9mb2xseS9TaGFyZWRNdXRleC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUyMSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAq
ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAot
ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8gQGF1dGhvciBOYXRo
YW4gQnJvbnNvbiAobmdicm9uc29uQGZiLmNvbSkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxzdGRpbnQuaD4KLQotI2luY2x1ZGUgPGF0b21pYz4KLSNpbmNsdWRlIDx0aHJlYWQ+Ci0jaW5j
bHVkZSA8dHlwZV90cmFpdHM+Ci0KLSNpbmNsdWRlIDxmb2xseS9MaWtlbHkuaD4KLSNpbmNsdWRl
IDxmb2xseS9jb25jdXJyZW5jeS9DYWNoZUxvY2FsaXR5Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvZGV0
YWlsL0Z1dGV4Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvQXNtLmg+Ci0jaW5jbHVk
ZSA8Zm9sbHkvcG9ydGFiaWxpdHkvU3lzUmVzb3VyY2UuaD4KLQotLy8gU2hhcmVkTXV0ZXggaXMg
YSByZWFkZXItd3JpdGVyIGxvY2suICBJdCBpcyBzbWFsbCwgdmVyeSBmYXN0LCBzY2FsYWJsZQot
Ly8gb24gbXVsdGktY29yZSwgYW5kIHN1aXRhYmxlIGZvciB1c2Ugd2hlbiByZWFkZXJzIG9yIHdy
aXRlcnMgbWF5IGJsb2NrLgotLy8gVW5saWtlIG1vc3Qgb3RoZXIgcmVhZGVyLXdyaXRlciBsb2Nr
cywgaXRzIHRocm91Z2hwdXQgd2l0aCBjb25jdXJyZW50Ci0vLyByZWFkZXJzIHNjYWxlcyBsaW5l
YXJseTsgaXQgaXMgYWJsZSB0byBhY3F1aXJlIGFuZCByZWxlYXNlIHRoZSBsb2NrCi0vLyBpbiBz
aGFyZWQgbW9kZSB3aXRob3V0IGNhY2hlIGxpbmUgcGluZy1wb25naW5nLiAgSXQgaXMgc3VpdGFi
bGUgZm9yCi0vLyBhIHdpZGUgcmFuZ2Ugb2YgbG9jayBob2xkIHRpbWVzIGJlY2F1c2UgaXQgc3Rh
cnRzIHdpdGggc3Bpbm5pbmcsCi0vLyBwcm9jZWVkcyB0byB1c2luZyBzY2hlZF95aWVsZCB3aXRo
IGEgcHJlZW1wdGlvbiBoZXVyaXN0aWMsIGFuZCB0aGVuCi0vLyB3YWl0cyB1c2luZyBmdXRleCBh
bmQgcHJlY2lzZSB3YWtldXBzLgotLy8KLS8vIFNoYXJlZE11dGV4IHByb3ZpZGVzIGFsbCBvZiB0
aGUgbWV0aG9kcyBvZiBmb2xseTo6UldTcGluTG9jaywKLS8vIGJvb3N0OjpzaGFyZWRfbXV0ZXgs
IGJvb3N0Ojp1cGdyYWRlX211dGV4LCBhbmQgQysrMTQncwotLy8gc3RkOjpzaGFyZWRfdGltZWRf
bXV0ZXguICBBbGwgb3BlcmF0aW9ucyB0aGF0IGNhbiBibG9jayBhcmUgYXZhaWxhYmxlCi0vLyBp
biB0cnksIHRyeS1mb3IsIGFuZCB0cnktdW50aWwgKHN5c3RlbV9jbG9jayBvciBzdGVhZHlfY2xv
Y2spIHZlcnNpb25zLgotLy8KLS8vIFNoYXJlZE11dGV4UmVhZFByaW9yaXR5IGdpdmVzIHByaW9y
aXR5IHRvIHJlYWRlcnMsCi0vLyBTaGFyZWRNdXRleFdyaXRlUHJpb3JpdHkgZ2l2ZXMgcHJpb3Jp
dHkgdG8gd3JpdGVycy4gIFNoYXJlZE11dGV4IGlzIGFuCi0vLyBhbGlhcyBmb3IgU2hhcmVkTXV0
ZXhXcml0ZVByaW9yaXR5LCBiZWNhdXNlIHdyaXRlciBzdGFydmF0aW9uIGlzIG1vcmUKLS8vIGxp
a2VseSB0aGFuIHJlYWRlciBzdGFydmF0aW9uIGZvciB0aGUgcmVhZC1oZWF2eSB3b3JrbG9hZHMg
dGFyZ2V0dGVkCi0vLyBieSBTaGFyZWRNdXRleC4KLS8vCi0vLyBJbiBteSB0ZXN0cyBTaGFyZWRN
dXRleCBpcyBhcyBnb29kIG9yIGJldHRlciB0aGFuIHRoZSBvdGhlcgotLy8gcmVhZGVyLXdyaXRl
ciBsb2NrcyBpbiB1c2UgYXQgRmFjZWJvb2sgZm9yIGFsbW9zdCBhbGwgdXNlIGNhc2VzLAotLy8g
c29tZXRpbWVzIGJ5IGEgd2lkZSBtYXJnaW4uICAoSWYgaXQgaXMgcmFyZSB0aGF0IHRoZXJlIGFy
ZSBhY3R1YWxseQotLy8gY29uY3VycmVudCByZWFkZXJzIHRoZW4gUldTcGluTG9jayBjYW4gYmUg
YSBmZXcgbmFub3NlY29uZHMgZmFzdGVyLikKLS8vIEkgY29tcGFyZWQgaXQgdG8gZm9sbHk6OlJX
U3BpbkxvY2ssIGZvbGx5OjpSV1RpY2tldFNwaW5Mb2NrNjQsCi0vLyBib29zdDo6c2hhcmVkX211
dGV4LCBwdGhyZWFkX3J3bG9ja190LCBhbmQgYSBSV0xvY2sgdGhhdCBpbnRlcm5hbGx5IHVzZXMK
LS8vIHNwaW5sb2NrcyB0byBndWFyZCBzdGF0ZSBhbmQgcHRocmVhZF9tdXRleF90K3B0aHJlYWRf
Y29uZF90IHRvIGJsb2NrLgotLy8gKFRocmlmdCdzIFJlYWRXcml0ZU11dGV4IGlzIGJhc2VkIHVu
ZGVybmVhdGggb24gcHRocmVhZF9yd2xvY2tfdC4pCi0vLyBJdCBpcyBnZW5lcmFsbHkgYXMgZ29v
ZCBvciBiZXR0ZXIgdGhhbiB0aGUgcmVzdCB3aGVuIGV2YWx1YXRpbmcgc2l6ZSwKLS8vIHNwZWVk
LCBzY2FsYWJpbGl0eSwgb3IgbGF0ZW5jeSBvdXRsaWVycy4gIEluIHRoZSBjb3JuZXIgY2FzZXMg
d2hlcmUKLS8vIGl0IGlzIG5vdCB0aGUgZmFzdGVzdCAoc3VjaCBhcyBzaW5nbGUtdGhyZWFkZWQg
dXNlIG9yIGhlYXZ5IHdyaXRlCi0vLyBjb250ZW50aW9uKSBpdCBpcyBuZXZlciB2ZXJ5IG11Y2gg
d29yc2UgdGhhbiB0aGUgYmVzdC4gIFNlZSB0aGUgYm90dG9tCi0vLyBvZiBmb2xseS90ZXN0L1No
YXJlZE11dGV4VGVzdC5jcHAgZm9yIGxvdHMgb2YgbWljcm9iZW5jaG1hcmsgcmVzdWx0cy4KLS8v
Ci0vLyBDb21wYXJpc29uIHRvIGZvbGx5OjpSV1NwaW5Mb2NrOgotLy8KLS8vICAqIFNoYXJlZE11
dGV4IGlzIGZhc3RlciB0aGFuIFJXU3BpbkxvY2sgd2hlbiB0aGVyZSBhcmUgYWN0dWFsbHkKLS8v
ICAgIGNvbmN1cnJlbnQgcmVhZCBhY2Nlc3NlcyAoc29tZXRpbWVzIG11Y2ggZmFzdGVyKSwgYW5k
IH41IG5hbm9zZWNvbmRzCi0vLyAgICBzbG93ZXIgd2hlbiB0aGVyZSBpcyBub3QgYWN0dWFsbHkg
YW55IGNvbnRlbnRpb24uICBTaGFyZWRNdXRleCBpcwotLy8gICAgZmFzdGVyIGluIGV2ZXJ5IChi
ZW5jaG1hcmtlZCkgc2NlbmFyaW8gd2hlcmUgdGhlIHNoYXJlZCBtb2RlIG9mCi0vLyAgICB0aGUg
bG9jayBpcyBhY3R1YWxseSB1c2VmdWwuCi0vLwotLy8gICogQ29uY3VycmVudCBzaGFyZWQgYWNj
ZXNzIHRvIFNoYXJlZE11dGV4IHNjYWxlcyBsaW5lYXJseSwgd2hpbGUgdG90YWwKLS8vICAgIFJX
U3BpbkxvY2sgdGhyb3VnaHB1dCBkcm9wcyBhcyBtb3JlIHRocmVhZHMgdHJ5IHRvIGFjY2VzcyB0
aGUgbG9jawotLy8gICAgaW4gc2hhcmVkIG1vZGUuICBVbmRlciB2ZXJ5IGhlYXZ5IHJlYWQgY29u
dGVudGlvbiBTaGFyZWRNdXRleCBjYW4KLS8vICAgIGJlIHR3byBvcmRlcnMgb2YgbWFnbml0dWRl
IGZhc3RlciB0aGFuIFJXU3BpbkxvY2sgKG9yIGFueSByZWFkZXIKLS8vICAgIHdyaXRlciBsb2Nr
IHRoYXQgZG9lc24ndCB1c2Ugc3RyaXBpbmcgb3IgZGVmZXJyYWwpLgotLy8KLS8vICAqIFNoYXJl
ZE11dGV4IGNhbiBzYWZlbHkgcHJvdGVjdCBibG9ja2luZyBjYWxscywgYmVjYXVzZSBhZnRlciBh
bgotLy8gICAgaW5pdGlhbCBwZXJpb2Qgb2Ygc3Bpbm5pbmcgaXQgd2FpdHMgdXNpbmcgZnV0ZXgo
KS4KLS8vCi0vLyAgKiBSV1NwaW5Mb2NrIHByaW9yaXRpemVzIHJlYWRlcnMsIFNoYXJlZE11dGV4
IGhhcyBib3RoIHJlYWRlci0gYW5kCi0vLyAgICB3cml0ZXItcHJpb3JpdHkgdmFyaWFudHMsIGJ1
dCBkZWZhdWx0cyB0byB3cml0ZSBwcmlvcml0eS4KLS8vCi0vLyAgKiBSV1NwaW5Mb2NrJ3MgdXBn
cmFkZWFibGUgbW9kZSBibG9ja3MgbmV3IHJlYWRlcnMsIHdoaWxlIFNoYXJlZE11dGV4J3MKLS8v
ICAgIGRvZXNuJ3QuICBCb3RoIHNlbWFudGljcyBhcmUgcmVhc29uYWJsZS4gIFRoZSBib29zdCBk
b2N1bWVudGF0aW9uCi0vLyAgICBkb2Vzbid0IGV4cGxpY2l0bHkgdGFsayBhYm91dCB0aGlzIGJl
aGF2aW9yIChleGNlcHQgYnkgb21pdHRpbmcKLS8vICAgIGFueSBzdGF0ZW1lbnQgdGhhdCB0aG9z
ZSBsb2NrIG1vZGVzIGNvbmZsaWN0KSwgYnV0IHRoZSBib29zdAotLy8gICAgaW1wbGVtZW50YXRp
b25zIGRvIGFsbG93IG5ldyByZWFkZXJzIHdoaWxlIHRoZSB1cGdyYWRlYWJsZSBtb2RlCi0vLyAg
ICBpcyBoZWxkLiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ib29zdG9yZy90aHJlYWQvYmxvYi9t
YXN0ZXIvCi0vLyAgICAgIGluY2x1ZGUvYm9vc3QvdGhyZWFkL3B0aHJlYWQvc2hhcmVkX211dGV4
LmhwcAotLy8KLS8vICAqIFJXU3BpbkxvY2s6OlVwZ3JhZGVkSG9sZGVyIG1hcHMgdG8gU2hhcmVk
TXV0ZXg6OlVwZ3JhZGVIb2xkZXIKLS8vICAgIChVcGdyYWRlYWJsZUhvbGRlciB3b3VsZCBiZSBl
dmVuIG1vcmUgcGVkYW50aWNhbGx5IGNvcnJlY3QpLgotLy8gICAgU2hhcmVkTXV0ZXgncyBob2xk
ZXJzIGhhdmUgZmV3ZXIgbWV0aG9kcyAobm8gcmVzZXQpIGFuZCBhcmUgbGVzcwotLy8gICAgdG9s
ZXJhbnQgKHByb21vdGlvbiBhbmQgZG93bmdyYWRlIGNyYXNoIGlmIHRoZSBkb25vciBkb2Vzbid0
IG93bgotLy8gICAgdGhlIGxvY2ssIGFuZCB5b3UgbXVzdCB1c2UgdGhlIGRlZmF1bHQgY29uc3Ry
dWN0b3IgcmF0aGVyIHRoYW4KLS8vICAgIHBhc3NpbmcgYSBudWxscHRyIHRvIHRoZSBwb2ludGVy
IGNvbnN0cnVjdG9yKS4KLS8vCi0vLyBCb3RoIFNoYXJlZE11dGV4IGFuZCBSV1NwaW5Mb2NrIHBy
b3ZpZGUgImV4Y2x1c2l2ZSIsICJ1cGdyYWRlIiwKLS8vIGFuZCAic2hhcmVkIiBtb2Rlcy4gIEF0
IGFsbCB0aW1lcyBudW1fdGhyZWFkc19ob2xkaW5nX2V4Y2x1c2l2ZSArCi0vLyBudW1fdGhyZWFk
c19ob2xkaW5nX3VwZ3JhZGUgPD0gMSwgYW5kIG51bV90aHJlYWRzX2hvbGRpbmdfZXhjbHVzaXZl
ID09Ci0vLyAwIHx8IG51bV90aHJlYWRzX2hvbGRpbmdfc2hhcmVkID09IDAuICBSV1NwaW5Mb2Nr
IGhhcyB0aGUgYWRkaXRpb25hbAotLy8gY29uc3RyYWludCB0aGF0IG51bV90aHJlYWRzX2hvbGRp
bmdfc2hhcmVkIGNhbm5vdCBpbmNyZWFzZSB3aGlsZQotLy8gbnVtX3RocmVhZHNfaG9sZGluZ191
cGdyYWRlIGlzIG5vbi16ZXJvLgotLy8KLS8vIENvbXBhcmlzb24gdG8gdGhlIGludGVybmFsIFJX
TG9jazoKLS8vCi0vLyAgKiBTaGFyZWRNdXRleCBkb2Vzbid0IGFsbG93IGEgbWF4aW11bSByZWFk
ZXIgY291bnQgdG8gYmUgY29uZmlndXJlZCwKLS8vICAgIHNvIGl0IGNhbid0IGJlIHVzZWQgYXMg
YSBzZW1hcGhvcmUgaW4gdGhlIHNhbWUgd2F5IGFzIFJXTG9jay4KLS8vCi0vLyAgKiBTaGFyZWRN
dXRleCBpcyA0IGJ5dGVzLCBSV0xvY2sgaXMgMjU2LgotLy8KLS8vICAqIFNoYXJlZE11dGV4IGlz
IGFzIGZhc3Qgb3IgZmFzdGVyIHRoYW4gUldMb2NrIGluIGFsbCBvZiBteQotLy8gICAgbWljcm9i
ZW5jaG1hcmtzLCBhbmQgaGFzIHBvc2l0aXZlIHJhdGhlciB0aGFuIG5lZ2F0aXZlIHNjYWxhYmls
aXR5LgotLy8KLS8vICAqIFJXTG9jayBhbmQgU2hhcmVkTXV0ZXggYXJlIGJvdGggd3JpdGVyIHBy
aW9yaXR5IGxvY2tzLgotLy8KLS8vICAqIFNoYXJlZE11dGV4IGF2b2lkcyBsYXRlbmN5IG91dGxp
ZXJzIGFzIHdlbGwgYXMgUldMb2NrLgotLy8KLS8vICAqIFNoYXJlZE11dGV4IHVzZXMgZGlmZmVy
ZW50IG5hbWVzICh0ICE9IDAgYmVsb3cpOgotLy8KLS8vICAgIFJXTG9jazo6bG9jaygwKSAgICA9
PiBTaGFyZWRNdXRleDo6bG9jaygpCi0vLwotLy8gICAgUldMb2NrOjpsb2NrKHQpICAgID0+IFNo
YXJlZE11dGV4Ojp0cnlfbG9ja19mb3IobWlsbGlzZWNvbmRzKHQpKQotLy8KLS8vICAgIFJXTG9j
azo6dHJ5TG9jaygpICA9PiBTaGFyZWRNdXRleDo6dHJ5X2xvY2soKQotLy8KLS8vICAgIFJXTG9j
azo6dW5sb2NrKCkgICA9PiBTaGFyZWRNdXRleDo6dW5sb2NrKCkKLS8vCi0vLyAgICBSV0xvY2s6
OmVudGVyKDApICAgPT4gU2hhcmVkTXV0ZXg6OmxvY2tfc2hhcmVkKCkKLS8vCi0vLyAgICBSV0xv
Y2s6OmVudGVyKHQpICAgPT4KLS8vICAgICAgICBTaGFyZWRNdXRleDo6dHJ5X2xvY2tfc2hhcmVk
X2ZvcihtaWxsaXNlY29uZHModCkpCi0vLwotLy8gICAgUldMb2NrOjp0cnlFbnRlcigpID0+IFNo
YXJlZE11dGV4Ojp0cnlfbG9ja19zaGFyZWQoKQotLy8KLS8vICAgIFJXTG9jazo6bGVhdmUoKSAg
ICA9PiBTaGFyZWRNdXRleDo6dW5sb2NrX3NoYXJlZCgpCi0vLwotLy8gICogUldMb2NrIGFsbG93
cyB0aGUgcmVhZGVyIGNvdW50IHRvIGJlIGFkanVzdGVkIGJ5IGEgdmFsdWUgb3RoZXIKLS8vICAg
IHRoYW4gMSBkdXJpbmcgZW50ZXIoKSBvciBsZWF2ZSgpLiBTaGFyZWRNdXRleCBkb2Vzbid0IGN1
cnJlbnRseQotLy8gICAgaW1wbGVtZW50IHRoaXMgZmVhdHVyZS4KLS8vCi0vLyAgKiBSV0xvY2sn
cyBtZXRob2RzIGFyZSBtYXJrZWQgY29uc3QsIFNoYXJlZE11dGV4J3MgYXJlbid0LgotLy8KLS8v
IFJlYWRlci13cml0ZXIgbG9ja3MgaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGFsbG93IGNvbmN1cnJl
bnQgYWNjZXNzCi0vLyB0byBzaGFyZWQgcmVhZC1tb3N0bHkgZGF0YSwgYnV0IGluIHByYWN0aWNl
IHRoZXkgb2Z0ZW4gcHJvdmlkZSBubwotLy8gaW1wcm92ZW1lbnQgb3ZlciBhIG11dGV4LiAgVGhl
IHByb2JsZW0gaXMgdGhlIGNhY2hlIGNvaGVyZW5jZSBwcm90b2NvbAotLy8gb2YgbW9kZXJuIENQ
VXMuICBDb2hlcmVuY2UgaXMgcHJvdmlkZWQgYnkgbWFraW5nIHN1cmUgdGhhdCB3aGVuIGEgY2Fj
aGUKLS8vIGxpbmUgaXMgd3JpdHRlbiBpdCBpcyBwcmVzZW50IGluIG9ubHkgb25lIGNvcmUncyBj
YWNoZS4gIFNpbmNlIGEgbWVtb3J5Ci0vLyB3cml0ZSBpcyByZXF1aXJlZCB0byBhY3F1aXJlIGEg
cmVhZGVyLXdyaXRlciBsb2NrIGluIHNoYXJlZCBtb2RlLCB0aGUKLS8vIGNhY2hlIGxpbmUgaG9s
ZGluZyB0aGUgbG9jayBpcyBpbnZhbGlkYXRlZCBpbiBhbGwgb2YgdGhlIG90aGVyIGNhY2hlcy4K
LS8vIFRoaXMgbGVhZHMgdG8gY2FjaGUgbWlzc2VzIHdoZW4gYW5vdGhlciB0aHJlYWQgd2FudHMg
dG8gYWNxdWlyZSBvcgotLy8gcmVsZWFzZSB0aGUgbG9jayBjb25jdXJyZW50bHkuICBXaGVuIHRo
ZSBSV0xvY2sgaXMgY29sb2NhdGVkIHdpdGggdGhlCi0vLyBkYXRhIGl0IHByb3RlY3RzIChjb21t
b24pLCBjYWNoZSBtaXNzZXMgY2FuIGFsc28gY29udGludWUgb2NjdXIgd2hlbgotLy8gYSB0aHJl
YWQgdGhhdCBhbHJlYWR5IGhvbGRzIHRoZSBsb2NrIHRyaWVzIHRvIHJlYWQgdGhlIHByb3RlY3Rl
ZCBkYXRhLgotLy8KLS8vIElkZWFsbHksIGEgcmVhZGVyLXdyaXRlciBsb2NrIHdvdWxkIGFsbG93
IG11bHRpcGxlIGNvcmVzIHRvIGFjcXVpcmUKLS8vIGFuZCByZWxlYXNlIHRoZSBsb2NrIGluIHNo
YXJlZCBtb2RlIHdpdGhvdXQgaW5jdXJyaW5nIGFueSBjYWNoZSBtaXNzZXMuCi0vLyBUaGlzIHJl
cXVpcmVzIHRoYXQgZWFjaCBjb3JlIHJlY29yZHMgaXRzIHNoYXJlZCBhY2Nlc3MgaW4gYSBjYWNo
ZSBsaW5lCi0vLyB0aGF0IGlzbid0IHJlYWQgb3Igd3JpdHRlbiBieSBvdGhlciByZWFkLWxvY2tp
bmcgY29yZXMuICAoV3JpdGVycyB3aWxsCi0vLyBoYXZlIHRvIGNoZWNrIGFsbCBvZiB0aGUgY2Fj
aGUgbGluZXMuKSAgVHlwaWNhbCBzZXJ2ZXIgaGFyZHdhcmUgd2hlbgotLy8gdGhpcyBjb21tZW50
IHdhcyB3cml0dGVuIGhhcyAxNiBMMSBjYWNoZXMgYW5kIGNhY2hlIGxpbmVzIG9mIDY0IGJ5dGVz
LAotLy8gc28gYSBsb2NrIHN0cmlwZWQgb3ZlciBhbGwgTDEgY2FjaGVzIHdvdWxkIG9jY3VweSBh
IHByb2hpYml0aXZlIDEwMjQKLS8vIGJ5dGVzLiAgTm90aGluZyBzYXlzIHRoYXQgd2UgbmVlZCBh
IHNlcGFyYXRlIHNldCBvZiBwZXItY29yZSBtZW1vcnkKLS8vIGxvY2F0aW9ucyBmb3IgZWFjaCBs
b2NrLCBob3dldmVyLiAgRWFjaCBTaGFyZWRNdXRleCBpbnN0YW5jZSBpcyBvbmx5Ci0vLyA0IGJ5
dGVzLCBidXQgYWxsIGxvY2tzIHRvZ2V0aGVyIHNoYXJlIGEgMksgYXJlYSBpbiB3aGljaCB0aGV5
IG1ha2UgYQotLy8gY29yZS1sb2NhbCByZWNvcmQgb2YgbG9jayBhY3F1aXNpdGlvbnMuCi0vLwot
Ly8gU2hhcmVkTXV0ZXgncyBzdHJhdGVneSBvZiB1c2luZyBhIHNoYXJlZCBzZXQgb2YgY29yZS1s
b2NhbCBzdHJpcGVzIGhhcwotLy8gYSBwb3RlbnRpYWwgZG93bnNpZGUsIGJlY2F1c2UgaXQgbWVh
bnMgdGhhdCBhY3F1aXNpdGlvbiBvZiBhbnkgbG9jayBpbgotLy8gd3JpdGUgbW9kZSBjYW4gY29u
ZmxpY3Qgd2l0aCBhY3F1aXNpdGlvbiBvZiBhbnkgbG9jayBpbiBzaGFyZWQgbW9kZS4KLS8vIElm
IGEgbG9jayBpbnN0YW5jZSBkb2Vzbid0IGFjdHVhbGx5IGV4cGVyaWVuY2UgY29uY3VycmVuY3kg
dGhlbiB0aGlzCi0vLyBkb3duc2lkZSB3aWxsIG91dHdlaWdodCB0aGUgdXBzaWRlIG9mIGltcHJv
dmVkIHNjYWxhYmlsaXR5IGZvciByZWFkZXJzLgotLy8gVG8gYXZvaWQgdGhpcyBwcm9ibGVtIHdl
IGR5bmFtaWNhbGx5IGRldGVjdCBjb25jdXJyZW50IGFjY2Vzc2VzIHRvCi0vLyBTaGFyZWRNdXRl
eCwgYW5kIGRvbid0IHN0YXJ0IHVzaW5nIHRoZSBkZWZlcnJlZCBtb2RlIHVubGVzcyB3ZSBhY3R1
YWxseQotLy8gb2JzZXJ2ZSBjb25jdXJyZW5jeS4gIFNlZSBrTnVtU2hhcmVkVG9TdGFydERlZmVy
cmluZy4KLS8vCi0vLyBJdCBpcyBleHBsaWNpdGx5IGFsbG93ZWQgdG8gY2FsbCBsb2NrX3Vuc2hh
cmVkKCkgZnJvbSBhIGRpZmZlcmVudAotLy8gdGhyZWFkIHRoYW4gbG9ja19zaGFyZWQoKSwgc28g
bG9uZyBhcyB0aGV5IGFyZSBwcm9wZXJseSBwYWlyZWQuCi0vLyBsb2NrX3Vuc2hhcmVkKCkgbmVl
ZHMgdG8gZmluZCB0aGUgbG9jYXRpb24gYXQgd2hpY2ggbG9ja19zaGFyZWQoKQotLy8gcmVjb3Jk
ZWQgdGhlIGxvY2ssIHdoaWNoIG1pZ2h0IGJlIGluIHRoZSBsb2NrIGl0c2VsZiBvciBpbiBhbnkg
b2YKLS8vIHRoZSBzaGFyZWQgc2xvdHMuICBJZiB5b3UgY2FuIGNvbnZlbmllbnRseSBwYXNzIHN0
YXRlIGZyb20gbG9jawotLy8gYWNxdWlzaXRpb24gdG8gcmVsZWFzZSB0aGVuIHRoZSBmYXN0ZXN0
IG1lY2hhbmlzbSBpcyB0byBzdGQ6Om1vdmUKLS8vIHRoZSBTaGFyZWRNdXRleDo6UmVhZEhvbGRl
ciBpbnN0YW5jZSBvciBhbiBTaGFyZWRNdXRleDo6VG9rZW4gKHVzaW5nCi0vLyBsb2NrX3NoYXJl
ZChUb2tlbiYpIGFuZCB1bmxvY2tfc2hhcmVkKFRva2VuJikpLiAgVGhlIGd1YXJkIG9yIHRva2Vu
Ci0vLyB3aWxsIHRlbGwgdW5sb2NrX3NoYXJlZCB3aGVyZSBpbiBkZWZlcnJlZFJlYWRlcnNbXSB0
byBsb29rIGZvciB0aGUKLS8vIGRlZmVycmVkIGxvY2suICBUaGUgVG9rZW4tbGVzcyB2ZXJzaW9u
IG9mIHVubG9ja19zaGFyZWQoKSB3b3JrcyBpbiBhbGwKLS8vIGNhc2VzLCBidXQgaXMgb3B0aW1p
emVkIGZvciB0aGUgY29tbW9uIChubyBpbnRlci10aHJlYWQgaGFuZG9mZikgY2FzZS4KLS8vCi0v
LyBJbiBib3RoIHJlYWQtIGFuZCB3cml0ZS1wcmlvcml0eSBtb2RlLCBhIHdhaXRpbmcgbG9jaygp
IChleGNsdXNpdmUgbW9kZSkKLS8vIG9ubHkgYmxvY2tzIHJlYWRlcnMgYWZ0ZXIgaXQgaGFzIHdh
aXRlZCBmb3IgYW4gYWN0aXZlIHVwZ3JhZGUgbG9jayB0byBiZQotLy8gcmVsZWFzZWQ7IHVudGls
IHRoZSB1cGdyYWRlIGxvY2sgaXMgcmVsZWFzZWQgKG9yIHVwZ3JhZGVkIG9yIGRvd25ncmFkZWQp
Ci0vLyByZWFkZXJzIHdpbGwgc3RpbGwgYmUgYWJsZSB0byBlbnRlci4gIFByZWZlcmVuY2VzIGFi
b3V0IGxvY2sgYWNxdWlzaXRpb24KLS8vIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSBlbmZvcmNl
ZCBwZXJmZWN0bHkgKGV2ZW4gaWYgdGhleSB3ZXJlLCB0aGVyZQotLy8gaXMgdGhlb3JldGljYWxs
eSB0aGUgY2hhbmNlIHRoYXQgYSB0aHJlYWQgY291bGQgYmUgYXJiaXRyYXJpbHkgc3VzcGVuZGVk
Ci0vLyBiZXR3ZWVuIGNhbGxpbmcgbG9jaygpIGFuZCBTaGFyZWRNdXRleCBjb2RlIGFjdHVhbGx5
IGdldHRpbmcgZXhlY3V0ZWQpLgotLy8KLS8vIHRyeV8qX2ZvciBtZXRob2RzIGFsd2F5cyB0cnkg
YXQgbGVhc3Qgb25jZSwgZXZlbiBpZiB0aGUgZHVyYXRpb24KLS8vIGlzIHplcm8gb3IgbmVnYXRp
dmUuICBUaGUgZHVyYXRpb24gdHlwZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aAotLy8gc3RkOjpj
aHJvbm86OnN0ZWFkeV9jbG9jay4gIHRyeV8qX3VudGlsIG1ldGhvZHMgYWxzbyBhbHdheXMgdHJ5
IGF0Ci0vLyBsZWFzdCBvbmNlLiAgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jayBhbmQgc3RkOjpj
aHJvbm86OnN0ZWFkeV9jbG9jawotLy8gYXJlIHN1cHBvcnRlZC4KLS8vCi0vLyBJZiB5b3UgaGF2
ZSBvYnNlcnZlZCBieSBwcm9maWxpbmcgdGhhdCB5b3VyIFNoYXJlZE11dGV4LXMgYXJlIGdldHRp
bmcKLS8vIGNhY2hlIG1pc3NlcyBvbiBkZWZlcnJlZFJlYWRlcnNbXSBkdWUgdG8gYW5vdGhlciBT
aGFyZWRNdXRleCB1c2VyLCB0aGVuCi0vLyB5b3UgY2FuIHVzZSB0aGUgdGFnIHR5cGUgdG8gY3Jl
YXRlIHlvdXIgb3duIGluc3RhbnRpYXRpb24gb2YgdGhlIHR5cGUuCi0vLyBUaGUgY29udGVudGlv
biB0aHJlc2hvbGQgKHNlZSBrTnVtU2hhcmVkVG9TdGFydERlZmVycmluZykgc2hvdWxkIG1ha2UK
LS8vIHRoaXMgdW5uZWNlc3NhcnkgaW4gYWxsIGJ1dCB0aGUgbW9zdCBleHRyZW1lIGNhc2VzLiAg
TWFrZSBzdXJlIHRvIGNoZWNrCi0vLyB0aGF0IHRoZSBpbmNyZWFzZWQgaWNhY2hlIGFuZCBkY2Fj
aGUgZm9vdHByaW50IG9mIHRoZSB0YWdnZWQgcmVzdWx0IGlzCi0vLyB3b3J0aCBpdC4KLQotLy8g
U2hhcmVkTXV0ZXgncyB1c2Ugb2YgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgaXMgYXMgYW4gb3B0aW1p
emF0aW9uLCBzbwotLy8gZm9yIHRoZSBjYXNlIHdoZXJlIHRocmVhZCBsb2NhbCBzdG9yYWdlIGlz
IG5vdCBzdXBwb3J0ZWQsIGRlZmluZSBpdAotLy8gYXdheS4KLSNpZm5kZWYgRk9MTFlfU0hBUkVE
TVVURVhfVExTCi0jaWYgIUZPTExZX01PQklMRQotI2RlZmluZSBGT0xMWV9TSEFSRURNVVRFWF9U
TFMgRk9MTFlfVExTCi0jZWxzZQotI2RlZmluZSBGT0xMWV9TSEFSRURNVVRFWF9UTFMKLSNlbmRp
ZgotI2VuZGlmCi0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLXN0cnVjdCBTaGFyZWRNdXRleFRva2Vu
IHsKLSAgZW51bSBjbGFzcyBUeXBlIDogdWludDE2X3QgewotICAgIElOVkFMSUQgPSAwLAotICAg
IElOTElORV9TSEFSRUQsCi0gICAgREVGRVJSRURfU0hBUkVELAotICB9OwotCi0gIFR5cGUgdHlw
ZV87Ci0gIHVpbnQxNl90IHNsb3RfOwotfTsKLQotdGVtcGxhdGUgPGJvb2wgUmVhZGVyUHJpb3Jp
dHksCi0gICAgICAgICAgdHlwZW5hbWUgVGFnXyA9IHZvaWQsCi0gICAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lPiBjbGFzcyBBdG9tID0gc3RkOjphdG9taWMsCi0gICAgICAgICAgYm9vbCBCbG9j
a0ltbWVkaWF0ZWx5ID0gZmFsc2U+Ci1jbGFzcyBTaGFyZWRNdXRleEltcGwgewotIHB1YmxpYzoK
LSAgc3RhdGljIGNvbnN0ZXhwciBib29sIGtSZWFkZXJQcmlvcml0eSA9IFJlYWRlclByaW9yaXR5
OwotICB0eXBlZGVmIFRhZ18gVGFnOwotCi0gIHR5cGVkZWYgU2hhcmVkTXV0ZXhUb2tlbiBUb2tl
bjsKLQotICBjbGFzcyBSZWFkSG9sZGVyOwotICBjbGFzcyBVcGdyYWRlSG9sZGVyOwotICBjbGFz
cyBXcml0ZUhvbGRlcjsKLQotICBjb25zdGV4cHIgU2hhcmVkTXV0ZXhJbXBsKCkgbm9leGNlcHQg
OiBzdGF0ZV8oMCkge30KLQotICBTaGFyZWRNdXRleEltcGwoY29uc3QgU2hhcmVkTXV0ZXhJbXBs
JikgPSBkZWxldGU7Ci0gIFNoYXJlZE11dGV4SW1wbChTaGFyZWRNdXRleEltcGwmJikgPSBkZWxl
dGU7Ci0gIFNoYXJlZE11dGV4SW1wbCYgb3BlcmF0b3IgPSAoY29uc3QgU2hhcmVkTXV0ZXhJbXBs
JikgPSBkZWxldGU7Ci0gIFNoYXJlZE11dGV4SW1wbCYgb3BlcmF0b3IgPSAoU2hhcmVkTXV0ZXhJ
bXBsJiYpID0gZGVsZXRlOwotCi0gIC8vIEl0IGlzIGFuIGVycm9yIHRvIGRlc3Ryb3kgYW4gU2hh
cmVkTXV0ZXggdGhhdCBzdGlsbCBoYXMKLSAgLy8gYW55IG91dHN0YW5kaW5nIGxvY2tzLiAgVGhp
cyBpcyBjaGVja2VkIGlmIE5ERUJVRyBpc24ndCBkZWZpbmVkLgotICAvLyBTaGFyZWRNdXRleCdz
IGV4Y2x1c2l2ZSBtb2RlIGNhbiBiZSBzYWZlbHkgdXNlZCB0byBndWFyZCB0aGUgbG9jaydzCi0g
IC8vIG93biBkZXN0cnVjdGlvbi4gIElmLCBmb3IgZXhhbXBsZSwgeW91IGFjcXVpcmUgdGhlIGxv
Y2sgaW4gZXhjbHVzaXZlCi0gIC8vIG1vZGUgYW5kIHRoZW4gb2JzZXJ2ZSB0aGF0IHRoZSBvYmpl
Y3QgY29udGFpbmluZyB0aGUgbG9jayBpcyBubyBsb25nZXIKLSAgLy8gbmVlZGVkLCB5b3UgY2Fu
IHVubG9jaygpIGFuZCB0aGVuIGltbWVkaWF0ZWx5IGRlc3Ryb3kgdGhlIGxvY2suCi0gIC8vIFNl
ZSBodHRwczovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMzY5MCBm
b3IgYQotICAvLyBkZXNjcmlwdGlvbiBhYm91dCB3aHkgdGhpcyBwcm9wZXJ0eSBuZWVkcyB0byBi
ZSBleHBsaWNpdGx5IG1lbnRpb25lZC4KLSAgflNoYXJlZE11dGV4SW1wbCgpIHsKLSAgICBhdXRv
IHN0YXRlID0gc3RhdGVfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgaWYg
KFVOTElLRUxZKChzdGF0ZSAmIGtIYXNTKSAhPSAwKSkgewotICAgICAgY2xlYW51cFRva2VubGVz
c1NoYXJlZERlZmVycmVkKHN0YXRlKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgLy8g
aWYgYSBmdXRleFdhaXQgZmFpbHMgdG8gZ28gdG8gc2xlZXAgYmVjYXVzZSB0aGUgdmFsdWUgaGFz
IGJlZW4KLSAgICAvLyBjaGFuZ2VkLCB3ZSBkb24ndCBuZWNlc3NhcmlseSBjbGVhbiB1cCB0aGUg
d2FpdCBiaXRzLCBzbyBpdCBpcwotICAgIC8vIHBvc3NpYmxlIHRoZXkgd2lsbCBiZSBzZXQgaGVy
ZSBpbiBhIGNvcnJlY3Qgc3lzdGVtCi0gICAgYXNzZXJ0KChzdGF0ZSAmIH4oa1dhaXRpbmdBbnkg
fCBrTWF5RGVmZXIpKSA9PSAwKTsKLSAgICBpZiAoKHN0YXRlICYga01heURlZmVyKSAhPSAwKSB7
Ci0gICAgICBmb3IgKHVpbnQzMl90IHNsb3QgPSAwOyBzbG90IDwga01heERlZmVycmVkUmVhZGVy
czsgKytzbG90KSB7Ci0gICAgICAgIGF1dG8gc2xvdFZhbHVlID0gZGVmZXJyZWRSZWFkZXIoc2xv
dCktPmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgICAgIGFzc2VydCghc2xv
dFZhbHVlSXNUaGlzKHNsb3RWYWx1ZSkpOwotICAgICAgfQotICAgIH0KLSNlbmRpZgotICB9Ci0K
LSAgdm9pZCBsb2NrKCkgewotICAgIFdhaXRGb3JldmVyIGN0eDsKLSAgICAodm9pZClsb2NrRXhj
bHVzaXZlSW1wbChrSGFzU29sbywgY3R4KTsKLSAgfQotCi0gIGJvb2wgdHJ5X2xvY2soKSB7Ci0g
ICAgV2FpdE5ldmVyIGN0eDsKLSAgICByZXR1cm4gbG9ja0V4Y2x1c2l2ZUltcGwoa0hhc1NvbG8s
IGN0eCk7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgUmVwLCBjbGFzcyBQZXJpb2Q+Ci0gIGJv
b2wgdHJ5X2xvY2tfZm9yKGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4m
IGR1cmF0aW9uKSB7Ci0gICAgV2FpdEZvckR1cmF0aW9uPFJlcCwgUGVyaW9kPiBjdHgoZHVyYXRp
b24pOwotICAgIHJldHVybiBsb2NrRXhjbHVzaXZlSW1wbChrSGFzU29sbywgY3R4KTsKLSAgfQot
Ci0gIHRlbXBsYXRlIDxjbGFzcyBDbG9jaywgY2xhc3MgRHVyYXRpb24+Ci0gIGJvb2wgdHJ5X2xv
Y2tfdW50aWwoCi0gICAgICBjb25zdCBzdGQ6OmNocm9ubzo6dGltZV9wb2ludDxDbG9jaywgRHVy
YXRpb24+JiBhYnNEZWFkbGluZSkgewotICAgIFdhaXRVbnRpbERlYWRsaW5lPENsb2NrLCBEdXJh
dGlvbj4gY3R4e2Fic0RlYWRsaW5lfTsKLSAgICByZXR1cm4gbG9ja0V4Y2x1c2l2ZUltcGwoa0hh
c1NvbG8sIGN0eCk7Ci0gIH0KLQotICB2b2lkIHVubG9jaygpIHsKLSAgICAvLyBJdCBpcyBwb3Nz
aWJsZSB0aGF0IHdlIGhhdmUgYSBsZWZ0LW92ZXIga1dhaXRpbmdOb3RTIGlmIHRoZSBsYXN0Ci0g
ICAgLy8gdW5sb2NrX3NoYXJlZCgpIHRoYXQgbGV0IG91ciBtYXRjaGluZyBsb2NrKCkgY29tcGxl
dGUgZmluaXNoZWQKLSAgICAvLyByZWxlYXNpbmcgYmVmb3JlIGxvY2soKSdzIGZ1dGV4V2FpdCB3
ZW50IHRvIHNsZWVwLiAgQ2xlYW4gaXQgdXAgbm93Ci0gICAgYXV0byBzdGF0ZSA9IChzdGF0ZV8g
Jj0gfihrV2FpdGluZ05vdFMgfCBrUHJldkRlZmVyIHwga0hhc0UpKTsKLSAgICBhc3NlcnQoKHN0
YXRlICYgfmtXYWl0aW5nQW55KSA9PSAwKTsKLSAgICB3YWtlUmVnaXN0ZXJlZFdhaXRlcnMoc3Rh
dGUsIGtXYWl0aW5nRSB8IGtXYWl0aW5nVSB8IGtXYWl0aW5nUyk7Ci0gIH0KLQotICAvLyBNYW5h
Z2luZyB0aGUgdG9rZW4geW91cnNlbGYgbWFrZXMgdW5sb2NrX3NoYXJlZCBhIGJpdCBmYXN0ZXIK
LQotICB2b2lkIGxvY2tfc2hhcmVkKCkgewotICAgIFdhaXRGb3JldmVyIGN0eDsKLSAgICAodm9p
ZClsb2NrU2hhcmVkSW1wbChudWxscHRyLCBjdHgpOwotICB9Ci0KLSAgdm9pZCBsb2NrX3NoYXJl
ZChUb2tlbiYgdG9rZW4pIHsKLSAgICBXYWl0Rm9yZXZlciBjdHg7Ci0gICAgKHZvaWQpbG9ja1No
YXJlZEltcGwoJnRva2VuLCBjdHgpOwotICB9Ci0KLSAgYm9vbCB0cnlfbG9ja19zaGFyZWQoKSB7
Ci0gICAgV2FpdE5ldmVyIGN0eDsKLSAgICByZXR1cm4gbG9ja1NoYXJlZEltcGwobnVsbHB0ciwg
Y3R4KTsKLSAgfQotCi0gIGJvb2wgdHJ5X2xvY2tfc2hhcmVkKFRva2VuJiB0b2tlbikgewotICAg
IFdhaXROZXZlciBjdHg7Ci0gICAgcmV0dXJuIGxvY2tTaGFyZWRJbXBsKCZ0b2tlbiwgY3R4KTsK
LSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBSZXAsIGNsYXNzIFBlcmlvZD4KLSAgYm9vbCB0cnlf
bG9ja19zaGFyZWRfZm9yKGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4m
IGR1cmF0aW9uKSB7Ci0gICAgV2FpdEZvckR1cmF0aW9uPFJlcCwgUGVyaW9kPiBjdHgoZHVyYXRp
b24pOwotICAgIHJldHVybiBsb2NrU2hhcmVkSW1wbChudWxscHRyLCBjdHgpOwotICB9Ci0KLSAg
dGVtcGxhdGUgPGNsYXNzIFJlcCwgY2xhc3MgUGVyaW9kPgotICBib29sIHRyeV9sb2NrX3NoYXJl
ZF9mb3IoY29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiYgZHVyYXRpb24s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBUb2tlbiYgdG9rZW4pIHsKLSAgICBXYWl0Rm9y
RHVyYXRpb248UmVwLCBQZXJpb2Q+IGN0eChkdXJhdGlvbik7Ci0gICAgcmV0dXJuIGxvY2tTaGFy
ZWRJbXBsKCZ0b2tlbiwgY3R4KTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBDbG9jaywgY2xh
c3MgRHVyYXRpb24+Ci0gIGJvb2wgdHJ5X2xvY2tfc2hhcmVkX3VudGlsKAotICAgICAgY29uc3Qg
c3RkOjpjaHJvbm86OnRpbWVfcG9pbnQ8Q2xvY2ssIER1cmF0aW9uPiYgYWJzRGVhZGxpbmUpIHsK
LSAgICBXYWl0VW50aWxEZWFkbGluZTxDbG9jaywgRHVyYXRpb24+IGN0eHthYnNEZWFkbGluZX07
Ci0gICAgcmV0dXJuIGxvY2tTaGFyZWRJbXBsKG51bGxwdHIsIGN0eCk7Ci0gIH0KLQotICB0ZW1w
bGF0ZSA8Y2xhc3MgQ2xvY2ssIGNsYXNzIER1cmF0aW9uPgotICBib29sIHRyeV9sb2NrX3NoYXJl
ZF91bnRpbCgKLSAgICAgIGNvbnN0IHN0ZDo6Y2hyb25vOjp0aW1lX3BvaW50PENsb2NrLCBEdXJh
dGlvbj4mIGFic0RlYWRsaW5lLAotICAgICAgVG9rZW4mIHRva2VuKSB7Ci0gICAgV2FpdFVudGls
RGVhZGxpbmU8Q2xvY2ssIER1cmF0aW9uPiBjdHh7YWJzRGVhZGxpbmV9OwotICAgIHJldHVybiBs
b2NrU2hhcmVkSW1wbCgmdG9rZW4sIGN0eCk7Ci0gIH0KLQotICB2b2lkIHVubG9ja19zaGFyZWQo
KSB7Ci0gICAgYXV0byBzdGF0ZSA9IHN0YXRlXy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVp
cmUpOwotCi0gICAgLy8ga1ByZXZEZWZlciBjYW4gb25seSBiZSBzZXQgaWYgSGFzRSBvciBCZWd1
bkUgaXMgc2V0Ci0gICAgYXNzZXJ0KChzdGF0ZSAmIChrUHJldkRlZmVyIHwga0hhc0UgfCBrQmVn
dW5FKSkgIT0ga1ByZXZEZWZlcik7Ci0KLSAgICAvLyBsb2NrKCkgc3RyaXBzIGtNYXlEZWZlciBp
bW1lZGlhdGVseSwgYnV0IHRoZW4gY29waWVzIGl0IHRvCi0gICAgLy8ga1ByZXZEZWZlciBzbyB3
ZSBjYW4gdGVsbCBpZiB0aGUgcHJlLWxvY2soKSBsb2NrX3NoYXJlZCgpIG1pZ2h0Ci0gICAgLy8g
aGF2ZSBkZWZlcnJlZAotICAgIGlmICgoc3RhdGUgJiAoa01heURlZmVyIHwga1ByZXZEZWZlcikp
ID09IDAgfHwKLSAgICAgICAgIXRyeVVubG9ja1Rva2VubGVzc1NoYXJlZERlZmVycmVkKCkpIHsK
LSAgICAgIC8vIE1hdGNoaW5nIGxvY2tfc2hhcmVkKCkgY291bGRuJ3QgaGF2ZSBkZWZlcnJlZCwg
b3IgdGhlIGRlZmVycmVkCi0gICAgICAvLyBsb2NrIGhhcyBhbHJlYWR5IGJlZW4gaW5saW5lZCBi
eSBhcHBseURlZmVycmVkUmVhZGVycygpCi0gICAgICB1bmxvY2tTaGFyZWRJbmxpbmUoKTsKLSAg
ICB9Ci0gIH0KLQotICB2b2lkIHVubG9ja19zaGFyZWQoVG9rZW4mIHRva2VuKSB7Ci0gICAgYXNz
ZXJ0KHRva2VuLnR5cGVfID09IFRva2VuOjpUeXBlOjpJTkxJTkVfU0hBUkVEIHx8Ci0gICAgICAg
ICAgIHRva2VuLnR5cGVfID09IFRva2VuOjpUeXBlOjpERUZFUlJFRF9TSEFSRUQpOwotCi0gICAg
aWYgKHRva2VuLnR5cGVfICE9IFRva2VuOjpUeXBlOjpERUZFUlJFRF9TSEFSRUQgfHwKLSAgICAg
ICAgIXRyeVVubG9ja1NoYXJlZERlZmVycmVkKHRva2VuLnNsb3RfKSkgewotICAgICAgdW5sb2Nr
U2hhcmVkSW5saW5lKCk7Ci0gICAgfQotI2lmbmRlZiBOREVCVUcKLSAgICB0b2tlbi50eXBlXyA9
IFRva2VuOjpUeXBlOjpJTlZBTElEOwotI2VuZGlmCi0gIH0KLQotICB2b2lkIHVubG9ja19hbmRf
bG9ja19zaGFyZWQoKSB7Ci0gICAgLy8gV2UgY2FuJ3QgdXNlIHN0YXRlXyAtPSwgYmVjYXVzZSB3
ZSBuZWVkIHRvIGNsZWFyIDIgYml0cyAoMSBvZiB3aGljaAotICAgIC8vIGhhcyBhbiB1bmNlcnRh
aW4gaW5pdGlhbCBzdGF0ZSkgYW5kIHNldCAxIG90aGVyLiAgV2UgbWlnaHQgYXMgd2VsbAotICAg
IC8vIGNsZWFyIHRoZSByZWxldmFudCB3YWtlIGJpdHMgYXQgdGhlIHNhbWUgdGltZS4gIE5vdGUg
dGhhdCBzaW5jZSBTCi0gICAgLy8gZG9lc24ndCBibG9jayB0aGUgYmVnaW5uaW5nIG9mIGEgdHJh
bnNpdGlvbiB0byBFICh3cml0ZXIgcHJpb3JpdHkKLSAgICAvLyBjYW4gY3V0IG9mZiBuZXcgUywg
cmVhZGVyIHByaW9yaXR5IGdyYWJzIEJlZ3VuRSBhbmQgYmxvY2tzIGRlZmVycmVkCi0gICAgLy8g
Uykgd2UgbmVlZCB0byB3YWtlIEUgYXMgd2VsbC4KLSAgICBhdXRvIHN0YXRlID0gc3RhdGVfLmxv
YWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7Ci0gICAgZG8gewotICAgICAgYXNzZXJ0KChz
dGF0ZSAmIH4oa1dhaXRpbmdBbnkgfCBrUHJldkRlZmVyKSkgPT0ga0hhc0UpOwotICAgIH0gd2hp
bGUgKCFzdGF0ZV8uY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoCi0gICAgICAgIHN0YXRlLCAoc3Rh
dGUgJiB+KGtXYWl0aW5nQW55IHwga1ByZXZEZWZlciB8IGtIYXNFKSkgKyBrSW5jckhhc1MpKTsK
LSAgICBpZiAoKHN0YXRlICYgKGtXYWl0aW5nRSB8IGtXYWl0aW5nVSB8IGtXYWl0aW5nUykpICE9
IDApIHsKLSAgICAgIGZ1dGV4V2FrZUFsbChrV2FpdGluZ0UgfCBrV2FpdGluZ1UgfCBrV2FpdGlu
Z1MpOwotICAgIH0KLSAgfQotCi0gIHZvaWQgdW5sb2NrX2FuZF9sb2NrX3NoYXJlZChUb2tlbiYg
dG9rZW4pIHsKLSAgICB1bmxvY2tfYW5kX2xvY2tfc2hhcmVkKCk7Ci0gICAgdG9rZW4udHlwZV8g
PSBUb2tlbjo6VHlwZTo6SU5MSU5FX1NIQVJFRDsKLSAgfQotCi0gIHZvaWQgbG9ja191cGdyYWRl
KCkgewotICAgIFdhaXRGb3JldmVyIGN0eDsKLSAgICAodm9pZClsb2NrVXBncmFkZUltcGwoY3R4
KTsKLSAgfQotCi0gIGJvb2wgdHJ5X2xvY2tfdXBncmFkZSgpIHsKLSAgICBXYWl0TmV2ZXIgY3R4
OwotICAgIHJldHVybiBsb2NrVXBncmFkZUltcGwoY3R4KTsKLSAgfQotCi0gIHRlbXBsYXRlIDxj
bGFzcyBSZXAsIGNsYXNzIFBlcmlvZD4KLSAgYm9vbCB0cnlfbG9ja191cGdyYWRlX2ZvcigKLSAg
ICAgIGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIGR1cmF0aW9uKSB7
Ci0gICAgV2FpdEZvckR1cmF0aW9uPFJlcCwgUGVyaW9kPiBjdHgoZHVyYXRpb24pOwotICAgIHJl
dHVybiBsb2NrVXBncmFkZUltcGwoY3R4KTsKLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBDbG9j
aywgY2xhc3MgRHVyYXRpb24+Ci0gIGJvb2wgdHJ5X2xvY2tfdXBncmFkZV91bnRpbCgKLSAgICAg
IGNvbnN0IHN0ZDo6Y2hyb25vOjp0aW1lX3BvaW50PENsb2NrLCBEdXJhdGlvbj4mIGFic0RlYWRs
aW5lKSB7Ci0gICAgV2FpdFVudGlsRGVhZGxpbmU8Q2xvY2ssIER1cmF0aW9uPiBjdHh7YWJzRGVh
ZGxpbmV9OwotICAgIHJldHVybiBsb2NrVXBncmFkZUltcGwoY3R4KTsKLSAgfQotCi0gIHZvaWQg
dW5sb2NrX3VwZ3JhZGUoKSB7Ci0gICAgYXV0byBzdGF0ZSA9IChzdGF0ZV8gLT0ga0hhc1UpOwot
ICAgIGFzc2VydCgoc3RhdGUgJiAoa1dhaXRpbmdOb3RTIHwga0hhc1NvbG8pKSA9PSAwKTsKLSAg
ICB3YWtlUmVnaXN0ZXJlZFdhaXRlcnMoc3RhdGUsIGtXYWl0aW5nRSB8IGtXYWl0aW5nVSk7Ci0g
IH0KLQotICB2b2lkIHVubG9ja191cGdyYWRlX2FuZF9sb2NrKCkgewotICAgIC8vIG5vIHdhaXRp
bmcgbmVjZXNzYXJ5LCBzbyB3YWl0TWFzayBpcyBlbXB0eQotICAgIFdhaXRGb3JldmVyIGN0eDsK
LSAgICAodm9pZClsb2NrRXhjbHVzaXZlSW1wbCgwLCBjdHgpOwotICB9Ci0KLSAgdm9pZCB1bmxv
Y2tfdXBncmFkZV9hbmRfbG9ja19zaGFyZWQoKSB7Ci0gICAgYXV0byBzdGF0ZSA9IChzdGF0ZV8g
LT0ga0hhc1UgLSBrSW5jckhhc1MpOwotICAgIGFzc2VydCgoc3RhdGUgJiAoa1dhaXRpbmdOb3RT
IHwga0hhc1NvbG8pKSA9PSAwKTsKLSAgICB3YWtlUmVnaXN0ZXJlZFdhaXRlcnMoc3RhdGUsIGtX
YWl0aW5nRSB8IGtXYWl0aW5nVSk7Ci0gIH0KLQotICB2b2lkIHVubG9ja191cGdyYWRlX2FuZF9s
b2NrX3NoYXJlZChUb2tlbiYgdG9rZW4pIHsKLSAgICB1bmxvY2tfdXBncmFkZV9hbmRfbG9ja19z
aGFyZWQoKTsKLSAgICB0b2tlbi50eXBlXyA9IFRva2VuOjpUeXBlOjpJTkxJTkVfU0hBUkVEOwot
ICB9Ci0KLSAgdm9pZCB1bmxvY2tfYW5kX2xvY2tfdXBncmFkZSgpIHsKLSAgICAvLyBXZSBjYW4n
dCB1c2Ugc3RhdGVfIC09LCBiZWNhdXNlIHdlIG5lZWQgdG8gY2xlYXIgMiBiaXRzICgxIG9mCi0g
ICAgLy8gd2hpY2ggaGFzIGFuIHVuY2VydGFpbiBpbml0aWFsIHN0YXRlKSBhbmQgc2V0IDEgb3Ro
ZXIuICBXZSBtaWdodAotICAgIC8vIGFzIHdlbGwgY2xlYXIgdGhlIHJlbGV2YW50IHdha2UgYml0
cyBhdCB0aGUgc2FtZSB0aW1lLgotICAgIGF1dG8gc3RhdGUgPSBzdGF0ZV8ubG9hZChzdGQ6Om1l
bW9yeV9vcmRlcl9hY3F1aXJlKTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgYXNzZXJ0KChz
dGF0ZSAmIH4oa1dhaXRpbmdBbnkgfCBrUHJldkRlZmVyKSkgPT0ga0hhc0UpOwotICAgICAgYXV0
byBhZnRlciA9Ci0gICAgICAgICAgKHN0YXRlICYgfihrV2FpdGluZ05vdFMgfCBrV2FpdGluZ1Mg
fCBrUHJldkRlZmVyIHwga0hhc0UpKSArIGtIYXNVOwotICAgICAgaWYgKHN0YXRlXy5jb21wYXJl
X2V4Y2hhbmdlX3N0cm9uZyhzdGF0ZSwgYWZ0ZXIpKSB7Ci0gICAgICAgIGlmICgoc3RhdGUgJiBr
V2FpdGluZ1MpICE9IDApIHsKLSAgICAgICAgICBmdXRleFdha2VBbGwoa1dhaXRpbmdTKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSBwcml2YXRl
OgotICB0eXBlZGVmIHR5cGVuYW1lIGZvbGx5OjpkZXRhaWw6OkZ1dGV4PEF0b20+IEZ1dGV4Owot
Ci0gIC8vIEludGVybmFsbHkgd2UgdXNlIGZvdXIga2luZHMgb2Ygd2FpdCBjb250ZXh0cy4gIFRo
ZXNlIGFyZSBzdHJ1Y3RzCi0gIC8vIHRoYXQgcHJvdmlkZSBhIGRvV2FpdCBtZXRob2QgdGhhdCBy
ZXR1cm5zIHRydWUgaWYgYSBmdXRleCB3YWtlCi0gIC8vIHdhcyBpc3N1ZWQgdGhhdCBpbnRlcnNl
Y3RzIHdpdGggdGhlIHdhaXRNYXNrLCBmYWxzZSBpZiB0aGVyZSB3YXMgYQotICAvLyB0aW1lb3V0
IGFuZCBubyBtb3JlIHdhaXRpbmcgc2hvdWxkIGJlIHBlcmZvcm1lZC4gIFNwaW5uaW5nIG9jY3Vy
cwotICAvLyBiZWZvcmUgdGhlIHdhaXQgY29udGV4dCBpcyBpbnZva2VkLgotCi0gIHN0cnVjdCBX
YWl0Rm9yZXZlciB7Ci0gICAgYm9vbCBjYW5CbG9jaygpIHsgcmV0dXJuIHRydWU7IH0KLSAgICBi
b29sIGNhblRpbWVPdXQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgc2hvdWxkVGltZU91
dCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBib29sIGRvV2FpdChGdXRleCYgZnV0ZXgsIHVp
bnQzMl90IGV4cGVjdGVkLCB1aW50MzJfdCB3YWl0TWFzaykgewotICAgICAgZnV0ZXguZnV0ZXhX
YWl0KGV4cGVjdGVkLCB3YWl0TWFzayk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH07
Ci0KLSAgc3RydWN0IFdhaXROZXZlciB7Ci0gICAgYm9vbCBjYW5CbG9jaygpIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgYm9vbCBjYW5UaW1lT3V0KCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wg
c2hvdWxkVGltZU91dCgpIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIGJvb2wgZG9XYWl0KEZ1dGV4
JiAvKiBmdXRleCAqLywKLSAgICAgICAgICAgICAgICB1aW50MzJfdCAvKiBleHBlY3RlZCAqLywK
LSAgICAgICAgICAgICAgICB1aW50MzJfdCAvKiB3YWl0TWFzayAqLykgewotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgfTsKLQotICB0ZW1wbGF0ZSA8Y2xhc3MgUmVwLCBjbGFzcyBQZXJp
b2Q+Ci0gIHN0cnVjdCBXYWl0Rm9yRHVyYXRpb24gewotICAgIHN0ZDo6Y2hyb25vOjpkdXJhdGlv
bjxSZXAsIFBlcmlvZD4gZHVyYXRpb25fOwotICAgIGJvb2wgZGVhZGxpbmVDb21wdXRlZF87Ci0g
ICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBkZWFkbGluZV87Ci0KLSAg
ICBleHBsaWNpdCBXYWl0Rm9yRHVyYXRpb24oY29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJl
cCwgUGVyaW9kPiYgZHVyYXRpb24pCi0gICAgICAgIDogZHVyYXRpb25fKGR1cmF0aW9uKSwgZGVh
ZGxpbmVDb21wdXRlZF8oZmFsc2UpIHt9Ci0KLSAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2Nr
Ojp0aW1lX3BvaW50IGRlYWRsaW5lKCkgewotICAgICAgaWYgKCFkZWFkbGluZUNvbXB1dGVkXykg
ewotICAgICAgICBkZWFkbGluZV8gPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSAr
IGR1cmF0aW9uXzsKLSAgICAgICAgZGVhZGxpbmVDb21wdXRlZF8gPSB0cnVlOwotICAgICAgfQot
ICAgICAgcmV0dXJuIGRlYWRsaW5lXzsKLSAgICB9Ci0KLSAgICBib29sIGNhbkJsb2NrKCkgeyBy
ZXR1cm4gZHVyYXRpb25fLmNvdW50KCkgPiAwOyB9Ci0gICAgYm9vbCBjYW5UaW1lT3V0KCkgeyBy
ZXR1cm4gdHJ1ZTsgfQotCi0gICAgYm9vbCBzaG91bGRUaW1lT3V0KCkgewotICAgICAgcmV0dXJu
IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpID4gZGVhZGxpbmUoKTsKLSAgICB9Ci0K
LSAgICBib29sIGRvV2FpdChGdXRleCYgZnV0ZXgsIHVpbnQzMl90IGV4cGVjdGVkLCB1aW50MzJf
dCB3YWl0TWFzaykgewotICAgICAgYXV0byByZXN1bHQgPSBmdXRleC5mdXRleFdhaXRVbnRpbChl
eHBlY3RlZCwgZGVhZGxpbmUoKSwgd2FpdE1hc2spOwotICAgICAgcmV0dXJuIHJlc3VsdCAhPSBm
b2xseTo6ZGV0YWlsOjpGdXRleFJlc3VsdDo6VElNRURPVVQ7Ci0gICAgfQotICB9OwotCi0gIHRl
bXBsYXRlIDxjbGFzcyBDbG9jaywgY2xhc3MgRHVyYXRpb24+Ci0gIHN0cnVjdCBXYWl0VW50aWxE
ZWFkbGluZSB7Ci0gICAgc3RkOjpjaHJvbm86OnRpbWVfcG9pbnQ8Q2xvY2ssIER1cmF0aW9uPiBh
YnNEZWFkbGluZV87Ci0KLSAgICBib29sIGNhbkJsb2NrKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IGJvb2wgY2FuVGltZU91dCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIHNob3VsZFRpbWVP
dXQoKSB7IHJldHVybiBDbG9jazo6bm93KCkgPiBhYnNEZWFkbGluZV87IH0KLQotICAgIGJvb2wg
ZG9XYWl0KEZ1dGV4JiBmdXRleCwgdWludDMyX3QgZXhwZWN0ZWQsIHVpbnQzMl90IHdhaXRNYXNr
KSB7Ci0gICAgICBhdXRvIHJlc3VsdCA9IGZ1dGV4LmZ1dGV4V2FpdFVudGlsKGV4cGVjdGVkLCBh
YnNEZWFkbGluZV8sIHdhaXRNYXNrKTsKLSAgICAgIHJldHVybiByZXN1bHQgIT0gZm9sbHk6OmRl
dGFpbDo6RnV0ZXhSZXN1bHQ6OlRJTUVET1VUOwotICAgIH0KLSAgfTsKLQotICAvLyAzMiBiaXRz
IG9mIHN0YXRlCi0gIEZ1dGV4IHN0YXRlXzsKLQotICAvLyBTIGNvdW50IG5lZWRzIHRvIGJlIG9u
IHRoZSBlbmQsIGJlY2F1c2Ugd2UgZXhwbGljaXRseSBhbGxvdyBpdCB0bwotICAvLyB1bmRlcmZs
b3cuICBUaGlzIGNhbiBvY2N1ciB3aGlsZSB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhcHBseWlu
ZwotICAvLyBkZWZlcnJlZCBsb2NrcyAod2UgcmVtb3ZlIHRoZW0gZnJvbSBkZWZlcnJlZFJlYWRl
cnNbXSBiZWZvcmUKLSAgLy8gaW5saW5pbmcgdGhlbSksIG9yIGR1cmluZyB0b2tlbi1sZXNzIHVu
bG9ja19zaGFyZWQoKSBpZiBhIHJhY2luZwotICAvLyBsb2NrX3NoYXJlZCgpO3VubG9ja19zaGFy
ZWQoKSBtb3ZlcyB0aGUgZGVmZXJyZWRSZWFkZXJzIHNsb3Qgd2hpbGUKLSAgLy8gdGhlIGZpcnN0
IHVubG9ja19zaGFyZWQoKSBpcyBzY2FubmluZy4gIFRoZSBmb3JtZXIgY2FzZSBpcyBjbGVhbmVk
Ci0gIC8vIHVwIGJlZm9yZSB3ZSBmaW5pc2ggYXBwbHlpbmcgdGhlIGxvY2tzLiAgVGhlIGxhdHRl
ciBjYXNlIGNhbiBwZXJzaXN0Ci0gIC8vIHVudGlsIGRlc3RydWN0aW9uLCB3aGVuIGl0IGlzIGNs
ZWFuZWQgdXAuCi0gIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qga0luY3JIYXNTID0gMSA8PCAx
MDsKLSAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrSGFzUyA9IH4oa0luY3JIYXNTIC0gMSk7
Ci0KLSAgLy8gSWYgZmFsc2UsIHRoZW4gdGhlcmUgYXJlIGRlZmluaXRlbHkgbm8gZGVmZXJyZWQg
cmVhZCBsb2NrcyBmb3IgdGhpcwotICAvLyBpbnN0YW5jZS4gIENsZWFyZWQgYWZ0ZXIgaW5pdGlh
bGl6YXRpb24gYW5kIHdoZW4gZXhjbHVzaXZlbHkgbG9ja2VkLgotICBzdGF0aWMgY29uc3RleHBy
IHVpbnQzMl90IGtNYXlEZWZlciA9IDEgPDwgOTsKLQotICAvLyBsb2NrKCkgY2xlYXJlZCBrTWF5
RGVmZXIgYXMgc29vbiBhcyBpdCBzdGFydHMgZHJhaW5pbmcgcmVhZGVycyAoc28KLSAgLy8gdGhh
dCBpdCBkb2Vzbid0IGhhdmUgdG8gZG8gYSBzZWNvbmQgQ0FTIG9uY2UgZHJhaW4gY29tcGxldGVz
KSwgYnV0Ci0gIC8vIHVubG9ja19zaGFyZWQoKSBzdGlsbCBuZWVkcyB0byBrbm93IHdoZXRoZXIg
dG8gc2NhbiBkZWZlcnJlZFJlYWRlcnNbXQotICAvLyBvciBub3QuICBXZSBjb3B5IGtNYXlEZWZl
ciB0byBrUHJldkRlZmVyIHdoZW4gc2V0dGluZyBrSGFzRSBvcgotICAvLyBrQmVndW5FLCBhbmQg
Y2xlYXIgaXQgd2hlbiBjbGVhcmluZyB0aG9zZSBiaXRzLgotICBzdGF0aWMgY29uc3RleHByIHVp
bnQzMl90IGtQcmV2RGVmZXIgPSAxIDw8IDg7Ci0KLSAgLy8gRXhjbHVzaXZlLWxvY2tlZCBibG9j
a3MgYWxsIHJlYWQgbG9ja3MgYW5kIHdyaXRlIGxvY2tzLiAgVGhpcyBiaXQKLSAgLy8gbWF5IGJl
IHNldCBiZWZvcmUgYWxsIHJlYWRlcnMgaGF2ZSBmaW5pc2hlZCwgYnV0IGluIHRoYXQgY2FzZSB0
aGUKLSAgLy8gdGhyZWFkIHRoYXQgc2V0cyBpdCB3b24ndCByZXR1cm4gdG8gdGhlIGNhbGxlciB1
bnRpbCBhbGwgcmVhZCBsb2NrcwotICAvLyBoYXZlIGJlZW4gcmVsZWFzZWQuCi0gIHN0YXRpYyBj
b25zdGV4cHIgdWludDMyX3Qga0hhc0UgPSAxIDw8IDc7Ci0KLSAgLy8gRXhjbHVzaXZlLWRyYWlu
aW5nIG1lYW5zIHRoYXQgbG9jaygpIGlzIHdhaXRpbmcgZm9yIGV4aXN0aW5nIHJlYWRlcnMKLSAg
Ly8gdG8gbGVhdmUsIGJ1dCB0aGF0IG5ldyByZWFkZXJzIG1heSBzdGlsbCBhY3F1aXJlIHNoYXJl
ZCBhY2Nlc3MuCi0gIC8vIFRoaXMgaXMgb25seSB1c2VkIGluIHJlYWRlciBwcmlvcml0eSBtb2Rl
LiAgTmV3IHJlYWRlcnMgZHVyaW5nCi0gIC8vIGRyYWluIG11c3QgYmUgaW5saW5lLiAgVGhlIGRp
ZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGFuZCBrSGFzVSBpcyB0aGF0Ci0gIC8vIGtCZWd1bkUgcHJl
dmVudHMga01heURlZmVyIGZyb20gYmVpbmcgc2V0LgotICBzdGF0aWMgY29uc3RleHByIHVpbnQz
Ml90IGtCZWd1bkUgPSAxIDw8IDY7Ci0KLSAgLy8gQXQgbW9zdCBvbmUgdGhyZWFkIG1heSBoYXZl
IGVpdGhlciBleGNsdXNpdmUgb3IgdXBncmFkZSBsb2NrCi0gIC8vIG93bmVyc2hpcC4gIFVubGlr
ZSBleGNsdXNpdmUgbW9kZSwgb3duZXJzaGlwIG9mIHRoZSBsb2NrIGluIHVwZ3JhZGUKLSAgLy8g
bW9kZSBkb2Vzbid0IHByZWNsdWRlIG90aGVyIHRocmVhZHMgaG9sZGluZyB0aGUgbG9jayBpbiBz
aGFyZWQgbW9kZS4KLSAgLy8gYm9vc3QncyBjb25jZXB0IGZvciB0aGlzIGRvZXNuJ3QgZXhwbGlj
aXRseSBzYXkgd2hldGhlciBuZXcgc2hhcmVkCi0gIC8vIGxvY2tzIGNhbiBiZSBhY3F1aXJlZCBv
bmUgbG9ja191cGdyYWRlIGhhcyBzdWNjZWVkZWQsIGJ1dCBkb2Vzbid0Ci0gIC8vIGxpc3QgdGhh
dCBhcyBkaXNhbGxvd2VkLiAgUldTcGluTG9jayBkaXNhbGxvd3MgbmV3IHJlYWQgbG9ja3MgYWZ0
ZXIKLSAgLy8gbG9ja191cGdyYWRlIGhhcyBiZWVuIGFjcXVpcmVkLCBidXQgdGhlIGJvb3N0IGlt
cGxlbWVudGF0aW9uIGRvZXNuJ3QuCi0gIC8vIFdlIGNob29zZSB0aGUgbGF0dGVyLgotICBzdGF0
aWMgY29uc3RleHByIHVpbnQzMl90IGtIYXNVID0gMSA8PCA1OwotCi0gIC8vIFRoZXJlIGFyZSB0
aHJlZSBzdGF0ZXMgdGhhdCB3ZSBjb25zaWRlciB0byBiZSAic29sbyIsIGluIHRoYXQgdGhleQot
ICAvLyBjYW5ub3QgY29leGlzdCB3aXRoIG90aGVyIHNvbG8gc3RhdGVzLiAgVGhlc2UgYXJlIGtI
YXNFLCBrQmVndW5FLAotICAvLyBhbmQga0hhc1UuICBOb3RlIHRoYXQgUyBkb2Vzbid0IGNvbmZs
aWN0IHdpdGggYW55IG9mIHRoZXNlLCBiZWNhdXNlCi0gIC8vIHNldHRpbmcgdGhlIGtIYXNFIGlz
IG9ubHkgb25lIG9mIHRoZSB0d28gc3RlcHMgbmVlZGVkIHRvIGFjdHVhbGx5Ci0gIC8vIGFjcXVp
cmUgdGhlIGxvY2sgaW4gZXhjbHVzaXZlIG1vZGUgKHRoZSBvdGhlciBpcyBkcmFpbmluZyB0aGUg
ZXhpc3RpbmcKLSAgLy8gUyBob2xkZXJzKS4KLSAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBr
SGFzU29sbyA9IGtIYXNFIHwga0JlZ3VuRSB8IGtIYXNVOwotCi0gIC8vIE9uY2UgYSB0aHJlYWQg
c2V0cyBrSGFzRSBpdCBuZWVkcyB0byB3YWl0IGZvciB0aGUgY3VycmVudCByZWFkZXJzCi0gIC8v
IHRvIGV4aXQgdGhlIGxvY2suICBXZSBnaXZlIHRoaXMgYSBzZXBhcmF0ZSB3YWl0IGlkZW50aXR5
IGZyb20gdGhlCi0gIC8vIHdhaXRpbmcgdG8gc2V0IGtIYXNFIHNvIHRoYXQgd2UgY2FuIHBlcmZv
cm0gcGFydGlhbCB3YWtldXBzICh3YWtlCi0gIC8vIG9uZSBpbnN0ZWFkIG9mIHdha2UgYWxsKS4K
LSAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrV2FpdGluZ05vdFMgPSAxIDw8IDQ7Ci0KLSAg
Ly8gV2hlbiB3YWtpbmcgd3JpdGVycyB3ZSBjYW4gZWl0aGVyIHdha2UgdGhlbSBhbGwsIGluIHdo
aWNoIGNhc2Ugd2UKLSAgLy8gY2FuIGNsZWFyIGtXYWl0aW5nRSwgb3Igd2UgY2FuIGNhbGwgZnV0
ZXhXYWtlKDEpLiAgZnV0ZXhXYWtlIHRlbGxzCi0gIC8vIHVzIGlmIGFueWJvZHkgd29rZSB1cCwg
YnV0IGV2ZW4gaWYgd2UgZGV0ZWN0IHRoYXQgbm9ib2R5IHdva2UgdXAgd2UKLSAgLy8gY2FuJ3Qg
Y2xlYXIgdGhlIGJpdCBhZnRlciB0aGUgZmFjdCB3aXRob3V0IGlzc3VpbmcgYW5vdGhlciB3YWtl
dXAuCi0gIC8vIFRvIGF2b2lkIHRodW5kZXJpbmcgaGVyZHMgd2hlbiB0aGVyZSBhcmUgbG90cyBv
ZiBwZW5kaW5nIGxvY2soKQotICAvLyB3aXRob3V0IG5lZWRpbmcgdG8gY2FsbCBmdXRleFdha2Ug
dHdpY2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZQotICAvLyB3YWl0ZXIsIGtXYWl0aW5nRSBhY3R1
YWxseSBlbmNvZGVzIGlmIHdlIGhhdmUgb2JzZXJ2ZWQgbXVsdGlwbGUKLSAgLy8gY29uY3VycmVu
dCB3YWl0ZXJzLiAgVHJpY2t5OiBBQkEgaXNzdWVzIG9uIGZ1dGV4V2FpdCBtZWFuIHRoYXQgd2hl
bgotICAvLyB3ZSBzZWUga1dhaXRpbmdFU2luZ2xlIHdlIGNhbid0IGFzc3VtZSB0aGF0IHRoZXJl
IGlzIG9ubHkgb25lLgotICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtXYWl0aW5nRVNpbmds
ZSA9IDEgPDwgMjsKLSAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrV2FpdGluZ0VNdWx0aXBs
ZSA9IDEgPDwgMzsKLSAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrV2FpdGluZ0UgPSBrV2Fp
dGluZ0VTaW5nbGUgfCBrV2FpdGluZ0VNdWx0aXBsZTsKLQotICAvLyBrV2FpdGluZ1UgaXMgZXNz
ZW50aWFsbHkgYSAxIGJpdCBzYXR1cmF0aW5nIGNvdW50ZXIuICBJdCBhbHdheXMKLSAgLy8gcmVx
dWlyZXMgYSB3YWtlQWxsLgotICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IGtXYWl0aW5nVSA9
IDEgPDwgMTsKLQotICAvLyBBbGwgYmxvY2tlZCBsb2NrX3NoYXJlZCgpIHNob3VsZCBiZSBhd29r
ZW4sIHNvIGl0IGlzIGNvcnJlY3QgKG5vdAotICAvLyBzdWJvcHRpbWFsKSB0byB3YWtlQWxsIGlm
IHRoZXJlIGFyZSBhbnkgc2hhcmVkIHJlYWRlcnMuCi0gIHN0YXRpYyBjb25zdGV4cHIgdWludDMy
X3Qga1dhaXRpbmdTID0gMSA8PCAwOwotCi0gIC8vIGtXYWl0aW5nQW55IGlzIGEgbWFzayBvZiBh
bGwgb2YgdGhlIGJpdHMgdGhhdCByZWNvcmQgdGhlIHN0YXRlIG9mCi0gIC8vIHRocmVhZHMsIHJh
dGhlciB0aGFuIHRoZSBzdGF0ZSBvZiB0aGUgbG9jay4gIEl0IGlzIGNvbnZlbmllbnQgdG8gYmUK
LSAgLy8gYWJsZSB0byBtYXNrIHRoZW0gb2ZmIGR1cmluZyBhc3NlcnRzLgotICBzdGF0aWMgY29u
c3RleHByIHVpbnQzMl90IGtXYWl0aW5nQW55ID0KLSAgICAgIGtXYWl0aW5nTm90UyB8IGtXYWl0
aW5nRSB8IGtXYWl0aW5nVSB8IGtXYWl0aW5nUzsKLQotICAvLyBUaGUgcmVhZGVyIGNvdW50IGF0
IHdoaWNoIGEgcmVhZGVyIHdpbGwgYXR0ZW1wdCB0byB1c2UgdGhlIGxvY2sKLSAgLy8gaW4gZGVm
ZXJyZWQgbW9kZS4gIElmIHRoaXMgdmFsdWUgaXMgMiwgdGhlbiB0aGUgc2Vjb25kIGNvbmN1cnJl
bnQKLSAgLy8gcmVhZGVyIHdpbGwgc2V0IGtNYXlEZWZlciBhbmQgdXNlIGRlZmVycmVkUmVhZGVy
c1tdLiAga01heURlZmVyIGlzCi0gIC8vIGNsZWFyZWQgZHVyaW5nIGV4Y2x1c2l2ZSBhY2Nlc3Ms
IHNvIHRoaXMgdGhyZXNob2xkIG11c3QgYmUgcmVhY2hlZAotICAvLyBlYWNoIHRpbWUgYSBsb2Nr
IGlzIGhlbGQgaW4gZXhjbHVzaXZlIG1vZGUuCi0gIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qg
a051bVNoYXJlZFRvU3RhcnREZWZlcnJpbmcgPSAyOwotCi0gIC8vIFRoZSB0eXBpY2FsIG51bWJl
ciBvZiBzcGlucyB0aGF0IGEgdGhyZWFkIHdpbGwgd2FpdCBmb3IgYSBzdGF0ZQotICAvLyB0cmFu
c2l0aW9uLiAgVGhlcmUgaXMgbm8gYm91bmQgb24gdGhlIG51bWJlciBvZiB0aHJlYWRzIHRoYXQg
Y2FuIHdhaXQKLSAgLy8gZm9yIGEgd3JpdGVyLCBzbyB3ZSBhcmUgcHJldHR5IGNvbnNlcnZhdGl2
ZSBoZXJlIHRvIGxpbWl0IHRoZSBjaGFuY2UKLSAgLy8gdGhhdCB3ZSBhcmUgc3RhcnZpbmcgdGhl
IHdyaXRlciBvZiBDUFUuICBFYWNoIHNwaW4gaXMgNiBvciA3IG5hbm9zLAotICAvLyBhbG1vc3Qg
YWxsIG9mIHdoaWNoIGlzIGluIHRoZSBwYXVzZSBpbnN0cnVjdGlvbi4KLSAgc3RhdGljIGNvbnN0
ZXhwciB1aW50MzJfdCBrTWF4U3BpbkNvdW50ID0gIUJsb2NrSW1tZWRpYXRlbHkgPyAxMDAwIDog
MjsKLQotICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc29mdCB5aWVsZHMgYmVmb3JlIGZhbGxp
bmcgYmFjayB0byBmdXRleC4KLSAgLy8gSWYgdGhlIHByZWVtcHRpb24gaGV1cmlzdGljIGlzIGFj
dGl2YXRlZCB3ZSB3aWxsIGZhbGwgYmFjayBiZWZvcmUKLSAgLy8gdGhpcy4gIEEgc29mdCB5aWVs
ZCB0YWtlcyB+OTAwIG5hbm9zICh0d28gc2NoZWRfeWllbGQgcGx1cyBhIGNhbGwKLSAgLy8gdG8g
Z2V0cnVzYWdlLCB3aXRoIGNoZWNrcyBvZiB0aGUgZ29hbCBhdCBlYWNoIHN0ZXApLiAgU29mdCB5
aWVsZHMKLSAgLy8gYXJlbid0IGNvbXBhdGlibGUgd2l0aCBkZXRlcm1pbmlzdGljIGV4ZWN1dGlv
biB1bmRlciB0ZXN0ICh1bmxpa2UKLSAgLy8gZnV0ZXhXYWl0VW50aWwsIHdoaWNoIGhhcyBhIGNh
cHJpY2lvdXMgYnV0IGRldGVybWluaXN0aWMgYmFjayBlbmQpLgotICBzdGF0aWMgY29uc3RleHBy
IHVpbnQzMl90IGtNYXhTb2Z0WWllbGRDb3VudCA9ICFCbG9ja0ltbWVkaWF0ZWx5ID8gMTAwMCA6
IDA7Ci0KLSAgLy8gSWYgQWNjZXNzU3ByZWFkZXIgYXNzaWducyBpbmRleGVzIGZyb20gMC4uaypu
LTEgb24gYSBzeXN0ZW0gd2hlcmUgc29tZQotICAvLyBsZXZlbCBvZiB0aGUgbWVtb3J5IGhpZXJh
cmNoeSBpcyBzeW1tZXRyaWNhbGx5IGRpdmlkZWQgaW50byBrIHBpZWNlcwotICAvLyAoTlVNQSBu
b2RlcywgbGFzdC1sZXZlbCBjYWNoZXMsIEwxIGNhY2hlcywgLi4uKSwgdGhlbiBzbG90IGluZGV4
ZXMKLSAgLy8gdGhhdCBhcmUgdGhlIHNhbWUgYWZ0ZXIgaW50ZWdlciBkaXZpc2lvbiBieSBrIHNo
YXJlIHRoYXQgcmVzb3VyY2UuCi0gIC8vIE91ciBzdHJhdGVneSBmb3IgZGVmZXJyZWQgcmVhZGVy
cyBpcyB0byBwcm9iZSB1cCB0byBudW1TbG90cy80IHNsb3RzLAotICAvLyB1c2luZyB0aGUgZnVs
bCBncmFudWxhcml0eSBvZiBBY2Nlc3NTcHJlYWRlciBmb3IgdGhlIHN0YXJ0IHNsb3QKLSAgLy8g
YW5kIHRoZW4gc2VhcmNoIG91dHdhcmQuICBXZSBjYW4gdXNlIEFjY2Vzc1NwcmVhZGVyOjpjdXJy
ZW50KG4pCi0gIC8vIHdpdGhvdXQgbWFuYWdpbmcgb3VyIG93biBzcHJlYWRlciBpZiBrTWF4RGVm
ZXJyZWRSZWFkZXJzIDw9Ci0gIC8vIEFjY2Vzc1NwcmVhZGVyOjprTWF4Q3B1cywgd2hpY2ggaXMg
Y3VycmVudGx5IDEyOC4KLSAgLy8KLSAgLy8gT3VyIDItc29ja2V0IEU1LTI2NjAgbWFjaGluZXMg
aGF2ZSA4IEwxIGNhY2hlcyBvbiBlYWNoIGNoaXAsCi0gIC8vIHdpdGggNjQgYnl0ZSBjYWNoZSBs
aW5lcy4gIFRoYXQgbWVhbnMgd2UgbmVlZCA2NCoxNiBieXRlcyBvZgotICAvLyBkZWZlcnJlZFJl
YWRlcnNbXSB0byBnaXZlIGVhY2ggTDEgaXRzIG93biBwbGF5Z3JvdW5kLiAgT24geDg2XzY0Ci0g
IC8vIGVhY2ggRGVmZXJyZWRSZWFkZXJTbG90IGlzIDggYnl0ZXMsIHNvIHdlIG5lZWQga01heERl
ZmVycmVkUmVhZGVycwotICAvLyAqIGtEZWZlcnJlZFNlcGFyYXRpb25GYWN0b3IgPj0gNjQgKiAx
NiAvIDggPT0gMTI4LiAgSWYKLSAgLy8ga0RlZmVycmVkU2VhcmNoRGlzdGFuY2UgKiBrRGVmZXJy
ZWRTZXBhcmF0aW9uRmFjdG9yIDw9Ci0gIC8vIDY0IC8gOCB0aGVuIHdlIHdpbGwgc2VhcmNoIG9u
bHkgd2l0aGluIGEgc2luZ2xlIGNhY2hlIGxpbmUsIHdoaWNoCi0gIC8vIGd1YXJhbnRlZXMgd2Ug
d29uJ3QgaGF2ZSBpbnRlci1MMSBjb250ZW50aW9uLiAgV2UgZ2l2ZSBvdXJzZWx2ZXMKLSAgLy8g
YSBmYWN0b3Igb2YgMiBvbiB0aGUgY29yZSBjb3VudCwgd2hpY2ggc2hvdWxkIGhvbGQgdXMgZm9y
IGEgY291cGxlCi0gIC8vIHByb2Nlc3NvciBnZW5lcmF0aW9ucy4gIGRlZmVycmVkUmVhZGVyc1td
IGlzIDIwNDggYnl0ZXMgY3VycmVudGx5LgotIHB1YmxpYzoKLSAgc3RhdGljIGNvbnN0ZXhwciB1
aW50MzJfdCBrTWF4RGVmZXJyZWRSZWFkZXJzID0gNjQ7Ci0gIHN0YXRpYyBjb25zdGV4cHIgdWlu
dDMyX3Qga0RlZmVycmVkU2VhcmNoRGlzdGFuY2UgPSAyOwotICBzdGF0aWMgY29uc3RleHByIHVp
bnQzMl90IGtEZWZlcnJlZFNlcGFyYXRpb25GYWN0b3IgPSA0OwotCi0gcHJpdmF0ZToKLQotICBz
dGF0aWNfYXNzZXJ0KCEoa01heERlZmVycmVkUmVhZGVycyAmIChrTWF4RGVmZXJyZWRSZWFkZXJz
IC0gMSkpLAotICAgICAgICAgICAgICAgICJrTWF4RGVmZXJyZWRSZWFkZXJzIG11c3QgYmUgYSBw
b3dlciBvZiAyIik7Ci0gIHN0YXRpY19hc3NlcnQoIShrRGVmZXJyZWRTZWFyY2hEaXN0YW5jZSAm
IChrRGVmZXJyZWRTZWFyY2hEaXN0YW5jZSAtIDEpKSwKLSAgICAgICAgICAgICAgICAia0RlZmVy
cmVkU2VhcmNoRGlzdGFuY2UgbXVzdCBiZSBhIHBvd2VyIG9mIDIiKTsKLQotICAvLyBUaGUgbnVt
YmVyIG9mIGRlZmVycmVkIGxvY2tzIHRoYXQgY2FuIGJlIHNpbXVsdGFuZW91c2x5IGFjcXVpcmVk
Ci0gIC8vIGJ5IGEgdGhyZWFkIHZpYSB0aGUgdG9rZW4tbGVzcyBtZXRob2RzIHdpdGhvdXQgcGVy
Zm9ybWluZyBhbnkgaGVhcAotICAvLyBhbGxvY2F0aW9ucy4gIEVhY2ggb2YgdGhlc2UgY29zdHMg
MyBwb2ludGVycyAoMjQgYnl0ZXMsIHByb2JhYmx5KQotICAvLyBwZXIgdGhyZWFkLiAgVGhlcmUn
cyBub3QgbXVjaCBwb2ludCBpbiBtYWtpbmcgdGhpcyBsYXJnZXIgdGhhbgotICAvLyBrRGVmZXJy
ZWRTZWFyY2hEaXN0YW5jZS4KLSAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBrVG9rZW5TdGFj
a1RMU0NhcGFjaXR5ID0gMjsKLQotICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGlmIHRo
ZXJlIGlzIGEgbG9ja19zaGFyZWQoKQotICAvLyBhbmQgbG9ja19zaGFyZWQodG9rZW4pIGZvbGxv
d2VkIGJ5IHVubG9ja19zaGFyZWQoKSBhbmQKLSAgLy8gdW5sb2NrX3NoYXJlZCh0b2tlbiksIHRo
ZSB0b2tlbi1sZXNzIHVubG9jayBkb2Vzbid0IG51bGwKLSAgLy8gb3V0IGRlZmVycmVkUmVhZGVy
c1t0b2tlbi5zbG90X10uICBJZiB3ZSBhbGxvd2VkIHRoYXQsIHRoZW4KLSAgLy8gdW5sb2NrX3No
YXJlZCh0b2tlbikgd291bGRuJ3QgYmUgYWJsZSB0byBhc3N1bWUgdGhhdCBpdHMgbG9jawotICAv
LyBoYWQgYmVlbiBpbmxpbmVkIGJ5IGFwcGx5RGVmZXJyZWRSZWFkZXJzIHdoZW4gaXQgZmluZHMg
dGhhdAotICAvLyBkZWZlcnJlZFJlYWRlcnNbdG9rZW4uc2xvdF9dIG5vIGxvbmdlciBwb2ludHMg
dG8gdGhpcy4gIFdlIGFjY29tcGxpc2gKLSAgLy8gdGhpcyBieSBzdGVhbGluZyBiaXQgMCBmcm9t
IHRoZSBwb2ludGVyIHRvIHJlY29yZCB0aGF0IHRoZSBzbG90J3MKLSAgLy8gZWxlbWVudCBoYXMg
bm8gdG9rZW4sIGhlbmNlIG91ciB1c2Ugb2YgdWludHB0cl90IGluIGRlZmVycmVkUmVhZGVyc1td
LgotICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBrVG9rZW5sZXNzID0gMHgxOwotCi0gIC8v
IFRoaXMgaXMgdGhlIHN0YXJ0aW5nIGxvY2F0aW9uIGZvciBUb2tlbi1sZXNzIHVubG9ja19zaGFy
ZWQoKS4KLSAgc3RhdGljIEZPTExZX1NIQVJFRE1VVEVYX1RMUyB1aW50MzJfdCB0bHNfbGFzdFRv
a2VubGVzc1Nsb3Q7Ci0KLSAgLy8gTGFzdCBkZWZlcnJlZCByZWFkZXIgc2xvdCB1c2VkLgotICBz
dGF0aWMgRk9MTFlfU0hBUkVETVVURVhfVExTIHVpbnQzMl90IHRsc19sYXN0RGVmZXJyZWRSZWFk
ZXJTbG90OwotCi0KLSAgLy8gT25seSBpbmRleGVzIGRpdmlzaWJsZSBieSBrRGVmZXJyZWRTZXBh
cmF0aW9uRmFjdG9yIGFyZSB1c2VkLgotICAvLyBJZiBhbnkgb2YgdGhvc2UgZWxlbWVudHMgcG9p
bnRzIHRvIGEgU2hhcmVkTXV0ZXhJbXBsLCB0aGVuIGl0Ci0gIC8vIHNob3VsZCBiZSBjb25zaWRl
cmVkIHRoYXQgdGhlcmUgaXMgYSBzaGFyZWQgbG9jayBvbiB0aGF0IGluc3RhbmNlLgotICAvLyBT
ZWUga1Rva2VubGVzcy4KLSBwdWJsaWM6Ci0gIHR5cGVkZWYgQXRvbTx1aW50cHRyX3Q+IERlZmVy
cmVkUmVhZGVyU2xvdDsKLQotIHByaXZhdGU6Ci0gIEZPTExZX0FMSUdOX1RPX0FWT0lEX0ZBTFNF
X1NIQVJJTkcgc3RhdGljIERlZmVycmVkUmVhZGVyU2xvdCBkZWZlcnJlZFJlYWRlcnMKLSAgICAg
IFtrTWF4RGVmZXJyZWRSZWFkZXJzICoKLSAgICAgICBrRGVmZXJyZWRTZXBhcmF0aW9uRmFjdG9y
XTsKLQotICAvLyBQZXJmb3JtcyBhbiBleGNsdXNpdmUgbG9jaywgd2FpdGluZyBmb3Igc3RhdGVf
ICYgd2FpdE1hc2sgdG8gYmUKLSAgLy8gemVybyBmaXJzdAotICB0ZW1wbGF0ZSA8Y2xhc3MgV2Fp
dENvbnRleHQ+Ci0gIGJvb2wgbG9ja0V4Y2x1c2l2ZUltcGwodWludDMyX3QgcHJlY29uZGl0aW9u
R29hbE1hc2ssIFdhaXRDb250ZXh0JiBjdHgpIHsKLSAgICB1aW50MzJfdCBzdGF0ZSA9IHN0YXRl
Xy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwotICAgIGlmIChMSUtFTFkoCi0gICAg
ICAgICAgICAoc3RhdGUgJiAocHJlY29uZGl0aW9uR29hbE1hc2sgfCBrTWF5RGVmZXIgfCBrSGFz
UykpID09IDAgJiYKLSAgICAgICAgICAgIHN0YXRlXy5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhz
dGF0ZSwgKHN0YXRlIHwga0hhc0UpICYgfmtIYXNVKSkpIHsKLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gbG9ja0V4Y2x1c2l2ZUltcGwoc3RhdGUsIHByZWNv
bmRpdGlvbkdvYWxNYXNrLCBjdHgpOwotICAgIH0KLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBX
YWl0Q29udGV4dD4KLSAgYm9vbCBsb2NrRXhjbHVzaXZlSW1wbCh1aW50MzJfdCYgc3RhdGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcHJlY29uZGl0aW9uR29hbE1hc2ssCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgV2FpdENvbnRleHQmIGN0eCkgewotICAgIHdoaWxlICh0
cnVlKSB7Ci0gICAgICBpZiAoVU5MSUtFTFkoKHN0YXRlICYgcHJlY29uZGl0aW9uR29hbE1hc2sp
ICE9IDApICYmCi0gICAgICAgICAgIXdhaXRGb3JaZXJvQml0cyhzdGF0ZSwgcHJlY29uZGl0aW9u
R29hbE1hc2ssIGtXYWl0aW5nRSwgY3R4KSAmJgotICAgICAgICAgIGN0eC5jYW5UaW1lT3V0KCkp
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICB1aW50MzJfdCBhZnRl
ciA9IChzdGF0ZSAmIGtNYXlEZWZlcikgPT0gMCA/IDAgOiBrUHJldkRlZmVyOwotICAgICAgaWYg
KCFrUmVhZGVyUHJpb3JpdHkgfHwgKHN0YXRlICYgKGtNYXlEZWZlciB8IGtIYXNTKSkgPT0gMCkg
ewotICAgICAgICAvLyBCbG9jayByZWFkZXJzIGltbWVkaWF0ZWx5LCBlaXRoZXIgYmVjYXVzZSB3
ZSBhcmUgaW4gd3JpdGUKLSAgICAgICAgLy8gcHJpb3JpdHkgbW9kZSBvciBiZWNhdXNlIHdlIGNh
biBhY3F1aXJlIHRoZSBsb2NrIGluIG9uZQotICAgICAgICAvLyBzdGVwLiAgTm90ZSB0aGF0IGlm
IHN0YXRlIGhhcyBrSGFzVSwgdGhlbiB3ZSBhcmUgZG9pbmcgYW4KLSAgICAgICAgLy8gdW5sb2Nr
X3VwZ3JhZGVfYW5kX2xvY2soKSBhbmQgd2Ugc2hvdWxkIGNsZWFyIGl0IChyZWFkZXIKLSAgICAg
ICAgLy8gcHJpb3JpdHkgYnJhbmNoIGFsc28gZG9lcyB0aGlzKS4KLSAgICAgICAgYWZ0ZXIgfD0g
KHN0YXRlIHwga0hhc0UpICYgfihrSGFzVSB8IGtNYXlEZWZlcik7Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICBhZnRlciB8PSAoc3RhdGUgfCBrQmVndW5FKSAmIH4oa0hhc1UgfCBrTWF5RGVmZXIp
OwotICAgICAgfQotICAgICAgaWYgKHN0YXRlXy5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhzdGF0
ZSwgYWZ0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYmVmb3JlID0gc3RhdGU7Ci0gICAgICAgIHN0YXRl
ID0gYWZ0ZXI7Ci0KLSAgICAgICAgLy8gSWYgd2Ugc2V0IGtIYXNFICh3cml0ZXIgcHJpb3JpdHkp
IHRoZW4gbm8gbmV3IHJlYWRlcnMgY2FuCi0gICAgICAgIC8vIGFycml2ZS4gIElmIHdlIHNldCBr
QmVndW5FIHRoZW4gdGhleSBjYW4gc3RpbGwgZW50ZXIsIGJ1dAotICAgICAgICAvLyB0aGV5IG11
c3QgYmUgaW5saW5lLiAgRWl0aGVyIHdheSB3ZSBuZWVkIHRvIGVpdGhlciBzcGluIG9uCi0gICAg
ICAgIC8vIGRlZmVycmVkUmVhZGVyc1tdIHNsb3RzLCBvciBpbmxpbmUgdGhlbSBzbyB0aGF0IHdl
IGNhbiB3YWl0IG9uCi0gICAgICAgIC8vIGtIYXNTIHRvIHplcm8gaXRzZWxmLiAgZGVmZXJyZWRS
ZWFkZXJzW10gaXMgcG9pbnRlcnMsIHdoaWNoIG9uCi0gICAgICAgIC8vIHg4Nl82NCBhcmUgYmln
Z2VyIHRoYW4gZnV0ZXgoKSBjYW4gaGFuZGxlLCBzbyB3ZSBpbmxpbmUgdGhlCi0gICAgICAgIC8v
IGRlZmVycmVkIGxvY2tzIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGZ1dGV4V2FpdCBvbiBlYWNoIHNs
b3QuCi0gICAgICAgIC8vIFJlYWRlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciByZWNoZWNraW5nIHN0
YXRlXyBhZnRlciByZWNvcmRpbmcKLSAgICAgICAgLy8gYSBkZWZlcnJlZCByZWFkIHRvIGF2b2lk
IGF0b21pY2l0eSBwcm9ibGVtcyBiZXR3ZWVuIHRoZSBzdGF0ZV8KLSAgICAgICAgLy8gQ0FTIGFu
ZCBhcHBseURlZmVycmVkUmVhZGVyJ3MgcmVhZHMgb2YgZGVmZXJyZWRSZWFkZXJzW10uCi0gICAg
ICAgIGlmIChVTkxJS0VMWSgoYmVmb3JlICYga01heURlZmVyKSAhPSAwKSkgewotICAgICAgICAg
IGFwcGx5RGVmZXJyZWRSZWFkZXJzKHN0YXRlLCBjdHgpOwotICAgICAgICB9Ci0gICAgICAgIHdo
aWxlICh0cnVlKSB7Ci0gICAgICAgICAgYXNzZXJ0KChzdGF0ZSAmIChrSGFzRSB8IGtCZWd1bkUp
KSAhPSAwICYmIChzdGF0ZSAmIGtIYXNVKSA9PSAwKTsKLSAgICAgICAgICBpZiAoVU5MSUtFTFko
KHN0YXRlICYga0hhc1MpICE9IDApICYmCi0gICAgICAgICAgICAgICF3YWl0Rm9yWmVyb0JpdHMo
c3RhdGUsIGtIYXNTLCBrV2FpdGluZ05vdFMsIGN0eCkgJiYKLSAgICAgICAgICAgICAgY3R4LmNh
blRpbWVPdXQoKSkgewotICAgICAgICAgICAgLy8gVWdoLiAgV2UgYmxvY2tlZCBuZXcgcmVhZGVy
cyBhbmQgb3RoZXIgd3JpdGVycyBmb3IgYSB3aGlsZSwKLSAgICAgICAgICAgIC8vIGJ1dCB3ZXJl
IHVuYWJsZSB0byBjb21wbGV0ZS4gIE1vdmUgb24uICBPbiB0aGUgcGx1cyBzaWRlCi0gICAgICAg
ICAgICAvLyB3ZSBjYW4gY2xlYXIga1dhaXRpbmdOb3RTIGJlY2F1c2Ugbm9ib2R5IGVsc2UgY2Fu
IHBpZ2d5YmFjawotICAgICAgICAgICAgLy8gb24gaXQuCi0gICAgICAgICAgICBzdGF0ZSA9IChz
dGF0ZV8gJj0gfihrUHJldkRlZmVyIHwga0hhc0UgfCBrQmVndW5FIHwga1dhaXRpbmdOb3RTKSk7
Ci0gICAgICAgICAgICB3YWtlUmVnaXN0ZXJlZFdhaXRlcnMoc3RhdGUsIGtXYWl0aW5nRSB8IGtX
YWl0aW5nVSB8IGtXYWl0aW5nUyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgfQotCi0gICAgICAgICAgaWYgKGtSZWFkZXJQcmlvcml0eSAmJiAoc3RhdGUgJiBrSGFzRSkg
PT0gMCkgewotICAgICAgICAgICAgYXNzZXJ0KChzdGF0ZSAmIGtCZWd1bkUpICE9IDApOwotICAg
ICAgICAgICAgaWYgKCFzdGF0ZV8uY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoc3RhdGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUgJiB+a0Jl
Z3VuRSkgfCBrSGFzRSkpIHsKLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgV2FpdENvbnRleHQ+Ci0gIGJvb2wg
d2FpdEZvclplcm9CaXRzKHVpbnQzMl90JiBzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgZ29hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgd2FpdE1hc2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgIFdhaXRDb250ZXh0JiBjdHgpIHsKLSAgICB1aW50MzJf
dCBzcGluQ291bnQgPSAwOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBzdGF0ZSA9IHN0YXRl
Xy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwotICAgICAgaWYgKChzdGF0ZSAmIGdv
YWwpID09IDApIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBhc21fdm9s
YXRpbGVfcGF1c2UoKTsKLSAgICAgICsrc3BpbkNvdW50OwotICAgICAgaWYgKFVOTElLRUxZKHNw
aW5Db3VudCA+PSBrTWF4U3BpbkNvdW50KSkgewotICAgICAgICByZXR1cm4gY3R4LmNhbkJsb2Nr
KCkgJiYKLSAgICAgICAgICAgICAgIHlpZWxkV2FpdEZvclplcm9CaXRzKHN0YXRlLCBnb2FsLCB3
YWl0TWFzaywgY3R4KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
V2FpdENvbnRleHQ+Ci0gIGJvb2wgeWllbGRXYWl0Rm9yWmVyb0JpdHModWludDMyX3QmIHN0YXRl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGdvYWwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3Qgd2FpdE1hc2ssCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2FpdENvbnRleHQmIGN0eCkgewotI2lmZGVmIFJVU0FHRV9USFJFQUQKLSAgICBz
dHJ1Y3QgcnVzYWdlIHVzYWdlOwotICAgIGxvbmcgYmVmb3JlID0gLTE7Ci0jZW5kaWYKLSAgICBm
b3IgKHVpbnQzMl90IHlpZWxkQ291bnQgPSAwOyB5aWVsZENvdW50IDwga01heFNvZnRZaWVsZENv
dW50OwotICAgICAgICAgKyt5aWVsZENvdW50KSB7Ci0gICAgICBmb3IgKGludCBzb2Z0U3RhdGUg
PSAwOyBzb2Z0U3RhdGUgPCAzOyArK3NvZnRTdGF0ZSkgewotICAgICAgICBpZiAoc29mdFN0YXRl
IDwgMikgewotICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0jaWZkZWYgUlVTQUdFX1RIUkVBRAotICAgICAgICAgIGdldHJ1c2FnZShSVVNBR0Vf
VEhSRUFELCAmdXNhZ2UpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgaWYgKCgoc3RhdGUg
PSBzdGF0ZV8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkgJiBnb2FsKSA9PSAwKSB7
Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGN0eC5zaG91
bGRUaW1lT3V0KCkpIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
IH0KLSNpZmRlZiBSVVNBR0VfVEhSRUFECi0gICAgICBpZiAoYmVmb3JlID49IDAgJiYgdXNhZ2Uu
cnVfbml2Y3N3ID49IGJlZm9yZSArIDIpIHsKLSAgICAgICAgLy8gT25lIGludm9sdW50YXJ5IGNz
dyBtaWdodCBqdXN0IGJlIG9jY2FzaW9uYWwgYmFja2dyb3VuZCB3b3JrLAotICAgICAgICAvLyBi
dXQgaWYgd2UgZ2V0IHR3byBpbiBhIHJvdyB0aGVuIHdlIGd1ZXNzIHRoYXQgdGhlcmUgaXMgc29t
ZW9uZQotICAgICAgICAvLyBlbHNlIHdobyBjYW4gcHJvZml0YWJseSB1c2UgdGhpcyBDUFUuICBG
YWxsIGJhY2sgdG8gZnV0ZXgKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBiZWZvcmUg
PSB1c2FnZS5ydV9uaXZjc3c7Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJuIGZ1dGV4V2FpdEZv
clplcm9CaXRzKHN0YXRlLCBnb2FsLCB3YWl0TWFzaywgY3R4KTsKLSAgfQotCi0gIHRlbXBsYXRl
IDxjbGFzcyBXYWl0Q29udGV4dD4KLSAgYm9vbCBmdXRleFdhaXRGb3JaZXJvQml0cyh1aW50MzJf
dCYgc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZ29hbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB3YWl0TWFzaywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXYWl0Q29udGV4dCYgY3R4KSB7Ci0gICAgYXNzZXJ0KHdhaXRNYXNr
ID09IGtXYWl0aW5nTm90UyB8fCB3YWl0TWFzayA9PSBrV2FpdGluZ0UgfHwKLSAgICAgICAgICAg
d2FpdE1hc2sgPT0ga1dhaXRpbmdVIHx8IHdhaXRNYXNrID09IGtXYWl0aW5nUyk7Ci0KLSAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgc3RhdGUgPSBzdGF0ZV8ubG9hZChzdGQ6Om1lbW9yeV9vcmRl
cl9hY3F1aXJlKTsKLSAgICAgIGlmICgoc3RhdGUgJiBnb2FsKSA9PSAwKSB7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgfQotCi0gICAgICBhdXRvIGFmdGVyID0gc3RhdGU7Ci0gICAgICBp
ZiAod2FpdE1hc2sgPT0ga1dhaXRpbmdFKSB7Ci0gICAgICAgIGlmICgoc3RhdGUgJiBrV2FpdGlu
Z0VTaW5nbGUpICE9IDApIHsKLSAgICAgICAgICBhZnRlciB8PSBrV2FpdGluZ0VNdWx0aXBsZTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBhZnRlciB8PSBrV2FpdGluZ0VTaW5nbGU7Ci0g
ICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGFmdGVyIHw9IHdhaXRNYXNrOwotICAg
ICAgfQotCi0gICAgICAvLyBDQVMgaXMgYmV0dGVyIHRoYW4gYXRvbWljIHw9IGhlcmUsIGJlY2F1
c2UgaXQgbGV0cyB1cyBhdm9pZAotICAgICAgLy8gc2V0dGluZyB0aGUgd2FpdCBmbGFnIHdoZW4g
dGhlIGdvYWwgaXMgY29uY3VycmVudGx5IGFjaGlldmVkCi0gICAgICBpZiAoYWZ0ZXIgIT0gc3Rh
dGUgJiYgIXN0YXRlXy5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhzdGF0ZSwgYWZ0ZXIpKSB7Ci0g
ICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICBpZiAoIWN0eC5kb1dhaXQoc3RhdGVf
LCBhZnRlciwgd2FpdE1hc2spKSB7Ci0gICAgICAgIC8vIHRpbWVkIG91dAotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gV2FrZXMgdXAgd2FpdGVycyBy
ZWdpc3RlcmVkIGluIHN0YXRlXyBhcyBhcHByb3ByaWF0ZSwgY2xlYXJpbmcgdGhlCi0gIC8vIGF3
YWl0aW5nIGJpdHMgZm9yIGFueWJvZHkgdGhhdCB3YXMgYXdva2VuLiAgVHJpZXMgdG8gcGVyZm9y
bSBkaXJlY3QKLSAgLy8gc2luZ2xlIHdha2V1cCBvZiBhbiBleGNsdXNpdmUgd2FpdGVyIGlmIGFw
cHJvcHJpYXRlCi0gIHZvaWQgd2FrZVJlZ2lzdGVyZWRXYWl0ZXJzKHVpbnQzMl90JiBzdGF0ZSwg
dWludDMyX3Qgd2FrZU1hc2spIHsKLSAgICBpZiAoVU5MSUtFTFkoKHN0YXRlICYgd2FrZU1hc2sp
ICE9IDApKSB7Ci0gICAgICB3YWtlUmVnaXN0ZXJlZFdhaXRlcnNJbXBsKHN0YXRlLCB3YWtlTWFz
ayk7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCB3YWtlUmVnaXN0ZXJlZFdhaXRlcnNJbXBsKHVpbnQz
Ml90JiBzdGF0ZSwgdWludDMyX3Qgd2FrZU1hc2spIHsKLSAgICAvLyBJZiB0aGVyZSBhcmUgbXVs
dGlwbGUgbG9jaygpIHBlbmRpbmcgb25seSBvbmUgb2YgdGhlbSB3aWxsIGFjdHVhbGx5Ci0gICAg
Ly8gZ2V0IHRvIHdha2UgdXAsIHNvIGlzc3VpbmcgZnV0ZXhXYWtlQWxsIHdpbGwgbWFrZSBhIHRo
dW5kZXJpbmcgaGVyZC4KLSAgICAvLyBUaGVyZSdzIG5vdGhpbmcgc3RvcHBpbmcgdXMgZnJvbSBp
c3N1aW5nIGZ1dGV4V2FrZSgxKSBpbnN0ZWFkLAotICAgIC8vIHNvIGxvbmcgYXMgdGhlIHdhaXQg
Yml0cyBhcmUgc3RpbGwgYW4gYWNjdXJhdGUgcmVmbGVjdGlvbiBvZgotICAgIC8vIHRoZSB3YWl0
ZXJzLiAgSWYgd2Ugbm90aWNlICh2aWEgZnV0ZXhXYWtlJ3MgcmV0dXJuIHZhbHVlKSB0aGF0Ci0g
ICAgLy8gbm9ib2R5IHdva2UgdXAgdGhlbiB3ZSBjYW4gdHJ5IGFnYWluIHdpdGggdGhlIG5vcm1h
bCB3YWtlLWFsbCBwYXRoLgotICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4ndCBqdXN0IGNsZWFyIHRo
ZSBiaXRzIGF0IHRoYXQgcG9pbnQ7IHdlIG5lZWQgdG8KLSAgICAvLyBjbGVhciB0aGUgYml0cyBh
bmQgdGhlbiBpc3N1ZSBhbm90aGVyIHdha2V1cC4KLSAgICAvLwotICAgIC8vIEl0IGlzIHBvc3Np
YmxlIHRoYXQgd2Ugd2FrZSBhbiBFIHdhaXRlciBidXQgYW4gb3V0c2lkZSBTIGdyYWJzIHRoZQot
ICAgIC8vIGxvY2sgaW5zdGVhZCwgYXQgd2hpY2ggcG9pbnQgd2Ugc2hvdWxkIHdha2UgcGVuZGlu
ZyBVIGFuZCBTIHdhaXRlcnMuCi0gICAgLy8gUmF0aGVyIHRoYW4gdHJhY2tpbmcgc3RhdGUgdG8g
bWFrZSB0aGUgZmFpbGluZyBFIHJlZ2VuZXJhdGUgdGhlCi0gICAgLy8gd2FrZXVwLCB3ZSBqdXN0
IGRpc2FibGUgdGhlIG9wdGltaXphdGlvbiBpbiB0aGUgY2FzZSB0aGF0IHRoZXJlCi0gICAgLy8g
YXJlIHdhaXRpbmcgVSBvciBTIHRoYXQgd2UgYXJlIGVsaWdpYmxlIHRvIHdha2UuCi0gICAgaWYg
KCh3YWtlTWFzayAmIGtXYWl0aW5nRSkgPT0ga1dhaXRpbmdFICYmCi0gICAgICAgIChzdGF0ZSAm
IHdha2VNYXNrKSA9PSBrV2FpdGluZ0UgJiYKLSAgICAgICAgc3RhdGVfLmZ1dGV4V2FrZSgxLCBr
V2FpdGluZ0UpID4gMCkgewotICAgICAgLy8gc29tZWJvZHkgd29rZSB1cCwgc28gbGVhdmUgc3Rh
dGVfIGFzIGlzIGFuZCBjbGVhciBpdCBsYXRlcgotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICgoc3RhdGUgJiB3YWtlTWFzaykgIT0gMCkgewotICAgICAgYXV0byBwcmV2ID0gc3RhdGVf
LmZldGNoX2FuZCh+d2FrZU1hc2spOwotICAgICAgaWYgKChwcmV2ICYgd2FrZU1hc2spICE9IDAp
IHsKLSAgICAgICAgZnV0ZXhXYWtlQWxsKHdha2VNYXNrKTsKLSAgICAgIH0KLSAgICAgIHN0YXRl
ID0gcHJldiAmIH53YWtlTWFzazsKLSAgICB9Ci0gIH0KLQotICB2b2lkIGZ1dGV4V2FrZUFsbCh1
aW50MzJfdCB3YWtlTWFzaykgewotICAgIHN0YXRlXy5mdXRleFdha2Uoc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSwgd2FrZU1hc2spOwotICB9Ci0KLSAgRGVmZXJyZWRSZWFkZXJTbG90
KiBkZWZlcnJlZFJlYWRlcih1aW50MzJfdCBzbG90KSB7Ci0gICAgcmV0dXJuICZkZWZlcnJlZFJl
YWRlcnNbc2xvdCAqIGtEZWZlcnJlZFNlcGFyYXRpb25GYWN0b3JdOwotICB9Ci0KLSAgdWludHB0
cl90IHRva2VuZnVsU2xvdFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHRoaXMpOyB9Ci0KLSAgdWludHB0cl90IHRva2VubGVzc1Nsb3RWYWx1ZSgpIHsgcmV0dXJu
IHRva2VuZnVsU2xvdFZhbHVlKCkgfCBrVG9rZW5sZXNzOyB9Ci0KLSAgYm9vbCBzbG90VmFsdWVJ
c1RoaXModWludHB0cl90IHNsb3RWYWx1ZSkgewotICAgIHJldHVybiAoc2xvdFZhbHVlICYgfmtU
b2tlbmxlc3MpID09IHRva2VuZnVsU2xvdFZhbHVlKCk7Ci0gIH0KLQotICAvLyBDbGVhcnMgYW55
IGRlZmVycmVkUmVhZGVyc1tdIHRoYXQgcG9pbnQgdG8gdGhpcywgYWRqdXN0aW5nIHRoZSBpbmxp
bmUKLSAgLy8gc2hhcmVkIGxvY2sgY291bnQgdG8gY29tcGVuc2F0ZS4gIERvZXMgc29tZSBzcGlu
bmluZyBhbmQgeWllbGRpbmcKLSAgLy8gdG8gYXZvaWQgdGhlIHdvcmsuICBBbHdheXMgZmluaXNo
ZXMgdGhlIGFwcGxpY2F0aW9uLCBldmVuIGlmIGN0eAotICAvLyB0aW1lcyBvdXQuCi0gIHRlbXBs
YXRlIDxjbGFzcyBXYWl0Q29udGV4dD4KLSAgdm9pZCBhcHBseURlZmVycmVkUmVhZGVycyh1aW50
MzJfdCYgc3RhdGUsIFdhaXRDb250ZXh0JiBjdHgpIHsKLSAgICB1aW50MzJfdCBzbG90ID0gMDsK
LQotICAgIHVpbnQzMl90IHNwaW5Db3VudCA9IDA7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
IHdoaWxlICghc2xvdFZhbHVlSXNUaGlzKAotICAgICAgICAgICAgICAgICBkZWZlcnJlZFJlYWRl
cihzbG90KS0+bG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpIHsKLSAgICAgICAgaWYg
KCsrc2xvdCA9PSBrTWF4RGVmZXJyZWRSZWFkZXJzKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgICBhc21fdm9sYXRpbGVfcGF1c2UoKTsKLSAgICAgIGlmIChV
TkxJS0VMWSgrK3NwaW5Db3VudCA+PSBrTWF4U3BpbkNvdW50KSkgewotICAgICAgICBhcHBseURl
ZmVycmVkUmVhZGVycyhzdGF0ZSwgY3R4LCBzbG90KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBXYWl0Q29udGV4dD4KLSAgdm9pZCBh
cHBseURlZmVycmVkUmVhZGVycyh1aW50MzJfdCYgc3RhdGUsIFdhaXRDb250ZXh0JiBjdHgsIHVp
bnQzMl90IHNsb3QpIHsKLQotI2lmZGVmIFJVU0FHRV9USFJFQUQKLSAgICBzdHJ1Y3QgcnVzYWdl
IHVzYWdlOwotICAgIGxvbmcgYmVmb3JlID0gLTE7Ci0jZW5kaWYKLSAgICBmb3IgKHVpbnQzMl90
IHlpZWxkQ291bnQgPSAwOyB5aWVsZENvdW50IDwga01heFNvZnRZaWVsZENvdW50OwotICAgICAg
ICAgKyt5aWVsZENvdW50KSB7Ci0gICAgICBmb3IgKGludCBzb2Z0U3RhdGUgPSAwOyBzb2Z0U3Rh
dGUgPCAzOyArK3NvZnRTdGF0ZSkgewotICAgICAgICBpZiAoc29mdFN0YXRlIDwgMikgewotICAg
ICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0jaWZk
ZWYgUlVTQUdFX1RIUkVBRAotICAgICAgICAgIGdldHJ1c2FnZShSVVNBR0VfVEhSRUFELCAmdXNh
Z2UpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCFzbG90VmFsdWVJc1RoaXMo
Ci0gICAgICAgICAgICAgICAgICAgZGVmZXJyZWRSZWFkZXIoc2xvdCktPmxvYWQoc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSkpKSB7Ci0gICAgICAgICAgaWYgKCsrc2xvdCA9PSBrTWF4RGVmZXJy
ZWRSZWFkZXJzKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGlmIChjdHguc2hvdWxkVGltZU91dCgpKSB7Ci0gICAgICAgICAgLy8gZmluaXNo
IGFwcGx5aW5nIGltbWVkaWF0ZWx5IG9uIHRpbWVvdXQKLSAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgfQotI2lmZGVmIFJVU0FHRV9USFJFQUQKLSAgICAgIGlmIChiZWZvcmUgPj0g
MCAmJiB1c2FnZS5ydV9uaXZjc3cgPj0gYmVmb3JlICsgMikgewotICAgICAgICAvLyBoZXVyaXN0
aWMgc2F5cyBydW4gcXVldWUgaXMgbm90IGVtcHR5Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQot
ICAgICAgYmVmb3JlID0gdXNhZ2UucnVfbml2Y3N3OwotI2VuZGlmCi0gICAgfQotCi0gICAgdWlu
dDMyX3QgbW92ZWRTbG90Q291bnQgPSAwOwotICAgIGZvciAoOyBzbG90IDwga01heERlZmVycmVk
UmVhZGVyczsgKytzbG90KSB7Ci0gICAgICBhdXRvIHNsb3RQdHIgPSBkZWZlcnJlZFJlYWRlcihz
bG90KTsKLSAgICAgIGF1dG8gc2xvdFZhbHVlID0gc2xvdFB0ci0+bG9hZChzdGQ6Om1lbW9yeV9v
cmRlcl9hY3F1aXJlKTsKLSAgICAgIGlmIChzbG90VmFsdWVJc1RoaXMoc2xvdFZhbHVlKSAmJgot
ICAgICAgICAgIHNsb3RQdHItPmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHNsb3RWYWx1ZSwgMCkp
IHsKLSAgICAgICAgKyttb3ZlZFNsb3RDb3VudDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
bW92ZWRTbG90Q291bnQgPiAwKSB7Ci0gICAgICBzdGF0ZSA9IChzdGF0ZV8gKz0gbW92ZWRTbG90
Q291bnQgKiBrSW5jckhhc1MpOwotICAgIH0KLSAgICBhc3NlcnQoKHN0YXRlICYgKGtIYXNFIHwg
a0JlZ3VuRSkpICE9IDApOwotCi0gICAgLy8gaWYgc3RhdGUgKyBrSW5jckhhc1Mgb3ZlcmZsb3dz
IChvZmYgdGhlIGVuZCBvZiBzdGF0ZSkgdGhlbiBlaXRoZXIKLSAgICAvLyB3ZSBoYXZlIDJeKDMy
LTkpIHJlYWRlcnMgKGFsbW9zdCBjZXJ0YWlubHkgYW4gYXBwbGljYXRpb24gYnVnKQotICAgIC8v
IG9yIHdlIGhhZCBhbiB1bmRlcmZsb3cgKGFsc28gYSBidWcpCi0gICAgYXNzZXJ0KHN0YXRlIDwg
c3RhdGUgKyBrSW5jckhhc1MpOwotICB9Ci0KLSAgLy8gSXQgaXMgc3RyYWlnaHRmb3dhcmQgdG8g
bWFrZSBhIHRva2VuLWxlc3MgbG9ja19zaGFyZWQoKSBhbmQKLSAgLy8gdW5sb2NrX3NoYXJlZCgp
IGVpdGhlciBieSBtYWtpbmcgdGhlIHRva2VuLWxlc3MgdmVyc2lvbiBhbHdheXMgdXNlCi0gIC8v
IElOTElORV9TSEFSRUQgbW9kZSBvciBieSByZW1vdmluZyB0aGUgdG9rZW4gdmVyc2lvbi4gIFN1
cHBvcnRpbmcKLSAgLy8gZGVmZXJyZWQgb3BlcmF0aW9uIGZvciBib3RoIHR5cGVzIGlzIHRyaWNr
aWVyIHRoYW4gaXQgYXBwZWFycywgYmVjYXVzZQotICAvLyB0aGUgcHVycG9zZSBvZiB0aGUgdG9r
ZW4gaXQgc28gdGhhdCB1bmxvY2tfc2hhcmVkIGRvZXNuJ3QgaGF2ZSB0bwotICAvLyBsb29rIGlu
IG90aGVyIHNsb3RzIGZvciBpdHMgZGVmZXJyZWQgbG9jay4gIFRva2VuLWxlc3MgdW5sb2NrX3No
YXJlZAotICAvLyBtaWdodCBwbGFjZSBhIGRlZmVycmVkIGxvY2sgaW4gb25lIHBsYWNlIGFuZCB0
aGVuIHJlbGVhc2UgYSBkaWZmZXJlbnQKLSAgLy8gc2xvdCB0aGF0IHdhcyBvcmlnaW5hbGx5IHVz
ZWQgYnkgdGhlIHRva2VuLWZ1bCB2ZXJzaW9uLiAgSWYgdGhpcyB3YXMKLSAgLy8gaW1wb3J0YW50
IHdlIGNvdWxkIHNvbHZlIHRoZSBwcm9ibGVtIGJ5IGRpZmZlcmVudGlhdGluZyB0aGUgZGVmZXJy
ZWQKLSAgLy8gbG9ja3Mgc28gdGhhdCBjcm9zcy12YXJpZXR5IHJlbGVhc2Ugd291bGRuJ3Qgb2Nj
dXIuICBUaGUgYmVzdCB3YXkKLSAgLy8gaXMgcHJvYmFibHkgdG8gc3RlYWwgYSBiaXQgZnJvbSB0
aGUgcG9pbnRlciwgbWFraW5nIGRlZmVycmVkTG9ja3NbXQotICAvLyBhbiBhcnJheSBvZiBBdG9t
PHVpbnRwdHJfdD4uCi0KLSAgdGVtcGxhdGUgPGNsYXNzIFdhaXRDb250ZXh0PgotICBib29sIGxv
Y2tTaGFyZWRJbXBsKFRva2VuKiB0b2tlbiwgV2FpdENvbnRleHQmIGN0eCkgewotICAgIHVpbnQz
Ml90IHN0YXRlID0gc3RhdGVfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAg
aWYgKChzdGF0ZSAmIChrSGFzUyB8IGtNYXlEZWZlciB8IGtIYXNFKSkgPT0gMCAmJgotICAgICAg
ICBzdGF0ZV8uY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoc3RhdGUsIHN0YXRlICsga0luY3JIYXNT
KSkgewotICAgICAgaWYgKHRva2VuICE9IG51bGxwdHIpIHsKLSAgICAgICAgdG9rZW4tPnR5cGVf
ID0gVG9rZW46OlR5cGU6OklOTElORV9TSEFSRUQ7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGxvY2tTaGFyZWRJbXBsKHN0YXRlLCB0b2tlbiwgY3R4KTsK
LSAgfQotCi0gIHRlbXBsYXRlIDxjbGFzcyBXYWl0Q29udGV4dD4KLSAgYm9vbCBsb2NrU2hhcmVk
SW1wbCh1aW50MzJfdCYgc3RhdGUsIFRva2VuKiB0b2tlbiwgV2FpdENvbnRleHQmIGN0eCk7Ci0K
LSAgLy8gVXBkYXRlcyB0aGUgc3RhdGUgaW4vb3V0IGFyZ3VtZW50IGFzIGlmIHRoZSBsb2NrcyB3
ZXJlIG1hZGUgaW5saW5lLAotICAvLyBidXQgZG9lcyBub3QgdXBkYXRlIHN0YXRlXwotICB2b2lk
IGNsZWFudXBUb2tlbmxlc3NTaGFyZWREZWZlcnJlZCh1aW50MzJfdCYgc3RhdGUpIHsKLSAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwga01heERlZmVycmVkUmVhZGVyczsgKytpKSB7Ci0gICAg
ICBhdXRvIHNsb3RQdHIgPSBkZWZlcnJlZFJlYWRlcihpKTsKLSAgICAgIGF1dG8gc2xvdFZhbHVl
ID0gc2xvdFB0ci0+bG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICAgIGlmIChz
bG90VmFsdWUgPT0gdG9rZW5sZXNzU2xvdFZhbHVlKCkpIHsKLSAgICAgICAgc2xvdFB0ci0+c3Rv
cmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgICAgIHN0YXRlICs9IGtJbmNy
SGFzUzsKLSAgICAgICAgaWYgKChzdGF0ZSAmIGtIYXNTKSA9PSAwKSB7Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBib29sIHRyeVVubG9ja1Rv
a2VubGVzc1NoYXJlZERlZmVycmVkKCk7Ci0KLSAgYm9vbCB0cnlVbmxvY2tTaGFyZWREZWZlcnJl
ZCh1aW50MzJfdCBzbG90KSB7Ci0gICAgYXNzZXJ0KHNsb3QgPCBrTWF4RGVmZXJyZWRSZWFkZXJz
KTsKLSAgICBhdXRvIHNsb3RWYWx1ZSA9IHRva2VuZnVsU2xvdFZhbHVlKCk7Ci0gICAgcmV0dXJu
IGRlZmVycmVkUmVhZGVyKHNsb3QpLT5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhzbG90VmFsdWUs
IDApOwotICB9Ci0KLSAgdWludDMyX3QgdW5sb2NrU2hhcmVkSW5saW5lKCkgewotICAgIHVpbnQz
Ml90IHN0YXRlID0gKHN0YXRlXyAtPSBrSW5jckhhc1MpOwotICAgIGFzc2VydCgoc3RhdGUgJiAo
a0hhc0UgfCBrQmVndW5FIHwga01heURlZmVyKSkgIT0gMCB8fAotICAgICAgICAgICBzdGF0ZSA8
IHN0YXRlICsga0luY3JIYXNTKTsKLSAgICBpZiAoKHN0YXRlICYga0hhc1MpID09IDApIHsKLSAg
ICAgIC8vIE9ubHkgdGhlIHNlY29uZCBoYWxmIG9mIGxvY2soKSBjYW4gYmUgYmxvY2tlZCBieSBh
IG5vbi16ZXJvCi0gICAgICAvLyByZWFkZXIgY291bnQsIHNvIHRoYXQncyB0aGUgb25seSB0aGlu
ZyB3ZSBuZWVkIHRvIHdha2UKLSAgICAgIHdha2VSZWdpc3RlcmVkV2FpdGVycyhzdGF0ZSwga1dh
aXRpbmdOb3RTKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXRlOwotICB9Ci0KLSAgdGVtcGxhdGUg
PGNsYXNzIFdhaXRDb250ZXh0PgotICBib29sIGxvY2tVcGdyYWRlSW1wbChXYWl0Q29udGV4dCYg
Y3R4KSB7Ci0gICAgdWludDMyX3Qgc3RhdGU7Ci0gICAgZG8gewotICAgICAgaWYgKCF3YWl0Rm9y
WmVyb0JpdHMoc3RhdGUsIGtIYXNTb2xvLCBrV2FpdGluZ1UsIGN0eCkpIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0gd2hpbGUgKCFzdGF0ZV8uY29tcGFyZV9leGNoYW5n
ZV9zdHJvbmcoc3RhdGUsIHN0YXRlIHwga0hhc1UpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQot
Ci0gcHVibGljOgotICBjbGFzcyBSZWFkSG9sZGVyIHsKLSAgICBSZWFkSG9sZGVyKCkgOiBsb2Nr
XyhudWxscHRyKSB7fQotCi0gICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVhZEhvbGRlcihjb25z
dCBTaGFyZWRNdXRleEltcGwqIGxvY2spCi0gICAgICAgIDogbG9ja18oY29uc3RfY2FzdDxTaGFy
ZWRNdXRleEltcGwqPihsb2NrKSkgewotICAgICAgaWYgKGxvY2tfKSB7Ci0gICAgICAgIGxvY2tf
LT5sb2NrX3NoYXJlZCh0b2tlbl8pOwotICAgICAgfQotICAgIH0KLQotICAgIGV4cGxpY2l0IFJl
YWRIb2xkZXIoY29uc3QgU2hhcmVkTXV0ZXhJbXBsJiBsb2NrKQotICAgICAgICA6IGxvY2tfKGNv
bnN0X2Nhc3Q8U2hhcmVkTXV0ZXhJbXBsKj4oJmxvY2spKSB7Ci0gICAgICBsb2NrXy0+bG9ja19z
aGFyZWQodG9rZW5fKTsKLSAgICB9Ci0KLSAgICBSZWFkSG9sZGVyKFJlYWRIb2xkZXImJiByaHMp
IG5vZXhjZXB0IDogbG9ja18ocmhzLmxvY2tfKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW5fKHJocy50b2tlbl8pIHsKLSAgICAgIHJocy5sb2NrXyA9
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8gRG93bmdyYWRlIGZyb20gdXBncmFkZSBtb2RlCi0g
ICAgZXhwbGljaXQgUmVhZEhvbGRlcihVcGdyYWRlSG9sZGVyJiYgdXBncmFkZWQpIDogbG9ja18o
dXBncmFkZWQubG9ja18pIHsKLSAgICAgIGFzc2VydCh1cGdyYWRlZC5sb2NrXyAhPSBudWxscHRy
KTsKLSAgICAgIHVwZ3JhZGVkLmxvY2tfID0gbnVsbHB0cjsKLSAgICAgIGxvY2tfLT51bmxvY2tf
dXBncmFkZV9hbmRfbG9ja19zaGFyZWQodG9rZW5fKTsKLSAgICB9Ci0KLSAgICAvLyBEb3duZ3Jh
ZGUgZnJvbSBleGNsdXNpdmUgbW9kZQotICAgIGV4cGxpY2l0IFJlYWRIb2xkZXIoV3JpdGVIb2xk
ZXImJiB3cml0ZXIpIDogbG9ja18od3JpdGVyLmxvY2tfKSB7Ci0gICAgICBhc3NlcnQod3JpdGVy
LmxvY2tfICE9IG51bGxwdHIpOwotICAgICAgd3JpdGVyLmxvY2tfID0gbnVsbHB0cjsKLSAgICAg
IGxvY2tfLT51bmxvY2tfYW5kX2xvY2tfc2hhcmVkKHRva2VuXyk7Ci0gICAgfQotCi0gICAgUmVh
ZEhvbGRlciYgb3BlcmF0b3I9KFJlYWRIb2xkZXImJiByaHMpIG5vZXhjZXB0IHsKLSAgICAgIHN0
ZDo6c3dhcChsb2NrXywgcmhzLmxvY2tfKTsKLSAgICAgIHN0ZDo6c3dhcCh0b2tlbl8sIHJocy50
b2tlbl8pOwotICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIFJlYWRIb2xkZXIoY29u
c3QgUmVhZEhvbGRlciYgcmhzKSA9IGRlbGV0ZTsKLSAgICBSZWFkSG9sZGVyJiBvcGVyYXRvcj0o
Y29uc3QgUmVhZEhvbGRlciYgcmhzKSA9IGRlbGV0ZTsKLQotICAgIH5SZWFkSG9sZGVyKCkgewot
ICAgICAgdW5sb2NrKCk7Ci0gICAgfQotCi0gICAgdm9pZCB1bmxvY2soKSB7Ci0gICAgICBpZiAo
bG9ja18pIHsKLSAgICAgICAgbG9ja18tPnVubG9ja19zaGFyZWQodG9rZW5fKTsKLSAgICAgICAg
bG9ja18gPSBudWxscHRyOwotICAgICAgfQotICAgIH0KLQotICAgcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgVXBncmFkZUhvbGRlcjsKLSAgICBmcmllbmQgY2xhc3MgV3JpdGVIb2xkZXI7Ci0g
ICAgU2hhcmVkTXV0ZXhJbXBsKiBsb2NrXzsKLSAgICBTaGFyZWRNdXRleFRva2VuIHRva2VuXzsK
LSAgfTsKLQotICBjbGFzcyBVcGdyYWRlSG9sZGVyIHsKLSAgICBVcGdyYWRlSG9sZGVyKCkgOiBs
b2NrXyhudWxscHRyKSB7fQotCi0gICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVXBncmFkZUhvbGRl
cihTaGFyZWRNdXRleEltcGwqIGxvY2spIDogbG9ja18obG9jaykgewotICAgICAgaWYgKGxvY2tf
KSB7Ci0gICAgICAgIGxvY2tfLT5sb2NrX3VwZ3JhZGUoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBleHBsaWNpdCBVcGdyYWRlSG9sZGVyKFNoYXJlZE11dGV4SW1wbCYgbG9jaykgOiBsb2NrXygm
bG9jaykgewotICAgICAgbG9ja18tPmxvY2tfdXBncmFkZSgpOwotICAgIH0KLQotICAgIC8vIERv
d25ncmFkZSBmcm9tIGV4Y2x1c2l2ZSBtb2RlCi0gICAgZXhwbGljaXQgVXBncmFkZUhvbGRlcihX
cml0ZUhvbGRlciYmIHdyaXRlcikgOiBsb2NrXyh3cml0ZXIubG9ja18pIHsKLSAgICAgIGFzc2Vy
dCh3cml0ZXIubG9ja18gIT0gbnVsbHB0cik7Ci0gICAgICB3cml0ZXIubG9ja18gPSBudWxscHRy
OwotICAgICAgbG9ja18tPnVubG9ja19hbmRfbG9ja191cGdyYWRlKCk7Ci0gICAgfQotCi0gICAg
VXBncmFkZUhvbGRlcihVcGdyYWRlSG9sZGVyJiYgcmhzKSBub2V4Y2VwdCA6IGxvY2tfKHJocy5s
b2NrXykgewotICAgICAgcmhzLmxvY2tfID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBVcGdyYWRl
SG9sZGVyJiBvcGVyYXRvcj0oVXBncmFkZUhvbGRlciYmIHJocykgbm9leGNlcHQgewotICAgICAg
c3RkOjpzd2FwKGxvY2tfLCByaHMubG9ja18pOwotICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0K
LQotICAgIFVwZ3JhZGVIb2xkZXIoY29uc3QgVXBncmFkZUhvbGRlciYgcmhzKSA9IGRlbGV0ZTsK
LSAgICBVcGdyYWRlSG9sZGVyJiBvcGVyYXRvcj0oY29uc3QgVXBncmFkZUhvbGRlciYgcmhzKSA9
IGRlbGV0ZTsKLQotICAgIH5VcGdyYWRlSG9sZGVyKCkgewotICAgICAgdW5sb2NrKCk7Ci0gICAg
fQotCi0gICAgdm9pZCB1bmxvY2soKSB7Ci0gICAgICBpZiAobG9ja18pIHsKLSAgICAgICAgbG9j
a18tPnVubG9ja191cGdyYWRlKCk7Ci0gICAgICAgIGxvY2tfID0gbnVsbHB0cjsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdyaXRlSG9sZGVyOwotICAg
IGZyaWVuZCBjbGFzcyBSZWFkSG9sZGVyOwotICAgIFNoYXJlZE11dGV4SW1wbCogbG9ja187Ci0g
IH07Ci0KLSAgY2xhc3MgV3JpdGVIb2xkZXIgewotICAgIFdyaXRlSG9sZGVyKCkgOiBsb2NrXyhu
dWxscHRyKSB7fQotCi0gICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV3JpdGVIb2xkZXIoU2hhcmVk
TXV0ZXhJbXBsKiBsb2NrKSA6IGxvY2tfKGxvY2spIHsKLSAgICAgIGlmIChsb2NrXykgewotICAg
ICAgICBsb2NrXy0+bG9jaygpOwotICAgICAgfQotICAgIH0KLQotICAgIGV4cGxpY2l0IFdyaXRl
SG9sZGVyKFNoYXJlZE11dGV4SW1wbCYgbG9jaykgOiBsb2NrXygmbG9jaykgewotICAgICAgbG9j
a18tPmxvY2soKTsKLSAgICB9Ci0KLSAgICAvLyBQcm9tb3Rpb24gZnJvbSB1cGdyYWRlIG1vZGUK
LSAgICBleHBsaWNpdCBXcml0ZUhvbGRlcihVcGdyYWRlSG9sZGVyJiYgdXBncmFkZSkgOiBsb2Nr
Xyh1cGdyYWRlLmxvY2tfKSB7Ci0gICAgICBhc3NlcnQodXBncmFkZS5sb2NrXyAhPSBudWxscHRy
KTsKLSAgICAgIHVwZ3JhZGUubG9ja18gPSBudWxscHRyOwotICAgICAgbG9ja18tPnVubG9ja191
cGdyYWRlX2FuZF9sb2NrKCk7Ci0gICAgfQotCi0gICAgLy8gUkVBRE1FOgotICAgIC8vCi0gICAg
Ly8gSXQgaXMgaW50ZW5kZWQgdGhhdCBXcml0ZUhvbGRlcihSZWFkSG9sZGVyJiYgcmhzKSBkbyBu
b3QgZXhpc3QuCi0gICAgLy8KLSAgICAvLyBTaGFyZWQgbG9ja3MgKHJlYWQpIGNhbiBub3Qgc2Fm
ZWx5IHVwZ3JhZGUgdG8gdW5pcXVlIGxvY2tzICh3cml0ZSkuCi0gICAgLy8gVGhhdCB1cGdyYWRl
IHBhdGggaXMgYSB3ZWxsLWtub3duIHJlY2lwZSBmb3IgZGVhZGxvY2ssIHNvIHdlIGV4cGxpY2l0
bHkKLSAgICAvLyBkaXNhbGxvdyBpdC4KLSAgICAvLwotICAgIC8vIElmIHlvdSBuZWVkIHRvIGRv
IGEgY29uZGl0aW9uYWwgbXV0YXRpb24sIHlvdSBoYXZlIGEgZmV3IG9wdGlvbnM6Ci0gICAgLy8g
MS4gQ2hlY2sgdGhlIGNvbmRpdGlvbiB1bmRlciBhIHNoYXJlZCBsb2NrIGFuZCByZWxlYXNlIGl0
LgotICAgIC8vICAgIFRoZW4gbWF5YmUgY2hlY2sgdGhlIGNvbmRpdGlvbiBhZ2FpbiB1bmRlciBh
IHVuaXF1ZSBsb2NrIGFuZCBtYXliZSBkbwotICAgIC8vICAgIHRoZSBtdXRhdGlvbi4KLSAgICAv
LyAyLiBDaGVjayB0aGUgY29uZGl0aW9uIG9uY2UgdW5kZXIgYW4gdXBncmFkZWFibGUgbG9jay4K
LSAgICAvLyAgICBUaGVuIG1heWJlIHVwZ3JhZGUgdGhlIGxvY2sgdG8gYSB1bmlxdWUgbG9jayBh
bmQgZG8gdGhlIG11dGF0aW9uLgotICAgIC8vIDMuIENoZWNrIHRoZSBjb25kaXRpb24gYW5kIG1h
eWJlIHBlcmZvcm0gdGhlIG11dGF0aW9uIHVuZGVyIGEgdW5pcXVlCi0gICAgLy8gICAgbG9jay4K
LSAgICAvLwotICAgIC8vIFJlbGV2YW50IHVwZ3JhZGVhYmxlIGxvY2sgbm90ZXM6Ci0gICAgLy8g
KiBBdCBtb3N0IG9uZSB1cGdyYWRlYWJsZSBsb2NrIGNhbiBiZSBoZWxkIGF0IGEgdGltZSBmb3Ig
YSBnaXZlbiBzaGFyZWQKLSAgICAvLyAgIG11dGV4LCBqdXN0IGxpa2UgYSB1bmlxdWUgbG9jay4K
LSAgICAvLyAqIEFuIHVwZ3JhZGVhYmxlIGxvY2sgbWF5IGJlIGhlbGQgY29uY3VycmVudGx5IHdp
dGggYW55IG51bWJlciBvZiBzaGFyZWQKLSAgICAvLyAgIGxvY2tzLgotICAgIC8vICogQW4gdXBn
cmFkZWFibGUgbG9jayBtYXkgYmUgdXBncmFkZWQgYXRvbWljYWxseSB0byBhIHVuaXF1ZSBsb2Nr
LgotCi0gICAgV3JpdGVIb2xkZXIoV3JpdGVIb2xkZXImJiByaHMpIG5vZXhjZXB0IDogbG9ja18o
cmhzLmxvY2tfKSB7Ci0gICAgICByaHMubG9ja18gPSBudWxscHRyOwotICAgIH0KLQotICAgIFdy
aXRlSG9sZGVyJiBvcGVyYXRvcj0oV3JpdGVIb2xkZXImJiByaHMpIG5vZXhjZXB0IHsKLSAgICAg
IHN0ZDo6c3dhcChsb2NrXywgcmhzLmxvY2tfKTsKLSAgICAgIHJldHVybiAqdGhpczsKLSAgICB9
Ci0KLSAgICBXcml0ZUhvbGRlcihjb25zdCBXcml0ZUhvbGRlciYgcmhzKSA9IGRlbGV0ZTsKLSAg
ICBXcml0ZUhvbGRlciYgb3BlcmF0b3I9KGNvbnN0IFdyaXRlSG9sZGVyJiByaHMpID0gZGVsZXRl
OwotCi0gICAgfldyaXRlSG9sZGVyKCkgewotICAgICAgdW5sb2NrKCk7Ci0gICAgfQotCi0gICAg
dm9pZCB1bmxvY2soKSB7Ci0gICAgICBpZiAobG9ja18pIHsKLSAgICAgICAgbG9ja18tPnVubG9j
aygpOwotICAgICAgICBsb2NrXyA9IG51bGxwdHI7Ci0gICAgICB9Ci0gICAgfQotCi0gICBwcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBSZWFkSG9sZGVyOwotICAgIGZyaWVuZCBjbGFzcyBVcGdy
YWRlSG9sZGVyOwotICAgIFNoYXJlZE11dGV4SW1wbCogbG9ja187Ci0gIH07Ci0KLSAgLy8gQWRh
cHRlcnMgZm9yIFN5bmNocm9uaXplZDw+Ci0gIGZyaWVuZCB2b2lkIGFjcXVpcmVSZWFkKFNoYXJl
ZE11dGV4SW1wbCYgbG9jaykgeyBsb2NrLmxvY2tfc2hhcmVkKCk7IH0KLSAgZnJpZW5kIHZvaWQg
YWNxdWlyZVJlYWRXcml0ZShTaGFyZWRNdXRleEltcGwmIGxvY2spIHsgbG9jay5sb2NrKCk7IH0K
LSAgZnJpZW5kIHZvaWQgcmVsZWFzZVJlYWQoU2hhcmVkTXV0ZXhJbXBsJiBsb2NrKSB7IGxvY2su
dW5sb2NrX3NoYXJlZCgpOyB9Ci0gIGZyaWVuZCB2b2lkIHJlbGVhc2VSZWFkV3JpdGUoU2hhcmVk
TXV0ZXhJbXBsJiBsb2NrKSB7IGxvY2sudW5sb2NrKCk7IH0KLSAgZnJpZW5kIGJvb2wgYWNxdWly
ZVJlYWQoU2hhcmVkTXV0ZXhJbXBsJiBsb2NrLCB1bnNpZ25lZCBpbnQgbXMpIHsKLSAgICByZXR1
cm4gbG9jay50cnlfbG9ja19zaGFyZWRfZm9yKHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMobXMp
KTsKLSAgfQotICBmcmllbmQgYm9vbCBhY3F1aXJlUmVhZFdyaXRlKFNoYXJlZE11dGV4SW1wbCYg
bG9jaywgdW5zaWduZWQgaW50IG1zKSB7Ci0gICAgcmV0dXJuIGxvY2sudHJ5X2xvY2tfZm9yKHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMobXMpKTsKLSAgfQotfTsKLQotdHlwZWRlZiBTaGFyZWRN
dXRleEltcGw8dHJ1ZT4gU2hhcmVkTXV0ZXhSZWFkUHJpb3JpdHk7Ci10eXBlZGVmIFNoYXJlZE11
dGV4SW1wbDxmYWxzZT4gU2hhcmVkTXV0ZXhXcml0ZVByaW9yaXR5OwotdHlwZWRlZiBTaGFyZWRN
dXRleFdyaXRlUHJpb3JpdHkgU2hhcmVkTXV0ZXg7Ci0KLS8vIFByZXZlbnQgdGhlIGNvbXBpbGVy
IGZyb20gaW5zdGFudGlhdGluZyB0aGVzZSBpbiBvdGhlciB0cmFuc2xhdGlvbiB1bml0cy4KLS8v
IFRoZXkgYXJlIGluc3RhbnRpYXRlZCBvbmNlIGluIFNoYXJlZE11dGV4LmNwcAotZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIFNoYXJlZE11dGV4SW1wbDx0cnVlPjsKLWV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyBTaGFyZWRNdXRleEltcGw8ZmFsc2U+OwotCi10ZW1wbGF0ZSA8Ci0gICAgYm9vbCBSZWFkZXJQ
cmlvcml0eSwKLSAgICB0eXBlbmFtZSBUYWdfLAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4gY2xh
c3MgQXRvbSwKLSAgICBib29sIEJsb2NrSW1tZWRpYXRlbHk+Ci10eXBlbmFtZSBTaGFyZWRNdXRl
eEltcGw8UmVhZGVyUHJpb3JpdHksIFRhZ18sIEF0b20sIEJsb2NrSW1tZWRpYXRlbHk+OjoKLSAg
ICBEZWZlcnJlZFJlYWRlclNsb3QKLSAgICAgICAgU2hhcmVkTXV0ZXhJbXBsPFJlYWRlclByaW9y
aXR5LCBUYWdfLCBBdG9tLCBCbG9ja0ltbWVkaWF0ZWx5Pjo6Ci0gICAgICAgICAgICBkZWZlcnJl
ZFJlYWRlcnNba01heERlZmVycmVkUmVhZGVycyAqIGtEZWZlcnJlZFNlcGFyYXRpb25GYWN0b3Jd
ID0KLSAgICAgICAgICAgICAgICB7fTsKLQotdGVtcGxhdGUgPAotICAgIGJvb2wgUmVhZGVyUHJp
b3JpdHksCi0gICAgdHlwZW5hbWUgVGFnXywKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWU+IGNsYXNz
IEF0b20sCi0gICAgYm9vbCBCbG9ja0ltbWVkaWF0ZWx5PgotRk9MTFlfU0hBUkVETVVURVhfVExT
IHVpbnQzMl90Ci0gICAgU2hhcmVkTXV0ZXhJbXBsPFJlYWRlclByaW9yaXR5LCBUYWdfLCBBdG9t
LCBCbG9ja0ltbWVkaWF0ZWx5Pjo6Ci0gICAgICAgIHRsc19sYXN0VG9rZW5sZXNzU2xvdCA9IDA7
Ci0KLXRlbXBsYXRlIDwKLSAgICBib29sIFJlYWRlclByaW9yaXR5LAotICAgIHR5cGVuYW1lIFRh
Z18sCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lPiBjbGFzcyBBdG9tLAotICAgIGJvb2wgQmxvY2tJ
bW1lZGlhdGVseT4KLUZPTExZX1NIQVJFRE1VVEVYX1RMUyB1aW50MzJfdAotICAgIFNoYXJlZE11
dGV4SW1wbDxSZWFkZXJQcmlvcml0eSwgVGFnXywgQXRvbSwgQmxvY2tJbW1lZGlhdGVseT46Ogot
ICAgICAgICB0bHNfbGFzdERlZmVycmVkUmVhZGVyU2xvdCA9IDA7Ci0KLXRlbXBsYXRlIDwKLSAg
ICBib29sIFJlYWRlclByaW9yaXR5LAotICAgIHR5cGVuYW1lIFRhZ18sCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lPiBjbGFzcyBBdG9tLAotICAgIGJvb2wgQmxvY2tJbW1lZGlhdGVseT4KLWJvb2wg
U2hhcmVkTXV0ZXhJbXBsPFJlYWRlclByaW9yaXR5LCBUYWdfLCBBdG9tLCBCbG9ja0ltbWVkaWF0
ZWx5Pjo6Ci0gICAgdHJ5VW5sb2NrVG9rZW5sZXNzU2hhcmVkRGVmZXJyZWQoKSB7Ci0gIGF1dG8g
YmVzdFNsb3QgPSB0bHNfbGFzdFRva2VubGVzc1Nsb3Q7Ci0gIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBrTWF4RGVmZXJyZWRSZWFkZXJzOyArK2kpIHsKLSAgICBhdXRvIHNsb3RQdHIgPSBkZWZl
cnJlZFJlYWRlcihiZXN0U2xvdCBeIGkpOwotICAgIGF1dG8gc2xvdFZhbHVlID0gc2xvdFB0ci0+
bG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICBpZiAoc2xvdFZhbHVlID09IHRv
a2VubGVzc1Nsb3RWYWx1ZSgpICYmCi0gICAgICAgIHNsb3RQdHItPmNvbXBhcmVfZXhjaGFuZ2Vf
c3Ryb25nKHNsb3RWYWx1ZSwgMCkpIHsKLSAgICAgIHRsc19sYXN0VG9rZW5sZXNzU2xvdCA9IGJl
c3RTbG90IF4gaTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXRlbXBsYXRlIDwKLSAgICBib29sIFJlYWRlclByaW9yaXR5LAotICAgIHR5cGVu
YW1lIFRhZ18sCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lPiBjbGFzcyBBdG9tLAotICAgIGJvb2wg
QmxvY2tJbW1lZGlhdGVseT4KLXRlbXBsYXRlIDxjbGFzcyBXYWl0Q29udGV4dD4KLWJvb2wgU2hh
cmVkTXV0ZXhJbXBsPFJlYWRlclByaW9yaXR5LCBUYWdfLCBBdG9tLCBCbG9ja0ltbWVkaWF0ZWx5
Pjo6Ci0gICAgbG9ja1NoYXJlZEltcGwodWludDMyX3QmIHN0YXRlLCBUb2tlbiogdG9rZW4sIFdh
aXRDb250ZXh0JiBjdHgpIHsKLSAgd2hpbGUgKHRydWUpIHsKLSAgICBpZiAoVU5MSUtFTFkoKHN0
YXRlICYga0hhc0UpICE9IDApICYmCi0gICAgICAgICF3YWl0Rm9yWmVyb0JpdHMoc3RhdGUsIGtI
YXNFLCBrV2FpdGluZ1MsIGN0eCkgJiYgY3R4LmNhblRpbWVPdXQoKSkgewotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHVpbnQzMl90IHNsb3QgPSB0bHNfbGFzdERlZmVycmVkUmVh
ZGVyU2xvdDsKLSAgICB1aW50cHRyX3Qgc2xvdFZhbHVlID0gMTsgLy8gYW55IG5vbi16ZXJvIHZh
bHVlIHdpbGwgZG8KLQotICAgIGJvb2wgY2FuQWxyZWFkeURlZmVyID0gKHN0YXRlICYga01heURl
ZmVyKSAhPSAwOwotICAgIGJvb2wgYWJvdmVEZWZlclRocmVzaG9sZCA9Ci0gICAgICAgIChzdGF0
ZSAmIGtIYXNTKSA+PSAoa051bVNoYXJlZFRvU3RhcnREZWZlcnJpbmcgLSAxKSAqIGtJbmNySGFz
UzsKLSAgICBib29sIGRyYWluSW5Qcm9ncmVzcyA9IFJlYWRlclByaW9yaXR5ICYmIChzdGF0ZSAm
IGtCZWd1bkUpICE9IDA7Ci0gICAgaWYgKGNhbkFscmVhZHlEZWZlciB8fCAoYWJvdmVEZWZlclRo
cmVzaG9sZCAmJiAhZHJhaW5JblByb2dyZXNzKSkgewotICAgICAgLyogVHJ5IHVzaW5nIHRoZSBt
b3N0IHJlY2VudCBzbG90IGZpcnN0LiAqLwotICAgICAgc2xvdFZhbHVlID0gZGVmZXJyZWRSZWFk
ZXIoc2xvdCktPmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgICBpZiAoc2xv
dFZhbHVlICE9IDApIHsKLSAgICAgICAgLy8gc3RhcnRpbmcgcG9pbnQgZm9yIG91ciBlbXB0eS1z
bG90IHNlYXJjaCwgY2FuIGNoYW5nZSBhZnRlcgotICAgICAgICAvLyBjYWxsaW5nIHdhaXRGb3Ja
ZXJvQml0cwotICAgICAgICB1aW50MzJfdCBiZXN0U2xvdCA9Ci0gICAgICAgICAgICAodWludDMy
X3QpZm9sbHk6OkFjY2Vzc1NwcmVhZGVyPEF0b20+OjpjdXJyZW50KGtNYXhEZWZlcnJlZFJlYWRl
cnMpOwotCi0gICAgICAgIC8vIGRlZmVycmVkIHJlYWRlcnMgYXJlIGFscmVhZHkgZW5hYmxlZCwg
b3IgaXQgaXMgdGltZSB0bwotICAgICAgICAvLyBlbmFibGUgdGhlbSBpZiB3ZSBjYW4gZmluZCBh
IHNsb3QKLSAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGtEZWZlcnJlZFNlYXJjaERp
c3RhbmNlOyArK2kpIHsKLSAgICAgICAgICBzbG90ID0gYmVzdFNsb3QgXiBpOwotICAgICAgICAg
IGFzc2VydChzbG90IDwga01heERlZmVycmVkUmVhZGVycyk7Ci0gICAgICAgICAgc2xvdFZhbHVl
ID0gZGVmZXJyZWRSZWFkZXIoc2xvdCktPmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7
Ci0gICAgICAgICAgaWYgKHNsb3RWYWx1ZSA9PSAwKSB7Ci0gICAgICAgICAgICAvLyBmb3VuZCBl
bXB0eSBzbG90Ci0gICAgICAgICAgICB0bHNfbGFzdERlZmVycmVkUmVhZGVyU2xvdCA9IHNsb3Q7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoc2xvdFZhbHVlICE9IDApIHsKLSAgICAgIC8vIG5vdCB5ZXQgZGVmZXJy
ZWQsIG9yIG5vIGVtcHR5IHNsb3RzCi0gICAgICBpZiAoc3RhdGVfLmNvbXBhcmVfZXhjaGFuZ2Vf
c3Ryb25nKHN0YXRlLCBzdGF0ZSArIGtJbmNySGFzUykpIHsKLSAgICAgICAgLy8gc3VjY2Vzc2Z1
bGx5IHJlY29yZGVkIHRoZSByZWFkIGxvY2sgaW5saW5lCi0gICAgICAgIGlmICh0b2tlbiAhPSBu
dWxscHRyKSB7Ci0gICAgICAgICAgdG9rZW4tPnR5cGVfID0gVG9rZW46OlR5cGU6OklOTElORV9T
SEFSRUQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICAv
LyBzdGF0ZSBpcyB1cGRhdGVkLCB0cnkgYWdhaW4KLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQot
ICAgIC8vIHJlY29yZCB0aGF0IGRlZmVycmVkIHJlYWRlcnMgbWlnaHQgYmUgaW4gdXNlIGlmIG5l
Y2Vzc2FyeQotICAgIGlmICgoc3RhdGUgJiBrTWF5RGVmZXIpID09IDApIHsKLSAgICAgIGlmICgh
c3RhdGVfLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHN0YXRlLCBzdGF0ZSB8IGtNYXlEZWZlcikp
IHsKLSAgICAgICAgLy8ga2VlcCBnb2luZyBpZiBDQVMgZmFpbGVkIGJlY2F1c2Ugc29tZWJvZHkg
ZWxzZSBzZXQgdGhlIGJpdAotICAgICAgICAvLyBmb3IgdXMKLSAgICAgICAgaWYgKChzdGF0ZSAm
IChrSGFzRSB8IGtNYXlEZWZlcikpICE9IGtNYXlEZWZlcikgewotICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBzdGF0ZSA9IHN0YXRlIHwga01heURlZmVy
OwotICAgIH0KLQotICAgIC8vIHRyeSB0byB1c2UgdGhlIHNsb3QKLSAgICBib29sIGdvdFNsb3Qg
PSBkZWZlcnJlZFJlYWRlcihzbG90KS0+Y29tcGFyZV9leGNoYW5nZV9zdHJvbmcoCi0gICAgICAg
IHNsb3RWYWx1ZSwKLSAgICAgICAgdG9rZW4gPT0gbnVsbHB0ciA/IHRva2VubGVzc1Nsb3RWYWx1
ZSgpIDogdG9rZW5mdWxTbG90VmFsdWUoKSk7Ci0KLSAgICAvLyBJZiB3ZSBnb3QgdGhlIHNsb3Qs
IHdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYW4gZXhjbHVzaXZlIGxvY2sKLSAgICAvLyBkaWRuJ3Qg
aGFwcGVuIHNpbmNlIHdlIGxhc3QgY2hlY2tlZC4gIElmIHdlIGRpZG4ndCBnZXQgdGhlIHNsb3Qg
d2UKLSAgICAvLyBuZWVkIHRvIHJlY2hlY2sgc3RhdGVfIGFueXdheSB0byBtYWtlIHN1cmUgd2Ug
ZG9uJ3Qgd2FzdGUgdG9vIG11Y2gKLSAgICAvLyB3b3JrLiAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0
aGF0IHNpbmNlIHdlIGNoZWNrZWQgc3RhdGVfIHNvbWVvbmUKLSAgICAvLyBoYXMgYWNxdWlyZWQg
YW5kIHJlbGVhc2VkIHRoZSB3cml0ZSBsb2NrLCBjbGVhcmluZyBrTWF5RGVmZXIuCi0gICAgLy8g
Qm90aCBjYXNlcyBhcmUgY292ZXJlZCBieSBsb29raW5nIGZvciB0aGUgcmVhZGVycy1wb3NzaWJs
ZSBiaXQsCi0gICAgLy8gYmVjYXVzZSBpdCBpcyBvZmYgd2hlbiB0aGUgZXhjbHVzaXZlIGxvY2sg
Yml0IGlzIHNldC4KLSAgICBzdGF0ZSA9IHN0YXRlXy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2Fj
cXVpcmUpOwotCi0gICAgaWYgKCFnb3RTbG90KSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0K
LSAgICBpZiAodG9rZW4gPT0gbnVsbHB0cikgewotICAgICAgdGxzX2xhc3RUb2tlbmxlc3NTbG90
ID0gc2xvdDsKLSAgICB9Ci0KLSAgICBpZiAoKHN0YXRlICYga01heURlZmVyKSAhPSAwKSB7Ci0g
ICAgICBhc3NlcnQoKHN0YXRlICYga0hhc0UpID09IDApOwotICAgICAgLy8gc3VjY2VzcwotICAg
ICAgaWYgKHRva2VuICE9IG51bGxwdHIpIHsKLSAgICAgICAgdG9rZW4tPnR5cGVfID0gVG9rZW46
OlR5cGU6OkRFRkVSUkVEX1NIQVJFRDsKLSAgICAgICAgdG9rZW4tPnNsb3RfID0gKHVpbnQxNl90
KXNsb3Q7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyByZWxl
YXNlIHRoZSBzbG90IGJlZm9yZSByZXRyeWluZwotICAgIGlmICh0b2tlbiA9PSBudWxscHRyKSB7
Ci0gICAgICAvLyBXZSBjYW4ndCByZWx5IG9uIHNsb3QuICBUb2tlbi1sZXNzIHNsb3QgdmFsdWVz
IGNhbiBiZSBmcmVlZCBieQotICAgICAgLy8gYW55IHVubG9ja19zaGFyZWQoKSwgc28gd2UgbmVl
ZCB0byBkbyB0aGUgZnVsbCBkZWZlcnJlZFJlYWRlcgotICAgICAgLy8gc2VhcmNoIGR1cmluZyB1
bmxvY2suICBVbmxpa2UgdW5sb2NrX3NoYXJlZCgpLCB3ZSBjYW4ndCB0cnVzdAotICAgICAgLy8g
a1ByZXZEZWZlciBoZXJlLiAgVGhpcyBkZWZlcnJlZCBsb2NrIGlzbid0IHZpc2libGUgdG8gbG9j
aygpCi0gICAgICAvLyAodGhhdCdzIHRoZSB3aG9sZSByZWFzb24gd2UncmUgdW5kb2luZyBpdCkg
c28gdGhlcmUgbWlnaHQgaGF2ZQotICAgICAgLy8gc3Vic2VxdWVudGx5IGJlZW4gYW4gdW5sb2Nr
KCkgYW5kIGxvY2soKSB3aXRoIG5vIGludGVydmVuaW5nCi0gICAgICAvLyB0cmFuc2l0aW9uIHRv
IGRlZmVycmVkIG1vZGUuCi0gICAgICBpZiAoIXRyeVVubG9ja1Rva2VubGVzc1NoYXJlZERlZmVy
cmVkKCkpIHsKLSAgICAgICAgdW5sb2NrU2hhcmVkSW5saW5lKCk7Ci0gICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgIGlmICghdHJ5VW5sb2NrU2hhcmVkRGVmZXJyZWQoc2xvdCkpIHsKLSAgICAg
ICAgdW5sb2NrU2hhcmVkSW5saW5lKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gV2UgZ290
IGhlcmUgbm90IGJlY2F1c2UgdGhlIGxvY2sgd2FzIHVuYXZhaWxhYmxlLCBidXQgYmVjYXVzZQot
ICAgIC8vIHdlIGxvc3QgYSBjb21wYXJlLWFuZC1zd2FwLiAgVHJ5LWxvY2sgaXMgdHlwaWNhbGx5
IGFsbG93ZWQgdG8KLSAgICAvLyBoYXZlIHNwdXJpb3VzIGZhaWx1cmVzLCBidXQgdGhlcmUgaXMg
bm8gbG9jayBlZmZpY2llbmN5IGdhaW4KLSAgICAvLyBmcm9tIGV4cGxvaXRpbmcgdGhhdCBmcmVl
ZG9tIGhlcmUuCi0gIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgZm9sbHkKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1NpbmdsZXRvbi1pbmwuaCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1NpbmdsZXRvbi1pbmwu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViMjFkZDUzMThjY2E2MDBjZGE1OTQ2
ZWNiNGZiMmJjZjZmMGU2MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9TaW5nbGV0
b24taW5sLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLW5hbWVzcGFj
ZSBkZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
YWcsIHR5cGVuYW1lIFZhdWx0VGFnPgotU2luZ2xldG9uSG9sZGVyPFQ+JiBTaW5nbGV0b25Ib2xk
ZXI8VD46OnNpbmdsZXRvbigpIHsKLSAgLyogbGlicmFyeS1sb2NhbCAqLyBzdGF0aWMgYXV0byBl
bnRyeSA9Ci0gICAgICBjcmVhdGVHbG9iYWw8U2luZ2xldG9uSG9sZGVyPFQ+LCBzdGQ6OnBhaXI8
VGFnLCBWYXVsdFRhZz4+KFtdKCkgewotICAgICAgICByZXR1cm4gbmV3IFNpbmdsZXRvbkhvbGRl
cjxUPih7dHlwZWlkKFQpLCB0eXBlaWQoVGFnKX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICpTaW5nbGV0b25WYXVsdDo6c2luZ2xldG9uPFZhdWx0VGFnPigpKTsKLSAg
ICAgIH0pOwotICByZXR1cm4gKmVudHJ5OwotfQotCi1bW25vcmV0dXJuXV0gdm9pZCBzaW5nbGV0
b25XYXJuRG91YmxlUmVnaXN0cmF0aW9uQW5kQWJvcnQoCi0gICAgY29uc3QgVHlwZURlc2NyaXB0
b3ImIHR5cGUpOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXZvaWQgU2luZ2xldG9uSG9sZGVy
PFQ+OjpyZWdpc3RlclNpbmdsZXRvbihDcmVhdGVGdW5jIGMsIFRlYXJkb3duRnVuYyB0KSB7Ci0g
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBlbnRyeV9sb2NrKG11dGV4Xyk7Ci0KLSAgaWYg
KHN0YXRlXyAhPSBTaW5nbGV0b25Ib2xkZXJTdGF0ZTo6Tm90UmVnaXN0ZXJlZCkgewotICAgIC8q
IFBvc3NpYmxlIGNhdXNlczoKLSAgICAgKgotICAgICAqIFlvdSBoYXZlIHR3byBpbnN0YW5jZXMg
b2YgdGhlIHNhbWUKLSAgICAgKiBmb2xseTo6U2luZ2xldG9uPENsYXNzPi4gUHJvYmFibHkgYmVj
YXVzZSB5b3UgZGVmaW5lIHRoZQotICAgICAqIHNpbmdsZXRvbiBpbiBhIGhlYWRlciBpbmNsdWRl
ZCBpbiBtdWx0aXBsZSBwbGFjZXM/IEluIGdlbmVyYWwsCi0gICAgICogZm9sbHk6OlNpbmdsZXRv
biBzaG91bGRuJ3QgYmUgaW4gdGhlIGhlYWRlciwgb25seSBvZmYgaW4gc29tZQotICAgICAqIGFu
b255bW91cyBuYW1lc3BhY2UgaW4gYSBjcHAgZmlsZS4gQ29kZSBuZWVkaW5nIHRoZSBzaW5nbGV0
b24KLSAgICAgKiB3aWxsIGZpbmQgaXQgd2hlbiB0aGF0IGNvZGUgcmVmZXJlbmNlcyBmb2xseTo6
U2luZ2xldG9uPENsYXNzPi4KLSAgICAgKgotICAgICAqIEFsdGVybmF0aXZlbHksIHlvdSBjb3Vs
ZCBoYXZlIDIgc2luZ2xldG9ucyB3aXRoIHRoZSBzYW1lIHR5cGUKLSAgICAgKiBkZWZpbmVkIHdp
dGggYSBkaWZmZXJlbnQgbmFtZSBpbiBhIC5jcHAgKHNvdXJjZSkgZmlsZS4gRm9yCi0gICAgICog
ZXhhbXBsZToKLSAgICAgKgotICAgICAqIFNpbmdsZXRvbjxpbnQ+IGEoW10geyByZXR1cm4gbmV3
IGludCgzKTsgfSk7Ci0gICAgICogU2luZ2xldG9uPGludD4gYihbXSB7IHJldHVybiBuZXcgaW50
KDQpOyB9KTsKLSAgICAgKgotICAgICAqLwotICAgIHNpbmdsZXRvbldhcm5Eb3VibGVSZWdpc3Ry
YXRpb25BbmRBYm9ydCh0eXBlKCkpOwotICB9Ci0KLSAgY3JlYXRlXyA9IHN0ZDo6bW92ZShjKTsK
LSAgdGVhcmRvd25fID0gc3RkOjptb3ZlKHQpOwotCi0gIHN0YXRlXyA9IFNpbmdsZXRvbkhvbGRl
clN0YXRlOjpEZWFkOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXZvaWQgU2luZ2xldG9u
SG9sZGVyPFQ+OjpyZWdpc3RlclNpbmdsZXRvbk1vY2soQ3JlYXRlRnVuYyBjLCBUZWFyZG93bkZ1
bmMgdCkgewotICBpZiAoc3RhdGVfID09IFNpbmdsZXRvbkhvbGRlclN0YXRlOjpOb3RSZWdpc3Rl
cmVkKSB7Ci0gICAgTE9HKEZBVEFMKSA8PCAiUmVnaXN0ZXJpbmcgbW9jayBiZWZvcmUgc2luZ2xl
dG9uIHdhcyByZWdpc3RlcmVkOiAiCi0gICAgICAgICAgICAgICA8PCB0eXBlKCkubmFtZSgpOwot
ICB9Ci0gIGlmIChzdGF0ZV8gPT0gU2luZ2xldG9uSG9sZGVyU3RhdGU6OkxpdmluZykgewotICAg
IGRlc3Ryb3lJbnN0YW5jZSgpOwotICB9Ci0KLSAgewotICAgIGF1dG8gY3JlYXRpb25PcmRlciA9
IHZhdWx0Xy5jcmVhdGlvbk9yZGVyXy53bG9jaygpOwotCi0gICAgYXV0byBpdCA9IHN0ZDo6Zmlu
ZChjcmVhdGlvbk9yZGVyLT5iZWdpbigpLCBjcmVhdGlvbk9yZGVyLT5lbmQoKSwgdHlwZSgpKTsK
LSAgICBpZiAoaXQgIT0gY3JlYXRpb25PcmRlci0+ZW5kKCkpIHsKLSAgICAgIGNyZWF0aW9uT3Jk
ZXItPmVyYXNlKGl0KTsKLSAgICB9Ci0gIH0KLQotICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRl
eD4gZW50cnlfbG9jayhtdXRleF8pOwotCi0gIGNyZWF0ZV8gPSBzdGQ6Om1vdmUoYyk7Ci0gIHRl
YXJkb3duXyA9IHN0ZDo6bW92ZSh0KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1UKiBT
aW5nbGV0b25Ib2xkZXI8VD46OmdldCgpIHsKLSAgaWYgKExJS0VMWShzdGF0ZV8ubG9hZChzdGQ6
Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSA9PQotICAgICAgICAgICAgIFNpbmdsZXRvbkhvbGRlclN0
YXRlOjpMaXZpbmcpKSB7Ci0gICAgcmV0dXJuIGluc3RhbmNlX3B0cl87Ci0gIH0KLSAgY3JlYXRl
SW5zdGFuY2UoKTsKLQotICBpZiAoaW5zdGFuY2Vfd2Vha18uZXhwaXJlZCgpKSB7Ci0gICAgdGhy
b3cgc3RkOjpydW50aW1lX2Vycm9yKAotICAgICAgICAiUmF3IHBvaW50ZXIgdG8gYSBzaW5nbGV0
b24gcmVxdWVzdGVkIGFmdGVyIGl0cyBkZXN0cnVjdGlvbi4iCi0gICAgICAgICIgU2luZ2xldG9u
IHR5cGUgaXM6ICIgKwotICAgICAgICB0eXBlKCkubmFtZSgpKTsKLSAgfQotCi0gIHJldHVybiBp
bnN0YW5jZV9wdHJfOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0ZDo6d2Vha19wdHI8
VD4gU2luZ2xldG9uSG9sZGVyPFQ+OjpnZXRfd2VhaygpIHsKLSAgaWYgKFVOTElLRUxZKHN0YXRl
Xy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICE9Ci0gICAgICAgICAgICAgICBTaW5n
bGV0b25Ib2xkZXJTdGF0ZTo6TGl2aW5nKSkgewotICAgIGNyZWF0ZUluc3RhbmNlKCk7Ci0gIH0K
LQotICByZXR1cm4gaW5zdGFuY2Vfd2Vha187Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
c3RkOjpzaGFyZWRfcHRyPFQ+IFNpbmdsZXRvbkhvbGRlcjxUPjo6dHJ5X2dldCgpIHsKLSAgaWYg
KFVOTElLRUxZKHN0YXRlXy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICE9Ci0gICAg
ICAgICAgICAgICBTaW5nbGV0b25Ib2xkZXJTdGF0ZTo6TGl2aW5nKSkgewotICAgIGNyZWF0ZUlu
c3RhbmNlKCk7Ci0gIH0KLQotICByZXR1cm4gaW5zdGFuY2Vfd2Vha18ubG9jaygpOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWZvbGx5OjpSZWFkTW9zdGx5U2hhcmVkUHRyPFQ+IFNpbmds
ZXRvbkhvbGRlcjxUPjo6dHJ5X2dldF9mYXN0KCkgewotICBpZiAoVU5MSUtFTFkoc3RhdGVfLmxv
YWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgIT0KLSAgICAgICAgICAgICAgIFNpbmdsZXRv
bkhvbGRlclN0YXRlOjpMaXZpbmcpKSB7Ci0gICAgY3JlYXRlSW5zdGFuY2UoKTsKLSAgfQotCi0g
IHJldHVybiBpbnN0YW5jZV93ZWFrX2Zhc3RfLmxvY2soKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci1ib29sIFNpbmdsZXRvbkhvbGRlcjxUPjo6aGFzTGl2ZUluc3RhbmNlKCkgewotICBy
ZXR1cm4gIWluc3RhbmNlX3dlYWtfLmV4cGlyZWQoKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci12b2lkIFNpbmdsZXRvbkhvbGRlcjxUPjo6cHJlRGVzdHJveUluc3RhbmNlKAotICAgIFJl
YWRNb3N0bHlNYWluUHRyRGVsZXRlcjw+JiBkZWxldGVyKSB7Ci0gIGluc3RhbmNlX2NvcHlfID0g
aW5zdGFuY2VfOwotICBkZWxldGVyLmFkZChzdGQ6Om1vdmUoaW5zdGFuY2VfKSk7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotdm9pZCBTaW5nbGV0b25Ib2xkZXI8VD46OmRlc3Ryb3lJbnN0
YW5jZSgpIHsKLSAgc3RhdGVfID0gU2luZ2xldG9uSG9sZGVyU3RhdGU6OkRlYWQ7Ci0gIGluc3Rh
bmNlXy5yZXNldCgpOwotICBpbnN0YW5jZV9jb3B5Xy5yZXNldCgpOwotICBpZiAoZGVzdHJveV9i
YXRvbl8pIHsKLSAgICBjb25zdGV4cHIgc3RkOjpjaHJvbm86OnNlY29uZHMga0Rlc3Ryb3lXYWl0
VGltZXs1fTsKLSAgICBhdXRvIGxhc3RfcmVmZXJlbmNlX3JlbGVhc2VkID0gZGVzdHJveV9iYXRv
bl8tPnRpbWVkX3dhaXQoCi0gICAgICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygp
ICsga0Rlc3Ryb3lXYWl0VGltZSk7Ci0gICAgaWYgKGxhc3RfcmVmZXJlbmNlX3JlbGVhc2VkKSB7
Ci0gICAgICB0ZWFyZG93bl8oaW5zdGFuY2VfcHRyXyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBy
aW50X2Rlc3RydWN0b3Jfc3RhY2tfdHJhY2VfLT5zdG9yZSh0cnVlKTsKLSAgICAgIExPRyhFUlJP
UikgPDwgIlNpbmdsZXRvbiBvZiB0eXBlICIgPDwgdHlwZSgpLm5hbWUoKSA8PCAiIGhhcyBhICIK
LSAgICAgICAgICAgICAgICAgPDwgImxpdmluZyByZWZlcmVuY2UgYXQgZGVzdHJveUluc3RhbmNl
cyB0aW1lOyBiZXdhcmUhIFJhdyAiCi0gICAgICAgICAgICAgICAgIDw8ICJwb2ludGVyIGlzICIg
PDwgaW5zdGFuY2VfcHRyXyA8PCAiLiBJdCBpcyB2ZXJ5IGxpa2VseSAiCi0gICAgICAgICAgICAg
ICAgIDw8ICJ0aGF0IHNvbWUgb3RoZXIgc2luZ2xldG9uIGlzIGhvbGRpbmcgYSBzaGFyZWRfcHRy
IHRvIGl0LiAiCi0gICAgICAgICAgICAgICAgIDw8ICJUaGlzIHNpbmdsZXRvbiB3aWxsIGJlIGxl
YWtlZCAoZXZlbiBpZiBhIHNoYXJlZF9wdHIgdG8gaXQgIgotICAgICAgICAgICAgICAgICA8PCAi
aXMgZXZlbnR1YWxseSByZWxlYXNlZCkuIgotICAgICAgICAgICAgICAgICA8PCAiTWFrZSBzdXJl
IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZXNlIHNpbmdsZXRvbnMgYXJlICIKLSAgICAgICAgICAg
ICAgICAgPDwgInByb3Blcmx5IGRlZmluZWQuIjsKLSAgICB9Ci0gIH0KLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci1TaW5nbGV0b25Ib2xkZXI8VD46OlNpbmdsZXRvbkhvbGRlcigKLSAgICBU
eXBlRGVzY3JpcHRvciB0eXBlRGVzYywKLSAgICBTaW5nbGV0b25WYXVsdCYgdmF1bHQpCi0gICAg
OiBTaW5nbGV0b25Ib2xkZXJCYXNlKHR5cGVEZXNjKSwgdmF1bHRfKHZhdWx0KSB7fQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KLWJvb2wgU2luZ2xldG9uSG9sZGVyPFQ+OjpjcmVhdGlvblN0YXJ0
ZWQoKSB7Ci0gIC8vIElmIGFsaXZlLCB0aGVuIGNyZWF0aW9uIHdhcyBvZiBjb3Vyc2Ugc3RhcnRl
ZC4KLSAgLy8gVGhpcyBpcyBmbGlwcGVkIGFmdGVyIGNyZWF0aW5nX3RocmVhZF8gd2FzIHNldCwg
YW5kIGJlZm9yZSBpdCB3YXMgcmVzZXQuCi0gIGlmIChzdGF0ZV8ubG9hZChzdGQ6Om1lbW9yeV9v
cmRlcl9hY3F1aXJlKSA9PSBTaW5nbGV0b25Ib2xkZXJTdGF0ZTo6TGl2aW5nKSB7Ci0gICAgcmV0
dXJuIHRydWU7Ci0gIH0KLQotICAvLyBOb3QgeWV0IGJ1aWx0LiAgSXMgaXQgY3VycmVudGx5IGlu
IHByb2dyZXNzPwotICBpZiAoY3JlYXRpbmdfdGhyZWFkXy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVy
X2FjcXVpcmUpICE9IHN0ZDo6dGhyZWFkOjppZCgpKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0K
LQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdm9pZCBTaW5n
bGV0b25Ib2xkZXI8VD46OmNyZWF0ZUluc3RhbmNlKCkgewotICBpZiAoY3JlYXRpbmdfdGhyZWFk
Xy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpID09Ci0gICAgICAgIHN0ZDo6dGhpc190
aHJlYWQ6OmdldF9pZCgpKSB7Ci0gICAgTE9HKEZBVEFMKSA8PCAiY2lyY3VsYXIgc2luZ2xldG9u
IGRlcGVuZGVuY3k6ICIgPDwgdHlwZSgpLm5hbWUoKTsKLSAgfQotCi0gIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBlbnRyeV9sb2NrKG11dGV4Xyk7Ci0gIGlmIChzdGF0ZV8ubG9hZChzdGQ6
Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSA9PSBTaW5nbGV0b25Ib2xkZXJTdGF0ZTo6TGl2aW5nKSB7
Ci0gICAgcmV0dXJuOwotICB9Ci0gIGlmIChzdGF0ZV8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9h
Y3F1aXJlKSA9PQotICAgICAgICBTaW5nbGV0b25Ib2xkZXJTdGF0ZTo6Tm90UmVnaXN0ZXJlZCkg
ewotICAgIGF1dG8gcHRyID0gU2luZ2xldG9uVmF1bHQ6OnN0YWNrVHJhY2VHZXR0ZXIoKS5sb2Fk
KCk7Ci0gICAgTE9HKEZBVEFMKSA8PCAiQ3JlYXRpbmcgaW5zdGFuY2UgZm9yIHVucmVnaXN0ZXJl
ZCBzaW5nbGV0b246ICIKLSAgICAgICAgICAgICAgIDw8IHR5cGUoKS5uYW1lKCkgPDwgIlxuIgot
ICAgICAgICAgICAgICAgPDwgIlN0YWNrdHJhY2U6IgotICAgICAgICAgICAgICAgPDwgIlxuIgot
ICAgICAgICAgICAgICAgPDwgKHB0ciA/ICgqcHRyKSgpIDogIihub3QgYXZhaWxhYmxlKSIpOwot
ICB9Ci0KLSAgaWYgKHN0YXRlXy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpID09IFNp
bmdsZXRvbkhvbGRlclN0YXRlOjpMaXZpbmcpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBTQ09Q
RV9FWElUIHsKLSAgICAvLyBDbGVhbiB1cCBjcmVhdG9yIHRocmVhZCB3aGVuIGNvbXBsZXRlLCBh
bmQgYWxzbywgaW4gY2FzZSBvZiBlcnJvcnMgaGVyZSwKLSAgICAvLyBzbyB0aGF0IHN1YnNlcXVl
bnQgYXR0ZW1wdHMgZG9uJ3QgdGhpbmsgdGhpcyBpcyBzdGlsbCBpbiB0aGUgcHJvY2VzcyBvZgot
ICAgIC8vIGJlaW5nIGJ1aWx0LgotICAgIGNyZWF0aW5nX3RocmVhZF8uc3RvcmUoc3RkOjp0aHJl
YWQ6OmlkKCksIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICB9OwotCi0gIGNyZWF0aW5n
X3RocmVhZF8uc3RvcmUoc3RkOjp0aGlzX3RocmVhZDo6Z2V0X2lkKCksIHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGVhc2UpOwotCi0gIGF1dG8gc3RhdGUgPSB2YXVsdF8uc3RhdGVfLnJsb2NrKCk7Ci0g
IGlmICh2YXVsdF8udHlwZV8gIT0gU2luZ2xldG9uVmF1bHQ6OlR5cGU6OlJlbGF4ZWQgJiYKLSAg
ICAgICFzdGF0ZS0+cmVnaXN0cmF0aW9uQ29tcGxldGUpIHsKLSAgICBhdXRvIHN0YWNrX3RyYWNl
X2dldHRlciA9IFNpbmdsZXRvblZhdWx0OjpzdGFja1RyYWNlR2V0dGVyKCkubG9hZCgpOwotICAg
IGF1dG8gc3RhY2tfdHJhY2UgPSBzdGFja190cmFjZV9nZXR0ZXIgPyBzdGFja190cmFjZV9nZXR0
ZXIoKSA6ICIiOwotICAgIGlmICghc3RhY2tfdHJhY2UuZW1wdHkoKSkgewotICAgICAgc3RhY2tf
dHJhY2UgPSAiU3RhY2sgdHJhY2U6XG4iICsgc3RhY2tfdHJhY2U7Ci0gICAgfQotCi0gICAgTE9H
KEZBVEFMKSA8PCAiU2luZ2xldG9uICIgPDwgdHlwZSgpLm5hbWUoKSA8PCAiIHJlcXVlc3RlZCBi
ZWZvcmUgIgotICAgICAgICAgICAgICAgPDwgInJlZ2lzdHJhdGlvbkNvbXBsZXRlKCkgY2FsbC5c
biIKLSAgICAgICAgICAgICAgIDw8ICJUaGlzIHVzdWFsbHkgbWVhbnMgdGhhdCBlaXRoZXIgbWFp
bigpIG5ldmVyIGNhbGxlZCAiCi0gICAgICAgICAgICAgICA8PCAiZm9sbHk6OmluaXQsIG9yIHNp
bmdsZXRvbiB3YXMgcmVxdWVzdGVkIGJlZm9yZSBtYWluKCkgIgotICAgICAgICAgICAgICAgPDwg
Iih3aGljaCBpcyBub3QgYWxsb3dlZCkuXG4iCi0gICAgICAgICAgICAgICA8PCBzdGFja190cmFj
ZTsKLSAgfQotICBpZiAoc3RhdGUtPnN0YXRlID09IFNpbmdsZXRvblZhdWx0OjpTaW5nbGV0b25W
YXVsdFN0YXRlOjpRdWllc2NpbmcpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBhdXRvIGRlc3Ry
b3lfYmF0b24gPSBzdGQ6Om1ha2Vfc2hhcmVkPGZvbGx5OjpCYXRvbjw+PigpOwotICBhdXRvIHBy
aW50X2Rlc3RydWN0b3Jfc3RhY2tfdHJhY2UgPQotICAgIHN0ZDo6bWFrZV9zaGFyZWQ8c3RkOjph
dG9taWM8Ym9vbD4+KGZhbHNlKTsKLQotICAvLyBDYW4ndCB1c2UgbWFrZV9zaGFyZWQgLS0gbm8g
c3VwcG9ydCBmb3IgYSBjdXN0b20gZGVsZXRlciwgc2FkbHkuCi0gIHN0ZDo6c2hhcmVkX3B0cjxU
PiBpbnN0YW5jZSgKLSAgICAgIGNyZWF0ZV8oKSwKLSAgICAgIFsgZGVzdHJveV9iYXRvbiwgcHJp
bnRfZGVzdHJ1Y3Rvcl9zdGFja190cmFjZSwgdHlwZSA9IHR5cGUoKSBdKAotICAgICAgICAgIFQq
KSBtdXRhYmxlIHsKLSAgICAgICAgZGVzdHJveV9iYXRvbi0+cG9zdCgpOwotICAgICAgICBpZiAo
cHJpbnRfZGVzdHJ1Y3Rvcl9zdGFja190cmFjZS0+bG9hZCgpKSB7Ci0gICAgICAgICAgc3RkOjpz
dHJpbmcgb3V0cHV0ID0gIlNpbmdsZXRvbiAiICsgdHlwZS5uYW1lKCkgKyAiIHdhcyByZWxlYXNl
ZC5cbiI7Ci0KLSAgICAgICAgICBhdXRvIHN0YWNrX3RyYWNlX2dldHRlciA9IFNpbmdsZXRvblZh
dWx0OjpzdGFja1RyYWNlR2V0dGVyKCkubG9hZCgpOwotICAgICAgICAgIGF1dG8gc3RhY2tfdHJh
Y2UgPSBzdGFja190cmFjZV9nZXR0ZXIgPyBzdGFja190cmFjZV9nZXR0ZXIoKSA6ICIiOwotICAg
ICAgICAgIGlmIChzdGFja190cmFjZS5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBvdXRwdXQgKz0g
IkZhaWxlZCB0byBnZXQgcmVsZWFzZSBzdGFjayB0cmFjZS4iOwotICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBvdXRwdXQgKz0gIlJlbGVhc2Ugc3RhY2sgdHJhY2U6XG4iOwotICAgICAg
ICAgICAgb3V0cHV0ICs9IHN0YWNrX3RyYWNlOwotICAgICAgICAgIH0KLQotICAgICAgICAgIExP
RyhFUlJPUikgPDwgb3V0cHV0OwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAvLyBXZSBzaG91
bGQgc2NoZWR1bGUgZGVzdHJveUluc3RhbmNlcygpIG9ubHkgYWZ0ZXIgdGhlIHNpbmdsZXRvbiB3
YXMKLSAgLy8gY3JlYXRlZC4gVGhpcyB3aWxsIGVuc3VyZSBpdCB3aWxsIGJlIGRlc3Ryb3llZCBi
ZWZvcmUgc2luZ2xldG9ucywKLSAgLy8gbm90IG1hbmFnZWQgYnkgZm9sbHk6OlNpbmdsZXRvbiwg
d2hpY2ggd2VyZSBpbml0aWFsaXplZCBpbiBpdHMKLSAgLy8gY29uc3RydWN0b3IKLSAgU2luZ2xl
dG9uVmF1bHQ6OnNjaGVkdWxlRGVzdHJveUluc3RhbmNlcygpOwotCi0gIGluc3RhbmNlX3dlYWtf
ID0gaW5zdGFuY2U7Ci0gIGluc3RhbmNlX3B0cl8gPSBpbnN0YW5jZS5nZXQoKTsKLSAgaW5zdGFu
Y2VfLnJlc2V0KHN0ZDo6bW92ZShpbnN0YW5jZSkpOwotICBpbnN0YW5jZV93ZWFrX2Zhc3RfID0g
aW5zdGFuY2VfOwotCi0gIGRlc3Ryb3lfYmF0b25fID0gc3RkOjptb3ZlKGRlc3Ryb3lfYmF0b24p
OwotICBwcmludF9kZXN0cnVjdG9yX3N0YWNrX3RyYWNlXyA9IHN0ZDo6bW92ZShwcmludF9kZXN0
cnVjdG9yX3N0YWNrX3RyYWNlKTsKLQotICAvLyBUaGlzIGhhcyB0byBiZSB0aGUgbGFzdCBzdGVw
LCBiZWNhdXNlIG9uY2Ugc3RhdGUgaXMgTGl2aW5nIG90aGVyIHRocmVhZHMKLSAgLy8gbWF5IGFj
Y2VzcyBpbnN0YW5jZSBhbmQgaW5zdGFuY2Vfd2VhayB3L28gc3luY2hyb25pemF0aW9uLgotICBz
dGF0ZV8uc3RvcmUoU2luZ2xldG9uSG9sZGVyU3RhdGU6OkxpdmluZywgc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsZWFzZSk7Ci0KLSAgdmF1bHRfLmNyZWF0aW9uT3JkZXJfLndsb2NrKCktPnB1c2hfYmFj
ayh0eXBlKCkpOwotfQotCi19Ci0KLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1NpbmdsZXRvbi5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvZm9sbHkvU2luZ2xldG9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDY0YjZmMzc1OTI1ODAzNTljNTEyNGM0NmEwMTA3NzA2YTU0NTUzNGIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvU2luZ2xldG9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
MzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8v
IFNpbmdsZXRvblZhdWx0IC0gYSBsaWJyYXJ5IHRvIG1hbmFnZSB0aGUgY3JlYXRpb24gYW5kIGRl
c3RydWN0aW9uCi0vLyBvZiBpbnRlcmRlcGVuZGVudCBzaW5nbGV0b25zLgotLy8KLS8vIFJlY29t
bWVuZGVkIHVzYWdlIG9mIHRoaXMgY2xhc3M6IHN1cHBvc2UgeW91IGhhdmUgYSBjbGFzcwotLy8g
Y2FsbGVkIE15RXhwZW5zaXZlU2VydmljZSwgYW5kIHlvdSBvbmx5IHdhbnQgdG8gY29uc3RydWN0
IG9uZSAoaWUsCi0vLyBpdCdzIGEgc2luZ2xldG9uKSwgYnV0IHlvdSBvbmx5IHdhbnQgdG8gY29u
c3RydWN0IGl0IGlmIGl0IGlzIHVzZWQuCi0vLwotLy8gSW4geW91ciAuaCBmaWxlOgotLy8gY2xh
c3MgTXlFeHBlbnNpdmVTZXJ2aWNlIHsKLS8vICAgLy8gQ2F1dGlvbiAtIG1heSByZXR1cm4gYSBu
dWxsIHB0ciBkdXJpbmcgc3RhcnR1cCBhbmQgc2h1dGRvd24uCi0vLyAgIHN0YXRpYyBzdGQ6OnNo
YXJlZF9wdHI8TXlFeHBlbnNpdmVTZXJ2aWNlPiBnZXRJbnN0YW5jZSgpOwotLy8gICAuLi4uCi0v
LyB9OwotLy8KLS8vIEluIHlvdXIgLmNwcCBmaWxlOgotLy8gbmFtZXNwYWNlIHsgc3RydWN0IFBy
aXZhdGVUYWcge307IH0KLS8vIHN0YXRpYyBmb2xseTo6U2luZ2xldG9uPE15RXhwZW5zaXZlU2Vy
dmljZSwgUHJpdmF0ZVRhZz4gdGhlX3NpbmdsZXRvbjsKLS8vIHN0ZDo6c2hhcmVkX3B0cjxNeUV4
cGVuc2l2ZVNlcnZpY2U+IE15RXhwZW5zaXZlU2VydmljZTo6Z2V0SW5zdGFuY2UoKSB7Ci0vLyAg
IHJldHVybiB0aGVfc2luZ2xldG9uLnRyeV9nZXQoKTsKLS8vIH0KLS8vCi0vLyBDb2RlIGluIG90
aGVyIG1vZHVsZXMgY2FuIGFjY2VzcyBpdCB2aWE6Ci0vLwotLy8gYXV0byBpbnN0YW5jZSA9IE15
RXhwZW5zaXZlU2VydmljZTo6Z2V0SW5zdGFuY2UoKTsKLS8vCi0vLyBBZHZhbmNlZCB1c2FnZSBh
bmQgbm90ZXM6Ci0vLwotLy8gWW91IGNhbiBhbHNvIGFjY2VzcyBhIHNpbmdsZXRvbiBpbnN0YW5j
ZSB3aXRoCi0vLyBgU2luZ2xldG9uPE9iamVjdFR5cGUsIFRhZ1R5cGU+Ojp0cnlfZ2V0KClgLiBX
ZSByZWNvbW1lbmQKLS8vIHRoYXQgeW91IHByZWZlciB0aGUgZm9ybSBgdGhlX3NpbmdsZXRvbi50
cnlfZ2V0KClgIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGF0Ci0vLyBgdGhlX3NpbmdsZXRvbmAgaXMg
dXNlZCBhbmQgY2Fubm90IGJlIGdhcmJhZ2UtY29sbGVjdGVkIGR1cmluZyBsaW5raW5nOiB0aGlz
Ci0vLyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgY29uc3RydWN0b3Igb2YgYHRoZV9zaW5nbGV0
b25gIGlzIHdoYXQgcmVnaXN0ZXJzIGl0Ci0vLyB0byB0aGUgU2luZ2xldG9uVmF1bHQuCi0vLwot
Ly8gVGhlIHNpbmdsZXRvbiB3aWxsIGJlIGNyZWF0ZWQgb24gZGVtYW5kLiAgSWYgdGhlIGNvbnN0
cnVjdG9yIGZvcgotLy8gTXlFeHBlbnNpdmVTZXJ2aWNlIGFjdHVhbGx5IG1ha2VzIHVzZSBvZiAq
YW5vdGhlciogU2luZ2xldG9uLCB0aGVuCi0vLyB0aGUgcmlnaHQgdGhpbmcgd2lsbCBoYXBwZW4g
LS0gdGhhdCBvdGhlciBzaW5nbGV0b24gd2lsbCBjb21wbGV0ZQotLy8gY29uc3RydWN0aW9uIGJl
Zm9yZSBnZXQoKSByZXR1cm5zLiAgSG93ZXZlciwgaW4gdGhlIGV2ZW50IG9mIGEKLS8vIGNpcmN1
bGFyIGRlcGVuZGVuY3ksIGEgcnVudGltZSBlcnJvciB3aWxsIG9jY3VyLgotLy8KLS8vIFlvdSBj
YW4gaGF2ZSBtdWx0aXBsZSBzaW5nbGV0b25zIG9mIHRoZSBzYW1lIHVuZGVybHlpbmcgdHlwZSwg
YnV0Ci0vLyBlYWNoIG11c3QgYmUgZ2l2ZW4gYSB1bmlxdWUgdGFnLiBJZiBubyB0YWcgaXMgc3Bl
Y2lmaWVkIGEgZGVmYXVsdCB0YWcgaXMKLS8vIHVzZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1
c2UgYSB0YWcgZnJvbSBhbiBhbm9ueW1vdXMgbmFtZXNwYWNlIHByaXZhdGUgdG8KLS8vIHlvdXIg
aW1wbGVtZW50YXRpb24gZmlsZSwgYXMgdGhpcyBlbnN1cmVzIHRoYXQgdGhlIHNpbmdsZXRvbiBp
cyBvbmx5Ci0vLyBhdmFpbGFibGUgdmlhIHlvdXIgaW50ZXJmYWNlIGFuZCBub3QgYWxzbyB0aHJv
dWdoIFNpbmdsZXRvbjxUPjo6dHJ5X2dldCgpCi0vLwotLy8gbmFtZXNwYWNlIHsKLS8vIHN0cnVj
dCBUYWcxIHt9OwotLy8gc3RydWN0IFRhZzIge307Ci0vLyBmb2xseTo6U2luZ2xldG9uPE15RXhw
ZW5zaXZlU2VydmljZT4gc19kZWZhdWx0OwotLy8gZm9sbHk6OlNpbmdsZXRvbjxNeUV4cGVuc2l2
ZVNlcnZpY2UsIFRhZzE+IHMxOwotLy8gZm9sbHk6OlNpbmdsZXRvbjxNeUV4cGVuc2l2ZVNlcnZp
Y2UsIFRhZzI+IHMyOwotLy8gfQotLy8gLi4uCi0vLyBNeUV4cGVuc2l2ZVNlcnZpY2UqIHN2Y19k
ZWZhdWx0ID0gc19kZWZhdWx0LmdldCgpOwotLy8gTXlFeHBlbnNpdmVTZXJ2aWNlKiBzdmMxID0g
czEuZ2V0KCk7Ci0vLyBNeUV4cGVuc2l2ZVNlcnZpY2UqIHN2YzIgPSBzMi5nZXQoKTsKLS8vCi0v
LyBCeSBkZWZhdWx0LCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIGlzIGNvbnN0cnVjdGVkIHZpYSBu
ZXcgYW5kCi0vLyBkZWxldGVkIHZpYSBkZWxldGUsIGJ1dCB0aGlzIGlzIGNvbmZpZ3VyYWJsZToK
LS8vCi0vLyBuYW1lc3BhY2UgeyBmb2xseTo6U2luZ2xldG9uPE15RXhwZW5zaXZlU2VydmljZT4g
dGhlX3NpbmdsZXRvbihjcmVhdGUsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95KTsgfQotLy8KLS8vIFdoZXJl
IGNyZWF0ZSBhbmQgZGVzdHJveSBhcmUgZnVuY3Rpb25zLCBTaW5nbGV0b248VD46OkNyZWF0ZUZ1
bmMKLS8vIFNpbmdsZXRvbjxUPjo6VGVhcmRvd25GdW5jLgotLy8KLS8vIEZvciBleGFtcGxlLCBp
ZiB5b3UgbmVlZCB0byBwYXNzIGFyZ3VtZW50cyB0byB5b3VyIGNsYXNzJ3MgY29uc3RydWN0b3I6
Ci0vLyAgIGNsYXNzIFggewotLy8gICAgcHVibGljOgotLy8gICAgICBYKGludCBhMSwgc3RkOjpz
dHJpbmcgYTIpOwotLy8gICAgLy8gLi4uCi0vLyAgIH0KLS8vIE1ha2UgeW91ciBzaW5nbGV0b24g
bGlrZSB0aGlzOgotLy8gICBmb2xseTo6U2luZ2xldG9uPFg+IHNpbmdsZXRvbl94KFtdKCkgeyBy
ZXR1cm4gbmV3IFgoNDIsICJmb28iKTsgfSk7Ci0vLwotLy8gVGhlIGFib3ZlIGV4YW1wbGVzIGRl
dGFpbCBhIHNpdHVhdGlvbiB3aGVyZSBhbiBleHBlbnNpdmUgc2luZ2xldG9uIGlzIGxvYWRlZAot
Ly8gb24tZGVtYW5kICh0aHVzIG9ubHkgaWYgbmVlZGVkKS4gIEhvd2V2ZXIgaWYgdGhlcmUgaXMg
YW4gZXhwZW5zaXZlIHNpbmdsZXRvbgotLy8gdGhhdCB3aWxsIGxpa2VseSBiZSBuZWVkZWQsIGFu
ZCBpbml0aWFsaXphdGlvbiB0YWtlcyBhIHBvdGVudGlhbGx5IGxvbmcgdGltZSwKLS8vIGUuZy4g
d2hpbGUgaW5pdGlhbGl6aW5nLCBwYXJzaW5nIHNvbWUgZmlsZXMsIHRhbGtpbmcgdG8gcmVtb3Rl
IHNlcnZpY2VzLAotLy8gbWFraW5nIHVzZXMgb2Ygb3RoZXIgc2luZ2xldG9ucywgYW5kIHNvIG9u
LCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhvc2UgY2FuCi0vLyBiZSBzY2hlZHVsZWQgdXAgZnJv
bnQsIG9yICJlYWdlcmx5Ii4KLS8vCi0vLyBJbiB0aGF0IGNhc2UgdGhlIHNpbmdsZXRvbiBjYW4g
YmUgZGVjbGFyZWQgdGhpcyB3YXk6Ci0vLwotLy8gbmFtZXNwYWNlIHsKLS8vIGF1dG8gdGhlX3Np
bmdsZXRvbiA9Ci0vLyAgICAgZm9sbHk6OlNpbmdsZXRvbjxNeUV4cGVuc2l2ZVNlcnZpY2U+KC8q
IG9wdGlvbmFsIGNyZWF0ZSwgZGVzdHJveSBhcmdzICovKQotLy8gICAgIC5zaG91bGRFYWdlcklu
aXQoKTsKLS8vIH0KLS8vCi0vLyBUaGlzIHdheSB0aGUgc2luZ2xldG9uJ3MgaW5zdGFuY2UgaXMg
YnVpbHQgYXQgcHJvZ3JhbSBpbml0aWFsaXphdGlvbiwKLS8vIGlmIHRoZSBwcm9ncmFtIG9wdGVk
LWluIHRvIHRoYXQgZmVhdHVyZSBieSBjYWxsaW5nICJkb0VhZ2VySW5pdCIgb3IKLS8vICJkb0Vh
Z2VySW5pdFZpYSIgZHVyaW5nIGl0cyBzdGFydHVwLgotLy8KLS8vIFdoYXQgaWYgeW91IG5lZWQg
dG8gZGVzdHJveSBhbGwgb2YgeW91ciBzaW5nbGV0b25zPyAgU2F5LCBzb21lIG9mCi0vLyB5b3Vy
IHNpbmdsZXRvbnMgbWFuYWdlIHRocmVhZHMsIGJ1dCB5b3UgbmVlZCB0byBmb3JrPyAgT3IgeW91
ciB1bml0Ci0vLyB0ZXN0IHdhbnRzIHRvIGNsZWFuIHVwIGFsbCBnbG9iYWwgc3RhdGU/ICBUaGVu
IHlvdSBjYW4gY2FsbAotLy8gU2luZ2xldG9uVmF1bHQ6OnNpbmdsZXRvbigpLT5kZXN0cm95SW5z
dGFuY2VzKCksIHdoaWNoIGludm9rZXMgdGhlCi0vLyBUZWFyZG93bkZ1bmMgZm9yIGVhY2ggc2lu
Z2xldG9uLCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0aGV5IHdlcmUKLS8vIGNyZWF0ZWQuICBJdCBp
cyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB5b3VyIHNpbmdsZXRvbnMgY2FuCi0vLyBo
YW5kbGUgY2FzZXMgd2hlcmUgdGhlIHNpbmdsZXRvbnMgdGhleSBkZXBlbmQgb24gZ28gYXdheSwg
aG93ZXZlci4KLS8vIFNpbmdsZXRvbnMgd29uJ3QgYmUgcmVjcmVhdGVkIGFmdGVyIGRlc3Ryb3lJ
bnN0YW5jZXMgY2FsbC4gSWYgeW91Ci0vLyB3YW50IHRvIHJlLWVuYWJsZSBzaW5nbGV0b24gY3Jl
YXRpb24gKHNheSBhZnRlciBmb3JrIHdhcyBjYWxsZWQpIHlvdQotLy8gc2hvdWxkIGNhbGwgcmVl
bmFibGVJbnN0YW5jZXMuCi0KLSNwcmFnbWEgb25jZQotI2luY2x1ZGUgPGZvbGx5L0JhdG9uLmg+
Ci0jaW5jbHVkZSA8Zm9sbHkvRGVtYW5nbGUuaD4KLSNpbmNsdWRlIDxmb2xseS9FeGNlcHRpb24u
aD4KLSNpbmNsdWRlIDxmb2xseS9FeGVjdXRvci5oPgotI2luY2x1ZGUgPGZvbGx5L0hhc2guaD4K
LSNpbmNsdWRlIDxmb2xseS9NZW1vcnkuaD4KLSNpbmNsdWRlIDxmb2xseS9SV1NwaW5Mb2NrLmg+
Ci0jaW5jbHVkZSA8Zm9sbHkvU3luY2hyb25pemVkLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvZGV0YWls
L1N0YXRpY1NpbmdsZXRvbk1hbmFnZXIuaD4KLSNpbmNsdWRlIDxmb2xseS9leHBlcmltZW50YWwv
UmVhZE1vc3RseVNoYXJlZFB0ci5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUg
PGF0b21pYz4KLSNpbmNsdWRlIDxjb25kaXRpb25fdmFyaWFibGU+Ci0jaW5jbHVkZSA8ZnVuY3Rp
b25hbD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8c3Ry
aW5nPgotI2luY2x1ZGUgPHRocmVhZD4KLSNpbmNsdWRlIDx0eXBlaW5kZXg+Ci0jaW5jbHVkZSA8
dHlwZWluZm8+Ci0jaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KLSNpbmNsdWRlIDx1bm9yZGVyZWRf
c2V0PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgPGdsb2cvbG9nZ2luZy5oPgotCi0v
LyB1c2UgdGhpcyBndWFyZCB0byBoYW5kbGVTaW5nbGV0b24gYnJlYWtpbmcgY2hhbmdlIGluIDNy
ZCBwYXJ0eSBjb2RlCi0jaWZuZGVmIEZPTExZX1NJTkdMRVRPTl9UUllfR0VUCi0jZGVmaW5lIEZP
TExZX1NJTkdMRVRPTl9UUllfR0VUCi0jZW5kaWYKLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotLy8g
Rm9yIGFjdHVhbCB1c2FnZSwgcGxlYXNlIHNlZSB0aGUgU2luZ2xldG9uPFQ+IGNsYXNzIGF0IHRo
ZSBib3R0b20KLS8vIG9mIHRoaXMgZmlsZTsgdGhhdCBpcyB3aGF0IHlvdSB3aWxsIGFjdHVhbGx5
IGludGVyYWN0IHdpdGguCi0KLS8vIFNpbmdsZXRvblZhdWx0IGlzIHRoZSBjbGFzcyB0aGF0IG1h
bmFnZXMgc2luZ2xldG9uIGluc3RhbmNlcy4gIEl0Ci0vLyBpcyB1bmF3YXJlIG9mIHRoZSB1bmRl
cmx5aW5nIHR5cGVzIG9mIHNpbmdsZXRvbnMsIGFuZCBzaW1wbHkKLS8vIG1hbmFnZXMgbGlmZWN5
Y2xlcyBhbmQgaW52b2tlcyBDcmVhdGVGdW5jIGFuZCBUZWFyZG93bkZ1bmMgd2hlbgotLy8gYXBw
cm9wcmlhdGUuICBJbiBnZW5lcmFsLCB5b3Ugd29uJ3QgbmVlZCB0byBpbnRlcmFjdCB3aXRoIHRo
ZQotLy8gU2luZ2xldG9uVmF1bHQgaXRzZWxmLgotLy8KLS8vIEEgdmF1bHQgZ29lcyB0aHJvdWdo
IGEgZmV3IHN0YWdlcyBvZiBsaWZlOgotLy8KLS8vICAgMS4gUmVnaXN0cmF0aW9uIHBoYXNlOyBz
aW5nbGV0b25zIGNhbiBiZSByZWdpc3RlcmVkOgotLy8gICAgICBhKSBTdHJpY3Q6IG5vIHNpbmds
ZXRvbiBjYW4gYmUgY3JlYXRlZCBpbiB0aGlzIHN0YWdlLgotLy8gICAgICBiKSBSZWxheGVkOiBz
aW5nbGV0b24gY2FuIGJlIGNyZWF0ZWQgKHRoZSBkZWZhdWx0IHZhdWx0IGlzIFJlbGF4ZWQpLgot
Ly8gICAyLiByZWdpc3RyYXRpb25Db21wbGV0ZSgpIGhhcyBiZWVuIGNhbGxlZDsgc2luZ2xldG9u
cyBjYW4gbm8KLS8vICAgICAgbG9uZ2VyIGJlIHJlZ2lzdGVyZWQsIGJ1dCB0aGV5IGNhbiBiZSBj
cmVhdGVkLgotLy8gICAzLiBBIHZhdWx0IGNhbiByZXR1cm4gdG8gc3RhZ2UgMSB3aGVuIGRlc3Ry
b3lJbnN0YW5jZXMgaXMgY2FsbGVkLgotLy8KLS8vIEluIGdlbmVyYWwsIHlvdSBkb24ndCBuZWVk
IHRvIHdvcnJ5IGFib3V0IGFueSBvZiB0aGUgYWJvdmU7IGp1c3QKLS8vIGVuc3VyZSByZWdpc3Ry
YXRpb25Db21wbGV0ZSgpIGlzIGNhbGxlZCBuZWFyIHRoZSB0b3Agb2YgeW91ciBtYWluKCkKLS8v
IGZ1bmN0aW9uLCBvdGhlcndpc2Ugbm8gc2luZ2xldG9ucyBjYW4gYmUgaW5zdGFudGlhdGVkLgot
Ci1jbGFzcyBTaW5nbGV0b25WYXVsdDsKLQotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLXN0cnVjdCBE
ZWZhdWx0VGFnIHt9OwotCi0vLyBBIFR5cGVEZXNjcmlwdG9yIGlzIHRoZSB1bmlxdWUgaGFuZGxl
IGZvciBhIGdpdmVuIHNpbmdsZXRvbi4gIEl0IGlzCi0vLyBhIGNvbWJpbmFpdG9uIG9mIHRoZSB0
eXBlIGFuZCBvZiB0aGUgb3B0aW9uYWwgbmFtZSwgYW5kIGlzIHVzZWQgYXMKLS8vIGEga2V5IGlu
IHVub3JkZXJlZF9tYXBzLgotY2xhc3MgVHlwZURlc2NyaXB0b3IgewotIHB1YmxpYzoKLSAgVHlw
ZURlc2NyaXB0b3IoY29uc3Qgc3RkOjp0eXBlX2luZm8mIHRpLAotICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnR5cGVfaW5mbyYgdGFnX3RpKQotICAgICAgOiB0aV8odGkpLCB0YWdfdGlfKHRh
Z190aSkgewotICB9Ci0KLSAgVHlwZURlc2NyaXB0b3IoY29uc3QgVHlwZURlc2NyaXB0b3ImIG90
aGVyKQotICAgICAgOiB0aV8ob3RoZXIudGlfKSwgdGFnX3RpXyhvdGhlci50YWdfdGlfKSB7Ci0g
IH0KLQotICBUeXBlRGVzY3JpcHRvciYgb3BlcmF0b3I9KGNvbnN0IFR5cGVEZXNjcmlwdG9yJiBv
dGhlcikgewotICAgIGlmICh0aGlzICE9ICZvdGhlcikgewotICAgICAgdGlfID0gb3RoZXIudGlf
OwotICAgICAgdGFnX3RpXyA9IG90aGVyLnRhZ190aV87Ci0gICAgfQotCi0gICAgcmV0dXJuICp0
aGlzOwotICB9Ci0KLSAgc3RkOjpzdHJpbmcgbmFtZSgpIGNvbnN0IHsKLSAgICBhdXRvIHJldCA9
IGRlbWFuZ2xlKHRpXy5uYW1lKCkpOwotICAgIGlmICh0YWdfdGlfICE9IHN0ZDo6dHlwZV9pbmRl
eCh0eXBlaWQoRGVmYXVsdFRhZykpKSB7Ci0gICAgICByZXQgKz0gIi8iOwotICAgICAgcmV0ICs9
IGRlbWFuZ2xlKHRhZ190aV8ubmFtZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJldC50b1N0ZFN0
cmluZygpOwotICB9Ci0KLSAgZnJpZW5kIGNsYXNzIFR5cGVEZXNjcmlwdG9ySGFzaGVyOwotCi0g
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBUeXBlRGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0IHsKLSAg
ICByZXR1cm4gdGlfID09IG90aGVyLnRpXyAmJiB0YWdfdGlfID09IG90aGVyLnRhZ190aV87Ci0g
IH0KLQotIHByaXZhdGU6Ci0gIHN0ZDo6dHlwZV9pbmRleCB0aV87Ci0gIHN0ZDo6dHlwZV9pbmRl
eCB0YWdfdGlfOwotfTsKLQotY2xhc3MgVHlwZURlc2NyaXB0b3JIYXNoZXIgewotIHB1YmxpYzoK
LSAgc2l6ZV90IG9wZXJhdG9yKCkoY29uc3QgVHlwZURlc2NyaXB0b3ImIHRpKSBjb25zdCB7Ci0g
ICAgcmV0dXJuIGZvbGx5OjpoYXNoOjpoYXNoX2NvbWJpbmUodGkudGlfLCB0aS50YWdfdGlfKTsK
LSAgfQotfTsKLQotLy8gVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBieSBTaW5nbGV0b25WYXVsdCB0
byBpbnRlcmFjdCB3aXRoIFNpbmdsZXRvbkhvbGRlcnMuCi0vLyBIYXZpbmcgYSBub24tdGVtcGxh
dGUgaW50ZXJmYWNlIGFsbG93cyBTaW5nbGV0b25WYXVsdCB0byBrZWVwIGEgbGlzdCBvZiBhbGwK
LS8vIFNpbmdsZXRvbkhvbGRlcnMuCi1jbGFzcyBTaW5nbGV0b25Ib2xkZXJCYXNlIHsKLSBwdWJs
aWM6Ci0gIGV4cGxpY2l0IFNpbmdsZXRvbkhvbGRlckJhc2UoVHlwZURlc2NyaXB0b3IgdHlwZURl
c2MpIDogdHlwZV8odHlwZURlc2MpIHt9Ci0gIHZpcnR1YWwgflNpbmdsZXRvbkhvbGRlckJhc2Uo
KSA9IGRlZmF1bHQ7Ci0KLSAgVHlwZURlc2NyaXB0b3IgdHlwZSgpIGNvbnN0IHsKLSAgICByZXR1
cm4gdHlwZV87Ci0gIH0KLSAgdmlydHVhbCBib29sIGhhc0xpdmVJbnN0YW5jZSgpID0gMDsKLSAg
dmlydHVhbCB2b2lkIGNyZWF0ZUluc3RhbmNlKCkgPSAwOwotICB2aXJ0dWFsIGJvb2wgY3JlYXRp
b25TdGFydGVkKCkgPSAwOwotICB2aXJ0dWFsIHZvaWQgcHJlRGVzdHJveUluc3RhbmNlKFJlYWRN
b3N0bHlNYWluUHRyRGVsZXRlcjw+JikgPSAwOwotICB2aXJ0dWFsIHZvaWQgZGVzdHJveUluc3Rh
bmNlKCkgPSAwOwotCi0gcHJpdmF0ZToKLSAgVHlwZURlc2NyaXB0b3IgdHlwZV87Ci19OwotCi0v
LyBBbiBhY3R1YWwgaW5zdGFuY2Ugb2YgYSBzaW5nbGV0b24sIHRyYWNraW5nIHRoZSBpbnN0YW5j
ZSBpdHNlbGYsCi0vLyBpdHMgc3RhdGUgYXMgZGVzY3JpYmVkIGFib3ZlLCBhbmQgdGhlIGNyZWF0
ZSBhbmQgdGVhcmRvd24KLS8vIGZ1bmN0aW9ucy4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3Ry
dWN0IFNpbmdsZXRvbkhvbGRlciA6IHB1YmxpYyBTaW5nbGV0b25Ib2xkZXJCYXNlIHsKLSBwdWJs
aWM6Ci0gIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKFQqKT4gVGVhcmRvd25GdW5jOwotICB0
eXBlZGVmIHN0ZDo6ZnVuY3Rpb248VCoodm9pZCk+IENyZWF0ZUZ1bmM7Ci0KLSAgdGVtcGxhdGUg
PHR5cGVuYW1lIFRhZywgdHlwZW5hbWUgVmF1bHRUYWc+Ci0gIGlubGluZSBzdGF0aWMgU2luZ2xl
dG9uSG9sZGVyPFQ+JiBzaW5nbGV0b24oKTsKLQotICBpbmxpbmUgVCogZ2V0KCk7Ci0gIGlubGlu
ZSBzdGQ6OndlYWtfcHRyPFQ+IGdldF93ZWFrKCk7Ci0gIGlubGluZSBzdGQ6OnNoYXJlZF9wdHI8
VD4gdHJ5X2dldCgpOwotICBpbmxpbmUgZm9sbHk6OlJlYWRNb3N0bHlTaGFyZWRQdHI8VD4gdHJ5
X2dldF9mYXN0KCk7Ci0KLSAgdm9pZCByZWdpc3RlclNpbmdsZXRvbihDcmVhdGVGdW5jIGMsIFRl
YXJkb3duRnVuYyB0KTsKLSAgdm9pZCByZWdpc3RlclNpbmdsZXRvbk1vY2soQ3JlYXRlRnVuYyBj
LCBUZWFyZG93bkZ1bmMgdCk7Ci0gIGJvb2wgaGFzTGl2ZUluc3RhbmNlKCkgb3ZlcnJpZGU7Ci0g
IHZvaWQgY3JlYXRlSW5zdGFuY2UoKSBvdmVycmlkZTsKLSAgYm9vbCBjcmVhdGlvblN0YXJ0ZWQo
KSBvdmVycmlkZTsKLSAgdm9pZCBwcmVEZXN0cm95SW5zdGFuY2UoUmVhZE1vc3RseU1haW5QdHJE
ZWxldGVyPD4mKSBvdmVycmlkZTsKLSAgdm9pZCBkZXN0cm95SW5zdGFuY2UoKSBvdmVycmlkZTsK
LQotIHByaXZhdGU6Ci0gIFNpbmdsZXRvbkhvbGRlcihUeXBlRGVzY3JpcHRvciB0eXBlLCBTaW5n
bGV0b25WYXVsdCYgdmF1bHQpOwotCi0gIGVudW0gY2xhc3MgU2luZ2xldG9uSG9sZGVyU3RhdGUg
ewotICAgIE5vdFJlZ2lzdGVyZWQsCi0gICAgRGVhZCwKLSAgICBMaXZpbmcsCi0gIH07Ci0KLSAg
U2luZ2xldG9uVmF1bHQmIHZhdWx0XzsKLQotICAvLyBtdXRleCBwcm90ZWN0cyB0aGUgZW50aXJl
IGVudHJ5IGR1cmluZyBjb25zdHJ1Y3Rpb24vZGVzdHJ1Y3Rpb24KLSAgc3RkOjptdXRleCBtdXRl
eF87Ci0KLSAgLy8gU3RhdGUgb2YgdGhlIHNpbmdsZXRvbiBlbnRyeS4gSWYgc3RhdGUgaXMgTGl2
aW5nLCBpbnN0YW5jZV9wdHIgYW5kCi0gIC8vIGluc3RhbmNlX3dlYWsgY2FuIGJlIHNhZmVseSBh
Y2Nlc3NlZCB3L28gc3luY2hyb25pemF0aW9uLgotICBzdGQ6OmF0b21pYzxTaW5nbGV0b25Ib2xk
ZXJTdGF0ZT4gc3RhdGVfe1NpbmdsZXRvbkhvbGRlclN0YXRlOjpOb3RSZWdpc3RlcmVkfTsKLQot
ICAvLyB0aGUgdGhyZWFkIGNyZWF0aW5nIHRoZSBzaW5nbGV0b24gKG9ubHkgdmFsaWQgd2hpbGUg
Y3JlYXRpbmcgYW4gb2JqZWN0KQotICBzdGQ6OmF0b21pYzxzdGQ6OnRocmVhZDo6aWQ+IGNyZWF0
aW5nX3RocmVhZF87Ci0KLSAgLy8gVGhlIHNpbmdsZXRvbiBpdHNlbGYgYW5kIHJlbGF0ZWQgZnVu
Y3Rpb25zLgotCi0gIC8vIGhvbGRzIGEgUmVhZE1vc3RseU1haW5QdHIgdG8gc2luZ2xldG9uIGlu
c3RhbmNlLCBzZXQgd2hlbiBzdGF0ZSBpcyBjaGFuZ2VkCi0gIC8vIGZyb20gRGVhZCB0byBMaXZp
bmcuIFJlc2V0IHdoZW4gc3RhdGUgaXMgY2hhbmdlZCBmcm9tIExpdmluZyB0byBEZWFkLgotICBm
b2xseTo6UmVhZE1vc3RseU1haW5QdHI8VD4gaW5zdGFuY2VfOwotICAvLyB1c2VkIHRvIHJlbGVh
c2UgYWxsIFJlYWRNb3N0bHlNYWluUHRycyBhdCBvbmNlCi0gIGZvbGx5OjpSZWFkTW9zdGx5U2hh
cmVkUHRyPFQ+IGluc3RhbmNlX2NvcHlfOwotICAvLyB3ZWFrX3B0ciB0byB0aGUgc2luZ2xldG9u
IGluc3RhbmNlLCBzZXQgd2hlbiBzdGF0ZSBpcyBjaGFuZ2VkIGZyb20gRGVhZAotICAvLyB0byBM
aXZpbmcuIFdlIG5ldmVyIHdyaXRlIHRvIHRoaXMgb2JqZWN0IGFmdGVyIGluaXRpYWxpemF0aW9u
LCBzbyBpdCBpcwotICAvLyBzYWZlIHRvIHJlYWQgaXQgZnJvbSBkaWZmZXJlbnQgdGhyZWFkcyB3
L28gc3luY2hyb25pemF0aW9uIGlmIHdlIGtub3cKLSAgLy8gdGhhdCBzdGF0ZSBpcyBzZXQgdG8g
TGl2aW5nCi0gIHN0ZDo6d2Vha19wdHI8VD4gaW5zdGFuY2Vfd2Vha187Ci0gIC8vIEZhc3QgZXF1
aXZhbGVudCBvZiBpbnN0YW5jZV93ZWFrXwotICBmb2xseTo6UmVhZE1vc3RseVdlYWtQdHI8VD4g
aW5zdGFuY2Vfd2Vha19mYXN0XzsKLSAgLy8gVGltZSB3ZSB3YWl0IG9uIGRlc3Ryb3lfYmF0b24g
YWZ0ZXIgcmVsZWFzaW5nIFNpbmdsZXRvbiBzaGFyZWRfcHRyLgotICBzdGQ6OnNoYXJlZF9wdHI8
Zm9sbHk6OkJhdG9uPD4+IGRlc3Ryb3lfYmF0b25fOwotICBUKiBpbnN0YW5jZV9wdHJfID0gbnVs
bHB0cjsKLSAgQ3JlYXRlRnVuYyBjcmVhdGVfID0gbnVsbHB0cjsKLSAgVGVhcmRvd25GdW5jIHRl
YXJkb3duXyA9IG51bGxwdHI7Ci0KLSAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6YXRvbWljPGJvb2w+
PiBwcmludF9kZXN0cnVjdG9yX3N0YWNrX3RyYWNlXzsKLQotICBTaW5nbGV0b25Ib2xkZXIoY29u
c3QgU2luZ2xldG9uSG9sZGVyJikgPSBkZWxldGU7Ci0gIFNpbmdsZXRvbkhvbGRlciYgb3BlcmF0
b3I9KGNvbnN0IFNpbmdsZXRvbkhvbGRlciYpID0gZGVsZXRlOwotICBTaW5nbGV0b25Ib2xkZXIm
IG9wZXJhdG9yPShTaW5nbGV0b25Ib2xkZXImJikgPSBkZWxldGU7Ci0gIFNpbmdsZXRvbkhvbGRl
cihTaW5nbGV0b25Ib2xkZXImJikgPSBkZWxldGU7Ci19OwotCi19Ci0KLWNsYXNzIFNpbmdsZXRv
blZhdWx0IHsKLSBwdWJsaWM6Ci0gIGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgU3RyaWN0LCAvLyBT
aW5nbGV0b25zIGNhbid0IGJlIGNyZWF0ZWQgYmVmb3JlIHJlZ2lzdHJhdGlvbkNvbXBsZXRlKCkK
LSAgICBSZWxheGVkLCAvLyBTaW5nbGV0b25zIGNhbiBiZSBjcmVhdGVkIGJlZm9yZSByZWdpc3Ry
YXRpb25Db21wbGV0ZSgpCi0gIH07Ci0KLSAgLyoqCi0gICAqIENsZWFycyBhbGwgc2luZ2xldG9u
cyBpbiB0aGUgZ2l2ZW4gdmF1bHQgYXQgY3RvciBhbmQgZHRvciB0aW1lcy4KLSAgICogVXNlZnVs
IGZvciB1bml0LXRlc3RzIHRoYXQgbmVlZCB0byBjbGVhciB0aGUgd29ybGQuCi0gICAqCi0gICAq
IFRoaXMgbmVlZCBjYW4gYXJpc2Ugd2hlbiBhIHVuaXQtdGVzdCBuZWVkcyB0byBzd2FwIG91dCBh
biBvYmplY3QgdXNlZCBieSBhCi0gICAqIHNpbmdsZXRvbiBmb3IgYSB0ZXN0LWRvdWJsZSwgYnV0
IHRoZSBzaW5nbGV0b24gbmVlZGluZyBpdHMgZGVwZW5kZW5jeSB0byBiZQotICAgKiBzd2FwcGVk
IGhhcyBhIHR5cGUgb3IgYSB0YWcgbG9jYWwgdG8gc29tZSBvdGhlciB0cmFuc2xhdGlvbiB1bml0
IGFuZAotICAgKiB1bmF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0Lgot
ICAgKgotICAgKiBPdGhlciwgYmV0dGVyIGFwcHJvYWNoZXMgdG8gdGhpcyBuZWVkIGFyZSAicGx6
IDIgcmVmYWN0b3IiIC4uLi4KLSAgICovCi0gIHN0cnVjdCBTY29wZWRFeHB1bmdlciB7Ci0gICAg
U2luZ2xldG9uVmF1bHQqIHZhdWx0OwotICAgIGV4cGxpY2l0IFNjb3BlZEV4cHVuZ2VyKFNpbmds
ZXRvblZhdWx0KiB2KSA6IHZhdWx0KHYpIHsgZXhwdW5nZSgpOyB9Ci0gICAgflNjb3BlZEV4cHVu
Z2VyKCkgeyBleHB1bmdlKCk7IH0KLSAgICB2b2lkIGV4cHVuZ2UoKSB7Ci0gICAgICB2YXVsdC0+
ZGVzdHJveUluc3RhbmNlcygpOwotICAgICAgdmF1bHQtPnJlZW5hYmxlSW5zdGFuY2VzKCk7Ci0g
ICAgfQotICB9OwotCi0gIHN0YXRpYyBUeXBlIGRlZmF1bHRWYXVsdFR5cGUoKTsKLQotICBleHBs
aWNpdCBTaW5nbGV0b25WYXVsdChUeXBlIHR5cGUgPSBkZWZhdWx0VmF1bHRUeXBlKCkpIDogdHlw
ZV8odHlwZSkge30KLQotICAvLyBEZXN0cnVjdG9yIGlzIG9ubHkgY2FsbGVkIGJ5IHVuaXQgdGVz
dHMgdG8gY2hlY2sgZGVzdHJveUluc3RhbmNlcy4KLSAgflNpbmdsZXRvblZhdWx0KCk7Ci0KLSAg
dHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQodm9pZCopPiBUZWFyZG93bkZ1bmM7Ci0gIHR5cGVk
ZWYgc3RkOjpmdW5jdGlvbjx2b2lkKih2b2lkKT4gQ3JlYXRlRnVuYzsKLQotICAvLyBFbnN1cmUg
dGhhdCBTaW5nbGV0b24gaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQgcHJldmlvdXNseSBhbmQgdGhh
dAotICAvLyByZWdpc3RyYXRpb24gaXMgbm90IGNvbXBsZXRlLiBJZiB2YWxpZGF0aW9ucyBzdWNj
ZWVkcywKLSAgLy8gcmVnaXN0ZXIgYSBzaW5nbGV0b24gb2YgYSBnaXZlbiB0eXBlIHdpdGggdGhl
IGNyZWF0ZSBhbmQgdGVhcmRvd24KLSAgLy8gZnVuY3Rpb25zLgotICB2b2lkIHJlZ2lzdGVyU2lu
Z2xldG9uKGRldGFpbDo6U2luZ2xldG9uSG9sZGVyQmFzZSogZW50cnkpOwotCi0gIC8qKgotICAg
KiBDYWxsZWQgYnkgYFNpbmdsZXRvbjxUPi5zaG91bGRFYWdlckluaXQoKWAgdG8gZW5zdXJlIHRo
ZSBpbnN0YW5jZQotICAgKiBpcyBidWlsdCB3aGVuIGBkb0VhZ2VySW5pdFtWaWFdYCBpcyBjYWxs
ZWQ7IHNlZSB0aG9zZSBtZXRob2RzCi0gICAqIGZvciBtb3JlIGluZm8uCi0gICAqLwotICB2b2lk
IGFkZEVhZ2VySW5pdFNpbmdsZXRvbihkZXRhaWw6OlNpbmdsZXRvbkhvbGRlckJhc2UqIGVudHJ5
KTsKLQotICAvLyBNYXJrIHJlZ2lzdHJhdGlvbiBpcyBjb21wbGV0ZTsgbm8gbW9yZSBzaW5nbGV0
b25zIGNhbiBiZQotICAvLyByZWdpc3RlcmVkIGF0IHRoaXMgcG9pbnQuCi0gIHZvaWQgcmVnaXN0
cmF0aW9uQ29tcGxldGUoKTsKLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSBhbGwgc2luZ2xldG9u
cyB3aGljaCB3ZXJlIG1hcmtlZCBhcyBlYWdlci1pbml0aWFsaXplZAotICAgKiAodXNpbmcgYHNo
b3VsZEVhZ2VySW5pdCgpYCkuICBObyByZXR1cm4gdmFsdWUuICBQcm9wYWdhdGVzIGV4Y2VwdGlv
bnMKLSAgICogZnJvbSBjb25zdHJ1Y3RvcnMgLyBjcmVhdGUgZnVuY3Rpb25zLCBhcyBpcyB0aGUg
dXN1YWwgY2FzZSB3aGVuIGNhbGxpbmcKLSAgICogZm9yIGV4YW1wbGUgYFNpbmdsZXRvbjxGb28+
OjpnZXRfd2VhaygpYC4KLSAgICovCi0gIHZvaWQgZG9FYWdlckluaXQoKTsKLQotICAvKioKLSAg
ICogU2NoZWR1bGUgZWFnZXIgc2luZ2xldG9ucycgaW5pdGlhbGl6YXRpb25zIHRocm91Z2ggdGhl
IGdpdmVuIGV4ZWN1dG9yLgotICAgKiBJZiBiYXRvbiBwdHIgaXMgbm90IG51bGwsIGl0cyBgcG9z
dGAgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciBhbGwKLSAgICogZWFybHkgaW5pdGlhbGl6YXRpb24g
aGFzIGNvbXBsZXRlZC4KLSAgICoKLSAgICogSWYgZXhjZXB0aW9ucyBhcmUgdGhyb3duIGR1cmlu
ZyBpbml0aWFsaXphdGlvbiwgdGhpcyBtZXRob2Qgd2lsbCBzdGlsbAotICAgKiBgcG9zdGAgdGhl
IGJhdG9uIHRvIGluZGljYXRlIGNvbXBsZXRpb24uICBUaGUgZXhjZXB0aW9uIHdpbGwgbm90IHBy
b3BhZ2F0ZQotICAgKiBhbmQgZnV0dXJlIGF0dGVtcHRzIHRvIGB0cnlfZ2V0YCBvciBgZ2V0X3dl
YWtgIHRoZSBmYWlsZWQgc2luZ2xldG9uIHdpbGwKLSAgICogcmV0cnkgaW5pdGlhbGl6YXRpb24u
Ci0gICAqCi0gICAqIFNhbXBsZSB1c2FnZToKLSAgICoKLSAgICogICB3YW5nbGU6OklPVGhyZWFk
UG9vbEV4ZWN1dG9yIGV4ZWN1dG9yKG1heF9jb25jdXJyZW5jeV9sZXZlbCk7Ci0gICAqICAgZm9s
bHk6OkJhdG9uPD4gZG9uZTsKLSAgICogICBkb0VhZ2VySW5pdFZpYShleGVjdXRvciwgJmRvbmUp
OwotICAgKiAgIGRvbmUud2FpdCgpOyAgLy8gb3IgJ3RpbWVkX3dhaXQnLCBvciBzcGluIHdpdGgg
J3RyeV93YWl0JwotICAgKgotICAgKi8KLSAgdm9pZCBkb0VhZ2VySW5pdFZpYShFeGVjdXRvciYg
ZXhlLCBmb2xseTo6QmF0b248PiogZG9uZSA9IG51bGxwdHIpOwotCi0gIC8vIERlc3Ryb3kgYWxs
IHNpbmdsZXRvbnM7IHdoZW4gY29tcGxldGUsIHRoZSB2YXVsdCBjYW4ndCBjcmVhdGUKLSAgLy8g
c2luZ2xldG9ucyBvbmNlIGFnYWluIHVudGlsIHJlZW5hYmxlSW5zdGFuY2VzKCkgaXMgY2FsbGVk
LgotICB2b2lkIGRlc3Ryb3lJbnN0YW5jZXMoKTsKLQotICAvLyBFbmFibGUgcmUtY3JlYXRpbmcg
c2luZ2xldG9ucyBhZnRlciBkZXN0cm95SW5zdGFuY2VzKCkgd2FzIGNhbGxlZC4KLSAgdm9pZCBy
ZWVuYWJsZUluc3RhbmNlcygpOwotCi0gIC8vIEZvciB0ZXN0aW5nOyBob3cgbWFueSByZWdpc3Rl
cmVkIGFuZCBsaXZpbmcgc2luZ2xldG9ucyB3ZSBoYXZlLgotICBzaXplX3QgcmVnaXN0ZXJlZFNp
bmdsZXRvbkNvdW50KCkgY29uc3QgewotICAgIHJldHVybiBzaW5nbGV0b25zXy5ybG9jaygpLT5z
aXplKCk7Ci0gIH0KLQotICAvKioKLSAgICogRmxpcHMgdG8gdHJ1ZSBpZiBlYWdlciBpbml0aWFs
aXphdGlvbiB3YXMgdXNlZCwgYW5kIGhhcyBjb21wbGV0ZWQuCi0gICAqIE5ldmVyIHNldCB0byB0
cnVlIGlmICJkb0VhZ2VySW5pdCgpIiBvciAiZG9FYWdlckluaXRWaWEiIG5ldmVyIGNhbGxlZC4K
LSAgICovCi0gIGJvb2wgZWFnZXJJbml0Q29tcGxldGUoKSBjb25zdDsKLQotICBzaXplX3QgbGl2
aW5nU2luZ2xldG9uQ291bnQoKSBjb25zdCB7Ci0gICAgYXV0byBzaW5nbGV0b25zID0gc2luZ2xl
dG9uc18ucmxvY2soKTsKLQotICAgIHNpemVfdCByZXQgPSAwOwotICAgIGZvciAoY29uc3QgYXV0
byYgcCA6ICpzaW5nbGV0b25zKSB7Ci0gICAgICBpZiAocC5zZWNvbmQtPmhhc0xpdmVJbnN0YW5j
ZSgpKSB7Ci0gICAgICAgICsrcmV0OwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXQ7
Ci0gIH0KLQotICAvLyBBIHdlbGwta25vd24gdmF1bHQ7IHlvdSBjYW4gYWN0dWFsbHkgaGF2ZSBv
dGhlcnMsIGJ1dCB0aGlzIGlzIHRoZQotICAvLyBkZWZhdWx0LgotICBzdGF0aWMgU2luZ2xldG9u
VmF1bHQqIHNpbmdsZXRvbigpIHsKLSAgICByZXR1cm4gc2luZ2xldG9uPD4oKTsKLSAgfQotCi0g
IC8vIEdldHMgc2luZ2xldG9uIHZhdWx0IGZvciBhbnkgVGFnLiBOb24tZGVmYXVsdCB0YWcgc2hv
dWxkIGJlIHVzZWQgaW4gdW5pdAotICAvLyB0ZXN0cyBvbmx5LgotICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVmF1bHRUYWcgPSBkZXRhaWw6OkRlZmF1bHRUYWc+Ci0gIHN0YXRpYyBTaW5nbGV0b25WYXVs
dCogc2luZ2xldG9uKCkgewotICAgIC8qIGxpYnJhcnktbG9jYWwgKi8gc3RhdGljIGF1dG8gdmF1
bHQgPQotICAgICAgICBkZXRhaWw6OmNyZWF0ZUdsb2JhbDxTaW5nbGV0b25WYXVsdCwgVmF1bHRU
YWc+KCk7Ci0gICAgcmV0dXJuIHZhdWx0OwotICB9Ci0KLSAgdHlwZWRlZiBzdGQ6OnN0cmluZygq
U3RhY2tUcmFjZUdldHRlclB0cikoKTsKLQotICBzdGF0aWMgc3RkOjphdG9taWM8U3RhY2tUcmFj
ZUdldHRlclB0cj4mIHN0YWNrVHJhY2VHZXR0ZXIoKSB7Ci0gICAgLyogbGlicmFyeS1sb2NhbCAq
LyBzdGF0aWMgYXV0byBzdGFja1RyYWNlR2V0dGVyUHRyID0gZGV0YWlsOjoKLSAgICAgICAgY3Jl
YXRlR2xvYmFsPHN0ZDo6YXRvbWljPFN0YWNrVHJhY2VHZXR0ZXJQdHI+LCBTaW5nbGV0b25WYXVs
dD4oKTsKLSAgICByZXR1cm4gKnN0YWNrVHJhY2VHZXR0ZXJQdHI7Ci0gIH0KLQotICB2b2lkIHNl
dFR5cGUoVHlwZSB0eXBlKSB7Ci0gICAgdHlwZV8gPSB0eXBlOwotICB9Ci0KLSBwcml2YXRlOgot
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgZnJpZW5kIHN0cnVjdCBkZXRhaWw6OlNpbmdsZXRv
bkhvbGRlcjsKLQotICAvLyBUaGUgdHdvIHN0YWdlcyBvZiBsaWZlIGZvciBhIHZhdWx0LCBhcyBt
ZW50aW9uZWQgaW4gdGhlIGNsYXNzIGNvbW1lbnQuCi0gIGVudW0gY2xhc3MgU2luZ2xldG9uVmF1
bHRTdGF0ZSB7Ci0gICAgUnVubmluZywKLSAgICBRdWllc2NpbmcsCi0gIH07Ci0KLSAgc3RydWN0
IFN0YXRlIHsKLSAgICBTaW5nbGV0b25WYXVsdFN0YXRlIHN0YXRle1NpbmdsZXRvblZhdWx0U3Rh
dGU6OlJ1bm5pbmd9OwotICAgIGJvb2wgcmVnaXN0cmF0aW9uQ29tcGxldGV7ZmFsc2V9OwotICB9
OwotCi0gIC8vIEVhY2ggc2luZ2xldG9uIGluIHRoZSB2YXVsdCBjYW4gYmUgaW4gdHdvIHN0YXRl
czogZGVhZAotICAvLyAocmVnaXN0ZXJlZCBidXQgbmV2ZXIgY3JlYXRlZCksIGxpdmluZyAoQ3Jl
YXRlRnVuYyByZXR1cm5lZCBhbiBpbnN0YW5jZSkuCi0KLSAgc3RhdGljIHZvaWQgc3RhdGVDaGVj
aygKLSAgICAgIFNpbmdsZXRvblZhdWx0U3RhdGUgZXhwZWN0ZWQsCi0gICAgICBjb25zdCBTdGF0
ZSYgc3RhdGUsCi0gICAgICBjb25zdCBjaGFyKiBtc2cgPSAiVW5leHBlY3RlZCBzaW5nbGV0b24g
c3RhdGUgY2hhbmdlIikgewotICAgIGlmIChleHBlY3RlZCAhPSBzdGF0ZS5zdGF0ZSkgewotICAg
ICAgdGhyb3cgc3RkOjpsb2dpY19lcnJvcihtc2cpOwotICAgIH0KLSAgfQotCi0gIC8vIFRoaXMg
bWV0aG9kIG9ubHkgbWF0dGVycyBpZiByZWdpc3RyYXRpb25Db21wbGV0ZSgpIGlzIG5ldmVyIGNh
bGxlZC4KLSAgLy8gT3RoZXJ3aXNlIGRlc3Ryb3lJbnN0YW5jZXMgaXMgc2NoZWR1bGVkIHRvIGJl
IGV4ZWN1dGVkIGF0ZXhpdC4KLSAgLy8KLSAgLy8gSW5pdGlhbGl6ZXMgc3RhdGljIG9iamVjdCwg
d2hpY2ggY2FsbHMgZGVzdHJveUluc3RhbmNlcyBvbiBkZXN0cnVjdGlvbi4KLSAgLy8gVXNlZCB0
byBoYXZlIGJldHRlciBkZWxldGlvbiBvcmRlcmluZyB3aXRoIHNpbmdsZXRvbiBub3QgbWFuYWdl
ZCBieQotICAvLyBmb2xseTo6U2luZ2xldG9uLiBUaGUgZGVzcnVjdGlvbiB3aWxsIGhhcHBlbiBp
biB0aGUgZm9sbG93aW5nIG9yZGVyOgotICAvLyAxLiBTaW5nbGV0b25zLCBub3QgbWFuYWdlZCBi
eSBmb2xseTo6U2luZ2xldG9uLCB3aGljaCB3ZXJlIGNyZWF0ZWQgYWZ0ZXIKLSAgLy8gICAgYW55
IG9mIHRoZSBzaW5nbGV0b25zIG1hbmFnZWQgYnkgZm9sbHk6OlNpbmdsZXRvbiB3YXMgcmVxdWVz
dGVkLgotICAvLyAyLiBBbGwgc2luZ2xldG9ucyBtYW5hZ2VkIGJ5IGZvbGx5OjpTaW5nbGV0b24K
LSAgLy8gMy4gU2luZ2xldG9ucywgbm90IG1hbmFnZWQgYnkgZm9sbHk6OlNpbmdsZXRvbiwgd2hp
Y2ggd2VyZSBjcmVhdGVkIGJlZm9yZQotICAvLyAgICBhbnkgb2YgdGhlIHNpbmdsZXRvbnMgbWFu
YWdlZCBieSBmb2xseTo6U2luZ2xldG9uIHdhcyByZXF1ZXN0ZWQuCi0gIHN0YXRpYyB2b2lkIHNj
aGVkdWxlRGVzdHJveUluc3RhbmNlcygpOwotCi0gIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFw
PGRldGFpbDo6VHlwZURlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
dGFpbDo6U2luZ2xldG9uSG9sZGVyQmFzZSosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRldGFpbDo6VHlwZURlc2NyaXB0b3JIYXNoZXI+IFNpbmdsZXRvbk1hcDsKLSAgZm9sbHk6OlN5
bmNocm9uaXplZDxTaW5nbGV0b25NYXA+IHNpbmdsZXRvbnNfOwotICBmb2xseTo6U3luY2hyb25p
emVkPHN0ZDo6dW5vcmRlcmVkX3NldDxkZXRhaWw6OlNpbmdsZXRvbkhvbGRlckJhc2UqPj4KLSAg
ICAgIGVhZ2VySW5pdFNpbmdsZXRvbnNfOwotICBmb2xseTo6U3luY2hyb25pemVkPHN0ZDo6dmVj
dG9yPGRldGFpbDo6VHlwZURlc2NyaXB0b3I+PiBjcmVhdGlvbk9yZGVyXzsKLQotICAvLyBVc2lu
ZyBTaGFyZWRNdXRleFJlYWRQcmlvcml0eSBpcyBpbXBvcnRhbnQgaGVyZSwgYmVjYXVzZSB3ZSB3
YW50IHRvIG1ha2UKLSAgLy8gc3VyZSB3ZSBkb24ndCBibG9jayBuZXN0ZWQgc2luZ2xldG9uIGNy
ZWF0aW9uIGhhcHBlbmluZyBjb25jdXJyZW50bHkgd2l0aAotICAvLyBkZXN0cm95SW5zdGFuY2Vz
KCkuCi0gIGZvbGx5OjpTeW5jaHJvbml6ZWQ8U3RhdGUsIGZvbGx5OjpTaGFyZWRNdXRleFJlYWRQ
cmlvcml0eT4gc3RhdGVfOwotCi0gIFR5cGUgdHlwZV87Ci19OwotCi0vLyBUaGlzIGlzIHRoZSB3
cmFwcGVyIGNsYXNzIHRoYXQgbW9zdCB1c2VycyBhY3R1YWxseSBpbnRlcmFjdCB3aXRoLgotLy8g
SXQgYWxsb3dzIGZvciBzaW1wbGUgYWNjZXNzIHRvIHJlZ2lzdGVyaW5nIGFuZCBpbnN0YW50aWF0
aW5nCi0vLyBzaW5nbGV0b25zLiAgQ3JlYXRlIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGluIHRo
ZSBnbG9iYWwgc2NvcGUgb2YKLS8vIHR5cGUgU2luZ2xldG9uPFQ+IHRvIHJlZ2lzdGVyIHlvdXIg
c2luZ2xldG9uIGZvciBsYXRlciBhY2Nlc3MgdmlhCi0vLyBTaW5nbGV0b248VD46OnRyeV9nZXQo
KS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBULAotICAgICAgICAgIHR5cGVuYW1lIFRhZyA9IGRldGFp
bDo6RGVmYXVsdFRhZywKLSAgICAgICAgICB0eXBlbmFtZSBWYXVsdFRhZyA9IGRldGFpbDo6RGVm
YXVsdFRhZyAvKiBmb3IgdGVzdGluZyAqLz4KLWNsYXNzIFNpbmdsZXRvbiB7Ci0gcHVibGljOgot
ICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248VCoodm9pZCk+IENyZWF0ZUZ1bmM7Ci0gIHR5cGVkZWYg
c3RkOjpmdW5jdGlvbjx2b2lkKFQqKT4gVGVhcmRvd25GdW5jOwotCi0gIC8vIEdlbmVyYWxseSB5
b3VyIHByb2dyYW0gbGlmZSBjeWNsZSBzaG91bGQgYmUgZmluZSB3aXRoIGNhbGxpbmcKLSAgLy8g
Z2V0KCkgcmVwZWF0ZWRseSByYXRoZXIgdGhhbiBzYXZpbmcgdGhlIHJlZmVyZW5jZSwgYW5kIHRo
ZW4gbm90Ci0gIC8vIGNhbGwgZ2V0KCkgZHVyaW5nIHByb2Nlc3Mgc2h1dGRvd24uCi0gIEZPTExZ
X0RFUFJFQ0FURUQoIlJlcGxhY2VkIGJ5IHRyeV9nZXQiKQotICBzdGF0aWMgVCogZ2V0KCkgeyBy
ZXR1cm4gZ2V0RW50cnkoKS5nZXQoKTsgfQotCi0gIC8vIElmLCBob3dldmVyLCB5b3UgZG8gbmVl
ZCB0byBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBzcGVjaWZpYwotICAvLyBzaW5nbGV0b24sIHlv
dSBjYW4gdHJ5IHRvIGRvIHNvIHdpdGggYSB3ZWFrX3B0ci4gIEF2b2lkIHRoaXMgd2hlbgotICAv
LyBwb3NzaWJsZSBidXQgdGhlIGluYWJpbGl0eSB0byBsb2NrIHRoZSB3ZWFrIHBvaW50ZXIgY2Fu
IGJlIGEKLSAgLy8gc2lnbmFsIHRoYXQgdGhlIHZhdWx0IGhhcyBiZWVuIGRlc3Ryb3llZC4KLSAg
Rk9MTFlfREVQUkVDQVRFRCgiUmVwbGFjZWQgYnkgdHJ5X2dldCIpCi0gIHN0YXRpYyBzdGQ6Ondl
YWtfcHRyPFQ+IGdldF93ZWFrKCkgeyByZXR1cm4gZ2V0RW50cnkoKS5nZXRfd2VhaygpOyB9Ci0K
LSAgLy8gUHJlZmVycmVkIGFsdGVybmF0aXZlIHRvIGdldF93ZWFrLCBpdCByZXR1cm5zIHNoYXJl
ZF9wdHIgdGhhdCBjYW4gYmUKLSAgLy8gc3RvcmVkOyBhIHNpbmdsZXRvbiB3b24ndCBiZSBkZXN0
cm95ZWQgdW5sZXNzIHNoYXJlZF9wdHIgaXMgZGVzdHJveWVkLgotICAvLyBBdm9pZCBob2xkaW5n
IHRoZXNlIHNoYXJlZF9wdHJzIGJleW9uZCB0aGUgc2NvcGUgb2YgYSBmdW5jdGlvbjsKLSAgLy8g
ZG9uJ3QgcHV0IHRoZW0gaW4gbWVtYmVyIHZhcmlhYmxlcywgYWx3YXlzIHVzZSB0cnlfZ2V0KCkg
aW5zdGVhZAotICAvLwotICAvLyB0cnlfZ2V0KCkgY2FuIHJldHVybiBudWxscHRyIGlmIHRoZSBz
aW5nbGV0b24gd2FzIGRlc3Ryb3llZCwgY2FsbGVyIGlzCi0gIC8vIHJlc3BvbnNpYmxlIGZvciBo
YW5kbGluZyBudWxscHRyIHJldHVybgotICBzdGF0aWMgc3RkOjpzaGFyZWRfcHRyPFQ+IHRyeV9n
ZXQoKSB7Ci0gICAgcmV0dXJuIGdldEVudHJ5KCkudHJ5X2dldCgpOwotICB9Ci0KLSAgc3RhdGlj
IGZvbGx5OjpSZWFkTW9zdGx5U2hhcmVkUHRyPFQ+IHRyeV9nZXRfZmFzdCgpIHsKLSAgICByZXR1
cm4gZ2V0RW50cnkoKS50cnlfZ2V0X2Zhc3QoKTsKLSAgfQotCi0gIGV4cGxpY2l0IFNpbmdsZXRv
bihzdGQ6Om51bGxwdHJfdCAvKiBfICovID0gbnVsbHB0ciwKLSAgICAgICAgICAgICAgICAgICAg
IHR5cGVuYW1lIFNpbmdsZXRvbjo6VGVhcmRvd25GdW5jIHQgPSBudWxscHRyKQotICAgICAgOiBT
aW5nbGV0b24oW10oKSB7IHJldHVybiBuZXcgVDsgfSwgc3RkOjptb3ZlKHQpKSB7fQotCi0gIGV4
cGxpY2l0IFNpbmdsZXRvbih0eXBlbmFtZSBTaW5nbGV0b246OkNyZWF0ZUZ1bmMgYywKLSAgICAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIFNpbmdsZXRvbjo6VGVhcmRvd25GdW5jIHQgPSBudWxs
cHRyKSB7Ci0gICAgaWYgKGMgPT0gbnVsbHB0cikgewotICAgICAgdGhyb3cgc3RkOjpsb2dpY19l
cnJvcigKLSAgICAgICAgIm51bGxwdHJfdCBzaG91bGQgYmUgcGFzc2VkIGlmIHlvdSB3YW50IFQg
dG8gYmUgZGVmYXVsdCBjb25zdHJ1Y3RlZCIpOwotICAgIH0KLQotICAgIGF1dG8gdmF1bHQgPSBT
aW5nbGV0b25WYXVsdDo6c2luZ2xldG9uPFZhdWx0VGFnPigpOwotICAgIGdldEVudHJ5KCkucmVn
aXN0ZXJTaW5nbGV0b24oc3RkOjptb3ZlKGMpLCBnZXRUZWFyZG93bkZ1bmMoc3RkOjptb3ZlKHQp
KSk7Ci0gICAgdmF1bHQtPnJlZ2lzdGVyU2luZ2xldG9uKCZnZXRFbnRyeSgpKTsKLSAgfQotCi0g
IC8qKgotICAgKiBTaG91bGQgYmUgaW5zdGFudGlhdGVkIGFzIHNvb24gYXMgImRvRWFnZXJJbml0
W1ZpYV0iIGlzIGNhbGxlZC4KLSAgICogU2luZ2xldG9ucyBhcmUgdXN1YWxseSBsYXp5LWxvYWRl
ZCAoYnVpbHQgb24tZGVtYW5kKSBidXQgZm9yIHRob3NlIHdoaWNoCi0gICAqIGFyZSBrbm93biB0
byBiZSBuZWVkZWQsIHRvIGF2b2lkIHRoZSBwb3RlbnRpYWwgbGFnIGZvciBvYmplY3RzIHRoYXQg
dGFrZQotICAgKiBsb25nIHRvIGNvbnN0cnVjdCBkdXJpbmcgcnVudGltZSwgdGhlcmUgaXMgYW4g
b3B0aW9uIHRvIG1ha2Ugc3VyZSB0aGVzZQotICAgKiBhcmUgYnVpbHQgdXAtZnJvbnQuCi0gICAq
Ci0gICAqIFVzZSBsaWtlOgotICAgKiAgIFNpbmdsZXRvbjxGb28+IGdGb29JbnN0YW5jZSA9IFNp
bmdsZXRvbjxGb28+KC4uLikuc2hvdWxkRWFnZXJJbml0KCk7Ci0gICAqCi0gICAqIE9yIGFsdGVy
bmF0ZWx5LCBkZWZpbmUgdGhlIHNpbmdsZXRvbiBhcyB1c3VhbCwgYW5kIHNheQotICAgKiAgIGdG
b29JbnN0YW5jZS5zaG91bGRFYWdlckluaXQoKTsKLSAgICoKLSAgICogYXQgc29tZSBwb2ludCBw
cmlvciB0byBjYWxsaW5nIHJlZ2lzdHJhdGlvbkNvbXBsZXRlKCkuCi0gICAqIFRoZW4gZG9FYWdl
ckluaXQoKSBvciBkb0VhZ2VySW5pdFZpYShFeGVjdXRvciopIGNhbiBiZSBjYWxsZWQuCi0gICAq
LwotICBTaW5nbGV0b24mIHNob3VsZEVhZ2VySW5pdCgpIHsKLSAgICBhdXRvIHZhdWx0ID0gU2lu
Z2xldG9uVmF1bHQ6OnNpbmdsZXRvbjxWYXVsdFRhZz4oKTsKLSAgICB2YXVsdC0+YWRkRWFnZXJJ
bml0U2luZ2xldG9uKCZnZXRFbnRyeSgpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICAv
KioKLSAgKiBDb25zdHJ1Y3QgYW5kIGluamVjdCBhIG1vY2sgc2luZ2xldG9uIHdoaWNoIHNob3Vs
ZCBiZSB1c2VkIG9ubHkgZnJvbSB0ZXN0cy4KLSAgKiBVbmxpa2UgcmVndWxhciBzaW5nbGV0b25z
IHdoaWNoIGFyZSBpbml0aWFsaXplZCBvbmNlIHBlciBwcm9jZXNzIGxpZmV0aW1lLAotICAqIG1v
Y2sgc2luZ2xldG9ucyBsaXZlIGZvciB0aGUgZHVyYXRpb24gb2YgYSB0ZXN0LiBUaGlzIG1lYW5z
IHRoYXQgb25lIHByb2Nlc3MKLSAgKiBydW5uaW5nIG11bHRpcGxlIHRlc3RzIGNhbiBpbml0aWFs
aXplIGFuZCByZWdpc3RlciB0aGUgc2FtZSBzaW5nbGV0b24KLSAgKiBtdWx0aXBsZSB0aW1lcy4g
VGhpcyBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZSB1c2VkIG9ubHkgZnJvbSB0ZXN0cwotICAqIHNp
bmNlIGl0IHJlbGF4ZXMgdmFsaWRhdGlvbiBhbmQgcGVyZm9ybWFuY2UgaW4gb3JkZXIgdG8gYmUg
YWJsZSB0byBwZXJmb3JtCi0gICogdGhlIGluamVjdGlvbi4gVGhlIHJldHVybmVkIG1vY2sgc2lu
Z2xldG9uIGlzIGZ1bmN0aW9uYWxpdHkgaWRlbnRpY2FsIHRvCi0gICogcmVndWxhciBzaW5nbGV0
b25zLgotICAqLwotICBzdGF0aWMgdm9pZCBtYWtlX21vY2soc3RkOjpudWxscHRyX3QgLyogYyAq
LyA9IG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBTaW5nbGV0b248
VD46OlRlYXJkb3duRnVuYyB0ID0gbnVsbHB0cikgewotICAgIG1ha2VfbW9jayhbXSgpIHsgcmV0
dXJuIG5ldyBUOyB9LCB0KTsKLSAgfQotCi0gIHN0YXRpYyB2b2lkIG1ha2VfbW9jayhDcmVhdGVG
dW5jIGMsCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBTaW5nbGV0b248VD46OlRl
YXJkb3duRnVuYyB0ID0gbnVsbHB0cikgewotICAgIGlmIChjID09IG51bGxwdHIpIHsKLSAgICAg
IHRocm93IHN0ZDo6bG9naWNfZXJyb3IoCi0gICAgICAgICJudWxscHRyX3Qgc2hvdWxkIGJlIHBh
c3NlZCBpZiB5b3Ugd2FudCBUIHRvIGJlIGRlZmF1bHQgY29uc3RydWN0ZWQiKTsKLSAgICB9Ci0K
LSAgICBhdXRvJiBlbnRyeSA9IGdldEVudHJ5KCk7Ci0KLSAgICBlbnRyeS5yZWdpc3RlclNpbmds
ZXRvbk1vY2soYywgZ2V0VGVhcmRvd25GdW5jKHQpKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgaW5s
aW5lIHN0YXRpYyBkZXRhaWw6OlNpbmdsZXRvbkhvbGRlcjxUPiYgZ2V0RW50cnkoKSB7Ci0gICAg
cmV0dXJuIGRldGFpbDo6U2luZ2xldG9uSG9sZGVyPFQ+Ojp0ZW1wbGF0ZSBzaW5nbGV0b248VGFn
LCBWYXVsdFRhZz4oKTsKLSAgfQotCi0gIC8vIENvbnN0cnVjdCBUZWFyZG93bkZ1bmMuCi0gIHN0
YXRpYyB0eXBlbmFtZSBkZXRhaWw6OlNpbmdsZXRvbkhvbGRlcjxUPjo6VGVhcmRvd25GdW5jIGdl
dFRlYXJkb3duRnVuYygKLSAgICAgIFRlYXJkb3duRnVuYyB0KSAgewotICAgIGlmICh0ID09IG51
bGxwdHIpIHsKLSAgICAgIHJldHVybiAgW10oVCogdikgeyBkZWxldGUgdjsgfTsKLSAgICB9IGVs
c2UgewotICAgICAgcmV0dXJuIHQ7Ci0gICAgfQotICB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVGFnID0gZGV0YWlsOjpEZWZhdWx0VGFnPgotY2xhc3MgTGVha3lTaW5n
bGV0b24gewotIHB1YmxpYzoKLSAgdXNpbmcgQ3JlYXRlRnVuYyA9IHN0ZDo6ZnVuY3Rpb248VCoo
KT47Ci0KLSAgTGVha3lTaW5nbGV0b24oKSA6IExlYWt5U2luZ2xldG9uKFtdIHsgcmV0dXJuIG5l
dyBUKCk7IH0pIHt9Ci0KLSAgZXhwbGljaXQgTGVha3lTaW5nbGV0b24oQ3JlYXRlRnVuYyBjcmVh
dGVGdW5jKSB7Ci0gICAgYXV0byYgZW50cnkgPSBlbnRyeUluc3RhbmNlKCk7Ci0gICAgaWYgKGVu
dHJ5LnN0YXRlICE9IFN0YXRlOjpOb3RSZWdpc3RlcmVkKSB7Ci0gICAgICBMT0coRkFUQUwpIDw8
ICJEb3VibGUgcmVnaXN0cmF0aW9uIG9mIHNpbmdsZXRvbnMgb2YgdGhlIHNhbWUgIgotICAgICAg
ICAgICAgICAgICA8PCAidW5kZXJseWluZyB0eXBlOyBjaGVjayBmb3IgbXVsdGlwbGUgZGVmaW5p
dGlvbnMgIgotICAgICAgICAgICAgICAgICA8PCAib2YgdHlwZSBmb2xseTo6TGVha3lTaW5nbGV0
b248IiArIGVudHJ5LnR5cGVfLm5hbWUoKSArICI+IjsKLSAgICB9Ci0gICAgZW50cnkuY3JlYXRl
RnVuYyA9IGNyZWF0ZUZ1bmM7Ci0gICAgZW50cnkuc3RhdGUgPSBTdGF0ZTo6RGVhZDsKLSAgfQot
Ci0gIHN0YXRpYyBUJiBnZXQoKSB7IHJldHVybiBpbnN0YW5jZSgpOyB9Ci0KLSAgc3RhdGljIHZv
aWQgbWFrZV9tb2NrKHN0ZDo6bnVsbHB0cl90IC8qIGMgKi8gPSBudWxscHRyKSB7Ci0gICAgbWFr
ZV9tb2NrKFtdKCkgeyByZXR1cm4gbmV3IFQ7IH0pOwotICB9Ci0KLSAgc3RhdGljIHZvaWQgbWFr
ZV9tb2NrKENyZWF0ZUZ1bmMgY3JlYXRlRnVuYykgewotICAgIGF1dG8mIGVudHJ5ID0gZW50cnlJ
bnN0YW5jZSgpOwotICAgIGlmIChjcmVhdGVGdW5jID09IG51bGxwdHIpIHsKLSAgICAgIHRocm93
IHN0ZDo6bG9naWNfZXJyb3IoCi0gICAgICAgICAgIm51bGxwdHJfdCBzaG91bGQgYmUgcGFzc2Vk
IGlmIHlvdSB3YW50IFQgdG8gYmUgZGVmYXVsdCBjb25zdHJ1Y3RlZCIpOwotICAgIH0KLQotICAg
IGVudHJ5LmNyZWF0ZUZ1bmMgPSBjcmVhdGVGdW5jOwotICAgIGVudHJ5LnN0YXRlID0gU3RhdGU6
OkRlYWQ7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGVudW0gY2xhc3MgU3RhdGUgeyBOb3RSZWdpc3Rl
cmVkLCBEZWFkLCBMaXZpbmcgfTsKLQotICBzdHJ1Y3QgRW50cnkgewotICAgIEVudHJ5KCkge30K
LSAgICBFbnRyeShjb25zdCBFbnRyeSYpID0gZGVsZXRlOwotICAgIEVudHJ5JiBvcGVyYXRvcj0o
Y29uc3QgRW50cnkmKSA9IGRlbGV0ZTsKLQotICAgIHN0ZDo6YXRvbWljPFN0YXRlPiBzdGF0ZXtT
dGF0ZTo6Tm90UmVnaXN0ZXJlZH07Ci0gICAgVCogcHRye251bGxwdHJ9OwotICAgIENyZWF0ZUZ1
bmMgY3JlYXRlRnVuYzsKLSAgICBzdGQ6Om11dGV4IG11dGV4OwotICAgIGRldGFpbDo6VHlwZURl
c2NyaXB0b3IgdHlwZV97dHlwZWlkKFQpLCB0eXBlaWQoVGFnKX07Ci0gIH07Ci0KLSAgc3RhdGlj
IEVudHJ5JiBlbnRyeUluc3RhbmNlKCkgewotICAgIC8qIGxpYnJhcnktbG9jYWwgKi8gc3RhdGlj
IGF1dG8gZW50cnkgPSBkZXRhaWw6OmNyZWF0ZUdsb2JhbDxFbnRyeSwgVGFnPigpOwotICAgIHJl
dHVybiAqZW50cnk7Ci0gIH0KLQotICBzdGF0aWMgVCYgaW5zdGFuY2UoKSB7Ci0gICAgYXV0byYg
ZW50cnkgPSBlbnRyeUluc3RhbmNlKCk7Ci0gICAgaWYgKFVOTElLRUxZKGVudHJ5LnN0YXRlICE9
IFN0YXRlOjpMaXZpbmcpKSB7Ci0gICAgICBjcmVhdGVJbnN0YW5jZSgpOwotICAgIH0KLQotICAg
IHJldHVybiAqZW50cnkucHRyOwotICB9Ci0KLSAgc3RhdGljIHZvaWQgY3JlYXRlSW5zdGFuY2Uo
KSB7Ci0gICAgYXV0byYgZW50cnkgPSBlbnRyeUluc3RhbmNlKCk7Ci0KLSAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbGcoZW50cnkubXV0ZXgpOwotICAgIGlmIChlbnRyeS5zdGF0ZSA9
PSBTdGF0ZTo6TGl2aW5nKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGVudHJ5
LnN0YXRlID09IFN0YXRlOjpOb3RSZWdpc3RlcmVkKSB7Ci0gICAgICBhdXRvIHB0ciA9IFNpbmds
ZXRvblZhdWx0OjpzdGFja1RyYWNlR2V0dGVyKCkubG9hZCgpOwotICAgICAgTE9HKEZBVEFMKSA8
PCAiQ3JlYXRpbmcgaW5zdGFuY2UgZm9yIHVucmVnaXN0ZXJlZCBzaW5nbGV0b246ICIKLSAgICAg
ICAgICAgICAgICAgPDwgZW50cnkudHlwZV8ubmFtZSgpIDw8ICJcbiIKLSAgICAgICAgICAgICAg
ICAgPDwgIlN0YWNrdHJhY2U6IgotICAgICAgICAgICAgICAgICA8PCAiXG4iIDw8IChwdHIgPyAo
KnB0cikoKSA6ICIobm90IGF2YWlsYWJsZSkiKTsKLSAgICB9Ci0KLSAgICBlbnRyeS5wdHIgPSBl
bnRyeS5jcmVhdGVGdW5jKCk7Ci0gICAgZW50cnkuc3RhdGUgPSBTdGF0ZTo6TGl2aW5nOwotICB9
Ci19OwotfQotCi0jaW5jbHVkZSA8Zm9sbHkvU2luZ2xldG9uLWlubC5oPgpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvU2luZ2xldG9uVGhyZWFk
TG9jYWwuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1Npbmds
ZXRvblRocmVhZExvY2FsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNDg3OGJm
OTg3NTk1NDFmZjFkYzcwMjE3YmUyNmRiMDc0NmZlNGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZm9sbHkvU2luZ2xldG9uVGhyZWFkTG9jYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp
OwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
IHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAq
Ci0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgPGZvbGx5L1NpbmdsZXRvbi5oPgotI2luY2x1ZGUgPGZvbGx5L1Ro
cmVhZExvY2FsLmg+Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLS8vIFNpbmdsZXRvblRocmVhZExv
Y2FsCi0vLwotLy8gVGhpcyBjbGFzcyBjYW4gaGVscCB5b3UgaW1wbGVtZW50IGEgcGVyLXRocmVh
ZCBsZWFreS1zaW5nbGV0b24gbW9kZWwgd2l0aGluCi0vLyB5b3VyIGFwcGxpY2F0aW9uLiBQbGVh
c2UgcmVhZCB0aGUgdXNhZ2UgYmxvY2sgYXQgdGhlIHRvcCBvZiBTaW5nbGV0b24uaCBhcwotLy8g
dGhlIHJlY29tbWVuZGF0aW9ucyB0aGVyZSBhcmUgYWxzbyBnZW5lcmFsbHkgYXBwbGljYWJsZSB0
byB0aGlzIGNsYXNzLgotLy8KLS8vIFdoZW4gd2Ugc2F5IHRoaXMgaXMgImxlYWt5IiB3ZSBtZWFu
IHRoYXQgdGhlIFQgaW5zdGFuY2VzIGhlbGQgYnkgYQotLy8gU2luZ2xldG9uVGhyZWFkTG9jYWw8
VD4gd2lsbCBzdXJ2aXZlIHVudGlsIHRoZWlyIG93bmluZyB0aHJlYWQgZXhpdHMsCi0vLyByZWdh
cmRsZXNzIG9mIHRoZSBsaWZldGltZSBvZiB0aGUgc2luZ2xldG9uIG9iamVjdCBob2xkaW5nIHRo
ZW0uICBUaGF0Ci0vLyBtZWFucyB0aGF0IHRoZXkgY2FuIGJlIHNhZmVseSB1c2VkIGR1cmluZyBw
cm9jZXNzIHNodXRkb3duLCBhbmQKLS8vIHRoYXQgdGhleSBjYW4gYWxzbyBiZSBzYWZlbHkgdXNl
ZCBpbiBhbiBhcHBsaWNhdGlvbiB0aGF0IHNwYXducyBtYW55Ci0vLyB0ZW1wb3JhcnkgdGhyZWFk
cyB0aHJvdWdob3V0IGl0cyBsaWZlLgotLy8KLS8vIEtleXdvcmRzIHRvIGhlbHAgcGVvcGxlIGZp
bmQgdGhpcyBjbGFzcyBpbiBzZWFyY2g6Ci0vLyBUaHJlYWQgTG9jYWwgU2luZ2xldG9uIFRocmVh
ZExvY2FsU2luZ2xldG9uCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVGFnID0gZGV0
YWlsOjpEZWZhdWx0VGFnPgotY2xhc3MgU2luZ2xldG9uVGhyZWFkTG9jYWwgewotIHB1YmxpYzoK
LSAgdXNpbmcgQ3JlYXRlRnVuYyA9IHN0ZDo6ZnVuY3Rpb248VCoodm9pZCk+OwotCi0gIFNpbmds
ZXRvblRocmVhZExvY2FsKCkgOiBTaW5nbGV0b25UaHJlYWRMb2NhbChbXSgpIHsgcmV0dXJuIG5l
dyBUKCk7IH0pIHt9Ci0KLSAgZXhwbGljaXQgU2luZ2xldG9uVGhyZWFkTG9jYWwoQ3JlYXRlRnVu
YyBjcmVhdGVGdW5jKQotICAgICAgOiBzaW5nbGV0b25fKFtjcmVhdGVGdW5jID0gc3RkOjptb3Zl
KGNyZWF0ZUZ1bmMpXSgpIG11dGFibGUgewotICAgICAgICAgIHJldHVybiBuZXcgVGhyZWFkTG9j
YWxUKFtjcmVhdGVGdW5jID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6bW92ZShjcmVhdGVGdW5jKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHJldHVybiBu
ZXcgV3JhcHBlcihzdGQ6OnVuaXF1ZV9wdHI8VD4oY3JlYXRlRnVuYygpKSk7Ci0gICAgICAgICAg
fSk7Ci0gICAgICAgIH0pIHt9Ci0KLSAgc3RhdGljIFQmIGdldCgpIHsKLSNpZmRlZiBGT0xMWV9U
TFMKLSAgICBpZiAoVU5MSUtFTFkoKmxvY2FsUHRyKCkgPT0gbnVsbHB0cikpIHsKLSAgICAgICps
b2NhbFB0cigpID0gJigqKlNpbmdsZXRvblQ6OmdldCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
Kipsb2NhbFB0cigpOwotI2Vsc2UKLSAgICByZXR1cm4gKipTaW5nbGV0b25UOjpnZXQoKTsKLSNl
bmRpZgotICB9Ci0KLSBwcml2YXRlOgotI2lmZGVmIEZPTExZX1RMUwotICBzdGF0aWMgVCoqIGxv
Y2FsUHRyKCkgewotICAgIHN0YXRpYyBGT0xMWV9UTFMgVCogbG9jYWxQdHIgPSBudWxscHRyOwot
ICAgIHJldHVybiAmbG9jYWxQdHI7Ci0gIH0KLSNlbmRpZgotCi0gIGNsYXNzIFdyYXBwZXIgewot
ICAgcHVibGljOgotICAgIGV4cGxpY2l0IFdyYXBwZXIoc3RkOjp1bmlxdWVfcHRyPFQ+IHQpIDog
dF8oc3RkOjptb3ZlKHQpKSB7fQotCi0gICAgfldyYXBwZXIoKSB7Ci0jaWZkZWYgRk9MTFlfVExT
Ci0gICAgICAqbG9jYWxQdHIoKSA9IG51bGxwdHI7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBUJiBv
cGVyYXRvciooKSB7IHJldHVybiAqdF87IH0KLQotICAgcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VD4gdF87Ci0gIH07Ci0KLSAgdXNpbmcgVGhyZWFkTG9jYWxUID0gVGhyZWFkTG9jYWw8
V3JhcHBlcj47Ci0gIHVzaW5nIFNpbmdsZXRvblQgPSBMZWFreVNpbmdsZXRvbjxUaHJlYWRMb2Nh
bFQsIFRhZz47Ci0KLSAgU2luZ2xldG9uVCBzaW5nbGV0b25fOwotfTsKLX0KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1N0cmluZy1pbmwuaCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1N0cmluZy1pbmwuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4YjZlNWRkNGNjZmFlOGY5NTY5N2MxNDQy
MjJkM2Y0ZWQ4N2U2Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9TdHJpbmctaW5s
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3
IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl
LCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hl
Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBs
aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs
Ci0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVy
IHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8aXRlcmF0b3I+
Ci0jaW5jbHVkZSA8c3RkZXhjZXB0PgotCi0jaW5jbHVkZSA8Zm9sbHkvQ3BwQXR0cmlidXRlcy5o
PgotCi0jaWZuZGVmIEZPTExZX1NUUklOR19IXwotI2Vycm9yIFRoaXMgZmlsZSBtYXkgb25seSBi
ZSBpbmNsdWRlZCBmcm9tIFN0cmluZy5oCi0jZW5kaWYKLQotbmFtZXNwYWNlIGZvbGx5IHsKLQot
bmFtZXNwYWNlIGRldGFpbCB7Ci0vLyBNYXAgZnJvbSBjaGFyYWN0ZXIgY29kZSB0byB2YWx1ZSBv
ZiBvbmUtY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZQotLy8gKCdcbicgPSAxMCBtYXBzIHRvICdu
JyksICdPJyBpZiB0aGUgY2hhcmFjdGVyIHNob3VsZCBiZSBwcmludGVkIGFzCi0vLyBhbiBvY3Rh
bCBlc2NhcGUgc2VxdWVuY2UsIG9yICdQJyBpZiB0aGUgY2hhcmFjdGVyIGlzIHByaW50YWJsZSBh
bmQKLS8vIHNob3VsZCBiZSBwcmludGVkIGFzIGlzLgotZXh0ZXJuIGNvbnN0IGNoYXIgY0VzY2Fw
ZVRhYmxlW107Ci19ICAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLXRlbXBsYXRlIDxjbGFzcyBTdHJp
bmc+Ci12b2lkIGNFc2NhcGUoU3RyaW5nUGllY2Ugc3RyLCBTdHJpbmcmIG91dCkgewotICBjaGFy
IGVzY1s0XTsKLSAgZXNjWzBdID0gJ1xcJzsKLSAgb3V0LnJlc2VydmUob3V0LnNpemUoKSArIHN0
ci5zaXplKCkpOwotICBhdXRvIHAgPSBzdHIuYmVnaW4oKTsKLSAgYXV0byBsYXN0ID0gcDsgIC8v
IGxhc3QgcmVndWxhciBjaGFyYWN0ZXIKLSAgLy8gV2UgYWR2YW5jZSBvdmVyIHJ1bnMgb2YgcmVn
dWxhciBjaGFyYWN0ZXJzIChwcmludGFibGUsIG5vdCBkb3VibGUtcXVvdGUgb3IKLSAgLy8gYmFj
a3NsYXNoKSBhbmQgY29weSB0aGVtIGluIG9uZSBnbzsgdGhpcyBpcyBmYXN0ZXIgdGhhbiBjYWxs
aW5nIHB1c2hfYmFjawotICAvLyByZXBlYXRlZGx5LgotICB3aGlsZSAocCAhPSBzdHIuZW5kKCkp
IHsKLSAgICBjaGFyIGMgPSAqcDsKLSAgICB1bnNpZ25lZCBjaGFyIHYgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihjKTsKLSAgICBjaGFyIGUgPSBkZXRhaWw6OmNFc2NhcGVUYWJsZVt2XTsK
LSAgICBpZiAoZSA9PSAnUCcpIHsgIC8vIHByaW50YWJsZQotICAgICAgKytwOwotICAgIH0gZWxz
ZSBpZiAoZSA9PSAnTycpIHsgIC8vIG9jdGFsCi0gICAgICBvdXQuYXBwZW5kKCYqbGFzdCwgc2l6
ZV90KHAgLSBsYXN0KSk7Ci0gICAgICBlc2NbMV0gPSAnMCcgKyAoKHYgPj4gNikgJiA3KTsKLSAg
ICAgIGVzY1syXSA9ICcwJyArICgodiA+PiAzKSAmIDcpOwotICAgICAgZXNjWzNdID0gJzAnICsg
KHYgJiA3KTsKLSAgICAgIG91dC5hcHBlbmQoZXNjLCA0KTsKLSAgICAgICsrcDsKLSAgICAgIGxh
c3QgPSBwOwotICAgIH0gZWxzZSB7ICAvLyBzcGVjaWFsIDEtY2hhcmFjdGVyIGVzY2FwZQotICAg
ICAgb3V0LmFwcGVuZCgmKmxhc3QsIHNpemVfdChwIC0gbGFzdCkpOwotICAgICAgZXNjWzFdID0g
ZTsKLSAgICAgIG91dC5hcHBlbmQoZXNjLCAyKTsKLSAgICAgICsrcDsKLSAgICAgIGxhc3QgPSBw
OwotICAgIH0KLSAgfQotICBvdXQuYXBwZW5kKCYqbGFzdCwgc2l6ZV90KHAgLSBsYXN0KSk7Ci19
Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotLy8gTWFwIGZyb20gdGhlIGNoYXJhY3RlciBjb2RlIG9m
IHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIGEgYmFja3NsYXNoIHRvCi0vLyB0aGUgdW5lc2NhcGVk
IGNoYXJhY3RlciBpZiBhIHZhbGlkIG9uZS1jaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlCi0vLyAo
J24nIG1hcHMgdG8gMTAgPSAnXG4nKSwgJ08nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGNoYXJhY3Rl
ciBvZiBhbgotLy8gb2N0YWwgZXNjYXBlIHNlcXVlbmNlLCAnWCcgaWYgdGhpcyBpcyB0aGUgZmly
c3QgY2hhcmFjdGVyIG9mIGEKLS8vIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZSwgb3IgJ0kn
IGlmIHRoaXMgZXNjYXBlIHNlcXVlbmNlIGlzIGludmFsaWQuCi1leHRlcm4gY29uc3QgY2hhciBj
VW5lc2NhcGVUYWJsZVtdOwotCi0vLyBNYXAgZnJvbSB0aGUgY2hhcmFjdGVyIGNvZGUgdG8gdGhl
IGhleCB2YWx1ZSwgb3IgMTYgaWYgaW52YWxpZCBoZXggY2hhci4KLWV4dGVybiBjb25zdCB1bnNp
Z25lZCBjaGFyIGhleFRhYmxlW107Ci19ICAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLXRlbXBsYXRl
IDxjbGFzcyBTdHJpbmc+Ci12b2lkIGNVbmVzY2FwZShTdHJpbmdQaWVjZSBzdHIsIFN0cmluZyYg
b3V0LCBib29sIHN0cmljdCkgewotICBvdXQucmVzZXJ2ZShvdXQuc2l6ZSgpICsgc3RyLnNpemUo
KSk7Ci0gIGF1dG8gcCA9IHN0ci5iZWdpbigpOwotICBhdXRvIGxhc3QgPSBwOyAgLy8gbGFzdCBy
ZWd1bGFyIGNoYXJhY3RlciAobm90IHBhcnQgb2YgYW4gZXNjYXBlIHNlcXVlbmNlKQotICAvLyBX
ZSBhZHZhbmNlIG92ZXIgcnVucyBvZiByZWd1bGFyIGNoYXJhY3RlcnMgKG5vdCBiYWNrc2xhc2gp
IGFuZCBjb3B5IHRoZW0KLSAgLy8gaW4gb25lIGdvOyB0aGlzIGlzIGZhc3RlciB0aGFuIGNhbGxp
bmcgcHVzaF9iYWNrIHJlcGVhdGVkbHkuCi0gIHdoaWxlIChwICE9IHN0ci5lbmQoKSkgewotICAg
IGNoYXIgYyA9ICpwOwotICAgIGlmIChjICE9ICdcXCcpIHsgIC8vIG5vcm1hbCBjYXNlCi0gICAg
ICArK3A7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgb3V0LmFwcGVuZCgmKmxhc3QsIHAg
LSBsYXN0KTsKLSAgICBpZiAocCA9PSBzdHIuZW5kKCkpIHsgIC8vIGJhY2tzbGFzaCBhdCBlbmQg
b2Ygc3RyaW5nCi0gICAgICBpZiAoc3RyaWN0KSB7Ci0gICAgICAgIHRocm93IHN0ZDo6aW52YWxp
ZF9hcmd1bWVudCgiaW5jb21wbGV0ZSBlc2NhcGUgc2VxdWVuY2UiKTsKLSAgICAgIH0KLSAgICAg
IG91dC5wdXNoX2JhY2soJ1xcJyk7Ci0gICAgICBsYXN0ID0gcDsKLSAgICAgIGNvbnRpbnVlOwot
ICAgIH0KLSAgICArK3A7Ci0gICAgY2hhciBlID0gZGV0YWlsOjpjVW5lc2NhcGVUYWJsZVtzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqcCldOwotICAgIGlmIChlID09ICdPJykgeyAgLy8gb2N0
YWwKLSAgICAgIHVuc2lnbmVkIGNoYXIgdmFsID0gMDsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMyAmJiBwICE9IHN0ci5lbmQoKSAmJiAqcCA+PSAnMCcgJiYgKnAgPD0gJzcnOwotICAgICAg
ICAgICArK2ksICsrcCkgewotICAgICAgICB2YWwgPSAodmFsIDw8IDMpIHwgKCpwIC0gJzAnKTsK
LSAgICAgIH0KLSAgICAgIG91dC5wdXNoX2JhY2sodmFsKTsKLSAgICAgIGxhc3QgPSBwOwotICAg
IH0gZWxzZSBpZiAoZSA9PSAnWCcpIHsgIC8vIGhleAotICAgICAgKytwOwotICAgICAgaWYgKHAg
PT0gc3RyLmVuZCgpKSB7ICAvLyBceCBhdCBlbmQgb2Ygc3RyaW5nCi0gICAgICAgIGlmIChzdHJp
Y3QpIHsKLSAgICAgICAgICB0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQoImluY29tcGxldGUg
aGV4IGVzY2FwZSBzZXF1ZW5jZSIpOwotICAgICAgICB9Ci0gICAgICAgIG91dC5hcHBlbmQoIlxc
eCIpOwotICAgICAgICBsYXN0ID0gcDsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAg
ICB1bnNpZ25lZCBjaGFyIHZhbCA9IDA7Ci0gICAgICB1bnNpZ25lZCBjaGFyIGg7Ci0gICAgICBm
b3IgKDsgKHAgIT0gc3RyLmVuZCgpICYmCi0gICAgICAgICAgICAgIChoID0gZGV0YWlsOjpoZXhU
YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqcCldKSA8IDE2KTsKLSAgICAgICAgICAg
KytwKSB7Ci0gICAgICAgIHZhbCA9ICh2YWwgPDwgNCkgfCBoOwotICAgICAgfQotICAgICAgb3V0
LnB1c2hfYmFjayh2YWwpOwotICAgICAgbGFzdCA9IHA7Ci0gICAgfSBlbHNlIGlmIChlID09ICdJ
JykgeyAgLy8gaW52YWxpZAotICAgICAgaWYgKHN0cmljdCkgewotICAgICAgICB0aHJvdyBzdGQ6
OmludmFsaWRfYXJndW1lbnQoImludmFsaWQgZXNjYXBlIHNlcXVlbmNlIik7Ci0gICAgICB9Ci0g
ICAgICBvdXQucHVzaF9iYWNrKCdcXCcpOwotICAgICAgb3V0LnB1c2hfYmFjaygqcCk7Ci0gICAg
ICArK3A7Ci0gICAgICBsYXN0ID0gcDsKLSAgICB9IGVsc2UgeyAgLy8gc3RhbmRhcmQgZXNjYXBl
IHNlcXVlbmNlLCBcJyBldGMKLSAgICAgIG91dC5wdXNoX2JhY2soZSk7Ci0gICAgICArK3A7Ci0g
ICAgICBsYXN0ID0gcDsKLSAgICB9Ci0gIH0KLSAgb3V0LmFwcGVuZCgmKmxhc3QsIHAgLSBsYXN0
KTsKLX0KLQotbmFtZXNwYWNlIGRldGFpbCB7Ci0vLyBNYXAgZnJvbSBjaGFyYWN0ZXIgY29kZSB0
byBlc2NhcGUgbW9kZToKLS8vIDAgPSBwYXNzIHRocm91Z2gKLS8vIDEgPSB1bnVzZWQKLS8vIDIg
PSBwYXNzIHRocm91Z2ggaW4gUEFUSCBtb2RlCi0vLyAzID0gc3BhY2UsIHJlcGxhY2Ugd2l0aCAn
KycgaW4gUVVFUlkgbW9kZQotLy8gNCA9IHBlcmNlbnQtZW5jb2RlCi1leHRlcm4gY29uc3QgdW5z
aWduZWQgY2hhciB1cmlFc2NhcGVUYWJsZVtdOwotfSAgLy8gbmFtZXNwYWNlIGRldGFpbAotCi10
ZW1wbGF0ZSA8Y2xhc3MgU3RyaW5nPgotdm9pZCB1cmlFc2NhcGUoU3RyaW5nUGllY2Ugc3RyLCBT
dHJpbmcmIG91dCwgVXJpRXNjYXBlTW9kZSBtb2RlKSB7Ci0gIHN0YXRpYyBjb25zdCBjaGFyIGhl
eFZhbHVlc1tdID0gIjAxMjM0NTY3ODlhYmNkZWYiOwotICBjaGFyIGVzY1szXTsKLSAgZXNjWzBd
ID0gJyUnOwotICAvLyBQcmVhbGxvY2F0ZSBhc3N1bWluZyB0aGF0IDI1JSBvZiB0aGUgaW5wdXQg
c3RyaW5nIHdpbGwgYmUgZXNjYXBlZAotICBvdXQucmVzZXJ2ZShvdXQuc2l6ZSgpICsgc3RyLnNp
emUoKSArIDMgKiAoc3RyLnNpemUoKSAvIDQpKTsKLSAgYXV0byBwID0gc3RyLmJlZ2luKCk7Ci0g
IGF1dG8gbGFzdCA9IHA7ICAvLyBsYXN0IHJlZ3VsYXIgY2hhcmFjdGVyCi0gIC8vIFdlIGFkdmFu
Y2Ugb3ZlciBydW5zIG9mIHBhc3N0aHJvdWdoIGNoYXJhY3RlcnMgYW5kIGNvcHkgdGhlbSBpbiBv
bmUgZ287Ci0gIC8vIHRoaXMgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBwdXNoX2JhY2sgcmVwZWF0
ZWRseS4KLSAgdW5zaWduZWQgY2hhciBtaW5FbmNvZGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPihtb2RlKTsKLSAgd2hpbGUgKHAgIT0gc3RyLmVuZCgpKSB7Ci0gICAgY2hhciBjID0gKnA7
Ci0gICAgdW5zaWduZWQgY2hhciB2ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyk7Ci0g
ICAgdW5zaWduZWQgY2hhciBkaXNjcmltaW5hdG9yID0gZGV0YWlsOjp1cmlFc2NhcGVUYWJsZVt2
XTsKLSAgICBpZiAoTElLRUxZKGRpc2NyaW1pbmF0b3IgPD0gbWluRW5jb2RlKSkgewotICAgICAg
KytwOwotICAgIH0gZWxzZSBpZiAobW9kZSA9PSBVcmlFc2NhcGVNb2RlOjpRVUVSWSAmJiBkaXNj
cmltaW5hdG9yID09IDMpIHsKLSAgICAgIG91dC5hcHBlbmQoJipsYXN0LCBzaXplX3QocCAtIGxh
c3QpKTsKLSAgICAgIG91dC5wdXNoX2JhY2soJysnKTsKLSAgICAgICsrcDsKLSAgICAgIGxhc3Qg
PSBwOwotICAgIH0gZWxzZSB7Ci0gICAgICBvdXQuYXBwZW5kKCYqbGFzdCwgc2l6ZV90KHAgLSBs
YXN0KSk7Ci0gICAgICBlc2NbMV0gPSBoZXhWYWx1ZXNbdiA+PiA0XTsKLSAgICAgIGVzY1syXSA9
IGhleFZhbHVlc1t2ICYgMHgwZl07Ci0gICAgICBvdXQuYXBwZW5kKGVzYywgMyk7Ci0gICAgICAr
K3A7Ci0gICAgICBsYXN0ID0gcDsKLSAgICB9Ci0gIH0KLSAgb3V0LmFwcGVuZCgmKmxhc3QsIHNp
emVfdChwIC0gbGFzdCkpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgU3RyaW5nPgotdm9pZCB1cmlV
bmVzY2FwZShTdHJpbmdQaWVjZSBzdHIsIFN0cmluZyYgb3V0LCBVcmlFc2NhcGVNb2RlIG1vZGUp
IHsKLSAgb3V0LnJlc2VydmUob3V0LnNpemUoKSArIHN0ci5zaXplKCkpOwotICBhdXRvIHAgPSBz
dHIuYmVnaW4oKTsKLSAgYXV0byBsYXN0ID0gcDsKLSAgLy8gV2UgYWR2YW5jZSBvdmVyIHJ1bnMg
b2YgcGFzc3Rocm91Z2ggY2hhcmFjdGVycyBhbmQgY29weSB0aGVtIGluIG9uZSBnbzsKLSAgLy8g
dGhpcyBpcyBmYXN0ZXIgdGhhbiBjYWxsaW5nIHB1c2hfYmFjayByZXBlYXRlZGx5LgotICB3aGls
ZSAocCAhPSBzdHIuZW5kKCkpIHsKLSAgICBjaGFyIGMgPSAqcDsKLSAgICBzd2l0Y2ggKGMpIHsK
LSAgICBjYXNlICclJzoKLSAgICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKHN0ZDo6ZGlzdGFu
Y2UocCwgc3RyLmVuZCgpKSA8IDMpKSB7Ci0gICAgICAgICAgdGhyb3cgc3RkOjppbnZhbGlkX2Fy
Z3VtZW50KCJpbmNvbXBsZXRlIHBlcmNlbnQgZW5jb2RlIHNlcXVlbmNlIik7Ci0gICAgICAgIH0K
LSAgICAgICAgYXV0byBoMSA9IGRldGFpbDo6aGV4VGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4ocFsxXSldOwotICAgICAgICBhdXRvIGgyID0gZGV0YWlsOjpoZXhUYWJsZVtzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihwWzJdKV07Ci0gICAgICAgIGlmIChVTkxJS0VMWShoMSA9PSAx
NiB8fCBoMiA9PSAxNikpIHsKLSAgICAgICAgICB0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQo
ImludmFsaWQgcGVyY2VudCBlbmNvZGUgc2VxdWVuY2UiKTsKLSAgICAgICAgfQotICAgICAgICBv
dXQuYXBwZW5kKCYqbGFzdCwgc2l6ZV90KHAgLSBsYXN0KSk7Ci0gICAgICAgIG91dC5wdXNoX2Jh
Y2soKGgxIDw8IDQpIHwgaDIpOwotICAgICAgICBwICs9IDM7Ci0gICAgICAgIGxhc3QgPSBwOwot
ICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICBjYXNlICcrJzoKLSAgICAgIGlmIChtb2RlID09
IFVyaUVzY2FwZU1vZGU6OlFVRVJZKSB7Ci0gICAgICAgIG91dC5hcHBlbmQoJipsYXN0LCBzaXpl
X3QocCAtIGxhc3QpKTsKLSAgICAgICAgb3V0LnB1c2hfYmFjaygnICcpOwotICAgICAgICArK3A7
Ci0gICAgICAgIGxhc3QgPSBwOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8vIGVs
c2UgZmFsbHRocm91Z2gKLSAgICAgIEZPTExZX0ZBTExUSFJPVUdIOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICArK3A7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgb3V0LmFwcGVuZCgmKmxhc3Qs
IHNpemVfdChwIC0gbGFzdCkpOwotfQotCi1uYW1lc3BhY2UgZGV0YWlsIHsKLQotLyoKLSAqIFRo
ZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB0eXBlLW92ZXJsb2FkZWQgaGVscGVycyBmb3IKLSAq
IGludGVybmFsU3BsaXQoKS4KLSAqLwotaW5saW5lIHNpemVfdCBkZWxpbVNpemUoY2hhcikgICAg
ICAgICAgeyByZXR1cm4gMTsgfQotaW5saW5lIHNpemVfdCBkZWxpbVNpemUoU3RyaW5nUGllY2Ug
cykgeyByZXR1cm4gcy5zaXplKCk7IH0KLWlubGluZSBib29sIGF0RGVsaW0oY29uc3QgY2hhciog
cywgY2hhciBjKSB7Ci0gcmV0dXJuICpzID09IGM7Ci19Ci1pbmxpbmUgYm9vbCBhdERlbGltKGNv
bnN0IGNoYXIqIHMsIFN0cmluZ1BpZWNlIHNwKSB7Ci0gIHJldHVybiAhc3RkOjptZW1jbXAocywg
c3Auc3RhcnQoKSwgc3Auc2l6ZSgpKTsKLX0KLQotLy8gVGhlc2UgYXJlIHVzZWQgdG8gc2hvcnQt
Y2lyY3VpdCBpbnRlcm5hbFNwbGl0KCkgaW4gdGhlIGNhc2Ugb2YKLS8vIDEtY2hhcmFjdGVyIHN0
cmluZ3MuCi1pbmxpbmUgY2hhciBkZWxpbUZyb250KGNoYXIgYykgewotICAvLyBUaGlzIG9uZSBl
eGlzdHMgb25seSBmb3IgY29tcGlsZS10aW1lOyBpdCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLgot
ICBzdGQ6OmFib3J0KCk7Ci0gIHJldHVybiBjOwotfQotaW5saW5lIGNoYXIgZGVsaW1Gcm9udChT
dHJpbmdQaWVjZSBzKSB7Ci0gIGFzc2VydCghcy5lbXB0eSgpICYmIHMuc3RhcnQoKSAhPSBudWxs
cHRyKTsKLSAgcmV0dXJuICpzLnN0YXJ0KCk7Ci19Ci0KLS8qCi0gKiBTaGFyZWQgaW1wbGVtZW50
YXRpb24gZm9yIGFsbCB0aGUgc3BsaXQoKSBvdmVybG9hZHMuCi0gKgotICogVGhpcyB1c2VzIHNv
bWUgZXh0ZXJuYWwgaGVscGVycyB0aGF0IGFyZSBvdmVybG9hZGVkIHRvIGxldCB0aGlzCi0gKiBh
bGdvcml0aG0gYmUgbW9yZSBwZXJmb3JtYW50IGlmIHRoZSBkZWxpbWluYXRvciBpcyBhIHNpbmds
ZQotICogY2hhcmFjdGVyIGluc3RlYWQgb2YgYSB3aG9sZSBzdHJpbmcuCi0gKgotICogQHBhcmFt
IGlnbm9yZUVtcHR5IGlmZiB0cnVlLCBkb24ndCBjb3B5IGVtcHR5IHNlZ21lbnRzIHRvIG91dHB1
dAotICovCi10ZW1wbGF0ZTxjbGFzcyBPdXRTdHJpbmdULCBjbGFzcyBEZWxpbVQsIGNsYXNzIE91
dHB1dEl0ZXJhdG9yPgotdm9pZCBpbnRlcm5hbFNwbGl0KERlbGltVCBkZWxpbSwgU3RyaW5nUGll
Y2Ugc3AsIE91dHB1dEl0ZXJhdG9yIG91dCwKLSAgICBib29sIGlnbm9yZUVtcHR5KSB7Ci0gIGFz
c2VydChzcC5lbXB0eSgpIHx8IHNwLnN0YXJ0KCkgIT0gbnVsbHB0cik7Ci0KLSAgY29uc3QgY2hh
ciogcyA9IHNwLnN0YXJ0KCk7Ci0gIGNvbnN0IHNpemVfdCBzdHJTaXplID0gc3Auc2l6ZSgpOwot
ICBjb25zdCBzaXplX3QgZFNpemUgPSBkZWxpbVNpemUoZGVsaW0pOwotCi0gIGlmIChkU2l6ZSA+
IHN0clNpemUgfHwgZFNpemUgPT0gMCkgewotICAgIGlmICghaWdub3JlRW1wdHkgfHwgc3RyU2l6
ZSA+IDApIHsKLSAgICAgICpvdXQrKyA9IHRvPE91dFN0cmluZ1Q+KHNwKTsKLSAgICB9Ci0gICAg
cmV0dXJuOwotICB9Ci0gIGlmIChib29zdDo6aXNfc2FtZTxEZWxpbVQsU3RyaW5nUGllY2U+Ojp2
YWx1ZSAmJiBkU2l6ZSA9PSAxKSB7Ci0gICAgLy8gQ2FsbCB0aGUgY2hhciB2ZXJzaW9uIGJlY2F1
c2UgaXQgaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIuCi0gICAgcmV0dXJuIGludGVybmFsU3BsaXQ8
T3V0U3RyaW5nVD4oZGVsaW1Gcm9udChkZWxpbSksIHNwLCBvdXQsCi0gICAgICBpZ25vcmVFbXB0
eSk7Ci0gIH0KLQotICBzaXplX3QgdG9rZW5TdGFydFBvcyA9IDA7Ci0gIHNpemVfdCB0b2tlblNp
emUgPSAwOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8PSBzdHJTaXplIC0gZFNpemU7ICsraSkg
ewotICAgIGlmIChhdERlbGltKCZzW2ldLCBkZWxpbSkpIHsKLSAgICAgIGlmICghaWdub3JlRW1w
dHkgfHwgdG9rZW5TaXplID4gMCkgewotICAgICAgICAqb3V0KysgPSB0bzxPdXRTdHJpbmdUPihz
cC5zdWJwaWVjZSh0b2tlblN0YXJ0UG9zLCB0b2tlblNpemUpKTsKLSAgICAgIH0KLQotICAgICAg
dG9rZW5TdGFydFBvcyA9IGkgKyBkU2l6ZTsKLSAgICAgIHRva2VuU2l6ZSA9IDA7Ci0gICAgICBp
ICs9IGRTaXplIC0gMTsKLSAgICB9IGVsc2UgewotICAgICAgKyt0b2tlblNpemU7Ci0gICAgfQot
ICB9Ci0gIHRva2VuU2l6ZSA9IHN0clNpemUgLSB0b2tlblN0YXJ0UG9zOwotICBpZiAoIWlnbm9y
ZUVtcHR5IHx8IHRva2VuU2l6ZSA+IDApIHsKLSAgICAqb3V0KysgPSB0bzxPdXRTdHJpbmdUPihz
cC5zdWJwaWVjZSh0b2tlblN0YXJ0UG9zLCB0b2tlblNpemUpKTsKLSAgfQotfQotCi10ZW1wbGF0
ZTxjbGFzcyBTdHJpbmc+IFN0cmluZ1BpZWNlIHByZXBhcmVEZWxpbShjb25zdCBTdHJpbmcmIHMp
IHsKLSAgcmV0dXJuIFN0cmluZ1BpZWNlKHMpOwotfQotaW5saW5lIGNoYXIgcHJlcGFyZURlbGlt
KGNoYXIgYykgeyByZXR1cm4gYzsgfQotCi10ZW1wbGF0ZSA8Ym9vbCBleGFjdCwgY2xhc3MgRGVs
aW0sIGNsYXNzIE91dHB1dFR5cGU+Ci1ib29sIHNwbGl0Rml4ZWQoY29uc3QgRGVsaW0mIGRlbGlt
aXRlciwgU3RyaW5nUGllY2UgaW5wdXQsIE91dHB1dFR5cGUmIG91dHB1dCkgewotICBzdGF0aWNf
YXNzZXJ0KAotICAgICAgZXhhY3QgfHwgc3RkOjppc19zYW1lPE91dHB1dFR5cGUsIFN0cmluZ1Bp
ZWNlPjo6dmFsdWUgfHwKLSAgICAgICAgICBJc1NvbWVTdHJpbmc8T3V0cHV0VHlwZT46OnZhbHVl
LAotICAgICAgInNwbGl0PGZhbHNlPigpIHJlcXVpcmVzIHRoYXQgdGhlIGxhc3QgYXJndW1lbnQg
YmUgYSBzdHJpbmcgdHlwZSIpOwotICBpZiAoZXhhY3QgJiYgVU5MSUtFTFkoc3RkOjpzdHJpbmc6
Om5wb3MgIT0gaW5wdXQuZmluZChkZWxpbWl0ZXIpKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotICBvdXRwdXQgPSBmb2xseTo6dG88T3V0cHV0VHlwZT4oaW5wdXQpOwotICByZXR1cm4gdHJ1
ZTsKLX0KLQotdGVtcGxhdGUgPGJvb2wgZXhhY3QsIGNsYXNzIERlbGltLCBjbGFzcyBPdXRwdXRU
eXBlLCBjbGFzcy4uLiBPdXRwdXRUeXBlcz4KLWJvb2wgc3BsaXRGaXhlZCgKLSAgICBjb25zdCBE
ZWxpbSYgZGVsaW1pdGVyLAotICAgIFN0cmluZ1BpZWNlIGlucHV0LAotICAgIE91dHB1dFR5cGUm
IG91dEhlYWQsCi0gICAgT3V0cHV0VHlwZXMmLi4uIG91dFRhaWwpIHsKLSAgc2l6ZV90IGN1dCA9
IGlucHV0LmZpbmQoZGVsaW1pdGVyKTsKLSAgaWYgKFVOTElLRUxZKGN1dCA9PSBzdGQ6OnN0cmlu
Zzo6bnBvcykpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgU3RyaW5nUGllY2UgaGVhZChp
bnB1dC5iZWdpbigpLCBpbnB1dC5iZWdpbigpICsgY3V0KTsKLSAgU3RyaW5nUGllY2UgdGFpbChp
bnB1dC5iZWdpbigpICsgY3V0ICsgZGV0YWlsOjpkZWxpbVNpemUoZGVsaW1pdGVyKSwKLSAgICAg
ICAgICAgICAgICAgICBpbnB1dC5lbmQoKSk7Ci0gIGlmIChMSUtFTFkoc3BsaXRGaXhlZDxleGFj
dD4oZGVsaW1pdGVyLCB0YWlsLCBvdXRUYWlsLi4uKSkpIHsKLSAgICBvdXRIZWFkID0gZm9sbHk6
OnRvPE91dHB1dFR5cGU+KGhlYWQpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIHJldHVybiBm
YWxzZTsKLX0KLQotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLXRlbXBsYXRlPGNsYXNzIERlbGltLCBj
bGFzcyBTdHJpbmcsIGNsYXNzIE91dHB1dFR5cGU+Ci12b2lkIHNwbGl0KGNvbnN0IERlbGltJiBk
ZWxpbWl0ZXIsCi0gICAgICAgICAgIGNvbnN0IFN0cmluZyYgaW5wdXQsCi0gICAgICAgICAgIHN0
ZDo6dmVjdG9yPE91dHB1dFR5cGU+JiBvdXQsCi0gICAgICAgICAgIGJvb2wgaWdub3JlRW1wdHkp
IHsKLSAgZGV0YWlsOjppbnRlcm5hbFNwbGl0PE91dHB1dFR5cGU+KAotICAgIGRldGFpbDo6cHJl
cGFyZURlbGltKGRlbGltaXRlciksCi0gICAgU3RyaW5nUGllY2UoaW5wdXQpLAotICAgIHN0ZDo6
YmFja19pbnNlcnRlcihvdXQpLAotICAgIGlnbm9yZUVtcHR5KTsKLX0KLQotdGVtcGxhdGU8Y2xh
c3MgRGVsaW0sIGNsYXNzIFN0cmluZywgY2xhc3MgT3V0cHV0VHlwZT4KLXZvaWQgc3BsaXQoY29u
c3QgRGVsaW0mIGRlbGltaXRlciwKLSAgICAgICAgICAgY29uc3QgU3RyaW5nJiBpbnB1dCwKLSAg
ICAgICAgICAgZmJ2ZWN0b3I8T3V0cHV0VHlwZT4mIG91dCwKLSAgICAgICAgICAgYm9vbCBpZ25v
cmVFbXB0eSkgewotICBkZXRhaWw6OmludGVybmFsU3BsaXQ8T3V0cHV0VHlwZT4oCi0gICAgZGV0
YWlsOjpwcmVwYXJlRGVsaW0oZGVsaW1pdGVyKSwKLSAgICBTdHJpbmdQaWVjZShpbnB1dCksCi0g
ICAgc3RkOjpiYWNrX2luc2VydGVyKG91dCksCi0gICAgaWdub3JlRW1wdHkpOwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBPdXRwdXRWYWx1ZVR5cGUsIGNsYXNzIERlbGltLCBjbGFzcyBTdHJpbmcsCi0g
ICAgICAgICBjbGFzcyBPdXRwdXRJdGVyYXRvcj4KLXZvaWQgc3BsaXRUbyhjb25zdCBEZWxpbSYg
ZGVsaW1pdGVyLAotICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgaW5wdXQsCi0gICAgICAgICAg
ICAgT3V0cHV0SXRlcmF0b3Igb3V0LAotICAgICAgICAgICAgIGJvb2wgaWdub3JlRW1wdHkpIHsK
LSAgZGV0YWlsOjppbnRlcm5hbFNwbGl0PE91dHB1dFZhbHVlVHlwZT4oCi0gICAgZGV0YWlsOjpw
cmVwYXJlRGVsaW0oZGVsaW1pdGVyKSwKLSAgICBTdHJpbmdQaWVjZShpbnB1dCksCi0gICAgb3V0
LAotICAgIGlnbm9yZUVtcHR5KTsKLX0KLQotdGVtcGxhdGUgPGJvb2wgZXhhY3QsIGNsYXNzIERl
bGltLCBjbGFzcy4uLiBPdXRwdXRUeXBlcz4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAg
IEFsbENvbnZlcnRpYmxlPE91dHB1dFR5cGVzLi4uPjo6dmFsdWUgJiYgc2l6ZW9mLi4uKE91dHB1
dFR5cGVzKSA+PSAxLAotICAgIGJvb2w+Ojp0eXBlCi1zcGxpdChjb25zdCBEZWxpbSYgZGVsaW1p
dGVyLCBTdHJpbmdQaWVjZSBpbnB1dCwgT3V0cHV0VHlwZXMmLi4uIG91dHB1dHMpIHsKLSAgcmV0
dXJuIGRldGFpbDo6c3BsaXRGaXhlZDxleGFjdD4oCi0gICAgICBkZXRhaWw6OnByZXBhcmVEZWxp
bShkZWxpbWl0ZXIpLCBpbnB1dCwgb3V0cHV0cy4uLik7Ci19Ci0KLW5hbWVzcGFjZSBkZXRhaWwg
ewotCi0vKgotICogSWYgYSB0eXBlIGNhbiBoYXZlIGl0cyBzdHJpbmcgc2l6ZSBkZXRlcm1pbmVk
IGNoZWFwbHksIHdlIGNhbiBtb3JlCi0gKiBlZmZpY2llbnRseSBhcHBlbmQgaXQgaW4gYSBsb29w
IChzZWUgaW50ZXJuYWxKb2luQXBwZW5kKS4gTm90ZSB0aGF0IHRoZQotICogc3RydWN0IG5lZWQg
bm90IGNvbmZvcm0gdG8gdGhlIHN0ZDo6c3RyaW5nIGFwaSBjb21wbGV0ZWx5IChleC4gZG9lcyBu
b3QgbmVlZAotICogdG8gaW1wbGVtZW50IGFwcGVuZCgpKS4KLSAqLwotdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBJc1NpemFibGVTdHJpbmcgewotICBlbnVtIHsgdmFsdWUgPSBJc1NvbWVTdHJp
bmc8VD46OnZhbHVlCi0gICAgICAgICB8fCBzdGQ6OmlzX3NhbWU8VCwgU3RyaW5nUGllY2U+Ojp2
YWx1ZSB9OwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yPgotc3RydWN0IElzU2l6YWJs
ZVN0cmluZ0NvbnRhaW5lckl0ZXJhdG9yIDoKLSAgSXNTaXphYmxlU3RyaW5nPHR5cGVuYW1lIHN0
ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4gewotfTsKLQotdGVtcGxh
dGUgPGNsYXNzIERlbGltLCBjbGFzcyBJdGVyYXRvciwgY2xhc3MgU3RyaW5nPgotdm9pZCBpbnRl
cm5hbEpvaW5BcHBlbmQoRGVsaW0gZGVsaW1pdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
SXRlcmF0b3IgYmVnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvciBlbmQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcmIG91dHB1dCkgewotICBhc3NlcnQoYmVnaW4g
IT0gZW5kKTsKLSAgaWYgKHN0ZDo6aXNfc2FtZTxEZWxpbSwgU3RyaW5nUGllY2U+Ojp2YWx1ZSAm
JgotICAgICAgZGVsaW1TaXplKGRlbGltaXRlcikgPT0gMSkgewotICAgIGludGVybmFsSm9pbkFw
cGVuZChkZWxpbUZyb250KGRlbGltaXRlciksIGJlZ2luLCBlbmQsIG91dHB1dCk7Ci0gICAgcmV0
dXJuOwotICB9Ci0gIHRvQXBwZW5kKCpiZWdpbiwgJm91dHB1dCk7Ci0gIHdoaWxlICgrK2JlZ2lu
ICE9IGVuZCkgewotICAgIHRvQXBwZW5kKGRlbGltaXRlciwgKmJlZ2luLCAmb3V0cHV0KTsKLSAg
fQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgRGVsaW0sIGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBTdHJp
bmc+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NpemFibGVTdHJpbmdDb250YWluZXJJdGVy
YXRvcjxJdGVyYXRvcj46OnZhbHVlPjo6dHlwZQotaW50ZXJuYWxKb2luKERlbGltIGRlbGltaXRl
ciwKLSAgICAgICAgICAgICBJdGVyYXRvciBiZWdpbiwKLSAgICAgICAgICAgICBJdGVyYXRvciBl
bmQsCi0gICAgICAgICAgICAgU3RyaW5nJiBvdXRwdXQpIHsKLSAgb3V0cHV0LmNsZWFyKCk7Ci0g
IGlmIChiZWdpbiA9PSBlbmQpIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgY29uc3Qgc2l6ZV90IGRz
aXplID0gZGVsaW1TaXplKGRlbGltaXRlcik7Ci0gIEl0ZXJhdG9yIGl0ID0gYmVnaW47Ci0gIHNp
emVfdCBzaXplID0gaXQtPnNpemUoKTsKLSAgd2hpbGUgKCsraXQgIT0gZW5kKSB7Ci0gICAgc2l6
ZSArPSBkc2l6ZSArIGl0LT5zaXplKCk7Ci0gIH0KLSAgb3V0cHV0LnJlc2VydmUoc2l6ZSk7Ci0g
IGludGVybmFsSm9pbkFwcGVuZChkZWxpbWl0ZXIsIGJlZ2luLCBlbmQsIG91dHB1dCk7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBEZWxpbSwgY2xhc3MgSXRlcmF0b3IsIGNsYXNzIFN0cmluZz4KLXR5
cGVuYW1lCi1zdGQ6OmVuYWJsZV9pZjwhSXNTaXphYmxlU3RyaW5nQ29udGFpbmVySXRlcmF0b3I8
SXRlcmF0b3I+Ojp2YWx1ZT46OnR5cGUKLWludGVybmFsSm9pbihEZWxpbSBkZWxpbWl0ZXIsCi0g
ICAgICAgICAgICAgSXRlcmF0b3IgYmVnaW4sCi0gICAgICAgICAgICAgSXRlcmF0b3IgZW5kLAot
ICAgICAgICAgICAgIFN0cmluZyYgb3V0cHV0KSB7Ci0gIG91dHB1dC5jbGVhcigpOwotICBpZiAo
YmVnaW4gPT0gZW5kKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGludGVybmFsSm9pbkFwcGVuZChk
ZWxpbWl0ZXIsIGJlZ2luLCBlbmQsIG91dHB1dCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBkZXRh
aWwKLQotdGVtcGxhdGUgPGNsYXNzIERlbGltLCBjbGFzcyBJdGVyYXRvciwgY2xhc3MgU3RyaW5n
Pgotdm9pZCBqb2luKGNvbnN0IERlbGltJiBkZWxpbWl0ZXIsCi0gICAgICAgICAgSXRlcmF0b3Ig
YmVnaW4sCi0gICAgICAgICAgSXRlcmF0b3IgZW5kLAotICAgICAgICAgIFN0cmluZyYgb3V0cHV0
KSB7Ci0gIGRldGFpbDo6aW50ZXJuYWxKb2luKAotICAgIGRldGFpbDo6cHJlcGFyZURlbGltKGRl
bGltaXRlciksCi0gICAgYmVnaW4sCi0gICAgZW5kLAotICAgIG91dHB1dCk7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBTdHJpbmcxLCBjbGFzcyBTdHJpbmcyPgotdm9pZCBiYWNrc2xhc2hpZnkoY29u
c3QgU3RyaW5nMSYgaW5wdXQsIFN0cmluZzImIG91dHB1dCwgYm9vbCBoZXhfc3R5bGUpIHsKLSAg
c3RhdGljIGNvbnN0IGNoYXIgaGV4VmFsdWVzW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0gIG91
dHB1dC5jbGVhcigpOwotICBvdXRwdXQucmVzZXJ2ZSgzICogaW5wdXQuc2l6ZSgpKTsKLSAgZm9y
ICh1bnNpZ25lZCBjaGFyIGMgOiBpbnB1dCkgewotICAgIC8vIGxlc3MgdGhhbiBzcGFjZSBvciBn
cmVhdGVyIHRoYW4gJ34nIGFyZSBjb25zaWRlcmVkIHVucHJpbnRhYmxlCi0gICAgaWYgKGMgPCAw
eDIwIHx8IGMgPiAweDdlIHx8IGMgPT0gJ1xcJykgewotICAgICAgYm9vbCBoZXhfYXBwZW5kID0g
ZmFsc2U7Ci0gICAgICBvdXRwdXQucHVzaF9iYWNrKCdcXCcpOwotICAgICAgaWYgKGhleF9zdHls
ZSkgewotICAgICAgICBoZXhfYXBwZW5kID0gdHJ1ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChjID09ICdccicpIG91dHB1dCArPSAncic7Ci0gICAgICAgIGVsc2UgaWYgKGMgPT0gJ1xu
Jykgb3V0cHV0ICs9ICduJzsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAnXHQnKSBvdXRwdXQgKz0g
J3QnOwotICAgICAgICBlbHNlIGlmIChjID09ICdcYScpIG91dHB1dCArPSAnYSc7Ci0gICAgICAg
IGVsc2UgaWYgKGMgPT0gJ1xiJykgb3V0cHV0ICs9ICdiJzsKLSAgICAgICAgZWxzZSBpZiAoYyA9
PSAnXDAnKSBvdXRwdXQgKz0gJzAnOwotICAgICAgICBlbHNlIGlmIChjID09ICdcXCcpIG91dHB1
dCArPSAnXFwnOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBoZXhfYXBwZW5kID0gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKGhleF9hcHBlbmQpIHsKLSAgICAgICAgb3V0
cHV0LnB1c2hfYmFjaygneCcpOwotICAgICAgICBvdXRwdXQucHVzaF9iYWNrKGhleFZhbHVlc1so
YyA+PiA0KSAmIDB4Zl0pOwotICAgICAgICBvdXRwdXQucHVzaF9iYWNrKGhleFZhbHVlc1tjICYg
MHhmXSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIG91dHB1dCArPSBjOwotICAgIH0K
LSAgfQotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgU3RyaW5nMSwgY2xhc3MgU3RyaW5nMj4KLXZvaWQg
aHVtYW5pZnkoY29uc3QgU3RyaW5nMSYgaW5wdXQsIFN0cmluZzImIG91dHB1dCkgewotICBzaXpl
X3QgbnVtVW5wcmludGFibGUgPSAwOwotICBzaXplX3QgbnVtUHJpbnRhYmxlUHJlZml4ID0gMDsK
LSAgZm9yICh1bnNpZ25lZCBjaGFyIGMgOiBpbnB1dCkgewotICAgIGlmIChjIDwgMHgyMCB8fCBj
ID4gMHg3ZSB8fCBjID09ICdcXCcpIHsKLSAgICAgICsrbnVtVW5wcmludGFibGU7Ci0gICAgfQot
ICAgIGlmIChudW1VbnByaW50YWJsZSA9PSAwKSB7Ci0gICAgICArK251bVByaW50YWJsZVByZWZp
eDsKLSAgICB9Ci0gIH0KLQotICAvLyBoZXhsaWZ5IGRvdWJsZXMgYSBzdHJpbmcncyBzaXplOyBi
YWNrc2xhc2hpZnkgY2FuIHBvdGVudGlhbGx5Ci0gIC8vIGV4cGxvZGUgaXQgYnkgNHguICBOb3cs
IHRoZSBwcmludGFibGUgcmFuZ2Ugb2YgdGhlIGFzY2lpCi0gIC8vICJzcGVjdHJ1bSIgaXMgYXJv
dW5kIDk1IG91dCBvZiAyNTYgdmFsdWVzLCBzbyBhICJyYW5kb20iIGJpbmFyeQotICAvLyBzdHJp
bmcgc2hvdWxkIGJlIGFyb3VuZCA2MCUgdW5wcmludGFibGUuICBXZSB1c2UgYSA1MCUgaHVlcmlz
dGljCi0gIC8vIGhlcmUsIHNvIGlmIGEgc3RyaW5nIGlzIDYwJSB1bnByaW50YWJsZSwgdGhlbiB3
ZSBqdXN0IHVzZSBoZXgKLSAgLy8gb3V0cHV0LiAgT3RoZXJ3aXNlIHdlIGJhY2tzbGFzaC4KLSAg
Ly8KLSAgLy8gVVRGOCBpcyBjb21wbGV0ZWx5IGlnbm9yZWQ7IGFzIGEgcmVzdWx0LCB1dGY4IGNo
YXJhY3RlcnMgd2lsbAotICAvLyBsaWtlbHkgYmUgXHggZXNjYXBlZCAoc2luY2UgbW9zdCBjb21t
b24gZ2x5cGhzIGZpdCBpbiB0d28gYnl0ZXMpLgotICAvLyBUaGlzIGlzIGEgdHJhZGVvZmYgb2Yg
Y29tcGxleGl0eS9zcGVlZCBpbnN0ZWFkIG9mIGEgY29udmVuaWVuY2UKLSAgLy8gdGhhdCBsaWtl
bHkgd291bGQgcmFyZWx5IG1hdHRlci4gIE1vcmVvdmVyLCB0aGlzIGZ1bmN0aW9uIGlzIG1vcmUK
LSAgLy8gYWJvdXQgZGlzcGxheWluZyB1bmRlcmx5aW5nIGJ5dGVzLCBub3QgYWJvdXQgZGlzcGxh
eWluZyBnbHlwaHMKLSAgLy8gZnJvbSBsYW5ndWFnZXMuCi0gIGlmIChudW1VbnByaW50YWJsZSA9
PSAwKSB7Ci0gICAgb3V0cHV0ID0gaW5wdXQ7Ci0gIH0gZWxzZSBpZiAoNSAqIG51bVVucHJpbnRh
YmxlID49IDMgKiBpbnB1dC5zaXplKCkpIHsKLSAgICAvLyBIb3dldmVyISAgSWYgd2UgaGF2ZSBh
ICJtZWFuaW5nZnVsIiBwcmVmaXggb2YgcHJpbnRhYmxlCi0gICAgLy8gY2hhcmFjdGVycywgc2F5
IDIwJSBvZiB0aGUgc3RyaW5nLCB3ZSBiYWNrc2xhc2hpZnkgdW5kZXIgdGhlCi0gICAgLy8gYXNz
dW1wdGlvbiB2aWV3aW5nIHRoZSBwcmVmaXggYXMgYXNjaWkgaXMgd29ydGggYmxvd2luZyB0aGUK
LSAgICAvLyBvdXRwdXQgc2l6ZSB1cCBhIGJpdC4KLSAgICBpZiAoNSAqIG51bVByaW50YWJsZVBy
ZWZpeCA+PSBpbnB1dC5zaXplKCkpIHsKLSAgICAgIGJhY2tzbGFzaGlmeShpbnB1dCwgb3V0cHV0
KTsKLSAgICB9IGVsc2UgewotICAgICAgb3V0cHV0ID0gIjB4IjsKLSAgICAgIGhleGxpZnkoaW5w
dXQsIG91dHB1dCwgdHJ1ZSAvKiBhcHBlbmQgb3V0cHV0ICovKTsKLSAgICB9Ci0gIH0gZWxzZSB7
Ci0gICAgYmFja3NsYXNoaWZ5KGlucHV0LCBvdXRwdXQpOwotICB9Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIElucHV0U3RyaW5nLCBjbGFzcyBPdXRwdXRTdHJpbmc+Ci1ib29sIGhleGxpZnkoY29uc3Qg
SW5wdXRTdHJpbmcmIGlucHV0LCBPdXRwdXRTdHJpbmcmIG91dHB1dCwKLSAgICAgICAgICAgICBi
b29sIGFwcGVuZF9vdXRwdXQpIHsKLSAgaWYgKCFhcHBlbmRfb3V0cHV0KSBvdXRwdXQuY2xlYXIo
KTsKLQotICBzdGF0aWMgY2hhciBoZXhWYWx1ZXNbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKLSAg
YXV0byBqID0gb3V0cHV0LnNpemUoKTsKLSAgb3V0cHV0LnJlc2l6ZSgyICogaW5wdXQuc2l6ZSgp
ICsgb3V0cHV0LnNpemUoKSk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5wdXQuc2l6ZSgp
OyArK2kpIHsKLSAgICBpbnQgY2ggPSBpbnB1dFtpXTsKLSAgICBvdXRwdXRbaisrXSA9IGhleFZh
bHVlc1soY2ggPj4gNCkgJiAweGZdOwotICAgIG91dHB1dFtqKytdID0gaGV4VmFsdWVzW2NoICYg
MHhmXTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgSW5wdXRTdHJp
bmcsIGNsYXNzIE91dHB1dFN0cmluZz4KLWJvb2wgdW5oZXhsaWZ5KGNvbnN0IElucHV0U3RyaW5n
JiBpbnB1dCwgT3V0cHV0U3RyaW5nJiBvdXRwdXQpIHsKLSAgaWYgKGlucHV0LnNpemUoKSAlIDIg
IT0gMCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBvdXRwdXQucmVzaXplKGlucHV0LnNp
emUoKSAvIDIpOwotICBpbnQgaiA9IDA7Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1
dC5zaXplKCk7IGkgKz0gMikgewotICAgIGludCBoaWdoQml0cyA9IGRldGFpbDo6aGV4VGFibGVb
c3RhdGljX2Nhc3Q8dWludDhfdD4oaW5wdXRbaV0pXTsKLSAgICBpbnQgbG93Qml0cyA9IGRldGFp
bDo6aGV4VGFibGVbc3RhdGljX2Nhc3Q8dWludDhfdD4oaW5wdXRbaSArIDFdKV07Ci0gICAgaWYg
KChoaWdoQml0cyB8IGxvd0JpdHMpICYgMHgxMCkgewotICAgICAgLy8gT25lIG9mIHRoZSBjaGFy
YWN0ZXJzIHdhc24ndCBhIGhleCBkaWdpdAotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICBvdXRwdXRbaisrXSA9IChoaWdoQml0cyA8PCA0KSArIGxvd0JpdHM7Ci0gIH0KLSAgcmV0dXJu
IHRydWU7Ci19Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotLyoqCi0gKiBIZXgtZHVtcCBhdCBtb3N0
IDE2IGJ5dGVzIHN0YXJ0aW5nIGF0IG9mZnNldCBmcm9tIGEgbWVtb3J5IGFyZWEgb2Ygc2l6ZQot
ICogYnl0ZXMuICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBkdW1wZWQuCi0g
Ki8KLXNpemVfdCBoZXhEdW1wTGluZShjb25zdCB2b2lkKiBwdHIsIHNpemVfdCBvZmZzZXQsIHNp
emVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBsaW5lKTsKLX0gIC8v
IG5hbWVzcGFjZSBkZXRhaWwKLQotdGVtcGxhdGUgPGNsYXNzIE91dEl0Pgotdm9pZCBoZXhEdW1w
KGNvbnN0IHZvaWQqIHB0ciwgc2l6ZV90IHNpemUsIE91dEl0IG91dCkgewotICBzaXplX3Qgb2Zm
c2V0ID0gMDsKLSAgc3RkOjpzdHJpbmcgbGluZTsKLSAgd2hpbGUgKG9mZnNldCA8IHNpemUpIHsK
LSAgICBvZmZzZXQgKz0gZGV0YWlsOjpoZXhEdW1wTGluZShwdHIsIG9mZnNldCwgc2l6ZSwgbGlu
ZSk7Ci0gICAgKm91dCsrID0gbGluZTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgZm9sbHkK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1N0
cmluZy5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9TdHJp
bmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmM5NTZkNjgyMDYxNDk0MTll
MzJkZTUyYzU0NTA4ZjFkNWE4OTMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1N0
cmluZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxmb2xseS9TdHJpbmcuaD4KLQot
I2luY2x1ZGUgPGNjdHlwZT4KLSNpbmNsdWRlIDxjZXJybm8+Ci0jaW5jbHVkZSA8Y3N0ZGFyZz4K
LSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPGl0ZXJhdG9yPgotI2luY2x1ZGUgPHN0ZGV4
Y2VwdD4KLQotI2luY2x1ZGUgPGdsb2cvbG9nZ2luZy5oPgotCi0jaW5jbHVkZSA8Zm9sbHkvU2Nv
cGVHdWFyZC5oPgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNf
b2Rkc3BhY2UoY2hhciBjKSB7Ci0gIHJldHVybiBjID09ICdcbicgfHwgYyA9PSAnXHQnIHx8IGMg
PT0gJ1xyJzsKLX0KLQotU3RyaW5nUGllY2UgbHRyaW1XaGl0ZXNwYWNlKFN0cmluZ1BpZWNlIHNw
KSB7Ci0gIC8vIFNwYWNlcyBvdGhlciB0aGFuICcgJyBjaGFyYWN0ZXJzIGFyZSBsZXNzIGNvbW1v
biBidXQgc2hvdWxkIGJlCi0gIC8vIGNoZWNrZWQuICBUaGlzIGNvbmZpZ3VyYXRpb24gd2hlcmUg
d2UgbG9vcCBvbiB0aGUgJyAnCi0gIC8vIHNlcGFyYXRlbHkgZnJvbSBvZGRzcGFjZXMgd2FzIGVt
cGlyaWNhbGx5IGZhc3Rlc3QuCi0KLWxvb3A6Ci0gIGZvciAoOyAhc3AuZW1wdHkoKSAmJiBzcC5m
cm9udCgpID09ICcgJzsgc3AucG9wX2Zyb250KCkpIHsKLSAgfQotICBpZiAoIXNwLmVtcHR5KCkg
JiYgaXNfb2Rkc3BhY2Uoc3AuZnJvbnQoKSkpIHsKLSAgICBzcC5wb3BfZnJvbnQoKTsKLSAgICBn
b3RvIGxvb3A7Ci0gIH0KLQotICByZXR1cm4gc3A7Ci19Ci0KLVN0cmluZ1BpZWNlIHJ0cmltV2hp
dGVzcGFjZShTdHJpbmdQaWVjZSBzcCkgewotICAvLyBTcGFjZXMgb3RoZXIgdGhhbiAnICcgY2hh
cmFjdGVycyBhcmUgbGVzcyBjb21tb24gYnV0IHNob3VsZCBiZQotICAvLyBjaGVja2VkLiAgVGhp
cyBjb25maWd1cmF0aW9uIHdoZXJlIHdlIGxvb3Agb24gdGhlICcgJwotICAvLyBzZXBhcmF0ZWx5
IGZyb20gb2Rkc3BhY2VzIHdhcyBlbXBpcmljYWxseSBmYXN0ZXN0LgotCi1sb29wOgotICBmb3Ig
KDsgIXNwLmVtcHR5KCkgJiYgc3AuYmFjaygpID09ICcgJzsgc3AucG9wX2JhY2soKSkgewotICB9
Ci0gIGlmICghc3AuZW1wdHkoKSAmJiBpc19vZGRzcGFjZShzcC5iYWNrKCkpKSB7Ci0gICAgc3Au
cG9wX2JhY2soKTsKLSAgICBnb3RvIGxvb3A7Ci0gIH0KLQotICByZXR1cm4gc3A7Ci19Ci0KLW5h
bWVzcGFjZSB7Ci0KLWludCBzdHJpbmdBcHBlbmRmSW1wbEhlbHBlcihjaGFyKiBidWYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZnNpemUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhX2xpc3QgYXJncykgewotICB2YV9saXN0IGFyZ3NfY29weTsKLSAgdmFfY29weShhcmdz
X2NvcHksIGFyZ3MpOwotICBpbnQgYnl0ZXNfdXNlZCA9IHZzbnByaW50ZihidWYsIGJ1ZnNpemUs
IGZvcm1hdCwgYXJnc19jb3B5KTsKLSAgdmFfZW5kKGFyZ3NfY29weSk7Ci0gIHJldHVybiBieXRl
c191c2VkOwotfQotCi12b2lkIHN0cmluZ0FwcGVuZGZJbXBsKHN0ZDo6c3RyaW5nJiBvdXRwdXQs
IGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcmdzKSB7Ci0gIC8vIFZlcnkgc2ltcGxlOyBm
aXJzdCwgdHJ5IHRvIGF2b2lkIGFuIGFsbG9jYXRpb24gYnkgdXNpbmcgYW4gaW5saW5lCi0gIC8v
IGJ1ZmZlci4gIElmIHRoYXQgZmFpbHMgdG8gaG9sZCB0aGUgb3V0cHV0IHN0cmluZywgYWxsb2Nh
dGUgb25lIG9uCi0gIC8vIHRoZSBoZWFwLCB1c2UgaXQgaW5zdGVhZC4KLSAgLy8KLSAgLy8gSXQg
aXMgaGFyZCB0byBndWVzcyB0aGUgcHJvcGVyIHNpemUgb2YgdGhpcyBidWZmZXI7IHNvbWUKLSAg
Ly8gaGV1cmlzdGljcyBjb3VsZCBiZSBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGZvcm1hdCBjaGFy
YWN0ZXJzLCBvcgotICAvLyBzdGF0aWMgYW5hbHlzaXMgb2YgYSBjb2RlYmFzZS4gIE9yLCB3ZSBj
YW4ganVzdCBwaWNrIGEgbnVtYmVyCi0gIC8vIHRoYXQgc2VlbXMgYmlnIGVub3VnaCBmb3Igc2lt
cGxlIGNhc2VzIChzYXksIG9uZSBsaW5lIG9mIHRleHQgb24KLSAgLy8gYSB0ZXJtaW5hbCkgd2l0
aG91dCBiZWluZyBsYXJnZSBlbm91Z2ggdG8gYmUgY29uY2VybmluZyBhcyBhCi0gIC8vIHN0YWNr
IHZhcmlhYmxlLgotICBzdGQ6OmFycmF5PGNoYXIsIDEyOD4gaW5saW5lX2J1ZmZlcjsKLQotICBp
bnQgYnl0ZXNfdXNlZCA9IHN0cmluZ0FwcGVuZGZJbXBsSGVscGVyKAotICAgICAgaW5saW5lX2J1
ZmZlci5kYXRhKCksIGlubGluZV9idWZmZXIuc2l6ZSgpLCBmb3JtYXQsIGFyZ3MpOwotICBpZiAo
Ynl0ZXNfdXNlZCA8IDApIHsKLSAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IodG88c3RkOjpz
dHJpbmc+KAotICAgICAgICAiSW52YWxpZCBmb3JtYXQgc3RyaW5nOyBzbnByaW50ZiByZXR1cm5l
ZCBuZWdhdGl2ZSAiCi0gICAgICAgICJ3aXRoIGZvcm1hdCBzdHJpbmc6ICIsCi0gICAgICAgIGZv
cm1hdCkpOwotICB9Ci0KLSAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oYnl0ZXNfdXNlZCkgPCBp
bmxpbmVfYnVmZmVyLnNpemUoKSkgewotICAgIG91dHB1dC5hcHBlbmQoaW5saW5lX2J1ZmZlci5k
YXRhKCksIHNpemVfdChieXRlc191c2VkKSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLy8gQ291
bGRuJ3QgZml0LiAgSGVhcCBhbGxvY2F0ZSBhIGJ1ZmZlciwgb2ggd2VsbC4KLSAgc3RkOjp1bmlx
dWVfcHRyPGNoYXJbXT4gaGVhcF9idWZmZXIobmV3IGNoYXJbc2l6ZV90KGJ5dGVzX3VzZWQgKyAx
KV0pOwotICBpbnQgZmluYWxfYnl0ZXNfdXNlZCA9IHN0cmluZ0FwcGVuZGZJbXBsSGVscGVyKAot
ICAgICAgaGVhcF9idWZmZXIuZ2V0KCksIHNpemVfdChieXRlc191c2VkICsgMSksIGZvcm1hdCwg
YXJncyk7Ci0gIC8vIFRoZSBzZWNvbmQgY2FsbCBjYW4gdGFrZSBmZXdlciBieXRlcyBpZiwgZm9y
IGV4YW1wbGUsIHdlIHdlcmUgcHJpbnRpbmcgYQotICAvLyBzdHJpbmcgYnVmZmVyIHdpdGggbnVs
bC10ZXJtaW5hdGluZyBjaGFyIHVzaW5nIGEgd2lkdGggc3BlY2lmaWVyIC0KLSAgLy8gdnNucHJp
bnRmKCIlLipzIiwgYnVmLnNpemUoKSwgYnVmKQotICBDSEVDSyhieXRlc191c2VkID49IGZpbmFs
X2J5dGVzX3VzZWQpOwotCi0gIC8vIFdlIGRvbid0IGtlZXAgdGhlIHRyYWlsaW5nICdcMCcgaW4g
b3VyIG91dHB1dCBzdHJpbmcKLSAgb3V0cHV0LmFwcGVuZChoZWFwX2J1ZmZlci5nZXQoKSwgc2l6
ZV90KGZpbmFsX2J5dGVzX3VzZWQpKTsKLX0KLQotfSAvLyBhbm9uIG5hbWVzcGFjZQotCi1zdGQ6
OnN0cmluZyBzdHJpbmdQcmludGYoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIHsKLSAgdmFfbGlz
dCBhcDsKLSAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0gIFNDT1BFX0VYSVQgewotICAgIHZhX2Vu
ZChhcCk7Ci0gIH07Ci0gIHJldHVybiBzdHJpbmdWUHJpbnRmKGZvcm1hdCwgYXApOwotfQotCi1z
dGQ6OnN0cmluZyBzdHJpbmdWUHJpbnRmKGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcCkg
ewotICBzdGQ6OnN0cmluZyByZXQ7Ci0gIHN0cmluZ0FwcGVuZGZJbXBsKHJldCwgZm9ybWF0LCBh
cCk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8vIEJhc2ljIGRlY2xhcmF0aW9uczsgYWxsb3cgZm9y
IHBhcmFtZXRlcnMgb2Ygc3RyaW5ncyBhbmQgc3RyaW5nCi0vLyBwaWVjZXMgdG8gYmUgc3BlY2lm
aWVkLgotc3RkOjpzdHJpbmcmIHN0cmluZ0FwcGVuZGYoc3RkOjpzdHJpbmcqIG91dHB1dCwgY29u
c3QgY2hhciogZm9ybWF0LCAuLi4pIHsKLSAgdmFfbGlzdCBhcDsKLSAgdmFfc3RhcnQoYXAsIGZv
cm1hdCk7Ci0gIFNDT1BFX0VYSVQgewotICAgIHZhX2VuZChhcCk7Ci0gIH07Ci0gIHJldHVybiBz
dHJpbmdWQXBwZW5kZihvdXRwdXQsIGZvcm1hdCwgYXApOwotfQotCi1zdGQ6OnN0cmluZyYgc3Ry
aW5nVkFwcGVuZGYoc3RkOjpzdHJpbmcqIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFf
bGlzdCBhcCkgewotICBzdHJpbmdBcHBlbmRmSW1wbCgqb3V0cHV0LCBmb3JtYXQsIGFwKTsKLSAg
cmV0dXJuICpvdXRwdXQ7Ci19Ci0KLXZvaWQgc3RyaW5nUHJpbnRmKHN0ZDo6c3RyaW5nKiBvdXRw
dXQsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSB7Ci0gIHZhX2xpc3QgYXA7Ci0gIHZhX3N0YXJ0
KGFwLCBmb3JtYXQpOwotICBTQ09QRV9FWElUIHsKLSAgICB2YV9lbmQoYXApOwotICB9OwotICBy
ZXR1cm4gc3RyaW5nVlByaW50ZihvdXRwdXQsIGZvcm1hdCwgYXApOwotfQotCi12b2lkIHN0cmlu
Z1ZQcmludGYoc3RkOjpzdHJpbmcqIG91dHB1dCwgY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0
IGFwKSB7Ci0gIG91dHB1dC0+Y2xlYXIoKTsKLSAgc3RyaW5nQXBwZW5kZkltcGwoKm91dHB1dCwg
Zm9ybWF0LCBhcCk7Ci19OwotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgUHJldHR5U3VmZml4IHsK
LSAgY29uc3QgY2hhciogc3VmZml4OwotICBkb3VibGUgdmFsOwotfTsKLQotY29uc3QgUHJldHR5
U3VmZml4IGtQcmV0dHlUaW1lU3VmZml4ZXNbXSA9IHsKLSAgeyAicyAiLCAxZTBMIH0sCi0gIHsg
Im1zIiwgMWUtM0wgfSwKLSAgeyAidXMiLCAxZS02TCB9LAotICB7ICJucyIsIDFlLTlMIH0sCi0g
IHsgInBzIiwgMWUtMTJMIH0sCi0gIHsgInMgIiwgMCB9LAotICB7IDAsIDAgfSwKLX07Ci0KLWNv
bnN0IFByZXR0eVN1ZmZpeCBrUHJldHR5Qnl0ZXNNZXRyaWNTdWZmaXhlc1tdID0gewotICB7ICJU
QiIsIDFlMTJMIH0sCi0gIHsgIkdCIiwgMWU5TCB9LAotICB7ICJNQiIsIDFlNkwgfSwKLSAgeyAi
a0IiLCAxZTNMIH0sCi0gIHsgIkIgIiwgMEwgfSwKLSAgeyAwLCAwIH0sCi19OwotCi1jb25zdCBQ
cmV0dHlTdWZmaXgga1ByZXR0eUJ5dGVzQmluYXJ5U3VmZml4ZXNbXSA9IHsKLSAgeyAiVEIiLCBp
bnQ2NF90KDEpIDw8IDQwIH0sCi0gIHsgIkdCIiwgaW50NjRfdCgxKSA8PCAzMCB9LAotICB7ICJN
QiIsIGludDY0X3QoMSkgPDwgMjAgfSwKLSAgeyAia0IiLCBpbnQ2NF90KDEpIDw8IDEwIH0sCi0g
IHsgIkIgIiwgMEwgfSwKLSAgeyAwLCAwIH0sCi19OwotCi1jb25zdCBQcmV0dHlTdWZmaXgga1By
ZXR0eUJ5dGVzQmluYXJ5SUVDU3VmZml4ZXNbXSA9IHsKLSAgeyAiVGlCIiwgaW50NjRfdCgxKSA8
PCA0MCB9LAotICB7ICJHaUIiLCBpbnQ2NF90KDEpIDw8IDMwIH0sCi0gIHsgIk1pQiIsIGludDY0
X3QoMSkgPDwgMjAgfSwKLSAgeyAiS2lCIiwgaW50NjRfdCgxKSA8PCAxMCB9LAotICB7ICJCICAi
LCAwTCB9LAotICB7IDAsIDAgfSwKLX07Ci0KLWNvbnN0IFByZXR0eVN1ZmZpeCBrUHJldHR5VW5p
dHNNZXRyaWNTdWZmaXhlc1tdID0gewotICB7ICJ0cmlsIiwgMWUxMkwgfSwKLSAgeyAiYmlsIiwg
IDFlOUwgfSwKLSAgeyAiTSIsICAgIDFlNkwgfSwKLSAgeyAiayIsICAgIDFlM0wgfSwKLSAgeyAi
ICIsICAgICAgMCAgfSwKLSAgeyAwLCAwIH0sCi19OwotCi1jb25zdCBQcmV0dHlTdWZmaXgga1By
ZXR0eVVuaXRzQmluYXJ5U3VmZml4ZXNbXSA9IHsKLSAgeyAiVCIsIGludDY0X3QoMSkgPDwgNDAg
fSwKLSAgeyAiRyIsIGludDY0X3QoMSkgPDwgMzAgfSwKLSAgeyAiTSIsIGludDY0X3QoMSkgPDwg
MjAgfSwKLSAgeyAiayIsIGludDY0X3QoMSkgPDwgMTAgfSwKLSAgeyAiICIsIDAgfSwKLSAgeyAw
LCAwIH0sCi19OwotCi1jb25zdCBQcmV0dHlTdWZmaXgga1ByZXR0eVVuaXRzQmluYXJ5SUVDU3Vm
Zml4ZXNbXSA9IHsKLSAgeyAiVGkiLCBpbnQ2NF90KDEpIDw8IDQwIH0sCi0gIHsgIkdpIiwgaW50
NjRfdCgxKSA8PCAzMCB9LAotICB7ICJNaSIsIGludDY0X3QoMSkgPDwgMjAgfSwKLSAgeyAiS2ki
LCBpbnQ2NF90KDEpIDw8IDEwIH0sCi0gIHsgIiAgIiwgMCB9LAotICB7IDAsIDAgfSwKLX07Ci0K
LWNvbnN0IFByZXR0eVN1ZmZpeCBrUHJldHR5U0lTdWZmaXhlc1tdID0gewotICB7ICJZIiwgMWUy
NEwgfSwKLSAgeyAiWiIsIDFlMjFMIH0sCi0gIHsgIkUiLCAxZTE4TCB9LAotICB7ICJQIiwgMWUx
NUwgfSwKLSAgeyAiVCIsIDFlMTJMIH0sCi0gIHsgIkciLCAxZTlMIH0sCi0gIHsgIk0iLCAxZTZM
IH0sCi0gIHsgImsiLCAxZTNMIH0sCi0gIHsgImgiLCAxZTJMIH0sCi0gIHsgImRhIiwgMWUxTCB9
LAotICB7ICJkIiwgMWUtMUwgfSwKLSAgeyAiYyIsIDFlLTJMIH0sCi0gIHsgIm0iLCAxZS0zTCB9
LAotICB7ICJ1IiwgMWUtNkwgfSwKLSAgeyAibiIsIDFlLTlMIH0sCi0gIHsgInAiLCAxZS0xMkwg
fSwKLSAgeyAiZiIsIDFlLTE1TCB9LAotICB7ICJhIiwgMWUtMThMIH0sCi0gIHsgInoiLCAxZS0y
MUwgfSwKLSAgeyAieSIsIDFlLTI0TCB9LAotICB7ICIgIiwgMCB9LAotICB7IDAsIDB9Ci19Owot
Ci1jb25zdCBQcmV0dHlTdWZmaXgqIGNvbnN0IGtQcmV0dHlTdWZmaXhlc1tQUkVUVFlfTlVNX1RZ
UEVTXSA9IHsKLSAga1ByZXR0eVRpbWVTdWZmaXhlcywKLSAga1ByZXR0eUJ5dGVzTWV0cmljU3Vm
Zml4ZXMsCi0gIGtQcmV0dHlCeXRlc0JpbmFyeVN1ZmZpeGVzLAotICBrUHJldHR5Qnl0ZXNCaW5h
cnlJRUNTdWZmaXhlcywKLSAga1ByZXR0eVVuaXRzTWV0cmljU3VmZml4ZXMsCi0gIGtQcmV0dHlV
bml0c0JpbmFyeVN1ZmZpeGVzLAotICBrUHJldHR5VW5pdHNCaW5hcnlJRUNTdWZmaXhlcywKLSAg
a1ByZXR0eVNJU3VmZml4ZXMsCi19OwotCi19ICAvLyBuYW1lc3BhY2UKLQotc3RkOjpzdHJpbmcg
cHJldHR5UHJpbnQoZG91YmxlIHZhbCwgUHJldHR5VHlwZSB0eXBlLCBib29sIGFkZFNwYWNlKSB7
Ci0gIGNoYXIgYnVmWzEwMF07Ci0KLSAgLy8gcGljayB0aGUgc3VmZml4ZXMgdG8gdXNlCi0gIGFz
c2VydCh0eXBlID49IDApOwotICBhc3NlcnQodHlwZSA8IFBSRVRUWV9OVU1fVFlQRVMpOwotICBj
b25zdCBQcmV0dHlTdWZmaXgqIHN1ZmZpeGVzID0ga1ByZXR0eVN1ZmZpeGVzW3R5cGVdOwotCi0g
IC8vIGZpbmQgdGhlIGZpcnN0IHN1ZmZpeCB3ZSdyZSBiaWdnZXIgdGhhbiAtLSB0aGVuIHVzZSBp
dAotICBkb3VibGUgYWJzX3ZhbCA9IGZhYnModmFsKTsKLSAgZm9yIChpbnQgaSA9IDA7IHN1ZmZp
eGVzW2ldLnN1ZmZpeDsgKytpKSB7Ci0gICAgaWYgKGFic192YWwgPj0gc3VmZml4ZXNbaV0udmFs
KSB7Ci0gICAgICBzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIlLjRnJXMlcyIsCi0gICAgICAg
ICAgICAgICAoc3VmZml4ZXNbaV0udmFsID8gKHZhbCAvIHN1ZmZpeGVzW2ldLnZhbCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWwpLAotICAgICAgICAgICAgICAgKGFkZFNw
YWNlID8gIiAiIDogIiIpLAotICAgICAgICAgICAgICAgc3VmZml4ZXNbaV0uc3VmZml4KTsKLSAg
ICAgIHJldHVybiBzdGQ6OnN0cmluZyhidWYpOwotICAgIH0KLSAgfQotCi0gIC8vIG5vIHN1ZmZp
eCwgd2UndmUgZ290IGEgdGlueSB2YWx1ZSAtLSBqdXN0IHByaW50IGl0IGluIHNjaS1ub3RhdGlv
bgotICBzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIlLjRnIiwgdmFsKTsKLSAgcmV0dXJuIHN0
ZDo6c3RyaW5nKGJ1Zik7Ci19Ci0KLS8vVE9ETzoKLS8vMSkgQmVuY2htYXJrICYgb3B0aW1pemUK
LWRvdWJsZSBwcmV0dHlUb0RvdWJsZShmb2xseTo6U3RyaW5nUGllY2UgKmNvbnN0IHByZXR0eVN0
cmluZywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQcmV0dHlUeXBlIHR5cGUpIHsKLSAg
ZG91YmxlIHZhbHVlID0gZm9sbHk6OnRvPGRvdWJsZT4ocHJldHR5U3RyaW5nKTsKLSAgd2hpbGUg
KHByZXR0eVN0cmluZy0+c2l6ZSgpID4gMCAmJiBzdGQ6Omlzc3BhY2UocHJldHR5U3RyaW5nLT5m
cm9udCgpKSkgewotICAgIHByZXR0eVN0cmluZy0+YWR2YW5jZSgxKTsgLy9Ta2lwcGluZyBzcGFj
ZXMgYmV0d2VlbiBudW1iZXIgYW5kIHN1ZmZpeAotICB9Ci0gIGNvbnN0IFByZXR0eVN1ZmZpeCog
c3VmZml4ZXMgPSBrUHJldHR5U3VmZml4ZXNbdHlwZV07Ci0gIGludCBsb25nZXN0UHJlZml4TGVu
ID0gLTE7Ci0gIGludCBiZXN0UHJlZml4SWQgPSAtMTsKLSAgZm9yIChpbnQgaiA9IDAgOyBzdWZm
aXhlc1tqXS5zdWZmaXg7ICsraikgewotICAgIGlmIChzdWZmaXhlc1tqXS5zdWZmaXhbMF0gPT0g
JyAnKXsvL0NoZWNraW5nIGZvciAiICIgLT4gbnVtYmVyIHJ1bGUuCi0gICAgICBpZiAobG9uZ2Vz
dFByZWZpeExlbiA9PSAtMSkgewotICAgICAgICBsb25nZXN0UHJlZml4TGVuID0gMDsgLy9ObyBj
aGFyYWN0ZXJzIHRvIHNraXAKLSAgICAgICAgYmVzdFByZWZpeElkID0gajsKLSAgICAgIH0KLSAg
ICB9IGVsc2UgaWYgKHByZXR0eVN0cmluZy0+c3RhcnRzV2l0aChzdWZmaXhlc1tqXS5zdWZmaXgp
KSB7Ci0gICAgICBpbnQgc3VmZml4TGVuID0gaW50KHN0cmxlbihzdWZmaXhlc1tqXS5zdWZmaXgp
KTsKLSAgICAgIC8vV2UgYXJlIGxvb2tpbmcgZm9yIGEgbG9uZ2VzdCBzdWZmaXggbWF0Y2hpbmcg
cHJlZml4IG9mIHRoZSBzdHJpbmcKLSAgICAgIC8vYWZ0ZXIgbnVtZXJpYyB2YWx1ZS4gV2UgbmVl
ZCB0aGlzIGluIGNhc2Ugc3VmZml4ZXMgaGF2ZSBjb21tb24gcHJlZml4LgotICAgICAgaWYgKHN1
ZmZpeExlbiA+IGxvbmdlc3RQcmVmaXhMZW4pIHsKLSAgICAgICAgbG9uZ2VzdFByZWZpeExlbiA9
IHN1ZmZpeExlbjsKLSAgICAgICAgYmVzdFByZWZpeElkID0gajsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLSAgaWYgKGJlc3RQcmVmaXhJZCA9PSAtMSkgeyAvL05vIHZhbGlkIHN1ZmZpeCBydWxlIGZv
dW5kCi0gICAgdGhyb3cgc3RkOjppbnZhbGlkX2FyZ3VtZW50KGZvbGx5Ojp0bzxzdGQ6OnN0cmlu
Zz4oCi0gICAgICAgICAgICAiVW5hYmxlIHRvIHBhcnNlIHN1ZmZpeCBcIiIsCi0gICAgICAgICAg
ICBwcmV0dHlTdHJpbmctPnRvU3RyaW5nKCksICJcIiIpKTsKLSAgfQotICBwcmV0dHlTdHJpbmct
PmFkdmFuY2Uoc2l6ZV90KGxvbmdlc3RQcmVmaXhMZW4pKTsKLSAgcmV0dXJuIHN1ZmZpeGVzW2Jl
c3RQcmVmaXhJZF0udmFsID8gdmFsdWUgKiBzdWZmaXhlc1tiZXN0UHJlZml4SWRdLnZhbCA6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOwotfQotCi1kb3VibGUg
cHJldHR5VG9Eb3VibGUoZm9sbHk6OlN0cmluZ1BpZWNlIHByZXR0eVN0cmluZywgY29uc3QgUHJl
dHR5VHlwZSB0eXBlKXsKLSAgZG91YmxlIHJlc3VsdCA9IHByZXR0eVRvRG91YmxlKCZwcmV0dHlT
dHJpbmcsIHR5cGUpOwotICBkZXRhaWw6OmVuZm9yY2VXaGl0ZXNwYWNlKHByZXR0eVN0cmluZyk7
Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6c3RyaW5nIGhleER1bXAoY29uc3Qgdm9pZCog
cHRyLCBzaXplX3Qgc2l6ZSkgewotICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3M7Ci0gIGhleER1bXAo
cHRyLCBzaXplLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8U3RyaW5nUGllY2U+KG9zLCAiXG4iKSk7
Ci0gIHJldHVybiBvcy5zdHIoKTsKLX0KLQotZmJzdHJpbmcgZXJybm9TdHIoaW50IGVycikgewot
ICBpbnQgc2F2ZWRFcnJubyA9IGVycm5vOwotCi0gIC8vIEVuc3VyZSB0aGF0IHdlIHJlc2V0IGVy
cm5vIHVwb24gZXhpdC4KLSAgYXV0byBndWFyZChtYWtlR3VhcmQoWyZdIHsgZXJybm8gPSBzYXZl
ZEVycm5vOyB9KSk7Ci0KLSAgY2hhciBidWZbMTAyNF07Ci0gIGJ1ZlswXSA9ICdcMCc7Ci0KLSAg
ZmJzdHJpbmcgcmVzdWx0OwotCi0gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJy
YXJ5L21hYy9kb2N1bWVudGF0aW9uL0Rhcndpbi9SZWZlcmVuY2UvTWFuUGFnZXMvbWFuMy9zdHJl
cnJvcl9yLjMuaHRtbAotICAvLyBodHRwOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL21hbi1wYWdlcy9v
bmxpbmUvcGFnZXMvbWFuMy9zdHJlcnJvci4zLmh0bWwKLSNpZiBkZWZpbmVkKF9XSU4zMikgJiYg
KGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX01TQ19WRVIpKQotICAvLyBtaW5ndzY0
IGhhcyBubyBzdHJlcnJvcl9yLCBidXQgV2luZG93cyBoYXMgc3RyZXJyb3Jfcywgd2hpY2ggQzEx
IGFkZGVkCi0gIC8vIGFzIHdlbGwuIFNvIG1heWJlIHdlIHNob3VsZCB1c2UgdGhpcyBhY3Jvc3Mg
YWxsIHBsYXRmb3JtcyAodG9nZXRoZXIKLSAgLy8gd2l0aCBzdHJlcnJvcmxlbl9zKS4gTm90ZSBz
dHJlcnJvcl9yIGFuZCBfcyBoYXZlIHN3YXBwZWQgYXJncy4KLSAgaW50IHIgPSBzdHJlcnJvcl9z
KGJ1Ziwgc2l6ZW9mKGJ1ZiksIGVycik7Ci0gIGlmIChyICE9IDApIHsKLSAgICByZXN1bHQgPSB0
bzxmYnN0cmluZz4oCi0gICAgICAiVW5rbm93biBlcnJvciAiLCBlcnIsCi0gICAgICAiIChzdHJl
cnJvcl9yIGZhaWxlZCB3aXRoIGVycm9yICIsIGVycm5vLCAiKSIpOwotICB9IGVsc2UgewotICAg
IHJlc3VsdC5hc3NpZ24oYnVmKTsKLSAgfQotI2VsaWYgZGVmaW5lZChGT0xMWV9IQVZFX1hTSV9T
VFJFUlJPUl9SKSB8fCBcCi0gIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fQU5EUk9J
RF9fKQotICAvLyBVc2luZyBYU0ktY29tcGF0aWJsZSBzdHJlcnJvcl9yCi0gIGludCByID0gc3Ry
ZXJyb3JfcihlcnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCi0gIC8vIE9TWC9GcmVlQlNEIHVzZSBF
SU5WQUwgYW5kIExpbnV4IHVzZXMgLTEgc28ganVzdCBjaGVjayBmb3Igbm9uLXplcm8KLSAgaWYg
KHIgIT0gMCkgewotICAgIHJlc3VsdCA9IHRvPGZic3RyaW5nPigKLSAgICAgICJVbmtub3duIGVy
cm9yICIsIGVyciwKLSAgICAgICIgKHN0cmVycm9yX3IgZmFpbGVkIHdpdGggZXJyb3IgIiwgZXJy
bm8sICIpIik7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzdWx0LmFzc2lnbihidWYpOwotICB9Ci0jZWxz
ZQotICAvLyBVc2luZyBHTlUgc3RyZXJyb3JfcgotICByZXN1bHQuYXNzaWduKHN0cmVycm9yX3Io
ZXJyLCBidWYsIHNpemVvZihidWYpKSk7Ci0jZW5kaWYKLQotICByZXR1cm4gcmVzdWx0OwotfQot
Ci1uYW1lc3BhY2UgewotCi12b2lkIHRvTG93ZXJBc2NpaTgoY2hhciYgYykgewotICAvLyBCcmFu
Y2hsZXNzIHRvbG93ZXIsIGJhc2VkIG9uIHRoZSBpbnB1dC1yb3RhdGluZyB0cmljayBkZXNjcmli
ZWQKLSAgLy8gYXQgaHR0cDovL3d3dy5hemlsbGlvbm1vbmtleXMuY29tL3FlZC9hc21leGFtcGxl
Lmh0bWwKLSAgLy8KLSAgLy8gVGhpcyBhbGdvcml0aG0gZGVwZW5kcyBvbiBhbiBvYnNlcnZhdGlv
bjogZWFjaCB1cHBlcmNhc2UKLSAgLy8gQVNDSUkgY2hhcmFjdGVyIGNhbiBiZSBjb252ZXJ0ZWQg
dG8gaXRzIGxvd2VyY2FzZSBlcXVpdmFsZW50Ci0gIC8vIGJ5IGFkZGluZyAweDIwLgotCi0gIC8v
IFN0ZXAgMTogQ2xlYXIgdGhlIGhpZ2ggb3JkZXIgYml0LiBXZSdsbCBkZWFsIHdpdGggaXQgaW4g
U3RlcCA1LgotICB1aW50OF90IHJvdGF0ZWQgPSB1aW50OF90KGMgJiAweDdmKTsKLSAgLy8gQ3Vy
cmVudGx5LCB0aGUgdmFsdWUgb2Ygcm90YXRlZCwgYXMgYSBmdW5jdGlvbiBvZiB0aGUgb3JpZ2lu
YWwgYyBpczoKLSAgLy8gICBiZWxvdyAnQSc6ICAgMC0gNjQKLSAgLy8gICAnQSctJ1onOiAgICA2
NS0gOTAKLSAgLy8gICBhYm92ZSAnWic6ICA5MS0xMjcKLQotICAvLyBTdGVwIDI6IEFkZCAweDI1
ICgzNykKLSAgcm90YXRlZCArPSAweDI1OwotICAvLyBOb3cgdGhlIHZhbHVlIG9mIHJvdGF0ZWQs
IGFzIGEgZnVuY3Rpb24gb2YgdGhlIG9yaWdpbmFsIGMgaXM6Ci0gIC8vICAgYmVsb3cgJ0EnOiAg
IDM3LTEwMQotICAvLyAgICdBJy0nWic6ICAgIDEwMi0xMjcKLSAgLy8gICBhYm92ZSAnWic6ICAx
MjgtMTY0Ci0KLSAgLy8gU3RlcCAzOiBjbGVhciB0aGUgaGlnaCBvcmRlciBiaXQKLSAgcm90YXRl
ZCAmPSAweDdmOwotICAvLyAgIGJlbG93ICdBJzogICAzNy0xMDEKLSAgLy8gICAnQSctJ1onOiAg
ICAxMDItMTI3Ci0gIC8vICAgYWJvdmUgJ1onOiAgICAwLSAzNgotCi0gIC8vIFN0ZXAgNDogQWRk
IDB4MWEgKDI2KQotICByb3RhdGVkICs9IDB4MWE7Ci0gIC8vICAgYmVsb3cgJ0EnOiAgIDYzLTEy
NwotICAvLyAgICdBJy0nWic6ICAgIDEyOC0xNTMKLSAgLy8gICBhYm92ZSAnWic6ICAgMjUtIDYy
Ci0KLSAgLy8gQXQgdGhpcyBwb2ludCwgbm90ZSB0aGF0IG9ubHkgdGhlIHVwcGVyY2FzZSBsZXR0
ZXJzIGhhdmUgYmVlbgotICAvLyB0cmFuc2Zvcm1lZCBpbnRvIHZhbHVlcyB3aXRoIHRoZSBoaWdo
IG9yZGVyIGJpdCBzZXQgKDEyOCBhbmQgYWJvdmUpLgotCi0gIC8vIFN0ZXAgNTogU2hpZnQgdGhl
IGhpZ2ggb3JkZXIgYml0IDIgc3BhY2VzIHRvIHRoZSByaWdodDogdGhlIHNwb3QKLSAgLy8gd2hl
cmUgdGhlIG9ubHkgMSBiaXQgaW4gMHgyMCBpcy4gIEJ1dCBmaXJzdCwgaG93IHdlIGlnbm9yZWQg
dGhlCi0gIC8vIGhpZ2ggb3JkZXIgYml0IG9mIHRoZSBvcmlnaW5hbCBjIGluIHN0ZXAgMT8gIElm
IHRoYXQgYml0IHdhcyBzZXQsCi0gIC8vIHdlIG1heSBoYXZlIGp1c3QgZ290dGVuIGEgZmFsc2Ug
bWF0Y2ggb24gYSB2YWx1ZSBpbiB0aGUgcmFuZ2UKLSAgLy8gMTI4KydBJyB0byAxMjgrJ1onLiAg
VG8gY29ycmVjdCB0aGlzLCBuZWVkIHRvIGNsZWFyIHRoZSBoaWdoIG9yZGVyCi0gIC8vIGJpdCBv
ZiByb3RhdGVkIGlmIHRoZSBoaWdoIG9yZGVyIGJpdCBvZiBjIGlzIHNldC4gIFNpbmNlIHdlIGRv
bid0Ci0gIC8vIGNhcmUgYWJvdXQgdGhlIG90aGVyIGJpdHMgaW4gcm90YXRlZCwgdGhlIGVhc2ll
c3QgdGhpbmcgdG8gZG8KLSAgLy8gaXMgaW52ZXJ0IGFsbCB0aGUgYml0cyBpbiBjIGFuZCBiaXR3
aXNlLWFuZCB0aGVtIHdpdGggcm90YXRlZC4KLSAgcm90YXRlZCAmPSB+YzsKLSAgcm90YXRlZCA+
Pj0gMjsKLQotICAvLyBTdGVwIDY6IEFwcGx5IGEgbWFzayB0byBjbGVhciBldmVyeXRoaW5nIGV4
Y2VwdCB0aGUgMHgyMCBiaXQKLSAgLy8gaW4gcm90YXRlZC4KLSAgcm90YXRlZCAmPSAweDIwOwot
Ci0gIC8vIEF0IHRoaXMgcG9pbnQsIHJvdGF0ZWQgaXMgMHgyMCBpZiBjIGlzICdBJy0nWicgYW5k
IDB4MDAgb3RoZXJ3aXNlCi0KLSAgLy8gU3RlcCA3OiBBZGQgcm90YXRlZCB0byBjCi0gIGMgKz0g
Y2hhcihyb3RhdGVkKTsKLX0KLQotdm9pZCB0b0xvd2VyQXNjaWkzMih1aW50MzJfdCYgYykgewot
ICAvLyBCZXNpZGVzIGJlaW5nIGJyYW5jaGxlc3MsIHRoZSBhbGdvcml0aG0gaW4gdG9Mb3dlckFz
Y2lpOCgpIGhhcyBhbm90aGVyCi0gIC8vIGludGVyZXN0aW5nIHByb3BlcnR5OiBOb25lIG9mIHRo
ZSBhZGRpdGlvbiBvcGVyYXRpb25zIHdpbGwgY2F1c2UKLSAgLy8gYW4gb3ZlcmZsb3cgaW4gdGhl
IDgtYml0IHZhbHVlLiAgU28gd2UgY2FuIHBhY2sgZm91ciA4LWJpdCB2YWx1ZXMKLSAgLy8gaW50
byBhIHVpbnQzMl90IGFuZCBydW4gZWFjaCBvcGVyYXRpb24gb24gYWxsIGZvdXIgdmFsdWVzIGlu
IHBhcmFsbGVsCi0gIC8vIHdpdGhvdXQgaGF2aW5nIHRvIHVzZSBhbnkgQ1BVLXNwZWNpZmljIFNJ
TUQgaW5zdHJ1Y3Rpb25zLgotICB1aW50MzJfdCByb3RhdGVkID0gYyAmIHVpbnQzMl90KDB4N2Y3
ZjdmN2ZMKTsKLSAgcm90YXRlZCArPSB1aW50MzJfdCgweDI1MjUyNTI1TCk7Ci0gIHJvdGF0ZWQg
Jj0gdWludDMyX3QoMHg3ZjdmN2Y3ZkwpOwotICByb3RhdGVkICs9IHVpbnQzMl90KDB4MWExYTFh
MWFMKTsKLQotICAvLyBTdGVwIDUgaW52b2x2ZXMgYSBzaGlmdCwgc28gc29tZSBiaXRzIHdpbGwg
c3BpbGwgb3ZlciBmcm9tIGVhY2gKLSAgLy8gOC1iaXQgdmFsdWUgaW50byB0aGUgbmV4dC4gIEJ1
dCB0aGF0J3Mgb2theSwgYmVjYXVzZSB0aGV5J3JlIGJpdHMKLSAgLy8gdGhhdCB3aWxsIGJlIGNs
ZWFyZWQgYnkgdGhlIG1hc2sgaW4gc3RlcCA2IGFueXdheS4KLSAgcm90YXRlZCAmPSB+YzsKLSAg
cm90YXRlZCA+Pj0gMjsKLSAgcm90YXRlZCAmPSB1aW50MzJfdCgweDIwMjAyMDIwTCk7Ci0gIGMg
Kz0gcm90YXRlZDsKLX0KLQotdm9pZCB0b0xvd2VyQXNjaWk2NCh1aW50NjRfdCYgYykgewotICAv
LyA2NC1iaXQgdmVyc2lvbiBvZiB0b0xvd2VyMzIKLSAgdWludDY0X3Qgcm90YXRlZCA9IGMgJiB1
aW50NjRfdCgweDdmN2Y3ZjdmN2Y3ZjdmN2ZMKTsKLSAgcm90YXRlZCArPSB1aW50NjRfdCgweDI1
MjUyNTI1MjUyNTI1MjVMKTsKLSAgcm90YXRlZCAmPSB1aW50NjRfdCgweDdmN2Y3ZjdmN2Y3Zjdm
N2ZMKTsKLSAgcm90YXRlZCArPSB1aW50NjRfdCgweDFhMWExYTFhMWExYTFhMWFMKTsKLSAgcm90
YXRlZCAmPSB+YzsKLSAgcm90YXRlZCA+Pj0gMjsKLSAgcm90YXRlZCAmPSB1aW50NjRfdCgweDIw
MjAyMDIwMjAyMDIwMjBMKTsKLSAgYyArPSByb3RhdGVkOwotfQotCi19IC8vIGFub24gbmFtZXNw
YWNlCi0KLXZvaWQgdG9Mb3dlckFzY2lpKGNoYXIqIHN0ciwgc2l6ZV90IGxlbmd0aCkgewotICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGtBbGlnbk1hc2s2NCA9IDc7Ci0gIHN0YXRpYyBjb25zdCBzaXpl
X3Qga0FsaWduTWFzazMyID0gMzsKLQotICAvLyBDb252ZXJ0IGEgY2hhcmFjdGVyIGF0IGEgdGlt
ZSB1bnRpbCB3ZSByZWFjaCBhbiBhZGRyZXNzIHRoYXQKLSAgLy8gaXMgYXQgbGVhc3QgMzItYml0
IGFsaWduZWQKLSAgc2l6ZV90IG4gPSAoc2l6ZV90KXN0cjsKLSAgbiAmPSBrQWxpZ25NYXNrMzI7
Ci0gIG4gPSBzdGQ6Om1pbihuLCBsZW5ndGgpOwotICBzaXplX3Qgb2Zmc2V0ID0gMDsKLSAgaWYg
KG4gIT0gMCkgewotICAgIG4gPSBzdGQ6Om1pbig0IC0gbiwgbGVuZ3RoKTsKLSAgICBkbyB7Ci0g
ICAgICB0b0xvd2VyQXNjaWk4KHN0cltvZmZzZXRdKTsKLSAgICAgIG9mZnNldCsrOwotICAgIH0g
d2hpbGUgKG9mZnNldCA8IG4pOwotICB9Ci0KLSAgbiA9IChzaXplX3QpKHN0ciArIG9mZnNldCk7
Ci0gIG4gJj0ga0FsaWduTWFzazY0OwotICBpZiAoKG4gIT0gMCkgJiYgKG9mZnNldCArIDQgPD0g
bGVuZ3RoKSkgewotICAgIC8vIFRoZSBuZXh0IGFkZHJlc3MgaXMgMzItYml0IGFsaWduZWQgYnV0
IG5vdCA2NC1iaXQgYWxpZ25lZC4KLSAgICAvLyBDb252ZXJ0IHRoZSBuZXh0IDQgYnl0ZXMgaW4g
b3JkZXIgdG8gZ2V0IHRvIHRoZSA2NC1iaXQgYWxpZ25lZAotICAgIC8vIHBhcnQgb2YgdGhlIGlu
cHV0LgotICAgIHRvTG93ZXJBc2NpaTMyKCoodWludDMyX3QqKShzdHIgKyBvZmZzZXQpKTsKLSAg
ICBvZmZzZXQgKz0gNDsKLSAgfQotCi0gIC8vIENvbnZlcnQgOCBjaGFyYWN0ZXJzIGF0IGEgdGlt
ZQotICB3aGlsZSAob2Zmc2V0ICsgOCA8PSBsZW5ndGgpIHsKLSAgICB0b0xvd2VyQXNjaWk2NCgq
KHVpbnQ2NF90Kikoc3RyICsgb2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDg7Ci0gIH0KLQotICAv
LyBDb252ZXJ0IDQgY2hhcmFjdGVycyBhdCBhIHRpbWUKLSAgd2hpbGUgKG9mZnNldCArIDQgPD0g
bGVuZ3RoKSB7Ci0gICAgdG9Mb3dlckFzY2lpMzIoKih1aW50MzJfdCopKHN0ciArIG9mZnNldCkp
OwotICAgIG9mZnNldCArPSA0OwotICB9Ci0KLSAgLy8gQ29udmVydCBhbnkgY2hhcmFjdGVycyBy
ZW1haW5pbmcgYWZ0ZXIgdGhlIGxhc3QgNC1ieXRlIGFsaWduZWQgZ3JvdXAKLSAgd2hpbGUgKG9m
ZnNldCA8IGxlbmd0aCkgewotICAgIHRvTG93ZXJBc2NpaTgoc3RyW29mZnNldF0pOwotICAgIG9m
ZnNldCsrOwotICB9Ci19Ci0KLW5hbWVzcGFjZSBkZXRhaWwgewotCi1zaXplX3QgaGV4RHVtcExp
bmUoY29uc3Qgdm9pZCogcHRyLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLSAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZyYgbGluZSkgewotICBzdGF0aWMgY2hhciBoZXhWYWx1ZXNb
XSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKLSAgLy8gTGluZSBsYXlvdXQ6Ci0gIC8vIDg6IGFkZHJl
c3MKLSAgLy8gMTogc3BhY2UKLSAgLy8gKDErMikqMTY6IGhleCBieXRlcywgZWFjaCBwcmVjZWRl
ZCBieSBhIHNwYWNlCi0gIC8vIDE6IHNwYWNlIHNlcGFyYXRpbmcgdGhlIHR3byBoYWx2ZXMKLSAg
Ly8gMzogIiAgfCIKLSAgLy8gMTY6IGNoYXJhY3RlcnMKLSAgLy8gMTogInwiCi0gIC8vIFRvdGFs
OiA3OAotICBsaW5lLmNsZWFyKCk7Ci0gIGxpbmUucmVzZXJ2ZSg3OCk7Ci0gIGNvbnN0IHVpbnQ4
X3QqIHAgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwdHIpICsgb2Zmc2V0Owot
ICBzaXplX3QgbiA9IHN0ZDo6bWluKHNpemUgLSBvZmZzZXQsIHNpemVfdCgxNikpOwotICBsaW5l
LnB1c2hfYmFjayhoZXhWYWx1ZXNbKG9mZnNldCA+PiAyOCkgJiAweGZdKTsKLSAgbGluZS5wdXNo
X2JhY2soaGV4VmFsdWVzWyhvZmZzZXQgPj4gMjQpICYgMHhmXSk7Ci0gIGxpbmUucHVzaF9iYWNr
KGhleFZhbHVlc1sob2Zmc2V0ID4+IDIwKSAmIDB4Zl0pOwotICBsaW5lLnB1c2hfYmFjayhoZXhW
YWx1ZXNbKG9mZnNldCA+PiAxNikgJiAweGZdKTsKLSAgbGluZS5wdXNoX2JhY2soaGV4VmFsdWVz
WyhvZmZzZXQgPj4gMTIpICYgMHhmXSk7Ci0gIGxpbmUucHVzaF9iYWNrKGhleFZhbHVlc1sob2Zm
c2V0ID4+IDgpICYgMHhmXSk7Ci0gIGxpbmUucHVzaF9iYWNrKGhleFZhbHVlc1sob2Zmc2V0ID4+
IDQpICYgMHhmXSk7Ci0gIGxpbmUucHVzaF9iYWNrKGhleFZhbHVlc1tvZmZzZXQgJiAweGZdKTsK
LSAgbGluZS5wdXNoX2JhY2soJyAnKTsKLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47IGkr
KykgewotICAgIGlmIChpID09IDgpIHsKLSAgICAgIGxpbmUucHVzaF9iYWNrKCcgJyk7Ci0gICAg
fQotCi0gICAgbGluZS5wdXNoX2JhY2soJyAnKTsKLSAgICBsaW5lLnB1c2hfYmFjayhoZXhWYWx1
ZXNbKHBbaV0gPj4gNCkgJiAweGZdKTsKLSAgICBsaW5lLnB1c2hfYmFjayhoZXhWYWx1ZXNbcFtp
XSAmIDB4Zl0pOwotICB9Ci0KLSAgLy8gMyBzcGFjZXMgZm9yIGVhY2ggYnl0ZSB3ZSdyZSBub3Qg
cHJpbnRpbmcsIG9uZSBzZXBhcmF0aW5nIHRoZSBoYWx2ZXMKLSAgLy8gaWYgbmVjZXNzYXJ5Ci0g
IGxpbmUuYXBwZW5kKDMgKiAoMTYgLSBuKSArIChuIDw9IDgpLCAnICcpOwotICBsaW5lLmFwcGVu
ZCgiICB8Iik7Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICBjaGFy
IGMgPSAocFtpXSA+PSAzMiAmJiBwW2ldIDw9IDEyNiA/IHN0YXRpY19jYXN0PGNoYXI+KHBbaV0p
IDogJy4nKTsKLSAgICBsaW5lLnB1c2hfYmFjayhjKTsKLSAgfQotICBsaW5lLmFwcGVuZCgxNiAt
IG4sICcgJyk7Ci0gIGxpbmUucHVzaF9iYWNrKCd8Jyk7Ci0gIERDSEVDS19FUShsaW5lLnNpemUo
KSwgNzh1KTsKLQotICByZXR1cm4gbjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgZGV0YWlsCi0KLXN0
ZDo6c3RyaW5nIHN0cmlwTGVmdE1hcmdpbihzdGQ6OnN0cmluZyBzKSB7Ci0gIHN0ZDo6dmVjdG9y
PFN0cmluZ1BpZWNlPiBwaWVjZXM7Ci0gIHNwbGl0KCJcbiIsIHMsIHBpZWNlcyk7Ci0gIGF1dG8g
cGllY2VyID0gcmFuZ2UocGllY2VzKTsKLQotICBhdXRvIHBpZWNlID0gKHBpZWNlci5lbmQoKSAt
IDEpOwotICBhdXRvIG5lZWRsZSA9IHN0ZDo6ZmluZF9pZihwaWVjZS0+YmVnaW4oKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGllY2UtPmVuZCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbXShjaGFyIGMpIHsgcmV0dXJuIGMgIT0gJyAnICYmIGMgIT0gJ1x0JzsgfSk7
Ci0gIGlmIChuZWVkbGUgPT0gcGllY2UtPmVuZCgpKSB7Ci0gICAgKHBpZWNlci5lbmQoKSAtIDEp
LT5jbGVhcigpOwotICB9Ci0gIHBpZWNlID0gcGllY2VyLmJlZ2luKCk7Ci0gIG5lZWRsZSA9IHN0
ZDo6ZmluZF9pZihwaWVjZS0+YmVnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpZWNl
LT5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFtdKGNoYXIgYykgeyByZXR1cm4gYyAh
PSAnICcgJiYgYyAhPSAnXHQnOyB9KTsKLSAgaWYgKG5lZWRsZSA9PSBwaWVjZS0+ZW5kKCkpIHsK
LSAgICBwaWVjZXIuZXJhc2UocGllY2VyLmJlZ2luKCksIHBpZWNlci5iZWdpbigpICsgMSk7Ci0g
IH0KLQotICBjb25zdCBhdXRvIHNlbnRpbmVsID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+
OjptYXgoKTsKLSAgYXV0byBpbmRlbnQgPSBzZW50aW5lbDsKLSAgc2l6ZV90IG1heF9sZW5ndGgg
PSAwOwotICBmb3IgKHBpZWNlID0gcGllY2VyLmJlZ2luKCk7IHBpZWNlICE9IHBpZWNlci5lbmQo
KTsgcGllY2UrKykgewotICAgIG5lZWRsZSA9IHN0ZDo6ZmluZF9pZihwaWVjZS0+YmVnaW4oKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgcGllY2UtPmVuZCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBbXShjaGFyIGMpIHsgcmV0dXJuIGMgIT0gJyAnICYmIGMgIT0gJ1x0JzsgfSk7
Ci0gICAgaWYgKG5lZWRsZSAhPSBwaWVjZS0+ZW5kKCkpIHsKLSAgICAgIGluZGVudCA9IHN0ZDo6
bWluPHNpemVfdD4oaW5kZW50LCBzaXplX3QobmVlZGxlIC0gcGllY2UtPmJlZ2luKCkpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgbWF4X2xlbmd0aCA9IHN0ZDo6bWF4PHNpemVfdD4ocGllY2UtPnNp
emUoKSwgbWF4X2xlbmd0aCk7Ci0gICAgfQotICB9Ci0gIGluZGVudCA9IGluZGVudCA9PSBzZW50
aW5lbCA/IG1heF9sZW5ndGggOiBpbmRlbnQ7Ci0gIGZvciAocGllY2UgPSBwaWVjZXIuYmVnaW4o
KTsgcGllY2UgIT0gcGllY2VyLmVuZCgpOyBwaWVjZSsrKSB7Ci0gICAgaWYgKHBpZWNlLT5zaXpl
KCkgPCBpbmRlbnQpIHsKLSAgICAgIHBpZWNlLT5jbGVhcigpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICBwaWVjZS0+ZXJhc2UocGllY2UtPmJlZ2luKCksIHBpZWNlLT5iZWdpbigpICsgaW5kZW50KTsK
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIGpvaW4oIlxuIiwgcGllY2VyKTsKLX0KLQotfSAgIC8vIG5h
bWVzcGFjZSBmb2xseQotCi0jaWZkZWYgRk9MTFlfREVGSU5FRF9ETUdMCi0jIHVuZGVmIEZPTExZ
X0RFRklORURfRE1HTAotIyB1bmRlZiBETUdMX05PX09QVFMKLSMgdW5kZWYgRE1HTF9QQVJBTVMK
LSMgdW5kZWYgRE1HTF9BTlNJCi0jIHVuZGVmIERNR0xfSkFWQQotIyB1bmRlZiBETUdMX1ZFUkJP
U0UKLSMgdW5kZWYgRE1HTF9UWVBFUwotIyB1bmRlZiBETUdMX1JFVF9QT1NURklYCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1N0
cmluZy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvU3RyaW5n
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1N2EyNTViM2YxZjg1N2I3NmFmZDBj
MzJjOTIwNjZkZjI0OTYwMDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvU3RyaW5n
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3
IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl
LCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hl
Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBs
aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs
Ci0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVy
IHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotI2RlZmluZSBGT0xMWV9TVFJJTkdf
SF8KLQotI2luY2x1ZGUgPGNzdGRhcmc+Ci0jaW5jbHVkZSA8ZXhjZXB0aW9uPgotI2luY2x1ZGUg
PHN0cmluZz4KLSNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgotI2luY2x1ZGUgPHVub3JkZXJlZF9z
ZXQ+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSA8Ym9vc3QvcmVnZXgvcGVuZGluZy91
bmljb2RlX2l0ZXJhdG9yLmhwcD4KLSNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy5ocHA+Ci0K
LSNpbmNsdWRlIDxmb2xseS9Db252Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvRXhjZXB0aW9uU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvRkJTdHJpbmcuaD4KLSNpbmNsdWRlIDxmb2xseS9GQlZlY3Rv
ci5oPgotI2luY2x1ZGUgPGZvbGx5L1BvcnRhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvUmFu
Z2UuaD4KLSNpbmNsdWRlIDxmb2xseS9TY29wZUd1YXJkLmg+Ci0KLS8vIENvbXBhdGliaWxpdHkg
ZnVuY3Rpb24sIHRvIG1ha2Ugc3VyZSB0b1N0ZFN0cmluZyhzKSBjYW4gYmUgY2FsbGVkCi0vLyB0
byBjb252ZXJ0IGEgc3RkOjpzdHJpbmcgb3IgZmJzdHJpbmcgdmFyaWFibGUgcyBpbnRvIHR5cGUg
c3RkOjpzdHJpbmcKLS8vIHdpdGggdmVyeSBsaXR0bGUgb3ZlcmhlYWQgaWYgcyB3YXMgYWxyZWFk
eSBzdGQ6OnN0cmluZwotbmFtZXNwYWNlIGZvbGx5IHsKLQotaW5saW5lCi1zdGQ6OnN0cmluZyB0
b1N0ZFN0cmluZyhjb25zdCBmb2xseTo6ZmJzdHJpbmcmIHMpIHsKLSAgcmV0dXJuIHN0ZDo6c3Ry
aW5nKHMuZGF0YSgpLCBzLnNpemUoKSk7Ci19Ci0KLWlubGluZQotY29uc3Qgc3RkOjpzdHJpbmcm
IHRvU3RkU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzKSB7Ci0gIHJldHVybiBzOwotfQotCi0v
LyBJZiBjYWxsZWQgd2l0aCBhIHRlbXBvcmFyeSwgdGhlIGNvbXBpbGVyIHdpbGwgc2VsZWN0IHRo
aXMgb3ZlcmxvYWQgaW5zdGVhZAotLy8gb2YgdGhlIGFib3ZlLCBzbyB3ZSBkb24ndCByZXR1cm4g
YSAobHZhbHVlKSByZWZlcmVuY2UgdG8gYSB0ZW1wb3JhcnkuCi1pbmxpbmUKLXN0ZDo6c3RyaW5n
JiYgdG9TdGRTdHJpbmcoc3RkOjpzdHJpbmcmJiBzKSB7Ci0gIHJldHVybiBzdGQ6Om1vdmUocyk7
Ci19Ci0KLS8qKgotICogQy1Fc2NhcGUgYSBzdHJpbmcsIG1ha2luZyBpdCBzdWl0YWJsZSBmb3Ig
cmVwcmVzZW50YXRpb24gYXMgYSBDIHN0cmluZwotICogbGl0ZXJhbC4gIEFwcGVuZHMgdGhlIHJl
c3VsdCB0byB0aGUgb3V0cHV0IHN0cmluZy4KLSAqCi0gKiBCYWNrc2xhc2hlcyBhbGwgb2NjdXJy
ZW5jZXMgb2YgYmFja3NsYXNoIGFuZCBkb3VibGUtcXVvdGU6Ci0gKiAgICIgIC0+ICBcIgotICog
ICBcICAtPiAgXFwKLSAqCi0gKiBSZXBsYWNlcyBhbGwgbm9uLXByaW50YWJsZSBBU0NJSSBjaGFy
YWN0ZXJzIHdpdGggYmFja3NsYXNoLW9jdGFsCi0gKiByZXByZXNlbnRhdGlvbjoKLSAqICAgPEFT
Q0lJIDI1ND4gLT4gXDM3NgotICoKLSAqIE5vdGUgdGhhdCB3ZSB1c2UgYmFja3NsYXNoLW9jdGFs
IGluc3RlYWQgb2YgYmFja3NsYXNoLWhleCBiZWNhdXNlIHRoZSBvY3RhbAotICogcmVwcmVzZW50
YXRpb24gaXMgZ3VhcmFudGVlZCB0byBjb25zdW1lIG5vIG1vcmUgdGhhbiAzIGNoYXJhY3RlcnM7
ICJcMzc2MCIKLSAqIHJlcHJlc2VudHMgdHdvIGNoYXJhY3RlcnMsIG9uZSB3aXRoIHZhbHVlIDI1
NCwgYW5kIG9uZSB3aXRoIHZhbHVlIDQ4ICgnMCcpLAotICogd2hlcmVhcyAiXHhmZTAiIHJlcHJl
c2VudHMgb25seSBvbmUgY2hhcmFjdGVyICh3aXRoIHZhbHVlIDQwNjQsIHdoaWNoIGxlYWRzCi0g
KiB0byBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yKS4KLSAqLwotdGVtcGxhdGUgPGNs
YXNzIFN0cmluZz4KLXZvaWQgY0VzY2FwZShTdHJpbmdQaWVjZSBzdHIsIFN0cmluZyYgb3V0KTsK
LQotLyoqCi0gKiBTaW1pbGFyIHRvIGNFc2NhcGUgYWJvdmUsIGJ1dCByZXR1cm5zIHRoZSBlc2Nh
cGVkIHN0cmluZy4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIFN0cmluZz4KLVN0cmluZyBjRXNjYXBl
KFN0cmluZ1BpZWNlIHN0cikgewotICBTdHJpbmcgb3V0OwotICBjRXNjYXBlKHN0ciwgb3V0KTsK
LSAgcmV0dXJuIG91dDsKLX0KLQotLyoqCi0gKiBDLVVuZXNjYXBlIGEgc3RyaW5nOyB0aGUgb3Bw
b3NpdGUgb2YgY0VzY2FwZSBhYm92ZS4gIEFwcGVuZHMgdGhlIHJlc3VsdAotICogdG8gdGhlIG91
dHB1dCBzdHJpbmcuCi0gKgotICogUmVjb2duaXplcyB0aGUgc3RhbmRhcmQgQyBlc2NhcGUgc2Vx
dWVuY2VzOgotICoKLSAqIFwnIFwiIFw/IFxcIFxhIFxiIFxmIFxuIFxyIFx0IFx2Ci0gKiBcWzAt
N10rCi0gKiBceFswLTlhLWZBLUZdKwotICoKLSAqIEluIHN0cmljdCBtb2RlIChkZWZhdWx0KSwg
dGhyb3dzIHN0ZDo6aW52YWxpZF9hcmd1bWVudCBpZiBpdCBlbmNvdW50ZXJzCi0gKiBhbiB1bnJl
Y29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlLiAgSW4gbm9uLXN0cmljdCBtb2RlLCBpdCBsZWF2ZXMK
LSAqIHRoZSBlc2NhcGUgc2VxdWVuY2UgdW5jaGFuZ2VkLgotICovCi10ZW1wbGF0ZSA8Y2xhc3Mg
U3RyaW5nPgotdm9pZCBjVW5lc2NhcGUoU3RyaW5nUGllY2Ugc3RyLCBTdHJpbmcmIG91dCwgYm9v
bCBzdHJpY3QgPSB0cnVlKTsKLQotLyoqCi0gKiBTaW1pbGFyIHRvIGNVbmVzY2FwZSBhYm92ZSwg
YnV0IHJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgU3Ry
aW5nPgotU3RyaW5nIGNVbmVzY2FwZShTdHJpbmdQaWVjZSBzdHIsIGJvb2wgc3RyaWN0ID0gdHJ1
ZSkgewotICBTdHJpbmcgb3V0OwotICBjVW5lc2NhcGUoc3RyLCBvdXQsIHN0cmljdCk7Ci0gIHJl
dHVybiBvdXQ7Ci19Ci0KLS8qKgotICogVVJJLWVzY2FwZSBhIHN0cmluZy4gIEFwcGVuZHMgdGhl
IHJlc3VsdCB0byB0aGUgb3V0cHV0IHN0cmluZy4KLSAqCi0gKiBBbHBoYW51bWVyaWMgY2hhcmFj
dGVycyBhbmQgb3RoZXIgY2hhcmFjdGVycyBtYXJrZWQgYXMgInVucmVzZXJ2ZWQiIGluIFJGQwot
ICogMzk4NiAoIC1fLn4gKSBhcmUgbGVmdCB1bmNoYW5nZWQuICBJbiBQQVRIIG1vZGUsIHRoZSBm
b3J3YXJkIHNsYXNoICgvKSBpcwotICogYWxzbyBsZWZ0IHVuY2hhbmdlZC4gIEluIFFVRVJZIG1v
ZGUsIHNwYWNlcyBhcmUgcmVwbGFjZWQgYnkgJysnLiAgQWxsIG90aGVyCi0gKiBjaGFyYWN0ZXJz
IGFyZSBwZXJjZW50LWVuY29kZWQuCi0gKi8KLWVudW0gY2xhc3MgVXJpRXNjYXBlTW9kZSA6IHVu
c2lnbmVkIGNoYXIgewotICAvLyBUaGUgdmFsdWVzIGFyZSBtZWFuaW5nZnVsLCBzZWUgZ2VuZXJh
dGVfZXNjYXBlX3RhYmxlcy5weQotICBBTEwgPSAwLAotICBRVUVSWSA9IDEsCi0gIFBBVEggPSAy
Ci19OwotdGVtcGxhdGUgPGNsYXNzIFN0cmluZz4KLXZvaWQgdXJpRXNjYXBlKFN0cmluZ1BpZWNl
IHN0ciwKLSAgICAgICAgICAgICAgIFN0cmluZyYgb3V0LAotICAgICAgICAgICAgICAgVXJpRXNj
YXBlTW9kZSBtb2RlID0gVXJpRXNjYXBlTW9kZTo6QUxMKTsKLQotLyoqCi0gKiBTaW1pbGFyIHRv
IHVyaUVzY2FwZSBhYm92ZSwgYnV0IHJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLgotICovCi10
ZW1wbGF0ZSA8Y2xhc3MgU3RyaW5nPgotU3RyaW5nIHVyaUVzY2FwZShTdHJpbmdQaWVjZSBzdHIs
IFVyaUVzY2FwZU1vZGUgbW9kZSA9IFVyaUVzY2FwZU1vZGU6OkFMTCkgewotICBTdHJpbmcgb3V0
OwotICB1cmlFc2NhcGUoc3RyLCBvdXQsIG1vZGUpOwotICByZXR1cm4gb3V0OwotfQotCi0vKioK
LSAqIFVSSS11bmVzY2FwZSBhIHN0cmluZy4gIEFwcGVuZHMgdGhlIHJlc3VsdCB0byB0aGUgb3V0
cHV0IHN0cmluZy4KLSAqCi0gKiBJbiBRVUVSWSBtb2RlLCAnKycgYXJlIHJlcGxhY2VkIGJ5IHNw
YWNlLiAgJVhYIHNlcXVlbmNlcyBhcmUgZGVjb2RlZCBpZgotICogWFggaXMgYSB2YWxpZCBoZXgg
c2VxdWVuY2UsIG90aGVyd2lzZSB3ZSB0aHJvdyBpbnZhbGlkX2FyZ3VtZW50LgotICovCi10ZW1w
bGF0ZSA8Y2xhc3MgU3RyaW5nPgotdm9pZCB1cmlVbmVzY2FwZShTdHJpbmdQaWVjZSBzdHIsCi0g
ICAgICAgICAgICAgICAgIFN0cmluZyYgb3V0LAotICAgICAgICAgICAgICAgICBVcmlFc2NhcGVN
b2RlIG1vZGUgPSBVcmlFc2NhcGVNb2RlOjpBTEwpOwotCi0vKioKLSAqIFNpbWlsYXIgdG8gdXJp
VW5lc2NhcGUgYWJvdmUsIGJ1dCByZXR1cm5zIHRoZSB1bmVzY2FwZWQgc3RyaW5nLgotICovCi10
ZW1wbGF0ZSA8Y2xhc3MgU3RyaW5nPgotU3RyaW5nIHVyaVVuZXNjYXBlKFN0cmluZ1BpZWNlIHN0
ciwgVXJpRXNjYXBlTW9kZSBtb2RlID0gVXJpRXNjYXBlTW9kZTo6QUxMKSB7Ci0gIFN0cmluZyBv
dXQ7Ci0gIHVyaVVuZXNjYXBlKHN0ciwgb3V0LCBtb2RlKTsKLSAgcmV0dXJuIG91dDsKLX0KLQot
LyoqCi0gKiBzdHJpbmdQcmludGYgaXMgbXVjaCBsaWtlIHByaW50ZiBidXQgZGVwb3NpdHMgaXRz
IHJlc3VsdCBpbnRvIGEKLSAqIHN0cmluZy4gVHdvIHNpZ25hdHVyZXMgYXJlIHN1cHBvcnRlZDog
dGhlIGZpcnN0IHNpbXBseSByZXR1cm5zIHRoZQotICogcmVzdWx0aW5nIHN0cmluZywgYW5kIHRo
ZSBzZWNvbmQgYXBwZW5kcyB0aGUgcHJvZHVjZWQgY2hhcmFjdGVycyB0bwotICogdGhlIHNwZWNp
ZmllZCBzdHJpbmcgYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gaXQuCi0gKi8KLXN0ZDo6c3Ry
aW5nIHN0cmluZ1ByaW50ZihGT0xMWV9QUklOVEZfRk9STUFUIGNvbnN0IGNoYXIqIGZvcm1hdCwg
Li4uKQotICBGT0xMWV9QUklOVEZfRk9STUFUX0FUVFIoMSwgMik7Ci0KLS8qIFNpbWlsYXIgdG8g
c3RyaW5nUHJpbnRmLCB3aXRoIGRpZmZlcmVudCBzaWduYXR1cmUuICovCi12b2lkIHN0cmluZ1By
aW50ZihzdGQ6OnN0cmluZyogb3V0LCBGT0xMWV9QUklOVEZfRk9STUFUIGNvbnN0IGNoYXIqIGZt
dCwgLi4uKQotICBGT0xMWV9QUklOVEZfRk9STUFUX0FUVFIoMiwgMyk7Ci0KLXN0ZDo6c3RyaW5n
JiBzdHJpbmdBcHBlbmRmKHN0ZDo6c3RyaW5nKiBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIEZPTExZX1BSSU5URl9GT1JNQVQgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCi0gIEZP
TExZX1BSSU5URl9GT1JNQVRfQVRUUigyLCAzKTsKLQotLyoqCi0gKiBTaW1pbGFyIHRvIHN0cmlu
Z1ByaW50ZiwgYnV0IGFjY2VwdHMgYSB2YV9saXN0IGFyZ3VtZW50LgotICoKLSAqIEFzIHdpdGgg
dnNucHJpbnRmKCkgaXRzZWxmLCB0aGUgdmFsdWUgb2YgYXAgaXMgdW5kZWZpbmVkIGFmdGVyIHRo
ZSBjYWxsLgotICogVGhlc2UgZnVuY3Rpb25zIGRvIG5vdCBjYWxsIHZhX2VuZCgpIG9uIGFwLgot
ICovCi1zdGQ6OnN0cmluZyBzdHJpbmdWUHJpbnRmKGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlz
dCBhcCk7Ci12b2lkIHN0cmluZ1ZQcmludGYoc3RkOjpzdHJpbmcqIG91dCwgY29uc3QgY2hhciog
Zm9ybWF0LCB2YV9saXN0IGFwKTsKLXN0ZDo6c3RyaW5nJiBzdHJpbmdWQXBwZW5kZihzdGQ6OnN0
cmluZyogb3V0LCBjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXApOwotCi0vKioKLSAqIEJh
Y2tzbGFzaGlmeSBhIHN0cmluZywgdGhhdCBpcywgcmVwbGFjZSBub24tcHJpbnRhYmxlIGNoYXJh
Y3RlcnMKLSAqIHdpdGggQy1zdHlsZSAoYnV0IE5PVCBDIGNvbXBsaWFudCkgIlx4SEgiIGVuY29k
aW5nLiAgSWYgaGV4X3N0eWxlCi0gKiBpcyBmYWxzZSwgdGhlbiBzaG9ydGhhbmQgbm90YXRpb25z
IGxpa2UgIlwwIiB3aWxsIGJlIHVzZWQgaW5zdGVhZAotICogb2YgIlx4MDAiIGZvciB0aGUgbW9z
dCBjb21tb24gYmFja3NsYXNoIGNhc2VzLgotICoKLSAqIFRoZXJlIGFyZSB0d28gZm9ybXMsIG9u
ZSByZXR1cm5pbmcgdGhlIGlucHV0IHN0cmluZywgYW5kIG9uZQotICogY3JlYXRpbmcgb3V0cHV0
IGluIHRoZSBzcGVjaWZpZWQgb3V0cHV0IHN0cmluZy4KLSAqCi0gKiBUaGlzIGlzIG1haW5seSBp
bnRlbmRlZCBmb3IgcHJpbnRpbmcgdG8gYSB0ZXJtaW5hbCwgc28gaXQgaXMgbm90Ci0gKiBwYXJ0
aWN1bGFybHkgb3B0aW1pemVkLgotICoKLSAqIERvICpub3QqIHVzZSB0aGlzIGluIHNpdHVhdGlv
bnMgd2hlcmUgeW91IGV4cGVjdCB0byBiZSBhYmxlIHRvIGZlZWQKLSAqIHRoZSBzdHJpbmcgdG8g
YSBDIG9yIEMrKyBjb21waWxlciwgYXMgdGhlcmUgYXJlIG51YW5jZXMgd2l0aCBob3cgQwotICog
cGFyc2VzIHN1Y2ggc3RyaW5ncyB0aGF0IGxlYWQgdG8gZmFpbHVyZXMuICBUaGlzIGlzIGZvciBk
aXNwbGF5Ci0gKiBwdXJwb3NlZCBvbmx5LiAgSWYgeW91IHdhbnQgYSBzdHJpbmcgeW91IGNhbiBl
bWJlZCBmb3IgdXNlIGluIEMgb3IKLSAqIEMrKywgdXNlIGNFc2NhcGUgaW5zdGVhZC4gIFRoaXMg
ZnVuY3Rpb24gaXMgZm9yIGRpc3BsYXkgcHVycG9zZXMKLSAqIG9ubHkuCi0gKi8KLXRlbXBsYXRl
IDxjbGFzcyBTdHJpbmcxLCBjbGFzcyBTdHJpbmcyPgotdm9pZCBiYWNrc2xhc2hpZnkoY29uc3Qg
U3RyaW5nMSYgaW5wdXQsIFN0cmluZzImIG91dHB1dCwgYm9vbCBoZXhfc3R5bGU9ZmFsc2UpOwot
Ci10ZW1wbGF0ZSA8Y2xhc3MgU3RyaW5nPgotU3RyaW5nIGJhY2tzbGFzaGlmeShjb25zdCBTdHJp
bmcmIGlucHV0LCBib29sIGhleF9zdHlsZT1mYWxzZSkgewotICBTdHJpbmcgb3V0cHV0OwotICBi
YWNrc2xhc2hpZnkoaW5wdXQsIG91dHB1dCwgaGV4X3N0eWxlKTsKLSAgcmV0dXJuIG91dHB1dDsK
LX0KLQotLyoqCi0gKiBUYWtlIGEgc3RyaW5nIGFuZCAiaHVtYW5pZnkiIGl0IC0tIHRoYXQgaXMs
IG1ha2UgaXQgbG9vayBiZXR0ZXIuCi0gKiBTaW5jZSAiYmV0dGVyIiBpcyBzdWJqZWN0aXZlLCBj
YXZlYXQgZW1wdG9yLiAgVGhlIGJhc2ljIGFwcHJvYWNoIGlzCi0gKiB0byBjb3VudCB0aGUgbnVt
YmVyIG9mIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMuICBJZiB0aGVyZSBhcmUgbm9uZSwKLSAqIHRo
ZW4gdGhlIG91dHB1dCBpcyB0aGUgaW5wdXQuICBJZiB0aGVyZSBhcmUgcmVsYXRpdmVseSBmZXcs
IG9yIGlmCi0gKiB0aGVyZSBpcyBhIGxvbmcgImVub3VnaCIgcHJlZml4IG9mIHByaW50YWJsZSBj
aGFyYWN0ZXJzLCB1c2UKLSAqIGJhY2tzbGFzaGlmeS4gIElmIGl0IGlzIG1vc3RseSBiaW5hcnks
IHRoZW4gc2ltcGx5IGhleCBlbmNvZGUuCi0gKgotICogVGhpcyBpcyBhbiBhdHRlbXB0IHRvIG1h
a2UgYSBjb21wdXRlciBzbWFydCwgYW5kIHNvIGxpa2VseSBpcyB3cm9uZwotICogbW9zdCBvZiB0
aGUgdGltZS4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIFN0cmluZzEsIGNsYXNzIFN0cmluZzI+Ci12
b2lkIGh1bWFuaWZ5KGNvbnN0IFN0cmluZzEmIGlucHV0LCBTdHJpbmcyJiBvdXRwdXQpOwotCi10
ZW1wbGF0ZSA8Y2xhc3MgU3RyaW5nPgotU3RyaW5nIGh1bWFuaWZ5KGNvbnN0IFN0cmluZyYgaW5w
dXQpIHsKLSAgU3RyaW5nIG91dHB1dDsKLSAgaHVtYW5pZnkoaW5wdXQsIG91dHB1dCk7Ci0gIHJl
dHVybiBvdXRwdXQ7Ci19Ci0KLS8qKgotICogU2FtZSBmdW5jdGlvbmFsaXR5IGFzIFB5dGhvbidz
IGJpbmFzY2lpLmhleGxpZnkuICBSZXR1cm5zIHRydWUKLSAqIG9uIHN1Y2Nlc3NmdWwgY29udmVy
c2lvbi4KLSAqCi0gKiBJZiBhcHBlbmRfb3V0cHV0IGlzIHRydWUsIGFwcGVuZCBkYXRhIHRvIHRo
ZSBvdXRwdXQgcmF0aGVyIHRoYW4KLSAqIHJlcGxhY2UgaXQuCi0gKi8KLXRlbXBsYXRlPGNsYXNz
IElucHV0U3RyaW5nLCBjbGFzcyBPdXRwdXRTdHJpbmc+Ci1ib29sIGhleGxpZnkoY29uc3QgSW5w
dXRTdHJpbmcmIGlucHV0LCBPdXRwdXRTdHJpbmcmIG91dHB1dCwKLSAgICAgICAgICAgICBib29s
IGFwcGVuZD1mYWxzZSk7Ci0KLXRlbXBsYXRlIDxjbGFzcyBPdXRwdXRTdHJpbmcgPSBzdGQ6OnN0
cmluZz4KLU91dHB1dFN0cmluZyBoZXhsaWZ5KEJ5dGVSYW5nZSBpbnB1dCkgewotICBPdXRwdXRT
dHJpbmcgb3V0cHV0OwotICBpZiAoIWhleGxpZnkoaW5wdXQsIG91dHB1dCkpIHsKLSAgICAvLyBo
ZXhsaWZ5KCkgY3VycmVudGx5IGFsd2F5cyByZXR1cm5zIHRydWUsIHNvIHRoaXMgY2FuJ3QgcmVh
bGx5IGhhcHBlbgotICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvcigiaGV4bGlmeSBmYWlsZWQi
KTsKLSAgfQotICByZXR1cm4gb3V0cHV0OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgT3V0cHV0U3Ry
aW5nID0gc3RkOjpzdHJpbmc+Ci1PdXRwdXRTdHJpbmcgaGV4bGlmeShTdHJpbmdQaWVjZSBpbnB1
dCkgewotICByZXR1cm4gaGV4bGlmeTxPdXRwdXRTdHJpbmc+KEJ5dGVSYW5nZXtpbnB1dH0pOwot
fQotCi0vKioKLSAqIFNhbWUgZnVuY3Rpb25hbGl0eSBhcyBQeXRob24ncyBiaW5hc2NpaS51bmhl
eGxpZnkuICBSZXR1cm5zIHRydWUKLSAqIG9uIHN1Y2Nlc3NmdWwgY29udmVyc2lvbi4KLSAqLwot
dGVtcGxhdGU8Y2xhc3MgSW5wdXRTdHJpbmcsIGNsYXNzIE91dHB1dFN0cmluZz4KLWJvb2wgdW5o
ZXhsaWZ5KGNvbnN0IElucHV0U3RyaW5nJiBpbnB1dCwgT3V0cHV0U3RyaW5nJiBvdXRwdXQpOwot
Ci10ZW1wbGF0ZSA8Y2xhc3MgT3V0cHV0U3RyaW5nID0gc3RkOjpzdHJpbmc+Ci1PdXRwdXRTdHJp
bmcgdW5oZXhsaWZ5KFN0cmluZ1BpZWNlIGlucHV0KSB7Ci0gIE91dHB1dFN0cmluZyBvdXRwdXQ7
Ci0gIGlmICghdW5oZXhsaWZ5KGlucHV0LCBvdXRwdXQpKSB7Ci0gICAgLy8gdW5oZXhsaWZ5KCkg
ZmFpbHMgaWYgdGhlIGlucHV0IGhhcyBub24taGV4aWRlY2ltYWwgY2hhcmFjdGVycywKLSAgICAv
LyBvciBpZiBpdCBkb2Vzbid0IGNvbnNpc3Qgb2YgYSB3aG9sZSBudW1iZXIgb2YgYnl0ZXMKLSAg
ICB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvcigidW5oZXhsaWZ5KCkgY2FsbGVkIHdpdGggbm9uLWhl
eCBpbnB1dCIpOwotICB9Ci0gIHJldHVybiBvdXRwdXQ7Ci19Ci0KLS8qCi0gKiBBIHByZXR0eS1w
cmludGVyIGZvciBudW1iZXJzIHRoYXQgYXBwZW5kcyBzdWZmaXhlcyBvZiB1bml0cyBvZiB0aGUK
LSAqIGdpdmVuIHR5cGUuICBJdCBwcmludHMgNCBzaWctZmlncyBvZiB2YWx1ZSB3aXRoIHRoZSBt
b3N0Ci0gKiBhcHByb3ByaWF0ZSB1bml0LgotICoKLSAqIElmIGBhZGRTcGFjZScgaXMgdHJ1ZSwg
d2UgcHV0IGEgc3BhY2UgYmV0d2VlbiB0aGUgdW5pdHMgc3VmZml4IGFuZAotICogdGhlIHZhbHVl
LgotICoKLSAqIEN1cnJlbnQgdHlwZXMgYXJlOgotICogICBQUkVUVFlfVElNRSAgICAgICAgIC0g
cywgbXMsIHVzLCBucywgZXRjLgotICogICBQUkVUVFlfQllURVNfTUVUUklDIC0ga0IsIE1CLCBH
QiwgZXRjIChnb2VzIHVwIGJ5IDEwXjMgPSAxMDAwIGVhY2ggdGltZSkKLSAqICAgUFJFVFRZX0JZ
VEVTICAgICAgICAtIGtCLCBNQiwgR0IsIGV0YyAoZ29lcyB1cCBieSAyXjEwID0gMTAyNCBlYWNo
IHRpbWUpCi0gKiAgIFBSRVRUWV9CWVRFU19JRUMgICAgLSBLaUIsIE1pQiwgR2lCLCBldGMKLSAq
ICAgUFJFVFRZX1VOSVRTX01FVFJJQyAtIGssIE0sIEcsIGV0YyAoZ29lcyB1cCBieSAxMF4zID0g
MTAwMCBlYWNoIHRpbWUpCi0gKiAgIFBSRVRUWV9VTklUU19CSU5BUlkgLSBrLCBNLCBHLCBldGMg
KGdvZXMgdXAgYnkgMl4xMCA9IDEwMjQgZWFjaCB0aW1lKQotICogICBQUkVUVFlfVU5JVFNfQklO
QVJZX0lFQyAtIEtpLCBNaSwgR2ksIGV0YwotICogICBQUkVUVFlfU0kgICAgICAgICAgIC0gZnVs
bCBTSSBtZXRyaWMgcHJlZml4ZXMgZnJvbSB5b2N0byB0byBZb3R0YQotICogICAgICAgICAgICAg
ICAgICAgICAgICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NZXRyaWNfcHJlZml4Ci0g
KiBAYXV0aG9yIE1hcmsgUmFia2luIDxtcmFia2luQGZiLmNvbT4KLSAqLwotZW51bSBQcmV0dHlU
eXBlIHsKLSAgUFJFVFRZX1RJTUUsCi0KLSAgUFJFVFRZX0JZVEVTX01FVFJJQywKLSAgUFJFVFRZ
X0JZVEVTX0JJTkFSWSwKLSAgUFJFVFRZX0JZVEVTID0gUFJFVFRZX0JZVEVTX0JJTkFSWSwKLSAg
UFJFVFRZX0JZVEVTX0JJTkFSWV9JRUMsCi0gIFBSRVRUWV9CWVRFU19JRUMgPSBQUkVUVFlfQllU
RVNfQklOQVJZX0lFQywKLQotICBQUkVUVFlfVU5JVFNfTUVUUklDLAotICBQUkVUVFlfVU5JVFNf
QklOQVJZLAotICBQUkVUVFlfVU5JVFNfQklOQVJZX0lFQywKLQotICBQUkVUVFlfU0ksCi0gIFBS
RVRUWV9OVU1fVFlQRVMsCi19OwotCi1zdGQ6OnN0cmluZyBwcmV0dHlQcmludChkb3VibGUgdmFs
LCBQcmV0dHlUeXBlLCBib29sIGFkZFNwYWNlID0gdHJ1ZSk7Ci0KLS8qKgotICogVGhpcyB1dGls
aXR5IGNvbnZlcnRzIFN0cmluZ1BpZWNlIGluIHByZXR0eSBmb3JtYXQgKGxvb2sgYWJvdmUpIHRv
IGRvdWJsZSwKLSAqIHdpdGggcHJvZ3Jlc3MgaW5mb3JtYXRpb24uIEFsdGVycyB0aGUgIFN0cmlu
Z1BpZWNlIHBhcmFtZXRlcgotICogdG8gZ2V0IHJpZCBvZiB0aGUgYWxyZWFkeS1wYXJzZWQgY2hh
cmFjdGVycy4KLSAqIEV4cGVjdHMgc3RyaW5nIGluIGZvcm0gPGZsb2F0aW5nIHBvaW50IG51bWJl
cj4ge3NwYWNlfSogWzxzdWZmaXg+XQotICogSWYgc3RyaW5nIGlzIG5vdCBpbiBjb3JyZWN0IGZv
cm1hdCwgdXRpbGl0eSBmaW5kcyBsb25nZXN0IHZhbGlkIHByZWZpeCBhbmQKLSAqIGlmIHRoZXJl
IGF0IGxlYXN0IG9uZSwgcmV0dXJucyBkb3VibGUgdmFsdWUgYmFzZWQgb24gdGhhdCBwcmVmaXgg
YW5kCi0gKiBtb2RpZmllcyBzdHJpbmcgdG8gd2hhdCBpcyBsZWZ0IGFmdGVyIHBhcnNpbmcuIFRo
cm93cyBhbmQgc3RkOjpyYW5nZV9lcnJvcgotICogZXhjZXB0aW9uIGlmIHRoZXJlIGlzIG5vIGNv
cnJlY3QgcGFyc2UuCi0gKiBFeGFtcGxlcyhmb3IgUFJFVFRZX1VOSVRTX01FVFJJQyk6Ci0gKiAn
MTBNJyA9PiAxMCAwMDAgMDAwCi0gKiAnMTAgTScgPT4gMTAgMDAwIDAwMAotICogJzEwJyA9PiAx
MAotICogJzEwIE14JyA9PiAxMCAwMDAgMDAwLCBwcmV0dHlTdHJpbmcgPT0gIngiCi0gKiAnYWJj
JyA9PiB0aHJvd3Mgc3RkOjpyYW5nZV9lcnJvcgotICovCi1kb3VibGUgcHJldHR5VG9Eb3VibGUo
Zm9sbHk6OlN0cmluZ1BpZWNlICpjb25zdCBwcmV0dHlTdHJpbmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUHJldHR5VHlwZSB0eXBlKTsKLQotLyoKLSAqIFNhbWUgYXMgcHJldHR5VG9E
b3VibGUoZm9sbHk6OlN0cmluZ1BpZWNlKiwgUHJldHR5VHlwZSksIGJ1dAotICogZXhwZWN0cyB3
aG9sZSBzdHJpbmcgdG8gYmUgY29ycmVjdGx5IHBhcnNlYWJsZS4gVGhyb3dzIHN0ZDo6cmFuZ2Vf
ZXJyb3IKLSAqIG90aGVyd2lzZQotICovCi1kb3VibGUgcHJldHR5VG9Eb3VibGUoZm9sbHk6OlN0
cmluZ1BpZWNlIHByZXR0eVN0cmluZywgY29uc3QgUHJldHR5VHlwZSB0eXBlKTsKLQotLyoqCi0g
KiBXcml0ZSBhIGhleCBkdW1wIG9mIHNpemUgYnl0ZXMgc3RhcnRpbmcgYXQgcHRyIHRvIG91dC4K
LSAqCi0gKiBUaGUgaGV4IGR1bXAgaXMgZm9ybWF0dGVkIGFzIGZvbGxvd3M6Ci0gKgotICogZm9y
IHRoZSBzdHJpbmcgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XHgwMiIKLTAwMDAwMDAwICA2
MSA2MiA2MyA2NCA2NSA2NiA2NyA2OCAgNjkgNmEgNmIgNmMgNmQgNmUgNmYgNzAgIHxhYmNkZWZn
aGlqa2xtbm9wfAotMDAwMDAwMTAgIDcxIDcyIDczIDc0IDc1IDc2IDc3IDc4ICA3OSA3YSAwMiAg
ICAgICAgICAgICAgICAgfHFyc3R1dnd4eXouICAgICB8Ci0gKgotICogdGhhdCBpcywgd2Ugd3Jp
dGUgMTYgYnl0ZXMgcGVyIGxpbmUsIGJvdGggYXMgaGV4IGJ5dGVzIGFuZCBhcyBwcmludGFibGUK
LSAqIGNoYXJhY3RlcnMuICBOb24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkIHdp
dGggJy4nCi0gKiBMaW5lcyBhcmUgd3JpdHRlbiB0byBvdXQgb25lIGJ5IG9uZSAob25lIFN0cmlu
Z1BpZWNlIGF0IGEgdGltZSkgd2l0aG91dAotICogZGVsaW1pdGVycy4KLSAqLwotdGVtcGxhdGUg
PGNsYXNzIE91dEl0Pgotdm9pZCBoZXhEdW1wKGNvbnN0IHZvaWQqIHB0ciwgc2l6ZV90IHNpemUs
IE91dEl0IG91dCk7Ci0KLS8qKgotICogUmV0dXJuIHRoZSBoZXggZHVtcCBvZiBzaXplIGJ5dGVz
IHN0YXJ0aW5nIGF0IHB0ciBhcyBhIHN0cmluZy4KLSAqLwotc3RkOjpzdHJpbmcgaGV4RHVtcChj
b25zdCB2b2lkKiBwdHIsIHNpemVfdCBzaXplKTsKLQotLyoqCi0gKiBSZXR1cm4gYSBmYnN0cmlu
ZyBjb250YWluaW5nIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZ2l2ZW4gZXJybm8gdmFsdWUuCi0g
KiBUYWtlcyBjYXJlIG5vdCB0byBvdmVyd3JpdGUgdGhlIGFjdHVhbCBzeXN0ZW0gZXJybm8sIHNv
IGNhbGxpbmcKLSAqIGVycm5vU3RyKGVycm5vKSBpcyB2YWxpZC4KLSAqLwotZmJzdHJpbmcgZXJy
bm9TdHIoaW50IGVycik7Ci0KLS8qCi0gKiBTcGxpdCBhIHN0cmluZyBpbnRvIGEgbGlzdCBvZiB0
b2tlbnMgYnkgZGVsaW1pdGVyLgotICoKLSAqIFRoZSBzcGxpdCBpbnRlcmZhY2UgaGVyZSBzdXBw
b3J0cyBkaWZmZXJlbnQgb3V0cHV0IHR5cGVzLCBzZWxlY3RlZAotICogYXQgY29tcGlsZSB0aW1l
OiBTdHJpbmdQaWVjZSwgZmJzdHJpbmcsIG9yIHN0ZDo6c3RyaW5nLiAgSWYgeW91IGFyZQotICog
dXNpbmcgYSB2ZWN0b3IgdG8gaG9sZCB0aGUgb3V0cHV0LCBpdCBkZXRlY3RzIHRoZSB0eXBlIGJh
c2VkIG9uCi0gKiB3aGF0IHlvdXIgdmVjdG9yIGNvbnRhaW5zLiAgSWYgdGhlIG91dHB1dCB2ZWN0
b3IgaXMgbm90IGVtcHR5LCBzcGxpdAotICogd2lsbCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUg
dmVjdG9yLgotICoKLSAqIFlvdSBjYW4gYWxzbyB1c2Ugc3BsaXRUbygpIHRvIHdyaXRlIHRoZSBv
dXRwdXQgdG8gYW4gYXJiaXRyYXJ5Ci0gKiBPdXRwdXRJdGVyYXRvciAoZS5nLiBzdGQ6Omluc2Vy
dGVyKCkgb24gYSBzdGQ6OnNldDw+KSwgaW4gd2hpY2gKLSAqIGNhc2UgeW91IGhhdmUgdG8gdGVs
bCB0aGUgZnVuY3Rpb24gdGhlIHR5cGUuICAoUmF0aW9uYWxlOgotICogT3V0cHV0SXRlcmF0b3Jz
IGRvbid0IGhhdmUgYSB2YWx1ZV90eXBlLCBzbyB3ZSBjYW4ndCBkZXRlY3QgdGhlCi0gKiB0eXBl
IGluIHNwbGl0VG8gd2l0aG91dCBiZWluZyB0b2xkLikKLSAqCi0gKiBFeGFtcGxlczoKLSAqCi0g
KiAgIHN0ZDo6dmVjdG9yPGZvbGx5OjpTdHJpbmdQaWVjZT4gdjsKLSAqICAgZm9sbHk6OnNwbGl0
KCI6IiwgImFzZDpic2QiLCB2KTsKLSAqCi0gKiAgIHN0ZDo6c2V0PFN0cmluZ1BpZWNlPiBzOwot
ICogICBmb2xseTo6c3BsaXRUbzxTdHJpbmdQaWVjZT4oIjoiLCAiYXNkOmJzZDphc2Q6Y3NkIiwK
LSAqICAgIHN0ZDo6aW5zZXJ0ZXIocywgcy5iZWdpbigpKSk7Ci0gKgotICogU3BsaXQgYWxzbyB0
YWtlcyBhIGZsYWcgKGlnbm9yZUVtcHR5KSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIGFkamFjZW50
Ci0gKiBkZWxpbWl0ZXJzIHNob3VsZCBiZSB0cmVhdGVkIGFzIG9uZSBzaW5nbGUgc2VwYXJhdG9y
IChpZ25vcmluZyBlbXB0eSB0b2tlbnMpCi0gKiBvciBub3QgKGdlbmVyYXRpbmcgZW1wdHkgdG9r
ZW5zKS4KLSAqLwotCi10ZW1wbGF0ZTxjbGFzcyBEZWxpbSwgY2xhc3MgU3RyaW5nLCBjbGFzcyBP
dXRwdXRUeXBlPgotdm9pZCBzcGxpdChjb25zdCBEZWxpbSYgZGVsaW1pdGVyLAotICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIGlucHV0LAotICAgICAgICAgICBzdGQ6OnZlY3RvcjxPdXRwdXRUeXBl
PiYgb3V0LAotICAgICAgICAgICBjb25zdCBib29sIGlnbm9yZUVtcHR5ID0gZmFsc2UpOwotCi10
ZW1wbGF0ZTxjbGFzcyBEZWxpbSwgY2xhc3MgU3RyaW5nLCBjbGFzcyBPdXRwdXRUeXBlPgotdm9p
ZCBzcGxpdChjb25zdCBEZWxpbSYgZGVsaW1pdGVyLAotICAgICAgICAgICBjb25zdCBTdHJpbmcm
IGlucHV0LAotICAgICAgICAgICBmb2xseTo6ZmJ2ZWN0b3I8T3V0cHV0VHlwZT4mIG91dCwKLSAg
ICAgICAgICAgY29uc3QgYm9vbCBpZ25vcmVFbXB0eSA9IGZhbHNlKTsKLQotdGVtcGxhdGU8Y2xh
c3MgT3V0cHV0VmFsdWVUeXBlLCBjbGFzcyBEZWxpbSwgY2xhc3MgU3RyaW5nLAotICAgICAgICAg
Y2xhc3MgT3V0cHV0SXRlcmF0b3I+Ci12b2lkIHNwbGl0VG8oY29uc3QgRGVsaW0mIGRlbGltaXRl
ciwKLSAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGlucHV0LAotICAgICAgICAgICAgIE91dHB1
dEl0ZXJhdG9yIG91dCwKLSAgICAgICAgICAgICBjb25zdCBib29sIGlnbm9yZUVtcHR5ID0gZmFs
c2UpOwotCi0vKgotICogU3BsaXQgYSBzdHJpbmcgaW50byBhIGZpeGVkIG51bWJlciBvZiBzdHJp
bmcgcGllY2VzIGFuZC9vciBudW1lcmljIHR5cGVzCi0gKiBieSBkZWxpbWl0ZXIuIENvbnZlcnNp
b25zIGFyZSBzdXBwb3J0ZWQgZm9yIGFueSB0eXBlIHdoaWNoIGZvbGx5OnRvPD4gY2FuCi0gKiB0
YXJnZXQsIGluY2x1ZGluZyBhbGwgb3ZlcmxvYWRzIG9mIHBhcnNlVG8oKS4gUmV0dXJucyAndHJ1
ZScgaWYgdGhlIGZpZWxkcwotICogd2VyZSBhbGwgc3VjY2Vzc2Z1bGx5IHBvcHVsYXRlZC4gIFJl
dHVybnMgJ2ZhbHNlJyBpZiB0aGVyZSB3ZXJlIHRvbyBmZXcKLSAqIGZpZWxkcyBpbiB0aGUgaW5w
dXQsIG9yIHRvbyBtYW55IGZpZWxkcyBpZiBleGFjdD10cnVlLiAgQ2FzdGluZyBleGNlcHRpb25z
Ci0gKiB3aWxsIG5vdCBiZSBjYXVnaHQuCi0gKgotICogRXhhbXBsZXM6Ci0gKgotICogIGZvbGx5
OjpTdHJpbmdQaWVjZSBuYW1lLCBrZXksIHZhbHVlOwotICogIGlmIChmb2xseTo6c3BsaXQoJ1x0
JywgbGluZSwgbmFtZSwga2V5LCB2YWx1ZSkpCi0gKiAgICAuLi4KLSAqCi0gKiAgZm9sbHk6OlN0
cmluZ1BpZWNlIG5hbWU7Ci0gKiAgZG91YmxlIHZhbHVlOwotICogIGludCBpZDsKLSAqICBpZiAo
Zm9sbHk6OnNwbGl0KCdcdCcsIGxpbmUsIG5hbWUsIHZhbHVlLCBpZCkpCi0gKiAgICAuLi4KLSAq
Ci0gKiBUaGUgJ2V4YWN0JyB0ZW1wbGF0ZSBwYXJhbWV0ZXIgc3BlY2lmaWVzIGhvdyB0aGUgZnVu
Y3Rpb24gYmVoYXZlcyB3aGVuIHRvbwotICogbWFueSBmaWVsZHMgYXJlIHByZXNlbnQgaW4gdGhl
IGlucHV0IHN0cmluZy4gV2hlbiAnZXhhY3QnIGlzIHNldCB0byBpdHMKLSAqIGRlZmF1bHQgdmFs
dWUgb2YgJ3RydWUnLCBhIGNhbGwgdG8gc3BsaXQgd2lsbCBmYWlsIGlmIHRoZSBudW1iZXIgb2Yg
ZmllbGRzIGluCi0gKiB0aGUgaW5wdXQgc3RyaW5nIGRvZXMgbm90IGV4YWN0bHkgbWF0Y2ggdGhl
IG51bWJlciBvZiBvdXRwdXQgcGFyYW1ldGVycwotICogcGFzc2VkLiBJZiAnZXhhY3QnIGlzIG92
ZXJyaWRkZW4gdG8gJ2ZhbHNlJywgYWxsIHJlbWFpbmluZyBmaWVsZHMgd2lsbCBiZQotICogc3Rv
cmVkLCB1bnNwbGl0LCBpbiB0aGUgbGFzdCBmaWVsZCwgYXMgc2hvd24gYmVsb3c6Ci0gKgotICog
IGZvbGx5OjpTdHJpbmdQaWVjZSB4LCB5LgotICogIGlmIChmb2xseTo6c3BsaXQ8ZmFsc2U+KCc6
JywgImE6YjpjIiwgeCwgeSkpCi0gKiAgICBhc3NlcnQoeCA9PSAiYSIgJiYgeSA9PSAiYjpjIik7
Ci0gKgotICogTm90ZSB0aGF0IHRoaXMgd2lsbCBsaWtlbHkgbm90IHdvcmsgaWYgdGhlIGxhc3Qg
ZmllbGQncyB0YXJnZXQgaXMgb2YgbnVtZXJpYwotICogdHlwZSwgaW4gd2hpY2ggY2FzZSBmb2xs
eTo6dG88PiB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIFQs
IGNsYXNzIEVuYWJsZSA9IHZvaWQ+Ci1zdHJ1Y3QgSXNTb21lVmVjdG9yIHsKLSAgZW51bSB7IHZh
bHVlID0gZmFsc2UgfTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IElzU29tZVZl
Y3RvcjxzdGQ6OnZlY3RvcjxUPiwgdm9pZD4gewotICBlbnVtIHsgdmFsdWUgPSB0cnVlIH07Ci19
OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBJc1NvbWVWZWN0b3I8ZmJ2ZWN0b3I8VD4s
IHZvaWQ+IHsKLSAgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OwotfTsKLQotdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIEVuYWJsZSA9IHZvaWQ+Ci1zdHJ1Y3QgSXNDb252ZXJ0aWJsZSB7Ci0gIGVudW0g
eyB2YWx1ZSA9IGZhbHNlIH07Ci19OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBJc0Nv
bnZlcnRpYmxlPAotICAgIFQsCi0gICAgZGVjbHR5cGUoc3RhdGljX2Nhc3Q8dm9pZD4oCi0gICAg
ICAgIHBhcnNlVG8oc3RkOjpkZWNsdmFsPGZvbGx5OjpTdHJpbmdQaWVjZT4oKSwgc3RkOjpkZWNs
dmFsPFQmPigpKSkpPiB7Ci0gIGVudW0geyB2YWx1ZSA9IHRydWUgfTsKLX07Ci0KLXRlbXBsYXRl
IDxjbGFzcy4uLiBUeXBlcz4KLXN0cnVjdCBBbGxDb252ZXJ0aWJsZTsKLQotdGVtcGxhdGUgPGNs
YXNzIEhlYWQsIGNsYXNzLi4uIFRhaWw+Ci1zdHJ1Y3QgQWxsQ29udmVydGlibGU8SGVhZCwgVGFp
bC4uLj4gewotICBlbnVtIHsgdmFsdWUgPSBJc0NvbnZlcnRpYmxlPEhlYWQ+Ojp2YWx1ZSAmJiBB
bGxDb252ZXJ0aWJsZTxUYWlsLi4uPjo6dmFsdWUgfTsKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1
Y3QgQWxsQ29udmVydGlibGU8PiB7Ci0gIGVudW0geyB2YWx1ZSA9IHRydWUgfTsKLX07Ci0KLXN0
YXRpY19hc3NlcnQoQWxsQ29udmVydGlibGU8ZmxvYXQ+Ojp2YWx1ZSwgIiIpOwotc3RhdGljX2Fz
c2VydChBbGxDb252ZXJ0aWJsZTxpbnQ+Ojp2YWx1ZSwgIiIpOwotc3RhdGljX2Fzc2VydChBbGxD
b252ZXJ0aWJsZTxib29sPjo6dmFsdWUsICIiKTsKLXN0YXRpY19hc3NlcnQoQWxsQ29udmVydGli
bGU8aW50Pjo6dmFsdWUsICIiKTsKLXN0YXRpY19hc3NlcnQoIUFsbENvbnZlcnRpYmxlPHN0ZDo6
dmVjdG9yPGludD4+Ojp2YWx1ZSwgIiIpOwotCi10ZW1wbGF0ZSA8Ym9vbCBleGFjdCA9IHRydWUs
IGNsYXNzIERlbGltLCBjbGFzcy4uLiBPdXRwdXRUeXBlcz4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPAotICAgIEFsbENvbnZlcnRpYmxlPE91dHB1dFR5cGVzLi4uPjo6dmFsdWUgJiYgc2l6ZW9m
Li4uKE91dHB1dFR5cGVzKSA+PSAxLAotICAgIGJvb2w+Ojp0eXBlCi1zcGxpdChjb25zdCBEZWxp
bSYgZGVsaW1pdGVyLCBTdHJpbmdQaWVjZSBpbnB1dCwgT3V0cHV0VHlwZXMmLi4uIG91dHB1dHMp
OwotCi0vKgotICogSm9pbiBsaXN0IG9mIHRva2Vucy4KLSAqCi0gKiBTdG9yZXMgYSBzdHJpbmcg
cmVwcmVzZW50YXRpb24gb2YgdG9rZW5zIGluIHRoZSBzYW1lIG9yZGVyIHdpdGgKLSAqIGRlbGlt
aW5lciBiZXR3ZWVuIGVhY2ggZWxlbWVudC4KLSAqLwotCi10ZW1wbGF0ZSA8Y2xhc3MgRGVsaW0s
IGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBTdHJpbmc+Ci12b2lkIGpvaW4oY29uc3QgRGVsaW0mIGRl
bGltaXRlciwKLSAgICAgICAgICBJdGVyYXRvciBiZWdpbiwKLSAgICAgICAgICBJdGVyYXRvciBl
bmQsCi0gICAgICAgICAgU3RyaW5nJiBvdXRwdXQpOwotCi10ZW1wbGF0ZSA8Y2xhc3MgRGVsaW0s
IGNsYXNzIENvbnRhaW5lciwgY2xhc3MgU3RyaW5nPgotdm9pZCBqb2luKGNvbnN0IERlbGltJiBk
ZWxpbWl0ZXIsCi0gICAgICAgICAgY29uc3QgQ29udGFpbmVyJiBjb250YWluZXIsCi0gICAgICAg
ICAgU3RyaW5nJiBvdXRwdXQpIHsKLSAgam9pbihkZWxpbWl0ZXIsIGNvbnRhaW5lci5iZWdpbigp
LCBjb250YWluZXIuZW5kKCksIG91dHB1dCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBEZWxpbSwg
Y2xhc3MgVmFsdWUsIGNsYXNzIFN0cmluZz4KLXZvaWQgam9pbihjb25zdCBEZWxpbSYgZGVsaW1p
dGVyLAotICAgICAgICAgIGNvbnN0IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxWYWx1ZT4mIHZhbHVl
cywKLSAgICAgICAgICBTdHJpbmcmIG91dHB1dCkgewotICBqb2luKGRlbGltaXRlciwgdmFsdWVz
LmJlZ2luKCksIHZhbHVlcy5lbmQoKSwgb3V0cHV0KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIERl
bGltLCBjbGFzcyBDb250YWluZXI+Ci1zdGQ6OnN0cmluZyBqb2luKGNvbnN0IERlbGltJiBkZWxp
bWl0ZXIsCi0gICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciYgY29udGFpbmVyKSB7Ci0g
IHN0ZDo6c3RyaW5nIG91dHB1dDsKLSAgam9pbihkZWxpbWl0ZXIsIGNvbnRhaW5lci5iZWdpbigp
LCBjb250YWluZXIuZW5kKCksIG91dHB1dCk7Ci0gIHJldHVybiBvdXRwdXQ7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBEZWxpbSwgY2xhc3MgVmFsdWU+Ci1zdGQ6OnN0cmluZyBqb2luKGNvbnN0IERl
bGltJiBkZWxpbWl0ZXIsCi0gICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxWYWx1ZT4mIHZhbHVlcykgewotICBzdGQ6OnN0cmluZyBvdXRwdXQ7Ci0gIGpvaW4oZGVs
aW1pdGVyLCB2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLmVuZCgpLCBvdXRwdXQpOwotICByZXR1cm4g
b3V0cHV0OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgRGVsaW0sCi0gICAgICAgICAgY2xhc3MgSXRl
cmF0b3IsCi0gICAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPAot
ICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46Oml0
ZXJhdG9yX2NhdGVnb3J5LAotICAgICAgICAgICAgICBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnPjo6dmFsdWU+Ojp0eXBlKiA9IG51bGxwdHI+Ci1zdGQ6OnN0cmluZyBqb2luKGNvbnN0
IERlbGltJiBkZWxpbWl0ZXIsIEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRvciBlbmQpIHsKLSAgc3Rk
OjpzdHJpbmcgb3V0cHV0OwotICBqb2luKGRlbGltaXRlciwgYmVnaW4sIGVuZCwgb3V0cHV0KTsK
LSAgcmV0dXJuIG91dHB1dDsKLX0KLQotLyoqCi0gKiBSZXR1cm5zIGEgc3VicGllY2Ugd2l0aCBh
bGwgd2hpdGVzcGFjZSByZW1vdmVkIGZyb20gdGhlIGZyb250IG9mIEBzcC4KLSAqIFdoaXRlc3Bh
Y2UgbWVhbnMgYW55IG9mIFsnICcsICdcbicsICdccicsICdcdCddLgotICovCi1TdHJpbmdQaWVj
ZSBsdHJpbVdoaXRlc3BhY2UoU3RyaW5nUGllY2Ugc3ApOwotCi0vKioKLSAqIFJldHVybnMgYSBz
dWJwaWVjZSB3aXRoIGFsbCB3aGl0ZXNwYWNlIHJlbW92ZWQgZnJvbSB0aGUgYmFjayBvZiBAc3Au
Ci0gKiBXaGl0ZXNwYWNlIG1lYW5zIGFueSBvZiBbJyAnLCAnXG4nLCAnXHInLCAnXHQnXS4KLSAq
LwotU3RyaW5nUGllY2UgcnRyaW1XaGl0ZXNwYWNlKFN0cmluZ1BpZWNlIHNwKTsKLQotLyoqCi0g
KiBSZXR1cm5zIGEgc3VicGllY2Ugd2l0aCBhbGwgd2hpdGVzcGFjZSByZW1vdmVkIGZyb20gdGhl
IGJhY2sgYW5kIGZyb250IG9mIEBzcC4KLSAqIFdoaXRlc3BhY2UgbWVhbnMgYW55IG9mIFsnICcs
ICdcbicsICdccicsICdcdCddLgotICovCi1pbmxpbmUgU3RyaW5nUGllY2UgdHJpbVdoaXRlc3Bh
Y2UoU3RyaW5nUGllY2Ugc3ApIHsKLSAgcmV0dXJuIGx0cmltV2hpdGVzcGFjZShydHJpbVdoaXRl
c3BhY2Uoc3ApKTsKLX0KLQotLyoqCi0gKiBSZXR1cm5zIGEgc3VicGllY2Ugd2l0aCBhbGwgd2hp
dGVzcGFjZSByZW1vdmVkIGZyb20gdGhlIGZyb250IG9mIEBzcC4KLSAqIFdoaXRlc3BhY2UgbWVh
bnMgYW55IG9mIFsnICcsICdcbicsICdccicsICdcdCddLgotICogREVQUkVDQVRFRDogQHNlZSBs
dHJpbVdoaXRlc3BhY2UgQHNlZSBydHJpbVdoaXRlc3BhY2UKLSAqLwotaW5saW5lIFN0cmluZ1Bp
ZWNlIHNraXBXaGl0ZXNwYWNlKFN0cmluZ1BpZWNlIHNwKSB7Ci0gIHJldHVybiBsdHJpbVdoaXRl
c3BhY2Uoc3ApOwotfQotCi0vKioKLSAqICBTdHJpcHMgdGhlIGxlYWRpbmcgYW5kIHRoZSB0cmFp
bGluZyB3aGl0ZXNwYWNlLW9ubHkgbGluZXMuIFRoZW4gbG9va3MgZm9yCi0gKiAgdGhlIGxlYXN0
IGluZGVudGVkIG5vbi13aGl0ZXNwYWNlLW9ubHkgbGluZSBhbmQgcmVtb3ZlcyBpdHMgYW1vdW50
IG9mCi0gKiAgbGVhZGluZyB3aGl0ZXNwYWNlIGZyb20gZXZlcnkgbGluZS4gQXNzdW1lcyBsZWFk
aW5nIHdoaXRlc3BhY2UgaXMgZWl0aGVyIGFsbAotICogIHNwYWNlcyBvciBhbGwgdGFicy4KLSAq
Ci0gKiAgUHVycG9zZTogaW5jbHVkaW5nIGEgbXVsdGlsaW5lIHN0cmluZyBsaXRlcmFsIGluIHNv
dXJjZSBjb2RlLCBpbmRlbnRlZCB0bwotICogIHRoZSBsZXZlbCBleHBlY3RlZCBmcm9tIGNvbnRl
eHQuCi0gKi8KLXN0ZDo6c3RyaW5nIHN0cmlwTGVmdE1hcmdpbihzdGQ6OnN0cmluZyBzKTsKLQot
LyoqCi0gKiBGYXN0LCBpbi1wbGFjZSBsb3dlcmNhc2luZyBvZiBBU0NJSSBhbHBoYWJldGljIGNo
YXJhY3RlcnMgaW4gc3RyaW5ncy4KLSAqIExlYXZlcyBhbGwgb3RoZXIgY2hhcmFjdGVycyB1bmNo
YW5nZWQsIGluY2x1ZGluZyB0aG9zZSB3aXRoIHRoZSAweDgwCi0gKiBiaXQgc2V0LgotICogQHBh
cmFtIHN0ciBTdHJpbmcgdG8gY29udmVydAotICogQHBhcmFtIGxlbiBMZW5ndGggb2Ygc3RyLCBp
biBieXRlcwotICovCi12b2lkIHRvTG93ZXJBc2NpaShjaGFyKiBzdHIsIHNpemVfdCBsZW5ndGgp
OwotCi1pbmxpbmUgdm9pZCB0b0xvd2VyQXNjaWkoTXV0YWJsZVN0cmluZ1BpZWNlIHN0cikgewot
ICB0b0xvd2VyQXNjaWkoc3RyLmJlZ2luKCksIHN0ci5zaXplKCkpOwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgSXRlcmF0b3IgPSBjb25zdCBjaGFyKiwKLSAgICAgICAgICBjbGFzcyBCYXNlID0gZm9s
bHk6OlJhbmdlPGJvb3N0Ojp1OF90b191MzJfaXRlcmF0b3I8SXRlcmF0b3I+Pj4KLWNsYXNzIFVU
RjhSYW5nZSA6IHB1YmxpYyBCYXNlIHsKLSBwdWJsaWM6Ci0gIC8qIGltcGxpY2l0ICovIFVURjhS
YW5nZShjb25zdCBmb2xseTo6UmFuZ2U8SXRlcmF0b3I+IGJhc2VSYW5nZSkKLSAgICAgIDogQmFz
ZShib29zdDo6dThfdG9fdTMyX2l0ZXJhdG9yPEl0ZXJhdG9yPigKLSAgICAgICAgICAgICAgICAg
YmFzZVJhbmdlLmJlZ2luKCksIGJhc2VSYW5nZS5iZWdpbigpLCBiYXNlUmFuZ2UuZW5kKCkpLAot
ICAgICAgICAgICAgIGJvb3N0Ojp1OF90b191MzJfaXRlcmF0b3I8SXRlcmF0b3I+KAotICAgICAg
ICAgICAgICAgICBiYXNlUmFuZ2UuZW5kKCksIGJhc2VSYW5nZS5iZWdpbigpLCBiYXNlUmFuZ2Uu
ZW5kKCkpKSB7fQotICAvKiBpbXBsaWNpdCAqLyBVVEY4UmFuZ2UoY29uc3Qgc3RkOjpzdHJpbmcm
IGJhc2VTdHJpbmcpCi0gICAgICA6IEJhc2UoZm9sbHk6OlJhbmdlPEl0ZXJhdG9yPihiYXNlU3Ry
aW5nKSkge30KLX07Ci0KLXVzaW5nIFVURjhTdHJpbmdQaWVjZSA9IFVURjhSYW5nZTxjb25zdCBj
aGFyKj47Ci0KLX0gLy8gbmFtZXNwYWNlIGZvbGx5Ci0KLSNpbmNsdWRlIDxmb2xseS9TdHJpbmct
aW5sLmg+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9m
b2xseS9TeW5jaHJvbml6ZWQuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2ZvbGx5L1N5bmNocm9uaXplZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDU0
YWEwNmRiMDMwNjY5MmExN2ExZWMwY2JkM2UzOWU1N2Q4MDc2Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2ZvbGx5L1N5bmNocm9uaXplZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM5MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
LSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAot
ICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgot
ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0
aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRo
ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
IGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBU
aGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgU3luY2hyb25pemVkIGFic3RyYWN0aW9uIHVzZWZ1bCBp
bgotICogbXV0ZXgtYmFzZWQgY29uY3VycmVuY3kuCi0gKgotICogVGhlIFN5bmNocm9uaXplZDxU
LCBNdXRleD4gY2xhc3MgaXMgdGhlIHByaW1hcnkgcHVibGljIEFQSSBleHBvc2VkIGJ5IHRoaXMK
LSAqIG1vZHVsZS4gIFNlZSBmb2xseS9kb2NzL1N5bmNocm9uaXplZC5tZCBmb3IgYSBtb3JlIGNv
bXBsZXRlIGV4cGxhbmF0aW9uIG9mCi0gKiB0aGlzIGNsYXNzIGFuZCBpdHMgYmVuZWZpdHMuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxmb2xseS9MaWtlbHkuaD4KLSNpbmNsdWRl
IDxmb2xseS9Mb2NrVHJhaXRzLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvUHJlcHJvY2Vzc29yLmg+Ci0j
aW5jbHVkZSA8Zm9sbHkvU2hhcmVkTXV0ZXguaD4KLSNpbmNsdWRlIDxmb2xseS9UcmFpdHMuaD4K
LSNpbmNsdWRlIDxnbG9nL2xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxtdXRleD4KLSNpbmNsdWRlIDx0
eXBlX3RyYWl0cz4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotdGVtcGxhdGUgPGNsYXNzIExvY2tl
ZFR5cGUsIGNsYXNzIE11dGV4LCBjbGFzcyBMb2NrUG9saWN5PgotY2xhc3MgTG9ja2VkUHRyQmFz
ZTsKLXRlbXBsYXRlIDxjbGFzcyBMb2NrZWRUeXBlLCBjbGFzcyBMb2NrUG9saWN5PgotY2xhc3Mg
TG9ja2VkUHRyOwotdGVtcGxhdGUgPGNsYXNzIExvY2tlZFR5cGUsIGNsYXNzIExvY2tQb2xpY3kg
PSBMb2NrUG9saWN5RXhjbHVzaXZlPgotY2xhc3MgTG9ja2VkR3VhcmRQdHI7Ci0KLS8qKgotICog
UHVibGljIHZlcnNpb24gb2YgTG9ja0ludGVyZmFjZURpc3BhdGNoZXIgdGhhdCBjb250YWlucyB0
aGUgTXV0ZXhMZXZlbCBlbnVtCi0gKiBmb3IgdGhlIHBhc3NlZCBpbiBtdXRleCB0eXBlCi0gKgot
ICogVGhpcyBpcyBkZWNvdXBsZWQgZnJvbSBNdXRleExldmVsVmFsdWVJbXBsIGluIExvY2tUcmFp
dHMuaCBiZWNhdXNlIHRoaXMKLSAqIGVuc3VyZXMgdGhhdCBhIGhldGVyb2dlbm91cyBtdXRleCB3
aXRoIGEgZGlmZmVyZW50IEFQSSBjYW4gYmUgdXNlZC4gIEZvcgotICogZXhhbXBsZSAtIGlmIGEg
bXV0ZXggZG9lcyBub3QgaGF2ZSBhIGxvY2tfc2hhcmVkKCkgbWV0aG9kIGJ1dCB0aGUKLSAqIExv
Y2tUcmFpdHMgc3BlY2lhbGl6YXRpb24gZm9yIGl0IHN1cHBvcnRzIGEgc3RhdGljIG5vbiBtZW1i
ZXIKLSAqIGxvY2tfc2hhcmVkKE11dGV4JikgaXQgY2FuIGJlIHVzZWQgYXMgYSBzaGFyZWQgbXV0
ZXggYW5kIHdpbGwgcHJvdmlkZQotICogcmxvY2soKSBhbmQgd2xvY2soKSBmdW5jdGlvbnMuCi0g
Ki8KLXRlbXBsYXRlIDxjbGFzcyBNdXRleD4KLXVzaW5nIE11dGV4TGV2ZWxWYWx1ZSA9IGRldGFp
bDo6TXV0ZXhMZXZlbFZhbHVlSW1wbDwKLSAgICB0cnVlLAotICAgIExvY2tUcmFpdHM8TXV0ZXg+
Ojppc19zaGFyZWQsCi0gICAgTG9ja1RyYWl0czxNdXRleD46OmlzX3VwZ3JhZGU+OwotCi0vKioK
LSAqIFN5bmNocm9uaXplZEJhc2UgaXMgYSBoZWxwZXIgcGFyZW50IGNsYXNzIGZvciBTeW5jaHJv
bml6ZWQ8VD4uCi0gKgotICogSXQgcHJvdmlkZXMgd2xvY2soKSBhbmQgcmxvY2soKSBtZXRob2Rz
IGZvciBzaGFyZWQgbXV0ZXggdHlwZXMsCi0gKiBvciBsb2NrKCkgbWV0aG9kcyBmb3IgcHVyZWx5
IGV4Y2x1c2l2ZSBtdXRleCB0eXBlcy4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIFN1YmNsYXNzLCBk
ZXRhaWw6Ok11dGV4TGV2ZWwgbGV2ZWw+Ci1jbGFzcyBTeW5jaHJvbml6ZWRCYXNlOwotCi0vKioK
LSAqIFN5bmNocm9uaXplZEJhc2Ugc3BlY2lhbGl6YXRpb24gZm9yIHNoYXJlZCBtdXRleCB0eXBl
cy4KLSAqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIHdsb2NrKCkgYW5kIHJsb2NrKCkgbWV0aG9k
cyBmb3IgYWNxdWlyaW5nIHRoZSBsb2NrIGFuZAotICogYWNjZXNzaW5nIHRoZSBkYXRhLgotICov
Ci10ZW1wbGF0ZSA8Y2xhc3MgU3ViY2xhc3M+Ci1jbGFzcyBTeW5jaHJvbml6ZWRCYXNlPFN1YmNs
YXNzLCBkZXRhaWw6Ok11dGV4TGV2ZWw6OlNIQVJFRD4gewotIHB1YmxpYzoKLSAgdXNpbmcgTG9j
a2VkUHRyID0gOjpmb2xseTo6TG9ja2VkUHRyPFN1YmNsYXNzLCBMb2NrUG9saWN5RXhjbHVzaXZl
PjsKLSAgdXNpbmcgQ29uc3RXTG9ja2VkUHRyID0KLSAgICAgIDo6Zm9sbHk6OkxvY2tlZFB0cjxj
b25zdCBTdWJjbGFzcywgTG9ja1BvbGljeUV4Y2x1c2l2ZT47Ci0gIHVzaW5nIENvbnN0TG9ja2Vk
UHRyID0gOjpmb2xseTo6TG9ja2VkUHRyPGNvbnN0IFN1YmNsYXNzLCBMb2NrUG9saWN5U2hhcmVk
PjsKLQotICAvKioKLSAgICogQWNxdWlyZSBhbiBleGNsdXNpdmUgbG9jaywgYW5kIHJldHVybiBh
IExvY2tlZFB0ciB0aGF0IGNhbiBiZSB1c2VkIHRvCi0gICAqIHNhZmVseSBhY2Nlc3MgdGhlIGRh
dHVtLgotICAgKgotICAgKiBMb2NrZWRQdHIgb2ZmZXJzIG9wZXJhdG9yIC0+IGFuZCAqIHRvIHBy
b3ZpZGUgYWNjZXNzIHRvIHRoZSBkYXR1bS4KLSAgICogVGhlIGxvY2sgd2lsbCBiZSByZWxlYXNl
ZCB3aGVuIHRoZSBMb2NrZWRQdHIgaXMgZGVzdHJveWVkLgotICAgKi8KLSAgTG9ja2VkUHRyIHds
b2NrKCkgewotICAgIHJldHVybiBMb2NrZWRQdHIoc3RhdGljX2Nhc3Q8U3ViY2xhc3MqPih0aGlz
KSk7Ci0gIH0KLSAgQ29uc3RXTG9ja2VkUHRyIHdsb2NrKCkgY29uc3QgewotICAgIHJldHVybiBD
b25zdFdMb2NrZWRQdHIoc3RhdGljX2Nhc3Q8Y29uc3QgU3ViY2xhc3MqPih0aGlzKSk7Ci0gIH0K
LQotICAvKioKLSAgICogQWNxdWlyZSBhIHJlYWQgbG9jaywgYW5kIHJldHVybiBhIENvbnN0TG9j
a2VkUHRyIHRoYXQgY2FuIGJlIHVzZWQgdG8KLSAgICogc2FmZWx5IGFjY2VzcyB0aGUgZGF0dW0u
Ci0gICAqLwotICBDb25zdExvY2tlZFB0ciBybG9jaygpIGNvbnN0IHsKLSAgICByZXR1cm4gQ29u
c3RMb2NrZWRQdHIoc3RhdGljX2Nhc3Q8Y29uc3QgU3ViY2xhc3MqPih0aGlzKSk7Ci0gIH0KLQot
ICAvKioKLSAgICogQXR0ZW1wdHMgdG8gYWNxdWlyZSB0aGUgbG9jaywgb3IgZmFpbHMgaWYgdGhl
IHRpbWVvdXQgZWxhcHNlcyBmaXJzdC4KLSAgICogSWYgYWNxdWlzaXRpb24gaXMgdW5zdWNjZXNz
ZnVsLCB0aGUgcmV0dXJuZWQgTG9ja2VkUHRyIHdpbGwgYmUgbnVsbC4KLSAgICoKLSAgICogKFVz
ZSBMb2NrZWRQdHI6OmlzTnVsbCgpIHRvIGNoZWNrIGZvciB2YWxpZGl0eS4pCi0gICAqLwotICB0
ZW1wbGF0ZSA8Y2xhc3MgUmVwLCBjbGFzcyBQZXJpb2Q+Ci0gIExvY2tlZFB0ciB3bG9jayhjb25z
dCBzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+JiB0aW1lb3V0KSB7Ci0gICAgcmV0
dXJuIExvY2tlZFB0cihzdGF0aWNfY2FzdDxTdWJjbGFzcyo+KHRoaXMpLCB0aW1lb3V0KTsKLSAg
fQotICB0ZW1wbGF0ZSA8Y2xhc3MgUmVwLCBjbGFzcyBQZXJpb2Q+Ci0gIENvbnN0V0xvY2tlZFB0
ciB3bG9jaygKLSAgICAgIGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4m
IHRpbWVvdXQpIGNvbnN0IHsKLSAgICByZXR1cm4gQ29uc3RXTG9ja2VkUHRyKHN0YXRpY19jYXN0
PGNvbnN0IFN1YmNsYXNzKj4odGhpcyksIHRpbWVvdXQpOwotICB9Ci0KLSAgLyoqCi0gICAqIEF0
dGVtcHRzIHRvIGFjcXVpcmUgdGhlIGxvY2ssIG9yIGZhaWxzIGlmIHRoZSB0aW1lb3V0IGVsYXBz
ZXMgZmlyc3QuCi0gICAqIElmIGFjcXVpc2l0aW9uIGlzIHVuc3VjY2Vzc2Z1bCwgdGhlIHJldHVy
bmVkIExvY2tlZFB0ciB3aWxsIGJlIG51bGwuCi0gICAqCi0gICAqIChVc2UgTG9ja2VkUHRyOjpp
c051bGwoKSB0byBjaGVjayBmb3IgdmFsaWRpdHkuKQotICAgKi8KLSAgdGVtcGxhdGUgPGNsYXNz
IFJlcCwgY2xhc3MgUGVyaW9kPgotICBDb25zdExvY2tlZFB0ciBybG9jaygKLSAgICAgIGNvbnN0
IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIHRpbWVvdXQpIGNvbnN0IHsKLSAg
ICByZXR1cm4gQ29uc3RMb2NrZWRQdHIoc3RhdGljX2Nhc3Q8Y29uc3QgU3ViY2xhc3MqPih0aGlz
KSwgdGltZW91dCk7Ci0gIH0KLQotICAvKgotICAgKiBOb3RlOiBDKysgMTcgYWRkcyBndWFyYW50
ZWVkIGNvcHkgZWxpc2lvbi4gIChodHRwOi8vd2cyMS5saW5rL1AwMTM1KQotICAgKiBPbmNlIGNv
bXBpbGVycyBzdXBwb3J0IHRoaXMsIGl0IHdvdWxkIGJlIG5pY2UgdG8gYWRkIHdndWFyZCgpIGFu
ZCByZ3VhcmQoKQotICAgKiBtZXRob2RzIHRoYXQgcmV0dXJuIExvY2tlZEd1YXJkUHRyIG9iamVj
dHMuCi0gICAqLwotCi0gIC8qKgotICAgKiBJbnZva2UgYSBmdW5jdGlvbiB3aGlsZSBob2xkaW5n
IHRoZSBsb2NrIGV4Y2x1c2l2ZWx5LgotICAgKgotICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgZGF0
dW0gd2lsbCBiZSBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24gYXMgaXRzIG9ubHkKLSAgICogYXJn
dW1lbnQuCi0gICAqCi0gICAqIFRoaXMgY2FuIGJlIHVzZWQgd2l0aCBhIGxhbWJkYSBhcmd1bWVu
dCBmb3IgZWFzaWx5IGRlZmluaW5nIHNtYWxsIGNyaXRpY2FsCi0gICAqIHNlY3Rpb25zIGluIHRo
ZSBjb2RlLiAgRm9yIGV4YW1wbGU6Ci0gICAqCi0gICAqICAgYXV0byB2YWx1ZSA9IG9iai53aXRo
V0xvY2soW10oYXV0byYgZGF0YSkgewotICAgKiAgICAgZGF0YS5kb1N0dWZmKCk7Ci0gICAqICAg
ICByZXR1cm4gZGF0YS5nZXRWYWx1ZSgpOwotICAgKiAgIH0pOwotICAgKi8KLSAgdGVtcGxhdGUg
PGNsYXNzIEZ1bmN0aW9uPgotICBhdXRvIHdpdGhXTG9jayhGdW5jdGlvbiYmIGZ1bmN0aW9uKSB7
Ci0gICAgTG9ja2VkR3VhcmRQdHI8U3ViY2xhc3MsIExvY2tQb2xpY3lFeGNsdXNpdmU+IGd1YXJk
UHRyKAotICAgICAgICBzdGF0aWNfY2FzdDxTdWJjbGFzcyo+KHRoaXMpKTsKLSAgICByZXR1cm4g
ZnVuY3Rpb24oKmd1YXJkUHRyKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgRnVuY3Rpb24+Ci0g
IGF1dG8gd2l0aFdMb2NrKEZ1bmN0aW9uJiYgZnVuY3Rpb24pIGNvbnN0IHsKLSAgICBMb2NrZWRH
dWFyZFB0cjxjb25zdCBTdWJjbGFzcywgTG9ja1BvbGljeUV4Y2x1c2l2ZT4gZ3VhcmRQdHIoCi0g
ICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFN1YmNsYXNzKj4odGhpcykpOwotICAgIHJldHVybiBm
dW5jdGlvbigqZ3VhcmRQdHIpOwotICB9Ci0KLSAgLyoqCi0gICAqIEludm9rZSBhIGZ1bmN0aW9u
IHdoaWxlIGhvbGRpbmcgdGhlIGxvY2sgZXhjbHVzaXZlbHkuCi0gICAqCi0gICAqIFRoaXMgaXMg
c2ltaWxhciB0byB3aXRoV0xvY2soKSwgYnV0IHRoZSBmdW5jdGlvbiB3aWxsIGJlIHBhc3NlZCBh
Ci0gICAqIExvY2tlZFB0ciByYXRoZXIgdGhhbiBhIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBpdHNl
bGYuCi0gICAqCi0gICAqIFRoaXMgYWxsb3dzIHNjb3BlZFVubG9jaygpIHRvIGJlIGNhbGxlZCBv
biB0aGUgTG9ja2VkUHRyIGFyZ3VtZW50IGlmCi0gICAqIGRlc2lyZWQuCi0gICAqLwotICB0ZW1w
bGF0ZSA8Y2xhc3MgRnVuY3Rpb24+Ci0gIGF1dG8gd2l0aFdMb2NrUHRyKEZ1bmN0aW9uJiYgZnVu
Y3Rpb24pIHsKLSAgICByZXR1cm4gZnVuY3Rpb24od2xvY2soKSk7Ci0gIH0KLSAgdGVtcGxhdGUg
PGNsYXNzIEZ1bmN0aW9uPgotICBhdXRvIHdpdGhXTG9ja1B0cihGdW5jdGlvbiYmIGZ1bmN0aW9u
KSBjb25zdCB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKHdsb2NrKCkpOwotICB9Ci0KLSAgLyoqCi0g
ICAqIEludm9rZSBhIGZ1bmN0aW9uIHdoaWxlIGhvbGRpbmcgYW4gdGhlIGxvY2sgaW4gc2hhcmVk
IG1vZGUuCi0gICAqCi0gICAqIEEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBkYXR1bSB3aWxsIGJl
IHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvbiBhcyBpdHMKLSAgICogb25seSBhcmd1bWVudC4KLSAg
ICovCi0gIHRlbXBsYXRlIDxjbGFzcyBGdW5jdGlvbj4KLSAgYXV0byB3aXRoUkxvY2soRnVuY3Rp
b24mJiBmdW5jdGlvbikgY29uc3QgewotICAgIExvY2tlZEd1YXJkUHRyPGNvbnN0IFN1YmNsYXNz
LCBMb2NrUG9saWN5U2hhcmVkPiBndWFyZFB0cigKLSAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3Qg
U3ViY2xhc3MqPih0aGlzKSk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCpndWFyZFB0cik7Ci0gIH0K
LQotICB0ZW1wbGF0ZSA8Y2xhc3MgRnVuY3Rpb24+Ci0gIGF1dG8gd2l0aFJMb2NrUHRyKEZ1bmN0
aW9uJiYgZnVuY3Rpb24pIGNvbnN0IHsKLSAgICByZXR1cm4gZnVuY3Rpb24ocmxvY2soKSk7Ci0g
IH0KLX07Ci0KLS8qKgotICogU3luY2hyb25pemVkQmFzZSBzcGVjaWFsaXphdGlvbiBmb3IgdXBn
cmFkZSBtdXRleCB0eXBlcy4KLSAqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCB0aGUgZnVu
Y3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGUgU3luY2hyb25pemVkQmFzZQotICogc3BlY2lhbGl6
YXRpb24gZm9yIHNoYXJlZCBtdXRleGVzIGFuZCBhIHVsb2NrKCkgbWV0aG9kIHRoYXQgcmV0dXJu
cyBhbgotICogdXBncmFkYWJsZSBsb2NrIFJBSUkgcHJveHkKLSAqLwotdGVtcGxhdGUgPGNsYXNz
IFN1YmNsYXNzPgotY2xhc3MgU3luY2hyb25pemVkQmFzZTxTdWJjbGFzcywgZGV0YWlsOjpNdXRl
eExldmVsOjpVUEdSQURFPgotICAgIDogcHVibGljIFN5bmNocm9uaXplZEJhc2U8U3ViY2xhc3Ms
IGRldGFpbDo6TXV0ZXhMZXZlbDo6U0hBUkVEPiB7Ci0gcHVibGljOgotICB1c2luZyBVcGdyYWRl
TG9ja2VkUHRyID0gOjpmb2xseTo6TG9ja2VkUHRyPFN1YmNsYXNzLCBMb2NrUG9saWN5VXBncmFk
ZT47Ci0gIHVzaW5nIENvbnN0VXBncmFkZUxvY2tlZFB0ciA9Ci0gICAgICA6OmZvbGx5OjpMb2Nr
ZWRQdHI8Y29uc3QgU3ViY2xhc3MsIExvY2tQb2xpY3lVcGdyYWRlPjsKLSAgdXNpbmcgVXBncmFk
ZUxvY2tlZEd1YXJkUHRyID0KLSAgICAgIDo6Zm9sbHk6OkxvY2tlZEd1YXJkUHRyPFN1YmNsYXNz
LCBMb2NrUG9saWN5VXBncmFkZT47Ci0gIHVzaW5nIENvbnN0VXBncmFkZUxvY2tlZEd1YXJkUHRy
ID0KLSAgICAgIDo6Zm9sbHk6OkxvY2tlZEd1YXJkUHRyPGNvbnN0IFN1YmNsYXNzLCBMb2NrUG9s
aWN5VXBncmFkZT47Ci0KLSAgLyoqCi0gICAqIEFjcXVpcmUgYW4gdXBncmFkZSBsb2NrIGFuZCBy
ZXR1cm4gYSBMb2NrZWRQdHIgdGhhdCBjYW4gYmUgdXNlZCB0byBzYWZlbHkKLSAgICogYWNjZXNz
IHRoZSBkYXR1bQotICAgKgotICAgKiBBbmQgdGhlIGNvbnN0IHZlcnNpb24KLSAgICovCi0gIFVw
Z3JhZGVMb2NrZWRQdHIgdWxvY2soKSB7Ci0gICAgcmV0dXJuIFVwZ3JhZGVMb2NrZWRQdHIoc3Rh
dGljX2Nhc3Q8U3ViY2xhc3MqPih0aGlzKSk7Ci0gIH0KLSAgQ29uc3RVcGdyYWRlTG9ja2VkUHRy
IHVsb2NrKCkgY29uc3QgewotICAgIHJldHVybiBDb25zdFVwZ3JhZGVMb2NrZWRQdHIoc3RhdGlj
X2Nhc3Q8Y29uc3QgU3ViY2xhc3MqPih0aGlzKSk7Ci0gIH0KLQotICAvKioKLSAgICogQWNxdWly
ZSBhbiB1cGdyYWRlIGxvY2sgYW5kIHJldHVybiBhIExvY2tlZFB0ciB0aGF0IGNhbiBiZSB1c2Vk
IHRvIHNhZmVseQotICAgKiBhY2Nlc3MgdGhlIGRhdHVtCi0gICAqCi0gICAqIEFuZCB0aGUgY29u
c3QgdmVyc2lvbgotICAgKi8KLSAgdGVtcGxhdGUgPGNsYXNzIFJlcCwgY2xhc3MgUGVyaW9kPgot
ICBVcGdyYWRlTG9ja2VkUHRyIHVsb2NrKGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAs
IFBlcmlvZD4mIHRpbWVvdXQpIHsKLSAgICByZXR1cm4gVXBncmFkZUxvY2tlZFB0cihzdGF0aWNf
Y2FzdDxTdWJjbGFzcyo+KHRoaXMpLCB0aW1lb3V0KTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3Mg
UmVwLCBjbGFzcyBQZXJpb2Q+Ci0gIFVwZ3JhZGVMb2NrZWRQdHIgdWxvY2soCi0gICAgICBjb25z
dCBzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+JiB0aW1lb3V0KSBjb25zdCB7Ci0g
ICAgcmV0dXJuIENvbnN0VXBncmFkZUxvY2tlZFB0cihzdGF0aWNfY2FzdDxjb25zdCBTdWJjbGFz
cyo+KHRoaXMpLCB0aW1lb3V0KTsKLSAgfQotCi0gIC8qKgotICAgKiBJbnZva2UgYSBmdW5jdGlv
biB3aGlsZSBob2xkaW5nIHRoZSBsb2NrLgotICAgKgotICAgKiBBIHJlZmVyZW5jZSB0byB0aGUg
ZGF0dW0gd2lsbCBiZSBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24gYXMgaXRzIG9ubHkKLSAgICog
YXJndW1lbnQuCi0gICAqCi0gICAqIFRoaXMgY2FuIGJlIHVzZWQgd2l0aCBhIGxhbWJkYSBhcmd1
bWVudCBmb3IgZWFzaWx5IGRlZmluaW5nIHNtYWxsIGNyaXRpY2FsCi0gICAqIHNlY3Rpb25zIGlu
IHRoZSBjb2RlLiAgRm9yIGV4YW1wbGU6Ci0gICAqCi0gICAqICAgYXV0byB2YWx1ZSA9IG9iai53
aXRoVUxvY2soW10oYXV0byYgZGF0YSkgewotICAgKiAgICAgZGF0YS5kb1N0dWZmKCk7Ci0gICAq
ICAgICByZXR1cm4gZGF0YS5nZXRWYWx1ZSgpOwotICAgKiAgIH0pOwotICAgKgotICAgKiBUaGlz
IGlzIHByb2JhYmx5IG5vdCB0aGUgZnVuY3Rpb24geW91IHdhbnQuICBJZiB0aGUgaW50ZW50IGlz
IHRvIHJlYWQgdGhlCi0gICAqIGRhdGEgb2JqZWN0IGFuZCBkZXRlcm1pbmUgd2hldGhlciB5b3Ug
c2hvdWxkIHVwZ3JhZGUgdG8gYSB3cml0ZSBsb2NrIHRoZW4KLSAgICogdGhlIHdpdGhVTG9ja1B0
cigpIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGluc3RlYWQsIHNpbmNlIGl0IGdpdmVzIGFjY2Vz
cwotICAgKiB0byB0aGUgTG9ja2VkUHRyIHByb3h5ICh3aGljaCBjYW4gYmUgdXBncmFkZWQgdmlh
IHRoZQotICAgKiBtb3ZlRnJvbVVwZ3JhZGVUb1dyaXRlKCkgbWV0aG9kKQotICAgKi8KLSAgdGVt
cGxhdGUgPGNsYXNzIEZ1bmN0aW9uPgotICBhdXRvIHdpdGhVTG9jayhGdW5jdGlvbiYmIGZ1bmN0
aW9uKSBjb25zdCB7Ci0gICAgQ29uc3RVcGdyYWRlTG9ja2VkR3VhcmRQdHIgZ3VhcmRQdHIoc3Rh
dGljX2Nhc3Q8Y29uc3QgU3ViY2xhc3MqPih0aGlzKSk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCpn
dWFyZFB0cik7Ci0gIH0KLQotICAvKioKLSAgICogSW52b2tlIGEgZnVuY3Rpb24gd2hpbGUgaG9s
ZGluZyB0aGUgbG9jayBleGNsdXNpdmVseS4KLSAgICoKLSAgICogVGhpcyBpcyBzaW1pbGFyIHRv
IHdpdGhVTG9jaygpLCBidXQgdGhlIGZ1bmN0aW9uIHdpbGwgYmUgcGFzc2VkIGEKLSAgICogTG9j
a2VkUHRyIHJhdGhlciB0aGFuIGEgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGl0c2VsZi4KLSAgICoK
LSAgICogVGhpcyBhbGxvd3Mgc2NvcGVkVW5sb2NrKCkgYW5kIGdldFVuaXF1ZUxvY2soKSB0byBi
ZSBjYWxsZWQgb24gdGhlCi0gICAqIExvY2tlZFB0ciBhcmd1bWVudC4KLSAgICoKLSAgICogVGhp
cyBhbHNvIGFsbG93cyB5b3UgdG8gdXBncmFkZSB0aGUgTG9ja2VkUHRyIHByb3h5IHRvIGEgd3Jp
dGUgc3RhdGUgc28KLSAgICogdGhhdCBjaGFuZ2VzIGNhbiBiZSBtYWRlIHRvIHRoZSB1bmRlcmx5
aW5nIGRhdGEKLSAgICovCi0gIHRlbXBsYXRlIDxjbGFzcyBGdW5jdGlvbj4KLSAgYXV0byB3aXRo
VUxvY2tQdHIoRnVuY3Rpb24mJiBmdW5jdGlvbikgewotICAgIHJldHVybiBmdW5jdGlvbih1bG9j
aygpKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgRnVuY3Rpb24+Ci0gIGF1dG8gd2l0aFVMb2Nr
UHRyKEZ1bmN0aW9uJiYgZnVuY3Rpb24pIGNvbnN0IHsKLSAgICByZXR1cm4gZnVuY3Rpb24odWxv
Y2soKSk7Ci0gIH0KLX07Ci0KLS8qKgotICogU3luY2hyb25pemVkQmFzZSBzcGVjaWFsaXphdGlv
biBmb3Igbm9uLXNoYXJlZCBtdXRleCB0eXBlcy4KLSAqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVz
IGxvY2soKSBtZXRob2RzIGZvciBhY3F1aXJpbmcgdGhlIGxvY2sgYW5kIGFjY2Vzc2luZyB0aGUK
LSAqIGRhdGEuCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBTdWJjbGFzcz4KLWNsYXNzIFN5bmNocm9u
aXplZEJhc2U8U3ViY2xhc3MsIGRldGFpbDo6TXV0ZXhMZXZlbDo6VU5JUVVFPiB7Ci0gcHVibGlj
OgotICB1c2luZyBMb2NrZWRQdHIgPSA6OmZvbGx5OjpMb2NrZWRQdHI8U3ViY2xhc3MsIExvY2tQ
b2xpY3lFeGNsdXNpdmU+OwotICB1c2luZyBDb25zdExvY2tlZFB0ciA9Ci0gICAgICA6OmZvbGx5
OjpMb2NrZWRQdHI8Y29uc3QgU3ViY2xhc3MsIExvY2tQb2xpY3lFeGNsdXNpdmU+OwotCi0gIC8q
KgotICAgKiBBY3F1aXJlIGEgbG9jaywgYW5kIHJldHVybiBhIExvY2tlZFB0ciB0aGF0IGNhbiBi
ZSB1c2VkIHRvIHNhZmVseSBhY2Nlc3MKLSAgICogdGhlIGRhdHVtLgotICAgKi8KLSAgTG9ja2Vk
UHRyIGxvY2soKSB7Ci0gICAgcmV0dXJuIExvY2tlZFB0cihzdGF0aWNfY2FzdDxTdWJjbGFzcyo+
KHRoaXMpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBY3F1aXJlIGEgbG9jaywgYW5kIHJldHVybiBh
IENvbnN0TG9ja2VkUHRyIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2FmZWx5Ci0gICAqIGFjY2VzcyB0
aGUgZGF0dW0uCi0gICAqLwotICBDb25zdExvY2tlZFB0ciBsb2NrKCkgY29uc3QgewotICAgIHJl
dHVybiBDb25zdExvY2tlZFB0cihzdGF0aWNfY2FzdDxjb25zdCBTdWJjbGFzcyo+KHRoaXMpKTsK
LSAgfQotCi0gIC8qKgotICAgKiBBdHRlbXB0cyB0byBhY3F1aXJlIHRoZSBsb2NrLCBvciBmYWls
cyBpZiB0aGUgdGltZW91dCBlbGFwc2VzIGZpcnN0LgotICAgKiBJZiBhY3F1aXNpdGlvbiBpcyB1
bnN1Y2Nlc3NmdWwsIHRoZSByZXR1cm5lZCBMb2NrZWRQdHIgd2lsbCBiZSBudWxsLgotICAgKi8K
LSAgdGVtcGxhdGUgPGNsYXNzIFJlcCwgY2xhc3MgUGVyaW9kPgotICBMb2NrZWRQdHIgbG9jayhj
b25zdCBzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+JiB0aW1lb3V0KSB7Ci0gICAg
cmV0dXJuIExvY2tlZFB0cihzdGF0aWNfY2FzdDxTdWJjbGFzcyo+KHRoaXMpLCB0aW1lb3V0KTsK
LSAgfQotCi0gIC8qKgotICAgKiBBdHRlbXB0cyB0byBhY3F1aXJlIHRoZSBsb2NrLCBvciBmYWls
cyBpZiB0aGUgdGltZW91dCBlbGFwc2VzIGZpcnN0LgotICAgKiBJZiBhY3F1aXNpdGlvbiBpcyB1
bnN1Y2Nlc3NmdWwsIHRoZSByZXR1cm5lZCBMb2NrZWRQdHIgd2lsbCBiZSBudWxsLgotICAgKi8K
LSAgdGVtcGxhdGUgPGNsYXNzIFJlcCwgY2xhc3MgUGVyaW9kPgotICBDb25zdExvY2tlZFB0ciBs
b2NrKGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIHRpbWVvdXQpIGNv
bnN0IHsKLSAgICByZXR1cm4gQ29uc3RMb2NrZWRQdHIoc3RhdGljX2Nhc3Q8Y29uc3QgU3ViY2xh
c3MqPih0aGlzKSwgdGltZW91dCk7Ci0gIH0KLQotICAvKgotICAgKiBOb3RlOiBDKysgMTcgYWRk
cyBndWFyYW50ZWVkIGNvcHkgZWxpc2lvbi4gIChodHRwOi8vd2cyMS5saW5rL1AwMTM1KQotICAg
KiBPbmNlIGNvbXBpbGVycyBzdXBwb3J0IHRoaXMsIGl0IHdvdWxkIGJlIG5pY2UgdG8gYWRkIGd1
YXJkKCkgbWV0aG9kcyB0aGF0Ci0gICAqIHJldHVybiBMb2NrZWRHdWFyZFB0ciBvYmplY3RzLgot
ICAgKi8KLQotICAvKioKLSAgICogSW52b2tlIGEgZnVuY3Rpb24gd2hpbGUgaG9sZGluZyB0aGUg
bG9jay4KLSAgICoKLSAgICogQSByZWZlcmVuY2UgdG8gdGhlIGRhdHVtIHdpbGwgYmUgcGFzc2Vk
IGludG8gdGhlIGZ1bmN0aW9uIGFzIGl0cyBvbmx5Ci0gICAqIGFyZ3VtZW50LgotICAgKgotICAg
KiBUaGlzIGNhbiBiZSB1c2VkIHdpdGggYSBsYW1iZGEgYXJndW1lbnQgZm9yIGVhc2lseSBkZWZp
bmluZyBzbWFsbCBjcml0aWNhbAotICAgKiBzZWN0aW9ucyBpbiB0aGUgY29kZS4gIEZvciBleGFt
cGxlOgotICAgKgotICAgKiAgIGF1dG8gdmFsdWUgPSBvYmoud2l0aExvY2soW10oYXV0byYgZGF0
YSkgewotICAgKiAgICAgZGF0YS5kb1N0dWZmKCk7Ci0gICAqICAgICByZXR1cm4gZGF0YS5nZXRW
YWx1ZSgpOwotICAgKiAgIH0pOwotICAgKi8KLSAgdGVtcGxhdGUgPGNsYXNzIEZ1bmN0aW9uPgot
ICBhdXRvIHdpdGhMb2NrKEZ1bmN0aW9uJiYgZnVuY3Rpb24pIHsKLSAgICBMb2NrZWRHdWFyZFB0
cjxTdWJjbGFzcywgTG9ja1BvbGljeUV4Y2x1c2l2ZT4gZ3VhcmRQdHIoCi0gICAgICAgIHN0YXRp
Y19jYXN0PFN1YmNsYXNzKj4odGhpcykpOwotICAgIHJldHVybiBmdW5jdGlvbigqZ3VhcmRQdHIp
OwotICB9Ci0gIHRlbXBsYXRlIDxjbGFzcyBGdW5jdGlvbj4KLSAgYXV0byB3aXRoTG9jayhGdW5j
dGlvbiYmIGZ1bmN0aW9uKSBjb25zdCB7Ci0gICAgTG9ja2VkR3VhcmRQdHI8Y29uc3QgU3ViY2xh
c3MsIExvY2tQb2xpY3lFeGNsdXNpdmU+IGd1YXJkUHRyKAotICAgICAgICBzdGF0aWNfY2FzdDxj
b25zdCBTdWJjbGFzcyo+KHRoaXMpKTsKLSAgICByZXR1cm4gZnVuY3Rpb24oKmd1YXJkUHRyKTsK
LSAgfQotCi0gIC8qKgotICAgKiBJbnZva2UgYSBmdW5jdGlvbiB3aGlsZSBob2xkaW5nIHRoZSBs
b2NrIGV4Y2x1c2l2ZWx5LgotICAgKgotICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8gd2l0aFdMb2Nr
KCksIGJ1dCB0aGUgZnVuY3Rpb24gd2lsbCBiZSBwYXNzZWQgYQotICAgKiBMb2NrZWRQdHIgcmF0
aGVyIHRoYW4gYSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgaXRzZWxmLgotICAgKgotICAgKiBUaGlz
IGFsbG93cyBzY29wZWRVbmxvY2soKSBhbmQgZ2V0VW5pcXVlTG9jaygpIHRvIGJlIGNhbGxlZCBv
biB0aGUKLSAgICogTG9ja2VkUHRyIGFyZ3VtZW50LgotICAgKi8KLSAgdGVtcGxhdGUgPGNsYXNz
IEZ1bmN0aW9uPgotICBhdXRvIHdpdGhMb2NrUHRyKEZ1bmN0aW9uJiYgZnVuY3Rpb24pIHsKLSAg
ICByZXR1cm4gZnVuY3Rpb24obG9jaygpKTsKLSAgfQotICB0ZW1wbGF0ZSA8Y2xhc3MgRnVuY3Rp
b24+Ci0gIGF1dG8gd2l0aExvY2tQdHIoRnVuY3Rpb24mJiBmdW5jdGlvbikgY29uc3QgewotICAg
IHJldHVybiBmdW5jdGlvbihsb2NrKCkpOwotICB9Ci19OwotCi0vKioKLSAqIFN5bmNocm9uaXpl
ZDxUPiBlbmNhcHN1bGF0ZXMgYW4gb2JqZWN0IG9mIHR5cGUgVCAoYSAiZGF0dW0iKSBwYWlyZWQK
LSAqIHdpdGggYSBtdXRleC4gVGhlIG9ubHkgd2F5IHRvIGFjY2VzcyB0aGUgZGF0dW0gaXMgd2hp
bGUgdGhlIG11dGV4Ci0gKiBpcyBsb2NrZWQsIGFuZCBTeW5jaHJvbml6ZWQgbWFrZXMgaXQgdmly
dHVhbGx5IGltcG9zc2libGUgdG8gZG8KLSAqIG90aGVyd2lzZS4gVGhlIGNvZGUgdGhhdCB3b3Vs
ZCBhY2Nlc3MgdGhlIGRhdHVtIGluIHVuc2FmZSB3YXlzCi0gKiB3b3VsZCBsb29rIG9kZCBhbmQg
Y29udm9sdXRlZCwgdGh1cyByZWFkaWx5IGFsZXJ0aW5nIHRoZSBodW1hbgotICogcmV2aWV3ZXIu
IEluIGNvbnRyYXN0LCB0aGUgY29kZSB0aGF0IHVzZXMgU3luY2hyb25pemVkPFQ+IGNvcnJlY3Rs
eQotICogbG9va3Mgc2ltcGxlIGFuZCBpbnR1aXRpdmUuCi0gKgotICogVGhlIHNlY29uZCBwYXJh
bWV0ZXIgbXVzdCBiZSBhIG11dGV4IHR5cGUuICBBbnkgbXV0ZXggdHlwZSBzdXBwb3J0ZWQgYnkK
LSAqIExvY2tUcmFpdHM8TXV0ZXg+IGNhbiBiZSB1c2VkLiAgQnkgZGVmYXVsdCBhbnkgY2xhc3Mg
d2l0aCBsb2NrKCkgYW5kCi0gKiB1bmxvY2soKSBtZXRob2RzIHdpbGwgd29yayBhdXRvbWF0aWNh
bGx5LiAgTG9ja1RyYWl0cyBjYW4gYmUgc3BlY2lhbGl6ZWQgdG8KLSAqIHRlYWNoIFN5bmNocm9u
aXplZCBob3cgdG8gdXNlIG90aGVyIGN1c3RvbSBtdXRleCB0eXBlcy4gIFNlZSB0aGUKLSAqIGRv
Y3VtZW50YXRpb24gaW4gTG9ja1RyYWl0cy5oIGZvciBhZGRpdGlvbmFsIGRldGFpbHMuCi0gKgot
ICogU3VwcG9ydGVkIG11dGV4ZXMgdGhhdCB3b3JrIGJ5IGRlZmF1bHQgaW5jbHVkZSBzdGQ6Om11
dGV4LAotICogc3RkOjpyZWN1cnNpdmVfbXV0ZXgsIHN0ZDo6dGltZWRfbXV0ZXgsIHN0ZDo6cmVj
dXJzaXZlX3RpbWVkX211dGV4LAotICogZm9sbHk6OlNoYXJlZE11dGV4LCBmb2xseTo6UldTcGlu
TG9jaywgYW5kIGZvbGx5OjpTcGluTG9jay4KLSAqIEluY2x1ZGUgTG9ja1RyYWl0c0Jvb3N0Lmgg
dG8gZ2V0IGFkZGl0aW9uYWwgTG9ja1RyYWl0cyBzcGVjaWFsaXphdGlvbnMgdG8KLSAqIHN1cHBv
cnQgdGhlIGZvbGxvd2luZyBib29zdCBtdXRleCB0eXBlczogYm9vc3Q6Om11dGV4LAotICogYm9v
c3Q6OnJlY3Vyc2l2ZV9tdXRleCwgYm9vc3Q6OnNoYXJlZF9tdXRleCwgYm9vc3Q6OnRpbWVkX211
dGV4LCBhbmQKLSAqIGJvb3N0OjpyZWN1cnNpdmVfdGltZWRfbXV0ZXguCi0gKi8KLXRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBNdXRleCA9IFNoYXJlZE11dGV4Pgotc3RydWN0IFN5bmNocm9uaXpl
ZCA6IHB1YmxpYyBTeW5jaHJvbml6ZWRCYXNlPAotICAgICAgICAgICAgICAgICAgICAgICAgICBT
eW5jaHJvbml6ZWQ8VCwgTXV0ZXg+LAotICAgICAgICAgICAgICAgICAgICAgICAgICBNdXRleExl
dmVsVmFsdWU8TXV0ZXg+Ojp2YWx1ZT4gewotIHByaXZhdGU6Ci0gIHVzaW5nIEJhc2UgPQotICAg
ICAgU3luY2hyb25pemVkQmFzZTxTeW5jaHJvbml6ZWQ8VCwgTXV0ZXg+LCBNdXRleExldmVsVmFs
dWU8TXV0ZXg+Ojp2YWx1ZT47Ci0gIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBueENvcHlDdG9yewot
ICAgICAgc3RkOjppc19ub3Rocm93X2NvcHlfY29uc3RydWN0aWJsZTxUPjo6dmFsdWV9OwotICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbnhNb3ZlQ3RvcnsKLSAgICAgIHN0ZDo6aXNfbm90aHJvd19t
b3ZlX2NvbnN0cnVjdGlibGU8VD46OnZhbHVlfTsKLQotICAvLyB1c2VkIHRvIGRpc2FibGUgY29w
eSBjb25zdHJ1Y3Rpb24gYW5kIGFzc2lnbm1lbnQKLSAgY2xhc3MgTm9uSW1wbGVtZW50ZWRUeXBl
OwotCi0gcHVibGljOgotICB1c2luZyBMb2NrZWRQdHIgPSB0eXBlbmFtZSBCYXNlOjpMb2NrZWRQ
dHI7Ci0gIHVzaW5nIENvbnN0TG9ja2VkUHRyID0gdHlwZW5hbWUgQmFzZTo6Q29uc3RMb2NrZWRQ
dHI7Ci0gIHVzaW5nIERhdGFUeXBlID0gVDsKLSAgdXNpbmcgTXV0ZXhUeXBlID0gTXV0ZXg7Ci0K
LSAgLyoqCi0gICAqIERlZmF1bHQgY29uc3RydWN0b3IgbGVhdmVzIGJvdGggbWVtYmVycyBjYWxs
IHRoZWlyIG93biBkZWZhdWx0Ci0gICAqIGNvbnN0cnVjdG9yLgotICAgKi8KLSAgU3luY2hyb25p
emVkKCkgPSBkZWZhdWx0OwotCi0gIC8qKgotICAgKiBDb3B5IGNvbnN0cnVjdG9yIGNvcGllcyB0
aGUgZGF0YSAod2l0aCBsb2NraW5nIHRoZSBzb3VyY2UgYW5kCi0gICAqIGFsbCkgYnV0IGRvZXMg
Tk9UIGNvcHkgdGhlIG11dGV4LiBEb2luZyBzbyB3b3VsZCByZXN1bHQgaW4KLSAgICogZGVhZGxv
Y2tzLgotICAgKgotICAgKiBOb3RlIHRoYXQgdGhlIGNvcHkgY29uc3RydWN0b3IgbWF5IHRocm93
IGJlY2F1c2UgaXQgYWNxdWlyZXMgYSBsb2NrIGluCi0gICAqIHRoZSBjb250ZXh0dWFsUkxvY2so
KSBtZXRob2QKLSAgICovCi0gcHVibGljOgotICAvKiBpbXBsaWNpdCAqLyBTeW5jaHJvbml6ZWQo
dHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6aXNfY29weV9jb25zdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN5bmNocm9uaXplZCYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOb25JbXBsZW1lbnRlZFR5cGU+Ojp0eXBlIHJocykgLyogbWF5IHRocm93ICovCi0g
ICAgICA6IFN5bmNocm9uaXplZChyaHMsIHJocy5jb250ZXh0dWFsUkxvY2soKSkge30KLQotICAv
KioKLSAgICogTW92ZSBjb25zdHJ1Y3RvciBtb3ZlcyB0aGUgZGF0YSAod2l0aCBsb2NraW5nIHRo
ZSBzb3VyY2UgYW5kIGFsbCkKLSAgICogYnV0IGRvZXMgbm90IG1vdmUgdGhlIG11dGV4LgotICAg
KgotICAgKiBOb3RlIHRoYXQgdGhlIG1vdmUgY29uc3RydWN0b3IgbWF5IHRocm93IGJlY2F1c2Ug
aXQgYWNxdWlyZXMgYSBsb2NrLgotICAgKiBTaW5jZSB0aGUgbW92ZSBjb25zdHJ1Y3RvciBpcyBu
b3QgZGVjbGFyZWQgbm9leGNlcHQsIHdoZW4gb2JqZWN0cyBvZiB0aGlzCi0gICAqIGNsYXNzIGFy
ZSB1c2VkIGFzIGVsZW1lbnRzIGluIGEgdmVjdG9yIG9yIGEgc2ltaWxhciBjb250YWluZXIuICBU
aGUKLSAgICogZWxlbWVudHMgbWlnaHQgbm90IGJlIG1vdmVkIGFyb3VuZCB3aGVuIHJlc2l6aW5n
LiAgVGhleSBtaWdodCBiZSBjb3BpZWQKLSAgICogaW5zdGVhZC4gIFlvdSBoYXZlIGJlZW4gd2Fy
bmVkLgotICAgKi8KLSAgU3luY2hyb25pemVkKFN5bmNocm9uaXplZCYmIHJocykgLyogbWF5IHRo
cm93ICovCi0gICAgICA6IFN5bmNocm9uaXplZChzdGQ6Om1vdmUocmhzKSwgcmhzLmNvbnRleHR1
YWxMb2NrKCkpIHt9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yIHRha2luZyBhIGRhdHVtIGFz
IGFyZ3VtZW50IGNvcGllcyBpdC4gVGhlcmUgaXMgbm8KLSAgICogbmVlZCB0byBsb2NrIHRoZSBj
b25zdHJ1Y3Rpbmcgb2JqZWN0LgotICAgKi8KLSAgZXhwbGljaXQgU3luY2hyb25pemVkKGNvbnN0
IFQmIHJocykgbm9leGNlcHQobnhDb3B5Q3RvcikgOiBkYXR1bV8ocmhzKSB7fQotCi0gIC8qKgot
ICAgKiBDb25zdHJ1Y3RvciB0YWtpbmcgYSBkYXR1bSBydmFsdWUgYXMgYXJndW1lbnQgbW92ZXMg
aXQuIEFnYWluLAotICAgKiB0aGVyZSBpcyBubyBuZWVkIHRvIGxvY2sgdGhlIGNvbnN0cnVjdGlu
ZyBvYmplY3QuCi0gICAqLwotICBleHBsaWNpdCBTeW5jaHJvbml6ZWQoVCYmIHJocykgbm9leGNl
cHQobnhNb3ZlQ3RvcikKLSAgICAgIDogZGF0dW1fKHN0ZDo6bW92ZShyaHMpKSB7fQotCi0gIC8q
KgotICAgKiBMZXRzIHlvdSBjb25zdHJ1Y3Qgbm9uLW1vdmFibGUgdHlwZXMgaW4tcGxhY2UuIFVz
ZSB0aGUgY29uc3RleHByCi0gICAqIGluc3RhbmNlIGBpbl9wbGFjZWAgYXMgdGhlIGZpcnN0IGFy
Z3VtZW50LgotICAgKi8KLSAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+Ci0gIGV4cGxpY2l0
IFN5bmNocm9uaXplZChpbl9wbGFjZV90LCBBcmdzJiYuLi4gYXJncykKLSAgICAgIDogZGF0dW1f
KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICAvKioKLSAgICogVGhlIGNhbm9u
aWNhbCBhc3NpZ25tZW50IG9wZXJhdG9yIG9ubHkgYXNzaWducyB0aGUgZGF0YSwgTk9UIHRoZQot
ICAgKiBtdXRleC4gSXQgbG9ja3MgdGhlIHR3byBvYmplY3RzIGluIGFzY2VuZGluZyBvcmRlciBv
ZiB0aGVpcgotICAgKiBhZGRyZXNzZXMuCi0gICAqLwotICBTeW5jaHJvbml6ZWQmIG9wZXJhdG9y
PSh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxUPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFN5bmNocm9uaXplZCYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5vbklt
cGxlbWVudGVkVHlwZT46OnR5cGUgcmhzKSB7Ci0gICAgaWYgKHRoaXMgPT0gJnJocykgewotICAg
ICAgLy8gU2VsZi1hc3NpZ25tZW50LCBwYXNzLgotICAgIH0gZWxzZSBpZiAodGhpcyA8ICZyaHMp
IHsKLSAgICAgIGF1dG8gZ3VhcmQxID0gb3BlcmF0b3ItPigpOwotICAgICAgYXV0byBndWFyZDIg
PSByaHMub3BlcmF0b3ItPigpOwotICAgICAgZGF0dW1fID0gcmhzLmRhdHVtXzsKLSAgICB9IGVs
c2UgewotICAgICAgYXV0byBndWFyZDEgPSByaHMub3BlcmF0b3ItPigpOwotICAgICAgYXV0byBn
dWFyZDIgPSBvcGVyYXRvci0+KCk7Ci0gICAgICBkYXR1bV8gPSByaHMuZGF0dW1fOwotICAgIH0K
LSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogTW92ZSBhc3NpZ25tZW50IG9w
ZXJhdG9yLCBvbmx5IGFzc2lnbnMgdGhlIGRhdGEsIE5PVCB0aGUKLSAgICogbXV0ZXguIEl0IGxv
Y2tzIHRoZSB0d28gb2JqZWN0cyBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgdGhlaXIKLSAgICogYWRk
cmVzc2VzLgotICAgKi8KLSAgU3luY2hyb25pemVkJiBvcGVyYXRvcj0oU3luY2hyb25pemVkJiYg
cmhzKSB7Ci0gICAgaWYgKHRoaXMgPT0gJnJocykgewotICAgICAgLy8gU2VsZi1hc3NpZ25tZW50
LCBwYXNzLgotICAgIH0gZWxzZSBpZiAodGhpcyA8ICZyaHMpIHsKLSAgICAgIGF1dG8gZ3VhcmQx
ID0gb3BlcmF0b3ItPigpOwotICAgICAgYXV0byBndWFyZDIgPSByaHMub3BlcmF0b3ItPigpOwot
ICAgICAgZGF0dW1fID0gc3RkOjptb3ZlKHJocy5kYXR1bV8pOwotICAgIH0gZWxzZSB7Ci0gICAg
ICBhdXRvIGd1YXJkMSA9IHJocy5vcGVyYXRvci0+KCk7Ci0gICAgICBhdXRvIGd1YXJkMiA9IG9w
ZXJhdG9yLT4oKTsKLSAgICAgIGRhdHVtXyA9IHN0ZDo6bW92ZShyaHMuZGF0dW1fKTsKLSAgICB9
Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIExvY2sgb2JqZWN0LCBhc3Np
Z24gZGF0dW0uCi0gICAqLwotICBTeW5jaHJvbml6ZWQmIG9wZXJhdG9yPShjb25zdCBUJiByaHMp
IHsKLSAgICBhdXRvIGd1YXJkID0gb3BlcmF0b3ItPigpOwotICAgIGRhdHVtXyA9IHJoczsKLSAg
ICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogTG9jayBvYmplY3QsIG1vdmUtYXNz
aWduIGRhdHVtLgotICAgKi8KLSAgU3luY2hyb25pemVkJiBvcGVyYXRvcj0oVCYmIHJocykgewot
ICAgIGF1dG8gZ3VhcmQgPSBvcGVyYXRvci0+KCk7Ci0gICAgZGF0dW1fID0gc3RkOjptb3ZlKHJo
cyk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEFjcXVpcmUgYW4gYXBw
cm9wcmlhdGUgbG9jayBiYXNlZCBvbiB0aGUgY29udGV4dC4KLSAgICoKLSAgICogSWYgdGhlIG11
dGV4IGlzIGEgc2hhcmVkIG11dGV4LCBhbmQgdGhlIFN5bmNocm9uaXplZCBpbnN0YW5jZSBpcyBj
b25zdCwKLSAgICogdGhpcyBhY3F1aXJlcyBhIHNoYXJlZCBsb2NrLiAgT3RoZXJ3aXNlIHRoaXMg
YWNxdWlyZXMgYW4gZXhjbHVzaXZlIGxvY2suCi0gICAqCi0gICAqIEluIGdlbmVyYWwsIHByZWZl
ciB1c2luZyB0aGUgZXhwbGljaXQgcmxvY2soKSBhbmQgd2xvY2soKSBtZXRob2RzCi0gICAqIGZv
ciByZWFkLXdyaXRlIGxvY2tzLCBhbmQgbG9jaygpIGZvciBwdXJlbHkgZXhjbHVzaXZlIGxvY2tz
LgotICAgKgotICAgKiBjb250ZXh0dWFsTG9jaygpIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Ig
dXNlIGluIG90aGVyIHRlbXBsYXRlIGZ1bmN0aW9ucwotICAgKiB0aGF0IGRvIG5vdCBuZWNlc3Nh
cmlseSBrbm93IHRoZSBsb2NrIHR5cGUuCi0gICAqLwotICBMb2NrZWRQdHIgY29udGV4dHVhbExv
Y2soKSB7Ci0gICAgcmV0dXJuIExvY2tlZFB0cih0aGlzKTsKLSAgfQotICBDb25zdExvY2tlZFB0
ciBjb250ZXh0dWFsTG9jaygpIGNvbnN0IHsKLSAgICByZXR1cm4gQ29uc3RMb2NrZWRQdHIodGhp
cyk7Ci0gIH0KLSAgdGVtcGxhdGUgPGNsYXNzIFJlcCwgY2xhc3MgUGVyaW9kPgotICBMb2NrZWRQ
dHIgY29udGV4dHVhbExvY2soY29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9k
PiYgdGltZW91dCkgewotICAgIHJldHVybiBMb2NrZWRQdHIodGhpcywgdGltZW91dCk7Ci0gIH0K
LSAgdGVtcGxhdGUgPGNsYXNzIFJlcCwgY2xhc3MgUGVyaW9kPgotICBDb25zdExvY2tlZFB0ciBj
b250ZXh0dWFsTG9jaygKLSAgICAgIGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBl
cmlvZD4mIHRpbWVvdXQpIGNvbnN0IHsKLSAgICByZXR1cm4gQ29uc3RMb2NrZWRQdHIodGhpcywg
dGltZW91dCk7Ci0gIH0KLSAgLyoqCi0gICAqIGNvbnRleHR1YWxSTG9jaygpIGFjcXVpcmVzIGEg
cmVhZCBsb2NrIGlmIHRoZSBtdXRleCB0eXBlIGlzIHNoYXJlZCwKLSAgICogb3IgYSByZWd1bGFy
IGV4Y2x1c2l2ZSBsb2NrIGZvciBub24tc2hhcmVkIG11dGV4IHR5cGVzLgotICAgKgotICAgKiBj
b250ZXh0dWFsUkxvY2soKSB3aGVuIHlvdSBrbm93IHRoYXQgeW91IHByZWZlciBhIHJlYWQgbG9j
ayAoaWYKLSAgICogYXZhaWxhYmxlKSwgZXZlbiBpZiB0aGUgU3luY2hyb25pemVkPFQ+IG9iamVj
dCBpdHNlbGYgaXMgbm9uLWNvbnN0LgotICAgKi8KLSAgQ29uc3RMb2NrZWRQdHIgY29udGV4dHVh
bFJMb2NrKCkgY29uc3QgewotICAgIHJldHVybiBDb25zdExvY2tlZFB0cih0aGlzKTsKLSAgfQot
ICB0ZW1wbGF0ZSA8Y2xhc3MgUmVwLCBjbGFzcyBQZXJpb2Q+Ci0gIENvbnN0TG9ja2VkUHRyIGNv
bnRleHR1YWxSTG9jaygKLSAgICAgIGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBl
cmlvZD4mIHRpbWVvdXQpIGNvbnN0IHsKLSAgICByZXR1cm4gQ29uc3RMb2NrZWRQdHIodGhpcywg
dGltZW91dCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBhY2Nlc3NvciBvZmZlcnMgYSBMb2Nr
ZWRQdHIuIEluIHR1cm4sIExvY2tlZFB0ciBvZmZlcnMKLSAgICogb3BlcmF0b3ItPiByZXR1cm5p
bmcgYSBwb2ludGVyIHRvIFQuIFRoZSBvcGVyYXRvci0+IGtlZXBzCi0gICAqIGV4cGFuZGluZyB1
bnRpbCBpdCByZWFjaGVzIGEgcG9pbnRlciwgc28gc3luY29iai0+Zm9vKCkgd2lsbCBsb2NrCi0g
ICAqIHRoZSBvYmplY3QgYW5kIGNhbGwgZm9vKCkgYWdhaW5zdCBpdC4KLSAgICoKLSAgICogTk9U
RTogVGhpcyBBUEkgaXMgcGxhbm5lZCB0byBiZSBkZXByZWNhdGVkIGluIGFuIHVwY29taW5nIGRp
ZmYuCi0gICAqIFByZWZlciB1c2luZyBsb2NrKCksIHdsb2NrKCksIG9yIHJsb2NrKCkgaW5zdGVh
ZC4KLSAgICovCi0gIExvY2tlZFB0ciBvcGVyYXRvci0+KCkgewotICAgIHJldHVybiBMb2NrZWRQ
dHIodGhpcyk7Ci0gIH0KLQotICAvKioKLSAgICogT2J0YWluIGEgQ29uc3RMb2NrZWRQdHIuCi0g
ICAqCi0gICAqIE5PVEU6IFRoaXMgQVBJIGlzIHBsYW5uZWQgdG8gYmUgZGVwcmVjYXRlZCBpbiBh
biB1cGNvbWluZyBkaWZmLgotICAgKiBQcmVmZXIgdXNpbmcgbG9jaygpLCB3bG9jaygpLCBvciBy
bG9jaygpIGluc3RlYWQuCi0gICAqLwotICBDb25zdExvY2tlZFB0ciBvcGVyYXRvci0+KCkgY29u
c3QgewotICAgIHJldHVybiBDb25zdExvY2tlZFB0cih0aGlzKTsKLSAgfQotCi0gIC8qKgotICAg
KiBBdHRlbXB0cyB0byBhY3F1aXJlIGZvciBhIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMu
IElmCi0gICAqIGFjcXVpc2l0aW9uIGlzIHVuc3VjY2Vzc2Z1bCwgdGhlIHJldHVybmVkIExvY2tl
ZFB0ciBpcyBudWxscHRyLgotICAgKgotICAgKiBOT1RFOiBUaGlzIEFQSSBpcyBkZXByZWNhdGVk
LiAgVXNlIGxvY2soKSwgd2xvY2soKSwgb3IgcmxvY2soKSBpbnN0ZWFkLgotICAgKiBJbiB0aGUg
ZnV0dXJlIGl0IHdpbGwgYmUgbWFya2VkIHdpdGggYSBkZXByZWNhdGlvbiBhdHRyaWJ1dGUgdG8g
ZW1pdAotICAgKiBidWlsZC10aW1lIHdhcm5pbmdzLCBhbmQgdGhlbiBpdCB3aWxsIGJlIHJlbW92
ZWQgZW50aXJlbHkuCi0gICAqLwotICBMb2NrZWRQdHIgdGltZWRBY3F1aXJlKHVuc2lnbmVkIGlu
dCBtaWxsaXNlY29uZHMpIHsKLSAgICByZXR1cm4gTG9ja2VkUHRyKHRoaXMsIHN0ZDo6Y2hyb25v
OjptaWxsaXNlY29uZHMobWlsbGlzZWNvbmRzKSk7Ci0gIH0KLQotICAvKioKLSAgICogQXR0ZW1w
dHMgdG8gYWNxdWlyZSBmb3IgYSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLiBJZgotICAg
KiBhY3F1aXNpdGlvbiBpcyB1bnN1Y2Nlc3NmdWwsIHRoZSByZXR1cm5lZCBDb25zdExvY2tlZFB0
ciBpcyBudWxscHRyLgotICAgKgotICAgKiBOT1RFOiBUaGlzIEFQSSBpcyBkZXByZWNhdGVkLiAg
VXNlIGxvY2soKSwgd2xvY2soKSwgb3IgcmxvY2soKSBpbnN0ZWFkLgotICAgKiBJbiB0aGUgZnV0
dXJlIGl0IHdpbGwgYmUgbWFya2VkIHdpdGggYSBkZXByZWNhdGlvbiBhdHRyaWJ1dGUgdG8gZW1p
dAotICAgKiBidWlsZC10aW1lIHdhcm5pbmdzLCBhbmQgdGhlbiBpdCB3aWxsIGJlIHJlbW92ZWQg
ZW50aXJlbHkuCi0gICAqLwotICBDb25zdExvY2tlZFB0ciB0aW1lZEFjcXVpcmUodW5zaWduZWQg
aW50IG1pbGxpc2Vjb25kcykgY29uc3QgewotICAgIHJldHVybiBDb25zdExvY2tlZFB0cih0aGlz
LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kcykpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIFNvbWV0aW1lcywgYWx0aG91Z2ggeW91IGhhdmUgYSBtdXRhYmxlIG9iamVjdCwgeW91
IG9ubHkgd2FudCB0bwotICAgKiBjYWxsIGEgY29uc3QgbWV0aG9kIGFnYWluc3QgaXQuIFRoZSBt
b3N0IGVmZmljaWVudCB3YXkgdG8gYWNoaWV2ZQotICAgKiB0aGF0IGlzIGJ5IHVzaW5nIGEgcmVh
ZCBsb2NrLiBZb3UgZ2V0IHRvIGRvIHNvIGJ5IHVzaW5nCi0gICAqIG9iai5hc0NvbnN0KCktPm1l
dGhvZCgpIGluc3RlYWQgb2Ygb2JqLT5tZXRob2QoKS4KLSAgICoKLSAgICogTk9URTogVGhpcyBB
UEkgaXMgcGxhbm5lZCB0byBiZSBkZXByZWNhdGVkIGluIGFuIHVwY29taW5nIGRpZmYuCi0gICAq
IFVzZSBybG9jaygpIGluc3RlYWQuCi0gICAqLwotICBjb25zdCBTeW5jaHJvbml6ZWQmIGFzQ29u
c3QoKSBjb25zdCB7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIFN3YXBz
IHdpdGggYW5vdGhlciBTeW5jaHJvbml6ZWQuIFByb3RlY3RlZCBhZ2FpbnN0Ci0gICAqIHNlbGYt
c3dhcC4gT25seSBkYXRhIGlzIHN3YXBwZWQuIExvY2tzIGFyZSBhY3F1aXJlZCBpbiBpbmNyZWFz
aW5nCi0gICAqIGFkZHJlc3Mgb3JkZXIuCi0gICAqLwotICB2b2lkIHN3YXAoU3luY2hyb25pemVk
JiByaHMpIHsKLSAgICBpZiAodGhpcyA9PSAmcmhzKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmICh0aGlzID4gJnJocykgewotICAgICAgcmV0dXJuIHJocy5zd2FwKCp0aGlzKTsKLSAg
ICB9Ci0gICAgYXV0byBndWFyZDEgPSBvcGVyYXRvci0+KCk7Ci0gICAgYXV0byBndWFyZDIgPSBy
aHMub3BlcmF0b3ItPigpOwotCi0gICAgdXNpbmcgc3RkOjpzd2FwOwotICAgIHN3YXAoZGF0dW1f
LCByaHMuZGF0dW1fKTsKLSAgfQotCi0gIC8qKgotICAgKiBTd2FwIHdpdGggYW5vdGhlciBkYXR1
bS4gUmVjb21tZW5kZWQgYmVjYXVzZSBpdCBrZWVwcyB0aGUgbXV0ZXgKLSAgICogaGVsZCBvbmx5
IGJyaWVmbHkuCi0gICAqLwotICB2b2lkIHN3YXAoVCYgcmhzKSB7Ci0gICAgTG9ja2VkUHRyIGd1
YXJkKHRoaXMpOwotCi0gICAgdXNpbmcgc3RkOjpzd2FwOwotICAgIHN3YXAoZGF0dW1fLCByaHMp
OwotICB9Ci0KLSAgLyoqCi0gICAqIENvcGllcyBkYXR1bSB0byBhIGdpdmVuIHRhcmdldC4KLSAg
ICovCi0gIHZvaWQgY29weShUKiB0YXJnZXQpIGNvbnN0IHsKLSAgICBDb25zdExvY2tlZFB0ciBn
dWFyZCh0aGlzKTsKLSAgICAqdGFyZ2V0ID0gZGF0dW1fOwotICB9Ci0KLSAgLyoqCi0gICAqIFJl
dHVybnMgYSBmcmVzaCBjb3B5IG9mIHRoZSBkYXR1bS4KLSAgICovCi0gIFQgY29weSgpIGNvbnN0
IHsKLSAgICBDb25zdExvY2tlZFB0ciBndWFyZCh0aGlzKTsKLSAgICByZXR1cm4gZGF0dW1fOwot
ICB9Ci0KLSBwcml2YXRlOgotICB0ZW1wbGF0ZSA8Y2xhc3MgTG9ja2VkVHlwZSwgY2xhc3MgTXV0
ZXhUeXBlLCBjbGFzcyBMb2NrUG9saWN5PgotICBmcmllbmQgY2xhc3MgZm9sbHk6OkxvY2tlZFB0
ckJhc2U7Ci0gIHRlbXBsYXRlIDxjbGFzcyBMb2NrZWRUeXBlLCBjbGFzcyBMb2NrUG9saWN5Pgot
ICBmcmllbmQgY2xhc3MgZm9sbHk6OkxvY2tlZFB0cjsKLSAgdGVtcGxhdGUgPGNsYXNzIExvY2tl
ZFR5cGUsIGNsYXNzIExvY2tQb2xpY3k+Ci0gIGZyaWVuZCBjbGFzcyBmb2xseTo6TG9ja2VkR3Vh
cmRQdHI7Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBjb25zdHJ1Y3RvcnMgdG8gZW5hYmxlIFN5bmNo
cm9uaXplZCBmb3IKLSAgICogbm9uLWRlZmF1bHQgY29uc3RydWN0aWJsZSB0eXBlcyBULgotICAg
KiBHdWFyZHMgYXJlIGNyZWF0ZWQgaW4gYWN0dWFsIHB1YmxpYyBjb25zdHJ1Y3RvcnMgYW5kIGFy
ZSBhbGl2ZQotICAgKiBmb3IgdGhlIHRpbWUgcmVxdWlyZWQgdG8gY29uc3RydWN0IHRoZSBvYmpl
Y3QKLSAgICovCi0gIFN5bmNocm9uaXplZCgKLSAgICAgIGNvbnN0IFN5bmNocm9uaXplZCYgcmhz
LAotICAgICAgY29uc3QgQ29uc3RMb2NrZWRQdHImIC8qZ3VhcmQqLykgbm9leGNlcHQobnhDb3B5
Q3RvcikKLSAgICAgIDogZGF0dW1fKHJocy5kYXR1bV8pIHt9Ci0KLSAgU3luY2hyb25pemVkKFN5
bmNocm9uaXplZCYmIHJocywgY29uc3QgTG9ja2VkUHRyJiAvKmd1YXJkKi8pIG5vZXhjZXB0KAot
ICAgICAgbnhNb3ZlQ3RvcikKLSAgICAgIDogZGF0dW1fKHN0ZDo6bW92ZShyaHMuZGF0dW1fKSkg
e30KLQotICAvLyBTeW5jaHJvbml6ZWQgZGF0YSBtZW1iZXJzCi0gIFQgZGF0dW1fOwotICBtdXRh
YmxlIE11dGV4IG11dGV4XzsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBTeW5jaHJvbml6ZWRUeXBl
LCBjbGFzcyBMb2NrUG9saWN5PgotY2xhc3MgU2NvcGVkVW5sb2NrZXI7Ci0KLW5hbWVzcGFjZSBk
ZXRhaWwgewotLyoKLSAqIEEgaGVscGVyIGFsaWFzIHRoYXQgcmVzb2x2ZXMgdG8gImNvbnN0IFQi
IGlmIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIKLSAqIGlzIGEgY29uc3QgU3luY2hyb25pemVkPFQ+
LCBvciAiVCIgaWYgdGhlIHBhcmFtZXRlciBpcyBub3QgY29uc3QuCi0gKi8KLXRlbXBsYXRlIDxj
bGFzcyBTeW5jaHJvbml6ZWRUeXBlPgotdXNpbmcgU3luY2hyb25pemVkRGF0YVR5cGUgPSB0eXBl
bmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgIHN0ZDo6aXNfY29uc3Q8U3luY2hyb25pemVkVHlw
ZT46OnZhbHVlLAotICAgIHR5cGVuYW1lIFN5bmNocm9uaXplZFR5cGU6OkRhdGFUeXBlIGNvbnN0
LAotICAgIHR5cGVuYW1lIFN5bmNocm9uaXplZFR5cGU6OkRhdGFUeXBlPjo6dHlwZTsKLS8qCi0g
KiBBIGhlbHBlciBhbGlhcyB0aGF0IHJlc29sdmVzIHRvIGEgQ29uc3RMb2NrZWRQdHIgaWYgdGhl
IHRlbXBsYXRlIHBhcmFtZXRlcgotICogaXMgYSBjb25zdCBTeW5jaHJvbml6ZWQ8VD4sIG9yIGEg
TG9ja2VkUHRyIGlmIHRoZSBwYXJhbWV0ZXIgaXMgbm90IGNvbnN0LgotICovCi10ZW1wbGF0ZSA8
Y2xhc3MgU3luY2hyb25pemVkVHlwZT4KLXVzaW5nIExvY2tlZFB0clR5cGUgPSB0eXBlbmFtZSBz
dGQ6OmNvbmRpdGlvbmFsPAotICAgIHN0ZDo6aXNfY29uc3Q8U3luY2hyb25pemVkVHlwZT46OnZh
bHVlLAotICAgIHR5cGVuYW1lIFN5bmNocm9uaXplZFR5cGU6OkNvbnN0TG9ja2VkUHRyLAotICAg
IHR5cGVuYW1lIFN5bmNocm9uaXplZFR5cGU6OkxvY2tlZFB0cj46OnR5cGU7Ci19IC8vIGRldGFp
bAotCi0vKioKLSAqIEEgaGVscGVyIGJhc2UgY2xhc3MgZm9yIGltcGxlbWVudGluZyBMb2NrZWRQ
dHIuCi0gKgotICogVGhlIG1haW4gcmVhc29uIGZvciBoYXZpbmcgdGhpcyBhcyBhIHNlcGFyYXRl
IGNsYXNzIGlzIHNvIHdlIGNhbiBzcGVjaWFsaXplCi0gKiBpdCBmb3Igc3RkOjptdXRleCwgc28g
d2UgY2FuIGV4cG9zZSBhIHN0ZDo6dW5pcXVlX2xvY2sgdG8gdGhlIGNhbGxlcgotICogd2hlbiBz
dGQ6Om11dGV4IGlzIGJlaW5nIHVzZWQuICBUaGlzIGFsbG93cyBjYWxsZXJzIHRvIHVzZSBhCi0g
KiBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSB3aXRoIHRoZSBtdXRleCBmcm9tIGEgU3luY2hyb25p
emVkPFQsIHN0ZDo6bXV0ZXg+LgotICoKLSAqIFdlIGRvbid0IHVzZSBzdGQ6OnVuaXF1ZV9sb2Nr
IHdpdGggb3RoZXIgTXV0ZXggdHlwZXMgc2luY2UgaXQgbWFrZXMgdGhlCi0gKiBMb2NrZWRQdHIg
Y2xhc3Mgc2xpZ2h0bHkgbGFyZ2VyLCBhbmQgaXQgbWFrZXMgdGhlIGxvZ2ljIHRvIHN1cHBvcnQK
LSAqIFNjb3BlZFVubG9ja2VyIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQuICBzdGQ6Om11dGV4
IGlzIHRoZSBvbmx5IG9uZSB0aGF0Ci0gKiByZWFsbHkgc2VlbXMgdG8gYmVuZWZpdCBmcm9tIHRo
ZSB1bmlxdWVfbG9jay4gIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlCi0gKiBpdHNlbGYgb25seSBz
dXBwb3J0cyBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+LCBzbyB0aGVyZSBkb2Vzbid0IHNl
ZW0gdG8KLSAqIGJlIGFueSByZWFsIGJlbmVmaXQgdG8gZXhwb3NpbmcgdGhlIHVuaXF1ZV9sb2Nr
IHdpdGggb3RoZXIgbXV0ZXggdHlwZXMuCi0gKgotICogTm90ZSB0aGF0IHRoZSBTeW5jaHJvbml6
ZWRUeXBlIHRlbXBsYXRlIHBhcmFtZXRlciBtYXkgb3IgbWF5IG5vdCBiZSBjb25zdAotICogcXVh
bGlmaWVkLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgU3luY2hyb25pemVkVHlwZSwgY2xhc3MgTXV0
ZXgsIGNsYXNzIExvY2tQb2xpY3k+Ci1jbGFzcyBMb2NrZWRQdHJCYXNlIHsKLSBwdWJsaWM6Ci0g
IHVzaW5nIE11dGV4VHlwZSA9IE11dGV4OwotICBmcmllbmQgY2xhc3MgZm9sbHk6OlNjb3BlZFVu
bG9ja2VyPFN5bmNocm9uaXplZFR5cGUsIExvY2tQb2xpY3k+OwotCi0gIC8qKgotICAgKiBEZXN0
cnVjdG9yIHJlbGVhc2VzLgotICAgKi8KLSAgfkxvY2tlZFB0ckJhc2UoKSB7Ci0gICAgaWYgKHBh
cmVudF8pIHsKLSAgICAgIExvY2tQb2xpY3k6OnVubG9jayhwYXJlbnRfLT5tdXRleF8pOwotICAg
IH0KLSAgfQotCi0gIC8qKgotICAgKiBVbmxvY2sgdGhlIHN5bmNocm9uaXplZCBkYXRhLgotICAg
KgotICAgKiBUaGUgTG9ja2VkUHRyIGNhbiBubyBsb25nZXIgYmUgZGVyZWZlcmVuY2VkIGFmdGVy
IHVubG9jaygpIGhhcyBiZWVuCi0gICAqIGNhbGxlZC4gIGlzVmFsaWQoKSB3aWxsIHJldHVybiBm
YWxzZSBvbiBhbiB1bmxvY2tlZCBMb2NrZWRQdHIuCi0gICAqCi0gICAqIHVubG9jaygpIGNhbiBv
bmx5IGJlIGNhbGxlZCBvbiBhIExvY2tlZFB0ciB0aGF0IGlzIHZhbGlkLgotICAgKi8KLSAgdm9p
ZCB1bmxvY2soKSB7Ci0gICAgRENIRUNLKHBhcmVudF8gIT0gbnVsbHB0cik7Ci0gICAgTG9ja1Bv
bGljeTo6dW5sb2NrKHBhcmVudF8tPm11dGV4Xyk7Ci0gICAgcGFyZW50XyA9IG51bGxwdHI7Ci0g
IH0KLQotIHByb3RlY3RlZDoKLSAgTG9ja2VkUHRyQmFzZSgpIHt9Ci0gIGV4cGxpY2l0IExvY2tl
ZFB0ckJhc2UoU3luY2hyb25pemVkVHlwZSogcGFyZW50KSA6IHBhcmVudF8ocGFyZW50KSB7Ci0g
ICAgTG9ja1BvbGljeTo6bG9jayhwYXJlbnRfLT5tdXRleF8pOwotICB9Ci0gIHRlbXBsYXRlIDxj
bGFzcyBSZXAsIGNsYXNzIFBlcmlvZD4KLSAgTG9ja2VkUHRyQmFzZSgKLSAgICAgIFN5bmNocm9u
aXplZFR5cGUqIHBhcmVudCwKLSAgICAgIGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAs
IFBlcmlvZD4mIHRpbWVvdXQpIHsKLSAgICBpZiAoTG9ja1BvbGljeTo6dHJ5X2xvY2tfZm9yKHBh
cmVudC0+bXV0ZXhfLCB0aW1lb3V0KSkgewotICAgICAgdGhpcy0+cGFyZW50XyA9IHBhcmVudDsK
LSAgICB9Ci0gIH0KLSAgTG9ja2VkUHRyQmFzZShMb2NrZWRQdHJCYXNlJiYgcmhzKSBub2V4Y2Vw
dCA6IHBhcmVudF8ocmhzLnBhcmVudF8pIHsKLSAgICByaHMucGFyZW50XyA9IG51bGxwdHI7Ci0g
IH0KLSAgTG9ja2VkUHRyQmFzZSYgb3BlcmF0b3I9KExvY2tlZFB0ckJhc2UmJiByaHMpIG5vZXhj
ZXB0IHsKLSAgICBpZiAocGFyZW50XykgewotICAgICAgTG9ja1BvbGljeTo6dW5sb2NrKHBhcmVu
dF8tPm11dGV4Xyk7Ci0gICAgfQotCi0gICAgcGFyZW50XyA9IHJocy5wYXJlbnRfOwotICAgIHJo
cy5wYXJlbnRfID0gbnVsbHB0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB1c2luZyBV
bmxvY2tlckRhdGEgPSBTeW5jaHJvbml6ZWRUeXBlKjsKLQotICAvKioKLSAgICogR2V0IGEgcG9p
bnRlciB0byB0aGUgU3luY2hyb25pemVkIG9iamVjdCBmcm9tIHRoZSBVbmxvY2tlckRhdGEuCi0g
ICAqCi0gICAqIEluIHRoZSBnZW5lcmljIGNhc2UgVW5sb2NrZXJEYXRhIGlzIGp1c3QgdGhlIFN5
bmNocm9uaXplZCBwb2ludGVyLAotICAgKiBzbyB3ZSByZXR1cm4gaXQgYXMgaXMuICAoVGhpcyBm
dW5jdGlvbiBpcyBtb3JlIGludGVyZXN0aW5nIGluIHRoZQotICAgKiBzdGQ6Om11dGV4IHNwZWNp
YWxpemF0aW9uIGJlbG93LikKLSAgICovCi0gIHN0YXRpYyBTeW5jaHJvbml6ZWRUeXBlKiBnZXRT
eW5jaHJvbml6ZWQoVW5sb2NrZXJEYXRhIGRhdGEpIHsKLSAgICByZXR1cm4gZGF0YTsKLSAgfQot
Ci0gIFVubG9ja2VyRGF0YSByZWxlYXNlTG9jaygpIHsKLSAgICBEQ0hFQ0socGFyZW50XyAhPSBu
dWxscHRyKTsKLSAgICBhdXRvIGN1cnJlbnQgPSBwYXJlbnRfOwotICAgIHBhcmVudF8gPSBudWxs
cHRyOwotICAgIExvY2tQb2xpY3k6OnVubG9jayhjdXJyZW50LT5tdXRleF8pOwotICAgIHJldHVy
biBjdXJyZW50OwotICB9Ci0gIHZvaWQgcmVhY3F1aXJlTG9jayhVbmxvY2tlckRhdGEmJiBkYXRh
KSB7Ci0gICAgRENIRUNLKHBhcmVudF8gPT0gbnVsbHB0cik7Ci0gICAgcGFyZW50XyA9IGRhdGE7
Ci0gICAgTG9ja1BvbGljeTo6bG9jayhwYXJlbnRfLT5tdXRleF8pOwotICB9Ci0KLSAgU3luY2hy
b25pemVkVHlwZSogcGFyZW50XyA9IG51bGxwdHI7Ci19OwotCi0vKioKLSAqIExvY2tlZFB0ckJh
c2Ugc3BlY2lhbGl6YXRpb24gZm9yIHVzZSB3aXRoIHN0ZDo6bXV0ZXguCi0gKgotICogV2hlbiBz
dGQ6Om11dGV4IGlzIHVzZWQgd2UgdXNlIGEgc3RkOjp1bmlxdWVfbG9jayB0byBob2xkIHRoZSBt
dXRleC4KLSAqIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIHN0ZDo6Y29uZGl0aW9uX3Zh
cmlhYmxlIHdpdGggYQotICogU3luY2hyb25pemVkPFQsIHN0ZDo6bXV0ZXg+LgotICovCi10ZW1w
bGF0ZSA8Y2xhc3MgU3luY2hyb25pemVkVHlwZSwgY2xhc3MgTG9ja1BvbGljeT4KLWNsYXNzIExv
Y2tlZFB0ckJhc2U8U3luY2hyb25pemVkVHlwZSwgc3RkOjptdXRleCwgTG9ja1BvbGljeT4gewot
IHB1YmxpYzoKLSAgdXNpbmcgTXV0ZXhUeXBlID0gc3RkOjptdXRleDsKLSAgZnJpZW5kIGNsYXNz
IGZvbGx5OjpTY29wZWRVbmxvY2tlcjxTeW5jaHJvbml6ZWRUeXBlLCBMb2NrUG9saWN5PjsKLQot
ICAvKioKLSAgICogRGVzdHJ1Y3RvciByZWxlYXNlcy4KLSAgICovCi0gIH5Mb2NrZWRQdHJCYXNl
KCkgewotICAgIC8vIFRoZSBzdGQ6OnVuaXF1ZV9sb2NrIHdpbGwgYXV0b21hdGljYWxseSByZWxl
YXNlIHRoZSBsb2NrIHdoZW4gaXQgaXMKLSAgICAvLyBkZXN0cm95ZWQsIHNvIHdlIGRvbid0IG5l
ZWQgdG8gZG8gYW55dGhpbmcgZXh0cmEgaGVyZS4KLSAgfQotCi0gIExvY2tlZFB0ckJhc2UoTG9j
a2VkUHRyQmFzZSYmIHJocykgbm9leGNlcHQKLSAgICAgIDogbG9ja18oc3RkOjptb3ZlKHJocy5s
b2NrXykpLCBwYXJlbnRfKHJocy5wYXJlbnRfKSB7Ci0gICAgcmhzLnBhcmVudF8gPSBudWxscHRy
OwotICB9Ci0gIExvY2tlZFB0ckJhc2UmIG9wZXJhdG9yPShMb2NrZWRQdHJCYXNlJiYgcmhzKSBu
b2V4Y2VwdCB7Ci0gICAgbG9ja18gPSBzdGQ6Om1vdmUocmhzLmxvY2tfKTsKLSAgICBwYXJlbnRf
ID0gcmhzLnBhcmVudF87Ci0gICAgcmhzLnBhcmVudF8gPSBudWxscHRyOwotICAgIHJldHVybiAq
dGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIHN0ZDo6dW5p
cXVlX2xvY2suCi0gICAqCi0gICAqIFRoaXMgaXMgcHJvdmlkZWQgc28gdGhhdCBjYWxsZXJzIGNh
biB1c2UgU3luY2hyb25pemVkPFQsIHN0ZDo6bXV0ZXg+Ci0gICAqIHdpdGggYSBzdGQ6OmNvbmRp
dGlvbl92YXJpYWJsZS4KLSAgICoKLSAgICogV2hpbGUgdGhpcyBBUEkgY291bGQgYmUgdXNlZCB0
byBieXBhc3MgdGhlIG5vcm1hbCBTeW5jaHJvbml6ZWQgQVBJcyBhbmQKLSAgICogbWFudWFsbHkg
aW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyB1bmlxdWVfbG9jaywgdGhpcyBpcyBzdHJvbmds
eQotICAgKiBkaXNjb3VyYWdlZC4KLSAgICovCi0gIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRl
eD4mIGdldFVuaXF1ZUxvY2soKSB7Ci0gICAgcmV0dXJuIGxvY2tfOwotICB9Ci0KLSAgLyoqCi0g
ICAqIFVubG9jayB0aGUgc3luY2hyb25pemVkIGRhdGEuCi0gICAqCi0gICAqIFRoZSBMb2NrZWRQ
dHIgY2FuIG5vIGxvbmdlciBiZSBkZXJlZmVyZW5jZWQgYWZ0ZXIgdW5sb2NrKCkgaGFzIGJlZW4K
LSAgICogY2FsbGVkLiAgaXNWYWxpZCgpIHdpbGwgcmV0dXJuIGZhbHNlIG9uIGFuIHVubG9ja2Vk
IExvY2tlZFB0ci4KLSAgICoKLSAgICogdW5sb2NrKCkgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGEg
TG9ja2VkUHRyIHRoYXQgaXMgdmFsaWQuCi0gICAqLwotICB2b2lkIHVubG9jaygpIHsKLSAgICBE
Q0hFQ0socGFyZW50XyAhPSBudWxscHRyKTsKLSAgICBsb2NrXy51bmxvY2soKTsKLSAgICBwYXJl
bnRfID0gbnVsbHB0cjsKLSAgfQotCi0gcHJvdGVjdGVkOgotICBMb2NrZWRQdHJCYXNlKCkge30K
LSAgZXhwbGljaXQgTG9ja2VkUHRyQmFzZShTeW5jaHJvbml6ZWRUeXBlKiBwYXJlbnQpCi0gICAg
ICA6IGxvY2tfKHBhcmVudC0+bXV0ZXhfKSwgcGFyZW50XyhwYXJlbnQpIHt9Ci0KLSAgdXNpbmcg
VW5sb2NrZXJEYXRhID0KLSAgICAgIHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0
ZXg+LCBTeW5jaHJvbml6ZWRUeXBlKj47Ci0KLSAgc3RhdGljIFN5bmNocm9uaXplZFR5cGUqIGdl
dFN5bmNocm9uaXplZChjb25zdCBVbmxvY2tlckRhdGEmIGRhdGEpIHsKLSAgICByZXR1cm4gZGF0
YS5zZWNvbmQ7Ci0gIH0KLQotICBVbmxvY2tlckRhdGEgcmVsZWFzZUxvY2soKSB7Ci0gICAgRENI
RUNLKHBhcmVudF8gIT0gbnVsbHB0cik7Ci0gICAgVW5sb2NrZXJEYXRhIGRhdGEoc3RkOjptb3Zl
KGxvY2tfKSwgcGFyZW50Xyk7Ci0gICAgcGFyZW50XyA9IG51bGxwdHI7Ci0gICAgZGF0YS5maXJz
dC51bmxvY2soKTsKLSAgICByZXR1cm4gZGF0YTsKLSAgfQotICB2b2lkIHJlYWNxdWlyZUxvY2so
VW5sb2NrZXJEYXRhJiYgZGF0YSkgewotICAgIGxvY2tfID0gc3RkOjptb3ZlKGRhdGEuZmlyc3Qp
OwotICAgIGxvY2tfLmxvY2soKTsKLSAgICBwYXJlbnRfID0gZGF0YS5zZWNvbmQ7Ci0gIH0KLQot
ICAvLyBUaGUgc3BlY2lhbGl6YXRpb24gZm9yIHN0ZDo6bXV0ZXggZG9lcyBoYXZlIHRvIHN0b3Jl
IHNsaWdodGx5IG1vcmUKLSAgLy8gc3RhdGUgdGhhbiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlv
bi4KLSAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrXzsKLSAgU3luY2hyb25pemVk
VHlwZSogcGFyZW50XyA9IG51bGxwdHI7Ci19OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgdGVtcG9y
YXJpbHkgdW5sb2NrcyBhIExvY2tlZFB0ciBpbiBhIHNjb3BlZCBtYW5uZXIuCi0gKi8KLXRlbXBs
YXRlIDxjbGFzcyBTeW5jaHJvbml6ZWRUeXBlLCBjbGFzcyBMb2NrUG9saWN5PgotY2xhc3MgU2Nv
cGVkVW5sb2NrZXIgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgU2NvcGVkVW5sb2NrZXIoTG9ja2Vk
UHRyPFN5bmNocm9uaXplZFR5cGUsIExvY2tQb2xpY3k+KiBwKQotICAgICAgOiBwdHJfKHApLCBk
YXRhXyhwdHJfLT5yZWxlYXNlTG9jaygpKSB7fQotICBTY29wZWRVbmxvY2tlcihjb25zdCBTY29w
ZWRVbmxvY2tlciYpID0gZGVsZXRlOwotICBTY29wZWRVbmxvY2tlciYgb3BlcmF0b3I9KGNvbnN0
IFNjb3BlZFVubG9ja2VyJikgPSBkZWxldGU7Ci0gIFNjb3BlZFVubG9ja2VyKFNjb3BlZFVubG9j
a2VyJiYgb3RoZXIpIG5vZXhjZXB0Ci0gICAgICA6IHB0cl8ob3RoZXIucHRyXyksIGRhdGFfKHN0
ZDo6bW92ZShvdGhlci5kYXRhXykpIHsKLSAgICBvdGhlci5wdHJfID0gbnVsbHB0cjsKLSAgfQot
ICBTY29wZWRVbmxvY2tlciYgb3BlcmF0b3I9KFNjb3BlZFVubG9ja2VyJiYgb3RoZXIpID0gZGVs
ZXRlOwotCi0gIH5TY29wZWRVbmxvY2tlcigpIHsKLSAgICBpZiAocHRyXykgewotICAgICAgcHRy
Xy0+cmVhY3F1aXJlTG9jayhzdGQ6Om1vdmUoZGF0YV8pKTsKLSAgICB9Ci0gIH0KLQotICAvKioK
LSAgICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgU3luY2hyb25pemVkIG9iamVjdCB1c2VkIGJ5
IHRoaXMgU2NvcGVkVW5sb2NrZXIuCi0gICAqLwotICBTeW5jaHJvbml6ZWRUeXBlKiBnZXRTeW5j
aHJvbml6ZWQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIExvY2tlZFB0cjxTeW5jaHJvbml6ZWRUeXBl
LCBMb2NrUG9saWN5Pjo6Z2V0U3luY2hyb25pemVkKGRhdGFfKTsKLSAgfQotCi0gcHJpdmF0ZToK
LSAgdXNpbmcgRGF0YSA9IHR5cGVuYW1lIExvY2tlZFB0cjxTeW5jaHJvbml6ZWRUeXBlLCBMb2Nr
UG9saWN5Pjo6VW5sb2NrZXJEYXRhOwotICBMb2NrZWRQdHI8U3luY2hyb25pemVkVHlwZSwgTG9j
a1BvbGljeT4qIHB0cl97bnVsbHB0cn07Ci0gIERhdGEgZGF0YV87Ci19OwotCi0vKioKLSAqIEEg
TG9ja2VkUHRyIGtlZXBzIGEgU3luY2hyb25pemVkPFQ+IG9iamVjdCBsb2NrZWQgZm9yIHRoZSBk
dXJhdGlvbiBvZgotICogTG9ja2VkUHRyJ3MgZXhpc3RlbmNlLgotICoKLSAqIEl0IHByb3ZpZGVz
IGFjY2VzcyB0aGUgZGF0dW0ncyBtZW1iZXJzIGRpcmVjdGx5IGJ5IHVzaW5nIG9wZXJhdG9yLT4o
KSBhbmQKLSAqIG9wZXJhdG9yKigpLgotICoKLSAqIFRoZSBMb2NrUG9saWN5IHBhcmFtZXRlciBj
b250cm9scyB3aGV0aGVyIG9yIG5vdCB0aGUgbG9jayBpcyBhY3F1aXJlZCBpbgotICogZXhjbHVz
aXZlIG9yIHNoYXJlZCBtb2RlLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgU3luY2hyb25pemVkVHlw
ZSwgY2xhc3MgTG9ja1BvbGljeT4KLWNsYXNzIExvY2tlZFB0ciA6IHB1YmxpYyBMb2NrZWRQdHJC
YXNlPAotICAgICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXplZFR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgU3luY2hyb25pemVkVHlwZTo6TXV0ZXhUeXBlLAotICAgICAg
ICAgICAgICAgICAgICAgIExvY2tQb2xpY3k+IHsKLSBwcml2YXRlOgotICB1c2luZyBCYXNlID0g
TG9ja2VkUHRyQmFzZTwKLSAgICAgIFN5bmNocm9uaXplZFR5cGUsCi0gICAgICB0eXBlbmFtZSBT
eW5jaHJvbml6ZWRUeXBlOjpNdXRleFR5cGUsCi0gICAgICBMb2NrUG9saWN5PjsKLSAgdXNpbmcg
VW5sb2NrZXJEYXRhID0gdHlwZW5hbWUgQmFzZTo6VW5sb2NrZXJEYXRhOwotICAvLyBDRGF0YVR5
cGUgaXMgdGhlIERhdGFUeXBlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvbnN0LXF1YWxpZmljYXRp
b24KLSAgdXNpbmcgQ0RhdGFUeXBlID0gZGV0YWlsOjpTeW5jaHJvbml6ZWREYXRhVHlwZTxTeW5j
aHJvbml6ZWRUeXBlPjsKLQotIHB1YmxpYzoKLSAgdXNpbmcgRGF0YVR5cGUgPSB0eXBlbmFtZSBT
eW5jaHJvbml6ZWRUeXBlOjpEYXRhVHlwZTsKLSAgdXNpbmcgTXV0ZXhUeXBlID0gdHlwZW5hbWUg
U3luY2hyb25pemVkVHlwZTo6TXV0ZXhUeXBlOwotICB1c2luZyBTeW5jaHJvbml6ZWQgPSB0eXBl
bmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxTeW5jaHJvbml6ZWRUeXBlPjo6dHlwZTsKLSAgZnJpZW5k
IGNsYXNzIFNjb3BlZFVubG9ja2VyPFN5bmNocm9uaXplZFR5cGUsIExvY2tQb2xpY3k+OwotCi0g
IC8qKgotICAgKiBDcmVhdGVzIGFuIHVuaW5pdGlhbGl6ZWQgTG9ja2VkUHRyLgotICAgKgotICAg
KiBEZXJlZmVyZW5jaW5nIGFuIHVuaW5pdGlhbGl6ZWQgTG9ja2VkUHRyIGlzIG5vdCBhbGxvd2Vk
LgotICAgKi8KLSAgTG9ja2VkUHRyKCkge30KLQotICAvKioKLSAgICogVGFrZXMgYSBTeW5jaHJv
bml6ZWQ8VD4gYW5kIGxvY2tzIGl0LgotICAgKi8KLSAgZXhwbGljaXQgTG9ja2VkUHRyKFN5bmNo
cm9uaXplZFR5cGUqIHBhcmVudCkgOiBCYXNlKHBhcmVudCkge30KLQotICAvKioKLSAgICogVGFr
ZXMgYSBTeW5jaHJvbml6ZWQ8VD4gYW5kIGF0dGVtcHRzIHRvIGxvY2sgaXQsIHdpdGhpbiB0aGUg
c3BlY2lmaWVkCi0gICAqIHRpbWVvdXQuCi0gICAqCi0gICAqIEJsb2NrcyB1bnRpbCB0aGUgbG9j
ayBpcyBhY3F1aXJlZCBvciB1bnRpbCB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgZXhwaXJlcy4KLSAg
ICogSWYgdGhlIHRpbWVvdXQgZXhwaXJlZCB3aXRob3V0IGFjcXVpcmluZyB0aGUgbG9jaywgdGhl
IExvY2tlZFB0ciB3aWxsIGJlCi0gICAqIG51bGwsIGFuZCBMb2NrZWRQdHI6OmlzTnVsbCgpIHdp
bGwgcmV0dXJuIHRydWUuCi0gICAqLwotICB0ZW1wbGF0ZSA8Y2xhc3MgUmVwLCBjbGFzcyBQZXJp
b2Q+Ci0gIExvY2tlZFB0cigKLSAgICAgIFN5bmNocm9uaXplZFR5cGUqIHBhcmVudCwKLSAgICAg
IGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIHRpbWVvdXQpCi0gICAg
ICA6IEJhc2UocGFyZW50LCB0aW1lb3V0KSB7fQotCi0gIC8qKgotICAgKiBNb3ZlIGNvbnN0cnVj
dG9yLgotICAgKi8KLSAgTG9ja2VkUHRyKExvY2tlZFB0ciYmIHJocykgbm9leGNlcHQgPSBkZWZh
dWx0OwotCi0gIC8qKgotICAgKiBNb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IuCi0gICAqLwotICBM
b2NrZWRQdHImIG9wZXJhdG9yPShMb2NrZWRQdHImJiByaHMpIG5vZXhjZXB0ID0gZGVmYXVsdDsK
LQotICAvKgotICAgKiBDb3B5IGNvbnN0cnVjdG9yIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yIGFy
ZSBkZWxldGVkLgotICAgKi8KLSAgTG9ja2VkUHRyKGNvbnN0IExvY2tlZFB0ciYgcmhzKSA9IGRl
bGV0ZTsKLSAgTG9ja2VkUHRyJiBvcGVyYXRvcj0oY29uc3QgTG9ja2VkUHRyJiByaHMpID0gZGVs
ZXRlOwotCi0gIC8qKgotICAgKiBEZXN0cnVjdG9yIHJlbGVhc2VzLgotICAgKi8KLSAgfkxvY2tl
ZFB0cigpIHt9Ci0KLSAgLyoqCi0gICAqIENoZWNrIGlmIHRoaXMgTG9ja2VkUHRyIGlzIHVuaW5p
dGlhbGl6ZWQsIG9yIHBvaW50cyB0byB2YWxpZCBsb2NrZWQgZGF0YS4KLSAgICoKLSAgICogVGhp
cyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gY2hlY2sgaWYgYSB0aW1lZC1hY3F1aXJlIG9wZXJhdGlv
biBzdWNjZWVkZWQuCi0gICAqIElmIGFuIGFjcXVpcmUgb3BlcmF0aW9uIHRpbWVzIG91dCBpdCB3
aWxsIHJlc3VsdCBpbiBhIG51bGwgTG9ja2VkUHRyLgotICAgKgotICAgKiBBIExvY2tlZFB0ciBp
cyBhbHdheXMgZWl0aGVyIG51bGwsIG9yIGhvbGRzIGEgbG9jayB0byB2YWxpZCBkYXRhLgotICAg
KiBNZXRob2RzIHN1Y2ggYXMgc2NvcGVkVW5sb2NrKCkgcmVzZXQgdGhlIExvY2tlZFB0ciB0byBu
dWxsIGZvciB0aGUKLSAgICogZHVyYXRpb24gb2YgdGhlIHVubG9jay4KLSAgICovCi0gIGJvb2wg
aXNOdWxsKCkgY29uc3QgewotICAgIHJldHVybiB0aGlzLT5wYXJlbnRfID09IG51bGxwdHI7Ci0g
IH0KLQotICAvKioKLSAgICogRXhwbGljaXQgYm9vbGVhbiBjb252ZXJzaW9uLgotICAgKgotICAg
KiBSZXR1cm5zICFpc051bGwoKQotICAgKi8KLSAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsKLSAgICByZXR1cm4gdGhpcy0+cGFyZW50XyAhPSBudWxscHRyOwotICB9Ci0KLSAgLyoq
Ci0gICAqIEFjY2VzcyB0aGUgbG9ja2VkIGRhdGEuCi0gICAqCi0gICAqIFRoaXMgbWV0aG9kIHNo
b3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIExvY2tlZFB0ciBpcyB2YWxpZC4KLSAgICovCi0gIENE
YXRhVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsKLSAgICByZXR1cm4gJnRoaXMtPnBhcmVudF8t
PmRhdHVtXzsKLSAgfQotCi0gIC8qKgotICAgKiBBY2Nlc3MgdGhlIGxvY2tlZCBkYXRhLgotICAg
KgotICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBMb2NrZWRQdHIg
aXMgdmFsaWQuCi0gICAqLwotICBDRGF0YVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gdGhpcy0+cGFyZW50Xy0+ZGF0dW1fOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlbXBvcmFy
aWx5IHVubG9jayB0aGUgTG9ja2VkUHRyLCBhbmQgcmVzZXQgaXQgdG8gbnVsbC4KLSAgICoKLSAg
ICogUmV0dXJucyBhbiBoZWxwZXIgb2JqZWN0IHRoYXQgd2lsbCByZS1sb2NrIGFuZCByZXN0b3Jl
IHRoZSBMb2NrZWRQdHIgd2hlbgotICAgKiB0aGUgaGVscGVyIGlzIGRlc3Ryb3llZC4gIFRoZSBM
b2NrZWRQdHIgbWF5IG5vdCBiZSBkZXJlZmVyZW5jZWQgZm9yIGFzCi0gICAqIGxvbmcgYXMgdGhp
cyBoZWxwZXIgb2JqZWN0IGV4aXN0cy4KLSAgICovCi0gIFNjb3BlZFVubG9ja2VyPFN5bmNocm9u
aXplZFR5cGUsIExvY2tQb2xpY3k+IHNjb3BlZFVubG9jaygpIHsKLSAgICByZXR1cm4gU2NvcGVk
VW5sb2NrZXI8U3luY2hyb25pemVkVHlwZSwgTG9ja1BvbGljeT4odGhpcyk7Ci0gIH0KLQotICAv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCi0gICAqIFVwZ3JhZGFibGUgbG9jayBtZXRob2RzLgotICAgKiBU
aGVzZSBhcmUgZGlzYWJsZWQgdmlhIFNGSU5BRSB3aGVuIHRoZSBtdXRleCBpcyBub3QgdXBncmFk
YWJsZQotICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKgotICAgKiBNb3ZlIHRoZSBsb2NrZWQg
cHRyIGZyb20gYW4gdXBncmFkZSBzdGF0ZSB0byBhbiBleGNsdXNpdmUgc3RhdGUuICBUaGUKLSAg
ICogY3VycmVudCBsb2NrIGlzIGxlZnQgaW4gYSBudWxsIHN0YXRlLgotICAgKi8KLSAgdGVtcGxh
dGUgPAotICAgICAgdHlwZW5hbWUgU3luY1R5cGUgPSBTeW5jaHJvbml6ZWRUeXBlLAotICAgICAg
dHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICBMb2NrVHJhaXRz
PHR5cGVuYW1lIFN5bmNUeXBlOjpNdXRleFR5cGU+Ojppc191cGdyYWRlPjo6dHlwZT4KLSAgTG9j
a2VkUHRyPFN5bmNocm9uaXplZFR5cGUsIExvY2tQb2xpY3lGcm9tVXBncmFkZVRvRXhjbHVzaXZl
PgotICBtb3ZlRnJvbVVwZ3JhZGVUb1dyaXRlKCkgewotICAgIGF1dG8qIHBhcmVudF90b19wYXNz
X29uID0gdGhpcy0+cGFyZW50XzsKLSAgICB0aGlzLT5wYXJlbnRfID0gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gTG9ja2VkUHRyPFN5bmNocm9uaXplZFR5cGUsIExvY2tQb2xpY3lGcm9tVXBncmFkZVRv
RXhjbHVzaXZlPigKLSAgICAgICAgcGFyZW50X3RvX3Bhc3Nfb24pOwotICB9Ci0KLSAgLyoqCi0g
ICAqIE1vdmUgdGhlIGxvY2tlZCBwdHIgZnJvbSBhbiBleGNsdXNpdmUgc3RhdGUgdG8gYW4gdXBn
cmFkZSBzdGF0ZS4gIFRoZQotICAgKiBjdXJyZW50IGxvY2sgaXMgbGVmdCBpbiBhIG51bGwgc3Rh
dGUuCi0gICAqLwotICB0ZW1wbGF0ZSA8Ci0gICAgICB0eXBlbmFtZSBTeW5jVHlwZSA9IFN5bmNo
cm9uaXplZFR5cGUsCi0gICAgICB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAot
ICAgICAgICAgIExvY2tUcmFpdHM8dHlwZW5hbWUgU3luY1R5cGU6Ok11dGV4VHlwZT46OmlzX3Vw
Z3JhZGU+Ojp0eXBlPgotICBMb2NrZWRQdHI8U3luY2hyb25pemVkVHlwZSwgTG9ja1BvbGljeUZy
b21FeGNsdXNpdmVUb1VwZ3JhZGU+Ci0gIG1vdmVGcm9tV3JpdGVUb1VwZ3JhZGUoKSB7Ci0gICAg
YXV0byogcGFyZW50X3RvX3Bhc3Nfb24gPSB0aGlzLT5wYXJlbnRfOwotICAgIHRoaXMtPnBhcmVu
dF8gPSBudWxscHRyOwotICAgIHJldHVybiBMb2NrZWRQdHI8U3luY2hyb25pemVkVHlwZSwgTG9j
a1BvbGljeUZyb21FeGNsdXNpdmVUb1VwZ3JhZGU+KAotICAgICAgICBwYXJlbnRfdG9fcGFzc19v
bik7Ci0gIH0KLQotICAvKioKLSAgICogTW92ZSB0aGUgbG9ja2VkIHB0ciBmcm9tIGFuIHVwZ3Jh
ZGUgc3RhdGUgdG8gYSBzaGFyZWQgc3RhdGUuICBUaGUKLSAgICogY3VycmVudCBsb2NrIGlzIGxl
ZnQgaW4gYSBudWxsIHN0YXRlLgotICAgKi8KLSAgdGVtcGxhdGUgPAotICAgICAgdHlwZW5hbWUg
U3luY1R5cGUgPSBTeW5jaHJvbml6ZWRUeXBlLAotICAgICAgdHlwZW5hbWUgPSB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICBMb2NrVHJhaXRzPHR5cGVuYW1lIFN5bmNUeXBlOjpN
dXRleFR5cGU+Ojppc191cGdyYWRlPjo6dHlwZT4KLSAgTG9ja2VkUHRyPFN5bmNocm9uaXplZFR5
cGUsIExvY2tQb2xpY3lGcm9tVXBncmFkZVRvU2hhcmVkPgotICBtb3ZlRnJvbVVwZ3JhZGVUb1Jl
YWQoKSB7Ci0gICAgYXV0byogcGFyZW50X3RvX3Bhc3Nfb24gPSB0aGlzLT5wYXJlbnRfOwotICAg
IHRoaXMtPnBhcmVudF8gPSBudWxscHRyOwotICAgIHJldHVybiBMb2NrZWRQdHI8U3luY2hyb25p
emVkVHlwZSwgTG9ja1BvbGljeUZyb21VcGdyYWRlVG9TaGFyZWQ+KAotICAgICAgICBwYXJlbnRf
dG9fcGFzc19vbik7Ci0gIH0KLQotICAvKioKLSAgICogTW92ZSB0aGUgbG9ja2VkIHB0ciBmcm9t
IGFuIGV4Y2x1c2l2ZSBzdGF0ZSB0byBhIHNoYXJlZCBzdGF0ZS4gIFRoZQotICAgKiBjdXJyZW50
IGxvY2sgaXMgbGVmdCBpbiBhIG51bGwgc3RhdGUuCi0gICAqLwotICB0ZW1wbGF0ZSA8Ci0gICAg
ICB0eXBlbmFtZSBTeW5jVHlwZSA9IFN5bmNocm9uaXplZFR5cGUsCi0gICAgICB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICAgIExvY2tUcmFpdHM8dHlwZW5hbWUg
U3luY1R5cGU6Ok11dGV4VHlwZT46OmlzX3VwZ3JhZGU+Ojp0eXBlPgotICBMb2NrZWRQdHI8U3lu
Y2hyb25pemVkVHlwZSwgTG9ja1BvbGljeUZyb21FeGNsdXNpdmVUb1NoYXJlZD4KLSAgbW92ZUZy
b21Xcml0ZVRvUmVhZCgpIHsKLSAgICBhdXRvKiBwYXJlbnRfdG9fcGFzc19vbiA9IHRoaXMtPnBh
cmVudF87Ci0gICAgdGhpcy0+cGFyZW50XyA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIExvY2tlZFB0
cjxTeW5jaHJvbml6ZWRUeXBlLCBMb2NrUG9saWN5RnJvbUV4Y2x1c2l2ZVRvU2hhcmVkPigKLSAg
ICAgICAgcGFyZW50X3RvX3Bhc3Nfb24pOwotICB9Ci19OwotCi0vKioKLSAqIExvY2tlZEd1YXJk
UHRyIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIExvY2tlZFB0ci4KLSAqCi0gKiBJdCBpcyBu
b24tbW92YWJsZSwgYW5kIHN1cHBvcnRzIGZld2VyIGZlYXR1cmVzIHRoYW4gTG9ja2VkUHRyLiAg
SG93ZXZlciwgaXQKLSAqIGlzIGV2ZXItc28tc2xpZ2h0bHkgbW9yZSBwZXJmb3JtYW50IHRoYW4g
TG9ja2VkUHRyLiAgKFRoZSBkZXN0cnVjdG9yIGNhbgotICogdW5jb25kaXRpb25hbGx5IHJlbGVh
c2UgdGhlIGxvY2ssIHdpdGhvdXQgcmVxdWlyaW5nIGEgY29uZGl0aW9uYWwgYnJhbmNoLikKLSAq
Ci0gKiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gTG9ja2VkR3VhcmRQdHIgYW5kIExvY2tlZFB0
ciBpcyBzaW1pbGFyIHRvIHRoYXQKLSAqIGJldHdlZW4gc3RkOjpsb2NrX2d1YXJkIGFuZCBzdGQ6
OnVuaXF1ZV9sb2NrLgotICovCi10ZW1wbGF0ZSA8Y2xhc3MgU3luY2hyb25pemVkVHlwZSwgY2xh
c3MgTG9ja1BvbGljeT4KLWNsYXNzIExvY2tlZEd1YXJkUHRyIHsKLSBwcml2YXRlOgotICAvLyBD
RGF0YVR5cGUgaXMgdGhlIERhdGFUeXBlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvbnN0LXF1YWxp
ZmljYXRpb24KLSAgdXNpbmcgQ0RhdGFUeXBlID0gZGV0YWlsOjpTeW5jaHJvbml6ZWREYXRhVHlw
ZTxTeW5jaHJvbml6ZWRUeXBlPjsKLQotIHB1YmxpYzoKLSAgdXNpbmcgRGF0YVR5cGUgPSB0eXBl
bmFtZSBTeW5jaHJvbml6ZWRUeXBlOjpEYXRhVHlwZTsKLSAgdXNpbmcgTXV0ZXhUeXBlID0gdHlw
ZW5hbWUgU3luY2hyb25pemVkVHlwZTo6TXV0ZXhUeXBlOwotICB1c2luZyBTeW5jaHJvbml6ZWQg
PSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxTeW5jaHJvbml6ZWRUeXBlPjo6dHlwZTsKLQot
ICBMb2NrZWRHdWFyZFB0cigpID0gZGVsZXRlOwotCi0gIC8qKgotICAgKiBUYWtlcyBhIFN5bmNo
cm9uaXplZDxUPiBhbmQgbG9ja3MgaXQuCi0gICAqLwotICBleHBsaWNpdCBMb2NrZWRHdWFyZFB0
cihTeW5jaHJvbml6ZWRUeXBlKiBwYXJlbnQpIDogcGFyZW50XyhwYXJlbnQpIHsKLSAgICBMb2Nr
UG9saWN5Ojpsb2NrKHBhcmVudF8tPm11dGV4Xyk7Ci0gIH0KLQotICAvKioKLSAgICogRGVzdHJ1
Y3RvciByZWxlYXNlcy4KLSAgICovCi0gIH5Mb2NrZWRHdWFyZFB0cigpIHsKLSAgICBMb2NrUG9s
aWN5Ojp1bmxvY2socGFyZW50Xy0+bXV0ZXhfKTsKLSAgfQotCi0gIC8qKgotICAgKiBBY2Nlc3Mg
dGhlIGxvY2tlZCBkYXRhLgotICAgKi8KLSAgQ0RhdGFUeXBlKiBvcGVyYXRvci0+KCkgY29uc3Qg
ewotICAgIHJldHVybiAmcGFyZW50Xy0+ZGF0dW1fOwotICB9Ci0KLSAgLyoqCi0gICAqIEFjY2Vz
cyB0aGUgbG9ja2VkIGRhdGEuCi0gICAqLwotICBDRGF0YVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0
IHsKLSAgICByZXR1cm4gcGFyZW50Xy0+ZGF0dW1fOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBU
aGlzIGlzIHRoZSBlbnRpcmUgc3RhdGUgb2YgTG9ja2VkR3VhcmRQdHIuCi0gIFN5bmNocm9uaXpl
ZFR5cGUqIGNvbnN0IHBhcmVudF97bnVsbHB0cn07Ci19OwotCi0vKioKLSAqIEFjcXVpcmUgbG9j
a3MgZm9yIG11bHRpcGxlIFN5bmNocm9uaXplZDxUPiBvYmplY3RzLCBpbiBhIGRlYWRsb2NrLXNh
ZmUKLSAqIG1hbm5lci4KLSAqCi0gKiBUaGUgbG9ja3MgYXJlIGFjcXVpcmVkIGluIG9yZGVyIGZy
b20gbG93ZXN0IGFkZHJlc3MgdG8gaGlnaGVzdCBhZGRyZXNzLgotICogKE5vdGUgdGhhdCB0aGlz
IGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhbGdvcml0aG0gdXNlZCBieSBzdGQ6OmxvY2so
KS4pCi0gKgotICogRm9yIHBhcmFtZXRlcnMgdGhhdCBhcmUgY29uc3QgYW5kIHN1cHBvcnQgc2hh
cmVkIGxvY2tzLCBhIHJlYWQgbG9jayBpcwotICogYWNxdWlyZWQuICBPdGhlcndpc2UgYW4gZXhj
bHVzaXZlIGxvY2sgaXMgYWNxdWlyZWQuCi0gKgotICogVE9ETzogRXh0ZW5kIGFjcXVpcmVMb2Nr
ZWQoKSB3aXRoIHZhcmlhZGljIHRlbXBsYXRlIHZlcnNpb25zIHRoYXQKLSAqIGFsbG93IGZvciBt
b3JlIHRoYW4gMiBTeW5jaHJvbml6ZWQgYXJndW1lbnRzLiAgKEkgaGF2ZW4ndCBnaXZlbiB0b28g
bXVjaAotICogdGhvdWdodCBhYm91dCBob3cgdG8gaW1wbGVtZW50IHRoaXMuICBJdCBzZWVtcyBs
aWtlIGl0IHdvdWxkIGJlIHJhdGhlcgotICogY29tcGxpY2F0ZWQsIGJ1dCBJIHRoaW5rIGl0IHNo
b3VsZCBiZSBwb3NzaWJsZS4pCi0gKi8KLXRlbXBsYXRlIDxjbGFzcyBTeW5jMSwgY2xhc3MgU3lu
YzI+Ci1zdGQ6OnR1cGxlPGRldGFpbDo6TG9ja2VkUHRyVHlwZTxTeW5jMT4sIGRldGFpbDo6TG9j
a2VkUHRyVHlwZTxTeW5jMj4+Ci1hY3F1aXJlTG9ja2VkKFN5bmMxJiBsMSwgU3luYzImIGwyKSB7
Ci0gIGlmIChzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oJmwxKSA8IHN0YXRpY19jYXN0PGNvbnN0
IHZvaWQqPigmbDIpKSB7Ci0gICAgYXV0byBwMSA9IGwxLmNvbnRleHR1YWxMb2NrKCk7Ci0gICAg
YXV0byBwMiA9IGwyLmNvbnRleHR1YWxMb2NrKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBs
ZShzdGQ6Om1vdmUocDEpLCBzdGQ6Om1vdmUocDIpKTsKLSAgfSBlbHNlIHsKLSAgICBhdXRvIHAy
ID0gbDIuY29udGV4dHVhbExvY2soKTsKLSAgICBhdXRvIHAxID0gbDEuY29udGV4dHVhbExvY2so
KTsKLSAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKHN0ZDo6bW92ZShwMSksIHN0ZDo6bW92ZShw
MikpOwotICB9Ci19Ci0KLS8qKgotICogQSB2ZXJzaW9uIG9mIGFjcXVpcmVMb2NrZWQoKSB0aGF0
IHJldHVybnMgYSBzdGQ6OnBhaXIgcmF0aGVyIHRoYW4gYQotICogc3RkOjp0dXBsZSwgd2hpY2gg
aXMgZWFzaWVyIHRvIHVzZSBpbiBtYW55IHBsYWNlcy4KLSAqLwotdGVtcGxhdGUgPGNsYXNzIFN5
bmMxLCBjbGFzcyBTeW5jMj4KLXN0ZDo6cGFpcjxkZXRhaWw6OkxvY2tlZFB0clR5cGU8U3luYzE+
LCBkZXRhaWw6OkxvY2tlZFB0clR5cGU8U3luYzI+PgotYWNxdWlyZUxvY2tlZFBhaXIoU3luYzEm
IGwxLCBTeW5jMiYgbDIpIHsKLSAgYXV0byBsb2NrZWRQdHJzID0gYWNxdWlyZUxvY2tlZChsMSwg
bDIpOwotICByZXR1cm4ge3N0ZDo6bW92ZShzdGQ6OmdldDwwPihsb2NrZWRQdHJzKSksCi0gICAg
ICAgICAgc3RkOjptb3ZlKHN0ZDo6Z2V0PDE+KGxvY2tlZFB0cnMpKX07Ci19Ci0KLS8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKLSAqIE5PVEU6IEFsbCBBUElzIGJlbG93IHRoaXMgbGluZSB3aWxsIGJlIGRlcHJl
Y2F0ZWQgaW4gdXBjb21pbmcgZGlmZnMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vLyBOb24tbWVt
YmVyIHN3YXAgcHJpbWl0aXZlCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgTT4KLXZvaWQgc3dh
cChTeW5jaHJvbml6ZWQ8VCwgTT4mIGxocywgU3luY2hyb25pemVkPFQsIE0+JiByaHMpIHsKLSAg
bGhzLnN3YXAocmhzKTsKLX0KLQotLyoqCi0gKiBEaXNhbWJpZ3VhdGUgdGhlIG5hbWUgdmFyIGJ5
IGNvbmNhdGVuYXRpbmcgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBvcmlnaW5hbAotICogcG9pbnQg
b2YgZXhwYW5zaW9uLiBUaGlzIGF2b2lkcyBzaGFkb3dpbmcgd2FybmluZ3MgZm9yIG5lc3RlZAot
ICogU1lOQ0hST05JWkVEcy4gVGhlIG5hbWUgaXMgY29uc2lzdGVudCBpZiB1c2VkIG11bHRpcGxl
IHRpbWVzIHdpdGhpbgotICogYW5vdGhlciBtYWNyby4KLSAqIE9ubHkgZm9yIGludGVybmFsIHVz
ZS4KLSAqLwotI2RlZmluZSBTWU5DSFJPTklaRURfVkFSKHZhcikgRkJfQ09OQ0FURU5BVEUoU1lO
Q0hST05JWkVEXyMjdmFyIyNfLCBfX0xJTkVfXykKLQotLyoqCi0gKiBTWU5DSFJPTklaRUQgaXMg
dGhlIG1haW4gZmFjaWxpdHkgdGhhdCBtYWtlcyBTeW5jaHJvbml6ZWQ8VD4KLSAqIGhlbHBmdWwu
IEl0IGlzIGEgcHNldWRvLXN0YXRlbWVudCB0aGF0IGludHJvZHVjZXMgYSBzY29wZSB3aGVyZSB0
aGUKLSAqIG9iamVjdCBpcyBsb2NrZWQuIEluc2lkZSB0aGF0IHNjb3BlIHlvdSBnZXQgdG8gYWNj
ZXNzIHRoZSB1bmFkb3JuZWQKLSAqIGRhdHVtLgotICoKLSAqIEV4YW1wbGU6Ci0gKgotICogU3lu
Y2hyb25pemVkPHZlY3RvcjxpbnQ+PiBzdmVjdG9yOwotICogLi4uCi0gKiBTWU5DSFJPTklaRUQg
KHN2ZWN0b3IpIHsgLi4uIHVzZSBzdmVjdG9yIGFzIGEgdmVjdG9yPGludD4gLi4uIH0KLSAqIG9y
Ci0gKiBTWU5DSFJPTklaRUQgKHYsIHN2ZWN0b3IpIHsgLi4uIHVzZSB2IGFzIGEgdmVjdG9yPGlu
dD4gLi4uIH0KLSAqCi0gKiBSZWZlciB0byBmb2xseS9kb2NzL1N5bmNocm9uaXplZC5tZCBmb3Ig
YSBkZXRhaWxlZCBleHBsYW5hdGlvbiBhbmQgbW9yZQotICogZXhhbXBsZXMuCi0gKi8KLSNkZWZp
bmUgU1lOQ0hST05JWkVEKC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIEZPTExZX1BVU0hfV0FSTklORyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBGT0xMWV9HQ0NfRElTQUJMRV9XQVJOSU5HKCIt
V3NoYWRvdyIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRk9MTFlfTVNWQ19E
SVNBQkxFX1dBUk5JTkcoNDE4OSkgLyogaW5pdGlhbGl6ZWQgYnV0IHVucmVmZXJlbmNlZCAqLyBc
Ci0gIEZPTExZX01TVkNfRElTQUJMRV9XQVJOSU5HKDQ0NTYpIC8qIGRlY2xhcmF0aW9uIGhpZGVz
IGxvY2FsICovICAgICAgXAotICBGT0xMWV9NU1ZDX0RJU0FCTEVfV0FSTklORyg0NDU3KSAvKiBk
ZWNsYXJhdGlvbiBoaWRlcyBwYXJhbWV0ZXIgKi8gIFwKLSAgRk9MTFlfTVNWQ19ESVNBQkxFX1dB
Uk5JTkcoNDQ1OCkgLyogZGVjbGFyYXRpb24gaGlkZXMgbWVtYmVyICovICAgICBcCi0gIEZPTExZ
X01TVkNfRElTQUJMRV9XQVJOSU5HKDQ0NTkpIC8qIGRlY2xhcmF0aW9uIGhpZGVzIGdsb2JhbCAq
LyAgICAgXAotICBGT0xMWV9HQ0NfRElTQUJMRV9ORVdfU0hBRE9XX1dBUk5JTkdTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKGJvb2wgU1lOQ0hST05JWkVEX1ZBUihzdGF0
ZSkgPSBmYWxzZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gZWxzZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIGZvciAoYXV0byBTWU5DSFJPTklaRURfVkFSKGxvY2tlZFB0cikgPSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAoRkJfVkFfR0xVRShGQl9BUkdfMl9PUl8xLCAo
X19WQV9BUkdTX18pKSkub3BlcmF0b3ItPigpOyBcCi0gICAgICAgICAhU1lOQ0hST05JWkVEX1ZB
UihzdGF0ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
U1lOQ0hST05JWkVEX1ZBUihzdGF0ZSkgPSB0cnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgIGZvciAoYXV0byYgRkJfVkFfR0xVRShGQl9BUkdfMSwgKF9fVkFfQVJHU19f
KSkgPSAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAqU1lOQ0hST05JWkVEX1ZBUihs
b2NrZWRQdHIpLm9wZXJhdG9yLT4oKTsgICAgICAgICAgICAgXAotICAgICAgICAgICAhU1lOQ0hS
T05JWkVEX1ZBUihzdGF0ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgU1lOQ0hST05JWkVEX1ZBUihzdGF0ZSkgPSB0cnVlKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIEZPTExZX1BPUF9XQVJOSU5HCi0KLSNkZWZpbmUgVElNRURfU1lOQ0hS
T05JWkVEKHRpbWVvdXQsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGlmIChib29sIFNZTkNIUk9OSVpFRF9WQVIoc3RhdGUpID0gZmFsc2UpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IGVsc2UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBmb3IgKGF1dG8gU1lOQ0hST05JWkVEX1ZBUihsb2NrZWRQdHIpID0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgKEZCX1ZBX0dMVUUoRkJfQVJHXzJf
T1JfMSwgKF9fVkFfQVJHU19fKSkpLnRpbWVkQWNxdWlyZSh0aW1lb3V0KTsgXAotICAgICAgICAg
IVNZTkNIUk9OSVpFRF9WQVIoc3RhdGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgIFNZTkNIUk9OSVpFRF9WQVIoc3RhdGUpID0gdHJ1ZSkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBmb3IgKGF1dG8g
RkJfVkFfR0xVRShGQl9BUkdfMSwgKF9fVkFfQVJHU19fKSkgPSAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgKCFTWU5DSFJPTklaRURfVkFSKGxvY2tlZFB0cikgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgPyBu
dWxscHRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgICAgIDogU1lOQ0hST05JWkVEX1ZBUihsb2NrZWRQdHIpLm9wZXJh
dG9yLT4oKSk7ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAhU1lOQ0hST05JWkVEX1ZBUihz
dGF0ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgU1lOQ0hST05JWkVEX1ZBUihzdGF0ZSkgPSB0cnVlKQotCi0vKioKLSAqIFNpbWlsYXIg
dG8gU1lOQ0hST05JWkVELCBidXQgb25seSB1c2VzIGEgcmVhZCBsb2NrLgotICovCi0jZGVmaW5l
IFNZTkNIUk9OSVpFRF9DT05TVCguLi4pICAgICAgICAgICAgXAotICBTWU5DSFJPTklaRUQoICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIEZCX1ZBX0dMVUUoRkJfQVJHXzEsIChf
X1ZBX0FSR1NfXykpLCBcCi0gICAgICAoRkJfVkFfR0xVRShGQl9BUkdfMl9PUl8xLCAoX19WQV9B
UkdTX18pKSkuYXNDb25zdCgpKQotCi0vKioKLSAqIFNpbWlsYXIgdG8gVElNRURfU1lOQ0hST05J
WkVELCBidXQgb25seSB1c2VzIGEgcmVhZCBsb2NrLgotICovCi0jZGVmaW5lIFRJTUVEX1NZTkNI
Uk9OSVpFRF9DT05TVCh0aW1lb3V0LCAuLi4pIFwKLSAgVElNRURfU1lOQ0hST05JWkVEKCAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgdGltZW91dCwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICBGQl9WQV9HTFVFKEZCX0FSR18xLCAoX19WQV9BUkdTX18p
KSwgICAgIFwKLSAgICAgIChGQl9WQV9HTFVFKEZCX0FSR18yX09SXzEsIChfX1ZBX0FSR1NfXykp
KS5hc0NvbnN0KCkpCi0KLS8qKgotICogU3luY2hyb25pemVzIHR3byBTeW5jaHJvbml6ZWQgb2Jq
ZWN0cyAodGhleSBtYXkgZW5jYXBzdWxhdGUKLSAqIGRpZmZlcmVudCBkYXRhKS4gU3luY2hyb25p
emF0aW9uIGlzIGRvbmUgaW4gaW5jcmVhc2luZyBhZGRyZXNzIG9mCi0gKiBvYmplY3Qgb3JkZXIs
IHNvIHRoZXJlIGlzIG5vIGRlYWRsb2NrIHJpc2suCi0gKi8KLSNkZWZpbmUgU1lOQ0hST05JWkVE
X0RVQUwobjEsIGUxLCBuMiwgZTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGlmIChib29sIFNZTkNIUk9OSVpFRF9WQVIoc3RhdGUpID0gZmFsc2UpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IGVsc2UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBmb3IgKGF1dG8gU1lOQ0hST05JWkVEX1ZBUihwdHJzKSA9IGFjcXVpcmVMb2NrZWRQYWlyKGUx
LCBlMik7ICAgICAgICAgICAgICBcCi0gICAgICAgICAhU1lOQ0hST05JWkVEX1ZBUihzdGF0ZSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
U1lOQ0hST05JWkVEX1ZBUihzdGF0ZSkgPSB0cnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgIGZvciAoYXV0byYgbjEgPSAqU1lOQ0hST05JWkVEX1ZBUihw
dHJzKS5maXJzdDsgIVNZTkNIUk9OSVpFRF9WQVIoc3RhdGUpOyBcCi0gICAgICAgICAgIFNZTkNI
Uk9OSVpFRF9WQVIoc3RhdGUpID0gdHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBmb3IgKGF1dG8mIG4yID0gKlNZTkNIUk9OSVpFRF9WQVIocHRycyku
c2Vjb25kOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAhU1lOQ0hST05J
WkVEX1ZBUihzdGF0ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgU1lOQ0hST05JWkVEX1ZBUihzdGF0ZSkgPSB0cnVlKQotCi19IC8qIG5h
bWVzcGFjZSBmb2xseSAqLwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZm9sbHkvVGhyZWFkSWQuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2ZvbGx5L1RocmVhZElkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4
YjgyY2Q3ZDdmZWM2NmFmY2Q4NzUxODc3ZWNhOGI1ZGQzOWZjODguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZm9sbHkvVGhyZWFkSWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICog
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgot
ICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBV
bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
IHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
Ci0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPGNzdGRpbnQ+Ci0KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9QVGhy
ZWFkLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvU3lzU3lzY2FsbC5oPgotI2luY2x1
ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L1VuaXN0ZC5oPgotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmls
aXR5L1dpbmRvd3MuaD4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotLyoqCi0gKiBHZXQgYSBwcm9j
ZXNzLXNwZWNpZmljIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4KLSAqCi0gKiBU
aGUgcmV0dXJuIHZhbHVlIHdpbGwgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIHRocmVhZCB3aXRoaW4g
dGhlIGN1cnJlbnQKLSAqIHByb2Nlc3MuCi0gKgotICogTm90ZSB0aGF0IHRoZSByZXR1cm4gdmFs
dWUgZG9lcyBub3QgbmVjZXNzYXJpbHkgY29ycmVzcG9uZCB0byBhbiBvcGVyYXRpbmcKLSAqIHN5
c3RlbSB0aHJlYWQgSUQuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGFsc28gb25seSB1bmlxdWUgd2l0
aGluIHRoZSBjdXJyZW50Ci0gKiBwcm9jZXNzOiBnZXRDdXJyZW50VGhyZWFkSUQoKSBtYXkgcmV0
dXJuIHRoZSBzYW1lIHZhbHVlIGZvciB0d28gY29uY3VycmVudGx5Ci0gKiBydW5uaW5nIHRocmVh
ZHMgaW4gc2VwYXJhdGUgcHJvY2Vzc2VzLgotICoKLSAqIFRoZSB0aHJlYWQgSUQgbWF5IGJlIHJl
dXNlZCBvbmNlIHRoZSB0aHJlYWQgaXQgY29ycmVzcG9uZHMgdG8gaGFzIGJlZW4KLSAqIGpvaW5l
ZC4KLSAqLwotaW5saW5lIHVpbnQ2NF90IGdldEN1cnJlbnRUaHJlYWRJRCgpIHsKLSNpZiBfX0FQ
UExFX18KLSAgcmV0dXJuIHVpbnQ2NF90KHB0aHJlYWRfbWFjaF90aHJlYWRfbnAocHRocmVhZF9z
ZWxmKCkpKTsKLSNlbGlmIF9XSU4zMgotICByZXR1cm4gdWludDY0X3QoR2V0Q3VycmVudFRocmVh
ZElkKCkpOwotI2Vsc2UKLSAgcmV0dXJuIHVpbnQ2NF90KHB0aHJlYWRfc2VsZigpKTsKLSNlbmRp
ZgotfQotCi0vKioKLSAqIEdldCB0aGUgb3BlcmF0aW5nLXN5c3RlbSBsZXZlbCB0aHJlYWQgSUQg
Zm9yIHRoZSBjdXJyZW50IHRocmVhZC4KLSAqCi0gKiBUaGUgcmV0dXJuZWQgdmFsdWUgd2lsbCB1
bmlxdWVseSBpZGVudGlmeSB0aGlzIHRocmVhZCBvbiB0aGUgc3lzdGVtLgotICoKLSAqIFRoaXMg
bWFrZXMgaXQgbW9yZSBzdWl0YWJsZSBmb3IgbG9nZ2luZyBvciBkaXNwbGF5aW5nIGluIHVzZXIg
aW50ZXJmYWNlcwotICogdGhhbiB0aGUgcmVzdWx0IG9mIGdldEN1cnJlbnRUaHJlYWRJRCgpLgot
ICoKLSAqIFRoZXJlIGFyZSBzb21lIHBvdGVudGlhbCBjYXZlYXRzIGFib3V0IHRoaXMgQVBJLCBo
b3dldmVyOgotICoKLSAqIC0gSW4gdGhlb3J5IHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGFw
cGxpY2F0aW9uIHRocmVhZHMgbWFwIG9uZS10by1vbmUgdG8KLSAqICAga2VybmVsIHRocmVhZHMu
ICBBbiBhcHBsaWNhdGlvbiB0aHJlYWRpbmcgaW1wbGVtZW50YXRpb24gY291bGQgcG90ZW50aWFs
bHkKLSAqICAgc2hhcmUgb25lIE9TIHRocmVhZCBhY3Jvc3MgbXVsdGlwbGUgYXBwbGljYXRpb24g
dGhyZWFkcywgYW5kL29yIGl0IGNvdWxkCi0gKiAgIHBvdGVudGlhbGx5IG1vdmUgYXBwbGljYXRp
b24gdGhyZWFkcyBiZXR3ZWVuIGRpZmZlcmVudCBPUyB0aHJlYWRzIG92ZXIKLSAqICAgdGltZS4g
IEhvd2V2ZXIsIGluIHByYWN0aWNlIGFsbCBvZiB0aGUgcGxhdGZvcm1zIHdlIGN1cnJlbnRseSBz
dXBwb3J0IGhhdmUKLSAqICAgYSBvbmUtdG8tb25lIG1hcHBpbmcgYmV0d2VlbiB1c2Vyc3BhY2Ug
dGhyZWFkcyBhbmQgb3BlcmF0aW5nIHN5c3RlbQotICogICB0aHJlYWRzLgotICoKLSAqIC0gVGhp
cyBBUEkgbWF5IGFsc28gYmUgc2xpZ2h0bHkgc2xvd2VyIHRoYW4gZ2V0Q3VycmVudFRocmVhZElE
KCkgb24gc29tZQotICogICBwbGF0Zm9ybXMuICBUaGlzIEFQSSBtYXkgcmVxdWlyZSBhIHN5c3Rl
bSBjYWxsLCB3aGVyZSBnZXRDdXJyZW50VGhyZWFkSUQoKQotICogICBtYXkgb25seSBuZWVkIHRv
IHJlYWQgdGhyZWFkLWxvY2FsIG1lbW9yeS4KLSAqCi0gKiBPbiBMaW51eCB0aGUgcmV0dXJuZWQg
dmFsdWUgaXMgYSBwaWRfdCwgYW5kIGNhbiBiZSB1c2VkIGluIGNvbnRleHRzCi0gKiByZXF1aXJp
bmcgYSB0aHJlYWQgcGlkX3QuCi0gKgotICogVGhlIHRocmVhZCBJRCBtYXkgYmUgcmV1c2VkIG9u
Y2UgdGhlIHRocmVhZCBpdCBjb3JyZXNwb25kcyB0byBoYXMgYmVlbgotICogam9pbmVkLgotICov
Ci1pbmxpbmUgdWludDY0X3QgZ2V0T1NUaHJlYWRJRCgpIHsKLSNpZiBfX0FQUExFX18KLSAgdWlu
dDY0X3QgdGlkOwotICBwdGhyZWFkX3RocmVhZGlkX25wKG51bGxwdHIsICZ0aWQpOwotICByZXR1
cm4gdGlkOwotI2VsaWYgX1dJTjMyCi0gIHJldHVybiB1aW50NjRfdChHZXRDdXJyZW50VGhyZWFk
SWQoKSk7Ci0jZWxzZQotICByZXR1cm4gdWludDY0X3Qoc3lzY2FsbChGT0xMWV9TWVNfZ2V0dGlk
KSk7Ci0jZW5kaWYKLX0KLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2ZvbGx5L1RocmVhZExvY2FsLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9mb2xseS9UaHJlYWRMb2NhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkNjdmM2I4MmVlNGJkMmRlNWMxZTdkNmY5NzY1ZjhiYjcxOTQxNDllLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1RocmVhZExvY2FsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwz
OTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8q
KgotICogSW1wcm92ZWQgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgZm9yIG5vbi10cml2aWFsIHR5cGVz
IChzaW1pbGFyIHNwZWVkIGFzCi0gKiBwdGhyZWFkX2dldHNwZWNpZmljIGJ1dCBvbmx5IGNvbnN1
bWVzIGEgc2luZ2xlIHB0aHJlYWRfa2V5X3QsIGFuZCA0eCBmYXN0ZXIKLSAqIHRoYW4gYm9vc3Q6
OnRocmVhZF9zcGVjaWZpY19wdHIpLgotICoKLSAqIEFsc28gaW5jbHVkZXMgYW4gYWNjZXNzb3Ig
aW50ZXJmYWNlIHRvIHdhbGsgYWxsIHRoZSB0aHJlYWQgbG9jYWwgY2hpbGQKLSAqIG9iamVjdHMg
b2YgYSBwYXJlbnQuICBhY2Nlc3NBbGxUaHJlYWRzKCkgaW5pdGlhbGl6ZXMgYW4gYWNjZXNzb3Ig
d2hpY2ggaG9sZHMKLSAqIGEgZ2xvYmFsIGxvY2sgKnRoYXQgYmxvY2tzIGFsbCBjcmVhdGlvbiBh
bmQgZGVzdHJ1Y3Rpb24gb2YgVGhyZWFkTG9jYWwKLSAqIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBU
YWcqIGFuZCBjYW4gYmUgdXNlZCBhcyBhbiBpdGVyYWJsZSBjb250YWluZXIuCi0gKiBhY2Nlc3NB
bGxUaHJlYWRzKCkgY2FuIHJhY2Ugd2l0aCBkZXN0cnVjdGlvbiBvZiB0aHJlYWQtbG9jYWwgZWxl
bWVudHMuIFdlCi0gKiBwcm92aWRlIGEgc3RyaWN0IG1vZGUgd2hpY2ggaXMgZGFuZ2Vyb3VzIGJl
Y2F1c2UgaXQgcmVxdWlyZXMgdGhlIGFjY2VzcyBsb2NrCi0gKiB0byBiZSBoZWxkIHdoaWxlIGRl
c3Ryb3lpbmcgdGhyZWFkLWxvY2FsIGVsZW1lbnRzIHdoaWNoIGNvdWxkIGNhdXNlCi0gKiBkZWFk
bG9ja3MuIFdlIGdhdGUgdGhpcyBtb2RlIGJlaGluZCB0aGUgQWNjZXNzTW9kZVN0cmljdCB0ZW1w
bGF0ZSBwYXJhbWV0ZXIuCi0gKgotICogSW50ZW5kZWQgdXNlIGlzIGZvciBmcmVxdWVudCB3cml0
ZSwgaW5mcmVxdWVudCByZWFkIGRhdGEgYWNjZXNzIHBhdHRlcm5zIHN1Y2gKLSAqIGFzIGNvdW50
ZXJzLgotICoKLSAqIFRoZXJlIGFyZSB0d28gY2xhc3NlcyBoZXJlIC0gVGhyZWFkTG9jYWwgYW5k
IFRocmVhZExvY2FsUHRyLiAgVGhyZWFkTG9jYWxQdHIKLSAqIGhhcyBzZW1hbnRpY3Mgc2ltaWxh
ciB0byBib29zdDo6dGhyZWFkX3NwZWNpZmljX3B0ci4gVGhyZWFkTG9jYWwgaXMgYSB0aGluCi0g
KiB3cmFwcGVyIGFyb3VuZCBUaHJlYWRMb2NhbFB0ciB0aGF0IG1hbmFnZXMgYWxsb2NhdGlvbiBh
dXRvbWF0aWNhbGx5LgotICoKLSAqIEBhdXRob3IgU3BlbmNlciBBaHJlbnMgKHNhaHJlbnMpCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxib29zdC9pdGVyYXRvci9pdGVyYXRvcl9m
YWNhZGUuaHBwPgotI2luY2x1ZGUgPGZvbGx5L0xpa2VseS5oPgotI2luY2x1ZGUgPGZvbGx5L1Bv
cnRhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvU2NvcGVHdWFyZC5oPgotI2luY2x1ZGUgPGZv
bGx5L1NoYXJlZE11dGV4Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvZGV0YWlsL1RocmVhZExvY2FsRGV0
YWlsLmg+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotbmFt
ZXNwYWNlIGZvbGx5IHsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRhZywgY2xhc3MgQWNj
ZXNzTW9kZT4KLWNsYXNzIFRocmVhZExvY2FsUHRyOwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xh
c3MgVGFnID0gdm9pZCwgY2xhc3MgQWNjZXNzTW9kZSA9IHZvaWQ+Ci1jbGFzcyBUaHJlYWRMb2Nh
bCB7Ci0gcHVibGljOgotICBjb25zdGV4cHIgVGhyZWFkTG9jYWwoKSA6IGNvbnN0cnVjdG9yXyhb
XSgpIHsKLSAgICAgIHJldHVybiBuZXcgVCgpOwotICAgIH0pIHt9Ci0KLSAgZXhwbGljaXQgVGhy
ZWFkTG9jYWwoc3RkOjpmdW5jdGlvbjxUKigpPiBjb25zdHJ1Y3RvcikgOgotICAgICAgY29uc3Ry
dWN0b3JfKGNvbnN0cnVjdG9yKSB7Ci0gIH0KLQotICBUKiBnZXQoKSBjb25zdCB7Ci0gICAgVCog
cHRyID0gdGxwXy5nZXQoKTsKLSAgICBpZiAoTElLRUxZKHB0ciAhPSBudWxscHRyKSkgewotICAg
ICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICAvLyBzZXBhcmF0ZWQgbmV3IGl0ZW0gY3JlYXRp
b24gb3V0IHRvIHNwZWVkIHVwIHRoZSBmYXN0IHBhdGguCi0gICAgcmV0dXJuIG1ha2VUbHAoKTsK
LSAgfQotCi0gIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7Ci0gICAgcmV0dXJuIGdldCgpOwotICB9
Ci0KLSAgVCYgb3BlcmF0b3IqKCkgY29uc3QgewotICAgIHJldHVybiAqZ2V0KCk7Ci0gIH0KLQot
ICB2b2lkIHJlc2V0KFQqIG5ld1B0ciA9IG51bGxwdHIpIHsKLSAgICB0bHBfLnJlc2V0KG5ld1B0
cik7Ci0gIH0KLQotICB0eXBlZGVmIHR5cGVuYW1lIFRocmVhZExvY2FsUHRyPFQsIFRhZywgQWNj
ZXNzTW9kZT46OkFjY2Vzc29yIEFjY2Vzc29yOwotICBBY2Nlc3NvciBhY2Nlc3NBbGxUaHJlYWRz
KCkgY29uc3QgewotICAgIHJldHVybiB0bHBfLmFjY2Vzc0FsbFRocmVhZHMoKTsKLSAgfQotCi0g
IC8vIG1vdmFibGUKLSAgVGhyZWFkTG9jYWwoVGhyZWFkTG9jYWwmJikgPSBkZWZhdWx0OwotICBU
aHJlYWRMb2NhbCYgb3BlcmF0b3I9KFRocmVhZExvY2FsJiYpID0gZGVmYXVsdDsKLQotIHByaXZh
dGU6Ci0gIC8vIG5vbi1jb3B5YWJsZQotICBUaHJlYWRMb2NhbChjb25zdCBUaHJlYWRMb2NhbCYp
ID0gZGVsZXRlOwotICBUaHJlYWRMb2NhbCYgb3BlcmF0b3I9KGNvbnN0IFRocmVhZExvY2FsJikg
PSBkZWxldGU7Ci0KLSAgVCogbWFrZVRscCgpIGNvbnN0IHsKLSAgICBhdXRvIHB0ciA9IGNvbnN0
cnVjdG9yXygpOwotICAgIHRscF8ucmVzZXQocHRyKTsKLSAgICByZXR1cm4gcHRyOwotICB9Ci0K
LSAgbXV0YWJsZSBUaHJlYWRMb2NhbFB0cjxULCBUYWcsIEFjY2Vzc01vZGU+IHRscF87Ci0gIHN0
ZDo6ZnVuY3Rpb248VCooKT4gY29uc3RydWN0b3JfOwotfTsKLQotLyoKLSAqIFRoZSBpZGVhIGhl
cmUgaXMgdGhhdCBfX3RocmVhZCBpcyBmYXN0ZXIgdGhhbiBwdGhyZWFkX2dldHNwZWNpZmljLCBz
byB3ZQotICoga2VlcCBhIF9fdGhyZWFkIGFycmF5IG9mIHBvaW50ZXJzIHRvIG9iamVjdHMgKFRo
cmVhZEVudHJ5OjplbGVtZW50cykgd2hlcmUKLSAqIGVhY2ggYXJyYXkgaGFzIGFuIGluZGV4IGZv
ciBlYWNoIHVuaXF1ZSBpbnN0YW5jZSBvZiB0aGUgVGhyZWFkTG9jYWxQdHIKLSAqIG9iamVjdC4g
IEVhY2ggVGhyZWFkTG9jYWxQdHIgb2JqZWN0IGhhcyBhIHVuaXF1ZSBpZCB0aGF0IGlzIGFuIGlu
ZGV4IGludG8KLSAqIHRoZXNlIGFycmF5cyBzbyB3ZSBjYW4gZmV0Y2ggdGhlIGNvcnJlY3Qgb2Jq
ZWN0IGZyb20gdGhyZWFkIGxvY2FsIHN0b3JhZ2UKLSAqIHZlcnkgZWZmaWNpZW50bHkuCi0gKgot
ICogSW4gb3JkZXIgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoIG9mIHRoZSBpZCBzcGFjZSBh
bmQgdGh1cyBodWdlCi0gKiBUaHJlYWRFbnRyeTo6ZWxlbWVudHMsIGFycmF5cywgZm9yIGV4YW1w
bGUgZHVlIHRvIGNvbnRpbnVvdXMgY3JlYXRpb24gYW5kCi0gKiBkZXN0cnVjdGlvbiBvZiBUaHJl
YWRMb2NhbFB0ciBvYmplY3RzLCB3ZSBrZWVwIGEgc2V0IG9mIGFsbCBhY3RpdmUKLSAqIGluc3Rh
bmNlcy4gIFdoZW4gYW4gaW5zdGFuY2UgaXMgZGVzdHJveWVkIHdlIHJlbW92ZSBpdCBmcm9tIHRo
ZSBhY3RpdmUKLSAqIHNldCBhbmQgaW5zZXJ0IHRoZSBpZCBpbnRvIGZyZWVJZHNfIGZvciByZXVz
ZS4gIFRoZXNlIG9wZXJhdGlvbnMgcmVxdWlyZSBhCi0gKiBnbG9iYWwgbXV0ZXgsIGJ1dCBvbmx5
IGhhcHBlbiBhdCBjb25zdHJ1Y3Rpb24gYW5kIGRlc3RydWN0aW9uIHRpbWUuCi0gKgotICogV2Ug
dXNlIGEgc2luZ2xlIGdsb2JhbCBwdGhyZWFkX2tleV90IHBlciBUYWcgdG8gbWFuYWdlIG9iamVj
dCBkZXN0cnVjdGlvbiBhbmQKLSAqIG1lbW9yeSBjbGVhbnVwIHVwb24gdGhyZWFkIGV4aXQgYmVj
YXVzZSB0aGVyZSBpcyBhIGZpbml0ZSBudW1iZXIgb2YKLSAqIHB0aHJlYWRfa2V5X3QncyBhdmFp
bGFibGUgcGVyIG1hY2hpbmUuCi0gKgotICogTk9URTogQXBwbGUgcGxhdGZvcm1zIGRvbid0IHN1
cHBvcnQgdGhlIHNhbWUgc2VtYW50aWNzIGZvciBfX3RocmVhZCB0aGF0Ci0gKiAgICAgICBMaW51
eCBkb2VzIChhbmQgaXQncyBvbmx5IHN1cHBvcnRlZCBhdCBhbGwgb24gaTM4NikuIEZvciB0aGVz
ZSwgdXNlCi0gKiAgICAgICBwdGhyZWFkX3NldHNwZWNpZmljKCkvcHRocmVhZF9nZXRzcGVjaWZp
YygpIGZvciB0aGUgcGVyLXRocmVhZAotICogICAgICAgc3RvcmFnZS4gIFdpbmRvd3MgKE1TVkMg
YW5kIEdDQykgZG9lcyBzdXBwb3J0IHRoZSBzYW1lIHNlbWFudGljcwotICogICAgICAgd2l0aCBf
X2RlY2xzcGVjKHRocmVhZCkKLSAqLwotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVGFnID0g
dm9pZCwgY2xhc3MgQWNjZXNzTW9kZSA9IHZvaWQ+Ci1jbGFzcyBUaHJlYWRMb2NhbFB0ciB7Ci0g
cHJpdmF0ZToKLSAgdHlwZWRlZiB0aHJlYWRsb2NhbF9kZXRhaWw6OlN0YXRpY01ldGE8VGFnLCBB
Y2Nlc3NNb2RlPiBTdGF0aWNNZXRhOwotCi0gcHVibGljOgotICBjb25zdGV4cHIgVGhyZWFkTG9j
YWxQdHIoKSA6IGlkXygpIHt9Ci0KLSAgVGhyZWFkTG9jYWxQdHIoVGhyZWFkTG9jYWxQdHImJiBv
dGhlcikgbm9leGNlcHQgOgotICAgIGlkXyhzdGQ6Om1vdmUob3RoZXIuaWRfKSkgewotICB9Ci0K
LSAgVGhyZWFkTG9jYWxQdHImIG9wZXJhdG9yPShUaHJlYWRMb2NhbFB0ciYmIG90aGVyKSB7Ci0g
ICAgYXNzZXJ0KHRoaXMgIT0gJm90aGVyKTsKLSAgICBkZXN0cm95KCk7Ci0gICAgaWRfID0gc3Rk
Ojptb3ZlKG90aGVyLmlkXyk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgflRocmVhZExv
Y2FsUHRyKCkgewotICAgIGRlc3Ryb3koKTsKLSAgfQotCi0gIFQqIGdldCgpIGNvbnN0IHsKLSAg
ICB0aHJlYWRsb2NhbF9kZXRhaWw6OkVsZW1lbnRXcmFwcGVyJiB3ID0gU3RhdGljTWV0YTo6aW5z
dGFuY2UoKS5nZXQoJmlkXyk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPih3LnB0cik7Ci0g
IH0KLQotICBUKiBvcGVyYXRvci0+KCkgY29uc3QgewotICAgIHJldHVybiBnZXQoKTsKLSAgfQot
Ci0gIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsKLSAgICByZXR1cm4gKmdldCgpOwotICB9Ci0KLSAg
VCogcmVsZWFzZSgpIHsKLSAgICB0aHJlYWRsb2NhbF9kZXRhaWw6OkVsZW1lbnRXcmFwcGVyJiB3
ID0gU3RhdGljTWV0YTo6aW5zdGFuY2UoKS5nZXQoJmlkXyk7Ci0KLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VCo+KHcucmVsZWFzZSgpKTsKLSAgfQotCi0gIHZvaWQgcmVzZXQoVCogbmV3UHRyID0g
bnVsbHB0cikgewotICAgIGF1dG8gZ3VhcmQgPSBtYWtlR3VhcmQoWyZdIHsgZGVsZXRlIG5ld1B0
cjsgfSk7Ci0gICAgdGhyZWFkbG9jYWxfZGV0YWlsOjpFbGVtZW50V3JhcHBlciYgdyA9IFN0YXRp
Y01ldGE6Omluc3RhbmNlKCkuZ2V0KCZpZF8pOwotCi0gICAgdy5kaXNwb3NlKFRMUERlc3RydWN0
aW9uTW9kZTo6VEhJU19USFJFQUQpOwotICAgIGd1YXJkLmRpc21pc3MoKTsKLSAgICB3LnNldChu
ZXdQdHIpOwotICB9Ci0KLSAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gZ2V0KCkgIT0gbnVsbHB0cjsKLSAgfQotCi0gIC8qKgotICAgKiByZXNldCgpIHRoYXQg
dHJhbnNmZXJzIG93bmVyc2hpcCBmcm9tIGEgc21hcnQgcG9pbnRlcgotICAgKi8KLSAgdGVtcGxh
dGUgPAotICAgICAgdHlwZW5hbWUgU291cmNlVCwKLSAgICAgIHR5cGVuYW1lIERlbGV0ZXIsCi0g
ICAgICB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICAgIHN0ZDo6
aXNfY29udmVydGlibGU8U291cmNlVCosIFQqPjo6dmFsdWU+Ojp0eXBlPgotICB2b2lkIHJlc2V0
KHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VULCBEZWxldGVyPiBzb3VyY2UpIHsKLSAgICBhdXRvIGRl
bGV0ZXIgPSBbZGVsZWdhdGUgPSBzb3VyY2UuZ2V0X2RlbGV0ZXIoKV0oCi0gICAgICAgIFQgKiBw
dHIsIFRMUERlc3RydWN0aW9uTW9kZSkgewotICAgICAgZGVsZWdhdGUocHRyKTsKLSAgICB9Owot
ICAgIHJlc2V0KHNvdXJjZS5yZWxlYXNlKCksIGRlbGV0ZXIpOwotICB9Ci0KLSAgLyoqCi0gICAq
IHJlc2V0KCkgdGhhdCB0cmFuc2ZlcnMgb3duZXJzaGlwIGZyb20gYSBzbWFydCBwb2ludGVyIHdp
dGggdGhlIGRlZmF1bHQKLSAgICogZGVsZXRlcgotICAgKi8KLSAgdGVtcGxhdGUgPAotICAgICAg
dHlwZW5hbWUgU291cmNlVCwKLSAgICAgIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8Ci0gICAgICAgICAgc3RkOjppc19jb252ZXJ0aWJsZTxTb3VyY2VUKiwgVCo+Ojp2YWx1ZT46
OnR5cGU+Ci0gIHZvaWQgcmVzZXQoc3RkOjp1bmlxdWVfcHRyPFNvdXJjZVQ+IHNvdXJjZSkgewot
ICAgIHJlc2V0KHNvdXJjZS5yZWxlYXNlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIHJlc2V0KCkg
d2l0aCBhIGN1c3RvbSBkZWxldGVyOgotICAgKiBkZWxldGVyKFQqIHB0ciwgVExQRGVzdHJ1Y3Rp
b25Nb2RlIG1vZGUpCi0gICAqICJtb2RlIiBpcyBBTExfVEhSRUFEUyBpZiB3ZSdyZSBkZXN0cnVj
dGluZyB0aGlzIFRocmVhZExvY2FsUHRyIChhbmQgdGh1cwotICAgKiBkZWxldGluZyBwb2ludGVy
cyBmb3IgYWxsIHRocmVhZHMpLCBhbmQgVEhJU19USFJFQUQgaWYgd2UncmUgb25seSBkZWxldGlu
ZwotICAgKiB0aGUgbWVtYmVyIGZvciBvbmUgdGhyZWFkIChiZWNhdXNlIG9mIHRocmVhZCBleGl0
IG9yIHJlc2V0KCkpLgotICAgKiBJbnZva2luZyB0aGUgZGVsZXRlciBtdXN0IG5vdCB0aHJvdy4K
LSAgICovCi0gIHRlbXBsYXRlIDxjbGFzcyBEZWxldGVyPgotICB2b2lkIHJlc2V0KFQqIG5ld1B0
ciwgY29uc3QgRGVsZXRlciYgZGVsZXRlcikgewotICAgIGF1dG8gZ3VhcmQgPSBtYWtlR3VhcmQo
WyZdIHsKLSAgICAgIGlmIChuZXdQdHIpIHsKLSAgICAgICAgZGVsZXRlcihuZXdQdHIsIFRMUERl
c3RydWN0aW9uTW9kZTo6VEhJU19USFJFQUQpOwotICAgICAgfQotICAgIH0pOwotICAgIHRocmVh
ZGxvY2FsX2RldGFpbDo6RWxlbWVudFdyYXBwZXImIHcgPSBTdGF0aWNNZXRhOjppbnN0YW5jZSgp
LmdldCgmaWRfKTsKLSAgICB3LmRpc3Bvc2UoVExQRGVzdHJ1Y3Rpb25Nb2RlOjpUSElTX1RIUkVB
RCk7Ci0gICAgZ3VhcmQuZGlzbWlzcygpOwotICAgIHcuc2V0KG5ld1B0ciwgZGVsZXRlcik7Ci0g
IH0KLQotICAvLyBIb2xkcyBhIGdsb2JhbCBsb2NrIGZvciBpdGVyYXRpb24gdGhyb3VnaCBhbGwg
dGhyZWFkIGxvY2FsIGNoaWxkIG9iamVjdHMuCi0gIC8vIENhbiBiZSB1c2VkIGFzIGFuIGl0ZXJh
YmxlIGNvbnRhaW5lci4KLSAgLy8gVXNlIGFjY2Vzc0FsbFRocmVhZHMoKSB0byBvYnRhaW4gb25l
LgotICBjbGFzcyBBY2Nlc3NvciB7Ci0gICAgZnJpZW5kIGNsYXNzIFRocmVhZExvY2FsUHRyPFQs
IFRhZywgQWNjZXNzTW9kZT47Ci0KLSAgICB0aHJlYWRsb2NhbF9kZXRhaWw6OlN0YXRpY01ldGFC
YXNlJiBtZXRhXzsKLSAgICBTaGFyZWRNdXRleCogYWNjZXNzQWxsVGhyZWFkc0xvY2tfOwotICAg
IHN0ZDo6bXV0ZXgqIGxvY2tfOwotICAgIHVpbnQzMl90IGlkXzsKLQotICAgcHVibGljOgotICAg
IGNsYXNzIEl0ZXJhdG9yOwotICAgIGZyaWVuZCBjbGFzcyBJdGVyYXRvcjsKLQotICAgIC8vIFRo
ZSBpdGVyYXRvcnMgb2J0YWluZWQgZnJvbSBBY2Nlc3NvciBhcmUgYmlkaXJlY3Rpb25hbCBpdGVy
YXRvcnMuCi0gICAgY2xhc3MgSXRlcmF0b3IgOiBwdWJsaWMgYm9vc3Q6Oml0ZXJhdG9yX2ZhY2Fk
ZTwKLSAgICAgICAgICBJdGVyYXRvciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RGVyaXZlZAotICAgICAgICAgIFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB2YWx1ZV90eXBlCi0gICAgICAgICAgYm9vc3Q6OmJpZGlyZWN0aW9uYWxfdHJhdmVyc2Fs
X3RhZz4geyAgIC8vIHRyYXZlcnNhbAotICAgICAgZnJpZW5kIGNsYXNzIEFjY2Vzc29yOwotICAg
ICAgZnJpZW5kIGNsYXNzIGJvb3N0OjppdGVyYXRvcl9jb3JlX2FjY2VzczsKLSAgICAgIGNvbnN0
IEFjY2Vzc29yKiBhY2Nlc3Nvcl87Ci0gICAgICB0aHJlYWRsb2NhbF9kZXRhaWw6OlRocmVhZEVu
dHJ5KiBlXzsKLQotICAgICAgdm9pZCBpbmNyZW1lbnQoKSB7Ci0gICAgICAgIGVfID0gZV8tPm5l
eHQ7Ci0gICAgICAgIGluY3JlbWVudFRvVmFsaWQoKTsKLSAgICAgIH0KLQotICAgICAgdm9pZCBk
ZWNyZW1lbnQoKSB7Ci0gICAgICAgIGVfID0gZV8tPnByZXY7Ci0gICAgICAgIGRlY3JlbWVudFRv
VmFsaWQoKTsKLSAgICAgIH0KLQotICAgICAgVCYgZGVyZWZlcmVuY2UoKSBjb25zdCB7Ci0gICAg
ICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8VCo+KGVfLT5lbGVtZW50c1thY2Nlc3Nvcl8tPmlkX10u
cHRyKTsKLSAgICAgIH0KLQotICAgICAgYm9vbCBlcXVhbChjb25zdCBJdGVyYXRvciYgb3RoZXIp
IGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIChhY2Nlc3Nvcl8tPmlkXyA9PSBvdGhlci5hY2Nlc3Nv
cl8tPmlkXyAmJgotICAgICAgICAgICAgICAgIGVfID09IG90aGVyLmVfKTsKLSAgICAgIH0KLQot
ICAgICAgZXhwbGljaXQgSXRlcmF0b3IoY29uc3QgQWNjZXNzb3IqIGFjY2Vzc29yKQotICAgICAg
ICA6IGFjY2Vzc29yXyhhY2Nlc3NvciksCi0gICAgICAgICAgZV8oJmFjY2Vzc29yXy0+bWV0YV8u
aGVhZF8pIHsKLSAgICAgIH0KLQotICAgICAgYm9vbCB2YWxpZCgpIGNvbnN0IHsKLSAgICAgICAg
cmV0dXJuIChlXy0+ZWxlbWVudHMgJiYKLSAgICAgICAgICAgICAgICBhY2Nlc3Nvcl8tPmlkXyA8
IGVfLT5lbGVtZW50c0NhcGFjaXR5ICYmCi0gICAgICAgICAgICAgICAgZV8tPmVsZW1lbnRzW2Fj
Y2Vzc29yXy0+aWRfXS5wdHIpOwotICAgICAgfQotCi0gICAgICB2b2lkIGluY3JlbWVudFRvVmFs
aWQoKSB7Ci0gICAgICAgIGZvciAoOyBlXyAhPSAmYWNjZXNzb3JfLT5tZXRhXy5oZWFkXyAmJiAh
dmFsaWQoKTsgZV8gPSBlXy0+bmV4dCkgeyB9Ci0gICAgICB9Ci0KLSAgICAgIHZvaWQgZGVjcmVt
ZW50VG9WYWxpZCgpIHsKLSAgICAgICAgZm9yICg7IGVfICE9ICZhY2Nlc3Nvcl8tPm1ldGFfLmhl
YWRfICYmICF2YWxpZCgpOyBlXyA9IGVfLT5wcmV2KSB7IH0KLSAgICAgIH0KLSAgICB9OwotCi0g
ICAgfkFjY2Vzc29yKCkgewotICAgICAgcmVsZWFzZSgpOwotICAgIH0KLQotICAgIEl0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgewotICAgICAgcmV0dXJuICsrSXRlcmF0b3IodGhpcyk7Ci0gICAgfQot
Ci0gICAgSXRlcmF0b3IgZW5kKCkgY29uc3QgewotICAgICAgcmV0dXJuIEl0ZXJhdG9yKHRoaXMp
OwotICAgIH0KLQotICAgIEFjY2Vzc29yKGNvbnN0IEFjY2Vzc29yJikgPSBkZWxldGU7Ci0gICAg
QWNjZXNzb3ImIG9wZXJhdG9yPShjb25zdCBBY2Nlc3NvciYpID0gZGVsZXRlOwotCi0gICAgQWNj
ZXNzb3IoQWNjZXNzb3ImJiBvdGhlcikgbm9leGNlcHQKLSAgICAgICAgOiBtZXRhXyhvdGhlci5t
ZXRhXyksCi0gICAgICAgICAgYWNjZXNzQWxsVGhyZWFkc0xvY2tfKG90aGVyLmFjY2Vzc0FsbFRo
cmVhZHNMb2NrXyksCi0gICAgICAgICAgbG9ja18ob3RoZXIubG9ja18pLAotICAgICAgICAgIGlk
XyhvdGhlci5pZF8pIHsKLSAgICAgIG90aGVyLmlkXyA9IDA7Ci0gICAgICBvdGhlci5hY2Nlc3NB
bGxUaHJlYWRzTG9ja18gPSBudWxscHRyOwotICAgICAgb3RoZXIubG9ja18gPSBudWxscHRyOwot
ICAgIH0KLQotICAgIEFjY2Vzc29yJiBvcGVyYXRvcj0oQWNjZXNzb3ImJiBvdGhlcikgbm9leGNl
cHQgewotICAgICAgLy8gRWFjaCBUYWcgaGFzIGl0cyBvd24gdW5pcXVlIG1ldGEsIGFuZCBhY2Nl
c3NvcnMgd2l0aCBkaWZmZXJlbnQgVGFncwotICAgICAgLy8gaGF2ZSBkaWZmZXJlbnQgdHlwZXMu
ICBTbyBlaXRoZXIgKnRoaXMgaXMgZW1wdHksIG9yIHRoaXMgYW5kIG90aGVyCi0gICAgICAvLyBo
YXZlIHRoZSBzYW1lIHRhZy4gIEJ1dCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgdGFnLCB0aGV5IGhh
dmUgdGhlIHNhbWUKLSAgICAgIC8vIG1ldGEgKGFuZCBsb2NrKSwgc28gdGhleSdkIGJvdGggaG9s
ZCB0aGUgbG9jayBhdCB0aGUgc2FtZSB0aW1lLAotICAgICAgLy8gd2hpY2ggaXMgaW1wb3NzaWJs
ZSwgd2hpY2ggbGVhdmVzIG9ubHkgb25lIHBvc3NpYmxlIHNjZW5hcmlvIC0tCi0gICAgICAvLyAq
dGhpcyBpcyBlbXB0eS4gIEFzc2VydCBpdC4KLSAgICAgIGFzc2VydCgmbWV0YV8gPT0gJm90aGVy
Lm1ldGFfKTsKLSAgICAgIGFzc2VydChsb2NrXyA9PSBudWxscHRyKTsKLSAgICAgIHVzaW5nIHN0
ZDo6c3dhcDsKLSAgICAgIHN3YXAoYWNjZXNzQWxsVGhyZWFkc0xvY2tfLCBvdGhlci5hY2Nlc3NB
bGxUaHJlYWRzTG9ja18pOwotICAgICAgc3dhcChsb2NrXywgb3RoZXIubG9ja18pOwotICAgICAg
c3dhcChpZF8sIG90aGVyLmlkXyk7Ci0gICAgfQotCi0gICAgQWNjZXNzb3IoKQotICAgICAgICA6
IG1ldGFfKHRocmVhZGxvY2FsX2RldGFpbDo6U3RhdGljTWV0YTxUYWcsIEFjY2Vzc01vZGU+Ojpp
bnN0YW5jZSgpKSwKLSAgICAgICAgICBhY2Nlc3NBbGxUaHJlYWRzTG9ja18obnVsbHB0ciksCi0g
ICAgICAgICAgbG9ja18obnVsbHB0ciksCi0gICAgICAgICAgaWRfKDApIHt9Ci0KLSAgIHByaXZh
dGU6Ci0gICAgZXhwbGljaXQgQWNjZXNzb3IodWludDMyX3QgaWQpCi0gICAgICAgIDogbWV0YV8o
dGhyZWFkbG9jYWxfZGV0YWlsOjpTdGF0aWNNZXRhPFRhZywgQWNjZXNzTW9kZT46Omluc3RhbmNl
KCkpLAotICAgICAgICAgIGFjY2Vzc0FsbFRocmVhZHNMb2NrXygmbWV0YV8uYWNjZXNzQWxsVGhy
ZWFkc0xvY2tfKSwKLSAgICAgICAgICBsb2NrXygmbWV0YV8ubG9ja18pIHsKLSAgICAgIGFjY2Vz
c0FsbFRocmVhZHNMb2NrXy0+bG9jaygpOwotICAgICAgbG9ja18tPmxvY2soKTsKLSAgICAgIGlk
XyA9IGlkOwotICAgIH0KLQotICAgIHZvaWQgcmVsZWFzZSgpIHsKLSAgICAgIGlmIChsb2NrXykg
ewotICAgICAgICBsb2NrXy0+dW5sb2NrKCk7Ci0gICAgICAgIERDSEVDSyhhY2Nlc3NBbGxUaHJl
YWRzTG9ja18gIT0gbnVsbHB0cik7Ci0gICAgICAgIGFjY2Vzc0FsbFRocmVhZHNMb2NrXy0+dW5s
b2NrKCk7Ci0gICAgICAgIGlkXyA9IDA7Ci0gICAgICAgIGxvY2tfID0gbnVsbHB0cjsKLSAgICAg
ICAgYWNjZXNzQWxsVGhyZWFkc0xvY2tfID0gbnVsbHB0cjsKLSAgICAgIH0KLSAgICB9Ci0gIH07
Ci0KLSAgLy8gYWNjZXNzb3IgYWxsb3dzIGEgY2xpZW50IHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwg
dGhyZWFkIGxvY2FsIGNoaWxkCi0gIC8vIGVsZW1lbnRzIG9mIHRoaXMgVGhyZWFkTG9jYWwgaW5z
dGFuY2UuICBIb2xkcyBhIGdsb2JhbCBsb2NrIGZvciBlYWNoIDxUYWc+Ci0gIEFjY2Vzc29yIGFj
Y2Vzc0FsbFRocmVhZHMoKSBjb25zdCB7Ci0gICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19zYW1l
PFRhZywgdm9pZD46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgIk11c3QgdXNlIGEgdW5pcXVl
IFRhZyB0byB1c2UgdGhlIGFjY2Vzc0FsbFRocmVhZHMgZmVhdHVyZSIpOwotICAgIHJldHVybiBB
Y2Nlc3NvcihpZF8uZ2V0T3JBbGxvY2F0ZShTdGF0aWNNZXRhOjppbnN0YW5jZSgpKSk7Ci0gIH0K
LQotIHByaXZhdGU6Ci0gIHZvaWQgZGVzdHJveSgpIHsKLSAgICBTdGF0aWNNZXRhOjppbnN0YW5j
ZSgpLmRlc3Ryb3koJmlkXyk7Ci0gIH0KLQotICAvLyBub24tY29weWFibGUKLSAgVGhyZWFkTG9j
YWxQdHIoY29uc3QgVGhyZWFkTG9jYWxQdHImKSA9IGRlbGV0ZTsKLSAgVGhyZWFkTG9jYWxQdHIm
IG9wZXJhdG9yPShjb25zdCBUaHJlYWRMb2NhbFB0ciYpID0gZGVsZXRlOwotCi0gIG11dGFibGUg
dHlwZW5hbWUgU3RhdGljTWV0YTo6RW50cnlJRCBpZF87Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ug
Zm9sbHkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Zv
bGx5L1RyYWl0cy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkv
VHJhaXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNDQyYmVhMTc5ZDg0NTNk
MDJmZTliOGRhMzEzMDg1NzYzMTQ0MDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkv
VHJhaXRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8vIEBhdXRob3I6IEFuZHJlaSBBbGV4YW5kcmVz
Y3UKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPGxp
bWl0cz4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0KLSNpbmNs
dWRlIDxmb2xseS9Qb3J0YWJpbGl0eS5oPgotCi0vLyBsaWJjKysgZG9lc24ndCBwcm92aWRlIHRo
aXMgaGVhZGVyLCBub3IgZG9lcyBtc3ZjCi0jaWZkZWYgRk9MTFlfSEFWRV9CSVRTX0NYWENPTkZJ
R19ICi0vLyBUaGlzIGZpbGUgYXBwZWFycyBpbiB0d28gbG9jYXRpb25zOiBpbnNpZGUgZmJjb2Rl
IGFuZCBpbiB0aGUKLS8vIGxpYnN0ZGMrKyBzb3VyY2UgY29kZSAod2hlbiBlbWJlZGRpbmcgZmJz
dHJpbmcgYXMgc3RkOjpzdHJpbmcpLgotLy8gVG8gYWlkIGluIHRoaXMgc2NoaXpvcGhyZW5pYyB1
c2UsIHR3byBtYWNyb3MgYXJlIGRlZmluZWQgaW4KLS8vIGMrK2NvbmZpZy5oOgotLy8gICBfTElC
U1REQ1hYX0ZCU1RSSU5HIC0gU2V0IGluc2lkZSBsaWJzdGRjKysuICBUaGlzIGlzIHVzZWZ1bCB0
bwotLy8gICAgICBnYXRlIHVzZSBpbnNpZGUgZmJjb2RlIHYuIGxpYnN0ZGMrKwotI2luY2x1ZGUg
PGJpdHMvYysrY29uZmlnLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBGT0xMWV9DUkVBVEVfSEFTX01F
TUJFUl9UWVBFX1RSQUlUUyhjbGFzc25hbWUsIHR5cGVfbmFtZSkgICAgICAgICAgICAgIFwKLSAg
dGVtcGxhdGUgPHR5cGVuYW1lIFRUaGVDbGFzc18+ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIHN0cnVjdCBjbGFzc25hbWUjI19fZm9sbHlfdHJhaXRz
X2ltcGxfXyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVVGhlQ2xhc3NfPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGVzdCh0eXBlbmFtZSBV
VGhlQ2xhc3NfOjp0eXBlX25hbWUqKSB7ICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gdHJ1
ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWU+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRlc3QoLi4uKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVFRoZUNsYXNzXz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgdXNpbmcgY2xhc3NuYW1lID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25h
bDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBjbGFzc25hbWUjI19f
Zm9sbHlfdHJhaXRzX2ltcGxfXzxUVGhlQ2xhc3NfPjo6dGVtcGxhdGUgdGVzdDxUVGhlQ2xhc3Nf
PiggXAotICAgICAgICAgIG51bGxwdHIpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHN0ZDo6dHJ1ZV90eXBlLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICBzdGQ6OmZhbHNlX3R5cGU+Ojp0eXBlOwotCi0jZGVmaW5lIEZPTExZX0NSRUFURV9IQVNf
TUVNQkVSX0ZOX1RSQUlUU19JTVBMKGNsYXNzbmFtZSwgZnVuY19uYW1lLCBjdl9xdWFsKSBcCi0g
IHRlbXBsYXRlIDx0eXBlbmFtZSBUVGhlQ2xhc3NfLCB0eXBlbmFtZSBSVGhlUmV0dXJuXywgdHlw
ZW5hbWUuLi4gVFRoZUFyZ3NfPiBcCi0gIHN0cnVjdCBjbGFzc25hbWUjI19fZm9sbHlfdHJhaXRz
X2ltcGxfXzwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBUVGhl
Q2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICBSVGhlUmV0dXJuXyhUVGhlQXJnc18uLi4pIGN2X3F1YWw+IHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdGVtcGxhdGUgPCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIHR5cGVuYW1lIFVUaGVDbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFJUaGVSZXR1cm5fIChVVGhlQ2xh
c3NfOjoqKShUVGhlQXJnc18uLi4pIGN2X3F1YWw+ICAgICAgICAgICAgICAgICAgICBcCi0gICAg
c3RydWN0IHNmaW5hZSB7fTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFVUaGVDbGFzc18+ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3RhdGljIHN0
ZDo6dHJ1ZV90eXBlIHRlc3Qoc2ZpbmFlPFVUaGVDbGFzc18sICZVVGhlQ2xhc3NfOjpmdW5jX25h
bWU+Kik7ICBcCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lPiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3RhdGljIHN0ZDo6ZmFsc2Vf
dHlwZSB0ZXN0KC4uLik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIH0KLQotLyoKLSAqIFRoZSBGT0xMWV9DUkVBVEVfSEFTX01FTUJFUl9GTl9UUkFJVFMgaXMg
dXNlZCB0byBjcmVhdGUgdHJhaXRzCi0gKiBjbGFzc2VzIHRoYXQgY2hlY2sgZm9yIHRoZSBleGlz
dGVuY2Ugb2YgYSBtZW1iZXIgZnVuY3Rpb24gd2l0aAotICogYSBnaXZlbiBuYW1lIGFuZCBzaWdu
YXR1cmUuIEl0IGN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0Ci0gKiBjaGVja2luZyBmb3IgaW5o
ZXJpdGVkIG1lbWJlcnMuCi0gKgotICogU3VjaCBjbGFzc2VzIHJlY2VpdmUgdHdvIHRlbXBsYXRl
IHBhcmFtZXRlcnM6IHRoZSBjbGFzcyB0byBiZSBjaGVja2VkCi0gKiBhbmQgdGhlIHNpZ25hdHVy
ZSBvZiB0aGUgbWVtYmVyIGZ1bmN0aW9uLiBBIHN0YXRpYyBib29sZWFuIGZpZWxkCi0gKiBuYW1l
ZCBgdmFsdWVgICh3aGljaCBpcyBhbHNvIGNvbnN0ZXhwcikgdGVsbHMgd2hldGhlciBzdWNoIG1l
bWJlcgotICogZnVuY3Rpb24gZXhpc3RzLgotICoKLSAqIEVhY2ggdHJhaXRzIGNsYXNzIGNyZWF0
ZWQgaXMgYm91bmQgb25seSB0byB0aGUgbWVtYmVyIG5hbWUsIG5vdCB0bwotICogaXRzIHNpZ25h
dHVyZSBub3IgdG8gdGhlIHR5cGUgb2YgdGhlIGNsYXNzIGNvbnRhaW5pbmcgaXQuCi0gKgotICog
U2F5IHlvdSBuZWVkIHRvIGtub3cgaWYgYSBnaXZlbiBjbGFzcyBoYXMgYSBtZW1iZXIgZnVuY3Rp
b24gbmFtZWQKLSAqIGB0ZXN0YCB3aXRoIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlOgotICoKLSAq
ICAgIGludCB0ZXN0KCkgY29uc3Q7Ci0gKgotICogWW91J2QgbmVlZCB0aGlzIG1hY3JvIHRvIGNy
ZWF0ZSBhIHRyYWl0cyBjbGFzcyB0byBjaGVjayBmb3IgYSBtZW1iZXIKLSAqIG5hbWVkIGB0ZXN0
YCwgYW5kIHRoZW4gdXNlIHRoaXMgdHJhaXRzIGNsYXNzIHRvIGNoZWNrIGZvciB0aGUgc2lnbmF0
dXJlOgotICoKLSAqIG5hbWVzcGFjZSB7Ci0gKgotICogRk9MTFlfQ1JFQVRFX0hBU19NRU1CRVJf
Rk5fVFJBSVRTKGhhc190ZXN0X3RyYWl0cywgdGVzdCk7Ci0gKgotICogfSAvLyB1bm5hbWVkLW5h
bWVzcGFjZQotICoKLSAqIHZvaWQgc29tZV9mdW5jKCkgewotICogICBjb3V0IDw8ICJEb2VzIGNs
YXNzIEZvbyBoYXZlIGEgbWVtYmVyIGludCB0ZXN0KCkgY29uc3Q/ICIKLSAqICAgICA8PCBib29s
YWxwaGEgPDwgaGFzX3Rlc3RfdHJhaXRzPEZvbywgaW50KCkgY29uc3Q+Ojp2YWx1ZTsKLSAqIH0K
LSAqCi0gKiBZb3UgY2FuIHVzZSB0aGUgc2FtZSB0cmFpdHMgY2xhc3MgdG8gdGVzdCBmb3IgYSBj
b21wbGV0ZWx5IGRpZmZlcmVudAotICogc2lnbmF0dXJlLCBvbiBhIGNvbXBsZXRlbHkgZGlmZmVy
ZW50IGNsYXNzLCBhcyBsb25nIGFzIHRoZSBtZW1iZXIgbmFtZQotICogaXMgdGhlIHNhbWU6Ci0g
KgotICogdm9pZCBzb21lX2Z1bmMoKSB7Ci0gKiAgIGNvdXQgPDwgIkRvZXMgY2xhc3MgRm9vIGhh
dmUgYSBtZW1iZXIgaW50IHRlc3QoKT8gIgotICogICAgIDw8IGJvb2xhbHBoYSA8PCBoYXNfdGVz
dF90cmFpdHM8Rm9vLCBpbnQoKT46OnZhbHVlOwotICogICBjb3V0IDw8ICJEb2VzIGNsYXNzIEZv
byBoYXZlIGEgbWVtYmVyIGludCB0ZXN0KCkgY29uc3Q/ICIKLSAqICAgICA8PCBib29sYWxwaGEg
PDwgaGFzX3Rlc3RfdHJhaXRzPEZvbywgaW50KCkgY29uc3Q+Ojp2YWx1ZTsKLSAqICAgY291dCA8
PCAiRG9lcyBjbGFzcyBCYXIgaGF2ZSBhIG1lbWJlciBkb3VibGUgdGVzdChjb25zdCBzdHJpbmcm
LCBsb25nKT8gIgotICogICAgIDw8IGJvb2xhbHBoYSA8PCBoYXNfdGVzdF90cmFpdHM8QmFyLCBk
b3VibGUoY29uc3Qgc3RyaW5nJiwgbG9uZyk+Ojp2YWx1ZTsKLSAqIH0KLSAqCi0gKiBAYXV0aG9y
OiBNYXJjZWxvIEp1Y2hlbSA8bWFyY2Vsb0BmYi5jb20+Ci0gKi8KLSNkZWZpbmUgRk9MTFlfQ1JF
QVRFX0hBU19NRU1CRVJfRk5fVFJBSVRTKGNsYXNzbmFtZSwgZnVuY19uYW1lKSAgICAgICAgICAg
ICAgIFwKLSAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZT4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgc3RydWN0IGNsYXNzbmFtZSMjX19mb2xs
eV90cmFpdHNfaW1wbF9fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
Rk9MTFlfQ1JFQVRFX0hBU19NRU1CRVJfRk5fVFJBSVRTX0lNUEwoY2xhc3NuYW1lLCBmdW5jX25h
bWUsICk7ICAgICAgICAgICAgIFwKLSAgRk9MTFlfQ1JFQVRFX0hBU19NRU1CRVJfRk5fVFJBSVRT
X0lNUEwoY2xhc3NuYW1lLCBmdW5jX25hbWUsIGNvbnN0KTsgICAgICAgIFwKLSAgRk9MTFlfQ1JF
QVRFX0hBU19NRU1CRVJfRk5fVFJBSVRTX0lNUEwoICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgIGNsYXNzbmFtZSwgZnVuY19uYW1lLCAvKiBub2xpbnQgKi8gdm9s
YXRpbGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRk9MTFlfQ1JFQVRFX0hBU19N
RU1CRVJfRk5fVFJBSVRTX0lNUEwoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgIGNsYXNzbmFtZSwgZnVuY19uYW1lLCAvKiBub2xpbnQgKi8gdm9sYXRpbGUgY29u
c3QpOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFRUaGVDbGFz
c18sIHR5cGVuYW1lIFRUaGVTaWduYXR1cmVfPiAgICAgICAgICAgICAgICAgICAgIFwKLSAgdXNp
bmcgY2xhc3NuYW1lID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgIGRlY2x0eXBlKGNsYXNzbmFtZSMjX19mb2xseV90cmFp
dHNfaW1wbF9fPFRUaGVDbGFzc18sIFRUaGVTaWduYXR1cmVfPjo6IFwKLSAgICAgICAgICAgICAg
ICAgICB0ZW1wbGF0ZSB0ZXN0PFRUaGVDbGFzc18+KG51bGxwdHIpKQotCi1uYW1lc3BhY2UgZm9s
bHkgewotCi0vKioqCi0gKiAgX3QKLSAqCi0gKiAgSW5zdGVhZCBvZjoKLSAqCi0gKiAgICB1c2lu
ZyBkZWNheWVkID0gdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZTsKLSAqCi0gKiAgV2l0aCB0
aGUgQysrMTQgc3RhbmRhcmQgdHJhaXQgYWxpYXNlcywgd2UgY291bGQgdXNlOgotICoKLSAqICAg
IHVzaW5nIGRlY2F5ZWQgPSBzdGQ6OmRlY2F5X3Q8VD47Ci0gKgotICogIFdpdGhvdXQgdGhlbSwg
d2UgY291bGQgdXNlOgotICoKLSAqICAgIHVzaW5nIGRlY2F5ZWQgPSBfdDxzdGQ6OmRlY2F5PFQ+
PjsKLSAqCi0gKiAgQWxzbyB1c2VmdWwgZm9yIGFueSBvdGhlciBsaWJyYXJ5IHdpdGggdGVtcGxh
dGUgdHlwZXMgaGF2aW5nIGRlcGVuZGVudAotICogIG1lbWJlciB0eXBlcyBuYW1lZCBgdHlwZWAs
IGxpa2UgdGhlIHN0YW5kYXJkIHRyYWl0IHR5cGVzLgotICovCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KLXVzaW5nIF90ID0gdHlwZW5hbWUgVDo6dHlwZTsKLQotLyoqCi0gKiAgdm9pZF90Ci0gKgot
ICogIEEgdHlwZSBhbGlhcyBmb3IgYHZvaWRgLiBgdm9pZF90YCBpcyB1c2VmdWwgZm9yIGNvbnRy
b2xpbmcgY2xhc3MtdGVtcGxhdGUKLSAqICBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uLgotICoKLSAq
ICBFeGFtcGxlOgotICoKLSAqICAgIC8vIGhhc192YWx1ZV90eXBlPFQ+Ojp2YWx1ZSBpcyB0cnVl
IGlmIFQgaGFzIGEgbmVzdGVkIHR5cGUgYHZhbHVlX3R5cGVgCi0gKiAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVCwgY2xhc3MgPSB2b2lkPgotICogICAgc3RydWN0IGhhc192YWx1ZV90eXBlCi0gKiAgICAg
ICAgOiBzdGQ6OmZhbHNlX3R5cGUge307Ci0gKgotICogICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0g
KiAgICBzdHJ1Y3QgaGFzX3ZhbHVlX3R5cGU8VCwgZm9sbHk6OnZvaWRfdDx0eXBlbmFtZSBUOjp2
YWx1ZV90eXBlPj4KLSAqICAgICAgICA6IHN0ZDo6dHJ1ZV90eXBlIHt9OwotICovCi0jaWYgZGVm
aW5lZChfX2NwcF9saWJfdm9pZF90KSB8fCBkZWZpbmVkKF9NU0NfVkVSKQotCi0vKiB1c2luZyBv
dmVycmlkZSAqLyB1c2luZyBzdGQ6OnZvaWRfdDsKLQotI2Vsc2UgLy8gZGVmaW5lZChfX2NwcF9s
aWJfdm9pZF90KSB8fCBkZWZpbmVkKF9NU0NfVkVSKQotCi1uYW1lc3BhY2UgdHJhaXRzX2RldGFp
bCB7Ci10ZW1wbGF0ZSA8Y2xhc3MuLi4+Ci1zdHJ1Y3Qgdm9pZF90XyB7Ci0gIHVzaW5nIHR5cGUg
PSB2b2lkOwotfTsKLX0gLy8gbmFtZXNwYWNlIHRyYWl0c19kZXRhaWwKLQotdGVtcGxhdGUgPGNs
YXNzLi4uIFRzPgotdXNpbmcgdm9pZF90ID0gX3Q8dHJhaXRzX2RldGFpbDo6dm9pZF90XzxUcy4u
Lj4+OwotCi0jZW5kaWYgLy8gZGVmaW5lZChfX2NwcF9saWJfdm9pZF90KSB8fCBkZWZpbmVkKF9N
U0NfVkVSKQotCi0vKioKLSAqIElzUmVsb2NhdGFibGU8VD46OnZhbHVlIGRlc2NyaWJlcyB0aGUg
YWJpbGl0eSBvZiBtb3ZpbmcgYXJvdW5kCi0gKiBtZW1vcnkgYSB2YWx1ZSBvZiB0eXBlIFQgYnkg
dXNpbmcgbWVtY3B5IChhcyBvcHBvc2VkIHRvIHRoZQotICogY29uc2VydmF0aXZlIGFwcHJvYWNo
IG9mIGNhbGxpbmcgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIHRoZW4KLSAqIGRlc3Ryb3lpbmcg
dGhlIG9sZCB0ZW1wb3JhcnkuIEVzc2VudGlhbGx5IGZvciBhIHJlbG9jYXRhYmxlIHR5cGUsCi0g
KiB0aGUgZm9sbG93aW5nIHR3byBzZXF1ZW5jZXMgb2YgY29kZSBzaG91bGQgYmUgc2VtYW50aWNh
bGx5Ci0gKiBlcXVpdmFsZW50OgotICoKLSAqIHZvaWQgbW92ZTEoVCAqIGZyb20sIFQgKiB0bykg
ewotICogICBuZXcodG8pIFQoZnJvbSk7Ci0gKiAgICgqZnJvbSkuflQoKTsKLSAqIH0KLSAqCi0g
KiB2b2lkIG1vdmUyKFQgKiBmcm9tLCBUICogdG8pIHsKLSAqICAgbWVtY3B5KHRvLCBmcm9tLCBz
aXplb2YoVCkpOwotICogfQotICoKLSAqIE1vc3QgQysrIHR5cGVzIGFyZSByZWxvY2F0YWJsZTsg
dGhlIG9uZXMgdGhhdCBhcmVuJ3Qgd291bGQgaW5jbHVkZQotICogaW50ZXJuYWwgcG9pbnRlcnMg
b3IgKHZlcnkgcmFyZWx5KSB3b3VsZCBuZWVkIHRvIHVwZGF0ZSByZW1vdGUKLSAqIHBvaW50ZXJz
IHRvIHBvaW50ZXJzIHRyYWNraW5nIHRoZW0uIEFsbCBDKysgcHJpbWl0aXZlIHR5cGVzIGFuZAot
ICogdHlwZSBjb25zdHJ1Y3RvcnMgYXJlIHJlbG9jYXRhYmxlLgotICoKLSAqIFRoaXMgcHJvcGVy
dHkgY2FuIGJlIHVzZWQgaW4gYSB2YXJpZXR5IG9mIG9wdGltaXphdGlvbnMuIEN1cnJlbnRseQot
ICogZmJ2ZWN0b3IgdXNlcyB0aGlzIHByb3BlcnR5IGludGVuc2l2ZWx5LgotICoKLSAqIFRoZSBk
ZWZhdWx0IGNvbnNlcnZhdGl2ZWx5IGFzc3VtZXMgdGhlIHR5cGUgaXMgbm90Ci0gKiByZWxvY2F0
YWJsZS4gU2V2ZXJhbCBzcGVjaWFsaXphdGlvbnMgYXJlIGRlZmluZWQgZm9yIGtub3duCi0gKiB0
eXBlcy4gWW91IG1heSB3YW50IHRvIGFkZCB5b3VyIG93biBzcGVjaWFsaXphdGlvbnMuIERvIHNv
IGluCi0gKiBuYW1lc3BhY2UgZm9sbHkgYW5kIG1ha2Ugc3VyZSB5b3Uga2VlcCB0aGUgc3BlY2lh
bGl6YXRpb24gb2YKLSAqIElzUmVsb2NhdGFibGU8U29tZVN0cnVjdD4gaW4gdGhlIHNhbWUgaGVh
ZGVyIGFzIFNvbWVTdHJ1Y3QuCi0gKgotICogWW91IG1heSBhbHNvIGRlY2xhcmUgYSB0eXBlIHRv
IGJlIHJlbG9jYXRhYmxlIGJ5IGluY2x1ZGluZwotICogICAgYHR5cGVkZWYgc3RkOjp0cnVlX3R5
cGUgSXNSZWxvY2F0YWJsZTtgCi0gKiBpbiB0aGUgY2xhc3MgaGVhZGVyLgotICoKLSAqIEl0IG1h
eSBiZSB1bnNldCBpbiBhIGJhc2UgY2xhc3MgYnkgb3ZlcnJpZGluZyB0aGUgdHlwZWRlZiB0byBm
YWxzZV90eXBlLgotICovCi0vKgotICogSXNUcml2aWFsbHlDb3B5YWJsZSBkZXNjcmliZXMgdGhl
IHZhbHVlIHNlbWFudGljcyBwcm9wZXJ0eS4gQysrMTEgY29udGFpbnMKLSAqIHRoZSB0eXBlIHRy
YWl0IGlzX3RyaXZpYWxseV9jb3B5YWJsZTsgaG93ZXZlciwgaXQgaXMgbm90IHlldCBpbXBsZW1l
bnRlZAotICogaW4gZ2NjIChhcyBvZiA0LjcuMSksIGFuZCB0aGUgdXNlciBtYXkgd2lzaCB0byBz
cGVjaWZ5IG90aGVyd2lzZS4KLSAqLwotLyoKLSAqIElzWmVyb0luaXRpYWxpemFibGUgZGVzY3Jp
YmVzIHRoZSBwcm9wZXJ0eSB0aGF0IGRlZmF1bHQgY29uc3RydWN0aW9uIGlzIHRoZQotICogc2Ft
ZSBhcyBtZW1zZXQoZHN0LCAwLCBzaXplb2YoVCkpLgotICovCi0KLW5hbWVzcGFjZSB0cmFpdHNf
ZGV0YWlsIHsKLQotI2RlZmluZSBGT0xMWV9IQVNfVFJVRV9YWFgobmFtZSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEZPTExZX0NSRUFURV9IQVNfTUVN
QkVSX1RZUEVfVFJBSVRTKGhhc18jI25hbWUsIG5hbWUpOyAgICAgICAgICAgICAgICAgICAgIFwK
LSAgdGVtcGxhdGUgPGNsYXNzIFQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBzdHJ1Y3QgbmFtZSMjX2lzX3RydWUgOiBzdGQ6Omlz
X3NhbWU8dHlwZW5hbWUgVDo6bmFtZSwgc3RkOjp0cnVlX3R5cGU+IHt9OyBcCi0gIHRlbXBsYXRl
IDxjbGFzcyBUPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgc3RydWN0IGhhc190cnVlXyMjbmFtZSA6IHN0ZDo6Y29uZGl0aW9uYWw8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhhc18jI25hbWU8VD46OnZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSMjX2lzX3RydWU8VD4sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OmZhbHNlX3R5cGU+Ojp0eXBlIHt9OwotCi1GT0xMWV9IQVNfVFJVRV9YWFgoSXNSZWxvY2F0
YWJsZSkKLUZPTExZX0hBU19UUlVFX1hYWChJc1plcm9Jbml0aWFsaXphYmxlKQotRk9MTFlfSEFT
X1RSVUVfWFhYKElzVHJpdmlhbGx5Q29weWFibGUpCi0KLSN1bmRlZiBGT0xMWV9IQVNfVFJVRV9Y
WFgKLQotLy8gT2xkZXIgdmVyc2lvbnMgb2YgbGlic3RkYysrIGRvIG5vdCBwcm92aWRlIHN0ZDo6
aXNfdHJpdmlhbGx5X2NvcHlhYmxlCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pICYmICFkZWZpbmVk
KF9MSUJDUFBfVkVSU0lPTikKLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX3RyaXZpYWxs
eV9jb3B5YWJsZQotICAgIDogc3RkOjppbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2lzX3RyaXZp
YWxseV9jb3B5YWJsZShUKT4ge307Ci0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5l
ZChfX2NsYW5nX18pICYmIF9fR05VQ19fIDwgNQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3Qg
aXNfdHJpdmlhbGx5X2NvcHlhYmxlIDogc3RkOjppc190cml2aWFsPFQ+IHt9OwotI2Vsc2UKLXRl
bXBsYXRlIDxjbGFzcyBUPgotdXNpbmcgaXNfdHJpdmlhbGx5X2NvcHlhYmxlID0gc3RkOjppc190
cml2aWFsbHlfY29weWFibGU8VD47Ci0jZW5kaWYKLX0KLQotc3RydWN0IElnbm9yZSB7Ci0gIHRl
bXBsYXRlIDxjbGFzcyBUPgotICAvKiBpbXBsaWNpdCAqLyBJZ25vcmUoY29uc3QgVCYpIHt9Ci0g
IHRlbXBsYXRlIDxjbGFzcyBUPgotICBjb25zdCBJZ25vcmUmIG9wZXJhdG9yPShUIGNvbnN0Jikg
Y29uc3QgeyByZXR1cm4gKnRoaXM7IH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcy4uLj4KLXVzaW5n
IElnbm9yZWQgPSBJZ25vcmU7Ci0KLW5hbWVzcGFjZSB0cmFpdHNfZGV0YWlsX0lzRXF1YWxpdHlD
b21wYXJhYmxlIHsKLUlnbm9yZSBvcGVyYXRvcj09KElnbm9yZSwgSWdub3JlKTsKLQotdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFUgPSBUPgotc3RydWN0IElzRXF1YWxpdHlDb21wYXJhYmxlCi0g
ICAgOiBzdGQ6OmlzX2NvbnZlcnRpYmxlPAotICAgICAgICAgIGRlY2x0eXBlKHN0ZDo6ZGVjbHZh
bDxUPigpID09IHN0ZDo6ZGVjbHZhbDxVPigpKSwKLSAgICAgICAgICBib29sCi0gICAgICA+IHt9
OwotfQotCi0vKiB1c2luZyBvdmVycmlkZSAqLyB1c2luZyB0cmFpdHNfZGV0YWlsX0lzRXF1YWxp
dHlDb21wYXJhYmxlOjoKLSAgICBJc0VxdWFsaXR5Q29tcGFyYWJsZTsKLQotbmFtZXNwYWNlIHRy
YWl0c19kZXRhaWxfSXNMZXNzVGhhbkNvbXBhcmFibGUgewotSWdub3JlIG9wZXJhdG9yPChJZ25v
cmUsIElnbm9yZSk7Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVID0gVD4KLXN0cnVjdCBJ
c0xlc3NUaGFuQ29tcGFyYWJsZQotICAgIDogc3RkOjppc19jb252ZXJ0aWJsZTwKLSAgICAgICAg
ICBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8VD4oKSA8IHN0ZDo6ZGVjbHZhbDxVPigpKSwKLSAgICAg
ICAgICBib29sCi0gICAgICA+IHt9OwotfQotCi0vKiB1c2luZyBvdmVycmlkZSAqLyB1c2luZyB0
cmFpdHNfZGV0YWlsX0lzTGVzc1RoYW5Db21wYXJhYmxlOjoKLSAgICBJc0xlc3NUaGFuQ29tcGFy
YWJsZTsKLQotbmFtZXNwYWNlIHRyYWl0c19kZXRhaWxfSXNOb3Rocm93U3dhcHBhYmxlIHsKLSNp
ZiBkZWZpbmVkKF9fY3BwX2xpYl9pc19zd2FwcGFibGUpIHx8IChfQ1BQTElCX1ZFUiAmJiBfSEFT
X0NYWDE3KQotLy8gTVNWQyAyMDE1KyBhbHJlYWR5IGltcGxlbWVudHMgdGhlIEMrKzE3IFAwMTg1
UjEgcHJvcG9zYWwgd2hpY2gKLS8vIGFkZHMgc3RkOjppc19ub3Rocm93X3N3YXBwYWJsZSwgc28g
dXNlIGl0IGluc3RlYWQgaWYgQysrMTcgbW9kZQotLy8gaXMgZW5hYmxlZC4KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotdXNpbmcgSXNOb3Rocm93U3dhcHBhYmxlID0gc3RkOjppc19ub3Rocm93X3N3
YXBwYWJsZTxUPjsKLSNlbGlmIF9DUFBMSUJfVkVSCi0vLyBNU1ZDIDIwMTUrIGRlZmluZXMgdGhl
IGJhc2UgZXZlbiBpZiBDKysxNyBpcyBkaXNhYmxlZCwgYW5kCi0vLyBNU1ZDIDIwMTUgaGFzIGlz
c3VlcyB3aXRoIG91ciBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBkdWUgdG8KLS8vIG92ZXItZWFn
ZXIgZXZhbHVhdGlvbiBvZiBub2V4Y2VwdC4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdXNpbmcg
SXNOb3Rocm93U3dhcHBhYmxlID0gc3RkOjpfSXNfbm90aHJvd19zd2FwcGFibGU8VD47Ci0jZWxz
ZQotLyogdXNpbmcgb3ZlcnJpZGUgKi8gdXNpbmcgc3RkOjpzd2FwOwotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4KLXN0cnVjdCBJc05vdGhyb3dTd2FwcGFibGUKLSAgICA6IHN0ZDo6aW50ZWdyYWxfY29u
c3RhbnQ8Ym9vbCwKLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxU
Pjo6dmFsdWUgJiYKLSAgICAgICAgbm9leGNlcHQoc3dhcChzdGQ6OmRlY2x2YWw8VCY+KCksIHN0
ZDo6ZGVjbHZhbDxUJj4oKSkpCi0gICAgICA+IHt9OwotI2VuZGlmCi19Ci0KLS8qIHVzaW5nIG92
ZXJyaWRlICovIHVzaW5nIHRyYWl0c19kZXRhaWxfSXNOb3Rocm93U3dhcHBhYmxlOjpJc05vdGhy
b3dTd2FwcGFibGU7Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgSXNUcml2aWFsbHlDb3B5
YWJsZQotICA6IHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICB0cmFpdHNfZGV0YWlsOjpoYXNfSXNU
cml2aWFsbHlDb3B5YWJsZTxUPjo6dmFsdWUsCi0gICAgICB0cmFpdHNfZGV0YWlsOjpoYXNfdHJ1
ZV9Jc1RyaXZpYWxseUNvcHlhYmxlPFQ+LAotICAgICAgdHJhaXRzX2RldGFpbDo6aXNfdHJpdmlh
bGx5X2NvcHlhYmxlPFQ+Ci0gICAgPjo6dHlwZSB7fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0
cnVjdCBJc1JlbG9jYXRhYmxlCi0gIDogc3RkOjpjb25kaXRpb25hbDwKLSAgICAgIHRyYWl0c19k
ZXRhaWw6Omhhc19Jc1JlbG9jYXRhYmxlPFQ+Ojp2YWx1ZSwKLSAgICAgIHRyYWl0c19kZXRhaWw6
Omhhc190cnVlX0lzUmVsb2NhdGFibGU8VD4sCi0gICAgICAvLyBUT0RPIGFkZCB0aGlzIGxpbmUg
KGFuZCBzb21lIHRlc3RzIGZvciBpdCkgd2hlbiB3ZSB1cGdyYWRlIHRvIGdjYyA0LjcKLSAgICAg
IC8vc3RkOjppc190cml2aWFsbHlfbW92ZV9jb25zdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSB8fAotICAg
ICAgSXNUcml2aWFsbHlDb3B5YWJsZTxUPgotICAgID46OnR5cGUge307Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBzdHJ1Y3QgSXNaZXJvSW5pdGlhbGl6YWJsZQotICA6IHN0ZDo6Y29uZGl0aW9uYWw8
Ci0gICAgICB0cmFpdHNfZGV0YWlsOjpoYXNfSXNaZXJvSW5pdGlhbGl6YWJsZTxUPjo6dmFsdWUs
Ci0gICAgICB0cmFpdHNfZGV0YWlsOjpoYXNfdHJ1ZV9Jc1plcm9Jbml0aWFsaXphYmxlPFQ+LAot
ICAgICAgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxib29sLCAhc3RkOjppc19jbGFzczxUPjo6dmFs
dWU+Ci0gICAgPjo6dHlwZSB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lLi4uPgotc3RydWN0IENv
bmp1bmN0aW9uIDogc3RkOjp0cnVlX3R5cGUge307Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0
cnVjdCBDb25qdW5jdGlvbjxUPiA6IFQge307Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUuLi4gVExpc3Q+Ci1zdHJ1Y3QgQ29uanVuY3Rpb248VCwgVExpc3QuLi4+Ci0gICAgOiBzdGQ6
OmNvbmRpdGlvbmFsPFQ6OnZhbHVlLCBDb25qdW5jdGlvbjxUTGlzdC4uLj4sIFQ+Ojp0eXBlIHt9
OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+Ci1zdHJ1Y3QgRGlzanVuY3Rpb24gOiBzdGQ6OmZh
bHNlX3R5cGUge307Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBEaXNqdW5jdGlvbjxU
PiA6IFQge307Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVExpc3Q+Ci1zdHJ1
Y3QgRGlzanVuY3Rpb248VCwgVExpc3QuLi4+Ci0gICAgOiBzdGQ6OmNvbmRpdGlvbmFsPFQ6OnZh
bHVlLCBULCBEaXNqdW5jdGlvbjxUTGlzdC4uLj4+Ojp0eXBlIHt9OwotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLXN0cnVjdCBOZWdhdGlvbiA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwg
IVQ6OnZhbHVlPiB7fTsKLQotdGVtcGxhdGUgPGJvb2wuLi4gQnM+Ci1zdHJ1Y3QgQm9vbHMgewot
ICB1c2luZyB2YWxpZF90eXBlID0gYm9vbDsKLSAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OnNpemVf
dCBzaXplKCkgewotICAgIHJldHVybiBzaXplb2YuLi4oQnMpOwotICB9Ci19OwotCi0vLyBMaWdo
dGVyLXdlaWdodCB0aGFuIENvbmp1bmN0aW9uLCBidXQgZXZhbHVhdGVzIGFsbCBzdWItY29uZGl0
aW9ucyBlYWdlcmx5LgotdGVtcGxhdGUgPGNsYXNzLi4uIFRzPgotc3RydWN0IFN0cmljdENvbmp1
bmN0aW9uCi0gICAgOiBzdGQ6OmlzX3NhbWU8Qm9vbHM8VHM6OnZhbHVlLi4uLCB0cnVlPiwgQm9v
bHM8dHJ1ZSwgVHM6OnZhbHVlLi4uPj4ge307Ci0KLX0gLy8gbmFtZXNwYWNlIGZvbGx5Ci0KLS8q
KgotICogVXNlIHRoaXMgbWFjcm8gT05MWSBpbnNpZGUgbmFtZXNwYWNlIGZvbGx5LiBXaGVuIHVz
aW5nIGl0IHdpdGggYQotICogcmVndWxhciB0eXBlLCB1c2UgaXQgbGlrZSB0aGlzOgotICoKLSAq
IC8vIE1ha2Ugc3VyZSB5b3UncmUgYXQgbmFtZXNwYWNlIDo6Zm9sbHkgc2NvcGUKLSAqIHRlbXBs
YXRlPD4gRk9MTFlfQVNTVU1FX1JFTE9DQVRBQkxFKE15VHlwZSkKLSAqCi0gKiBXaGVuIHVzaW5n
IGl0IHdpdGggYSB0ZW1wbGF0ZSB0eXBlLCB1c2UgaXQgbGlrZSB0aGlzOgotICoKLSAqIC8vIE1h
a2Ugc3VyZSB5b3UncmUgYXQgbmFtZXNwYWNlIDo6Zm9sbHkgc2NvcGUKLSAqIHRlbXBsYXRlPGNs
YXNzIFQxLCBjbGFzcyBUMj4KLSAqIEZPTExZX0FTU1VNRV9SRUxPQ0FUQUJMRShNeVR5cGU8VDEs
IFQyPikKLSAqLwotI2RlZmluZSBGT0xMWV9BU1NVTUVfUkVMT0NBVEFCTEUoLi4uKSBcCi0gIHN0
cnVjdCBJc1JlbG9jYXRhYmxlPCAgX19WQV9BUkdTX18gPiA6IHN0ZDo6dHJ1ZV90eXBlIHt9Owot
Ci0vKioKLSAqIFRoZSBGT0xMWV9BU1NVTUVfRkJWRUNUT1JfQ09NUEFUSUJMRSogbWFjcm9zIGJl
bG93IGVuY29kZSB0aGUKLSAqIGFzc3VtcHRpb24gdGhhdCB0aGUgdHlwZSBpcyByZWxvY2F0YWJs
ZSBwZXIgSXNSZWxvY2F0YWJsZQotICogYWJvdmUuIE1hbnkgdHlwZXMgY2FuIGJlIGFzc3VtZWQg
dG8gc2F0aXNmeSB0aGlzIGNvbmRpdGlvbiwgYnV0Ci0gKiBpdCBpcyB0aGUgcmVzcG9uc2liaWxp
dHkgb2YgdGhlIHVzZXIgdG8gc3RhdGUgdGhhdCBhc3N1bXB0aW9uLgotICogVXNlci1kZWZpbmVk
IGNsYXNzZXMgd2lsbCBub3QgYmUgb3B0aW1pemVkIGZvciB1c2Ugd2l0aAotICogZmJ2ZWN0b3Ig
KHNlZSBGQlZlY3Rvci5oKSB1bmxlc3MgdGhleSBzdGF0ZSB0aGF0IGFzc3VtcHRpb24uCi0gKgot
ICogVXNlIEZPTExZX0FTU1VNRV9GQlZFQ1RPUl9DT01QQVRJQkxFIHdpdGggcmVndWxhciB0eXBl
cyBsaWtlIHRoaXM6Ci0gKgotICogRk9MTFlfQVNTVU1FX0ZCVkVDVE9SX0NPTVBBVElCTEUoTXlU
eXBlKQotICoKLSAqIFRoZSB2ZXJzaW9ucyBGT0xMWV9BU1NVTUVfRkJWRUNUT1JfQ09NUEFUSUJM
RV8xLCBfMiwgXzMsIGFuZCBfNAotICogYWxsb3cgdXNpbmcgdGhlIG1hY3JvIGZvciBkZXNjcmli
aW5nIHRlbXBsYXRpemVkIGNsYXNzZXMgd2l0aCAxLCAyLAotICogMywgYW5kIDQgdGVtcGxhdGUg
cGFyYW1ldGVycyByZXNwZWN0aXZlbHkuIEZvciB0ZW1wbGF0ZSBjbGFzc2VzCi0gKiBqdXN0IHVz
ZSB0aGUgbWFjcm8gd2l0aCB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIGFuZCBwYXNzIHRoZSBuYW1l
IG9mCi0gKiB0aGUgdGVtcGxhdGUgdG8gaXQuIEV4YW1wbGU6Ci0gKgotICogdGVtcGxhdGUgPGNs
YXNzIFQxLCBjbGFzcyBUMj4gY2xhc3MgTXlUeXBlIHsgLi4uIH07Ci0gKiAuLi4KLSAqIC8vIE1h
a2Ugc3VyZSB5b3UncmUgYXQgZ2xvYmFsIHNjb3BlCi0gKiBGT0xMWV9BU1NVTUVfRkJWRUNUT1Jf
Q09NUEFUSUJMRV8yKE15VHlwZSkKLSAqLwotCi0vLyBVc2UgdGhpcyBtYWNybyBPTkxZIGF0IGds
b2JhbCBsZXZlbCAobm8gbmFtZXNwYWNlKQotI2RlZmluZSBGT0xMWV9BU1NVTUVfRkJWRUNUT1Jf
Q09NUEFUSUJMRSguLi4pIFwKLSAgbmFtZXNwYWNlIGZvbGx5IHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gIHRlbXBsYXRlIDw+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICBGT0xMWV9BU1NVTUVfUkVMT0NBVEFCTEUoX19WQV9BUkdTX18pICAgICAgIFwKLSAgfQot
Ly8gVXNlIHRoaXMgbWFjcm8gT05MWSBhdCBnbG9iYWwgbGV2ZWwgKG5vIG5hbWVzcGFjZSkKLSNk
ZWZpbmUgRk9MTFlfQVNTVU1FX0ZCVkVDVE9SX0NPTVBBVElCTEVfMSguLi4pIFwKLSAgbmFtZXNw
YWNlIGZvbGx5IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPGNs
YXNzIFQxPiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRk9MTFlfQVNTVU1FX1JFTE9D
QVRBQkxFKF9fVkFfQVJHU19fPFQxPikgICAgIFwKLSAgfQotLy8gVXNlIHRoaXMgbWFjcm8gT05M
WSBhdCBnbG9iYWwgbGV2ZWwgKG5vIG5hbWVzcGFjZSkKLSNkZWZpbmUgRk9MTFlfQVNTVU1FX0ZC
VkVDVE9SX0NPTVBBVElCTEVfMiguLi4pIFwKLSAgbmFtZXNwYWNlIGZvbGx5IHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4gICAg
ICAgICAgICAgICAgIFwKLSAgRk9MTFlfQVNTVU1FX1JFTE9DQVRBQkxFKF9fVkFfQVJHU19fPFQx
LCBUMj4pIFwKLSAgfQotLy8gVXNlIHRoaXMgbWFjcm8gT05MWSBhdCBnbG9iYWwgbGV2ZWwgKG5v
IG5hbWVzcGFjZSkKLSNkZWZpbmUgRk9MTFlfQVNTVU1FX0ZCVkVDVE9SX0NPTVBBVElCTEVfMygu
Li4pICAgICBcCi0gIG5hbWVzcGFjZSBmb2xseSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMz4gICAgICAg
ICAgIFwKLSAgRk9MTFlfQVNTVU1FX1JFTE9DQVRBQkxFKF9fVkFfQVJHU19fPFQxLCBUMiwgVDM+
KSBcCi0gIH0KLS8vIFVzZSB0aGlzIG1hY3JvIE9OTFkgYXQgZ2xvYmFsIGxldmVsIChubyBuYW1l
c3BhY2UpCi0jZGVmaW5lIEZPTExZX0FTU1VNRV9GQlZFQ1RPUl9DT01QQVRJQkxFXzQoLi4uKSAg
ICAgICAgIFwKLSAgbmFtZXNwYWNlIGZvbGx5IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICB0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMywgY2xh
c3MgVDQ+ICAgICBcCi0gIEZPTExZX0FTU1VNRV9SRUxPQ0FUQUJMRShfX1ZBX0FSR1NfXzxUMSwg
VDIsIFQzLCBUND4pIFwKLSAgfQotCi0vKioKLSAqIEluc3RhbnRpYXRlIEZPTExZX0FTU1VNRV9G
QlZFQ1RPUl9DT01QQVRJQkxFIGZvciBhIGZldyB0eXBlcy4gSXQgaXMKLSAqIHNhZmUgdG8gYXNz
dW1lIHRoYXQgcGFpciBpcyBjb21wYXRpYmxlIGlmIGJvdGggb2YgaXRzIGNvbXBvbmVudHMKLSAq
IGFyZS4gRnVydGhlcm1vcmUsIGFsbCBTVEwgY29udGFpbmVycyBjYW4gYmUgYXNzdW1lZCB0byBj
b21wbHksCi0gKiBhbHRob3VnaCB0aGF0IGlzIG5vdCBndWFyYW50ZWVkIGJ5IHRoZSBzdGFuZGFy
ZC4KLSAqLwotCi1GT0xMWV9OQU1FU1BBQ0VfU1REX0JFR0lOCi0KLXRlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBVPgotICBzdHJ1Y3QgcGFpcjsKLSNpZm5kZWYgX0dMSUJDWFhfVVNFX0ZCCi1GT0xM
WV9HTElCQ1hYX05BTUVTUEFDRV9DWFgxMV9CRUdJTgotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IFIsIGNsYXNzIEE+Ci0gIGNsYXNzIGJhc2ljX3N0cmluZzsKLUZPTExZX0dMSUJDWFhfTkFNRVNQ
QUNFX0NYWDExX0VORAotI2Vsc2UKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBSLCBjbGFzcyBB
LCBjbGFzcyBTPgotICBjbGFzcyBiYXNpY19zdHJpbmc7Ci0jZW5kaWYKLXRlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBBPgotICBjbGFzcyB2ZWN0b3I7Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg
QT4KLSAgY2xhc3MgZGVxdWU7Ci1GT0xMWV9HTElCQ1hYX05BTUVTUEFDRV9DWFgxMV9CRUdJTgot
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEE+Ci0gIGNsYXNzIGxpc3Q7Ci1GT0xMWV9HTElCQ1hY
X05BTUVTUEFDRV9DWFgxMV9FTkQKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBDLCBjbGFzcyBB
PgotICBjbGFzcyBzZXQ7Ci10ZW1wbGF0ZSA8Y2xhc3MgSywgY2xhc3MgViwgY2xhc3MgQywgY2xh
c3MgQT4KLSAgY2xhc3MgbWFwOwotdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gIGNsYXNzIHNoYXJlZF9w
dHI7Ci0KLUZPTExZX05BTUVTUEFDRV9TVERfRU5ECi0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLS8v
IFNUTCBjb21tb25seS11c2VkIHR5cGVzCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KLXN0
cnVjdCBJc1JlbG9jYXRhYmxlPCBzdGQ6OnBhaXI8VCwgVT4gPgotICAgIDogc3RkOjppbnRlZ3Jh
bF9jb25zdGFudDxib29sLAotICAgICAgICBJc1JlbG9jYXRhYmxlPFQ+Ojp2YWx1ZSAmJgotICAg
ICAgICBJc1JlbG9jYXRhYmxlPFU+Ojp2YWx1ZT4ge307Ci0KLS8vIElzIFQgb25lIG9mIFQxLCBU
MiwgLi4uLCBUbj8KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcy4uLiBUcz4KLXN0cnVjdCBJc09u
ZU9mIHsKLSAgZW51bSB7IHZhbHVlID0gZmFsc2UgfTsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBUMSwgY2xhc3MuLi4gVHM+Ci1zdHJ1Y3QgSXNPbmVPZjxULCBUMSwgVHMuLi4+IHsK
LSAgZW51bSB7IHZhbHVlID0gc3RkOjppc19zYW1lPFQsIFQxPjo6dmFsdWUgfHwgSXNPbmVPZjxU
LCBUcy4uLj46OnZhbHVlIH07Ci19OwotCi0vKgotICogQ29tcGxlbWVudGFyeSB0eXBlIHRyYWl0
cyBmb3IgaW50ZWdyYWwgY29tcGFyaXNvbnMuCi0gKgotICogRm9yIGluc3RhbmNlLCBgaWYoeCA8
IDApYCB5aWVsZHMgYW4gZXJyb3IgaW4gY2xhbmcgZm9yIHVuc2lnbmVkIHR5cGVzCi0gKiAgd2hl
biAtV2Vycm9yIGlzIHVzZWQgZHVlIHRvIC1XdGF1dG9sb2dpY2FsLWNvbXBhcmUKLSAqCi0gKgot
ICogQGF1dGhvcjogTWFyY2VsbyBKdWNoZW0gPG1hcmNlbG9AZmIuY29tPgotICovCi0KLW5hbWVz
cGFjZSBkZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbD4KLXN0cnVjdCBpc19u
ZWdhdGl2ZV9pbXBsIHsKLSAgY29uc3RleHByIHN0YXRpYyBib29sIGNoZWNrKFQgeCkgeyByZXR1
cm4geCA8IDA7IH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IGlzX25lZ2F0
aXZlX2ltcGw8VCwgZmFsc2U+IHsKLSAgY29uc3RleHByIHN0YXRpYyBib29sIGNoZWNrKFQpIHsg
cmV0dXJuIGZhbHNlOyB9Ci19OwotCi0vLyBmb2xseTo6dG8gaW50ZWdyYWwgc3BlY2lhbGl6YXRp
b25zIGNhbiBlbmQgdXAgZ2VuZXJhdGluZyBjb2RlCi0vLyBpbnNpZGUgd2hhdCBhcmUgcmVhbGx5
IHN0YXRpYyBpZnMgKG5vdCBleGVjdXRlZCBiZWNhdXNlIG9mIHRoZSB0ZW1wbGF0ZWQKLS8vIHR5
cGVzKSB0aGF0IHZpb2xhdGUgLVdzaWduLWNvbXBhcmUgYW5kL29yIC1XYm9vbC1jb21wYXJlIHNv
IHN1cHByZXNzIHRoZW0KLS8vIGluIG9yZGVyIHRvIG5vdCBwcmV2ZW50IGFsbCBjYWxsaW5nIGNv
ZGUgZnJvbSB1c2luZyBpdC4KLUZPTExZX1BVU0hfV0FSTklORwotRk9MTFlfR0NDX0RJU0FCTEVf
V0FSTklORygiLVdzaWduLWNvbXBhcmUiKQotI2lmIF9fR05VQ19QUkVSRVEoNSwgMCkKLUZPTExZ
X0dDQ19ESVNBQkxFX1dBUk5JTkcoIi1XYm9vbC1jb21wYXJlIikKLSNlbmRpZgotRk9MTFlfTVNW
Q19ESVNBQkxFX1dBUk5JTkcoNDM4OCkgLy8gc2lnbi1jb21wYXJlCi1GT0xMWV9NU1ZDX0RJU0FC
TEVfV0FSTklORyg0ODA0KSAvLyBib29sLWNvbXBhcmUKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFJI
UywgUkhTIHJocywgdHlwZW5hbWUgTEhTPgotYm9vbCBsZXNzX3RoYW5faW1wbChMSFMgY29uc3Qg
bGhzKSB7Ci0gIHJldHVybgotICAgIHJocyA+IHN0ZDo6bnVtZXJpY19saW1pdHM8TEhTPjo6bWF4
KCkgPyB0cnVlIDoKLSAgICByaHMgPD0gc3RkOjpudW1lcmljX2xpbWl0czxMSFM+OjptaW4oKSA/
IGZhbHNlIDoKLSAgICBsaHMgPCByaHM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSSFMsIFJI
UyByaHMsIHR5cGVuYW1lIExIUz4KLWJvb2wgZ3JlYXRlcl90aGFuX2ltcGwoTEhTIGNvbnN0IGxo
cykgewotICByZXR1cm4KLSAgICByaHMgPiBzdGQ6Om51bWVyaWNfbGltaXRzPExIUz46Om1heCgp
ID8gZmFsc2UgOgotICAgIHJocyA8IHN0ZDo6bnVtZXJpY19saW1pdHM8TEhTPjo6bWluKCkgPyB0
cnVlIDoKLSAgICBsaHMgPiByaHM7Ci19Ci0KLUZPTExZX1BPUF9XQVJOSU5HCi0KLX0gLy8gbmFt
ZXNwYWNlIGRldGFpbCB7Ci0KLS8vIHNhbWUgYXMgYHggPCAwYAotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci1jb25zdGV4cHIgYm9vbCBpc19uZWdhdGl2ZShUIHgpIHsKLSAgcmV0dXJuIGZvbGx5Ojpk
ZXRhaWw6OmlzX25lZ2F0aXZlX2ltcGw8VCwgc3RkOjppc19zaWduZWQ8VD46OnZhbHVlPjo6Y2hl
Y2soeCk7Ci19Ci0KLS8vIHNhbWUgYXMgYHggPD0gMGAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
Y29uc3RleHByIGJvb2wgaXNfbm9uX3Bvc2l0aXZlKFQgeCkgeyByZXR1cm4gIXggfHwgZm9sbHk6
OmlzX25lZ2F0aXZlKHgpOyB9Ci0KLS8vIHNhbWUgYXMgYHggPiAwYAotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci1jb25zdGV4cHIgYm9vbCBpc19wb3NpdGl2ZShUIHgpIHsgcmV0dXJuICFpc19ub25f
cG9zaXRpdmUoeCk7IH0KLQotLy8gc2FtZSBhcyBgeCA+PSAwYAotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci1jb25zdGV4cHIgYm9vbCBpc19ub25fbmVnYXRpdmUoVCB4KSB7Ci0gIHJldHVybiAheCB8
fCBpc19wb3NpdGl2ZSh4KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFJIUywgUkhTIHJocywg
dHlwZW5hbWUgTEhTPgotYm9vbCBsZXNzX3RoYW4oTEhTIGNvbnN0IGxocykgewotICByZXR1cm4g
ZGV0YWlsOjpsZXNzX3RoYW5faW1wbDwKLSAgICBSSFMsIHJocywgdHlwZW5hbWUgc3RkOjpyZW1v
dmVfcmVmZXJlbmNlPExIUz46OnR5cGUKLSAgPihsaHMpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgUkhTLCBSSFMgcmhzLCB0eXBlbmFtZSBMSFM+Ci1ib29sIGdyZWF0ZXJfdGhhbihMSFMgY29u
c3QgbGhzKSB7Ci0gIHJldHVybiBkZXRhaWw6OmdyZWF0ZXJfdGhhbl9pbXBsPAotICAgIFJIUywg
cmhzLCB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8TEhTPjo6dHlwZQotICA+KGxocyk7
Ci19Ci19IC8vIG5hbWVzcGFjZSBmb2xseQotCi0vLyBBc3N1bWUgbm90aGluZyB3aGVuIGNvbXBp
bGluZyB3aXRoIE1TVkMuCi0jaWZuZGVmIF9NU0NfVkVSCi0vLyBnY2MtNS4wIGNoYW5nZWQgc3Ry
aW5nJ3MgaW1wbGVtZW50YXRpb24gaW4gbGlic3RkYysrIHRvIGJlIG5vbi1yZWxvY2F0YWJsZQot
I2lmICFfR0xJQkNYWF9VU0VfQ1hYMTFfQUJJCi1GT0xMWV9BU1NVTUVfRkJWRUNUT1JfQ09NUEFU
SUJMRV8zKHN0ZDo6YmFzaWNfc3RyaW5nKQotI2VuZGlmCi1GT0xMWV9BU1NVTUVfRkJWRUNUT1Jf
Q09NUEFUSUJMRV8yKHN0ZDo6dmVjdG9yKQotRk9MTFlfQVNTVU1FX0ZCVkVDVE9SX0NPTVBBVElC
TEVfMihzdGQ6Omxpc3QpCi1GT0xMWV9BU1NVTUVfRkJWRUNUT1JfQ09NUEFUSUJMRV8yKHN0ZDo6
ZGVxdWUpCi1GT0xMWV9BU1NVTUVfRkJWRUNUT1JfQ09NUEFUSUJMRV8yKHN0ZDo6dW5pcXVlX3B0
cikKLUZPTExZX0FTU1VNRV9GQlZFQ1RPUl9DT01QQVRJQkxFXzEoc3RkOjpzaGFyZWRfcHRyKQot
Rk9MTFlfQVNTVU1FX0ZCVkVDVE9SX0NPTVBBVElCTEVfMShzdGQ6OmZ1bmN0aW9uKQotI2VuZGlm
Ci0KLS8qIFNvbWUgY29tYmluYXRpb25zIG9mIGNvbXBpbGVycyBhbmQgQysrIGxpYnJhcmllcyBt
YWtlIF9faW50MTI4IGFuZAotICogdW5zaWduZWQgX19pbnQxMjggYXZhaWxhYmxlIGJ1dCBkbyBu
b3QgY29ycmVjdGx5IGRlZmluZSB0aGVpciBzdGFuZGFyZCB0eXBlCi0gKiB0cmFpdHMuCi0gKgot
ICogSWYgRk9MTFlfU1VQUExZX01JU1NJTkdfSU5UMTI4X1RSQUlUUyBpcyBkZWZpbmVkLCB3ZSBk
ZWZpbmUgdGhlc2UgdHJhaXRzCi0gKiBoZXJlLgotICoKLSAqIEBhdXRob3I6IFBoaWwgV2lsbG91
Z2hieSA8cGhpbHdpbGxAZmIuY29tPgotICovCi0jaWYgRk9MTFlfU1VQUExZX01JU1NJTkdfSU5U
MTI4X1RSQUlUUwotRk9MTFlfTkFNRVNQQUNFX1NURF9CRUdJTgotdGVtcGxhdGUgPD4KLXN0cnVj
dCBpc19hcml0aG1ldGljPF9faW50MTI4PiA6IDo6c3RkOjp0cnVlX3R5cGUge307Ci10ZW1wbGF0
ZSA8Pgotc3RydWN0IGlzX2FyaXRobWV0aWM8dW5zaWduZWQgX19pbnQxMjg+IDogOjpzdGQ6OnRy
dWVfdHlwZSB7fTsKLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaXNfaW50ZWdyYWw8X19pbnQxMjg+IDog
OjpzdGQ6OnRydWVfdHlwZSB7fTsKLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgaXNfaW50ZWdyYWw8dW5z
aWduZWQgX19pbnQxMjg+IDogOjpzdGQ6OnRydWVfdHlwZSB7fTsKLXRlbXBsYXRlIDw+Ci1zdHJ1
Y3QgbWFrZV91bnNpZ25lZDxfX2ludDEyOD4gewotICB0eXBlZGVmIHVuc2lnbmVkIF9faW50MTI4
IHR5cGU7Ci19OwotdGVtcGxhdGUgPD4KLXN0cnVjdCBtYWtlX3NpZ25lZDxfX2ludDEyOD4gewot
ICB0eXBlZGVmIF9faW50MTI4IHR5cGU7Ci19OwotdGVtcGxhdGUgPD4KLXN0cnVjdCBtYWtlX3Vu
c2lnbmVkPHVuc2lnbmVkIF9faW50MTI4PiB7Ci0gIHR5cGVkZWYgdW5zaWduZWQgX19pbnQxMjgg
dHlwZTsKLX07Ci10ZW1wbGF0ZSA8Pgotc3RydWN0IG1ha2Vfc2lnbmVkPHVuc2lnbmVkIF9faW50
MTI4PiB7Ci0gIHR5cGVkZWYgX19pbnQxMjggdHlwZTsKLX07Ci10ZW1wbGF0ZSA8Pgotc3RydWN0
IGlzX3NpZ25lZDxfX2ludDEyOD4gOiA6OnN0ZDo6dHJ1ZV90eXBlIHt9OwotdGVtcGxhdGUgPD4K
LXN0cnVjdCBpc191bnNpZ25lZDx1bnNpZ25lZCBfX2ludDEyOD4gOiA6OnN0ZDo6dHJ1ZV90eXBl
IHt9OwotRk9MTFlfTkFNRVNQQUNFX1NURF9FTkQKLSNlbmRpZiAvLyBGT0xMWV9TVVBQTFlfTUlT
U0lOR19JTlQxMjhfVFJBSVRTCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9mb2xseS9VbmNhdWdodEV4Y2VwdGlvbnMuaCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1VuY2F1Z2h0RXhjZXB0aW9ucy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyYTg1MjllNGZjNjEyYTA1NTU4ZDgyZmY4YTZmYzQ0ODNhOWYz
M2E4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L1VuY2F1Z2h0RXhjZXB0aW9ucy5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZh
Y2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBW
ZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFp
biBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh
YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0g
KiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRo
ZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8ZXhjZXB0aW9uPgot
Ci0jaWYgZGVmaW5lZChfX0dOVUdfXykgfHwgZGVmaW5lZChfX0NMQU5HX18pCi0jZGVmaW5lIEZP
TExZX0VYQ0VQVElPTl9DT1VOVF9VU0VfQ1hBX0dFVF9HTE9CQUxTCi1uYW1lc3BhY2UgX19jeHhh
Yml2MSB7Ci0vLyBmb3J3YXJkIGRlY2xhcmF0aW9uIChvcmlnaW5hbGx5IGRlZmluZWQgaW4gdW53
aW5kLWN4eC5oIGZyb20gZnJvbSBsaWJzdGRjKyspCi1zdHJ1Y3QgX19jeGFfZWhfZ2xvYmFsczsK
LS8vIGRlY2xhcmVkIGluIGN4eGFiaS5oIGZyb20gbGlic3RkYysrLXYzCi1leHRlcm4gIkMiIF9f
Y3hhX2VoX2dsb2JhbHMqIF9fY3hhX2dldF9nbG9iYWxzKCkgbm9leGNlcHQ7Ci19Ci0jZWxpZiBk
ZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTQwMCkgJiYgXAotICAgIChfTVNDX1ZF
UiA8IDE5MDApIC8vIE1TVkMrKyA4LjAgb3IgZ3JlYXRlcgotI2RlZmluZSBGT0xMWV9FWENFUFRJ
T05fQ09VTlRfVVNFX0dFVFBURAotLy8gZm9yd2FyZCBkZWNsYXJhdGlvbiAob3JpZ2luYWxseSBk
ZWZpbmVkIGluIG10ZGxsLmggZnJvbSBNU1ZDUlQpCi1zdHJ1Y3QgX3RpZGRhdGE7Ci1leHRlcm4g
IkMiIF90aWRkYXRhKiBfZ2V0cHRkKCk7IC8vIGRlY2xhcmVkIGluIG10ZGxsLmggZnJvbSBNU1ZD
UlQKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxOTAwKSAvLyBNU1ZD
KysgMjAxNQotI2RlZmluZSBGT0xMWV9FWENFUFRJT05fQ09VTlRfVVNFX1NURAotI2Vsc2UKLS8v
IFJhaXNlIGFuIGVycm9yIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGlzIG9uIHVuc3VwcG9ydGVkIHBs
YXRmb3Jtcy4KLSNlcnJvciAiVW5zdXBwb3J0ZWQgcGxhdGZvcm0sIGRvbid0IGluY2x1ZGUgdGhp
cyBoZWFkZXIuIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLS8qKgotICogUmV0dXJu
cyB0aGUgbnVtYmVyIG9mIHVuY2F1Z2h0IGV4Y2VwdGlvbnMuCi0gKgotICogVGhpcyBmdW5jdGlv
biBpcyBiYXNlZCBvbiBFdmdlbnkgUGFuYXN5dWsncyBpbXBsZW1lbnRhdGlvbiBmcm9tIGhlcmU6
Ci0gKiBodHRwOi8vZmJ1cmwuY29tLzE1MTkwMDI2Ci0gKi8KLWlubGluZSBpbnQgdW5jYXVnaHRf
ZXhjZXB0aW9ucygpIG5vZXhjZXB0IHsKLSNpZiBkZWZpbmVkKEZPTExZX0VYQ0VQVElPTl9DT1VO
VF9VU0VfQ1hBX0dFVF9HTE9CQUxTKQotICAvLyBfX2N4YV9nZXRfZ2xvYmFscyByZXR1cm5zIGEg
X19jeGFfZWhfZ2xvYmFscyogKGRlZmluZWQgaW4gdW53aW5kLWN4eC5oKS4KLSAgLy8gVGhlIG9m
ZnNldCBiZWxvdyByZXR1cm5zIF9fY3hhX2VoX2dsb2JhbHM6OnVuY2F1Z2h0RXhjZXB0aW9ucy4K
LSAgcmV0dXJuICoocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxj
aGFyKj4oCi0gICAgICBzdGF0aWNfY2FzdDx2b2lkKj4oX19jeHhhYml2MTo6X19jeGFfZ2V0X2ds
b2JhbHMoKSkpICsgc2l6ZW9mKHZvaWQqKSkpOwotI2VsaWYgZGVmaW5lZChGT0xMWV9FWENFUFRJ
T05fQ09VTlRfVVNFX0dFVFBURCkKLSAgLy8gX2dldHB0ZCgpIHJldHVybnMgYSBfdGlkZGF0YSog
KGRlZmluZWQgaW4gbXRkbGwuaCkuCi0gIC8vIFRoZSBvZmZzZXQgYmVsb3cgcmV0dXJucyBfdGlk
ZGF0YTo6X1Byb2Nlc3NpbmdUaHJvdy4KLSAgcmV0dXJuICoocmVpbnRlcnByZXRfY2FzdDxpbnQq
PihzdGF0aWNfY2FzdDxjaGFyKj4oCi0gICAgICBzdGF0aWNfY2FzdDx2b2lkKj4oX2dldHB0ZCgp
KSkgKyBzaXplb2Yodm9pZCopICogMjggKyAweDQgKiA4KSk7Ci0jZWxpZiBkZWZpbmVkKEZPTExZ
X0VYQ0VQVElPTl9DT1VOVF9VU0VfU1REKQotICByZXR1cm4gc3RkOjp1bmNhdWdodF9leGNlcHRp
b25zKCk7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2VzCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9Vbml0LmggYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9Vbml0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDBmOTBmZjZlNDBmOGI3NjY5MzA3YjZhNjdmZjY2NjU5OTA2MDMzYjEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvVW5pdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGlj
ZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNl
Iik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
YXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAot
ICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g
d3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNl
ZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNz
aW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci0K
LS8vLyBJbiBmdW5jdGlvbmFsIHByb2dyYW1taW5nLCB0aGUgZGVnZW5lcmF0ZSBjYXNlIGlzIG9m
dGVuIGNhbGxlZCAidW5pdCIuIEluCi0vLy8gQysrLCAidm9pZCIgaXMgb2Z0ZW4gdGhlIGJlc3Qg
YW5hbG9ndWUuIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgdGhlIHN5bnRhY3RpYwotLy8vIHNwZWNpYWwt
Y2FzaW5nIHJlcXVpcmVkIGZvciB2b2lkLCBpdCBpcyBmcmVxdWVudGx5IGEgbGlhYmlsaXR5IGZv
ciB0ZW1wbGF0ZQotLy8vIG1ldGFwcm9ncmFtbWluZy4gU28sIGluc3RlYWQgb2Ygd3JpdGluZyBz
cGVjaWFsaXphdGlvbnMgdG8gaGFuZGxlIGNhc2VzIGxpa2UKLS8vLyBTb21lQ29udGFpbmVyPHZv
aWQ+LCBhIGxpYnJhcnkgYXV0aG9yIG1heSBpbnN0ZWFkIHJ1bGUgdGhhdCBvdXQgYW5kIHNpbXBs
eQotLy8vIGhhdmUgbGlicmFyeSB1c2VycyB1c2UgU29tZUNvbnRhaW5lcjxVbml0Pi4gQ29udGFp
bmVkIHZhbHVlcyBtYXkgYmUgaWdub3JlZC4KLS8vLyBNdWNoIGVhc2llci4KLS8vLwotLy8vICJ2
b2lkIiBpcyB0aGUgdHlwZSB0aGF0IGFkbWl0cyBvZiBubyB2YWx1ZXMgYXQgYWxsLiBJdCBpcyBu
b3QgcG9zc2libGUgdG8KLS8vLyBjb25zdHJ1Y3QgYSB2YWx1ZSBvZiB0aGlzIHR5cGUuCi0vLy8g
InVuaXQiIGlzIHRoZSB0eXBlIHRoYXQgYWRtaXRzIG9mIHByZWNpc2VseSBvbmUgdW5pcXVlIHZh
bHVlLiBJdCBpcwotLy8vIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCBhIHZhbHVlIG9mIHRoaXMgdHlw
ZSwgYnV0IGl0IGlzIGFsd2F5cyB0aGUgc2FtZSB2YWx1ZQotLy8vIGV2ZXJ5IHRpbWUsIHNvIGl0
IGlzIHVuaW50ZXJlc3RpbmcuCi1zdHJ1Y3QgVW5pdCB7Ci0gIC8vIFRoZXNlIGFyZSBzdHJ1Y3Rz
IHJhdGhlciB0aGFuIHR5cGUgYWxpYXNlcyBiZWNhdXNlIE1TVkMgMjAxNyBSQyBoYXMKLSAgLy8g
dHJvdWJsZSBjb3JyZWN0bHkgcmVzb2x2aW5nIGRlcGVuZGVudCBleHByZXNzaW9ucyBpbiB0eXBl
IGFsaWFzZXMKLSAgLy8gaW4gY2VydGFpbiB2ZXJ5IHNwZWNpZmljIGNvbnRleHRzLCBpbmNsdWRp
bmcgYSBjb3VwbGUgd2hlcmUgdGhpcyBpcwotICAvLyB1c2VkLiBTZWUgdGhlIGtub3duIGlzc3Vl
cyBzZWN0aW9uIGhlcmUgZm9yIG1vcmUgaW5mbzoKLSAgLy8gaHR0cHM6Ly9ibG9ncy5tc2RuLm1p
Y3Jvc29mdC5jb20vdmNibG9nLzIwMTYvMDYvMDcvZXhwcmVzc2lvbi1zZmluYWUtaW1wcm92ZW1l
bnRzLWluLXZzLTIwMTUtdXBkYXRlLTMvCi0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIHN0
cnVjdCBMaWZ0IDogc3RkOjpjb25kaXRpb25hbDxzdGQ6OmlzX3NhbWU8VCwgdm9pZD46OnZhbHVl
LCBVbml0LCBUPiB7fTsKLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIHN0cnVjdCBEcm9wIDog
c3RkOjpjb25kaXRpb25hbDxzdGQ6OmlzX3NhbWU8VCwgVW5pdD46OnZhbHVlLCB2b2lkLCBUPiB7
fTsKLQotICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVuaXQmIC8qb3RoZXIqLykg
Y29uc3QgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
IT0oY29uc3QgVW5pdCYgLypvdGhlciovKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci19OwotCi1jb25zdGV4cHIgVW5pdCB1bml0IHt9OwotCi19CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9VdGlsaXR5LmggYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9VdGlsaXR5LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGE5OTM0ZThkNDk5YTUzZjg3MmY0OTE4MjFmY2YxMTc0ZDE4MjI3NTMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvVXRpbGl0eS5oCisrKyAvZGV2L251bGwK
QEAgLTEsMjYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgot
ICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo
ZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElD
RU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp
ZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5p
bmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGNzdGRpbnQ+Ci0jaW5jbHVkZSA8dHlwZV90
cmFpdHM+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotLyoqCi0g
KiAgY29weQotICoKLSAqICBVc2FibGUgd2hlbiB5b3UgaGF2ZSBhIGZ1bmN0aW9uIHdpdGggdHdv
IG92ZXJsb2FkczoKLSAqCi0gKiAgICAgIGNsYXNzIE15RGF0YTsKLSAqICAgICAgdm9pZCBzb21l
dGhpbmcoTXlEYXRhJiYpOwotICogICAgICB2b2lkIHNvbWV0aGluZyhjb25zdCBNeURhdGEmKTsK
LSAqCi0gKiAgV2hlcmUgdGhlIHB1cnBvc2UgaXMgdG8gbWFrZSBjb3BpZXMgYW5kIG1vdmVzIGV4
cGxpY2l0IHdpdGhvdXQgaGF2aW5nIHRvCi0gKiAgc3BlbGwgb3V0IHRoZSBmdWxsIHR5cGUgbmFt
ZXMgLSBpbiB0aGlzIGNhc2UsIGZvciBjb3BpZXMsIHRvIGludm9rZSBjb3B5Ci0gKiAgY29uc3Ry
dWN0b3JzLgotICoKLSAqICBXaGVuIHRoZSBjYWxsZXIgd2FudHMgdG8gcGFzcyBhIGNvcHkgb2Yg
YW4gbHZhbHVlLCB0aGUgY2FsbGVyIG1heToKLSAqCi0gKiAgICAgIHZvaWQgZm9vKCkgewotICog
ICAgICAgIE15RGF0YSBkYXRhOwotICogICAgICAgIHNvbWV0aGluZyhmb2xseTo6Y29weShkYXRh
KSk7IC8vIGV4cGxpY2l0IGNvcHkKLSAqICAgICAgICBzb21ldGhpbmcoc3RkOjptb3ZlKGRhdGEp
KTsgLy8gZXhwbGljaXQgbW92ZQotICogICAgICAgIHNvbWV0aGluZyhkYXRhKTsgLy8gY29uc3Qm
IC0gbmVpdGhlciBtb3ZlIG5vciBjb3B5Ci0gKiAgICAgIH0KLSAqCi0gKiAgTm90ZTogSWYgcGFz
c2VkIGFuIHJ2YWx1ZSwgaW52b2tlcyB0aGUgbW92ZS1jdG9yLCBub3QgdGhlIGNvcHktY3Rvci4g
VGhpcwotICogIGNhbiBiZSB1c2VkIHRvIHRvIGZvcmNlIGEgbW92ZSwgd2hlcmUganVzdCB1c2lu
ZyBzdGQ6Om1vdmUgd291bGQgbm90OgotICoKLSAqICAgICAgc3RkOjpjb3B5KHN0ZDo6bW92ZShk
YXRhKSk7IC8vIGZvcmNlLW1vdmUsIG5vdCBqdXN0IGEgY2FzdCB0byAmJgotICoKLSAqICBOb3Rl
OiBUaGUgZm9sbG93aW5nIHRleHQgYXBwZWFycyBpbiB0aGUgc3RhbmRhcmQ6Ci0gKgotICogID4g
SW4gc2V2ZXJhbCBwbGFjZXMgaW4gdGhpcyBDbGF1c2UgdGhlIG9wZXJhdGlvbiAvL0RFQ0FZX0NP
UFkoeCkvLyBpcyB1c2VkLgotICogID4gQWxsIHN1Y2ggdXNlcyBtZWFuIGNhbGwgdGhlIGZ1bmN0
aW9uIGBkZWNheV9jb3B5KHgpYCBhbmQgdXNlIHRoZSByZXN1bHQsCi0gKiAgPiB3aGVyZSBgZGVj
YXlfY29weWAgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgotICogID4KLSAqICA+ICAgdGVtcGxhdGUg
PGNsYXNzIFQ+IGRlY2F5X3Q8VD4gZGVjYXlfY29weShUJiYgdikKLSAqICA+ICAgICB7IHJldHVy
biBzdGQ6OmZvcndhcmQ8VD4odik7IH0KLSAqICA+Ci0gKiAgPiBodHRwOi8vd3d3Lm9wZW4tc3Rk
Lm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDE0L240Mjk2LnBkZgotICogID4gICAz
MC4yLjYgYGRlY2F5X2NvcHlgIFt0aHJlYWQuZGVjYXljb3B5XS4KLSAqCi0gKiAgV2UgbWltaWMg
aXQsIHdpdGggYSBgbm9leGNlcHRgIHNwZWNpZmllciBmb3IgZ29vZCBtZWFzdXJlLgotICovCi0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY29uc3RleHByIHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46
OnR5cGUgY29weShUJiYgdmFsdWUpIG5vZXhjZXB0KAotICAgIG5vZXhjZXB0KHR5cGVuYW1lIHN0
ZDo6ZGVjYXk8VD46OnR5cGUoc3RkOjpmb3J3YXJkPFQ+KHZhbHVlKSkpKSB7Ci0gIHJldHVybiBz
dGQ6OmZvcndhcmQ8VD4odmFsdWUpOwotfQotCi0vKioKLSAqIEEgc2ltcGxlIGhlbHBlciBmb3Ig
Z2V0dGluZyBhIGNvbnN0YW50IHJlZmVyZW5jZSB0byBhbiBvYmplY3QuCi0gKgotICogRXhhbXBs
ZToKLSAqCi0gKiAgIHN0ZDo6dmVjdG9yPGludD4gdnsxLDIsM307Ci0gKiAgIC8vIFRoZSBmb2xs
b3dpbmcgdHdvIGxpbmVzIGFyZSBlcXVpdmFsZW50OgotICogICBhdXRvIGEgPSBjb25zdF9jYXN0
PGNvbnN0IHN0ZDo6dmVjdG9yPGludD4mPih2KS5iZWdpbigpOwotICogICBhdXRvIGIgPSBmb2xs
eTo6YXNfY29uc3QodikuYmVnaW4oKTsKLSAqCi0gKiBMaWtlIEMrKzE3J3Mgc3RkOjphc19jb25z
dC4gU2VlIGh0dHA6Ly93ZzIxLmxpbmsvcDAwMDcKLSAqLwotI2lmIF9fY3BwX2xpYl9hc19jb25z
dCB8fCBfTVNDX1ZFUgotCi0vKiB1c2luZyBvdmVycmlkZSAqLyB1c2luZyBzdGQ6OmFzX2NvbnN0
OwotCi0jZWxzZQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWNvbnN0ZXhwciBUIGNvbnN0JiBhc19j
b25zdChUJiB0KSBub2V4Y2VwdCB7Ci0gIHJldHVybiB0OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3Mg
VD4KLXZvaWQgYXNfY29uc3QoVCBjb25zdCYmKSA9IGRlbGV0ZTsKLQotI2VuZGlmCi0KLSNpZiBf
X2NwcF9saWJfaW50ZWdlcl9zZXF1ZW5jZSB8fCBfTVNDX1ZFUgotCi0vKiB1c2luZyBvdmVycmlk
ZSAqLyB1c2luZyBzdGQ6OmludGVnZXJfc2VxdWVuY2U7Ci0vKiB1c2luZyBvdmVycmlkZSAqLyB1
c2luZyBzdGQ6OmluZGV4X3NlcXVlbmNlOwotLyogdXNpbmcgb3ZlcnJpZGUgKi8gdXNpbmcgc3Rk
OjptYWtlX2luZGV4X3NlcXVlbmNlOwotCi0jZWxzZQotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgVC4u
LiBJbnRzPgotc3RydWN0IGludGVnZXJfc2VxdWVuY2UgewotICB1c2luZyB2YWx1ZV90eXBlID0g
VDsKLQotICBzdGF0aWMgY29uc3RleHByIHN0ZDo6c2l6ZV90IHNpemUoKSBub2V4Y2VwdCB7Ci0g
ICAgcmV0dXJuIHNpemVvZi4uLihJbnRzKTsKLSAgfQotfTsKLQotdGVtcGxhdGUgPHN0ZDo6c2l6
ZV90Li4uIEludHM+Ci11c2luZyBpbmRleF9zZXF1ZW5jZSA9IGZvbGx5OjppbnRlZ2VyX3NlcXVl
bmNlPHN0ZDo6c2l6ZV90LCBJbnRzLi4uPjsKLQotbmFtZXNwYWNlIGRldGFpbCB7Ci10ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgTiwgc3RkOjpzaXplX3QuLi4gSW50cz4KLXN0cnVjdCBtYWtlX2luZGV4
X3NlcXVlbmNlCi0gICAgOiBkZXRhaWw6Om1ha2VfaW5kZXhfc2VxdWVuY2U8TiAtIDEsIE4gLSAx
LCBJbnRzLi4uPiB7fTsKLQotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90Li4uIEludHM+Ci1zdHJ1Y3Qg
bWFrZV9pbmRleF9zZXF1ZW5jZTwwLCBJbnRzLi4uPiA6IGZvbGx5OjppbmRleF9zZXF1ZW5jZTxJ
bnRzLi4uPiB7fTsKLX0KLQotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Ci11c2luZyBtYWtlX2lu
ZGV4X3NlcXVlbmNlID0gZGV0YWlsOjptYWtlX2luZGV4X3NlcXVlbmNlPE4+OwotCi0jZW5kaWYK
LQotLyoqCi0gKiAgQmFja3BvcnRzIGZyb20gQysrMTcgb2Y6Ci0gKiAgICBzdGQ6OmluX3BsYWNl
X3QKLSAqICAgIHN0ZDo6aW5fcGxhY2VfdHlwZV90Ci0gKiAgICBzdGQ6OmluX3BsYWNlX2luZGV4
X3QKLSAqICAgIHN0ZDo6aW5fcGxhY2UKLSAqICAgIHN0ZDo6aW5fcGxhY2VfdHlwZQotICogICAg
c3RkOjppbl9wbGFjZV9pbmRleAotICovCi0KLXN0cnVjdCBpbl9wbGFjZV90YWcge307Ci10ZW1w
bGF0ZSA8Y2xhc3M+Ci1zdHJ1Y3QgaW5fcGxhY2VfdHlwZV90YWcge307Ci10ZW1wbGF0ZSA8c3Rk
OjpzaXplX3Q+Ci1zdHJ1Y3QgaW5fcGxhY2VfaW5kZXhfdGFnIHt9OwotCi11c2luZyBpbl9wbGFj
ZV90ID0gaW5fcGxhY2VfdGFnICgmKShpbl9wbGFjZV90YWcpOwotdGVtcGxhdGUgPGNsYXNzIFQ+
Ci11c2luZyBpbl9wbGFjZV90eXBlX3QgPSBpbl9wbGFjZV90eXBlX3RhZzxUPiAoJikoaW5fcGxh
Y2VfdHlwZV90YWc8VD4pOwotdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEk+Ci11c2luZyBpbl9wbGFj
ZV9pbmRleF90ID0gaW5fcGxhY2VfaW5kZXhfdGFnPEk+ICgmKShpbl9wbGFjZV9pbmRleF90YWc8
ST4pOwotCi1pbmxpbmUgaW5fcGxhY2VfdGFnIGluX3BsYWNlKGluX3BsYWNlX3RhZyA9IHt9KSB7
Ci0gIHJldHVybiB7fTsKLX0KLXRlbXBsYXRlIDxjbGFzcyBUPgotaW5saW5lIGluX3BsYWNlX3R5
cGVfdGFnPFQ+IGluX3BsYWNlX3R5cGUoaW5fcGxhY2VfdHlwZV90YWc8VD4gPSB7fSkgewotICBy
ZXR1cm4ge307Ci19Ci10ZW1wbGF0ZSA8c3RkOjpzaXplX3QgST4KLWlubGluZSBpbl9wbGFjZV9p
bmRleF90YWc8ST4gaW5fcGxhY2VfaW5kZXgoaW5fcGxhY2VfaW5kZXhfdGFnPEk+ID0ge30pIHsK
LSAgcmV0dXJuIHt9OwotfQotCi0vKioKLSAqIEluaXRpYWxpemVyIGxpc3RzIGFyZSBhIHBvd2Vy
ZnVsIGNvbXBpbGUgdGltZSBzeW50YXggaW50cm9kdWNlZCBpbiBDKysxMQotICogYnV0IGR1ZSB0
byB0aGVpciBvZnRlbiBjb25mbGljdGluZyBzeW50YXggdGhleSBhcmUgbm90IHVzZWQgYnkgQVBJ
cyBmb3IKLSAqIGNvbnN0cnVjdGlvbi4KLSAqCi0gKiBGdXJ0aGVyIHN0YW5kYXJkIGNvbmZvcm1p
bmcgY29tcGlsZXJzICpzdHJvbmdseSogZmF2b3IgYW4KLSAqIHN0ZDo6aW5pdGFsaXplcl9saXN0
IG92ZXJsb2FkIGZvciBjb25zdHJ1Y3Rpb24gaWYgb25lIGV4aXN0cy4gIFRoZQotICogZm9sbG93
aW5nIGlzIGEgc2ltcGxlIHRhZyB1c2VkIHRvIGRpc2FtYmlndWF0ZSBjb25zdHJ1Y3Rpb24gd2l0
aAotICogaW5pdGlhbGl6ZXIgbGlzdHMgYW5kIHJlZ3VsYXIgdW5pZm9ybSBpbml0aWFsaXphdGlv
bi4KLSAqCi0gKiBGb3IgZXhhbXBsZSBjb25zaWRlciB0aGUgZm9sbG93aW5nIGNhc2UKLSAqCi0g
KiAgY2xhc3MgU29tZXRoaW5nIHsKLSAqICBwdWJsaWM6Ci0gKiAgICBleHBsaWNpdCBTb21ldGhp
bmcoaW50KTsKLSAqICAgIFNvbWV0aGluZyhzdGQ6OmludGlpYWxpemVyX2xpc3Q8aW50Pik7Ci0g
KgotICogICAgb3BlcmF0b3IgaW50KCk7Ci0gKiAgfTsKLSAqCi0gKiAgLi4uCi0gKiAgU29tZXRo
aW5nIHNvbWV0aGluZ3sxfTsgLy8gU1VSUFJJU0UhIQotICoKLSAqIFRoZSBsYXN0IGNhbGwgdG8g
aW5zdGFudGlhdGUgdGhlIFNvbWV0aGluZyBvYmplY3Qgd2lsbCBnbyB0byB0aGUKLSAqIGluaXRp
YWxpemVyX2xpc3Qgb3ZlcmxvYWQuICBXaGljaCBtYXkgYmUgc3VycHJpc2luZyB0byB1c2Vycy4K
LSAqCi0gKiBJZiBob3dldmVyIHRoaXMgdGFnIHdhcyB1c2VkIHRvIGRpc2FtYmlndWF0ZSBzdWNo
IGNvbnN0cnVjdGlvbiBpdCB3b3VsZCBiZQotICogZWFzeSBmb3IgdXNlcnMgdG8gc2VlIHdoaWNo
IGNvbnN0cnVjdGlvbiBvdmVybG9hZCB0aGVpciBjb2RlIHdhcyByZWZlcnJpbmcKLSAqIHRvLiAg
Rm9yIGV4YW1wbGUKLSAqCi0gKiAgY2xhc3MgU29tZXRoaW5nIHsKLSAqICBwdWJsaWM6Ci0gKiAg
ICBleHBsaWNpdCBTb21ldGhpbmcoaW50KTsKLSAqICAgIFNvbWV0aGluZyhmb2xseTo6aW5pdGxp
c3RfY29uc3RydWN0X3QsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxpbnQ+KTsKLSAqCi0gKiAgICBv
cGVyYXRvciBpbnQoKTsKLSAqICB9OwotICoKLSAqICAuLi4KLSAqICBTb21ldGhpbmcgc29tZXRo
aW5nX29uZXsxfTsgLy8gbm90IHRoZSBpbml0aWFsaXplcl9saXN0IG92ZXJsb2FkCi0gKiAgU29t
ZXRoaW5nIHNvbWV0aGluZ190d297Zm9sbHk6OmluaXRsaXN0X2NvbnN0cnVjdCwgezF9fTsgLy8g
Y29ycmVjdAotICovCi1zdHJ1Y3QgaW5pdGxpc3RfY29uc3RydWN0X3Qge307Ci1jb25zdGV4cHIg
aW5pdGxpc3RfY29uc3RydWN0X3QgaW5pdGxpc3RfY29uc3RydWN0e307Ci0KLS8qKgotICogQSBz
aW1wbGUgZnVuY3Rpb24gb2JqZWN0IHRoYXQgcGFzc2VzIGl0cyBhcmd1bWVudCB0aHJvdWdoIHVu
Y2hhbmdlZC4KLSAqCi0gKiBFeGFtcGxlOgotICoKLSAqICAgaW50IGkgPSA0MjsKLSAqICAgaW50
ICZqID0gSWRlbnRpdHkoKShpKTsKLSAqICAgYXNzZXJ0KCZpID09ICZqKTsKLSAqCi0gKiBXYXJu
aW5nOiBwYXNzaW5nIGEgcHJ2YWx1ZSB0aHJvdWdoIElkZW50aXR5IHR1cm5zIGl0IGludG8gYW4g
eHZhbHVlLAotICogd2hpY2ggY2FuIGVmZmVjdCB3aGV0aGVyIGxpZmV0aW1lIGV4dGVuc2lvbiBv
Y2N1cnMgb3Igbm90LiBGb3IgaW5zdGFuY2U6Ci0gKgotICogICBhdXRvJiYgeCA9IHN0ZDo6bWFr
ZV91bmlxdWU8aW50Pig0Mik7Ci0gKiAgIGNvdXQgPDwgKnggOyAvLyBPSywgeCByZWZlcnMgdG8g
YSB2YWxpZCB1bmlxdWVfcHRyLgotICoKLSAqICAgYXV0byYmIHkgPSBJZGVudGl0eSgpKHN0ZDo6
bWFrZV91bmlxdWU8aW50Pig0MikpOwotICogICBjb3V0IDw8ICp5IDsgLy8gRVJST1I6IHkgZGlk
IG5vdCBsaWZldGltZS1leHRlbmQgdGhlIHVuaXF1ZV9wdHIuIEl0Ci0gKiAgICAgICAgICAgICAg
ICAvLyBpcyBubyBsb25nZXIgdmFsaWQKLSAqLwotc3RydWN0IElkZW50aXR5IHsKLSAgdXNpbmcg
aXNfdHJhbnNwYXJlbnQgPSB2b2lkOwotICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgY29uc3RleHBy
IFQmJiBvcGVyYXRvcigpKFQmJiB4KSBjb25zdCBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQmJj4oeCk7Ci0gIH0KLX07Ci0KLW5hbWVzcGFjZSBtb3Zlb25seV8geyAvLyBQcm90
ZWN0aW9uIGZyb20gdW5pbnRlbmRlZCBBREwuCi0KLS8qKgotICogRGlzYWxsb3cgY29weSBidXQg
bm90IG1vdmUgaW4gZGVyaXZlZCB0eXBlcy4gVGhpcyBpcyBlc3NlbnRpYWxseQotICogYm9vc3Q6
Om5vbmNvcHlhYmxlICh0aGUgaW1wbGVtZW50YXRpb24gaXMgYWxtb3N0IGlkZW50aWNhbCkgYnV0
IGl0Ci0gKiBkb2Vzbid0IGRlbGV0ZSBtb3ZlIGNvbnN0cnVjdG9yIGFuZCBtb3ZlIGFzc2lnbm1l
bnQuCi0gKi8KLWNsYXNzIE1vdmVPbmx5IHsKLSBwcm90ZWN0ZWQ6Ci0gIGNvbnN0ZXhwciBNb3Zl
T25seSgpID0gZGVmYXVsdDsKLSAgfk1vdmVPbmx5KCkgPSBkZWZhdWx0OwotCi0gIE1vdmVPbmx5
KE1vdmVPbmx5JiYpID0gZGVmYXVsdDsKLSAgTW92ZU9ubHkmIG9wZXJhdG9yPShNb3ZlT25seSYm
KSA9IGRlZmF1bHQ7Ci0gIE1vdmVPbmx5KGNvbnN0IE1vdmVPbmx5JikgPSBkZWxldGU7Ci0gIE1v
dmVPbmx5JiBvcGVyYXRvcj0oY29uc3QgTW92ZU9ubHkmKSA9IGRlbGV0ZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIG1vdmVvbmx5XwotCi11c2luZyBNb3ZlT25seSA9IG1vdmVvbmx5Xzo6TW92ZU9u
bHk7Ci19IC8vIG5hbWVzcGFjZSBmb2xseQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvY29uY3VycmVuY3kvQ2FjaGVMb2NhbGl0eS5jcHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9jb25jdXJyZW5jeS9DYWNo
ZUxvY2FsaXR5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YxMjUzZDE4YmNl
OTU3NDlhZjY4ZDc1OGM5ODU2MzJlODc3OWQxOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9m
b2xseS9jb25jdXJyZW5jeS9DYWNoZUxvY2FsaXR5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBM
aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu
c2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w
Ci0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
biB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICog
U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
c3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lu
Y2x1ZGUgPGZvbGx5L2NvbmN1cnJlbmN5L0NhY2hlTG9jYWxpdHkuaD4KLQotI2lmbmRlZiBfTVND
X1ZFUgotI2RlZmluZSBfR05VX1NPVVJDRSAxIC8vIGZvciBSVExEX05PTE9BRAotI2luY2x1ZGUg
PGRsZmNuLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxmc3RyZWFtPgotCi0jaW5jbHVkZSA8Zm9sbHkv
Q29udi5oPgotI2luY2x1ZGUgPGZvbGx5L0V4Y2VwdGlvbi5oPgotI2luY2x1ZGUgPGZvbGx5L0Zp
bGVVdGlsLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvRm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvU2Nv
cGVHdWFyZC5oPgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi0vLy8vLy8vLy8vLy8vIENhY2hlTG9j
YWxpdHkKLQotLy8vIFJldHVybnMgdGhlIGJlc3QgcmVhbCBDYWNoZUxvY2FsaXR5IGluZm9ybWF0
aW9uIGF2YWlsYWJsZQotc3RhdGljIENhY2hlTG9jYWxpdHkgZ2V0U3lzdGVtTG9jYWxpdHlJbmZv
KCkgewotI2lmZGVmIF9fbGludXhfXwotICB0cnkgewotICAgIHJldHVybiBDYWNoZUxvY2FsaXR5
OjpyZWFkRnJvbVN5c2ZzKCk7Ci0gIH0gY2F0Y2ggKC4uLikgewotICAgIC8vIGtlZXAgdHJ5aW5n
Ci0gIH0KLSNlbmRpZgotCi0gIGxvbmcgbnVtQ3B1cyA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JT
X0NPTkYpOwotICBpZiAobnVtQ3B1cyA8PSAwKSB7Ci0gICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFw
cGVuLCBidXQgaWYgaXQgZG9lcyB3ZSBzaG91bGQgdHJ5IHRvIGtlZXAKLSAgICAvLyBnb2luZy4g
IFdlIGFyZSBwcm9iYWJseSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byBwYXJzZSAvc3lzIG9uCi0g
ICAgLy8gdGhpcyBib3ggZWl0aGVyIChhbHRob3VnaCB3ZSB3aWxsIHRyeSksIHdoaWNoIG1lYW5z
IHdlIGFyZSBnb2luZwotICAgIC8vIHRvIGZhbGwgYmFjayB0byB0aGUgU2VxdWVudGlhbFRocmVh
ZElkIHNwbGl0dGVyLiAgT24gbXkgMTYgY29yZQotICAgIC8vICh4IGh5cGVydGhyZWFkaW5nKSBk
ZXYgYm94IDE2IHN0cmlwZXMgaXMgZW5vdWdoIHRvIGdldCBwcmV0dHkgZ29vZAotICAgIC8vIGNv
bnRlbnRpb24gYXZvaWRhbmNlIHdpdGggU2VxdWVudGlhbFRocmVhZElkLCBhbmQgdGhlcmUgaXMg
bGl0dGxlCi0gICAgLy8gaW1wcm92ZW1lbnQgZnJvbSBnb2luZyBmcm9tIDMyIHRvIDY0LiAgVGhp
cyBkZWZhdWx0IGdpdmVzIHVzIHNvbWUKLSAgICAvLyB3aWdnbGUgcm9vbQotICAgIG51bUNwdXMg
PSAzMjsKLSAgfQotICByZXR1cm4gQ2FjaGVMb2NhbGl0eTo6dW5pZm9ybShzaXplX3QobnVtQ3B1
cykpOwotfQotCi10ZW1wbGF0ZSA8PgotY29uc3QgQ2FjaGVMb2NhbGl0eSYgQ2FjaGVMb2NhbGl0
eTo6c3lzdGVtPHN0ZDo6YXRvbWljPigpIHsKLSAgc3RhdGljIGF1dG8qIGNhY2hlID0gbmV3IENh
Y2hlTG9jYWxpdHkoZ2V0U3lzdGVtTG9jYWxpdHlJbmZvKCkpOwotICByZXR1cm4gKmNhY2hlOwot
fQotCi0vLyBFYWNoIGxldmVsIG9mIGNhY2hlIGhhcyBzaGFyaW5nIHNldHMsIHdoaWNoIGFyZSB0
aGUgc2V0IG9mIGNwdXMKLS8vIHRoYXQgc2hhcmUgYSBjb21tb24gY2FjaGUgYXQgdGhhdCBsZXZl
bC4gIFRoZXNlIGFyZSBhdmFpbGFibGUgaW4gYQotLy8gaGV4IGJpdHNldCBmb3JtICgvc3lzL2Rl
dmljZXMvc3lzdGVtL2NwdS9jcHUwL2luZGV4MC9zaGFyZWRfY3B1X21hcCwKLS8vIGZvciBleGFt
cGxlKS4gIFRoZXkgYXJlIGFsc28gYXZhaWxhYmxlIGluIGEgaHVtYW4tcmVhZGFibGUgbGlzdCBm
b3JtLAotLy8gYXMgaW4gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9pbmRleDAvc2hhcmVk
X2NwdV9saXN0LiAgVGhlIGxpc3QKLS8vIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbnVt
YmVycyBhbmQgcmFuZ2VzLCB3aGVyZSB0aGUgcmFuZ2VzIGFyZQotLy8gYSBwYWlyIG9mIGRlY2lt
YWwgbnVtYmVycyBzZXBhcmF0ZWQgYnkgYSAnLScuCi0vLwotLy8gVG8gc29ydCB0aGUgY3B1cyBm
b3Igb3B0aW11bSBsb2NhbGl0eSB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBwYXJzZQotLy8gdGhl
IHNoYXJpbmcgc2V0cywgd2UganVzdCBuZWVkIGEgdW5pcXVlIHJlcHJlc2VudGF0aXZlIGZyb20g
dGhlCi0vLyBlcXVpdmFsZW5jZSBjbGFzcy4gIFRoZSBzbWFsbGVzdCB2YWx1ZSB3b3JrcyBmaW5l
LCBhbmQgaGFwcGVucyB0byBiZQotLy8gdGhlIGZpcnN0IGRlY2ltYWwgbnVtYmVyIGluIHRoZSBm
aWxlLiAgV2UgbG9hZCBhbGwgb2YgdGhlIGVxdWl2YWxlbmNlCi0vLyBjbGFzcyBpbmZvcm1hdGlv
biBmcm9tIGFsbCBvZiB0aGUgY3B1Ki9pbmRleCogZGlyZWN0b3JpZXMsIG9yZGVyIHRoZQotLy8g
Y3B1cyBmaXJzdCBieSBpbmNyZWFzaW5nIGxhc3QtbGV2ZWwgY2FjaGUgZXF1aXZhbGVuY2UgY2xh
c3MsIHRoZW4gYnkKLS8vIHRoZSBzbWFsbGVyIGNhY2hlcy4gIEZpbmFsbHksIHdlIGJyZWFrIHRp
ZXMgd2l0aCB0aGUgY3B1IG51bWJlciBpdHNlbGYuCi0KLS8vLyBSZXR1cm5zIHRoZSBmaXJzdCBk
ZWNpbWFsIG51bWJlciBpbiB0aGUgc3RyaW5nLCBvciB0aHJvd3MgYW4gZXhjZXB0aW9uCi0vLy8g
aWYgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIGEgbnVtYmVyIHRlcm1pbmF0ZWQgYnkg
JywnLCAnLScsCi0vLy8gJ1xuJywgb3IgZW9zLgotc3RhdGljIHNpemVfdCBwYXJzZUxlYWRpbmdO
dW1iZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGxpbmUpIHsKLSAgYXV0byByYXcgPSBsaW5lLmNfc3Ry
KCk7Ci0gIGNoYXIqIGVuZDsKLSAgdW5zaWduZWQgbG9uZyB2YWwgPSBzdHJ0b3VsKHJhdywgJmVu
ZCwgMTApOwotICBpZiAoZW5kID09IHJhdyB8fCAoKmVuZCAhPSAnLCcgJiYgKmVuZCAhPSAnLScg
JiYgKmVuZCAhPSAnXG4nICYmICplbmQgIT0gMCkpIHsKLSAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVf
ZXJyb3IoCi0gICAgICAgIHRvPHN0ZDo6c3RyaW5nPigiZXJyb3IgcGFyc2luZyBsaXN0ICciLCBs
aW5lLCAiJyIpLmNfc3RyKCkpOwotICB9Ci0gIHJldHVybiB2YWw7Ci19Ci0KLUNhY2hlTG9jYWxp
dHkgQ2FjaGVMb2NhbGl0eTo6cmVhZEZyb21TeXNmc1RyZWUoCi0gICAgY29uc3Qgc3RkOjpmdW5j
dGlvbjxzdGQ6OnN0cmluZyhzdGQ6OnN0cmluZyk+JiBtYXBwaW5nKSB7Ci0gIC8vIG51bWJlciBv
ZiBlcXVpdmFsZW5jZSBjbGFzc2VzIHBlciBsZXZlbAotICBzdGQ6OnZlY3RvcjxzaXplX3Q+IG51
bUNhY2hlc0J5TGV2ZWw7Ci0KLSAgLy8gdGhlIGxpc3Qgb2YgY2FjaGUgZXF1aXZhbGVuY2UgY2xh
c3Nlcywgd2hlcmUgZXF1aXZhbGFuY2UgY2xhc3NlcwotICAvLyBhcmUgbmFtZWQgYnkgdGhlIHNt
YWxsZXN0IGNwdSBpbiB0aGUgY2xhc3MKLSAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8c2l6ZV90
Pj4gZXF1aXZDbGFzc2VzQnlDcHU7Ci0KLSAgc3RkOjp2ZWN0b3I8c2l6ZV90PiBjcHVzOwotCi0g
IHdoaWxlICh0cnVlKSB7Ci0gICAgYXV0byBjcHUgPSBjcHVzLnNpemUoKTsKLSAgICBzdGQ6OnZl
Y3RvcjxzaXplX3Q+IGxldmVsczsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7OyArK2luZGV4
KSB7Ci0gICAgICBhdXRvIGRpciA9Ci0gICAgICAgICAgc2Zvcm1hdCgiL3N5cy9kZXZpY2VzL3N5
c3RlbS9jcHUvY3B1e30vY2FjaGUvaW5kZXh7fS8iLCBjcHUsIGluZGV4KTsKLSAgICAgIGF1dG8g
Y2FjaGVUeXBlID0gbWFwcGluZyhkaXIgKyAidHlwZSIpOwotICAgICAgYXV0byBlcXVpdlN0ciA9
IG1hcHBpbmcoZGlyICsgInNoYXJlZF9jcHVfbGlzdCIpOwotICAgICAgaWYgKGNhY2hlVHlwZS5z
aXplKCkgPT0gMCB8fCBlcXVpdlN0ci5zaXplKCkgPT0gMCkgewotICAgICAgICAvLyBubyBtb3Jl
IGNhY2hlcwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmIChjYWNoZVR5cGVbMF0g
PT0gJ0knKSB7Ci0gICAgICAgIC8vIGNhY2hlVHlwZSBpbiB7ICJEYXRhIiwgIkluc3RydWN0aW9u
IiwgIlVuaWZpZWQiIH0uIHNraXAgaWNhY2hlCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQot
ICAgICAgYXV0byBlcXVpdiA9IHBhcnNlTGVhZGluZ051bWJlcihlcXVpdlN0cik7Ci0gICAgICBh
dXRvIGxldmVsID0gbGV2ZWxzLnNpemUoKTsKLSAgICAgIGxldmVscy5wdXNoX2JhY2soZXF1aXYp
OwotCi0gICAgICBpZiAoZXF1aXYgPT0gY3B1KSB7Ci0gICAgICAgIC8vIHdlIG9ubHkgd2FudCB0
byBjb3VudCB0aGUgZXF1aXYgY2xhc3NlcyBvbmNlLCBzbyB3ZSBkbyBpdCB3aGVuCi0gICAgICAg
IC8vIHdlIGZpcnN0IGVuY291bnRlciB0aGVtCi0gICAgICAgIHdoaWxlIChudW1DYWNoZXNCeUxl
dmVsLnNpemUoKSA8PSBsZXZlbCkgewotICAgICAgICAgIG51bUNhY2hlc0J5TGV2ZWwucHVzaF9i
YWNrKDApOwotICAgICAgICB9Ci0gICAgICAgIG51bUNhY2hlc0J5TGV2ZWxbbGV2ZWxdKys7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxldmVscy5zaXplKCkgPT0gMCkgewotICAgICAgLy8g
bm8gbGV2ZWxzIGF0IGFsbCBmb3IgdGhpcyBjcHUsIHdlIG11c3QgYmUgZG9uZQotICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGVxdWl2Q2xhc3Nlc0J5Q3B1LmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUo
bGV2ZWxzKSk7Ci0gICAgY3B1cy5wdXNoX2JhY2soY3B1KTsKLSAgfQotCi0gIGlmIChjcHVzLnNp
emUoKSA9PSAwKSB7Ci0gICAgdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJ1bmFibGUgdG8gbG9h
ZCBjYWNoZSBzaGFyaW5nIGluZm8iKTsKLSAgfQotCi0gIHN0ZDo6c29ydChjcHVzLmJlZ2luKCks
IGNwdXMuZW5kKCksIFsmXShzaXplX3QgbGhzLCBzaXplX3QgcmhzKSAtPiBib29sIHsKLSAgICAv
LyBzb3J0IGZpcnN0IGJ5IGVxdWl2IGNsYXNzIG9mIGNhY2hlIHdpdGggaGlnaGVzdCBpbmRleCwK
LSAgICAvLyBkaXJlY3Rpb24gZG9lc24ndCBtYXR0ZXIuICBJZiBkaWZmZXJlbnQgY3B1cyBoYXZl
Ci0gICAgLy8gZGlmZmVyZW50IG51bWJlcnMgb2YgY2FjaGVzIHRoZW4gdGhpcyBjb2RlIG1pZ2h0
IHByb2R1Y2UKLSAgICAvLyBhIHN1Yi1vcHRpbWFsIG9yZGVyaW5nLCBidXQgaXQgd29uJ3QgY3Jh
c2gKLSAgICBhdXRvJiBsaHNFcXVpdiA9IGVxdWl2Q2xhc3Nlc0J5Q3B1W2xoc107Ci0gICAgYXV0
byYgcmhzRXF1aXYgPSBlcXVpdkNsYXNzZXNCeUNwdVtyaHNdOwotICAgIGZvciAoc3NpemVfdCBp
ID0gc3NpemVfdChzdGQ6Om1pbihsaHNFcXVpdi5zaXplKCksIHJoc0VxdWl2LnNpemUoKSkpIC0g
MTsKLSAgICAgICAgIGkgPj0gMDsKLSAgICAgICAgIC0taSkgewotICAgICAgYXV0byBpZHggPSBz
aXplX3QoaSk7Ci0gICAgICBpZiAobGhzRXF1aXZbaWR4XSAhPSByaHNFcXVpdltpZHhdKSB7Ci0g
ICAgICAgIHJldHVybiBsaHNFcXVpdltpZHhdIDwgcmhzRXF1aXZbaWR4XTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBicmVhayB0aWVzIGRldGVybWluaXN0aWNhbGx5IGJ5IGNwdQotICAgIHJl
dHVybiBsaHMgPCByaHM7Ci0gIH0pOwotCi0gIC8vIHRoZSBjcHVzIGFyZSBub3cgc29ydGVkIGJ5
IGxvY2FsaXR5LCB3aXRoIG5laWdoYm9yaW5nIGVudHJpZXMgY2xvc2VyCi0gIC8vIHRvIGVhY2gg
b3RoZXIgdGhhbiBlbnRyaWVzIHRoYXQgYXJlIGZhciBhd2F5LiAgRm9yIHN0cmlwaW5nIHdlIHdh
bnQKLSAgLy8gdGhlIGludmVyc2UgbWFwLCBzaW5jZSB3ZSBhcmUgc3RhcnRpbmcgd2l0aCB0aGUg
Y3B1Ci0gIHN0ZDo6dmVjdG9yPHNpemVfdD4gaW5kZXhlcyhjcHVzLnNpemUoKSk7Ci0gIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY3B1cy5zaXplKCk7ICsraSkgewotICAgIGluZGV4ZXNbY3B1c1tp
XV0gPSBpOwotICB9Ci0KLSAgcmV0dXJuIENhY2hlTG9jYWxpdHl7Ci0gICAgICBjcHVzLnNpemUo
KSwgc3RkOjptb3ZlKG51bUNhY2hlc0J5TGV2ZWwpLCBzdGQ6Om1vdmUoaW5kZXhlcyl9OwotfQot
Ci1DYWNoZUxvY2FsaXR5IENhY2hlTG9jYWxpdHk6OnJlYWRGcm9tU3lzZnMoKSB7Ci0gIHJldHVy
biByZWFkRnJvbVN5c2ZzVHJlZShbXShzdGQ6OnN0cmluZyBuYW1lKSB7Ci0gICAgc3RkOjppZnN0
cmVhbSB4aShuYW1lLmNfc3RyKCkpOwotICAgIHN0ZDo6c3RyaW5nIHJ2OwotICAgIHN0ZDo6Z2V0
bGluZSh4aSwgcnYpOwotICAgIHJldHVybiBydjsKLSAgfSk7Ci19Ci0KLUNhY2hlTG9jYWxpdHkg
Q2FjaGVMb2NhbGl0eTo6dW5pZm9ybShzaXplX3QgbnVtQ3B1cykgewotICBDYWNoZUxvY2FsaXR5
IHJ2OwotCi0gIHJ2Lm51bUNwdXMgPSBudW1DcHVzOwotCi0gIC8vIG9uZSBjYWNoZSBzaGFyZWQg
YnkgYWxsIGNwdXMKLSAgcnYubnVtQ2FjaGVzQnlMZXZlbC5wdXNoX2JhY2sobnVtQ3B1cyk7Ci0K
LSAgLy8gbm8gcGVybXV0YXRpb25zIGluIGxvY2FsaXR5IGluZGV4IG1hcHBpbmcKLSAgZm9yIChz
aXplX3QgY3B1ID0gMDsgY3B1IDwgbnVtQ3B1czsgKytjcHUpIHsKLSAgICBydi5sb2NhbGl0eUlu
ZGV4QnlDcHUucHVzaF9iYWNrKGNwdSk7Ci0gIH0KLQotICByZXR1cm4gcnY7Ci19Ci0KLS8vLy8v
Ly8vLy8vLy8vIEdldGNwdQotCi1HZXRjcHU6OkZ1bmMgR2V0Y3B1OjpyZXNvbHZlVmRzb0Z1bmMo
KSB7Ci0jaWYgIUZPTExZX0hBVkVfTElOVVhfVkRTTwotICByZXR1cm4gbnVsbHB0cjsKLSNlbHNl
Ci0gIHZvaWQqIGggPSBkbG9wZW4oImxpbnV4LXZkc28uc28uMSIsIFJUTERfTEFaWSB8IFJUTERf
TE9DQUwgfCBSVExEX05PTE9BRCk7Ci0gIGlmIChoID09IG51bGxwdHIpIHsKLSAgICByZXR1cm4g
bnVsbHB0cjsKLSAgfQotCi0gIGF1dG8gZnVuYyA9IEdldGNwdTo6RnVuYyhkbHN5bShoLCAiX192
ZHNvX2dldGNwdSIpKTsKLSAgaWYgKGZ1bmMgPT0gbnVsbHB0cikgewotICAgIC8vIHRlY2huaWNh
bGx5IGEgbnVsbCByZXN1bHQgY291bGQgZWl0aGVyIGJlIGEgZmFpbHVyZSBvciBhIHN1Y2Nlc3Nm
dWwKLSAgICAvLyBsb29rdXAgb2YgYSBzeW1ib2wgd2l0aCB0aGUgbnVsbCB2YWx1ZSwgYnV0IHRo
ZSBzZWNvbmQgY2FuJ3QgYWN0dWFsbHkKLSAgICAvLyBoYXBwZW4gZm9yIHRoaXMgc3ltYm9sLiAg
Tm8gcG9pbnQgaG9sZGluZyB0aGUgaGFuZGxlIGZvcmV2ZXIgaWYKLSAgICAvLyB3ZSBkb24ndCBu
ZWVkIHRoZSBjb2RlCi0gICAgZGxjbG9zZShoKTsKLSAgfQotCi0gIHJldHVybiBmdW5jOwotI2Vu
ZGlmCi19Ci0KLSNpZmRlZiBGT0xMWV9UTFMKLS8vLy8vLy8vLy8vLy8vLyBTZXF1ZW50aWFsVGhy
ZWFkSWQKLXRlbXBsYXRlIHN0cnVjdCBTZXF1ZW50aWFsVGhyZWFkSWQ8c3RkOjphdG9taWM+Owot
I2VuZGlmCi0KLS8vLy8vLy8vLy8vLy8vLyBBY2Nlc3NTcHJlYWRlcgotdGVtcGxhdGUgc3RydWN0
IEFjY2Vzc1NwcmVhZGVyPHN0ZDo6YXRvbWljPjsKLQotU2ltcGxlQWxsb2NhdG9yOjpTaW1wbGVB
bGxvY2F0b3Ioc2l6ZV90IGFsbG9jU2l6ZSwgc2l6ZV90IHN6KQotICAgIDogYWxsb2NTaXplX3th
bGxvY1NpemV9LCBzel8oc3opIHt9Ci0KLVNpbXBsZUFsbG9jYXRvcjo6flNpbXBsZUFsbG9jYXRv
cigpIHsKLSAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGcobV8pOwotICBmb3IgKGF1dG8m
IGJsb2NrIDogYmxvY2tzXykgewotICAgIGRldGFpbDo6YWxpZ25lZF9mcmVlKGJsb2NrKTsKLSAg
fQotfQotCi12b2lkKiBTaW1wbGVBbGxvY2F0b3I6OmFsbG9jYXRlSGFyZCgpIHsKLSAgLy8gQWxs
b2NhdGUgYSBuZXcgc2xhYi4KLSAgbWVtXyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkZXRhaWw6
OmFsaWduZWRfbWFsbG9jKGFsbG9jU2l6ZV8sIGFsbG9jU2l6ZV8pKTsKLSAgaWYgKCFtZW1fKSB7
Ci0gICAgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOwotICB9Ci0gIGVuZF8gPSBtZW1fICsgYWxs
b2NTaXplXzsKLSAgYmxvY2tzXy5wdXNoX2JhY2sobWVtXyk7Ci0KLSAgLy8gSW5zdGFsbCBhIHBv
aW50ZXIgdG8gb3Vyc2VsdmVzIGFzIHRoZSBhbGxvY2F0b3IuCi0gICpyZWludGVycHJldF9jYXN0
PFNpbXBsZUFsbG9jYXRvcioqPihtZW1fKSA9IHRoaXM7Ci0gIHN0YXRpY19hc3NlcnQoCi0gICAg
ICBmb2xseTo6bWF4X2FsaWduX3YgPj0gc2l6ZW9mKFNpbXBsZUFsbG9jYXRvciopLCAiYWxpZ25t
ZW50IHRvbyBzbWFsbCIpOwotICBtZW1fICs9IHN0ZDo6bWluKHN6XywgZm9sbHk6Om1heF9hbGln
bl92KTsKLQotICAvLyBOZXcgYWxsb2NhdGlvbi4KLSAgYXV0byBtZW0gPSBtZW1fOwotICBtZW1f
ICs9IHN6XzsKLSAgYXNzZXJ0KGludHB0cl90KG1lbSkgJSAxMjggIT0gMCk7Ci0gIHJldHVybiBt
ZW07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGZvbGx5CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9jb25jdXJyZW5jeS9DYWNoZUxvY2FsaXR5Lmgg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9jb25jdXJyZW5jeS9D
YWNoZUxvY2FsaXR5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZjU1NTdjZWNl
ZDFmZjlkZTMzNjlhODJmOTQyYmQ3NmM4NDg0ODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Zm9sbHkvY29uY3VycmVuY3kvQ2FjaGVMb2NhbGl0eS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTA5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExp
Y2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5z
ZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
LSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBT
ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz
c2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxhcnJheT4KLSNpbmNs
dWRlIDxhdG9taWM+Ci0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgot
I2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDxtdXRleD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0j
aW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KLSNpbmNsdWRl
IDx2ZWN0b3I+Ci0KLSNpbmNsdWRlIDxmb2xseS9IYXNoLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvSW5k
ZXN0cnVjdGlibGUuaD4KLSNpbmNsdWRlIDxmb2xseS9MaWtlbHkuaD4KLSNpbmNsdWRlIDxmb2xs
eS9NZW1vcnkuaD4KLSNpbmNsdWRlIDxmb2xseS9Qb3J0YWJpbGl0eS5oPgotI2luY2x1ZGUgPGZv
bGx5L1RocmVhZElkLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvQml0c0Z1bmN0ZXhj
ZXB0Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvTWVtb3J5Lmg+Ci0KLW5hbWVzcGFj
ZSBmb2xseSB7Ci0KLS8vIFRoaXMgZmlsZSBjb250YWlucyBzZXZlcmFsIGNsYXNzZXMgdGhhdCBt
aWdodCBiZSB1c2VmdWwgaWYgeW91IGFyZQotLy8gdHJ5aW5nIHRvIGR5bmFtaWNhbGx5IG9wdGlt
aXplIGNhY2hlIGxvY2FsaXR5OiBDYWNoZUxvY2FsaXR5IHJlYWRzCi0vLyBjYWNoZSBzaGFyaW5n
IGluZm9ybWF0aW9uIGZyb20gc3lzZnMgdG8gZGV0ZXJtaW5lIGhvdyBDUFVzIHNob3VsZCBiZQot
Ly8gZ3JvdXBlZCB0byBtaW5pbWl6ZSBjb250ZW50aW9uLCBHZXRjcHUgcHJvdmlkZXMgZmFzdCBh
Y2Nlc3MgdG8gdGhlCi0vLyBjdXJyZW50IENQVSB2aWEgX192ZHNvX2dldGNwdSwgYW5kIEFjY2Vz
c1NwcmVhZGVyIHVzZXMgdGhlc2UgdHdvIHRvCi0vLyBvcHRpbWFsbHkgc3ByZWFkIGFjY2Vzc2Vz
IGFtb25nIGEgcHJlZGV0ZXJtaW5lZCBudW1iZXIgb2Ygc3RyaXBlcy4KLS8vCi0vLyBBY2Nlc3NT
cHJlYWRlcjw+OjpjdXJyZW50KG4pIG1pY3JvYmVuY2htYXJrcyBhdCAyMiBuYW5vcywgd2hpY2gg
aXMKLS8vIHN1YnN0YW50aWFsbHkgbGVzcyB0aGFuIHRoZSBjb3N0IG9mIGEgY2FjaGUgbWlzcy4g
IFRoaXMgbWVhbnMgdGhhdCB3ZQotLy8gY2FuIGVmZmVjdGl2ZWx5IHVzZSBpdCB0byByZWR1Y2Ug
Y2FjaGUgbGluZSBwaW5nLXBvbmcgb24gc3RyaXBlZCBkYXRhCi0vLyBzdHJ1Y3R1cmVzIHN1Y2gg
YXMgSW5kZXhlZE1lbVBvb2wgb3Igc3RhdGlzdGljcyBjb3VudGVycy4KLS8vCi0vLyBCZWNhdXNl
IENhY2hlTG9jYWxpdHkgbG9va3MgYXQgYWxsIG9mIHRoZSBjYWNoZSBsZXZlbHMsIGl0IGNhbiBi
ZQotLy8gdXNlZCBmb3IgZGlmZmVyZW50IGxldmVscyBvZiBvcHRpbWl6YXRpb24uICBBY2Nlc3NT
cHJlYWRlcigyKSBkb2VzCi0vLyBwZXItY2hpcCBzcHJlYWRpbmcgb24gYSBkdWFsIHNvY2tldCBz
eXN0ZW0uICBBY2Nlc3NTcHJlYWRlcihudW1DcHVzKQotLy8gZG9lcyBwZXJmZWN0IHBlci1jcHUg
c3ByZWFkaW5nLiAgQWNjZXNzU3ByZWFkZXIobnVtQ3B1cyAvIDIpIGRvZXMKLS8vIHBlcmZlY3Qg
TDEgc3ByZWFkaW5nIGluIGEgc3lzdGVtIHdpdGggaHlwZXJ0aHJlYWRpbmcgZW5hYmxlZC4KLQot
c3RydWN0IENhY2hlTG9jYWxpdHkgewotICAvLy8gMSBtb3JlIHRoYW4gdGhlIG1heGltdW0gdmFs
dWUgdGhhdCBjYW4gYmUgcmV0dXJuZWQgZnJvbSBzY2hlZF9nZXRjcHUKLSAgLy8vIG9yIGdldGNw
dS4gIFRoaXMgaXMgdGhlIG51bWJlciBvZiBoYXJkd2FyZSB0aHJlYWQgY29udGV4dHMgcHJvdmlk
ZWQKLSAgLy8vIGJ5IHRoZSBwcm9jZXNzb3JzCi0gIHNpemVfdCBudW1DcHVzOwotCi0gIC8vLyBI
b2xkcyB0aGUgbnVtYmVyIG9mIGNhY2hlcyBwcmVzZW50IGF0IGVhY2ggY2FjaGUgbGV2ZWwgKDAg
aXMKLSAgLy8vIHRoZSBjbG9zZXN0IHRvIHRoZSBjcHUpLiAgVGhpcyBpcyB0aGUgbnVtYmVyIG9m
IEFjY2Vzc1NwcmVhZGVyCi0gIC8vLyBzdHJpcGVzIG5lZWRlZCB0byBhdm9pZCBjcm9zcy1jYWNo
ZSBjb21tdW5pY2F0aW9uIGF0IHRoZSBzcGVjaWZpZWQKLSAgLy8vIGxheWVyLiAgbnVtQ2FjaGVz
QnlMZXZlbC5mcm9udCgpIGlzIHRoZSBudW1iZXIgb2YgTDEgY2FjaGVzIGFuZAotICAvLy8gbnVt
Q2FjaGVzQnlMZXZlbC5iYWNrKCkgaXMgdGhlIG51bWJlciBvZiBsYXN0LWxldmVsIGNhY2hlcy4K
LSAgc3RkOjp2ZWN0b3I8c2l6ZV90PiBudW1DYWNoZXNCeUxldmVsOwotCi0gIC8vLyBBIG1hcCBm
cm9tIGNwdSAoZnJvbSBzY2hlZF9nZXRjcHUgb3IgZ2V0Y3B1KSB0byBhbiBpbmRleCBpbiB0aGUK
LSAgLy8vIHJhbmdlIDAuLm51bUNwdXMtMSwgd2hlcmUgbmVpZ2hib3JpbmcgbG9jYWxpdHkgaW5k
aWNlcyBhcmUgbW9yZQotICAvLy8gbGlrZWx5IHRvIHNoYXJlIGNhY2hlcyB0aGVuIGluZGljZXMg
ZmFyIGF3YXkuICBBbGwgb2YgdGhlIG1lbWJlcnMKLSAgLy8vIG9mIGEgcGFydGljdWxhciBjYWNo
ZSBsZXZlbCBiZSBjb250aWd1b3VzIGluIHRoZWlyIGxvY2FsaXR5IGluZGV4LgotICAvLy8gRm9y
IGV4YW1wbGUsIGlmIG51bUNwdXMgaXMgMzIgYW5kIG51bUNhY2hlc0J5TGV2ZWwuYmFjaygpIGlz
IDIsCi0gIC8vLyB0aGVuIGNwdXMgd2l0aCBhIGxvY2FsaXR5IGluZGV4IDwgMTYgd2lsbCBzaGFy
ZSBvbmUgbGFzdC1sZXZlbAotICAvLy8gY2FjaGUgYW5kIGNwdXMgd2l0aCBhIGxvY2FsaXR5IGlu
ZGV4ID49IDE2IHdpbGwgc2hhcmUgdGhlIG90aGVyLgotICBzdGQ6OnZlY3RvcjxzaXplX3Q+IGxv
Y2FsaXR5SW5kZXhCeUNwdTsKLQotICAvLy8gUmV0dXJucyB0aGUgYmVzdCBDYWNoZUxvY2FsaXR5
IGluZm9ybWF0aW9uIGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQKLSAgLy8vIHN5c3RlbSwgY2Fj
aGVkIGZvciBmYXN0IGFjY2Vzcy4gIFRoaXMgd2lsbCBiZSBsb2FkZWQgZnJvbSBzeXNmcyBpZgot
ICAvLy8gcG9zc2libGUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNvcnJlY3QgaW4gdGhlIG51bWJl
ciBvZiBDUFVzIGJ1dAotICAvLy8gbm90IGluIHRoZWlyIHNoYXJpbmcgc3RydWN0dXJlLgotICAv
Ly8KLSAgLy8vIElmIHlvdSBhcmUgaW50byB5byBkYXdncywgdGhpcyBpcyBhIHNoYXJlZCBjYWNo
ZSBvZiB0aGUgbG9jYWwKLSAgLy8vIGxvY2FsaXR5IG9mIHRoZSBzaGFyZWQgY2FjaGVzLgotICAv
Ly8KLSAgLy8vIFRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgaGVyZSBpcyB1c2VkIHRvIGFsbG93IGlu
amVjdGlvbiBvZiBhCi0gIC8vLyByZXBlYXRhYmxlIENhY2hlTG9jYWxpdHkgc3RydWN0dXJlIGR1
cmluZyB0ZXN0aW5nLiAgUmF0aGVyIHRoYW4KLSAgLy8vIGluamVjdCB0aGUgdHlwZSBvZiB0aGUg
Q2FjaGVMb2NhbGl0eSBwcm92aWRlciBpbnRvIGV2ZXJ5IGRhdGEgdHlwZQotICAvLy8gdGhhdCB0
cmFuc2l0aXZlbHkgdXNlcyBpdCwgYWxsIGNvbXBvbmVudHMgc2VsZWN0IGJldHdlZW4gdGhlIGRl
ZmF1bHQKLSAgLy8vIHN5c2ZzIGltcGxlbWVudGF0aW9uIGFuZCBhIGRldGVybWluaXN0aWMgaW1w
bGVtZW50YXRpb24gYnkga2V5aW5nCi0gIC8vLyBvZmYgdGhlIHR5cGUgb2YgdGhlIHVuZGVybHlp
bmcgYXRvbWljLiAgU2VlIERldGVybWluaXN0aWNTY2hlZHVsZXIuCi0gIHRlbXBsYXRlIDx0ZW1w
bGF0ZSA8dHlwZW5hbWU+IGNsYXNzIEF0b20gPSBzdGQ6OmF0b21pYz4KLSAgc3RhdGljIGNvbnN0
IENhY2hlTG9jYWxpdHkmIHN5c3RlbSgpOwotCi0gIC8vLyBSZWFkcyBDYWNoZUxvY2FsaXR5IGlu
Zm9ybWF0aW9uIGZyb20gYSB0cmVlIHN0cnVjdHVyZWQgbGlrZQotICAvLy8gdGhlIHN5c2ZzIGZp
bGVzeXN0ZW0uICBUaGUgcHJvdmlkZWQgZnVuY3Rpb24gd2lsbCBiZSBldmFsdWF0ZWQKLSAgLy8v
IGZvciBlYWNoIHN5c2ZzIGZpbGUgdGhhdCBuZWVkcyB0byBiZSBxdWVyaWVkLiAgVGhlIGZ1bmN0
aW9uCi0gIC8vLyBzaG91bGQgcmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZpcnN0IGxp
bmUgb2YgdGhlIGZpbGUKLSAgLy8vIChub3QgaW5jbHVkaW5nIHRoZSBuZXdsaW5lKSwgb3IgYW4g
ZW1wdHkgc3RyaW5nIGlmIHRoZSBmaWxlIGRvZXMKLSAgLy8vIG5vdCBleGlzdC4gIFRoZSBmdW5j
dGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHBhdGhzIG9mIHRoZSBmb3JtCi0gIC8vLyAvc3lzL2Rl
dmljZXMvc3lzdGVtL2NwdS9jcHUqL2NhY2hlL2luZGV4Ki97dHlwZSxzaGFyZWRfY3B1X2xpc3R9
IC4KLSAgLy8vIFRocm93cyBhbiBleGNlcHRpb24gaWYgbm8gY2FjaGVzIGNhbiBiZSBwYXJzZWQg
YXQgYWxsLgotICBzdGF0aWMgQ2FjaGVMb2NhbGl0eSByZWFkRnJvbVN5c2ZzVHJlZSgKLSAgICAg
IGNvbnN0IHN0ZDo6ZnVuY3Rpb248c3RkOjpzdHJpbmcoc3RkOjpzdHJpbmcpPiYgbWFwcGluZyk7
Ci0KLSAgLy8vIFJlYWRzIENhY2hlTG9jYWxpdHkgaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVhbCBz
eXNmcyBmaWxlc3lzdGVtLgotICAvLy8gVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBubyBjYWNoZSBp
bmZvcm1hdGlvbiBjYW4gYmUgbG9hZGVkLgotICBzdGF0aWMgQ2FjaGVMb2NhbGl0eSByZWFkRnJv
bVN5c2ZzKCk7Ci0KLSAgLy8vIFJldHVybnMgYSB1c2FibGUgKGJ1dCBwcm9iYWJseSBub3QgcmVm
bGVjdGl2ZSBvZiByZWFsaXR5KQotICAvLy8gQ2FjaGVMb2NhbGl0eSBzdHJ1Y3R1cmUgd2l0aCB0
aGUgc3BlY2lmaWVkIG51bWJlciBvZiBjcHVzIGFuZCBhCi0gIC8vLyBzaW5nbGUgY2FjaGUgbGV2
ZWwgdGhhdCBhc3NvY2lhdGVzIG9uZSBjcHUgcGVyIGNhY2hlLgotICBzdGF0aWMgQ2FjaGVMb2Nh
bGl0eSB1bmlmb3JtKHNpemVfdCBudW1DcHVzKTsKLQotICBlbnVtIHsKLSAgICAvLy8gTWVtb3J5
IGxvY2F0aW9ucyBvbiB0aGUgc2FtZSBjYWNoZSBsaW5lIGFyZSBzdWJqZWN0IHRvIGZhbHNlCi0g
ICAgLy8vIHNoYXJpbmcsIHdoaWNoIGlzIHZlcnkgYmFkIGZvciBwZXJmb3JtYW5jZS4gIE1pY3Jv
YmVuY2htYXJrcwotICAgIC8vLyBpbmRpY2F0ZSB0aGF0IHBhaXJzIG9mIGNhY2hlIGxpbmVzIGFs
c28gc2VlIGludGVyZmVyZW5jZSB1bmRlcgotICAgIC8vLyBoZWF2eSB1c2Ugb2YgYXRvbWljIG9w
ZXJhdGlvbnMgKG9ic2VydmVkIGZvciBhdG9taWMgaW5jcmVtZW50IG9uCi0gICAgLy8vIFNhbmR5
IEJyaWRnZSkuICBTZWUgRk9MTFlfQUxJR05fVE9fQVZPSURfRkFMU0VfU0hBUklORwotICAgIGtG
YWxzZVNoYXJpbmdSYW5nZSA9IDEyOAotICB9OwotCi0gIHN0YXRpY19hc3NlcnQoCi0gICAgICBr
RmFsc2VTaGFyaW5nUmFuZ2UgPT0gMTI4LAotICAgICAgIkZPTExZX0FMSUdOX1RPX0FWT0lEX0ZB
TFNFX1NIQVJJTkcgc2hvdWxkIHRyYWNrIGtGYWxzZVNoYXJpbmdSYW5nZSIpOwotfTsKLQotLy8g
VE9ETyByZXBsYWNlIF9fYXR0cmlidXRlX18gd2l0aCBhbGlnbmFzIGFuZCAxMjggd2l0aCBrRmFs
c2VTaGFyaW5nUmFuZ2UKLQotLy8vIEFuIGF0dHJpYnV0ZSB0aGF0IHdpbGwgY2F1c2UgYSB2YXJp
YWJsZSBvciBmaWVsZCB0byBiZSBhbGlnbmVkIHNvIHRoYXQKLS8vLyBpdCBkb2Vzbid0IGhhdmUg
ZmFsc2Ugc2hhcmluZyB3aXRoIGFueXRoaW5nIGF0IGEgc21hbGxlciBtZW1vcnkgYWRkcmVzcy4K
LSNkZWZpbmUgRk9MTFlfQUxJR05fVE9fQVZPSURfRkFMU0VfU0hBUklORyBGT0xMWV9BTElHTkVE
KDEyOCkKLQotLy8vIEtub3dzIGhvdyB0byBkZXJpdmUgYSBmdW5jdGlvbiBwb2ludGVyIHRvIHRo
ZSBWRFNPIGltcGxlbWVudGF0aW9uIG9mCi0vLy8gZ2V0Y3B1KDIpLCBpZiBhdmFpbGFibGUKLXN0
cnVjdCBHZXRjcHUgewotICAvLy8gRnVuY3Rpb24gcG9pbnRlciB0byBhIGZ1bmN0aW9uIHdpdGgg
dGhlIHNhbWUgc2lnbmF0dXJlIGFzIGdldGNwdSgyKS4KLSAgdHlwZWRlZiBpbnQgKCpGdW5jKSh1
bnNpZ25lZCogY3B1LCB1bnNpZ25lZCogbm9kZSwgdm9pZCogdW51c2VkKTsKLQotICAvLy8gUmV0
dXJucyBhIHBvaW50ZXIgdG8gdGhlIFZEU08gaW1wbGVtZW50YXRpb24gb2YgZ2V0Y3B1KDIpLCBp
ZgotICAvLy8gYXZhaWxhYmxlLCBvciBudWxscHRyIG90aGVyd2lzZS4gIFRoaXMgZnVuY3Rpb24g
bWF5IGJlIHF1aXRlCi0gIC8vLyBleHBlbnNpdmUsIGJlIHN1cmUgdG8gY2FjaGUgdGhlIHJlc3Vs
dC4KLSAgc3RhdGljIEZ1bmMgcmVzb2x2ZVZkc29GdW5jKCk7Ci19OwotCi0jaWZkZWYgRk9MTFlf
VExTCi10ZW1wbGF0ZSA8dGVtcGxhdGUgPHR5cGVuYW1lPiBjbGFzcyBBdG9tPgotc3RydWN0IFNl
cXVlbnRpYWxUaHJlYWRJZCB7Ci0gIC8vLyBSZXR1cm5zIHRoZSB0aHJlYWQgaWQgYXNzaWduZWQg
dG8gdGhlIGN1cnJlbnQgdGhyZWFkCi0gIHN0YXRpYyB1bnNpZ25lZCBnZXQoKSB7Ci0gICAgYXV0
byBydiA9IGN1cnJlbnRJZDsKLSAgICBpZiAoVU5MSUtFTFkocnYgPT0gMCkpIHsKLSAgICAgIHJ2
ID0gY3VycmVudElkID0gKytwcmV2SWQ7Ci0gICAgfQotICAgIHJldHVybiBydjsKLSAgfQotCi0g
cHJpdmF0ZToKLSAgc3RhdGljIEF0b208dW5zaWduZWQ+IHByZXZJZDsKLQotICBzdGF0aWMgRk9M
TFlfVExTIHVuc2lnbmVkIGN1cnJlbnRJZDsKLX07Ci0KLXRlbXBsYXRlIDx0ZW1wbGF0ZSA8dHlw
ZW5hbWU+IGNsYXNzIEF0b20+Ci1BdG9tPHVuc2lnbmVkPiBTZXF1ZW50aWFsVGhyZWFkSWQ8QXRv
bT46OnByZXZJZCgwKTsKLQotdGVtcGxhdGUgPHRlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3MgQXRv
bT4KLUZPTExZX1RMUyB1bnNpZ25lZCBTZXF1ZW50aWFsVGhyZWFkSWQ8QXRvbT46OmN1cnJlbnRJ
ZCgwKTsKLQotLy8gU3VwcHJlc3MgdGhpcyBpbnN0YW50aWF0aW9uIGluIG90aGVyIHRyYW5zbGF0
aW9uIHVuaXRzLiBJdCBpcwotLy8gaW5zdGFudGlhdGVkIGluIENhY2hlTG9jYWxpdHkuY3BwCi1l
eHRlcm4gdGVtcGxhdGUgc3RydWN0IFNlcXVlbnRpYWxUaHJlYWRJZDxzdGQ6OmF0b21pYz47Ci0j
ZW5kaWYKLQotc3RydWN0IEhhc2hpbmdUaHJlYWRJZCB7Ci0gIHN0YXRpYyB1bnNpZ25lZCBnZXQo
KSB7Ci0gICAgcmV0dXJuIGhhc2g6OnR3YW5nXzMyZnJvbTY0KGdldEN1cnJlbnRUaHJlYWRJRCgp
KTsKLSAgfQotfTsKLQotLy8vIEEgY2xhc3MgdGhhdCBsYXppbHkgYmluZHMgYSB1bmlxdWUgKGZv
ciBlYWNoIGltcGxlbWVudGF0aW9uIG9mIEF0b20pCi0vLy8gaWRlbnRpZmllciB0byBhIHRocmVh
ZC4gIFRoaXMgaXMgYSBmYWxsYmFjayBtZWNoYW5pc20gZm9yIHRoZSBhY2Nlc3MKLS8vLyBzcHJl
YWRlciBpZiBfX3Zkc29fZ2V0Y3B1IGNhbid0IGJlIGxvYWRlZAotdGVtcGxhdGUgPHR5cGVuYW1l
IFRocmVhZElkPgotc3RydWN0IEZhbGxiYWNrR2V0Y3B1IHsKLSAgLy8vIEZpbGxzIHRoZSB0aHJl
YWQgaWQgaW50byB0aGUgY3B1IGFuZCBub2RlIG91dCBwYXJhbXMgKGlmIHRoZXkKLSAgLy8vIGFy
ZSBub24tbnVsbCkuICBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byBhY3QgbGlrZSBnZXRjcHUg
d2hlbiBhCi0gIC8vLyBmYXN0LWVub3VnaCBmb3JtIG9mIGdldGNwdSBpc24ndCBhdmFpbGFibGUg
b3IgaXNuJ3QgZGVzaXJlZAotICBzdGF0aWMgaW50IGdldGNwdSh1bnNpZ25lZCogY3B1LCB1bnNp
Z25lZCogbm9kZSwgdm9pZCogLyogdW51c2VkICovKSB7Ci0gICAgYXV0byBpZCA9IFRocmVhZElk
OjpnZXQoKTsKLSAgICBpZiAoY3B1KSB7Ci0gICAgICAqY3B1ID0gaWQ7Ci0gICAgfQotICAgIGlm
IChub2RlKSB7Ci0gICAgICAqbm9kZSA9IGlkOwotICAgIH0KLSAgICByZXR1cm4gMDsKLSAgfQot
fTsKLQotI2lmZGVmIEZPTExZX1RMUwotdHlwZWRlZiBGYWxsYmFja0dldGNwdTxTZXF1ZW50aWFs
VGhyZWFkSWQ8c3RkOjphdG9taWM+PiBGYWxsYmFja0dldGNwdVR5cGU7Ci0jZWxzZQotdHlwZWRl
ZiBGYWxsYmFja0dldGNwdTxIYXNoaW5nVGhyZWFkSWQ+IEZhbGxiYWNrR2V0Y3B1VHlwZTsKLSNl
bmRpZgotCi0vLy8gQWNjZXNzU3ByZWFkZXIgYXJyYW5nZXMgYWNjZXNzIHRvIGEgc3RyaXBlZCBk
YXRhIHN0cnVjdHVyZSBpbiBzdWNoIGEKLS8vLyB3YXkgdGhhdCBjb25jdXJyZW50bHkgZXhlY3V0
aW5nIHRocmVhZHMgYXJlIGxpa2VseSB0byBiZSBhY2Nlc3NpbmcKLS8vLyBkaWZmZXJlbnQgc3Ry
aXBlcy4gIEl0IGRvZXMgTk9UIGd1YXJhbnRlZSB1bmNvbnRlbmRlZCBhY2Nlc3MuCi0vLy8gWW91
ciB1bmRlcmx5aW5nIGFsZ29yaXRobSBtdXN0IGJlIHRocmVhZC1zYWZlIHdpdGhvdXQgc3ByZWFk
aW5nLCB0aGlzCi0vLy8gaXMgbWVyZWx5IGFuIG9wdGltaXphdGlvbi4gIEFjY2Vzc1NwcmVhZGVy
OjpjdXJyZW50KG4pIGlzIHR5cGljYWxseQotLy8vIG11Y2ggZmFzdGVyIHRoYW4gYSBjYWNoZSBt
aXNzICgxMiBuYW5vcyBvbiBteSBkZXYgYm94LCB0ZXN0ZWQgZmFzdAotLy8vIGluIGJvdGggMi42
IGFuZCAzLjIga2VybmVscykuCi0vLy8KLS8vLyBJZiBhdmFpbGFibGUgKGFuZCBub3QgdXNpbmcg
dGhlIGRldGVybWluaXN0aWMgdGVzdGluZyBpbXBsZW1lbnRhdGlvbikKLS8vLyBBY2Nlc3NTcHJl
YWRlciB1c2VzIHRoZSBnZXRjcHUgc3lzdGVtIGNhbGwgdmlhIFZEU08gYW5kIHRoZQotLy8vIHBy
ZWNpc2UgbG9jYWxpdHkgaW5mb3JtYXRpb24gcmV0cmlldmVkIGZyb20gc3lzZnMgYnkgQ2FjaGVM
b2NhbGl0eS4KLS8vLyBUaGlzIHByb3ZpZGVzIG9wdGltYWwgYW50aS1zaGFyaW5nIGF0IGEgZnJh
Y3Rpb24gb2YgdGhlIGNvc3Qgb2YgYQotLy8vIGNhY2hlIG1pc3MuCi0vLy8KLS8vLyBXaGVuIHRo
ZXJlIGFyZSBub3QgYXMgbWFueSBzdHJpcGVzIGFzIHByb2Nlc3NvcnMsIHdlIHRyeSB0byBvcHRp
bWFsbHkKLS8vLyBwbGFjZSB0aGUgY2FjaGUgc2hhcmluZyBib3VuZGFyaWVzLiAgVGhpcyBtZWFu
cyB0aGF0IGlmIHlvdSBoYXZlIDIKLS8vLyBzdHJpcGVzIGFuZCBydW4gb24gYSBkdWFsLXNvY2tl
dCBzeXN0ZW0sIHlvdXIgMiBzdHJpcGVzIHdpbGwgZWFjaCBnZXQKLS8vLyBhbGwgb2YgdGhlIGNv
cmVzIGZyb20gYSBzaW5nbGUgc29ja2V0LiAgSWYgeW91IGhhdmUgMTYgc3RyaXBlcyBvbiBhCi0v
Ly8gMTYgY29yZSBzeXN0ZW0gcGx1cyBoeXBlcnRocmVhZGluZyAoMzIgY3B1cyksIGVhY2ggY29y
ZSB3aWxsIGdldCBpdHMKLS8vLyBvd24gc3RyaXBlIGFuZCB0aGVyZSB3aWxsIGJlIG5vIGNhY2hl
IHNoYXJpbmcgYXQgYWxsLgotLy8vCi0vLy8gQWNjZXNzU3ByZWFkZXIgaGFzIGEgZmFsbGJhY2sg
bWVjaGFuaXNtIGZvciB3aGVuIF9fdmRzb19nZXRjcHUgY2FuJ3QgYmUKLS8vLyBsb2FkZWQsIG9y
IGZvciB1c2UgZHVyaW5nIGRldGVybWluaXN0aWMgdGVzdGluZy4gIFVzaW5nIHNjaGVkX2dldGNw
dQotLy8vIG9yIHRoZSBnZXRjcHUgc3lzY2FsbCB3b3VsZCBuZWdhdGUgdGhlIHBlcmZvcm1hbmNl
IGFkdmFudGFnZXMgb2YKLS8vLyBhY2Nlc3Mgc3ByZWFkaW5nLCBzbyB3ZSB1c2UgYSB0aHJlYWQt
bG9jYWwgdmFsdWUgYW5kIGEgc2hhcmVkIGF0b21pYwotLy8vIGNvdW50ZXIgdG8gc3ByZWFkIGFj
Y2VzcyBvdXQuICBPbiBzeXN0ZW1zIGxhY2tpbmcgYm90aCBhIGZhc3QgZ2V0Y3B1KCkKLS8vLyBh
bmQgVExTLCB3ZSBoYXNoIHRoZSB0aHJlYWQgaWQgdG8gc3ByZWFkIGFjY2Vzc2VzLgotLy8vCi0v
Ly8gQWNjZXNzU3ByZWFkZXIgaXMgdGVtcGxhdGVkIG9uIHRoZSB0ZW1wbGF0ZSB0eXBlIHRoYXQg
aXMgdXNlZAotLy8vIHRvIGltcGxlbWVudCBhdG9taWNzLCBhcyBhIHdheSB0byBpbnN0YW50aWF0
ZSB0aGUgdW5kZXJseWluZwotLy8vIGhldXJpc3RpY3MgZGlmZmVyZW50bHkgZm9yIHByb2R1Y3Rp
b24gdXNlIGFuZCBkZXRlcm1pbmlzdGljIHVuaXQKLS8vLyB0ZXN0aW5nLiAgU2VlIERldGVybWlu
aXN0aWNTY2hlZHVsZXIgZm9yIG1vcmUuICBJZiB5b3UgYXJlbid0IHVzaW5nCi0vLy8gRGV0ZXJt
aW5pc3RpY1NjaGVkdWxlciwgeW91IGNhbiBqdXN0IHVzZSB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSBw
YXJhbWV0ZXIKLS8vLyBhbGwgb2YgdGhlIHRpbWUuCi10ZW1wbGF0ZSA8dGVtcGxhdGUgPHR5cGVu
YW1lPiBjbGFzcyBBdG9tID0gc3RkOjphdG9taWM+Ci1zdHJ1Y3QgQWNjZXNzU3ByZWFkZXIgewot
ICAvLy8gUmV0dXJucyB0aGUgc3RyaXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBDUFUu
ICBUaGUgcmV0dXJuZWQKLSAgLy8vIHZhbHVlIHdpbGwgYmUgPCBudW1TdHJpcGVzLgotICBzdGF0
aWMgc2l6ZV90IGN1cnJlbnQoc2l6ZV90IG51bVN0cmlwZXMpIHsKLSAgICAvLyB3aWR0aEFuZENw
dVRvU3RyaXBlWzBdIHdpbGwgYWN0dWFsbHkgd29yayBva2F5IChhbGwgemVyb3MpLCBidXQKLSAg
ICAvLyBzb21ldGhpbmcncyB3cm9uZyB3aXRoIHRoZSBjYWxsZXIKLSAgICBhc3NlcnQobnVtU3Ry
aXBlcyA+IDApOwotCi0gICAgdW5zaWduZWQgY3B1OwotICAgIGdldGNwdUZ1bmMoJmNwdSwgbnVs
bHB0ciwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIHdpZHRoQW5kQ3B1VG9TdHJpcGVbc3RkOjptaW4o
c2l6ZV90KGtNYXhDcHVzKSwgbnVtU3RyaXBlcyldCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbY3B1ICUga01heENwdXNdOwotICB9Ci0KLSBwcml2YXRlOgotICAvLy8gSWYgdGhlcmUg
YXJlIG1vcmUgY3B1cyB0aGFuIHRoaXMgbm90aGluZyB3aWxsIGNyYXNoLCBidXQgdGhlcmUKLSAg
Ly8vIG1pZ2h0IGJlIHVubmVjZXNzYXJ5IHNoYXJpbmcKLSAgZW51bSB7IGtNYXhDcHVzID0gMTI4
IH07Ci0KLSAgdHlwZWRlZiB1aW50OF90IENvbXBhY3RTdHJpcGU7Ci0KLSAgc3RhdGljX2Fzc2Vy
dCgKLSAgICAgIChrTWF4Q3B1cyAmIChrTWF4Q3B1cyAtIDEpKSA9PSAwLAotICAgICAgImtNYXhD
cHVzIHNob3VsZCBiZSBhIHBvd2VyIG9mIHR3byBzbyBtb2R1bG8gaXMgZmFzdCIpOwotICBzdGF0
aWNfYXNzZXJ0KAotICAgICAga01heENwdXMgLSAxIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8Q29t
cGFjdFN0cmlwZT46Om1heCgpLAotICAgICAgInN0cmlwZUJ5Q3B1IGVsZW1lbnQgdHlwZSBpc24n
dCB3aWRlIGVub3VnaCIpOwotCi0gIC8vLyBQb2ludHMgdG8gdGhlIGdldGNwdS1saWtlIGZ1bmN0
aW9uIHdlIGFyZSB1c2luZyB0byBvYnRhaW4gdGhlCi0gIC8vLyBjdXJyZW50IGNwdS4gIEl0IHNo
b3VsZCBub3QgYmUgYXNzdW1lZCB0aGF0IHRoZSByZXR1cm5lZCBjcHUgdmFsdWUKLSAgLy8vIGlz
IGluIHJhbmdlLiAgV2UgdXNlIGEgc3RhdGljIGZvciB0aGlzIHNvIHRoYXQgd2UgY2FuIHByZWFy
cmFuZ2UgYQotICAvLy8gdmFsaWQgdmFsdWUgaW4gdGhlIHByZS1jb25zdHJ1Y3RlZCBzdGF0ZSBh
bmQgYXZvaWQgdGhlIG5lZWQgZm9yIGEKLSAgLy8vIGNvbmRpdGlvbmFsIG9uIGV2ZXJ5IHN1YnNl
cXVlbnQgaW52b2NhdGlvbiAobm90IG5vcm1hbGx5IGEgYmlnIHdpbiwKLSAgLy8vIGJ1dCAyMCUg
b24gc29tZSBpbm5lciBsb29wcyBoZXJlKS4KLSAgc3RhdGljIEdldGNwdTo6RnVuYyBnZXRjcHVG
dW5jOwotCi0gIC8vLyBGb3IgZWFjaCBsZXZlbCBvZiBzcGxpdHRpbmcgdXAgdG8ga01heENwdXMs
IG1hcHMgdGhlIGNwdSAobW9kCi0gIC8vLyBrTWF4Q3B1cykgdG8gdGhlIHN0cmlwZS4gIFJhdGhl
ciB0aGFuIHBlcmZvcm1pbmcgYW55IGluZXF1YWxpdGllcwotICAvLy8gb3IgbW9kdWxvIG9uIHRo
ZSBhY3R1YWwgbnVtYmVyIG9mIGNwdXMsIHdlIGp1c3QgZmlsbCBpbiB0aGUgZW50aXJlCi0gIC8v
LyBhcnJheS4KLSAgc3RhdGljIENvbXBhY3RTdHJpcGUgd2lkdGhBbmRDcHVUb1N0cmlwZVtrTWF4
Q3B1cyArIDFdW2tNYXhDcHVzXTsKLQotICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKLQotICAv
Ly8gUmV0dXJucyB0aGUgYmVzdCBnZXRjcHUgaW1wbGVtZW50YXRpb24gZm9yIEF0b20KLSAgc3Rh
dGljIEdldGNwdTo6RnVuYyBwaWNrR2V0Y3B1RnVuYygpIHsKLSAgICBhdXRvIGJlc3QgPSBHZXRj
cHU6OnJlc29sdmVWZHNvRnVuYygpOwotICAgIHJldHVybiBiZXN0ID8gYmVzdCA6ICZGYWxsYmFj
a0dldGNwdVR5cGU6OmdldGNwdTsKLSAgfQotCi0gIC8vLyBBbHdheXMgY2xhaW1zIHRvIGJlIG9u
IENQVSB6ZXJvLCBub2RlIHplcm8KLSAgc3RhdGljIGludCBkZWdlbmVyYXRlR2V0Y3B1KHVuc2ln
bmVkKiBjcHUsIHVuc2lnbmVkKiBub2RlLCB2b2lkKikgewotICAgIGlmIChjcHUgIT0gbnVsbHB0
cikgewotICAgICAgKmNwdSA9IDA7Ci0gICAgfQotICAgIGlmIChub2RlICE9IG51bGxwdHIpIHsK
LSAgICAgICpub2RlID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICAvLyBUaGUg
ZnVuY3Rpb24gdG8gY2FsbCBmb3IgZmFzdCBsb29rdXAgb2YgZ2V0Y3B1IGlzIGEgc2luZ2xldG9u
LCBhcwotICAvLyBpcyB0aGUgcHJlY29tcHV0ZWQgdGFibGUgb2YgbG9jYWxpdHkgaW5mb3JtYXRp
b24uICBBY2Nlc3NTcHJlYWRlcgotICAvLyBpcyB1c2VkIGluIHZlcnkgdGlnaHQgbG9vcHMsIGhv
d2V2ZXIgKHdlJ3JlIHRyeWluZyB0byByYWNlIGFuIEwxCi0gIC8vIGNhY2hlIG1pc3MhKSwgc28g
dGhlIG5vcm1hbCBzaW5nbGV0b24gbWVjaGFuaXNtcyBhcmUgbm90aWNlYWJseQotICAvLyBleHBl
bnNpdmUuICBFdmVuIGEgbm90LXRha2VuIGJyYW5jaCBndWFyZGluZyBhY2Nlc3MgdG8gZ2V0Y3B1
RnVuYwotICAvLyBzbG93cyBBY2Nlc3NTcHJlYWRlcjo6Y3VycmVudCBmcm9tIDEyIG5hbm9zIHRv
IDE0LiAgQXMgYSByZXN1bHQsIHdlCi0gIC8vIHBvcHVsYXRlIHRoZSBzdGF0aWMgbWVtYmVycyB3
aXRoIHNpbXBsZSAoYnV0IHZhbGlkKSB2YWx1ZXMgdGhhdCBjYW4KLSAgLy8gYmUgZmlsbGVkIGlu
IGJ5IHRoZSBsaW5rZXIsIGFuZCB0aGVuIGZvbGxvdyB1cCB3aXRoIGEgbm9ybWFsIHN0YXRpYwot
ICAvLyBpbml0aWFsaXplciBjYWxsIHRoYXQgcHV0cyBpbiB0aGUgcHJvcGVyIHZlcnNpb24uICBU
aGlzIG1lYW5zIHRoYXQKLSAgLy8gd2hlbiB0aGVyZSBhcmUgaW5pdGlhbGl6YXRpb24gb3JkZXIg
aXNzdWVzIHdlIHdpbGwganVzdCBvYnNlcnZlIGEKLSAgLy8gemVybyBzdHJpcGUuICBPbmNlIGEg
c2FuaXRpemVyIGdldHMgc21hcnQgZW5vdWdoIHRvIGRldGVjdCB0aGlzIGFzCi0gIC8vIGEgcmFj
ZSBvciB1bmRlZmluZWQgYmVoYXZpb3IsIHdlIGNhbiBhbm5vdGF0ZSBpdC4KLQotICBzdGF0aWMg
Ym9vbCBpbml0aWFsaXplKCkgewotICAgIGdldGNwdUZ1bmMgPSBwaWNrR2V0Y3B1RnVuYygpOwot
Ci0gICAgYXV0byYgY2FjaGVMb2NhbGl0eSA9IENhY2hlTG9jYWxpdHk6OnN5c3RlbTxBdG9tPigp
OwotICAgIGF1dG8gbiA9IGNhY2hlTG9jYWxpdHkubnVtQ3B1czsKLSAgICBmb3IgKHNpemVfdCB3
aWR0aCA9IDA7IHdpZHRoIDw9IGtNYXhDcHVzOyArK3dpZHRoKSB7Ci0gICAgICBhdXRvIG51bVN0
cmlwZXMgPSBzdGQ6Om1heChzaXplX3R7MX0sIHdpZHRoKTsKLSAgICAgIGZvciAoc2l6ZV90IGNw
dSA9IDA7IGNwdSA8IGtNYXhDcHVzICYmIGNwdSA8IG47ICsrY3B1KSB7Ci0gICAgICAgIGF1dG8g
aW5kZXggPSBjYWNoZUxvY2FsaXR5LmxvY2FsaXR5SW5kZXhCeUNwdVtjcHVdOwotICAgICAgICBh
c3NlcnQoaW5kZXggPCBuKTsKLSAgICAgICAgLy8gYXMgaW5kZXggZ29lcyBmcm9tIDAuLm4sIHBv
c3QtdHJhbnNmb3JtIHZhbHVlIGdvZXMgZnJvbQotICAgICAgICAvLyAwLi5udW1TdHJpcGVzCi0g
ICAgICAgIHdpZHRoQW5kQ3B1VG9TdHJpcGVbd2lkdGhdW2NwdV0gPQotICAgICAgICAgICAgQ29t
cGFjdFN0cmlwZSgoaW5kZXggKiBudW1TdHJpcGVzKSAvIG4pOwotICAgICAgICBhc3NlcnQod2lk
dGhBbmRDcHVUb1N0cmlwZVt3aWR0aF1bY3B1XSA8IG51bVN0cmlwZXMpOwotICAgICAgfQotICAg
ICAgZm9yIChzaXplX3QgY3B1ID0gbjsgY3B1IDwga01heENwdXM7ICsrY3B1KSB7Ci0gICAgICAg
IHdpZHRoQW5kQ3B1VG9TdHJpcGVbd2lkdGhdW2NwdV0gPSB3aWR0aEFuZENwdVRvU3RyaXBlW3dp
ZHRoXVtjcHUgLSBuXTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX07
Ci0KLXRlbXBsYXRlIDx0ZW1wbGF0ZSA8dHlwZW5hbWU+IGNsYXNzIEF0b20+Ci1HZXRjcHU6OkZ1
bmMgQWNjZXNzU3ByZWFkZXI8QXRvbT46OmdldGNwdUZ1bmMgPQotICAgIEFjY2Vzc1NwcmVhZGVy
PEF0b20+OjpkZWdlbmVyYXRlR2V0Y3B1OwotCi10ZW1wbGF0ZSA8dGVtcGxhdGUgPHR5cGVuYW1l
PiBjbGFzcyBBdG9tPgotdHlwZW5hbWUgQWNjZXNzU3ByZWFkZXI8QXRvbT46OkNvbXBhY3RTdHJp
cGUKLSAgICBBY2Nlc3NTcHJlYWRlcjxBdG9tPjo6d2lkdGhBbmRDcHVUb1N0cmlwZVtrTWF4Q3B1
cyArIDFdW2tNYXhDcHVzXSA9IHt9OwotCi10ZW1wbGF0ZSA8dGVtcGxhdGUgPHR5cGVuYW1lPiBj
bGFzcyBBdG9tPgotYm9vbCBBY2Nlc3NTcHJlYWRlcjxBdG9tPjo6aW5pdGlhbGl6ZWQgPSBBY2Nl
c3NTcHJlYWRlcjxBdG9tPjo6aW5pdGlhbGl6ZSgpOwotCi0vLyBTdXBwcmVzcyB0aGlzIGluc3Rh
bnRpYXRpb24gaW4gb3RoZXIgdHJhbnNsYXRpb24gdW5pdHMuIEl0IGlzCi0vLyBpbnN0YW50aWF0
ZWQgaW4gQ2FjaGVMb2NhbGl0eS5jcHAKLWV4dGVybiB0ZW1wbGF0ZSBzdHJ1Y3QgQWNjZXNzU3By
ZWFkZXI8c3RkOjphdG9taWM+OwotCi0vKioKLSAqIEEgc2ltcGxlIGZyZWVsaXN0IGFsbG9jYXRv
ci4gIEFsbG9jYXRlcyB0aGluZ3Mgb2Ygc2l6ZSBzeiwgZnJvbQotICogc2xhYnMgb2Ygc2l6ZSBh
bGxvY1NpemUuICBUYWtlcyBhIGxvY2sgb24gZWFjaAotICogYWxsb2NhdGlvbi9kZWFsbG9jYXRp
b24uCi0gKi8KLWNsYXNzIFNpbXBsZUFsbG9jYXRvciB7Ci0gIHN0ZDo6bXV0ZXggbV87Ci0gIHVp
bnQ4X3QqIG1lbV97bnVsbHB0cn07Ci0gIHVpbnQ4X3QqIGVuZF97bnVsbHB0cn07Ci0gIHZvaWQq
IGZyZWVsaXN0X3tudWxscHRyfTsKLSAgc2l6ZV90IGFsbG9jU2l6ZV87Ci0gIHNpemVfdCBzel87
Ci0gIHN0ZDo6dmVjdG9yPHZvaWQqPiBibG9ja3NfOwotCi0gcHVibGljOgotICBTaW1wbGVBbGxv
Y2F0b3Ioc2l6ZV90IGFsbG9jU2l6ZSwgc2l6ZV90IHN6KTsKLSAgflNpbXBsZUFsbG9jYXRvcigp
OwotICB2b2lkKiBhbGxvY2F0ZUhhcmQoKTsKLQotICAvLyBJbmxpbmUgZmFzdC1wYXRocy4KLSAg
dm9pZCogYWxsb2NhdGUoKSB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGcobV8p
OwotICAgIC8vIEZyZWVsaXN0IGFsbG9jYXRpb24uCi0gICAgaWYgKGZyZWVsaXN0XykgewotICAg
ICAgYXV0byBtZW0gPSBmcmVlbGlzdF87Ci0gICAgICBmcmVlbGlzdF8gPSAqc3RhdGljX2Nhc3Q8
dm9pZCoqPihmcmVlbGlzdF8pOwotICAgICAgcmV0dXJuIG1lbTsKLSAgICB9Ci0KLSAgICAvLyBC
dW1wLXB0ciBhbGxvY2F0aW9uLgotICAgIGlmIChpbnRwdHJfdChtZW1fKSAlIDEyOCA9PSAwKSB7
Ci0gICAgICAvLyBBdm9pZCBhbGxvY2F0aW5nIHBvaW50ZXJzIHRoYXQgbWF5IGxvb2sgbGlrZSBt
YWxsb2MKLSAgICAgIC8vIHBvaW50ZXJzLgotICAgICAgbWVtXyArPSBzdGQ6Om1pbihzel8sIGZv
bGx5OjptYXhfYWxpZ25fdik7Ci0gICAgfQotICAgIGlmIChtZW1fICYmIChtZW1fICsgc3pfIDw9
IGVuZF8pKSB7Ci0gICAgICBhdXRvIG1lbSA9IG1lbV87Ci0gICAgICBtZW1fICs9IHN6XzsKLQot
ICAgICAgYXNzZXJ0KGludHB0cl90KG1lbSkgJSAxMjggIT0gMCk7Ci0gICAgICByZXR1cm4gbWVt
OwotICAgIH0KLQotICAgIHJldHVybiBhbGxvY2F0ZUhhcmQoKTsKLSAgfQotICB2b2lkIGRlYWxs
b2NhdGUodm9pZCogbWVtKSB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGcobV8p
OwotICAgICpzdGF0aWNfY2FzdDx2b2lkKio+KG1lbSkgPSBmcmVlbGlzdF87Ci0gICAgZnJlZWxp
c3RfID0gbWVtOwotICB9Ci19OwotCi0vKioKLSAqIEFuIGFsbG9jYXRvciB0aGF0IGNhbiBiZSB1
c2VkIHdpdGggQ2FjaGVMb2NhbGl0eSB0byBhbGxvY2F0ZQotICogY29yZS1sb2NhbCBtZW1vcnku
Ci0gKgotICogVGhlcmUgaXMgYWN0dWFsbHkgbm90aGluZyBzcGVjaWFsIGFib3V0IHRoZSBtZW1v
cnkgaXRzZWxmIChpdCBpcwotICogbm90IGJvdW5kIHRvIG51bWEgbm9kZXMgb3IgYW55dGhpbmcp
LCBidXQgdGhlIGFsbG9jYXRvciBndWFyYW50ZWVzCi0gKiB0aGF0IG1lbW9yeSBhbGxvY2F0ZCBm
cm9tIHRoZSBzYW1lIHN0cmlwZSB3aWxsIG9ubHkgY29tZSBmcm9tIGNhY2hlCi0gKiBsaW5lcyBh
bHNvIGFsbG9jYXRlZCB0byB0aGUgc2FtZSBzdHJpcGUuICBUaGlzIG1lYW5zIG11bHRpcGxlCi0g
KiB0aGluZ3MgdXNpbmcgQ2FjaGVMb2NhbGl0eSBjYW4gYWxsb2NhdGUgbWVtb3J5IGluIHNtYWxs
ZXItdGhhbgotICogY2FjaGVsaW5lIGluY3JlbWVudHMsIGFuZCBiZSBhc3N1cmVkIHRoYXQgaXQg
d29uJ3QgY2F1c2UgbW9yZSBmYWxzZQotICogc2hhcmluZyB0aGFuIGl0IG90aGVyd2lzZSB3b3Vs
ZC4KLSAqCi0gKiBOb3RlIHRoYXQgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHRha2VzIGEg
cGVyLXNpemVjbGFzcyBsb2NrLgotICovCi10ZW1wbGF0ZSA8c2l6ZV90IFN0cmlwZXM+Ci1jbGFz
cyBDb3JlQWxsb2NhdG9yIHsKLSBwdWJsaWM6Ci0gIGNsYXNzIEFsbG9jYXRvciB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgQWxsb2NTaXplezQwOTZ9OwotCi0gICAgdWludDhfdCBzaXpl
Q2xhc3Moc2l6ZV90IHNpemUpIHsKLSAgICAgIGlmIChzaXplIDw9IDgpIHsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICB9IGVsc2UgaWYgKHNpemUgPD0gMTYpIHsKLSAgICAgICAgcmV0dXJuIDE7
Ci0gICAgICB9IGVsc2UgaWYgKHNpemUgPD0gMzIpIHsKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAg
ICB9IGVsc2UgaWYgKHNpemUgPD0gNjQpIHsKLSAgICAgICAgcmV0dXJuIDM7Ci0gICAgICB9IGVs
c2UgeyAvLyBwdW50IHRvIG1hbGxvYy4KLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgc3RkOjphcnJheTxTaW1wbGVBbGxvY2F0b3IsIDQ+IGFsbG9jYXRvcnNfewotICAg
ICAgICB7e0FsbG9jU2l6ZSwgOH0sIHtBbGxvY1NpemUsIDE2fSwge0FsbG9jU2l6ZSwgMzJ9LCB7
QWxsb2NTaXplLCA2NH19fTsKLQotICAgcHVibGljOgotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVf
dCBzaXplKSB7Ci0gICAgICBhdXRvIGNsID0gc2l6ZUNsYXNzKHNpemUpOwotICAgICAgaWYgKGNs
ID09IDQpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydCgKLSAgICAgICAgICAgIENhY2hlTG9jYWxp
dHk6OmtGYWxzZVNoYXJpbmdSYW5nZSA9PSAxMjgsCi0gICAgICAgICAgICAia0ZhbHNlU2hhcmlu
Z1JhbmdlIGNoYW5nZWQiKTsKLSAgICAgICAgLy8gQWxpZ24gdG8gYSBjYWNoZWxpbmUKLSAgICAg
ICAgc2l6ZSA9IHNpemUgKyAoQ2FjaGVMb2NhbGl0eTo6a0ZhbHNlU2hhcmluZ1JhbmdlIC0gMSk7
Ci0gICAgICAgIHNpemUgJj0gfnNpemVfdChDYWNoZUxvY2FsaXR5OjprRmFsc2VTaGFyaW5nUmFu
Z2UgLSAxKTsKLSAgICAgICAgdm9pZCogbWVtID0KLSAgICAgICAgICAgIGRldGFpbDo6YWxpZ25l
ZF9tYWxsb2Moc2l6ZSwgQ2FjaGVMb2NhbGl0eTo6a0ZhbHNlU2hhcmluZ1JhbmdlKTsKLSAgICAg
ICAgaWYgKCFtZW0pIHsKLSAgICAgICAgICBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG1lbTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBhbGxvY2F0
b3JzX1tjbF0uYWxsb2NhdGUoKTsKLSAgICB9Ci0gICAgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIG1l
bSkgewotICAgICAgaWYgKCFtZW0pIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAg
ICAvLyBTZWUgaWYgaXQgY2FtZSBmcm9tIHRoaXMgYWxsb2NhdG9yIG9yIG1hbGxvYy4KLSAgICAg
IGlmIChpbnRwdHJfdChtZW0pICUgMTI4ICE9IDApIHsKLSAgICAgICAgYXV0byBhZGRyID0KLSAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGludHB0cl90KG1lbSkgJiB+aW50cHRy
X3QoQWxsb2NTaXplIC0gMSkpOwotICAgICAgICBhdXRvIGFsbG9jYXRvciA9ICpzdGF0aWNfY2Fz
dDxTaW1wbGVBbGxvY2F0b3IqKj4oYWRkcik7Ci0gICAgICAgIGFsbG9jYXRvci0+ZGVhbGxvY2F0
ZShtZW0pOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGV0YWlsOjphbGlnbmVkX2ZyZWUobWVt
KTsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgQWxsb2NhdG9yKiBnZXQoc2l6ZV90IHN0cmlw
ZSkgewotICAgIGFzc2VydChzdHJpcGUgPCBTdHJpcGVzKTsKLSAgICByZXR1cm4gJmFsbG9jYXRv
cnNfW3N0cmlwZV07Ci0gIH0KLQotIHByaXZhdGU6Ci0gIEFsbG9jYXRvciBhbGxvY2F0b3JzX1tT
dHJpcGVzXTsKLX07Ci0KLXRlbXBsYXRlIDxzaXplX3QgU3RyaXBlcz4KLXR5cGVuYW1lIENvcmVB
bGxvY2F0b3I8U3RyaXBlcz46OkFsbG9jYXRvciogZ2V0Q29yZUFsbG9jYXRvcihzaXplX3Qgc3Ry
aXBlKSB7Ci0gIC8vIFdlIGNhbm5vdCBtYWtlIHN1cmUgdGhhdCB0aGUgYWxsb2NhdG9yIHdpbGwg
YmUgZGVzdHJveWVkIGFmdGVyCi0gIC8vIGFsbCB0aGUgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0aCBp
dCwgc28gd2UgbGVhayBpdC4KLSAgc3RhdGljIEluZGVzdHJ1Y3RpYmxlPENvcmVBbGxvY2F0b3I8
U3RyaXBlcz4+IGFsbG9jYXRvcjsKLSAgcmV0dXJuIGFsbG9jYXRvci0+Z2V0KHN0cmlwZSk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgU3RyaXBlcz4KLVN0bEFsbG9jYXRvcjx0
eXBlbmFtZSBDb3JlQWxsb2NhdG9yPFN0cmlwZXM+OjpBbGxvY2F0b3IsIFQ+IGdldENvcmVBbGxv
Y2F0b3JTdGwoCi0gICAgc2l6ZV90IHN0cmlwZSkgewotICBhdXRvIGFsbG9jID0gZ2V0Q29yZUFs
bG9jYXRvcjxTdHJpcGVzPihzdHJpcGUpOwotICByZXR1cm4gU3RsQWxsb2NhdG9yPHR5cGVuYW1l
IENvcmVBbGxvY2F0b3I8U3RyaXBlcz46OkFsbG9jYXRvciwgVD4oYWxsb2MpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBmb2xseQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZm9sbHkvY29uY3VycmVuY3kvdGVzdC9DYWNoZUxvY2FsaXR5QmVuY2htYXJrLmNw
cCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2NvbmN1cnJlbmN5
L3Rlc3QvQ2FjaGVMb2NhbGl0eUJlbmNobWFyay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDA4NTlkZWMwZGQ1MGJjYjYwNTcwY2IxZmI1N2E2YzFjNDBiZDcwYmUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvY29uY3VycmVuY3kvdGVzdC9DYWNoZUxvY2FsaXR5QmVu
Y2htYXJrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3
dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVk
IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICog
ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT
IiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlv
bnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgPGZvbGx5L2NvbmN1cnJlbmN5
L0NhY2hlTG9jYWxpdHkuaD4KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx0aHJlYWQ+
Ci0jaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KLQotI2luY2x1ZGUgPGdsb2cvbG9nZ2luZy5oPgot
Ci0jaW5jbHVkZSA8Zm9sbHkvQmVuY2htYXJrLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBmb2xseTsK
LQotI2RlZmluZSBERUNMQVJFX1NQUkVBREVSX1RBRyh0YWcsIGxvY2FsaXR5LCBmdW5jKSAgICAg
IFwKLSAgbmFtZXNwYWNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBkdW1teT4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBzdHJ1Y3QgdGFnIHt9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIG5hbWVzcGFjZSBmb2xseSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICB0ZW1wbGF0ZSA8PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgY29uc3QgQ2FjaGVMb2NhbGl0eSYgQ2FjaGVMb2NhbGl0eTo6c3lzdGVtPHRh
Zz4oKSB7ICBcCi0gICAgc3RhdGljIGF1dG8qIGluc3QgPSBuZXcgQ2FjaGVMb2NhbGl0eShsb2Nh
bGl0eSk7ICAgXAotICAgIHJldHVybiAqaW5zdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIHRlbXBsYXRlIDw+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBHZXRjcHU6OkZ1bmMgQWNjZXNzU3ByZWFkZXI8dGFnPjo6cGlja0dl
dGNwdUZ1bmMoKSB7IFwKLSAgICByZXR1cm4gZnVuYzsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICB9Ci0KLURFQ0xBUkVfU1BSRUFERVJfVEFHKAotICAgIFRocmVh
ZExvY2FsVGFnLAotICAgIENhY2hlTG9jYWxpdHk6OnN5c3RlbTw+KCksCi0gICAgZm9sbHk6OkZh
bGxiYWNrR2V0Y3B1PFNlcXVlbnRpYWxUaHJlYWRJZDxzdGQ6OmF0b21pYz4+OjpnZXRjcHUpCi1E
RUNMQVJFX1NQUkVBREVSX1RBRygKLSAgICBQdGhyZWFkU2VsZlRhZywKLSAgICBDYWNoZUxvY2Fs
aXR5OjpzeXN0ZW08PigpLAotICAgIGZvbGx5OjpGYWxsYmFja0dldGNwdTxIYXNoaW5nVGhyZWFk
SWQ+OjpnZXRjcHUpCi0KLUJFTkNITUFSSyhBY2Nlc3NTcHJlYWRlclVzZSwgaXRlcnMpIHsKLSAg
Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgewotICAgIGF1dG8geCA9
IEFjY2Vzc1NwcmVhZGVyPD46OmN1cnJlbnQoMTYpOwotICAgIGZvbGx5Ojpkb05vdE9wdGltaXpl
QXdheSh4KTsKLSAgfQotfQotCi0vLyBCZW5jaG1hcmsgc2NvcmVzIGhlcmUgcmVmbGVjdCB0aGUg
dGltZSBmb3IgMzIgdGhyZWFkcyB0byBwZXJmb3JtIGFuCi0vLyBhdG9taWMgaW5jcmVtZW50IG9u
IGEgZHVhbC1zb2NrZXQgRTUtMjY2MCBAIDIuMkdoei4gIFN1cnByaXNpbmdseSwKLS8vIGlmIHdl
IGRvbid0IHNlcGFyYXRlIHRoZSBjb3VudGVycyBvbnRvIHVuaXF1ZSAxMjggYnl0ZSBzdHJpcGVz
IHRoZQotLy8gMV9zdHJpcGUgYW5kIDJfc3RyaXBlIHJlc3VsdHMgYXJlIGlkZW50aWNhbCwgZXZl
biB0aG91Z2ggdGhlIEwzIGlzCi0vLyBjbGFpbWVkIHRvIGhhdmUgNjQgYnl0ZSBjYWNoZSBsaW5l
cy4KLS8vCi0vLyBHZXRjcHUgcmVmZXJzIHRvIHRoZSB2ZHNvIGdldGNwdSBpbXBsZW1lbnRhdGlv
bi4gIFRocmVhZExvY2FsIHJlZmVycwotLy8gdG8gZXhlY3V0aW9uIHVzaW5nIFNlcXVlbnRpYWxU
aHJlYWRJZCwgdGhlIGZhbGxiYWNrIGlmIHRoZSB2ZHNvCi0vLyBnZXRjcHUgaXNuJ3QgYXZhaWxh
YmxlLiAgUHRocmVhZFNlbGYgaGFzaGVzIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tCi0vLyBwdGhy
ZWFkX3NlbGYoKSBhcyBhIGZhbGxiYWNrLWZhbGxiYWNrIGZvciBzeXN0ZW1zIHRoYXQgZG9uJ3Qg
aGF2ZQotLy8gdGhyZWFkLWxvY2FsIHN1cHBvcnQuCi0vLwotLy8gQXQgMTZfc3RyaXBlXzBfd29y
ayBhbmQgMzJfc3RyaXBlXzBfd29yayB0aGVyZSBpcyBvbmx5IEwxIHRyYWZmaWMsCi0vLyBzbyBz
aW5jZSB0aGUgc3RyaXBlIHNlbGVjdGlvbiBpcyAxMiBuYW5vcyB0aGUgYXRvbWljIGluY3JlbWVu
dHMgaW4KLS8vIHRoZSBMMSBpcyB+MTcgbmFub3MuICBBdCB3aWR0aCA4X3N0cmlwZV8wX3dvcmsg
dGhlIGxpbmUgaXMgZXhwZWN0ZWQKLS8vIHRvIHBpbmctcG9uZyBhbG1vc3QgZXZlcnkgb3BlcmF0
aW9uLCBzaW5jZSB0aGUgbG9vcHMgaGF2ZSB0aGUgc2FtZQotLy8gZHVyYXRpb24uICBXaWR0aHMg
NCBhbmQgMiBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yLCBidXQgZWFjaCB0b3VyIG9mIHRoZQotLy8g
Y2FjaGUgbGluZSBpcyA0IGFuZCA4IGNvcmVzIGxvbmcsIHJlc3BlY3RpdmVseS4gIFRoZXNlIGFs
bCBzdWdnZXN0IGEKLS8vIGxvd2VyIGJvdW5kIG9mIDYwIG5hbm9zIGZvciBpbnRyYS1jaGlwIGhh
bmRvZmYgYW5kIGluY3JlbWVudCBiZXR3ZWVuCi0vLyB0aGUgTDFzLgotLy8KLS8vIFdpdGggNDIw
IG5hbm9zIG9mIGJ1c3l3b3JrIHBlciBjb250ZW5kZWQgaW5jcmVtZW50LCB0aGUgc3lzdGVtIGNh
bgotLy8gaGlkZSBhbGwgb2YgdGhlIGxhdGVuY3kgb2YgYSB0b3VyIG9mIGxlbmd0aCA0LCBidXQg
bm90IHF1aXRlIG9uZSBvZgotLy8gbGVuZ3RoIDguICBJIHdhcyBhIGJpdCBzdXJwcmlzZWQgYXQg
aG93IG11Y2ggd29yc2UgdGhlIG5vbi1zdHJpcGVkCi0vLyB2ZXJzaW9uIGdvdC4gIEl0IHNlZW1z
IHRoYXQgdGhlIGludGVyLWNoaXAgdHJhZmZpYyBhbHNvIGludGVyZmVyZXMKLS8vIHdpdGggdGhl
IEwxLW9ubHkgbG9jYWxXb3JrLmxvYWQoKS4gIFdoZW4gdGhlIGxvY2FsIHdvcmsgaXMgZG91Ymxl
ZAotLy8gdG8gYWJvdXQgMSBtaWNyb3NlY29uZCB3ZSBzZWUgdGhhdCB0aGUgaW50ZXItY2hpcCBj
b250ZW50aW9uIGlzIHN0aWxsCi0vLyB2ZXJ5IGltcG9ydGFudCwgYnV0IHN1YmRpdmlzaW9ucyBv
biB0aGUgc2FtZSBjaGlwIGRvbid0IG1hdHRlci4KLS8vCi0vLyBzdWRvIG5pY2UgLW4gLTIwIGJ1
Y2stb3V0L2dlbi9mb2xseS90ZXN0L2NhY2hlX2xvY2FsaXR5X3Rlc3QKLS8vICAgICAtLWJlbmNo
bWFyayAtLWJtX21pbl9pdGVycz0xMDAwMDAwCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBm
b2xseS90ZXN0L0NhY2hlTG9jYWxpdHlUZXN0LmNwcCAgICAgICAgICAgICAgICByZWxhdGl2ZSAg
dGltZS9pdGVyICBpdGVycy9zCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBBY2Nlc3NTcHJl
YWRlclVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMS45NG5z
ICAgODMuNzlNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb250ZW50aW9uQXRXaWR0aEdl
dGNwdSgxX3N0cmlwZV8wX3dvcmspICAgICAgICAgICAgICAgICAgIDk4NS43NW5zICAgIDEuMDFN
Ci0vLyBjb250ZW50aW9uQXRXaWR0aEdldGNwdSgyX3N0cmlwZV8wX3dvcmspICAgICAgICAgICAg
ICAgICAgIDQyNC4wMm5zICAgIDIuMzZNCi0vLyBjb250ZW50aW9uQXRXaWR0aEdldGNwdSg0X3N0
cmlwZV8wX3dvcmspICAgICAgICAgICAgICAgICAgIDE5MC4xM25zICAgIDUuMjZNCi0vLyBjb250
ZW50aW9uQXRXaWR0aEdldGNwdSg4X3N0cmlwZV8wX3dvcmspICAgICAgICAgICAgICAgICAgICA5
MS44Nm5zICAgMTAuODlNCi0vLyBjb250ZW50aW9uQXRXaWR0aEdldGNwdSgxNl9zdHJpcGVfMF93
b3JrKSAgICAgICAgICAgICAgICAgICAyOS4zMW5zICAgMzQuMTJNCi0vLyBjb250ZW50aW9uQXRX
aWR0aEdldGNwdSgzMl9zdHJpcGVfMF93b3JrKSAgICAgICAgICAgICAgICAgICAyOS41M25zICAg
MzMuODZNCi0vLyBjb250ZW50aW9uQXRXaWR0aEdldGNwdSg2NF9zdHJpcGVfMF93b3JrKSAgICAg
ICAgICAgICAgICAgICAyOS45M25zICAgMzMuNDFNCi0vLyBjb250ZW50aW9uQXRXaWR0aFRocmVh
ZExvY2FsKDJfc3RyaXBlXzBfd29yaykgICAgICAgICAgICAgIDYwOS4yMW5zICAgIDEuNjRNCi0v
LyBjb250ZW50aW9uQXRXaWR0aFRocmVhZExvY2FsKDRfc3RyaXBlXzBfd29yaykgICAgICAgICAg
ICAgIDMwMy42MG5zICAgIDMuMjlNCi0vLyBjb250ZW50aW9uQXRXaWR0aFRocmVhZExvY2FsKDhf
c3RyaXBlXzBfd29yaykgICAgICAgICAgICAgIDI0Ni41N25zICAgIDQuMDZNCi0vLyBjb250ZW50
aW9uQXRXaWR0aFRocmVhZExvY2FsKDE2X3N0cmlwZV8wX3dvcmspICAgICAgICAgICAgIDE1NC44
NG5zICAgIDYuNDZNCi0vLyBjb250ZW50aW9uQXRXaWR0aFRocmVhZExvY2FsKDMyX3N0cmlwZV8w
X3dvcmspICAgICAgICAgICAgICAyNC4xNG5zICAgNDEuNDNNCi0vLyBjb250ZW50aW9uQXRXaWR0
aFRocmVhZExvY2FsKDY0X3N0cmlwZV8wX3dvcmspICAgICAgICAgICAgICAyMy45NW5zICAgNDEu
NzVNCi0vLyBjb250ZW50aW9uQXRXaWR0aFB0aHJlYWRTZWxmKDJfc3RyaXBlXzBfd29yaykgICAg
ICAgICAgICAgIDcyMi4wMW5zICAgIDEuMzlNCi0vLyBjb250ZW50aW9uQXRXaWR0aFB0aHJlYWRT
ZWxmKDRfc3RyaXBlXzBfd29yaykgICAgICAgICAgICAgIDUwMS41Nm5zICAgIDEuOTlNCi0vLyBj
b250ZW50aW9uQXRXaWR0aFB0aHJlYWRTZWxmKDhfc3RyaXBlXzBfd29yaykgICAgICAgICAgICAg
IDQ3NC41OG5zICAgIDIuMTFNCi0vLyBjb250ZW50aW9uQXRXaWR0aFB0aHJlYWRTZWxmKDE2X3N0
cmlwZV8wX3dvcmspICAgICAgICAgICAgIDMwMC45MG5zICAgIDMuMzJNCi0vLyBjb250ZW50aW9u
QXRXaWR0aFB0aHJlYWRTZWxmKDMyX3N0cmlwZV8wX3dvcmspICAgICAgICAgICAgIDE3NS43N25z
ICAgIDUuNjlNCi0vLyBjb250ZW50aW9uQXRXaWR0aFB0aHJlYWRTZWxmKDY0X3N0cmlwZV8wX3dv
cmspICAgICAgICAgICAgIDE3NC44OG5zICAgIDUuNzJNCi0vLyBhdG9taWNJbmNyQmFzZWxpbmUo
bG9jYWxfaW5jcl8wX3dvcmspICAgICAgICAgICAgICAgICAgICAgICAxNi44MW5zICAgNTkuNTFN
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb250ZW50aW9uQXRXaWR0aEdldGNwdSgxX3N0
cmlwZV81MDBfd29yaykgICAgICAgICAgICAgICAgICAgMS44MnVzICA1NDkuOTdLCi0vLyBjb250
ZW50aW9uQXRXaWR0aEdldGNwdSgyX3N0cmlwZV81MDBfd29yaykgICAgICAgICAgICAgICAgIDUz
My43MW5zICAgIDEuODdNCi0vLyBjb250ZW50aW9uQXRXaWR0aEdldGNwdSg0X3N0cmlwZV81MDBf
d29yaykgICAgICAgICAgICAgICAgIDQyNC42NG5zICAgIDIuMzVNCi0vLyBjb250ZW50aW9uQXRX
aWR0aEdldGNwdSg4X3N0cmlwZV81MDBfd29yaykgICAgICAgICAgICAgICAgIDQ1MS44NW5zICAg
IDIuMjFNCi0vLyBjb250ZW50aW9uQXRXaWR0aEdldGNwdSgxNl9zdHJpcGVfNTAwX3dvcmspICAg
ICAgICAgICAgICAgIDQyNS41NG5zICAgIDIuMzVNCi0vLyBjb250ZW50aW9uQXRXaWR0aEdldGNw
dSgzMl9zdHJpcGVfNTAwX3dvcmspICAgICAgICAgICAgICAgIDUwMS42Nm5zICAgIDEuOTlNCi0v
LyBhdG9taWNJbmNyQmFzZWxpbmUobG9jYWxfaW5jcl81MDBfd29yaykgICAgICAgICAgICAgICAg
ICAgIDQzOC40Nm5zICAgIDIuMjhNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb250ZW50
aW9uQXRXaWR0aEdldGNwdSgxX3N0cmlwZV8xMDAwX3dvcmspICAgICAgICAgICAgICAgICAgMS44
OHVzICA1MzIuMjBLCi0vLyBjb250ZW50aW9uQXRXaWR0aEdldGNwdSgyX3N0cmlwZV8xMDAwX3dv
cmspICAgICAgICAgICAgICAgIDgyNC42Mm5zICAgIDEuMjFNCi0vLyBjb250ZW50aW9uQXRXaWR0
aEdldGNwdSg0X3N0cmlwZV8xMDAwX3dvcmspICAgICAgICAgICAgICAgIDgwMy41Nm5zICAgIDEu
MjRNCi0vLyBjb250ZW50aW9uQXRXaWR0aEdldGNwdSg4X3N0cmlwZV8xMDAwX3dvcmspICAgICAg
ICAgICAgICAgIDkyNi42NW5zICAgIDEuMDhNCi0vLyBjb250ZW50aW9uQXRXaWR0aEdldGNwdSgx
Nl9zdHJpcGVfMTAwMF93b3JrKSAgICAgICAgICAgICAgIDkwMC4xMG5zICAgIDEuMTFNCi0vLyBj
b250ZW50aW9uQXRXaWR0aEdldGNwdSgzMl9zdHJpcGVfMTAwMF93b3JrKSAgICAgICAgICAgICAg
IDg5MC43NW5zICAgIDEuMTJNCi0vLyBhdG9taWNJbmNyQmFzZWxpbmUobG9jYWxfaW5jcl8xMDAw
X3dvcmspICAgICAgICAgICAgICAgICAgIDc3NC40N25zICAgIDEuMjlNCi0vLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci10ZW1wbGF0ZSA8dGVtcGxhdGUgPHR5cGVuYW1lPiBjbGFzcyBUYWc+Ci1zdGF0
aWMgdm9pZCBjb250ZW50aW9uQXRXaWR0aChzaXplX3QgaXRlcnMsIHNpemVfdCBzdHJpcGVzLCBz
aXplX3Qgd29yaykgewotICBjb25zdCBzaXplX3QgY291bnRlckFsaWdubWVudCA9IDEyODsKLSAg
Y29uc3Qgc2l6ZV90IG51bVRocmVhZHMgPSAzMjsKLQotICBmb2xseTo6QmVuY2htYXJrU3VzcGVu
ZGVyIGJyYWNlczsKLQotICBzdGQ6OmF0b21pYzxzaXplX3Q+IHJlYWR5KDApOwotICBzdGQ6OmF0
b21pYzxib29sPiBnbyhmYWxzZSk7Ci0KLSAgLy8gd2hpbGUgaW4gdGhlb3J5IHRoZSBjYWNoZSBs
aW5lIHNpemUgaXMgNjQgYnl0ZXMsIGV4cGVyaW1lbnRzIHNob3cKLSAgLy8gdGhhdCB3ZSBnZXQg
Y29udGVudGlvbiBvbiAxMjggYnl0ZSBib3VuZGFyaWVzIGZvciBJdnkgQnJpZGdlLiAgVGhlCi0g
IC8vIGV4dHJhIGluZGlyZWN0aW9uIGFkZHMgMSBvciAyIG5hbm9zCi0gIGFzc2VydChjb3VudGVy
QWxpZ25tZW50ID49IHNpemVvZihzdGQ6OmF0b21pYzxzaXplX3Q+KSk7Ci0gIHN0ZDo6dmVjdG9y
PGNoYXI+IHJhdyhjb3VudGVyQWxpZ25tZW50ICogc3RyaXBlcyk7Ci0KLSAgLy8gaWYgd2UgaGFw
cGVuIHRvIGJlIHVzaW5nIHRoZSB0bHNSb3VuZFJvYmluLCB0aGVuIHNlcXVlbnRpYWxseQotICAv
LyBhc3NpZ25pbmcgdGhlIHRocmVhZCBpZGVudGlmaWVycyBpcyB0aGUgdW5saWtlbHkgYmVzdC1j
YXNlIHNjZW5hcmlvLgotICAvLyBXZSBkb24ndCB3YW50IHRvIHVuZmFpcmx5IGJlbmVmaXQgb3Ig
cGVuYWxpemUuICBDb21wdXRpbmcgdGhlIGV4YWN0Ci0gIC8vIG1heGltdW0gbGlrZWxpaG9vZCBv
ZiB0aGUgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9ucyBpcyBhbm5veWluZywgc28KLSAgLy8gSSBh
cHByb3hpbWF0ZSBhcyAyLzUgb2YgdGhlIGlkcyB0aGF0IGhhdmUgbm8gdGhyZWFkcywgMi81IHRo
YXQgaGF2ZQotICAvLyAxLCAyLzE1IHRoYXQgaGF2ZSAyLCBhbmQgMS8xNSB0aGF0IGhhdmUgMy4g
IFdlIGFjY29tcGxpc2ggdGhpcyBieQotICAvLyB3cmFwcGluZyBiYWNrIHRvIHNsb3QgMCB3aGVu
IHdlIGhpdCAxLzE1IGFuZCAxLzUuCi0KLSAgc3RkOjp2ZWN0b3I8c3RkOjp0aHJlYWQ+IHRocmVh
ZHM7Ci0gIHdoaWxlICh0aHJlYWRzLnNpemUoKSA8IG51bVRocmVhZHMpIHsKLSAgICB0aHJlYWRz
LnB1c2hfYmFjayhzdGQ6OnRocmVhZChbJiwgaXRlcnMsIHN0cmlwZXMsIHdvcmtdKCkgewotICAg
ICAgYXV0byBjb3VudGVycyA9IHN0ZDo6dmVjdG9yPHN0ZDo6YXRvbWljPHNpemVfdD4qPihzdHJp
cGVzKTsKLSAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyaXBlczsgKytpKSB7Ci0gICAg
ICAgIGNvdW50ZXJzW2ldID0KLSAgICAgICAgICAgIG5ldyAocmF3LmRhdGEoKSArIGNvdW50ZXJB
bGlnbm1lbnQgKiBpKSBzdGQ6OmF0b21pYzxzaXplX3Q+KCk7Ci0gICAgICB9Ci0KLSAgICAgIHJl
YWR5Kys7Ci0gICAgICB3aGlsZSAoIWdvLmxvYWQoKSkgewotICAgICAgICBzdGQ6OnRoaXNfdGhy
ZWFkOjp5aWVsZCgpOwotICAgICAgfQotICAgICAgc3RkOjphdG9taWM8aW50PiBsb2NhbFdvcmso
MCk7Ci0gICAgICBmb3IgKHNpemVfdCBpID0gaXRlcnM7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAg
KysqKGNvdW50ZXJzW0FjY2Vzc1NwcmVhZGVyPFRhZz46OmN1cnJlbnQoc3RyaXBlcyldKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaiA9IHdvcms7IGogPiAwOyAtLWopIHsKLSAgICAgICAgICBsb2Nh
bFdvcmsubG9hZCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSkpOwotCi0gICAgaWYgKHRo
cmVhZHMuc2l6ZSgpID09IG51bVRocmVhZHMgLyAxNSB8fCB0aHJlYWRzLnNpemUoKSA9PSBudW1U
aHJlYWRzIC8gNSkgewotICAgICAgLy8gY3JlYXRlIGEgZmV3IGR1bW15IHRocmVhZHMgdG8gd3Jh
cCBiYWNrIGFyb3VuZCB0byAwIG1vZCBudW1DcHVzCi0gICAgICBmb3IgKHNpemVfdCBpID0gdGhy
ZWFkcy5zaXplKCk7IGkgIT0gbnVtVGhyZWFkczsgKytpKSB7Ci0gICAgICAgIHN0ZDo6dGhyZWFk
KFsmXSgpIHsgQWNjZXNzU3ByZWFkZXI8VGFnPjo6Y3VycmVudChzdHJpcGVzKTsgfSkuam9pbigp
OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHdoaWxlIChyZWFkeSA8IG51bVRocmVhZHMpIHsK
LSAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOwotICB9Ci0gIGJyYWNlcy5kaXNtaXNzKCk7
Ci0gIGdvID0gdHJ1ZTsKLQotICBmb3IgKGF1dG8mIHRociA6IHRocmVhZHMpIHsKLSAgICB0aHIu
am9pbigpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9taWNJbmNyQmFzZWxpbmUoc2l6ZV90
IGl0ZXJzLCBzaXplX3Qgd29yaywgc2l6ZV90IG51bVRocmVhZHMgPSAzMikgewotICBmb2xseTo6
QmVuY2htYXJrU3VzcGVuZGVyIGJyYWNlczsKLQotICBzdGQ6OmF0b21pYzxib29sPiBnbyhmYWxz
ZSk7Ci0KLSAgc3RkOjp2ZWN0b3I8c3RkOjp0aHJlYWQ+IHRocmVhZHM7Ci0gIHdoaWxlICh0aHJl
YWRzLnNpemUoKSA8IG51bVRocmVhZHMpIHsKLSAgICB0aHJlYWRzLnB1c2hfYmFjayhzdGQ6OnRo
cmVhZChbJl0oKSB7Ci0gICAgICB3aGlsZSAoIWdvLmxvYWQoKSkgewotICAgICAgICBzdGQ6OnRo
aXNfdGhyZWFkOjp5aWVsZCgpOwotICAgICAgfQotICAgICAgc3RkOjphdG9taWM8c2l6ZV90PiBs
b2NhbENvdW50ZXIoMCk7Ci0gICAgICBzdGQ6OmF0b21pYzxpbnQ+IGxvY2FsV29yaygwKTsKLSAg
ICAgIGZvciAoc2l6ZV90IGkgPSBpdGVyczsgaSA+IDA7IC0taSkgewotICAgICAgICBsb2NhbENv
dW50ZXIrKzsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IHdvcms7IGogPiAwOyAtLWopIHsKLSAg
ICAgICAgICBsb2NhbFdvcmsubG9hZCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSkpOwot
ICB9Ci0KLSAgYnJhY2VzLmRpc21pc3MoKTsKLSAgZ28gPSB0cnVlOwotCi0gIGZvciAoYXV0byYg
dGhyIDogdGhyZWFkcykgewotICAgIHRoci5qb2luKCk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQg
Y29udGVudGlvbkF0V2lkdGhHZXRjcHUoc2l6ZV90IGl0ZXJzLCBzaXplX3Qgc3RyaXBlcywgc2l6
ZV90IHdvcmspIHsKLSAgY29udGVudGlvbkF0V2lkdGg8c3RkOjphdG9taWM+KGl0ZXJzLCBzdHJp
cGVzLCB3b3JrKTsKLX0KLQotc3RhdGljIHZvaWQKLWNvbnRlbnRpb25BdFdpZHRoVGhyZWFkTG9j
YWwoc2l6ZV90IGl0ZXJzLCBzaXplX3Qgc3RyaXBlcywgc2l6ZV90IHdvcmspIHsKLSAgY29udGVu
dGlvbkF0V2lkdGg8VGhyZWFkTG9jYWxUYWc+KGl0ZXJzLCBzdHJpcGVzLCB3b3JrKTsKLX0KLQot
c3RhdGljIHZvaWQKLWNvbnRlbnRpb25BdFdpZHRoUHRocmVhZFNlbGYoc2l6ZV90IGl0ZXJzLCBz
aXplX3Qgc3RyaXBlcywgc2l6ZV90IHdvcmspIHsKLSAgY29udGVudGlvbkF0V2lkdGg8UHRocmVh
ZFNlbGZUYWc+KGl0ZXJzLCBzdHJpcGVzLCB3b3JrKTsKLX0KLQotQkVOQ0hNQVJLX0RSQVdfTElO
RSgpCi1CRU5DSE1BUktfTkFNRURfUEFSQU0oY29udGVudGlvbkF0V2lkdGhHZXRjcHUsIDFfc3Ry
aXBlXzBfd29yaywgMSwgMCkKLUJFTkNITUFSS19OQU1FRF9QQVJBTShjb250ZW50aW9uQXRXaWR0
aEdldGNwdSwgMl9zdHJpcGVfMF93b3JrLCAyLCAwKQotQkVOQ0hNQVJLX05BTUVEX1BBUkFNKGNv
bnRlbnRpb25BdFdpZHRoR2V0Y3B1LCA0X3N0cmlwZV8wX3dvcmssIDQsIDApCi1CRU5DSE1BUktf
TkFNRURfUEFSQU0oY29udGVudGlvbkF0V2lkdGhHZXRjcHUsIDhfc3RyaXBlXzBfd29yaywgOCwg
MCkKLUJFTkNITUFSS19OQU1FRF9QQVJBTShjb250ZW50aW9uQXRXaWR0aEdldGNwdSwgMTZfc3Ry
aXBlXzBfd29yaywgMTYsIDApCi1CRU5DSE1BUktfTkFNRURfUEFSQU0oY29udGVudGlvbkF0V2lk
dGhHZXRjcHUsIDMyX3N0cmlwZV8wX3dvcmssIDMyLCAwKQotQkVOQ0hNQVJLX05BTUVEX1BBUkFN
KGNvbnRlbnRpb25BdFdpZHRoR2V0Y3B1LCA2NF9zdHJpcGVfMF93b3JrLCA2NCwgMCkKLUJFTkNI
TUFSS19OQU1FRF9QQVJBTShjb250ZW50aW9uQXRXaWR0aFRocmVhZExvY2FsLCAyX3N0cmlwZV8w
X3dvcmssIDIsIDApCi1CRU5DSE1BUktfTkFNRURfUEFSQU0oY29udGVudGlvbkF0V2lkdGhUaHJl
YWRMb2NhbCwgNF9zdHJpcGVfMF93b3JrLCA0LCAwKQotQkVOQ0hNQVJLX05BTUVEX1BBUkFNKGNv
bnRlbnRpb25BdFdpZHRoVGhyZWFkTG9jYWwsIDhfc3RyaXBlXzBfd29yaywgOCwgMCkKLUJFTkNI
TUFSS19OQU1FRF9QQVJBTShjb250ZW50aW9uQXRXaWR0aFRocmVhZExvY2FsLCAxNl9zdHJpcGVf
MF93b3JrLCAxNiwgMCkKLUJFTkNITUFSS19OQU1FRF9QQVJBTShjb250ZW50aW9uQXRXaWR0aFRo
cmVhZExvY2FsLCAzMl9zdHJpcGVfMF93b3JrLCAzMiwgMCkKLUJFTkNITUFSS19OQU1FRF9QQVJB
TShjb250ZW50aW9uQXRXaWR0aFRocmVhZExvY2FsLCA2NF9zdHJpcGVfMF93b3JrLCA2NCwgMCkK
LUJFTkNITUFSS19OQU1FRF9QQVJBTShjb250ZW50aW9uQXRXaWR0aFB0aHJlYWRTZWxmLCAyX3N0
cmlwZV8wX3dvcmssIDIsIDApCi1CRU5DSE1BUktfTkFNRURfUEFSQU0oY29udGVudGlvbkF0V2lk
dGhQdGhyZWFkU2VsZiwgNF9zdHJpcGVfMF93b3JrLCA0LCAwKQotQkVOQ0hNQVJLX05BTUVEX1BB
UkFNKGNvbnRlbnRpb25BdFdpZHRoUHRocmVhZFNlbGYsIDhfc3RyaXBlXzBfd29yaywgOCwgMCkK
LUJFTkNITUFSS19OQU1FRF9QQVJBTShjb250ZW50aW9uQXRXaWR0aFB0aHJlYWRTZWxmLCAxNl9z
dHJpcGVfMF93b3JrLCAxNiwgMCkKLUJFTkNITUFSS19OQU1FRF9QQVJBTShjb250ZW50aW9uQXRX
aWR0aFB0aHJlYWRTZWxmLCAzMl9zdHJpcGVfMF93b3JrLCAzMiwgMCkKLUJFTkNITUFSS19OQU1F
RF9QQVJBTShjb250ZW50aW9uQXRXaWR0aFB0aHJlYWRTZWxmLCA2NF9zdHJpcGVfMF93b3JrLCA2
NCwgMCkKLUJFTkNITUFSS19OQU1FRF9QQVJBTShhdG9taWNJbmNyQmFzZWxpbmUsIGxvY2FsX2lu
Y3JfMF93b3JrLCAwKQotQkVOQ0hNQVJLX0RSQVdfTElORSgpCi1CRU5DSE1BUktfTkFNRURfUEFS
QU0oY29udGVudGlvbkF0V2lkdGhHZXRjcHUsIDFfc3RyaXBlXzUwMF93b3JrLCAxLCA1MDApCi1C
RU5DSE1BUktfTkFNRURfUEFSQU0oY29udGVudGlvbkF0V2lkdGhHZXRjcHUsIDJfc3RyaXBlXzUw
MF93b3JrLCAyLCA1MDApCi1CRU5DSE1BUktfTkFNRURfUEFSQU0oY29udGVudGlvbkF0V2lkdGhH
ZXRjcHUsIDRfc3RyaXBlXzUwMF93b3JrLCA0LCA1MDApCi1CRU5DSE1BUktfTkFNRURfUEFSQU0o
Y29udGVudGlvbkF0V2lkdGhHZXRjcHUsIDhfc3RyaXBlXzUwMF93b3JrLCA4LCA1MDApCi1CRU5D
SE1BUktfTkFNRURfUEFSQU0oY29udGVudGlvbkF0V2lkdGhHZXRjcHUsIDE2X3N0cmlwZV81MDBf
d29yaywgMTYsIDUwMCkKLUJFTkNITUFSS19OQU1FRF9QQVJBTShjb250ZW50aW9uQXRXaWR0aEdl
dGNwdSwgMzJfc3RyaXBlXzUwMF93b3JrLCAzMiwgNTAwKQotQkVOQ0hNQVJLX05BTUVEX1BBUkFN
KGF0b21pY0luY3JCYXNlbGluZSwgbG9jYWxfaW5jcl81MDBfd29yaywgNTAwKQotQkVOQ0hNQVJL
X0RSQVdfTElORSgpCi1CRU5DSE1BUktfTkFNRURfUEFSQU0oY29udGVudGlvbkF0V2lkdGhHZXRj
cHUsIDFfc3RyaXBlXzEwMDBfd29yaywgMSwgMTAwMCkKLUJFTkNITUFSS19OQU1FRF9QQVJBTShj
b250ZW50aW9uQXRXaWR0aEdldGNwdSwgMl9zdHJpcGVfMTAwMF93b3JrLCAyLCAxMDAwKQotQkVO
Q0hNQVJLX05BTUVEX1BBUkFNKGNvbnRlbnRpb25BdFdpZHRoR2V0Y3B1LCA0X3N0cmlwZV8xMDAw
X3dvcmssIDQsIDEwMDApCi1CRU5DSE1BUktfTkFNRURfUEFSQU0oY29udGVudGlvbkF0V2lkdGhH
ZXRjcHUsIDhfc3RyaXBlXzEwMDBfd29yaywgOCwgMTAwMCkKLUJFTkNITUFSS19OQU1FRF9QQVJB
TShjb250ZW50aW9uQXRXaWR0aEdldGNwdSwgMTZfc3RyaXBlXzEwMDBfd29yaywgMTYsIDEwMDAp
Ci1CRU5DSE1BUktfTkFNRURfUEFSQU0oY29udGVudGlvbkF0V2lkdGhHZXRjcHUsIDMyX3N0cmlw
ZV8xMDAwX3dvcmssIDMyLCAxMDAwKQotQkVOQ0hNQVJLX05BTUVEX1BBUkFNKGF0b21pY0luY3JC
YXNlbGluZSwgbG9jYWxfaW5jcl8xMDAwX3dvcmssIDEwMDApCi0KLWludCBtYWluKCkgewotICBm
b2xseTo6cnVuQmVuY2htYXJrcygpOwotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2RldGFpbC9BdG9taWNVdGlscy5o
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZGV0YWlsL0F0b21p
Y1V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZDY4Y2Y2OTE3OTk0Yjdm
NTU0MzJiMzYwY2E5ZDI3OGMwMTU2MTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkv
ZGV0YWlsL0F0b21pY1V0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICog
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlIDxhdG9taWM+Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci1uYW1lc3BhY2UgZGV0YWlsIHsK
LQotaW5saW5lIHN0ZDo6bWVtb3J5X29yZGVyIGRlZmF1bHRfZmFpbHVyZV9tZW1vcnlfb3JkZXIo
Ci0gICAgc3RkOjptZW1vcnlfb3JkZXIgc3VjY2Vzc01vZGUpIHsKLSAgc3dpdGNoIChzdWNjZXNz
TW9kZSkgewotICAgIGNhc2Ugc3RkOjptZW1vcnlfb3JkZXJfYWNxX3JlbDoKLSAgICAgIHJldHVy
biBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlOwotICAgIGNhc2Ugc3RkOjptZW1vcnlfb3JkZXJf
cmVsZWFzZToKLSAgICAgIHJldHVybiBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICByZXR1cm4gc3VjY2Vzc01vZGU7Ci0gIH0KLX0KLX0KLX0gLy8gbmFtZXNw
YWNlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xs
eS9kZXRhaWwvQml0SXRlcmF0b3JEZXRhaWwuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2ZvbGx5L2RldGFpbC9CaXRJdGVyYXRvckRldGFpbC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlZTY0ZmZlNGJjZmIxNDY4ZDhiYTZmYzIxNjE5ZjI3ODUwNzc5YTk2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2RldGFpbC9CaXRJdGVyYXRvckRldGFp
bC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3
IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl
LCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hl
Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBs
aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs
Ci0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVy
IHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8aXRlcmF0b3I+
Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0KLSNpbmNsdWRlIDxib29zdC9pdGVyYXRvci9pdGVy
YXRvcl9hZGFwdG9yLmhwcD4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotdGVtcGxhdGUgPGNsYXNz
IEJhc2VJdGVyPiBjbGFzcyBCaXRJdGVyYXRvcjsKLQotbmFtZXNwYWNlIGJpdGl0ZXJhdG9yX2Rl
dGFpbCB7Ci0KLS8vIFJlZmVyZW5jZSB0byBhIGJpdC4KLS8vIFRlbXBsYXRpemUgb24gYm90aCBw
YXJlbnQgcmVmZXJlbmNlIGFuZCB2YWx1ZSB0eXBlcyB0byBjYXB0dXJlCi0vLyBjb25zdC1uZXNz
IGNvcnJlY3RseSBhbmQgdG8gd29yayB3aXRoIHRoZSBjYXNlIHdoZXJlIFJlZiBpcyBhCi0vLyBy
ZWZlcmVuY2UtbGlrZSB0eXBlIChub3QgVCYpLCBqdXN0IGxpa2Ugb3VyIEJpdFJlZmVyZW5jZSBo
ZXJlLgotdGVtcGxhdGUgPGNsYXNzIFJlZiwgY2xhc3MgVmFsdWU+Ci1jbGFzcyBCaXRSZWZlcmVu
Y2UgewotIHB1YmxpYzoKLSAgQml0UmVmZXJlbmNlKFJlZiByLCBzaXplX3QgYml0KSA6IHJlZl8o
ciksIGJpdF8oYml0KSB7IH0KLQotICAvKiBpbXBsaWNpdCAqLyBvcGVyYXRvciBib29sKCkgY29u
c3QgewotICAgIHJldHVybiByZWZfICYgKG9uZV8gPDwgYml0Xyk7Ci0gIH0KLQotICBCaXRSZWZl
cmVuY2UmIG9wZXJhdG9yPShib29sIGIpIHsKLSAgICBpZiAoYikgewotICAgICAgc2V0KCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIGNsZWFyKCk7Ci0gICAgfQotICAgIHJldHVybiAqdGhpczsKLSAg
fQotCi0gIHZvaWQgc2V0KCkgewotICAgIHJlZl8gfD0gKG9uZV8gPDwgYml0Xyk7Ci0gIH0KLQot
ICB2b2lkIGNsZWFyKCkgewotICAgIHJlZl8gJj0gfihvbmVfIDw8IGJpdF8pOwotICB9Ci0KLSAg
dm9pZCBmbGlwKCkgewotICAgIHJlZl8gXj0gKG9uZV8gPDwgYml0Xyk7Ci0gIH0KLQotIHByaXZh
dGU6Ci0gIC8vIHNob3J0Y3V0IHRvIGF2b2lkIHdyaXRpbmcgc3RhdGljX2Nhc3QgZXZlcnl3aGVy
ZQotICBjb25zdCBzdGF0aWMgVmFsdWUgb25lXyA9IDE7Ci0KLSAgUmVmIHJlZl87Ci0gIHNpemVf
dCBiaXRfOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEJhc2VJdGVyPgotc3RydWN0IEJpdEl0ZXJh
dG9yQmFzZSB7Ci0gIHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRlZ3JhbDx0eXBlbmFtZSBCYXNl
SXRlcjo6dmFsdWVfdHlwZT46OnZhbHVlLAotICAgICAgICAgICAgICAgICJCaXRJdGVyYXRvciBt
YXkgb25seSBiZSB1c2VkIHdpdGggaW50ZWdyYWwgdHlwZXMiKTsKLSAgdHlwZWRlZiBib29zdDo6
aXRlcmF0b3JfYWRhcHRvcjwKLSAgICBCaXRJdGVyYXRvcjxCYXNlSXRlcj4sICAgICAgLy8gRGVy
aXZlZAotICAgIEJhc2VJdGVyLCAgICAgICAgICAgICAgICAgICAvLyBCYXNlCi0gICAgYm9vbCwg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFZhbHVlCi0gICAgYm9vc3Q6OnVzZV9kZWZhdWx0LCAg
ICAgICAgIC8vIENhdGVnb3J5T3JUcmF2ZXJzYWwKLSAgICBiaXRpdGVyYXRvcl9kZXRhaWw6OkJp
dFJlZmVyZW5jZTwKLSAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEJhc2VJdGVy
Pjo6cmVmZXJlbmNlLAotICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8QmFzZUl0
ZXI+Ojp2YWx1ZV90eXBlCi0gICAgPiwgIC8vIFJlZmVyZW5jZQotICAgIHNzaXplX3Q+IHR5cGU7
Ci19OwotCi0KLX0gIC8vIG5hbWVzcGFjZSBiaXRpdGVyYXRvcl9kZXRhaWwKLX0gIC8vIG5hbWVz
cGFjZSBmb2xseQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZm9sbHkvZGV0YWlsL0ZpbGVVdGlsRGV0YWlsLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9mb2xseS9kZXRhaWwvRmlsZVV0aWxEZXRhaWwuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTkyZTBiNjNmMzA1MzJlOTEwZWEyYjAxYjEzOWI4NjAwMDAwMmZm
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9kZXRhaWwvRmlsZVV0aWxEZXRhaWwu
aAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcg
RmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUu
b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywK
LSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg
ZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg
bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIg
dGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxjZXJybm8+Ci0K
LSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9TeXNVaW8uaD4KLSNpbmNsdWRlIDxmb2xseS9w
b3J0YWJpbGl0eS9VbmlzdGQuaD4KLQotLyoqCi0gKiBIZWxwZXIgZnVuY3Rpb25zIGFuZCB0ZW1w
bGF0ZXMgZm9yIEZpbGVVdGlsLmNwcC4gIERlY2xhcmVkIGhlcmUgc28KLSAqIHRoZXkgY2FuIGJl
IHVuaXR0ZXN0ZWQuCi0gKi8KLW5hbWVzcGFjZSBmb2xseSB7IG5hbWVzcGFjZSBmaWxldXRpbF9k
ZXRhaWwgewotCi0vLyBXcmFwIGNhbGwgdG8gZihhcmdzKSBpbiBsb29wIHRvIHJldHJ5IG9uIEVJ
TlRSCi10ZW1wbGF0ZTxjbGFzcyBGLCBjbGFzcy4uLiBBcmdzPgotc3NpemVfdCB3cmFwTm9JbnQo
RiBmLCBBcmdzLi4uIGFyZ3MpIHsKLSAgc3NpemVfdCByOwotICBkbyB7Ci0gICAgciA9IGYoYXJn
cy4uLik7Ci0gIH0gd2hpbGUgKHIgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOwotICByZXR1cm4g
cjsKLX0KLQotaW5saW5lIHZvaWQgaW5jcihzc2l6ZV90IC8qIG4gKi8pIHt9Ci1pbmxpbmUgdm9p
ZCBpbmNyKHNzaXplX3Qgbiwgb2ZmX3QmIG9mZnNldCkgeyBvZmZzZXQgKz0gb2ZmX3Qobik7IH0K
LQotLy8gV3JhcCBjYWxsIHRvIHJlYWQvcHJlYWQvd3JpdGUvcHdyaXRlKGZkLCBidWYsIGNvdW50
LCBvZmZzZXQ/KSB0byByZXRyeSBvbgotLy8gaW5jb21wbGV0ZSByZWFkcyAvIHdyaXRlcy4gIFRo
ZSB2YXJpYWRpYyBhcmd1bWVudCBtYWdpYyBpcyB0aGVyZSB0byBzdXBwb3J0Ci0vLyBhbiBhZGRp
dGlvbmFsIGFyZ3VtZW50IChvZmZzZXQpIGZvciBwcmVhZCAvIHB3cml0ZTsgc2VlIHRoZSBpbmNy
KCkgZnVuY3Rpb25zCi0vLyBhYm92ZSB3aGljaCBkbyBub3RoaW5nIGlmIHRoZSBvZmZzZXQgaXMg
bm90IHByZXNlbnQgYW5kIGluY3JlbWVudCBpdCBpZiBpdAotLy8gaXMuCi10ZW1wbGF0ZSA8Y2xh
c3MgRiwgY2xhc3MuLi4gT2Zmc2V0Pgotc3NpemVfdCB3cmFwRnVsbChGIGYsIGludCBmZCwgdm9p
ZCogYnVmLCBzaXplX3QgY291bnQsIE9mZnNldC4uLiBvZmZzZXQpIHsKLSAgY2hhciogYiA9IHN0
YXRpY19jYXN0PGNoYXIqPihidWYpOwotICBzc2l6ZV90IHRvdGFsQnl0ZXMgPSAwOwotICBzc2l6
ZV90IHI7Ci0gIGRvIHsKLSAgICByID0gZihmZCwgYiwgY291bnQsIG9mZnNldC4uLik7Ci0gICAg
aWYgKHIgPT0gLTEpIHsKLSAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgewotICAgICAgICBjb250
aW51ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByOwotICAgIH0KLQotICAgIHRvdGFsQnl0ZXMg
Kz0gcjsKLSAgICBiICs9IHI7Ci0gICAgY291bnQgLT0gcjsKLSAgICBpbmNyKHIsIG9mZnNldC4u
Lik7Ci0gIH0gd2hpbGUgKHIgIT0gMCAmJiBjb3VudCk7ICAvLyAwIG1lYW5zIEVPRgotCi0gIHJl
dHVybiB0b3RhbEJ5dGVzOwotfQotCi0vLyBXcmFwIGNhbGwgdG8gcmVhZHYvcHJlYWR2L3dyaXRl
di9wd3JpdGV2KGZkLCBpb3YsIGNvdW50LCBvZmZzZXQ/KSB0bwotLy8gcmV0cnkgb24gaW5jb21w
bGV0ZSByZWFkcyAvIHdyaXRlcy4KLXRlbXBsYXRlIDxjbGFzcyBGLCBjbGFzcy4uLiBPZmZzZXQ+
Ci1zc2l6ZV90IHdyYXB2RnVsbChGIGYsIGludCBmZCwgaW92ZWMqIGlvdiwgaW50IGNvdW50LCBP
ZmZzZXQuLi4gb2Zmc2V0KSB7Ci0gIHNzaXplX3QgdG90YWxCeXRlcyA9IDA7Ci0gIHNzaXplX3Qg
cjsKLSAgZG8gewotICAgIHIgPSBmKGZkLCBpb3YsIHN0ZDo6bWluPGludD4oY291bnQsIGtJb3ZN
YXgpLCBvZmZzZXQuLi4pOwotICAgIGlmIChyID09IC0xKSB7Ci0gICAgICBpZiAoZXJybm8gPT0g
RUlOVFIpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcjsKLSAg
ICB9Ci0KLSAgICBpZiAociA9PSAwKSB7Ci0gICAgICBicmVhazsgIC8vIEVPRgotICAgIH0KLQot
ICAgIHRvdGFsQnl0ZXMgKz0gcjsKLSAgICBpbmNyKHIsIG9mZnNldC4uLik7Ci0gICAgd2hpbGUg
KHIgIT0gMCAmJiBjb3VudCAhPSAwKSB7Ci0gICAgICBpZiAociA+PSBzc2l6ZV90KGlvdi0+aW92
X2xlbikpIHsKLSAgICAgICAgciAtPSBzc2l6ZV90KGlvdi0+aW92X2xlbik7Ci0gICAgICAgICsr
aW92OwotICAgICAgICAtLWNvdW50OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaW92LT5pb3Zf
YmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihpb3YtPmlvdl9iYXNlKSArIHI7Ci0gICAgICAgIGlv
di0+aW92X2xlbiAtPSByOwotICAgICAgICByID0gMDsKLSAgICAgIH0KLSAgICB9Ci0gIH0gd2hp
bGUgKGNvdW50KTsKLQotICByZXR1cm4gdG90YWxCeXRlczsKLX0KLQotfX0gIC8vIG5hbWVzcGFj
ZXMKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5
L2RldGFpbC9GdXRleC5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9m
b2xseS9kZXRhaWwvRnV0ZXguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGE4
ZGJjNzgxOTE4MmFkMTk5MTk0OGY5ODYzYTdkMDZmYmNmYTYyLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2ZvbGx5L2RldGFpbC9GdXRleC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMTkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
LSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoK
LSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3Jp
dGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry
aWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0
aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9u
cyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRl
IDxmb2xseS9kZXRhaWwvRnV0ZXguaD4KLSNpbmNsdWRlIDxib29zdC9pbnRydXNpdmUvbGlzdC5o
cHA+Ci0jaW5jbHVkZSA8Zm9sbHkvSGFzaC5oPgotI2luY2x1ZGUgPGZvbGx5L1Njb3BlR3VhcmQu
aD4KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9TeXNTeXNjYWxsLmg+Ci0jaW5jbHVkZSA8
c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Y2Vycm5vPgotI2luY2x1
ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KLSNpbmNsdWRlIDxtdXRleD4KLQotI2lmZGVmIF9fbGlu
dXhfXwotI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNl
IHN0ZDo6Y2hyb25vOwotCi1uYW1lc3BhY2UgZm9sbHkgeyBuYW1lc3BhY2UgZGV0YWlsIHsKLQot
bmFtZXNwYWNlIHsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotLy8gbmF0aXZlIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBmdXRleCgpIHN5
c2NhbGwKLQotI2lmZGVmIF9fbGludXhfXwotCi0vLy8gQ2VydGFpbiB0b29sY2hhaW5zIChsaWtl
IEFuZHJvaWQncykgZG9uJ3QgaW5jbHVkZSB0aGUgZnVsbCBmdXRleCBBUEkgaW4KLS8vLyB0aGVp
ciBoZWFkZXJzIGV2ZW4gdGhvdWdoIHRoZXkgc3VwcG9ydCBpdC4gTWFrZSBzdXJlIHdlIGhhdmUg
b3VyIGNvbnN0YW50cwotLy8vIGV2ZW4gaWYgdGhlIGhlYWRlcnMgZG9uJ3QgaGF2ZSB0aGVtLgot
I2lmbmRlZiBGVVRFWF9XQUlUX0JJVFNFVAotIyBkZWZpbmUgRlVURVhfV0FJVF9CSVRTRVQgOQot
I2VuZGlmCi0jaWZuZGVmIEZVVEVYX1dBS0VfQklUU0VUCi0jIGRlZmluZSBGVVRFWF9XQUtFX0JJ
VFNFVCAxMAotI2VuZGlmCi0jaWZuZGVmIEZVVEVYX1BSSVZBVEVfRkxBRwotIyBkZWZpbmUgRlVU
RVhfUFJJVkFURV9GTEFHIDEyOAotI2VuZGlmCi0jaWZuZGVmIEZVVEVYX0NMT0NLX1JFQUxUSU1F
Ci0jIGRlZmluZSBGVVRFWF9DTE9DS19SRUFMVElNRSAyNTYKLSNlbmRpZgotCi1pbnQgbmF0aXZl
RnV0ZXhXYWtlKHZvaWQqIGFkZHIsIGludCBjb3VudCwgdWludDMyX3Qgd2FrZU1hc2spIHsKLSAg
aW50IHJ2ID0gc3lzY2FsbChfX05SX2Z1dGV4LAotICAgICAgICAgICAgICAgICAgIGFkZHIsIC8q
IGFkZHIxICovCi0gICAgICAgICAgICAgICAgICAgRlVURVhfV0FLRV9CSVRTRVQgfCBGVVRFWF9Q
UklWQVRFX0ZMQUcsIC8qIG9wICovCi0gICAgICAgICAgICAgICAgICAgY291bnQsIC8qIHZhbCAq
LwotICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIC8qIHRpbWVvdXQgKi8KLSAgICAgICAgICAg
ICAgICAgICBudWxscHRyLCAvKiBhZGRyMiAqLwotICAgICAgICAgICAgICAgICAgIHdha2VNYXNr
KTsgLyogdmFsMyAqLwotCi0gIC8qIE5PVEU6IHdlIGlnbm9yZSBlcnJvcnMgb24gd2FrZSBmb3Ig
dGhlIGNhc2Ugb2YgYSBmdXRleAotICAgICBndWFyZGluZyBpdHMgb3duIGRlc3RydWN0aW9uLCBz
aW1pbGFyIHRvIHRoaXMKLSAgICAgZ2xpYmMgYnVnIHdpdGggc2VtX3Bvc3Qvc2VtX3dhaXQ6Ci0g
ICAgIGh0dHBzOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTEyNjc0
ICovCi0gIGlmIChydiA8IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICByZXR1cm4gcnY7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBDbG9jaz4KLXN0cnVjdCB0aW1lc3BlYwotdGltZVNwZWNGcm9t
VGltZVBvaW50KHRpbWVfcG9pbnQ8Q2xvY2s+IGFic1RpbWUpCi17Ci0gIGF1dG8gZXBvY2ggPSBh
YnNUaW1lLnRpbWVfc2luY2VfZXBvY2goKTsKLSAgaWYgKGVwb2NoLmNvdW50KCkgPCAwKSB7Ci0g
ICAgLy8ga2VybmVsIHRpbWVzcGVjX3ZhbGlkIHJlcXVpcmVzIG5vbi1uZWdhdGl2ZSBzZWNvbmRz
IGFuZCBuYW5vcyBpbiBbMCwxRykKLSAgICBlcG9jaCA9IENsb2NrOjpkdXJhdGlvbjo6emVybygp
OwotICB9Ci0KLSAgLy8gdGltZXNwZWMtc2FmZSBzZWNvbmRzIGFuZCBuYW5vc2Vjb25kczsKLSAg
Ly8gY2hyb25vOjp7bmFubyx9c2Vjb25kcyBhcmUgYGxvbmcgbG9uZyBpbnRgCi0gIC8vIHdoZXJl
YXMgdGltZXNwZWMgdXNlcyBzbWFsbGVyIHR5cGVzCi0gIHVzaW5nIHRpbWVfdF9zZWNvbmRzID0g
ZHVyYXRpb248c3RkOjp0aW1lX3QsIHNlY29uZHM6OnBlcmlvZD47Ci0gIHVzaW5nIGxvbmdfbmFu
b3MgPSBkdXJhdGlvbjxsb25nIGludCwgbmFub3NlY29uZHM6OnBlcmlvZD47Ci0KLSAgYXV0byBz
ZWNzID0gZHVyYXRpb25fY2FzdDx0aW1lX3Rfc2Vjb25kcz4oZXBvY2gpOwotICBhdXRvIG5hbm9z
ID0gZHVyYXRpb25fY2FzdDxsb25nX25hbm9zPihlcG9jaCAtIHNlY3MpOwotICBzdHJ1Y3QgdGlt
ZXNwZWMgcmVzdWx0ID0geyBzZWNzLmNvdW50KCksIG5hbm9zLmNvdW50KCkgfTsKLSAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotRnV0ZXhSZXN1bHQgbmF0aXZlRnV0ZXhXYWl0SW1wbCh2b2lkKiBhZGRy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBleHBlY3RlZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV9wb2ludDxzeXN0ZW1fY2xvY2s+KiBh
YnNTeXN0ZW1UaW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX3BvaW50
PHN0ZWFkeV9jbG9jaz4qIGFic1N0ZWFkeVRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHdhaXRNYXNrKSB7Ci0gIGFzc2VydChhYnNTeXN0ZW1UaW1lID09IG51
bGxwdHIgfHwgYWJzU3RlYWR5VGltZSA9PSBudWxscHRyKTsKLQotICBpbnQgb3AgPSBGVVRFWF9X
QUlUX0JJVFNFVCB8IEZVVEVYX1BSSVZBVEVfRkxBRzsKLSAgc3RydWN0IHRpbWVzcGVjIHRzOwot
ICBzdHJ1Y3QgdGltZXNwZWMqIHRpbWVvdXQgPSBudWxscHRyOwotCi0gIGlmIChhYnNTeXN0ZW1U
aW1lICE9IG51bGxwdHIpIHsKLSAgICBvcCB8PSBGVVRFWF9DTE9DS19SRUFMVElNRTsKLSAgICB0
cyA9IHRpbWVTcGVjRnJvbVRpbWVQb2ludCgqYWJzU3lzdGVtVGltZSk7Ci0gICAgdGltZW91dCA9
ICZ0czsKLSAgfSBlbHNlIGlmIChhYnNTdGVhZHlUaW1lICE9IG51bGxwdHIpIHsKLSAgICB0cyA9
IHRpbWVTcGVjRnJvbVRpbWVQb2ludCgqYWJzU3RlYWR5VGltZSk7Ci0gICAgdGltZW91dCA9ICZ0
czsKLSAgfQotCi0gIC8vIFVubGlrZSBGVVRFWF9XQUlULCBGVVRFWF9XQUlUX0JJVFNFVCByZXF1
aXJlcyBhbiBhYnNvbHV0ZSB0aW1lb3V0Ci0gIC8vIHZhbHVlIC0gaHR0cDovL2xvY2tsZXNzaW5j
LmNvbS9hcnRpY2xlcy9mdXRleF9jaGVhdF9zaGVldC8KLSAgaW50IHJ2ID0gc3lzY2FsbChfX05S
X2Z1dGV4LAotICAgICAgICAgICAgICAgICAgIGFkZHIsIC8qIGFkZHIxICovCi0gICAgICAgICAg
ICAgICAgICAgb3AsIC8qIG9wICovCi0gICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIC8qIHZh
bCAqLwotICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsIC8qIHRpbWVvdXQgKi8KLSAgICAgICAg
ICAgICAgICAgICBudWxscHRyLCAvKiBhZGRyMiAqLwotICAgICAgICAgICAgICAgICAgIHdhaXRN
YXNrKTsgLyogdmFsMyAqLwotCi0gIGlmIChydiA9PSAwKSB7Ci0gICAgcmV0dXJuIEZ1dGV4UmVz
dWx0OjpBV09LRU47Ci0gIH0gZWxzZSB7Ci0gICAgc3dpdGNoKGVycm5vKSB7Ci0gICAgICBjYXNl
IEVUSU1FRE9VVDoKLSAgICAgICAgYXNzZXJ0KHRpbWVvdXQgIT0gbnVsbHB0cik7Ci0gICAgICAg
IHJldHVybiBGdXRleFJlc3VsdDo6VElNRURPVVQ7Ci0gICAgICBjYXNlIEVJTlRSOgotICAgICAg
ICByZXR1cm4gRnV0ZXhSZXN1bHQ6OklOVEVSUlVQVEVEOwotICAgICAgY2FzZSBFV09VTERCTE9D
SzoKLSAgICAgICAgcmV0dXJuIEZ1dGV4UmVzdWx0OjpWQUxVRV9DSEFOR0VEOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgLy8gRUlOVkFMLCBFQUNDRVNT
LCBvciBFRkFVTFQuICBFSU5WQUwgbWVhbnMgdGhlcmUgd2FzIGFuIGludmFsaWQKLSAgICAgICAg
Ly8gb3AgKHNob3VsZCBiZSBpbXBvc3NpYmxlKSBvciBhbiBpbnZhbGlkIHRpbWVvdXQgKHNob3Vs
ZCBoYXZlCi0gICAgICAgIC8vIGJlZW4gc2FuaXRpemVkIGJ5IHRpbWVTcGVjRnJvbVRpbWVQb2lu
dCkuICBFQUNDRVNTIG9yIEVGQVVMVAotICAgICAgICAvLyBtZWFucyAqYWRkciBwb2ludHMgdG8g
aW52YWxpZCBtZW1vcnksIHdoaWNoIGlzIHVubGlrZWx5IGJlY2F1c2UKLSAgICAgICAgLy8gdGhl
IGNhbGxlciBzaG91bGQgaGF2ZSBzZWdmYXVsdGVkIGFscmVhZHkuICBXZSBjYW4gZWl0aGVyCi0g
ICAgICAgIC8vIGNyYXNoLCBvciByZXR1cm4gYSB2YWx1ZSB0aGF0IGxldHMgdGhlIHByb2Nlc3Mg
Y29udGludWUgZm9yCi0gICAgICAgIC8vIGEgYml0LiBXZSBjaG9vc2UgdGhlIGxhdHRlci4gVkFM
VUVfQ0hBTkdFRCBwcm9iYWJseSB0dXJucyB0aGUKLSAgICAgICAgLy8gY2FsbGVyIGludG8gYSBz
cGluIGxvY2suCi0gICAgICAgIHJldHVybiBGdXRleFJlc3VsdDo6VkFMVUVfQ0hBTkdFRDsKLSAg
ICB9Ci0gIH0KLX0KLQotI2VuZGlmIC8vIF9fbGludXhfXwotCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBjb21wYXRpYmlsaXR5IGlt
cGxlbWVudGF0aW9uIHVzaW5nIHN0YW5kYXJkIEMrKyBBUEkKLQotLy8gT3VyIGVtdWxhdGVkIGZ1
dGV4IHVzZXMgNDA5NiBsaXN0cyBvZiB3YWl0IG5vZGVzLiAgVGhlcmUgYXJlIHR3byBsZXZlbHMK
LS8vIG9mIGxvY2tpbmc6IGEgcGVyLWxpc3QgbXV0ZXggdGhhdCBjb250cm9scyBhY2Nlc3MgdG8g
dGhlIGxpc3QgYW5kIGEKLS8vIHBlci1ub2RlIG11dGV4LCBjb25kdmFyLCBhbmQgYm9vbCB0aGF0
IGFyZSB1c2VkIGZvciB0aGUgYWN0dWFsIHdha2V1cHMuCi0vLyBUaGUgcGVyLW5vZGUgbXV0ZXgg
YWxsb3dzIHVzIHRvIGRvIHByZWNpc2Ugd2FrZXVwcyB3aXRob3V0IHRodW5kZXJpbmcKLS8vIGhl
cmRzLgotCi1zdHJ1Y3QgRW11bGF0ZWRGdXRleFdhaXROb2RlIDogcHVibGljIGJvb3N0OjppbnRy
dXNpdmU6Omxpc3RfYmFzZV9ob29rPD4gewotICB2b2lkKiBjb25zdCBhZGRyXzsKLSAgY29uc3Qg
dWludDMyX3Qgd2FpdE1hc2tfOwotCi0gIC8vIHRyaWNreTogaG9sZCBib3RoIGJ1Y2tldCBhbmQg
bm9kZSBtdXRleCB0byB3cml0ZSwgZWl0aGVyIHRvIHJlYWQKLSAgYm9vbCBzaWduYWxlZF87Ci0g
IHN0ZDo6bXV0ZXggbXV0ZXhfOwotICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBjb25kXzsKLQot
ICBFbXVsYXRlZEZ1dGV4V2FpdE5vZGUodm9pZCogYWRkciwgdWludDMyX3Qgd2FpdE1hc2spCi0g
ICAgOiBhZGRyXyhhZGRyKQotICAgICwgd2FpdE1hc2tfKHdhaXRNYXNrKQotICAgICwgc2lnbmFs
ZWRfKGZhbHNlKQotICB7Ci0gIH0KLX07Ci0KLXN0cnVjdCBFbXVsYXRlZEZ1dGV4QnVja2V0IHsK
LSAgc3RkOjptdXRleCBtdXRleF87Ci0gIGJvb3N0OjppbnRydXNpdmU6Omxpc3Q8RW11bGF0ZWRG
dXRleFdhaXROb2RlPiB3YWl0ZXJzXzsKLQotICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtOdW1CdWNr
ZXRzID0gNDA5NjsKLQotICBzdGF0aWMgRW11bGF0ZWRGdXRleEJ1Y2tldCYgYnVja2V0Rm9yKHZv
aWQqIGFkZHIpIHsKLSAgICBzdGF0aWMgYXV0byBnQnVja2V0cyA9IG5ldyBFbXVsYXRlZEZ1dGV4
QnVja2V0W2tOdW1CdWNrZXRzXTsKLSAgICB1aW50NjRfdCBtaXhlZEJpdHMgPSBmb2xseTo6aGFz
aDo6dHdhbmdfbWl4NjQoCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRy
KSk7Ci0gICAgcmV0dXJuIGdCdWNrZXRzW21peGVkQml0cyAlIGtOdW1CdWNrZXRzXTsKLSAgfQot
fTsKLQotaW50IGVtdWxhdGVkRnV0ZXhXYWtlKHZvaWQqIGFkZHIsIGludCBjb3VudCwgdWludDMy
X3Qgd2FpdE1hc2spIHsKLSAgYXV0byYgYnVja2V0ID0gRW11bGF0ZWRGdXRleEJ1Y2tldDo6YnVj
a2V0Rm9yKGFkZHIpOwotICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGJ1Y2tldExvY2so
YnVja2V0Lm11dGV4Xyk7Ci0KLSAgaW50IG51bUF3b2tlbiA9IDA7Ci0gIGZvciAoYXV0byBpdGVy
ID0gYnVja2V0LndhaXRlcnNfLmJlZ2luKCk7Ci0gICAgICAgbnVtQXdva2VuIDwgY291bnQgJiYg
aXRlciAhPSBidWNrZXQud2FpdGVyc18uZW5kKCk7ICkgewotICAgIGF1dG8gY3VycmVudCA9IGl0
ZXI7Ci0gICAgYXV0byYgbm9kZSA9ICppdGVyKys7Ci0gICAgaWYgKG5vZGUuYWRkcl8gPT0gYWRk
ciAmJiAobm9kZS53YWl0TWFza18gJiB3YWl0TWFzaykgIT0gMCkgewotICAgICAgKytudW1Bd29r
ZW47Ci0KLSAgICAgIC8vIHdlIHVubGluaywgYnV0IHdhaXRlciBkZXN0cm95cyB0aGUgbm9kZQot
ICAgICAgYnVja2V0LndhaXRlcnNfLmVyYXNlKGN1cnJlbnQpOwotCi0gICAgICBzdGQ6OnVuaXF1
ZV9sb2NrPHN0ZDo6bXV0ZXg+IG5vZGVMb2NrKG5vZGUubXV0ZXhfKTsKLSAgICAgIG5vZGUuc2ln
bmFsZWRfID0gdHJ1ZTsKLSAgICAgIG5vZGUuY29uZF8ubm90aWZ5X29uZSgpOwotICAgIH0KLSAg
fQotICByZXR1cm4gbnVtQXdva2VuOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRj4KLUZ1dGV4
UmVzdWx0IGVtdWxhdGVkRnV0ZXhXYWl0SW1wbCgKLSAgICBGKiBmdXRleCwKLSAgICB1aW50MzJf
dCBleHBlY3RlZCwKLSAgICB0aW1lX3BvaW50PHN5c3RlbV9jbG9jaz4qIGFic1N5c3RlbVRpbWUs
Ci0gICAgdGltZV9wb2ludDxzdGVhZHlfY2xvY2s+KiBhYnNTdGVhZHlUaW1lLAotICAgIHVpbnQz
Ml90IHdhaXRNYXNrKSB7Ci0gIHN0YXRpY19hc3NlcnQoCi0gICAgICBzdGQ6OmlzX3NhbWU8Riwg
RnV0ZXg8c3RkOjphdG9taWM+Pjo6dmFsdWUgfHwKLSAgICAgICAgICBzdGQ6OmlzX3NhbWU8Riwg
RnV0ZXg8RW11bGF0ZWRGdXRleEF0b21pYz4+Ojp2YWx1ZSwKLSAgICAgICJUeXBlIEYgbXVzdCBi
ZSBlaXRoZXIgRnV0ZXg8c3RkOjphdG9taWM+IG9yIEZ1dGV4PEVtdWxhdGVkRnV0ZXhBdG9taWM+
Iik7Ci0gIHZvaWQqIGFkZHIgPSBzdGF0aWNfY2FzdDx2b2lkKj4oZnV0ZXgpOwotICBhdXRvJiBi
dWNrZXQgPSBFbXVsYXRlZEZ1dGV4QnVja2V0OjpidWNrZXRGb3IoYWRkcik7Ci0gIEVtdWxhdGVk
RnV0ZXhXYWl0Tm9kZSBub2RlKGFkZHIsIHdhaXRNYXNrKTsKLQotICB7Ci0gICAgc3RkOjp1bmlx
dWVfbG9jazxzdGQ6Om11dGV4PiBidWNrZXRMb2NrKGJ1Y2tldC5tdXRleF8pOwotCi0gICAgaWYg
KGZ1dGV4LT5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpICE9IGV4cGVjdGVkKSB7Ci0g
ICAgICByZXR1cm4gRnV0ZXhSZXN1bHQ6OlZBTFVFX0NIQU5HRUQ7Ci0gICAgfQotCi0gICAgYnVj
a2V0LndhaXRlcnNfLnB1c2hfYmFjayhub2RlKTsKLSAgfSAvLyBidWNrZXRMb2NrIHNjb3BlCi0K
LSAgc3RkOjpjdl9zdGF0dXMgc3RhdHVzID0gc3RkOjpjdl9zdGF0dXM6Om5vX3RpbWVvdXQ7Ci0g
IHsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IG5vZGVMb2NrKG5vZGUubXV0ZXhf
KTsKLSAgICB3aGlsZSAoIW5vZGUuc2lnbmFsZWRfICYmIHN0YXR1cyAhPSBzdGQ6OmN2X3N0YXR1
czo6dGltZW91dCkgewotICAgICAgaWYgKGFic1N5c3RlbVRpbWUgIT0gbnVsbHB0cikgewotICAg
ICAgICBzdGF0dXMgPSBub2RlLmNvbmRfLndhaXRfdW50aWwobm9kZUxvY2ssICphYnNTeXN0ZW1U
aW1lKTsKLSAgICAgIH0gZWxzZSBpZiAoYWJzU3RlYWR5VGltZSAhPSBudWxscHRyKSB7Ci0gICAg
ICAgIHN0YXR1cyA9IG5vZGUuY29uZF8ud2FpdF91bnRpbChub2RlTG9jaywgKmFic1N0ZWFkeVRp
bWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbm9kZS5jb25kXy53YWl0KG5vZGVMb2NrKTsK
LSAgICAgIH0KLSAgICB9Ci0gIH0gLy8gbm9kZUxvY2sgc2NvcGUKLQotICBpZiAoc3RhdHVzID09
IHN0ZDo6Y3Zfc3RhdHVzOjp0aW1lb3V0KSB7Ci0gICAgLy8gaXQncyBub3QgcmVhbGx5IGEgdGlt
ZW91dCB1bnRpbCB3ZSB1bmxpbmsgdGhlIHVuc2lnbmFsZWQgbm9kZQotICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gYnVja2V0TG9jayhidWNrZXQubXV0ZXhfKTsKLSAgICBpZiAoIW5v
ZGUuc2lnbmFsZWRfKSB7Ci0gICAgICBidWNrZXQud2FpdGVyc18uZXJhc2UoYnVja2V0LndhaXRl
cnNfLml0ZXJhdG9yX3RvKG5vZGUpKTsKLSAgICAgIHJldHVybiBGdXRleFJlc3VsdDo6VElNRURP
VVQ7Ci0gICAgfQotICB9Ci0gIHJldHVybiBGdXRleFJlc3VsdDo6QVdPS0VOOwotfQotCi19IC8v
IGFub24gbmFtZXNwYWNlCi0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0v
LyBGdXRleDw+IHNwZWNpYWxpemF0aW9ucwotCi10ZW1wbGF0ZSA8PgotaW50Ci1GdXRleDxzdGQ6
OmF0b21pYz46OmZ1dGV4V2FrZShpbnQgY291bnQsIHVpbnQzMl90IHdha2VNYXNrKSB7Ci0jaWZk
ZWYgX19saW51eF9fCi0gIHJldHVybiBuYXRpdmVGdXRleFdha2UodGhpcywgY291bnQsIHdha2VN
YXNrKTsKLSNlbHNlCi0gIHJldHVybiBlbXVsYXRlZEZ1dGV4V2FrZSh0aGlzLCBjb3VudCwgd2Fr
ZU1hc2spOwotI2VuZGlmCi19Ci0KLXRlbXBsYXRlIDw+Ci1pbnQKLUZ1dGV4PEVtdWxhdGVkRnV0
ZXhBdG9taWM+OjpmdXRleFdha2UoaW50IGNvdW50LCB1aW50MzJfdCB3YWtlTWFzaykgewotICBy
ZXR1cm4gZW11bGF0ZWRGdXRleFdha2UodGhpcywgY291bnQsIHdha2VNYXNrKTsKLX0KLQotdGVt
cGxhdGUgPD4KLUZ1dGV4UmVzdWx0Ci1GdXRleDxzdGQ6OmF0b21pYz46OmZ1dGV4V2FpdEltcGwo
dWludDMyX3QgZXhwZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlt
ZV9wb2ludDxzeXN0ZW1fY2xvY2s+KiBhYnNTeXN0ZW1UaW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWVfcG9pbnQ8c3RlYWR5X2Nsb2NrPiogYWJzU3RlYWR5VGltZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB3YWl0TWFzaykgewot
I2lmZGVmIF9fbGludXhfXwotICByZXR1cm4gbmF0aXZlRnV0ZXhXYWl0SW1wbCgKLSAgICAgIHRo
aXMsIGV4cGVjdGVkLCBhYnNTeXN0ZW1UaW1lLCBhYnNTdGVhZHlUaW1lLCB3YWl0TWFzayk7Ci0j
ZWxzZQotICByZXR1cm4gZW11bGF0ZWRGdXRleFdhaXRJbXBsKAotICAgICAgdGhpcywgZXhwZWN0
ZWQsIGFic1N5c3RlbVRpbWUsIGFic1N0ZWFkeVRpbWUsIHdhaXRNYXNrKTsKLSNlbmRpZgotfQot
Ci10ZW1wbGF0ZSA8PgotRnV0ZXhSZXN1bHQKLUZ1dGV4PEVtdWxhdGVkRnV0ZXhBdG9taWM+Ojpm
dXRleFdhaXRJbXBsKAotICAgICAgICB1aW50MzJfdCBleHBlY3RlZCwKLSAgICAgICAgdGltZV9w
b2ludDxzeXN0ZW1fY2xvY2s+KiBhYnNTeXN0ZW1UaW1lLAotICAgICAgICB0aW1lX3BvaW50PHN0
ZWFkeV9jbG9jaz4qIGFic1N0ZWFkeVRpbWUsCi0gICAgICAgIHVpbnQzMl90IHdhaXRNYXNrKSB7
Ci0gIHJldHVybiBlbXVsYXRlZEZ1dGV4V2FpdEltcGwoCi0gICAgICB0aGlzLCBleHBlY3RlZCwg
YWJzU3lzdGVtVGltZSwgYWJzU3RlYWR5VGltZSwgd2FpdE1hc2spOwotfQotCi19fSAvLyBuYW1l
c3BhY2UgZm9sbHk6OmRldGFpbApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZm9sbHkvZGV0YWlsL0Z1dGV4LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9mb2xseS9kZXRhaWwvRnV0ZXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggODc1NTA0MTY1N2MzYWQ3N2MxZGNjYjg2OGFiNmEyNjZjMjIzOTI5OC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9kZXRhaWwvRnV0ZXguaAorKysgL2Rldi9udWxsCkBA
IC0xLDE2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAq
Ci0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxhdG9taWM+Ci0jaW5jbHVkZSA8Y2Fzc2VydD4K
LSNpbmNsdWRlIDxjaHJvbm8+Ci0jaW5jbHVkZSA8bGltaXRzPgotCi0jaW5jbHVkZSA8Ym9vc3Qv
bm9uY29weWFibGUuaHBwPgotCi0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvVW5pc3RkLmg+
Ci0KLW5hbWVzcGFjZSBmb2xseSB7IG5hbWVzcGFjZSBkZXRhaWwgewotCi1lbnVtIGNsYXNzIEZ1
dGV4UmVzdWx0IHsKLSAgVkFMVUVfQ0hBTkdFRCwgLyogRnV0ZXggdmFsdWUgZGlkbid0IG1hdGNo
IGV4cGVjdGVkICovCi0gIEFXT0tFTiwgICAgICAgIC8qIGZ1dGV4IHdhaXQgbWF0Y2hlZCB3aXRo
IGEgZnV0ZXggd2FrZSAqLwotICBJTlRFUlJVUFRFRCwgICAvKiBTcHVyaW91cyB3YWtlLXVwIG9y
IHNpZ25hbCBjYXVzZWQgZnV0ZXggd2FpdCBmYWlsdXJlICovCi0gIFRJTUVET1VUCi19OwotCi0v
KioKLSAqIEZ1dGV4IGlzIGFuIGF0b21pYyAzMiBiaXQgdW5zaWduZWQgaW50ZWdlciB0aGF0IHBy
b3ZpZGVzIGFjY2VzcyB0byB0aGUKLSAqIGZ1dGV4KCkgc3lzY2FsbCBvbiB0aGF0IHZhbHVlLiAg
SXQgaXMgdGVtcGxhdGVkIGluIHN1Y2ggYSB3YXkgdGhhdCBpdAotICogY2FuIGludGVyYWN0IHBy
b3Blcmx5IHdpdGggRGV0ZXJtaW5pc3RpY1NjaGVkdWxlIHRlc3RpbmcuCi0gKgotICogSWYgeW91
IGRvbid0IGtub3cgaG93IHRvIHVzZSBmdXRleCgpLCB5b3UgcHJvYmFibHkgc2hvdWxkbid0IGJl
IHVzaW5nCi0gKiB0aGlzIGNsYXNzLiAgRXZlbiBpZiB5b3UgZG8ga25vdyBob3csIHlvdSBzaG91
bGQgaGF2ZSBhIGdvb2QgcmVhc29uCi0gKiAoYW5kIGJlbmNobWFya3MgdG8gYmFjayB5b3UgdXAp
LgotICovCi10ZW1wbGF0ZSA8dGVtcGxhdGUgPHR5cGVuYW1lPiBjbGFzcyBBdG9tID0gc3RkOjph
dG9taWM+Ci1zdHJ1Y3QgRnV0ZXggOiBBdG9tPHVpbnQzMl90PiwgYm9vc3Q6Om5vbmNvcHlhYmxl
IHsKLQotICBleHBsaWNpdCBGdXRleCh1aW50MzJfdCBpbml0ID0gMCkgOiBBdG9tPHVpbnQzMl90
Pihpbml0KSB7fQotCi0gIC8qKiBQdXRzIHRoZSB0aHJlYWQgdG8gc2xlZXAgaWYgdGhpcy0+bG9h
ZCgpID09IGV4cGVjdGVkLiAgUmV0dXJucyB0cnVlIHdoZW4KLSAgICogIGl0IGlzIHJldHVybmlu
ZyBiZWNhdXNlIGl0IGhhcyBjb25zdW1lZCBhIHdha2UoKSBldmVudCwgZmFsc2UgZm9yIGFueQot
ICAgKiAgb3RoZXIgcmV0dXJuIChzaWduYWwsIHRoaXMtPmxvYWQoKSAhPSBleHBlY3RlZCwgb3Ig
c3B1cmlvdXMgd2FrZXVwKS4gKi8KLSAgYm9vbCBmdXRleFdhaXQodWludDMyX3QgZXhwZWN0ZWQs
IHVpbnQzMl90IHdhaXRNYXNrID0gLTEpIHsKLSAgICBhdXRvIHJ2ID0gZnV0ZXhXYWl0SW1wbChl
eHBlY3RlZCwgbnVsbHB0ciwgbnVsbHB0ciwgd2FpdE1hc2spOwotICAgIGFzc2VydChydiAhPSBG
dXRleFJlc3VsdDo6VElNRURPVVQpOwotICAgIHJldHVybiBydiA9PSBGdXRleFJlc3VsdDo6QVdP
S0VOOwotICB9Ci0KLSAgLyoqIFNpbWlsYXIgdG8gZnV0ZXhXYWl0IGJ1dCBhbHNvIGFjY2VwdHMg
YSB0aW1lb3V0IHRoYXQgZ2l2ZXMgdGhlIHRpbWUgdW50aWwKLSAgICogIHdoZW4gdGhlIGNhbGwg
Y2FuIGJsb2NrICh0aW1lIGlzIHRoZSBhYnNvbHV0ZSB0aW1lIGkuZSB0aW1lIHNpbmNlIGVwb2No
KS4KLSAgICogIEFsbG93ZWQgY2xvY2sgdHlwZXM6IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2ss
IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2suCi0gICAqICBSZXR1cm5zIG9uZSBvZiBGdXRleFJl
c3VsdCB2YWx1ZXMuCi0gICAqCi0gICAqICBOT1RFOiBPbiBzb21lIHN5c3RlbXMgc3RlYWR5X2Ns
b2NrIGlzIGp1c3QgYW4gYWxpYXMgZm9yIHN5c3RlbV9jbG9jaywKLSAgICogIGFuZCBpcyBub3Qg
YWN0dWFsbHkgc3RlYWR5LiovCi0gIHRlbXBsYXRlIDxjbGFzcyBDbG9jaywgY2xhc3MgRHVyYXRp
b24gPSB0eXBlbmFtZSBDbG9jazo6ZHVyYXRpb24+Ci0gIEZ1dGV4UmVzdWx0IGZ1dGV4V2FpdFVu
dGlsKAotICAgICAgICAgIHVpbnQzMl90IGV4cGVjdGVkLAotICAgICAgICAgIGNvbnN0IHN0ZDo6
Y2hyb25vOjp0aW1lX3BvaW50PENsb2NrLCBEdXJhdGlvbj4mIGFic1RpbWUsCi0gICAgICAgICAg
dWludDMyX3Qgd2FpdE1hc2sgPSAtMSkgewotICAgIHVzaW5nIHN0ZDo6Y2hyb25vOjpkdXJhdGlv
bl9jYXN0OwotICAgIHVzaW5nIHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kczsKLSAgICB1c2luZyBz
dGQ6OmNocm9ubzo6c2Vjb25kczsKLSAgICB1c2luZyBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2Nr
OwotICAgIHVzaW5nIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s7Ci0gICAgdXNpbmcgc3RkOjpj
aHJvbm86OnRpbWVfcG9pbnQ7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KAotICAgICAgICAoc3RkOjpp
c19zYW1lPENsb2NrLCBzeXN0ZW1fY2xvY2s+Ojp2YWx1ZSB8fAotICAgICAgICAgc3RkOjppc19z
YW1lPENsb2NrLCBzdGVhZHlfY2xvY2s+Ojp2YWx1ZSksCi0gICAgICAgICJmdXRleFdhaXRVbnRp
bCBvbmx5IGtub3dzIHN0ZDo6Y2hyb25vOjp7c3lzdGVtX2Nsb2NrLHN0ZWFkeV9jbG9ja30iKTsK
LSAgICBhc3NlcnQoKHN0ZDo6aXNfc2FtZTxDbG9jaywgc3lzdGVtX2Nsb2NrPjo6dmFsdWUpIHx8
IENsb2NrOjppc19zdGVhZHkpOwotCi0gICAgLy8gV2UgbGF1bmRlciB0aGUgY2xvY2sgdHlwZSB2
aWEgYSBzdGQ6OmNocm9ubzo6ZHVyYXRpb24gc28gdGhhdCB3ZQotICAgIC8vIGNhbiBjb21waWxl
IGJvdGggdGhlIHRydWUgYW5kIGZhbHNlIGJyYW5jaC4gIFRyaWNreSBjYXNlIGlzIHdoZW4KLSAg
ICAvLyBzdGVhZHlfY2xvY2sgaGFzIGEgaGlnaGVyIHByZWNpc2lvbiB0aGFuIHN5c3RlbV9jbG9j
ayAoWGNvZGUgNiwKLSAgICAvLyBmb3IgZXhhbXBsZSksIGZvciB3aGljaCB0aW1lX3BvaW50PHN5
c3RlbV9jbG9jaz4gY29uc3RydWN0aW9uCi0gICAgLy8gcmVmdXNlcyB0byBkbyBhbiBpbXBsaWNp
dCBkdXJhdGlvbiBjb252ZXJzaW9uLiAgKGR1cmF0aW9uIGlzCi0gICAgLy8gaGFwcHkgdG8gaW1w
bGljaXRseSBjb252ZXJ0IGl0cyBkZW5vbWluYXRvciBjYXVzaW5nIG92ZXJmbG93LCBidXQKLSAg
ICAvLyByZWZ1c2VzIGNvbnZlcnNpb24gdGhhdCBtaWdodCBjYXVzZSB0cnVuY2F0aW9uLikgIFdl
IHVzZSBleHBsaWNpdAotICAgIC8vIGR1cmF0aW9uX2Nhc3QgdG8gd29yayBhcm91bmQgdGhpcy4g
IFRydW5jYXRpb24gZG9lcyBub3QgYWN0dWFsbHkKLSAgICAvLyBvY2N1ciAodW5sZXNzIER1cmF0
aW9uICE9IENsb2NrOjpkdXJhdGlvbikgYmVjYXVzZSB0aGUgbWlzc2luZwotICAgIC8vIGltcGxp
Y2l0IGNvbnZlcnNpb24gaXMgaW4gdGhlIHVudGFrZW4gYnJhbmNoLgotICAgIER1cmF0aW9uIGFi
c1RpbWVEdXJhdGlvbiA9IGFic1RpbWUudGltZV9zaW5jZV9lcG9jaCgpOwotICAgIGlmIChzdGQ6
OmlzX3NhbWU8Q2xvY2ssIHN5c3RlbV9jbG9jaz46OnZhbHVlKSB7Ci0gICAgICB0aW1lX3BvaW50
PHN5c3RlbV9jbG9jaz4gYWJzU3lzdGVtVGltZSgKLSAgICAgICAgICBkdXJhdGlvbl9jYXN0PHN5
c3RlbV9jbG9jazo6ZHVyYXRpb24+KGFic1RpbWVEdXJhdGlvbikpOwotICAgICAgcmV0dXJuIGZ1
dGV4V2FpdEltcGwoZXhwZWN0ZWQsICZhYnNTeXN0ZW1UaW1lLCBudWxscHRyLCB3YWl0TWFzayk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRpbWVfcG9pbnQ8c3RlYWR5X2Nsb2NrPiBhYnNTdGVhZHlU
aW1lKAotICAgICAgICAgIGR1cmF0aW9uX2Nhc3Q8c3RlYWR5X2Nsb2NrOjpkdXJhdGlvbj4oYWJz
VGltZUR1cmF0aW9uKSk7Ci0gICAgICByZXR1cm4gZnV0ZXhXYWl0SW1wbChleHBlY3RlZCwgbnVs
bHB0ciwgJmFic1N0ZWFkeVRpbWUsIHdhaXRNYXNrKTsKLSAgICB9Ci0gIH0KLQotICAvKiogV2Fr
ZW5zIHVwIHRvIGNvdW50IHdhaXRlcnMgd2hlcmUgKHdhaXRNYXNrICYgd2FrZU1hc2spICE9Ci0g
ICAqICAwLCByZXR1cm5pbmcgdGhlIG51bWJlciBvZiBhd29rZW4gdGhyZWFkcywgb3IgLTEgaWYg
YW4gZXJyb3IKLSAgICogIG9jY3VycmVkLiAgTm90ZSB0aGF0IHdoZW4gY29uc3RydWN0aW5nIGEg
Y29uY3VycmVuY3kgcHJpbWl0aXZlCi0gICAqICB0aGF0IGNhbiBndWFyZCBpdHMgb3duIGRlc3Ry
dWN0aW9uLCBpdCBpcyBsaWtlbHkgdGhhdCB5b3Ugd2lsbAotICAgKiAgd2FudCB0byBpZ25vcmUg
RUlOVkFMIGhlcmUgKGFzIHdlbGwgYXMgbWFraW5nIHN1cmUgdGhhdCB5b3UKLSAgICogIG5ldmVy
IHRvdWNoIHRoZSBvYmplY3QgYWZ0ZXIgcGVyZm9ybWluZyB0aGUgbWVtb3J5IHN0b3JlIHRoYXQK
LSAgICogIGlzIHRoZSBsaW5lYXJpemF0aW9uIHBvaW50IGZvciB1bmxvY2sgb3IgY29udHJvbCBo
YW5kb2ZmKS4KLSAgICogIFNlZSBodHRwczovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3df
YnVnLmNnaT9pZD0xMzY5MCAqLwotICBpbnQgZnV0ZXhXYWtlKGludCBjb3VudCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCksCi0gICAgICAgICAgICAgICAgdWludDMyX3Qgd2FrZU1h
c2sgPSAtMSk7Ci0KLSBwcml2YXRlOgotCi0gIC8qKiBVbmRlcmx5aW5nIGltcGxlbWVudGF0aW9u
IG9mIGZ1dGV4V2FpdCBhbmQgZnV0ZXhXYWl0VW50aWwuCi0gICAqICBBdCBtb3N0IG9uZSBvZiBh
YnNTeXN0ZW1UaW1lIGFuZCBhYnNTdGVhZHlUaW1lIHNob3VsZCBiZSBub24tbnVsbC4KLSAgICog
IFRpbWVvdXRzIGFyZSBzZXBhcmF0ZWQgaW50byBzZXBhcmF0ZSBwYXJhbWV0ZXJzIHRvIGFsbG93
IHRoZQotICAgKiAgaW1wbGVtZW50YXRpb25zIHRvIGJlIGVsc2V3aGVyZSB3aXRob3V0IHRlbXBs
YXRpbmcgb24gdGhlIGNsb2NrCi0gICAqICB0eXBlLCB3aGljaCBpcyBvdGhlcndpc2UgY29tcGxp
Y2F0ZWQgYnkgdGhlIGZhY3QgdGhhdCBzdGVhZHlfY2xvY2sKLSAgICogIGlzIHRoZSBzYW1lIGFz
IHN5c3RlbV9jbG9jayBvbiBzb21lIHBsYXRmb3Jtcy4gKi8KLSAgRnV0ZXhSZXN1bHQgZnV0ZXhX
YWl0SW1wbCgKLSAgICAgIHVpbnQzMl90IGV4cGVjdGVkLAotICAgICAgc3RkOjpjaHJvbm86OnRp
bWVfcG9pbnQ8c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jaz4qIGFic1N5c3RlbVRpbWUsCi0gICAg
ICBzdGQ6OmNocm9ubzo6dGltZV9wb2ludDxzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrPiogYWJz
U3RlYWR5VGltZSwKLSAgICAgIHVpbnQzMl90IHdhaXRNYXNrKTsKLX07Ci0KLS8qKiBBIHN0ZDo6
YXRvbWljIHN1YmNsYXNzIHRoYXQgY2FuIGJlIHVzZWQgdG8gZm9yY2UgRnV0ZXggdG8gZW11bGF0
ZQotICogIHRoZSB1bmRlcmx5aW5nIGZ1dGV4KCkgc3lzY2FsbC4gIFRoaXMgaXMgcHJpbWFyaWx5
IHVzZWZ1bCB0byB0ZXN0IG9yCi0gKiAgYmVuY2htYXJrIHRoZSBlbXVsYXRlZCBpbXBsZW1lbnRh
dGlvbiBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3QgbmVlZCBpdC4gKi8KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotc3RydWN0IEVtdWxhdGVkRnV0ZXhBdG9taWMgOiBwdWJsaWMgc3RkOjphdG9taWM8VD4g
ewotICBFbXVsYXRlZEZ1dGV4QXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OwotICBjb25zdGV4
cHIgLyogaW1wbGljaXQgKi8gRW11bGF0ZWRGdXRleEF0b21pYyhUIGluaXQpIG5vZXhjZXB0Ci0g
ICAgICA6IHN0ZDo6YXRvbWljPFQ+KGluaXQpIHt9Ci0gIC8vIEl0IGRvZXNuJ3QgY29weSBvciBt
b3ZlCi0gIEVtdWxhdGVkRnV0ZXhBdG9taWMoRW11bGF0ZWRGdXRleEF0b21pYyYmIHJocykgPSBk
ZWxldGU7Ci19OwotCi0vKiBBdmFpbGFibGUgc3BlY2lhbGl6YXRpb25zLCB3aXRoIGRlZmluaXRp
b25zIGVsc2V3aGVyZSAqLwotCi10ZW1wbGF0ZTw+Ci1pbnQgRnV0ZXg8c3RkOjphdG9taWM+Ojpm
dXRleFdha2UoaW50IGNvdW50LCB1aW50MzJfdCB3YWtlTWFzayk7Ci0KLXRlbXBsYXRlPD4KLUZ1
dGV4UmVzdWx0IEZ1dGV4PHN0ZDo6YXRvbWljPjo6ZnV0ZXhXYWl0SW1wbCgKLSAgICAgIHVpbnQz
Ml90IGV4cGVjdGVkLAotICAgICAgc3RkOjpjaHJvbm86OnRpbWVfcG9pbnQ8c3RkOjpjaHJvbm86
OnN5c3RlbV9jbG9jaz4qIGFic1N5c3RlbVRpbWUsCi0gICAgICBzdGQ6OmNocm9ubzo6dGltZV9w
b2ludDxzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrPiogYWJzU3RlYWR5VGltZSwKLSAgICAgIHVp
bnQzMl90IHdhaXRNYXNrKTsKLQotdGVtcGxhdGU8PgotaW50IEZ1dGV4PEVtdWxhdGVkRnV0ZXhB
dG9taWM+OjpmdXRleFdha2UoaW50IGNvdW50LCB1aW50MzJfdCB3YWtlTWFzayk7Ci0KLXRlbXBs
YXRlPD4KLUZ1dGV4UmVzdWx0IEZ1dGV4PEVtdWxhdGVkRnV0ZXhBdG9taWM+OjpmdXRleFdhaXRJ
bXBsKAotICAgICAgdWludDMyX3QgZXhwZWN0ZWQsCi0gICAgICBzdGQ6OmNocm9ubzo6dGltZV9w
b2ludDxzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrPiogYWJzU3lzdGVtVGltZSwKLSAgICAgIHN0
ZDo6Y2hyb25vOjp0aW1lX3BvaW50PHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s+KiBhYnNTdGVh
ZHlUaW1lLAotICAgICAgdWludDMyX3Qgd2FpdE1hc2spOwotCi19fQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZGV0YWlsL01hbGxvY0ltcGwu
Y3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZGV0YWlsL01h
bGxvY0ltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGFhMTIwYTZlYjU4
ZTczNzZmOTUyZmE3M2M2NjJkNzQyMGQ1YWNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Zv
bGx5L2RldGFpbC9NYWxsb2NJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICog
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgot
ICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBV
bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
IHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
Ci0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8Zm9s
bHkvZGV0YWlsL01hbGxvY0ltcGwuaD4KLQotZXh0ZXJuICJDIiB7Ci0KLSNpZmRlZiBfTVNDX1ZF
UgotLy8gTVNWQyBkb2Vzbid0IGhhdmUgd2VhayBzeW1ib2xzLCBzbyBkbyBzb21lIGxpbmtlciBt
YWdpYwotLy8gdG8gZW11bGF0ZSB0aGVtLiAodGhlIG1hZ2ljIGlzIGluIHRoZSBoZWFkZXIpCi1j
b25zdCBjaGFyKiBtYWxsb2N4V2VhayA9IG51bGxwdHI7Ci1jb25zdCBjaGFyKiByYWxsb2N4V2Vh
ayA9IG51bGxwdHI7Ci1jb25zdCBjaGFyKiB4YWxsb2N4V2VhayA9IG51bGxwdHI7Ci1jb25zdCBj
aGFyKiBzYWxsb2N4V2VhayA9IG51bGxwdHI7Ci1jb25zdCBjaGFyKiBkYWxsb2N4V2VhayA9IG51
bGxwdHI7Ci1jb25zdCBjaGFyKiBzZGFsbG9jeFdlYWsgPSBudWxscHRyOwotY29uc3QgY2hhciog
bmFsbG9jeFdlYWsgPSBudWxscHRyOwotY29uc3QgY2hhciogbWFsbGN0bFdlYWsgPSBudWxscHRy
OwotY29uc3QgY2hhciogbWFsbGN0bG5hbWV0b21pYldlYWsgPSBudWxscHRyOwotY29uc3QgY2hh
ciogbWFsbGN0bGJ5bWliV2VhayA9IG51bGxwdHI7Ci0jZWxpZiAhRk9MTFlfSEFWRV9XRUFLX1NZ
TUJPTFMKLXZvaWQqICgqbWFsbG9jeCkoc2l6ZV90LCBpbnQpID0gbnVsbHB0cjsKLXZvaWQqICgq
cmFsbG9jeCkodm9pZCosIHNpemVfdCwgaW50KSA9IG51bGxwdHI7Ci1zaXplX3QgKCp4YWxsb2N4
KSh2b2lkKiwgc2l6ZV90LCBzaXplX3QsIGludCkgPSBudWxscHRyOwotc2l6ZV90ICgqc2FsbG9j
eCkoY29uc3Qgdm9pZCosIGludCkgPSBudWxscHRyOwotdm9pZCAoKmRhbGxvY3gpKHZvaWQqLCBp
bnQpID0gbnVsbHB0cjsKLXZvaWQgKCpzZGFsbG9jeCkodm9pZCosIHNpemVfdCwgaW50KSA9IG51
bGxwdHI7Ci1zaXplX3QgKCpuYWxsb2N4KShzaXplX3QsIGludCkgPSBudWxscHRyOwotaW50ICgq
bWFsbGN0bCkoY29uc3QgY2hhciosIHZvaWQqLCBzaXplX3QqLCB2b2lkKiwgc2l6ZV90KSA9IG51
bGxwdHI7Ci1pbnQgKCptYWxsY3RsbmFtZXRvbWliKShjb25zdCBjaGFyKiwgc2l6ZV90Kiwgc2l6
ZV90KikgPSBudWxscHRyOwotaW50ICgqbWFsbGN0bGJ5bWliKShjb25zdCBzaXplX3QqLCBzaXpl
X3QsIHZvaWQqLCBzaXplX3QqLCB2b2lkKiwgc2l6ZV90KSA9Ci0gICAgbnVsbHB0cjsKLSNlbmRp
ZgotCi19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9m
b2xseS9kZXRhaWwvTWFsbG9jSW1wbC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvZGV0YWlsL01hbGxvY0ltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzQzNThmMWNlMzlmYjM4MTE4NTIxZGNiYmEzODlhMWNkYmZkMTIwMC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9mb2xseS9kZXRhaWwvTWFsbG9jSW1wbC5oCisrKyAvZGV2L251bGwK
QEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0g
KgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
ICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
TlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlIDxmb2xs
eS9Qb3J0YWJpbGl0eS5oPgotCi1leHRlcm4gIkMiIHsKLQotI2lmIEZPTExZX0hBVkVfV0VBS19T
WU1CT0xTCi12b2lkKiBtYWxsb2N4KHNpemVfdCwgaW50KSBfX2F0dHJpYnV0ZV9fKChfX3dlYWtf
XykpOwotdm9pZCogcmFsbG9jeCh2b2lkKiwgc2l6ZV90LCBpbnQpIF9fYXR0cmlidXRlX18oKF9f
d2Vha19fKSk7Ci1zaXplX3QgeGFsbG9jeCh2b2lkKiwgc2l6ZV90LCBzaXplX3QsIGludCkgX19h
dHRyaWJ1dGVfXygoX193ZWFrX18pKTsKLXNpemVfdCBzYWxsb2N4KGNvbnN0IHZvaWQqLCBpbnQp
IF9fYXR0cmlidXRlX18oKF9fd2Vha19fKSk7Ci12b2lkIGRhbGxvY3godm9pZCosIGludCkgX19h
dHRyaWJ1dGVfXygoX193ZWFrX18pKTsKLXZvaWQgc2RhbGxvY3godm9pZCosIHNpemVfdCwgaW50
KSBfX2F0dHJpYnV0ZV9fKChfX3dlYWtfXykpOwotc2l6ZV90IG5hbGxvY3goc2l6ZV90LCBpbnQp
IF9fYXR0cmlidXRlX18oKF9fd2Vha19fKSk7Ci1pbnQgbWFsbGN0bChjb25zdCBjaGFyKiwgdm9p
ZCosIHNpemVfdCosIHZvaWQqLCBzaXplX3QpCi0gICAgICBfX2F0dHJpYnV0ZV9fKChfX3dlYWtf
XykpOwotaW50IG1hbGxjdGxuYW1ldG9taWIoY29uc3QgY2hhciosIHNpemVfdCosIHNpemVfdCop
IF9fYXR0cmlidXRlX18oKF9fd2Vha19fKSk7Ci1pbnQgbWFsbGN0bGJ5bWliKGNvbnN0IHNpemVf
dCosIHNpemVfdCwgdm9pZCosIHNpemVfdCosIHZvaWQqLCBzaXplX3QpCi0gICAgICBfX2F0dHJp
YnV0ZV9fKChfX3dlYWtfXykpOwotI2Vsc2UKLWV4dGVybiB2b2lkKiAoKm1hbGxvY3gpKHNpemVf
dCwgaW50KTsKLWV4dGVybiB2b2lkKiAoKnJhbGxvY3gpKHZvaWQqLCBzaXplX3QsIGludCk7Ci1l
eHRlcm4gc2l6ZV90ICgqeGFsbG9jeCkodm9pZCosIHNpemVfdCwgc2l6ZV90LCBpbnQpOwotZXh0
ZXJuIHNpemVfdCAoKnNhbGxvY3gpKGNvbnN0IHZvaWQqLCBpbnQpOwotZXh0ZXJuIHZvaWQgKCpk
YWxsb2N4KSh2b2lkKiwgaW50KTsKLWV4dGVybiB2b2lkICgqc2RhbGxvY3gpKHZvaWQqLCBzaXpl
X3QsIGludCk7Ci1leHRlcm4gc2l6ZV90ICgqbmFsbG9jeCkoc2l6ZV90LCBpbnQpOwotZXh0ZXJu
IGludCAoKm1hbGxjdGwpKGNvbnN0IGNoYXIqLCB2b2lkKiwgc2l6ZV90Kiwgdm9pZCosIHNpemVf
dCk7Ci1leHRlcm4gaW50ICgqbWFsbGN0bG5hbWV0b21pYikoY29uc3QgY2hhciosIHNpemVfdCos
IHNpemVfdCopOwotZXh0ZXJuIGludCAoKm1hbGxjdGxieW1pYikoY29uc3Qgc2l6ZV90Kiwgc2l6
ZV90LCB2b2lkKiwgc2l6ZV90Kiwgdm9pZCosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QpOwotI2lmZGVmIF9NU0NfVkVSCi0vLyBXZSBlbXVsYXRlIHdlYWsgbGlua2FnZSBmb3Ig
TVNWQy4gVGhlIHN5bWJvbHMgd2UncmUKLS8vIGFsaWFzaW5nIHRvIGFyZSBoaWRpbmcgaW4gTWFs
bG9jSW1wbC5jcHAKLSNwcmFnbWEgY29tbWVudChsaW5rZXIsICIvYWx0ZXJuYXRlbmFtZTptYWxs
b2N4PW1hbGxvY3hXZWFrIikKLSNwcmFnbWEgY29tbWVudChsaW5rZXIsICIvYWx0ZXJuYXRlbmFt
ZTpyYWxsb2N4PXJhbGxvY3hXZWFrIikKLSNwcmFnbWEgY29tbWVudChsaW5rZXIsICIvYWx0ZXJu
YXRlbmFtZTp4YWxsb2N4PXhhbGxvY3hXZWFrIikKLSNwcmFnbWEgY29tbWVudChsaW5rZXIsICIv
YWx0ZXJuYXRlbmFtZTpzYWxsb2N4PXNhbGxvY3hXZWFrIikKLSNwcmFnbWEgY29tbWVudChsaW5r
ZXIsICIvYWx0ZXJuYXRlbmFtZTpkYWxsb2N4PWRhbGxvY3hXZWFrIikKLSNwcmFnbWEgY29tbWVu
dChsaW5rZXIsICIvYWx0ZXJuYXRlbmFtZTpzZGFsbG9jeD1zZGFsbG9jeFdlYWsiKQotI3ByYWdt
YSBjb21tZW50KGxpbmtlciwgIi9hbHRlcm5hdGVuYW1lOm5hbGxvY3g9bmFsbG9jeFdlYWsiKQot
I3ByYWdtYSBjb21tZW50KGxpbmtlciwgIi9hbHRlcm5hdGVuYW1lOm1hbGxjdGw9bWFsbGN0bFdl
YWsiKQotI3ByYWdtYSBjb21tZW50KGxpbmtlciwgIi9hbHRlcm5hdGVuYW1lOm1hbGxjdGxuYW1l
dG9taWI9bWFsbGN0bG5hbWV0b21pYldlYWsiKQotI3ByYWdtYSBjb21tZW50KGxpbmtlciwgIi9h
bHRlcm5hdGVuYW1lOm1hbGxjdGxieW1pYj1tYWxsY3RsYnltaWJXZWFrIikKLSNlbmRpZgotI2Vu
ZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2ZvbGx5L2RldGFpbC9NZW1vcnlJZGxlci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZm9sbHkvZGV0YWlsL01lbW9yeUlkbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDhhMjkzMTNhMzYxYTQxZTZhNjcxZGNhZTY1YTViYWU0ZTMzMTg4ZDkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZGV0YWlsL01lbW9yeUlkbGVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJ
bmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu
MCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNl
cy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VU
IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPGNo
cm9ubz4KLQotI2luY2x1ZGUgPGZvbGx5L0F0b21pY1N0cnVjdC5oPgotI2luY2x1ZGUgPGZvbGx5
L0hhc2guaD4KLSNpbmNsdWRlIDxmb2xseS9UaHJlYWRJZC5oPgotI2luY2x1ZGUgPGZvbGx5L1Ry
YWl0cy5oPgotI2luY2x1ZGUgPGZvbGx5L2RldGFpbC9GdXRleC5oPgotCi1uYW1lc3BhY2UgZm9s
bHkgewotCi0vLyBnY2MgNC43IGRvZXNuJ3QgZG8gc3RkOjppc190cml2aWFsIGNvcnJlY3RseSwg
b3ZlcnJpZGUgc28gd2UgY2FuIHVzZQotLy8gQXRvbWljU3RydWN0PGR1cmF0aW9uPgotdGVtcGxh
dGU8Pgotc3RydWN0IElzVHJpdmlhbGx5Q29weWFibGU8c3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9j
azo6ZHVyYXRpb24+Ci0gIDogc3RkOjp0cnVlX3R5cGUge307Ci0KLX0KLQotbmFtZXNwYWNlIGZv
bGx5IHsgbmFtZXNwYWNlIGRldGFpbCB7Ci0KLS8vLyBNZW1vcnlJZGxlciBwcm92aWRlcyBoZWxw
ZXIgcm91dGluZXMgdGhhdCBhbGxvdyByb3V0aW5lcyB0byByZXR1cm4KLS8vLyBzb21lIGFzc2ln
bmVkIG1lbW9yeSByZXNvdXJjZXMgYmFjayB0byB0aGUgc3lzdGVtLiAgVGhlIGludGVuZGVkCi0v
Ly8gdXNlIGlzIHRoYXQgd2hlbiBhIHRocmVhZCBpcyB3YWl0aW5nIGZvciBhIGxvbmcgdGltZSAo
cGVyaGFwcyBpdAotLy8vIGlzIGluIGEgTElGTyB0aHJlYWQgcG9vbCBhbmQgaGFzbid0IGJlZW4g
bmVlZGVkIGZvciBhIGxvbmcgdGltZSkKLS8vLyBpdCBzaG91bGQgcmVsZWFzZSBpdHMgdGhyZWFk
LWxvY2FsIG1hbGxvYyBjYWNoZXMgKGJvdGggamVtYWxsb2MgYW5kCi0vLy8gdGNtYWxsb2MgdXNl
IHRoZXNlIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UpIGFuZCB1bm1hcCB0aGUgc3RhY2sgcGFnZXMK
LS8vLyB0aGF0IGNvbnRhaW4gbm8gdXNlZnVsIGRhdGEuCi1zdHJ1Y3QgTWVtb3J5SWRsZXIgewot
Ci0gIC8vLyBSZXR1cm5zIG1lbW9yeSBmcm9tIHRocmVhZC1sb2NhbCBhbGxvY2F0aW9uIHBvb2xz
IHRvIHRoZSBnbG9iYWwKLSAgLy8vIHBvb2wsIGlmIHdlIGtub3cgaG93IHRvIGZvciB0aGUgY3Vy
cmVudCBtYWxsb2MgaW1wbGVtZW50YXRpb24uCi0gIC8vLyBqZW1hbGxvYyBpcyBzdXBwb3J0ZWQu
Ci0gIHN0YXRpYyB2b2lkIGZsdXNoTG9jYWxNYWxsb2NDYWNoZXMoKTsKLQotCi0gIGVudW0gewot
ICAgIC8vLyBUaGlzIHZhbHVlIGlzIGEgdHJhZGVvZmYgYmV0d2VlbiByZWNsYWltaW5nIG1lbW9y
eSBhbmQgdHJpZ2dlcmluZwotICAgIC8vLyBhIHBhZ2UgZmF1bHQgaW1tZWRpYXRlbHkgb24gd2Fr
ZXVwLiAgTm90ZSB0aGF0IHRoZSBhY3R1YWwgdW5pdAotICAgIC8vLyBvZiBpZGxpbmcgZm9yIHRo
ZSBzdGFjayBpcyBwYWdlcywgc28gdGhlIGFjdHVhbCBzdGFjayB0aGF0Ci0gICAgLy8vIHdpbGwg
YmUgYXZhaWxhYmxlIG9uIHdha2V1cCB3aXRob3V0IGEgcGFnZSBmYXVsdCBpcyBiZXR3ZWVuCi0g
ICAgLy8vIGtEZWZhdWx0U3RhY2tUb1JldGFpbiBhbmQga0RlZmF1bHRTdGFja1RvUmV0YWluICsg
UGFnZVNpemUgLQotICAgIC8vLyAxIGJ5dGVzLgotICAgIGtEZWZhdWx0U3RhY2tUb1JldGFpbiA9
IDEwMjQsCi0gIH07Ci0KLSAgLy8vIFVzZXMgbWFkdmlzZSB0byBkaXNjYXJkIHRoZSBwb3J0aW9u
IG9mIHRoZSB0aHJlYWQncyBzdGFjayB0aGF0Ci0gIC8vLyBjdXJyZW50bHkgZG9lc24ndCBob2xk
IGFueSBkYXRhLCB0cnlpbmcgdG8gZW5zdXJlIHRoYXQgbm8gcGFnZQotICAvLy8gZmF1bHRzIHdp
bGwgb2NjdXIgZHVyaW5nIHRoZSBuZXh0IHJldGFpbiBieXRlcyBvZiBzdGFjayBhbGxvY2F0aW9u
Ci0gIHN0YXRpYyB2b2lkIHVubWFwVW51c2VkU3RhY2soc2l6ZV90IHJldGFpbiA9IGtEZWZhdWx0
U3RhY2tUb1JldGFpbik7Ci0KLSAgLy8vIFNlbGVjdHMgYSB0aW1lb3V0IHBzZXVkby1yYW5kb21s
eSBjaG9zZW4gdG8gYmUgYmV0d2VlbgotICAvLy8gaWRsZVRpbWVvdXQgYW5kIGlkbGVUaW1lb3V0
ICogKDEgKyB0aW1lb3V0VmFyaWF0aW9uRnJhY3Rpb24pLCB0bwotICAvLy8gc21vb3RoIG91dCB0
aGUgYmVoYXZpb3IgaW4gYSBidXJzdHkgc3lzdGVtCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBDbG9j
ayA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s+Ci0gIHN0YXRpYyB0eXBlbmFtZSBDbG9jazo6
ZHVyYXRpb24gZ2V0VmFyaWF0aW9uVGltZW91dCgKLSAgICAgIHR5cGVuYW1lIENsb2NrOjpkdXJh
dGlvbiBpZGxlVGltZW91dCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDUpLAotICAgICAgZmxvYXQg
dGltZW91dFZhcmlhdGlvbkZyYWMgPSAwLjUpIHsKLSAgICBpZiAoaWRsZVRpbWVvdXQuY291bnQo
KSA+IDAgJiYgdGltZW91dFZhcmlhdGlvbkZyYWMgPiAwKSB7Ci0gICAgICAvLyBoYXNoIHRoZSBw
dGhyZWFkX3QgYW5kIHRoZSB0aW1lIHRvIGdldCB0aGUgYWRqdXN0bWVudC4KLSAgICAgIC8vIFN0
YW5kYXJkIGhhc2ggZnVuYyBpc24ndCB2ZXJ5IGdvb2QsIHNvIGJpdCBtaXggdGhlIHJlc3VsdAot
ICAgICAgYXV0byBwciA9IHN0ZDo6bWFrZV9wYWlyKGdldEN1cnJlbnRUaHJlYWRJRCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsb2NrOjpub3coKS50aW1lX3NpbmNlX2Vwb2No
KCkuY291bnQoKSk7Ci0gICAgICBzdGQ6Omhhc2g8ZGVjbHR5cGUocHIpPiBoYXNoX2ZuOwotICAg
ICAgdWludDY0X3QgaCA9IGZvbGx5OjpoYXNoOjp0d2FuZ19taXg2NChoYXNoX2ZuKHByKSk7Ci0K
LSAgICAgIC8vIG11bHRpcGx5aW5nIHRoZSBkdXJhdGlvbiBieSBhIGZsb2F0aW5nIHBvaW50IGRv
ZXNuJ3Qgd29yaywgZ3JyLi4KLSAgICAgIGF1dG8gZXh0cmFGcmFjID0KLSAgICAgICAgdGltZW91
dFZhcmlhdGlvbkZyYWMgLyBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkgKiBo
OwotICAgICAgYXV0byB0aWNzID0gdWludDY0X3QoaWRsZVRpbWVvdXQuY291bnQoKSAqICgxICsg
ZXh0cmFGcmFjKSk7Ci0gICAgICBpZGxlVGltZW91dCA9IHR5cGVuYW1lIENsb2NrOjpkdXJhdGlv
bih0aWNzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaWRsZVRpbWVvdXQ7Ci0gIH0KLQotICAvLy8g
RXF1aXZhbGVudCB0byBmdXQuZnV0ZXhXYWl0KGV4cGVjdGVkLCB3YWl0TWFzayksIGJ1dCBjYWxs
cwotICAvLy8gZmx1c2hMb2NhbE1hbGxvY0NhY2hlcygpIGFuZCB1bm1hcFVudXNlZFN0YWNrKHN0
YWNrVG9SZXRhaW4pCi0gIC8vLyBhZnRlciBpZGxlVGltZW91dCBoYXMgcGFzc2VkIChpZiBpdCBo
YXMgcGFzc2VkKS4gIEludGVybmFsbHkgdXNlcwotICAvLy8gZnV0LmZ1dGV4V2FpdCBhbmQgZnV0
LmZ1dGV4V2FpdFVudGlsLiAgTGlrZSBmdXRleFdhaXQsIHJldHVybnMKLSAgLy8vIGZhbHNlIGlm
IGludGVycnVwdGVkIHdpdGggYSBzaWduYWwuICBUaGUgYWN0dWFsIHRpbWVvdXQgd2lsbCBiZQot
ICAvLy8gcHNldWRvLXJhbmRvbWx5IGNob3NlbiB0byBiZSBiZXR3ZWVuIGlkbGVUaW1lb3V0IGFu
ZCBpZGxlVGltZW91dCAqCi0gIC8vLyAoMSArIHRpbWVvdXRWYXJpYXRpb25GcmFjdGlvbiksIHRv
IHNtb290aCBvdXQgdGhlIGJlaGF2aW9yIGluIGEKLSAgLy8vIHN5c3RlbSB3aXRoIGJ1cnN0eSBy
ZXF1ZXN0cy4gIFRoZSBkZWZhdWx0IGlzIHRvIHdhaXQgdXAgdG8gNTAlCi0gIC8vLyBleHRyYSwg
c28gb24gYXZlcmFnZSAyNSUgZXh0cmEKLSAgdGVtcGxhdGUgPHRlbXBsYXRlIDx0eXBlbmFtZT4g
Y2xhc3MgQXRvbSwKLSAgICAgICAgICAgIHR5cGVuYW1lIENsb2NrID0gc3RkOjpjaHJvbm86OnN0
ZWFkeV9jbG9jaz4KLSAgc3RhdGljIGJvb2wgZnV0ZXhXYWl0KAotICAgICAgRnV0ZXg8QXRvbT4m
IGZ1dCwKLSAgICAgIHVpbnQzMl90IGV4cGVjdGVkLAotICAgICAgdWludDMyX3Qgd2FpdE1hc2sg
PSAtMSwKLSAgICAgIHR5cGVuYW1lIENsb2NrOjpkdXJhdGlvbiBpZGxlVGltZW91dCA9IHN0ZDo6
Y2hyb25vOjpzZWNvbmRzKDUpLAotICAgICAgc2l6ZV90IHN0YWNrVG9SZXRhaW4gPSBrRGVmYXVs
dFN0YWNrVG9SZXRhaW4sCi0gICAgICBmbG9hdCB0aW1lb3V0VmFyaWF0aW9uRnJhYyA9IDAuNSkg
ewotCi0gICAgaWYgKGlkbGVUaW1lb3V0ID09IENsb2NrOjpkdXJhdGlvbjo6bWF4KCkpIHsKLSAg
ICAgIC8vIG5vIG5lZWQgdG8gdXNlIGZ1dGV4V2FpdFVudGlsIGlmIG5vIHRpbWVvdXQgaXMgcG9z
c2libGUKLSAgICAgIHJldHVybiBmdXQuZnV0ZXhXYWl0KGV4cGVjdGVkLCB3YWl0TWFzayk7Ci0g
ICAgfQotCi0gICAgaWRsZVRpbWVvdXQgPSBnZXRWYXJpYXRpb25UaW1lb3V0KGlkbGVUaW1lb3V0
LCB0aW1lb3V0VmFyaWF0aW9uRnJhYyk7Ci0gICAgaWYgKGlkbGVUaW1lb3V0LmNvdW50KCkgPiAw
KSB7Ci0gICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBhdXRvIHJ2ID0gZnV0LmZ1dGV4V2Fp
dFVudGlsKAotICAgICAgICAgIGV4cGVjdGVkLCBDbG9jazo6bm93KCkgKyBpZGxlVGltZW91dCwg
d2FpdE1hc2spOwotICAgICAgICBpZiAocnYgPT0gRnV0ZXhSZXN1bHQ6OlRJTUVET1VUKSB7Ci0g
ICAgICAgICAgLy8gdGltZW91dCBpcyBvdmVyCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gZmluaXNoZWQgYmVmb3JlIHRpbWVvdXQgaGl0LCBubyBmbHVzaAotICAgICAg
ICBhc3NlcnQocnYgPT0gRnV0ZXhSZXN1bHQ6OlZBTFVFX0NIQU5HRUQgfHwgcnYgPT0gRnV0ZXhS
ZXN1bHQ6OkFXT0tFTiB8fAotICAgICAgICAgICAgICAgcnYgPT0gRnV0ZXhSZXN1bHQ6OklOVEVS
UlVQVEVEKTsKLSAgICAgICAgcmV0dXJuIHJ2ID09IEZ1dGV4UmVzdWx0OjpBV09LRU47Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gZmx1c2gsIHRoZW4gd2FpdCB3aXRoIG5vIHRpbWVvdXQKLSAg
ICAvL2ZsdXNoTG9jYWxNYWxsb2NDYWNoZXMoKTsKLSAgICAvL3VubWFwVW51c2VkU3RhY2soc3Rh
Y2tUb1JldGFpbik7Ci0gICAgcmV0dXJuIGZ1dC5mdXRleFdhaXQoZXhwZWN0ZWQsIHdhaXRNYXNr
KTsKLSAgfQotfTsKLQotfX0gLy8gbmFtZXNwYWNlIGZvbGx5OjpkZXRhaWwKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2RldGFpbC9SYW5nZUNv
bW1vbi5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZGV0YWls
L1JhbmdlQ29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNTMyNWViNzQx
ZjAxOTY2NTI1OTM2NWE1NDZmZmIzNzBjZjJlZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Zm9sbHkvZGV0YWlsL1JhbmdlQ29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAq
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoK
LSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICog
VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n
LCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBM
aWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu
ZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSA8
Z2xvZy9sb2dnaW5nLmg+Ci0KLSNpbmNsdWRlIDxmb2xseS9MaWtlbHkuaD4KLQotbmFtZXNwYWNl
IGZvbGx5IHsKLQotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLS8qKioKLSAqICBUaGUgcWZpbmRfZmly
c3RfYnl0ZV9vZl8qIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgaGVyZSwgYmVmb3JlIFJhbmdlLmgs
IHNvCi0gKiAgdGhleSBjYW5ub3QgdGFrZSBTdHJpbmdQaWVjZSB2YWx1ZXMuIEJ1dCB0aGV5J3Jl
IHRoZXJlIHRvIG9wZXJhdGUgb24KLSAqICBTdHJpbmdQaWVjZSB2YWx1ZXMuIERlcGVuZGVuY3kg
Y3ljbGVzOiBmdW4uCi0gKgotICogIFN0cmluZ1BpZWNlTGl0ZSBpcyBoZXJlIHRvIGJyZWFrIHRo
YXQgZGVwZW5kZW5jeSBjeWNsZS4KLSAqLwotY2xhc3MgU3RyaW5nUGllY2VMaXRlIHsKLSBwdWJs
aWM6Ci0gIFN0cmluZ1BpZWNlTGl0ZShjb25zdCBjaGFyKiBiLCBjb25zdCBjaGFyKiBlKSA6IGJf
KGIpLCBlXyhlKSB7fQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2U+Ci0gIC8qIGltcGxpY2l0
ICovIFN0cmluZ1BpZWNlTGl0ZShjb25zdCBSYW5nZSYgcikgOgotICAgICAgU3RyaW5nUGllY2VM
aXRlKHIuZGF0YSgpLCByLmRhdGEoKSArIHIuc2l6ZSgpKSB7fQotICBjb25zdCBjaGFyKiBkYXRh
KCkgY29uc3QgeyByZXR1cm4gYl87IH0KLSAgY29uc3QgY2hhciogYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBiXzsgfQotICBjb25zdCBjaGFyKiBlbmQoKSBjb25zdCB7IHJldHVybiBlXzsgfQotICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdChlXyAtIGJfKTsgfQotICBib29sIGVt
cHR5KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpID09IDA7IH0KLSAgY29uc3QgY2hhciYgb3BlcmF0
b3JbXShzaXplX3QgaSkgY29uc3QgeyBEQ0hFQ0tfR1Qoc2l6ZSgpLCBpKTsgcmV0dXJuIGJfW2ld
OyB9Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBSYW5nZT4KLSAgZXhwbGljaXQgb3BlcmF0b3IgUmFu
Z2UoKSBjb25zdCB7IHJldHVybiBSYW5nZShiZWdpbigpLCBlbmQoKSk7IH0KLSBwcml2YXRlOgot
ICBjb25zdCBjaGFyKiBiXzsKLSAgY29uc3QgY2hhciogZV87Ci19OwotCi1pbmxpbmUgc2l6ZV90
IHFmaW5kX2ZpcnN0X2J5dGVfb2Zfc3RkKGNvbnN0IFN0cmluZ1BpZWNlTGl0ZSBoYXlzdGFjaywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nUGllY2VM
aXRlIG5lZWRsZXMpIHsKLSAgYXV0byByZXQgPSBzdGQ6OmZpbmRfZmlyc3Rfb2YoaGF5c3RhY2su
YmVnaW4oKSwgaGF5c3RhY2suZW5kKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5lZWRsZXMuYmVnaW4oKSwgbmVlZGxlcy5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgW10oY2hhciBhLCBjaGFyIGIpIHsgcmV0dXJuIGEgPT0gYjsgfSk7Ci0gIHJldHVy
biByZXQgPT0gaGF5c3RhY2suZW5kKCkgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IHJldCAtIGhheXN0
YWNrLmJlZ2luKCk7Ci19Ci0KLQotc2l6ZV90IHFmaW5kX2ZpcnN0X2J5dGVfb2ZfYml0c2V0KGNv
bnN0IFN0cmluZ1BpZWNlTGl0ZSBoYXlzdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmdQaWVjZUxpdGUgbmVlZGxlcyk7Ci0KLXNpemVfdCBxZmluZF9m
aXJzdF9ieXRlX29mX2J5dGVzZXQoY29uc3QgU3RyaW5nUGllY2VMaXRlIGhheXN0YWNrLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmdQaWVjZUxpdGUgbmVl
ZGxlcyk7Ci0KLWlubGluZSBzaXplX3QgcWZpbmRfZmlyc3RfYnl0ZV9vZl9ub3NzZShjb25zdCBT
dHJpbmdQaWVjZUxpdGUgaGF5c3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nUGllY2VMaXRlIG5lZWRsZXMpIHsKLSAgaWYgKFVOTElLRUxZ
KG5lZWRsZXMuZW1wdHkoKSB8fCBoYXlzdGFjay5lbXB0eSgpKSkgewotICAgIHJldHVybiBzdGQ6
OnN0cmluZzo6bnBvczsKLSAgfQotICAvLyBUaGUgdGhyZXNob2xkcyBiZWxvdyB3ZXJlIGVtcGly
aWNhbGx5IGRldGVybWluZWQgYnkgYmVuY2htYXJraW5nLgotICAvLyBUaGlzIGlzIG5vdCBhbiBl
eGFjdCBzY2llbmNlIHNpbmNlIGl0IGRlcGVuZHMgb24gdGhlIENQVSwgdGhlIHNpemUgb2YKLSAg
Ly8gbmVlZGxlcywgYW5kIHRoZSBzaXplIG9mIGhheXN0YWNrLgotICBpZiAoKG5lZWRsZXMuc2l6
ZSgpID49IDQgJiYgaGF5c3RhY2suc2l6ZSgpIDw9IDEwKSB8fAotICAgICAgKG5lZWRsZXMuc2l6
ZSgpID49IDE2ICYmIGhheXN0YWNrLnNpemUoKSA8PSA2NCkgfHwKLSAgICAgIG5lZWRsZXMuc2l6
ZSgpID49IDMyKSB7Ci0gICAgcmV0dXJuIHFmaW5kX2ZpcnN0X2J5dGVfb2ZfYnl0ZXNldChoYXlz
dGFjaywgbmVlZGxlcyk7Ci0gIH0KLSAgcmV0dXJuIHFmaW5kX2ZpcnN0X2J5dGVfb2Zfc3RkKGhh
eXN0YWNrLCBuZWVkbGVzKTsKLX0KLQotfQotCi19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9kZXRhaWwvUmFuZ2VTc2U0Mi5oIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZGV0YWlsL1JhbmdlU3NlNDIuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI3NGNmZDNlZWU4YjFhYzFkNWM0ZWUyMjRh
MDdiMzc0MmQ3YTJhNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9kZXRhaWwvUmFu
Z2VTc2U0Mi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Y3N0
ZGRlZj4KLQotI2luY2x1ZGUgPGZvbGx5L2RldGFpbC9SYW5nZUNvbW1vbi5oPgotCi1uYW1lc3Bh
Y2UgZm9sbHkgewotCi1uYW1lc3BhY2UgZGV0YWlsIHsKLQotc2l6ZV90IHFmaW5kX2ZpcnN0X2J5
dGVfb2Zfc3NlNDIoY29uc3QgU3RyaW5nUGllY2VMaXRlIGhheXN0YWNrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nUGllY2VMaXRlIG5lZWRsZXMpOwotCi19
Ci0KLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Zv
bGx5L2RldGFpbC9TbGVlcGVyLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9mb2xseS9kZXRhaWwvU2xlZXBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
MDNkMDY1YmE3YjJhNWVjNTI1OWFiMTY2NjIyNjJkY2FmZmY4YWE4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2ZvbGx5L2RldGFpbC9TbGVlcGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNl
bnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2Ui
KTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0g
KgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3
cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlz
dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2Vl
IHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Np
b25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLS8qCi0gKiBAYXV0aG9yIEtlaXRoIEFkYW1zIDxrbWFAZmIuY29tPgotICogQGF1
dGhvciBKb3JkYW4gRGVMb25nIDxkZWxvbmcuakBmYi5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGNp
bnR0eXBlcz4KLQotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L0FzbS5oPgotI2luY2x1ZGUg
PGZvbGx5L3BvcnRhYmlsaXR5L1RpbWUuaD4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotCi1uYW1lc3BhY2UgZGV0YWlsIHsKLQotICAvKgotICAgKiBBIGhlbHBlciBvYmpl
Y3QgZm9yIHRoZSBjb250ZW5kZWQgY2FzZS4gU3RhcnRzIG9mZiB3aXRoIGVhZ2VyCi0gICAqIHNw
aW5uaW5nLCBhbmQgZmFsbHMgYmFjayB0byBzbGVlcGluZyBmb3Igc21hbGwgcXVhbnR1bXMuCi0g
ICAqLwotICBjbGFzcyBTbGVlcGVyIHsKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qga01heEFj
dGl2ZVNwaW4gPSA0MDAwOwotCi0gICAgdWludDMyX3Qgc3BpbkNvdW50OwotCi0gIHB1YmxpYzoK
LSAgICBTbGVlcGVyKCkgOiBzcGluQ291bnQoMCkge30KLQotICAgIHZvaWQgd2FpdCgpIHsKLSAg
ICAgIGlmIChzcGluQ291bnQgPCBrTWF4QWN0aXZlU3BpbikgewotICAgICAgICArK3NwaW5Db3Vu
dDsKLSAgICAgICAgYXNtX3ZvbGF0aWxlX3BhdXNlKCk7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICAvKgotICAgICAgICAgKiBBbHdheXMgc2xlZXAgMC41bXMsIGFzc3VtaW5nIHRoaXMgd2lsbCBt
YWtlIHRoZSBrZXJuZWwgcHV0Ci0gICAgICAgICAqIHVzIGRvd24gZm9yIHdoYXRldmVyIGl0cyBt
aW5pbXVtIHRpbWVyIHJlc29sdXRpb24gaXMgKGluCi0gICAgICAgICAqIGxpbnV4IHRoaXMgdmFy
aWVzIGJ5IGtlcm5lbCB2ZXJzaW9uIGZyb20gMW1zIHRvIDEwbXMpLgotICAgICAgICAgKi8KLSAg
ICAgICAgc3RydWN0IHRpbWVzcGVjIHRzID0geyAwLCA1MDAwMDAgfTsKLSAgICAgICAgbmFub3Ns
ZWVwKCZ0cywgbnVsbHB0cik7Ci0gICAgICB9Ci0gICAgfQotICB9OwotCi19Ci19CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9kZXRhaWwvU3Rh
dGljU2luZ2xldG9uTWFuYWdlci5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9mb2xseS9kZXRhaWwvU3RhdGljU2luZ2xldG9uTWFuYWdlci5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGE3NTczNGJhYmUyY2EyYTNkNWM1ZmMyMWEzNDAzMTBmN2U4NmI0
MTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZGV0YWlsL1N0YXRpY1NpbmdsZXRv
bk1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAq
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0jaW5jbHVkZSA8Zm9sbHkvZGV0YWlsL1N0YXRp
Y1NpbmdsZXRvbk1hbmFnZXIuaD4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLW5hbWVzcGFjZSBkZXRh
aWwgewotCi0vLyBUaGlzIGltcGxlbWVudGF0aW9uIHNob3VsZCBhbHdheXMgbGl2ZSBpbiAuY3Bw
IGZpbGUuCi1TdGF0aWNTaW5nbGV0b25NYW5hZ2VyJiBTdGF0aWNTaW5nbGV0b25NYW5hZ2VyOjpp
bnN0YW5jZSgpIHsKLSAgc3RhdGljIFN0YXRpY1NpbmdsZXRvbk1hbmFnZXIqIGluc3RhbmNlID0g
bmV3IFN0YXRpY1NpbmdsZXRvbk1hbmFnZXIoKTsKLSAgcmV0dXJuICppbnN0YW5jZTsKLX0KLX0K
LX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5
L2RldGFpbC9TdGF0aWNTaW5nbGV0b25NYW5hZ2VyLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9mb2xseS9kZXRhaWwvU3RhdGljU2luZ2xldG9uTWFuYWdlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjA4OGMxMmI3YTdiYzQ5NWNlMWUwOGFlZDU2NDVi
MGZlOTI3MzVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2RldGFpbC9TdGF0aWNT
aW5nbGV0b25NYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUg
QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K
LSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0
cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJl
cXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2Fy
ZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g
IkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZv
ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGlt
aXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlIDxjYXNzZXJ0PgotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHR5cGVpbmRleD4KLSNp
bmNsdWRlIDx1bm9yZGVyZWRfbWFwPgotCi1uYW1lc3BhY2UgZm9sbHkgewotbmFtZXNwYWNlIGRl
dGFpbCB7Ci0KLS8vIFRoaXMgaW50ZXJuYWwtdXNlLW9ubHkgY2xhc3MgaXMgdXNlZCB0byBjcmVh
dGUgYWxsIGxlYWtlZCBNZXllcnMgc2luZ2xldG9ucy4KLS8vIEl0IGd1YXJhbnRlZXMgdGhhdCBv
bmx5IG9uZSBpbnN0YW5jZSBvZiBldmVyeSBzdWNoIHNpbmdsZXRvbiB3aWxsIGV2ZXIgYmUKLS8v
IGNyZWF0ZWQsIGV2ZW4gd2hlbiByZXF1ZXN0ZWQgZnJvbSBkaWZmZXJlbnQgY29tcGlsYXRpb24g
dW5pdHMgbGlua2VkCi0vLyBkeW5hbWljYWxseS4KLWNsYXNzIFN0YXRpY1NpbmdsZXRvbk1hbmFn
ZXIgewotIHB1YmxpYzoKLSAgc3RhdGljIFN0YXRpY1NpbmdsZXRvbk1hbmFnZXImIGluc3RhbmNl
KCk7Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRhZywgdHlwZW5hbWUgRj4K
LSAgaW5saW5lIFQqIGNyZWF0ZShGJiYgY3JlYXRvcikgewotICAgIGF1dG8mIGVudHJ5ID0gWyZd
KCkgbXV0YWJsZSAtPiBFbnRyeTxUPiYgewotICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0
ZXg+IGxnKG11dGV4Xyk7Ci0KLSAgICAgIGF1dG8mIGlkID0gdHlwZWlkKFR5cGVQYWlyPFQsIFRh
Zz4pOwotICAgICAgYXV0byYgZW50cnlQdHIgPSBtYXBfW2lkXTsKLSAgICAgIGlmICghZW50cnlQ
dHIpIHsKLSAgICAgICAgZW50cnlQdHIgPSBuZXcgRW50cnk8VD4oKTsKLSAgICAgIH0KLSAgICAg
IGFzc2VydChkeW5hbWljX2Nhc3Q8RW50cnk8VD4qPihlbnRyeVB0cikgIT0gbnVsbHB0cik7Ci0g
ICAgICByZXR1cm4gKnN0YXRpY19jYXN0PEVudHJ5PFQ+Kj4oZW50cnlQdHIpOwotICAgIH0oKTsK
LQotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsZyhlbnRyeS5tdXRleCk7Ci0KLSAg
ICBpZiAoIWVudHJ5LnB0cikgewotICAgICAgZW50cnkucHRyID0gY3JlYXRvcigpOwotICAgIH0K
LSAgICByZXR1cm4gZW50cnkucHRyOwotICB9Ci0KLSBwcml2YXRlOgotICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQSwgdHlwZW5hbWUgQj4KLSAgY2xhc3MgVHlwZVBhaXIge307Ci0KLSAgU3RhdGljU2lu
Z2xldG9uTWFuYWdlcigpIHt9Ci0KLSAgc3RydWN0IEVudHJ5SWYgewotICAgIHZpcnR1YWwgfkVu
dHJ5SWYoKSB7fQotICB9OwotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBzdHJ1Y3QgRW50
cnkgOiBwdWJsaWMgRW50cnlJZiB7Ci0gICAgVCogcHRye251bGxwdHJ9OwotICAgIHN0ZDo6bXV0
ZXggbXV0ZXg7Ci0gIH07Ci0KLSAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6dHlwZV9pbmRleCwg
RW50cnlJZio+IG1hcF87Ci0gIHN0ZDo6bXV0ZXggbXV0ZXhfOwotfTsKLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFRhZywgdHlwZW5hbWUgRj4KLWlubGluZSBUKiBjcmVhdGVHbG9i
YWwoRiYmIGNyZWF0b3IpIHsKLSAgcmV0dXJuIFN0YXRpY1NpbmdsZXRvbk1hbmFnZXI6Omluc3Rh
bmNlKCkuY3JlYXRlPFQsIFRhZz4oCi0gICAgICBzdGQ6OmZvcndhcmQ8Rj4oY3JlYXRvcikpOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVGFnPgotaW5saW5lIFQqIGNyZWF0
ZUdsb2JhbCgpIHsKLSAgcmV0dXJuIGNyZWF0ZUdsb2JhbDxULCBUYWc+KFtdKCkgeyByZXR1cm4g
bmV3IFQoKTsgfSk7Ci19Ci19Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9mb2xseS9kZXRhaWwvVGhyZWFkTG9jYWxEZXRhaWwuY3BwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZGV0YWlsL1RocmVhZExvY2FsRGV0
YWlsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMwMzY0NjE4Y2I3YzM5YmU3
ZGE3M2UxYjgwZWNlNmFmNjM1NzlkZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9k
ZXRhaWwvVGhyZWFkTG9jYWxEZXRhaWwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzI1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2Vk
IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwot
ICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo
ZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0g
KgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0g
KiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotI2luY2x1ZGUgPGZv
bGx5L2RldGFpbC9UaHJlYWRMb2NhbERldGFpbC5oPgotCi0jaW5jbHVkZSA8bGlzdD4KLSNpbmNs
dWRlIDxtdXRleD4KLQotbmFtZXNwYWNlIGZvbGx5IHsgbmFtZXNwYWNlIHRocmVhZGxvY2FsX2Rl
dGFpbCB7Ci0KLVN0YXRpY01ldGFCYXNlOjpTdGF0aWNNZXRhQmFzZShUaHJlYWRFbnRyeSogKCp0
aHJlYWRFbnRyeSkoKSwgYm9vbCBzdHJpY3QpCi0gICAgOiBuZXh0SWRfKDEpLCB0aHJlYWRFbnRy
eV8odGhyZWFkRW50cnkpLCBzdHJpY3RfKHN0cmljdCkgewotICBoZWFkXy5uZXh0ID0gaGVhZF8u
cHJldiA9ICZoZWFkXzsKLSAgaW50IHJldCA9IHB0aHJlYWRfa2V5X2NyZWF0ZSgmcHRocmVhZEtl
eV8sICZvblRocmVhZEV4aXQpOwotICBjaGVja1Bvc2l4RXJyb3IocmV0LCAicHRocmVhZF9rZXlf
Y3JlYXRlIGZhaWxlZCIpOwotICBQdGhyZWFkS2V5VW5yZWdpc3Rlcjo6cmVnaXN0ZXJLZXkocHRo
cmVhZEtleV8pOwotfQotCi12b2lkIFN0YXRpY01ldGFCYXNlOjpvblRocmVhZEV4aXQodm9pZCog
cHRyKSB7Ci0jaWZkZWYgRk9MTFlfVExEX1VTRV9GT0xMWV9UTFMKLSAgYXV0byB0aHJlYWRFbnRy
eSA9IHN0YXRpY19jYXN0PFRocmVhZEVudHJ5Kj4ocHRyKTsKLSNlbHNlCi0gIHN0ZDo6dW5pcXVl
X3B0cjxUaHJlYWRFbnRyeT4gdGhyZWFkRW50cnkoc3RhdGljX2Nhc3Q8VGhyZWFkRW50cnkqPihw
dHIpKTsKLSNlbmRpZgotICBEQ0hFQ0tfR1QodGhyZWFkRW50cnktPmVsZW1lbnRzQ2FwYWNpdHks
IDB1KTsKLSAgYXV0byYgbWV0YSA9ICp0aHJlYWRFbnRyeS0+bWV0YTsKLQotICAvLyBNYWtlIHN1
cmUgdGhpcyBUaHJlYWRFbnRyeSBpcyBhdmFpbGFibGUgaWYgVGhyZWFkTG9jYWwgQSBpcyBhY2Nl
c3NlZCBpbgotICAvLyBUaHJlYWRMb2NhbCBCIGRlc3RydWN0b3IuCi0gIHB0aHJlYWRfc2V0c3Bl
Y2lmaWMobWV0YS5wdGhyZWFkS2V5XywgJigqdGhyZWFkRW50cnkpKTsKLSAgU0NPUEVfRVhJVCB7
Ci0gICAgcHRocmVhZF9zZXRzcGVjaWZpYyhtZXRhLnB0aHJlYWRLZXlfLCBudWxscHRyKTsKLSAg
fTsKLQotICB7Ci0gICAgU2hhcmVkTXV0ZXg6OlJlYWRIb2xkZXIgcmxvY2sobnVsbHB0cik7Ci0g
ICAgaWYgKG1ldGEuc3RyaWN0XykgewotICAgICAgcmxvY2sgPSBTaGFyZWRNdXRleDo6UmVhZEhv
bGRlcihtZXRhLmFjY2Vzc0FsbFRocmVhZHNMb2NrXyk7Ci0gICAgfQotICAgIHsKLSAgICAgIHN0
ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBnKG1ldGEubG9ja18pOwotICAgICAgbWV0YS5lcmFz
ZSgmKCp0aHJlYWRFbnRyeSkpOwotICAgICAgLy8gTm8gbmVlZCB0byBob2xkIHRoZSBsb2NrIGFu
eSBsb25nZXI7IHRoZSBUaHJlYWRFbnRyeSBpcyBwcml2YXRlIHRvIHRoaXMKLSAgICAgIC8vIHRo
cmVhZCBub3cgdGhhdCBpdCdzIGJlZW4gcmVtb3ZlZCBmcm9tIG1ldGEuCi0gICAgfQotICAgIC8v
IE5PVEU6IFVzZXItcHJvdmlkZWQgZGVsZXRlciAvIG9iamVjdCBkdG9yIGl0c2VsZiBtYXkgYmUg
dXNpbmcgVGhyZWFkTG9jYWwKLSAgICAvLyB3aXRoIHRoZSBzYW1lIFRhZywgc28gZGlzcG9zZSgp
IGNhbGxzIGJlbG93IG1heSAocmUpY3JlYXRlIHNvbWUgb2YgdGhlCi0gICAgLy8gZWxlbWVudHMg
b3IgZXZlbiBpbmNyZWFzZSBlbGVtZW50c0NhcGFjaXR5LCB0aHVzIG11bHRpcGxlIGNsZWFudXAg
cm91bmRzCi0gICAgLy8gbWF5IGJlIHJlcXVpcmVkLgotICAgIGZvciAoYm9vbCBzaG91bGRSdW4g
PSB0cnVlOyBzaG91bGRSdW47KSB7Ci0gICAgICBzaG91bGRSdW4gPSBmYWxzZTsKLSAgICAgIEZP
Ul9FQUNIX1JBTkdFIChpLCAwLCB0aHJlYWRFbnRyeS0+ZWxlbWVudHNDYXBhY2l0eSkgewotICAg
ICAgICBpZiAodGhyZWFkRW50cnktPmVsZW1lbnRzW2ldLmRpc3Bvc2UoVExQRGVzdHJ1Y3Rpb25N
b2RlOjpUSElTX1RIUkVBRCkpIHsKLSAgICAgICAgICBzaG91bGRSdW4gPSB0cnVlOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGZyZWUodGhyZWFkRW50cnktPmVsZW1lbnRzKTsK
LSAgdGhyZWFkRW50cnktPmVsZW1lbnRzID0gbnVsbHB0cjsKLSAgdGhyZWFkRW50cnktPm1ldGEg
PSBudWxscHRyOwotfQotCi11aW50MzJfdCBTdGF0aWNNZXRhQmFzZTo6YWxsb2NhdGUoRW50cnlJ
RCogZW50KSB7Ci0gIHVpbnQzMl90IGlkOwotICBhdXRvJiBtZXRhID0gKnRoaXM7Ci0gIHN0ZDo6
bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBnKG1ldGEubG9ja18pOwotCi0gIGlkID0gZW50LT52YWx1
ZS5sb2FkKCk7Ci0gIGlmIChpZCAhPSBrRW50cnlJREludmFsaWQpIHsKLSAgICByZXR1cm4gaWQ7
Ci0gIH0KLQotICBpZiAoIW1ldGEuZnJlZUlkc18uZW1wdHkoKSkgewotICAgIGlkID0gbWV0YS5m
cmVlSWRzXy5iYWNrKCk7Ci0gICAgbWV0YS5mcmVlSWRzXy5wb3BfYmFjaygpOwotICB9IGVsc2Ug
ewotICAgIGlkID0gbWV0YS5uZXh0SWRfKys7Ci0gIH0KLQotICB1aW50MzJfdCBvbGRfaWQgPSBl
bnQtPnZhbHVlLmV4Y2hhbmdlKGlkKTsKLSAgRENIRUNLX0VRKG9sZF9pZCwga0VudHJ5SURJbnZh
bGlkKTsKLSAgcmV0dXJuIGlkOwotfQotCi12b2lkIFN0YXRpY01ldGFCYXNlOjpkZXN0cm95KEVu
dHJ5SUQqIGVudCkgewotICB0cnkgewotICAgIGF1dG8mIG1ldGEgPSAqdGhpczsKLQotICAgIC8v
IEVsZW1lbnRzIGluIG90aGVyIHRocmVhZHMgdGhhdCB1c2UgdGhpcyBpZC4KLSAgICBzdGQ6OnZl
Y3RvcjxFbGVtZW50V3JhcHBlcj4gZWxlbWVudHM7Ci0KLSAgICB7Ci0gICAgICBTaGFyZWRNdXRl
eDo6V3JpdGVIb2xkZXIgd2xvY2sobnVsbHB0cik7Ci0gICAgICBpZiAobWV0YS5zdHJpY3RfKSB7
Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEluIHN0cmljdCBtb2RlLCB0aGUgbG9naWMgZ3VhcmFu
dGVlcyBwZXItdGhyZWFkIGluc3RhbmNlcyBhcmUKLSAgICAgICAgICogZGVzdHJveWVkIGJ5IHRo
ZSBtb21lbnQgVGhyZWFkTG9jYWw8PiBkdG9yIHJldHVybnMuCi0gICAgICAgICAqIEluIG9yZGVy
IHRvIGFjaGlldmUgdGhhdCwgd2Ugc2hvdWxkIHdhaXQgdW50aWwgY29uY3VycmVudAotICAgICAg
ICAgKiBvblRocmVhZEV4aXQoKSBjYWxscyAodGhhdCBtaWdodCBhY3F1aXJlIG93bmVyc2hpcCBv
dmVyIHBlci10aHJlYWQKLSAgICAgICAgICogaW5zdGFuY2VzIGluIG9yZGVyIHRvIGRlc3Ryb3kg
dGhlbSkgYXJlIGZpbmlzaGVkLgotICAgICAgICAgKi8KLSAgICAgICAgd2xvY2sgPSBTaGFyZWRN
dXRleDo6V3JpdGVIb2xkZXIobWV0YS5hY2Nlc3NBbGxUaHJlYWRzTG9ja18pOwotICAgICAgfQot
Ci0gICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBnKG1ldGEubG9j
a18pOwotICAgICAgICB1aW50MzJfdCBpZCA9IGVudC0+dmFsdWUuZXhjaGFuZ2Uoa0VudHJ5SURJ
bnZhbGlkKTsKLSAgICAgICAgaWYgKGlkID09IGtFbnRyeUlESW52YWxpZCkgewotICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoVGhyZWFkRW50cnkqIGUgPSBtZXRh
LmhlYWRfLm5leHQ7IGUgIT0gJm1ldGEuaGVhZF87IGUgPSBlLT5uZXh0KSB7Ci0gICAgICAgICAg
aWYgKGlkIDwgZS0+ZWxlbWVudHNDYXBhY2l0eSAmJiBlLT5lbGVtZW50c1tpZF0ucHRyKSB7Ci0g
ICAgICAgICAgICBlbGVtZW50cy5wdXNoX2JhY2soZS0+ZWxlbWVudHNbaWRdKTsKLQotICAgICAg
ICAgICAgLyoKLSAgICAgICAgICAgICAqIFdyaXRpbmcgYW5vdGhlciB0aHJlYWQncyBUaHJlYWRF
bnRyeSBmcm9tIGhlcmUgaXMgZmluZTsKLSAgICAgICAgICAgICAqIHRoZSBvbmx5IG90aGVyIHBv
dGVudGlhbCByZWFkZXIgaXMgdGhlIG93bmluZyB0aHJlYWQgLS0KLSAgICAgICAgICAgICAqIGZy
b20gb25UaHJlYWRFeGl0ICh3aGljaCBncmFicyB0aGUgbG9jaywgc28gaXMgcHJvcGVybHkKLSAg
ICAgICAgICAgICAqIHN5bmNocm9uaXplZCB3aXRoIHVzKSBvciBmcm9tIGdldCgpLCB3aGljaCBh
bHNvIGdyYWJzCi0gICAgICAgICAgICAgKiB0aGUgbG9jayBpZiBpdCBuZWVkcyB0byByZXNpemUg
dGhlIGVsZW1lbnRzIHZlY3Rvci4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBXZSBj
YW4ndCBjb25mbGljdCB3aXRoIHJlYWRzIGZvciBhIGdldChpZCksIGJlY2F1c2UKLSAgICAgICAg
ICAgICAqIGl0J3MgaWxsZWdhbCB0byBjYWxsIGdldCBvbiBhIHRocmVhZCBsb2NhbCB0aGF0J3MK
LSAgICAgICAgICAgICAqIGRlc3RydWN0aW5nLgotICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBlLT5lbGVtZW50c1tpZF0ucHRyID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGUtPmVsZW1lbnRz
W2lkXS5kZWxldGVyMSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBlLT5lbGVtZW50c1tpZF0ub3du
c0RlbGV0ZXIgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbWV0YS5m
cmVlSWRzXy5wdXNoX2JhY2soaWQpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBEZWxldGUgZWxl
bWVudHMgb3V0c2lkZSB0aGUgbG9ja3MuCi0gICAgZm9yIChFbGVtZW50V3JhcHBlciYgZWxlbSA6
IGVsZW1lbnRzKSB7Ci0gICAgICBlbGVtLmRpc3Bvc2UoVExQRGVzdHJ1Y3Rpb25Nb2RlOjpBTExf
VEhSRUFEUyk7Ci0gICAgfQotICB9IGNhdGNoICguLi4pIHsgLy8gSnVzdCBpbiBjYXNlIHdlIGdl
dCBhIGxvY2sgZXJyb3Igb3Igc29tZXRoaW5nIGFueXdheS4uLgotICAgIExPRyhXQVJOSU5HKSA8
PCAiRGVzdHJ1Y3RvciBkaXNjYXJkaW5nIGFuIGV4Y2VwdGlvbiB0aGF0IHdhcyB0aHJvd24uIjsK
LSAgfQotfQotCi0vKioKLSAqIFJlc2VydmUgZW5vdWdoIHNwYWNlIGluIHRoZSBUaHJlYWRFbnRy
eTo6ZWxlbWVudHMgZm9yIHRoZSBpdGVtCi0gKiBAaWQgdG8gZml0IGluLgotICovCi12b2lkIFN0
YXRpY01ldGFCYXNlOjpyZXNlcnZlKEVudHJ5SUQqIGlkKSB7Ci0gIGF1dG8mIG1ldGEgPSAqdGhp
czsKLSAgVGhyZWFkRW50cnkqIHRocmVhZEVudHJ5ID0gKCp0aHJlYWRFbnRyeV8pKCk7Ci0gIHNp
emVfdCBwcmV2Q2FwYWNpdHkgPSB0aHJlYWRFbnRyeS0+ZWxlbWVudHNDYXBhY2l0eTsKLQotICB1
aW50MzJfdCBpZHZhbCA9IGlkLT5nZXRPckFsbG9jYXRlKG1ldGEpOwotICBpZiAocHJldkNhcGFj
aXR5ID4gaWR2YWwpIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgLy8gR3Jvd3RoIGZhY3RvciA8IDIs
IHNlZSBmb2xseS9kb2NzL0ZCVmVjdG9yLm1kOyArIDUgdG8gcHJldmVudAotICAvLyB2ZXJ5IHNs
b3cgc3RhcnQuCi0gIHNpemVfdCBuZXdDYXBhY2l0eSA9IHN0YXRpY19jYXN0PHNpemVfdD4oKGlk
dmFsICsgNSkgKiAxLjcpOwotICBhc3NlcnQobmV3Q2FwYWNpdHkgPiBwcmV2Q2FwYWNpdHkpOwot
ICBFbGVtZW50V3JhcHBlciogcmVhbGxvY2F0ZWQgPSBudWxscHRyOwotCi0gIC8vIE5lZWQgdG8g
Z3Jvdy4gTm90ZSB0aGF0IHdlIGNhbid0IGNhbGwgcmVhbGxvYywgYXMgZWxlbWVudHMgaXMKLSAg
Ly8gc3RpbGwgbGlua2VkIGluIG1ldGEsIHNvIGFub3RoZXIgdGhyZWFkIG1pZ2h0IGFjY2VzcyBp
bnZhbGlkIG1lbW9yeQotICAvLyBhZnRlciByZWFsbG9jIHN1Y2NlZWRzLiBXZSdsbCBjb3B5IGJ5
IGhhbmQgYW5kIHVwZGF0ZSBvdXIgVGhyZWFkRW50cnkKLSAgLy8gdW5kZXIgdGhlIGxvY2suCi0g
IGlmICh1c2luZ0pFTWFsbG9jKCkpIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBz
aXplX3QgbmV3Qnl0ZVNpemUgPSBuYWxsb2N4KG5ld0NhcGFjaXR5ICogc2l6ZW9mKEVsZW1lbnRX
cmFwcGVyKSwgMCk7Ci0KLSAgICAvLyBUcnkgdG8gZ3JvdyBpbiBwbGFjZS4KLSAgICAvLwotICAg
IC8vIE5vdGUgdGhhdCB4YWxsb2N4KE1BTExPQ1hfWkVSTykgd2lsbCBvbmx5IHplcm8gbmV3bHkg
YWxsb2NhdGVkIG1lbW9yeSwKLSAgICAvLyBldmVuIGlmIGEgcHJldmlvdXMgYWxsb2NhdGlvbiBh
bGxvY2F0ZWQgbW9yZSB0aGFuIHdlIHJlcXVlc3RlZC4KLSAgICAvLyBUaGlzIGlzIGZpbmU7IHdl
IGFsd2F5cyB1c2UgTUFMTE9DWF9aRVJPIHdpdGggamVtYWxsb2MgYW5kIHdlCi0gICAgLy8gYWx3
YXlzIGV4cGFuZCBvdXIgYWxsb2NhdGlvbiB0byB0aGUgcmVhbCBzaXplLgotICAgIGlmIChwcmV2
Q2FwYWNpdHkgKiBzaXplb2YoRWxlbWVudFdyYXBwZXIpID49IGplbWFsbG9jTWluSW5QbGFjZUV4
cGFuZGFibGUpIHsKLSAgICAgIHN1Y2Nlc3MgPQotICAgICAgICAgICh4YWxsb2N4KHRocmVhZEVu
dHJ5LT5lbGVtZW50cywgbmV3Qnl0ZVNpemUsIDAsIE1BTExPQ1hfWkVSTykgPT0KLSAgICAgICAg
ICAgbmV3Qnl0ZVNpemUpOwotICAgIH0KLQotICAgIC8vIEluLXBsYWNlIGdyb3d0aCBmYWlsZWQu
Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICBzdWNjZXNzID0KLSAgICAgICAgICAoKHJlYWxs
b2NhdGVkID0gc3RhdGljX2Nhc3Q8RWxlbWVudFdyYXBwZXIqPigKLSAgICAgICAgICAgICAgICBt
YWxsb2N4KG5ld0J5dGVTaXplLCBNQUxMT0NYX1pFUk8pKSkgIT0gbnVsbHB0cik7Ci0gICAgfQot
Ci0gICAgaWYgKHN1Y2Nlc3MpIHsKLSAgICAgIC8vIEV4cGFuZCB0byByZWFsIHNpemUKLSAgICAg
IGFzc2VydChuZXdCeXRlU2l6ZSAvIHNpemVvZihFbGVtZW50V3JhcHBlcikgPj0gbmV3Q2FwYWNp
dHkpOwotICAgICAgbmV3Q2FwYWNpdHkgPSBuZXdCeXRlU2l6ZSAvIHNpemVvZihFbGVtZW50V3Jh
cHBlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRocm93IHN0ZDo6YmFkX2FsbG9jKCk7Ci0gICAg
fQotICB9IGVsc2UgeyAvLyBubyBqZW1hbGxvYwotICAgIC8vIGNhbGxvYygpIGlzIHNpbXBsZXIg
dGhhbiBtYWxsb2MoKSBmb2xsb3dlZCBieSBtZW1zZXQoKSwgYW5kCi0gICAgLy8gcG90ZW50aWFs
bHkgZmFzdGVyIHdoZW4gZGVhbGluZyB3aXRoIGEgbG90IG9mIG1lbW9yeSwgYXMgaXQgY2FuIGdl
dAotICAgIC8vIGFscmVhZHktemVyb2VkIHBhZ2VzIGZyb20gdGhlIGtlcm5lbC4KLSAgICByZWFs
bG9jYXRlZCA9IHN0YXRpY19jYXN0PEVsZW1lbnRXcmFwcGVyKj4oCi0gICAgICAgIGNhbGxvYyhu
ZXdDYXBhY2l0eSwgc2l6ZW9mKEVsZW1lbnRXcmFwcGVyKSkpOwotICAgIGlmICghcmVhbGxvY2F0
ZWQpIHsKLSAgICAgIHRocm93IHN0ZDo6YmFkX2FsbG9jKCk7Ci0gICAgfQotICB9Ci0KLSAgLy8g
U3VjY2VzcywgdXBkYXRlIHRoZSBlbnRyeQotICB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6
bXV0ZXg+IGcobWV0YS5sb2NrXyk7Ci0KLSAgICBpZiAocHJldkNhcGFjaXR5ID09IDApIHsKLSAg
ICAgIG1ldGEucHVzaF9iYWNrKHRocmVhZEVudHJ5KTsKLSAgICB9Ci0KLSAgICBpZiAocmVhbGxv
Y2F0ZWQpIHsKLSAgICAgIC8qCi0gICAgICAgKiBOb3RlOiB3ZSBuZWVkIHRvIGhvbGQgdGhlIG1l
dGEgbG9jayB3aGVuIGNvcHlpbmcgZGF0YSBvdXQgb2YKLSAgICAgICAqIHRoZSBvbGQgdmVjdG9y
LCBiZWNhdXNlIHNvbWUgb3RoZXIgdGhyZWFkIG1pZ2h0IGJlCi0gICAgICAgKiBkZXN0cnVjdGlu
ZyBhIFRocmVhZExvY2FsIGFuZCB3cml0aW5nIHRvIHRoZSBlbGVtZW50cyB2ZWN0b3IKLSAgICAg
ICAqIG9mIHRoaXMgdGhyZWFkLgotICAgICAgICovCi0gICAgICBpZiAocHJldkNhcGFjaXR5ICE9
IDApIHsKLSAgICAgICAgbWVtY3B5KAotICAgICAgICAgICAgcmVhbGxvY2F0ZWQsCi0gICAgICAg
ICAgICB0aHJlYWRFbnRyeS0+ZWxlbWVudHMsCi0gICAgICAgICAgICBzaXplb2YoKnJlYWxsb2Nh
dGVkKSAqIHByZXZDYXBhY2l0eSk7Ci0gICAgICB9Ci0gICAgICBzdGQ6OnN3YXAocmVhbGxvY2F0
ZWQsIHRocmVhZEVudHJ5LT5lbGVtZW50cyk7Ci0gICAgfQotICAgIHRocmVhZEVudHJ5LT5lbGVt
ZW50c0NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7Ci0gIH0KLQotICBmcmVlKHJlYWxsb2NhdGVkKTsK
LX0KLQotbmFtZXNwYWNlIHsKLQotc3RydWN0IEF0Rm9ya1Rhc2sgewotICBmb2xseTo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlOwotICBmb2xseTo6RnVuY3Rpb248dm9pZCgpPiBwYXJlbnQ7Ci0g
IGZvbGx5OjpGdW5jdGlvbjx2b2lkKCk+IGNoaWxkOwotfTsKLQotY2xhc3MgQXRGb3JrTGlzdCB7
Ci0gcHVibGljOgotICBzdGF0aWMgQXRGb3JrTGlzdCYgaW5zdGFuY2UoKSB7Ci0gICAgc3RhdGlj
IGF1dG8gaW5zdGFuY2UgPSBuZXcgQXRGb3JrTGlzdCgpOwotICAgIHJldHVybiAqaW5zdGFuY2U7
Ci0gIH0KLQotICBzdGF0aWMgdm9pZCBwcmVwYXJlKCkgbm9leGNlcHQgewotICAgIGluc3RhbmNl
KCkudGFza3NMb2NrLmxvY2soKTsKLSAgICBhdXRvJiB0YXNrcyA9IGluc3RhbmNlKCkudGFza3M7
Ci0gICAgZm9yIChhdXRvIHRhc2sgPSB0YXNrcy5yYmVnaW4oKTsgdGFzayAhPSB0YXNrcy5yZW5k
KCk7ICsrdGFzaykgewotICAgICAgdGFzay0+cHJlcGFyZSgpOwotICAgIH0KLSAgfQotCi0gIHN0
YXRpYyB2b2lkIHBhcmVudCgpIG5vZXhjZXB0IHsKLSAgICBhdXRvJiB0YXNrcyA9IGluc3RhbmNl
KCkudGFza3M7Ci0gICAgZm9yIChhdXRvJiB0YXNrIDogdGFza3MpIHsKLSAgICAgIHRhc2sucGFy
ZW50KCk7Ci0gICAgfQotICAgIGluc3RhbmNlKCkudGFza3NMb2NrLnVubG9jaygpOwotICB9Ci0K
LSAgc3RhdGljIHZvaWQgY2hpbGQoKSBub2V4Y2VwdCB7Ci0gICAgYXV0byYgdGFza3MgPSBpbnN0
YW5jZSgpLnRhc2tzOwotICAgIGZvciAoYXV0byYgdGFzayA6IHRhc2tzKSB7Ci0gICAgICB0YXNr
LmNoaWxkKCk7Ci0gICAgfQotICAgIGluc3RhbmNlKCkudGFza3NMb2NrLnVubG9jaygpOwotICB9
Ci0KLSAgc3RkOjptdXRleCB0YXNrc0xvY2s7Ci0gIHN0ZDo6bGlzdDxBdEZvcmtUYXNrPiB0YXNr
czsKLQotIHByaXZhdGU6Ci0gIEF0Rm9ya0xpc3QoKSB7Ci0jaWYgRk9MTFlfSEFWRV9QVEhSRUFE
X0FURk9SSwotICAgIGludCByZXQgPSBwdGhyZWFkX2F0Zm9yaygKLSAgICAgICAgJkF0Rm9ya0xp
c3Q6OnByZXBhcmUsICZBdEZvcmtMaXN0OjpwYXJlbnQsICZBdEZvcmtMaXN0OjpjaGlsZCk7Ci0g
ICAgY2hlY2tQb3NpeEVycm9yKHJldCwgInB0aHJlYWRfYXRmb3JrIGZhaWxlZCIpOwotI2VsaWYg
IV9fQU5EUk9JRF9fICYmICFkZWZpbmVkKF9NU0NfVkVSKQotLy8gcHRocmVhZF9hdGZvcmsgaXMg
bm90IHBhcnQgb2YgdGhlIEFuZHJvaWQgTkRLIGF0IGxlYXN0IGFzIG9mIG45ZC4gSWYKLS8vIHNv
bWV0aGluZyBpcyB0cnlpbmcgdG8gY2FsbCBuYXRpdmUgZm9yaygpIGRpcmVjdGx5IGF0IGFsbCB3
aXRoIEFuZHJvaWQncwotLy8gcHJvY2VzcyBtYW5hZ2VtZW50IG1vZGVsLCB0aGlzIGlzIHByb2Jh
Ymx5IHRoZSBsZWFzdCBvZiB0aGUgcHJvYmxlbXMuCi0vLwotLy8gQnV0IG90aGVyd2lzZSwgdGhp
cyBpcyBhIHByb2JsZW0uCi0jd2FybmluZyBwdGhyZWFkX2F0Zm9yayB1bmF2YWlsYWJsZQotI2Vu
ZGlmCi0gIH0KLX07Ci19Ci0KLXZvaWQgU3RhdGljTWV0YUJhc2U6OmluaXRBdEZvcmsoKSB7Ci0g
IEF0Rm9ya0xpc3Q6Omluc3RhbmNlKCk7Ci19Ci0KLXZvaWQgU3RhdGljTWV0YUJhc2U6OnJlZ2lz
dGVyQXRGb3JrKAotICAgIGZvbGx5OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmUsCi0gICAgZm9s
bHk6OkZ1bmN0aW9uPHZvaWQoKT4gcGFyZW50LAotICAgIGZvbGx5OjpGdW5jdGlvbjx2b2lkKCk+
IGNoaWxkKSB7Ci0gIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsZyhBdEZvcmtMaXN0Ojpp
bnN0YW5jZSgpLnRhc2tzTG9jayk7Ci0gIEF0Rm9ya0xpc3Q6Omluc3RhbmNlKCkudGFza3MucHVz
aF9iYWNrKAotICAgICAge3N0ZDo6bW92ZShwcmVwYXJlKSwgc3RkOjptb3ZlKHBhcmVudCksIHN0
ZDo6bW92ZShjaGlsZCl9KTsKLX0KLQotRk9MTFlfU1RBVElDX0NUT1JfUFJJT1JJVFlfTUFYCi1Q
dGhyZWFkS2V5VW5yZWdpc3RlciBQdGhyZWFkS2V5VW5yZWdpc3Rlcjo6aW5zdGFuY2VfOwotfX0K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2Rl
dGFpbC9UaHJlYWRMb2NhbERldGFpbC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvZGV0YWlsL1RocmVhZExvY2FsRGV0YWlsLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGZlNzIxNjFhMmE2MThkOGE0ZTc2YTFkYjIxNDJmZWVjYzQ0MGFiODIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZGV0YWlsL1RocmVhZExvY2FsRGV0YWlsLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw0MDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZh
Y2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBW
ZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFp
biBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh
YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0g
KiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRo
ZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0K
LSNpbmNsdWRlIDxhdG9taWM+Ci0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNpbmNsdWRlIDxtdXRl
eD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSA8Z2xv
Zy9sb2dnaW5nLmg+Ci0KLSNpbmNsdWRlIDxmb2xseS9FeGNlcHRpb24uaD4KLSNpbmNsdWRlIDxm
b2xseS9Gb3JlYWNoLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDxm
b2xseS9NYWxsb2MuaD4KLSNpbmNsdWRlIDxmb2xseS9NaWNyb1NwaW5Mb2NrLmg+Ci0jaW5jbHVk
ZSA8Zm9sbHkvUG9ydGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxmb2xseS9TY29wZUd1YXJkLmg+Ci0j
aW5jbHVkZSA8Zm9sbHkvU2hhcmVkTXV0ZXguaD4KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0
eS9QVGhyZWFkLmg+Ci0KLSNpbmNsdWRlIDxmb2xseS9kZXRhaWwvU3RhdGljU2luZ2xldG9uTWFu
YWdlci5oPgotCi0vLyBJbiBnZW5lcmFsLCBlbXV0bHMgY2xlYW51cCBpcyBub3QgZ3VhcmFudGVl
ZCB0byBwbGF5IG5pY2Ugd2l0aCB0aGUgd2F5Ci0vLyBTdGF0aWNNZXRhIG1peGVzIGRpcmVjdCBw
dGhyZWFkIGNhbGxzIGFuZCB0aGUgdXNlIG9mIF9fdGhyZWFkLiBUaGlzIGhhcwotLy8gY2F1c2Vk
IHByb2JsZW1zIG9uIG11bHRpcGxlIHBsYXRmb3JtcyBzbyBkb24ndCB1c2UgX190aHJlYWQgdGhl
cmUuCi0vLwotLy8gWFhYOiBJZGVhbGx5IHdlIHdvdWxkIGluc3RlYWQgZGV0ZXJtaW5lIGlmIGVt
dXRscyBpcyBpbiB1c2UgYXQgcnVudGltZSBhcyBpdAotLy8gaXMgcG9zc2libGUgdG8gY29uZmln
dXJlIGdsaWJjIG9uIExpbnV4IHRvIHVzZSBlbXV0bHMgcmVnYXJkbGVzcy4KLSNpZiAhRk9MTFlf
TU9CSUxFICYmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX01TQ19WRVIpCi0jZGVm
aW5lIEZPTExZX1RMRF9VU0VfRk9MTFlfVExTIDEKLSNlbHNlCi0jdW5kZWYgRk9MTFlfVExEX1VT
RV9GT0xMWV9UTFMKLSNlbmRpZgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi1lbnVtIGNsYXNzIFRM
UERlc3RydWN0aW9uTW9kZSB7IFRISVNfVEhSRUFELCBBTExfVEhSRUFEUyB9Owotc3RydWN0IEFj
Y2Vzc01vZGVTdHJpY3Qge307Ci0KLW5hbWVzcGFjZSB0aHJlYWRsb2NhbF9kZXRhaWwgewotCi0v
KioKLSAqIFBPRCB3cmFwcGVyIGFyb3VuZCBhbiBlbGVtZW50IChhIHZvaWQqKSBhbmQgYW4gYXNz
b2NpYXRlZCBkZWxldGVyLgotICogVGhpcyBtdXN0IGJlIFBPRCwgYXMgd2UgbWVtc2V0KCkgaXQg
dG8gMCBhbmQgbWVtY3B5KCkgaXQgYXJvdW5kLgotICovCi1zdHJ1Y3QgRWxlbWVudFdyYXBwZXIg
ewotICB1c2luZyBEZWxldGVyRnVuVHlwZSA9IHZvaWQodm9pZCosIFRMUERlc3RydWN0aW9uTW9k
ZSk7Ci0KLSAgYm9vbCBkaXNwb3NlKFRMUERlc3RydWN0aW9uTW9kZSBtb2RlKSB7Ci0gICAgaWYg
KHB0ciA9PSBudWxscHRyKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgRENI
RUNLKGRlbGV0ZXIxICE9IG51bGxwdHIpOwotICAgIG93bnNEZWxldGVyID8gKCpkZWxldGVyMiko
cHRyLCBtb2RlKSA6ICgqZGVsZXRlcjEpKHB0ciwgbW9kZSk7Ci0gICAgY2xlYW51cCgpOwotICAg
IHJldHVybiB0cnVlOwotICB9Ci0KLSAgdm9pZCogcmVsZWFzZSgpIHsKLSAgICBhdXRvIHJldFB0
ciA9IHB0cjsKLQotICAgIGlmIChwdHIgIT0gbnVsbHB0cikgewotICAgICAgY2xlYW51cCgpOwot
ICAgIH0KLQotICAgIHJldHVybiByZXRQdHI7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgUHRy
PgotICB2b2lkIHNldChQdHIgcCkgewotICAgIGF1dG8gZ3VhcmQgPSBtYWtlR3VhcmQoWyZdIHsg
ZGVsZXRlIHA7IH0pOwotICAgIERDSEVDSyhwdHIgPT0gbnVsbHB0cik7Ci0gICAgRENIRUNLKGRl
bGV0ZXIxID09IG51bGxwdHIpOwotCi0gICAgaWYgKHApIHsKLSAgICAgIHB0ciA9IHA7Ci0gICAg
ICBkZWxldGVyMSA9IFtdKHZvaWQqIHB0LCBUTFBEZXN0cnVjdGlvbk1vZGUpIHsKLSAgICAgICAg
ZGVsZXRlIHN0YXRpY19jYXN0PFB0cj4ocHQpOwotICAgICAgfTsKLSAgICAgIG93bnNEZWxldGVy
ID0gZmFsc2U7Ci0gICAgICBndWFyZC5kaXNtaXNzKCk7Ci0gICAgfQotICB9Ci0KLSAgdGVtcGxh
dGUgPGNsYXNzIFB0ciwgY2xhc3MgRGVsZXRlcj4KLSAgdm9pZCBzZXQoUHRyIHAsIGNvbnN0IERl
bGV0ZXImIGQpIHsKLSAgICBhdXRvIGd1YXJkID0gbWFrZUd1YXJkKFsmXSB7Ci0gICAgICBpZiAo
cCkgewotICAgICAgICBkKHAsIFRMUERlc3RydWN0aW9uTW9kZTo6VEhJU19USFJFQUQpOwotICAg
ICAgfQotICAgIH0pOwotICAgIERDSEVDSyhwdHIgPT0gbnVsbHB0cik7Ci0gICAgRENIRUNLKGRl
bGV0ZXIyID09IG51bGxwdHIpOwotICAgIGlmIChwKSB7Ci0gICAgICBwdHIgPSBwOwotICAgICAg
YXV0byBkMiA9IGQ7IC8vIGdjYy00LjggZG9lc24ndCBkZWNheSB0eXBlcyBjb3JyZWN0bHkgaW4g
bGFtYmRhIGNhcHR1cmVzCi0gICAgICBkZWxldGVyMiA9IG5ldyBzdGQ6OmZ1bmN0aW9uPERlbGV0
ZXJGdW5UeXBlPigKLSAgICAgICAgICBbZDJdKHZvaWQqIHB0LCBUTFBEZXN0cnVjdGlvbk1vZGUg
bW9kZSkgewotICAgICAgICAgICAgZDIoc3RhdGljX2Nhc3Q8UHRyPihwdCksIG1vZGUpOwotICAg
ICAgICAgIH0pOwotICAgICAgb3duc0RlbGV0ZXIgPSB0cnVlOwotICAgICAgZ3VhcmQuZGlzbWlz
cygpOwotICAgIH0KLSAgfQotCi0gIHZvaWQgY2xlYW51cCgpIHsKLSAgICBpZiAob3duc0RlbGV0
ZXIpIHsKLSAgICAgIGRlbGV0ZSBkZWxldGVyMjsKLSAgICB9Ci0gICAgcHRyID0gbnVsbHB0cjsK
LSAgICBkZWxldGVyMSA9IG51bGxwdHI7Ci0gICAgb3duc0RlbGV0ZXIgPSBmYWxzZTsKLSAgfQot
Ci0gIHZvaWQqIHB0cjsKLSAgdW5pb24gewotICAgIERlbGV0ZXJGdW5UeXBlKiBkZWxldGVyMTsK
LSAgICBzdGQ6OmZ1bmN0aW9uPERlbGV0ZXJGdW5UeXBlPiogZGVsZXRlcjI7Ci0gIH07Ci0gIGJv
b2wgb3duc0RlbGV0ZXI7Ci19OwotCi1zdHJ1Y3QgU3RhdGljTWV0YUJhc2U7Ci0KLS8qKgotICog
UGVyLXRocmVhZCBlbnRyeS4gIEVhY2ggdGhyZWFkIHVzaW5nIGEgU3RhdGljTWV0YSBvYmplY3Qg
aGFzIG9uZS4KLSAqIFRoaXMgaXMgd3JpdHRlbiBmcm9tIHRoZSBvd25pbmcgdGhyZWFkIG9ubHkg
KHVuZGVyIHRoZSBsb2NrKSwgcmVhZAotICogZnJvbSB0aGUgb3duaW5nIHRocmVhZCAobm8gbG9j
ayBuZWNlc3NhcnkpLCBhbmQgcmVhZCBmcm9tIG90aGVyIHRocmVhZHMKLSAqICh1bmRlciB0aGUg
bG9jaykuCi0gKi8KLXN0cnVjdCBUaHJlYWRFbnRyeSB7Ci0gIEVsZW1lbnRXcmFwcGVyKiBlbGVt
ZW50c3tudWxscHRyfTsKLSAgc2l6ZV90IGVsZW1lbnRzQ2FwYWNpdHl7MH07Ci0gIFRocmVhZEVu
dHJ5KiBuZXh0e251bGxwdHJ9OwotICBUaHJlYWRFbnRyeSogcHJldntudWxscHRyfTsKLSAgU3Rh
dGljTWV0YUJhc2UqIG1ldGF7bnVsbHB0cn07Ci19OwotCi1jb25zdGV4cHIgdWludDMyX3Qga0Vu
dHJ5SURJbnZhbGlkID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwotCi1z
dHJ1Y3QgUHRocmVhZEtleVVucmVnaXN0ZXJUZXN0ZXI7Ci0KLS8qKgotICogV2Ugd2FudCB0byBk
aXNhYmxlIG9uVGhyZWFkRXhpdCBjYWxsIGF0IHRoZSBlbmQgb2Ygc2h1dGRvd24sIHdlIGRvbid0
IGNhcmUKLSAqIGFib3V0IGxlYWtpbmcgbWVtb3J5IGF0IHRoYXQgcG9pbnQuCi0gKgotICogT3Ro
ZXJ3aXNlIGlmIFRocmVhZExvY2FsIGlzIHVzZWQgaW4gYSBzaGFyZWQgbGlicmFyeSwgb25UaHJl
YWRFeGl0IG1heSBiZQotICogY2FsbGVkIGFmdGVyIGRsY2xvc2UoKS4KLSAqCi0gKiBUaGlzIGNs
YXNzIGhhcyBvbmUgc2luZ2xlIHN0YXRpYyBpbnN0YW5jZTsgaG93ZXZlciBzaW5jZSBpdCdzIHNv
IHdpZGVseSB1c2VkLAotICogZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgYnkgc28gbWFueSBjbGFz
c2VzLCB3ZSBuZWVkIHRvIHRha2UgY2FyZSB0byBhdm9pZAotICogcHJvYmxlbXMgc3RlbW1pbmcg
ZnJvbSB0aGUgU3RhdGljIEluaXRpYWxpemF0aW9uL0Rlc3RydWN0aW9uIE9yZGVyIEZpYXNjb3Mu
Ci0gKiBUaGVyZWZvcmUgdGhpcyBjbGFzcyBuZWVkcyB0byBiZSBjb25zdGV4cHItY29uc3RydWN0
aWJsZSwgc28gYXMgdG8gYXZvaWQKLSAqIHRoZSBuZWVkIGZvciB0aGlzIHRvIHBhcnRpY2lwYXRl
IGluIGluaXQvZGVzdHJ1Y3Rpb24gb3JkZXIuCi0gKi8KLWNsYXNzIFB0aHJlYWRLZXlVbnJlZ2lz
dGVyIHsKLSBwdWJsaWM6Ci0gIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtNYXhLZXlzID0gMVVM
IDw8IDE2OwotCi0gIH5QdGhyZWFkS2V5VW5yZWdpc3RlcigpIHsKLSAgICAvLyBJZiBzdGF0aWMg
Y29uc3RydWN0b3IgcHJpb3JpdGllcyBhcmUgbm90IHN1cHBvcnRlZCB0aGVuCi0gICAgLy8gflB0
aHJlYWRLZXlVbnJlZ2lzdGVyIGxvZ2ljIGlzIG5vdCBzYWZlLgotI2lmICFkZWZpbmVkKF9fQVBQ
TEVfXykgJiYgIWRlZmluZWQoX01TQ19WRVIpCi0gICAgTVNMR3VhcmQgbGcobG9ja18pOwotICAg
IHdoaWxlIChzaXplXykgewotICAgICAgcHRocmVhZF9rZXlfZGVsZXRlKGtleXNfWy0tc2l6ZV9d
KTsKLSAgICB9Ci0jZW5kaWYKLSAgfQotCi0gIHN0YXRpYyB2b2lkIHJlZ2lzdGVyS2V5KHB0aHJl
YWRfa2V5X3Qga2V5KSB7Ci0gICAgaW5zdGFuY2VfLnJlZ2lzdGVyS2V5SW1wbChrZXkpOwotICB9
Ci0KLSBwcml2YXRlOgotICAvKioKLSAgICogT25seSBvbmUgZ2xvYmFsIGluc3RhbmNlIHNob3Vs
ZCBleGlzdCwgaGVuY2UgdGhpcyBpcyBwcml2YXRlLgotICAgKiBTZWUgYWxzbyB0aGUgaW1wb3J0
YW50IG5vdGUgYXQgdGhlIHRvcCBvZiB0aGlzIGNsYXNzIGFib3V0IGBjb25zdGV4cHJgCi0gICAq
IHVzYWdlLgotICAgKi8KLSAgY29uc3RleHByIFB0aHJlYWRLZXlVbnJlZ2lzdGVyKCkgOiBsb2Nr
XygpLCBzaXplXygwKSwga2V5c18oKSB7IH0KLSAgZnJpZW5kIHN0cnVjdCBmb2xseTo6dGhyZWFk
bG9jYWxfZGV0YWlsOjpQdGhyZWFkS2V5VW5yZWdpc3RlclRlc3RlcjsKLQotICB2b2lkIHJlZ2lz
dGVyS2V5SW1wbChwdGhyZWFkX2tleV90IGtleSkgewotICAgIE1TTEd1YXJkIGxnKGxvY2tfKTsK
LSAgICBpZiAoc2l6ZV8gPT0ga01heEtleXMpIHsKLSAgICAgIHRocm93IHN0ZDo6bG9naWNfZXJy
b3IoInB0aHJlYWRfa2V5IGxpbWl0IGhhcyBhbHJlYWR5IGJlZW4gcmVhY2hlZCIpOwotICAgIH0K
LSAgICBrZXlzX1tzaXplXysrXSA9IGtleTsKLSAgfQotCi0gIE1pY3JvU3BpbkxvY2sgbG9ja187
Ci0gIHNpemVfdCBzaXplXzsKLSAgcHRocmVhZF9rZXlfdCBrZXlzX1trTWF4S2V5c107Ci0KLSAg
c3RhdGljIFB0aHJlYWRLZXlVbnJlZ2lzdGVyIGluc3RhbmNlXzsKLX07Ci0KLXN0cnVjdCBTdGF0
aWNNZXRhQmFzZSB7Ci0gIC8vIFJlcHJlc2VudHMgYW4gSUQgb2YgYSB0aHJlYWQgbG9jYWwgb2Jq
ZWN0LiBJbml0aWFsbHkgc2V0IHRvIHRoZSBtYXhpbXVtCi0gIC8vIHVpbnQuIFRoaXMgcmVwcmVz
ZW50YXRpb24gYWxsb3dzIHVzIHRvIGF2b2lkIGEgYnJhbmNoIGluIGFjY2Vzc2luZyBUTFMgZGF0
YQotICAvLyAoYmVjYXVzZSBpZiB5b3UgdGVzdCBjYXBhY2l0eSA+IGlkIGlmIGlkID0gbWF4aW50
IHRoZW4gdGhlIHRlc3Qgd2lsbCBhbHdheXMKLSAgLy8gZmFpbCkuIEl0IGFsbG93cyB1cyB0byBr
ZWVwIGEgY29uc3RleHByIGNvbnN0cnVjdG9yIGFuZCBhdm9pZCBTSU9GLgotICBjbGFzcyBFbnRy
eUlEIHsKLSAgIHB1YmxpYzoKLSAgICBzdGQ6OmF0b21pYzx1aW50MzJfdD4gdmFsdWU7Ci0KLSAg
ICBjb25zdGV4cHIgRW50cnlJRCgpIDogdmFsdWUoa0VudHJ5SURJbnZhbGlkKSB7Ci0gICAgfQot
Ci0gICAgRW50cnlJRChFbnRyeUlEJiYgb3RoZXIpIG5vZXhjZXB0IDogdmFsdWUob3RoZXIudmFs
dWUubG9hZCgpKSB7Ci0gICAgICBvdGhlci52YWx1ZSA9IGtFbnRyeUlESW52YWxpZDsKLSAgICB9
Ci0KLSAgICBFbnRyeUlEJiBvcGVyYXRvcj0oRW50cnlJRCYmIG90aGVyKSB7Ci0gICAgICBhc3Nl
cnQodGhpcyAhPSAmb3RoZXIpOwotICAgICAgdmFsdWUgPSBvdGhlci52YWx1ZS5sb2FkKCk7Ci0g
ICAgICBvdGhlci52YWx1ZSA9IGtFbnRyeUlESW52YWxpZDsKLSAgICAgIHJldHVybiAqdGhpczsK
LSAgICB9Ci0KLSAgICBFbnRyeUlEKGNvbnN0IEVudHJ5SUQmIG90aGVyKSA9IGRlbGV0ZTsKLSAg
ICBFbnRyeUlEJiBvcGVyYXRvcj0oY29uc3QgRW50cnlJRCYgb3RoZXIpID0gZGVsZXRlOwotCi0g
ICAgdWludDMyX3QgZ2V0T3JJbnZhbGlkKCkgewotICAgICAgLy8gSXQncyBPSyBmb3IgdGhpcyB0
byBiZSByZWxheGVkLCBldmVuIHRob3VnaCB3ZSdyZSBlZmZlY3RpdmVseSBkb2luZwotICAgICAg
Ly8gZG91YmxlIGNoZWNrZWQgbG9ja2luZyBpbiB1c2luZyB0aGlzIHZhbHVlLiBXZSBvbmx5IGNh
cmUgYWJvdXQgdGhlCi0gICAgICAvLyB1bmlxdWVuZXNzIG9mIElEcywgZ2V0T3JBbGxvY2F0ZSBk
b2VzIG5vdCBtb2RpZnkgYW55IG90aGVyIG1lbW9yeQotICAgICAgLy8gdGhpcyB0aHJlYWQgd2ls
bCB1c2UuCi0gICAgICByZXR1cm4gdmFsdWUubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
KTsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBnZXRPckFsbG9jYXRlKFN0YXRpY01ldGFCYXNlJiBt
ZXRhKSB7Ci0gICAgICB1aW50MzJfdCBpZCA9IGdldE9ySW52YWxpZCgpOwotICAgICAgaWYgKGlk
ICE9IGtFbnRyeUlESW52YWxpZCkgewotICAgICAgICByZXR1cm4gaWQ7Ci0gICAgICB9Ci0gICAg
ICAvLyBUaGUgbG9jayBpbnNpZGUgYWxsb2NhdGUgZW5zdXJlcyB0aGF0IGEgc2luZ2xlIHZhbHVl
IGlzIGFsbG9jYXRlZAotICAgICAgcmV0dXJuIG1ldGEuYWxsb2NhdGUodGhpcyk7Ci0gICAgfQot
ICB9OwotCi0gIFN0YXRpY01ldGFCYXNlKFRocmVhZEVudHJ5KiAoKnRocmVhZEVudHJ5KSgpLCBi
b29sIHN0cmljdCk7Ci0KLSAgW1tub3JldHVybl1dIH5TdGF0aWNNZXRhQmFzZSgpIHsKLSAgICBm
b2xseTo6YXNzdW1lX3VucmVhY2hhYmxlKCk7Ci0gIH0KLQotICB2b2lkIHB1c2hfYmFjayhUaHJl
YWRFbnRyeSogdCkgewotICAgIHQtPm5leHQgPSAmaGVhZF87Ci0gICAgdC0+cHJldiA9IGhlYWRf
LnByZXY7Ci0gICAgaGVhZF8ucHJldi0+bmV4dCA9IHQ7Ci0gICAgaGVhZF8ucHJldiA9IHQ7Ci0g
IH0KLQotICB2b2lkIGVyYXNlKFRocmVhZEVudHJ5KiB0KSB7Ci0gICAgdC0+bmV4dC0+cHJldiA9
IHQtPnByZXY7Ci0gICAgdC0+cHJldi0+bmV4dCA9IHQtPm5leHQ7Ci0gICAgdC0+bmV4dCA9IHQt
PnByZXYgPSB0OwotICB9Ci0KLSAgc3RhdGljIHZvaWQgb25UaHJlYWRFeGl0KHZvaWQqIHB0cik7
Ci0KLSAgdWludDMyX3QgYWxsb2NhdGUoRW50cnlJRCogZW50KTsKLQotICB2b2lkIGRlc3Ryb3ko
RW50cnlJRCogZW50KTsKLQotICAvKioKLSAgICogUmVzZXJ2ZSBlbm91Z2ggc3BhY2UgaW4gdGhl
IFRocmVhZEVudHJ5OjplbGVtZW50cyBmb3IgdGhlIGl0ZW0KLSAgICogQGlkIHRvIGZpdCBpbi4K
LSAgICovCi0gIHZvaWQgcmVzZXJ2ZShFbnRyeUlEKiBpZCk7Ci0KLSAgRWxlbWVudFdyYXBwZXIm
IGdldChFbnRyeUlEKiBlbnQpOwotCi0gIHN0YXRpYyB2b2lkIGluaXRBdEZvcmsoKTsKLSAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJBdEZvcmsoCi0gICAgICBmb2xseTo6RnVuY3Rpb248dm9pZCgpPiBw
cmVwYXJlLAotICAgICAgZm9sbHk6OkZ1bmN0aW9uPHZvaWQoKT4gcGFyZW50LAotICAgICAgZm9s
bHk6OkZ1bmN0aW9uPHZvaWQoKT4gY2hpbGQpOwotCi0gIHVpbnQzMl90IG5leHRJZF87Ci0gIHN0
ZDo6dmVjdG9yPHVpbnQzMl90PiBmcmVlSWRzXzsKLSAgc3RkOjptdXRleCBsb2NrXzsKLSAgU2hh
cmVkTXV0ZXggYWNjZXNzQWxsVGhyZWFkc0xvY2tfOwotICBwdGhyZWFkX2tleV90IHB0aHJlYWRL
ZXlfOwotICBUaHJlYWRFbnRyeSBoZWFkXzsKLSAgVGhyZWFkRW50cnkqICgqdGhyZWFkRW50cnlf
KSgpOwotICBib29sIHN0cmljdF87Ci19OwotCi0vLyBIZWxkIGluIGEgc2luZ2xldG9uIHRvIHRy
YWNrIG91ciBnbG9iYWwgaW5zdGFuY2VzLgotLy8gV2UgaGF2ZSBvbmUgb2YgdGhlc2UgcGVyICJU
YWciLCBieSBkZWZhdWx0IG9uZSBmb3IgdGhlIHdob2xlIHN5c3RlbQotLy8gKFRhZz12b2lkKS4K
LS8vCi0vLyBDcmVhdGluZyBhbmQgZGVzdHJveWluZyBUaHJlYWRMb2NhbFB0ciBvYmplY3RzLCBh
cyB3ZWxsIGFzIHRocmVhZCBleGl0Ci0vLyBmb3IgdGhyZWFkcyB0aGF0IHVzZSBUaHJlYWRMb2Nh
bFB0ciBvYmplY3RzIGNvbGxpZGUgb24gYSBsb2NrIGluc2lkZQotLy8gU3RhdGljTWV0YTsgeW91
IGNhbiBzcGVjaWZ5IG11bHRpcGxlIFRhZyB0eXBlcyB0byBicmVhayB0aGF0IGxvY2suCi10ZW1w
bGF0ZSA8Y2xhc3MgVGFnLCBjbGFzcyBBY2Nlc3NNb2RlPgotc3RydWN0IFN0YXRpY01ldGEgOiBT
dGF0aWNNZXRhQmFzZSB7Ci0gIFN0YXRpY01ldGEoKQotICAgICAgOiBTdGF0aWNNZXRhQmFzZSgK
LSAgICAgICAgICAgICZTdGF0aWNNZXRhOjpnZXRUaHJlYWRFbnRyeVNsb3csCi0gICAgICAgICAg
ICBzdGQ6OmlzX3NhbWU8QWNjZXNzTW9kZSwgQWNjZXNzTW9kZVN0cmljdD46OnZhbHVlKSB7Ci0g
ICAgcmVnaXN0ZXJBdEZvcmsoCi0gICAgICAgIC8qcHJlcGFyZSovICZTdGF0aWNNZXRhOjpwcmVG
b3JrLAotICAgICAgICAvKnBhcmVudCovICZTdGF0aWNNZXRhOjpvbkZvcmtQYXJlbnQsCi0gICAg
ICAgIC8qY2hpbGQqLyAmU3RhdGljTWV0YTo6b25Gb3JrQ2hpbGQpOwotICB9Ci0KLSAgc3RhdGlj
IFN0YXRpY01ldGE8VGFnLCBBY2Nlc3NNb2RlPiYgaW5zdGFuY2UoKSB7Ci0gICAgLy8gTGVhayBp
dCBvbiBleGl0LCB0aGVyZSdzIG9ubHkgb25lIHBlciBwcm9jZXNzIGFuZCB3ZSBkb24ndCBoYXZl
IHRvCi0gICAgLy8gd29ycnkgYWJvdXQgc3luY2hyb25pemF0aW9uIHdpdGggZXhpdGluZyB0aHJl
YWRzLgotICAgIC8qIGxpYnJhcnktbG9jYWwgKi8gc3RhdGljIGF1dG8gaW5zdGFuY2UgPQotICAg
ICAgICBkZXRhaWw6OmNyZWF0ZUdsb2JhbDxTdGF0aWNNZXRhPFRhZywgQWNjZXNzTW9kZT4sIHZv
aWQ+KCk7Ci0gICAgcmV0dXJuICppbnN0YW5jZTsKLSAgfQotCi0gIEVsZW1lbnRXcmFwcGVyJiBn
ZXQoRW50cnlJRCogZW50KSB7Ci0gICAgVGhyZWFkRW50cnkqIHRocmVhZEVudHJ5ID0gZ2V0VGhy
ZWFkRW50cnkoKTsKLSAgICB1aW50MzJfdCBpZCA9IGVudC0+Z2V0T3JJbnZhbGlkKCk7Ci0gICAg
Ly8gaWYgaWQgaXMgaW52YWxpZCwgaXQgaXMgZXF1YWwgdG8gdWludDMyX3QncyBtYXggdmFsdWUu
Ci0gICAgLy8geCA8PSBtYXggdmFsdWUgaXMgYWx3YXlzIHRydWUKLSAgICBpZiAoVU5MSUtFTFko
dGhyZWFkRW50cnktPmVsZW1lbnRzQ2FwYWNpdHkgPD0gaWQpKSB7Ci0gICAgICByZXNlcnZlKGVu
dCk7Ci0gICAgICBpZCA9IGVudC0+Z2V0T3JJbnZhbGlkKCk7Ci0gICAgICBhc3NlcnQodGhyZWFk
RW50cnktPmVsZW1lbnRzQ2FwYWNpdHkgPiBpZCk7Ci0gICAgfQotICAgIHJldHVybiB0aHJlYWRF
bnRyeS0+ZWxlbWVudHNbaWRdOwotICB9Ci0KLSAgc3RhdGljIFRocmVhZEVudHJ5KiBnZXRUaHJl
YWRFbnRyeVNsb3coKSB7Ci0gICAgYXV0byYgbWV0YSA9IGluc3RhbmNlKCk7Ci0gICAgYXV0byBr
ZXkgPSBtZXRhLnB0aHJlYWRLZXlfOwotICAgIFRocmVhZEVudHJ5KiB0aHJlYWRFbnRyeSA9Ci0g
ICAgICBzdGF0aWNfY2FzdDxUaHJlYWRFbnRyeSo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5KSk7
Ci0gICAgaWYgKCF0aHJlYWRFbnRyeSkgewotI2lmZGVmIEZPTExZX1RMRF9VU0VfRk9MTFlfVExT
Ci0gICAgICBzdGF0aWMgRk9MTFlfVExTIFRocmVhZEVudHJ5IHRocmVhZEVudHJ5U2luZ2xldG9u
OwotICAgICAgdGhyZWFkRW50cnkgPSAmdGhyZWFkRW50cnlTaW5nbGV0b247Ci0jZWxzZQotICAg
ICAgdGhyZWFkRW50cnkgPSBuZXcgVGhyZWFkRW50cnkoKTsKLSNlbmRpZgotICAgICAgdGhyZWFk
RW50cnktPm1ldGEgPSAmbWV0YTsKLSAgICAgIGludCByZXQgPSBwdGhyZWFkX3NldHNwZWNpZmlj
KGtleSwgdGhyZWFkRW50cnkpOwotICAgICAgY2hlY2tQb3NpeEVycm9yKHJldCwgInB0aHJlYWRf
c2V0c3BlY2lmaWMgZmFpbGVkIik7Ci0gICAgfQotICAgIHJldHVybiB0aHJlYWRFbnRyeTsKLSAg
fQotCi0gIGlubGluZSBzdGF0aWMgVGhyZWFkRW50cnkqIGdldFRocmVhZEVudHJ5KCkgewotI2lm
ZGVmIEZPTExZX1RMRF9VU0VfRk9MTFlfVExTCi0gICAgc3RhdGljIEZPTExZX1RMUyBUaHJlYWRF
bnRyeSogdGhyZWFkRW50cnlDYWNoZXtudWxscHRyfTsKLSAgICBpZiAoVU5MSUtFTFkodGhyZWFk
RW50cnlDYWNoZSA9PSBudWxscHRyKSkgewotICAgICAgdGhyZWFkRW50cnlDYWNoZSA9IGluc3Rh
bmNlKCkudGhyZWFkRW50cnlfKCk7Ci0gICAgfQotICAgIHJldHVybiB0aHJlYWRFbnRyeUNhY2hl
OwotI2Vsc2UKLSAgICByZXR1cm4gaW5zdGFuY2UoKS50aHJlYWRFbnRyeV8oKTsKLSNlbmRpZgot
ICB9Ci0KLSAgc3RhdGljIHZvaWQgcHJlRm9yayh2b2lkKSB7Ci0gICAgaW5zdGFuY2UoKS5sb2Nr
Xy5sb2NrKCk7ICAvLyBNYWtlIHN1cmUgaXQncyBjcmVhdGVkCi0gIH0KLQotICBzdGF0aWMgdm9p
ZCBvbkZvcmtQYXJlbnQodm9pZCkgeyBpbnN0YW5jZSgpLmxvY2tfLnVubG9jaygpOyB9Ci0KLSAg
c3RhdGljIHZvaWQgb25Gb3JrQ2hpbGQodm9pZCkgewotICAgIC8vIG9ubHkgdGhlIGN1cnJlbnQg
dGhyZWFkIHN1cnZpdmVzCi0gICAgaW5zdGFuY2UoKS5oZWFkXy5uZXh0ID0gaW5zdGFuY2UoKS5o
ZWFkXy5wcmV2ID0gJmluc3RhbmNlKCkuaGVhZF87Ci0gICAgVGhyZWFkRW50cnkqIHRocmVhZEVu
dHJ5ID0gZ2V0VGhyZWFkRW50cnkoKTsKLSAgICAvLyBJZiB0aGlzIHRocmVhZCB3YXMgaW4gdGhl
IGxpc3QgYmVmb3JlIHRoZSBmb3JrLCBhZGQgaXQgYmFjay4KLSAgICBpZiAodGhyZWFkRW50cnkt
PmVsZW1lbnRzQ2FwYWNpdHkgIT0gMCkgewotICAgICAgaW5zdGFuY2UoKS5wdXNoX2JhY2sodGhy
ZWFkRW50cnkpOwotICAgIH0KLSAgICBpbnN0YW5jZSgpLmxvY2tfLnVubG9jaygpOwotICB9Ci19
OwotCi19ICAvLyBuYW1lc3BhY2UgdGhyZWFkbG9jYWxfZGV0YWlsCi19ICAvLyBuYW1lc3BhY2Ug
Zm9sbHkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Zv
bGx5L2RldGFpbC9VbmNhdWdodEV4Y2VwdGlvbkNvdW50ZXIuaCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2RldGFpbC9VbmNhdWdodEV4Y2VwdGlvbkNvdW50ZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU4YTdlZDZkZTI1MjU4NTEzZTk1Mzhk
ZGM2MGY0MmE0MWNmZmI3YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9kZXRhaWwv
VW5jYXVnaHRFeGNlcHRpb25Db3VudGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAq
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoK
LSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICog
VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n
LCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBM
aWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu
ZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxleGNlcHRpb24+Ci0KLSNpbmNsdWRlIDxmb2xseS9VbmNhdWdodEV4Y2Vw
dGlvbnMuaD4KLQotbmFtZXNwYWNlIGZvbGx5IHsgbmFtZXNwYWNlIGRldGFpbCB7Ci0KLS8qKgot
ICogVXNlZCB0byBjaGVjayBpZiBhIG5ldyB1bmNhdWdodCBleGNlcHRpb24gd2FzIHRocm93biBi
eSBtb25pdG9yaW5nIHRoZQotICogbnVtYmVyIG9mIHVuY2F1Z2h0IGV4Y2VwdGlvbnMuCi0gKgot
ICogVXNhZ2U6Ci0gKiAgLSBjcmVhdGUgYSBuZXcgVW5jYXVnaHRFeGNlcHRpb25Db3VudGVyIG9i
amVjdAotICogIC0gY2FsbCBpc05ld1VuY2F1Z2h0RXhjZXB0aW9uKCkgb24gdGhlIG5ldyBvYmpl
Y3QgdG8gY2hlY2sgaWYgYSBuZXcKLSAqICAgIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3YXMgdGhyb3du
IHNpbmNlIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWQKLSAqLwotY2xhc3MgVW5jYXVnaHRFeGNlcHRp
b25Db3VudGVyIHsKLSBwdWJsaWM6Ci0gIFVuY2F1Z2h0RXhjZXB0aW9uQ291bnRlcigpIG5vZXhj
ZXB0Ci0gICAgICA6IGV4Y2VwdGlvbkNvdW50Xyhmb2xseTo6dW5jYXVnaHRfZXhjZXB0aW9ucygp
KSB7fQotCi0gIFVuY2F1Z2h0RXhjZXB0aW9uQ291bnRlcihjb25zdCBVbmNhdWdodEV4Y2VwdGlv
bkNvdW50ZXImIG90aGVyKSBub2V4Y2VwdAotICAgICAgOiBleGNlcHRpb25Db3VudF8ob3RoZXIu
ZXhjZXB0aW9uQ291bnRfKSB7fQotCi0gIGJvb2wgaXNOZXdVbmNhdWdodEV4Y2VwdGlvbigpIG5v
ZXhjZXB0IHsKLSAgICByZXR1cm4gZm9sbHk6OnVuY2F1Z2h0X2V4Y2VwdGlvbnMoKSA+IGV4Y2Vw
dGlvbkNvdW50XzsKLSAgfQotCi0gcHJpdmF0ZToKLSAgaW50IGV4Y2VwdGlvbkNvdW50XzsKLX07
Ci0KLX19IC8vIG5hbWVzcGFjZXMKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9Bc3ltbWV0cmljTWVtb3J5QmFycmllci5j
cHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50
YWwvQXN5bW1ldHJpY01lbW9yeUJhcnJpZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmYzViNjYwMTQxYzNlYmFhOWI4YmJkMmI1YTQyNWVmOThkYjhlMzQzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9Bc3ltbWV0cmljTWVtb3J5QmFycmll
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIw
MTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu
c2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFj
aGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFw
cGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ
UywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRo
ZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lm
aWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5k
ZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgIkFzeW1tZXRyaWNNZW1vcnlCYXJyaWVy
LmgiCi0KLSNpbmNsdWRlIDxmb2xseS9FeGNlcHRpb24uaD4KLSNpbmNsdWRlIDxmb2xseS9JbmRl
c3RydWN0aWJsZS5oPgotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L1N5c01lbWJhcnJpZXIu
aD4KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9TeXNNbWFuLmg+Ci0jaW5jbHVkZSA8bXV0
ZXg+Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBEdW1teVBh
Z2VDcmVhdG9yIHsKLSAgRHVtbXlQYWdlQ3JlYXRvcigpIHsKLSAgICBnZXQoKTsKLSAgfQotCi0g
IHN0YXRpYyB2b2lkKiBnZXQoKSB7Ci0gICAgc3RhdGljIGF1dG8gcHRyID0ga0lzTGludXggPyBj
cmVhdGUoKSA6IG51bGxwdHI7Ci0gICAgcmV0dXJuIHB0cjsKLSAgfQotCi0gcHJpdmF0ZToKLSAg
c3RhdGljIHZvaWQqIGNyZWF0ZSgpIHsKLSAgICBhdXRvIHB0ciA9IG1tYXAobnVsbHB0ciwgMSwg
UFJPVF9SRUFELCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKLSAgICBjaGVj
a1VuaXhFcnJvcihyZWludGVycHJldF9jYXN0PHNzaXplX3Q+KHB0ciksICJtbWFwIik7Ci0KLSAg
ICAvLyBPcHRpbWlzdGljYWxseSB0cnkgdG8gbG9jayB0aGUgcGFnZSBzbyBpdCBzdGF5cyByZXNp
ZGVudC4gQ291bGQgbWFrZQotICAgIC8vIHRoZSBoZWF2eSBiYXJyaWVyIGZhc3Rlci4KLSAgICBh
dXRvIHIgPSBtbG9jayhwdHIsIDEpOwotICAgIGlmIChyICE9IDApIHsKLSAgICAgIC8vIERvIG5v
dGhpbmcuCi0gICAgfQotCi0gICAgcmV0dXJuIHB0cjsKLSAgfQotfTsKLQotLy8gTWFrZSBzdXJl
IGR1bW15IHBhZ2UgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSBzaHV0ZG93bi4KLUR1bW15
UGFnZUNyZWF0b3IgZHVtbXlQYWdlQ3JlYXRvcjsKLQotdm9pZCBtcHJvdGVjdE1lbWJhcnJpZXIo
KSB7Ci0gIGF1dG8gZHVtbXlQYWdlID0gZHVtbXlQYWdlQ3JlYXRvci5nZXQoKTsKLQotICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIHRvIGJlIHNhZmUgdG8gY2FsbCBvbiBzaHV0ZG93biwK
LSAgLy8gc28gd2UgbXVzdCBsZWFrIHRoZSBtdXRleC4KLSAgc3RhdGljIEluZGVzdHJ1Y3RpYmxl
PHN0ZDo6bXV0ZXg+IG1wcm90ZWN0TXV0ZXg7Ci0gIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4
PiBsZygqbXByb3RlY3RNdXRleCk7Ci0KLSAgaW50IHIgPSAwOwotCi0gIC8vIFdlIHdhbnQgdG8g
ZG93bmdyYWRlIHRoZSBwYWdlIHdoaWxlIGl0IGlzIHJlc2lkZW50LiBUbyBkbyB0aGF0LCBpdCBt
dXN0Ci0gIC8vIGZpcnN0IGJlIHVwZ3JhZGVkIGFuZCBmb3JjZWQgdG8gYmUgcmVzaWRlbnQuCi0g
IHIgPSBtcHJvdGVjdChkdW1teVBhZ2UsIDEsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwotICBj
aGVja1VuaXhFcnJvcihyLCAibXByb3RlY3QiKTsKLQotICAvLyBGb3JjZSB0aGUgcGFnZSB0byBi
ZSByZXNpZGVudC4gSWYgaXQgaXMgYWxyZWFkeSByZXNpZGVudCwgYWxtb3N0IG5vLW9wLgotICAq
c3RhdGljX2Nhc3Q8Y2hhcio+KGR1bW15UGFnZSkgPSAwOwotCi0gIC8vIERvd25ncmFkZSB0aGUg
cGFnZS4gRm9yY2VzIGEgbWVtb3J5IGJhcnJpZXIgaW4gZXZlcnkgY29yZSBydW5uaW5nIGFueQot
ICAvLyBvZiB0aGUgcHJvY2VzcydzIHRocmVhZHMuIE9uIGEgc2FuZSBwbGF0Zm9ybS4KLSAgciA9
IG1wcm90ZWN0KGR1bW15UGFnZSwgMSwgUFJPVF9SRUFEKTsKLSAgY2hlY2tVbml4RXJyb3Iociwg
Im1wcm90ZWN0Iik7Ci19Ci19Ci0KLXZvaWQgYXN5bW1ldHJpY0hlYXZ5QmFycmllcihBTUJGbGFn
cyBmbGFncykgewotICBpZiAoa0lzTGludXgpIHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCB1c2VT
eXNNZW1iYXJyaWVyID0gZGV0YWlsOjpzeXNNZW1iYXJyaWVyQXZhaWxhYmxlKCk7Ci0gICAgLy8g
c3lzX21lbWJhcnJpZXIgY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQgRVhQRURJVEVECi0gICAg
aWYgKHVzZVN5c01lbWJhcnJpZXIgJiYgZmxhZ3MgIT0gQU1CRmxhZ3M6OkVYUEVESVRFRCkgewot
ICAgICAgYXV0byByID0gZGV0YWlsOjpzeXNNZW1iYXJyaWVyKCk7Ci0gICAgICBjaGVja1VuaXhF
cnJvcihyLCAibWVtYmFycmllciIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBtcHJvdGVjdE1lbWJh
cnJpZXIoKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgc3RkOjphdG9taWNfdGhyZWFkX2ZlbmNl
KHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpOwotICB9Ci19Ci19CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvQXN5bW1l
dHJpY01lbW9yeUJhcnJpZXIuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2ZvbGx5L2V4cGVyaW1lbnRhbC9Bc3ltbWV0cmljTWVtb3J5QmFycmllci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmYWZmYTBiMzcxMmZjODlkMThiOTRjZjJlZjZmZmI4NWJjMzQ2
ZmVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9Bc3ltbWV0
cmljTWVtb3J5QmFycmllci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhl
IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
Ci0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0
dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyBy
ZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdh
cmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
ICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxp
bWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8YXRvbWljPgotCi0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvQXNtLmg+Ci0KLW5h
bWVzcGFjZSBmb2xseSB7Ci0KLWVudW0gY2xhc3MgQU1CRmxhZ3MgewotICBOT1JNQUwsCi0gIEVY
UEVESVRFRCwKLX07Ci0KLUZPTExZX0FMV0FZU19JTkxJTkUgdm9pZCBhc3ltbWV0cmljTGlnaHRC
YXJyaWVyKCkgewotICBpZiAoa0lzTGludXgpIHsKLSAgICBhc21fdm9sYXRpbGVfbWVtb3J5KCk7
Ci0gIH0gZWxzZSB7Ci0gICAgc3RkOjphdG9taWNfdGhyZWFkX2ZlbmNlKHN0ZDo6bWVtb3J5X29y
ZGVyX3NlcV9jc3QpOwotICB9Ci19Ci0KLXZvaWQgYXN5bW1ldHJpY0hlYXZ5QmFycmllcihBTUJG
bGFncyBmbGFncyA9IEFNQkZsYWdzOjpOT1JNQUwpOwotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZXhwZXJpbWVudGFsL1JlYWRNb3N0bHlT
aGFyZWRQdHIuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4
cGVyaW1lbnRhbC9SZWFkTW9zdGx5U2hhcmVkUHRyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDU4MDE1MmFjNDlhZjYyZjlkNWFjYWIxZDIzMjQyMGJhOGNlODQ1NjYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZXhwZXJpbWVudGFsL1JlYWRNb3N0bHlTaGFyZWRQdHIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDQ1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcg
RmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUu
b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywK
LSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg
ZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg
bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIg
dGhlIExpY2Vuc2UuCi0gKi8KLS8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgYy1iYXNp
Yy1vZmZzZXQ6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0gKi8KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSA8YXRvbWljPgotCi0jaW5jbHVkZSA8Zm9sbHkvZXhwZXJpbWVudGFsL1RMUmVm
Q291bnQuaD4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFJlZkNvdW50PgotY2xhc3MgUmVhZE1vc3RseU1haW5QdHI7Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgUmVmQ291bnQ+Ci1jbGFzcyBSZWFkTW9zdGx5V2Vha1B0cjsKLXRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSZWZDb3VudD4KLWNsYXNzIFJlYWRNb3N0bHlT
aGFyZWRQdHI7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgUmVmQ291bnQ+Ci1jbGFzcyBSZWFkTW9zdGx5
TWFpblB0ckRlbGV0ZXI7Ci0KLXVzaW5nIERlZmF1bHRSZWZDb3VudCA9IFRMUmVmQ291bnQ7Ci0K
LW5hbWVzcGFjZSBkZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmVm
Q291bnQgPSBEZWZhdWx0UmVmQ291bnQ+Ci1jbGFzcyBSZWFkTW9zdGx5U2hhcmVkUHRyQ29yZSB7
Ci0gcHVibGljOgotICBUKiBnZXQoKSB7Ci0gICAgcmV0dXJuIHB0clJhd187Ci0gIH0KLQotICBz
dGQ6OnNoYXJlZF9wdHI8VD4gZ2V0U2hhcmVkKCkgewotICAgIHJldHVybiBwdHJfOwotICB9Ci0K
LSAgYm9vbCBpbmNyZWYoKSB7Ci0gICAgcmV0dXJuICsrY291bnRfID4gMDsKLSAgfQotCi0gIHZv
aWQgZGVjcmVmKCkgewotICAgIGlmICgtLWNvdW50XyA9PSAwKSB7Ci0gICAgICBwdHJSYXdfID0g
bnVsbHB0cjsKLSAgICAgIHB0cl8ucmVzZXQoKTsKLQotICAgICAgZGVjcmVmV2VhaygpOwotICAg
IH0KLSAgfQotCi0gIHZvaWQgaW5jcmVmV2VhaygpIHsKLSAgICBhdXRvIHZhbHVlID0gKyt3ZWFr
Q291bnRfOwotICAgIERDSEVDS19HVCh2YWx1ZSwgMCk7Ci0gIH0KLQotICB2b2lkIGRlY3JlZldl
YWsoKSB7Ci0gICAgaWYgKC0td2Vha0NvdW50XyA9PSAwKSB7Ci0gICAgICBkZWxldGUgdGhpczsK
LSAgICB9Ci0gIH0KLQotICBzaXplX3QgdXNlQ291bnQoKSBjb25zdCB7Ci0gICAgcmV0dXJuICpj
b3VudF87Ci0gIH0KLQotICB+UmVhZE1vc3RseVNoYXJlZFB0ckNvcmUoKSBub2V4Y2VwdCB7Ci0g
ICAgYXNzZXJ0KCpjb3VudF8gPT0gMCk7Ci0gICAgYXNzZXJ0KCp3ZWFrQ291bnRfID09IDApOwot
ICB9Ci0KLSBwcml2YXRlOgotICBmcmllbmQgY2xhc3MgUmVhZE1vc3RseU1haW5QdHI8VCwgUmVm
Q291bnQ+OwotICBmcmllbmQgY2xhc3MgUmVhZE1vc3RseU1haW5QdHJEZWxldGVyPFJlZkNvdW50
PjsKLQotICBleHBsaWNpdCBSZWFkTW9zdGx5U2hhcmVkUHRyQ29yZShzdGQ6OnNoYXJlZF9wdHI8
VD4gcHRyKSA6Ci0gICAgICBwdHJSYXdfKHB0ci5nZXQoKSksCi0gICAgICBwdHJfKHN0ZDo6bW92
ZShwdHIpKSB7Ci0gIH0KLQotICBUKiBwdHJSYXdfOwotICBSZWZDb3VudCBjb3VudF87Ci0gIFJl
ZkNvdW50IHdlYWtDb3VudF87Ci0gIHN0ZDo6c2hhcmVkX3B0cjxUPiBwdHJfOwotfTsKLQotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmVmQ291bnQgPSBEZWZhdWx0UmVmQ291
bnQ+Ci1jbGFzcyBSZWFkTW9zdGx5TWFpblB0ciB7Ci0gcHVibGljOgotICBSZWFkTW9zdGx5TWFp
blB0cigpIHsKLSAgfQotCi0gIGV4cGxpY2l0IFJlYWRNb3N0bHlNYWluUHRyKHN0ZDo6c2hhcmVk
X3B0cjxUPiBwdHIpIHsKLSAgICByZXNldChzdGQ6Om1vdmUocHRyKSk7Ci0gIH0KLQotICBSZWFk
TW9zdGx5TWFpblB0cihjb25zdCBSZWFkTW9zdGx5TWFpblB0ciYpID0gZGVsZXRlOwotICBSZWFk
TW9zdGx5TWFpblB0ciYgb3BlcmF0b3I9KGNvbnN0IFJlYWRNb3N0bHlNYWluUHRyJikgPSBkZWxl
dGU7Ci0KLSAgUmVhZE1vc3RseU1haW5QdHIoUmVhZE1vc3RseU1haW5QdHImJiBvdGhlcikgbm9l
eGNlcHQgewotICAgICp0aGlzID0gc3RkOjptb3ZlKG90aGVyKTsKLSAgfQotCi0gIFJlYWRNb3N0
bHlNYWluUHRyJiBvcGVyYXRvcj0oUmVhZE1vc3RseU1haW5QdHImJiBvdGhlcikgbm9leGNlcHQg
ewotICAgIHN0ZDo6c3dhcChpbXBsXywgb3RoZXIuaW1wbF8pOwotCi0gICAgcmV0dXJuICp0aGlz
OwotICB9Ci0KLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlYWRNb3N0bHlNYWluUHRyPFQsIFJl
ZkNvdW50PiYgb3RoZXIpIGNvbnN0IHsKLSAgICByZXR1cm4gZ2V0KCkgPT0gb3RoZXIuZ2V0KCk7
Ci0gIH0KLQotICBib29sIG9wZXJhdG9yPT0oVCogb3RoZXIpIGNvbnN0IHsKLSAgICByZXR1cm4g
Z2V0KCkgPT0gb3RoZXI7Ci0gIH0KLQotICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVhZE1vc3Rs
eVNoYXJlZFB0cjxULCBSZWZDb3VudD4mIG90aGVyKSBjb25zdCB7Ci0gICAgcmV0dXJuIGdldCgp
ID09IG90aGVyLmdldCgpOwotICB9Ci0KLSAgflJlYWRNb3N0bHlNYWluUHRyKCkgbm9leGNlcHQg
ewotICAgIHJlc2V0KCk7Ci0gIH0KLQotICB2b2lkIHJlc2V0KCkgbm9leGNlcHQgewotICAgIGlm
IChpbXBsXykgewotICAgICAgaW1wbF8tPmNvdW50Xy51c2VHbG9iYWwoKTsKLSAgICAgIGltcGxf
LT53ZWFrQ291bnRfLnVzZUdsb2JhbCgpOwotICAgICAgaW1wbF8tPmRlY3JlZigpOwotICAgICAg
aW1wbF8gPSBudWxscHRyOwotICAgIH0KLSAgfQotCi0gIHZvaWQgcmVzZXQoc3RkOjpzaGFyZWRf
cHRyPFQ+IHB0cikgewotICAgIHJlc2V0KCk7Ci0gICAgaWYgKHB0cikgewotICAgICAgaW1wbF8g
PSBuZXcgZGV0YWlsOjpSZWFkTW9zdGx5U2hhcmVkUHRyQ29yZTxULCBSZWZDb3VudD4oc3RkOjpt
b3ZlKHB0cikpOwotICAgIH0KLSAgfQotCi0gIFQqIGdldCgpIGNvbnN0IHsKLSAgICBpZiAoaW1w
bF8pIHsKLSAgICAgIHJldHVybiBpbXBsXy0+cHRyUmF3XzsKLSAgICB9IGVsc2UgewotICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICB9Ci0KLSAgc3RkOjpzaGFyZWRfcHRyPFQ+IGdldFN0
ZFNoYXJlZCgpIGNvbnN0IHsKLSAgICBpZiAoaW1wbF8pIHsKLSAgICAgIHJldHVybiBpbXBsXy0+
Z2V0U2hhcmVkKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiB7fTsKLSAgICB9Ci0gIH0K
LQotICBUJiBvcGVyYXRvciooKSBjb25zdCB7Ci0gICAgcmV0dXJuICpnZXQoKTsKLSAgfQotCi0g
IFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7Ci0gICAgcmV0dXJuIGdldCgpOwotICB9Ci0KLSAgUmVh
ZE1vc3RseVNoYXJlZFB0cjxULCBSZWZDb3VudD4gZ2V0U2hhcmVkKCkgY29uc3QgewotICAgIHJl
dHVybiBSZWFkTW9zdGx5U2hhcmVkUHRyPFQsIFJlZkNvdW50PigqdGhpcyk7Ci0gIH0KLQotICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgewotICAgIHJldHVybiBpbXBsXyAhPSBudWxs
cHRyOwotICB9Ci0KLSBwcml2YXRlOgotICBmcmllbmQgY2xhc3MgUmVhZE1vc3RseVdlYWtQdHI8
VCwgUmVmQ291bnQ+OwotICBmcmllbmQgY2xhc3MgUmVhZE1vc3RseVNoYXJlZFB0cjxULCBSZWZD
b3VudD47Ci0gIGZyaWVuZCBjbGFzcyBSZWFkTW9zdGx5TWFpblB0ckRlbGV0ZXI8UmVmQ291bnQ+
OwotCi0gIGRldGFpbDo6UmVhZE1vc3RseVNoYXJlZFB0ckNvcmU8VCwgUmVmQ291bnQ+KiBpbXBs
X3tudWxscHRyfTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSZWZDb3Vu
dCA9IERlZmF1bHRSZWZDb3VudD4KLWNsYXNzIFJlYWRNb3N0bHlXZWFrUHRyIHsKLSBwdWJsaWM6
Ci0gIFJlYWRNb3N0bHlXZWFrUHRyKCkge30KLQotICBleHBsaWNpdCBSZWFkTW9zdGx5V2Vha1B0
cihjb25zdCBSZWFkTW9zdGx5TWFpblB0cjxULCBSZWZDb3VudD4mIG1haW5QdHIpIHsKLSAgICBy
ZXNldChtYWluUHRyLmltcGxfKTsKLSAgfQotCi0gIGV4cGxpY2l0IFJlYWRNb3N0bHlXZWFrUHRy
KGNvbnN0IFJlYWRNb3N0bHlTaGFyZWRQdHI8VCwgUmVmQ291bnQ+JiBwdHIpIHsKLSAgICByZXNl
dChwdHIuaW1wbF8pOwotICB9Ci0KLSAgUmVhZE1vc3RseVdlYWtQdHIoY29uc3QgUmVhZE1vc3Rs
eVdlYWtQdHImIG90aGVyKSB7Ci0gICAgKnRoaXMgPSBvdGhlcjsKLSAgfQotCi0gIFJlYWRNb3N0
bHlXZWFrUHRyJiBvcGVyYXRvcj0oY29uc3QgUmVhZE1vc3RseVdlYWtQdHImIG90aGVyKSB7Ci0g
ICAgcmVzZXQob3RoZXIuaW1wbF8pOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIFJlYWRN
b3N0bHlXZWFrUHRyJiBvcGVyYXRvcj0oY29uc3QgUmVhZE1vc3RseU1haW5QdHI8VCwgUmVmQ291
bnQ+JiBtYWluUHRyKSB7Ci0gICAgcmVzZXQobWFpblB0ci5pbXBsXyk7Ci0gICAgcmV0dXJuICp0
aGlzOwotICB9Ci0KLSAgUmVhZE1vc3RseVdlYWtQdHIoUmVhZE1vc3RseVdlYWtQdHImJiBvdGhl
cikgbm9leGNlcHQgewotICAgICp0aGlzID0gb3RoZXI7Ci0gIH0KLQotICBSZWFkTW9zdGx5V2Vh
a1B0ciYgb3BlcmF0b3I9KFJlYWRNb3N0bHlXZWFrUHRyJiYgb3RoZXIpIG5vZXhjZXB0IHsKLSAg
ICBzdGQ6OnN3YXAoaW1wbF8sIG90aGVyLmltcGxfKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0K
LQotICB+UmVhZE1vc3RseVdlYWtQdHIoKSBub2V4Y2VwdCB7Ci0gICAgcmVzZXQobnVsbHB0cik7
Ci0gIH0KLQotICBSZWFkTW9zdGx5U2hhcmVkUHRyPFQsIFJlZkNvdW50PiBsb2NrKCkgewotICAg
IHJldHVybiBSZWFkTW9zdGx5U2hhcmVkUHRyPFQsIFJlZkNvdW50PigqdGhpcyk7Ci0gIH0KLQot
IHByaXZhdGU6Ci0gIGZyaWVuZCBjbGFzcyBSZWFkTW9zdGx5U2hhcmVkUHRyPFQsIFJlZkNvdW50
PjsKLQotICB2b2lkIHJlc2V0KGRldGFpbDo6UmVhZE1vc3RseVNoYXJlZFB0ckNvcmU8VCwgUmVm
Q291bnQ+KiBpbXBsKSB7Ci0gICAgaWYgKGltcGxfKSB7Ci0gICAgICBpbXBsXy0+ZGVjcmVmV2Vh
aygpOwotICAgIH0KLSAgICBpbXBsXyA9IGltcGw7Ci0gICAgaWYgKGltcGxfKSB7Ci0gICAgICBp
bXBsXy0+aW5jcmVmV2VhaygpOwotICAgIH0KLSAgfQotCi0gIGRldGFpbDo6UmVhZE1vc3RseVNo
YXJlZFB0ckNvcmU8VCwgUmVmQ291bnQ+KiBpbXBsX3tudWxscHRyfTsKLX07Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSZWZDb3VudCA9IERlZmF1bHRSZWZDb3VudD4KLWNsYXNz
IFJlYWRNb3N0bHlTaGFyZWRQdHIgewotIHB1YmxpYzoKLSAgUmVhZE1vc3RseVNoYXJlZFB0cigp
IHt9Ci0KLSAgZXhwbGljaXQgUmVhZE1vc3RseVNoYXJlZFB0cihjb25zdCBSZWFkTW9zdGx5V2Vh
a1B0cjxULCBSZWZDb3VudD4mIHdlYWtQdHIpIHsKLSAgICByZXNldCh3ZWFrUHRyLmltcGxfKTsK
LSAgfQotCi0gIC8vIEdlbmVyYWxseSwgdGhpcyBzaG91bGRuJ3QgYmUgdXNlZC4KLSAgZXhwbGlj
aXQgUmVhZE1vc3RseVNoYXJlZFB0cihjb25zdCBSZWFkTW9zdGx5TWFpblB0cjxULCBSZWZDb3Vu
dD4mIG1haW5QdHIpIHsKLSAgICByZXNldChtYWluUHRyLmltcGxfKTsKLSAgfQotCi0gIFJlYWRN
b3N0bHlTaGFyZWRQdHIoY29uc3QgUmVhZE1vc3RseVNoYXJlZFB0ciYgb3RoZXIpIHsKLSAgICAq
dGhpcyA9IG90aGVyOwotICB9Ci0KLSAgUmVhZE1vc3RseVNoYXJlZFB0ciYgb3BlcmF0b3I9KGNv
bnN0IFJlYWRNb3N0bHlTaGFyZWRQdHImIG90aGVyKSB7Ci0gICAgcmVzZXQob3RoZXIuaW1wbF8p
OwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIFJlYWRNb3N0bHlTaGFyZWRQdHImIG9wZXJh
dG9yPShjb25zdCBSZWFkTW9zdGx5V2Vha1B0cjxULCBSZWZDb3VudD4mIG90aGVyKSB7Ci0gICAg
cmVzZXQob3RoZXIuaW1wbF8pOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIFJlYWRNb3N0
bHlTaGFyZWRQdHImIG9wZXJhdG9yPShjb25zdCBSZWFkTW9zdGx5TWFpblB0cjxULCBSZWZDb3Vu
dD4mIG90aGVyKSB7Ci0gICAgcmVzZXQob3RoZXIuaW1wbF8pOwotICAgIHJldHVybiAqdGhpczsK
LSAgfQotCi0gIFJlYWRNb3N0bHlTaGFyZWRQdHIoUmVhZE1vc3RseVNoYXJlZFB0ciYmIG90aGVy
KSBub2V4Y2VwdCB7Ci0gICAgKnRoaXMgPSBzdGQ6Om1vdmUob3RoZXIpOwotICB9Ci0KLSAgflJl
YWRNb3N0bHlTaGFyZWRQdHIoKSBub2V4Y2VwdCB7Ci0gICAgcmVzZXQobnVsbHB0cik7Ci0gIH0K
LQotICBSZWFkTW9zdGx5U2hhcmVkUHRyJiBvcGVyYXRvcj0oUmVhZE1vc3RseVNoYXJlZFB0ciYm
IG90aGVyKSBub2V4Y2VwdCB7Ci0gICAgc3RkOjpzd2FwKHB0cl8sIG90aGVyLnB0cl8pOwotICAg
IHN0ZDo6c3dhcChpbXBsXywgb3RoZXIuaW1wbF8pOwotICAgIHJldHVybiAqdGhpczsKLSAgfQot
Ci0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWFkTW9zdGx5TWFpblB0cjxULCBSZWZDb3VudD4m
IG90aGVyKSBjb25zdCB7Ci0gICAgcmV0dXJuIGdldCgpID09IG90aGVyLmdldCgpOwotICB9Ci0K
LSAgYm9vbCBvcGVyYXRvcj09KFQqIG90aGVyKSBjb25zdCB7Ci0gICAgcmV0dXJuIGdldCgpID09
IG90aGVyOwotICB9Ci0KLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlYWRNb3N0bHlTaGFyZWRQ
dHI8VCwgUmVmQ291bnQ+JiBvdGhlcikgY29uc3QgewotICAgIHJldHVybiBnZXQoKSA9PSBvdGhl
ci5nZXQoKTsKLSAgfQotCi0gIHZvaWQgcmVzZXQoKSB7Ci0gICAgcmVzZXQobnVsbHB0cik7Ci0g
IH0KLQotICBUKiBnZXQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHB0cl87Ci0gIH0KLQotICBzdGQ6
OnNoYXJlZF9wdHI8VD4gZ2V0U3RkU2hhcmVkKCkgY29uc3QgewotICAgIGlmIChpbXBsXykgewot
ICAgICAgcmV0dXJuIGltcGxfLT5nZXRTaGFyZWQoKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0
dXJuIHt9OwotICAgIH0KLSAgfQotCi0gIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsKLSAgICByZXR1
cm4gKmdldCgpOwotICB9Ci0KLSAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsKLSAgICByZXR1cm4g
Z2V0KCk7Ci0gIH0KLQotICBzaXplX3QgdXNlX2NvdW50KCkgY29uc3QgewotICAgIHJldHVybiBp
bXBsXy0+dXNlQ291bnQoKTsKLSAgfQotCi0gIGJvb2wgdW5pcXVlKCkgY29uc3QgewotICAgIHJl
dHVybiB1c2VfY291bnQoKSA9PSAxOwotICB9Ci0KLSAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsKLSAgICByZXR1cm4gaW1wbF8gIT0gbnVsbHB0cjsKLSAgfQotCi0gcHJpdmF0ZToK
LSAgZnJpZW5kIGNsYXNzIFJlYWRNb3N0bHlXZWFrUHRyPFQsIFJlZkNvdW50PjsKLQotICB2b2lk
IHJlc2V0KGRldGFpbDo6UmVhZE1vc3RseVNoYXJlZFB0ckNvcmU8VCwgUmVmQ291bnQ+KiBpbXBs
KSB7Ci0gICAgaWYgKGltcGxfKSB7Ci0gICAgICBpbXBsXy0+ZGVjcmVmKCk7Ci0gICAgICBpbXBs
XyA9IG51bGxwdHI7Ci0gICAgICBwdHJfID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoaW1w
bCAmJiBpbXBsLT5pbmNyZWYoKSkgewotICAgICAgaW1wbF8gPSBpbXBsOwotICAgICAgcHRyXyA9
IGltcGwtPmdldCgpOwotICAgIH0KLSAgfQotCi0gIFQqIHB0cl97bnVsbHB0cn07Ci0gIGRldGFp
bDo6UmVhZE1vc3RseVNoYXJlZFB0ckNvcmU8VCwgUmVmQ291bnQ+KiBpbXBsX3tudWxscHRyfTsK
LX07Ci0KLS8qKgotICogVGhpcyBjYW4gYmUgdXNlZCB0byBkZXN0cm95IG11bHRpcGxlIFJlYWRN
b3N0bHlNYWluUHRycyBhdCBvbmNlLgotICovCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUmVmQ291bnQg
PSBEZWZhdWx0UmVmQ291bnQ+Ci1jbGFzcyBSZWFkTW9zdGx5TWFpblB0ckRlbGV0ZXIgewotIHB1
YmxpYzoKLSAgflJlYWRNb3N0bHlNYWluUHRyRGVsZXRlcigpIG5vZXhjZXB0IHsKLSAgICBSZWZD
b3VudDo6dXNlR2xvYmFsKHJlZkNvdW50c18pOwotICAgIGZvciAoYXV0byYgZGVjcmVmIDogZGVj
cmVmc18pIHsKLSAgICAgIGRlY3JlZigpOwotICAgIH0KLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotICB2b2lkIGFkZChSZWFkTW9zdGx5TWFpblB0cjxULCBSZWZDb3VudD4gcHRyKSBu
b2V4Y2VwdCB7Ci0gICAgaWYgKCFwdHIuaW1wbF8pIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICByZWZDb3VudHNfLnB1c2hfYmFjaygmcHRyLmltcGxfLT5jb3VudF8pOwotICAgIHJlZkNv
dW50c18ucHVzaF9iYWNrKCZwdHIuaW1wbF8tPndlYWtDb3VudF8pOwotICAgIGRlY3JlZnNfLnB1
c2hfYmFjayhbaW1wbCA9IHB0ci5pbXBsX10geyBpbXBsLT5kZWNyZWYoKTsgfSk7Ci0gICAgcHRy
LmltcGxfID0gbnVsbHB0cjsKLSAgfQotCi0gcHJpdmF0ZToKLSAgc3RkOjp2ZWN0b3I8UmVmQ291
bnQqPiByZWZDb3VudHNfOwotICBzdGQ6OnZlY3Rvcjxmb2xseTo6RnVuY3Rpb248dm9pZCgpPj4g
ZGVjcmVmc187Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmVmQ291bnQ+
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KAotICAgIGNvbnN0IFJlYWRNb3N0bHlNYWluUHRyPFQs
IFJlZkNvdW50PiYgcHRyLAotICAgIHN0ZDo6bnVsbHB0cl90KSB7Ci0gIHJldHVybiBwdHIuZ2V0
KCkgPT0gbnVsbHB0cjsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJlZkNv
dW50PgotaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKLSAgICBzdGQ6Om51bGxwdHJfdCwKLSAgICBj
b25zdCBSZWFkTW9zdGx5TWFpblB0cjxULCBSZWZDb3VudD4mIHB0cikgewotICByZXR1cm4gcHRy
LmdldCgpID09IG51bGxwdHI7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBS
ZWZDb3VudD4KLWlubGluZSBib29sIG9wZXJhdG9yPT0oCi0gICAgY29uc3QgUmVhZE1vc3RseVNo
YXJlZFB0cjxULCBSZWZDb3VudD4mIHB0ciwKLSAgICBzdGQ6Om51bGxwdHJfdCkgewotICByZXR1
cm4gcHRyLmdldCgpID09IG51bGxwdHI7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBSZWZDb3VudD4KLWlubGluZSBib29sIG9wZXJhdG9yPT0oCi0gICAgc3RkOjpudWxscHRy
X3QsCi0gICAgY29uc3QgUmVhZE1vc3RseVNoYXJlZFB0cjxULCBSZWZDb3VudD4mIHB0cikgewot
ICByZXR1cm4gcHRyLmdldCgpID09IG51bGxwdHI7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBSZWZDb3VudD4KLWlubGluZSBib29sIG9wZXJhdG9yIT0oCi0gICAgY29uc3Qg
UmVhZE1vc3RseU1haW5QdHI8VCwgUmVmQ291bnQ+JiBwdHIsCi0gICAgc3RkOjpudWxscHRyX3Qp
IHsKLSAgcmV0dXJuICEocHRyID09IG51bGxwdHIpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgUmVmQ291bnQ+Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KAotICAgIHN0ZDo6
bnVsbHB0cl90LAotICAgIGNvbnN0IFJlYWRNb3N0bHlNYWluUHRyPFQsIFJlZkNvdW50PiYgcHRy
KSB7Ci0gIHJldHVybiAhKHB0ciA9PSBudWxscHRyKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFJlZkNvdW50PgotaW5saW5lIGJvb2wgb3BlcmF0b3IhPSgKLSAgICBjb25z
dCBSZWFkTW9zdGx5U2hhcmVkUHRyPFQsIFJlZkNvdW50PiYgcHRyLAotICAgIHN0ZDo6bnVsbHB0
cl90KSB7Ci0gIHJldHVybiAhKHB0ciA9PSBudWxscHRyKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFJlZkNvdW50PgotaW5saW5lIGJvb2wgb3BlcmF0b3IhPSgKLSAgICBz
dGQ6Om51bGxwdHJfdCwKLSAgICBjb25zdCBSZWFkTW9zdGx5U2hhcmVkUHRyPFQsIFJlZkNvdW50
PiYgcHRyKSB7Ci0gIHJldHVybiAhKHB0ciA9PSBudWxscHRyKTsKLX0KLX0KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9U
TFJlZkNvdW50LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9l
eHBlcmltZW50YWwvVExSZWZDb3VudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
ZTJhMWRhNTIxM2IzMzBhYWIxNTA1MDU2YzIxODcyM2NlNzBlOGE3Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9UTFJlZkNvdW50LmgKKysrIC9kZXYvbnVsbApA
QCAtMSwyMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0g
KgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
ICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
TlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICov
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGZvbGx5L1RocmVhZExvY2FsLmg+Ci0jaW5jbHVk
ZSA8Zm9sbHkvZXhwZXJpbWVudGFsL0FzeW1tZXRyaWNNZW1vcnlCYXJyaWVyLmg+Ci0KLW5hbWVz
cGFjZSBmb2xseSB7Ci0KLWNsYXNzIFRMUmVmQ291bnQgewotIHB1YmxpYzoKLSAgdXNpbmcgSW50
ID0gaW50NjRfdDsKLQotICBUTFJlZkNvdW50KCkKLSAgICAgIDogbG9jYWxDb3VudF8oWyZdKCkg
eyByZXR1cm4gbmV3IExvY2FsUmVmQ291bnQoKnRoaXMpOyB9KSwKLSAgICAgICAgY29sbGVjdEd1
YXJkXyh0aGlzLCBbXSh2b2lkKikge30pIHt9Ci0KLSAgflRMUmVmQ291bnQoKSBub2V4Y2VwdCB7
Ci0gICAgYXNzZXJ0KGdsb2JhbENvdW50Xy5sb2FkKCkgPT0gMCk7Ci0gICAgYXNzZXJ0KHN0YXRl
Xy5sb2FkKCkgPT0gU3RhdGU6OkdMT0JBTCk7Ci0gIH0KLQotICAvLyBUaGlzIGNhbid0IGluY3Jl
bWVudCBmcm9tIDAuCi0gIEludCBvcGVyYXRvcisrKCkgbm9leGNlcHQgewotICAgIGF1dG8mIGxv
Y2FsQ291bnQgPSAqbG9jYWxDb3VudF87Ci0KLSAgICBpZiAoKytsb2NhbENvdW50KSB7Ci0gICAg
ICByZXR1cm4gNDI7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlXy5sb2FkKCkgPT0gU3RhdGU6OkdM
T0JBTF9UUkFOU0lUSU9OKSB7Ci0gICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGco
Z2xvYmFsTXV0ZXhfKTsKLSAgICB9Ci0KLSAgICBhc3NlcnQoc3RhdGVfLmxvYWQoKSA9PSBTdGF0
ZTo6R0xPQkFMKTsKLQotICAgIGF1dG8gdmFsdWUgPSBnbG9iYWxDb3VudF8ubG9hZCgpOwotICAg
IGRvIHsKLSAgICAgIGlmICh2YWx1ZSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAg
fQotICAgIH0gd2hpbGUgKCFnbG9iYWxDb3VudF8uY29tcGFyZV9leGNoYW5nZV93ZWFrKHZhbHVl
LCB2YWx1ZSsxKSk7Ci0KLSAgICByZXR1cm4gdmFsdWUgKyAxOwotICB9Ci0KLSAgSW50IG9wZXJh
dG9yLS0oKSBub2V4Y2VwdCB7Ci0gICAgYXV0byYgbG9jYWxDb3VudCA9ICpsb2NhbENvdW50XzsK
LQotICAgIGlmICgtLWxvY2FsQ291bnQpIHsKLSAgICAgIHJldHVybiA0MjsKLSAgICB9Ci0KLSAg
ICBpZiAoc3RhdGVfLmxvYWQoKSA9PSBTdGF0ZTo6R0xPQkFMX1RSQU5TSVRJT04pIHsKLSAgICAg
IHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsZyhnbG9iYWxNdXRleF8pOwotICAgIH0KLQot
ICAgIGFzc2VydChzdGF0ZV8ubG9hZCgpID09IFN0YXRlOjpHTE9CQUwpOwotCi0gICAgcmV0dXJu
IGdsb2JhbENvdW50Xy0tIC0gMTsKLSAgfQotCi0gIEludCBvcGVyYXRvciooKSBjb25zdCB7Ci0g
ICAgaWYgKHN0YXRlXyAhPSBTdGF0ZTo6R0xPQkFMKSB7Ci0gICAgICByZXR1cm4gNDI7Ci0gICAg
fQotICAgIHJldHVybiBnbG9iYWxDb3VudF8ubG9hZCgpOwotICB9Ci0KLSAgdm9pZCB1c2VHbG9i
YWwoKSBub2V4Y2VwdCB7Ci0gICAgc3RkOjphcnJheTxUTFJlZkNvdW50KiwgMT4gcHRyc3t7dGhp
c319OwotICAgIHVzZUdsb2JhbChwdHJzKTsKLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBD
b250YWluZXI+Ci0gIHN0YXRpYyB2b2lkIHVzZUdsb2JhbChjb25zdCBDb250YWluZXImIHJlZkNv
dW50UHRycykgewotI2lmZGVmIEZPTExZX1NBTklUSVpFX1RIUkVBRAotICAgIC8vIFRTQU4gaGFz
IGEgbGltaXRhdGlvbiBmb3IgdGhlIG51bWJlciBvZiBsb2NrcyBoZWxkIGNvbmN1cnJlbnRseSwg
c28gaXQncwotICAgIC8vIHNhZmVyIHRvIGNhbGwgdXNlR2xvYmFsKCkgc2VyaWFsbHkuCi0gICAg
aWYgKHJlZkNvdW50UHRycy5zaXplKCkgPiAxKSB7Ci0gICAgICBmb3IgKGF1dG8gcmVmQ291bnRQ
dHIgOiByZWZDb3VudFB0cnMpIHsKLSAgICAgICAgcmVmQ291bnRQdHItPnVzZUdsb2JhbCgpOwot
ICAgICAgfQotICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgc3RkOjp2ZWN0b3I8
c3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4Pj4gbGdzXzsKLSAgICBmb3IgKGF1dG8gcmVmQ291
bnRQdHIgOiByZWZDb3VudFB0cnMpIHsKLSAgICAgIGxnc18uZW1wbGFjZV9iYWNrKHJlZkNvdW50
UHRyLT5nbG9iYWxNdXRleF8pOwotCi0gICAgICByZWZDb3VudFB0ci0+c3RhdGVfID0gU3RhdGU6
OkdMT0JBTF9UUkFOU0lUSU9OOwotICAgIH0KLQotICAgIGFzeW1tZXRyaWNIZWF2eUJhcnJpZXIo
KTsKLQotICAgIGZvciAoYXV0byByZWZDb3VudFB0ciA6IHJlZkNvdW50UHRycykgewotICAgICAg
c3RkOjp3ZWFrX3B0cjx2b2lkPiBjb2xsZWN0R3VhcmRXZWFrID0gcmVmQ291bnRQdHItPmNvbGxl
Y3RHdWFyZF87Ci0KLSAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4ndCBjcmVhdGUgbmV3IExvY2Fs
UmVmQ291bnRzCi0gICAgICByZWZDb3VudFB0ci0+Y29sbGVjdEd1YXJkXy5yZXNldCgpOwotCi0g
ICAgICB3aGlsZSAoIWNvbGxlY3RHdWFyZFdlYWsuZXhwaXJlZCgpKSB7Ci0gICAgICAgIGF1dG8g
YWNjZXNzb3IgPSByZWZDb3VudFB0ci0+bG9jYWxDb3VudF8uYWNjZXNzQWxsVGhyZWFkcygpOwot
ICAgICAgICBmb3IgKGF1dG8mIGNvdW50IDogYWNjZXNzb3IpIHsKLSAgICAgICAgICBjb3VudC5j
b2xsZWN0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmVmQ291bnRQdHItPnN0YXRl
XyA9IFN0YXRlOjpHTE9CQUw7Ci0gICAgfQotICB9Ci0KLSBwcml2YXRlOgotICB1c2luZyBBdG9t
aWNJbnQgPSBzdGQ6OmF0b21pYzxJbnQ+OwotCi0gIGVudW0gY2xhc3MgU3RhdGUgewotICAgIExP
Q0FMLAotICAgIEdMT0JBTF9UUkFOU0lUSU9OLAotICAgIEdMT0JBTAotICB9OwotCi0gIGNsYXNz
IExvY2FsUmVmQ291bnQgewotICAgcHVibGljOgotICAgIGV4cGxpY2l0IExvY2FsUmVmQ291bnQo
VExSZWZDb3VudCYgcmVmQ291bnQpIDoKLSAgICAgICAgcmVmQ291bnRfKHJlZkNvdW50KSB7Ci0g
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGcocmVmQ291bnQuZ2xvYmFsTXV0ZXhf
KTsKLQotICAgICAgY29sbGVjdEd1YXJkXyA9IHJlZkNvdW50LmNvbGxlY3RHdWFyZF87Ci0gICAg
fQotCi0gICAgfkxvY2FsUmVmQ291bnQoKSB7Ci0gICAgICBjb2xsZWN0KCk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjb2xsZWN0KCkgewotICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxn
KGNvbGxlY3RNdXRleF8pOwotCi0gICAgICBpZiAoIWNvbGxlY3RHdWFyZF8pIHsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfQotCi0gICAgICBjb2xsZWN0Q291bnRfID0gY291bnRfLmxvYWQoKTsK
LSAgICAgIHJlZkNvdW50Xy5nbG9iYWxDb3VudF8uZmV0Y2hfYWRkKGNvbGxlY3RDb3VudF8pOwot
ICAgICAgY29sbGVjdEd1YXJkXy5yZXNldCgpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3Ir
KygpIHsKLSAgICAgIHJldHVybiB1cGRhdGUoMSk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRv
ci0tKCkgewotICAgICAgcmV0dXJuIHVwZGF0ZSgtMSk7Ci0gICAgfQotCi0gICBwcml2YXRlOgot
ICAgIGJvb2wgdXBkYXRlKEludCBkZWx0YSkgewotICAgICAgaWYgKFVOTElLRUxZKHJlZkNvdW50
Xy5zdGF0ZV8ubG9hZCgpICE9IFN0YXRlOjpMT0NBTCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgfQotCi0gICAgICAvLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYXRvbWljIGZldGNo
X2FkZC4gV2Uga25vdyB0aGF0IHRoaXMgb3BlcmF0aW9uCi0gICAgICAvLyBpcyBhbHdheXMgcGVy
Zm9ybWVkIGZyb20gYSBzaW5nbGUgdGhyZWFkLiBhc3ltbWV0cmljTGlnaHRCYXJyaWVyKCkKLSAg
ICAgIC8vIG1ha2VzIHRoaW5ncyBmYXN0ZXIgdGhhbiBhdG9taWMgZmV0Y2hfYWRkIG9uIHBsYXRm
b3JtcyB3aXRoIG5hdGl2ZQotICAgICAgLy8gc3VwcG9ydC4KLSAgICAgIGF1dG8gY291bnQgPSBj
b3VudF8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSArIGRlbHRhOwotICAgICAgY291
bnRfLnN0b3JlKGNvdW50LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLQotICAgICAgYXN5
bW1ldHJpY0xpZ2h0QmFycmllcigpOwotCi0gICAgICBpZiAoVU5MSUtFTFkocmVmQ291bnRfLnN0
YXRlXy5sb2FkKCkgIT0gU3RhdGU6OkxPQ0FMKSkgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
c3RkOjptdXRleD4gbGcoY29sbGVjdE11dGV4Xyk7Ci0KLSAgICAgICAgaWYgKGNvbGxlY3RHdWFy
ZF8pIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY29s
bGVjdENvdW50XyAhPSBjb3VudCkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgfQotCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBdG9taWNJbnQg
Y291bnRfezB9OwotICAgIFRMUmVmQ291bnQmIHJlZkNvdW50XzsKLQotICAgIHN0ZDo6bXV0ZXgg
Y29sbGVjdE11dGV4XzsKLSAgICBJbnQgY29sbGVjdENvdW50X3swfTsKLSAgICBzdGQ6OnNoYXJl
ZF9wdHI8dm9pZD4gY29sbGVjdEd1YXJkXzsKLSAgfTsKLQotICBzdGQ6OmF0b21pYzxTdGF0ZT4g
c3RhdGVfe1N0YXRlOjpMT0NBTH07Ci0gIGZvbGx5OjpUaHJlYWRMb2NhbDxMb2NhbFJlZkNvdW50
LCBUTFJlZkNvdW50PiBsb2NhbENvdW50XzsKLSAgc3RkOjphdG9taWM8aW50NjRfdD4gZ2xvYmFs
Q291bnRfezF9OwotICBzdGQ6Om11dGV4IGdsb2JhbE11dGV4XzsKLSAgc3RkOjpzaGFyZWRfcHRy
PHZvaWQ+IGNvbGxlY3RHdWFyZF87Ci19OwotCi19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvZmxhdF9jb21iaW5pbmcv
RmxhdENvbWJpbmluZy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9s
bHkvZXhwZXJpbWVudGFsL2ZsYXRfY29tYmluaW5nL0ZsYXRDb21iaW5pbmcuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzU4ZjcwMTFjNWM5MjVhYWY2ZDdiM2U4YTA0MGI4MWQwMTUz
MWU1NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvZmxhdF9j
b21iaW5pbmcvRmxhdENvbWJpbmluZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjgyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICog
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgot
ICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBV
bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
IHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
Ci0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPGZvbGx5L0JhdG9uLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvRnVuY3Rpb24uaD4K
LSNpbmNsdWRlIDxmb2xseS9JbmRleGVkTWVtUG9vbC5oPgotI2luY2x1ZGUgPGZvbGx5L1BvcnRh
YmlsaXR5Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvY29uY3VycmVuY3kvQ2FjaGVMb2NhbGl0eS5oPgot
Ci0jaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8bXV0ZXg+
Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci0KLS8vLyBGbGF0IGNvbWJpbmluZyAoRkMpIHdhcyBpbnRy
b2R1Y2VkIGluIHRoZSBTUEFBIDIwMTAgcGFwZXIgRmxhdAotLy8vIENvbWJpbmluZyBhbmQgdGhl
IFN5bmNocm9uaXphdGlvbi1QYXJhbGxlbGlzbSBUcmFkZW9mZiwgYnkgRGFubnkKLS8vLyBIZW5k
bGVyLCBJdGFpIEluY3plLCBOaXIgU2hhdml0LCBhbmQgTW9yYW4gVHphZnJpci4KLS8vLyBodHRw
Oi8vbWNnLmNzLnRhdS5hYy5pbC9wcm9qZWN0cy9wcm9qZWN0cy9mbGF0LWNvbWJpbmluZwotLy8v
Ci0vLy8gRkMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gY29hcnNlLWdyYWluZWQgbG9ja2luZyBmb3Ig
bWFraW5nCi0vLy8gc2VxdWVudGlhbCBkYXRhIHN0cnVjdHVyZXMgdGhyZWFkLXNhZmUgd2hpbGUg
bWluaW1pemluZyB0aGUKLS8vLyBzeW5jaHJvbml6YXRpb24gb3ZlcmhlYWRzIGFuZCBjYWNoZSBj
b2hlcmVuY2UgdHJhZmZpYyBhc3NvY2lhdGVkCi0vLy8gd2l0aCBsb2NraW5nLgotLy8vCi0vLy8g
VW5kZXIgRkMsIHdoZW4gYSB0aHJlYWQgZmluZHMgdGhlIGxvY2sgY29udGVuZGVkLCBpdCBjYW4K
LS8vLyByZXF1ZXN0ICh1c2luZyBhIHJlcXVlc3QgcmVjb3JkKSB0aGF0IHRoZSBsb2NrIGhvbGRl
ciBleGVjdXRlIGl0cwotLy8vIG9wZXJhdGlvbiBvbiB0aGUgc2hhcmVkIGRhdGEgc3RydWN0dXJl
LiBUaGVyZSBjYW4gYmUgYSBkZXNpZ25hdGVkCi0vLy8gY29tYmluZXIgdGhyZWFkIG9yIGFueSB0
aHJlYWQgY2FuIGFjdCBhcyB0aGUgY29tYmluZXIgd2hlbiBpdAotLy8vIGhvbGRzIHRoZSBsb2Nr
LgotLy8vCi0vLy8gUG90ZW50aWFsIGFkdmFudGFnZXMgb2YgRkMgaW5jbHVkZToKLS8vLyAtIFJl
ZHVjZWQgY2FjaGUgY29oZXJlbmNlIHRyYWZmaWMKLS8vLyAtIFJlZHVjZWQgc3luY2hyb25pemF0
aW9uIG92ZXJoZWFkcywgYXMgdGhlIG92ZXJoZWFkcyBvZiByZWxlYXNpbmcKLS8vLyAgIGFuZCBh
Y3F1aXJpbmcgdGhlIGxvY2sgYXJlIGVsaW1pbmF0ZWQgZnJvbSB0aGUgY3JpdGljYWwgcGF0aCBv
ZgotLy8vICAgb3BlcmF0aW5nIG9uIHRoZSBkYXRhIHN0cnVjdHVyZS4KLS8vLyAtIE9wcG9ydHVu
aXRpZXMgZm9yIHNtYXJ0IGNvbWJpbmluZywgd2hlcmUgZXhlY3V0aW5nIG11bHRpcGxlCi0vLy8g
ICBvcGVyYXRpb25zIHRvZ2V0aGVyIG1heSB0YWtlIGxlc3MgdGltZSB0aGFuIGV4ZWN1dGluZyB0
aGUKLS8vLyAgIG9wZXJhdGlvbnMgc2VwYXJhdGVseSwgZS5nLiwgSyBkZWxldGVfbWluIG9wZXJh
dGlvbnMgb24gYQotLy8vICAgcHJpb3JpdHkgcXVldWUgbWF5IGJlIGNvbWJpbmVkIHRvIHRha2Ug
TyhLICsgbG9nIE4pIHRpbWUgaW5zdGVhZAotLy8vICAgb2YgTyhLICogbG9nIE4pLgotLy8vCi0v
Ly8gVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBmbGF0IGNvbWJpbmluZyBzdXBwb3J0czoKLQotLy8v
IC0gQSBzaW1wbGUgaW50ZXJmYWNlIHRoYXQgcmVxdWlyZXMgbWluaW1hbCBleHRyYSBjb2RlIGJ5
IHRoZQotLy8vICAgdXNlci4gVG8gdXNlIHRoaXMgaW50ZXJmYWNlIGVmZmljaWVudGx5IHRoZSB1
c2VyLXByb3ZpZGVkCi0vLy8gICBmdW5jdGlvbnMgbXVzdCBiZSBjb3B5YWJsZSB0byBmb2xseTo6
RnVuY3Rpb24gd2l0aG91dCBkeW5hbWljCi0vLy8gICBhbGxvY2F0aW9uLiBJZiB0aGlzIGlzIGlt
cG9zc2libGUgb3IgaW5jb252ZW5pZW50LCB0aGUgdXNlciBpcwotLy8vICAgZW5jb3VyYWdlZCB0
byB1c2UgdGhlIGN1c3RvbSBpbnRlcmZhY2UgZGVzY3JpYmVkIGJlbG93LgotLy8vIC0gQSBjdXN0
b20gaW50ZXJmYWNlIHRoYXQgc3VwcG9ydHMgY3VzdG9tIGNvbWJpbmluZyBhbmQgY3VzdG9tCi0v
Ly8gICByZXF1ZXN0IHN0cnVjdHVyZSwgZWl0aGVyIGZvciB0aGUgc2FrZSBvZiBzbWFydCBjb21i
aW5pbmcgb3IgZm9yCi0vLy8gICBlZmZpY2llbnRseSBzdXBwb3J0aW5nIG9wZXJhdGlvbnMgdGhh
dCBhcmUgbm90IGJlIGNvcHlhYmxlIHRvCi0vLy8gICBmb2xseTo6RnVuY3Rpb24gd2l0aG91dCBk
eW5hbWljIGFsbG9jYXRpb24uCi0vLy8gLSBCb3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25v
dXMgb3BlcmF0aW9ucy4KLS8vLyAtIFJlcXVlc3QgcmVjb3JkcyB3aXRoIGFuZCB3aXRob3V0IHRo
cmVhZC1jYWNoaW5nLgotLy8vIC0gQ29tYmluaW5nIHdpdGggYW5kIHdpdGhvdXQgYSBkZWRpY2F0
ZWQgY29tYmluZXIgdGhyZWFkLgotLy8vCi0vLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJz
IGZyb20gdGhlIGFsZ29yaXRobSBpbiB0aGUgU1BBQSAyMDEwIHBhcGVyOgotLy8vIC0gSXQgZG9l
cyBub3QgcmVxdWlyZSB0aHJlYWQgY2FjaGluZyBvZiByZXF1ZXN0IHJlY29yZHMKLS8vLyAtIEl0
IHN1cHBvcnRzIGEgZGVkaWNhdGVkIGNvbWJpbmVyCi0vLy8gLSBJdCBzdXBwb3J0cyBhc3luY2hy
b25vdXMgb3BlcmF0aW9ucwotLy8vCi0vLy8gVGhlIGdlbmVyaWMgRkMgY2xhc3MgdGVtcGxhdGUg
c3VwcG9ydHMgZ2VuZXJpYyBkYXRhIHN0cnVjdHVyZXMgYW5kCi0vLy8gdXRpbGl0aWVzIHdpdGgg
YXJiaXRyYXJ5IG9wZXJhdGlvbnMuIFRoZSB0ZW1wbGF0ZSBzdXBwb3J0cyBzdGF0aWMKLS8vLyBw
b2x5bW9ycGhpc20gZm9yIHRoZSBjb21iaW5pbmcgZnVuY3Rpb24gdG8gZW5hYmxlIGN1c3RvbSBz
bWFydAotLy8vIGNvbWJpbmluZy4KLS8vLwotLy8vIEEgc2ltcGxlIGV4YW1wbGUgb2YgdXNpbmcg
dGhlIEZDIHRlbXBsYXRlOgotLy8vICAgY2xhc3MgQ29uY3VycmVudEZvbyA6IHB1YmxpYyBGbGF0
Q29tYmluaW5nPENvbmN1cnJlbnRGb28+IHsKLS8vLyAgICAgRm9vIGZvb187IC8vIHNlcXVlbnRp
YWwgZGF0YSBzdHJ1Y3R1cmUKLS8vLyAgICBwdWJsaWM6Ci0vLy8gICAgIFQgYmFyKFYmIHYpIHsg
Ly8gdGhyZWFkLXNhZmUgZXhlY3V0aW9uIG9mIGZvb18uYmFyKHYpCi0vLy8gICAgICAgVCByZXN1
bHQ7Ci0vLy8gICAgICAgLy8gTm90ZTogZm4gbXVzdCBiZSBjb3B5YWJsZSB0byBmb2xseTo6RnVu
Y3Rpb24gd2l0aG91dCBkeW5hbWljCi0vLy8gICAgICAgLy8gYWxsb2NhdGlvbi4gT3RoZXJ3aXNl
LCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGN1c3RvbQotLy8vICAgICAgIC8vIGludGVy
ZmFjZSBhbmQgbWFuYWdlIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgYW5kIHJlc3VsdHMKLS8vLyAg
ICAgICAvLyBleHBsaWNpdGx5IGluIGEgY3VzdG9tIHJlcXVlc3Qgc3RydWN0dXJlLgotLy8vICAg
ICAgIGF1dG8gZm4gPSBbJl0geyByZXN1bHQgPSBmb29fLmJhcih2KTsgfTsKLS8vLyAgICAgICB0
aGlzLT5yZXF1ZXN0RkMoZm4pOwotLy8vICAgICAgIHJldHVybiByZXN1bHQ7Ci0vLy8gICAgIH0K
LS8vLyAgIH07Ci0vLy8KLS8vLyBTZWUgdGVzdC9GbGF0Q29tYmluaW5nRXhhbXBsZXMuaCBmb3Ig
bW9yZSBleGFtcGxlcy4gU2VlIHRoZQotLy8vIGNvbW1lbnRzIGZvciByZXF1ZXN0RkMoKSBiZWxv
dyBmb3IgYSBsaXN0IG9mIHNpbXBsZSBhbmQgY3VzdG9tCi0vLy8gdmFyaWFudHMgb2YgdGhhdCBm
dW5jdGlvbi4KLQotdGVtcGxhdGUgPAotICAgIHR5cGVuYW1lIFQsIC8vIGNvbmN1cnJlbnQgZGF0
YSBzdHJ1Y3R1cmUgdXNpbmcgRkMgaW50ZXJmYWNlCi0gICAgdHlwZW5hbWUgTXV0ZXggPSBzdGQ6
Om11dGV4LAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3MgQXRvbSA9IHN0ZDo6YXRvbWlj
LAotICAgIHR5cGVuYW1lIFJlcSA9IC8qIGRlZmF1bHQgZHVtbXkgdHlwZSAqLyBib29sPgotY2xh
c3MgRmxhdENvbWJpbmluZyB7Ci0gIHVzaW5nIFNhdmVkRm4gPSBmb2xseTo6RnVuY3Rpb248dm9p
ZCgpPjsKLQotIHB1YmxpYzoKLSAgLy8vIENvbWJpbmluZyByZXF1ZXN0IHJlY29yZC4KLSAgY2xh
c3MgUmVjIHsKLSAgICBGT0xMWV9BTElHTl9UT19BVk9JRF9GQUxTRV9TSEFSSU5HCi0gICAgZm9s
bHk6OkJhdG9uPEF0b20sIHRydWUsIGZhbHNlPiB2YWxpZF87Ci0gICAgZm9sbHk6OkJhdG9uPEF0
b20sIHRydWUsIGZhbHNlPiBkb25lXzsKLSAgICBmb2xseTo6QmF0b248QXRvbSwgdHJ1ZSwgZmFs
c2U+IGRpc2Nvbm5lY3RlZF87Ci0gICAgc2l6ZV90IGluZGV4XzsKLSAgICBzaXplX3QgbmV4dF87
Ci0gICAgdWludDY0X3QgbGFzdF87Ci0gICAgUmVxIHJlcV87Ci0gICAgU2F2ZWRGbiBmbl87Ci0K
LSAgIHB1YmxpYzoKLSAgICBSZWMoKSB7Ci0gICAgICBzZXREb25lKCk7Ci0gICAgICBzZXREaXNj
b25uZWN0ZWQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFZhbGlkKCkgewotICAgICAgdmFsaWRf
LnBvc3QoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyVmFsaWQoKSB7Ci0gICAgICB2YWxpZF8u
cmVzZXQoKTsKLSAgICB9Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7Ci0gICAgICByZXR1
cm4gdmFsaWRfLnRyeV93YWl0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXREb25lKCkgewotICAg
ICAgZG9uZV8ucG9zdCgpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJEb25lKCkgewotICAgICAg
ZG9uZV8ucmVzZXQoKTsKLSAgICB9Ci0KLSAgICBib29sIGlzRG9uZSgpIGNvbnN0IHsKLSAgICAg
IHJldHVybiBkb25lXy50cnlfd2FpdCgpOwotICAgIH0KLQotICAgIHZvaWQgYXdhaXREb25lKCkg
ewotICAgICAgZG9uZV8ud2FpdCgpOwotICAgIH0KLQotICAgIHZvaWQgc2V0RGlzY29ubmVjdGVk
KCkgewotICAgICAgZGlzY29ubmVjdGVkXy5wb3N0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVh
ckRpc2Nvbm5lY3RlZCgpIHsKLSAgICAgIGRpc2Nvbm5lY3RlZF8ucmVzZXQoKTsKLSAgICB9Ci0K
LSAgICBib29sIGlzRGlzY29ubmVjdGVkKCkgY29uc3QgewotICAgICAgcmV0dXJuIGRpc2Nvbm5l
Y3RlZF8udHJ5X3dhaXQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEluZGV4KGNvbnN0IHNpemVf
dCBpbmRleCkgewotICAgICAgaW5kZXhfID0gaW5kZXg7Ci0gICAgfQotCi0gICAgc2l6ZV90IGdl
dEluZGV4KCkgY29uc3QgewotICAgICAgcmV0dXJuIGluZGV4XzsKLSAgICB9Ci0KLSAgICB2b2lk
IHNldE5leHQoY29uc3Qgc2l6ZV90IG5leHQpIHsKLSAgICAgIG5leHRfID0gbmV4dDsKLSAgICB9
Ci0KLSAgICBzaXplX3QgZ2V0TmV4dCgpIGNvbnN0IHsKLSAgICAgIHJldHVybiBuZXh0XzsKLSAg
ICB9Ci0KLSAgICB2b2lkIHNldExhc3QoY29uc3QgdWludDY0X3QgcGFzcykgewotICAgICAgbGFz
dF8gPSBwYXNzOwotICAgIH0KLQotICAgIHVpbnQ2NF90IGdldExhc3QoKSBjb25zdCB7Ci0gICAg
ICByZXR1cm4gbGFzdF87Ci0gICAgfQotCi0gICAgUmVxJiBnZXRSZXEoKSB7Ci0gICAgICByZXR1
cm4gcmVxXzsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuYz4KLSAgICB2b2lk
IHNldEZuKEZ1bmMmJiBmbikgewotICAgICAgc3RhdGljX2Fzc2VydCgKLSAgICAgICAgICBzdGQ6
OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTwKLSAgICAgICAgICAgICAgZm9sbHk6OkZ1bmN0aW9u
PHZvaWQoKT4sCi0gICAgICAgICAgICAgIF90PHN0ZDo6ZGVjYXk8RnVuYz4+Pjo6dmFsdWUsCi0g
ICAgICAgICAgIlRyeSB1c2luZyBhIHNtYWxsZXIgZnVuY3Rpb24gb2JqZWN0IHRoYXQgY2FuIGZp
dCBpbiBmb2xseTo6RnVuY3Rpb24gIgotICAgICAgICAgICJ3aXRob3V0IGFsbG9jYXRpb24sIG9y
IHVzZSB0aGUgY3VzdG9tIGludGVyZmFjZSBvZiByZXF1ZXN0RkMoKSB0byAiCi0gICAgICAgICAg
Im1hbmFnZSB0aGUgcmVxdWVzdGVkIGZ1bmN0aW9uJ3MgYXJndW1lbnRzIGFuZCByZXN1bHRzIGV4
cGxpY2l0bHkgIgotICAgICAgICAgICJpbiBhIGN1c3RvbSByZXF1ZXN0IHN0cnVjdHVyZSB3aXRo
b3V0IGFsbG9jYXRpb24uIik7Ci0gICAgICBmbl8gPSBzdGQ6OmZvcndhcmQ8RnVuYz4oZm4pOwot
ICAgICAgYXNzZXJ0KGZuXyk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhckZuKCkgewotICAgICAg
Zm5fID0ge307Ci0gICAgICBhc3NlcnQoIWZuXyk7Ci0gICAgfQotCi0gICAgU2F2ZWRGbiYgZ2V0
Rm4oKSB7Ci0gICAgICByZXR1cm4gZm5fOwotICAgIH0KLQotICAgIHZvaWQgY29tcGxldGUoKSB7
Ci0gICAgICBjbGVhclZhbGlkKCk7Ci0gICAgICBhc3NlcnQoIWlzRG9uZSgpKTsKLSAgICAgIHNl
dERvbmUoKTsKLSAgICB9Ci0gIH07Ci0KLSAgdXNpbmcgUG9vbCA9IGZvbGx5OjoKLSAgICAgIElu
ZGV4ZWRNZW1Qb29sPFJlYywgMzIsIDQsIEF0b20sIEluZGV4ZWRNZW1Qb29sVHJhaXRzTGF6eVJl
Y3ljbGU8UmVjPj47Ci0KLSBwdWJsaWM6Ci0gIC8vLyBUaGUgY29uc3RydWN0b3IgdGFrZXMgdGhy
ZWUgb3B0aW9uYWwgYXJndW1lbnRzOgotICAvLy8gLSBPcHRpb25hbCBkZWRpY2F0ZWQgY29tYmlu
ZXIgdGhyZWFkIChkZWZhdWx0IHRydWUpCi0gIC8vLyAtIE51bWJlciBvZiByZWNvcmRzIChpZiAw
LCB0aGVuIGtEZWZhdWx0TnVtUmVjcykKLSAgLy8vIC0gQSBoaW50IGZvciB0aGUgbWF4LiBudW1i
ZXIgb2YgY29tYmluZWQgb3BlcmF0aW9ucyBwZXIKLSAgLy8vICAgY29tYmluaW5nIHNlc3Npb24g
dGhhdCBpcyBjaGVja2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBwYXNzCi0gIC8vLyAgIG9u
IHRoZSByZXF1ZXN0IHJlY29yZHMgKGlmIDAsIHRoZW4ga0RlZmF1bHRNYXhvcHMpCi0gIGV4cGxp
Y2l0IEZsYXRDb21iaW5pbmcoCi0gICAgICBjb25zdCBib29sIGRlZGljYXRlZCA9IHRydWUsCi0g
ICAgICBjb25zdCB1aW50MzJfdCBudW1SZWNzID0gMCwgLy8gbnVtYmVyIG9mIGNvbWJpbmluZyBy
ZWNvcmRzCi0gICAgICBjb25zdCB1aW50MzJfdCBtYXhPcHMgPSAwIC8vIGhpbnQgb2YgbWF4IG9w
cyBwZXIgY29tYmluaW5nIHNlc3Npb24KLSAgICAgICkKLSAgICAgIDogbnVtUmVjc18obnVtUmVj
cyA9PSAwID8ga0RlZmF1bHROdW1SZWNzIDogbnVtUmVjcyksCi0gICAgICAgIG1heE9wc18obWF4
T3BzID09IDAgPyBrRGVmYXVsdE1heE9wcyA6IG1heE9wcyksCi0gICAgICAgIHJlY3NfKE5VTExf
SU5ERVgpLAotICAgICAgICBkZWRpY2F0ZWRfKGRlZGljYXRlZCksCi0gICAgICAgIHJlY3NQb29s
XyhudW1SZWNzXykgewotICAgIGlmIChkZWRpY2F0ZWRfKSB7Ci0gICAgICAvLyBkZWRpY2F0ZWQg
Y29tYmluZXIgdGhyZWFkCi0gICAgICBjb21iaW5lcl8gPSBzdGQ6OnRocmVhZChbdGhpc10geyBk
ZWRpY2F0ZWRDb21iaW5pbmcoKTsgfSk7Ci0gICAgfQotICB9Ci0KLSAgLy8vIERlc3RydWN0b3I6
IElmIHRoZXJlIGlzIGEgZGVkaWNhdGVkIGNvbWJpbmVyLCB0aGUgZGVzdHJ1Y3RvcgotICAvLy8g
ZmxhZ3MgaXQgdG8gc2h1dGRvd24uIE90aGVyd2lzZSwgdGhlIGRlc3RydWN0b3Igd2FpdHMgZm9y
IGFsbAotICAvLy8gcGVuZGluZyBhc3luY2hyb25vdXMgcmVxdWVzdHMgdG8gYmUgY29tcGxldGVk
LgotICB+RmxhdENvbWJpbmluZygpIHsKLSAgICBpZiAoZGVkaWNhdGVkXykgewotICAgICAgc2h1
dGRvd24oKTsKLSAgICAgIGNvbWJpbmVyXy5qb2luKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGRy
YWluQWxsKCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gV2FpdCBmb3IgYWxsIHBlbmRpbmcgb3BlcmF0
aW9ucyB0byBjb21wbGV0ZS4gVXNlZnVsIHByaW1hcmlseQotICAvLyB3aGVuIHRoZXJlIGFyZSBh
c3luY2hyb25vdXMgb3BlcmF0aW9ucyB3aXRob3V0IGEgZGVkaWNhdGVkCi0gIC8vIGNvbWJpbmVy
LgotICB2b2lkIGRyYWluQWxsKCkgewotICAgIGZvciAoc2l6ZV90IGkgPSBnZXRSZWNzSGVhZCgp
OyBpICE9IE5VTExfSU5ERVg7IGkgPSBuZXh0SW5kZXgoaSkpIHsKLSAgICAgIFJlYyYgcmVjID0g
cmVjc1Bvb2xfW2ldOwotICAgICAgYXdhaXREb25lKHJlYyk7Ci0gICAgfQotICB9Ci0KLSAgLy8g
R2l2ZSB0aGUgY2FsbGVyIGV4Y2x1c2l2ZSBhY2Nlc3MuCi0gIHZvaWQgYWNxdWlyZUV4Y2x1c2l2
ZSgpIHsKLSAgICBtXy5sb2NrKCk7Ci0gIH0KLQotICAvLyBUcnkgdG8gZ2l2ZSB0aGUgY2FsbGVy
IGV4Y2x1c2l2ZSBhY2Nlc3MuIFJldHVybnMgdHJ1ZSBpZmYgc3VjY2Vzc2Z1bC4KLSAgYm9vbCB0
cnlFeGNsdXNpdmUoKSB7Ci0gICAgcmV0dXJuIG1fLnRyeV9sb2NrKCk7Ci0gIH0KLQotICAvLyBS
ZWxlYXNlIGV4Y2x1c2l2ZSBhY2Nlc3MuIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGV4Y2x1c2l2ZSBh
Y2Nlc3MuCi0gIHZvaWQgcmVsZWFzZUV4Y2x1c2l2ZSgpIHsKLSAgICBtXy51bmxvY2soKTsKLSAg
fQotCi0gIC8vIEdpdmUgdGhlIGxvY2sgaG9sZGVyIG93bmVyc2hpcCBvZiB0aGUgbXV0ZXggYW5k
IGV4Y2x1c2l2ZSBhY2Nlc3MuCi0gIC8vIE5vIG5lZWQgZm9yIGV4cGxpY2l0IHJlbGVhc2UuCi0g
IHRlbXBsYXRlIDx0eXBlbmFtZSBMb2NrSG9sZGVyPgotICB2b2lkIGhvbGRMb2NrKExvY2tIb2xk
ZXImIGwpIHsKLSAgICBsID0gTG9ja0hvbGRlcihtXyk7Ci0gIH0KLQotICAvLyBHaXZlIHRoZSBj
YWxsZXIncyBsb2NrIGhvbGRlciBvd25lcnNoaXAgb2YgdGhlIG11dGV4IGJ1dCB3aXRob3V0Ci0g
IC8vIGV4Y2x1c2l2ZSBhY2Nlc3MuIFRoZSBjYWxsZXIgY2FuIGxhdGVyIHVzZSB0aGUgbG9jayBo
b2xkZXIgdG8gdHJ5Ci0gIC8vIHRvIGFjcXVpcmUgZXhjbHVzaXZlIGFjY2Vzcy4KLSAgdGVtcGxh
dGUgPHR5cGVuYW1lIExvY2tIb2xkZXI+Ci0gIHZvaWQgaG9sZExvY2soTG9ja0hvbGRlciYgbCwg
c3RkOjpkZWZlcl9sb2NrX3QpIHsKLSAgICBsID0gTG9ja0hvbGRlcihtXywgc3RkOjpkZWZlcl9s
b2NrKTsKLSAgfQotCi0gIC8vIEV4ZWN1dGUgYW4gb3BlcmF0aW9uIHdpdGhvdXQgY29tYmluaW5n
Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBPcEZ1bmM+Ci0gIHZvaWQgcmVxdWVzdE5vRkMoT3BGdW5j
JiBvcEZuKSB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPE11dGV4PiBndWFyZChtXyk7Ci0gICAgb3BG
bigpOwotICB9Ci0KLSAgLy8gVGhpcyBmdW5jdGlvbiBmaXJzdCB0cmllcyB0byBleGVjdXRlIHRo
ZSBvcGVyYXRpb24gd2l0aG91dAotICAvLyBjb21iaW5pbmcuIElmIHVudWNjZXNzZnVsLCBpdCBh
bGxvY2F0ZXMgYSBjb21iaW5pbmcgcmVjb3JkIGlmCi0gIC8vIG5lZWRlZC4gSWYgdGhlcmUgYXJl
IG5vIGF2YWlsYWJsZSByZWNvcmRzLCBpdCB3YWl0cyBmb3IgZXhjbHVzaXZlCi0gIC8vIGFjY2Vz
cyBhbmQgZXhlY3V0ZXMgdGhlIG9wZXJhdGlvbi4gSWYgYSByZWNvcmQgaXMgYXZhaWxhYmxlIGFu
ZAotICAvLyByZWFkeSBmb3IgdXNlLCBpdCBmaWxscyB0aGUgcmVjb3JkIGFuZCBpbmRpY2F0ZXMg
dGhhdCB0aGUgcmVxdWVzdAotICAvLyBpcyB2YWxpZCBmb3IgY29tYmluaW5nLiBJZiB0aGUgcmVx
dWVzdCBpcyBzeW5jaHJvbm91cyAoYnkgZGVmYXVsdAotICAvLyBvciBuZWNlc3NpdHkpLCBpdCB3
YWl0cyBmb3IgdGhlIG9wZXJhdGlvbiB0byBiZSBjb21wbGV0ZWQgYnkgYQotICAvLyBjb21iaW5l
ciBhbmQgb3B0aW9uYWxseSBleHRyYWN0cyB0aGUgcmVzdWx0LCBpZiBhbnkuCi0gIC8vCi0gIC8v
IFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBpbiBzZXZlcmFsIGZvcm1zOgotICAvLyAgIFNp
bXBsZSBmb3JtcyB0aGF0IGRvIG5vdCByZXF1aXJlIHRoZSB1c2VyIHRvIGRlZmluZSBhIFJlcSBz
dHJ1Y3R1cmUKLSAgLy8gICBvciB0byBvdmVycmlkZSBhbnkgcmVxdWVzdCBwcm9jZXNzaW5nIG1l
bWJlciBmdW5jdGlvbnM6Ci0gIC8vICAgICByZXF1ZXN0RkMob3BGbikKLSAgLy8gICAgIHJlcXVl
c3RGQyhvcEZuLCByZWMpIC8vIHByb3ZpZGVzIGl0cyBvd24gcHJlLWFsbG9jYXRlZCByZWNvcmQK
LSAgLy8gICAgIHJlcXVlc3RGQyhvcEZuLCByZWMsIHN5bmNvcCkgLy8gYXN5bmNocm9ub3VzIGlm
IHN5bmNvcCA9PSBmYWxzZQotICAvLyAgIEN1c3RvbSBmb3JtcyB0aGF0IHJlcXVpcmUgdGhlIHVz
ZXIgdG8gZGVmaW5lIGEgUmVxIHN0cnVjdHVyZSBhbmQgdG8KLSAgLy8gICBvdmVycmlkZSBzb21l
IHJlcXVlc3QgcHJvY2Vzc2luZyBtZW1iZXIgZnVuY3Rpb25zOgotICAvLyAgICAgcmVxdWVzdEZD
KG9wRm4sIGZpbGxGbikKLSAgLy8gICAgIHJlcXVlc3RGQyhvcEZuLCBmaWxsRm4sIHJlYykKLSAg
Ly8gICAgIHJlcXVlc3RGQyhvcEZuLCBmaWxsRm4sIHJlYywgc3luY29wKQotICAvLyAgICAgcmVx
dWVzdEZDKG9wRm4sIGZpbGxGbiwgcmVzRm4pCi0gIC8vICAgICByZXF1ZXN0RkMob3BGbiwgZmls
bEZuLCByZXNGbiwgcmVjKQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BGdW5jPgotICB2b2lkIHJl
cXVlc3RGQyhPcEZ1bmMmJiBvcEZuLCBSZWMqIHJlYyA9IG51bGxwdHIsIGJvb2wgc3luY29wID0g
dHJ1ZSkgewotICAgIGF1dG8gZHVtbXkgPSBbXShSZXEmKSB7fTsKLSAgICByZXF1ZXN0T3AoCi0g
ICAgICAgIHN0ZDo6Zm9yd2FyZDxPcEZ1bmM+KG9wRm4pLAotICAgICAgICBkdW1teSAvKiBmaWxs
Rm4gKi8sCi0gICAgICAgIGR1bW15IC8qIHJlc0ZuICovLAotICAgICAgICByZWMsCi0gICAgICAg
IHN5bmNvcCwKLSAgICAgICAgZmFsc2UgLyogc2ltcGxlICovKTsKLSAgfQotICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3BGdW5jLCB0eXBlbmFtZSBGaWxsRnVuYz4KLSAgdm9pZCByZXF1ZXN0RkMoCi0g
ICAgICBPcEZ1bmMmJiBvcEZuLAotICAgICAgY29uc3QgRmlsbEZ1bmMmIGZpbGxGbiwKLSAgICAg
IFJlYyogcmVjID0gbnVsbHB0ciwKLSAgICAgIGJvb2wgc3luY29wID0gdHJ1ZSkgewotICAgIGF1
dG8gZHVtbXkgPSBbXShSZXEmKSB7fTsKLSAgICByZXF1ZXN0T3AoCi0gICAgICAgIHN0ZDo6Zm9y
d2FyZDxPcEZ1bmM+KG9wRm4pLAotICAgICAgICBmaWxsRm4sCi0gICAgICAgIGR1bW15IC8qIHJl
c0ZuICovLAotICAgICAgICByZWMsCi0gICAgICAgIHN5bmNvcCwKLSAgICAgICAgdHJ1ZSAvKiBj
dXN0b20gKi8pOwotICB9Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBPcEZ1bmMsIHR5cGVuYW1lIEZp
bGxGdW5jLCB0eXBlbmFtZSBSZXNGbj4KLSAgdm9pZCByZXF1ZXN0RkMoCi0gICAgICBPcEZ1bmMm
JiBvcEZuLAotICAgICAgY29uc3QgRmlsbEZ1bmMmIGZpbGxGbiwKLSAgICAgIGNvbnN0IFJlc0Zu
JiByZXNGbiwKLSAgICAgIFJlYyogcmVjID0gbnVsbHB0cikgewotICAgIC8vIG11c3Qgd2FpdCBm
b3IgcmVzdWx0IHRvIGV4ZWN1dGUgcmVzRm4gLS0gc28gaXQgbXVzdCBiZSBzeW5jaHJvbm91cwot
ICAgIHJlcXVlc3RPcCgKLSAgICAgICAgc3RkOjpmb3J3YXJkPE9wRnVuYz4ob3BGbiksCi0gICAg
ICAgIGZpbGxGbiwKLSAgICAgICAgcmVzRm4sCi0gICAgICAgIHJlYywKLSAgICAgICAgdHJ1ZSAv
KiBzeW5jICovLAotICAgICAgICB0cnVlIC8qIGN1c3RvbSovKTsKLSAgfQotCi0gIC8vIEFsbG9j
YXRlIGEgcmVjb3JkLgotICBSZWMqIGFsbG9jUmVjKCkgewotICAgIGF1dG8gaWR4ID0gcmVjc1Bv
b2xfLmFsbG9jSW5kZXgoKTsKLSAgICBpZiAoaWR4ID09IE5VTExfSU5ERVgpIHsKLSAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLSAgICBSZWMmIHJlYyA9IHJlY3NQb29sX1tpZHhdOwotICAg
IHJlYy5zZXRJbmRleChpZHgpOwotICAgIHJldHVybiAmcmVjOwotICB9Ci0KLSAgLy8gRnJlZSBh
IHJlY29yZAotICB2b2lkIGZyZWVSZWMoUmVjKiByZWMpIHsKLSAgICBpZiAocmVjID09IG51bGxw
dHIpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0byBpZHggPSByZWMtPmdldEluZGV4
KCk7Ci0gICAgcmVjc1Bvb2xfLnJlY3ljbGVJbmRleChpZHgpOwotICB9Ci0KLSAgLy8gUmV0dXJu
cyB0aGUgbnVtYmVyIG9mIHVuY29tYmluZWQgb3BlcmF0aW9ucyBzbyBmYXIuCi0gIHVpbnQ2NF90
IGdldE51bVVuY29tYmluZWQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHVuY29tYmluZWRfOwotICB9
Ci0KLSAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbWJpbmVkIG9wZXJhdGlvbnMgc28gZmFy
LgotICB1aW50NjRfdCBnZXROdW1Db21iaW5lZCgpIGNvbnN0IHsKLSAgICByZXR1cm4gY29tYmlu
ZWRfOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbWJpbmluZyBwYXNzZXMg
c28gZmFyLgotICB1aW50NjRfdCBnZXROdW1QYXNzZXMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHBh
c3Nlc187Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29tYmluaW5nIHNlc3Np
b25zIHNvIGZhci4KLSAgdWludDY0X3QgZ2V0TnVtU2Vzc2lvbnMoKSBjb25zdCB7Ci0gICAgcmV0
dXJuIHNlc3Npb25zXzsKLSAgfQotCi0gcHJvdGVjdGVkOgotICBjb25zdCBzaXplX3QgTlVMTF9J
TkRFWCA9IDA7Ci0gIGNvbnN0IHVpbnQzMl90IGtEZWZhdWx0TWF4T3BzID0gMTAwOwotICBjb25z
dCB1aW50NjRfdCBrRGVmYXVsdE51bVJlY3MgPSA2NDsKLSAgY29uc3QgdWludDY0X3Qga0lkbGVU
aHJlc2hvbGQgPSAxMDsKLQotICBGT0xMWV9BTElHTl9UT19BVk9JRF9GQUxTRV9TSEFSSU5HCi0g
IE11dGV4IG1fOwotCi0gIEZPTExZX0FMSUdOX1RPX0FWT0lEX0ZBTFNFX1NIQVJJTkcKLSAgZm9s
bHk6OkJhdG9uPEF0b20sIGZhbHNlLCB0cnVlPiBwZW5kaW5nXzsKLSAgQXRvbTxib29sPiBzaHV0
ZG93bl97ZmFsc2V9OwotCi0gIEZPTExZX0FMSUdOX1RPX0FWT0lEX0ZBTFNFX1NIQVJJTkcKLSAg
dWludDMyX3QgbnVtUmVjc187Ci0gIHVpbnQzMl90IG1heE9wc187Ci0gIEF0b208c2l6ZV90PiBy
ZWNzXzsKLSAgYm9vbCBkZWRpY2F0ZWRfOwotICBzdGQ6OnRocmVhZCBjb21iaW5lcl87Ci0gIFBv
b2wgcmVjc1Bvb2xfOwotCi0gIEZPTExZX0FMSUdOX1RPX0FWT0lEX0ZBTFNFX1NIQVJJTkcKLSAg
dWludDY0X3QgdW5jb21iaW5lZF8gPSAwOwotICB1aW50NjRfdCBjb21iaW5lZF8gPSAwOwotICB1
aW50NjRfdCBwYXNzZXNfID0gMDsKLSAgdWludDY0X3Qgc2Vzc2lvbnNfID0gMDsKLQotICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgT3BGdW5jLCB0eXBlbmFtZSBGaWxsRnVuYywgdHlwZW5hbWUgUmVzRm4+
Ci0gIHZvaWQgcmVxdWVzdE9wKAotICAgICAgT3BGdW5jJiYgb3BGbiwKLSAgICAgIGNvbnN0IEZp
bGxGdW5jJiBmaWxsRm4sCi0gICAgICBjb25zdCBSZXNGbiYgcmVzRm4sCi0gICAgICBSZWMqIHJl
YywKLSAgICAgIGJvb2wgc3luY29wLAotICAgICAgY29uc3QgYm9vbCBjdXN0b20pIHsKLSAgICBz
dGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiBsKHRoaXMtPm1fLCBzdGQ6OmRlZmVyX2xvY2spOwotICAg
IGlmIChsLnRyeV9sb2NrKCkpIHsKLSAgICAgIC8vIE5vIGNvbnRlbnRpb24KLSAgICAgICsrdW5j
b21iaW5lZF87Ci0gICAgICB0cnlDb21iaW5pbmcoKTsKLSAgICAgIG9wRm4oKTsKLSAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBUcnkgRkMKLSAgICBib29sIHRjID0gKHJlYyAhPSBudWxs
cHRyKTsKLSAgICBpZiAoIXRjKSB7Ci0gICAgICAvLyBpZiBhbiBhc3luYyBvcCBkb2Vzbid0IGhh
dmUgYSB0aHJlYWQtY2FjaGVkIHJlY29yZCB0aGVuIHR1cm4KLSAgICAgIC8vIGl0IGludG8gYSBz
eW5jaHJvbm91cyBvcC4KLSAgICAgIHN5bmNvcCA9IHRydWU7Ci0gICAgICByZWMgPSBhbGxvY1Jl
YygpOwotICAgIH0KLSAgICBpZiAocmVjID09IG51bGxwdHIpIHsKLSAgICAgIC8vIENhbid0IHVz
ZSBGQyAtIE11c3QgYWNxdWlyZSBsb2NrCi0gICAgICBsLmxvY2soKTsKLSAgICAgICsrdW5jb21i
aW5lZF87Ci0gICAgICB0cnlDb21iaW5pbmcoKTsKLSAgICAgIG9wRm4oKTsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBVc2UgRkMKLSAgICAvLyBXYWl0IGlmIHJlY29yZCBpcyBpbiB1
c2UKLSAgICBhd2FpdERvbmUoKnJlYyk7Ci0gICAgcmVjLT5jbGVhckRvbmUoKTsKLSAgICAvLyBG
aWxsIHJlY29yZAotICAgIGlmIChjdXN0b20pIHsKLSAgICAgIC8vIEZpbGwgdGhlIHJlcXVlc3Qg
KGN1c3RvbSkKLSAgICAgIFJlcSYgcmVxID0gcmVjLT5nZXRSZXEoKTsKLSAgICAgIGZpbGxGbihy
ZXEpOwotICAgICAgcmVjLT5jbGVhckZuKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlYy0+c2V0
Rm4oc3RkOjpmb3J3YXJkPE9wRnVuYz4ob3BGbikpOwotICAgIH0KLSAgICAvLyBJbmRpY2F0ZSB0
aGF0IHJlY29yZCBpcyB2YWxpZAotICAgIGFzc2VydCghcmVjLT5pc1ZhbGlkKCkpOwotICAgIHJl
Yy0+c2V0VmFsaWQoKTsKLSAgICAvLyBlbmQgb2YgY29tYmluaW5nIGNyaXRpY2FsIHBhdGgKLSAg
ICBzZXRQZW5kaW5nKCk7Ci0gICAgLy8gc3RvcmUtbG9hZCBvcmRlciBzZXRWYWxpZCBiZWZvcmUg
aXNEaXNjb25uZWN0ZWQKLSAgICBzdGQ6OmF0b21pY190aHJlYWRfZmVuY2Uoc3RkOjptZW1vcnlf
b3JkZXJfc2VxX2NzdCk7Ci0gICAgaWYgKHJlYy0+aXNEaXNjb25uZWN0ZWQoKSkgewotICAgICAg
cmVjLT5jbGVhckRpc2Nvbm5lY3RlZCgpOwotICAgICAgcHVzaFJlYyhyZWMtPmdldEluZGV4KCkp
OwotICAgICAgc2V0UGVuZGluZygpOwotICAgIH0KLSAgICAvLyBJZiBzeW5jaHJvbm91cyB3YWl0
IGZvciB0aGUgcmVxdWVzdCB0byBiZSBjb21wbGV0ZWQKLSAgICBpZiAoc3luY29wKSB7Ci0gICAg
ICBhd2FpdERvbmUoKnJlYyk7Ci0gICAgICBpZiAoY3VzdG9tKSB7Ci0gICAgICAgIFJlcSYgcmVx
ID0gcmVjLT5nZXRSZXEoKTsKLSAgICAgICAgcmVzRm4ocmVxKTsgLy8gRXh0cmFjdCB0aGUgcmVz
dWx0IChjdXN0b20pCi0gICAgICB9Ci0gICAgICBpZiAoIXRjKSB7Ci0gICAgICAgIGZyZWVSZWMo
cmVjKTsgLy8gRnJlZSB0aGUgdGVtcG9yYXJ5IHJlY29yZC4KLSAgICAgIH0KLSAgICB9Ci0gIH0K
LQotICB2b2lkIHB1c2hSZWMoc2l6ZV90IGlkeCkgewotICAgIFJlYyYgcmVjID0gcmVjc1Bvb2xf
W2lkeF07Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgIGF1dG8gaGVhZCA9IHJlY3NfLmxvYWQo
c3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7Ci0gICAgICByZWMuc2V0TmV4dChoZWFkKTsgLy8g
dGhlcmUgc2hvdWxkbid0IGJlIGEgZGF0YSByYWNlIGhlcmUKLSAgICAgIGlmIChyZWNzXy5jb21w
YXJlX2V4Y2hhbmdlX3dlYWsoaGVhZCwgaWR4KSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9
Ci0gICAgfQotICB9Ci0KLSAgc2l6ZV90IGdldFJlY3NIZWFkKCkgewotICAgIHJldHVybiByZWNz
Xy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwotICB9Ci0KLSAgc2l6ZV90IG5leHRJ
bmRleChzaXplX3QgaWR4KSB7Ci0gICAgcmV0dXJuIHJlY3NQb29sX1tpZHhdLmdldE5leHQoKTsK
LSAgfQotCi0gIHZvaWQgY2xlYXJQZW5kaW5nKCkgewotICAgIHBlbmRpbmdfLnJlc2V0KCk7Ci0g
IH0KLQotICB2b2lkIHNldFBlbmRpbmcoKSB7Ci0gICAgcGVuZGluZ18ucG9zdCgpOwotICB9Ci0K
LSAgYm9vbCBpc1BlbmRpbmcoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHBlbmRpbmdfLnRyeV93YWl0
KCk7Ci0gIH0KLQotICB2b2lkIGF3YWl0UGVuZGluZygpIHsKLSAgICBwZW5kaW5nXy53YWl0KCk7
Ci0gIH0KLQotICB1aW50NjRfdCBjb21iaW5pbmdTZXNzaW9uKCkgewotICAgIHVpbnQ2NF90IGNv
bWJpbmVkID0gMDsKLSAgICBkbyB7Ci0gICAgICB1aW50NjRfdCBjb3VudCA9IHN0YXRpY19jYXN0
PFQqPih0aGlzKS0+Y29tYmluaW5nUGFzcygpOwotICAgICAgaWYgKGNvdW50ID09IDApIHsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjb21iaW5lZCArPSBjb3VudDsKLSAgICAgICsr
dGhpcy0+cGFzc2VzXzsKLSAgICB9IHdoaWxlIChjb21iaW5lZCA8IHRoaXMtPm1heE9wc18pOwot
ICAgIHJldHVybiBjb21iaW5lZDsKLSAgfQotCi0gIHZvaWQgdHJ5Q29tYmluaW5nKCkgewotICAg
IGlmICghZGVkaWNhdGVkXykgewotICAgICAgd2hpbGUgKGlzUGVuZGluZygpKSB7Ci0gICAgICAg
IGNsZWFyUGVuZGluZygpOwotICAgICAgICArK3Nlc3Npb25zXzsKLSAgICAgICAgY29tYmluZWRf
ICs9IGNvbWJpbmluZ1Nlc3Npb24oKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICB2b2lkIGRl
ZGljYXRlZENvbWJpbmluZygpIHsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgYXdhaXRQZW5k
aW5nKCk7Ci0gICAgICBjbGVhclBlbmRpbmcoKTsKLSAgICAgIGlmIChzaHV0ZG93bl8ubG9hZCgp
KSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
ICAgdWludDY0X3QgY291bnQ7Ci0gICAgICAgICsrc2Vzc2lvbnNfOwotICAgICAgICB7Ci0gICAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPE11dGV4PiBndWFyZChtXyk7Ci0gICAgICAgICAgY291bnQg
PSBjb21iaW5pbmdTZXNzaW9uKCk7Ci0gICAgICAgICAgY29tYmluZWRfICs9IGNvdW50OwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChjb3VudCA8IG1heE9wc18pIHsKLSAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHZvaWQgYXdhaXREb25lKFJlYyYg
cmVjKSB7Ci0gICAgaWYgKGRlZGljYXRlZF8pIHsKLSAgICAgIHJlYy5hd2FpdERvbmUoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgYXdhaXREb25lVHJ5TG9jayhyZWMpOwotICAgIH0KLSAgfQotCi0g
IC8vLyBXYWl0cyBmb3IgdGhlIHJlcXVlc3QgdG8gYmUgZG9uZSBhbmQgb2NjYXNpb25hbGx5IHRy
aWVzIHRvCi0gIC8vLyBhY3F1aXJlIHRoZSBsb2NrIGFuZCB0byBkbyBjb21iaW5pbmcuIFVzZWQg
b25seSBpbiB0aGUgYWJzZW5jZQotICAvLy8gb2YgYSBkZWRpY2F0ZWQgY29tYmluZXIuCi0gIHZv
aWQgYXdhaXREb25lVHJ5TG9jayhSZWMmIHJlYykgewotICAgIGFzc2VydCghZGVkaWNhdGVkXyk7
Ci0gICAgaW50IGNvdW50ID0gMDsKLSAgICB3aGlsZSAoIXJlYy5pc0RvbmUoKSkgewotICAgICAg
aWYgKGNvdW50ID09IDApIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxNdXRleD4gbChtXywg
c3RkOjpkZWZlcl9sb2NrKTsKLSAgICAgICAgaWYgKGwudHJ5X2xvY2soKSkgewotICAgICAgICAg
IHNldFBlbmRpbmcoKTsKLSAgICAgICAgICB0cnlDb21iaW5pbmcoKTsKLSAgICAgICAgfQotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZm9sbHk6OmFzbV92b2xhdGlsZV9wYXVzZSgpOwotICAgICAg
ICBpZiAoKytjb3VudCA9PSAxMDAwKSB7Ci0gICAgICAgICAgY291bnQgPSAwOwotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBzaHV0ZG93bigpIHsKLSAgICBzaHV0ZG93
bl8uc3RvcmUodHJ1ZSk7Ci0gICAgc2V0UGVuZGluZygpOwotICB9Ci0KLSAgLy8vIFRoZSBmb2xs
b3dpbmcgbWVtYmVyIGZ1bmN0aW9ucyBtYXkgYmUgb3ZlcnJpZGRlbiBmb3IgY3VzdG9taXphdGlv
bgotCi0gIHZvaWQgY29tYmluZWRPcChSZXEmKSB7Ci0gICAgdGhyb3cgc3RkOjpydW50aW1lX2Vy
cm9yKAotICAgICAgICAiRmxhdENvbWJpbmluZzo6Y29tYmluZWRPcChSZXEmKSBtdXN0IGJlIG92
ZXJyaWRkZW4gaW4gdGhlIGRlcml2ZWQiCi0gICAgICAgICIgY2xhc3MgaWYgY2FsbGVkLiIpOwot
ICB9Ci0KLSAgdm9pZCBwcm9jZXNzUmVxKFJlYyYgcmVjKSB7Ci0gICAgU2F2ZWRGbiYgb3BGbiA9
IHJlYy5nZXRGbigpOwotICAgIGlmIChvcEZuKSB7Ci0gICAgICAvLyBzaW1wbGUgaW50ZXJmYWNl
Ci0gICAgICBvcEZuKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIGN1c3RvbSBpbnRlcmZhY2UK
LSAgICAgIFJlcSYgcmVxID0gcmVjLmdldFJlcSgpOwotICAgICAgc3RhdGljX2Nhc3Q8VCo+KHRo
aXMpLT5jb21iaW5lZE9wKHJlcSk7IC8vIGRlZmluZWQgaW4gZGVyaXZlZCBjbGFzcwotICAgIH0K
LSAgICByZWMuc2V0TGFzdChwYXNzZXNfKTsKLSAgICByZWMuY29tcGxldGUoKTsKLSAgfQotCi0g
IHVpbnQ2NF90IGNvbWJpbmluZ1Bhc3MoKSB7Ci0gICAgdWludDY0X3QgY291bnQgPSAwOwotICAg
IGF1dG8gaWR4ID0gZ2V0UmVjc0hlYWQoKTsKLSAgICBSZWMqIHByZXYgPSBudWxscHRyOwotICAg
IHdoaWxlIChpZHggIT0gTlVMTF9JTkRFWCkgewotICAgICAgUmVjJiByZWMgPSByZWNzUG9vbF9b
aWR4XTsKLSAgICAgIGF1dG8gbmV4dCA9IHJlYy5nZXROZXh0KCk7Ci0gICAgICBib29sIHZhbGlk
ID0gcmVjLmlzVmFsaWQoKTsKLSAgICAgIGlmICghdmFsaWQgJiYgKHBhc3Nlc18gLSByZWMuZ2V0
TGFzdCgpID4ga0lkbGVUaHJlc2hvbGQpICYmCi0gICAgICAgICAgKHByZXYgIT0gbnVsbHB0cikp
IHsKLSAgICAgICAgLy8gRGlzY29ubmVjdAotICAgICAgICBwcmV2LT5zZXROZXh0KG5leHQpOwot
ICAgICAgICByZWMuc2V0RGlzY29ubmVjdGVkKCk7Ci0gICAgICAgIC8vIHN0b3JlLWxvYWQgb3Jk
ZXIgc2V0RGlzY29ubmVjdGVkIGJlZm9yZSBpc1ZhbGlkCi0gICAgICAgIHN0ZDo6YXRvbWljX3Ro
cmVhZF9mZW5jZShzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKLSAgICAgICAgdmFsaWQgPSBy
ZWMuaXNWYWxpZCgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJldiA9ICZyZWM7Ci0gICAg
ICB9Ci0gICAgICBpZiAodmFsaWQpIHsKLSAgICAgICAgcHJvY2Vzc1JlcShyZWMpOwotICAgICAg
ICArK2NvdW50OwotICAgICAgfQotICAgICAgaWR4ID0gbmV4dDsKLSAgICB9Ci0gICAgcmV0dXJu
IGNvdW50OwotICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBmb2xseSB7CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvZmxh
dF9jb21iaW5pbmcvdGVzdC9GbGF0Q29tYmluaW5nQmVuY2htYXJrLmNwcCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2NvbWJpbmlu
Zy90ZXN0L0ZsYXRDb21iaW5pbmdCZW5jaG1hcmsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwZDYwMTU0M2M0NjI2Y2UwMTlkNWZhMTE5N2EzZmIxZTJjYWVlMWI3Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2NvbWJpbmluZy90ZXN0
L0ZsYXRDb21iaW5pbmdCZW5jaG1hcmsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc4NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
LSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAot
ICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgot
ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0
aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRo
ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
IGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUg
PGZvbGx5L0JlbmNobWFyay5oPgotI2luY2x1ZGUgPGZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2Nv
bWJpbmluZy90ZXN0L0ZsYXRDb21iaW5pbmdUZXN0SGVscGVycy5oPgotCi0jaW5jbHVkZSA8Zm9s
bHkvcG9ydGFiaWxpdHkvR1Rlc3QuaD4KLSNpbmNsdWRlIDxnbG9nL2xvZ2dpbmcuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIGZvbGx5Ojp0ZXN0OwotCi0vLyB1c2Ugb3B0aW9uIC0tYmVuY2htYXJrIHRv
IHJ1biBmb2xseTo6QmVuY2htYXJrCi0vLyB1c2Ugb3B0aW9uIC0tZGlyZWN0IHRvIHJ1biBkaXJl
Y3QgYmVuY2htYXJrIG1lYXN1cmVtZW50cwotc3RhdGljIGNvbnN0ZXhwciBib29sIEZMQUdTX2Rp
cmVjdCA9IGZhbHNlOyAvLyAicnVuIGRpcmVjdCBtZWFzdXJlbWVudCIpOwotc3RhdGljIGNvbnN0
ZXhwciBpbnQzMl90IEZMQUdTX3JlcHMgPSAxMDsgLy8gIm51bWJlciBvZiByZXBzIik7Ci1zdGF0
aWMgY29uc3RleHByIGludDMyX3QgRkxBR1Nfb3BzID0gMTAwMDAwOyAvLyAibnVtYmVyIG9mIG9w
ZXJhdGlvbnMgcGVyIHJlcCIpOwotc3RhdGljIGNvbnN0ZXhwciBpbnQzMl90IEZMQUdTX2xpbmVz
ID0gNTsgLy8gIm51bWJlciBvZiBjYWNoZSBsaW5lcyBhY2Nlc3NlZCBwZXIgb3BlcmF0aW9uIik7
Ci1zdGF0aWMgY29uc3RleHByIGludDMyX3QgRkxBR1NfbnVtUmVjcyA9IDg7IC8vICJudW1iZXIg
b2YgcmVjb3JkcyIpOwotc3RhdGljIGNvbnN0ZXhwciBpbnQzMl90IEZMQUdTX3dvcmsgPSAxMDAw
OyAvLyAiYW1vdW50IG9mIHVucmVsYXRlZCB3b3JrIHBlciBvcGVyYXRpb24iKTsKLQotc3RhdGlj
IHN0ZDo6dmVjdG9yPGludD4gbnRociA9IHsxLCAyLCAzLCA0LCA2LCA4LCAxMiwgMTYsIDI0LCAz
MiwgNDgsIDY0fTsKLXN0YXRpYyBpbnQgbnRocmVhZHM7Ci1zdGF0aWMgYm9vbCBmYzsKLXN0YXRp
YyBib29sIHNpbXBsZTsKLXN0YXRpYyBib29sIGRlZGljYXRlZDsKLXN0YXRpYyBib29sIHRjOwot
c3RhdGljIGJvb2wgc3luY29wczsKLQotLy8gYmFzZWxpbmUgLSBubyBjb21iaW5pbmcKLUJFTkNI
TUFSSyhub19jb21iaW5pbmdfYmFzZSwgaXRlcnMpIHsKLSAgZmMgPSBmYWxzZTsKLSAgZGVkaWNh
dGVkID0gZmFsc2U7Ci0gIHRjID0gZmFsc2U7Ci0gIHN5bmNvcHMgPSBmYWxzZTsKLSAgcnVuX3Rl
c3QoCi0gICAgICBudGhyZWFkcywKLSAgICAgIEZMQUdTX2xpbmVzLAotICAgICAgRkxBR1NfbnVt
UmVjcywKLSAgICAgIEZMQUdTX3dvcmssCi0gICAgICBpdGVycywKLSAgICAgIGZjLAotICAgICAg
c2ltcGxlLAotICAgICAgZGVkaWNhdGVkLAotICAgICAgdGMsCi0gICAgICBzeW5jb3BzKTsKLX0K
LQotQkVOQ0hNQVJLX1JFTEFUSVZFKG5vX2NvbWJpbmluZ19kdXAsIGl0ZXJzKSB7Ci0gIHJ1bl90
ZXN0KAotICAgICAgbnRocmVhZHMsCi0gICAgICBGTEFHU19saW5lcywKLSAgICAgIEZMQUdTX251
bVJlY3MsCi0gICAgICBGTEFHU193b3JrLAotICAgICAgaXRlcnMsCi0gICAgICBmYywKLSAgICAg
IHNpbXBsZSwKLSAgICAgIGRlZGljYXRlZCwKLSAgICAgIHRjLAotICAgICAgc3luY29wcyk7Ci19
Ci1CRU5DSE1BUktfRFJBV19MSU5FKCkKLQotLy8gZGVkaWNhdGVkIGNvbWJpbmVyCi0KLUJFTkNI
TUFSS19EUkFXX0xJTkUoKQotCi1CRU5DSE1BUktfUkVMQVRJVkUoY29tYmluaW5nX2RlZGljYXRl
ZF9ub3RjX3N5bmMsIGl0ZXJzKSB7Ci0gIGZjID0gdHJ1ZTsKLSAgZGVkaWNhdGVkID0gdHJ1ZTsK
LSAgdGMgPSBmYWxzZTsKLSAgc3luY29wcyA9IHRydWU7Ci0gIHJ1bl90ZXN0KAotICAgICAgbnRo
cmVhZHMsCi0gICAgICBGTEFHU19saW5lcywKLSAgICAgIEZMQUdTX251bVJlY3MsCi0gICAgICBG
TEFHU193b3JrLAotICAgICAgaXRlcnMsCi0gICAgICBmYywKLSAgICAgIHNpbXBsZSwKLSAgICAg
IGRlZGljYXRlZCwKLSAgICAgIHRjLAotICAgICAgc3luY29wcyk7Ci19Ci0KLUJFTkNITUFSS19S
RUxBVElWRShjb21iaW5pbmdfZGVkaWNhdGVkX25vdGNfc3luY19kdXAsIGl0ZXJzKSB7Ci0gIHJ1
bl90ZXN0KAotICAgICAgbnRocmVhZHMsCi0gICAgICBGTEFHU19saW5lcywKLSAgICAgIEZMQUdT
X251bVJlY3MsCi0gICAgICBGTEFHU193b3JrLAotICAgICAgaXRlcnMsCi0gICAgICBmYywKLSAg
ICAgIHNpbXBsZSwKLSAgICAgIGRlZGljYXRlZCwKLSAgICAgIHRjLAotICAgICAgc3luY29wcyk7
Ci19Ci0KLUJFTkNITUFSS19EUkFXX0xJTkUoKQotCi1CRU5DSE1BUktfUkVMQVRJVkUoY29tYmlu
aW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jLCBpdGVycykgewotICBzeW5jb3BzID0gZmFsc2U7Ci0g
IHJ1bl90ZXN0KAotICAgICAgbnRocmVhZHMsCi0gICAgICBGTEFHU19saW5lcywKLSAgICAgIEZM
QUdTX251bVJlY3MsCi0gICAgICBGTEFHU193b3JrLAotICAgICAgaXRlcnMsCi0gICAgICBmYywK
LSAgICAgIHNpbXBsZSwKLSAgICAgIGRlZGljYXRlZCwKLSAgICAgIHRjLAotICAgICAgc3luY29w
cyk7Ci19Ci0KLUJFTkNITUFSS19SRUxBVElWRShjb21iaW5pbmdfZGVkaWNhdGVkX25vdGNfYXN5
bmNfZHVwLCBpdGVycykgewotICBydW5fdGVzdCgKLSAgICAgIG50aHJlYWRzLAotICAgICAgRkxB
R1NfbGluZXMsCi0gICAgICBGTEFHU19udW1SZWNzLAotICAgICAgRkxBR1Nfd29yaywKLSAgICAg
IGl0ZXJzLAotICAgICAgZmMsCi0gICAgICBzaW1wbGUsCi0gICAgICBkZWRpY2F0ZWQsCi0gICAg
ICB0YywKLSAgICAgIHN5bmNvcHMpOwotfQotCi1CRU5DSE1BUktfRFJBV19MSU5FKCkKLQotQkVO
Q0hNQVJLX1JFTEFUSVZFKGNvbWJpbmluZ19kZWRpY2F0ZWRfdGNfc3luYywgaXRlcnMpIHsKLSAg
dGMgPSB0cnVlOwotICBzeW5jb3BzID0gdHJ1ZTsKLSAgcnVuX3Rlc3QoCi0gICAgICBudGhyZWFk
cywKLSAgICAgIEZMQUdTX2xpbmVzLAotICAgICAgRkxBR1NfbnVtUmVjcywKLSAgICAgIEZMQUdT
X3dvcmssCi0gICAgICBpdGVycywKLSAgICAgIGZjLAotICAgICAgc2ltcGxlLAotICAgICAgZGVk
aWNhdGVkLAotICAgICAgdGMsCi0gICAgICBzeW5jb3BzKTsKLX0KLQotQkVOQ0hNQVJLX1JFTEFU
SVZFKGNvbWJpbmluZ19kZWRpY2F0ZWRfdGNfc3luY19kdXAsIGl0ZXJzKSB7Ci0gIHJ1bl90ZXN0
KAotICAgICAgbnRocmVhZHMsCi0gICAgICBGTEFHU19saW5lcywKLSAgICAgIEZMQUdTX251bVJl
Y3MsCi0gICAgICBGTEFHU193b3JrLAotICAgICAgaXRlcnMsCi0gICAgICBmYywKLSAgICAgIHNp
bXBsZSwKLSAgICAgIGRlZGljYXRlZCwKLSAgICAgIHRjLAotICAgICAgc3luY29wcyk7Ci19Ci0K
LUJFTkNITUFSS19EUkFXX0xJTkUoKQotCi1CRU5DSE1BUktfUkVMQVRJVkUoY29tYmluaW5nX2Rl
ZGljYXRlZF90Y19hc3luYywgaXRlcnMpIHsKLSAgdGMgPSB0cnVlOwotICBzeW5jb3BzID0gZmFs
c2U7Ci0gIHJ1bl90ZXN0KAotICAgICAgbnRocmVhZHMsCi0gICAgICBGTEFHU19saW5lcywKLSAg
ICAgIEZMQUdTX251bVJlY3MsCi0gICAgICBGTEFHU193b3JrLAotICAgICAgaXRlcnMsCi0gICAg
ICBmYywKLSAgICAgIHNpbXBsZSwKLSAgICAgIGRlZGljYXRlZCwKLSAgICAgIHRjLAotICAgICAg
c3luY29wcyk7Ci19Ci0KLUJFTkNITUFSS19SRUxBVElWRShjb21iaW5pbmdfZGVkaWNhdGVkX3Rj
X2FzeW5jX2R1cCwgaXRlcnMpIHsKLSAgcnVuX3Rlc3QoCi0gICAgICBudGhyZWFkcywKLSAgICAg
IEZMQUdTX2xpbmVzLAotICAgICAgRkxBR1NfbnVtUmVjcywKLSAgICAgIEZMQUdTX3dvcmssCi0g
ICAgICBpdGVycywKLSAgICAgIGZjLAotICAgICAgc2ltcGxlLAotICAgICAgZGVkaWNhdGVkLAot
ICAgICAgdGMsCi0gICAgICBzeW5jb3BzKTsKLX0KLQotQkVOQ0hNQVJLX0RSQVdfTElORSgpCi0K
LS8vIG5vIGRlZGljYXRlZCBjb21iaW5lcgotCi1CRU5DSE1BUktfRFJBV19MSU5FKCkKLQotQkVO
Q0hNQVJLX1JFTEFUSVZFKGNvbWJpbmluZ19ub19kZWRpY2F0ZWRfbm90Y19zeW5jLCBpdGVycykg
ewotICBkZWRpY2F0ZWQgPSBmYWxzZTsKLSAgdGMgPSBmYWxzZTsKLSAgc3luY29wcyA9IHRydWU7
Ci0gIHJ1bl90ZXN0KAotICAgICAgbnRocmVhZHMsCi0gICAgICBGTEFHU19saW5lcywKLSAgICAg
IEZMQUdTX251bVJlY3MsCi0gICAgICBGTEFHU193b3JrLAotICAgICAgaXRlcnMsCi0gICAgICBm
YywKLSAgICAgIHNpbXBsZSwKLSAgICAgIGRlZGljYXRlZCwKLSAgICAgIHRjLAotICAgICAgc3lu
Y29wcyk7Ci19Ci0KLUJFTkNITUFSS19SRUxBVElWRShjb21iaW5pbmdfbm9fZGVkaWNhdGVkX25v
dGNfc3luY19kdXAsIGl0ZXJzKSB7Ci0gIHJ1bl90ZXN0KAotICAgICAgbnRocmVhZHMsCi0gICAg
ICBGTEFHU19saW5lcywKLSAgICAgIEZMQUdTX251bVJlY3MsCi0gICAgICBGTEFHU193b3JrLAot
ICAgICAgaXRlcnMsCi0gICAgICBmYywKLSAgICAgIHNpbXBsZSwKLSAgICAgIGRlZGljYXRlZCwK
LSAgICAgIHRjLAotICAgICAgc3luY29wcyk7Ci19Ci0KLUJFTkNITUFSS19EUkFXX0xJTkUoKQot
Ci1CRU5DSE1BUktfUkVMQVRJVkUoY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jLCBp
dGVycykgewotICBzeW5jb3BzID0gZmFsc2U7Ci0gIHJ1bl90ZXN0KAotICAgICAgbnRocmVhZHMs
Ci0gICAgICBGTEFHU19saW5lcywKLSAgICAgIEZMQUdTX251bVJlY3MsCi0gICAgICBGTEFHU193
b3JrLAotICAgICAgaXRlcnMsCi0gICAgICBmYywKLSAgICAgIHNpbXBsZSwKLSAgICAgIGRlZGlj
YXRlZCwKLSAgICAgIHRjLAotICAgICAgc3luY29wcyk7Ci19Ci0KLUJFTkNITUFSS19SRUxBVElW
RShjb21iaW5pbmdfbm9fZGVkaWNhdGVkX25vdGNfYXN5bmNfZHVwLCBpdGVycykgewotICBydW5f
dGVzdCgKLSAgICAgIG50aHJlYWRzLAotICAgICAgRkxBR1NfbGluZXMsCi0gICAgICBGTEFHU19u
dW1SZWNzLAotICAgICAgRkxBR1Nfd29yaywKLSAgICAgIGl0ZXJzLAotICAgICAgZmMsCi0gICAg
ICBzaW1wbGUsCi0gICAgICBkZWRpY2F0ZWQsCi0gICAgICB0YywKLSAgICAgIHN5bmNvcHMpOwot
fQotCi1CRU5DSE1BUktfRFJBV19MSU5FKCkKLQotQkVOQ0hNQVJLX1JFTEFUSVZFKGNvbWJpbmlu
Z19ub19kZWRpY2F0ZWRfdGNfc3luYywgaXRlcnMpIHsKLSAgdGMgPSB0cnVlOwotICBzeW5jb3Bz
ID0gdHJ1ZTsKLSAgcnVuX3Rlc3QoCi0gICAgICBudGhyZWFkcywKLSAgICAgIEZMQUdTX2xpbmVz
LAotICAgICAgRkxBR1NfbnVtUmVjcywKLSAgICAgIEZMQUdTX3dvcmssCi0gICAgICBpdGVycywK
LSAgICAgIGZjLAotICAgICAgc2ltcGxlLAotICAgICAgZGVkaWNhdGVkLAotICAgICAgdGMsCi0g
ICAgICBzeW5jb3BzKTsKLX0KLQotQkVOQ0hNQVJLX1JFTEFUSVZFKGNvbWJpbmluZ19ub19kZWRp
Y2F0ZWRfdGNfc3luY19kdXAsIGl0ZXJzKSB7Ci0gIHJ1bl90ZXN0KAotICAgICAgbnRocmVhZHMs
Ci0gICAgICBGTEFHU19saW5lcywKLSAgICAgIEZMQUdTX251bVJlY3MsCi0gICAgICBGTEFHU193
b3JrLAotICAgICAgaXRlcnMsCi0gICAgICBmYywKLSAgICAgIHNpbXBsZSwKLSAgICAgIGRlZGlj
YXRlZCwKLSAgICAgIHRjLAotICAgICAgc3luY29wcyk7Ci19Ci0KLUJFTkNITUFSS19EUkFXX0xJ
TkUoKQotCi1CRU5DSE1BUktfUkVMQVRJVkUoY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3lu
YywgaXRlcnMpIHsKLSAgdGMgPSB0cnVlOwotICBzeW5jb3BzID0gZmFsc2U7Ci0gIHJ1bl90ZXN0
KAotICAgICAgbnRocmVhZHMsCi0gICAgICBGTEFHU19saW5lcywKLSAgICAgIEZMQUdTX251bVJl
Y3MsCi0gICAgICBGTEFHU193b3JrLAotICAgICAgaXRlcnMsCi0gICAgICBmYywKLSAgICAgIHNp
bXBsZSwKLSAgICAgIGRlZGljYXRlZCwKLSAgICAgIHRjLAotICAgICAgc3luY29wcyk7Ci19Ci0K
LUJFTkNITUFSS19SRUxBVElWRShjb21iaW5pbmdfbm9fZGVkaWNhdGVkX3RjX2FzeW5jX2R1cCwg
aXRlcnMpIHsKLSAgcnVuX3Rlc3QoCi0gICAgICBudGhyZWFkcywKLSAgICAgIEZMQUdTX2xpbmVz
LAotICAgICAgRkxBR1NfbnVtUmVjcywKLSAgICAgIEZMQUdTX3dvcmssCi0gICAgICBpdGVycywK
LSAgICAgIGZjLAotICAgICAgc2ltcGxlLAotICAgICAgZGVkaWNhdGVkLAotICAgICAgdGMsCi0g
ICAgICBzeW5jb3BzKTsKLX0KLQotQkVOQ0hNQVJLX0RSQVdfTElORSgpCi0KLXZvaWQgYmVuY2ht
YXJrU2V0dXAoKSB7Ci0gIGludCBudW1Db3JlcyA9IHN0ZDo6dGhyZWFkOjpoYXJkd2FyZV9jb25j
dXJyZW5jeSgpOwotICBzdGQ6OmNvdXQgPDwgIlxuUnVubmluZyBiZW5jaG1hcmtzIG9uIG1hY2hp
bmUgd2l0aCAiIDw8IG51bUNvcmVzCi0gICAgICAgICAgICA8PCAiIGxvZ2ljYWwgY29yZXMiIDw8
IHN0ZDo6ZW5kbDsKLX0KLQotVEVTVChGbGF0Q29tYmluaW5nLCBmb2xseV9iZW5jaG1hcmspIHsK
LSAgaWYgKEZMQUdTX2JlbmNobWFyaykgewotICAgIGJlbmNobWFya1NldHVwKCk7Ci0gICAgZm9y
IChib29sIGIgOiB7dHJ1ZSwgZmFsc2V9KSB7Ci0gICAgICBzaW1wbGUgPSBiOwotICAgICAgc3Rk
OjpzdHJpbmcgc3RyID0gc2ltcGxlID8gInNpbXBsZSIgOiAiY3VzdG9tIjsKLSAgICAgIHN0ZDo6
Y291dCA8PCAiXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIiA8PCBzdHIK
LSAgICAgICAgICAgICAgICA8PCAiIGludGVyZmFjZSIgPDwgc3RkOjplbmRsOwotICAgICAgZm9y
IChpbnQgaSA6IG50aHIpIHsKLSAgICAgICAgc3RkOjpjb3V0IDw8ICJcbi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVyIG9mIHRocmVhZHMgPSAiCi0gICAgICAgICAgICAg
ICAgICA8PCBpIDw8IHN0ZDo6ZW5kbDsKLSAgICAgICAgbnRocmVhZHMgPSBpOwotICAgICAgICBm
b2xseTo6cnVuQmVuY2htYXJrcygpOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi0vLyBEaXJl
Y3QgbWVhc3VyZW1lbnQgLSBub3QgdXNpbmcgZm9sbHk6OkJlbmNobWFyawotCi1zdGF0aWMgdWlu
dDY0X3QgdGVzdCgKLSAgICBzdGQ6OnN0cmluZyBuYW1lLAotICAgIGJvb2wgZmMsCi0gICAgYm9v
bCBkZWRpY2F0ZWQsCi0gICAgYm9vbCB0YywKLSAgICBib29sIHN5bmNvcHMsCi0gICAgdWludDY0
X3QgYmFzZSkgewotICB1aW50NjRfdCBtaW4gPSBVSU5UTUFYX01BWDsKLSAgdWludDY0X3QgbWF4
ID0gMDsKLSAgdWludDY0X3Qgc3VtID0gMDsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IEZMQUdT
X3JlcHM7ICsraSkgewotICAgIHVpbnQ2NF90IGR1ciA9IHJ1bl90ZXN0KAotICAgICAgICBudGhy
ZWFkcywKLSAgICAgICAgRkxBR1NfbGluZXMsCi0gICAgICAgIEZMQUdTX251bVJlY3MsCi0gICAg
ICAgIEZMQUdTX3dvcmssCi0gICAgICAgIEZMQUdTX29wcywKLSAgICAgICAgZmMsCi0gICAgICAg
IHNpbXBsZSwKLSAgICAgICAgZGVkaWNhdGVkLAotICAgICAgICB0YywKLSAgICAgICAgc3luY29w
cyk7Ci0gICAgc3VtICs9IGR1cjsKLSAgICBtaW4gPSBzdGQ6Om1pbihtaW4sIGR1cik7Ci0gICAg
bWF4ID0gc3RkOjptYXgobWF4LCBkdXIpOwotICB9Ci0gIHVpbnQ2NF90IGF2ZyA9IHN1bSAvIEZM
QUdTX3JlcHM7Ci0KLSAgdWludDY0X3QgcmVzID0gbWluOwotICBzdGQ6OmNvdXQgPDwgbmFtZTsK
LSAgc3RkOjpjb3V0IDw8ICIgICAiIDw8IHN0ZDo6c2V0dyg0KSA8PCBtYXggLyBGTEFHU19vcHMg
PDwgIiBucyI7Ci0gIHN0ZDo6Y291dCA8PCAiICAgIiA8PCBzdGQ6OnNldHcoNCkgPDwgYXZnIC8g
RkxBR1Nfb3BzIDw8ICIgbnMiOwotICBzdGQ6OmNvdXQgPDwgIiAgICIgPDwgc3RkOjpzZXR3KDQp
IDw8IHJlcyAvIEZMQUdTX29wcyA8PCAiIG5zIjsKLSAgaWYgKGJhc2UpIHsKLSAgICBzdGQ6OmNv
dXQgPDwgIiAiIDw8IHN0ZDo6c2V0dygzKSA8PCAxMDAgKiBiYXNlIC8gcmVzIDw8ICIlIjsKLSAg
fQotICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwotICByZXR1cm4gcmVzOwotfQotCi1URVNUKEZs
YXRDb21iaW5pbmcsIGRpcmVjdF9tZWFzdXJlbWVudCkgewotICBpZiAoIUZMQUdTX2RpcmVjdCkg
ewotICAgIHJldHVybjsKLSAgfQotICBiZW5jaG1hcmtTZXR1cCgpOwotICBzaW1wbGUgPSBmYWxz
ZTsKLSAgc3RkOjpzdHJpbmcgc3RyID0gc2ltcGxlID8gInNpbXBsZSIgOiAiY3VzdG9tIjsKLSAg
c3RkOjpjb3V0IDw8ICJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAiIDw8
IHN0ciA8PCAiIGludGVyZmFjZSIKLSAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAgZm9yIChp
bnQgaSA6IG50aHIpIHsKLSAgICBudGhyZWFkcyA9IGk7Ci0gICAgc3RkOjpjb3V0IDw8ICJcbi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXIgb2YgdGhyZWFkcyA9ICIK
LSAgICAgICAgICAgICAgPDwgaSA8PCAiXG4iCi0gICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsK
LSAgICBzdGQ6OmNvdXQgPDwgIlRlc3RfbmFtZSwgTWF4IHRpbWUsIEF2ZyB0aW1lLCBNaW4gdGlt
ZSwgJSBiYXNlIG1pbiAvIG1pblxuIgotICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0KLSAg
ICB1aW50NjRfdCBiYXNlID0KLSAgICB0ZXN0KCJub19jb21iaW5pbmcgLSBiYXNlICAgICAgICAg
IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDApOwotICAgIHRlc3QoIm5vX2NvbWJpbmlu
ZyAtIGR1cCAgICAgICAgICAiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgYmFzZSk7Ci0g
ICAgc3RkOjpjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0i
IDw8IHN0ZDo6ZW5kbDsKLQotICAgIHN0ZDo6Y291dCA8PCAiLS0tLSBkZWRpY2F0ZWQtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIiA8PCBzdGQ6OmVuZGw7Ci0gICAgdGVzdCgiY29tYmluaW5nX25v
dGNfc3luYyAgICAgICAgICIsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCBiYXNlKTsKLSAgICB0
ZXN0KCJjb21iaW5pbmdfbm90Y19zeW5jIC0gZHVwICAgIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRy
dWUsIGJhc2UpOwotICAgIHN0ZDo6Y291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIiA8PCBzdGQ6OmVuZGw7Ci0gICAgdGVzdCgiY29tYmluaW5nX25vdGNfYXN5
bmMgICAgICAgICIsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgYmFzZSk7Ci0gICAgdGVzdCgi
Y29tYmluaW5nX25vdGNfYXN5bmMgLSBkdXAgICIsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwg
YmFzZSk7Ci0gICAgc3RkOjpjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0iIDw8IHN0ZDo6ZW5kbDsKLSAgICB0ZXN0KCJjb21iaW5pbmdfdGNfc3luYyAgICAg
ICAgICAgIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgYmFzZSk7Ci0gICAgdGVzdCgiY29tYmlu
aW5nX3RjX3N5bmMgLSBkdXAgICAgICIsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIGJhc2UpOwot
ICAgIHN0ZDo6Y291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IiA8PCBzdGQ6OmVuZGw7Ci0gICAgdGVzdCgiY29tYmluaW5nX3RjX2FzeW5jICAgICAgICAgICIs
IHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBiYXNlKTsKLSAgICB0ZXN0KCJjb21iaW5pbmdfdGNf
YXN5bmMgLSBkdXAgICAgIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGJhc2UpOwotICAgIHN0
ZDo6Y291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA8PCBz
dGQ6OmVuZGw7Ci0KLSAgICBzdGQ6OmNvdXQgPDwgIi0tLS0gbm8gZGVkaWNhdGVkLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSIgPDwgc3RkOjplbmRsOwotICAgIHRlc3QoImNvbWJpbmluZ19ub3RjX3N5
bmMgICAgICAgICAiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGJhc2UpOwotICAgIHRlc3Qo
ImNvbWJpbmluZ19ub3RjX3N5bmMgLSBkdXAgICAiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUs
IGJhc2UpOwotICAgIHN0ZDo6Y291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIiA8PCBzdGQ6OmVuZGw7Ci0gICAgdGVzdCgiY29tYmluaW5nX25vdGNfYXN5bmMg
ICAgICAgICIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGJhc2UpOwotICAgIHRlc3QoImNv
bWJpbmluZ19ub3RjX2FzeW5jIC0gZHVwICAiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBi
YXNlKTsKLSAgICBzdGQ6OmNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSIgPDwgc3RkOjplbmRsOwotICAgIHRlc3QoImNvbWJpbmluZ190Y19zeW5jICAgICAg
ICAgICAiLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgYmFzZSk7Ci0gICAgdGVzdCgiY29tYmlu
aW5nX3RjX3N5bmMgLSBkdXAgICAgICIsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBiYXNlKTsK
LSAgICBzdGQ6OmNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSIgPDwgc3RkOjplbmRsOwotICAgIHRlc3QoImNvbWJpbmluZ190Y19hc3luYyAgICAgICAgICAi
LCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGJhc2UpOwotICAgIHRlc3QoImNvbWJpbmluZ190
Y19hc3luYyAtIGR1cCAgICAiLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGJhc2UpOwotICAg
IHN0ZDo6Y291dCA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA8
PCBzdGQ6OmVuZGw7Ci0gIH0KLX0KLQotLyoKLVNlZSBiZW5jaG1hcmsgcmVzdWx0cyBpbiBodHRw
czovL3BoYWJyaWNhdG9yLmludGVybi5mYWNlYm9vay5jb20vUDU3MjA0ODk1Ci0KLVRoZSByZXN1
bHRzIGFyZSBmcm9tIGEgcnVuIHVzaW5nIHRoZSBjb21tYW5kCi0kIG51bWFjdGwgLU4gMSBmbGF0
X2NvbWJpbmluZ19iZW5jaG1hcmsgLS1iZW5jaG1hcmsgLS1ibV9taW5faXRlcnM9MTAwMDAwIC0t
ZGlyZWN0Ci0KLVVzaW5nIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMgb2YgdGhlIGJlbmNobWFyazog
SW4gZWFjaCBpdGVyYXRpb24sIHRoZQotb3BlcmF0aW9uIG9uIHRoZSBzaGFyZWQgZGF0YSBzdHJ1
Y3R1cmUgdXBkYXRlcyA1IGNhY2hlIGxpbmVzIGFuZAotcGVyZm9ybXMgdW5yZWxhdGVkIHdvcmsg
KH4zMDBucykgYWZ0ZXIgZWFjaCBvcGVyYXRpb24uIFRoZSBiZW5jaG1hcmsKLWRvZXNuJ3QgZG8g
YW55IHNtYXJ0IGNvbWJpbmluZyAoaS5lLiwgc2F2aW5nIG9yIGRyb3BwaW5nIHNvbWUgd29yawot
YmFzZWQgb24gdW5kZXJzdGFuZGluZyB0aGUgZGV0YWlscyBvZiB0aGUgY29tYmluZWQgb3BlcmF0
aW9ucykuCi0KLURpcmVjdCBtZWFzdXJlbWVudHMgYXJlIHVzZWQgdG8gZXZhbHVhdGUgdGhlIGhp
Z2ggdmFyaWFuY2UgaW4gc29tZSBjYXNlcy4KLUR1cGxpY2F0ZSBydW5zIGFyZSBpbmNsdWRlZCBp
biBvcmRlciB0byBhc3Nlc3MgdGhlIHJlbGV2YW5jZSBvZiBvdXRsaWVycy4KLQotLS0tLQotWz09
PT09PT09PT1dIFJ1bm5pbmcgMiB0ZXN0cyBmcm9tIDEgdGVzdCBjYXNlLgotWy0tLS0tLS0tLS1d
IEdsb2JhbCB0ZXN0IGVudmlyb25tZW50IHNldC11cC4KLVstLS0tLS0tLS0tXSAyIHRlc3RzIGZy
b20gRmxhdENvbWJpbmluZwotWyBSVU4gICAgICBdIEZsYXRDb21iaW5pbmcuZm9sbHlfYmVuY2ht
YXJrCi0KLVJ1bm5pbmcgYmVuY2htYXJrcyBvbiBtYWNoaW5lIHdpdGggMzIgbG9naWNhbCBjb3Jl
cwotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2ltcGxlIGludGVyZmFj
ZQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlciBvZiB0aHJlYWRz
ID0gMQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotZm9sbHkvZXhwZXJpbWVudGFsL2ZsYXRfY29tYmlu
aW5nL3Rlc3QvRmxhdENvbWJpbmluZ0JlbmNobWFyay5jcHByZWxhdGl2ZSAgdGltZS9pdGVyICBp
dGVycy9zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1ub19jb21iaW5pbmdfYmFzZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzMC40M25zICAgIDMuMDNNCi1ub19jb21i
aW5pbmdfZHVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwLjA5JSAgIDMzMC4x
M25zICAgIDMuMDNNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1j
b21iaW5pbmdfZGVkaWNhdGVkX25vdGNfc3luYyAgICAgICAgICAgICAgICAgICAgIDkzLjE3JSAg
IDM1NC42Nm5zICAgIDIuODJNCi1jb21iaW5pbmdfZGVkaWNhdGVkX25vdGNfc3luY19kdXAgICAg
ICAgICAgICAgICAgIDkzLjU3JSAgIDM1My4xNW5zICAgIDIuODNNCi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi1jb21iaW5pbmdfZGVkaWNhdGVkX25vdGNfYXN5bmMgICAgICAgICAgICAgICAgICAgIDk5
LjM1JSAgIDMzMi42MG5zICAgIDMuMDFNCi1jb21iaW5pbmdfZGVkaWNhdGVkX25vdGNfYXN5bmNf
ZHVwICAgICAgICAgICAgICAgIDk5LjA3JSAgIDMzMy41NG5zICAgIDMuMDBNCi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi1jb21iaW5pbmdfZGVkaWNhdGVkX3RjX3N5bmMgICAgICAgICAgICAgICAgICAg
ICAgIDkzLjA1JSAgIDM1NS4xM25zICAgIDIuODJNCi1jb21iaW5pbmdfZGVkaWNhdGVkX3RjX3N5
bmNfZHVwICAgICAgICAgICAgICAgICAgIDkyLjg3JSAgIDM1NS44MW5zICAgIDIuODFNCi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfZGVkaWNhdGVkX3RjX2FzeW5jICAgICAgICAgICAg
ICAgICAgICAgIDk5LjE3JSAgIDMzMy4yMW5zICAgIDMuMDBNCi1jb21iaW5pbmdfZGVkaWNhdGVk
X3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAgICAgIDk5LjI4JSAgIDMzMi44NG5zICAgIDMuMDBN
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm9f
ZGVkaWNhdGVkX25vdGNfc3luYyAgICAgICAgICAgICAgICAgIDkzLjUxJSAgIDM1My4zOG5zICAg
IDIuODNNCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX25vdGNfc3luY19kdXAgICAgICAgICAgICAg
IDkzLjI3JSAgIDM1NC4yNm5zICAgIDIuODJNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5p
bmdfbm9fZGVkaWNhdGVkX25vdGNfYXN5bmMgICAgICAgICAgICAgICAgIDk5LjQwJSAgIDMzMi40
NG5zICAgIDMuMDFNCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX25vdGNfYXN5bmNfZHVwICAgICAg
ICAgICAgIDk5LjEzJSAgIDMzMy4zNG5zICAgIDMuMDBNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1j
b21iaW5pbmdfbm9fZGVkaWNhdGVkX3RjX3N5bmMgICAgICAgICAgICAgICAgICAgIDkzLjM4JSAg
IDM1My44Nm5zICAgIDIuODNNCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX3RjX3N5bmNfZHVwICAg
ICAgICAgICAgICAgIDkzLjUyJSAgIDM1My4zMW5zICAgIDIuODNNCi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX3RjX2FzeW5jICAgICAgICAgICAgICAgICAgIDk5
LjI5JSAgIDMzMi43OG5zICAgIDMuMDBNCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX3RjX2FzeW5j
X2R1cCAgICAgICAgICAgICAgIDk5LjE5JSAgIDMzMy4xMW5zICAgIDMuMDBNCi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gTnVtYmVyIG9mIHRocmVhZHMgPSAyCi09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1m
b2xseS9leHBlcmltZW50YWwvZmxhdF9jb21iaW5pbmcvdGVzdC9GbGF0Q29tYmluaW5nQmVuY2ht
YXJrLmNwcHJlbGF0aXZlICB0aW1lL2l0ZXIgIGl0ZXJzL3MKLT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LW5vX2NvbWJpbmluZ19iYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMjEzLjYwbnMgICAgNC42OE0KLW5vX2NvbWJpbmluZ19kdXAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxMDAuODQlICAgMjExLjgybnMgICAgNC43Mk0KLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfbm90Y19zeW5j
ICAgICAgICAgICAgICAgICAgICAgODkuODQlICAgMjM3Ljc2bnMgICAgNC4yMU0KLWNvbWJpbmlu
Z19kZWRpY2F0ZWRfbm90Y19zeW5jX2R1cCAgICAgICAgICAgICAgICAgODkuODUlICAgMjM3Ljcz
bnMgICAgNC4yMU0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfbm90
Y19hc3luYyAgICAgICAgICAgICAgICAgICAgOTMuODAlICAgMjI3LjcybnMgICAgNC4zOU0KLWNv
bWJpbmluZ19kZWRpY2F0ZWRfbm90Y19hc3luY19kdXAgICAgICAgICAgICAgICAgODcuODUlICAg
MjQzLjE1bnMgICAgNC4xMU0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19kZWRpY2F0
ZWRfdGNfc3luYyAgICAgICAgICAgICAgICAgICAgICAgODYuODElICAgMjQ2LjA2bnMgICAgNC4w
Nk0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfdGNfc3luY19kdXAgICAgICAgICAgICAgICAgICAgODcu
MTUlICAgMjQ1LjA5bnMgICAgNC4wOE0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19k
ZWRpY2F0ZWRfdGNfYXN5bmMgICAgICAgICAgICAgICAgICAgICAgOTIuMTQlICAgMjMxLjgybnMg
ICAgNC4zMU0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfdGNfYXN5bmNfZHVwICAgICAgICAgICAgICAg
ICAgOTIuMDQlICAgMjMyLjA4bnMgICAgNC4zMU0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfbm90Y19zeW5jICAgICAgICAg
ICAgICAgICAgOTUuMjAlICAgMjI0LjM2bnMgICAgNC40Nk0KLWNvbWJpbmluZ19ub19kZWRpY2F0
ZWRfbm90Y19zeW5jX2R1cCAgICAgICAgICAgICAgOTUuNDAlICAgMjIzLjkxbnMgICAgNC40N00K
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfbm90Y19hc3luYyAg
ICAgICAgICAgICAgICAgOTUuNDElICAgMjIzLjg5bnMgICAgNC40N00KLWNvbWJpbmluZ19ub19k
ZWRpY2F0ZWRfbm90Y19hc3luY19kdXAgICAgICAgICAgICAgOTUuODYlICAgMjIyLjgybnMgICAg
NC40OU0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfdGNfc3lu
YyAgICAgICAgICAgICAgICAgICAgOTQuNDMlICAgMjI2LjIxbnMgICAgNC40Mk0KLWNvbWJpbmlu
Z19ub19kZWRpY2F0ZWRfdGNfc3luY19kdXAgICAgICAgICAgICAgICAgOTQuMjglICAgMjI2LjU2
bnMgICAgNC40MU0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRf
dGNfYXN5bmMgICAgICAgICAgICAgICAgICAgOTYuNjIlICAgMjIxLjA3bnMgICAgNC41Mk0KLWNv
bWJpbmluZ19ub19kZWRpY2F0ZWRfdGNfYXN5bmNfZHVwICAgICAgICAgICAgICAgOTcuMjQlICAg
MjE5LjY2bnMgICAgNC41NU0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXIgb2YgdGhyZWFk
cyA9IDMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2NvbWJp
bmluZy90ZXN0L0ZsYXRDb21iaW5pbmdCZW5jaG1hcmsuY3BwcmVsYXRpdmUgIHRpbWUvaXRlciAg
aXRlcnMvcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotbm9fY29tYmluaW5nX2Jhc2UgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODguMjBucyAgICA1LjMxTQotbm9fY29t
YmluaW5nX2R1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5NC4wNyUgICAyMDAu
MDducyAgICA1LjAwTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Y29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgICAgICA5NS4zOSUg
ICAxOTcuMzBucyAgICA1LjA3TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAg
ICAgICAgICAgICAgICA5NC41MCUgICAxOTkuMTZucyAgICA1LjAyTQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgICAgICA3
NS4yOSUgICAyNDkuOTZucyAgICA0LjAwTQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5j
X2R1cCAgICAgICAgICAgICAgICA3Mi45NyUgICAyNTcuOTFucyAgICAzLjg4TQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAg
ICAgICA5MS4yNiUgICAyMDYuMjJucyAgICA0Ljg1TQotY29tYmluaW5nX2RlZGljYXRlZF90Y19z
eW5jX2R1cCAgICAgICAgICAgICAgICAgICA5MC42OCUgICAyMDcuNTRucyAgICA0LjgyTQotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAg
ICAgICAgICAgICA4OS42NCUgICAyMDkuOTVucyAgICA0Ljc2TQotY29tYmluaW5nX2RlZGljYXRl
ZF90Y19hc3luY19kdXAgICAgICAgICAgICAgICAgICA4OC4yMSUgICAyMTMuMzZucyAgICA0LjY5
TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25v
X2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgICA5Ni4xOSUgICAxOTUuNjZucyAg
ICA1LjExTQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAg
ICA5My4yNyUgICAyMDEuNzhucyAgICA0Ljk2TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmlu
aW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgICA4MS4xMiUgICAyMzEu
OTlucyAgICA0LjMxTQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAg
ICAgICAgICA4Mi40OCUgICAyMjguMTlucyAgICA0LjM4TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Y29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgICA3OS40OCUg
ICAyMzYuNzhucyAgICA0LjIyTQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jX2R1cCAg
ICAgICAgICAgICAgICA3OS43MyUgICAyMzYuMDRucyAgICA0LjI0TQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgIDEw
MC43MCUgICAxODYuOTBucyAgICA1LjM1TQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3lu
Y19kdXAgICAgICAgICAgICAgICA5OS40MyUgICAxODkuMjducyAgICA1LjI4TQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIE51bWJlciBvZiB0aHJlYWRzID0gNAotPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Zm9sbHkvZXhwZXJpbWVudGFsL2ZsYXRfY29tYmluaW5nL3Rlc3QvRmxhdENvbWJpbmluZ0JlbmNo
bWFyay5jcHByZWxhdGl2ZSAgdGltZS9pdGVyICBpdGVycy9zCi09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci1ub19jb21iaW5pbmdfYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDI0Mi44NG5zICAgIDQuMTJNCi1ub19jb21iaW5pbmdfZHVwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMTAwLjc4JSAgIDI0MC45Nm5zICAgIDQuMTVNCi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfZGVkaWNhdGVkX25vdGNfc3lu
YyAgICAgICAgICAgICAgICAgICAgMTAwLjkxJSAgIDI0MC42NW5zICAgIDQuMTZNCi1jb21iaW5p
bmdfZGVkaWNhdGVkX25vdGNfc3luY19kdXAgICAgICAgICAgICAgICAgIDk5Ljc2JSAgIDI0My40
Mm5zICAgIDQuMTFNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfZGVkaWNhdGVkX25v
dGNfYXN5bmMgICAgICAgICAgICAgICAgICAgMTAyLjA2JSAgIDIzNy45NW5zICAgIDQuMjBNCi1j
b21iaW5pbmdfZGVkaWNhdGVkX25vdGNfYXN5bmNfZHVwICAgICAgICAgICAgICAgMTAxLjYzJSAg
IDIzOC45NG5zICAgIDQuMTlNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfZGVkaWNh
dGVkX3RjX3N5bmMgICAgICAgICAgICAgICAgICAgICAgMTA5Ljc5JSAgIDIyMS4xOG5zICAgIDQu
NTJNCi1jb21iaW5pbmdfZGVkaWNhdGVkX3RjX3N5bmNfZHVwICAgICAgICAgICAgICAgICAgMTA4
Ljk0JSAgIDIyMi45Mm5zICAgIDQuNDlNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdf
ZGVkaWNhdGVkX3RjX2FzeW5jICAgICAgICAgICAgICAgICAgICAgMTMzLjAxJSAgIDE4Mi41OG5z
ICAgIDUuNDhNCi1jb21iaW5pbmdfZGVkaWNhdGVkX3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAg
ICAgMTM0LjkxJSAgIDE4MC4wMG5zICAgIDUuNTZNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX25vdGNfc3luYyAgICAgICAg
ICAgICAgICAgMTA4Ljc3JSAgIDIyMy4yNW5zICAgIDQuNDhNCi1jb21iaW5pbmdfbm9fZGVkaWNh
dGVkX25vdGNfc3luY19kdXAgICAgICAgICAgICAgMTA3LjY0JSAgIDIyNS42MW5zICAgIDQuNDNN
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX25vdGNfYXN5bmMg
ICAgICAgICAgICAgICAgMTE1LjE0JSAgIDIxMC45MW5zICAgIDQuNzRNCi1jb21iaW5pbmdfbm9f
ZGVkaWNhdGVkX25vdGNfYXN5bmNfZHVwICAgICAgICAgICAgMTE1LjA2JSAgIDIxMS4wNW5zICAg
IDQuNzRNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX3RjX3N5
bmMgICAgICAgICAgICAgICAgICAgMTE2LjM2JSAgIDIwOC43MG5zICAgIDQuNzlNCi1jb21iaW5p
bmdfbm9fZGVkaWNhdGVkX3RjX3N5bmNfZHVwICAgICAgICAgICAgICAgMTE1LjcwJSAgIDIwOS44
OW5zICAgIDQuNzZNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVk
X3RjX2FzeW5jICAgICAgICAgICAgICAgICAgMTU5LjY5JSAgIDE1Mi4wN25zICAgIDYuNThNCi1j
b21iaW5pbmdfbm9fZGVkaWNhdGVkX3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAgMTU4LjI3JSAg
IDE1My40M25zICAgIDYuNTJNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVyIG9mIHRocmVh
ZHMgPSA2Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1mb2xseS9leHBlcmltZW50YWwvZmxhdF9jb21i
aW5pbmcvdGVzdC9GbGF0Q29tYmluaW5nQmVuY2htYXJrLmNwcHJlbGF0aXZlICB0aW1lL2l0ZXIg
IGl0ZXJzL3MKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLW5vX2NvbWJpbmluZ19iYXNlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgxLjM2bnMgICAgMy41NU0KLW5vX2Nv
bWJpbmluZ19kdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTguNTYlICAgMjg1
LjQ2bnMgICAgMy41ME0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LWNvbWJpbmluZ19kZWRpY2F0ZWRfbm90Y19zeW5jICAgICAgICAgICAgICAgICAgICAxMzIuMzkl
ICAgMjEyLjUxbnMgICAgNC43MU0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfbm90Y19zeW5jX2R1cCAg
ICAgICAgICAgICAgICAxMzMuMTAlICAgMjExLjM4bnMgICAgNC43M00KLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfbm90Y19hc3luYyAgICAgICAgICAgICAgICAgICAx
NDEuMzUlICAgMTk5LjA1bnMgICAgNS4wMk0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfbm90Y19hc3lu
Y19kdXAgICAgICAgICAgICAgICAxNDMuMTglICAgMTk2LjUxbnMgICAgNS4wOU0KLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfdGNfc3luYyAgICAgICAgICAgICAgICAg
ICAgICAxMzguOTQlICAgMjAyLjUwbnMgICAgNC45NE0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfdGNf
c3luY19kdXAgICAgICAgICAgICAgICAgICAxMzguNjQlICAgMjAyLjkzbnMgICAgNC45M00KLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfdGNfYXN5bmMgICAgICAgICAg
ICAgICAgICAgICAxOTkuNzYlICAgMTQwLjg1bnMgICAgNy4xME0KLWNvbWJpbmluZ19kZWRpY2F0
ZWRfdGNfYXN5bmNfZHVwICAgICAgICAgICAgICAgICAyMDAuMjglICAgMTQwLjQ4bnMgICAgNy4x
Mk0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19u
b19kZWRpY2F0ZWRfbm90Y19zeW5jICAgICAgICAgICAgICAgICAxNTUuNDglICAgMTgwLjk2bnMg
ICAgNS41M00KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfbm90Y19zeW5jX2R1cCAgICAgICAgICAg
ICAxNTAuODIlICAgMTg2LjU1bnMgICAgNS4zNk0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJp
bmluZ19ub19kZWRpY2F0ZWRfbm90Y19hc3luYyAgICAgICAgICAgICAgICAxNjIuMjMlICAgMTcz
LjQzbnMgICAgNS43N00KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfbm90Y19hc3luY19kdXAgICAg
ICAgICAgICAxNjEuMzMlICAgMTc0LjM5bnMgICAgNS43M00KLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfdGNfc3luYyAgICAgICAgICAgICAgICAgICAxNjcuOTAl
ICAgMTY3LjU3bnMgICAgNS45N00KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfdGNfc3luY19kdXAg
ICAgICAgICAgICAgICAxNjQuODQlICAgMTcwLjY5bnMgICAgNS44Nk0KLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfdGNfYXN5bmMgICAgICAgICAgICAgICAgICAy
NDIuNTElICAgMTE2LjAybnMgICAgOC42Mk0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfdGNfYXN5
bmNfZHVwICAgICAgICAgICAgICAyNDUuNjclICAgMTE0LjUzbnMgICAgOC43M00KLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBOdW1iZXIgb2YgdGhyZWFkcyA9IDgKLT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LWZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2NvbWJpbmluZy90ZXN0L0ZsYXRDb21iaW5pbmdCZW5j
aG1hcmsuY3BwcmVsYXRpdmUgIHRpbWUvaXRlciAgaXRlcnMvcwotPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotbm9fY29tYmluaW5nX2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAzMTUuNTducyAgICAzLjE3TQotbm9fY29tYmluaW5nX2R1cCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA5OC44MyUgICAzMTkuMzJucyAgICAzLjEzTQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5
bmMgICAgICAgICAgICAgICAgICAgIDE3MC40OCUgICAxODUuMTFucyAgICA1LjQwTQotY29tYmlu
aW5nX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgICAgIDE3NC41NyUgICAxODAu
NzducyAgICA1LjUzTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9u
b3RjX2FzeW5jICAgICAgICAgICAgICAgICAgIDE3OC41NyUgICAxNzYuNzJucyAgICA1LjY2TQot
Y29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAgIDE4MS4zMCUg
ICAxNzQuMDZucyAgICA1Ljc1TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGlj
YXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgICAgIDE5NS40MCUgICAxNjEuNTBucyAgICA2
LjE5TQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgICAgIDE5
Ny4xOCUgICAxNjAuMDVucyAgICA2LjI1TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5n
X2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgICAgIDMyMi4wMyUgICAgOTcuOTlu
cyAgIDEwLjIwTQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAg
ICAgIDMyNC41MSUgICAgOTcuMjRucyAgIDEwLjI4TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAg
ICAgICAgICAgIDIwNS42MSUgICAxNTMuNDhucyAgICA2LjUyTQotY29tYmluaW5nX25vX2RlZGlj
YXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgIDIwNC45NCUgICAxNTMuOThucyAgICA2LjQ5
TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5j
ICAgICAgICAgICAgICAgIDIxNy44MSUgICAxNDQuODhucyAgICA2LjkwTQotY29tYmluaW5nX25v
X2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgIDIxOC41OCUgICAxNDQuMzducyAg
ICA2LjkzTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19z
eW5jICAgICAgICAgICAgICAgICAgIDIyMy45NiUgICAxNDAuOTFucyAgICA3LjEwTQotY29tYmlu
aW5nX25vX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgIDIyNC41NSUgICAxNDAu
NTNucyAgICA3LjEyTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRl
ZF90Y19hc3luYyAgICAgICAgICAgICAgICAgIDM2NC41OCUgICAgODYuNTZucyAgIDExLjU1TQot
Y29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgIDM2My4zMyUg
ICAgODYuODZucyAgIDExLjUxTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlciBvZiB0aHJl
YWRzID0gMTIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2Nv
bWJpbmluZy90ZXN0L0ZsYXRDb21iaW5pbmdCZW5jaG1hcmsuY3BwcmVsYXRpdmUgIHRpbWUvaXRl
ciAgaXRlcnMvcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotbm9fY29tYmluaW5nX2Jhc2UgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTMuNTlucyAgICAyLjgzTQotbm9f
Y29tYmluaW5nX2R1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OS45MSUgICAz
NTMuOTFucyAgICAyLjgzTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgICAgIDI3Ni4z
NiUgICAxMjcuOTVucyAgICA3LjgyTQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVw
ICAgICAgICAgICAgICAgIDI3OC44OCUgICAxMjYuNzlucyAgICA3Ljg5TQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgICAg
IDI0OS41MiUgICAxNDEuNzFucyAgICA3LjA2TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2Fz
eW5jX2R1cCAgICAgICAgICAgICAgIDI0Ny4yNiUgICAxNDMuMDBucyAgICA2Ljk5TQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAg
ICAgICAgIDMxOC41NyUgICAxMTAuOTlucyAgICA5LjAxTQotY29tYmluaW5nX2RlZGljYXRlZF90
Y19zeW5jX2R1cCAgICAgICAgICAgICAgICAgIDMyNi4yNyUgICAxMDguMzducyAgICA5LjIzTQot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAg
ICAgICAgICAgICAgIDQyOC41MCUgICAgODIuNTJucyAgIDEyLjEyTQotY29tYmluaW5nX2RlZGlj
YXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgICAgIDQyOS4xOSUgICAgODIuMzlucyAgIDEy
LjE0TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5n
X25vX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgIDI3Ni41NCUgICAxMjcuODZu
cyAgICA3LjgyTQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAg
ICAgIDI3NS41OSUgICAxMjguMzFucyAgICA3Ljc5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29t
YmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgIDI5OC45MiUgICAx
MTguMjlucyAgICA4LjQ1TQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAg
ICAgICAgICAgIDI5OC45MyUgICAxMTguMjhucyAgICA4LjQ1TQotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgIDMwMC41
NiUgICAxMTcuNjRucyAgICA4LjUwTQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jX2R1
cCAgICAgICAgICAgICAgIDI5Ni45NSUgICAxMTkuMDducyAgICA4LjQwTQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAg
IDQzMS4wNiUgICAgODIuMDNucyAgIDEyLjE5TQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19h
c3luY19kdXAgICAgICAgICAgICAgIDQzMC40MCUgICAgODIuMTVucyAgIDEyLjE3TQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIE51bWJlciBvZiB0aHJlYWRzID0gMTYKLT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLWZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2NvbWJpbmluZy90ZXN0L0ZsYXRDb21iaW5pbmdC
ZW5jaG1hcmsuY3BwcmVsYXRpdmUgIHRpbWUvaXRlciAgaXRlcnMvcwotPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotbm9fY29tYmluaW5nX2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAzNTguNTducyAgICAyLjc5TQotbm9fY29tYmluaW5nX2R1cCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA5OS45NyUgICAzNTguNzBucyAgICAyLjc5TQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3Rj
X3N5bmMgICAgICAgICAgICAgICAgICAgIDMxOS43MyUgICAxMTIuMTVucyAgICA4LjkyTQotY29t
YmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgICAgIDMyNy44NiUgICAx
MDkuMzducyAgICA5LjE0TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRl
ZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgICAgIDI5Ni4xNyUgICAxMjEuMDducyAgICA4LjI2
TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAgIDMwNi44
NiUgICAxMTYuODVucyAgICA4LjU2TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2Rl
ZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgICAgIDMzNy41MyUgICAxMDYuMjRucyAg
ICA5LjQxTQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgICAg
IDM0Ny45OCUgICAxMDMuMDRucyAgICA5LjcwTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmlu
aW5nX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgICAgIDQyMy44MCUgICAgODQu
NjFucyAgIDExLjgyTQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAg
ICAgICAgIDQyMS4wNyUgICAgODUuMTZucyAgIDExLjc0TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmMgICAg
ICAgICAgICAgICAgIDMyMS45NCUgICAxMTEuMzhucyAgICA4Ljk4TQotY29tYmluaW5nX25vX2Rl
ZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgIDMxOC41NCUgICAxMTIuNTducyAgICA4
Ljg4TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2Fz
eW5jICAgICAgICAgICAgICAgIDM2NC43MSUgICAgOTguMzJucyAgIDEwLjE3TQotY29tYmluaW5n
X25vX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgIDM2NC4yMiUgICAgOTguNDVu
cyAgIDEwLjE2TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90
Y19zeW5jICAgICAgICAgICAgICAgICAgIDMyMi45MSUgICAxMTEuMDRucyAgICA5LjAxTQotY29t
YmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgIDMyMi40MiUgICAx
MTEuMjFucyAgICA4Ljk5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGlj
YXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgIDQ2Ni4zMCUgICAgNzYuOTBucyAgIDEzLjAw
TQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgIDQ2Mi43
NiUgICAgNzcuNDlucyAgIDEyLjkxTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlciBvZiB0
aHJlYWRzID0gMjQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0
X2NvbWJpbmluZy90ZXN0L0ZsYXRDb21iaW5pbmdCZW5jaG1hcmsuY3BwcmVsYXRpdmUgIHRpbWUv
aXRlciAgaXRlcnMvcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotbm9fY29tYmluaW5nX2Jhc2UgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDguNTRucyAgICAyLjg3TQot
bm9fY29tYmluaW5nX2R1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OS45NiUg
ICAzNDguNjlucyAgICAyLjg3TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgICAgIDI2
MC4yMSUgICAxMzMuOTVucyAgICA3LjQ3TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmNf
ZHVwICAgICAgICAgICAgICAgIDI1Ny44NCUgICAxMzUuMThucyAgICA3LjQwTQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAg
ICAgIDI0Mi4yNSUgICAxNDMuODhucyAgICA2Ljk1TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3Rj
X2FzeW5jX2R1cCAgICAgICAgICAgICAgIDIzNS44OCUgICAxNDcuNzZucyAgICA2Ljc3TQotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAg
ICAgICAgICAgIDI2Mi40NSUgICAxMzIuODBucyAgICA3LjUzTQotY29tYmluaW5nX2RlZGljYXRl
ZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgICAgIDI1MS4xNCUgICAxMzguNzhucyAgICA3LjIx
TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luYyAgICAg
ICAgICAgICAgICAgICAgIDI1Ni44OSUgICAxMzUuNjhucyAgICA3LjM3TQotY29tYmluaW5nX2Rl
ZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgICAgIDMwNC43NiUgICAxMTQuMzducyAg
ICA4Ljc0TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmlu
aW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgIDI3MC4yMCUgICAxMjku
MDBucyAgICA3Ljc1TQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAg
ICAgICAgIDI3MS42OSUgICAxMjguMjlucyAgICA3LjgwTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Y29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgIDI5OC4zNSUg
ICAxMTYuODJucyAgICA4LjU2TQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1
cCAgICAgICAgICAgIDI4OS4wNCUgICAxMjAuNTlucyAgICA4LjI5TQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgIDI4
Ni41OSUgICAxMjEuNjJucyAgICA4LjIyTQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5j
X2R1cCAgICAgICAgICAgICAgIDI5Mi4yMSUgICAxMTkuMjhucyAgICA4LjM4TQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAg
ICAgIDQ3MS44NiUgICAgNzMuODducyAgIDEzLjU0TQotY29tYmluaW5nX25vX2RlZGljYXRlZF90
Y19hc3luY19kdXAgICAgICAgICAgICAgIDQ1OC4xNiUgICAgNzYuMDhucyAgIDEzLjE0TQotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlciBvZiB0aHJlYWRzID0gMzIKLT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLWZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2NvbWJpbmluZy90ZXN0L0ZsYXRDb21iaW5p
bmdCZW5jaG1hcmsuY3BwcmVsYXRpdmUgIHRpbWUvaXRlciAgaXRlcnMvcwotPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotbm9fY29tYmluaW5nX2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAzMzcuNjFucyAgICAyLjk2TQotbm9fY29tYmluaW5nX2R1cCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA5OS40MSUgICAzMzkuNjBucyAgICAyLjk0TQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9u
b3RjX3N5bmMgICAgICAgICAgICAgICAgICAgIDIwNC41MCUgICAxNjUuMDlucyAgICA2LjA2TQot
Y29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgICAgIDIzMy4yOCUg
ICAxNDQuNzJucyAgICA2LjkxTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGlj
YXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgICAgIDE4Ny4yMCUgICAxODAuMzVucyAgICA1
LjU0TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAgIDE5
Mi43NiUgICAxNzUuMTVucyAgICA1LjcxTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5n
X2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgICAgIDIyMC41NiUgICAxNTMuMDdu
cyAgICA2LjUzTQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAg
ICAgIDIwNy42MiUgICAxNjIuNjFucyAgICA2LjE1TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29t
YmluaW5nX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgICAgIDMxNy4xMSUgICAx
MDYuNDZucyAgICA5LjM5TQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAg
ICAgICAgICAgIDMxOC45MiUgICAxMDUuODZucyAgICA5LjQ1TQotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmMg
ICAgICAgICAgICAgICAgIDI1OS4yOSUgICAxMzAuMjFucyAgICA3LjY4TQotY29tYmluaW5nX25v
X2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgIDI0OC4zMyUgICAxMzUuOTVucyAg
ICA3LjM2TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3Rj
X2FzeW5jICAgICAgICAgICAgICAgIDI5MC40MCUgICAxMTYuMjZucyAgICA4LjYwTQotY29tYmlu
aW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgIDI5OS45MiUgICAxMTIu
NTducyAgICA4Ljg4TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRl
ZF90Y19zeW5jICAgICAgICAgICAgICAgICAgIDI4MS45MSUgICAxMTkuNzZucyAgICA4LjM1TQot
Y29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgIDI4NC4xOSUg
ICAxMTguODBucyAgICA4LjQyTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2Rl
ZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgIDQzNS4xNiUgICAgNzcuNThucyAgIDEy
Ljg5TQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgIDM4
OS42NyUgICAgODYuNjRucyAgIDExLjU0TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlciBv
ZiB0aHJlYWRzID0gNDgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWZvbGx5L2V4cGVyaW1lbnRhbC9m
bGF0X2NvbWJpbmluZy90ZXN0L0ZsYXRDb21iaW5pbmdCZW5jaG1hcmsuY3BwcmVsYXRpdmUgIHRp
bWUvaXRlciAgaXRlcnMvcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotbm9fY29tYmluaW5nX2Jhc2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMzQuNDhucyAgICAyLjk5
TQotbm9fY29tYmluaW5nX2R1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMC4w
MCUgICAzMzQuNDZucyAgICAyLjk5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgICAg
IDI1Ny4wMSUgICAxMzAuMTRucyAgICA3LjY4TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5
bmNfZHVwICAgICAgICAgICAgICAgIDI1NC4xMyUgICAxMzEuNjJucyAgICA3LjYwTQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAg
ICAgICAgIDE4OS41NiUgICAxNzYuNDVucyAgICA1LjY3TQotY29tYmluaW5nX2RlZGljYXRlZF9u
b3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAgIDI0Ny42OCUgICAxMzUuMDVucyAgICA3LjQwTQot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAg
ICAgICAgICAgICAgIDI1OS40NyUgICAxMjguOTFucyAgICA3Ljc2TQotY29tYmluaW5nX2RlZGlj
YXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgICAgIDI4MS4zNCUgICAxMTguODlucyAgICA4
LjQxTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luYyAg
ICAgICAgICAgICAgICAgICAgIDMwMS45NiUgICAxMTAuNzducyAgICA5LjAzTQotY29tYmluaW5n
X2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgICAgIDM0Ny42NSUgICAgOTYuMjFu
cyAgIDEwLjM5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29t
YmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgIDI2OC40NSUgICAx
MjQuNjBucyAgICA4LjAzTQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAg
ICAgICAgICAgIDI3Mi41NCUgICAxMjIuNzNucyAgICA4LjE1TQotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgIDMwNi4w
NCUgICAxMDkuMjlucyAgICA5LjE1TQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5j
X2R1cCAgICAgICAgICAgIDI5NC4zOCUgICAxMTMuNjJucyAgICA4LjgwTQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAg
IDI4MC44OSUgICAxMTkuMDhucyAgICA4LjQwTQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19z
eW5jX2R1cCAgICAgICAgICAgICAgIDI3Ni4wMSUgICAxMjEuMThucyAgICA4LjI1TQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAg
ICAgICAgIDQ2Ni40NSUgICAgNzEuNzFucyAgIDEzLjk1TQotY29tYmluaW5nX25vX2RlZGljYXRl
ZF90Y19hc3luY19kdXAgICAgICAgICAgICAgIDQ2NS40NSUgICAgNzEuODZucyAgIDEzLjkyTQot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlciBvZiB0aHJlYWRzID0gNjQKLT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLWZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2NvbWJpbmluZy90ZXN0L0ZsYXRDb21i
aW5pbmdCZW5jaG1hcmsuY3BwcmVsYXRpdmUgIHRpbWUvaXRlciAgaXRlcnMvcwotPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotbm9fY29tYmluaW5nX2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAzMzUuNjhucyAgICAyLjk4TQotbm9fY29tYmluaW5nX2R1cCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDEwMS4wMyUgICAzMzIuMjVucyAgICAzLjAxTQotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRl
ZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgICAgIDI3Mi45MSUgICAxMjMuMDBucyAgICA4LjEz
TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgICAgIDI3MC41
NiUgICAxMjQuMDducyAgICA4LjA2TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2Rl
ZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgICAgIDIwMC40NCUgICAxNjcuNDducyAg
ICA1Ljk3TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAg
IDIwOC4zNiUgICAxNjEuMTBucyAgICA2LjIxTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmlu
aW5nX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgICAgIDI1OC40MCUgICAxMjku
OTFucyAgICA3LjcwTQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAg
ICAgICAgIDI0OS4xNiUgICAxMzQuNzJucyAgICA3LjQyTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Y29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgICAgIDM3OC44NiUg
ICAgODguNjBucyAgIDExLjI5TQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAg
ICAgICAgICAgICAgIDI5OS4zMiUgICAxMTIuMTVucyAgICA4LjkyTQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5
bmMgICAgICAgICAgICAgICAgIDI3Mi4xOCUgICAxMjMuMzNucyAgICA4LjExTQotY29tYmluaW5n
X25vX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgIDI3NS4yNiUgICAxMjEuOTVu
cyAgICA4LjIwTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9u
b3RjX2FzeW5jICAgICAgICAgICAgICAgIDI5Ni4yMyUgICAxMTMuMzJucyAgICA4LjgyTQotY29t
YmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgIDMxMS4xNyUgICAx
MDcuODhucyAgICA5LjI3TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGlj
YXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgIDI4My4zMCUgICAxMTguNDlucyAgICA4LjQ0
TQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgIDI2My44
NiUgICAxMjcuMjJucyAgICA3Ljg2TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25v
X2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgIDQyNi42MiUgICAgNzguNjhucyAg
IDEyLjcxTQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAg
IDQ0NS4xNyUgICAgNzUuNDBucyAgIDEzLjI2TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY3Vz
dG9tIGludGVyZmFjZQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJl
ciBvZiB0aHJlYWRzID0gMQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZm9sbHkvZXhwZXJpbWVudGFs
L2ZsYXRfY29tYmluaW5nL3Rlc3QvRmxhdENvbWJpbmluZ0JlbmNobWFyay5jcHByZWxhdGl2ZSAg
dGltZS9pdGVyICBpdGVycy9zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1ub19jb21iaW5pbmdfYmFz
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyOS40OW5zICAgIDMu
MDNNCi1ub19jb21iaW5pbmdfZHVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5
LjkxJSAgIDMyOS43OW5zICAgIDMuMDNNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi1jb21iaW5pbmdfZGVkaWNhdGVkX25vdGNfc3luYyAgICAgICAgICAgICAgICAg
ICAgIDk4LjY5JSAgIDMzMy44OG5zICAgIDMuMDBNCi1jb21iaW5pbmdfZGVkaWNhdGVkX25vdGNf
c3luY19kdXAgICAgICAgICAgICAgICAgIDk4LjcwJSAgIDMzMy44M25zICAgIDMuMDBNCi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfZGVkaWNhdGVkX25vdGNfYXN5bmMgICAgICAgICAg
ICAgICAgICAgIDk4LjIyJSAgIDMzNS40N25zICAgIDIuOThNCi1jb21iaW5pbmdfZGVkaWNhdGVk
X25vdGNfYXN5bmNfZHVwICAgICAgICAgICAgICAgIDk4LjE2JSAgIDMzNS42Nm5zICAgIDIuOThN
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfZGVkaWNhdGVkX3RjX3N5bmMgICAgICAg
ICAgICAgICAgICAgICAgIDk4LjcwJSAgIDMzMy44NW5zICAgIDMuMDBNCi1jb21iaW5pbmdfZGVk
aWNhdGVkX3RjX3N5bmNfZHVwICAgICAgICAgICAgICAgICAgIDk4Ljc4JSAgIDMzMy41OG5zICAg
IDMuMDBNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfZGVkaWNhdGVkX3RjX2FzeW5j
ICAgICAgICAgICAgICAgICAgICAgIDk4LjE0JSAgIDMzNS43M25zICAgIDIuOThNCi1jb21iaW5p
bmdfZGVkaWNhdGVkX3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAgICAgIDk3LjkyJSAgIDMzNi40
OW5zICAgIDIuOTdNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1j
b21iaW5pbmdfbm9fZGVkaWNhdGVkX25vdGNfc3luYyAgICAgICAgICAgICAgICAgIDk4Ljk0JSAg
IDMzMy4wMG5zICAgIDMuMDBNCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX25vdGNfc3luY19kdXAg
ICAgICAgICAgICAgIDk4Ljg2JSAgIDMzMy4yOW5zICAgIDMuMDBNCi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX25vdGNfYXN5bmMgICAgICAgICAgICAgICAgIDk4
LjM2JSAgIDMzNC45OW5zICAgIDIuOTlNCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX25vdGNfYXN5
bmNfZHVwICAgICAgICAgICAgIDk4LjYxJSAgIDMzNC4xNW5zICAgIDIuOTlNCi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX3RjX3N5bmMgICAgICAgICAgICAgICAg
ICAgIDk5LjA3JSAgIDMzMi41OG5zICAgIDMuMDFNCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX3Rj
X3N5bmNfZHVwICAgICAgICAgICAgICAgIDk5LjEyJSAgIDMzMi40MW5zICAgIDMuMDFNCi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX3RjX2FzeW5jICAgICAgICAg
ICAgICAgICAgIDk3LjA4JSAgIDMzOS4zOG5zICAgIDIuOTVNCi1jb21iaW5pbmdfbm9fZGVkaWNh
dGVkX3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAgIDk3LjU0JSAgIDMzNy44MW5zICAgIDIuOTZN
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVyIG9mIHRocmVhZHMgPSAyCi09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci1mb2xseS9leHBlcmltZW50YWwvZmxhdF9jb21iaW5pbmcvdGVzdC9GbGF0Q29t
YmluaW5nQmVuY2htYXJrLmNwcHJlbGF0aXZlICB0aW1lL2l0ZXIgIGl0ZXJzL3MKLT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLW5vX2NvbWJpbmluZ19iYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMjE2LjcxbnMgICAgNC42MU0KLW5vX2NvbWJpbmluZ19kdXAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAuMzQlICAgMjE1Ljk3bnMgICAgNC42M00KLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19kZWRpY2F0
ZWRfbm90Y19zeW5jICAgICAgICAgICAgICAgICAgICAgOTUuNDIlICAgMjI3LjExbnMgICAgNC40
ME0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfbm90Y19zeW5jX2R1cCAgICAgICAgICAgICAgICAgOTQu
MTYlICAgMjMwLjE1bnMgICAgNC4zNE0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19k
ZWRpY2F0ZWRfbm90Y19hc3luYyAgICAgICAgICAgICAgICAgICAgOTEuODQlICAgMjM1Ljk3bnMg
ICAgNC4yNE0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfbm90Y19hc3luY19kdXAgICAgICAgICAgICAg
ICAgOTEuNDElICAgMjM3LjA4bnMgICAgNC4yMk0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJp
bmluZ19kZWRpY2F0ZWRfdGNfc3luYyAgICAgICAgICAgICAgICAgICAgICAgOTYuNzklICAgMjIz
LjkwbnMgICAgNC40N00KLWNvbWJpbmluZ19kZWRpY2F0ZWRfdGNfc3luY19kdXAgICAgICAgICAg
ICAgICAgICAgOTYuNTQlICAgMjI0LjQ3bnMgICAgNC40NU0KLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LWNvbWJpbmluZ19kZWRpY2F0ZWRfdGNfYXN5bmMgICAgICAgICAgICAgICAgICAgICAgOTAuOTAl
ICAgMjM4LjQxbnMgICAgNC4xOU0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfdGNfYXN5bmNfZHVwICAg
ICAgICAgICAgICAgICAgOTUuNDUlICAgMjI3LjAzbnMgICAgNC40ME0KLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfbm90Y19z
eW5jICAgICAgICAgICAgICAgICAxMDEuMTMlICAgMjE0LjI4bnMgICAgNC42N00KLWNvbWJpbmlu
Z19ub19kZWRpY2F0ZWRfbm90Y19zeW5jX2R1cCAgICAgICAgICAgICAxMDAuMTElICAgMjE2LjQ4
bnMgICAgNC42Mk0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRf
bm90Y19hc3luYyAgICAgICAgICAgICAgICAgOTYuNDAlICAgMjI0LjgwbnMgICAgNC40NU0KLWNv
bWJpbmluZ19ub19kZWRpY2F0ZWRfbm90Y19hc3luY19kdXAgICAgICAgICAgICAgOTYuMzYlICAg
MjI0LjkwbnMgICAgNC40NU0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub19kZWRp
Y2F0ZWRfdGNfc3luYyAgICAgICAgICAgICAgICAgICAxMDAuODYlICAgMjE0Ljg1bnMgICAgNC42
NU0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfdGNfc3luY19kdXAgICAgICAgICAgICAgICAxMDEu
OTElICAgMjEyLjY1bnMgICAgNC43ME0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19u
b19kZWRpY2F0ZWRfdGNfYXN5bmMgICAgICAgICAgICAgICAgICAgOTUuNjYlICAgMjI2LjU0bnMg
ICAgNC40MU0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfdGNfYXN5bmNfZHVwICAgICAgICAgICAg
ICAgOTUuODglICAgMjI2LjAzbnMgICAgNC40Mk0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1i
ZXIgb2YgdGhyZWFkcyA9IDMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWZvbGx5L2V4cGVyaW1lbnRh
bC9mbGF0X2NvbWJpbmluZy90ZXN0L0ZsYXRDb21iaW5pbmdCZW5jaG1hcmsuY3BwcmVsYXRpdmUg
IHRpbWUvaXRlciAgaXRlcnMvcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotbm9fY29tYmluaW5nX2Jh
c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODkuNjFucyAgICA1
LjI3TQotbm9fY29tYmluaW5nX2R1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEw
MC4yMiUgICAxODkuMjBucyAgICA1LjI5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAg
ICAgIDEwMy4xOCUgICAxODMuNzZucyAgICA1LjQ0TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3Rj
X3N5bmNfZHVwICAgICAgICAgICAgICAgIDEwMy42NiUgICAxODIuOTJucyAgICA1LjQ3TQotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAg
ICAgICAgICAgICA3Ny4xNCUgICAyNDUuODFucyAgICA0LjA3TQotY29tYmluaW5nX2RlZGljYXRl
ZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAgICA5MC4yNSUgICAyMTAuMTBucyAgICA0Ljc2
TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jICAgICAg
ICAgICAgICAgICAgICAgICA4OS44OCUgICAyMTAuOTVucyAgICA0Ljc0TQotY29tYmluaW5nX2Rl
ZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgICAgICA4Ny44MyUgICAyMTUuOTBucyAg
ICA0LjYzTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3lu
YyAgICAgICAgICAgICAgICAgICAgICA4OS4zMyUgICAyMTIuMjZucyAgICA0LjcxTQotY29tYmlu
aW5nX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgICAgICA4NS4xOSUgICAyMjIu
NTZucyAgICA0LjQ5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Y29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgICA5OC40MyUg
ICAxOTIuNjRucyAgICA1LjE5TQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVw
ICAgICAgICAgICAgIDEwMS4xNSUgICAxODcuNDZucyAgICA1LjMzTQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgICA4
My43NyUgICAyMjYuMzZucyAgICA0LjQyTQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2Fz
eW5jX2R1cCAgICAgICAgICAgICA4NC42OSUgICAyMjMuODlucyAgICA0LjQ3TQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAg
ICAgICA4NS40NyUgICAyMjEuODVucyAgICA0LjUxTQotY29tYmluaW5nX25vX2RlZGljYXRlZF90
Y19zeW5jX2R1cCAgICAgICAgICAgICAgICA4Ni4zMiUgICAyMTkuNjVucyAgICA0LjU1TQotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAg
ICAgICAgICAgIDEwNS42MiUgICAxNzkuNTJucyAgICA1LjU3TQotY29tYmluaW5nX25vX2RlZGlj
YXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgIDEwNS4yNiUgICAxODAuMTRucyAgICA1LjU1
TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlciBvZiB0aHJlYWRzID0gNAotPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotZm9sbHkvZXhwZXJpbWVudGFsL2ZsYXRfY29tYmluaW5nL3Rlc3QvRmxhdENv
bWJpbmluZ0JlbmNobWFyay5jcHByZWxhdGl2ZSAgdGltZS9pdGVyICBpdGVycy9zCi09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci1ub19jb21iaW5pbmdfYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDIzNy41MG5zICAgIDQuMjFNCi1ub19jb21iaW5pbmdfZHVwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5LjgwJSAgIDIzNy45N25zICAgIDQuMjBNCi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfZGVkaWNh
dGVkX25vdGNfc3luYyAgICAgICAgICAgICAgICAgICAgMTEyLjU2JSAgIDIxMC45OW5zICAgIDQu
NzRNCi1jb21iaW5pbmdfZGVkaWNhdGVkX25vdGNfc3luY19kdXAgICAgICAgICAgICAgICAgMTA0
LjA4JSAgIDIyOC4yMG5zICAgIDQuMzhNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdf
ZGVkaWNhdGVkX25vdGNfYXN5bmMgICAgICAgICAgICAgICAgICAgMTAxLjQ0JSAgIDIzNC4xMm5z
ICAgIDQuMjdNCi1jb21iaW5pbmdfZGVkaWNhdGVkX25vdGNfYXN5bmNfZHVwICAgICAgICAgICAg
ICAgMTAwLjczJSAgIDIzNS43N25zICAgIDQuMjRNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21i
aW5pbmdfZGVkaWNhdGVkX3RjX3N5bmMgICAgICAgICAgICAgICAgICAgICAgMTExLjcwJSAgIDIx
Mi42Mm5zICAgIDQuNzBNCi1jb21iaW5pbmdfZGVkaWNhdGVkX3RjX3N5bmNfZHVwICAgICAgICAg
ICAgICAgICAgMTEzLjAwJSAgIDIxMC4xOG5zICAgIDQuNzZNCi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci1jb21iaW5pbmdfZGVkaWNhdGVkX3RjX2FzeW5jICAgICAgICAgICAgICAgICAgICAgMTMxLjEx
JSAgIDE4MS4xNW5zICAgIDUuNTJNCi1jb21iaW5pbmdfZGVkaWNhdGVkX3RjX2FzeW5jX2R1cCAg
ICAgICAgICAgICAgICAgMTMyLjY1JSAgIDE3OS4wNG5zICAgIDUuNTlNCi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX25vdGNf
c3luYyAgICAgICAgICAgICAgICAgMTE1Ljc2JSAgIDIwNS4xN25zICAgIDQuODdNCi1jb21iaW5p
bmdfbm9fZGVkaWNhdGVkX25vdGNfc3luY19kdXAgICAgICAgICAgICAgMTE0LjcwJSAgIDIwNy4w
Nm5zICAgIDQuODNNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVk
X25vdGNfYXN5bmMgICAgICAgICAgICAgICAgMTExLjYzJSAgIDIxMi43Nm5zICAgIDQuNzBNCi1j
b21iaW5pbmdfbm9fZGVkaWNhdGVkX25vdGNfYXN5bmNfZHVwICAgICAgICAgICAgMTExLjkxJSAg
IDIxMi4yMm5zICAgIDQuNzFNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm9fZGVk
aWNhdGVkX3RjX3N5bmMgICAgICAgICAgICAgICAgICAgMTIwLjA3JSAgIDE5Ny44MG5zICAgIDUu
MDZNCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX3RjX3N5bmNfZHVwICAgICAgICAgICAgICAgMTE4
LjI1JSAgIDIwMC44NW5zICAgIDQuOThNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdf
bm9fZGVkaWNhdGVkX3RjX2FzeW5jICAgICAgICAgICAgICAgICAgMTUzLjczJSAgIDE1NC40OW5z
ICAgIDYuNDdNCi1jb21iaW5pbmdfbm9fZGVkaWNhdGVkX3RjX2FzeW5jX2R1cCAgICAgICAgICAg
ICAgMTUzLjA4JSAgIDE1NS4xNW5zICAgIDYuNDVNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVt
YmVyIG9mIHRocmVhZHMgPSA2Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1mb2xseS9leHBlcmltZW50
YWwvZmxhdF9jb21iaW5pbmcvdGVzdC9GbGF0Q29tYmluaW5nQmVuY2htYXJrLmNwcHJlbGF0aXZl
ICB0aW1lL2l0ZXIgIGl0ZXJzL3MKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLW5vX2NvbWJpbmluZ19i
YXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgxLjU2bnMgICAg
My41NU0KLW5vX2NvbWJpbmluZ19kdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OTkuOTclICAgMjgxLjY1bnMgICAgMy41NU0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfbm90Y19zeW5jICAgICAgICAgICAgICAg
ICAgICAxNDQuNzYlICAgMTk0LjUwbnMgICAgNS4xNE0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfbm90
Y19zeW5jX2R1cCAgICAgICAgICAgICAgICAxNDkuOTYlICAgMTg3Ljc2bnMgICAgNS4zM00KLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfbm90Y19hc3luYyAgICAgICAg
ICAgICAgICAgICAxNDcuNzIlICAgMTkwLjYxbnMgICAgNS4yNU0KLWNvbWJpbmluZ19kZWRpY2F0
ZWRfbm90Y19hc3luY19kdXAgICAgICAgICAgICAgICAxNDAuODYlICAgMTk5Ljg5bnMgICAgNS4w
ME0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfdGNfc3luYyAgICAg
ICAgICAgICAgICAgICAgICAxNTQuMTclICAgMTgyLjYzbnMgICAgNS40OE0KLWNvbWJpbmluZ19k
ZWRpY2F0ZWRfdGNfc3luY19kdXAgICAgICAgICAgICAgICAgICAxNTYuNjAlICAgMTc5LjgwbnMg
ICAgNS41Nk0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19kZWRpY2F0ZWRfdGNfYXN5
bmMgICAgICAgICAgICAgICAgICAgICAyMDIuNDIlICAgMTM5LjEwbnMgICAgNy4xOU0KLWNvbWJp
bmluZ19kZWRpY2F0ZWRfdGNfYXN5bmNfZHVwICAgICAgICAgICAgICAgICAyMDMuNDQlICAgMTM4
LjQwbnMgICAgNy4yM00KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfbm90Y19zeW5jICAgICAgICAgICAgICAgICAxNjguMzMl
ICAgMTY3LjI3bnMgICAgNS45OE0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfbm90Y19zeW5jX2R1
cCAgICAgICAgICAgICAxNjYuMDIlICAgMTY5LjU5bnMgICAgNS45ME0KLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfbm90Y19hc3luYyAgICAgICAgICAgICAgICAx
NjYuNDQlICAgMTY5LjE2bnMgICAgNS45MU0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfbm90Y19h
c3luY19kdXAgICAgICAgICAgICAxNjAuMTQlICAgMTc1LjgybnMgICAgNS42OU0KLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfdGNfc3luYyAgICAgICAgICAgICAg
ICAgICAxODEuNzklICAgMTU0Ljg4bnMgICAgNi40Nk0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRf
dGNfc3luY19kdXAgICAgICAgICAgICAgICAxODAuMjUlICAgMTU2LjIwbnMgICAgNi40ME0KLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub19kZWRpY2F0ZWRfdGNfYXN5bmMgICAgICAg
ICAgICAgICAgICAyNDAuNTYlICAgMTE3LjA0bnMgICAgOC41NE0KLWNvbWJpbmluZ19ub19kZWRp
Y2F0ZWRfdGNfYXN5bmNfZHVwICAgICAgICAgICAgICAyNDAuNzQlICAgMTE2Ljk2bnMgICAgOC41
NU0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXIgb2YgdGhyZWFkcyA9IDgKLT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLWZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2NvbWJpbmluZy90ZXN0L0ZsYXRD
b21iaW5pbmdCZW5jaG1hcmsuY3BwcmVsYXRpdmUgIHRpbWUvaXRlciAgaXRlcnMvcwotPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotbm9fY29tYmluaW5nX2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAzMTIuOTlucyAgICAzLjE5TQotbm9fY29tYmluaW5nX2R1cCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OC45MyUgICAzMTYuMzducyAgICAzLjE2TQot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGlj
YXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgICAgIDE4Mi43MSUgICAxNzEuMzBucyAgICA1
Ljg0TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgICAgIDE4
My4yMyUgICAxNzAuODJucyAgICA1Ljg1TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5n
X2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgICAgIDE4My4xNiUgICAxNzAuODhu
cyAgICA1Ljg1TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAg
ICAgIDE4MS4yOSUgICAxNzIuNjRucyAgICA1Ljc5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29t
YmluaW5nX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgICAgIDE5MS40OSUgICAx
NjMuNDVucyAgICA2LjEyTQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAg
ICAgICAgICAgIDE5MS4wNCUgICAxNjMuODRucyAgICA2LjEwTQotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgICAgIDMwMi44
OSUgICAxMDMuMzRucyAgICA5LjY4TQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luY19kdXAg
ICAgICAgICAgICAgICAgIDMwNC4wNyUgICAxMDIuOTRucyAgICA5LjcxTQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3Rj
X3N5bmMgICAgICAgICAgICAgICAgIDIyMC40MSUgICAxNDIuMDBucyAgICA3LjA0TQotY29tYmlu
aW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgIDIxOS45MCUgICAxNDIu
MzRucyAgICA3LjAzTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRl
ZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgIDIxOC42NiUgICAxNDMuMTRucyAgICA2Ljk5TQot
Y29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgIDIxOC43NCUg
ICAxNDMuMDlucyAgICA2Ljk5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2Rl
ZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgIDI0MS44MiUgICAxMjkuNDNucyAgICA3
LjczTQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgIDI0
MS43MiUgICAxMjkuNDhucyAgICA3LjcyTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5n
X25vX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgIDM1Mi4zOSUgICAgODguODJu
cyAgIDExLjI2TQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAg
ICAgIDM1MC4xNyUgICAgODkuMzhucyAgIDExLjE5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51
bWJlciBvZiB0aHJlYWRzID0gMTIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWZvbGx5L2V4cGVyaW1l
bnRhbC9mbGF0X2NvbWJpbmluZy90ZXN0L0ZsYXRDb21iaW5pbmdCZW5jaG1hcmsuY3BwcmVsYXRp
dmUgIHRpbWUvaXRlciAgaXRlcnMvcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotbm9fY29tYmluaW5n
X2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTAuMDVucyAg
ICAyLjg2TQotbm9fY29tYmluaW5nX2R1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA5OS4wNiUgICAzNTMuMzducyAgICAyLjgzTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAg
ICAgICAgIDI2Ni44NyUgICAxMzEuMTducyAgICA3LjYyTQotY29tYmluaW5nX2RlZGljYXRlZF9u
b3RjX3N5bmNfZHVwICAgICAgICAgICAgICAgIDI0NS43OSUgICAxNDIuNDJucyAgICA3LjAyTQot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAg
ICAgICAgICAgICAgIDIzOC41NyUgICAxNDYuNzNucyAgICA2LjgyTQotY29tYmluaW5nX2RlZGlj
YXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAgIDI0MC4wMiUgICAxNDUuODRucyAgICA2
Ljg2TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jICAg
ICAgICAgICAgICAgICAgICAgIDMxNi43MCUgICAxMTAuNTNucyAgICA5LjA1TQotY29tYmluaW5n
X2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgICAgIDMyMS4wNSUgICAxMDkuMDNu
cyAgICA5LjE3TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19h
c3luYyAgICAgICAgICAgICAgICAgICAgIDQwMy4xMCUgICAgODYuODRucyAgIDExLjUyTQotY29t
YmluaW5nX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgICAgIDQwOS45NCUgICAg
ODUuMzlucyAgIDExLjcxTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgIDMwMC4y
MyUgICAxMTYuNTlucyAgICA4LjU4TQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmNf
ZHVwICAgICAgICAgICAgIDI5OS4wNyUgICAxMTcuMDRucyAgICA4LjU0TQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAg
IDI5Ny43OSUgICAxMTcuNTVucyAgICA4LjUxTQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3Rj
X2FzeW5jX2R1cCAgICAgICAgICAgIDI5Ni42NiUgICAxMTguMDBucyAgICA4LjQ3TQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAg
ICAgICAgIDMyOC4wNyUgICAxMDYuNzBucyAgICA5LjM3TQotY29tYmluaW5nX25vX2RlZGljYXRl
ZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgIDMzMS41MiUgICAxMDUuNTlucyAgICA5LjQ3TQot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luYyAgICAg
ICAgICAgICAgICAgIDQyNC41NyUgICAgODIuNDVucyAgIDEyLjEzTQotY29tYmluaW5nX25vX2Rl
ZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgIDQwOS40NyUgICAgODUuNDlucyAgIDEx
LjcwTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlciBvZiB0aHJlYWRzID0gMTYKLT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLWZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2NvbWJpbmluZy90ZXN0L0Zs
YXRDb21iaW5pbmdCZW5jaG1hcmsuY3BwcmVsYXRpdmUgIHRpbWUvaXRlciAgaXRlcnMvcwotPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotbm9fY29tYmluaW5nX2Jhc2UgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzNjAuNDducyAgICAyLjc3TQotbm9fY29tYmluaW5nX2R1cCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMC4xMSUgICAzNjAuMDducyAgICAyLjc4
TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2Rl
ZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgICAgIDMyMC41NCUgICAxMTIuNDZucyAg
ICA4Ljg5TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgICAg
IDMxMy4zMSUgICAxMTUuMDVucyAgICA4LjY5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmlu
aW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgICAgIDI5Ni44MyUgICAxMjEu
NDRucyAgICA4LjIzTQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAg
ICAgICAgIDI4OS45MSUgICAxMjQuMzRucyAgICA4LjA0TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Y29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgICAgIDM2NC4yNyUg
ICAgOTguOTZucyAgIDEwLjExTQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAg
ICAgICAgICAgICAgIDM2MS4xMCUgICAgOTkuODJucyAgIDEwLjAyTQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgICAgIDQy
NC40MyUgICAgODQuOTNucyAgIDExLjc3TQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luY19k
dXAgICAgICAgICAgICAgICAgIDQxOC4wNyUgICAgODYuMjJucyAgIDExLjYwTQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9u
b3RjX3N5bmMgICAgICAgICAgICAgICAgIDM3My4xMyUgICAgOTYuNjBucyAgIDEwLjM1TQotY29t
YmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgIDM2NC4zNSUgICAg
OTguOTNucyAgIDEwLjExTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGlj
YXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgIDM2MS40MCUgICAgOTkuNzRucyAgIDEwLjAz
TQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgIDM2Ni40
OSUgICAgOTguMzZucyAgIDEwLjE3TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25v
X2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgIDM4Mi4yMiUgICAgOTQuMzFucyAg
IDEwLjYwTQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAg
IDM4MC42NCUgICAgOTQuNzBucyAgIDEwLjU2TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmlu
aW5nX25vX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgIDQ2MS4xNCUgICAgNzgu
MTducyAgIDEyLjc5TQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAg
ICAgICAgIDQ4MS41MCUgICAgNzQuODZucyAgIDEzLjM2TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IE51bWJlciBvZiB0aHJlYWRzID0gMjQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWZvbGx5L2V4cGVy
aW1lbnRhbC9mbGF0X2NvbWJpbmluZy90ZXN0L0ZsYXRDb21iaW5pbmdCZW5jaG1hcmsuY3BwcmVs
YXRpdmUgIHRpbWUvaXRlciAgaXRlcnMvcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotbm9fY29tYmlu
aW5nX2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDguOTdu
cyAgICAyLjg3TQotbm9fY29tYmluaW5nX2R1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEwMC4xMiUgICAzNDguNTRucyAgICAyLjg3TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAg
ICAgICAgICAgIDIzNC4xNyUgICAxNDkuMDJucyAgICA2LjcxTQotY29tYmluaW5nX2RlZGljYXRl
ZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgICAgIDIwNS41NCUgICAxNjkuNzhucyAgICA1Ljg5
TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jICAg
ICAgICAgICAgICAgICAgIDI0OC4yOCUgICAxNDAuNTVucyAgICA3LjExTQotY29tYmluaW5nX2Rl
ZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAgIDIzOS43MSUgICAxNDUuNThucyAg
ICA2Ljg3TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5j
ICAgICAgICAgICAgICAgICAgICAgIDI3Mi44NyUgICAxMjcuODlucyAgICA3LjgyTQotY29tYmlu
aW5nX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgICAgIDIzNS43NiUgICAxNDgu
MDJucyAgICA2Ljc2TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90
Y19hc3luYyAgICAgICAgICAgICAgICAgICAgIDI5NS43MSUgICAxMTguMDFucyAgICA4LjQ3TQot
Y29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgICAgIDI2NS44NyUg
ICAxMzEuMjVucyAgICA3LjYyTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgIDI5
OC45NiUgICAxMTYuNzNucyAgICA4LjU3TQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5
bmNfZHVwICAgICAgICAgICAgIDI5Ny42NyUgICAxMTcuMjNucyAgICA4LjUzTQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAg
ICAgIDI5OC40NCUgICAxMTYuOTNucyAgICA4LjU1TQotY29tYmluaW5nX25vX2RlZGljYXRlZF9u
b3RjX2FzeW5jX2R1cCAgICAgICAgICAgIDI5Mi44MCUgICAxMTkuMThucyAgICA4LjM5TQotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAg
ICAgICAgICAgIDMxNi40NCUgICAxMTAuMjhucyAgICA5LjA3TQotY29tYmluaW5nX25vX2RlZGlj
YXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgIDMxNy41MiUgICAxMDkuOTBucyAgICA5LjEw
TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luYyAg
ICAgICAgICAgICAgICAgIDQzMi42NCUgICAgODAuNjZucyAgIDEyLjQwTQotY29tYmluaW5nX25v
X2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgIDQ0MS41NSUgICAgNzkuMDNucyAg
IDEyLjY1TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlciBvZiB0aHJlYWRzID0gMzIKLT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLWZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2NvbWJpbmluZy90ZXN0
L0ZsYXRDb21iaW5pbmdCZW5jaG1hcmsuY3BwcmVsYXRpdmUgIHRpbWUvaXRlciAgaXRlcnMvcwot
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotbm9fY29tYmluaW5nX2Jhc2UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAzMzguOTBucyAgICAyLjk1TQotbm9fY29tYmluaW5nX2R1
cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMC4wMSUgICAzMzguODducyAgICAy
Ljk1TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5n
X2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgICAgIDIwNC4zNCUgICAxNjUuODVu
cyAgICA2LjAzTQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAg
ICAgIDIwMi44NCUgICAxNjcuMDducyAgICA1Ljk5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29t
YmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgICAgIDE5Mi4yNyUgICAx
NzYuMjZucyAgICA1LjY3TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAg
ICAgICAgICAgIDE4OC42MSUgICAxNzkuNjhucyAgICA1LjU3TQotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgICAgIDI0Ny41
NyUgICAxMzYuODlucyAgICA3LjMxTQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jX2R1cCAg
ICAgICAgICAgICAgICAgIDI4NS41MyUgICAxMTguNjlucyAgICA4LjQzTQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgICAg
IDI3Ny45NyUgICAxMjEuOTJucyAgICA4LjIwTQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3lu
Y19kdXAgICAgICAgICAgICAgICAgIDIzMS4xMSUgICAxNDYuNjRucyAgICA2LjgyTQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRl
ZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgIDI5OS4yMCUgICAxMTMuMjducyAgICA4LjgzTQot
Y29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgIDI4OS41MyUg
ICAxMTcuMDVucyAgICA4LjU0TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2Rl
ZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgIDI4Mi4yOSUgICAxMjAuMDVucyAgICA4
LjMzTQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgIDMw
NS4wOSUgICAxMTEuMDhucyAgICA5LjAwTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5n
X25vX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgIDMxMi41MiUgICAxMDguNDRu
cyAgICA5LjIyTQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAg
ICAgIDMyNC44OCUgICAxMDQuMzFucyAgICA5LjU5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29t
YmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgIDQyMC45OSUgICAg
ODAuNTBucyAgIDEyLjQyTQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAg
ICAgICAgICAgIDQwNi41OCUgICAgODMuMzVucyAgIDEyLjAwTQotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIE51bWJlciBvZiB0aHJlYWRzID0gNDgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWZvbGx5L2V4
cGVyaW1lbnRhbC9mbGF0X2NvbWJpbmluZy90ZXN0L0ZsYXRDb21iaW5pbmdCZW5jaG1hcmsuY3Bw
cmVsYXRpdmUgIHRpbWUvaXRlciAgaXRlcnMvcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotbm9fY29t
YmluaW5nX2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMzQu
ODRucyAgICAyLjk5TQotbm9fY29tYmluaW5nX2R1cCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA5OS41NyUgICAzMzYuMjlucyAgICAyLjk3TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAg
ICAgICAgICAgICAgIDIxMi44MiUgICAxNTcuMzRucyAgICA2LjM2TQotY29tYmluaW5nX2RlZGlj
YXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgICAgIDE5OC4zOSUgICAxNjguNzhucyAgICA1
LjkzTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5j
ICAgICAgICAgICAgICAgICAgIDE2Ni43NCUgICAyMDAuODJucyAgICA0Ljk4TQotY29tYmluaW5n
X2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgICAgIDE5Ny4wNyUgICAxNjkuOTFu
cyAgICA1Ljg5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19z
eW5jICAgICAgICAgICAgICAgICAgICAgIDI0Ni4zNSUgICAxMzUuOTJucyAgICA3LjM2TQotY29t
YmluaW5nX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgICAgIDIwOS41MiUgICAx
NTkuODFucyAgICA2LjI2TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRl
ZF90Y19hc3luYyAgICAgICAgICAgICAgICAgICAgIDI5My45NCUgICAxMTMuOTFucyAgICA4Ljc4
TQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgICAgIDI4MC43
NCUgICAxMTkuMjducyAgICA4LjM4TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAg
IDMwMS42MCUgICAxMTEuMDJucyAgICA5LjAxTQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3Rj
X3N5bmNfZHVwICAgICAgICAgICAgIDI5Ni4xMCUgICAxMTMuMDlucyAgICA4Ljg0TQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAg
ICAgICAgIDMwOC45MSUgICAxMDguNDBucyAgICA5LjIzTQotY29tYmluaW5nX25vX2RlZGljYXRl
ZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAgIDI5OC40OCUgICAxMTIuMThucyAgICA4LjkxTQot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jICAgICAg
ICAgICAgICAgICAgIDMzMS4xMSUgICAxMDEuMTNucyAgICA5Ljg5TQotY29tYmluaW5nX25vX2Rl
ZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAgICAgICAgIDMyOS4zNyUgICAxMDEuNjZucyAgICA5
Ljg0TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3lu
YyAgICAgICAgICAgICAgICAgIDQ1MS41OCUgICAgNzQuMTVucyAgIDEzLjQ5TQotY29tYmluaW5n
X25vX2RlZGljYXRlZF90Y19hc3luY19kdXAgICAgICAgICAgICAgIDQzMS4zNyUgICAgNzcuNjJu
cyAgIDEyLjg4TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlciBvZiB0aHJlYWRzID0gNjQK
LT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLWZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2NvbWJpbmluZy90
ZXN0L0ZsYXRDb21iaW5pbmdCZW5jaG1hcmsuY3BwcmVsYXRpdmUgIHRpbWUvaXRlciAgaXRlcnMv
cwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotbm9fY29tYmluaW5nX2Jhc2UgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAzMzYuMjJucyAgICAyLjk3TQotbm9fY29tYmluaW5n
X2R1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMC42OSUgICAzMzMuOTJucyAg
ICAyLjk5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmlu
aW5nX2RlZGljYXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgICAgIDIzMC41NyUgICAxNDUu
ODJucyAgICA2Ljg2TQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAg
ICAgICAgIDIyMS4wOCUgICAxNTIuMDhucyAgICA2LjU4TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Y29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgICAgIDIzMi4zOCUg
ICAxNDQuNjlucyAgICA2LjkxTQotY29tYmluaW5nX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAg
ICAgICAgICAgICAgIDE5Mi43NyUgICAxNzQuNDFucyAgICA1LjczTQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgICAgIDI4
NC4wNyUgICAxMTguMzZucyAgICA4LjQ1TQotY29tYmluaW5nX2RlZGljYXRlZF90Y19zeW5jX2R1
cCAgICAgICAgICAgICAgICAgIDI5OC4wMyUgICAxMTIuODFucyAgICA4Ljg2TQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotY29tYmluaW5nX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAg
ICAgIDM2MS4wNyUgICAgOTMuMTJucyAgIDEwLjc0TQotY29tYmluaW5nX2RlZGljYXRlZF90Y19h
c3luY19kdXAgICAgICAgICAgICAgICAgIDMyNC4xMSUgICAxMDMuNzRucyAgICA5LjY0TQotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vX2RlZGlj
YXRlZF9ub3RjX3N5bmMgICAgICAgICAgICAgICAgIDI4NC41OCUgICAxMTguMTVucyAgICA4LjQ2
TQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX3N5bmNfZHVwICAgICAgICAgICAgIDMwMS43
MyUgICAxMTEuNDNucyAgICA4Ljk3TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25v
X2RlZGljYXRlZF9ub3RjX2FzeW5jICAgICAgICAgICAgICAgIDI5NC44NyUgICAxMTQuMDJucyAg
ICA4Ljc3TQotY29tYmluaW5nX25vX2RlZGljYXRlZF9ub3RjX2FzeW5jX2R1cCAgICAgICAgICAg
IDI4Ny41MSUgICAxMTYuOTRucyAgICA4LjU1TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmlu
aW5nX25vX2RlZGljYXRlZF90Y19zeW5jICAgICAgICAgICAgICAgICAgIDMxNy45NiUgICAxMDUu
NzRucyAgICA5LjQ2TQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19zeW5jX2R1cCAgICAgICAg
ICAgICAgIDMzMi40NSUgICAxMDEuMTNucyAgICA5Ljg5TQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Y29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luYyAgICAgICAgICAgICAgICAgIDQ0MS45NiUg
ICAgNzYuMDducyAgIDEzLjE1TQotY29tYmluaW5nX25vX2RlZGljYXRlZF90Y19hc3luY19kdXAg
ICAgICAgICAgICAgIDM5My44MiUgICAgODUuMzducyAgIDExLjcxTQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotWyAgICAgICBPSyBdIEZsYXRDb21iaW5pbmcuZm9s
bHlfYmVuY2htYXJrICg0NTUyNjkgbXMpCi1bIFJVTiAgICAgIF0gRmxhdENvbWJpbmluZy5kaXJl
Y3RfbWVhc3VyZW1lbnQKLQotUnVubmluZyBiZW5jaG1hcmtzIG9uIG1hY2hpbmUgd2l0aCAzMiBs
b2dpY2FsIGNvcmVzCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjdXN0
b20gaW50ZXJmYWNlCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1i
ZXIgb2YgdGhyZWFkcyA9IDEKLQotVGVzdF9uYW1lLCBNYXggdGltZSwgQXZnIHRpbWUsIE1pbiB0
aW1lLCAlIGJhc2UgbWluIC8gbWluCi0KLW5vX2NvbWJpbmluZyAtIGJhc2UgICAgICAgICAgICAg
MzM0IG5zICAgIDMzMSBucyAgICAzMjkgbnMKLW5vX2NvbWJpbmluZyAtIGR1cCAgICAgICAgICAg
ICAgMzM1IG5zICAgIDMzMiBucyAgICAzMzEgbnMgIDk5JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0tLS0tIGRlZGljYXRlZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLWNvbWJpbmluZ19ub3RjX3N5bmMgICAgICAgICAgICAgMzQwIG5zICAgIDMzNSBucyAgICAz
MzIgbnMgIDk5JQotY29tYmluaW5nX25vdGNfc3luYyAtIGR1cCAgICAgICAzMzcgbnMgICAgMzM1
IG5zICAgIDMzMyBucyAgOTglCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLWNvbWJpbmluZ19ub3RjX2FzeW5jICAgICAgICAgICAgMzYwIG5zICAgIDM0MyBucyAgICAz
MzggbnMgIDk3JQotY29tYmluaW5nX25vdGNfYXN5bmMgLSBkdXAgICAgICAzMzkgbnMgICAgMzM3
IG5zICAgIDMzNiBucyAgOTglCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLWNvbWJpbmluZ190Y19zeW5jICAgICAgICAgICAgICAgMzM3IG5zICAgIDMzNSBucyAgICAz
MzMgbnMgIDk4JQotY29tYmluaW5nX3RjX3N5bmMgLSBkdXAgICAgICAgICAzNDYgbnMgICAgMzM2
IG5zICAgIDMzMiBucyAgOTklCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLWNvbWJpbmluZ190Y19hc3luYyAgICAgICAgICAgICAgMzM4IG5zICAgIDMzNiBucyAgICAz
MzUgbnMgIDk4JQotY29tYmluaW5nX3RjX2FzeW5jIC0gZHVwICAgICAgICAzMzggbnMgICAgMzM2
IG5zICAgIDMzNSBucyAgOTglCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS0tLS0gbm8gZGVkaWNhdGVkLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25v
dGNfc3luYyAgICAgICAgICAgICAzMzggbnMgICAgMzM1IG5zICAgIDMzMyBucyAgOTglCi1jb21i
aW5pbmdfbm90Y19zeW5jIC0gZHVwICAgICAgIDMzNyBucyAgICAzMzQgbnMgICAgMzMzIG5zICA5
OCUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25v
dGNfYXN5bmMgICAgICAgICAgICAzMzkgbnMgICAgMzM2IG5zICAgIDMzNSBucyAgOTglCi1jb21i
aW5pbmdfbm90Y19hc3luYyAtIGR1cCAgICAgIDM0NyBucyAgICAzNDAgbnMgICAgMzM2IG5zICA5
OCUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX3Rj
X3N5bmMgICAgICAgICAgICAgICAzMzcgbnMgICAgMzM1IG5zICAgIDMzMyBucyAgOTglCi1jb21i
aW5pbmdfdGNfc3luYyAtIGR1cCAgICAgICAgIDQzNiBucyAgICAzODYgbnMgICAgMzMzIG5zICA5
OCUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX3Rj
X2FzeW5jICAgICAgICAgICAgICAzNDAgbnMgICAgMzM3IG5zICAgIDMzNSBucyAgOTglCi1jb21i
aW5pbmdfdGNfYXN5bmMgLSBkdXAgICAgICAgIDMzOCBucyAgICAzMzYgbnMgICAgMzM1IG5zICA5
OCUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVyIG9mIHRocmVhZHMgPSAyCi0KLVRlc3Rf
bmFtZSwgTWF4IHRpbWUsIEF2ZyB0aW1lLCBNaW4gdGltZSwgJSBiYXNlIG1pbiAvIG1pbgotCi1u
b19jb21iaW5pbmcgLSBiYXNlICAgICAgICAgICAgIDMxNSBucyAgICAyMjYgbnMgICAgMjExIG5z
Ci1ub19jb21iaW5pbmcgLSBkdXAgICAgICAgICAgICAgIDIxNyBucyAgICAyMTYgbnMgICAgMjEz
IG5zICA5OCUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLSBk
ZWRpY2F0ZWQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm90Y19zeW5jICAg
ICAgICAgICAgIDI1MSBucyAgICAyMzcgbnMgICAgMjI5IG5zICA5MiUKLWNvbWJpbmluZ19ub3Rj
X3N5bmMgLSBkdXAgICAgICAgMjUwIG5zICAgIDI0MSBucyAgICAyMjYgbnMgIDkzJQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm90Y19hc3luYyAg
ICAgICAgICAgIDI3OCBucyAgICAyNjggbnMgICAgMjUyIG5zICA4MyUKLWNvbWJpbmluZ19ub3Rj
X2FzeW5jIC0gZHVwICAgICAgMjk3IG5zICAgIDI2MyBucyAgICAyNDUgbnMgIDg2JQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfdGNfc3luYyAgICAg
ICAgICAgICAgIDI1NCBucyAgICAyNDYgbnMgICAgMjM0IG5zICA5MCUKLWNvbWJpbmluZ190Y19z
eW5jIC0gZHVwICAgICAgICAgMzM1IG5zICAgIDI1MiBucyAgICAyMzAgbnMgIDkxJQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfdGNfYXN5bmMgICAg
ICAgICAgICAgIDMwNSBucyAgICAyODIgbnMgICAgMjQ1IG5zICA4NiUKLWNvbWJpbmluZ190Y19h
c3luYyAtIGR1cCAgICAgICAgMjg0IG5zICAgIDI1NiBucyAgICAyMzkgbnMgIDg4JQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLS0tIG5vIGRlZGljYXRlZC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub3RjX3N5bmMgICAgICAgICAgICAgMjMwIG5z
ICAgIDIyMiBucyAgICAyMTcgbnMgIDk3JQotY29tYmluaW5nX25vdGNfc3luYyAtIGR1cCAgICAg
ICAyMzEgbnMgICAgMjI1IG5zICAgIDIxOCBucyAgOTYlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub3RjX2FzeW5jICAgICAgICAgICAgMjQ0IG5z
ICAgIDIzOCBucyAgICAyMzMgbnMgIDkwJQotY29tYmluaW5nX25vdGNfYXN5bmMgLSBkdXAgICAg
ICAyNDEgbnMgICAgMjM2IG5zICAgIDIzMSBucyAgOTElCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ190Y19zeW5jICAgICAgICAgICAgICAgMjgzIG5z
ICAgIDIzOSBucyAgICAyMjEgbnMgIDk1JQotY29tYmluaW5nX3RjX3N5bmMgLSBkdXAgICAgICAg
ICAyOTkgbnMgICAgMjQ3IG5zICAgIDIyNSBucyAgOTMlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ190Y19hc3luYyAgICAgICAgICAgICAgMjkwIG5z
ICAgIDI3MCBucyAgICAyNDQgbnMgIDg2JQotY29tYmluaW5nX3RjX2FzeW5jIC0gZHVwICAgICAg
ICAyOTAgbnMgICAgMjUxIG5zICAgIDIzOCBucyAgODglCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IE51bWJlciBvZiB0aHJlYWRzID0gMwotCi1UZXN0X25hbWUsIE1heCB0aW1lLCBBdmcgdGltZSwg
TWluIHRpbWUsICUgYmFzZSBtaW4gLyBtaW4KLQotbm9fY29tYmluaW5nIC0gYmFzZSAgICAgICAg
ICAgICAyMTEgbnMgICAgMTk3IG5zICAgIDE5MCBucwotbm9fY29tYmluaW5nIC0gZHVwICAgICAg
ICAgICAgICAyMDkgbnMgICAgMjAxIG5zICAgIDE5NSBucyAgOTclCi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0gZGVkaWNhdGVkLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX25vdGNfc3luYyAgICAgICAgICAgICAyNTggbnMgICAgMTk3IG5z
ICAgIDE2OCBucyAxMTIlCi1jb21iaW5pbmdfbm90Y19zeW5jIC0gZHVwICAgICAgIDI3NCBucyAg
ICAyMDAgbnMgICAgMTYyIG5zIDExNyUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX25vdGNfYXN5bmMgICAgICAgICAgICAzMDcgbnMgICAgMjgxIG5z
ICAgIDI2MCBucyAgNzMlCi1jb21iaW5pbmdfbm90Y19hc3luYyAtIGR1cCAgICAgIDI4NCBucyAg
ICAyNTggbnMgICAgMjE2IG5zICA4OCUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX3RjX3N5bmMgICAgICAgICAgICAgICAyMjggbnMgICAgMjE1IG5z
ICAgIDE5MiBucyAgOTglCi1jb21iaW5pbmdfdGNfc3luYyAtIGR1cCAgICAgICAgIDIxNiBucyAg
ICAyMDMgbnMgICAgMTc4IG5zIDEwNyUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX3RjX2FzeW5jICAgICAgICAgICAgICAyNDYgbnMgICAgMjMzIG5z
ICAgIDIyMCBucyAgODYlCi1jb21iaW5pbmdfdGNfYXN5bmMgLSBkdXAgICAgICAgIDIzNiBucyAg
ICAyMjEgbnMgICAgMjA4IG5zICA5MSUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLS0tLSBubyBkZWRpY2F0ZWQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5p
bmdfbm90Y19zeW5jICAgICAgICAgICAgIDIwNCBucyAgICAxOTggbnMgICAgMTg0IG5zIDEwMyUK
LWNvbWJpbmluZ19ub3RjX3N5bmMgLSBkdXAgICAgICAgMjAzIG5zICAgIDE5OCBucyAgICAxOTMg
bnMgIDk4JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5p
bmdfbm90Y19hc3luYyAgICAgICAgICAgIDIzOCBucyAgICAyMjUgbnMgICAgMjE4IG5zICA4NyUK
LWNvbWJpbmluZ19ub3RjX2FzeW5jIC0gZHVwICAgICAgMjMxIG5zICAgIDIyNyBucyAgICAyMjMg
bnMgIDg1JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5p
bmdfdGNfc3luYyAgICAgICAgICAgICAgIDIyMCBucyAgICAyMTYgbnMgICAgMjExIG5zICA5MCUK
LWNvbWJpbmluZ190Y19zeW5jIC0gZHVwICAgICAgICAgMjI3IG5zICAgIDIyMyBucyAgICAyMTkg
bnMgIDg3JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5p
bmdfdGNfYXN5bmMgICAgICAgICAgICAgIDE4MiBucyAgICAxODEgbnMgICAgMTc5IG5zIDEwNiUK
LWNvbWJpbmluZ190Y19hc3luYyAtIGR1cCAgICAgICAgMTg2IG5zICAgIDE4MSBucyAgICAxODAg
bnMgMTA1JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXIgb2YgdGhyZWFkcyA9IDQKLQot
VGVzdF9uYW1lLCBNYXggdGltZSwgQXZnIHRpbWUsIE1pbiB0aW1lLCAlIGJhc2UgbWluIC8gbWlu
Ci0KLW5vX2NvbWJpbmluZyAtIGJhc2UgICAgICAgICAgICAgMjU4IG5zICAgIDI0NSBucyAgICAy
MzggbnMKLW5vX2NvbWJpbmluZyAtIGR1cCAgICAgICAgICAgICAgMjYyIG5zICAgIDI0OSBucyAg
ICAyNDUgbnMgIDk3JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0t
LS0tIGRlZGljYXRlZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub3RjX3N5
bmMgICAgICAgICAgICAgMjY0IG5zICAgIDI1MCBucyAgICAyMjAgbnMgMTA3JQotY29tYmluaW5n
X25vdGNfc3luYyAtIGR1cCAgICAgICAyNjAgbnMgICAgMjU0IG5zICAgIDIzMSBucyAxMDIlCi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub3RjX2Fz
eW5jICAgICAgICAgICAgMjY2IG5zICAgIDI1NSBucyAgICAyMzMgbnMgMTAyJQotY29tYmluaW5n
X25vdGNfYXN5bmMgLSBkdXAgICAgICAyNjggbnMgICAgMjYwIG5zICAgIDI1MiBucyAgOTQlCi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ190Y19zeW5j
ICAgICAgICAgICAgICAgMjUwIG5zICAgIDI0MCBucyAgICAyMTUgbnMgMTEwJQotY29tYmluaW5n
X3RjX3N5bmMgLSBkdXAgICAgICAgICAyNTIgbnMgICAgMjQyIG5zICAgIDIxNyBucyAxMDklCi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ190Y19hc3lu
YyAgICAgICAgICAgICAgMTk5IG5zICAgIDE5MCBucyAgICAxODMgbnMgMTI5JQotY29tYmluaW5n
X3RjX2FzeW5jIC0gZHVwICAgICAgICAxOTkgbnMgICAgMTg5IG5zICAgIDE3OCBucyAxMzMlCi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0gbm8gZGVkaWNhdGVk
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vdGNfc3luYyAgICAgICAgICAgICAy
MjMgbnMgICAgMjExIG5zICAgIDIwMyBucyAxMTYlCi1jb21iaW5pbmdfbm90Y19zeW5jIC0gZHVw
ICAgICAgIDIxOCBucyAgICAyMTEgbnMgICAgMjAyIG5zIDExNyUKLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vdGNfYXN5bmMgICAgICAgICAgICAy
MjIgbnMgICAgMjEzIG5zICAgIDIwNyBucyAxMTQlCi1jb21iaW5pbmdfbm90Y19hc3luYyAtIGR1
cCAgICAgIDIzNiBucyAgICAyMjIgbnMgICAgMjE1IG5zIDExMCUKLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX3RjX3N5bmMgICAgICAgICAgICAgICAy
MDIgbnMgICAgMTk5IG5zICAgIDE5NyBucyAxMjAlCi1jb21iaW5pbmdfdGNfc3luYyAtIGR1cCAg
ICAgICAgIDIwNyBucyAgICAxOTkgbnMgICAgMTk0IG5zIDEyMiUKLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX3RjX2FzeW5jICAgICAgICAgICAgICAx
NjIgbnMgICAgMTU3IG5zICAgIDE1MiBucyAxNTUlCi1jb21iaW5pbmdfdGNfYXN5bmMgLSBkdXAg
ICAgICAgIDE4OCBucyAgICAxNjEgbnMgICAgMTU0IG5zIDE1NCUKLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gTnVtYmVyIG9mIHRocmVhZHMgPSA2Ci0KLVRlc3RfbmFtZSwgTWF4IHRpbWUsIEF2ZyB0
aW1lLCBNaW4gdGltZSwgJSBiYXNlIG1pbiAvIG1pbgotCi1ub19jb21iaW5pbmcgLSBiYXNlICAg
ICAgICAgICAgIDI5OCBucyAgICAyOTIgbnMgICAgMjgxIG5zCi1ub19jb21iaW5pbmcgLSBkdXAg
ICAgICAgICAgICAgIDI5NiBucyAgICAyODkgbnMgICAgMjcwIG5zIDEwNCUKLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLSBkZWRpY2F0ZWQtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm90Y19zeW5jICAgICAgICAgICAgIDIyMSBucyAgICAy
MTEgbnMgICAgMTk2IG5zIDE0MyUKLWNvbWJpbmluZ19ub3RjX3N5bmMgLSBkdXAgICAgICAgMjQ3
IG5zICAgIDIxMSBucyAgICAxOTIgbnMgMTQ2JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm90Y19hc3luYyAgICAgICAgICAgIDIxNiBucyAgICAy
MDUgbnMgICAgMTk0IG5zIDE0NCUKLWNvbWJpbmluZ19ub3RjX2FzeW5jIC0gZHVwICAgICAgMjE1
IG5zICAgIDIwNiBucyAgICAxOTcgbnMgMTQyJQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfdGNfc3luYyAgICAgICAgICAgICAgIDIyNSBucyAgICAy
MDQgbnMgICAgMTg1IG5zIDE1MSUKLWNvbWJpbmluZ190Y19zeW5jIC0gZHVwICAgICAgICAgMjI5
IG5zICAgIDIxMCBucyAgICAxODYgbnMgMTUxJQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfdGNfYXN5bmMgICAgICAgICAgICAgIDE2NSBucyAgICAx
NTIgbnMgICAgMTQ0IG5zIDE5NCUKLWNvbWJpbmluZ190Y19hc3luYyAtIGR1cCAgICAgICAgMTY2
IG5zICAgIDE1MCBucyAgICAxNDMgbnMgMTk1JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0tLS0tIG5vIGRlZGljYXRlZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNv
bWJpbmluZ19ub3RjX3N5bmMgICAgICAgICAgICAgMTg0IG5zICAgIDE4MiBucyAgICAxODAgbnMg
MTU1JQotY29tYmluaW5nX25vdGNfc3luYyAtIGR1cCAgICAgICAxNzYgbnMgICAgMTc0IG5zICAg
IDE3MiBucyAxNjMlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNv
bWJpbmluZ19ub3RjX2FzeW5jICAgICAgICAgICAgMTc5IG5zICAgIDE3NyBucyAgICAxNzQgbnMg
MTYxJQotY29tYmluaW5nX25vdGNfYXN5bmMgLSBkdXAgICAgICAxODYgbnMgICAgMTgxIG5zICAg
IDE3NyBucyAxNTglCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNv
bWJpbmluZ190Y19zeW5jICAgICAgICAgICAgICAgMTY0IG5zICAgIDE2MyBucyAgICAxNjAgbnMg
MTc0JQotY29tYmluaW5nX3RjX3N5bmMgLSBkdXAgICAgICAgICAxNzEgbnMgICAgMTY4IG5zICAg
IDE2MSBucyAxNzMlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNv
bWJpbmluZ190Y19hc3luYyAgICAgICAgICAgICAgMTQyIG5zICAgIDEzOSBucyAgICAxMzggbnMg
MjAyJQotY29tYmluaW5nX3RjX2FzeW5jIC0gZHVwICAgICAgICAxNDEgbnMgICAgMTM2IG5zICAg
IDExOSBucyAyMzUlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlciBvZiB0aHJlYWRzID0g
OAotCi1UZXN0X25hbWUsIE1heCB0aW1lLCBBdmcgdGltZSwgTWluIHRpbWUsICUgYmFzZSBtaW4g
LyBtaW4KLQotbm9fY29tYmluaW5nIC0gYmFzZSAgICAgICAgICAgICAzMzMgbnMgICAgMzI4IG5z
ICAgIDMxNSBucwotbm9fY29tYmluaW5nIC0gZHVwICAgICAgICAgICAgICAzMzYgbnMgICAgMzMw
IG5zICAgIDMyNyBucyAgOTYlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS0tLS0gZGVkaWNhdGVkLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25v
dGNfc3luYyAgICAgICAgICAgICAyMDMgbnMgICAgMTc5IG5zICAgIDE3MiBucyAxODMlCi1jb21i
aW5pbmdfbm90Y19zeW5jIC0gZHVwICAgICAgIDE5MCBucyAgICAxNzcgbnMgICAgMTcxIG5zIDE4
MyUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25v
dGNfYXN5bmMgICAgICAgICAgICAyMDQgbnMgICAgMTgzIG5zICAgIDE3MCBucyAxODUlCi1jb21i
aW5pbmdfbm90Y19hc3luYyAtIGR1cCAgICAgIDIwMSBucyAgICAxODcgbnMgICAgMTc2IG5zIDE3
OSUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX3Rj
X3N5bmMgICAgICAgICAgICAgICAxNzcgbnMgICAgMTcwIG5zICAgIDE2NSBucyAxOTAlCi1jb21i
aW5pbmdfdGNfc3luYyAtIGR1cCAgICAgICAgIDE3OCBucyAgICAxNjcgbnMgICAgMTY0IG5zIDE5
MiUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX3Rj
X2FzeW5jICAgICAgICAgICAgICAxMzQgbnMgICAgMTE1IG5zICAgIDEwNSBucyAzMDAlCi1jb21i
aW5pbmdfdGNfYXN5bmMgLSBkdXAgICAgICAgIDEzMiBucyAgICAxMTUgbnMgICAgMTAzIG5zIDMw
NCUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLSBubyBkZWRp
Y2F0ZWQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm90Y19zeW5jICAgICAgICAg
ICAgIDE1NCBucyAgICAxNDUgbnMgICAgMTQzIG5zIDIyMCUKLWNvbWJpbmluZ19ub3RjX3N5bmMg
LSBkdXAgICAgICAgMTUzIG5zICAgIDE0NCBucyAgICAxNDIgbnMgMjIyJQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm90Y19hc3luYyAgICAgICAg
ICAgIDE0NSBucyAgICAxNDQgbnMgICAgMTQzIG5zIDIxOSUKLWNvbWJpbmluZ19ub3RjX2FzeW5j
IC0gZHVwICAgICAgMTU3IG5zICAgIDE0OCBucyAgICAxNDQgbnMgMjE4JQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfdGNfc3luYyAgICAgICAgICAg
ICAgIDE0MiBucyAgICAxMzQgbnMgICAgMTMwIG5zIDI0MSUKLWNvbWJpbmluZ190Y19zeW5jIC0g
ZHVwICAgICAgICAgMTQ0IG5zICAgIDEzNiBucyAgICAxMzAgbnMgMjQxJQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfdGNfYXN5bmMgICAgICAgICAg
ICAgIDExOCBucyAgICAgOTkgbnMgICAgIDkxIG5zIDM0NCUKLWNvbWJpbmluZ190Y19hc3luYyAt
IGR1cCAgICAgICAgMTE4IG5zICAgICA5NSBucyAgICAgOTEgbnMgMzQ0JQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBOdW1iZXIgb2YgdGhyZWFkcyA9IDEyCi0KLVRlc3RfbmFtZSwgTWF4IHRpbWUs
IEF2ZyB0aW1lLCBNaW4gdGltZSwgJSBiYXNlIG1pbiAvIG1pbgotCi1ub19jb21iaW5pbmcgLSBi
YXNlICAgICAgICAgICAgIDM2MSBucyAgICAzNTcgbnMgICAgMzUzIG5zCi1ub19jb21iaW5pbmcg
LSBkdXAgICAgICAgICAgICAgIDM2MSBucyAgICAzNTcgbnMgICAgMzU1IG5zICA5OSUKLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLSBkZWRpY2F0ZWQtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm90Y19zeW5jICAgICAgICAgICAgIDE5MCBu
cyAgICAxNTcgbnMgICAgMTM4IG5zIDI1NSUKLWNvbWJpbmluZ19ub3RjX3N5bmMgLSBkdXAgICAg
ICAgMTYyIG5zICAgIDE0OSBucyAgICAxMzggbnMgMjU1JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfbm90Y19hc3luYyAgICAgICAgICAgIDE2MyBu
cyAgICAxNTMgbnMgICAgMTQ1IG5zIDI0MiUKLWNvbWJpbmluZ19ub3RjX2FzeW5jIC0gZHVwICAg
ICAgMTk0IG5zICAgIDE1OCBucyAgICAxNTIgbnMgMjMxJQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfdGNfc3luYyAgICAgICAgICAgICAgIDE4MSBu
cyAgICAxMjggbnMgICAgMTExIG5zIDMxNiUKLWNvbWJpbmluZ190Y19zeW5jIC0gZHVwICAgICAg
ICAgMTgzIG5zICAgIDE0OCBucyAgICAxMjEgbnMgMjg5JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5pbmdfdGNfYXN5bmMgICAgICAgICAgICAgICA5MiBu
cyAgICAgODkgbnMgICAgIDg3IG5zIDQwMiUKLWNvbWJpbmluZ190Y19hc3luYyAtIGR1cCAgICAg
ICAgMTUyIG5zICAgIDEwNSBucyAgICAgODcgbnMgNDA1JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0tLS0tIG5vIGRlZGljYXRlZC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLWNvbWJpbmluZ19ub3RjX3N5bmMgICAgICAgICAgICAgMTIwIG5zICAgIDExOSBucyAgICAx
MTggbnMgMjk4JQotY29tYmluaW5nX25vdGNfc3luYyAtIGR1cCAgICAgICAxMjAgbnMgICAgMTE5
IG5zICAgIDExOCBucyAyOTglCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLWNvbWJpbmluZ19ub3RjX2FzeW5jICAgICAgICAgICAgMTIyIG5zICAgIDEyMCBucyAgICAx
MjAgbnMgMjk0JQotY29tYmluaW5nX25vdGNfYXN5bmMgLSBkdXAgICAgICAxMjEgbnMgICAgMTIw
IG5zICAgIDExOCBucyAyOTclCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLWNvbWJpbmluZ190Y19zeW5jICAgICAgICAgICAgICAgMTEwIG5zICAgIDEwOCBucyAgICAx
MDYgbnMgMzMxJQotY29tYmluaW5nX3RjX3N5bmMgLSBkdXAgICAgICAgICAxMTAgbnMgICAgMTA5
IG5zICAgIDEwNyBucyAzMjclCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLWNvbWJpbmluZ190Y19hc3luYyAgICAgICAgICAgICAgIDg4IG5zICAgICA4NyBucyAgICAg
ODUgbnMgNDExJQotY29tYmluaW5nX3RjX2FzeW5jIC0gZHVwICAgICAgICAgOTAgbnMgICAgIDg4
IG5zICAgICA4NSBucyA0MTElCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlciBvZiB0aHJl
YWRzID0gMTYKLQotVGVzdF9uYW1lLCBNYXggdGltZSwgQXZnIHRpbWUsIE1pbiB0aW1lLCAlIGJh
c2UgbWluIC8gbWluCi0KLW5vX2NvbWJpbmluZyAtIGJhc2UgICAgICAgICAgICAgMzYzIG5zICAg
IDM2MSBucyAgICAzNjAgbnMKLW5vX2NvbWJpbmluZyAtIGR1cCAgICAgICAgICAgICAgMzYyIG5z
ICAgIDM2MSBucyAgICAzNTggbnMgMTAwJQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0tLS0tIGRlZGljYXRlZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJp
bmluZ19ub3RjX3N5bmMgICAgICAgICAgICAgMTc3IG5zICAgIDEzNiBucyAgICAxMTEgbnMgMzIz
JQotY29tYmluaW5nX25vdGNfc3luYyAtIGR1cCAgICAgICAxODUgbnMgICAgMTQ4IG5zICAgIDEx
MiBucyAzMjAlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJp
bmluZ19ub3RjX2FzeW5jICAgICAgICAgICAgMTkxIG5zICAgIDE1MSBucyAgICAxMjIgbnMgMjk0
JQotY29tYmluaW5nX25vdGNfYXN5bmMgLSBkdXAgICAgICAxNzkgbnMgICAgMTU3IG5zICAgIDEx
OCBucyAzMDUlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJp
bmluZ190Y19zeW5jICAgICAgICAgICAgICAgMTU0IG5zICAgIDEyNSBucyAgICAxMDAgbnMgMzYw
JQotY29tYmluaW5nX3RjX3N5bmMgLSBkdXAgICAgICAgICAxNjYgbnMgICAgMTMwIG5zICAgICA5
OCBucyAzNjclCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJp
bmluZ190Y19hc3luYyAgICAgICAgICAgICAgMTQzIG5zICAgIDEwNyBucyAgICAgODYgbnMgNDE4
JQotY29tYmluaW5nX3RjX2FzeW5jIC0gZHVwICAgICAgICAxMzIgbnMgICAgMTEyIG5zICAgICA4
OCBucyA0MDclCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0g
bm8gZGVkaWNhdGVkLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vdGNfc3luYyAg
ICAgICAgICAgICAxMjEgbnMgICAgMTAzIG5zICAgICA5OCBucyAzNjclCi1jb21iaW5pbmdfbm90
Y19zeW5jIC0gZHVwICAgICAgIDExNyBucyAgICAxMDQgbnMgICAgIDk5IG5zIDM2MiUKLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vdGNfYXN5bmMg
ICAgICAgICAgICAxMTYgbnMgICAgMTA1IG5zICAgICA5OSBucyAzNjMlCi1jb21iaW5pbmdfbm90
Y19hc3luYyAtIGR1cCAgICAgIDExMiBucyAgICAxMDQgbnMgICAgMTAwIG5zIDM1OSUKLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX3RjX3N5bmMgICAg
ICAgICAgICAgICAxMTEgbnMgICAgMTAxIG5zICAgICA5NCBucyAzODElCi1jb21iaW5pbmdfdGNf
c3luYyAtIGR1cCAgICAgICAgIDExMyBucyAgICAgOTggbnMgICAgIDkzIG5zIDM4NyUKLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX3RjX2FzeW5jICAg
ICAgICAgICAgICAgOTcgbnMgICAgIDg1IG5zICAgICA3NCBucyA0ODQlCi1jb21iaW5pbmdfdGNf
YXN5bmMgLSBkdXAgICAgICAgICA5OCBucyAgICAgODYgbnMgICAgIDc4IG5zIDQ1NyUKLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVyIG9mIHRocmVhZHMgPSAyNAotCi1UZXN0X25hbWUsIE1h
eCB0aW1lLCBBdmcgdGltZSwgTWluIHRpbWUsICUgYmFzZSBtaW4gLyBtaW4KLQotbm9fY29tYmlu
aW5nIC0gYmFzZSAgICAgICAgICAgICAzNTIgbnMgICAgMzUxIG5zICAgIDM0OSBucwotbm9fY29t
YmluaW5nIC0gZHVwICAgICAgICAgICAgICAzNTIgbnMgICAgMzUxIG5zICAgIDM0OCBucyAxMDAl
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0gZGVkaWNhdGVk
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vdGNfc3luYyAgICAgICAgICAg
ICAyMTQgbnMgICAgMTczIG5zICAgIDE0OSBucyAyMzQlCi1jb21iaW5pbmdfbm90Y19zeW5jIC0g
ZHVwICAgICAgIDIxMiBucyAgICAxNjYgbnMgICAgMTM3IG5zIDI1NCUKLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vdGNfYXN5bmMgICAgICAgICAg
ICAyMzIgbnMgICAgMTk4IG5zICAgIDE2MSBucyAyMTYlCi1jb21iaW5pbmdfbm90Y19hc3luYyAt
IGR1cCAgICAgIDIyNSBucyAgICAxOTEgbnMgICAgMTQ5IG5zIDIzNCUKLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX3RjX3N5bmMgICAgICAgICAgICAg
ICAxOTIgbnMgICAgMTUyIG5zICAgIDEyOSBucyAyNzAlCi1jb21iaW5pbmdfdGNfc3luYyAtIGR1
cCAgICAgICAgIDE3NiBucyAgICAxNTYgbnMgICAgMTIxIG5zIDI4NiUKLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX3RjX2FzeW5jICAgICAgICAgICAg
ICAyMDIgbnMgICAgMTQ3IG5zICAgIDExOCBucyAyOTYlCi1jb21iaW5pbmdfdGNfYXN5bmMgLSBk
dXAgICAgICAgIDIwMCBucyAgICAxNTggbnMgICAgMTIwIG5zIDI5MSUKLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLSBubyBkZWRpY2F0ZWQtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi1jb21iaW5pbmdfbm90Y19zeW5jICAgICAgICAgICAgIDE2MSBucyAgICAxMjUg
bnMgICAgMTE1IG5zIDMwMyUKLWNvbWJpbmluZ19ub3RjX3N5bmMgLSBkdXAgICAgICAgMTQ0IG5z
ICAgIDEyNyBucyAgICAxMTYgbnMgMjk5JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi1jb21iaW5pbmdfbm90Y19hc3luYyAgICAgICAgICAgIDEzNSBucyAgICAxMjIg
bnMgICAgMTE2IG5zIDI5OCUKLWNvbWJpbmluZ19ub3RjX2FzeW5jIC0gZHVwICAgICAgMzQxIG5z
ICAgIDE0OCBucyAgICAxMTcgbnMgMjk4JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi1jb21iaW5pbmdfdGNfc3luYyAgICAgICAgICAgICAgIDEzMCBucyAgICAxMTgg
bnMgICAgMTA5IG5zIDMxOSUKLWNvbWJpbmluZ190Y19zeW5jIC0gZHVwICAgICAgICAgMTE2IG5z
ICAgIDExMCBucyAgICAxMDUgbnMgMzMyJQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi1jb21iaW5pbmdfdGNfYXN5bmMgICAgICAgICAgICAgICA5NyBucyAgICAgODYg
bnMgICAgIDc5IG5zIDQ0MiUKLWNvbWJpbmluZ190Y19hc3luYyAtIGR1cCAgICAgICAgIDk1IG5z
ICAgICA4NiBucyAgICAgNzkgbnMgNDQwJQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXIg
b2YgdGhyZWFkcyA9IDMyCi0KLVRlc3RfbmFtZSwgTWF4IHRpbWUsIEF2ZyB0aW1lLCBNaW4gdGlt
ZSwgJSBiYXNlIG1pbiAvIG1pbgotCi1ub19jb21iaW5pbmcgLSBiYXNlICAgICAgICAgICAgIDMz
NyBucyAgICAzMzYgbnMgICAgMzMzIG5zCi1ub19jb21iaW5pbmcgLSBkdXAgICAgICAgICAgICAg
IDMzOCBucyAgICAzMzYgbnMgICAgMzMzIG5zICA5OSUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLS0tLSBkZWRpY2F0ZWQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci1jb21iaW5pbmdfbm90Y19zeW5jICAgICAgICAgICAgIDE5MyBucyAgICAxNzcgbnMgICAgMTYy
IG5zIDIwNCUKLWNvbWJpbmluZ19ub3RjX3N5bmMgLSBkdXAgICAgICAgMjExIG5zICAgIDE4MSBu
cyAgICAxNTYgbnMgMjEzJQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci1jb21iaW5pbmdfbm90Y19hc3luYyAgICAgICAgICAgIDI0NSBucyAgICAyMDAgbnMgICAgMTYy
IG5zIDIwNSUKLWNvbWJpbmluZ19ub3RjX2FzeW5jIC0gZHVwICAgICAgMjE2IG5zICAgIDE5NyBu
cyAgICAxNDkgbnMgMjIzJQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci1jb21iaW5pbmdfdGNfc3luYyAgICAgICAgICAgICAgIDE5NSBucyAgICAxNjcgbnMgICAgMTIx
IG5zIDI3NCUKLWNvbWJpbmluZ190Y19zeW5jIC0gZHVwICAgICAgICAgMTc5IG5zICAgIDE2NCBu
cyAgICAxNDMgbnMgMjMxJQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci1jb21iaW5pbmdfdGNfYXN5bmMgICAgICAgICAgICAgIDE4NyBucyAgICAxNTIgbnMgICAgMTA4
IG5zIDMwNyUKLWNvbWJpbmluZ190Y19hc3luYyAtIGR1cCAgICAgICAgMTgyIG5zICAgIDE1MSBu
cyAgICAxMjUgbnMgMjY2JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0tLS0tIG5vIGRlZGljYXRlZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub3Rj
X3N5bmMgICAgICAgICAgICAgMTg5IG5zICAgIDEyNyBucyAgICAxMTQgbnMgMjkwJQotY29tYmlu
aW5nX25vdGNfc3luYyAtIGR1cCAgICAgICAxMjYgbnMgICAgMTE4IG5zICAgIDExMCBucyAzMDIl
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub3Rj
X2FzeW5jICAgICAgICAgICAgMjMzIG5zICAgIDEyOSBucyAgICAxMTIgbnMgMjk3JQotY29tYmlu
aW5nX25vdGNfYXN5bmMgLSBkdXAgICAgICAxNzAgbnMgICAgMTI2IG5zICAgIDExMyBucyAyOTMl
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ190Y19z
eW5jICAgICAgICAgICAgICAgOTQ4IG5zICAgIDIxMiBucyAgICAxMDcgbnMgMzA5JQotY29tYmlu
aW5nX3RjX3N5bmMgLSBkdXAgICAgICAgICAxMzcgbnMgICAgMTEyIG5zICAgIDEwNCBucyAzMTgl
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ190Y19h
c3luYyAgICAgICAgICAgICAgIDkwIG5zICAgICA4NiBucyAgICAgNzkgbnMgNDIxJQotY29tYmlu
aW5nX3RjX2FzeW5jIC0gZHVwICAgICAgICAgOTQgbnMgICAgIDg3IG5zICAgICA4MCBucyA0MTQl
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlciBvZiB0aHJlYWRzID0gNDgKLQotVGVzdF9u
YW1lLCBNYXggdGltZSwgQXZnIHRpbWUsIE1pbiB0aW1lLCAlIGJhc2UgbWluIC8gbWluCi0KLW5v
X2NvbWJpbmluZyAtIGJhc2UgICAgICAgICAgICAgMzQwIG5zICAgIDMzNiBucyAgICAzMzQgbnMK
LW5vX2NvbWJpbmluZyAtIGR1cCAgICAgICAgICAgICAgMzM2IG5zICAgIDMzNSBucyAgICAzMzQg
bnMgMTAwJQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLS0tIGRl
ZGljYXRlZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub3RjX3N5bmMgICAg
ICAgICAgICAgMjE0IG5zICAgIDE3NiBucyAgICAxMzcgbnMgMjQzJQotY29tYmluaW5nX25vdGNf
c3luYyAtIGR1cCAgICAgICAyMTAgbnMgICAgMTczIG5zICAgIDEyOCBucyAyNjAlCi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ19ub3RjX2FzeW5jICAg
ICAgICAgICAgMjE3IG5zICAgIDE4NiBucyAgICAxNjIgbnMgMjA1JQotY29tYmluaW5nX25vdGNf
YXN5bmMgLSBkdXAgICAgICAyMTUgbnMgICAgMTg2IG5zICAgIDE0OSBucyAyMjQlCi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ190Y19zeW5jICAgICAg
ICAgICAgICAgMjA2IG5zICAgIDE3MSBucyAgICAxNDUgbnMgMjMwJQotY29tYmluaW5nX3RjX3N5
bmMgLSBkdXAgICAgICAgICAxNzkgbnMgICAgMTQ5IG5zICAgIDEyNiBucyAyNjUlCi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWNvbWJpbmluZ190Y19hc3luYyAgICAg
ICAgICAgICAgMTc1IG5zICAgIDEzOCBucyAgICAxMDggbnMgMzA5JQotY29tYmluaW5nX3RjX2Fz
eW5jIC0gZHVwICAgICAgICAxNjkgbnMgICAgMTM0IG5zICAgIDExMCBucyAzMDElCi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0gbm8gZGVkaWNhdGVkLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vdGNfc3luYyAgICAgICAgICAgIDE3OTggbnMg
ICAgMjkzIG5zICAgIDExOCBucyAyODIlCi1jb21iaW5pbmdfbm90Y19zeW5jIC0gZHVwICAgICAg
IDE3MSBucyAgICAxMjIgbnMgICAgMTA1IG5zIDMxOCUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX25vdGNfYXN5bmMgICAgICAgICAgICAyMjcgbnMg
ICAgMTMyIG5zICAgIDExMCBucyAzMDIlCi1jb21iaW5pbmdfbm90Y19hc3luYyAtIGR1cCAgICAg
IDIyNiBucyAgICAxMzcgbnMgICAgMTExIG5zIDMwMSUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX3RjX3N5bmMgICAgICAgICAgICAgICAxMTEgbnMg
ICAgMTA2IG5zICAgIDEwMiBucyAzMjclCi1jb21iaW5pbmdfdGNfc3luYyAtIGR1cCAgICAgICAg
IDEyNyBucyAgICAxMTAgbnMgICAgMTA0IG5zIDMyMSUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotY29tYmluaW5nX3RjX2FzeW5jICAgICAgICAgICAgICAyOTcgbnMg
ICAgMTE3IG5zICAgICA3NyBucyA0MzMlCi1jb21iaW5pbmdfdGNfYXN5bmMgLSBkdXAgICAgICAg
IDc0MiBucyAgICAxNDkgbnMgICAgIDc3IG5zIDQzMiUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
TnVtYmVyIG9mIHRocmVhZHMgPSA2NAotCi1UZXN0X25hbWUsIE1heCB0aW1lLCBBdmcgdGltZSwg
TWluIHRpbWUsICUgYmFzZSBtaW4gLyBtaW4KLQotbm9fY29tYmluaW5nIC0gYmFzZSAgICAgICAg
ICAgICAzMzggbnMgICAgMzMzIG5zICAgIDMzMSBucwotbm9fY29tYmluaW5nIC0gZHVwICAgICAg
ICAgICAgICAzMzUgbnMgICAgMzMzIG5zICAgIDMzMSBucyAgOTklCi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0gZGVkaWNhdGVkLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX25vdGNfc3luYyAgICAgICAgICAgICAxOTggbnMgICAgMTYzIG5z
ICAgIDE0OCBucyAyMjMlCi1jb21iaW5pbmdfbm90Y19zeW5jIC0gZHVwICAgICAgIDE3MiBucyAg
ICAxNTQgbnMgICAgMTI0IG5zIDI2NiUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX25vdGNfYXN5bmMgICAgICAgICAgICAyMTEgbnMgICAgMTc3IG5z
ICAgIDE1OCBucyAyMDklCi1jb21iaW5pbmdfbm90Y19hc3luYyAtIGR1cCAgICAgIDE4MiBucyAg
ICAxNjYgbnMgICAgMTUyIG5zIDIxNiUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX3RjX3N5bmMgICAgICAgICAgICAgICAxOTUgbnMgICAgMTMzIG5z
ICAgIDExMiBucyAyOTQlCi1jb21iaW5pbmdfdGNfc3luYyAtIGR1cCAgICAgICAgIDE1OCBucyAg
ICAxMzUgbnMgICAgMTA4IG5zIDMwNSUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotY29tYmluaW5nX3RjX2FzeW5jICAgICAgICAgICAgICAxNDUgbnMgICAgMTE5IG5z
ICAgICA5NSBucyAzNDclCi1jb21iaW5pbmdfdGNfYXN5bmMgLSBkdXAgICAgICAgIDE1OSBucyAg
ICAxMzAgbnMgICAgIDk1IG5zIDM0NiUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLS0tLSBubyBkZWRpY2F0ZWQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5p
bmdfbm90Y19zeW5jICAgICAgICAgICAgIDE4OCBucyAgICAxMjMgbnMgICAgMTA3IG5zIDMwOCUK
LWNvbWJpbmluZ19ub3RjX3N5bmMgLSBkdXAgICAgICAgNTQ2IG5zICAgIDE1OSBucyAgICAxMDcg
bnMgMzA3JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5p
bmdfbm90Y19hc3luYyAgICAgICAgICAgIDU1OCBucyAgICAxNjAgbnMgICAgMTA4IG5zIDMwNCUK
LWNvbWJpbmluZ19ub3RjX2FzeW5jIC0gZHVwICAgICAgMTkyIG5zICAgIDEyNyBucyAgICAxMDcg
bnMgMzA4JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5p
bmdfdGNfc3luYyAgICAgICAgICAgICAgIDMyNSBucyAgICAxMzAgbnMgICAgMTAxIG5zIDMyNSUK
LWNvbWJpbmluZ190Y19zeW5jIC0gZHVwICAgICAgICAxNzY2IG5zICAgIDI3MyBucyAgICAxMDEg
bnMgMzI1JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jb21iaW5p
bmdfdGNfYXN5bmMgICAgICAgICAgICAgIDQxNyBucyAgICAxMTggbnMgICAgIDc0IG5zIDQ0NiUK
LWNvbWJpbmluZ190Y19hc3luYyAtIGR1cCAgICAgICAgODM4IG5zICAgIDIxMiBucyAgICAgNzIg
bnMgNDU1JQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1bICAgICAg
IE9LIF0gRmxhdENvbWJpbmluZy5kaXJlY3RfbWVhc3VyZW1lbnQgKDE3ODYyMiBtcykKLVstLS0t
LS0tLS0tXSAyIHRlc3RzIGZyb20gRmxhdENvbWJpbmluZyAoNjMzODkxIG1zIHRvdGFsKQotCi1b
LS0tLS0tLS0tLV0gR2xvYmFsIHRlc3QgZW52aXJvbm1lbnQgdGVhci1kb3duCi1bPT09PT09PT09
PV0gMiB0ZXN0cyBmcm9tIDEgdGVzdCBjYXNlIHJhbi4gKDYzMzg5MSBtcyB0b3RhbCkKLVsgIFBB
U1NFRCAgXSAyIHRlc3RzLgotCi0tLS0KLQotJCBsc2NwdQotCi1BcmNoaXRlY3R1cmU6ICAgICAg
ICAgIHg4Nl82NAotQ1BVIG9wLW1vZGUocyk6ICAgICAgICAzMi1iaXQsIDY0LWJpdAotQnl0ZSBP
cmRlcjogICAgICAgICAgICBMaXR0bGUgRW5kaWFuCi1DUFUocyk6ICAgICAgICAgICAgICAgIDMy
Ci1Pbi1saW5lIENQVShzKSBsaXN0OiAgIDAtMzEKLVRocmVhZChzKSBwZXIgY29yZTogICAgMgot
Q29yZShzKSBwZXIgc29ja2V0OiAgICA4Ci1Tb2NrZXQocyk6ICAgICAgICAgICAgIDIKLU5VTUEg
bm9kZShzKTogICAgICAgICAgMgotVmVuZG9yIElEOiAgICAgICAgICAgICBHZW51aW5lSW50ZWwK
LUNQVSBmYW1pbHk6ICAgICAgICAgICAgNgotTW9kZWw6ICAgICAgICAgICAgICAgICA0NQotTW9k
ZWwgbmFtZTogICAgICAgICAgICBJbnRlbChSKSBYZW9uKFIpIENQVSBFNS0yNjYwIDAgQCAyLjIw
R0h6Ci1TdGVwcGluZzogICAgICAgICAgICAgIDYKLUNQVSBNSHo6ICAgICAgICAgICAgICAgMjIw
MC4wMDAKLUNQVSBtYXggTUh6OiAgICAgICAgICAgMjIwMC4wMDAwCi1DUFUgbWluIE1IejogICAg
ICAgICAgIDEyMDAuMDAwMAotQm9nb01JUFM6ICAgICAgICAgICAgICA0Mzk5Ljg3Ci1WaXJ0dWFs
aXphdGlvbjogICAgICAgIFZULXgKLUwxZCBjYWNoZTogICAgICAgICAgICAgMzJLCi1MMWkgY2Fj
aGU6ICAgICAgICAgICAgIDMySwotTDIgY2FjaGU6ICAgICAgICAgICAgICAyNTZLCi1MMyBjYWNo
ZTogICAgICAgICAgICAgIDIwNDgwSwotTlVNQSBub2RlMCBDUFUocyk6ICAgICAwLTcsMTYtMjMK
LU5VTUEgbm9kZTEgQ1BVKHMpOiAgICAgOC0xNSwyNC0zMQotCi1GbGFnczogICAgICAgICAgICAg
ICAgIGZwdSB2bWUgZGUgcHNlIHRzYyBtc3IgcGFlIG1jZSBjeDggYXBpYyBzZXAKLW10cnIgcGdl
IG1jYSBjbW92IHBhdCBwc2UzNiBjbGZsdXNoIGR0cyBhY3BpIG1teCBmeHNyIHNzZSBzc2UyIHNz
IGh0Ci10bSBwYmUgc3lzY2FsbCBueCBwZHBlMWdiIHJkdHNjcCBsbSBjb25zdGFudF90c2MgYXJj
aF9wZXJmbW9uIHBlYnMgYnRzCi1yZXBfZ29vZCBub3BsIHh0b3BvbG9neSBub25zdG9wX3RzYyBh
cGVyZm1wZXJmIGVhZ2VyZnB1IHBuaSBwY2xtdWxxZHEKLWR0ZXM2NCBtb25pdG9yIGRzX2NwbCB2
bXggc214IGVzdCB0bTIgc3NzZTMgY3gxNiB4dHByIHBkY20gcGNpZCBkY2EKLXNzZTRfMSBzc2U0
XzIgeDJhcGljIHBvcGNudCB0c2NfZGVhZGxpbmVfdGltZXIgYWVzIHhzYXZlIGF2eCBsYWhmX2xt
Ci1lcGIgdHByX3NoYWRvdyB2bm1pIGZsZXhwcmlvcml0eSBlcHQgdnBpZCB4c2F2ZW9wdCBkdGhl
cm0gYXJhdCBwbG4gcHRzCi0KLS0tLQotCi0gKi8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9mbGF0X2NvbWJpbmluZy90
ZXN0L0ZsYXRDb21iaW5pbmdFeGFtcGxlcy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZm9sbHkvZXhwZXJpbWVudGFsL2ZsYXRfY29tYmluaW5nL3Rlc3QvRmxhdENvbWJp
bmluZ0V4YW1wbGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YzI1Y2E4YzVk
Mzc0NGFkZTU2YmZhYzUyMGYzMDY5ZmI2OWRiZmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Zm9sbHkvZXhwZXJpbWVudGFsL2ZsYXRfY29tYmluaW5nL3Rlc3QvRmxhdENvbWJpbmluZ0V4YW1w
bGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAy
MDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
SVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8YXRvbWlj
PgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxtdXRleD4KLQotI2luY2x1ZGUgPGZvbGx5
L0JhdG9uLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvZXhwZXJpbWVudGFsL2ZsYXRfY29tYmluaW5nL0Zs
YXRDb21iaW5pbmcuaD4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotc3RydWN0IExpbmUgewotICBG
T0xMWV9BTElHTl9UT19BVk9JRF9GQUxTRV9TSEFSSU5HCi0gIHVpbnQ2NF90IHZhbF87Ci19Owot
Ci1jbGFzcyBEYXRhIHsgLy8gU2VxdWVudGlhbCBkYXRhIHN0cnVjdHVyZQotIHB1YmxpYzoKLSAg
ZXhwbGljaXQgRGF0YShzaXplX3Qgc2l6ZSkgOiBzaXplXyhzaXplKSB7Ci0gICAgeF8gPSBzdGQ6
Om1ha2VfdW5pcXVlPExpbmVbXT4oc2l6ZV8pOwotICB9Ci0KLSAgdWludDY0X3QgZ2V0VmFsKCkg
ewotICAgIHVpbnQ2NF90IHZhbCA9IHhfWzBdLnZhbF87Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7
IGkgPCBzaXplXzsgKytpKSB7Ci0gICAgICBhc3NlcnQoeF9baV0udmFsXyA9PSB2YWwpOwotICAg
IH0KLSAgICByZXR1cm4gdmFsOwotICB9Ci0KLSAgLy8gYWRkCi0KLSAgdm9pZCBhZGQodWludDY0
X3QgdmFsKSB7Ci0gICAgdWludDY0X3Qgb2xkdmFsID0geF9bMF0udmFsXzsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemVfOyArK2kpIHsKLSAgICAgIGFzc2VydCh4X1tpXS52YWxfID09
IG9sZHZhbCk7Ci0gICAgICB4X1tpXS52YWxfID0gb2xkdmFsICsgdmFsOwotICAgIH0KLSAgfQot
Ci0gIHVpbnQ2NF90IGZldGNoQWRkKHVpbnQ2NF90IHZhbCkgewotICAgIHVpbnQ2NF90IHJlcyA9
IHhfWzBdLnZhbF87Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplXzsgKytpKSB7Ci0g
ICAgICBhc3NlcnQoeF9baV0udmFsXyA9PSByZXMpOwotICAgICAgeF9baV0udmFsXyArPSB2YWw7
Ci0gICAgfQotICAgIHJldHVybiByZXM7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHNpemVfdCBzaXpl
XzsKLSAgc3RkOjp1bmlxdWVfcHRyPExpbmVbXT4geF87Ci19OwotCi0vLyBFeGFtcGxlIG9mIEZD
IGNvbmN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmUgdXNpbmcgc2ltcGxlIGludGVyZmFjZQotCi10ZW1w
bGF0ZSA8Ci0gICAgdHlwZW5hbWUgTXV0ZXggPSBzdGQ6Om11dGV4LAotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZT4gY2xhc3MgQXRvbSA9IHN0ZDo6YXRvbWljPgotY2xhc3MgRmNTaW1wbGVFeGFtcGxl
Ci0gICAgOiBwdWJsaWMgRmxhdENvbWJpbmluZzxGY1NpbXBsZUV4YW1wbGU8TXV0ZXgsIEF0b20+
LCBNdXRleCwgQXRvbT4gewotICB1c2luZyBGQyA9IEZsYXRDb21iaW5pbmc8RmNTaW1wbGVFeGFt
cGxlPE11dGV4LCBBdG9tPiwgTXV0ZXgsIEF0b20+OwotICB1c2luZyBSZWMgPSB0eXBlbmFtZSBG
Qzo6UmVjOwotCi0gcHVibGljOgotICBleHBsaWNpdCBGY1NpbXBsZUV4YW1wbGUoCi0gICAgICBz
aXplX3Qgc2l6ZSwKLSAgICAgIGJvb2wgZGVkaWNhdGVkID0gdHJ1ZSwKLSAgICAgIHVpbnQzMl90
IG51bVJlY3MgPSAwLAotICAgICAgdWludDMyX3QgbWF4T3BzID0gMCkKLSAgICAgIDogRkMoZGVk
aWNhdGVkLCBudW1SZWNzLCBtYXhPcHMpLCBkYXRhXyhzaXplKSB7fQotCi0gIHVpbnQ2NF90IGdl
dFZhbCgpIHsKLSAgICByZXR1cm4gZGF0YV8uZ2V0VmFsKCk7Ci0gIH0KLQotICAvLyBhZGQKLQot
ICB2b2lkIGFkZE5vRkModWludDY0X3QgdmFsKSB7Ci0gICAgdGhpcy0+cmVxdWVzdE5vRkMoWyZd
IHsgZGF0YV8uYWRkKHZhbCk7IH0pOwotICB9Ci0KLSAgdm9pZCBhZGQodWludDY0X3QgdmFsLCBS
ZWMqIHJlYyA9IG51bGxwdHIpIHsKLSAgICBhdXRvIG9wRm4gPSBbJiwgdmFsXSB7IC8vIGFzeW5j
aHJvbm91cyAtLSBjYXB0dXJlIHZhbCBieSB2YWx1ZQotICAgICAgZGF0YV8uYWRkKHZhbCk7Ci0g
ICAgfTsKLSAgICB0aGlzLT5yZXF1ZXN0RkMob3BGbiwgcmVjLCBmYWxzZSk7Ci0gIH0KLQotICAv
LyBmZXRjaEFkZAotCi0gIHVpbnQ2NF90IGZldGNoQWRkTm9GQyh1aW50NjRfdCB2YWwpIHsKLSAg
ICB1aW50NjRfdCByZXM7Ci0gICAgYXV0byBvcEZuID0gWyZdIHsgcmVzID0gZGF0YV8uZmV0Y2hB
ZGQodmFsKTsgfTsKLSAgICB0aGlzLT5yZXF1ZXN0Tm9GQyhvcEZuKTsKLSAgICByZXR1cm4gcmVz
OwotICB9Ci0KLSAgdWludDY0X3QgZmV0Y2hBZGQodWludDY0X3QgdmFsLCBSZWMqIHJlYyA9IG51
bGxwdHIpIHsKLSAgICB1aW50NjRfdCByZXM7Ci0gICAgYXV0byBvcEZuID0gWyZdIHsgcmVzID0g
ZGF0YV8uZmV0Y2hBZGQodmFsKTsgfTsKLSAgICB0aGlzLT5yZXF1ZXN0RkMob3BGbiwgcmVjKTsK
LSAgICByZXR1cm4gcmVzOwotICB9Ci0KLSBwcml2YXRlOgotICBEYXRhIGRhdGFfOwotfTsKLQot
Ly8gRXhhbXBsZSBvZiBGQyBkYXRhIHN0cnVjdHVyZSB1c2luZyBjdXN0b20gcmVxdWVzdCBwcm9j
ZXNzaW5nCi0KLWNsYXNzIFJlcSB7Ci0gcHVibGljOgotICBlbnVtIGNsYXNzIFR5cGUgeyBBREQs
IEZFVENIQUREIH07Ci0KLSAgdm9pZCBzZXRUeXBlKFR5cGUgdHlwZSkgewotICAgIHR5cGVfID0g
dHlwZTsKLSAgfQotCi0gIFR5cGUgZ2V0VHlwZSgpIHsKLSAgICByZXR1cm4gdHlwZV87Ci0gIH0K
LQotICB2b2lkIHNldFZhbCh1aW50NjRfdCB2YWwpIHsKLSAgICB2YWxfID0gdmFsOwotICB9Ci0K
LSAgdWludDY0X3QgZ2V0VmFsKCkgewotICAgIHJldHVybiB2YWxfOwotICB9Ci0KLSAgdm9pZCBz
ZXRSZXModWludDY0X3QgcmVzKSB7Ci0gICAgcmVzXyA9IHJlczsKLSAgfQotCi0gIHVpbnQ2NF90
IGdldFJlcygpIHsKLSAgICByZXR1cm4gcmVzXzsKLSAgfQotCi0gcHJpdmF0ZToKLSAgVHlwZSB0
eXBlXzsKLSAgdWludDY0X3QgdmFsXzsKLSAgdWludDY0X3QgcmVzXzsKLX07Ci0KLXRlbXBsYXRl
IDwKLSAgICB0eXBlbmFtZSBSZXEsCi0gICAgdHlwZW5hbWUgTXV0ZXggPSBzdGQ6Om11dGV4LAot
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3MgQXRvbSA9IHN0ZDo6YXRvbWljPgotY2xhc3Mg
RmNDdXN0b21FeGFtcGxlIDogcHVibGljIEZsYXRDb21iaW5pbmc8Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmNDdXN0b21FeGFtcGxlPFJlcSwgTXV0ZXgsIEF0b20+LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE11dGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0
b20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxPiB7Ci0gIHVzaW5nIEZDID0gRmxh
dENvbWJpbmluZzxGY0N1c3RvbUV4YW1wbGU8UmVxLCBNdXRleCwgQXRvbT4sIE11dGV4LCBBdG9t
LCBSZXE+OwotICB1c2luZyBSZWMgPSB0eXBlbmFtZSBGQzo6UmVjOwotCi0gcHVibGljOgotICBl
eHBsaWNpdCBGY0N1c3RvbUV4YW1wbGUoCi0gICAgICBpbnQgc2l6ZSwKLSAgICAgIGJvb2wgZGVk
aWNhdGVkID0gdHJ1ZSwKLSAgICAgIHVpbnQzMl90IG51bVJlY3MgPSAwLAotICAgICAgdWludDMy
X3QgbWF4T3BzID0gMCkKLSAgICAgIDogRkMoZGVkaWNhdGVkLCBudW1SZWNzLCBtYXhPcHMpLCBk
YXRhXyhzaXplKSB7fQotCi0gIHVpbnQ2NF90IGdldFZhbCgpIHsKLSAgICByZXR1cm4gZGF0YV8u
Z2V0VmFsKCk7Ci0gIH0KLQotICAvLyBhZGQKLQotICB2b2lkIGFkZE5vRkModWludDY0X3QgdmFs
KSB7Ci0gICAgdGhpcy0+cmVxdWVzdE5vRkMoWyZdIHsgZGF0YV8uYWRkKHZhbCk7IH0pOwotICB9
Ci0KLSAgdm9pZCBhZGQodWludDY0X3QgdmFsLCBSZWMqIHJlYyA9IG51bGxwdHIpIHsKLSAgICBh
dXRvIG9wRm4gPSBbJiwgdmFsXSB7IGRhdGFfLmFkZCh2YWwpOyB9OwotICAgIGF1dG8gZmlsbEZu
ID0gWyZdKFJlcSYgcmVxKSB7Ci0gICAgICByZXEuc2V0VHlwZShSZXE6OlR5cGU6OkFERCk7Ci0g
ICAgICByZXEuc2V0VmFsKHZhbCk7Ci0gICAgfTsKLSAgICB0aGlzLT5yZXF1ZXN0RkMob3BGbiwg
ZmlsbEZuLCByZWMsIGZhbHNlKTsgLy8gYXN5bmNocm9ub3VzCi0gIH0KLQotICAvLyBmZXRjaEFk
ZAotCi0gIHVpbnQ2NF90IGZldGNoQWRkTm9GQyh1aW50NjRfdCB2YWwpIHsKLSAgICB1aW50NjRf
dCByZXM7Ci0gICAgYXV0byBvcEZuID0gWyZdIHsgcmVzID0gZGF0YV8uZmV0Y2hBZGQodmFsKTsg
fTsKLSAgICB0aGlzLT5yZXF1ZXN0Tm9GQyhvcEZuKTsKLSAgICByZXR1cm4gcmVzOwotICB9Ci0K
LSAgdWludDY0X3QgZmV0Y2hBZGQodWludDY0X3QgdmFsLCBSZWMqIHJlYyA9IG51bGxwdHIpIHsK
LSAgICB1aW50NjRfdCByZXM7Ci0gICAgYXV0byBvcEZuID0gWyZdIHsgcmVzID0gZGF0YV8uZmV0
Y2hBZGQodmFsKTsgfTsKLSAgICBhdXRvIGZpbGxGbiA9IFsmXShSZXEmIHJlcSkgewotICAgICAg
cmVxLnNldFR5cGUoUmVxOjpUeXBlOjpGRVRDSEFERCk7Ci0gICAgICByZXEuc2V0VmFsKHZhbCk7
Ci0gICAgfTsKLSAgICBhdXRvIHJlc0ZuID0gWyZdKFJlcSYgcmVxKSB7IHJlcyA9IHJlcS5nZXRS
ZXMoKTsgfTsKLSAgICB0aGlzLT5yZXF1ZXN0RkMob3BGbiwgZmlsbEZuLCByZXNGbiwgcmVjKTsK
LSAgICByZXR1cm4gcmVzOwotICB9Ci0KLSAgLy8gY3VzdG9tIGNvbWJpbmVkIG9wIHByb2Nlc3Np
bmcgLSBvdmVycmlkZXMgRmxhdENvbWJpbmluZzo6Y29tYmluZWRPcChSZXEmKQotICB2b2lkIGNv
bWJpbmVkT3AoUmVxJiByZXEpIHsKLSAgICBzd2l0Y2ggKHJlcS5nZXRUeXBlKCkpIHsKLSAgICAg
IGNhc2UgUmVxOjpUeXBlOjpBREQ6IHsKLSAgICAgICAgZGF0YV8uYWRkKHJlcS5nZXRWYWwoKSk7
Ci0gICAgICB9IGJyZWFrOwotICAgICAgY2FzZSBSZXE6OlR5cGU6OkZFVENIQUREOiB7Ci0gICAg
ICAgIHJlcS5zZXRSZXMoZGF0YV8uZmV0Y2hBZGQocmVxLmdldFZhbCgpKSk7Ci0gICAgICB9IGJy
ZWFrOwotICAgICAgZGVmYXVsdDogeyBhc3NlcnQoZmFsc2UpOyB9Ci0gICAgfQotICB9Ci0KLSBw
cml2YXRlOgotICBEYXRhIGRhdGFfOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgZm9sbHkgewpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZXhwZXJp
bWVudGFsL2ZsYXRfY29tYmluaW5nL3Rlc3QvRmxhdENvbWJpbmluZ1Rlc3RIZWxwZXJzLmggYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvZmxh
dF9jb21iaW5pbmcvdGVzdC9GbGF0Q29tYmluaW5nVGVzdEhlbHBlcnMuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNjIzNTYzZWY2ZGJmYmVjYmExYWM5YWViOGIyZDRhYmQzMTMyZGNh
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvZmxhdF9jb21i
aW5pbmcvdGVzdC9GbGF0Q29tYmluaW5nVGVzdEhlbHBlcnMuaAorKysgL2Rldi9udWxsCkBAIC0x
LDIyNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0g
KiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp
Y2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
ZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0Ut
Mi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgot
ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl
cm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxmb2xseS9leHBlcmltZW50YWwvZmxhdF9jb21iaW5p
bmcvdGVzdC9GbGF0Q29tYmluaW5nRXhhbXBsZXMuaD4KLQotI2luY2x1ZGUgPGZvbGx5L0JlbmNo
bWFyay5oPgotI2luY2x1ZGUgPGdsb2cvbG9nZ2luZy5oPgotCi0jaW5jbHVkZSA8YXRvbWljPgot
I2luY2x1ZGUgPGNocm9ubz4KLSNpbmNsdWRlIDx0aHJlYWQ+Ci0KLW5hbWVzcGFjZSBmb2xseSB7
Ci1uYW1lc3BhY2UgdGVzdCB7Ci0KLXZvaWQgZG9Xb3JrKGludCB3b3JrKSB7Ci0gIHVpbnQ2NF90
IGEgPSAwOwotICBmb3IgKGludCBpID0gd29yazsgaSA+IDA7IC0taSkgewotICAgIGEgKz0gaTsK
LSAgfQotICBmb2xseTo6ZG9Ob3RPcHRpbWl6ZUF3YXkoYSk7Ci19Ci0KLXRlbXBsYXRlIDwKLSAg
ICB0eXBlbmFtZSBFeGFtcGxlLAotICAgIHR5cGVuYW1lIFJlcSA9IGJvb2wsCi0gICAgdHlwZW5h
bWUgTXV0ZXggPSBzdGQ6Om11dGV4LAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3MgQXRv
bSA9IHN0ZDo6YXRvbWljPgotdWludDY0X3QgZmNfdGVzdCgKLSAgICBpbnQgbnRocmVhZHMsCi0g
ICAgaW50IGxpbmVzLAotICAgIGludCBudW1SZWNzLAotICAgIGludCB3b3JrLAotICAgIGludCBv
cHMsCi0gICAgYm9vbCBjb21iaW5pbmcsCi0gICAgYm9vbCBkZWRpY2F0ZWQsCi0gICAgYm9vbCB0
YywKLSAgICBib29sIHN5bmNvcHMsCi0gICAgYm9vbCBleGNsID0gZmFsc2UsCi0gICAgYm9vbCBh
bGxvY0FsbCA9IGZhbHNlKSB7Ci0gIHVzaW5nIEZDID0gRmxhdENvbWJpbmluZzxFeGFtcGxlLCBN
dXRleCwgQXRvbSwgUmVxPjsKLSAgdXNpbmcgUmVjID0gdHlwZW5hbWUgRkM6OlJlYzsKLQotICBm
b2xseTo6QmVuY2htYXJrU3VzcGVuZGVyIHN1c3A7Ci0KLSAgc3RkOjphdG9taWM8Ym9vbD4gc3Rh
cnR7ZmFsc2V9OwotICBzdGQ6OmF0b21pYzxpbnQ+IHN0YXJ0ZWR7MH07Ci0gIEV4YW1wbGUgZXgo
bGluZXMsIGRlZGljYXRlZCwgbnVtUmVjcyk7Ci0gIHN0ZDo6YXRvbWljPHVpbnQ2NF90PiB0b3Rh
bHswfTsKLSAgYm9vbCBtdXRleCA9IGZhbHNlOwotCi0gIGlmIChhbGxvY0FsbCkgewotICAgIHN0
ZDo6dmVjdG9yPFJlYyo+IHYobnVtUmVjcyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1S
ZWNzOyArK2kpIHsKLSAgICAgIHZbaV0gPSBleC5hbGxvY1JlYygpOwotICAgIH0KLSAgICBmb3Ig
KGludCBpID0gbnVtUmVjczsgaSA+IDA7IC0taSkgewotICAgICAgZXguZnJlZVJlYyh2W2kgLSAx
XSk7Ci0gICAgfQotICB9Ci0KLSAgc3RkOjp2ZWN0b3I8c3RkOjp0aHJlYWQ+IHRocmVhZHMobnRo
cmVhZHMpOwotICBmb3IgKGludCB0aWQgPSAwOyB0aWQgPCBudGhyZWFkczsgKyt0aWQpIHsKLSAg
ICB0aHJlYWRzW3RpZF0gPSBzdGQ6OnRocmVhZChbJiwgdGlkXSB7Ci0gICAgICBzdGFydGVkLmZl
dGNoX2FkZCgxKTsKLSAgICAgIFJlYyogbXlyZWMgPSAoY29tYmluaW5nICYmIHRjKSA/IGV4LmFs
bG9jUmVjKCkgOiBudWxscHRyOwotICAgICAgdWludDY0X3Qgc3VtID0gMDsKLSAgICAgIHdoaWxl
ICghc3RhcnQubG9hZCgpKQotICAgICAgICA7Ci0KLSAgICAgIGlmICghY29tYmluaW5nKSB7Ci0g
ICAgICAgIC8vIG5vIGNvbWJpbmluZwotICAgICAgICBmb3IgKGludCBpID0gdGlkOyBpIDwgb3Bz
OyBpICs9IG50aHJlYWRzKSB7Ci0gICAgICAgICAgc3VtICs9IGV4LmZldGNoQWRkTm9GQygxKTsK
LSAgICAgICAgICBkb1dvcmsod29yayk7IC8vIHVucmVsYXRlZCB3b3JrCi0gICAgICAgIH0KLSAg
ICAgIH0gZWxzZSBpZiAoc3luY29wcykgewotICAgICAgICAvLyBzeW5jIGNvbWJpbmluZwotICAg
ICAgICBmb3IgKGludCBpID0gdGlkOyBpIDwgb3BzOyBpICs9IG50aHJlYWRzKSB7Ci0gICAgICAg
ICAgc3VtICs9IGV4LmZldGNoQWRkKDEsIG15cmVjKTsKLSAgICAgICAgICBkb1dvcmsod29yayk7
IC8vIHVucmVsYXRlZCB3b3JrCi0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IGFzeW5jIGNvbWJpbmluZwotICAgICAgICBmb3IgKGludCBpID0gdGlkOyBpIDwgb3BzOyBpICs9
IG50aHJlYWRzKSB7Ci0gICAgICAgICAgZXguYWRkKDEsIG15cmVjKTsKLSAgICAgICAgICBkb1dv
cmsod29yayk7IC8vIHVucmVsYXRlZCB3b3JrCi0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAg
aWYgKGV4Y2wpIHsKLSAgICAgICAgLy8gdGVzdCBvZiBleGNsdXNpdmUgYWNjZXNzIHRocm91Z2gg
YSBsb2NrIGhvbGRlcgotICAgICAgICB7Ci0gICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxNdXRl
eD4gbDsKLSAgICAgICAgICBleC5ob2xkTG9jayhsKTsKLSAgICAgICAgICBDSEVDSyghbXV0ZXgp
OwotICAgICAgICAgIG11dGV4ID0gdHJ1ZTsKLSAgICAgICAgICBWTE9HKDIpIDw8IHRpZCA8PCAi
ICIgPDwgZXguZ2V0VmFsKCkgPDwgIiAuLi4uLi4uLi4uLiI7Ci0gICAgICAgICAgdXNpbmcgbmFt
ZXNwYWNlIHN0ZDo6Y2hyb25vX2xpdGVyYWxzOwotICAgICAgICAgIC8qIHNsZWVwIG92ZXJyaWRl
ICovIC8vIGZvciBjb3ZlcmFnZQotICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2Zv
cigxMG1zKTsKLSAgICAgICAgICBWTE9HKDIpIDw8IHRpZCA8PCAiICIgPDwgZXguZ2V0VmFsKCkg
PDwgIiA9PT09PT09PT09PSI7Ci0gICAgICAgICAgQ0hFQ0sobXV0ZXgpOwotICAgICAgICAgIG11
dGV4ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gdGVzdCBvZiBleHBsaWNpdCBhY3F1
aXNpdGlvbiBhbmQgcmVsZWFzZSBvZiBleGNsdXNpdmUgYWNjZXNzCi0gICAgICAgIGV4LmFjcXVp
cmVFeGNsdXNpdmUoKTsKLSAgICAgICAgewotICAgICAgICAgIENIRUNLKCFtdXRleCk7Ci0gICAg
ICAgICAgbXV0ZXggPSB0cnVlOwotICAgICAgICAgIFZMT0coMikgPDwgdGlkIDw8ICIgIiA8PCBl
eC5nZXRWYWwoKSA8PCAiIC4uLi4uLi4uLi4uIjsKLSAgICAgICAgICB1c2luZyBuYW1lc3BhY2Ug
c3RkOjpjaHJvbm9fbGl0ZXJhbHM7Ci0gICAgICAgICAgLyogc2xlZXAgb3ZlcnJpZGUgKi8gLy8g
Zm9yIGNvdmVyYWdlCi0gICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKDEwbXMp
OwotICAgICAgICAgIFZMT0coMikgPDwgdGlkIDw8ICIgIiA8PCBleC5nZXRWYWwoKSA8PCAiID09
PT09PT09PT09IjsKLSAgICAgICAgICBDSEVDSyhtdXRleCk7Ci0gICAgICAgICAgbXV0ZXggPSBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBleC5yZWxlYXNlRXhjbHVzaXZlKCk7Ci0gICAgICB9
Ci0KLSAgICAgIHRvdGFsLmZldGNoX2FkZChzdW0pOwotICAgICAgaWYgKGNvbWJpbmluZyAmJiB0
YykgewotICAgICAgICBleC5mcmVlUmVjKG15cmVjKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQot
Ci0gIHdoaWxlIChzdGFydGVkLmxvYWQoKSA8IG50aHJlYWRzKQotICAgIDsKLSAgYXV0byB0YmVn
aW4gPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKLQotICAvLyBiZWdpbiB0aW1l
IG1lYXN1cmVtZW50Ci0gIHN1c3AuZGlzbWlzcygpOwotICBzdGFydC5zdG9yZSh0cnVlKTsKLQot
ICBmb3IgKGF1dG8mIHQgOiB0aHJlYWRzKSB7Ci0gICAgdC5qb2luKCk7Ci0gIH0KLQotICBpZiAo
IXN5bmNvcHMpIHsKLSAgICAvLyBjb21wbGV0ZSBhbnkgcGVuZGluZyBhc3luY2ggb3BzCi0gICAg
ZXguZHJhaW5BbGwoKTsKLSAgfQotCi0gIC8vIGVuZCB0aW1lIG1lYXN1cmVtZW50Ci0gIHVpbnQ2
NF90IGR1cmF0aW9uID0gMDsKLSAgQkVOQ0hNQVJLX1NVU1BFTkQgewotICAgIGF1dG8gdGVuZCA9
IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwotICAgIENIRUNLX0VRKG9wcywgZXgu
Z2V0VmFsKCkpOwotICAgIGlmIChzeW5jb3BzKSB7Ci0gICAgICB1aW50NjRfdCBuID0gKHVpbnQ2
NF90KW9wczsKLSAgICAgIHVpbnQ2NF90IGV4cGVjdGVkID0gbiAqIChuIC0gMSkgLyAyOwotICAg
ICAgQ0hFQ0tfRVEoZXhwZWN0ZWQsIHRvdGFsKTsKLSAgICB9Ci0gICAgZHVyYXRpb24gPQotICAg
ICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bmFub3NlY29uZHM+
KHRlbmQgLSB0YmVnaW4pCi0gICAgICAgICAgICAuY291bnQoKTsKLSAgfQotICByZXR1cm4gZHVy
YXRpb247Ci19Ci0KLXVpbnQ2NF90IHJ1bl90ZXN0KAotICAgIGludCBudGhyZWFkcywKLSAgICBp
bnQgbGluZXMsCi0gICAgaW50IG51bVJlY3MsCi0gICAgaW50IHdvcmssCi0gICAgaW50IG9wcywK
LSAgICBib29sIGNvbWJpbmluZywKLSAgICBib29sIHNpbXBsZSwKLSAgICBib29sIGRlZGljYXRl
ZCwKLSAgICBib29sIHRjLAotICAgIGJvb2wgc3luY29wcywKLSAgICBib29sIGV4Y2wgPSBmYWxz
ZSwKLSAgICBib29sIGFsbG9jQWxsID0gZmFsc2UpIHsKLSAgdXNpbmcgTSA9IHN0ZDo6bXV0ZXg7
Ci0gIGlmIChzaW1wbGUpIHsKLSAgICB1c2luZyBFeGFtcGxlID0gRmNTaW1wbGVFeGFtcGxlPE0+
OwotICAgIHJldHVybiBmY190ZXN0PEV4YW1wbGUsIGJvb2wsIE0+KAotICAgICAgICBudGhyZWFk
cywKLSAgICAgICAgbGluZXMsCi0gICAgICAgIG51bVJlY3MsCi0gICAgICAgIHdvcmssCi0gICAg
ICAgIG9wcywKLSAgICAgICAgY29tYmluaW5nLAotICAgICAgICBkZWRpY2F0ZWQsCi0gICAgICAg
IHRjLAotICAgICAgICBzeW5jb3BzLAotICAgICAgICBleGNsLAotICAgICAgICBhbGxvY0FsbCk7
Ci0gIH0gZWxzZSB7Ci0gICAgdXNpbmcgRXhhbXBsZSA9IEZjQ3VzdG9tRXhhbXBsZTxSZXEsIE0+
OwotICAgIHJldHVybiBmY190ZXN0PEV4YW1wbGUsIFJlcSwgTT4oCi0gICAgICAgIG50aHJlYWRz
LAotICAgICAgICBsaW5lcywKLSAgICAgICAgbnVtUmVjcywKLSAgICAgICAgd29yaywKLSAgICAg
ICAgb3BzLAotICAgICAgICBjb21iaW5pbmcsCi0gICAgICAgIGRlZGljYXRlZCwKLSAgICAgICAg
dGMsCi0gICAgICAgIHN5bmNvcHMsCi0gICAgICAgIGV4Y2wsCi0gICAgICAgIGFsbG9jQWxsKTsK
LSAgfQotfQotCi19IC8vIG5hbWVzcGFjZSB0ZXN0IHsKLX0gLy8gbmFtZXNwYWNlIGZvbGx5IHsK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4
cGVyaW1lbnRhbC9oYXpwdHIvYmVuY2gvSGF6cHRyQmVuY2gtQW1iLVRjLmNwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9oYXpwdHIvYmVu
Y2gvSGF6cHRyQmVuY2gtQW1iLVRjLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OTQyMWI2YWM4ZGRmNjU5MzA5NmI2ODQ5NTc4OWIzMjdkYWMxZTQzZi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvaGF6cHRyL2JlbmNoL0hhenB0ckJlbmNoLUFt
Yi1UYy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp
Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5h
cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5
IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBC
QVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBl
aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2RlZmluZSBIQVpQVFJfQU1CIHRydWUKLSNkZWZp
bmUgSEFaUFRSX1RDIHRydWUKLSNkZWZpbmUgSEFaUFRSX1BSSVYgdHJ1ZQotCi0jaW5jbHVkZSA8
Zm9sbHkvZXhwZXJpbWVudGFsL2hhenB0ci9iZW5jaC9IYXpwdHJCZW5jaC5oPgotI2luY2x1ZGUg
PGZvbGx5L3BvcnRhYmlsaXR5L0dGbGFncy5oPgotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmlsaXR5
L0dUZXN0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBmb2xseTo6aGF6cHRyOwotCi1pbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAgdGVzdGluZzo6SW5pdEdvb2dsZVRlc3QoJmFyZ2Ms
IGFyZ3YpOwotICBiZW5jaGVzKCIgICBhbWIgLSAgICB0YyIpOwotfQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZXhwZXJpbWVudGFsL2hhenB0
ci9iZW5jaC9IYXpwdHJCZW5jaC1Ob0FtYi1Ob1RjLmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9oYXpwdHIvYmVuY2gvSGF6cHRyQmVu
Y2gtTm9BbWItTm9UYy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNWU2MjMz
ZjI2YjUxZjI5Y2UyMTBjMmNhMmMyOTY2YWYxOTlhMmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZm9sbHkvZXhwZXJpbWVudGFsL2hhenB0ci9iZW5jaC9IYXpwdHJCZW5jaC1Ob0FtYi1Ob1Rj
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAx
NyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5z
ZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNo
ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBw
bGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
LAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZGVmaW5lIEhBWlBUUl9BTUIgZmFsc2UKLSNkZWZpbmUg
SEFaUFRSX1RDIGZhbHNlCi0jZGVmaW5lIEhBWlBUUl9QUklWIGZhbHNlCi0KLSNpbmNsdWRlIDxm
b2xseS9leHBlcmltZW50YWwvaGF6cHRyL2JlbmNoL0hhenB0ckJlbmNoLmg+Ci0jaW5jbHVkZSA8
Zm9sbHkvcG9ydGFiaWxpdHkvR0ZsYWdzLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkv
R1Rlc3QuaD4KLQotdXNpbmcgbmFtZXNwYWNlIGZvbGx5OjpoYXpwdHI7Ci0KLWludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikgewotICB0ZXN0aW5nOjpJbml0R29vZ2xlVGVzdCgmYXJnYywg
YXJndik7Ci0gIGJlbmNoZXMoIm5vIGFtYiAtIG5vIHRjIik7Ci19CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvaGF6cHRy
L2JlbmNoL0hhenB0ckJlbmNoLU5vQW1iLVRjLmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9oYXpwdHIvYmVuY2gvSGF6cHRyQmVuY2gt
Tm9BbWItVGMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDkyMjA0NjAyMTAx
MTgzYjYwNzE2YWMwOTgwMTI5YTU5MjA0ZWZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Zv
bGx5L2V4cGVyaW1lbnRhbC9oYXpwdHIvYmVuY2gvSGF6cHRyQmVuY2gtTm9BbWItVGMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vi
b29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJz
aW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s
aWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl
IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBX
SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM
aWNlbnNlLgotICovCi0KLSNkZWZpbmUgSEFaUFRSX0FNQiBmYWxzZQotI2RlZmluZSBIQVpQVFJf
VEMgdHJ1ZQotI2RlZmluZSBIQVpQVFJfUFJJViB0cnVlCi0KLSNpbmNsdWRlIDxmb2xseS9leHBl
cmltZW50YWwvaGF6cHRyL2JlbmNoL0hhenB0ckJlbmNoLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvcG9y
dGFiaWxpdHkvR0ZsYWdzLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvR1Rlc3QuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIGZvbGx5OjpoYXpwdHI7Ci0KLWludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikgewotICB0ZXN0aW5nOjpJbml0R29vZ2xlVGVzdCgmYXJnYywgYXJndik7Ci0g
IGJlbmNoZXMoIm5vIGFtYiAtICAgIHRjIik7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvaGF6cHRyL2JlbmNoL0hh
enB0ckJlbmNoLU9uZURvbWFpbi5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9mb2xseS9leHBlcmltZW50YWwvaGF6cHRyL2JlbmNoL0hhenB0ckJlbmNoLU9uZURvbWFp
bi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyN2RmNGZmMWYzYTc0YjE5MmYx
ZTBmNzUxNTczMGE3MjFiMTAzMzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZXhw
ZXJpbWVudGFsL2hhenB0ci9iZW5jaC9IYXpwdHJCZW5jaC1PbmVEb21haW4uY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJ
bmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu
MCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNl
cy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VU
IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
LgotICovCi0KLSNkZWZpbmUgSEFaUFRSX0FNQiB0cnVlCi0jZGVmaW5lIEhBWlBUUl9UQyB0cnVl
Ci0jZGVmaW5lIEhBWlBUUl9QUklWIHRydWUKLSNkZWZpbmUgSEFaUFRSX09ORV9ET01BSU4gdHJ1
ZQotCi0jaW5jbHVkZSA8Zm9sbHkvZXhwZXJpbWVudGFsL2hhenB0ci9iZW5jaC9IYXpwdHJCZW5j
aC5oPgotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L0dGbGFncy5oPgotI2luY2x1ZGUgPGZv
bGx5L3BvcnRhYmlsaXR5L0dUZXN0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBmb2xseTo6aGF6cHRy
OwotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAgdGVzdGluZzo6SW5pdEdv
b2dsZVRlc3QoJmFyZ2MsIGFyZ3YpOwotICBiZW5jaGVzKCIgICAgb25lIGRvbWFpbiIpOwotfQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZXhw
ZXJpbWVudGFsL2hhenB0ci9iZW5jaC9IYXpwdHJCZW5jaC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZXhwZXJpbWVudGFsL2hhenB0ci9iZW5jaC9IYXpwdHJC
ZW5jaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTQ5ZTM0OGFhMWJiNjY2YjM1
MDRhZTljOGE1ODRlOGE1YmQ1YzA2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4
cGVyaW1lbnRhbC9oYXpwdHIvYmVuY2gvSGF6cHRyQmVuY2guaAorKysgL2Rldi9udWxsCkBAIC0x
LDMxMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0g
KiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp
Y2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
ZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0Ut
Mi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgot
ICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl
cm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Zm9sbHkvQmVuY2htYXJrLmg+Ci0jaW5jbHVkZSA8Zm9s
bHkvZXhwZXJpbWVudGFsL2hhenB0ci9leGFtcGxlL1NXTVJMaXN0Lmg+Ci0jaW5jbHVkZSA8Zm9s
bHkvcG9ydGFiaWxpdHkvR1Rlc3QuaD4KLQotI2luY2x1ZGUgPGdsb2cvbG9nZ2luZy5oPgotCi0j
aW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPHRocmVhZD4KLQotbmFtZXNwYWNlIGZvbGx5IHsK
LW5hbWVzcGFjZSBoYXpwdHIgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5pdEZ1bmMsIHR5cGVu
YW1lIEZ1bmMsIHR5cGVuYW1lIEVuZEZ1bmM+Ci1pbmxpbmUgdWludDY0X3QgcnVuX29uY2UoCi0g
ICAgaW50IG50aHJlYWRzLAotICAgIGNvbnN0IEluaXRGdW5jJiBpbml0LAotICAgIGNvbnN0IEZ1
bmMmIGZuLAotICAgIGNvbnN0IEVuZEZ1bmMmIGVuZEZuKSB7Ci0gIGZvbGx5OjpCZW5jaG1hcmtT
dXNwZW5kZXIgc3VzcDsKLSAgc3RkOjphdG9taWM8Ym9vbD4gc3RhcnR7ZmFsc2V9OwotICBzdGQ6
OmF0b21pYzxpbnQ+IHN0YXJ0ZWR7MH07Ci0KLSAgaW5pdCgpOwotCi0gIHN0ZDo6dmVjdG9yPHN0
ZDo6dGhyZWFkPiB0aHJlYWRzKG50aHJlYWRzKTsKLSAgZm9yIChpbnQgdGlkID0gMDsgdGlkIDwg
bnRocmVhZHM7ICsrdGlkKSB7Ci0gICAgdGhyZWFkc1t0aWRdID0gc3RkOjp0aHJlYWQoWyYsIHRp
ZF0gewotICAgICAgc3RhcnRlZC5mZXRjaF9hZGQoMSk7Ci0gICAgICB3aGlsZSAoIXN0YXJ0Lmxv
YWQoKSkKLSAgICAgICAgLyogc3BpbiAqLzsKLSAgICAgIGZuKHRpZCk7Ci0gICAgfSk7Ci0gIH0K
LQotICB3aGlsZSAoc3RhcnRlZC5sb2FkKCkgPCBudGhyZWFkcykKLSAgICAvKiBzcGluICovOwot
Ci0gIC8vIGJlZ2luIHRpbWUgbWVhc3VyZW1lbnQKLSAgYXV0byB0YmVnaW4gPSBzdGQ6OmNocm9u
bzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKLSAgc3VzcC5kaXNtaXNzKCk7Ci0gIHN0YXJ0LnN0b3Jl
KHRydWUpOwotCi0gIGZvciAoYXV0byYgdCA6IHRocmVhZHMpIHsKLSAgICB0LmpvaW4oKTsKLSAg
fQotCi0gIHN1c3AucmVoaXJlKCk7Ci0gIC8vIGVuZCB0aW1lIG1lYXN1cmVtZW50Ci0gIGF1dG8g
dGVuZCA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwotICBlbmRGbigpOwotICBy
ZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om5hbm9zZWNvbmRz
Pih0ZW5kIC0gdGJlZ2luKQotICAgICAgLmNvdW50KCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBSZXBGdW5jPgotaW5saW5lIHVpbnQ2NF90IGJlbmNoKHN0ZDo6c3RyaW5nIG5hbWUsIGludCBv
cHMsIGNvbnN0IFJlcEZ1bmMmIHJlcEZuKSB7Ci0gIGludCByZXBzID0gMTA7Ci0gIHVpbnQ2NF90
IG1pbiA9IFVJTlRNQVhfTUFYOwotICB1aW50NjRfdCBtYXggPSAwOwotICB1aW50NjRfdCBzdW0g
PSAwOwotCi0gIHJlcEZuKCk7IC8vIHNvbWV0aW1lcyBmaXJzdCBydW4gaXMgb3V0bGllcgotICBm
b3IgKGludCByID0gMDsgciA8IHJlcHM7ICsrcikgewotICAgIHVpbnQ2NF90IGR1ciA9IHJlcEZu
KCk7Ci0gICAgc3VtICs9IGR1cjsKLSAgICBtaW4gPSBzdGQ6Om1pbihtaW4sIGR1cik7Ci0gICAg
bWF4ID0gc3RkOjptYXgobWF4LCBkdXIpOwotICB9Ci0KLSAgY29uc3Qgc3RkOjpzdHJpbmcgdW5p
dCA9ICIgbnMiOwotICB1aW50NjRfdCBhdmcgPSBzdW0gLyByZXBzOwotICB1aW50NjRfdCByZXMg
PSBtaW47Ci0gIHN0ZDo6Y291dCA8PCBuYW1lOwotICBzdGQ6OmNvdXQgPDwgIiAgICIgPDwgc3Rk
OjpzZXR3KDQpIDw8IG1heCAvIG9wcyA8PCB1bml0OwotICBzdGQ6OmNvdXQgPDwgIiAgICIgPDwg
c3RkOjpzZXR3KDQpIDw8IGF2ZyAvIG9wcyA8PCB1bml0OwotICBzdGQ6OmNvdXQgPDwgIiAgICIg
PDwgc3RkOjpzZXR3KDQpIDw8IHJlcyAvIG9wcyA8PCB1bml0OwotICBzdGQ6OmNvdXQgPDwgc3Rk
OjplbmRsOwotICByZXR1cm4gcmVzOwotfQotCi1pbmxpbmUgdWludDY0X3QgbGlzdEJlbmNoKHN0
ZDo6c3RyaW5nIG5hbWUsIGludCBudGhyZWFkcywgaW50IHNpemUpIHsKLSAgaW50IG9wcyA9IDEw
MDAwMDsKLSAgYXV0byByZXBGbiA9IFsmXSB7Ci0gICAgaGF6cHRyX2hvbGRlciBkdW1teVsxMDBd
OwotICAgIFNXTVJMaXN0U2V0PHVpbnQ2NF90PiBzOwotICAgIGF1dG8gaW5pdCA9IFsmXSB7Ci0g
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBzLmFkZChpKTsK
LSAgICAgIH0KLSAgICB9OwotICAgIGF1dG8gZm4gPSBbJl0oaW50IHRpZCkgewotICAgICAgZm9y
IChpbnQgaiA9IHRpZDsgaiA8IG9wczsgaiArPSBudGhyZWFkcykgewotICAgICAgICBzLmNvbnRh
aW5zKHNpemUpOwotICAgICAgfQotICAgIH07Ci0gICAgYXV0byBlbmRGbiA9IFtdIHt9OwotICAg
IHJldHVybiBydW5fb25jZShudGhyZWFkcywgaW5pdCwgZm4sIGVuZEZuKTsKLSAgfTsKLSAgcmV0
dXJuIGJlbmNoKG5hbWUsIG9wcywgcmVwRm4pOwotfQotCi1pbmxpbmUgdWludDY0X3QgaG9sZGVy
QmVuY2goc3RkOjpzdHJpbmcgbmFtZSwgaW50IG50aHJlYWRzKSB7Ci0gIGludCBvcHMgPSAxMDAw
MDA7Ci0gIGF1dG8gcmVwRm4gPSBbJl0gewotICAgIGhhenB0cl9ob2xkZXIgZHVtbXlbMTAwXTsK
LSAgICBhdXRvIGluaXQgPSBbXSB7fTsKLSAgICBhdXRvIGZuID0gWyZdKGludCB0aWQpIHsKLSAg
ICAgIGZvciAoaW50IGogPSB0aWQ7IGogPCBvcHM7IGogKz0gbnRocmVhZHMpIHsKLSAgICAgICAg
aGF6cHRyX2hvbGRlciBhWzEwXTsKLSAgICAgIH0KLSAgICB9OwotICAgIGF1dG8gZW5kRm4gPSBb
XSB7fTsKLSAgICByZXR1cm4gcnVuX29uY2UobnRocmVhZHMsIGluaXQsIGZuLCBlbmRGbik7Ci0g
IH07Ci0gIHJldHVybiBiZW5jaChuYW1lLCBvcHMsIHJlcEZuKTsKLX0KLQotaW5saW5lIHVpbnQ2
NF90IHJldGlyZUJlbmNoKHN0ZDo6c3RyaW5nIG5hbWUsIGludCBudGhyZWFkcykgewotICBzdHJ1
Y3QgRm9vIDogaGF6cHRyX29ial9iYXNlPEZvbz4gewotICAgIGludCB4OwotICB9OwotICBpbnQg
b3BzID0gMTAwMDAwOwotICBhdXRvIHJlcEZuID0gWyZdIHsKLSAgICBoYXpwdHJfaG9sZGVyIGR1
bW15WzEwMF07Ci0gICAgYXV0byBpbml0ID0gW10ge307Ci0gICAgYXV0byBmbiA9IFsmXShpbnQg
dGlkKSB7Ci0gICAgICBmb3IgKGludCBqID0gdGlkOyBqIDwgb3BzOyBqICs9IG50aHJlYWRzKSB7
Ci0gICAgICAgIEZvbyogcCA9IG5ldyBGb287Ci0gICAgICAgIHAtPnJldGlyZSgpOwotICAgICAg
fQotICAgIH07Ci0gICAgYXV0byBlbmRGbiA9IFtdIHt9OwotICAgIHJldHVybiBydW5fb25jZShu
dGhyZWFkcywgaW5pdCwgZm4sIGVuZEZuKTsKLSAgfTsKLSAgcmV0dXJuIGJlbmNoKG5hbWUsIG9w
cywgcmVwRm4pOwotfQotCi1jb25zdCBpbnQgbnRocltdID0gezEsIDEwfTsKLWNvbnN0IGludCBz
aXplc1tdID0gezEwLCAxMDB9OwotCi1pbmxpbmUgdm9pZCBiZW5jaGVzKHN0ZDo6c3RyaW5nIG5h
bWUpIHsKLSAgc3RkOjpjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tICIgPDwgbmFtZSA8PCAiXG4iOwotICBmb3IgKGludCBpIDogbnRocikgewotICAg
IHN0ZDo6Y291dCA8PCBpIDw8ICIgdGhyZWFkcyAtLSBjb25zdHJ1Y3QvZGVzdHJ1Y3QgMTAgaGF6
cHRyX2hvbGRlci1zIgotICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAgaG9sZGVyQmVu
Y2gobmFtZSArICIgICAgICAgICAgICAgICIsIGkpOwotICAgIGhvbGRlckJlbmNoKG5hbWUgKyAi
IC0gZHVwICAgICAgICAiLCBpKTsKLSAgICBzdGQ6OmNvdXQgPDwgaSA8PCAiIHRocmVhZHMgLS0g
YWxsb2NhdGUvcmV0aXJlL3JlY2xhaW0gb2JqZWN0IiA8PCBzdGQ6OmVuZGw7Ci0gICAgcmV0aXJl
QmVuY2gobmFtZSArICIgICAgICAgICAgICAgICIsIGkpOwotICAgIHJldGlyZUJlbmNoKG5hbWUg
KyAiIC0gZHVwICAgICAgICAiLCBpKTsKLSAgICBmb3IgKGludCBqIDogc2l6ZXMpIHsKLSAgICAg
IHN0ZDo6Y291dCA8PCBpIDw8ICIgdGhyZWFkcyAtLSAiIDw8IGogPDwgIi1pdGVtIGxpc3QiIDw8
IHN0ZDo6ZW5kbDsKLSAgICAgIGxpc3RCZW5jaChuYW1lICsgIiAgICAgICAgICAgICAgIiwgaSwg
aik7Ci0gICAgICBsaXN0QmVuY2gobmFtZSArICIgLSBkdXAgICAgICAgICIsIGksIGopOwotICAg
IH0KLSAgfQotICBzdGQ6OmNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGhhenB0
ciB7Ci19IC8vIG5hbWVzcGFjZSBmb2xseSB7Ci0KLS8qCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIG5vIGFtYiAtIG5vIHRjCi0xIHRocmVhZHMgLS0gY29uc3Ry
dWN0L2Rlc3RydWN0IDEwIGhhenB0cl9ob2xkZXItcwotbm8gYW1iIC0gbm8gdGMgICAgICAgICAg
ICAgICAgIDI1MTggbnMgICAyNDYxIG5zICAgMjQzMSBucwotbm8gYW1iIC0gbm8gdGMgLSBkdXAg
ICAgICAgICAgIDI0OTkgbnMgICAyNDYwIG5zICAgMjQyMCBucwotMSB0aHJlYWRzIC0tIGFsbG9j
YXRlL3JldGlyZS9yZWNsYWltIG9iamVjdAotbm8gYW1iIC0gbm8gdGMgICAgICAgICAgICAgICAg
ICAgODUgbnMgICAgIDgzIG5zICAgICA4MSBucwotbm8gYW1iIC0gbm8gdGMgLSBkdXAgICAgICAg
ICAgICAgODMgbnMgICAgIDgyIG5zICAgICA4MSBucwotMSB0aHJlYWRzIC0tIDEwLWl0ZW0gbGlz
dAotbm8gYW1iIC0gbm8gdGMgICAgICAgICAgICAgICAgICA2NTUgbnMgICAgNjQ0IG5zICAgIDYz
OSBucwotbm8gYW1iIC0gbm8gdGMgLSBkdXAgICAgICAgICAgICA2NTggbnMgICAgNjQ1IG5zICAg
IDY0MSBucwotMSB0aHJlYWRzIC0tIDEwMC1pdGVtIGxpc3QKLW5vIGFtYiAtIG5vIHRjICAgICAg
ICAgICAgICAgICAyMTc1IG5zICAgMjE0MiBucyAgIDIxMjQgbnMKLW5vIGFtYiAtIG5vIHRjIC0g
ZHVwICAgICAgICAgICAyMjk0IG5zICAgMjIyOCBucyAgIDIxMzggbnMKLTEwIHRocmVhZHMgLS0g
Y29uc3RydWN0L2Rlc3RydWN0IDEwIGhhenB0cl9ob2xkZXItcwotbm8gYW1iIC0gbm8gdGMgICAg
ICAgICAgICAgICAgIDM4OTMgbnMgICAyOTMyIG5zICAgMTM5MSBucwotbm8gYW1iIC0gbm8gdGMg
LSBkdXAgICAgICAgICAgIDMxNTcgbnMgICAyOTI3IG5zICAgMjcyNiBucwotMTAgdGhyZWFkcyAt
LSBhbGxvY2F0ZS9yZXRpcmUvcmVjbGFpbSBvYmplY3QKLW5vIGFtYiAtIG5vIHRjICAgICAgICAg
ICAgICAgICAgMTUyIG5zICAgIDEzNCBucyAgICAxMjcgbnMKLW5vIGFtYiAtIG5vIHRjIC0gZHVw
ICAgICAgICAgICAgMTQxIG5zICAgIDEzMyBucyAgICAxMjggbnMKLTEwIHRocmVhZHMgLS0gMTAt
aXRlbSBsaXN0Ci1ubyBhbWIgLSBubyB0YyAgICAgICAgICAgICAgICAgIDUzMiBucyAgICAzMjgg
bnMgICAgMjY5IG5zCi1ubyBhbWIgLSBubyB0YyAtIGR1cCAgICAgICAgICAgIDU5NyBucyAgICAz
OTMgbnMgICAgMjcxIG5zCi0xMCB0aHJlYWRzIC0tIDEwMC1pdGVtIGxpc3QKLW5vIGFtYiAtIG5v
IHRjICAgICAgICAgICAgICAgICAgNzU3IG5zICAgIDU3MyBucyAgICA0MTIgbnMKLW5vIGFtYiAt
IG5vIHRjIC0gZHVwICAgICAgICAgICAgODE5IG5zICAgIDY0MyBucyAgICA0MjAgbnMKLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgYW1iIC0gbm8gdGMK
LTEgdGhyZWFkcyAtLSBjb25zdHJ1Y3QvZGVzdHJ1Y3QgMTAgaGF6cHRyX2hvbGRlci1zCi0gICBh
bWIgLSBubyB0YyAgICAgICAgICAgICAgICAgMjU5MCBucyAgIDI0ODEgbnMgICAyNDIyIG5zCi0g
ICBhbWIgLSBubyB0YyAtIGR1cCAgICAgICAgICAgMjUxOSBucyAgIDI0NjggbnMgICAyNDI0IG5z
Ci0xIHRocmVhZHMgLS0gYWxsb2NhdGUvcmV0aXJlL3JlY2xhaW0gb2JqZWN0Ci0gICBhbWIgLSBu
byB0YyAgICAgICAgICAgICAgICAgICA2OSBucyAgICAgNjggbnMgICAgIDY3IG5zCi0gICBhbWIg
LSBubyB0YyAtIGR1cCAgICAgICAgICAgICA2OSBucyAgICAgNjggbnMgICAgIDY3IG5zCi0xIHRo
cmVhZHMgLS0gMTAtaXRlbSBsaXN0Ci0gICBhbWIgLSBubyB0YyAgICAgICAgICAgICAgICAgIDUy
NCBucyAgICA1MTAgbnMgICAgNDkyIG5zCi0gICBhbWIgLSBubyB0YyAtIGR1cCAgICAgICAgICAg
IDUxNCBucyAgICA1MDcgbnMgICAgNDk2IG5zCi0xIHRocmVhZHMgLS0gMTAwLWl0ZW0gbGlzdAot
ICAgYW1iIC0gbm8gdGMgICAgICAgICAgICAgICAgICA3NjEgbnMgICAgNzExIG5zICAgIDY5MyBu
cwotICAgYW1iIC0gbm8gdGMgLSBkdXAgICAgICAgICAgICA3MTcgbnMgICAgNjk0IG5zICAgIDY4
NCBucwotMTAgdGhyZWFkcyAtLSBjb25zdHJ1Y3QvZGVzdHJ1Y3QgMTAgaGF6cHRyX2hvbGRlci1z
Ci0gICBhbWIgLSBubyB0YyAgICAgICAgICAgICAgICAgMzMwMiBucyAgIDI5MDggbnMgICAxNjEy
IG5zCi0gICBhbWIgLSBubyB0YyAtIGR1cCAgICAgICAgICAgMzIyMCBucyAgIDI5MDkgbnMgICAx
NjQxIG5zCi0xMCB0aHJlYWRzIC0tIGFsbG9jYXRlL3JldGlyZS9yZWNsYWltIG9iamVjdAotICAg
YW1iIC0gbm8gdGMgICAgICAgICAgICAgICAgICAxMjkgbnMgICAgMTIzIG5zICAgIDExMCBucwot
ICAgYW1iIC0gbm8gdGMgLSBkdXAgICAgICAgICAgICAxMzUgbnMgICAgMTI3IG5zICAgIDEyMCBu
cwotMTAgdGhyZWFkcyAtLSAxMC1pdGVtIGxpc3QKLSAgIGFtYiAtIG5vIHRjICAgICAgICAgICAg
ICAgICAgNTEyIG5zICAgIDI4OCBucyAgICAyNTYgbnMKLSAgIGFtYiAtIG5vIHRjIC0gZHVwICAg
ICAgICAgICAgMjc1IG5zICAgIDI2OSBucyAgICAyNjMgbnMKLTEwIHRocmVhZHMgLS0gMTAwLWl0
ZW0gbGlzdAotICAgYW1iIC0gbm8gdGMgICAgICAgICAgICAgICAgICAyOTcgbnMgICAgMjg5IG5z
ICAgIDI4NCBucwotICAgYW1iIC0gbm8gdGMgLSBkdXAgICAgICAgICAgICA1NTEgbnMgICAgMzU4
IG5zICAgIDI4MiBucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBubyBhbWIgLSAgICB0YwotMSB0aHJlYWRzIC0tIGNvbnN0cnVjdC9kZXN0cnVjdCAxMCBo
YXpwdHJfaG9sZGVyLXMKLW5vIGFtYiAtICAgIHRjICAgICAgICAgICAgICAgICAgIDU2IG5zICAg
ICA1NSBucyAgICAgNTUgbnMKLW5vIGFtYiAtICAgIHRjIC0gZHVwICAgICAgICAgICAgIDU2IG5z
ICAgICA1NCBucyAgICAgNTQgbnMKLTEgdGhyZWFkcyAtLSBhbGxvY2F0ZS9yZXRpcmUvcmVjbGFp
bSBvYmplY3QKLW5vIGFtYiAtICAgIHRjICAgICAgICAgICAgICAgICAgIDYzIG5zICAgICA2MiBu
cyAgICAgNjIgbnMKLW5vIGFtYiAtICAgIHRjIC0gZHVwICAgICAgICAgICAgIDY0IG5zICAgICA2
MyBucyAgICAgNjIgbnMKLTEgdGhyZWFkcyAtLSAxMC1pdGVtIGxpc3QKLW5vIGFtYiAtICAgIHRj
ICAgICAgICAgICAgICAgICAgMTkwIG5zICAgIDE4OCBucyAgICAxODcgbnMKLW5vIGFtYiAtICAg
IHRjIC0gZHVwICAgICAgICAgICAgMTkzIG5zICAgIDE4NiBucyAgICAxODIgbnMKLTEgdGhyZWFk
cyAtLSAxMDAtaXRlbSBsaXN0Ci1ubyBhbWIgLSAgICB0YyAgICAgICAgICAgICAgICAgMTg1OSBu
cyAgIDE2OTggbnMgICAxNjY2IG5zCi1ubyBhbWIgLSAgICB0YyAtIGR1cCAgICAgICAgICAgMTc3
MCBucyAgIDE3MTcgbnMgICAxNjczIG5zCi0xMCB0aHJlYWRzIC0tIGNvbnN0cnVjdC9kZXN0cnVj
dCAxMCBoYXpwdHJfaG9sZGVyLXMKLW5vIGFtYiAtICAgIHRjICAgICAgICAgICAgICAgICAgIDE5
IG5zICAgICAxMSBucyAgICAgIDcgbnMKLW5vIGFtYiAtICAgIHRjIC0gZHVwICAgICAgICAgICAg
IDExIG5zICAgICAgOCBucyAgICAgIDcgbnMKLTEwIHRocmVhZHMgLS0gYWxsb2NhdGUvcmV0aXJl
L3JlY2xhaW0gb2JqZWN0Ci1ubyBhbWIgLSAgICB0YyAgICAgICAgICAgICAgICAgICAgOSBucyAg
ICAgIDggbnMgICAgICA4IG5zCi1ubyBhbWIgLSAgICB0YyAtIGR1cCAgICAgICAgICAgICAxMCBu
cyAgICAgIDkgbnMgICAgICA4IG5zCi0xMCB0aHJlYWRzIC0tIDEwLWl0ZW0gbGlzdAotbm8gYW1i
IC0gICAgdGMgICAgICAgICAgICAgICAgICAgNDAgbnMgICAgIDI1IG5zICAgICAyMSBucwotbm8g
YW1iIC0gICAgdGMgLSBkdXAgICAgICAgICAgICAgMjQgbnMgICAgIDIzIG5zICAgICAyMSBucwot
MTAgdGhyZWFkcyAtLSAxMDAtaXRlbSBsaXN0Ci1ubyBhbWIgLSAgICB0YyAgICAgICAgICAgICAg
ICAgIDIxNSBucyAgICAyMDggbnMgICAgMTg4IG5zCi1ubyBhbWIgLSAgICB0YyAtIGR1cCAgICAg
ICAgICAgIDIxNSBucyAgICAyMDkgbnMgICAgMTk3IG5zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIGFtYiAtICAgIHRjCi0xIHRocmVhZHMgLS0gY29u
c3RydWN0L2Rlc3RydWN0IDEwIGhhenB0cl9ob2xkZXItcwotICAgYW1iIC0gICAgdGMgICAgICAg
ICAgICAgICAgICAgNTYgbnMgICAgIDU0IG5zICAgICA1NCBucwotICAgYW1iIC0gICAgdGMgLSBk
dXAgICAgICAgICAgICAgNTUgbnMgICAgIDU0IG5zICAgICA1MyBucwotMSB0aHJlYWRzIC0tIGFs
bG9jYXRlL3JldGlyZS9yZWNsYWltIG9iamVjdAotICAgYW1iIC0gICAgdGMgICAgICAgICAgICAg
ICAgICAgNjIgbnMgICAgIDYxIG5zICAgICA2MSBucwotICAgYW1iIC0gICAgdGMgLSBkdXAgICAg
ICAgICAgICAgNjIgbnMgICAgIDYxIG5zICAgICA2MSBucwotMSB0aHJlYWRzIC0tIDEwLWl0ZW0g
bGlzdAotICAgYW1iIC0gICAgdGMgICAgICAgICAgICAgICAgICAgMzYgbnMgICAgIDM1IG5zICAg
ICAzMyBucwotICAgYW1iIC0gICAgdGMgLSBkdXAgICAgICAgICAgICAgMzcgbnMgICAgIDM1IG5z
ICAgICAzNCBucwotMSB0aHJlYWRzIC0tIDEwMC1pdGVtIGxpc3QKLSAgIGFtYiAtICAgIHRjICAg
ICAgICAgICAgICAgICAgMjYyIG5zICAgIDI0NyBucyAgICAyMzAgbnMKLSAgIGFtYiAtICAgIHRj
IC0gZHVwICAgICAgICAgICAgMjQ5IG5zICAgIDIzOCBucyAgICAyMzAgbnMKLTEwIHRocmVhZHMg
LS0gY29uc3RydWN0L2Rlc3RydWN0IDEwIGhhenB0cl9ob2xkZXItcwotICAgYW1iIC0gICAgdGMg
ICAgICAgICAgICAgICAgICAgMTQgbnMgICAgIDEyIG5zICAgICAxMSBucwotICAgYW1iIC0gICAg
dGMgLSBkdXAgICAgICAgICAgICAgMTIgbnMgICAgIDExIG5zICAgICAxMSBucwotMTAgdGhyZWFk
cyAtLSBhbGxvY2F0ZS9yZXRpcmUvcmVjbGFpbSBvYmplY3QKLSAgIGFtYiAtICAgIHRjICAgICAg
ICAgICAgICAgICAgIDE4IG5zICAgICAxNyBucyAgICAgMTUgbnMKLSAgIGFtYiAtICAgIHRjIC0g
ZHVwICAgICAgICAgICAgIDE4IG5zICAgICAxNyBucyAgICAgMTUgbnMKLTEwIHRocmVhZHMgLS0g
MTAtaXRlbSBsaXN0Ci0gICBhbWIgLSAgICB0YyAgICAgICAgICAgICAgICAgICAgOSBucyAgICAg
IDggbnMgICAgICA4IG5zCi0gICBhbWIgLSAgICB0YyAtIGR1cCAgICAgICAgICAgICAgOCBucyAg
ICAgIDggbnMgICAgICA3IG5zCi0xMCB0aHJlYWRzIC0tIDEwMC1pdGVtIGxpc3QKLSAgIGFtYiAt
ICAgIHRjICAgICAgICAgICAgICAgICAgIDUyIG5zICAgICA0MiBucyAgICAgMjggbnMKLSAgIGFt
YiAtICAgIHRjIC0gZHVwICAgICAgICAgICAgIDQ0IG5zICAgICAzNyBucyAgICAgMjggbnMKLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIG9uZSBkb21h
aW4KLTEgdGhyZWFkcyAtLSBjb25zdHJ1Y3QvZGVzdHJ1Y3QgMTAgaGF6cHRyX2hvbGRlci1zCi0g
ICAgb25lIGRvbWFpbiAgICAgICAgICAgICAgICAgICA1NyBucyAgICAgNTYgbnMgICAgIDU1IG5z
Ci0gICAgb25lIGRvbWFpbiAtIGR1cCAgICAgICAgICAgICA1NiBucyAgICAgNTQgbnMgICAgIDUz
IG5zCi0xIHRocmVhZHMgLS0gYWxsb2NhdGUvcmV0aXJlL3JlY2xhaW0gb2JqZWN0Ci0gICAgb25l
IGRvbWFpbiAgICAgICAgICAgICAgICAgICA4NyBucyAgICAgNzEgbnMgICAgIDY0IG5zCi0gICAg
b25lIGRvbWFpbiAtIGR1cCAgICAgICAgICAgICA2OSBucyAgICAgNjggbnMgICAgIDY4IG5zCi0x
IHRocmVhZHMgLS0gMTAtaXRlbSBsaXN0Ci0gICAgb25lIGRvbWFpbiAgICAgICAgICAgICAgICAg
ICAzMiBucyAgICAgMzAgbnMgICAgIDI5IG5zCi0gICAgb25lIGRvbWFpbiAtIGR1cCAgICAgICAg
ICAgICAzMSBucyAgICAgMzAgbnMgICAgIDI5IG5zCi0xIHRocmVhZHMgLS0gMTAwLWl0ZW0gbGlz
dAotICAgIG9uZSBkb21haW4gICAgICAgICAgICAgICAgICAyNjkgbnMgICAgMjM4IG5zICAgIDIy
NiBucwotICAgIG9uZSBkb21haW4gLSBkdXAgICAgICAgICAgICAyMzcgbnMgICAgMjMyIG5zICAg
IDIyNyBucwotMTAgdGhyZWFkcyAtLSBjb25zdHJ1Y3QvZGVzdHJ1Y3QgMTAgaGF6cHRyX2hvbGRl
ci1zCi0gICAgb25lIGRvbWFpbiAgICAgICAgICAgICAgICAgICAxNiBucyAgICAgMTIgbnMgICAg
IDEwIG5zCi0gICAgb25lIGRvbWFpbiAtIGR1cCAgICAgICAgICAgICAxMSBucyAgICAgMTAgbnMg
ICAgIDEwIG5zCi0xMCB0aHJlYWRzIC0tIGFsbG9jYXRlL3JldGlyZS9yZWNsYWltIG9iamVjdAot
ICAgIG9uZSBkb21haW4gICAgICAgICAgICAgICAgICAgMTkgbnMgICAgIDE3IG5zICAgICAxNiBu
cwotICAgIG9uZSBkb21haW4gLSBkdXAgICAgICAgICAgICAgMTkgbnMgICAgIDE3IG5zICAgICAx
NSBucwotMTAgdGhyZWFkcyAtLSAxMC1pdGVtIGxpc3QKLSAgICBvbmUgZG9tYWluICAgICAgICAg
ICAgICAgICAgICA2IG5zICAgICAgNSBucyAgICAgIDUgbnMKLSAgICBvbmUgZG9tYWluIC0gZHVw
ICAgICAgICAgICAgICA2IG5zICAgICAgNSBucyAgICAgIDUgbnMKLTEwIHRocmVhZHMgLS0gMTAw
LWl0ZW0gbGlzdAotICAgIG9uZSBkb21haW4gICAgICAgICAgICAgICAgICAgNDAgbnMgICAgIDM5
IG5zICAgICAzNSBucwotICAgIG9uZSBkb21haW4gLSBkdXAgICAgICAgICAgICAgNDAgbnMgICAg
IDM5IG5zICAgICAzNSBucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvaGF6cHRyL2RlYnVnLmggYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvaGF6cHRy
L2RlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MWU2NTE1YTMyYjE5NDYx
NzRlZjFiNjYzNWQzZjhhZDUyYzIyMWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkv
ZXhwZXJpbWVudGFsL2hhenB0ci9kZWJ1Zy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0g
KiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAq
Ci0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAq
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPGdsb2cvbG9nZ2luZy5oPgotCi0jaWZuZGVmIEhBWlBUUl9ERUJVRwotI2Rl
ZmluZSBIQVpQVFJfREVCVUcgZmFsc2UKLSNlbmRpZgotCi0jZGVmaW5lIERFQlVHX1BSSU5UKC4u
LikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChIQVpQVFJfREVCVUcpIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBWTE9HKDIpIDw8IF9fZnVuY19f
IDw8ICIgLS0tICIgPDwgX19WQV9BUkdTX187IFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlIChmYWxzZSkKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRh
bC9oYXpwdHIvZXhhbXBsZS9TV01STGlzdC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZm9sbHkvZXhwZXJpbWVudGFsL2hhenB0ci9leGFtcGxlL1NXTVJMaXN0LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYmM5Nzg1ZTg3NzdkYzhmODJiNzc4OGUzNTUw
NGZlM2Q2YzFjNjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZXhwZXJpbWVudGFs
L2hhenB0ci9leGFtcGxlL1NXTVJMaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0g
KiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAq
Ci0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAq
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPGZvbGx5L2V4cGVyaW1lbnRhbC9oYXpwdHIvZGVidWcuaD4KLSNpbmNsdWRl
IDxmb2xseS9leHBlcmltZW50YWwvaGF6cHRyL2hhenB0ci5oPgotCi1uYW1lc3BhY2UgZm9sbHkg
ewotbmFtZXNwYWNlIGhhenB0ciB7Ci0KLS8qKiBTZXQgaW1wbGVtZW50ZWQgYXMgYW4gb3JkZXJl
ZCBzaW5nbHktbGlua2VkIGxpc3QuCi0gKgotICogIEEgc2luZ2xlIHdyaXRlciB0aHJlYWQgbWF5
IGFkZCBvciByZW1vdmUgZWxlbWVudHMuIE11bHRpcGxlIHJlYWRlcgotICogIHRocmVhZHMgbWF5
IHNlYXJjaCB0aGUgc2V0IGNvbmN1cnJlbnRseSB3aXRoIGVhY2ggb3RoZXIgYW5kIHdpdGgKLSAq
ICB0aGUgd3JpdGVyJ3Mgb3BlcmF0aW9ucy4KLSAqLwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1j
bGFzcyBTV01STGlzdFNldCB7Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPgotICBzdHJ1Y3Qg
UmVjbGFpbWVyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoTm9kZSogcCkgewotICAgICAgREVCVUdf
UFJJTlQocCA8PCAiICIgPDwgc2l6ZW9mKE5vZGUpKTsKLSAgICAgIGRlbGV0ZSBwOwotICAgIH0K
LSAgfTsKLQotICBjbGFzcyBOb2RlIDogcHVibGljIGhhenB0cl9vYmpfYmFzZTxOb2RlLCBSZWNs
YWltZXI8Tm9kZT4+IHsKLSAgICBmcmllbmQgU1dNUkxpc3RTZXQ7Ci0gICAgVCBlbGVtXzsKLSAg
ICBzdGQ6OmF0b21pYzxOb2RlKj4gbmV4dF87Ci0KLSAgICBOb2RlKFQgZSwgTm9kZSogbikgOiBl
bGVtXyhlKSwgbmV4dF8obikgewotICAgICAgREVCVUdfUFJJTlQodGhpcyA8PCAiICIgPDwgZSA8
PCAiICIgPDwgbik7Ci0gICAgfQotCi0gICBwdWJsaWM6Ci0gICAgfk5vZGUoKSB7Ci0gICAgICBE
RUJVR19QUklOVCh0aGlzKTsKLSAgICB9Ci0gIH07Ci0KLSAgc3RkOjphdG9taWM8Tm9kZSo+IGhl
YWRfID0ge251bGxwdHJ9OwotICBoYXpwdHJfZG9tYWluJiBkb21haW5fOwotCi0gIC8qIFVzZWQg
YnkgdGhlIHNpbmdsZSB3cml0ZXIgKi8KLSAgdm9pZCBsb2NhdGVfbG93ZXJfYm91bmQoY29uc3Qg
VCYgdiwgc3RkOjphdG9taWM8Tm9kZSo+KiYgcHJldikgY29uc3QgewotICAgIGF1dG8gY3VyciA9
IHByZXYtPmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgd2hpbGUgKGN1cnIp
IHsKLSAgICAgIGlmIChjdXJyLT5lbGVtXyA+PSB2KSBicmVhazsKLSAgICAgIHByZXYgPSAmKGN1
cnItPm5leHRfKTsKLSAgICAgIGN1cnIgPSBjdXJyLT5uZXh0Xy5sb2FkKHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGF4ZWQpOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLQotIHB1YmxpYzoKLSAgZXhw
bGljaXQgU1dNUkxpc3RTZXQoaGF6cHRyX2RvbWFpbiYgZG9tYWluID0gZGVmYXVsdF9oYXpwdHJf
ZG9tYWluKCkpCi0gICAgICA6IGRvbWFpbl8oZG9tYWluKSB7fQotCi0gIH5TV01STGlzdFNldCgp
IHsKLSAgICBOb2RlKiBuZXh0OwotICAgIGZvciAoYXV0byBwID0gaGVhZF8ubG9hZCgpOyBwOyBw
ID0gbmV4dCkgewotICAgICAgbmV4dCA9IHAtPm5leHRfLmxvYWQoKTsKLSAgICAgIGRlbGV0ZSBw
OwotICAgIH0KLSAgfQotCi0gIGJvb2wgYWRkKFQgdikgewotICAgIGF1dG8gcHJldiA9ICZoZWFk
XzsKLSAgICBsb2NhdGVfbG93ZXJfYm91bmQodiwgcHJldik7Ci0gICAgYXV0byBjdXJyID0gcHJl
di0+bG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICBpZiAoY3VyciAmJiBjdXJy
LT5lbGVtXyA9PSB2KSByZXR1cm4gZmFsc2U7Ci0gICAgcHJldi0+c3RvcmUobmV3IE5vZGUoc3Rk
Ojptb3ZlKHYpLCBjdXJyKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBib29sIHJlbW92
ZShjb25zdCBUJiB2KSB7Ci0gICAgYXV0byBwcmV2ID0gJmhlYWRfOwotICAgIGxvY2F0ZV9sb3dl
cl9ib3VuZCh2LCBwcmV2KTsKLSAgICBhdXRvIGN1cnIgPSBwcmV2LT5sb2FkKHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGF4ZWQpOwotICAgIGlmICghY3VyciB8fCBjdXJyLT5lbGVtXyAhPSB2KSByZXR1
cm4gZmFsc2U7Ci0gICAgTm9kZSAqY3Vycl9uZXh0ID0gY3Vyci0+bmV4dF8ubG9hZCgpOwotICAg
IC8vIFBhdGNoIHVwIHRoZSBhY3R1YWwgbGlzdC4uLgotICAgIHByZXYtPnN0b3JlKGN1cnJfbmV4
dCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgLy8gLi4uYW5kIG9ubHkgdGhlbiBu
dWxsIG91dCB0aGUgcmVtb3ZlZCBub2RlLgotICAgIGN1cnItPm5leHRfLnN0b3JlKG51bGxwdHIs
IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICAgIGN1cnItPnJldGlyZShkb21haW5fKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAvKiBVc2VkIGJ5IHJlYWRlcnMgKi8KLSAgYm9vbCBj
b250YWlucyhjb25zdCBUJiB2YWwpIGNvbnN0IHsKLSAgICAvKiBBY3F1aXJlIHR3byBoYXphcmQg
cG9pbnRlcnMgZm9yIGhhbmQtb3Zlci1oYW5kIHRyYXZlcnNhbC4gKi8KLSAgICBoYXpwdHJfaG9s
ZGVyIGhwdHJfcHJldihkb21haW5fKTsKLSAgICBoYXpwdHJfaG9sZGVyIGhwdHJfY3Vycihkb21h
aW5fKTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgYXV0byBwcmV2ID0gJmhlYWRfOwotICAg
ICAgYXV0byBjdXJyID0gcHJldi0+bG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKLSAg
ICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmICghY3VycikgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICAgICAgaWYgKCFocHRyX2N1cnIudHJ5X3Byb3RlY3QoY3VyciwgKnByZXYpKQotICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBhdXRvIG5leHQgPSBjdXJyLT5uZXh0Xy5sb2FkKHN0ZDo6bWVt
b3J5X29yZGVyX2FjcXVpcmUpOwotICAgICAgICBpZiAocHJldi0+bG9hZChzdGQ6Om1lbW9yeV9v
cmRlcl9hY3F1aXJlKSAhPSBjdXJyKQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoY3Vy
ci0+ZWxlbV8gPT0gdmFsKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBl
bHNlIGlmICghKGN1cnItPmVsZW1fIDwgdmFsKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAgLy8gYmVjYXVzZSB0aGUgbGlzdCBpcyBzb3J0ZWQKLSAgICAgICAgfQotICAgICAgICBwcmV2
ID0gJihjdXJyLT5uZXh0Xyk7Ci0gICAgICAgIGN1cnIgPSBuZXh0OwotICAgICAgICAvKiBTd2Fw
IGRvZXMgbm90IGNoYW5nZSB0aGUgdmFsdWVzIG9mIHRoZSBvd25lZCBoYXphcmQKLSAgICAgICAg
ICogcG9pbnRlcnMgdGhlbXNlbHZlcy4gQWZ0ZXIgdGhlIHN3YXAsIFRoZSBoYXphcmQgcG9pbnRl
cgotICAgICAgICAgKiBvd25lZCBieSBocHRyX3ByZXYgY29udGludWVzIHRvIHByb3RlY3QgdGhl
IG5vZGUgdGhhdAotICAgICAgICAgKiBjb250YWlucyB0aGUgcG9pbnRlciAqcHJldi4gVGhlIGhh
emFyZCBwb2ludGVyIG93bmVkIGJ5Ci0gICAgICAgICAqIGhwdHJfY3VyciB3aWxsIGNvbnRpbnVl
IHRvIHByb3RlY3QgdGhlIG5vZGUgdGhhdCBjb250YWlucwotICAgICAgICAgKiB0aGUgb2xkICpw
cmV2ICh1bmxlc3MgdGhlIG9sZCBwcmV2IHdhcyAmaGVhZCksIHdoaWNoIG5vCi0gICAgICAgICAq
IGxvbmdlciBuZWVkcyBwcm90ZWN0aW9uLCBzbyBocHRyX2N1cnIncyBoYXphcmQgcG9pbnRlciBp
cwotICAgICAgICAgKiBub3cgZnJlZSB0byBwcm90ZWN0ICpjdXJyIGluIHRoZSBuZXh0IGl0ZXJh
dGlvbiAoaWYgY3VyciAhPQotICAgICAgICAgKiBudWxsKS4KLSAgICAgICAgICovCi0gICAgICAg
IHN3YXAoaHB0cl9jdXJyLCBocHRyX3ByZXYpOwotICAgICAgfQotICAgIH0KLSAgICAvKiBUaGUg
aGF6YXJkIHBvaW50ZXJzIGFyZSByZWxlYXNlZCBhdXRvbWF0aWNhbGx5LiAqLwotICB9Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBmb2xseSB7Ci19IC8vIG5hbWVzcGFjZSBoYXpwdHIgewpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZXhwZXJpbWVu
dGFsL2hhenB0ci9oYXpwdHItaW1wbC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvZXhwZXJpbWVudGFsL2hhenB0ci9oYXpwdHItaW1wbC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0ZGQwZGU4ODljMzExM2NjZTY5MjcyMWVkYjhmZGQ3YjVmMmIx
YmViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9oYXpwdHIv
aGF6cHRyLWltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAq
IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDov
L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVp
cmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQot
ICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT
IElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBL
SU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0
aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRh
dGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyogb3ZlcnJpZGUtaW5jbHVkZS1ndWFy
ZCAqLwotI2lmbmRlZiBIQVpQVFJfSAotI2Vycm9yICJUaGlzIHNob3VsZCBvbmx5IGJlIGluY2x1
ZGVkIGJ5IGhhenB0ci5oIgotI2VuZGlmCi0KLS8qIHF1YWxpdHkgb2YgaW1wbGVtZW50YXRpb24g
c3dpdGNoZXMgKi8KLQotLy8gTk9URTogVGhlICNpZm5kZWYgcGF0dGVybiBpcyBwcm9uZSB0byBP
RFIgdmlvbGF0aW9uLiBJdHMgdXNlIGZvcgotLy8gcXVhbGl0eSBvZiBpbXBsZW1lbnRhdGlvbiBv
cHRpb25zIGlzIHRlbXBvcmFyeS4gRXZlbnR1YWxseSB0aGVzZQotLy8gb3B0aW9ucyBzaG91bGQg
YmUgYWRkZWQgdG8gdGhlIEFQSSBpbiBmdXR1cmUgQVBJIGV4dGVuc2lvbnMuCi0KLSNpZm5kZWYg
SEFaUFRSX0FNQgotI2RlZmluZSBIQVpQVFJfQU1CIHRydWUKLSNlbmRpZgotCi0jaWZuZGVmIEhB
WlBUUl9UQwotI2RlZmluZSBIQVpQVFJfVEMgdHJ1ZQotI2VuZGlmCi0KLSNpZm5kZWYgSEFaUFRS
X1RDX1NJWkUKLSNkZWZpbmUgSEFaUFRSX1RDX1NJWkUgMTAKLSNlbmRpZgotCi0jaWZuZGVmIEhB
WlBUUl9QUklWCi0jZGVmaW5lIEhBWlBUUl9QUklWIHRydWUKLSNlbmRpZgotCi0jaWZuZGVmIEhB
WlBUUl9PTkVfRE9NQUlOCi0jZGVmaW5lIEhBWlBUUl9PTkVfRE9NQUlOIGZhbHNlCi0jZW5kaWYK
LQotI2lmbmRlZiBIQVpQVFJfU0NBTl9NVUxUCi0jZGVmaW5lIEhBWlBUUl9TQ0FOX01VTFQgMgot
I2VuZGlmCi0KLSNpZm5kZWYgSEFaUFRSX1NDQU5fVEhSRVNIT0xECi0jZGVmaW5lIEhBWlBUUl9T
Q0FOX1RIUkVTSE9MRCAxMDAwCi0jZW5kaWYKLQotLyogc3RhdHMgc3dpdGNoICovCi0jaWZuZGVm
IEhBWlBUUl9TVEFUUwotI2RlZmluZSBIQVpQVFJfU1RBVFMgZmFsc2UKLSNlbmRpZgotCi0jaW5j
bHVkZSA8Zm9sbHkvY29uY3VycmVuY3kvQ2FjaGVMb2NhbGl0eS5oPgotI2luY2x1ZGUgPGZvbGx5
L2V4cGVyaW1lbnRhbC9Bc3ltbWV0cmljTWVtb3J5QmFycmllci5oPgotI2luY2x1ZGUgPGZvbGx5
L2V4cGVyaW1lbnRhbC9oYXpwdHIvZGVidWcuaD4KLQotI2luY2x1ZGUgPG11dGV4PiAvLyBmb3Ig
dGhyZWFkIGNhY2hpbmcKLSNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PiAvLyBmb3IgaGFzaCBzZXQg
aW4gYnVsayByZWNsYW1hdGlvbgotCi1uYW1lc3BhY2UgZm9sbHkgewotbmFtZXNwYWNlIGhhenB0
ciB7Ci0KLS8qKgotICogaGVscGVyIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucwotICovCi0KLS8qKiBo
YXpwdHJfc3RhdHMgKi8KLQotY2xhc3MgaGF6cHRyX3N0YXRzOwotaGF6cHRyX3N0YXRzJiBoYXpw
dHJfc3RhdHMoKTsKLQotI2lmIEhBWlBUUl9TVEFUUwotI2RlZmluZSBJTkNfSEFaUFRSX1NUQVRT
KHgpIGhhenB0cl9zdGF0cygpLngoKQotI2Vsc2UKLSNkZWZpbmUgSU5DX0hBWlBUUl9TVEFUUyh4
KQotI2VuZGlmCi0KLS8qKiBoYXpwdHJfbWIgKi8KLQotY2xhc3MgaGF6cHRyX21iIHsKLSBwdWJs
aWM6Ci0gIHN0YXRpYyB2b2lkIGxpZ2h0KCk7Ci0gIHN0YXRpYyB2b2lkIGhlYXZ5KCk7Ci19Owot
Ci0vKiogaGF6cHRyX3RjCi0gKiAgVGhyZWFkIGNhY2hpbmcgb2YgaGF6cHRyX3JlYy1zIHRoYXQg
YmVsb25nIHRvIHRoZSBkZWZhdWx0IGRvbWFpbi4KLSAqLwotCi1jbGFzcyBoYXpwdHJfdGNfZW50
cnkgewotICBmcmllbmQgY2xhc3MgaGF6cHRyX3RjOwotICBoYXpwdHJfcmVjKiBocHJlY197bnVs
bHB0cn07Ci0KLSBwdWJsaWM6Ci0gIHZvaWQgZmlsbChoYXpwdHJfcmVjKiBocHJlYyk7Ci0gIGhh
enB0cl9yZWMqIGdldCgpOwotICB2b2lkIGV2aWN0KCk7Ci19OwotCi1jbGFzcyBoYXpwdHJfdGMg
ewotICBoYXpwdHJfdGNfZW50cnkgdGNfW0hBWlBUUl9UQ19TSVpFXTsKLSAgaW50IGNvdW50X3sw
fTsKLQotIHB1YmxpYzoKLSAgaGF6cHRyX3RjKCk7Ci0gIH5oYXpwdHJfdGMoKTsKLSAgaGF6cHRy
X3JlYyogZ2V0KCk7Ci0gIGJvb2wgcHV0KGhhenB0cl9yZWMqIGhwcmVjKTsKLX07Ci0KLWhhenB0
cl90YyYgaGF6cHRyX3RjKCk7Ci0KLS8qKiBoYXpwdHJfcHJpdgotICogIFRocmVhZCBwcml2YXRl
IGxpc3RzIG9mIHJldGlyZWQgb2JqZWN0cyB0aGF0IGJlbG9uZyB0byB0aGUgZGVmYXVsdCBkb21h
aW4uCi0gKi8KLQotY2xhc3MgaGF6cHRyX3ByaXYgewotICBoYXpwdHJfZG9tYWluKiBkb21haW5f
eyZkZWZhdWx0X2hhenB0cl9kb21haW4oKX07Ci0gIGhhenB0cl9vYmoqIGhlYWRfe251bGxwdHJ9
OwotICBoYXpwdHJfb2JqKiB0YWlsX3tudWxscHRyfTsKLSAgaW50IHJjb3VudF97MH07Ci0gIGJv
b2wgYWN0aXZlX3t0cnVlfTsKLQotIHB1YmxpYzoKLSAgaGF6cHRyX3ByaXYoKTsKLSAgfmhhenB0
cl9wcml2KCk7Ci0gIHZvaWQgcHVzaChoYXpwdHJfb2JqKiBvYmopOwotCi0gcHJpdmF0ZToKLSAg
dm9pZCBwdXNoQWxsVG9Eb21haW4oKTsKLX07Ci0KLWhhenB0cl9wcml2JiBoYXpwdHJfcHJpdigp
OwotCi0vKioKLSAqIHB1YmxpYyBmdW5jdGlvbnMKLSAqLwotCi0vKiogaGF6cHRyX2RvbWFpbiAq
LwotCi1jb25zdGV4cHIgaGF6cHRyX2RvbWFpbjo6aGF6cHRyX2RvbWFpbihtZW1vcnlfcmVzb3Vy
Y2UqIG1yKSBub2V4Y2VwdAotICAgIDogbXJfKG1yKSB7fQotCi0vKiogaGF6cHRyX29ial9iYXNl
ICovCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBEPgotaW5saW5lIHZvaWQgaGF6
cHRyX29ial9iYXNlPFQsIEQ+OjpyZXRpcmUoaGF6cHRyX2RvbWFpbiYgZG9tYWluLCBEIGRlbGV0
ZXIpIHsKLSAgREVCVUdfUFJJTlQodGhpcyA8PCAiICIgPDwgJmRvbWFpbik7Ci0gIGRlbGV0ZXJf
ID0gc3RkOjptb3ZlKGRlbGV0ZXIpOwotICByZWNsYWltXyA9IFtdKGhhenB0cl9vYmoqIHApIHsK
LSAgICBhdXRvIGhvYnAgPSBzdGF0aWNfY2FzdDxoYXpwdHJfb2JqX2Jhc2UqPihwKTsKLSAgICBh
dXRvIG9iaiA9IHN0YXRpY19jYXN0PFQqPihob2JwKTsKLSAgICBob2JwLT5kZWxldGVyXyhvYmop
OwotICB9OwotICBpZiAoSEFaUFRSX1BSSVYgJiYKLSAgICAgIChIQVpQVFJfT05FX0RPTUFJTiB8
fCAoJmRvbWFpbiA9PSAmZGVmYXVsdF9oYXpwdHJfZG9tYWluKCkpKSkgewotICAgIGhhenB0cl9w
cml2KCkucHVzaCh0aGlzKTsKLSAgfSBlbHNlIHsKLSAgICBkb21haW4ub2JqUmV0aXJlKHRoaXMp
OwotICB9Ci19Ci0KLS8qKiBoYXpwdHJfcmVjICovCi0KLWNsYXNzIGhhenB0cl9yZWMgewotICBm
cmllbmQgY2xhc3MgaGF6cHRyX2RvbWFpbjsKLSAgZnJpZW5kIGNsYXNzIGhhenB0cl9ob2xkZXI7
Ci0gIGZyaWVuZCBjbGFzcyBoYXpwdHJfdGNfZW50cnk7Ci0KLSAgRk9MTFlfQUxJR05fVE9fQVZP
SURfRkFMU0VfU0hBUklORwotICBzdGQ6OmF0b21pYzxjb25zdCB2b2lkKj4gaGF6cHRyX3tudWxs
cHRyfTsKLSAgaGF6cHRyX3JlYyogbmV4dF97bnVsbHB0cn07Ci0gIHN0ZDo6YXRvbWljPGJvb2w+
IGFjdGl2ZV97ZmFsc2V9OwotCi0gIHZvaWQgc2V0KGNvbnN0IHZvaWQqIHApIG5vZXhjZXB0Owot
ICBjb25zdCB2b2lkKiBnZXQoKSBjb25zdCBub2V4Y2VwdDsKLSAgdm9pZCBjbGVhcigpIG5vZXhj
ZXB0OwotICBib29sIGlzQWN0aXZlKCkgbm9leGNlcHQ7Ci0gIGJvb2wgdHJ5QWNxdWlyZSgpIG5v
ZXhjZXB0OwotICB2b2lkIHJlbGVhc2UoKSBub2V4Y2VwdDsKLX07Ci0KLS8qKiBoYXpwdHJfaG9s
ZGVyICovCi0KLUZPTExZX0FMV0FZU19JTkxJTkUgaGF6cHRyX2hvbGRlcjo6aGF6cHRyX2hvbGRl
cihoYXpwdHJfZG9tYWluJiBkb21haW4pIHsKLSAgZG9tYWluXyA9ICZkb21haW47Ci0gIGhhenB0
cl8gPSBkb21haW5fLT5oYXpwdHJBY3F1aXJlKCk7Ci0gIERFQlVHX1BSSU5UKHRoaXMgPDwgIiAi
IDw8IGRvbWFpbl8gPDwgIiAiIDw8IGhhenB0cl8pOwotICBpZiAoaGF6cHRyXyA9PSBudWxscHRy
KSB7IHN0ZDo6YmFkX2FsbG9jIGU7IHRocm93IGU7IH0KLX0KLQotaW5saW5lIGhhenB0cl9ob2xk
ZXI6OmhhenB0cl9ob2xkZXIoc3RkOjpudWxscHRyX3QpIHsKLSAgZG9tYWluXyA9IG51bGxwdHI7
Ci0gIGhhenB0cl8gPSBudWxscHRyOwotICBERUJVR19QUklOVCh0aGlzIDw8ICIgIiA8PCBkb21h
aW5fIDw8ICIgIiA8PCBoYXpwdHJfKTsKLX0KLQotRk9MTFlfQUxXQVlTX0lOTElORSBoYXpwdHJf
aG9sZGVyOjp+aGF6cHRyX2hvbGRlcigpIHsKLSAgREVCVUdfUFJJTlQodGhpcyk7Ci0gIGlmIChk
b21haW5fKSB7Ci0gICAgaGF6cHRyXy0+Y2xlYXIoKTsKLSAgICBkb21haW5fLT5oYXpwdHJSZWxl
YXNlKGhhenB0cl8pOwotICB9Ci19Ci0KLWlubGluZSBoYXpwdHJfaG9sZGVyOjpoYXpwdHJfaG9s
ZGVyKGhhenB0cl9ob2xkZXImJiByaHMpIG5vZXhjZXB0IHsKLSAgZG9tYWluXyA9IHJocy5kb21h
aW5fOwotICBoYXpwdHJfID0gcmhzLmhhenB0cl87Ci0gIHJocy5kb21haW5fID0gbnVsbHB0cjsK
LSAgcmhzLmhhenB0cl8gPSBudWxscHRyOwotfQotCi1pbmxpbmUgaGF6cHRyX2hvbGRlciYgaGF6
cHRyX2hvbGRlcjo6b3BlcmF0b3I9KGhhenB0cl9ob2xkZXImJiByaHMpIG5vZXhjZXB0IHsKLSAg
LyogU2VsZi1tb3ZlIGlzIGEgbm8tb3AuICAqLwotICBpZiAodGhpcyAhPSAmcmhzKSB7Ci0gICAg
dGhpcy0+fmhhenB0cl9ob2xkZXIoKTsKLSAgICBuZXcgKHRoaXMpIGhhenB0cl9ob2xkZXIoc3Rk
Ojptb3ZlKHJocykpOwotICB9Ci0gIHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci1GT0xMWV9BTFdBWVNfSU5MSU5FIGJvb2wgaGF6cHRyX2hvbGRlcjo6dHJ5X3Byb3Rl
Y3QoCi0gICAgVComIHB0ciwKLSAgICBjb25zdCBzdGQ6OmF0b21pYzxUKj4mIHNyYykgbm9leGNl
cHQgewotICByZXR1cm4gdHJ5X3Byb3RlY3QocHRyLCBzcmMsIFtdKFQqIHQpIHsgcmV0dXJuIHQ7
IH0pOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuYz4KLUZPTExZX0FM
V0FZU19JTkxJTkUgYm9vbCBoYXpwdHJfaG9sZGVyOjp0cnlfcHJvdGVjdCgKLSAgICBUKiYgcHRy
LAotICAgIGNvbnN0IHN0ZDo6YXRvbWljPFQqPiYgc3JjLAotICAgIEZ1bmMgZikgbm9leGNlcHQg
ewotICBERUJVR19QUklOVCh0aGlzIDw8ICIgIiA8PCBwdHIgPDwgIiAiIDw8ICZzcmMpOwotICBy
ZXNldChmKHB0cikpOwotICAvKioqIEZ1bGwgZmVuY2UgKioqLyBoYXpwdHJfbWI6OmxpZ2h0KCk7
Ci0gIFQqIHAgPSBzcmMubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKLSAgaWYgKHAg
IT0gcHRyKSB7Ci0gICAgcHRyID0gcDsKLSAgICByZXNldCgpOwotICAgIHJldHVybiBmYWxzZTsK
LSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1GT0xMWV9B
TFdBWVNfSU5MSU5FIFQqIGhhenB0cl9ob2xkZXI6OmdldF9wcm90ZWN0ZWQoCi0gICAgY29uc3Qg
c3RkOjphdG9taWM8VCo+JiBzcmMpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIGdldF9wcm90ZWN0ZWQo
c3JjLCBbXShUKiB0KSB7IHJldHVybiB0OyB9KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEZ1bmM+Ci1GT0xMWV9BTFdBWVNfSU5MSU5FIFQqIGhhenB0cl9ob2xkZXI6Omdl
dF9wcm90ZWN0ZWQoCi0gICAgY29uc3Qgc3RkOjphdG9taWM8VCo+JiBzcmMsCi0gICAgRnVuYyBm
KSBub2V4Y2VwdCB7Ci0gIFQqIHAgPSBzcmMubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
KTsKLSAgd2hpbGUgKCF0cnlfcHJvdGVjdChwLCBzcmMsIGYpKSB7Ci0gIH0KLSAgREVCVUdfUFJJ
TlQodGhpcyA8PCAiICIgPDwgcCA8PCAiICIgPDwgJnNyYyk7Ci0gIHJldHVybiBwOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLUZPTExZX0FMV0FZU19JTkxJTkUgdm9pZCBoYXpwdHJfaG9s
ZGVyOjpyZXNldChjb25zdCBUKiBwdHIpIG5vZXhjZXB0IHsKLSAgYXV0byBwID0gc3RhdGljX2Nh
c3Q8aGF6cHRyX29iaio+KGNvbnN0X2Nhc3Q8VCo+KHB0cikpOwotICBERUJVR19QUklOVCh0aGlz
IDw8ICIgIiA8PCBwdHIgPDwgIiBwOiIgPDwgcCk7Ci0gIERDSEVDSyhoYXpwdHJfKTsgLy8gVUIg
aWYgKnRoaXMgaXMgZW1wdHkKLSAgaGF6cHRyXy0+c2V0KHApOwotfQotCi1GT0xMWV9BTFdBWVNf
SU5MSU5FIHZvaWQgaGF6cHRyX2hvbGRlcjo6cmVzZXQoc3RkOjpudWxscHRyX3QpIG5vZXhjZXB0
IHsKLSAgREVCVUdfUFJJTlQodGhpcyk7Ci0gIERDSEVDSyhoYXpwdHJfKTsgLy8gVUIgaWYgKnRo
aXMgaXMgZW1wdHkKLSAgaGF6cHRyXy0+Y2xlYXIoKTsKLX0KLQotRk9MTFlfQUxXQVlTX0lOTElO
RSB2b2lkIGhhenB0cl9ob2xkZXI6OnN3YXAoaGF6cHRyX2hvbGRlciYgcmhzKSBub2V4Y2VwdCB7
Ci0gIERFQlVHX1BSSU5UKAotICAgIHRoaXMgPDwgIiAiIDw8ICB0aGlzLT5oYXpwdHJfIDw8ICIg
IiA8PCB0aGlzLT5kb21haW5fIDw8ICIgLS0gIgotICAgIDw8ICZyaHMgPDwgIiAiIDw8IHJocy5o
YXpwdHJfIDw8ICIgIiA8PCByaHMuZG9tYWluXyk7Ci0gIGlmICghSEFaUFRSX09ORV9ET01BSU4p
IHsKLSAgICBzdGQ6OnN3YXAodGhpcy0+ZG9tYWluXywgcmhzLmRvbWFpbl8pOwotICB9Ci0gIHN0
ZDo6c3dhcCh0aGlzLT5oYXpwdHJfLCByaHMuaGF6cHRyXyk7Ci19Ci0KLUZPTExZX0FMV0FZU19J
TkxJTkUgdm9pZCBzd2FwKGhhenB0cl9ob2xkZXImIGxocywgaGF6cHRyX2hvbGRlciYgcmhzKSBu
b2V4Y2VwdCB7Ci0gIGxocy5zd2FwKHJocyk7Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0vLyBbVE9ET106Ci0vLyAtIENvbnRyb2wgb2YgcmVjbGFtYXRpb24gKHdoZW4gYW5kIGJ5IHdo
b20pCi0vLyAtIEVuZC10by1lbmQgbG9jay1mcmVlIGltcGxlbWVudGF0aW9uCi0KLS8qKiBEZWZp
bml0aW9uIG9mIGRlZmF1bHRfaGF6cHRyX2RvbWFpbigpICovCi0KLWlubGluZSBoYXpwdHJfZG9t
YWluJiBkZWZhdWx0X2hhenB0cl9kb21haW4oKSB7Ci0gIHN0YXRpYyBoYXpwdHJfZG9tYWluIGQ7
Ci0gIERFQlVHX1BSSU5UKCZkKTsKLSAgcmV0dXJuIGQ7Ci19Ci0KLS8qKiBoYXpwdHJfcmVjICov
Ci0KLWlubGluZSB2b2lkIGhhenB0cl9yZWM6OnNldChjb25zdCB2b2lkKiBwKSBub2V4Y2VwdCB7
Ci0gIERFQlVHX1BSSU5UKHRoaXMgPDwgIiAiIDw8IHApOwotICBoYXpwdHJfLnN0b3JlKHAsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotfQotCi1pbmxpbmUgY29uc3Qgdm9pZCogaGF6cHRy
X3JlYzo6Z2V0KCkgY29uc3Qgbm9leGNlcHQgewotICBhdXRvIHAgPSBoYXpwdHJfLmxvYWQoc3Rk
OjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7Ci0gIERFQlVHX1BSSU5UKHRoaXMgPDwgIiAiIDw8IHAp
OwotICByZXR1cm4gcDsKLX0KLQotaW5saW5lIHZvaWQgaGF6cHRyX3JlYzo6Y2xlYXIoKSBub2V4
Y2VwdCB7Ci0gIERFQlVHX1BSSU5UKHRoaXMpOwotICBoYXpwdHJfLnN0b3JlKG51bGxwdHIsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotfQotCi1pbmxpbmUgYm9vbCBoYXpwdHJfcmVjOjpp
c0FjdGl2ZSgpIG5vZXhjZXB0IHsKLSAgcmV0dXJuIGFjdGl2ZV8ubG9hZChzdGQ6Om1lbW9yeV9v
cmRlcl9hY3F1aXJlKTsKLX0KLQotaW5saW5lIGJvb2wgaGF6cHRyX3JlYzo6dHJ5QWNxdWlyZSgp
IG5vZXhjZXB0IHsKLSAgYm9vbCBhY3RpdmUgPSBpc0FjdGl2ZSgpOwotICBpZiAoIWFjdGl2ZSAm
JgotICAgICAgYWN0aXZlXy5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZygKLSAgICAgICAgICBhY3Rp
dmUsIHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGF4ZWQpKSB7Ci0gICAgREVCVUdfUFJJTlQodGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0K
LSAgcmV0dXJuIGZhbHNlOwotfQotCi1pbmxpbmUgdm9pZCBoYXpwdHJfcmVjOjpyZWxlYXNlKCkg
bm9leGNlcHQgewotICBERUJVR19QUklOVCh0aGlzKTsKLSAgYWN0aXZlXy5zdG9yZShmYWxzZSwg
c3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci19Ci0KLS8qKiBoYXpwdHJfb2JqICovCi0KLWlu
bGluZSBjb25zdCB2b2lkKiBoYXpwdHJfb2JqOjpnZXRPYmpQdHIoKSBjb25zdCB7Ci0gIERFQlVH
X1BSSU5UKHRoaXMpOwotICByZXR1cm4gdGhpczsKLX0KLQotLyoqIGhhenB0cl9kb21haW4gKi8K
LQotaW5saW5lIGhhenB0cl9kb21haW46On5oYXpwdHJfZG9tYWluKCkgewotICBERUJVR19QUklO
VCh0aGlzKTsKLSAgeyAvKiByZWNsYWltIGFsbCByZW1haW5pbmcgcmV0aXJlZCBvYmplY3RzICov
Ci0gICAgaGF6cHRyX29iaiogbmV4dDsKLSAgICBhdXRvIHJldGlyZWQgPSByZXRpcmVkXy5leGNo
YW5nZShudWxscHRyKTsKLSAgICB3aGlsZSAocmV0aXJlZCkgewotICAgICAgZm9yIChhdXRvIHAg
PSByZXRpcmVkOyBwOyBwID0gbmV4dCkgewotICAgICAgICBuZXh0ID0gcC0+bmV4dF87Ci0gICAg
ICAgICgqKHAtPnJlY2xhaW1fKSkocCk7Ci0gICAgICB9Ci0gICAgICByZXRpcmVkID0gcmV0aXJl
ZF8uZXhjaGFuZ2UobnVsbHB0cik7Ci0gICAgfQotICB9Ci0gIHsgLyogZnJlZSBhbGwgaGF6cHRy
X3JlYy1zICovCi0gICAgaGF6cHRyX3JlYyogbmV4dDsKLSAgICBmb3IgKGF1dG8gcCA9IGhhenB0
cnNfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7IHA7IHAgPSBuZXh0KSB7Ci0gICAg
ICBuZXh0ID0gcC0+bmV4dF87Ci0gICAgICBEQ0hFQ0soIXAtPmlzQWN0aXZlKCkpOwotICAgICAg
bXJfLT5kZWFsbG9jYXRlKHN0YXRpY19jYXN0PHZvaWQqPihwKSwgc2l6ZW9mKGhhenB0cl9yZWMp
KTsKLSAgICB9Ci0gIH0KLX0KLQotRk9MTFlfQUxXQVlTX0lOTElORSBoYXpwdHJfcmVjKiBoYXpw
dHJfZG9tYWluOjpoYXpwdHJBY3F1aXJlKCkgewotICBpZiAoSEFaUFRSX1RDICYmIChIQVpQVFJf
T05FX0RPTUFJTiB8fCB0aGlzID09ICZkZWZhdWx0X2hhenB0cl9kb21haW4oKSkpIHsKLSAgICBh
dXRvIGhwcmVjID0gaGF6cHRyX3RjKCkuZ2V0KCk7Ci0gICAgaWYgKGhwcmVjKSB7Ci0gICAgICBy
ZXR1cm4gaHByZWM7Ci0gICAgfQotICB9Ci0gIGhhenB0cl9yZWMqIHA7Ci0gIGhhenB0cl9yZWMq
IG5leHQ7Ci0gIGZvciAocCA9IGhhenB0cnNfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWly
ZSk7IHA7IHAgPSBuZXh0KSB7Ci0gICAgbmV4dCA9IHAtPm5leHRfOwotICAgIGlmIChwLT50cnlB
Y3F1aXJlKCkpIHsKLSAgICAgIHJldHVybiBwOwotICAgIH0KLSAgfQotICBwID0gc3RhdGljX2Nh
c3Q8aGF6cHRyX3JlYyo+KG1yXy0+YWxsb2NhdGUoc2l6ZW9mKGhhenB0cl9yZWMpKSk7Ci0gIGlm
IChwID09IG51bGxwdHIpIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotICBwLT5hY3RpdmVf
LnN0b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICBwLT5uZXh0XyA9IGhh
enB0cnNfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7Ci0gIHdoaWxlICghaGF6cHRy
c18uY29tcGFyZV9leGNoYW5nZV93ZWFrKAotICAgICAgcC0+bmV4dF8sIHAsIHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGVhc2UsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKQotICAgIC8qIGtlZXAg
dHJ5aW5nICovOwotICBhdXRvIGhjb3VudCA9IGhjb3VudF8uZmV0Y2hfYWRkKDEpOwotICBERUJV
R19QUklOVCh0aGlzIDw8ICIgIiA8PCBwIDw8ICIgIiA8PCBzaXplb2YoaGF6cHRyX3JlYykgPDwg
IiAiIDw8IGhjb3VudCk7Ci0gIHJldHVybiBwOwotfQotCi1GT0xMWV9BTFdBWVNfSU5MSU5FIHZv
aWQgaGF6cHRyX2RvbWFpbjo6aGF6cHRyUmVsZWFzZShoYXpwdHJfcmVjKiBwKSBub2V4Y2VwdCB7
Ci0gIGlmIChIQVpQVFJfVEMgJiYgKEhBWlBUUl9PTkVfRE9NQUlOIHx8IHRoaXMgPT0gJmRlZmF1
bHRfaGF6cHRyX2RvbWFpbigpKSAmJgotICAgICAgaGF6cHRyX3RjKCkucHV0KHApKSB7Ci0gICAg
cmV0dXJuOwotICB9Ci0gIERFQlVHX1BSSU5UKHRoaXMgPDwgIiAiIDw8IHApOwotICBwLT5yZWxl
YXNlKCk7Ci19Ci0KLWlubGluZSBpbnQKLWhhenB0cl9kb21haW46OnB1c2hSZXRpcmVkKGhhenB0
cl9vYmoqIGhlYWQsIGhhenB0cl9vYmoqIHRhaWwsIGludCBjb3VudCkgewotICAvKioqIEZ1bGwg
ZmVuY2UgKioqLyBoYXpwdHJfbWI6OmxpZ2h0KCk7Ci0gIHRhaWwtPm5leHRfID0gcmV0aXJlZF8u
bG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKLSAgd2hpbGUgKCFyZXRpcmVkXy5jb21w
YXJlX2V4Y2hhbmdlX3dlYWsoCi0gICAgICB0YWlsLT5uZXh0XywKLSAgICAgIGhlYWQsCi0gICAg
ICBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlLAotICAgICAgc3RkOjptZW1vcnlfb3JkZXJfYWNx
dWlyZSkpIHsKLSAgfQotICByZXR1cm4gcmNvdW50Xy5mZXRjaF9hZGQoY291bnQpICsgY291bnQ7
Ci19Ci0KLWlubGluZSBib29sIGhhenB0cl9kb21haW46OnJlYWNoZWRUaHJlc2hvbGQoaW50IHJj
b3VudCkgewotICByZXR1cm4gKAotICAgICAgcmNvdW50ID49IEhBWlBUUl9TQ0FOX1RIUkVTSE9M
RCAmJgotICAgICAgcmNvdW50ID49IEhBWlBUUl9TQ0FOX01VTFQgKiBoY291bnRfLmxvYWQoc3Rk
OjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpOwotfQotCi1pbmxpbmUgdm9pZCBoYXpwdHJfZG9tYWlu
OjpvYmpSZXRpcmUoaGF6cHRyX29iaiogcCkgewotICBhdXRvIHJjb3VudCA9IHB1c2hSZXRpcmVk
KHAsIHAsIDEpOwotICBpZiAocmVhY2hlZFRocmVzaG9sZChyY291bnQpKSB7Ci0gICAgdHJ5QnVs
a1JlY2xhaW0oKTsKLSAgfQotfQotCi1pbmxpbmUgdm9pZCBoYXpwdHJfZG9tYWluOjp0cnlCdWxr
UmVjbGFpbSgpIHsKLSAgREVCVUdfUFJJTlQodGhpcyk7Ci0gIGRvIHsKLSAgICBhdXRvIGhjb3Vu
dCA9IGhjb3VudF8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKLSAgICBhdXRvIHJj
b3VudCA9IHJjb3VudF8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKLSAgICBpZiAo
cmNvdW50IDwgSEFaUFRSX1NDQU5fVEhSRVNIT0xEIHx8IHJjb3VudCA8IEhBWlBUUl9TQ0FOX01V
TFQgKiBoY291bnQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHJjb3VudF8uY29t
cGFyZV9leGNoYW5nZV93ZWFrKAotICAgICAgICAgICAgcmNvdW50LCAwLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxlYXNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSkgewotICAgICAgYnJlYWs7
Ci0gICAgfQotICB9IHdoaWxlICh0cnVlKTsKLSAgYnVsa1JlY2xhaW0oKTsKLX0KLQotaW5saW5l
IHZvaWQgaGF6cHRyX2RvbWFpbjo6YnVsa1JlY2xhaW0oKSB7Ci0gIERFQlVHX1BSSU5UKHRoaXMp
OwotICAvKioqIEZ1bGwgZmVuY2UgKioqLyBoYXpwdHJfbWI6OmhlYXZ5KCk7Ci0gIGF1dG8gcCA9
IHJldGlyZWRfLmV4Y2hhbmdlKG51bGxwdHIsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwot
ICBhdXRvIGggPSBoYXpwdHJzXy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwotICBz
dGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3Qgdm9pZCo+IGhzOyAvLyBUT0RPIGxvY2stZnJlZSBhbHRl
cm5hdGl2ZQotICBmb3IgKDsgaDsgaCA9IGgtPm5leHRfKSB7Ci0gICAgaHMuaW5zZXJ0KGgtPmdl
dCgpKTsKLSAgfQotICBpbnQgcmNvdW50ID0gMDsKLSAgaGF6cHRyX29iaiogcmV0aXJlZCA9IG51
bGxwdHI7Ci0gIGhhenB0cl9vYmoqIHRhaWwgPSBudWxscHRyOwotICBoYXpwdHJfb2JqKiBuZXh0
OwotICBmb3IgKDsgcDsgcCA9IG5leHQpIHsKLSAgICBuZXh0ID0gcC0+bmV4dF87Ci0gICAgaWYg
KGhzLmNvdW50KHAtPmdldE9ialB0cigpKSA9PSAwKSB7Ci0gICAgICBERUJVR19QUklOVCh0aGlz
IDw8ICIgIiA8PCBwIDw8ICIgIiA8PCBwLT5yZWNsYWltXyk7Ci0gICAgICAoKihwLT5yZWNsYWlt
XykpKHApOwotICAgIH0gZWxzZSB7Ci0gICAgICBwLT5uZXh0XyA9IHJldGlyZWQ7Ci0gICAgICBy
ZXRpcmVkID0gcDsKLSAgICAgIGlmICh0YWlsID09IG51bGxwdHIpIHsKLSAgICAgICAgdGFpbCA9
IHA7Ci0gICAgICB9Ci0gICAgICArK3Jjb3VudDsKLSAgICB9Ci0gIH0KLSAgaWYgKHRhaWwpIHsK
LSAgICBwdXNoUmV0aXJlZChyZXRpcmVkLCB0YWlsLCByY291bnQpOwotICB9Ci19Ci0KLS8qKiBo
YXpwdHJfc3RhdHMgKi8KLQotY2xhc3MgaGF6cHRyX3N0YXRzIHsKLSBwdWJsaWM6Ci0gIH5oYXpw
dHJfc3RhdHMoKTsKLSAgdm9pZCBsaWdodCgpOwotICB2b2lkIGhlYXZ5KCk7Ci0gIHZvaWQgc2Vx
X2NzdCgpOwotCi0gcHJpdmF0ZToKLSAgc3RkOjphdG9taWM8dWludDY0X3Q+IGxpZ2h0X3swfTsK
LSAgc3RkOjphdG9taWM8dWludDY0X3Q+IGhlYXZ5X3swfTsKLSAgc3RkOjphdG9taWM8dWludDY0
X3Q+IHNlcV9jc3RfezB9OwotfTsKLQotaW5saW5lIGhhenB0cl9zdGF0czo6fmhhenB0cl9zdGF0
cygpIHsKLSAgREVCVUdfUFJJTlQodGhpcyA8PCAiIGxpZ2h0ICIgPDwgbGlnaHRfLmxvYWQoKSk7
Ci0gIERFQlVHX1BSSU5UKHRoaXMgPDwgIiBoZWF2eSAiIDw8IGhlYXZ5Xy5sb2FkKCkpOwotICBE
RUJVR19QUklOVCh0aGlzIDw8ICIgc2VxX2NzdCAiIDw8IHNlcV9jc3RfLmxvYWQoKSk7Ci19Ci0K
LUZPTExZX0FMV0FZU19JTkxJTkUgdm9pZCBoYXpwdHJfc3RhdHM6OmxpZ2h0KCkgewotICBpZiAo
SEFaUFRSX1NUQVRTKSB7Ci0gICAgLyogYXRvbWljICovICsrbGlnaHRfOwotICB9Ci19Ci0KLWlu
bGluZSB2b2lkIGhhenB0cl9zdGF0czo6aGVhdnkoKSB7Ci0gIGlmIChIQVpQVFJfU1RBVFMpIHsK
LSAgICAvKiBhdG9taWMgKi8gKytoZWF2eV87Ci0gIH0KLX0KLQotaW5saW5lIHZvaWQgaGF6cHRy
X3N0YXRzOjpzZXFfY3N0KCkgewotICBpZiAoSEFaUFRSX1NUQVRTKSB7Ci0gICAgLyogYXRvbWlj
ICovICsrc2VxX2NzdF87Ci0gIH0KLX0KLQotaW5saW5lIGNsYXNzIGhhenB0cl9zdGF0cyYgaGF6
cHRyX3N0YXRzKCkgewotICBzdGF0aWMgY2xhc3MgaGF6cHRyX3N0YXRzIHN0YXRzXzsKLSAgREVC
VUdfUFJJTlQoJnN0YXRzXyk7Ci0gIHJldHVybiBzdGF0c187Ci19Ci0KLS8qKiBoYXpwdHJfbWIg
Ki8KLQotaW5saW5lIHZvaWQgaGF6cHRyX21iOjpsaWdodCgpIHsKLSAgREVCVUdfUFJJTlQoIiIp
OwotICBpZiAoSEFaUFRSX0FNQikgewotICAgIGZvbGx5Ojphc3ltbWV0cmljTGlnaHRCYXJyaWVy
KCk7Ci0gICAgSU5DX0hBWlBUUl9TVEFUUyhsaWdodCk7Ci0gIH0gZWxzZSB7Ci0gICAgYXRvbWlj
X3RocmVhZF9mZW5jZShzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKLSAgICBJTkNfSEFaUFRS
X1NUQVRTKHNlcV9jc3QpOwotICB9Ci19Ci0KLWlubGluZSB2b2lkIGhhenB0cl9tYjo6aGVhdnko
KSB7Ci0gIERFQlVHX1BSSU5UKCIiKTsKLSAgaWYgKEhBWlBUUl9BTUIpIHsKLSAgICBmb2xseTo6
YXN5bW1ldHJpY0hlYXZ5QmFycmllcihBTUJGbGFnczo6RVhQRURJVEVEKTsKLSAgICBJTkNfSEFa
UFRSX1NUQVRTKGhlYXZ5KTsKLSAgfSBlbHNlIHsKLSAgICBhdG9taWNfdGhyZWFkX2ZlbmNlKHN0
ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpOwotICAgIElOQ19IQVpQVFJfU1RBVFMoc2VxX2NzdCk7
Ci0gIH0KLX0KLQotLyoqIGhhenB0cl90YyAtIGZ1bmN0aW9ucyAqLwotCi1pbmxpbmUgdm9pZCBo
YXpwdHJfdGNfZW50cnk6OmZpbGwoaGF6cHRyX3JlYyogaHByZWMpIHsKLSAgaHByZWNfID0gaHBy
ZWM7Ci0gIERFQlVHX1BSSU5UKHRoaXMgPDwgIiAiIDw8IGhwcmVjKTsKLX0KLQotaW5saW5lIGhh
enB0cl9yZWMqIGhhenB0cl90Y19lbnRyeTo6Z2V0KCkgewotICBhdXRvIGhwcmVjID0gaHByZWNf
OwotICBocHJlY18gPSBudWxscHRyOwotICBERUJVR19QUklOVCh0aGlzIDw8ICIgIiA8PCBocHJl
Yyk7Ci0gIHJldHVybiBocHJlYzsKLX0KLQotaW5saW5lIHZvaWQgaGF6cHRyX3RjX2VudHJ5Ojpl
dmljdCgpIHsKLSAgYXV0byBocHJlYyA9IGhwcmVjXzsKLSAgaHByZWNfID0gbnVsbHB0cjsKLSAg
aHByZWMtPnJlbGVhc2UoKTsKLSAgREVCVUdfUFJJTlQodGhpcyA8PCAiICIgPDwgaHByZWMpOwot
fQotCi1pbmxpbmUgaGF6cHRyX3RjOjpoYXpwdHJfdGMoKSB7Ci0gIERFQlVHX1BSSU5UKHRoaXMp
OwotfQotCi1pbmxpbmUgaGF6cHRyX3RjOjp+aGF6cHRyX3RjKCkgewotICBERUJVR19QUklOVCh0
aGlzKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudF87ICsraSkgewotICAgIHRjX1tpXS5l
dmljdCgpOwotICB9Ci19Ci0KLWlubGluZSBoYXpwdHJfcmVjKiBoYXpwdHJfdGM6OmdldCgpIHsK
LSAgaWYgKGNvdW50XyA+IDApIHsKLSAgICBhdXRvIGhwcmVjID0gdGNfWy0tY291bnRfXS5nZXQo
KTsKLSAgICBERUJVR19QUklOVCh0aGlzIDw8ICIgIiA8PCBocHJlYyk7Ci0gICAgcmV0dXJuIGhw
cmVjOwotICB9Ci0gIERFQlVHX1BSSU5UKHRoaXMgPDwgIiBudWxscHRyIik7Ci0gIHJldHVybiBu
dWxscHRyOwotfQotCi1pbmxpbmUgYm9vbCBoYXpwdHJfdGM6OnB1dChoYXpwdHJfcmVjKiBocHJl
YykgewotICBpZiAoY291bnRfIDwgSEFaUFRSX1RDX1NJWkUpIHsKLSAgICB0Y19bY291bnRfKytd
LmZpbGwoaHByZWMpOwotICAgIERFQlVHX1BSSU5UKHRoaXMgPDwgIiAiIDw8IGNvdW50XyAtIDEp
OwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotRk9MTFlfQUxX
QVlTX0lOTElORSBjbGFzcyBoYXpwdHJfdGMmIGhhenB0cl90YygpIHsKLSAgc3RhdGljIHRocmVh
ZF9sb2NhbCBjbGFzcyBoYXpwdHJfdGMgdGM7Ci0gIERFQlVHX1BSSU5UKCZ0Yyk7Ci0gIHJldHVy
biB0YzsKLX0KLQotLyoqIGhhenB0cl9wcml2IC0gZnVuY3Rpb25zICovCi0KLWlubGluZSBoYXpw
dHJfcHJpdjo6aGF6cHRyX3ByaXYoKSB7Ci0gIERFQlVHX1BSSU5UKHRoaXMpOwotfQotCi1pbmxp
bmUgaGF6cHRyX3ByaXY6On5oYXpwdHJfcHJpdigpIHsKLSAgREVCVUdfUFJJTlQodGhpcyk7Ci0g
IERDSEVDSyhhY3RpdmVfKTsKLSAgYWN0aXZlXyA9IGZhbHNlOwotICBpZiAodGFpbF8pIHsKLSAg
ICBwdXNoQWxsVG9Eb21haW4oKTsKLSAgfQotfQotCi1pbmxpbmUgdm9pZCBoYXpwdHJfcHJpdjo6
cHVzaChoYXpwdHJfb2JqKiBvYmopIHsKLSAgb2JqLT5uZXh0XyA9IG51bGxwdHI7Ci0gIGlmICh0
YWlsXykgewotICAgIHRhaWxfLT5uZXh0XyA9IG9iajsKLSAgfSBlbHNlIHsKLSAgICBpZiAoIWFj
dGl2ZV8pIHsKLSAgICAgIGRlZmF1bHRfaGF6cHRyX2RvbWFpbigpLm9ialJldGlyZShvYmopOwot
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBoZWFkXyA9IG9iajsKLSAgfQotICB0YWlsXyA9IG9i
ajsKLSAgKytyY291bnRfOwotICBpZiAoZG9tYWluXy0+cmVhY2hlZFRocmVzaG9sZChyY291bnRf
KSkgewotICAgIHB1c2hBbGxUb0RvbWFpbigpOwotICB9Ci19Ci0KLWlubGluZSB2b2lkIGhhenB0
cl9wcml2OjpwdXNoQWxsVG9Eb21haW4oKSB7Ci0gIGRvbWFpbl8tPnB1c2hSZXRpcmVkKGhlYWRf
LCB0YWlsXywgcmNvdW50Xyk7Ci0gIGhlYWRfID0gbnVsbHB0cjsKLSAgdGFpbF8gPSBudWxscHRy
OwotICByY291bnRfID0gMDsKLSAgZG9tYWluXy0+dHJ5QnVsa1JlY2xhaW0oKTsKLX0KLQotaW5s
aW5lIGNsYXNzIGhhenB0cl9wcml2JiBoYXpwdHJfcHJpdigpIHsKLSAgc3RhdGljIHRocmVhZF9s
b2NhbCBjbGFzcyBoYXpwdHJfcHJpdiBwcml2OwotICBERUJVR19QUklOVCgmcHJpdik7Ci0gIHJl
dHVybiBwcml2OwotfQotCi19IC8vIG5hbWVzcGFjZSBmb2xseQotfSAvLyBuYW1lc3BhY2UgaGF6
cHRyCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xs
eS9leHBlcmltZW50YWwvaGF6cHRyL2hhenB0ci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZm9sbHkvZXhwZXJpbWVudGFsL2hhenB0ci9oYXpwdHIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxZmRmYWIxNzNkMDAyZmVkMzZlOTQyMTZmYTQ5MDNmYTli
YWU0Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvaGF6cHRy
L2hhenB0ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUg
TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3
LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQg
YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9u
cyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotI3ByYWdtYSBvbmNlCi0jZGVmaW5lIEhBWlBUUl9I
Ci0KLSNpbmNsdWRlIDxhdG9taWM+Ci0KLS8qIFN0YW5kLWluIGZvciBDKysxNyBzdGQ6OnBtcjo6
bWVtb3J5X3Jlc291cmNlICovCi0jaW5jbHVkZSA8Zm9sbHkvZXhwZXJpbWVudGFsL2hhenB0ci9t
ZW1vcnlfcmVzb3VyY2UuaD4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLW5hbWVzcGFjZSBoYXpwdHIg
ewotCi0vKiogaGF6cHRyX3JlYzogUHJpdmF0ZSBjbGFzcyB0aGF0IGNvbnRhaW5zIGhhemFyZCBw
b2ludGVycy4gKi8KLWNsYXNzIGhhenB0cl9yZWM7Ci0KLS8qKiBoYXpwdHJfb2JqOiBQcml2YXRl
IGNsYXNzIGZvciBvYmplY3RzIHByb3RlY3RlZCBieSBoYXphcmQgcG9pbnRlcnMuICovCi1jbGFz
cyBoYXpwdHJfb2JqOwotCi0vKiogaGF6cHRyX29ial9iYXNlOiBCYXNlIHRlbXBsYXRlIGZvciBv
YmplY3RzIHByb3RlY3RlZCBieSBoYXphcmQgcG9pbnRlcnMuICovCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRGVsZXRlcj4KLWNsYXNzIGhhenB0cl9vYmpfYmFzZTsKLQotLyoqIGhh
enB0cl9kb21haW46IENsYXNzIG9mIGhhemFyZCBwb2ludGVyIGRvbWFpbnMuIEVhY2ggZG9tYWlu
IG1hbmFnZXMgYSBzZXQKLSAqICBvZiBoYXphcmQgcG9pbnRlcnMgYW5kIGEgc2V0IG9mIHJldGly
ZWQgb2JqZWN0cy4gKi8KLWNsYXNzIGhhenB0cl9kb21haW4gewotIHB1YmxpYzoKLSAgY29uc3Rl
eHByIGV4cGxpY2l0IGhhenB0cl9kb21haW4oCi0gICAgICBtZW1vcnlfcmVzb3VyY2UqID0gZ2V0
X2RlZmF1bHRfcmVzb3VyY2UoKSkgbm9leGNlcHQ7Ci0gIH5oYXpwdHJfZG9tYWluKCk7Ci0KLSAg
aGF6cHRyX2RvbWFpbihjb25zdCBoYXpwdHJfZG9tYWluJikgPSBkZWxldGU7Ci0gIGhhenB0cl9k
b21haW4oaGF6cHRyX2RvbWFpbiYmKSA9IGRlbGV0ZTsKLSAgaGF6cHRyX2RvbWFpbiYgb3BlcmF0
b3I9KGNvbnN0IGhhenB0cl9kb21haW4mKSA9IGRlbGV0ZTsKLSAgaGF6cHRyX2RvbWFpbiYgb3Bl
cmF0b3I9KGhhenB0cl9kb21haW4mJikgPSBkZWxldGU7Ci0KLSBwcml2YXRlOgotICBmcmllbmQg
Y2xhc3MgaGF6cHRyX2hvbGRlcjsKLSAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZT4KLSAg
ZnJpZW5kIGNsYXNzIGhhenB0cl9vYmpfYmFzZTsKLSAgZnJpZW5kIGNsYXNzIGhhenB0cl9wcml2
OwotCi0gIG1lbW9yeV9yZXNvdXJjZSogbXJfOwotICBzdGQ6OmF0b21pYzxoYXpwdHJfcmVjKj4g
aGF6cHRyc18gPSB7bnVsbHB0cn07Ci0gIHN0ZDo6YXRvbWljPGhhenB0cl9vYmoqPiByZXRpcmVk
XyA9IHtudWxscHRyfTsKLSAgc3RkOjphdG9taWM8aW50PiBoY291bnRfID0gezB9OwotICBzdGQ6
OmF0b21pYzxpbnQ+IHJjb3VudF8gPSB7MH07Ci0KLSAgdm9pZCBvYmpSZXRpcmUoaGF6cHRyX29i
aiopOwotICBoYXpwdHJfcmVjKiBoYXpwdHJBY3F1aXJlKCk7Ci0gIHZvaWQgaGF6cHRyUmVsZWFz
ZShoYXpwdHJfcmVjKikgbm9leGNlcHQ7Ci0gIGludCBwdXNoUmV0aXJlZChoYXpwdHJfb2JqKiBo
ZWFkLCBoYXpwdHJfb2JqKiB0YWlsLCBpbnQgY291bnQpOwotICBib29sIHJlYWNoZWRUaHJlc2hv
bGQoaW50IHJjb3VudCk7Ci0gIHZvaWQgdHJ5QnVsa1JlY2xhaW0oKTsKLSAgdm9pZCBidWxrUmVj
bGFpbSgpOwotfTsKLQotLyoqIEdldCB0aGUgZGVmYXVsdCBoYXpwdHJfZG9tYWluICovCi1oYXpw
dHJfZG9tYWluJiBkZWZhdWx0X2hhenB0cl9kb21haW4oKTsKLQotLyoqIERlZmluaXRpb24gb2Yg
aGF6cHRyX29iaiAqLwotY2xhc3MgaGF6cHRyX29iaiB7Ci0gIGZyaWVuZCBjbGFzcyBoYXpwdHJf
ZG9tYWluOwotICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lPgotICBmcmllbmQgY2xhc3Mg
aGF6cHRyX29ial9iYXNlOwotICBmcmllbmQgY2xhc3MgaGF6cHRyX3ByaXY7Ci0KLSAgdm9pZCAo
KnJlY2xhaW1fKShoYXpwdHJfb2JqKik7Ci0gIGhhenB0cl9vYmoqIG5leHRfOwotICBjb25zdCB2
b2lkKiBnZXRPYmpQdHIoKSBjb25zdDsKLX07Ci0KLS8qKiBEZWZpbml0aW9uIG9mIGhhenB0cl9v
YmpfYmFzZSAqLwotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEQgPSBzdGQ6OmRlZmF1
bHRfZGVsZXRlPFQ+PgotY2xhc3MgaGF6cHRyX29ial9iYXNlIDogcHVibGljIGhhenB0cl9vYmog
ewotIHB1YmxpYzoKLSAgLyogUmV0aXJlIGEgcmVtb3ZlZCBvYmplY3QgYW5kIHBhc3MgdGhlIHJl
c3BvbnNpYmlsaXR5IGZvcgotICAgKiByZWNsYWltaW5nIGl0IHRvIHRoZSBoYXpwdHIgbGlicmFy
eSAqLwotICB2b2lkIHJldGlyZShoYXpwdHJfZG9tYWluJiBkb21haW4gPSBkZWZhdWx0X2hhenB0
cl9kb21haW4oKSwgRCByZWNsYWltID0ge30pOwotCi0gcHJpdmF0ZToKLSAgRCBkZWxldGVyXzsK
LX07Ci0KLS8qKiBoYXpwdHJfaG9sZGVyOiBDbGFzcyBmb3IgYXV0b21hdGljIGFjcXVpc2l0aW9u
IGFuZCByZWxlYXNlIG9mCi0gKiAgaGF6YXJkIHBvaW50ZXJzLCBhbmQgaW50ZXJmYWNlIGZvciBo
YXphcmQgcG9pbnRlciBvcGVyYXRpb25zLiAqLwotY2xhc3MgaGF6cHRyX2hvbGRlciB7Ci0gcHVi
bGljOgotICAvKiBDb25zdHJ1Y3RvciBhdXRvbWF0aWNhbGx5IGFjcXVpcmVzIGEgaGF6YXJkIHBv
aW50ZXIuICovCi0gIGV4cGxpY2l0IGhhenB0cl9ob2xkZXIoaGF6cHRyX2RvbWFpbiYgZG9tYWlu
ID0gZGVmYXVsdF9oYXpwdHJfZG9tYWluKCkpOwotICAvKiBDb25zdHJ1Y3QgYW4gZW1wdHkgaGF6
cHRyX2hvbGRlci4gKi8KLSAgLy8gTm90ZTogVGhpcyBkaXZlcmdlcyBmcm9tIHRoZSBwcm9wb3Nh
bCBpbiBQMDIzM1I0Ci0gIGV4cGxpY2l0IGhhenB0cl9ob2xkZXIoc3RkOjpudWxscHRyX3QpOwot
Ci0gIC8qIERlc3RydWN0b3IgYXV0b21hdGljYWxseSBjbGVhcnMgYW5kIHJlbGVhc2VzIHRoZSBv
d25lZCBoYXphcmQgcG9pbnRlci4gKi8KLSAgfmhhenB0cl9ob2xkZXIoKTsKLQotICBoYXpwdHJf
aG9sZGVyKGNvbnN0IGhhenB0cl9ob2xkZXImKSA9IGRlbGV0ZTsKLSAgaGF6cHRyX2hvbGRlciYg
b3BlcmF0b3I9KGNvbnN0IGhhenB0cl9ob2xkZXImKSA9IGRlbGV0ZTsKLSAgLy8gTm90ZTogVGhp
cyBkaXZlcmdlcyBmcm9tIHRoZSBwcm9wb3NhbCBpbiBQMDIzM1I0IHdoaWNoIGRpc2FsbG93cwot
ICAvLyBtb3ZlIGNvbnN0cnVjdG9yIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yLgotICBoYXpwdHJf
aG9sZGVyKGhhenB0cl9ob2xkZXImJikgbm9leGNlcHQ7Ci0gIGhhenB0cl9ob2xkZXImIG9wZXJh
dG9yPShoYXpwdHJfaG9sZGVyJiYpIG5vZXhjZXB0OwotCi0gIC8qKiBIYXphcmQgcG9pbnRlciBv
cGVyYXRpb25zICovCi0gIC8qIFJldHVybnMgYSBwcm90ZWN0ZWQgcG9pbnRlciBmcm9tIHRoZSBz
b3VyY2UgKi8KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIFQqIGdldF9wcm90ZWN0ZWQoY29u
c3Qgc3RkOjphdG9taWM8VCo+JiBzcmMpIG5vZXhjZXB0OwotICAvKiBSZXR1cm5zIGEgcHJvdGVj
dGVkIHBvaW50ZXIgZnJvbSB0aGUgc291cmNlLCBmaWx0ZXJpbmcKLSAgICAgdGhlIHByb3RlY3Rl
ZCBwb2ludGVyIHRocm91Z2ggZnVuY3Rpb24gRnVuYy4gIFVzZWZ1bCBmb3IKLSAgICAgc3RlYWxp
bmcgYml0cyBvZiB0aGUgcG9pbnRlciB3b3JkICovCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBGdW5jPgotICBUKiBnZXRfcHJvdGVjdGVkKGNvbnN0IHN0ZDo6YXRvbWljPFQqPiYg
c3JjLCBGdW5jIGYpIG5vZXhjZXB0OwotICAvKiBSZXR1cm4gdHJ1ZSBpZiBzdWNjZXNzZnVsIGlu
IHByb3RlY3RpbmcgcHRyIGlmIHNyYyA9PSBwdHIgYWZ0ZXIKLSAgICogc2V0dGluZyB0aGUgaGF6
YXJkIHBvaW50ZXIuICBPdGhlcndpc2Ugc2V0cyBwdHIgdG8gc3JjLiAqLwotICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KLSAgYm9vbCB0cnlfcHJvdGVjdChUKiYgcHRyLCBjb25zdCBzdGQ6OmF0b21p
YzxUKj4mIHNyYykgbm9leGNlcHQ7Ci0gIC8qIFJldHVybiB0cnVlIGlmIHN1Y2Nlc3NmdWwgaW4g
cHJvdGVjdGluZyBwdHIgaWYgc3JjID09IHB0ciBhZnRlcgotICAgKiBzZXR0aW5nIHRoZSBoYXph
cmQgcG9pbnRlciwgZmlsdGVyaW5nIHRoZSBwb2ludGVyIHRocm91Z2ggRnVuYy4KLSAgICogT3Ro
ZXJ3aXNlIHNldHMgcHRyIHRvIHNyYy4gKi8KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEZ1bmM+Ci0gIGJvb2wgdHJ5X3Byb3RlY3QoVComIHB0ciwgY29uc3Qgc3RkOjphdG9taWM8
VCo+JiBzcmMsIEZ1bmMgZikgbm9leGNlcHQ7Ci0gIC8qIFNldCB0aGUgaGF6YXJkIHBvaW50ZXIg
dG8gcHRyICovCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICB2b2lkIHJlc2V0KGNvbnN0IFQq
IHB0cikgbm9leGNlcHQ7Ci0gIC8qIFNldCB0aGUgaGF6YXJkIHBvaW50ZXIgdG8gbnVsbHB0ciAq
LwotICB2b2lkIHJlc2V0KHN0ZDo6bnVsbHB0cl90ID0gbnVsbHB0cikgbm9leGNlcHQ7Ci0KLSAg
LyogU3dhcCBvd25lcnNoaXAgb2YgaGF6YXJkIHBvaW50ZXJzIGJldHdlZW4gaGF6cHRyX2hvbGRl
ci1zLiAqLwotICAvKiBOb3RlOiBUaGUgb3duZWQgaGF6YXJkIHBvaW50ZXJzIHJlbWFpbiB1bm1v
ZGlmaWVkIGR1cmluZyB0aGUgc3dhcAotICAgKiBhbmQgY29udGludWUgdG8gcHJvdGVjdCB0aGUg
cmVzcGVjdGl2ZSBvYmplY3RzIHRoYXQgdGhleSB3ZXJlCi0gICAqIHByb3RlY3RpbmcgYmVmb3Jl
IHRoZSBzd2FwLCBpZiBhbnkuICovCi0gIHZvaWQgc3dhcChoYXpwdHJfaG9sZGVyJikgbm9leGNl
cHQ7Ci0KLSBwcml2YXRlOgotICBoYXpwdHJfZG9tYWluKiBkb21haW5fOwotICBoYXpwdHJfcmVj
KiBoYXpwdHJfOwotfTsKLQotdm9pZCBzd2FwKGhhenB0cl9ob2xkZXImLCBoYXpwdHJfaG9sZGVy
Jikgbm9leGNlcHQ7Ci0KLX0gLy8gbmFtZXNwYWNlIGhhenB0cgotfSAvLyBuYW1lc3BhY2UgZm9s
bHkKLQotI2luY2x1ZGUgImhhenB0ci1pbXBsLmgiCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvaGF6cHRyL21lbW9yeV9y
ZXNvdXJjZS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZXhw
ZXJpbWVudGFsL2hhenB0ci9tZW1vcnlfcmVzb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYmIwNDlmODc0ZWI2N2E5ZTM4N2QxZTNkZGVjN2UwNWU2NmE0OTNkOS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvaGF6cHRyL21lbW9yeV9yZXNv
dXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAy
MDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
SVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLgotICovCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGZvbGx5L2V4
cGVyaW1lbnRhbC9oYXpwdHIvZGVidWcuaD4KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8v
LyBEaXNjbGFpbWVyOiBUaGlzIGlzIGludGVuZGVkIG9ubHkgYXMgYSBwYXJ0aWFsIHN0YW5kLWlu
IGZvcgotLy8vIHN0ZDo6cG1yOjptZW1vcnlfcmVzb3VyY2UgKEMrKzE3KSBhcyBuZWVkZWQgZm9y
IGRldmVsb3BpbmcgYQotLy8vIGhhenB0ciBwcm90b3R5cGUuCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotI2luY2x1ZGUgPGZvbGx5L1BvcnRhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bWVtb3J5Pgot
Ci1uYW1lc3BhY2UgZm9sbHkgewotbmFtZXNwYWNlIGhhenB0ciB7Ci0KLWNsYXNzIG1lbW9yeV9y
ZXNvdXJjZSB7Ci0gcHVibGljOgotICB2aXJ0dWFsIH5tZW1vcnlfcmVzb3VyY2UoKSA9IGRlZmF1
bHQ7Ci0gIHZpcnR1YWwgdm9pZCogYWxsb2NhdGUoCi0gICAgICBjb25zdCBzaXplX3QgYnl0ZXMs
Ci0gICAgICBjb25zdCBzaXplX3QgYWxpZ25tZW50ID0gZm9sbHk6Om1heF9hbGlnbl92KSA9IDA7
Ci0gIHZpcnR1YWwgdm9pZCBkZWFsbG9jYXRlKAotICAgICAgdm9pZCogcCwKLSAgICAgIGNvbnN0
IHNpemVfdCBieXRlcywKLSAgICAgIGNvbnN0IHNpemVfdCBhbGlnbm1lbnQgPSBmb2xseTo6bWF4
X2FsaWduX3YpID0gMDsKLX07Ci0KLW1lbW9yeV9yZXNvdXJjZSogZ2V0X2RlZmF1bHRfcmVzb3Vy
Y2UoKTsKLXZvaWQgc2V0X2RlZmF1bHRfcmVzb3VyY2UobWVtb3J5X3Jlc291cmNlKik7Ci1tZW1v
cnlfcmVzb3VyY2UqIG5ld19kZWxldGVfcmVzb3VyY2UoKTsKLQotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLS8vLyBJbXBsZW1lbnRhdGlvbgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotaW5s
aW5lIG1lbW9yeV9yZXNvdXJjZSoqIGRlZmF1bHRfbXJfcHRyKCkgewotICAvKiBsaWJyYXJ5LWxv
Y2FsICovIHN0YXRpYyBtZW1vcnlfcmVzb3VyY2UqIGRlZmF1bHRfbXIgPQotICAgICAgbmV3X2Rl
bGV0ZV9yZXNvdXJjZSgpOwotICBERUJVR19QUklOVCgmZGVmYXVsdF9tciA8PCAiICIgPDwgZGVm
YXVsdF9tcik7Ci0gIHJldHVybiAmZGVmYXVsdF9tcjsKLX0KLQotaW5saW5lIG1lbW9yeV9yZXNv
dXJjZSogZ2V0X2RlZmF1bHRfcmVzb3VyY2UoKSB7Ci0gIERFQlVHX1BSSU5UKCIiKTsKLSAgcmV0
dXJuICpkZWZhdWx0X21yX3B0cigpOwotfQotCi1pbmxpbmUgdm9pZCBzZXRfZGVmYXVsdF9yZXNv
dXJjZShtZW1vcnlfcmVzb3VyY2UqIG1yKSB7Ci0gIERFQlVHX1BSSU5UKCIiKTsKLSAgKmRlZmF1
bHRfbXJfcHRyKCkgPSBtcjsKLX0KLQotaW5saW5lIG1lbW9yeV9yZXNvdXJjZSogbmV3X2RlbGV0
ZV9yZXNvdXJjZSgpIHsKLSAgY2xhc3MgbmV3X2RlbGV0ZSA6IHB1YmxpYyBtZW1vcnlfcmVzb3Vy
Y2UgewotICAgcHVibGljOgotICAgIHZvaWQqIGFsbG9jYXRlKAotICAgICAgICBjb25zdCBzaXpl
X3QgYnl0ZXMsCi0gICAgICAgIGNvbnN0IHNpemVfdCBhbGlnbm1lbnQgPSBmb2xseTo6bWF4X2Fs
aWduX3YpIG92ZXJyaWRlIHsKLSAgICAgICh2b2lkKWFsaWdubWVudDsKLSAgICAgIHZvaWQqIHAg
PSBzdGF0aWNfY2FzdDx2b2lkKj4obmV3IGNoYXJbYnl0ZXNdKTsKLSAgICAgIERFQlVHX1BSSU5U
KHRoaXMgPDwgIiAiIDw8IHAgPDwgIiAiIDw8IGJ5dGVzKTsKLSAgICAgIHJldHVybiBwOwotICAg
IH0KLSAgICB2b2lkIGRlYWxsb2NhdGUoCi0gICAgICAgIHZvaWQqIHAsCi0gICAgICAgIGNvbnN0
IHNpemVfdCBieXRlcywKLSAgICAgICAgY29uc3Qgc2l6ZV90IGFsaWdubWVudCA9IGZvbGx5Ojpt
YXhfYWxpZ25fdikgb3ZlcnJpZGUgewotICAgICAgKHZvaWQpYWxpZ25tZW50OwotICAgICAgKHZv
aWQpYnl0ZXM7Ci0gICAgICBERUJVR19QUklOVChwIDw8ICIgIiA8PCBieXRlcyk7Ci0gICAgICBk
ZWxldGVbXSBzdGF0aWNfY2FzdDxjaGFyKj4ocCk7Ci0gICAgfQotICB9OwotICBzdGF0aWMgbmV3
X2RlbGV0ZSBtcjsKLSAgcmV0dXJuICZtcjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgZm9sbHkgewot
fSAvLyBuYW1lc3BhY2UgaGF6cHRyIHsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9sb2dnaW5nL1JFQURNRS5tZCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L2V4cGVyaW1lbnRhbC9sb2dn
aW5nL1JFQURNRS5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNhMDg1ODgyODU3
OGQ3ZTVlMTU5ZWZlMGFjOWM5NTYxZDVmYjY4ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9m
b2xseS9leHBlcmltZW50YWwvbG9nZ2luZy9SRUFETUUubWQKKysrIC9kZXYvbnVsbApAQCAtMSwx
MTkgKzAsMCBAQAotT3ZlcnZpZXcKLS0tLS0tLS0tCi0KLVRoaXMgaXMgYSBmbGV4aWJsZSBsb2dn
aW5nIGxpYnJhcnkgZm9yIEMrKywgdGFyZ2V0ZWQgcHJpbWFyaWx5IGF0IGRlYnVnIGxvZ2dpbmcK
LXN1cHBvcnQuICBJdCBzdXBwb3J0cyBoaWVyYXJjaGljYWwgbG9nIGNhdGVnb3JpZXMgdG8gZWFz
aWx5IGNvbnRyb2wgZGVidWcgbG9nCi1sZXZlbHMuICBJdCBhbHNvIGFpbXMgdG8gaGF2ZSBtaW5p
bWFsIHBlcmZvcm1hbmNlIG92ZXJoZWFkIGZvciBkaXNhYmxlZCBsb2cKLXN0YXRlbWVudHMsIG1h
a2luZyBpdCBwb3NzaWJsZSB0byBrZWVwIGRlYnVnIGxvZyBzdGF0ZW1lbnRzIHRocm91Z2hvdXQg
dGhlIGNvZGUKLWJhc2UsIGV2ZW4gaW4gcGVyZm9ybWFuY2UgY3JpdGljYWwgc2VjdGlvbnMuICBU
aGlzIGFsbG93cyBkZWJ1ZyBsb2cgbWVzc2FnZXMgdG8KLWJlIGVhc2lseSB0dXJuZWQgb24gZm9y
IHBhcnRpY3VsYXIgYXJlYXMgb2YgdGhlIGNvZGUgYXQgcnVudGltZSB3aGVuIG5lY2Vzc2FyeQot
dG8gaGVscCBkZWJ1ZyBhbiBpc3N1ZSwgd2l0aG91dCBoYXZpbmcgdG8gd29ycnkgYWJvdXQgdGhl
IG92ZXJoZWFkIG9mIGxvZwotbWVzc2FnZXMgZHVyaW5nIG5vcm1hbCB1c2UuCi0KLUxvZyBDYXRl
Z29yaWVzCi0tLS0tLS0tLS0tLS0tLQotCi0jIyBMb2cgQ2F0ZWdvcnkgTmFtZXMKLQotQWxsIGxv
ZyBtZXNzYWdlcyBnZXQgbG9nZ2VkIHRvIGEgcGFydGljdWxhciBsb2cgY2F0ZWdvcnkuICBMb2cg
Y2F0ZWdvcnkgbmFtZXMKLWFyZSBoaWVyYXJjaGljYWwsIHNlcGFyYXRlZCBieSBwZXJpb2RzLiAg
Rm9yIGluc3RhbmNlLCBgZm9sbHkuaW9gIGFuZAotYGZvbGx5LmZ1dHVyZXNgIGFyZSBib3RoIHN1
Yi1jYXRlZ29yaWVzIG9mIGBmb2xseWAuICBgZm9sbHkuaW8uYXN5bmNgIGlzIGEKLXN1Yi1jYXRl
Z29yeSBvZiBgZm9sbHkuaW9gLiAgVGhlIHJvb3QgY2F0ZWdvcnkncyBuYW1lIGlzIHRoZSBlbXB0
eSBzdHJpbmcuCi0KLSMjIExvZyBMZXZlbCBDaGVja3MKLQotV2hlbiBhIG1lc3NhZ2UgaXMgbG9n
Z2VkIHRvIGEgZ2l2ZW4gY2F0ZWdvcnksIGFuIGFkbWl0dGFuY2UgY2hlY2sgaXMgcGVyZm9ybWVk
Ci10byBzZWUgaWYgdGhlIGxvZyBtZXNzYWdlIHNob3VsZCBiZSBlbmFibGVkLiAgVGhlIGFkbWl0
dGFuY2UgY2hlY2sgY29tcGFyZXMgdGhlCi1sb2cgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgYWdhaW5z
dCB0aGUgZWZmZWN0aXZlIGxldmVsIG9mIHRoYXQgY2F0ZWdvcnkuCi0KLUJ5IGRlZmF1bHQgdGhl
IGVmZmVjdGl2ZSBsZXZlbCBvZiBhIGNhdGVnb3J5IGlzIHRoZSBtaW5pbXVtIG9mIGl0cyBsZXZl
bCBhbmQKLXRoZSBsZXZlbCBzZXQgZm9yIGFueSBvZiBpdHMgcGFyZW50IGNhdGVnb3JpZXMuICBU
aGlzIG1lYW5zIHRoYXQgd2hlbiB5b3UKLWluY3JlYXNlIHRoZSBsb2cgdmVyYm9zaXR5IGZvciBh
IHBhcnRpY3VsYXIgY2F0ZWdvcnkgeW91IGF1dG9tYXRpY2FsbHkgdHVybiB1cAotdGhlIHZlcmJv
c2l0eSBmb3IgdGhlIGVudGlyZSB0cmVlIG9mIGNoaWxkcmVuIGNhdGVnb3JpZXMgdW5kZXJuZWF0
aCBpdC4KLQotRm9yIGV4YW1wbGUsIHNldHRpbmcgdGhlIGxvZyBsZXZlbCBmb3IgdGhlIGBmb2xs
eWAgY2F0ZWdvcnkgdG8gYFdBUk5gIG1lYW5zCi10aGF0IGxvZyBtZXNzYWdlcyB0byBhbnkgc3Vi
LWNhdGVnb3J5IHVuZGVyIGBmb2xseWAgd2lsbCBiZSBhZG1pdHRlZCBpZiB0aGV5Ci1oYXZlIGEg
bGV2ZWwgb2YgYFdBUk5gIG9yIGhpZ2hlci4gIElmIHRoZSBsZXZlbCBmb3IgYGZvbGx5LmlvYCBp
cyBgREVCVUdgLCB0aGVuCi1tZXNzYWdlcyB0byBhbGwgY2F0ZWdvcmllcyB1bmRlciBgZm9sbHku
aW9gIHdpbGwgYWRtaXQgYERFQlVHYCBhbmQgaGlnaGVyCi1tZXNzYWdlcywgd2hpbGUgdGhlIHJl
c3Qgb2YgdGhlIGNhdGVnb3JpZXMgYGZvbGx5YCB1bmRlciBmb2xseSB3b3VsZCBhZG1pdAotYFdB
Uk5gIGFuZCBoaWdoZXIgbWVzc2FnZXMuCi0KLUhvd2V2ZXIsIHlvdSBjYW4gYWxzbyBjb25maWd1
cmUgc3BlY2lmaWMgbG9nIGNhdGVnb3JpZXMgdG8gdHVybiBvZmYgaW5oZXJpdGFuY2UKLW9mIHRo
ZWlyIHBhcmVudCBsb2cgbGV2ZWxzLiAgVGhpcyBhbGxvd3MgeW91IHRvIGluY3JlYXNlIHRoZSBs
b2cgdmVyYm9zaXR5IGZvcgotYSBsYXJnZSBjYXRlZ29yeSB0cmVlLCBidXQgc3RpbGwgdXNlIGEg
bG93ZXIgdmVyYm9zaXR5IGZvciBzcGVjaWZpYwotc3ViLWNhdGVnb3JpZXMuICBGb3IgZXhhbXBs
ZSwgaWYgdGhlIGBmb2xseWAgY2F0ZWdvcnkncyBsZXZlbCBpcyBzZXQgdG8KLWBERUJVR2AsIGJ1
dCB5b3UgZGlzYWJsZSBsZXZlbCBpbmhlcml0YW5jZSBmb3IgYGZvbGx5LmZ1dHVyZXNgLCB0aGUK
LWBmb2xseS5mdXR1cmVzYCBsZXZlbCB3aWxsIG5vdCB1c2UgaXQncyBwYXJlbnQncyBgREVCVUdg
IGxvZyBsZXZlbCwgYW5kIHdpbGwKLW9ubHkgY29uc2lkZXIgdGhlIGxldmVsIHNldCBsb2NhbGx5
IG9uIHRoaXMgY2F0ZWdvcnkuCi0KLU9uY2UgYSBsb2cgbWVzc2FnZSBpcyBhZG1pdHRlZCwgaXQg
aXMgcHJvY2Vzc2VkIGJ5IHRoZSBgTG9nQ2F0ZWdvcnlgIHdoZXJlIGl0Ci13YXMgbG9nZ2VkLCBh
cyB3ZWxsIGFzIGJ5IGFsbCBwYXJlbnQgbG9nIGNhdGVnb3JpZXMsIHVwIHRvIHRoZSByb290Lgot
Ci0jIyBMb2cgSGFuZGxlcnMKLQotYExvZ0hhbmRsZXJgIG9iamVjdHMgY2FuIGJlIGF0dGFjaGVk
IHRvIGEgbG9nIGNhdGVnb3J5LiAgV2hlbiBhIGxvZyBtZXNzYWdlIGlzCi1yZWNlaXZlZCBhdCBh
IGdpdmVuIGxvZyBjYXRlZ29yeSBpdCB3aWxsIGJlIGdpdmVuIHRvIGFsbCBgTG9nSGFuZGxlcmAg
b2JqZWN0cwotYXR0YWNoZWQgdG8gdGhhdCBjYXRlZ29yeS4KLQotYExvZ0hhbmRsZXJgIG9iamVj
dHMgY2FuIHBlcmZvcm0gYXJiaXRyYXJ5IGFjdGlvbnMgYmFzZWQgb24gdGhlIGxvZyBtZXNzYWdl
LgotVGhleSBtYXkgd3JpdGUgdGhlIG1lc3NhZ2UgdG8gYSBsb2NhbCBmaWxlLCBwcmludCBpdCB0
byBgc3RkZXJyYCBvciBgc3Rkb3V0YCwKLW9yIHNlbmQgdGhlIG1lc3NhZ2UgdG8gYSByZW1vdGUg
bG9nZ2luZyBzZXJ2aWNlLgotCi1gTG9nSGFuZGxlcnNgIG1heSBwZXJmb3JtIHRoZWlyIG93biBh
ZGRpdGlvbmFsIGxvZyBsZXZlbCBjaGVjaywgYnV0IGJ5IGRlZmF1bHQKLWBMb2dIYW5kbGVyc2Ag
cHJvY2VzcyBhbGwgbWVzc2FnZXMgcmVjZWl2ZWQgYXQgdGhlIGNhdGVnb3J5IHRoZXkgYXJlIGF0
dGFjaGVkCi10by4KLQotTW90aXZhdGlvbgotLS0tLS0tLS0tLQotCi1UaGUgZ29hbCBvZiB0aGlz
IGxvZ2dpbmcgbGlicmFyeSBpcyB0byBwcm92aWRlIGEgZmxleGlibGUsIGVhc3kgdG8gdXNlIGxv
Z2dpbmcKLW1lY2hhbmlzbSB0aGF0IGFsbG93cyBkZWJ1ZyBsb2cgc3RhdGVtZW50cyB0byBiZSB1
c2VkIGxpYmVyYWxseSB0aHJvdWdob3V0IGEKLWNvZGUgYmFzZS4KLQotVGhlcmUgYXJlIHR3byBw
cmltYXJ5IGRlc2lnbiBnb2FscyBmb3IgdGhpcyBsaWJyYXJ5OgotCi0xLiBMb2cgc3RhdGVtZW50
cyBzaG91bGQgYmUgY2hlYXAgd2hlbiBkaXNhYmxlZC4KLTIuIEl0IHNob3VsZCBiZSBlYXN5IHRv
IGNvbnRyb2wgbG9nIGxldmVscyBmb3Igc3BlY2lmaWMgYXJlYXMgb2YgdGhlIGNvZGUgYmFzZS4K
LQotV2hpbGUgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIG90aGVyIGxvZ2dpbmcgbGlicmFyaWVzIGZv
ciBDKyssIG5vbmUgb2YgdGhlIG9uZXMgSQotaGF2ZSBzZWVuIGZ1bGZpbGwgYm90aCBjcml0ZXJp
YS4gIFRoZSBHb29nbGUgbG9nZ2luZyBsaWJyYXJ5IChnbG9nKSBzYXRpc2ZpZXMKLXRoZSBmaXJz
dCBnb2FsLCBidXQgbm90IHRoZSBzZWNvbmQuICBNb3N0IG9mIHRoZSBvdGhlciBsb2cgbGlicmFy
aWVzIEkgaGF2ZQotZXhhbWluZWQgc2F0aXNmeSB0aGUgc2Vjb25kIGdvYWwsIGJ1dCBub3QgdGhl
IGZpcnN0LgotCi1JbiBwYXJ0aWN1bGFyLCBmb3IgaXRlbSAxLCBkaXNhYmxlZCBsb2cgc3RhdGVt
ZW50cyBzaG91bGQgYm9pbCBkb3duIHRvIGEgc2luZ2xlCi1jb25kaXRpb25hbCBjaGVjay4gIEFy
Z3VtZW50cyBmb3IgdGhlIGxvZyBtZXNzYWdlIHNob3VsZCBub3QgYmUgZXZhbHVhdGVkIGlmCi10
aGUgbG9nIG1lc3NhZ2UgaXMgbm90IGVuYWJsZWQuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGdlbmVy
YWxseSBtZWFucyB0aGF0Ci1sb2dnaW5nIG11c3QgYmUgZG9uZSB1c2luZyBwcmVwcm9jZXNzb3Ig
bWFjcm9zLgotCi1JdGVtIDIgbGFyZ2VseSBib2lscyBkb3duIHRvIGhhdmluZyBoaWVyYXJjaGlj
YWwgbG9nZ2luZyBjYXRlZ29yaWVzLCB0byBhbGxvdwotZWFzaWx5IHR1cm5pbmcgbG9nIGxldmVs
cyB1cCBhbmQgZG93biBmb3Igc3BlY2lmaWMgc2VjdGlvbnMgb2YgdGhlIGNvZGUgYmFzZS4KLUZv
ciBpbnN0YW5jZSwgdGhpcyBhbGxvd3MgYSBzZXJ2aWNlIHRvIGVuYWJsZSBhIGhpZ2hlciBsb2cg
bGV2ZWwgZm9yIGl0cwotcHJpbWFyeSBmdW5jdGlvbmFsaXR5LCB3aGlsZSBoYXZpbmcgc2xpZ2h0
bHkgbG93ZXIgbGV2ZWxzIGZvciBsaWJyYXJpZXMgdGhhdCBpdAotZGVwZW5kcyBvbi4KLQotT3Ro
ZXIgQWR2YW50YWdlcwotLS0tLS0tLS0tLS0tLS0tLQotCi1CZXlvbmQgdGhlIHByaW1hcnkgZ29h
bHMgbWVudGlvbmVkIGFib3ZlLCB0aGlzIGxvZyBsaWJyYXJ5IGRvZXMgaGF2ZSBzb21lIG90aGVy
Ci1hZHZhbnRhZ2VzIG92ZXIgZ2xvZzoKLQotIyMgU3VwcG9ydCBmb3IgdXNpbmcgYGZvbGx5Ojpm
b3JtYXQoKWAgdG8gZ2VuZXJhdGUgZm9ybWF0dGVkIGxvZyBtZXNzYWdlcwotCi1Ud28gc2VwYXJh
dGUgbWVjaGFuaXNtcyBhcmUgcHJvdmlkZWQgZm9yIGZvcm1hdHRpbmcgbG9nIG1lc3NhZ2VzOiBi
YXNpYwotY29uY2F0ZW5hdGlvbiBvZiBhcmd1bWVudHMgaW50byBzdHJpbmcgKHVzaW5nIGBmb2xs
eTo6dG88c3RkOjpzdHJpbmc+KClgKSwKLWFuZCBtb3JlIGZsZXhpYmxlIGZvcm1hdHRpbmcgdXNp
bmcgYGZvbGx5Ojpmb3JtYXQoKWAuICBUaGlzIHByb3ZpZGVzIGNvbnZlbmllbnQKLWFuZCB0eXBl
LXNhZmUgbWVjaGFuaXNtcyBmb3IgZm9ybWF0dGluZyBsb2cgbWVzc2FnZXMuCi0KLSMjIEVzY2Fw
ZXMgdW5wcmludGFibGUgY2hhcmFjdGVycyBpbiBsb2cgbWVzc2FnZXMgYnkgZGVmYXVsdC4KLQot
VGhpcyBtYWtlcyBpdCBzYWZlciB0byBzYWZlciB0byBsb2cgYXJiaXRyYXJ5IGlucHV0IGRhdGEs
IHdpdGhvdXQgd29ycnlpbmcgaWYKLXRoZSBkYXRhIG1heSBjb250YWluIHBvdGVudGlhbGx5IG1h
bGljaW91cyB0ZXJtaW5hbCBlc2NhcGUgc2VxdWVuY2VzLgotCi1Gb3IgaW5zdGFuY2UsIHRoaXMg
aGVscHMgYXZvaWQgdnVsbmVyYWJpbGl0aWVzIGxpa2UgQ1ZFLTIwMTMtMTg2MiBhbmQKLUNWRS0y
MDA5LTQ0OTYuCi0KLSMgU3VwcG9ydCBmb3IgaGFuZGxpbmcgbXVsdGktbGluZSBsb2cgbWVzc2Fn
ZXMKLQotVGhlIExvZ01lc3NhZ2UgY2xhc3MgaW5kaWNhdGVzIGlmIHRoZSBtZXNzYWdlIGNvbnRh
aW5zIGludGVybmFsIG5ld2xpbmVzLAotbWFraW5nIGl0IGVhc2llciBmb3IgaGFuZGxlcnMgdG8g
YWRkIGEgbG9nIGhlYWRlciB0byBlYWNoIGxpbmUgb2YgdGhlIG1lc3NhZ2UsCi1hdm9pZGluZyBz
dWJzZXF1ZW50IGxpbmVzIHRoYXQgZG8gbm90IHN0YXJ0IHdpdGggdGhlIGNvcnJlY3QgbG9nIGhl
YWRlci4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Zv
bGx5L2V4cGVyaW1lbnRhbC90ZXN0L1JlYWRNb3N0bHlTaGFyZWRQdHJCZW5jaG1hcmsuY3BwIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZXhwZXJpbWVudGFsL3Rl
c3QvUmVhZE1vc3RseVNoYXJlZFB0ckJlbmNobWFyay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDRjMmZmOTJhNTYxMzE3ZGQ1OGQxMzE1NmE1NTk3NTIzYTcwZWY2MWQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZXhwZXJpbWVudGFsL3Rlc3QvUmVhZE1vc3RseVNo
YXJlZFB0ckJlbmNobWFyay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICog
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLS8qIC0qLSBNb2RlOiBDKys7IHRh
Yi13aWR0aDogMjsgYy1iYXNpYy1vZmZzZXQ6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0g
Ki8KLQotI2luY2x1ZGUgPGZvbGx5L2V4cGVyaW1lbnRhbC9SZWFkTW9zdGx5U2hhcmVkUHRyLmg+
Ci0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDx0aHJlYWQ+Ci0KLSNpbmNsdWRlIDxm
b2xseS9CZW5jaG1hcmsuaD4KLSNpbmNsdWRlIDxmb2xseS9NZW1vcnkuaD4KLS8vI2luY2x1ZGUg
PGZvbGx5L2V4cGVyaW1lbnRhbC9SQ1VSZWZDb3VudC5oPgotCi10ZW1wbGF0ZSA8dGVtcGxhdGU8
dHlwZW5hbWU+IGNsYXNzIE1haW5QdHIsCi0gICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWU+IGNs
YXNzIFdlYWtQdHIsCi0gICAgICAgICAgc2l6ZV90IHRocmVhZENvdW50Pgotdm9pZCBiZW5jaG1h
cmsoc2l6ZV90IG4pIHsKLSAgTWFpblB0cjxpbnQ+IG1haW5QdHIoc3RkOjptYWtlX3VuaXF1ZTxp
bnQ+KDQyKSk7Ci0KLSAgc3RkOjp2ZWN0b3I8c3RkOjp0aHJlYWQ+IHRzOwotCi0gIGZvciAoc2l6
ZV90IHQgPSAwOyB0IDwgdGhyZWFkQ291bnQ7ICsrdCkgewotICAgIHRzLmVtcGxhY2VfYmFjayhb
Jl0oKSB7Ci0gICAgICAgIFdlYWtQdHI8aW50PiB3ZWFrUHRyKG1haW5QdHIpOwotICAgICAgICAv
LyBQcmV2ZW50IHRoZSBjb21waWxlciBmcm9tIGhvaXN0aW5nIGNvZGUgb3V0IG9mIHRoZSBsb29w
LgotICAgICAgICBhdXRvIG9wID0gWyZdKCkgRk9MTFlfTk9JTkxJTkUgeyB3ZWFrUHRyLmxvY2so
KTsgfTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewotICAgICAg
ICAgIG9wKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICB9Ci0KLSAgZm9yIChhdXRvJiB0OiB0
cykgewotICAgIHQuam9pbigpOwotICB9Ci19Ci0KLS8qdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci11
c2luZyBSQ1VNYWluUHRyID0gZm9sbHk6OlJlYWRNb3N0bHlNYWluUHRyPFQsIGZvbGx5OjpSQ1VS
ZWZDb3VudD47Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXVzaW5nIFJDVVdlYWtQdHIgPSBmb2xs
eTo6UmVhZE1vc3RseVdlYWtQdHI8VCwgZm9sbHk6OlJDVVJlZkNvdW50PjsqLwotdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci11c2luZyBUTE1haW5QdHIgPSBmb2xseTo6UmVhZE1vc3RseU1haW5QdHI8
VCwgZm9sbHk6OlRMUmVmQ291bnQ+OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci11c2luZyBUTFdl
YWtQdHIgPSBmb2xseTo6UmVhZE1vc3RseVdlYWtQdHI8VCwgZm9sbHk6OlRMUmVmQ291bnQ+Owot
Ci0KLUJFTkNITUFSSyhXZWFrUHRyT25lVGhyZWFkLCBuKSB7Ci0gIGJlbmNobWFyazxzdGQ6OnNo
YXJlZF9wdHIsIHN0ZDo6d2Vha19wdHIsIDE+KG4pOwotfQotCi1CRU5DSE1BUksoV2Vha1B0ckZv
dXJUaHJlYWRzLCBuKSB7Ci0gIGJlbmNobWFyazxzdGQ6OnNoYXJlZF9wdHIsIHN0ZDo6d2Vha19w
dHIsIDQ+KG4pOwotfQotCi0vKkJFTkNITUFSSyhSQ1VSZWFkTW9zdGx5V2Vha1B0ck9uZVRocmVh
ZCwgbikgewotICBiZW5jaG1hcms8UkNVTWFpblB0ciwgUkNVV2Vha1B0ciwgMT4obik7Ci19Ci0K
LUJFTkNITUFSSyhSQ1VSZWFkTW9zdGx5V2Vha1B0ckZvdXJUaHJlYWRzLCBuKSB7Ci0gIGJlbmNo
bWFyazxSQ1VNYWluUHRyLCBSQ1VXZWFrUHRyLCA0PihuKTsKLSAgfSovCi0KLUJFTkNITUFSSyhU
TFJlYWRNb3N0bHlXZWFrUHRyT25lVGhyZWFkLCBuKSB7Ci0gIGJlbmNobWFyazxUTE1haW5QdHIs
IFRMV2Vha1B0ciwgMT4obik7Ci19Ci0KLUJFTkNITUFSSyhUTFJlYWRNb3N0bHlXZWFrUHRyRm91
clRocmVhZHMsIG4pIHsKLSAgYmVuY2htYXJrPFRMTWFpblB0ciwgVExXZWFrUHRyLCA0PihuKTsK
LX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7Ci0gIC8qCi0gIGdmbGFnczo6
UGFyc2VDb21tYW5kTGluZUZsYWdzKCZhcmdjLCAmYXJndiwgdHJ1ZSk7Ci0gIGdmbGFnczo6U2V0
Q29tbWFuZExpbmVPcHRpb25XaXRoTW9kZSgKLSAgICAiYm1fbWluX3VzZWMiLCAiMTAwMDAwIiwg
Z2ZsYWdzOjpTRVRfRkxBR19JRl9ERUZBVUxUCi0gICAgKTsqLwotCi0gIGZvbGx5OjpydW5CZW5j
aG1hcmtzKCk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBlcmltZW50YWwvdGVzdC9SZWZDb3VudEJlbmNo
bWFyay5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9leHBl
cmltZW50YWwvdGVzdC9SZWZDb3VudEJlbmNobWFyay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDYwZTI3YTU0NTRiNWI0ZGU1ODdiMWU2MDdhMjlhZTYxN2MzZjFmMjkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZXhwZXJpbWVudGFsL3Rlc3QvUmVmQ291bnRCZW5j
aG1hcmsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0jaW5jbHVkZSA8dGhyZWFkPgotCi0jaW5jbHVkZSA8
Zm9sbHkvQmVuY2htYXJrLmg+Ci0vLyNpbmNsdWRlIDxmb2xseS9leHBlcmltZW50YWwvUkNVUmVm
Q291bnQuaD4KLSNpbmNsdWRlIDxmb2xseS9leHBlcmltZW50YWwvVExSZWZDb3VudC5oPgotCi1u
YW1lc3BhY2UgZm9sbHkgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ291bnRlcj4KLXZvaWQgc2h1
dGRvd24oQ291bnRlciYpIHsKLX0KLSAgLyoKLXZvaWQgc2h1dGRvd24oUkNVUmVmQ291bnQmIGMp
IHsKLSAgYy51c2VHbG9iYWwoKTsKLSAgLS1jOwotICB9Ki8KLQotdm9pZCBzaHV0ZG93bihUTFJl
ZkNvdW50JiBjKSB7Ci0gIGMudXNlR2xvYmFsKCk7Ci0gIC0tYzsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIENvdW50ZXIsIHNpemVfdCB0aHJlYWRDb3VudD4KLXZvaWQgYmVuY2htYXJrKHNpemVf
dCBuKSB7Ci0gIENvdW50ZXIgeDsKLQotICBzdGQ6OnZlY3RvcjxzdGQ6OnRocmVhZD4gdHM7Ci0K
LSAgZm9yIChzaXplX3QgdCA9IDA7IHQgPCB0aHJlYWRDb3VudDsgKyt0KSB7Ci0gICAgdHMuZW1w
bGFjZV9iYWNrKFsmXSgpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kp
IHsKLSAgICAgICAgICArK3g7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAtLXg7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICB9
Ci0KLSAgZm9yIChhdXRvJiB0OiB0cykgewotICAgIHQuam9pbigpOwotICB9Ci0KLSAgc2h1dGRv
d24oeCk7Ci19Ci0vKgotQkVOQ0hNQVJLKGF0b21pY09uZVRocmVhZCwgbikgewotICBiZW5jaG1h
cms8c3RkOjphdG9taWM8UkNVUmVmQ291bnQ6OkludD4sIDE+KG4pOwotfQotCi1CRU5DSE1BUkso
YXRvbWljRm91clRocmVhZHMsIG4pIHsKLSAgYmVuY2htYXJrPHN0ZDo6YXRvbWljPFJDVVJlZkNv
dW50OjpJbnQ+LCA0PihuKTsKLX0KLQotQkVOQ0hNQVJLKFJDVVJlZkNvdW50T25lVGhyZWFkLCBu
KSB7Ci0gIGJlbmNobWFyazxSQ1VSZWZDb3VudCwgMT4obik7Ci19Ci0KLUJFTkNITUFSSyhSQ1VS
ZWZDb3VudEZvdXJUaHJlYWRzLCBuKSB7Ci0gIGJlbmNobWFyazxSQ1VSZWZDb3VudCwgND4obik7
Ci19Ki8KLQotQkVOQ0hNQVJLKFRMUmVmQ291bnRPbmVUaHJlYWQsIG4pIHsKLSAgYmVuY2htYXJr
PFRMUmVmQ291bnQsIDE+KG4pOwotfQotCi1CRU5DSE1BUksoVExSZWZDb3VudEZvdXJUaHJlYWRz
LCBuKSB7Ci0gIGJlbmNobWFyazxUTFJlZkNvdW50LCA0PihuKTsKLX0KLQotfQotCi1pbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAgLyoKLSAgZ2ZsYWdzOjpQYXJzZUNvbW1hbmRM
aW5lRmxhZ3MoJmFyZ2MsICZhcmd2LCB0cnVlKTsKLSAgZ2ZsYWdzOjpTZXRDb21tYW5kTGluZU9w
dGlvbldpdGhNb2RlKAotICAgICJibV9taW5fdXNlYyIsICIxMDAwMDAiLCBnZmxhZ3M6OlNFVF9G
TEFHX0lGX0RFRkFVTFQKLSAgICApOyovCi0KLSAgZm9sbHk6OnJ1bkJlbmNobWFya3MoKTsKLQot
ICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2ZvbGx5L2ZvbGx5LWNvbmZpZy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZm9sbHkvZm9sbHktY29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGRlNjMwMDk5OTAzMDEwYWY1NzcxZWZlYTllMjJkNGUxYjRiNzE5ZmMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvZm9sbHkvZm9sbHktY29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwz
NzYgKzAsMCBAQAotI2lmbmRlZiBfRk9MTFlfQ09ORklHX0gKLSNkZWZpbmUgX0ZPTExZX0NPTkZJ
R19IIDEKLSAKLS8qIGZvbGx5LWNvbmZpZy5oLiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBhdCBl
bmQgb2YgY29uZmlndXJlLiAqLwotLyogY29uZmlnLmguICBHZW5lcmF0ZWQgZnJvbSBjb25maWcu
aC5pbiBieSBjb25maWd1cmUuICAqLwotLyogY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBj
b25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCi0KLS8qIERlZmluZSB0byAiZmluYWwiIGlm
IHRoZSBjb21waWxlciBzdXBwb3J0cyBDKysxMSAiZmluYWwiICovCi0jaWZuZGVmIEZPTExZX0ZJ
TkFMCi0jZGVmaW5lIEZPTExZX0ZJTkFMIGZpbmFsCi0jZW5kaWYKLQotLyogRGVmaW5lIHRvIGdm
bGFncyBuYW1lc3BhY2UgKHVzdWFsbHkgImdvb2dsZSIgb3IgImdmbGFncyIpICovCi0jaWZuZGVm
IEZPTExZX0dGTEFHU19OQU1FU1BBQ0UKLSNkZWZpbmUgRk9MTFlfR0ZMQUdTX05BTUVTUEFDRSBn
ZmxhZ3MKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGJpdHMvYysr
Y29uZmlnLmg+IGhlYWRlciBmaWxlLiAqLwotLyogI3VuZGVmIEhBVkVfQklUU19DX19DT05GSUdf
SCAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGJpdHMvZnVuY3RleGNlcHQu
aD4gaGVhZGVyIGZpbGUuICovCi0vKiAjdW5kZWYgSEFWRV9CSVRTX0ZVTkNURVhDRVBUX0ggKi8K
LQotLyogZGVmaW5lIGlmIHRoZSBCb29zdCBsaWJyYXJ5IGlzIGF2YWlsYWJsZSAqLwotI2lmbmRl
ZiBGT0xMWV9IQVZFX0JPT1NUCi0jZGVmaW5lIEZPTExZX0hBVkVfQk9PU1QgLyoqLwotI2VuZGlm
Ci0KLS8qIGRlZmluZSBpZiB0aGUgQm9vc3Q6OkNocm9ubyBsaWJyYXJ5IGlzIGF2YWlsYWJsZSAq
LwotI2lmbmRlZiBGT0xMWV9IQVZFX0JPT1NUX0NIUk9OTwotI2RlZmluZSBGT0xMWV9IQVZFX0JP
T1NUX0NIUk9OTyAvKiovCi0jZW5kaWYKLQotLyogZGVmaW5lIGlmIHRoZSBCb29zdDo6Q29udGV4
dCBsaWJyYXJ5IGlzIGF2YWlsYWJsZSAqLwotI2lmbmRlZiBGT0xMWV9IQVZFX0JPT1NUX0NPTlRF
WFQKLSNkZWZpbmUgRk9MTFlfSEFWRV9CT09TVF9DT05URVhUIC8qKi8KLSNlbmRpZgotCi0vKiBk
ZWZpbmUgaWYgdGhlIEJvb3N0OjpGaWxlc3lzdGVtIGxpYnJhcnkgaXMgYXZhaWxhYmxlICovCi0j
aWZuZGVmIEZPTExZX0hBVkVfQk9PU1RfRklMRVNZU1RFTQotI2RlZmluZSBGT0xMWV9IQVZFX0JP
T1NUX0ZJTEVTWVNURU0gLyoqLwotI2VuZGlmCi0KLS8qIGRlZmluZSBpZiB0aGUgQm9vc3Q6OlBS
T0dSQU1fT1BUSU9OUyBsaWJyYXJ5IGlzIGF2YWlsYWJsZSAqLwotI2lmbmRlZiBGT0xMWV9IQVZF
X0JPT1NUX1BST0dSQU1fT1BUSU9OUwotI2RlZmluZSBGT0xMWV9IQVZFX0JPT1NUX1BST0dSQU1f
T1BUSU9OUyAvKiovCi0jZW5kaWYKLQotLyogZGVmaW5lIGlmIHRoZSBCb29zdDo6UmVnZXggbGli
cmFyeSBpcyBhdmFpbGFibGUgKi8KLSNpZm5kZWYgRk9MTFlfSEFWRV9CT09TVF9SRUdFWAotI2Rl
ZmluZSBGT0xMWV9IQVZFX0JPT1NUX1JFR0VYIC8qKi8KLSNlbmRpZgotCi0vKiBkZWZpbmUgaWYg
dGhlIEJvb3N0OjpTeXN0ZW0gbGlicmFyeSBpcyBhdmFpbGFibGUgKi8KLSNpZm5kZWYgRk9MTFlf
SEFWRV9CT09TVF9TWVNURU0KLSNkZWZpbmUgRk9MTFlfSEFWRV9CT09TVF9TWVNURU0gLyoqLwot
I2VuZGlmCi0KLS8qIGRlZmluZSBpZiB0aGUgQm9vc3Q6OlRocmVhZCBsaWJyYXJ5IGlzIGF2YWls
YWJsZSAqLwotI2lmbmRlZiBGT0xMWV9IQVZFX0JPT1NUX1RIUkVBRAotI2RlZmluZSBGT0xMWV9I
QVZFX0JPT1NUX1RIUkVBRCAvKiovCi0jZW5kaWYKLQotLyogRGVmaW5lIHRvIDEgaWYgd2Ugc3Vw
cG9ydCBjbG9ja19nZXR0aW1lKDIpLiAqLwotI2lmbmRlZiBGT0xMWV9IQVZFX0NMT0NLX0dFVFRJ
TUUKLSNkZWZpbmUgRk9MTFlfSEFWRV9DTE9DS19HRVRUSU1FIDEKLSNlbmRpZgotCi0vKiBEZWZp
bmUgdG8gMSBpZiB3ZSBoYXZlIGNwbHVzX2RlbWFuZ2xlX3YzX2NhbGxiYWNrLiAqLwotLyogI3Vu
ZGVmIEhBVkVfQ1BMVVNfREVNQU5HTEVfVjNfQ0FMTEJBQ0sgKi8KLQotLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KLSNpZm5kZWYgRk9MTFlf
SEFWRV9ETEZDTl9ICi0jZGVmaW5lIEZPTExZX0hBVkVfRExGQ05fSCAxCi0jZW5kaWYKLQotLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkd2FyZi5oPiBoZWFkZXIgZmlsZS4gKi8KLS8q
ICN1bmRlZiBIQVZFX0RXQVJGX0ggKi8KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxmZWF0dXJlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLS8qICN1bmRlZiBIQVZFX0ZFQVRVUkVTX0gg
Ki8KLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGlmdW5jICovCi0v
KiAjdW5kZWYgSEFWRV9JRlVOQyAqLwotCi0vKiBEZWZpbmUgaWYgd2UgaGF2ZSBfX2ludDEyOCAq
LwotI2lmbmRlZiBGT0xMWV9IQVZFX0lOVDEyOF9UCi0jZGVmaW5lIEZPTExZX0hBVkVfSU5UMTI4
X1QgMQotI2VuZGlmCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMu
aD4gaGVhZGVyIGZpbGUuICovCi0jaWZuZGVmIEZPTExZX0hBVkVfSU5UVFlQRVNfSAotI2RlZmlu
ZSBGT0xMWV9IQVZFX0lOVFRZUEVTX0ggMQotI2VuZGlmCi0KLS8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgYXRvbWljJyBsaWJyYXJ5ICgtbGF0b21pYykuICovCi0vKiAjdW5kZWYgSEFW
RV9MSUJBVE9NSUMgKi8KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiejInIGxp
YnJhcnkgKC1sYnoyKS4gKi8KLSNpZm5kZWYgRk9MTFlfSEFWRV9MSUJCWjIKLSNkZWZpbmUgRk9M
TFlfSEFWRV9MSUJCWjIgMQotI2VuZGlmCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZGwnIGxpYnJhcnkgKC1sZGwpLiAqLwotLyogI3VuZGVmIEhBVkVfTElCREwgKi8KLQotLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkb3VibGUtY29udmVyc2lvbicgbGlicmFyeQot
ICAgKC1sZG91YmxlLWNvbnZlcnNpb24pLiAqLwotI2lmbmRlZiBGT0xMWV9IQVZFX0xJQkRPVUJM
RV9DT05WRVJTSU9OCi0jZGVmaW5lIEZPTExZX0hBVkVfTElCRE9VQkxFX0NPTlZFUlNJT04gMQot
I2VuZGlmCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGliZHdhcmYvZHdhcmYu
aD4gaGVhZGVyIGZpbGUuICovCi0vKiAjdW5kZWYgSEFWRV9MSUJEV0FSRl9EV0FSRl9IICovCi0K
LS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXZlbnQnIGxpYnJhcnkgKC1sZXZlbnQp
LiAqLwotI2lmbmRlZiBGT0xMWV9IQVZFX0xJQkVWRU5UCi0jZGVmaW5lIEZPTExZX0hBVkVfTElC
RVZFTlQgMQotI2VuZGlmCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2ZsYWdz
JyBsaWJyYXJ5ICgtbGdmbGFncykuICovCi0jaWZuZGVmIEZPTExZX0hBVkVfTElCR0ZMQUdTCi0j
ZGVmaW5lIEZPTExZX0hBVkVfTElCR0ZMQUdTIDEKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYGdsb2cnIGxpYnJhcnkgKC1sZ2xvZykuICovCi0jaWZuZGVmIEZPTExZ
X0hBVkVfTElCR0xPRwotI2RlZmluZSBGT0xMWV9IQVZFX0xJQkdMT0cgMQotI2VuZGlmCi0KLS8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbHo0JyBsaWJyYXJ5ICgtbGx6NCkuICovCi0j
aWZuZGVmIEZPTExZX0hBVkVfTElCTFo0Ci0jZGVmaW5lIEZPTExZX0hBVkVfTElCTFo0IDEKLSNl
bmRpZgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGx6bWEnIGxpYnJhcnkgKC1s
bHptYSkuICovCi0jaWZuZGVmIEZPTExZX0hBVkVfTElCTFpNQQotI2RlZmluZSBGT0xMWV9IQVZF
X0xJQkxaTUEgMQotI2VuZGlmCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc25h
cHB5JyBsaWJyYXJ5ICgtbHNuYXBweSkuICovCi0jaWZuZGVmIEZPTExZX0hBVkVfTElCU05BUFBZ
Ci0jZGVmaW5lIEZPTExZX0hBVkVfTElCU05BUFBZIDEKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYHonIGxpYnJhcnkgKC1seikuICovCi0jaWZuZGVmIEZPTExZX0hB
VkVfTElCWgotI2RlZmluZSBGT0xMWV9IQVZFX0xJQlogMQotI2VuZGlmCi0KLS8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgenN0ZCcgbGlicmFyeSAoLWx6c3RkKS4gKi8KLS8qICN1bmRl
ZiBIQVZFX0xJQlpTVEQgKi8KLQotLyogRGVmaW5lIHRvIDEgaWYgbWVtYmFycmllci5oIGlzIGF2
YWlsYWJsZSAqLwotLyogI3VuZGVmIEhBVkVfTElOVVhfTUVNQkFSUklFUl9IICovCi0KLS8qIERl
ZmluZSB0byAxIGlmIGxpYmxpbnV4LXZkc28gaXMgYXZhaWxhYmxlICovCi0vKiAjdW5kZWYgSEFW
RV9MSU5VWF9WRFNPICovCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWFsbG9j
Lmg+IGhlYWRlciBmaWxlLiAqLwotLyogI3VuZGVmIEhBVkVfTUFMTE9DX0ggKi8KLQotLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtYWxsb2Nfc2l6ZScgZnVuY3Rpb24uICovCi0jaWZu
ZGVmIEZPTExZX0hBVkVfTUFMTE9DX1NJWkUKLSNkZWZpbmUgRk9MTFlfSEFWRV9NQUxMT0NfU0la
RSAxCi0jZW5kaWYKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtYWxsb2NfdXNh
YmxlX3NpemUnIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfTUFMTE9DX1VTQUJMRV9TSVpF
ICovCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBm
aWxlLiAqLwotI2lmbmRlZiBGT0xMWV9IQVZFX01FTU9SWV9ICi0jZGVmaW5lIEZPTExZX0hBVkVf
TUVNT1JZX0ggMQotI2VuZGlmCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVt
cmNocicgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9NRU1SQ0hSICovCi0KLS8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGlwZTInIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhB
VkVfUElQRTIgKi8KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZHYnIGZ1
bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfUFJFQURWICovCi0KLS8qIERlZmluZSB0byAxIGlm
IHB0aHJlYWQgaXMgYXZhbGlhYmxlICovCi0jaWZuZGVmIEZPTExZX0hBVkVfUFRIUkVBRAotI2Rl
ZmluZSBGT0xMWV9IQVZFX1BUSFJFQUQgMQotI2VuZGlmCi0KLS8qIERlZmluZSB0byAxIGlmIHRo
ZSBjb21waWxlciBzdXBwb3J0cyBwdGhyZWFkX2F0Zm9yayAqLwotI2lmbmRlZiBGT0xMWV9IQVZF
X1BUSFJFQURfQVRGT1JLCi0jZGVmaW5lIEZPTExZX0hBVkVfUFRIUkVBRF9BVEZPUksgMQotI2Vu
ZGlmCi0KLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBwdGhyZWFk
X3NwaW5sb2NrX3QnLiAqLwotLyogI3VuZGVmIEhBVkVfUFRIUkVBRF9TUElOTE9DS19UICovCi0K
LS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHdyaXRldicgZnVuY3Rpb24uICovCi0v
KiAjdW5kZWYgSEFWRV9QV1JJVEVWICovCi0KLS8qIERlZmluZSBpZiBib3RoIC1Xc2hhZG93LWxv
Y2FsIGFuZCAtV3NoYWRvdy1jb21wYXRpYmxlLWxvY2FsIGFyZSBzdXBwb3J0ZWQuCi0gICAqLwot
I2lmbmRlZiBGT0xMWV9IQVZFX1NIQURPV19MT0NBTF9XQVJOSU5HUwotI2RlZmluZSBGT0xMWV9I
QVZFX1NIQURPV19MT0NBTF9XQVJOSU5HUyAxCi0jZW5kaWYKLQotLyogRGVmaW5lIGlmIGcrKyBz
dXBwb3J0cyBDKysxeSBmZWF0dXJlcy4gKi8KLSNpZm5kZWYgRk9MTFlfSEFWRV9TVERDWFhfMVkK
LSNkZWZpbmUgRk9MTFlfSEFWRV9TVERDWFhfMVkgLyoqLwotI2VuZGlmCi0KLS8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLwotI2lmbmRlZiBG
T0xMWV9IQVZFX1NURElOVF9ICi0jZGVmaW5lIEZPTExZX0hBVkVfU1RESU5UX0ggMQotI2VuZGlm
Ci0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxl
LiAqLwotI2lmbmRlZiBGT0xMWV9IQVZFX1NURExJQl9ICi0jZGVmaW5lIEZPTExZX0hBVkVfU1RE
TElCX0ggMQotI2VuZGlmCi0KLS8qIERlZmluZSB0byAxIGlmIHdlIGhhdmUgYSB1c2FibGUgc3Rk
Ojppc190cml2aWFsbHlfY29weWFibGU8VD4KLSAgIGltcGxlbWVudGF0aW9uLiAqLwotI2lmbmRl
ZiBGT0xMWV9IQVZFX1NURF9fSVNfVFJJVklBTExZX0NPUFlBQkxFCi0jZGVmaW5lIEZPTExZX0hB
VkVfU1REX19JU19UUklWSUFMTFlfQ09QWUFCTEUgMQotI2VuZGlmCi0KLS8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNpZm5kZWYgRk9M
TFlfSEFWRV9TVFJJTkdTX0gKLSNkZWZpbmUgRk9MTFlfSEFWRV9TVFJJTkdTX0ggMQotI2VuZGlm
Ci0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxl
LiAqLwotI2lmbmRlZiBGT0xMWV9IQVZFX1NUUklOR19ICi0jZGVmaW5lIEZPTExZX0hBVkVfU1RS
SU5HX0ggMQotI2VuZGlmCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0
YXQuaD4gaGVhZGVyIGZpbGUuICovCi0jaWZuZGVmIEZPTExZX0hBVkVfU1lTX1NUQVRfSAotI2Rl
ZmluZSBGT0xMWV9IQVZFX1NZU19TVEFUX0ggMQotI2VuZGlmCi0KLS8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwotI2lmbmRlZiBGT0xM
WV9IQVZFX1NZU19UWVBFU19ICi0jZGVmaW5lIEZPTExZX0hBVkVfU1lTX1RZUEVTX0ggMQotI2Vu
ZGlmCi0KLS8qIERlZmluZSB0byAxIGlmIHRoZSBhcmNoaXRlY3R1cmUgYWxsb3dzIHVuYWxpZ25l
ZCBhY2Nlc3NlcyAqLwotI2lmbmRlZiBGT0xMWV9IQVZFX1VOQUxJR05FRF9BQ0NFU1MKLSNkZWZp
bmUgRk9MTFlfSEFWRV9VTkFMSUdORURfQUNDRVNTIDEKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNpZm5kZWYgRk9M
TFlfSEFWRV9VTklTVERfSAotI2RlZmluZSBGT0xMWV9IQVZFX1VOSVNURF9IIDEKLSNlbmRpZgot
Ci0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgY29tcGlsZXIgaGFzIFZMQSAodmFyaWFibGUtbGVuZ3Ro
IGFycmF5KSBzdXBwb3J0LAotICAgb3RoZXJ3aXNlIGRlZmluZSB0byAwICovCi0jaWZuZGVmIEZP
TExZX0hBVkVfVkxBCi0jZGVmaW5lIEZPTExZX0hBVkVfVkxBIDEKLSNlbmRpZgotCi0vKiBEZWZp
bmUgdG8gMSBpZiB0aGUgdnNucHJpbnRmIHN1cHBvcnRzIHJldHVybmluZyBlcnJvcnMgb24gYmFk
IGZvcm1hdAotICAgc3RyaW5ncy4gKi8KLS8qICN1bmRlZiBIQVZFX1ZTTlBSSU5URl9FUlJPUlMg
Ki8KLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIGxpYmMgc3VwcG9ydHMgd2NoYXIgd2VsbCAqLwot
I2lmbmRlZiBGT0xMWV9IQVZFX1dDSEFSX1NVUFBPUlQKLSNkZWZpbmUgRk9MTFlfSEFWRV9XQ0hB
Ul9TVVBQT1JUIDEKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgbGlua2VyIHN1cHBv
cnRzIHdlYWsgc3ltYm9scy4gKi8KLS8qICN1bmRlZiBIQVZFX1dFQUtfU1lNQk9MUyAqLwotCi0v
KiBEZWZpbmUgdG8gMSBpZiB0aGUgcnVudGltZSBzdXBwb3J0cyBYU0ktc3R5bGUgc3RyZXJyb3Jf
ciAqLwotI2lmbmRlZiBGT0xMWV9IQVZFX1hTSV9TVFJFUlJPUl9SCi0jZGVmaW5lIEZPTExZX0hB
VkVfWFNJX1NUUkVSUk9SX1IgMQotI2VuZGlmCi0KLS8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVj
dG9yeSB3aGVyZSBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuICovCi0jaWZu
ZGVmIEZPTExZX0xUX09CSkRJUgotI2RlZmluZSBGT0xMWV9MVF9PQkpESVIgIi5saWJzLyIKLSNl
bmRpZgotCi0vKiBEZWZpbmUgdG8gMSBmb3IgY29tcGlsZXIgZ3VhcmRzIGZvciBtb2JpbGUgdGFy
Z2V0cy4gKi8KLS8qICN1bmRlZiBNT0JJTEUgKi8KLQotLyogRGVmaW5lIHRvICJvdmVycmlkZSIg
aWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIEMrKzExICJvdmVycmlkZSIgKi8KLSNpZm5kZWYgRk9M
TFlfT1ZFUlJJREUKLSNkZWZpbmUgRk9MTFlfT1ZFUlJJREUgb3ZlcnJpZGUKLSNlbmRpZgotCi0v
KiBOYW1lIG9mIHBhY2thZ2UgKi8KLSNpZm5kZWYgRk9MTFlfUEFDS0FHRQotI2RlZmluZSBGT0xM
WV9QQUNLQUdFICJmb2xseSIKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hl
cmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KLSNpZm5k
ZWYgRk9MTFlfUEFDS0FHRV9CVUdSRVBPUlQKLSNkZWZpbmUgRk9MTFlfUEFDS0FHRV9CVUdSRVBP
UlQgImZvbGx5QGZiLmNvbSIKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBv
ZiB0aGlzIHBhY2thZ2UuICovCi0jaWZuZGVmIEZPTExZX1BBQ0tBR0VfTkFNRQotI2RlZmluZSBG
T0xMWV9QQUNLQUdFX05BTUUgImZvbGx5IgotI2VuZGlmCi0KLS8qIERlZmluZSB0byB0aGUgZnVs
bCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNpZm5kZWYgRk9MTFlfUEFD
S0FHRV9TVFJJTkcKLSNkZWZpbmUgRk9MTFlfUEFDS0FHRV9TVFJJTkcgImZvbGx5IDU3LjAiCi0j
ZW5kaWYKLQotLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBw
YWNrYWdlLiAqLwotI2lmbmRlZiBGT0xMWV9QQUNLQUdFX1RBUk5BTUUKLSNkZWZpbmUgRk9MTFlf
UEFDS0FHRV9UQVJOQU1FICJmb2xseSIKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gdGhlIGhvbWUg
cGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLwotI2lmbmRlZiBGT0xMWV9QQUNLQUdFX1VSTAotI2Rl
ZmluZSBGT0xMWV9QQUNLQUdFX1VSTCAiIgotI2VuZGlmCi0KLS8qIERlZmluZSB0byB0aGUgdmVy
c2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCi0jaWZuZGVmIEZPTExZX1BBQ0tBR0VfVkVSU0lPTgot
I2RlZmluZSBGT0xMWV9QQUNLQUdFX1ZFUlNJT04gIjU3LjAiCi0jZW5kaWYKLQotLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCi0jaWZuZGVmIEZP
TExZX1NURENfSEVBREVSUwotI2RlZmluZSBGT0xMWV9TVERDX0hFQURFUlMgMQotI2VuZGlmCi0K
LS8qIERlZmluZSBpZiB3ZSBuZWVkIHRoZSBzdGFuZGFyZCBpbnRlZ2VyIHRyYWl0cyBkZWZpbmVk
IGZvciB0aGUgdHlwZQotICAgYF9faW50MTI4Jy4gKi8KLS8qICN1bmRlZiBTVVBQTFlfTUlTU0lO
R19JTlQxMjhfVFJBSVRTICovCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGlu
Y2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLwotI2lmbmRlZiBGT0xMWV9U
SU1FX1dJVEhfU1lTX1RJTUUKLSNkZWZpbmUgRk9MTFlfVElNRV9XSVRIX1NZU19USU1FIDEKLSNl
bmRpZgotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgZ2ZsYWdzIG5hbWVzcGFjZSBpcyBub3QgImdm
bGFncyIgKi8KLS8qICN1bmRlZiBVTlVTVUFMX0dGTEFHU19OQU1FU1BBQ0UgKi8KLQotLyogRW5h
YmxlIGplbWFsbG9jICovCi0vKiAjdW5kZWYgVVNFX0pFTUFMTE9DICovCi0KLS8qIERlZmluZSB0
byAxIGlmIHdlIGFyZSB1c2luZyBsaWJjKysuICovCi0jaWZuZGVmIEZPTExZX1VTRV9MSUJDUFAK
LSNkZWZpbmUgRk9MTFlfVVNFX0xJQkNQUCAxCi0jZW5kaWYKLQotLyogVmVyc2lvbiBudW1iZXIg
b2YgcGFja2FnZSAqLwotI2lmbmRlZiBGT0xMWV9WRVJTSU9OCi0jZGVmaW5lIEZPTExZX1ZFUlNJ
T04gIjU3LjAiCi0jZW5kaWYKLQotLyogRGVmaW5lIHRvIGVtcHR5IGlmIGBjb25zdCcgZG9lcyBu
b3QgY29uZm9ybSB0byBBTlNJIEMuICovCi0vKiAjdW5kZWYgY29uc3QgKi8KLQotLyogRGVmaW5l
IHRvIGBfX2lubGluZV9fJyBvciBgX19pbmxpbmUnIGlmIHRoYXQncyB3aGF0IHRoZSBDIGNvbXBp
bGVyCi0gICBjYWxscyBpdCwgb3IgdG8gbm90aGluZyBpZiAnaW5saW5lJyBpcyBub3Qgc3VwcG9y
dGVkIHVuZGVyIGFueSBuYW1lLiAgKi8KLSNpZm5kZWYgX19jcGx1c3BsdXMKLS8qICN1bmRlZiBp
bmxpbmUgKi8KLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90
eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCi0vKiAjdW5kZWYgc2l6ZV90ICovCi0KLS8qIERl
ZmluZSB0byBlbXB0eSBpZiB0aGUga2V5d29yZCBgdm9sYXRpbGUnIGRvZXMgbm90IHdvcmsuIFdh
cm5pbmc6IHZhbGlkCi0gICBjb2RlIHVzaW5nIGB2b2xhdGlsZScgY2FuIGJlY29tZSBpbmNvcnJl
Y3Qgd2l0aG91dC4gRGlzYWJsZSB3aXRoIGNhcmUuICovCi0vKiAjdW5kZWYgdm9sYXRpbGUgKi8K
LSAKLS8qIG9uY2U6IF9GT0xMWV9DT05GSUdfSCAqLwotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9oYXNoL1Nwb29reUhhc2hWMS5o
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvaGFzaC9TcG9va3lI
YXNoVjEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI0NTdkNWY4MGYzYWMyNGZh
NDFjYWJmNTljMzAzOWE4MWE0ZTBkNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9o
YXNoL1Nwb29reUhhc2hWMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRo
ZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1h
eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBo
dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3Mg
cmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3
YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
biAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2Ug
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBs
aW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vLyBUaGlzIGlzIHZlcnNpb24g
MSBvZiBTcG9va3lIYXNoLCBpbmNvbXBhdGlibGUgd2l0aCB2ZXJzaW9uIDIuCi0vLwotLy8gU3Bv
b2t5SGFzaDogYSAxMjgtYml0IG5vbmNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbgotLy8gQnkg
Qm9iIEplbmtpbnMsIHB1YmxpYyBkb21haW4KLS8vICAgT2N0IDMxIDIwMTA6IGFscGhhLCBmcmFt
ZXdvcmsgKyBTcG9va3lIYXNoOjpNaXggYXBwZWFycyByaWdodAotLy8gICBPY3QgMzEgMjAxMTog
YWxwaGEgYWdhaW4sIE1peCBvbmx5IGdvb2QgdG8gMl5eNjkgYnV0IHJlc3QgYXBwZWFycyByaWdo
dAotLy8gICBEZWMgMzEgMjAxMTogYmV0YSwgaW1wcm92ZWQgTWl4LCB0ZXN0ZWQgaXQgZm9yIDIt
Yml0IGRlbHRhcwotLy8gICBGZWIgIDIgMjAxMjogcHJvZHVjdGlvbiwgc2FtZSBiaXRzIGFzIGJl
dGEKLS8vICAgRmViICA1IDIwMTI6IGFkanVzdGVkIGRlZmluaXRpb25zIG9mIHVpbnQqIHRvIGJl
IG1vcmUgcG9ydGFibGUKLS8vICAgTWFyIDMwIDIwMTI6IDMgYnl0ZXMvY3ljbGUsIG5vdCA0LiAg
QWxwaGEgd2FzIDQgYnV0IHdhc24ndCB0aG9yb3VnaCBlbm91Z2guCi0vLwotLy8gVXAgdG8gMyBi
eXRlcy9jeWNsZSBmb3IgbG9uZyBtZXNzYWdlcy4gIFJlYXNvbmFibHkgZmFzdCBmb3Igc2hvcnQg
bWVzc2FnZXMuCi0vLyBBbGwgMSBvciAyIGJpdCBkZWx0YXMgYWNoaWV2ZSBhdmFsYW5jaGUgd2l0
aGluIDElIGJpYXMgcGVyIG91dHB1dCBiaXQuCi0vLwotLy8gVGhpcyB3YXMgZGV2ZWxvcGVkIGZv
ciBhbmQgdGVzdGVkIG9uIDY0LWJpdCB4ODYtY29tcGF0aWJsZSBwcm9jZXNzb3JzLgotLy8gSXQg
YXNzdW1lcyB0aGUgcHJvY2Vzc29yIGlzIGxpdHRsZS1lbmRpYW4uICBUaGVyZSBpcyBhIG1hY3Jv
Ci0vLyBjb250cm9sbGluZyB3aGV0aGVyIHVuYWxpZ25lZCByZWFkcyBhcmUgYWxsb3dlZCAoYnkg
ZGVmYXVsdCB0aGV5IGFyZSkuCi0vLyBUaGlzIHNob3VsZCBiZSBhbiBlcXVhbGx5IGdvb2QgaGFz
aCBvbiBiaWctZW5kaWFuIG1hY2hpbmVzLCBidXQgaXQgd2lsbAotLy8gY29tcHV0ZSBkaWZmZXJl
bnQgcmVzdWx0cyBvbiB0aGVtIHRoYW4gb24gbGl0dGxlLWVuZGlhbiBtYWNoaW5lcy4KLS8vCi0v
LyBHb29nbGUncyBDaXR5SGFzaCBoYXMgc2ltaWxhciBzcGVjcyB0byBTcG9va3lIYXNoLCBhbmQg
Q2l0eUhhc2ggaXMgZmFzdGVyCi0vLyBvbiBzb21lIHBsYXRmb3Jtcy4gIE1ENCBhbmQgTUQ1IGFs
c28gaGF2ZSBzaW1pbGFyIHNwZWNzLCBidXQgdGhleSBhcmUgb3JkZXJzCi0vLyBvZiBtYWduaXR1
ZGUgc2xvd2VyLiAgQ1JDcyBhcmUgdHdvIG9yIG1vcmUgdGltZXMgc2xvd2VyLCBidXQgdW5saWtl
Ci0vLyBTcG9va3lIYXNoLCB0aGV5IGhhdmUgbmljZSBtYXRoIGZvciBjb21iaW5pbmcgdGhlIENS
Q3Mgb2YgcGllY2VzIHRvIGZvcm0KLS8vIHRoZSBDUkNzIG9mIHdob2xlcy4gIFRoZXJlIGFyZSBh
bHNvIGNyeXB0b2dyYXBoaWMgaGFzaGVzLCBidXQgdGhvc2UgYXJlIGV2ZW4KLS8vIHNsb3dlciB0
aGFuIE1ENS4KLS8vCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNs
dWRlIDxjc3RkaW50PgotCi1uYW1lc3BhY2UgZm9sbHkgewotbmFtZXNwYWNlIGhhc2ggewotCi1j
bGFzcyBTcG9va3lIYXNoVjEKLXsKLXB1YmxpYzoKLSAgICAvLwotICAgIC8vIFNwb29reUhhc2g6
IGhhc2ggYSBzaW5nbGUgbWVzc2FnZSBpbiBvbmUgY2FsbCwgcHJvZHVjZSAxMjgtYml0IG91dHB1
dAotICAgIC8vCi0gICAgc3RhdGljIHZvaWQgSGFzaDEyOCgKLSAgICAgICAgY29uc3Qgdm9pZCAq
bWVzc2FnZSwgIC8vIG1lc3NhZ2UgdG8gaGFzaAotICAgICAgICBzaXplX3QgbGVuZ3RoLCAgICAg
ICAgLy8gbGVuZ3RoIG9mIG1lc3NhZ2UgaW4gYnl0ZXMKLSAgICAgICAgdWludDY0X3QgKmhhc2gx
LCAgICAgIC8vIGluL291dDogaW4gc2VlZCAxLCBvdXQgaGFzaCB2YWx1ZSAxCi0gICAgICAgIHVp
bnQ2NF90ICpoYXNoMik7ICAgICAvLyBpbi9vdXQ6IGluIHNlZWQgMiwgb3V0IGhhc2ggdmFsdWUg
MgotCi0gICAgLy8KLSAgICAvLyBIYXNoNjQ6IGhhc2ggYSBzaW5nbGUgbWVzc2FnZSBpbiBvbmUg
Y2FsbCwgcmV0dXJuIDY0LWJpdCBvdXRwdXQKLSAgICAvLwotICAgIHN0YXRpYyB1aW50NjRfdCBI
YXNoNjQoCi0gICAgICAgIGNvbnN0IHZvaWQgKm1lc3NhZ2UsICAvLyBtZXNzYWdlIHRvIGhhc2gK
LSAgICAgICAgc2l6ZV90IGxlbmd0aCwgICAgICAgIC8vIGxlbmd0aCBvZiBtZXNzYWdlIGluIGJ5
dGVzCi0gICAgICAgIHVpbnQ2NF90IHNlZWQpICAgICAgICAvLyBzZWVkCi0gICAgewotICAgICAg
ICB1aW50NjRfdCBoYXNoMSA9IHNlZWQ7Ci0gICAgICAgIEhhc2gxMjgobWVzc2FnZSwgbGVuZ3Ro
LCAmaGFzaDEsICZzZWVkKTsKLSAgICAgICAgcmV0dXJuIGhhc2gxOwotICAgIH0KLQotICAgIC8v
Ci0gICAgLy8gSGFzaDMyOiBoYXNoIGEgc2luZ2xlIG1lc3NhZ2UgaW4gb25lIGNhbGwsIHByb2R1
Y2UgMzItYml0IG91dHB1dAotICAgIC8vCi0gICAgc3RhdGljIHVpbnQzMl90IEhhc2gzMigKLSAg
ICAgICAgY29uc3Qgdm9pZCAqbWVzc2FnZSwgIC8vIG1lc3NhZ2UgdG8gaGFzaAotICAgICAgICBz
aXplX3QgbGVuZ3RoLCAgICAgICAgLy8gbGVuZ3RoIG9mIG1lc3NhZ2UgaW4gYnl0ZXMKLSAgICAg
ICAgdWludDMyX3Qgc2VlZCkgICAgICAgIC8vIHNlZWQKLSAgICB7Ci0gICAgICAgIHVpbnQ2NF90
IGhhc2gxID0gc2VlZCwgaGFzaDIgPSBzZWVkOwotICAgICAgICBIYXNoMTI4KG1lc3NhZ2UsIGxl
bmd0aCwgJmhhc2gxLCAmaGFzaDIpOwotICAgICAgICByZXR1cm4gKHVpbnQzMl90KWhhc2gxOwot
ICAgIH0KLQotICAgIC8vCi0gICAgLy8gSW5pdDogaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBvZiBh
IFNwb29reUhhc2gKLSAgICAvLwotICAgIHZvaWQgSW5pdCgKLSAgICAgICAgdWludDY0X3Qgc2Vl
ZDEsICAgICAvLyBhbnkgNjQtYml0IHZhbHVlIHdpbGwgZG8sIGluY2x1ZGluZyAwCi0gICAgICAg
IHVpbnQ2NF90IHNlZWQyKTsgICAgLy8gZGlmZmVyZW50IHNlZWRzIHByb2R1Y2UgaW5kZXBlbmRl
bnQgaGFzaGVzCi0KLSAgICAvLwotICAgIC8vIFVwZGF0ZTogYWRkIGEgcGllY2Ugb2YgYSBtZXNz
YWdlIHRvIGEgU3Bvb2t5SGFzaCBzdGF0ZQotICAgIC8vCi0gICAgdm9pZCBVcGRhdGUoCi0gICAg
ICAgIGNvbnN0IHZvaWQgKm1lc3NhZ2UsICAvLyBtZXNzYWdlIGZyYWdtZW50Ci0gICAgICAgIHNp
emVfdCBsZW5ndGgpOyAgICAgICAvLyBsZW5ndGggb2YgbWVzc2FnZSBmcmFnbWVudCBpbiBieXRl
cwotCi0KLSAgICAvLwotICAgIC8vIEZpbmFsOiBjb21wdXRlIHRoZSBoYXNoIGZvciB0aGUgY3Vy
cmVudCBTcG9va3lIYXNoIHN0YXRlCi0gICAgLy8KLSAgICAvLyBUaGlzIGRvZXMgbm90IG1vZGlm
eSB0aGUgc3RhdGU7IHlvdSBjYW4ga2VlcCB1cGRhdGluZyBpdCBhZnRlcndhcmQKLSAgICAvLwot
ICAgIC8vIFRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgaWYgU3Bvb2t5SGFzaCgpIGhhZCBiZWVu
IGNhbGxlZCB3aXRoCi0gICAgLy8gYWxsIHRoZSBwaWVjZXMgY29uY2F0ZW5hdGVkIGludG8gb25l
IG1lc3NhZ2UuCi0gICAgLy8KLSAgICB2b2lkIEZpbmFsKAotICAgICAgICB1aW50NjRfdCAqaGFz
aDEsICAvLyBvdXQgb25seTogZmlyc3QgNjQgYml0cyBvZiBoYXNoIHZhbHVlLgotICAgICAgICB1
aW50NjRfdCAqaGFzaDIpOyAvLyBvdXQgb25seTogc2Vjb25kIDY0IGJpdHMgb2YgaGFzaCB2YWx1
ZS4KLQotICAgIC8vCi0gICAgLy8gbGVmdCByb3RhdGUgYSA2NC1iaXQgdmFsdWUgYnkgayBieXRl
cwotICAgIC8vCi0gICAgc3RhdGljIGlubGluZSB1aW50NjRfdCBSb3Q2NCh1aW50NjRfdCB4LCBp
bnQgaykKLSAgICB7Ci0gICAgICAgIHJldHVybiAoeCA8PCBrKSB8ICh4ID4+ICg2NCAtIGspKTsK
LSAgICB9Ci0KLSAgICAvLwotICAgIC8vIFRoaXMgaXMgdXNlZCBpZiB0aGUgaW5wdXQgaXMgOTYg
Ynl0ZXMgbG9uZyBvciBsb25nZXIuCi0gICAgLy8KLSAgICAvLyBUaGUgaW50ZXJuYWwgc3RhdGUg
aXMgZnVsbHkgb3ZlcndyaXR0ZW4gZXZlcnkgOTYgYnl0ZXMuCi0gICAgLy8gRXZlcnkgaW5wdXQg
Yml0IGFwcGVhcnMgdG8gY2F1c2UgYXQgbGVhc3QgMTI4IGJpdHMgb2YgZW50cm9weQotICAgIC8v
IGJlZm9yZSA5NiBvdGhlciBieXRlcyBhcmUgY29tYmluZWQsIHdoZW4gcnVuIGZvcndhcmQgb3Ig
YmFja3dhcmQKLSAgICAvLyAgIEZvciBldmVyeSBpbnB1dCBiaXQsCi0gICAgLy8gICBUd28gaW5w
dXRzIGRpZmZlcmluZyBpbiBqdXN0IHRoYXQgaW5wdXQgYml0Ci0gICAgLy8gICBXaGVyZSAiZGlm
ZmVyIiBtZWFucyB4b3Igb3Igc3VidHJhY3Rpb24KLSAgICAvLyAgIEFuZCB0aGUgYmFzZSB2YWx1
ZSBpcyByYW5kb20KLSAgICAvLyAgIFdoZW4gcnVuIGZvcndhcmQgb3IgYmFja3dhcmRzIG9uZSBN
aXgKLSAgICAvLyBJIHRyaWVkIDMgcGFpcnMgb2YgZWFjaDsgdGhleSBhbGwgZGlmZmVyZWQgYnkg
YXQgbGVhc3QgMjEyIGJpdHMuCi0gICAgLy8KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgTWl4KAot
ICAgICAgICBjb25zdCB1aW50NjRfdCAqZGF0YSwKLSAgICAgICAgdWludDY0X3QgJnMwLCB1aW50
NjRfdCAmczEsIHVpbnQ2NF90ICZzMiwgdWludDY0X3QgJnMzLAotICAgICAgICB1aW50NjRfdCAm
czQsIHVpbnQ2NF90ICZzNSwgdWludDY0X3QgJnM2LCB1aW50NjRfdCAmczcsCi0gICAgICAgIHVp
bnQ2NF90ICZzOCwgdWludDY0X3QgJnM5LCB1aW50NjRfdCAmczEwLHVpbnQ2NF90ICZzMTEpCi0g
ICAgewotICAgICAgczAgKz0gZGF0YVswXTsgICBzMiBePSBzMTA7IHMxMSBePSBzMDsgIHMwID0g
Um90NjQoczAsMTEpOyAgIHMxMSArPSBzMTsKLSAgICAgIHMxICs9IGRhdGFbMV07ICAgczMgXj0g
czExOyBzMCBePSBzMTsgICBzMSA9IFJvdDY0KHMxLDMyKTsgICBzMCArPSBzMjsKLSAgICAgIHMy
ICs9IGRhdGFbMl07ICAgczQgXj0gczA7ICBzMSBePSBzMjsgICBzMiA9IFJvdDY0KHMyLDQzKTsg
ICBzMSArPSBzMzsKLSAgICAgIHMzICs9IGRhdGFbM107ICAgczUgXj0gczE7ICBzMiBePSBzMzsg
ICBzMyA9IFJvdDY0KHMzLDMxKTsgICBzMiArPSBzNDsKLSAgICAgIHM0ICs9IGRhdGFbNF07ICAg
czYgXj0gczI7ICBzMyBePSBzNDsgICBzNCA9IFJvdDY0KHM0LDE3KTsgICBzMyArPSBzNTsKLSAg
ICAgIHM1ICs9IGRhdGFbNV07ICAgczcgXj0gczM7ICBzNCBePSBzNTsgICBzNSA9IFJvdDY0KHM1
LDI4KTsgICBzNCArPSBzNjsKLSAgICAgIHM2ICs9IGRhdGFbNl07ICAgczggXj0gczQ7ICBzNSBe
PSBzNjsgICBzNiA9IFJvdDY0KHM2LDM5KTsgICBzNSArPSBzNzsKLSAgICAgIHM3ICs9IGRhdGFb
N107ICAgczkgXj0gczU7ICBzNiBePSBzNzsgICBzNyA9IFJvdDY0KHM3LDU3KTsgICBzNiArPSBz
ODsKLSAgICAgIHM4ICs9IGRhdGFbOF07ICAgczEwIF49IHM2OyBzNyBePSBzODsgICBzOCA9IFJv
dDY0KHM4LDU1KTsgICBzNyArPSBzOTsKLSAgICAgIHM5ICs9IGRhdGFbOV07ICAgczExIF49IHM3
OyBzOCBePSBzOTsgICBzOSA9IFJvdDY0KHM5LDU0KTsgICBzOCArPSBzMTA7Ci0gICAgICBzMTAg
Kz0gZGF0YVsxMF07IHMwIF49IHM4OyAgczkgXj0gczEwOyAgczEwID0gUm90NjQoczEwLDIyKTsg
czkgKz0gczExOwotICAgICAgczExICs9IGRhdGFbMTFdOyBzMSBePSBzOTsgIHMxMCBePSBzMTE7
IHMxMSA9IFJvdDY0KHMxMSw0Nik7IHMxMCArPSBzMDsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8v
IE1peCBhbGwgMTIgaW5wdXRzIHRvZ2V0aGVyIHNvIHRoYXQgaDAsIGgxIGFyZSBhIGhhc2ggb2Yg
dGhlbSBhbGwuCi0gICAgLy8KLSAgICAvLyBGb3IgdHdvIGlucHV0cyBkaWZmZXJpbmcgaW4ganVz
dCB0aGUgaW5wdXQgYml0cwotICAgIC8vIFdoZXJlICJkaWZmZXIiIG1lYW5zIHhvciBvciBzdWJ0
cmFjdGlvbgotICAgIC8vIEFuZCB0aGUgYmFzZSB2YWx1ZSBpcyByYW5kb20sIG9yIGEgY291bnRp
bmcgdmFsdWUgc3RhcnRpbmcgYXQgdGhhdCBiaXQKLSAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHdp
bGwgaGF2ZSBlYWNoIGJpdCBvZiBoMCwgaDEgZmxpcAotICAgIC8vIEZvciBldmVyeSBpbnB1dCBi
aXQsCi0gICAgLy8gd2l0aCBwcm9iYWJpbGl0eSA1MCArLSAuMyUKLSAgICAvLyBGb3IgZXZlcnkg
cGFpciBvZiBpbnB1dCBiaXRzLAotICAgIC8vIHdpdGggcHJvYmFiaWxpdHkgNTAgKy0gMyUKLSAg
ICAvLwotICAgIC8vIFRoaXMgZG9lcyBub3QgcmVseSBvbiB0aGUgbGFzdCBNaXgoKSBjYWxsIGhh
dmluZyBhbHJlYWR5IG1peGVkIHNvbWUuCi0gICAgLy8gVHdvIGl0ZXJhdGlvbnMgd2FzIGFsbW9z
dCBnb29kIGVub3VnaCBmb3IgYSA2NC1iaXQgcmVzdWx0LCBidXQgYQotICAgIC8vIDEyOC1iaXQg
cmVzdWx0IGlzIHJlcG9ydGVkLCBzbyBFbmQoKSBkb2VzIHRocmVlIGl0ZXJhdGlvbnMuCi0gICAg
Ly8KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgRW5kUGFydGlhbCgKLSAgICAgICAgdWludDY0X3Qg
JmgwLCB1aW50NjRfdCAmaDEsIHVpbnQ2NF90ICZoMiwgdWludDY0X3QgJmgzLAotICAgICAgICB1
aW50NjRfdCAmaDQsIHVpbnQ2NF90ICZoNSwgdWludDY0X3QgJmg2LCB1aW50NjRfdCAmaDcsCi0g
ICAgICAgIHVpbnQ2NF90ICZoOCwgdWludDY0X3QgJmg5LCB1aW50NjRfdCAmaDEwLHVpbnQ2NF90
ICZoMTEpCi0gICAgewotICAgICAgICBoMTErPSBoMTsgICAgaDIgXj0gaDExOyAgIGgxID0gUm90
NjQoaDEsNDQpOwotICAgICAgICBoMCArPSBoMjsgICAgaDMgXj0gaDA7ICAgIGgyID0gUm90NjQo
aDIsMTUpOwotICAgICAgICBoMSArPSBoMzsgICAgaDQgXj0gaDE7ICAgIGgzID0gUm90NjQoaDMs
MzQpOwotICAgICAgICBoMiArPSBoNDsgICAgaDUgXj0gaDI7ICAgIGg0ID0gUm90NjQoaDQsMjEp
OwotICAgICAgICBoMyArPSBoNTsgICAgaDYgXj0gaDM7ICAgIGg1ID0gUm90NjQoaDUsMzgpOwot
ICAgICAgICBoNCArPSBoNjsgICAgaDcgXj0gaDQ7ICAgIGg2ID0gUm90NjQoaDYsMzMpOwotICAg
ICAgICBoNSArPSBoNzsgICAgaDggXj0gaDU7ICAgIGg3ID0gUm90NjQoaDcsMTApOwotICAgICAg
ICBoNiArPSBoODsgICAgaDkgXj0gaDY7ICAgIGg4ID0gUm90NjQoaDgsMTMpOwotICAgICAgICBo
NyArPSBoOTsgICAgaDEwXj0gaDc7ICAgIGg5ID0gUm90NjQoaDksMzgpOwotICAgICAgICBoOCAr
PSBoMTA7ICAgaDExXj0gaDg7ICAgIGgxMD0gUm90NjQoaDEwLDUzKTsKLSAgICAgICAgaDkgKz0g
aDExOyAgIGgwIF49IGg5OyAgICBoMTE9IFJvdDY0KGgxMSw0Mik7Ci0gICAgICAgIGgxMCs9IGgw
OyAgICBoMSBePSBoMTA7ICAgaDAgPSBSb3Q2NChoMCw1NCk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGlubGluZSB2b2lkIEVuZCgKLSAgICAgICAgdWludDY0X3QgJmgwLCB1aW50NjRfdCAmaDEsIHVp
bnQ2NF90ICZoMiwgdWludDY0X3QgJmgzLAotICAgICAgICB1aW50NjRfdCAmaDQsIHVpbnQ2NF90
ICZoNSwgdWludDY0X3QgJmg2LCB1aW50NjRfdCAmaDcsCi0gICAgICAgIHVpbnQ2NF90ICZoOCwg
dWludDY0X3QgJmg5LCB1aW50NjRfdCAmaDEwLHVpbnQ2NF90ICZoMTEpCi0gICAgewotICAgICAg
ICBFbmRQYXJ0aWFsKGgwLGgxLGgyLGgzLGg0LGg1LGg2LGg3LGg4LGg5LGgxMCxoMTEpOwotICAg
ICAgICBFbmRQYXJ0aWFsKGgwLGgxLGgyLGgzLGg0LGg1LGg2LGg3LGg4LGg5LGgxMCxoMTEpOwot
ICAgICAgICBFbmRQYXJ0aWFsKGgwLGgxLGgyLGgzLGg0LGg1LGg2LGg3LGg4LGg5LGgxMCxoMTEp
OwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gVGhlIGdvYWwgaXMgZm9yIGVhY2ggYml0IG9mIHRo
ZSBpbnB1dCB0byBleHBhbmQgaW50byAxMjggYml0cyBvZgotICAgIC8vICAgYXBwYXJlbnQgZW50
cm9weSBiZWZvcmUgaXQgaXMgZnVsbHkgb3ZlcndyaXR0ZW4uCi0gICAgLy8gbiB0cmlhbHMgYm90
aCBzZXQgYW5kIGNsZWFyZWQgYXQgbGVhc3QgbSBiaXRzIG9mIGgwIGgxIGgyIGgzCi0gICAgLy8g
ICBuOiAyICAgbTogMjkKLSAgICAvLyAgIG46IDMgICBtOiA0NgotICAgIC8vICAgbjogNCAgIG06
IDU3Ci0gICAgLy8gICBuOiA1ICAgbTogMTA3Ci0gICAgLy8gICBuOiA2ICAgbTogMTQ2Ci0gICAg
Ly8gICBuOiA3ICAgbTogMTUyCi0gICAgLy8gd2hlbiBydW4gZm9yd2FyZHMgb3IgYmFja3dhcmRz
Ci0gICAgLy8gZm9yIGFsbCAxLWJpdCBhbmQgMi1iaXQgZGlmZnMKLSAgICAvLyB3aXRoIGRpZmZz
IGRlZmluZWQgYnkgZWl0aGVyIHhvciBvciBzdWJ0cmFjdGlvbgotICAgIC8vIHdpdGggYSBiYXNl
IG9mIGFsbCB6ZXJvcyBwbHVzIGEgY291bnRlciwgb3IgcGx1cyBhbm90aGVyIGJpdCwgb3IgcmFu
ZG9tCi0gICAgLy8KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgU2hvcnRNaXgodWludDY0X3QgJmgw
LCB1aW50NjRfdCAmaDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90
ICZoMiwgdWludDY0X3QgJmgzKQotICAgIHsKLSAgICAgICAgaDIgPSBSb3Q2NChoMiw1MCk7ICBo
MiArPSBoMzsgIGgwIF49IGgyOwotICAgICAgICBoMyA9IFJvdDY0KGgzLDUyKTsgIGgzICs9IGgw
OyAgaDEgXj0gaDM7Ci0gICAgICAgIGgwID0gUm90NjQoaDAsMzApOyAgaDAgKz0gaDE7ICBoMiBe
PSBoMDsKLSAgICAgICAgaDEgPSBSb3Q2NChoMSw0MSk7ICBoMSArPSBoMjsgIGgzIF49IGgxOwot
ICAgICAgICBoMiA9IFJvdDY0KGgyLDU0KTsgIGgyICs9IGgzOyAgaDAgXj0gaDI7Ci0gICAgICAg
IGgzID0gUm90NjQoaDMsNDgpOyAgaDMgKz0gaDA7ICBoMSBePSBoMzsKLSAgICAgICAgaDAgPSBS
b3Q2NChoMCwzOCk7ICBoMCArPSBoMTsgIGgyIF49IGgwOwotICAgICAgICBoMSA9IFJvdDY0KGgx
LDM3KTsgIGgxICs9IGgyOyAgaDMgXj0gaDE7Ci0gICAgICAgIGgyID0gUm90NjQoaDIsNjIpOyAg
aDIgKz0gaDM7ICBoMCBePSBoMjsKLSAgICAgICAgaDMgPSBSb3Q2NChoMywzNCk7ICBoMyArPSBo
MDsgIGgxIF49IGgzOwotICAgICAgICBoMCA9IFJvdDY0KGgwLDUpOyAgIGgwICs9IGgxOyAgaDIg
Xj0gaDA7Ci0gICAgICAgIGgxID0gUm90NjQoaDEsMzYpOyAgaDEgKz0gaDI7ICBoMyBePSBoMTsK
LSAgICB9Ci0KLSAgICAvLwotICAgIC8vIE1peCBhbGwgNCBpbnB1dHMgdG9nZXRoZXIgc28gdGhh
dCBoMCwgaDEgYXJlIGEgaGFzaCBvZiB0aGVtIGFsbC4KLSAgICAvLwotICAgIC8vIEZvciB0d28g
aW5wdXRzIGRpZmZlcmluZyBpbiBqdXN0IHRoZSBpbnB1dCBiaXRzCi0gICAgLy8gV2hlcmUgImRp
ZmZlciIgbWVhbnMgeG9yIG9yIHN1YnRyYWN0aW9uCi0gICAgLy8gQW5kIHRoZSBiYXNlIHZhbHVl
IGlzIHJhbmRvbSwgb3IgYSBjb3VudGluZyB2YWx1ZSBzdGFydGluZyBhdCB0aGF0IGJpdAotICAg
IC8vIFRoZSBmaW5hbCByZXN1bHQgd2lsbCBoYXZlIGVhY2ggYml0IG9mIGgwLCBoMSBmbGlwCi0g
ICAgLy8gRm9yIGV2ZXJ5IGlucHV0IGJpdCwKLSAgICAvLyB3aXRoIHByb2JhYmlsaXR5IDUwICst
IC4zJSAoaXQgaXMgcHJvYmFibHkgYmV0dGVyIHRoYW4gdGhhdCkKLSAgICAvLyBGb3IgZXZlcnkg
cGFpciBvZiBpbnB1dCBiaXRzLAotICAgIC8vIHdpdGggcHJvYmFiaWxpdHkgNTAgKy0gLjc1JSAo
dGhlIHdvcnN0IGNhc2UgaXMgYXBwcm94aW1hdGVseSB0aGF0KQotICAgIC8vCi0gICAgc3RhdGlj
IGlubGluZSB2b2lkIFNob3J0RW5kKHVpbnQ2NF90ICZoMCwgdWludDY0X3QgJmgxLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCAmaDIsIHVpbnQ2NF90ICZoMykKLSAg
ICB7Ci0gICAgICAgIGgzIF49IGgyOyAgaDIgPSBSb3Q2NChoMiwxNSk7ICBoMyArPSBoMjsKLSAg
ICAgICAgaDAgXj0gaDM7ICBoMyA9IFJvdDY0KGgzLDUyKTsgIGgwICs9IGgzOwotICAgICAgICBo
MSBePSBoMDsgIGgwID0gUm90NjQoaDAsMjYpOyAgaDEgKz0gaDA7Ci0gICAgICAgIGgyIF49IGgx
OyAgaDEgPSBSb3Q2NChoMSw1MSk7ICBoMiArPSBoMTsKLSAgICAgICAgaDMgXj0gaDI7ICBoMiA9
IFJvdDY0KGgyLDI4KTsgIGgzICs9IGgyOwotICAgICAgICBoMCBePSBoMzsgIGgzID0gUm90NjQo
aDMsOSk7ICAgaDAgKz0gaDM7Ci0gICAgICAgIGgxIF49IGgwOyAgaDAgPSBSb3Q2NChoMCw0Nyk7
ICBoMSArPSBoMDsKLSAgICAgICAgaDIgXj0gaDE7ICBoMSA9IFJvdDY0KGgxLDU0KTsgIGgyICs9
IGgxOwotICAgICAgICBoMyBePSBoMjsgIGgyID0gUm90NjQoaDIsMzIpOyAgaDMgKz0gaDI7Ci0g
ICAgICAgIGgwIF49IGgzOyAgaDMgPSBSb3Q2NChoMywyNSk7ICBoMCArPSBoMzsKLSAgICAgICAg
aDEgXj0gaDA7ICBoMCA9IFJvdDY0KGgwLDYzKTsgIGgxICs9IGgwOwotICAgIH0KLQotcHJpdmF0
ZToKLQotICAgIC8vCi0gICAgLy8gU2hvcnQgaXMgdXNlZCBmb3IgbWVzc2FnZXMgdW5kZXIgMTky
IGJ5dGVzIGluIGxlbmd0aAotICAgIC8vIFNob3J0IGhhcyBhIGxvdyBzdGFydHVwIGNvc3QsIHRo
ZSBub3JtYWwgbW9kZSBpcyBnb29kIGZvciBsb25nCi0gICAgLy8ga2V5cywgdGhlIGNvc3QgY3Jv
c3NvdmVyIGlzIGF0IGFib3V0IDE5MiBieXRlcy4gIFRoZSB0d28gbW9kZXMgd2VyZQotICAgIC8v
IGhlbGQgdG8gdGhlIHNhbWUgcXVhbGl0eSBiYXIuCi0gICAgLy8KLSAgICBzdGF0aWMgdm9pZCBT
aG9ydCgKLSAgICAgICAgY29uc3Qgdm9pZCAqbWVzc2FnZSwgIC8vIG1lc3NhZ2UgKGJ5dGUgYXJy
YXksIG5vdCBuZWNlc3NhcmlseSBhbGlnbmVkKQotICAgICAgICBzaXplX3QgbGVuZ3RoLCAgICAg
ICAgLy8gbGVuZ3RoIG9mIG1lc3NhZ2UgKGluIGJ5dGVzKQotICAgICAgICB1aW50NjRfdCAqaGFz
aDEsICAgICAgLy8gaW4vb3V0OiBpbiB0aGUgc2VlZCwgb3V0IHRoZSBoYXNoIHZhbHVlCi0gICAg
ICAgIHVpbnQ2NF90ICpoYXNoMik7ICAgICAvLyBpbi9vdXQ6IGluIHRoZSBzZWVkLCBvdXQgdGhl
IGhhc2ggdmFsdWUKLQotICAgIC8vIG51bWJlciBvZiB1aW50NjRfdCdzIGluIGludGVybmFsIHN0
YXRlCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzY19udW1WYXJzID0gMTI7Ci0KLSAgICAvLyBz
aXplIG9mIHRoZSBpbnRlcm5hbCBzdGF0ZQotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2NfYmxv
Y2tTaXplID0gc2NfbnVtVmFycyo4OwotCi0gICAgLy8gc2l6ZSBvZiBidWZmZXIgb2YgdW5oYXNo
ZWQgZGF0YSwgaW4gYnl0ZXMKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNjX2J1ZlNpemUgPSAy
KnNjX2Jsb2NrU2l6ZTsKLQotICAgIC8vCi0gICAgLy8gc2NfY29uc3Q6IGEgY29uc3RhbnQgd2hp
Y2g6Ci0gICAgLy8gICogaXMgbm90IHplcm8KLSAgICAvLyAgKiBpcyBvZGQKLSAgICAvLyAgKiBp
cyBhIG5vdC12ZXJ5LXJlZ3VsYXIgbWl4IG9mIDEncyBhbmQgMCdzCi0gICAgLy8gICogZG9lcyBu
b3QgbmVlZCBhbnkgb3RoZXIgc3BlY2lhbCBtYXRoZW1hdGljYWwgcHJvcGVydGllcwotICAgIC8v
Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHNjX2NvbnN0ID0gMHhkZWFkYmVlZmRlYWRiZWVm
VUxMOwotCi0gICAgdWludDY0X3QgbV9kYXRhWzIqc2NfbnVtVmFyc107ICAvLyB1bmhhc2hlZCBk
YXRhLCBmb3IgcGFydGlhbCBtZXNzYWdlcwotICAgIHVpbnQ2NF90IG1fc3RhdGVbc2NfbnVtVmFy
c107ICAgLy8gaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGhhc2gKLSAgICBzaXplX3QgbV9sZW5ndGg7
ICAgICAgICAgICAgICAgIC8vIHRvdGFsIGxlbmd0aCBvZiB0aGUgaW5wdXQgc28gZmFyCi0gICAg
dWludDhfdCAgbV9yZW1haW5kZXI7ICAgICAgICAgICAvLyBsZW5ndGggb2YgdW5oYXNoZWQgZGF0
YSBzdGFzaGVkIGluIG1fZGF0YQotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGhhc2gKLX0gIC8vIG5h
bWVzcGFjZSBmb2xseQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvaGFzaC9TcG9va3lIYXNoVjIuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2ZvbGx5L2hhc2gvU3Bvb2t5SGFzaFYyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDljYzM0NzRhNjhhMGY3ZDQyYTE4ZDUyODM3MTgzMWFjNDE5NDA2ZjYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvaGFzaC9TcG9va3lIYXNoVjIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ss
IEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24g
Mi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu
c2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3
IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhP
VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
ciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
Z292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vu
c2UuCi0gKi8KLQotLy8gVGhpcyBpcyB2ZXJzaW9uIDIgb2YgU3Bvb2t5SGFzaCwgaW5jb21wYXRp
YmxlIHdpdGggdmVyc2lvbiAxLgotLy8KLS8vIFNwb29reUhhc2g6IGEgMTI4LWJpdCBub25jcnlw
dG9ncmFwaGljIGhhc2ggZnVuY3Rpb24KLS8vIEJ5IEJvYiBKZW5raW5zLCBwdWJsaWMgZG9tYWlu
Ci0vLyAgIE9jdCAzMSAyMDEwOiBhbHBoYSwgZnJhbWV3b3JrICsgU3Bvb2t5SGFzaDo6TWl4IGFw
cGVhcnMgcmlnaHQKLS8vICAgT2N0IDMxIDIwMTE6IGFscGhhIGFnYWluLCBNaXggb25seSBnb29k
IHRvIDJeXjY5IGJ1dCByZXN0IGFwcGVhcnMgcmlnaHQKLS8vICAgRGVjIDMxIDIwMTE6IGJldGEs
IGltcHJvdmVkIE1peCwgdGVzdGVkIGl0IGZvciAyLWJpdCBkZWx0YXMKLS8vICAgRmViICAyIDIw
MTI6IHByb2R1Y3Rpb24sIHNhbWUgYml0cyBhcyBiZXRhCi0vLyAgIEZlYiAgNSAyMDEyOiBhZGp1
c3RlZCBkZWZpbml0aW9ucyBvZiB1aW50KiB0byBiZSBtb3JlIHBvcnRhYmxlCi0vLyAgIE1hciAz
MCAyMDEyOiAzIGJ5dGVzL2N5Y2xlLCBub3QgNC4gIEFscGhhIHdhcyA0IGJ1dCB3YXNuJ3QgdGhv
cm91Z2ggZW5vdWdoLgotLy8gICBBdWd1c3QgNSAyMDEyOiBTcG9va3lWMiAoZGlmZmVyZW50IHJl
c3VsdHMpCi0vLwotLy8gVXAgdG8gMyBieXRlcy9jeWNsZSBmb3IgbG9uZyBtZXNzYWdlcy4gIFJl
YXNvbmFibHkgZmFzdCBmb3Igc2hvcnQgbWVzc2FnZXMuCi0vLyBBbGwgMSBvciAyIGJpdCBkZWx0
YXMgYWNoaWV2ZSBhdmFsYW5jaGUgd2l0aGluIDElIGJpYXMgcGVyIG91dHB1dCBiaXQuCi0vLwot
Ly8gVGhpcyB3YXMgZGV2ZWxvcGVkIGZvciBhbmQgdGVzdGVkIG9uIDY0LWJpdCB4ODYtY29tcGF0
aWJsZSBwcm9jZXNzb3JzLgotLy8gSXQgYXNzdW1lcyB0aGUgcHJvY2Vzc29yIGlzIGxpdHRsZS1l
bmRpYW4uICBUaGVyZSBpcyBhIG1hY3JvCi0vLyBjb250cm9sbGluZyB3aGV0aGVyIHVuYWxpZ25l
ZCByZWFkcyBhcmUgYWxsb3dlZCAoYnkgZGVmYXVsdCB0aGV5IGFyZSkuCi0vLyBUaGlzIHNob3Vs
ZCBiZSBhbiBlcXVhbGx5IGdvb2QgaGFzaCBvbiBiaWctZW5kaWFuIG1hY2hpbmVzLCBidXQgaXQg
d2lsbAotLy8gY29tcHV0ZSBkaWZmZXJlbnQgcmVzdWx0cyBvbiB0aGVtIHRoYW4gb24gbGl0dGxl
LWVuZGlhbiBtYWNoaW5lcy4KLS8vCi0vLyBHb29nbGUncyBDaXR5SGFzaCBoYXMgc2ltaWxhciBz
cGVjcyB0byBTcG9va3lIYXNoLCBhbmQgQ2l0eUhhc2ggaXMgZmFzdGVyCi0vLyBvbiBuZXcgSW50
ZWwgYm94ZXMuICBNRDQgYW5kIE1ENSBhbHNvIGhhdmUgc2ltaWxhciBzcGVjcywgYnV0IHRoZXkg
YXJlIG9yZGVycwotLy8gb2YgbWFnbml0dWRlIHNsb3dlci4gIENSQ3MgYXJlIHR3byBvciBtb3Jl
IHRpbWVzIHNsb3dlciwgYnV0IHVubGlrZQotLy8gU3Bvb2t5SGFzaCwgdGhleSBoYXZlIG5pY2Ug
bWF0aCBmb3IgY29tYmluaW5nIHRoZSBDUkNzIG9mIHBpZWNlcyB0byBmb3JtCi0vLyB0aGUgQ1JD
cyBvZiB3aG9sZXMuICBUaGVyZSBhcmUgYWxzbyBjcnlwdG9ncmFwaGljIGhhc2hlcywgYnV0IHRo
b3NlIGFyZSBldmVuCi0vLyBzbG93ZXIgdGhhbiBNRDUuCi0vLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8Y3N0ZGludD4KLQotbmFtZXNwYWNlIGZvbGx5
IHsKLW5hbWVzcGFjZSBoYXNoIHsKLQotY2xhc3MgU3Bvb2t5SGFzaFYyCi17Ci1wdWJsaWM6Ci0g
ICAgLy8KLSAgICAvLyBTcG9va3lIYXNoOiBoYXNoIGEgc2luZ2xlIG1lc3NhZ2UgaW4gb25lIGNh
bGwsIHByb2R1Y2UgMTI4LWJpdCBvdXRwdXQKLSAgICAvLwotICAgIHN0YXRpYyB2b2lkIEhhc2gx
MjgoCi0gICAgICAgIGNvbnN0IHZvaWQgKm1lc3NhZ2UsICAvLyBtZXNzYWdlIHRvIGhhc2gKLSAg
ICAgICAgc2l6ZV90IGxlbmd0aCwgICAgICAgIC8vIGxlbmd0aCBvZiBtZXNzYWdlIGluIGJ5dGVz
Ci0gICAgICAgIHVpbnQ2NF90ICpoYXNoMSwgICAgICAgIC8vIGluL291dDogaW4gc2VlZCAxLCBv
dXQgaGFzaCB2YWx1ZSAxCi0gICAgICAgIHVpbnQ2NF90ICpoYXNoMik7ICAgICAgIC8vIGluL291
dDogaW4gc2VlZCAyLCBvdXQgaGFzaCB2YWx1ZSAyCi0KLSAgICAvLwotICAgIC8vIEhhc2g2NDog
aGFzaCBhIHNpbmdsZSBtZXNzYWdlIGluIG9uZSBjYWxsLCByZXR1cm4gNjQtYml0IG91dHB1dAot
ICAgIC8vCi0gICAgc3RhdGljIHVpbnQ2NF90IEhhc2g2NCgKLSAgICAgICAgY29uc3Qgdm9pZCAq
bWVzc2FnZSwgIC8vIG1lc3NhZ2UgdG8gaGFzaAotICAgICAgICBzaXplX3QgbGVuZ3RoLCAgICAg
ICAgLy8gbGVuZ3RoIG9mIG1lc3NhZ2UgaW4gYnl0ZXMKLSAgICAgICAgdWludDY0X3Qgc2VlZCkg
ICAgICAgICAgLy8gc2VlZAotICAgIHsKLSAgICAgICAgdWludDY0X3QgaGFzaDEgPSBzZWVkOwot
ICAgICAgICBIYXNoMTI4KG1lc3NhZ2UsIGxlbmd0aCwgJmhhc2gxLCAmc2VlZCk7Ci0gICAgICAg
IHJldHVybiBoYXNoMTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIEhhc2gzMjogaGFzaCBhIHNp
bmdsZSBtZXNzYWdlIGluIG9uZSBjYWxsLCBwcm9kdWNlIDMyLWJpdCBvdXRwdXQKLSAgICAvLwot
ICAgIHN0YXRpYyB1aW50MzJfdCBIYXNoMzIoCi0gICAgICAgIGNvbnN0IHZvaWQgKm1lc3NhZ2Us
ICAvLyBtZXNzYWdlIHRvIGhhc2gKLSAgICAgICAgc2l6ZV90IGxlbmd0aCwgICAgICAgIC8vIGxl
bmd0aCBvZiBtZXNzYWdlIGluIGJ5dGVzCi0gICAgICAgIHVpbnQzMl90IHNlZWQpICAgICAgICAg
IC8vIHNlZWQKLSAgICB7Ci0gICAgICAgIHVpbnQ2NF90IGhhc2gxID0gc2VlZCwgaGFzaDIgPSBz
ZWVkOwotICAgICAgICBIYXNoMTI4KG1lc3NhZ2UsIGxlbmd0aCwgJmhhc2gxLCAmaGFzaDIpOwot
ICAgICAgICByZXR1cm4gKHVpbnQzMl90KWhhc2gxOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8g
SW5pdDogaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBvZiBhIFNwb29reUhhc2gKLSAgICAvLwotICAg
IHZvaWQgSW5pdCgKLSAgICAgICAgdWludDY0X3Qgc2VlZDEsICAgICAgIC8vIGFueSA2NC1iaXQg
dmFsdWUgd2lsbCBkbywgaW5jbHVkaW5nIDAKLSAgICAgICAgdWludDY0X3Qgc2VlZDIpOyAgICAg
IC8vIGRpZmZlcmVudCBzZWVkcyBwcm9kdWNlIGluZGVwZW5kZW50IGhhc2hlcwotCi0gICAgLy8K
LSAgICAvLyBVcGRhdGU6IGFkZCBhIHBpZWNlIG9mIGEgbWVzc2FnZSB0byBhIFNwb29reUhhc2gg
c3RhdGUKLSAgICAvLwotICAgIHZvaWQgVXBkYXRlKAotICAgICAgICBjb25zdCB2b2lkICptZXNz
YWdlLCAgLy8gbWVzc2FnZSBmcmFnbWVudAotICAgICAgICBzaXplX3QgbGVuZ3RoKTsgICAgICAg
Ly8gbGVuZ3RoIG9mIG1lc3NhZ2UgZnJhZ21lbnQgaW4gYnl0ZXMKLQotCi0gICAgLy8KLSAgICAv
LyBGaW5hbDogY29tcHV0ZSB0aGUgaGFzaCBmb3IgdGhlIGN1cnJlbnQgU3Bvb2t5SGFzaCBzdGF0
ZQotICAgIC8vCi0gICAgLy8gVGhpcyBkb2VzIG5vdCBtb2RpZnkgdGhlIHN0YXRlOyB5b3UgY2Fu
IGtlZXAgdXBkYXRpbmcgaXQgYWZ0ZXJ3YXJkCi0gICAgLy8KLSAgICAvLyBUaGUgcmVzdWx0IGlz
IHRoZSBzYW1lIGFzIGlmIFNwb29reUhhc2goKSBoYWQgYmVlbiBjYWxsZWQgd2l0aAotICAgIC8v
IGFsbCB0aGUgcGllY2VzIGNvbmNhdGVuYXRlZCBpbnRvIG9uZSBtZXNzYWdlLgotICAgIC8vCi0g
ICAgdm9pZCBGaW5hbCgKLSAgICAgICAgdWludDY0X3QgKmhhc2gxLCAgICAgICAgICAvLyBvdXQg
b25seTogZmlyc3QgNjQgYml0cyBvZiBoYXNoIHZhbHVlLgotICAgICAgICB1aW50NjRfdCAqaGFz
aDIpIGNvbnN0OyAgIC8vIG91dCBvbmx5OiBzZWNvbmQgNjQgYml0cyBvZiBoYXNoIHZhbHVlLgot
Ci0gICAgLy8KLSAgICAvLyBsZWZ0IHJvdGF0ZSBhIDY0LWJpdCB2YWx1ZSBieSBrIGJ5dGVzCi0g
ICAgLy8KLSAgICBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IFJvdDY0KHVpbnQ2NF90IHgsIGludCBr
KQotICAgIHsKLSAgICAgICAgcmV0dXJuICh4IDw8IGspIHwgKHggPj4gKDY0IC0gaykpOwotICAg
IH0KLQotICAgIC8vCi0gICAgLy8gVGhpcyBpcyB1c2VkIGlmIHRoZSBpbnB1dCBpcyA5NiBieXRl
cyBsb25nIG9yIGxvbmdlci4KLSAgICAvLwotICAgIC8vIFRoZSBpbnRlcm5hbCBzdGF0ZSBpcyBm
dWxseSBvdmVyd3JpdHRlbiBldmVyeSA5NiBieXRlcy4KLSAgICAvLyBFdmVyeSBpbnB1dCBiaXQg
YXBwZWFycyB0byBjYXVzZSBhdCBsZWFzdCAxMjggYml0cyBvZiBlbnRyb3B5Ci0gICAgLy8gYmVm
b3JlIDk2IG90aGVyIGJ5dGVzIGFyZSBjb21iaW5lZCwgd2hlbiBydW4gZm9yd2FyZCBvciBiYWNr
d2FyZAotICAgIC8vICAgRm9yIGV2ZXJ5IGlucHV0IGJpdCwKLSAgICAvLyAgIFR3byBpbnB1dHMg
ZGlmZmVyaW5nIGluIGp1c3QgdGhhdCBpbnB1dCBiaXQKLSAgICAvLyAgIFdoZXJlICJkaWZmZXIi
IG1lYW5zIHhvciBvciBzdWJ0cmFjdGlvbgotICAgIC8vICAgQW5kIHRoZSBiYXNlIHZhbHVlIGlz
IHJhbmRvbQotICAgIC8vICAgV2hlbiBydW4gZm9yd2FyZCBvciBiYWNrd2FyZHMgb25lIE1peAot
ICAgIC8vIEkgdHJpZWQgMyBwYWlycyBvZiBlYWNoOyB0aGV5IGFsbCBkaWZmZXJlZCBieSBhdCBs
ZWFzdCAyMTIgYml0cy4KLSAgICAvLwotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBNaXgoCi0gICAg
ICAgIGNvbnN0IHVpbnQ2NF90ICpkYXRhLAotICAgICAgICB1aW50NjRfdCAmczAsIHVpbnQ2NF90
ICZzMSwgdWludDY0X3QgJnMyLCB1aW50NjRfdCAmczMsCi0gICAgICAgIHVpbnQ2NF90ICZzNCwg
dWludDY0X3QgJnM1LCB1aW50NjRfdCAmczYsIHVpbnQ2NF90ICZzNywKLSAgICAgICAgdWludDY0
X3QgJnM4LCB1aW50NjRfdCAmczksIHVpbnQ2NF90ICZzMTAsdWludDY0X3QgJnMxMSkKLSAgICB7
Ci0gICAgICBzMCArPSBkYXRhWzBdOyAgIHMyIF49IHMxMDsgczExIF49IHMwOyAgczAgPSBSb3Q2
NChzMCwxMSk7ICAgczExICs9IHMxOwotICAgICAgczEgKz0gZGF0YVsxXTsgICBzMyBePSBzMTE7
IHMwIF49IHMxOyAgIHMxID0gUm90NjQoczEsMzIpOyAgIHMwICs9IHMyOwotICAgICAgczIgKz0g
ZGF0YVsyXTsgICBzNCBePSBzMDsgIHMxIF49IHMyOyAgIHMyID0gUm90NjQoczIsNDMpOyAgIHMx
ICs9IHMzOwotICAgICAgczMgKz0gZGF0YVszXTsgICBzNSBePSBzMTsgIHMyIF49IHMzOyAgIHMz
ID0gUm90NjQoczMsMzEpOyAgIHMyICs9IHM0OwotICAgICAgczQgKz0gZGF0YVs0XTsgICBzNiBe
PSBzMjsgIHMzIF49IHM0OyAgIHM0ID0gUm90NjQoczQsMTcpOyAgIHMzICs9IHM1OwotICAgICAg
czUgKz0gZGF0YVs1XTsgICBzNyBePSBzMzsgIHM0IF49IHM1OyAgIHM1ID0gUm90NjQoczUsMjgp
OyAgIHM0ICs9IHM2OwotICAgICAgczYgKz0gZGF0YVs2XTsgICBzOCBePSBzNDsgIHM1IF49IHM2
OyAgIHM2ID0gUm90NjQoczYsMzkpOyAgIHM1ICs9IHM3OwotICAgICAgczcgKz0gZGF0YVs3XTsg
ICBzOSBePSBzNTsgIHM2IF49IHM3OyAgIHM3ID0gUm90NjQoczcsNTcpOyAgIHM2ICs9IHM4Owot
ICAgICAgczggKz0gZGF0YVs4XTsgICBzMTAgXj0gczY7IHM3IF49IHM4OyAgIHM4ID0gUm90NjQo
czgsNTUpOyAgIHM3ICs9IHM5OwotICAgICAgczkgKz0gZGF0YVs5XTsgICBzMTEgXj0gczc7IHM4
IF49IHM5OyAgIHM5ID0gUm90NjQoczksNTQpOyAgIHM4ICs9IHMxMDsKLSAgICAgIHMxMCArPSBk
YXRhWzEwXTsgczAgXj0gczg7ICBzOSBePSBzMTA7ICBzMTAgPSBSb3Q2NChzMTAsMjIpOyBzOSAr
PSBzMTE7Ci0gICAgICBzMTEgKz0gZGF0YVsxMV07IHMxIF49IHM5OyAgczEwIF49IHMxMTsgczEx
ID0gUm90NjQoczExLDQ2KTsgczEwICs9IHMwOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gTWl4
IGFsbCAxMiBpbnB1dHMgdG9nZXRoZXIgc28gdGhhdCBoMCwgaDEgYXJlIGEgaGFzaCBvZiB0aGVt
IGFsbC4KLSAgICAvLwotICAgIC8vIEZvciB0d28gaW5wdXRzIGRpZmZlcmluZyBpbiBqdXN0IHRo
ZSBpbnB1dCBiaXRzCi0gICAgLy8gV2hlcmUgImRpZmZlciIgbWVhbnMgeG9yIG9yIHN1YnRyYWN0
aW9uCi0gICAgLy8gQW5kIHRoZSBiYXNlIHZhbHVlIGlzIHJhbmRvbSwgb3IgYSBjb3VudGluZyB2
YWx1ZSBzdGFydGluZyBhdCB0aGF0IGJpdAotICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgd2lsbCBo
YXZlIGVhY2ggYml0IG9mIGgwLCBoMSBmbGlwCi0gICAgLy8gRm9yIGV2ZXJ5IGlucHV0IGJpdCwK
LSAgICAvLyB3aXRoIHByb2JhYmlsaXR5IDUwICstIC4zJQotICAgIC8vIEZvciBldmVyeSBwYWly
IG9mIGlucHV0IGJpdHMsCi0gICAgLy8gd2l0aCBwcm9iYWJpbGl0eSA1MCArLSAzJQotICAgIC8v
Ci0gICAgLy8gVGhpcyBkb2VzIG5vdCByZWx5IG9uIHRoZSBsYXN0IE1peCgpIGNhbGwgaGF2aW5n
IGFscmVhZHkgbWl4ZWQgc29tZS4KLSAgICAvLyBUd28gaXRlcmF0aW9ucyB3YXMgYWxtb3N0IGdv
b2QgZW5vdWdoIGZvciBhIDY0LWJpdCByZXN1bHQsIGJ1dCBhCi0gICAgLy8gMTI4LWJpdCByZXN1
bHQgaXMgcmVwb3J0ZWQsIHNvIEVuZCgpIGRvZXMgdGhyZWUgaXRlcmF0aW9ucy4KLSAgICAvLwot
ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBFbmRQYXJ0aWFsKAotICAgICAgICB1aW50NjRfdCAmaDAs
IHVpbnQ2NF90ICZoMSwgdWludDY0X3QgJmgyLCB1aW50NjRfdCAmaDMsCi0gICAgICAgIHVpbnQ2
NF90ICZoNCwgdWludDY0X3QgJmg1LCB1aW50NjRfdCAmaDYsIHVpbnQ2NF90ICZoNywKLSAgICAg
ICAgdWludDY0X3QgJmg4LCB1aW50NjRfdCAmaDksIHVpbnQ2NF90ICZoMTAsdWludDY0X3QgJmgx
MSkKLSAgICB7Ci0gICAgICAgIGgxMSs9IGgxOyAgICBoMiBePSBoMTE7ICAgaDEgPSBSb3Q2NCho
MSw0NCk7Ci0gICAgICAgIGgwICs9IGgyOyAgICBoMyBePSBoMDsgICAgaDIgPSBSb3Q2NChoMiwx
NSk7Ci0gICAgICAgIGgxICs9IGgzOyAgICBoNCBePSBoMTsgICAgaDMgPSBSb3Q2NChoMywzNCk7
Ci0gICAgICAgIGgyICs9IGg0OyAgICBoNSBePSBoMjsgICAgaDQgPSBSb3Q2NChoNCwyMSk7Ci0g
ICAgICAgIGgzICs9IGg1OyAgICBoNiBePSBoMzsgICAgaDUgPSBSb3Q2NChoNSwzOCk7Ci0gICAg
ICAgIGg0ICs9IGg2OyAgICBoNyBePSBoNDsgICAgaDYgPSBSb3Q2NChoNiwzMyk7Ci0gICAgICAg
IGg1ICs9IGg3OyAgICBoOCBePSBoNTsgICAgaDcgPSBSb3Q2NChoNywxMCk7Ci0gICAgICAgIGg2
ICs9IGg4OyAgICBoOSBePSBoNjsgICAgaDggPSBSb3Q2NChoOCwxMyk7Ci0gICAgICAgIGg3ICs9
IGg5OyAgICBoMTBePSBoNzsgICAgaDkgPSBSb3Q2NChoOSwzOCk7Ci0gICAgICAgIGg4ICs9IGgx
MDsgICBoMTFePSBoODsgICAgaDEwPSBSb3Q2NChoMTAsNTMpOwotICAgICAgICBoOSArPSBoMTE7
ICAgaDAgXj0gaDk7ICAgIGgxMT0gUm90NjQoaDExLDQyKTsKLSAgICAgICAgaDEwKz0gaDA7ICAg
IGgxIF49IGgxMDsgICBoMCA9IFJvdDY0KGgwLDU0KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW5s
aW5lIHZvaWQgRW5kKAotICAgICAgICBjb25zdCB1aW50NjRfdCAqZGF0YSwKLSAgICAgICAgdWlu
dDY0X3QgJmgwLCB1aW50NjRfdCAmaDEsIHVpbnQ2NF90ICZoMiwgdWludDY0X3QgJmgzLAotICAg
ICAgICB1aW50NjRfdCAmaDQsIHVpbnQ2NF90ICZoNSwgdWludDY0X3QgJmg2LCB1aW50NjRfdCAm
aDcsCi0gICAgICAgIHVpbnQ2NF90ICZoOCwgdWludDY0X3QgJmg5LCB1aW50NjRfdCAmaDEwLHVp
bnQ2NF90ICZoMTEpCi0gICAgewotICAgICAgICBoMCArPSBkYXRhWzBdOyAgIGgxICs9IGRhdGFb
MV07ICAgaDIgKz0gZGF0YVsyXTsgICBoMyArPSBkYXRhWzNdOwotICAgICAgICBoNCArPSBkYXRh
WzRdOyAgIGg1ICs9IGRhdGFbNV07ICAgaDYgKz0gZGF0YVs2XTsgICBoNyArPSBkYXRhWzddOwot
ICAgICAgICBoOCArPSBkYXRhWzhdOyAgIGg5ICs9IGRhdGFbOV07ICAgaDEwICs9IGRhdGFbMTBd
OyBoMTEgKz0gZGF0YVsxMV07Ci0gICAgICAgIEVuZFBhcnRpYWwoaDAsaDEsaDIsaDMsaDQsaDUs
aDYsaDcsaDgsaDksaDEwLGgxMSk7Ci0gICAgICAgIEVuZFBhcnRpYWwoaDAsaDEsaDIsaDMsaDQs
aDUsaDYsaDcsaDgsaDksaDEwLGgxMSk7Ci0gICAgICAgIEVuZFBhcnRpYWwoaDAsaDEsaDIsaDMs
aDQsaDUsaDYsaDcsaDgsaDksaDEwLGgxMSk7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBUaGUg
Z29hbCBpcyBmb3IgZWFjaCBiaXQgb2YgdGhlIGlucHV0IHRvIGV4cGFuZCBpbnRvIDEyOCBiaXRz
IG9mCi0gICAgLy8gICBhcHBhcmVudCBlbnRyb3B5IGJlZm9yZSBpdCBpcyBmdWxseSBvdmVyd3Jp
dHRlbi4KLSAgICAvLyBuIHRyaWFscyBib3RoIHNldCBhbmQgY2xlYXJlZCBhdCBsZWFzdCBtIGJp
dHMgb2YgaDAgaDEgaDIgaDMKLSAgICAvLyAgIG46IDIgICBtOiAyOQotICAgIC8vICAgbjogMyAg
IG06IDQ2Ci0gICAgLy8gICBuOiA0ICAgbTogNTcKLSAgICAvLyAgIG46IDUgICBtOiAxMDcKLSAg
ICAvLyAgIG46IDYgICBtOiAxNDYKLSAgICAvLyAgIG46IDcgICBtOiAxNTIKLSAgICAvLyB3aGVu
IHJ1biBmb3J3YXJkcyBvciBiYWNrd2FyZHMKLSAgICAvLyBmb3IgYWxsIDEtYml0IGFuZCAyLWJp
dCBkaWZmcwotICAgIC8vIHdpdGggZGlmZnMgZGVmaW5lZCBieSBlaXRoZXIgeG9yIG9yIHN1YnRy
YWN0aW9uCi0gICAgLy8gd2l0aCBhIGJhc2Ugb2YgYWxsIHplcm9zIHBsdXMgYSBjb3VudGVyLCBv
ciBwbHVzIGFub3RoZXIgYml0LCBvciByYW5kb20KLSAgICAvLwotICAgIHN0YXRpYyBpbmxpbmUg
dm9pZCBTaG9ydE1peCh1aW50NjRfdCAmaDAsIHVpbnQ2NF90ICZoMSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDY0X3QgJmgyLCB1aW50NjRfdCAmaDMpCi0gICAgewotICAg
ICAgICBoMiA9IFJvdDY0KGgyLDUwKTsgIGgyICs9IGgzOyAgaDAgXj0gaDI7Ci0gICAgICAgIGgz
ID0gUm90NjQoaDMsNTIpOyAgaDMgKz0gaDA7ICBoMSBePSBoMzsKLSAgICAgICAgaDAgPSBSb3Q2
NChoMCwzMCk7ICBoMCArPSBoMTsgIGgyIF49IGgwOwotICAgICAgICBoMSA9IFJvdDY0KGgxLDQx
KTsgIGgxICs9IGgyOyAgaDMgXj0gaDE7Ci0gICAgICAgIGgyID0gUm90NjQoaDIsNTQpOyAgaDIg
Kz0gaDM7ICBoMCBePSBoMjsKLSAgICAgICAgaDMgPSBSb3Q2NChoMyw0OCk7ICBoMyArPSBoMDsg
IGgxIF49IGgzOwotICAgICAgICBoMCA9IFJvdDY0KGgwLDM4KTsgIGgwICs9IGgxOyAgaDIgXj0g
aDA7Ci0gICAgICAgIGgxID0gUm90NjQoaDEsMzcpOyAgaDEgKz0gaDI7ICBoMyBePSBoMTsKLSAg
ICAgICAgaDIgPSBSb3Q2NChoMiw2Mik7ICBoMiArPSBoMzsgIGgwIF49IGgyOwotICAgICAgICBo
MyA9IFJvdDY0KGgzLDM0KTsgIGgzICs9IGgwOyAgaDEgXj0gaDM7Ci0gICAgICAgIGgwID0gUm90
NjQoaDAsNSk7ICAgaDAgKz0gaDE7ICBoMiBePSBoMDsKLSAgICAgICAgaDEgPSBSb3Q2NChoMSwz
Nik7ICBoMSArPSBoMjsgIGgzIF49IGgxOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gTWl4IGFs
bCA0IGlucHV0cyB0b2dldGhlciBzbyB0aGF0IGgwLCBoMSBhcmUgYSBoYXNoIG9mIHRoZW0gYWxs
LgotICAgIC8vCi0gICAgLy8gRm9yIHR3byBpbnB1dHMgZGlmZmVyaW5nIGluIGp1c3QgdGhlIGlu
cHV0IGJpdHMKLSAgICAvLyBXaGVyZSAiZGlmZmVyIiBtZWFucyB4b3Igb3Igc3VidHJhY3Rpb24K
LSAgICAvLyBBbmQgdGhlIGJhc2UgdmFsdWUgaXMgcmFuZG9tLCBvciBhIGNvdW50aW5nIHZhbHVl
IHN0YXJ0aW5nIGF0IHRoYXQgYml0Ci0gICAgLy8gVGhlIGZpbmFsIHJlc3VsdCB3aWxsIGhhdmUg
ZWFjaCBiaXQgb2YgaDAsIGgxIGZsaXAKLSAgICAvLyBGb3IgZXZlcnkgaW5wdXQgYml0LAotICAg
IC8vIHdpdGggcHJvYmFiaWxpdHkgNTAgKy0gLjMlIChpdCBpcyBwcm9iYWJseSBiZXR0ZXIgdGhh
biB0aGF0KQotICAgIC8vIEZvciBldmVyeSBwYWlyIG9mIGlucHV0IGJpdHMsCi0gICAgLy8gd2l0
aCBwcm9iYWJpbGl0eSA1MCArLSAuNzUlICh0aGUgd29yc3QgY2FzZSBpcyBhcHByb3hpbWF0ZWx5
IHRoYXQpCi0gICAgLy8KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgU2hvcnRFbmQodWludDY0X3Qg
JmgwLCB1aW50NjRfdCAmaDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2
NF90ICZoMiwgdWludDY0X3QgJmgzKQotICAgIHsKLSAgICAgICAgaDMgXj0gaDI7ICBoMiA9IFJv
dDY0KGgyLDE1KTsgIGgzICs9IGgyOwotICAgICAgICBoMCBePSBoMzsgIGgzID0gUm90NjQoaDMs
NTIpOyAgaDAgKz0gaDM7Ci0gICAgICAgIGgxIF49IGgwOyAgaDAgPSBSb3Q2NChoMCwyNik7ICBo
MSArPSBoMDsKLSAgICAgICAgaDIgXj0gaDE7ICBoMSA9IFJvdDY0KGgxLDUxKTsgIGgyICs9IGgx
OwotICAgICAgICBoMyBePSBoMjsgIGgyID0gUm90NjQoaDIsMjgpOyAgaDMgKz0gaDI7Ci0gICAg
ICAgIGgwIF49IGgzOyAgaDMgPSBSb3Q2NChoMyw5KTsgICBoMCArPSBoMzsKLSAgICAgICAgaDEg
Xj0gaDA7ICBoMCA9IFJvdDY0KGgwLDQ3KTsgIGgxICs9IGgwOwotICAgICAgICBoMiBePSBoMTsg
IGgxID0gUm90NjQoaDEsNTQpOyAgaDIgKz0gaDE7Ci0gICAgICAgIGgzIF49IGgyOyAgaDIgPSBS
b3Q2NChoMiwzMik7ICBoMyArPSBoMjsKLSAgICAgICAgaDAgXj0gaDM7ICBoMyA9IFJvdDY0KGgz
LDI1KTsgIGgwICs9IGgzOwotICAgICAgICBoMSBePSBoMDsgIGgwID0gUm90NjQoaDAsNjMpOyAg
aDEgKz0gaDA7Ci0gICAgfQotCi1wcml2YXRlOgotCi0gICAgLy8KLSAgICAvLyBTaG9ydCBpcyB1
c2VkIGZvciBtZXNzYWdlcyB1bmRlciAxOTIgYnl0ZXMgaW4gbGVuZ3RoCi0gICAgLy8gU2hvcnQg
aGFzIGEgbG93IHN0YXJ0dXAgY29zdCwgdGhlIG5vcm1hbCBtb2RlIGlzIGdvb2QgZm9yIGxvbmcK
LSAgICAvLyBrZXlzLCB0aGUgY29zdCBjcm9zc292ZXIgaXMgYXQgYWJvdXQgMTkyIGJ5dGVzLiAg
VGhlIHR3byBtb2RlcyB3ZXJlCi0gICAgLy8gaGVsZCB0byB0aGUgc2FtZSBxdWFsaXR5IGJhci4K
LSAgICAvLwotICAgIHN0YXRpYyB2b2lkIFNob3J0KAotICAgICAgICBjb25zdCB2b2lkICptZXNz
YWdlLCAgLy8gbWVzc2FnZSAoYnl0ZSBhcnJheSwgbm90IG5lY2Vzc2FyaWx5IGFsaWduZWQpCi0g
ICAgICAgIHNpemVfdCBsZW5ndGgsICAgICAgICAvLyBsZW5ndGggb2YgbWVzc2FnZSAoaW4gYnl0
ZXMpCi0gICAgICAgIHVpbnQ2NF90ICpoYXNoMSwgICAgICAgIC8vIGluL291dDogaW4gdGhlIHNl
ZWQsIG91dCB0aGUgaGFzaCB2YWx1ZQotICAgICAgICB1aW50NjRfdCAqaGFzaDIpOyAgICAgICAv
LyBpbi9vdXQ6IGluIHRoZSBzZWVkLCBvdXQgdGhlIGhhc2ggdmFsdWUKLQotICAgIC8vIG51bWJl
ciBvZiB1aW50NjRfdCdzIGluIGludGVybmFsIHN0YXRlCi0gICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3Qgc2NfbnVtVmFycyA9IDEyOwotCi0gICAgLy8gc2l6ZSBvZiB0aGUgaW50ZXJuYWwgc3Rh
dGUKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzY19ibG9ja1NpemUgPSBzY19udW1WYXJz
Kjg7Ci0KLSAgICAvLyBzaXplIG9mIGJ1ZmZlciBvZiB1bmhhc2hlZCBkYXRhLCBpbiBieXRlcwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNjX2J1ZlNpemUgPSAyKnNjX2Jsb2NrU2l6ZTsK
LQotICAgIC8vCi0gICAgLy8gc2NfY29uc3Q6IGEgY29uc3RhbnQgd2hpY2g6Ci0gICAgLy8gICog
aXMgbm90IHplcm8KLSAgICAvLyAgKiBpcyBvZGQKLSAgICAvLyAgKiBpcyBhIG5vdC12ZXJ5LXJl
Z3VsYXIgbWl4IG9mIDEncyBhbmQgMCdzCi0gICAgLy8gICogZG9lcyBub3QgbmVlZCBhbnkgb3Ro
ZXIgc3BlY2lhbCBtYXRoZW1hdGljYWwgcHJvcGVydGllcwotICAgIC8vCi0gICAgc3RhdGljIGNv
bnN0ZXhwciB1aW50NjRfdCBzY19jb25zdCA9IDB4ZGVhZGJlZWZkZWFkYmVlZlVMTDsKLQotICAg
IHVpbnQ2NF90IG1fZGF0YVsyKnNjX251bVZhcnNdOyAgIC8vIHVuaGFzaGVkIGRhdGEsIGZvciBw
YXJ0aWFsIG1lc3NhZ2VzCi0gICAgdWludDY0X3QgbV9zdGF0ZVtzY19udW1WYXJzXTsgIC8vIGlu
dGVybmFsIHN0YXRlIG9mIHRoZSBoYXNoCi0gICAgc2l6ZV90IG1fbGVuZ3RoOyAgICAgICAgICAg
ICAvLyB0b3RhbCBsZW5ndGggb2YgdGhlIGlucHV0IHNvIGZhcgotICAgIHVpbnQ4X3QgIG1fcmVt
YWluZGVyOyAgICAgICAgICAvLyBsZW5ndGggb2YgdW5oYXNoZWQgZGF0YSBzdGFzaGVkIGluIG1f
ZGF0YQotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGhhc2gKLX0gIC8vIG5hbWVzcGFjZSBmb2xseQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9y
dGFiaWxpdHkvQXNtLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xs
eS9wb3J0YWJpbGl0eS9Bc20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdiN2Vi
YmE4NmQwYjUyZjkzM2NhMzFlZTQzZTE5OGE1Y2VlOGYyZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9mb2xseS9wb3J0YWJpbGl0eS9Bc20uaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2Vk
IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwot
ICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo
ZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0g
KgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0g
KiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgPGZvbGx5L1BvcnRhYmlsaXR5Lmg+Ci0KLSNpZmRlZiBfTVNDX1ZFUgot
I2luY2x1ZGUgPGludHJpbi5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBmb2xseSB7Ci1pbmxpbmUg
dm9pZCBhc21fdm9sYXRpbGVfbWVtb3J5KCkgewotI2lmIGRlZmluZWQoX19jbGFuZ19fKSB8fCBk
ZWZpbmVkKF9fR05VQ19fKQotICBhc20gdm9sYXRpbGUoIiIgOiA6IDogIm1lbW9yeSIpOwotI2Vs
aWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgOjpfUmVhZFdyaXRlQmFycmllcigpOwotI2VuZGlmCi19
Ci0KLWlubGluZSB2b2lkIGFzbV92b2xhdGlsZV9wYXVzZSgpIHsKLSNpZiBkZWZpbmVkKF9NU0Nf
VkVSKSAmJiAoZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9NX1g2NCkpCi0gIDo6X21tX3Bh
dXNlKCk7Ci0jZWxpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBGT0xMWV9YNjQKLSAgYXNtIHZvbGF0
aWxlKCJwYXVzZSIpOwotI2VsaWYgRk9MTFlfQTY0IHx8IGRlZmluZWQoX19hcm1fXykKLSAgYXNt
IHZvbGF0aWxlKCJ5aWVsZCIpOwotI2VsaWYgRk9MTFlfUFBDNjQKLSAgYXNtIHZvbGF0aWxlKCJv
ciAyNywyNywyNyIpOwotI2VuZGlmCi19Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9CaXRzRnVuY3RleGNlcHQuaCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3BvcnRhYmlsaXR5L0Jp
dHNGdW5jdGV4Y2VwdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGYxM2RlOTcy
ODM4ZmM1MjM0OGU2M2VkNDBmOGIwNDBjYmYxYzQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2ZvbGx5L3BvcnRhYmlsaXR5L0JpdHNGdW5jdGV4Y2VwdC5oCisrKyAvZGV2L251bGwKQEAgLTEs
NDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8bmV3PgotCi0jaW5jbHVkZSA8Zm9sbHkvUG9ydGFiaWxp
dHkuaD4KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9Db25maWcuaD4KLQotI2lmIEZPTExZ
X0hBVkVfQklUU19GVU5DVEVYQ0VQVF9ICi0KLSNpbmNsdWRlIDxiaXRzL2Z1bmN0ZXhjZXB0Lmg+
Ci0KLSNlbHNlCi0KLW5hbWVzcGFjZSBzdGQgewotCi0jaWYgX0xJQkNQUF9WRVJTSU9OIDwgNDAw
MAotW1tub3JldHVybl1dIHZvaWQgX190aHJvd19sZW5ndGhfZXJyb3IoY2hhciBjb25zdCogbXNn
KTsKLVtbbm9yZXR1cm5dXSB2b2lkIF9fdGhyb3dfbG9naWNfZXJyb3IoY2hhciBjb25zdCogbXNn
KTsKLVtbbm9yZXR1cm5dXSB2b2lkIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNoYXIgY29uc3QqIG1z
Zyk7Ci0jZW5kaWYKLQotI2lmIF9DUFBMSUJfVkVSIC8vIG1zdmMgYysrIHN0ZCBsaWIKLVtbbm9y
ZXR1cm5dXSB2b2lkIF9fdGhyb3dfYmFkX2FsbG9jKCk7Ci0jZW5kaWYKLX0KLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0
YWJpbGl0eS9CdWlsdGlucy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Zm9sbHkvcG9ydGFiaWxpdHkvQnVpbHRpbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTAxNzljOGY0NTNlMmE4NTQ0NzE3NjI4NTUxNmY2NDM4YzFmOTgwZC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9CdWlsdGlucy5oCisrKyAvZGV2L251bGwK
QEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0g
KgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
ICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
TlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWZkZWYgX1dJTjMyCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0j
aW5jbHVkZSA8Zm9sbHkvUG9ydGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxpbnRyaW4uaD4KLSNpbmNs
dWRlIDxzdGRpbnQuaD4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLW5hbWVzcGFjZSBwb3J0YWJpbGl0
eSB7Ci1uYW1lc3BhY2UgZGV0YWlsIHsKLXZvaWQgY2FsbF9mbHVzaF9pbnN0cnVjdGlvbl9jYWNo
ZV9zZWxmX3BpZCh2b2lkKiBiZWdpbiwgc2l6ZV90IHNpemUpOwotfQotfQotfQotCi1GT0xMWV9B
TFdBWVNfSU5MSU5FIHZvaWQgX19idWlsdGluX19fY2xlYXJfY2FjaGUoY2hhciogYmVnaW4sIGNo
YXIqIGVuZCkgewotICBpZiAoZm9sbHk6OmtJc0FyY2hBbWQ2NCkgewotICAgIC8vIHg4Nl82NCBk
b2Vzbid0IHJlcXVpcmUgdGhlIGluc3RydWN0aW9uIGNhY2hlIHRvIGJlIGZsdXNoZWQgYWZ0ZXIK
LSAgICAvLyBtb2RpZmljYXRpb24uCi0gIH0gZWxzZSB7Ci0gICAgLy8gRGVmYXVsdCB0byBmbHVz
aGluZyBpdCBmb3IgZXZlcnl0aGluZyBlbHNlLCBzdWNoIGFzIEFSTS4KLSAgICBmb2xseTo6cG9y
dGFiaWxpdHk6OmRldGFpbDo6Y2FsbF9mbHVzaF9pbnN0cnVjdGlvbl9jYWNoZV9zZWxmX3BpZCgK
LSAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZCo+KGJlZ2luKSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihl
bmQgLSBiZWdpbikpOwotICB9Ci19Ci0KLUZPTExZX0FMV0FZU19JTkxJTkUgaW50IF9fYnVpbHRp
bl9jbHoodW5zaWduZWQgaW50IHgpIHsKLSAgdW5zaWduZWQgbG9uZyBpbmRleDsKLSAgcmV0dXJu
IGludChfQml0U2NhblJldmVyc2UoJmluZGV4LCAodW5zaWduZWQgbG9uZyl4KSA/IDMxIC0gaW5k
ZXggOiAzMik7Ci19Ci0KLUZPTExZX0FMV0FZU19JTkxJTkUgaW50IF9fYnVpbHRpbl9jbHpsKHVu
c2lnbmVkIGxvbmcgeCkgewotICByZXR1cm4gX19idWlsdGluX2NseigodW5zaWduZWQgaW50KXgp
OwotfQotCi1GT0xMWV9BTFdBWVNfSU5MSU5FIGludCBfX2J1aWx0aW5fY2x6bGwodW5zaWduZWQg
bG9uZyBsb25nIHgpIHsKLSAgdW5zaWduZWQgbG9uZyBpbmRleDsKLSAgcmV0dXJuIGludChfQml0
U2NhblJldmVyc2U2NCgmaW5kZXgsIHgpID8gNjMgLSBpbmRleCA6IDY0KTsKLX0KLQotRk9MTFlf
QUxXQVlTX0lOTElORSBpbnQgX19idWlsdGluX2N0emxsKHVuc2lnbmVkIGxvbmcgbG9uZyB4KSB7
Ci0gIHVuc2lnbmVkIGxvbmcgaW5kZXg7Ci0gIHJldHVybiBpbnQoX0JpdFNjYW5Gb3J3YXJkNjQo
JmluZGV4LCB4KSA/IGluZGV4IDogNjQpOwotfQotCi1GT0xMWV9BTFdBWVNfSU5MSU5FIGludCBf
X2J1aWx0aW5fZmZzKGludCB4KSB7Ci0gIHVuc2lnbmVkIGxvbmcgaW5kZXg7Ci0gIHJldHVybiBp
bnQoX0JpdFNjYW5Gb3J3YXJkKCZpbmRleCwgKHVuc2lnbmVkIGxvbmcpeCkgPyBpbmRleCArIDEg
OiAwKTsKLX0KLQotRk9MTFlfQUxXQVlTX0lOTElORSBpbnQgX19idWlsdGluX2Zmc2wobG9uZyB4
KSB7Ci0gIHJldHVybiBfX2J1aWx0aW5fZmZzKGludCh4KSk7Ci19Ci0KLUZPTExZX0FMV0FZU19J
TkxJTkUgaW50IF9fYnVpbHRpbl9mZnNsbChsb25nIGxvbmcgeCkgewotICB1bnNpZ25lZCBsb25n
IGluZGV4OwotICByZXR1cm4gaW50KF9CaXRTY2FuRm9yd2FyZDY0KCZpbmRleCwgKHVuc2lnbmVk
IGxvbmcgbG9uZyl4KSA/IGluZGV4ICsgMSA6IDApOwotfQotCi1GT0xMWV9BTFdBWVNfSU5MSU5F
IGludCBfX2J1aWx0aW5fcG9wY291bnQodW5zaWduZWQgaW50IHgpIHsKLSAgcmV0dXJuIGludChf
X3BvcGNudCh4KSk7Ci19Ci0KLUZPTExZX0FMV0FZU19JTkxJTkUgaW50IF9fYnVpbHRpbl9wb3Bj
b3VudGxsKHVuc2lnbmVkIGxvbmcgbG9uZyB4KSB7Ci0gIHJldHVybiBpbnQoX19wb3BjbnQ2NCh4
KSk7Ci19Ci0KLUZPTExZX0FMV0FZU19JTkxJTkUgdm9pZCogX19idWlsdGluX3JldHVybl9hZGRy
ZXNzKHVuc2lnbmVkIGludCBmcmFtZSkgewotICAvLyBJIHJlYWxseSBob3BlIGZyYW1lIGlzIHpl
cm8uLi4KLSAgKHZvaWQpZnJhbWU7Ci0gIGFzc2VydChmcmFtZSA9PSAwKTsKLSAgcmV0dXJuIF9S
ZXR1cm5BZGRyZXNzKCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3BvcnRhYmlsaXR5L0NvbmZpZy5oIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvQ29uZmlnLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDFlNGM2ZWRhNzIwMzgyMzgyZjA2MGFjMjNiYmM0
NGM0NjVlYWVjNjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkv
Q29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp
Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5h
cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5
IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBC
QVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBl
aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZm5kZWYgRk9MTFlf
Tk9fQ09ORklHCi0jaW5jbHVkZSA8Zm9sbHkvZm9sbHktY29uZmlnLmg+Ci0jZW5kaWYKLQotI2lm
ZGVmIEZPTExZX1BMQVRGT1JNX0NPTkZJRwotI2luY2x1ZGUgRk9MTFlfUExBVEZPUk1fQ09ORklH
Ci0jZW5kaWYKLQotI2lmIEZPTExZX0hBVkVfRkVBVFVSRVNfSAotI2luY2x1ZGUgPGZlYXR1cmVz
Lmg+Ci0jZW5kaWYKLQotI2lmZGVmIF9fQU5EUk9JRF9fCi0jaW5jbHVkZSA8YW5kcm9pZC9hcGkt
bGV2ZWwuaD4KLSNlbmRpZgotCi0jaWZkZWYgX19BUFBMRV9fCi0jaW5jbHVkZSA8QXZhaWxhYmls
aXR5Lmg+Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2ZvbGx5L3BvcnRhYmlsaXR5L0NvbnN0ZXhwci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvQ29uc3RleHByLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNWM1YTFhNTliODBhZDdiY2Q5YmUzMzQyZTViZDg4NWFk
ZDZmYmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvQ29uc3Rl
eHByLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAy
MDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
SVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Y3N0ZGlu
dD4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgotCi1uYW1lc3Bh
Y2UgZm9sbHkgewotCi0vLyBUTERSOiBQcmVmZXIgdXNpbmcgb3BlcmF0b3I8IGZvciBvcmRlcmlu
Zy4gQW5kIHdoZW4KLS8vIGEgYW5kIGIgYXJlIGVxdWl2YWxlbnQgb2JqZWN0cywgd2UgcmV0dXJu
IGIgdG8gbWFrZQotLy8gc29ydGluZyBzdGFibGUuCi0vLyBTZWUgaHR0cDovL3N0ZXBhbm92cGFw
ZXJzLmNvbS9ub3Rlcy5wZGYgZm9yIGRldGFpbHMuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNv
bnN0ZXhwciBUIGNvbnN0ZXhwcl9tYXgoVCBhLCBUIGIpIHsKLSAgcmV0dXJuIGIgPCBhID8gYSA6
IGI7Ci19Ci0KLS8vIFdoZW4gYSBhbmQgYiBhcmUgZXF1aXZhbGVudCBvYmplY3RzLCB3ZSByZXR1
cm4gYSB0bwotLy8gbWFrZSBzb3J0aW5nIHN0YWJsZS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
Y29uc3RleHByIFQgY29uc3RleHByX21pbihUIGEsIFQgYikgewotICByZXR1cm4gYiA8IGEgPyBi
IDogYTsKLX0KLQotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSA9IHZvaWQ+Ci1zdHJ1Y3QgY29uc3RleHByX2Fic19oZWxwZXIge307Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IGNvbnN0ZXhwcl9hYnNfaGVscGVyPAotICAgIFQsCi0g
ICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6dmFs
dWU+Ojp0eXBlPiB7Ci0gIHN0YXRpYyBjb25zdGV4cHIgVCBnbyhUIHQpIHsKLSAgICByZXR1cm4g
dCA8IHN0YXRpY19jYXN0PFQ+KDApID8gLXQgOiB0OwotICB9Ci19OwotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLXN0cnVjdCBjb25zdGV4cHJfYWJzX2hlbHBlcjwKLSAgICBULAotICAgIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAm
JiAhc3RkOjppc19zYW1lPFQsIGJvb2w+Ojp2YWx1ZSAmJgotICAgICAgICBzdGQ6OmlzX3Vuc2ln
bmVkPFQ+Ojp2YWx1ZT46OnR5cGU+IHsKLSAgc3RhdGljIGNvbnN0ZXhwciBUIGdvKFQgdCkgewot
ICAgIHJldHVybiB0OwotICB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBj
b25zdGV4cHJfYWJzX2hlbHBlcjwKLSAgICBULAotICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PAotICAgICAgICBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPFQs
IGJvb2w+Ojp2YWx1ZSAmJgotICAgICAgICBzdGQ6OmlzX3NpZ25lZDxUPjo6dmFsdWU+Ojp0eXBl
PiB7Ci0gIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0
eXBlIGdvKFQgdCkgewotICAgIHJldHVybiB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46
OnR5cGUodCA8IHN0YXRpY19jYXN0PFQ+KDApID8gLXQgOiB0KTsKLSAgfQotfTsKLX0gLy8gbmFt
ZXNwYWNlIGRldGFpbAotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNvbnN0ZXhwciBhdXRvIGNv
bnN0ZXhwcl9hYnMoVCB0KQotICAgIC0+IGRlY2x0eXBlKGRldGFpbDo6Y29uc3RleHByX2Fic19o
ZWxwZXI8VD46OmdvKHQpKSB7Ci0gIHJldHVybiBkZXRhaWw6OmNvbnN0ZXhwcl9hYnNfaGVscGVy
PFQ+Ojpnbyh0KTsKLX0KLQotbmFtZXNwYWNlIGRldGFpbCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyPgotY29uc3RleHByIHNpemVfdCBjb25zdGV4cHJfc3RybGVuX2ludGVybmFsKGNvbnN0
IENoYXIqIHMsIHNpemVfdCBsZW4pIHsKLSAgcmV0dXJuICpzID09IENoYXIoMCkgPyBsZW4gOiBj
b25zdGV4cHJfc3RybGVuX2ludGVybmFsKHMgKyAxLCBsZW4gKyAxKTsKLX0KLXN0YXRpY19hc3Nl
cnQoCi0gICAgY29uc3RleHByX3N0cmxlbl9pbnRlcm5hbCgiMTIzNDU2Nzg5IiwgMCkgPT0gOSwK
LSAgICAiU29tZW9uZSBhcHBlYXJzIHRvIGhhdmUgYnJva2VuIGNvbnN0ZXhwcl9zdHJsZW4uLi4i
KTsKLX0gLy8gbmFtZXNwYWNlIGRldGFpbAotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcj4KLWNv
bnN0ZXhwciBzaXplX3QgY29uc3RleHByX3N0cmxlbihjb25zdCBDaGFyKiBzKSB7Ci0gIHJldHVy
biBkZXRhaWw6OmNvbnN0ZXhwcl9zdHJsZW5faW50ZXJuYWwocywgMCk7Ci19Ci0KLXRlbXBsYXRl
IDw+Ci1jb25zdGV4cHIgc2l6ZV90IGNvbnN0ZXhwcl9zdHJsZW4oY29uc3QgY2hhciogcykgewot
I2lmIGRlZmluZWQoX19jbGFuZ19fKQotICByZXR1cm4gX19idWlsdGluX3N0cmxlbihzKTsKLSNl
bGlmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19DVURBQ0NfXykKLSAgcmV0dXJuIGRl
dGFpbDo6Y29uc3RleHByX3N0cmxlbl9pbnRlcm5hbChzLCAwKTsKLSNlbHNlCi0gIHJldHVybiBz
dGQ6OnN0cmxlbihzKTsKLSNlbmRpZgotfQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvRmNudGwuaCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3BvcnRhYmlsaXR5L0ZjbnRsLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGIyYjBhNWQ3N2U2NDlmZjQzN2ZhN2QyODI2Nzlm
ZjllYTBiMmZlM2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkv
RmNudGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
MjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGlj
ZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRo
aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1h
eSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFw
YWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkg
YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJB
U0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGZjbnRs
Lmg+Ci0KLSNpZmRlZiBfV0lOMzIKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotLy8gSSBoYXZl
IG5vIGlkZWEgd2hhdCB0aGUgbm9ybWFsIHZhbHVlcyBmb3IgdGhlc2UgYXJlLAotLy8gYW5kIHJl
YWxseSBkb24ndCBjYXJlIHdoYXQgdGhleSBhcmUuIFRoZXkncmUgb25seSB1c2VkCi0vLyB3aXRo
aW4gZmNudGwsIHNvIGl0J3Mgbm90IGFuIGlzc3VlLgotI2RlZmluZSBGRF9DTE9FWEVDIEhBTkRM
RV9GTEFHX0lOSEVSSVQKLSNkZWZpbmUgT19OT05CTE9DSyAxCi0jZGVmaW5lIEZfR0VURkQgMQot
I2RlZmluZSBGX1NFVEZEIDIKLSNkZWZpbmUgRl9HRVRGTCAzCi0jZGVmaW5lIEZfU0VURkwgNAot
Ci0jaWZkZWYgSEFWRV9QT1NJWF9GQUxMT0NBVEUKLSN1bmRlZiBIQVZFX1BPU0lYX0ZBTExPQ0FU
RQotI2VuZGlmCi0jZGVmaW5lIEhBVkVfUE9TSVhfRkFMTE9DQVRFIDEKLQotLy8gU2VlIHBvcnRh
YmlsaXR5L1VuaXN0ZC5oIGZvciB3aHkgdGhlc2UgbmVlZCB0byBiZSBpbiBhIG5hbWVzcGFjZQot
Ly8gcmF0aGVyIHRoZW4gZXh0ZXJuICJDIi4KLW5hbWVzcGFjZSBmb2xseSB7Ci1uYW1lc3BhY2Ug
cG9ydGFiaWxpdHkgewotbmFtZXNwYWNlIGZjbnRsIHsKLWludCBjcmVhdChjaGFyIGNvbnN0KiBm
biwgaW50IHBtKTsKLWludCBmY250bChpbnQgZmQsIGludCBjbWQsIC4uLik7Ci1pbnQgcG9zaXhf
ZmFsbG9jYXRlKGludCBmZCwgb2ZmX3Qgb2Zmc2V0LCBvZmZfdCBsZW4pOwotaW50IG9wZW4oY2hh
ciBjb25zdCogZm4sIGludCBvZiwgaW50IHBtID0gMCk7Ci19Ci19Ci19Ci0KLS8qIHVzaW5nIG92
ZXJyaWRlICovIHVzaW5nIG5hbWVzcGFjZSBmb2xseTo6cG9ydGFiaWxpdHk6OmZjbnRsOwotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xs
eS9wb3J0YWJpbGl0eS9HRmxhZ3MuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2ZvbGx5L3BvcnRhYmlsaXR5L0dGbGFncy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0OGJkMTI1ZGE3MzY1NWZlMWNkNWI0NzhjNzEzNjlmN2NmNjhjMjZiLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3BvcnRhYmlsaXR5L0dGbGFncy5oCisrKyAvZGV2L251bGwK
QEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0g
KgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
ICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
TlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvQ29uZmlnLmg+
Ci0KLSNpZiAhRk9MTFlfSEFWRV9MSUJHRkxBR1MKLS8vIGdsb2cvbG9nZ2luZy5oIGlzIGRlcGVu
ZGVudCBvbiB0aGlzIGltcGxlbWVudGF0aW9uIGRldGFpbAotLy8gYmVpbmcgZGVmaW5lZCBvdGhl
cndpc2UgaXQgdW5kZWZpbmVzIGFsbCBvZiB0aGlzIC1fLS4uLi4KLS8vCi0vLyBBbHNvLCB0aGlz
IGlzIGRlbGliZXJhdGVseSBleHBhbmRlZCBzdWNoIHRoYXQgcGxhY2VzIHVzaW5nCi0vLyBpdCBk
aXJlY3RseSBicmVhayBsb3VkbHkuIChDIHdpbGwgYnJlYWsgbG91ZGVyIHRoYW4gQysrLCBidXQg
b2ggd2VsbCkKLSNkZWZpbmUgREVDTEFSRV9WQVJJQUJMRSgpIFwKLSAgc3RhdGljX2Fzc2VydChm
YWxzZSwgIllvdSBzaG91bGRuJ3QgYmUgdXNpbmcgR0ZsYWdzIGludGVybmFscy4iKTsKLQotI2Rl
ZmluZSBGT0xMWV9ERUNMQVJFX0ZMQUcoX3R5cGUsIF9zaG9ydFR5cGUsIF9uYW1lKSBcCi0gIG5h
bWVzcGFjZSBmTCMjX3Nob3J0VHlwZSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBl
eHRlcm4gX3R5cGUgRkxBR1NfIyNfbmFtZTsgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHVzaW5n
IGZMIyNfc2hvcnRUeXBlOjpGTEFHU18jI19uYW1lCi0KLSNkZWZpbmUgREVDTEFSRV9ib29sKF9u
YW1lKSBGT0xMWV9ERUNMQVJFX0ZMQUcoYm9vbCwgQiwgX25hbWUpCi0jZGVmaW5lIERFQ0xBUkVf
ZG91YmxlKF9uYW1lKSBGT0xMWV9ERUNMQVJFX0ZMQUcoZG91YmxlLCBELCBfbmFtZSkKLSNkZWZp
bmUgREVDTEFSRV9pbnQzMihfbmFtZSkgRk9MTFlfREVDTEFSRV9GTEFHKGludCwgSSwgX25hbWUp
Ci0jZGVmaW5lIERFQ0xBUkVfaW50NjQoX25hbWUpIEZPTExZX0RFQ0xBUkVfRkxBRyhsb25nIGxv
bmcsIEk2NCwgX25hbWUpCi0jZGVmaW5lIERFQ0xBUkVfdWludDY0KF9uYW1lKSBGT0xMWV9ERUNM
QVJFX0ZMQUcodW5zaWduZWQgbG9uZyBsb25nLCBVNjQsIF9uYW1lKQotI2RlZmluZSBERUNMQVJF
X3N0cmluZyhfbmFtZSkgRk9MTFlfREVDTEFSRV9GTEFHKHN0ZDo6c3RyaW5nLCBTLCBfbmFtZSkK
LQotI2RlZmluZSBGT0xMWV9ERUZJTkVfRkxBRyhfdHlwZSwgX3Nob3J0VHlwZSwgX25hbWUsIF9k
ZWZhdWx0KSBcCi0gIG5hbWVzcGFjZSBmTCMjX3Nob3J0VHlwZSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBfdHlwZSBGTEFHU18jI19uYW1lID0gX2RlZmF1bHQ7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHVzaW5nIGZMIyNfc2hvcnRUeXBl
OjpGTEFHU18jI19uYW1lCi0KLSNkZWZpbmUgREVGSU5FX2Jvb2woX25hbWUsIF9kZWZhdWx0LCBf
ZGVzY3JpcHRpb24pIFwKLSAgRk9MTFlfREVGSU5FX0ZMQUcoYm9vbCwgQiwgX25hbWUsIF9kZWZh
dWx0KQotI2RlZmluZSBERUZJTkVfZG91YmxlKF9uYW1lLCBfZGVmYXVsdCwgX2Rlc2NyaXB0aW9u
KSBcCi0gIEZPTExZX0RFRklORV9GTEFHKGRvdWJsZSwgRCwgX25hbWUsIF9kZWZhdWx0KQotI2Rl
ZmluZSBERUZJTkVfaW50MzIoX25hbWUsIF9kZWZhdWx0LCBfZGVzY3JpcHRpb24pIFwKLSAgRk9M
TFlfREVGSU5FX0ZMQUcoaW50LCBJLCBfbmFtZSwgX2RlZmF1bHQpCi0jZGVmaW5lIERFRklORV9p
bnQ2NChfbmFtZSwgX2RlZmF1bHQsIF9kZXNjcmlwdGlvbikgXAotICBGT0xMWV9ERUZJTkVfRkxB
Ryhsb25nIGxvbmcsIEk2NCwgX25hbWUsIF9kZWZhdWx0KQotI2RlZmluZSBERUZJTkVfdWludDY0
KF9uYW1lLCBfZGVmYXVsdCwgX2Rlc2NyaXB0aW9uKSBcCi0gIEZPTExZX0RFRklORV9GTEFHKHVu
c2lnbmVkIGxvbmcgbG9uZywgVTY0LCBfbmFtZSwgX2RlZmF1bHQpCi0jZGVmaW5lIERFRklORV9z
dHJpbmcoX25hbWUsIF9kZWZhdWx0LCBfZGVzY3JpcHRpb24pIFwKLSAgRk9MTFlfREVGSU5FX0ZM
QUcoc3RkOjpzdHJpbmcsIFMsIF9uYW1lLCBfZGVmYXVsdCkKLQotbmFtZXNwYWNlIGdvb2dsZSB7
Ci1jbGFzcyBGbGFnU2F2ZXIge307Ci19Ci0KLSNlbHNlCi0jaW5jbHVkZSA8Z2ZsYWdzL2dmbGFn
cy5oPgotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9mb2xseS9wb3J0YWJpbGl0eS9HVGVzdC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvR1Rlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMjU5ZDFmYjZjZWU1YzY5NmE0NWU3ZWE3NDE0NDBhMjk2N2Q3YTAzNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9HVGVzdC5oCisrKyAvZGV2
L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJ
bmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu
MCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNl
cy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VU
IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0vLyBUaGVzZSBfbXVzdF8gYmUgaW5jbHVkZWQgYmVm
b3JlIGd0ZXN0LmgsIGJlY2F1c2UKLS8vIGl0IHRyaWVzIHRvIGluY2x1ZGUgPGlvLmg+IG9uIGl0
J3Mgb3duLCBidXQgd2UKLS8vIG92ZXJyaWRlIGFsbCBvZiB0aG9zZSBmdW5jdGlvbnMgaW4gVW5p
c3RkLmggOigKLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9VbmlzdGQuaD4KLSNpbmNsdWRl
IDxmb2xseS9wb3J0YWJpbGl0eS9XaW5kb3dzLmg+Ci0KLSNpbmNsdWRlIDxmb2xseS9Qb3J0YWJp
bGl0eS5oPgotCi0vLyBEaXNhYmxlIGEgY291cGxlIG9mIHdhcm5pbmdzIGR1ZSB0byBHVGVzdCBl
eHBvcnRpbmcgY2xhc3NlcwotLy8gdGhhdCBkZXJpdmUgZnJvbSBzdGRsaWIgY2xhc3NlcyB3aGlj
aCBhcmVuJ3QgZXhwbGljaXRseSBleHBvcnRlZC4KLUZPTExZX1BVU0hfV0FSTklORwotRk9MTFlf
TVNWQ19ESVNBQkxFX1dBUk5JTkcoNDI1MSkKLUZPTExZX01TVkNfRElTQUJMRV9XQVJOSU5HKDQy
NzUpCi0jaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KLUZPTExZX1BPUF9XQVJOSU5HCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0
eS9JT1ZlYy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9y
dGFiaWxpdHkvSU9WZWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMjJiZTU3N2E5
NzU3MWNjY2U1NTQzZWQ0ODc0NDU4MWVhNjU0MTA3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9mb2xseS9wb3J0YWJpbGl0eS9JT1ZlYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0g
KiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAq
Ci0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAq
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0vLyBUaGlzIGZpbGUgb25seSBleGlzdHMgYmVjYXVzZSB3aXRob3V0IGl0IHRoZXJlIHdv
dWxkIGJlCi0vLyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBTeXNVaW8uaCwgU29ja2V0
cy5oLCBhbmQgVW5pc3RkLmgKLSNpZm5kZWYgX1dJTjMyCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0j
aW5jbHVkZSA8c3lzL3Vpby5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2RlZmlu
ZSBVSU9fTUFYSU9WIDE2Ci0jZGVmaW5lIElPVl9NQVggVUlPX01BWElPVgotCi1zdHJ1Y3QgaW92
ZWMgewotICB2b2lkKiBpb3ZfYmFzZTsKLSAgc2l6ZV90IGlvdl9sZW47Ci19OwotI2VuZGlmCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0
YWJpbGl0eS9NYWxsb2MuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Zv
bGx5L3BvcnRhYmlsaXR5L01hbGxvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAx
MjA0YzIzMzY1ZDgwMzZlY2NjYjkyZWJkMzE5Zjc5NDA2ZmVhMzAxLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2ZvbGx5L3BvcnRhYmlsaXR5L01hbGxvYy5oCisrKyAvZGV2L251bGwKQEAgLTEs
MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICog
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvQ29uZmlnLmg+Ci0jaW5j
bHVkZSA8c3RkbGliLmg+Ci0KLSNpZiBkZWZpbmVkKFVTRV9KRU1BTExPQykgfHwgZGVmaW5lZChG
T0xMWV9VU0VfSkVNQUxMT0MpCi0vLyBKRU1hbGxvYyBwcm92aWRlcyBpdCdzIG93biBpbXBsZW1l
bnRhdGlvbiBvZgotLy8gbWFsbG9jX3VzYWJsZV9zaXplLCBhbmQgdGhhdCdzIHdoYXQgd2Ugc2hv
dWxkIGJlIHVzaW5nLgotI2luY2x1ZGUgPGplbWFsbG9jL2plbWFsbG9jLmg+Ci0jZWxzZQotI2lm
bmRlZiBfX0FQUExFX18KLSNpbmNsdWRlIDxtYWxsb2MuaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5l
ZChfX0FQUExFX18pICYmICFkZWZpbmVkKEZPTExZX0hBVkVfTUFMTE9DX1VTQUJMRV9TSVpFKQot
Ly8gTWFjT1MgZG9lc24ndCBoYXZlIG1hbGxvY191c2FibGVfc2l6ZSgpCi1leHRlcm4gIkMiIHNp
emVfdCBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcHRyKTsKLSNlbGlmIGRlZmluZWQoX1dJTjMy
KQotZXh0ZXJuICJDIiBzaXplX3QgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHB0cik7Ci0jZW5k
aWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZm9sbHkvcG9ydGFiaWxpdHkvTWF0aC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvTWF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiMTlhMDBhYjUwZWQ0NTVmZDUxZGU1YjE3ZDcyMWMzNjRiNTE2NjUxLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3BvcnRhYmlsaXR5L01hdGguaAorKysgL2Rldi9udWxs
CkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgot
ICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo
ZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElD
RU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp
ZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5p
bmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGNtYXRoPgotCi1uYW1lc3BhY2UgZm9sbHkg
ewotCi0jaWZuZGVmIF9fQU5EUk9JRF9fCi0KLS8qKgotICogTW9zdCBwbGF0Zm9ybXMgaG9wZWZ1
bGx5IHByb3ZpZGUgc3RkOjpuZXh0YWZ0ZXIuCi0gKi8KLQotLyogdXNpbmcgb3ZlcnJpZGUgKi8g
dXNpbmcgc3RkOjpuZXh0YWZ0ZXI7Ci0KLSNlbHNlIC8vICFfX0FORFJPSURfXwotCi0vKioKLSAq
IE9uIEFuZHJvaWQsIHN0ZDo6bmV4dGFmdGVyIGlzbid0IGltcGxlbWVudGVkLiBIb3dldmVyLCB0
aGUgQyBmdW5jdGlvbnMgYW5kCi0gKiBjb21waWxlciBidWlsdGlucyBhcmUgc3RpbGwgcHJvdmlk
ZWQuIFVzaW5nIHRoZSBHQ0MgYnVpbHRpbiBpcyBhY3R1YWxseQotICogc2xpZ2h0bHkgZmFzdGVy
LCBhcyB0aGV5J3JlIGNvbnN0ZXhwciBhbmQgdGhlIHVzZSBjYXNlcyB3aXRoaW4gZm9sbHkgYXJl
IGluCi0gKiBjb25zdGV4cHIgY29udGV4dC4KLSAqLwotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykg
JiYgIWRlZmluZWQoX19jbGFuZ19fKQotCi1jb25zdGV4cHIgZmxvYXQgbmV4dGFmdGVyKGZsb2F0
IHgsIGZsb2F0IHkpIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9uZXh0YWZ0ZXJmKHgsIHkpOwotfQot
Ci1jb25zdGV4cHIgZG91YmxlIG5leHRhZnRlcihkb3VibGUgeCwgZG91YmxlIHkpIHsKLSAgcmV0
dXJuIF9fYnVpbHRpbl9uZXh0YWZ0ZXIoeCwgeSk7Ci19Ci0KLWNvbnN0ZXhwciBsb25nIGRvdWJs
ZSBuZXh0YWZ0ZXIobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkgewotICByZXR1cm4gX19i
dWlsdGluX25leHRhZnRlcmwoeCwgeSk7Ci19Ci0KLSNlbHNlIC8vIF9fR05VQ19fCi0KLWlubGlu
ZSBmbG9hdCBuZXh0YWZ0ZXIoZmxvYXQgeCwgZmxvYXQgeSkgewotICByZXR1cm4gOjpuZXh0YWZ0
ZXJmKHgsIHkpOwotfQotCi1pbmxpbmUgZG91YmxlIG5leHRhZnRlcihkb3VibGUgeCwgZG91Ymxl
IHkpIHsKLSAgcmV0dXJuIDo6bmV4dGFmdGVyKHgsIHkpOwotfQotCi1pbmxpbmUgbG9uZyBkb3Vi
bGUgbmV4dGFmdGVyKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpIHsKLSAgcmV0dXJuIDo6
bmV4dGFmdGVybCh4LCB5KTsKLX0KLQotI2VuZGlmIC8vIF9fR05VQ19fCi0KLSNlbmRpZiAvLyBf
X0FORFJPSURfXwotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvTWVtb3J5LmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3BvcnRhYmlsaXR5L01lbW9yeS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNhMTM4YzAzY2ZjNzI5MTFkY2Y1ZWEyZGE4MGFhZTYzZDQ5MTIw
YjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvTWVtb3J5LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBG
YWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwg
VmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmls
ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRh
aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5v
cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGlj
YWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAot
ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBl
eHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBs
YW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0
aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvTWVtb3J5Lmg+
Ci0KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9Db25maWcuaD4KLSNpbmNsdWRlIDxmb2xs
eS9wb3J0YWJpbGl0eS9NYWxsb2MuaD4KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLW5hbWVzcGFj
ZSBmb2xseSB7Ci1uYW1lc3BhY2UgZGV0YWlsIHsKLSNpZiBfUE9TSVhfQ19TT1VSQ0UgPj0gMjAw
MTEyTCB8fCBfWE9QRU5fU09VUkNFID49IDYwMCB8fCBcCi0gICAgKGRlZmluZWQoX19BTkRST0lE
X18pICYmIChfX0FORFJPSURfQVBJX18gPiAxNSkpIHx8ICAgXAotICAgIChkZWZpbmVkKF9fQVBQ
TEVfXykgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgKF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gX19NQUNfMTBfNiB8fCAgICBcCi0gICAgICBfX0lQ
SE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSBfX0lQSE9ORV8zXzApKQotCi0vLyBVc2Ug
cG9zaXhfbWVtYWxpZ24sIGJ1dCBtaW1pYyB0aGUgYmVoYXZpb3VyIG9mIG1lbWFsaWduCi12b2lk
KiBhbGlnbmVkX21hbGxvYyhzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKSB7Ci0gIHZvaWQqIHB0
ciA9IG51bGxwdHI7Ci0gIGludCByYyA9IHBvc2l4X21lbWFsaWduKCZwdHIsIGFsaWduLCBzaXpl
KTsKLSAgaWYgKHJjID09IDApIHsKLSAgICByZXR1cm4gcHRyOwotICB9Ci0gIGVycm5vID0gcmM7
Ci0gIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIGFsaWduZWRfZnJlZSh2b2lkKiBhbGlnbmVk
X3B0cikgewotICBmcmVlKGFsaWduZWRfcHRyKTsKLX0KLSNlbGlmIGRlZmluZWQoX1dJTjMyKQot
Ci12b2lkKiBhbGlnbmVkX21hbGxvYyhzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKSB7Ci0gIHJl
dHVybiBfYWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxpZ24pOwotfQotCi12b2lkIGFsaWduZWRfZnJl
ZSh2b2lkKiBhbGlnbmVkX3B0cikgewotICBfYWxpZ25lZF9mcmVlKGFsaWduZWRfcHRyKTsKLX0K
LSNlbHNlCi0KLXZvaWQqIGFsaWduZWRfbWFsbG9jKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24p
IHsKLSAgcmV0dXJuIG1lbWFsaWduKGFsaWduLCBzaXplKTsKLX0KLQotdm9pZCBhbGlnbmVkX2Zy
ZWUodm9pZCogYWxpZ25lZF9wdHIpIHsKLSAgZnJlZShhbGlnbmVkX3B0cik7Ci19Ci0jZW5kaWYK
LX0KLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Zv
bGx5L3BvcnRhYmlsaXR5L01lbW9yeS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvTWVtb3J5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDdlNThkYzRkZDI4NDgyNDNiYzg1YTRjMDhlOTEyODkzZWE4N2JiNjcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvTWVtb3J5LmgKKysrIC9kZXYvbnVs
bApAQCAtMSwyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4K
LSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0
aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotbmFtZXNwYWNlIGZv
bGx5IHsKLW5hbWVzcGFjZSBkZXRhaWwgewotdm9pZCogYWxpZ25lZF9tYWxsb2Moc2l6ZV90IHNp
emUsIHNpemVfdCBhbGlnbik7Ci12b2lkIGFsaWduZWRfZnJlZSh2b2lkKiBhbGlnbmVkX3B0cik7
Ci19Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9m
b2xseS9wb3J0YWJpbGl0eS9QVGhyZWFkLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9QVGhyZWFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDM4MDY2OTA4YzhlNDA1M2VlZTdlNjdkMjA1ZWUzODY1MjgxM2M1ZjAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvUFRocmVhZC5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywg
SW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
LjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5
IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
ZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcg
b3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9V
VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBn
b3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z
ZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L0Nv
bmZpZy5oPgotCi0jaWYgIWRlZmluZWQoX1dJTjMyKQotCi0jaW5jbHVkZSA8cHRocmVhZC5oPiAv
LyBub2xpbnQKLQotI2VsaWYgIUZPTExZX0hBVkVfUFRIUkVBRAotCi0jaW5jbHVkZSA8Zm9sbHkv
cG9ydGFiaWxpdHkvV2luZG93cy5oPiAvLyBub2xpbnQKLSNpbmNsdWRlIDxjc3RkaW50PgotCi1u
YW1lc3BhY2UgZm9sbHkgewotbmFtZXNwYWNlIHBvcnRhYmlsaXR5IHsKLW5hbWVzcGFjZSBwdGhy
ZWFkIHsKLXVzaW5nIHB0aHJlYWRfa2V5X3QgPSBEV09SRDsKLQotaW50IHB0aHJlYWRfa2V5X2Ny
ZWF0ZShwdGhyZWFkX2tleV90KiBrZXksIHZvaWQgKCpkZXN0cnVjdG9yKSh2b2lkKikpOwotaW50
IHB0aHJlYWRfa2V5X2RlbGV0ZShwdGhyZWFkX2tleV90IGtleSk7Ci12b2lkKiBwdGhyZWFkX2dl
dHNwZWNpZmljKHB0aHJlYWRfa2V5X3Qga2V5KTsKLWludCBwdGhyZWFkX3NldHNwZWNpZmljKHB0
aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkKiB2YWx1ZSk7Ci19Ci19Ci19Ci0KLS8qIHVzaW5n
IG92ZXJyaWRlICovIHVzaW5nIG5hbWVzcGFjZSBmb2xseTo6cG9ydGFiaWxpdHk6OnB0aHJlYWQ7
Ci0KLSNlbHNlCi0vLyBUaGUgcHRocmVhZCBpbXBsZW1lbnRhdGlvbiB3ZSBzdXBwb3J0IG9uIFdp
bmRvd3MgaXMgYSBiaXQgb2YgYSBwYWluIHRvIHdvcmsKLS8vIHdpdGggaW4gY2VydGFpbiBwbGFj
ZXMuIFRoaXMgZW50aXJlIG1lc3MgaGVyZSBleGlzdHMgZm9yIGV4YWN0bHkgb25lIHJlYXNvbjoK
LS8vIGB1c2luZyBwaWRfdCA9IGludDtgCi0vLyBXaXRob3V0IGFsbCBvZiB0aGlzIG1lc3MsIHRo
ZSBwdGhyZWFkIGltcGxlbWVudGF0aW9uIHdpbGwgYXR0ZW1wdCB0byBkZWZpbmUKLS8vIGBwaWRf
dGAgYXMgYHZvaWQqYCB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBqdXN0IGFib3V0IGV2ZXJ5
IG90aGVyCi0vLyBkZWZpbml0aW9uIG9mIGBwaWRfdGAgdXNlZCBieSBvdGhlciBsaWJyYXJpZXMg
ZGVmaW5pbmcgaXQgb24gV2luZG93cywgZm9yCi0vLyBleGFtcGxlLCBweXRob24uCi0KLS8vIE9u
IFdpbmRvd3MsIGRlZmluZSBtb2RlX3QgYW5kIHBpZF90Ci0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFi
aWxpdHkvU3lzVHlwZXMuaD4KLQotLy8gSEFORExFIGFuZCBEV09SRCBmb3IgdGhlIGRlY2xhcmF0
aW9ucyBmdXJ0aGVyIGRvd24uCi0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvV2luZG93cy5o
PiAvLyBub2xpbnQKLQotLy8gQmVjYXVzZSBvZiBJTkNMVURFX05QLCBgZXJybm8uaGAgZG9lc24n
dCBnZXQgaW5jbHVkZWQgYnkgcHRocmVhZCwgY2F1c2luZyBpdAotLy8gdG8gZGVmaW5lIHRoZSBl
cnJubyB2YWx1ZXMgaXRzZWxmLCB3aGljaCBjYXVzZXMgY29uZmxpY3RzIHdoZW4gYGVycm5vLmhg
IGVuZHMKLS8vIHVwIGFjdHVhbGx5IGdldHRpbmcgaW5jbHVkZWQsIHNvIHdlIGluY2x1ZGUgaXQg
ZXhwbGljaXRseSBoZXJlIHRvIHByZXZlbnQgaXQKLS8vIGZyb20gZGVmaW5pbmcgdGhlIHZhbHVl
cyBpdHNlbGYuCi0jaW5jbHVkZSA8ZXJybm8uaD4KLQotLy8gUHJldGVuZCB3ZSBhcmUgYnVpbGRp
bmcgd2l0aCBBVCZUJ3MgVVdJTiBwcm9qZWN0LCB3aGljaCBpcyBhIFVuaXggQVBJIGZvcgotLy8g
V2luZG93cyA5NSAmIFdpbmRvd3MgTlQuIFllcywgcmVhbGx5LiBodHRwczovL2dpdGh1Yi5jb20v
YXR0L3V3aW4KLS8vIFRoaXMgaXMgdGhlIGNvcmUgZGVmaW5lIHRoYXQga2VlcHMgYHB0aHJlYWQu
aGAgZnJvbSBkZWZpbmluZyBgcGlkX3RgLgotI2RlZmluZSBfVVdJTiAxCi0KLS8vIEJlY2F1c2Ug
d2UndmUgZGVmaW5lZCBgX1VXSU5gLCB0aGUgcHRocmVhZCBpbXBsZW1lbnRhdGlvbiB0aGlua3Mg
dGhhdCB0aGUKLS8vIHB0aHJlYWQgdHlwZXMgaGF2ZSBhbGwgYWxzbyBhbHJlYWR5IGJlZW4gZGVm
aW5lZCBieSBkZWZhdWx0LiBCeSBkZWZpbmluZwotLy8gdGhpcywgd2UgZm9yY2UgYFBUVzMyX0xF
VkVMYCB0byBiZSBkZWZpbmVkIGFzIGAyYCwgd2hpY2ggaXMgZW5vdWdoIHRvIGdldCBpdAotLy8g
dG8gZGVmaW5lIHRoZSBwdGhyZWFkIHR5cGVzIGZvciB1cy4KLSNkZWZpbmUgSU5DTFVERV9OUCAx
Ci0KLS8vIEJ5IGRlZmluaW5nIGBfVVdJTmAgd2UgY2F1c2UgdGhlIHB0aHJlYWQgaW1wbGVtZW50
YXRpb24gdG8gYWdncmVzc2l2ZWx5Ci0vLyBkZWZpbmUgYEhBVkVfTU9ERV9UYCwgd2hpY2ggd2Ug
ZGVmaW5lIGluIGBmb2xseS9wb3J0YWJpbGl0eS9TeXNUeXBlcy5oYCB0bwotLy8ga2VlcCBpdCBm
cm9tIGRlZmluaW5nIGFuIGluY29tcGF0aWJsZSB2ZXJzaW9uIG9mIGl0LiBXZSB1bmRlZmluZSB0
aGUgbWFjcm8KLS8vIGhlcmUgdG8ga2VlcCBmcm9tIGdlbmVyYXRpbmcgd2FybmluZ3Mgd2hlbiB0
aGUgaW1wbGVtZW50YXRpb24gZGVmaW5lcyBpdC4KLS8vIE5vdGUgdGhhdCB0aGUgaW1wbGVtZW50
YXRpb24gbGVha3MgaXRzIGRlZmluaXRpb24gb2YgYEhBVkVfTU9ERV9UYCwgc28gd2UKLS8vIGRv
bid0IG5lZWQgdG8gcmUtZGVmaW5lIGl0IGFmdGVyLgotI3VuZGVmIEhBVkVfTU9ERV9UCi0KLSNp
bmNsdWRlIDxwdGhyZWFkLmg+IC8vIG5vbGludAotCi0jaWZuZGVmIEhBVkVfTU9ERV9UCi0jZXJy
b3IgV2UgZXhwZWN0ZWQgcHRocmVhZC5oIHRvIGRlZmluZSBIQVZFX01PREVfVCBidXQgdGhhdCBk
aWQgbm90IGhhcHBlbi4KLSNlbmRpZgotCi0vLyBOb3cgY2xlYW4gdXAgb3VyIG1lc3Mgc28gbm90
aGluZyBlbHNlIHRoaW5rcyB3ZSdyZSBkb2luZyBjcmF6eSB0aGluZ3MuCi0jdW5kZWYgX1VXSU4K
LSN1bmRlZiBJTkNMVURFX05QCi0KLS8vIEJlY2F1c2Ugd2UgZGVmaW5lZCBgSU5DTFVERV9OUGAg
YWJvdmUsIHRoZSBub24tcG9ydGFibGUgQVBJcyBkb24ndCBhY3R1YWxseQotLy8gZ2V0IGRlY2xh
cmVkLiBXZSBzdGlsbCBuZWVkIHRoZW0sIHNvIGRlY2xhcmUgdGhlbSBvdXJzZWx2ZXMgaW5zdGVh
ZC4KLVBUVzMyX0RMTFBPUlQgSEFORExFIFBUVzMyX0NERUNMCi1wdGhyZWFkX2dldHczMnRocmVh
ZGhhbmRsZV9ucChwdGhyZWFkX3QgdGhyZWFkKTsKLVBUVzMyX0RMTFBPUlQgRFdPUkQgUFRXMzJf
Q0RFQ0wgcHRocmVhZF9nZXR3MzJ0aHJlYWRpZF9ucChwdGhyZWFkX3QgdGhyZWFkKTsKLQotLy8g
QW5kIG5vdyBldmVyeXRoaW5nIGVsc2UgdGhhdCBpc24ndCBqdXN0IGhlcmUgZm9yIGBwaWRfdGAu
Ci0KLS8vIFdlIGltcGxlbWVudCBhIHNhbmUgY29tcGFyaXNvbiBvcGVyYW5kIGZvcgotLy8gcHRo
cmVhZF90IGFuZCBhbiBpbnRlZ2VyIHNvIHRoYXQgaXQgbWF5IGJlCi0vLyBjb21wYXJlZCBhZ2Fp
bnN0IDAuCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KHB0aHJlYWRfdCBwdEEsIHVuc2lnbmVkIGlu
dCBiKSB7Ci0gIGlmIChwdEEucCA9PSBudWxscHRyKSB7Ci0gICAgcmV0dXJuIGIgPT0gMDsKLSAg
fQotICByZXR1cm4gcHRocmVhZF9nZXR3MzJ0aHJlYWRpZF9ucChwdEEpID09IGI7Ci19Ci0KLWlu
bGluZSBib29sIG9wZXJhdG9yIT0ocHRocmVhZF90IHB0QSwgdW5zaWduZWQgaW50IGIpIHsKLSAg
aWYgKHB0QS5wID09IG51bGxwdHIpIHsKLSAgICByZXR1cm4gYiAhPSAwOwotICB9Ci0gIHJldHVy
biBwdGhyZWFkX2dldHczMnRocmVhZGlkX25wKHB0QSkgIT0gYjsKLX0KLQotaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShwdGhyZWFkX3QgcHRBLCBwdGhyZWFkX3QgcHRCKSB7Ci0gIHJldHVybiBwdGhy
ZWFkX2VxdWFsKHB0QSwgcHRCKSAhPSAwOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KHB0
aHJlYWRfdCBwdEEsIHB0aHJlYWRfdCBwdEIpIHsKLSAgcmV0dXJuIHB0aHJlYWRfZXF1YWwocHRB
LCBwdEIpID09IDA7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPChwdGhyZWFkX3QgcHRBLCBw
dGhyZWFkX3QgcHRCKSB7Ci0gIHJldHVybiBwdEEucCA8IHB0Qi5wOwotfQotCi1pbmxpbmUgYm9v
bCBvcGVyYXRvciEocHRocmVhZF90IHB0QSkgewotICByZXR1cm4gcHRBID09IDA7Ci19Ci0KLWlu
bGluZSBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrKAotICAgIHB0aHJlYWRfYXR0cl90KiBhdHRy
LAotICAgIHZvaWQqKiBzdGFja2FkZHIsCi0gICAgc2l6ZV90KiBzdGFja3NpemUpIHsKLSAgaWYg
KHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIoYXR0ciwgc3RhY2thZGRyKSAhPSAwKSB7Ci0gICAg
cmV0dXJuIC0xOwotICB9Ci0gIGlmIChwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplKGF0dHIsIHN0
YWNrc2l6ZSkgIT0gMCkgewotICAgIHJldHVybiAtMTsKLSAgfQotICByZXR1cm4gMDsKLX0KLQot
aW5saW5lIGludAotcHRocmVhZF9hdHRyX3NldHN0YWNrKHB0aHJlYWRfYXR0cl90KiBhdHRyLCB2
b2lkKiBzdGFja2FkZHIsIHNpemVfdCBzdGFja3NpemUpIHsKLSAgaWYgKHB0aHJlYWRfYXR0cl9z
ZXRzdGFja2FkZHIoYXR0ciwgc3RhY2thZGRyKSAhPSAwKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9
Ci0gIGlmIChwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplKGF0dHIsIHN0YWNrc2l6ZSkgIT0gMCkg
ewotICAgIHJldHVybiAtMTsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotaW5saW5lIGludCBwdGhy
ZWFkX2F0dHJfZ2V0Z3VhcmRzaXplKAotICAgIHB0aHJlYWRfYXR0cl90KiAvKiBhdHRyICovLAot
ICAgIHNpemVfdCogZ3VhcmRzaXplKSB7Ci0gICpndWFyZHNpemUgPSAwOwotICByZXR1cm4gMDsK
LX0KLQotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci1uYW1lc3BhY2Ugc3RkIHsKLXRlbXBsYXRlIDw+
Ci1zdHJ1Y3QgaGFzaDxwdGhyZWFkX3Q+IHsKLSAgc3RkOjpzaXplX3Qgb3BlcmF0b3IoKShjb25z
dCBwdGhyZWFkX3QmIGspIGNvbnN0IHsKLSAgICByZXR1cm4gMCBeIHN0ZDo6aGFzaDxkZWNsdHlw
ZShrLnApPigpKGsucCkgXgotICAgICAgICBzdGQ6Omhhc2g8ZGVjbHR5cGUoay54KT4oKShrLngp
OwotICB9Ci19OwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9SRUFETUUubWQgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9SRUFETUUubWQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4NDgzM2Y1NjkxZDcxMGNlYTdlYjNmN2NhY2ZlMWM2
MDYzOTg1MWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvUkVB
RE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotV2FybmluZwotPT09PT09PQot
Ci1UaGVzZSBwb3J0YWJpbGl0eSBoZWFkZXJzIGFyZSAqKmludGVybmFsIGltcGxlbWVudGF0aW9u
IGRldGFpbHMqKi4KLQotVGhleSBhcmUgaW50ZW5kZWQgdG8gZW5zdXJlIHRoYXQgRm9sbHkgY2Fu
IGJ1aWxkIG9uIGEgdmFyaWV0eSBvZiBwbGF0Zm9ybXMuCi0KLVRoZXkgYXJlIG5vdCBpbnRlbmRl
ZCB0byBoZWxwIHlvdSBidWlsZCB5b3VyIHByb2dyYW1zIG9uIHRoZXNlIHBsYXRmb3Jtcy4KLQot
VGhleSBhcmUsIGFuZCB3aWxsIHJlbWFpbiwgdW5kb2N1bWVudGVkLiBUaGV5IGFyZSwgYW5kIHdp
bGwgcmVtYWluLCBzdWJqZWN0IHRvCi1yYXBpZCwgaW1tZWRpYXRlLCBhbmQgZHJhc3RpYyBjaGFu
Z2VzIC0gaW5jbHVkaW5nIGZ1bGwgcmV3cml0ZXMgYW5kIG1lcmNpbGVzcwotZGVsZXRpb25zIC0g
d2l0aG91dCBub3RpY2UuCi0KLU5vdGUgdGhhdCBiZWZvcmUgYWRkaW5nIGEgbmV3IGZpbGUgdG8g
dGhpcyBkaXJlY3RvcnkgeW91IHNob3VsZCBkZXRlcm1pbmUKLXdoZXRoZXIgdGhlIEFQSSB5b3Ug
YXJlIGFkZGluZyBpcyBhIHBvcnRhYmlsaXR5IGhlYWRlciBvciBqdXN0IGEgcGxhdGZvcm0KLWRl
cGVuZGVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIE9ubHkgcG9ydGFiaWxpdHkgaGVhZGVycyBi
ZWxvbmcgaW4gdGhpcwotZGlyZWN0b3J5LiBBIHBvcnRhYmlsaXR5IGhlYWRlciBpcyBkZWZpbmVk
IGFzIGEgaGVhZGVyIHRoYXQgcHJvdmlkZXMgdGhlIGV4YWN0Ci1BUEkgb2Ygc29tZSBwbGF0Zm9y
bSBvciBjb25maWd1cmF0aW9uIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1z
LgotSWYgdGhlIEFQSSBiZWluZyBhZGRlZCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IG9uIGF0IGxl
YXN0IG9uZSBvZiB0aGUgcGxhdGZvcm1zCi1Gb2xseSBzdXBwb3J0cywgdGhlbiBpdCBpcyBhbiBp
bXBsZW1lbnRhdGlvbiBkZXRhaWwsIGFuZCBkb2VzIG5vdCBiZWxvbmcgaW4KLXRoaXMgZGlyZWN0
b3J5LgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9s
bHkvcG9ydGFiaWxpdHkvU2VtYXBob3JlLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9TZW1hcGhvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNmNmYjhkMzVhNmY2ZDc3ZDIzZTcxNDhkZjAxOTZlMjZkZDA4ZWU2MC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9TZW1hcGhvcmUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9v
aywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lv
biAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBj
b3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj
ZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs
YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRl
ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lU
SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz
IG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj
ZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotLy8gT24gV2luZG93cywgdGhlIGluY2x1ZGUg
b3JkZXIgbWF0dGVycywgYXMgdGhlIHB0aHJlYWQgaW1wbGVtZW50YXRpb24gd2UKLS8vIHN1cHBv
cnQgYXR0ZW1wdHMgdG8gdXNlIGEgZGlmZmVyZW50IGRlZmluaXRpb24gb2YgYG1vZGVfdGAgdGhh
biBldmVyeXRoaW5nCi0vLyBlbHNlLCBzbyB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSBvdXIgZGVmaW5p
dGlvbiBvZiBpdCBpcyBmaXJzdC4KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9TeXNUeXBl
cy5oPgotCi0jaW5jbHVkZSA8c2VtYXBob3JlLmg+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9TdHJpbmcuaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3BvcnRhYmlsaXR5L1N0cmluZy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmQyNDE4NTBiMjY5NWFmN2MwNDllYWI2
YmI2NjkyYjYyZDcxMjQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3BvcnRhYmls
aXR5L1N0cmluZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAq
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8
c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJp
bGl0eS9Db25maWcuaD4KLQotI2lmICFkZWZpbmVkKF9XSU4zMikKLSNpbmNsdWRlIDxzdHJpbmdz
Lmg+Ci0jZW5kaWYKLQotI2lmICFGT0xMWV9IQVZFX01FTVJDSFIKLWV4dGVybiAiQyIgdm9pZCog
bWVtcmNocihjb25zdCB2b2lkKiBzLCBpbnQgYywgc2l6ZV90IG4pOwotI2VuZGlmCi0KLSNpZiBk
ZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykKLWV4dGVybiAiQyIgY2hhciog
c3RybmR1cChjb25zdCBjaGFyKiBhLCBzaXplX3QgbGVuKTsKLSNlbmRpZgotCi0jaWZkZWYgX1dJ
TjMyCi1leHRlcm4gIkMiIHsKLXZvaWQgYnplcm8odm9pZCogcywgc2l6ZV90IG4pOwotaW50IHN0
cmNhc2VjbXAoY29uc3QgY2hhciogYSwgY29uc3QgY2hhciogYik7Ci1pbnQgc3RybmNhc2VjbXAo
Y29uc3QgY2hhciogYSwgY29uc3QgY2hhciogYiwgc2l6ZV90IGMpOwotY2hhciogc3RydG9rX3Io
Y2hhciogc3RyLCBjaGFyIGNvbnN0KiBkZWxpbSwgY2hhcioqIGN0eCk7Ci19Ci0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3BvcnRh
YmlsaXR5L1N5c01lbWJhcnJpZXIuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2ZvbGx5L3BvcnRhYmlsaXR5L1N5c01lbWJhcnJpZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGJiMzEwM2FhMDRmYWFiZjdlMmExMzM3NDZkNzkyNTViY2QwYTg4MS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9TeXNNZW1iYXJyaWVyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFj
ZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3Jn
L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi
bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAq
IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhl
IExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBmb2xseSB7Ci1uYW1l
c3BhY2UgZGV0YWlsIHsKLQotaW50IHN5c01lbWJhcnJpZXIoKTsKLWJvb2wgc3lzTWVtYmFycmll
ckF2YWlsYWJsZSgpOwotfQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvU3lzTW1hbi5oIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvU3lzTW1hbi5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjMwNTQ3MGIxYTk0ODgyOTA4NGE1YTkzNTRhNzM0ZGI4
YzhhN2VkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3BvcnRhYmlsaXR5L1N5c01t
YW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAx
NyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5z
ZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNo
ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBw
bGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
LAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmbmRlZiBfV0lOMzIKLQot
I2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0KLS8vIE1BUF9BTk9OWU1PVVMgaXMgbmFtZWQgTUFQX0FO
T04gb24gT1NYL0JTRC4KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX0ZyZWVC
U0RfXykKLSNpZiAhZGVmaW5lZChNQVBfQU5PTllNT1VTKSAmJiBkZWZpbmVkKE1BUF9BTk9OKQot
I2RlZmluZSBNQVBfQU5PTllNT1VTIE1BUF9BTk9OCi0jZW5kaWYKLSNlbmRpZgotCi0jZWxzZQot
Ci0jaW5jbHVkZSA8Y3N0ZGludD4KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jZGVmaW5l
IE1BUF9BTk9OWU1PVVMgMQotI2RlZmluZSBNQVBfQU5PTiBNQVBfQU5PTllNT1VTCi0jZGVmaW5l
IE1BUF9TSEFSRUQgMgotI2RlZmluZSBNQVBfUFJJVkFURSA0Ci0jZGVmaW5lIE1BUF9QT1BVTEFU
RSA4Ci0jZGVmaW5lIE1BUF9OT1JFU0VSVkUgMTYKLSNkZWZpbmUgTUFQX0ZJWEVEIDMyCi0KLSNk
ZWZpbmUgTUFQX0ZBSUxFRCAoKHZvaWQqKS0xKQotCi0jZGVmaW5lIFBST1RfTk9ORSAwCi0jZGVm
aW5lIFBST1RfUkVBRCAxCi0jZGVmaW5lIFBST1RfV1JJVEUgMgotI2RlZmluZSBQUk9UX0VYRUMg
NAotCi0jZGVmaW5lIE1BRFZfTk9STUFMIDAKLSNkZWZpbmUgTUFEVl9ET05UTkVFRCAwCi0jZGVm
aW5lIE1BRFZfU0VRVUVOVElBTCAwCi0KLWV4dGVybiAiQyIgewotaW50IG1hZHZpc2UoY29uc3Qg
dm9pZCogYWRkciwgc2l6ZV90IGxlbiwgaW50IGFkdmlzZSk7Ci1pbnQgbWxvY2soY29uc3Qgdm9p
ZCogYWRkciwgc2l6ZV90IGxlbik7Ci12b2lkKiBtbWFwKHZvaWQqIGFkZHIsIHNpemVfdCBsZW5n
dGgsIGludCBwcm90LCBpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2ZmKTsKLWludCBtcHJvdGVj
dCh2b2lkKiBhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHByb3QpOwotaW50IG11bmxvY2soY29uc3Qg
dm9pZCogYWRkciwgc2l6ZV90IGxlbmd0aCk7Ci1pbnQgbXVubWFwKHZvaWQqIGFkZHIsIHNpemVf
dCBsZW5ndGgpOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3BvcnRhYmlsaXR5L1N5c1Jlc291cmNlLmggYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9TeXNSZXNvdXJj
ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkNzMwMWM3NzgzMWQ0YWU3Yjg4ZDZi
YjIwMmI2ZWU3NzUyY2U0YWI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3BvcnRh
YmlsaXR5L1N5c1Jlc291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICog
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
Zm5kZWYgX1dJTjMyCi0jaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+Ci0jZWxzZQotI2luY2x1ZGUg
PGNzdGRpbnQ+Ci0KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9TeXNUaW1lLmg+Ci0KLSNk
ZWZpbmUgUkxJTUlUX0NPUkUgMAotI2RlZmluZSBSTElNSVRfTk9GSUxFIDAKLSNkZWZpbmUgUkxJ
TUlUX0RBVEEgMAotI2RlZmluZSBSTElNSVRfU1RBQ0sgMwotI2RlZmluZSBSTElNX0lORklOSVRZ
IFNJWkVfTUFYCi0KLSNkZWZpbmUgUlVTQUdFX1NFTEYgMAotI2RlZmluZSBSVVNBR0VfQ0hJTERS
RU4gMAotI2RlZmluZSBSVVNBR0VfVEhSRUFEIDAKLQotdXNpbmcgcmxpbV90ID0gc2l6ZV90Owot
c3RydWN0IHJsaW1pdCB7Ci0gIHJsaW1fdCBybGltX2N1cjsKLSAgcmxpbV90IHJsaW1fbWF4Owot
fTsKLQotc3RydWN0IHJ1c2FnZSB7Ci0gIHRpbWV2YWwgcnVfdXRpbWU7Ci0gIHRpbWV2YWwgcnVf
c3RpbWU7Ci0gIGxvbmcgcnVfbWF4cnNzOwotICBsb25nIHJ1X2l4cnNzOwotICBsb25nIHJ1X2lk
cnNzOwotICBsb25nIHJ1X2lzcnNzOwotICBsb25nIHJ1X21pbmZsdDsKLSAgbG9uZyBydV9tYWpm
bHQ7Ci0gIGxvbmcgcnVfbnN3YXA7Ci0gIGxvbmcgcnVfaW5ibG9jazsKLSAgbG9uZyBydV9vdWJs
b2NrOwotICBsb25nIHJ1X21zZ3NuZDsKLSAgbG9uZyBydV9tc2dyY3Y7Ci0gIGxvbmcgcnVfbnNp
Z25hbHM7Ci0gIGxvbmcgcnVfbnZjc3c7Ci0gIGxvbmcgcnVfbml2Y3N3OwotfTsKLQotZXh0ZXJu
ICJDIiB7Ci1pbnQgZ2V0cmxpbWl0KGludCB0eXBlLCBybGltaXQqIGRzdCk7Ci1pbnQgZ2V0cnVz
YWdlKGludCB3aG8sIHJ1c2FnZSogdXNhZ2UpOwotaW50IHNldHJsaW1pdChpbnQgdHlwZSwgcmxp
bWl0KiBzcmMpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9TeXNTeXNjYWxsLmggYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9TeXNTeXNjYWxsLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MjVjZDEzNDY5MzhiZDkyNTA2NzE4M2Vm
ZDI3MmRhZTlhYzg1MDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxp
dHkvU3lzU3lzY2FsbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFw
YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0g
KiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
LSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWZuZGVm
IF9XSU4zMgotI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKLSNkZWZpbmUgRk9MTFlfU1lTX2dldHRpZCBTWVNfdGhyZWFkX3NlbGZpZAotI2VsaWYgZGVm
aW5lZChTWVNfZ2V0dGlkKQotI2RlZmluZSBGT0xMWV9TWVNfZ2V0dGlkIFNZU19nZXR0aWQKLSNl
bHNlCi0jZGVmaW5lIEZPTExZX1NZU19nZXR0aWQgX19OUl9nZXR0aWQKLSNlbmRpZgotI2VuZGlm
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9w
b3J0YWJpbGl0eS9TeXNUaW1lLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9mb2xseS9wb3J0YWJpbGl0eS9TeXNUaW1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDJiNjZkYmRkMzc3MzU1ZDljY2I0NjM3MGY1OTcxMTRlYzMzODkzZGUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvU3lzVGltZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0g
KgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
ICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
TlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWZuZGVmIF9XSU4zMgotI2luY2x1ZGUgPHN5cy90aW1lLmg+
Ci0jZWxzZQotLy8gU29tZW9uZSBkZWNpZGVkIHRoaXMgd2FzIGEgZ29vZCBwbGFjZSB0byBkZWZp
bmUgdGltZXZhbC4uLi4uCi0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvV2luZG93cy5oPgot
c3RydWN0IHRpbWV6b25lIHsKLSAgaW50IHR6X21pbnV0ZXN3ZXN0OwotICBpbnQgdHpfZHN0dGlt
ZTsKLX07Ci0KLWV4dGVybiAiQyIgewotLy8gTm90ZSB0aGF0IHRoaXMgbmVlZHMgdG8gZXhwbGlj
aXRseSBiZSBgc3RydWN0IHRpbWV6b25lYCBkdWUgdG8gdGhlIGZhY3QgdGhhdAotLy8gdGhlIHB5
dGhvbiAzIGhlYWRlcnMgYCNkZWZpbmUgdGltZXpvbmUgX3RpbWV6b25lYCBvbiBXaW5kb3dzLiBg
X3RpbWV6b25lYCBpcwotLy8gYSBnbG9iYWwgZmllbGQgdGhhdCBjb250YWlucyBpbmZvcm1hdGlv
biBvbiB0aGUgY3VycmVudCB0aW1lem9uZS4gQnkKLS8vIGV4cGxpY2l0bHkgc3BlY2lmeWluZyB0
aGF0IHRoaXMgaXMgYSBgc3RydWN0YCwgd2UgZW5zdXJlIHRoYXQgaXQncyB0cmVhdGVkIGFzCi0v
LyBhIHR5cGUsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBuYW1lIHRoYXQgdHlwZSBhY3R1YWxseSBpcyA6
KQotLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBicmVhayBpZiBgZ2V0dGltZW9mZGF5YCBldmVyIGJl
Y29tZXMgZGVjbGFyZWQgYXMgYW55dGhpbmcKLS8vIG90aGVyIHRoYW4gYGV4dGVybiAiQyJgLCBh
cyB0aGUgbWFuZ2xlZCBuYW1lIHdvdWxkIGJlIGRlcGVuZGVudCBvbiB3aGV0aGVyCi0vLyBweXRo
b24gaGFkIGJlZW4gaW5jbHVkZWQgYmVmb3JlIHRoaXMgaGVhZGVyLgotaW50IGdldHRpbWVvZmRh
eSh0aW1ldmFsKiB0diwgc3RydWN0IHRpbWV6b25lKik7Ci12b2lkIHRpbWVyYWRkKHRpbWV2YWwq
IGEsIHRpbWV2YWwqIGIsIHRpbWV2YWwqIHJlcyk7Ci12b2lkIHRpbWVyc3ViKHRpbWV2YWwqIGEs
IHRpbWV2YWwqIGIsIHRpbWV2YWwqIHJlcyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3BvcnRhYmlsaXR5L1N5c1R5cGVz
LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0
eS9TeXNUeXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2MDE2ODUwNmY4MGE0
Nzc3YWFmMWE3OTRjOTgxNjJiMTgyNjBiNGMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2Zv
bGx5L3BvcnRhYmlsaXR5L1N5c1R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAq
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoK
LSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICog
VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n
LCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBM
aWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu
ZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotI2lmZGVmIF9XSU4zMgotI2luY2x1ZGUgPGJh
c2V0c2QuaD4KLQotI2RlZmluZSBIQVZFX01PREVfVCAxCi0KLS8vIFRoaXMgaXMgYSBtYXNzaXZl
IHBhaW4gdG8gaGF2ZSBiZSBhbiBgaW50YCBkdWUgdG8gdGhlIHB0aHJlYWQgaW1wbGVtZW50YXRp
b24KLS8vIHdlIHN1cHBvcnQsIGJ1dCBpdCdzIGZhciBtb3JlIGNvbXBhdGlibGUgd2l0aCB0aGUg
cmVzdCBvZiB0aGUgd2luZG93cyB3b3JsZAotLy8gYXMgYW4gYGludGAgdGhhbiBpdCB3b3VsZCBi
ZSBhcyBhIGB2b2lkKmAKLXVzaW5nIHBpZF90ID0gaW50OwotLy8gVGhpcyBpc24ndCBhY3R1YWxs
eSBzdXBwb3NlZCB0byBiZSBkZWZpbmVkIGhlcmUsIGJ1dCBpdCdzIHRoZSBtb3N0Ci0vLyBhcHBy
b3ByaWF0ZSBwbGFjZSB3aXRob3V0IGRlZmluaW5nIGEgcG9ydGFiaWxpdHkgaGVhZGVyIGZvciBz
dGRpbnQuaAotLy8gd2l0aCBqdXN0IHRoaXMgc2luZ2xlIHR5cGVkZWYuCi11c2luZyBzc2l6ZV90
ID0gU1NJWkVfVDsKLS8vIFRoZSBXaW5kb3dzIGhlYWRlcnMgZG9uJ3QgZGVmaW5lIHRoaXMgYW55
d2hlcmUsIG5vciBkbyBhbnkgb2YgdGhlIGxpYnMKLS8vIHRoYXQgRm9sbHkgZGVwZW5kcyBvbiwg
c28gZGVmaW5lIGl0IGhlcmUuCi11c2luZyBtb2RlX3QgPSB1bnNpZ25lZCBzaG9ydDsKLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkv
cG9ydGFiaWxpdHkvU3lzVWlvLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9mb2xseS9wb3J0YWJpbGl0eS9TeXNVaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMmZhMzU2YWE5M2EwMWIyNWZiMTBmNmU0NjJjYWRjMTBlMmM0OTdhNy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9TeXNVaW8uaAorKysgL2Rldi9udWxsCkBA
IC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoK
LSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi
TGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T
RS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVk
IHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQu
Ci0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg
cGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L0NvbmZpZy5oPgot
I2luY2x1ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L0lPVmVjLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvcG9y
dGFiaWxpdHkvU3lzVHlwZXMuaD4KLQotI2lmICFGT0xMWV9IQVZFX1BSRUFEVgotZXh0ZXJuICJD
IiBzc2l6ZV90IHByZWFkdihpbnQgZmQsIGNvbnN0IGlvdmVjKiBpb3YsIGludCBjb3VudCwgb2Zm
X3Qgb2Zmc2V0KTsKLSNlbmRpZgotI2lmICFGT0xMWV9IQVZFX1BXUklURVYKLWV4dGVybiAiQyIg
c3NpemVfdCBwd3JpdGV2KGludCBmZCwgY29uc3QgaW92ZWMqIGlvdiwgaW50IGNvdW50LCBvZmZf
dCBvZmZzZXQpOwotI2VuZGlmCi0KLSNpZmRlZiBfV0lOMzIKLWV4dGVybiAiQyIgc3NpemVfdCBy
ZWFkdihpbnQgZmQsIGNvbnN0IGlvdmVjKiBpb3YsIGludCBjb3VudCk7Ci1leHRlcm4gIkMiIHNz
aXplX3Qgd3JpdGV2KGludCBmZCwgY29uc3QgaW92ZWMqIGlvdiwgaW50IGNvdW50KTsKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgZm9sbHkgewotI2lmZGVmIElPVl9NQVggLy8gbm90IGRlZmluZWQgb24g
QW5kcm9pZAotY29uc3RleHByIHNpemVfdCBrSW92TWF4ID0gSU9WX01BWDsKLSNlbHNlCi1jb25z
dGV4cHIgc2l6ZV90IGtJb3ZNYXggPSBVSU9fTUFYSU9WOwotI2VuZGlmCi19CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0eS9U
aW1lLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJp
bGl0eS9UaW1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNmM3OTQxYzE5ZWFi
YmVlZGNmMmIwYzU3NjQ3MDc4MjFkYTQ1NDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9s
bHkvcG9ydGFiaWxpdHkvVGltZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAg
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAq
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotCi0jaW5jbHVkZSA8Zm9sbHkv
cG9ydGFiaWxpdHkvQ29uZmlnLmg+Ci0KLS8vIE9TWCBpcyBhIHBhaW4uIFRoZSBYQ29kZSA4IFNE
SyBhbHdheXMgZGVjbGFyZXMgY2xvY2tfZ2V0dGltZQotLy8gZXZlbiBpZiB0aGUgdGFyZ2V0IE9T
IHZlcnNpb24gZG9lc24ndCBzdXBwb3J0IGl0LCBzbyB5b3UgZ2V0Ci0vLyBhbiBlcnJvciBhdCBy
dW50aW1lIGJlY2F1c2UgaXQgY2FuJ3QgcmVzb2x2ZSB0aGUgc3ltYm9sLiBXZQotLy8gc29sdmUg
dGhhdCBieSBwcmV0ZW5kaW5nIHdlIGhhdmUgaXQgaGVyZSBpbiB0aGUgaGVhZGVyIGFuZAotLy8g
dGhlbiBlbmFibGUgb3VyIGltcGxlbWVudGF0aW9uIG9uIHRoZSBzb3VyY2Ugc2lkZSBzbyB0aGF0
Ci0vLyBnZXRzIGxpbmtlZCBpbiBpbnN0ZWFkLgotI2lmIF9fTUFDSF9fICYmICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChNQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA8IE1BQ19PU19YX1ZFUlNJT05fMTBfMTIgfHwgXAotICAgICBfX0lQ
SE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA8IF9fSVBIT05FXzEwXzApCi0KLSNpZmRlZiBG
T0xMWV9IQVZFX0NMT0NLX0dFVFRJTUUKLSN1bmRlZiBGT0xMWV9IQVZFX0NMT0NLX0dFVFRJTUUK
LSNlbmRpZgotCi0jZGVmaW5lIEZPTExZX0hBVkVfQ0xPQ0tfR0VUVElNRSAxCi0jZGVmaW5lIEZP
TExZX0ZPUkNFX0NMT0NLX0dFVFRJTUVfREVGSU5JVElPTiAxCi0KLSNlbmRpZgotCi0vLyBUaGVz
ZSBhcmVuJ3QgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMsIHNvIHdlIGNhbiBvbmx5IGRlY2xhcmUg
dGhlbSBvbgotLy8gcGxhdGZvcm1zIHdlIHN1cHBvcnQuCi0jaWYgIUZPTExZX0hBVkVfQ0xPQ0tf
R0VUVElNRSAmJiAoZGVmaW5lZChfX01BQ0hfXykgfHwgZGVmaW5lZChfV0lOMzIpKQotI2RlZmlu
ZSBDTE9DS19SRUFMVElNRSAwCi0jZGVmaW5lIENMT0NLX01PTk9UT05JQyAxCi0jZGVmaW5lIENM
T0NLX1BST0NFU1NfQ1BVVElNRV9JRCAyCi0jZGVmaW5lIENMT0NLX1RIUkVBRF9DUFVUSU1FX0lE
IDMKLQotdHlwZWRlZiB1aW50OF90IGNsb2NraWRfdDsKLWV4dGVybiAiQyIgaW50IGNsb2NrX2dl
dHRpbWUoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjKiB0cyk7Ci1leHRlcm4gIkMi
IGludCBjbG9ja19nZXRyZXMoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjKiB0cyk7
Ci0jZW5kaWYKLQotI2lmZGVmIF9XSU4zMgotI2RlZmluZSBUTV9ZRUFSX0JBU0UgKDE5MDApCi0K
LWV4dGVybiAiQyIgewotY2hhciogYXNjdGltZV9yKGNvbnN0IHRtKiB0bSwgY2hhciogYnVmKTsK
LWNoYXIqIGN0aW1lX3IoY29uc3QgdGltZV90KiB0LCBjaGFyKiBidWYpOwotdG0qIGdtdGltZV9y
KGNvbnN0IHRpbWVfdCogdCwgdG0qIHJlcyk7Ci10bSogbG9jYWx0aW1lX3IoY29uc3QgdGltZV90
KiB0LCB0bSogbyk7Ci1pbnQgbmFub3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogcmVxdWVz
dCwgc3RydWN0IHRpbWVzcGVjKiByZW1haW4pOwotY2hhciogc3RycHRpbWUoCi0gICAgY29uc3Qg
Y2hhciogX19yZXN0cmljdCBidWYsCi0gICAgY29uc3QgY2hhciogX19yZXN0cmljdCBmbXQsCi0g
ICAgc3RydWN0IHRtKiBfX3Jlc3RyaWN0IHRtKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxpdHkvVW5pc3Rk
LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9wb3J0YWJpbGl0
eS9VbmlzdGQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRjZDEwNmE5OGZmMzFk
ZjMxNDE0ZmU1Nzk4MTE0MDgwNDdjYzNkZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xs
eS9wb3J0YWJpbGl0eS9VbmlzdGQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICog
ICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxl
c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
ZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vu
c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0g
KiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2lmbmRlZiBfV0lOMzIKLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jZWxzZQotCi0jaW5jbHVk
ZSA8Y3N0ZGludD4KLQotI2luY2x1ZGUgPHN5cy9sb2NraW5nLmg+Ci0KLSNpbmNsdWRlIDxmb2xs
eS9wb3J0YWJpbGl0eS9TeXNUeXBlcy5oPgotCi0vLyBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRo
ZSBub3JtYWwgaGVhZGVycyBiZWNhdXNlIHRoZXJlIGFyZSBhIGZldyBjYXNlcywKLS8vIHN1Y2gg
YXMgY2xvc2UoKSwgd2hlcmUgd2UgbmVlZCB0byBvdmVycmlkZSB0aGUgZGVmaW5pdGlvbiBvZiBh
biBleGlzdGluZwotLy8gZnVuY3Rpb24uIFRvIGF2b2lkIGNvbmZsaWN0cyBhdCBsaW5rIHRpbWUs
IGV2ZXJ5dGhpbmcgaGVyZSBpcyBpbiBhIG5hbWVzcGFjZQotLy8gd2hpY2ggaXMgdGhlbiB1c2Vk
IGdsb2JhbGx5LgotCi0jZGVmaW5lIF9TQ19QQUdFU0laRSAxCi0jZGVmaW5lIF9TQ19QQUdFX1NJ
WkUgX1NDX1BBR0VTSVpFCi0jZGVmaW5lIF9TQ19OUFJPQ0VTU09SU19PTkxOIDIKLSNkZWZpbmUg
X1NDX05QUk9DRVNTT1JTX0NPTkYgMgotCi0vLyBXaW5kb3dzIGRvZXNuJ3QgZGVmaW5lIHRoZXNl
LCBidXQgdGhlc2UgYXJlIHRoZSBjb3JyZWN0IHZhbHVlcwotLy8gZm9yIFdpbmRvd3MuCi0jZGVm
aW5lIFNURElOX0ZJTEVOTyAwCi0jZGVmaW5lIFNURE9VVF9GSUxFTk8gMQotI2RlZmluZSBTVERF
UlJfRklMRU5PIDIKLQotLy8gV2luZG93cyBpcyB3ZWlyZCBhbmQgZG9lc24ndCBhY3R1YWxseSBk
ZWZpbmVkIHRoZXNlCi0vLyBmb3IgdGhlIHBhcmFtZXRlcnMgdG8gYWNjZXNzLCBzbyB3ZSBoYXZl
IHRvIGRvIGl0IG91cnNlbHZlcyAtXy0uLi4KLSNkZWZpbmUgRl9PSyAwCi0jZGVmaW5lIFhfT0sg
Rl9PSwotI2RlZmluZSBXX09LIDIKLSNkZWZpbmUgUl9PSyA0Ci0jZGVmaW5lIFJXX09LIDYKLQot
I2RlZmluZSBGX0xPQ0sgX0xLX0xPQ0sKLSNkZWZpbmUgRl9VTE9DSyBfTEtfVU5MQ0sKLQotbmFt
ZXNwYWNlIGZvbGx5IHsKLW5hbWVzcGFjZSBwb3J0YWJpbGl0eSB7Ci1uYW1lc3BhY2UgdW5pc3Rk
IHsKLWludCBhY2Nlc3MoY2hhciBjb25zdCogZm4sIGludCBhbSk7Ci1pbnQgY2hkaXIoY29uc3Qg
Y2hhciogcGF0aCk7Ci1pbnQgY2xvc2UoaW50IGZoKTsKLWludCBkdXAoaW50IGZoKTsKLWludCBk
dXAyKGludCBmaHMsIGludCBmaGQpOwotaW50IGZzeW5jKGludCBmZCk7Ci1pbnQgZnRydW5jYXRl
KGludCBmZCwgb2ZmX3QgbGVuKTsKLWNoYXIqIGdldGN3ZChjaGFyKiBidWYsIGludCBzeik7Ci1p
bnQgZ2V0ZHRhYmxlc2l6ZSgpOwotaW50IGdldGdpZCgpOwotcGlkX3QgZ2V0cGlkKCk7Ci1waWRf
dCBnZXRwcGlkKCk7Ci1pbnQgZ2V0dWlkKCk7Ci1pbnQgaXNhdHR5KGludCBmaCk7Ci1pbnQgbG9j
a2YoaW50IGZkLCBpbnQgY21kLCBvZmZfdCBsZW4pOwotb2ZmX3QgbHNlZWsoaW50IGZoLCBvZmZf
dCBvZmYsIGludCBvcmlnKTsKLXNzaXplX3QgcmVhZChpbnQgZmgsIHZvaWQqIGJ1Ziwgc2l6ZV90
IG1jYyk7Ci1pbnQgcm1kaXIoY29uc3QgY2hhciogcGF0aCk7Ci1pbnQgcGlwZShpbnQgcHRoWzJd
KTsKLXNzaXplX3QgcHJlYWQoaW50IGZkLCB2b2lkKiBidWYsIHNpemVfdCBjb3VudCwgb2ZmX3Qg
b2Zmc2V0KTsKLXNzaXplX3QgcHdyaXRlKGludCBmZCwgY29uc3Qgdm9pZCogYnVmLCBzaXplX3Qg
Y291bnQsIG9mZl90IG9mZnNldCk7Ci1zc2l6ZV90IHJlYWRsaW5rKGNvbnN0IGNoYXIqIHBhdGgs
IGNoYXIqIGJ1Ziwgc2l6ZV90IGJ1Zmxlbik7Ci12b2lkKiBzYnJrKGludHB0cl90IGkpOwotdW5z
aWduZWQgaW50IHNsZWVwKHVuc2lnbmVkIGludCBzZWNvbmRzKTsKLWxvbmcgc3lzY29uZihpbnQg
dHApOwotaW50IHRydW5jYXRlKGNvbnN0IGNoYXIqIHBhdGgsIG9mZl90IGxlbik7Ci1pbnQgdXNs
ZWVwKHVuc2lnbmVkIGludCBtcyk7Ci1zc2l6ZV90IHdyaXRlKGludCBmaCwgdm9pZCBjb25zdCog
YnVmLCBzaXplX3QgY291bnQpOwotfQotfQotfQotCi0vKiB1c2luZyBvdmVycmlkZSAqLyB1c2lu
ZyBuYW1lc3BhY2UgZm9sbHk6OnBvcnRhYmlsaXR5Ojp1bmlzdGQ7Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvcG9ydGFiaWxp
dHkvV2luZG93cy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkv
cG9ydGFiaWxpdHkvV2luZG93cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDAy
YmYxZjk4YWE2MTE3ODU2OTQ5YmZjZTk2ZmM1OTdlMTZjNDdkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2ZvbGx5L3BvcnRhYmlsaXR5L1dpbmRvd3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExp
Y2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5z
ZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
LSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBT
ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz
c2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotLy8gT25seSBkbyBhbnl0aGluZyBpZiB3ZSBhcmUgb24gd2luZG93cy4KLSNp
ZmRlZiBfV0lOMzIKLS8vIFRoaXMgaGVhZGVyIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgaW4tcGxh
Y2Ugb2YgaW5jbHVkaW5nIDxXaW5kb3dzLmg+LAotLy8gPFdpblNvY2syLmg+LCA8aW8uaD4gb3Ig
PGRpcmVjdC5oPi4KLS8vIEl0IGluY2x1ZGVzIGFsbCBvZiB0aGVtLCBhbmQgdW5kZWZpbmVzIGNl
cnRhaW4gbmFtZXMgZGVmaW5lZCBieSB0aGVtIHRoYXQKLS8vIGFyZSB1c2VkIGluIHBsYWNlcyBp
biBGb2xseS4KLS8vCi0vLyBUaGVzZSBoYXZlIHRvIGJlIHRoaXMgd2F5IGJlY2F1c2Ugd2UgZGVm
aW5lIG91ciBvd24gdmVyc2lvbnMKLS8vIG9mIGNsb3NlKCksIGJlY2F1c2UgdGhlIG5vcm1hbCBX
aW5kb3dzIHZlcnNpb25zIGRvbid0IGhhbmRsZQotLy8gc29ja2V0cyBhdCBhbGwuCi0jaWZuZGVm
IF9fU1REQ19fCi0vKiBub2xpbnQgKi8KLSNkZWZpbmUgX19TVERDX18gMQotI2luY2x1ZGUgPGRp
cmVjdC5oPiAvLyBub2xpbnQKLSNpbmNsdWRlIDxpby5oPiAvLyBub2xpbnQKLSN1bmRlZiBfX1NU
RENfXwotI2Vsc2UKLSNpbmNsdWRlIDxkaXJlY3QuaD4gLy8gbm9saW50Ci0jaW5jbHVkZSA8aW8u
aD4gLy8gbm9saW50Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQobWluKSB8fCBkZWZpbmVkKG1heCkK
LSNlcnJvciBXaW5kb3dzLmggbmVlZHMgdG8gYmUgaW5jbHVkZWQgYnkgdGhpcyBoZWFkZXIsIG9y
IGVsc2UgTk9NSU5NQVggbmVlZHMgXAotIHRvIGJlIGRlZmluZWQgYmVmb3JlIGluY2x1ZGluZyBp
dCB5b3Vyc2VsZi4KLSNlbmRpZgotCi0vLyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlLCBmb3Igc29t
ZSBhYnN1cmQgcmVhc29uLCBvbmUgb2YgdGhlIHdpbmRvd3MgaGVhZGVycwotLy8gdHJpZXMgdG8g
ZGVmaW5lICJtaW4iIGFuZCAibWF4IiBhcyBtYWNyb3MsIHdoaWNoIG1lc3NlcyB1cCBtb3N0IHVz
ZXMgb2YKLS8vIHN0ZDo6bnVtZXJpY19saW1pdHMuCi0jaWZuZGVmIE5PTUlOTUFYCi0jZGVmaW5l
IE5PTUlOTUFYIDEKLSNlbmRpZgotCi0jaW5jbHVkZSA8V2luU29jazIuaD4KLSNpbmNsdWRlIDxX
aW5kb3dzLmg+Ci0KLSNpZmRlZiBDQUxfR1JFR09SSUFOCi0jdW5kZWYgQ0FMX0dSRUdPUklBTgot
I2VuZGlmCi0KLS8vIERlZmluZWQgaW4gdGhlIEdESSBpbnRlcmZhY2UuCi0jaWZkZWYgRVJST1IK
LSN1bmRlZiBFUlJPUgotI2VuZGlmCi0KLS8vIERlZmluZWQgaW4gbWlud2luZGVmLmgKLSNpZmRl
ZiBJTgotI3VuZGVmIElOCi0jZW5kaWYKLQotLy8gRGVmaW5lZCBpbiB3aW5lcnJvci5oCi0jaWZk
ZWYgTk9fRVJST1IKLSN1bmRlZiBOT19FUlJPUgotI2VuZGlmCi0KLS8vIERlZmluZWQgaW4gbWlu
d2luZGVmLmgKLSNpZmRlZiBPVVQKLSN1bmRlZiBPVVQKLSNlbmRpZgotCi0vLyBEZWZpbmVkIGlu
IG1pbndpbmRlZi5oCi0jaWZkZWYgU1RSSUNUCi0jdW5kZWYgU1RSSUNUCi0jZW5kaWYKLQotLy8g
RGVmaW5lZCBpbiBXaW5iYXNlLmgKLSNpZmRlZiBZaWVsZAotI3VuZGVmIFlpZWxkCi0jZW5kaWYK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9mb2xseS9zdGF0cy9IaXN0b2dyYW0tZGVmcy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZm9sbHkvc3RhdHMvSGlzdG9ncmFtLWRlZnMuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTEyNjQxN2JjODE5Zjg3NTE3MzRmNjM2NmVlNzQ4NTVhNDZkMTJkOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9zdGF0cy9IaXN0b2dyYW0tZGVmcy5oCisr
KyAvZGV2L251bGwKQEAgLTEsMjg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNl
Ym9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcv
bGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs
ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1
bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICog
V0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHBy
ZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5n
dWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUg
TGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGZvbGx5L0NvbnYuaD4K
LSNpbmNsdWRlIDxmb2xseS9zdGF0cy9IaXN0b2dyYW0uaD4KLQotI2luY2x1ZGUgPGdsb2cvbG9n
Z2luZy5oPgotCi1uYW1lc3BhY2UgZm9sbHkgewotCi1uYW1lc3BhY2UgZGV0YWlsIHsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEJ1Y2tldFQ+Ci1IaXN0b2dyYW1CdWNrZXRzPFQs
IEJ1Y2tldFQ+OjpIaXN0b2dyYW1CdWNrZXRzKAotICAgIFZhbHVlVHlwZSBidWNrZXRTaXplLAot
ICAgIFZhbHVlVHlwZSBtaW4sCi0gICAgVmFsdWVUeXBlIG1heCwKLSAgICBjb25zdCBCdWNrZXRU
eXBlJiBkZWZhdWx0QnVja2V0KQotICAgIDogYnVja2V0U2l6ZV8oYnVja2V0U2l6ZSksIG1pbl8o
bWluKSwgbWF4XyhtYXgpIHsKLSAgQ0hFQ0tfR1QoYnVja2V0U2l6ZV8sIFZhbHVlVHlwZSgwKSk7
Ci0gIENIRUNLX0xUKG1pbl8sIG1heF8pOwotCi0gIC8vIERlbGliZXJhdGVseSBtYWtlIHRoaXMg
YSBzaWduZWQgdHlwZSwgYmVjYXVzZSB3ZSdyZSBhYm91dAotICAvLyB0byBjb21wYXJlIGl0IGFn
YWluc3QgbWF4LW1pbiwgd2hpY2ggaXMgbm9taW5hbGx5IHNpZ25lZCwgdG9vLgotICBpbnQ2NF90
IG51bUJ1Y2tldHMgPSBpbnQ2NF90KChtYXggLSBtaW4pIC8gYnVja2V0U2l6ZSk7Ci0gIC8vIFJv
dW5kIHVwIGlmIHRoZSBidWNrZXQgc2l6ZSBkb2VzIG5vdCBmaXQgZXZlbmx5Ci0gIGlmIChudW1C
dWNrZXRzICogYnVja2V0U2l6ZSA8IG1heCAtIG1pbikgewotICAgICsrbnVtQnVja2V0czsKLSAg
fQotICAvLyBBZGQgMiBmb3IgdGhlIGV4dHJhICdiZWxvdyBtaW4nIGFuZCAnYWJvdmUgbWF4JyBi
dWNrZXRzCi0gIG51bUJ1Y2tldHMgKz0gMjsKLSAgYnVja2V0c18uYXNzaWduKHNpemVfdChudW1C
dWNrZXRzKSwgZGVmYXVsdEJ1Y2tldCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBCdWNrZXRUeXBlPgotc2l6ZV90IEhpc3RvZ3JhbUJ1Y2tldHM8VCwgQnVja2V0VHlwZT46
OmdldEJ1Y2tldElkeChWYWx1ZVR5cGUgdmFsdWUpIGNvbnN0IHsKLSAgaWYgKHZhbHVlIDwgbWlu
XykgewotICAgIHJldHVybiAwOwotICB9IGVsc2UgaWYgKHZhbHVlID49IG1heF8pIHsKLSAgICBy
ZXR1cm4gYnVja2V0c18uc2l6ZSgpIC0gMTsKLSAgfSBlbHNlIHsKLSAgICAvLyB0aGUgMSBpcyB0
aGUgYmVsb3dfbWluIGJ1Y2tldAotICAgIHJldHVybiBzaXplX3QoKCh2YWx1ZSAtIG1pbl8pIC8g
YnVja2V0U2l6ZV8pICsgMSk7Ci0gIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEJ1Y2tldFR5cGU+Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ291bnRGbj4KLXVpbnQ2NF90IEhp
c3RvZ3JhbUJ1Y2tldHM8VCwgQnVja2V0VHlwZT46OmNvbXB1dGVUb3RhbENvdW50KAotICAgIENv
dW50Rm4gY291bnRGcm9tQnVja2V0KSBjb25zdCB7Ci0gIHVpbnQ2NF90IGNvdW50ID0gMDsKLSAg
Zm9yIChzaXplX3QgbiA9IDA7IG4gPCBidWNrZXRzXy5zaXplKCk7ICsrbikgewotICAgIGNvdW50
ICs9IGNvdW50RnJvbUJ1Y2tldChjb25zdF9jYXN0PGNvbnN0IEJ1Y2tldFR5cGUmPihidWNrZXRz
X1tuXSkpOwotICB9Ci0gIHJldHVybiBjb3VudDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEJ1Y2tldFR5cGU+Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ291bnRGbj4KLXNpemVf
dCBIaXN0b2dyYW1CdWNrZXRzPFQsIEJ1Y2tldFR5cGU+OjpnZXRQZXJjZW50aWxlQnVja2V0SWR4
KAotICAgIGRvdWJsZSBwY3QsCi0gICAgQ291bnRGbiBjb3VudEZyb21CdWNrZXQsCi0gICAgZG91
YmxlKiBsb3dQY3QsCi0gICAgZG91YmxlKiBoaWdoUGN0KSBjb25zdCB7Ci0gIENIRUNLX0dFKHBj
dCwgMC4wKTsKLSAgQ0hFQ0tfTEUocGN0LCAxLjApOwotCi0gIGF1dG8gbnVtQnVja2V0cyA9IGJ1
Y2tldHNfLnNpemUoKTsKLQotICAvLyBDb21wdXRlIHRoZSBjb3VudHMgaW4gZWFjaCBidWNrZXQK
LSAgc3RkOjp2ZWN0b3I8dWludDY0X3Q+IGNvdW50cyhudW1CdWNrZXRzKTsKLSAgdWludDY0X3Qg
dG90YWxDb3VudCA9IDA7Ci0gIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgbnVtQnVja2V0czsgKytu
KSB7Ci0gICAgdWludDY0X3QgYnVja2V0Q291bnQgPQotICAgICAgICBjb3VudEZyb21CdWNrZXQo
Y29uc3RfY2FzdDxjb25zdCBCdWNrZXRUeXBlJj4oYnVja2V0c19bbl0pKTsKLSAgICBjb3VudHNb
bl0gPSBidWNrZXRDb3VudDsKLSAgICB0b3RhbENvdW50ICs9IGJ1Y2tldENvdW50OwotICB9Ci0K
LSAgLy8gSWYgdGhlcmUgYXJlIG5vIGVsZW1lbnRzLCBqdXN0IHJldHVybiB0aGUgbG93ZXN0IGJ1
Y2tldC4KLSAgLy8gTm90ZSB0aGF0IHdlIHJldHVybiBidWNrZXQgMSwgd2hpY2ggaXMgdGhlIGZp
cnN0IGJ1Y2tldCBpbiB0aGUKLSAgLy8gaGlzdG9ncmFtIHJhbmdlOyBidWNrZXQgMCBpcyBmb3Ig
YWxsIHZhbHVlcyBiZWxvdyBtaW5fLgotICBpZiAodG90YWxDb3VudCA9PSAwKSB7Ci0gICAgLy8g
U2V0IGxvd1BjdCBhbmQgaGlnaFBjdCBib3RoIHRvIDAuCi0gICAgLy8gZ2V0UGVyY2VudGlsZUVz
dGltYXRlKCkgd2lsbCByZWNvZ25pemUgdGhpcyB0byBtZWFuIHRoYXQgdGhlIGhpc3RvZ3JhbQot
ICAgIC8vIGlzIGVtcHR5LgotICAgIGlmIChsb3dQY3QpIHsKLSAgICAgICpsb3dQY3QgPSAwLjA7
Ci0gICAgfQotICAgIGlmIChoaWdoUGN0KSB7Ci0gICAgICAqaGlnaFBjdCA9IDAuMDsKLSAgICB9
Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLQotICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBidWNrZXRz
LCBrZWVwaW5nIHRyYWNrIG9mIGVhY2ggYnVja2V0J3MKLSAgLy8gcGVyY2VudGlsZSByYW5nZTog
WzAsMTBdLCBbMTAsMTddLCBbMTcsNDVdLCBldGMuICBXaGVuIHdlIGZpbmQgYSByYW5nZQotICAv
LyB0aGF0IGluY2x1ZGVzIG91ciBkZXNpcmVkIHBlcmNlbnRpbGUsIHdlIHJldHVybiB0aGF0IGJ1
Y2tldCBpbmRleC4KLSAgZG91YmxlIHByZXZQY3QgPSAwLjA7Ci0gIGRvdWJsZSBjdXJQY3QgPSAw
LjA7Ci0gIHVpbnQ2NF90IGN1ckNvdW50ID0gMDsKLSAgc2l6ZV90IGlkeDsKLSAgZm9yIChpZHgg
PSAwOyBpZHggPCBudW1CdWNrZXRzOyArK2lkeCkgewotICAgIGlmIChjb3VudHNbaWR4XSA9PSAw
KSB7Ci0gICAgICAvLyBza2lwIGVtcHR5IGJ1Y2tldHMKLSAgICAgIGNvbnRpbnVlOwotICAgIH0K
LQotICAgIHByZXZQY3QgPSBjdXJQY3Q7Ci0gICAgY3VyQ291bnQgKz0gY291bnRzW2lkeF07Ci0g
ICAgY3VyUGN0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihjdXJDb3VudCkgLyB0b3RhbENvdW50Owot
ICAgIGlmIChwY3QgPD0gY3VyUGN0KSB7Ci0gICAgICAvLyBUaGlzIGlzIHRoZSBkZXNpcmVkIGJ1
Y2tldAotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGxvd1BjdCkgewotICAgICps
b3dQY3QgPSBwcmV2UGN0OwotICB9Ci0gIGlmIChoaWdoUGN0KSB7Ci0gICAgKmhpZ2hQY3QgPSBj
dXJQY3Q7Ci0gIH0KLSAgcmV0dXJuIGlkeDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEJ1Y2tldFR5cGU+Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ291bnRGbiwgdHlwZW5hbWUg
QXZnRm4+Ci1UIEhpc3RvZ3JhbUJ1Y2tldHM8VCwgQnVja2V0VHlwZT46OmdldFBlcmNlbnRpbGVF
c3RpbWF0ZSgKLSAgICBkb3VibGUgcGN0LAotICAgIENvdW50Rm4gY291bnRGcm9tQnVja2V0LAot
ICAgIEF2Z0ZuIGF2Z0Zyb21CdWNrZXQpIGNvbnN0IHsKLSAgLy8gRmluZCB0aGUgYnVja2V0IHdo
ZXJlIHRoaXMgcGVyY2VudGlsZSBmYWxscwotICBkb3VibGUgbG93UGN0OwotICBkb3VibGUgaGln
aFBjdDsKLSAgc2l6ZV90IGJ1Y2tldElkeCA9Ci0gICAgICBnZXRQZXJjZW50aWxlQnVja2V0SWR4
KHBjdCwgY291bnRGcm9tQnVja2V0LCAmbG93UGN0LCAmaGlnaFBjdCk7Ci0gIGlmIChsb3dQY3Qg
PT0gMC4wICYmIGhpZ2hQY3QgPT0gMC4wKSB7Ci0gICAgLy8gSW52YWxpZCByYW5nZSAtLSB0aGUg
YnVja2V0cyBtdXN0IGFsbCBiZSBlbXB0eQotICAgIC8vIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1
ZSBmb3IgVmFsdWVUeXBlLgotICAgIHJldHVybiBWYWx1ZVR5cGUoKTsKLSAgfQotICBpZiAobG93
UGN0ID09IGhpZ2hQY3QpIHsKLSAgICAvLyBVbmxpa2VseSB0byBoYXZlIGV4YWN0IGVxdWFsaXR5
LAotICAgIC8vIGJ1dCBqdXN0IHJldHVybiB0aGUgYnVja2V0IGF2ZXJhZ2UgaW4gdGhpcyBjYXNl
LgotICAgIC8vIFdlIGhhbmRsZSB0aGlzIGhlcmUgdG8gYXZvaWQgZGl2aXNpb24gYnkgMCBiZWxv
dy4KLSAgICByZXR1cm4gYXZnRnJvbUJ1Y2tldChidWNrZXRzX1tidWNrZXRJZHhdKTsKLSAgfQot
Ci0gIENIRUNLX0dFKHBjdCwgbG93UGN0KTsKLSAgQ0hFQ0tfTEUocGN0LCBoaWdoUGN0KTsKLSAg
Q0hFQ0tfTFQobG93UGN0LCBoaWdoUGN0KTsKLQotICAvLyBDb21wdXRlIGluZm9ybWF0aW9uIGFi
b3V0IHRoaXMgYnVja2V0Ci0gIFZhbHVlVHlwZSBhdmcgPSBhdmdGcm9tQnVja2V0KGJ1Y2tldHNf
W2J1Y2tldElkeF0pOwotICBWYWx1ZVR5cGUgbG93OwotICBWYWx1ZVR5cGUgaGlnaDsKLSAgaWYg
KGJ1Y2tldElkeCA9PSAwKSB7Ci0gICAgaWYgKGF2ZyA+IG1pbl8pIHsKLSAgICAgIC8vIFRoaXMg
bm9ybWFsbHkgc2hvdWxkbid0IGhhcHBlbi4gIFRoaXMgYnVja2V0IGlzIG9ubHkgc3VwcG9zZWQg
dG8gdHJhY2sKLSAgICAgIC8vIHZhbHVlcyBsZXNzIHRoYW4gbWluXy4gIE1vc3QgbGlrZWx5IHRo
aXMgbWVhbnMgdGhhdCBpbnRlZ2VyIG92ZXJmbG93Ci0gICAgICAvLyBvY2N1cnJlZCwgYW5kIHRo
ZSBjb2RlIGluIGF2Z0Zyb21CdWNrZXQoKSByZXR1cm5lZCBhIGh1Z2UgdmFsdWUKLSAgICAgIC8v
IGluc3RlYWQgb2YgYSBzbWFsbCBvbmUuICBKdXN0IHJldHVybiB0aGUgbWluaW11bSBwb3NzaWJs
ZSB2YWx1ZSBmb3IKLSAgICAgIC8vIG5vdy4KLSAgICAgIC8vCi0gICAgICAvLyAoTm90ZSB0aGF0
IGlmIHRoZSBjb3VudGVyIGtlZXBzIGJlaW5nIGRlY3JlbWVudGVkLCBldmVudHVhbGx5IGl0IHdp
bGwKLSAgICAgIC8vIHdyYXAgYW5kIGJlY29tZSBzbWFsbCBlbm91Z2ggdGhhdCB3ZSB3b24ndCBk
ZXRlY3QgdGhpcyBhbnkgbW9yZSwgYW5kCi0gICAgICAvLyB3ZSB3aWxsIHJldHVybiBib2d1cyBp
bmZvcm1hdGlvbi4pCi0gICAgICBMT0coRVJST1IpIDw8ICJpbnZhbGlkIGF2ZXJhZ2UgdmFsdWUg
aW4gaGlzdG9ncmFtIG1pbmltdW0gYnVja2V0OiAiIDw8IGF2ZwotICAgICAgICAgICAgICAgICA8
PCAiID4gIiA8PCBtaW5fIDw8ICI6IHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3c/IjsKLSAgICAg
IHJldHVybiBnZXRCdWNrZXRNaW4oYnVja2V0SWR4KTsKLSAgICB9Ci0gICAgLy8gRm9yIHRoZSBi
ZWxvdy1taW4gYnVja2V0LCBqdXN0IGFzc3VtZSB0aGUgbG93ZXN0IHZhbHVlIGV2ZXIgc2VlbiBp
cwotICAgIC8vIHR3aWNlIGFzIGZhciBhd2F5IGZyb20gbWluXyBhcyBhdmcuCi0gICAgaGlnaCA9
IG1pbl87Ci0gICAgbG93ID0gaGlnaCAtICgyICogKGhpZ2ggLSBhdmcpKTsKLSAgICAvLyBBZGp1
c3QgbG93IGluIGNhc2UgaXQgd3JhcHBlZAotICAgIGlmIChsb3cgPiBhdmcpIHsKLSAgICAgIGxv
dyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8VmFsdWVUeXBlPjo6bWluKCk7Ci0gICAgfQotICB9IGVs
c2UgaWYgKGJ1Y2tldElkeCA9PSBidWNrZXRzXy5zaXplKCkgLSAxKSB7Ci0gICAgaWYgKGF2ZyA8
IG1heF8pIHsKLSAgICAgIC8vIE1vc3QgbGlrZWx5IHRoaXMgbWVhbnMgaW50ZWdlciBvdmVyZmxv
dyBvY2N1cnJlZC4gIFNlZSB0aGUgY29tbWVudHMKLSAgICAgIC8vIGFib3ZlIGluIHRoZSBtaW5p
bXVtIGNhc2UuCi0gICAgICBMT0coRVJST1IpIDw8ICJpbnZhbGlkIGF2ZXJhZ2UgdmFsdWUgaW4g
aGlzdG9ncmFtIG1heGltdW0gYnVja2V0OiAiIDw8IGF2ZwotICAgICAgICAgICAgICAgICA8PCAi
IDwgIiA8PCBtYXhfIDw8ICI6IHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3c/IjsKLSAgICAgIHJl
dHVybiBnZXRCdWNrZXRNYXgoYnVja2V0SWR4KTsKLSAgICB9Ci0gICAgLy8gU2ltaWxhcmx5IGZv
ciB0aGUgYWJvdmUtbWF4IGJ1Y2tldCwgYXNzdW1lIHRoZSBoaWdoZXN0IHZhbHVlIGV2ZXIgc2Vl
bgotICAgIC8vIGlzIHR3aWNlIGFzIGZhciBhd2F5IGZyb20gbWF4XyBhcyBhdmcuCi0gICAgbG93
ID0gbWF4XzsKLSAgICBoaWdoID0gbG93ICsgKDIgKiAoYXZnIC0gbG93KSk7Ci0gICAgLy8gQWRq
dXN0IGhpZ2ggaW4gY2FzZSBpdCB3cmFwcGVkCi0gICAgaWYgKGhpZ2ggPCBhdmcpIHsKLSAgICAg
IGhpZ2ggPSBzdGQ6Om51bWVyaWNfbGltaXRzPFZhbHVlVHlwZT46Om1heCgpOwotICAgIH0KLSAg
fSBlbHNlIHsKLSAgICBsb3cgPSBnZXRCdWNrZXRNaW4oYnVja2V0SWR4KTsKLSAgICBoaWdoID0g
Z2V0QnVja2V0TWF4KGJ1Y2tldElkeCk7Ci0gICAgaWYgKGF2ZyA8IGxvdyB8fCBhdmcgPiBoaWdo
KSB7Ci0gICAgICAvLyBNb3N0IGxpa2VseSB0aGlzIG1lYW5zIGFuIGludGVnZXIgb3ZlcmZsb3cg
b2NjdXJyZWQuCi0gICAgICAvLyBTZWUgdGhlIGNvbW1lbnRzIGFib3ZlLiAgUmV0dXJuIHRoZSBt
aWRwb2ludCBiZXR3ZWVuIGxvdyBhbmQgaGlnaAotICAgICAgLy8gYXMgYSBiZXN0IGd1ZXNzLCBz
aW5jZSBhdmcgaXMgbWVhbmluZ2xlc3MuCi0gICAgICBMT0coRVJST1IpIDw8ICJpbnZhbGlkIGF2
ZXJhZ2UgdmFsdWUgaW4gaGlzdG9ncmFtIGJ1Y2tldDogIiA8PCBhdmcKLSAgICAgICAgICAgICAg
ICAgPDwgIiBub3QgaW4gcmFuZ2UgWyIgPDwgbG93IDw8ICIsICIgPDwgaGlnaAotICAgICAgICAg
ICAgICAgICA8PCAiXTogcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdz8iOwotICAgICAgcmV0dXJu
IChsb3cgKyBoaWdoKSAvIDI7Ci0gICAgfQotICB9Ci0KLSAgLy8gU2luY2Ugd2Uga25vdyB0aGUg
YXZlcmFnZSB2YWx1ZSBpbiB0aGlzIGJ1Y2tldCwgd2UgY2FuIGRvIHNsaWdodGx5IGJldHRlcgot
ICAvLyB0aGFuIGp1c3QgYXNzdW1pbmcgdGhlIGRhdGEgcG9pbnRzIGluIHRoaXMgYnVja2V0IGFy
ZSB1bmlmb3JtbHkKLSAgLy8gZGlzdHJpYnV0ZWQgYmV0d2VlbiBsb3cgYW5kIGhpZ2guCi0gIC8v
Ci0gIC8vIEFzc3VtZSB0aGF0IHRoZSBtZWRpYW4gdmFsdWUgaW4gdGhpcyBidWNrZXQgaXMgdGhl
IHNhbWUgYXMgdGhlIGF2ZXJhZ2UKLSAgLy8gdmFsdWUuCi0gIGRvdWJsZSBtZWRpYW5QY3QgPSAo
bG93UGN0ICsgaGlnaFBjdCkgLyAyLjA7Ci0gIGlmIChwY3QgPCBtZWRpYW5QY3QpIHsKLSAgICAv
LyBBc3N1bWUgdGhhdCB0aGUgZGF0YSBwb2ludHMgbG93ZXIgdGhhbiB0aGUgbWVkaWFuIG9mIHRo
aXMgYnVja2V0Ci0gICAgLy8gYXJlIHVuaWZvcm1seSBkaXN0cmlidXRlZCBiZXR3ZWVuIGxvdyBh
bmQgYXZnCi0gICAgZG91YmxlIHBjdFRocm91Z2hTZWN0aW9uID0gKHBjdCAtIGxvd1BjdCkgLyAo
bWVkaWFuUGN0IC0gbG93UGN0KTsKLSAgICByZXR1cm4gVChsb3cgKyAoKGF2ZyAtIGxvdykgKiBw
Y3RUaHJvdWdoU2VjdGlvbikpOwotICB9IGVsc2UgewotICAgIC8vIEFzc3VtZSB0aGF0IHRoZSBk
YXRhIHBvaW50cyBncmVhdGVyIHRoYW4gdGhlIG1lZGlhbiBvZiB0aGlzIGJ1Y2tldAotICAgIC8v
IGFyZSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgYmV0d2VlbiBhdmcgYW5kIGhpZ2gKLSAgICBkb3Vi
bGUgcGN0VGhyb3VnaFNlY3Rpb24gPSAocGN0IC0gbWVkaWFuUGN0KSAvIChoaWdoUGN0IC0gbWVk
aWFuUGN0KTsKLSAgICByZXR1cm4gVChhdmcgKyAoKGhpZ2ggLSBhdmcpICogcGN0VGhyb3VnaFNl
Y3Rpb24pKTsKLSAgfQotfQotCi19IC8vIGRldGFpbAotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LXN0ZDo6c3RyaW5nIEhpc3RvZ3JhbTxUPjo6ZGVidWdTdHJpbmcoKSBjb25zdCB7Ci0gIHN0ZDo6
c3RyaW5nIHJldCA9IGZvbGx5Ojp0bzxzdGQ6OnN0cmluZz4oCi0gICAgICAibnVtIGJ1Y2tldHM6
ICIsCi0gICAgICBidWNrZXRzXy5nZXROdW1CdWNrZXRzKCksCi0gICAgICAiLCBidWNrZXRTaXpl
OiAiLAotICAgICAgYnVja2V0c18uZ2V0QnVja2V0U2l6ZSgpLAotICAgICAgIiwgbWluOiAiLAot
ICAgICAgYnVja2V0c18uZ2V0TWluKCksCi0gICAgICAiLCBtYXg6ICIsCi0gICAgICBidWNrZXRz
Xy5nZXRNYXgoKSwKLSAgICAgICJcbiIpOwotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVj
a2V0c18uZ2V0TnVtQnVja2V0cygpOyArK2kpIHsKLSAgICBmb2xseTo6dG9BcHBlbmQoCi0gICAg
ICAgICIgICIsCi0gICAgICAgIGJ1Y2tldHNfLmdldEJ1Y2tldE1pbihpKSwKLSAgICAgICAgIjog
IiwKLSAgICAgICAgYnVja2V0c18uZ2V0QnlJbmRleChpKS5jb3VudCwKLSAgICAgICAgIlxuIiwK
LSAgICAgICAgJnJldCk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLXZvaWQgSGlzdG9ncmFtPFQ+Ojp0b1RTVihzdGQ6Om9zdHJlYW0mIG91dCwgYm9v
bCBza2lwRW1wdHlCdWNrZXRzKSBjb25zdCB7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVj
a2V0c18uZ2V0TnVtQnVja2V0cygpOyArK2kpIHsKLSAgICAvLyBEbyBub3Qgb3V0cHV0IGVtcHR5
IGJ1Y2tldHMgaW4gb3JkZXIgdG8gcmVkdWNlIGRhdGEgZmlsZSBzaXplLgotICAgIGlmIChza2lw
RW1wdHlCdWNrZXRzICYmIGdldEJ1Y2tldEJ5SW5kZXgoaSkuY291bnQgPT0gMCkgewotICAgICAg
Y29udGludWU7Ci0gICAgfQotICAgIGNvbnN0IGF1dG8mIGJ1Y2tldCA9IGdldEJ1Y2tldEJ5SW5k
ZXgoaSk7Ci0gICAgb3V0IDw8IGdldEJ1Y2tldE1pbihpKSA8PCAnXHQnIDw8IGdldEJ1Y2tldE1h
eChpKSA8PCAnXHQnIDw8IGJ1Y2tldC5jb3VudAotICAgICAgICA8PCAnXHQnIDw8IGJ1Y2tldC5z
dW0gPDwgJ1xuJzsKLSAgfQotfQotCi19IC8vIGZvbGx5CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS9zdGF0cy9IaXN0b2dyYW0uaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3N0YXRzL0hpc3RvZ3JhbS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODhmNDc5YTRlMGNlNzk2YzhjNDhhMTA4OTIx
YzYwZDVmMjEwNzg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3N0YXRzL0hpc3Rv
Z3JhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
MjAxNyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGlj
ZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRo
aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1h
eSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFw
YWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkg
YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJB
U0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGNzdGRk
ZWY+Ci0jaW5jbHVkZSA8Y3N0ZGludD4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8b3N0
cmVhbT4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUg
PHZlY3Rvcj4KLQotI2luY2x1ZGUgPGZvbGx5L0NQb3J0YWJpbGl0eS5oPgotI2luY2x1ZGUgPGZv
bGx5L3N0YXRzL2RldGFpbC9CdWNrZXQuaD4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLQotbmFtZXNw
YWNlIGRldGFpbCB7Ci0KLS8qCi0gKiBBIGhlbHBlciBjbGFzcyB0byBtYW5hZ2UgYSBzZXQgb2Yg
aGlzdG9ncmFtIGJ1Y2tldHMuCi0gKi8KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBC
dWNrZXRUPgotY2xhc3MgSGlzdG9ncmFtQnVja2V0cyB7Ci0gcHVibGljOgotICB0eXBlZGVmIFQg
VmFsdWVUeXBlOwotICB0eXBlZGVmIEJ1Y2tldFQgQnVja2V0VHlwZTsKLQotICAvKgotICAgKiBD
cmVhdGUgYSBzZXQgb2YgaGlzdG9ncmFtIGJ1Y2tldHMuCi0gICAqCi0gICAqIE9uZSBidWNrZXQg
d2lsbCBiZSBjcmVhdGVkIGZvciBlYWNoIGJ1Y2tldFNpemUgaW50ZXJ2YWwgb2YgdmFsdWVzIHdp
dGhpbgotICAgKiB0aGUgc3BlY2lmaWVkIHJhbmdlLiAgQWRkaXRpb25hbGx5LCBvbmUgYnVja2V0
IHdpbGwgYmUgY3JlYXRlZCB0byB0cmFjawotICAgKiBhbGwgdmFsdWVzIHRoYXQgZmFsbCBiZWxv
dyB0aGUgc3BlY2lmaWVkIG1pbmltdW0sIGFuZCBvbmUgYnVja2V0IHdpbGwgYmUKLSAgICogY3Jl
YXRlZCBmb3IgYWxsIHZhbHVlcyBhYm92ZSB0aGUgc3BlY2lmaWVkIG1heGltdW0uCi0gICAqCi0g
ICAqIElmIChtYXggLSBtaW4pIGlzIG5vdCBhIG11bHRpcGxlIG9mIGJ1Y2tldFNpemUsIHRoZSBs
YXN0IGJ1Y2tldCB3aWxsIGNvdmVyCi0gICAqIGEgc21hbGxlciByYW5nZSBvZiB2YWx1ZXMgdGhh
biB0aGUgb3RoZXIgYnVja2V0cy4KLSAgICoKLSAgICogKG1heCAtIG1pbikgbXVzdCBiZSBsYXJn
ZXIgdGhhbiBvciBlcXVhbCB0byBidWNrZXRTaXplLgotICAgKi8KLSAgSGlzdG9ncmFtQnVja2V0
cygKLSAgICAgIFZhbHVlVHlwZSBidWNrZXRTaXplLAotICAgICAgVmFsdWVUeXBlIG1pbiwKLSAg
ICAgIFZhbHVlVHlwZSBtYXgsCi0gICAgICBjb25zdCBCdWNrZXRUeXBlJiBkZWZhdWx0QnVja2V0
KTsKLQotICAvKiBSZXR1cm5zIHRoZSBidWNrZXQgc2l6ZSBvZiBlYWNoIGJ1Y2tldCBpbiB0aGUg
aGlzdG9ncmFtLiAqLwotICBWYWx1ZVR5cGUgZ2V0QnVja2V0U2l6ZSgpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gYnVja2V0U2l6ZV87Ci0gIH0KLQotICAvKiBSZXR1cm5zIHRoZSBtaW4gdmFsdWUgYXQg
d2hpY2ggYnVja2V0aW5nIGJlZ2lucy4gKi8KLSAgVmFsdWVUeXBlIGdldE1pbigpIGNvbnN0IHsK
LSAgICByZXR1cm4gbWluXzsKLSAgfQotCi0gIC8qIFJldHVybnMgdGhlIG1heCB2YWx1ZSBhdCB3
aGljaCBidWNrZXRpbmcgZW5kcy4gKi8KLSAgVmFsdWVUeXBlIGdldE1heCgpIGNvbnN0IHsKLSAg
ICByZXR1cm4gbWF4XzsKLSAgfQotCi0gIC8qCi0gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBi
dWNrZXRzLgotICAgKgotICAgKiBUaGlzIGluY2x1ZGVzIHRoZSB0b3RhbCBudW1iZXIgb2YgYnVj
a2V0cyBmb3IgdGhlIFttaW4sIG1heCkgcmFuZ2UsCi0gICAqIHBsdXMgMiBleHRyYSBidWNrZXRz
LCBvbmUgZm9yIGhhbmRsaW5nIHZhbHVlcyBsZXNzIHRoYW4gbWluLCBhbmQgb25lIGZvcgotICAg
KiB2YWx1ZXMgZ3JlYXRlciB0aGFuIG1heC4KLSAgICovCi0gIHNpemVfdCBnZXROdW1CdWNrZXRz
KCkgY29uc3QgewotICAgIHJldHVybiBidWNrZXRzXy5zaXplKCk7Ci0gIH0KLQotICAvKiBSZXR1
cm5zIHRoZSBidWNrZXQgaW5kZXggaW50byB3aGljaCB0aGUgZ2l2ZW4gdmFsdWUgd291bGQgZmFs
bC4gKi8KLSAgc2l6ZV90IGdldEJ1Y2tldElkeChWYWx1ZVR5cGUgdmFsdWUpIGNvbnN0OwotCi0g
IC8qIFJldHVybnMgdGhlIGJ1Y2tldCBmb3IgdGhlIHNwZWNpZmllZCB2YWx1ZSAqLwotICBCdWNr
ZXRUeXBlJiBnZXRCeVZhbHVlKFZhbHVlVHlwZSB2YWx1ZSkgewotICAgIHJldHVybiBidWNrZXRz
X1tnZXRCdWNrZXRJZHgodmFsdWUpXTsKLSAgfQotCi0gIC8qIFJldHVybnMgdGhlIGJ1Y2tldCBm
b3IgdGhlIHNwZWNpZmllZCB2YWx1ZSAqLwotICBjb25zdCBCdWNrZXRUeXBlJiBnZXRCeVZhbHVl
KFZhbHVlVHlwZSB2YWx1ZSkgY29uc3QgewotICAgIHJldHVybiBidWNrZXRzX1tnZXRCdWNrZXRJ
ZHgodmFsdWUpXTsKLSAgfQotCi0gIC8qCi0gICAqIFJldHVybnMgdGhlIGJ1Y2tldCBhdCB0aGUg
c3BlY2lmaWVkIGluZGV4LgotICAgKgotICAgKiBOb3RlIHRoYXQgaW5kZXggMCBpcyB0aGUgYnVj
a2V0IGZvciBhbGwgdmFsdWVzIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkCi0gICAqIG1pbmltdW0u
ICBJbmRleCAxIGlzIHRoZSBmaXJzdCBidWNrZXQgaW4gdGhlIHNwZWNpZmllZCBidWNrZXQgcmFu
Z2UuCi0gICAqLwotICBCdWNrZXRUeXBlJiBnZXRCeUluZGV4KHNpemVfdCBpZHgpIHsKLSAgICBy
ZXR1cm4gYnVja2V0c19baWR4XTsKLSAgfQotCi0gIC8qIFJldHVybnMgdGhlIGJ1Y2tldCBhdCB0
aGUgc3BlY2lmaWVkIGluZGV4LiAqLwotICBjb25zdCBCdWNrZXRUeXBlJiBnZXRCeUluZGV4KHNp
emVfdCBpZHgpIGNvbnN0IHsKLSAgICByZXR1cm4gYnVja2V0c19baWR4XTsKLSAgfQotCi0gIC8q
Ci0gICAqIFJldHVybnMgdGhlIG1pbmltdW0gdGhyZXNob2xkIGZvciB0aGUgYnVja2V0IGF0IHRo
ZSBnaXZlbiBpbmRleC4KLSAgICoKLSAgICogVGhlIGJ1Y2tldCBhdCB0aGUgc3BlY2lmaWVkIGlu
ZGV4IHdpbGwgc3RvcmUgdmFsdWVzIGluIHRoZSByYW5nZQotICAgKiBbYnVja2V0TWluLCBidWNr
ZXRNaW4gKyBidWNrZXRTaXplKSwgb3IgW2J1Y2tldE1pbiwgbWF4KSwgaWYgdGhlIG92ZXJhbGwK
LSAgICogbWF4IGlzIHNtYWxsZXIgdGhhbiBidWNrZXRNaW4gKyBidWNrZXRTaXplLgotICAgKi8K
LSAgVmFsdWVUeXBlIGdldEJ1Y2tldE1pbihzaXplX3QgaWR4KSBjb25zdCB7Ci0gICAgaWYgKGlk
eCA9PSAwKSB7Ci0gICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxWYWx1ZVR5cGU+Ojpt
aW4oKTsKLSAgICB9Ci0gICAgaWYgKGlkeCA9PSBidWNrZXRzXy5zaXplKCkgLSAxKSB7Ci0gICAg
ICByZXR1cm4gbWF4XzsKLSAgICB9Ci0KLSAgICByZXR1cm4gVmFsdWVUeXBlKG1pbl8gKyAoKGlk
eCAtIDEpICogYnVja2V0U2l6ZV8pKTsKLSAgfQotCi0gIC8qCi0gICAqIFJldHVybnMgdGhlIG1h
eGltdW0gdGhyZXNob2xkIGZvciB0aGUgYnVja2V0IGF0IHRoZSBnaXZlbiBpbmRleC4KLSAgICoK
LSAgICogVGhlIGJ1Y2tldCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IHdpbGwgc3RvcmUgdmFsdWVz
IGluIHRoZSByYW5nZQotICAgKiBbYnVja2V0TWluLCBidWNrZXRNaW4gKyBidWNrZXRTaXplKSwg
b3IgW2J1Y2tldE1pbiwgbWF4KSwgaWYgdGhlIG92ZXJhbGwKLSAgICogbWF4IGlzIHNtYWxsZXIg
dGhhbiBidWNrZXRNaW4gKyBidWNrZXRTaXplLgotICAgKi8KLSAgVmFsdWVUeXBlIGdldEJ1Y2tl
dE1heChzaXplX3QgaWR4KSBjb25zdCB7Ci0gICAgaWYgKGlkeCA9PSBidWNrZXRzXy5zaXplKCkg
LSAxKSB7Ci0gICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxWYWx1ZVR5cGU+OjptYXgo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gVmFsdWVUeXBlKG1pbl8gKyAoaWR4ICogYnVja2V0U2l6
ZV8pKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wdXRlcyB0aGUgdG90YWwgbnVtYmVyIG9mIHZh
bHVlcyBzdG9yZWQgYWNyb3NzIGFsbCBidWNrZXRzLgotICAgKgotICAgKiBSdW5zIGluIE8obnVt
QnVja2V0cykKLSAgICoKLSAgICogQHBhcmFtIGNvdW50Rm4gQSBmdW5jdGlvbiB0aGF0IHRha2Vz
IGEgY29uc3QgQnVja2V0VHlwZSYsIGFuZCByZXR1cm5zIHRoZQotICAgKiAgICAgICAgICAgICAg
ICBudW1iZXIgb2YgdmFsdWVzIGluIHRoYXQgYnVja2V0Ci0gICAqIEByZXR1cm4gUmV0dXJucyB0
aGUgdG90YWwgbnVtYmVyIG9mIHZhbHVlcyBzdG9yZWQgYWNyb3NzIGFsbCBidWNrZXRzCi0gICAq
LwotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ291bnRGbj4KLSAgdWludDY0X3QgY29tcHV0ZVRvdGFs
Q291bnQoQ291bnRGbiBjb3VudEZyb21CdWNrZXQpIGNvbnN0OwotCi0gIC8qKgotICAgKiBEZXRl
cm1pbmUgd2hpY2ggYnVja2V0IHRoZSBzcGVjaWZpZWQgcGVyY2VudGlsZSBmYWxscyBpbnRvLgot
ICAgKgotICAgKiBMb29rcyBmb3IgdGhlIGJ1Y2tldCB0aGF0IGNvbnRhaW5zIHRoZSBOdGggcGVy
Y2VudGlsZSBkYXRhIHBvaW50LgotICAgKgotICAgKiBAcGFyYW0gcGN0ICAgICBUaGUgZGVzaXJl
ZCBwZXJjZW50aWxlIHRvIGZpbmQsIGFzIGEgdmFsdWUgZnJvbSAwLjAgdG8gMS4wLgotICAgKiBA
cGFyYW0gY291bnRGbiBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBjb25zdCBCdWNrZXRUeXBlJiwg
YW5kIHJldHVybnMgdGhlCi0gICAqICAgICAgICAgICAgICAgIG51bWJlciBvZiB2YWx1ZXMgaW4g
dGhhdCBidWNrZXQuCi0gICAqIEBwYXJhbSBsb3dQY3QgIFRoZSBsb3dlc3QgcGVyY2VudGlsZSBz
dG9yZWQgaW4gdGhlIHNlbGVjdGVkIGJ1Y2tldCB3aWxsIGJlCi0gICAqICAgICAgICAgICAgICAg
IHJldHVybmVkIHZpYSB0aGlzIHBhcmFtZXRlci4KLSAgICogQHBhcmFtIGhpZ2hQY3QgVGhlIGhp
Z2hlc3QgcGVyY2VudGlsZSBzdG9yZWQgaW4gdGhlIHNlbGVjdGVkIGJ1Y2tldCB3aWxsCi0gICAq
ICAgICAgICAgICAgICAgIGJlIHJldHVybmVkIHZpYSB0aGlzIHBhcmFtZXRlci4KLSAgICoKLSAg
ICogQHJldHVybiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgYnVja2V0IHRoYXQgY29udGFpbnMg
dGhlIE50aCBwZXJjZW50aWxlCi0gICAqICAgICAgICAgZGF0YSBwb2ludC4KLSAgICovCi0gIHRl
bXBsYXRlIDx0eXBlbmFtZSBDb3VudEZuPgotICBzaXplX3QgZ2V0UGVyY2VudGlsZUJ1Y2tldElk
eCgKLSAgICAgIGRvdWJsZSBwY3QsCi0gICAgICBDb3VudEZuIGNvdW50RnJvbUJ1Y2tldCwKLSAg
ICAgIGRvdWJsZSogbG93UGN0ID0gbnVsbHB0ciwKLSAgICAgIGRvdWJsZSogaGlnaFBjdCA9IG51
bGxwdHIpIGNvbnN0OwotCi0gIC8qKgotICAgKiBFc3RpbWF0ZSB0aGUgdmFsdWUgYXQgdGhlIHNw
ZWNpZmllZCBwZXJjZW50aWxlLgotICAgKgotICAgKiBAcGFyYW0gcGN0ICAgICBUaGUgZGVzaXJl
ZCBwZXJjZW50aWxlIHRvIGZpbmQsIGFzIGEgdmFsdWUgZnJvbSAwLjAgdG8gMS4wLgotICAgKiBA
cGFyYW0gY291bnRGbiBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBjb25zdCBCdWNrZXRUeXBlJiwg
YW5kIHJldHVybnMgdGhlCi0gICAqICAgICAgICAgICAgICAgIG51bWJlciBvZiB2YWx1ZXMgaW4g
dGhhdCBidWNrZXQuCi0gICAqIEBwYXJhbSBhdmdGbiAgIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBh
IGNvbnN0IEJ1Y2tldFR5cGUmLCBhbmQgcmV0dXJucyB0aGUKLSAgICogICAgICAgICAgICAgICAg
YXZlcmFnZSBvZiBhbGwgdGhlIHZhbHVlcyBpbiB0aGF0IGJ1Y2tldC4KLSAgICoKLSAgICogQHJl
dHVybiBSZXR1cm5zIGFuIGVzdGltYXRlIGZvciBOLCB3aGVyZSBOIGlzIHRoZSBudW1iZXIgd2hl
cmUgZXhhY3RseSBwY3QKLSAgICogICAgICAgICBwZXJjZW50YWdlIG9mIHRoZSBkYXRhIHBvaW50
cyBpbiB0aGUgaGlzdG9ncmFtIGFyZSBsZXNzIHRoYW4gTi4KLSAgICovCi0gIHRlbXBsYXRlIDx0
eXBlbmFtZSBDb3VudEZuLCB0eXBlbmFtZSBBdmdGbj4KLSAgVmFsdWVUeXBlIGdldFBlcmNlbnRp
bGVFc3RpbWF0ZSgKLSAgICAgIGRvdWJsZSBwY3QsCi0gICAgICBDb3VudEZuIGNvdW50RnJvbUJ1
Y2tldCwKLSAgICAgIEF2Z0ZuIGF2Z0Zyb21CdWNrZXQpIGNvbnN0OwotCi0gIC8qCi0gICAqIEl0
ZXJhdG9yIGFjY2VzcyB0byB0aGUgYnVja2V0cy4KLSAgICoKLSAgICogTm90ZSB0aGF0IHRoZSBm
aXJzdCBidWNrZXQgaXMgZm9yIGFsbCB2YWx1ZXMgbGVzcyB0aGFuIG1pbiwgYW5kIHRoZSBsYXN0
Ci0gICAqIGJ1Y2tldCBpcyBmb3IgYWxsIHZhbHVlcyBncmVhdGVyIHRoYW4gbWF4LiAgVGhlIGJ1
Y2tldHMgdHJhY2tpbmcgdmFsdWVzIGluCi0gICAqIHRoZSBbbWluLCBtYXgpIGFjdHVhbGx5IHN0
YXJ0IGF0IHRoZSBzZWNvbmQgYnVja2V0LgotICAgKi8KLSAgdHlwZW5hbWUgc3RkOjp2ZWN0b3I8
QnVja2V0VHlwZT46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgewotICAgIHJldHVybiBi
dWNrZXRzXy5iZWdpbigpOwotICB9Ci0gIHR5cGVuYW1lIHN0ZDo6dmVjdG9yPEJ1Y2tldFR5cGU+
OjppdGVyYXRvciBiZWdpbigpIHsKLSAgICByZXR1cm4gYnVja2V0c18uYmVnaW4oKTsKLSAgfQot
ICB0eXBlbmFtZSBzdGQ6OnZlY3RvcjxCdWNrZXRUeXBlPjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkg
Y29uc3QgewotICAgIHJldHVybiBidWNrZXRzXy5lbmQoKTsKLSAgfQotICB0eXBlbmFtZSBzdGQ6
OnZlY3RvcjxCdWNrZXRUeXBlPjo6aXRlcmF0b3IgZW5kKCkgewotICAgIHJldHVybiBidWNrZXRz
Xy5lbmQoKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgVmFsdWVUeXBlIGJ1Y2tldFNpemVfOwotICBW
YWx1ZVR5cGUgbWluXzsKLSAgVmFsdWVUeXBlIG1heF87Ci0gIHN0ZDo6dmVjdG9yPEJ1Y2tldFR5
cGU+IGJ1Y2tldHNfOwotfTsKLQotfSAvLyBkZXRhaWwKLQotLyoKLSAqIEEgYmFzaWMgaGlzdG9n
cmFtIGNsYXNzLgotICoKLSAqIEdyb3VwcyBkYXRhIHBvaW50cyBpbnRvIGVxdWFsbHktc2l6ZWQg
YnVja2V0cywgYW5kIHN0b3JlcyB0aGUgb3ZlcmFsbCBzdW0gb2YKLSAqIHRoZSBkYXRhIHBvaW50
cyBpbiBlYWNoIGJ1Y2tldCwgYXMgd2VsbCBhcyB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlu
IHRoZQotICogYnVja2V0LgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBzcGVjaWZ5IHRoZSBtaW5p
bXVtIGFuZCBtYXhpbXVtIGRhdGEgcG9pbnRzIHRvIGV4cGVjdCBhaGVhZAotICogb2YgdGltZSwg
YXMgd2VsbCBhcyB0aGUgYnVja2V0IHdpZHRoLgotICovCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LWNsYXNzIEhpc3RvZ3JhbSB7Ci0gcHVibGljOgotICB0eXBlZGVmIFQgVmFsdWVUeXBlOwotICB0
eXBlZGVmIGRldGFpbDo6QnVja2V0PFQ+IEJ1Y2tldDsKLQotICBIaXN0b2dyYW0oVmFsdWVUeXBl
IGJ1Y2tldFNpemUsIFZhbHVlVHlwZSBtaW4sIFZhbHVlVHlwZSBtYXgpCi0gICAgICA6IGJ1Y2tl
dHNfKGJ1Y2tldFNpemUsIG1pbiwgbWF4LCBCdWNrZXQoKSkge30KLQotICAvKiBBZGQgYSBkYXRh
IHBvaW50IHRvIHRoZSBoaXN0b2dyYW0gKi8KLSAgdm9pZCBhZGRWYWx1ZShWYWx1ZVR5cGUgdmFs
dWUpIEZPTExZX0RJU0FCTEVfVU5ERUZJTkVEX0JFSEFWSU9SX1NBTklUSVpFUigKLSAgICAgICJz
aWduZWQtaW50ZWdlci1vdmVyZmxvdyIsCi0gICAgICAidW5zaWduZWQtaW50ZWdlci1vdmVyZmxv
dyIpIHsKLSAgICBCdWNrZXQmIGJ1Y2tldCA9IGJ1Y2tldHNfLmdldEJ5VmFsdWUodmFsdWUpOwot
ICAgIC8vIE5PVEU6IE92ZXJmbG93IGlzIGhhbmRsZWQgZWxzZXdoZXJlIGFuZCB0ZXN0cyBjaGVj
ayB0aGlzCi0gICAgLy8gYmVoYXZpb3IgKHNlZSBIaXN0b2dyYW1UZXN0LmNwcCBUZXN0T3ZlcmZs
b3cqIHRlc3RzKS4KLSAgICAvLyBUT0RPOiBJdCB3b3VsZCBiZSBuaWNlIHRvIGhhbmRsZSBvdmVy
ZmxvdyBoZXJlIGFuZCByZWRlc2lnbiB0aGlzIGNsYXNzLgotICAgIGJ1Y2tldC5zdW0gKz0gdmFs
dWU7Ci0gICAgYnVja2V0LmNvdW50ICs9IDE7Ci0gIH0KLQotICAvKiBBZGQgbXVsdGlwbGUgc2Ft
ZSBkYXRhIHBvaW50cyB0byB0aGUgaGlzdG9ncmFtICovCi0gIHZvaWQgYWRkUmVwZWF0ZWRWYWx1
ZShWYWx1ZVR5cGUgdmFsdWUsIHVpbnQ2NF90IG5TYW1wbGVzKQotICAgICAgRk9MTFlfRElTQUJM
RV9VTkRFRklORURfQkVIQVZJT1JfU0FOSVRJWkVSKAotICAgICAgICAgICJzaWduZWQtaW50ZWdl
ci1vdmVyZmxvdyIsCi0gICAgICAgICAgInVuc2lnbmVkLWludGVnZXItb3ZlcmZsb3ciKSB7Ci0g
ICAgQnVja2V0JiBidWNrZXQgPSBidWNrZXRzXy5nZXRCeVZhbHVlKHZhbHVlKTsKLSAgICAvLyBO
T1RFOiBPdmVyZmxvdyBpcyBoYW5kbGVkIGVsc2V3aGVyZSBhbmQgdGVzdHMgY2hlY2sgdGhpcwot
ICAgIC8vIGJlaGF2aW9yIChzZWUgSGlzdG9ncmFtVGVzdC5jcHAgVGVzdE92ZXJmbG93KiB0ZXN0
cykuCi0gICAgLy8gVE9ETzogSXQgd291bGQgYmUgbmljZSB0byBoYW5kbGUgb3ZlcmZsb3cgaGVy
ZSBhbmQgcmVkZXNpZ24gdGhpcyBjbGFzcy4KLSAgICBidWNrZXQuc3VtICs9IHZhbHVlICogblNh
bXBsZXM7Ci0gICAgYnVja2V0LmNvdW50ICs9IG5TYW1wbGVzOwotICB9Ci0KLSAgLyoKLSAgICog
UmVtb3ZlIGEgZGF0YSBwb2ludCB0byB0aGUgaGlzdG9ncmFtCi0gICAqCi0gICAqIE5vdGUgdGhh
dCB0aGlzIG1ldGhvZCBkb2VzIG5vdCBhY3R1YWxseSB2ZXJpZnkgdGhhdCB0aGlzIGV4YWN0IGRh
dGEgcG9pbnQKLSAgICogaGFkIHByZXZpb3VzbHkgYmVlbiBhZGRlZCB0byB0aGUgaGlzdG9ncmFt
OyBpdCBtZXJlbHkgc3VidHJhY3RzIHRoZQotICAgKiByZXF1ZXN0ZWQgdmFsdWUgZnJvbSB0aGUg
YXBwcm9wcmlhdGUgYnVja2V0J3Mgc3VtLgotICAgKi8KLSAgdm9pZCByZW1vdmVWYWx1ZShWYWx1
ZVR5cGUgdmFsdWUpIEZPTExZX0RJU0FCTEVfVU5ERUZJTkVEX0JFSEFWSU9SX1NBTklUSVpFUigK
LSAgICAgICJzaWduZWQtaW50ZWdlci1vdmVyZmxvdyIsCi0gICAgICAidW5zaWduZWQtaW50ZWdl
ci1vdmVyZmxvdyIpIHsKLSAgICBCdWNrZXQmIGJ1Y2tldCA9IGJ1Y2tldHNfLmdldEJ5VmFsdWUo
dmFsdWUpOwotICAgIC8vIE5PVEU6IE92ZXJmbG93IGlzIGhhbmRsZWQgZWxzZXdoZXJlIGFuZCB0
ZXN0cyBjaGVjayB0aGlzCi0gICAgLy8gYmVoYXZpb3IgKHNlZSBIaXN0b2dyYW1UZXN0LmNwcCBU
ZXN0T3ZlcmZsb3cqIHRlc3RzKS4KLSAgICAvLyBUT0RPOiBJdCB3b3VsZCBiZSBuaWNlIHRvIGhh
bmRsZSBvdmVyZmxvdyBoZXJlIGFuZCByZWRlc2lnbiB0aGlzIGNsYXNzLgotICAgIGlmIChidWNr
ZXQuY291bnQgPiAwKSB7Ci0gICAgICBidWNrZXQuc3VtIC09IHZhbHVlOwotICAgICAgYnVja2V0
LmNvdW50IC09IDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGJ1Y2tldC5zdW0gPSBWYWx1ZVR5cGUo
KTsKLSAgICAgIGJ1Y2tldC5jb3VudCA9IDA7Ci0gICAgfQotICB9Ci0KLSAgLyogUmVtb3ZlIG11
bHRpcGxlIHNhbWUgZGF0YSBwb2ludHMgZnJvbSB0aGUgaGlzdG9ncmFtICovCi0gIHZvaWQgcmVt
b3ZlUmVwZWF0ZWRWYWx1ZShWYWx1ZVR5cGUgdmFsdWUsIHVpbnQ2NF90IG5TYW1wbGVzKSB7Ci0g
ICAgQnVja2V0JiBidWNrZXQgPSBidWNrZXRzXy5nZXRCeVZhbHVlKHZhbHVlKTsKLSAgICAvLyBU
T0RPOiBJdCB3b3VsZCBiZSBuaWNlIHRvIGhhbmRsZSBvdmVyZmxvdyBoZXJlLgotICAgIGlmIChi
dWNrZXQuY291bnQgPj0gblNhbXBsZXMpIHsKLSAgICAgIGJ1Y2tldC5zdW0gLT0gdmFsdWUgKiBu
U2FtcGxlczsKLSAgICAgIGJ1Y2tldC5jb3VudCAtPSBuU2FtcGxlczsKLSAgICB9IGVsc2Ugewot
ICAgICAgYnVja2V0LnN1bSA9IFZhbHVlVHlwZSgpOwotICAgICAgYnVja2V0LmNvdW50ID0gMDsK
LSAgICB9Ci0gIH0KLQotICAvKiBSZW1vdmUgYWxsIGRhdGEgcG9pbnRzIGZyb20gdGhlIGhpc3Rv
Z3JhbSAqLwotICB2b2lkIGNsZWFyKCkgewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVj
a2V0c18uZ2V0TnVtQnVja2V0cygpOyBpKyspIHsKLSAgICAgIGJ1Y2tldHNfLmdldEJ5SW5kZXgo
aSkuY2xlYXIoKTsKLSAgICB9Ci0gIH0KLQotICAvKiBTdWJ0cmFjdCBhbm90aGVyIGhpc3RvZ3Jh
bSBkYXRhIGZyb20gdGhlIGhpc3RvZ3JhbSAqLwotICB2b2lkIHN1YnRyYWN0KGNvbnN0IEhpc3Rv
Z3JhbSYgaGlzdCkgewotICAgIC8vIHRoZSB0d28gaGlzdG9ncmFtIGJ1Y2tldCBkZWZpbml0aW9u
cyBtdXN0IG1hdGNoIHRvIHN1cHBvcnQKLSAgICAvLyBzdWJ0cmFjdC4KLSAgICBpZiAoZ2V0QnVj
a2V0U2l6ZSgpICE9IGhpc3QuZ2V0QnVja2V0U2l6ZSgpIHx8IGdldE1pbigpICE9IGhpc3QuZ2V0
TWluKCkgfHwKLSAgICAgICAgZ2V0TWF4KCkgIT0gaGlzdC5nZXRNYXgoKSB8fCBnZXROdW1CdWNr
ZXRzKCkgIT0gaGlzdC5nZXROdW1CdWNrZXRzKCkpIHsKLSAgICAgIHRocm93IHN0ZDo6aW52YWxp
ZF9hcmd1bWVudCgiQ2Fubm90IHN1YnRyYWN0IGlucHV0IGhpc3RvZ3JhbS4iKTsKLSAgICB9Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ1Y2tldHNfLmdldE51bUJ1Y2tldHMoKTsgaSsr
KSB7Ci0gICAgICBidWNrZXRzXy5nZXRCeUluZGV4KGkpIC09IGhpc3QuYnVja2V0c18uZ2V0QnlJ
bmRleChpKTsKLSAgICB9Ci0gIH0KLQotICAvKiBNZXJnZSB0d28gaGlzdG9ncmFtIGRhdGEgdG9n
ZXRoZXIgKi8KLSAgdm9pZCBtZXJnZShjb25zdCBIaXN0b2dyYW0mIGhpc3QpIHsKLSAgICAvLyB0
aGUgdHdvIGhpc3RvZ3JhbSBidWNrZXQgZGVmaW5pdGlvbnMgbXVzdCBtYXRjaCB0byBzdXBwb3J0
Ci0gICAgLy8gYSBtZXJnZS4KLSAgICBpZiAoZ2V0QnVja2V0U2l6ZSgpICE9IGhpc3QuZ2V0QnVj
a2V0U2l6ZSgpIHx8IGdldE1pbigpICE9IGhpc3QuZ2V0TWluKCkgfHwKLSAgICAgICAgZ2V0TWF4
KCkgIT0gaGlzdC5nZXRNYXgoKSB8fCBnZXROdW1CdWNrZXRzKCkgIT0gaGlzdC5nZXROdW1CdWNr
ZXRzKCkpIHsKLSAgICAgIHRocm93IHN0ZDo6aW52YWxpZF9hcmd1bWVudCgiQ2Fubm90IG1lcmdl
IGZyb20gaW5wdXQgaGlzdG9ncmFtLiIpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYnVja2V0c18uZ2V0TnVtQnVja2V0cygpOyBpKyspIHsKLSAgICAgIGJ1Y2tldHNfLmdl
dEJ5SW5kZXgoaSkgKz0gaGlzdC5idWNrZXRzXy5nZXRCeUluZGV4KGkpOwotICAgIH0KLSAgfQot
Ci0gIC8qIENvcHkgYnVja2V0IHZhbHVlcyBmcm9tIGFub3RoZXIgaGlzdG9ncmFtICovCi0gIHZv
aWQgY29weShjb25zdCBIaXN0b2dyYW0mIGhpc3QpIHsKLSAgICAvLyB0aGUgdHdvIGhpc3RvZ3Jh
bSBidWNrZXQgZGVmaW5pdGlvbiBtdXN0IG1hdGNoCi0gICAgaWYgKGdldEJ1Y2tldFNpemUoKSAh
PSBoaXN0LmdldEJ1Y2tldFNpemUoKSB8fCBnZXRNaW4oKSAhPSBoaXN0LmdldE1pbigpIHx8Ci0g
ICAgICAgIGdldE1heCgpICE9IGhpc3QuZ2V0TWF4KCkgfHwgZ2V0TnVtQnVja2V0cygpICE9IGhp
c3QuZ2V0TnVtQnVja2V0cygpKSB7Ci0gICAgICB0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQo
IkNhbm5vdCBjb3B5IGZyb20gaW5wdXQgaGlzdG9ncmFtLiIpOwotICAgIH0KLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYnVja2V0c18uZ2V0TnVtQnVja2V0cygpOyBpKyspIHsKLSAgICAg
IGJ1Y2tldHNfLmdldEJ5SW5kZXgoaSkgPSBoaXN0LmJ1Y2tldHNfLmdldEJ5SW5kZXgoaSk7Ci0g
ICAgfQotICB9Ci0KLSAgLyogUmV0dXJucyB0aGUgYnVja2V0IHNpemUgb2YgZWFjaCBidWNrZXQg
aW4gdGhlIGhpc3RvZ3JhbS4gKi8KLSAgVmFsdWVUeXBlIGdldEJ1Y2tldFNpemUoKSBjb25zdCB7
Ci0gICAgcmV0dXJuIGJ1Y2tldHNfLmdldEJ1Y2tldFNpemUoKTsKLSAgfQotICAvKiBSZXR1cm5z
IHRoZSBtaW4gdmFsdWUgYXQgd2hpY2ggYnVja2V0aW5nIGJlZ2lucy4gKi8KLSAgVmFsdWVUeXBl
IGdldE1pbigpIGNvbnN0IHsKLSAgICByZXR1cm4gYnVja2V0c18uZ2V0TWluKCk7Ci0gIH0KLSAg
LyogUmV0dXJucyB0aGUgbWF4IHZhbHVlIGF0IHdoaWNoIGJ1Y2tldGluZyBlbmRzLiAqLwotICBW
YWx1ZVR5cGUgZ2V0TWF4KCkgY29uc3QgewotICAgIHJldHVybiBidWNrZXRzXy5nZXRNYXgoKTsK
LSAgfQotICAvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnVja2V0cyAqLwotICBzaXplX3QgZ2V0
TnVtQnVja2V0cygpIGNvbnN0IHsKLSAgICByZXR1cm4gYnVja2V0c18uZ2V0TnVtQnVja2V0cygp
OwotICB9Ci0KLSAgLyogUmV0dXJucyB0aGUgc3BlY2lmaWVkIGJ1Y2tldCAoZm9yIHJlYWRpbmcg
b25seSEpICovCi0gIGNvbnN0IEJ1Y2tldCYgZ2V0QnVja2V0QnlJbmRleChzaXplX3QgaWR4KSBj
b25zdCB7Ci0gICAgcmV0dXJuIGJ1Y2tldHNfLmdldEJ5SW5kZXgoaWR4KTsKLSAgfQotCi0gIC8q
Ci0gICAqIFJldHVybnMgdGhlIG1pbmltdW0gdGhyZXNob2xkIGZvciB0aGUgYnVja2V0IGF0IHRo
ZSBnaXZlbiBpbmRleC4KLSAgICoKLSAgICogVGhlIGJ1Y2tldCBhdCB0aGUgc3BlY2lmaWVkIGlu
ZGV4IHdpbGwgc3RvcmUgdmFsdWVzIGluIHRoZSByYW5nZQotICAgKiBbYnVja2V0TWluLCBidWNr
ZXRNaW4gKyBidWNrZXRTaXplKSwgb3IgW2J1Y2tldE1pbiwgbWF4KSwgaWYgdGhlIG92ZXJhbGwK
LSAgICogbWF4IGlzIHNtYWxsZXIgdGhhbiBidWNrZXRNaW4gKyBidWNrZXRTaXplLgotICAgKi8K
LSAgVmFsdWVUeXBlIGdldEJ1Y2tldE1pbihzaXplX3QgaWR4KSBjb25zdCB7Ci0gICAgcmV0dXJu
IGJ1Y2tldHNfLmdldEJ1Y2tldE1pbihpZHgpOwotICB9Ci0KLSAgLyoKLSAgICogUmV0dXJucyB0
aGUgbWF4aW11bSB0aHJlc2hvbGQgZm9yIHRoZSBidWNrZXQgYXQgdGhlIGdpdmVuIGluZGV4Lgot
ICAgKgotICAgKiBUaGUgYnVja2V0IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggd2lsbCBzdG9yZSB2
YWx1ZXMgaW4gdGhlIHJhbmdlCi0gICAqIFtidWNrZXRNaW4sIGJ1Y2tldE1pbiArIGJ1Y2tldFNp
emUpLCBvciBbYnVja2V0TWluLCBtYXgpLCBpZiB0aGUgb3ZlcmFsbAotICAgKiBtYXggaXMgc21h
bGxlciB0aGFuIGJ1Y2tldE1pbiArIGJ1Y2tldFNpemUuCi0gICAqLwotICBWYWx1ZVR5cGUgZ2V0
QnVja2V0TWF4KHNpemVfdCBpZHgpIGNvbnN0IHsKLSAgICByZXR1cm4gYnVja2V0c18uZ2V0QnVj
a2V0TWF4KGlkeCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29tcHV0ZXMgdGhlIHRvdGFsIG51bWJl
ciBvZiB2YWx1ZXMgc3RvcmVkIGFjcm9zcyBhbGwgYnVja2V0cy4KLSAgICoKLSAgICogUnVucyBp
biBPKG51bUJ1Y2tldHMpCi0gICAqLwotICB1aW50NjRfdCBjb21wdXRlVG90YWxDb3VudCgpIGNv
bnN0IHsKLSAgICBDb3VudEZyb21CdWNrZXQgY291bnRGbjsKLSAgICByZXR1cm4gYnVja2V0c18u
Y29tcHV0ZVRvdGFsQ291bnQoY291bnRGbik7Ci0gIH0KLQotICAvKgotICAgKiBHZXQgdGhlIGJ1
Y2tldCB0aGF0IHRoZSBzcGVjaWZpZWQgcGVyY2VudGlsZSBmYWxscyBpbnRvCi0gICAqCi0gICAq
IFRoZSBsb3dlc3QgYW5kIGhpZ2hlc3QgcGVyY2VudGlsZSBkYXRhIHBvaW50cyBpbiByZXR1cm5l
ZCBidWNrZXQgd2lsbCBiZQotICAgKiByZXR1cm5lZCBpbiB0aGUgbG93UGN0IGFuZCBoaWdoUGN0
IGFyZ3VtZW50cywgaWYgdGhleSBhcmUgbm90IG51bGxwdHIuCi0gICAqLwotICBzaXplX3QgZ2V0
UGVyY2VudGlsZUJ1Y2tldElkeCgKLSAgICAgIGRvdWJsZSBwY3QsCi0gICAgICBkb3VibGUqIGxv
d1BjdCA9IG51bGxwdHIsCi0gICAgICBkb3VibGUqIGhpZ2hQY3QgPSBudWxscHRyKSBjb25zdCB7
Ci0gICAgLy8gV2UgdW5mb3J0dW5hdGVseSBjYW4ndCB1c2UgbGFtYmRhcyBoZXJlIHlldDsKLSAg
ICAvLyBTb21lIHVzZXJzIG9mIHRoaXMgY29kZSBhcmUgc3RpbGwgYnVpbHQgd2l0aCBnY2MtNC40
LgotICAgIENvdW50RnJvbUJ1Y2tldCBjb3VudEZuOwotICAgIHJldHVybiBidWNrZXRzXy5nZXRQ
ZXJjZW50aWxlQnVja2V0SWR4KHBjdCwgY291bnRGbiwgbG93UGN0LCBoaWdoUGN0KTsKLSAgfQot
Ci0gIC8qKgotICAgKiBFc3RpbWF0ZSB0aGUgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBwZXJjZW50
aWxlLgotICAgKgotICAgKiBAcGFyYW0gcGN0ICAgICBUaGUgZGVzaXJlZCBwZXJjZW50aWxlIHRv
IGZpbmQsIGFzIGEgdmFsdWUgZnJvbSAwLjAgdG8gMS4wLgotICAgKgotICAgKiBAcmV0dXJuIFJl
dHVybnMgYW4gZXN0aW1hdGUgZm9yIE4sIHdoZXJlIE4gaXMgdGhlIG51bWJlciB3aGVyZSBleGFj
dGx5IHBjdAotICAgKiAgICAgICAgIHBlcmNlbnRhZ2Ugb2YgdGhlIGRhdGEgcG9pbnRzIGluIHRo
ZSBoaXN0b2dyYW0gYXJlIGxlc3MgdGhhbiBOLgotICAgKi8KLSAgVmFsdWVUeXBlIGdldFBlcmNl
bnRpbGVFc3RpbWF0ZShkb3VibGUgcGN0KSBjb25zdCB7Ci0gICAgQ291bnRGcm9tQnVja2V0IGNv
dW50Rm47Ci0gICAgQXZnRnJvbUJ1Y2tldCBhdmdGbjsKLSAgICByZXR1cm4gYnVja2V0c18uZ2V0
UGVyY2VudGlsZUVzdGltYXRlKHBjdCwgY291bnRGbiwgYXZnRm4pOwotICB9Ci0KLSAgLyoKLSAg
ICogR2V0IGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGhpc3RvZ3JhbSBj
b250ZW50cwotICAgKi8KLSAgc3RkOjpzdHJpbmcgZGVidWdTdHJpbmcoKSBjb25zdDsKLQotICAv
KgotICAgKiBXcml0ZSB0aGUgaGlzdG9ncmFtIGNvbnRlbnRzIGluIHRhYi1zZXBhcmF0ZWQgdmFs
dWVzIChUU1YpIGZvcm1hdC4KLSAgICogRm9ybWF0IGlzICJtaW4gbWF4IGNvdW50IHN1bSIuCi0g
ICAqLwotICB2b2lkIHRvVFNWKHN0ZDo6b3N0cmVhbSYgb3V0LCBib29sIHNraXBFbXB0eUJ1Y2tl
dHMgPSB0cnVlKSBjb25zdDsKLQotICBzdHJ1Y3QgQ291bnRGcm9tQnVja2V0IHsKLSAgICB1aW50
NjRfdCBvcGVyYXRvcigpKGNvbnN0IEJ1Y2tldCYgYnVja2V0KSBjb25zdCB7Ci0gICAgICByZXR1
cm4gYnVja2V0LmNvdW50OwotICAgIH0KLSAgfTsKLSAgc3RydWN0IEF2Z0Zyb21CdWNrZXQgewot
ICAgIFZhbHVlVHlwZSBvcGVyYXRvcigpKGNvbnN0IEJ1Y2tldCYgYnVja2V0KSBjb25zdCB7Ci0g
ICAgICBpZiAoYnVja2V0LmNvdW50ID09IDApIHsKLSAgICAgICAgcmV0dXJuIFZhbHVlVHlwZSgw
KTsKLSAgICAgIH0KLSAgICAgIC8vIENhc3QgYnVja2V0LmNvdW50IHRvIGEgc2lnbmVkIGludGVn
ZXIgdHlwZS4gIFRoaXMgZW5zdXJlcyB0aGF0IHdlCi0gICAgICAvLyBwZXJmb3JtIGRpdmlzaW9u
IHByb3Blcmx5IGhlcmU6IElmIGJ1Y2tldC5zdW0gaXMgYSBzaWduZWQgaW50ZWdlcgotICAgICAg
Ly8gdHlwZSBidXQgd2UgZGl2aWRlIGJ5IGFuIHVuc2lnbmVkIG51bWJlciwgdW5zaWduZWQgZGl2
aXNpb24gd2lsbCBiZQotICAgICAgLy8gcGVyZm9ybWVkIGFuZCBidWNrZXQuc3VtIHdpbGwgYmUg
Y29udmVydGVkIHRvIHVuc2lnbmVkIGZpcnN0LgotICAgICAgLy8gSWYgYnVja2V0LnN1bSBpcyB1
bnNpZ25lZCwgdGhlIGNvZGUgd2lsbCBzdGlsbCBkbyB1bnNpZ25lZCBkaXZpc2lvbgotICAgICAg
Ly8gY29ycmVjdGx5LgotICAgICAgLy8KLSAgICAgIC8vIFRoZSBvbmx5IGRvd25zaWRlIGlzIGlm
IGJ1Y2tldC5jb3VudCBpcyBsYXJnZSBlbm91Z2ggdG8gYmUgbmVnYXRpdmUKLSAgICAgIC8vIHdo
ZW4gdHJlYXRlZCBhcyBzaWduZWQuICBUaGF0IHNob3VsZCBiZSBleHRyZW1lbHkgdW5saWtlbHks
IHRob3VnaC4KLSAgICAgIHJldHVybiBidWNrZXQuc3VtIC8gc3RhdGljX2Nhc3Q8aW50NjRfdD4o
YnVja2V0LmNvdW50KTsKLSAgICB9Ci0gIH07Ci0KLSBwcml2YXRlOgotICBkZXRhaWw6Okhpc3Rv
Z3JhbUJ1Y2tldHM8VmFsdWVUeXBlLCBCdWNrZXQ+IGJ1Y2tldHNfOwotfTsKLQotfSAvLyBmb2xs
eQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkv
c3RhdHMvZGV0YWlsL0J1Y2tldC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZm9sbHkvc3RhdHMvZGV0YWlsL0J1Y2tldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyNTkwZTAxZTQ4MjYyY2RmNzdkMzZiOWJkYjUwOWJmOTViNTE4OWIzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3N0YXRzL2RldGFpbC9CdWNrZXQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4K
LSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0
aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxjaHJvbm8+Ci0jaW5jbHVkZSA8Y3N0ZGlu
dD4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLW5hbWVzcGFj
ZSBkZXRhaWwgewotCi0vKgotICogSGVscGVyIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlIGF2ZXJh
Z2UsIGdpdmVuIGEgc3BlY2lmaWVkIGlucHV0IHR5cGUgYW5kCi0gKiByZXR1cm4gdHlwZS4KLSAq
LwotCi0vLyBJZiB0aGUgaW5wdXQgaXMgbG9uZyBkb3VibGUsIGRpdmlkZSB1c2luZyBsb25nIGRv
dWJsZSB0byBhdm9pZCBsb3NpbmcKLS8vIHByZWNpc2lvbi4KLXRlbXBsYXRlIDx0eXBlbmFtZSBS
ZXR1cm5UeXBlPgotUmV0dXJuVHlwZSBhdmdIZWxwZXIobG9uZyBkb3VibGUgc3VtLCB1aW50NjRf
dCBjb3VudCkgewotICBpZiAoY291bnQgPT0gMCkgewotICAgIHJldHVybiBSZXR1cm5UeXBlKDAp
OwotICB9Ci0gIGNvbnN0IGxvbmcgZG91YmxlIGNvdW50ZiA9IGNvdW50OwotICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UmV0dXJuVHlwZT4oc3VtIC8gY291bnRmKTsKLX0KLQotLy8gSW4gYWxsIG90aGVy
IGNhc2VzIGRpdmlkZSB1c2luZyBkb3VibGUgcHJlY2lzaW9uLgotLy8gVGhpcyBzaG91bGQgYmUg
cmVsYXRpdmVseSBmYXN0LCBhbmQgYWNjdXJhdGUgZW5vdWdoIGZvciBtb3N0IHVzZSBjYXNlcy4K
LXRlbXBsYXRlIDx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+Ci10eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAhc3RkOjppc19zYW1lPHR5cGVuYW1lIHN0ZDo6cmVt
b3ZlX2N2PFZhbHVlVHlwZT46OnR5cGUsIGxvbmcgZG91YmxlPjo6dmFsdWUsCi0gICAgUmV0dXJu
VHlwZT46OnR5cGUKLWF2Z0hlbHBlcihWYWx1ZVR5cGUgc3VtLCB1aW50NjRfdCBjb3VudCkgewot
ICBpZiAoY291bnQgPT0gMCkgewotICAgIHJldHVybiBSZXR1cm5UeXBlKDApOwotICB9Ci0gIGNv
bnN0IGRvdWJsZSBzdW1mID0gZG91YmxlKHN1bSk7Ci0gIGNvbnN0IGRvdWJsZSBjb3VudGYgPSBk
b3VibGUoY291bnQpOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8UmV0dXJuVHlwZT4oc3VtZiAvIGNv
dW50Zik7Ci19Ci0KLS8qCi0gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgcmF0ZSBw
ZXIgSW50ZXJ2YWwsCi0gKiBnaXZlbiB0aGUgc3BlY2lmaWVkIGNvdW50IHJlY29yZGVkIG92ZXIg
dGhlIGVsYXBzZWQgdGltZSBwZXJpb2QuCi0gKi8KLXRlbXBsYXRlIDwKLSAgICB0eXBlbmFtZSBS
ZXR1cm5UeXBlID0gZG91YmxlLAotICAgIHR5cGVuYW1lIER1cmF0aW9uID0gc3RkOjpjaHJvbm86
OnNlY29uZHMsCi0gICAgdHlwZW5hbWUgSW50ZXJ2YWwgPSBEdXJhdGlvbj4KLVJldHVyblR5cGUg
cmF0ZUhlbHBlcihSZXR1cm5UeXBlIGNvdW50LCBEdXJhdGlvbiBlbGFwc2VkKSB7Ci0gIGlmIChl
bGFwc2VkID09IER1cmF0aW9uKDApKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICAvLyBVc2Ug
c3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3QgdG8gY29udmVydCBiZXR3ZWVuIHRoZSBuYXRpdmUK
LSAgLy8gZHVyYXRpb24gYW5kIHRoZSBkZXNpcmVkIGludGVydmFsLiAgSG93ZXZlciwgY29udmVy
dCB0aGUgcmF0ZXMsCi0gIC8vIHJhdGhlciB0aGFuIGp1c3QgY29udmVydGluZyB0aGUgZWxhcHNl
ZCBkdXJhdGlvbi4gIENvbnZlcnRpbmcgdGhlCi0gIC8vIGVsYXBzZWQgdGltZSBmaXJzdCBtYXkg
Y29sbGFwc2UgaXQgZG93biB0byAwIGlmIHRoZSBlbGFwc2VkIGludGVydmFsCi0gIC8vIGlzIGxl
c3MgdGhhbiB0aGUgZGVzaXJlZCBpbnRlcnZhbCwgd2hpY2ggd2lsbCBpbmNvcnJlY3RseSByZXN1
bHQgaW4KLSAgLy8gYW4gaW5maW5pdGUgcmF0ZS4KLSAgdHlwZWRlZiBzdGQ6OmNocm9ubzo6ZHVy
YXRpb248Ci0gICAgICBSZXR1cm5UeXBlLAotICAgICAgc3RkOjpyYXRpbzxEdXJhdGlvbjo6cGVy
aW9kOjpkZW4sIER1cmF0aW9uOjpwZXJpb2Q6Om51bT4+Ci0gICAgICBOYXRpdmVSYXRlOwotICB0
eXBlZGVmIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjwKLSAgICAgIFJldHVyblR5cGUsCi0gICAgICBz
dGQ6OnJhdGlvPEludGVydmFsOjpwZXJpb2Q6OmRlbiwgSW50ZXJ2YWw6OnBlcmlvZDo6bnVtPj4K
LSAgICAgIERlc2lyZWRSYXRlOwotCi0gIE5hdGl2ZVJhdGUgbmF0aXZlKGNvdW50IC8gZWxhcHNl
ZC5jb3VudCgpKTsKLSAgRGVzaXJlZFJhdGUgZGVzaXJlZCA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlv
bl9jYXN0PERlc2lyZWRSYXRlPihuYXRpdmUpOwotICByZXR1cm4gZGVzaXJlZC5jb3VudCgpOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBCdWNrZXQgewotIHB1YmxpYzoKLSAg
dHlwZWRlZiBUIFZhbHVlVHlwZTsKLQotICBCdWNrZXQoKSA6IHN1bShWYWx1ZVR5cGUoKSksIGNv
dW50KDApIHt9Ci0KLSAgdm9pZCBjbGVhcigpIHsKLSAgICBzdW0gPSBWYWx1ZVR5cGUoKTsKLSAg
ICBjb3VudCA9IDA7Ci0gIH0KLQotICB2b2lkIGFkZChjb25zdCBWYWx1ZVR5cGUmIHMsIHVpbnQ2
NF90IGMpIHsKLSAgICAvLyBUT0RPOiBJdCB3b3VsZCBiZSBuaWNlIHRvIGhhbmRsZSBvdmVyZmxv
dyBoZXJlLgotICAgIHN1bSArPSBzOwotICAgIGNvdW50ICs9IGM7Ci0gIH0KLQotICBCdWNrZXQm
IG9wZXJhdG9yKz0oY29uc3QgQnVja2V0JiBvKSB7Ci0gICAgYWRkKG8uc3VtLCBvLmNvdW50KTsK
LSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBCdWNrZXQmIG9wZXJhdG9yLT0oY29uc3QgQnVj
a2V0JiBvKSB7Ci0gICAgLy8gVE9ETzogSXQgd291bGQgYmUgbmljZSB0byBoYW5kbGUgb3ZlcmZs
b3cgaGVyZS4KLSAgICBzdW0gLT0gby5zdW07Ci0gICAgY291bnQgLT0gby5jb3VudDsKLSAgICBy
ZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmV0dXJuVHlwZT4KLSAg
UmV0dXJuVHlwZSBhdmcoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGF2Z0hlbHBlcjxSZXR1cm5UeXBl
PihzdW0sIGNvdW50KTsKLSAgfQotCi0gIFZhbHVlVHlwZSBzdW07Ci0gIHVpbnQ2NF90IGNvdW50
OwotfTsKLX0gLy8gbmFtZXNwYWNlIGRldGFpbAotfSAvLyBuYW1lc3BhY2UgZm9sbHkKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3Rlc3QvQmF0
b25CZW5jaG1hcmsuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9s
bHkvdGVzdC9CYXRvbkJlbmNobWFyay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDliNTQxMmMxMWQwMTk4M2VhY2MyOGQ1OWMxZGFlZTYwZTNkNGQ3NzQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZm9sbHkvdGVzdC9CYXRvbkJlbmNobWFyay5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJvb2ssIEluYy4KLSAq
Ci0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8K
LQotI2luY2x1ZGUgPGZvbGx5L0JhdG9uLmg+Ci0KLSNpbmNsdWRlIDx0aHJlYWQ+Ci0KLSNpbmNs
dWRlIDxmb2xseS9CZW5jaG1hcmsuaD4KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9HRmxh
Z3MuaD4KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9HVGVzdC5oPgotI2luY2x1ZGUgPGZv
bGx5L3BvcnRhYmlsaXR5L1NlbWFwaG9yZS5oPgotI2luY2x1ZGUgPGZvbGx5L3Rlc3QvQmF0b25U
ZXN0SGVscGVycy5oPgotI2luY2x1ZGUgPGZvbGx5L3Rlc3QvRGV0ZXJtaW5pc3RpY1NjaGVkdWxl
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBmb2xseTsKLXVzaW5nIG5hbWVzcGFjZSBmb2xseTo6dGVz
dDsKLXVzaW5nIGZvbGx5OjpkZXRhaWw6OkVtdWxhdGVkRnV0ZXhBdG9taWM7Ci0KLXR5cGVkZWYg
RGV0ZXJtaW5pc3RpY1NjaGVkdWxlIERTY2hlZDsKLQotQkVOQ0hNQVJLKGJhdG9uX3Bpbmdwb25n
X3NpbmdsZV9wb3N0ZXJfYmxvY2tpbmcsIGl0ZXJzKSB7Ci0gIHJ1bl9waW5ncG9uZ190ZXN0PHN0
ZDo6YXRvbWljLCB0cnVlLCB0cnVlPihpdGVycyk7Ci19Ci0KLUJFTkNITUFSSyhiYXRvbl9waW5n
cG9uZ19tdWx0aV9wb3N0ZXJfYmxvY2tpbmcsIGl0ZXJzKSB7Ci0gIHJ1bl9waW5ncG9uZ190ZXN0
PHN0ZDo6YXRvbWljLCBmYWxzZSwgdHJ1ZT4oaXRlcnMpOwotfQotCi1CRU5DSE1BUksoYmF0b25f
cGluZ3Bvbmdfc2luZ2xlX3Bvc3Rlcl9ub25ibG9ja2luZywgaXRlcnMpIHsKLSAgcnVuX3Bpbmdw
b25nX3Rlc3Q8c3RkOjphdG9taWMsIHRydWUsIGZhbHNlPihpdGVycyk7Ci19Ci0KLUJFTkNITUFS
SyhiYXRvbl9waW5ncG9uZ19tdWx0aV9wb3N0ZXJfbm9uYmxvY2tpbmcsIGl0ZXJzKSB7Ci0gIHJ1
bl9waW5ncG9uZ190ZXN0PHN0ZDo6YXRvbWljLCBmYWxzZSwgZmFsc2U+KGl0ZXJzKTsKLX0KLQot
QkVOQ0hNQVJLX0RSQVdfTElORSgpCi0KLUJFTkNITUFSSyhiYXRvbl9waW5ncG9uZ19lbXVsYXRl
ZF9mdXRleF9zaW5nbGVfcG9zdGVyX2Jsb2NraW5nLCBpdGVycykgewotICBydW5fcGluZ3Bvbmdf
dGVzdDxFbXVsYXRlZEZ1dGV4QXRvbWljLCB0cnVlLCB0cnVlPihpdGVycyk7Ci19Ci0KLUJFTkNI
TUFSSyhiYXRvbl9waW5ncG9uZ19lbXVsYXRlZF9mdXRleF9tdWx0aV9wb3N0ZXJfYmxvY2tpbmcs
IGl0ZXJzKSB7Ci0gIHJ1bl9waW5ncG9uZ190ZXN0PEVtdWxhdGVkRnV0ZXhBdG9taWMsIGZhbHNl
LCB0cnVlPihpdGVycyk7Ci19Ci0KLUJFTkNITUFSSyhiYXRvbl9waW5ncG9uZ19lbXVsYXRlZF9m
dXRleF9zaW5nbGVfcG9zdGVyX25vbmJsb2NraW5nLCBpdGVycykgewotICBydW5fcGluZ3Bvbmdf
dGVzdDxFbXVsYXRlZEZ1dGV4QXRvbWljLCB0cnVlLCBmYWxzZT4oaXRlcnMpOwotfQotCi1CRU5D
SE1BUksoYmF0b25fcGluZ3BvbmdfZW11bGF0ZWRfZnV0ZXhfbXVsdGlfcG9zdGVyX25vbmJsb2Nr
aW5nLCBpdGVycykgewotICBydW5fcGluZ3BvbmdfdGVzdDxFbXVsYXRlZEZ1dGV4QXRvbWljLCBm
YWxzZSwgZmFsc2U+KGl0ZXJzKTsKLX0KLQotQkVOQ0hNQVJLX0RSQVdfTElORSgpCi0KLUJFTkNI
TUFSSyhwb3NpeF9zZW1fcGluZ3BvbmcsIGl0ZXJzKSB7Ci0gIHNlbV90IHNlbXNbM107Ci0gIHNl
bV90KiBhID0gc2VtcyArIDA7Ci0gIHNlbV90KiBiID0gc2VtcyArIDI7IC8vIHRvIGdldCBpdCBv
biBhIGRpZmZlcmVudCBjYWNoZSBsaW5lCi0KLSAgc2VtX2luaXQoYSwgMCwgMCk7Ci0gIHNlbV9p
bml0KGIsIDAsIDApOwotICBhdXRvIHRociA9IHN0ZDo6dGhyZWFkKFs9XSB7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7Ci0gICAgICBzZW1fd2FpdChhKTsKLSAgICAg
IHNlbV9wb3N0KGIpOwotICAgIH0KLSAgfSk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRl
cnM7ICsraSkgewotICAgIHNlbV9wb3N0KGEpOwotICAgIHNlbV93YWl0KGIpOwotICB9Ci0gIHRo
ci5qb2luKCk7Ci19Ci0KLS8vIEkgYW0gb21pdHRpbmcgYSBiZW5jaG1hcmsgcmVzdWx0IHNuYXBz
aG90IGJlY2F1c2UgdGhlc2UgbWljcm9iZW5jaG1hcmtzCi0vLyBtYWlubHkgaWxsdXN0cmF0ZSB0
aGF0IFByZUJsb2NrQXR0ZW1wdHMgaXMgdmVyeSBlZmZlY3RpdmUgZm9yIHJhcGlkCi0vLyBoYW5k
b2Zmcy4gIFRoZSBwZXJmb3JtYW5jZSBvZiBCYXRvbiBhbmQgc2VtX3QgaXMgZXNzZW50aWFsbHkg
aWRlbnRpY2FsCi0vLyB0byB0aGUgcmVxdWlyZWQgZnV0ZXggY2FsbHMgZm9yIHRoZSBibG9ja2lu
ZyBjYXNlCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgewotICBmb2xseTo6cnVu
QmVuY2htYXJrcygpOwotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3Rlc3QvQmF0b25UZXN0SGVscGVycy5oIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvdGVzdC9CYXRvblRlc3RIZWxw
ZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkZmRjODFkNjM2NWU1OTBjNjRj
MTdjYmFkYWRiMDk4MzI5NzMzYzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvdGVz
dC9CYXRvblRlc3RIZWxwZXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJbmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAg
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAq
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8Zm9sbHkvQmF0b24uaD4KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9HVGVz
dC5oPgotI2luY2x1ZGUgPGZvbGx5L3Rlc3QvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlLmg+Ci0KLW5h
bWVzcGFjZSBmb2xseSB7Ci1uYW1lc3BhY2UgdGVzdCB7Ci0KLXR5cGVkZWYgRGV0ZXJtaW5pc3Rp
Y1NjaGVkdWxlIERTY2hlZDsKLQotdGVtcGxhdGUgPHRlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3Mg
QXRvbSwgYm9vbCBTaW5nbGVQb3N0ZXIsIGJvb2wgQmxvY2tpbmc+Ci12b2lkIHJ1bl9iYXNpY190
ZXN0KCkgewotICBCYXRvbjxBdG9tLCBTaW5nbGVQb3N0ZXIsIEJsb2NraW5nPiBiOwotICBiLnBv
c3QoKTsKLSAgYi53YWl0KCk7Ci19Ci0KLXRlbXBsYXRlIDx0ZW1wbGF0ZSA8dHlwZW5hbWU+IGNs
YXNzIEF0b20sIGJvb2wgU2luZ2xlUG9zdGVyLCBib29sIEJsb2NraW5nPgotdm9pZCBydW5fcGlu
Z3BvbmdfdGVzdChpbnQgbnVtUm91bmRzKSB7Ci0gIHVzaW5nIEIgPSBCYXRvbjxBdG9tLCBTaW5n
bGVQb3N0ZXIsIEJsb2NraW5nPjsKLSAgQiBiYXRvbnNbMTddOwotICBCJiBhID0gYmF0b25zWzBd
OwotICBCJiBiID0gYmF0b25zWzE2XTsgLy8gdG8gZ2V0IGl0IG9uIGEgZGlmZmVyZW50IGNhY2hl
IGxpbmUKLSAgYXV0byB0aHIgPSBEU2NoZWQ6OnRocmVhZChbJl0gewotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtUm91bmRzOyArK2kpIHsKLSAgICAgIGEud2FpdCgpOwotICAgICAgYS5yZXNl
dCgpOwotICAgICAgYi5wb3N0KCk7Ci0gICAgfQotICB9KTsKLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1Sb3VuZHM7ICsraSkgewotICAgIGEucG9zdCgpOwotICAgIGIud2FpdCgpOwotICAgIGIu
cmVzZXQoKTsKLSAgfQotICBEU2NoZWQ6OmpvaW4odGhyKTsKLX0KLQotdGVtcGxhdGUgPHRlbXBs
YXRlIDx0eXBlbmFtZT4gY2xhc3MgQXRvbSwgdHlwZW5hbWUgQ2xvY2ssIGJvb2wgU2luZ2xlUG9z
dGVyPgotdm9pZCBydW5fYmFzaWNfdGltZWRfd2FpdF90ZXN0cygpIHsKLSAgQmF0b248QXRvbSwg
U2luZ2xlUG9zdGVyPiBiOwotICBiLnBvc3QoKTsKLSAgLy8gdGVzdHMgaWYgZWFybHkgZGVsaXZl
cnkgd29ya3MgZmluZQotICBFWFBFQ1RfVFJVRShiLnRpbWVkX3dhaXQoQ2xvY2s6Om5vdygpKSk7
Ci19Ci0KLXRlbXBsYXRlIDx0ZW1wbGF0ZSA8dHlwZW5hbWU+IGNsYXNzIEF0b20sIHR5cGVuYW1l
IENsb2NrLCBib29sIFNpbmdsZVBvc3Rlcj4KLXZvaWQgcnVuX3RpbWVkX3dhaXRfdG1vX3Rlc3Rz
KCkgewotICBCYXRvbjxBdG9tLCBTaW5nbGVQb3N0ZXI+IGI7Ci0KLSAgYXV0byB0aHIgPSBEU2No
ZWQ6OnRocmVhZChbJl0gewotICAgIGJvb2wgcnYgPSBiLnRpbWVkX3dhaXQoQ2xvY2s6Om5vdygp
ICsgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygxKSk7Ci0gICAgLy8gbWFpbiB0aHJlYWQgaXMg
Z3VhcmFudGVlZCB0byBub3QgcG9zdCB1bnRpbCB0aW1lb3V0IG9jY3VycwotICAgIEVYUEVDVF9G
QUxTRShydik7Ci0gIH0pOwotICBEU2NoZWQ6OmpvaW4odGhyKTsKLX0KLQotdGVtcGxhdGUgPHRl
bXBsYXRlIDx0eXBlbmFtZT4gY2xhc3MgQXRvbSwgdHlwZW5hbWUgQ2xvY2ssIGJvb2wgU2luZ2xl
UG9zdGVyPgotdm9pZCBydW5fdGltZWRfd2FpdF9yZWd1bGFyX3Rlc3QoKSB7Ci0gIEJhdG9uPEF0
b20sIFNpbmdsZVBvc3Rlcj4gYjsKLQotICBhdXRvIHRociA9IERTY2hlZDo6dGhyZWFkKFsmXSB7
Ci0gICAgLy8gVG8gd2FpdCBmb3JldmVyIHdlJ2QgbGlrZSB0byB1c2UgdGltZV9wb2ludDxDbG9j
az46Om1heCwgYnV0Ci0gICAgLy8gc3RkOjpjb25kaXRpb25fdmFyaWFibGUgZG9lcyBtYXRoIHRv
IGNvbnZlcnQgdGhlIHRpbWVvdXQgdG8KLSAgICAvLyBzeXN0ZW1fY2xvY2sgd2l0aG91dCBoYW5k
bGluZyBvdmVyZmxvdy4KLSAgICBhdXRvIGZhckZ1dHVyZSA9IENsb2NrOjpub3coKSArIHN0ZDo6
Y2hyb25vOjpob3VycygxMDAwKTsKLSAgICBib29sIHJ2ID0gYi50aW1lZF93YWl0KGZhckZ1dHVy
ZSk7Ci0gICAgaWYgKCFzdGQ6OmlzX3NhbWU8QXRvbTxpbnQ+LCBEZXRlcm1pbmlzdGljQXRvbWlj
PGludD4+Ojp2YWx1ZSkgewotICAgICAgLy8gRGV0ZXJtaW5pc3RpY0F0b21pYyBpZ25vcmVzIGFj
dHVhbCB0aW1lcywgc28gZG9lc24ndCBndWFyYW50ZWUKLSAgICAgIC8vIGEgbGFjayBvZiB0aW1l
b3V0Ci0gICAgICBFWFBFQ1RfVFJVRShydik7Ci0gICAgfQotICB9KTsKLQotICBpZiAoIXN0ZDo6
aXNfc2FtZTxBdG9tPGludD4sIERldGVybWluaXN0aWNBdG9taWM8aW50Pj46OnZhbHVlKSB7Ci0g
ICAgLy8gSWYgd2UgYXJlIHVzaW5nIHN0ZDo6YXRvbWljIChvciBFbXVsYXRlZEZ1dGV4QXRvbWlj
KSB0aGVuCi0gICAgLy8gYSBzbGVlcCBoZXJlIGd1YXJhbnRlZXMgdG8gYSBsYXJnZSBleHRlbnQg
dGhhdCAndGhyJyB3aWxsCi0gICAgLy8gZXhlY3V0ZSB3YWl0IGJlZm9yZSB3ZSBwb3N0IGl0LCB0
aHVzIHRlc3RpbmcgbGF0ZSBkZWxpdmVyeS4gRm9yCi0gICAgLy8gRGV0ZXJtaW5pc3RpY0F0b21p
Yywgd2UganVzdCByZWx5IG9uIERldGVybWluaXN0aWNTY2hlZHVsZSB0byBkbwotICAgIC8vIHRo
ZSBzY2hlZHVsaW5nLiAgVGhlIHRlc3Qgd29uJ3QgZmFpbCBpZiB3ZSBsb3NlIHRoZSByYWNlLCB3
ZSBqdXN0Ci0gICAgLy8gZG9uJ3QgZ2V0IGNvdmVyYWdlLgotICAgIHN0ZDo6dGhpc190aHJlYWQ6
OnNsZWVwX2ZvcihzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDIpKTsKLSAgfQotCi0gIGIucG9z
dCgpOwotICBEU2NoZWQ6OmpvaW4odGhyKTsKLX0KLQotdGVtcGxhdGUgPHRlbXBsYXRlIDx0eXBl
bmFtZT4gY2xhc3MgQXRvbSwgYm9vbCBTaW5nbGVQb3N0ZXIsIGJvb2wgQmxvY2tpbmc+Ci12b2lk
IHJ1bl90cnlfd2FpdF90ZXN0cygpIHsKLSAgQmF0b248QXRvbSwgU2luZ2xlUG9zdGVyLCBCbG9j
a2luZz4gYjsKLSAgRVhQRUNUX0ZBTFNFKGIudHJ5X3dhaXQoKSk7Ci0gIGIucG9zdCgpOwotICBF
WFBFQ1RfVFJVRShiLnRyeV93YWl0KCkpOwotfQotCi10ZW1wbGF0ZSA8dGVtcGxhdGUgPHR5cGVu
YW1lPiBjbGFzcyBBdG9tLCBib29sIFNpbmdsZVBvc3RlciwgYm9vbCBCbG9ja2luZz4KLXZvaWQg
cnVuX211bHRpX3Byb2R1Y2VyX3Rlc3RzKCkgewotICBjb25zdGV4cHIgaW50IE5QUk9EID0gNTsK
LSAgQmF0b248QXRvbSwgU2luZ2xlUG9zdGVyLCBCbG9ja2luZz4gbG9jYWxfcGluZ1tOUFJPRF07
Ci0gIEJhdG9uPEF0b20sIFNpbmdsZVBvc3RlciwgQmxvY2tpbmc+IGxvY2FsX3BvbmdbTlBST0Rd
OwotICBCYXRvbjxBdG9tLCAvKiBTaW5nbGVQcm9kdWNlciA9ICovIGZhbHNlLCBCbG9ja2luZz4g
Z2xvYmFsOwotICBCYXRvbjxBdG9tLCBTaW5nbGVQb3N0ZXIsIEJsb2NraW5nPiBzaHV0ZG93bjsK
LQotICBzdGQ6OnRocmVhZCBwcm9kW05QUk9EXTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBOUFJP
RDsgKytpKSB7Ci0gICAgcHJvZFtpXSA9IERTY2hlZDo6dGhyZWFkKFsmLCBpXSB7Ci0gICAgICBp
ZiAoIXN0ZDo6aXNfc2FtZTxBdG9tPGludD4sIERldGVybWluaXN0aWNBdG9taWM8aW50Pj46OnZh
bHVlKSB7Ci0gICAgICAgIC8vIElmIHdlIGFyZSB1c2luZyBzdGQ6OmF0b21pYyAob3IgRW11bGF0
ZWRGdXRleEF0b21pYykgdGhlbgotICAgICAgICAvLyBhIHZhcmlhYmxlIHNsZWVwIGhlcmUgd2ls
bCBtYWtlIGl0IG1vcmUgbGlrZWx5IHRoYXQKLSAgICAgICAgLy8gZ2xvYmFsLnBvc3QoKS1zIHdp
bGwgc3BhbiBtb3JlIHRoYW4gb25lIGdsb2JhbC53YWl0KCkgYnkKLSAgICAgICAgLy8gdGhlIGNv
bnN1bWVyIHRocmVhZCBhbmQgZm9yIHRoZSBsYXR0ZXIgdG8gYmxvY2sgKGlmIHRoZQotICAgICAg
ICAvLyBnbG9iYWwgYmF0b24gaXMgYmxvY2tpbmcpLiBGb3IgRGV0ZXJtaW5pc3RpY0F0b21pYywg
d2UganVzdAotICAgICAgICAvLyByZWx5IG9uIERldGVybWluaXN0aWNTY2hlZHVsZSB0byBkbyB0
aGUgc2NoZWR1bGluZy4gIFRoZQotICAgICAgICAvLyB0ZXN0IHdvbid0IGZhaWwgaWYgd2UgbG9z
ZSB0aGUgcmFjZSwgd2UganVzdCBkb24ndCBnZXQKLSAgICAgICAgLy8gY292ZXJhZ2UuCi0gICAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgKytqKSB7Ci0gICAgICAgICAgc3RkOjp0aGlzX3Ro
cmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMSkpOwotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgICBsb2NhbF9waW5nW2ldLnBvc3QoKTsKLSAgICAgIGdsb2JhbC5wb3N0
KCk7Ci0gICAgICBsb2NhbF9wb25nW2ldLndhaXQoKTsKLSAgICB9KTsKLSAgfQotCi0gIGF1dG8g
Y29ucyA9IERTY2hlZDo6dGhyZWFkKFsmXSB7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgIGds
b2JhbC53YWl0KCk7Ci0gICAgICBnbG9iYWwucmVzZXQoKTsKLSAgICAgIGlmIChzaHV0ZG93bi50
cnlfd2FpdCgpKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgTlBST0Q7ICsraSkgewotICAgICAgICBpZiAobG9jYWxfcGluZy50cnlfd2FpdCgp
KSB7Ci0gICAgICAgICAgbG9jYWxfcGluZy5yZXNldCgpOwotICAgICAgICAgIGxvY2FsX3Bvbmcu
cG9zdCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9KTsKLQotICBmb3IgKGF1dG8m
IHQgOiBwcm9kKSB7Ci0gICAgRFNjaGVkOjpqb2luKHQpOwotICB9Ci0KLSAgZ2xvYmFsLnBvc3Qo
KTsKLSAgc2h1dGRvd24ucG9zdCgpOwotICBEU2NoZWQ6OmpvaW4oY29ucyk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIHRlc3QgewotfSAvLyBuYW1lc3BhY2UgZm9sbHkgewpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvdGVzdC9DYWxsT25jZUJlbmNo
bWFyay5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS90ZXN0
L0NhbGxPbmNlQmVuY2htYXJrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFj
ODViYzNjMjZmZDdlNzhhZGZjMDg5NjM1Njk4YWE2MzNkOWMwMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9mb2xseS90ZXN0L0NhbGxPbmNlQmVuY2htYXJrLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBGYWNlYm9vaywgSW5jLgotICoK
LSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi
TGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T
RS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVk
IHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQu
Ci0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg
cGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwot
Ci0jaW5jbHVkZSA8Zm9sbHkvQ2FsbE9uY2UuaD4KLQotI2luY2x1ZGUgPGRlcXVlPgotI2luY2x1
ZGUgPG11dGV4PgotI2luY2x1ZGUgPHRocmVhZD4KLQotI2luY2x1ZGUgPGZvbGx5L0JlbmNobWFy
ay5oPgotCi0jaW5jbHVkZSA8Z2xvZy9sb2dnaW5nLmg+Ci0KLXN0YXRpYyBjb25zdGV4cHIgaW50
MzJfdCBGTEFHU190aHJlYWRzID0gMTY7IC8vIGJlbmNobWFyayBjb25jdXJyZW5jeQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2FsbE9uY2VGdW5jPgotdm9pZCBibV9pbXBsKENhbGxPbmNlRnVuYyYm
IGZuLCBpbnQ2NF90IGl0ZXJzKSB7Ci0gIHN0ZDo6ZGVxdWU8c3RkOjp0aHJlYWQ+IHRocmVhZHM7
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgRkxBR1NfdGhyZWFkczsgKytpKSB7Ci0gICAgdGhyZWFk
cy5lbXBsYWNlX2JhY2soWyZmbiwgaXRlcnNdIHsKLSAgICAgIGZvciAoaW50NjRfdCBqID0gMDsg
aiA8IGl0ZXJzOyArK2opIHsKLSAgICAgICAgZm4oKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQot
ICBmb3IgKHN0ZDo6dGhyZWFkJiB0IDogdGhyZWFkcykgewotICAgIHQuam9pbigpOwotICB9Ci19
Ci0KLUJFTkNITUFSSyhTdGRDYWxsT25jZUJlbmNoLCBpdGVycykgewotICBzdGQ6Om9uY2VfZmxh
ZyBmbGFnOwotICBpbnQgb3V0ID0gMDsKLSAgYm1faW1wbChbJl0geyBzdGQ6OmNhbGxfb25jZShm
bGFnLCBbJl0geyArK291dDsgfSk7IH0sIGl0ZXJzKTsKLSAgQ0hFQ0tfRVEoMSwgb3V0KTsKLX0K
LQotQkVOQ0hNQVJLKEZvbGx5Q2FsbE9uY2VCZW5jaCwgaXRlcnMpIHsKLSAgZm9sbHk6Om9uY2Vf
ZmxhZyBmbGFnOwotICBpbnQgb3V0ID0gMDsKLSAgYm1faW1wbChbJl0geyBmb2xseTo6Y2FsbF9v
bmNlKGZsYWcsIFsmXSB7ICsrb3V0OyB9KTsgfSwgaXRlcnMpOwotICBDSEVDS19FUSgxLCBvdXQp
OwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAgZm9sbHk6OnJ1bkJl
bmNobWFya3MoKTsKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS90ZXN0L0NvbmN1cnJlbnRTa2lwTGlzdEJlbmNobWFy
ay5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS90ZXN0L0Nv
bmN1cnJlbnRTa2lwTGlzdEJlbmNobWFyay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGQ4YjZkNjQ4OTg2M2ZmZmZhNGM1ZmU3NjhmZGNmOTQwNGYzNzljNmEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvZm9sbHkvdGVzdC9Db25jdXJyZW50U2tpcExpc3RCZW5jaG1hcmsuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNjk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBG
YWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwg
VmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmls
ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRh
aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5v
cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGlj
YWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAot
ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBl
eHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBs
YW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0
aGUgTGljZW5zZS4KLSAqLwotCi0vLyBAYXV0aG9yOiBYaW4gTGl1IDx4bGl1eEBmYi5jb20+Ci0K
LSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8cmFuZG9tPgotI2luY2x1ZGUgPHNldD4KLSNpbmNs
dWRlIDx0aHJlYWQ+Ci0KLSNpbmNsdWRlIDxmb2xseS9CZW5jaG1hcmsuaD4KLSNpbmNsdWRlIDxm
b2xseS9Db25jdXJyZW50U2tpcExpc3QuaD4KLSNpbmNsdWRlIDxmb2xseS9IYXNoLmg+Ci0jaW5j
bHVkZSA8Zm9sbHkvUldTcGluTG9jay5oPgotI2luY2x1ZGUgPGZvbGx5L3BvcnRhYmlsaXR5L0dG
bGFncy5oPgotI2luY2x1ZGUgPGdsb2cvbG9nZ2luZy5oPgotCi1zdGF0aWMgY29uc3RleHByIGlu
dDMyX3QgRkxBR1NfbnVtX3RocmVhZHMgPSAxMjsgLy8sICJudW0gY29uY3VycmVudCB0aHJlYWRz
IHRvIHRlc3QiKTsKLQotLy8gSW4gc29tZSBjYXNlLCB3ZSBtYXkgd2FudCB0byB0ZXN0IHdvcmtl
ciB0aHJlYWRzIG9wZXJhdGluZyBvbiBtdWx0aXBsZQotLy8gbGlzdHMuIEZvciBleGFtcGxlIGlu
IHNlYXJjaCwgbm90IGFsbCB0aHJlYWRzIGFyZSB2aXNpdGluZyB0aGUgc2FtZSBwb3N0aW5nCi0v
LyBsaXN0LCBidXQgZm9yIHRoZSBvbmVzIHdpdGggc29tZSBwb3B1bGFyIHRlcm1zLCB0aGV5IGRv
IGdldCBtdWx0aXBsZQotLy8gdmlzaXRvcnMgYXQgdGhlIHNhbWUgdGltZS4KLXN0YXRpYyBjb25z
dGV4cHIgaW50MzJfdCBGTEFHU19udW1fc2V0cyA9ICAxOyAvLywgIm51bSBvZiBzZXQgdG8gb3Bl
cmF0ZSBvbiIpOwotCi1zdGF0aWMgY29uc3QgaW50IGtJbml0SGVhZEhlaWdodCA9IDEwOwotc3Rh
dGljIGNvbnN0IGludCBrTWF4VmFsdWUgPSAweDEwMDAwMDA7Ci0KLW5hbWVzcGFjZSB7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBmb2xseTsKLQotdHlwZWRlZiBpbnQgVmFsdWVUeXBlOwotdHlwZWRlZiBD
b25jdXJyZW50U2tpcExpc3Q8VmFsdWVUeXBlPiBTa2lwTGlzdFR5cGU7Ci10eXBlZGVmIFNraXBM
aXN0VHlwZTo6QWNjZXNzb3IgU2tpcExpc3RBY2Nlc3NvcjsKLXR5cGVkZWYgc3RkOjpzZXQ8VmFs
dWVUeXBlPiBTZXRUeXBlOwotCi1zdGF0aWMgc3RkOjp2ZWN0b3I8VmFsdWVUeXBlPiBnRGF0YTsK
LXN0YXRpYyB2b2lkIGluaXREYXRhKCkgewotICBnRGF0YS5yZXNpemUoa01heFZhbHVlKTsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4VmFsdWU7ICsraSkgewotICAgIGdEYXRhW2ldID0gaTsK
LSAgfQotICBzdGQ6OnNodWZmbGUoZ0RhdGEuYmVnaW4oKSwgZ0RhdGEuZW5kKCksIHN0ZDo6bXQx
OTkzN3t9KTsKLX0KLQotLy8gc2luZ2xlIHRocmVhZCBiZW5jaG1hcmtzCi12b2lkIEJNX0l0ZXJh
dGVPdmVyU2V0KGludCBpdGVycywgaW50IHNpemUpIHsKLSAgU2V0VHlwZSBhX3NldDsKLQotICBC
RU5DSE1BUktfU1VTUEVORCB7Ci0gICAgQ0hFQ0tfR1Qoc2l6ZSwgMCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgIGFfc2V0Lmluc2VydChnRGF0YVtyYW5kKCkg
JSBrTWF4VmFsdWVdKTsKLSAgICB9Ci0gIH0KLQotICBpbnQ2NF90IHN1bSA9IDA7Ci0gIGF1dG8g
aXRlciA9IGFfc2V0LmJlZ2luKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkg
ewotICAgIHN1bSArPSAqaXRlcisrOwotICAgIGlmIChpdGVyID09IGFfc2V0LmVuZCgpKSBpdGVy
ID0gYV9zZXQuYmVnaW4oKTsKLSAgfQotICBCRU5DSE1BUktfU1VTUEVORCB7Ci0gICAgLy8gVkxP
RygyMCkgPDwgInN1bSA9ICIgPDwgc3VtOwotICB9Ci19Ci0KLXZvaWQgQk1fSXRlcmF0ZVNraXBM
aXN0KGludCBpdGVycywgaW50IHNpemUpIHsKLSAgQmVuY2htYXJrU3VzcGVuZGVyIHN1c3A7Ci0g
IENIRUNLX0dUKHNpemUsIDApOwotICBhdXRvIHNraXBMaXN0ID0gU2tpcExpc3RUeXBlOjpjcmVh
dGUoa0luaXRIZWFkSGVpZ2h0KTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
LSAgICBza2lwTGlzdC5hZGQocmFuZCgpICUga01heFZhbHVlKTsKLSAgfQotICBpbnQ2NF90IHN1
bSA9IDA7Ci0gIHN1c3AuZGlzbWlzcygpOwotCi0gIGF1dG8gaXRlciA9IHNraXBMaXN0LmJlZ2lu
KCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgewotICAgIHN1bSArPSAqaXRl
cisrOwotICAgIGlmIChpdGVyID09IHNraXBMaXN0LmVuZCgpKSBpdGVyID0gc2tpcExpc3QuYmVn
aW4oKTsKLSAgfQotCi0gIEJFTkNITUFSS19TVVNQRU5EIHsKLSAgICAvLyBWTE9HKDIwKSA8PCAi
c3VtID0gIiA8PCBzdW07Ci0gIH0KLX0KLQotdm9pZCBCTV9TZXRNZXJnZShpbnQgaXRlcnMsIGlu
dCBzaXplKSB7Ci0gIEJlbmNobWFya1N1c3BlbmRlciBzdXNwOwotICBTZXRUeXBlIGFfc2V0Owot
ICBTZXRUeXBlIGJfc2V0OwotICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKLSAg
ICBhX3NldC5pbnNlcnQocmFuZCgpICUga01heFZhbHVlKTsKLSAgfQotICBmb3IgKGludCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgIGJfc2V0Lmluc2VydChyYW5kKCkgJSBrTWF4VmFsdWUp
OwotICB9Ci0gIHN1c3AuZGlzbWlzcygpOwotCi0gIGludDY0X3QgbWVyZ2VkU3VtID0gMDsKLSAg
Rk9SX0VBQ0goaXQsIGFfc2V0KSB7Ci0gICAgaWYgKGJfc2V0LmZpbmQoKml0KSAhPSBiX3NldC5l
bmQoKSkgbWVyZ2VkU3VtICs9ICppdDsKLSAgfQotICBCRU5DSE1BUktfU1VTUEVORCB7Ci0gICAg
Ly8gVkxPRygyMCkgPDwgbWVyZ2VkU3VtOwotICB9Ci19Ci0KLXZvaWQgQk1fQ1NMTWVyZ2VMb29r
dXAoaW50IGl0ZXJzLCBpbnQgc2l6ZSkgewotICBCZW5jaG1hcmtTdXNwZW5kZXIgc3VzcDsKLSAg
YXV0byBza2lwTGlzdCA9IFNraXBMaXN0VHlwZTo6Y3JlYXRlKGtJbml0SGVhZEhlaWdodCk7Ci0g
IGF1dG8gc2tpcExpc3QyID0gU2tpcExpc3RUeXBlOjpjcmVhdGUoa0luaXRIZWFkSGVpZ2h0KTsK
LQotICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKLSAgICBza2lwTGlzdC5hZGQo
cmFuZCgpICUga01heFZhbHVlKTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgewotICAgIHNraXBMaXN0Mi5hZGQocmFuZCgpICUga01heFZhbHVlKTsKLSAgfQotICBpbnQ2
NF90IG1lcmdlZFN1bSA9IDA7Ci0gIHN1c3AuZGlzbWlzcygpOwotCi0gIFNraXBMaXN0VHlwZTo6
U2tpcHBlciBza2lwcGVyKHNraXBMaXN0Mik7Ci0gIEZPUl9FQUNIKGl0LCBza2lwTGlzdCkgewot
ICAgIGlmIChza2lwcGVyLnRvKCppdCkpIG1lcmdlZFN1bSArPSAqaXQ7Ci0gIH0KLQotICBCRU5D
SE1BUktfU1VTUEVORCB7Ci0gICAgLy8gVkxPRygyMCkgPDwgbWVyZ2VkU3VtOwotICB9Ci19Ci0K
LS8vIG1lcmdlIGJ5IHR3byBza2lwcGVycwotdm9pZCBCTV9DU0xNZXJnZUludGVyc2VjdGlvbihp
bnQgaXRlcnMsIGludCBzaXplKSB7Ci0gIEJlbmNobWFya1N1c3BlbmRlciBzdXNwOwotICBhdXRv
IHNraXBMaXN0ID0gU2tpcExpc3RUeXBlOjpjcmVhdGUoa0luaXRIZWFkSGVpZ2h0KTsKLSAgYXV0
byBza2lwTGlzdDIgPSBTa2lwTGlzdFR5cGU6OmNyZWF0ZShrSW5pdEhlYWRIZWlnaHQpOwotICBm
b3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKLSAgICBza2lwTGlzdC5hZGQocmFuZCgp
ICUga01heFZhbHVlKTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgIHNraXBMaXN0Mi5hZGQocmFuZCgpICUga01heFZhbHVlKTsKLSAgfQotICBzdXNwLmRpc21p
c3MoKTsKLQotICBTa2lwTGlzdFR5cGU6OlNraXBwZXIgczEoc2tpcExpc3QpOwotICBTa2lwTGlz
dFR5cGU6OlNraXBwZXIgczIoc2tpcExpc3QyKTsKLQotICBpbnQ2NF90IG1lcmdlZFN1bSA9IDA7
Ci0KLSAgd2hpbGUgKHMxLmdvb2QoKSAmJiBzMi5nb29kKCkpIHsKLSAgICBpbnQgdjEgPSBzMS5k
YXRhKCk7Ci0gICAgaW50IHYyID0gczIuZGF0YSgpOwotICAgIGlmICh2MSA8IHYyKSB7Ci0gICAg
ICBzMS50byh2Mik7Ci0gICAgfSBlbHNlIGlmICh2MSA+IHYyKSB7Ci0gICAgICBzMi50byh2MSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1lcmdlZFN1bSArPSB2MTsKLSAgICAgICsrczE7Ci0gICAg
ICArK3MyOwotICAgIH0KLSAgfQotCi0gIEJFTkNITUFSS19TVVNQRU5EIHsKLSAgICAvLyBWTE9H
KDIwKSA8PCBtZXJnZWRTdW07Ci0gIH0KLX0KLQotdm9pZCBCTV9TZXRDb250YWluc05vdEZvdW5k
KGludCBpdGVycywgaW50IHNpemUpIHsKLSAgQmVuY2htYXJrU3VzcGVuZGVyIHN1c3A7Ci0gIFNl
dFR5cGUgYXNldDsKLSAgQ0hFQ0tfTFQoc2l6ZSwga01heFZhbHVlKTsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICBhc2V0Lmluc2VydCgyICogaSk7Ci0gIH0KLSAgaW50
NjRfdCBzdW0gPSAwOwotICBzdXNwLmRpc21pc3MoKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8
IGl0ZXJzOyArK2kpIHsKLSAgICBzdW0gKz0gKGFzZXQuZW5kKCkgPT0gYXNldC5maW5kKDIgKiBp
ICsgMSkpOwotICB9Ci0KLSAgQkVOQ0hNQVJLX1NVU1BFTkQgewotICAgIC8vIFZMT0coMjApIDw8
IHN1bTsKLSAgfQotfQotCi12b2lkIEJNX1NldENvbnRhaW5zRm91bmQoaW50IGl0ZXJzLCBpbnQg
c2l6ZSkgewotICBCZW5jaG1hcmtTdXNwZW5kZXIgc3VzcDsKLSAgU2V0VHlwZSBhc2V0OwotICBD
SEVDS19MVChzaXplLCBrTWF4VmFsdWUpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgYXNldC5pbnNlcnQoaSk7Ci0gIH0KLQotICBzdGQ6OnZlY3RvcjxpbnQ+IHZh
bHVlczsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7Ci0gICAgdmFsdWVzLnB1
c2hfYmFjayhyYW5kKCkgJSBzaXplKTsKLSAgfQotICBpbnQ2NF90IHN1bSA9IDA7Ci0gIHN1c3Au
ZGlzbWlzcygpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgewotICAgIHN1
bSArPSAoYXNldC5lbmQoKSA9PSBhc2V0LmZpbmQodmFsdWVzW2ldKSk7Ci0gIH0KLQotICBCRU5D
SE1BUktfU1VTUEVORCB7Ci0gICAgLy8gVkxPRygyMCkgPDwgc3VtOwotICB9Ci19Ci0KLXZvaWQg
Qk1fQ1NMQ29udGFpbnNGb3VuZChpbnQgaXRlcnMsIGludCBzaXplKSB7Ci0gIEJlbmNobWFya1N1
c3BlbmRlciBzdXNwOwotICBhdXRvIHNraXBMaXN0ID0gU2tpcExpc3RUeXBlOjpjcmVhdGUoa0lu
aXRIZWFkSGVpZ2h0KTsKLSAgQ0hFQ0tfTFQoc2l6ZSwga01heFZhbHVlKTsKLQotICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgIHNraXBMaXN0LmFkZChpKTsKLSAgfQotICBz
dGQ6OnZlY3RvcjxpbnQ+IHZhbHVlczsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytp
KSB7Ci0gICAgdmFsdWVzLnB1c2hfYmFjayhyYW5kKCkgJSBzaXplKTsKLSAgfQotICBpbnQ2NF90
IHN1bSA9IDA7Ci0gIHN1c3AuZGlzbWlzcygpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgaXRl
cnM7ICsraSkgewotICAgIHN1bSArPSBza2lwTGlzdC5jb250YWlucyh2YWx1ZXNbaV0pOwotICB9
Ci0KLSAgQkVOQ0hNQVJLX1NVU1BFTkQgewotICAgIC8vIFZMT0coMjApIDw8IHN1bTsKLSAgfQot
fQotCi12b2lkIEJNX0NTTENvbnRhaW5zTm90Rm91bmQoaW50IGl0ZXJzLCBpbnQgc2l6ZSkgewot
ICBCZW5jaG1hcmtTdXNwZW5kZXIgc3VzcDsKLSAgYXV0byBza2lwTGlzdCA9IFNraXBMaXN0VHlw
ZTo6Y3JlYXRlKGtJbml0SGVhZEhlaWdodCk7Ci0gIENIRUNLX0xUKHNpemUsIGtNYXhWYWx1ZSk7
Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICBza2lwTGlzdC5hZGQo
MiAqIGkpOwotICB9Ci0gIGludDY0X3Qgc3VtID0gMDsKLSAgc3VzcC5kaXNtaXNzKCk7Ci0KLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7Ci0gICAgc3VtICs9IHNraXBMaXN0LmNv
bnRhaW5zKDIgKiBpICsgMSk7Ci0gIH0KLQotICBCRU5DSE1BUktfU1VTUEVORCB7Ci0gICAgLy8g
VkxPRygyMCkgPDwgc3VtOwotICB9Ci19Ci0KLXZvaWQgQk1fQWRkU2V0KGludCBpdGVycywgaW50
IHNpemUpIHsKLSAgQmVuY2htYXJrU3VzcGVuZGVyIHN1c3A7Ci0gIFNldFR5cGUgYXNldDsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICBhc2V0Lmluc2VydChnRGF0YVtp
XSk7Ci0gIH0KLSAgc3VzcC5kaXNtaXNzKCk7Ci0KLSAgZm9yIChpbnQgaSA9IHNpemU7IGkgPCBz
aXplICsgaXRlcnM7ICsraSkgewotICAgIGFzZXQuaW5zZXJ0KGdEYXRhW2ldKTsKLSAgfQotfQot
Ci12b2lkIEJNX0FkZFNraXBMaXN0KGludCBpdGVycywgaW50IHNpemUpIHsKLSAgQmVuY2htYXJr
U3VzcGVuZGVyIHN1c3A7Ci0gIGF1dG8gc2tpcExpc3QgPSBTa2lwTGlzdFR5cGU6OmNyZWF0ZShr
SW5pdEhlYWRIZWlnaHQpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAg
IHNraXBMaXN0LmFkZChnRGF0YVtpXSk7Ci0gIH0KLSAgc3VzcC5kaXNtaXNzKCk7Ci0KLSAgZm9y
IChpbnQgaSA9IHNpemU7IGkgPCBzaXplICsgaXRlcnM7ICsraSkgewotICAgIHNraXBMaXN0LmFk
ZChnRGF0YVtpXSk7Ci0gIH0KLX0KLQotQkVOQ0hNQVJLKEFjY2Vzc29yLCBpdGVycykgewotICBC
ZW5jaG1hcmtTdXNwZW5kZXIgc3VzcDsKLSAgYXV0byBza2lwbGlzdCA9IFNraXBMaXN0VHlwZTo6
Y3JlYXRlSW5zdGFuY2Uoa0luaXRIZWFkSGVpZ2h0KTsKLSAgYXV0byBzbCA9IHNraXBsaXN0Lmdl
dCgpOwotCi0gIHN1c3AuZGlzbWlzcygpOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZXJz
OyArK2kpIHsKLSAgICBTa2lwTGlzdEFjY2Vzc29yIGFjY2Vzc29yKHNsKTsKLSAgfQotfQotCi0v
LyBhIGJlbmNobWFyayB0byBlc3RpbWF0ZSB0aGUKLS8vIGxvdyBib3VuZCBvZiBkb2luZyBhIHJl
ZiBjb3VudGluZyBmb3IgYW4gQWNjZXNzb3IKLUJFTkNITUFSSyhhY2Nlc3NvckJhc2ljUmVmY291
bnRpbmcsIGl0ZXJzKSB7Ci0gIEJlbmNobWFya1N1c3BlbmRlciBzdXNwOwotICBhdXRvKiB2YWx1
ZSA9IG5ldyBzdGQ6OmF0b21pYzxpbnQzMl90PigpOwotICBhdXRvKiBkaXJ0eSA9IG5ldyBzdGQ6
OmF0b21pYzxpbnQzMl90PigpOwotICAqdmFsdWUgPSAqZGlydHkgPSAwOwotICBmb2xseTo6TWlj
cm9TcGluTG9jayBsOwotICBsLmluaXQoKTsKLQotICBzdXNwLmRpc21pc3MoKTsKLSAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7Ci0gICAgdmFsdWUtPmZldGNoX2FkZCgxLCBz
dGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICBpZiAoZGlydHktPmxvYWQoc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSkgIT0gMCkgewotICAgICAgZm9sbHk6Ok1TTEd1YXJkIGcobCk7Ci0g
ICAgfQotICAgIHZhbHVlLT5mZXRjaF9zdWIoMSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7
Ci0gIH0KLQotICBCRU5DSE1BUktfU1VTUEVORCB7Ci0gICAgZGVsZXRlIGRpcnR5OwotICAgIGRl
bGV0ZSB2YWx1ZTsKLSAgfQotfQotCi0KLS8vIERhdGEgRm9yIHRlc3RpbmcgY29udGVudGlvbiBi
ZW5jaG1hcmsKLWNsYXNzIENvbmN1cnJlbnRBY2Nlc3NEYXRhIHsKLSBwdWJsaWM6Ci0gIGV4cGxp
Y2l0IENvbmN1cnJlbnRBY2Nlc3NEYXRhKGludCBzaXplKSA6Ci0gICAgc2tpcExpc3RfKFNraXBM
aXN0VHlwZTo6Y3JlYXRlKDEwKSksCi0gICAgc2V0c18oRkxBR1NfbnVtX3NldHMpLCBsb2Nrc18o
RkxBR1NfbnVtX3NldHMpIHsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
Ci0gICAgICBzZXRzX1swXS5pbnNlcnQoaSk7Ci0gICAgICBza2lwTGlzdF8uYWRkKGkpOwotICAg
IH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkxBR1NfbnVtX3NldHM7ICsraSkgewotICAg
ICAgbG9ja3NfW2ldID0gbmV3IFJXU3BpbkxvY2soKTsKLSAgICAgIGlmIChpID4gMCkgc2V0c19b
aV0gPSBzZXRzX1swXTsKLSAgICB9Ci0KLS8vIFRoaXMgcmVxdWlyZXMga25vd2xlZGdlIG9mIHRo
ZSBDKysgbGlicmFyeSBpbnRlcm5hbHMuIE9ubHkgdXNlIGl0IGlmIHdlJ3JlCi0vLyB1c2luZyB0
aGUgR05VIEMrKyBsaWJyYXJ5LgotI2lmZGVmIF9HTElCQ1hYX1NZTVZFUgotICAgIC8vIG1lbW9y
eSB1c2FnZQotICAgIGludDY0X3Qgc2V0TWVtb3J5U2l6ZSA9IHNldHNfWzBdLnNpemUoKSAqIHNp
emVvZigqc2V0c19bMF0uYmVnaW4oKS5fTV9ub2RlKTsKLSAgICBpbnQ2NF90IGNzbE1lbW9yeVNp
emUgPSAwOwotICAgIGZvciAoYXV0byBpdCA9IHNraXBMaXN0Xy5iZWdpbigpOyBpdCAhPSBza2lw
TGlzdF8uZW5kKCk7ICsraXQpIHsKLSAgICAgIGNzbE1lbW9yeVNpemUgKz0gaXQubm9kZVNpemUo
KTsKLSAgICB9Ci0KLSAgICAvL0xPRyhJTkZPKSA8PCAic2l6ZT0iIDw8IHNldHNfWzBdLnNpemUo
KQotICAgIC8vICA8PCAiOyBzdGQ6OnNldCBtZW1vcnkgc2l6ZT0iIDw8IHNldE1lbW9yeVNpemUK
LSAgICAvLyAgPDwgIjsgY3NsIG1lbW9yeSBzaXplPSIgPDwgY3NsTWVtb3J5U2l6ZTsKLSNlbmRp
ZgotCi0gICAgcmVhZFZhbHVlc18ucmVzZXJ2ZShzaXplKTsKLSAgICBkZWxldGVWYWx1ZXNfLnJl
c2VydmUoc2l6ZSk7Ci0gICAgd3JpdGVWYWx1ZXNfLnJlc2VydmUoc2l6ZSk7Ci0gICAgZm9yIChp
bnQgaSA9IHNpemU7IGkgPCAyICogc2l6ZTsgKytpKSB7Ci0gICAgICByZWFkVmFsdWVzXy5wdXNo
X2JhY2soMiAqIGkpOwotICAgICAgZGVsZXRlVmFsdWVzXy5wdXNoX2JhY2soMiAqIGkpOwotCi0g
ICAgICAvLyBoYWxmIG5ldyB2YWx1ZXMgYW5kIGhhbGYgYWxyZWFkeSBpbiB0aGUgbGlzdAotICAg
ICAgd3JpdGVWYWx1ZXNfLnB1c2hfYmFjaygocmFuZCgpICUgMikgKyAyICogaSk7Ci0gICAgfQot
ICAgIHN0ZDo6c2h1ZmZsZShyZWFkVmFsdWVzXy5iZWdpbigpLCByZWFkVmFsdWVzXy5lbmQoKSwg
c3RkOjptdDE5OTM3e30pOwotICAgIHN0ZDo6c2h1ZmZsZShkZWxldGVWYWx1ZXNfLmJlZ2luKCks
IGRlbGV0ZVZhbHVlc18uZW5kKCksIHN0ZDo6bXQxOTkzN3t9KTsKLSAgICBzdGQ6OnNodWZmbGUo
d3JpdGVWYWx1ZXNfLmJlZ2luKCksIHdyaXRlVmFsdWVzXy5lbmQoKSwgc3RkOjptdDE5OTM3e30p
OwotICB9Ci0KLSAgfkNvbmN1cnJlbnRBY2Nlc3NEYXRhKCkgewotICAgIEZPUl9FQUNIKGxvY2ss
IGxvY2tzXykgZGVsZXRlICpsb2NrOwotICB9Ci0KLSAgaW5saW5lIGJvb2wgc2tpcExpc3RGaW5k
KGludCAvKiBpZHggKi8sIFZhbHVlVHlwZSB2YWwpIHsKLSAgICByZXR1cm4gc2tpcExpc3RfLmNv
bnRhaW5zKHZhbCk7Ci0gIH0KLSAgaW5saW5lIHZvaWQgc2tpcExpc3RJbnNlcnQoaW50IC8qIGlk
eCAqLywgVmFsdWVUeXBlIHZhbCkgewotICAgIHNraXBMaXN0Xy5hZGQodmFsKTsKLSAgfQotICBp
bmxpbmUgdm9pZCBza2lwTGlzdEVyYXNlKGludCAvKiBpZHggKi8sIFZhbHVlVHlwZSB2YWwpIHsK
LSAgICBza2lwTGlzdF8ucmVtb3ZlKHZhbCk7Ci0gIH0KLQotICBpbmxpbmUgYm9vbCBzZXRGaW5k
KGludCBpZHgsIFZhbHVlVHlwZSB2YWwpIHsKLSAgICBSV1NwaW5Mb2NrOjpSZWFkSG9sZGVyIGco
bG9ja3NfW2lkeF0pOwotICAgIHJldHVybiBzZXRzX1tpZHhdLmZpbmQodmFsKSA9PSBzZXRzX1tp
ZHhdLmVuZCgpOwotICB9Ci0gIGlubGluZSB2b2lkIHNldEluc2VydChpbnQgaWR4LCBWYWx1ZVR5
cGUgdmFsKSB7Ci0gICAgUldTcGluTG9jazo6V3JpdGVIb2xkZXIgZyhsb2Nrc19baWR4XSk7Ci0g
ICAgc2V0c19baWR4XS5pbnNlcnQodmFsKTsKLSAgfQotICBpbmxpbmUgdm9pZCBzZXRFcmFzZShp
bnQgaWR4LCBWYWx1ZVR5cGUgdmFsKSB7Ci0gICAgUldTcGluTG9jazo6V3JpdGVIb2xkZXIgZyhs
b2Nrc19baWR4XSk7Ci0gICAgc2V0c19baWR4XS5lcmFzZSh2YWwpOwotICB9Ci0KLSAgdm9pZCBy
dW5Ta2lwTGlzdChpbnQgaWQsIHNpemVfdCBpdGVycykgewotICAgIGludCBzdW0gPSAwOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgewotICAgICAgc3VtICs9IGFjY2Vz
c1NraXBMaXN0KGlkLCBpKTsKLSAgICB9Ci0gICAgLy8gVkxPRygyMCkgPDwgc3VtOwotICB9Ci0K
LSAgdm9pZCBydW5TZXQoc2l6ZV90IGlkLCBzaXplX3QgaXRlcnMpIHsKLSAgICBpbnQgc3VtID0g
MDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKLSAgICAgIHN1bSAr
PSBhY2Nlc3NTZXQoaWQsIGkpOwotICAgIH0KLSAgICAvLyBWTE9HKDIwKSA8PCBzdW07Ci0gIH0K
LQotICBib29sIGFjY2Vzc1NraXBMaXN0KGludDY0X3QgaWQsIHNpemVfdCB0KSB7Ci0gICAgaWYg
KHQgPiByZWFkVmFsdWVzXy5zaXplKCkpIHsKLSAgICAgIHQgPSB0ICUgcmVhZFZhbHVlc18uc2l6
ZSgpOwotICAgIH0KLSAgICB1aW50MzJfdCBoID0gZm9sbHk6Omhhc2g6OnR3YW5nXzMyZnJvbTY0
KHQgKiBpZCk7Ci0gICAgc3dpdGNoIChoICUgOCkgewotICAgICAgY2FzZSA3OiAgIC8vIHdyaXRl
Ci0gICAgICAgIGlmICgoaCAmIDB4MzEpID09IDApIHsgLy8gMS80IGNoYW5jZSB0byBkZWxldGUK
LSAgICAgICAgICBza2lwTGlzdEVyYXNlKDAsIGRlbGV0ZVZhbHVlc19bdF0pOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIHNraXBMaXN0SW5zZXJ0KDAsIHdyaXRlVmFsdWVzX1t0XSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gc2tpcExpc3RGaW5kKDAsIHJlYWRWYWx1ZXNfW3RdKTsKLSAgICB9Ci0gIH0KLQotICBib29s
IGFjY2Vzc1NldChpbnQ2NF90IGlkLCBzaXplX3QgdCkgewotICAgIGlmICh0ID4gcmVhZFZhbHVl
c18uc2l6ZSgpKSB7Ci0gICAgICB0ID0gdCAlIHJlYWRWYWx1ZXNfLnNpemUoKTsKLSAgICB9Ci0g
ICAgdWludDMyX3QgaCA9IGZvbGx5OjpoYXNoOjp0d2FuZ18zMmZyb202NCh0ICogaWQpOwotICAg
IGludCBpZHggPSAoaCAlIEZMQUdTX251bV9zZXRzKTsKLSAgICBzd2l0Y2ggKGggJSA4KSB7ICAv
LyAxLzggY2hhbmNlIHRvIHdyaXRlCi0gICAgICBjYXNlIDc6ICAgLy8gd3JpdGUKLSAgICAgICAg
aWYgKChoICYgMHgzMSkgPT0gMCkgeyAvLyAxLzMyIGNoYW5jZSB0byBkZWxldGUKLSAgICAgICAg
ICBzZXRFcmFzZShpZHgsIGRlbGV0ZVZhbHVlc19bdF0pOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIHNldEluc2VydChpZHgsIHdyaXRlVmFsdWVzX1t0XSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gc2V0RmluZChpZHgs
IHJlYWRWYWx1ZXNfW3RdKTsKLSAgICB9Ci0gIH0KLQotIHByaXZhdGU6Ci0gIFNraXBMaXN0VHlw
ZTo6QWNjZXNzb3Igc2tpcExpc3RfOwotICBzdGQ6OnZlY3RvcjxTZXRUeXBlPiBzZXRzXzsKLSAg
c3RkOjp2ZWN0b3I8UldTcGluTG9jayo+IGxvY2tzXzsKLQotICBzdGQ6OnZlY3RvcjxWYWx1ZVR5
cGU+IHJlYWRWYWx1ZXNfOwotICBzdGQ6OnZlY3RvcjxWYWx1ZVR5cGU+IHdyaXRlVmFsdWVzXzsK
LSAgc3RkOjp2ZWN0b3I8VmFsdWVUeXBlPiBkZWxldGVWYWx1ZXNfOwotfTsKLQotc3RhdGljIHN0
ZDo6bWFwPGludCwgc3RkOjpzaGFyZWRfcHRyPENvbmN1cnJlbnRBY2Nlc3NEYXRhPiA+IGdfZGF0
YTsKLQotc3RhdGljIENvbmN1cnJlbnRBY2Nlc3NEYXRhICptYXlJbml0VGVzdERhdGEoaW50IHNp
emUpIHsKLSAgYXV0byBpdCA9IGdfZGF0YS5maW5kKHNpemUpOwotICBpZiAoaXQgPT0gZ19kYXRh
LmVuZCgpKSB7Ci0gICAgYXV0byBwdHIgPSBzdGQ6OnNoYXJlZF9wdHI8Q29uY3VycmVudEFjY2Vz
c0RhdGE+KAotICAgICAgICBuZXcgQ29uY3VycmVudEFjY2Vzc0RhdGEoc2l6ZSkpOwotICAgIGdf
ZGF0YVtzaXplXSA9IHB0cjsKLSAgICByZXR1cm4gcHRyLmdldCgpOwotICB9Ci0gIHJldHVybiBp
dC0+c2Vjb25kLmdldCgpOwotfQotCi12b2lkIEJNX0NvbnRlbnRpb25DU0woaW50IGl0ZXJzLCBp
bnQgc2l6ZSkgewotICBCZW5jaG1hcmtTdXNwZW5kZXIgc3VzcDsKLSAgYXV0byBkYXRhID0gbWF5
SW5pdFRlc3REYXRhKHNpemUpOwotICBzdGQ6OnZlY3RvcjxzdGQ6OnRocmVhZD4gdGhyZWFkczsK
LSAgc3VzcC5kaXNtaXNzKCk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBGTEFHU19udW1fdGhy
ZWFkczsgKytpKSB7Ci0gICAgdGhyZWFkcy5wdXNoX2JhY2soc3RkOjp0aHJlYWQoCi0gICAgICAg
ICAgJkNvbmN1cnJlbnRBY2Nlc3NEYXRhOjpydW5Ta2lwTGlzdCwgZGF0YSwgaSwgaXRlcnMpKTsK
LSAgfQotICBGT1JfRUFDSCh0LCB0aHJlYWRzKSB7Ci0gICAgKCp0KS5qb2luKCk7Ci0gIH0KLX0K
LQotdm9pZCBCTV9Db250ZW50aW9uU3RkU2V0KGludCBpdGVycywgaW50IHNpemUpIHsKLSAgQmVu
Y2htYXJrU3VzcGVuZGVyIHN1c3A7Ci0gIGF1dG8gZGF0YSA9IG1heUluaXRUZXN0RGF0YShzaXpl
KTsKLSAgc3RkOjp2ZWN0b3I8c3RkOjp0aHJlYWQ+IHRocmVhZHM7Ci0gIHN1c3AuZGlzbWlzcygp
OwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgRkxBR1NfbnVtX3RocmVhZHM7ICsraSkgewotICAg
IHRocmVhZHMucHVzaF9iYWNrKHN0ZDo6dGhyZWFkKAotICAgICAgICAgICZDb25jdXJyZW50QWNj
ZXNzRGF0YTo6cnVuU2V0LCBkYXRhLCBpLCBpdGVycykpOwotICB9Ci0gIEZPUl9FQUNIKHQsIHRo
cmVhZHMpIHsKLSAgICAoKnQpLmpvaW4oKTsKLSAgfQotICBzdXNwLnJlaGlyZSgpOwotfQotCi0K
LS8vIFNpbmdsZS10aHJlYWQgYmVuY2htYXJraW5nCi0KLUJFTkNITUFSS19EUkFXX0xJTkUoKTsK
LQotQkVOQ0hNQVJLX1BBUkFNKEJNX0l0ZXJhdGVPdmVyU2V0LCAgMTAwMCk7Ci1CRU5DSE1BUktf
UEFSQU0oQk1fSXRlcmF0ZVNraXBMaXN0LCAxMDAwKTsKLUJFTkNITUFSS19EUkFXX0xJTkUoKTsK
LUJFTkNITUFSS19QQVJBTShCTV9JdGVyYXRlT3ZlclNldCwgIDEwMDAwMDApOwotQkVOQ0hNQVJL
X1BBUkFNKEJNX0l0ZXJhdGVTa2lwTGlzdCwgMTAwMDAwMCk7Ci1CRU5DSE1BUktfRFJBV19MSU5F
KCk7Ci0KLS8vIGZpbmQgd2l0aCBrZXlzIGluIHRoZSBzZXQKLUJFTkNITUFSS19QQVJBTShCTV9T
ZXRDb250YWluc0ZvdW5kLCAxMDAwKTsKLUJFTkNITUFSS19QQVJBTShCTV9DU0xDb250YWluc0Zv
dW5kLCAxMDAwKTsKLUJFTkNITUFSS19EUkFXX0xJTkUoKTsKLUJFTkNITUFSS19QQVJBTShCTV9T
ZXRDb250YWluc0ZvdW5kLCAxMDAwMDApOwotQkVOQ0hNQVJLX1BBUkFNKEJNX0NTTENvbnRhaW5z
Rm91bmQsIDEwMDAwMCk7Ci1CRU5DSE1BUktfRFJBV19MSU5FKCk7Ci1CRU5DSE1BUktfUEFSQU0o
Qk1fU2V0Q29udGFpbnNGb3VuZCwgMTAwMDAwMCk7Ci1CRU5DSE1BUktfUEFSQU0oQk1fQ1NMQ29u
dGFpbnNGb3VuZCwgMTAwMDAwMCk7Ci1CRU5DSE1BUktfRFJBV19MSU5FKCk7Ci1CRU5DSE1BUktf
UEFSQU0oQk1fU2V0Q29udGFpbnNGb3VuZCwgMTAwMDAwMDApOwotQkVOQ0hNQVJLX1BBUkFNKEJN
X0NTTENvbnRhaW5zRm91bmQsIDEwMDAwMDAwKTsKLUJFTkNITUFSS19EUkFXX0xJTkUoKTsKLQot
Ci0vLyBmaW5kIHdpdGgga2V5cyBub3QgaW4gdGhlIHNldAotQkVOQ0hNQVJLX1BBUkFNKEJNX1Nl
dENvbnRhaW5zTm90Rm91bmQsIDEwMDApOwotQkVOQ0hNQVJLX1BBUkFNKEJNX0NTTENvbnRhaW5z
Tm90Rm91bmQsIDEwMDApOwotQkVOQ0hNQVJLX0RSQVdfTElORSgpOwotQkVOQ0hNQVJLX1BBUkFN
KEJNX1NldENvbnRhaW5zTm90Rm91bmQsIDEwMDAwMCk7Ci1CRU5DSE1BUktfUEFSQU0oQk1fQ1NM
Q29udGFpbnNOb3RGb3VuZCwgMTAwMDAwKTsKLUJFTkNITUFSS19EUkFXX0xJTkUoKTsKLUJFTkNI
TUFSS19QQVJBTShCTV9TZXRDb250YWluc05vdEZvdW5kLCAxMDAwMDAwKTsKLUJFTkNITUFSS19Q
QVJBTShCTV9DU0xDb250YWluc05vdEZvdW5kLCAxMDAwMDAwKTsKLUJFTkNITUFSS19EUkFXX0xJ
TkUoKTsKLQotCi1CRU5DSE1BUktfUEFSQU0oQk1fQWRkU2V0LCAgICAgIDEwMDApOwotQkVOQ0hN
QVJLX1BBUkFNKEJNX0FkZFNraXBMaXN0LCAxMDAwKTsKLUJFTkNITUFSS19EUkFXX0xJTkUoKTsK
LQotQkVOQ0hNQVJLX1BBUkFNKEJNX0FkZFNldCwgICAgICA2NTUzNik7Ci1CRU5DSE1BUktfUEFS
QU0oQk1fQWRkU2tpcExpc3QsIDY1NTM2KTsKLUJFTkNITUFSS19EUkFXX0xJTkUoKTsKLQotQkVO
Q0hNQVJLX1BBUkFNKEJNX0FkZFNldCwgICAgICAxMDAwMDAwKTsKLUJFTkNITUFSS19QQVJBTShC
TV9BZGRTa2lwTGlzdCwgMTAwMDAwMCk7Ci1CRU5DSE1BUktfRFJBV19MSU5FKCk7Ci0KLUJFTkNI
TUFSS19QQVJBTShCTV9TZXRNZXJnZSwgICAgICAgICAgICAgMTAwMCk7Ci1CRU5DSE1BUktfUEFS
QU0oQk1fQ1NMTWVyZ2VJbnRlcnNlY3Rpb24sIDEwMDApOwotQkVOQ0hNQVJLX1BBUkFNKEJNX0NT
TE1lcmdlTG9va3VwLCAgICAgICAxMDAwKTsKLUJFTkNITUFSS19EUkFXX0xJTkUoKTsKLQotQkVO
Q0hNQVJLX1BBUkFNKEJNX1NldE1lcmdlLCAgICAgICAgICAgICA2NTUzNik7Ci1CRU5DSE1BUktf
UEFSQU0oQk1fQ1NMTWVyZ2VJbnRlcnNlY3Rpb24sIDY1NTM2KTsKLUJFTkNITUFSS19QQVJBTShC
TV9DU0xNZXJnZUxvb2t1cCwgICAgICAgNjU1MzYpOwotQkVOQ0hNQVJLX0RSQVdfTElORSgpOwot
Ci1CRU5DSE1BUktfUEFSQU0oQk1fU2V0TWVyZ2UsICAgICAgICAgICAgIDEwMDAwMDApOwotQkVO
Q0hNQVJLX1BBUkFNKEJNX0NTTE1lcmdlSW50ZXJzZWN0aW9uLCAxMDAwMDAwKTsKLUJFTkNITUFS
S19QQVJBTShCTV9DU0xNZXJnZUxvb2t1cCwgICAgICAgMTAwMDAwMCk7Ci1CRU5DSE1BUktfRFJB
V19MSU5FKCk7Ci0KLQotLy8gbXVsdGl0aHJlYWRlZCBiZW5jaG1hcmtpbmcKLQotQkVOQ0hNQVJL
X1BBUkFNKEJNX0NvbnRlbnRpb25TdGRTZXQsIDEwMjQpOwotQkVOQ0hNQVJLX1BBUkFNKEJNX0Nv
bnRlbnRpb25DU0wsICAgIDEwMjQpOwotQkVOQ0hNQVJLX0RSQVdfTElORSgpOwotCi1CRU5DSE1B
UktfUEFSQU0oQk1fQ29udGVudGlvblN0ZFNldCwgNjU1MzYpOwotQkVOQ0hNQVJLX1BBUkFNKEJN
X0NvbnRlbnRpb25DU0wsICAgIDY1NTM2KTsKLUJFTkNITUFSS19EUkFXX0xJTkUoKTsKLQotQkVO
Q0hNQVJLX1BBUkFNKEJNX0NvbnRlbnRpb25TdGRTZXQsIDEwNDg1NzYpOwotQkVOQ0hNQVJLX1BB
UkFNKEJNX0NvbnRlbnRpb25DU0wsICAgIDEwNDg1NzYpOwotQkVOQ0hNQVJLX0RSQVdfTElORSgp
OwotCi19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgewotICBpbml0RGF0YSgp
OwotICBydW5CZW5jaG1hcmtzKCk7Ci0gIHJldHVybiAwOwotfQotCi0jaWYgMAotLyoKLUJlbmNo
bWFyayBvbiBJbnRlbChSKSBYZW9uKFIpIENQVSBYNTY1MCBAMi42N0dIegotCi09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLTEgdGhyZWFkIEJlbmNobWFyayAgICAgICAgICAgICAgICAgICAgIEl0ZXJz
ICAgVG90YWwgdCAgICB0L2l0ZXIgaXRlci9zZWMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICsz
Ny4wJSBCTV9BY2Nlc3NvciAgICAgICAgICAgICAgICAgICAgMTAwMDAwICAxLjk1OCBtcyAgMTku
NTggbnMgIDQ4LjcxIE0KLSogICAgICAgQk1fQWNjZXNzb3JCYXNpY1JlZmNvdW50aW5nICAgIDEw
MDAwMCAgMS40MjkgbXMgIDE0LjI5IG5zICA2Ni43NCBNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSArIDYwMyUgQk1fSXRlcmF0ZU92ZXJTZXQvMTAwMCAgICAgICAgIDEwMDAwMCAgMS41ODkgbXMg
IDE1Ljg5IG5zICA2MC4wMiBNCi0qICAgICAgIEJNX0l0ZXJhdGVTa2lwTGlzdC8xMDAwICAgICAg
ICAxMDAwMDAgICAgMjI2IHVzICAgMi4yNiBucyAgICA0MjIgTQotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gKyAxMDclIEJNX0l0ZXJhdGVPdmVyU2V0Lzk3Ni42ayAgICAgICAxMDAwMDAgIDguMzI0
IG1zICA4My4yNCBucyAgMTEuNDYgTQotKiAgICAgICBCTV9JdGVyYXRlU2tpcExpc3QvOTc2LjZr
ICAgICAgMTAwMDAwICA0LjAxNiBtcyAgNDAuMTYgbnMgIDIzLjc1IE0KLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotKiAgICAgICBCTV9TZXRDb250YWluc0ZvdW5kLzEwMDAgICAgICAgMTAwMDAwICA3
LjA4MiBtcyAgNzAuODIgbnMgIDEzLjQ3IE0KLSArMzkuOSUgQk1fQ1NMQ29udGFpbnNGb3VuZC8x
MDAwICAgICAgIDEwMDAwMCAgOS45MDggbXMgIDk5LjA4IG5zICA5LjYyNSBNCi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSogICAgICAgQk1fU2V0Q29udGFpbnNGb3VuZC85Ny42NmsgICAgIDEwMDAw
MCAgIDIzLjggbXMgICAgMjM4IG5zICA0LjAwNiBNCi0gKzUuOTclIEJNX0NTTENvbnRhaW5zRm91
bmQvOTcuNjZrICAgICAxMDAwMDAgIDI1LjIzIG1zICAyNTIuMyBucyAgMy43ODEgTQotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gKzMzLjYlIEJNX1NldENvbnRhaW5zRm91bmQvOTc2LjZrICAgICAx
MDAwMDAgICA2NC4zIG1zICAgIDY0MyBucyAgMS40ODMgTQotKiAgICAgICBCTV9DU0xDb250YWlu
c0ZvdW5kLzk3Ni42ayAgICAgMTAwMDAwICA0OC4xMyBtcyAgNDgxLjMgbnMgIDEuOTgxIE0KLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICszMC4zJSBCTV9TZXRDb250YWluc0ZvdW5kLzkuNTM3TSAg
ICAgMTAwMDAwICAxMTUuMSBtcyAgMS4xNTEgdXMgIDg0OC42IGsKLSogICAgICAgQk1fQ1NMQ29u
dGFpbnNGb3VuZC85LjUzN00gICAgIDEwMDAwMCAgODguMzMgbXMgIDg4My4zIG5zICAgMS4wOCBN
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogICAgICAgQk1fU2V0Q29udGFpbnNOb3RGb3VuZC8x
MDAwICAgIDEwMDAwMCAgMi4wODEgbXMgIDIwLjgxIG5zICA0NS44MyBNCi0gKzc2LjIlIEJNX0NT
TENvbnRhaW5zTm90Rm91bmQvMTAwMCAgICAxMDAwMDAgIDMuNjY3IG1zICAzNi42NyBucyAgMjYu
MDEgTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qICAgICAgIEJNX1NldENvbnRhaW5zTm90Rm91
bmQvOTcuNjZrICAxMDAwMDAgIDYuMDQ5IG1zICA2MC40OSBucyAgMTUuNzcgTQotICszMi43JSBC
TV9DU0xDb250YWluc05vdEZvdW5kLzk3LjY2ayAgMTAwMDAwICA4LjAyNSBtcyAgODAuMjUgbnMg
IDExLjg4IE0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiAgICAgICBCTV9TZXRDb250YWluc05v
dEZvdW5kLzk3Ni42ayAgMTAwMDAwICA3LjQ2NCBtcyAgNzQuNjQgbnMgIDEyLjc4IE0KLSArMTIu
OCUgQk1fQ1NMQ29udGFpbnNOb3RGb3VuZC85NzYuNmsgIDEwMDAwMCAgOC40MTcgbXMgIDg0LjE3
IG5zICAxMS4zMyBNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogICAgICAgQk1fQWRkU2V0LzEw
MDAgICAgICAgICAgICAgICAgIDEwMDAwMCAgMjkuMjYgbXMgIDI5Mi42IG5zICAzLjI1OSBNCi0g
KzcwLjAlIEJNX0FkZFNraXBMaXN0LzEwMDAgICAgICAgICAgICAxMDAwMDAgIDQ5Ljc1IG1zICA0
OTcuNSBucyAgMS45MTcgTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qICAgICAgIEJNX0FkZFNl
dC82NGsgICAgICAgICAgICAgICAgICAxMDAwMDAgIDM4LjczIG1zICAzODcuMyBucyAgMi40NjIg
TQotICs1NS43JSBCTV9BZGRTa2lwTGlzdC82NGsgICAgICAgICAgICAgMTAwMDAwICAgNjAuMyBt
cyAgICA2MDMgbnMgIDEuNTgxIE0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiAgICAgICBCTV9B
ZGRTZXQvOTc2LjZrICAgICAgICAgICAgICAgMTAwMDAwICA3NS43MSBtcyAgNzU3LjEgbnMgICAx
LjI2IE0KLSArMzMuNiUgQk1fQWRkU2tpcExpc3QvOTc2LjZrICAgICAgICAgIDEwMDAwMCAgMTAx
LjIgbXMgIDEuMDEyIHVzICA5NjUuMyBrCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSArIDcxNiUg
Qk1fU2V0TWVyZ2UvMTAwMCAgICAgICAgICAgICAgIDEwMDAwMCAgNi44NzIgbXMgIDY4LjcyIG5z
ICAxMy44OCBNCi0qICAgICAgIEJNX0NTTE1lcmdlSW50ZXJzZWN0aW9uLzEwMDAgICAxMDAwMDAg
ICAgODQyIHVzICAgOC40MiBucyAgMTEzLjMgTQotICsgMjY4JSBCTV9DU0xNZXJnZUxvb2t1cC8x
MDAwICAgICAgICAgMTAwMDAwICAgIDMuMSBtcyAgICAgMzEgbnMgIDMwLjc2IE0KLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICszNi4zJSBCTV9TZXRNZXJnZS82NGsgICAgICAgICAgICAgICAgMTAw
MDAwICAxNC4wMyBtcyAgMTQwLjMgbnMgIDYuNzk4IE0KLSArMzkuNCUgQk1fQ1NMTWVyZ2VJbnRl
cnNlY3Rpb24vNjRrICAgIDEwMDAwMCAgMTQuMzUgbXMgIDE0My41IG5zICA2LjY0NSBNCi0qICAg
ICAgIEJNX0NTTE1lcmdlTG9va3VwLzY0ayAgICAgICAgICAxMDAwMDAgIDEwLjI5IG1zICAxMDIu
OSBucyAgOS4yNjYgTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKzEwLjMlIEJNX1NldE1lcmdl
Lzk3Ni42ayAgICAgICAgICAgICAxMDAwMDAgIDQ2LjI0IG1zICA0NjIuNCBucyAgMi4wNjIgTQot
ICsyNS4xJSBCTV9DU0xNZXJnZUludGVyc2VjdGlvbi85NzYuNmsgMTAwMDAwICA1Mi40NyBtcyAg
NTI0LjcgbnMgIDEuODE4IE0KLSogICAgICAgQk1fQ1NMTWVyZ2VMb29rdXAvOTc2LjZrICAgICAg
IDEwMDAwMCAgNDEuOTQgbXMgIDQxOS4zIG5zICAyLjI3NCBNCi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNvbnRlbnRpb24gYmVuY2htYXJrIDcvOCBm
aW5kLCAzLzMyIGluc2VydCwgMS8zMiBlcmFzZQotCi0gNCB0aHJlYWRzIEJlbmNobWFyayAgICAg
ICAgICAgICAgICAgICBJdGVycyAgIFRvdGFsIHQgICAgdC9pdGVyIGl0ZXIvc2VjCi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSArIDI2OSUgQk1fQ29udGVudGlvblN0ZFNldC8xayAgICAgICAgIDEw
MDAwMCAgNzUuNjYgbXMgIDc1Ni42IG5zICAgMS4yNiBNCi0qICAgICAgIEJNX0NvbnRlbnRpb25D
U0wvMWsgICAgICAgICAgICAxMDAwMDAgIDIwLjQ3IG1zICAyMDQuNyBucyAgNC42NTggTQotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gKyAyMjglIEJNX0NvbnRlbnRpb25TdGRTZXQvNjRrICAgICAg
ICAxMDAwMDAgIDEwNS42IG1zICAxLjA1NiB1cyAgOTI0LjkgawotKiAgICAgICBCTV9Db250ZW50
aW9uQ1NMLzY0ayAgICAgICAgICAgMTAwMDAwICAzMi4xOCBtcyAgMzIxLjggbnMgIDIuOTYzIE0K
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICsgMjI0JSBCTV9Db250ZW50aW9uU3RkU2V0LzFNICAg
ICAgICAgMTAwMDAwICAxMTcuNCBtcyAgMS4xNzQgdXMgIDgzMi4yIGsKLSogICAgICAgQk1fQ29u
dGVudGlvbkNTTC8xTSAgICAgICAgICAgIDEwMDAwMCAgMzYuMTggbXMgIDM2MS44IG5zICAyLjYz
NiBNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCi0xMiB0aHJlYWRzIEJlbmNobWFyayAgICAg
ICAgICAgICAgICAgICBJdGVycyAgIFRvdGFsIHQgICAgdC9pdGVyIGl0ZXIvc2VjCi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSArIDY5NyUgQk1fQ29udGVudGlvblN0ZFNldC8xayAgICAgICAgIDEw
MDAwMCAgNDU1LjMgbXMgIDQuNTUzIHVzICAyMTQuNSBrCi0qICAgICAgIEJNX0NvbnRlbnRpb25D
U0wvMWsgICAgICAgICAgICAxMDAwMDAgIDU3LjEyIG1zICA1NzEuMiBucyAgIDEuNjcgTQotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gKzEyNTclIEJNX0NvbnRlbnRpb25TdGRTZXQvNjRrICAgICAg
ICAxMDAwMDAgIDY1NC45IG1zICA2LjU0OSB1cyAgMTQ5LjEgawotKiAgICAgICBCTV9Db250ZW50
aW9uQ1NMLzY0ayAgICAgICAgICAgMTAwMDAwICA0OC4yNCBtcyAgNDgyLjQgbnMgIDEuOTc3IE0K
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICsxMjYyJSBCTV9Db250ZW50aW9uU3RkU2V0LzFNICAg
ICAgICAgMTAwMDAwICA2NTcuMyBtcyAgNi41NzMgdXMgIDE0OC42IGsKLSogICAgICAgQk1fQ29u
dGVudGlvbkNTTC8xTSAgICAgICAgICAgIDEwMDAwMCAgNDguMjUgbXMgIDQ4Mi41IG5zICAxLjk3
NyBNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotKi8KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvdGVzdC9EZXRlcm1pbmlzdGlj
U2NoZWR1bGUuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkv
dGVzdC9EZXRlcm1pbmlzdGljU2NoZWR1bGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxMjcyYzQyYTcxOWU1YzYwYzhjYzVhNDFlMWYxY2NjNTY2YTFiYTcyLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3Rlc3QvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDM5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgRmFjZWJv
b2ssIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp
b24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xp
Y2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJ
VEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp
Y2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgPGZvbGx5L3Rlc3QvRGV0ZXJtaW5pc3RpY1NjaGVkdWxl
Lmg+Ci0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNs
dWRlIDxsaXN0PgotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHJhbmRvbT4KLSNpbmNsdWRl
IDx1bm9yZGVyZWRfbWFwPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlIDxmb2xseS9S
YW5kb20uaD4KLQotbmFtZXNwYWNlIGZvbGx5IHsKLW5hbWVzcGFjZSB0ZXN0IHsKLQotRk9MTFlf
VExTIHNlbV90KiBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OnRsc19zZW07Ci1GT0xMWV9UTFMgRGV0
ZXJtaW5pc3RpY1NjaGVkdWxlKiBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OnRsc19zY2hlZDsKLUZP
TExZX1RMUyB1bnNpZ25lZCBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OnRsc190aHJlYWRJZDsKLXRo
cmVhZF9sb2NhbCBBdXhBY3QgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjp0bHNfYXV4X2FjdDsKLUF1
eENoayBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OmF1eF9jaGs7Ci0KLS8vIGFjY2VzcyBpcyBwcm90
ZWN0ZWQgYnkgZnV0ZXhMb2NrCi1zdGF0aWMgc3RkOjp1bm9yZGVyZWRfbWFwPGRldGFpbDo6RnV0
ZXg8RGV0ZXJtaW5pc3RpY0F0b21pYz4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
Omxpc3Q8c3RkOjpwYWlyPHVpbnQzMl90LCBib29sKj4+PiBmdXRleFF1ZXVlczsKLQotc3RhdGlj
IHN0ZDo6bXV0ZXggZnV0ZXhMb2NrOwotCi1EZXRlcm1pbmlzdGljU2NoZWR1bGU6OkRldGVybWlu
aXN0aWNTY2hlZHVsZSgKLSAgICBjb25zdCBzdGQ6OmZ1bmN0aW9uPHNpemVfdChzaXplX3QpPiYg
c2NoZWR1bGVyKQotICAgIDogc2NoZWR1bGVyXyhzY2hlZHVsZXIpLCBuZXh0VGhyZWFkSWRfKDEp
LCBzdGVwXygwKSB7Ci0gIGFzc2VydCh0bHNfc2VtID09IG51bGxwdHIpOwotICBhc3NlcnQodGxz
X3NjaGVkID09IG51bGxwdHIpOwotICBhc3NlcnQodGxzX2F1eF9hY3QgPT0gbnVsbHB0cik7Ci0K
LSAgdGxzX3NlbSA9IG5ldyBzZW1fdDsKLSAgc2VtX2luaXQodGxzX3NlbSwgMCwgMSk7Ci0gIHNl
bXNfLnB1c2hfYmFjayh0bHNfc2VtKTsKLQotICB0bHNfc2NoZWQgPSB0aGlzOwotfQotCi1EZXRl
cm1pbmlzdGljU2NoZWR1bGU6On5EZXRlcm1pbmlzdGljU2NoZWR1bGUoKSB7Ci0gIGFzc2VydCh0
bHNfc2NoZWQgPT0gdGhpcyk7Ci0gIGFzc2VydChzZW1zXy5zaXplKCkgPT0gMSk7Ci0gIGFzc2Vy
dChzZW1zX1swXSA9PSB0bHNfc2VtKTsKLSAgYmVmb3JlVGhyZWFkRXhpdCgpOwotfQotCi1zdGQ6
OmZ1bmN0aW9uPHNpemVfdChzaXplX3QpPiBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OnVuaWZvcm0o
dWludDY0X3Qgc2VlZCkgewotICBhdXRvIHJhbmQgPSBzdGQ6Om1ha2Vfc2hhcmVkPHN0ZDo6cmFu
bHV4NDg+KHNlZWQpOwotICByZXR1cm4gW3JhbmRdKHNpemVfdCBudW1BY3RpdmUpIHsKLSAgICBh
dXRvIGRpc3QgPSBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxzaXplX3Q+KDAsIG51bUFj
dGl2ZSAtIDEpOwotICAgIHJldHVybiBkaXN0KCpyYW5kKTsKLSAgfTsKLX0KLQotc3RydWN0IFVu
aWZvcm1TdWJzZXQgewotICBVbmlmb3JtU3Vic2V0KHVpbnQ2NF90IHNlZWQsIHNpemVfdCBzdWJz
ZXRTaXplLCBzaXplX3Qgc3RlcHNCZXR3ZWVuU2VsZWN0KQotICAgICAgOiB1bmlmb3JtXyhEZXRl
cm1pbmlzdGljU2NoZWR1bGU6OnVuaWZvcm0oc2VlZCkpLAotICAgICAgICBzdWJzZXRTaXplXyhz
dWJzZXRTaXplKSwKLSAgICAgICAgc3RlcHNCZXR3ZWVuU2VsZWN0XyhzdGVwc0JldHdlZW5TZWxl
Y3QpLAotICAgICAgICBzdGVwc0xlZnRfKDApIHt9Ci0KLSAgc2l6ZV90IG9wZXJhdG9yKCkoc2l6
ZV90IG51bUFjdGl2ZSkgewotICAgIGFkanVzdFBlcm1TaXplKG51bUFjdGl2ZSk7Ci0gICAgaWYg
KHN0ZXBzTGVmdF8tLSA9PSAwKSB7Ci0gICAgICBzdGVwc0xlZnRfID0gc3RlcHNCZXR3ZWVuU2Vs
ZWN0XyAtIDE7Ci0gICAgICBzaHVmZmxlUHJlZml4KCk7Ci0gICAgfQotICAgIHJldHVybiBwZXJt
X1t1bmlmb3JtXyhzdGQ6Om1pbihudW1BY3RpdmUsIHN1YnNldFNpemVfKSldOwotICB9Ci0KLSBw
cml2YXRlOgotICBzdGQ6OmZ1bmN0aW9uPHNpemVfdChzaXplX3QpPiB1bmlmb3JtXzsKLSAgY29u
c3Qgc2l6ZV90IHN1YnNldFNpemVfOwotICBjb25zdCBzaXplX3Qgc3RlcHNCZXR3ZWVuU2VsZWN0
XzsKLQotICBzaXplX3Qgc3RlcHNMZWZ0XzsKLSAgLy8gb25seSB0aGUgZmlyc3Qgc3Vic2V0U2l6
ZV8gaXMgcHJvcGVybHkgcmFuZG9taXplZAotICBzdGQ6OnZlY3RvcjxzaXplX3Q+IHBlcm1fOwot
Ci0gIHZvaWQgYWRqdXN0UGVybVNpemUoc2l6ZV90IG51bUFjdGl2ZSkgewotICAgIGlmIChwZXJt
Xy5zaXplKCkgPiBudW1BY3RpdmUpIHsKLSAgICAgIHBlcm1fLmVyYXNlKHN0ZDo6cmVtb3ZlX2lm
KHBlcm1fLmJlZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtXy5l
bmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9XShzaXplX3QgeCkgeyBy
ZXR1cm4geCA+PSBudW1BY3RpdmU7IH0pLAotICAgICAgICAgICAgICAgICAgcGVybV8uZW5kKCkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICB3aGlsZSAocGVybV8uc2l6ZSgpIDwgbnVtQWN0aXZlKSB7
Ci0gICAgICAgIHBlcm1fLnB1c2hfYmFjayhwZXJtXy5zaXplKCkpOwotICAgICAgfQotICAgIH0K
LSAgICBhc3NlcnQocGVybV8uc2l6ZSgpID09IG51bUFjdGl2ZSk7Ci0gIH0KLQotICB2b2lkIHNo
dWZmbGVQcmVmaXgoKSB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGQ6Om1pbihwZXJt
Xy5zaXplKCkgLSAxLCBzdWJzZXRTaXplXyk7ICsraSkgewotICAgICAgc2l6ZV90IGogPSB1bmlm
b3JtXyhwZXJtXy5zaXplKCkgLSBpKSArIGk7Ci0gICAgICBzdGQ6OnN3YXAocGVybV9baV0sIHBl
cm1fW2pdKTsKLSAgICB9Ci0gIH0KLX07Ci0KLXN0ZDo6ZnVuY3Rpb248c2l6ZV90KHNpemVfdCk+
Ci1EZXRlcm1pbmlzdGljU2NoZWR1bGU6OnVuaWZvcm1TdWJzZXQodWludDY0X3Qgc2VlZCwgc2l6
ZV90IG4sIHNpemVfdCBtKSB7Ci0gIGF1dG8gZ2VuID0gc3RkOjptYWtlX3NoYXJlZDxVbmlmb3Jt
U3Vic2V0PihzZWVkLCBuLCBtKTsKLSAgcmV0dXJuIFs9XShzaXplX3QgbnVtQWN0aXZlKSB7IHJl
dHVybiAoKmdlbikobnVtQWN0aXZlKTsgfTsKLX0KLQotdm9pZCBEZXRlcm1pbmlzdGljU2NoZWR1
bGU6OmJlZm9yZVNoYXJlZEFjY2VzcygpIHsKLSAgaWYgKHRsc19zZW0pIHsKLSAgICBzZW1fd2Fp
dCh0bHNfc2VtKTsKLSAgfQotfQotCi12b2lkIERldGVybWluaXN0aWNTY2hlZHVsZTo6YWZ0ZXJT
aGFyZWRBY2Nlc3MoKSB7Ci0gIGF1dG8gc2NoZWQgPSB0bHNfc2NoZWQ7Ci0gIGlmICghc2NoZWQp
IHsKLSAgICByZXR1cm47Ci0gIH0KLSAgc2VtX3Bvc3Qoc2NoZWQtPnNlbXNfW3NjaGVkLT5zY2hl
ZHVsZXJfKHNjaGVkLT5zZW1zXy5zaXplKCkpXSk7Ci19Ci0KLXZvaWQgRGV0ZXJtaW5pc3RpY1Nj
aGVkdWxlOjphZnRlclNoYXJlZEFjY2Vzcyhib29sIHN1Y2Nlc3MpIHsKLSAgYXV0byBzY2hlZCA9
IHRsc19zY2hlZDsKLSAgaWYgKCFzY2hlZCkgewotICAgIHJldHVybjsKLSAgfQotICBzY2hlZC0+
Y2FsbEF1eChzdWNjZXNzKTsKLSAgc2VtX3Bvc3Qoc2NoZWQtPnNlbXNfW3NjaGVkLT5zY2hlZHVs
ZXJfKHNjaGVkLT5zZW1zXy5zaXplKCkpXSk7Ci19Ci0KLXNpemVfdCBEZXRlcm1pbmlzdGljU2No
ZWR1bGU6OmdldFJhbmROdW1iZXIoc2l6ZV90IG4pIHsKLSAgaWYgKHRsc19zY2hlZCkgewotICAg
IHJldHVybiB0bHNfc2NoZWQtPnNjaGVkdWxlcl8obik7Ci0gIH0KLSAgcmV0dXJuIFJhbmRvbTo6
cmFuZDMyKCkgJSBuOwotfQotCi1pbnQgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjpnZXRjcHUodW5z
aWduZWQqIGNwdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCog
bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAvKiB1bnVzZWQg
Ki8pIHsKLSAgaWYgKCF0bHNfdGhyZWFkSWQgJiYgdGxzX3NjaGVkKSB7Ci0gICAgYmVmb3JlU2hh
cmVkQWNjZXNzKCk7Ci0gICAgdGxzX3RocmVhZElkID0gdGxzX3NjaGVkLT5uZXh0VGhyZWFkSWRf
Kys7Ci0gICAgYWZ0ZXJTaGFyZWRBY2Nlc3MoKTsKLSAgfQotICBpZiAoY3B1KSB7Ci0gICAgKmNw
dSA9IHRsc190aHJlYWRJZDsKLSAgfQotICBpZiAobm9kZSkgewotICAgICpub2RlID0gdGxzX3Ro
cmVhZElkOwotICB9Ci0gIHJldHVybiAwOwotfQotCi12b2lkIERldGVybWluaXN0aWNTY2hlZHVs
ZTo6c2V0QXV4QWN0KEF1eEFjdCYgYXV4KSB7Ci0gIHRsc19hdXhfYWN0ID0gYXV4OwotfQotCi12
b2lkIERldGVybWluaXN0aWNTY2hlZHVsZTo6c2V0QXV4Q2hrKEF1eENoayYgYXV4KSB7Ci0gIGF1
eF9jaGsgPSBhdXg7Ci19Ci0KLXZvaWQgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjpjbGVhckF1eENo
aygpIHsKLSAgYXV4X2NoayA9IG51bGxwdHI7Ci19Ci0KLXNlbV90KiBEZXRlcm1pbmlzdGljU2No
ZWR1bGU6OmJlZm9yZVRocmVhZENyZWF0ZSgpIHsKLSAgc2VtX3QqIHMgPSBuZXcgc2VtX3Q7Ci0g
IHNlbV9pbml0KHMsIDAsIDApOwotICBiZWZvcmVTaGFyZWRBY2Nlc3MoKTsKLSAgc2Vtc18ucHVz
aF9iYWNrKHMpOwotICBhZnRlclNoYXJlZEFjY2VzcygpOwotICByZXR1cm4gczsKLX0KLQotdm9p
ZCBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OmFmdGVyVGhyZWFkQ3JlYXRlKHNlbV90KiBzZW0pIHsK
LSAgYXNzZXJ0KHRsc19zZW0gPT0gbnVsbHB0cik7Ci0gIGFzc2VydCh0bHNfc2NoZWQgPT0gbnVs
bHB0cik7Ci0gIHRsc19zZW0gPSBzZW07Ci0gIHRsc19zY2hlZCA9IHRoaXM7Ci0gIGJvb2wgc3Rh
cnRlZCA9IGZhbHNlOwotICB3aGlsZSAoIXN0YXJ0ZWQpIHsKLSAgICBiZWZvcmVTaGFyZWRBY2Nl
c3MoKTsKLSAgICBpZiAoYWN0aXZlXy5jb3VudChzdGQ6OnRoaXNfdGhyZWFkOjpnZXRfaWQoKSkg
PT0gMSkgewotICAgICAgc3RhcnRlZCA9IHRydWU7Ci0gICAgfQotICAgIGFmdGVyU2hhcmVkQWNj
ZXNzKCk7Ci0gIH0KLX0KLQotdm9pZCBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OmJlZm9yZVRocmVh
ZEV4aXQoKSB7Ci0gIGFzc2VydCh0bHNfc2NoZWQgPT0gdGhpcyk7Ci0gIGJlZm9yZVNoYXJlZEFj
Y2VzcygpOwotICBzZW1zXy5lcmFzZShzdGQ6OmZpbmQoc2Vtc18uYmVnaW4oKSwgc2Vtc18uZW5k
KCksIHRsc19zZW0pKTsKLSAgYWN0aXZlXy5lcmFzZShzdGQ6OnRoaXNfdGhyZWFkOjpnZXRfaWQo
KSk7Ci0gIGlmIChzZW1zXy5zaXplKCkgPiAwKSB7Ci0gICAgRk9MTFlfVEVTVF9EU0NIRURfVkxP
RygiZXhpdGluZyIpOwotICAgIGFmdGVyU2hhcmVkQWNjZXNzKCk7Ci0gIH0KLSAgc2VtX2Rlc3Ry
b3kodGxzX3NlbSk7Ci0gIGRlbGV0ZSB0bHNfc2VtOwotICB0bHNfc2VtID0gbnVsbHB0cjsKLSAg
dGxzX3NjaGVkID0gbnVsbHB0cjsKLSAgdGxzX2F1eF9hY3QgPSBudWxscHRyOwotfQotCi12b2lk
IERldGVybWluaXN0aWNTY2hlZHVsZTo6am9pbihzdGQ6OnRocmVhZCYgY2hpbGQpIHsKLSAgYXV0
byBzY2hlZCA9IHRsc19zY2hlZDsKLSAgaWYgKHNjaGVkKSB7Ci0gICAgYm9vbCBkb25lID0gZmFs
c2U7Ci0gICAgd2hpbGUgKCFkb25lKSB7Ci0gICAgICBiZWZvcmVTaGFyZWRBY2Nlc3MoKTsKLSAg
ICAgIGRvbmUgPSAhc2NoZWQtPmFjdGl2ZV8uY291bnQoY2hpbGQuZ2V0X2lkKCkpOwotICAgICAg
aWYgKGRvbmUpIHsKLSAgICAgICAgRk9MTFlfVEVTVF9EU0NIRURfVkxPRygiam9pbmVkICIgPDwg
c3RkOjpoZXggPDwgY2hpbGQuZ2V0X2lkKCkpOwotICAgICAgfQotICAgICAgYWZ0ZXJTaGFyZWRB
Y2Nlc3MoKTsKLSAgICB9Ci0gIH0KLSAgY2hpbGQuam9pbigpOwotfQotCi12b2lkIERldGVybWlu
aXN0aWNTY2hlZHVsZTo6Y2FsbEF1eChib29sIHN1Y2Nlc3MpIHsKLSAgKytzdGVwXzsKLSAgaWYg
KHRsc19hdXhfYWN0KSB7Ci0gICAgdGxzX2F1eF9hY3Qoc3VjY2Vzcyk7Ci0gICAgdGxzX2F1eF9h
Y3QgPSBudWxscHRyOwotICB9Ci0gIGlmIChhdXhfY2hrKSB7Ci0gICAgYXV4X2NoayhzdGVwXyk7
Ci0gIH0KLX0KLQotdm9pZCBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OnBvc3Qoc2VtX3QqIHNlbSkg
ewotICBiZWZvcmVTaGFyZWRBY2Nlc3MoKTsKLSAgc2VtX3Bvc3Qoc2VtKTsKLSAgRk9MTFlfVEVT
VF9EU0NIRURfVkxPRygic2VtX3Bvc3QoIiA8PCBzZW0gPDwgIikiKTsKLSAgYWZ0ZXJTaGFyZWRB
Y2Nlc3MoKTsKLX0KLQotYm9vbCBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OnRyeVdhaXQoc2VtX3Qq
IHNlbSkgewotICBiZWZvcmVTaGFyZWRBY2Nlc3MoKTsKLSAgaW50IHJ2ID0gc2VtX3RyeXdhaXQo
c2VtKTsKLSAgaW50IGUgPSBydiA9PSAwID8gMCA6IGVycm5vOwotICBGT0xMWV9URVNUX0RTQ0hF
RF9WTE9HKCJzZW1fdHJ5d2FpdCgiIDw8IHNlbSA8PCAiKSA9ICIgPDwgcnYKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIGVycm5vPSIgPDwgZSk7Ci0gIGFmdGVy
U2hhcmVkQWNjZXNzKCk7Ci0gIGlmIChydiA9PSAwKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0g
ZWxzZSB7Ci0gICAgYXNzZXJ0KGUgPT0gRUFHQUlOKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LX0KLQotdm9pZCBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OndhaXQoc2VtX3QqIHNlbSkgewotICB3
aGlsZSAoIXRyeVdhaXQoc2VtKSkgewotICAgIC8vIHdlJ3JlIG5vdCBidXN5IHdhaXRpbmcgYmVj
YXVzZSB0aGlzIGlzIGEgZGV0ZXJtaW5pc3RpYyBzY2hlZHVsZQotICB9Ci19Ci19Ci19Ci0KLW5h
bWVzcGFjZSBmb2xseSB7Ci1uYW1lc3BhY2UgZGV0YWlsIHsKLQotdXNpbmcgbmFtZXNwYWNlIHRl
c3Q7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOjpjaHJvbm87Ci0KLXRlbXBsYXRlIDw+Ci1GdXRleFJl
c3VsdCBGdXRleDxEZXRlcm1pbmlzdGljQXRvbWljPjo6ZnV0ZXhXYWl0SW1wbCgKLSAgICB1aW50
MzJfdCBleHBlY3RlZCwKLSAgICB0aW1lX3BvaW50PHN5c3RlbV9jbG9jaz4qIGFic1N5c3RlbVRp
bWVvdXQsCi0gICAgdGltZV9wb2ludDxzdGVhZHlfY2xvY2s+KiBhYnNTdGVhZHlUaW1lb3V0LAot
ICAgIHVpbnQzMl90IHdhaXRNYXNrKSB7Ci0gIGJvb2wgaGFzVGltZW91dCA9IGFic1N5c3RlbVRp
bWVvdXQgIT0gbnVsbHB0ciB8fCBhYnNTdGVhZHlUaW1lb3V0ICE9IG51bGxwdHI7Ci0gIGJvb2wg
YXdva2VuID0gZmFsc2U7Ci0gIEZ1dGV4UmVzdWx0IHJlc3VsdCA9IEZ1dGV4UmVzdWx0OjpBV09L
RU47Ci0KLSAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjpiZWZvcmVTaGFyZWRBY2Nlc3MoKTsKLSAg
Rk9MTFlfVEVTVF9EU0NIRURfVkxPRyh0aGlzIDw8ICIuZnV0ZXhXYWl0KCIgPDwgc3RkOjpoZXgg
PDwgZXhwZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIsIC4uLCAiIDw8
IHN0ZDo6aGV4IDw8IHdhaXRNYXNrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAi
KSBiZWdpbm5pbmcuLiIpOwotICBmdXRleExvY2subG9jaygpOwotICBpZiAodGhpcy0+ZGF0YSA9
PSBleHBlY3RlZCkgewotICAgIGF1dG8mIHF1ZXVlID0gZnV0ZXhRdWV1ZXNbdGhpc107Ci0gICAg
cXVldWUuZW1wbGFjZV9iYWNrKHdhaXRNYXNrLCAmYXdva2VuKTsKLSAgICBhdXRvIG91cnMgPSBx
dWV1ZS5lbmQoKTsKLSAgICBvdXJzLS07Ci0gICAgd2hpbGUgKCFhd29rZW4pIHsKLSAgICAgIGZ1
dGV4TG9jay51bmxvY2soKTsKLSAgICAgIERldGVybWluaXN0aWNTY2hlZHVsZTo6YWZ0ZXJTaGFy
ZWRBY2Nlc3MoKTsKLSAgICAgIERldGVybWluaXN0aWNTY2hlZHVsZTo6YmVmb3JlU2hhcmVkQWNj
ZXNzKCk7Ci0gICAgICBmdXRleExvY2subG9jaygpOwotCi0gICAgICAvLyBTaW11bGF0ZSBzcHVy
aW91cyB3YWtlLXVwcywgdGltZW91dHMgZWFjaCB0aW1lIHdpdGgKLSAgICAgIC8vIGEgMTAlIHBy
b2JhYmlsaXR5IGlmIHdlIGhhdmVuJ3QgYmVlbiB3b2tlbiB1cCBhbHJlYWR5Ci0gICAgICBpZiAo
IWF3b2tlbiAmJiBoYXNUaW1lb3V0ICYmCi0gICAgICAgICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxl
OjpnZXRSYW5kTnVtYmVyKDEwMCkgPCAxMCkgewotICAgICAgICBhc3NlcnQoZnV0ZXhRdWV1ZXMu
Y291bnQodGhpcykgIT0gMCAmJiAmZnV0ZXhRdWV1ZXNbdGhpc10gPT0gJnF1ZXVlKTsKLSAgICAg
ICAgcXVldWUuZXJhc2Uob3Vycyk7Ci0gICAgICAgIGlmIChxdWV1ZS5lbXB0eSgpKSB7Ci0gICAg
ICAgICAgZnV0ZXhRdWV1ZXMuZXJhc2UodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2lt
dWxhdGUgRVRJTUVET1VUIDkwJSBvZiB0aGUgdGltZSBhbmQgb3RoZXIgZmFpbHVyZXMKLSAgICAg
ICAgLy8gcmVtYWluaW5nIHRpbWUKLSAgICAgICAgcmVzdWx0ID0gRGV0ZXJtaW5pc3RpY1NjaGVk
dWxlOjpnZXRSYW5kTnVtYmVyKDEwMCkgPj0gMTAKLSAgICAgICAgICAgICAgICAgICAgID8gRnV0
ZXhSZXN1bHQ6OlRJTUVET1VUCi0gICAgICAgICAgICAgICAgICAgICA6IEZ1dGV4UmVzdWx0OjpJ
TlRFUlJVUFRFRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2Ugewot
ICAgIHJlc3VsdCA9IEZ1dGV4UmVzdWx0OjpWQUxVRV9DSEFOR0VEOwotICB9Ci0gIGZ1dGV4TG9j
ay51bmxvY2soKTsKLQotICBjaGFyIGNvbnN0KiByZXN1bHRTdHIgPSAiPyI7Ci0gIHN3aXRjaCAo
cmVzdWx0KSB7Ci0gICAgY2FzZSBGdXRleFJlc3VsdDo6QVdPS0VOOgotICAgICAgcmVzdWx0U3Ry
ID0gIkFXT0tFTiI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZ1dGV4UmVzdWx0OjpUSU1FRE9V
VDoKLSAgICAgIHJlc3VsdFN0ciA9ICJUSU1FRE9VVCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNl
IEZ1dGV4UmVzdWx0OjpJTlRFUlJVUFRFRDoKLSAgICAgIHJlc3VsdFN0ciA9ICJJTlRFUlJVUFRF
RCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZ1dGV4UmVzdWx0OjpWQUxVRV9DSEFOR0VEOgot
ICAgICAgcmVzdWx0U3RyID0gIlZBTFVFX0NIQU5HRUQiOwotICAgICAgYnJlYWs7Ci0gIH0KLSAg
Rk9MTFlfVEVTVF9EU0NIRURfVkxPRyh0aGlzIDw8ICIuZnV0ZXhXYWl0KCIgPDwgc3RkOjpoZXgg
PDwgZXhwZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIsIC4uLCAiIDw8
IHN0ZDo6aGV4IDw8IHdhaXRNYXNrIDw8ICIpIC0+ICIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDw8IHJlc3VsdFN0cik7Ci0gIERldGVybWluaXN0aWNTY2hlZHVsZTo6YWZ0ZXJTaGFy
ZWRBY2Nlc3MoKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGUgPD4KLWludCBGdXRl
eDxEZXRlcm1pbmlzdGljQXRvbWljPjo6ZnV0ZXhXYWtlKGludCBjb3VudCwgdWludDMyX3Qgd2Fr
ZU1hc2spIHsKLSAgaW50IHJ2ID0gMDsKLSAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjpiZWZvcmVT
aGFyZWRBY2Nlc3MoKTsKLSAgZnV0ZXhMb2NrLmxvY2soKTsKLSAgaWYgKGZ1dGV4UXVldWVzLmNv
dW50KHRoaXMpID4gMCkgewotICAgIGF1dG8mIHF1ZXVlID0gZnV0ZXhRdWV1ZXNbdGhpc107Ci0g
ICAgYXV0byBpdGVyID0gcXVldWUuYmVnaW4oKTsKLSAgICB3aGlsZSAoaXRlciAhPSBxdWV1ZS5l
bmQoKSAmJiBydiA8IGNvdW50KSB7Ci0gICAgICBhdXRvIGN1ciA9IGl0ZXIrKzsKLSAgICAgIGlm
ICgoY3VyLT5maXJzdCAmIHdha2VNYXNrKSAhPSAwKSB7Ci0gICAgICAgICooY3VyLT5zZWNvbmQp
ID0gdHJ1ZTsKLSAgICAgICAgcnYrKzsKLSAgICAgICAgcXVldWUuZXJhc2UoY3VyKTsKLSAgICAg
IH0KLSAgICB9Ci0gICAgaWYgKHF1ZXVlLmVtcHR5KCkpIHsKLSAgICAgIGZ1dGV4UXVldWVzLmVy
YXNlKHRoaXMpOwotICAgIH0KLSAgfQotICBmdXRleExvY2sudW5sb2NrKCk7Ci0gIEZPTExZX1RF
U1RfRFNDSEVEX1ZMT0codGhpcyA8PCAiLmZ1dGV4V2FrZSgiIDw8IGNvdW50IDw8ICIsICIgPDwg
c3RkOjpoZXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHdha2VNYXNrIDw8ICIp
IC0+ICIgPDwgcnYpOwotICBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OmFmdGVyU2hhcmVkQWNjZXNz
KCk7Ci0gIHJldHVybiBydjsKLX0KLX0KLQotdGVtcGxhdGUgPD4KLUNhY2hlTG9jYWxpdHkgY29u
c3QmIENhY2hlTG9jYWxpdHk6OnN5c3RlbTx0ZXN0OjpEZXRlcm1pbmlzdGljQXRvbWljPigpIHsK
LSAgc3RhdGljIENhY2hlTG9jYWxpdHkgY2FjaGUoQ2FjaGVMb2NhbGl0eTo6dW5pZm9ybSgxNikp
OwotICByZXR1cm4gY2FjaGU7Ci19Ci0KLXRlbXBsYXRlIDw+Ci1HZXRjcHU6OkZ1bmMgQWNjZXNz
U3ByZWFkZXI8dGVzdDo6RGV0ZXJtaW5pc3RpY0F0b21pYz46OnBpY2tHZXRjcHVGdW5jKCkgewot
ICByZXR1cm4gJmRldGFpbDo6RGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjpnZXRjcHU7Ci19Ci19CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS90ZXN0
L0RldGVybWluaXN0aWNTY2hlZHVsZS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZm9sbHkvdGVzdC9EZXRlcm1pbmlzdGljU2NoZWR1bGUuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOGYxZjQyODMxMWM4ZjA2ODBlZjJlMDY2ODRkZWIzMGExZGZkMWJlMC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS90ZXN0L0RldGVybWluaXN0aWNTY2hlZHVs
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAx
NyBGYWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5z
ZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNo
ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBw
bGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
LAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGFzc2VydC5o
PgotI2luY2x1ZGUgPGJvb3N0L25vbmNvcHlhYmxlLmhwcD4KLSNpbmNsdWRlIDxlcnJuby5oPgot
I2luY2x1ZGUgPGdsb2cvbG9nZ2luZy5oPgotI2luY2x1ZGUgPGF0b21pYz4KLSNpbmNsdWRlIDxm
dW5jdGlvbmFsPgotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHRocmVhZD4KLSNpbmNsdWRl
IDx1bm9yZGVyZWRfc2V0PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgPGZvbGx5L1Nj
b3BlR3VhcmQuaD4KLSNpbmNsdWRlIDxmb2xseS9jb25jdXJyZW5jeS9DYWNoZUxvY2FsaXR5Lmg+
Ci0jaW5jbHVkZSA8Zm9sbHkvZGV0YWlsL0F0b21pY1V0aWxzLmg+Ci0jaW5jbHVkZSA8Zm9sbHkv
ZGV0YWlsL0Z1dGV4Lmg+Ci0jaW5jbHVkZSA8Zm9sbHkvcG9ydGFiaWxpdHkvU2VtYXBob3JlLmg+
Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci1uYW1lc3BhY2UgdGVzdCB7Ci0KLS8vIFRoaXMgaXMgdWds
eSwgYnV0IGJldHRlciBwZXJmIGZvciBEZXRlcm1pbmlzdGljQXRvbWljIHRyYW5zbGF0ZXMKLS8v
IGRpcmVjdGx5IHRvIG1vcmUgc3RhdGVzIGV4cGxvcmVkIGFuZCB0ZXN0ZWQKLSNkZWZpbmUgRk9M
TFlfVEVTVF9EU0NIRURfVkxPRyguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIGlmIChmYWxzZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgIFZMT0coMikgPDwgc3RkOjpoZXggPDwgc3RkOjp0aGlz
X3RocmVhZDo6Z2V0X2lkKCkgPDwgIjogIiBcCi0gICAgICAgICAgICAgIDw8IF9fVkFfQVJHU19f
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGls
ZSAoZmFsc2UpCi0KLS8qIHNpZ25hdHVyZXMgb2YgdXNlci1kZWZpbmVkIGF1eGlsaWFyeSBmdW5j
dGlvbnMgKi8KLXVzaW5nIEF1eEFjdCA9IHN0ZDo6ZnVuY3Rpb248dm9pZChib29sKT47Ci11c2lu
ZyBBdXhDaGsgPSBzdGQ6OmZ1bmN0aW9uPHZvaWQodWludDY0X3QpPjsKLQotLyoqCi0gKiBEZXRl
cm1pbmlzdGljU2NoZWR1bGUgY29vcmRpbmF0ZXMgdGhlIGludGVyLXRocmVhZCBjb21tdW5pY2F0
aW9uIG9mIGEKLSAqIHNldCBvZiB0aHJlYWRzIHVuZGVyIHRlc3QsIHNvIHRoYXQgZGVzcGl0ZSBj
b25jdXJyZW5jeSB0aGUgZXhlY3V0aW9uIGlzCi0gKiB0aGUgc2FtZSBldmVyeSB0aW1lLiAgSXQg
d29ya3MgYnkgc3Rhc2hpbmcgYSByZWZlcmVuY2UgdG8gdGhlIHNjaGVkdWxlCi0gKiBpbiBhIHRo
cmVhZC1sb2NhbCB2YXJpYWJsZSwgdGhlbiBibG9ja2luZyBhbGwgYnV0IG9uZSB0aHJlYWQgYXQg
YSB0aW1lLgotICoKLSAqIEluIG9yZGVyIGZvciBEZXRlcm1pbmlzdGljU2NoZWR1bGUgdG8gd29y
aywgaXQgbmVlZHMgdG8gaW50ZXJjZXB0Ci0gKiBhbGwgaW50ZXItdGhyZWFkIGNvbW11bmljYXRp
b24uICBUbyBkbyB0aGlzIHlvdSBzaG91bGQgdXNlCi0gKiBEZXRlcm1pbmlzdGljQXRvbWljPFQ+
IGluc3RlYWQgb2Ygc3RkOjphdG9taWM8VD4sIGNyZWF0ZSB0aHJlYWRzCi0gKiB1c2luZyBEZXRl
cm1pbmlzdGljU2NoZWR1bGU6OnRocmVhZCgpIGluc3RlYWQgb2YgdGhlIHN0ZDo6dGhyZWFkCi0g
KiBjb25zdHJ1Y3RvciwgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjpqb2luKHRocikgaW5zdGVhZCBv
ZiB0aHIuam9pbigpLAotICogYW5kIGFjY2VzcyBzZW1hcGhvcmVzIHZpYSB0aGUgaGVscGVyIGZ1
bmN0aW9ucyBpbiBEZXRlcm1pbmlzdGljU2NoZWR1bGUuCi0gKiBMb2NrcyBhcmUgbm90IHlldCBz
dXBwb3J0ZWQsIGFsdGhvdWdoIHRoZXkgd291bGQgYmUgZWFzeSB0byBhZGQgd2l0aAotICogdGhl
IHNhbWUgc3RyYXRlZ3kgYXMgdGhlIG1hcHBpbmcgb2Ygc2VtX3dhaXQuCi0gKgotICogVGhlIGFj
dHVhbCBzY2hlZHVsZSBpcyBkZWZpbmVkIGJ5IGEgZnVuY3Rpb24gZnJvbSBuIC0+IFswLG4pLiBB
dAotICogZWFjaCBzdGVwLCB0aGUgZnVuY3Rpb24gd2lsbCBiZSBnaXZlbiB0aGUgbnVtYmVyIG9m
IGFjdGl2ZSB0aHJlYWRzCi0gKiAobiksIGFuZCBpdCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUg
dGhyZWFkIHRoYXQgc2hvdWxkIGJlIHJ1biBuZXh0LgotICogSW52b2NhdGlvbnMgb2YgdGhlIHNj
aGVkdWxlciBmdW5jdGlvbiB3aWxsIGJlIHNlcmlhbGl6ZWQsIGJ1dCB3aWxsCi0gKiBvY2N1ciBm
cm9tIG11bHRpcGxlIHRocmVhZHMuICBBIGdvb2Qgc3RhcnRpbmcgc2NoZWR1bGUgaXMgdW5pZm9y
bSgwKS4KLSAqLwotY2xhc3MgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlIDogYm9vc3Q6Om5vbmNvcHlh
YmxlIHsKLSBwdWJsaWM6Ci0gIC8qKgotICAgKiBBcnJhbmdlcyBmb3IgdGhlIGN1cnJlbnQgdGhy
ZWFkIChhbmQgYWxsIHRocmVhZHMgY3JlYXRlZCBieQotICAgKiBEZXRlcm1pbmlzdGljU2NoZWR1
bGU6OnRocmVhZCBvbiBhIHRocmVhZCBwYXJ0aWNpcGF0aW5nIGluIHRoaXMKLSAgICogc2NoZWR1
bGUpIHRvIHBhcnRpY2lwYXRlIGluIGEgZGV0ZXJtaW5pc3RpYyBzY2hlZHVsZS4KLSAgICovCi0g
IGV4cGxpY2l0IERldGVybWluaXN0aWNTY2hlZHVsZSgKLSAgICAgIGNvbnN0IHN0ZDo6ZnVuY3Rp
b248c2l6ZV90KHNpemVfdCk+JiBzY2hlZHVsZXIpOwotCi0gIC8qKiBDb21wbGV0ZXMgdGhlIHNj
aGVkdWxlLiAqLwotICB+RGV0ZXJtaW5pc3RpY1NjaGVkdWxlKCk7Ci0KLSAgLyoqCi0gICAqIFJl
dHVybnMgYSBzY2hlZHVsaW5nIGZ1bmN0aW9uIHRoYXQgcmFuZG9tbHkgY2hvb3NlcyBvbmUgb2Yg
dGhlCi0gICAqIHJ1bm5hYmxlIHRocmVhZHMgYXQgZWFjaCBzdGVwLCB3aXRoIG5vIGhpc3Rvcnku
ICBUaGlzIGltcGxlbWVudHMKLSAgICogYSBzY2hlZHVsZSB0aGF0IGlzIGVxdWl2YWxlbnQgdG8g
b25lIGluIHdoaWNoIHRoZSBzdGVwcyBiZXR3ZWVuCi0gICAqIGludGVyLXRocmVhZCBjb21tdW5p
Y2F0aW9uIGFyZSByYW5kb20gdmFyaWFibGVzIGZvbGxvd2luZyBhIHBvaXNzb24KLSAgICogZGlz
dHJpYnV0aW9uLgotICAgKi8KLSAgc3RhdGljIHN0ZDo6ZnVuY3Rpb248c2l6ZV90KHNpemVfdCk+
IHVuaWZvcm0odWludDY0X3Qgc2VlZCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBzY2hlZHVs
aW5nIGZ1bmN0aW9uIHRoYXQgY2hvb3NlcyBhIHN1YnNldCBvZiB0aGUgYWN0aXZlCi0gICAqIHRo
cmVhZHMgYW5kIHJhbmRvbWx5IGNob29zZXMgYSBtZW1iZXIgb2YgdGhlIHN1YnNldCBhcyB0aGUg
bmV4dAotICAgKiBydW5uYWJsZSB0aHJlYWQuICBUaGUgc3Vic2V0IGlzIGNob3NlbiB3aXRoIHNp
emUgbiwgYW5kIHRoZSBjaG9pY2UKLSAgICogaXMgbWFkZSBldmVyeSBtIHN0ZXBzLgotICAgKi8K
LSAgc3RhdGljIHN0ZDo6ZnVuY3Rpb248c2l6ZV90KHNpemVfdCk+Ci0gIHVuaWZvcm1TdWJzZXQo
dWludDY0X3Qgc2VlZCwgc2l6ZV90IG4gPSAyLCBzaXplX3QgbSA9IDY0KTsKLQotICAvKiogT2J0
YWlucyBwZXJtaXNzaW9uIGZvciB0aGUgY3VycmVudCB0aHJlYWQgdG8gcGVyZm9ybSBpbnRlci10
aHJlYWQKLSAgICogIGNvbW11bmljYXRpb24uICovCi0gIHN0YXRpYyB2b2lkIGJlZm9yZVNoYXJl
ZEFjY2VzcygpOwotCi0gIC8qKiBSZWxlYXNlcyBwZXJtaXNzaW9uIGZvciB0aGUgY3VycmVudCB0
aHJlYWQgdG8gcGVyZm9ybSBpbnRlci10aHJlYWQKLSAgICogIGNvbW11bmljYXRpb24uICovCi0g
IHN0YXRpYyB2b2lkIGFmdGVyU2hhcmVkQWNjZXNzKCk7Ci0KLSAgLyoqIENhbGxzIGEgdXNlci1k
ZWZpbmVkIGF1eGlsaWFyeSBmdW5jdGlvbiBpZiBhbnksIGFuZCByZWxlYXNlcwotICAgKiAgcGVy
bWlzc2lvbiBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkIHRvIHBlcmZvcm0gaW50ZXItdGhyZWFkCi0g
ICAqICBjb21tdW5pY2F0aW9uLiBUaGUgYm9vbCBwYXJhbWV0ZXIgaW5kaWNhdGVzIHRoZSBzdWNj
ZXNzIG9mIHRoZQotICAgKiAgc2hhcmVkIGFjY2VzcyAoaWYgY29uZGl0aW9uYWwsIHRydWUgb3Ro
ZXJ3aXNlKS4gKi8KLSAgc3RhdGljIHZvaWQgYWZ0ZXJTaGFyZWRBY2Nlc3MoYm9vbCBzdWNjZXNz
KTsKLQotICAvKiogTGF1bmNoZXMgYSB0aHJlYWQgdGhhdCB3aWxsIHBhcnRpY2lwYXRlIGluIHRo
ZSBzYW1lIGRldGVybWluaXN0aWMKLSAgICogIHNjaGVkdWxlIGFzIHRoZSBjdXJyZW50IHRocmVh
ZC4gKi8KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmMsIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gIHN0
YXRpYyBpbmxpbmUgc3RkOjp0aHJlYWQgdGhyZWFkKEZ1bmMmJiBmdW5jLCBBcmdzJiYuLi4gYXJn
cykgewotICAgIC8vIFRPRE86IG1heWJlIGZ1dHVyZSB2ZXJzaW9ucyBvZiBnY2Mgd2lsbCBhbGxv
dyBmb3J3YXJkaW5nIHRvIHRocmVhZAotICAgIGF1dG8gc2NoZWQgPSB0bHNfc2NoZWQ7Ci0gICAg
YXV0byBzZW0gPSBzY2hlZCA/IHNjaGVkLT5iZWZvcmVUaHJlYWRDcmVhdGUoKSA6IG51bGxwdHI7
Ci0gICAgYXV0byBjaGlsZCA9IHN0ZDo6dGhyZWFkKFs9XShBcmdzLi4uIGEpIHsKLSAgICAgIGlm
IChzY2hlZCkgewotICAgICAgICBzY2hlZC0+YWZ0ZXJUaHJlYWRDcmVhdGUoc2VtKTsKLSAgICAg
ICAgYmVmb3JlU2hhcmVkQWNjZXNzKCk7Ci0gICAgICAgIEZPTExZX1RFU1RfRFNDSEVEX1ZMT0co
InJ1bm5pbmciKTsKLSAgICAgICAgYWZ0ZXJTaGFyZWRBY2Nlc3MoKTsKLSAgICAgIH0KLSAgICAg
IFNDT1BFX0VYSVQgewotICAgICAgICBpZiAoc2NoZWQpIHsKLSAgICAgICAgICBzY2hlZC0+YmVm
b3JlVGhyZWFkRXhpdCgpOwotICAgICAgICB9Ci0gICAgICB9OwotICAgICAgZnVuYyhhLi4uKTsK
LSAgICB9LCBhcmdzLi4uKTsKLSAgICBpZiAoc2NoZWQpIHsKLSAgICAgIGJlZm9yZVNoYXJlZEFj
Y2VzcygpOwotICAgICAgc2NoZWQtPmFjdGl2ZV8uaW5zZXJ0KGNoaWxkLmdldF9pZCgpKTsKLSAg
ICAgIEZPTExZX1RFU1RfRFNDSEVEX1ZMT0coImZvcmtlZCAiIDw8IHN0ZDo6aGV4IDw8IGNoaWxk
LmdldF9pZCgpKTsKLSAgICAgIGFmdGVyU2hhcmVkQWNjZXNzKCk7Ci0gICAgfQotICAgIHJldHVy
biBjaGlsZDsKLSAgfQotCi0gIC8qKiBDYWxscyBjaGlsZC5qb2luKCkgYXMgcGFydCBvZiBhIGRl
dGVybWluaXN0aWMgc2NoZWR1bGUuICovCi0gIHN0YXRpYyB2b2lkIGpvaW4oc3RkOjp0aHJlYWQm
IGNoaWxkKTsKLQotICAvKiogQ2FsbHMgc2VtX3Bvc3Qoc2VtKSBhcyBwYXJ0IG9mIGEgZGV0ZXJt
aW5pc3RpYyBzY2hlZHVsZS4gKi8KLSAgc3RhdGljIHZvaWQgcG9zdChzZW1fdCogc2VtKTsKLQot
ICAvKiogQ2FsbHMgc2VtX3RyeXdhaXQoc2VtKSBhcyBwYXJ0IG9mIGEgZGV0ZXJtaW5pc3RpYyBz
Y2hlZHVsZSwgcmV0dXJuaW5nCi0gICAqICB0cnVlIG9uIHN1Y2Nlc3MgYW5kIGZhbHNlIG9uIHRy
YW5zaWVudCBmYWlsdXJlLiAqLwotICBzdGF0aWMgYm9vbCB0cnlXYWl0KHNlbV90KiBzZW0pOwot
Ci0gIC8qKiBDYWxscyBzZW1fd2FpdChzZW0pIGFzIHBhcnQgb2YgYSBkZXRlcm1pbmlzdGljIHNj
aGVkdWxlLiAqLwotICBzdGF0aWMgdm9pZCB3YWl0KHNlbV90KiBzZW0pOwotCi0gIC8qKiBVc2Vk
IHNjaGVkdWxlcl8gdG8gZ2V0IGEgcmFuZG9tIG51bWJlciBiL3cgWzAsIG4pLiBJZiB0bHNfc2No
ZWQgaXMKLSAgICogIG5vdCBzZXQtdXAgaXQgZmFsbHMgYmFjayB0byBzdGQ6OnJhbmQoKSAqLwot
ICBzdGF0aWMgc2l6ZV90IGdldFJhbmROdW1iZXIoc2l6ZV90IG4pOwotCi0gIC8qKiBEZXRlcm1p
bmlzdGljIGltcGxlbWVuY2F0aW9uIG9mIGdldGNwdSAqLwotICBzdGF0aWMgaW50IGdldGNwdSh1
bnNpZ25lZCogY3B1LCB1bnNpZ25lZCogbm9kZSwgdm9pZCogdW51c2VkKTsKLQotICAvKiogU2V0
cyB1cCBhIHRocmVhZC1zcGVjaWZpYyBmdW5jdGlvbiBmb3IgY2FsbCBpbW1lZGlhdGVseSBhZnRl
cgotICAgKiAgdGhlIG5leHQgc2hhcmVkIGFjY2VzcyBieSB0aGUgdGhyZWFkIGZvciBtYW5hZ2lu
ZyBhdXhpbGlhcnkKLSAgICogIGRhdGEuIFRoZSBmdW5jdGlvbiB0YWtlcyBhIGJvb2wgcGFyYW1l
dGVyIHRoYXQgaW5kaWNhdGVzIHRoZQotICAgKiAgc3VjY2VzcyBvZiB0aGUgc2hhcmVkIGFjY2Vz
cyAoaWYgaXQgaXMgY29uZGl0aW9uYWwsIHRydWUKLSAgICogIG90aGVyd2lzZSkuIFRoZSBmdW5j
dGlvbiBpcyBjbGVhcmVkIGFmdGVyIG9uZSB1c2UuICovCi0gIHN0YXRpYyB2b2lkIHNldEF1eEFj
dChBdXhBY3QmIGF1eCk7Ci0KLSAgLyoqIFNldHMgdXAgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQg
YWZ0ZXIgZXZlcnkgc3Vic2VxdWVudCBzaGFyZWQKLSAgICogIGFjY2VzcyAodW50aWwgY2xlYXJB
dXhDaGsoKSBpcyBjYWxsZWQpIGZvciBjaGVja2luZyBnbG9iYWwKLSAgICogIGludmFyaWFudHMg
YW5kIGxvZ2dpbmcuIFRoZSBmdW5jdGlvbiB0YWtlcyBhIHVpbnQ2NF90IHBhcmFtZXRlcgotICAg
KiAgdGhhdCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBzaGFyZWQgYWNjZXNzZXMgc28gZmFyLiAq
LwotICBzdGF0aWMgdm9pZCBzZXRBdXhDaGsoQXV4Q2hrJiBhdXgpOwotCi0gIC8qKiBDbGVhcnMg
dGhlIGZ1bmN0aW9uIHNldCBieSBzZXRBdXhDaGsgKi8KLSAgc3RhdGljIHZvaWQgY2xlYXJBdXhD
aGsoKTsKLQotIHByaXZhdGU6Ci0gIHN0YXRpYyBGT0xMWV9UTFMgc2VtX3QqIHRsc19zZW07Ci0g
IHN0YXRpYyBGT0xMWV9UTFMgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlKiB0bHNfc2NoZWQ7Ci0gIHN0
YXRpYyBGT0xMWV9UTFMgdW5zaWduZWQgdGxzX3RocmVhZElkOwotICBzdGF0aWMgdGhyZWFkX2xv
Y2FsIEF1eEFjdCB0bHNfYXV4X2FjdDsKLSAgc3RhdGljIEF1eENoayBhdXhfY2hrOwotCi0gIHN0
ZDo6ZnVuY3Rpb248c2l6ZV90KHNpemVfdCk+IHNjaGVkdWxlcl87Ci0gIHN0ZDo6dmVjdG9yPHNl
bV90Kj4gc2Vtc187Ci0gIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnRocmVhZDo6aWQ+IGFjdGl2
ZV87Ci0gIHVuc2lnbmVkIG5leHRUaHJlYWRJZF87Ci0gIC8qIHN0ZXBfIGtlZXBzIGNvdW50IG9m
IHNoYXJlZCBhY2Nlc3NlcyB0aGF0IGNvcnJlc3BvbmQgdG8gdXNlcgotICAgKiBzeW5jaHJvbml6
YXRpb24gc3RlcHMgKGF0b21pYyBhY2Nlc3NlcyBmb3Igbm93KS4KLSAgICogVGhlIHJlYXNvbiBm
b3Iga2VlcGluZyB0cmFjayBvZiB0aGlzIGhlcmUgYW5kIG5vdCBqdXN0IHdpdGgKLSAgICogYXV4
aWxpYXJ5IGRhdGEgaXMgdG8gcHJvdmlkZSB1c2VycyB3aXRoIHdhcm5pbmcgc2lnbnMgKGUuZy4s
Ci0gICAqIHNraXBwZWQgc3RlcHMpIGlmIHRoZXkgaW5hZHZlcnRlbnRseSBmb3JnZXQgdG8gc2V0
IHVwIGF1eAotICAgKiBmdW5jdGlvbnMgZm9yIHNvbWUgc2hhcmVkIGFjY2Vzc2VzLiAqLwotICB1
aW50NjRfdCBzdGVwXzsKLQotICBzZW1fdCogYmVmb3JlVGhyZWFkQ3JlYXRlKCk7Ci0gIHZvaWQg
YWZ0ZXJUaHJlYWRDcmVhdGUoc2VtX3QqKTsKLSAgdm9pZCBiZWZvcmVUaHJlYWRFeGl0KCk7Ci0g
IC8qKiBDYWxscyB1c2VyLWRlZmluZWQgYXV4aWxpYXJ5IGZ1bmN0aW9uIChpZiBhbnkpICovCi0g
IHZvaWQgY2FsbEF1eChib29sKTsKLX07Ci0KLS8qKgotICogRGV0ZXJtaW5pc3RpY0F0b21pYzxU
PiBpcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgc3RkOjphdG9taWM8VD4gdGhhdAotICogY29vcGVy
YXRlcyB3aXRoIERldGVybWluaXN0aWNTY2hlZHVsZS4KLSAqLwotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci1zdHJ1Y3QgRGV0ZXJtaW5pc3RpY0F0b21pYyB7Ci0gIHN0ZDo6YXRvbWljPFQ+IGRhdGE7
Ci0KLSAgRGV0ZXJtaW5pc3RpY0F0b21pYygpID0gZGVmYXVsdDsKLSAgfkRldGVybWluaXN0aWNB
dG9taWMoKSA9IGRlZmF1bHQ7Ci0gIERldGVybWluaXN0aWNBdG9taWMoRGV0ZXJtaW5pc3RpY0F0
b21pYzxUPiBjb25zdCYpID0gZGVsZXRlOwotICBEZXRlcm1pbmlzdGljQXRvbWljPFQ+JiBvcGVy
YXRvcj0oRGV0ZXJtaW5pc3RpY0F0b21pYzxUPiBjb25zdCYpID0gZGVsZXRlOwotCi0gIGNvbnN0
ZXhwciAvKiBpbXBsaWNpdCAqLyBEZXRlcm1pbmlzdGljQXRvbWljKFQgdikgbm9leGNlcHQgOiBk
YXRhKHYpIHt9Ci0KLSAgYm9vbCBpc19sb2NrX2ZyZWUoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVy
biBkYXRhLmlzX2xvY2tfZnJlZSgpOyB9Ci0KLSAgYm9vbCBjb21wYXJlX2V4Y2hhbmdlX3N0cm9u
ZygKLSAgICAgIFQmIHYwLAotICAgICAgVCB2MSwKLSAgICAgIHN0ZDo6bWVtb3J5X29yZGVyIG1v
ID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgbm9leGNlcHQgewotICAgIHJldHVybiBjb21w
YXJlX2V4Y2hhbmdlX3N0cm9uZygKLSAgICAgICAgdjAsIHYxLCBtbywgZGV0YWlsOjpkZWZhdWx0
X2ZhaWx1cmVfbWVtb3J5X29yZGVyKG1vKSk7Ci0gIH0KLSAgYm9vbCBjb21wYXJlX2V4Y2hhbmdl
X3N0cm9uZygKLSAgICAgIFQmIHYwLAotICAgICAgVCB2MSwKLSAgICAgIHN0ZDo6bWVtb3J5X29y
ZGVyIHN1Y2Nlc3MsCi0gICAgICBzdGQ6Om1lbW9yeV9vcmRlciBmYWlsdXJlKSBub2V4Y2VwdCB7
Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjpiZWZvcmVTaGFyZWRBY2Nlc3MoKTsKLSAgICBh
dXRvIG9yaWcgPSB2MDsKLSAgICBib29sIHJ2ID0gZGF0YS5jb21wYXJlX2V4Y2hhbmdlX3N0cm9u
Zyh2MCwgdjEsIHN1Y2Nlc3MsIGZhaWx1cmUpOwotICAgIEZPTExZX1RFU1RfRFNDSEVEX1ZMT0co
dGhpcyA8PCAiLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKCIgPDwgc3RkOjpoZXgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPDwgb3JpZyA8PCAiLCAiIDw8IHN0ZDo6aGV4IDw8IHYx
IDw8ICIpIC0+ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcnYgPDwgIiwi
IDw8IHN0ZDo6aGV4IDw8IHYwKTsKLSAgICBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OmFmdGVyU2hh
cmVkQWNjZXNzKHJ2KTsKLSAgICByZXR1cm4gcnY7Ci0gIH0KLQotICBib29sIGNvbXBhcmVfZXhj
aGFuZ2Vfd2VhaygKLSAgICAgIFQmIHYwLAotICAgICAgVCB2MSwKLSAgICAgIHN0ZDo6bWVtb3J5
X29yZGVyIG1vID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgbm9leGNlcHQgewotICAgIHJl
dHVybiBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoCi0gICAgICAgIHYwLCB2MSwgbW8sIGRldGFpbDo6
ZGVmYXVsdF9mYWlsdXJlX21lbW9yeV9vcmRlcihtbykpOwotICB9Ci0gIGJvb2wgY29tcGFyZV9l
eGNoYW5nZV93ZWFrKAotICAgICAgVCYgdjAsCi0gICAgICBUIHYxLAotICAgICAgc3RkOjptZW1v
cnlfb3JkZXIgc3VjY2VzcywKLSAgICAgIHN0ZDo6bWVtb3J5X29yZGVyIGZhaWx1cmUpIG5vZXhj
ZXB0IHsKLSAgICBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OmJlZm9yZVNoYXJlZEFjY2VzcygpOwot
ICAgIGF1dG8gb3JpZyA9IHYwOwotICAgIGJvb2wgcnYgPSBkYXRhLmNvbXBhcmVfZXhjaGFuZ2Vf
d2Vhayh2MCwgdjEsIHN1Y2Nlc3MsIGZhaWx1cmUpOwotICAgIEZPTExZX1RFU1RfRFNDSEVEX1ZM
T0codGhpcyA8PCAiLmNvbXBhcmVfZXhjaGFuZ2Vfd2VhaygiIDw8IHN0ZDo6aGV4IDw8IG9yaWcK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiwgIiA8PCBzdGQ6OmhleCA8PCB2
MSA8PCAiKSAtPiAiIDw8IHJ2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIs
IiA8PCBzdGQ6OmhleCA8PCB2MCk7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjphZnRlclNo
YXJlZEFjY2Vzcyhydik7Ci0gICAgcmV0dXJuIHJ2OwotICB9Ci0KLSAgVCBleGNoYW5nZShUIHYs
IHN0ZDo6bWVtb3J5X29yZGVyIG1vID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgbm9leGNl
cHQgewotICAgIERldGVybWluaXN0aWNTY2hlZHVsZTo6YmVmb3JlU2hhcmVkQWNjZXNzKCk7Ci0g
ICAgVCBydiA9IGRhdGEuZXhjaGFuZ2UodiwgbW8pOwotICAgIEZPTExZX1RFU1RfRFNDSEVEX1ZM
T0codGhpcyA8PCAiLmV4Y2hhbmdlKCIgPDwgc3RkOjpoZXggPDwgdiA8PCAiKSAtPiAiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6aGV4IDw8IHJ2KTsKLSAgICBEZXRl
cm1pbmlzdGljU2NoZWR1bGU6OmFmdGVyU2hhcmVkQWNjZXNzKHRydWUpOwotICAgIHJldHVybiBy
djsKLSAgfQotCi0gIC8qIGltcGxpY2l0ICovIG9wZXJhdG9yIFQoKSBjb25zdCBub2V4Y2VwdCB7
Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjpiZWZvcmVTaGFyZWRBY2Nlc3MoKTsKLSAgICBU
IHJ2ID0gZGF0YTsKLSAgICBGT0xMWV9URVNUX0RTQ0hFRF9WTE9HKHRoaXMgPDwgIigpIC0+ICIg
PDwgc3RkOjpoZXggPDwgcnYpOwotICAgIERldGVybWluaXN0aWNTY2hlZHVsZTo6YWZ0ZXJTaGFy
ZWRBY2Nlc3ModHJ1ZSk7Ci0gICAgcmV0dXJuIHJ2OwotICB9Ci0KLSAgVCBsb2FkKHN0ZDo6bWVt
b3J5X29yZGVyIG1vID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgY29uc3Qgbm9leGNlcHQg
ewotICAgIERldGVybWluaXN0aWNTY2hlZHVsZTo6YmVmb3JlU2hhcmVkQWNjZXNzKCk7Ci0gICAg
VCBydiA9IGRhdGEubG9hZChtbyk7Ci0gICAgRk9MTFlfVEVTVF9EU0NIRURfVkxPRyh0aGlzIDw8
ICIubG9hZCgpIC0+ICIgPDwgc3RkOjpoZXggPDwgcnYpOwotICAgIERldGVybWluaXN0aWNTY2hl
ZHVsZTo6YWZ0ZXJTaGFyZWRBY2Nlc3ModHJ1ZSk7Ci0gICAgcmV0dXJuIHJ2OwotICB9Ci0KLSAg
VCBvcGVyYXRvcj0oVCB2KSBub2V4Y2VwdCB7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjpi
ZWZvcmVTaGFyZWRBY2Nlc3MoKTsKLSAgICBUIHJ2ID0gKGRhdGEgPSB2KTsKLSAgICBGT0xMWV9U
RVNUX0RTQ0hFRF9WTE9HKHRoaXMgPDwgIiA9ICIgPDwgc3RkOjpoZXggPDwgdik7Ci0gICAgRGV0
ZXJtaW5pc3RpY1NjaGVkdWxlOjphZnRlclNoYXJlZEFjY2Vzcyh0cnVlKTsKLSAgICByZXR1cm4g
cnY7Ci0gIH0KLQotICB2b2lkIHN0b3JlKFQgdiwgc3RkOjptZW1vcnlfb3JkZXIgbW8gPSBzdGQ6
Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdCB7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVk
dWxlOjpiZWZvcmVTaGFyZWRBY2Nlc3MoKTsKLSAgICBkYXRhLnN0b3JlKHYsIG1vKTsKLSAgICBG
T0xMWV9URVNUX0RTQ0hFRF9WTE9HKHRoaXMgPDwgIi5zdG9yZSgiIDw8IHN0ZDo6aGV4IDw8IHYg
PDwgIikiKTsKLSAgICBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OmFmdGVyU2hhcmVkQWNjZXNzKHRy
dWUpOwotICB9Ci0KLSAgVCBvcGVyYXRvcisrKCkgbm9leGNlcHQgewotICAgIERldGVybWluaXN0
aWNTY2hlZHVsZTo6YmVmb3JlU2hhcmVkQWNjZXNzKCk7Ci0gICAgVCBydiA9ICsrZGF0YTsKLSAg
ICBGT0xMWV9URVNUX0RTQ0hFRF9WTE9HKHRoaXMgPDwgIiBwcmUrKyAtPiAiIDw8IHN0ZDo6aGV4
IDw8IHJ2KTsKLSAgICBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OmFmdGVyU2hhcmVkQWNjZXNzKHRy
dWUpOwotICAgIHJldHVybiBydjsKLSAgfQotCi0gIFQgb3BlcmF0b3IrKyhpbnQgLyogcG9zdER1
bW15ICovKSBub2V4Y2VwdCB7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjpiZWZvcmVTaGFy
ZWRBY2Nlc3MoKTsKLSAgICBUIHJ2ID0gZGF0YSsrOwotICAgIEZPTExZX1RFU1RfRFNDSEVEX1ZM
T0codGhpcyA8PCAiIHBvc3QrKyAtPiAiIDw8IHN0ZDo6aGV4IDw8IHJ2KTsKLSAgICBEZXRlcm1p
bmlzdGljU2NoZWR1bGU6OmFmdGVyU2hhcmVkQWNjZXNzKHRydWUpOwotICAgIHJldHVybiBydjsK
LSAgfQotCi0gIFQgb3BlcmF0b3ItLSgpIG5vZXhjZXB0IHsKLSAgICBEZXRlcm1pbmlzdGljU2No
ZWR1bGU6OmJlZm9yZVNoYXJlZEFjY2VzcygpOwotICAgIFQgcnYgPSAtLWRhdGE7Ci0gICAgRk9M
TFlfVEVTVF9EU0NIRURfVkxPRyh0aGlzIDw8ICIgcHJlLS0gLT4gIiA8PCBzdGQ6OmhleCA8PCBy
dik7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjphZnRlclNoYXJlZEFjY2Vzcyh0cnVlKTsK
LSAgICByZXR1cm4gcnY7Ci0gIH0KLQotICBUIG9wZXJhdG9yLS0oaW50IC8qIHBvc3REdW1teSAq
Lykgbm9leGNlcHQgewotICAgIERldGVybWluaXN0aWNTY2hlZHVsZTo6YmVmb3JlU2hhcmVkQWNj
ZXNzKCk7Ci0gICAgVCBydiA9IGRhdGEtLTsKLSAgICBGT0xMWV9URVNUX0RTQ0hFRF9WTE9HKHRo
aXMgPDwgIiBwb3N0LS0gLT4gIiA8PCBzdGQ6OmhleCA8PCBydik7Ci0gICAgRGV0ZXJtaW5pc3Rp
Y1NjaGVkdWxlOjphZnRlclNoYXJlZEFjY2Vzcyh0cnVlKTsKLSAgICByZXR1cm4gcnY7Ci0gIH0K
LQotICBUIG9wZXJhdG9yKz0oVCB2KSBub2V4Y2VwdCB7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVk
dWxlOjpiZWZvcmVTaGFyZWRBY2Nlc3MoKTsKLSAgICBUIHJ2ID0gKGRhdGEgKz0gdik7Ci0gICAg
Rk9MTFlfVEVTVF9EU0NIRURfVkxPRyh0aGlzIDw8ICIgKz0gIiA8PCBzdGQ6OmhleCA8PCB2IDw8
ICIgLT4gIiA8PCBzdGQ6OmhleAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBy
dik7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjphZnRlclNoYXJlZEFjY2Vzcyh0cnVlKTsK
LSAgICByZXR1cm4gcnY7Ci0gIH0KLQotICBUIGZldGNoX2FkZChUIHYsCi0gICAgICAgICAgICAg
IHN0ZDo6bWVtb3J5X29yZGVyIC8qIG1vICovID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkg
bm9leGNlcHQgewotICAgIERldGVybWluaXN0aWNTY2hlZHVsZTo6YmVmb3JlU2hhcmVkQWNjZXNz
KCk7Ci0gICAgVCBydiA9IGRhdGE7Ci0gICAgZGF0YSArPSB2OwotICAgIEZPTExZX1RFU1RfRFND
SEVEX1ZMT0codGhpcyA8PCAiLmZldGNoX2FkZCgiIDw8IHN0ZDo6aGV4IDw8IHYgPDwgIikgLT4g
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmhleCA8PCBydik7Ci0g
ICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjphZnRlclNoYXJlZEFjY2Vzcyh0cnVlKTsKLSAgICBy
ZXR1cm4gcnY7Ci0gIH0KLQotICBUIG9wZXJhdG9yLT0oVCB2KSBub2V4Y2VwdCB7Ci0gICAgRGV0
ZXJtaW5pc3RpY1NjaGVkdWxlOjpiZWZvcmVTaGFyZWRBY2Nlc3MoKTsKLSAgICBUIHJ2ID0gKGRh
dGEgLT0gdik7Ci0gICAgRk9MTFlfVEVTVF9EU0NIRURfVkxPRyh0aGlzIDw8ICIgLT0gIiA8PCBz
dGQ6OmhleCA8PCB2IDw8ICIgLT4gIiA8PCBzdGQ6OmhleAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8PCBydik7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjphZnRlclNoYXJl
ZEFjY2Vzcyh0cnVlKTsKLSAgICByZXR1cm4gcnY7Ci0gIH0KLQotICBUIGZldGNoX3N1YihUIHYs
Ci0gICAgICAgICAgICAgIHN0ZDo6bWVtb3J5X29yZGVyIC8qIG1vICovID0gc3RkOjptZW1vcnlf
b3JkZXJfc2VxX2NzdCkgbm9leGNlcHQgewotICAgIERldGVybWluaXN0aWNTY2hlZHVsZTo6YmVm
b3JlU2hhcmVkQWNjZXNzKCk7Ci0gICAgVCBydiA9IGRhdGE7Ci0gICAgZGF0YSAtPSB2OwotICAg
IEZPTExZX1RFU1RfRFNDSEVEX1ZMT0codGhpcyA8PCAiLmZldGNoX3N1YigiIDw8IHN0ZDo6aGV4
IDw8IHYgPDwgIikgLT4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6
OmhleCA8PCBydik7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjphZnRlclNoYXJlZEFjY2Vz
cyh0cnVlKTsKLSAgICByZXR1cm4gcnY7Ci0gIH0KLQotICBUIG9wZXJhdG9yJj0oVCB2KSBub2V4
Y2VwdCB7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjpiZWZvcmVTaGFyZWRBY2Nlc3MoKTsK
LSAgICBUIHJ2ID0gKGRhdGEgJj0gdik7Ci0gICAgRk9MTFlfVEVTVF9EU0NIRURfVkxPRyh0aGlz
IDw8ICIgJj0gIiA8PCBzdGQ6OmhleCA8PCB2IDw8ICIgLT4gIiA8PCBzdGQ6OmhleAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBydik7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVk
dWxlOjphZnRlclNoYXJlZEFjY2Vzcyh0cnVlKTsKLSAgICByZXR1cm4gcnY7Ci0gIH0KLQotICBU
IGZldGNoX2FuZChUIHYsCi0gICAgICAgICAgICAgIHN0ZDo6bWVtb3J5X29yZGVyIC8qIG1vICov
ID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgbm9leGNlcHQgewotICAgIERldGVybWluaXN0
aWNTY2hlZHVsZTo6YmVmb3JlU2hhcmVkQWNjZXNzKCk7Ci0gICAgVCBydiA9IGRhdGE7Ci0gICAg
ZGF0YSAmPSB2OwotICAgIEZPTExZX1RFU1RfRFNDSEVEX1ZMT0codGhpcyA8PCAiLmZldGNoX2Fu
ZCgiIDw8IHN0ZDo6aGV4IDw8IHYgPDwgIikgLT4gIgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8PCBzdGQ6OmhleCA8PCBydik7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjph
ZnRlclNoYXJlZEFjY2Vzcyh0cnVlKTsKLSAgICByZXR1cm4gcnY7Ci0gIH0KLQotICBUIG9wZXJh
dG9yfD0oVCB2KSBub2V4Y2VwdCB7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjpiZWZvcmVT
aGFyZWRBY2Nlc3MoKTsKLSAgICBUIHJ2ID0gKGRhdGEgfD0gdik7Ci0gICAgRk9MTFlfVEVTVF9E
U0NIRURfVkxPRyh0aGlzIDw8ICIgfD0gIiA8PCBzdGQ6OmhleCA8PCB2IDw8ICIgLT4gIiA8PCBz
dGQ6OmhleAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBydik7Ci0gICAgRGV0
ZXJtaW5pc3RpY1NjaGVkdWxlOjphZnRlclNoYXJlZEFjY2Vzcyh0cnVlKTsKLSAgICByZXR1cm4g
cnY7Ci0gIH0KLQotICBUIGZldGNoX29yKFQgdiwKLSAgICAgICAgICAgICBzdGQ6Om1lbW9yeV9v
cmRlciAvKiBtbyAqLyA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0IHsKLSAg
ICBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OmJlZm9yZVNoYXJlZEFjY2VzcygpOwotICAgIFQgcnYg
PSBkYXRhOwotICAgIGRhdGEgfD0gdjsKLSAgICBGT0xMWV9URVNUX0RTQ0hFRF9WTE9HKHRoaXMg
PDwgIi5mZXRjaF9vcigiIDw8IHN0ZDo6aGV4IDw8IHYgPDwgIikgLT4gIgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmhleCA8PCBydik7Ci0gICAgRGV0ZXJtaW5pc3Rp
Y1NjaGVkdWxlOjphZnRlclNoYXJlZEFjY2Vzcyh0cnVlKTsKLSAgICByZXR1cm4gcnY7Ci0gIH0K
LQotICBUIG9wZXJhdG9yXj0oVCB2KSBub2V4Y2VwdCB7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVk
dWxlOjpiZWZvcmVTaGFyZWRBY2Nlc3MoKTsKLSAgICBUIHJ2ID0gKGRhdGEgXj0gdik7Ci0gICAg
Rk9MTFlfVEVTVF9EU0NIRURfVkxPRyh0aGlzIDw8ICIgXj0gIiA8PCBzdGQ6OmhleCA8PCB2IDw8
ICIgLT4gIiA8PCBzdGQ6OmhleAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBy
dik7Ci0gICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjphZnRlclNoYXJlZEFjY2Vzcyh0cnVlKTsK
LSAgICByZXR1cm4gcnY7Ci0gIH0KLQotICBUIGZldGNoX3hvcihUIHYsCi0gICAgICAgICAgICAg
IHN0ZDo6bWVtb3J5X29yZGVyIC8qIG1vICovID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkg
bm9leGNlcHQgewotICAgIERldGVybWluaXN0aWNTY2hlZHVsZTo6YmVmb3JlU2hhcmVkQWNjZXNz
KCk7Ci0gICAgVCBydiA9IGRhdGE7Ci0gICAgZGF0YSBePSB2OwotICAgIEZPTExZX1RFU1RfRFND
SEVEX1ZMT0codGhpcyA8PCAiLmZldGNoX3hvcigiIDw8IHN0ZDo6aGV4IDw8IHYgPDwgIikgLT4g
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmhleCA8PCBydik7Ci0g
ICAgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlOjphZnRlclNoYXJlZEFjY2Vzcyh0cnVlKTsKLSAgICBy
ZXR1cm4gcnY7Ci0gIH0KLQotICAvKiogUmVhZCB0aGUgdmFsdWUgb2YgdGhlIGF0b21pYyB2YXJp
YWJsZSB3aXRob3V0IGNvbnRleHQgc3dpdGNoaW5nICovCi0gIFQgbG9hZF9kaXJlY3QoKSBjb25z
dCBub2V4Y2VwdCB7Ci0gICAgcmV0dXJuIGRhdGEubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxh
eGVkKTsKLSAgfQotfTsKLQotLyoqCi0gKiBEZXRlcm1pbmlzdGljTXV0ZXggaXMgYSBkcm9wLWlu
IHJlcGxhY2VtZW50IG9mIHN0ZDo6bXV0ZXggdGhhdAotICogY29vcGVyYXRlcyB3aXRoIERldGVy
bWluaXN0aWNTY2hlZHVsZS4KLSAqLwotc3RydWN0IERldGVybWluaXN0aWNNdXRleCB7Ci0gIHN0
ZDo6bXV0ZXggbTsKLQotICBEZXRlcm1pbmlzdGljTXV0ZXgoKSA9IGRlZmF1bHQ7Ci0gIH5EZXRl
cm1pbmlzdGljTXV0ZXgoKSA9IGRlZmF1bHQ7Ci0gIERldGVybWluaXN0aWNNdXRleChEZXRlcm1p
bmlzdGljTXV0ZXggY29uc3QmKSA9IGRlbGV0ZTsKLSAgRGV0ZXJtaW5pc3RpY011dGV4JiBvcGVy
YXRvcj0oRGV0ZXJtaW5pc3RpY011dGV4IGNvbnN0JikgPSBkZWxldGU7Ci0KLSAgdm9pZCBsb2Nr
KCkgewotICAgIEZPTExZX1RFU1RfRFNDSEVEX1ZMT0codGhpcyA8PCAiLmxvY2soKSIpOwotICAg
IHdoaWxlICghdHJ5X2xvY2soKSkgewotICAgICAgLy8gTm90IGNhbGxpbmcgbS5sb2NrKCkgaW4g
b3JkZXIgdG8gYXZvaWQgZGVhZGxvY2sgd2hlbiB0aGUKLSAgICAgIC8vIG11dGV4IG0gaXMgaGVs
ZCBieSBhbm90aGVyIHRocmVhZC4gVGhlIGRlYWRsb2NrIHdvdWxkIGJlCi0gICAgICAvLyBiZXR3
ZWVuIHRoZSBjYWxsIHRvIG0ubG9jaygpIGFuZCB0aGUgbG9jayBob2xkZXIncyB3YWl0IG9uCi0g
ICAgICAvLyBpdHMgb3duIHRsc19zZW0gc2NoZWR1bGluZyBzZW1hcGhvcmUuCi0gICAgfQotICB9
Ci0KLSAgYm9vbCB0cnlfbG9jaygpIHsKLSAgICBEZXRlcm1pbmlzdGljU2NoZWR1bGU6OmJlZm9y
ZVNoYXJlZEFjY2VzcygpOwotICAgIGJvb2wgcnYgPSBtLnRyeV9sb2NrKCk7Ci0gICAgRk9MTFlf
VEVTVF9EU0NIRURfVkxPRyh0aGlzIDw8ICIudHJ5X2xvY2soKSAtPiAiIDw8IHJ2KTsKLSAgICBE
ZXRlcm1pbmlzdGljU2NoZWR1bGU6OmFmdGVyU2hhcmVkQWNjZXNzKCk7Ci0gICAgcmV0dXJuIHJ2
OwotICB9Ci0KLSAgdm9pZCB1bmxvY2soKSB7Ci0gICAgRk9MTFlfVEVTVF9EU0NIRURfVkxPRyh0
aGlzIDw8ICIudW5sb2NrKCkiKTsKLSAgICBtLnVubG9jaygpOwotICB9Ci19OwotfQotfSAvLyBu
YW1lc3BhY2UgZm9sbHk6OnRlc3QKLQotLyogU3BlY2lhbGl6YXRpb24gZGVjbGFyYXRpb25zICov
Ci0KLW5hbWVzcGFjZSBmb2xseSB7Ci1uYW1lc3BhY2UgZGV0YWlsIHsKLQotdGVtcGxhdGUgPD4K
LWludCBGdXRleDx0ZXN0OjpEZXRlcm1pbmlzdGljQXRvbWljPjo6ZnV0ZXhXYWtlKGludCBjb3Vu
dCwgdWludDMyX3Qgd2FrZU1hc2spOwotCi10ZW1wbGF0ZSA8PgotRnV0ZXhSZXN1bHQgRnV0ZXg8
dGVzdDo6RGV0ZXJtaW5pc3RpY0F0b21pYz46OmZ1dGV4V2FpdEltcGwoCi0gICAgdWludDMyX3Qg
ZXhwZWN0ZWQsCi0gICAgc3RkOjpjaHJvbm86OnRpbWVfcG9pbnQ8c3RkOjpjaHJvbm86OnN5c3Rl
bV9jbG9jaz4qIGFic1N5c3RlbVRpbWUsCi0gICAgc3RkOjpjaHJvbm86OnRpbWVfcG9pbnQ8c3Rk
OjpjaHJvbm86OnN0ZWFkeV9jbG9jaz4qIGFic1N0ZWFkeVRpbWUsCi0gICAgdWludDMyX3Qgd2Fp
dE1hc2spOwotfQotCi10ZW1wbGF0ZSA8PgotR2V0Y3B1OjpGdW5jIEFjY2Vzc1NwcmVhZGVyPHRl
c3Q6OkRldGVybWluaXN0aWNBdG9taWM+OjpwaWNrR2V0Y3B1RnVuYygpOwotCi19IC8vIG5hbWVz
cGFjZSBmb2xseTo6ZGV0YWlsCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9mb2xseS90ZXN0L1Byb2R1Y2VyQ29uc3VtZXJRdWV1ZUJlbmNobWFyay5jcHAg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9mb2xseS90ZXN0L1Byb2R1Y2Vy
Q29uc3VtZXJRdWV1ZUJlbmNobWFyay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGNiZDAyOGRkYTE4ZGFlNDBlZWUzNjBiNDM4ZTcxNmFhMTZkN2I5M2EuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZm9sbHkvdGVzdC9Qcm9kdWNlckNvbnN1bWVyUXVldWVCZW5jaG1hcmsuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMjk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBG
YWNlYm9vaywgSW5jLgotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwg
VmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmls
ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRh
aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5v
cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGlj
YWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAot
ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBl
eHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBs
YW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0
aGUgTGljZW5zZS4KLSAqLwotCi0vLyBAYXV0aG9yOiBCZXJ0IE1haGVyIDxiZXJ0cmFuZEBmYi5j
b20+Ci0KLSNpbmNsdWRlIDxmb2xseS9Qcm9kdWNlckNvbnN1bWVyUXVldWUuaD4KLQotI2luY2x1
ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDx0aHJlYWQ+Ci0KLSNp
bmNsdWRlIDxmb2xseS9CZW5jaG1hcmsuaD4KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9H
RmxhZ3MuaD4KLSNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9QVGhyZWFkLmg+Ci0jaW5jbHVk
ZSA8Zm9sbHkvc3RhdHMvSGlzdG9ncmFtLmg+Ci0jaW5jbHVkZSA8Zm9sbHkvc3RhdHMvSGlzdG9n
cmFtLWRlZnMuaD4KLQotbmFtZXNwYWNlIHsKLQotdXNpbmcgbmFtZXNwYWNlIGZvbGx5OwotCi10
eXBlZGVmIHVuc2lnbmVkIGludCBUaHJvdWdocHV0VHlwZTsKLXR5cGVkZWYgUHJvZHVjZXJDb25z
dW1lclF1ZXVlPFRocm91Z2hwdXRUeXBlPiBUaHJvdWdocHV0UXVldWVUeXBlOwotCi10eXBlZGVm
IHVuc2lnbmVkIGxvbmcgTGF0ZW5jeVR5cGU7Ci10eXBlZGVmIFByb2R1Y2VyQ29uc3VtZXJRdWV1
ZTxMYXRlbmN5VHlwZT4gTGF0ZW5jeVF1ZXVlVHlwZTsKLQotdGVtcGxhdGU8Y2xhc3MgUXVldWVU
eXBlPgotc3RydWN0IFRocm91Z2hwdXRUZXN0IHsKLSAgZXhwbGljaXQgVGhyb3VnaHB1dFRlc3Qo
c2l6ZV90IHNpemUsIGludCBpdGVycywgaW50IGNwdTAsIGludCBjcHUxKQotICA6IHF1ZXVlXyhz
aXplKSwKLSAgICBkb25lXyhmYWxzZSksCi0gICAgaXRlcnNfKGl0ZXJzKSwKLSAgICBjcHUwXyhj
cHUwKSwKLSAgICBjcHUxXyhjcHUxKQotICAgIHsgfQotCi0gIHZvaWQgcHJvZHVjZXIoKSB7Ci0g
ICAgLy8gaWYgKGNwdTBfID4gLTEpIHsKLSAgICAvLyAgIGNwdV9zZXRfdCBjcHVzZXQ7Ci0gICAg
Ly8gICBDUFVfWkVSTygmY3B1c2V0KTsKLSAgICAvLyAgIENQVV9TRVQoY3B1MF8sICZjcHVzZXQp
OwotICAgIC8vICAgcHRocmVhZF9zZXRhZmZpbml0eV9ucChwdGhyZWFkX3NlbGYoKSwgc2l6ZW9m
KGNwdV9zZXRfdCksICZjcHVzZXQpOwotICAgIC8vIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGl0ZXJzXzsgKytpKSB7Ci0gICAgICBUaHJvdWdocHV0VHlwZSBpdGVtID0gaTsKLSAgICAgIHdo
aWxlICghcXVldWVfLndyaXRlKChUaHJvdWdocHV0VHlwZSkgaXRlbSkpIHsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLQotICB2b2lkIGNvbnN1bWVyKCkgewotICAgIC8vIGlmIChjcHUxXyA+IC0xKSB7
Ci0gICAgLy8gICBjcHVfc2V0X3QgY3B1c2V0OwotICAgIC8vICAgQ1BVX1pFUk8oJmNwdXNldCk7
Ci0gICAgLy8gICBDUFVfU0VUKGNwdTFfLCAmY3B1c2V0KTsKLSAgICAvLyAgIHB0aHJlYWRfc2V0
YWZmaW5pdHlfbnAocHRocmVhZF9zZWxmKCksIHNpemVvZihjcHVfc2V0X3QpLCAmY3B1c2V0KTsK
LSAgICAvLyB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyc187ICsraSkgewotICAgICAg
VGhyb3VnaHB1dFR5cGUgaXRlbSA9IDA7Ci0gICAgICB3aGlsZSAoIXF1ZXVlXy5yZWFkKGl0ZW0p
KSB7Ci0gICAgICB9Ci0gICAgICBkb05vdE9wdGltaXplQXdheShpdGVtKTsKLSAgICB9Ci0gIH0K
LQotICBRdWV1ZVR5cGUgcXVldWVfOwotICBzdGQ6OmF0b21pYzxib29sPiBkb25lXzsKLSAgY29u
c3QgaW50IGl0ZXJzXzsKLSAgaW50IGNwdTBfOwotICBpbnQgY3B1MV87Ci19OwotCi10ZW1wbGF0
ZTxjbGFzcyBRdWV1ZVR5cGU+Ci1zdHJ1Y3QgTGF0ZW5jeVRlc3QgewotICBleHBsaWNpdCBMYXRl
bmN5VGVzdChzaXplX3Qgc2l6ZSwgaW50IGl0ZXJzLCBpbnQgY3B1MCwgaW50IGNwdTEpCi0gIDog
cXVldWVfKHNpemUpLAotICAgIGRvbmVfKGZhbHNlKSwKLSAgICBpdGVyc18oaXRlcnMpLAotICAg
IGNwdTBfKGNwdTApLAotICAgIGNwdTFfKGNwdTEpLAotICAgIGhpc3RfKDEsIDAsIDMwKQotICAg
IHsKLSAgICAgIGNvbXB1dGVUaW1lQ29zdCgpOwotICAgIH0KLQotICBzdGF0aWMgdWludDY0X3Qg
dGltZXNwZWNEaWZmKHRpbWVzcGVjIGVuZCwgdGltZXNwZWMgc3RhcnQpIHsKLSAgICBpZiAoZW5k
LnR2X3NlYyA9PSBzdGFydC50dl9zZWMpIHsKLSAgICAgIGFzc2VydChlbmQudHZfbnNlYyA+PSBz
dGFydC50dl9uc2VjKTsKLSAgICAgIHJldHVybiB1aW50NjRfdChlbmQudHZfbnNlYyAtIHN0YXJ0
LnR2X25zZWMpOwotICAgIH0KLSAgICBhc3NlcnQoZW5kLnR2X3NlYyA+IHN0YXJ0LnR2X3NlYyk7
Ci0gICAgYXV0byBkaWZmID0gdWludDY0X3QoZW5kLnR2X3NlYyAtIHN0YXJ0LnR2X3NlYyk7Ci0g
ICAgYXNzZXJ0KGRpZmYgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkgLyAx
MDAwMDAwMDAwVUxMKTsKLSAgICByZXR1cm4gZGlmZiAqIDEwMDAwMDAwMDBVTEwgKyBlbmQudHZf
bnNlYyAtIHN0YXJ0LnR2X25zZWM7Ci0gIH0KLQotICB2b2lkIGNvbXB1dGVUaW1lQ29zdCgpIHsK
LSAgICB0aW1lc3BlYyBzdGFydCwgZW5kOwotICAgIGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJ
TUUsICZzdGFydCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyc187ICsraSkgewotICAg
ICAgdGltZXNwZWMgdHY7Ci0gICAgICBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHYp
OwotICAgIH0KLSAgICBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmZW5kKTsKLSAgICB0
aW1lX2Nvc3RfID0gMiAqIHRpbWVzcGVjRGlmZihlbmQsIHN0YXJ0KSAvIGl0ZXJzXzsKLSAgfQot
Ci0gIHZvaWQgcHJvZHVjZXIoKSB7Ci0gICAgLy8gaWYgKGNwdTBfID4gLTEpIHsKLSAgICAvLyAg
IGNwdV9zZXRfdCBjcHVzZXQ7Ci0gICAgLy8gICBDUFVfWkVSTygmY3B1c2V0KTsKLSAgICAvLyAg
IENQVV9TRVQoY3B1MF8sICZjcHVzZXQpOwotICAgIC8vICAgcHRocmVhZF9zZXRhZmZpbml0eV9u
cChwdGhyZWFkX3NlbGYoKSwgc2l6ZW9mKGNwdV9zZXRfdCksICZjcHVzZXQpOwotICAgIC8vIH0K
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzXzsgKytpKSB7Ci0gICAgICB0aW1lc3BlYyBz
bGVlcHRpbWUsIHNsZWVwc3RhcnQ7Ci0gICAgICBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1F
LCAmc2xlZXBzdGFydCk7Ci0gICAgICBkbyB7Ci0gICAgICAgIGNsb2NrX2dldHRpbWUoQ0xPQ0tf
UkVBTFRJTUUsICZzbGVlcHRpbWUpOwotICAgICAgfSB3aGlsZSAodGltZXNwZWNEaWZmKHNsZWVw
dGltZSwgc2xlZXBzdGFydCkgPCAxMDAwMDAwKTsKLQotICAgICAgdGltZXNwZWMgdHY7Ci0gICAg
ICBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHYpOwotICAgICAgd2hpbGUgKCFxdWV1
ZV8ud3JpdGUoKExhdGVuY3lUeXBlKSB0di50dl9uc2VjKSkgewotICAgICAgfQotICAgIH0KLSAg
fQotCi0gIHZvaWQgY29uc3VtZXIoKSB7Ci0gICAgLy8gaWYgKGNwdTFfID4gLTEpIHsKLSAgICAv
LyAgIGNwdV9zZXRfdCBjcHVzZXQ7Ci0gICAgLy8gICBDUFVfWkVSTygmY3B1c2V0KTsKLSAgICAv
LyAgIENQVV9TRVQoY3B1MV8sICZjcHVzZXQpOwotICAgIC8vICAgcHRocmVhZF9zZXRhZmZpbml0
eV9ucChwdGhyZWFkX3NlbGYoKSwgc2l6ZW9mKGNwdV9zZXRfdCksICZjcHVzZXQpOwotICAgIC8v
IH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzXzsgKytpKSB7Ci0gICAgICB1bnNpZ25l
ZCBsb25nIGVucXVldWVfbnNlYzsKLSAgICAgIHdoaWxlICghcXVldWVfLnJlYWQoZW5xdWV1ZV9u
c2VjKSkgewotICAgICAgfQotCi0gICAgICB0aW1lc3BlYyB0djsKLSAgICAgIGNsb2NrX2dldHRp
bWUoQ0xPQ0tfUkVBTFRJTUUsICZ0dik7Ci0gICAgICBpbnQgZGlmZiA9IHR2LnR2X25zZWMgLSBl
bnF1ZXVlX25zZWMgLSB0aW1lX2Nvc3RfOwotICAgICAgaWYgKGRpZmYgPCAwKSB7Ci0gICAgICAg
IGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICAvLyBOYWl2ZSBsb2ctc2NhbGUgYnVja2V0aW5n
LgotICAgICAgaW50IGJ1Y2tldDsKLSAgICAgIGZvciAoYnVja2V0ID0gMDsKLSAgICAgICAgICAg
YnVja2V0IDw9IDMwICYmICgxIDw8IGJ1Y2tldCkgPD0gZGlmZjsKLSAgICAgICAgICAgKytidWNr
ZXQpIHsKLSAgICAgIH0KLSAgICAgIGhpc3RfLmFkZFZhbHVlKGJ1Y2tldCAtIDEpOwotICAgIH0K
LSAgfQotCi0gIHZvaWQgcHJpbnRIaXN0b2dyYW0oKSB7Ci0gICAgaGlzdF8udG9UU1Yoc3RkOjpj
b3V0KTsKLSAgfQotCi0gIFF1ZXVlVHlwZSBxdWV1ZV87Ci0gIHN0ZDo6YXRvbWljPGJvb2w+IGRv
bmVfOwotICBpbnQgdGltZV9jb3N0XzsKLSAgY29uc3QgaW50IGl0ZXJzXzsKLSAgaW50IGNwdTBf
OwotICBpbnQgY3B1MV87Ci0gIEhpc3RvZ3JhbTxpbnQ+IGhpc3RfOwotfTsKLQotdm9pZCBCTV9Q
cm9kdWNlckNvbnN1bWVyKGludCBpdGVycywgaW50IHNpemUpIHsKLSAgQmVuY2htYXJrU3VzcGVu
ZGVyIHN1c3A7Ci0gIENIRUNLX0dUKHNpemUsIDApOwotICBUaHJvdWdocHV0VGVzdDxUaHJvdWdo
cHV0UXVldWVUeXBlPiAqdGVzdCA9Ci0gICAgbmV3IFRocm91Z2hwdXRUZXN0PFRocm91Z2hwdXRR
dWV1ZVR5cGU+KHNpemUsIGl0ZXJzLCAtMSwgLTEpOwotICBzdXNwLmRpc21pc3MoKTsKLQotICBz
dGQ6OnRocmVhZCBwcm9kdWNlciggW3Rlc3RdIHsgdGVzdC0+cHJvZHVjZXIoKTsgfSApOwotICBz
dGQ6OnRocmVhZCBjb25zdW1lciggW3Rlc3RdIHsgdGVzdC0+Y29uc3VtZXIoKTsgfSApOwotCi0g
IHByb2R1Y2VyLmpvaW4oKTsKLSAgdGVzdC0+ZG9uZV8gPSB0cnVlOwotICBjb25zdW1lci5qb2lu
KCk7Ci0gIGRlbGV0ZSB0ZXN0OwotfQotCi12b2lkIEJNX1Byb2R1Y2VyQ29uc3VtZXJBZmZpbml0
eShpbnQgaXRlcnMsIGludCBzaXplKSB7Ci0gIEJlbmNobWFya1N1c3BlbmRlciBzdXNwOwotICBD
SEVDS19HVChzaXplLCAwKTsKLSAgVGhyb3VnaHB1dFRlc3Q8VGhyb3VnaHB1dFF1ZXVlVHlwZT4g
KnRlc3QgPQotICAgIG5ldyBUaHJvdWdocHV0VGVzdDxUaHJvdWdocHV0UXVldWVUeXBlPihzaXpl
LCBpdGVycywgMCwgMSk7Ci0gIHN1c3AuZGlzbWlzcygpOwotCi0gIHN0ZDo6dGhyZWFkIHByb2R1
Y2VyKCBbdGVzdF0geyB0ZXN0LT5wcm9kdWNlcigpOyB9ICk7Ci0gIHN0ZDo6dGhyZWFkIGNvbnN1
bWVyKCBbdGVzdF0geyB0ZXN0LT5jb25zdW1lcigpOyB9ICk7Ci0KLSAgcHJvZHVjZXIuam9pbigp
OwotICB0ZXN0LT5kb25lXyA9IHRydWU7Ci0gIGNvbnN1bWVyLmpvaW4oKTsKLSAgZGVsZXRlIHRl
c3Q7Ci19Ci0KLXZvaWQgQk1fUHJvZHVjZXJDb25zdW1lckxhdGVuY3koaW50IC8qIGl0ZXJzICov
LCBpbnQgc2l6ZSkgewotICBCZW5jaG1hcmtTdXNwZW5kZXIgc3VzcDsKLSAgQ0hFQ0tfR1Qoc2l6
ZSwgMCk7Ci0gIExhdGVuY3lUZXN0PExhdGVuY3lRdWV1ZVR5cGU+ICp0ZXN0ID0KLSAgICBuZXcg
TGF0ZW5jeVRlc3Q8TGF0ZW5jeVF1ZXVlVHlwZT4oc2l6ZSwgMTAwMDAwLCAwLCAxKTsKLSAgc3Vz
cC5kaXNtaXNzKCk7Ci0KLSAgc3RkOjp0aHJlYWQgcHJvZHVjZXIoIFt0ZXN0XSB7IHRlc3QtPnBy
b2R1Y2VyKCk7IH0gKTsKLSAgc3RkOjp0aHJlYWQgY29uc3VtZXIoIFt0ZXN0XSB7IHRlc3QtPmNv
bnN1bWVyKCk7IH0gKTsKLQotICBwcm9kdWNlci5qb2luKCk7Ci0gIHRlc3QtPmRvbmVfID0gdHJ1
ZTsKLSAgY29uc3VtZXIuam9pbigpOwotICB0ZXN0LT5wcmludEhpc3RvZ3JhbSgpOwotICBkZWxl
dGUgdGVzdDsKLX0KLQotCi1CRU5DSE1BUktfRFJBV19MSU5FKCk7Ci0KLUJFTkNITUFSS19QQVJB
TShCTV9Qcm9kdWNlckNvbnN1bWVyLCAxMDQ4NTc0KTsKLUJFTkNITUFSS19QQVJBTShCTV9Qcm9k
dWNlckNvbnN1bWVyQWZmaW5pdHksIDEwNDg1NzQpOwotQkVOQ0hNQVJLX1BBUkFNKEJNX1Byb2R1
Y2VyQ29uc3VtZXJMYXRlbmN5LCAxMDQ4NTc0KTsKLQotfQotCi1pbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpIHsKLSAgcnVuQmVuY2htYXJrcygpOwotICByZXR1cm4gMDsKLX0KLQotI2lm
IDAKLS8qCi1CZW5jaG1hcmsKLQotJCBsc2NwdQotQXJjaGl0ZWN0dXJlOiAgICAgICAgICB4ODZf
NjQKLUNQVSBvcC1tb2RlKHMpOiAgICAgICAgMzItYml0LCA2NC1iaXQKLUJ5dGUgT3JkZXI6ICAg
ICAgICAgICAgTGl0dGxlIEVuZGlhbgotQ1BVKHMpOiAgICAgICAgICAgICAgICAyNAotT24tbGlu
ZSBDUFUocykgbGlzdDogICAwLTIzCi1UaHJlYWQocykgcGVyIGNvcmU6ICAgIDEKLUNvcmUocykg
cGVyIHNvY2tldDogICAgMQotU29ja2V0KHMpOiAgICAgICAgICAgICAyNAotTlVNQSBub2RlKHMp
OiAgICAgICAgICAxCi1WZW5kb3IgSUQ6ICAgICAgICAgICAgIEdlbnVpbmVJbnRlbAotQ1BVIGZh
bWlseTogICAgICAgICAgICA2Ci1Nb2RlbDogICAgICAgICAgICAgICAgIDYwCi1Nb2RlbCBuYW1l
OiAgICAgICAgICAgIEludGVsIENvcmUgUHJvY2Vzc29yIChIYXN3ZWxsLCBubyBUU1gpCi1TdGVw
cGluZzogICAgICAgICAgICAgIDEKLUNQVSBNSHo6ICAgICAgICAgICAgICAgMjQ5NC4yNDQKLUJv
Z29NSVBTOiAgICAgICAgICAgICAgNDk4OC40OAotSHlwZXJ2aXNvciB2ZW5kb3I6ICAgICBLVk0K
LVZpcnR1YWxpemF0aW9uIHR5cGU6ICAgZnVsbAotTDFkIGNhY2hlOiAgICAgICAgICAgICAzMksK
LUwxaSBjYWNoZTogICAgICAgICAgICAgMzJLCi1MMiBjYWNoZTogICAgICAgICAgICAgIDQwOTZL
Ci1OVU1BIG5vZGUwIENQVShzKTogICAgIDAtMjMKLQotJCAuLi9idWNrLW91dC9nZW4vZm9sbHkv
dGVzdC9wcm9kdWNlcl9jb25zdW1lcl9xdWV1ZV9iZW5jaG1hcmsKLTUgICAgICAgNiAgICAgICAx
ICAgICAgIDUKLTYgICAgICAgNyAgICAgICAxODkzICAgIDExMzU4Ci03ICAgICAgIDggICAgICAg
Mzk2NzEgICAyNzc2OTcKLTggICAgICAgOSAgICAgICAzNDkyMSAgIDI3OTM2OAotOSAgICAgICAx
MCAgICAgIDE3Nzk5ICAgMTYwMTkxCi0xMCAgICAgIDExICAgICAgMzY4NSAgICAzNjg1MAotMTEg
ICAgICAxMiAgICAgIDEwNzUgICAgMTE4MjUKLTEyICAgICAgMTMgICAgICA0NTYgICAgIDU0NzIK
LTEzICAgICAgMTQgICAgICA0MjIgICAgIDU0ODYKLTE0ICAgICAgMTUgICAgICA2NCAgICAgIDg5
NgotMTUgICAgICAxNiAgICAgIDcgICAgICAgMTA1Ci0xNiAgICAgIDE3ICAgICAgMyAgICAgICA0
OAotMTcgICAgICAxOCAgICAgIDMgICAgICAgNTEKLT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWZvbGx5
L3Rlc3QvUHJvZHVjZXJDb25zdW1lclF1ZXVlQmVuY2htYXJrLmNwcCAgIHJlbGF0aXZlICB0aW1l
L2l0ZXIgIGl0ZXJzL3MKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LUJNX1Byb2R1Y2VyQ29uc3VtZXIoMTA0ODU3NCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA1LjgybnMgIDE3MS43NU0KLUJNX1Byb2R1Y2VyQ29uc3VtZXJBZmZpbml0eSgxMDQ4NTc0
KSAgICAgICAgICAgICAgICAgICAgICAgICA3LjM2bnMgIDEzNS44M00KLUJNX1Byb2R1Y2VyQ29u
c3VtZXJMYXRlbmN5KDEwNDg1NzQpICAgICAgICAgICAgICAgICAgICAgICAgIDEuNjdtaW4gICAg
OS45OW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2ZvbGx5L3Rlc3QvVGhyZWFkTG9jYWxCZW5j
aG1hcmsuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZm9sbHkvdGVz
dC9UaHJlYWRMb2NhbEJlbmNobWFyay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDYyZTJlZjQyYzZjOGI1MTllNjdhMTgwOWVhODI1N2UwOWViN2EyY2EuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZm9sbHkvdGVzdC9UaHJlYWRMb2NhbEJlbmNobWFyay5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE3IEZhY2Vib29rLCBJ
bmMuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu
MCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNl
cy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VU
IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
LgotICovCi0KLSNpbmNsdWRlIDxmb2xseS9UaHJlYWRMb2NhbC5oPgotCi0jaW5jbHVkZSA8c3lz
L3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDxhdG9taWM+Ci0jaW5jbHVk
ZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxtdXRleD4K
LSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8dGhyZWFkPgotCi0vLyNpbmNsdWRlIDxib29zdC90
aHJlYWQvdHNzLmhwcD4KLS8vI2luY2x1ZGUgPGdsb2cvbG9nZ2luZy5oPgotCi0jaW5jbHVkZSA8
Zm9sbHkvQmVuY2htYXJrLmg+Ci0vLyNpbmNsdWRlIDxmb2xseS9leHBlcmltZW50YWwvaW8vRnNV
dGlsLmg+Ci0vLyNpbmNsdWRlIDxmb2xseS9wb3J0YWJpbGl0eS9HRmxhZ3MuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIGZvbGx5OwotCi0vLyBTaW1wbGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHVz
aW5nIHB0aHJlYWRfZ2V0X3NwZWNpZmljCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFBU
aHJlYWRHZXRTcGVjaWZpYyB7Ci0gcHVibGljOgotICBQVGhyZWFkR2V0U3BlY2lmaWMoKSA6IGtl
eV8oMCkgeyBwdGhyZWFkX2tleV9jcmVhdGUoJmtleV8sIE9uVGhyZWFkRXhpdCk7IH0KLQotICBU
KiBnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocHRocmVhZF9nZXRzcGVjaWZp
YyhrZXlfKSk7IH0KLQotICB2b2lkIHJlc2V0KFQqIHQpIHsKLSAgICBkZWxldGUgZ2V0KCk7Ci0g
ICAgcHRocmVhZF9zZXRzcGVjaWZpYyhrZXlfLCB0KTsKLSAgfQotICBzdGF0aWMgdm9pZCBPblRo
cmVhZEV4aXQodm9pZCogb2JqKSB7IGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4ob2JqKTsgfQotCi0g
cHJpdmF0ZToKLSAgcHRocmVhZF9rZXlfdCBrZXlfOwotfTsKLQotc3RhdGljIGNvbnN0ZXhwciBp
bnQzMl90IEZMQUdTX251bVRocmVhZHMgPSA4OyAvLywgIk51bWJlciBzaW11bHRhbmVvdXMgdGhy
ZWFkcyBmb3IgYmVuY2htYXJrcy4iKTsKLQotI2RlZmluZSBSRUcodmFyKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBCRU5DSE1BUksoRkJfQ09OQ0FURU5BVEUo
Qk1fbXRfLCB2YXIpLCBpdGVycykgeyAgICAgICAgXAotICAgIGNvbnN0IGludCBpdGVyc1BlclRo
cmVhZCA9IGl0ZXJzIC8gRkxBR1NfbnVtVGhyZWFkczsgXAotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6
dGhyZWFkPiB0aHJlYWRzOyAgICAgICAgICAgICAgICAgICAgXAotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgRkxBR1NfbnVtVGhyZWFkczsgKytpKSB7ICAgICAgICAgXAotICAgICAgdGhyZWFkcy5w
dXNoX2JhY2soc3RkOjp0aHJlYWQoWyZdKCkgeyAgICAgICAgICAgICAgXAotICAgICAgICB2YXIu
cmVzZXQobmV3IGludCgwKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBm
b3IgKGludCBqID0gMDsgaiA8IGl0ZXJzUGVyVGhyZWFkOyArK2opIHsgICAgICAgXAotICAgICAg
ICAgICsrKCp2YXIuZ2V0KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgfSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGZvciAoYXV0byYgdCA6IHRocmVhZHMpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgdC5qb2luKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICB9Ci0KLVRocmVhZExvY2FsUHRyPGludD4gdGxwOwotUkVHKHRscCk7
Ci1QVGhyZWFkR2V0U3BlY2lmaWM8aW50PiBwdGhyZWFkX2dldF9zcGVjaWZpYzsKLVJFRyhwdGhy
ZWFkX2dldF9zcGVjaWZpYyk7Ci0vL2Jvb3N0Ojp0aHJlYWRfc3BlY2lmaWNfcHRyPGludD4gYm9v
c3RfdHNwOwotLy9SRUcoYm9vc3RfdHNwKTsKLUJFTkNITUFSS19EUkFXX0xJTkUoKTsKLQotaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7Ci0gIC8qCi0gIGdmbGFnczo6UGFyc2VDb21t
YW5kTGluZUZsYWdzKCZhcmdjLCAmYXJndiwgdHJ1ZSk7Ci0gIGdmbGFnczo6U2V0Q29tbWFuZExp
bmVPcHRpb25XaXRoTW9kZSgKLSAgICAgICJibV9tYXhfaXRlcnMiLCAiMTAwMDAwMDAwIiwgZ2Zs
YWdzOjpTRVRfRkxBR19JRl9ERUZBVUxUKTsKLSAgKi8KLSAgZm9sbHk6OnJ1bkJlbmNobWFya3Mo
KTsKLSAgcmV0dXJuIDA7Ci19Ci0KLS8qCi1SYW4gd2l0aCAyNCB0aHJlYWRzIG9uIGR1YWwgMTIt
Y29yZSBYZW9uKFIpIFg1NjUwIEAgMi42N0dIeiB3aXRoIDEyLU1CIGNhY2hlcwotCi1CZW5jaG1h
cmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlcnMgICBUb3RhbCB0ICAgIHQvaXRl
ciBpdGVyL3NlYwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qICAgICAgIEJNX210X3RscCAgICAg
ICAgICAgICAgICAgICAxMDAwMDAwMDAgIDM5Ljg4IG1zICAzOTguOCBwcyAgMi4zMzUgRwotICs1
LjkxJSBCTV9tdF9wdGhyZWFkX2dldF9zcGVjaWZpYyAgMTAwMDAwMDAwICA0Mi4yMyBtcyAgNDIy
LjMgcHMgIDIuMjA1IEcKLSArIDI5NSUgQk1fbXRfYm9vc3RfdHNwICAgICAgICAgICAgIDEwMDAw
MDAwMCAgMTU3LjggbXMgIDEuNTc4IG5zICA2MDQuNSBNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9nbG9n
L0FVVEhPUlMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9nbG9nL0FVVEhP
UlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OWQxMzczNDdiZGE2MDdmMDA5Njdk
MDU0MmNjYzAwOTFhOWFjNTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xvZy9BVVRIT1JT
CisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyBUaGlzIGlzIHRoZSBvZmZpY2lhbCBs
aXN0IG9mIGdsb2cgYXV0aG9ycyBmb3IgY29weXJpZ2h0IHB1cnBvc2VzLgotIyBUaGlzIGZpbGUg
aXMgZGlzdGluY3QgZnJvbSB0aGUgQ09OVFJJQlVUT1JTIGZpbGVzLgotIyBTZWUgdGhlIGxhdHRl
ciBmb3IgYW4gZXhwbGFuYXRpb24uCi0jCi0jIE5hbWVzIHNob3VsZCBiZSBhZGRlZCB0byB0aGlz
IGZpbGUgYXM6Ci0jCU5hbWUgb3IgT3JnYW5pemF0aW9uIDxlbWFpbCBhZGRyZXNzPgotIyBUaGUg
ZW1haWwgYWRkcmVzcyBpcyBub3QgcmVxdWlyZWQgZm9yIG9yZ2FuaXphdGlvbnMuCi0jCi0jIFBs
ZWFzZSBrZWVwIHRoZSBsaXN0IHNvcnRlZC4KLQotQWJoaXNoZWsgRGFzZ3VwdGEgPGFiaGkyNzQz
QGdtYWlsLmNvbT4KLUFiaGlzaGVrIFBhcm1hciA8YWJoaXNoZWtAb3JuZy5uZXQ+Ci1BbmRyZXcg
U2Nod2FydHptZXllciA8YW5kcmV3QHNjaHdhcnR6bWV5ZXIuY29tPgotQW5keSBZaW5nIDxhbmR5
QHRyYWlsb2ZiaXRzLmNvbT4KLUJyaWFuIFNpbHZlcm1hbiA8YnNpbHZlcjE2Mzg0QGdtYWlsLmNv
bT4KLUdvb2dsZSBJbmMuCi1HdWlsbGF1bWUgRHVtb250IDxkdW1vbnQuZ3VpbGxhdW1lQGdtYWls
LmNvbT4KLU1pY2hhZWwgVGFubmVyIDxtaWNoYWVsQHRhbm5lcnRheHByby5jb20+Ci1NaW5pTGln
aHQgPE1pbmlMaWdodEFSQEdtYWlsLmNvbT4KLXJvbWFuZ2UgPHJvbWFuZ2VAdXNlcnMubm9yZXBs
eS5naXRodWIuY29tPgotU2VyZ2l1IERlaXRzY2ggPHNlcmdpdS5kZWl0c2NoQGdtYWlsLmNvbT4K
LXRiZW5udW4gPHRiZW5udW5AZ21haWwuY29tPgotVGVkZHkgUmVlZCA8dGVkZHlAcHJvc2F1Y2Uu
b3JnPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xv
Zy9DT05UUklCVVRPUlMgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9nbG9n
L0NPTlRSSUJVVE9SUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBkZGJlYzRjOWUy
MzYzMWQ0N2U3ZTcxM2VjY2NkYWQ4NDdjZWUxZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9n
bG9nL0NPTlRSSUJVVE9SUworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLSMgUGVvcGxl
IHdobyBoYXZlIGFncmVlZCB0byBvbmUgb2YgdGhlIENMQXMgYW5kIGNhbiBjb250cmlidXRlIHBh
dGNoZXMuCi0jIFRoZSBBVVRIT1JTIGZpbGUgbGlzdHMgdGhlIGNvcHlyaWdodCBob2xkZXJzOyB0
aGlzIGZpbGUKLSMgbGlzdHMgcGVvcGxlLiAgRm9yIGV4YW1wbGUsIEdvb2dsZSBlbXBsb3llZXMg
YXJlIGxpc3RlZCBoZXJlCi0jIGJ1dCBub3QgaW4gQVVUSE9SUywgYmVjYXVzZSBHb29nbGUgaG9s
ZHMgdGhlIGNvcHlyaWdodC4KLSMKLSMgTmFtZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoaXMgZmls
ZSBvbmx5IGFmdGVyIHZlcmlmeWluZyB0aGF0Ci0jIHRoZSBpbmRpdmlkdWFsIG9yIHRoZSBpbmRp
dmlkdWFsJ3Mgb3JnYW5pemF0aW9uIGhhcyBhZ3JlZWQgdG8KLSMgdGhlIGFwcHJvcHJpYXRlIENv
bnRyaWJ1dG9yIExpY2Vuc2UgQWdyZWVtZW50LCBmb3VuZCBoZXJlOgotIwotIyBodHRwczovL2Rl
dmVsb3BlcnMuZ29vZ2xlLmNvbS9vcGVuLXNvdXJjZS9jbGEvaW5kaXZpZHVhbAotIyBodHRwczov
L2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9vcGVuLXNvdXJjZS9jbGEvY29ycG9yYXRlCi0jCi0jIFRo
ZSBhZ3JlZW1lbnQgZm9yIGluZGl2aWR1YWxzIGNhbiBiZSBmaWxsZWQgb3V0IG9uIHRoZSB3ZWIu
Ci0jCi0jIFdoZW4gYWRkaW5nIEogUmFuZG9tIENvbnRyaWJ1dG9yJ3MgbmFtZSB0byB0aGlzIGZp
bGUsCi0jIGVpdGhlciBKJ3MgbmFtZSBvciBKJ3Mgb3JnYW5pemF0aW9uJ3MgbmFtZSBzaG91bGQg
YmUKLSMgYWRkZWQgdG8gdGhlIEFVVEhPUlMgZmlsZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhl
Ci0jIGluZGl2aWR1YWwgb3IgY29ycG9yYXRlIENMQSB3YXMgdXNlZC4KLSMKLSMgTmFtZXMgc2hv
dWxkIGJlIGFkZGVkIHRvIHRoaXMgZmlsZSBhczoKLSMgICAgIE5hbWUgPGVtYWlsIGFkZHJlc3M+
Ci0jCi0jIFBsZWFzZSBrZWVwIHRoZSBsaXN0IHNvcnRlZC4KLQotQWJoaXNoZWsgRGFzZ3VwdGEg
PGFiaGkyNzQzQGdtYWlsLmNvbT4KLUFiaGlzaGVrIFBhcm1hciA8YWJoaXNoZWtAb3JuZy5uZXQ+
Ci1BbmRyZXcgU2Nod2FydHptZXllciA8YW5kcmV3QHNjaHdhcnR6bWV5ZXIuY29tPgotQW5keSBZ
aW5nIDxhbmR5QHRyYWlsb2ZiaXRzLmNvbT4KLUJyaWFuIFNpbHZlcm1hbiA8YnNpbHZlcjE2Mzg0
QGdtYWlsLmNvbT4KLUZ1bWl0b3NoaSBVa2FpIDx1a2FpQGdvb2dsZS5jb20+Ci1HdWlsbGF1bWUg
RHVtb250IDxkdW1vbnQuZ3VpbGxhdW1lQGdtYWlsLmNvbT4KLUjDpWthbiBMLiBTLiBZb3VuZXMg
PGh5b3VuZXNAZ29vZ2xlLmNvbT4KLUl2YW4gUGVua292IDxpdmFucGVAZ29vZ2xlLmNvbT4KLU1p
Y2hhZWwgVGFubmVyIDxtaWNoYWVsQHRhbm5lcnRheHByby5jb20+Ci1NaW5pTGlnaHQgPE1pbmlM
aWdodEFSQEdtYWlsLmNvbT4KLVBldGVyIENvbGxpbmdib3VybmUgPHBjY0Bnb29nbGUuY29tPgot
cm9tYW5nZSA8cm9tYW5nZUB1c2Vycy5ub3JlcGx5LmdpdGh1Yi5jb20+Ci1TZXJnaXUgRGVpdHNj
aCA8c2VyZ2l1LmRlaXRzY2hAZ21haWwuY29tPgotU2hpbmljaGlybyBIYW1hamkgPGhhbWFqaUBn
b29nbGUuY29tPgotdGJlbm51biA8dGJlbm51bkBnbWFpbC5jb20+Ci1UZWRkeSBSZWVkIDx0ZWRk
eUBwcm9zYXVjZS5vcmc+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9nbG9nL0NPUFlJTkcgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9nbG9nL0NPUFlJTkcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4Mzk2YjU4MGIz
N2I5NjFmMmZjNzJiMjU0ZGUxNjFjYmFmZGMwNjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Z2xvZy9DT1BZSU5HCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotQ29weXJpZ2h0IChj
KSAyMDA4LCBHb29nbGUgSW5jLgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1t
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi1tZXQ6Ci0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci1ub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi1jb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi1pbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi1kaXN0cmlidXRpb24uCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi1jb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLUxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLU9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi1EQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLVRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotCi1BIGZ1bmN0aW9uIGdldHRpbWVvZmRheSBpbiB1dGlsaXRpZXMuY2Mg
aXMgYmFzZWQgb24KLQotaHR0cDovL3d3dy5nb29nbGUuY29tL2NvZGVzZWFyY2gvcD9obD1lbiNk
UjNZRWJpdG9qQS9DT1BZSU5HJnE9R2V0U3lzdGVtVGltZUFzRmlsZVRpbWUlMjBsaWNlbnNlOmJz
ZAotCi1UaGUgbGljZW5zZSBvZiB0aGlzIGNvZGUgaXM6Ci0KLUNvcHlyaWdodCAoYykgMjAwMy0y
MDA4LCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPiBhbmQgY29udHJpYnV0b3JzCi1BbGwgUmlnaHRz
IFJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLW1ldDoKLQotMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLQotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0K
LTMuIE5laXRoZXIgdGhlIG5hbWUocykgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9s
ZGVyKHMpIG5vciB0aGUKLSAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLUxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLU9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi1EQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLVRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2dsb2cvUkVBRE1FIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZ2xvZy9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MmZjNDg2MGVk
ZjdkNTYxOTVkODQwODEyODBhMmFjNWFlY2I1YmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Z2xvZy9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLVRoaXMgcmVwb3NpdG9y
eSBjb250YWlucyBhIEMrKyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR29vZ2xlIGxvZ2dpbmcKLW1v
ZHVsZS4gIERvY3VtZW50YXRpb24gZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpbiBkb2MvLgot
Ci1TZWUgSU5TVEFMTCBmb3IgKGdlbmVyaWMpIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgZm9y
IEMrKzogYmFzaWNhbGx5Ci0gICAuL2F1dG9nZW4uc2ggJiYgLi9jb25maWd1cmUgJiYgbWFrZSAm
JiBtYWtlIGluc3RhbGwKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2dsb2cvc3JjL2Jhc2UvY29tbWFuZGxpbmVmbGFncy5oIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvYmFzZS9jb21tYW5kbGluZWZsYWdzLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZDUwODkwMjY5YThmOTRmMTlmZDg4M2M5NzY2
NjI1MjMxZmU3ODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvYmFzZS9jb21t
YW5kbGluZWZsYWdzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLy8gQ29weXJp
Z2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIAot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLyAKLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vIAotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gLS0tCi0vLyBU
aGlzIGZpbGUgaXMgYSBjb21wYXRpYmlsaXR5IGxheWVyIHRoYXQgZGVmaW5lcyBHb29nbGUncyB2
ZXJzaW9uIG9mCi0vLyBjb21tYW5kIGxpbmUgZmxhZ3MgdGhhdCBhcmUgdXNlZCBmb3IgY29uZmln
dXJhdGlvbi4KLS8vCi0vLyBXZSBwdXQgZmxhZ3MgaW50byB0aGVpciBvd24gbmFtZXNwYWNlLiAg
SXQgaXMgcHVycG9zZWZ1bGx5Ci0vLyBuYW1lZCBpbiBhbiBvcGFxdWUgd2F5IHRoYXQgcGVvcGxl
IHNob3VsZCBoYXZlIHRyb3VibGUgdHlwaW5nCi0vLyBkaXJlY3RseS4gIFRoZSBpZGVhIGlzIHRo
YXQgREVGSU5FIHB1dHMgdGhlIGZsYWcgaW4gdGhlIHdlaXJkCi0vLyBuYW1lc3BhY2UsIGFuZCBE
RUNMQVJFIGltcG9ydHMgdGhlIGZsYWcgZnJvbSB0aGVyZSBpbnRvIHRoZQotLy8gY3VycmVudCBu
YW1lc3BhY2UuICBUaGUgbmV0IHJlc3VsdCBpcyB0byBmb3JjZSBwZW9wbGUgdG8gdXNlCi0vLyBE
RUNMQVJFIHRvIGdldCBhY2Nlc3MgdG8gYSBmbGFnLCByYXRoZXIgdGhhbiBzYXlpbmcKLS8vICAg
ZXh0ZXJuIGJvb2wgRkxBR1NfbG9ndG9zdGRlcnI7Ci0vLyBvciBzb21lIHN1Y2ggaW5zdGVhZC4g
IFdlIHdhbnQgdGhpcyBzbyB3ZSBjYW4gcHV0IGV4dHJhCi0vLyBmdW5jdGlvbmFsaXR5IChsaWtl
IHNhbml0eS1jaGVja2luZykgaW4gREVDTEFSRSBpZiB3ZSB3YW50LAotLy8gYW5kIG1ha2Ugc3Vy
ZSBpdCBpcyBwaWNrZWQgdXAgZXZlcnl3aGVyZS4KLS8vCi0vLyBXZSBhbHNvIHB1dCB0aGUgdHlw
ZSBvZiB0aGUgdmFyaWFibGUgaW4gdGhlIG5hbWVzcGFjZSwgc28gdGhhdAotLy8gcGVvcGxlIGNh
bid0IERFQ0xBUkVfaW50MzIgc29tZXRoaW5nIHRoYXQgdGhleSBERUZJTkVfYm9vbCdkCi0vLyBl
bHNld2hlcmUuCi0jaWZuZGVmIEJBU0VfQ09NTUFORExJTkVGTEFHU19IX18KLSNkZWZpbmUgQkFT
RV9DT01NQU5ETElORUZMQUdTX0hfXwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8
c3RyaW5nPgotI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgICAgIC8vIGZvciBtZW1jaHIK
LSNpbmNsdWRlIDxzdGRsaWIuaD4gICAgICAgICAgICAgICAvLyBmb3IgZ2V0ZW52Ci0KLSNpZmRl
ZiBIQVZFX0xJQl9HRkxBR1MKLQotI2luY2x1ZGUgPGdmbGFncy9nZmxhZ3MuaD4KLQotI2Vsc2UK
LQotI2luY2x1ZGUgImdsb2cvbG9nZ2luZy5oIgotCi0jZGVmaW5lIERFQ0xBUkVfVkFSSUFCTEUo
dHlwZSwgc2hvcnR0eXBlLCBuYW1lLCB0bikgICAgICAgICAgICAgICAgICAgICBcCi0gIG5hbWVz
cGFjZSBmTCMjc2hvcnR0eXBlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgZXh0ZXJuIEdPT0dMRV9HTE9HX0RMTF9ERUNMIHR5cGUgRkxBR1NfIyNu
YW1lOyAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHVzaW5nIGZM
IyNzaG9ydHR5cGU6OkZMQUdTXyMjbmFtZQotI2RlZmluZSBERUZJTkVfVkFSSUFCTEUodHlwZSwg
c2hvcnR0eXBlLCBuYW1lLCB2YWx1ZSwgbWVhbmluZywgdG4pICAgICAgXAotICBuYW1lc3BhY2Ug
ZkwjI3Nob3J0dHlwZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIEdPT0dMRV9HTE9HX0RMTF9ERUNMIHR5cGUgRkxBR1NfIyNuYW1lKHZhbHVlKTsg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNoYXIgRkxBR1Nfbm8jI25hbWU7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICB1c2luZyBmTCMjc2hvcnR0eXBlOjpGTEFHU18jI25hbWUKLQotLy8gYm9vbCBzcGVjaWFs
aXphdGlvbgotI2RlZmluZSBERUNMQVJFX2Jvb2wobmFtZSkgXAotICBERUNMQVJFX1ZBUklBQkxF
KGJvb2wsIEIsIG5hbWUsIGJvb2wpCi0jZGVmaW5lIERFRklORV9ib29sKG5hbWUsIHZhbHVlLCBt
ZWFuaW5nKSBcCi0gIERFRklORV9WQVJJQUJMRShib29sLCBCLCBuYW1lLCB2YWx1ZSwgbWVhbmlu
ZywgYm9vbCkKLQotLy8gaW50MzIgc3BlY2lhbGl6YXRpb24KLSNkZWZpbmUgREVDTEFSRV9pbnQz
MihuYW1lKSBcCi0gIERFQ0xBUkVfVkFSSUFCTEUoR09PR0xFX05BTUVTUEFDRTo6aW50MzIsIEks
IG5hbWUsIGludDMyKQotI2RlZmluZSBERUZJTkVfaW50MzIobmFtZSwgdmFsdWUsIG1lYW5pbmcp
IFwKLSAgREVGSU5FX1ZBUklBQkxFKEdPT0dMRV9OQU1FU1BBQ0U6OmludDMyLCBJLCBuYW1lLCB2
YWx1ZSwgbWVhbmluZywgaW50MzIpCi0KLS8vIFNwZWNpYWwgY2FzZSBmb3Igc3RyaW5nLCBiZWNh
dXNlIHdlIGhhdmUgdG8gc3BlY2lmeSB0aGUgbmFtZXNwYWNlCi0vLyBzdGQ6OnN0cmluZywgd2hp
Y2ggZG9lc24ndCBwbGF5IG5pY2VseSB3aXRoIG91ciBGTEFHX19uYW1lc3BhY2UgaGFja2VyeS4K
LSNkZWZpbmUgREVDTEFSRV9zdHJpbmcobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgbmFtZXNwYWNlIGZMUyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBleHRlcm4gR09PR0xFX0dM
T0dfRExMX0RFQ0wgc3RkOjpzdHJpbmcmIEZMQUdTXyMjbmFtZTsgICAgICAgICAgICAgIFwKLSAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgdXNpbmcgZkxTOjpGTEFHU18jI25hbWUKLSNkZWZpbmUgREVGSU5F
X3N0cmluZyhuYW1lLCB2YWx1ZSwgbWVhbmluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgbmFtZXNwYWNlIGZMUyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdGQ6OnN0cmluZyBGTEFHU18jI25hbWUjI19idWYo
dmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHT09HTEVfR0xPR19E
TExfREVDTCBzdGQ6OnN0cmluZyYgRkxBR1NfIyNuYW1lID0gRkxBR1NfIyNuYW1lIyNfYnVmOyBc
Ci0gICAgY2hhciBGTEFHU19ubyMjbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHVzaW5nIGZMUzo6RkxBR1Nf
IyNuYW1lCi0KLSNlbmRpZiAgLy8gSEFWRV9MSUJfR0ZMQUdTCi0KLS8vIERlZmluZSBHTE9HX0RF
RklORV8qIHVzaW5nIERFRklORV8qIC4gQnkgdXNpbmcgdGhlc2UgbWFjcm9zLCB3ZQotLy8gaGF2
ZSBHTE9HXyogZW52aXJvbiB2YXJpYWJsZXMgZXZlbiBpZiB3ZSBoYXZlIGdmbGFncyBpbnN0YWxs
ZWQuCi0vLwotLy8gSWYgYm90aCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgYSBmbGFnIGFy
ZSBzcGVjaWZpZWQsIHRoZSB2YWx1ZQotLy8gc3BlY2lmaWVkIGJ5IGEgZmxhZyB3aW5zLiBFLmcu
LCBpZiBHTE9HX3Y9MCBhbmQgLS12PTEsIHRoZQotLy8gdmVyYm9zaXR5IHdpbGwgYmUgMSwgbm90
IDAuCi0KLSNkZWZpbmUgR0xPR19ERUZJTkVfYm9vbChuYW1lLCB2YWx1ZSwgbWVhbmluZykgXAot
ICBERUZJTkVfYm9vbChuYW1lLCBFbnZUb0Jvb2woIkdMT0dfIiAjbmFtZSwgdmFsdWUpLCBtZWFu
aW5nKQotCi0jZGVmaW5lIEdMT0dfREVGSU5FX2ludDMyKG5hbWUsIHZhbHVlLCBtZWFuaW5nKSBc
Ci0gIERFRklORV9pbnQzMihuYW1lLCBFbnZUb0ludCgiR0xPR18iICNuYW1lLCB2YWx1ZSksIG1l
YW5pbmcpCi0KLSNkZWZpbmUgR0xPR19ERUZJTkVfc3RyaW5nKG5hbWUsIHZhbHVlLCBtZWFuaW5n
KSBcCi0gIERFRklORV9zdHJpbmcobmFtZSwgRW52VG9TdHJpbmcoIkdMT0dfIiAjbmFtZSwgdmFs
dWUpLCBtZWFuaW5nKQotCi0vLyBUaGVzZSBtYWNyb3MgKGNvdWxkIGJlIGZ1bmN0aW9ucywgYnV0
IEkgZG9uJ3Qgd2FudCB0byBib3RoZXIgd2l0aCBhIC5jYwotLy8gZmlsZSksIG1ha2UgaXQgZWFz
aWVyIHRvIGluaXRpYWxpemUgZmxhZ3MgZnJvbSB0aGUgZW52aXJvbm1lbnQuCi0KLSNkZWZpbmUg
RW52VG9TdHJpbmcoZW52bmFtZSwgZGZsdCkgICBcCi0gICghZ2V0ZW52KGVudm5hbWUpID8gKGRm
bHQpIDogZ2V0ZW52KGVudm5hbWUpKQotCi0jZGVmaW5lIEVudlRvQm9vbChlbnZuYW1lLCBkZmx0
KSAgIFwKLSAgKCFnZXRlbnYoZW52bmFtZSkgPyAoZGZsdCkgOiBtZW1jaHIoInRUeVkxXDAiLCBn
ZXRlbnYoZW52bmFtZSlbMF0sIDYpICE9IE5VTEwpCi0KLSNkZWZpbmUgRW52VG9JbnQoZW52bmFt
ZSwgZGZsdCkgIFwKLSAgKCFnZXRlbnYoZW52bmFtZSkgPyAoZGZsdCkgOiBzdHJ0b2woZ2V0ZW52
KGVudm5hbWUpLCBOVUxMLCAxMCkpCi0KLSNlbmRpZiAgLy8gQkFTRV9DT01NQU5ETElORUZMQUdT
X0hfXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xv
Zy9zcmMvYmFzZS9nb29nbGVpbml0LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9nbG9nL3NyYy9iYXNlL2dvb2dsZWluaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNWE4YjUxNWNkNjA0MDgyMDZlMGQ2ZGNjODZkMzY1OTVkMTNiMTRhOC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9nbG9nL3NyYy9iYXNlL2dvb2dsZWluaXQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDUxICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4KLS8v
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyAKLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8gCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLyAKLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLS8vIC0tLQotLy8gQXV0aG9yOiBKYWNvYiBIb2ZmbWFuLUFuZHJld3MK
LQotI2lmbmRlZiBfR09PR0xFSU5JVF9ICi0jZGVmaW5lIF9HT09HTEVJTklUX0gKLQotY2xhc3Mg
R29vZ2xlSW5pdGlhbGl6ZXIgewotIHB1YmxpYzoKLSAgdHlwZWRlZiB2b2lkICgqdm9pZF9mdW5j
dGlvbikodm9pZCk7Ci0gIEdvb2dsZUluaXRpYWxpemVyKGNvbnN0IGNoYXIqLCB2b2lkX2Z1bmN0
aW9uIGYpIHsKLSAgICBmKCk7Ci0gIH0KLX07Ci0KLSNkZWZpbmUgUkVHSVNURVJfTU9EVUxFX0lO
SVRJQUxJWkVSKG5hbWUsIGJvZHkpICAgICAgICAgICAgICAgICBcCi0gIG5hbWVzcGFjZSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0
YXRpYyB2b2lkIGdvb2dsZV9pbml0X21vZHVsZV8jI25hbWUgKCkgeyBib2R5OyB9ICAgICAgICAg
IFwKLSAgICBHb29nbGVJbml0aWFsaXplciBnb29nbGVfaW5pdGlhbGl6ZXJfbW9kdWxlXyMjbmFt
ZSgjbmFtZSwgICBcCi0gICAgICAgICAgICBnb29nbGVfaW5pdF9tb2R1bGVfIyNuYW1lKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLSNlbmRpZiAvKiBfR09PR0xFSU5JVF9IICov
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9nbG9nL3Ny
Yy9iYXNlL211dGV4LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9nbG9n
L3NyYy9iYXNlL211dGV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZDJiOTk1
MGVkYzI4YzYwZTNiNzUzZjA1MTg4MzJjMTJmNzIyNjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZ2xvZy9zcmMvYmFzZS9tdXRleC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAK
LS8vIENvcHlyaWdodCAoYykgMjAwNywgR29vZ2xlIEluYy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyAKLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8gCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLyAKLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0vLyAK
LS8vIC0tLQotLy8gQXV0aG9yOiBDcmFpZyBTaWx2ZXJzdGVpbi4KLS8vCi0vLyBBIHNpbXBsZSBt
dXRleCB3cmFwcGVyLCBzdXBwb3J0aW5nIGxvY2tzIGFuZCByZWFkLXdyaXRlIGxvY2tzLgotLy8g
WW91IHNob3VsZCBhc3N1bWUgdGhlIGxvY2tzIGFyZSAqbm90KiByZS1lbnRyYW50LgotLy8KLS8v
IFRvIHVzZTogeW91IHNob3VsZCBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNyb3MgaW4geW91ciBj
b25maWd1cmUuYWM6Ci0vLyAgIEFDWF9QVEhSRUFECi0vLyAgIEFDX1JXTE9DSwotLy8gVGhlIGxh
dHRlciBpcyBkZWZpbmVkIGluIC4uL2F1dG9jb25mLgotLy8KLS8vIFRoaXMgY2xhc3MgaXMgbWVh
bnQgdG8gYmUgaW50ZXJuYWwtb25seSBhbmQgc2hvdWxkIGJlIHdyYXBwZWQgYnkgYW4KLS8vIGlu
dGVybmFsIG5hbWVzcGFjZS4gIEJlZm9yZSB5b3UgdXNlIHRoaXMgbW9kdWxlLCBwbGVhc2UgZ2l2
ZSB0aGUKLS8vIG5hbWUgb2YgeW91ciBpbnRlcm5hbCBuYW1lc3BhY2UgZm9yIHRoaXMgbW9kdWxl
LiAgT3IsIGlmIHlvdSB3YW50Ci0vLyB0byBleHBvc2UgaXQsIHlvdSdsbCB3YW50IHRvIG1vdmUg
aXQgdG8gdGhlIEdvb2dsZSBuYW1lc3BhY2UuICBXZQotLy8gY2Fubm90IHB1dCB0aGlzIGNsYXNz
IGluIGdsb2JhbCBuYW1lc3BhY2UgYmVjYXVzZSB0aGVyZSBjYW4gYmUgc29tZQotLy8gcHJvYmxl
bXMgd2hlbiB3ZSBoYXZlIG11bHRpcGxlIHZlcnNpb25zIG9mIE11dGV4IGluIGVhY2ggc2hhcmVk
IG9iamVjdC4KLS8vCi0vLyBOT1RFOiBieSBkZWZhdWx0LCB3ZSBoYXZlICNpZmRlZidlZCBvdXQg
dGhlIFRyeUxvY2soKSBtZXRob2QuCi0vLyAgICAgICBUaGlzIGlzIGZvciB0d28gcmVhc29uczoK
LS8vIDEpIFRyeUxvY2soKSB1bmRlciBXaW5kb3dzIGlzIGEgYml0IGFubm95aW5nIChpdCByZXF1
aXJlcyBhCi0vLyAgICAjZGVmaW5lIHRvIGJlIGRlZmluZWQgdmVyeSBlYXJseSkuCi0vLyAyKSBU
cnlMb2NrKCkgaXMgYnJva2VuIGZvciBOT19USFJFQURTIG1vZGUsIGF0IGxlYXN0IGluIE5ERUJV
RwotLy8gICAgbW9kZS4KLS8vIElmIHlvdSBuZWVkIFRyeUxvY2soKSwgYW5kIGVpdGhlciB0aGVz
ZSB0d28gY2F2ZWF0cyBhcmUgbm90IGEKLS8vIHByb2JsZW0gZm9yIHlvdSwgb3IgeW91J3JlIHdp
bGxpbmcgdG8gd29yayBhcm91bmQgdGhlbSwgdGhlbgotLy8gZmVlbCBmcmVlIHRvICNkZWZpbmUg
R01VVEVYX1RSWUxPQ0ssIG9yIHRvIHJlbW92ZSB0aGUgI2lmZGVmcwotLy8gaW4gdGhlIGNvZGUg
YmVsb3cuCi0vLwotLy8gQ1lHV0lOIE5PVEU6IEN5Z3dpbiBzdXBwb3J0IGZvciByd2xvY2sgc2Vl
bXMgdG8gYmUgYnVnZ3k6Ci0vLyAgICBodHRwOi8vd3d3LmN5Z3dpbi5jb20vbWwvY3lnd2luLzIw
MDgtMTIvbXNnMDAwMTcuaHRtbAotLy8gQmVjYXVzZSBvZiB0aGF0LCB3ZSBtaWdodCBhcyB3ZWxs
IHVzZSB3aW5kb3dzIGxvY2tzIGZvcgotLy8gY3lnd2luLiAgVGhleSBzZWVtIHRvIGJlIG1vcmUg
cmVsaWFibGUgdGhhbiB0aGUgY3lnd2luIHB0aHJlYWRzIGxheWVyLgotLy8KLS8vIFRSSUNLWSBJ
TVBMRU1FTlRBVElPTiBOT1RFOgotLy8gVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byBiZSBzYWZl
IHRvIHVzZSBkdXJpbmcKLS8vIGR5bmFtaWMtaW5pdGlhbGl6YXRpb24gLS0gdGhhdCBpcywgYnkg
Z2xvYmFsIGNvbnN0cnVjdG9ycyB0aGF0IGFyZQotLy8gcnVuIGJlZm9yZSBtYWluKCkgc3RhcnRz
LiAgVGhlIGlzc3VlIGluIHRoaXMgY2FzZSBpcyB0aGF0Ci0vLyBkeW5hbWljLWluaXRpYWxpemF0
aW9uIGhhcHBlbnMgaW4gYW4gdW5wcmVkaWN0YWJsZSBvcmRlciwgYW5kIGl0Ci0vLyBjb3VsZCBi
ZSB0aGF0IHNvbWVvbmUgZWxzZSdzIGR5bmFtaWMgaW5pdGlhbGl6ZXIgY291bGQgY2FsbCBhCi0v
LyBmdW5jdGlvbiB0aGF0IHRyaWVzIHRvIGFjcXVpcmUgdGhpcyBtdXRleCAtLSBidXQgdGhhdCBh
bGwgaGFwcGVucwotLy8gYmVmb3JlIHRoaXMgbXV0ZXgncyBjb25zdHJ1Y3RvciBoYXMgcnVuLiAg
KFRoaXMgY2FuIGhhcHBlbiBldmVuIGlmCi0vLyB0aGUgbXV0ZXggYW5kIHRoZSBmdW5jdGlvbiB0
aGF0IHVzZXMgdGhlIG11dGV4IGFyZSBpbiB0aGUgc2FtZSAuY2MKLS8vIGZpbGUuKSAgQmFzaWNh
bGx5LCBiZWNhdXNlIE11dGV4IGRvZXMgbm9uLXRyaXZpYWwgd29yayBpbiBpdHMKLS8vIGNvbnN0
cnVjdG9yLCBpdCdzIG5vdCwgaW4gdGhlIG5haXZlIGltcGxlbWVudGF0aW9uLCBzYWZlIHRvIHVz
ZQotLy8gYmVmb3JlIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24gaGFzIHJ1biBvbiBpdC4KLS8vCi0v
LyBUaGUgc29sdXRpb24gdXNlZCBoZXJlIGlzIHRvIHBhaXIgdGhlIGFjdHVhbCBtdXRleCBwcmlt
aXRpdmUgd2l0aCBhCi0vLyBib29sIHRoYXQgaXMgc2V0IHRvIHRydWUgd2hlbiB0aGUgbXV0ZXgg
aXMgZHluYW1pY2FsbHkgaW5pdGlhbGl6ZWQuCi0vLyAoQmVmb3JlIHRoYXQgaXQncyBmYWxzZS4p
ICBUaGVuIHdlIG1vZGlmeSBhbGwgbXV0ZXggcm91dGluZXMgdG8KLS8vIGxvb2sgYXQgdGhlIGJv
b2wsIGFuZCBub3QgdHJ5IHRvIGxvY2svdW5sb2NrIHVudGlsIHRoZSBib29sIG1ha2VzCi0vLyBp
dCB0byB0cnVlICh3aGljaCBoYXBwZW5zIGFmdGVyIHRoZSBNdXRleCBjb25zdHJ1Y3RvciBoYXMg
cnVuLikKLS8vCi0vLyBUaGlzIHdvcmtzIGJlY2F1c2UgYmVmb3JlIG1haW4oKSBzdGFydHMgLS0g
cGFydGljdWxhcmx5LCBkdXJpbmcKLS8vIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24gLS0gdGhlcmUg
YXJlIG5vIHRocmVhZHMsIHNvIGEpIGl0J3Mgb2sgdGhhdAotLy8gdGhlIG11dGV4IG9wZXJhdGlv
bnMgYXJlIGEgbm8tb3AsIHNpbmNlIHdlIGRvbid0IG5lZWQgbG9ja2luZyB0aGVuCi0vLyBhbnl3
YXk7IGFuZCBiKSB3ZSBjYW4gYmUgcXVpdGUgY29uZmlkZW50IG91ciBib29sIHdvbid0IGNoYW5n
ZQotLy8gc3RhdGUgYmV0d2VlbiBhIGNhbGwgdG8gTG9jaygpIGFuZCBhIGNhbGwgdG8gVW5sb2Nr
KCkgKHRoYXQgd291bGQKLS8vIHJlcXVpcmUgYSBnbG9iYWwgY29uc3RydWN0b3IgaW4gb25lIHRy
YW5zbGF0aW9uIHVuaXQgdG8gY2FsbCBMb2NrKCkKLS8vIGFuZCBhbm90aGVyIGdsb2JhbCBjb25z
dHJ1Y3RvciBpbiBhbm90aGVyIHRyYW5zbGF0aW9uIHVuaXQgdG8gY2FsbAotLy8gVW5sb2NrKCkg
bGF0ZXIsIHdoaWNoIGlzIHByZXR0eSBwZXJ2ZXJzZSkuCi0vLwotLy8gVGhhdCBzYWlkLCBpdCdz
IHRyaWNreSwgYW5kIGNhbiBjb25jZWl2YWJseSBmYWlsOyBpdCdzIHNhZmVzdCB0bwotLy8gYXZv
aWQgdHJ5aW5nIHRvIGFjcXVpcmUgYSBtdXRleCBpbiBhIGdsb2JhbCBjb25zdHJ1Y3RvciwgaWYg
eW91Ci0vLyBjYW4uICBPbmUgd2F5IGl0IGNhbiBmYWlsIGlzIHRoYXQgYSByZWFsbHkgc21hcnQg
Y29tcGlsZXIgbWlnaHQKLS8vIGluaXRpYWxpemUgdGhlIGJvb2wgdG8gdHJ1ZSBhdCBzdGF0aWMt
aW5pdGlhbGl6YXRpb24gdGltZSAodG9vCi0vLyBlYXJseSkgcmF0aGVyIHRoYW4gYXQgZHluYW1p
Yy1pbml0aWFsaXphdGlvbiB0aW1lLiAgVG8gZGlzY291cmFnZQotLy8gdGhhdCwgd2Ugc2V0IGlz
X3NhZmVfIHRvIHRydWUgaW4gY29kZSAobm90IHRoZSBjb25zdHJ1Y3RvcgotLy8gY29sb24taW5p
dGlhbGl6ZXIpIGFuZCBzZXQgaXQgdG8gdHJ1ZSB2aWEgYSBmdW5jdGlvbiB0aGF0IGFsd2F5cwot
Ly8gZXZhbHVhdGVzIHRvIHRydWUsIGJ1dCB0aGF0IHRoZSBjb21waWxlciBjYW4ndCBrbm93IGFs
d2F5cwotLy8gZXZhbHVhdGVzIHRvIHRydWUuICBUaGlzIHNob3VsZCBiZSBnb29kIGVub3VnaC4K
LQotI2lmbmRlZiBHT09HTEVfTVVURVhfSF8KLSNkZWZpbmUgR09PR0xFX01VVEVYX0hfCi0KLSNp
bmNsdWRlICJjb25maWcuaCIgICAgICAgICAgIC8vIHRvIGZpZ3VyZSBvdXQgcHRocmVhZHMgc3Vw
cG9ydAotCi0jaWYgZGVmaW5lZChOT19USFJFQURTKQotICB0eXBlZGVmIGludCBNdXRleFR5cGU7
ICAgICAgLy8gdG8ga2VlcCBhIGxvY2stY291bnQKLSNlbGlmIGRlZmluZWQoX1dJTjMyKSB8fCBk
ZWZpbmVkKF9fQ1lHV0lOMzJfXykgfHwgZGVmaW5lZChfX0NZR1dJTjY0X18pCi0jIGlmbmRlZiBX
SU4zMl9MRUFOX0FORF9NRUFOCi0jICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTiAgLy8gV2Ug
b25seSBuZWVkIG1pbmltYWwgaW5jbHVkZXMKLSMgZW5kaWYKLSMgaWZkZWYgR01VVEVYX1RSWUxP
Q0sKLSAgLy8gV2UgbmVlZCBXaW5kb3dzIE5UIG9yIGxhdGVyIGZvciBUcnlFbnRlckNyaXRpY2Fs
U2VjdGlvbigpLiAgSWYgeW91Ci0gIC8vIGRvbid0IG5lZWQgdGhhdCBmdW5jdGlvbmFsaXR5LCB5
b3UgY2FuIHJlbW92ZSB0aGVzZSBfV0lOMzJfV0lOTlQKLSAgLy8gbGluZXMsIGFuZCBjaGFuZ2Ug
VHJ5TG9jaygpIHRvIGFzc2VydCgwKSBvciBzb21ldGhpbmcuCi0jICAgaWZuZGVmIF9XSU4zMl9X
SU5OVAotIyAgICAgZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA0MDAKLSMgICBlbmRpZgotIyBlbmRp
ZgotLy8gVG8gYXZvaWQgbWFjcm8gZGVmaW5pdGlvbiBvZiBFUlJPUi4KLSMgaWZuZGVmIE5PR0RJ
Ci0jICBkZWZpbmUgTk9HREkKLSMgZW5kaWYKLS8vIFRvIGF2b2lkIG1hY3JvIGRlZmluaXRpb24g
b2YgbWluL21heC4KLSMgaWZuZGVmIE5PTUlOTUFYCi0jICBkZWZpbmUgTk9NSU5NQVgKLSMgZW5k
aWYKLSMgaW5jbHVkZSA8d2luZG93cy5oPgotICB0eXBlZGVmIENSSVRJQ0FMX1NFQ1RJT04gTXV0
ZXhUeXBlOwotI2VsaWYgZGVmaW5lZChIQVZFX1BUSFJFQUQpICYmIGRlZmluZWQoSEFWRV9SV0xP
Q0spCi0gIC8vIE5lZWRlZCBmb3IgcHRocmVhZF9yd2xvY2tfKi4gIElmIGl0IGNhdXNlcyBwcm9i
bGVtcywgeW91IGNvdWxkIHRha2UgaXQKLSAgLy8gb3V0LCBidXQgdGhlbiB5b3UnZCBoYXZlIHRv
IHVuc2V0IEhBVkVfUldMT0NLIChhdCBsZWFzdCBvbiBsaW51eCAtLSBpdAotICAvLyAqZG9lcyog
Y2F1c2UgcHJvYmxlbXMgZm9yIEZyZWVCU0QsIG9yIE1hY09TWCwgYnV0IGlzbid0IG5lZWRlZAot
ICAvLyBmb3IgbG9ja2luZyB0aGVyZS4pCi0jIGlmZGVmIF9fbGludXhfXwotIyAgIGlmbmRlZiBf
WE9QRU5fU09VUkNFICAvLyBTb21lIG90aGVyIGhlYWRlciBtaWdodCBoYXZlIGFscmVhZHkgc2V0
IGl0IGZvciB1cy4KLSMgICAgIGRlZmluZSBfWE9QRU5fU09VUkNFIDUwMCAgLy8gbWF5IGJlIG5l
ZWRlZCB0byBnZXQgdGhlIHJ3bG9jayBjYWxscwotIyAgIGVuZGlmCi0jIGVuZGlmCi0jIGluY2x1
ZGUgPHB0aHJlYWQuaD4KLSAgdHlwZWRlZiBwdGhyZWFkX3J3bG9ja190IE11dGV4VHlwZTsKLSNl
bGlmIGRlZmluZWQoSEFWRV9QVEhSRUFEKQotIyBpbmNsdWRlIDxwdGhyZWFkLmg+Ci0gIHR5cGVk
ZWYgcHRocmVhZF9tdXRleF90IE11dGV4VHlwZTsKLSNlbHNlCi0jIGVycm9yIE5lZWQgdG8gaW1w
bGVtZW50IG11dGV4LmggZm9yIHlvdXIgYXJjaGl0ZWN0dXJlLCBvciAjZGVmaW5lIE5PX1RIUkVB
RFMKLSNlbmRpZgotCi0vLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlc2UgaGVhZGVyIGZpbGVzIGFm
dGVyIGRlZmluaW5nIF9YT1BFTl9TT1VSQ0UKLS8vIGFzIHRoZXkgbWF5IGRlZmluZSB0aGUgX1hP
UEVOX1NPVVJDRSBtYWNyby4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIu
aD4gICAgICAvLyBmb3IgYWJvcnQoKQotCi0jZGVmaW5lIE1VVEVYX05BTUVTUEFDRSBnbG9nX2lu
dGVybmFsX25hbWVzcGFjZV8KLQotbmFtZXNwYWNlIE1VVEVYX05BTUVTUEFDRSB7Ci0KLWNsYXNz
IE11dGV4IHsKLSBwdWJsaWM6Ci0gIC8vIENyZWF0ZSBhIE11dGV4IHRoYXQgaXMgbm90IGhlbGQg
YnkgYW55Ym9keS4gIFRoaXMgY29uc3RydWN0b3IgaXMKLSAgLy8gdHlwaWNhbGx5IHVzZWQgZm9y
IE11dGV4ZXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwIG9yIHRoZSBzdGFjay4KLSAgLy8gU2VlIGJl
bG93IGZvciBhIHJlY29tbWVuZGF0aW9uIGZvciBjb25zdHJ1Y3RpbmcgZ2xvYmFsIE11dGV4Ci0g
IC8vIG9iamVjdHMuCi0gIGlubGluZSBNdXRleCgpOwotCi0gIC8vIERlc3RydWN0b3IKLSAgaW5s
aW5lIH5NdXRleCgpOwotCi0gIGlubGluZSB2b2lkIExvY2soKTsgICAgLy8gQmxvY2sgaWYgbmVl
ZGVkIHVudGlsIGZyZWUgdGhlbiBhY3F1aXJlIGV4Y2x1c2l2ZWx5Ci0gIGlubGluZSB2b2lkIFVu
bG9jaygpOyAgLy8gUmVsZWFzZSBhIGxvY2sgYWNxdWlyZWQgdmlhIExvY2soKQotI2lmZGVmIEdN
VVRFWF9UUllMT0NLCi0gIGlubGluZSBib29sIFRyeUxvY2soKTsgLy8gSWYgZnJlZSwgTG9jaygp
IGFuZCByZXR1cm4gdHJ1ZSwgZWxzZSByZXR1cm4gZmFsc2UKLSNlbmRpZgotICAvLyBOb3RlIHRo
YXQgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgcmVhZC13cml0ZSBsb2NrcywgdGhlc2Ug
bWF5Ci0gIC8vIGJlIGltcGxlbWVudGVkIGFzIHN5bm9ueW1zIHRvIExvY2soKSBhbmQgVW5sb2Nr
KCkuICBTbyB5b3UgY2FuIHVzZQotICAvLyB0aGVzZSBmb3IgZWZmaWNpZW5jeSwgYnV0IGRvbid0
IHVzZSB0aGVtIGFueXBsYWNlIHdoZXJlIGJlaW5nIGFibGUKLSAgLy8gdG8gZG8gc2hhcmVkIHJl
YWRzIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBkZWFkbG9jay4KLSAgaW5saW5lIHZvaWQgUmVhZGVy
TG9jaygpOyAgIC8vIEJsb2NrIHVudGlsIGZyZWUgb3Igc2hhcmVkIHRoZW4gYWNxdWlyZSBhIHNo
YXJlCi0gIGlubGluZSB2b2lkIFJlYWRlclVubG9jaygpOyAvLyBSZWxlYXNlIGEgcmVhZCBzaGFy
ZSBvZiB0aGlzIE11dGV4Ci0gIGlubGluZSB2b2lkIFdyaXRlckxvY2soKSB7IExvY2soKTsgfSAg
ICAgLy8gQWNxdWlyZSBhbiBleGNsdXNpdmUgbG9jawotICBpbmxpbmUgdm9pZCBXcml0ZXJVbmxv
Y2soKSB7IFVubG9jaygpOyB9IC8vIFJlbGVhc2UgYSBsb2NrIGZyb20gV3JpdGVyTG9jaygpCi0K
LSAgLy8gVE9ETyhoYW1hamkpOiBEbyBub3RoaW5nLCBpbXBsZW1lbnQgY29ycmVjdGx5LgotICBp
bmxpbmUgdm9pZCBBc3NlcnRIZWxkKCkge30KLQotIHByaXZhdGU6Ci0gIE11dGV4VHlwZSBtdXRl
eF87Ci0gIC8vIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvbXBpbGVyIHNldHMgaXNf
c2FmZV8gdG8gdHJ1ZSBvbmx5Ci0gIC8vIHdoZW4gd2UgdGVsbCBpdCB0bywgYW5kIG5ldmVyIG1h
a2VzIGFzc3VtcHRpb25zIGlzX3NhZmVfIGlzCi0gIC8vIGFsd2F5cyB0cnVlLiAgdm9sYXRpbGUg
aXMgdGhlIG1vc3QgcmVsaWFibGUgd2F5IHRvIGRvIHRoYXQuCi0gIHZvbGF0aWxlIGJvb2wgaXNf
c2FmZV87Ci0KLSAgaW5saW5lIHZvaWQgU2V0SXNTYWZlKCkgeyBpc19zYWZlXyA9IHRydWU7IH0K
LQotICAvLyBDYXRjaCB0aGUgZXJyb3Igb2Ygd3JpdGluZyBNdXRleCB3aGVuIGludGVuZGluZyBN
dXRleExvY2suCi0gIE11dGV4KE11dGV4KiAvKmlnbm9yZWQqLykge30KLSAgLy8gRGlzYWxsb3cg
ImV2aWwiIGNvbnN0cnVjdG9ycwotICBNdXRleChjb25zdCBNdXRleCYpOwotICB2b2lkIG9wZXJh
dG9yPShjb25zdCBNdXRleCYpOwotfTsKLQotLy8gTm93IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBN
dXRleCBmb3IgdmFyaW91cyBzeXN0ZW1zCi0jaWYgZGVmaW5lZChOT19USFJFQURTKQotCi0vLyBX
aGVuIHdlIGRvbid0IGhhdmUgdGhyZWFkcywgd2UgY2FuIGJlIGVpdGhlciByZWFkaW5nIG9yIHdy
aXRpbmcsCi0vLyBidXQgbm90IGJvdGguICBXZSBjYW4gaGF2ZSBsb3RzIG9mIHJlYWRlcnMgYXQg
b25jZSAoaW4gbm8tdGhyZWFkcwotLy8gbW9kZSwgdGhhdCdzIG1vc3QgbGlrZWx5IHRvIGhhcHBl
biBpbiByZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMpLAotLy8gYnV0IG9ubHkgb25lIHdyaXRlci4g
IFdlIHJlcHJlc2VudCB0aGlzIGJ5IGhhdmluZyBtdXRleF8gYmUgLTEgd2hlbgotLy8gd3JpdGlu
ZyBhbmQgYSBudW1iZXIgPiAwIHdoZW4gcmVhZGluZyAoYW5kIDAgd2hlbiBubyBsb2NrIGlzIGhl
bGQpLgotLy8KLS8vIEluIGRlYnVnIG1vZGUsIHdlIGFzc2VydCB0aGVzZSBpbnZhcmlhbnRzLCB3
aGlsZSBpbiBub24tZGVidWcgbW9kZQotLy8gd2UgZG8gbm90aGluZywgZm9yIGVmZmljaWVuY3ku
ICBUaGF0J3Mgd2h5IGV2ZXJ5dGhpbmcgaXMgaW4gYW4KLS8vIGFzc2VydC4KLQotTXV0ZXg6Ok11
dGV4KCkgOiBtdXRleF8oMCkgeyB9Ci1NdXRleDo6fk11dGV4KCkgICAgICAgICAgICB7IGFzc2Vy
dChtdXRleF8gPT0gMCk7IH0KLXZvaWQgTXV0ZXg6OkxvY2soKSAgICAgICAgIHsgYXNzZXJ0KC0t
bXV0ZXhfID09IC0xKTsgfQotdm9pZCBNdXRleDo6VW5sb2NrKCkgICAgICAgeyBhc3NlcnQobXV0
ZXhfKysgPT0gLTEpOyB9Ci0jaWZkZWYgR01VVEVYX1RSWUxPQ0sKLWJvb2wgTXV0ZXg6OlRyeUxv
Y2soKSAgICAgIHsgaWYgKG11dGV4XykgcmV0dXJuIGZhbHNlOyBMb2NrKCk7IHJldHVybiB0cnVl
OyB9Ci0jZW5kaWYKLXZvaWQgTXV0ZXg6OlJlYWRlckxvY2soKSAgIHsgYXNzZXJ0KCsrbXV0ZXhf
ID4gMCk7IH0KLXZvaWQgTXV0ZXg6OlJlYWRlclVubG9jaygpIHsgYXNzZXJ0KG11dGV4Xy0tID4g
MCk7IH0KLQotI2VsaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU4zMl9fKSB8
fCBkZWZpbmVkKF9fQ1lHV0lONjRfXykKLQotTXV0ZXg6Ok11dGV4KCkgICAgICAgICAgICAgeyBJ
bml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZtdXRleF8pOyBTZXRJc1NhZmUoKTsgfQotTXV0ZXg6
On5NdXRleCgpICAgICAgICAgICAgeyBEZWxldGVDcml0aWNhbFNlY3Rpb24oJm11dGV4Xyk7IH0K
LXZvaWQgTXV0ZXg6OkxvY2soKSAgICAgICAgIHsgaWYgKGlzX3NhZmVfKSBFbnRlckNyaXRpY2Fs
U2VjdGlvbigmbXV0ZXhfKTsgfQotdm9pZCBNdXRleDo6VW5sb2NrKCkgICAgICAgeyBpZiAoaXNf
c2FmZV8pIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZtdXRleF8pOyB9Ci0jaWZkZWYgR01VVEVYX1RS
WUxPQ0sKLWJvb2wgTXV0ZXg6OlRyeUxvY2soKSAgICAgIHsgcmV0dXJuIGlzX3NhZmVfID8KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyeUVudGVyQ3JpdGljYWxTZWN0aW9uKCZt
dXRleF8pICE9IDAgOiB0cnVlOyB9Ci0jZW5kaWYKLXZvaWQgTXV0ZXg6OlJlYWRlckxvY2soKSAg
IHsgTG9jaygpOyB9ICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSByZWFkLXdyaXRlIGxvY2tzCi12b2lk
IE11dGV4OjpSZWFkZXJVbmxvY2soKSB7IFVubG9jaygpOyB9Ci0KLSNlbGlmIGRlZmluZWQoSEFW
RV9QVEhSRUFEKSAmJiBkZWZpbmVkKEhBVkVfUldMT0NLKQotCi0jZGVmaW5lIFNBRkVfUFRIUkVB
RChmbmNhbGwpICBkbyB7ICAgLyogcnVuIGZuY2FsbCBpZiBpc19zYWZlXyBpcyB0cnVlICovICBc
Ci0gIGlmIChpc19zYWZlXyAmJiBmbmNhbGwoJm11dGV4XykgIT0gMCkgYWJvcnQoKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlICgwKQotCi1NdXRleDo6TXV0ZXgoKSB7Ci0g
IFNldElzU2FmZSgpOwotICBpZiAoaXNfc2FmZV8gJiYgcHRocmVhZF9yd2xvY2tfaW5pdCgmbXV0
ZXhfLCBOVUxMKSAhPSAwKSBhYm9ydCgpOwotfQotTXV0ZXg6On5NdXRleCgpICAgICAgICAgICAg
eyBTQUZFX1BUSFJFQUQocHRocmVhZF9yd2xvY2tfZGVzdHJveSk7IH0KLXZvaWQgTXV0ZXg6Okxv
Y2soKSAgICAgICAgIHsgU0FGRV9QVEhSRUFEKHB0aHJlYWRfcndsb2NrX3dybG9jayk7IH0KLXZv
aWQgTXV0ZXg6OlVubG9jaygpICAgICAgIHsgU0FGRV9QVEhSRUFEKHB0aHJlYWRfcndsb2NrX3Vu
bG9jayk7IH0KLSNpZmRlZiBHTVVURVhfVFJZTE9DSwotYm9vbCBNdXRleDo6VHJ5TG9jaygpICAg
ICAgeyByZXR1cm4gaXNfc2FmZV8gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrKCZtdXRleF8pID09IDAgOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZTsgfQotI2VuZGlmCi12b2lkIE11dGV4OjpSZWFk
ZXJMb2NrKCkgICB7IFNBRkVfUFRIUkVBRChwdGhyZWFkX3J3bG9ja19yZGxvY2spOyB9Ci12b2lk
IE11dGV4OjpSZWFkZXJVbmxvY2soKSB7IFNBRkVfUFRIUkVBRChwdGhyZWFkX3J3bG9ja191bmxv
Y2spOyB9Ci0jdW5kZWYgU0FGRV9QVEhSRUFECi0KLSNlbGlmIGRlZmluZWQoSEFWRV9QVEhSRUFE
KQotCi0jZGVmaW5lIFNBRkVfUFRIUkVBRChmbmNhbGwpICBkbyB7ICAgLyogcnVuIGZuY2FsbCBp
ZiBpc19zYWZlXyBpcyB0cnVlICovICBcCi0gIGlmIChpc19zYWZlXyAmJiBmbmNhbGwoJm11dGV4
XykgIT0gMCkgYWJvcnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlICgw
KQotCi1NdXRleDo6TXV0ZXgoKSAgICAgICAgICAgICB7Ci0gIFNldElzU2FmZSgpOwotICBpZiAo
aXNfc2FmZV8gJiYgcHRocmVhZF9tdXRleF9pbml0KCZtdXRleF8sIE5VTEwpICE9IDApIGFib3J0
KCk7Ci19Ci1NdXRleDo6fk11dGV4KCkgICAgICAgICAgICB7IFNBRkVfUFRIUkVBRChwdGhyZWFk
X211dGV4X2Rlc3Ryb3kpOyB9Ci12b2lkIE11dGV4OjpMb2NrKCkgICAgICAgICB7IFNBRkVfUFRI
UkVBRChwdGhyZWFkX211dGV4X2xvY2spOyB9Ci12b2lkIE11dGV4OjpVbmxvY2soKSAgICAgICB7
IFNBRkVfUFRIUkVBRChwdGhyZWFkX211dGV4X3VubG9jayk7IH0KLSNpZmRlZiBHTVVURVhfVFJZ
TE9DSwotYm9vbCBNdXRleDo6VHJ5TG9jaygpICAgICAgeyByZXR1cm4gaXNfc2FmZV8gPwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90cnlsb2NrKCZtdXRl
eF8pID09IDAgOiB0cnVlOyB9Ci0jZW5kaWYKLXZvaWQgTXV0ZXg6OlJlYWRlckxvY2soKSAgIHsg
TG9jaygpOyB9Ci12b2lkIE11dGV4OjpSZWFkZXJVbmxvY2soKSB7IFVubG9jaygpOyB9Ci0jdW5k
ZWYgU0FGRV9QVEhSRUFECi0KLSNlbmRpZgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU29t
ZSBoZWxwZXIgY2xhc3NlcwotCi0vLyBNdXRleExvY2sobXUpIGFjcXVpcmVzIG11IHdoZW4gY29u
c3RydWN0ZWQgYW5kIHJlbGVhc2VzIGl0IHdoZW4gZGVzdHJveWVkLgotY2xhc3MgTXV0ZXhMb2Nr
IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IE11dGV4TG9jayhNdXRleCAqbXUpIDogbXVfKG11KSB7
IG11Xy0+TG9jaygpOyB9Ci0gIH5NdXRleExvY2soKSB7IG11Xy0+VW5sb2NrKCk7IH0KLSBwcml2
YXRlOgotICBNdXRleCAqIGNvbnN0IG11XzsKLSAgLy8gRGlzYWxsb3cgImV2aWwiIGNvbnN0cnVj
dG9ycwotICBNdXRleExvY2soY29uc3QgTXV0ZXhMb2NrJik7Ci0gIHZvaWQgb3BlcmF0b3I9KGNv
bnN0IE11dGV4TG9jayYpOwotfTsKLQotLy8gUmVhZGVyTXV0ZXhMb2NrIGFuZCBXcml0ZXJNdXRl
eExvY2sgZG8gdGhlIHNhbWUsIGZvciByd2xvY2tzCi1jbGFzcyBSZWFkZXJNdXRleExvY2sgewot
IHB1YmxpYzoKLSAgZXhwbGljaXQgUmVhZGVyTXV0ZXhMb2NrKE11dGV4ICptdSkgOiBtdV8obXUp
IHsgbXVfLT5SZWFkZXJMb2NrKCk7IH0KLSAgflJlYWRlck11dGV4TG9jaygpIHsgbXVfLT5SZWFk
ZXJVbmxvY2soKTsgfQotIHByaXZhdGU6Ci0gIE11dGV4ICogY29uc3QgbXVfOwotICAvLyBEaXNh
bGxvdyAiZXZpbCIgY29uc3RydWN0b3JzCi0gIFJlYWRlck11dGV4TG9jayhjb25zdCBSZWFkZXJN
dXRleExvY2smKTsKLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgUmVhZGVyTXV0ZXhMb2NrJik7Ci19
OwotCi1jbGFzcyBXcml0ZXJNdXRleExvY2sgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgV3JpdGVy
TXV0ZXhMb2NrKE11dGV4ICptdSkgOiBtdV8obXUpIHsgbXVfLT5Xcml0ZXJMb2NrKCk7IH0KLSAg
fldyaXRlck11dGV4TG9jaygpIHsgbXVfLT5Xcml0ZXJVbmxvY2soKTsgfQotIHByaXZhdGU6Ci0g
IE11dGV4ICogY29uc3QgbXVfOwotICAvLyBEaXNhbGxvdyAiZXZpbCIgY29uc3RydWN0b3JzCi0g
IFdyaXRlck11dGV4TG9jayhjb25zdCBXcml0ZXJNdXRleExvY2smKTsKLSAgdm9pZCBvcGVyYXRv
cj0oY29uc3QgV3JpdGVyTXV0ZXhMb2NrJik7Ci19OwotCi0vLyBDYXRjaCBidWcgd2hlcmUgdmFy
aWFibGUgbmFtZSBpcyBvbWl0dGVkLCBlLmcuIE11dGV4TG9jayAoJm11KTsKLSNkZWZpbmUgTXV0
ZXhMb2NrKHgpIENPTVBJTEVfQVNTRVJUKDAsIG11dGV4X2xvY2tfZGVjbF9taXNzaW5nX3Zhcl9u
YW1lKQotI2RlZmluZSBSZWFkZXJNdXRleExvY2soeCkgQ09NUElMRV9BU1NFUlQoMCwgcm11dGV4
X2xvY2tfZGVjbF9taXNzaW5nX3Zhcl9uYW1lKQotI2RlZmluZSBXcml0ZXJNdXRleExvY2soeCkg
Q09NUElMRV9BU1NFUlQoMCwgd211dGV4X2xvY2tfZGVjbF9taXNzaW5nX3Zhcl9uYW1lKQotCi19
ICAvLyBuYW1lc3BhY2UgTVVURVhfTkFNRVNQQUNFCi0KLXVzaW5nIG5hbWVzcGFjZSBNVVRFWF9O
QU1FU1BBQ0U7Ci0KLSN1bmRlZiBNVVRFWF9OQU1FU1BBQ0UKLQotI2VuZGlmICAvKiAjZGVmaW5l
IEdPT0dMRV9NVVRFWF9IX18gKi8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2dsb2cvc3JjL2NvbmZpZy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZ2xvZy9zcmMvY29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGE5YTg5Nzk1MTg1OTNiMjM0NGY1MDg1Mzc5OWVkMDFlMjUzNmUyMDEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvY29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODAg
KzAsMCBAQAotLyogc3JjL2NvbmZpZy5oLiAgR2VuZXJhdGVkIGZyb20gY29uZmlnLmguaW4gYnkg
Y29uZmlndXJlLiAgKi8KLS8qIHNyYy9jb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZp
Z3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KLQotLyogZGVmaW5lIGlmIGdsb2cgZG9lc24ndCB1
c2UgUlRUSSAqLwotLyogI3VuZGVmIERJU0FCTEVfUlRUSSAqLwotCi0vKiBOYW1lc3BhY2UgZm9y
IEdvb2dsZSBjbGFzc2VzICovCi0jZGVmaW5lIEdPT0dMRV9OQU1FU1BBQ0UgZ29vZ2xlCi0KLS8q
IERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGRsYWRkcicgZnVuY3Rpb24gKi8KLSNkZWZpbmUgSEFW
RV9ETEFERFIgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhl
YWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0RMRkNOX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgPGV4ZWNpbmZvLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZF
X0VYRUNJTkZPX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGBmY250bCcgZnVuY3Rp
b24gKi8KLSNkZWZpbmUgSEFWRV9GQ05UTCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSA8Z2xvYi5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9HTE9CX0ggMQotCi0v
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAq
LwotI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHB0aHJlYWQnIGxpYnJhcnkgKC1scHRocmVhZCkuICovCi0jZGVmaW5lIEhBVkVfTElC
UFRIUkVBRCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGlidW53aW5kLmg+
IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0xJQlVOV0lORF9IIDEKLQotLyogZGVmaW5l
IGlmIHlvdSBoYXZlIGdvb2dsZSBnZmxhZ3MgbGlicmFyeSAqLwotLyogI3VuZGVmIEhBVkVfTElC
X0dGTEFHUyAqLwotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgZ29vZ2xlIGdtb2NrIGxpYnJhcnkg
Ki8KLS8qICN1bmRlZiBIQVZFX0xJQl9HTU9DSyAqLwotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUg
Z29vZ2xlIGd0ZXN0IGxpYnJhcnkgKi8KLS8qICN1bmRlZiBIQVZFX0xJQl9HVEVTVCAqLwotCi0v
KiBkZWZpbmUgaWYgeW91IGhhdmUgbGlidW53aW5kICovCi0vKiAjdW5kZWYgSEFWRV9MSUJfVU5X
SU5EICovCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRl
ciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKLQotLyogZGVmaW5lIGlmIHRoZSBj
b21waWxlciBpbXBsZW1lbnRzIG5hbWVzcGFjZXMgKi8KLSNkZWZpbmUgSEFWRV9OQU1FU1BBQ0VT
IDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncHJlYWQnIGZ1bmN0aW9uICovCi0jZGVm
aW5lIEhBVkVfUFJFQUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgUE9TSVggdGhyZWFkcyBs
aWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcy4gKi8KLSNkZWZpbmUgSEFWRV9QVEhSRUFEIDEKLQot
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwd2QuaD4gaGVhZGVyIGZpbGUuICovCi0j
ZGVmaW5lIEhBVkVfUFdEX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdwd3JpdGUn
IGZ1bmN0aW9uICovCi0jZGVmaW5lIEhBVkVfUFdSSVRFIDEKLQotLyogZGVmaW5lIGlmIHRoZSBj
b21waWxlciBpbXBsZW1lbnRzIHB0aHJlYWRfcndsb2NrXyogKi8KLSNkZWZpbmUgSEFWRV9SV0xP
Q0sgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdzaWdhY3Rpb24nIGZ1bmN0aW9uICov
Ci0jZGVmaW5lIEhBVkVfU0lHQUNUSU9OIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBg
c2lnYWx0c3RhY2snIGZ1bmN0aW9uICovCi0jZGVmaW5lIEhBVkVfU0lHQUxUU1RBQ0sgMQotCi0v
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8K
LSNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NURExJQl9IIDEKLQot
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAq
LwotI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NUUklOR19IIDEK
LQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXNjYWxsLmg+IGhlYWRlciBmaWxl
LiAqLwotLyogI3VuZGVmIEhBVkVfU1lTQ0FMTF9IICovCi0KLS8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSA8c3lzbG9nLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU0xP
R19IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFk
ZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEKLQotLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxzeXMvc3lzY2FsbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUg
SEFWRV9TWVNfU1lTQ0FMTF9IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxz
eXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKLQot
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUu
ICovCi0jZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPHN5cy91Y29udGV4dC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9T
WVNfVUNPTlRFWFRfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0
c25hbWUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1VUU05BTUVfSCAxCi0K
LS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dWNvbnRleHQuaD4gaGVhZGVyIGZpbGUu
ICovCi0vKiAjdW5kZWYgSEFWRV9VQ09OVEVYVF9IICovCi0KLS8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1VOSVNU
RF9IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bndpbmQuaD4gaGVhZGVy
IGZpbGUuICovCi0jZGVmaW5lIEhBVkVfVU5XSU5EX0ggMQotCi0vKiBkZWZpbmUgaWYgdGhlIGNv
bXBpbGVyIHN1cHBvcnRzIHVzaW5nIGV4cHJlc3Npb24gZm9yIG9wZXJhdG9yICovCi0jZGVmaW5l
IEhBVkVfVVNJTkdfT1BFUkFUT1IgMQotCi0vKiBkZWZpbmUgaWYgeW91ciBjb21waWxlciBoYXMg
X19hdHRyaWJ1dGVfXyAqLwotI2RlZmluZSBIQVZFX19fQVRUUklCVVRFX18gMQotCi0vKiBkZWZp
bmUgaWYgeW91ciBjb21waWxlciBoYXMgX19idWlsdGluX2V4cGVjdCAqLwotI2RlZmluZSBIQVZF
X19fQlVJTFRJTl9FWFBFQ1QgMQotCi0vKiBkZWZpbmUgaWYgeW91ciBjb21waWxlciBoYXMgX19z
eW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwICovCi0jZGVmaW5lIEhBVkVfX19TWU5DX1ZBTF9DT01Q
QVJFX0FORF9TV0FQIDEKLQotLyogRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IHdoZXJlIGxp
YnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy4gKi8KLSNkZWZpbmUgTFRfT0JKRElS
ICIubGlicy8iCi0KLS8qIE5hbWUgb2YgcGFja2FnZSAqLwotI2RlZmluZSBQQUNLQUdFICJnbG9n
IgotCi0vKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMg
cGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KLSNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIm9w
ZW5zb3VyY2VAZ29vZ2xlLmNvbSIKLQotLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhp
cyBwYWNrYWdlLiAqLwotI2RlZmluZSBQQUNLQUdFX05BTUUgImdsb2ciCi0KLS8qIERlZmluZSB0
byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUg
UEFDS0FHRV9TVFJJTkcgImdsb2cgMC4zLjUiCi0KLS8qIERlZmluZSB0byB0aGUgb25lIHN5bWJv
bCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9UQVJOQU1F
ICJnbG9nIgotCi0vKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAq
LwotI2RlZmluZSBQQUNLQUdFX1VSTCAiIgotCi0vKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2Yg
dGhpcyBwYWNrYWdlLiAqLwotI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIjAuMy41IgotCi0vKiBI
b3cgdG8gYWNjZXNzIHRoZSBQQyBmcm9tIGEgc3RydWN0IHVjb250ZXh0ICovCi0jZGVmaW5lIFBD
X0ZST01fVUNPTlRFWFQgdWNfbWNvbnRleHQtPl9fc3MuX19yaXAKLQotLyogRGVmaW5lIHRvIG5l
Y2Vzc2FyeSBzeW1ib2wgaWYgdGhpcyBjb25zdGFudCB1c2VzIGEgbm9uLXN0YW5kYXJkIG5hbWUg
b24KLSAgIHlvdXIgc3lzdGVtLiAqLwotLyogI3VuZGVmIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxF
ICovCi0KLS8qIFRoZSBzaXplIG9mIGB2b2lkIConLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICov
Ci0jZGVmaW5lIFNJWkVPRl9WT0lEX1AgOAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KLS8qICN1bmRlZiBTVERDX0hFQURFUlMgKi8KLQot
LyogdGhlIG5hbWVzcGFjZSB3aGVyZSBTVEwgY29kZSBsaWtlIHZlY3Rvcjw+IGlzIGRlZmluZWQg
Ki8KLSNkZWZpbmUgU1RMX05BTUVTUEFDRSBzdGQKLQotLyogbG9jYXRpb24gb2Ygc291cmNlIGNv
ZGUgKi8KLSNkZWZpbmUgVEVTVF9TUkNfRElSICIuIgotCi0vKiBWZXJzaW9uIG51bWJlciBvZiBw
YWNrYWdlICovCi0jZGVmaW5lIFZFUlNJT04gIjAuMy41IgotCi0vKiBTdG9wcyBwdXR0aW5nIHRo
ZSBjb2RlIGluc2lkZSB0aGUgR29vZ2xlIG5hbWVzcGFjZSAqLwotI2RlZmluZSBfRU5EX0dPT0dM
RV9OQU1FU1BBQ0VfIH0KLQotLyogUHV0cyBmb2xsb3dpbmcgY29kZSBpbnNpZGUgdGhlIEdvb2ds
ZSBuYW1lc3BhY2UgKi8KLSNkZWZpbmUgX1NUQVJUX0dPT0dMRV9OQU1FU1BBQ0VfIG5hbWVzcGFj
ZSBnb29nbGUgewpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZ2xvZy9zcmMvY29uZmlnLmguY21ha2UuaW4gYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9nbG9nL3NyYy9jb25maWcuaC5jbWFrZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYTk0NjQ1MTc0NzczYjIzZmJjNjljNGE3YTEzZWMzOGMzYzMyZTM3Mi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9nbG9nL3NyYy9jb25maWcuaC5jbWFrZS5pbgorKysgL2Rl
di9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKiBkZWZpbmUgaWYgZ2xvZyBkb2Vzbid0IHVzZSBS
VFRJICovCi0jY21ha2VkZWZpbmUgRElTQUJMRV9SVFRJCi0KLS8qIE5hbWVzcGFjZSBmb3IgR29v
Z2xlIGNsYXNzZXMgKi8KLSNjbWFrZWRlZmluZSBHT09HTEVfTkFNRVNQQUNFICR7R09PR0xFX05B
TUVTUEFDRX0KLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZGxhZGRyJyBmdW5jdGlvbiAq
LwotI2NtYWtlZGVmaW5lIEhBVkVfRExBRERSCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUg
YHNucHJpbnRmJyBmdW5jdGlvbiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfU05QUklOVEYKLQotLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KLSNj
bWFrZWRlZmluZSBIQVZFX0RMRkNOX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxleGVjaW5mby5oPiBoZWFkZXIgZmlsZS4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0VYRUNJTkZP
X0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBgZmNudGwnIGZ1bmN0aW9uICovCi0jY21h
a2VkZWZpbmUgSEFWRV9GQ05UTAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGds
b2IuaD4gaGVhZGVyIGZpbGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9HTE9CX0gKLQotLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNj
bWFrZWRlZmluZSBIQVZFX0lOVFRZUEVTX0ggJHtIQVZFX0lOVFRZUEVTX0h9Ci0KLS8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHRocmVhZCcgbGlicmFyeSAoLWxwdGhyZWFkKS4gKi8K
LSNjbWFrZWRlZmluZSBIQVZFX0xJQlBUSFJFQUQKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIDxsaWJ1bndpbmQuaD4gaGVhZGVyIGZpbGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9M
SUJVTldJTkRfSAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgZ29vZ2xlIGdmbGFncyBsaWJyYXJ5
ICovCi0jY21ha2VkZWZpbmUgSEFWRV9MSUJfR0ZMQUdTCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2
ZSBnb29nbGUgZ21vY2sgbGlicmFyeSAqLwotI2NtYWtlZGVmaW5lIEhBVkVfTElCX0dNT0NLCi0K
LS8qIGRlZmluZSBpZiB5b3UgaGF2ZSBnb29nbGUgZ3Rlc3QgbGlicmFyeSAqLwotI2NtYWtlZGVm
aW5lIEhBVkVfTElCX0dURVNUCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSBsaWJ1bndpbmQgKi8K
LSNjbWFrZWRlZmluZSBIQVZFX0xJQl9VTldJTkQKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9NRU1P
UllfSAotCi0vKiBkZWZpbmUgdG8gZGlzYWJsZSBtdWx0aXRocmVhZGluZyBzdXBwb3J0LiAqLwot
I2NtYWtlZGVmaW5lIE5PX1RIUkVBRFMKLQotLyogZGVmaW5lIGlmIHRoZSBjb21waWxlciBpbXBs
ZW1lbnRzIG5hbWVzcGFjZXMgKi8KLSNjbWFrZWRlZmluZSBIQVZFX05BTUVTUEFDRVMKLQotLyog
RGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncHJlYWQnIGZ1bmN0aW9uICovCi0jY21ha2VkZWZpbmUg
SEFWRV9QUkVBRAotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgUE9TSVggdGhyZWFkcyBsaWJyYXJp
ZXMgYW5kIGhlYWRlciBmaWxlcy4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX1BUSFJFQUQKLQotLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwd2QuaD4gaGVhZGVyIGZpbGUuICovCi0jY21h
a2VkZWZpbmUgSEFWRV9QV0RfSAotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdwd3JpdGUn
IGZ1bmN0aW9uICovCi0jY21ha2VkZWZpbmUgSEFWRV9QV1JJVEUKLQotLyogZGVmaW5lIGlmIHRo
ZSBjb21waWxlciBpbXBsZW1lbnRzIHB0aHJlYWRfcndsb2NrXyogKi8KLSNjbWFrZWRlZmluZSBI
QVZFX1JXTE9DSwotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdzaWdhY3Rpb24nIGZ1bmN0
aW9uICovCi0jY21ha2VkZWZpbmUgSEFWRV9TSUdBQ1RJT04KLQotLyogRGVmaW5lIGlmIHlvdSBo
YXZlIHRoZSBgc2lnYWx0c3RhY2snIGZ1bmN0aW9uICovCi0jY21ha2VkZWZpbmUgSEFWRV9TSUdB
TFRTVEFDSwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFk
ZXIgZmlsZS4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX1NURElOVF9IICR7SEFWRV9TVERJTlRfSH0K
LQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUu
ICovCi0jY21ha2VkZWZpbmUgSEFWRV9TVERMSUJfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9T
VFJJTkdTX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVh
ZGVyIGZpbGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9TVFJJTkdfSAotCi0vKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgPHN5c2NhbGwuaD4gaGVhZGVyIGZpbGUuICovCi0jY21ha2VkZWZp
bmUgSEFWRV9TWVNDQUxMX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXNs
b2cuaD4gaGVhZGVyIGZpbGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9TWVNMT0dfSAotCi0vKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLwot
I2NtYWtlZGVmaW5lIEhBVkVfU1lTX1NUQVRfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPHN5cy9zeXNjYWxsLmg+IGhlYWRlciBmaWxlLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVf
U1lTX1NZU0NBTExfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1l
Lmg+IGhlYWRlciBmaWxlLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfU1lTX1RJTUVfSAotCi0vKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8K
LSNjbWFrZWRlZmluZSBIQVZFX1NZU19UWVBFU19IICR7SEFWRV9TWVNfVFlQRVNfSH0KLQotLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdWNvbnRleHQuaD4gaGVhZGVyIGZpbGUu
ICovCi0jY21ha2VkZWZpbmUgSEFWRV9TWVNfVUNPTlRFWFRfSAotCi0vKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgPHN5cy91dHNuYW1lLmg+IGhlYWRlciBmaWxlLiAqLwotI2NtYWtlZGVm
aW5lIEhBVkVfU1lTX1VUU05BTUVfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PHVjb250ZXh0Lmg+IGhlYWRlciBmaWxlLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfVUNPTlRFWFRf
SAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmls
ZS4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX1VOSVNURF9IICR7SEFWRV9VTklTVERfSH0KLQotLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bndpbmQuaD4gaGVhZGVyIGZpbGUuICovCi0j
Y21ha2VkZWZpbmUgSEFWRV9VTldJTkRfSCAke0hBVkVfVU5XSU5EX0h9Ci0KLS8qIGRlZmluZSBp
ZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdXNpbmcgZXhwcmVzc2lvbiBmb3Igb3BlcmF0b3IgKi8K
LSNjbWFrZWRlZmluZSBIQVZFX1VTSU5HX09QRVJBVE9SCi0KLS8qIGRlZmluZSBpZiB5b3VyIGNv
bXBpbGVyIGhhcyBfX2F0dHJpYnV0ZV9fICovCi0jY21ha2VkZWZpbmUgSEFWRV9fX0FUVFJJQlVU
RV9fCi0KLS8qIGRlZmluZSBpZiB5b3VyIGNvbXBpbGVyIGhhcyBfX2J1aWx0aW5fZXhwZWN0ICov
Ci0jY21ha2VkZWZpbmUgSEFWRV9fX0JVSUxUSU5fRVhQRUNUICR7SEFWRV9fX0JVSUxUSU5fRVhQ
RUNUfQotCi0vKiBkZWZpbmUgaWYgeW91ciBjb21waWxlciBoYXMgX19zeW5jX3ZhbF9jb21wYXJl
X2FuZF9zd2FwICovCi0jY21ha2VkZWZpbmUgSEFWRV9fX1NZTkNfVkFMX0NPTVBBUkVfQU5EX1NX
QVAKLQotLyogRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3Rv
cmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy4KLSAgICovCi0jY21ha2VkZWZpbmUgTFRfT0JKRElS
Ci0KLS8qIE5hbWUgb2YgcGFja2FnZSAqLwotI2NtYWtlZGVmaW5lIFBBQ0tBR0UKLQotLyogRGVm
aW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hv
dWxkIGJlIHNlbnQuICovCi0jY21ha2VkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQKLQotLyogRGVm
aW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwotI2NtYWtlZGVmaW5lIFBB
Q0tBR0VfTkFNRQotCi0vKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0
aGlzIHBhY2thZ2UuICovCi0jY21ha2VkZWZpbmUgUEFDS0FHRV9TVFJJTkcKLQotLyogRGVmaW5l
IHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwotI2NtYWtl
ZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRQotCi0vKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3Ig
dGhpcyBwYWNrYWdlLiAqLwotI2NtYWtlZGVmaW5lIFBBQ0tBR0VfVVJMCi0KLS8qIERlZmluZSB0
byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCi0jY21ha2VkZWZpbmUgUEFDS0FHRV9W
RVJTSU9OCi0KLS8qIEhvdyB0byBhY2Nlc3MgdGhlIFBDIGZyb20gYSBzdHJ1Y3QgdWNvbnRleHQg
Ki8KLSNjbWFrZWRlZmluZSBQQ19GUk9NX1VDT05URVhUCi0KLS8qIERlZmluZSB0byBuZWNlc3Nh
cnkgc3ltYm9sIGlmIHRoaXMgY29uc3RhbnQgdXNlcyBhIG5vbi1zdGFuZGFyZCBuYW1lIG9uCi0g
ICB5b3VyIHN5c3RlbS4gKi8KLSNjbWFrZWRlZmluZSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRQot
Ci0vKiBUaGUgc2l6ZSBvZiBgdm9pZCAqJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI2Nt
YWtlZGVmaW5lIFNJWkVPRl9WT0lEX1AgJHtTSVpFT0ZfVk9JRF9QfQotCi0vKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KLSNjbWFrZWRlZmluZSBT
VERDX0hFQURFUlMKLQotLyogdGhlIG5hbWVzcGFjZSB3aGVyZSBTVEwgY29kZSBsaWtlIHZlY3Rv
cjw+IGlzIGRlZmluZWQgKi8KLSNjbWFrZWRlZmluZSBTVExfTkFNRVNQQUNFICR7U1RMX05BTUVT
UEFDRX0KLQotLyogbG9jYXRpb24gb2Ygc291cmNlIGNvZGUgKi8KLSNjbWFrZWRlZmluZSBURVNU
X1NSQ19ESVIgJHtURVNUX1NSQ19ESVJ9Ci0KLS8qIERlZmluZSB0byBuZWNlc3NhcnkgdGhyZWFk
LWxvY2FsIHN0b3JhZ2UgYXR0cmlidXRlLiAqLwotI2NtYWtlZGVmaW5lIEdMT0dfVEhSRUFEX0xP
Q0FMX1NUT1JBR0UgJHtHTE9HX1RIUkVBRF9MT0NBTF9TVE9SQUdFfQotCi0vKiBWZXJzaW9uIG51
bWJlciBvZiBwYWNrYWdlICovCi0jY21ha2VkZWZpbmUgVkVSU0lPTgotCi0vKiBTdG9wcyBwdXR0
aW5nIHRoZSBjb2RlIGluc2lkZSB0aGUgR29vZ2xlIG5hbWVzcGFjZSAqLwotI2NtYWtlZGVmaW5l
IF9FTkRfR09PR0xFX05BTUVTUEFDRV8gJHtfRU5EX0dPT0dMRV9OQU1FU1BBQ0VffQotCi0vKiBQ
dXRzIGZvbGxvd2luZyBjb2RlIGluc2lkZSB0aGUgR29vZ2xlIG5hbWVzcGFjZSAqLwotI2NtYWtl
ZGVmaW5lIF9TVEFSVF9HT09HTEVfTkFNRVNQQUNFXyAke19TVEFSVF9HT09HTEVfTkFNRVNQQUNF
X30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2dsb2cv
c3JjL2NvbmZpZy5oLmluIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xv
Zy9zcmMvY29uZmlnLmguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMGQyYWE1
NjYxNmNjZGQwMWE3N2M1ZTkyZWRjZjk3NmJmYjI4MDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZ2xvZy9zcmMvY29uZmlnLmguaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAot
Lyogc3JjL2NvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9o
ZWFkZXIuICAqLwotCi0vKiBkZWZpbmUgaWYgZ2xvZyBkb2Vzbid0IHVzZSBSVFRJICovCi0jdW5k
ZWYgRElTQUJMRV9SVFRJCi0KLS8qIE5hbWVzcGFjZSBmb3IgR29vZ2xlIGNsYXNzZXMgKi8KLSN1
bmRlZiBHT09HTEVfTkFNRVNQQUNFCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYGRsYWRk
cicgZnVuY3Rpb24gKi8KLSN1bmRlZiBIQVZFX0RMQUREUgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfRExGQ05f
SAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGV4ZWNpbmZvLmg+IGhlYWRlciBm
aWxlLiAqLwotI3VuZGVmIEhBVkVfRVhFQ0lORk9fSAotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlIGBmY250bCcgZnVuY3Rpb24gKi8KLSN1bmRlZiBIQVZFX0ZDTlRMCi0KLS8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8Z2xvYi5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZF
X0dMT0JfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhl
YWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfSU5UVFlQRVNfSAotCi0vKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHB0aHJlYWQnIGxpYnJhcnkgKC1scHRocmVhZCkuICovCi0jdW5kZWYg
SEFWRV9MSUJQVEhSRUFECi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGlidW53
aW5kLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfTElCVU5XSU5EX0gKLQotLyogZGVm
aW5lIGlmIHlvdSBoYXZlIGdvb2dsZSBnZmxhZ3MgbGlicmFyeSAqLwotI3VuZGVmIEhBVkVfTElC
X0dGTEFHUwotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgZ29vZ2xlIGdtb2NrIGxpYnJhcnkgKi8K
LSN1bmRlZiBIQVZFX0xJQl9HTU9DSwotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgZ29vZ2xlIGd0
ZXN0IGxpYnJhcnkgKi8KLSN1bmRlZiBIQVZFX0xJQl9HVEVTVAotCi0vKiBkZWZpbmUgaWYgeW91
IGhhdmUgbGlidW53aW5kICovCi0jdW5kZWYgSEFWRV9MSUJfVU5XSU5ECi0KLS8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhB
VkVfTUVNT1JZX0gKLQotLyogZGVmaW5lIGlmIHRoZSBjb21waWxlciBpbXBsZW1lbnRzIG5hbWVz
cGFjZXMgKi8KLSN1bmRlZiBIQVZFX05BTUVTUEFDRVMKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZl
IHRoZSAncHJlYWQnIGZ1bmN0aW9uICovCi0jdW5kZWYgSEFWRV9QUkVBRAotCi0vKiBEZWZpbmUg
aWYgeW91IGhhdmUgUE9TSVggdGhyZWFkcyBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcy4gKi8K
LSN1bmRlZiBIQVZFX1BUSFJFQUQKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxw
d2QuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9QV0RfSAotCi0vKiBEZWZpbmUgaWYg
eW91IGhhdmUgdGhlICdwd3JpdGUnIGZ1bmN0aW9uICovCi0jdW5kZWYgSEFWRV9QV1JJVEUKLQot
LyogZGVmaW5lIGlmIHRoZSBjb21waWxlciBpbXBsZW1lbnRzIHB0aHJlYWRfcndsb2NrXyogKi8K
LSN1bmRlZiBIQVZFX1JXTE9DSwotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdzaWdhY3Rp
b24nIGZ1bmN0aW9uICovCi0jdW5kZWYgSEFWRV9TSUdBQ1RJT04KLQotLyogRGVmaW5lIGlmIHlv
dSBoYXZlIHRoZSBgc2lnYWx0c3RhY2snIGZ1bmN0aW9uICovCi0jdW5kZWYgSEFWRV9TSUdBTFRT
VEFDSwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIg
ZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NURElOVF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1RETElCX0gK
LQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxl
LiAqLwotI3VuZGVmIEhBVkVfU1RSSU5HU19ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1RSSU5HX0gKLQot
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXNjYWxsLmg+IGhlYWRlciBmaWxlLiAq
LwotI3VuZGVmIEhBVkVfU1lTQ0FMTF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8c3lzbG9nLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1lTTE9HX0gKLQotLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8K
LSN1bmRlZiBIQVZFX1NZU19TVEFUX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxzeXMvc3lzY2FsbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19TWVNDQUxM
X0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIg
ZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19USU1FX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNf
VFlQRVNfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91Y29udGV4dC5o
PiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19VQ09OVEVYVF9ICi0KLS8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0c25hbWUuaD4gaGVhZGVyIGZpbGUuICovCi0j
dW5kZWYgSEFWRV9TWVNfVVRTTkFNRV9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8dWNvbnRleHQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9VQ09OVEVYVF9ICi0K
LS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAq
LwotI3VuZGVmIEhBVkVfVU5JU1REX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDx1bndpbmQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9VTldJTkRfSAotCi0vKiBk
ZWZpbmUgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHVzaW5nIGV4cHJlc3Npb24gZm9yIG9wZXJh
dG9yICovCi0jdW5kZWYgSEFWRV9VU0lOR19PUEVSQVRPUgotCi0vKiBkZWZpbmUgaWYgeW91ciBj
b21waWxlciBoYXMgX19hdHRyaWJ1dGVfXyAqLwotI3VuZGVmIEhBVkVfX19BVFRSSUJVVEVfXwot
Ci0vKiBkZWZpbmUgaWYgeW91ciBjb21waWxlciBoYXMgX19idWlsdGluX2V4cGVjdCAqLwotI3Vu
ZGVmIEhBVkVfX19CVUlMVElOX0VYUEVDVAotCi0vKiBkZWZpbmUgaWYgeW91ciBjb21waWxlciBo
YXMgX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwICovCi0jdW5kZWYgSEFWRV9fX1NZTkNfVkFM
X0NPTVBBUkVfQU5EX1NXQVAKLQotLyogRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IHdoZXJl
IGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy4gKi8KLSN1bmRlZiBMVF9PQkpE
SVIKLQotLyogTmFtZSBvZiBwYWNrYWdlICovCi0jdW5kZWYgUEFDS0FHRQotCi0vKiBEZWZpbmUg
dG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQg
YmUgc2VudC4gKi8KLSN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAotCi0vKiBEZWZpbmUgdG8gdGhl
IGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCi0jdW5kZWYgUEFDS0FHRV9OQU1FCi0KLS8q
IERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8K
LSN1bmRlZiBQQUNLQUdFX1NUUklORwotCi0vKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hv
cnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCi0jdW5kZWYgUEFDS0FHRV9UQVJOQU1FCi0KLS8q
IERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCi0jdW5kZWYgUEFD
S0FHRV9VUkwKLQotLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8K
LSN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KLQotLyogSG93IHRvIGFjY2VzcyB0aGUgUEMgZnJvbSBh
IHN0cnVjdCB1Y29udGV4dCAqLwotI3VuZGVmIFBDX0ZST01fVUNPTlRFWFQKLQotLyogRGVmaW5l
IHRvIG5lY2Vzc2FyeSBzeW1ib2wgaWYgdGhpcyBjb25zdGFudCB1c2VzIGEgbm9uLXN0YW5kYXJk
IG5hbWUgb24KLSAgIHlvdXIgc3lzdGVtLiAqLwotI3VuZGVmIFBUSFJFQURfQ1JFQVRFX0pPSU5B
QkxFCi0KLS8qIFRoZSBzaXplIG9mIGB2b2lkIConLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICov
Ci0jdW5kZWYgU0laRU9GX1ZPSURfUAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
QU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KLSN1bmRlZiBTVERDX0hFQURFUlMKLQotLyogdGhlIG5h
bWVzcGFjZSB3aGVyZSBTVEwgY29kZSBsaWtlIHZlY3Rvcjw+IGlzIGRlZmluZWQgKi8KLSN1bmRl
ZiBTVExfTkFNRVNQQUNFCi0KLS8qIGxvY2F0aW9uIG9mIHNvdXJjZSBjb2RlICovCi0jdW5kZWYg
VEVTVF9TUkNfRElSCi0KLS8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KLSN1bmRlZiBW
RVJTSU9OCi0KLS8qIFN0b3BzIHB1dHRpbmcgdGhlIGNvZGUgaW5zaWRlIHRoZSBHb29nbGUgbmFt
ZXNwYWNlICovCi0jdW5kZWYgX0VORF9HT09HTEVfTkFNRVNQQUNFXwotCi0vKiBQdXRzIGZvbGxv
d2luZyBjb2RlIGluc2lkZSB0aGUgR29vZ2xlIG5hbWVzcGFjZSAqLwotI3VuZGVmIF9TVEFSVF9H
T09HTEVfTkFNRVNQQUNFXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZ2xvZy9zcmMvZ2xvZy9sb2dfc2V2ZXJpdHkuaCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2dsb2cvc3JjL2dsb2cvbG9nX3NldmVyaXR5LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5OTQ1YTQyNmRhYjI3MWY4Zjk2MjIxYTA3Y2NiZGU1YjI5
MzFmNzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvZ2xvZy9sb2dfc2V2ZXJp
dHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAw
NywgR29vZ2xlIEluYy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgQkFTRV9MT0dfU0VWRVJJVFlf
SF9fCi0jZGVmaW5lIEJBU0VfTE9HX1NFVkVSSVRZX0hfXwotCi0vLyBBbm5veWluZyBzdHVmZiBm
b3Igd2luZG93cyAtLSBtYWtlcyBzdXJlIGNsaWVudHMgY2FuIGltcG9ydCB0aGVzZSBmdW5jdGlv
bnMKLSNpZm5kZWYgR09PR0xFX0dMT0dfRExMX0RFQ0wKLSMgaWYgZGVmaW5lZChfV0lOMzIpICYm
ICFkZWZpbmVkKF9fQ1lHV0lOX18pCi0jICAgZGVmaW5lIEdPT0dMRV9HTE9HX0RMTF9ERUNMICBf
X2RlY2xzcGVjKGRsbGltcG9ydCkKLSMgZWxzZQotIyAgIGRlZmluZSBHT09HTEVfR0xPR19ETExf
REVDTAotIyBlbmRpZgotI2VuZGlmCi0KLS8vIFZhcmlhYmxlcyBvZiB0eXBlIExvZ1NldmVyaXR5
IGFyZSB3aWRlbHkgdGFrZW4gdG8gbGllIGluIHRoZSByYW5nZQotLy8gWzAsIE5VTV9TRVZFUklU
SUVTLTFdLiAgQmUgY2FyZWZ1bCB0byBwcmVzZXJ2ZSB0aGlzIGFzc3VtcHRpb24gaWYKLS8vIHlv
dSBldmVyIG5lZWQgdG8gY2hhbmdlIHRoZWlyIHZhbHVlcyBvciBhZGQgYSBuZXcgc2V2ZXJpdHku
Ci10eXBlZGVmIGludCBMb2dTZXZlcml0eTsKLQotY29uc3QgaW50IEdMT0dfSU5GTyA9IDAsIEdM
T0dfV0FSTklORyA9IDEsIEdMT0dfRVJST1IgPSAyLCBHTE9HX0ZBVEFMID0gMywKLSAgTlVNX1NF
VkVSSVRJRVMgPSA0OwotI2lmbmRlZiBHTE9HX05PX0FCQlJFVklBVEVEX1NFVkVSSVRJRVMKLSMg
aWZkZWYgRVJST1IKLSMgIGVycm9yIEVSUk9SIG1hY3JvIGlzIGRlZmluZWQuIERlZmluZSBHTE9H
X05PX0FCQlJFVklBVEVEX1NFVkVSSVRJRVMgYmVmb3JlIGluY2x1ZGluZyBsb2dnaW5nLmguIFNl
ZSB0aGUgZG9jdW1lbnQgZm9yIGRldGFpbC4KLSMgZW5kaWYKLWNvbnN0IGludCBJTkZPID0gR0xP
R19JTkZPLCBXQVJOSU5HID0gR0xPR19XQVJOSU5HLAotICBFUlJPUiA9IEdMT0dfRVJST1IsIEZB
VEFMID0gR0xPR19GQVRBTDsKLSNlbmRpZgotCi0vLyBERkFUQUwgaXMgRkFUQUwgaW4gZGVidWcg
bW9kZSwgRVJST1IgaW4gbm9ybWFsIG1vZGUKLSNpZmRlZiBOREVCVUcKLSNkZWZpbmUgREZBVEFM
X0xFVkVMIEVSUk9SCi0jZWxzZQotI2RlZmluZSBERkFUQUxfTEVWRUwgRkFUQUwKLSNlbmRpZgot
Ci1leHRlcm4gR09PR0xFX0dMT0dfRExMX0RFQ0wgY29uc3QgY2hhciogY29uc3QgTG9nU2V2ZXJp
dHlOYW1lc1tOVU1fU0VWRVJJVElFU107Ci0KLS8vIE5ERUJVRyB1c2FnZSBoZWxwZXJzIHJlbGF0
ZWQgdG8gKFJBV18pRENIRUNLOgotLy8KLS8vIERFQlVHX01PREUgaXMgZm9yIHNtYWxsICFOREVC
VUcgdXNlcyBsaWtlCi0vLyAgIGlmIChERUJVR19NT0RFKSBmb28uQ2hlY2tUaGF0Rm9vKCk7Ci0v
LyBpbnN0ZWFkIG9mIHN1YnN0YW50aWFsbHkgbW9yZSB2ZXJib3NlCi0vLyAgICNpZm5kZWYgTkRF
QlVHCi0vLyAgICAgZm9vLkNoZWNrVGhhdEZvbygpOwotLy8gICAjZW5kaWYKLS8vCi0vLyBJRl9E
RUJVR19NT0RFIGlzIGZvciBzbWFsbCAhTkRFQlVHIHVzZXMgbGlrZQotLy8gICBJRl9ERUJVR19N
T0RFKCBzdHJpbmcgZXJyb3I7ICkKLS8vICAgRENIRUNLKEZvbygmZXJyb3IpKSA8PCBlcnJvcjsK
LS8vIGluc3RlYWQgb2Ygc3Vic3RhbnRpYWxseSBtb3JlIHZlcmJvc2UKLS8vICAgI2lmbmRlZiBO
REVCVUcKLS8vICAgICBzdHJpbmcgZXJyb3I7Ci0vLyAgICAgRENIRUNLKEZvbygmZXJyb3IpKSA8
PCBlcnJvcjsKLS8vICAgI2VuZGlmCi0vLwotI2lmZGVmIE5ERUJVRwotZW51bSB7IERFQlVHX01P
REUgPSAwIH07Ci0jZGVmaW5lIElGX0RFQlVHX01PREUoeCkKLSNlbHNlCi1lbnVtIHsgREVCVUdf
TU9ERSA9IDEgfTsKLSNkZWZpbmUgSUZfREVCVUdfTU9ERSh4KSB4Ci0jZW5kaWYKLQotI2VuZGlm
ICAvLyBCQVNFX0xPR19TRVZFUklUWV9IX18KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2dsb2cvc3JjL2dsb2cvbG9nZ2luZy5oIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvZ2xvZy9sb2dnaW5nLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlZTUzNWIzYTEzMjYwNDgzYTQzYTBiNGI0NGNhZjRjNThj
ZTc2MTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvZ2xvZy9sb2dnaW5nLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxNjY4ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMTk5OSwg
R29vZ2xlIEluYy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0vLwotLy8gQXV0aG9yOiBSYXkgU2lkbmV5Ci0vLwot
Ly8gVGhpcyBmaWxlIGNvbnRhaW5zICNpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IGxvZ2dpbmct
cmVsYXRlZCBzdHVmZi4KLS8vIFByZXR0eSBtdWNoIGV2ZXJ5Ym9keSBuZWVkcyB0byAjaW5jbHVk
ZSB0aGlzIGZpbGUgc28gdGhhdCB0aGV5IGNhbgotLy8gbG9nIHZhcmlvdXMgaGFwcGVuaW5ncy4K
LS8vCi0jaWZuZGVmIF9MT0dHSU5HX0hfCi0jZGVmaW5lIF9MT0dHSU5HX0hfCi0KLSNpbmNsdWRl
IDxlcnJuby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNs
dWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8b3N0cmVhbT4KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2lu
Y2x1ZGUgPHN0cmluZz4KLSNpZiAxCi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaW5j
bHVkZSA8dmVjdG9yPgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNkZWZpbmUgR0xPR19NU1ZD
X1BVU0hfRElTQUJMRV9XQVJOSU5HKG4pIF9fcHJhZ21hKHdhcm5pbmcocHVzaCkpIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByYWdtYSh3YXJuaW5nKGRpc2FibGU6
bikpCi0jZGVmaW5lIEdMT0dfTVNWQ19QT1BfV0FSTklORygpIF9fcHJhZ21hKHdhcm5pbmcocG9w
KSkKLSNlbHNlCi0jZGVmaW5lIEdMT0dfTVNWQ19QVVNIX0RJU0FCTEVfV0FSTklORyhuKQotI2Rl
ZmluZSBHTE9HX01TVkNfUE9QX1dBUk5JTkcoKQotI2VuZGlmCi0KLS8vIEFubm95aW5nIHN0dWZm
IGZvciB3aW5kb3dzIC0tIG1ha2VzIHN1cmUgY2xpZW50cyBjYW4gaW1wb3J0IHRoZXNlIGZ1bmN0
aW9ucwotI2lmbmRlZiBHT09HTEVfR0xPR19ETExfREVDTAotIyBpZiBkZWZpbmVkKF9XSU4zMikg
JiYgIWRlZmluZWQoX19DWUdXSU5fXykKLSMgICBkZWZpbmUgR09PR0xFX0dMT0dfRExMX0RFQ0wg
IF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotIyBlbHNlCi0jICAgZGVmaW5lIEdPT0dMRV9HTE9HX0RM
TF9ERUNMCi0jIGVuZGlmCi0jZW5kaWYKLQotLy8gV2UgY2FyZSBhIGxvdCBhYm91dCBudW1iZXIg
b2YgYml0cyB0aGluZ3MgdGFrZSB1cC4gIFVuZm9ydHVuYXRlbHksCi0vLyBzeXN0ZW1zIGRlZmlu
ZSB0aGVpciBiaXQtc3BlY2lmaWMgaW50cyBpbiBhIGxvdCBvZiBkaWZmZXJlbnQgd2F5cy4KLS8v
IFdlIHVzZSBvdXIgb3duIHdheSwgYW5kIGhhdmUgYSB0eXBlZGVmIHRvIGdldCB0aGVyZS4KLS8v
IE5vdGU6IHRoZXNlIGNvbW1hbmRzIGJlbG93IG1heSBsb29rIGxpa2UgIiNpZiAxIiBvciAiI2lm
IDAiLCBidXQKLS8vIHRoYXQncyBiZWNhdXNlIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCB0aGF0IHdh
eSBhdCAuL2NvbmZpZ3VyZSB0aW1lLgotLy8gTG9vayBhdCBsb2dnaW5nLmguaW4gdG8gc2VlIGhv
dyB0aGV5J3JlIGNhbGN1bGF0ZWQgKGJhc2VkIG9uIHlvdXIgY29uZmlnKS4KLSNpZiAxCi0jaW5j
bHVkZSA8c3RkaW50Lmg+ICAgICAgICAgICAgIC8vIHRoZSBub3JtYWwgcGxhY2UgdWludDE2X3Qg
aXMgZGVmaW5lZAotI2VuZGlmCi0jaWYgMQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgICAg
ICAvLyB0aGUgbm9ybWFsIHBsYWNlIHVfaW50MTZfdCBpcyBkZWZpbmVkCi0jZW5kaWYKLSNpZiAx
Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4gICAgICAgICAgIC8vIGEgdGhpcmQgcGxhY2UgZm9yIHVp
bnQxNl90IG9yIHVfaW50MTZfdAotI2VuZGlmCi0KLSNpZiAwCi0jaW5jbHVkZSA8Z2ZsYWdzL2dm
bGFncy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBnb29nbGUgewotCi0jaWYgMSAgICAgIC8vIHRo
ZSBDOTkgZm9ybWF0Ci10eXBlZGVmIGludDMyX3QgaW50MzI7Ci10eXBlZGVmIHVpbnQzMl90IHVp
bnQzMjsKLXR5cGVkZWYgaW50NjRfdCBpbnQ2NDsKLXR5cGVkZWYgdWludDY0X3QgdWludDY0Owot
I2VsaWYgMSAgIC8vIHRoZSBCU0QgZm9ybWF0Ci10eXBlZGVmIGludDMyX3QgaW50MzI7Ci10eXBl
ZGVmIHVfaW50MzJfdCB1aW50MzI7Ci10eXBlZGVmIGludDY0X3QgaW50NjQ7Ci10eXBlZGVmIHVf
aW50NjRfdCB1aW50NjQ7Ci0jZWxpZiAwICAgIC8vIHRoZSB3aW5kb3dzICh2YzcpIGZvcm1hdAot
dHlwZWRlZiBfX2ludDMyIGludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDMyIHVpbnQzMjsK
LXR5cGVkZWYgX19pbnQ2NCBpbnQ2NDsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjQ7
Ci0jZWxzZQotI2Vycm9yIERvIG5vdCBrbm93IGhvdyB0byBkZWZpbmUgYSAzMi1iaXQgaW50ZWdl
ciBxdWFudGl0eSBvbiB5b3VyIHN5c3RlbQotI2VuZGlmCi0KLX0KLQotLy8gVGhlIGdsb2JhbCB2
YWx1ZSBvZiBHT09HTEVfU1RSSVBfTE9HLiBBbGwgdGhlIG1lc3NhZ2VzIGxvZ2dlZCB0bwotLy8g
TE9HKFhYWCkgd2l0aCBzZXZlcml0eSBsZXNzIHRoYW4gR09PR0xFX1NUUklQX0xPRyB3aWxsIG5v
dCBiZSBkaXNwbGF5ZWQuCi0vLyBJZiBpdCBjYW4gYmUgZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRp
bWUgdGhhdCB0aGUgbWVzc2FnZSB3aWxsIG5vdCBiZQotLy8gcHJpbnRlZCwgdGhlIHN0YXRlbWVu
dCB3aWxsIGJlIGNvbXBpbGVkIG91dC4KLS8vCi0vLyBFeGFtcGxlOiB0byBzdHJpcCBvdXQgYWxs
IElORk8gYW5kIFdBUk5JTkcgbWVzc2FnZXMsIHVzZSB0aGUgdmFsdWUKLS8vIG9mIDIgYmVsb3cu
IFRvIG1ha2UgYW4gZXhjZXB0aW9uIGZvciBXQVJOSU5HIG1lc3NhZ2VzIGZyb20gYSBzaW5nbGUK
LS8vIGZpbGUsIGFkZCAiI2RlZmluZSBHT09HTEVfU1RSSVBfTE9HIDEiIHRvIHRoYXQgZmlsZSBf
YmVmb3JlXyBpbmNsdWRpbmcKLS8vIGJhc2UvbG9nZ2luZy5oCi0jaWZuZGVmIEdPT0dMRV9TVFJJ
UF9MT0cKLSNkZWZpbmUgR09PR0xFX1NUUklQX0xPRyAwCi0jZW5kaWYKLQotLy8gR0NDIGNhbiBi
ZSB0b2xkIHRoYXQgYSBjZXJ0YWluIGJyYW5jaCBpcyBub3QgbGlrZWx5IHRvIGJlIHRha2VuIChm
b3IKLS8vIGluc3RhbmNlLCBhIENIRUNLIGZhaWx1cmUpLCBhbmQgdXNlIHRoYXQgaW5mb3JtYXRp
b24gaW4gc3RhdGljIGFuYWx5c2lzLgotLy8gR2l2aW5nIGl0IHRoaXMgaW5mb3JtYXRpb24gY2Fu
IGhlbHAgaXQgb3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZSBpbgotLy8gdGhlIGFic2VuY2Ug
b2YgYmV0dGVyIGluZm9ybWF0aW9uIChpZS4gLWZwcm9maWxlLWFyY3MpLgotLy8KLSNpZm5kZWYg
R09PR0xFX1BSRURJQ1RfQlJBTkNIX05PVF9UQUtFTgotI2lmIDEKLSNkZWZpbmUgR09PR0xFX1BS
RURJQ1RfQlJBTkNIX05PVF9UQUtFTih4KSAoX19idWlsdGluX2V4cGVjdCh4LCAwKSkKLSNlbHNl
Ci0jZGVmaW5lIEdPT0dMRV9QUkVESUNUX0JSQU5DSF9OT1RfVEFLRU4oeCkgeAotI2VuZGlmCi0j
ZW5kaWYKLQotI2lmbmRlZiBHT09HTEVfUFJFRElDVF9GQUxTRQotI2lmIDEKLSNkZWZpbmUgR09P
R0xFX1BSRURJQ1RfRkFMU0UoeCkgKF9fYnVpbHRpbl9leHBlY3QoeCwgMCkpCi0jZWxzZQotI2Rl
ZmluZSBHT09HTEVfUFJFRElDVF9GQUxTRSh4KSB4Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVm
IEdPT0dMRV9QUkVESUNUX1RSVUUKLSNpZiAxCi0jZGVmaW5lIEdPT0dMRV9QUkVESUNUX1RSVUUo
eCkgKF9fYnVpbHRpbl9leHBlY3QoISEoeCksIDEpKQotI2Vsc2UKLSNkZWZpbmUgR09PR0xFX1BS
RURJQ1RfVFJVRSh4KSB4Ci0jZW5kaWYKLSNlbmRpZgotCi0KLS8vIE1ha2UgYSBidW5jaCBvZiBt
YWNyb3MgZm9yIGxvZ2dpbmcuICBUaGUgd2F5IHRvIGxvZyB0aGluZ3MgaXMgdG8gc3RyZWFtCi0v
LyB0aGluZ3MgdG8gTE9HKDxhIHBhcnRpY3VsYXIgc2V2ZXJpdHkgbGV2ZWw+KS4gIEUuZy4sCi0v
LwotLy8gICBMT0coSU5GTykgPDwgIkZvdW5kICIgPDwgbnVtX2Nvb2tpZXMgPDwgIiBjb29raWVz
IjsKLS8vCi0vLyBZb3UgY2FuIGNhcHR1cmUgbG9nIG1lc3NhZ2VzIGluIGEgc3RyaW5nLCByYXRo
ZXIgdGhhbiByZXBvcnRpbmcgdGhlbQotLy8gaW1tZWRpYXRlbHk6Ci0vLwotLy8gICB2ZWN0b3I8
c3RyaW5nPiBlcnJvcnM7Ci0vLyAgIExPR19TVFJJTkcoRVJST1IsICZlcnJvcnMpIDw8ICJDb3Vs
ZG4ndCBwYXJzZSBjb29raWUgIyIgPDwgY29va2llX251bTsKLS8vCi0vLyBUaGlzIHB1c2hlcyBi
YWNrIHRoZSBuZXcgZXJyb3Igb250byAnZXJyb3JzJzsgaWYgZ2l2ZW4gYSBOVUxMIHBvaW50ZXIs
Ci0vLyBpdCByZXBvcnRzIHRoZSBlcnJvciB2aWEgTE9HKEVSUk9SKS4KLS8vCi0vLyBZb3UgY2Fu
IGFsc28gZG8gY29uZGl0aW9uYWwgbG9nZ2luZzoKLS8vCi0vLyAgIExPR19JRihJTkZPLCBudW1f
Y29va2llcyA+IDEwKSA8PCAiR290IGxvdHMgb2YgY29va2llcyI7Ci0vLwotLy8gWW91IGNhbiBh
bHNvIGRvIG9jY2FzaW9uYWwgbG9nZ2luZyAobG9nIGV2ZXJ5IG4ndGggb2NjdXJyZW5jZSBvZiBh
bgotLy8gZXZlbnQpOgotLy8KLS8vICAgTE9HX0VWRVJZX04oSU5GTywgMTApIDw8ICJHb3QgdGhl
ICIgPDwgZ29vZ2xlOjpDT1VOVEVSIDw8ICJ0aCBjb29raWUiOwotLy8KLS8vIFRoZSBhYm92ZSB3
aWxsIGNhdXNlIGxvZyBtZXNzYWdlcyB0byBiZSBvdXRwdXQgb24gdGhlIDFzdCwgMTF0aCwgMjFz
dCwgLi4uCi0vLyB0aW1lcyBpdCBpcyBleGVjdXRlZC4gIE5vdGUgdGhhdCB0aGUgc3BlY2lhbCBn
b29nbGU6OkNPVU5URVIgdmFsdWUgaXMgdXNlZAotLy8gdG8gaWRlbnRpZnkgd2hpY2ggcmVwZXRp
dGlvbiBpcyBoYXBwZW5pbmcuCi0vLwotLy8gWW91IGNhbiBhbHNvIGRvIG9jY2FzaW9uYWwgY29u
ZGl0aW9uYWwgbG9nZ2luZyAobG9nIGV2ZXJ5IG4ndGgKLS8vIG9jY3VycmVuY2Ugb2YgYW4gZXZl
bnQsIHdoZW4gY29uZGl0aW9uIGlzIHNhdGlzZmllZCk6Ci0vLwotLy8gICBMT0dfSUZfRVZFUllf
TihJTkZPLCAoc2l6ZSA+IDEwMjQpLCAxMCkgPDwgIkdvdCB0aGUgIiA8PCBnb29nbGU6OkNPVU5U
RVIKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJ0aCBi
aWcgY29va2llIjsKLS8vCi0vLyBZb3UgY2FuIGxvZyBtZXNzYWdlcyB0aGUgZmlyc3QgTiB0aW1l
cyB5b3VyIGNvZGUgZXhlY3V0ZXMgYSBsaW5lLiBFLmcuCi0vLwotLy8gICBMT0dfRklSU1RfTihJ
TkZPLCAyMCkgPDwgIkdvdCB0aGUgIiA8PCBnb29nbGU6OkNPVU5URVIgPDwgInRoIGNvb2tpZSI7
Ci0vLwotLy8gT3V0cHV0cyBsb2cgbWVzc2FnZXMgZm9yIHRoZSBmaXJzdCAyMCB0aW1lcyBpdCBp
cyBleGVjdXRlZC4KLS8vCi0vLyBBbmFsb2dvdXMgU1lTTE9HLCBTWVNMT0dfSUYsIGFuZCBTWVNM
T0dfRVZFUllfTiBtYWNyb3MgYXJlIGF2YWlsYWJsZS4KLS8vIFRoZXNlIGxvZyB0byBzeXNsb2cg
YXMgd2VsbCBhcyB0byB0aGUgbm9ybWFsIGxvZ3MuICBJZiB5b3UgdXNlIHRoZXNlIGF0Ci0vLyBh
bGwsIHlvdSBuZWVkIHRvIGJlIGF3YXJlIHRoYXQgc3lzbG9nIGNhbiBkcmFzdGljYWxseSByZWR1
Y2UgcGVyZm9ybWFuY2UsCi0vLyBlc3BlY2lhbGx5IGlmIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIHJl
bW90ZSBsb2dnaW5nISAgRG9uJ3QgdXNlIHRoZXNlCi0vLyB1bmxlc3MgeW91IGZ1bGx5IHVuZGVy
c3RhbmQgdGhpcyBhbmQgaGF2ZSBhIGNvbmNyZXRlIG5lZWQgdG8gdXNlIHRoZW0uCi0vLyBFdmVu
IHRoZW4sIHRyeSB0byBtaW5pbWl6ZSB5b3VyIHVzZSBvZiB0aGVtLgotLy8KLS8vIFRoZXJlIGFy
ZSBhbHNvICJkZWJ1ZyBtb2RlIiBsb2dnaW5nIG1hY3JvcyBsaWtlIHRoZSBvbmVzIGFib3ZlOgot
Ly8KLS8vICAgRExPRyhJTkZPKSA8PCAiRm91bmQgY29va2llcyI7Ci0vLwotLy8gICBETE9HX0lG
KElORk8sIG51bV9jb29raWVzID4gMTApIDw8ICJHb3QgbG90cyBvZiBjb29raWVzIjsKLS8vCi0v
LyAgIERMT0dfRVZFUllfTihJTkZPLCAxMCkgPDwgIkdvdCB0aGUgIiA8PCBnb29nbGU6OkNPVU5U
RVIgPDwgInRoIGNvb2tpZSI7Ci0vLwotLy8gQWxsICJkZWJ1ZyBtb2RlIiBsb2dnaW5nIGlzIGNv
bXBpbGVkIGF3YXkgdG8gbm90aGluZyBmb3Igbm9uLWRlYnVnIG1vZGUKLS8vIGNvbXBpbGVzLgot
Ly8KLS8vIFdlIGFsc28gaGF2ZQotLy8KLS8vICAgTE9HX0FTU0VSVChhc3NlcnRpb24pOwotLy8g
ICBETE9HX0FTU0VSVChhc3NlcnRpb24pOwotLy8KLS8vIHdoaWNoIGlzIHN5bnRhY3RpYyBzdWdh
ciBmb3IgeyxEfUxPR19JRihGQVRBTCwgYXNzZXJ0IGZhaWxzKSA8PCBhc3NlcnRpb247Ci0vLwot
Ly8gVGhlcmUgYXJlICJ2ZXJib3NlIGxldmVsIiBsb2dnaW5nIG1hY3Jvcy4gIFRoZXkgbG9vayBs
aWtlCi0vLwotLy8gICBWTE9HKDEpIDw8ICJJJ20gcHJpbnRlZCB3aGVuIHlvdSBydW4gdGhlIHBy
b2dyYW0gd2l0aCAtLXY9MSBvciBtb3JlIjsKLS8vICAgVkxPRygyKSA8PCAiSSdtIHByaW50ZWQg
d2hlbiB5b3UgcnVuIHRoZSBwcm9ncmFtIHdpdGggLS12PTIgb3IgbW9yZSI7Ci0vLwotLy8gVGhl
c2UgYWx3YXlzIGxvZyBhdCB0aGUgSU5GTyBsb2cgbGV2ZWwgKHdoZW4gdGhleSBsb2cgYXQgYWxs
KS4KLS8vIFRoZSB2ZXJib3NlIGxvZ2dpbmcgY2FuIGFsc28gYmUgdHVybmVkIG9uIG1vZHVsZS1i
eS1tb2R1bGUuICBGb3IgaW5zdGFuY2UsCi0vLyAgICAtLXZtb2R1bGU9bWFwcmVkdWNlPTIsZmls
ZT0xLGdmcyo9MyAtLXY9MAotLy8gd2lsbCBjYXVzZToKLS8vICAgYS4gVkxPRygyKSBhbmQgbG93
ZXIgbWVzc2FnZXMgdG8gYmUgcHJpbnRlZCBmcm9tIG1hcHJlZHVjZS57aCxjY30KLS8vICAgYi4g
VkxPRygxKSBhbmQgbG93ZXIgbWVzc2FnZXMgdG8gYmUgcHJpbnRlZCBmcm9tIGZpbGUue2gsY2N9
Ci0vLyAgIGMuIFZMT0coMykgYW5kIGxvd2VyIG1lc3NhZ2VzIHRvIGJlIHByaW50ZWQgZnJvbSBm
aWxlcyBwcmVmaXhlZCB3aXRoICJnZnMiCi0vLyAgIGQuIFZMT0coMCkgYW5kIGxvd2VyIG1lc3Nh
Z2VzIHRvIGJlIHByaW50ZWQgZnJvbSBlbHNld2hlcmUKLS8vCi0vLyBUaGUgd2lsZGNhcmRpbmcg
ZnVuY3Rpb25hbGl0eSBzaG93biBieSAoYykgc3VwcG9ydHMgYm90aCAnKicgKG1hdGNoCi0vLyAw
IG9yIG1vcmUgY2hhcmFjdGVycykgYW5kICc/JyAobWF0Y2ggYW55IHNpbmdsZSBjaGFyYWN0ZXIp
IHdpbGRjYXJkcy4KLS8vCi0vLyBUaGVyZSdzIGFsc28gVkxPR19JU19PTihuKSAidmVyYm9zZSBs
ZXZlbCIgY29uZGl0aW9uIG1hY3JvLiBUbyBiZSB1c2VkIGFzCi0vLwotLy8gICBpZiAoVkxPR19J
U19PTigyKSkgewotLy8gICAgIC8vIGRvIHNvbWUgbG9nZ2luZyBwcmVwYXJhdGlvbiBhbmQgbG9n
Z2luZwotLy8gICAgIC8vIHRoYXQgY2FuJ3QgYmUgYWNjb21wbGlzaGVkIHdpdGgganVzdCBWTE9H
KDIpIDw8IC4uLjsKLS8vICAgfQotLy8KLS8vIFRoZXJlIGFyZSBhbHNvIFZMT0dfSUYsIFZMT0df
RVZFUllfTiBhbmQgVkxPR19JRl9FVkVSWV9OICJ2ZXJib3NlIGxldmVsIgotLy8gY29uZGl0aW9u
IG1hY3JvcyBmb3Igc2FtcGxlIGNhc2VzLCB3aGVuIHNvbWUgZXh0cmEgY29tcHV0YXRpb24gYW5k
Ci0vLyBwcmVwYXJhdGlvbiBmb3IgbG9ncyBpcyBub3QgbmVlZGVkLgotLy8gICBWTE9HX0lGKDEs
IChzaXplID4gMTAyNCkpCi0vLyAgICAgIDw8ICJJJ20gcHJpbnRlZCB3aGVuIHNpemUgaXMgbW9y
ZSB0aGFuIDEwMjQgYW5kIHdoZW4geW91IHJ1biB0aGUgIgotLy8gICAgICAgICAicHJvZ3JhbSB3
aXRoIC0tdj0xIG9yIG1vcmUiOwotLy8gICBWTE9HX0VWRVJZX04oMSwgMTApCi0vLyAgICAgIDw8
ICJJJ20gcHJpbnRlZCBldmVyeSAxMHRoIG9jY3VycmVuY2UsIGFuZCB3aGVuIHlvdSBydW4gdGhl
IHByb2dyYW0gIgotLy8gICAgICAgICAid2l0aCAtLXY9MSBvciBtb3JlLiBQcmVzZW50IG9jY3Vy
ZW5jZSBpcyAiIDw8IGdvb2dsZTo6Q09VTlRFUjsKLS8vICAgVkxPR19JRl9FVkVSWV9OKDEsIChz
aXplID4gMTAyNCksIDEwKQotLy8gICAgICA8PCAiSSdtIHByaW50ZWQgb24gZXZlcnkgMTB0aCBv
Y2N1cmVuY2Ugb2YgY2FzZSB3aGVuIHNpemUgaXMgbW9yZSAiCi0vLyAgICAgICAgICIgdGhhbiAx
MDI0LCB3aGVuIHlvdSBydW4gdGhlIHByb2dyYW0gd2l0aCAtLXY9MSBvciBtb3JlLiAiOwotLy8g
ICAgICAgICAiUHJlc2VudCBvY2N1cmVuY2UgaXMgIiA8PCBnb29nbGU6OkNPVU5URVI7Ci0vLwot
Ly8gVGhlIHN1cHBvcnRlZCBzZXZlcml0eSBsZXZlbHMgZm9yIG1hY3JvcyB0aGF0IGFsbG93IHlv
dSB0byBzcGVjaWZ5IG9uZQotLy8gYXJlIChpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIHNldmVyaXR5
KSBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgYW5kIEZBVEFMLgotLy8gTm90ZSB0aGF0IG1lc3NhZ2Vz
IG9mIGEgZ2l2ZW4gc2V2ZXJpdHkgYXJlIGxvZ2dlZCBub3Qgb25seSBpbiB0aGUKLS8vIGxvZ2Zp
bGUgZm9yIHRoYXQgc2V2ZXJpdHksIGJ1dCBhbHNvIGluIGFsbCBsb2dmaWxlcyBvZiBsb3dlciBz
ZXZlcml0eS4KLS8vIEUuZy4sIGEgbWVzc2FnZSBvZiBzZXZlcml0eSBGQVRBTCB3aWxsIGJlIGxv
Z2dlZCB0byB0aGUgbG9nZmlsZXMgb2YKLS8vIHNldmVyaXR5IEZBVEFMLCBFUlJPUiwgV0FSTklO
RywgYW5kIElORk8uCi0vLwotLy8gVGhlcmUgaXMgYWxzbyB0aGUgc3BlY2lhbCBzZXZlcml0eSBv
ZiBERkFUQUwsIHdoaWNoIGxvZ3MgRkFUQUwgaW4KLS8vIGRlYnVnIG1vZGUsIEVSUk9SIGluIG5v
cm1hbCBtb2RlLgotLy8KLS8vIFZlcnkgaW1wb3J0YW50OiBsb2dnaW5nIGEgbWVzc2FnZSBhdCB0
aGUgRkFUQUwgc2V2ZXJpdHkgbGV2ZWwgY2F1c2VzCi0vLyB0aGUgcHJvZ3JhbSB0byB0ZXJtaW5h
dGUgKGFmdGVyIHRoZSBtZXNzYWdlIGlzIGxvZ2dlZCkuCi0vLwotLy8gVW5sZXNzIG90aGVyd2lz
ZSBzcGVjaWZpZWQsIGxvZ3Mgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBmaWxlbmFtZQotLy8gIjxw
cm9ncmFtIG5hbWU+Ljxob3N0bmFtZT4uPHVzZXIgbmFtZT4ubG9nLjxzZXZlcml0eSBsZXZlbD4u
IiwgZm9sbG93ZWQKLS8vIGJ5IHRoZSBkYXRlLCB0aW1lLCBhbmQgcGlkICh5b3UgY2FuJ3QgcHJl
dmVudCB0aGUgZGF0ZSwgdGltZSwgYW5kIHBpZAotLy8gZnJvbSBiZWluZyBpbiB0aGUgZmlsZW5h
bWUpLgotLy8KLS8vIFRoZSBsb2dnaW5nIGNvZGUgdGFrZXMgdHdvIGZsYWdzOgotLy8gICAgIC0t
dj0jICAgICAgICAgICBzZXQgdGhlIHZlcmJvc2UgbGV2ZWwKLS8vICAgICAtLWxvZ3Rvc3RkZXJy
ICAgbG9nIGFsbCB0aGUgbWVzc2FnZXMgdG8gc3RkZXJyIGluc3RlYWQgb2YgdG8gbG9nZmlsZXMK
LQotLy8gTE9HIExJTkUgUFJFRklYIEZPUk1BVAotLy8KLS8vIExvZyBsaW5lcyBoYXZlIHRoaXMg
Zm9ybToKLS8vCi0vLyAgICAgTG1tZGQgaGg6bW06c3MudXV1dXV1IHRocmVhZGlkIGZpbGU6bGlu
ZV0gbXNnLi4uCi0vLwotLy8gd2hlcmUgdGhlIGZpZWxkcyBhcmUgZGVmaW5lZCBhcyBmb2xsb3dz
OgotLy8KLS8vICAgTCAgICAgICAgICAgICAgICBBIHNpbmdsZSBjaGFyYWN0ZXIsIHJlcHJlc2Vu
dGluZyB0aGUgbG9nIGxldmVsCi0vLyAgICAgICAgICAgICAgICAgICAgKGVnICdJJyBmb3IgSU5G
TykKLS8vICAgbW0gICAgICAgICAgICAgICBUaGUgbW9udGggKHplcm8gcGFkZGVkOyBpZSBNYXkg
aXMgJzA1JykKLS8vICAgZGQgICAgICAgICAgICAgICBUaGUgZGF5ICh6ZXJvIHBhZGRlZCkKLS8v
ICAgaGg6bW06c3MudXV1dXV1ICBUaW1lIGluIGhvdXJzLCBtaW51dGVzIGFuZCBmcmFjdGlvbmFs
IHNlY29uZHMKLS8vICAgdGhyZWFkaWQgICAgICAgICBUaGUgc3BhY2UtcGFkZGVkIHRocmVhZCBJ
RCBhcyByZXR1cm5lZCBieSBHZXRUSUQoKQotLy8gICAgICAgICAgICAgICAgICAgICh0aGlzIG1h
dGNoZXMgdGhlIFBJRCBvbiBMaW51eCkKLS8vICAgZmlsZSAgICAgICAgICAgICBUaGUgZmlsZSBu
YW1lCi0vLyAgIGxpbmUgICAgICAgICAgICAgVGhlIGxpbmUgbnVtYmVyCi0vLyAgIG1zZyAgICAg
ICAgICAgICAgVGhlIHVzZXItc3VwcGxpZWQgbWVzc2FnZQotLy8KLS8vIEV4YW1wbGU6Ci0vLwot
Ly8gICBJMTEwMyAxMTo1NzozMS43MzkzMzkgMjQzOTUgZ29vZ2xlLmNjOjIzNDFdIENvbW1hbmQg
bGluZTogLi9zb21lX3Byb2cKLS8vICAgSTExMDMgMTE6NTc6MzEuNzM5NDAzIDI0Mzk1IGdvb2ds
ZS5jYzoyMzQyXSBQcm9jZXNzIGlkIDI0Mzk1Ci0vLwotLy8gTk9URTogYWx0aG91Z2ggdGhlIG1p
Y3Jvc2Vjb25kcyBhcmUgdXNlZnVsIGZvciBjb21wYXJpbmcgZXZlbnRzIG9uCi0vLyBhIHNpbmds
ZSBtYWNoaW5lLCBjbG9ja3Mgb24gZGlmZmVyZW50IG1hY2hpbmVzIG1heSBub3QgYmUgd2VsbAot
Ly8gc3luY2hyb25pemVkLiAgSGVuY2UsIHVzZSBjYXV0aW9uIHdoZW4gY29tcGFyaW5nIHRoZSBs
b3cgYml0cyBvZgotLy8gdGltZXN0YW1wcyBmcm9tIGRpZmZlcmVudCBtYWNoaW5lcy4KLQotI2lm
bmRlZiBERUNMQVJFX1ZBUklBQkxFCi0jZGVmaW5lIE1VU1RfVU5ERUZfR0ZMQUdTX0RFQ0xBUkVf
TUFDUk9TCi0jZGVmaW5lIERFQ0xBUkVfVkFSSUFCTEUodHlwZSwgc2hvcnR0eXBlLCBuYW1lLCB0
bikgICAgICAgICAgICAgICAgICAgICBcCi0gIG5hbWVzcGFjZSBmTCMjc2hvcnR0eXBlIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZXh0ZXJuIEdP
T0dMRV9HTE9HX0RMTF9ERUNMIHR5cGUgRkxBR1NfIyNuYW1lOyAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gIHVzaW5nIGZMIyNzaG9ydHR5cGU6OkZMQUdTXyMjbmFt
ZQotCi0vLyBib29sIHNwZWNpYWxpemF0aW9uCi0jZGVmaW5lIERFQ0xBUkVfYm9vbChuYW1lKSBc
Ci0gIERFQ0xBUkVfVkFSSUFCTEUoYm9vbCwgQiwgbmFtZSwgYm9vbCkKLQotLy8gaW50MzIgc3Bl
Y2lhbGl6YXRpb24KLSNkZWZpbmUgREVDTEFSRV9pbnQzMihuYW1lKSBcCi0gIERFQ0xBUkVfVkFS
SUFCTEUoZ29vZ2xlOjppbnQzMiwgSSwgbmFtZSwgaW50MzIpCi0KLS8vIFNwZWNpYWwgY2FzZSBm
b3Igc3RyaW5nLCBiZWNhdXNlIHdlIGhhdmUgdG8gc3BlY2lmeSB0aGUgbmFtZXNwYWNlCi0vLyBz
dGQ6OnN0cmluZywgd2hpY2ggZG9lc24ndCBwbGF5IG5pY2VseSB3aXRoIG91ciBGTEFHX19uYW1l
c3BhY2UgaGFja2VyeS4KLSNkZWZpbmUgREVDTEFSRV9zdHJpbmcobmFtZSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgbmFtZXNwYWNlIGZMUyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBl
eHRlcm4gR09PR0xFX0dMT0dfRExMX0RFQ0wgc3RkOjpzdHJpbmcmIEZMQUdTXyMjbmFtZTsgICAg
ICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdXNpbmcgZkxTOjpGTEFHU18jI25hbWUK
LSNlbmRpZgotCi0vLyBTZXQgd2hldGhlciBsb2cgbWVzc2FnZXMgZ28gdG8gc3RkZXJyIGluc3Rl
YWQgb2YgbG9nZmlsZXMKLURFQ0xBUkVfYm9vbChsb2d0b3N0ZGVycik7Ci0KLS8vIFNldCB3aGV0
aGVyIGxvZyBtZXNzYWdlcyBnbyB0byBzdGRlcnIgaW4gYWRkaXRpb24gdG8gbG9nZmlsZXMuCi1E
RUNMQVJFX2Jvb2woYWxzb2xvZ3Rvc3RkZXJyKTsKLQotLy8gU2V0IGNvbG9yIG1lc3NhZ2VzIGxv
Z2dlZCB0byBzdGRlcnIgKGlmIHN1cHBvcnRlZCBieSB0ZXJtaW5hbCkuCi1ERUNMQVJFX2Jvb2wo
Y29sb3Jsb2d0b3N0ZGVycik7Ci0KLS8vIExvZyBtZXNzYWdlcyBhdCBhIGxldmVsID49IHRoaXMg
ZmxhZyBhcmUgYXV0b21hdGljYWxseSBzZW50IHRvCi0vLyBzdGRlcnIgaW4gYWRkaXRpb24gdG8g
bG9nIGZpbGVzLgotREVDTEFSRV9pbnQzMihzdGRlcnJ0aHJlc2hvbGQpOwotCi0vLyBTZXQgd2hl
dGhlciB0aGUgbG9nIHByZWZpeCBzaG91bGQgYmUgcHJlcGVuZGVkIHRvIGVhY2ggbGluZSBvZiBv
dXRwdXQuCi1ERUNMQVJFX2Jvb2wobG9nX3ByZWZpeCk7Ci0KLS8vIExvZyBtZXNzYWdlcyBhdCBh
IGxldmVsIDw9IHRoaXMgZmxhZyBhcmUgYnVmZmVyZWQuCi0vLyBMb2cgbWVzc2FnZXMgYXQgYSBo
aWdoZXIgbGV2ZWwgYXJlIGZsdXNoZWQgaW1tZWRpYXRlbHkuCi1ERUNMQVJFX2ludDMyKGxvZ2J1
ZmxldmVsKTsKLQotLy8gU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB3aGljaCBs
b2dzIG1heSBiZSBidWZmZXJlZCBmb3IuCi1ERUNMQVJFX2ludDMyKGxvZ2J1ZnNlY3MpOwotCi0v
LyBMb2cgc3VwcHJlc3Npb24gbGV2ZWw6IG1lc3NhZ2VzIGxvZ2dlZCBhdCBhIGxvd2VyIGxldmVs
IHRoYW4gdGhpcwotLy8gYXJlIHN1cHByZXNzZWQuCi1ERUNMQVJFX2ludDMyKG1pbmxvZ2xldmVs
KTsKLQotLy8gSWYgc3BlY2lmaWVkLCBsb2dmaWxlcyBhcmUgd3JpdHRlbiBpbnRvIHRoaXMgZGly
ZWN0b3J5IGluc3RlYWQgb2YgdGhlCi0vLyBkZWZhdWx0IGxvZ2dpbmcgZGlyZWN0b3J5LgotREVD
TEFSRV9zdHJpbmcobG9nX2Rpcik7Ci0KLS8vIFNldCB0aGUgbG9nIGZpbGUgbW9kZS4KLURFQ0xB
UkVfaW50MzIobG9nZmlsZV9tb2RlKTsKLQotLy8gU2V0cyB0aGUgcGF0aCBvZiB0aGUgZGlyZWN0
b3J5IGludG8gd2hpY2ggdG8gcHV0IGFkZGl0aW9uYWwgbGlua3MKLS8vIHRvIHRoZSBsb2cgZmls
ZXMuCi1ERUNMQVJFX3N0cmluZyhsb2dfbGluayk7Ci0KLXN0YXRpYyBpbnQzMl90IEZMQUdTX3Yg
PSBmYWxzZTsgIC8vIGluIHZsb2dfaXNfb24uY2MKLQotLy8gU2V0cyB0aGUgbWF4aW11bSBsb2cg
ZmlsZSBzaXplIChpbiBNQikuCi1ERUNMQVJFX2ludDMyKG1heF9sb2dfc2l6ZSk7Ci0KLS8vIFNl
dHMgd2hldGhlciB0byBhdm9pZCBsb2dnaW5nIHRvIHRoZSBkaXNrIGlmIHRoZSBkaXNrIGlzIGZ1
bGwuCi1ERUNMQVJFX2Jvb2woc3RvcF9sb2dnaW5nX2lmX2Z1bGxfZGlzayk7Ci0KLSNpZmRlZiBN
VVNUX1VOREVGX0dGTEFHU19ERUNMQVJFX01BQ1JPUwotI3VuZGVmIE1VU1RfVU5ERUZfR0ZMQUdT
X0RFQ0xBUkVfTUFDUk9TCi0jdW5kZWYgREVDTEFSRV9WQVJJQUJMRQotI3VuZGVmIERFQ0xBUkVf
Ym9vbAotI3VuZGVmIERFQ0xBUkVfaW50MzIKLSN1bmRlZiBERUNMQVJFX3N0cmluZwotI2VuZGlm
Ci0KLS8vIExvZyBtZXNzYWdlcyBiZWxvdyB0aGUgR09PR0xFX1NUUklQX0xPRyBsZXZlbCB3aWxs
IGJlIGNvbXBpbGVkIGF3YXkgZm9yCi0vLyBzZWN1cml0eSByZWFzb25zLiBTZWUgTE9HKHNldmVy
dGl5KSBiZWxvdy4KLQotLy8gQSBmZXcgZGVmaW5pdGlvbnMgb2YgbWFjcm9zIHRoYXQgZG9uJ3Qg
Z2VuZXJhdGUgbXVjaCBjb2RlLiAgU2luY2UKLS8vIExPRyhJTkZPKSBhbmQgaXRzIGlsayBhcmUg
dXNlZCBhbGwgb3ZlciBvdXIgY29kZSwgaXQncwotLy8gYmV0dGVyIHRvIGhhdmUgY29tcGFjdCBj
b2RlIGZvciB0aGVzZSBvcGVyYXRpb25zLgotCi0jaWYgR09PR0xFX1NUUklQX0xPRyA9PSAwCi0j
ZGVmaW5lIENPTVBBQ1RfR09PR0xFX0xPR19JTkZPIGdvb2dsZTo6TG9nTWVzc2FnZSggXAotICAg
ICAgX19GSUxFX18sIF9fTElORV9fKQotI2RlZmluZSBMT0dfVE9fU1RSSU5HX0lORk8obWVzc2Fn
ZSkgZ29vZ2xlOjpMb2dNZXNzYWdlKCBcCi0gICAgICBfX0ZJTEVfXywgX19MSU5FX18sIGdvb2ds
ZTo6R0xPR19JTkZPLCBtZXNzYWdlKQotI2Vsc2UKLSNkZWZpbmUgQ09NUEFDVF9HT09HTEVfTE9H
X0lORk8gZ29vZ2xlOjpOdWxsU3RyZWFtKCkKLSNkZWZpbmUgTE9HX1RPX1NUUklOR19JTkZPKG1l
c3NhZ2UpIGdvb2dsZTo6TnVsbFN0cmVhbSgpCi0jZW5kaWYKLQotI2lmIEdPT0dMRV9TVFJJUF9M
T0cgPD0gMQotI2RlZmluZSBDT01QQUNUX0dPT0dMRV9MT0dfV0FSTklORyBnb29nbGU6OkxvZ01l
c3NhZ2UoIFwKLSAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgZ29vZ2xlOjpHTE9HX1dBUk5JTkcp
Ci0jZGVmaW5lIExPR19UT19TVFJJTkdfV0FSTklORyhtZXNzYWdlKSBnb29nbGU6OkxvZ01lc3Nh
Z2UoIFwKLSAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgZ29vZ2xlOjpHTE9HX1dBUk5JTkcsIG1l
c3NhZ2UpCi0jZWxzZQotI2RlZmluZSBDT01QQUNUX0dPT0dMRV9MT0dfV0FSTklORyBnb29nbGU6
Ok51bGxTdHJlYW0oKQotI2RlZmluZSBMT0dfVE9fU1RSSU5HX1dBUk5JTkcobWVzc2FnZSkgZ29v
Z2xlOjpOdWxsU3RyZWFtKCkKLSNlbmRpZgotCi0jaWYgR09PR0xFX1NUUklQX0xPRyA8PSAyCi0j
ZGVmaW5lIENPTVBBQ1RfR09PR0xFX0xPR19FUlJPUiBnb29nbGU6OkxvZ01lc3NhZ2UoIFwKLSAg
ICAgIF9fRklMRV9fLCBfX0xJTkVfXywgZ29vZ2xlOjpHTE9HX0VSUk9SKQotI2RlZmluZSBMT0df
VE9fU1RSSU5HX0VSUk9SKG1lc3NhZ2UpIGdvb2dsZTo6TG9nTWVzc2FnZSggXAotICAgICAgX19G
SUxFX18sIF9fTElORV9fLCBnb29nbGU6OkdMT0dfRVJST1IsIG1lc3NhZ2UpCi0jZWxzZQotI2Rl
ZmluZSBDT01QQUNUX0dPT0dMRV9MT0dfRVJST1IgZ29vZ2xlOjpOdWxsU3RyZWFtKCkKLSNkZWZp
bmUgTE9HX1RPX1NUUklOR19FUlJPUihtZXNzYWdlKSBnb29nbGU6Ok51bGxTdHJlYW0oKQotI2Vu
ZGlmCi0KLSNpZiBHT09HTEVfU1RSSVBfTE9HIDw9IDMKLSNkZWZpbmUgQ09NUEFDVF9HT09HTEVf
TE9HX0ZBVEFMIGdvb2dsZTo6TG9nTWVzc2FnZUZhdGFsKCBcCi0gICAgICBfX0ZJTEVfXywgX19M
SU5FX18pCi0jZGVmaW5lIExPR19UT19TVFJJTkdfRkFUQUwobWVzc2FnZSkgZ29vZ2xlOjpMb2dN
ZXNzYWdlKCBcCi0gICAgICBfX0ZJTEVfXywgX19MSU5FX18sIGdvb2dsZTo6R0xPR19GQVRBTCwg
bWVzc2FnZSkKLSNlbHNlCi0jZGVmaW5lIENPTVBBQ1RfR09PR0xFX0xPR19GQVRBTCBnb29nbGU6
Ok51bGxTdHJlYW1GYXRhbCgpCi0jZGVmaW5lIExPR19UT19TVFJJTkdfRkFUQUwobWVzc2FnZSkg
Z29vZ2xlOjpOdWxsU3RyZWFtRmF0YWwoKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKE5ERUJVRykg
JiYgIWRlZmluZWQoRENIRUNLX0FMV0FZU19PTikKLSNkZWZpbmUgRENIRUNLX0lTX09OKCkgMAot
I2Vsc2UKLSNkZWZpbmUgRENIRUNLX0lTX09OKCkgMQotI2VuZGlmCi0KLS8vIEZvciBERkFUQUws
IHdlIHdhbnQgdG8gdXNlIExvZ01lc3NhZ2UgKGFzIG9wcG9zZWQgdG8KLS8vIExvZ01lc3NhZ2VG
YXRhbCksIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgb3JpZ2luYWwgYmVoYXZpb3IuCi0jaWYg
IURDSEVDS19JU19PTigpCi0jZGVmaW5lIENPTVBBQ1RfR09PR0xFX0xPR19ERkFUQUwgQ09NUEFD
VF9HT09HTEVfTE9HX0VSUk9SCi0jZWxpZiBHT09HTEVfU1RSSVBfTE9HIDw9IDMKLSNkZWZpbmUg
Q09NUEFDVF9HT09HTEVfTE9HX0RGQVRBTCBnb29nbGU6OkxvZ01lc3NhZ2UoIFwKLSAgICAgIF9f
RklMRV9fLCBfX0xJTkVfXywgZ29vZ2xlOjpHTE9HX0ZBVEFMKQotI2Vsc2UKLSNkZWZpbmUgQ09N
UEFDVF9HT09HTEVfTE9HX0RGQVRBTCBnb29nbGU6Ok51bGxTdHJlYW1GYXRhbCgpCi0jZW5kaWYK
LQotI2RlZmluZSBHT09HTEVfTE9HX0lORk8oY291bnRlcikgZ29vZ2xlOjpMb2dNZXNzYWdlKF9f
RklMRV9fLCBfX0xJTkVfXywgZ29vZ2xlOjpHTE9HX0lORk8sIGNvdW50ZXIsICZnb29nbGU6Okxv
Z01lc3NhZ2U6OlNlbmRUb0xvZykKLSNkZWZpbmUgU1lTTE9HX0lORk8oY291bnRlcikgXAotICBn
b29nbGU6OkxvZ01lc3NhZ2UoX19GSUxFX18sIF9fTElORV9fLCBnb29nbGU6OkdMT0dfSU5GTywg
Y291bnRlciwgXAotICAmZ29vZ2xlOjpMb2dNZXNzYWdlOjpTZW5kVG9TeXNsb2dBbmRMb2cpCi0j
ZGVmaW5lIEdPT0dMRV9MT0dfV0FSTklORyhjb3VudGVyKSAgXAotICBnb29nbGU6OkxvZ01lc3Nh
Z2UoX19GSUxFX18sIF9fTElORV9fLCBnb29nbGU6OkdMT0dfV0FSTklORywgY291bnRlciwgXAot
ICAmZ29vZ2xlOjpMb2dNZXNzYWdlOjpTZW5kVG9Mb2cpCi0jZGVmaW5lIFNZU0xPR19XQVJOSU5H
KGNvdW50ZXIpICBcCi0gIGdvb2dsZTo6TG9nTWVzc2FnZShfX0ZJTEVfXywgX19MSU5FX18sIGdv
b2dsZTo6R0xPR19XQVJOSU5HLCBjb3VudGVyLCBcCi0gICZnb29nbGU6OkxvZ01lc3NhZ2U6OlNl
bmRUb1N5c2xvZ0FuZExvZykKLSNkZWZpbmUgR09PR0xFX0xPR19FUlJPUihjb3VudGVyKSAgXAot
ICBnb29nbGU6OkxvZ01lc3NhZ2UoX19GSUxFX18sIF9fTElORV9fLCBnb29nbGU6OkdMT0dfRVJS
T1IsIGNvdW50ZXIsIFwKLSAgJmdvb2dsZTo6TG9nTWVzc2FnZTo6U2VuZFRvTG9nKQotI2RlZmlu
ZSBTWVNMT0dfRVJST1IoY291bnRlcikgIFwKLSAgZ29vZ2xlOjpMb2dNZXNzYWdlKF9fRklMRV9f
LCBfX0xJTkVfXywgZ29vZ2xlOjpHTE9HX0VSUk9SLCBjb3VudGVyLCBcCi0gICZnb29nbGU6Okxv
Z01lc3NhZ2U6OlNlbmRUb1N5c2xvZ0FuZExvZykKLSNkZWZpbmUgR09PR0xFX0xPR19GQVRBTChj
b3VudGVyKSBcCi0gIGdvb2dsZTo6TG9nTWVzc2FnZShfX0ZJTEVfXywgX19MSU5FX18sIGdvb2ds
ZTo6R0xPR19GQVRBTCwgY291bnRlciwgXAotICAmZ29vZ2xlOjpMb2dNZXNzYWdlOjpTZW5kVG9M
b2cpCi0jZGVmaW5lIFNZU0xPR19GQVRBTChjb3VudGVyKSBcCi0gIGdvb2dsZTo6TG9nTWVzc2Fn
ZShfX0ZJTEVfXywgX19MSU5FX18sIGdvb2dsZTo6R0xPR19GQVRBTCwgY291bnRlciwgXAotICAm
Z29vZ2xlOjpMb2dNZXNzYWdlOjpTZW5kVG9TeXNsb2dBbmRMb2cpCi0jZGVmaW5lIEdPT0dMRV9M
T0dfREZBVEFMKGNvdW50ZXIpIFwKLSAgZ29vZ2xlOjpMb2dNZXNzYWdlKF9fRklMRV9fLCBfX0xJ
TkVfXywgZ29vZ2xlOjpERkFUQUxfTEVWRUwsIGNvdW50ZXIsIFwKLSAgJmdvb2dsZTo6TG9nTWVz
c2FnZTo6U2VuZFRvTG9nKQotI2RlZmluZSBTWVNMT0dfREZBVEFMKGNvdW50ZXIpIFwKLSAgZ29v
Z2xlOjpMb2dNZXNzYWdlKF9fRklMRV9fLCBfX0xJTkVfXywgZ29vZ2xlOjpERkFUQUxfTEVWRUws
IGNvdW50ZXIsIFwKLSAgJmdvb2dsZTo6TG9nTWVzc2FnZTo6U2VuZFRvU3lzbG9nQW5kTG9nKQot
Ci0jaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19XSU4z
Ml9fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19DWUdXSU4zMl9fKQotLy8g
QSB2ZXJ5IHVzZWZ1bCBsb2dnaW5nIG1hY3JvIHRvIGxvZyB3aW5kb3dzIGVycm9yczoKLSNkZWZp
bmUgTE9HX1NZU1JFU1VMVChyZXN1bHQpIFwKLSAgaWYgKEZBSUxFRChIUkVTVUxUX0ZST01fV0lO
MzIocmVzdWx0KSkpIHsgXAotICAgIExQU1RSIG1lc3NhZ2UgPSBOVUxMOyBcCi0gICAgTFBTVFIg
bXNnID0gcmVpbnRlcnByZXRfY2FzdDxMUFNUUj4oJm1lc3NhZ2UpOyBcCi0gICAgRFdPUkQgbWVz
c2FnZV9sZW5ndGggPSBGb3JtYXRNZXNzYWdlQShGT1JNQVRfTUVTU0FHRV9BTExPQ0FURV9CVUZG
RVIgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgRk9STUFUX01FU1NBR0VfRlJPTV9TWVNU
RU0sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAwLCByZXN1bHQsIDAsIG1zZywgMTAwLCBO
VUxMKTsgXAotICAgIGlmIChtZXNzYWdlX2xlbmd0aCA+IDApIHsgXAotICAgICAgZ29vZ2xlOjpM
b2dNZXNzYWdlKF9fRklMRV9fLCBfX0xJTkVfXywgZ29vZ2xlOjpHTE9HX0VSUk9SLCAwLCBcCi0g
ICAgICAgICAgJmdvb2dsZTo6TG9nTWVzc2FnZTo6U2VuZFRvTG9nKS5zdHJlYW0oKSBcCi0gICAg
ICAgICAgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obWVzc2FnZSk7IFwKLSAgICAg
IExvY2FsRnJlZShtZXNzYWdlKTsgXAotICAgIH0gXAotICB9Ci0jZW5kaWYKLQotLy8gV2UgdXNl
IHRoZSBwcmVwcm9jZXNzb3IncyBtZXJnaW5nIG9wZXJhdG9yLCAiIyMiLCBzbyB0aGF0LCBlLmcu
LAotLy8gTE9HKElORk8pIGJlY29tZXMgdGhlIHRva2VuIEdPT0dMRV9MT0dfSU5GTy4gIFRoZXJl
J3Mgc29tZSBmdW5ueQotLy8gc3VidGxlIGRpZmZlcmVuY2UgYmV0d2VlbiBvc3RyZWFtIG1lbWJl
ciBzdHJlYW1pbmcgZnVuY3Rpb25zIChlLmcuLAotLy8gb3N0cmVhbTo6b3BlcmF0b3I8PChpbnQp
IGFuZCBvc3RyZWFtIG5vbi1tZW1iZXIgc3RyZWFtaW5nIGZ1bmN0aW9ucwotLy8gKGUuZy4sIDo6
b3BlcmF0b3I8PChvc3RyZWFtJiwgc3RyaW5nJik6IGl0IHR1cm5zIG91dCB0aGF0IGl0J3MKLS8v
IGltcG9zc2libGUgdG8gc3RyZWFtIHNvbWV0aGluZyBsaWtlIGEgc3RyaW5nIGRpcmVjdGx5IHRv
IGFuIHVubmFtZWQKLS8vIG9zdHJlYW0uIFdlIGVtcGxveSBhIG5lYXQgaGFjayBieSBjYWxsaW5n
IHRoZSBzdHJlYW0oKSBtZW1iZXIKLS8vIGZ1bmN0aW9uIG9mIExvZ01lc3NhZ2Ugd2hpY2ggc2Vl
bXMgdG8gYXZvaWQgdGhlIHByb2JsZW0uCi0jZGVmaW5lIExPRyhzZXZlcml0eSkgQ09NUEFDVF9H
T09HTEVfTE9HXyAjIyBzZXZlcml0eS5zdHJlYW0oKQotI2RlZmluZSBTWVNMT0coc2V2ZXJpdHkp
IFNZU0xPR18gIyMgc2V2ZXJpdHkoMCkuc3RyZWFtKCkKLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci0K
LS8vIFRoZXkgbmVlZCB0aGUgZGVmaW5pdGlvbnMgb2YgaW50ZWdlciB0eXBlcy4KLSNpbmNsdWRl
ICJnbG9nL2xvZ19zZXZlcml0eS5oIgotI2luY2x1ZGUgImdsb2cvdmxvZ19pc19vbi5oIgotCi0v
LyBJbml0aWFsaXplIGdvb2dsZSdzIGxvZ2dpbmcgbGlicmFyeS4gWW91IHdpbGwgc2VlIHRoZSBw
cm9ncmFtIG5hbWUKLS8vIHNwZWNpZmllZCBieSBhcmd2MCBpbiBsb2cgb3V0cHV0cy4KLUdPT0dM
RV9HTE9HX0RMTF9ERUNMIHZvaWQgSW5pdEdvb2dsZUxvZ2dpbmcoY29uc3QgY2hhciogYXJndjAp
OwotCi0vLyBTaHV0ZG93biBnb29nbGUncyBsb2dnaW5nIGxpYnJhcnkuCi1HT09HTEVfR0xPR19E
TExfREVDTCB2b2lkIFNodXRkb3duR29vZ2xlTG9nZ2luZygpOwotCi0vLyBJbnN0YWxsIGEgZnVu
Y3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgTE9HKEZBVEFMKS4KLUdPT0dMRV9HTE9H
X0RMTF9ERUNMIHZvaWQgSW5zdGFsbEZhaWx1cmVGdW5jdGlvbih2b2lkICgqZmFpbF9mdW5jKSgp
KTsKLQotY2xhc3MgTG9nU2luazsgIC8vIGRlZmluZWQgYmVsb3cKLQotLy8gSWYgYSBub24tTlVM
TCBzaW5rIHBvaW50ZXIgaXMgZ2l2ZW4sIHdlIHB1c2ggdGhpcyBtZXNzYWdlIHRvIHRoYXQgc2lu
ay4KLS8vIEZvciBMT0dfVE9fU0lOSyB3ZSB0aGVuIGRvIG5vcm1hbCBMT0coc2V2ZXJpdHkpIGxv
Z2dpbmcgYXMgd2VsbC4KLS8vIFRoaXMgaXMgdXNlZnVsIGZvciBjYXB0dXJpbmcgbWVzc2FnZXMg
YW5kIHBhc3Npbmcvc3RvcmluZyB0aGVtCi0vLyBzb21ld2hlcmUgbW9yZSBzcGVjaWZpYyB0aGFu
IHRoZSBnbG9iYWwgbG9nIG9mIHRoZSBwcm9jZXNzLgotLy8gQXJndW1lbnQgdHlwZXM6Ci0vLyAg
IExvZ1NpbmsqIHNpbms7Ci0vLyAgIExvZ1NldmVyaXR5IHNldmVyaXR5OwotLy8gVGhlIGNhc3Qg
aXMgdG8gZGlzYW1iaWd1YXRlIE5VTEwgYXJndW1lbnRzLgotI2RlZmluZSBMT0dfVE9fU0lOSyhz
aW5rLCBzZXZlcml0eSkgXAotICBnb29nbGU6OkxvZ01lc3NhZ2UoICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgX19GSUxFX18sIF9fTElORV9fLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ29vZ2xlOjpHTE9H
XyAjIyBzZXZlcml0eSwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgc3RhdGljX2Nh
c3Q8Z29vZ2xlOjpMb2dTaW5rKj4oc2luayksIHRydWUpLnN0cmVhbSgpCi0jZGVmaW5lIExPR19U
T19TSU5LX0JVVF9OT1RfVE9fTE9HRklMRShzaW5rLCBzZXZlcml0eSkgICAgICAgICAgICAgICAg
ICBcCi0gIGdvb2dsZTo6TG9nTWVzc2FnZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICBfX0ZJTEVfXywgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBnb29nbGU6OkdMT0dfICMjIHNldmVyaXR5
LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBzdGF0aWNfY2FzdDxnb29nbGU6Okxv
Z1NpbmsqPihzaW5rKSwgZmFsc2UpLnN0cmVhbSgpCi0KLS8vIElmIGEgbm9uLU5VTEwgc3RyaW5n
IHBvaW50ZXIgaXMgZ2l2ZW4sIHdlIHdyaXRlIHRoaXMgbWVzc2FnZSB0byB0aGF0IHN0cmluZy4K
LS8vIFdlIHRoZW4gZG8gbm9ybWFsIExPRyhzZXZlcml0eSkgbG9nZ2luZyBhcyB3ZWxsLgotLy8g
VGhpcyBpcyB1c2VmdWwgZm9yIGNhcHR1cmluZyBtZXNzYWdlcyBhbmQgc3RvcmluZyB0aGVtIHNv
bWV3aGVyZSBtb3JlCi0vLyBzcGVjaWZpYyB0aGFuIHRoZSBnbG9iYWwgbG9nIG9mIHRoZSBwcm9j
ZXNzLgotLy8gQXJndW1lbnQgdHlwZXM6Ci0vLyAgIHN0cmluZyogbWVzc2FnZTsKLS8vICAgTG9n
U2V2ZXJpdHkgc2V2ZXJpdHk7Ci0vLyBUaGUgY2FzdCBpcyB0byBkaXNhbWJpZ3VhdGUgTlVMTCBh
cmd1bWVudHMuCi0vLyBOT1RFOiBMT0coc2V2ZXJpdHkpIGV4cGFuZHMgdG8gTG9nTWVzc2FnZSgp
LnN0cmVhbSgpIGZvciB0aGUgc3BlY2lmaWVkCi0vLyBzZXZlcml0eS4KLSNkZWZpbmUgTE9HX1RP
X1NUUklORyhzZXZlcml0eSwgbWVzc2FnZSkgXAotICBMT0dfVE9fU1RSSU5HXyMjc2V2ZXJpdHko
c3RhdGljX2Nhc3Q8c3RyaW5nKj4obWVzc2FnZSkpLnN0cmVhbSgpCi0KLS8vIElmIGEgbm9uLU5V
TEwgcG9pbnRlciBpcyBnaXZlbiwgd2UgcHVzaCB0aGUgbWVzc2FnZSBvbnRvIHRoZSBlbmQKLS8v
IG9mIGEgdmVjdG9yIG9mIHN0cmluZ3M7IG90aGVyd2lzZSwgd2UgcmVwb3J0IGl0IHdpdGggTE9H
KHNldmVyaXR5KS4KLS8vIFRoaXMgaXMgaGFuZHkgZm9yIGNhcHR1cmluZyBtZXNzYWdlcyBhbmQg
cGVyaGFwcyBwYXNzaW5nIHRoZW0gYmFjawotLy8gdG8gdGhlIGNhbGxlciwgcmF0aGVyIHRoYW4g
cmVwb3J0aW5nIHRoZW0gaW1tZWRpYXRlbHkuCi0vLyBBcmd1bWVudCB0eXBlczoKLS8vICAgTG9n
U2V2ZXJpdHkgc2V2ZXJpdHk7Ci0vLyAgIHZlY3RvcjxzdHJpbmc+ICpvdXR2ZWM7Ci0vLyBUaGUg
Y2FzdCBpcyB0byBkaXNhbWJpZ3VhdGUgTlVMTCBhcmd1bWVudHMuCi0jZGVmaW5lIExPR19TVFJJ
Tkcoc2V2ZXJpdHksIG91dHZlYykgXAotICBMT0dfVE9fU1RSSU5HXyMjc2V2ZXJpdHkoc3RhdGlj
X2Nhc3Q8c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+Kj4ob3V0dmVjKSkuc3RyZWFtKCkKLQotI2Rl
ZmluZSBMT0dfSUYoc2V2ZXJpdHksIGNvbmRpdGlvbikgXAotICAhKGNvbmRpdGlvbikgPyAodm9p
ZCkgMCA6IGdvb2dsZTo6TG9nTWVzc2FnZVZvaWRpZnkoKSAmIExPRyhzZXZlcml0eSkKLSNkZWZp
bmUgU1lTTE9HX0lGKHNldmVyaXR5LCBjb25kaXRpb24pIFwKLSAgIShjb25kaXRpb24pID8gKHZv
aWQpIDAgOiBnb29nbGU6OkxvZ01lc3NhZ2VWb2lkaWZ5KCkgJiBTWVNMT0coc2V2ZXJpdHkpCi0K
LSNkZWZpbmUgTE9HX0FTU0VSVChjb25kaXRpb24pICBcCi0gIExPR19JRihGQVRBTCwgIShjb25k
aXRpb24pKSA8PCAiQXNzZXJ0IGZhaWxlZDogIiAjY29uZGl0aW9uCi0jZGVmaW5lIFNZU0xPR19B
U1NFUlQoY29uZGl0aW9uKSBcCi0gIFNZU0xPR19JRihGQVRBTCwgIShjb25kaXRpb24pKSA8PCAi
QXNzZXJ0IGZhaWxlZDogIiAjY29uZGl0aW9uCi0KLS8vIENIRUNLIGRpZXMgd2l0aCBhIGZhdGFs
IGVycm9yIGlmIGNvbmRpdGlvbiBpcyBub3QgdHJ1ZS4gIEl0IGlzICpub3QqCi0vLyBjb250cm9s
bGVkIGJ5IERDSEVDS19JU19PTigpLCBzbyB0aGUgY2hlY2sgd2lsbCBiZSBleGVjdXRlZCByZWdh
cmRsZXNzIG9mCi0vLyBjb21waWxhdGlvbiBtb2RlLiAgVGhlcmVmb3JlLCBpdCBpcyBzYWZlIHRv
IGRvIHRoaW5ncyBsaWtlOgotLy8gICAgQ0hFQ0soZnAtPldyaXRlKHgpID09IDQpCi0jZGVmaW5l
IENIRUNLKGNvbmRpdGlvbikgIFwKLSAgICAgIExPR19JRihGQVRBTCwgR09PR0xFX1BSRURJQ1Rf
QlJBTkNIX05PVF9UQUtFTighKGNvbmRpdGlvbikpKSBcCi0gICAgICAgICAgICAgPDwgIkNoZWNr
IGZhaWxlZDogIiAjY29uZGl0aW9uICIgIgotCi0vLyBBIGNvbnRhaW5lciBmb3IgYSBzdHJpbmcg
cG9pbnRlciB3aGljaCBjYW4gYmUgZXZhbHVhdGVkIHRvIGEgYm9vbCAtCi0vLyB0cnVlIGlmZiB0
aGUgcG9pbnRlciBpcyBOVUxMLgotc3RydWN0IENoZWNrT3BTdHJpbmcgewotICBDaGVja09wU3Ry
aW5nKHN0ZDo6c3RyaW5nKiBzdHIpIDogc3RyXyhzdHIpIHsgfQotICAvLyBObyBkZXN0cnVjdG9y
OiBpZiBzdHJfIGlzIG5vbi1OVUxMLCB3ZSdyZSBhYm91dCB0byBMT0coRkFUQUwpLAotICAvLyBz
byB0aGVyZSdzIG5vIHBvaW50IGluIGNsZWFuaW5nIHVwIHN0cl8uCi0gIG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7Ci0gICAgcmV0dXJuIEdPT0dMRV9QUkVESUNUX0JSQU5DSF9OT1RfVEFLRU4oc3Ry
XyAhPSBOVUxMKTsKLSAgfQotICBzdGQ6OnN0cmluZyogc3RyXzsKLX07Ci0KLS8vIEZ1bmN0aW9u
IGlzIG92ZXJsb2FkZWQgZm9yIGludGVncmFsIHR5cGVzIHRvIGFsbG93IHN0YXRpYyBjb25zdAot
Ly8gaW50ZWdyYWxzIGRlY2xhcmVkIGluIGNsYXNzZXMgYW5kIG5vdCBkZWZpbmVkIHRvIGJlIHVz
ZWQgYXMgYXJndW1lbnRzIHRvCi0vLyBDSEVDSyogbWFjcm9zLiBJdCdzIG5vdCBlbmNvdXJhZ2Vk
IHRob3VnaC4KLXRlbXBsYXRlIDxjbGFzcyBUPgotaW5saW5lIGNvbnN0IFQmICAgICAgIEdldFJl
ZmVyZW5jZWFibGVWYWx1ZShjb25zdCBUJiAgICAgICAgICAgdCkgeyByZXR1cm4gdDsgfQotaW5s
aW5lIGNoYXIgICAgICAgICAgIEdldFJlZmVyZW5jZWFibGVWYWx1ZShjaGFyICAgICAgICAgICAg
ICAgdCkgeyByZXR1cm4gdDsgfQotaW5saW5lIHVuc2lnbmVkIGNoYXIgIEdldFJlZmVyZW5jZWFi
bGVWYWx1ZSh1bnNpZ25lZCBjaGFyICAgICAgdCkgeyByZXR1cm4gdDsgfQotaW5saW5lIHNpZ25l
ZCBjaGFyICAgIEdldFJlZmVyZW5jZWFibGVWYWx1ZShzaWduZWQgY2hhciAgICAgICAgdCkgeyBy
ZXR1cm4gdDsgfQotaW5saW5lIHNob3J0ICAgICAgICAgIEdldFJlZmVyZW5jZWFibGVWYWx1ZShz
aG9ydCAgICAgICAgICAgICAgdCkgeyByZXR1cm4gdDsgfQotaW5saW5lIHVuc2lnbmVkIHNob3J0
IEdldFJlZmVyZW5jZWFibGVWYWx1ZSh1bnNpZ25lZCBzaG9ydCAgICAgdCkgeyByZXR1cm4gdDsg
fQotaW5saW5lIGludCAgICAgICAgICAgIEdldFJlZmVyZW5jZWFibGVWYWx1ZShpbnQgICAgICAg
ICAgICAgICAgdCkgeyByZXR1cm4gdDsgfQotaW5saW5lIHVuc2lnbmVkIGludCAgIEdldFJlZmVy
ZW5jZWFibGVWYWx1ZSh1bnNpZ25lZCBpbnQgICAgICAgdCkgeyByZXR1cm4gdDsgfQotaW5saW5l
IGxvbmcgICAgICAgICAgIEdldFJlZmVyZW5jZWFibGVWYWx1ZShsb25nICAgICAgICAgICAgICAg
dCkgeyByZXR1cm4gdDsgfQotaW5saW5lIHVuc2lnbmVkIGxvbmcgIEdldFJlZmVyZW5jZWFibGVW
YWx1ZSh1bnNpZ25lZCBsb25nICAgICAgdCkgeyByZXR1cm4gdDsgfQotaW5saW5lIGxvbmcgbG9u
ZyAgICAgIEdldFJlZmVyZW5jZWFibGVWYWx1ZShsb25nIGxvbmcgICAgICAgICAgdCkgeyByZXR1
cm4gdDsgfQotaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBHZXRSZWZlcmVuY2VhYmxlVmFsdWUo
dW5zaWduZWQgbG9uZyBsb25nIHQpIHsKLSAgcmV0dXJuIHQ7Ci19Ci0KLS8vIFRoaXMgaXMgYSBk
dW1teSBjbGFzcyB0byBkZWZpbmUgdGhlIGZvbGxvd2luZyBvcGVyYXRvci4KLXN0cnVjdCBEdW1t
eUNsYXNzVG9EZWZpbmVPcGVyYXRvciB7fTsKLQotfQotCi0vLyBEZWZpbmUgZ2xvYmFsIG9wZXJh
dG9yPDwgdG8gZGVjbGFyZSB1c2luZyA6Om9wZXJhdG9yPDwuCi0vLyBUaGlzIGRlY2xhcmF0aW9u
IHdpbGwgYWxsb3cgdXNlIHRvIHVzZSBDSEVDSyBtYWNyb3MgZm9yIHVzZXIKLS8vIGRlZmluZWQg
Y2xhc3NlcyB3aGljaCBoYXZlIG9wZXJhdG9yPDwgKGUuZy4sIHN0bF9sb2dnaW5nLmgpLgotaW5s
aW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PCgKLSAgICBzdGQ6Om9zdHJlYW0mIG91dCwgY29u
c3QgZ29vZ2xlOjpEdW1teUNsYXNzVG9EZWZpbmVPcGVyYXRvciYpIHsKLSAgcmV0dXJuIG91dDsK
LX0KLQotbmFtZXNwYWNlIGdvb2dsZSB7Ci0KLS8vIFRoaXMgZm9ybWF0cyBhIHZhbHVlIGZvciBh
IGZhaWxpbmcgQ0hFQ0tfWFggc3RhdGVtZW50LiAgT3JkaW5hcmlseSwKLS8vIGl0IHVzZXMgdGhl
IGRlZmluaXRpb24gZm9yIG9wZXJhdG9yPDwsIHdpdGggYSBmZXcgc3BlY2lhbCBjYXNlcyBiZWxv
dy4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgTWFrZUNoZWNrT3BWYWx1ZVN0
cmluZyhzdGQ6Om9zdHJlYW0qIG9zLCBjb25zdCBUJiB2KSB7Ci0gICgqb3MpIDw8IHY7Ci19Ci0K
LS8vIE92ZXJyaWRlcyBmb3IgY2hhciB0eXBlcyBwcm92aWRlIHJlYWRhYmxlIHZhbHVlcyBmb3Ig
dW5wcmludGFibGUKLS8vIGNoYXJhY3RlcnMuCi10ZW1wbGF0ZSA8PiBHT09HTEVfR0xPR19ETExf
REVDTAotdm9pZCBNYWtlQ2hlY2tPcFZhbHVlU3RyaW5nKHN0ZDo6b3N0cmVhbSogb3MsIGNvbnN0
IGNoYXImIHYpOwotdGVtcGxhdGUgPD4gR09PR0xFX0dMT0dfRExMX0RFQ0wKLXZvaWQgTWFrZUNo
ZWNrT3BWYWx1ZVN0cmluZyhzdGQ6Om9zdHJlYW0qIG9zLCBjb25zdCBzaWduZWQgY2hhciYgdik7
Ci10ZW1wbGF0ZSA8PiBHT09HTEVfR0xPR19ETExfREVDTAotdm9pZCBNYWtlQ2hlY2tPcFZhbHVl
U3RyaW5nKHN0ZDo6b3N0cmVhbSogb3MsIGNvbnN0IHVuc2lnbmVkIGNoYXImIHYpOwotCi0vLyBC
dWlsZCB0aGUgZXJyb3IgbWVzc2FnZSBzdHJpbmcuIFNwZWNpZnkgbm8gaW5saW5pbmcgZm9yIGNv
ZGUgc2l6ZS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+Ci1zdGQ6OnN0cmlu
ZyogTWFrZUNoZWNrT3BTdHJpbmcoY29uc3QgVDEmIHYxLCBjb25zdCBUMiYgdjIsIGNvbnN0IGNo
YXIqIGV4cHJ0ZXh0KQotICAgIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpOwotCi1uYW1lc3Bh
Y2UgYmFzZSB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi0vLyBJZiAicyIgaXMgbGVzcyB0aGFu
IGJhc2VfbG9nZ2luZzo6SU5GTywgcmV0dXJucyBiYXNlX2xvZ2dpbmc6OklORk8uCi0vLyBJZiAi
cyIgaXMgZ3JlYXRlciB0aGFuIGJhc2VfbG9nZ2luZzo6RkFUQUwsIHJldHVybnMKLS8vIGJhc2Vf
bG9nZ2luZzo6RVJST1IuICBPdGhlcndpc2UsIHJldHVybnMgInMiLgotTG9nU2V2ZXJpdHkgTm9y
bWFsaXplU2V2ZXJpdHkoTG9nU2V2ZXJpdHkgcyk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5h
bAotCi0vLyBBIGhlbHBlciBjbGFzcyBmb3IgZm9ybWF0dGluZyAiZXhwciAoVjEgdnMuIFYyKSIg
aW4gYSBDSEVDS19YWAotLy8gc3RhdGVtZW50LiAgU2VlIE1ha2VDaGVja09wU3RyaW5nIGZvciBz
YW1wbGUgdXNhZ2UuICBPdGhlcgotLy8gYXBwcm9hY2hlcyB3ZXJlIGNvbnNpZGVyZWQ6IHVzZSBv
ZiBhIHRlbXBsYXRlIG1ldGhvZCAoZS5nLiwKLS8vIGJhc2U6OkJ1aWxkQ2hlY2tPcFN0cmluZyhl
eHBydGV4dCwgYmFzZTo6UHJpbnQ8VDE+LCAmdjEsCi0vLyBiYXNlOjpQcmludDxUMj4sICZ2Miks
IGhvd2V2ZXIgdGhpcyBhcHByb2FjaCBoYXMgY29tcGxpY2F0aW9ucwotLy8gcmVsYXRlZCB0byB2
b2xhdGlsZSBhcmd1bWVudHMgYW5kIGZ1bmN0aW9uLXBvaW50ZXIgYXJndW1lbnRzKS4KLWNsYXNz
IEdPT0dMRV9HTE9HX0RMTF9ERUNMIENoZWNrT3BNZXNzYWdlQnVpbGRlciB7Ci0gcHVibGljOgot
ICAvLyBJbnNlcnRzICJleHBydGV4dCIgYW5kICIgKCIgdG8gdGhlIHN0cmVhbS4KLSAgZXhwbGlj
aXQgQ2hlY2tPcE1lc3NhZ2VCdWlsZGVyKGNvbnN0IGNoYXIgKmV4cHJ0ZXh0KTsKLSAgLy8gRGVs
ZXRlcyAic3RyZWFtXyIuCi0gIH5DaGVja09wTWVzc2FnZUJ1aWxkZXIoKTsKLSAgLy8gRm9yIGlu
c2VydGluZyB0aGUgZmlyc3QgdmFyaWFibGUuCi0gIHN0ZDo6b3N0cmVhbSogRm9yVmFyMSgpIHsg
cmV0dXJuIHN0cmVhbV87IH0KLSAgLy8gRm9yIGluc2VydGluZyB0aGUgc2Vjb25kIHZhcmlhYmxl
IChhZGRzIGFuIGludGVybWVkaWF0ZSAiIHZzLiAiKS4KLSAgc3RkOjpvc3RyZWFtKiBGb3JWYXIy
KCk7Ci0gIC8vIEdldCB0aGUgcmVzdWx0IChpbnNlcnRzIHRoZSBjbG9zaW5nICIpIikuCi0gIHN0
ZDo6c3RyaW5nKiBOZXdTdHJpbmcoKTsKLQotIHByaXZhdGU6Ci0gIHN0ZDo6b3N0cmluZ3N0cmVh
bSAqc3RyZWFtXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBiYXNlCi0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUMSwgdHlwZW5hbWUgVDI+Ci1zdGQ6OnN0cmluZyogTWFrZUNoZWNrT3BTdHJpbmcoY29u
c3QgVDEmIHYxLCBjb25zdCBUMiYgdjIsIGNvbnN0IGNoYXIqIGV4cHJ0ZXh0KSB7Ci0gIGJhc2U6
OkNoZWNrT3BNZXNzYWdlQnVpbGRlciBjb21iKGV4cHJ0ZXh0KTsKLSAgTWFrZUNoZWNrT3BWYWx1
ZVN0cmluZyhjb21iLkZvclZhcjEoKSwgdjEpOwotICBNYWtlQ2hlY2tPcFZhbHVlU3RyaW5nKGNv
bWIuRm9yVmFyMigpLCB2Mik7Ci0gIHJldHVybiBjb21iLk5ld1N0cmluZygpOwotfQotCi0vLyBI
ZWxwZXIgZnVuY3Rpb25zIGZvciBDSEVDS19PUCBtYWNyby4KLS8vIFRoZSAoaW50LCBpbnQpIHNw
ZWNpYWxpemF0aW9uIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUgdGhhdCB0aGUgY29tcGlsZXIKLS8v
IHdpbGwgbm90IGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0ZSB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlv
biBvbiB2YWx1ZXMgb2YKLS8vIHVubmFtZWQgZW51bSB0eXBlIC0gc2VlIGNvbW1lbnQgYmVsb3cu
Ci0jZGVmaW5lIERFRklORV9DSEVDS19PUF9JTVBMKG5hbWUsIG9wKSBcCi0gIHRlbXBsYXRlIDx0
eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+IFwKLSAgaW5saW5lIHN0ZDo6c3RyaW5nKiBuYW1lIyNJ
bXBsKGNvbnN0IFQxJiB2MSwgY29uc3QgVDImIHYyLCAgICBcCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogZXhwcnRleHQpIHsgXAotICAgIGlmIChHT09HTEVfUFJFRElD
VF9UUlVFKHYxIG9wIHYyKSkgcmV0dXJuIE5VTEw7IFwKLSAgICBlbHNlIHJldHVybiBNYWtlQ2hl
Y2tPcFN0cmluZyh2MSwgdjIsIGV4cHJ0ZXh0KTsgXAotICB9IFwKLSAgaW5saW5lIHN0ZDo6c3Ry
aW5nKiBuYW1lIyNJbXBsKGludCB2MSwgaW50IHYyLCBjb25zdCBjaGFyKiBleHBydGV4dCkgeyBc
Ci0gICAgcmV0dXJuIG5hbWUjI0ltcGw8aW50LCBpbnQ+KHYxLCB2MiwgZXhwcnRleHQpOyBcCi0g
IH0KLQotLy8gV2UgdXNlIHRoZSBmdWxsIG5hbWUgQ2hlY2tfRVEsIENoZWNrX05FLCBldGMuIGlu
IGNhc2UgdGhlIGZpbGUgaW5jbHVkaW5nCi0vLyBiYXNlL2xvZ2dpbmcuaCBwcm92aWRlcyBpdHMg
b3duICNkZWZpbmVzIGZvciB0aGUgc2ltcGxlciBuYW1lcyBFUSwgTkUsIGV0Yy4KLS8vIFRoaXMg
aGFwcGVucyBpZiwgZm9yIGV4YW1wbGUsIHRob3NlIGFyZSB1c2VkIGFzIHRva2VuIG5hbWVzIGlu
IGEKLS8vIHlhY2MgZ3JhbW1hci4KLURFRklORV9DSEVDS19PUF9JTVBMKENoZWNrX0VRLCA9PSkg
IC8vIENvbXBpbGF0aW9uIGVycm9yIHdpdGggQ0hFQ0tfRVEoTlVMTCwgeCk/Ci1ERUZJTkVfQ0hF
Q0tfT1BfSU1QTChDaGVja19ORSwgIT0pICAvLyBVc2UgQ0hFQ0soeCA9PSBOVUxMKSBpbnN0ZWFk
LgotREVGSU5FX0NIRUNLX09QX0lNUEwoQ2hlY2tfTEUsIDw9KQotREVGSU5FX0NIRUNLX09QX0lN
UEwoQ2hlY2tfTFQsIDwgKQotREVGSU5FX0NIRUNLX09QX0lNUEwoQ2hlY2tfR0UsID49KQotREVG
SU5FX0NIRUNLX09QX0lNUEwoQ2hlY2tfR1QsID4gKQotI3VuZGVmIERFRklORV9DSEVDS19PUF9J
TVBMCi0KLS8vIEhlbHBlciBtYWNybyBmb3IgYmluYXJ5IG9wZXJhdG9ycy4KLS8vIERvbid0IHVz
ZSB0aGlzIG1hY3JvIGRpcmVjdGx5IGluIHlvdXIgY29kZSwgdXNlIENIRUNLX0VRIGV0IGFsIGJl
bG93LgotCi0jaWYgZGVmaW5lZChTVEFUSUNfQU5BTFlTSVMpCi0vLyBPbmx5IGZvciBzdGF0aWMg
YW5hbHlzaXMgdG9vbCB0byBrbm93IHRoYXQgaXQgaXMgZXF1aXZhbGVudCB0byBhc3NlcnQKLSNk
ZWZpbmUgQ0hFQ0tfT1BfTE9HKG5hbWUsIG9wLCB2YWwxLCB2YWwyLCBsb2cpIENIRUNLKCh2YWwx
KSBvcCAodmFsMikpCi0jZWxpZiBEQ0hFQ0tfSVNfT04oKQotLy8gSW4gZGVidWcgbW9kZSwgYXZv
aWQgY29uc3RydWN0aW5nIENoZWNrT3BTdHJpbmdzIGlmIHBvc3NpYmxlLAotLy8gdG8gcmVkdWNl
IHRoZSBvdmVyaGVhZCBvZiBDSEVDSyBzdGF0bWVudHMgYnkgMnguCi0vLyBSZWFsIERDSEVDSy1o
ZWF2eSB0ZXN0cyBoYXZlIHNlZW4gMS41eCBzcGVlZHVwcy4KLQotLy8gVGhlIG1lYW5pbmcgb2Yg
InN0cmluZyIgbWlnaHQgYmUgZGlmZmVyZW50IGJldHdlZW4gbm93IGFuZAotLy8gd2hlbiB0aGlz
IG1hY3JvIGdldHMgaW52b2tlZCAoZS5nLiwgaWYgc29tZW9uZSBpcyBleHBlcmltZW50aW5nCi0v
LyB3aXRoIG90aGVyIHN0cmluZyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBnZXQgZGVmaW5lZCBhZnRl
ciB0aGlzCi0vLyBmaWxlIGlzIGluY2x1ZGVkKS4gIFNhdmUgdGhlIGN1cnJlbnQgbWVhbmluZyBu
b3cgYW5kIHVzZSBpdAotLy8gaW4gdGhlIG1hY3JvLgotdHlwZWRlZiBzdGQ6OnN0cmluZyBfQ2hl
Y2tfc3RyaW5nOwotI2RlZmluZSBDSEVDS19PUF9MT0cobmFtZSwgb3AsIHZhbDEsIHZhbDIsIGxv
ZykgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB3aGlsZSAoZ29vZ2xlOjpfQ2hlY2tfc3Ry
aW5nKiBfcmVzdWx0ID0gICAgICAgICAgICAgICAgXAotICAgICAgICAgZ29vZ2xlOjpDaGVjayMj
bmFtZSMjSW1wbCggICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgIGdvb2dsZTo6
R2V0UmVmZXJlbmNlYWJsZVZhbHVlKHZhbDEpLCAgICAgICAgXAotICAgICAgICAgICAgIGdvb2ds
ZTo6R2V0UmVmZXJlbmNlYWJsZVZhbHVlKHZhbDIpLCAgICAgICAgXAotICAgICAgICAgICAgICN2
YWwxICIgIiAjb3AgIiAiICN2YWwyKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGxvZyhfX0ZJTEVfXywgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb29nbGU6OkNoZWNrT3BTdHJpbmcoX3Jlc3Vs
dCkpLnN0cmVhbSgpCi0jZWxzZQotLy8gSW4gb3B0aW1pemVkIG1vZGUsIHVzZSBDaGVja09wU3Ry
aW5nIHRvIGhpbnQgdG8gY29tcGlsZXIgdGhhdAotLy8gdGhlIHdoaWxlIGNvbmRpdGlvbiBpcyB1
bmxpa2VseS4KLSNkZWZpbmUgQ0hFQ0tfT1BfTE9HKG5hbWUsIG9wLCB2YWwxLCB2YWwyLCBsb2cp
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgd2hpbGUgKGdvb2dsZTo6Q2hlY2tPcFN0cmlu
ZyBfcmVzdWx0ID0gICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIGdvb2dsZTo6Q2hlY2sjI25h
bWUjI0ltcGwoICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICBnb29nbGU6Okdl
dFJlZmVyZW5jZWFibGVWYWx1ZSh2YWwxKSwgICAgICAgIFwKLSAgICAgICAgICAgICBnb29nbGU6
OkdldFJlZmVyZW5jZWFibGVWYWx1ZSh2YWwyKSwgICAgICAgIFwKLSAgICAgICAgICAgICAjdmFs
MSAiICIgI29wICIgIiAjdmFsMikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBsb2coX19GSUxFX18sIF9fTElORV9fLCBfcmVzdWx0KS5zdHJlYW0oKQotI2VuZGlmICAv
LyBTVEFUSUNfQU5BTFlTSVMsIERDSEVDS19JU19PTigpCi0KLSNpZiBHT09HTEVfU1RSSVBfTE9H
IDw9IDMKLSNkZWZpbmUgQ0hFQ0tfT1AobmFtZSwgb3AsIHZhbDEsIHZhbDIpIFwKLSAgQ0hFQ0tf
T1BfTE9HKG5hbWUsIG9wLCB2YWwxLCB2YWwyLCBnb29nbGU6OkxvZ01lc3NhZ2VGYXRhbCkKLSNl
bHNlCi0jZGVmaW5lIENIRUNLX09QKG5hbWUsIG9wLCB2YWwxLCB2YWwyKSBcCi0gIENIRUNLX09Q
X0xPRyhuYW1lLCBvcCwgdmFsMSwgdmFsMiwgZ29vZ2xlOjpOdWxsU3RyZWFtRmF0YWwpCi0jZW5k
aWYgLy8gU1RSSVBfTE9HIDw9IDMKLQotLy8gRXF1YWxpdHkvSW5lcXVhbGl0eSBjaGVja3MgLSBj
b21wYXJlIHR3byB2YWx1ZXMsIGFuZCBsb2cgYSBGQVRBTCBtZXNzYWdlCi0vLyBpbmNsdWRpbmcg
dGhlIHR3byB2YWx1ZXMgd2hlbiB0aGUgcmVzdWx0IGlzIG5vdCBhcyBleHBlY3RlZC4gIFRoZSB2
YWx1ZXMKLS8vIG11c3QgaGF2ZSBvcGVyYXRvcjw8KG9zdHJlYW0sIC4uLikgZGVmaW5lZC4KLS8v
Ci0vLyBZb3UgbWF5IGFwcGVuZCB0byB0aGUgZXJyb3IgbWVzc2FnZSBsaWtlIHNvOgotLy8gICBD
SEVDS19ORSgxLCAyKSA8PCAiOiBUaGUgd29ybGQgbXVzdCBiZSBlbmRpbmchIjsKLS8vCi0vLyBX
ZSBhcmUgdmVyeSBjYXJlZnVsIHRvIGVuc3VyZSB0aGF0IGVhY2ggYXJndW1lbnQgaXMgZXZhbHVh
dGVkIGV4YWN0bHkKLS8vIG9uY2UsIGFuZCB0aGF0IGFueXRoaW5nIHdoaWNoIGlzIGxlZ2FsIHRv
IHBhc3MgYXMgYSBmdW5jdGlvbiBhcmd1bWVudCBpcwotLy8gbGVnYWwgaGVyZS4gIEluIHBhcnRp
Y3VsYXIsIHRoZSBhcmd1bWVudHMgbWF5IGJlIHRlbXBvcmFyeSBleHByZXNzaW9ucwotLy8gd2hp
Y2ggd2lsbCBlbmQgdXAgYmVpbmcgZGVzdHJveWVkIGF0IHRoZSBlbmQgb2YgdGhlIGFwcGFyZW50
IHN0YXRlbWVudCwKLS8vIGZvciBleGFtcGxlOgotLy8gICBDSEVDS19FUShzdHJpbmcoImFiYyIp
WzFdLCAnYicpOwotLy8KLS8vIFdBUk5JTkc6IFRoZXNlIGRvbid0IGNvbXBpbGUgY29ycmVjdGx5
IGlmIG9uZSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgcG9pbnRlcgotLy8gYW5kIHRoZSBvdGhlciBp
cyBOVUxMLiBUbyB3b3JrIGFyb3VuZCB0aGlzLCBzaW1wbHkgc3RhdGljX2Nhc3QgTlVMTCB0byB0
aGUKLS8vIHR5cGUgb2YgdGhlIGRlc2lyZWQgcG9pbnRlci4KLQotI2RlZmluZSBDSEVDS19FUSh2
YWwxLCB2YWwyKSBDSEVDS19PUChfRVEsID09LCB2YWwxLCB2YWwyKQotI2RlZmluZSBDSEVDS19O
RSh2YWwxLCB2YWwyKSBDSEVDS19PUChfTkUsICE9LCB2YWwxLCB2YWwyKQotI2RlZmluZSBDSEVD
S19MRSh2YWwxLCB2YWwyKSBDSEVDS19PUChfTEUsIDw9LCB2YWwxLCB2YWwyKQotI2RlZmluZSBD
SEVDS19MVCh2YWwxLCB2YWwyKSBDSEVDS19PUChfTFQsIDwgLCB2YWwxLCB2YWwyKQotI2RlZmlu
ZSBDSEVDS19HRSh2YWwxLCB2YWwyKSBDSEVDS19PUChfR0UsID49LCB2YWwxLCB2YWwyKQotI2Rl
ZmluZSBDSEVDS19HVCh2YWwxLCB2YWwyKSBDSEVDS19PUChfR1QsID4gLCB2YWwxLCB2YWwyKQot
Ci0vLyBDaGVjayB0aGF0IHRoZSBpbnB1dCBpcyBub24gTlVMTC4gIFRoaXMgdmVyeSB1c2VmdWwg
aW4gY29uc3RydWN0b3IKLS8vIGluaXRpYWxpemVyIGxpc3RzLgotCi0jZGVmaW5lIENIRUNLX05P
VE5VTEwodmFsKSBcCi0gIGdvb2dsZTo6Q2hlY2tOb3ROdWxsKF9fRklMRV9fLCBfX0xJTkVfXywg
IiciICN2YWwgIicgTXVzdCBiZSBub24gTlVMTCIsICh2YWwpKQotCi0vLyBIZWxwZXIgZnVuY3Rp
b25zIGZvciBzdHJpbmcgY29tcGFyaXNvbnMuCi0vLyBUbyBhdm9pZCBibG9hdCwgdGhlIGRlZmlu
aXRpb25zIGFyZSBpbiBsb2dnaW5nLmNjLgotI2RlZmluZSBERUNMQVJFX0NIRUNLX1NUUk9QX0lN
UEwoZnVuYywgZXhwZWN0ZWQpIFwKLSAgR09PR0xFX0dMT0dfRExMX0RFQ0wgc3RkOjpzdHJpbmcq
IENoZWNrIyNmdW5jIyNleHBlY3RlZCMjSW1wbCggXAotICAgICAgY29uc3QgY2hhciogczEsIGNv
bnN0IGNoYXIqIHMyLCBjb25zdCBjaGFyKiBuYW1lcyk7Ci1ERUNMQVJFX0NIRUNLX1NUUk9QX0lN
UEwoc3RyY21wLCB0cnVlKQotREVDTEFSRV9DSEVDS19TVFJPUF9JTVBMKHN0cmNtcCwgZmFsc2Up
Ci1ERUNMQVJFX0NIRUNLX1NUUk9QX0lNUEwoc3RyY2FzZWNtcCwgdHJ1ZSkKLURFQ0xBUkVfQ0hF
Q0tfU1RST1BfSU1QTChzdHJjYXNlY21wLCBmYWxzZSkKLSN1bmRlZiBERUNMQVJFX0NIRUNLX1NU
Uk9QX0lNUEwKLQotLy8gSGVscGVyIG1hY3JvIGZvciBzdHJpbmcgY29tcGFyaXNvbnMuCi0vLyBE
b24ndCB1c2UgdGhpcyBtYWNybyBkaXJlY3RseSBpbiB5b3VyIGNvZGUsIHVzZSBDSEVDS19TVFJF
USBldCBhbCBiZWxvdy4KLSNkZWZpbmUgQ0hFQ0tfU1RST1AoZnVuYywgb3AsIGV4cGVjdGVkLCBz
MSwgczIpIFwKLSAgd2hpbGUgKGdvb2dsZTo6Q2hlY2tPcFN0cmluZyBfcmVzdWx0ID0gXAotICAg
ICAgICAgZ29vZ2xlOjpDaGVjayMjZnVuYyMjZXhwZWN0ZWQjI0ltcGwoKHMxKSwgKHMyKSwgXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzMSAiICIgI29wICIgIiAjczIp
KSBcCi0gICAgTE9HKEZBVEFMKSA8PCAqX3Jlc3VsdC5zdHJfCi0KLQotLy8gU3RyaW5nIChjaGFy
KikgZXF1YWxpdHkvaW5lcXVhbGl0eSBjaGVja3MuCi0vLyBDQVNFIHZlcnNpb25zIGFyZSBjYXNl
LWluc2Vuc2l0aXZlLgotLy8KLS8vIE5vdGUgdGhhdCAiczEiIGFuZCAiczIiIG1heSBiZSB0ZW1w
b3Jhcnkgc3RyaW5ncyB3aGljaCBhcmUgZGVzdHJveWVkCi0vLyBieSB0aGUgY29tcGlsZXIgYXQg
dGhlIGVuZCBvZiB0aGUgY3VycmVudCAiZnVsbCBleHByZXNzaW9uIgotLy8gKGUuZy4gQ0hFQ0tf
U1RSRVEoRm9vKCkuY19zdHIoKSwgQmFyKCkuY19zdHIoKSkpLgotCi0jZGVmaW5lIENIRUNLX1NU
UkVRKHMxLCBzMikgQ0hFQ0tfU1RST1Aoc3RyY21wLCA9PSwgdHJ1ZSwgczEsIHMyKQotI2RlZmlu
ZSBDSEVDS19TVFJORShzMSwgczIpIENIRUNLX1NUUk9QKHN0cmNtcCwgIT0sIGZhbHNlLCBzMSwg
czIpCi0jZGVmaW5lIENIRUNLX1NUUkNBU0VFUShzMSwgczIpIENIRUNLX1NUUk9QKHN0cmNhc2Vj
bXAsID09LCB0cnVlLCBzMSwgczIpCi0jZGVmaW5lIENIRUNLX1NUUkNBU0VORShzMSwgczIpIENI
RUNLX1NUUk9QKHN0cmNhc2VjbXAsICE9LCBmYWxzZSwgczEsIHMyKQotCi0jZGVmaW5lIENIRUNL
X0lOREVYKEksQSkgQ0hFQ0soSSA8IChzaXplb2YoQSkvc2l6ZW9mKEFbMF0pKSkKLSNkZWZpbmUg
Q0hFQ0tfQk9VTkQoQixBKSBDSEVDSyhCIDw9IChzaXplb2YoQSkvc2l6ZW9mKEFbMF0pKSkKLQot
I2RlZmluZSBDSEVDS19ET1VCTEVfRVEodmFsMSwgdmFsMikgICAgICAgICAgICAgIFwKLSAgZG8g
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ0hFQ0tf
TEUoKHZhbDEpLCAodmFsMikrMC4wMDAwMDAwMDAwMDAwMDFMKTsgXAotICAgIENIRUNLX0dFKCh2
YWwxKSwgKHZhbDIpLTAuMDAwMDAwMDAwMDAwMDAxTCk7IFwKLSAgfSB3aGlsZSAoMCkKLQotI2Rl
ZmluZSBDSEVDS19ORUFSKHZhbDEsIHZhbDIsIG1hcmdpbikgICAgICAgICAgIFwKLSAgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ0hFQ0tfTEUo
KHZhbDEpLCAodmFsMikrKG1hcmdpbikpOyAgICAgICAgICAgXAotICAgIENIRUNLX0dFKCh2YWwx
KSwgKHZhbDIpLShtYXJnaW4pKTsgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotLy8gcGVy
cm9yKCkuLmdvb2dseSBzdHlsZSEKLS8vCi0vLyBQTE9HKCkgYW5kIFBMT0dfSUYoKSBhbmQgUENI
RUNLKCkgYmVoYXZlIGV4YWN0bHkgbGlrZSB0aGVpciBMT0cqIGFuZAotLy8gQ0hFQ0sgZXF1aXZh
bGVudHMgd2l0aCB0aGUgYWRkaXRpb24gdGhhdCB0aGV5IHBvc3RwZW5kIGEgZGVzY3JpcHRpb24K
LS8vIG9mIHRoZSBjdXJyZW50IHN0YXRlIG9mIGVycm5vIHRvIHRoZWlyIG91dHB1dCBsaW5lcy4K
LQotI2RlZmluZSBQTE9HKHNldmVyaXR5KSBHT09HTEVfUExPRyhzZXZlcml0eSwgMCkuc3RyZWFt
KCkKLQotI2RlZmluZSBHT09HTEVfUExPRyhzZXZlcml0eSwgY291bnRlcikgIFwKLSAgZ29vZ2xl
OjpFcnJub0xvZ01lc3NhZ2UoIFwKLSAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgZ29vZ2xlOjpH
TE9HXyAjIyBzZXZlcml0eSwgY291bnRlciwgXAotICAgICAgJmdvb2dsZTo6TG9nTWVzc2FnZTo6
U2VuZFRvTG9nKQotCi0jZGVmaW5lIFBMT0dfSUYoc2V2ZXJpdHksIGNvbmRpdGlvbikgXAotICAh
KGNvbmRpdGlvbikgPyAodm9pZCkgMCA6IGdvb2dsZTo6TG9nTWVzc2FnZVZvaWRpZnkoKSAmIFBM
T0coc2V2ZXJpdHkpCi0KLS8vIEEgQ0hFQ0soKSBtYWNybyB0aGF0IHBvc3RwZW5kcyBlcnJubyBp
ZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLiBFLmcuCi0vLwotLy8gaWYgKHBvbGwoZmRzLCBuZmRz
LCB0aW1lb3V0KSA9PSAtMSkgeyBQQ0hFQ0soZXJybm8gPT0gRUlOVFIpOyAuLi4gfQotI2RlZmlu
ZSBQQ0hFQ0soY29uZGl0aW9uKSAgXAotICAgICAgUExPR19JRihGQVRBTCwgR09PR0xFX1BSRURJ
Q1RfQlJBTkNIX05PVF9UQUtFTighKGNvbmRpdGlvbikpKSBcCi0gICAgICAgICAgICAgIDw8ICJD
aGVjayBmYWlsZWQ6ICIgI2NvbmRpdGlvbiAiICIKLQotLy8gQSBDSEVDSygpIG1hY3JvIHRoYXQg
bGV0cyB5b3UgYXNzZXJ0IHRoZSBzdWNjZXNzIG9mIGEgZnVuY3Rpb24gdGhhdAotLy8gcmV0dXJu
cyAtMSBhbmQgc2V0cyBlcnJubyBpbiBjYXNlIG9mIGFuIGVycm9yLiBFLmcuCi0vLwotLy8gQ0hF
Q0tfRVJSKG1rZGlyKHBhdGgsIDA3MDApKTsKLS8vCi0vLyBvcgotLy8KLS8vIGludCBmZCA9IG9w
ZW4oZmlsZW5hbWUsIGZsYWdzKTsgQ0hFQ0tfRVJSKGZkKSA8PCAiOiBvcGVuICIgPDwgZmlsZW5h
bWU7Ci0jZGVmaW5lIENIRUNLX0VSUihpbnZvY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLVBMT0dfSUYoRkFUQUwsIEdPT0dMRV9QUkVESUNUX0JSQU5D
SF9OT1RfVEFLRU4oKGludm9jYXRpb24pID09IC0xKSkgICAgXAotICAgICAgICA8PCAjaW52b2Nh
dGlvbgotCi0vLyBVc2UgbWFjcm8gZXhwYW5zaW9uIHRvIGNyZWF0ZSwgZm9yIGVhY2ggdXNlIG9m
IExPR19FVkVSWV9OKCksIHN0YXRpYwotLy8gdmFyaWFibGVzIHdpdGggdGhlIF9fTElORV9fIGV4
cGFuc2lvbiBhcyBwYXJ0IG9mIHRoZSB2YXJpYWJsZSBuYW1lLgotI2RlZmluZSBMT0dfRVZFUllf
Tl9WQVJOQU1FKGJhc2UsIGxpbmUpIExPR19FVkVSWV9OX1ZBUk5BTUVfQ09OQ0FUKGJhc2UsIGxp
bmUpCi0jZGVmaW5lIExPR19FVkVSWV9OX1ZBUk5BTUVfQ09OQ0FUKGJhc2UsIGxpbmUpIGJhc2Ug
IyMgbGluZQotCi0jZGVmaW5lIExPR19PQ0NVUlJFTkNFUyBMT0dfRVZFUllfTl9WQVJOQU1FKG9j
Y3VycmVuY2VzXywgX19MSU5FX18pCi0jZGVmaW5lIExPR19PQ0NVUlJFTkNFU19NT0RfTiBMT0df
RVZFUllfTl9WQVJOQU1FKG9jY3VycmVuY2VzX21vZF9uXywgX19MSU5FX18pCi0KLSNkZWZpbmUg
U09NRV9LSU5EX09GX0xPR19FVkVSWV9OKHNldmVyaXR5LCBuLCB3aGF0X3RvX2RvKSBcCi0gIHN0
YXRpYyBpbnQgTE9HX09DQ1VSUkVOQ0VTID0gMCwgTE9HX09DQ1VSUkVOQ0VTX01PRF9OID0gMDsg
XAotICArK0xPR19PQ0NVUlJFTkNFUzsgXAotICBpZiAoKytMT0dfT0NDVVJSRU5DRVNfTU9EX04g
PiBuKSBMT0dfT0NDVVJSRU5DRVNfTU9EX04gLT0gbjsgXAotICBpZiAoTE9HX09DQ1VSUkVOQ0VT
X01PRF9OID09IDEpIFwKLSAgICBnb29nbGU6OkxvZ01lc3NhZ2UoIFwKLSAgICAgICAgX19GSUxF
X18sIF9fTElORV9fLCBnb29nbGU6OkdMT0dfICMjIHNldmVyaXR5LCBMT0dfT0NDVVJSRU5DRVMs
IFwKLSAgICAgICAgJndoYXRfdG9fZG8pLnN0cmVhbSgpCi0KLSNkZWZpbmUgU09NRV9LSU5EX09G
X0xPR19JRl9FVkVSWV9OKHNldmVyaXR5LCBjb25kaXRpb24sIG4sIHdoYXRfdG9fZG8pIFwKLSAg
c3RhdGljIGludCBMT0dfT0NDVVJSRU5DRVMgPSAwLCBMT0dfT0NDVVJSRU5DRVNfTU9EX04gPSAw
OyBcCi0gICsrTE9HX09DQ1VSUkVOQ0VTOyBcCi0gIGlmIChjb25kaXRpb24gJiYgXAotICAgICAg
KChMT0dfT0NDVVJSRU5DRVNfTU9EX049KExPR19PQ0NVUlJFTkNFU19NT0RfTiArIDEpICUgbikg
PT0gKDEgJSBuKSkpIFwKLSAgICBnb29nbGU6OkxvZ01lc3NhZ2UoIFwKLSAgICAgICAgX19GSUxF
X18sIF9fTElORV9fLCBnb29nbGU6OkdMT0dfICMjIHNldmVyaXR5LCBMT0dfT0NDVVJSRU5DRVMs
IFwKLSAgICAgICAgICAgICAgICAgJndoYXRfdG9fZG8pLnN0cmVhbSgpCi0KLSNkZWZpbmUgU09N
RV9LSU5EX09GX1BMT0dfRVZFUllfTihzZXZlcml0eSwgbiwgd2hhdF90b19kbykgXAotICBzdGF0
aWMgaW50IExPR19PQ0NVUlJFTkNFUyA9IDAsIExPR19PQ0NVUlJFTkNFU19NT0RfTiA9IDA7IFwK
LSAgKytMT0dfT0NDVVJSRU5DRVM7IFwKLSAgaWYgKCsrTE9HX09DQ1VSUkVOQ0VTX01PRF9OID4g
bikgTE9HX09DQ1VSUkVOQ0VTX01PRF9OIC09IG47IFwKLSAgaWYgKExPR19PQ0NVUlJFTkNFU19N
T0RfTiA9PSAxKSBcCi0gICAgZ29vZ2xlOjpFcnJub0xvZ01lc3NhZ2UoIFwKLSAgICAgICAgX19G
SUxFX18sIF9fTElORV9fLCBnb29nbGU6OkdMT0dfICMjIHNldmVyaXR5LCBMT0dfT0NDVVJSRU5D
RVMsIFwKLSAgICAgICAgJndoYXRfdG9fZG8pLnN0cmVhbSgpCi0KLSNkZWZpbmUgU09NRV9LSU5E
X09GX0xPR19GSVJTVF9OKHNldmVyaXR5LCBuLCB3aGF0X3RvX2RvKSBcCi0gIHN0YXRpYyBpbnQg
TE9HX09DQ1VSUkVOQ0VTID0gMDsgXAotICBpZiAoTE9HX09DQ1VSUkVOQ0VTIDw9IG4pIFwKLSAg
ICArK0xPR19PQ0NVUlJFTkNFUzsgXAotICBpZiAoTE9HX09DQ1VSUkVOQ0VTIDw9IG4pIFwKLSAg
ICBnb29nbGU6OkxvZ01lc3NhZ2UoIFwKLSAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBnb29n
bGU6OkdMT0dfICMjIHNldmVyaXR5LCBMT0dfT0NDVVJSRU5DRVMsIFwKLSAgICAgICAgJndoYXRf
dG9fZG8pLnN0cmVhbSgpCi0KLW5hbWVzcGFjZSBnbG9nX2ludGVybmFsX25hbWVzcGFjZV8gewot
dGVtcGxhdGUgPGJvb2w+Ci1zdHJ1Y3QgQ29tcGlsZUFzc2VydCB7Ci19Owotc3RydWN0IENyYXNo
UmVhc29uOwotCi0vLyBSZXR1cm5zIHRydWUgaWYgRmFpbHVyZVNpZ25hbEhhbmRsZXIgaXMgaW5z
dGFsbGVkLgotYm9vbCBJc0ZhaWx1cmVTaWduYWxIYW5kbGVySW5zdGFsbGVkKCk7Ci19ICAvLyBu
YW1lc3BhY2UgZ2xvZ19pbnRlcm5hbF9uYW1lc3BhY2VfCi0KLSNkZWZpbmUgR09PR0xFX0dMT0df
Q09NUElMRV9BU1NFUlQoZXhwciwgbXNnKSBcCi0gIHR5cGVkZWYgZ29vZ2xlOjpnbG9nX2ludGVy
bmFsX25hbWVzcGFjZV86OkNvbXBpbGVBc3NlcnQ8KGJvb2woZXhwcikpPiBtc2dbYm9vbChleHBy
KSA/IDEgOiAtMV0KLQotI2RlZmluZSBMT0dfRVZFUllfTihzZXZlcml0eSwgbikgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHT09HTEVfR0xPR19DT01QSUxFX0FT
U0VSVChnb29nbGU6OkdMT0dfICMjIHNldmVyaXR5IDwgXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnb29nbGU6Ok5VTV9TRVZFUklUSUVTLCAgICAgXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJTlZBTElEX1JFUVVFU1RFRF9MT0dfU0VWRVJJVFkpOyAgICAgICAgICAgXAot
ICBTT01FX0tJTkRfT0ZfTE9HX0VWRVJZX04oc2V2ZXJpdHksIChuKSwgZ29vZ2xlOjpMb2dNZXNz
YWdlOjpTZW5kVG9Mb2cpCi0KLSNkZWZpbmUgU1lTTE9HX0VWRVJZX04oc2V2ZXJpdHksIG4pIFwK
LSAgU09NRV9LSU5EX09GX0xPR19FVkVSWV9OKHNldmVyaXR5LCAobiksIGdvb2dsZTo6TG9nTWVz
c2FnZTo6U2VuZFRvU3lzbG9nQW5kTG9nKQotCi0jZGVmaW5lIFBMT0dfRVZFUllfTihzZXZlcml0
eSwgbikgXAotICBTT01FX0tJTkRfT0ZfUExPR19FVkVSWV9OKHNldmVyaXR5LCAobiksIGdvb2ds
ZTo6TG9nTWVzc2FnZTo6U2VuZFRvTG9nKQotCi0jZGVmaW5lIExPR19GSVJTVF9OKHNldmVyaXR5
LCBuKSBcCi0gIFNPTUVfS0lORF9PRl9MT0dfRklSU1RfTihzZXZlcml0eSwgKG4pLCBnb29nbGU6
OkxvZ01lc3NhZ2U6OlNlbmRUb0xvZykKLQotI2RlZmluZSBMT0dfSUZfRVZFUllfTihzZXZlcml0
eSwgY29uZGl0aW9uLCBuKSBcCi0gIFNPTUVfS0lORF9PRl9MT0dfSUZfRVZFUllfTihzZXZlcml0
eSwgKGNvbmRpdGlvbiksIChuKSwgZ29vZ2xlOjpMb2dNZXNzYWdlOjpTZW5kVG9Mb2cpCi0KLS8v
IFdlIHdhbnQgdGhlIHNwZWNpYWwgQ09VTlRFUiB2YWx1ZSBhdmFpbGFibGUgZm9yIExPR19FVkVS
WV9YKCknZWQgbWVzc2FnZXMKLWVudW0gUFJJVkFURV9Db3VudGVyIHtDT1VOVEVSfTsKLQotI2lm
ZGVmIEdMT0dfTk9fQUJCUkVWSUFURURfU0VWRVJJVElFUwotLy8gd2luZ2RpLmggZGVmaW5lcyBF
UlJPUiB0byBiZSAwLiBXaGVuIHdlIGNhbGwgTE9HKEVSUk9SKSwgaXQgZ2V0cwotLy8gc3Vic3Rp
dHV0ZWQgd2l0aCAwLCBhbmQgaXQgZXhwYW5kcyB0byBDT01QQUNUX0dPT0dMRV9MT0dfMC4gVG8g
YWxsb3cgdXMKLS8vIHRvIGtlZXAgdXNpbmcgdGhpcyBzeW50YXgsIHdlIGRlZmluZSB0aGlzIG1h
Y3JvIHRvIGRvIHRoZSBzYW1lIHRoaW5nCi0vLyBhcyBDT01QQUNUX0dPT0dMRV9MT0dfRVJST1Iu
Ci0jZGVmaW5lIENPTVBBQ1RfR09PR0xFX0xPR18wIENPTVBBQ1RfR09PR0xFX0xPR19FUlJPUgot
I2RlZmluZSBTWVNMT0dfMCBTWVNMT0dfRVJST1IKLSNkZWZpbmUgTE9HX1RPX1NUUklOR18wIExP
R19UT19TVFJJTkdfRVJST1IKLS8vIE5lZWRlZCBmb3IgTE9HX0lTX09OKEVSUk9SKS4KLWNvbnN0
IExvZ1NldmVyaXR5IEdMT0dfMCA9IEdMT0dfRVJST1I7Ci0jZWxzZQotLy8gVXNlcnMgbWF5IGlu
Y2x1ZGUgd2luZG93cy5oIGFmdGVyIGxvZ2dpbmcuaCB3aXRob3V0Ci0vLyBHTE9HX05PX0FCQlJF
VklBVEVEX1NFVkVSSVRJRVMgbm9yIFdJTjMyX0xFQU5fQU5EX01FQU4uCi0vLyBGb3IgdGhpcyBj
YXNlLCB3ZSBjYW5ub3QgZGV0ZWN0IGlmIEVSUk9SIGlzIGRlZmluZWQgYmVmb3JlIHVzZXJzCi0v
LyBhY3R1YWxseSB1c2UgRVJST1IuIExldCdzIG1ha2UgYW4gdW5kZWZpbmVkIHN5bWJvbCB0byB3
YXJuIHVzZXJzLgotIyBkZWZpbmUgR0xPR19FUlJPUl9NU0cgRVJST1JfbWFjcm9faXNfZGVmaW5l
ZF9EZWZpbmVfR0xPR19OT19BQkJSRVZJQVRFRF9TRVZFUklUSUVTX2JlZm9yZV9pbmNsdWRpbmdf
bG9nZ2luZ19oX1NlZV90aGVfZG9jdW1lbnRfZm9yX2RldGFpbAotIyBkZWZpbmUgQ09NUEFDVF9H
T09HTEVfTE9HXzAgR0xPR19FUlJPUl9NU0cKLSMgZGVmaW5lIFNZU0xPR18wIEdMT0dfRVJST1Jf
TVNHCi0jIGRlZmluZSBMT0dfVE9fU1RSSU5HXzAgR0xPR19FUlJPUl9NU0cKLSMgZGVmaW5lIEdM
T0dfMCBHTE9HX0VSUk9SX01TRwotI2VuZGlmCi0KLS8vIFBsdXMgc29tZSBkZWJ1Zy1sb2dnaW5n
IG1hY3JvcyB0aGF0IGdldCBjb21waWxlZCB0byBub3RoaW5nIGZvciBwcm9kdWN0aW9uCi0KLSNp
ZiBEQ0hFQ0tfSVNfT04oKQotCi0jZGVmaW5lIERMT0coc2V2ZXJpdHkpIExPRyhzZXZlcml0eSkK
LSNkZWZpbmUgRFZMT0codmVyYm9zZWxldmVsKSBWTE9HKHZlcmJvc2VsZXZlbCkKLSNkZWZpbmUg
RExPR19JRihzZXZlcml0eSwgY29uZGl0aW9uKSBMT0dfSUYoc2V2ZXJpdHksIGNvbmRpdGlvbikK
LSNkZWZpbmUgRExPR19FVkVSWV9OKHNldmVyaXR5LCBuKSBMT0dfRVZFUllfTihzZXZlcml0eSwg
bikKLSNkZWZpbmUgRExPR19JRl9FVkVSWV9OKHNldmVyaXR5LCBjb25kaXRpb24sIG4pIFwKLSAg
TE9HX0lGX0VWRVJZX04oc2V2ZXJpdHksIGNvbmRpdGlvbiwgbikKLSNkZWZpbmUgRExPR19BU1NF
UlQoY29uZGl0aW9uKSBMT0dfQVNTRVJUKGNvbmRpdGlvbikKLQotLy8gZGVidWctb25seSBjaGVj
a2luZy4gIGV4ZWN1dGVkIGlmIERDSEVDS19JU19PTigpLgotI2RlZmluZSBEQ0hFQ0soY29uZGl0
aW9uKSBDSEVDSyhjb25kaXRpb24pCi0jZGVmaW5lIERDSEVDS19FUSh2YWwxLCB2YWwyKSBDSEVD
S19FUSh2YWwxLCB2YWwyKQotI2RlZmluZSBEQ0hFQ0tfTkUodmFsMSwgdmFsMikgQ0hFQ0tfTkUo
dmFsMSwgdmFsMikKLSNkZWZpbmUgRENIRUNLX0xFKHZhbDEsIHZhbDIpIENIRUNLX0xFKHZhbDEs
IHZhbDIpCi0jZGVmaW5lIERDSEVDS19MVCh2YWwxLCB2YWwyKSBDSEVDS19MVCh2YWwxLCB2YWwy
KQotI2RlZmluZSBEQ0hFQ0tfR0UodmFsMSwgdmFsMikgQ0hFQ0tfR0UodmFsMSwgdmFsMikKLSNk
ZWZpbmUgRENIRUNLX0dUKHZhbDEsIHZhbDIpIENIRUNLX0dUKHZhbDEsIHZhbDIpCi0jZGVmaW5l
IERDSEVDS19OT1ROVUxMKHZhbCkgQ0hFQ0tfTk9UTlVMTCh2YWwpCi0jZGVmaW5lIERDSEVDS19T
VFJFUShzdHIxLCBzdHIyKSBDSEVDS19TVFJFUShzdHIxLCBzdHIyKQotI2RlZmluZSBEQ0hFQ0tf
U1RSQ0FTRUVRKHN0cjEsIHN0cjIpIENIRUNLX1NUUkNBU0VFUShzdHIxLCBzdHIyKQotI2RlZmlu
ZSBEQ0hFQ0tfU1RSTkUoc3RyMSwgc3RyMikgQ0hFQ0tfU1RSTkUoc3RyMSwgc3RyMikKLSNkZWZp
bmUgRENIRUNLX1NUUkNBU0VORShzdHIxLCBzdHIyKSBDSEVDS19TVFJDQVNFTkUoc3RyMSwgc3Ry
MikKLQotI2Vsc2UgIC8vICFEQ0hFQ0tfSVNfT04oKQotCi0jZGVmaW5lIERMT0coc2V2ZXJpdHkp
IFwKLSAgdHJ1ZSA/ICh2b2lkKSAwIDogZ29vZ2xlOjpMb2dNZXNzYWdlVm9pZGlmeSgpICYgTE9H
KHNldmVyaXR5KQotCi0jZGVmaW5lIERWTE9HKHZlcmJvc2VsZXZlbCkgXAotICAodHJ1ZSB8fCAh
VkxPR19JU19PTih2ZXJib3NlbGV2ZWwpKSA/XAotICAgICh2b2lkKSAwIDogZ29vZ2xlOjpMb2dN
ZXNzYWdlVm9pZGlmeSgpICYgTE9HKElORk8pCi0KLSNkZWZpbmUgRExPR19JRihzZXZlcml0eSwg
Y29uZGl0aW9uKSBcCi0gICh0cnVlIHx8ICEoY29uZGl0aW9uKSkgPyAodm9pZCkgMCA6IGdvb2ds
ZTo6TG9nTWVzc2FnZVZvaWRpZnkoKSAmIExPRyhzZXZlcml0eSkKLQotI2RlZmluZSBETE9HX0VW
RVJZX04oc2V2ZXJpdHksIG4pIFwKLSAgdHJ1ZSA/ICh2b2lkKSAwIDogZ29vZ2xlOjpMb2dNZXNz
YWdlVm9pZGlmeSgpICYgTE9HKHNldmVyaXR5KQotCi0jZGVmaW5lIERMT0dfSUZfRVZFUllfTihz
ZXZlcml0eSwgY29uZGl0aW9uLCBuKSBcCi0gICh0cnVlIHx8ICEoY29uZGl0aW9uKSk/ICh2b2lk
KSAwIDogZ29vZ2xlOjpMb2dNZXNzYWdlVm9pZGlmeSgpICYgTE9HKHNldmVyaXR5KQotCi0jZGVm
aW5lIERMT0dfQVNTRVJUKGNvbmRpdGlvbikgXAotICB0cnVlID8gKHZvaWQpIDAgOiBMT0dfQVNT
RVJUKGNvbmRpdGlvbikKLQotLy8gTVNWQyB3YXJuaW5nIEM0MTI3OiBjb25kaXRpb25hbCBleHBy
ZXNzaW9uIGlzIGNvbnN0YW50Ci0jZGVmaW5lIERDSEVDSyhjb25kaXRpb24pIFwKLSAgR0xPR19N
U1ZDX1BVU0hfRElTQUJMRV9XQVJOSU5HKDQxMjcpIFwKLSAgd2hpbGUgKGZhbHNlKSBcCi0gICAg
R0xPR19NU1ZDX1BPUF9XQVJOSU5HKCkgQ0hFQ0soY29uZGl0aW9uKQotCi0jZGVmaW5lIERDSEVD
S19FUSh2YWwxLCB2YWwyKSBcCi0gIEdMT0dfTVNWQ19QVVNIX0RJU0FCTEVfV0FSTklORyg0MTI3
KSBcCi0gIHdoaWxlIChmYWxzZSkgXAotICAgIEdMT0dfTVNWQ19QT1BfV0FSTklORygpIENIRUNL
X0VRKHZhbDEsIHZhbDIpCi0KLSNkZWZpbmUgRENIRUNLX05FKHZhbDEsIHZhbDIpIFwKLSAgR0xP
R19NU1ZDX1BVU0hfRElTQUJMRV9XQVJOSU5HKDQxMjcpIFwKLSAgd2hpbGUgKGZhbHNlKSBcCi0g
ICAgR0xPR19NU1ZDX1BPUF9XQVJOSU5HKCkgQ0hFQ0tfTkUodmFsMSwgdmFsMikKLQotI2RlZmlu
ZSBEQ0hFQ0tfTEUodmFsMSwgdmFsMikgXAotICBHTE9HX01TVkNfUFVTSF9ESVNBQkxFX1dBUk5J
TkcoNDEyNykgXAotICB3aGlsZSAoZmFsc2UpIFwKLSAgICBHTE9HX01TVkNfUE9QX1dBUk5JTkco
KSBDSEVDS19MRSh2YWwxLCB2YWwyKQotCi0jZGVmaW5lIERDSEVDS19MVCh2YWwxLCB2YWwyKSBc
Ci0gIEdMT0dfTVNWQ19QVVNIX0RJU0FCTEVfV0FSTklORyg0MTI3KSBcCi0gIHdoaWxlIChmYWxz
ZSkgXAotICAgIEdMT0dfTVNWQ19QT1BfV0FSTklORygpIENIRUNLX0xUKHZhbDEsIHZhbDIpCi0K
LSNkZWZpbmUgRENIRUNLX0dFKHZhbDEsIHZhbDIpIFwKLSAgR0xPR19NU1ZDX1BVU0hfRElTQUJM
RV9XQVJOSU5HKDQxMjcpIFwKLSAgd2hpbGUgKGZhbHNlKSBcCi0gICAgR0xPR19NU1ZDX1BPUF9X
QVJOSU5HKCkgQ0hFQ0tfR0UodmFsMSwgdmFsMikKLQotI2RlZmluZSBEQ0hFQ0tfR1QodmFsMSwg
dmFsMikgXAotICBHTE9HX01TVkNfUFVTSF9ESVNBQkxFX1dBUk5JTkcoNDEyNykgXAotICB3aGls
ZSAoZmFsc2UpIFwKLSAgICBHTE9HX01TVkNfUE9QX1dBUk5JTkcoKSBDSEVDS19HVCh2YWwxLCB2
YWwyKQotCi0vLyBZb3UgbWF5IHNlZSB3YXJuaW5ncyBpbiByZWxlYXNlIG1vZGUgaWYgeW91IGRv
bid0IHVzZSB0aGUgcmV0dXJuCi0vLyB2YWx1ZSBvZiBEQ0hFQ0tfTk9UTlVMTC4gUGxlYXNlIGp1
c3QgdXNlIERDSEVDSyBmb3Igc3VjaCBjYXNlcy4KLSNkZWZpbmUgRENIRUNLX05PVE5VTEwodmFs
KSAodmFsKQotCi0jZGVmaW5lIERDSEVDS19TVFJFUShzdHIxLCBzdHIyKSBcCi0gIEdMT0dfTVNW
Q19QVVNIX0RJU0FCTEVfV0FSTklORyg0MTI3KSBcCi0gIHdoaWxlIChmYWxzZSkgXAotICAgIEdM
T0dfTVNWQ19QT1BfV0FSTklORygpIENIRUNLX1NUUkVRKHN0cjEsIHN0cjIpCi0KLSNkZWZpbmUg
RENIRUNLX1NUUkNBU0VFUShzdHIxLCBzdHIyKSBcCi0gIEdMT0dfTVNWQ19QVVNIX0RJU0FCTEVf
V0FSTklORyg0MTI3KSBcCi0gIHdoaWxlIChmYWxzZSkgXAotICAgIEdMT0dfTVNWQ19QT1BfV0FS
TklORygpIENIRUNLX1NUUkNBU0VFUShzdHIxLCBzdHIyKQotCi0jZGVmaW5lIERDSEVDS19TVFJO
RShzdHIxLCBzdHIyKSBcCi0gIEdMT0dfTVNWQ19QVVNIX0RJU0FCTEVfV0FSTklORyg0MTI3KSBc
Ci0gIHdoaWxlIChmYWxzZSkgXAotICAgIEdMT0dfTVNWQ19QT1BfV0FSTklORygpIENIRUNLX1NU
Uk5FKHN0cjEsIHN0cjIpCi0KLSNkZWZpbmUgRENIRUNLX1NUUkNBU0VORShzdHIxLCBzdHIyKSBc
Ci0gIEdMT0dfTVNWQ19QVVNIX0RJU0FCTEVfV0FSTklORyg0MTI3KSBcCi0gIHdoaWxlIChmYWxz
ZSkgXAotICAgIEdMT0dfTVNWQ19QT1BfV0FSTklORygpIENIRUNLX1NUUkNBU0VORShzdHIxLCBz
dHIyKQotCi0jZW5kaWYgIC8vIERDSEVDS19JU19PTigpCi0KLS8vIExvZyBvbmx5IGluIHZlcmJv
c2UgbW9kZS4KLQotI2RlZmluZSBWTE9HKHZlcmJvc2VsZXZlbCkgTE9HX0lGKElORk8sIFZMT0df
SVNfT04odmVyYm9zZWxldmVsKSkKLQotI2RlZmluZSBWTE9HX0lGKHZlcmJvc2VsZXZlbCwgY29u
ZGl0aW9uKSBcCi0gIExPR19JRihJTkZPLCAoY29uZGl0aW9uKSAmJiBWTE9HX0lTX09OKHZlcmJv
c2VsZXZlbCkpCi0KLSNkZWZpbmUgVkxPR19FVkVSWV9OKHZlcmJvc2VsZXZlbCwgbikgXAotICBM
T0dfSUZfRVZFUllfTihJTkZPLCBWTE9HX0lTX09OKHZlcmJvc2VsZXZlbCksIG4pCi0KLSNkZWZp
bmUgVkxPR19JRl9FVkVSWV9OKHZlcmJvc2VsZXZlbCwgY29uZGl0aW9uLCBuKSBcCi0gIExPR19J
Rl9FVkVSWV9OKElORk8sIChjb25kaXRpb24pICYmIFZMT0dfSVNfT04odmVyYm9zZWxldmVsKSwg
bikKLQotbmFtZXNwYWNlIGJhc2VfbG9nZ2luZyB7Ci0KLS8vIExvZ01lc3NhZ2U6OkxvZ1N0cmVh
bSBpcyBhIHN0ZDo6b3N0cmVhbSBiYWNrZWQgYnkgdGhpcyBzdHJlYW1idWYuCi0vLyBUaGlzIGNs
YXNzIGlnbm9yZXMgb3ZlcmZsb3cgYW5kIGxlYXZlcyB0d28gYnl0ZXMgYXQgdGhlIGVuZCBvZiB0
aGUKLS8vIGJ1ZmZlciB0byBhbGxvdyBmb3IgYSAnXG4nIGFuZCAnXDAnLgotY2xhc3MgR09PR0xF
X0dMT0dfRExMX0RFQ0wgTG9nU3RyZWFtQnVmIDogcHVibGljIHN0ZDo6c3RyZWFtYnVmIHsKLSBw
dWJsaWM6Ci0gIC8vIFJFUVVJUkVNRU5UUzogImxlbiIgbXVzdCBiZSA+PSAyIHRvIGFjY291bnQg
Zm9yIHRoZSAnXG4nIGFuZCAnXG4nLgotICBMb2dTdHJlYW1CdWYoY2hhciAqYnVmLCBpbnQgbGVu
KSB7Ci0gICAgc2V0cChidWYsIGJ1ZiArIGxlbiAtIDIpOwotICB9Ci0KLSAgLy8gUmVzZXRzIHRo
ZSBidWZmZXIuIFVzZWZ1bCBpZiB3ZSByZXVzZSBpdCBieSBtZWFucyBvZiBUTFMuCi0gIHZvaWQg
cmVzZXQoKSB7Ci0gICAgIHNldHAocGJhc2UoKSwgZXBwdHIoKSk7Ci0gIH0KLQotICAvLyBUaGlz
IGVmZmVjdGl2ZWx5IGlnbm9yZXMgb3ZlcmZsb3cuCi0gIHZpcnR1YWwgaW50X3R5cGUgb3ZlcmZs
b3coaW50X3R5cGUgY2gpIHsKLSAgICByZXR1cm4gY2g7Ci0gIH0KLQotICAvLyBMZWdhY3kgcHVi
bGljIG9zdHJzdHJlYW0gbWV0aG9kLgotICBzaXplX3QgcGNvdW50KCkgY29uc3QgeyByZXR1cm4g
cHB0cigpIC0gcGJhc2UoKTsgfQotICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
c3RyZWFtYnVmOjpwYmFzZSgpOyB9Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgYmFzZV9sb2dnaW5n
Ci0KLS8vCi0vLyBUaGlzIGNsYXNzIG1vcmUgb3IgbGVzcyByZXByZXNlbnRzIGEgcGFydGljdWxh
ciBsb2cgbWVzc2FnZS4gIFlvdQotLy8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIExvZ01lc3NhZ2Ug
YW5kIHRoZW4gc3RyZWFtIHN0dWZmIHRvIGl0LgotLy8gV2hlbiB5b3UgZmluaXNoIHN0cmVhbWlu
ZyB0byBpdCwgfkxvZ01lc3NhZ2UgaXMgY2FsbGVkIGFuZCB0aGUKLS8vIGZ1bGwgbWVzc2FnZSBn
ZXRzIHN0cmVhbWVkIHRvIHRoZSBhcHByb3ByaWF0ZSBkZXN0aW5hdGlvbi4KLS8vCi0vLyBZb3Ug
c2hvdWxkbid0IGFjdHVhbGx5IHVzZSBMb2dNZXNzYWdlJ3MgY29uc3RydWN0b3IgdG8gbG9nIHRo
aW5ncywKLS8vIHRob3VnaC4gIFlvdSBzaG91bGQgdXNlIHRoZSBMT0coKSBtYWNybyAoYW5kIHZh
cmlhbnRzIHRoZXJlb2YpCi0vLyBhYm92ZS4KLWNsYXNzIEdPT0dMRV9HTE9HX0RMTF9ERUNMIExv
Z01lc3NhZ2UgewotcHVibGljOgotICBlbnVtIHsKLSAgICAvLyBQYXNzaW5nIGtOb0xvZ1ByZWZp
eCBmb3IgdGhlIGxpbmUgbnVtYmVyIGRpc2FibGVzIHRoZQotICAgIC8vIGxvZy1tZXNzYWdlIHBy
ZWZpeC4gVXNlZnVsIGZvciB1c2luZyB0aGUgTG9nTWVzc2FnZQotICAgIC8vIGluZnJhc3RydWN0
dXJlIGFzIGEgcHJpbnRpbmcgdXRpbGl0eS4gU2VlIGFsc28gdGhlIC0tbG9nX3ByZWZpeAotICAg
IC8vIGZsYWcgZm9yIGNvbnRyb2xsaW5nIHRoZSBsb2ctbWVzc2FnZSBwcmVmaXggb24gYW4KLSAg
ICAvLyBhcHBsaWNhdGlvbi13aWRlIGJhc2lzLgotICAgIGtOb0xvZ1ByZWZpeCA9IC0xCi0gIH07
Ci0KLSAgLy8gTG9nU3RyZWFtIGluaGVyaXQgZnJvbSBub24tRExMLWV4cG9ydGVkIGNsYXNzIChz
dGQ6Om9zdHJzdHJlYW0pCi0gIC8vIGFuZCBWQysrIHByb2R1Y2VzIGEgd2FybmluZyBmb3IgdGhp
cyBzaXR1YXRpb24uCi0gIC8vIEhvd2V2ZXIsIE1TRE4gc2F5cyAiQzQyNzUgY2FuIGJlIGlnbm9y
ZWQgaW4gTWljcm9zb2Z0IFZpc3VhbCBDKysKLSAgLy8gMjAwNSBpZiB5b3UgYXJlIGRlcml2aW5n
IGZyb20gYSB0eXBlIGluIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeSIKLSAgLy8gaHR0cDovL21z
ZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzN0ZGI0NzFzKFZTLjgwKS5hc3B4Ci0gIC8v
IExldCdzIGp1c3QgaWdub3JlIHRoZSB3YXJuaW5nLgotI2lmZGVmIF9NU0NfVkVSCi0jIHByYWdt
YSB3YXJuaW5nKGRpc2FibGU6IDQyNzUpCi0jZW5kaWYKLSAgY2xhc3MgR09PR0xFX0dMT0dfRExM
X0RFQ0wgTG9nU3RyZWFtIDogcHVibGljIHN0ZDo6b3N0cmVhbSB7Ci0jaWZkZWYgX01TQ19WRVIK
LSMgcHJhZ21hIHdhcm5pbmcoZGVmYXVsdDogNDI3NSkKLSNlbmRpZgotICBwdWJsaWM6Ci0gICAg
TG9nU3RyZWFtKGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IGN0cikKLSAgICAgICAgOiBzdGQ6Om9z
dHJlYW0oTlVMTCksCi0gICAgICAgICAgc3RyZWFtYnVmXyhidWYsIGxlbiksCi0gICAgICAgICAg
Y3RyXyhjdHIpLAotICAgICAgICAgIHNlbGZfKHRoaXMpIHsKLSAgICAgIHJkYnVmKCZzdHJlYW1i
dWZfKTsKLSAgICB9Ci0KLSAgICBpbnQgY3RyKCkgY29uc3QgeyByZXR1cm4gY3RyXzsgfQotICAg
IHZvaWQgc2V0X2N0cihpbnQgY3RyKSB7IGN0cl8gPSBjdHI7IH0KLSAgICBMb2dTdHJlYW0qIHNl
bGYoKSBjb25zdCB7IHJldHVybiBzZWxmXzsgfQotCi0gICAgLy8gTGVnYWN5IHN0ZDo6c3RyZWFt
YnVmIG1ldGhvZHMuCi0gICAgc2l6ZV90IHBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0cmVhbWJ1
Zl8ucGNvdW50KCk7IH0KLSAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0cmVhbWJ1
Zl8ucGJhc2UoKTsgfQotICAgIGNoYXIqIHN0cigpIGNvbnN0IHsgcmV0dXJuIHBiYXNlKCk7IH0K
LSAgICB2b2lkIHJlc2V0KCkgeyBzdHJlYW1idWZfLnJlc2V0KCk7IH0KLQotICBwcml2YXRlOgot
ICAgIExvZ1N0cmVhbShjb25zdCBMb2dTdHJlYW0mKTsKLSAgICBMb2dTdHJlYW0mIG9wZXJhdG9y
PShjb25zdCBMb2dTdHJlYW0mKTsKLSAgICBiYXNlX2xvZ2dpbmc6OkxvZ1N0cmVhbUJ1ZiBzdHJl
YW1idWZfOwotICAgIGludCBjdHJfOyAgLy8gQ291bnRlciBoYWNrIChmb3IgdGhlIExPR19FVkVS
WV9YKCkgbWFjcm8pCi0gICAgTG9nU3RyZWFtICpzZWxmXzsgIC8vIENvbnNpc3RlbmN5IGNoZWNr
IGhhY2sKLSAgfTsKLQotcHVibGljOgotICAvLyBpY2MgOCByZXF1aXJlcyB0aGlzIHR5cGVkZWYg
dG8gYXZvaWQgYW4gaW50ZXJuYWwgY29tcGlsZXIgZXJyb3IuCi0gIHR5cGVkZWYgdm9pZCAoTG9n
TWVzc2FnZTo6KlNlbmRNZXRob2QpKCk7Ci0KLSAgTG9nTWVzc2FnZShjb25zdCBjaGFyKiBmaWxl
LCBpbnQgbGluZSwgTG9nU2V2ZXJpdHkgc2V2ZXJpdHksIGludCBjdHIsCi0gICAgICAgICAgICAg
U2VuZE1ldGhvZCBzZW5kX21ldGhvZCk7Ci0KLSAgLy8gVHdvIHNwZWNpYWwgY29uc3RydWN0b3Jz
IHRoYXQgZ2VuZXJhdGUgcmVkdWNlZCBhbW91bnRzIG9mIGNvZGUgYXQKLSAgLy8gTE9HIGNhbGwg
c2l0ZXMgZm9yIGNvbW1vbiBjYXNlcy4KLQotICAvLyBVc2VkIGZvciBMT0coSU5GTyk6IEltcGxp
ZWQgYXJlOgotICAvLyBzZXZlcml0eSA9IElORk8sIGN0ciA9IDAsIHNlbmRfbWV0aG9kID0gJkxv
Z01lc3NhZ2U6OlNlbmRUb0xvZy4KLSAgLy8KLSAgLy8gVXNpbmcgdGhpcyBjb25zdHJ1Y3RvciBp
bnN0ZWFkIG9mIHRoZSBtb3JlIGNvbXBsZXggY29uc3RydWN0b3IgYWJvdmUKLSAgLy8gc2F2ZXMg
MTkgYnl0ZXMgcGVyIGNhbGwgc2l0ZS4KLSAgTG9nTWVzc2FnZShjb25zdCBjaGFyKiBmaWxlLCBp
bnQgbGluZSk7Ci0KLSAgLy8gVXNlZCBmb3IgTE9HKHNldmVyaXR5KSB3aGVyZSBzZXZlcml0eSAh
PSBJTkZPLiAgSW1wbGllZAotICAvLyBhcmU6IGN0ciA9IDAsIHNlbmRfbWV0aG9kID0gJkxvZ01l
c3NhZ2U6OlNlbmRUb0xvZwotICAvLwotICAvLyBVc2luZyB0aGlzIGNvbnN0cnVjdG9yIGluc3Rl
YWQgb2YgdGhlIG1vcmUgY29tcGxleCBjb25zdHJ1Y3RvciBhYm92ZQotICAvLyBzYXZlcyAxNyBi
eXRlcyBwZXIgY2FsbCBzaXRlLgotICBMb2dNZXNzYWdlKGNvbnN0IGNoYXIqIGZpbGUsIGludCBs
aW5lLCBMb2dTZXZlcml0eSBzZXZlcml0eSk7Ci0KLSAgLy8gQ29uc3RydWN0b3IgdG8gbG9nIHRo
aXMgbWVzc2FnZSB0byBhIHNwZWNpZmllZCBzaW5rIChpZiBub3QgTlVMTCkuCi0gIC8vIEltcGxp
ZWQgYXJlOiBjdHIgPSAwLCBzZW5kX21ldGhvZCA9ICZMb2dNZXNzYWdlOjpTZW5kVG9TaW5rQW5k
TG9nIGlmCi0gIC8vIGFsc29fc2VuZF90b19sb2cgaXMgdHJ1ZSwgc2VuZF9tZXRob2QgPSAmTG9n
TWVzc2FnZTo6U2VuZFRvU2luayBvdGhlcndpc2UuCi0gIExvZ01lc3NhZ2UoY29uc3QgY2hhciog
ZmlsZSwgaW50IGxpbmUsIExvZ1NldmVyaXR5IHNldmVyaXR5LCBMb2dTaW5rKiBzaW5rLAotICAg
ICAgICAgICAgIGJvb2wgYWxzb19zZW5kX3RvX2xvZyk7Ci0KLSAgLy8gQ29uc3RydWN0b3Igd2hl
cmUgd2UgYWxzbyBnaXZlIGEgdmVjdG9yPHN0cmluZz4gcG9pbnRlcgotICAvLyBmb3Igc3Rvcmlu
ZyB0aGUgbWVzc2FnZXMgKGlmIHRoZSBwb2ludGVyIGlzIG5vdCBOVUxMKS4KLSAgLy8gSW1wbGll
ZCBhcmU6IGN0ciA9IDAsIHNlbmRfbWV0aG9kID0gJkxvZ01lc3NhZ2U6OlNhdmVPclNlbmRUb0xv
Zy4KLSAgTG9nTWVzc2FnZShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgTG9nU2V2ZXJpdHkg
c2V2ZXJpdHksCi0gICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBvdXR2ZWMp
OwotCi0gIC8vIENvbnN0cnVjdG9yIHdoZXJlIHdlIGFsc28gZ2l2ZSBhIHN0cmluZyBwb2ludGVy
IGZvciBzdG9yaW5nIHRoZQotICAvLyBtZXNzYWdlIChpZiB0aGUgcG9pbnRlciBpcyBub3QgTlVM
TCkuICBJbXBsaWVkIGFyZTogY3RyID0gMCwKLSAgLy8gc2VuZF9tZXRob2QgPSAmTG9nTWVzc2Fn
ZTo6V3JpdGVUb1N0cmluZ0FuZExvZy4KLSAgTG9nTWVzc2FnZShjb25zdCBjaGFyKiBmaWxlLCBp
bnQgbGluZSwgTG9nU2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAgICAgICAgc3RkOjpzdHJpbmcq
IG1lc3NhZ2UpOwotCi0gIC8vIEEgc3BlY2lhbCBjb25zdHJ1Y3RvciB1c2VkIGZvciBjaGVjayBm
YWlsdXJlcwotICBMb2dNZXNzYWdlKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBD
aGVja09wU3RyaW5nJiByZXN1bHQpOwotCi0gIH5Mb2dNZXNzYWdlKCk7Ci0KLSAgLy8gRmx1c2gg
YSBidWZmZXJlZCBtZXNzYWdlIHRvIHRoZSBzaW5rIHNldCBpbiB0aGUgY29uc3RydWN0b3IuICBB
bHdheXMKLSAgLy8gY2FsbGVkIGJ5IHRoZSBkZXN0cnVjdG9yLCBpdCBtYXkgYWxzbyBiZSBjYWxs
ZWQgZnJvbSBlbHNld2hlcmUgaWYKLSAgLy8gbmVlZGVkLiAgT25seSB0aGUgZmlyc3QgY2FsbCBp
cyBhY3Rpb25lZDsgYW55IGxhdGVyIG9uZXMgYXJlIGlnbm9yZWQuCi0gIHZvaWQgRmx1c2goKTsK
LQotICAvLyBBbiBhcmJpdHJhcnkgbGltaXQgb24gdGhlIGxlbmd0aCBvZiBhIHNpbmdsZSBsb2cg
bWVzc2FnZS4gIFRoaXMKLSAgLy8gaXMgc28gdGhhdCBzdHJlYW1pbmcgY2FuIGJlIGRvbmUgbW9y
ZSBlZmZpY2llbnRseS4KLSAgc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4TG9nTWVzc2FnZUxlbjsK
LQotICAvLyBUaGVzZXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgb3V0c2lkZSBvZiBs
b2dnaW5nLiosCi0gIC8vIG9ubHkgcGFzc2VkIGFzIFNlbmRNZXRob2QgYXJndW1lbnRzIHRvIG90
aGVyIExvZ01lc3NhZ2UgbWV0aG9kczoKLSAgdm9pZCBTZW5kVG9Mb2coKTsgIC8vIEFjdHVhbGx5
IGRpc3BhdGNoIHRvIHRoZSBsb2dzCi0gIHZvaWQgU2VuZFRvU3lzbG9nQW5kTG9nKCk7ICAvLyBB
Y3R1YWxseSBkaXNwYXRjaCB0byBzeXNsb2cgYW5kIHRoZSBsb2dzCi0KLSAgLy8gQ2FsbCBhYm9y
dCgpIG9yIHNpbWlsYXIgdG8gcGVyZm9ybSBMT0coRkFUQUwpIGNyYXNoLgotICBzdGF0aWMgdm9p
ZCBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKSBGYWlsKCk7Ci0KLSAgc3RkOjpvc3RyZWFtJiBz
dHJlYW0oKTsKLQotICBpbnQgcHJlc2VydmVkX2Vycm5vKCkgY29uc3Q7Ci0KLSAgLy8gTXVzdCBi
ZSBjYWxsZWQgd2l0aG91dCB0aGUgbG9nX211dGV4IGhlbGQuICAoTCA8IGxvZ19tdXRleCkKLSAg
c3RhdGljIGludDY0IG51bV9tZXNzYWdlcyhpbnQgc2V2ZXJpdHkpOwotCi0gIHN0cnVjdCBMb2dN
ZXNzYWdlRGF0YTsKLQotcHJpdmF0ZToKLSAgLy8gRnVsbHkgaW50ZXJuYWwgU2VuZE1ldGhvZCBj
YXNlczoKLSAgdm9pZCBTZW5kVG9TaW5rQW5kTG9nKCk7ICAvLyBTZW5kIHRvIHNpbmsgaWYgcHJv
dmlkZWQgYW5kIGRpc3BhdGNoIHRvIHRoZSBsb2dzCi0gIHZvaWQgU2VuZFRvU2luaygpOyAgLy8g
U2VuZCB0byBzaW5rIGlmIHByb3ZpZGVkLCBkbyBub3RoaW5nIG90aGVyd2lzZS4KLQotICAvLyBX
cml0ZSB0byBzdHJpbmcgaWYgcHJvdmlkZWQgYW5kIGRpc3BhdGNoIHRvIHRoZSBsb2dzLgotICB2
b2lkIFdyaXRlVG9TdHJpbmdBbmRMb2coKTsKLQotICB2b2lkIFNhdmVPclNlbmRUb0xvZygpOyAg
Ly8gU2F2ZSB0byBzdHJpbmd2ZWMgaWYgcHJvdmlkZWQsIGVsc2UgdG8gbG9ncwotCi0gIHZvaWQg
SW5pdChjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgTG9nU2V2ZXJpdHkgc2V2ZXJpdHksCi0g
ICAgICAgICAgICB2b2lkIChMb2dNZXNzYWdlOjoqc2VuZF9tZXRob2QpKCkpOwotCi0gIC8vIFVz
ZWQgdG8gZmlsbCBpbiBjcmFzaCBpbmZvcm1hdGlvbiBkdXJpbmcgTE9HKEZBVEFMKSBmYWlsdXJl
cy4KLSAgdm9pZCBSZWNvcmRDcmFzaFJlYXNvbihnbG9nX2ludGVybmFsX25hbWVzcGFjZV86OkNy
YXNoUmVhc29uKiByZWFzb24pOwotCi0gIC8vIENvdW50cyBvZiBtZXNzYWdlcyBzZW50IGF0IGVh
Y2ggcHJpb3JpdHk6Ci0gIHN0YXRpYyBpbnQ2NCBudW1fbWVzc2FnZXNfW05VTV9TRVZFUklUSUVT
XTsgIC8vIHVuZGVyIGxvZ19tdXRleAotCi0gIC8vIFdlIGtlZXAgdGhlIGRhdGEgaW4gYSBzZXBh
cmF0ZSBzdHJ1Y3Qgc28gdGhhdCBlYWNoIGluc3RhbmNlIG9mCi0gIC8vIExvZ01lc3NhZ2UgdXNl
cyBsZXNzIHN0YWNrIHNwYWNlLgotICBMb2dNZXNzYWdlRGF0YSogYWxsb2NhdGVkXzsKLSAgTG9n
TWVzc2FnZURhdGEqIGRhdGFfOwotCi0gIGZyaWVuZCBjbGFzcyBMb2dEZXN0aW5hdGlvbjsKLQot
ICBMb2dNZXNzYWdlKGNvbnN0IExvZ01lc3NhZ2UmKTsKLSAgdm9pZCBvcGVyYXRvcj0oY29uc3Qg
TG9nTWVzc2FnZSYpOwotfTsKLQotLy8gVGhpcyBjbGFzcyBoYXBwZW5zIHRvIGJlIHRocmVhZC1o
b3N0aWxlIGJlY2F1c2UgYWxsIGluc3RhbmNlcyBzaGFyZQotLy8gYSBzaW5nbGUgZGF0YSBidWZm
ZXIsIGJ1dCBzaW5jZSBpdCBjYW4gb25seSBiZSBjcmVhdGVkIGp1c3QgYmVmb3JlCi0vLyB0aGUg
cHJvY2VzcyBkaWVzLCB3ZSBkb24ndCB3b3JyeSBzbyBtdWNoLgotY2xhc3MgR09PR0xFX0dMT0df
RExMX0RFQ0wgTG9nTWVzc2FnZUZhdGFsIDogcHVibGljIExvZ01lc3NhZ2UgewotIHB1YmxpYzoK
LSAgTG9nTWVzc2FnZUZhdGFsKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKTsKLSAgTG9nTWVz
c2FnZUZhdGFsKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBDaGVja09wU3RyaW5n
JiByZXN1bHQpOwotICBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKSB+TG9nTWVzc2FnZUZhdGFs
KCk7Ci19OwotCi0vLyBBIG5vbi1tYWNybyBpbnRlcmZhY2UgdG8gdGhlIGxvZyBmYWNpbGl0eTsg
KHVzZWZ1bAotLy8gd2hlbiB0aGUgbG9nZ2luZyBsZXZlbCBpcyBub3QgYSBjb21waWxlLXRpbWUg
Y29uc3RhbnQpLgotaW5saW5lIHZvaWQgTG9nQXRMZXZlbChpbnQgY29uc3Qgc2V2ZXJpdHksIHN0
ZDo6c3RyaW5nIGNvbnN0ICZtc2cpIHsKLSAgTG9nTWVzc2FnZShfX0ZJTEVfXywgX19MSU5FX18s
IHNldmVyaXR5KS5zdHJlYW0oKSA8PCBtc2c7Ci19Ci0KLS8vIEEgbWFjcm8gYWx0ZXJuYXRpdmUg
b2YgTG9nQXRMZXZlbC4gTmV3IGNvZGUgbWF5IHdhbnQgdG8gdXNlIHRoaXMKLS8vIHZlcnNpb24g
c2luY2UgdGhlcmUgYXJlIHR3byBhZHZhbnRhZ2VzOiAxLiB0aGlzIHZlcnNpb24gb3V0cHV0cyB0
aGUKLS8vIGZpbGUgbmFtZSBhbmQgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoaXMgbWFjcm8gaXMg
cHV0IGxpa2Ugb3RoZXIKLS8vIExPRyBtYWNyb3MsIDIuIHRoaXMgbWFjcm8gY2FuIGJlIHVzZWQg
YXMgQysrIHN0cmVhbS4KLSNkZWZpbmUgTE9HX0FUX0xFVkVMKHNldmVyaXR5KSBnb29nbGU6Okxv
Z01lc3NhZ2UoX19GSUxFX18sIF9fTElORV9fLCBzZXZlcml0eSkuc3RyZWFtKCkKLQotLy8gQ2hl
Y2sgaWYgaXQncyBjb21waWxlZCBpbiBDKysxMSBtb2RlLgotLy8KLS8vIEdYWF9FWFBFUklNRU5U
QUxfQ1hYMFggaXMgZGVmaW5lZCBieSBnY2MgYW5kIGNsYW5nIHVwIHRvIGF0IGxlYXN0Ci0vLyBn
Y2MtNC43IGFuZCBjbGFuZy0zLjEgKDIwMTEtMTItMTMpLiAgX19jcGx1c3BsdXMgd2FzIGRlZmlu
ZWQgdG8gMQotLy8gaW4gZ2NjIGJlZm9yZSA0LjcgKENyb3NzdG9vbCAxNikgYW5kIGNsYW5nIGJl
Zm9yZSAzLjEsIGJ1dCBpcwotLy8gZGVmaW5lZCBhY2NvcmRpbmcgdG8gdGhlIGxhbmd1YWdlIHZl
cnNpb24gaW4gZWZmZWN0IHRoZXJlYWZ0ZXIuCi0vLyBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAx
NCAoMjAxNSkgc2V0cyBfX2NwbHVzcGx1cz09MTk5NzExIGRlc3BpdGUKLS8vIHJlYXNvbmFibHkg
Z29vZCBDKysxMSBzdXBwb3J0LCBzbyB3ZSBzZXQgTEFOR19DWFggZm9yIGl0IGFuZAotLy8gbmV3
ZXIgdmVyc2lvbnMgKF9NU0NfVkVSID49IDE5MDApLgotI2lmIChkZWZpbmVkKF9fR1hYX0VYUEVS
SU1FTlRBTF9DWFgwWF9fKSB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMIHx8IFwKLSAgICAgKGRl
ZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSID49IDE5MDApKQotLy8gSGVscGVyIGZvciBDSEVD
S19OT1ROVUxMKCkuCi0vLwotLy8gSW4gQysrMTEsIGFsbCBjYXNlcyBjYW4gYmUgaGFuZGxlZCBi
eSBhIHNpbmdsZSBmdW5jdGlvbi4gU2luY2UgdGhlIHZhbHVlCi0vLyBjYXRlZ29yeSBvZiB0aGUg
YXJndW1lbnQgaXMgcHJlc2VydmVkIChhbHNvIGZvciBydmFsdWUgcmVmZXJlbmNlcyksCi0vLyBt
ZW1iZXIgaW5pdGlhbGl6ZXIgbGlzdHMgbGlrZSB0aGUgb25lIGJlbG93IHdpbGwgY29tcGlsZSBj
b3JyZWN0bHk6Ci0vLwotLy8gICBGb28oKQotLy8gICAgIDogeF8oQ0hFQ0tfTk9UTlVMTChNZXRo
b2RSZXR1cm5pbmdVbmlxdWVQdHIoKSkpIHt9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLVQgQ2hl
Y2tOb3ROdWxsKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBuYW1lcywg
VCYmIHQpIHsKLSBpZiAodCA9PSBudWxscHRyKSB7Ci0gICBMb2dNZXNzYWdlRmF0YWwoZmlsZSwg
bGluZSwgbmV3IHN0ZDo6c3RyaW5nKG5hbWVzKSk7Ci0gfQotIHJldHVybiBzdGQ6OmZvcndhcmQ8
VD4odCk7Ci19Ci0KLSNlbHNlCi0KLS8vIEEgc21hbGwgaGVscGVyIGZvciBDSEVDS19OT1ROVUxM
KCkuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLVQqIENoZWNrTm90TnVsbChjb25zdCBjaGFyICpm
aWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbmFtZXMsIFQqIHQpIHsKLSAgaWYgKHQgPT0gTlVM
TCkgewotICAgIExvZ01lc3NhZ2VGYXRhbChmaWxlLCBsaW5lLCBuZXcgc3RkOjpzdHJpbmcobmFt
ZXMpKTsKLSAgfQotICByZXR1cm4gdDsKLX0KLSNlbmRpZgotCi0vLyBBbGxvdyBmb2xrcyB0byBw
dXQgYSBjb3VudGVyIGluIHRoZSBMT0dfRVZFUllfWCgpJ2VkIG1lc3NhZ2VzLiBUaGlzCi0vLyBv
bmx5IHdvcmtzIGlmIG9zdHJlYW0gaXMgYSBMb2dTdHJlYW0uIElmIHRoZSBvc3RyZWFtIGlzIG5v
dCBhCi0vLyBMb2dTdHJlYW0geW91J2xsIGdldCBhbiBhc3NlcnQgc2F5aW5nIGFzIG11Y2ggYXQg
cnVudGltZS4KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChz
dGQ6Om9zdHJlYW0gJm9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFBSSVZBVEVfQ291bnRlciYpOwotCi0KLS8vIERlcml2ZWQgY2xhc3MgZm9y
IFBMT0cqKCkgYWJvdmUuCi1jbGFzcyBHT09HTEVfR0xPR19ETExfREVDTCBFcnJub0xvZ01lc3Nh
Z2UgOiBwdWJsaWMgTG9nTWVzc2FnZSB7Ci0gcHVibGljOgotCi0gIEVycm5vTG9nTWVzc2FnZShj
b25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgTG9nU2V2ZXJpdHkgc2V2ZXJpdHksIGludCBjdHIs
Ci0gICAgICAgICAgICAgICAgICB2b2lkIChMb2dNZXNzYWdlOjoqc2VuZF9tZXRob2QpKCkpOwot
Ci0gIC8vIFBvc3RwZW5kcyAiOiBzdHJlcnJvcihlcnJubykgW2Vycm5vXSIuCi0gIH5FcnJub0xv
Z01lc3NhZ2UoKTsKLQotIHByaXZhdGU6Ci0gIEVycm5vTG9nTWVzc2FnZShjb25zdCBFcnJub0xv
Z01lc3NhZ2UmKTsKLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgRXJybm9Mb2dNZXNzYWdlJik7Ci19
OwotCi0KLS8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBleHBsaWNpdGx5IGlnbm9yZSB2YWx1ZXMg
aW4gdGhlIGNvbmRpdGlvbmFsCi0vLyBsb2dnaW5nIG1hY3Jvcy4gIFRoaXMgYXZvaWRzIGNvbXBp
bGVyIHdhcm5pbmdzIGxpa2UgInZhbHVlIGNvbXB1dGVkCi0vLyBpcyBub3QgdXNlZCIgYW5kICJz
dGF0ZW1lbnQgaGFzIG5vIGVmZmVjdCIuCi0KLWNsYXNzIEdPT0dMRV9HTE9HX0RMTF9ERUNMIExv
Z01lc3NhZ2VWb2lkaWZ5IHsKLSBwdWJsaWM6Ci0gIExvZ01lc3NhZ2VWb2lkaWZ5KCkgeyB9Ci0g
IC8vIFRoaXMgaGFzIHRvIGJlIGFuIG9wZXJhdG9yIHdpdGggYSBwcmVjZWRlbmNlIGxvd2VyIHRo
YW4gPDwgYnV0Ci0gIC8vIGhpZ2hlciB0aGFuID86Ci0gIHZvaWQgb3BlcmF0b3ImKHN0ZDo6b3N0
cmVhbSYpIHsgfQotfTsKLQotCi0vLyBGbHVzaGVzIGFsbCBsb2cgZmlsZXMgdGhhdCBjb250YWlu
cyBtZXNzYWdlcyB0aGF0IGFyZSBhdCBsZWFzdCBvZgotLy8gdGhlIHNwZWNpZmllZCBzZXZlcml0
eSBsZXZlbC4gIFRocmVhZC1zYWZlLgotR09PR0xFX0dMT0dfRExMX0RFQ0wgdm9pZCBGbHVzaExv
Z0ZpbGVzKExvZ1NldmVyaXR5IG1pbl9zZXZlcml0eSk7Ci0KLS8vIEZsdXNoZXMgYWxsIGxvZyBm
aWxlcyB0aGF0IGNvbnRhaW5zIG1lc3NhZ2VzIHRoYXQgYXJlIGF0IGxlYXN0IG9mCi0vLyB0aGUg
c3BlY2lmaWVkIHNldmVyaXR5IGxldmVsLiBUaHJlYWQtaG9zdGlsZSBiZWNhdXNlIGl0IGlnbm9y
ZXMKLS8vIGxvY2tpbmcgLS0gdXNlZCBmb3IgY2F0YXN0cm9waGljIGZhaWx1cmVzLgotR09PR0xF
X0dMT0dfRExMX0RFQ0wgdm9pZCBGbHVzaExvZ0ZpbGVzVW5zYWZlKExvZ1NldmVyaXR5IG1pbl9z
ZXZlcml0eSk7Ci0KLS8vCi0vLyBTZXQgdGhlIGRlc3RpbmF0aW9uIHRvIHdoaWNoIGEgcGFydGlj
dWxhciBzZXZlcml0eSBsZXZlbCBvZiBsb2cKLS8vIG1lc3NhZ2VzIGlzIHNlbnQuICBJZiBiYXNl
X2ZpbGVuYW1lIGlzICIiLCBpdCBtZWFucyAiZG9uJ3QgbG9nIHRoaXMKLS8vIHNldmVyaXR5Ii4g
IFRocmVhZC1zYWZlLgotLy8KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIHZvaWQgU2V0TG9nRGVzdGlu
YXRpb24oTG9nU2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJhc2VfZmlsZW5hbWUpOwotCi0vLwotLy8gU2V0
IHRoZSBiYXNlbmFtZSBvZiB0aGUgc3ltbGluayB0byB0aGUgbGF0ZXN0IGxvZyBmaWxlIGF0IGEg
Z2l2ZW4KLS8vIHNldmVyaXR5LiAgSWYgc3ltbGlua19iYXNlbmFtZSBpcyBlbXB0eSwgZG8gbm90
IG1ha2UgYSBzeW1saW5rLiAgSWYKLS8vIHlvdSBkb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24sIHRo
ZSBzeW1saW5rIGJhc2VuYW1lIGlzIHRoZQotLy8gaW52b2NhdGlvbiBuYW1lIG9mIHRoZSBwcm9n
cmFtLiAgVGhyZWFkLXNhZmUuCi0vLwotR09PR0xFX0dMT0dfRExMX0RFQ0wgdm9pZCBTZXRMb2dT
eW1saW5rKExvZ1NldmVyaXR5IHNldmVyaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN5bWxpbmtfYmFzZW5hbWUpOwotCi0vLwotLy8gVXNl
ZCB0byBzZW5kIGxvZ3MgdG8gc29tZSBvdGhlciBraW5kIG9mIGRlc3RpbmF0aW9uCi0vLyBVc2Vy
cyBzaG91bGQgc3ViY2xhc3MgTG9nU2luayBhbmQgb3ZlcnJpZGUgc2VuZCB0byBkbyB3aGF0ZXZl
ciB0aGV5IHdhbnQuCi0vLyBJbXBsZW1lbnRhdGlvbnMgbXVzdCBiZSB0aHJlYWQtc2FmZSBiZWNh
dXNlIGEgc2hhcmVkIGluc3RhbmNlIHdpbGwKLS8vIGJlIGNhbGxlZCBmcm9tIHdoaWNoZXZlciB0
aHJlYWQgcmFuIHRoZSBMT0coWFhYKSBsaW5lLgotY2xhc3MgR09PR0xFX0dMT0dfRExMX0RFQ0wg
TG9nU2luayB7Ci0gcHVibGljOgotICB2aXJ0dWFsIH5Mb2dTaW5rKCk7Ci0KLSAgLy8gU2luaydz
IGxvZ2dpbmcgbG9naWMgKG1lc3NhZ2VfbGVuIGlzIHN1Y2ggYXMgdG8gZXhjbHVkZSAnXG4nIGF0
IHRoZSBlbmQpLgotICAvLyBUaGlzIG1ldGhvZCBjYW4ndCB1c2UgTE9HKCkgb3IgQ0hFQ0soKSBh
cyBsb2dnaW5nIHN5c3RlbSBtdXRleChzKSBhcmUgaGVsZAotICAvLyBkdXJpbmcgdGhpcyBjYWxs
LgotICB2aXJ0dWFsIHZvaWQgc2VuZChMb2dTZXZlcml0eSBzZXZlcml0eSwgY29uc3QgY2hhciog
ZnVsbF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYmFzZV9maWxl
bmFtZSwgaW50IGxpbmUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCA6OnRtKiB0
bV90aW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlLCBzaXplX3Qg
bWVzc2FnZV9sZW4pID0gMDsKLQotICAvLyBSZWRlZmluZSB0aGlzIHRvIGltcGxlbWVudCB3YWl0
aW5nIGZvcgotICAvLyB0aGUgc2luaydzIGxvZ2dpbmcgbG9naWMgdG8gY29tcGxldGUuCi0gIC8v
IEl0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIGVhY2ggc2VuZCgpIHJldHVybnMsCi0gIC8vIGJ1dCBi
ZWZvcmUgdGhhdCBMb2dNZXNzYWdlIGV4aXRzIG9yIGNyYXNoZXMuCi0gIC8vIEJ5IGRlZmF1bHQg
dGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuCi0gIC8vIFVzaW5nIHRoaXMgZnVuY3Rpb24gb25l
IGNhbiBpbXBsZW1lbnQgY29tcGxleCBsb2dpYyBmb3Igc2VuZCgpCi0gIC8vIHRoYXQgaXRzZWxm
IGludm9sdmVzIGxvZ2dpbmc7IGFuZCBkbyBhbGwgdGhpcyB3L28gY2F1c2luZyBkZWFkbG9ja3Mg
YW5kCi0gIC8vIGluY29uc2lzdGVudCByZWFycmFuZ2VtZW50IG9mIGxvZyBtZXNzYWdlcy4KLSAg
Ly8gRS5nLiBpZiBhIExvZ1NpbmsgaGFzIHRocmVhZC1zcGVjaWZpYyBhY3Rpb25zLCB0aGUgc2Vu
ZCgpIG1ldGhvZAotICAvLyBjYW4gc2ltcGx5IGFkZCB0aGUgbWVzc2FnZSB0byBhIHF1ZXVlIGFu
ZCB3YWtlIHVwIGFub3RoZXIgdGhyZWFkIHRoYXQKLSAgLy8gaGFuZGxlcyByZWFsIGxvZ2dpbmcg
d2hpbGUgaXRzZWxmIG1ha2luZyBzb21lIExPRygpIGNhbGxzOwotICAvLyBXYWl0VGlsbFNlbnQo
KSBjYW4gYmUgaW1wbGVtZW50ZWQgdG8gd2FpdCBmb3IgdGhhdCBsb2dpYyB0byBjb21wbGV0ZS4K
LSAgLy8gU2VlIG91ciB1bml0dGVzdCBmb3IgYW4gZXhhbXBsZS4KLSAgdmlydHVhbCB2b2lkIFdh
aXRUaWxsU2VudCgpOwotCi0gIC8vIFJldHVybnMgdGhlIG5vcm1hbCB0ZXh0IG91dHB1dCBvZiB0
aGUgbG9nIG1lc3NhZ2UuCi0gIC8vIENhbiBiZSB1c2VmdWwgdG8gaW1wbGVtZW50IHNlbmQoKS4K
LSAgc3RhdGljIHN0ZDo6c3RyaW5nIFRvU3RyaW5nKExvZ1NldmVyaXR5IHNldmVyaXR5LCBjb25z
dCBjaGFyKiBmaWxlLCBpbnQgbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0cnVjdCA6OnRtKiB0bV90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogbWVzc2FnZSwgc2l6ZV90IG1lc3NhZ2VfbGVuKTsKLX07Ci0KLS8vIEFkZCBv
ciByZW1vdmUgYSBMb2dTaW5rIGFzIGEgY29uc3VtZXIgb2YgbG9nZ2luZyBkYXRhLiAgVGhyZWFk
LXNhZmUuCi1HT09HTEVfR0xPR19ETExfREVDTCB2b2lkIEFkZExvZ1NpbmsoTG9nU2luayAqZGVz
dGluYXRpb24pOwotR09PR0xFX0dMT0dfRExMX0RFQ0wgdm9pZCBSZW1vdmVMb2dTaW5rKExvZ1Np
bmsgKmRlc3RpbmF0aW9uKTsKLQotLy8KLS8vIFNwZWNpZnkgYW4gImV4dGVuc2lvbiIgYWRkZWQg
dG8gdGhlIGZpbGVuYW1lIHNwZWNpZmllZCB2aWEKLS8vIFNldExvZ0Rlc3RpbmF0aW9uLiAgVGhp
cyBhcHBsaWVzIHRvIGFsbCBzZXZlcml0eSBsZXZlbHMuICBJdCdzCi0vLyBvZnRlbiB1c2VkIHRv
IGFwcGVuZCB0aGUgcG9ydCB3ZSdyZSBsaXN0ZW5pbmcgb24gdG8gdGhlIGxvZ2ZpbGUKLS8vIG5h
bWUuICBUaHJlYWQtc2FmZS4KLS8vCi1HT09HTEVfR0xPR19ETExfREVDTCB2b2lkIFNldExvZ0Zp
bGVuYW1lRXh0ZW5zaW9uKAotICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lX2V4dGVuc2lvbik7Ci0K
LS8vCi0vLyBNYWtlIGl0IHNvIHRoYXQgYWxsIGxvZyBtZXNzYWdlcyBvZiBhdCBsZWFzdCBhIHBh
cnRpY3VsYXIgc2V2ZXJpdHkKLS8vIGFyZSBsb2dnZWQgdG8gc3RkZXJyIChpbiBhZGRpdGlvbiB0
byBsb2dnaW5nIHRvIHRoZSB1c3VhbCBsb2cKLS8vIGZpbGUocykpLiAgVGhyZWFkLXNhZmUuCi0v
LwotR09PR0xFX0dMT0dfRExMX0RFQ0wgdm9pZCBTZXRTdGRlcnJMb2dnaW5nKExvZ1NldmVyaXR5
IG1pbl9zZXZlcml0eSk7Ci0KLS8vCi0vLyBNYWtlIGl0IHNvIHRoYXQgYWxsIGxvZyBtZXNzYWdl
cyBnbyBvbmx5IHRvIHN0ZGVyci4gIFRocmVhZC1zYWZlLgotLy8KLUdPT0dMRV9HTE9HX0RMTF9E
RUNMIHZvaWQgTG9nVG9TdGRlcnIoKTsKLQotLy8KLS8vIE1ha2UgaXQgc28gdGhhdCBhbGwgbG9n
IG1lc3NhZ2VzIG9mIGF0IGxlYXN0IGEgcGFydGljdWxhciBzZXZlcml0eSBhcmUKLS8vIGxvZ2dl
ZCB2aWEgZW1haWwgdG8gYSBsaXN0IG9mIGFkZHJlc3NlcyAoaW4gYWRkaXRpb24gdG8gbG9nZ2lu
ZyB0byB0aGUKLS8vIHVzdWFsIGxvZyBmaWxlKHMpKS4gIFRoZSBsaXN0IG9mIGFkZHJlc3NlcyBp
cyBqdXN0IGEgc3RyaW5nIGNvbnRhaW5pbmcKLS8vIHRoZSBlbWFpbCBhZGRyZXNzZXMgdG8gc2Vu
ZCB0byAoc2VwYXJhdGVkIGJ5IHNwYWNlcywgc2F5KS4gIFRocmVhZC1zYWZlLgotLy8KLUdPT0dM
RV9HTE9HX0RMTF9ERUNMIHZvaWQgU2V0RW1haWxMb2dnaW5nKExvZ1NldmVyaXR5IG1pbl9zZXZl
cml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGFkZHJlc3Nlcyk7Ci0KLS8vIEEgc2ltcGxlIGZ1bmN0aW9uIHRoYXQgc2VuZHMgZW1haWwu
IGRlc3QgaXMgYSBjb21tbWEtc2VwYXJhdGVkCi0vLyBsaXN0IG9mIGFkZHJlc3Nlc3MuICBUaHJl
YWQtc2FmZS4KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIGJvb2wgU2VuZEVtYWlsKGNvbnN0IGNoYXIg
KmRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpz
dWJqZWN0LCBjb25zdCBjaGFyICpib2R5KTsKLQotR09PR0xFX0dMT0dfRExMX0RFQ0wgY29uc3Qg
c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBHZXRMb2dnaW5nRGlyZWN0b3JpZXMoKTsKLQotLy8g
Rm9yIHRlc3RzIG9ubHk6ICBDbGVhciB0aGUgaW50ZXJuYWwgW2NhY2hlZF0gbGlzdCBvZiBsb2dn
aW5nIGRpcmVjdG9yaWVzIHRvCi0vLyBmb3JjZSBhIHJlZnJlc2ggdGhlIG5leHQgdGltZSBHZXRM
b2dnaW5nRGlyZWN0b3JpZXMgaXMgY2FsbGVkLgotLy8gVGhyZWFkLWhvc3RpbGUuCi12b2lkIFRl
c3RPbmx5X0NsZWFyTG9nZ2luZ0RpcmVjdG9yaWVzTGlzdCgpOwotCi0vLyBSZXR1cm5zIGEgc2V0
IG9mIGV4aXN0aW5nIHRlbXBvcmFyeSBkaXJlY3Rvcmllcywgd2hpY2ggd2lsbCBiZSBhCi0vLyBz
dWJzZXQgb2YgdGhlIGRpcmVjdG9yaWVzIHJldHVybmVkIGJ5IEdldExvZ2dpbkRpcmVjdG9yaWVz
KCkuCi0vLyBUaHJlYWQtc2FmZS4KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIHZvaWQgR2V0RXhpc3Rp
bmdUZW1wRGlyZWN0b3JpZXMoCi0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBsaXN0KTsK
LQotLy8gUHJpbnQgYW55IGZhdGFsIG1lc3NhZ2UgYWdhaW4gLS0gdXNlZnVsIHRvIGNhbGwgZnJv
bSBzaWduYWwgaGFuZGxlcgotLy8gc28gdGhhdCB0aGUgbGFzdCB0aGluZyBpbiB0aGUgb3V0cHV0
IGlzIHRoZSBmYXRhbCBtZXNzYWdlLgotLy8gVGhyZWFkLWhvc3RpbGUsIGJ1dCBhIHJhY2UgaXMg
dW5saWtlbHkuCi1HT09HTEVfR0xPR19ETExfREVDTCB2b2lkIFJlcHJpbnRGYXRhbE1lc3NhZ2Uo
KTsKLQotLy8gVHJ1bmNhdGUgYSBsb2cgZmlsZSB0aGF0IG1heSBiZSB0aGUgYXBwZW5kLW9ubHkg
b3V0cHV0IG9mIG11bHRpcGxlCi0vLyBwcm9jZXNzZXMgYW5kIGhlbmNlIGNhbid0IHNpbXBseSBi
ZSByZW5hbWVkL3Jlb3BlbmVkICh0eXBpY2FsbHkgYQotLy8gc3Rkb3V0L3N0ZGVycikuICBJZiB0
aGUgZmlsZSAicGF0aCIgaXMgPiAibGltaXQiIGJ5dGVzLCBjb3B5IHRoZQotLy8gbGFzdCAia2Vl
cCIgYnl0ZXMgdG8gb2Zmc2V0IDAgYW5kIHRydW5jYXRlIHRoZSByZXN0LiBTaW5jZSB3ZSBjb3Vs
ZAotLy8gYmUgcmFjaW5nIHdpdGggb3RoZXIgd3JpdGVycywgdGhpcyBhcHByb2FjaCBoYXMgdGhl
IHBvdGVudGlhbCB0bwotLy8gbG9zZSB2ZXJ5IHNtYWxsIGFtb3VudHMgb2YgZGF0YS4gRm9yIHNl
Y3VyaXR5LCBvbmx5IGZvbGxvdyBzeW1saW5rcwotLy8gaWYgdGhlIHBhdGggaXMgL3Byb2Mvc2Vs
Zi9mZC8qCi1HT09HTEVfR0xPR19ETExfREVDTCB2b2lkIFRydW5jYXRlTG9nRmlsZShjb25zdCBj
aGFyICpwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
NjQgbGltaXQsIGludDY0IGtlZXApOwotCi0vLyBUcnVuY2F0ZSBzdGRvdXQgYW5kIHN0ZGVyciBp
ZiB0aGV5IGFyZSBvdmVyIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkKLS8vIC0tbWF4X2xvZ19zaXpl
OyBrZWVwIHRoZSBmaW5hbCAxTUIuICBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgc2FtZQotLy8gcmFj
ZSBjb25kaXRpb24gYXMgVHJ1bmNhdGVMb2dGaWxlLgotR09PR0xFX0dMT0dfRExMX0RFQ0wgdm9p
ZCBUcnVuY2F0ZVN0ZG91dFN0ZGVycigpOwotCi0vLyBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNl
bnRhdGlvbiBvZiB0aGUgcHJvdmlkZWQgTG9nU2V2ZXJpdHkgbGV2ZWwuCi0vLyBUaHJlYWQtc2Fm
ZS4KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIGNvbnN0IGNoYXIqIEdldExvZ1NldmVyaXR5TmFtZShM
b2dTZXZlcml0eSBzZXZlcml0eSk7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW1wbGVtZW50YXRp
b24gZGV0YWlscyB0aGF0IGFyZSBub3QgdXNlZnVsIHRvIG1vc3QgY2xpZW50cwotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLS8vIEEgTG9nZ2VyIGlzIHRoZSBpbnRlcmZhY2UgdXNlZCBieSBsb2dnaW5nIG1v
ZHVsZXMgdG8gZW1pdCBlbnRyaWVzCi0vLyB0byBhIGxvZy4gIEEgdHlwaWNhbCBpbXBsZW1lbnRh
dGlvbiB3aWxsIGR1bXAgZm9ybWF0dGVkIGRhdGEgdG8gYQotLy8gc2VxdWVuY2Ugb2YgZmlsZXMu
ICBXZSBhbHNvIHByb3ZpZGUgaW50ZXJmYWNlcyB0aGF0IHdpbGwgZm9yd2FyZAotLy8gdGhlIGRh
dGEgdG8gYW5vdGhlciB0aHJlYWQgc28gdGhhdCB0aGUgaW52b2tlciBuZXZlciBibG9ja3MuCi0v
LyBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGJlIHRocmVhZC1zYWZlIHNpbmNlIHRoZSBsb2dnaW5n
IHN5c3RlbQotLy8gd2lsbCB3cml0ZSB0byB0aGVtIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KLQot
bmFtZXNwYWNlIGJhc2UgewotCi1jbGFzcyBHT09HTEVfR0xPR19ETExfREVDTCBMb2dnZXIgewot
IHB1YmxpYzoKLSAgdmlydHVhbCB+TG9nZ2VyKCk7Ci0KLSAgLy8gV3JpdGVzICJtZXNzYWdlWzAs
bWVzc2FnZV9sZW4tMV0iIGNvcnJlc3BvbmRpbmcgdG8gYW4gZXZlbnQgdGhhdAotICAvLyBvY2N1
cnJlZCBhdCAidGltZXN0YW1wIi4gIElmICJmb3JjZV9mbHVzaCIgaXMgdHJ1ZSwgdGhlIGxvZyBm
aWxlCi0gIC8vIGlzIGZsdXNoZWQgaW1tZWRpYXRlbHkuCi0gIC8vCi0gIC8vIFRoZSBpbnB1dCBt
ZXNzYWdlIGhhcyBhbHJlYWR5IGJlZW4gZm9ybWF0dGVkIGFzIGRlZW1lZAotICAvLyBhcHByb3By
aWF0ZSBieSB0aGUgaGlnaGVyIGxldmVsIGxvZ2dpbmcgZmFjaWxpdHkuICBGb3IgZXhhbXBsZSwK
LSAgLy8gdGV4dHVhbCBsb2cgbWVzc2FnZXMgYWxyZWFkeSBjb250YWluIHRpbWVzdGFtcHMsIGFu
ZCB0aGUKLSAgLy8gZmlsZTpsaW5lbnVtYmVyIGhlYWRlci4KLSAgdmlydHVhbCB2b2lkIFdyaXRl
KGJvb2wgZm9yY2VfZmx1c2gsCi0gICAgICAgICAgICAgICAgICAgICB0aW1lX3QgdGltZXN0YW1w
LAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZSwKLSAgICAgICAgICAg
ICAgICAgICAgIGludCBtZXNzYWdlX2xlbikgPSAwOwotCi0gIC8vIEZsdXNoIGFueSBidWZmZXJl
ZCBtZXNzYWdlcwotICB2aXJ0dWFsIHZvaWQgRmx1c2goKSA9IDA7Ci0KLSAgLy8gR2V0IHRoZSBj
dXJyZW50IExPRyBmaWxlIHNpemUuCi0gIC8vIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhcHByb3hp
bWF0ZSBzaW5jZSBzb21lCi0gIC8vIGxvZ2dlZCBkYXRhIG1heSBub3QgaGF2ZSBiZWVuIGZsdXNo
ZWQgdG8gZGlzayB5ZXQuCi0gIHZpcnR1YWwgdWludDMyIExvZ1NpemUoKSA9IDA7Ci19OwotCi0v
LyBHZXQgdGhlIGxvZ2dlciBmb3IgdGhlIHNwZWNpZmllZCBzZXZlcml0eSBsZXZlbC4gIFRoZSBs
b2dnZXIKLS8vIHJlbWFpbnMgdGhlIHByb3BlcnR5IG9mIHRoZSBsb2dnaW5nIG1vZHVsZSBhbmQg
c2hvdWxkIG5vdCBiZQotLy8gZGVsZXRlZCBieSB0aGUgY2FsbGVyLiAgVGhyZWFkLXNhZmUuCi1l
eHRlcm4gR09PR0xFX0dMT0dfRExMX0RFQ0wgTG9nZ2VyKiBHZXRMb2dnZXIoTG9nU2V2ZXJpdHkg
bGV2ZWwpOwotCi0vLyBTZXQgdGhlIGxvZ2dlciBmb3IgdGhlIHNwZWNpZmllZCBzZXZlcml0eSBs
ZXZlbC4gIFRoZSBsb2dnZXIKLS8vIGJlY29tZXMgdGhlIHByb3BlcnR5IG9mIHRoZSBsb2dnaW5n
IG1vZHVsZSBhbmQgc2hvdWxkIG5vdAotLy8gYmUgZGVsZXRlZCBieSB0aGUgY2FsbGVyLiAgVGhy
ZWFkLXNhZmUuCi1leHRlcm4gR09PR0xFX0dMT0dfRExMX0RFQ0wgdm9pZCBTZXRMb2dnZXIoTG9n
U2V2ZXJpdHkgbGV2ZWwsIExvZ2dlciogbG9nZ2VyKTsKLQotfQotCi0vLyBnbGliYyBoYXMgdHJh
ZGl0aW9uYWxseSBpbXBsZW1lbnRlZCB0d28gaW5jb21wYXRpYmxlIHZlcnNpb25zIG9mCi0vLyBz
dHJlcnJvcl9yKCkuIFRoZXJlIGlzIGEgcG9vcmx5IGRlZmluZWQgY29udmVudGlvbiBmb3IgcGlj
a2luZyB0aGUKLS8vIHZlcnNpb24gdGhhdCB3ZSB3YW50LCBidXQgaXQgaXMgbm90IGNsZWFyIHdo
ZXRoZXIgaXQgZXZlbiB3b3JrcyB3aXRoCi0vLyBhbGwgdmVyc2lvbnMgb2YgZ2xpYmMuCi0vLyBT
bywgaW5zdGVhZCwgd2UgcHJvdmlkZSB0aGlzIHdyYXBwZXIgdGhhdCBhdXRvbWF0aWNhbGx5IGRl
dGVjdHMgdGhlCi0vLyB2ZXJzaW9uIHRoYXQgaXMgaW4gdXNlLCBhbmQgdGhlbiBpbXBsZW1lbnRz
IFBPU0lYIHNlbWFudGljcy4KLS8vIE4uQi4gSW4gYWRkaXRpb24gdG8gd2hhdCBQT1NJWCBzYXlz
LCB3ZSBhbHNvIGd1YXJhbnRlZSB0aGF0ICJidWYiIHdpbGwKLS8vIGJlIHNldCB0byBhbiBlbXB0
eSBzdHJpbmcsIGlmIHRoaXMgZnVuY3Rpb24gZmFpbGVkLiBUaGlzIG1lYW5zLCBpbiBtb3N0Ci0v
LyBjYXNlcywgeW91IGRvIG5vdCBuZWVkIHRvIGNoZWNrIHRoZSBlcnJvciBjb2RlIGFuZCB5b3Ug
Y2FuIGRpcmVjdGx5Ci0vLyB1c2UgdGhlIHZhbHVlIG9mICJidWYiLiBJdCB3aWxsIG5ldmVyIGhh
dmUgYW4gdW5kZWZpbmVkIHZhbHVlLgotLy8gREVQUkVDQVRFRDogVXNlIFN0ckVycm9yKGludCkg
aW5zdGVhZC4KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIGludCBwb3NpeF9zdHJlcnJvcl9yKGludCBl
cnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7Ci0KLS8vIEEgdGhyZWFkLXNhZmUgcmVwbGFjZW1l
bnQgZm9yIHN0cmVycm9yKCkuIFJldHVybnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUKLS8vIGdp
dmVuIFBPU0lYIGVycm9yIGNvZGUuCi1HT09HTEVfR0xPR19ETExfREVDTCBzdGQ6OnN0cmluZyBT
dHJFcnJvcihpbnQgZXJyKTsKLQotLy8gQSBjbGFzcyBmb3Igd2hpY2ggd2UgZGVmaW5lIG9wZXJh
dG9yPDwsIHdoaWNoIGRvZXMgbm90aGluZy4KLWNsYXNzIEdPT0dMRV9HTE9HX0RMTF9ERUNMIE51
bGxTdHJlYW0gOiBwdWJsaWMgTG9nTWVzc2FnZTo6TG9nU3RyZWFtIHsKLSBwdWJsaWM6Ci0gIC8v
IEluaXRpYWxpemUgdGhlIExvZ1N0cmVhbSBzbyB0aGUgbWVzc2FnZXMgY2FuIGJlIHdyaXR0ZW4g
c29tZXdoZXJlCi0gIC8vICh0aGV5J2xsIG5ldmVyIGJlIGFjdHVhbGx5IGRpc3BsYXllZCkuIFRo
aXMgd2lsbCBiZSBuZWVkZWQgaWYgYQotICAvLyBOdWxsU3RyZWFtJiBpcyBpbXBsaWNpdGx5IGNv
bnZlcnRlZCB0byBMb2dTdHJlYW0mLCBpbiB3aGljaCBjYXNlCi0gIC8vIHRoZSBvdmVybG9hZGVk
IE51bGxTdHJlYW06Om9wZXJhdG9yPDwgd2lsbCBub3QgYmUgaW52b2tlZC4KLSAgTnVsbFN0cmVh
bSgpIDogTG9nTWVzc2FnZTo6TG9nU3RyZWFtKG1lc3NhZ2VfYnVmZmVyXywgMSwgMCkgeyB9Ci0g
IE51bGxTdHJlYW0oY29uc3QgY2hhciogLypmaWxlKi8sIGludCAvKmxpbmUqLywKLSAgICAgICAg
ICAgICBjb25zdCBDaGVja09wU3RyaW5nJiAvKnJlc3VsdCovKSA6Ci0gICAgICBMb2dNZXNzYWdl
OjpMb2dTdHJlYW0obWVzc2FnZV9idWZmZXJfLCAxLCAwKSB7IH0KLSAgTnVsbFN0cmVhbSAmc3Ry
ZWFtKCkgeyByZXR1cm4gKnRoaXM7IH0KLSBwcml2YXRlOgotICAvLyBBIHZlcnkgc2hvcnQgYnVm
ZmVyIGZvciBtZXNzYWdlcyAod2hpY2ggd2UgZGlzY2FyZCBhbnl3YXkpLiBUaGlzCi0gIC8vIHdp
bGwgYmUgbmVlZGVkIGlmIE51bGxTdHJlYW0mIGNvbnZlcnRlZCB0byBMb2dTdHJlYW0mIChlLmcu
IGFzIGEKLSAgLy8gcmVzdWx0IG9mIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbikuCi0gIGNoYXIg
bWVzc2FnZV9idWZmZXJfWzJdOwotfTsKLQotLy8gRG8gbm90aGluZy4gVGhpcyBvcGVyYXRvciBp
cyBpbmxpbmUsIGFsbG93aW5nIHRoZSBtZXNzYWdlIHRvIGJlCi0vLyBjb21waWxlZCBhd2F5LiBU
aGUgbWVzc2FnZSB3aWxsIG5vdCBiZSBjb21waWxlZCBhd2F5IGlmIHdlIGRvCi0vLyBzb21ldGhp
bmcgbGlrZSAoZmxhZyA/IExPRyhJTkZPKSA6IExPRyhFUlJPUikpIDw8IG1lc3NhZ2U7IHdoZW4K
LS8vIFNLSVBfTE9HPVdBUk5JTkcuIEluIHRob3NlIGNhc2VzLCBOdWxsU3RyZWFtIHdpbGwgYmUg
aW1wbGljaXRseQotLy8gY29udmVydGVkIHRvIExvZ1N0cmVhbSBhbmQgdGhlIG1lc3NhZ2Ugd2ls
bCBiZSBjb21wdXRlZCBhbmQgdGhlbgotLy8gcXVpZXRseSBkaXNjYXJkZWQuCi10ZW1wbGF0ZTxj
bGFzcyBUPgotaW5saW5lIE51bGxTdHJlYW0mIG9wZXJhdG9yPDwoTnVsbFN0cmVhbSAmc3RyLCBj
b25zdCBUICYpIHsgcmV0dXJuIHN0cjsgfQotCi0vLyBTaW1pbGFyIHRvIE51bGxTdHJlYW0sIGJ1
dCBhYm9ydHMgdGhlIHByb2dyYW0gKHdpdGhvdXQgc3RhY2sKLS8vIHRyYWNlKSwgbGlrZSBMb2dN
ZXNzYWdlRmF0YWwuCi1jbGFzcyBHT09HTEVfR0xPR19ETExfREVDTCBOdWxsU3RyZWFtRmF0YWwg
OiBwdWJsaWMgTnVsbFN0cmVhbSB7Ci0gcHVibGljOgotICBOdWxsU3RyZWFtRmF0YWwoKSB7IH0K
LSAgTnVsbFN0cmVhbUZhdGFsKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBDaGVj
a09wU3RyaW5nJiByZXN1bHQpIDoKLSAgICAgIE51bGxTdHJlYW0oZmlsZSwgbGluZSwgcmVzdWx0
KSB7IH0KLSAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkgfk51bGxTdHJlYW1GYXRhbCgpIHRo
cm93ICgpIHsgX2V4aXQoMSk7IH0KLX07Ci0KLS8vIEluc3RhbGwgYSBzaWduYWwgaGFuZGxlciB0
aGF0IHdpbGwgZHVtcCBzaWduYWwgaW5mb3JtYXRpb24gYW5kIGEgc3RhY2sKLS8vIHRyYWNlIHdo
ZW4gdGhlIHByb2dyYW0gY3Jhc2hlcyBvbiBjZXJ0YWluIHNpZ25hbHMuICBXZSdsbCBpbnN0YWxs
IHRoZQotLy8gc2lnbmFsIGhhbmRsZXIgZm9yIHRoZSBmb2xsb3dpbmcgc2lnbmFscy4KLS8vCi0v
LyBTSUdTRUdWLCBTSUdJTEwsIFNJR0ZQRSwgU0lHQUJSVCwgU0lHQlVTLCBhbmQgU0lHVEVSTS4K
LS8vCi0vLyBCeSBkZWZhdWx0LCB0aGUgc2lnbmFsIGhhbmRsZXIgd2lsbCB3cml0ZSB0aGUgZmFp
bHVyZSBkdW1wIHRvIHRoZQotLy8gc3RhbmRhcmQgZXJyb3IuICBZb3UgY2FuIGN1c3RvbWl6ZSB0
aGUgZGVzdGluYXRpb24gYnkgaW5zdGFsbGluZyB5b3VyCi0vLyBvd24gd3JpdGVyIGZ1bmN0aW9u
IGJ5IEluc3RhbGxGYWlsdXJlV3JpdGVyKCkgYmVsb3cuCi0vLwotLy8gTm90ZSBvbiB0aHJlYWRp
bmc6Ci0vLwotLy8gVGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRocmVhZHMg
YXJlIGNyZWF0ZWQsIGlmIHlvdSB3YW50Ci0vLyB0byB1c2UgdGhlIGZhaWx1cmUgc2lnbmFsIGhh
bmRsZXIgZm9yIGFsbCB0aHJlYWRzLiAgVGhlIHN0YWNrIHRyYWNlCi0vLyB3aWxsIGJlIHNob3du
IG9ubHkgZm9yIHRoZSB0aHJlYWQgdGhhdCByZWNlaXZlcyB0aGUgc2lnbmFsLiAgSW4gb3RoZXIK
LS8vIHdvcmRzLCBzdGFjayB0cmFjZXMgb2Ygb3RoZXIgdGhyZWFkcyB3b24ndCBiZSBzaG93bi4K
LUdPT0dMRV9HTE9HX0RMTF9ERUNMIHZvaWQgSW5zdGFsbEZhaWx1cmVTaWduYWxIYW5kbGVyKCk7
Ci0KLS8vIEluc3RhbGxzIGEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIGZvciB3cml0aW5nIHRoZSBm
YWlsdXJlIGR1bXAuICAiZGF0YSIKLS8vIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcg
b2YgYSBtZXNzYWdlIHRvIGJlIHdyaXR0ZW4sIGFuZCAic2l6ZSIKLS8vIGlzIHRoZSBzaXplIG9m
IHRoZSBtZXNzYWdlLiAgWW91IHNob3VsZCBub3QgZXhwZWN0IHRoZSBkYXRhIGlzCi0vLyB0ZXJt
aW5hdGVkIHdpdGggJ1wwJy4KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIHZvaWQgSW5zdGFsbEZhaWx1
cmVXcml0ZXIoCi0gICAgdm9pZCAoKndyaXRlcikoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUp
KTsKLQotfQotCi0jZW5kaWYgLy8gX0xPR0dJTkdfSF8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2dsb2cvc3JjL2dsb2cvbG9nZ2luZy5oLmluIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvZ2xvZy9sb2dnaW5nLmgu
aW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YzY1YmU3YzUyNmZlNzY5MmY3YzE4
N2ZiMzJjYzNmMDJmZjgxOGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvZ2xv
Zy9sb2dnaW5nLmguaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxNjY4ICswLDAgQEAKLS8vIENvcHly
aWdodCAoYykgMTk5OSwgR29vZ2xlIEluYy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0vLwotLy8gQXV0aG9yOiBS
YXkgU2lkbmV5Ci0vLwotLy8gVGhpcyBmaWxlIGNvbnRhaW5zICNpbmNsdWRlIGluZm9ybWF0aW9u
IGFib3V0IGxvZ2dpbmctcmVsYXRlZCBzdHVmZi4KLS8vIFByZXR0eSBtdWNoIGV2ZXJ5Ym9keSBu
ZWVkcyB0byAjaW5jbHVkZSB0aGlzIGZpbGUgc28gdGhhdCB0aGV5IGNhbgotLy8gbG9nIHZhcmlv
dXMgaGFwcGVuaW5ncy4KLS8vCi0jaWZuZGVmIF9MT0dHSU5HX0hfCi0jZGVmaW5lIF9MT0dHSU5H
X0hfCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUg
PHRpbWUuaD4KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8b3N0cmVhbT4KLSNpbmNsdWRl
IDxzc3RyZWFtPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpZiBAYWNfY3ZfaGF2ZV91bmlzdGRfaEAK
LSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpZiBk
ZWZpbmVkKF9NU0NfVkVSKQotI2RlZmluZSBHTE9HX01TVkNfUFVTSF9ESVNBQkxFX1dBUk5JTkco
bikgX19wcmFnbWEod2FybmluZyhwdXNoKSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTpuKSkKLSNkZWZpbmUgR0xPR19NU1ZD
X1BPUF9XQVJOSU5HKCkgX19wcmFnbWEod2FybmluZyhwb3ApKQotI2Vsc2UKLSNkZWZpbmUgR0xP
R19NU1ZDX1BVU0hfRElTQUJMRV9XQVJOSU5HKG4pCi0jZGVmaW5lIEdMT0dfTVNWQ19QT1BfV0FS
TklORygpCi0jZW5kaWYKLQotLy8gQW5ub3lpbmcgc3R1ZmYgZm9yIHdpbmRvd3MgLS0gbWFrZXMg
c3VyZSBjbGllbnRzIGNhbiBpbXBvcnQgdGhlc2UgZnVuY3Rpb25zCi0jaWZuZGVmIEdPT0dMRV9H
TE9HX0RMTF9ERUNMCi0jIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9f
KQotIyAgIGRlZmluZSBHT09HTEVfR0xPR19ETExfREVDTCAgX19kZWNsc3BlYyhkbGxpbXBvcnQp
Ci0jIGVsc2UKLSMgICBkZWZpbmUgR09PR0xFX0dMT0dfRExMX0RFQ0wKLSMgZW5kaWYKLSNlbmRp
ZgotCi0vLyBXZSBjYXJlIGEgbG90IGFib3V0IG51bWJlciBvZiBiaXRzIHRoaW5ncyB0YWtlIHVw
LiAgVW5mb3J0dW5hdGVseSwKLS8vIHN5c3RlbXMgZGVmaW5lIHRoZWlyIGJpdC1zcGVjaWZpYyBp
bnRzIGluIGEgbG90IG9mIGRpZmZlcmVudCB3YXlzLgotLy8gV2UgdXNlIG91ciBvd24gd2F5LCBh
bmQgaGF2ZSBhIHR5cGVkZWYgdG8gZ2V0IHRoZXJlLgotLy8gTm90ZTogdGhlc2UgY29tbWFuZHMg
YmVsb3cgbWF5IGxvb2sgbGlrZSAiI2lmIDEiIG9yICIjaWYgMCIsIGJ1dAotLy8gdGhhdCdzIGJl
Y2F1c2UgdGhleSB3ZXJlIGNvbnN0cnVjdGVkIHRoYXQgd2F5IGF0IC4vY29uZmlndXJlIHRpbWUu
Ci0vLyBMb29rIGF0IGxvZ2dpbmcuaC5pbiB0byBzZWUgaG93IHRoZXkncmUgY2FsY3VsYXRlZCAo
YmFzZWQgb24geW91ciBjb25maWcpLgotI2lmIEBhY19jdl9oYXZlX3N0ZGludF9oQAotI2luY2x1
ZGUgPHN0ZGludC5oPiAgICAgICAgICAgICAvLyB0aGUgbm9ybWFsIHBsYWNlIHVpbnQxNl90IGlz
IGRlZmluZWQKLSNlbmRpZgotI2lmIEBhY19jdl9oYXZlX3N5c3R5cGVzX2hACi0jaW5jbHVkZSA8
c3lzL3R5cGVzLmg+ICAgICAgICAgIC8vIHRoZSBub3JtYWwgcGxhY2UgdV9pbnQxNl90IGlzIGRl
ZmluZWQKLSNlbmRpZgotI2lmIEBhY19jdl9oYXZlX2ludHR5cGVzX2hACi0jaW5jbHVkZSA8aW50
dHlwZXMuaD4gICAgICAgICAgIC8vIGEgdGhpcmQgcGxhY2UgZm9yIHVpbnQxNl90IG9yIHVfaW50
MTZfdAotI2VuZGlmCi0KLSNpZiBAYWNfY3ZfaGF2ZV9saWJnZmxhZ3NACi0jaW5jbHVkZSA8Z2Zs
YWdzL2dmbGFncy5oPgotI2VuZGlmCi0KLUBhY19nb29nbGVfc3RhcnRfbmFtZXNwYWNlQAotCi0j
aWYgQGFjX2N2X2hhdmVfdWludDE2X3RAICAgICAgLy8gdGhlIEM5OSBmb3JtYXQKLXR5cGVkZWYg
aW50MzJfdCBpbnQzMjsKLXR5cGVkZWYgdWludDMyX3QgdWludDMyOwotdHlwZWRlZiBpbnQ2NF90
IGludDY0OwotdHlwZWRlZiB1aW50NjRfdCB1aW50NjQ7Ci0jZWxpZiBAYWNfY3ZfaGF2ZV91X2lu
dDE2X3RAICAgLy8gdGhlIEJTRCBmb3JtYXQKLXR5cGVkZWYgaW50MzJfdCBpbnQzMjsKLXR5cGVk
ZWYgdV9pbnQzMl90IHVpbnQzMjsKLXR5cGVkZWYgaW50NjRfdCBpbnQ2NDsKLXR5cGVkZWYgdV9p
bnQ2NF90IHVpbnQ2NDsKLSNlbGlmIEBhY19jdl9oYXZlX19fdWludDE2QCAgICAvLyB0aGUgd2lu
ZG93cyAodmM3KSBmb3JtYXQKLXR5cGVkZWYgX19pbnQzMiBpbnQzMjsKLXR5cGVkZWYgdW5zaWdu
ZWQgX19pbnQzMiB1aW50MzI7Ci10eXBlZGVmIF9faW50NjQgaW50NjQ7Ci10eXBlZGVmIHVuc2ln
bmVkIF9faW50NjQgdWludDY0OwotI2Vsc2UKLSNlcnJvciBEbyBub3Qga25vdyBob3cgdG8gZGVm
aW5lIGEgMzItYml0IGludGVnZXIgcXVhbnRpdHkgb24geW91ciBzeXN0ZW0KLSNlbmRpZgotCi1A
YWNfZ29vZ2xlX2VuZF9uYW1lc3BhY2VACi0KLS8vIFRoZSBnbG9iYWwgdmFsdWUgb2YgR09PR0xF
X1NUUklQX0xPRy4gQWxsIHRoZSBtZXNzYWdlcyBsb2dnZWQgdG8KLS8vIExPRyhYWFgpIHdpdGgg
c2V2ZXJpdHkgbGVzcyB0aGFuIEdPT0dMRV9TVFJJUF9MT0cgd2lsbCBub3QgYmUgZGlzcGxheWVk
LgotLy8gSWYgaXQgY2FuIGJlIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lIHRoYXQgdGhlIG1l
c3NhZ2Ugd2lsbCBub3QgYmUKLS8vIHByaW50ZWQsIHRoZSBzdGF0ZW1lbnQgd2lsbCBiZSBjb21w
aWxlZCBvdXQuCi0vLwotLy8gRXhhbXBsZTogdG8gc3RyaXAgb3V0IGFsbCBJTkZPIGFuZCBXQVJO
SU5HIG1lc3NhZ2VzLCB1c2UgdGhlIHZhbHVlCi0vLyBvZiAyIGJlbG93LiBUbyBtYWtlIGFuIGV4
Y2VwdGlvbiBmb3IgV0FSTklORyBtZXNzYWdlcyBmcm9tIGEgc2luZ2xlCi0vLyBmaWxlLCBhZGQg
IiNkZWZpbmUgR09PR0xFX1NUUklQX0xPRyAxIiB0byB0aGF0IGZpbGUgX2JlZm9yZV8gaW5jbHVk
aW5nCi0vLyBiYXNlL2xvZ2dpbmcuaAotI2lmbmRlZiBHT09HTEVfU1RSSVBfTE9HCi0jZGVmaW5l
IEdPT0dMRV9TVFJJUF9MT0cgMAotI2VuZGlmCi0KLS8vIEdDQyBjYW4gYmUgdG9sZCB0aGF0IGEg
Y2VydGFpbiBicmFuY2ggaXMgbm90IGxpa2VseSB0byBiZSB0YWtlbiAoZm9yCi0vLyBpbnN0YW5j
ZSwgYSBDSEVDSyBmYWlsdXJlKSwgYW5kIHVzZSB0aGF0IGluZm9ybWF0aW9uIGluIHN0YXRpYyBh
bmFseXNpcy4KLS8vIEdpdmluZyBpdCB0aGlzIGluZm9ybWF0aW9uIGNhbiBoZWxwIGl0IG9wdGlt
aXplIGZvciB0aGUgY29tbW9uIGNhc2UgaW4KLS8vIHRoZSBhYnNlbmNlIG9mIGJldHRlciBpbmZv
cm1hdGlvbiAoaWUuIC1mcHJvZmlsZS1hcmNzKS4KLS8vCi0jaWZuZGVmIEdPT0dMRV9QUkVESUNU
X0JSQU5DSF9OT1RfVEFLRU4KLSNpZiBAYWNfY3ZfaGF2ZV9fX2J1aWx0aW5fZXhwZWN0QAotI2Rl
ZmluZSBHT09HTEVfUFJFRElDVF9CUkFOQ0hfTk9UX1RBS0VOKHgpIChfX2J1aWx0aW5fZXhwZWN0
KHgsIDApKQotI2Vsc2UKLSNkZWZpbmUgR09PR0xFX1BSRURJQ1RfQlJBTkNIX05PVF9UQUtFTih4
KSB4Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEdPT0dMRV9QUkVESUNUX0ZBTFNFCi0jaWYg
QGFjX2N2X2hhdmVfX19idWlsdGluX2V4cGVjdEAKLSNkZWZpbmUgR09PR0xFX1BSRURJQ1RfRkFM
U0UoeCkgKF9fYnVpbHRpbl9leHBlY3QoeCwgMCkpCi0jZWxzZQotI2RlZmluZSBHT09HTEVfUFJF
RElDVF9GQUxTRSh4KSB4Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEdPT0dMRV9QUkVESUNU
X1RSVUUKLSNpZiBAYWNfY3ZfaGF2ZV9fX2J1aWx0aW5fZXhwZWN0QAotI2RlZmluZSBHT09HTEVf
UFJFRElDVF9UUlVFKHgpIChfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAxKSkKLSNlbHNlCi0jZGVm
aW5lIEdPT0dMRV9QUkVESUNUX1RSVUUoeCkgeAotI2VuZGlmCi0jZW5kaWYKLQotCi0vLyBNYWtl
IGEgYnVuY2ggb2YgbWFjcm9zIGZvciBsb2dnaW5nLiAgVGhlIHdheSB0byBsb2cgdGhpbmdzIGlz
IHRvIHN0cmVhbQotLy8gdGhpbmdzIHRvIExPRyg8YSBwYXJ0aWN1bGFyIHNldmVyaXR5IGxldmVs
PikuICBFLmcuLAotLy8KLS8vICAgTE9HKElORk8pIDw8ICJGb3VuZCAiIDw8IG51bV9jb29raWVz
IDw8ICIgY29va2llcyI7Ci0vLwotLy8gWW91IGNhbiBjYXB0dXJlIGxvZyBtZXNzYWdlcyBpbiBh
IHN0cmluZywgcmF0aGVyIHRoYW4gcmVwb3J0aW5nIHRoZW0KLS8vIGltbWVkaWF0ZWx5OgotLy8K
LS8vICAgdmVjdG9yPHN0cmluZz4gZXJyb3JzOwotLy8gICBMT0dfU1RSSU5HKEVSUk9SLCAmZXJy
b3JzKSA8PCAiQ291bGRuJ3QgcGFyc2UgY29va2llICMiIDw8IGNvb2tpZV9udW07Ci0vLwotLy8g
VGhpcyBwdXNoZXMgYmFjayB0aGUgbmV3IGVycm9yIG9udG8gJ2Vycm9ycyc7IGlmIGdpdmVuIGEg
TlVMTCBwb2ludGVyLAotLy8gaXQgcmVwb3J0cyB0aGUgZXJyb3IgdmlhIExPRyhFUlJPUikuCi0v
LwotLy8gWW91IGNhbiBhbHNvIGRvIGNvbmRpdGlvbmFsIGxvZ2dpbmc6Ci0vLwotLy8gICBMT0df
SUYoSU5GTywgbnVtX2Nvb2tpZXMgPiAxMCkgPDwgIkdvdCBsb3RzIG9mIGNvb2tpZXMiOwotLy8K
LS8vIFlvdSBjYW4gYWxzbyBkbyBvY2Nhc2lvbmFsIGxvZ2dpbmcgKGxvZyBldmVyeSBuJ3RoIG9j
Y3VycmVuY2Ugb2YgYW4KLS8vIGV2ZW50KToKLS8vCi0vLyAgIExPR19FVkVSWV9OKElORk8sIDEw
KSA8PCAiR290IHRoZSAiIDw8IGdvb2dsZTo6Q09VTlRFUiA8PCAidGggY29va2llIjsKLS8vCi0v
LyBUaGUgYWJvdmUgd2lsbCBjYXVzZSBsb2cgbWVzc2FnZXMgdG8gYmUgb3V0cHV0IG9uIHRoZSAx
c3QsIDExdGgsIDIxc3QsIC4uLgotLy8gdGltZXMgaXQgaXMgZXhlY3V0ZWQuICBOb3RlIHRoYXQg
dGhlIHNwZWNpYWwgZ29vZ2xlOjpDT1VOVEVSIHZhbHVlIGlzIHVzZWQKLS8vIHRvIGlkZW50aWZ5
IHdoaWNoIHJlcGV0aXRpb24gaXMgaGFwcGVuaW5nLgotLy8KLS8vIFlvdSBjYW4gYWxzbyBkbyBv
Y2Nhc2lvbmFsIGNvbmRpdGlvbmFsIGxvZ2dpbmcgKGxvZyBldmVyeSBuJ3RoCi0vLyBvY2N1cnJl
bmNlIG9mIGFuIGV2ZW50LCB3aGVuIGNvbmRpdGlvbiBpcyBzYXRpc2ZpZWQpOgotLy8KLS8vICAg
TE9HX0lGX0VWRVJZX04oSU5GTywgKHNpemUgPiAxMDI0KSwgMTApIDw8ICJHb3QgdGhlICIgPDwg
Z29vZ2xlOjpDT1VOVEVSCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8PCAidGggYmlnIGNvb2tpZSI7Ci0vLwotLy8gWW91IGNhbiBsb2cgbWVzc2FnZXMgdGhl
IGZpcnN0IE4gdGltZXMgeW91ciBjb2RlIGV4ZWN1dGVzIGEgbGluZS4gRS5nLgotLy8KLS8vICAg
TE9HX0ZJUlNUX04oSU5GTywgMjApIDw8ICJHb3QgdGhlICIgPDwgZ29vZ2xlOjpDT1VOVEVSIDw8
ICJ0aCBjb29raWUiOwotLy8KLS8vIE91dHB1dHMgbG9nIG1lc3NhZ2VzIGZvciB0aGUgZmlyc3Qg
MjAgdGltZXMgaXQgaXMgZXhlY3V0ZWQuCi0vLwotLy8gQW5hbG9nb3VzIFNZU0xPRywgU1lTTE9H
X0lGLCBhbmQgU1lTTE9HX0VWRVJZX04gbWFjcm9zIGFyZSBhdmFpbGFibGUuCi0vLyBUaGVzZSBs
b2cgdG8gc3lzbG9nIGFzIHdlbGwgYXMgdG8gdGhlIG5vcm1hbCBsb2dzLiAgSWYgeW91IHVzZSB0
aGVzZSBhdAotLy8gYWxsLCB5b3UgbmVlZCB0byBiZSBhd2FyZSB0aGF0IHN5c2xvZyBjYW4gZHJh
c3RpY2FsbHkgcmVkdWNlIHBlcmZvcm1hbmNlLAotLy8gZXNwZWNpYWxseSBpZiBpdCBpcyBjb25m
aWd1cmVkIGZvciByZW1vdGUgbG9nZ2luZyEgIERvbid0IHVzZSB0aGVzZQotLy8gdW5sZXNzIHlv
dSBmdWxseSB1bmRlcnN0YW5kIHRoaXMgYW5kIGhhdmUgYSBjb25jcmV0ZSBuZWVkIHRvIHVzZSB0
aGVtLgotLy8gRXZlbiB0aGVuLCB0cnkgdG8gbWluaW1pemUgeW91ciB1c2Ugb2YgdGhlbS4KLS8v
Ci0vLyBUaGVyZSBhcmUgYWxzbyAiZGVidWcgbW9kZSIgbG9nZ2luZyBtYWNyb3MgbGlrZSB0aGUg
b25lcyBhYm92ZToKLS8vCi0vLyAgIERMT0coSU5GTykgPDwgIkZvdW5kIGNvb2tpZXMiOwotLy8K
LS8vICAgRExPR19JRihJTkZPLCBudW1fY29va2llcyA+IDEwKSA8PCAiR290IGxvdHMgb2YgY29v
a2llcyI7Ci0vLwotLy8gICBETE9HX0VWRVJZX04oSU5GTywgMTApIDw8ICJHb3QgdGhlICIgPDwg
Z29vZ2xlOjpDT1VOVEVSIDw8ICJ0aCBjb29raWUiOwotLy8KLS8vIEFsbCAiZGVidWcgbW9kZSIg
bG9nZ2luZyBpcyBjb21waWxlZCBhd2F5IHRvIG5vdGhpbmcgZm9yIG5vbi1kZWJ1ZyBtb2RlCi0v
LyBjb21waWxlcy4KLS8vCi0vLyBXZSBhbHNvIGhhdmUKLS8vCi0vLyAgIExPR19BU1NFUlQoYXNz
ZXJ0aW9uKTsKLS8vICAgRExPR19BU1NFUlQoYXNzZXJ0aW9uKTsKLS8vCi0vLyB3aGljaCBpcyBz
eW50YWN0aWMgc3VnYXIgZm9yIHssRH1MT0dfSUYoRkFUQUwsIGFzc2VydCBmYWlscykgPDwgYXNz
ZXJ0aW9uOwotLy8KLS8vIFRoZXJlIGFyZSAidmVyYm9zZSBsZXZlbCIgbG9nZ2luZyBtYWNyb3Mu
ICBUaGV5IGxvb2sgbGlrZQotLy8KLS8vICAgVkxPRygxKSA8PCAiSSdtIHByaW50ZWQgd2hlbiB5
b3UgcnVuIHRoZSBwcm9ncmFtIHdpdGggLS12PTEgb3IgbW9yZSI7Ci0vLyAgIFZMT0coMikgPDwg
IkknbSBwcmludGVkIHdoZW4geW91IHJ1biB0aGUgcHJvZ3JhbSB3aXRoIC0tdj0yIG9yIG1vcmUi
OwotLy8KLS8vIFRoZXNlIGFsd2F5cyBsb2cgYXQgdGhlIElORk8gbG9nIGxldmVsICh3aGVuIHRo
ZXkgbG9nIGF0IGFsbCkuCi0vLyBUaGUgdmVyYm9zZSBsb2dnaW5nIGNhbiBhbHNvIGJlIHR1cm5l
ZCBvbiBtb2R1bGUtYnktbW9kdWxlLiAgRm9yIGluc3RhbmNlLAotLy8gICAgLS12bW9kdWxlPW1h
cHJlZHVjZT0yLGZpbGU9MSxnZnMqPTMgLS12PTAKLS8vIHdpbGwgY2F1c2U6Ci0vLyAgIGEuIFZM
T0coMikgYW5kIGxvd2VyIG1lc3NhZ2VzIHRvIGJlIHByaW50ZWQgZnJvbSBtYXByZWR1Y2Uue2gs
Y2N9Ci0vLyAgIGIuIFZMT0coMSkgYW5kIGxvd2VyIG1lc3NhZ2VzIHRvIGJlIHByaW50ZWQgZnJv
bSBmaWxlLntoLGNjfQotLy8gICBjLiBWTE9HKDMpIGFuZCBsb3dlciBtZXNzYWdlcyB0byBiZSBw
cmludGVkIGZyb20gZmlsZXMgcHJlZml4ZWQgd2l0aCAiZ2ZzIgotLy8gICBkLiBWTE9HKDApIGFu
ZCBsb3dlciBtZXNzYWdlcyB0byBiZSBwcmludGVkIGZyb20gZWxzZXdoZXJlCi0vLwotLy8gVGhl
IHdpbGRjYXJkaW5nIGZ1bmN0aW9uYWxpdHkgc2hvd24gYnkgKGMpIHN1cHBvcnRzIGJvdGggJyon
IChtYXRjaAotLy8gMCBvciBtb3JlIGNoYXJhY3RlcnMpIGFuZCAnPycgKG1hdGNoIGFueSBzaW5n
bGUgY2hhcmFjdGVyKSB3aWxkY2FyZHMuCi0vLwotLy8gVGhlcmUncyBhbHNvIFZMT0dfSVNfT04o
bikgInZlcmJvc2UgbGV2ZWwiIGNvbmRpdGlvbiBtYWNyby4gVG8gYmUgdXNlZCBhcwotLy8KLS8v
ICAgaWYgKFZMT0dfSVNfT04oMikpIHsKLS8vICAgICAvLyBkbyBzb21lIGxvZ2dpbmcgcHJlcGFy
YXRpb24gYW5kIGxvZ2dpbmcKLS8vICAgICAvLyB0aGF0IGNhbid0IGJlIGFjY29tcGxpc2hlZCB3
aXRoIGp1c3QgVkxPRygyKSA8PCAuLi47Ci0vLyAgIH0KLS8vCi0vLyBUaGVyZSBhcmUgYWxzbyBW
TE9HX0lGLCBWTE9HX0VWRVJZX04gYW5kIFZMT0dfSUZfRVZFUllfTiAidmVyYm9zZSBsZXZlbCIK
LS8vIGNvbmRpdGlvbiBtYWNyb3MgZm9yIHNhbXBsZSBjYXNlcywgd2hlbiBzb21lIGV4dHJhIGNv
bXB1dGF0aW9uIGFuZAotLy8gcHJlcGFyYXRpb24gZm9yIGxvZ3MgaXMgbm90IG5lZWRlZC4KLS8v
ICAgVkxPR19JRigxLCAoc2l6ZSA+IDEwMjQpKQotLy8gICAgICA8PCAiSSdtIHByaW50ZWQgd2hl
biBzaXplIGlzIG1vcmUgdGhhbiAxMDI0IGFuZCB3aGVuIHlvdSBydW4gdGhlICIKLS8vICAgICAg
ICAgInByb2dyYW0gd2l0aCAtLXY9MSBvciBtb3JlIjsKLS8vICAgVkxPR19FVkVSWV9OKDEsIDEw
KQotLy8gICAgICA8PCAiSSdtIHByaW50ZWQgZXZlcnkgMTB0aCBvY2N1cnJlbmNlLCBhbmQgd2hl
biB5b3UgcnVuIHRoZSBwcm9ncmFtICIKLS8vICAgICAgICAgIndpdGggLS12PTEgb3IgbW9yZS4g
UHJlc2VudCBvY2N1cmVuY2UgaXMgIiA8PCBnb29nbGU6OkNPVU5URVI7Ci0vLyAgIFZMT0dfSUZf
RVZFUllfTigxLCAoc2l6ZSA+IDEwMjQpLCAxMCkKLS8vICAgICAgPDwgIkknbSBwcmludGVkIG9u
IGV2ZXJ5IDEwdGggb2NjdXJlbmNlIG9mIGNhc2Ugd2hlbiBzaXplIGlzIG1vcmUgIgotLy8gICAg
ICAgICAiIHRoYW4gMTAyNCwgd2hlbiB5b3UgcnVuIHRoZSBwcm9ncmFtIHdpdGggLS12PTEgb3Ig
bW9yZS4gIjsKLS8vICAgICAgICAgIlByZXNlbnQgb2NjdXJlbmNlIGlzICIgPDwgZ29vZ2xlOjpD
T1VOVEVSOwotLy8KLS8vIFRoZSBzdXBwb3J0ZWQgc2V2ZXJpdHkgbGV2ZWxzIGZvciBtYWNyb3Mg
dGhhdCBhbGxvdyB5b3UgdG8gc3BlY2lmeSBvbmUKLS8vIGFyZSAoaW4gaW5jcmVhc2luZyBvcmRl
ciBvZiBzZXZlcml0eSkgSU5GTywgV0FSTklORywgRVJST1IsIGFuZCBGQVRBTC4KLS8vIE5vdGUg
dGhhdCBtZXNzYWdlcyBvZiBhIGdpdmVuIHNldmVyaXR5IGFyZSBsb2dnZWQgbm90IG9ubHkgaW4g
dGhlCi0vLyBsb2dmaWxlIGZvciB0aGF0IHNldmVyaXR5LCBidXQgYWxzbyBpbiBhbGwgbG9nZmls
ZXMgb2YgbG93ZXIgc2V2ZXJpdHkuCi0vLyBFLmcuLCBhIG1lc3NhZ2Ugb2Ygc2V2ZXJpdHkgRkFU
QUwgd2lsbCBiZSBsb2dnZWQgdG8gdGhlIGxvZ2ZpbGVzIG9mCi0vLyBzZXZlcml0eSBGQVRBTCwg
RVJST1IsIFdBUk5JTkcsIGFuZCBJTkZPLgotLy8KLS8vIFRoZXJlIGlzIGFsc28gdGhlIHNwZWNp
YWwgc2V2ZXJpdHkgb2YgREZBVEFMLCB3aGljaCBsb2dzIEZBVEFMIGluCi0vLyBkZWJ1ZyBtb2Rl
LCBFUlJPUiBpbiBub3JtYWwgbW9kZS4KLS8vCi0vLyBWZXJ5IGltcG9ydGFudDogbG9nZ2luZyBh
IG1lc3NhZ2UgYXQgdGhlIEZBVEFMIHNldmVyaXR5IGxldmVsIGNhdXNlcwotLy8gdGhlIHByb2dy
YW0gdG8gdGVybWluYXRlIChhZnRlciB0aGUgbWVzc2FnZSBpcyBsb2dnZWQpLgotLy8KLS8vIFVu
bGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCBsb2dzIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgZmls
ZW5hbWUKLS8vICI8cHJvZ3JhbSBuYW1lPi48aG9zdG5hbWU+Ljx1c2VyIG5hbWU+LmxvZy48c2V2
ZXJpdHkgbGV2ZWw+LiIsIGZvbGxvd2VkCi0vLyBieSB0aGUgZGF0ZSwgdGltZSwgYW5kIHBpZCAo
eW91IGNhbid0IHByZXZlbnQgdGhlIGRhdGUsIHRpbWUsIGFuZCBwaWQKLS8vIGZyb20gYmVpbmcg
aW4gdGhlIGZpbGVuYW1lKS4KLS8vCi0vLyBUaGUgbG9nZ2luZyBjb2RlIHRha2VzIHR3byBmbGFn
czoKLS8vICAgICAtLXY9IyAgICAgICAgICAgc2V0IHRoZSB2ZXJib3NlIGxldmVsCi0vLyAgICAg
LS1sb2d0b3N0ZGVyciAgIGxvZyBhbGwgdGhlIG1lc3NhZ2VzIHRvIHN0ZGVyciBpbnN0ZWFkIG9m
IHRvIGxvZ2ZpbGVzCi0KLS8vIExPRyBMSU5FIFBSRUZJWCBGT1JNQVQKLS8vCi0vLyBMb2cgbGlu
ZXMgaGF2ZSB0aGlzIGZvcm06Ci0vLwotLy8gICAgIExtbWRkIGhoOm1tOnNzLnV1dXV1dSB0aHJl
YWRpZCBmaWxlOmxpbmVdIG1zZy4uLgotLy8KLS8vIHdoZXJlIHRoZSBmaWVsZHMgYXJlIGRlZmlu
ZWQgYXMgZm9sbG93czoKLS8vCi0vLyAgIEwgICAgICAgICAgICAgICAgQSBzaW5nbGUgY2hhcmFj
dGVyLCByZXByZXNlbnRpbmcgdGhlIGxvZyBsZXZlbAotLy8gICAgICAgICAgICAgICAgICAgIChl
ZyAnSScgZm9yIElORk8pCi0vLyAgIG1tICAgICAgICAgICAgICAgVGhlIG1vbnRoICh6ZXJvIHBh
ZGRlZDsgaWUgTWF5IGlzICcwNScpCi0vLyAgIGRkICAgICAgICAgICAgICAgVGhlIGRheSAoemVy
byBwYWRkZWQpCi0vLyAgIGhoOm1tOnNzLnV1dXV1dSAgVGltZSBpbiBob3VycywgbWludXRlcyBh
bmQgZnJhY3Rpb25hbCBzZWNvbmRzCi0vLyAgIHRocmVhZGlkICAgICAgICAgVGhlIHNwYWNlLXBh
ZGRlZCB0aHJlYWQgSUQgYXMgcmV0dXJuZWQgYnkgR2V0VElEKCkKLS8vICAgICAgICAgICAgICAg
ICAgICAodGhpcyBtYXRjaGVzIHRoZSBQSUQgb24gTGludXgpCi0vLyAgIGZpbGUgICAgICAgICAg
ICAgVGhlIGZpbGUgbmFtZQotLy8gICBsaW5lICAgICAgICAgICAgIFRoZSBsaW5lIG51bWJlcgot
Ly8gICBtc2cgICAgICAgICAgICAgIFRoZSB1c2VyLXN1cHBsaWVkIG1lc3NhZ2UKLS8vCi0vLyBF
eGFtcGxlOgotLy8KLS8vICAgSTExMDMgMTE6NTc6MzEuNzM5MzM5IDI0Mzk1IGdvb2dsZS5jYzoy
MzQxXSBDb21tYW5kIGxpbmU6IC4vc29tZV9wcm9nCi0vLyAgIEkxMTAzIDExOjU3OjMxLjczOTQw
MyAyNDM5NSBnb29nbGUuY2M6MjM0Ml0gUHJvY2VzcyBpZCAyNDM5NQotLy8KLS8vIE5PVEU6IGFs
dGhvdWdoIHRoZSBtaWNyb3NlY29uZHMgYXJlIHVzZWZ1bCBmb3IgY29tcGFyaW5nIGV2ZW50cyBv
bgotLy8gYSBzaW5nbGUgbWFjaGluZSwgY2xvY2tzIG9uIGRpZmZlcmVudCBtYWNoaW5lcyBtYXkg
bm90IGJlIHdlbGwKLS8vIHN5bmNocm9uaXplZC4gIEhlbmNlLCB1c2UgY2F1dGlvbiB3aGVuIGNv
bXBhcmluZyB0aGUgbG93IGJpdHMgb2YKLS8vIHRpbWVzdGFtcHMgZnJvbSBkaWZmZXJlbnQgbWFj
aGluZXMuCi0KLSNpZm5kZWYgREVDTEFSRV9WQVJJQUJMRQotI2RlZmluZSBNVVNUX1VOREVGX0dG
TEFHU19ERUNMQVJFX01BQ1JPUwotI2RlZmluZSBERUNMQVJFX1ZBUklBQkxFKHR5cGUsIHNob3J0
dHlwZSwgbmFtZSwgdG4pICAgICAgICAgICAgICAgICAgICAgXAotICBuYW1lc3BhY2UgZkwjI3No
b3J0dHlwZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIGV4dGVybiBHT09HTEVfR0xPR19ETExfREVDTCB0eXBlIEZMQUdTXyMjbmFtZTsgICAgICAg
ICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB1c2luZyBmTCMjc2hvcnR0eXBl
OjpGTEFHU18jI25hbWUKLQotLy8gYm9vbCBzcGVjaWFsaXphdGlvbgotI2RlZmluZSBERUNMQVJF
X2Jvb2wobmFtZSkgXAotICBERUNMQVJFX1ZBUklBQkxFKGJvb2wsIEIsIG5hbWUsIGJvb2wpCi0K
LS8vIGludDMyIHNwZWNpYWxpemF0aW9uCi0jZGVmaW5lIERFQ0xBUkVfaW50MzIobmFtZSkgXAot
ICBERUNMQVJFX1ZBUklBQkxFKEBhY19nb29nbGVfbmFtZXNwYWNlQDo6aW50MzIsIEksIG5hbWUs
IGludDMyKQotCi0vLyBTcGVjaWFsIGNhc2UgZm9yIHN0cmluZywgYmVjYXVzZSB3ZSBoYXZlIHRv
IHNwZWNpZnkgdGhlIG5hbWVzcGFjZQotLy8gc3RkOjpzdHJpbmcsIHdoaWNoIGRvZXNuJ3QgcGxh
eSBuaWNlbHkgd2l0aCBvdXIgRkxBR19fbmFtZXNwYWNlIGhhY2tlcnkuCi0jZGVmaW5lIERFQ0xB
UkVfc3RyaW5nKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIG5hbWVzcGFjZSBmTFMgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgZXh0ZXJuIEdPT0dMRV9HTE9HX0RMTF9ERUNMIHN0
ZDo6c3RyaW5nJiBGTEFHU18jI25hbWU7ICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gIHVzaW5nIGZMUzo6RkxBR1NfIyNuYW1lCi0jZW5kaWYKLQotLy8gU2V0IHdoZXRoZXIgbG9n
IG1lc3NhZ2VzIGdvIHRvIHN0ZGVyciBpbnN0ZWFkIG9mIGxvZ2ZpbGVzCi1ERUNMQVJFX2Jvb2wo
bG9ndG9zdGRlcnIpOwotCi0vLyBTZXQgd2hldGhlciBsb2cgbWVzc2FnZXMgZ28gdG8gc3RkZXJy
IGluIGFkZGl0aW9uIHRvIGxvZ2ZpbGVzLgotREVDTEFSRV9ib29sKGFsc29sb2d0b3N0ZGVycik7
Ci0KLS8vIFNldCBjb2xvciBtZXNzYWdlcyBsb2dnZWQgdG8gc3RkZXJyIChpZiBzdXBwb3J0ZWQg
YnkgdGVybWluYWwpLgotREVDTEFSRV9ib29sKGNvbG9ybG9ndG9zdGRlcnIpOwotCi0vLyBMb2cg
bWVzc2FnZXMgYXQgYSBsZXZlbCA+PSB0aGlzIGZsYWcgYXJlIGF1dG9tYXRpY2FsbHkgc2VudCB0
bwotLy8gc3RkZXJyIGluIGFkZGl0aW9uIHRvIGxvZyBmaWxlcy4KLURFQ0xBUkVfaW50MzIoc3Rk
ZXJydGhyZXNob2xkKTsKLQotLy8gU2V0IHdoZXRoZXIgdGhlIGxvZyBwcmVmaXggc2hvdWxkIGJl
IHByZXBlbmRlZCB0byBlYWNoIGxpbmUgb2Ygb3V0cHV0LgotREVDTEFSRV9ib29sKGxvZ19wcmVm
aXgpOwotCi0vLyBMb2cgbWVzc2FnZXMgYXQgYSBsZXZlbCA8PSB0aGlzIGZsYWcgYXJlIGJ1ZmZl
cmVkLgotLy8gTG9nIG1lc3NhZ2VzIGF0IGEgaGlnaGVyIGxldmVsIGFyZSBmbHVzaGVkIGltbWVk
aWF0ZWx5LgotREVDTEFSRV9pbnQzMihsb2didWZsZXZlbCk7Ci0KLS8vIFNldHMgdGhlIG1heGlt
dW0gbnVtYmVyIG9mIHNlY29uZHMgd2hpY2ggbG9ncyBtYXkgYmUgYnVmZmVyZWQgZm9yLgotREVD
TEFSRV9pbnQzMihsb2didWZzZWNzKTsKLQotLy8gTG9nIHN1cHByZXNzaW9uIGxldmVsOiBtZXNz
YWdlcyBsb2dnZWQgYXQgYSBsb3dlciBsZXZlbCB0aGFuIHRoaXMKLS8vIGFyZSBzdXBwcmVzc2Vk
LgotREVDTEFSRV9pbnQzMihtaW5sb2dsZXZlbCk7Ci0KLS8vIElmIHNwZWNpZmllZCwgbG9nZmls
ZXMgYXJlIHdyaXR0ZW4gaW50byB0aGlzIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHRoZQotLy8gZGVm
YXVsdCBsb2dnaW5nIGRpcmVjdG9yeS4KLURFQ0xBUkVfc3RyaW5nKGxvZ19kaXIpOwotCi0vLyBT
ZXQgdGhlIGxvZyBmaWxlIG1vZGUuCi1ERUNMQVJFX2ludDMyKGxvZ2ZpbGVfbW9kZSk7Ci0KLS8v
IFNldHMgdGhlIHBhdGggb2YgdGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIHRvIHB1dCBhZGRpdGlv
bmFsIGxpbmtzCi0vLyB0byB0aGUgbG9nIGZpbGVzLgotREVDTEFSRV9zdHJpbmcobG9nX2xpbmsp
OwotCi1ERUNMQVJFX2ludDMyKHYpOyAgLy8gaW4gdmxvZ19pc19vbi5jYwotCi0vLyBTZXRzIHRo
ZSBtYXhpbXVtIGxvZyBmaWxlIHNpemUgKGluIE1CKS4KLURFQ0xBUkVfaW50MzIobWF4X2xvZ19z
aXplKTsKLQotLy8gU2V0cyB3aGV0aGVyIHRvIGF2b2lkIGxvZ2dpbmcgdG8gdGhlIGRpc2sgaWYg
dGhlIGRpc2sgaXMgZnVsbC4KLURFQ0xBUkVfYm9vbChzdG9wX2xvZ2dpbmdfaWZfZnVsbF9kaXNr
KTsKLQotI2lmZGVmIE1VU1RfVU5ERUZfR0ZMQUdTX0RFQ0xBUkVfTUFDUk9TCi0jdW5kZWYgTVVT
VF9VTkRFRl9HRkxBR1NfREVDTEFSRV9NQUNST1MKLSN1bmRlZiBERUNMQVJFX1ZBUklBQkxFCi0j
dW5kZWYgREVDTEFSRV9ib29sCi0jdW5kZWYgREVDTEFSRV9pbnQzMgotI3VuZGVmIERFQ0xBUkVf
c3RyaW5nCi0jZW5kaWYKLQotLy8gTG9nIG1lc3NhZ2VzIGJlbG93IHRoZSBHT09HTEVfU1RSSVBf
TE9HIGxldmVsIHdpbGwgYmUgY29tcGlsZWQgYXdheSBmb3IKLS8vIHNlY3VyaXR5IHJlYXNvbnMu
IFNlZSBMT0coc2V2ZXJ0aXkpIGJlbG93LgotCi0vLyBBIGZldyBkZWZpbml0aW9ucyBvZiBtYWNy
b3MgdGhhdCBkb24ndCBnZW5lcmF0ZSBtdWNoIGNvZGUuICBTaW5jZQotLy8gTE9HKElORk8pIGFu
ZCBpdHMgaWxrIGFyZSB1c2VkIGFsbCBvdmVyIG91ciBjb2RlLCBpdCdzCi0vLyBiZXR0ZXIgdG8g
aGF2ZSBjb21wYWN0IGNvZGUgZm9yIHRoZXNlIG9wZXJhdGlvbnMuCi0KLSNpZiBHT09HTEVfU1RS
SVBfTE9HID09IDAKLSNkZWZpbmUgQ09NUEFDVF9HT09HTEVfTE9HX0lORk8gQGFjX2dvb2dsZV9u
YW1lc3BhY2VAOjpMb2dNZXNzYWdlKCBcCi0gICAgICBfX0ZJTEVfXywgX19MSU5FX18pCi0jZGVm
aW5lIExPR19UT19TVFJJTkdfSU5GTyhtZXNzYWdlKSBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6Okxv
Z01lc3NhZ2UoIFwKLSAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgQGFjX2dvb2dsZV9uYW1lc3Bh
Y2VAOjpHTE9HX0lORk8sIG1lc3NhZ2UpCi0jZWxzZQotI2RlZmluZSBDT01QQUNUX0dPT0dMRV9M
T0dfSU5GTyBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6Ok51bGxTdHJlYW0oKQotI2RlZmluZSBMT0df
VE9fU1RSSU5HX0lORk8obWVzc2FnZSkgQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpOdWxsU3RyZWFt
KCkKLSNlbmRpZgotCi0jaWYgR09PR0xFX1NUUklQX0xPRyA8PSAxCi0jZGVmaW5lIENPTVBBQ1Rf
R09PR0xFX0xPR19XQVJOSU5HIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6TG9nTWVzc2FnZSggXAot
ICAgICAgX19GSUxFX18sIF9fTElORV9fLCBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkdMT0dfV0FS
TklORykKLSNkZWZpbmUgTE9HX1RPX1NUUklOR19XQVJOSU5HKG1lc3NhZ2UpIEBhY19nb29nbGVf
bmFtZXNwYWNlQDo6TG9nTWVzc2FnZSggXAotICAgICAgX19GSUxFX18sIF9fTElORV9fLCBAYWNf
Z29vZ2xlX25hbWVzcGFjZUA6OkdMT0dfV0FSTklORywgbWVzc2FnZSkKLSNlbHNlCi0jZGVmaW5l
IENPTVBBQ1RfR09PR0xFX0xPR19XQVJOSU5HIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6TnVsbFN0
cmVhbSgpCi0jZGVmaW5lIExPR19UT19TVFJJTkdfV0FSTklORyhtZXNzYWdlKSBAYWNfZ29vZ2xl
X25hbWVzcGFjZUA6Ok51bGxTdHJlYW0oKQotI2VuZGlmCi0KLSNpZiBHT09HTEVfU1RSSVBfTE9H
IDw9IDIKLSNkZWZpbmUgQ09NUEFDVF9HT09HTEVfTE9HX0VSUk9SIEBhY19nb29nbGVfbmFtZXNw
YWNlQDo6TG9nTWVzc2FnZSggXAotICAgICAgX19GSUxFX18sIF9fTElORV9fLCBAYWNfZ29vZ2xl
X25hbWVzcGFjZUA6OkdMT0dfRVJST1IpCi0jZGVmaW5lIExPR19UT19TVFJJTkdfRVJST1IobWVz
c2FnZSkgQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpMb2dNZXNzYWdlKCBcCi0gICAgICBfX0ZJTEVf
XywgX19MSU5FX18sIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6R0xPR19FUlJPUiwgbWVzc2FnZSkK
LSNlbHNlCi0jZGVmaW5lIENPTVBBQ1RfR09PR0xFX0xPR19FUlJPUiBAYWNfZ29vZ2xlX25hbWVz
cGFjZUA6Ok51bGxTdHJlYW0oKQotI2RlZmluZSBMT0dfVE9fU1RSSU5HX0VSUk9SKG1lc3NhZ2Up
IEBhY19nb29nbGVfbmFtZXNwYWNlQDo6TnVsbFN0cmVhbSgpCi0jZW5kaWYKLQotI2lmIEdPT0dM
RV9TVFJJUF9MT0cgPD0gMwotI2RlZmluZSBDT01QQUNUX0dPT0dMRV9MT0dfRkFUQUwgQGFjX2dv
b2dsZV9uYW1lc3BhY2VAOjpMb2dNZXNzYWdlRmF0YWwoIFwKLSAgICAgIF9fRklMRV9fLCBfX0xJ
TkVfXykKLSNkZWZpbmUgTE9HX1RPX1NUUklOR19GQVRBTChtZXNzYWdlKSBAYWNfZ29vZ2xlX25h
bWVzcGFjZUA6OkxvZ01lc3NhZ2UoIFwKLSAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgQGFjX2dv
b2dsZV9uYW1lc3BhY2VAOjpHTE9HX0ZBVEFMLCBtZXNzYWdlKQotI2Vsc2UKLSNkZWZpbmUgQ09N
UEFDVF9HT09HTEVfTE9HX0ZBVEFMIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6TnVsbFN0cmVhbUZh
dGFsKCkKLSNkZWZpbmUgTE9HX1RPX1NUUklOR19GQVRBTChtZXNzYWdlKSBAYWNfZ29vZ2xlX25h
bWVzcGFjZUA6Ok51bGxTdHJlYW1GYXRhbCgpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoTkRFQlVH
KSAmJiAhZGVmaW5lZChEQ0hFQ0tfQUxXQVlTX09OKQotI2RlZmluZSBEQ0hFQ0tfSVNfT04oKSAw
Ci0jZWxzZQotI2RlZmluZSBEQ0hFQ0tfSVNfT04oKSAxCi0jZW5kaWYKLQotLy8gRm9yIERGQVRB
TCwgd2Ugd2FudCB0byB1c2UgTG9nTWVzc2FnZSAoYXMgb3Bwb3NlZCB0bwotLy8gTG9nTWVzc2Fn
ZUZhdGFsKSwgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBvcmlnaW5hbCBiZWhhdmlvci4KLSNp
ZiAhRENIRUNLX0lTX09OKCkKLSNkZWZpbmUgQ09NUEFDVF9HT09HTEVfTE9HX0RGQVRBTCBDT01Q
QUNUX0dPT0dMRV9MT0dfRVJST1IKLSNlbGlmIEdPT0dMRV9TVFJJUF9MT0cgPD0gMwotI2RlZmlu
ZSBDT01QQUNUX0dPT0dMRV9MT0dfREZBVEFMIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6TG9nTWVz
c2FnZSggXAotICAgICAgX19GSUxFX18sIF9fTElORV9fLCBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6
OkdMT0dfRkFUQUwpCi0jZWxzZQotI2RlZmluZSBDT01QQUNUX0dPT0dMRV9MT0dfREZBVEFMIEBh
Y19nb29nbGVfbmFtZXNwYWNlQDo6TnVsbFN0cmVhbUZhdGFsKCkKLSNlbmRpZgotCi0jZGVmaW5l
IEdPT0dMRV9MT0dfSU5GTyhjb3VudGVyKSBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkxvZ01lc3Nh
Z2UoX19GSUxFX18sIF9fTElORV9fLCBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkdMT0dfSU5GTywg
Y291bnRlciwgJkBhY19nb29nbGVfbmFtZXNwYWNlQDo6TG9nTWVzc2FnZTo6U2VuZFRvTG9nKQot
I2RlZmluZSBTWVNMT0dfSU5GTyhjb3VudGVyKSBcCi0gIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6
TG9nTWVzc2FnZShfX0ZJTEVfXywgX19MSU5FX18sIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6R0xP
R19JTkZPLCBjb3VudGVyLCBcCi0gICZAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkxvZ01lc3NhZ2U6
OlNlbmRUb1N5c2xvZ0FuZExvZykKLSNkZWZpbmUgR09PR0xFX0xPR19XQVJOSU5HKGNvdW50ZXIp
ICBcCi0gIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6TG9nTWVzc2FnZShfX0ZJTEVfXywgX19MSU5F
X18sIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6R0xPR19XQVJOSU5HLCBjb3VudGVyLCBcCi0gICZA
YWNfZ29vZ2xlX25hbWVzcGFjZUA6OkxvZ01lc3NhZ2U6OlNlbmRUb0xvZykKLSNkZWZpbmUgU1lT
TE9HX1dBUk5JTkcoY291bnRlcikgIFwKLSAgQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpMb2dNZXNz
YWdlKF9fRklMRV9fLCBfX0xJTkVfXywgQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpHTE9HX1dBUk5J
TkcsIGNvdW50ZXIsIFwKLSAgJkBhY19nb29nbGVfbmFtZXNwYWNlQDo6TG9nTWVzc2FnZTo6U2Vu
ZFRvU3lzbG9nQW5kTG9nKQotI2RlZmluZSBHT09HTEVfTE9HX0VSUk9SKGNvdW50ZXIpICBcCi0g
IEBhY19nb29nbGVfbmFtZXNwYWNlQDo6TG9nTWVzc2FnZShfX0ZJTEVfXywgX19MSU5FX18sIEBh
Y19nb29nbGVfbmFtZXNwYWNlQDo6R0xPR19FUlJPUiwgY291bnRlciwgXAotICAmQGFjX2dvb2ds
ZV9uYW1lc3BhY2VAOjpMb2dNZXNzYWdlOjpTZW5kVG9Mb2cpCi0jZGVmaW5lIFNZU0xPR19FUlJP
Uihjb3VudGVyKSAgXAotICBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkxvZ01lc3NhZ2UoX19GSUxF
X18sIF9fTElORV9fLCBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkdMT0dfRVJST1IsIGNvdW50ZXIs
IFwKLSAgJkBhY19nb29nbGVfbmFtZXNwYWNlQDo6TG9nTWVzc2FnZTo6U2VuZFRvU3lzbG9nQW5k
TG9nKQotI2RlZmluZSBHT09HTEVfTE9HX0ZBVEFMKGNvdW50ZXIpIFwKLSAgQGFjX2dvb2dsZV9u
YW1lc3BhY2VAOjpMb2dNZXNzYWdlKF9fRklMRV9fLCBfX0xJTkVfXywgQGFjX2dvb2dsZV9uYW1l
c3BhY2VAOjpHTE9HX0ZBVEFMLCBjb3VudGVyLCBcCi0gICZAYWNfZ29vZ2xlX25hbWVzcGFjZUA6
OkxvZ01lc3NhZ2U6OlNlbmRUb0xvZykKLSNkZWZpbmUgU1lTTE9HX0ZBVEFMKGNvdW50ZXIpIFwK
LSAgQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpMb2dNZXNzYWdlKF9fRklMRV9fLCBfX0xJTkVfXywg
QGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpHTE9HX0ZBVEFMLCBjb3VudGVyLCBcCi0gICZAYWNfZ29v
Z2xlX25hbWVzcGFjZUA6OkxvZ01lc3NhZ2U6OlNlbmRUb1N5c2xvZ0FuZExvZykKLSNkZWZpbmUg
R09PR0xFX0xPR19ERkFUQUwoY291bnRlcikgXAotICBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6Okxv
Z01lc3NhZ2UoX19GSUxFX18sIF9fTElORV9fLCBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkRGQVRB
TF9MRVZFTCwgY291bnRlciwgXAotICAmQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpMb2dNZXNzYWdl
OjpTZW5kVG9Mb2cpCi0jZGVmaW5lIFNZU0xPR19ERkFUQUwoY291bnRlcikgXAotICBAYWNfZ29v
Z2xlX25hbWVzcGFjZUA6OkxvZ01lc3NhZ2UoX19GSUxFX18sIF9fTElORV9fLCBAYWNfZ29vZ2xl
X25hbWVzcGFjZUA6OkRGQVRBTF9MRVZFTCwgY291bnRlciwgXAotICAmQGFjX2dvb2dsZV9uYW1l
c3BhY2VAOjpMb2dNZXNzYWdlOjpTZW5kVG9TeXNsb2dBbmRMb2cpCi0KLSNpZiBkZWZpbmVkKFdJ
TjMyKSB8fCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1dJTjMyX18pIHx8IGRlZmluZWQo
X19DWUdXSU5fXykgfHwgZGVmaW5lZChfX0NZR1dJTjMyX18pCi0vLyBBIHZlcnkgdXNlZnVsIGxv
Z2dpbmcgbWFjcm8gdG8gbG9nIHdpbmRvd3MgZXJyb3JzOgotI2RlZmluZSBMT0dfU1lTUkVTVUxU
KHJlc3VsdCkgXAotICBpZiAoRkFJTEVEKEhSRVNVTFRfRlJPTV9XSU4zMihyZXN1bHQpKSkgeyBc
Ci0gICAgTFBTVFIgbWVzc2FnZSA9IE5VTEw7IFwKLSAgICBMUFNUUiBtc2cgPSByZWludGVycHJl
dF9jYXN0PExQU1RSPigmbWVzc2FnZSk7IFwKLSAgICBEV09SRCBtZXNzYWdlX2xlbmd0aCA9IEZv
cm1hdE1lc3NhZ2VBKEZPUk1BVF9NRVNTQUdFX0FMTE9DQVRFX0JVRkZFUiB8IFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTSwgXAotICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIHJlc3VsdCwgMCwgbXNnLCAxMDAsIE5VTEwpOyBcCi0gICAgaWYg
KG1lc3NhZ2VfbGVuZ3RoID4gMCkgeyBcCi0gICAgICBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6Okxv
Z01lc3NhZ2UoX19GSUxFX18sIF9fTElORV9fLCBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkdMT0df
RVJST1IsIDAsIFwKLSAgICAgICAgICAmQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpMb2dNZXNzYWdl
OjpTZW5kVG9Mb2cpLnN0cmVhbSgpIFwKLSAgICAgICAgICA8PCByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihtZXNzYWdlKTsgXAotICAgICAgTG9jYWxGcmVlKG1lc3NhZ2UpOyBcCi0gICAg
fSBcCi0gIH0KLSNlbmRpZgotCi0vLyBXZSB1c2UgdGhlIHByZXByb2Nlc3NvcidzIG1lcmdpbmcg
b3BlcmF0b3IsICIjIyIsIHNvIHRoYXQsIGUuZy4sCi0vLyBMT0coSU5GTykgYmVjb21lcyB0aGUg
dG9rZW4gR09PR0xFX0xPR19JTkZPLiAgVGhlcmUncyBzb21lIGZ1bm55Ci0vLyBzdWJ0bGUgZGlm
ZmVyZW5jZSBiZXR3ZWVuIG9zdHJlYW0gbWVtYmVyIHN0cmVhbWluZyBmdW5jdGlvbnMgKGUuZy4s
Ci0vLyBvc3RyZWFtOjpvcGVyYXRvcjw8KGludCkgYW5kIG9zdHJlYW0gbm9uLW1lbWJlciBzdHJl
YW1pbmcgZnVuY3Rpb25zCi0vLyAoZS5nLiwgOjpvcGVyYXRvcjw8KG9zdHJlYW0mLCBzdHJpbmcm
KTogaXQgdHVybnMgb3V0IHRoYXQgaXQncwotLy8gaW1wb3NzaWJsZSB0byBzdHJlYW0gc29tZXRo
aW5nIGxpa2UgYSBzdHJpbmcgZGlyZWN0bHkgdG8gYW4gdW5uYW1lZAotLy8gb3N0cmVhbS4gV2Ug
ZW1wbG95IGEgbmVhdCBoYWNrIGJ5IGNhbGxpbmcgdGhlIHN0cmVhbSgpIG1lbWJlcgotLy8gZnVu
Y3Rpb24gb2YgTG9nTWVzc2FnZSB3aGljaCBzZWVtcyB0byBhdm9pZCB0aGUgcHJvYmxlbS4KLSNk
ZWZpbmUgTE9HKHNldmVyaXR5KSBDT01QQUNUX0dPT0dMRV9MT0dfICMjIHNldmVyaXR5LnN0cmVh
bSgpCi0jZGVmaW5lIFNZU0xPRyhzZXZlcml0eSkgU1lTTE9HXyAjIyBzZXZlcml0eSgwKS5zdHJl
YW0oKQotCi1AYWNfZ29vZ2xlX3N0YXJ0X25hbWVzcGFjZUAKLQotLy8gVGhleSBuZWVkIHRoZSBk
ZWZpbml0aW9ucyBvZiBpbnRlZ2VyIHR5cGVzLgotI2luY2x1ZGUgImdsb2cvbG9nX3NldmVyaXR5
LmgiCi0jaW5jbHVkZSAiZ2xvZy92bG9nX2lzX29uLmgiCi0KLS8vIEluaXRpYWxpemUgZ29vZ2xl
J3MgbG9nZ2luZyBsaWJyYXJ5LiBZb3Ugd2lsbCBzZWUgdGhlIHByb2dyYW0gbmFtZQotLy8gc3Bl
Y2lmaWVkIGJ5IGFyZ3YwIGluIGxvZyBvdXRwdXRzLgotR09PR0xFX0dMT0dfRExMX0RFQ0wgdm9p
ZCBJbml0R29vZ2xlTG9nZ2luZyhjb25zdCBjaGFyKiBhcmd2MCk7Ci0KLS8vIFNodXRkb3duIGdv
b2dsZSdzIGxvZ2dpbmcgbGlicmFyeS4KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIHZvaWQgU2h1dGRv
d25Hb29nbGVMb2dnaW5nKCk7Ci0KLS8vIEluc3RhbGwgYSBmdW5jdGlvbiB3aGljaCB3aWxsIGJl
IGNhbGxlZCBhZnRlciBMT0coRkFUQUwpLgotR09PR0xFX0dMT0dfRExMX0RFQ0wgdm9pZCBJbnN0
YWxsRmFpbHVyZUZ1bmN0aW9uKHZvaWQgKCpmYWlsX2Z1bmMpKCkpOwotCi1jbGFzcyBMb2dTaW5r
OyAgLy8gZGVmaW5lZCBiZWxvdwotCi0vLyBJZiBhIG5vbi1OVUxMIHNpbmsgcG9pbnRlciBpcyBn
aXZlbiwgd2UgcHVzaCB0aGlzIG1lc3NhZ2UgdG8gdGhhdCBzaW5rLgotLy8gRm9yIExPR19UT19T
SU5LIHdlIHRoZW4gZG8gbm9ybWFsIExPRyhzZXZlcml0eSkgbG9nZ2luZyBhcyB3ZWxsLgotLy8g
VGhpcyBpcyB1c2VmdWwgZm9yIGNhcHR1cmluZyBtZXNzYWdlcyBhbmQgcGFzc2luZy9zdG9yaW5n
IHRoZW0KLS8vIHNvbWV3aGVyZSBtb3JlIHNwZWNpZmljIHRoYW4gdGhlIGdsb2JhbCBsb2cgb2Yg
dGhlIHByb2Nlc3MuCi0vLyBBcmd1bWVudCB0eXBlczoKLS8vICAgTG9nU2luayogc2luazsKLS8v
ICAgTG9nU2V2ZXJpdHkgc2V2ZXJpdHk7Ci0vLyBUaGUgY2FzdCBpcyB0byBkaXNhbWJpZ3VhdGUg
TlVMTCBhcmd1bWVudHMuCi0jZGVmaW5lIExPR19UT19TSU5LKHNpbmssIHNldmVyaXR5KSBcCi0g
IEBhY19nb29nbGVfbmFtZXNwYWNlQDo6TG9nTWVzc2FnZSggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICBfX0ZJTEVfXywgX19MSU5FX18sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBAYWNfZ29vZ2xlX25hbWVz
cGFjZUA6OkdMT0dfICMjIHNldmVyaXR5LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICBzdGF0aWNfY2FzdDxAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkxvZ1NpbmsqPihzaW5rKSwgdHJ1
ZSkuc3RyZWFtKCkKLSNkZWZpbmUgTE9HX1RPX1NJTktfQlVUX05PVF9UT19MT0dGSUxFKHNpbmss
IHNldmVyaXR5KSAgICAgICAgICAgICAgICAgIFwKLSAgQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpM
b2dNZXNzYWdlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIF9f
RklMRV9fLCBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6R0xPR18gIyMgc2V2ZXJpdHks
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHN0YXRpY19jYXN0PEBhY19nb29nbGVf
bmFtZXNwYWNlQDo6TG9nU2luayo+KHNpbmspLCBmYWxzZSkuc3RyZWFtKCkKLQotLy8gSWYgYSBu
b24tTlVMTCBzdHJpbmcgcG9pbnRlciBpcyBnaXZlbiwgd2Ugd3JpdGUgdGhpcyBtZXNzYWdlIHRv
IHRoYXQgc3RyaW5nLgotLy8gV2UgdGhlbiBkbyBub3JtYWwgTE9HKHNldmVyaXR5KSBsb2dnaW5n
IGFzIHdlbGwuCi0vLyBUaGlzIGlzIHVzZWZ1bCBmb3IgY2FwdHVyaW5nIG1lc3NhZ2VzIGFuZCBz
dG9yaW5nIHRoZW0gc29tZXdoZXJlIG1vcmUKLS8vIHNwZWNpZmljIHRoYW4gdGhlIGdsb2JhbCBs
b2cgb2YgdGhlIHByb2Nlc3MuCi0vLyBBcmd1bWVudCB0eXBlczoKLS8vICAgc3RyaW5nKiBtZXNz
YWdlOwotLy8gICBMb2dTZXZlcml0eSBzZXZlcml0eTsKLS8vIFRoZSBjYXN0IGlzIHRvIGRpc2Ft
YmlndWF0ZSBOVUxMIGFyZ3VtZW50cy4KLS8vIE5PVEU6IExPRyhzZXZlcml0eSkgZXhwYW5kcyB0
byBMb2dNZXNzYWdlKCkuc3RyZWFtKCkgZm9yIHRoZSBzcGVjaWZpZWQKLS8vIHNldmVyaXR5Lgot
I2RlZmluZSBMT0dfVE9fU1RSSU5HKHNldmVyaXR5LCBtZXNzYWdlKSBcCi0gIExPR19UT19TVFJJ
TkdfIyNzZXZlcml0eShzdGF0aWNfY2FzdDxzdHJpbmcqPihtZXNzYWdlKSkuc3RyZWFtKCkKLQot
Ly8gSWYgYSBub24tTlVMTCBwb2ludGVyIGlzIGdpdmVuLCB3ZSBwdXNoIHRoZSBtZXNzYWdlIG9u
dG8gdGhlIGVuZAotLy8gb2YgYSB2ZWN0b3Igb2Ygc3RyaW5nczsgb3RoZXJ3aXNlLCB3ZSByZXBv
cnQgaXQgd2l0aCBMT0coc2V2ZXJpdHkpLgotLy8gVGhpcyBpcyBoYW5keSBmb3IgY2FwdHVyaW5n
IG1lc3NhZ2VzIGFuZCBwZXJoYXBzIHBhc3NpbmcgdGhlbSBiYWNrCi0vLyB0byB0aGUgY2FsbGVy
LCByYXRoZXIgdGhhbiByZXBvcnRpbmcgdGhlbSBpbW1lZGlhdGVseS4KLS8vIEFyZ3VtZW50IHR5
cGVzOgotLy8gICBMb2dTZXZlcml0eSBzZXZlcml0eTsKLS8vICAgdmVjdG9yPHN0cmluZz4gKm91
dHZlYzsKLS8vIFRoZSBjYXN0IGlzIHRvIGRpc2FtYmlndWF0ZSBOVUxMIGFyZ3VtZW50cy4KLSNk
ZWZpbmUgTE9HX1NUUklORyhzZXZlcml0eSwgb3V0dmVjKSBcCi0gIExPR19UT19TVFJJTkdfIyNz
ZXZlcml0eShzdGF0aWNfY2FzdDxzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qPihvdXR2ZWMpKS5z
dHJlYW0oKQotCi0jZGVmaW5lIExPR19JRihzZXZlcml0eSwgY29uZGl0aW9uKSBcCi0gICEoY29u
ZGl0aW9uKSA/ICh2b2lkKSAwIDogQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpMb2dNZXNzYWdlVm9p
ZGlmeSgpICYgTE9HKHNldmVyaXR5KQotI2RlZmluZSBTWVNMT0dfSUYoc2V2ZXJpdHksIGNvbmRp
dGlvbikgXAotICAhKGNvbmRpdGlvbikgPyAodm9pZCkgMCA6IEBhY19nb29nbGVfbmFtZXNwYWNl
QDo6TG9nTWVzc2FnZVZvaWRpZnkoKSAmIFNZU0xPRyhzZXZlcml0eSkKLQotI2RlZmluZSBMT0df
QVNTRVJUKGNvbmRpdGlvbikgIFwKLSAgTE9HX0lGKEZBVEFMLCAhKGNvbmRpdGlvbikpIDw8ICJB
c3NlcnQgZmFpbGVkOiAiICNjb25kaXRpb24KLSNkZWZpbmUgU1lTTE9HX0FTU0VSVChjb25kaXRp
b24pIFwKLSAgU1lTTE9HX0lGKEZBVEFMLCAhKGNvbmRpdGlvbikpIDw8ICJBc3NlcnQgZmFpbGVk
OiAiICNjb25kaXRpb24KLQotLy8gQ0hFQ0sgZGllcyB3aXRoIGEgZmF0YWwgZXJyb3IgaWYgY29u
ZGl0aW9uIGlzIG5vdCB0cnVlLiAgSXQgaXMgKm5vdCoKLS8vIGNvbnRyb2xsZWQgYnkgRENIRUNL
X0lTX09OKCksIHNvIHRoZSBjaGVjayB3aWxsIGJlIGV4ZWN1dGVkIHJlZ2FyZGxlc3Mgb2YKLS8v
IGNvbXBpbGF0aW9uIG1vZGUuICBUaGVyZWZvcmUsIGl0IGlzIHNhZmUgdG8gZG8gdGhpbmdzIGxp
a2U6Ci0vLyAgICBDSEVDSyhmcC0+V3JpdGUoeCkgPT0gNCkKLSNkZWZpbmUgQ0hFQ0soY29uZGl0
aW9uKSAgXAotICAgICAgTE9HX0lGKEZBVEFMLCBHT09HTEVfUFJFRElDVF9CUkFOQ0hfTk9UX1RB
S0VOKCEoY29uZGl0aW9uKSkpIFwKLSAgICAgICAgICAgICA8PCAiQ2hlY2sgZmFpbGVkOiAiICNj
b25kaXRpb24gIiAiCi0KLS8vIEEgY29udGFpbmVyIGZvciBhIHN0cmluZyBwb2ludGVyIHdoaWNo
IGNhbiBiZSBldmFsdWF0ZWQgdG8gYSBib29sIC0KLS8vIHRydWUgaWZmIHRoZSBwb2ludGVyIGlz
IE5VTEwuCi1zdHJ1Y3QgQ2hlY2tPcFN0cmluZyB7Ci0gIENoZWNrT3BTdHJpbmcoc3RkOjpzdHJp
bmcqIHN0cikgOiBzdHJfKHN0cikgeyB9Ci0gIC8vIE5vIGRlc3RydWN0b3I6IGlmIHN0cl8gaXMg
bm9uLU5VTEwsIHdlJ3JlIGFib3V0IHRvIExPRyhGQVRBTCksCi0gIC8vIHNvIHRoZXJlJ3Mgbm8g
cG9pbnQgaW4gY2xlYW5pbmcgdXAgc3RyXy4KLSAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsKLSAg
ICByZXR1cm4gR09PR0xFX1BSRURJQ1RfQlJBTkNIX05PVF9UQUtFTihzdHJfICE9IE5VTEwpOwot
ICB9Ci0gIHN0ZDo6c3RyaW5nKiBzdHJfOwotfTsKLQotLy8gRnVuY3Rpb24gaXMgb3ZlcmxvYWRl
ZCBmb3IgaW50ZWdyYWwgdHlwZXMgdG8gYWxsb3cgc3RhdGljIGNvbnN0Ci0vLyBpbnRlZ3JhbHMg
ZGVjbGFyZWQgaW4gY2xhc3NlcyBhbmQgbm90IGRlZmluZWQgdG8gYmUgdXNlZCBhcyBhcmd1bWVu
dHMgdG8KLS8vIENIRUNLKiBtYWNyb3MuIEl0J3Mgbm90IGVuY291cmFnZWQgdGhvdWdoLgotdGVt
cGxhdGUgPGNsYXNzIFQ+Ci1pbmxpbmUgY29uc3QgVCYgICAgICAgR2V0UmVmZXJlbmNlYWJsZVZh
bHVlKGNvbnN0IFQmICAgICAgICAgICB0KSB7IHJldHVybiB0OyB9Ci1pbmxpbmUgY2hhciAgICAg
ICAgICAgR2V0UmVmZXJlbmNlYWJsZVZhbHVlKGNoYXIgICAgICAgICAgICAgICB0KSB7IHJldHVy
biB0OyB9Ci1pbmxpbmUgdW5zaWduZWQgY2hhciAgR2V0UmVmZXJlbmNlYWJsZVZhbHVlKHVuc2ln
bmVkIGNoYXIgICAgICB0KSB7IHJldHVybiB0OyB9Ci1pbmxpbmUgc2lnbmVkIGNoYXIgICAgR2V0
UmVmZXJlbmNlYWJsZVZhbHVlKHNpZ25lZCBjaGFyICAgICAgICB0KSB7IHJldHVybiB0OyB9Ci1p
bmxpbmUgc2hvcnQgICAgICAgICAgR2V0UmVmZXJlbmNlYWJsZVZhbHVlKHNob3J0ICAgICAgICAg
ICAgICB0KSB7IHJldHVybiB0OyB9Ci1pbmxpbmUgdW5zaWduZWQgc2hvcnQgR2V0UmVmZXJlbmNl
YWJsZVZhbHVlKHVuc2lnbmVkIHNob3J0ICAgICB0KSB7IHJldHVybiB0OyB9Ci1pbmxpbmUgaW50
ICAgICAgICAgICAgR2V0UmVmZXJlbmNlYWJsZVZhbHVlKGludCAgICAgICAgICAgICAgICB0KSB7
IHJldHVybiB0OyB9Ci1pbmxpbmUgdW5zaWduZWQgaW50ICAgR2V0UmVmZXJlbmNlYWJsZVZhbHVl
KHVuc2lnbmVkIGludCAgICAgICB0KSB7IHJldHVybiB0OyB9Ci1pbmxpbmUgbG9uZyAgICAgICAg
ICAgR2V0UmVmZXJlbmNlYWJsZVZhbHVlKGxvbmcgICAgICAgICAgICAgICB0KSB7IHJldHVybiB0
OyB9Ci1pbmxpbmUgdW5zaWduZWQgbG9uZyAgR2V0UmVmZXJlbmNlYWJsZVZhbHVlKHVuc2lnbmVk
IGxvbmcgICAgICB0KSB7IHJldHVybiB0OyB9Ci1pbmxpbmUgbG9uZyBsb25nICAgICAgR2V0UmVm
ZXJlbmNlYWJsZVZhbHVlKGxvbmcgbG9uZyAgICAgICAgICB0KSB7IHJldHVybiB0OyB9Ci1pbmxp
bmUgdW5zaWduZWQgbG9uZyBsb25nIEdldFJlZmVyZW5jZWFibGVWYWx1ZSh1bnNpZ25lZCBsb25n
IGxvbmcgdCkgewotICByZXR1cm4gdDsKLX0KLQotLy8gVGhpcyBpcyBhIGR1bW15IGNsYXNzIHRv
IGRlZmluZSB0aGUgZm9sbG93aW5nIG9wZXJhdG9yLgotc3RydWN0IER1bW15Q2xhc3NUb0RlZmlu
ZU9wZXJhdG9yIHt9OwotCi1AYWNfZ29vZ2xlX2VuZF9uYW1lc3BhY2VACi0KLS8vIERlZmluZSBn
bG9iYWwgb3BlcmF0b3I8PCB0byBkZWNsYXJlIHVzaW5nIDo6b3BlcmF0b3I8PC4KLS8vIFRoaXMg
ZGVjbGFyYXRpb24gd2lsbCBhbGxvdyB1c2UgdG8gdXNlIENIRUNLIG1hY3JvcyBmb3IgdXNlcgot
Ly8gZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGhhdmUgb3BlcmF0b3I8PCAoZS5nLiwgc3RsX2xvZ2dp
bmcuaCkuCi1pbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KAotICAgIHN0ZDo6b3N0cmVh
bSYgb3V0LCBjb25zdCBnb29nbGU6OkR1bW15Q2xhc3NUb0RlZmluZU9wZXJhdG9yJikgewotICBy
ZXR1cm4gb3V0OwotfQotCi1AYWNfZ29vZ2xlX3N0YXJ0X25hbWVzcGFjZUAKLQotLy8gVGhpcyBm
b3JtYXRzIGEgdmFsdWUgZm9yIGEgZmFpbGluZyBDSEVDS19YWCBzdGF0ZW1lbnQuICBPcmRpbmFy
aWx5LAotLy8gaXQgdXNlcyB0aGUgZGVmaW5pdGlvbiBmb3Igb3BlcmF0b3I8PCwgd2l0aCBhIGZl
dyBzcGVjaWFsIGNhc2VzIGJlbG93LgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdm9p
ZCBNYWtlQ2hlY2tPcFZhbHVlU3RyaW5nKHN0ZDo6b3N0cmVhbSogb3MsIGNvbnN0IFQmIHYpIHsK
LSAgKCpvcykgPDwgdjsKLX0KLQotLy8gT3ZlcnJpZGVzIGZvciBjaGFyIHR5cGVzIHByb3ZpZGUg
cmVhZGFibGUgdmFsdWVzIGZvciB1bnByaW50YWJsZQotLy8gY2hhcmFjdGVycy4KLXRlbXBsYXRl
IDw+IEdPT0dMRV9HTE9HX0RMTF9ERUNMCi12b2lkIE1ha2VDaGVja09wVmFsdWVTdHJpbmcoc3Rk
Ojpvc3RyZWFtKiBvcywgY29uc3QgY2hhciYgdik7Ci10ZW1wbGF0ZSA8PiBHT09HTEVfR0xPR19E
TExfREVDTAotdm9pZCBNYWtlQ2hlY2tPcFZhbHVlU3RyaW5nKHN0ZDo6b3N0cmVhbSogb3MsIGNv
bnN0IHNpZ25lZCBjaGFyJiB2KTsKLXRlbXBsYXRlIDw+IEdPT0dMRV9HTE9HX0RMTF9ERUNMCi12
b2lkIE1ha2VDaGVja09wVmFsdWVTdHJpbmcoc3RkOjpvc3RyZWFtKiBvcywgY29uc3QgdW5zaWdu
ZWQgY2hhciYgdik7Ci0KLS8vIEJ1aWxkIHRoZSBlcnJvciBtZXNzYWdlIHN0cmluZy4gU3BlY2lm
eSBubyBpbmxpbmluZyBmb3IgY29kZSBzaXplLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBl
bmFtZSBUMj4KLXN0ZDo6c3RyaW5nKiBNYWtlQ2hlY2tPcFN0cmluZyhjb25zdCBUMSYgdjEsIGNv
bnN0IFQyJiB2MiwgY29uc3QgY2hhciogZXhwcnRleHQpCi0gICAgQGFjX2N2X19fYXR0cmlidXRl
X19fbm9pbmxpbmVAOwotCi1uYW1lc3BhY2UgYmFzZSB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewot
Ci0vLyBJZiAicyIgaXMgbGVzcyB0aGFuIGJhc2VfbG9nZ2luZzo6SU5GTywgcmV0dXJucyBiYXNl
X2xvZ2dpbmc6OklORk8uCi0vLyBJZiAicyIgaXMgZ3JlYXRlciB0aGFuIGJhc2VfbG9nZ2luZzo6
RkFUQUwsIHJldHVybnMKLS8vIGJhc2VfbG9nZ2luZzo6RVJST1IuICBPdGhlcndpc2UsIHJldHVy
bnMgInMiLgotTG9nU2V2ZXJpdHkgTm9ybWFsaXplU2V2ZXJpdHkoTG9nU2V2ZXJpdHkgcyk7Ci0K
LX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotCi0vLyBBIGhlbHBlciBjbGFzcyBmb3IgZm9ybWF0
dGluZyAiZXhwciAoVjEgdnMuIFYyKSIgaW4gYSBDSEVDS19YWAotLy8gc3RhdGVtZW50LiAgU2Vl
IE1ha2VDaGVja09wU3RyaW5nIGZvciBzYW1wbGUgdXNhZ2UuICBPdGhlcgotLy8gYXBwcm9hY2hl
cyB3ZXJlIGNvbnNpZGVyZWQ6IHVzZSBvZiBhIHRlbXBsYXRlIG1ldGhvZCAoZS5nLiwKLS8vIGJh
c2U6OkJ1aWxkQ2hlY2tPcFN0cmluZyhleHBydGV4dCwgYmFzZTo6UHJpbnQ8VDE+LCAmdjEsCi0v
LyBiYXNlOjpQcmludDxUMj4sICZ2MiksIGhvd2V2ZXIgdGhpcyBhcHByb2FjaCBoYXMgY29tcGxp
Y2F0aW9ucwotLy8gcmVsYXRlZCB0byB2b2xhdGlsZSBhcmd1bWVudHMgYW5kIGZ1bmN0aW9uLXBv
aW50ZXIgYXJndW1lbnRzKS4KLWNsYXNzIEdPT0dMRV9HTE9HX0RMTF9ERUNMIENoZWNrT3BNZXNz
YWdlQnVpbGRlciB7Ci0gcHVibGljOgotICAvLyBJbnNlcnRzICJleHBydGV4dCIgYW5kICIgKCIg
dG8gdGhlIHN0cmVhbS4KLSAgZXhwbGljaXQgQ2hlY2tPcE1lc3NhZ2VCdWlsZGVyKGNvbnN0IGNo
YXIgKmV4cHJ0ZXh0KTsKLSAgLy8gRGVsZXRlcyAic3RyZWFtXyIuCi0gIH5DaGVja09wTWVzc2Fn
ZUJ1aWxkZXIoKTsKLSAgLy8gRm9yIGluc2VydGluZyB0aGUgZmlyc3QgdmFyaWFibGUuCi0gIHN0
ZDo6b3N0cmVhbSogRm9yVmFyMSgpIHsgcmV0dXJuIHN0cmVhbV87IH0KLSAgLy8gRm9yIGluc2Vy
dGluZyB0aGUgc2Vjb25kIHZhcmlhYmxlIChhZGRzIGFuIGludGVybWVkaWF0ZSAiIHZzLiAiKS4K
LSAgc3RkOjpvc3RyZWFtKiBGb3JWYXIyKCk7Ci0gIC8vIEdldCB0aGUgcmVzdWx0IChpbnNlcnRz
IHRoZSBjbG9zaW5nICIpIikuCi0gIHN0ZDo6c3RyaW5nKiBOZXdTdHJpbmcoKTsKLQotIHByaXZh
dGU6Ci0gIHN0ZDo6b3N0cmluZ3N0cmVhbSAqc3RyZWFtXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFj
ZSBiYXNlCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+Ci1zdGQ6OnN0cmlu
ZyogTWFrZUNoZWNrT3BTdHJpbmcoY29uc3QgVDEmIHYxLCBjb25zdCBUMiYgdjIsIGNvbnN0IGNo
YXIqIGV4cHJ0ZXh0KSB7Ci0gIGJhc2U6OkNoZWNrT3BNZXNzYWdlQnVpbGRlciBjb21iKGV4cHJ0
ZXh0KTsKLSAgTWFrZUNoZWNrT3BWYWx1ZVN0cmluZyhjb21iLkZvclZhcjEoKSwgdjEpOwotICBN
YWtlQ2hlY2tPcFZhbHVlU3RyaW5nKGNvbWIuRm9yVmFyMigpLCB2Mik7Ci0gIHJldHVybiBjb21i
Lk5ld1N0cmluZygpOwotfQotCi0vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBDSEVDS19PUCBtYWNy
by4KLS8vIFRoZSAoaW50LCBpbnQpIHNwZWNpYWxpemF0aW9uIHdvcmtzIGFyb3VuZCB0aGUgaXNz
dWUgdGhhdCB0aGUgY29tcGlsZXIKLS8vIHdpbGwgbm90IGluc3RhbnRpYXRlIHRoZSB0ZW1wbGF0
ZSB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBvbiB2YWx1ZXMgb2YKLS8vIHVubmFtZWQgZW51bSB0
eXBlIC0gc2VlIGNvbW1lbnQgYmVsb3cuCi0jZGVmaW5lIERFRklORV9DSEVDS19PUF9JTVBMKG5h
bWUsIG9wKSBcCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+IFwKLSAgaW5s
aW5lIHN0ZDo6c3RyaW5nKiBuYW1lIyNJbXBsKGNvbnN0IFQxJiB2MSwgY29uc3QgVDImIHYyLCAg
ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXhwcnRleHQpIHsg
XAotICAgIGlmIChHT09HTEVfUFJFRElDVF9UUlVFKHYxIG9wIHYyKSkgcmV0dXJuIE5VTEw7IFwK
LSAgICBlbHNlIHJldHVybiBNYWtlQ2hlY2tPcFN0cmluZyh2MSwgdjIsIGV4cHJ0ZXh0KTsgXAot
ICB9IFwKLSAgaW5saW5lIHN0ZDo6c3RyaW5nKiBuYW1lIyNJbXBsKGludCB2MSwgaW50IHYyLCBj
b25zdCBjaGFyKiBleHBydGV4dCkgeyBcCi0gICAgcmV0dXJuIG5hbWUjI0ltcGw8aW50LCBpbnQ+
KHYxLCB2MiwgZXhwcnRleHQpOyBcCi0gIH0KLQotLy8gV2UgdXNlIHRoZSBmdWxsIG5hbWUgQ2hl
Y2tfRVEsIENoZWNrX05FLCBldGMuIGluIGNhc2UgdGhlIGZpbGUgaW5jbHVkaW5nCi0vLyBiYXNl
L2xvZ2dpbmcuaCBwcm92aWRlcyBpdHMgb3duICNkZWZpbmVzIGZvciB0aGUgc2ltcGxlciBuYW1l
cyBFUSwgTkUsIGV0Yy4KLS8vIFRoaXMgaGFwcGVucyBpZiwgZm9yIGV4YW1wbGUsIHRob3NlIGFy
ZSB1c2VkIGFzIHRva2VuIG5hbWVzIGluIGEKLS8vIHlhY2MgZ3JhbW1hci4KLURFRklORV9DSEVD
S19PUF9JTVBMKENoZWNrX0VRLCA9PSkgIC8vIENvbXBpbGF0aW9uIGVycm9yIHdpdGggQ0hFQ0tf
RVEoTlVMTCwgeCk/Ci1ERUZJTkVfQ0hFQ0tfT1BfSU1QTChDaGVja19ORSwgIT0pICAvLyBVc2Ug
Q0hFQ0soeCA9PSBOVUxMKSBpbnN0ZWFkLgotREVGSU5FX0NIRUNLX09QX0lNUEwoQ2hlY2tfTEUs
IDw9KQotREVGSU5FX0NIRUNLX09QX0lNUEwoQ2hlY2tfTFQsIDwgKQotREVGSU5FX0NIRUNLX09Q
X0lNUEwoQ2hlY2tfR0UsID49KQotREVGSU5FX0NIRUNLX09QX0lNUEwoQ2hlY2tfR1QsID4gKQot
I3VuZGVmIERFRklORV9DSEVDS19PUF9JTVBMCi0KLS8vIEhlbHBlciBtYWNybyBmb3IgYmluYXJ5
IG9wZXJhdG9ycy4KLS8vIERvbid0IHVzZSB0aGlzIG1hY3JvIGRpcmVjdGx5IGluIHlvdXIgY29k
ZSwgdXNlIENIRUNLX0VRIGV0IGFsIGJlbG93LgotCi0jaWYgZGVmaW5lZChTVEFUSUNfQU5BTFlT
SVMpCi0vLyBPbmx5IGZvciBzdGF0aWMgYW5hbHlzaXMgdG9vbCB0byBrbm93IHRoYXQgaXQgaXMg
ZXF1aXZhbGVudCB0byBhc3NlcnQKLSNkZWZpbmUgQ0hFQ0tfT1BfTE9HKG5hbWUsIG9wLCB2YWwx
LCB2YWwyLCBsb2cpIENIRUNLKCh2YWwxKSBvcCAodmFsMikpCi0jZWxpZiBEQ0hFQ0tfSVNfT04o
KQotLy8gSW4gZGVidWcgbW9kZSwgYXZvaWQgY29uc3RydWN0aW5nIENoZWNrT3BTdHJpbmdzIGlm
IHBvc3NpYmxlLAotLy8gdG8gcmVkdWNlIHRoZSBvdmVyaGVhZCBvZiBDSEVDSyBzdGF0bWVudHMg
YnkgMnguCi0vLyBSZWFsIERDSEVDSy1oZWF2eSB0ZXN0cyBoYXZlIHNlZW4gMS41eCBzcGVlZHVw
cy4KLQotLy8gVGhlIG1lYW5pbmcgb2YgInN0cmluZyIgbWlnaHQgYmUgZGlmZmVyZW50IGJldHdl
ZW4gbm93IGFuZAotLy8gd2hlbiB0aGlzIG1hY3JvIGdldHMgaW52b2tlZCAoZS5nLiwgaWYgc29t
ZW9uZSBpcyBleHBlcmltZW50aW5nCi0vLyB3aXRoIG90aGVyIHN0cmluZyBpbXBsZW1lbnRhdGlv
bnMgdGhhdCBnZXQgZGVmaW5lZCBhZnRlciB0aGlzCi0vLyBmaWxlIGlzIGluY2x1ZGVkKS4gIFNh
dmUgdGhlIGN1cnJlbnQgbWVhbmluZyBub3cgYW5kIHVzZSBpdAotLy8gaW4gdGhlIG1hY3JvLgot
dHlwZWRlZiBzdGQ6OnN0cmluZyBfQ2hlY2tfc3RyaW5nOwotI2RlZmluZSBDSEVDS19PUF9MT0co
bmFtZSwgb3AsIHZhbDEsIHZhbDIsIGxvZykgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB3
aGlsZSAoQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpfQ2hlY2tfc3RyaW5nKiBfcmVzdWx0ID0gICAg
ICAgICAgICAgICAgXAotICAgICAgICAgQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpDaGVjayMjbmFt
ZSMjSW1wbCggICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgIEBhY19nb29nbGVf
bmFtZXNwYWNlQDo6R2V0UmVmZXJlbmNlYWJsZVZhbHVlKHZhbDEpLCAgICAgICAgXAotICAgICAg
ICAgICAgIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6R2V0UmVmZXJlbmNlYWJsZVZhbHVlKHZhbDIp
LCAgICAgICAgXAotICAgICAgICAgICAgICN2YWwxICIgIiAjb3AgIiAiICN2YWwyKSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGxvZyhfX0ZJTEVfXywgX19MSU5FX18s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBA
YWNfZ29vZ2xlX25hbWVzcGFjZUA6OkNoZWNrT3BTdHJpbmcoX3Jlc3VsdCkpLnN0cmVhbSgpCi0j
ZWxzZQotLy8gSW4gb3B0aW1pemVkIG1vZGUsIHVzZSBDaGVja09wU3RyaW5nIHRvIGhpbnQgdG8g
Y29tcGlsZXIgdGhhdAotLy8gdGhlIHdoaWxlIGNvbmRpdGlvbiBpcyB1bmxpa2VseS4KLSNkZWZp
bmUgQ0hFQ0tfT1BfTE9HKG5hbWUsIG9wLCB2YWwxLCB2YWwyLCBsb2cpICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgd2hpbGUgKEBhY19nb29nbGVfbmFtZXNwYWNlQDo6Q2hlY2tPcFN0cmlu
ZyBfcmVzdWx0ID0gICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIEBhY19nb29nbGVfbmFtZXNw
YWNlQDo6Q2hlY2sjI25hbWUjI0ltcGwoICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkdldFJlZmVyZW5jZWFibGVWYWx1ZSh2YWwxKSwg
ICAgICAgIFwKLSAgICAgICAgICAgICBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkdldFJlZmVyZW5j
ZWFibGVWYWx1ZSh2YWwyKSwgICAgICAgIFwKLSAgICAgICAgICAgICAjdmFsMSAiICIgI29wICIg
IiAjdmFsMikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBsb2coX19G
SUxFX18sIF9fTElORV9fLCBfcmVzdWx0KS5zdHJlYW0oKQotI2VuZGlmICAvLyBTVEFUSUNfQU5B
TFlTSVMsIERDSEVDS19JU19PTigpCi0KLSNpZiBHT09HTEVfU1RSSVBfTE9HIDw9IDMKLSNkZWZp
bmUgQ0hFQ0tfT1AobmFtZSwgb3AsIHZhbDEsIHZhbDIpIFwKLSAgQ0hFQ0tfT1BfTE9HKG5hbWUs
IG9wLCB2YWwxLCB2YWwyLCBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkxvZ01lc3NhZ2VGYXRhbCkK
LSNlbHNlCi0jZGVmaW5lIENIRUNLX09QKG5hbWUsIG9wLCB2YWwxLCB2YWwyKSBcCi0gIENIRUNL
X09QX0xPRyhuYW1lLCBvcCwgdmFsMSwgdmFsMiwgQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpOdWxs
U3RyZWFtRmF0YWwpCi0jZW5kaWYgLy8gU1RSSVBfTE9HIDw9IDMKLQotLy8gRXF1YWxpdHkvSW5l
cXVhbGl0eSBjaGVja3MgLSBjb21wYXJlIHR3byB2YWx1ZXMsIGFuZCBsb2cgYSBGQVRBTCBtZXNz
YWdlCi0vLyBpbmNsdWRpbmcgdGhlIHR3byB2YWx1ZXMgd2hlbiB0aGUgcmVzdWx0IGlzIG5vdCBh
cyBleHBlY3RlZC4gIFRoZSB2YWx1ZXMKLS8vIG11c3QgaGF2ZSBvcGVyYXRvcjw8KG9zdHJlYW0s
IC4uLikgZGVmaW5lZC4KLS8vCi0vLyBZb3UgbWF5IGFwcGVuZCB0byB0aGUgZXJyb3IgbWVzc2Fn
ZSBsaWtlIHNvOgotLy8gICBDSEVDS19ORSgxLCAyKSA8PCAiOiBUaGUgd29ybGQgbXVzdCBiZSBl
bmRpbmchIjsKLS8vCi0vLyBXZSBhcmUgdmVyeSBjYXJlZnVsIHRvIGVuc3VyZSB0aGF0IGVhY2gg
YXJndW1lbnQgaXMgZXZhbHVhdGVkIGV4YWN0bHkKLS8vIG9uY2UsIGFuZCB0aGF0IGFueXRoaW5n
IHdoaWNoIGlzIGxlZ2FsIHRvIHBhc3MgYXMgYSBmdW5jdGlvbiBhcmd1bWVudCBpcwotLy8gbGVn
YWwgaGVyZS4gIEluIHBhcnRpY3VsYXIsIHRoZSBhcmd1bWVudHMgbWF5IGJlIHRlbXBvcmFyeSBl
eHByZXNzaW9ucwotLy8gd2hpY2ggd2lsbCBlbmQgdXAgYmVpbmcgZGVzdHJveWVkIGF0IHRoZSBl
bmQgb2YgdGhlIGFwcGFyZW50IHN0YXRlbWVudCwKLS8vIGZvciBleGFtcGxlOgotLy8gICBDSEVD
S19FUShzdHJpbmcoImFiYyIpWzFdLCAnYicpOwotLy8KLS8vIFdBUk5JTkc6IFRoZXNlIGRvbid0
IGNvbXBpbGUgY29ycmVjdGx5IGlmIG9uZSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgcG9pbnRlcgot
Ly8gYW5kIHRoZSBvdGhlciBpcyBOVUxMLiBUbyB3b3JrIGFyb3VuZCB0aGlzLCBzaW1wbHkgc3Rh
dGljX2Nhc3QgTlVMTCB0byB0aGUKLS8vIHR5cGUgb2YgdGhlIGRlc2lyZWQgcG9pbnRlci4KLQot
I2RlZmluZSBDSEVDS19FUSh2YWwxLCB2YWwyKSBDSEVDS19PUChfRVEsID09LCB2YWwxLCB2YWwy
KQotI2RlZmluZSBDSEVDS19ORSh2YWwxLCB2YWwyKSBDSEVDS19PUChfTkUsICE9LCB2YWwxLCB2
YWwyKQotI2RlZmluZSBDSEVDS19MRSh2YWwxLCB2YWwyKSBDSEVDS19PUChfTEUsIDw9LCB2YWwx
LCB2YWwyKQotI2RlZmluZSBDSEVDS19MVCh2YWwxLCB2YWwyKSBDSEVDS19PUChfTFQsIDwgLCB2
YWwxLCB2YWwyKQotI2RlZmluZSBDSEVDS19HRSh2YWwxLCB2YWwyKSBDSEVDS19PUChfR0UsID49
LCB2YWwxLCB2YWwyKQotI2RlZmluZSBDSEVDS19HVCh2YWwxLCB2YWwyKSBDSEVDS19PUChfR1Qs
ID4gLCB2YWwxLCB2YWwyKQotCi0vLyBDaGVjayB0aGF0IHRoZSBpbnB1dCBpcyBub24gTlVMTC4g
IFRoaXMgdmVyeSB1c2VmdWwgaW4gY29uc3RydWN0b3IKLS8vIGluaXRpYWxpemVyIGxpc3RzLgot
Ci0jZGVmaW5lIENIRUNLX05PVE5VTEwodmFsKSBcCi0gIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6
Q2hlY2tOb3ROdWxsKF9fRklMRV9fLCBfX0xJTkVfXywgIiciICN2YWwgIicgTXVzdCBiZSBub24g
TlVMTCIsICh2YWwpKQotCi0vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBzdHJpbmcgY29tcGFyaXNv
bnMuCi0vLyBUbyBhdm9pZCBibG9hdCwgdGhlIGRlZmluaXRpb25zIGFyZSBpbiBsb2dnaW5nLmNj
LgotI2RlZmluZSBERUNMQVJFX0NIRUNLX1NUUk9QX0lNUEwoZnVuYywgZXhwZWN0ZWQpIFwKLSAg
R09PR0xFX0dMT0dfRExMX0RFQ0wgc3RkOjpzdHJpbmcqIENoZWNrIyNmdW5jIyNleHBlY3RlZCMj
SW1wbCggXAotICAgICAgY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBjb25zdCBjaGFy
KiBuYW1lcyk7Ci1ERUNMQVJFX0NIRUNLX1NUUk9QX0lNUEwoc3RyY21wLCB0cnVlKQotREVDTEFS
RV9DSEVDS19TVFJPUF9JTVBMKHN0cmNtcCwgZmFsc2UpCi1ERUNMQVJFX0NIRUNLX1NUUk9QX0lN
UEwoc3RyY2FzZWNtcCwgdHJ1ZSkKLURFQ0xBUkVfQ0hFQ0tfU1RST1BfSU1QTChzdHJjYXNlY21w
LCBmYWxzZSkKLSN1bmRlZiBERUNMQVJFX0NIRUNLX1NUUk9QX0lNUEwKLQotLy8gSGVscGVyIG1h
Y3JvIGZvciBzdHJpbmcgY29tcGFyaXNvbnMuCi0vLyBEb24ndCB1c2UgdGhpcyBtYWNybyBkaXJl
Y3RseSBpbiB5b3VyIGNvZGUsIHVzZSBDSEVDS19TVFJFUSBldCBhbCBiZWxvdy4KLSNkZWZpbmUg
Q0hFQ0tfU1RST1AoZnVuYywgb3AsIGV4cGVjdGVkLCBzMSwgczIpIFwKLSAgd2hpbGUgKEBhY19n
b29nbGVfbmFtZXNwYWNlQDo6Q2hlY2tPcFN0cmluZyBfcmVzdWx0ID0gXAotICAgICAgICAgQGFj
X2dvb2dsZV9uYW1lc3BhY2VAOjpDaGVjayMjZnVuYyMjZXhwZWN0ZWQjI0ltcGwoKHMxKSwgKHMy
KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzMSAiICIgI29wICIg
IiAjczIpKSBcCi0gICAgTE9HKEZBVEFMKSA8PCAqX3Jlc3VsdC5zdHJfCi0KLQotLy8gU3RyaW5n
IChjaGFyKikgZXF1YWxpdHkvaW5lcXVhbGl0eSBjaGVja3MuCi0vLyBDQVNFIHZlcnNpb25zIGFy
ZSBjYXNlLWluc2Vuc2l0aXZlLgotLy8KLS8vIE5vdGUgdGhhdCAiczEiIGFuZCAiczIiIG1heSBi
ZSB0ZW1wb3Jhcnkgc3RyaW5ncyB3aGljaCBhcmUgZGVzdHJveWVkCi0vLyBieSB0aGUgY29tcGls
ZXIgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCAiZnVsbCBleHByZXNzaW9uIgotLy8gKGUuZy4g
Q0hFQ0tfU1RSRVEoRm9vKCkuY19zdHIoKSwgQmFyKCkuY19zdHIoKSkpLgotCi0jZGVmaW5lIENI
RUNLX1NUUkVRKHMxLCBzMikgQ0hFQ0tfU1RST1Aoc3RyY21wLCA9PSwgdHJ1ZSwgczEsIHMyKQot
I2RlZmluZSBDSEVDS19TVFJORShzMSwgczIpIENIRUNLX1NUUk9QKHN0cmNtcCwgIT0sIGZhbHNl
LCBzMSwgczIpCi0jZGVmaW5lIENIRUNLX1NUUkNBU0VFUShzMSwgczIpIENIRUNLX1NUUk9QKHN0
cmNhc2VjbXAsID09LCB0cnVlLCBzMSwgczIpCi0jZGVmaW5lIENIRUNLX1NUUkNBU0VORShzMSwg
czIpIENIRUNLX1NUUk9QKHN0cmNhc2VjbXAsICE9LCBmYWxzZSwgczEsIHMyKQotCi0jZGVmaW5l
IENIRUNLX0lOREVYKEksQSkgQ0hFQ0soSSA8IChzaXplb2YoQSkvc2l6ZW9mKEFbMF0pKSkKLSNk
ZWZpbmUgQ0hFQ0tfQk9VTkQoQixBKSBDSEVDSyhCIDw9IChzaXplb2YoQSkvc2l6ZW9mKEFbMF0p
KSkKLQotI2RlZmluZSBDSEVDS19ET1VCTEVfRVEodmFsMSwgdmFsMikgICAgICAgICAgICAgIFwK
LSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
Q0hFQ0tfTEUoKHZhbDEpLCAodmFsMikrMC4wMDAwMDAwMDAwMDAwMDFMKTsgXAotICAgIENIRUNL
X0dFKCh2YWwxKSwgKHZhbDIpLTAuMDAwMDAwMDAwMDAwMDAxTCk7IFwKLSAgfSB3aGlsZSAoMCkK
LQotI2RlZmluZSBDSEVDS19ORUFSKHZhbDEsIHZhbDIsIG1hcmdpbikgICAgICAgICAgIFwKLSAg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQ0hF
Q0tfTEUoKHZhbDEpLCAodmFsMikrKG1hcmdpbikpOyAgICAgICAgICAgXAotICAgIENIRUNLX0dF
KCh2YWwxKSwgKHZhbDIpLShtYXJnaW4pKTsgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQot
Ly8gcGVycm9yKCkuLmdvb2dseSBzdHlsZSEKLS8vCi0vLyBQTE9HKCkgYW5kIFBMT0dfSUYoKSBh
bmQgUENIRUNLKCkgYmVoYXZlIGV4YWN0bHkgbGlrZSB0aGVpciBMT0cqIGFuZAotLy8gQ0hFQ0sg
ZXF1aXZhbGVudHMgd2l0aCB0aGUgYWRkaXRpb24gdGhhdCB0aGV5IHBvc3RwZW5kIGEgZGVzY3Jp
cHRpb24KLS8vIG9mIHRoZSBjdXJyZW50IHN0YXRlIG9mIGVycm5vIHRvIHRoZWlyIG91dHB1dCBs
aW5lcy4KLQotI2RlZmluZSBQTE9HKHNldmVyaXR5KSBHT09HTEVfUExPRyhzZXZlcml0eSwgMCku
c3RyZWFtKCkKLQotI2RlZmluZSBHT09HTEVfUExPRyhzZXZlcml0eSwgY291bnRlcikgIFwKLSAg
QGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpFcnJub0xvZ01lc3NhZ2UoIFwKLSAgICAgIF9fRklMRV9f
LCBfX0xJTkVfXywgQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpHTE9HXyAjIyBzZXZlcml0eSwgY291
bnRlciwgXAotICAgICAgJkBhY19nb29nbGVfbmFtZXNwYWNlQDo6TG9nTWVzc2FnZTo6U2VuZFRv
TG9nKQotCi0jZGVmaW5lIFBMT0dfSUYoc2V2ZXJpdHksIGNvbmRpdGlvbikgXAotICAhKGNvbmRp
dGlvbikgPyAodm9pZCkgMCA6IEBhY19nb29nbGVfbmFtZXNwYWNlQDo6TG9nTWVzc2FnZVZvaWRp
ZnkoKSAmIFBMT0coc2V2ZXJpdHkpCi0KLS8vIEEgQ0hFQ0soKSBtYWNybyB0aGF0IHBvc3RwZW5k
cyBlcnJubyBpZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLiBFLmcuCi0vLwotLy8gaWYgKHBvbGwo
ZmRzLCBuZmRzLCB0aW1lb3V0KSA9PSAtMSkgeyBQQ0hFQ0soZXJybm8gPT0gRUlOVFIpOyAuLi4g
fQotI2RlZmluZSBQQ0hFQ0soY29uZGl0aW9uKSAgXAotICAgICAgUExPR19JRihGQVRBTCwgR09P
R0xFX1BSRURJQ1RfQlJBTkNIX05PVF9UQUtFTighKGNvbmRpdGlvbikpKSBcCi0gICAgICAgICAg
ICAgIDw8ICJDaGVjayBmYWlsZWQ6ICIgI2NvbmRpdGlvbiAiICIKLQotLy8gQSBDSEVDSygpIG1h
Y3JvIHRoYXQgbGV0cyB5b3UgYXNzZXJ0IHRoZSBzdWNjZXNzIG9mIGEgZnVuY3Rpb24gdGhhdAot
Ly8gcmV0dXJucyAtMSBhbmQgc2V0cyBlcnJubyBpbiBjYXNlIG9mIGFuIGVycm9yLiBFLmcuCi0v
LwotLy8gQ0hFQ0tfRVJSKG1rZGlyKHBhdGgsIDA3MDApKTsKLS8vCi0vLyBvcgotLy8KLS8vIGlu
dCBmZCA9IG9wZW4oZmlsZW5hbWUsIGZsYWdzKTsgQ0hFQ0tfRVJSKGZkKSA8PCAiOiBvcGVuICIg
PDwgZmlsZW5hbWU7Ci0jZGVmaW5lIENIRUNLX0VSUihpbnZvY2F0aW9uKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLVBMT0dfSUYoRkFUQUwsIEdPT0dMRV9QUkVE
SUNUX0JSQU5DSF9OT1RfVEFLRU4oKGludm9jYXRpb24pID09IC0xKSkgICAgXAotICAgICAgICA8
PCAjaW52b2NhdGlvbgotCi0vLyBVc2UgbWFjcm8gZXhwYW5zaW9uIHRvIGNyZWF0ZSwgZm9yIGVh
Y2ggdXNlIG9mIExPR19FVkVSWV9OKCksIHN0YXRpYwotLy8gdmFyaWFibGVzIHdpdGggdGhlIF9f
TElORV9fIGV4cGFuc2lvbiBhcyBwYXJ0IG9mIHRoZSB2YXJpYWJsZSBuYW1lLgotI2RlZmluZSBM
T0dfRVZFUllfTl9WQVJOQU1FKGJhc2UsIGxpbmUpIExPR19FVkVSWV9OX1ZBUk5BTUVfQ09OQ0FU
KGJhc2UsIGxpbmUpCi0jZGVmaW5lIExPR19FVkVSWV9OX1ZBUk5BTUVfQ09OQ0FUKGJhc2UsIGxp
bmUpIGJhc2UgIyMgbGluZQotCi0jZGVmaW5lIExPR19PQ0NVUlJFTkNFUyBMT0dfRVZFUllfTl9W
QVJOQU1FKG9jY3VycmVuY2VzXywgX19MSU5FX18pCi0jZGVmaW5lIExPR19PQ0NVUlJFTkNFU19N
T0RfTiBMT0dfRVZFUllfTl9WQVJOQU1FKG9jY3VycmVuY2VzX21vZF9uXywgX19MSU5FX18pCi0K
LSNkZWZpbmUgU09NRV9LSU5EX09GX0xPR19FVkVSWV9OKHNldmVyaXR5LCBuLCB3aGF0X3RvX2Rv
KSBcCi0gIHN0YXRpYyBpbnQgTE9HX09DQ1VSUkVOQ0VTID0gMCwgTE9HX09DQ1VSUkVOQ0VTX01P
RF9OID0gMDsgXAotICArK0xPR19PQ0NVUlJFTkNFUzsgXAotICBpZiAoKytMT0dfT0NDVVJSRU5D
RVNfTU9EX04gPiBuKSBMT0dfT0NDVVJSRU5DRVNfTU9EX04gLT0gbjsgXAotICBpZiAoTE9HX09D
Q1VSUkVOQ0VTX01PRF9OID09IDEpIFwKLSAgICBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkxvZ01l
c3NhZ2UoIFwKLSAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBAYWNfZ29vZ2xlX25hbWVzcGFj
ZUA6OkdMT0dfICMjIHNldmVyaXR5LCBMT0dfT0NDVVJSRU5DRVMsIFwKLSAgICAgICAgJndoYXRf
dG9fZG8pLnN0cmVhbSgpCi0KLSNkZWZpbmUgU09NRV9LSU5EX09GX0xPR19JRl9FVkVSWV9OKHNl
dmVyaXR5LCBjb25kaXRpb24sIG4sIHdoYXRfdG9fZG8pIFwKLSAgc3RhdGljIGludCBMT0dfT0ND
VVJSRU5DRVMgPSAwLCBMT0dfT0NDVVJSRU5DRVNfTU9EX04gPSAwOyBcCi0gICsrTE9HX09DQ1VS
UkVOQ0VTOyBcCi0gIGlmIChjb25kaXRpb24gJiYgXAotICAgICAgKChMT0dfT0NDVVJSRU5DRVNf
TU9EX049KExPR19PQ0NVUlJFTkNFU19NT0RfTiArIDEpICUgbikgPT0gKDEgJSBuKSkpIFwKLSAg
ICBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkxvZ01lc3NhZ2UoIFwKLSAgICAgICAgX19GSUxFX18s
IF9fTElORV9fLCBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OkdMT0dfICMjIHNldmVyaXR5LCBMT0df
T0NDVVJSRU5DRVMsIFwKLSAgICAgICAgICAgICAgICAgJndoYXRfdG9fZG8pLnN0cmVhbSgpCi0K
LSNkZWZpbmUgU09NRV9LSU5EX09GX1BMT0dfRVZFUllfTihzZXZlcml0eSwgbiwgd2hhdF90b19k
bykgXAotICBzdGF0aWMgaW50IExPR19PQ0NVUlJFTkNFUyA9IDAsIExPR19PQ0NVUlJFTkNFU19N
T0RfTiA9IDA7IFwKLSAgKytMT0dfT0NDVVJSRU5DRVM7IFwKLSAgaWYgKCsrTE9HX09DQ1VSUkVO
Q0VTX01PRF9OID4gbikgTE9HX09DQ1VSUkVOQ0VTX01PRF9OIC09IG47IFwKLSAgaWYgKExPR19P
Q0NVUlJFTkNFU19NT0RfTiA9PSAxKSBcCi0gICAgQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpFcnJu
b0xvZ01lc3NhZ2UoIFwKLSAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBAYWNfZ29vZ2xlX25h
bWVzcGFjZUA6OkdMT0dfICMjIHNldmVyaXR5LCBMT0dfT0NDVVJSRU5DRVMsIFwKLSAgICAgICAg
JndoYXRfdG9fZG8pLnN0cmVhbSgpCi0KLSNkZWZpbmUgU09NRV9LSU5EX09GX0xPR19GSVJTVF9O
KHNldmVyaXR5LCBuLCB3aGF0X3RvX2RvKSBcCi0gIHN0YXRpYyBpbnQgTE9HX09DQ1VSUkVOQ0VT
ID0gMDsgXAotICBpZiAoTE9HX09DQ1VSUkVOQ0VTIDw9IG4pIFwKLSAgICArK0xPR19PQ0NVUlJF
TkNFUzsgXAotICBpZiAoTE9HX09DQ1VSUkVOQ0VTIDw9IG4pIFwKLSAgICBAYWNfZ29vZ2xlX25h
bWVzcGFjZUA6OkxvZ01lc3NhZ2UoIFwKLSAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBAYWNf
Z29vZ2xlX25hbWVzcGFjZUA6OkdMT0dfICMjIHNldmVyaXR5LCBMT0dfT0NDVVJSRU5DRVMsIFwK
LSAgICAgICAgJndoYXRfdG9fZG8pLnN0cmVhbSgpCi0KLW5hbWVzcGFjZSBnbG9nX2ludGVybmFs
X25hbWVzcGFjZV8gewotdGVtcGxhdGUgPGJvb2w+Ci1zdHJ1Y3QgQ29tcGlsZUFzc2VydCB7Ci19
Owotc3RydWN0IENyYXNoUmVhc29uOwotCi0vLyBSZXR1cm5zIHRydWUgaWYgRmFpbHVyZVNpZ25h
bEhhbmRsZXIgaXMgaW5zdGFsbGVkLgotYm9vbCBJc0ZhaWx1cmVTaWduYWxIYW5kbGVySW5zdGFs
bGVkKCk7Ci19ICAvLyBuYW1lc3BhY2UgZ2xvZ19pbnRlcm5hbF9uYW1lc3BhY2VfCi0KLSNkZWZp
bmUgR09PR0xFX0dMT0dfQ09NUElMRV9BU1NFUlQoZXhwciwgbXNnKSBcCi0gIHR5cGVkZWYgQGFj
X2dvb2dsZV9uYW1lc3BhY2VAOjpnbG9nX2ludGVybmFsX25hbWVzcGFjZV86OkNvbXBpbGVBc3Nl
cnQ8KGJvb2woZXhwcikpPiBtc2dbYm9vbChleHByKSA/IDEgOiAtMV0KLQotI2RlZmluZSBMT0df
RVZFUllfTihzZXZlcml0eSwgbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBHT09HTEVfR0xPR19DT01QSUxFX0FTU0VSVChAYWNfZ29vZ2xlX25hbWVzcGFjZUA6
OkdMT0dfICMjIHNldmVyaXR5IDwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAYWNf
Z29vZ2xlX25hbWVzcGFjZUA6Ok5VTV9TRVZFUklUSUVTLCAgICAgXAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJTlZBTElEX1JFUVVFU1RFRF9MT0dfU0VWRVJJVFkpOyAgICAgICAgICAg
XAotICBTT01FX0tJTkRfT0ZfTE9HX0VWRVJZX04oc2V2ZXJpdHksIChuKSwgQGFjX2dvb2dsZV9u
YW1lc3BhY2VAOjpMb2dNZXNzYWdlOjpTZW5kVG9Mb2cpCi0KLSNkZWZpbmUgU1lTTE9HX0VWRVJZ
X04oc2V2ZXJpdHksIG4pIFwKLSAgU09NRV9LSU5EX09GX0xPR19FVkVSWV9OKHNldmVyaXR5LCAo
biksIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6TG9nTWVzc2FnZTo6U2VuZFRvU3lzbG9nQW5kTG9n
KQotCi0jZGVmaW5lIFBMT0dfRVZFUllfTihzZXZlcml0eSwgbikgXAotICBTT01FX0tJTkRfT0Zf
UExPR19FVkVSWV9OKHNldmVyaXR5LCAobiksIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6TG9nTWVz
c2FnZTo6U2VuZFRvTG9nKQotCi0jZGVmaW5lIExPR19GSVJTVF9OKHNldmVyaXR5LCBuKSBcCi0g
IFNPTUVfS0lORF9PRl9MT0dfRklSU1RfTihzZXZlcml0eSwgKG4pLCBAYWNfZ29vZ2xlX25hbWVz
cGFjZUA6OkxvZ01lc3NhZ2U6OlNlbmRUb0xvZykKLQotI2RlZmluZSBMT0dfSUZfRVZFUllfTihz
ZXZlcml0eSwgY29uZGl0aW9uLCBuKSBcCi0gIFNPTUVfS0lORF9PRl9MT0dfSUZfRVZFUllfTihz
ZXZlcml0eSwgKGNvbmRpdGlvbiksIChuKSwgQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpMb2dNZXNz
YWdlOjpTZW5kVG9Mb2cpCi0KLS8vIFdlIHdhbnQgdGhlIHNwZWNpYWwgQ09VTlRFUiB2YWx1ZSBh
dmFpbGFibGUgZm9yIExPR19FVkVSWV9YKCknZWQgbWVzc2FnZXMKLWVudW0gUFJJVkFURV9Db3Vu
dGVyIHtDT1VOVEVSfTsKLQotI2lmZGVmIEdMT0dfTk9fQUJCUkVWSUFURURfU0VWRVJJVElFUwot
Ly8gd2luZ2RpLmggZGVmaW5lcyBFUlJPUiB0byBiZSAwLiBXaGVuIHdlIGNhbGwgTE9HKEVSUk9S
KSwgaXQgZ2V0cwotLy8gc3Vic3RpdHV0ZWQgd2l0aCAwLCBhbmQgaXQgZXhwYW5kcyB0byBDT01Q
QUNUX0dPT0dMRV9MT0dfMC4gVG8gYWxsb3cgdXMKLS8vIHRvIGtlZXAgdXNpbmcgdGhpcyBzeW50
YXgsIHdlIGRlZmluZSB0aGlzIG1hY3JvIHRvIGRvIHRoZSBzYW1lIHRoaW5nCi0vLyBhcyBDT01Q
QUNUX0dPT0dMRV9MT0dfRVJST1IuCi0jZGVmaW5lIENPTVBBQ1RfR09PR0xFX0xPR18wIENPTVBB
Q1RfR09PR0xFX0xPR19FUlJPUgotI2RlZmluZSBTWVNMT0dfMCBTWVNMT0dfRVJST1IKLSNkZWZp
bmUgTE9HX1RPX1NUUklOR18wIExPR19UT19TVFJJTkdfRVJST1IKLS8vIE5lZWRlZCBmb3IgTE9H
X0lTX09OKEVSUk9SKS4KLWNvbnN0IExvZ1NldmVyaXR5IEdMT0dfMCA9IEdMT0dfRVJST1I7Ci0j
ZWxzZQotLy8gVXNlcnMgbWF5IGluY2x1ZGUgd2luZG93cy5oIGFmdGVyIGxvZ2dpbmcuaCB3aXRo
b3V0Ci0vLyBHTE9HX05PX0FCQlJFVklBVEVEX1NFVkVSSVRJRVMgbm9yIFdJTjMyX0xFQU5fQU5E
X01FQU4uCi0vLyBGb3IgdGhpcyBjYXNlLCB3ZSBjYW5ub3QgZGV0ZWN0IGlmIEVSUk9SIGlzIGRl
ZmluZWQgYmVmb3JlIHVzZXJzCi0vLyBhY3R1YWxseSB1c2UgRVJST1IuIExldCdzIG1ha2UgYW4g
dW5kZWZpbmVkIHN5bWJvbCB0byB3YXJuIHVzZXJzLgotIyBkZWZpbmUgR0xPR19FUlJPUl9NU0cg
RVJST1JfbWFjcm9faXNfZGVmaW5lZF9EZWZpbmVfR0xPR19OT19BQkJSRVZJQVRFRF9TRVZFUklU
SUVTX2JlZm9yZV9pbmNsdWRpbmdfbG9nZ2luZ19oX1NlZV90aGVfZG9jdW1lbnRfZm9yX2RldGFp
bAotIyBkZWZpbmUgQ09NUEFDVF9HT09HTEVfTE9HXzAgR0xPR19FUlJPUl9NU0cKLSMgZGVmaW5l
IFNZU0xPR18wIEdMT0dfRVJST1JfTVNHCi0jIGRlZmluZSBMT0dfVE9fU1RSSU5HXzAgR0xPR19F
UlJPUl9NU0cKLSMgZGVmaW5lIEdMT0dfMCBHTE9HX0VSUk9SX01TRwotI2VuZGlmCi0KLS8vIFBs
dXMgc29tZSBkZWJ1Zy1sb2dnaW5nIG1hY3JvcyB0aGF0IGdldCBjb21waWxlZCB0byBub3RoaW5n
IGZvciBwcm9kdWN0aW9uCi0KLSNpZiBEQ0hFQ0tfSVNfT04oKQotCi0jZGVmaW5lIERMT0coc2V2
ZXJpdHkpIExPRyhzZXZlcml0eSkKLSNkZWZpbmUgRFZMT0codmVyYm9zZWxldmVsKSBWTE9HKHZl
cmJvc2VsZXZlbCkKLSNkZWZpbmUgRExPR19JRihzZXZlcml0eSwgY29uZGl0aW9uKSBMT0dfSUYo
c2V2ZXJpdHksIGNvbmRpdGlvbikKLSNkZWZpbmUgRExPR19FVkVSWV9OKHNldmVyaXR5LCBuKSBM
T0dfRVZFUllfTihzZXZlcml0eSwgbikKLSNkZWZpbmUgRExPR19JRl9FVkVSWV9OKHNldmVyaXR5
LCBjb25kaXRpb24sIG4pIFwKLSAgTE9HX0lGX0VWRVJZX04oc2V2ZXJpdHksIGNvbmRpdGlvbiwg
bikKLSNkZWZpbmUgRExPR19BU1NFUlQoY29uZGl0aW9uKSBMT0dfQVNTRVJUKGNvbmRpdGlvbikK
LQotLy8gZGVidWctb25seSBjaGVja2luZy4gIGV4ZWN1dGVkIGlmIERDSEVDS19JU19PTigpLgot
I2RlZmluZSBEQ0hFQ0soY29uZGl0aW9uKSBDSEVDSyhjb25kaXRpb24pCi0jZGVmaW5lIERDSEVD
S19FUSh2YWwxLCB2YWwyKSBDSEVDS19FUSh2YWwxLCB2YWwyKQotI2RlZmluZSBEQ0hFQ0tfTkUo
dmFsMSwgdmFsMikgQ0hFQ0tfTkUodmFsMSwgdmFsMikKLSNkZWZpbmUgRENIRUNLX0xFKHZhbDEs
IHZhbDIpIENIRUNLX0xFKHZhbDEsIHZhbDIpCi0jZGVmaW5lIERDSEVDS19MVCh2YWwxLCB2YWwy
KSBDSEVDS19MVCh2YWwxLCB2YWwyKQotI2RlZmluZSBEQ0hFQ0tfR0UodmFsMSwgdmFsMikgQ0hF
Q0tfR0UodmFsMSwgdmFsMikKLSNkZWZpbmUgRENIRUNLX0dUKHZhbDEsIHZhbDIpIENIRUNLX0dU
KHZhbDEsIHZhbDIpCi0jZGVmaW5lIERDSEVDS19OT1ROVUxMKHZhbCkgQ0hFQ0tfTk9UTlVMTCh2
YWwpCi0jZGVmaW5lIERDSEVDS19TVFJFUShzdHIxLCBzdHIyKSBDSEVDS19TVFJFUShzdHIxLCBz
dHIyKQotI2RlZmluZSBEQ0hFQ0tfU1RSQ0FTRUVRKHN0cjEsIHN0cjIpIENIRUNLX1NUUkNBU0VF
UShzdHIxLCBzdHIyKQotI2RlZmluZSBEQ0hFQ0tfU1RSTkUoc3RyMSwgc3RyMikgQ0hFQ0tfU1RS
TkUoc3RyMSwgc3RyMikKLSNkZWZpbmUgRENIRUNLX1NUUkNBU0VORShzdHIxLCBzdHIyKSBDSEVD
S19TVFJDQVNFTkUoc3RyMSwgc3RyMikKLQotI2Vsc2UgIC8vICFEQ0hFQ0tfSVNfT04oKQotCi0j
ZGVmaW5lIERMT0coc2V2ZXJpdHkpIFwKLSAgdHJ1ZSA/ICh2b2lkKSAwIDogQGFjX2dvb2dsZV9u
YW1lc3BhY2VAOjpMb2dNZXNzYWdlVm9pZGlmeSgpICYgTE9HKHNldmVyaXR5KQotCi0jZGVmaW5l
IERWTE9HKHZlcmJvc2VsZXZlbCkgXAotICAodHJ1ZSB8fCAhVkxPR19JU19PTih2ZXJib3NlbGV2
ZWwpKSA/XAotICAgICh2b2lkKSAwIDogQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpMb2dNZXNzYWdl
Vm9pZGlmeSgpICYgTE9HKElORk8pCi0KLSNkZWZpbmUgRExPR19JRihzZXZlcml0eSwgY29uZGl0
aW9uKSBcCi0gICh0cnVlIHx8ICEoY29uZGl0aW9uKSkgPyAodm9pZCkgMCA6IEBhY19nb29nbGVf
bmFtZXNwYWNlQDo6TG9nTWVzc2FnZVZvaWRpZnkoKSAmIExPRyhzZXZlcml0eSkKLQotI2RlZmlu
ZSBETE9HX0VWRVJZX04oc2V2ZXJpdHksIG4pIFwKLSAgdHJ1ZSA/ICh2b2lkKSAwIDogQGFjX2dv
b2dsZV9uYW1lc3BhY2VAOjpMb2dNZXNzYWdlVm9pZGlmeSgpICYgTE9HKHNldmVyaXR5KQotCi0j
ZGVmaW5lIERMT0dfSUZfRVZFUllfTihzZXZlcml0eSwgY29uZGl0aW9uLCBuKSBcCi0gICh0cnVl
IHx8ICEoY29uZGl0aW9uKSk/ICh2b2lkKSAwIDogQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpMb2dN
ZXNzYWdlVm9pZGlmeSgpICYgTE9HKHNldmVyaXR5KQotCi0jZGVmaW5lIERMT0dfQVNTRVJUKGNv
bmRpdGlvbikgXAotICB0cnVlID8gKHZvaWQpIDAgOiBMT0dfQVNTRVJUKGNvbmRpdGlvbikKLQot
Ly8gTVNWQyB3YXJuaW5nIEM0MTI3OiBjb25kaXRpb25hbCBleHByZXNzaW9uIGlzIGNvbnN0YW50
Ci0jZGVmaW5lIERDSEVDSyhjb25kaXRpb24pIFwKLSAgR0xPR19NU1ZDX1BVU0hfRElTQUJMRV9X
QVJOSU5HKDQxMjcpIFwKLSAgd2hpbGUgKGZhbHNlKSBcCi0gICAgR0xPR19NU1ZDX1BPUF9XQVJO
SU5HKCkgQ0hFQ0soY29uZGl0aW9uKQotCi0jZGVmaW5lIERDSEVDS19FUSh2YWwxLCB2YWwyKSBc
Ci0gIEdMT0dfTVNWQ19QVVNIX0RJU0FCTEVfV0FSTklORyg0MTI3KSBcCi0gIHdoaWxlIChmYWxz
ZSkgXAotICAgIEdMT0dfTVNWQ19QT1BfV0FSTklORygpIENIRUNLX0VRKHZhbDEsIHZhbDIpCi0K
LSNkZWZpbmUgRENIRUNLX05FKHZhbDEsIHZhbDIpIFwKLSAgR0xPR19NU1ZDX1BVU0hfRElTQUJM
RV9XQVJOSU5HKDQxMjcpIFwKLSAgd2hpbGUgKGZhbHNlKSBcCi0gICAgR0xPR19NU1ZDX1BPUF9X
QVJOSU5HKCkgQ0hFQ0tfTkUodmFsMSwgdmFsMikKLQotI2RlZmluZSBEQ0hFQ0tfTEUodmFsMSwg
dmFsMikgXAotICBHTE9HX01TVkNfUFVTSF9ESVNBQkxFX1dBUk5JTkcoNDEyNykgXAotICB3aGls
ZSAoZmFsc2UpIFwKLSAgICBHTE9HX01TVkNfUE9QX1dBUk5JTkcoKSBDSEVDS19MRSh2YWwxLCB2
YWwyKQotCi0jZGVmaW5lIERDSEVDS19MVCh2YWwxLCB2YWwyKSBcCi0gIEdMT0dfTVNWQ19QVVNI
X0RJU0FCTEVfV0FSTklORyg0MTI3KSBcCi0gIHdoaWxlIChmYWxzZSkgXAotICAgIEdMT0dfTVNW
Q19QT1BfV0FSTklORygpIENIRUNLX0xUKHZhbDEsIHZhbDIpCi0KLSNkZWZpbmUgRENIRUNLX0dF
KHZhbDEsIHZhbDIpIFwKLSAgR0xPR19NU1ZDX1BVU0hfRElTQUJMRV9XQVJOSU5HKDQxMjcpIFwK
LSAgd2hpbGUgKGZhbHNlKSBcCi0gICAgR0xPR19NU1ZDX1BPUF9XQVJOSU5HKCkgQ0hFQ0tfR0Uo
dmFsMSwgdmFsMikKLQotI2RlZmluZSBEQ0hFQ0tfR1QodmFsMSwgdmFsMikgXAotICBHTE9HX01T
VkNfUFVTSF9ESVNBQkxFX1dBUk5JTkcoNDEyNykgXAotICB3aGlsZSAoZmFsc2UpIFwKLSAgICBH
TE9HX01TVkNfUE9QX1dBUk5JTkcoKSBDSEVDS19HVCh2YWwxLCB2YWwyKQotCi0vLyBZb3UgbWF5
IHNlZSB3YXJuaW5ncyBpbiByZWxlYXNlIG1vZGUgaWYgeW91IGRvbid0IHVzZSB0aGUgcmV0dXJu
Ci0vLyB2YWx1ZSBvZiBEQ0hFQ0tfTk9UTlVMTC4gUGxlYXNlIGp1c3QgdXNlIERDSEVDSyBmb3Ig
c3VjaCBjYXNlcy4KLSNkZWZpbmUgRENIRUNLX05PVE5VTEwodmFsKSAodmFsKQotCi0jZGVmaW5l
IERDSEVDS19TVFJFUShzdHIxLCBzdHIyKSBcCi0gIEdMT0dfTVNWQ19QVVNIX0RJU0FCTEVfV0FS
TklORyg0MTI3KSBcCi0gIHdoaWxlIChmYWxzZSkgXAotICAgIEdMT0dfTVNWQ19QT1BfV0FSTklO
RygpIENIRUNLX1NUUkVRKHN0cjEsIHN0cjIpCi0KLSNkZWZpbmUgRENIRUNLX1NUUkNBU0VFUShz
dHIxLCBzdHIyKSBcCi0gIEdMT0dfTVNWQ19QVVNIX0RJU0FCTEVfV0FSTklORyg0MTI3KSBcCi0g
IHdoaWxlIChmYWxzZSkgXAotICAgIEdMT0dfTVNWQ19QT1BfV0FSTklORygpIENIRUNLX1NUUkNB
U0VFUShzdHIxLCBzdHIyKQotCi0jZGVmaW5lIERDSEVDS19TVFJORShzdHIxLCBzdHIyKSBcCi0g
IEdMT0dfTVNWQ19QVVNIX0RJU0FCTEVfV0FSTklORyg0MTI3KSBcCi0gIHdoaWxlIChmYWxzZSkg
XAotICAgIEdMT0dfTVNWQ19QT1BfV0FSTklORygpIENIRUNLX1NUUk5FKHN0cjEsIHN0cjIpCi0K
LSNkZWZpbmUgRENIRUNLX1NUUkNBU0VORShzdHIxLCBzdHIyKSBcCi0gIEdMT0dfTVNWQ19QVVNI
X0RJU0FCTEVfV0FSTklORyg0MTI3KSBcCi0gIHdoaWxlIChmYWxzZSkgXAotICAgIEdMT0dfTVNW
Q19QT1BfV0FSTklORygpIENIRUNLX1NUUkNBU0VORShzdHIxLCBzdHIyKQotCi0jZW5kaWYgIC8v
IERDSEVDS19JU19PTigpCi0KLS8vIExvZyBvbmx5IGluIHZlcmJvc2UgbW9kZS4KLQotI2RlZmlu
ZSBWTE9HKHZlcmJvc2VsZXZlbCkgTE9HX0lGKElORk8sIFZMT0dfSVNfT04odmVyYm9zZWxldmVs
KSkKLQotI2RlZmluZSBWTE9HX0lGKHZlcmJvc2VsZXZlbCwgY29uZGl0aW9uKSBcCi0gIExPR19J
RihJTkZPLCAoY29uZGl0aW9uKSAmJiBWTE9HX0lTX09OKHZlcmJvc2VsZXZlbCkpCi0KLSNkZWZp
bmUgVkxPR19FVkVSWV9OKHZlcmJvc2VsZXZlbCwgbikgXAotICBMT0dfSUZfRVZFUllfTihJTkZP
LCBWTE9HX0lTX09OKHZlcmJvc2VsZXZlbCksIG4pCi0KLSNkZWZpbmUgVkxPR19JRl9FVkVSWV9O
KHZlcmJvc2VsZXZlbCwgY29uZGl0aW9uLCBuKSBcCi0gIExPR19JRl9FVkVSWV9OKElORk8sIChj
b25kaXRpb24pICYmIFZMT0dfSVNfT04odmVyYm9zZWxldmVsKSwgbikKLQotbmFtZXNwYWNlIGJh
c2VfbG9nZ2luZyB7Ci0KLS8vIExvZ01lc3NhZ2U6OkxvZ1N0cmVhbSBpcyBhIHN0ZDo6b3N0cmVh
bSBiYWNrZWQgYnkgdGhpcyBzdHJlYW1idWYuCi0vLyBUaGlzIGNsYXNzIGlnbm9yZXMgb3ZlcmZs
b3cgYW5kIGxlYXZlcyB0d28gYnl0ZXMgYXQgdGhlIGVuZCBvZiB0aGUKLS8vIGJ1ZmZlciB0byBh
bGxvdyBmb3IgYSAnXG4nIGFuZCAnXDAnLgotY2xhc3MgR09PR0xFX0dMT0dfRExMX0RFQ0wgTG9n
U3RyZWFtQnVmIDogcHVibGljIHN0ZDo6c3RyZWFtYnVmIHsKLSBwdWJsaWM6Ci0gIC8vIFJFUVVJ
UkVNRU5UUzogImxlbiIgbXVzdCBiZSA+PSAyIHRvIGFjY291bnQgZm9yIHRoZSAnXG4nIGFuZCAn
XG4nLgotICBMb2dTdHJlYW1CdWYoY2hhciAqYnVmLCBpbnQgbGVuKSB7Ci0gICAgc2V0cChidWYs
IGJ1ZiArIGxlbiAtIDIpOwotICB9Ci0KLSAgLy8gUmVzZXRzIHRoZSBidWZmZXIuIFVzZWZ1bCBp
ZiB3ZSByZXVzZSBpdCBieSBtZWFucyBvZiBUTFMuCi0gIHZvaWQgcmVzZXQoKSB7Ci0gICAgIHNl
dHAocGJhc2UoKSwgZXBwdHIoKSk7Ci0gIH0KLQotICAvLyBUaGlzIGVmZmVjdGl2ZWx5IGlnbm9y
ZXMgb3ZlcmZsb3cuCi0gIHZpcnR1YWwgaW50X3R5cGUgb3ZlcmZsb3coaW50X3R5cGUgY2gpIHsK
LSAgICByZXR1cm4gY2g7Ci0gIH0KLQotICAvLyBMZWdhY3kgcHVibGljIG9zdHJzdHJlYW0gbWV0
aG9kLgotICBzaXplX3QgcGNvdW50KCkgY29uc3QgeyByZXR1cm4gcHB0cigpIC0gcGJhc2UoKTsg
fQotICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6c3RyZWFtYnVmOjpwYmFzZSgp
OyB9Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgYmFzZV9sb2dnaW5nCi0KLS8vCi0vLyBUaGlzIGNs
YXNzIG1vcmUgb3IgbGVzcyByZXByZXNlbnRzIGEgcGFydGljdWxhciBsb2cgbWVzc2FnZS4gIFlv
dQotLy8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIExvZ01lc3NhZ2UgYW5kIHRoZW4gc3RyZWFtIHN0
dWZmIHRvIGl0LgotLy8gV2hlbiB5b3UgZmluaXNoIHN0cmVhbWluZyB0byBpdCwgfkxvZ01lc3Nh
Z2UgaXMgY2FsbGVkIGFuZCB0aGUKLS8vIGZ1bGwgbWVzc2FnZSBnZXRzIHN0cmVhbWVkIHRvIHRo
ZSBhcHByb3ByaWF0ZSBkZXN0aW5hdGlvbi4KLS8vCi0vLyBZb3Ugc2hvdWxkbid0IGFjdHVhbGx5
IHVzZSBMb2dNZXNzYWdlJ3MgY29uc3RydWN0b3IgdG8gbG9nIHRoaW5ncywKLS8vIHRob3VnaC4g
IFlvdSBzaG91bGQgdXNlIHRoZSBMT0coKSBtYWNybyAoYW5kIHZhcmlhbnRzIHRoZXJlb2YpCi0v
LyBhYm92ZS4KLWNsYXNzIEdPT0dMRV9HTE9HX0RMTF9ERUNMIExvZ01lc3NhZ2UgewotcHVibGlj
OgotICBlbnVtIHsKLSAgICAvLyBQYXNzaW5nIGtOb0xvZ1ByZWZpeCBmb3IgdGhlIGxpbmUgbnVt
YmVyIGRpc2FibGVzIHRoZQotICAgIC8vIGxvZy1tZXNzYWdlIHByZWZpeC4gVXNlZnVsIGZvciB1
c2luZyB0aGUgTG9nTWVzc2FnZQotICAgIC8vIGluZnJhc3RydWN0dXJlIGFzIGEgcHJpbnRpbmcg
dXRpbGl0eS4gU2VlIGFsc28gdGhlIC0tbG9nX3ByZWZpeAotICAgIC8vIGZsYWcgZm9yIGNvbnRy
b2xsaW5nIHRoZSBsb2ctbWVzc2FnZSBwcmVmaXggb24gYW4KLSAgICAvLyBhcHBsaWNhdGlvbi13
aWRlIGJhc2lzLgotICAgIGtOb0xvZ1ByZWZpeCA9IC0xCi0gIH07Ci0KLSAgLy8gTG9nU3RyZWFt
IGluaGVyaXQgZnJvbSBub24tRExMLWV4cG9ydGVkIGNsYXNzIChzdGQ6Om9zdHJzdHJlYW0pCi0g
IC8vIGFuZCBWQysrIHByb2R1Y2VzIGEgd2FybmluZyBmb3IgdGhpcyBzaXR1YXRpb24uCi0gIC8v
IEhvd2V2ZXIsIE1TRE4gc2F5cyAiQzQyNzUgY2FuIGJlIGlnbm9yZWQgaW4gTWljcm9zb2Z0IFZp
c3VhbCBDKysKLSAgLy8gMjAwNSBpZiB5b3UgYXJlIGRlcml2aW5nIGZyb20gYSB0eXBlIGluIHRo
ZSBTdGFuZGFyZCBDKysgTGlicmFyeSIKLSAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9l
bi11cy9saWJyYXJ5LzN0ZGI0NzFzKFZTLjgwKS5hc3B4Ci0gIC8vIExldCdzIGp1c3QgaWdub3Jl
IHRoZSB3YXJuaW5nLgotI2lmZGVmIF9NU0NfVkVSCi0jIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQyNzUpCi0jZW5kaWYKLSAgY2xhc3MgR09PR0xFX0dMT0dfRExMX0RFQ0wgTG9nU3RyZWFtIDog
cHVibGljIHN0ZDo6b3N0cmVhbSB7Ci0jaWZkZWYgX01TQ19WRVIKLSMgcHJhZ21hIHdhcm5pbmco
ZGVmYXVsdDogNDI3NSkKLSNlbmRpZgotICBwdWJsaWM6Ci0gICAgTG9nU3RyZWFtKGNoYXIgKmJ1
ZiwgaW50IGxlbiwgaW50IGN0cikKLSAgICAgICAgOiBzdGQ6Om9zdHJlYW0oTlVMTCksCi0gICAg
ICAgICAgc3RyZWFtYnVmXyhidWYsIGxlbiksCi0gICAgICAgICAgY3RyXyhjdHIpLAotICAgICAg
ICAgIHNlbGZfKHRoaXMpIHsKLSAgICAgIHJkYnVmKCZzdHJlYW1idWZfKTsKLSAgICB9Ci0KLSAg
ICBpbnQgY3RyKCkgY29uc3QgeyByZXR1cm4gY3RyXzsgfQotICAgIHZvaWQgc2V0X2N0cihpbnQg
Y3RyKSB7IGN0cl8gPSBjdHI7IH0KLSAgICBMb2dTdHJlYW0qIHNlbGYoKSBjb25zdCB7IHJldHVy
biBzZWxmXzsgfQotCi0gICAgLy8gTGVnYWN5IHN0ZDo6c3RyZWFtYnVmIG1ldGhvZHMuCi0gICAg
c2l6ZV90IHBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0cmVhbWJ1Zl8ucGNvdW50KCk7IH0KLSAg
ICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0cmVhbWJ1Zl8ucGJhc2UoKTsgfQotICAg
IGNoYXIqIHN0cigpIGNvbnN0IHsgcmV0dXJuIHBiYXNlKCk7IH0KLSAgICB2b2lkIHJlc2V0KCkg
eyBzdHJlYW1idWZfLnJlc2V0KCk7IH0KLQotICBwcml2YXRlOgotICAgIExvZ1N0cmVhbShjb25z
dCBMb2dTdHJlYW0mKTsKLSAgICBMb2dTdHJlYW0mIG9wZXJhdG9yPShjb25zdCBMb2dTdHJlYW0m
KTsKLSAgICBiYXNlX2xvZ2dpbmc6OkxvZ1N0cmVhbUJ1ZiBzdHJlYW1idWZfOwotICAgIGludCBj
dHJfOyAgLy8gQ291bnRlciBoYWNrIChmb3IgdGhlIExPR19FVkVSWV9YKCkgbWFjcm8pCi0gICAg
TG9nU3RyZWFtICpzZWxmXzsgIC8vIENvbnNpc3RlbmN5IGNoZWNrIGhhY2sKLSAgfTsKLQotcHVi
bGljOgotICAvLyBpY2MgOCByZXF1aXJlcyB0aGlzIHR5cGVkZWYgdG8gYXZvaWQgYW4gaW50ZXJu
YWwgY29tcGlsZXIgZXJyb3IuCi0gIHR5cGVkZWYgdm9pZCAoTG9nTWVzc2FnZTo6KlNlbmRNZXRo
b2QpKCk7Ci0KLSAgTG9nTWVzc2FnZShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgTG9nU2V2
ZXJpdHkgc2V2ZXJpdHksIGludCBjdHIsCi0gICAgICAgICAgICAgU2VuZE1ldGhvZCBzZW5kX21l
dGhvZCk7Ci0KLSAgLy8gVHdvIHNwZWNpYWwgY29uc3RydWN0b3JzIHRoYXQgZ2VuZXJhdGUgcmVk
dWNlZCBhbW91bnRzIG9mIGNvZGUgYXQKLSAgLy8gTE9HIGNhbGwgc2l0ZXMgZm9yIGNvbW1vbiBj
YXNlcy4KLQotICAvLyBVc2VkIGZvciBMT0coSU5GTyk6IEltcGxpZWQgYXJlOgotICAvLyBzZXZl
cml0eSA9IElORk8sIGN0ciA9IDAsIHNlbmRfbWV0aG9kID0gJkxvZ01lc3NhZ2U6OlNlbmRUb0xv
Zy4KLSAgLy8KLSAgLy8gVXNpbmcgdGhpcyBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIHRoZSBtb3Jl
IGNvbXBsZXggY29uc3RydWN0b3IgYWJvdmUKLSAgLy8gc2F2ZXMgMTkgYnl0ZXMgcGVyIGNhbGwg
c2l0ZS4KLSAgTG9nTWVzc2FnZShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSk7Ci0KLSAgLy8g
VXNlZCBmb3IgTE9HKHNldmVyaXR5KSB3aGVyZSBzZXZlcml0eSAhPSBJTkZPLiAgSW1wbGllZAot
ICAvLyBhcmU6IGN0ciA9IDAsIHNlbmRfbWV0aG9kID0gJkxvZ01lc3NhZ2U6OlNlbmRUb0xvZwot
ICAvLwotICAvLyBVc2luZyB0aGlzIGNvbnN0cnVjdG9yIGluc3RlYWQgb2YgdGhlIG1vcmUgY29t
cGxleCBjb25zdHJ1Y3RvciBhYm92ZQotICAvLyBzYXZlcyAxNyBieXRlcyBwZXIgY2FsbCBzaXRl
LgotICBMb2dNZXNzYWdlKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBMb2dTZXZlcml0eSBz
ZXZlcml0eSk7Ci0KLSAgLy8gQ29uc3RydWN0b3IgdG8gbG9nIHRoaXMgbWVzc2FnZSB0byBhIHNw
ZWNpZmllZCBzaW5rIChpZiBub3QgTlVMTCkuCi0gIC8vIEltcGxpZWQgYXJlOiBjdHIgPSAwLCBz
ZW5kX21ldGhvZCA9ICZMb2dNZXNzYWdlOjpTZW5kVG9TaW5rQW5kTG9nIGlmCi0gIC8vIGFsc29f
c2VuZF90b19sb2cgaXMgdHJ1ZSwgc2VuZF9tZXRob2QgPSAmTG9nTWVzc2FnZTo6U2VuZFRvU2lu
ayBvdGhlcndpc2UuCi0gIExvZ01lc3NhZ2UoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIExv
Z1NldmVyaXR5IHNldmVyaXR5LCBMb2dTaW5rKiBzaW5rLAotICAgICAgICAgICAgIGJvb2wgYWxz
b19zZW5kX3RvX2xvZyk7Ci0KLSAgLy8gQ29uc3RydWN0b3Igd2hlcmUgd2UgYWxzbyBnaXZlIGEg
dmVjdG9yPHN0cmluZz4gcG9pbnRlcgotICAvLyBmb3Igc3RvcmluZyB0aGUgbWVzc2FnZXMgKGlm
IHRoZSBwb2ludGVyIGlzIG5vdCBOVUxMKS4KLSAgLy8gSW1wbGllZCBhcmU6IGN0ciA9IDAsIHNl
bmRfbWV0aG9kID0gJkxvZ01lc3NhZ2U6OlNhdmVPclNlbmRUb0xvZy4KLSAgTG9nTWVzc2FnZShj
b25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgTG9nU2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAg
ICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBvdXR2ZWMpOwotCi0gIC8vIENvbnN0cnVj
dG9yIHdoZXJlIHdlIGFsc28gZ2l2ZSBhIHN0cmluZyBwb2ludGVyIGZvciBzdG9yaW5nIHRoZQot
ICAvLyBtZXNzYWdlIChpZiB0aGUgcG9pbnRlciBpcyBub3QgTlVMTCkuICBJbXBsaWVkIGFyZTog
Y3RyID0gMCwKLSAgLy8gc2VuZF9tZXRob2QgPSAmTG9nTWVzc2FnZTo6V3JpdGVUb1N0cmluZ0Fu
ZExvZy4KLSAgTG9nTWVzc2FnZShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgTG9nU2V2ZXJp
dHkgc2V2ZXJpdHksCi0gICAgICAgICAgICAgc3RkOjpzdHJpbmcqIG1lc3NhZ2UpOwotCi0gIC8v
IEEgc3BlY2lhbCBjb25zdHJ1Y3RvciB1c2VkIGZvciBjaGVjayBmYWlsdXJlcwotICBMb2dNZXNz
YWdlKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBDaGVja09wU3RyaW5nJiByZXN1
bHQpOwotCi0gIH5Mb2dNZXNzYWdlKCk7Ci0KLSAgLy8gRmx1c2ggYSBidWZmZXJlZCBtZXNzYWdl
IHRvIHRoZSBzaW5rIHNldCBpbiB0aGUgY29uc3RydWN0b3IuICBBbHdheXMKLSAgLy8gY2FsbGVk
IGJ5IHRoZSBkZXN0cnVjdG9yLCBpdCBtYXkgYWxzbyBiZSBjYWxsZWQgZnJvbSBlbHNld2hlcmUg
aWYKLSAgLy8gbmVlZGVkLiAgT25seSB0aGUgZmlyc3QgY2FsbCBpcyBhY3Rpb25lZDsgYW55IGxh
dGVyIG9uZXMgYXJlIGlnbm9yZWQuCi0gIHZvaWQgRmx1c2goKTsKLQotICAvLyBBbiBhcmJpdHJh
cnkgbGltaXQgb24gdGhlIGxlbmd0aCBvZiBhIHNpbmdsZSBsb2cgbWVzc2FnZS4gIFRoaXMKLSAg
Ly8gaXMgc28gdGhhdCBzdHJlYW1pbmcgY2FuIGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseS4KLSAg
c3RhdGljIGNvbnN0IHNpemVfdCBrTWF4TG9nTWVzc2FnZUxlbjsKLQotICAvLyBUaGVzZXMgc2hv
dWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgb3V0c2lkZSBvZiBsb2dnaW5nLiosCi0gIC8vIG9u
bHkgcGFzc2VkIGFzIFNlbmRNZXRob2QgYXJndW1lbnRzIHRvIG90aGVyIExvZ01lc3NhZ2UgbWV0
aG9kczoKLSAgdm9pZCBTZW5kVG9Mb2coKTsgIC8vIEFjdHVhbGx5IGRpc3BhdGNoIHRvIHRoZSBs
b2dzCi0gIHZvaWQgU2VuZFRvU3lzbG9nQW5kTG9nKCk7ICAvLyBBY3R1YWxseSBkaXNwYXRjaCB0
byBzeXNsb2cgYW5kIHRoZSBsb2dzCi0KLSAgLy8gQ2FsbCBhYm9ydCgpIG9yIHNpbWlsYXIgdG8g
cGVyZm9ybSBMT0coRkFUQUwpIGNyYXNoLgotICBzdGF0aWMgdm9pZCBAYWNfY3ZfX19hdHRyaWJ1
dGVfX19ub3JldHVybkAgRmFpbCgpOwotCi0gIHN0ZDo6b3N0cmVhbSYgc3RyZWFtKCk7Ci0KLSAg
aW50IHByZXNlcnZlZF9lcnJubygpIGNvbnN0OwotCi0gIC8vIE11c3QgYmUgY2FsbGVkIHdpdGhv
dXQgdGhlIGxvZ19tdXRleCBoZWxkLiAgKEwgPCBsb2dfbXV0ZXgpCi0gIHN0YXRpYyBpbnQ2NCBu
dW1fbWVzc2FnZXMoaW50IHNldmVyaXR5KTsKLQotICBzdHJ1Y3QgTG9nTWVzc2FnZURhdGE7Ci0K
LXByaXZhdGU6Ci0gIC8vIEZ1bGx5IGludGVybmFsIFNlbmRNZXRob2QgY2FzZXM6Ci0gIHZvaWQg
U2VuZFRvU2lua0FuZExvZygpOyAgLy8gU2VuZCB0byBzaW5rIGlmIHByb3ZpZGVkIGFuZCBkaXNw
YXRjaCB0byB0aGUgbG9ncwotICB2b2lkIFNlbmRUb1NpbmsoKTsgIC8vIFNlbmQgdG8gc2luayBp
ZiBwcm92aWRlZCwgZG8gbm90aGluZyBvdGhlcndpc2UuCi0KLSAgLy8gV3JpdGUgdG8gc3RyaW5n
IGlmIHByb3ZpZGVkIGFuZCBkaXNwYXRjaCB0byB0aGUgbG9ncy4KLSAgdm9pZCBXcml0ZVRvU3Ry
aW5nQW5kTG9nKCk7Ci0KLSAgdm9pZCBTYXZlT3JTZW5kVG9Mb2coKTsgIC8vIFNhdmUgdG8gc3Ry
aW5ndmVjIGlmIHByb3ZpZGVkLCBlbHNlIHRvIGxvZ3MKLQotICB2b2lkIEluaXQoY29uc3QgY2hh
ciogZmlsZSwgaW50IGxpbmUsIExvZ1NldmVyaXR5IHNldmVyaXR5LAotICAgICAgICAgICAgdm9p
ZCAoTG9nTWVzc2FnZTo6KnNlbmRfbWV0aG9kKSgpKTsKLQotICAvLyBVc2VkIHRvIGZpbGwgaW4g
Y3Jhc2ggaW5mb3JtYXRpb24gZHVyaW5nIExPRyhGQVRBTCkgZmFpbHVyZXMuCi0gIHZvaWQgUmVj
b3JkQ3Jhc2hSZWFzb24oZ2xvZ19pbnRlcm5hbF9uYW1lc3BhY2VfOjpDcmFzaFJlYXNvbiogcmVh
c29uKTsKLQotICAvLyBDb3VudHMgb2YgbWVzc2FnZXMgc2VudCBhdCBlYWNoIHByaW9yaXR5Ogot
ICBzdGF0aWMgaW50NjQgbnVtX21lc3NhZ2VzX1tOVU1fU0VWRVJJVElFU107ICAvLyB1bmRlciBs
b2dfbXV0ZXgKLQotICAvLyBXZSBrZWVwIHRoZSBkYXRhIGluIGEgc2VwYXJhdGUgc3RydWN0IHNv
IHRoYXQgZWFjaCBpbnN0YW5jZSBvZgotICAvLyBMb2dNZXNzYWdlIHVzZXMgbGVzcyBzdGFjayBz
cGFjZS4KLSAgTG9nTWVzc2FnZURhdGEqIGFsbG9jYXRlZF87Ci0gIExvZ01lc3NhZ2VEYXRhKiBk
YXRhXzsKLQotICBmcmllbmQgY2xhc3MgTG9nRGVzdGluYXRpb247Ci0KLSAgTG9nTWVzc2FnZShj
b25zdCBMb2dNZXNzYWdlJik7Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IExvZ01lc3NhZ2UmKTsK
LX07Ci0KLS8vIFRoaXMgY2xhc3MgaGFwcGVucyB0byBiZSB0aHJlYWQtaG9zdGlsZSBiZWNhdXNl
IGFsbCBpbnN0YW5jZXMgc2hhcmUKLS8vIGEgc2luZ2xlIGRhdGEgYnVmZmVyLCBidXQgc2luY2Ug
aXQgY2FuIG9ubHkgYmUgY3JlYXRlZCBqdXN0IGJlZm9yZQotLy8gdGhlIHByb2Nlc3MgZGllcywg
d2UgZG9uJ3Qgd29ycnkgc28gbXVjaC4KLWNsYXNzIEdPT0dMRV9HTE9HX0RMTF9ERUNMIExvZ01l
c3NhZ2VGYXRhbCA6IHB1YmxpYyBMb2dNZXNzYWdlIHsKLSBwdWJsaWM6Ci0gIExvZ01lc3NhZ2VG
YXRhbChjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSk7Ci0gIExvZ01lc3NhZ2VGYXRhbChjb25z
dCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgQ2hlY2tPcFN0cmluZyYgcmVzdWx0KTsKLSAg
QGFjX2N2X19fYXR0cmlidXRlX19fbm9yZXR1cm5AIH5Mb2dNZXNzYWdlRmF0YWwoKTsKLX07Ci0K
LS8vIEEgbm9uLW1hY3JvIGludGVyZmFjZSB0byB0aGUgbG9nIGZhY2lsaXR5OyAodXNlZnVsCi0v
LyB3aGVuIHRoZSBsb2dnaW5nIGxldmVsIGlzIG5vdCBhIGNvbXBpbGUtdGltZSBjb25zdGFudCku
Ci1pbmxpbmUgdm9pZCBMb2dBdExldmVsKGludCBjb25zdCBzZXZlcml0eSwgc3RkOjpzdHJpbmcg
Y29uc3QgJm1zZykgewotICBMb2dNZXNzYWdlKF9fRklMRV9fLCBfX0xJTkVfXywgc2V2ZXJpdHkp
LnN0cmVhbSgpIDw8IG1zZzsKLX0KLQotLy8gQSBtYWNybyBhbHRlcm5hdGl2ZSBvZiBMb2dBdExl
dmVsLiBOZXcgY29kZSBtYXkgd2FudCB0byB1c2UgdGhpcwotLy8gdmVyc2lvbiBzaW5jZSB0aGVy
ZSBhcmUgdHdvIGFkdmFudGFnZXM6IDEuIHRoaXMgdmVyc2lvbiBvdXRwdXRzIHRoZQotLy8gZmls
ZSBuYW1lIGFuZCB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhpcyBtYWNybyBpcyBwdXQgbGlrZSBv
dGhlcgotLy8gTE9HIG1hY3JvcywgMi4gdGhpcyBtYWNybyBjYW4gYmUgdXNlZCBhcyBDKysgc3Ry
ZWFtLgotI2RlZmluZSBMT0dfQVRfTEVWRUwoc2V2ZXJpdHkpIEBhY19nb29nbGVfbmFtZXNwYWNl
QDo6TG9nTWVzc2FnZShfX0ZJTEVfXywgX19MSU5FX18sIHNldmVyaXR5KS5zdHJlYW0oKQotCi0v
LyBDaGVjayBpZiBpdCdzIGNvbXBpbGVkIGluIEMrKzExIG1vZGUuCi0vLwotLy8gR1hYX0VYUEVS
SU1FTlRBTF9DWFgwWCBpcyBkZWZpbmVkIGJ5IGdjYyBhbmQgY2xhbmcgdXAgdG8gYXQgbGVhc3QK
LS8vIGdjYy00LjcgYW5kIGNsYW5nLTMuMSAoMjAxMS0xMi0xMykuICBfX2NwbHVzcGx1cyB3YXMg
ZGVmaW5lZCB0byAxCi0vLyBpbiBnY2MgYmVmb3JlIDQuNyAoQ3Jvc3N0b29sIDE2KSBhbmQgY2xh
bmcgYmVmb3JlIDMuMSwgYnV0IGlzCi0vLyBkZWZpbmVkIGFjY29yZGluZyB0byB0aGUgbGFuZ3Vh
Z2UgdmVyc2lvbiBpbiBlZmZlY3QgdGhlcmVhZnRlci4KLS8vIE1pY3Jvc29mdCBWaXN1YWwgU3R1
ZGlvIDE0ICgyMDE1KSBzZXRzIF9fY3BsdXNwbHVzPT0xOTk3MTEgZGVzcGl0ZQotLy8gcmVhc29u
YWJseSBnb29kIEMrKzExIHN1cHBvcnQsIHNvIHdlIHNldCBMQU5HX0NYWCBmb3IgaXQgYW5kCi0v
LyBuZXdlciB2ZXJzaW9ucyAoX01TQ19WRVIgPj0gMTkwMCkuCi0jaWYgKGRlZmluZWQoX19HWFhf
RVhQRVJJTUVOVEFMX0NYWDBYX18pIHx8IF9fY3BsdXNwbHVzID49IDIwMTEwM0wgfHwgXAotICAg
ICAoZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPj0gMTkwMCkpCi0vLyBIZWxwZXIgZm9y
IENIRUNLX05PVE5VTEwoKS4KLS8vCi0vLyBJbiBDKysxMSwgYWxsIGNhc2VzIGNhbiBiZSBoYW5k
bGVkIGJ5IGEgc2luZ2xlIGZ1bmN0aW9uLiBTaW5jZSB0aGUgdmFsdWUKLS8vIGNhdGVnb3J5IG9m
IHRoZSBhcmd1bWVudCBpcyBwcmVzZXJ2ZWQgKGFsc28gZm9yIHJ2YWx1ZSByZWZlcmVuY2VzKSwK
LS8vIG1lbWJlciBpbml0aWFsaXplciBsaXN0cyBsaWtlIHRoZSBvbmUgYmVsb3cgd2lsbCBjb21w
aWxlIGNvcnJlY3RseToKLS8vCi0vLyAgIEZvbygpCi0vLyAgICAgOiB4XyhDSEVDS19OT1ROVUxM
KE1ldGhvZFJldHVybmluZ1VuaXF1ZVB0cigpKSkge30KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
VCBDaGVja05vdE51bGwoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIG5h
bWVzLCBUJiYgdCkgewotIGlmICh0ID09IG51bGxwdHIpIHsKLSAgIExvZ01lc3NhZ2VGYXRhbChm
aWxlLCBsaW5lLCBuZXcgc3RkOjpzdHJpbmcobmFtZXMpKTsKLSB9Ci0gcmV0dXJuIHN0ZDo6Zm9y
d2FyZDxUPih0KTsKLX0KLQotI2Vsc2UKLQotLy8gQSBzbWFsbCBoZWxwZXIgZm9yIENIRUNLX05P
VE5VTEwoKS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotVCogQ2hlY2tOb3ROdWxsKGNvbnN0IGNo
YXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpuYW1lcywgVCogdCkgewotICBpZiAodCA9
PSBOVUxMKSB7Ci0gICAgTG9nTWVzc2FnZUZhdGFsKGZpbGUsIGxpbmUsIG5ldyBzdGQ6OnN0cmlu
ZyhuYW1lcykpOwotICB9Ci0gIHJldHVybiB0OwotfQotI2VuZGlmCi0KLS8vIEFsbG93IGZvbGtz
IHRvIHB1dCBhIGNvdW50ZXIgaW4gdGhlIExPR19FVkVSWV9YKCknZWQgbWVzc2FnZXMuIFRoaXMK
LS8vIG9ubHkgd29ya3MgaWYgb3N0cmVhbSBpcyBhIExvZ1N0cmVhbS4gSWYgdGhlIG9zdHJlYW0g
aXMgbm90IGEKLS8vIExvZ1N0cmVhbSB5b3UnbGwgZ2V0IGFuIGFzc2VydCBzYXlpbmcgYXMgbXVj
aCBhdCBydW50aW1lLgotR09PR0xFX0dMT0dfRExMX0RFQ0wgc3RkOjpvc3RyZWFtJiBvcGVyYXRv
cjw8KHN0ZDo6b3N0cmVhbSAmb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUFJJVkFURV9Db3VudGVyJik7Ci0KLQotLy8gRGVyaXZlZCBjbGFz
cyBmb3IgUExPRyooKSBhYm92ZS4KLWNsYXNzIEdPT0dMRV9HTE9HX0RMTF9ERUNMIEVycm5vTG9n
TWVzc2FnZSA6IHB1YmxpYyBMb2dNZXNzYWdlIHsKLSBwdWJsaWM6Ci0KLSAgRXJybm9Mb2dNZXNz
YWdlKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBMb2dTZXZlcml0eSBzZXZlcml0eSwgaW50
IGN0ciwKLSAgICAgICAgICAgICAgICAgIHZvaWQgKExvZ01lc3NhZ2U6OipzZW5kX21ldGhvZCko
KSk7Ci0KLSAgLy8gUG9zdHBlbmRzICI6IHN0cmVycm9yKGVycm5vKSBbZXJybm9dIi4KLSAgfkVy
cm5vTG9nTWVzc2FnZSgpOwotCi0gcHJpdmF0ZToKLSAgRXJybm9Mb2dNZXNzYWdlKGNvbnN0IEVy
cm5vTG9nTWVzc2FnZSYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBFcnJub0xvZ01lc3NhZ2Um
KTsKLX07Ci0KLQotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGV4cGxpY2l0bHkgaWdub3JlIHZh
bHVlcyBpbiB0aGUgY29uZGl0aW9uYWwKLS8vIGxvZ2dpbmcgbWFjcm9zLiAgVGhpcyBhdm9pZHMg
Y29tcGlsZXIgd2FybmluZ3MgbGlrZSAidmFsdWUgY29tcHV0ZWQKLS8vIGlzIG5vdCB1c2VkIiBh
bmQgInN0YXRlbWVudCBoYXMgbm8gZWZmZWN0Ii4KLQotY2xhc3MgR09PR0xFX0dMT0dfRExMX0RF
Q0wgTG9nTWVzc2FnZVZvaWRpZnkgewotIHB1YmxpYzoKLSAgTG9nTWVzc2FnZVZvaWRpZnkoKSB7
IH0KLSAgLy8gVGhpcyBoYXMgdG8gYmUgYW4gb3BlcmF0b3Igd2l0aCBhIHByZWNlZGVuY2UgbG93
ZXIgdGhhbiA8PCBidXQKLSAgLy8gaGlnaGVyIHRoYW4gPzoKLSAgdm9pZCBvcGVyYXRvciYoc3Rk
Ojpvc3RyZWFtJikgeyB9Ci19OwotCi0KLS8vIEZsdXNoZXMgYWxsIGxvZyBmaWxlcyB0aGF0IGNv
bnRhaW5zIG1lc3NhZ2VzIHRoYXQgYXJlIGF0IGxlYXN0IG9mCi0vLyB0aGUgc3BlY2lmaWVkIHNl
dmVyaXR5IGxldmVsLiAgVGhyZWFkLXNhZmUuCi1HT09HTEVfR0xPR19ETExfREVDTCB2b2lkIEZs
dXNoTG9nRmlsZXMoTG9nU2V2ZXJpdHkgbWluX3NldmVyaXR5KTsKLQotLy8gRmx1c2hlcyBhbGwg
bG9nIGZpbGVzIHRoYXQgY29udGFpbnMgbWVzc2FnZXMgdGhhdCBhcmUgYXQgbGVhc3Qgb2YKLS8v
IHRoZSBzcGVjaWZpZWQgc2V2ZXJpdHkgbGV2ZWwuIFRocmVhZC1ob3N0aWxlIGJlY2F1c2UgaXQg
aWdub3JlcwotLy8gbG9ja2luZyAtLSB1c2VkIGZvciBjYXRhc3Ryb3BoaWMgZmFpbHVyZXMuCi1H
T09HTEVfR0xPR19ETExfREVDTCB2b2lkIEZsdXNoTG9nRmlsZXNVbnNhZmUoTG9nU2V2ZXJpdHkg
bWluX3NldmVyaXR5KTsKLQotLy8KLS8vIFNldCB0aGUgZGVzdGluYXRpb24gdG8gd2hpY2ggYSBw
YXJ0aWN1bGFyIHNldmVyaXR5IGxldmVsIG9mIGxvZwotLy8gbWVzc2FnZXMgaXMgc2VudC4gIElm
IGJhc2VfZmlsZW5hbWUgaXMgIiIsIGl0IG1lYW5zICJkb24ndCBsb2cgdGhpcwotLy8gc2V2ZXJp
dHkiLiAgVGhyZWFkLXNhZmUuCi0vLwotR09PR0xFX0dMT0dfRExMX0RFQ0wgdm9pZCBTZXRMb2dE
ZXN0aW5hdGlvbihMb2dTZXZlcml0eSBzZXZlcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYmFzZV9maWxlbmFtZSk7Ci0KLS8vCi0v
LyBTZXQgdGhlIGJhc2VuYW1lIG9mIHRoZSBzeW1saW5rIHRvIHRoZSBsYXRlc3QgbG9nIGZpbGUg
YXQgYSBnaXZlbgotLy8gc2V2ZXJpdHkuICBJZiBzeW1saW5rX2Jhc2VuYW1lIGlzIGVtcHR5LCBk
byBub3QgbWFrZSBhIHN5bWxpbmsuICBJZgotLy8geW91IGRvbid0IGNhbGwgdGhpcyBmdW5jdGlv
biwgdGhlIHN5bWxpbmsgYmFzZW5hbWUgaXMgdGhlCi0vLyBpbnZvY2F0aW9uIG5hbWUgb2YgdGhl
IHByb2dyYW0uICBUaHJlYWQtc2FmZS4KLS8vCi1HT09HTEVfR0xPR19ETExfREVDTCB2b2lkIFNl
dExvZ1N5bWxpbmsoTG9nU2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogc3ltbGlua19iYXNlbmFtZSk7Ci0KLS8vCi0v
LyBVc2VkIHRvIHNlbmQgbG9ncyB0byBzb21lIG90aGVyIGtpbmQgb2YgZGVzdGluYXRpb24KLS8v
IFVzZXJzIHNob3VsZCBzdWJjbGFzcyBMb2dTaW5rIGFuZCBvdmVycmlkZSBzZW5kIHRvIGRvIHdo
YXRldmVyIHRoZXkgd2FudC4KLS8vIEltcGxlbWVudGF0aW9ucyBtdXN0IGJlIHRocmVhZC1zYWZl
IGJlY2F1c2UgYSBzaGFyZWQgaW5zdGFuY2Ugd2lsbAotLy8gYmUgY2FsbGVkIGZyb20gd2hpY2hl
dmVyIHRocmVhZCByYW4gdGhlIExPRyhYWFgpIGxpbmUuCi1jbGFzcyBHT09HTEVfR0xPR19ETExf
REVDTCBMb2dTaW5rIHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgfkxvZ1NpbmsoKTsKLQotICAvLyBT
aW5rJ3MgbG9nZ2luZyBsb2dpYyAobWVzc2FnZV9sZW4gaXMgc3VjaCBhcyB0byBleGNsdWRlICdc
bicgYXQgdGhlIGVuZCkuCi0gIC8vIFRoaXMgbWV0aG9kIGNhbid0IHVzZSBMT0coKSBvciBDSEVD
SygpIGFzIGxvZ2dpbmcgc3lzdGVtIG11dGV4KHMpIGFyZSBoZWxkCi0gIC8vIGR1cmluZyB0aGlz
IGNhbGwuCi0gIHZpcnR1YWwgdm9pZCBzZW5kKExvZ1NldmVyaXR5IHNldmVyaXR5LCBjb25zdCBj
aGFyKiBmdWxsX2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBiYXNl
X2ZpbGVuYW1lLCBpbnQgbGluZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IDo6
dG0qIHRtX3RpbWUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHNp
emVfdCBtZXNzYWdlX2xlbikgPSAwOwotCi0gIC8vIFJlZGVmaW5lIHRoaXMgdG8gaW1wbGVtZW50
IHdhaXRpbmcgZm9yCi0gIC8vIHRoZSBzaW5rJ3MgbG9nZ2luZyBsb2dpYyB0byBjb21wbGV0ZS4K
LSAgLy8gSXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgZWFjaCBzZW5kKCkgcmV0dXJucywKLSAgLy8g
YnV0IGJlZm9yZSB0aGF0IExvZ01lc3NhZ2UgZXhpdHMgb3IgY3Jhc2hlcy4KLSAgLy8gQnkgZGVm
YXVsdCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KLSAgLy8gVXNpbmcgdGhpcyBmdW5jdGlv
biBvbmUgY2FuIGltcGxlbWVudCBjb21wbGV4IGxvZ2ljIGZvciBzZW5kKCkKLSAgLy8gdGhhdCBp
dHNlbGYgaW52b2x2ZXMgbG9nZ2luZzsgYW5kIGRvIGFsbCB0aGlzIHcvbyBjYXVzaW5nIGRlYWRs
b2NrcyBhbmQKLSAgLy8gaW5jb25zaXN0ZW50IHJlYXJyYW5nZW1lbnQgb2YgbG9nIG1lc3NhZ2Vz
LgotICAvLyBFLmcuIGlmIGEgTG9nU2luayBoYXMgdGhyZWFkLXNwZWNpZmljIGFjdGlvbnMsIHRo
ZSBzZW5kKCkgbWV0aG9kCi0gIC8vIGNhbiBzaW1wbHkgYWRkIHRoZSBtZXNzYWdlIHRvIGEgcXVl
dWUgYW5kIHdha2UgdXAgYW5vdGhlciB0aHJlYWQgdGhhdAotICAvLyBoYW5kbGVzIHJlYWwgbG9n
Z2luZyB3aGlsZSBpdHNlbGYgbWFraW5nIHNvbWUgTE9HKCkgY2FsbHM7Ci0gIC8vIFdhaXRUaWxs
U2VudCgpIGNhbiBiZSBpbXBsZW1lbnRlZCB0byB3YWl0IGZvciB0aGF0IGxvZ2ljIHRvIGNvbXBs
ZXRlLgotICAvLyBTZWUgb3VyIHVuaXR0ZXN0IGZvciBhbiBleGFtcGxlLgotICB2aXJ0dWFsIHZv
aWQgV2FpdFRpbGxTZW50KCk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgbm9ybWFsIHRleHQgb3V0cHV0
IG9mIHRoZSBsb2cgbWVzc2FnZS4KLSAgLy8gQ2FuIGJlIHVzZWZ1bCB0byBpbXBsZW1lbnQgc2Vu
ZCgpLgotICBzdGF0aWMgc3RkOjpzdHJpbmcgVG9TdHJpbmcoTG9nU2V2ZXJpdHkgc2V2ZXJpdHks
IGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RydWN0IDo6dG0qIHRtX3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBtZXNzYWdlLCBzaXplX3QgbWVzc2FnZV9sZW4pOwotfTsKLQotLy8g
QWRkIG9yIHJlbW92ZSBhIExvZ1NpbmsgYXMgYSBjb25zdW1lciBvZiBsb2dnaW5nIGRhdGEuICBU
aHJlYWQtc2FmZS4KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIHZvaWQgQWRkTG9nU2luayhMb2dTaW5r
ICpkZXN0aW5hdGlvbik7Ci1HT09HTEVfR0xPR19ETExfREVDTCB2b2lkIFJlbW92ZUxvZ1Npbmso
TG9nU2luayAqZGVzdGluYXRpb24pOwotCi0vLwotLy8gU3BlY2lmeSBhbiAiZXh0ZW5zaW9uIiBh
ZGRlZCB0byB0aGUgZmlsZW5hbWUgc3BlY2lmaWVkIHZpYQotLy8gU2V0TG9nRGVzdGluYXRpb24u
ICBUaGlzIGFwcGxpZXMgdG8gYWxsIHNldmVyaXR5IGxldmVscy4gIEl0J3MKLS8vIG9mdGVuIHVz
ZWQgdG8gYXBwZW5kIHRoZSBwb3J0IHdlJ3JlIGxpc3RlbmluZyBvbiB0byB0aGUgbG9nZmlsZQot
Ly8gbmFtZS4gIFRocmVhZC1zYWZlLgotLy8KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIHZvaWQgU2V0
TG9nRmlsZW5hbWVFeHRlbnNpb24oCi0gICAgY29uc3QgY2hhciogZmlsZW5hbWVfZXh0ZW5zaW9u
KTsKLQotLy8KLS8vIE1ha2UgaXQgc28gdGhhdCBhbGwgbG9nIG1lc3NhZ2VzIG9mIGF0IGxlYXN0
IGEgcGFydGljdWxhciBzZXZlcml0eQotLy8gYXJlIGxvZ2dlZCB0byBzdGRlcnIgKGluIGFkZGl0
aW9uIHRvIGxvZ2dpbmcgdG8gdGhlIHVzdWFsIGxvZwotLy8gZmlsZShzKSkuICBUaHJlYWQtc2Fm
ZS4KLS8vCi1HT09HTEVfR0xPR19ETExfREVDTCB2b2lkIFNldFN0ZGVyckxvZ2dpbmcoTG9nU2V2
ZXJpdHkgbWluX3NldmVyaXR5KTsKLQotLy8KLS8vIE1ha2UgaXQgc28gdGhhdCBhbGwgbG9nIG1l
c3NhZ2VzIGdvIG9ubHkgdG8gc3RkZXJyLiAgVGhyZWFkLXNhZmUuCi0vLwotR09PR0xFX0dMT0df
RExMX0RFQ0wgdm9pZCBMb2dUb1N0ZGVycigpOwotCi0vLwotLy8gTWFrZSBpdCBzbyB0aGF0IGFs
bCBsb2cgbWVzc2FnZXMgb2YgYXQgbGVhc3QgYSBwYXJ0aWN1bGFyIHNldmVyaXR5IGFyZQotLy8g
bG9nZ2VkIHZpYSBlbWFpbCB0byBhIGxpc3Qgb2YgYWRkcmVzc2VzIChpbiBhZGRpdGlvbiB0byBs
b2dnaW5nIHRvIHRoZQotLy8gdXN1YWwgbG9nIGZpbGUocykpLiAgVGhlIGxpc3Qgb2YgYWRkcmVz
c2VzIGlzIGp1c3QgYSBzdHJpbmcgY29udGFpbmluZwotLy8gdGhlIGVtYWlsIGFkZHJlc3NlcyB0
byBzZW5kIHRvIChzZXBhcmF0ZWQgYnkgc3BhY2VzLCBzYXkpLiAgVGhyZWFkLXNhZmUuCi0vLwot
R09PR0xFX0dMT0dfRExMX0RFQ0wgdm9pZCBTZXRFbWFpbExvZ2dpbmcoTG9nU2V2ZXJpdHkgbWlu
X3NldmVyaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogYWRkcmVzc2VzKTsKLQotLy8gQSBzaW1wbGUgZnVuY3Rpb24gdGhhdCBzZW5kcyBl
bWFpbC4gZGVzdCBpcyBhIGNvbW1tYS1zZXBhcmF0ZWQKLS8vIGxpc3Qgb2YgYWRkcmVzc2Vzcy4g
IFRocmVhZC1zYWZlLgotR09PR0xFX0dMT0dfRExMX0RFQ0wgYm9vbCBTZW5kRW1haWwoY29uc3Qg
Y2hhciAqZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKnN1YmplY3QsIGNvbnN0IGNoYXIgKmJvZHkpOwotCi1HT09HTEVfR0xPR19ETExfREVDTCBj
b25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIEdldExvZ2dpbmdEaXJlY3RvcmllcygpOwot
Ci0vLyBGb3IgdGVzdHMgb25seTogIENsZWFyIHRoZSBpbnRlcm5hbCBbY2FjaGVkXSBsaXN0IG9m
IGxvZ2dpbmcgZGlyZWN0b3JpZXMgdG8KLS8vIGZvcmNlIGEgcmVmcmVzaCB0aGUgbmV4dCB0aW1l
IEdldExvZ2dpbmdEaXJlY3RvcmllcyBpcyBjYWxsZWQuCi0vLyBUaHJlYWQtaG9zdGlsZS4KLXZv
aWQgVGVzdE9ubHlfQ2xlYXJMb2dnaW5nRGlyZWN0b3JpZXNMaXN0KCk7Ci0KLS8vIFJldHVybnMg
YSBzZXQgb2YgZXhpc3RpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLCB3aGljaCB3aWxsIGJlIGEK
LS8vIHN1YnNldCBvZiB0aGUgZGlyZWN0b3JpZXMgcmV0dXJuZWQgYnkgR2V0TG9nZ2luRGlyZWN0
b3JpZXMoKS4KLS8vIFRocmVhZC1zYWZlLgotR09PR0xFX0dMT0dfRExMX0RFQ0wgdm9pZCBHZXRF
eGlzdGluZ1RlbXBEaXJlY3RvcmllcygKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIGxp
c3QpOwotCi0vLyBQcmludCBhbnkgZmF0YWwgbWVzc2FnZSBhZ2FpbiAtLSB1c2VmdWwgdG8gY2Fs
bCBmcm9tIHNpZ25hbCBoYW5kbGVyCi0vLyBzbyB0aGF0IHRoZSBsYXN0IHRoaW5nIGluIHRoZSBv
dXRwdXQgaXMgdGhlIGZhdGFsIG1lc3NhZ2UuCi0vLyBUaHJlYWQtaG9zdGlsZSwgYnV0IGEgcmFj
ZSBpcyB1bmxpa2VseS4KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIHZvaWQgUmVwcmludEZhdGFsTWVz
c2FnZSgpOwotCi0vLyBUcnVuY2F0ZSBhIGxvZyBmaWxlIHRoYXQgbWF5IGJlIHRoZSBhcHBlbmQt
b25seSBvdXRwdXQgb2YgbXVsdGlwbGUKLS8vIHByb2Nlc3NlcyBhbmQgaGVuY2UgY2FuJ3Qgc2lt
cGx5IGJlIHJlbmFtZWQvcmVvcGVuZWQgKHR5cGljYWxseSBhCi0vLyBzdGRvdXQvc3RkZXJyKS4g
IElmIHRoZSBmaWxlICJwYXRoIiBpcyA+ICJsaW1pdCIgYnl0ZXMsIGNvcHkgdGhlCi0vLyBsYXN0
ICJrZWVwIiBieXRlcyB0byBvZmZzZXQgMCBhbmQgdHJ1bmNhdGUgdGhlIHJlc3QuIFNpbmNlIHdl
IGNvdWxkCi0vLyBiZSByYWNpbmcgd2l0aCBvdGhlciB3cml0ZXJzLCB0aGlzIGFwcHJvYWNoIGhh
cyB0aGUgcG90ZW50aWFsIHRvCi0vLyBsb3NlIHZlcnkgc21hbGwgYW1vdW50cyBvZiBkYXRhLiBG
b3Igc2VjdXJpdHksIG9ubHkgZm9sbG93IHN5bWxpbmtzCi0vLyBpZiB0aGUgcGF0aCBpcyAvcHJv
Yy9zZWxmL2ZkLyoKLUdPT0dMRV9HTE9HX0RMTF9ERUNMIHZvaWQgVHJ1bmNhdGVMb2dGaWxlKGNv
bnN0IGNoYXIgKnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQ2NCBsaW1pdCwgaW50NjQga2VlcCk7Ci0KLS8vIFRydW5jYXRlIHN0ZG91dCBhbmQgc3Rk
ZXJyIGlmIHRoZXkgYXJlIG92ZXIgdGhlIHZhbHVlIHNwZWNpZmllZCBieQotLy8gLS1tYXhfbG9n
X3NpemU7IGtlZXAgdGhlIGZpbmFsIDFNQi4gIFRoaXMgZnVuY3Rpb24gaGFzIHRoZSBzYW1lCi0v
LyByYWNlIGNvbmRpdGlvbiBhcyBUcnVuY2F0ZUxvZ0ZpbGUuCi1HT09HTEVfR0xPR19ETExfREVD
TCB2b2lkIFRydW5jYXRlU3Rkb3V0U3RkZXJyKCk7Ci0KLS8vIFJldHVybiB0aGUgc3RyaW5nIHJl
cHJlc2VudGF0aW9uIG9mIHRoZSBwcm92aWRlZCBMb2dTZXZlcml0eSBsZXZlbC4KLS8vIFRocmVh
ZC1zYWZlLgotR09PR0xFX0dMT0dfRExMX0RFQ0wgY29uc3QgY2hhciogR2V0TG9nU2V2ZXJpdHlO
YW1lKExvZ1NldmVyaXR5IHNldmVyaXR5KTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbXBsZW1l
bnRhdGlvbiBkZXRhaWxzIHRoYXQgYXJlIG5vdCB1c2VmdWwgdG8gbW9zdCBjbGllbnRzCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotLy8gQSBMb2dnZXIgaXMgdGhlIGludGVyZmFjZSB1c2VkIGJ5IGxvZ2dp
bmcgbW9kdWxlcyB0byBlbWl0IGVudHJpZXMKLS8vIHRvIGEgbG9nLiAgQSB0eXBpY2FsIGltcGxl
bWVudGF0aW9uIHdpbGwgZHVtcCBmb3JtYXR0ZWQgZGF0YSB0byBhCi0vLyBzZXF1ZW5jZSBvZiBm
aWxlcy4gIFdlIGFsc28gcHJvdmlkZSBpbnRlcmZhY2VzIHRoYXQgd2lsbCBmb3J3YXJkCi0vLyB0
aGUgZGF0YSB0byBhbm90aGVyIHRocmVhZCBzbyB0aGF0IHRoZSBpbnZva2VyIG5ldmVyIGJsb2Nr
cy4KLS8vIEltcGxlbWVudGF0aW9ucyBzaG91bGQgYmUgdGhyZWFkLXNhZmUgc2luY2UgdGhlIGxv
Z2dpbmcgc3lzdGVtCi0vLyB3aWxsIHdyaXRlIHRvIHRoZW0gZnJvbSBtdWx0aXBsZSB0aHJlYWRz
LgotCi1uYW1lc3BhY2UgYmFzZSB7Ci0KLWNsYXNzIEdPT0dMRV9HTE9HX0RMTF9ERUNMIExvZ2dl
ciB7Ci0gcHVibGljOgotICB2aXJ0dWFsIH5Mb2dnZXIoKTsKLQotICAvLyBXcml0ZXMgIm1lc3Nh
Z2VbMCxtZXNzYWdlX2xlbi0xXSIgY29ycmVzcG9uZGluZyB0byBhbiBldmVudCB0aGF0Ci0gIC8v
IG9jY3VycmVkIGF0ICJ0aW1lc3RhbXAiLiAgSWYgImZvcmNlX2ZsdXNoIiBpcyB0cnVlLCB0aGUg
bG9nIGZpbGUKLSAgLy8gaXMgZmx1c2hlZCBpbW1lZGlhdGVseS4KLSAgLy8KLSAgLy8gVGhlIGlu
cHV0IG1lc3NhZ2UgaGFzIGFscmVhZHkgYmVlbiBmb3JtYXR0ZWQgYXMgZGVlbWVkCi0gIC8vIGFw
cHJvcHJpYXRlIGJ5IHRoZSBoaWdoZXIgbGV2ZWwgbG9nZ2luZyBmYWNpbGl0eS4gIEZvciBleGFt
cGxlLAotICAvLyB0ZXh0dWFsIGxvZyBtZXNzYWdlcyBhbHJlYWR5IGNvbnRhaW4gdGltZXN0YW1w
cywgYW5kIHRoZQotICAvLyBmaWxlOmxpbmVudW1iZXIgaGVhZGVyLgotICB2aXJ0dWFsIHZvaWQg
V3JpdGUoYm9vbCBmb3JjZV9mbHVzaCwKLSAgICAgICAgICAgICAgICAgICAgIHRpbWVfdCB0aW1l
c3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlLAotICAgICAg
ICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VfbGVuKSA9IDA7Ci0KLSAgLy8gRmx1c2ggYW55IGJ1
ZmZlcmVkIG1lc3NhZ2VzCi0gIHZpcnR1YWwgdm9pZCBGbHVzaCgpID0gMDsKLQotICAvLyBHZXQg
dGhlIGN1cnJlbnQgTE9HIGZpbGUgc2l6ZS4KLSAgLy8gVGhlIHJldHVybmVkIHZhbHVlIGlzIGFw
cHJveGltYXRlIHNpbmNlIHNvbWUKLSAgLy8gbG9nZ2VkIGRhdGEgbWF5IG5vdCBoYXZlIGJlZW4g
Zmx1c2hlZCB0byBkaXNrIHlldC4KLSAgdmlydHVhbCB1aW50MzIgTG9nU2l6ZSgpID0gMDsKLX07
Ci0KLS8vIEdldCB0aGUgbG9nZ2VyIGZvciB0aGUgc3BlY2lmaWVkIHNldmVyaXR5IGxldmVsLiAg
VGhlIGxvZ2dlcgotLy8gcmVtYWlucyB0aGUgcHJvcGVydHkgb2YgdGhlIGxvZ2dpbmcgbW9kdWxl
IGFuZCBzaG91bGQgbm90IGJlCi0vLyBkZWxldGVkIGJ5IHRoZSBjYWxsZXIuICBUaHJlYWQtc2Fm
ZS4KLWV4dGVybiBHT09HTEVfR0xPR19ETExfREVDTCBMb2dnZXIqIEdldExvZ2dlcihMb2dTZXZl
cml0eSBsZXZlbCk7Ci0KLS8vIFNldCB0aGUgbG9nZ2VyIGZvciB0aGUgc3BlY2lmaWVkIHNldmVy
aXR5IGxldmVsLiAgVGhlIGxvZ2dlcgotLy8gYmVjb21lcyB0aGUgcHJvcGVydHkgb2YgdGhlIGxv
Z2dpbmcgbW9kdWxlIGFuZCBzaG91bGQgbm90Ci0vLyBiZSBkZWxldGVkIGJ5IHRoZSBjYWxsZXIu
ICBUaHJlYWQtc2FmZS4KLWV4dGVybiBHT09HTEVfR0xPR19ETExfREVDTCB2b2lkIFNldExvZ2dl
cihMb2dTZXZlcml0eSBsZXZlbCwgTG9nZ2VyKiBsb2dnZXIpOwotCi19Ci0KLS8vIGdsaWJjIGhh
cyB0cmFkaXRpb25hbGx5IGltcGxlbWVudGVkIHR3byBpbmNvbXBhdGlibGUgdmVyc2lvbnMgb2YK
LS8vIHN0cmVycm9yX3IoKS4gVGhlcmUgaXMgYSBwb29ybHkgZGVmaW5lZCBjb252ZW50aW9uIGZv
ciBwaWNraW5nIHRoZQotLy8gdmVyc2lvbiB0aGF0IHdlIHdhbnQsIGJ1dCBpdCBpcyBub3QgY2xl
YXIgd2hldGhlciBpdCBldmVuIHdvcmtzIHdpdGgKLS8vIGFsbCB2ZXJzaW9ucyBvZiBnbGliYy4K
LS8vIFNvLCBpbnN0ZWFkLCB3ZSBwcm92aWRlIHRoaXMgd3JhcHBlciB0aGF0IGF1dG9tYXRpY2Fs
bHkgZGV0ZWN0cyB0aGUKLS8vIHZlcnNpb24gdGhhdCBpcyBpbiB1c2UsIGFuZCB0aGVuIGltcGxl
bWVudHMgUE9TSVggc2VtYW50aWNzLgotLy8gTi5CLiBJbiBhZGRpdGlvbiB0byB3aGF0IFBPU0lY
IHNheXMsIHdlIGFsc28gZ3VhcmFudGVlIHRoYXQgImJ1ZiIgd2lsbAotLy8gYmUgc2V0IHRvIGFu
IGVtcHR5IHN0cmluZywgaWYgdGhpcyBmdW5jdGlvbiBmYWlsZWQuIFRoaXMgbWVhbnMsIGluIG1v
c3QKLS8vIGNhc2VzLCB5b3UgZG8gbm90IG5lZWQgdG8gY2hlY2sgdGhlIGVycm9yIGNvZGUgYW5k
IHlvdSBjYW4gZGlyZWN0bHkKLS8vIHVzZSB0aGUgdmFsdWUgb2YgImJ1ZiIuIEl0IHdpbGwgbmV2
ZXIgaGF2ZSBhbiB1bmRlZmluZWQgdmFsdWUuCi0vLyBERVBSRUNBVEVEOiBVc2UgU3RyRXJyb3Io
aW50KSBpbnN0ZWFkLgotR09PR0xFX0dMT0dfRExMX0RFQ0wgaW50IHBvc2l4X3N0cmVycm9yX3Io
aW50IGVyciwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKLQotLy8gQSB0aHJlYWQtc2FmZSByZXBs
YWNlbWVudCBmb3Igc3RyZXJyb3IoKS4gUmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZQot
Ly8gZ2l2ZW4gUE9TSVggZXJyb3IgY29kZS4KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIHN0ZDo6c3Ry
aW5nIFN0ckVycm9yKGludCBlcnIpOwotCi0vLyBBIGNsYXNzIGZvciB3aGljaCB3ZSBkZWZpbmUg
b3BlcmF0b3I8PCwgd2hpY2ggZG9lcyBub3RoaW5nLgotY2xhc3MgR09PR0xFX0dMT0dfRExMX0RF
Q0wgTnVsbFN0cmVhbSA6IHB1YmxpYyBMb2dNZXNzYWdlOjpMb2dTdHJlYW0gewotIHB1YmxpYzoK
LSAgLy8gSW5pdGlhbGl6ZSB0aGUgTG9nU3RyZWFtIHNvIHRoZSBtZXNzYWdlcyBjYW4gYmUgd3Jp
dHRlbiBzb21ld2hlcmUKLSAgLy8gKHRoZXknbGwgbmV2ZXIgYmUgYWN0dWFsbHkgZGlzcGxheWVk
KS4gVGhpcyB3aWxsIGJlIG5lZWRlZCBpZiBhCi0gIC8vIE51bGxTdHJlYW0mIGlzIGltcGxpY2l0
bHkgY29udmVydGVkIHRvIExvZ1N0cmVhbSYsIGluIHdoaWNoIGNhc2UKLSAgLy8gdGhlIG92ZXJs
b2FkZWQgTnVsbFN0cmVhbTo6b3BlcmF0b3I8PCB3aWxsIG5vdCBiZSBpbnZva2VkLgotICBOdWxs
U3RyZWFtKCkgOiBMb2dNZXNzYWdlOjpMb2dTdHJlYW0obWVzc2FnZV9idWZmZXJfLCAxLCAwKSB7
IH0KLSAgTnVsbFN0cmVhbShjb25zdCBjaGFyKiAvKmZpbGUqLywgaW50IC8qbGluZSovLAotICAg
ICAgICAgICAgIGNvbnN0IENoZWNrT3BTdHJpbmcmIC8qcmVzdWx0Ki8pIDoKLSAgICAgIExvZ01l
c3NhZ2U6OkxvZ1N0cmVhbShtZXNzYWdlX2J1ZmZlcl8sIDEsIDApIHsgfQotICBOdWxsU3RyZWFt
ICZzdHJlYW0oKSB7IHJldHVybiAqdGhpczsgfQotIHByaXZhdGU6Ci0gIC8vIEEgdmVyeSBzaG9y
dCBidWZmZXIgZm9yIG1lc3NhZ2VzICh3aGljaCB3ZSBkaXNjYXJkIGFueXdheSkuIFRoaXMKLSAg
Ly8gd2lsbCBiZSBuZWVkZWQgaWYgTnVsbFN0cmVhbSYgY29udmVydGVkIHRvIExvZ1N0cmVhbSYg
KGUuZy4gYXMgYQotICAvLyByZXN1bHQgb2YgYSBjb25kaXRpb25hbCBleHByZXNzaW9uKS4KLSAg
Y2hhciBtZXNzYWdlX2J1ZmZlcl9bMl07Ci19OwotCi0vLyBEbyBub3RoaW5nLiBUaGlzIG9wZXJh
dG9yIGlzIGlubGluZSwgYWxsb3dpbmcgdGhlIG1lc3NhZ2UgdG8gYmUKLS8vIGNvbXBpbGVkIGF3
YXkuIFRoZSBtZXNzYWdlIHdpbGwgbm90IGJlIGNvbXBpbGVkIGF3YXkgaWYgd2UgZG8KLS8vIHNv
bWV0aGluZyBsaWtlIChmbGFnID8gTE9HKElORk8pIDogTE9HKEVSUk9SKSkgPDwgbWVzc2FnZTsg
d2hlbgotLy8gU0tJUF9MT0c9V0FSTklORy4gSW4gdGhvc2UgY2FzZXMsIE51bGxTdHJlYW0gd2ls
bCBiZSBpbXBsaWNpdGx5Ci0vLyBjb252ZXJ0ZWQgdG8gTG9nU3RyZWFtIGFuZCB0aGUgbWVzc2Fn
ZSB3aWxsIGJlIGNvbXB1dGVkIGFuZCB0aGVuCi0vLyBxdWlldGx5IGRpc2NhcmRlZC4KLXRlbXBs
YXRlPGNsYXNzIFQ+Ci1pbmxpbmUgTnVsbFN0cmVhbSYgb3BlcmF0b3I8PChOdWxsU3RyZWFtICZz
dHIsIGNvbnN0IFQgJikgeyByZXR1cm4gc3RyOyB9Ci0KLS8vIFNpbWlsYXIgdG8gTnVsbFN0cmVh
bSwgYnV0IGFib3J0cyB0aGUgcHJvZ3JhbSAod2l0aG91dCBzdGFjawotLy8gdHJhY2UpLCBsaWtl
IExvZ01lc3NhZ2VGYXRhbC4KLWNsYXNzIEdPT0dMRV9HTE9HX0RMTF9ERUNMIE51bGxTdHJlYW1G
YXRhbCA6IHB1YmxpYyBOdWxsU3RyZWFtIHsKLSBwdWJsaWM6Ci0gIE51bGxTdHJlYW1GYXRhbCgp
IHsgfQotICBOdWxsU3RyZWFtRmF0YWwoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0
IENoZWNrT3BTdHJpbmcmIHJlc3VsdCkgOgotICAgICAgTnVsbFN0cmVhbShmaWxlLCBsaW5lLCBy
ZXN1bHQpIHsgfQotICBAYWNfY3ZfX19hdHRyaWJ1dGVfX19ub3JldHVybkAgfk51bGxTdHJlYW1G
YXRhbCgpIHRocm93ICgpIHsgX2V4aXQoMSk7IH0KLX07Ci0KLS8vIEluc3RhbGwgYSBzaWduYWwg
aGFuZGxlciB0aGF0IHdpbGwgZHVtcCBzaWduYWwgaW5mb3JtYXRpb24gYW5kIGEgc3RhY2sKLS8v
IHRyYWNlIHdoZW4gdGhlIHByb2dyYW0gY3Jhc2hlcyBvbiBjZXJ0YWluIHNpZ25hbHMuICBXZSds
bCBpbnN0YWxsIHRoZQotLy8gc2lnbmFsIGhhbmRsZXIgZm9yIHRoZSBmb2xsb3dpbmcgc2lnbmFs
cy4KLS8vCi0vLyBTSUdTRUdWLCBTSUdJTEwsIFNJR0ZQRSwgU0lHQUJSVCwgU0lHQlVTLCBhbmQg
U0lHVEVSTS4KLS8vCi0vLyBCeSBkZWZhdWx0LCB0aGUgc2lnbmFsIGhhbmRsZXIgd2lsbCB3cml0
ZSB0aGUgZmFpbHVyZSBkdW1wIHRvIHRoZQotLy8gc3RhbmRhcmQgZXJyb3IuICBZb3UgY2FuIGN1
c3RvbWl6ZSB0aGUgZGVzdGluYXRpb24gYnkgaW5zdGFsbGluZyB5b3VyCi0vLyBvd24gd3JpdGVy
IGZ1bmN0aW9uIGJ5IEluc3RhbGxGYWlsdXJlV3JpdGVyKCkgYmVsb3cuCi0vLwotLy8gTm90ZSBv
biB0aHJlYWRpbmc6Ci0vLwotLy8gVGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3Jl
IHRocmVhZHMgYXJlIGNyZWF0ZWQsIGlmIHlvdSB3YW50Ci0vLyB0byB1c2UgdGhlIGZhaWx1cmUg
c2lnbmFsIGhhbmRsZXIgZm9yIGFsbCB0aHJlYWRzLiAgVGhlIHN0YWNrIHRyYWNlCi0vLyB3aWxs
IGJlIHNob3duIG9ubHkgZm9yIHRoZSB0aHJlYWQgdGhhdCByZWNlaXZlcyB0aGUgc2lnbmFsLiAg
SW4gb3RoZXIKLS8vIHdvcmRzLCBzdGFjayB0cmFjZXMgb2Ygb3RoZXIgdGhyZWFkcyB3b24ndCBi
ZSBzaG93bi4KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIHZvaWQgSW5zdGFsbEZhaWx1cmVTaWduYWxI
YW5kbGVyKCk7Ci0KLS8vIEluc3RhbGxzIGEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIGZvciB3cml0
aW5nIHRoZSBmYWlsdXJlIGR1bXAuICAiZGF0YSIKLS8vIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBi
ZWdpbm5pbmcgb2YgYSBtZXNzYWdlIHRvIGJlIHdyaXR0ZW4sIGFuZCAic2l6ZSIKLS8vIGlzIHRo
ZSBzaXplIG9mIHRoZSBtZXNzYWdlLiAgWW91IHNob3VsZCBub3QgZXhwZWN0IHRoZSBkYXRhIGlz
Ci0vLyB0ZXJtaW5hdGVkIHdpdGggJ1wwJy4KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIHZvaWQgSW5z
dGFsbEZhaWx1cmVXcml0ZXIoCi0gICAgdm9pZCAoKndyaXRlcikoY29uc3QgY2hhciogZGF0YSwg
aW50IHNpemUpKTsKLQotQGFjX2dvb2dsZV9lbmRfbmFtZXNwYWNlQAotCi0jZW5kaWYgLy8gX0xP
R0dJTkdfSF8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2dsb2cvc3JjL2dsb2cvcmF3X2xvZ2dpbmcuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL2ZvbGx5L2dsb2cvc3JjL2dsb2cvcmF3X2xvZ2dpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjUyNzhmNjI4MDNmNDc4MmMzYzdjN2NjMjg2ZmNjOWQ2Mzg5YjY3MC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9nbG9nL3NyYy9nbG9nL3Jhd19sb2dnaW5nLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDA2LCBHb29nbGUg
SW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLS8vCi0vLyBBdXRob3I6IE1heGltIExpZmFudHNldgotLy8KLS8v
IFRocmVhZC1zYWZlIGxvZ2dpbmcgcm91dGluZXMgdGhhdCBkbyBub3QgYWxsb2NhdGUgYW55IG1l
bW9yeSBvcgotLy8gYWNxdWlyZSBhbnkgbG9ja3MsIGFuZCBjYW4gdGhlcmVmb3JlIGJlIHVzZWQg
YnkgbG93LWxldmVsIG1lbW9yeQotLy8gYWxsb2NhdGlvbiBhbmQgc3luY2hyb25pemF0aW9uIGNv
ZGUuCi0KLSNpZm5kZWYgQkFTRV9SQVdfTE9HR0lOR19IXwotI2RlZmluZSBCQVNFX1JBV19MT0dH
SU5HX0hfCi0KLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLW5hbWVzcGFjZSBnb29nbGUgewotCi0jaW5j
bHVkZSAiZ2xvZy9sb2dfc2V2ZXJpdHkuaCIKLSNpbmNsdWRlICJnbG9nL3Zsb2dfaXNfb24uaCIK
LQotLy8gQW5ub3lpbmcgc3R1ZmYgZm9yIHdpbmRvd3MgLS0gbWFrZXMgc3VyZSBjbGllbnRzIGNh
biBpbXBvcnQgdGhlc2UgZnVuY3Rpb25zCi0jaWZuZGVmIEdPT0dMRV9HTE9HX0RMTF9ERUNMCi0j
IGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQotIyAgIGRlZmluZSBH
T09HTEVfR0xPR19ETExfREVDTCAgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jIGVsc2UKLSMgICBk
ZWZpbmUgR09PR0xFX0dMT0dfRExMX0RFQ0wKLSMgZW5kaWYKLSNlbmRpZgotCi0vLyBUaGlzIGlz
IHNpbWlsYXIgdG8gTE9HKHNldmVyaXR5KSA8PCBmb3JtYXQuLi4gYW5kIFZMT0cobGV2ZWwpIDw8
IGZvcm1hdC4uLAotLy8gYnV0Ci0vLyAqIGl0IGlzIHRvIGJlIHVzZWQgT05MWSBieSBsb3ctbGV2
ZWwgbW9kdWxlcyB0aGF0IGNhbid0IHVzZSBub3JtYWwgTE9HKCkKLS8vICogaXQgaXMgZGVzaWdl
ZCB0byBiZSBhIGxvdy1sZXZlbCBsb2dnZXIgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkKLS8v
ICAgbWVtb3J5IGFuZCBkb2VzIG5vdCBuZWVkIGFueSBsb2NrcywgaGVuY2U6Ci0vLyAqIGl0IGxv
Z3Mgc3RyYWlnaHQgYW5kIE9OTFkgdG8gU1RERVJSIHcvbyBidWZmZXJpbmcKLS8vICogaXQgdXNl
cyBhbiBleHBsaWNpdCBmb3JtYXQgYW5kIGFyZ3VtZW50cyBsaXN0Ci0vLyAqIGl0IHdpbGwgc2ls
ZW50bHkgY2hvcCBvZmYgcmVhbGx5IGxvbmcgbWVzc2FnZSBzdHJpbmdzCi0vLyBVc2FnZSBleGFt
cGxlOgotLy8gICBSQVdfTE9HKEVSUk9SLCAiRmFpbGVkIGZvbyB3aXRoICVpOiAlcyIsIHN0YXR1
cywgZXJyb3IpOwotLy8gICBSQVdfVkxPRygzLCAic3RhdHVzIGlzICVpIiwgc3RhdHVzKTsKLS8v
IFRoZXNlIHdpbGwgcHJpbnQgYW4gYWxtb3N0IHN0YW5kYXJkIGxvZyBsaW5lcyBsaWtlIHRoaXMg
dG8gc3RkZXJyIG9ubHk6Ci0vLyAgIEUwODIxIDIxMTMxNyBmaWxlLmNjOjEyM10gUkFXOiBGYWls
ZWQgZm9vIHdpdGggMjI6IGJhZF9maWxlCi0vLyAgIEkwODIxIDIxMTMxNyBmaWxlLmNjOjE0Ml0g
UkFXOiBzdGF0dXMgaXMgMjAKLSNkZWZpbmUgUkFXX0xPRyhzZXZlcml0eSwgLi4uKSBcCi0gIGRv
IHsgXAotICAgIHN3aXRjaCAoZ29vZ2xlOjpHTE9HXyAjIyBzZXZlcml0eSkgeyAgXAotICAgICAg
Y2FzZSAwOiBcCi0gICAgICAgIFJBV19MT0dfSU5GTyhfX1ZBX0FSR1NfXyk7IFwKLSAgICAgICAg
YnJlYWs7IFwKLSAgICAgIGNhc2UgMTogXAotICAgICAgICBSQVdfTE9HX1dBUk5JTkcoX19WQV9B
UkdTX18pOyBcCi0gICAgICAgIGJyZWFrOyBcCi0gICAgICBjYXNlIDI6IFwKLSAgICAgICAgUkFX
X0xPR19FUlJPUihfX1ZBX0FSR1NfXyk7IFwKLSAgICAgICAgYnJlYWs7IFwKLSAgICAgIGNhc2Ug
MzogXAotICAgICAgICBSQVdfTE9HX0ZBVEFMKF9fVkFfQVJHU19fKTsgXAotICAgICAgICBicmVh
azsgXAotICAgICAgZGVmYXVsdDogXAotICAgICAgICBicmVhazsgXAotICAgIH0gXAotICB9IHdo
aWxlICgwKQotCi0vLyBUaGUgZm9sbG93aW5nIFNUUklQX0xPRyB0ZXN0aW5nIGlzIHBlcmZvcm1l
ZCBpbiB0aGUgaGVhZGVyIGZpbGUgc28gdGhhdCBpdCdzCi0vLyBwb3NzaWJsZSB0byBjb21wbGV0
ZWx5IGNvbXBpbGUgb3V0IHRoZSBsb2dnaW5nIGNvZGUgYW5kIHRoZSBsb2cgbWVzc2FnZXMuCi0j
aWYgU1RSSVBfTE9HID09IDAKLSNkZWZpbmUgUkFXX1ZMT0codmVyYm9zZWxldmVsLCAuLi4pIFwK
LSAgZG8geyBcCi0gICAgaWYgKFZMT0dfSVNfT04odmVyYm9zZWxldmVsKSkgeyBcCi0gICAgICBS
QVdfTE9HX0lORk8oX19WQV9BUkdTX18pOyBcCi0gICAgfSBcCi0gIH0gd2hpbGUgKDApCi0jZWxz
ZQotI2RlZmluZSBSQVdfVkxPRyh2ZXJib3NlbGV2ZWwsIC4uLikgUmF3TG9nU3R1Yl9fKDAsIF9f
VkFfQVJHU19fKQotI2VuZGlmIC8vIFNUUklQX0xPRyA9PSAwCi0KLSNpZiBTVFJJUF9MT0cgPT0g
MAotI2RlZmluZSBSQVdfTE9HX0lORk8oLi4uKSBnb29nbGU6OlJhd0xvZ19fKGdvb2dsZTo6R0xP
R19JTkZPLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCBf
X0xJTkVfXywgX19WQV9BUkdTX18pCi0jZWxzZQotI2RlZmluZSBSQVdfTE9HX0lORk8oLi4uKSBn
b29nbGU6OlJhd0xvZ1N0dWJfXygwLCBfX1ZBX0FSR1NfXykKLSNlbmRpZiAvLyBTVFJJUF9MT0cg
PT0gMAotCi0jaWYgU1RSSVBfTE9HIDw9IDEKLSNkZWZpbmUgUkFXX0xPR19XQVJOSU5HKC4uLikg
Z29vZ2xlOjpSYXdMb2dfXyhnb29nbGU6OkdMT0dfV0FSTklORywgICBcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19WQV9BUkdTX18p
Ci0jZWxzZQotI2RlZmluZSBSQVdfTE9HX1dBUk5JTkcoLi4uKSBnb29nbGU6OlJhd0xvZ1N0dWJf
XygwLCBfX1ZBX0FSR1NfXykKLSNlbmRpZiAvLyBTVFJJUF9MT0cgPD0gMQotCi0jaWYgU1RSSVBf
TE9HIDw9IDIKLSNkZWZpbmUgUkFXX0xPR19FUlJPUiguLi4pIGdvb2dsZTo6UmF3TG9nX18oZ29v
Z2xlOjpHTE9HX0VSUk9SLCAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fVkFfQVJHU19fKQotI2Vsc2UKLSNkZWZpbmUgUkFX
X0xPR19FUlJPUiguLi4pIGdvb2dsZTo6UmF3TG9nU3R1Yl9fKDAsIF9fVkFfQVJHU19fKQotI2Vu
ZGlmIC8vIFNUUklQX0xPRyA8PSAyCi0KLSNpZiBTVFJJUF9MT0cgPD0gMwotI2RlZmluZSBSQVdf
TE9HX0ZBVEFMKC4uLikgZ29vZ2xlOjpSYXdMb2dfXyhnb29nbGU6OkdMT0dfRkFUQUwsICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVf
XywgX19WQV9BUkdTX18pCi0jZWxzZQotI2RlZmluZSBSQVdfTE9HX0ZBVEFMKC4uLikgXAotICBk
byB7IFwKLSAgICBnb29nbGU6OlJhd0xvZ1N0dWJfXygwLCBfX1ZBX0FSR1NfXyk7ICAgICAgICBc
Ci0gICAgZXhpdCgxKTsgXAotICB9IHdoaWxlICgwKQotI2VuZGlmIC8vIFNUUklQX0xPRyA8PSAz
Ci0KLS8vIFNpbWlsYXIgdG8gQ0hFQ0soY29uZGl0aW9uKSA8PCBtZXNzYWdlLAotLy8gYnV0IGZv
ciBsb3ctbGV2ZWwgbW9kdWxlczogd2UgdXNlIG9ubHkgUkFXX0xPRyB0aGF0IGRvZXMgbm90IGFs
bG9jYXRlIG1lbW9yeS4KLS8vIFdlIGRvIG5vdCB3YW50IHRvIHByb3ZpZGUgYXJncyBsaXN0IGhl
cmUgdG8gZW5jb3VyYWdlIHRoaXMgdXNhZ2U6Ci0vLyAgIGlmICghY29uZCkgIFJBV19MT0coRkFU
QUwsICJmb28gLi4uIiwgaGFyZF90b19jb21wdXRlX2FyZ3MpOwotLy8gc28gdGhhdCB0aGUgYXJn
cyBhcmUgbm90IGNvbXB1dGVkIHdoZW4gbm90IG5lZWRlZC4KLSNkZWZpbmUgUkFXX0NIRUNLKGNv
bmRpdGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBpZiAoIShjb25kaXRpb24pKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFJBV19MT0coRkFUQUwsICJD
aGVjayAlcyBmYWlsZWQ6ICVzIiwgI2NvbmRpdGlvbiwgbWVzc2FnZSk7ICAgICAgIFwKLSAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotLy8gRGVidWcgdmVyc2lvbnMgb2YgUkFXX0xP
RyBhbmQgUkFXX0NIRUNLCi0jaWZuZGVmIE5ERUJVRwotCi0jZGVmaW5lIFJBV19ETE9HKHNldmVy
aXR5LCAuLi4pIFJBV19MT0coc2V2ZXJpdHksIF9fVkFfQVJHU19fKQotI2RlZmluZSBSQVdfRENI
RUNLKGNvbmRpdGlvbiwgbWVzc2FnZSkgUkFXX0NIRUNLKGNvbmRpdGlvbiwgbWVzc2FnZSkKLQot
I2Vsc2UgIC8vIE5ERUJVRwotCi0jZGVmaW5lIFJBV19ETE9HKHNldmVyaXR5LCAuLi4pICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB3aGlsZSAoZmFsc2UpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBSQVdfTE9HKHNldmVy
aXR5LCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgUkFXX0RDSEVDSyhjb25kaXRpb24sIG1lc3NhZ2Up
IFwKLSAgd2hpbGUgKGZhbHNlKSBcCi0gICAgUkFXX0NIRUNLKGNvbmRpdGlvbiwgbWVzc2FnZSkK
LQotI2VuZGlmICAvLyBOREVCVUcKLQotLy8gU3R1YiBsb2cgZnVuY3Rpb24gdXNlZCB0byB3b3Jr
IGFyb3VuZCBmb3IgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmdzIHdoZW4KLS8vIGJ1aWxkaW5nIHdp
dGggU1RSSVBfTE9HID4gMC4KLXN0YXRpYyBpbmxpbmUgdm9pZCBSYXdMb2dTdHViX18oaW50IC8q
IGlnbm9yZWQgKi8sIC4uLikgewotfQotCi0vLyBIZWxwZXIgZnVuY3Rpb24gdG8gaW1wbGVtZW50
IFJBV19MT0cgYW5kIFJBV19WTE9HCi0vLyBMb2dzIGZvcm1hdC4uLiBhdCAic2V2ZXJpdHkiIGxl
dmVsLCByZXBvcnRpbmcgaXQKLS8vIGFzIGNhbGxlZCBmcm9tIGZpbGU6bGluZS4KLS8vIFRoaXMg
ZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5IG9yIGFjcXVpcmUgbG9ja3MuCi1HT09HTEVfR0xPR19E
TExfREVDTCB2b2lkIFJhd0xvZ19fKExvZ1NldmVyaXR5IHNldmVyaXR5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCi0gICBfX2F0dHJpYnV0ZV9fKChfX2Zv
cm1hdF9fIChfX3ByaW50Zl9fLCA0LCA1KSkpOwotCi0vLyBIYWNrIHRvIHByb3BhZ2F0ZSB0aW1l
IGluZm9ybWF0aW9uIGludG8gdGhpcyBtb2R1bGUgc28gdGhhdAotLy8gdGhpcyBtb2R1bGUgZG9l
cyBub3QgaGF2ZSB0byBkaXJlY3RseSBjYWxsIGxvY2FsdGltZV9yKCksCi0vLyB3aGljaCBjb3Vs
ZCBhbGxvY2F0ZSBtZW1vcnkuCi1HT09HTEVfR0xPR19ETExfREVDTCB2b2lkIFJhd0xvZ19fU2V0
TGFzdFRpbWUoY29uc3Qgc3RydWN0IHRtJiB0LCBpbnQgdXNlY3MpOwotCi19Ci0KLSNlbmRpZiAg
Ly8gQkFTRV9SQVdfTE9HR0lOR19IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvZ2xvZy9yYXdfbG9nZ2luZy5oLmluIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvZ2xvZy9yYXdfbG9nZ2luZy5oLmlu
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTE3MDU3NjVkMTZmZjRhOTM1OWJkODE5
MWFmOTIxOGMzMGEyNTZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2dsb2cvc3JjL2dsb2cv
cmF3X2xvZ2dpbmcuaC5pbgorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDYsIEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLy8KLS8vIEF1dGhvcjog
TWF4aW0gTGlmYW50c2V2Ci0vLwotLy8gVGhyZWFkLXNhZmUgbG9nZ2luZyByb3V0aW5lcyB0aGF0
IGRvIG5vdCBhbGxvY2F0ZSBhbnkgbWVtb3J5IG9yCi0vLyBhY3F1aXJlIGFueSBsb2NrcywgYW5k
IGNhbiB0aGVyZWZvcmUgYmUgdXNlZCBieSBsb3ctbGV2ZWwgbWVtb3J5Ci0vLyBhbGxvY2F0aW9u
IGFuZCBzeW5jaHJvbml6YXRpb24gY29kZS4KLQotI2lmbmRlZiBCQVNFX1JBV19MT0dHSU5HX0hf
Ci0jZGVmaW5lIEJBU0VfUkFXX0xPR0dJTkdfSF8KLQotI2luY2x1ZGUgPHRpbWUuaD4KLQotQGFj
X2dvb2dsZV9zdGFydF9uYW1lc3BhY2VACi0KLSNpbmNsdWRlICJnbG9nL2xvZ19zZXZlcml0eS5o
IgotI2luY2x1ZGUgImdsb2cvdmxvZ19pc19vbi5oIgotCi0vLyBBbm5veWluZyBzdHVmZiBmb3Ig
d2luZG93cyAtLSBtYWtlcyBzdXJlIGNsaWVudHMgY2FuIGltcG9ydCB0aGVzZSBmdW5jdGlvbnMK
LSNpZm5kZWYgR09PR0xFX0dMT0dfRExMX0RFQ0wKLSMgaWYgZGVmaW5lZChfV0lOMzIpICYmICFk
ZWZpbmVkKF9fQ1lHV0lOX18pCi0jICAgZGVmaW5lIEdPT0dMRV9HTE9HX0RMTF9ERUNMICBfX2Rl
Y2xzcGVjKGRsbGltcG9ydCkKLSMgZWxzZQotIyAgIGRlZmluZSBHT09HTEVfR0xPR19ETExfREVD
TAotIyBlbmRpZgotI2VuZGlmCi0KLS8vIFRoaXMgaXMgc2ltaWxhciB0byBMT0coc2V2ZXJpdHkp
IDw8IGZvcm1hdC4uLiBhbmQgVkxPRyhsZXZlbCkgPDwgZm9ybWF0Li4sCi0vLyBidXQKLS8vICog
aXQgaXMgdG8gYmUgdXNlZCBPTkxZIGJ5IGxvdy1sZXZlbCBtb2R1bGVzIHRoYXQgY2FuJ3QgdXNl
IG5vcm1hbCBMT0coKQotLy8gKiBpdCBpcyBkZXNpZ2VkIHRvIGJlIGEgbG93LWxldmVsIGxvZ2dl
ciB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIGFueQotLy8gICBtZW1vcnkgYW5kIGRvZXMgbm90IG5l
ZWQgYW55IGxvY2tzLCBoZW5jZToKLS8vICogaXQgbG9ncyBzdHJhaWdodCBhbmQgT05MWSB0byBT
VERFUlIgdy9vIGJ1ZmZlcmluZwotLy8gKiBpdCB1c2VzIGFuIGV4cGxpY2l0IGZvcm1hdCBhbmQg
YXJndW1lbnRzIGxpc3QKLS8vICogaXQgd2lsbCBzaWxlbnRseSBjaG9wIG9mZiByZWFsbHkgbG9u
ZyBtZXNzYWdlIHN0cmluZ3MKLS8vIFVzYWdlIGV4YW1wbGU6Ci0vLyAgIFJBV19MT0coRVJST1Is
ICJGYWlsZWQgZm9vIHdpdGggJWk6ICVzIiwgc3RhdHVzLCBlcnJvcik7Ci0vLyAgIFJBV19WTE9H
KDMsICJzdGF0dXMgaXMgJWkiLCBzdGF0dXMpOwotLy8gVGhlc2Ugd2lsbCBwcmludCBhbiBhbG1v
c3Qgc3RhbmRhcmQgbG9nIGxpbmVzIGxpa2UgdGhpcyB0byBzdGRlcnIgb25seToKLS8vICAgRTA4
MjEgMjExMzE3IGZpbGUuY2M6MTIzXSBSQVc6IEZhaWxlZCBmb28gd2l0aCAyMjogYmFkX2ZpbGUK
LS8vICAgSTA4MjEgMjExMzE3IGZpbGUuY2M6MTQyXSBSQVc6IHN0YXR1cyBpcyAyMAotI2RlZmlu
ZSBSQVdfTE9HKHNldmVyaXR5LCAuLi4pIFwKLSAgZG8geyBcCi0gICAgc3dpdGNoIChAYWNfZ29v
Z2xlX25hbWVzcGFjZUA6OkdMT0dfICMjIHNldmVyaXR5KSB7ICBcCi0gICAgICBjYXNlIDA6IFwK
LSAgICAgICAgUkFXX0xPR19JTkZPKF9fVkFfQVJHU19fKTsgXAotICAgICAgICBicmVhazsgXAot
ICAgICAgY2FzZSAxOiBcCi0gICAgICAgIFJBV19MT0dfV0FSTklORyhfX1ZBX0FSR1NfXyk7IFwK
LSAgICAgICAgYnJlYWs7IFwKLSAgICAgIGNhc2UgMjogXAotICAgICAgICBSQVdfTE9HX0VSUk9S
KF9fVkFfQVJHU19fKTsgXAotICAgICAgICBicmVhazsgXAotICAgICAgY2FzZSAzOiBcCi0gICAg
ICAgIFJBV19MT0dfRkFUQUwoX19WQV9BUkdTX18pOyBcCi0gICAgICAgIGJyZWFrOyBcCi0gICAg
ICBkZWZhdWx0OiBcCi0gICAgICAgIGJyZWFrOyBcCi0gICAgfSBcCi0gIH0gd2hpbGUgKDApCi0K
LS8vIFRoZSBmb2xsb3dpbmcgU1RSSVBfTE9HIHRlc3RpbmcgaXMgcGVyZm9ybWVkIGluIHRoZSBo
ZWFkZXIgZmlsZSBzbyB0aGF0IGl0J3MKLS8vIHBvc3NpYmxlIHRvIGNvbXBsZXRlbHkgY29tcGls
ZSBvdXQgdGhlIGxvZ2dpbmcgY29kZSBhbmQgdGhlIGxvZyBtZXNzYWdlcy4KLSNpZiBTVFJJUF9M
T0cgPT0gMAotI2RlZmluZSBSQVdfVkxPRyh2ZXJib3NlbGV2ZWwsIC4uLikgXAotICBkbyB7IFwK
LSAgICBpZiAoVkxPR19JU19PTih2ZXJib3NlbGV2ZWwpKSB7IFwKLSAgICAgIFJBV19MT0dfSU5G
TyhfX1ZBX0FSR1NfXyk7IFwKLSAgICB9IFwKLSAgfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5l
IFJBV19WTE9HKHZlcmJvc2VsZXZlbCwgLi4uKSBSYXdMb2dTdHViX18oMCwgX19WQV9BUkdTX18p
Ci0jZW5kaWYgLy8gU1RSSVBfTE9HID09IDAKLQotI2lmIFNUUklQX0xPRyA9PSAwCi0jZGVmaW5l
IFJBV19MT0dfSU5GTyguLi4pIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6UmF3TG9nX18oQGFjX2dv
b2dsZV9uYW1lc3BhY2VAOjpHTE9HX0lORk8sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKLSNlbHNlCi0jZGVmaW5l
IFJBV19MT0dfSU5GTyguLi4pIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6UmF3TG9nU3R1Yl9fKDAs
IF9fVkFfQVJHU19fKQotI2VuZGlmIC8vIFNUUklQX0xPRyA9PSAwCi0KLSNpZiBTVFJJUF9MT0cg
PD0gMQotI2RlZmluZSBSQVdfTE9HX1dBUk5JTkcoLi4uKSBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6
OlJhd0xvZ19fKEBhY19nb29nbGVfbmFtZXNwYWNlQDo6R0xPR19XQVJOSU5HLCAgIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX1ZB
X0FSR1NfXykKLSNlbHNlCi0jZGVmaW5lIFJBV19MT0dfV0FSTklORyguLi4pIEBhY19nb29nbGVf
bmFtZXNwYWNlQDo6UmF3TG9nU3R1Yl9fKDAsIF9fVkFfQVJHU19fKQotI2VuZGlmIC8vIFNUUklQ
X0xPRyA8PSAxCi0KLSNpZiBTVFJJUF9MT0cgPD0gMgotI2RlZmluZSBSQVdfTE9HX0VSUk9SKC4u
LikgQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpSYXdMb2dfXyhAYWNfZ29vZ2xlX25hbWVzcGFjZUA6
OkdMT0dfRVJST1IsICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fRklMRV9fLCBfX0xJTkVfXywgX19WQV9BUkdTX18pCi0jZWxzZQotI2RlZmluZSBSQVdfTE9H
X0VSUk9SKC4uLikgQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpSYXdMb2dTdHViX18oMCwgX19WQV9B
UkdTX18pCi0jZW5kaWYgLy8gU1RSSVBfTE9HIDw9IDIKLQotI2lmIFNUUklQX0xPRyA8PSAzCi0j
ZGVmaW5lIFJBV19MT0dfRkFUQUwoLi4uKSBAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OlJhd0xvZ19f
KEBhY19nb29nbGVfbmFtZXNwYWNlQDo6R0xPR19GQVRBTCwgICAgICAgXAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykK
LSNlbHNlCi0jZGVmaW5lIFJBV19MT0dfRkFUQUwoLi4uKSBcCi0gIGRvIHsgXAotICAgIEBhY19n
b29nbGVfbmFtZXNwYWNlQDo6UmF3TG9nU3R1Yl9fKDAsIF9fVkFfQVJHU19fKTsgICAgICAgIFwK
LSAgICBleGl0KDEpOyBcCi0gIH0gd2hpbGUgKDApCi0jZW5kaWYgLy8gU1RSSVBfTE9HIDw9IDMK
LQotLy8gU2ltaWxhciB0byBDSEVDSyhjb25kaXRpb24pIDw8IG1lc3NhZ2UsCi0vLyBidXQgZm9y
IGxvdy1sZXZlbCBtb2R1bGVzOiB3ZSB1c2Ugb25seSBSQVdfTE9HIHRoYXQgZG9lcyBub3QgYWxs
b2NhdGUgbWVtb3J5LgotLy8gV2UgZG8gbm90IHdhbnQgdG8gcHJvdmlkZSBhcmdzIGxpc3QgaGVy
ZSB0byBlbmNvdXJhZ2UgdGhpcyB1c2FnZToKLS8vICAgaWYgKCFjb25kKSAgUkFXX0xPRyhGQVRB
TCwgImZvbyAuLi4iLCBoYXJkX3RvX2NvbXB1dGVfYXJncyk7Ci0vLyBzbyB0aGF0IHRoZSBhcmdz
IGFyZSBub3QgY29tcHV0ZWQgd2hlbiBub3QgbmVlZGVkLgotI2RlZmluZSBSQVdfQ0hFQ0soY29u
ZGl0aW9uLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBk
byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIGlmICghKGNvbmRpdGlvbikpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgUkFXX0xPRyhGQVRBTCwgIkNo
ZWNrICVzIGZhaWxlZDogJXMiLCAjY29uZGl0aW9uLCBtZXNzYWdlKTsgICAgICAgXAotICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0vLyBEZWJ1ZyB2ZXJzaW9ucyBvZiBSQVdfTE9H
IGFuZCBSQVdfQ0hFQ0sKLSNpZm5kZWYgTkRFQlVHCi0KLSNkZWZpbmUgUkFXX0RMT0coc2V2ZXJp
dHksIC4uLikgUkFXX0xPRyhzZXZlcml0eSwgX19WQV9BUkdTX18pCi0jZGVmaW5lIFJBV19EQ0hF
Q0soY29uZGl0aW9uLCBtZXNzYWdlKSBSQVdfQ0hFQ0soY29uZGl0aW9uLCBtZXNzYWdlKQotCi0j
ZWxzZSAgLy8gTkRFQlVHCi0KLSNkZWZpbmUgUkFXX0RMT0coc2V2ZXJpdHksIC4uLikgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHdoaWxlIChmYWxzZSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFJBV19MT0coc2V2ZXJp
dHksIF9fVkFfQVJHU19fKQotI2RlZmluZSBSQVdfRENIRUNLKGNvbmRpdGlvbiwgbWVzc2FnZSkg
XAotICB3aGlsZSAoZmFsc2UpIFwKLSAgICBSQVdfQ0hFQ0soY29uZGl0aW9uLCBtZXNzYWdlKQot
Ci0jZW5kaWYgIC8vIE5ERUJVRwotCi0vLyBTdHViIGxvZyBmdW5jdGlvbiB1c2VkIHRvIHdvcmsg
YXJvdW5kIGZvciB1bnVzZWQgdmFyaWFibGUgd2FybmluZ3Mgd2hlbgotLy8gYnVpbGRpbmcgd2l0
aCBTVFJJUF9MT0cgPiAwLgotc3RhdGljIGlubGluZSB2b2lkIFJhd0xvZ1N0dWJfXyhpbnQgLyog
aWdub3JlZCAqLywgLi4uKSB7Ci19Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiB0byBpbXBsZW1lbnQg
UkFXX0xPRyBhbmQgUkFXX1ZMT0cKLS8vIExvZ3MgZm9ybWF0Li4uIGF0ICJzZXZlcml0eSIgbGV2
ZWwsIHJlcG9ydGluZyBpdAotLy8gYXMgY2FsbGVkIGZyb20gZmlsZTpsaW5lLgotLy8gVGhpcyBk
b2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnkgb3IgYWNxdWlyZSBsb2Nrcy4KLUdPT0dMRV9HTE9HX0RM
TF9ERUNMIHZvaWQgUmF3TG9nX18oTG9nU2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKLSAgIEBhY19jdl9fX2F0dHJpYnV0ZV9f
X3ByaW50Zl80XzVAOwotCi0vLyBIYWNrIHRvIHByb3BhZ2F0ZSB0aW1lIGluZm9ybWF0aW9uIGlu
dG8gdGhpcyBtb2R1bGUgc28gdGhhdAotLy8gdGhpcyBtb2R1bGUgZG9lcyBub3QgaGF2ZSB0byBk
aXJlY3RseSBjYWxsIGxvY2FsdGltZV9yKCksCi0vLyB3aGljaCBjb3VsZCBhbGxvY2F0ZSBtZW1v
cnkuCi1HT09HTEVfR0xPR19ETExfREVDTCB2b2lkIFJhd0xvZ19fU2V0TGFzdFRpbWUoY29uc3Qg
c3RydWN0IHRtJiB0LCBpbnQgdXNlY3MpOwotCi1AYWNfZ29vZ2xlX2VuZF9uYW1lc3BhY2VACi0K
LSNlbmRpZiAgLy8gQkFTRV9SQVdfTE9HR0lOR19IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvZ2xvZy92bG9nX2lzX29uLmggYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9nbG9nL3NyYy9nbG9nL3Zsb2dfaXNfb24u
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVlNjFjNTZmYzMwY2M1M2Q4NTFkMWFm
NWQ5YTVkZGRmODk0OThiNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9nbG9nL3NyYy9nbG9n
L3Zsb2dfaXNfb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vLyBDb3B5cmln
aHQgKGMpIDE5OTksIDIwMDcsIEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLy8KLS8vIEF1dGhv
cjogUmF5IFNpZG5leSBhbmQgbWFueSBvdGhlcnMKLS8vCi0vLyBEZWZpbmVzIHRoZSBWTE9HX0lT
X09OIG1hY3JvIHRoYXQgY29udHJvbHMgdGhlIHZhcmlhYmxlLXZlcmJvc2l0eQotLy8gY29uZGl0
aW9uYWwgbG9nZ2luZy4KLS8vCi0vLyBJdCdzIHVzZWQgYnkgVkxPRyBhbmQgVkxPR19JRiBpbiBs
b2dnaW5nLmgKLS8vIGFuZCBieSBSQVdfVkxPRyBpbiByYXdfbG9nZ2luZy5oIHRvIHRyaWdnZXIg
dGhlIGxvZ2dpbmcuCi0vLwotLy8gSXQgY2FuIGFsc28gYmUgdXNlZCBkaXJlY3RseSBlLmcuIGxp
a2UgdGhpczoKLS8vICAgaWYgKFZMT0dfSVNfT04oMikpIHsKLS8vICAgICAvLyBkbyBzb21lIGxv
Z2dpbmcgcHJlcGFyYXRpb24gYW5kIGxvZ2dpbmcKLS8vICAgICAvLyB0aGF0IGNhbid0IGJlIGFj
Y29tcGxpc2hlZCBlLmcuIHZpYSBqdXN0IFZMT0coMikgPDwgLi4uOwotLy8gICB9Ci0vLwotLy8g
VGhlIHRydXRoIHZhbHVlIHRoYXQgVkxPR19JU19PTihsZXZlbCkgcmV0dXJucyBpcyBkZXRlcm1p
bmVkIGJ5IAotLy8gdGhlIHRocmVlIHZlcmJvc2l0eSBsZXZlbCBmbGFnczoKLS8vICAgLS12PTxu
PiAgR2l2ZXMgdGhlIGRlZmF1bHQgbWF4aW1hbCBhY3RpdmUgVi1sb2dnaW5nIGxldmVsOwotLy8g
ICAgICAgICAgICAwIGlzIHRoZSBkZWZhdWx0LgotLy8gICAgICAgICAgICBOb3JtYWxseSBwb3Np
dGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIFYtbG9nZ2luZyBsZXZlbHMuCi0vLyAgIC0tdm1vZHVs
ZT08c3RyPiAgR2l2ZXMgdGhlIHBlci1tb2R1bGUgbWF4aW1hbCBWLWxvZ2dpbmcgbGV2ZWxzIHRv
IG92ZXJyaWRlCi0vLyAgICAgICAgICAgICAgICAgICAgdGhlIHZhbHVlIGdpdmVuIGJ5IC0tdi4K
LS8vICAgICAgICAgICAgICAgICAgICBFLmcuICJteV9tb2R1bGU9Mixmb28qPTMiIHdvdWxkIGNo
YW5nZSB0aGUgbG9nZ2luZyBsZXZlbAotLy8gICAgICAgICAgICAgICAgICAgIGZvciBhbGwgY29k
ZSBpbiBzb3VyY2UgZmlsZXMgIm15X21vZHVsZS4qIiBhbmQgImZvbyouKiIKLS8vICAgICAgICAg
ICAgICAgICAgICAoIi1pbmwiIHN1ZmZpeGVzIGFyZSBhbHNvIGRpc3JlZ2FyZGVkIGZvciB0aGlz
IG1hdGNoaW5nKS4KLS8vCi0vLyBTZXRWTE9HTGV2ZWwgaGVscGVyIGZ1bmN0aW9uIGlzIHByb3Zp
ZGVkIHRvIGRvIGxpbWl0ZWQgZHluYW1pYyBjb250cm9sIG92ZXIKLS8vIFYtbG9nZ2luZyBieSBv
dmVycmlkaW5nIHRoZSBwZXItbW9kdWxlIHNldHRpbmdzIGdpdmVuIHZpYSAtLXZtb2R1bGUgZmxh
Zy4KLS8vCi0vLyBDQVZFQVQ6IC0tdm1vZHVsZSBmdW5jdGlvbmFsaXR5IGlzIG5vdCBhdmFpbGFi
bGUgaW4gbm9uIGdjYyBjb21waWxlcnMuCi0vLwotCi0jaWZuZGVmIEJBU0VfVkxPR19JU19PTl9I
XwotI2RlZmluZSBCQVNFX1ZMT0dfSVNfT05fSF8KLQotI2luY2x1ZGUgImdsb2cvbG9nX3NldmVy
aXR5LmgiCi0KLS8vIEFubm95aW5nIHN0dWZmIGZvciB3aW5kb3dzIC0tIG1ha2VzIHN1cmUgY2xp
ZW50cyBjYW4gaW1wb3J0IHRoZXNlIGZ1bmN0aW9ucwotI2lmbmRlZiBHT09HTEVfR0xPR19ETExf
REVDTAotIyBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKLSMgICBk
ZWZpbmUgR09PR0xFX0dMT0dfRExMX0RFQ0wgIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotIyBlbHNl
Ci0jICAgZGVmaW5lIEdPT0dMRV9HTE9HX0RMTF9ERUNMCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lm
IGRlZmluZWQoX19HTlVDX18pCi0vLyBXZSBlbWl0IGFuIGFub255bW91cyBzdGF0aWMgaW50KiB2
YXJpYWJsZSBhdCBldmVyeSBWTE9HX0lTX09OKG4pIHNpdGUuCi0vLyAoTm9ybWFsbHkpIHRoZSBm
aXJzdCB0aW1lIGV2ZXJ5IFZMT0dfSVNfT04obikgc2l0ZSBpcyBoaXQsCi0vLyB3ZSBkZXRlcm1p
bmUgd2hhdCB2YXJpYWJsZSB3aWxsIGR5bmFtaWNhbGx5IGNvbnRyb2wgbG9nZ2luZyBhdCB0aGlz
IHNpdGU6Ci0vLyBpdCdzIGVpdGhlciBGTEFHU192IG9yIGFuIGFwcHJvcHJpYXRlIGludGVybmFs
IHZhcmlhYmxlCi0vLyBtYXRjaGluZyB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB0aGF0IHJlcHJl
c2VudHMgcmVzdWx0cyBvZgotLy8gcGFyc2luZyBvZiAtLXZtb2R1bGUgZmxhZyBhbmQvb3IgU2V0
VkxPR0xldmVsIGNhbGxzLgotI2RlZmluZSBWTE9HX0lTX09OKHZlcmJvc2VsZXZlbCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19leHRlbnNpb25fXyAgXAotICAoeyBzdGF0
aWMgZ29vZ2xlOjppbnQzMiogdmxvY2FsX18gPSAmZ29vZ2xlOjprTG9nU2l0ZVVuaW5pdGlhbGl6
ZWQ7ICAgICAgICAgICBcCi0gICAgIGdvb2dsZTo6aW50MzIgdmVyYm9zZV9sZXZlbF9fID0gKHZl
cmJvc2VsZXZlbCk7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICgqdmxvY2FsX18gPj0gdmVy
Ym9zZV9sZXZlbF9fKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAoKHZsb2Nh
bF9fICE9ICZnb29nbGU6OmtMb2dTaXRlVW5pbml0aWFsaXplZCkgfHwgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgKGdvb2dsZTo6SW5pdFZMT0czX18oJnZsb2NhbF9fLCAmRkxBR1NfdiwgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCB2ZXJi
b3NlX2xldmVsX18pKSk7IH0pCi0jZWxzZQotLy8gR05VIGV4dGVuc2lvbnMgbm90IGF2YWlsYWJs
ZSwgc28gd2UgZG8gbm90IHN1cHBvcnQgLS12bW9kdWxlLgotLy8gRHluYW1pYyB2YWx1ZSBvZiBG
TEFHU192IGFsd2F5cyBjb250cm9scyB0aGUgbG9nZ2luZyBsZXZlbC4KLSNkZWZpbmUgVkxPR19J
U19PTih2ZXJib3NlbGV2ZWwpIChGTEFHU192ID49ICh2ZXJib3NlbGV2ZWwpKQotI2VuZGlmCi0K
LS8vIFNldCBWTE9HKF9JU19PTikgbGV2ZWwgZm9yIG1vZHVsZV9wYXR0ZXJuIHRvIGxvZ19sZXZl
bC4KLS8vIFRoaXMgbGV0cyB1cyBkeW5hbWljYWxseSBjb250cm9sIHdoYXQgaXMgbm9ybWFsbHkg
c2V0IGJ5IHRoZSAtLXZtb2R1bGUgZmxhZy4KLS8vIFJldHVybnMgdGhlIGxldmVsIHRoYXQgcHJl
dmlvdXNseSBhcHBsaWVkIHRvIG1vZHVsZV9wYXR0ZXJuLgotLy8gTk9URTogVG8gY2hhbmdlIHRo
ZSBsb2cgbGV2ZWwgZm9yIFZMT0coX0lTX09OKSBzaXRlcwotLy8gICAgICAgdGhhdCBoYXZlIGFs
cmVhZHkgZXhlY3V0ZWQgYWZ0ZXIvZHVyaW5nIEluaXRHb29nbGVMb2dnaW5nLAotLy8gICAgICAg
b25lIG5lZWRzIHRvIHN1cHBseSB0aGUgZXhhY3QgLS12bW9kdWxlIHBhdHRlcm4gdGhhdCBhcHBs
aWVkIHRvIHRoZW0uCi0vLyAgICAgICAoSWYgbm8gLS12bW9kdWxlIHBhdHRlcm4gYXBwbGllZCB0
byB0aGVtCi0vLyAgICAgICB0aGUgdmFsdWUgb2YgRkxBR1NfdiB3aWxsIGNvbnRpbnVlIHRvIGNv
bnRyb2wgdGhlbS4pCi1leHRlcm4gR09PR0xFX0dMT0dfRExMX0RFQ0wgaW50IFNldFZMT0dMZXZl
bChjb25zdCBjaGFyKiBtb2R1bGVfcGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBsb2dfbGV2ZWwpOwotCi0vLyBWYXJpb3VzIGRlY2xhcmF0
aW9ucyBuZWVkZWQgZm9yIFZMT0dfSVNfT04gYWJvdmU6ID09PT09PT09PT09PT09PT09PT09PT09
PT0KLQotLy8gU3BlY2lhbCB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSBWTE9HX0lTX09O
IHNpdGUgaGFzIG5vdCBiZWVuCi0vLyBpbml0aWFsaXplZC4gIFdlIG1ha2UgdGhpcyBhIGxhcmdl
IHZhbHVlLCBzbyB0aGUgY29tbW9uLWNhc2UgY2hlY2sKLS8vIG9mICIqdmxvY2FsX18gPj0gdmVy
Ym9zZV9sZXZlbF9fIiBpbiBWTE9HX0lTX09OIGRlZmluaXRpb24KLS8vIHBhc3NlcyBpbiBzdWNo
IGNhc2VzIGFuZCBJbml0VkxPRzNfXyBpcyB0aGVuIHRyaWdnZXJlZC4KLWV4dGVybiBnb29nbGU6
OmludDMyIGtMb2dTaXRlVW5pbml0aWFsaXplZDsKLQotLy8gSGVscGVyIHJvdXRpbmUgd2hpY2gg
ZGV0ZXJtaW5lcyB0aGUgbG9nZ2luZyBpbmZvIGZvciBhIHBhcnRpY2FsdXIgVkxPRyBzaXRlLgot
Ly8gICBzaXRlX2ZsYWcgICAgIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBzaXRlLWxvY2FsIHBvaW50
ZXIgdG8gdGhlIGNvbnRyb2xsaW5nCi0vLyAgICAgICAgICAgICAgICAgdmVyYm9zaXR5IGxldmVs
Ci0vLyAgIHNpdGVfZGVmYXVsdCAgaXMgdGhlIGRlZmF1bHQgdG8gdXNlIGZvciAqc2l0ZV9mbGFn
Ci0vLyAgIGZuYW1lICAgICAgICAgaXMgdGhlIGN1cnJlbnQgc291cmNlIGZpbGUgbmFtZQotLy8g
ICB2ZXJib3NlX2xldmVsIGlzIHRoZSBhcmd1bWVudCB0byBWTE9HX0lTX09OCi0vLyBXZSB3aWxs
IHJldHVybiB0aGUgcmV0dXJuIHZhbHVlIGZvciBWTE9HX0lTX09OCi0vLyBhbmQgaWYgcG9zc2li
bGUgc2V0ICpzaXRlX2ZsYWcgYXBwcm9wcmlhdGVseS4KLWV4dGVybiBHT09HTEVfR0xPR19ETExf
REVDTCBib29sIEluaXRWTE9HM19fKAotICAgIGdvb2dsZTo6aW50MzIqKiBzaXRlX2ZsYWcsCi0g
ICAgZ29vZ2xlOjppbnQzMiogc2l0ZV9kZWZhdWx0LAotICAgIGNvbnN0IGNoYXIqIGZuYW1lLAot
ICAgIGdvb2dsZTo6aW50MzIgdmVyYm9zZV9sZXZlbCk7Ci0KLSNlbmRpZiAgLy8gQkFTRV9WTE9H
X0lTX09OX0hfCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9nbG9nL3NyYy9nbG9nL3Zsb2dfaXNfb24uaC5pbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2dsb2cvc3JjL2dsb2cvdmxvZ19pc19vbi5oLmluCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzZjRjNGEzMmE4Yjc2MjRiNDMzYzBlMWE5MThmNjhjMDJkZTE2NmZm
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2dsb2cvc3JjL2dsb2cvdmxvZ19pc19vbi5oLmlu
CisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMTk5OSwg
MjAwNywgR29vZ2xlIEluYy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0vLwotLy8gQXV0aG9yOiBSYXkgU2lkbmV5
IGFuZCBtYW55IG90aGVycwotLy8KLS8vIERlZmluZXMgdGhlIFZMT0dfSVNfT04gbWFjcm8gdGhh
dCBjb250cm9scyB0aGUgdmFyaWFibGUtdmVyYm9zaXR5Ci0vLyBjb25kaXRpb25hbCBsb2dnaW5n
LgotLy8KLS8vIEl0J3MgdXNlZCBieSBWTE9HIGFuZCBWTE9HX0lGIGluIGxvZ2dpbmcuaAotLy8g
YW5kIGJ5IFJBV19WTE9HIGluIHJhd19sb2dnaW5nLmggdG8gdHJpZ2dlciB0aGUgbG9nZ2luZy4K
LS8vCi0vLyBJdCBjYW4gYWxzbyBiZSB1c2VkIGRpcmVjdGx5IGUuZy4gbGlrZSB0aGlzOgotLy8g
ICBpZiAoVkxPR19JU19PTigyKSkgewotLy8gICAgIC8vIGRvIHNvbWUgbG9nZ2luZyBwcmVwYXJh
dGlvbiBhbmQgbG9nZ2luZwotLy8gICAgIC8vIHRoYXQgY2FuJ3QgYmUgYWNjb21wbGlzaGVkIGUu
Zy4gdmlhIGp1c3QgVkxPRygyKSA8PCAuLi47Ci0vLyAgIH0KLS8vCi0vLyBUaGUgdHJ1dGggdmFs
dWUgdGhhdCBWTE9HX0lTX09OKGxldmVsKSByZXR1cm5zIGlzIGRldGVybWluZWQgYnkgCi0vLyB0
aGUgdGhyZWUgdmVyYm9zaXR5IGxldmVsIGZsYWdzOgotLy8gICAtLXY9PG4+ICBHaXZlcyB0aGUg
ZGVmYXVsdCBtYXhpbWFsIGFjdGl2ZSBWLWxvZ2dpbmcgbGV2ZWw7Ci0vLyAgICAgICAgICAgIDAg
aXMgdGhlIGRlZmF1bHQuCi0vLyAgICAgICAgICAgIE5vcm1hbGx5IHBvc2l0aXZlIHZhbHVlcyBh
cmUgdXNlZCBmb3IgVi1sb2dnaW5nIGxldmVscy4KLS8vICAgLS12bW9kdWxlPTxzdHI+ICBHaXZl
cyB0aGUgcGVyLW1vZHVsZSBtYXhpbWFsIFYtbG9nZ2luZyBsZXZlbHMgdG8gb3ZlcnJpZGUKLS8v
ICAgICAgICAgICAgICAgICAgICB0aGUgdmFsdWUgZ2l2ZW4gYnkgLS12LgotLy8gICAgICAgICAg
ICAgICAgICAgIEUuZy4gIm15X21vZHVsZT0yLGZvbyo9MyIgd291bGQgY2hhbmdlIHRoZSBsb2dn
aW5nIGxldmVsCi0vLyAgICAgICAgICAgICAgICAgICAgZm9yIGFsbCBjb2RlIGluIHNvdXJjZSBm
aWxlcyAibXlfbW9kdWxlLioiIGFuZCAiZm9vKi4qIgotLy8gICAgICAgICAgICAgICAgICAgICgi
LWlubCIgc3VmZml4ZXMgYXJlIGFsc28gZGlzcmVnYXJkZWQgZm9yIHRoaXMgbWF0Y2hpbmcpLgot
Ly8KLS8vIFNldFZMT0dMZXZlbCBoZWxwZXIgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gZG8gbGlt
aXRlZCBkeW5hbWljIGNvbnRyb2wgb3ZlcgotLy8gVi1sb2dnaW5nIGJ5IG92ZXJyaWRpbmcgdGhl
IHBlci1tb2R1bGUgc2V0dGluZ3MgZ2l2ZW4gdmlhIC0tdm1vZHVsZSBmbGFnLgotLy8KLS8vIENB
VkVBVDogLS12bW9kdWxlIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGF2YWlsYWJsZSBpbiBub24gZ2Nj
IGNvbXBpbGVycy4KLS8vCi0KLSNpZm5kZWYgQkFTRV9WTE9HX0lTX09OX0hfCi0jZGVmaW5lIEJB
U0VfVkxPR19JU19PTl9IXwotCi0jaW5jbHVkZSAiZ2xvZy9sb2dfc2V2ZXJpdHkuaCIKLQotLy8g
QW5ub3lpbmcgc3R1ZmYgZm9yIHdpbmRvd3MgLS0gbWFrZXMgc3VyZSBjbGllbnRzIGNhbiBpbXBv
cnQgdGhlc2UgZnVuY3Rpb25zCi0jaWZuZGVmIEdPT0dMRV9HTE9HX0RMTF9ERUNMCi0jIGlmIGRl
ZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQotIyAgIGRlZmluZSBHT09HTEVf
R0xPR19ETExfREVDTCAgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jIGVsc2UKLSMgICBkZWZpbmUg
R09PR0xFX0dMT0dfRExMX0RFQ0wKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0dO
VUNfXykKLS8vIFdlIGVtaXQgYW4gYW5vbnltb3VzIHN0YXRpYyBpbnQqIHZhcmlhYmxlIGF0IGV2
ZXJ5IFZMT0dfSVNfT04obikgc2l0ZS4KLS8vIChOb3JtYWxseSkgdGhlIGZpcnN0IHRpbWUgZXZl
cnkgVkxPR19JU19PTihuKSBzaXRlIGlzIGhpdCwKLS8vIHdlIGRldGVybWluZSB3aGF0IHZhcmlh
YmxlIHdpbGwgZHluYW1pY2FsbHkgY29udHJvbCBsb2dnaW5nIGF0IHRoaXMgc2l0ZToKLS8vIGl0
J3MgZWl0aGVyIEZMQUdTX3Ygb3IgYW4gYXBwcm9wcmlhdGUgaW50ZXJuYWwgdmFyaWFibGUKLS8v
IG1hdGNoaW5nIHRoZSBjdXJyZW50IHNvdXJjZSBmaWxlIHRoYXQgcmVwcmVzZW50cyByZXN1bHRz
IG9mCi0vLyBwYXJzaW5nIG9mIC0tdm1vZHVsZSBmbGFnIGFuZC9vciBTZXRWTE9HTGV2ZWwgY2Fs
bHMuCi0jZGVmaW5lIFZMT0dfSVNfT04odmVyYm9zZWxldmVsKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBfX2V4dGVuc2lvbl9fICBcCi0gICh7IHN0YXRpYyBAYWNfZ29vZ2xl
X25hbWVzcGFjZUA6OmludDMyKiB2bG9jYWxfXyA9ICZAYWNfZ29vZ2xlX25hbWVzcGFjZUA6OmtM
b2dTaXRlVW5pbml0aWFsaXplZDsgICAgICAgICAgIFwKLSAgICAgQGFjX2dvb2dsZV9uYW1lc3Bh
Y2VAOjppbnQzMiB2ZXJib3NlX2xldmVsX18gPSAodmVyYm9zZWxldmVsKTsgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgKCp2bG9jYWxfXyA+PSB2ZXJib3NlX2xldmVsX18pICYmICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICgodmxvY2FsX18gIT0gJkBhY19nb29nbGVfbmFtZXNw
YWNlQDo6a0xvZ1NpdGVVbmluaXRpYWxpemVkKSB8fCAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAoQGFjX2dvb2dsZV9uYW1lc3BhY2VAOjpJbml0VkxPRzNfXygmdmxvY2FsX18sICZGTEFHU192
LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgX19GSUxFX18s
IHZlcmJvc2VfbGV2ZWxfXykpKTsgfSkKLSNlbHNlCi0vLyBHTlUgZXh0ZW5zaW9ucyBub3QgYXZh
aWxhYmxlLCBzbyB3ZSBkbyBub3Qgc3VwcG9ydCAtLXZtb2R1bGUuCi0vLyBEeW5hbWljIHZhbHVl
IG9mIEZMQUdTX3YgYWx3YXlzIGNvbnRyb2xzIHRoZSBsb2dnaW5nIGxldmVsLgotI2RlZmluZSBW
TE9HX0lTX09OKHZlcmJvc2VsZXZlbCkgKEZMQUdTX3YgPj0gKHZlcmJvc2VsZXZlbCkpCi0jZW5k
aWYKLQotLy8gU2V0IFZMT0coX0lTX09OKSBsZXZlbCBmb3IgbW9kdWxlX3BhdHRlcm4gdG8gbG9n
X2xldmVsLgotLy8gVGhpcyBsZXRzIHVzIGR5bmFtaWNhbGx5IGNvbnRyb2wgd2hhdCBpcyBub3Jt
YWxseSBzZXQgYnkgdGhlIC0tdm1vZHVsZSBmbGFnLgotLy8gUmV0dXJucyB0aGUgbGV2ZWwgdGhh
dCBwcmV2aW91c2x5IGFwcGxpZWQgdG8gbW9kdWxlX3BhdHRlcm4uCi0vLyBOT1RFOiBUbyBjaGFu
Z2UgdGhlIGxvZyBsZXZlbCBmb3IgVkxPRyhfSVNfT04pIHNpdGVzCi0vLwkgdGhhdCBoYXZlIGFs
cmVhZHkgZXhlY3V0ZWQgYWZ0ZXIvZHVyaW5nIEluaXRHb29nbGVMb2dnaW5nLAotLy8JIG9uZSBu
ZWVkcyB0byBzdXBwbHkgdGhlIGV4YWN0IC0tdm1vZHVsZSBwYXR0ZXJuIHRoYXQgYXBwbGllZCB0
byB0aGVtLgotLy8gICAgICAgKElmIG5vIC0tdm1vZHVsZSBwYXR0ZXJuIGFwcGxpZWQgdG8gdGhl
bQotLy8gICAgICAgdGhlIHZhbHVlIG9mIEZMQUdTX3Ygd2lsbCBjb250aW51ZSB0byBjb250cm9s
IHRoZW0uKQotZXh0ZXJuIEdPT0dMRV9HTE9HX0RMTF9ERUNMIGludCBTZXRWTE9HTGV2ZWwoY29u
c3QgY2hhciogbW9kdWxlX3BhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbG9nX2xldmVsKTsKLQotLy8gVmFyaW91cyBkZWNsYXJhdGlvbnMg
bmVlZGVkIGZvciBWTE9HX0lTX09OIGFib3ZlOiA9PT09PT09PT09PT09PT09PT09PT09PT09Ci0K
LS8vIFNwZWNpYWwgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgVkxPR19JU19PTiBzaXRl
IGhhcyBub3QgYmVlbgotLy8gaW5pdGlhbGl6ZWQuICBXZSBtYWtlIHRoaXMgYSBsYXJnZSB2YWx1
ZSwgc28gdGhlIGNvbW1vbi1jYXNlIGNoZWNrCi0vLyBvZiAiKnZsb2NhbF9fID49IHZlcmJvc2Vf
bGV2ZWxfXyIgaW4gVkxPR19JU19PTiBkZWZpbml0aW9uCi0vLyBwYXNzZXMgaW4gc3VjaCBjYXNl
cyBhbmQgSW5pdFZMT0czX18gaXMgdGhlbiB0cmlnZ2VyZWQuCi1leHRlcm4gQGFjX2dvb2dsZV9u
YW1lc3BhY2VAOjppbnQzMiBrTG9nU2l0ZVVuaW5pdGlhbGl6ZWQ7Ci0KLS8vIEhlbHBlciByb3V0
aW5lIHdoaWNoIGRldGVybWluZXMgdGhlIGxvZ2dpbmcgaW5mbyBmb3IgYSBwYXJ0aWNhbHVyIFZM
T0cgc2l0ZS4KLS8vICAgc2l0ZV9mbGFnICAgICBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgc2l0ZS1s
b2NhbCBwb2ludGVyIHRvIHRoZSBjb250cm9sbGluZwotLy8gICAgICAgICAgICAgICAgIHZlcmJv
c2l0eSBsZXZlbAotLy8gICBzaXRlX2RlZmF1bHQgIGlzIHRoZSBkZWZhdWx0IHRvIHVzZSBmb3Ig
KnNpdGVfZmxhZwotLy8gICBmbmFtZSAgICAgICAgIGlzIHRoZSBjdXJyZW50IHNvdXJjZSBmaWxl
IG5hbWUKLS8vICAgdmVyYm9zZV9sZXZlbCBpcyB0aGUgYXJndW1lbnQgdG8gVkxPR19JU19PTgot
Ly8gV2Ugd2lsbCByZXR1cm4gdGhlIHJldHVybiB2YWx1ZSBmb3IgVkxPR19JU19PTgotLy8gYW5k
IGlmIHBvc3NpYmxlIHNldCAqc2l0ZV9mbGFnIGFwcHJvcHJpYXRlbHkuCi1leHRlcm4gR09PR0xF
X0dMT0dfRExMX0RFQ0wgYm9vbCBJbml0VkxPRzNfXygKLSAgICBAYWNfZ29vZ2xlX25hbWVzcGFj
ZUA6OmludDMyKiogc2l0ZV9mbGFnLAotICAgIEBhY19nb29nbGVfbmFtZXNwYWNlQDo6aW50MzIq
IHNpdGVfZGVmYXVsdCwKLSAgICBjb25zdCBjaGFyKiBmbmFtZSwKLSAgICBAYWNfZ29vZ2xlX25h
bWVzcGFjZUA6OmludDMyIHZlcmJvc2VfbGV2ZWwpOwotCi0jZW5kaWYgIC8vIEJBU0VfVkxPR19J
U19PTl9IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Z2xvZy9zcmMvbG9nZ2luZy5jYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2dsb2cvc3JjL2xvZ2dpbmcuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiODQ3
OGUxMTU1YWJjOTllMzcxMDA1MDk0YjUyNzkxYmRiNTc2MzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZ2xvZy9zcmMvbG9nZ2luZy5jYworKysgL2Rldi9udWxsCkBAIC0xLDE5ODggKzAsMCBA
QAotLy8gQ29weXJpZ2h0IChjKSAxOTk5LCBHb29nbGUgSW5jLgotLy8gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2Rl
ZmluZSBfR05VX1NPVVJDRSAxIC8vIG5lZWRlZCBmb3IgT19OT0ZPTExPVyBhbmQgcHJlYWQoKS9w
d3JpdGUoKQotCi0jaW5jbHVkZSAidXRpbGl0aWVzLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+
Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8aW9tYW5pcD4KLSNpbmNsdWRlIDxzdHJp
bmc+Ci0jaWZkZWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4gIC8vIEZvciBf
ZXhpdC4KLSNlbmRpZgotI2luY2x1ZGUgPGNsaW1pdHM+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+
Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpZmRlZiBIQVZFX1NZU19VVFNOQU1FX0gKLSMgaW5j
bHVkZSA8c3lzL3V0c25hbWUuaD4gIC8vIEZvciB1bmFtZS4KLSNlbmRpZgotI2luY2x1ZGUgPGZj
bnRsLmg+Ci0jaW5jbHVkZSA8Y3N0ZGlvPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUg
PHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lmZGVmIEhBVkVfUFdEX0gKLSMgaW5j
bHVkZSA8cHdkLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU0xPR19ICi0jIGluY2x1ZGUgPHN5
c2xvZy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPGVycm5vLmg+ICAg
ICAgICAgICAgICAgICAgIC8vIGZvciBlcnJubwotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVk
ZSAiYmFzZS9jb21tYW5kbGluZWZsYWdzLmgiICAgICAgICAvLyB0byBnZXQgdGhlIHByb2dyYW0g
bmFtZQotI2luY2x1ZGUgImdsb2cvbG9nZ2luZy5oIgotI2luY2x1ZGUgImdsb2cvcmF3X2xvZ2dp
bmcuaCIKLSNpbmNsdWRlICJiYXNlL2dvb2dsZWluaXQuaCIKLQotdXNpbmcgc3RkOjpzdHJpbmc7
Ci11c2luZyBzdGQ6OnZlY3RvcjsKLXVzaW5nIHN0ZDo6c2V0dzsKLXVzaW5nIHN0ZDo6c2V0Zmls
bDsKLXVzaW5nIHN0ZDo6aGV4OwotdXNpbmcgc3RkOjpkZWM7Ci11c2luZyBzdGQ6Om1pbjsKLXVz
aW5nIHN0ZDo6b3N0cmVhbTsKLXVzaW5nIHN0ZDo6b3N0cmluZ3N0cmVhbTsKLQotdXNpbmcgc3Rk
OjpGSUxFOwotdXNpbmcgc3RkOjpmd3JpdGU7Ci11c2luZyBzdGQ6OmZjbG9zZTsKLXVzaW5nIHN0
ZDo6ZmZsdXNoOwotdXNpbmcgc3RkOjpmcHJpbnRmOwotdXNpbmcgc3RkOjpwZXJyb3I7Ci0KLSNp
ZmRlZiBfX1FOWF9fCi11c2luZyBzdGQ6OmZkb3BlbjsKLSNlbmRpZgotCi0jaWZkZWYgX1dJTjMy
Ci0jZGVmaW5lIGZkb3BlbiBfZmRvcGVuCi0jZW5kaWYKLQotLy8gVGhlcmUgaXMgbm8gdGhyZWFk
IGFubm90YXRpb24gc3VwcG9ydC4KLSNkZWZpbmUgRVhDTFVTSVZFX0xPQ0tTX1JFUVVJUkVEKG11
KQotCi1zdGF0aWMgYm9vbCBCb29sRnJvbUVudihjb25zdCBjaGFyICp2YXJuYW1lLCBib29sIGRl
ZnZhbCkgewotICBjb25zdCBjaGFyKiBjb25zdCB2YWxzdHIgPSBnZXRlbnYodmFybmFtZSk7Ci0g
IGlmICghdmFsc3RyKSB7Ci0gICAgcmV0dXJuIGRlZnZhbDsKLSAgfQotICByZXR1cm4gbWVtY2hy
KCJ0VHlZMVwwIiwgdmFsc3RyWzBdLCA2KSAhPSBOVUxMOwotfQotCi1HTE9HX0RFRklORV9ib29s
KGxvZ3Rvc3RkZXJyLCBCb29sRnJvbUVudigiR09PR0xFX0xPR1RPU1RERVJSIiwgZmFsc2UpLAot
ICAgICAgICAgICAgICAgICAibG9nIG1lc3NhZ2VzIGdvIHRvIHN0ZGVyciBpbnN0ZWFkIG9mIGxv
Z2ZpbGVzIik7Ci1HTE9HX0RFRklORV9ib29sKGFsc29sb2d0b3N0ZGVyciwgQm9vbEZyb21FbnYo
IkdPT0dMRV9BTFNPTE9HVE9TVERFUlIiLCBmYWxzZSksCi0gICAgICAgICAgICAgICAgICJsb2cg
bWVzc2FnZXMgZ28gdG8gc3RkZXJyIGluIGFkZGl0aW9uIHRvIGxvZ2ZpbGVzIik7Ci1HTE9HX0RF
RklORV9ib29sKGNvbG9ybG9ndG9zdGRlcnIsIGZhbHNlLAotICAgICAgICAgICAgICAgICAiY29s
b3IgbWVzc2FnZXMgbG9nZ2VkIHRvIHN0ZGVyciAoaWYgc3VwcG9ydGVkIGJ5IHRlcm1pbmFsKSIp
OwotI2lmZGVmIE9TX0xJTlVYCi1HTE9HX0RFRklORV9ib29sKGRyb3BfbG9nX21lbW9yeSwgdHJ1
ZSwgIkRyb3AgaW4tbWVtb3J5IGJ1ZmZlcnMgb2YgbG9nIGNvbnRlbnRzLiAiCi0gICAgICAgICAg
ICAgICAgICJMb2dzIGNhbiBncm93IHZlcnkgcXVpY2tseSBhbmQgdGhleSBhcmUgcmFyZWx5IHJl
YWQgYmVmb3JlIHRoZXkgIgotICAgICAgICAgICAgICAgICAibmVlZCB0byBiZSBldmljdGVkIGZy
b20gbWVtb3J5LiBJbnN0ZWFkLCBkcm9wIHRoZW0gZnJvbSBtZW1vcnkgIgotICAgICAgICAgICAg
ICAgICAiYXMgc29vbiBhcyB0aGV5IGFyZSBmbHVzaGVkIHRvIGRpc2suIik7Ci0jZW5kaWYKLQot
Ly8gQnkgZGVmYXVsdCwgZXJyb3JzIChpbmNsdWRpbmcgZmF0YWwgZXJyb3JzKSBnZXQgbG9nZ2Vk
IHRvIHN0ZGVyciBhcwotLy8gd2VsbCBhcyB0aGUgZmlsZS4KLS8vCi0vLyBUaGUgZGVmYXVsdCBp
cyBFUlJPUiBpbnN0ZWFkIG9mIEZBVEFMIHNvIHRoYXQgdXNlcnMgY2FuIHNlZSBwcm9ibGVtcwot
Ly8gd2hlbiB0aGV5IHJ1biBhIHByb2dyYW0gd2l0aG91dCBoYXZpbmcgdG8gbG9vayBpbiBhbm90
aGVyIGZpbGUuCi1ERUZJTkVfaW50MzIoc3RkZXJydGhyZXNob2xkLAotICAgICAgICAgICAgIEdP
T0dMRV9OQU1FU1BBQ0U6OkdMT0dfRVJST1IsCi0gICAgICAgICAgICAgImxvZyBtZXNzYWdlcyBh
dCBvciBhYm92ZSB0aGlzIGxldmVsIGFyZSBjb3BpZWQgdG8gc3RkZXJyIGluICIKLSAgICAgICAg
ICAgICAiYWRkaXRpb24gdG8gbG9nZmlsZXMuICBUaGlzIGZsYWcgb2Jzb2xldGVzIC0tYWxzb2xv
Z3Rvc3RkZXJyLiIpOwotCi1HTE9HX0RFRklORV9ib29sKGxvZ19wcmVmaXgsIHRydWUsCi0gICAg
ICAgICAgICAgICAgICJQcmVwZW5kIHRoZSBsb2cgcHJlZml4IHRvIHRoZSBzdGFydCBvZiBlYWNo
IGxvZyBsaW5lIik7Ci1HTE9HX0RFRklORV9pbnQzMihtaW5sb2dsZXZlbCwgMCwgIk1lc3NhZ2Vz
IGxvZ2dlZCBhdCBhIGxvd2VyIGxldmVsIHRoYW4gdGhpcyBkb24ndCAiCi0gICAgICAgICAgICAg
ICAgICAiYWN0dWFsbHkgZ2V0IGxvZ2dlZCBhbnl3aGVyZSIpOwotR0xPR19ERUZJTkVfaW50MzIo
bG9nYnVmbGV2ZWwsIDAsCi0gICAgICAgICAgICAgICAgICAiQnVmZmVyIGxvZyBtZXNzYWdlcyBs
b2dnZWQgYXQgdGhpcyBsZXZlbCBvciBsb3dlciIKLSAgICAgICAgICAgICAgICAgICIgKC0xIG1l
YW5zIGRvbid0IGJ1ZmZlcjsgMCBtZWFucyBidWZmZXIgSU5GTyBvbmx5OyIKLSAgICAgICAgICAg
ICAgICAgICIgLi4uKSIpOwotR0xPR19ERUZJTkVfaW50MzIobG9nYnVmc2VjcywgMzAsCi0gICAg
ICAgICAgICAgICAgICAiQnVmZmVyIGxvZyBtZXNzYWdlcyBmb3IgYXQgbW9zdCB0aGlzIG1hbnkg
c2Vjb25kcyIpOwotCi0vLyBDb21wdXRlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciAtLWxvZ19kaXIK
LXN0YXRpYyBjb25zdCBjaGFyKiBEZWZhdWx0TG9nRGlyKCkgewotICBjb25zdCBjaGFyKiBlbnY7
Ci0gIGVudiA9IGdldGVudigiR09PR0xFX0xPR19ESVIiKTsKLSAgaWYgKGVudiAhPSBOVUxMICYm
IGVudlswXSAhPSAnXDAnKSB7Ci0gICAgcmV0dXJuIGVudjsKLSAgfQotICBlbnYgPSBnZXRlbnYo
IlRFU1RfVE1QRElSIik7Ci0gIGlmIChlbnYgIT0gTlVMTCAmJiBlbnZbMF0gIT0gJ1wwJykgewot
ICAgIHJldHVybiBlbnY7Ci0gIH0KLSAgcmV0dXJuICIiOwotfQotCi1HTE9HX0RFRklORV9pbnQz
Mihsb2dmaWxlX21vZGUsIDA2NjQsICJMb2cgZmlsZSBtb2RlL3Blcm1pc3Npb25zLiIpOwotCi1H
TE9HX0RFRklORV9zdHJpbmcobG9nX2RpciwgRGVmYXVsdExvZ0RpcigpLAotICAgICAgICAgICAg
ICAgICAgICJJZiBzcGVjaWZpZWQsIGxvZ2ZpbGVzIGFyZSB3cml0dGVuIGludG8gdGhpcyBkaXJl
Y3RvcnkgaW5zdGVhZCAiCi0gICAgICAgICAgICAgICAgICAgIm9mIHRoZSBkZWZhdWx0IGxvZ2dp
bmcgZGlyZWN0b3J5LiIpOwotR0xPR19ERUZJTkVfc3RyaW5nKGxvZ19saW5rLCAiIiwgIlB1dCBh
ZGRpdGlvbmFsIGxpbmtzIHRvIHRoZSBsb2cgIgotICAgICAgICAgICAgICAgICAgICJmaWxlcyBp
biB0aGlzIGRpcmVjdG9yeSIpOwotCi1HTE9HX0RFRklORV9pbnQzMihtYXhfbG9nX3NpemUsIDE4
MDAsCi0gICAgICAgICAgICAgICAgICAiYXBwcm94LiBtYXhpbXVtIGxvZyBmaWxlIHNpemUgKGlu
IE1CKS4gQSB2YWx1ZSBvZiAwIHdpbGwgIgotICAgICAgICAgICAgICAgICAgImJlIHNpbGVudGx5
IG92ZXJyaWRkZW4gdG8gMS4iKTsKLQotR0xPR19ERUZJTkVfYm9vbChzdG9wX2xvZ2dpbmdfaWZf
ZnVsbF9kaXNrLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgIlN0b3AgYXR0ZW1wdGluZyB0byBs
b2cgdG8gZGlzayBpZiB0aGUgZGlzayBpcyBmdWxsLiIpOwotCi1HTE9HX0RFRklORV9zdHJpbmco
bG9nX2JhY2t0cmFjZV9hdCwgIiIsCi0gICAgICAgICAgICAgICAgICAgIkVtaXQgYSBiYWNrdHJh
Y2Ugd2hlbiBsb2dnaW5nIGF0IGZpbGU6bGluZW51bS4iKTsKLQotLy8gVE9ETyhoYW1hamkpOiBj
b25zaWRlciB3aW5kb3dzCi0jZGVmaW5lIFBBVEhfU0VQQVJBVE9SICcvJwotCi0jaWZuZGVmIEhB
VkVfUFJFQUQKLSNpZiBkZWZpbmVkKE9TX1dJTkRPV1MpCi0jaW5jbHVkZSA8QmFzZVRzZC5oPgot
I2RlZmluZSBzc2l6ZV90IFNTSVpFX1QKLSNlbmRpZgotc3RhdGljIHNzaXplX3QgcHJlYWQoaW50
IGZkLCB2b2lkKiBidWYsIHNpemVfdCBjb3VudCwgb2ZmX3Qgb2Zmc2V0KSB7Ci0gIG9mZl90IG9y
aWdfb2Zmc2V0ID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKLSAgaWYgKG9yaWdfb2Zmc2V0ID09
IChvZmZfdCktMSkKLSAgICByZXR1cm4gLTE7Ci0gIGlmIChsc2VlayhmZCwgb2Zmc2V0LCBTRUVL
X0NVUikgPT0gKG9mZl90KS0xKQotICAgIHJldHVybiAtMTsKLSAgc3NpemVfdCBsZW4gPSByZWFk
KGZkLCBidWYsIGNvdW50KTsKLSAgaWYgKGxlbiA8IDApCi0gICAgcmV0dXJuIGxlbjsKLSAgaWYg
KGxzZWVrKGZkLCBvcmlnX29mZnNldCwgU0VFS19TRVQpID09IChvZmZfdCktMSkKLSAgICByZXR1
cm4gLTE7Ci0gIHJldHVybiBsZW47Ci19Ci0jZW5kaWYgIC8vICFIQVZFX1BSRUFECi0KLSNpZm5k
ZWYgSEFWRV9QV1JJVEUKLXN0YXRpYyBzc2l6ZV90IHB3cml0ZShpbnQgZmQsIHZvaWQqIGJ1Ziwg
c2l6ZV90IGNvdW50LCBvZmZfdCBvZmZzZXQpIHsKLSAgb2ZmX3Qgb3JpZ19vZmZzZXQgPSBsc2Vl
ayhmZCwgMCwgU0VFS19DVVIpOwotICBpZiAob3JpZ19vZmZzZXQgPT0gKG9mZl90KS0xKQotICAg
IHJldHVybiAtMTsKLSAgaWYgKGxzZWVrKGZkLCBvZmZzZXQsIFNFRUtfQ1VSKSA9PSAob2ZmX3Qp
LTEpCi0gICAgcmV0dXJuIC0xOwotICBzc2l6ZV90IGxlbiA9IHdyaXRlKGZkLCBidWYsIGNvdW50
KTsKLSAgaWYgKGxlbiA8IDApCi0gICAgcmV0dXJuIGxlbjsKLSAgaWYgKGxzZWVrKGZkLCBvcmln
X29mZnNldCwgU0VFS19TRVQpID09IChvZmZfdCktMSkKLSAgICByZXR1cm4gLTE7Ci0gIHJldHVy
biBsZW47Ci19Ci0jZW5kaWYgIC8vICFIQVZFX1BXUklURQotCi1zdGF0aWMgdm9pZCBHZXRIb3N0
TmFtZShzdHJpbmcqIGhvc3RuYW1lKSB7Ci0jaWYgZGVmaW5lZChIQVZFX1NZU19VVFNOQU1FX0gp
Ci0gIHN0cnVjdCB1dHNuYW1lIGJ1ZjsKLSAgaWYgKDAgIT0gdW5hbWUoJmJ1ZikpIHsKLSAgICAv
LyBlbnN1cmUgbnVsbCB0ZXJtaW5hdGlvbiBvbiBmYWlsdXJlCi0gICAgKmJ1Zi5ub2RlbmFtZSA9
ICdcMCc7Ci0gIH0KLSAgKmhvc3RuYW1lID0gYnVmLm5vZGVuYW1lOwotI2VsaWYgZGVmaW5lZChP
U19XSU5ET1dTKQotICBjaGFyIGJ1ZltNQVhfQ09NUFVURVJOQU1FX0xFTkdUSCArIDFdOwotICBE
V09SRCBsZW4gPSBNQVhfQ09NUFVURVJOQU1FX0xFTkdUSCArIDE7Ci0gIGlmIChHZXRDb21wdXRl
ck5hbWVBKGJ1ZiwgJmxlbikpIHsKLSAgICAqaG9zdG5hbWUgPSBidWY7Ci0gIH0gZWxzZSB7Ci0g
ICAgaG9zdG5hbWUtPmNsZWFyKCk7Ci0gIH0KLSNlbHNlCi0jIHdhcm5pbmcgVGhlcmUgaXMgbm8g
d2F5IHRvIHJldHJpZXZlIHRoZSBob3N0IG5hbWUuCi0gICpob3N0bmFtZSA9ICIodW5rbm93biki
OwotI2VuZGlmCi19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZmYgdGVybWluYWwgc3VwcG9ydHMgdXNp
bmcgY29sb3JzIGluIG91dHB1dC4KLXN0YXRpYyBib29sIFRlcm1pbmFsU3VwcG9ydHNDb2xvcigp
IHsKLSAgYm9vbCB0ZXJtX3N1cHBvcnRzX2NvbG9yID0gZmFsc2U7Ci0jaWZkZWYgT1NfV0lORE9X
UwotICAvLyBvbiBXaW5kb3dzIFRFUk0gdmFyaWFibGUgaXMgdXN1YWxseSBub3Qgc2V0LCBidXQg
dGhlIGNvbnNvbGUgZG9lcwotICAvLyBzdXBwb3J0IGNvbG9ycy4KLSAgdGVybV9zdXBwb3J0c19j
b2xvciA9IHRydWU7Ci0jZWxzZQotICAvLyBPbiBub24tV2luZG93cyBwbGF0Zm9ybXMsIHdlIHJl
bHkgb24gdGhlIFRFUk0gdmFyaWFibGUuCi0gIGNvbnN0IGNoYXIqIGNvbnN0IHRlcm0gPSBnZXRl
bnYoIlRFUk0iKTsKLSAgaWYgKHRlcm0gIT0gTlVMTCAmJiB0ZXJtWzBdICE9ICdcMCcpIHsKLSAg
ICB0ZXJtX3N1cHBvcnRzX2NvbG9yID0KLSAgICAgICFzdHJjbXAodGVybSwgInh0ZXJtIikgfHwK
LSAgICAgICFzdHJjbXAodGVybSwgInh0ZXJtLWNvbG9yIikgfHwKLSAgICAgICFzdHJjbXAodGVy
bSwgInh0ZXJtLTI1NmNvbG9yIikgfHwKLSAgICAgICFzdHJjbXAodGVybSwgInNjcmVlbi0yNTZj
b2xvciIpIHx8Ci0gICAgICAhc3RyY21wKHRlcm0sICJzY3JlZW4iKSB8fAotICAgICAgIXN0cmNt
cCh0ZXJtLCAibGludXgiKSB8fAotICAgICAgIXN0cmNtcCh0ZXJtLCAiY3lnd2luIik7Ci0gIH0K
LSNlbmRpZgotICByZXR1cm4gdGVybV9zdXBwb3J0c19jb2xvcjsKLX0KLQotX1NUQVJUX0dPT0dM
RV9OQU1FU1BBQ0VfCi0KLWVudW0gR0xvZ0NvbG9yIHsKLSAgQ09MT1JfREVGQVVMVCwKLSAgQ09M
T1JfUkVELAotICBDT0xPUl9HUkVFTiwKLSAgQ09MT1JfWUVMTE9XCi19OwotCi1zdGF0aWMgR0xv
Z0NvbG9yIFNldmVyaXR5VG9Db2xvcihMb2dTZXZlcml0eSBzZXZlcml0eSkgewotICBhc3NlcnQo
c2V2ZXJpdHkgPj0gMCAmJiBzZXZlcml0eSA8IE5VTV9TRVZFUklUSUVTKTsKLSAgR0xvZ0NvbG9y
IGNvbG9yID0gQ09MT1JfREVGQVVMVDsKLSAgc3dpdGNoIChzZXZlcml0eSkgewotICBjYXNlIEdM
T0dfSU5GTzoKLSAgICBjb2xvciA9IENPTE9SX0RFRkFVTFQ7Ci0gICAgYnJlYWs7Ci0gIGNhc2Ug
R0xPR19XQVJOSU5HOgotICAgIGNvbG9yID0gQ09MT1JfWUVMTE9XOwotICAgIGJyZWFrOwotICBj
YXNlIEdMT0dfRVJST1I6Ci0gIGNhc2UgR0xPR19GQVRBTDoKLSAgICBjb2xvciA9IENPTE9SX1JF
RDsKLSAgICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICAvLyBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUu
Ci0gICAgYXNzZXJ0KGZhbHNlKTsKLSAgfQotICByZXR1cm4gY29sb3I7Ci19Ci0KLSNpZmRlZiBP
U19XSU5ET1dTCi0KLS8vIFJldHVybnMgdGhlIGNoYXJhY3RlciBhdHRyaWJ1dGUgZm9yIHRoZSBn
aXZlbiBjb2xvci4KLVdPUkQgR2V0Q29sb3JBdHRyaWJ1dGUoR0xvZ0NvbG9yIGNvbG9yKSB7Ci0g
IHN3aXRjaCAoY29sb3IpIHsKLSAgICBjYXNlIENPTE9SX1JFRDogICAgcmV0dXJuIEZPUkVHUk9V
TkRfUkVEOwotICAgIGNhc2UgQ09MT1JfR1JFRU46ICByZXR1cm4gRk9SRUdST1VORF9HUkVFTjsK
LSAgICBjYXNlIENPTE9SX1lFTExPVzogcmV0dXJuIEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VO
RF9HUkVFTjsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotI2Vs
c2UKLQotLy8gUmV0dXJucyB0aGUgQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZ2l2ZW4gY29sb3Iu
Ci1jb25zdCBjaGFyKiBHZXRBbnNpQ29sb3JDb2RlKEdMb2dDb2xvciBjb2xvcikgewotICBzd2l0
Y2ggKGNvbG9yKSB7Ci0gIGNhc2UgQ09MT1JfUkVEOiAgICAgcmV0dXJuICIxIjsKLSAgY2FzZSBD
T0xPUl9HUkVFTjogICByZXR1cm4gIjIiOwotICBjYXNlIENPTE9SX1lFTExPVzogIHJldHVybiAi
MyI7Ci0gIGNhc2UgQ09MT1JfREVGQVVMVDogIHJldHVybiAiIjsKLSAgfTsKLSAgcmV0dXJuIE5V
TEw7IC8vIHN0b3Agd2FybmluZyBhYm91dCByZXR1cm4gdHlwZS4KLX0KLQotI2VuZGlmICAvLyBP
U19XSU5ET1dTCi0KLS8vIFNhZmVseSBnZXQgbWF4X2xvZ19zaXplLCBvdmVycmlkaW5nIHRvIDEg
aWYgaXQgc29tZWhvdyBnZXRzIGRlZmluZWQgYXMgMAotc3RhdGljIGludDMyIE1heExvZ1NpemUo
KSB7Ci0gIHJldHVybiAoRkxBR1NfbWF4X2xvZ19zaXplID4gMCA/IEZMQUdTX21heF9sb2dfc2l6
ZSA6IDEpOwotfQotCi0vLyBBbiBhcmJpdHJhcnkgbGltaXQgb24gdGhlIGxlbmd0aCBvZiBhIHNp
bmdsZSBsb2cgbWVzc2FnZS4gIFRoaXMKLS8vIGlzIHNvIHRoYXQgc3RyZWFtaW5nIGNhbiBiZSBk
b25lIG1vcmUgZWZmaWNpZW50bHkuCi1jb25zdCBzaXplX3QgTG9nTWVzc2FnZTo6a01heExvZ01l
c3NhZ2VMZW4gPSAzMDAwMDsKLQotc3RydWN0IExvZ01lc3NhZ2U6OkxvZ01lc3NhZ2VEYXRhICB7
Ci0gIExvZ01lc3NhZ2VEYXRhKCk7Ci0gIHZvaWQgcmVzZXQoKTsKLQotICBpbnQgcHJlc2VydmVk
X2Vycm5vXzsgICAgICAvLyBwcmVzZXJ2ZWQgZXJybm8KLSAgLy8gQnVmZmVyIHNwYWNlOyBjb250
YWlucyBjb21wbGV0ZSBtZXNzYWdlIHRleHQuCi0gIGNoYXIgbWVzc2FnZV90ZXh0X1tMb2dNZXNz
YWdlOjprTWF4TG9nTWVzc2FnZUxlbisxXTsKLSAgTG9nU3RyZWFtIHN0cmVhbV87Ci0gIGNoYXIg
c2V2ZXJpdHlfOyAgICAgIC8vIFdoYXQgbGV2ZWwgaXMgdGhpcyBMb2dNZXNzYWdlIGxvZ2dlZCBh
dD8KLSAgaW50IGxpbmVfOyAgICAgICAgICAgICAgICAgLy8gbGluZSBudW1iZXIgd2hlcmUgbG9n
Z2luZyBjYWxsIGlzLgotICB2b2lkIChMb2dNZXNzYWdlOjoqc2VuZF9tZXRob2RfKSgpOyAgLy8g
Q2FsbCB0aGlzIGluIGRlc3RydWN0b3IgdG8gc2VuZAotICB1bmlvbiB7ICAvLyBBdCBtb3N0IG9u
ZSBvZiB0aGVzZSBpcyB1c2VkOiB1bmlvbiB0byBrZWVwIHRoZSBzaXplIGxvdy4KLSAgICBMb2dT
aW5rKiBzaW5rXzsgICAgICAgICAgICAgLy8gTlVMTCBvciBzaW5rIHRvIHNlbmQgbWVzc2FnZSB0
bwotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiogb3V0dmVjXzsgLy8gTlVMTCBvciB2ZWN0
b3IgdG8gcHVzaCBtZXNzYWdlIG9udG8KLSAgICBzdGQ6OnN0cmluZyogbWVzc2FnZV87ICAgICAg
ICAgICAgIC8vIE5VTEwgb3Igc3RyaW5nIHRvIHdyaXRlIG1lc3NhZ2UgaW50bwotICB9OwotICB0
aW1lX3QgdGltZXN0YW1wXzsgICAgICAgICAgICAvLyBUaW1lIG9mIGNyZWF0aW9uIG9mIExvZ01l
c3NhZ2UKLSAgc3RydWN0IDo6dG0gdG1fdGltZV87ICAgICAgICAgLy8gVGltZSBvZiBjcmVhdGlv
biBvZiBMb2dNZXNzYWdlCi0gIHNpemVfdCBudW1fcHJlZml4X2NoYXJzXzsgICAgIC8vICMgb2Yg
Y2hhcnMgb2YgcHJlZml4IGluIHRoaXMgbWVzc2FnZQotICBzaXplX3QgbnVtX2NoYXJzX3RvX2xv
Z187ICAgICAvLyAjIG9mIGNoYXJzIG9mIG1zZyB0byBzZW5kIHRvIGxvZwotICBzaXplX3QgbnVt
X2NoYXJzX3RvX3N5c2xvZ187ICAvLyAjIG9mIGNoYXJzIG9mIG1zZyB0byBzZW5kIHRvIHN5c2xv
ZwotICBjb25zdCBjaGFyKiBiYXNlbmFtZV87ICAgICAgICAvLyBiYXNlbmFtZSBvZiBmaWxlIHRo
YXQgY2FsbGVkIExPRwotICBjb25zdCBjaGFyKiBmdWxsbmFtZV87ICAgICAgICAvLyBmdWxsbmFt
ZSBvZiBmaWxlIHRoYXQgY2FsbGVkIExPRwotICBib29sIGhhc19iZWVuX2ZsdXNoZWRfOyAgICAg
ICAvLyBmYWxzZSA9PiBkYXRhIGhhcyBub3QgYmVlbiBmbHVzaGVkCi0gIGJvb2wgZmlyc3RfZmF0
YWxfOyAgICAgICAgICAgIC8vIHRydWUgPT4gdGhpcyB3YXMgZmlyc3QgZmF0YWwgbXNnCi0KLSBw
cml2YXRlOgotICBMb2dNZXNzYWdlRGF0YShjb25zdCBMb2dNZXNzYWdlRGF0YSYpOwotICB2b2lk
IG9wZXJhdG9yPShjb25zdCBMb2dNZXNzYWdlRGF0YSYpOwotfTsKLQotLy8gQSBtdXRleCB0aGF0
IGFsbG93cyBvbmx5IG9uZSB0aHJlYWQgdG8gbG9nIGF0IGEgdGltZSwgdG8ga2VlcCB0aGluZ3Mg
ZnJvbQotLy8gZ2V0dGluZyBqdW1ibGVkLiAgU29tZSBvdGhlciB2ZXJ5IHVuY29tbW9uIGxvZ2dp
bmcgb3BlcmF0aW9ucyAobGlrZQotLy8gY2hhbmdpbmcgdGhlIGRlc3RpbmF0aW9uIGZpbGUgZm9y
IGxvZyBtZXNzYWdlcyBvZiBhIGdpdmVuIHNldmVyaXR5KSBhbHNvCi0vLyBsb2NrIHRoaXMgbXV0
ZXguICBQbGVhc2UgYmUgc3VyZSB0aGF0IGFueWJvZHkgd2hvIG1pZ2h0IHBvc3NpYmx5IG5lZWQg
dG8KLS8vIGxvY2sgaXQgZG9lcyBzby4KLXN0YXRpYyBNdXRleCBsb2dfbXV0ZXg7Ci0KLS8vIE51
bWJlciBvZiBtZXNzYWdlcyBzZW50IGF0IGVhY2ggc2V2ZXJpdHkuICBVbmRlciBsb2dfbXV0ZXgu
Ci1pbnQ2NCBMb2dNZXNzYWdlOjpudW1fbWVzc2FnZXNfW05VTV9TRVZFUklUSUVTXSA9IHswLCAw
LCAwLCAwfTsKLQotLy8gR2xvYmFsbHkgZGlzYWJsZSBsb2cgd3JpdGluZyAoaWYgZGlzayBpcyBm
dWxsKQotc3RhdGljIGJvb2wgc3RvcF93cml0aW5nID0gZmFsc2U7Ci0KLWNvbnN0IGNoYXIqY29u
c3QgTG9nU2V2ZXJpdHlOYW1lc1tOVU1fU0VWRVJJVElFU10gPSB7Ci0gICJJTkZPIiwgIldBUk5J
TkciLCAiRVJST1IiLCAiRkFUQUwiCi19OwotCi0vLyBIYXMgdGhlIHVzZXIgY2FsbGVkIFNldEV4
aXRPbkRGYXRhbCh0cnVlKT8KLXN0YXRpYyBib29sIGV4aXRfb25fZGZhdGFsID0gdHJ1ZTsKLQot
Y29uc3QgY2hhciogR2V0TG9nU2V2ZXJpdHlOYW1lKExvZ1NldmVyaXR5IHNldmVyaXR5KSB7Ci0g
IHJldHVybiBMb2dTZXZlcml0eU5hbWVzW3NldmVyaXR5XTsKLX0KLQotYmFzZTo6TG9nZ2VyOjp+
TG9nZ2VyKCkgewotfQotCi1uYW1lc3BhY2UgewotCi0vLyBFbmNhcHN1bGF0ZXMgYWxsIGZpbGUt
c3lzdGVtIHJlbGF0ZWQgc3RhdGUKLWNsYXNzIExvZ0ZpbGVPYmplY3QgOiBwdWJsaWMgYmFzZTo6
TG9nZ2VyIHsKLSBwdWJsaWM6Ci0gIExvZ0ZpbGVPYmplY3QoTG9nU2V2ZXJpdHkgc2V2ZXJpdHks
IGNvbnN0IGNoYXIqIGJhc2VfZmlsZW5hbWUpOwotICB+TG9nRmlsZU9iamVjdCgpOwotCi0gIHZp
cnR1YWwgdm9pZCBXcml0ZShib29sIGZvcmNlX2ZsdXNoLCAvLyBTaG91bGQgd2UgZm9yY2UgYSBm
bHVzaCBoZXJlPwotICAgICAgICAgICAgICAgICAgICAgdGltZV90IHRpbWVzdGFtcCwgIC8vIFRp
bWVzdGFtcCBmb3IgdGhpcyBlbnRyeQotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlX2xlbik7Ci0KLSAgLy8g
Q29uZmlndXJhdGlvbiBvcHRpb25zCi0gIHZvaWQgU2V0QmFzZW5hbWUoY29uc3QgY2hhciogYmFz
ZW5hbWUpOwotICB2b2lkIFNldEV4dGVuc2lvbihjb25zdCBjaGFyKiBleHQpOwotICB2b2lkIFNl
dFN5bWxpbmtCYXNlbmFtZShjb25zdCBjaGFyKiBzeW1saW5rX2Jhc2VuYW1lKTsKLQotICAvLyBO
b3JtYWwgZmx1c2hpbmcgcm91dGluZQotICB2aXJ0dWFsIHZvaWQgRmx1c2goKTsKLQotICAvLyBJ
dCBpcyB0aGUgYWN0dWFsIGZpbGUgbGVuZ3RoIGZvciB0aGUgc3lzdGVtIGxvZ2dlcnMsCi0gIC8v
IGkuZS4sIElORk8sIEVSUk9SLCBldGMuCi0gIHZpcnR1YWwgdWludDMyIExvZ1NpemUoKSB7Ci0g
ICAgTXV0ZXhMb2NrIGwoJmxvY2tfKTsKLSAgICByZXR1cm4gZmlsZV9sZW5ndGhfOwotICB9Ci0K
LSAgLy8gSW50ZXJuYWwgZmx1c2ggcm91dGluZS4gIEV4cG9zZWQgc28gdGhhdCBGbHVzaExvZ0Zp
bGVzVW5zYWZlKCkKLSAgLy8gY2FuIGF2b2lkIGdyYWJiaW5nIGEgbG9jay4gIFVzdWFsbHkgRmx1
c2goKSBjYWxscyBpdCBhZnRlcgotICAvLyBhY3F1aXJpbmcgbG9ja18uCi0gIHZvaWQgRmx1c2hV
bmxvY2tlZCgpOwotCi0gcHJpdmF0ZToKLSAgc3RhdGljIGNvbnN0IHVpbnQzMiBrUm9sbG92ZXJB
dHRlbXB0RnJlcXVlbmN5ID0gMHgyMDsKLQotICBNdXRleCBsb2NrXzsKLSAgYm9vbCBiYXNlX2Zp
bGVuYW1lX3NlbGVjdGVkXzsKLSAgc3RyaW5nIGJhc2VfZmlsZW5hbWVfOwotICBzdHJpbmcgc3lt
bGlua19iYXNlbmFtZV87Ci0gIHN0cmluZyBmaWxlbmFtZV9leHRlbnNpb25fOyAgICAgLy8gb3B0
aW9uIHVzZXJzIGNhbiBzcGVjaWZ5IChlZyB0byBhZGQgcG9ydCMpCi0gIEZJTEUqIGZpbGVfOwot
ICBMb2dTZXZlcml0eSBzZXZlcml0eV87Ci0gIHVpbnQzMiBieXRlc19zaW5jZV9mbHVzaF87Ci0g
IHVpbnQzMiBkcm9wcGVkX21lbV9sZW5ndGhfOwotICB1aW50MzIgZmlsZV9sZW5ndGhfOwotICB1
bnNpZ25lZCBpbnQgcm9sbG92ZXJfYXR0ZW1wdF87Ci0gIGludDY0IG5leHRfZmx1c2hfdGltZV87
ICAgICAgICAgLy8gY3ljbGUgY291bnQgYXQgd2hpY2ggdG8gZmx1c2ggbG9nCi0KLSAgLy8gQWN0
dWFsbHkgY3JlYXRlIGEgbG9nZmlsZSB1c2luZyB0aGUgdmFsdWUgb2YgYmFzZV9maWxlbmFtZV8g
YW5kIHRoZQotICAvLyBzdXBwbGllZCBhcmd1bWVudCB0aW1lX3BpZF9zdHJpbmcKLSAgLy8gUkVR
VUlSRVM6IGxvY2tfIGlzIGhlbGQKLSAgYm9vbCBDcmVhdGVMb2dmaWxlKGNvbnN0IHN0cmluZyYg
dGltZV9waWRfc3RyaW5nKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1jbGFzcyBMb2dEZXN0
aW5hdGlvbiB7Ci0gcHVibGljOgotICBmcmllbmQgY2xhc3MgTG9nTWVzc2FnZTsKLSAgZnJpZW5k
IHZvaWQgUmVwcmludEZhdGFsTWVzc2FnZSgpOwotICBmcmllbmQgYmFzZTo6TG9nZ2VyKiBiYXNl
OjpHZXRMb2dnZXIoTG9nU2V2ZXJpdHkpOwotICBmcmllbmQgdm9pZCBiYXNlOjpTZXRMb2dnZXIo
TG9nU2V2ZXJpdHksIGJhc2U6OkxvZ2dlciopOwotCi0gIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGp1
c3QgZm9yd2FyZGVkIHRvIGJ5IHRoZWlyIGdsb2JhbCB2ZXJzaW9ucy4KLSAgc3RhdGljIHZvaWQg
U2V0TG9nRGVzdGluYXRpb24oTG9nU2V2ZXJpdHkgc2V2ZXJpdHksCi0JCQkJY29uc3QgY2hhciog
YmFzZV9maWxlbmFtZSk7Ci0gIHN0YXRpYyB2b2lkIFNldExvZ1N5bWxpbmsoTG9nU2V2ZXJpdHkg
c2V2ZXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogc3ltbGlu
a19iYXNlbmFtZSk7Ci0gIHN0YXRpYyB2b2lkIEFkZExvZ1NpbmsoTG9nU2luayAqZGVzdGluYXRp
b24pOwotICBzdGF0aWMgdm9pZCBSZW1vdmVMb2dTaW5rKExvZ1NpbmsgKmRlc3RpbmF0aW9uKTsK
LSAgc3RhdGljIHZvaWQgU2V0TG9nRmlsZW5hbWVFeHRlbnNpb24oY29uc3QgY2hhciogZmlsZW5h
bWVfZXh0ZW5zaW9uKTsKLSAgc3RhdGljIHZvaWQgU2V0U3RkZXJyTG9nZ2luZyhMb2dTZXZlcml0
eSBtaW5fc2V2ZXJpdHkpOwotICBzdGF0aWMgdm9pZCBMb2dUb1N0ZGVycigpOwotICAvLyBGbHVz
aCBhbGwgbG9nIGZpbGVzIHRoYXQgYXJlIGF0IGxlYXN0IGF0IHRoZSBnaXZlbiBzZXZlcml0eSBs
ZXZlbAotICBzdGF0aWMgdm9pZCBGbHVzaExvZ0ZpbGVzKGludCBtaW5fc2V2ZXJpdHkpOwotICBz
dGF0aWMgdm9pZCBGbHVzaExvZ0ZpbGVzVW5zYWZlKGludCBtaW5fc2V2ZXJpdHkpOwotCi0gIC8v
IHdlIHNldCB0aGUgbWF4aW11bSBzaXplIG9mIG91ciBwYWNrZXQgdG8gYmUgMTQwMCwgdGhlIGxv
Z2ljIGJlaW5nCi0gIC8vIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbi4KLSAgLy8gUmVhbGx5IHRo
aXMgbnVtYmVyIGlzIGFyYml0cmFyeS4KLSAgc3RhdGljIGNvbnN0IGludCBrTmV0d29ya0J5dGVz
ID0gMTQwMDsKLQotICBzdGF0aWMgY29uc3Qgc3RyaW5nJiBob3N0bmFtZSgpOwotICBzdGF0aWMg
Y29uc3QgYm9vbCYgdGVybWluYWxfc3VwcG9ydHNfY29sb3IoKSB7Ci0gICAgcmV0dXJuIHRlcm1p
bmFsX3N1cHBvcnRzX2NvbG9yXzsKLSAgfQotCi0gIHN0YXRpYyB2b2lkIERlbGV0ZUxvZ0Rlc3Rp
bmF0aW9ucygpOwotCi0gcHJpdmF0ZToKLSAgTG9nRGVzdGluYXRpb24oTG9nU2V2ZXJpdHkgc2V2
ZXJpdHksIGNvbnN0IGNoYXIqIGJhc2VfZmlsZW5hbWUpOwotICB+TG9nRGVzdGluYXRpb24oKSB7
IH0KLQotICAvLyBUYWtlIGEgbG9nIG1lc3NhZ2Ugb2YgYSBwYXJ0aWN1bGFyIHNldmVyaXR5IGFu
ZCBsb2cgaXQgdG8gc3RkZXJyCi0gIC8vIGlmZiBpdCdzIG9mIGEgaGlnaCBlbm91Z2ggc2V2ZXJp
dHkgdG8gZGVzZXJ2ZSBpdC4KLSAgc3RhdGljIHZvaWQgTWF5YmVMb2dUb1N0ZGVycihMb2dTZXZl
cml0eSBzZXZlcml0eSwgY29uc3QgY2hhciogbWVzc2FnZSwKLQkJCSAgICAgICBzaXplX3QgbGVu
KTsKLQotICAvLyBUYWtlIGEgbG9nIG1lc3NhZ2Ugb2YgYSBwYXJ0aWN1bGFyIHNldmVyaXR5IGFu
ZCBsb2cgaXQgdG8gYSBmaWxlCi0gIC8vIGlmZiB0aGUgYmFzZSBmaWxlbmFtZSBpcyBub3QgIiIg
KHdoaWNoIG1lYW5zICJkb24ndCBsb2cgdG8gbWUiKQotICBzdGF0aWMgdm9pZCBNYXliZUxvZ1Rv
TG9nZmlsZShMb2dTZXZlcml0eSBzZXZlcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZV90IHRpbWVzdGFtcCwKLQkJCQljb25zdCBjaGFyKiBtZXNzYWdlLCBzaXplX3Qg
bGVuKTsKLSAgLy8gVGFrZSBhIGxvZyBtZXNzYWdlIG9mIGEgcGFydGljdWxhciBzZXZlcml0eSBh
bmQgbG9nIGl0IHRvIHRoZSBmaWxlCi0gIC8vIGZvciB0aGF0IHNldmVyaXR5IGFuZCBhbHNvIGZv
ciBhbGwgZmlsZXMgd2l0aCBzZXZlcml0eSBsZXNzIHRoYW4KLSAgLy8gdGhpcyBzZXZlcml0eS4K
LSAgc3RhdGljIHZvaWQgTG9nVG9BbGxMb2dmaWxlcyhMb2dTZXZlcml0eSBzZXZlcml0eSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX3QgdGltZXN0YW1wLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHNpemVfdCBsZW4pOwot
Ci0gIC8vIFNlbmQgbG9nZ2luZyBpbmZvIHRvIGFsbCByZWdpc3RlcmVkIHNpbmtzLgotICBzdGF0
aWMgdm9pZCBMb2dUb1NpbmtzKExvZ1NldmVyaXR5IHNldmVyaXR5LAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bGxfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqYmFzZV9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgOjp0bSog
dG1fdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtZXNzYWdlX2xlbik7Ci0KLSAgLy8gV2Fp
dCBmb3IgYWxsIHJlZ2lzdGVyZWQgc2lua3MgdmlhIFdhaXRUaWxsU2VudAotICAvLyBpbmNsdWRp
bmcgdGhlIG9wdGlvbmFsIG9uZSBpbiAiZGF0YSIuCi0gIHN0YXRpYyB2b2lkIFdhaXRGb3JTaW5r
cyhMb2dNZXNzYWdlOjpMb2dNZXNzYWdlRGF0YSogZGF0YSk7Ci0KLSAgc3RhdGljIExvZ0Rlc3Rp
bmF0aW9uKiBsb2dfZGVzdGluYXRpb24oTG9nU2V2ZXJpdHkgc2V2ZXJpdHkpOwotCi0gIExvZ0Zp
bGVPYmplY3QgZmlsZW9iamVjdF87Ci0gIGJhc2U6OkxvZ2dlciogbG9nZ2VyXzsgICAgICAvLyBF
aXRoZXIgJmZpbGVvYmplY3RfLCBvciB3cmFwcGVyIGFyb3VuZCBpdAotCi0gIHN0YXRpYyBMb2dE
ZXN0aW5hdGlvbiogbG9nX2Rlc3RpbmF0aW9uc19bTlVNX1NFVkVSSVRJRVNdOwotICBzdGF0aWMg
c3RyaW5nIGFkZHJlc3Nlc187Ci0gIHN0YXRpYyBzdHJpbmcgaG9zdG5hbWVfOwotICBzdGF0aWMg
Ym9vbCB0ZXJtaW5hbF9zdXBwb3J0c19jb2xvcl87Ci0KLSAgLy8gYXJiaXRyYXJ5IGdsb2JhbCBs
b2dnaW5nIGRlc3RpbmF0aW9ucy4KLSAgc3RhdGljIHZlY3RvcjxMb2dTaW5rKj4qIHNpbmtzXzsK
LQotICAvLyBQcm90ZWN0cyB0aGUgdmVjdG9yIHNpbmtzXywKLSAgLy8gYnV0IG5vdCB0aGUgTG9n
U2luayBvYmplY3RzIGl0cyBlbGVtZW50cyByZWZlcmVuY2UuCi0gIHN0YXRpYyBNdXRleCBzaW5r
X211dGV4XzsKLQotICAvLyBEaXNhbGxvdwotICBMb2dEZXN0aW5hdGlvbihjb25zdCBMb2dEZXN0
aW5hdGlvbiYpOwotICBMb2dEZXN0aW5hdGlvbiYgb3BlcmF0b3I9KGNvbnN0IExvZ0Rlc3RpbmF0
aW9uJik7Ci19OwotCi1zdHJpbmcgTG9nRGVzdGluYXRpb246OmFkZHJlc3Nlc187Ci1zdHJpbmcg
TG9nRGVzdGluYXRpb246Omhvc3RuYW1lXzsKLQotdmVjdG9yPExvZ1NpbmsqPiogTG9nRGVzdGlu
YXRpb246OnNpbmtzXyA9IE5VTEw7Ci1NdXRleCBMb2dEZXN0aW5hdGlvbjo6c2lua19tdXRleF87
Ci1ib29sIExvZ0Rlc3RpbmF0aW9uOjp0ZXJtaW5hbF9zdXBwb3J0c19jb2xvcl8gPSBUZXJtaW5h
bFN1cHBvcnRzQ29sb3IoKTsKLQotLyogc3RhdGljICovCi1jb25zdCBzdHJpbmcmIExvZ0Rlc3Rp
bmF0aW9uOjpob3N0bmFtZSgpIHsKLSAgaWYgKGhvc3RuYW1lXy5lbXB0eSgpKSB7Ci0gICAgR2V0
SG9zdE5hbWUoJmhvc3RuYW1lXyk7Ci0gICAgaWYgKGhvc3RuYW1lXy5lbXB0eSgpKSB7Ci0gICAg
ICBob3N0bmFtZV8gPSAiKHVua25vd24pIjsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGhvc3RuYW1l
XzsKLX0KLQotTG9nRGVzdGluYXRpb246OkxvZ0Rlc3RpbmF0aW9uKExvZ1NldmVyaXR5IHNldmVy
aXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJhc2VfZmls
ZW5hbWUpCi0gIDogZmlsZW9iamVjdF8oc2V2ZXJpdHksIGJhc2VfZmlsZW5hbWUpLAotICAgIGxv
Z2dlcl8oJmZpbGVvYmplY3RfKSB7Ci19Ci0KLWlubGluZSB2b2lkIExvZ0Rlc3RpbmF0aW9uOjpG
bHVzaExvZ0ZpbGVzVW5zYWZlKGludCBtaW5fc2V2ZXJpdHkpIHsKLSAgLy8gYXNzdW1lIHdlIGhh
dmUgdGhlIGxvZ19tdXRleCBvciB3ZSBzaW1wbHkgZG9uJ3QgY2FyZQotICAvLyBhYm91dCBpdAot
ICBmb3IgKGludCBpID0gbWluX3NldmVyaXR5OyBpIDwgTlVNX1NFVkVSSVRJRVM7IGkrKykgewot
ICAgIExvZ0Rlc3RpbmF0aW9uKiBsb2cgPSBsb2dfZGVzdGluYXRpb25zX1tpXTsKLSAgICBpZiAo
bG9nICE9IE5VTEwpIHsKLSAgICAgIC8vIEZsdXNoIHRoZSBiYXNlIGZpbGVvYmplY3RfIGxvZ2dl
ciBkaXJlY3RseSBpbnN0ZWFkIG9mIGdvaW5nCi0gICAgICAvLyB0aHJvdWdoIGFueSB3cmFwcGVy
cyB0byByZWR1Y2UgY2hhbmNlIG9mIGRlYWRsb2NrLgotICAgICAgbG9nLT5maWxlb2JqZWN0Xy5G
bHVzaFVubG9ja2VkKCk7Ci0gICAgfQotICB9Ci19Ci0KLWlubGluZSB2b2lkIExvZ0Rlc3RpbmF0
aW9uOjpGbHVzaExvZ0ZpbGVzKGludCBtaW5fc2V2ZXJpdHkpIHsKLSAgLy8gUHJldmVudCBhbnkg
c3VidGxlIHJhY2UgY29uZGl0aW9ucyBieSB3cmFwcGluZyBhIG11dGV4IGxvY2sgYXJvdW5kCi0g
IC8vIGFsbCB0aGlzIHN0dWZmLgotICBNdXRleExvY2sgbCgmbG9nX211dGV4KTsKLSAgZm9yIChp
bnQgaSA9IG1pbl9zZXZlcml0eTsgaSA8IE5VTV9TRVZFUklUSUVTOyBpKyspIHsKLSAgICBMb2dE
ZXN0aW5hdGlvbiogbG9nID0gbG9nX2Rlc3RpbmF0aW9uKGkpOwotICAgIGlmIChsb2cgIT0gTlVM
TCkgewotICAgICAgbG9nLT5sb2dnZXJfLT5GbHVzaCgpOwotICAgIH0KLSAgfQotfQotCi1pbmxp
bmUgdm9pZCBMb2dEZXN0aW5hdGlvbjo6U2V0TG9nRGVzdGluYXRpb24oTG9nU2V2ZXJpdHkgc2V2
ZXJpdHksCi0JCQkJCSAgICAgIGNvbnN0IGNoYXIqIGJhc2VfZmlsZW5hbWUpIHsKLSAgYXNzZXJ0
KHNldmVyaXR5ID49IDAgJiYgc2V2ZXJpdHkgPCBOVU1fU0VWRVJJVElFUyk7Ci0gIC8vIFByZXZl
bnQgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgYnkgd3JhcHBpbmcgYSBtdXRleCBsb2NrIGFy
b3VuZAotICAvLyBhbGwgdGhpcyBzdHVmZi4KLSAgTXV0ZXhMb2NrIGwoJmxvZ19tdXRleCk7Ci0g
IGxvZ19kZXN0aW5hdGlvbihzZXZlcml0eSktPmZpbGVvYmplY3RfLlNldEJhc2VuYW1lKGJhc2Vf
ZmlsZW5hbWUpOwotfQotCi1pbmxpbmUgdm9pZCBMb2dEZXN0aW5hdGlvbjo6U2V0TG9nU3ltbGlu
ayhMb2dTZXZlcml0eSBzZXZlcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHN5bWxpbmtfYmFzZW5hbWUpIHsKLSAgQ0hFQ0tfR0Uoc2V2
ZXJpdHksIDApOwotICBDSEVDS19MVChzZXZlcml0eSwgTlVNX1NFVkVSSVRJRVMpOwotICBNdXRl
eExvY2sgbCgmbG9nX211dGV4KTsKLSAgbG9nX2Rlc3RpbmF0aW9uKHNldmVyaXR5KS0+ZmlsZW9i
amVjdF8uU2V0U3ltbGlua0Jhc2VuYW1lKHN5bWxpbmtfYmFzZW5hbWUpOwotfQotCi1pbmxpbmUg
dm9pZCBMb2dEZXN0aW5hdGlvbjo6QWRkTG9nU2luayhMb2dTaW5rICpkZXN0aW5hdGlvbikgewot
ICAvLyBQcmV2ZW50IGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGJ5IHdyYXBwaW5nIGEgbXV0
ZXggbG9jayBhcm91bmQKLSAgLy8gYWxsIHRoaXMgc3R1ZmYuCi0gIE11dGV4TG9jayBsKCZzaW5r
X211dGV4Xyk7Ci0gIGlmICghc2lua3NfKSAgc2lua3NfID0gbmV3IHZlY3RvcjxMb2dTaW5rKj47
Ci0gIHNpbmtzXy0+cHVzaF9iYWNrKGRlc3RpbmF0aW9uKTsKLX0KLQotaW5saW5lIHZvaWQgTG9n
RGVzdGluYXRpb246OlJlbW92ZUxvZ1NpbmsoTG9nU2luayAqZGVzdGluYXRpb24pIHsKLSAgLy8g
UHJldmVudCBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBieSB3cmFwcGluZyBhIG11dGV4IGxv
Y2sgYXJvdW5kCi0gIC8vIGFsbCB0aGlzIHN0dWZmLgotICBNdXRleExvY2sgbCgmc2lua19tdXRl
eF8pOwotICAvLyBUaGlzIGRvZXNuJ3Qga2VlcCB0aGUgc2lua3MgaW4gb3JkZXIsIGJ1dCB3aG8g
Y2FyZXM/Ci0gIGlmIChzaW5rc18pIHsKLSAgICBmb3IgKGludCBpID0gc2lua3NfLT5zaXplKCkg
LSAxOyBpID49IDA7IGktLSkgewotICAgICAgaWYgKCgqc2lua3NfKVtpXSA9PSBkZXN0aW5hdGlv
bikgewotICAgICAgICAoKnNpbmtzXylbaV0gPSAoKnNpbmtzXylbc2lua3NfLT5zaXplKCkgLSAx
XTsKLSAgICAgICAgc2lua3NfLT5wb3BfYmFjaygpOwotICAgICAgICBicmVhazsKLSAgICAgIH0K
LSAgICB9Ci0gIH0KLX0KLQotaW5saW5lIHZvaWQgTG9nRGVzdGluYXRpb246OlNldExvZ0ZpbGVu
YW1lRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIGV4dCkgewotICAvLyBQcmV2ZW50IGFueSBzdWJ0bGUg
cmFjZSBjb25kaXRpb25zIGJ5IHdyYXBwaW5nIGEgbXV0ZXggbG9jayBhcm91bmQKLSAgLy8gYWxs
IHRoaXMgc3R1ZmYuCi0gIE11dGV4TG9jayBsKCZsb2dfbXV0ZXgpOwotICBmb3IgKCBpbnQgc2V2
ZXJpdHkgPSAwOyBzZXZlcml0eSA8IE5VTV9TRVZFUklUSUVTOyArK3NldmVyaXR5ICkgewotICAg
IGxvZ19kZXN0aW5hdGlvbihzZXZlcml0eSktPmZpbGVvYmplY3RfLlNldEV4dGVuc2lvbihleHQp
OwotICB9Ci19Ci0KLWlubGluZSB2b2lkIExvZ0Rlc3RpbmF0aW9uOjpTZXRTdGRlcnJMb2dnaW5n
KExvZ1NldmVyaXR5IG1pbl9zZXZlcml0eSkgewotICBhc3NlcnQobWluX3NldmVyaXR5ID49IDAg
JiYgbWluX3NldmVyaXR5IDwgTlVNX1NFVkVSSVRJRVMpOwotICAvLyBQcmV2ZW50IGFueSBzdWJ0
bGUgcmFjZSBjb25kaXRpb25zIGJ5IHdyYXBwaW5nIGEgbXV0ZXggbG9jayBhcm91bmQKLSAgLy8g
YWxsIHRoaXMgc3R1ZmYuCi0gIE11dGV4TG9jayBsKCZsb2dfbXV0ZXgpOwotICBGTEFHU19zdGRl
cnJ0aHJlc2hvbGQgPSBtaW5fc2V2ZXJpdHk7Ci19Ci0KLWlubGluZSB2b2lkIExvZ0Rlc3RpbmF0
aW9uOjpMb2dUb1N0ZGVycigpIHsKLSAgLy8gKkRvbid0KiBwdXQgdGhpcyBzdHVmZiBpbiBhIG11
dGV4IGxvY2ssIHNpbmNlIFNldFN0ZGVyckxvZ2dpbmcgJgotICAvLyBTZXRMb2dEZXN0aW5hdGlv
biBhbHJlYWR5IGRvIHRoZSBsb2NraW5nIQotICBTZXRTdGRlcnJMb2dnaW5nKDApOyAgICAgICAg
ICAgIC8vIHRodXMgZXZlcnl0aGluZyBpcyAiYWxzbyIgbG9nZ2VkIHRvIHN0ZGVycgotICBmb3Ig
KCBpbnQgaSA9IDA7IGkgPCBOVU1fU0VWRVJJVElFUzsgKytpICkgewotICAgIFNldExvZ0Rlc3Rp
bmF0aW9uKGksICIiKTsgICAgIC8vICIiIHR1cm5zIG9mZiBsb2dnaW5nIHRvIGEgbG9nZmlsZQot
ICB9Ci19Ci0KLXN0YXRpYyB2b2lkIENvbG9yZWRXcml0ZVRvU3RkZXJyKExvZ1NldmVyaXR5IHNl
dmVyaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbWVz
c2FnZSwgc2l6ZV90IGxlbikgewotICBjb25zdCBHTG9nQ29sb3IgY29sb3IgPQotICAgICAgKExv
Z0Rlc3RpbmF0aW9uOjp0ZXJtaW5hbF9zdXBwb3J0c19jb2xvcigpICYmIEZMQUdTX2NvbG9ybG9n
dG9zdGRlcnIpID8KLSAgICAgIFNldmVyaXR5VG9Db2xvcihzZXZlcml0eSkgOiBDT0xPUl9ERUZB
VUxUOwotCi0gIC8vIEF2b2lkIHVzaW5nIGNlcnIgZnJvbSB0aGlzIG1vZHVsZSBzaW5jZSB3ZSBt
YXkgZ2V0IGNhbGxlZCBkdXJpbmcKLSAgLy8gZXhpdCBjb2RlLCBhbmQgY2VyciBtYXkgYmUgcGFy
dGlhbGx5IG9yIGZ1bGx5IGRlc3Ryb3llZCBieSB0aGVuLgotICBpZiAoQ09MT1JfREVGQVVMVCA9
PSBjb2xvcikgewotICAgIGZ3cml0ZShtZXNzYWdlLCBsZW4sIDEsIHN0ZGVycik7Ci0gICAgcmV0
dXJuOwotICB9Ci0jaWZkZWYgT1NfV0lORE9XUwotICBjb25zdCBIQU5ETEUgc3RkZXJyX2hhbmRs
ZSA9IEdldFN0ZEhhbmRsZShTVERfRVJST1JfSEFORExFKTsKLQotICAvLyBHZXRzIHRoZSBjdXJy
ZW50IHRleHQgY29sb3IuCi0gIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIGJ1ZmZlcl9pbmZv
OwotICBHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyhzdGRlcnJfaGFuZGxlLCAmYnVmZmVyX2lu
Zm8pOwotICBjb25zdCBXT1JEIG9sZF9jb2xvcl9hdHRycyA9IGJ1ZmZlcl9pbmZvLndBdHRyaWJ1
dGVzOwotCi0gIC8vIFdlIG5lZWQgdG8gZmx1c2ggdGhlIHN0cmVhbSBidWZmZXJzIGludG8gdGhl
IGNvbnNvbGUgYmVmb3JlIGVhY2gKLSAgLy8gU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUgY2FsbCBs
ZXN0IGl0IGFmZmVjdCB0aGUgdGV4dCB0aGF0IGlzIGFscmVhZHkKLSAgLy8gcHJpbnRlZCBidXQg
aGFzIG5vdCB5ZXQgcmVhY2hlZCB0aGUgY29uc29sZS4KLSAgZmZsdXNoKHN0ZGVycik7Ci0gIFNl
dENvbnNvbGVUZXh0QXR0cmlidXRlKHN0ZGVycl9oYW5kbGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIEdldENvbG9yQXR0cmlidXRlKGNvbG9yKSB8IEZPUkVHUk9VTkRfSU5URU5TSVRZKTsK
LSAgZndyaXRlKG1lc3NhZ2UsIGxlbiwgMSwgc3RkZXJyKTsKLSAgZmZsdXNoKHN0ZGVycik7Ci0g
IC8vIFJlc3RvcmVzIHRoZSB0ZXh0IGNvbG9yLgotICBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZShz
dGRlcnJfaGFuZGxlLCBvbGRfY29sb3JfYXR0cnMpOwotI2Vsc2UKLSAgZnByaW50ZihzdGRlcnIs
ICJcMDMzWzA7MyVzbSIsIEdldEFuc2lDb2xvckNvZGUoY29sb3IpKTsKLSAgZndyaXRlKG1lc3Nh
Z2UsIGxlbiwgMSwgc3RkZXJyKTsKLSAgZnByaW50ZihzdGRlcnIsICJcMDMzW20iKTsgIC8vIFJl
c2V0cyB0aGUgdGVybWluYWwgdG8gZGVmYXVsdC4KLSNlbmRpZiAgLy8gT1NfV0lORE9XUwotfQot
Ci1zdGF0aWMgdm9pZCBXcml0ZVRvU3RkZXJyKGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHNpemVfdCBs
ZW4pIHsKLSAgLy8gQXZvaWQgdXNpbmcgY2VyciBmcm9tIHRoaXMgbW9kdWxlIHNpbmNlIHdlIG1h
eSBnZXQgY2FsbGVkIGR1cmluZwotICAvLyBleGl0IGNvZGUsIGFuZCBjZXJyIG1heSBiZSBwYXJ0
aWFsbHkgb3IgZnVsbHkgZGVzdHJveWVkIGJ5IHRoZW4uCi0gIGZ3cml0ZShtZXNzYWdlLCBsZW4s
IDEsIHN0ZGVycik7Ci19Ci0KLWlubGluZSB2b2lkIExvZ0Rlc3RpbmF0aW9uOjpNYXliZUxvZ1Rv
U3RkZXJyKExvZ1NldmVyaXR5IHNldmVyaXR5LAotCQkJCQkgICAgIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UsIHNpemVfdCBsZW4pIHsKLSAgaWYgKChzZXZlcml0eSA+PSBGTEFHU19zdGRlcnJ0aHJlc2hv
bGQpIHx8IEZMQUdTX2Fsc29sb2d0b3N0ZGVycikgewotICAgIENvbG9yZWRXcml0ZVRvU3RkZXJy
KHNldmVyaXR5LCBtZXNzYWdlLCBsZW4pOwotI2lmZGVmIE9TX1dJTkRPV1MKLSAgICAvLyBPbiBX
aW5kb3dzLCBhbHNvIG91dHB1dCB0byB0aGUgZGVidWdnZXIKLSAgICA6Ok91dHB1dERlYnVnU3Ry
aW5nQShzdHJpbmcobWVzc2FnZSxsZW4pLmNfc3RyKCkpOwotI2VuZGlmCi0gIH0KLX0KLQotCi1p
bmxpbmUgdm9pZCBMb2dEZXN0aW5hdGlvbjo6TWF5YmVMb2dUb0xvZ2ZpbGUoTG9nU2V2ZXJpdHkg
c2V2ZXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGltZV90IHRpbWVzdGFtcCwKLQkJCQkJICAgICAgY29uc3QgY2hhciogbWVzc2FnZSwKLQkJCQkJ
ICAgICAgc2l6ZV90IGxlbikgewotICBjb25zdCBib29sIHNob3VsZF9mbHVzaCA9IHNldmVyaXR5
ID4gRkxBR1NfbG9nYnVmbGV2ZWw7Ci0gIExvZ0Rlc3RpbmF0aW9uKiBkZXN0aW5hdGlvbiA9IGxv
Z19kZXN0aW5hdGlvbihzZXZlcml0eSk7Ci0gIGRlc3RpbmF0aW9uLT5sb2dnZXJfLT5Xcml0ZShz
aG91bGRfZmx1c2gsIHRpbWVzdGFtcCwgbWVzc2FnZSwgbGVuKTsKLX0KLQotaW5saW5lIHZvaWQg
TG9nRGVzdGluYXRpb246OkxvZ1RvQWxsTG9nZmlsZXMoTG9nU2V2ZXJpdHkgc2V2ZXJpdHksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX3QgdGltZXN0
YW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBsZW4pIHsKLQotICBpZiAoIEZMQUdTX2xvZ3Rvc3RkZXJyICkgeyAgICAgICAg
ICAgLy8gZ2xvYmFsIGZsYWc6IG5ldmVyIGxvZyB0byBmaWxlCi0gICAgQ29sb3JlZFdyaXRlVG9T
dGRlcnIoc2V2ZXJpdHksIG1lc3NhZ2UsIGxlbik7Ci0gIH0gZWxzZSB7Ci0gICAgZm9yIChpbnQg
aSA9IHNldmVyaXR5OyBpID49IDA7IC0taSkKLSAgICAgIExvZ0Rlc3RpbmF0aW9uOjpNYXliZUxv
Z1RvTG9nZmlsZShpLCB0aW1lc3RhbXAsIG1lc3NhZ2UsIGxlbik7Ci0gIH0KLX0KLQotaW5saW5l
IHZvaWQgTG9nRGVzdGluYXRpb246OkxvZ1RvU2lua3MoTG9nU2V2ZXJpdHkgc2V2ZXJpdHksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdWxsX2Zp
bGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqYmFzZV9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RydWN0IDo6dG0qIHRtX3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IG1lc3NhZ2VfbGVuKSB7Ci0gIFJlYWRlck11dGV4TG9jayBsKCZzaW5r
X211dGV4Xyk7Ci0gIGlmIChzaW5rc18pIHsKLSAgICBmb3IgKGludCBpID0gc2lua3NfLT5zaXpl
KCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgKCpzaW5rc18pW2ldLT5zZW5kKHNldmVyaXR5
LCBmdWxsX2ZpbGVuYW1lLCBiYXNlX2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmUsIHRtX3RpbWUsIG1lc3NhZ2UsIG1lc3NhZ2VfbGVuKTsKLSAgICB9Ci0gIH0KLX0KLQot
aW5saW5lIHZvaWQgTG9nRGVzdGluYXRpb246OldhaXRGb3JTaW5rcyhMb2dNZXNzYWdlOjpMb2dN
ZXNzYWdlRGF0YSogZGF0YSkgewotICBSZWFkZXJNdXRleExvY2sgbCgmc2lua19tdXRleF8pOwot
ICBpZiAoc2lua3NfKSB7Ci0gICAgZm9yIChpbnQgaSA9IHNpbmtzXy0+c2l6ZSgpIC0gMTsgaSA+
PSAwOyBpLS0pIHsKLSAgICAgICgqc2lua3NfKVtpXS0+V2FpdFRpbGxTZW50KCk7Ci0gICAgfQot
ICB9Ci0gIGNvbnN0IGJvb2wgc2VuZF90b19zaW5rID0KLSAgICAgIChkYXRhLT5zZW5kX21ldGhv
ZF8gPT0gJkxvZ01lc3NhZ2U6OlNlbmRUb1NpbmspIHx8Ci0gICAgICAoZGF0YS0+c2VuZF9tZXRo
b2RfID09ICZMb2dNZXNzYWdlOjpTZW5kVG9TaW5rQW5kTG9nKTsKLSAgaWYgKHNlbmRfdG9fc2lu
ayAmJiBkYXRhLT5zaW5rXyAhPSBOVUxMKSB7Ci0gICAgZGF0YS0+c2lua18tPldhaXRUaWxsU2Vu
dCgpOwotICB9Ci19Ci0KLUxvZ0Rlc3RpbmF0aW9uKiBMb2dEZXN0aW5hdGlvbjo6bG9nX2Rlc3Rp
bmF0aW9uc19bTlVNX1NFVkVSSVRJRVNdOwotCi1pbmxpbmUgTG9nRGVzdGluYXRpb24qIExvZ0Rl
c3RpbmF0aW9uOjpsb2dfZGVzdGluYXRpb24oTG9nU2V2ZXJpdHkgc2V2ZXJpdHkpIHsKLSAgYXNz
ZXJ0KHNldmVyaXR5ID49MCAmJiBzZXZlcml0eSA8IE5VTV9TRVZFUklUSUVTKTsKLSAgaWYgKCFs
b2dfZGVzdGluYXRpb25zX1tzZXZlcml0eV0pIHsKLSAgICBsb2dfZGVzdGluYXRpb25zX1tzZXZl
cml0eV0gPSBuZXcgTG9nRGVzdGluYXRpb24oc2V2ZXJpdHksIE5VTEwpOwotICB9Ci0gIHJldHVy
biBsb2dfZGVzdGluYXRpb25zX1tzZXZlcml0eV07Ci19Ci0KLXZvaWQgTG9nRGVzdGluYXRpb246
OkRlbGV0ZUxvZ0Rlc3RpbmF0aW9ucygpIHsKLSAgZm9yIChpbnQgc2V2ZXJpdHkgPSAwOyBzZXZl
cml0eSA8IE5VTV9TRVZFUklUSUVTOyArK3NldmVyaXR5KSB7Ci0gICAgZGVsZXRlIGxvZ19kZXN0
aW5hdGlvbnNfW3NldmVyaXR5XTsKLSAgICBsb2dfZGVzdGluYXRpb25zX1tzZXZlcml0eV0gPSBO
VUxMOwotICB9Ci0gIE11dGV4TG9jayBsKCZzaW5rX211dGV4Xyk7Ci0gIGRlbGV0ZSBzaW5rc187
Ci0gIHNpbmtzXyA9IE5VTEw7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLUxvZ0ZpbGVPYmplY3Q6Okxv
Z0ZpbGVPYmplY3QoTG9nU2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGJhc2VfZmlsZW5hbWUpCi0gIDogYmFzZV9maWxlbmFtZV9zZWxl
Y3RlZF8oYmFzZV9maWxlbmFtZSAhPSBOVUxMKSwKLSAgICBiYXNlX2ZpbGVuYW1lXygoYmFzZV9m
aWxlbmFtZSAhPSBOVUxMKSA/IGJhc2VfZmlsZW5hbWUgOiAiIiksCi0gICAgc3ltbGlua19iYXNl
bmFtZV8oZ2xvZ19pbnRlcm5hbF9uYW1lc3BhY2VfOjpQcm9ncmFtSW52b2NhdGlvblNob3J0TmFt
ZSgpKSwKLSAgICBmaWxlbmFtZV9leHRlbnNpb25fKCksCi0gICAgZmlsZV8oTlVMTCksCi0gICAg
c2V2ZXJpdHlfKHNldmVyaXR5KSwKLSAgICBieXRlc19zaW5jZV9mbHVzaF8oMCksCi0gICAgZHJv
cHBlZF9tZW1fbGVuZ3RoXygwKSwKLSAgICBmaWxlX2xlbmd0aF8oMCksCi0gICAgcm9sbG92ZXJf
YXR0ZW1wdF8oa1JvbGxvdmVyQXR0ZW1wdEZyZXF1ZW5jeS0xKSwKLSAgICBuZXh0X2ZsdXNoX3Rp
bWVfKDApIHsKLSAgYXNzZXJ0KHNldmVyaXR5ID49IDApOwotICBhc3NlcnQoc2V2ZXJpdHkgPCBO
VU1fU0VWRVJJVElFUyk7Ci19Ci0KLUxvZ0ZpbGVPYmplY3Q6On5Mb2dGaWxlT2JqZWN0KCkgewot
ICBNdXRleExvY2sgbCgmbG9ja18pOwotICBpZiAoZmlsZV8gIT0gTlVMTCkgewotICAgIGZjbG9z
ZShmaWxlXyk7Ci0gICAgZmlsZV8gPSBOVUxMOwotICB9Ci19Ci0KLXZvaWQgTG9nRmlsZU9iamVj
dDo6U2V0QmFzZW5hbWUoY29uc3QgY2hhciogYmFzZW5hbWUpIHsKLSAgTXV0ZXhMb2NrIGwoJmxv
Y2tfKTsKLSAgYmFzZV9maWxlbmFtZV9zZWxlY3RlZF8gPSB0cnVlOwotICBpZiAoYmFzZV9maWxl
bmFtZV8gIT0gYmFzZW5hbWUpIHsKLSAgICAvLyBHZXQgcmlkIG9mIG9sZCBsb2cgZmlsZSBzaW5j
ZSB3ZSBhcmUgY2hhbmdpbmcgbmFtZXMKLSAgICBpZiAoZmlsZV8gIT0gTlVMTCkgewotICAgICAg
ZmNsb3NlKGZpbGVfKTsKLSAgICAgIGZpbGVfID0gTlVMTDsKLSAgICAgIHJvbGxvdmVyX2F0dGVt
cHRfID0ga1JvbGxvdmVyQXR0ZW1wdEZyZXF1ZW5jeS0xOwotICAgIH0KLSAgICBiYXNlX2ZpbGVu
YW1lXyA9IGJhc2VuYW1lOwotICB9Ci19Ci0KLXZvaWQgTG9nRmlsZU9iamVjdDo6U2V0RXh0ZW5z
aW9uKGNvbnN0IGNoYXIqIGV4dCkgewotICBNdXRleExvY2sgbCgmbG9ja18pOwotICBpZiAoZmls
ZW5hbWVfZXh0ZW5zaW9uXyAhPSBleHQpIHsKLSAgICAvLyBHZXQgcmlkIG9mIG9sZCBsb2cgZmls
ZSBzaW5jZSB3ZSBhcmUgY2hhbmdpbmcgbmFtZXMKLSAgICBpZiAoZmlsZV8gIT0gTlVMTCkgewot
ICAgICAgZmNsb3NlKGZpbGVfKTsKLSAgICAgIGZpbGVfID0gTlVMTDsKLSAgICAgIHJvbGxvdmVy
X2F0dGVtcHRfID0ga1JvbGxvdmVyQXR0ZW1wdEZyZXF1ZW5jeS0xOwotICAgIH0KLSAgICBmaWxl
bmFtZV9leHRlbnNpb25fID0gZXh0OwotICB9Ci19Ci0KLXZvaWQgTG9nRmlsZU9iamVjdDo6U2V0
U3ltbGlua0Jhc2VuYW1lKGNvbnN0IGNoYXIqIHN5bWxpbmtfYmFzZW5hbWUpIHsKLSAgTXV0ZXhM
b2NrIGwoJmxvY2tfKTsKLSAgc3ltbGlua19iYXNlbmFtZV8gPSBzeW1saW5rX2Jhc2VuYW1lOwot
fQotCi12b2lkIExvZ0ZpbGVPYmplY3Q6OkZsdXNoKCkgewotICBNdXRleExvY2sgbCgmbG9ja18p
OwotICBGbHVzaFVubG9ja2VkKCk7Ci19Ci0KLXZvaWQgTG9nRmlsZU9iamVjdDo6Rmx1c2hVbmxv
Y2tlZCgpewotICBpZiAoZmlsZV8gIT0gTlVMTCkgewotICAgIGZmbHVzaChmaWxlXyk7Ci0gICAg
Ynl0ZXNfc2luY2VfZmx1c2hfID0gMDsKLSAgfQotICAvLyBGaWd1cmUgb3V0IHdoZW4gd2UgYXJl
IGR1ZSBmb3IgYW5vdGhlciBmbHVzaC4KLSAgY29uc3QgaW50NjQgbmV4dCA9IChGTEFHU19sb2di
dWZzZWNzCi0gICAgICAgICAgICAgICAgICAgICAgKiBzdGF0aWNfY2FzdDxpbnQ2ND4oMTAwMDAw
MCkpOyAgLy8gaW4gdXNlYwotICBuZXh0X2ZsdXNoX3RpbWVfID0gQ3ljbGVDbG9ja19Ob3coKSAr
IFVzZWNUb0N5Y2xlcyhuZXh0KTsKLX0KLQotYm9vbCBMb2dGaWxlT2JqZWN0OjpDcmVhdGVMb2dm
aWxlKGNvbnN0IHN0cmluZyYgdGltZV9waWRfc3RyaW5nKSB7Ci0gIHN0cmluZyBzdHJpbmdfZmls
ZW5hbWUgPSBiYXNlX2ZpbGVuYW1lXytmaWxlbmFtZV9leHRlbnNpb25fKwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZV9waWRfc3RyaW5nOwotICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9
IHN0cmluZ19maWxlbmFtZS5jX3N0cigpOwotICBpbnQgZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1dS
T05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIEZMQUdTX2xvZ2ZpbGVfbW9kZSk7Ci0gIGlmIChmZCA9
PSAtMSkgcmV0dXJuIGZhbHNlOwotI2lmZGVmIEhBVkVfRkNOVEwKLSAgLy8gTWFyayB0aGUgZmls
ZSBjbG9zZS1vbi1leGVjLiBXZSBkb24ndCByZWFsbHkgY2FyZSBpZiB0aGlzIGZhaWxzCi0gIGZj
bnRsKGZkLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKLSNlbmRpZgotCi0gIGZpbGVfID0gZmRvcGVu
KGZkLCAiYSIpOyAgLy8gTWFrZSBhIEZJTEUqLgotICBpZiAoZmlsZV8gPT0gTlVMTCkgeyAgLy8g
TWFuLCB3ZSdyZSBzY3Jld2VkIQotICAgIGNsb3NlKGZkKTsKLSAgICB1bmxpbmsoZmlsZW5hbWUp
OyAgLy8gRXJhc2UgdGhlIGhhbGYtYmFrZWQgZXZpZGVuY2U6IGFuIHVudXNhYmxlIGxvZyBmaWxl
Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gV2UgdHJ5IHRvIGNyZWF0ZSBhIHN5bWxp
bmsgY2FsbGVkIDxwcm9ncmFtX25hbWU+LjxzZXZlcml0eT4sCi0gIC8vIHdoaWNoIGlzIGVhc2ll
ciB0byB1c2UuICAoRXZlcnkgdGltZSB3ZSBjcmVhdGUgYSBuZXcgbG9nZmlsZSwKLSAgLy8gd2Ug
ZGVzdHJveSB0aGUgb2xkIHN5bWxpbmsgYW5kIGNyZWF0ZSBhIG5ldyBvbmUsIHNvIGl0IGFsd2F5
cwotICAvLyBwb2ludHMgdG8gdGhlIGxhdGVzdCBsb2dmaWxlLikgIElmIGl0IGZhaWxzLCB3ZSdy
ZSBzYWQgYnV0IGl0J3MKLSAgLy8gbm8gZXJyb3IuCi0gIGlmICghc3ltbGlua19iYXNlbmFtZV8u
ZW1wdHkoKSkgewotICAgIC8vIHRha2UgZGlyZWN0b3J5IGZyb20gZmlsZW5hbWUKLSAgICBjb25z
dCBjaGFyKiBzbGFzaCA9IHN0cnJjaHIoZmlsZW5hbWUsIFBBVEhfU0VQQVJBVE9SKTsKLSAgICBj
b25zdCBzdHJpbmcgbGlua25hbWUgPQotICAgICAgc3ltbGlua19iYXNlbmFtZV8gKyAnLicgKyBM
b2dTZXZlcml0eU5hbWVzW3NldmVyaXR5X107Ci0gICAgc3RyaW5nIGxpbmtwYXRoOwotICAgIGlm
ICggc2xhc2ggKSBsaW5rcGF0aCA9IHN0cmluZyhmaWxlbmFtZSwgc2xhc2gtZmlsZW5hbWUrMSk7
ICAvLyBnZXQgZGlybmFtZQotICAgIGxpbmtwYXRoICs9IGxpbmtuYW1lOwotICAgIHVubGluayhs
aW5rcGF0aC5jX3N0cigpKTsgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSBvbGQgb25lIGlm
IGl0IGV4aXN0cwotCi0jaWYgZGVmaW5lZChPU19XSU5ET1dTKQotICAgIC8vIFRPRE8oaGFtYWpp
KTogQ3JlYXRlIGxuayBmaWxlIG9uIFdpbmRvd3M/Ci0jZWxpZiBkZWZpbmVkKEhBVkVfVU5JU1RE
X0gpCi0gICAgLy8gV2UgbXVzdCBoYXZlIHVuaXN0ZC5oLgotICAgIC8vIE1ha2UgdGhlIHN5bWxp
bmsgYmUgcmVsYXRpdmUgKGluIHRoZSBzYW1lIGRpcikgc28gdGhhdCBpZiB0aGUKLSAgICAvLyBl
bnRpcmUgbG9nIGRpcmVjdG9yeSBnZXRzIHJlbG9jYXRlZCB0aGUgbGluayBpcyBzdGlsbCB2YWxp
ZC4KLSAgICBjb25zdCBjaGFyICpsaW5rZGVzdCA9IHNsYXNoID8gKHNsYXNoICsgMSkgOiBmaWxl
bmFtZTsKLSAgICBpZiAoc3ltbGluayhsaW5rZGVzdCwgbGlua3BhdGguY19zdHIoKSkgIT0gMCkg
ewotICAgICAgLy8gc2lsZW50bHkgaWdub3JlIGZhaWx1cmVzCi0gICAgfQotCi0gICAgLy8gTWFr
ZSBhbiBhZGRpdGlvbmFsIGxpbmsgdG8gdGhlIGxvZyBmaWxlIGluIGEgcGxhY2Ugc3BlY2lmaWVk
IGJ5Ci0gICAgLy8gRkxBR1NfbG9nX2xpbmssIGlmIGluZGljYXRlZAotICAgIGlmICghRkxBR1Nf
bG9nX2xpbmsuZW1wdHkoKSkgewotICAgICAgbGlua3BhdGggPSBGTEFHU19sb2dfbGluayArICIv
IiArIGxpbmtuYW1lOwotICAgICAgdW5saW5rKGxpbmtwYXRoLmNfc3RyKCkpOyAgICAgICAgICAg
ICAgICAgIC8vIGRlbGV0ZSBvbGQgb25lIGlmIGl0IGV4aXN0cwotICAgICAgaWYgKHN5bWxpbmso
ZmlsZW5hbWUsIGxpbmtwYXRoLmNfc3RyKCkpICE9IDApIHsKLSAgICAgICAgLy8gc2lsZW50bHkg
aWdub3JlIGZhaWx1cmVzCi0gICAgICB9Ci0gICAgfQotI2VuZGlmCi0gIH0KLQotICByZXR1cm4g
dHJ1ZTsgIC8vIEV2ZXJ5dGhpbmcgd29ya2VkCi19Ci0KLXZvaWQgTG9nRmlsZU9iamVjdDo6V3Jp
dGUoYm9vbCBmb3JjZV9mbHVzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV90IHRp
bWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VfbGVuKSB7Ci0gIE11dGV4TG9j
ayBsKCZsb2NrXyk7Ci0KLSAgLy8gV2UgZG9uJ3QgbG9nIGlmIHRoZSBiYXNlX25hbWVfIGlzICIi
ICh3aGljaCBtZWFucyAiZG9uJ3Qgd3JpdGUiKQotICBpZiAoYmFzZV9maWxlbmFtZV9zZWxlY3Rl
ZF8gJiYgYmFzZV9maWxlbmFtZV8uZW1wdHkoKSkgewotICAgIHJldHVybjsKLSAgfQotCi0gIGlm
IChzdGF0aWNfY2FzdDxpbnQ+KGZpbGVfbGVuZ3RoXyA+PiAyMCkgPj0gTWF4TG9nU2l6ZSgpIHx8
Ci0gICAgICBQaWRIYXNDaGFuZ2VkKCkpIHsKLSAgICBpZiAoZmlsZV8gIT0gTlVMTCkgZmNsb3Nl
KGZpbGVfKTsKLSAgICBmaWxlXyA9IE5VTEw7Ci0gICAgZmlsZV9sZW5ndGhfID0gYnl0ZXNfc2lu
Y2VfZmx1c2hfID0gZHJvcHBlZF9tZW1fbGVuZ3RoXyA9IDA7Ci0gICAgcm9sbG92ZXJfYXR0ZW1w
dF8gPSBrUm9sbG92ZXJBdHRlbXB0RnJlcXVlbmN5LTE7Ci0gIH0KLQotICAvLyBJZiB0aGVyZSdz
IG5vIGRlc3RpbmF0aW9uIGZpbGUsIG1ha2Ugb25lIGJlZm9yZSBvdXRwdXR0aW5nCi0gIGlmIChm
aWxlXyA9PSBOVUxMKSB7Ci0gICAgLy8gVHJ5IHRvIHJvbGxvdmVyIHRoZSBsb2cgZmlsZSBldmVy
eSAzMiBsb2cgbWVzc2FnZXMuICBUaGUgb25seSB0aW1lCi0gICAgLy8gdGhpcyBjb3VsZCBtYXR0
ZXIgd291bGQgYmUgd2hlbiB3ZSBoYXZlIHRyb3VibGUgY3JlYXRpbmcgdGhlIGxvZwotICAgIC8v
IGZpbGUuICBJZiB0aGF0IGhhcHBlbnMsIHdlJ2xsIGxvc2UgbG90cyBvZiBsb2cgbWVzc2FnZXMs
IG9mIGNvdXJzZSEKLSAgICBpZiAoKytyb2xsb3Zlcl9hdHRlbXB0XyAhPSBrUm9sbG92ZXJBdHRl
bXB0RnJlcXVlbmN5KSByZXR1cm47Ci0gICAgcm9sbG92ZXJfYXR0ZW1wdF8gPSAwOwotCi0gICAg
c3RydWN0IDo6dG0gdG1fdGltZTsKLSAgICBsb2NhbHRpbWVfcigmdGltZXN0YW1wLCAmdG1fdGlt
ZSk7Ci0KLSAgICAvLyBUaGUgbG9nZmlsZSdzIGZpbGVuYW1lIHdpbGwgaGF2ZSB0aGUgZGF0ZS90
aW1lICYgcGlkIGluIGl0Ci0gICAgb3N0cmluZ3N0cmVhbSB0aW1lX3BpZF9zdHJlYW07Ci0gICAg
dGltZV9waWRfc3RyZWFtLmZpbGwoJzAnKTsKLSAgICB0aW1lX3BpZF9zdHJlYW0gPDwgMTkwMCt0
bV90aW1lLnRtX3llYXIKLSAgICAgICAgICAgICAgICAgICAgPDwgc2V0dygyKSA8PCAxK3RtX3Rp
bWUudG1fbW9uCi0gICAgICAgICAgICAgICAgICAgIDw8IHNldHcoMikgPDwgdG1fdGltZS50bV9t
ZGF5Ci0gICAgICAgICAgICAgICAgICAgIDw8ICctJwotICAgICAgICAgICAgICAgICAgICA8PCBz
ZXR3KDIpIDw8IHRtX3RpbWUudG1faG91cgotICAgICAgICAgICAgICAgICAgICA8PCBzZXR3KDIp
IDw8IHRtX3RpbWUudG1fbWluCi0gICAgICAgICAgICAgICAgICAgIDw8IHNldHcoMikgPDwgdG1f
dGltZS50bV9zZWMKLSAgICAgICAgICAgICAgICAgICAgPDwgJy4nCi0gICAgICAgICAgICAgICAg
ICAgIDw8IEdldE1haW5UaHJlYWRQaWQoKTsKLSAgICBjb25zdCBzdHJpbmcmIHRpbWVfcGlkX3N0
cmluZyA9IHRpbWVfcGlkX3N0cmVhbS5zdHIoKTsKLQotICAgIGlmIChiYXNlX2ZpbGVuYW1lX3Nl
bGVjdGVkXykgewotICAgICAgaWYgKCFDcmVhdGVMb2dmaWxlKHRpbWVfcGlkX3N0cmluZykpIHsK
LSAgICAgICAgcGVycm9yKCJDb3VsZCBub3QgY3JlYXRlIGxvZyBmaWxlIik7Ci0gICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ09VTEQgTk9UIENSRUFURSBMT0dGSUxFICclcychXG4iLAotICAgICAg
ICAgICAgICAgIHRpbWVfcGlkX3N0cmluZy5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBJZiBubyBiYXNlIGZpbGVuYW1lIGZvciBsb2dz
IG9mIHRoaXMgc2V2ZXJpdHkgaGFzIGJlZW4gc2V0LCB1c2UgYQotICAgICAgLy8gZGVmYXVsdCBi
YXNlIGZpbGVuYW1lIG9mCi0gICAgICAvLyAiPHByb2dyYW0gbmFtZT4uPGhvc3RuYW1lPi48dXNl
ciBuYW1lPi5sb2cuPHNldmVyaXR5IGxldmVsPi4iLiAgU28KLSAgICAgIC8vIGxvZ2ZpbGVzIHdp
bGwgaGF2ZSBuYW1lcyBsaWtlCi0gICAgICAvLyB3ZWJzZXJ2ZXIuZXhhbXBsZWhvc3Qucm9vdC5s
b2cuSU5GTy4xOTk5MDgxNy0xNTAwMDAuNDM1NCwgd2hlcmUKLSAgICAgIC8vIDE5OTkwODE3IGlz
IGEgZGF0ZSAoMTk5OSBBdWd1c3QgMTcpLCAxNTAwMDAgaXMgYSB0aW1lICgxNTowMDowMCksCi0g
ICAgICAvLyBhbmQgNDM1NCBpcyB0aGUgcGlkIG9mIHRoZSBsb2dnaW5nIHByb2Nlc3MuICBUaGUg
ZGF0ZSAmIHRpbWUgcmVmbGVjdAotICAgICAgLy8gd2hlbiB0aGUgZmlsZSB3YXMgY3JlYXRlZCBm
b3Igb3V0cHV0LgotICAgICAgLy8KLSAgICAgIC8vIFdoZXJlIGRvZXMgdGhlIGZpbGUgZ2V0IHB1
dD8gIFN1Y2Nlc3NpdmVseSB0cnkgdGhlIGRpcmVjdG9yaWVzCi0gICAgICAvLyAiL3RtcCIsIGFu
ZCAiLiIKLSAgICAgIHN0cmluZyBzdHJpcHBlZF9maWxlbmFtZSgKLSAgICAgICAgICBnbG9nX2lu
dGVybmFsX25hbWVzcGFjZV86OlByb2dyYW1JbnZvY2F0aW9uU2hvcnROYW1lKCkpOwotICAgICAg
c3RyaW5nIGhvc3RuYW1lOwotICAgICAgR2V0SG9zdE5hbWUoJmhvc3RuYW1lKTsKLQotICAgICAg
c3RyaW5nIHVpZG5hbWUgPSAiaW52YWxpZC11c2VyIjsKLQotICAgICAgc3RyaXBwZWRfZmlsZW5h
bWUgPSBzdHJpcHBlZF9maWxlbmFtZSsnLicraG9zdG5hbWUrJy4nCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICt1aWRuYW1lKyIubG9nLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgK0xv
Z1NldmVyaXR5TmFtZXNbc2V2ZXJpdHlfXSsnLic7Ci0gICAgICAvLyBXZSdyZSBnb2luZyB0byAo
cG90ZW50aWFsbHkpIHRyeSB0byBwdXQgbG9ncyBpbiBzZXZlcmFsIGRpZmZlcmVudCBkaXJzCi0g
ICAgICBjb25zdCB2ZWN0b3I8c3RyaW5nPiAmIGxvZ19kaXJzID0gR2V0TG9nZ2luZ0RpcmVjdG9y
aWVzKCk7Ci0KLSAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgZGlycywgYW5kIHRyeSB0
byBjcmVhdGUgdGhlIGxvZyBmaWxlIGluIGVhY2gKLSAgICAgIC8vIHVudGlsIHdlIHN1Y2NlZWQg
b3IgcnVuIG91dCBvZiBvcHRpb25zCi0gICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAg
IGZvciAodmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGRpciA9IGxvZ19kaXJzLmJlZ2lu
KCk7Ci0gICAgICAgICAgIGRpciAhPSBsb2dfZGlycy5lbmQoKTsKLSAgICAgICAgICAgKytkaXIp
IHsKLSAgICAgICAgYmFzZV9maWxlbmFtZV8gPSAqZGlyICsgIi8iICsgc3RyaXBwZWRfZmlsZW5h
bWU7Ci0gICAgICAgIGlmICggQ3JlYXRlTG9nZmlsZSh0aW1lX3BpZF9zdHJpbmcpICkgewotICAg
ICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgICAvLyBJZiB3ZSBuZXZlciBzdWNjZWVkZWQsIHdlIGhhdmUgdG8gZ2l2ZSB1cAot
ICAgICAgaWYgKCBzdWNjZXNzID09IGZhbHNlICkgewotICAgICAgICBwZXJyb3IoIkNvdWxkIG5v
dCBjcmVhdGUgbG9nZ2luZyBmaWxlIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ09VTEQg
Tk9UIENSRUFURSBBIExPR0dJTkdGSUxFICVzISIsCi0gICAgICAgICAgICAgICAgdGltZV9waWRf
c3RyaW5nLmNfc3RyKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gV3JpdGUgYSBoZWFkZXIgbWVzc2FnZSBpbnRvIHRoZSBsb2cgZmlsZQotICAgIG9zdHJpbmdz
dHJlYW0gZmlsZV9oZWFkZXJfc3RyZWFtOwotICAgIGZpbGVfaGVhZGVyX3N0cmVhbS5maWxsKCcw
Jyk7Ci0gICAgZmlsZV9oZWFkZXJfc3RyZWFtIDw8ICJMb2cgZmlsZSBjcmVhdGVkIGF0OiAiCi0g
ICAgICAgICAgICAgICAgICAgICAgIDw8IDE5MDArdG1fdGltZS50bV95ZWFyIDw8ICcvJwotICAg
ICAgICAgICAgICAgICAgICAgICA8PCBzZXR3KDIpIDw8IDErdG1fdGltZS50bV9tb24gPDwgJy8n
Ci0gICAgICAgICAgICAgICAgICAgICAgIDw8IHNldHcoMikgPDwgdG1fdGltZS50bV9tZGF5Ci0g
ICAgICAgICAgICAgICAgICAgICAgIDw8ICcgJwotICAgICAgICAgICAgICAgICAgICAgICA8PCBz
ZXR3KDIpIDw8IHRtX3RpbWUudG1faG91ciA8PCAnOicKLSAgICAgICAgICAgICAgICAgICAgICAg
PDwgc2V0dygyKSA8PCB0bV90aW1lLnRtX21pbiA8PCAnOicKLSAgICAgICAgICAgICAgICAgICAg
ICAgPDwgc2V0dygyKSA8PCB0bV90aW1lLnRtX3NlYyA8PCAnXG4nCi0gICAgICAgICAgICAgICAg
ICAgICAgIDw8ICJSdW5uaW5nIG9uIG1hY2hpbmU6ICIKLSAgICAgICAgICAgICAgICAgICAgICAg
PDwgTG9nRGVzdGluYXRpb246Omhvc3RuYW1lKCkgPDwgJ1xuJwotICAgICAgICAgICAgICAgICAg
ICAgICA8PCAiTG9nIGxpbmUgZm9ybWF0OiBbSVdFRl1tbWRkIGhoOm1tOnNzLnV1dXV1dSAiCi0g
ICAgICAgICAgICAgICAgICAgICAgIDw8ICJ0aHJlYWRpZCBmaWxlOmxpbmVdIG1zZyIgPDwgJ1xu
JzsKLSAgICBjb25zdCBzdHJpbmcmIGZpbGVfaGVhZGVyX3N0cmluZyA9IGZpbGVfaGVhZGVyX3N0
cmVhbS5zdHIoKTsKLQotICAgIGNvbnN0IGludCBoZWFkZXJfbGVuID0gZmlsZV9oZWFkZXJfc3Ry
aW5nLnNpemUoKTsKLSAgICBmd3JpdGUoZmlsZV9oZWFkZXJfc3RyaW5nLmRhdGEoKSwgMSwgaGVh
ZGVyX2xlbiwgZmlsZV8pOwotICAgIGZpbGVfbGVuZ3RoXyArPSBoZWFkZXJfbGVuOwotICAgIGJ5
dGVzX3NpbmNlX2ZsdXNoXyArPSBoZWFkZXJfbGVuOwotICB9Ci0KLSAgLy8gV3JpdGUgdG8gTE9H
IGZpbGUKLSAgaWYgKCAhc3RvcF93cml0aW5nICkgewotICAgIC8vIGZ3cml0ZSgpIGRvZXNuJ3Qg
cmV0dXJuIGFuIGVycm9yIHdoZW4gdGhlIGRpc2sgaXMgZnVsbCwgZm9yCi0gICAgLy8gbWVzc2Fn
ZXMgdGhhdCBhcmUgbGVzcyB0aGFuIDQwOTYgYnl0ZXMuIFdoZW4gdGhlIGRpc2sgaXMgZnVsbCwK
LSAgICAvLyBpdCByZXR1cm5zIHRoZSBtZXNzYWdlIGxlbmd0aCBmb3IgbWVzc2FnZXMgdGhhdCBh
cmUgbGVzcyB0aGFuCi0gICAgLy8gNDA5NiBieXRlcy4gZndyaXRlKCkgcmV0dXJucyA0MDk2IGZv
ciBtZXNzYWdlIGxlbmd0aHMgdGhhdCBhcmUKLSAgICAvLyBncmVhdGVyIHRoYW4gNDA5NiwgdGhl
cmVieSBpbmRpY2F0aW5nIGFuIGVycm9yLgotICAgIGVycm5vID0gMDsKLSAgICBmd3JpdGUobWVz
c2FnZSwgMSwgbWVzc2FnZV9sZW4sIGZpbGVfKTsKLSAgICBpZiAoIEZMQUdTX3N0b3BfbG9nZ2lu
Z19pZl9mdWxsX2Rpc2sgJiYKLSAgICAgICAgIGVycm5vID09IEVOT1NQQyApIHsgIC8vIGRpc2sg
ZnVsbCwgc3RvcCB3cml0aW5nIHRvIGRpc2sKLSAgICAgIHN0b3Bfd3JpdGluZyA9IHRydWU7ICAv
LyB1bnRpbCB0aGUgZGlzayBpcwotICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICBm
aWxlX2xlbmd0aF8gKz0gbWVzc2FnZV9sZW47Ci0gICAgICBieXRlc19zaW5jZV9mbHVzaF8gKz0g
bWVzc2FnZV9sZW47Ci0gICAgfQotICB9IGVsc2UgewotICAgIGlmICggQ3ljbGVDbG9ja19Ob3co
KSA+PSBuZXh0X2ZsdXNoX3RpbWVfICkKLSAgICAgIHN0b3Bfd3JpdGluZyA9IGZhbHNlOyAgLy8g
Y2hlY2sgdG8gc2VlIGlmIGRpc2sgaGFzIGZyZWUgc3BhY2UuCi0gICAgcmV0dXJuOyAgLy8gbm8g
bmVlZCB0byBmbHVzaAotICB9Ci0KLSAgLy8gU2VlIGltcG9ydGFudCBtc2dzICpub3cqLiAgQWxz
bywgZmx1c2ggbG9ncyBhdCBsZWFzdCBldmVyeSAxMF42IGNoYXJzLAotICAvLyBvciBldmVyeSAi
RkxBR1NfbG9nYnVmc2VjcyIgc2Vjb25kcy4KLSAgaWYgKCBmb3JjZV9mbHVzaCB8fAotICAgICAg
IChieXRlc19zaW5jZV9mbHVzaF8gPj0gMTAwMDAwMCkgfHwKLSAgICAgICAoQ3ljbGVDbG9ja19O
b3coKSA+PSBuZXh0X2ZsdXNoX3RpbWVfKSApIHsKLSAgICBGbHVzaFVubG9ja2VkKCk7Ci0jaWZk
ZWYgT1NfTElOVVgKLSAgICAvLyBPbmx5IGNvbnNpZGVyIGZpbGVzID49IDNNaUIKLSAgICBpZiAo
RkxBR1NfZHJvcF9sb2dfbWVtb3J5ICYmIGZpbGVfbGVuZ3RoXyA+PSAoMyA8PCAyMCkpIHsKLSAg
ICAgIC8vIERvbid0IGV2aWN0IHRoZSBtb3N0IHJlY2VudCAxLTJNaUIgc28gYXMgbm90IHRvIGlt
cGFjdCBhIHRhaWxlcgotICAgICAgLy8gb2YgdGhlIGxvZyBmaWxlIGFuZCB0byBhdm9pZCBwYWdl
IHJvdW5kaW5nIGlzc3VlIG9uIGxpbnV4IDwgNC43Ci0gICAgICB1aW50MzIgdG90YWxfZHJvcF9s
ZW5ndGggPSAoZmlsZV9sZW5ndGhfICYgfigoMSA8PCAyMCkgLSAxKSkgLSAoMSA8PCAyMCk7Ci0g
ICAgICB1aW50MzIgdGhpc19kcm9wX2xlbmd0aCA9IHRvdGFsX2Ryb3BfbGVuZ3RoIC0gZHJvcHBl
ZF9tZW1fbGVuZ3RoXzsKLSAgICAgIGlmICh0aGlzX2Ryb3BfbGVuZ3RoID49ICgyIDw8IDIwKSkg
ewotICAgICAgICAvLyBPbmx5IGFkdmlzZSB3aGVuID49IDJNaUIgdG8gZHJvcAotICAgICAgICBw
b3NpeF9mYWR2aXNlKGZpbGVubyhmaWxlXyksIGRyb3BwZWRfbWVtX2xlbmd0aF8sIHRoaXNfZHJv
cF9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgUE9TSVhfRkFEVl9ET05UTkVFRCk7Ci0g
ICAgICAgIGRyb3BwZWRfbWVtX2xlbmd0aF8gPSB0b3RhbF9kcm9wX2xlbmd0aDsKLSAgICAgIH0K
LSAgICB9Ci0jZW5kaWYKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotCi0vLyBTdGF0aWMg
bG9nIGRhdGEgc3BhY2UgdG8gYXZvaWQgYWxsb2MgZmFpbHVyZXMgaW4gYSBMT0coRkFUQUwpCi0v
LwotLy8gU2luY2UgbXVsdGlwbGUgdGhyZWFkcyBtYXkgY2FsbCBMT0coRkFUQUwpLCBhbmQgd2Ug
d2FudCB0byBwcmVzZXJ2ZQotLy8gdGhlIGRhdGEgZnJvbSB0aGUgZmlyc3QgY2FsbCwgd2UgYWxs
b2NhdGUgdHdvIHNldHMgb2Ygc3BhY2UuICBPbmUKLS8vIGZvciBleGNsdXNpdmUgdXNlIGJ5IHRo
ZSBmaXJzdCB0aHJlYWQsIGFuZCBvbmUgZm9yIHNoYXJlZCB1c2UgYnkKLS8vIGFsbCBvdGhlciB0
aHJlYWRzLgotc3RhdGljIE11dGV4IGZhdGFsX21zZ19sb2NrOwotc3RhdGljIENyYXNoUmVhc29u
IGNyYXNoX3JlYXNvbjsKLXN0YXRpYyBib29sIGZhdGFsX21zZ19leGNsdXNpdmUgPSB0cnVlOwot
c3RhdGljIExvZ01lc3NhZ2U6OkxvZ01lc3NhZ2VEYXRhIGZhdGFsX21zZ19kYXRhX2V4Y2x1c2l2
ZTsKLXN0YXRpYyBMb2dNZXNzYWdlOjpMb2dNZXNzYWdlRGF0YSBmYXRhbF9tc2dfZGF0YV9zaGFy
ZWQ7Ci0KLSNpZmRlZiBHTE9HX1RIUkVBRF9MT0NBTF9TVE9SQUdFCi0vLyBTdGF0aWMgdGhyZWFk
LWxvY2FsIGxvZyBkYXRhIHNwYWNlIHRvIHVzZSwgYmVjYXVzZSB0eXBpY2FsbHkgYXQgbW9zdCBv
bmUKLS8vIExvZ01lc3NhZ2VEYXRhIG9iamVjdCBleGlzdHMgKGluIHRoaXMgY2FzZSBnbG9nIG1h
a2VzIHplcm8gaGVhcCBtZW1vcnkKLS8vIGFsbG9jYXRpb25zKS4KLXN0YXRpYyBHTE9HX1RIUkVB
RF9MT0NBTF9TVE9SQUdFIGJvb2wgdGhyZWFkX2RhdGFfYXZhaWxhYmxlID0gdHJ1ZTsKLXN0YXRp
YyBHTE9HX1RIUkVBRF9MT0NBTF9TVE9SQUdFIExvZ01lc3NhZ2U6OkxvZ01lc3NhZ2VEYXRhIHRo
cmVhZF9tc2dfZGF0YTsKLSNlbmRpZiAvLyBkZWZpbmVkKEdMT0dfVEhSRUFEX0xPQ0FMX1NUT1JB
R0UpCi0KLUxvZ01lc3NhZ2U6OkxvZ01lc3NhZ2VEYXRhOjpMb2dNZXNzYWdlRGF0YSgpCi0gIDog
c3RyZWFtXyhtZXNzYWdlX3RleHRfLCBMb2dNZXNzYWdlOjprTWF4TG9nTWVzc2FnZUxlbiwgMCkg
ewotfQotCi12b2lkIExvZ01lc3NhZ2U6OkxvZ01lc3NhZ2VEYXRhOjpyZXNldCgpIHsKLSAgICBz
dHJlYW1fLnJlc2V0KCk7Ci19Ci0KLUxvZ01lc3NhZ2U6OkxvZ01lc3NhZ2UoY29uc3QgY2hhciog
ZmlsZSwgaW50IGxpbmUsIExvZ1NldmVyaXR5IHNldmVyaXR5LAotICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgY3RyLCB2b2lkIChMb2dNZXNzYWdlOjoqc2VuZF9tZXRob2QpKCkpCi0gICAgOiBh
bGxvY2F0ZWRfKE5VTEwpIHsKLSAgSW5pdChmaWxlLCBsaW5lLCBzZXZlcml0eSwgc2VuZF9tZXRo
b2QpOwotICBkYXRhXy0+c3RyZWFtXy5zZXRfY3RyKGN0cik7Ci19Ci0KLUxvZ01lc3NhZ2U6Okxv
Z01lc3NhZ2UoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsCi0gICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IENoZWNrT3BTdHJpbmcmIHJlc3VsdCkKLSAgICA6IGFsbG9jYXRlZF8oTlVMTCkg
ewotICBJbml0KGZpbGUsIGxpbmUsIEdMT0dfRkFUQUwsICZMb2dNZXNzYWdlOjpTZW5kVG9Mb2cp
OwotICBzdHJlYW0oKSA8PCAiQ2hlY2sgZmFpbGVkOiAiIDw8ICgqcmVzdWx0LnN0cl8pIDw8ICIg
IjsKLX0KLQotTG9nTWVzc2FnZTo6TG9nTWVzc2FnZShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGlu
ZSkKLSAgICA6IGFsbG9jYXRlZF8oTlVMTCkgewotICBJbml0KGZpbGUsIGxpbmUsIEdMT0dfSU5G
TywgJkxvZ01lc3NhZ2U6OlNlbmRUb0xvZyk7Ci19Ci0KLUxvZ01lc3NhZ2U6OkxvZ01lc3NhZ2Uo
Y29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIExvZ1NldmVyaXR5IHNldmVyaXR5KQotICAgIDog
YWxsb2NhdGVkXyhOVUxMKSB7Ci0gIEluaXQoZmlsZSwgbGluZSwgc2V2ZXJpdHksICZMb2dNZXNz
YWdlOjpTZW5kVG9Mb2cpOwotfQotCi1Mb2dNZXNzYWdlOjpMb2dNZXNzYWdlKGNvbnN0IGNoYXIq
IGZpbGUsIGludCBsaW5lLCBMb2dTZXZlcml0eSBzZXZlcml0eSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgTG9nU2luayogc2luaywgYm9vbCBhbHNvX3NlbmRfdG9fbG9nKQotICAgIDogYWxsb2Nh
dGVkXyhOVUxMKSB7Ci0gIEluaXQoZmlsZSwgbGluZSwgc2V2ZXJpdHksIGFsc29fc2VuZF90b19s
b2cgPyAmTG9nTWVzc2FnZTo6U2VuZFRvU2lua0FuZExvZyA6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTG9nTWVzc2FnZTo6U2VuZFRvU2luayk7Ci0g
IGRhdGFfLT5zaW5rXyA9IHNpbms7ICAvLyBvdmVycmlkZSBJbml0KCkncyBzZXR0aW5nIHRvIE5V
TEwKLX0KLQotTG9nTWVzc2FnZTo6TG9nTWVzc2FnZShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGlu
ZSwgTG9nU2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgIHZlY3Rvcjxz
dHJpbmc+ICpvdXR2ZWMpCi0gICAgOiBhbGxvY2F0ZWRfKE5VTEwpIHsKLSAgSW5pdChmaWxlLCBs
aW5lLCBzZXZlcml0eSwgJkxvZ01lc3NhZ2U6OlNhdmVPclNlbmRUb0xvZyk7Ci0gIGRhdGFfLT5v
dXR2ZWNfID0gb3V0dmVjOyAvLyBvdmVycmlkZSBJbml0KCkncyBzZXR0aW5nIHRvIE5VTEwKLX0K
LQotTG9nTWVzc2FnZTo6TG9nTWVzc2FnZShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgTG9n
U2V2ZXJpdHkgc2V2ZXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAqbWVzc2Fn
ZSkKLSAgICA6IGFsbG9jYXRlZF8oTlVMTCkgewotICBJbml0KGZpbGUsIGxpbmUsIHNldmVyaXR5
LCAmTG9nTWVzc2FnZTo6V3JpdGVUb1N0cmluZ0FuZExvZyk7Ci0gIGRhdGFfLT5tZXNzYWdlXyA9
IG1lc3NhZ2U7ICAvLyBvdmVycmlkZSBJbml0KCkncyBzZXR0aW5nIHRvIE5VTEwKLX0KLQotdm9p
ZCBMb2dNZXNzYWdlOjpJbml0KGNvbnN0IGNoYXIqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgaW50IGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgTG9nU2V2ZXJpdHkgc2V2ZXJpdHks
Ci0gICAgICAgICAgICAgICAgICAgICAgdm9pZCAoTG9nTWVzc2FnZTo6KnNlbmRfbWV0aG9kKSgp
KSB7Ci0gIGFsbG9jYXRlZF8gPSBOVUxMOwotICBpZiAoc2V2ZXJpdHkgIT0gR0xPR19GQVRBTCB8
fCAhZXhpdF9vbl9kZmF0YWwpIHsKLSNpZmRlZiBHTE9HX1RIUkVBRF9MT0NBTF9TVE9SQUdFCi0g
ICAgLy8gTm8gbmVlZCBmb3IgbG9ja2luZywgYmVjYXVzZSB0aGlzIGlzIHRocmVhZCBsb2NhbC4K
LSAgICBpZiAodGhyZWFkX2RhdGFfYXZhaWxhYmxlKSB7Ci0gICAgICB0aHJlYWRfZGF0YV9hdmFp
bGFibGUgPSBmYWxzZTsKLSAgICAgIGRhdGFfID0gJnRocmVhZF9tc2dfZGF0YTsKLSAgICAgIC8v
IE1ha2Ugc3VyZSB0byBjbGVhciBsb2cgZGF0YSBzaW5jZSBpdCBtYXkgaGF2ZSBiZWVuIHVzZWQg
YW5kIGZpbGxlZCB3aXRoCi0gICAgICAvLyBkYXRhLiBXZSBkbyBub3Qgd2FudCB0byBhcHBlbmQg
dGhlIG5ldyBtZXNzYWdlIHRvIHRoZSBwcmV2aW91cyBvbmUuCi0gICAgICBkYXRhXy0+cmVzZXQo
KTsKLSAgICB9IGVsc2UgewotICAgICAgYWxsb2NhdGVkXyA9IG5ldyBMb2dNZXNzYWdlRGF0YSgp
OwotICAgICAgZGF0YV8gPSBhbGxvY2F0ZWRfOwotICAgIH0KLSNlbHNlIC8vICFkZWZpbmVkKEdM
T0dfVEhSRUFEX0xPQ0FMX1NUT1JBR0UpCi0gICAgYWxsb2NhdGVkXyA9IG5ldyBMb2dNZXNzYWdl
RGF0YSgpOwotICAgIGRhdGFfID0gYWxsb2NhdGVkXzsKLSNlbmRpZiAvLyBkZWZpbmVkKEdMT0df
VEhSRUFEX0xPQ0FMX1NUT1JBR0UpCi0gICAgZGF0YV8tPmZpcnN0X2ZhdGFsXyA9IGZhbHNlOwot
ICB9IGVsc2UgewotICAgIE11dGV4TG9jayBsKCZmYXRhbF9tc2dfbG9jayk7Ci0gICAgaWYgKGZh
dGFsX21zZ19leGNsdXNpdmUpIHsKLSAgICAgIGZhdGFsX21zZ19leGNsdXNpdmUgPSBmYWxzZTsK
LSAgICAgIGRhdGFfID0gJmZhdGFsX21zZ19kYXRhX2V4Y2x1c2l2ZTsKLSAgICAgIGRhdGFfLT5m
aXJzdF9mYXRhbF8gPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBkYXRhXyA9ICZmYXRhbF9t
c2dfZGF0YV9zaGFyZWQ7Ci0gICAgICBkYXRhXy0+Zmlyc3RfZmF0YWxfID0gZmFsc2U7Ci0gICAg
fQotICB9Ci0KLSAgc3RyZWFtKCkuZmlsbCgnMCcpOwotICBkYXRhXy0+cHJlc2VydmVkX2Vycm5v
XyA9IGVycm5vOwotICBkYXRhXy0+c2V2ZXJpdHlfID0gc2V2ZXJpdHk7Ci0gIGRhdGFfLT5saW5l
XyA9IGxpbmU7Ci0gIGRhdGFfLT5zZW5kX21ldGhvZF8gPSBzZW5kX21ldGhvZDsKLSAgZGF0YV8t
PnNpbmtfID0gTlVMTDsKLSAgZGF0YV8tPm91dHZlY18gPSBOVUxMOwotICBXYWxsVGltZSBub3cg
PSBXYWxsVGltZV9Ob3coKTsKLSAgZGF0YV8tPnRpbWVzdGFtcF8gPSBzdGF0aWNfY2FzdDx0aW1l
X3Q+KG5vdyk7Ci0gIGxvY2FsdGltZV9yKCZkYXRhXy0+dGltZXN0YW1wXywgJmRhdGFfLT50bV90
aW1lXyk7Ci0gIGludCB1c2VjcyA9IHN0YXRpY19jYXN0PGludD4oKG5vdyAtIGRhdGFfLT50aW1l
c3RhbXBfKSAqIDEwMDAwMDApOwotICBSYXdMb2dfX1NldExhc3RUaW1lKGRhdGFfLT50bV90aW1l
XywgdXNlY3MpOwotCi0gIGRhdGFfLT5udW1fY2hhcnNfdG9fbG9nXyA9IDA7Ci0gIGRhdGFfLT5u
dW1fY2hhcnNfdG9fc3lzbG9nXyA9IDA7Ci0gIGRhdGFfLT5iYXNlbmFtZV8gPSBjb25zdF9iYXNl
bmFtZShmaWxlKTsKLSAgZGF0YV8tPmZ1bGxuYW1lXyA9IGZpbGU7Ci0gIGRhdGFfLT5oYXNfYmVl
bl9mbHVzaGVkXyA9IGZhbHNlOwotCi0gIC8vIElmIHNwZWNpZmllZCwgcHJlcGVuZCBhIHByZWZp
eCB0byBlYWNoIGxpbmUuICBGb3IgZXhhbXBsZToKLSAgLy8gICAgSTEwMTggMTYwNzE1IGY1ZDRm
YmIwIGxvZ2dpbmcuY2M6MTE1M10KLSAgLy8gICAgKGxvZyBsZXZlbCwgR01UIG1vbnRoLCBkYXRl
LCB0aW1lLCB0aHJlYWRfaWQsIGZpbGUgYmFzZW5hbWUsIGxpbmUpCi0gIC8vIFdlIGV4Y2x1ZGUg
dGhlIHRocmVhZF9pZCBmb3IgdGhlIGRlZmF1bHQgdGhyZWFkLgotICBpZiAoRkxBR1NfbG9nX3By
ZWZpeCAmJiAobGluZSAhPSBrTm9Mb2dQcmVmaXgpKSB7Ci0gICAgc3RyZWFtKCkgPDwgTG9nU2V2
ZXJpdHlOYW1lc1tzZXZlcml0eV1bMF0KLSAgICAgICAgICAgICA8PCBzZXR3KDIpIDw8IDErZGF0
YV8tPnRtX3RpbWVfLnRtX21vbgotICAgICAgICAgICAgIDw8IHNldHcoMikgPDwgZGF0YV8tPnRt
X3RpbWVfLnRtX21kYXkKLSAgICAgICAgICAgICA8PCAnICcKLSAgICAgICAgICAgICA8PCBzZXR3
KDIpIDw8IGRhdGFfLT50bV90aW1lXy50bV9ob3VyICA8PCAnOicKLSAgICAgICAgICAgICA8PCBz
ZXR3KDIpIDw8IGRhdGFfLT50bV90aW1lXy50bV9taW4gICA8PCAnOicKLSAgICAgICAgICAgICA8
PCBzZXR3KDIpIDw8IGRhdGFfLT50bV90aW1lXy50bV9zZWMgICA8PCAiLiIKLSAgICAgICAgICAg
ICA8PCBzZXR3KDYpIDw8IHVzZWNzCi0gICAgICAgICAgICAgPDwgJyAnCi0gICAgICAgICAgICAg
PDwgc2V0ZmlsbCgnICcpIDw8IHNldHcoNSkKLSAgICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KEdldFRJRCgpKSA8PCBzZXRmaWxsKCcwJykKLSAgICAgICAgICAgICA8PCAn
ICcKLSAgICAgICAgICAgICA8PCBkYXRhXy0+YmFzZW5hbWVfIDw8ICc6JyA8PCBkYXRhXy0+bGlu
ZV8gPDwgIl0gIjsKLSAgfQotICBkYXRhXy0+bnVtX3ByZWZpeF9jaGFyc18gPSBkYXRhXy0+c3Ry
ZWFtXy5wY291bnQoKTsKLQotICBpZiAoIUZMQUdTX2xvZ19iYWNrdHJhY2VfYXQuZW1wdHkoKSkg
ewotICAgIGNoYXIgZmlsZWxpbmVbMTI4XTsKLSAgICBzbnByaW50ZihmaWxlbGluZSwgc2l6ZW9m
KGZpbGVsaW5lKSwgIiVzOiVkIiwgZGF0YV8tPmJhc2VuYW1lXywgbGluZSk7Ci0gIH0KLX0KLQot
TG9nTWVzc2FnZTo6fkxvZ01lc3NhZ2UoKSB7Ci0gIEZsdXNoKCk7Ci0jaWZkZWYgR0xPR19USFJF
QURfTE9DQUxfU1RPUkFHRQotICBpZiAoZGF0YV8gPT0gJnRocmVhZF9tc2dfZGF0YSkKLSAgICB0
aHJlYWRfZGF0YV9hdmFpbGFibGUgPSB0cnVlOwotI2VuZGlmIC8vIGRlZmluZWQoR0xPR19USFJF
QURfTE9DQUxfU1RPUkFHRSkKLSAgZGVsZXRlIGFsbG9jYXRlZF87Ci19Ci0KLWludCBMb2dNZXNz
YWdlOjpwcmVzZXJ2ZWRfZXJybm8oKSBjb25zdCB7Ci0gIHJldHVybiBkYXRhXy0+cHJlc2VydmVk
X2Vycm5vXzsKLX0KLQotb3N0cmVhbSYgTG9nTWVzc2FnZTo6c3RyZWFtKCkgewotICByZXR1cm4g
ZGF0YV8tPnN0cmVhbV87Ci19Ci0KLS8vIEZsdXNoIGJ1ZmZlcmVkIG1lc3NhZ2UsIGNhbGxlZCBi
eSB0aGUgZGVzdHJ1Y3Rvciwgb3IgYW55IG90aGVyIGZ1bmN0aW9uCi0vLyB0aGF0IG5lZWRzIHRv
IHN5bmNocm9uaXplIHRoZSBsb2cuCi12b2lkIExvZ01lc3NhZ2U6OkZsdXNoKCkgewotICBpZiAo
ZGF0YV8tPmhhc19iZWVuX2ZsdXNoZWRfIHx8IGRhdGFfLT5zZXZlcml0eV8gPCBGTEFHU19taW5s
b2dsZXZlbCkKLSAgICByZXR1cm47Ci0KLSAgZGF0YV8tPm51bV9jaGFyc190b19sb2dfID0gZGF0
YV8tPnN0cmVhbV8ucGNvdW50KCk7Ci0gIGRhdGFfLT5udW1fY2hhcnNfdG9fc3lzbG9nXyA9Ci0g
ICAgZGF0YV8tPm51bV9jaGFyc190b19sb2dfIC0gZGF0YV8tPm51bV9wcmVmaXhfY2hhcnNfOwot
Ci0gIC8vIERvIHdlIG5lZWQgdG8gYWRkIGEgXG4gdG8gdGhlIGVuZCBvZiB0aGlzIG1lc3NhZ2U/
Ci0gIGJvb2wgYXBwZW5kX25ld2xpbmUgPQotICAgICAgKGRhdGFfLT5tZXNzYWdlX3RleHRfW2Rh
dGFfLT5udW1fY2hhcnNfdG9fbG9nXy0xXSAhPSAnXG4nKTsKLSAgY2hhciBvcmlnaW5hbF9maW5h
bF9jaGFyID0gJ1wwJzsKLQotICAvLyBJZiB3ZSBkbyBuZWVkIHRvIGFkZCBhIFxuLCB3ZSdsbCBk
byBpdCBieSB2aW9sYXRpbmcgdGhlIG1lbW9yeSBvZiB0aGUKLSAgLy8gb3N0cnN0cmVhbSBidWZm
ZXIuICBUaGlzIGlzIHF1aWNrLCBhbmQgd2UnbGwgbWFrZSBzdXJlIHRvIHVuZG8gb3VyCi0gIC8v
IG1vZGlmaWNhdGlvbiBiZWZvcmUgYW55dGhpbmcgZWxzZSBpcyBkb25lIHdpdGggdGhlIG9zdHJz
dHJlYW0uICBJdAotICAvLyB3b3VsZCBiZSBwcmVmZXJhYmxlIG5vdCB0byBkbyB0aGluZ3MgdGhp
cyB3YXksIGJ1dCBpdCBzZWVtcyB0byBiZQotICAvLyB0aGUgYmVzdCB3YXkgdG8gZGVhbCB3aXRo
IHRoaXMuCi0gIGlmIChhcHBlbmRfbmV3bGluZSkgewotICAgIG9yaWdpbmFsX2ZpbmFsX2NoYXIg
PSBkYXRhXy0+bWVzc2FnZV90ZXh0X1tkYXRhXy0+bnVtX2NoYXJzX3RvX2xvZ19dOwotICAgIGRh
dGFfLT5tZXNzYWdlX3RleHRfW2RhdGFfLT5udW1fY2hhcnNfdG9fbG9nXysrXSA9ICdcbic7Ci0g
IH0KLQotICAvLyBQcmV2ZW50IGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGJ5IHdyYXBwaW5n
IGEgbXV0ZXggbG9jayBhcm91bmQKLSAgLy8gdGhlIGFjdHVhbCBsb2dnaW5nIGFjdGlvbiBwZXIg
c2UuCi0gIHsKLSAgICBNdXRleExvY2sgbCgmbG9nX211dGV4KTsKLSAgICAodGhpcy0+KihkYXRh
Xy0+c2VuZF9tZXRob2RfKSkoKTsKLSAgICArK251bV9tZXNzYWdlc19bc3RhdGljX2Nhc3Q8aW50
PihkYXRhXy0+c2V2ZXJpdHlfKV07Ci0gIH0KLSAgTG9nRGVzdGluYXRpb246OldhaXRGb3JTaW5r
cyhkYXRhXyk7Ci0KLSAgaWYgKGFwcGVuZF9uZXdsaW5lKSB7Ci0gICAgLy8gRml4IHRoZSBvc3Ry
c3RyZWFtIGJhY2sgaG93IGl0IHdhcyBiZWZvcmUgd2Ugc2NyZXdlZCB3aXRoIGl0LgotICAgIC8v
IEl0J3MgOTkuNDQlIGNlcnRhaW4gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGRv
aW5nIHRoaXMuCi0gICAgZGF0YV8tPm1lc3NhZ2VfdGV4dF9bZGF0YV8tPm51bV9jaGFyc190b19s
b2dfLTFdID0gb3JpZ2luYWxfZmluYWxfY2hhcjsKLSAgfQotCi0gIC8vIElmIGVycm5vIHdhcyBh
bHJlYWR5IHNldCBiZWZvcmUgd2UgZW50ZXIgdGhlIGxvZ2dpbmcgY2FsbCwgd2UnbGwKLSAgLy8g
c2V0IGl0IGJhY2sgdG8gdGhhdCB2YWx1ZSB3aGVuIHdlIHJldHVybiBmcm9tIHRoZSBsb2dnaW5n
IGNhbGwuCi0gIC8vIEl0IGhhcHBlbnMgb2Z0ZW4gdGhhdCB3ZSBsb2cgYW4gZXJyb3IgbWVzc2Fn
ZSBhZnRlciBhIHN5c2NhbGwKLSAgLy8gZmFpbHVyZSwgd2hpY2ggY2FuIHBvdGVudGlhbGx5IHNl
dCB0aGUgZXJybm8gdG8gc29tZSBvdGhlcgotICAvLyB2YWx1ZXMuICBXZSB3b3VsZCBsaWtlIHRv
IHByZXNlcnZlIHRoZSBvcmlnaW5hbCBlcnJuby4KLSAgaWYgKGRhdGFfLT5wcmVzZXJ2ZWRfZXJy
bm9fICE9IDApIHsKLSAgICBlcnJubyA9IGRhdGFfLT5wcmVzZXJ2ZWRfZXJybm9fOwotICB9Ci0K
LSAgLy8gTm90ZSB0aGF0IHRoaXMgbWVzc2FnZSBpcyBub3cgc2FmZWx5IGxvZ2dlZC4gIElmIHdl
J3JlIGFza2VkIHRvIGZsdXNoCi0gIC8vIGFnYWluLCBhcyBhIHJlc3VsdCBvZiBkZXN0cnVjdGlv
biwgc2F5LCB3ZSdsbCBkbyBub3RoaW5nIG9uIGZ1dHVyZSBjYWxscy4KLSAgZGF0YV8tPmhhc19i
ZWVuX2ZsdXNoZWRfID0gdHJ1ZTsKLX0KLQotLy8gQ29weSBvZiBmaXJzdCBGQVRBTCBsb2cgbWVz
c2FnZSBzbyB0aGF0IHdlIGNhbiBwcmludCBpdCBvdXQgYWdhaW4KLS8vIGFmdGVyIGFsbCB0aGUg
c3RhY2sgdHJhY2VzLiAgVG8gcHJlc2VydmUgbGVnYWN5IGJlaGF2aW9yLCB3ZSBkb24ndAotLy8g
dXNlIGZhdGFsX21zZ19kYXRhX2V4Y2x1c2l2ZS4KLXN0YXRpYyB0aW1lX3QgZmF0YWxfdGltZTsK
LXN0YXRpYyBjaGFyIGZhdGFsX21lc3NhZ2VbMjU2XTsKLQotdm9pZCBSZXByaW50RmF0YWxNZXNz
YWdlKCkgewotICBpZiAoZmF0YWxfbWVzc2FnZVswXSkgewotICAgIGNvbnN0IGludCBuID0gc3Ry
bGVuKGZhdGFsX21lc3NhZ2UpOwotICAgIGlmICghRkxBR1NfbG9ndG9zdGRlcnIpIHsKLSAgICAg
IC8vIEFsc28gd3JpdGUgdG8gc3RkZXJyIChkb24ndCBjb2xvciB0byBhdm9pZCB0ZXJtaW5hbCBj
aGVja3MpCi0gICAgICBXcml0ZVRvU3RkZXJyKGZhdGFsX21lc3NhZ2UsIG4pOwotICAgIH0KLSAg
ICBMb2dEZXN0aW5hdGlvbjo6TG9nVG9BbGxMb2dmaWxlcyhHTE9HX0VSUk9SLCBmYXRhbF90aW1l
LCBmYXRhbF9tZXNzYWdlLCBuKTsKLSAgfQotfQotCi0vLyBMID49IGxvZ19tdXRleCAoY2FsbGVy
cyBtdXN0IGhvbGQgdGhlIGxvZ19tdXRleCkuCi12b2lkIExvZ01lc3NhZ2U6OlNlbmRUb0xvZygp
IEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChsb2dfbXV0ZXgpIHsKLSAgc3RhdGljIGJvb2wgYWxy
ZWFkeV93YXJuZWRfYmVmb3JlX2luaXRnb29nbGUgPSBmYWxzZTsKLQotICBsb2dfbXV0ZXguQXNz
ZXJ0SGVsZCgpOwotCi0gIFJBV19EQ0hFQ0soZGF0YV8tPm51bV9jaGFyc190b19sb2dfID4gMCAm
JgotICAgICAgICAgICAgIGRhdGFfLT5tZXNzYWdlX3RleHRfW2RhdGFfLT5udW1fY2hhcnNfdG9f
bG9nXy0xXSA9PSAnXG4nLCAiIik7Ci0KLSAgLy8gTWVzc2FnZXMgb2YgYSBnaXZlbiBzZXZlcml0
eSBnZXQgbG9nZ2VkIHRvIGxvd2VyIHNldmVyaXR5IGxvZ3MsIHRvbwotCi0gIGlmICghYWxyZWFk
eV93YXJuZWRfYmVmb3JlX2luaXRnb29nbGUgJiYgIUlzR29vZ2xlTG9nZ2luZ0luaXRpYWxpemVk
KCkpIHsKLSAgICBjb25zdCBjaGFyIHdbXSA9ICJXQVJOSU5HOiBMb2dnaW5nIGJlZm9yZSBJbml0
R29vZ2xlTG9nZ2luZygpIGlzICIKLSAgICAgICAgICAgICAgICAgICAgICJ3cml0dGVuIHRvIFNU
REVSUlxuIjsKLSAgICBXcml0ZVRvU3RkZXJyKHcsIHN0cmxlbih3KSk7Ci0gICAgYWxyZWFkeV93
YXJuZWRfYmVmb3JlX2luaXRnb29nbGUgPSB0cnVlOwotICB9Ci0KLSAgLy8gZ2xvYmFsIGZsYWc6
IG5ldmVyIGxvZyB0byBmaWxlIGlmIHNldC4gIEFsc28gLS0gZG9uJ3QgbG9nIHRvIGEKLSAgLy8g
ZmlsZSBpZiB3ZSBoYXZlbid0IHBhcnNlZCB0aGUgY29tbWFuZCBsaW5lIGZsYWdzIHRvIGdldCB0
aGUKLSAgLy8gcHJvZ3JhbSBuYW1lLgotICBpZiAoRkxBR1NfbG9ndG9zdGRlcnIgfHwgIUlzR29v
Z2xlTG9nZ2luZ0luaXRpYWxpemVkKCkpIHsKLSAgICBDb2xvcmVkV3JpdGVUb1N0ZGVycihkYXRh
Xy0+c2V2ZXJpdHlfLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfLT5tZXNzYWdlX3Rl
eHRfLCBkYXRhXy0+bnVtX2NoYXJzX3RvX2xvZ18pOwotCi0gICAgLy8gdGhpcyBjb3VsZCBiZSBw
cm90ZWN0ZWQgYnkgYSBmbGFnIGlmIG5lY2Vzc2FyeS4KLSAgICBMb2dEZXN0aW5hdGlvbjo6TG9n
VG9TaW5rcyhkYXRhXy0+c2V2ZXJpdHlfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFfLT5mdWxsbmFtZV8sIGRhdGFfLT5iYXNlbmFtZV8sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YV8tPmxpbmVfLCAmZGF0YV8tPnRtX3RpbWVfLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFfLT5tZXNzYWdlX3RleHRfICsgZGF0YV8tPm51bV9wcmVm
aXhfY2hhcnNfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhXy0+bnVtX2No
YXJzX3RvX2xvZ18gLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhXy0+bnVt
X3ByZWZpeF9jaGFyc18gLSAxKSk7Ci0gIH0gZWxzZSB7Ci0KLSAgICAvLyBsb2cgdGhpcyBtZXNz
YWdlIHRvIGFsbCBsb2cgZmlsZXMgb2Ygc2V2ZXJpdHkgPD0gc2V2ZXJpdHlfCi0gICAgTG9nRGVz
dGluYXRpb246OkxvZ1RvQWxsTG9nZmlsZXMoZGF0YV8tPnNldmVyaXR5XywgZGF0YV8tPnRpbWVz
dGFtcF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV8tPm1lc3Nh
Z2VfdGV4dF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV8tPm51
bV9jaGFyc190b19sb2dfKTsKLQotICAgIExvZ0Rlc3RpbmF0aW9uOjpNYXliZUxvZ1RvU3RkZXJy
KGRhdGFfLT5zZXZlcml0eV8sIGRhdGFfLT5tZXNzYWdlX3RleHRfLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFfLT5udW1fY2hhcnNfdG9fbG9nXyk7Ci0gICAgTG9n
RGVzdGluYXRpb246OkxvZ1RvU2lua3MoZGF0YV8tPnNldmVyaXR5XywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhXy0+ZnVsbG5hbWVfLCBkYXRhXy0+YmFzZW5hbWVfLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfLT5saW5lXywgJmRhdGFfLT50bV90aW1l
XywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhXy0+bWVzc2FnZV90ZXh0XyAr
IGRhdGFfLT5udW1fcHJlZml4X2NoYXJzXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoZGF0YV8tPm51bV9jaGFyc190b19sb2dfCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0gZGF0YV8tPm51bV9wcmVmaXhfY2hhcnNfIC0gMSkpOwotICAgIC8vIE5PVEU6IC0xIHJl
bW92ZXMgdHJhaWxpbmcgXG4KLSAgfQotCi0gIC8vIElmIHdlIGxvZyBhIEZBVEFMIG1lc3NhZ2Us
IGZsdXNoIGFsbCB0aGUgbG9nIGRlc3RpbmF0aW9ucywgdGhlbiB0b3NzCi0gIC8vIGEgc2lnbmFs
IGZvciBvdGhlcnMgdG8gY2F0Y2guIFdlIGxlYXZlIHRoZSBsb2dzIGluIGEgc3RhdGUgdGhhdAot
ICAvLyBzb21lb25lIGVsc2UgY2FuIHVzZSB0aGVtIChhcyBsb25nIGFzIHRoZXkgZmx1c2ggYWZ0
ZXJ3YXJkcykKLSAgaWYgKGRhdGFfLT5zZXZlcml0eV8gPT0gR0xPR19GQVRBTCAmJiBleGl0X29u
X2RmYXRhbCkgewotICAgIGlmIChkYXRhXy0+Zmlyc3RfZmF0YWxfKSB7Ci0gICAgICAvLyBTdG9y
ZSBjcmFzaCBpbmZvcm1hdGlvbiBzbyB0aGF0IGl0IGlzIGFjY2Vzc2libGUgZnJvbSB3aXRoaW4g
c2lnbmFsCi0gICAgICAvLyBoYW5kbGVycyB0aGF0IG1heSBiZSBpbnZva2VkIGxhdGVyLgotICAg
ICAgUmVjb3JkQ3Jhc2hSZWFzb24oJmNyYXNoX3JlYXNvbik7Ci0gICAgICBTZXRDcmFzaFJlYXNv
bigmY3Jhc2hfcmVhc29uKTsKLQotICAgICAgLy8gU3RvcmUgc2hvcnRlbmVkIGZhdGFsIG1lc3Nh
Z2UgZm9yIG90aGVyIGxvZ3MgYW5kIEdXUSBzdGF0dXMKLSAgICAgIGNvbnN0IGludCBjb3B5ID0g
bWluPGludD4oZGF0YV8tPm51bV9jaGFyc190b19sb2dfLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplb2YoZmF0YWxfbWVzc2FnZSktMSk7Ci0gICAgICBtZW1jcHkoZmF0YWxf
bWVzc2FnZSwgZGF0YV8tPm1lc3NhZ2VfdGV4dF8sIGNvcHkpOwotICAgICAgZmF0YWxfbWVzc2Fn
ZVtjb3B5XSA9ICdcMCc7Ci0gICAgICBmYXRhbF90aW1lID0gZGF0YV8tPnRpbWVzdGFtcF87Ci0g
ICAgfQotCi0gICAgaWYgKCFGTEFHU19sb2d0b3N0ZGVycikgewotICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBOVU1fU0VWRVJJVElFUzsgKytpKSB7Ci0gICAgICAgIGlmICggTG9nRGVzdGluYXRp
b246OmxvZ19kZXN0aW5hdGlvbnNfW2ldICkKLSAgICAgICAgICBMb2dEZXN0aW5hdGlvbjo6bG9n
X2Rlc3RpbmF0aW9uc19baV0tPmxvZ2dlcl8tPldyaXRlKHRydWUsIDAsICIiLCAwKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyByZWxlYXNlIHRoZSBsb2NrIHRoYXQgb3VyIGNhbGxlciAoZGly
ZWN0bHkgb3IgaW5kaXJlY3RseSkKLSAgICAvLyBMb2dNZXNzYWdlOjp+TG9nTWVzc2FnZSgpIGdy
YWJiZWQgc28gdGhhdCBzaWduYWwgaGFuZGxlcnMKLSAgICAvLyBjYW4gdXNlIHRoZSBsb2dnaW5n
IGZhY2lsaXR5LiBBbHRlcm5hdGVseSwgd2UgY291bGQgYWRkCi0gICAgLy8gYW4gZW50aXJlIHVu
c2FmZSBsb2dnaW5nIGludGVyZmFjZSB0byBieXBhc3MgbG9ja2luZwotICAgIC8vIGZvciBzaWdu
YWwgaGFuZGxlcnMgYnV0IHRoaXMgc2VlbXMgc2ltcGxlci4KLSAgICBsb2dfbXV0ZXguVW5sb2Nr
KCk7Ci0gICAgTG9nRGVzdGluYXRpb246OldhaXRGb3JTaW5rcyhkYXRhXyk7Ci0KLSAgICBjb25z
dCBjaGFyKiBtZXNzYWdlID0gIioqKiBDaGVjayBmYWlsdXJlIHN0YWNrIHRyYWNlOiAqKipcbiI7
Ci0gICAgaWYgKHdyaXRlKFNUREVSUl9GSUxFTk8sIG1lc3NhZ2UsIHN0cmxlbihtZXNzYWdlKSkg
PCAwKSB7Ci0gICAgICAvLyBJZ25vcmUgZXJyb3JzLgotICAgIH0KLSAgICBGYWlsKCk7Ci0gIH0K
LX0KLQotdm9pZCBMb2dNZXNzYWdlOjpSZWNvcmRDcmFzaFJlYXNvbigKLSAgICBnbG9nX2ludGVy
bmFsX25hbWVzcGFjZV86OkNyYXNoUmVhc29uKiByZWFzb24pIHsKLSAgcmVhc29uLT5maWxlbmFt
ZSA9IGZhdGFsX21zZ19kYXRhX2V4Y2x1c2l2ZS5mdWxsbmFtZV87Ci0gIHJlYXNvbi0+bGluZV9u
dW1iZXIgPSBmYXRhbF9tc2dfZGF0YV9leGNsdXNpdmUubGluZV87Ci0gIHJlYXNvbi0+bWVzc2Fn
ZSA9IGZhdGFsX21zZ19kYXRhX2V4Y2x1c2l2ZS5tZXNzYWdlX3RleHRfICsKLSAgICAgICAgICAg
ICAgICAgICAgZmF0YWxfbXNnX2RhdGFfZXhjbHVzaXZlLm51bV9wcmVmaXhfY2hhcnNfOwotICBy
ZWFzb24tPmRlcHRoID0gMDsKLX0KLQotI2lmZGVmIEhBVkVfX19BVFRSSUJVVEVfXwotIyBkZWZp
bmUgQVRUUklCVVRFX05PUkVUVVJOIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkKLSNlbHNlCi0j
IGRlZmluZSBBVFRSSUJVVEVfTk9SRVRVUk4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChPU19XSU5E
T1dTKQotX19kZWNsc3BlYyhub3JldHVybikKLSNlbmRpZgotc3RhdGljIHZvaWQgbG9nZ2luZ19m
YWlsKCkgQVRUUklCVVRFX05PUkVUVVJOOwotCi1zdGF0aWMgdm9pZCBsb2dnaW5nX2ZhaWwoKSB7
Ci0gIGFib3J0KCk7Ci19Ci0KLXR5cGVkZWYgdm9pZCAoKmxvZ2dpbmdfZmFpbF9mdW5jX3QpKCkg
QVRUUklCVVRFX05PUkVUVVJOOwotCi1HT09HTEVfR0xPR19ETExfREVDTAotbG9nZ2luZ19mYWls
X2Z1bmNfdCBnX2xvZ2dpbmdfZmFpbF9mdW5jID0gJmxvZ2dpbmdfZmFpbDsKLQotdm9pZCBJbnN0
YWxsRmFpbHVyZUZ1bmN0aW9uKHZvaWQgKCpmYWlsX2Z1bmMpKCkpIHsKLSAgZ19sb2dnaW5nX2Zh
aWxfZnVuYyA9IChsb2dnaW5nX2ZhaWxfZnVuY190KWZhaWxfZnVuYzsKLX0KLQotdm9pZCBMb2dN
ZXNzYWdlOjpGYWlsKCkgewotICBnX2xvZ2dpbmdfZmFpbF9mdW5jKCk7Ci19Ci0KLS8vIEwgPj0g
bG9nX211dGV4IChjYWxsZXJzIG11c3QgaG9sZCB0aGUgbG9nX211dGV4KS4KLXZvaWQgTG9nTWVz
c2FnZTo6U2VuZFRvU2luaygpIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChsb2dfbXV0ZXgpIHsK
LSAgaWYgKGRhdGFfLT5zaW5rXyAhPSBOVUxMKSB7Ci0gICAgUkFXX0RDSEVDSyhkYXRhXy0+bnVt
X2NoYXJzX3RvX2xvZ18gPiAwICYmCi0gICAgICAgICAgICAgICBkYXRhXy0+bWVzc2FnZV90ZXh0
X1tkYXRhXy0+bnVtX2NoYXJzX3RvX2xvZ18tMV0gPT0gJ1xuJywgIiIpOwotICAgIGRhdGFfLT5z
aW5rXy0+c2VuZChkYXRhXy0+c2V2ZXJpdHlfLCBkYXRhXy0+ZnVsbG5hbWVfLCBkYXRhXy0+YmFz
ZW5hbWVfLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRhXy0+bGluZV8sICZkYXRhXy0+dG1f
dGltZV8sCi0gICAgICAgICAgICAgICAgICAgICAgIGRhdGFfLT5tZXNzYWdlX3RleHRfICsgZGF0
YV8tPm51bV9wcmVmaXhfY2hhcnNfLAotICAgICAgICAgICAgICAgICAgICAgICAoZGF0YV8tPm51
bV9jaGFyc190b19sb2dfIC0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfLT5udW1fcHJl
Zml4X2NoYXJzXyAtIDEpKTsKLSAgfQotfQotCi0vLyBMID49IGxvZ19tdXRleCAoY2FsbGVycyBt
dXN0IGhvbGQgdGhlIGxvZ19tdXRleCkuCi12b2lkIExvZ01lc3NhZ2U6OlNlbmRUb1NpbmtBbmRM
b2coKSBFWENMVVNJVkVfTE9DS1NfUkVRVUlSRUQobG9nX211dGV4KSB7Ci0gIFNlbmRUb1Npbmso
KTsKLSAgU2VuZFRvTG9nKCk7Ci19Ci0KLS8vIEwgPj0gbG9nX211dGV4IChjYWxsZXJzIG11c3Qg
aG9sZCB0aGUgbG9nX211dGV4KS4KLXZvaWQgTG9nTWVzc2FnZTo6U2F2ZU9yU2VuZFRvTG9nKCkg
RVhDTFVTSVZFX0xPQ0tTX1JFUVVJUkVEKGxvZ19tdXRleCkgewotICBpZiAoZGF0YV8tPm91dHZl
Y18gIT0gTlVMTCkgewotICAgIFJBV19EQ0hFQ0soZGF0YV8tPm51bV9jaGFyc190b19sb2dfID4g
MCAmJgotICAgICAgICAgICAgICAgZGF0YV8tPm1lc3NhZ2VfdGV4dF9bZGF0YV8tPm51bV9jaGFy
c190b19sb2dfLTFdID09ICdcbicsICIiKTsKLSAgICAvLyBPbWl0IHByZWZpeCBvZiBtZXNzYWdl
IGFuZCB0cmFpbGluZyBuZXdsaW5lIHdoZW4gcmVjb3JkaW5nIGluIG91dHZlY18uCi0gICAgY29u
c3QgY2hhciAqc3RhcnQgPSBkYXRhXy0+bWVzc2FnZV90ZXh0XyArIGRhdGFfLT5udW1fcHJlZml4
X2NoYXJzXzsKLSAgICBpbnQgbGVuID0gZGF0YV8tPm51bV9jaGFyc190b19sb2dfIC0gZGF0YV8t
Pm51bV9wcmVmaXhfY2hhcnNfIC0gMTsKLSAgICBkYXRhXy0+b3V0dmVjXy0+cHVzaF9iYWNrKHN0
cmluZyhzdGFydCwgbGVuKSk7Ci0gIH0gZWxzZSB7Ci0gICAgU2VuZFRvTG9nKCk7Ci0gIH0KLX0K
LQotdm9pZCBMb2dNZXNzYWdlOjpXcml0ZVRvU3RyaW5nQW5kTG9nKCkgRVhDTFVTSVZFX0xPQ0tT
X1JFUVVJUkVEKGxvZ19tdXRleCkgewotICBpZiAoZGF0YV8tPm1lc3NhZ2VfICE9IE5VTEwpIHsK
LSAgICBSQVdfRENIRUNLKGRhdGFfLT5udW1fY2hhcnNfdG9fbG9nXyA+IDAgJiYKLSAgICAgICAg
ICAgICAgIGRhdGFfLT5tZXNzYWdlX3RleHRfW2RhdGFfLT5udW1fY2hhcnNfdG9fbG9nXy0xXSA9
PSAnXG4nLCAiIik7Ci0gICAgLy8gT21pdCBwcmVmaXggb2YgbWVzc2FnZSBhbmQgdHJhaWxpbmcg
bmV3bGluZSB3aGVuIHdyaXRpbmcgdG8gbWVzc2FnZV8uCi0gICAgY29uc3QgY2hhciAqc3RhcnQg
PSBkYXRhXy0+bWVzc2FnZV90ZXh0XyArIGRhdGFfLT5udW1fcHJlZml4X2NoYXJzXzsKLSAgICBp
bnQgbGVuID0gZGF0YV8tPm51bV9jaGFyc190b19sb2dfIC0gZGF0YV8tPm51bV9wcmVmaXhfY2hh
cnNfIC0gMTsKLSAgICBkYXRhXy0+bWVzc2FnZV8tPmFzc2lnbihzdGFydCwgbGVuKTsKLSAgfQot
ICBTZW5kVG9Mb2coKTsKLX0KLQotLy8gTCA+PSBsb2dfbXV0ZXggKGNhbGxlcnMgbXVzdCBob2xk
IHRoZSBsb2dfbXV0ZXgpLgotdm9pZCBMb2dNZXNzYWdlOjpTZW5kVG9TeXNsb2dBbmRMb2coKSB7
Ci0jaWZkZWYgSEFWRV9TWVNMT0dfSAotICAvLyBCZWZvcmUgYW55IGNhbGxzIHRvIHN5c2xvZygp
LCBtYWtlIGEgc2luZ2xlIGNhbGwgdG8gb3BlbmxvZygpCi0gIHN0YXRpYyBib29sIG9wZW5sb2df
YWxyZWFkeV9jYWxsZWQgPSBmYWxzZTsKLSAgaWYgKCFvcGVubG9nX2FscmVhZHlfY2FsbGVkKSB7
Ci0gICAgb3BlbmxvZyhnbG9nX2ludGVybmFsX25hbWVzcGFjZV86OlByb2dyYW1JbnZvY2F0aW9u
U2hvcnROYW1lKCksCi0gICAgICAgICAgICBMT0dfQ09OUyB8IExPR19OREVMQVkgfCBMT0dfUElE
LAotICAgICAgICAgICAgTE9HX1VTRVIpOwotICAgIG9wZW5sb2dfYWxyZWFkeV9jYWxsZWQgPSB0
cnVlOwotICB9Ci0KLSAgLy8gVGhpcyBhcnJheSBtYXBzIEdvb2dsZSBzZXZlcml0eSBsZXZlbHMg
dG8gc3lzbG9nIGxldmVscwotICBjb25zdCBpbnQgU0VWRVJJVFlfVE9fTEVWRUxbXSA9IHsgTE9H
X0lORk8sIExPR19XQVJOSU5HLCBMT0dfRVJSLCBMT0dfRU1FUkcgfTsKLSAgc3lzbG9nKExPR19V
U0VSIHwgU0VWRVJJVFlfVE9fTEVWRUxbc3RhdGljX2Nhc3Q8aW50PihkYXRhXy0+c2V2ZXJpdHlf
KV0sICIlLipzIiwKLSAgICAgICAgIGludChkYXRhXy0+bnVtX2NoYXJzX3RvX3N5c2xvZ18pLAot
ICAgICAgICAgZGF0YV8tPm1lc3NhZ2VfdGV4dF8gKyBkYXRhXy0+bnVtX3ByZWZpeF9jaGFyc18p
OwotICBTZW5kVG9Mb2coKTsKLSNlbHNlCi0gIExPRyhFUlJPUikgPDwgIk5vIHN5c2xvZyBzdXBw
b3J0OiBtZXNzYWdlPSIgPDwgZGF0YV8tPm1lc3NhZ2VfdGV4dF87Ci0jZW5kaWYKLX0KLQotYmFz
ZTo6TG9nZ2VyKiBiYXNlOjpHZXRMb2dnZXIoTG9nU2V2ZXJpdHkgc2V2ZXJpdHkpIHsKLSAgTXV0
ZXhMb2NrIGwoJmxvZ19tdXRleCk7Ci0gIHJldHVybiBMb2dEZXN0aW5hdGlvbjo6bG9nX2Rlc3Rp
bmF0aW9uKHNldmVyaXR5KS0+bG9nZ2VyXzsKLX0KLQotdm9pZCBiYXNlOjpTZXRMb2dnZXIoTG9n
U2V2ZXJpdHkgc2V2ZXJpdHksIGJhc2U6OkxvZ2dlciogbG9nZ2VyKSB7Ci0gIE11dGV4TG9jayBs
KCZsb2dfbXV0ZXgpOwotICBMb2dEZXN0aW5hdGlvbjo6bG9nX2Rlc3RpbmF0aW9uKHNldmVyaXR5
KS0+bG9nZ2VyXyA9IGxvZ2dlcjsKLX0KLQotLy8gTCA8IGxvZ19tdXRleC4gIEFjcXVpcmVzIGFu
ZCByZWxlYXNlcyBtdXRleF8uCi1pbnQ2NCBMb2dNZXNzYWdlOjpudW1fbWVzc2FnZXMoaW50IHNl
dmVyaXR5KSB7Ci0gIE11dGV4TG9jayBsKCZsb2dfbXV0ZXgpOwotICByZXR1cm4gbnVtX21lc3Nh
Z2VzX1tzZXZlcml0eV07Ci19Ci0KLS8vIE91dHB1dCB0aGUgQ09VTlRFUiB2YWx1ZS4gVGhpcyBp
cyBvbmx5IHZhbGlkIGlmIG9zdHJlYW0gaXMgYQotLy8gTG9nU3RyZWFtLgotb3N0cmVhbSYgb3Bl
cmF0b3I8PChvc3RyZWFtICZvcywgY29uc3QgUFJJVkFURV9Db3VudGVyJikgewotI2lmZGVmIERJ
U0FCTEVfUlRUSQotICBMb2dNZXNzYWdlOjpMb2dTdHJlYW0gKmxvZyA9IHN0YXRpY19jYXN0PExv
Z01lc3NhZ2U6OkxvZ1N0cmVhbSo+KCZvcyk7Ci0jZWxzZQotICBMb2dNZXNzYWdlOjpMb2dTdHJl
YW0gKmxvZyA9IGR5bmFtaWNfY2FzdDxMb2dNZXNzYWdlOjpMb2dTdHJlYW0qPigmb3MpOwotI2Vu
ZGlmCi0gIENIRUNLKGxvZyAmJiBsb2cgPT0gbG9nLT5zZWxmKCkpCi0gICAgICA8PCAiWW91IG11
c3Qgbm90IHVzZSBDT1VOVEVSIHdpdGggbm9uLWdsb2cgb3N0cmVhbSI7Ci0gIG9zIDw8IGxvZy0+
Y3RyKCk7Ci0gIHJldHVybiBvczsKLX0KLQotRXJybm9Mb2dNZXNzYWdlOjpFcnJub0xvZ01lc3Nh
Z2UoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBMb2dTZXZlcml0eSBzZXZlcml0eSwgaW50IGN0ciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKExvZ01lc3NhZ2U6OipzZW5kX21ldGhvZCkoKSkKLSAgICA6
IExvZ01lc3NhZ2UoZmlsZSwgbGluZSwgc2V2ZXJpdHksIGN0ciwgc2VuZF9tZXRob2QpIHsKLX0K
LQotRXJybm9Mb2dNZXNzYWdlOjp+RXJybm9Mb2dNZXNzYWdlKCkgewotICAvLyBEb24ndCBhY2Nl
c3MgZXJybm8gZGlyZWN0bHkgYmVjYXVzZSBpdCBtYXkgaGF2ZSBiZWVuIGFsdGVyZWQKLSAgLy8g
d2hpbGUgc3RyZWFtaW5nIHRoZSBtZXNzYWdlLgotICBzdHJlYW0oKSA8PCAiOiAiIDw8IFN0ckVy
cm9yKHByZXNlcnZlZF9lcnJubygpKSA8PCAiIFsiCi0gICAgICAgICAgIDw8IHByZXNlcnZlZF9l
cnJubygpIDw8ICJdIjsKLX0KLQotdm9pZCBGbHVzaExvZ0ZpbGVzKExvZ1NldmVyaXR5IG1pbl9z
ZXZlcml0eSkgewotICBMb2dEZXN0aW5hdGlvbjo6Rmx1c2hMb2dGaWxlcyhtaW5fc2V2ZXJpdHkp
OwotfQotCi12b2lkIEZsdXNoTG9nRmlsZXNVbnNhZmUoTG9nU2V2ZXJpdHkgbWluX3NldmVyaXR5
KSB7Ci0gIExvZ0Rlc3RpbmF0aW9uOjpGbHVzaExvZ0ZpbGVzVW5zYWZlKG1pbl9zZXZlcml0eSk7
Ci19Ci0KLXZvaWQgU2V0TG9nRGVzdGluYXRpb24oTG9nU2V2ZXJpdHkgc2V2ZXJpdHksIGNvbnN0
IGNoYXIqIGJhc2VfZmlsZW5hbWUpIHsKLSAgTG9nRGVzdGluYXRpb246OlNldExvZ0Rlc3RpbmF0
aW9uKHNldmVyaXR5LCBiYXNlX2ZpbGVuYW1lKTsKLX0KLQotdm9pZCBTZXRMb2dTeW1saW5rKExv
Z1NldmVyaXR5IHNldmVyaXR5LCBjb25zdCBjaGFyKiBzeW1saW5rX2Jhc2VuYW1lKSB7Ci0gIExv
Z0Rlc3RpbmF0aW9uOjpTZXRMb2dTeW1saW5rKHNldmVyaXR5LCBzeW1saW5rX2Jhc2VuYW1lKTsK
LX0KLQotTG9nU2luazo6fkxvZ1NpbmsoKSB7Ci19Ci0KLXZvaWQgTG9nU2luazo6V2FpdFRpbGxT
ZW50KCkgewotICAvLyBub29wIGRlZmF1bHQKLX0KLQotc3RyaW5nIExvZ1Npbms6OlRvU3RyaW5n
KExvZ1NldmVyaXR5IHNldmVyaXR5LCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgOjp0bSogdG1fdGltZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlLCBzaXplX3QgbWVzc2FnZV9sZW4p
IHsKLSAgb3N0cmluZ3N0cmVhbSBzdHJlYW0oc3RyaW5nKG1lc3NhZ2UsIG1lc3NhZ2VfbGVuKSk7
Ci0gIHN0cmVhbS5maWxsKCcwJyk7Ci0KLSAgLy8gRklYTUUoanJ2Yik6IFVwZGF0aW5nIHRoaXMg
dG8gdXNlIHRoZSBjb3JyZWN0IHZhbHVlIGZvciB1c2VjcwotICAvLyByZXF1aXJlcyBjaGFuZ2lu
ZyB0aGUgc2lnbmF0dXJlIGZvciBib3RoIHRoaXMgbWV0aG9kIGFuZAotICAvLyBMb2dTaW5rOjpz
ZW5kKCkuICBUaGlzIGNoYW5nZSBuZWVkcyB0byBiZSBkb25lIGluIGEgc2VwYXJhdGUgQ0wKLSAg
Ly8gc28gc3ViY2xhc3NlcyBvZiBMb2dTaW5rIGNhbiBiZSB1cGRhdGVkIGF0IHRoZSBzYW1lIHRp
bWUuCi0gIGludCB1c2VjcyA9IDA7Ci0KLSAgc3RyZWFtIDw8IExvZ1NldmVyaXR5TmFtZXNbc2V2
ZXJpdHldWzBdCi0gICAgICAgICA8PCBzZXR3KDIpIDw8IDErdG1fdGltZS0+dG1fbW9uCi0gICAg
ICAgICA8PCBzZXR3KDIpIDw8IHRtX3RpbWUtPnRtX21kYXkKLSAgICAgICAgIDw8ICcgJwotICAg
ICAgICAgPDwgc2V0dygyKSA8PCB0bV90aW1lLT50bV9ob3VyIDw8ICc6JwotICAgICAgICAgPDwg
c2V0dygyKSA8PCB0bV90aW1lLT50bV9taW4gPDwgJzonCi0gICAgICAgICA8PCBzZXR3KDIpIDw8
IHRtX3RpbWUtPnRtX3NlYyA8PCAnLicKLSAgICAgICAgIDw8IHNldHcoNikgPDwgdXNlY3MKLSAg
ICAgICAgIDw8ICcgJwotICAgICAgICAgPDwgc2V0ZmlsbCgnICcpIDw8IHNldHcoNSkgPDwgR2V0
VElEKCkgPDwgc2V0ZmlsbCgnMCcpCi0gICAgICAgICA8PCAnICcKLSAgICAgICAgIDw8IGZpbGUg
PDwgJzonIDw8IGxpbmUgPDwgIl0gIjsKLQotICBzdHJlYW0gPDwgc3RyaW5nKG1lc3NhZ2UsIG1l
c3NhZ2VfbGVuKTsKLSAgcmV0dXJuIHN0cmVhbS5zdHIoKTsKLX0KLQotdm9pZCBBZGRMb2dTaW5r
KExvZ1NpbmsgKmRlc3RpbmF0aW9uKSB7Ci0gIExvZ0Rlc3RpbmF0aW9uOjpBZGRMb2dTaW5rKGRl
c3RpbmF0aW9uKTsKLX0KLQotdm9pZCBSZW1vdmVMb2dTaW5rKExvZ1NpbmsgKmRlc3RpbmF0aW9u
KSB7Ci0gIExvZ0Rlc3RpbmF0aW9uOjpSZW1vdmVMb2dTaW5rKGRlc3RpbmF0aW9uKTsKLX0KLQot
dm9pZCBTZXRMb2dGaWxlbmFtZUV4dGVuc2lvbihjb25zdCBjaGFyKiBleHQpIHsKLSAgTG9nRGVz
dGluYXRpb246OlNldExvZ0ZpbGVuYW1lRXh0ZW5zaW9uKGV4dCk7Ci19Ci0KLXZvaWQgU2V0U3Rk
ZXJyTG9nZ2luZyhMb2dTZXZlcml0eSBtaW5fc2V2ZXJpdHkpIHsKLSAgTG9nRGVzdGluYXRpb246
OlNldFN0ZGVyckxvZ2dpbmcobWluX3NldmVyaXR5KTsKLX0KLQotdm9pZCBMb2dUb1N0ZGVycigp
IHsKLSAgTG9nRGVzdGluYXRpb246OkxvZ1RvU3RkZXJyKCk7Ci19Ci0KLW5hbWVzcGFjZSBiYXNl
IHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLWJvb2wgR2V0RXhpdE9uREZhdGFsKCkgewotICBN
dXRleExvY2sgbCgmbG9nX211dGV4KTsKLSAgcmV0dXJuIGV4aXRfb25fZGZhdGFsOwotfQotCi0v
LyBEZXRlcm1pbmVzIHdoZXRoZXIgd2UgZXhpdCB0aGUgcHJvZ3JhbSBmb3IgYSBMT0coREZBVEFM
KSBtZXNzYWdlIGluCi0vLyBkZWJ1ZyBtb2RlLiAgSXQgZG9lcyB0aGlzIGJ5IHNraXBwaW5nIHRo
ZSBjYWxsIHRvIEZhaWwvRmFpbFF1aWV0bHkuCi0vLyBUaGlzIGlzIGludGVuZGVkIGZvciB0ZXN0
aW5nIG9ubHkuCi0vLwotLy8gVGhpcyBjYW4gaGF2ZSBzb21lIGVmZmVjdHMgb24gTE9HKEZBVEFM
KSBhcyB3ZWxsLiAgRmFpbHVyZSBtZXNzYWdlcwotLy8gYXJlIGFsd2F5cyBhbGxvY2F0ZWQgKHJh
dGhlciB0aGFuIHNoYXJpbmcgYSBidWZmZXIpLCB0aGUgY3Jhc2gKLS8vIHJlYXNvbiBpcyBub3Qg
cmVjb3JkZWQsIHRoZSAiZ3dxIiBzdGF0dXMgbWVzc2FnZSBpcyBub3QgdXBkYXRlZCwKLS8vIGFu
ZCB0aGUgc3RhY2sgdHJhY2UgaXMgbm90IHJlY29yZGVkLiAgVGhlIExPRyhGQVRBTCkgKndpbGwq
IHN0aWxsCi0vLyBleGl0IHRoZSBwcm9ncmFtLiAgU2luY2UgdGhpcyBmdW5jdGlvbiBpcyB1c2Vk
IG9ubHkgaW4gdGVzdGluZywKLS8vIHRoZXNlIGRpZmZlcmVuY2VzIGFyZSBhY2NlcHRhYmxlLgot
dm9pZCBTZXRFeGl0T25ERmF0YWwoYm9vbCB2YWx1ZSkgewotICBNdXRleExvY2sgbCgmbG9nX211
dGV4KTsKLSAgZXhpdF9vbl9kZmF0YWwgPSB2YWx1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGlu
dGVybmFsCi19ICAvLyBuYW1lc3BhY2UgYmFzZQotCi1zdGF0aWMgdm9pZCBHZXRUZW1wRGlyZWN0
b3JpZXModmVjdG9yPHN0cmluZz4qIGxpc3QpIHsKLSAgbGlzdC0+Y2xlYXIoKTsKLSNpZmRlZiBP
U19XSU5ET1dTCi0gIC8vIE9uIHdpbmRvd3Mgd2UnbGwgdHJ5IHRvIGZpbmQgYSBkaXJlY3Rvcnkg
aW4gdGhpcyBvcmRlcjoKLSAgLy8gICBDOi9Eb2N1bWVudHMgJiBTZXR0aW5ncy93aG9tZXZlci9U
RU1QIChvciB3aGF0ZXZlciBHZXRUZW1wUGF0aCgpIGlzKQotICAvLyAgIEM6L1RNUC8KLSAgLy8g
ICBDOi9URU1QLwotICAvLyAgIEM6L1dJTkRPV1MvIG9yIEM6L1dJTk5ULwotICAvLyAgIC4KLSAg
Y2hhciB0bXBbTUFYX1BBVEhdOwotICBpZiAoR2V0VGVtcFBhdGhBKE1BWF9QQVRILCB0bXApKQot
ICAgIGxpc3QtPnB1c2hfYmFjayh0bXApOwotICBsaXN0LT5wdXNoX2JhY2soIkM6XFx0bXBcXCIp
OwotICBsaXN0LT5wdXNoX2JhY2soIkM6XFx0ZW1wXFwiKTsKLSNlbHNlCi0gIC8vIERpcmVjdG9y
aWVzLCBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLiBJZiB3ZSBmaW5kIGEgZGlyIHRoYXQKLSAgLy8g
ZXhpc3RzLCB3ZSBzdG9wIGFkZGluZyBvdGhlciBsZXNzLXByZWZlcnJlZCBkaXJzCi0gIGNvbnN0
IGNoYXIgKiBjYW5kaWRhdGVzW10gPSB7Ci0gICAgLy8gTm9uLW51bGwgb25seSBkdXJpbmcgdW5p
dHRlc3QvcmVndGVzdAotICAgIGdldGVudigiVEVTVF9UTVBESVIiKSwKLQotICAgIC8vIEV4cGxp
Y2l0bHktc3VwcGxpZWQgdGVtcCBkaXJzCi0gICAgZ2V0ZW52KCJUTVBESVIiKSwgZ2V0ZW52KCJU
TVAiKSwKLQotICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzCi0gICAgIi90bXAiLAotICB9OwotCi0g
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQVJSQVlTSVpFKGNhbmRpZGF0ZXMpOyBpKyspIHsKLSAg
ICBjb25zdCBjaGFyICpkID0gY2FuZGlkYXRlc1tpXTsKLSAgICBpZiAoIWQpIGNvbnRpbnVlOyAg
Ly8gRW1wdHkgZW52IHZhcgotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHN1cnByaXNlIGFu
eW9uZSB3aG8ncyBleHBlY3RpbmcgYSAnLycKLSAgICBzdHJpbmcgZHN0ciA9IGQ7Ci0gICAgaWYg
KGRzdHJbZHN0ci5zaXplKCkgLSAxXSAhPSAnLycpIHsKLSAgICAgIGRzdHIgKz0gIi8iOwotICAg
IH0KLSAgICBsaXN0LT5wdXNoX2JhY2soZHN0cik7Ci0KLSAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVm
OwotICAgIGlmICghc3RhdChkLCAmc3RhdGJ1ZikgJiYgU19JU0RJUihzdGF0YnVmLnN0X21vZGUp
KSB7Ci0gICAgICAvLyBXZSBmb3VuZCBhIGRpciB0aGF0IGV4aXN0cyAtIHdlJ3JlIGRvbmUuCi0g
ICAgICByZXR1cm47Ci0gICAgfQotICB9Ci0KLSNlbmRpZgotfQotCi1zdGF0aWMgdmVjdG9yPHN0
cmluZz4qIGxvZ2dpbmdfZGlyZWN0b3JpZXNfbGlzdDsKLQotY29uc3QgdmVjdG9yPHN0cmluZz4m
IEdldExvZ2dpbmdEaXJlY3RvcmllcygpIHsKLSAgLy8gTm90IHN0cmljdGx5IHRocmVhZC1zYWZl
IGJ1dCB3ZSdyZSBjYWxsZWQgZWFybHkgaW4gSW5pdEdvb2dsZSgpLgotICBpZiAobG9nZ2luZ19k
aXJlY3Rvcmllc19saXN0ID09IE5VTEwpIHsKLSAgICBsb2dnaW5nX2RpcmVjdG9yaWVzX2xpc3Qg
PSBuZXcgdmVjdG9yPHN0cmluZz47Ci0KLSAgICBpZiAoICFGTEFHU19sb2dfZGlyLmVtcHR5KCkg
KSB7Ci0gICAgICAvLyBBIGRpciB3YXMgc3BlY2lmaWVkLCB3ZSBzaG91bGQgdXNlIGl0Ci0gICAg
ICBsb2dnaW5nX2RpcmVjdG9yaWVzX2xpc3QtPnB1c2hfYmFjayhGTEFHU19sb2dfZGlyLmNfc3Ry
KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHZXRUZW1wRGlyZWN0b3JpZXMobG9nZ2luZ19kaXJl
Y3Rvcmllc19saXN0KTsKLSNpZmRlZiBPU19XSU5ET1dTCi0gICAgICBjaGFyIHRtcFtNQVhfUEFU
SF07Ci0gICAgICBpZiAoR2V0V2luZG93c0RpcmVjdG9yeUEodG1wLCBNQVhfUEFUSCkpCi0gICAg
ICAgIGxvZ2dpbmdfZGlyZWN0b3JpZXNfbGlzdC0+cHVzaF9iYWNrKHRtcCk7Ci0gICAgICBsb2dn
aW5nX2RpcmVjdG9yaWVzX2xpc3QtPnB1c2hfYmFjaygiLlxcIik7Ci0jZWxzZQotICAgICAgbG9n
Z2luZ19kaXJlY3Rvcmllc19saXN0LT5wdXNoX2JhY2soIi4vIik7Ci0jZW5kaWYKLSAgICB9Ci0g
IH0KLSAgcmV0dXJuICpsb2dnaW5nX2RpcmVjdG9yaWVzX2xpc3Q7Ci19Ci0KLXZvaWQgVGVzdE9u
bHlfQ2xlYXJMb2dnaW5nRGlyZWN0b3JpZXNMaXN0KCkgewotICBmcHJpbnRmKHN0ZGVyciwgIlRl
c3RPbmx5X0NsZWFyTG9nZ2luZ0RpcmVjdG9yaWVzTGlzdCBzaG91bGQgb25seSBiZSAiCi0gICAg
ICAgICAgImNhbGxlZCBmcm9tIHRlc3QgY29kZS5cbiIpOwotICBkZWxldGUgbG9nZ2luZ19kaXJl
Y3Rvcmllc19saXN0OwotICBsb2dnaW5nX2RpcmVjdG9yaWVzX2xpc3QgPSBOVUxMOwotfQotCi12
b2lkIEdldEV4aXN0aW5nVGVtcERpcmVjdG9yaWVzKHZlY3RvcjxzdHJpbmc+KiBsaXN0KSB7Ci0g
IEdldFRlbXBEaXJlY3RvcmllcyhsaXN0KTsKLSAgdmVjdG9yPHN0cmluZz46Oml0ZXJhdG9yIGlf
ZGlyID0gbGlzdC0+YmVnaW4oKTsKLSAgd2hpbGUoIGlfZGlyICE9IGxpc3QtPmVuZCgpICkgewot
ICAgIC8vIHplcm8gYXJnIHRvIGFjY2VzcyBtZWFucyB0ZXN0IGZvciBleGlzdGVuY2U7IG5vIGNv
bnN0YW50Ci0gICAgLy8gZGVmaW5lZCBvbiB3aW5kb3dzCi0gICAgaWYgKCBhY2Nlc3MoaV9kaXIt
PmNfc3RyKCksIDApICkgewotICAgICAgaV9kaXIgPSBsaXN0LT5lcmFzZShpX2Rpcik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICsraV9kaXI7Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgVHJ1bmNhdGVM
b2dGaWxlKGNvbnN0IGNoYXIgKnBhdGgsIGludDY0IGxpbWl0LCBpbnQ2NCBrZWVwKSB7Ci0jaWZk
ZWYgSEFWRV9VTklTVERfSAotICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOwotICBjb25zdCBpbnQga0Nv
cHlCbG9ja1NpemUgPSA4IDw8IDEwOwotICBjaGFyIGNvcHlidWZba0NvcHlCbG9ja1NpemVdOwot
ICBpbnQ2NCByZWFkX29mZnNldCwgd3JpdGVfb2Zmc2V0OwotICAvLyBEb24ndCBmb2xsb3cgc3lt
bGlua3MgdW5sZXNzIHRoZXkncmUgb3VyIG93biBmZCBzeW1saW5rcyBpbiAvcHJvYwotICBpbnQg
ZmxhZ3MgPSBPX1JEV1I7Ci0gIC8vIFRPRE8oaGFtYWppKTogU3VwcG9ydCBvdGhlciBlbnZpcm9u
bWVudHMuCi0jaWZkZWYgT1NfTElOVVgKLSAgY29uc3QgY2hhciAqcHJvY2ZkX3ByZWZpeCA9ICIv
cHJvYy9zZWxmL2ZkLyI7Ci0gIGlmIChzdHJuY21wKHByb2NmZF9wcmVmaXgsIHBhdGgsIHN0cmxl
bihwcm9jZmRfcHJlZml4KSkpIGZsYWdzIHw9IE9fTk9GT0xMT1c7Ci0jZW5kaWYKLQotICBpbnQg
ZmQgPSBvcGVuKHBhdGgsIGZsYWdzKTsKLSAgaWYgKGZkID09IC0xKSB7Ci0gICAgaWYgKGVycm5v
ID09IEVGQklHKSB7Ci0gICAgICAvLyBUaGUgbG9nIGZpbGUgaW4gcXVlc3Rpb24gaGFzIGdvdCB0
b28gYmlnIGZvciB1cyB0byBvcGVuLiBUaGUKLSAgICAgIC8vIHJlYWwgZml4IGZvciB0aGlzIHdv
dWxkIGJlIHRvIGNvbXBpbGUgbG9nZ2luZy5jYyAob3IgcHJvYmFibHkKLSAgICAgIC8vIGFsbCBv
ZiBiYXNlLy4uLikgd2l0aCAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IGJ1dCB0aGF0J3MKLSAgICAg
IC8vIHJhdGhlciBzY2FyeS4KLSAgICAgIC8vIEluc3RlYWQganVzdCB0cnVuY2F0ZSB0aGUgZmls
ZSB0byBzb21ldGhpbmcgd2UgY2FuIG1hbmFnZQotICAgICAgaWYgKHRydW5jYXRlKHBhdGgsIDAp
ID09IC0xKSB7Ci0gICAgICAgIFBMT0coRVJST1IpIDw8ICJVbmFibGUgdG8gdHJ1bmNhdGUgIiA8
PCBwYXRoOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgTE9HKEVSUk9SKSA8PCAiVHJ1bmNhdGVk
ICIgPDwgcGF0aCA8PCAiIGR1ZSB0byBFRkJJRyBlcnJvciI7Ci0gICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgIFBMT0coRVJST1IpIDw8ICJVbmFibGUgdG8gb3BlbiAiIDw8IHBhdGg7Ci0gICAg
fQotICAgIHJldHVybjsKLSAgfQotCi0gIGlmIChmc3RhdChmZCwgJnN0YXRidWYpID09IC0xKSB7
Ci0gICAgUExPRyhFUlJPUikgPDwgIlVuYWJsZSB0byBmc3RhdCgpIjsKLSAgICBnb3RvIG91dF9j
bG9zZV9mZDsKLSAgfQotCi0gIC8vIFNlZSBpZiB0aGUgcGF0aCByZWZlcnMgdG8gYSByZWd1bGFy
IGZpbGUgYmlnZ2VyIHRoYW4gdGhlCi0gIC8vIHNwZWNpZmllZCBsaW1pdAotICBpZiAoIVNfSVNS
RUcoc3RhdGJ1Zi5zdF9tb2RlKSkgZ290byBvdXRfY2xvc2VfZmQ7Ci0gIGlmIChzdGF0YnVmLnN0
X3NpemUgPD0gbGltaXQpICBnb3RvIG91dF9jbG9zZV9mZDsKLSAgaWYgKHN0YXRidWYuc3Rfc2l6
ZSA8PSBrZWVwKSBnb3RvIG91dF9jbG9zZV9mZDsKLQotICAvLyBUaGlzIGxvZyBmaWxlIGlzIHRv
byBsYXJnZSAtIHdlIG5lZWQgdG8gdHJ1bmNhdGUgaXQKLSAgTE9HKElORk8pIDw8ICJUcnVuY2F0
aW5nICIgPDwgcGF0aCA8PCAiIHRvICIgPDwga2VlcCA8PCAiIGJ5dGVzIjsKLQotICAvLyBDb3B5
IHRoZSBsYXN0ICJrZWVwIiBieXRlcyBvZiB0aGUgZmlsZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSBmaWxlCi0gIHJlYWRfb2Zmc2V0ID0gc3RhdGJ1Zi5zdF9zaXplIC0ga2VlcDsKLSAgd3JpdGVf
b2Zmc2V0ID0gMDsKLSAgaW50IGJ5dGVzaW4sIGJ5dGVzb3V0OwotICB3aGlsZSAoKGJ5dGVzaW4g
PSBwcmVhZChmZCwgY29weWJ1Ziwgc2l6ZW9mKGNvcHlidWYpLCByZWFkX29mZnNldCkpID4gMCkg
ewotICAgIGJ5dGVzb3V0ID0gcHdyaXRlKGZkLCBjb3B5YnVmLCBieXRlc2luLCB3cml0ZV9vZmZz
ZXQpOwotICAgIGlmIChieXRlc291dCA9PSAtMSkgewotICAgICAgUExPRyhFUlJPUikgPDwgIlVu
YWJsZSB0byB3cml0ZSB0byAiIDw8IHBhdGg7Ci0gICAgICBicmVhazsKLSAgICB9IGVsc2UgaWYg
KGJ5dGVzb3V0ICE9IGJ5dGVzaW4pIHsKLSAgICAgIExPRyhFUlJPUikgPDwgIkV4cGVjdGVkIHRv
IHdyaXRlICIgPDwgYnl0ZXNpbiA8PCAiLCB3cm90ZSAiIDw8IGJ5dGVzb3V0OwotICAgIH0KLSAg
ICByZWFkX29mZnNldCArPSBieXRlc2luOwotICAgIHdyaXRlX29mZnNldCArPSBieXRlc291dDsK
LSAgfQotICBpZiAoYnl0ZXNpbiA9PSAtMSkgUExPRyhFUlJPUikgPDwgIlVuYWJsZSB0byByZWFk
IGZyb20gIiA8PCBwYXRoOwotCi0gIC8vIFRydW5jYXRlIHRoZSByZW1haW5kZXIgb2YgdGhlIGZp
bGUuIElmIHNvbWVvbmUgZWxzZSB3cml0ZXMgdG8gdGhlCi0gIC8vIGVuZCBvZiB0aGUgZmlsZSBh
ZnRlciBvdXIgbGFzdCByZWFkKCkgYWJvdmUsIHdlIGxvc2UgdGhlaXIgbGF0ZXN0Ci0gIC8vIGRh
dGEuIFRvbyBiYWQgLi4uCi0gIGlmIChmdHJ1bmNhdGUoZmQsIHdyaXRlX29mZnNldCkgPT0gLTEp
IHsKLSAgICBQTE9HKEVSUk9SKSA8PCAiVW5hYmxlIHRvIHRydW5jYXRlICIgPDwgcGF0aDsKLSAg
fQotCi0gb3V0X2Nsb3NlX2ZkOgotICBjbG9zZShmZCk7Ci0jZWxzZQotICBMT0coRVJST1IpIDw8
ICJObyBsb2cgdHJ1bmNhdGlvbiBzdXBwb3J0LiI7Ci0jZW5kaWYKLX0KLQotdm9pZCBUcnVuY2F0
ZVN0ZG91dFN0ZGVycigpIHsKLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0gIGludDY0IGxpbWl0ID0g
TWF4TG9nU2l6ZSgpIDw8IDIwOwotICBpbnQ2NCBrZWVwID0gMSA8PCAyMDsKLSAgVHJ1bmNhdGVM
b2dGaWxlKCIvcHJvYy9zZWxmL2ZkLzEiLCBsaW1pdCwga2VlcCk7Ci0gIFRydW5jYXRlTG9nRmls
ZSgiL3Byb2Mvc2VsZi9mZC8yIiwgbGltaXQsIGtlZXApOwotI2Vsc2UKLSAgTE9HKEVSUk9SKSA8
PCAiTm8gbG9nIHRydW5jYXRpb24gc3VwcG9ydC4iOwotI2VuZGlmCi19Ci0KLQotLy8gSGVscGVy
IGZ1bmN0aW9ucyBmb3Igc3RyaW5nIGNvbXBhcmlzb25zLgotI2RlZmluZSBERUZJTkVfQ0hFQ0tf
U1RST1BfSU1QTChuYW1lLCBmdW5jLCBleHBlY3RlZCkgICAgICAgICAgICAgICAgICAgXAotICBz
dHJpbmcqIENoZWNrIyNmdW5jIyNleHBlY3RlZCMjSW1wbChjb25zdCBjaGFyKiBzMSwgY29uc3Qg
Y2hhciogczIsICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBuYW1lcykgeyAgICAgICAgICAgICAgXAotICAgIGJvb2wgZXF1YWwgPSBzMSA9PSBz
MiB8fCAoczEgJiYgczIgJiYgIWZ1bmMoczEsIHMyKSk7ICAgICAgICAgICAgICAgXAotICAgIGlm
IChlcXVhbCA9PSBleHBlY3RlZCkgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgb3N0cmluZ3N0cmVhbSBzczsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYg
KCFzMSkgczEgPSAiIjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgaWYgKCFzMikgczIgPSAiIjsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgc3MgPDwgI25hbWUgIiBmYWlsZWQ6ICIg
PDwgbmFtZXMgPDwgIiAoIiA8PCBzMSA8PCAiIHZzLiAiIDw8IHMyIDw8ICIpIjsgXAotICAgICAg
cmV0dXJuIG5ldyBzdHJpbmcoc3Muc3RyKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci1ERUZJTkVfQ0hFQ0tfU1RST1BfSU1Q
TChDSEVDS19TVFJFUSwgc3RyY21wLCB0cnVlKQotREVGSU5FX0NIRUNLX1NUUk9QX0lNUEwoQ0hF
Q0tfU1RSTkUsIHN0cmNtcCwgZmFsc2UpCi1ERUZJTkVfQ0hFQ0tfU1RST1BfSU1QTChDSEVDS19T
VFJDQVNFRVEsIHN0cmNhc2VjbXAsIHRydWUpCi1ERUZJTkVfQ0hFQ0tfU1RST1BfSU1QTChDSEVD
S19TVFJDQVNFTkUsIHN0cmNhc2VjbXAsIGZhbHNlKQotI3VuZGVmIERFRklORV9DSEVDS19TVFJP
UF9JTVBMCi0KLWludCBwb3NpeF9zdHJlcnJvcl9yKGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90
IGxlbikgewotICAvLyBTYW5pdHkgY2hlY2sgaW5wdXQgcGFyYW1ldGVycwotICBpZiAoYnVmID09
IE5VTEwgfHwgbGVuIDw9IDApIHsKLSAgICBlcnJubyA9IEVJTlZBTDsKLSAgICByZXR1cm4gLTE7
Ci0gIH0KLQotICAvLyBSZXNldCBidWYgYW5kIGVycm5vLCBhbmQgdHJ5IGNhbGxpbmcgd2hhdGV2
ZXIgdmVyc2lvbiBvZiBzdHJlcnJvcl9yKCkKLSAgLy8gaXMgaW1wbGVtZW50ZWQgYnkgZ2xpYmMK
LSAgYnVmWzBdID0gJ1wwMDAnOwotICBpbnQgb2xkX2Vycm5vID0gZXJybm87Ci0gIGVycm5vID0g
MDsKLSAgY2hhciAqcmMgPSByZWludGVycHJldF9jYXN0PGNoYXIgKj4oc3RyZXJyb3JfcihlcnIs
IGJ1ZiwgbGVuKSk7Ci0KLSAgLy8gQm90aCB2ZXJzaW9ucyBzZXQgZXJybm8gb24gZmFpbHVyZQot
ICBpZiAoZXJybm8pIHsKLSAgICAvLyBTaG91bGQgYWxyZWFkeSBiZSB0aGVyZSwgYnV0IGJldHRl
ciBzYWZlIHRoYW4gc29ycnkKLSAgICBidWZbMF0gICAgID0gJ1wwMDAnOwotICAgIHJldHVybiAt
MTsKLSAgfQotICBlcnJubyA9IG9sZF9lcnJubzsKLQotICAvLyBQT1NJWCBpcyB2YWd1ZSBhYm91
dCB3aGV0aGVyIHRoZSBzdHJpbmcgd2lsbCBiZSB0ZXJtaW5hdGVkLCBhbHRob3VnaAotICAvLyBp
cyBpbmRpcmVjdGx5IGltcGxpZXMgdGhhdCB0eXBpY2FsbHkgRVJBTkdFIHdpbGwgYmUgcmV0dXJu
ZWQsIGluc3RlYWQKLSAgLy8gb2YgdHJ1bmNhdGluZyB0aGUgc3RyaW5nLiBUaGlzIGlzIGRpZmZl
cmVudCBmcm9tIHRoZSBHTlUgaW1wbGVtZW50YXRpb24uCi0gIC8vIFdlIHBsYXkgaXQgc2FmZSBi
eSBhbHdheXMgdGVybWluYXRpbmcgdGhlIHN0cmluZyBleHBsaWNpdGx5LgotICBidWZbbGVuLTFd
ID0gJ1wwMDAnOwotCi0gIC8vIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkZWQsIHdlIGNhbiB1c2Ug
aXRzIGV4aXQgY29kZSB0byBkZXRlcm1pbmUgdGhlCi0gIC8vIHNlbWFudGljcyBpbXBsZW1lbnRl
ZCBieSBnbGliYwotICBpZiAoIXJjKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0gZWxzZSB7Ci0gICAg
Ly8gR05VIHNlbWFudGljcyBkZXRlY3RlZAotICAgIGlmIChyYyA9PSBidWYpIHsKLSAgICAgIHJl
dHVybiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICBidWZbMF0gPSAnXDAwMCc7Ci0jaWYgZGVmaW5l
ZChPU19NQUNPU1gpIHx8IGRlZmluZWQoT1NfRlJFRUJTRCkgfHwgZGVmaW5lZChPU19PUEVOQlNE
KQotICAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHJjKSA8IHN5c19uZXJyKSB7
Ci0gICAgICAgIC8vIFRoaXMgbWVhbnMgYW4gZXJyb3Igb24gTWFjT1NYIG9yIEZyZWVCU0QuCi0g
ICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0KLSNlbmRpZgotICAgICAgc3RybmNhdChidWYsIHJj
LCBsZW4tMSk7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIH0KLX0KLQotc3RyaW5nIFN0ckVy
cm9yKGludCBlcnIpIHsKLSAgY2hhciBidWZbMTAwXTsKLSAgaW50IHJjID0gcG9zaXhfc3RyZXJy
b3JfcihlcnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICBpZiAoKHJjIDwgMCkgfHwgKGJ1ZlswXSA9
PSAnXDAwMCcpKSB7Ci0gICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIkVycm9yIG51bWJl
ciAlZCIsIGVycik7Ci0gIH0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQotTG9nTWVzc2FnZUZhdGFsOjpM
b2dNZXNzYWdlRmF0YWwoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpIDoKLSAgICBMb2dNZXNz
YWdlKGZpbGUsIGxpbmUsIEdMT0dfRkFUQUwpIHt9Ci0KLUxvZ01lc3NhZ2VGYXRhbDo6TG9nTWVz
c2FnZUZhdGFsKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQ2hlY2tPcFN0cmluZyYgcmVzdWx0KSA6Ci0gICAgTG9nTWVz
c2FnZShmaWxlLCBsaW5lLCByZXN1bHQpIHt9Ci0KLUxvZ01lc3NhZ2VGYXRhbDo6fkxvZ01lc3Nh
Z2VGYXRhbCgpIHsKLSAgICBGbHVzaCgpOwotICAgIExvZ01lc3NhZ2U6OkZhaWwoKTsKLX0KLQot
bmFtZXNwYWNlIGJhc2UgewotCi1DaGVja09wTWVzc2FnZUJ1aWxkZXI6OkNoZWNrT3BNZXNzYWdl
QnVpbGRlcihjb25zdCBjaGFyICpleHBydGV4dCkKLSAgICA6IHN0cmVhbV8obmV3IG9zdHJpbmdz
dHJlYW0pIHsKLSAgKnN0cmVhbV8gPDwgZXhwcnRleHQgPDwgIiAoIjsKLX0KLQotQ2hlY2tPcE1l
c3NhZ2VCdWlsZGVyOjp+Q2hlY2tPcE1lc3NhZ2VCdWlsZGVyKCkgewotICBkZWxldGUgc3RyZWFt
XzsKLX0KLQotb3N0cmVhbSogQ2hlY2tPcE1lc3NhZ2VCdWlsZGVyOjpGb3JWYXIyKCkgewotICAq
c3RyZWFtXyA8PCAiIHZzLiAiOwotICByZXR1cm4gc3RyZWFtXzsKLX0KLQotc3RyaW5nKiBDaGVj
a09wTWVzc2FnZUJ1aWxkZXI6Ok5ld1N0cmluZygpIHsKLSAgKnN0cmVhbV8gPDwgIikiOwotICBy
ZXR1cm4gbmV3IHN0cmluZyhzdHJlYW1fLT5zdHIoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBi
YXNlCi0KLXRlbXBsYXRlIDw+Ci12b2lkIE1ha2VDaGVja09wVmFsdWVTdHJpbmcoc3RkOjpvc3Ry
ZWFtKiBvcywgY29uc3QgY2hhciYgdikgewotICBpZiAodiA+PSAzMiAmJiB2IDw9IDEyNikgewot
ICAgICgqb3MpIDw8ICInIiA8PCB2IDw8ICInIjsKLSAgfSBlbHNlIHsKLSAgICAoKm9zKSA8PCAi
Y2hhciB2YWx1ZSAiIDw8IChzaG9ydCl2OwotICB9Ci19Ci0KLXRlbXBsYXRlIDw+Ci12b2lkIE1h
a2VDaGVja09wVmFsdWVTdHJpbmcoc3RkOjpvc3RyZWFtKiBvcywgY29uc3Qgc2lnbmVkIGNoYXIm
IHYpIHsKLSAgaWYgKHYgPj0gMzIgJiYgdiA8PSAxMjYpIHsKLSAgICAoKm9zKSA8PCAiJyIgPDwg
diA8PCAiJyI7Ci0gIH0gZWxzZSB7Ci0gICAgKCpvcykgPDwgInNpZ25lZCBjaGFyIHZhbHVlICIg
PDwgKHNob3J0KXY7Ci0gIH0KLX0KLQotdGVtcGxhdGUgPD4KLXZvaWQgTWFrZUNoZWNrT3BWYWx1
ZVN0cmluZyhzdGQ6Om9zdHJlYW0qIG9zLCBjb25zdCB1bnNpZ25lZCBjaGFyJiB2KSB7Ci0gIGlm
ICh2ID49IDMyICYmIHYgPD0gMTI2KSB7Ci0gICAgKCpvcykgPDwgIiciIDw8IHYgPDwgIiciOwot
ICB9IGVsc2UgewotICAgICgqb3MpIDw8ICJ1bnNpZ25lZCBjaGFyIHZhbHVlICIgPDwgKHVuc2ln
bmVkIHNob3J0KXY7Ci0gIH0KLX0KLQotdm9pZCBJbml0R29vZ2xlTG9nZ2luZyhjb25zdCBjaGFy
KiBhcmd2MCkgewotICBnbG9nX2ludGVybmFsX25hbWVzcGFjZV86OkluaXRHb29nbGVMb2dnaW5n
VXRpbGl0aWVzKGFyZ3YwKTsKLX0KLQotdm9pZCBTaHV0ZG93bkdvb2dsZUxvZ2dpbmcoKSB7Ci0g
IGdsb2dfaW50ZXJuYWxfbmFtZXNwYWNlXzo6U2h1dGRvd25Hb29nbGVMb2dnaW5nVXRpbGl0aWVz
KCk7Ci0gIExvZ0Rlc3RpbmF0aW9uOjpEZWxldGVMb2dEZXN0aW5hdGlvbnMoKTsKLSAgZGVsZXRl
IGxvZ2dpbmdfZGlyZWN0b3JpZXNfbGlzdDsKLSAgbG9nZ2luZ19kaXJlY3Rvcmllc19saXN0ID0g
TlVMTDsKLX0KLQotX0VORF9HT09HTEVfTkFNRVNQQUNFXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvcmF3X2xvZ2dpbmcuY2MgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9nbG9nL3NyYy9yYXdfbG9nZ2luZy5jYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFhZjY4MzA1MzkxOTk2ZDg4NzA0YTgxOTQ5
ZDE3MTExZGFhOTM4OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9nbG9nL3NyYy9yYXdfbG9n
Z2luZy5jYworKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDYsIEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLy8KLS8vIEF1dGhvcjogTWF4aW0gTGlm
YW50c2V2Ci0vLwotLy8gbG9nZ2luZ191bml0dGVzdC5jYyBjb3ZlcnMgdGhlIGZ1bmN0aW9uYWxp
dHkgaGVyZWluCi0KLSNpbmNsdWRlICJ1dGlsaXRpZXMuaCIKLQotI2luY2x1ZGUgPHN0ZGFyZy5o
PgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpZmRlZiBIQVZFX1VO
SVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgICAgICAgIC8vIGZvciBjbG9zZSgp
IGFuZCB3cml0ZSgpCi0jZW5kaWYKLSNpbmNsdWRlIDxmY250bC5oPiAgICAgICAgICAgICAgICAg
Ly8gZm9yIG9wZW4oKQotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJnbG9nL2xvZ2dpbmcuaCIgICAgICAgICAgLy8gVG8gcGljayB1cCBmbGFnIHNldHRp
bmdzIGV0Yy4KLSNpbmNsdWRlICJnbG9nL3Jhd19sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9j
b21tYW5kbGluZWZsYWdzLmgiCi0KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVu
aXN0ZC5oPgotI2VuZGlmCi0KLSAgLy8gTm90IHNvIHNhZmUsIGJ1dCB3aGF0IGNhbiB5b3UgZG8/
Ci0jIGRlZmluZSBzYWZlX3dyaXRlKGZkLCBzLCBsZW4pICB3cml0ZShmZCwgcywgbGVuKQotCi1f
U1RBUlRfR09PR0xFX05BTUVTUEFDRV8KLQotLy8gRGF0YSBmb3IgUmF3TG9nX18gYmVsb3cuIFdl
IHNpbXBseSBwaWNrIHVwIHRoZSBsYXRlc3QKLS8vIHRpbWUgZGF0YSBjcmVhdGVkIGJ5IGEgbm9y
bWFsIGxvZyBtZXNzYWdlIHRvIGF2b2lkIGNhbGxpbmcKLS8vIGxvY2FsdGltZV9yIHdoaWNoIGNh
biBhbGxvY2F0ZSBtZW1vcnkuCi1zdGF0aWMgc3RydWN0IDo6dG0gbGFzdF90bV90aW1lX2Zvcl9y
YXdfbG9nOwotc3RhdGljIGludCBsYXN0X3VzZWNzX2Zvcl9yYXdfbG9nOwotCi12b2lkIFJhd0xv
Z19fU2V0TGFzdFRpbWUoY29uc3Qgc3RydWN0IDo6dG0mIHQsIGludCB1c2VjcykgewotICBtZW1j
cHkoJmxhc3RfdG1fdGltZV9mb3JfcmF3X2xvZywgJnQsIHNpemVvZihsYXN0X3RtX3RpbWVfZm9y
X3Jhd19sb2cpKTsKLSAgbGFzdF91c2Vjc19mb3JfcmF3X2xvZyA9IHVzZWNzOwotfQotCi0vLyBD
QVZFQVQ6IHZzbnByaW50ZiBjYWxsZWQgZnJvbSAqRG9SYXdMb2cgYmVsb3cgaGFzIHNvbWUgKGV4
b3RpYykgY29kZSBwYXRocwotLy8gdGhhdCBpbnZva2UgbWFsbG9jKCkgYW5kIGdldGVudigpIHRo
YXQgbWlnaHQgYWNxdWlyZSBzb21lIGxvY2tzLgotLy8gSWYgdGhpcyBiZWNvbWVzIGEgcHJvYmxl
bSB3ZSBzaG91bGQgcmVpbXBsZW1lbnQgYSBzdWJzZXQgb2YgdnNucHJpbnRmCi0vLyB0aGF0IGRv
ZXMgbm90IG5lZWQgbG9ja3MgYW5kIG1hbGxvYy4KLQotLy8gSGVscGVyIGZvciBSYXdMb2dfXyBi
ZWxvdy4KLS8vICpEb1Jhd0xvZyB3cml0ZXMgdG8gKmJ1ZiBvZiAqc2l6ZSBhbmQgbW92ZSB0aGVt
IHBhc3QgdGhlIHdyaXR0ZW4gcG9ydGlvbi4KLS8vIEl0IHJldHVybnMgdHJ1ZSBpZmYgdGhlcmUg
d2FzIG5vIG92ZXJmbG93IG9yIGVycm9yLgotc3RhdGljIGJvb2wgRG9SYXdMb2coY2hhcioqIGJ1
ZiwgaW50KiBzaXplLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgewotICB2YV9saXN0IGFwOwot
ICB2YV9zdGFydChhcCwgZm9ybWF0KTsKLSAgaW50IG4gPSB2c25wcmludGYoKmJ1ZiwgKnNpemUs
IGZvcm1hdCwgYXApOwotICB2YV9lbmQoYXApOwotICBpZiAobiA8IDAgfHwgbiA+ICpzaXplKSBy
ZXR1cm4gZmFsc2U7Ci0gICpzaXplIC09IG47Ci0gICpidWYgKz0gbjsKLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLS8vIEhlbHBlciBmb3IgUmF3TG9nX18gYmVsb3cuCi1pbmxpbmUgc3RhdGljIGJvb2wg
VkFEb1Jhd0xvZyhjaGFyKiogYnVmLCBpbnQqIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXApIHsKLSAgaW50IG4gPSB2c25w
cmludGYoKmJ1ZiwgKnNpemUsIGZvcm1hdCwgYXApOwotICBpZiAobiA8IDAgfHwgbiA+ICpzaXpl
KSByZXR1cm4gZmFsc2U7Ci0gICpzaXplIC09IG47Ci0gICpidWYgKz0gbjsKLSAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBjb25zdCBpbnQga0xvZ0J1ZlNpemUgPSAzMDAwOwotc3RhdGljIGJv
b2wgY3Jhc2hlZCA9IGZhbHNlOwotc3RhdGljIENyYXNoUmVhc29uIGNyYXNoX3JlYXNvbjsKLXN0
YXRpYyBjaGFyIGNyYXNoX2J1ZltrTG9nQnVmU2l6ZSArIDFdID0geyAwIH07ICAvLyBXaWxsIGVu
ZCBpbiAnXDAnCi0KLXZvaWQgUmF3TG9nX18oTG9nU2V2ZXJpdHkgc2V2ZXJpdHksIGNvbnN0IGNo
YXIqIGZpbGUsIGludCBsaW5lLAotICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXQsIC4u
LikgewotICBpZiAoIShGTEFHU19sb2d0b3N0ZGVyciB8fCBzZXZlcml0eSA+PSBGTEFHU19zdGRl
cnJ0aHJlc2hvbGQgfHwKLSAgICAgICAgRkxBR1NfYWxzb2xvZ3Rvc3RkZXJyIHx8ICFJc0dvb2ds
ZUxvZ2dpbmdJbml0aWFsaXplZCgpKSkgewotICAgIHJldHVybjsgIC8vIHRoaXMgc3RkZXJyIGxv
ZyBtZXNzYWdlIGlzIHN1cHByZXNzZWQKLSAgfQotICAvLyBjYW4ndCBjYWxsIGxvY2FsdGltZV9y
IGhlcmU6IGl0IGNhbiBhbGxvY2F0ZQotICBzdHJ1Y3QgOjp0bSYgdCA9IGxhc3RfdG1fdGltZV9m
b3JfcmF3X2xvZzsKLSAgY2hhciBidWZmZXJba0xvZ0J1ZlNpemVdOwotICBjaGFyKiBidWYgPSBi
dWZmZXI7Ci0gIGludCBzaXplID0gc2l6ZW9mKGJ1ZmZlcik7Ci0KLSAgLy8gTk9URTogdGhpcyBm
b3JtYXQgc2hvdWxkIG1hdGNoIHRoZSBzcGVjaWZpY2F0aW9uIGluIGJhc2UvbG9nZ2luZy5oCi0g
IERvUmF3TG9nKCZidWYsICZzaXplLCAiJWMlMDJkJTAyZCAlMDJkOiUwMmQ6JTAyZC4lMDZkICU1
dSAlczolZF0gUkFXOiAiLAotICAgICAgICAgICBMb2dTZXZlcml0eU5hbWVzW3NldmVyaXR5XVsw
XSwKLSAgICAgICAgICAgMSArIHQudG1fbW9uLCB0LnRtX21kYXksIHQudG1faG91ciwgdC50bV9t
aW4sIHQudG1fc2VjLAotICAgICAgICAgICBsYXN0X3VzZWNzX2Zvcl9yYXdfbG9nLAotICAgICAg
ICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KEdldFRJRCgpKSwKLSAgICAgICAgICAgY29u
c3RfYmFzZW5hbWUoY29uc3RfY2FzdDxjaGFyICo+KGZpbGUpKSwgbGluZSk7Ci0KLSAgLy8gUmVj
b3JkIHRoZSBwb3NpdGlvbiBhbmQgc2l6ZSBvZiB0aGUgYnVmZmVyIGFmdGVyIHRoZSBwcmVmaXgK
LSAgY29uc3QgY2hhciogbXNnX3N0YXJ0ID0gYnVmOwotICBjb25zdCBpbnQgbXNnX3NpemUgPSBz
aXplOwotCi0gIHZhX2xpc3QgYXA7Ci0gIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOwotICBib29sIG5v
X2Nob3AgPSBWQURvUmF3TG9nKCZidWYsICZzaXplLCBmb3JtYXQsIGFwKTsKLSAgdmFfZW5kKGFw
KTsKLSAgaWYgKG5vX2Nob3ApIHsKLSAgICBEb1Jhd0xvZygmYnVmLCAmc2l6ZSwgIlxuIik7Ci0g
IH0gZWxzZSB7Ci0gICAgRG9SYXdMb2coJmJ1ZiwgJnNpemUsICJSQVdfTE9HIEVSUk9SOiBUaGUg
TWVzc2FnZSB3YXMgdG9vIGxvbmchXG4iKTsKLSAgfQotICAvLyBXZSBtYWtlIGEgcmF3IHN5c2Nh
bGwgdG8gd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHN0ZGVyciBmaWxlIGRlc2NyaXB0b3IsCi0gIC8v
IGF2b2lkaW5nIEZJTEUgYnVmZmVyaW5nICh0byBhdm9pZCBpbnZva2luZyBtYWxsb2MoKSksIGFu
ZCBieXBhc3NpbmcKLSAgLy8gbGliYyAodG8gc2lkZS1zdGVwIGFueSBsaWJjIGludGVyY2VwdGlv
bikuCi0gIC8vIFdlIHdyaXRlIGp1c3Qgb25jZSB0byBhdm9pZCByYWNlcyB3aXRoIG90aGVyIGlu
dm9jYXRpb25zIG9mIFJhd0xvZ19fLgotICBzYWZlX3dyaXRlKFNUREVSUl9GSUxFTk8sIGJ1ZmZl
ciwgc3RybGVuKGJ1ZmZlcikpOwotICBpZiAoc2V2ZXJpdHkgPT0gR0xPR19GQVRBTCkgIHsKLSAg
ICBpZiAoIXN5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoJmNyYXNoZWQsIGZhbHNlLCB0cnVlKSkg
ewotICAgICAgY3Jhc2hfcmVhc29uLmZpbGVuYW1lID0gZmlsZTsKLSAgICAgIGNyYXNoX3JlYXNv
bi5saW5lX251bWJlciA9IGxpbmU7Ci0gICAgICBtZW1jcHkoY3Jhc2hfYnVmLCBtc2dfc3RhcnQs
IG1zZ19zaXplKTsgIC8vIERvbid0IGluY2x1ZGUgcHJlZml4Ci0gICAgICBjcmFzaF9yZWFzb24u
bWVzc2FnZSA9IGNyYXNoX2J1ZjsKLSAgICAgIGNyYXNoX3JlYXNvbi5kZXB0aCA9IDA7Ci0gICAg
ICBTZXRDcmFzaFJlYXNvbigmY3Jhc2hfcmVhc29uKTsKLSAgICB9Ci0gICAgTG9nTWVzc2FnZTo6
RmFpbCgpOyAgLy8gYWJvcnQoKQotICB9Ci19Ci0KLV9FTkRfR09PR0xFX05BTUVTUEFDRV8KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2dsb2cvc3JjL3V0
aWxpdGllcy5jYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2dsb2cvc3Jj
L3V0aWxpdGllcy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJmODM0NThjOTg5
MDU0MzE2ZWI2YzhkZjBjN2ViMTM3ZjUxYTA4YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9n
bG9nL3NyYy91dGlsaXRpZXMuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAotLy8g
Q29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLS8vCi0vLyBBdXRo
b3I6IFNoaW5pY2hpcm8gSGFtYWppCi0KLSNpbmNsdWRlICJ1dGlsaXRpZXMuaCIKLQotI2luY2x1
ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlIDxzaWduYWwuaD4K
LSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgot
I2luY2x1ZGUgPHRpbWUuaD4KLQotI2luY2x1ZGUgImJhc2UvZ29vZ2xlaW5pdC5oIgotCi11c2lu
ZyBzdGQ6OnN0cmluZzsKLQotX1NUQVJUX0dPT0dMRV9OQU1FU1BBQ0VfCi0KLXN0YXRpYyBjb25z
dCBjaGFyKiBnX3Byb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lID0gTlVMTDsKLXN0YXRpYyBw
dGhyZWFkX3QgZ19tYWluX3RocmVhZF9pZDsKLQotX0VORF9HT09HTEVfTkFNRVNQQUNFXwotCi1f
U1RBUlRfR09PR0xFX05BTUVTUEFDRV8KLQotbmFtZXNwYWNlIGdsb2dfaW50ZXJuYWxfbmFtZXNw
YWNlXyB7Ci0KLWNvbnN0IGNoYXIqIFByb2dyYW1JbnZvY2F0aW9uU2hvcnROYW1lKCkgewotICBp
ZiAoZ19wcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZSAhPSBOVUxMKSB7Ci0gICAgcmV0dXJu
IGdfcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWU7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gVE9E
TyhoYW1hamkpOiBVc2UgL3Byb2Mvc2VsZi9jbWRsaW5lIGFuZCBzbz8KLSAgICByZXR1cm4gIlVO
S05PV04iOwotICB9Ci19Ci0KLWJvb2wgSXNHb29nbGVMb2dnaW5nSW5pdGlhbGl6ZWQoKSB7Ci0g
IHJldHVybiBnX3Byb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lICE9IE5VTEw7Ci19Ci0KLWJv
b2wgaXNfZGVmYXVsdF90aHJlYWQoKSB7Ci0gIGlmIChnX3Byb2dyYW1faW52b2NhdGlvbl9zaG9y
dF9uYW1lID09IE5VTEwpIHsKLSAgICAvLyBJbml0R29vZ2xlTG9nZ2luZygpIG5vdCB5ZXQgY2Fs
bGVkLCBzbyB1bmxpa2VseSB0byBiZSBpbiBhIGRpZmZlcmVudAotICAgIC8vIHRocmVhZAotICAg
IHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAgIHJldHVybiBwdGhyZWFkX2VxdWFsKHB0aHJl
YWRfc2VsZigpLCBnX21haW5fdGhyZWFkX2lkKTsKLSAgfQotfQotCi0jaWZkZWYgT1NfV0lORE9X
Uwotc3RydWN0IHRpbWV2YWwgewotICBsb25nIHR2X3NlYywgdHZfdXNlYzsKLX07Ci0KLS8vIEJh
c2VkIG9uOiBodHRwOi8vd3d3Lmdvb2dsZS5jb20vY29kZXNlYXJjaC9wP2hsPWVuI2RSM1lFYml0
b2pBL29zX3dpbjMyLmMmcT1HZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSUyMGxpY2Vuc2U6YnNkCi0v
LyBTZWUgQ09QWUlORyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgotc3RhdGljIGludCBnZXR0
aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCB2b2lkKiB0eikgewotI2RlZmluZSBFUE9DSEZJ
TEVUSU1FICgxMTY0NDQ3MzYwMDAwMDAwMDBVTEwpCi0gIEZJTEVUSU1FIGZ0OwotICBMQVJHRV9J
TlRFR0VSIGxpOwotICB1aW50NjQgdHQ7Ci0KLSAgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0
KTsKLSAgbGkuTG93UGFydCA9IGZ0LmR3TG93RGF0ZVRpbWU7Ci0gIGxpLkhpZ2hQYXJ0ID0gZnQu
ZHdIaWdoRGF0ZVRpbWU7Ci0gIHR0ID0gKGxpLlF1YWRQYXJ0IC0gRVBPQ0hGSUxFVElNRSkgLyAx
MDsKLSAgdHYtPnR2X3NlYyA9IHR0IC8gMTAwMDAwMDsKLSAgdHYtPnR2X3VzZWMgPSB0dCAlIDEw
MDAwMDA7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotaW50NjQgQ3ljbGVDbG9ja19Ob3co
KSB7Ci0gIC8vIFRPRE8oaGFtYWppKTogdGVtcG9yYXJ5IGltcGVtZW50YXRpb24gLSBpdCBtaWdo
dCBiZSB0b28gc2xvdy4KLSAgc3RydWN0IHRpbWV2YWwgdHY7Ci0gIGdldHRpbWVvZmRheSgmdHYs
IE5VTEwpOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50NjQ+KHR2LnR2X3NlYykgKiAxMDAwMDAw
ICsgdHYudHZfdXNlYzsKLX0KLQotaW50NjQgVXNlY1RvQ3ljbGVzKGludDY0IHVzZWMpIHsKLSAg
cmV0dXJuIHVzZWM7Ci19Ci0KLVdhbGxUaW1lIFdhbGxUaW1lX05vdygpIHsKLSAgLy8gTm93LCBj
eWNsZSBjbG9jayBpcyByZXR1bmluZyBtaWNyb3NlY29uZHMgc2luY2UgdGhlIGVwb2NoLgotICBy
ZXR1cm4gQ3ljbGVDbG9ja19Ob3coKSAqIDAuMDAwMDAxOwotfQotCi1zdGF0aWMgaW50MzIgZ19t
YWluX3RocmVhZF9waWQgPSBnZXRwaWQoKTsKLWludDMyIEdldE1haW5UaHJlYWRQaWQoKSB7Ci0g
IHJldHVybiBnX21haW5fdGhyZWFkX3BpZDsKLX0KLQotYm9vbCBQaWRIYXNDaGFuZ2VkKCkgewot
ICBpbnQzMiBwaWQgPSBnZXRwaWQoKTsKLSAgaWYgKGdfbWFpbl90aHJlYWRfcGlkID09IHBpZCkg
ewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBnX21haW5fdGhyZWFkX3BpZCA9IHBpZDsKLSAg
cmV0dXJuIHRydWU7Ci19Ci0KLXBpZF90IEdldFRJRCgpIHsKLSAgcmV0dXJuIChwaWRfdCkodWlu
dHB0cl90KXB0aHJlYWRfc2VsZigpOwotfQotCi1jb25zdCBjaGFyKiBjb25zdF9iYXNlbmFtZShj
b25zdCBjaGFyKiBmaWxlcGF0aCkgewotICBjb25zdCBjaGFyKiBiYXNlID0gc3RycmNocihmaWxl
cGF0aCwgJy8nKTsKLSNpZmRlZiBPU19XSU5ET1dTICAvLyBMb29rIGZvciBlaXRoZXIgcGF0aCBz
ZXBhcmF0b3IgaW4gV2luZG93cwotICBpZiAoIWJhc2UpCi0gICAgYmFzZSA9IHN0cnJjaHIoZmls
ZXBhdGgsICdcXCcpOwotI2VuZGlmCi0gIHJldHVybiBiYXNlID8gKGJhc2UrMSkgOiBmaWxlcGF0
aDsKLX0KLQotc3RhdGljIHN0cmluZyBnX215X3VzZXJfbmFtZTsKLWNvbnN0IHN0cmluZyYgTXlV
c2VyTmFtZSgpIHsKLSAgcmV0dXJuIGdfbXlfdXNlcl9uYW1lOwotfQotc3RhdGljIHZvaWQgTXlV
c2VyTmFtZUluaXRpYWxpemVyKCkgewotICAvLyBUT0RPKGhhbWFqaSk6IFByb2JhYmx5IHRoaXMg
aXMgbm90IHBvcnRhYmxlLgotI2lmIGRlZmluZWQoT1NfV0lORE9XUykKLSAgY29uc3QgY2hhciog
dXNlciA9IGdldGVudigiVVNFUk5BTUUiKTsKLSNlbHNlCi0gIGNvbnN0IGNoYXIqIHVzZXIgPSBn
ZXRlbnYoIlVTRVIiKTsKLSNlbmRpZgotICBpZiAodXNlciAhPSBOVUxMKSB7Ci0gICAgZ19teV91
c2VyX25hbWUgPSB1c2VyOwotICB9IGVsc2UgewotICAgIGdfbXlfdXNlcl9uYW1lID0gImludmFs
aWQtdXNlciI7Ci0gIH0KLX0KLVJFR0lTVEVSX01PRFVMRV9JTklUSUFMSVpFUih1dGlsaXRpZXMs
IE15VXNlck5hbWVJbml0aWFsaXplcigpKTsKLQotLy8gV2UgdXNlIGFuIGF0b21pYyBvcGVyYXRp
b24gdG8gcHJldmVudCBwcm9ibGVtcyB3aXRoIGNhbGxpbmcgQ3Jhc2hSZWFzb24KLS8vIGZyb20g
aW5zaWRlIHRoZSBNdXRleCBpbXBsZW1lbnRhdGlvbiAocG90ZW50aWFsbHkgdGhyb3VnaCBSQVdf
Q0hFQ0spLgotc3RhdGljIGNvbnN0IENyYXNoUmVhc29uKiBnX3JlYXNvbiA9IDA7Ci0KLXZvaWQg
U2V0Q3Jhc2hSZWFzb24oY29uc3QgQ3Jhc2hSZWFzb24qIHIpIHsKLSAgc3luY192YWxfY29tcGFy
ZV9hbmRfc3dhcCgmZ19yZWFzb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBDcmFzaFJlYXNvbio+KDApLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHIpOwotfQotCi12b2lkIEluaXRHb29nbGVMb2dnaW5nVXRpbGl0aWVzKGNvbnN0IGNo
YXIqIGFyZ3YwKSB7Ci0gIENIRUNLKCFJc0dvb2dsZUxvZ2dpbmdJbml0aWFsaXplZCgpKQotICAg
ICAgPDwgIllvdSBjYWxsZWQgSW5pdEdvb2dsZUxvZ2dpbmcoKSB0d2ljZSEiOwotICBjb25zdCBj
aGFyKiBzbGFzaCA9IHN0cnJjaHIoYXJndjAsICcvJyk7Ci0jaWZkZWYgT1NfV0lORE9XUwotICBp
ZiAoIXNsYXNoKSAgc2xhc2ggPSBzdHJyY2hyKGFyZ3YwLCAnXFwnKTsKLSNlbmRpZgotICBnX3By
b2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lID0gc2xhc2ggPyBzbGFzaCArIDEgOiBhcmd2MDsK
LSAgZ19tYWluX3RocmVhZF9pZCA9IHB0aHJlYWRfc2VsZigpOwotCi19Ci0KLXZvaWQgU2h1dGRv
d25Hb29nbGVMb2dnaW5nVXRpbGl0aWVzKCkgewotICBDSEVDSyhJc0dvb2dsZUxvZ2dpbmdJbml0
aWFsaXplZCgpKQotICAgICAgPDwgIllvdSBjYWxsZWQgU2h1dGRvd25Hb29nbGVMb2dnaW5nKCkg
d2l0aG91dCBjYWxsaW5nIEluaXRHb29nbGVMb2dnaW5nKCkgZmlyc3QhIjsKLSAgZ19wcm9ncmFt
X2ludm9jYXRpb25fc2hvcnRfbmFtZSA9IE5VTEw7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBnbG9n
X2ludGVybmFsX25hbWVzcGFjZV8KLQotX0VORF9HT09HTEVfTkFNRVNQQUNFXwpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvdXRpbGl0aWVz
LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9nbG9nL3NyYy91dGlsaXRp
ZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUyY2ZmNDZlZDE2ZTE3MjZkNDE0
NmJjYjlhZDZjYjViNjU5MmUwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9nbG9nL3NyYy91
dGlsaXRpZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDgsIEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0v
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLy8KLS8vIEF1dGhvcjogU2hpbmlj
aGlybyBIYW1hamkKLS8vCi0vLyBEZWZpbmUgdXRpbHRpZXMgZm9yIGdsb2cgaW50ZXJuYWwgdXNh
Z2UuCi0KLSNpZm5kZWYgVVRJTElUSUVTX0hfXwotI2RlZmluZSBVVElMSVRJRVNfSF9fCi0KLSNp
ZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1dJTjMyX18p
Ci0jIGRlZmluZSBPU19XSU5ET1dTCi0jZWxpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmlu
ZWQoX19DWUdXSU4zMl9fKQotIyBkZWZpbmUgT1NfQ1lHV0lOCi0jZWxpZiBkZWZpbmVkKGxpbnV4
KSB8fCBkZWZpbmVkKF9fbGludXgpIHx8IGRlZmluZWQoX19saW51eF9fKQotIyBpZm5kZWYgT1Nf
TElOVVgKLSMgIGRlZmluZSBPU19MSU5VWAotIyBlbmRpZgotI2VsaWYgZGVmaW5lZChtYWNpbnRv
c2gpIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfQ0NfXykKLSMgZGVm
aW5lIE9TX01BQ09TWAotI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSMgZGVmaW5lIE9TX0ZS
RUVCU0QKLSNlbGlmIGRlZmluZWQoX19OZXRCU0RfXykKLSMgZGVmaW5lIE9TX05FVEJTRAotI2Vs
aWYgZGVmaW5lZChfX09wZW5CU0RfXykKLSMgZGVmaW5lIE9TX09QRU5CU0QKLSNlbHNlCi0vLyBU
T0RPKGhhbWFqaSk6IEFkZCBvdGhlciBwbGF0Zm9ybXMuCi0jZW5kaWYKLQotLy8gcHJpbnRmIG1h
Y3JvcyBmb3Igc2l6ZV90LCBpbiB0aGUgc3R5bGUgb2YgaW50dHlwZXMuaAotI2lmZGVmIF9MUDY0
Ci0jZGVmaW5lIF9fUFJJU19QUkVGSVggInoiCi0jZWxzZQotI2RlZmluZSBfX1BSSVNfUFJFRklY
Ci0jZW5kaWYKLQotLy8gVXNlIHRoZXNlIG1hY3JvcyBhZnRlciBhICUgaW4gYSBwcmludGYgZm9y
bWF0IHN0cmluZwotLy8gdG8gZ2V0IGNvcnJlY3QgMzIvNjQgYml0IGJlaGF2aW9yLCBsaWtlIHRo
aXM6Ci0vLyBzaXplX3Qgc2l6ZSA9IHJlY29yZHMuc2l6ZSgpOwotLy8gcHJpbnRmKCIlIlBSSXVT
IlxuIiwgc2l6ZSk7Ci0KLSNkZWZpbmUgUFJJZFMgX19QUklTX1BSRUZJWCAiZCIKLSNkZWZpbmUg
UFJJeFMgX19QUklTX1BSRUZJWCAieCIKLSNkZWZpbmUgUFJJdVMgX19QUklTX1BSRUZJWCAidSIK
LSNkZWZpbmUgUFJJWFMgX19QUklTX1BSRUZJWCAiWCIKLSNkZWZpbmUgUFJJb1MgX19QUklTX1BS
RUZJWCAibyIKLQotI2luY2x1ZGUgImJhc2UvbXV0ZXguaCIgIC8vIFRoaXMgbXVzdCBnbyBmaXJz
dCBzbyB3ZSBnZXQgX1hPUEVOX1NPVVJDRQotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaWYgZGVm
aW5lZChPU19XSU5ET1dTKQotIyBpbmNsdWRlICJwb3J0LmgiCi0jZW5kaWYKLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgImdsb2cvbG9nZ2luZy5oIgotCi0vLyBUaGVyZSBhcmUgdGhy
ZWUgZGlmZmVyZW50IHdheXMgd2UgY2FuIHRyeSB0byBnZXQgdGhlIHN0YWNrIHRyYWNlOgotLy8K
LS8vIDEpIFRoZSBsaWJ1bndpbmQgbGlicmFyeS4gIFRoaXMgaXMgc3RpbGwgaW4gZGV2ZWxvcG1l
bnQsIGFuZCBhcyBhCi0vLyAgICBzZXBhcmF0ZSBsaWJyYXJ5IGFkZHMgYSBuZXcgZGVwZW5kZW5j
eSwgYnV0IGRvZXNuJ3QgbmVlZCBhIGZyYW1lCi0vLyAgICBwb2ludGVyLiAgSXQgYWxzbyBkb2Vz
bid0IGNhbGwgbWFsbG9jLgotLy8KLS8vIDIpIE91ciBoYW5kLWNvZGVkIHN0YWNrLXVud2luZGVy
LiAgVGhpcyBkZXBlbmRzIG9uIGEgY2VydGFpbiBzdGFjawotLy8gICAgbGF5b3V0LCB3aGljaCBp
cyB1c2VkIGJ5IGdjYyAoYW5kIHRob3NlIHN5c3RlbXMgdXNpbmcgYQotLy8gICAgZ2NjLWNvbXBh
dGlibGUgQUJJKSBvbiB4ODYgc3lzdGVtcywgYXQgbGVhc3Qgc2luY2UgZ2NjIDIuOTUuCi0vLyAg
ICBJdCB1c2VzIHRoZSBmcmFtZSBwb2ludGVyIHRvIGRvIGl0cyB3b3JrLgotLy8KLS8vIDMpIFRo
ZSBnZGIgdW53aW5kZXIgLS0gYWxzbyB0aGUgb25lIHVzZWQgYnkgdGhlIGMrKyBleGNlcHRpb24g
Y29kZS4KLS8vICAgIEl0J3Mgb2J2aW91c2x5IHdlbGwtdGVzdGVkLCBidXQgaGFzIGEgZmF0YWwg
ZmxhdzogaXQgY2FuIGNhbGwKLS8vICAgIG1hbGxvYygpIGZyb20gdGhlIHVud2luZGVyLiAgVGhp
cyBpcyBhIHByb2JsZW0gYmVjYXVzZSB3ZSdyZQotLy8gICAgdHJ5aW5nIHRvIHVzZSB0aGUgdW53
aW5kZXIgdG8gaW5zdHJ1bWVudCBtYWxsb2MoKS4KLS8vCi0vLyA0KSBUaGUgV2luZG93cyBBUEkg
Q2FwdHVyZVN0YWNrVHJhY2UuCi0vLwotLy8gTm90ZTogaWYgeW91IGFkZCBhIG5ldyBpbXBsZW1l
bnRhdGlvbiBoZXJlLCBtYWtlIHN1cmUgaXQgd29ya3MKLS8vIGNvcnJlY3RseSB3aGVuIEdldFN0
YWNrVHJhY2UoKSBpcyBjYWxsZWQgd2l0aCBtYXhfZGVwdGggPT0gMC4KLS8vIFNvbWUgY29kZSBt
YXkgZG8gdGhhdC4KLQotI2lmIGRlZmluZWQoSEFWRV9MSUJfVU5XSU5EKQotIyBkZWZpbmUgU1RB
Q0tUUkFDRV9IICJzdGFja3RyYWNlX2xpYnVud2luZC1pbmwuaCIKLSNlbGlmICFkZWZpbmVkKE5P
X0ZSQU1FX1BPSU5URVIpCi0jIGlmIGRlZmluZWQoX19pMzg2X18pICYmIF9fR05VQ19fID49IDIK
LSMgIGRlZmluZSBTVEFDS1RSQUNFX0ggInN0YWNrdHJhY2VfeDg2LWlubC5oIgotIyBlbGlmIGRl
ZmluZWQoX194ODZfNjRfXykgJiYgX19HTlVDX18gPj0gMiAmJiBIQVZFX1VOV0lORF9ICi0jICBk
ZWZpbmUgU1RBQ0tUUkFDRV9IICJzdGFja3RyYWNlX3g4Nl82NC1pbmwuaCIKLSMgZWxpZiAoZGVm
aW5lZChfX3BwY19fKSB8fCBkZWZpbmVkKF9fUFBDX18pKSAmJiBfX0dOVUNfXyA+PSAyCi0jICBk
ZWZpbmUgU1RBQ0tUUkFDRV9IICJzdGFja3RyYWNlX3Bvd2VycGMtaW5sLmgiCi0jIGVsaWYgZGVm
aW5lZChPU19XSU5ET1dTKQotIyAgZGVmaW5lIFNUQUNLVFJBQ0VfSCAic3RhY2t0cmFjZV93aW5k
b3dzLWlubC5oIgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChTVEFDS1RSQUNFX0gp
ICYmIGRlZmluZWQoSEFWRV9FWEVDSU5GT19IKQotIyBkZWZpbmUgU1RBQ0tUUkFDRV9IICJzdGFj
a3RyYWNlX2dlbmVyaWMtaW5sLmgiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoU1RBQ0tUUkFDRV9I
KQotIyBkZWZpbmUgSEFWRV9TVEFDS1RSQUNFCi0jZW5kaWYKLQotLy8gZGVmaW5lZCBieSBnY2MK
LSNpZiBkZWZpbmVkKF9fRUxGX18pICYmIGRlZmluZWQoT1NfTElOVVgpCi0jIGRlZmluZSBIQVZF
X1NZTUJPTElaRQotI2VsaWYgZGVmaW5lZChPU19NQUNPU1gpICYmIGRlZmluZWQoSEFWRV9ETEFE
RFIpCi0vLyBVc2UgZGxhZGRyIHRvIHN5bWJvbGl6ZS4KLSMgZGVmaW5lIEhBVkVfU1lNQk9MSVpF
Ci0jZWxpZiBkZWZpbmVkKE9TX1dJTkRPV1MpCi0vLyBVc2UgRGJnSGVscCB0byBzeW1ib2xpemUK
LSMgZGVmaW5lIEhBVkVfU1lNQk9MSVpFCi0jZW5kaWYKLQotI2lmbmRlZiBBUlJBWVNJWkUKLS8v
IFRoZXJlIGlzIGEgYmV0dGVyIHdheSwgYnV0IHRoaXMgaXMgZ29vZCBlbm91Z2ggZm9yIG91ciBw
dXJwb3NlLgotIyBkZWZpbmUgQVJSQVlTSVpFKGEpIChzaXplb2YoYSkgLyBzaXplb2YoKihhKSkp
Ci0jZW5kaWYKLQotX1NUQVJUX0dPT0dMRV9OQU1FU1BBQ0VfCi0KLW5hbWVzcGFjZSBnbG9nX2lu
dGVybmFsX25hbWVzcGFjZV8gewotCi0jaWZkZWYgSEFWRV9fX0FUVFJJQlVURV9fCi0jIGRlZmlu
ZSBBVFRSSUJVVEVfTk9JTkxJTkUgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKLSMgZGVmaW5l
IEhBVkVfQVRUUklCVVRFX05PSU5MSU5FCi0jZWxpZiBkZWZpbmVkKE9TX1dJTkRPV1MpCi0jIGRl
ZmluZSBBVFRSSUJVVEVfTk9JTkxJTkUgX19kZWNsc3BlYyhub2lubGluZSkKLSMgZGVmaW5lIEhB
VkVfQVRUUklCVVRFX05PSU5MSU5FCi0jZWxzZQotIyBkZWZpbmUgQVRUUklCVVRFX05PSU5MSU5F
Ci0jZW5kaWYKLQotY29uc3QgY2hhciogUHJvZ3JhbUludm9jYXRpb25TaG9ydE5hbWUoKTsKLQot
Ym9vbCBJc0dvb2dsZUxvZ2dpbmdJbml0aWFsaXplZCgpOwotCi1ib29sIGlzX2RlZmF1bHRfdGhy
ZWFkKCk7Ci0KLWludDY0IEN5Y2xlQ2xvY2tfTm93KCk7Ci0KLWludDY0IFVzZWNUb0N5Y2xlcyhp
bnQ2NCB1c2VjKTsKLQotdHlwZWRlZiBkb3VibGUgV2FsbFRpbWU7Ci1XYWxsVGltZSBXYWxsVGlt
ZV9Ob3coKTsKLQotaW50MzIgR2V0TWFpblRocmVhZFBpZCgpOwotYm9vbCBQaWRIYXNDaGFuZ2Vk
KCk7Ci0KLXBpZF90IEdldFRJRCgpOwotCi1jb25zdCBzdGQ6OnN0cmluZyYgTXlVc2VyTmFtZSgp
OwotCi0vLyBHZXQgdGhlIHBhcnQgb2YgZmlsZXBhdGggYWZ0ZXIgdGhlIGxhc3QgcGF0aCBzZXBh
cmF0b3IuCi0vLyAoRG9lc24ndCBtb2RpZnkgZmlsZXBhdGgsIGNvbnRyYXJ5IHRvIGJhc2VuYW1l
KCkgaW4gbGliZ2VuLmguKQotY29uc3QgY2hhciogY29uc3RfYmFzZW5hbWUoY29uc3QgY2hhciog
ZmlsZXBhdGgpOwotCi0vLyBXcmFwcGVyIG9mIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcC4g
SWYgdGhlIEdDQyBleHRlbnNpb24gaXNuJ3QKLS8vIGRlZmluZWQsIHdlIHRyeSB0aGUgQ1BVIHNw
ZWNpZmljIGxvZ2ljcyAod2Ugb25seSBzdXBwb3J0IHg4NiBhbmQKLS8vIHg4Nl82NCBmb3Igbm93
KSBmaXJzdCwgdGhlbiB1c2UgYSBuYWl2ZSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaGFzIGEKLS8v
IHJhY2UgY29uZGl0aW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUIHN5bmNfdmFs
X2NvbXBhcmVfYW5kX3N3YXAoVCogcHRyLCBUIG9sZHZhbCwgVCBuZXd2YWwpIHsKLSNpZiBkZWZp
bmVkKEhBVkVfX19TWU5DX1ZBTF9DT01QQVJFX0FORF9TV0FQKQotICByZXR1cm4gX19zeW5jX3Zh
bF9jb21wYXJlX2FuZF9zd2FwKHB0ciwgb2xkdmFsLCBuZXd2YWwpOwotI2VsaWYgZGVmaW5lZChf
X0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpCi0g
IFQgcmV0OwotICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibG9jazsgY21weGNoZyAlMSwgKCUyKTsi
Ci0gICAgICAgICAgICAgICAgICAgICAgIDoiPWEiKHJldCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEdDQyBtYXkgcHJvZHVjZXMgJXNpbCBvciAlZGlsIGZvcgotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gY29uc3RyYWludCAiciIsIGJ1dCBzb21lIG9mIGFwcGxlJ3MgZ2FzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBkb3NuJ3Qga25vdyB0aGUgOCBiaXQgcmVnaXN0ZXJzLgot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlICJxIiB0byBhdm9pZCB0aGVzZSByZWdp
c3RlcnMuCi0gICAgICAgICAgICAgICAgICAgICAgIDoicSIobmV3dmFsKSwgInEiKHB0ciksICJh
IihvbGR2YWwpCi0gICAgICAgICAgICAgICAgICAgICAgIDoibWVtb3J5IiwgImNjIik7Ci0gIHJl
dHVybiByZXQ7Ci0jZWxzZQotICBUIHJldCA9ICpwdHI7Ci0gIGlmIChyZXQgPT0gb2xkdmFsKSB7
Ci0gICAgKnB0ciA9IG5ld3ZhbDsKLSAgfQotICByZXR1cm4gcmV0OwotI2VuZGlmCi19Ci0KLXZv
aWQgRHVtcFN0YWNrVHJhY2VUb1N0cmluZyhzdGQ6OnN0cmluZyogc3RhY2t0cmFjZSk7Ci0KLXN0
cnVjdCBDcmFzaFJlYXNvbiB7Ci0gIENyYXNoUmVhc29uKCkgOiBmaWxlbmFtZSgwKSwgbGluZV9u
dW1iZXIoMCksIG1lc3NhZ2UoMCksIGRlcHRoKDApIHt9Ci0KLSAgY29uc3QgY2hhciogZmlsZW5h
bWU7Ci0gIGludCBsaW5lX251bWJlcjsKLSAgY29uc3QgY2hhciogbWVzc2FnZTsKLQotICAvLyBX
ZSdsbCBhbHNvIHN0b3JlIGEgYml0IG9mIHN0YWNrIHRyYWNlIGNvbnRleHQgYXQgdGhlIHRpbWUg
b2YgY3Jhc2ggYXMKLSAgLy8gaXQgbWF5IG5vdCBiZSBhdmFpbGFibGUgbGF0ZXIgb24uCi0gIHZv
aWQqIHN0YWNrWzMyXTsKLSAgaW50IGRlcHRoOwotfTsKLQotdm9pZCBTZXRDcmFzaFJlYXNvbihj
b25zdCBDcmFzaFJlYXNvbiogcik7Ci0KLXZvaWQgSW5pdEdvb2dsZUxvZ2dpbmdVdGlsaXRpZXMo
Y29uc3QgY2hhciogYXJndjApOwotdm9pZCBTaHV0ZG93bkdvb2dsZUxvZ2dpbmdVdGlsaXRpZXMo
KTsKLQotfSAgLy8gbmFtZXNwYWNlIGdsb2dfaW50ZXJuYWxfbmFtZXNwYWNlXwotCi1fRU5EX0dP
T0dMRV9OQU1FU1BBQ0VfCi0KLXVzaW5nIG5hbWVzcGFjZSBHT09HTEVfTkFNRVNQQUNFOjpnbG9n
X2ludGVybmFsX25hbWVzcGFjZV87Ci0KLSNlbmRpZiAgLy8gVVRJTElUSUVTX0hfXwpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xvZy9zcmMvdmxvZ19p
c19vbi5jYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2dsb2cvc3JjL3Zs
b2dfaXNfb24uY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZGU2NDlhMDg1NDAx
NmJjN2Q0Zjg3NDk4YzM5MmEzNWJkZWFhZWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ2xv
Zy9zcmMvdmxvZ19pc19vbi5jYworKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi0vLyBD
b3B5cmlnaHQgKGMpIDE5OTksIDIwMDcsIEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLy8KLS8v
IEF1dGhvcjogUmF5IFNpZG5leSBhbmQgbWFueSBvdGhlcnMKLS8vCi0vLyBCcm9rZW4gb3V0IGZy
b20gbG9nZ2luZy5jYyBieSBTb3JlbiBMYXNzZW4KLS8vIGxvZ2dpbmdfdW5pdHRlc3QuY2MgY292
ZXJzIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmVpbgotCi0jaW5jbHVkZSAidXRpbGl0aWVzLmgiCi0K
LSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxlcnJu
by5oPgotI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSAiYmFz
ZS9jb21tYW5kbGluZWZsYWdzLmgiCi0jaW5jbHVkZSAiZ2xvZy9sb2dnaW5nLmgiCi0jaW5jbHVk
ZSAiZ2xvZy9yYXdfbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2UvZ29vZ2xlaW5pdC5oIgotCi0v
LyBnbG9nIGRvZXNuJ3QgaGF2ZSBhbm5vdGF0aW9uCi0jZGVmaW5lIEFOTk9UQVRFX0JFTklHTl9S
QUNFKGFkZHJlc3MsIGRlc2NyaXB0aW9uKQotCi11c2luZyBzdGQ6OnN0cmluZzsKLQotX1NUQVJU
X0dPT0dMRV9OQU1FU1BBQ0VfCi0KLW5hbWVzcGFjZSBnbG9nX2ludGVybmFsX25hbWVzcGFjZV8g
ewotCi0vLyBJbXBsZW1lbnRhdGlvbiBvZiBmbm1hdGNoIHRoYXQgZG9lcyBub3QgbmVlZCAwLXRl
cm1pbmF0aW9uCi0vLyBvZiBhcmd1bWVudHMgYW5kIGRvZXMgbm90IGFsbG9jYXRlIGFueSBtZW1v
cnksCi0vLyBidXQgd2Ugb25seSBzdXBwb3J0ICIqIiBhbmQgIj8iIHdpbGRjYXJkcywgbm90IHRo
ZSAiWy4uLl0iIHBhdHRlcm5zLgotLy8gSXQncyBub3QgYSBzdGF0aWMgZnVuY3Rpb24gZm9yIHRo
ZSB1bml0dGVzdC4KLUdPT0dMRV9HTE9HX0RMTF9ERUNMIGJvb2wgU2FmZUZOTWF0Y2hfKGNvbnN0
IGNoYXIqIHBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgcGF0dF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3Qgc3RyX2xlbikgewotICBzaXplX3QgcCA9IDA7Ci0gIHNpemVfdCBzID0gMDsKLSAgd2hp
bGUgKDEpIHsKLSAgICBpZiAocCA9PSBwYXR0X2xlbiAgJiYgIHMgPT0gc3RyX2xlbikgcmV0dXJu
IHRydWU7Ci0gICAgaWYgKHAgPT0gcGF0dF9sZW4pIHJldHVybiBmYWxzZTsKLSAgICBpZiAocyA9
PSBzdHJfbGVuKSByZXR1cm4gcCsxID09IHBhdHRfbGVuICAmJiAgcGF0dGVybltwXSA9PSAnKic7
Ci0gICAgaWYgKHBhdHRlcm5bcF0gPT0gc3RyW3NdICB8fCAgcGF0dGVybltwXSA9PSAnPycpIHsK
LSAgICAgIHAgKz0gMTsKLSAgICAgIHMgKz0gMTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAg
ICBpZiAocGF0dGVybltwXSA9PSAnKicpIHsKLSAgICAgIGlmIChwKzEgPT0gcGF0dF9sZW4pIHJl
dHVybiB0cnVlOwotICAgICAgZG8gewotICAgICAgICBpZiAoU2FmZUZOTWF0Y2hfKHBhdHRlcm4r
KHArMSksIHBhdHRfbGVuLShwKzEpLCBzdHIrcywgc3RyX2xlbi1zKSkgewotICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHMgKz0gMTsKLSAgICAgIH0gd2hpbGUgKHMg
IT0gc3RyX2xlbik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgZ2xvZ19pbnRlcm5hbF9uYW1lc3BhY2VfCi0K
LXVzaW5nIGdsb2dfaW50ZXJuYWxfbmFtZXNwYWNlXzo6U2FmZUZOTWF0Y2hfOwotCi1pbnQzMiBr
TG9nU2l0ZVVuaW5pdGlhbGl6ZWQgPSAxMDAwOwotCi0vLyBMaXN0IG9mIHBlci1tb2R1bGUgbG9n
IGxldmVscyBmcm9tIEZMQUdTX3Ztb2R1bGUuCi0vLyBPbmNlIGNyZWF0ZWQgZWFjaCBlbGVtZW50
IGlzIG5ldmVyIGRlbGV0ZWQvbW9kaWZpZWQKLS8vIGV4Y2VwdCBmb3IgdGhlIHZsb2dfbGV2ZWw6
IG90aGVyIHRocmVhZHMgd2lsbCByZWFkIFZNb2R1bGVJbmZvIGJsb2JzCi0vLyB3L28gbG9ja3Mg
YW5kIHdlJ2xsIHN0b3JlIHBvaW50ZXJzIHRvIHZsb2dfbGV2ZWwgYXQgVkxPRyBsb2NhdGlvbnMK
LS8vIHRoYXQgd2lsbCBuZXZlciBnbyBhd2F5LgotLy8gV2UgY2FuJ3QgdXNlIGFuIFNUTCBzdHJ1
Y3QgaGVyZSBhcyB3ZSB3b3VsZG4ndCBrbm93Ci0vLyB3aGVuIGl0J3Mgc2FmZSB0byBkZWxldGUv
dXBkYXRlIGl0OiBvdGhlciB0aHJlYWRzIG5lZWQgdG8gdXNlIGl0IHcvbyBsb2Nrcy4KLXN0cnVj
dCBWTW9kdWxlSW5mbyB7Ci0gIHN0cmluZyBtb2R1bGVfcGF0dGVybjsKLSAgbXV0YWJsZSBpbnQz
MiB2bG9nX2xldmVsOyAgLy8gQ29uY2VwdHVhbGx5IHRoaXMgaXMgYW4gQXRvbWljV29yZCwgYnV0
IGl0J3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG9vIG11Y2ggd29yayB0byB1
c2UgQXRvbWljV29yZCB0eXBlIGhlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dy9vIG11Y2ggYWN0dWFsIGJlbmVmaXQuCi0gIGNvbnN0IFZNb2R1bGVJbmZvKiBuZXh0OwotfTsK
LQotLy8gVGhpcyBwcm90ZWN0cyB0aGUgZm9sbG93aW5nIGdsb2JhbCB2YXJpYWJsZXMuCi1zdGF0
aWMgTXV0ZXggdm1vZHVsZV9sb2NrOwotLy8gUG9pbnRlciB0byBoZWFkIG9mIHRoZSBWTW9kdWxl
SW5mbyBsaXN0LgotLy8gSXQncyBhIG1hcCBmcm9tIG1vZHVsZSBwYXR0ZXJuIHRvIGxvZ2dpbmcg
bGV2ZWwgZm9yIHRob3NlIG1vZHVsZShzKS4KLXN0YXRpYyBWTW9kdWxlSW5mbyogdm1vZHVsZV9s
aXN0ID0gMDsKLS8vIEJvb2xlYW4gaW5pdGlhbGl6YXRpb24gZmxhZy4KLXN0YXRpYyBib29sIGlu
aXRlZF92bW9kdWxlID0gZmFsc2U7Ci0KLS8vIEwgPj0gdm1vZHVsZV9sb2NrLgotc3RhdGljIHZv
aWQgVkxPRzJJbml0aWFsaXplcigpIHsKLSAgdm1vZHVsZV9sb2NrLkFzc2VydEhlbGQoKTsKLSAg
Ly8gQ2FuIG5vdyBwYXJzZSAtLXZtb2R1bGUgZmxhZyBhbmQgaW5pdGlhbGl6ZSBtYXBwaW5nIG9m
IG1vZHVsZS1zcGVjaWZpYwotICAvLyBsb2dnaW5nIGxldmVscy4KLSAgaW5pdGVkX3Ztb2R1bGUg
PSBmYWxzZTsKLSAgY29uc3QgY2hhciogdm1vZHVsZSA9ICIiOwotICBjb25zdCBjaGFyKiBzZXA7
Ci0gIFZNb2R1bGVJbmZvKiBoZWFkID0gTlVMTDsKLSAgVk1vZHVsZUluZm8qIHRhaWwgPSBOVUxM
OwotICB3aGlsZSAoKHNlcCA9IHN0cmNocih2bW9kdWxlLCAnPScpKSAhPSBOVUxMKSB7Ci0gICAg
c3RyaW5nIHBhdHRlcm4odm1vZHVsZSwgc2VwIC0gdm1vZHVsZSk7Ci0gICAgaW50IG1vZHVsZV9s
ZXZlbDsKLSAgICBpZiAoc3NjYW5mKHNlcCwgIj0lZCIsICZtb2R1bGVfbGV2ZWwpID09IDEpIHsK
LSAgICAgIFZNb2R1bGVJbmZvKiBpbmZvID0gbmV3IFZNb2R1bGVJbmZvOwotICAgICAgaW5mby0+
bW9kdWxlX3BhdHRlcm4gPSBwYXR0ZXJuOwotICAgICAgaW5mby0+dmxvZ19sZXZlbCA9IG1vZHVs
ZV9sZXZlbDsKLSAgICAgIGlmIChoZWFkKSAgdGFpbC0+bmV4dCA9IGluZm87Ci0gICAgICBlbHNl
ICBoZWFkID0gaW5mbzsKLSAgICAgIHRhaWwgPSBpbmZvOwotICAgIH0KLSAgICAvLyBTa2lwIHBh
c3QgdGhpcyBlbnRyeQotICAgIHZtb2R1bGUgPSBzdHJjaHIoc2VwLCAnLCcpOwotICAgIGlmICh2
bW9kdWxlID09IE5VTEwpIGJyZWFrOwotICAgIHZtb2R1bGUrKzsgIC8vIFNraXAgcGFzdCAiLCIK
LSAgfQotICBpZiAoaGVhZCkgeyAgLy8gUHV0IHRoZW0gaW50byB0aGUgbGlzdCBhdCB0aGUgaGVh
ZDoKLSAgICB0YWlsLT5uZXh0ID0gdm1vZHVsZV9saXN0OwotICAgIHZtb2R1bGVfbGlzdCA9IGhl
YWQ7Ci0gIH0KLSAgaW5pdGVkX3Ztb2R1bGUgPSB0cnVlOwotfQotCi0vLyBUaGlzIGNhbiBiZSBj
YWxsZWQgdmVyeSBlYXJseSwgc28gd2UgdXNlIFNwaW5Mb2NrIGFuZCBSQVdfVkxPRyBoZXJlLgot
aW50IFNldFZMT0dMZXZlbChjb25zdCBjaGFyKiBtb2R1bGVfcGF0dGVybiwgaW50IGxvZ19sZXZl
bCkgewotICBpbnQgcmVzdWx0ID0gRkxBR1NfdjsKLSAgaW50IGNvbnN0IHBhdHRlcm5fbGVuID0g
c3RybGVuKG1vZHVsZV9wYXR0ZXJuKTsKLSAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICB7Ci0gICAg
TXV0ZXhMb2NrIGwoJnZtb2R1bGVfbG9jayk7ICAvLyBwcm90ZWN0IHdob2xlIHJlYWQtbW9kaWZ5
LXdyaXRlCi0gICAgZm9yIChjb25zdCBWTW9kdWxlSW5mbyogaW5mbyA9IHZtb2R1bGVfbGlzdDsK
LSAgICAgICAgIGluZm8gIT0gTlVMTDsgaW5mbyA9IGluZm8tPm5leHQpIHsKLSAgICAgIGlmIChp
bmZvLT5tb2R1bGVfcGF0dGVybiA9PSBtb2R1bGVfcGF0dGVybikgewotICAgICAgICBpZiAoIWZv
dW5kKSB7Ci0gICAgICAgICAgcmVzdWx0ID0gaW5mby0+dmxvZ19sZXZlbDsKLSAgICAgICAgICBm
b3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaW5mby0+dmxvZ19sZXZlbCA9IGxvZ19s
ZXZlbDsKLSAgICAgIH0gZWxzZSBpZiAoIWZvdW5kICAmJgotICAgICAgICAgICAgICAgICBTYWZl
Rk5NYXRjaF8oaW5mby0+bW9kdWxlX3BhdHRlcm4uY19zdHIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm8tPm1vZHVsZV9wYXR0ZXJuLnNpemUoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vZHVsZV9wYXR0ZXJuLCBwYXR0ZXJuX2xlbikpIHsKLSAgICAgICAg
cmVzdWx0ID0gaW5mby0+dmxvZ19sZXZlbDsKLSAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAg
fQotICAgIH0KLSAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICBWTW9kdWxlSW5mbyogaW5mbyA9IG5l
dyBWTW9kdWxlSW5mbzsKLSAgICAgIGluZm8tPm1vZHVsZV9wYXR0ZXJuID0gbW9kdWxlX3BhdHRl
cm47Ci0gICAgICBpbmZvLT52bG9nX2xldmVsID0gbG9nX2xldmVsOwotICAgICAgaW5mby0+bmV4
dCA9IHZtb2R1bGVfbGlzdDsKLSAgICAgIHZtb2R1bGVfbGlzdCA9IGluZm87Ci0gICAgfQotICB9
Ci0gIFJBV19WTE9HKDEsICJTZXQgVkxPRyBsZXZlbCBmb3IgXCIlc1wiIHRvICVkIiwgbW9kdWxl
X3BhdHRlcm4sIGxvZ19sZXZlbCk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIE5PVEU6IElu
ZGl2aWR1YWwgVkxPRyBzdGF0ZW1lbnRzIGNhY2hlIHRoZSBpbnRlZ2VyIGxvZyBsZXZlbCBwb2lu
dGVycy4KLS8vIE5PVEU6IFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgYWxsb2NhdGUgbWVtb3J5IG9y
IHJlcXVpcmUgYW55IGxvY2tzLgotYm9vbCBJbml0VkxPRzNfXyhpbnQzMioqIHNpdGVfZmxhZywg
aW50MzIqIHNpdGVfZGVmYXVsdCwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZm5hbWUs
IGludDMyIHZlcmJvc2VfbGV2ZWwpIHsKLSAgTXV0ZXhMb2NrIGwoJnZtb2R1bGVfbG9jayk7Ci0g
IGJvb2wgcmVhZF92bW9kdWxlX2ZsYWcgPSBpbml0ZWRfdm1vZHVsZTsKLSAgaWYgKCFyZWFkX3Zt
b2R1bGVfZmxhZykgewotICAgIFZMT0cySW5pdGlhbGl6ZXIoKTsKLSAgfQotCi0gIC8vIHByb3Rl
Y3QgdGhlIGVycm5vIGdsb2JhbCBpbiBjYXNlIHNvbWVvbmUgd3JpdGVzOgotICAvLyBWTE9HKC4u
KSA8PCAiVGhlIGxhc3QgZXJyb3Igd2FzICIgPDwgc3RyZXJyb3IoZXJybm8pCi0gIGludCBvbGRf
ZXJybm8gPSBlcnJubzsKLQotICAvLyBzaXRlX2RlZmF1bHQgbm9ybWFsbHkgcG9pbnRzIHRvIEZM
QUdTX3YKLSAgaW50MzIqIHNpdGVfZmxhZ192YWx1ZSA9IHNpdGVfZGVmYXVsdDsKLQotICAvLyBH
ZXQgYmFzZW5hbWUgZm9yIGZpbGUKLSAgY29uc3QgY2hhciogYmFzZSA9IHN0cnJjaHIoZm5hbWUs
ICcvJyk7Ci0gIGJhc2UgPSBiYXNlID8gKGJhc2UrMSkgOiBmbmFtZTsKLSAgY29uc3QgY2hhciog
YmFzZV9lbmQgPSBzdHJjaHIoYmFzZSwgJy4nKTsKLSAgc2l6ZV90IGJhc2VfbGVuZ3RoID0gYmFz
ZV9lbmQgPyBzaXplX3QoYmFzZV9lbmQgLSBiYXNlKSA6IHN0cmxlbihiYXNlKTsKLQotICAvLyBU
cmltIG91dCB0cmFpbGluZyAiLWlubCIgaWYgYW55Ci0gIGlmIChiYXNlX2xlbmd0aCA+PSA0ICYm
IChtZW1jbXAoYmFzZStiYXNlX2xlbmd0aC00LCAiLWlubCIsIDQpID09IDApKSB7Ci0gICAgYmFz
ZV9sZW5ndGggLT0gNDsKLSAgfQotCi0gIC8vIFRPRE86IFRyaW0gb3V0IF91bml0dGVzdCBzdWZm
aXg/ICBQZXJoYXBzIGl0IGlzIGJldHRlciB0byBoYXZlCi0gIC8vIHRoZSBleHRyYSBjb250cm9s
IGFuZCBqdXN0IGxlYXZlIGl0IHRoZXJlLgotCi0gIC8vIGZpbmQgdGFyZ2V0IGluIHZlY3RvciBv
ZiBtb2R1bGVzLCByZXBsYWNlIHNpdGVfZmxhZ192YWx1ZSB3aXRoCi0gIC8vIGEgbW9kdWxlLXNw
ZWNpZmljIHZlcmJvc2UgbGV2ZWwsIGlmIGFueS4KLSAgZm9yIChjb25zdCBWTW9kdWxlSW5mbyog
aW5mbyA9IHZtb2R1bGVfbGlzdDsKLSAgICAgICBpbmZvICE9IE5VTEw7IGluZm8gPSBpbmZvLT5u
ZXh0KSB7Ci0gICAgaWYgKFNhZmVGTk1hdGNoXyhpbmZvLT5tb2R1bGVfcGF0dGVybi5jX3N0cigp
LCBpbmZvLT5tb2R1bGVfcGF0dGVybi5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICBiYXNl
LCBiYXNlX2xlbmd0aCkpIHsKLSAgICAgIHNpdGVfZmxhZ192YWx1ZSA9ICZpbmZvLT52bG9nX2xl
dmVsOwotICAgICAgICAvLyB2YWx1ZSBhdCBpbmZvLT52bG9nX2xldmVsIGlzIG5vdyB3aGF0IGNv
bnRyb2xzCi0gICAgICAgIC8vIHRoZSBWTE9HIGF0IHRoZSBjYWxsZXIgc2l0ZSBmb3JldmVyCi0g
ICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvLyBDYWNoZSB0aGUgdmxvZyB2YWx1ZSBwb2lu
dGVyIGlmIC0tdm1vZHVsZSBmbGFnIGhhcyBiZWVuIHBhcnNlZC4KLSAgQU5OT1RBVEVfQkVOSUdO
X1JBQ0Uoc2l0ZV9mbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAiKnNpdGVfZmxhZyBtYXkg
YmUgd3JpdHRlbiBieSBzZXZlcmFsIHRocmVhZHMsIgotICAgICAgICAgICAgICAgICAgICAgICAi
IGJ1dCB0aGUgdmFsdWUgd2lsbCBiZSB0aGUgc2FtZSIpOwotICBpZiAocmVhZF92bW9kdWxlX2Zs
YWcpICpzaXRlX2ZsYWcgPSBzaXRlX2ZsYWdfdmFsdWU7Ci0KLSAgLy8gcmVzdG9yZSB0aGUgZXJy
bm8gaW4gY2FzZSBzb21ldGhpbmcgcmVjb3ZlcmFibGUgd2VudCB3cm9uZyBkdXJpbmcKLSAgLy8g
dGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBWTE9HIG1lY2hhbmlzbSAoc2VlIGFib3ZlIG5vdGUg
InByb3RlY3QgdGhlLi4iKQotICBlcnJubyA9IG9sZF9lcnJubzsKLSAgcmV0dXJuICpzaXRlX2Zs
YWdfdmFsdWUgPj0gdmVyYm9zZV9sZXZlbDsKLX0KLQotX0VORF9HT09HTEVfTkFNRVNQQUNFXwpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvUkVB
RE1FLm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvUkVBRE1F
Lm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzY0ODRlNGZhZDkyMjI5YmQxNWY2
MjA5NzJhZTY2ZjM4NGQxMTQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L1JFQURN
RS5tZAorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0KLSMgR29vZ2xlIFRlc3QgIwot
Ci1bIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9nb29nbGUvZ29vZ2xldGVz
dC5zdmc/YnJhbmNoPW1hc3RlcildKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9nb29nbGUvZ29vZ2xl
dGVzdCkKLVshW0J1aWxkIHN0YXR1c10oaHR0cHM6Ly9jaS5hcHB2ZXlvci5jb20vYXBpL3Byb2pl
Y3RzL3N0YXR1cy80bzM4cGx0MHhibzF1YmM4L2JyYW5jaC9tYXN0ZXI/c3ZnPXRydWUpXShodHRw
czovL2NpLmFwcHZleW9yLmNvbS9wcm9qZWN0L0JpbGx5RG9uYWh1ZS9nb29nbGV0ZXN0L2JyYW5j
aC9tYXN0ZXIpCi0KLVdlbGNvbWUgdG8gKipHb29nbGUgVGVzdCoqLCBHb29nbGUncyBDKysgdGVz
dCBmcmFtZXdvcmshCi0KLVRoaXMgcmVwb3NpdG9yeSBpcyBhIG1lcmdlciBvZiB0aGUgZm9ybWVy
bHkgc2VwYXJhdGUgR29vZ2xlVGVzdCBhbmQKLUdvb2dsZU1vY2sgcHJvamVjdHMuIFRoZXNlIHdl
cmUgc28gY2xvc2VseSByZWxhdGVkIHRoYXQgaXQgbWFrZXMgc2Vuc2UgdG8KLW1haW50YWluIGFu
ZCByZWxlYXNlIHRoZW0gdG9nZXRoZXIuCi0KLVBsZWFzZSBzZWUgdGhlIHByb2plY3QgcGFnZSBh
Ym92ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhcyB3ZWxsIGFzIHRoZQotbWFpbGluZyBsaXN0IGZv
ciBxdWVzdGlvbnMsIGRpc2N1c3Npb25zLCBhbmQgZGV2ZWxvcG1lbnQuICBUaGVyZSBpcwotYWxz
byBhbiBJUkMgY2hhbm5lbCBvbiBPRlRDIChpcmMub2Z0Yy5uZXQpICNndGVzdCBhdmFpbGFibGUu
ICBQbGVhc2UKLWpvaW4gdXMhCi0KLUdldHRpbmcgc3RhcnRlZCBpbmZvcm1hdGlvbiBmb3IgKipH
b29nbGUgVGVzdCoqIGlzIGF2YWlsYWJsZSBpbiB0aGUgCi1bR29vZ2xlIFRlc3QgUHJpbWVyXShn
b29nbGV0ZXN0L2RvY3MvUHJpbWVyLm1kKSBkb2N1bWVudGF0aW9uLgotCi0qKkdvb2dsZSBNb2Nr
KiogaXMgYW4gZXh0ZW5zaW9uIHRvIEdvb2dsZSBUZXN0IGZvciB3cml0aW5nIGFuZCB1c2luZyBD
KysgbW9jawotY2xhc3Nlcy4gIFNlZSB0aGUgc2VwYXJhdGUgW0dvb2dsZSBNb2NrIGRvY3VtZW50
YXRpb25dKGdvb2dsZW1vY2svUkVBRE1FLm1kKS4KLQotTW9yZSBkZXRhaWxlZCBkb2N1bWVudGF0
aW9uIGZvciBnb29nbGV0ZXN0IChpbmNsdWRpbmcgYnVpbGQgaW5zdHJ1Y3Rpb25zKSBhcmUKLWlu
IGl0cyBpbnRlcmlvciBbZ29vZ2xldGVzdC9SRUFETUUubWRdKGdvb2dsZXRlc3QvUkVBRE1FLm1k
KSBmaWxlLgotCi0jIyBGZWF0dXJlcyAjIwotCi0gICogQW4gW1hVbml0XShodHRwczovL2VuLndp
a2lwZWRpYS5vcmcvd2lraS9YVW5pdCkgdGVzdCBmcmFtZXdvcmsuCi0gICogVGVzdCBkaXNjb3Zl
cnkuCi0gICogQSByaWNoIHNldCBvZiBhc3NlcnRpb25zLgotICAqIFVzZXItZGVmaW5lZCBhc3Nl
cnRpb25zLgotICAqIERlYXRoIHRlc3RzLgotICAqIEZhdGFsIGFuZCBub24tZmF0YWwgZmFpbHVy
ZXMuCi0gICogVmFsdWUtcGFyYW1ldGVyaXplZCB0ZXN0cy4KLSAgKiBUeXBlLXBhcmFtZXRlcml6
ZWQgdGVzdHMuCi0gICogVmFyaW91cyBvcHRpb25zIGZvciBydW5uaW5nIHRoZSB0ZXN0cy4KLSAg
KiBYTUwgdGVzdCByZXBvcnQgZ2VuZXJhdGlvbi4KLQotIyMgUGxhdGZvcm1zICMjCi0KLUdvb2ds
ZSB0ZXN0IGhhcyBiZWVuIHVzZWQgb24gYSB2YXJpZXR5IG9mIHBsYXRmb3JtczoKLQotICAqIExp
bnV4Ci0gICogTWFjIE9TIFgKLSAgKiBXaW5kb3dzCi0gICogQ3lnd2luCi0gICogTWluR1cKLSAg
KiBXaW5kb3dzIE1vYmlsZQotICAqIFN5bWJpYW4KLQotIyMgV2hvIElzIFVzaW5nIEdvb2dsZSBU
ZXN0PyAjIwotCi1JbiBhZGRpdGlvbiB0byBtYW55IGludGVybmFsIHByb2plY3RzIGF0IEdvb2ds
ZSwgR29vZ2xlIFRlc3QgaXMgYWxzbyB1c2VkIGJ5Ci10aGUgZm9sbG93aW5nIG5vdGFibGUgcHJv
amVjdHM6Ci0KLSAgKiBUaGUgW0Nocm9taXVtIHByb2plY3RzXShodHRwOi8vd3d3LmNocm9taXVt
Lm9yZy8pIChiZWhpbmQgdGhlIENocm9tZQotICAgIGJyb3dzZXIgYW5kIENocm9tZSBPUykuCi0g
ICogVGhlIFtMTFZNXShodHRwOi8vbGx2bS5vcmcvKSBjb21waWxlci4KLSAgKiBbUHJvdG9jb2wg
QnVmZmVyc10oaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9wcm90b2J1ZiksIEdvb2dsZSdzIGRh
dGEKLSAgICBpbnRlcmNoYW5nZSBmb3JtYXQuCi0gICogVGhlIFtPcGVuQ1ZdKGh0dHA6Ly9vcGVu
Y3Yub3JnLykgY29tcHV0ZXIgdmlzaW9uIGxpYnJhcnkuCi0KLSMjIFJlbGF0ZWQgT3BlbiBTb3Vy
Y2UgUHJvamVjdHMgIyMKLQotW0dvb2dsZSBUZXN0IFVJXShodHRwczovL2dpdGh1Yi5jb20vb3Nw
ZWN0b3IvZ3Rlc3QtZ2JhcikgaXMgdGVzdCBydW5uZXIgdGhhdCBydW5zCi15b3VyIHRlc3QgYmlu
YXJ5LCBhbGxvd3MgeW91IHRvIHRyYWNrIGl0cyBwcm9ncmVzcyB2aWEgYSBwcm9ncmVzcyBiYXIs
IGFuZAotZGlzcGxheXMgYSBsaXN0IG9mIHRlc3QgZmFpbHVyZXMuIENsaWNraW5nIG9uIG9uZSBz
aG93cyBmYWlsdXJlIHRleHQuIEdvb2dsZQotVGVzdCBVSSBpcyB3cml0dGVuIGluIEMjLgotCi1b
R1Rlc3QgVEFQIExpc3RlbmVyXShodHRwczovL2dpdGh1Yi5jb20va2lub3cvZ3Rlc3QtdGFwLWxp
c3RlbmVyKSBpcyBhbiBldmVudAotbGlzdGVuZXIgZm9yIEdvb2dsZSBUZXN0IHRoYXQgaW1wbGVt
ZW50cyB0aGUKLVtUQVAgcHJvdG9jb2xdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Rl
c3RfQW55dGhpbmdfUHJvdG9jb2wpIGZvciB0ZXN0Ci1yZXN1bHQgb3V0cHV0LiBJZiB5b3VyIHRl
c3QgcnVubmVyIHVuZGVyc3RhbmRzIFRBUCwgeW91IG1heSBmaW5kIGl0IHVzZWZ1bC4KLQotIyMg
UmVxdWlyZW1lbnRzICMjCi0KLUdvb2dsZSBUZXN0IGlzIGRlc2lnbmVkIHRvIGhhdmUgZmFpcmx5
IG1pbmltYWwgcmVxdWlyZW1lbnRzIHRvIGJ1aWxkCi1hbmQgdXNlIHdpdGggeW91ciBwcm9qZWN0
cywgYnV0IHRoZXJlIGFyZSBzb21lLiAgQ3VycmVudGx5LCB3ZSBzdXBwb3J0Ci1MaW51eCwgV2lu
ZG93cywgTWFjIE9TIFgsIGFuZCBDeWd3aW4uICBXZSB3aWxsIGFsc28gbWFrZSBvdXIgYmVzdAot
ZWZmb3J0IHRvIHN1cHBvcnQgb3RoZXIgcGxhdGZvcm1zIChlLmcuIFNvbGFyaXMsIEFJWCwgYW5k
IHovT1MpLgotSG93ZXZlciwgc2luY2UgY29yZSBtZW1iZXJzIG9mIHRoZSBHb29nbGUgVGVzdCBw
cm9qZWN0IGhhdmUgbm8gYWNjZXNzCi10byB0aGVzZSBwbGF0Zm9ybXMsIEdvb2dsZSBUZXN0IG1h
eSBoYXZlIG91dHN0YW5kaW5nIGlzc3VlcyB0aGVyZS4gIElmCi15b3Ugbm90aWNlIGFueSBwcm9i
bGVtcyBvbiB5b3VyIHBsYXRmb3JtLCBwbGVhc2Ugbm90aWZ5Ci08Z29vZ2xldGVzdGZyYW1ld29y
a0Bnb29nbGVncm91cHMuY29tPi4gUGF0Y2hlcyBmb3IgZml4aW5nIHRoZW0gYXJlCi1ldmVuIG1v
cmUgd2VsY29tZSEKLQotIyMjIExpbnV4IFJlcXVpcmVtZW50cyAjIyMKLQotVGhlc2UgYXJlIHRo
ZSBiYXNlIHJlcXVpcmVtZW50cyB0byBidWlsZCBhbmQgdXNlIEdvb2dsZSBUZXN0IGZyb20gYSBz
b3VyY2UKLXBhY2thZ2UgKGFzIGRlc2NyaWJlZCBiZWxvdyk6Ci0KLSAgKiBHTlUtY29tcGF0aWJs
ZSBNYWtlIG9yIGdtYWtlCi0gICogUE9TSVgtc3RhbmRhcmQgc2hlbGwKLSAgKiBQT1NJWCgtMikg
UmVndWxhciBFeHByZXNzaW9ucyAocmVnZXguaCkKLSAgKiBBIEMrKzk4LXN0YW5kYXJkLWNvbXBs
aWFudCBjb21waWxlcgotCi0jIyMgV2luZG93cyBSZXF1aXJlbWVudHMgIyMjCi0KLSAgKiBNaWNy
b3NvZnQgVmlzdWFsIEMrKyB2Ny4xIG9yIG5ld2VyCi0KLSMjIyBDeWd3aW4gUmVxdWlyZW1lbnRz
ICMjIwotCi0gICogQ3lnd2luIHYxLjUuMjUtMTQgb3IgbmV3ZXIKLQotIyMjIE1hYyBPUyBYIFJl
cXVpcmVtZW50cyAjIyMKLQotICAqIE1hYyBPUyBYIHYxMC40IFRpZ2VyIG9yIG5ld2VyCi0gICog
WGNvZGUgRGV2ZWxvcGVyIFRvb2xzCi0KLSMjIyBSZXF1aXJlbWVudHMgZm9yIENvbnRyaWJ1dG9y
cyAjIyMKLQotV2Ugd2VsY29tZSBwYXRjaGVzLiAgSWYgeW91IHBsYW4gdG8gY29udHJpYnV0ZSBh
IHBhdGNoLCB5b3UgbmVlZCB0bwotYnVpbGQgR29vZ2xlIFRlc3QgYW5kIGl0cyBvd24gdGVzdHMg
ZnJvbSBhIGdpdCBjaGVja291dCAoZGVzY3JpYmVkCi1iZWxvdyksIHdoaWNoIGhhcyBmdXJ0aGVy
IHJlcXVpcmVtZW50czoKLQotICAqIFtQeXRob25dKGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvKSB2
Mi4zIG9yIG5ld2VyIChmb3IgcnVubmluZyBzb21lIG9mCi0gICAgdGhlIHRlc3RzIGFuZCByZS1n
ZW5lcmF0aW5nIGNlcnRhaW4gc291cmNlIGZpbGVzIGZyb20gdGVtcGxhdGVzKQotICAqIFtDTWFr
ZV0oaHR0cHM6Ly9jbWFrZS5vcmcvKSB2Mi42LjQgb3IgbmV3ZXIKLQotIyMgUmVnZW5lcmF0aW5n
IFNvdXJjZSBGaWxlcyAjIwotCi1Tb21lIG9mIEdvb2dsZSBUZXN0J3Mgc291cmNlIGZpbGVzIGFy
ZSBnZW5lcmF0ZWQgZnJvbSB0ZW1wbGF0ZXMgKG5vdAotaW4gdGhlIEMrKyBzZW5zZSkgdXNpbmcg
YSBzY3JpcHQuCi1Gb3IgZXhhbXBsZSwgdGhlCi1maWxlIGluY2x1ZGUvZ3Rlc3QvaW50ZXJuYWwv
Z3Rlc3QtdHlwZS11dGlsLmgucHVtcCBpcyB1c2VkIHRvIGdlbmVyYXRlCi1ndGVzdC10eXBlLXV0
aWwuaCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCi0KLVlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFi
b3V0IHJlZ2VuZXJhdGluZyB0aGUgc291cmNlIGZpbGVzCi11bmxlc3MgeW91IG5lZWQgdG8gbW9k
aWZ5IHRoZW0uICBZb3Ugd291bGQgdGhlbiBtb2RpZnkgdGhlCi1jb3JyZXNwb25kaW5nIGAucHVt
cGAgZmlsZXMgYW5kIHJ1biB0aGUgJ1twdW1wLnB5XShnb29nbGV0ZXN0L3NjcmlwdHMvcHVtcC5w
eSknCi1nZW5lcmF0b3Igc2NyaXB0LiAgU2VlIHRoZSBbUHVtcCBNYW51YWxdKGdvb2dsZXRlc3Qv
ZG9jcy9QdW1wTWFudWFsLm1kKS4KLQotIyMjIENvbnRyaWJ1dGluZyBDb2RlICMjIwotCi1XZSB3
ZWxjb21lIHBhdGNoZXMuICBQbGVhc2UgcmVhZCB0aGUKLVtEZXZlbG9wZXIncyBHdWlkZV0oZ29v
Z2xldGVzdC9kb2NzL0Rldkd1aWRlLm1kKQotZm9yIGhvdyB5b3UgY2FuIGNvbnRyaWJ1dGUuIElu
IHBhcnRpY3VsYXIsIG1ha2Ugc3VyZSB5b3UgaGF2ZSBzaWduZWQKLXRoZSBDb250cmlidXRvciBM
aWNlbnNlIEFncmVlbWVudCwgb3Igd2Ugd29uJ3QgYmUgYWJsZSB0byBhY2NlcHQgdGhlCi1wYXRj
aC4KLQotSGFwcHkgdGVzdGluZyEKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvTElDRU5TRSBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvTElDRU5TRQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMTk0MWExMWY4Y2U5NDM4OTE2MGI0NTg5MjdhMjliYTIxNzU0Mjgx
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L0xJQ0VOU0UKKysr
IC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1Db3B5cmlnaHQgMjAwOCwgR29vZ2xlIEluYy4K
LUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotbWV0Ogot
Ci0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotZGlzdHJpYnV0
aW9uLgotICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLXRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLUEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi1PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLVNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLUxJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi1USEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLU9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0
L1JFQURNRS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dv
b2dsZXRlc3QvUkVBRE1FLm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGQ0NDA4
MDU0YjMyNDk2YWEwYjQzN2MwMjY0NTIzMjQ1NzU5MGU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2d0ZXN0L2dvb2dsZXRlc3QvUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMjgwICsw
LDAgQEAKLQotIyMjIEdlbmVyaWMgQnVpbGQgSW5zdHJ1Y3Rpb25zICMjIwotCi0jIyMjIFNldHVw
ICMjIyMKLQotVG8gYnVpbGQgR29vZ2xlIFRlc3QgYW5kIHlvdXIgdGVzdHMgdGhhdCB1c2UgaXQs
IHlvdSBuZWVkIHRvIHRlbGwgeW91cgotYnVpbGQgc3lzdGVtIHdoZXJlIHRvIGZpbmQgaXRzIGhl
YWRlcnMgYW5kIHNvdXJjZSBmaWxlcy4gIFRoZSBleGFjdAotd2F5IHRvIGRvIGl0IGRlcGVuZHMg
b24gd2hpY2ggYnVpbGQgc3lzdGVtIHlvdSB1c2UsIGFuZCBpcyB1c3VhbGx5Ci1zdHJhaWdodGZv
cndhcmQuCi0KLSMjIyMgQnVpbGQgIyMjIwotCi1TdXBwb3NlIHlvdSBwdXQgR29vZ2xlIFRlc3Qg
aW4gZGlyZWN0b3J5IGAke0dURVNUX0RJUn1gLiAgVG8gYnVpbGQgaXQsCi1jcmVhdGUgYSBsaWJy
YXJ5IGJ1aWxkIHRhcmdldCAob3IgYSBwcm9qZWN0IGFzIGNhbGxlZCBieSBWaXN1YWwgU3R1ZGlv
Ci1hbmQgWGNvZGUpIHRvIGNvbXBpbGUKLQotICAgICR7R1RFU1RfRElSfS9zcmMvZ3Rlc3QtYWxs
LmNjCi0KLXdpdGggYCR7R1RFU1RfRElSfS9pbmNsdWRlYCBpbiB0aGUgc3lzdGVtIGhlYWRlciBz
ZWFyY2ggcGF0aCBhbmQgYCR7R1RFU1RfRElSfWAKLWluIHRoZSBub3JtYWwgaGVhZGVyIHNlYXJj
aCBwYXRoLiAgQXNzdW1pbmcgYSBMaW51eC1saWtlIHN5c3RlbSBhbmQgZ2NjLAotc29tZXRoaW5n
IGxpa2UgdGhlIGZvbGxvd2luZyB3aWxsIGRvOgotCi0gICAgZysrIC1pc3lzdGVtICR7R1RFU1Rf
RElSfS9pbmNsdWRlIC1JJHtHVEVTVF9ESVJ9IFwKLSAgICAgICAgLXB0aHJlYWQgLWMgJHtHVEVT
VF9ESVJ9L3NyYy9ndGVzdC1hbGwuY2MKLSAgICBhciAtcnYgbGliZ3Rlc3QuYSBndGVzdC1hbGwu
bwotCi0oV2UgbmVlZCBgLXB0aHJlYWRgIGFzIEdvb2dsZSBUZXN0IHVzZXMgdGhyZWFkcy4pCi0K
LU5leHQsIHlvdSBzaG91bGQgY29tcGlsZSB5b3VyIHRlc3Qgc291cmNlIGZpbGUgd2l0aAotYCR7
R1RFU1RfRElSfS9pbmNsdWRlYCBpbiB0aGUgc3lzdGVtIGhlYWRlciBzZWFyY2ggcGF0aCwgYW5k
IGxpbmsgaXQKLXdpdGggZ3Rlc3QgYW5kIGFueSBvdGhlciBuZWNlc3NhcnkgbGlicmFyaWVzOgot
Ci0gICAgZysrIC1pc3lzdGVtICR7R1RFU1RfRElSfS9pbmNsdWRlIC1wdGhyZWFkIHBhdGgvdG8v
eW91cl90ZXN0LmNjIGxpYmd0ZXN0LmEgXAotICAgICAgICAtbyB5b3VyX3Rlc3QKLQotQXMgYW4g
ZXhhbXBsZSwgdGhlIG1ha2UvIGRpcmVjdG9yeSBjb250YWlucyBhIE1ha2VmaWxlIHRoYXQgeW91
IGNhbgotdXNlIHRvIGJ1aWxkIEdvb2dsZSBUZXN0IG9uIHN5c3RlbXMgd2hlcmUgR05VIG1ha2Ug
aXMgYXZhaWxhYmxlCi0oZS5nLiBMaW51eCwgTWFjIE9TIFgsIGFuZCBDeWd3aW4pLiAgSXQgZG9l
c24ndCB0cnkgdG8gYnVpbGQgR29vZ2xlCi1UZXN0J3Mgb3duIHRlc3RzLiAgSW5zdGVhZCwgaXQg
anVzdCBidWlsZHMgdGhlIEdvb2dsZSBUZXN0IGxpYnJhcnkgYW5kCi1hIHNhbXBsZSB0ZXN0LiAg
WW91IGNhbiB1c2UgaXQgYXMgYSBzdGFydGluZyBwb2ludCBmb3IgeW91ciBvd24gYnVpbGQKLXNj
cmlwdC4KLQotSWYgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGNvcnJlY3QgZm9yIHlvdXIgZW52
aXJvbm1lbnQsIHRoZQotZm9sbG93aW5nIGNvbW1hbmRzIHNob3VsZCBzdWNjZWVkOgotCi0gICAg
Y2QgJHtHVEVTVF9ESVJ9L21ha2UKLSAgICBtYWtlCi0gICAgLi9zYW1wbGUxX3VuaXR0ZXN0Ci0K
LUlmIHlvdSBzZWUgZXJyb3JzLCB0cnkgdG8gdHdlYWsgdGhlIGNvbnRlbnRzIG9mIGBtYWtlL01h
a2VmaWxlYCB0byBtYWtlCi10aGVtIGdvIGF3YXkuICBUaGVyZSBhcmUgaW5zdHJ1Y3Rpb25zIGlu
IGBtYWtlL01ha2VmaWxlYCBvbiBob3cgdG8gZG8KLWl0LgotCi0jIyMgVXNpbmcgQ01ha2UgIyMj
Ci0KLUdvb2dsZSBUZXN0IGNvbWVzIHdpdGggYSBDTWFrZSBidWlsZCBzY3JpcHQgKAotW0NNYWtl
TGlzdHMudHh0XShDTWFrZUxpc3RzLnR4dCkpIHRoYXQgY2FuIGJlIHVzZWQgb24gYSB3aWRlIHJh
bmdlIG9mIHBsYXRmb3JtcyAoIkMiIHN0YW5kcyBmb3IKLWNyb3NzLXBsYXRmb3JtLikuIElmIHlv
dSBkb24ndCBoYXZlIENNYWtlIGluc3RhbGxlZCBhbHJlYWR5LCB5b3UgY2FuCi1kb3dubG9hZCBp
dCBmb3IgZnJlZSBmcm9tIDxodHRwOi8vd3d3LmNtYWtlLm9yZy8+LgotCi1DTWFrZSB3b3JrcyBi
eSBnZW5lcmF0aW5nIG5hdGl2ZSBtYWtlZmlsZXMgb3IgYnVpbGQgcHJvamVjdHMgdGhhdCBjYW4K
LWJlIHVzZWQgaW4gdGhlIGNvbXBpbGVyIGVudmlyb25tZW50IG9mIHlvdXIgY2hvaWNlLiAgVGhl
IHR5cGljYWwKLXdvcmtmbG93IHN0YXJ0cyB3aXRoOgotCi0gICAgbWtkaXIgbXlidWlsZCAgICAg
ICAjIENyZWF0ZSBhIGRpcmVjdG9yeSB0byBob2xkIHRoZSBidWlsZCBvdXRwdXQuCi0gICAgY2Qg
bXlidWlsZAotICAgIGNtYWtlICR7R1RFU1RfRElSfSAgIyBHZW5lcmF0ZSBuYXRpdmUgYnVpbGQg
c2NyaXB0cy4KLQotSWYgeW91IHdhbnQgdG8gYnVpbGQgR29vZ2xlIFRlc3QncyBzYW1wbGVzLCB5
b3Ugc2hvdWxkIHJlcGxhY2UgdGhlCi1sYXN0IGNvbW1hbmQgd2l0aAotCi0gICAgY21ha2UgLURn
dGVzdF9idWlsZF9zYW1wbGVzPU9OICR7R1RFU1RfRElSfQotCi1JZiB5b3UgYXJlIG9uIGEgXCpu
aXggc3lzdGVtLCB5b3Ugc2hvdWxkIG5vdyBzZWUgYSBNYWtlZmlsZSBpbiB0aGUKLWN1cnJlbnQg
ZGlyZWN0b3J5LiAgSnVzdCB0eXBlICdtYWtlJyB0byBidWlsZCBndGVzdC4KLQotSWYgeW91IHVz
ZSBXaW5kb3dzIGFuZCBoYXZlIFZpc3VhbCBTdHVkaW8gaW5zdGFsbGVkLCBhIGBndGVzdC5zbG5g
IGZpbGUKLWFuZCBzZXZlcmFsIGAudmNwcm9qYCBmaWxlcyB3aWxsIGJlIGNyZWF0ZWQuICBZb3Ug
Y2FuIHRoZW4gYnVpbGQgdGhlbQotdXNpbmcgVmlzdWFsIFN0dWRpby4KLQotT24gTWFjIE9TIFgg
d2l0aCBYY29kZSBpbnN0YWxsZWQsIGEgYC54Y29kZXByb2pgIGZpbGUgd2lsbCBiZSBnZW5lcmF0
ZWQuCi0KLSMjIyBMZWdhY3kgQnVpbGQgU2NyaXB0cyAjIyMKLQotQmVmb3JlIHNldHRsaW5nIG9u
IENNYWtlLCB3ZSBoYXZlIGJlZW4gcHJvdmlkaW5nIGhhbmQtbWFpbnRhaW5lZCBidWlsZAotcHJv
amVjdHMvc2NyaXB0cyBmb3IgVmlzdWFsIFN0dWRpbywgWGNvZGUsIGFuZCBBdXRvdG9vbHMuICBX
aGlsZSB3ZQotY29udGludWUgdG8gcHJvdmlkZSB0aGVtIGZvciBjb252ZW5pZW5jZSwgdGhleSBh
cmUgbm90IGFjdGl2ZWx5Ci1tYWludGFpbmVkIGFueSBtb3JlLiAgV2UgaGlnaGx5IHJlY29tbWVu
ZCB0aGF0IHlvdSBmb2xsb3cgdGhlCi1pbnN0cnVjdGlvbnMgaW4gdGhlIHByZXZpb3VzIHR3byBz
ZWN0aW9ucyB0byBpbnRlZ3JhdGUgR29vZ2xlIFRlc3QKLXdpdGggeW91ciBleGlzdGluZyBidWls
ZCBzeXN0ZW0uCi0KLUlmIHlvdSBzdGlsbCBuZWVkIHRvIHVzZSB0aGUgbGVnYWN5IGJ1aWxkIHNj
cmlwdHMsIGhlcmUncyBob3c6Ci0KLVRoZSBtc3ZjXCBmb2xkZXIgY29udGFpbnMgdHdvIHNvbHV0
aW9ucyB3aXRoIFZpc3VhbCBDKysgcHJvamVjdHMuCi1PcGVuIHRoZSBgZ3Rlc3Quc2xuYCBvciBg
Z3Rlc3QtbWQuc2xuYCBmaWxlIHVzaW5nIFZpc3VhbCBTdHVkaW8sIGFuZCB5b3UKLWFyZSByZWFk
eSB0byBidWlsZCBHb29nbGUgVGVzdCB0aGUgc2FtZSB3YXkgeW91IGJ1aWxkIGFueSBWaXN1YWwK
LVN0dWRpbyBwcm9qZWN0LiAgRmlsZXMgdGhhdCBoYXZlIG5hbWVzIGVuZGluZyB3aXRoIC1tZCB1
c2UgRExMCi12ZXJzaW9ucyBvZiBNaWNyb3NvZnQgcnVudGltZSBsaWJyYXJpZXMgKHRoZSAvTUQg
b3IgdGhlIC9NRGQgY29tcGlsZXIKLW9wdGlvbikuICBGaWxlcyB3aXRob3V0IHRoYXQgc3VmZml4
IHVzZSBzdGF0aWMgdmVyc2lvbnMgb2YgdGhlIHJ1bnRpbWUKLWxpYnJhcmllcyAodGhlIC9NVCBv
ciB0aGUgL01UZCBvcHRpb24pLiAgUGxlYXNlIG5vdGUgdGhhdCBvbmUgbXVzdCB1c2UKLXRoZSBz
YW1lIG9wdGlvbiB0byBjb21waWxlIGJvdGggZ3Rlc3QgYW5kIHRoZSB0ZXN0IGNvZGUuICBJZiB5
b3UgdXNlCi1WaXN1YWwgU3R1ZGlvIDIwMDUgb3IgYWJvdmUsIHdlIHJlY29tbWVuZCB0aGUgLW1k
IHZlcnNpb24gYXMgL01EIGlzCi10aGUgZGVmYXVsdCBmb3IgbmV3IHByb2plY3RzIGluIHRoZXNl
IHZlcnNpb25zIG9mIFZpc3VhbCBTdHVkaW8uCi0KLU9uIE1hYyBPUyBYLCBvcGVuIHRoZSBgZ3Rl
c3QueGNvZGVwcm9qYCBpbiB0aGUgYHhjb2RlL2AgZm9sZGVyIHVzaW5nCi1YY29kZS4gIEJ1aWxk
IHRoZSAiZ3Rlc3QiIHRhcmdldC4gIFRoZSB1bml2ZXJzYWwgYmluYXJ5IGZyYW1ld29yayB3aWxs
Ci1lbmQgdXAgaW4geW91ciBzZWxlY3RlZCBidWlsZCBkaXJlY3RvcnkgKHNlbGVjdGVkIGluIHRo
ZSBYY29kZQotIlByZWZlcmVuY2VzLi4uIiAtPiAiQnVpbGRpbmciIHBhbmUgYW5kIGRlZmF1bHRz
IHRvIHhjb2RlL2J1aWxkKS4KLUFsdGVybmF0aXZlbHksIGF0IHRoZSBjb21tYW5kIGxpbmUsIGVu
dGVyOgotCi0gICAgeGNvZGVidWlsZAotCi1UaGlzIHdpbGwgYnVpbGQgdGhlICJSZWxlYXNlIiBj
b25maWd1cmF0aW9uIG9mIGd0ZXN0LmZyYW1ld29yayBpbiB5b3VyCi1kZWZhdWx0IGJ1aWxkIGxv
Y2F0aW9uLiAgU2VlIHRoZSAieGNvZGVidWlsZCIgbWFuIHBhZ2UgZm9yIG1vcmUKLWluZm9ybWF0
aW9uIGFib3V0IGJ1aWxkaW5nIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBhbmQgYnVpbGRpbmcg
aW4KLWRpZmZlcmVudCBsb2NhdGlvbnMuCi0KLUlmIHlvdSB3aXNoIHRvIHVzZSB0aGUgR29vZ2xl
IFRlc3QgWGNvZGUgcHJvamVjdCB3aXRoIFhjb2RlIDQueCBhbmQKLWFib3ZlLCB5b3UgbmVlZCB0
byBlaXRoZXI6Ci0KLSAqIHVwZGF0ZSB0aGUgU0RLIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiB4
Y29kZS9Db25maWcvR2VuZXJhbC54Y29uZmlnLgotICAgQ29tbWVudCBvcHRpb25zIGBTREtST09U
YCwgYE1BQ09TX0RFUExPWU1FTlRfVEFSR0VUYCwgYW5kIGBHQ0NfVkVSU0lPTmAuIElmCi0gICB5
b3UgY2hvb3NlIHRoaXMgcm91dGUgeW91IGxvc2UgdGhlIGFiaWxpdHkgdG8gdGFyZ2V0IGVhcmxp
ZXIgdmVyc2lvbnMKLSAgIG9mIE1hY09TIFguCi0gKiBJbnN0YWxsIGFuIFNESyBmb3IgYW4gZWFy
bGllciB2ZXJzaW9uLiBUaGlzIGRvZXNuJ3QgYXBwZWFyIHRvIGJlCi0gICBzdXBwb3J0ZWQgYnkg
QXBwbGUsIGJ1dCBoYXMgYmVlbiByZXBvcnRlZCB0byB3b3JrCi0gICAoaHR0cDovL3N0YWNrb3Zl
cmZsb3cuY29tL3F1ZXN0aW9ucy81Mzc4NTE4KS4KLQotIyMjIFR3ZWFraW5nIEdvb2dsZSBUZXN0
ICMjIwotCi1Hb29nbGUgVGVzdCBjYW4gYmUgdXNlZCBpbiBkaXZlcnNlIGVudmlyb25tZW50cy4g
IFRoZSBkZWZhdWx0Ci1jb25maWd1cmF0aW9uIG1heSBub3Qgd29yayAob3IgbWF5IG5vdCB3b3Jr
IHdlbGwpIG91dCBvZiB0aGUgYm94IGluCi1zb21lIGVudmlyb25tZW50cy4gIEhvd2V2ZXIsIHlv
dSBjYW4gZWFzaWx5IHR3ZWFrIEdvb2dsZSBUZXN0IGJ5Ci1kZWZpbmluZyBjb250cm9sIG1hY3Jv
cyBvbiB0aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lLiAgR2VuZXJhbGx5LAotdGhlc2UgbWFjcm9z
IGFyZSBuYW1lZCBsaWtlIGBHVEVTVF9YWVpgIGFuZCB5b3UgZGVmaW5lIHRoZW0gdG8gZWl0aGVy
IDEKLW9yIDAgdG8gZW5hYmxlIG9yIGRpc2FibGUgYSBjZXJ0YWluIGZlYXR1cmUuCi0KLVdlIGxp
c3QgdGhlIG1vc3QgZnJlcXVlbnRseSB1c2VkIG1hY3JvcyBiZWxvdy4gIEZvciBhIGNvbXBsZXRl
IGxpc3QsCi1zZWUgZmlsZSBbaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1wb3J0LmhdKGlu
Y2x1ZGUvZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtcG9ydC5oKS4KLQotIyMjIENob29zaW5nIGEgVFIx
IFR1cGxlIExpYnJhcnkgIyMjCi0KLVNvbWUgR29vZ2xlIFRlc3QgZmVhdHVyZXMgcmVxdWlyZSB0
aGUgQysrIFRlY2huaWNhbCBSZXBvcnQgMSAoVFIxKQotdHVwbGUgbGlicmFyeSwgd2hpY2ggaXMg
bm90IHlldCBhdmFpbGFibGUgd2l0aCBhbGwgY29tcGlsZXJzLiAgVGhlCi1nb29kIG5ld3MgaXMg
dGhhdCBHb29nbGUgVGVzdCBpbXBsZW1lbnRzIGEgc3Vic2V0IG9mIFRSMSB0dXBsZSB0aGF0J3MK
LWVub3VnaCBmb3IgaXRzIG93biBuZWVkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHVzZSB0aGlz
IHdoZW4gdGhlCi1jb21waWxlciBkb2Vzbid0IHByb3ZpZGUgVFIxIHR1cGxlLgotCi1Vc3VhbGx5
IHlvdSBkb24ndCBuZWVkIHRvIGNhcmUgYWJvdXQgd2hpY2ggdHVwbGUgbGlicmFyeSBHb29nbGUg
VGVzdAotdXNlcy4gIEhvd2V2ZXIsIGlmIHlvdXIgcHJvamVjdCBhbHJlYWR5IHVzZXMgVFIxIHR1
cGxlLCB5b3UgbmVlZCB0bwotdGVsbCBHb29nbGUgVGVzdCB0byB1c2UgdGhlIHNhbWUgVFIxIHR1
cGxlIGxpYnJhcnkgdGhlIHJlc3Qgb2YgeW91cgotcHJvamVjdCB1c2VzLCBvciB0aGUgdHdvIHR1
cGxlIGltcGxlbWVudGF0aW9ucyB3aWxsIGNsYXNoLiAgVG8gZG8KLXRoYXQsIGFkZAotCi0gICAg
LURHVEVTVF9VU0VfT1dOX1RSMV9UVVBMRT0wCi0KLXRvIHRoZSBjb21waWxlciBmbGFncyB3aGls
ZSBjb21waWxpbmcgR29vZ2xlIFRlc3QgYW5kIHlvdXIgdGVzdHMuICBJZgoteW91IHdhbnQgdG8g
Zm9yY2UgR29vZ2xlIFRlc3QgdG8gdXNlIGl0cyBvd24gdHVwbGUgbGlicmFyeSwganVzdCBhZGQK
LQotICAgIC1ER1RFU1RfVVNFX09XTl9UUjFfVFVQTEU9MQotCi10byB0aGUgY29tcGlsZXIgZmxh
Z3MgaW5zdGVhZC4KLQotSWYgeW91IGRvbid0IHdhbnQgR29vZ2xlIFRlc3QgdG8gdXNlIHR1cGxl
IGF0IGFsbCwgYWRkCi0KLSAgICAtREdURVNUX0hBU19UUjFfVFVQTEU9MAotCi1hbmQgYWxsIGZl
YXR1cmVzIHVzaW5nIHR1cGxlIHdpbGwgYmUgZGlzYWJsZWQuCi0KLSMjIyBNdWx0aS10aHJlYWRl
ZCBUZXN0cyAjIyMKLQotR29vZ2xlIFRlc3QgaXMgdGhyZWFkLXNhZmUgd2hlcmUgdGhlIHB0aHJl
YWQgbGlicmFyeSBpcyBhdmFpbGFibGUuCi1BZnRlciBgI2luY2x1ZGUgImd0ZXN0L2d0ZXN0Lmgi
YCwgeW91IGNhbiBjaGVjayB0aGUgYEdURVNUX0lTX1RIUkVBRFNBRkVgCi1tYWNybyB0byBzZWUg
d2hldGhlciB0aGlzIGlzIHRoZSBjYXNlICh5ZXMgaWYgdGhlIG1hY3JvIGlzIGAjZGVmaW5lZGAg
dG8KLTEsIG5vIGlmIGl0J3MgdW5kZWZpbmVkLikuCi0KLUlmIEdvb2dsZSBUZXN0IGRvZXNuJ3Qg
Y29ycmVjdGx5IGRldGVjdCB3aGV0aGVyIHB0aHJlYWQgaXMgYXZhaWxhYmxlCi1pbiB5b3VyIGVu
dmlyb25tZW50LCB5b3UgY2FuIGZvcmNlIGl0IHdpdGgKLQotICAgIC1ER1RFU1RfSEFTX1BUSFJF
QUQ9MQotCi1vcgotCi0gICAgLURHVEVTVF9IQVNfUFRIUkVBRD0wCi0KLVdoZW4gR29vZ2xlIFRl
c3QgdXNlcyBwdGhyZWFkLCB5b3UgbWF5IG5lZWQgdG8gYWRkIGZsYWdzIHRvIHlvdXIKLWNvbXBp
bGVyIGFuZC9vciBsaW5rZXIgdG8gc2VsZWN0IHRoZSBwdGhyZWFkIGxpYnJhcnksIG9yIHlvdSds
bCBnZXQKLWxpbmsgZXJyb3JzLiAgSWYgeW91IHVzZSB0aGUgQ01ha2Ugc2NyaXB0IG9yIHRoZSBk
ZXByZWNhdGVkIEF1dG90b29scwotc2NyaXB0LCB0aGlzIGlzIHRha2VuIGNhcmUgb2YgZm9yIHlv
dS4gIElmIHlvdSB1c2UgeW91ciBvd24gYnVpbGQKLXNjcmlwdCwgeW91J2xsIG5lZWQgdG8gcmVh
ZCB5b3VyIGNvbXBpbGVyIGFuZCBsaW5rZXIncyBtYW51YWwgdG8KLWZpZ3VyZSBvdXQgd2hhdCBm
bGFncyB0byBhZGQuCi0KLSMjIyBBcyBhIFNoYXJlZCBMaWJyYXJ5IChETEwpICMjIwotCi1Hb29n
bGUgVGVzdCBpcyBjb21wYWN0LCBzbyBtb3N0IHVzZXJzIGNhbiBidWlsZCBhbmQgbGluayBpdCBh
cyBhCi1zdGF0aWMgbGlicmFyeSBmb3IgdGhlIHNpbXBsaWNpdHkuICBZb3UgY2FuIGNob29zZSB0
byB1c2UgR29vZ2xlIFRlc3QKLWFzIGEgc2hhcmVkIGxpYnJhcnkgKGtub3duIGFzIGEgRExMIG9u
IFdpbmRvd3MpIGlmIHlvdSBwcmVmZXIuCi0KLVRvIGNvbXBpbGUgKmd0ZXN0KiBhcyBhIHNoYXJl
ZCBsaWJyYXJ5LCBhZGQKLQotICAgIC1ER1RFU1RfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZPTEKLQot
dG8gdGhlIGNvbXBpbGVyIGZsYWdzLiAgWW91J2xsIGFsc28gbmVlZCB0byB0ZWxsIHRoZSBsaW5r
ZXIgdG8gcHJvZHVjZQotYSBzaGFyZWQgbGlicmFyeSBpbnN0ZWFkIC0gY29uc3VsdCB5b3VyIGxp
bmtlcidzIG1hbnVhbCBmb3IgaG93IHRvIGRvCi1pdC4KLQotVG8gY29tcGlsZSB5b3VyICp0ZXN0
cyogdGhhdCB1c2UgdGhlIGd0ZXN0IHNoYXJlZCBsaWJyYXJ5LCBhZGQKLQotICAgIC1ER1RFU1Rf
TElOS0VEX0FTX1NIQVJFRF9MSUJSQVJZPTEKLQotdG8gdGhlIGNvbXBpbGVyIGZsYWdzLgotCi1O
b3RlOiB3aGlsZSB0aGUgYWJvdmUgc3RlcHMgYXJlbid0IHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0
b2RheSB3aGVuCi11c2luZyBzb21lIGNvbXBpbGVycyAoZS5nLiBHQ0MpLCB0aGV5IG1heSBiZWNv
bWUgbmVjZXNzYXJ5IGluIHRoZQotZnV0dXJlLCBpZiB3ZSBkZWNpZGUgdG8gaW1wcm92ZSB0aGUg
c3BlZWQgb2YgbG9hZGluZyB0aGUgbGlicmFyeSAoc2VlCi08aHR0cDovL2djYy5nbnUub3JnL3dp
a2kvVmlzaWJpbGl0eT4gZm9yIGRldGFpbHMpLiAgVGhlcmVmb3JlIHlvdSBhcmUKLXJlY29tbWVu
ZGVkIHRvIGFsd2F5cyBhZGQgdGhlIGFib3ZlIGZsYWdzIHdoZW4gdXNpbmcgR29vZ2xlIFRlc3Qg
YXMgYQotc2hhcmVkIGxpYnJhcnkuICBPdGhlcndpc2UgYSBmdXR1cmUgcmVsZWFzZSBvZiBHb29n
bGUgVGVzdCBtYXkgYnJlYWsKLXlvdXIgYnVpbGQgc2NyaXB0LgotCi0jIyMgQXZvaWRpbmcgTWFj
cm8gTmFtZSBDbGFzaGVzICMjIwotCi1JbiBDKyssIG1hY3JvcyBkb24ndCBvYmV5IG5hbWVzcGFj
ZXMuICBUaGVyZWZvcmUgdHdvIGxpYnJhcmllcyB0aGF0Ci1ib3RoIGRlZmluZSBhIG1hY3JvIG9m
IHRoZSBzYW1lIG5hbWUgd2lsbCBjbGFzaCBpZiB5b3UgYCNpbmNsdWRlYCBib3RoCi1kZWZpbml0
aW9ucy4gIEluIGNhc2UgYSBHb29nbGUgVGVzdCBtYWNybyBjbGFzaGVzIHdpdGggYW5vdGhlcgot
bGlicmFyeSwgeW91IGNhbiBmb3JjZSBHb29nbGUgVGVzdCB0byByZW5hbWUgaXRzIG1hY3JvIHRv
IGF2b2lkIHRoZQotY29uZmxpY3QuCi0KLVNwZWNpZmljYWxseSwgaWYgYm90aCBHb29nbGUgVGVz
dCBhbmQgc29tZSBvdGhlciBjb2RlIGRlZmluZSBtYWNybwotRk9PLCB5b3UgY2FuIGFkZAotCi0g
ICAgLURHVEVTVF9ET05UX0RFRklORV9GT089MQotCi10byB0aGUgY29tcGlsZXIgZmxhZ3MgdG8g
dGVsbCBHb29nbGUgVGVzdCB0byBjaGFuZ2UgdGhlIG1hY3JvJ3MgbmFtZQotZnJvbSBgRk9PYCB0
byBgR1RFU1RfRk9PYC4gIEN1cnJlbnRseSBgRk9PYCBjYW4gYmUgYEZBSUxgLCBgU1VDQ0VFRGAs
Ci1vciBgVEVTVGAuICBGb3IgZXhhbXBsZSwgd2l0aCBgLURHVEVTVF9ET05UX0RFRklORV9URVNU
PTFgLCB5b3UnbGwKLW5lZWQgdG8gd3JpdGUKLQotICAgIEdURVNUX1RFU1QoU29tZVRlc3QsIERv
ZXNUaGlzKSB7IC4uLiB9Ci0KLWluc3RlYWQgb2YKLQotICAgIFRFU1QoU29tZVRlc3QsIERvZXNU
aGlzKSB7IC4uLiB9Ci0KLWluIG9yZGVyIHRvIGRlZmluZSBhIHRlc3QuCi0KLSMjIERldmVsb3Bp
bmcgR29vZ2xlIFRlc3QgIyMKLQotVGhpcyBzZWN0aW9uIGRpc2N1c3NlcyBob3cgdG8gbWFrZSB5
b3VyIG93biBjaGFuZ2VzIHRvIEdvb2dsZSBUZXN0LgotCi0jIyMgVGVzdGluZyBHb29nbGUgVGVz
dCBJdHNlbGYgIyMjCi0KLVRvIG1ha2Ugc3VyZSB5b3VyIGNoYW5nZXMgd29yayBhcyBpbnRlbmRl
ZCBhbmQgZG9uJ3QgYnJlYWsgZXhpc3RpbmcKLWZ1bmN0aW9uYWxpdHksIHlvdSdsbCB3YW50IHRv
IGNvbXBpbGUgYW5kIHJ1biBHb29nbGUgVGVzdCdzIG93biB0ZXN0cy4KLUZvciB0aGF0IHlvdSBj
YW4gdXNlIENNYWtlOgotCi0gICAgbWtkaXIgbXlidWlsZAotICAgIGNkIG15YnVpbGQKLSAgICBj
bWFrZSAtRGd0ZXN0X2J1aWxkX3Rlc3RzPU9OICR7R1RFU1RfRElSfQotCi1NYWtlIHN1cmUgeW91
IGhhdmUgUHl0aG9uIGluc3RhbGxlZCwgYXMgc29tZSBvZiBHb29nbGUgVGVzdCdzIHRlc3RzCi1h
cmUgd3JpdHRlbiBpbiBQeXRob24uICBJZiB0aGUgY21ha2UgY29tbWFuZCBjb21wbGFpbnMgYWJv
dXQgbm90IGJlaW5nCi1hYmxlIHRvIGZpbmQgUHl0aG9uIChgQ291bGQgTk9UIGZpbmQgUHl0aG9u
SW50ZXJwIChtaXNzaW5nOgotUFlUSE9OX0VYRUNVVEFCTEUpYCksIHRyeSB0ZWxsaW5nIGl0IGV4
cGxpY2l0bHkgd2hlcmUgeW91ciBQeXRob24KLWV4ZWN1dGFibGUgY2FuIGJlIGZvdW5kOgotCi0g
ICAgY21ha2UgLURQWVRIT05fRVhFQ1VUQUJMRT1wYXRoL3RvL3B5dGhvbiAtRGd0ZXN0X2J1aWxk
X3Rlc3RzPU9OICR7R1RFU1RfRElSfQotCi1OZXh0LCB5b3UgY2FuIGJ1aWxkIEdvb2dsZSBUZXN0
IGFuZCBhbGwgb2YgaXRzIG93biB0ZXN0cy4gIE9uIFwqbml4LAotdGhpcyBpcyB1c3VhbGx5IGRv
bmUgYnkgJ21ha2UnLiAgVG8gcnVuIHRoZSB0ZXN0cywgZG8KLQotICAgIG1ha2UgdGVzdAotCi1B
bGwgdGVzdHMgc2hvdWxkIHBhc3MuCi0KLU5vcm1hbGx5IHlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5
IGFib3V0IHJlZ2VuZXJhdGluZyB0aGUgc291cmNlIGZpbGVzLAotdW5sZXNzIHlvdSBuZWVkIHRv
IG1vZGlmeSB0aGVtLiAgSW4gdGhhdCBjYXNlLCB5b3Ugc2hvdWxkIG1vZGlmeSB0aGUKLWNvcnJl
c3BvbmRpbmcgLnB1bXAgZmlsZXMgaW5zdGVhZCBhbmQgcnVuIHRoZSBwdW1wLnB5IFB5dGhvbiBz
Y3JpcHQgdG8KLXJlZ2VuZXJhdGUgdGhlbS4gIFlvdSBjYW4gZmluZCBwdW1wLnB5IGluIHRoZSBb
c2NyaXB0cy9dKHNjcmlwdHMvKSBkaXJlY3RvcnkuCi1SZWFkIHRoZSBbUHVtcCBtYW51YWxdKGRv
Y3MvUHVtcE1hbnVhbC5tZCkgZm9yIGhvdyB0byB1c2UgaXQuCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rl
c3QvZ3Rlc3QtZGVhdGgtdGVzdC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LWRlYXRoLXRlc3QuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU2ZmUzOTQzNTUyZGJkYzBhZDBmMzY3OTU1MDIx
NmU1YTNmMzFiYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2lu
Y2x1ZGUvZ3Rlc3QvZ3Rlc3QtZGVhdGgtdGVzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAs
MCBAQAotLy8gQ29weXJpZ2h0IDIwMDUsIEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLy8KLS8v
IEF1dGhvcjogd2FuQGdvb2dsZS5jb20gKFpoYW55b25nIFdhbikKLS8vCi0vLyBUaGUgR29vZ2xl
IEMrKyBUZXN0aW5nIEZyYW1ld29yayAoR29vZ2xlIFRlc3QpCi0vLwotLy8gVGhpcyBoZWFkZXIg
ZmlsZSBkZWZpbmVzIHRoZSBwdWJsaWMgQVBJIGZvciBkZWF0aCB0ZXN0cy4gIEl0IGlzCi0vLyAj
aW5jbHVkZWQgYnkgZ3Rlc3QuaCBzbyBhIHVzZXIgZG9lc24ndCBuZWVkIHRvIGluY2x1ZGUgdGhp
cwotLy8gZGlyZWN0bHkuCi0KLSNpZm5kZWYgR1RFU1RfSU5DTFVERV9HVEVTVF9HVEVTVF9ERUFU
SF9URVNUX0hfCi0jZGVmaW5lIEdURVNUX0lOQ0xVREVfR1RFU1RfR1RFU1RfREVBVEhfVEVTVF9I
XwotCi0jaW5jbHVkZSAiZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtZGVhdGgtdGVzdC1pbnRlcm5hbC5o
IgotCi1uYW1lc3BhY2UgdGVzdGluZyB7Ci0KLS8vIEVYUEVDVF9ERUFUSF9JRl9TVVBQT1JURUQo
c3RhdGVtZW50LCByZWdleCkgYW5kCi0vLyBBU1NFUlRfREVBVEhfSUZfU1VQUE9SVEVEKHN0YXRl
bWVudCwgcmVnZXgpIGV4cGFuZCB0byByZWFsIGRlYXRoIHRlc3RzIGlmCi0vLyBkZWF0aCB0ZXN0
cyBhcmUgc3VwcG9ydGVkOyBvdGhlcndpc2UgdGhleSBqdXN0IGlzc3VlIGEgd2FybmluZy4gIFRo
aXMgaXMKLS8vIHVzZWZ1bCB3aGVuIHlvdSBhcmUgY29tYmluaW5nIGRlYXRoIHRlc3QgYXNzZXJ0
aW9ucyB3aXRoIG5vcm1hbCB0ZXN0Ci0vLyBhc3NlcnRpb25zIGluIG9uZSB0ZXN0LgotIyBkZWZp
bmUgRVhQRUNUX0RFQVRIX0lGX1NVUFBPUlRFRChzdGF0ZW1lbnQsIHJlZ2V4KSBcCi0gICAgR1RF
U1RfVU5TVVBQT1JURURfREVBVEhfVEVTVF8oc3RhdGVtZW50LCByZWdleCwgKQotIyBkZWZpbmUg
QVNTRVJUX0RFQVRIX0lGX1NVUFBPUlRFRChzdGF0ZW1lbnQsIHJlZ2V4KSBcCi0gICAgR1RFU1Rf
VU5TVVBQT1JURURfREVBVEhfVEVTVF8oc3RhdGVtZW50LCByZWdleCwgcmV0dXJuKQotCi19ICAv
LyBuYW1lc3BhY2UgdGVzdGluZwotCi0jZW5kaWYgIC8vIEdURVNUX0lOQ0xVREVfR1RFU1RfR1RF
U1RfREVBVEhfVEVTVF9IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LW1lc3NhZ2UuaCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5j
bHVkZS9ndGVzdC9ndGVzdC1tZXNzYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGZlODc5YmNhNzkyN2FmYWUyNDk5YTYxMzdhYjI2ZjQ5OTFmYmJhY2YuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LW1lc3NhZ2Uu
aAorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAwNSwgR29v
Z2xlIEluYy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8v
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0vLwotLy8gQXV0aG9yOiB3YW5AZ29vZ2xlLmNvbSAoWmhh
bnlvbmcgV2FuKQotLy8KLS8vIFRoZSBHb29nbGUgQysrIFRlc3RpbmcgRnJhbWV3b3JrIChHb29n
bGUgVGVzdCkKLS8vCi0vLyBUaGlzIGhlYWRlciBmaWxlIGRlZmluZXMgdGhlIE1lc3NhZ2UgY2xh
c3MuCi0vLwotLy8gSU1QT1JUQU5UIE5PVEU6IER1ZSB0byBsaW1pdGF0aW9uIG9mIHRoZSBDKysg
bGFuZ3VhZ2UsIHdlIGhhdmUgdG8KLS8vIGxlYXZlIHNvbWUgaW50ZXJuYWwgaW1wbGVtZW50YXRp
b24gZGV0YWlscyBpbiB0aGlzIGhlYWRlciBmaWxlLgotLy8gVGhleSBhcmUgY2xlYXJseSBtYXJr
ZWQgYnkgY29tbWVudHMgbGlrZSB0aGlzOgotLy8KLS8vICAgLy8gSU5URVJOQUwgSU1QTEVNRU5U
QVRJT04gLSBETyBOT1QgVVNFIElOIEEgVVNFUiBQUk9HUkFNLgotLy8KLS8vIFN1Y2ggY29kZSBp
cyBOT1QgbWVhbnQgdG8gYmUgdXNlZCBieSBhIHVzZXIgZGlyZWN0bHksIGFuZCBpcyBzdWJqZWN0
Ci0vLyB0byBDSEFOR0UgV0lUSE9VVCBOT1RJQ0UuICBUaGVyZWZvcmUgRE8gTk9UIERFUEVORCBP
TiBJVCBpbiBhIHVzZXIKLS8vIHByb2dyYW0hCi0KLSNpZm5kZWYgR1RFU1RfSU5DTFVERV9HVEVT
VF9HVEVTVF9NRVNTQUdFX0hfCi0jZGVmaW5lIEdURVNUX0lOQ0xVREVfR1RFU1RfR1RFU1RfTUVT
U0FHRV9IXwotCi0jaW5jbHVkZSA8bGltaXRzPgotCi0jaW5jbHVkZSAiZ3Rlc3QvaW50ZXJuYWwv
Z3Rlc3QtcG9ydC5oIgotCi0vLyBFbnN1cmVzIHRoYXQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG9w
ZXJhdG9yPDwgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuCi0vLyBTZWUgTWVzc2FnZSYgb3BlcmF0
b3I8PCguLi4pIGJlbG93IGZvciB3aHkuCi12b2lkIG9wZXJhdG9yPDwoY29uc3QgdGVzdGluZzo6
aW50ZXJuYWw6OlNlY3JldCYsIGludCk7Ci0KLW5hbWVzcGFjZSB0ZXN0aW5nIHsKLQotLy8gVGhl
IE1lc3NhZ2UgY2xhc3Mgd29ya3MgbGlrZSBhbiBvc3RyZWFtIHJlcGVhdGVyLgotLy8KLS8vIFR5
cGljYWwgdXNhZ2U6Ci0vLwotLy8gICAxLiBZb3Ugc3RyZWFtIGEgYnVuY2ggb2YgdmFsdWVzIHRv
IGEgTWVzc2FnZSBvYmplY3QuCi0vLyAgICAgIEl0IHdpbGwgcmVtZW1iZXIgdGhlIHRleHQgaW4g
YSBzdHJpbmdzdHJlYW0uCi0vLyAgIDIuIFRoZW4geW91IHN0cmVhbSB0aGUgTWVzc2FnZSBvYmpl
Y3QgdG8gYW4gb3N0cmVhbS4KLS8vICAgICAgVGhpcyBjYXVzZXMgdGhlIHRleHQgaW4gdGhlIE1l
c3NhZ2UgdG8gYmUgc3RyZWFtZWQKLS8vICAgICAgdG8gdGhlIG9zdHJlYW0uCi0vLwotLy8gRm9y
IGV4YW1wbGU7Ci0vLwotLy8gICB0ZXN0aW5nOjpNZXNzYWdlIGZvbzsKLS8vICAgZm9vIDw8IDEg
PDwgIiAhPSAiIDw8IDI7Ci0vLyAgIHN0ZDo6Y291dCA8PCBmb287Ci0vLwotLy8gd2lsbCBwcmlu
dCAiMSAhPSAyIi4KLS8vCi0vLyBNZXNzYWdlIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBpbmhlcml0
ZWQgZnJvbS4gIEluIHBhcnRpY3VsYXIsIGl0cwotLy8gZGVzdHJ1Y3RvciBpcyBub3QgdmlydHVh
bC4KLS8vCi0vLyBOb3RlIHRoYXQgc3RyaW5nc3RyZWFtIGJlaGF2ZXMgZGlmZmVyZW50bHkgaW4g
Z2NjIGFuZCBpbiBNU1ZDLiAgWW91Ci0vLyBjYW4gc3RyZWFtIGEgTlVMTCBjaGFyIHBvaW50ZXIg
dG8gaXQgaW4gdGhlIGZvcm1lciwgYnV0IG5vdCBpbiB0aGUKLS8vIGxhdHRlciAoaXQgY2F1c2Vz
IGFuIGFjY2VzcyB2aW9sYXRpb24gaWYgeW91IGRvKS4gIFRoZSBNZXNzYWdlCi0vLyBjbGFzcyBo
aWRlcyB0aGlzIGRpZmZlcmVuY2UgYnkgdHJlYXRpbmcgYSBOVUxMIGNoYXIgcG9pbnRlciBhcwot
Ly8gIihudWxsKSIuCi1jbGFzcyBHVEVTVF9BUElfIE1lc3NhZ2UgewotIHByaXZhdGU6Ci0gIC8v
IFRoZSB0eXBlIG9mIGJhc2ljIElPIG1hbmlwdWxhdG9ycyAoZW5kbCwgZW5kcywgYW5kIGZsdXNo
KSBmb3IKLSAgLy8gbmFycm93IHN0cmVhbXMuCi0gIHR5cGVkZWYgc3RkOjpvc3RyZWFtJiAoKkJh
c2ljTmFycm93SW9NYW5pcCkoc3RkOjpvc3RyZWFtJik7Ci0KLSBwdWJsaWM6Ci0gIC8vIENvbnN0
cnVjdHMgYW4gZW1wdHkgTWVzc2FnZS4KLSAgTWVzc2FnZSgpOwotCi0gIC8vIENvcHkgY29uc3Ry
dWN0b3IuCi0gIE1lc3NhZ2UoY29uc3QgTWVzc2FnZSYgbXNnKSA6IHNzXyhuZXcgOjpzdGQ6OnN0
cmluZ3N0cmVhbSkgeyAgLy8gTk9MSU5UCi0gICAgKnNzXyA8PCBtc2cuR2V0U3RyaW5nKCk7Ci0g
IH0KLQotICAvLyBDb25zdHJ1Y3RzIGEgTWVzc2FnZSBmcm9tIGEgQy1zdHJpbmcuCi0gIGV4cGxp
Y2l0IE1lc3NhZ2UoY29uc3QgY2hhciogc3RyKSA6IHNzXyhuZXcgOjpzdGQ6OnN0cmluZ3N0cmVh
bSkgewotICAgICpzc18gPDwgc3RyOwotICB9Ci0KLSNpZiBHVEVTVF9PU19TWU1CSUFOCi0gIC8v
IFN0cmVhbXMgYSB2YWx1ZSAoZWl0aGVyIGEgcG9pbnRlciBvciBub3QpIHRvIHRoaXMgb2JqZWN0
LgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgaW5saW5lIE1lc3NhZ2UmIG9wZXJhdG9yIDw8
KGNvbnN0IFQmIHZhbHVlKSB7Ci0gICAgU3RyZWFtSGVscGVyKHR5cGVuYW1lIGludGVybmFsOjpp
c19wb2ludGVyPFQ+Ojp0eXBlKCksIHZhbHVlKTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLSNl
bHNlCi0gIC8vIFN0cmVhbXMgYSBub24tcG9pbnRlciB2YWx1ZSB0byB0aGlzIG9iamVjdC4KLSAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIGlubGluZSBNZXNzYWdlJiBvcGVyYXRvciA8PChjb25z
dCBUJiB2YWwpIHsKLSAgICAvLyBTb21lIGxpYnJhcmllcyBvdmVybG9hZCA8PCBmb3IgU1RMIGNv
bnRhaW5lcnMuICBUaGVzZQotICAgIC8vIG92ZXJsb2FkcyBhcmUgZGVmaW5lZCBpbiB0aGUgZ2xv
YmFsIG5hbWVzcGFjZSBpbnN0ZWFkIG9mIDo6c3RkLgotICAgIC8vCi0gICAgLy8gQysrJ3Mgc3lt
Ym9sIGxvb2t1cCBydWxlIChpLmUuIEtvZW5pZyBsb29rdXApIHNheXMgdGhhdCB0aGVzZQotICAg
IC8vIG92ZXJsb2FkcyBhcmUgdmlzaWJsZSBpbiBlaXRoZXIgdGhlIHN0ZCBuYW1lc3BhY2Ugb3Ig
dGhlIGdsb2JhbAotICAgIC8vIG5hbWVzcGFjZSwgYnV0IG5vdCBvdGhlciBuYW1lc3BhY2VzLCBp
bmNsdWRpbmcgdGhlIHRlc3RpbmcKLSAgICAvLyBuYW1lc3BhY2Ugd2hpY2ggR29vZ2xlIFRlc3Qn
cyBNZXNzYWdlIGNsYXNzIGlzIGluLgotICAgIC8vCi0gICAgLy8gVG8gYWxsb3cgU1RMIGNvbnRh
aW5lcnMgKGFuZCBvdGhlciB0eXBlcyB0aGF0IGhhcyBhIDw8IG9wZXJhdG9yCi0gICAgLy8gZGVm
aW5lZCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZSkgdG8gYmUgdXNlZCBpbiBHb29nbGUgVGVzdAot
ICAgIC8vIGFzc2VydGlvbnMsIHRlc3Rpbmc6Ok1lc3NhZ2UgbXVzdCBhY2Nlc3MgdGhlIGN1c3Rv
bSA8PCBvcGVyYXRvcgotICAgIC8vIGZyb20gdGhlIGdsb2JhbCBuYW1lc3BhY2UuICBXaXRoIHRo
aXMgdXNpbmcgZGVjbGFyYXRpb24sCi0gICAgLy8gb3ZlcmxvYWRzIG9mIDw8IGRlZmluZWQgaW4g
dGhlIGdsb2JhbCBuYW1lc3BhY2UgYW5kIHRob3NlCi0gICAgLy8gdmlzaWJsZSB2aWEgS29lbmln
IGxvb2t1cCBhcmUgYm90aCBleHBvc2VkIGluIHRoaXMgZnVuY3Rpb24uCi0gICAgdXNpbmcgOjpv
cGVyYXRvciA8PDsKLSAgICAqc3NfIDw8IHZhbDsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQot
ICAvLyBTdHJlYW1zIGEgcG9pbnRlciB2YWx1ZSB0byB0aGlzIG9iamVjdC4KLSAgLy8KLSAgLy8g
VGhpcyBmdW5jdGlvbiBpcyBhbiBvdmVybG9hZCBvZiB0aGUgcHJldmlvdXMgb25lLiAgV2hlbiB5
b3UKLSAgLy8gc3RyZWFtIGEgcG9pbnRlciB0byBhIE1lc3NhZ2UsIHRoaXMgZGVmaW5pdGlvbiB3
aWxsIGJlIHVzZWQgYXMgaXQKLSAgLy8gaXMgbW9yZSBzcGVjaWFsaXplZC4gIChUaGUgQysrIFN0
YW5kYXJkLCBzZWN0aW9uCi0gIC8vIFt0ZW1wLmZ1bmMub3JkZXJdLikgIElmIHlvdSBzdHJlYW0g
YSBub24tcG9pbnRlciwgdGhlbiB0aGUKLSAgLy8gcHJldmlvdXMgZGVmaW5pdGlvbiB3aWxsIGJl
IHVzZWQuCi0gIC8vCi0gIC8vIFRoZSByZWFzb24gZm9yIHRoaXMgb3ZlcmxvYWQgaXMgdGhhdCBz
dHJlYW1pbmcgYSBOVUxMIHBvaW50ZXIgdG8KLSAgLy8gb3N0cmVhbSBpcyB1bmRlZmluZWQgYmVo
YXZpb3IuICBEZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyLCB5b3UKLSAgLy8gbWF5IGdldCAiMCIs
ICIobmlsKSIsICIobnVsbCkiLCBvciBhbiBhY2Nlc3MgdmlvbGF0aW9uLiAgVG8KLSAgLy8gZW5z
dXJlIGNvbnNpc3RlbnQgcmVzdWx0IGFjcm9zcyBjb21waWxlcnMsIHdlIGFsd2F5cyB0cmVhdCBO
VUxMCi0gIC8vIGFzICIobnVsbCkiLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgaW5saW5l
IE1lc3NhZ2UmIG9wZXJhdG9yIDw8KFQqIGNvbnN0JiBwb2ludGVyKSB7ICAvLyBOT0xJTlQKLSAg
ICBpZiAocG9pbnRlciA9PSBOVUxMKSB7Ci0gICAgICAqc3NfIDw8ICIobnVsbCkiOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAqc3NfIDw8IHBvaW50ZXI7Ci0gICAgfQotICAgIHJldHVybiAqdGhpczsK
LSAgfQotI2VuZGlmICAvLyBHVEVTVF9PU19TWU1CSUFOCi0KLSAgLy8gU2luY2UgdGhlIGJhc2lj
IElPIG1hbmlwdWxhdG9ycyBhcmUgb3ZlcmxvYWRlZCBmb3IgYm90aCBuYXJyb3cKLSAgLy8gYW5k
IHdpZGUgc3RyZWFtcywgd2UgaGF2ZSB0byBwcm92aWRlIHRoaXMgc3BlY2lhbGl6ZWQgZGVmaW5p
dGlvbgotICAvLyBvZiBvcGVyYXRvciA8PCwgZXZlbiB0aG91Z2ggaXRzIGJvZHkgaXMgdGhlIHNh
bWUgYXMgdGhlCi0gIC8vIHRlbXBsYXRpemVkIHZlcnNpb24gYWJvdmUuICBXaXRob3V0IHRoaXMg
ZGVmaW5pdGlvbiwgc3RyZWFtaW5nCi0gIC8vIGVuZGwgb3Igb3RoZXIgYmFzaWMgSU8gbWFuaXB1
bGF0b3JzIHRvIE1lc3NhZ2Ugd2lsbCBjb25mdXNlIHRoZQotICAvLyBjb21waWxlci4KLSAgTWVz
c2FnZSYgb3BlcmF0b3IgPDwoQmFzaWNOYXJyb3dJb01hbmlwIHZhbCkgewotICAgICpzc18gPDwg
dmFsOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIC8vIEluc3RlYWQgb2YgMS8wLCB3ZSB3
YW50IHRvIHNlZSB0cnVlL2ZhbHNlIGZvciBib29sIHZhbHVlcy4KLSAgTWVzc2FnZSYgb3BlcmF0
b3IgPDwoYm9vbCBiKSB7Ci0gICAgcmV0dXJuICp0aGlzIDw8IChiID8gInRydWUiIDogImZhbHNl
Iik7Ci0gIH0KLQotICAvLyBUaGVzZSB0d28gb3ZlcmxvYWRzIGFsbG93IHN0cmVhbWluZyBhIHdp
ZGUgQyBzdHJpbmcgdG8gYSBNZXNzYWdlCi0gIC8vIHVzaW5nIHRoZSBVVEYtOCBlbmNvZGluZy4K
LSAgTWVzc2FnZSYgb3BlcmF0b3IgPDwoY29uc3Qgd2NoYXJfdCogd2lkZV9jX3N0cik7Ci0gIE1l
c3NhZ2UmIG9wZXJhdG9yIDw8KHdjaGFyX3QqIHdpZGVfY19zdHIpOwotCi0jaWYgR1RFU1RfSEFT
X1NURF9XU1RSSU5HCi0gIC8vIENvbnZlcnRzIHRoZSBnaXZlbiB3aWRlIHN0cmluZyB0byBhIG5h
cnJvdyBzdHJpbmcgdXNpbmcgdGhlIFVURi04Ci0gIC8vIGVuY29kaW5nLCBhbmQgc3RyZWFtcyB0
aGUgcmVzdWx0IHRvIHRoaXMgTWVzc2FnZSBvYmplY3QuCi0gIE1lc3NhZ2UmIG9wZXJhdG9yIDw8
KGNvbnN0IDo6c3RkOjp3c3RyaW5nJiB3c3RyKTsKLSNlbmRpZiAgLy8gR1RFU1RfSEFTX1NURF9X
U1RSSU5HCi0KLSNpZiBHVEVTVF9IQVNfR0xPQkFMX1dTVFJJTkcKLSAgLy8gQ29udmVydHMgdGhl
IGdpdmVuIHdpZGUgc3RyaW5nIHRvIGEgbmFycm93IHN0cmluZyB1c2luZyB0aGUgVVRGLTgKLSAg
Ly8gZW5jb2RpbmcsIGFuZCBzdHJlYW1zIHRoZSByZXN1bHQgdG8gdGhpcyBNZXNzYWdlIG9iamVj
dC4KLSAgTWVzc2FnZSYgb3BlcmF0b3IgPDwoY29uc3QgOjp3c3RyaW5nJiB3c3RyKTsKLSNlbmRp
ZiAgLy8gR1RFU1RfSEFTX0dMT0JBTF9XU1RSSU5HCi0KLSAgLy8gR2V0cyB0aGUgdGV4dCBzdHJl
YW1lZCB0byB0aGlzIG9iamVjdCBzbyBmYXIgYXMgYW4gc3RkOjpzdHJpbmcuCi0gIC8vIEVhY2gg
J1wwJyBjaGFyYWN0ZXIgaW4gdGhlIGJ1ZmZlciBpcyByZXBsYWNlZCB3aXRoICJcXDAiLgotICAv
LwotICAvLyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiAtIERPIE5PVCBVU0UgSU4gQSBVU0VSIFBS
T0dSQU0uCi0gIHN0ZDo6c3RyaW5nIEdldFN0cmluZygpIGNvbnN0OwotCi0gcHJpdmF0ZToKLQot
I2lmIEdURVNUX09TX1NZTUJJQU4KLSAgLy8gVGhlc2UgYXJlIG5lZWRlZCBhcyB0aGUgTm9raWEg
U3ltYmlhbiBDb21waWxlciBjYW5ub3QgZGVjaWRlIGJldHdlZW4KLSAgLy8gY29uc3QgVCYgYW5k
IGNvbnN0IFQqIGluIGEgZnVuY3Rpb24gdGVtcGxhdGUuIFRoZSBOb2tpYSBjb21waWxlciBfY2Fu
XwotICAvLyBkZWNpZGUgYmV0d2VlbiBjbGFzcyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMgZm9y
IFQgYW5kIFQqLCBzbyBhCi0gIC8vIHRyMTo6dHlwZV90cmFpdHMtbGlrZSBpc19wb2ludGVyIHdv
cmtzLCBhbmQgd2UgY2FuIG92ZXJsb2FkIG9uIHRoYXQuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgotICBpbmxpbmUgdm9pZCBTdHJlYW1IZWxwZXIoaW50ZXJuYWw6OnRydWVfdHlwZSAvKmlzX3Bv
aW50ZXIqLywgVCogcG9pbnRlcikgewotICAgIGlmIChwb2ludGVyID09IE5VTEwpIHsKLSAgICAg
ICpzc18gPDwgIihudWxsKSI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICpzc18gPDwgcG9pbnRlcjsK
LSAgICB9Ci0gIH0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIGlubGluZSB2b2lkIFN0cmVh
bUhlbHBlcihpbnRlcm5hbDo6ZmFsc2VfdHlwZSAvKmlzX3BvaW50ZXIqLywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFQmIHZhbHVlKSB7Ci0gICAgLy8gU2VlIHRoZSBjb21tZW50
cyBpbiBNZXNzYWdlJiBvcGVyYXRvciA8PChjb25zdCBUJikgYWJvdmUgZm9yIHdoeQotICAgIC8v
IHdlIG5lZWQgdGhpcyB1c2luZyBzdGF0ZW1lbnQuCi0gICAgdXNpbmcgOjpvcGVyYXRvciA8PDsK
LSAgICAqc3NfIDw8IHZhbHVlOwotICB9Ci0jZW5kaWYgIC8vIEdURVNUX09TX1NZTUJJQU4KLQot
ICAvLyBXZSdsbCBob2xkIHRoZSB0ZXh0IHN0cmVhbWVkIHRvIHRoaXMgb2JqZWN0IGhlcmUuCi0g
IGNvbnN0IGludGVybmFsOjpzY29wZWRfcHRyPCA6OnN0ZDo6c3RyaW5nc3RyZWFtPiBzc187Ci0K
LSAgLy8gV2UgZGVjbGFyZSAoYnV0IGRvbid0IGltcGxlbWVudCkgdGhpcyB0byBwcmV2ZW50IHRo
ZSBjb21waWxlcgotICAvLyBmcm9tIGltcGxlbWVudGluZyB0aGUgYXNzaWdubWVudCBvcGVyYXRv
ci4KLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgTWVzc2FnZSYpOwotfTsKLQotLy8gU3RyZWFtcyBh
IE1lc3NhZ2UgdG8gYW4gb3N0cmVhbS4KLWlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8
KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IE1lc3NhZ2UmIHNiKSB7Ci0gIHJldHVybiBvcyA8PCBz
Yi5HZXRTdHJpbmcoKTsKLX0KLQotbmFtZXNwYWNlIGludGVybmFsIHsKLQotLy8gQ29udmVydHMg
YSBzdHJlYW1hYmxlIHZhbHVlIHRvIGFuIHN0ZDo6c3RyaW5nLiAgQSBOVUxMIHBvaW50ZXIgaXMK
LS8vIGNvbnZlcnRlZCB0byAiKG51bGwpIi4gIFdoZW4gdGhlIGlucHV0IHZhbHVlIGlzIGEgOjpz
dHJpbmcsCi0vLyA6OnN0ZDo6c3RyaW5nLCA6OndzdHJpbmcsIG9yIDo6c3RkOjp3c3RyaW5nIG9i
amVjdCwgZWFjaCBOVUwKLS8vIGNoYXJhY3RlciBpbiBpdCBpcyByZXBsYWNlZCB3aXRoICJcXDAi
LgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGQ6OnN0cmluZyBTdHJlYW1hYmxlVG9TdHJpbmco
Y29uc3QgVCYgc3RyZWFtYWJsZSkgewotICByZXR1cm4gKE1lc3NhZ2UoKSA8PCBzdHJlYW1hYmxl
KS5HZXRTdHJpbmcoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1l
c3BhY2UgdGVzdGluZwotCi0jZW5kaWYgIC8vIEdURVNUX0lOQ0xVREVfR1RFU1RfR1RFU1RfTUVT
U0FHRV9IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkv
Z3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LXBhcmFtLXRlc3QuaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVkZS9n
dGVzdC9ndGVzdC1wYXJhbS10ZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAz
OGY5YmE3OWViMzAzNzdmMTY1ZDhhMDIwMGQ0NzUwZDM0OWI4ZTcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LXBhcmFtLXRlc3Qu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE0NDQgKzAsMCBAQAotLy8gVGhpcyBmaWxlIHdhcyBHRU5F
UkFURUQgYnkgY29tbWFuZDoKLS8vICAgICBwdW1wLnB5IGd0ZXN0LXBhcmFtLXRlc3QuaC5wdW1w
Ci0vLyBETyBOT1QgRURJVCBCWSBIQU5EISEhCi0KLS8vIENvcHlyaWdodCAyMDA4LCBHb29nbGUg
SW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLS8vCi0vLyBBdXRob3JzOiB2bGFkbEBnb29nbGUuY29tIChWbGFk
IExvc2V2KQotLy8KLS8vIE1hY3JvcyBhbmQgZnVuY3Rpb25zIGZvciBpbXBsZW1lbnRpbmcgcGFy
YW1ldGVyaXplZCB0ZXN0cwotLy8gaW4gR29vZ2xlIEMrKyBUZXN0aW5nIEZyYW1ld29yayAoR29v
Z2xlIFRlc3QpCi0vLwotLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBhIFNDUklQVC4gIERP
IE5PVCBFRElUIEJZIEhBTkQhCi0vLwotI2lmbmRlZiBHVEVTVF9JTkNMVURFX0dURVNUX0dURVNU
X1BBUkFNX1RFU1RfSF8KLSNkZWZpbmUgR1RFU1RfSU5DTFVERV9HVEVTVF9HVEVTVF9QQVJBTV9U
RVNUX0hfCi0KLQotLy8gVmFsdWUtcGFyYW1ldGVyaXplZCB0ZXN0cyBhbGxvdyB5b3UgdG8gdGVz
dCB5b3VyIGNvZGUgd2l0aCBkaWZmZXJlbnQKLS8vIHBhcmFtZXRlcnMgd2l0aG91dCB3cml0aW5n
IG11bHRpcGxlIGNvcGllcyBvZiB0aGUgc2FtZSB0ZXN0LgotLy8KLS8vIEhlcmUgaXMgaG93IHlv
dSB1c2UgdmFsdWUtcGFyYW1ldGVyaXplZCB0ZXN0czoKLQotI2lmIDAKLQotLy8gVG8gd3JpdGUg
dmFsdWUtcGFyYW1ldGVyaXplZCB0ZXN0cywgZmlyc3QgeW91IHNob3VsZCBkZWZpbmUgYSBmaXh0
dXJlCi0vLyBjbGFzcy4gSXQgaXMgdXN1YWxseSBkZXJpdmVkIGZyb20gdGVzdGluZzo6VGVzdFdp
dGhQYXJhbTxUPiAoc2VlIGJlbG93IGZvcgotLy8gYW5vdGhlciBpbmhlcml0YW5jZSBzY2hlbWUg
dGhhdCdzIHNvbWV0aW1lcyB1c2VmdWwgaW4gbW9yZSBjb21wbGljYXRlZAotLy8gY2xhc3MgaGll
cmFyY2hpZXMpLCB3aGVyZSB0aGUgdHlwZSBvZiB5b3VyIHBhcmFtZXRlciB2YWx1ZXMuCi0vLyBU
ZXN0V2l0aFBhcmFtPFQ+IGlzIGl0c2VsZiBkZXJpdmVkIGZyb20gdGVzdGluZzo6VGVzdC4gVCBj
YW4gYmUgYW55Ci0vLyBjb3B5YWJsZSB0eXBlLiBJZiBpdCdzIGEgcmF3IHBvaW50ZXIsIHlvdSBh
cmUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZQotLy8gbGlmZXNwYW4gb2YgdGhlIHBvaW50
ZWQgdmFsdWVzLgotCi1jbGFzcyBGb29UZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdFdpdGhQ
YXJhbTxjb25zdCBjaGFyKj4gewotICAvLyBZb3UgY2FuIGltcGxlbWVudCBhbGwgdGhlIHVzdWFs
IGNsYXNzIGZpeHR1cmUgbWVtYmVycyBoZXJlLgotfTsKLQotLy8gVGhlbiwgdXNlIHRoZSBURVNU
X1AgbWFjcm8gdG8gZGVmaW5lIGFzIG1hbnkgcGFyYW1ldGVyaXplZCB0ZXN0cwotLy8gZm9yIHRo
aXMgZml4dHVyZSBhcyB5b3Ugd2FudC4gVGhlIF9QIHN1ZmZpeCBpcyBmb3IgInBhcmFtZXRlcml6
ZWQiCi0vLyBvciAicGF0dGVybiIsIHdoaWNoZXZlciB5b3UgcHJlZmVyIHRvIHRoaW5rLgotCi1U
RVNUX1AoRm9vVGVzdCwgRG9lc0JsYWgpIHsKLSAgLy8gSW5zaWRlIGEgdGVzdCwgYWNjZXNzIHRo
ZSB0ZXN0IHBhcmFtZXRlciB3aXRoIHRoZSBHZXRQYXJhbSgpIG1ldGhvZAotICAvLyBvZiB0aGUg
VGVzdFdpdGhQYXJhbTxUPiBjbGFzczoKLSAgRVhQRUNUX1RSVUUoZm9vLkJsYWgoR2V0UGFyYW0o
KSkpOwotICAuLi4KLX0KLQotVEVTVF9QKEZvb1Rlc3QsIEhhc0JsYWhCbGFoKSB7Ci0gIC4uLgot
fQotCi0vLyBGaW5hbGx5LCB5b3UgY2FuIHVzZSBJTlNUQU5USUFURV9URVNUX0NBU0VfUCB0byBp
bnN0YW50aWF0ZSB0aGUgdGVzdAotLy8gY2FzZSB3aXRoIGFueSBzZXQgb2YgcGFyYW1ldGVycyB5
b3Ugd2FudC4gR29vZ2xlIFRlc3QgZGVmaW5lcyBhIG51bWJlcgotLy8gb2YgZnVuY3Rpb25zIGZv
ciBnZW5lcmF0aW5nIHRlc3QgcGFyYW1ldGVycy4gVGhleSByZXR1cm4gd2hhdCB3ZSBjYWxsCi0v
LyAoc3VycHJpc2UhKSBwYXJhbWV0ZXIgZ2VuZXJhdG9ycy4gSGVyZSBpcyBhICBzdW1tYXJ5IG9m
IHRoZW0sIHdoaWNoCi0vLyBhcmUgYWxsIGluIHRoZSB0ZXN0aW5nIG5hbWVzcGFjZToKLS8vCi0v
LwotLy8gIFJhbmdlKGJlZ2luLCBlbmQgWywgc3RlcF0pIC0gWWllbGRzIHZhbHVlcyB7YmVnaW4s
IGJlZ2luK3N0ZXAsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbitzdGVw
K3N0ZXAsIC4uLn0uIFRoZSB2YWx1ZXMgZG8gbm90Ci0vLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNsdWRlIGVuZC4gc3RlcCBkZWZhdWx0cyB0byAxLgotLy8gIFZhbHVlcyh2MSwg
djIsIC4uLiwgdk4pICAgIC0gWWllbGRzIHZhbHVlcyB7djEsIHYyLCAuLi4sIHZOfS4KLS8vICBW
YWx1ZXNJbihjb250YWluZXIpICAgICAgICAtIFlpZWxkcyB2YWx1ZXMgZnJvbSBhIEMtc3R5bGUg
YXJyYXksIGFuIFNUTAotLy8gIFZhbHVlc0luKGJlZ2luLGVuZCkgICAgICAgICAgY29udGFpbmVy
LCBvciBhbiBpdGVyYXRvciByYW5nZSBbYmVnaW4sIGVuZCkuCi0vLyAgQm9vbCgpICAgICAgICAg
ICAgICAgICAgICAgLSBZaWVsZHMgc2VxdWVuY2Uge2ZhbHNlLCB0cnVlfS4KLS8vICBDb21iaW5l
KGcxLCBnMiwgLi4uLCBnTikgICAtIFlpZWxkcyBhbGwgY29tYmluYXRpb25zICh0aGUgQ2FydGVz
aWFuIHByb2R1Y3QKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgbWF0
aCBzYXZ2eSkgb2YgdGhlIHZhbHVlcyBnZW5lcmF0ZWQKLS8vICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJ5IHRoZSBOIGdlbmVyYXRvcnMuCi0vLwotLy8gRm9yIG1vcmUgZGV0YWlscywg
c2VlIGNvbW1lbnRzIGF0IHRoZSBkZWZpbml0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMgYmVsb3cK
LS8vIGluIHRoaXMgZmlsZS4KLS8vCi0vLyBUaGUgZm9sbG93aW5nIHN0YXRlbWVudCB3aWxsIGlu
c3RhbnRpYXRlIHRlc3RzIGZyb20gdGhlIEZvb1Rlc3QgdGVzdCBjYXNlCi0vLyBlYWNoIHdpdGgg
cGFyYW1ldGVyIHZhbHVlcyAibWVlbnkiLCAibWlueSIsIGFuZCAibW9lIi4KLQotSU5TVEFOVElB
VEVfVEVTVF9DQVNFX1AoSW5zdGFudGlhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBGb29UZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVzKCJtZWVueSIsICJtaW55
IiwgIm1vZSIpKTsKLQotLy8gVG8gZGlzdGluZ3Vpc2ggZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0
aGUgcGF0dGVybiwgKHllcywgeW91Ci0vLyBjYW4gaW5zdGFudGlhdGUgaXQgbW9yZSB0aGVuIG9u
Y2UpIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUKLS8vIElOU1RBTlRJQVRFX1RFU1RfQ0FTRV9Q
IG1hY3JvIGlzIGEgcHJlZml4IHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUKLS8vIGFjdHVhbCB0
ZXN0IGNhc2UgbmFtZS4gUmVtZW1iZXIgdG8gcGljayB1bmlxdWUgcHJlZml4ZXMgZm9yIGRpZmZl
cmVudAotLy8gaW5zdGFudGlhdGlvbnMuIFRoZSB0ZXN0cyBmcm9tIHRoZSBpbnN0YW50aWF0aW9u
IGFib3ZlIHdpbGwgaGF2ZQotLy8gdGhlc2UgbmFtZXM6Ci0vLwotLy8gICAgKiBJbnN0YW50aWF0
aW9uTmFtZS9Gb29UZXN0LkRvZXNCbGFoLzAgZm9yICJtZWVueSIKLS8vICAgICogSW5zdGFudGlh
dGlvbk5hbWUvRm9vVGVzdC5Eb2VzQmxhaC8xIGZvciAibWlueSIKLS8vICAgICogSW5zdGFudGlh
dGlvbk5hbWUvRm9vVGVzdC5Eb2VzQmxhaC8yIGZvciAibW9lIgotLy8gICAgKiBJbnN0YW50aWF0
aW9uTmFtZS9Gb29UZXN0Lkhhc0JsYWhCbGFoLzAgZm9yICJtZWVueSIKLS8vICAgICogSW5zdGFu
dGlhdGlvbk5hbWUvRm9vVGVzdC5IYXNCbGFoQmxhaC8xIGZvciAibWlueSIKLS8vICAgICogSW5z
dGFudGlhdGlvbk5hbWUvRm9vVGVzdC5IYXNCbGFoQmxhaC8yIGZvciAibW9lIgotLy8KLS8vIFlv
dSBjYW4gdXNlIHRoZXNlIG5hbWVzIGluIC0tZ3Rlc3RfZmlsdGVyLgotLy8KLS8vIFRoaXMgc3Rh
dGVtZW50IHdpbGwgaW5zdGFudGlhdGUgYWxsIHRlc3RzIGZyb20gRm9vVGVzdCBhZ2FpbiwgZWFj
aAotLy8gd2l0aCBwYXJhbWV0ZXIgdmFsdWVzICJjYXQiIGFuZCAiZG9nIjoKLQotY29uc3QgY2hh
ciogcGV0c1tdID0geyJjYXQiLCAiZG9nIn07Ci1JTlNUQU5USUFURV9URVNUX0NBU0VfUChBbm90
aGVySW5zdGFudGlhdGlvbk5hbWUsIEZvb1Rlc3QsIFZhbHVlc0luKHBldHMpKTsKLQotLy8gVGhl
IHRlc3RzIGZyb20gdGhlIGluc3RhbnRpYXRpb24gYWJvdmUgd2lsbCBoYXZlIHRoZXNlIG5hbWVz
OgotLy8KLS8vICAgICogQW5vdGhlckluc3RhbnRpYXRpb25OYW1lL0Zvb1Rlc3QuRG9lc0JsYWgv
MCBmb3IgImNhdCIKLS8vICAgICogQW5vdGhlckluc3RhbnRpYXRpb25OYW1lL0Zvb1Rlc3QuRG9l
c0JsYWgvMSBmb3IgImRvZyIKLS8vICAgICogQW5vdGhlckluc3RhbnRpYXRpb25OYW1lL0Zvb1Rl
c3QuSGFzQmxhaEJsYWgvMCBmb3IgImNhdCIKLS8vICAgICogQW5vdGhlckluc3RhbnRpYXRpb25O
YW1lL0Zvb1Rlc3QuSGFzQmxhaEJsYWgvMSBmb3IgImRvZyIKLS8vCi0vLyBQbGVhc2Ugbm90ZSB0
aGF0IElOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QIHdpbGwgaW5zdGFudGlhdGUgYWxsIHRlc3RzCi0v
LyBpbiB0aGUgZ2l2ZW4gdGVzdCBjYXNlLCB3aGV0aGVyIHRoZWlyIGRlZmluaXRpb25zIGNvbWUg
YmVmb3JlIG9yCi0vLyBBRlRFUiB0aGUgSU5TVEFOVElBVEVfVEVTVF9DQVNFX1Agc3RhdGVtZW50
LgotLy8KLS8vIFBsZWFzZSBhbHNvIG5vdGUgdGhhdCBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgKGlu
Y2x1ZGluZyBwYXJhbWV0ZXJzIHRvIHRoZQotLy8gZ2VuZXJhdG9ycykgYXJlIGV2YWx1YXRlZCBp
biBJbml0R29vZ2xlVGVzdCgpLCBhZnRlciBtYWluKCkgaGFzIHN0YXJ0ZWQuCi0vLyBUaGlzIGFs
bG93cyB0aGUgdXNlciBvbiBvbmUgaGFuZCwgdG8gYWRqdXN0IGdlbmVyYXRvciBwYXJhbWV0ZXJz
IGluIG9yZGVyCi0vLyB0byBkeW5hbWljYWxseSBkZXRlcm1pbmUgYSBzZXQgb2YgdGVzdHMgdG8g
cnVuIGFuZCBvbiB0aGUgb3RoZXIgaGFuZCwKLS8vIGdpdmUgdGhlIHVzZXIgYSBjaGFuY2UgdG8g
aW5zcGVjdCB0aGUgZ2VuZXJhdGVkIHRlc3RzIHdpdGggR29vZ2xlIFRlc3QKLS8vIHJlZmxlY3Rp
b24gQVBJIGJlZm9yZSBSVU5fQUxMX1RFU1RTKCkgaXMgZXhlY3V0ZWQuCi0vLwotLy8gWW91IGNh
biBzZWUgc2FtcGxlcy9zYW1wbGU3X3VuaXR0ZXN0LmNjIGFuZCBzYW1wbGVzL3NhbXBsZThfdW5p
dHRlc3QuY2MKLS8vIGZvciBtb3JlIGV4YW1wbGVzLgotLy8KLS8vIEluIHRoZSBmdXR1cmUsIHdl
IHBsYW4gdG8gcHVibGlzaCB0aGUgQVBJIGZvciBkZWZpbmluZyBuZXcgcGFyYW1ldGVyCi0vLyBn
ZW5lcmF0b3JzLiBCdXQgZm9yIG5vdyB0aGlzIGludGVyZmFjZSByZW1haW5zIHBhcnQgb2YgdGhl
IGludGVybmFsCi0vLyBpbXBsZW1lbnRhdGlvbiBhbmQgaXMgc3ViamVjdCB0byBjaGFuZ2UuCi0v
LwotLy8KLS8vIEEgcGFyYW1ldGVyaXplZCB0ZXN0IGZpeHR1cmUgbXVzdCBiZSBkZXJpdmVkIGZy
b20gdGVzdGluZzo6VGVzdCBhbmQgZnJvbQotLy8gdGVzdGluZzo6V2l0aFBhcmFtSW50ZXJmYWNl
PFQ+LCB3aGVyZSBUIGlzIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIKLS8vIHZhbHVlcy4gSW5o
ZXJpdGluZyBmcm9tIFRlc3RXaXRoUGFyYW08VD4gc2F0aXNmaWVzIHRoYXQgcmVxdWlyZW1lbnQg
YmVjYXVzZQotLy8gVGVzdFdpdGhQYXJhbTxUPiBpbmhlcml0cyBmcm9tIGJvdGggVGVzdCBhbmQg
V2l0aFBhcmFtSW50ZXJmYWNlLiBJbiBtb3JlCi0vLyBjb21wbGljYXRlZCBoaWVyYXJjaGllcywg
aG93ZXZlciwgaXQgaXMgb2NjYXNpb25hbGx5IHVzZWZ1bCB0byBpbmhlcml0Ci0vLyBzZXBhcmF0
ZWx5IGZyb20gVGVzdCBhbmQgV2l0aFBhcmFtSW50ZXJmYWNlLiBGb3IgZXhhbXBsZToKLQotY2xh
c3MgQmFzZVRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKLSAgLy8gWW91IGNhbiBpbmhl
cml0IGFsbCB0aGUgdXN1YWwgbWVtYmVycyBmb3IgYSBub24tcGFyYW1ldGVyaXplZCB0ZXN0Ci0g
IC8vIGZpeHR1cmUgaGVyZS4KLX07Ci0KLWNsYXNzIERlcml2ZWRUZXN0IDogcHVibGljIEJhc2VU
ZXN0LCBwdWJsaWMgOjp0ZXN0aW5nOjpXaXRoUGFyYW1JbnRlcmZhY2U8aW50PiB7Ci0gIC8vIFRo
ZSB1c3VhbCB0ZXN0IGZpeHR1cmUgbWVtYmVycyBnbyBoZXJlIHRvby4KLX07Ci0KLVRFU1RfRihC
YXNlVGVzdCwgSGFzRm9vKSB7Ci0gIC8vIFRoaXMgaXMgYW4gb3JkaW5hcnkgbm9uLXBhcmFtZXRl
cml6ZWQgdGVzdC4KLX0KLQotVEVTVF9QKERlcml2ZWRUZXN0LCBEb2VzQmxhaCkgewotICAvLyBH
ZXRQYXJhbSB3b3JrcyBqdXN0IHRoZSBzYW1lIGhlcmUgYXMgaWYgeW91IGluaGVyaXQgZnJvbSBU
ZXN0V2l0aFBhcmFtLgotICBFWFBFQ1RfVFJVRShmb28uQmxhaChHZXRQYXJhbSgpKSk7Ci19Ci0K
LSNlbmRpZiAgLy8gMAotCi0jaW5jbHVkZSAiZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtcG9ydC5oIgot
Ci0jaWYgIUdURVNUX09TX1NZTUJJQU4KLSMgaW5jbHVkZSA8dXRpbGl0eT4KLSNlbmRpZgotCi0v
LyBzY3JpcHRzL2Z1c2VfZ3Rlc3QucHkgZGVwZW5kcyBvbiBndGVzdCdzIG93biBoZWFkZXIgYmVp
bmcgI2luY2x1ZGVkCi0vLyAqdW5jb25kaXRpb25hbGx5Ki4gIFRoZXJlZm9yZSB0aGVzZSAjaW5j
bHVkZXMgY2Fubm90IGJlIG1vdmVkCi0vLyBpbnNpZGUgI2lmIEdURVNUX0hBU19QQVJBTV9URVNU
LgotI2luY2x1ZGUgImd0ZXN0L2ludGVybmFsL2d0ZXN0LWludGVybmFsLmgiCi0jaW5jbHVkZSAi
Z3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtcGFyYW0tdXRpbC5oIgotI2luY2x1ZGUgImd0ZXN0L2ludGVy
bmFsL2d0ZXN0LXBhcmFtLXV0aWwtZ2VuZXJhdGVkLmgiCi0KLSNpZiBHVEVTVF9IQVNfUEFSQU1f
VEVTVAotCi1uYW1lc3BhY2UgdGVzdGluZyB7Ci0KLS8vIEZ1bmN0aW9ucyBwcm9kdWNpbmcgcGFy
YW1ldGVyIGdlbmVyYXRvcnMuCi0vLwotLy8gR29vZ2xlIFRlc3QgdXNlcyB0aGVzZSBnZW5lcmF0
b3JzIHRvIHByb2R1Y2UgcGFyYW1ldGVycyBmb3IgdmFsdWUtCi0vLyBwYXJhbWV0ZXJpemVkIHRl
c3RzLiBXaGVuIGEgcGFyYW1ldGVyaXplZCB0ZXN0IGNhc2UgaXMgaW5zdGFudGlhdGVkCi0vLyB3
aXRoIGEgcGFydGljdWxhciBnZW5lcmF0b3IsIEdvb2dsZSBUZXN0IGNyZWF0ZXMgYW5kIHJ1bnMg
dGVzdHMKLS8vIGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIHNlcXVlbmNlIHByb2R1Y2VkIGJ5IHRo
ZSBnZW5lcmF0b3IuCi0vLwotLy8gSW4gdGhlIGZvbGxvd2luZyBzYW1wbGUsIHRlc3RzIGZyb20g
dGVzdCBjYXNlIEZvb1Rlc3QgYXJlIGluc3RhbnRpYXRlZAotLy8gZWFjaCB0aHJlZSB0aW1lcyB3
aXRoIHBhcmFtZXRlciB2YWx1ZXMgMywgNSwgYW5kIDg6Ci0vLwotLy8gY2xhc3MgRm9vVGVzdCA6
IHB1YmxpYyBUZXN0V2l0aFBhcmFtPGludD4geyAuLi4gfTsKLS8vCi0vLyBURVNUX1AoRm9vVGVz
dCwgVGVzdFRoaXMpIHsKLS8vIH0KLS8vIFRFU1RfUChGb29UZXN0LCBUZXN0VGhhdCkgewotLy8g
fQotLy8gSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoVGVzdFNlcXVlbmNlLCBGb29UZXN0LCBWYWx1
ZXMoMywgNSwgOCkpOwotLy8KLQotLy8gUmFuZ2UoKSByZXR1cm5zIGdlbmVyYXRvcnMgcHJvdmlk
aW5nIHNlcXVlbmNlcyBvZiB2YWx1ZXMgaW4gYSByYW5nZS4KLS8vCi0vLyBTeW5vcHNpczoKLS8v
IFJhbmdlKHN0YXJ0LCBlbmQpCi0vLyAgIC0gcmV0dXJucyBhIGdlbmVyYXRvciBwcm9kdWNpbmcg
YSBzZXF1ZW5jZSBvZiB2YWx1ZXMge3N0YXJ0LCBzdGFydCsxLAotLy8gICAgIHN0YXJ0KzIsIC4u
LiwgfS4KLS8vIFJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApCi0vLyAgIC0gcmV0dXJucyBhIGdlbmVy
YXRvciBwcm9kdWNpbmcgYSBzZXF1ZW5jZSBvZiB2YWx1ZXMge3N0YXJ0LCBzdGFydCtzdGVwLAot
Ly8gICAgIHN0YXJ0K3N0ZXArc3RlcCwgLi4uLCB9LgotLy8gTm90ZXM6Ci0vLyAgICogVGhlIGdl
bmVyYXRlZCBzZXF1ZW5jZXMgbmV2ZXIgaW5jbHVkZSBlbmQuIEZvciBleGFtcGxlLCBSYW5nZSgx
LCA1KQotLy8gICAgIHJldHVybnMgYSBnZW5lcmF0b3IgcHJvZHVjaW5nIGEgc2VxdWVuY2UgezEs
IDIsIDMsIDR9LiBSYW5nZSgxLCA5LCAyKQotLy8gICAgIHJldHVybnMgYSBnZW5lcmF0b3IgcHJv
ZHVjaW5nIHsxLCAzLCA1LCA3fS4KLS8vICAgKiBzdGFydCBhbmQgZW5kIG11c3QgaGF2ZSB0aGUg
c2FtZSB0eXBlLiBUaGF0IHR5cGUgbWF5IGJlIGFueSBpbnRlZ3JhbCBvcgotLy8gICAgIGZsb2F0
aW5nLXBvaW50IHR5cGUgb3IgYSB1c2VyIGRlZmluZWQgdHlwZSBzYXRpc2Z5aW5nIHRoZXNlIGNv
bmRpdGlvbnM6Ci0vLyAgICAgKiBJdCBtdXN0IGJlIGFzc2lnbmFibGUgKGhhdmUgb3BlcmF0b3I9
KCkgZGVmaW5lZCkuCi0vLyAgICAgKiBJdCBtdXN0IGhhdmUgb3BlcmF0b3IrKCkgKG9wZXJhdG9y
KyhpbnQtY29tcGF0aWJsZSB0eXBlKSBmb3IKLS8vICAgICAgIHR3by1vcGVyYW5kIHZlcnNpb24p
LgotLy8gICAgICogSXQgbXVzdCBoYXZlIG9wZXJhdG9yPCgpIGRlZmluZWQuCi0vLyAgICAgRWxl
bWVudHMgaW4gdGhlIHJlc3VsdGluZyBzZXF1ZW5jZXMgd2lsbCBhbHNvIGhhdmUgdGhhdCB0eXBl
LgotLy8gICAqIENvbmRpdGlvbiBzdGFydCA8IGVuZCBtdXN0IGJlIHNhdGlzZmllZCBpbiBvcmRl
ciBmb3IgcmVzdWx0aW5nIHNlcXVlbmNlcwotLy8gICAgIHRvIGNvbnRhaW4gYW55IGVsZW1lbnRz
LgotLy8KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBJbmNyZW1lbnRUPgotaW50ZXJu
YWw6OlBhcmFtR2VuZXJhdG9yPFQ+IFJhbmdlKFQgc3RhcnQsIFQgZW5kLCBJbmNyZW1lbnRUIHN0
ZXApIHsKLSAgcmV0dXJuIGludGVybmFsOjpQYXJhbUdlbmVyYXRvcjxUPigKLSAgICAgIG5ldyBp
bnRlcm5hbDo6UmFuZ2VHZW5lcmF0b3I8VCwgSW5jcmVtZW50VD4oc3RhcnQsIGVuZCwgc3RlcCkp
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWludGVybmFsOjpQYXJhbUdlbmVyYXRvcjxU
PiBSYW5nZShUIHN0YXJ0LCBUIGVuZCkgewotICByZXR1cm4gUmFuZ2Uoc3RhcnQsIGVuZCwgMSk7
Ci19Ci0KLS8vIFZhbHVlc0luKCkgZnVuY3Rpb24gYWxsb3dzIGdlbmVyYXRpb24gb2YgdGVzdHMg
d2l0aCBwYXJhbWV0ZXJzIGNvbWluZyBmcm9tCi0vLyBhIGNvbnRhaW5lci4KLS8vCi0vLyBTeW5v
cHNpczoKLS8vIFZhbHVlc0luKGNvbnN0IFQgKCZhcnJheSlbTl0pCi0vLyAgIC0gcmV0dXJucyBh
IGdlbmVyYXRvciBwcm9kdWNpbmcgc2VxdWVuY2VzIHdpdGggZWxlbWVudHMgZnJvbQotLy8gICAg
IGEgQy1zdHlsZSBhcnJheS4KLS8vIFZhbHVlc0luKGNvbnN0IENvbnRhaW5lciYgY29udGFpbmVy
KQotLy8gICAtIHJldHVybnMgYSBnZW5lcmF0b3IgcHJvZHVjaW5nIHNlcXVlbmNlcyB3aXRoIGVs
ZW1lbnRzIGZyb20KLS8vICAgICBhbiBTVEwtc3R5bGUgY29udGFpbmVyLgotLy8gVmFsdWVzSW4o
SXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKLS8vICAgLSByZXR1cm5zIGEgZ2VuZXJhdG9y
IHByb2R1Y2luZyBzZXF1ZW5jZXMgd2l0aCBlbGVtZW50cyBmcm9tCi0vLyAgICAgYSByYW5nZSBb
YmVnaW4sIGVuZCkgZGVmaW5lZCBieSBhIHBhaXIgb2YgU1RMLXN0eWxlIGl0ZXJhdG9ycy4gVGhl
c2UKLS8vICAgICBpdGVyYXRvcnMgY2FuIGFsc28gYmUgcGxhaW4gQyBwb2ludGVycy4KLS8vCi0v
LyBQbGVhc2Ugbm90ZSB0aGF0IFZhbHVlc0luIGNvcGllcyB0aGUgdmFsdWVzIGZyb20gdGhlIGNv
bnRhaW5lcnMKLS8vIHBhc3NlZCBpbiBhbmQga2VlcHMgdGhlbSB0byBnZW5lcmF0ZSB0ZXN0cyBp
biBSVU5fQUxMX1RFU1RTKCkuCi0vLwotLy8gRXhhbXBsZXM6Ci0vLwotLy8gVGhpcyBpbnN0YW50
aWF0ZXMgdGVzdHMgZnJvbSB0ZXN0IGNhc2UgU3RyaW5nVGVzdAotLy8gZWFjaCB3aXRoIEMtc3Ry
aW5nIHZhbHVlcyBvZiAiZm9vIiwgImJhciIsIGFuZCAiYmF6IjoKLS8vCi0vLyBjb25zdCBjaGFy
KiBzdHJpbmdzW10gPSB7ImZvbyIsICJiYXIiLCAiYmF6In07Ci0vLyBJTlNUQU5USUFURV9URVNU
X0NBU0VfUChTdHJpbmdTZXF1ZW5jZSwgU3J0aW5nVGVzdCwgVmFsdWVzSW4oc3RyaW5ncykpOwot
Ly8KLS8vIFRoaXMgaW5zdGFudGlhdGVzIHRlc3RzIGZyb20gdGVzdCBjYXNlIFN0bFN0cmluZ1Rl
c3QKLS8vIGVhY2ggd2l0aCBTVEwgc3RyaW5ncyB3aXRoIHZhbHVlcyAiYSIgYW5kICJiIjoKLS8v
Ci0vLyA6OnN0ZDo6dmVjdG9yPCA6OnN0ZDo6c3RyaW5nPiBHZXRQYXJhbWV0ZXJTdHJpbmdzKCkg
ewotLy8gICA6OnN0ZDo6dmVjdG9yPCA6OnN0ZDo6c3RyaW5nPiB2OwotLy8gICB2LnB1c2hfYmFj
aygiYSIpOwotLy8gICB2LnB1c2hfYmFjaygiYiIpOwotLy8gICByZXR1cm4gdjsKLS8vIH0KLS8v
Ci0vLyBJTlNUQU5USUFURV9URVNUX0NBU0VfUChDaGFyU2VxdWVuY2UsCi0vLyAgICAgICAgICAg
ICAgICAgICAgICAgICBTdGxTdHJpbmdUZXN0LAotLy8gICAgICAgICAgICAgICAgICAgICAgICAg
VmFsdWVzSW4oR2V0UGFyYW1ldGVyU3RyaW5ncygpKSk7Ci0vLwotLy8KLS8vIFRoaXMgd2lsbCBh
bHNvIGluc3RhbnRpYXRlIHRlc3RzIGZyb20gQ2hhclRlc3QKLS8vIGVhY2ggd2l0aCBwYXJhbWV0
ZXIgdmFsdWVzICdhJyBhbmQgJ2InOgotLy8KLS8vIDo6c3RkOjpsaXN0PGNoYXI+IEdldFBhcmFt
ZXRlckNoYXJzKCkgewotLy8gICA6OnN0ZDo6bGlzdDxjaGFyPiBsaXN0OwotLy8gICBsaXN0LnB1
c2hfYmFjaygnYScpOwotLy8gICBsaXN0LnB1c2hfYmFjaygnYicpOwotLy8gICByZXR1cm4gbGlz
dDsKLS8vIH0KLS8vIDo6c3RkOjpsaXN0PGNoYXI+IGwgPSBHZXRQYXJhbWV0ZXJDaGFycygpOwot
Ly8gSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoQ2hhclNlcXVlbmNlMiwKLS8vICAgICAgICAgICAg
ICAgICAgICAgICAgIENoYXJUZXN0LAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVz
SW4obC5iZWdpbigpLCBsLmVuZCgpKSk7Ci0vLwotdGVtcGxhdGUgPHR5cGVuYW1lIEZvcndhcmRJ
dGVyYXRvcj4KLWludGVybmFsOjpQYXJhbUdlbmVyYXRvcjwKLSAgdHlwZW5hbWUgOjp0ZXN0aW5n
OjppbnRlcm5hbDo6SXRlcmF0b3JUcmFpdHM8Rm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4K
LVZhbHVlc0luKEZvcndhcmRJdGVyYXRvciBiZWdpbiwgRm9yd2FyZEl0ZXJhdG9yIGVuZCkgewot
ICB0eXBlZGVmIHR5cGVuYW1lIDo6dGVzdGluZzo6aW50ZXJuYWw6Okl0ZXJhdG9yVHJhaXRzPEZv
cndhcmRJdGVyYXRvcj4KLSAgICAgIDo6dmFsdWVfdHlwZSBQYXJhbVR5cGU7Ci0gIHJldHVybiBp
bnRlcm5hbDo6UGFyYW1HZW5lcmF0b3I8UGFyYW1UeXBlPigKLSAgICAgIG5ldyBpbnRlcm5hbDo6
VmFsdWVzSW5JdGVyYXRvclJhbmdlR2VuZXJhdG9yPFBhcmFtVHlwZT4oYmVnaW4sIGVuZCkpOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+Ci1pbnRlcm5hbDo6UGFyYW1HZW5l
cmF0b3I8VD4gVmFsdWVzSW4oY29uc3QgVCAoJmFycmF5KVtOXSkgewotICByZXR1cm4gVmFsdWVz
SW4oYXJyYXksIGFycmF5ICsgTik7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+Ci1p
bnRlcm5hbDo6UGFyYW1HZW5lcmF0b3I8dHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlPiBW
YWx1ZXNJbigKLSAgICBjb25zdCBDb250YWluZXImIGNvbnRhaW5lcikgewotICByZXR1cm4gVmFs
dWVzSW4oY29udGFpbmVyLmJlZ2luKCksIGNvbnRhaW5lci5lbmQoKSk7Ci19Ci0KLS8vIFZhbHVl
cygpIGFsbG93cyBnZW5lcmF0aW5nIHRlc3RzIGZyb20gZXhwbGljaXRseSBzcGVjaWZpZWQgbGlz
dCBvZgotLy8gcGFyYW1ldGVycy4KLS8vCi0vLyBTeW5vcHNpczoKLS8vIFZhbHVlcyhUIHYxLCBU
IHYyLCAuLi4sIFQgdk4pCi0vLyAgIC0gcmV0dXJucyBhIGdlbmVyYXRvciBwcm9kdWNpbmcgc2Vx
dWVuY2VzIHdpdGggZWxlbWVudHMgdjEsIHYyLCAuLi4sIHZOLgotLy8KLS8vIEZvciBleGFtcGxl
LCB0aGlzIGluc3RhbnRpYXRlcyB0ZXN0cyBmcm9tIHRlc3QgY2FzZSBCYXJUZXN0IGVhY2gKLS8v
IHdpdGggdmFsdWVzICJvbmUiLCAidHdvIiwgYW5kICJ0aHJlZSI6Ci0vLwotLy8gSU5TVEFOVElB
VEVfVEVTVF9DQVNFX1AoTnVtU2VxdWVuY2UsIEJhclRlc3QsIFZhbHVlcygib25lIiwgInR3byIs
ICJ0aHJlZSIpKTsKLS8vCi0vLyBUaGlzIGluc3RhbnRpYXRlcyB0ZXN0cyBmcm9tIHRlc3QgY2Fz
ZSBCYXpUZXN0IGVhY2ggd2l0aCB2YWx1ZXMgMSwgMiwgMy41LgotLy8gVGhlIGV4YWN0IHR5cGUg
b2YgdmFsdWVzIHdpbGwgZGVwZW5kIG9uIHRoZSB0eXBlIG9mIHBhcmFtZXRlciBpbiBCYXpUZXN0
LgotLy8KLS8vIElOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKEZsb2F0aW5nTnVtYmVycywgQmF6VGVz
dCwgVmFsdWVzKDEsIDIsIDMuNSkpOwotLy8KLS8vIEN1cnJlbnRseSwgVmFsdWVzKCkgc3VwcG9y
dHMgZnJvbSAxIHRvIDUwIHBhcmFtZXRlcnMuCi0vLwotdGVtcGxhdGUgPHR5cGVuYW1lIFQxPgot
aW50ZXJuYWw6OlZhbHVlQXJyYXkxPFQxPiBWYWx1ZXMoVDEgdjEpIHsKLSAgcmV0dXJuIGludGVy
bmFsOjpWYWx1ZUFycmF5MTxUMT4odjEpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5
cGVuYW1lIFQyPgotaW50ZXJuYWw6OlZhbHVlQXJyYXkyPFQxLCBUMj4gVmFsdWVzKFQxIHYxLCBU
MiB2MikgewotICByZXR1cm4gaW50ZXJuYWw6OlZhbHVlQXJyYXkyPFQxLCBUMj4odjEsIHYyKTsK
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDM+Ci1p
bnRlcm5hbDo6VmFsdWVBcnJheTM8VDEsIFQyLCBUMz4gVmFsdWVzKFQxIHYxLCBUMiB2MiwgVDMg
djMpIHsKLSAgcmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5MzxUMSwgVDIsIFQzPih2MSwgdjIs
IHYzKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUg
VDMsIHR5cGVuYW1lIFQ0PgotaW50ZXJuYWw6OlZhbHVlQXJyYXk0PFQxLCBUMiwgVDMsIFQ0PiBW
YWx1ZXMoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQpIHsKLSAgcmV0dXJuIGludGVybmFsOjpW
YWx1ZUFycmF5NDxUMSwgVDIsIFQzLCBUND4odjEsIHYyLCB2MywgdjQpOwotfQotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5
cGVuYW1lIFQ1PgotaW50ZXJuYWw6OlZhbHVlQXJyYXk1PFQxLCBUMiwgVDMsIFQ0LCBUNT4gVmFs
dWVzKFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LAotICAgIFQ1IHY1KSB7Ci0gIHJldHVybiBp
bnRlcm5hbDo6VmFsdWVBcnJheTU8VDEsIFQyLCBUMywgVDQsIFQ1Pih2MSwgdjIsIHYzLCB2NCwg
djUpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBU
MywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2PgotaW50ZXJuYWw6
OlZhbHVlQXJyYXk2PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDY+IFZhbHVlcyhUMSB2MSwgVDIgdjIs
IFQzIHYzLAotICAgIFQ0IHY0LCBUNSB2NSwgVDYgdjYpIHsKLSAgcmV0dXJuIGludGVybmFsOjpW
YWx1ZUFycmF5NjxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2Pih2MSwgdjIsIHYzLCB2NCwgdjUsIHY2
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMs
IHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDc+
Ci1pbnRlcm5hbDo6VmFsdWVBcnJheTc8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDc+IFZhbHVl
cyhUMSB2MSwgVDIgdjIsIFQzIHYzLAotICAgIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3KSB7
Ci0gIHJldHVybiBpbnRlcm5hbDo6VmFsdWVBcnJheTc8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwg
VDc+KHYxLCB2MiwgdjMsIHY0LCB2NSwKLSAgICAgIHY2LCB2Nyk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5h
bWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOD4KLWludGVy
bmFsOjpWYWx1ZUFycmF5ODxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDg+IFZhbHVlcyhU
MSB2MSwgVDIgdjIsCi0gICAgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2
OCkgewotICByZXR1cm4gaW50ZXJuYWw6OlZhbHVlQXJyYXk4PFQxLCBUMiwgVDMsIFQ0LCBUNSwg
VDYsIFQ3LCBUOD4odjEsIHYyLCB2MywgdjQsCi0gICAgICB2NSwgdjYsIHY3LCB2OCk7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFt
ZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFt
ZSBUOCwgdHlwZW5hbWUgVDk+Ci1pbnRlcm5hbDo6VmFsdWVBcnJheTk8VDEsIFQyLCBUMywgVDQs
IFQ1LCBUNiwgVDcsIFQ4LCBUOT4gVmFsdWVzKFQxIHYxLCBUMiB2MiwKLSAgICBUMyB2MywgVDQg
djQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSkgewotICByZXR1cm4gaW50ZXJu
YWw6OlZhbHVlQXJyYXk5PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDk+KHYxLCB2
MiwgdjMsCi0gICAgICB2NCwgdjUsIHY2LCB2NywgdjgsIHY5KTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFt
ZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFt
ZSBUOSwgdHlwZW5hbWUgVDEwPgotaW50ZXJuYWw6OlZhbHVlQXJyYXkxMDxUMSwgVDIsIFQzLCBU
NCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTA+IFZhbHVlcyhUMSB2MSwKLSAgICBUMiB2MiwgVDMg
djMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2OCwgVDkgdjksIFQxMCB2MTApIHsK
LSAgcmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5MTA8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwg
VDcsIFQ4LCBUOSwgVDEwPih2MSwKLSAgICAgIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2
OSwgdjEwKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h
bWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5h
bWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVu
YW1lIFQxMT4KLWludGVybmFsOjpWYWx1ZUFycmF5MTE8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwg
VDcsIFQ4LCBUOSwgVDEwLAotICAgIFQxMT4gVmFsdWVzKFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0
IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2OCwgVDkgdjksCi0gICAgVDEwIHYxMCwgVDEx
IHYxMSkgewotICByZXR1cm4gaW50ZXJuYWw6OlZhbHVlQXJyYXkxMTxUMSwgVDIsIFQzLCBUNCwg
VDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsCi0gICAgICBUMTE+KHYxLCB2MiwgdjMsIHY0LCB2NSwg
djYsIHY3LCB2OCwgdjksIHYxMCwgdjExKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0
eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5h
bWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyPgotaW50ZXJuYWw6OlZhbHVl
QXJyYXkxMjxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwKLSAg
ICBUMTI+IFZhbHVlcyhUMSB2MSwgVDIgdjIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBU
NyB2NywgVDggdjgsIFQ5IHY5LAotICAgIFQxMCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIpIHsKLSAg
cmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5MTI8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcs
IFQ4LCBUOSwgVDEwLCBUMTEsCi0gICAgICBUMTI+KHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3
LCB2OCwgdjksIHYxMCwgdjExLCB2MTIpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5
cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5
cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFt
ZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMz4KLWlu
dGVybmFsOjpWYWx1ZUFycmF5MTM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwg
VDEwLCBUMTEsIFQxMiwKLSAgICBUMTM+IFZhbHVlcyhUMSB2MSwgVDIgdjIsIFQzIHYzLCBUNCB2
NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LAotICAgIFQxMCB2MTAsIFQxMSB2
MTEsIFQxMiB2MTIsIFQxMyB2MTMpIHsKLSAgcmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5MTM8
VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsCi0gICAgICBUMTIs
IFQxMz4odjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwg
djEzKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUg
VDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUg
VDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1l
IFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxND4KLWludGVybmFs
OjpWYWx1ZUFycmF5MTQ8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBU
MTEsIFQxMiwgVDEzLAotICAgIFQxND4gVmFsdWVzKFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0
LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2OCwgVDkgdjksCi0gICAgVDEwIHYxMCwgVDExIHYx
MSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYxNCkgewotICByZXR1cm4gaW50ZXJuYWw6OlZhbHVl
QXJyYXkxNDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwKLSAg
ICAgIFQxMiwgVDEzLCBUMTQ+KHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYx
MCwgdjExLCB2MTIsIHYxMywKLSAgICAgIHYxNCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
MSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0g
ICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5
cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEz
LCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNT4KLWludGVybmFsOjpWYWx1ZUFycmF5MTU8VDEs
IFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLAotICAg
IFQxNCwgVDE1PiBWYWx1ZXMoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2
NiwgVDcgdjcsIFQ4IHY4LAotICAgIFQ5IHY5LCBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBU
MTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1KSB7Ci0gIHJldHVybiBpbnRlcm5hbDo6VmFsdWVBcnJh
eTE1PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLAotICAgICAg
VDEyLCBUMTMsIFQxNCwgVDE1Pih2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIHY5LCB2
MTAsIHYxMSwgdjEyLAotICAgICAgdjEzLCB2MTQsIHYxNSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUg
VDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUg
VDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5h
bWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTY+Ci1p
bnRlcm5hbDo6VmFsdWVBcnJheTE2PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDks
IFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICBUMTQsIFQxNSwgVDE2PiBWYWx1ZXMoVDEgdjEsIFQy
IHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsCi0gICAgVDggdjgsIFQ5IHY5
LCBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LAot
ICAgIFQxNiB2MTYpIHsKLSAgcmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5MTY8VDEsIFQyLCBU
MywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsCi0gICAgICBUMTIsIFQxMywgVDE0
LCBUMTUsIFQxNj4odjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEs
Ci0gICAgICB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNik7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUs
Ci0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDks
IHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUg
VDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVu
YW1lIFQxNz4KLWludGVybmFsOjpWYWx1ZUFycmF5MTc8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwg
VDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLAotICAgIFQxNCwgVDE1LCBUMTYsIFQxNz4g
VmFsdWVzKFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LAot
ICAgIFQ4IHY4LCBUOSB2OSwgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0
IHYxNCwgVDE1IHYxNSwKLSAgICBUMTYgdjE2LCBUMTcgdjE3KSB7Ci0gIHJldHVybiBpbnRlcm5h
bDo6VmFsdWVBcnJheTE3PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwg
VDExLAotICAgICAgVDEyLCBUMTMsIFQxNCwgVDE1LCBUMTYsIFQxNz4odjEsIHYyLCB2MywgdjQs
IHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLAotICAgICAgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUs
IHYxNiwgdjE3KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlw
ZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlw
ZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5
cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlw
ZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTg+
Ci1pbnRlcm5hbDo6VmFsdWVBcnJheTE4PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwg
VDksIFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOD4gVmFs
dWVzKFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsCi0gICAgVDcgdjcs
IFQ4IHY4LCBUOSB2OSwgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYx
NCwgVDE1IHYxNSwKLSAgICBUMTYgdjE2LCBUMTcgdjE3LCBUMTggdjE4KSB7Ci0gIHJldHVybiBp
bnRlcm5hbDo6VmFsdWVBcnJheTE4PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDks
IFQxMCwgVDExLAotICAgICAgVDEyLCBUMTMsIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4Pih2MSwg
djIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIHY5LAotICAgICAgdjEwLCB2MTEsIHYxMiwgdjEz
LCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwg
dHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAg
dHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVu
YW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0
eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQx
NywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTk+Ci1pbnRlcm5hbDo6VmFsdWVBcnJheTE5PFQx
LCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywKLSAg
ICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5PiBWYWx1ZXMoVDEgdjEsIFQyIHYyLCBUMyB2
MywgVDQgdjQsIFQ1IHY1LAotICAgIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LCBUMTAgdjEw
LCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LAotICAgIFQxNSB2MTUsIFQxNiB2
MTYsIFQxNyB2MTcsIFQxOCB2MTgsIFQxOSB2MTkpIHsKLSAgcmV0dXJuIGludGVybmFsOjpWYWx1
ZUFycmF5MTk8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsCi0g
ICAgICBUMTIsIFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOT4odjEsIHYyLCB2Mywg
djQsIHY1LCB2NiwgdjcsIHY4LAotICAgICAgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2
MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlw
ZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1l
IFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBl
bmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywg
dHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMD4KLWludGVybmFsOjpWYWx1
ZUFycmF5MjA8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQx
MiwgVDEzLAotICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMD4gVmFsdWVzKFQx
IHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LAotICAgIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4
LCBUOSB2OSwgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywKLSAgICBUMTQgdjE0
LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3LCBUMTggdjE4LCBUMTkgdjE5LCBUMjAgdjIwKSB7
Ci0gIHJldHVybiBpbnRlcm5hbDo6VmFsdWVBcnJheTIwPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYs
IFQ3LCBUOCwgVDksIFQxMCwgVDExLAotICAgICAgVDEyLCBUMTMsIFQxNCwgVDE1LCBUMTYsIFQx
NywgVDE4LCBUMTksIFQyMD4odjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsCi0gICAgICB2OCwg
djksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIw
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMs
IHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcs
IHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQx
MSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1
LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1l
IFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMT4KLWludGVybmFsOjpWYWx1ZUFy
cmF5MjE8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwg
VDEzLAotICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxPiBWYWx1ZXMo
VDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsCi0gICAgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDgg
djgsIFQ5IHY5LCBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLAotICAgIFQxNCB2
MTQsIFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2MTcsIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAs
IFQyMSB2MjEpIHsKLSAgcmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5MjE8VDEsIFQyLCBUMywg
VDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsCi0gICAgICBUMTIsIFQxMywgVDE0LCBU
MTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjE+KHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYs
Ci0gICAgICB2NywgdjgsIHY5LCB2MTAsIHYxMSwgdjEyLCB2MTMsIHYxNCwgdjE1LCB2MTYsIHYx
NywgdjE4LCB2MTksIHYyMCwgdjIxKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBl
bmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBl
bmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUg
VDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVu
YW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0
eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQy
MSwgdHlwZW5hbWUgVDIyPgotaW50ZXJuYWw6OlZhbHVlQXJyYXkyMjxUMSwgVDIsIFQzLCBUNCwg
VDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgVDE0LCBUMTUsIFQx
NiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMj4gVmFsdWVzKFQxIHYxLCBUMiB2MiwgVDMg
djMsCi0gICAgVDQgdjQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwgVDEwIHYx
MCwgVDExIHYxMSwgVDEyIHYxMiwKLSAgICBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYg
djE2LCBUMTcgdjE3LCBUMTggdjE4LCBUMTkgdjE5LCBUMjAgdjIwLAotICAgIFQyMSB2MjEsIFQy
MiB2MjIpIHsKLSAgcmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5MjI8VDEsIFQyLCBUMywgVDQs
IFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsCi0gICAgICBUMTIsIFQxMywgVDE0LCBUMTUs
IFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMj4odjEsIHYyLCB2MywgdjQsCi0gICAg
ICB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwg
djE3LCB2MTgsIHYxOSwKLSAgICAgIHYyMCwgdjIxLCB2MjIpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1l
IFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1l
IFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVu
YW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0
eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0g
ICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMz4KLWludGVybmFsOjpW
YWx1ZUFycmF5MjM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEs
IFQxMiwgVDEzLAotICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBU
MjIsIFQyMz4gVmFsdWVzKFQxIHYxLCBUMiB2MiwKLSAgICBUMyB2MywgVDQgdjQsIFQ1IHY1LCBU
NiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwKLSAg
ICBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3LCBUMTggdjE4LCBU
MTkgdjE5LCBUMjAgdjIwLAotICAgIFQyMSB2MjEsIFQyMiB2MjIsIFQyMyB2MjMpIHsKLSAgcmV0
dXJuIGludGVybmFsOjpWYWx1ZUFycmF5MjM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4
LCBUOSwgVDEwLCBUMTEsCi0gICAgICBUMTIsIFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgs
IFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzPih2MSwgdjIsIHYzLAotICAgICAgdjQsIHY1LCB2Niwg
djcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwg
djE5LAotICAgICAgdjIwLCB2MjEsIHYyMiwgdjIzKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwK
LSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwg
dHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBU
MTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5h
bWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5
cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyND4KLWlu
dGVybmFsOjpWYWx1ZUFycmF5MjQ8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwg
VDEwLCBUMTEsIFQxMiwgVDEzLAotICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQy
MCwgVDIxLCBUMjIsIFQyMywgVDI0PiBWYWx1ZXMoVDEgdjEsIFQyIHYyLAotICAgIFQzIHYzLCBU
NCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LCBUMTAgdjEwLCBUMTEgdjEx
LCBUMTIgdjEyLAotICAgIFQxMyB2MTMsIFQxNCB2MTQsIFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2
MTcsIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsCi0gICAgVDIxIHYyMSwgVDIyIHYyMiwgVDIz
IHYyMywgVDI0IHYyNCkgewotICByZXR1cm4gaW50ZXJuYWw6OlZhbHVlQXJyYXkyNDxUMSwgVDIs
IFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwKLSAgICAgIFQxMiwgVDEzLCBU
MTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyND4odjEs
IHYyLAotICAgICAgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYx
MywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsCi0gICAgICB2MTksIHYyMCwgdjIxLCB2MjIsIHYy
MywgdjI0KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h
bWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5h
bWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVu
YW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5h
bWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5
cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIy
LCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1PgotaW50ZXJuYWw6OlZh
bHVlQXJyYXkyNTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwg
VDEyLCBUMTMsCi0gICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQy
MiwgVDIzLCBUMjQsIFQyNT4gVmFsdWVzKFQxIHYxLAotICAgIFQyIHYyLCBUMyB2MywgVDQgdjQs
IFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwgVDEwIHYxMCwgVDExIHYxMSwKLSAg
ICBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3LCBU
MTggdjE4LCBUMTkgdjE5LAotICAgIFQyMCB2MjAsIFQyMSB2MjEsIFQyMiB2MjIsIFQyMyB2MjMs
IFQyNCB2MjQsIFQyNSB2MjUpIHsKLSAgcmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5MjU8VDEs
IFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsCi0gICAgICBUMTIsIFQx
MywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQs
IFQyNT4odjEsCi0gICAgICB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjEx
LCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LAotICAgICAgdjE4LCB2MTksIHYyMCwgdjIx
LCB2MjIsIHYyMywgdjI0LCB2MjUpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVu
YW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVu
YW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBU
MTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5h
bWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5
cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIx
LCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUs
Ci0gICAgdHlwZW5hbWUgVDI2PgotaW50ZXJuYWw6OlZhbHVlQXJyYXkyNjxUMSwgVDIsIFQzLCBU
NCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgVDE0LCBUMTUs
IFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwKLSAgICBU
MjY+IFZhbHVlcyhUMSB2MSwgVDIgdjIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2
NywgVDggdjgsIFQ5IHY5LAotICAgIFQxMCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIsIFQxMyB2MTMs
IFQxNCB2MTQsIFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2MTcsCi0gICAgVDE4IHYxOCwgVDE5IHYx
OSwgVDIwIHYyMCwgVDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYyMywgVDI0IHYyNCwgVDI1IHYyNSwK
LSAgICBUMjYgdjI2KSB7Ci0gIHJldHVybiBpbnRlcm5hbDo6VmFsdWVBcnJheTI2PFQxLCBUMiwg
VDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLAotICAgICAgVDEyLCBUMTMsIFQx
NCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUs
Ci0gICAgICBUMjY+KHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjEx
LCB2MTIsIHYxMywgdjE0LCB2MTUsCi0gICAgICB2MTYsIHYxNywgdjE4LCB2MTksIHYyMCwgdjIx
LCB2MjIsIHYyMywgdjI0LCB2MjUsIHYyNik7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwg
dHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAg
dHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVu
YW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0
eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQx
NywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFt
ZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1l
IFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNz4KLWludGVybmFsOjpWYWx1ZUFy
cmF5Mjc8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwg
VDEzLAotICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQy
MywgVDI0LCBUMjUsIFQyNiwKLSAgICBUMjc+IFZhbHVlcyhUMSB2MSwgVDIgdjIsIFQzIHYzLCBU
NCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LAotICAgIFQxMCB2MTAsIFQx
MSB2MTEsIFQxMiB2MTIsIFQxMyB2MTMsIFQxNCB2MTQsIFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2
MTcsCi0gICAgVDE4IHYxOCwgVDE5IHYxOSwgVDIwIHYyMCwgVDIxIHYyMSwgVDIyIHYyMiwgVDIz
IHYyMywgVDI0IHYyNCwgVDI1IHYyNSwKLSAgICBUMjYgdjI2LCBUMjcgdjI3KSB7Ci0gIHJldHVy
biBpbnRlcm5hbDo6VmFsdWVBcnJheTI3PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwg
VDksIFQxMCwgVDExLAotICAgICAgVDEyLCBUMTMsIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBU
MTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsCi0gICAgICBUMjYsIFQyNz4odjEsIHYy
LCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsCi0g
ICAgICB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYy
NSwgdjI2LCB2MjcpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0
eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0
eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAg
dHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0
eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQx
OCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFt
ZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlw
ZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOD4KLWludGVybmFsOjpWYWx1ZUFy
cmF5Mjg8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwg
VDEzLAotICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQy
MywgVDI0LCBUMjUsIFQyNiwgVDI3LAotICAgIFQyOD4gVmFsdWVzKFQxIHYxLCBUMiB2MiwgVDMg
djMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2OCwgVDkgdjksCi0gICAgVDEwIHYx
MCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYxNCwgVDE1IHYxNSwgVDE2IHYxNiwg
VDE3IHYxNywKLSAgICBUMTggdjE4LCBUMTkgdjE5LCBUMjAgdjIwLCBUMjEgdjIxLCBUMjIgdjIy
LCBUMjMgdjIzLCBUMjQgdjI0LCBUMjUgdjI1LAotICAgIFQyNiB2MjYsIFQyNyB2MjcsIFQyOCB2
MjgpIHsKLSAgcmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5Mjg8VDEsIFQyLCBUMywgVDQsIFQ1
LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsCi0gICAgICBUMTIsIFQxMywgVDE0LCBUMTUsIFQx
NiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwKLSAgICAgIFQy
NiwgVDI3LCBUMjg+KHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjEx
LCB2MTIsIHYxMywKLSAgICAgIHYxNCwgdjE1LCB2MTYsIHYxNywgdjE4LCB2MTksIHYyMCwgdjIx
LCB2MjIsIHYyMywgdjI0LCB2MjUsIHYyNiwgdjI3LAotICAgICAgdjI4KTsKLX0KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0
eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0
eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEy
LCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1l
IFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUg
VDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVu
YW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0
eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOT4KLWludGVybmFsOjpWYWx1ZUFycmF5Mjk8VDEsIFQy
LCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLAotICAgIFQx
NCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUs
IFQyNiwgVDI3LCBUMjgsCi0gICAgVDI5PiBWYWx1ZXMoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQg
djQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwKLSAgICBUMTAgdjEwLCBUMTEg
djExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3
LAotICAgIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsIFQyMSB2MjEsIFQyMiB2MjIsIFQyMyB2
MjMsIFQyNCB2MjQsIFQyNSB2MjUsCi0gICAgVDI2IHYyNiwgVDI3IHYyNywgVDI4IHYyOCwgVDI5
IHYyOSkgewotICByZXR1cm4gaW50ZXJuYWw6OlZhbHVlQXJyYXkyOTxUMSwgVDIsIFQzLCBUNCwg
VDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwKLSAgICAgIFQxMiwgVDEzLCBUMTQsIFQxNSwg
VDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LAotICAgICAg
VDI2LCBUMjcsIFQyOCwgVDI5Pih2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIHY5LCB2
MTAsIHYxMSwgdjEyLAotICAgICAgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2
MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsCi0gICAgICB2MjcsIHYyOCwgdjI5KTsK
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5
cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5
cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwg
dHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAot
ICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQx
OSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFt
ZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlw
ZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwPgotaW50
ZXJuYWw6OlZhbHVlQXJyYXkzMDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBU
MTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIw
LCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwKLSAgICBUMjksIFQzMD4g
VmFsdWVzKFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBU
OCB2OCwKLSAgICBUOSB2OSwgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0
IHYxNCwgVDE1IHYxNSwgVDE2IHYxNiwKLSAgICBUMTcgdjE3LCBUMTggdjE4LCBUMTkgdjE5LCBU
MjAgdjIwLCBUMjEgdjIxLCBUMjIgdjIyLCBUMjMgdjIzLCBUMjQgdjI0LAotICAgIFQyNSB2MjUs
IFQyNiB2MjYsIFQyNyB2MjcsIFQyOCB2MjgsIFQyOSB2MjksIFQzMCB2MzApIHsKLSAgcmV0dXJu
IGludGVybmFsOjpWYWx1ZUFycmF5MzA8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBU
OSwgVDEwLCBUMTEsCi0gICAgICBUMTIsIFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQx
OSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwKLSAgICAgIFQyNiwgVDI3LCBUMjgsIFQy
OSwgVDMwPih2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIHY5LCB2MTAsIHYxMSwKLSAg
ICAgIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIy
LCB2MjMsIHYyNCwgdjI1LAotICAgICAgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzApOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUg
VDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUg
VDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFt
ZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlw
ZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBl
bmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywg
dHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBU
MjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5h
bWUgVDMxPgotaW50ZXJuYWw6OlZhbHVlQXJyYXkzMTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBU
NywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBU
MTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwKLSAg
ICBUMjksIFQzMCwgVDMxPiBWYWx1ZXMoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1
LCBUNiB2NiwgVDcgdjcsCi0gICAgVDggdjgsIFQ5IHY5LCBUMTAgdjEwLCBUMTEgdjExLCBUMTIg
djEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LAotICAgIFQxNiB2MTYsIFQxNyB2MTcsIFQx
OCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsIFQyMSB2MjEsIFQyMiB2MjIsIFQyMyB2MjMsCi0gICAg
VDI0IHYyNCwgVDI1IHYyNSwgVDI2IHYyNiwgVDI3IHYyNywgVDI4IHYyOCwgVDI5IHYyOSwgVDMw
IHYzMCwgVDMxIHYzMSkgewotICByZXR1cm4gaW50ZXJuYWw6OlZhbHVlQXJyYXkzMTxUMSwgVDIs
IFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwKLSAgICAgIFQxMiwgVDEzLCBU
MTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1
LAotICAgICAgVDI2LCBUMjcsIFQyOCwgVDI5LCBUMzAsIFQzMT4odjEsIHYyLCB2MywgdjQsIHY1
LCB2NiwgdjcsIHY4LCB2OSwgdjEwLAotICAgICAgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYx
NiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsCi0gICAgICB2MjUsIHYy
NiwgdjI3LCB2MjgsIHYyOSwgdjMwLCB2MzEpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEs
IHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAg
IHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBl
bmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywg
dHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBU
MTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5h
bWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFt
ZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlw
ZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5hbWUgVDMxLCB0eXBlbmFtZSBUMzI+
Ci1pbnRlcm5hbDo6VmFsdWVBcnJheTMyPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwg
VDksIFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5
LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAgIFQyOSwg
VDMwLCBUMzEsIFQzMj4gVmFsdWVzKFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwg
VDYgdjYsIFQ3IHY3LAotICAgIFQ4IHY4LCBUOSB2OSwgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYx
MiwgVDEzIHYxMywgVDE0IHYxNCwgVDE1IHYxNSwKLSAgICBUMTYgdjE2LCBUMTcgdjE3LCBUMTgg
djE4LCBUMTkgdjE5LCBUMjAgdjIwLCBUMjEgdjIxLCBUMjIgdjIyLCBUMjMgdjIzLAotICAgIFQy
NCB2MjQsIFQyNSB2MjUsIFQyNiB2MjYsIFQyNyB2MjcsIFQyOCB2MjgsIFQyOSB2MjksIFQzMCB2
MzAsIFQzMSB2MzEsCi0gICAgVDMyIHYzMikgewotICByZXR1cm4gaW50ZXJuYWw6OlZhbHVlQXJy
YXkzMjxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwKLSAgICAg
IFQxMiwgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBU
MjMsIFQyNCwgVDI1LAotICAgICAgVDI2LCBUMjcsIFQyOCwgVDI5LCBUMzAsIFQzMSwgVDMyPih2
MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIHY5LAotICAgICAgdjEwLCB2MTEsIHYxMiwg
djEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsCi0g
ICAgICB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyKTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1l
IFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1l
IFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5h
bWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5
cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlw
ZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMs
IHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUg
VDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVu
YW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzM+Ci1pbnRlcm5hbDo6VmFsdWVBcnJh
eTMzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQx
MywKLSAgICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMs
IFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAgIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzPiBW
YWx1ZXMoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2NiwKLSAgICBUNyB2
NywgVDggdjgsIFQ5IHY5LCBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQg
djE0LCBUMTUgdjE1LAotICAgIFQxNiB2MTYsIFQxNyB2MTcsIFQxOCB2MTgsIFQxOSB2MTksIFQy
MCB2MjAsIFQyMSB2MjEsIFQyMiB2MjIsIFQyMyB2MjMsCi0gICAgVDI0IHYyNCwgVDI1IHYyNSwg
VDI2IHYyNiwgVDI3IHYyNywgVDI4IHYyOCwgVDI5IHYyOSwgVDMwIHYzMCwgVDMxIHYzMSwKLSAg
ICBUMzIgdjMyLCBUMzMgdjMzKSB7Ci0gIHJldHVybiBpbnRlcm5hbDo6VmFsdWVBcnJheTMzPFQx
LCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLAotICAgICAgVDEyLCBU
MTMsIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0
LCBUMjUsCi0gICAgICBUMjYsIFQyNywgVDI4LCBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMz4odjEs
IHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LAotICAgICAgdjksIHYxMCwgdjExLCB2MTIsIHYx
MywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLAotICAg
ICAgdjI0LCB2MjUsIHYyNiwgdjI3LCB2MjgsIHYyOSwgdjMwLCB2MzEsIHYzMiwgdjMzKTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVu
YW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVu
YW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlw
ZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAg
IHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwg
dHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBU
MjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5h
bWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5
cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQzND4KLWlu
dGVybmFsOjpWYWx1ZUFycmF5MzQ8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwg
VDEwLCBUMTEsIFQxMiwgVDEzLAotICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQy
MCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsCi0gICAgVDI5LCBUMzAs
IFQzMSwgVDMyLCBUMzMsIFQzND4gVmFsdWVzKFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBU
NSB2NSwKLSAgICBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwgVDEwIHYxMCwgVDExIHYxMSwg
VDEyIHYxMiwgVDEzIHYxMywgVDE0IHYxNCwKLSAgICBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3
LCBUMTggdjE4LCBUMTkgdjE5LCBUMjAgdjIwLCBUMjEgdjIxLCBUMjIgdjIyLAotICAgIFQyMyB2
MjMsIFQyNCB2MjQsIFQyNSB2MjUsIFQyNiB2MjYsIFQyNyB2MjcsIFQyOCB2MjgsIFQyOSB2Mjks
IFQzMCB2MzAsCi0gICAgVDMxIHYzMSwgVDMyIHYzMiwgVDMzIHYzMywgVDM0IHYzNCkgewotICBy
ZXR1cm4gaW50ZXJuYWw6OlZhbHVlQXJyYXkzNDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywg
VDgsIFQ5LCBUMTAsIFQxMSwKLSAgICAgIFQxMiwgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQx
OCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LAotICAgICAgVDI2LCBUMjcsIFQy
OCwgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzND4odjEsIHYyLCB2MywgdjQsIHY1LCB2Niwg
djcsCi0gICAgICB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3
LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwKLSAgICAgIHYyMywgdjI0LCB2MjUsIHYyNiwgdjI3
LCB2MjgsIHYyOSwgdjMwLCB2MzEsIHYzMiwgdjMzLCB2MzQpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1l
IFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1l
IFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVu
YW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0
eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0g
ICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0
LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1l
IFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5hbWUgVDMxLCB0eXBl
bmFtZSBUMzIsIHR5cGVuYW1lIFQzMywgdHlwZW5hbWUgVDM0LCB0eXBlbmFtZSBUMzU+Ci1pbnRl
cm5hbDo6VmFsdWVBcnJheTM1PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQx
MCwgVDExLCBUMTIsIFQxMywKLSAgICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAs
IFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAgIFQyOSwgVDMwLCBU
MzEsIFQzMiwgVDMzLCBUMzQsIFQzNT4gVmFsdWVzKFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0
LAotICAgIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwgVDEwIHYxMCwgVDExIHYx
MSwgVDEyIHYxMiwgVDEzIHYxMywKLSAgICBUMTQgdjE0LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcg
djE3LCBUMTggdjE4LCBUMTkgdjE5LCBUMjAgdjIwLCBUMjEgdjIxLAotICAgIFQyMiB2MjIsIFQy
MyB2MjMsIFQyNCB2MjQsIFQyNSB2MjUsIFQyNiB2MjYsIFQyNyB2MjcsIFQyOCB2MjgsIFQyOSB2
MjksCi0gICAgVDMwIHYzMCwgVDMxIHYzMSwgVDMyIHYzMiwgVDMzIHYzMywgVDM0IHYzNCwgVDM1
IHYzNSkgewotICByZXR1cm4gaW50ZXJuYWw6OlZhbHVlQXJyYXkzNTxUMSwgVDIsIFQzLCBUNCwg
VDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwKLSAgICAgIFQxMiwgVDEzLCBUMTQsIFQxNSwg
VDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LAotICAgICAg
VDI2LCBUMjcsIFQyOCwgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1Pih2MSwgdjIs
IHYzLCB2NCwgdjUsIHY2LAotICAgICAgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2
MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwKLSAgICAgIHYyMiwgdjIzLCB2
MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMs
IHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcs
IHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQx
MSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1
LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1l
IFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBl
bmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwg
dHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAot
ICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQz
NCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNj4KLWludGVybmFsOjpWYWx1ZUFycmF5
MzY8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEz
LAotICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywg
VDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsCi0gICAgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQz
NCwgVDM1LCBUMzY+IFZhbHVlcyhUMSB2MSwgVDIgdjIsIFQzIHYzLCBUNCB2NCwKLSAgICBUNSB2
NSwgVDYgdjYsIFQ3IHY3LCBUOCB2OCwgVDkgdjksIFQxMCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIs
IFQxMyB2MTMsCi0gICAgVDE0IHYxNCwgVDE1IHYxNSwgVDE2IHYxNiwgVDE3IHYxNywgVDE4IHYx
OCwgVDE5IHYxOSwgVDIwIHYyMCwgVDIxIHYyMSwKLSAgICBUMjIgdjIyLCBUMjMgdjIzLCBUMjQg
djI0LCBUMjUgdjI1LCBUMjYgdjI2LCBUMjcgdjI3LCBUMjggdjI4LCBUMjkgdjI5LAotICAgIFQz
MCB2MzAsIFQzMSB2MzEsIFQzMiB2MzIsIFQzMyB2MzMsIFQzNCB2MzQsIFQzNSB2MzUsIFQzNiB2
MzYpIHsKLSAgcmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5MzY8VDEsIFQyLCBUMywgVDQsIFQ1
LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsCi0gICAgICBUMTIsIFQxMywgVDE0LCBUMTUsIFQx
NiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwKLSAgICAgIFQy
NiwgVDI3LCBUMjgsIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2Pih2MSwg
djIsIHYzLCB2NCwKLSAgICAgIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEz
LCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LAotICAgICAgdjIwLCB2MjEsIHYyMiwgdjIz
LCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsCi0gICAg
ICB2MzQsIHYzNSwgdjM2KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBU
MiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBU
NiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAot
ICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQx
NCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFt
ZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlw
ZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAg
IHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwg
dHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBU
MzMsIHR5cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5h
bWUgVDM3PgotaW50ZXJuYWw6OlZhbHVlQXJyYXkzNzxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBU
NywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBU
MTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwKLSAg
ICBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3PiBWYWx1ZXMoVDEg
djEsIFQyIHYyLCBUMyB2MywKLSAgICBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgs
IFQ5IHY5LCBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLAotICAgIFQxMyB2MTMsIFQxNCB2MTQs
IFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2MTcsIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsCi0g
ICAgVDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYyMywgVDI0IHYyNCwgVDI1IHYyNSwgVDI2IHYyNiwg
VDI3IHYyNywgVDI4IHYyOCwKLSAgICBUMjkgdjI5LCBUMzAgdjMwLCBUMzEgdjMxLCBUMzIgdjMy
LCBUMzMgdjMzLCBUMzQgdjM0LCBUMzUgdjM1LCBUMzYgdjM2LAotICAgIFQzNyB2MzcpIHsKLSAg
cmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5Mzc8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcs
IFQ4LCBUOSwgVDEwLCBUMTEsCi0gICAgICBUMTIsIFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBU
MTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwKLSAgICAgIFQyNiwgVDI3LCBU
MjgsIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzc+KHYxLCB2Miwg
djMsCi0gICAgICB2NCwgdjUsIHY2LCB2NywgdjgsIHY5LCB2MTAsIHYxMSwgdjEyLCB2MTMsIHYx
NCwgdjE1LCB2MTYsIHYxNywgdjE4LCB2MTksCi0gICAgICB2MjAsIHYyMSwgdjIyLCB2MjMsIHYy
NCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywKLSAgICAgIHYz
NCwgdjM1LCB2MzYsIHYzNyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUg
VDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUg
VDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwK
LSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBU
MTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5h
bWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5
cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAg
ICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjks
IHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUg
VDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBUMzYsIHR5cGVu
YW1lIFQzNywgdHlwZW5hbWUgVDM4PgotaW50ZXJuYWw6OlZhbHVlQXJyYXkzODxUMSwgVDIsIFQz
LCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgVDE0LCBU
MTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2
LCBUMjcsIFQyOCwKLSAgICBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwg
VDM3LCBUMzg+IFZhbHVlcyhUMSB2MSwgVDIgdjIsCi0gICAgVDMgdjMsIFQ0IHY0LCBUNSB2NSwg
VDYgdjYsIFQ3IHY3LCBUOCB2OCwgVDkgdjksIFQxMCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIsCi0g
ICAgVDEzIHYxMywgVDE0IHYxNCwgVDE1IHYxNSwgVDE2IHYxNiwgVDE3IHYxNywgVDE4IHYxOCwg
VDE5IHYxOSwgVDIwIHYyMCwKLSAgICBUMjEgdjIxLCBUMjIgdjIyLCBUMjMgdjIzLCBUMjQgdjI0
LCBUMjUgdjI1LCBUMjYgdjI2LCBUMjcgdjI3LCBUMjggdjI4LAotICAgIFQyOSB2MjksIFQzMCB2
MzAsIFQzMSB2MzEsIFQzMiB2MzIsIFQzMyB2MzMsIFQzNCB2MzQsIFQzNSB2MzUsIFQzNiB2MzYs
Ci0gICAgVDM3IHYzNywgVDM4IHYzOCkgewotICByZXR1cm4gaW50ZXJuYWw6OlZhbHVlQXJyYXkz
ODxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwKLSAgICAgIFQx
MiwgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMs
IFQyNCwgVDI1LAotICAgICAgVDI2LCBUMjcsIFQyOCwgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMs
IFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4Pih2MSwgdjIsCi0gICAgICB2MywgdjQsIHY1LCB2Niwg
djcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwK
LSAgICAgIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwg
djI5LCB2MzAsIHYzMSwgdjMyLAotICAgICAgdjMzLCB2MzQsIHYzNSwgdjM2LCB2MzcsIHYzOCk7
Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0
eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0
eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEs
IHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwK
LSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBU
MTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5h
bWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5
cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAg
ICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQs
IHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBUMzYsIHR5cGVuYW1lIFQzNywgdHlwZW5hbWUg
VDM4LCB0eXBlbmFtZSBUMzk+Ci1pbnRlcm5hbDo6VmFsdWVBcnJheTM5PFQxLCBUMiwgVDMsIFQ0
LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICBUMTQsIFQxNSwg
VDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQy
NywgVDI4LAotICAgIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcs
IFQzOCwgVDM5PiBWYWx1ZXMoVDEgdjEsIFQyIHYyLAotICAgIFQzIHYzLCBUNCB2NCwgVDUgdjUs
IFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LCBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLAot
ICAgIFQxMyB2MTMsIFQxNCB2MTQsIFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2MTcsIFQxOCB2MTgs
IFQxOSB2MTksIFQyMCB2MjAsCi0gICAgVDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYyMywgVDI0IHYy
NCwgVDI1IHYyNSwgVDI2IHYyNiwgVDI3IHYyNywgVDI4IHYyOCwKLSAgICBUMjkgdjI5LCBUMzAg
djMwLCBUMzEgdjMxLCBUMzIgdjMyLCBUMzMgdjMzLCBUMzQgdjM0LCBUMzUgdjM1LCBUMzYgdjM2
LAotICAgIFQzNyB2MzcsIFQzOCB2MzgsIFQzOSB2MzkpIHsKLSAgcmV0dXJuIGludGVybmFsOjpW
YWx1ZUFycmF5Mzk8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEs
Ci0gICAgICBUMTIsIFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEs
IFQyMiwgVDIzLCBUMjQsIFQyNSwKLSAgICAgIFQyNiwgVDI3LCBUMjgsIFQyOSwgVDMwLCBUMzEs
IFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5Pih2MSwKLSAgICAgIHYyLCB2
MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwg
djE2LCB2MTcsCi0gICAgICB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwg
djI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwKLSAgICAgIHYzMiwgdjMzLCB2MzQsIHYzNSwg
djM2LCB2MzcsIHYzOCwgdjM5KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFt
ZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFt
ZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEw
LAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1l
IFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBl
bmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwg
dHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAot
ICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQy
OSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFt
ZSBUMzMsIHR5cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlw
ZW5hbWUgVDM3LCB0eXBlbmFtZSBUMzgsIHR5cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQwPgotaW50
ZXJuYWw6OlZhbHVlQXJyYXk0MDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBU
MTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIw
LCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwKLSAgICBUMjksIFQzMCwg
VDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwPiBWYWx1ZXMo
VDEgdjEsCi0gICAgVDIgdjIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDgg
djgsIFQ5IHY5LCBUMTAgdjEwLCBUMTEgdjExLAotICAgIFQxMiB2MTIsIFQxMyB2MTMsIFQxNCB2
MTQsIFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2MTcsIFQxOCB2MTgsIFQxOSB2MTksCi0gICAgVDIw
IHYyMCwgVDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYyMywgVDI0IHYyNCwgVDI1IHYyNSwgVDI2IHYy
NiwgVDI3IHYyNywKLSAgICBUMjggdjI4LCBUMjkgdjI5LCBUMzAgdjMwLCBUMzEgdjMxLCBUMzIg
djMyLCBUMzMgdjMzLCBUMzQgdjM0LCBUMzUgdjM1LAotICAgIFQzNiB2MzYsIFQzNyB2MzcsIFQz
OCB2MzgsIFQzOSB2MzksIFQ0MCB2NDApIHsKLSAgcmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5
NDA8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsCi0gICAgICBU
MTIsIFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIz
LCBUMjQsIFQyNSwKLSAgICAgIFQyNiwgVDI3LCBUMjgsIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMz
LCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LAotICAgICAgVDQwPih2MSwgdjIsIHYzLCB2
NCwgdjUsIHY2LCB2NywgdjgsIHY5LCB2MTAsIHYxMSwgdjEyLCB2MTMsIHYxNCwgdjE1LAotICAg
ICAgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYs
IHYyNywgdjI4LCB2MjksCi0gICAgICB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1LCB2MzYs
IHYzNywgdjM4LCB2MzksIHY0MCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5h
bWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5h
bWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQx
MCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFt
ZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlw
ZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEs
IHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwK
LSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBU
MjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5h
bWUgVDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBUMzYsIHR5
cGVuYW1lIFQzNywgdHlwZW5hbWUgVDM4LCB0eXBlbmFtZSBUMzksIHR5cGVuYW1lIFQ0MCwKLSAg
ICB0eXBlbmFtZSBUNDE+Ci1pbnRlcm5hbDo6VmFsdWVBcnJheTQxPFQxLCBUMiwgVDMsIFQ0LCBU
NSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICBUMTQsIFQxNSwgVDE2
LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywg
VDI4LAotICAgIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQz
OCwgVDM5LCBUNDAsCi0gICAgVDQxPiBWYWx1ZXMoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQs
IFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwKLSAgICBUMTAgdjEwLCBUMTEgdjEx
LCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3LAot
ICAgIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsIFQyMSB2MjEsIFQyMiB2MjIsIFQyMyB2MjMs
IFQyNCB2MjQsIFQyNSB2MjUsCi0gICAgVDI2IHYyNiwgVDI3IHYyNywgVDI4IHYyOCwgVDI5IHYy
OSwgVDMwIHYzMCwgVDMxIHYzMSwgVDMyIHYzMiwgVDMzIHYzMywKLSAgICBUMzQgdjM0LCBUMzUg
djM1LCBUMzYgdjM2LCBUMzcgdjM3LCBUMzggdjM4LCBUMzkgdjM5LCBUNDAgdjQwLCBUNDEgdjQx
KSB7Ci0gIHJldHVybiBpbnRlcm5hbDo6VmFsdWVBcnJheTQxPFQxLCBUMiwgVDMsIFQ0LCBUNSwg
VDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLAotICAgICAgVDEyLCBUMTMsIFQxNCwgVDE1LCBUMTYs
IFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsCi0gICAgICBUMjYs
IFQyNywgVDI4LCBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBU
MzgsIFQzOSwKLSAgICAgIFQ0MCwgVDQxPih2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2Nywgdjgs
IHY5LCB2MTAsIHYxMSwgdjEyLCB2MTMsIHYxNCwKLSAgICAgIHYxNSwgdjE2LCB2MTcsIHYxOCwg
djE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LAotICAgICAg
djI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1LCB2MzYsIHYzNywgdjM4LCB2MzksIHY0
MCwgdjQxKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h
bWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5h
bWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVu
YW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5h
bWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5
cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIy
LCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1l
IFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUg
VDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVu
YW1lIFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3LCB0
eXBlbmFtZSBUMzgsIHR5cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQwLAotICAgIHR5cGVuYW1lIFQ0
MSwgdHlwZW5hbWUgVDQyPgotaW50ZXJuYWw6OlZhbHVlQXJyYXk0MjxUMSwgVDIsIFQzLCBUNCwg
VDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgVDE0LCBUMTUsIFQx
NiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcs
IFQyOCwKLSAgICBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBU
MzgsIFQzOSwgVDQwLCBUNDEsCi0gICAgVDQyPiBWYWx1ZXMoVDEgdjEsIFQyIHYyLCBUMyB2Mywg
VDQgdjQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwKLSAgICBUMTAgdjEwLCBU
MTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcg
djE3LAotICAgIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsIFQyMSB2MjEsIFQyMiB2MjIsIFQy
MyB2MjMsIFQyNCB2MjQsIFQyNSB2MjUsCi0gICAgVDI2IHYyNiwgVDI3IHYyNywgVDI4IHYyOCwg
VDI5IHYyOSwgVDMwIHYzMCwgVDMxIHYzMSwgVDMyIHYzMiwgVDMzIHYzMywKLSAgICBUMzQgdjM0
LCBUMzUgdjM1LCBUMzYgdjM2LCBUMzcgdjM3LCBUMzggdjM4LCBUMzkgdjM5LCBUNDAgdjQwLCBU
NDEgdjQxLAotICAgIFQ0MiB2NDIpIHsKLSAgcmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5NDI8
VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsCi0gICAgICBUMTIs
IFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBU
MjQsIFQyNSwKLSAgICAgIFQyNiwgVDI3LCBUMjgsIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBU
MzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LAotICAgICAgVDQwLCBUNDEsIFQ0Mj4odjEsIHYy
LCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLAotICAgICAg
djE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYy
NSwgdjI2LCB2MjcsCi0gICAgICB2MjgsIHYyOSwgdjMwLCB2MzEsIHYzMiwgdjMzLCB2MzQsIHYz
NSwgdjM2LCB2MzcsIHYzOCwgdjM5LCB2NDAsIHY0MSwKLSAgICAgIHY0Mik7Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwg
dHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwg
dHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQx
MiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFt
ZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1l
IFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBl
bmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywg
dHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBU
MzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQz
NSwKLSAgICB0eXBlbmFtZSBUMzYsIHR5cGVuYW1lIFQzNywgdHlwZW5hbWUgVDM4LCB0eXBlbmFt
ZSBUMzksIHR5cGVuYW1lIFQ0MCwKLSAgICB0eXBlbmFtZSBUNDEsIHR5cGVuYW1lIFQ0MiwgdHlw
ZW5hbWUgVDQzPgotaW50ZXJuYWw6OlZhbHVlQXJyYXk0MzxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2
LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgVDE0LCBUMTUsIFQxNiwgVDE3
LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwK
LSAgICBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQz
OSwgVDQwLCBUNDEsIFQ0MiwKLSAgICBUNDM+IFZhbHVlcyhUMSB2MSwgVDIgdjIsIFQzIHYzLCBU
NCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LAotICAgIFQxMCB2MTAsIFQx
MSB2MTEsIFQxMiB2MTIsIFQxMyB2MTMsIFQxNCB2MTQsIFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2
MTcsCi0gICAgVDE4IHYxOCwgVDE5IHYxOSwgVDIwIHYyMCwgVDIxIHYyMSwgVDIyIHYyMiwgVDIz
IHYyMywgVDI0IHYyNCwgVDI1IHYyNSwKLSAgICBUMjYgdjI2LCBUMjcgdjI3LCBUMjggdjI4LCBU
MjkgdjI5LCBUMzAgdjMwLCBUMzEgdjMxLCBUMzIgdjMyLCBUMzMgdjMzLAotICAgIFQzNCB2MzQs
IFQzNSB2MzUsIFQzNiB2MzYsIFQzNyB2MzcsIFQzOCB2MzgsIFQzOSB2MzksIFQ0MCB2NDAsIFQ0
MSB2NDEsCi0gICAgVDQyIHY0MiwgVDQzIHY0MykgewotICByZXR1cm4gaW50ZXJuYWw6OlZhbHVl
QXJyYXk0MzxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwKLSAg
ICAgIFQxMiwgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIy
LCBUMjMsIFQyNCwgVDI1LAotICAgICAgVDI2LCBUMjcsIFQyOCwgVDI5LCBUMzAsIFQzMSwgVDMy
LCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksCi0gICAgICBUNDAsIFQ0MSwgVDQy
LCBUNDM+KHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIs
Ci0gICAgICB2MTMsIHYxNCwgdjE1LCB2MTYsIHYxNywgdjE4LCB2MTksIHYyMCwgdjIxLCB2MjIs
IHYyMywgdjI0LCB2MjUsIHYyNiwKLSAgICAgIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIs
IHYzMywgdjM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwgdjQwLAotICAgICAgdjQxLCB2NDIs
IHY0Myk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1l
IFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1l
IFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFt
ZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1l
IFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBl
bmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwg
dHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBU
MjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQz
MCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMzLCB0eXBlbmFt
ZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBUMzYsIHR5cGVuYW1lIFQzNywgdHlw
ZW5hbWUgVDM4LCB0eXBlbmFtZSBUMzksIHR5cGVuYW1lIFQ0MCwKLSAgICB0eXBlbmFtZSBUNDEs
IHR5cGVuYW1lIFQ0MiwgdHlwZW5hbWUgVDQzLCB0eXBlbmFtZSBUNDQ+Ci1pbnRlcm5hbDo6VmFs
dWVBcnJheTQ0PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBU
MTIsIFQxMywKLSAgICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIy
LCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAgIFQyOSwgVDMwLCBUMzEsIFQzMiwg
VDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwgVDQyLCBUNDMsCi0g
ICAgVDQ0PiBWYWx1ZXMoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2Niwg
VDcgdjcsIFQ4IHY4LCBUOSB2OSwKLSAgICBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMg
djEzLCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3LAotICAgIFQxOCB2MTgsIFQx
OSB2MTksIFQyMCB2MjAsIFQyMSB2MjEsIFQyMiB2MjIsIFQyMyB2MjMsIFQyNCB2MjQsIFQyNSB2
MjUsCi0gICAgVDI2IHYyNiwgVDI3IHYyNywgVDI4IHYyOCwgVDI5IHYyOSwgVDMwIHYzMCwgVDMx
IHYzMSwgVDMyIHYzMiwgVDMzIHYzMywKLSAgICBUMzQgdjM0LCBUMzUgdjM1LCBUMzYgdjM2LCBU
MzcgdjM3LCBUMzggdjM4LCBUMzkgdjM5LCBUNDAgdjQwLCBUNDEgdjQxLAotICAgIFQ0MiB2NDIs
IFQ0MyB2NDMsIFQ0NCB2NDQpIHsKLSAgcmV0dXJuIGludGVybmFsOjpWYWx1ZUFycmF5NDQ8VDEs
IFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsCi0gICAgICBUMTIsIFQx
MywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQs
IFQyNSwKLSAgICAgIFQyNiwgVDI3LCBUMjgsIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQs
IFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LAotICAgICAgVDQwLCBUNDEsIFQ0MiwgVDQzLCBUNDQ+
KHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLAotICAgICAgdjEy
LCB2MTMsIHYxNCwgdjE1LCB2MTYsIHYxNywgdjE4LCB2MTksIHYyMCwgdjIxLCB2MjIsIHYyMywg
djI0LCB2MjUsCi0gICAgICB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywg
djM0LCB2MzUsIHYzNiwgdjM3LCB2MzgsIHYzOSwKLSAgICAgIHY0MCwgdjQxLCB2NDIsIHY0Mywg
djQ0KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUg
VDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUg
VDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1l
IFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUg
VDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVu
YW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0
eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQy
NiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMw
LAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1l
IFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3LCB0eXBl
bmFtZSBUMzgsIHR5cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQwLAotICAgIHR5cGVuYW1lIFQ0MSwg
dHlwZW5hbWUgVDQyLCB0eXBlbmFtZSBUNDMsIHR5cGVuYW1lIFQ0NCwgdHlwZW5hbWUgVDQ1Pgot
aW50ZXJuYWw6OlZhbHVlQXJyYXk0NTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5
LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwg
VDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwKLSAgICBUMjksIFQz
MCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLCBUNDEs
IFQ0MiwgVDQzLAotICAgIFQ0NCwgVDQ1PiBWYWx1ZXMoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQg
djQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LAotICAgIFQ5IHY5LCBUMTAgdjEwLCBUMTEg
djExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYgdjE2LAotICAgIFQx
NyB2MTcsIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsIFQyMSB2MjEsIFQyMiB2MjIsIFQyMyB2
MjMsIFQyNCB2MjQsCi0gICAgVDI1IHYyNSwgVDI2IHYyNiwgVDI3IHYyNywgVDI4IHYyOCwgVDI5
IHYyOSwgVDMwIHYzMCwgVDMxIHYzMSwgVDMyIHYzMiwKLSAgICBUMzMgdjMzLCBUMzQgdjM0LCBU
MzUgdjM1LCBUMzYgdjM2LCBUMzcgdjM3LCBUMzggdjM4LCBUMzkgdjM5LCBUNDAgdjQwLAotICAg
IFQ0MSB2NDEsIFQ0MiB2NDIsIFQ0MyB2NDMsIFQ0NCB2NDQsIFQ0NSB2NDUpIHsKLSAgcmV0dXJu
IGludGVybmFsOjpWYWx1ZUFycmF5NDU8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBU
OSwgVDEwLCBUMTEsCi0gICAgICBUMTIsIFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQx
OSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwKLSAgICAgIFQyNiwgVDI3LCBUMjgsIFQy
OSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LAotICAg
ICAgVDQwLCBUNDEsIFQ0MiwgVDQzLCBUNDQsIFQ0NT4odjEsIHYyLCB2MywgdjQsIHY1LCB2Niwg
djcsIHY4LCB2OSwgdjEwLAotICAgICAgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3
LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsCi0gICAgICB2MjUsIHYyNiwgdjI3
LCB2MjgsIHYyOSwgdjMwLCB2MzEsIHYzMiwgdjMzLCB2MzQsIHYzNSwgdjM2LCB2MzcsIHYzOCwK
LSAgICAgIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0NSk7Ci19Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlw
ZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlw
ZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwg
dHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBU
MTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQy
MCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFt
ZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlw
ZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEs
IHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwK
LSAgICB0eXBlbmFtZSBUMzYsIHR5cGVuYW1lIFQzNywgdHlwZW5hbWUgVDM4LCB0eXBlbmFtZSBU
MzksIHR5cGVuYW1lIFQ0MCwKLSAgICB0eXBlbmFtZSBUNDEsIHR5cGVuYW1lIFQ0MiwgdHlwZW5h
bWUgVDQzLCB0eXBlbmFtZSBUNDQsIHR5cGVuYW1lIFQ0NSwKLSAgICB0eXBlbmFtZSBUNDY+Ci1p
bnRlcm5hbDo6VmFsdWVBcnJheTQ2PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDks
IFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBU
MjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAgIFQyOSwgVDMw
LCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwg
VDQyLCBUNDMsCi0gICAgVDQ0LCBUNDUsIFQ0Nj4gVmFsdWVzKFQxIHYxLCBUMiB2MiwgVDMgdjMs
IFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LAotICAgIFQ4IHY4LCBUOSB2OSwgVDEwIHYxMCwg
VDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYxNCwgVDE1IHYxNSwKLSAgICBUMTYgdjE2
LCBUMTcgdjE3LCBUMTggdjE4LCBUMTkgdjE5LCBUMjAgdjIwLCBUMjEgdjIxLCBUMjIgdjIyLCBU
MjMgdjIzLAotICAgIFQyNCB2MjQsIFQyNSB2MjUsIFQyNiB2MjYsIFQyNyB2MjcsIFQyOCB2Mjgs
IFQyOSB2MjksIFQzMCB2MzAsIFQzMSB2MzEsCi0gICAgVDMyIHYzMiwgVDMzIHYzMywgVDM0IHYz
NCwgVDM1IHYzNSwgVDM2IHYzNiwgVDM3IHYzNywgVDM4IHYzOCwgVDM5IHYzOSwKLSAgICBUNDAg
djQwLCBUNDEgdjQxLCBUNDIgdjQyLCBUNDMgdjQzLCBUNDQgdjQ0LCBUNDUgdjQ1LCBUNDYgdjQ2
KSB7Ci0gIHJldHVybiBpbnRlcm5hbDo6VmFsdWVBcnJheTQ2PFQxLCBUMiwgVDMsIFQ0LCBUNSwg
VDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLAotICAgICAgVDEyLCBUMTMsIFQxNCwgVDE1LCBUMTYs
IFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsCi0gICAgICBUMjYs
IFQyNywgVDI4LCBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBU
MzgsIFQzOSwKLSAgICAgIFQ0MCwgVDQxLCBUNDIsIFQ0MywgVDQ0LCBUNDUsIFQ0Nj4odjEsIHYy
LCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwKLSAgICAgIHYxMCwgdjExLCB2MTIsIHYxMywg
djE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLAotICAgICAg
djI0LCB2MjUsIHYyNiwgdjI3LCB2MjgsIHYyOSwgdjMwLCB2MzEsIHYzMiwgdjMzLCB2MzQsIHYz
NSwgdjM2LCB2MzcsCi0gICAgICB2MzgsIHYzOSwgdjQwLCB2NDEsIHY0MiwgdjQzLCB2NDQsIHY0
NSwgdjQ2KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h
bWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5h
bWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVu
YW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5h
bWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5
cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIy
LCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1l
IFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUg
VDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVu
YW1lIFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3LCB0
eXBlbmFtZSBUMzgsIHR5cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQwLAotICAgIHR5cGVuYW1lIFQ0
MSwgdHlwZW5hbWUgVDQyLCB0eXBlbmFtZSBUNDMsIHR5cGVuYW1lIFQ0NCwgdHlwZW5hbWUgVDQ1
LAotICAgIHR5cGVuYW1lIFQ0NiwgdHlwZW5hbWUgVDQ3PgotaW50ZXJuYWw6OlZhbHVlQXJyYXk0
NzxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMs
Ci0gICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBU
MjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwKLSAgICBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0
LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLCBUNDEsIFQ0MiwgVDQzLAotICAgIFQ0NCwg
VDQ1LCBUNDYsIFQ0Nz4gVmFsdWVzKFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwg
VDYgdjYsIFQ3IHY3LAotICAgIFQ4IHY4LCBUOSB2OSwgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYx
MiwgVDEzIHYxMywgVDE0IHYxNCwgVDE1IHYxNSwKLSAgICBUMTYgdjE2LCBUMTcgdjE3LCBUMTgg
djE4LCBUMTkgdjE5LCBUMjAgdjIwLCBUMjEgdjIxLCBUMjIgdjIyLCBUMjMgdjIzLAotICAgIFQy
NCB2MjQsIFQyNSB2MjUsIFQyNiB2MjYsIFQyNyB2MjcsIFQyOCB2MjgsIFQyOSB2MjksIFQzMCB2
MzAsIFQzMSB2MzEsCi0gICAgVDMyIHYzMiwgVDMzIHYzMywgVDM0IHYzNCwgVDM1IHYzNSwgVDM2
IHYzNiwgVDM3IHYzNywgVDM4IHYzOCwgVDM5IHYzOSwKLSAgICBUNDAgdjQwLCBUNDEgdjQxLCBU
NDIgdjQyLCBUNDMgdjQzLCBUNDQgdjQ0LCBUNDUgdjQ1LCBUNDYgdjQ2LCBUNDcgdjQ3KSB7Ci0g
IHJldHVybiBpbnRlcm5hbDo6VmFsdWVBcnJheTQ3PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3
LCBUOCwgVDksIFQxMCwgVDExLAotICAgICAgVDEyLCBUMTMsIFQxNCwgVDE1LCBUMTYsIFQxNywg
VDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsCi0gICAgICBUMjYsIFQyNywg
VDI4LCBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQz
OSwKLSAgICAgIFQ0MCwgVDQxLCBUNDIsIFQ0MywgVDQ0LCBUNDUsIFQ0NiwgVDQ3Pih2MSwgdjIs
IHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsCi0gICAgICB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2
MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsCi0gICAgICB2
MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1
LCB2MzYsIHYzNywKLSAgICAgIHYzOCwgdjM5LCB2NDAsIHY0MSwgdjQyLCB2NDMsIHY0NCwgdjQ1
LCB2NDYsIHY0Nyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5
cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5
cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0
eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5
cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4
LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1l
IFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBl
bmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVu
YW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMzLCB0
eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBUMzYsIHR5cGVuYW1lIFQz
NywgdHlwZW5hbWUgVDM4LCB0eXBlbmFtZSBUMzksIHR5cGVuYW1lIFQ0MCwKLSAgICB0eXBlbmFt
ZSBUNDEsIHR5cGVuYW1lIFQ0MiwgdHlwZW5hbWUgVDQzLCB0eXBlbmFtZSBUNDQsIHR5cGVuYW1l
IFQ0NSwKLSAgICB0eXBlbmFtZSBUNDYsIHR5cGVuYW1lIFQ0NywgdHlwZW5hbWUgVDQ4PgotaW50
ZXJuYWw6OlZhbHVlQXJyYXk0ODxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBU
MTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIw
LCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwKLSAgICBUMjksIFQzMCwg
VDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLCBUNDEsIFQ0
MiwgVDQzLAotICAgIFQ0NCwgVDQ1LCBUNDYsIFQ0NywgVDQ4PiBWYWx1ZXMoVDEgdjEsIFQyIHYy
LCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2NiwKLSAgICBUNyB2NywgVDggdjgsIFQ5IHY5LCBU
MTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LAotICAg
IFQxNiB2MTYsIFQxNyB2MTcsIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsIFQyMSB2MjEsIFQy
MiB2MjIsIFQyMyB2MjMsCi0gICAgVDI0IHYyNCwgVDI1IHYyNSwgVDI2IHYyNiwgVDI3IHYyNywg
VDI4IHYyOCwgVDI5IHYyOSwgVDMwIHYzMCwgVDMxIHYzMSwKLSAgICBUMzIgdjMyLCBUMzMgdjMz
LCBUMzQgdjM0LCBUMzUgdjM1LCBUMzYgdjM2LCBUMzcgdjM3LCBUMzggdjM4LCBUMzkgdjM5LAot
ICAgIFQ0MCB2NDAsIFQ0MSB2NDEsIFQ0MiB2NDIsIFQ0MyB2NDMsIFQ0NCB2NDQsIFQ0NSB2NDUs
IFQ0NiB2NDYsIFQ0NyB2NDcsCi0gICAgVDQ4IHY0OCkgewotICByZXR1cm4gaW50ZXJuYWw6OlZh
bHVlQXJyYXk0ODxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwK
LSAgICAgIFQxMiwgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwg
VDIyLCBUMjMsIFQyNCwgVDI1LAotICAgICAgVDI2LCBUMjcsIFQyOCwgVDI5LCBUMzAsIFQzMSwg
VDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksCi0gICAgICBUNDAsIFQ0MSwg
VDQyLCBUNDMsIFQ0NCwgVDQ1LCBUNDYsIFQ0NywgVDQ4Pih2MSwgdjIsIHYzLCB2NCwgdjUsIHY2
LCB2NywKLSAgICAgIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2
MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLAotICAgICAgdjIzLCB2MjQsIHYyNSwgdjI2LCB2
MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2MzMsIHYzNCwgdjM1LCB2MzYsCi0gICAgICB2
MzcsIHYzOCwgdjM5LCB2NDAsIHY0MSwgdjQyLCB2NDMsIHY0NCwgdjQ1LCB2NDYsIHY0NywgdjQ4
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMs
IHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcs
IHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQx
MSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1
LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1l
IFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBl
bmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwg
dHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAot
ICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQz
NCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3LCB0eXBlbmFt
ZSBUMzgsIHR5cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQwLAotICAgIHR5cGVuYW1lIFQ0MSwgdHlw
ZW5hbWUgVDQyLCB0eXBlbmFtZSBUNDMsIHR5cGVuYW1lIFQ0NCwgdHlwZW5hbWUgVDQ1LAotICAg
IHR5cGVuYW1lIFQ0NiwgdHlwZW5hbWUgVDQ3LCB0eXBlbmFtZSBUNDgsIHR5cGVuYW1lIFQ0OT4K
LWludGVybmFsOjpWYWx1ZUFycmF5NDk8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBU
OSwgVDEwLCBUMTEsIFQxMiwgVDEzLAotICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTks
IFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsCi0gICAgVDI5LCBU
MzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwgVDQx
LCBUNDIsIFQ0MywKLSAgICBUNDQsIFQ0NSwgVDQ2LCBUNDcsIFQ0OCwgVDQ5PiBWYWx1ZXMoVDEg
djEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LAotICAgIFQ2IHY2LCBUNyB2NywgVDggdjgs
IFQ5IHY5LCBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LAotICAg
IFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2MTcsIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsIFQy
MSB2MjEsIFQyMiB2MjIsCi0gICAgVDIzIHYyMywgVDI0IHYyNCwgVDI1IHYyNSwgVDI2IHYyNiwg
VDI3IHYyNywgVDI4IHYyOCwgVDI5IHYyOSwgVDMwIHYzMCwKLSAgICBUMzEgdjMxLCBUMzIgdjMy
LCBUMzMgdjMzLCBUMzQgdjM0LCBUMzUgdjM1LCBUMzYgdjM2LCBUMzcgdjM3LCBUMzggdjM4LAot
ICAgIFQzOSB2MzksIFQ0MCB2NDAsIFQ0MSB2NDEsIFQ0MiB2NDIsIFQ0MyB2NDMsIFQ0NCB2NDQs
IFQ0NSB2NDUsIFQ0NiB2NDYsCi0gICAgVDQ3IHY0NywgVDQ4IHY0OCwgVDQ5IHY0OSkgewotICBy
ZXR1cm4gaW50ZXJuYWw6OlZhbHVlQXJyYXk0OTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywg
VDgsIFQ5LCBUMTAsIFQxMSwKLSAgICAgIFQxMiwgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQx
OCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LAotICAgICAgVDI2LCBUMjcsIFQy
OCwgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzks
Ci0gICAgICBUNDAsIFQ0MSwgVDQyLCBUNDMsIFQ0NCwgVDQ1LCBUNDYsIFQ0NywgVDQ4LCBUNDk+
KHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsCi0gICAgICB2NywgdjgsIHY5LCB2MTAsIHYxMSwgdjEy
LCB2MTMsIHYxNCwgdjE1LCB2MTYsIHYxNywgdjE4LCB2MTksIHYyMCwgdjIxLAotICAgICAgdjIy
LCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNywgdjI4LCB2MjksIHYzMCwgdjMxLCB2MzIsIHYzMywg
djM0LCB2MzUsCi0gICAgICB2MzYsIHYzNywgdjM4LCB2MzksIHY0MCwgdjQxLCB2NDIsIHY0Mywg
djQ0LCB2NDUsIHY0NiwgdjQ3LCB2NDgsIHY0OSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
MSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0g
ICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5
cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEz
LCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1l
IFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBl
bmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVu
YW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0
eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQz
MiwgdHlwZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFt
ZSBUMzYsIHR5cGVuYW1lIFQzNywgdHlwZW5hbWUgVDM4LCB0eXBlbmFtZSBUMzksIHR5cGVuYW1l
IFQ0MCwKLSAgICB0eXBlbmFtZSBUNDEsIHR5cGVuYW1lIFQ0MiwgdHlwZW5hbWUgVDQzLCB0eXBl
bmFtZSBUNDQsIHR5cGVuYW1lIFQ0NSwKLSAgICB0eXBlbmFtZSBUNDYsIHR5cGVuYW1lIFQ0Nywg
dHlwZW5hbWUgVDQ4LCB0eXBlbmFtZSBUNDksIHR5cGVuYW1lIFQ1MD4KLWludGVybmFsOjpWYWx1
ZUFycmF5NTA8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQx
MiwgVDEzLAotICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIs
IFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsCi0gICAgVDI5LCBUMzAsIFQzMSwgVDMyLCBU
MzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwgVDQxLCBUNDIsIFQ0MywKLSAg
ICBUNDQsIFQ0NSwgVDQ2LCBUNDcsIFQ0OCwgVDQ5LCBUNTA+IFZhbHVlcyhUMSB2MSwgVDIgdjIs
IFQzIHYzLCBUNCB2NCwKLSAgICBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2OCwgVDkgdjksIFQx
MCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIsIFQxMyB2MTMsCi0gICAgVDE0IHYxNCwgVDE1IHYxNSwg
VDE2IHYxNiwgVDE3IHYxNywgVDE4IHYxOCwgVDE5IHYxOSwgVDIwIHYyMCwgVDIxIHYyMSwKLSAg
ICBUMjIgdjIyLCBUMjMgdjIzLCBUMjQgdjI0LCBUMjUgdjI1LCBUMjYgdjI2LCBUMjcgdjI3LCBU
MjggdjI4LCBUMjkgdjI5LAotICAgIFQzMCB2MzAsIFQzMSB2MzEsIFQzMiB2MzIsIFQzMyB2MzMs
IFQzNCB2MzQsIFQzNSB2MzUsIFQzNiB2MzYsIFQzNyB2MzcsCi0gICAgVDM4IHYzOCwgVDM5IHYz
OSwgVDQwIHY0MCwgVDQxIHY0MSwgVDQyIHY0MiwgVDQzIHY0MywgVDQ0IHY0NCwgVDQ1IHY0NSwK
LSAgICBUNDYgdjQ2LCBUNDcgdjQ3LCBUNDggdjQ4LCBUNDkgdjQ5LCBUNTAgdjUwKSB7Ci0gIHJl
dHVybiBpbnRlcm5hbDo6VmFsdWVBcnJheTUwPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBU
OCwgVDksIFQxMCwgVDExLAotICAgICAgVDEyLCBUMTMsIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4
LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsCi0gICAgICBUMjYsIFQyNywgVDI4
LCBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwK
LSAgICAgIFQ0MCwgVDQxLCBUNDIsIFQ0MywgVDQ0LCBUNDUsIFQ0NiwgVDQ3LCBUNDgsIFQ0OSwg
VDUwPih2MSwgdjIsIHYzLCB2NCwKLSAgICAgIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEs
IHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LAotICAgICAgdjIwLCB2MjEs
IHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcsIHYyOCwgdjI5LCB2MzAsIHYzMSwgdjMyLCB2
MzMsCi0gICAgICB2MzQsIHYzNSwgdjM2LCB2MzcsIHYzOCwgdjM5LCB2NDAsIHY0MSwgdjQyLCB2
NDMsIHY0NCwgdjQ1LCB2NDYsIHY0NywKLSAgICAgIHY0OCwgdjQ5LCB2NTApOwotfQotCi0vLyBC
b29sKCkgYWxsb3dzIGdlbmVyYXRpbmcgdGVzdHMgd2l0aCBwYXJhbWV0ZXJzIGluIGEgc2V0IG9m
IChmYWxzZSwgdHJ1ZSkuCi0vLwotLy8gU3lub3BzaXM6Ci0vLyBCb29sKCkKLS8vICAgLSByZXR1
cm5zIGEgZ2VuZXJhdG9yIHByb2R1Y2luZyBzZXF1ZW5jZXMgd2l0aCBlbGVtZW50cyB7ZmFsc2Us
IHRydWV9LgotLy8KLS8vIEl0IGlzIHVzZWZ1bCB3aGVuIHRlc3RpbmcgY29kZSB0aGF0IGRlcGVu
ZHMgb24gQm9vbGVhbiBmbGFncy4gQ29tYmluYXRpb25zCi0vLyBvZiBtdWx0aXBsZSBmbGFncyBj
YW4gYmUgdGVzdGVkIHdoZW4gc2V2ZXJhbCBCb29sKCkncyBhcmUgY29tYmluZWQgdXNpbmcKLS8v
IENvbWJpbmUoKSBmdW5jdGlvbi4KLS8vCi0vLyBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgYWxs
IHRlc3RzIGluIHRoZSB0ZXN0IGNhc2UgRmxhZ0RlcGVuZGVudFRlc3QKLS8vIHdpbGwgYmUgaW5z
dGFudGlhdGVkIHR3aWNlIHdpdGggcGFyYW1ldGVycyBmYWxzZSBhbmQgdHJ1ZS4KLS8vCi0vLyBj
bGFzcyBGbGFnRGVwZW5kZW50VGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0V2l0aFBhcmFtPGJv
b2w+IHsKLS8vICAgdmlydHVhbCB2b2lkIFNldFVwKCkgewotLy8gICAgIGV4dGVybmFsX2ZsYWcg
PSBHZXRQYXJhbSgpOwotLy8gICB9Ci0vLyB9Ci0vLyBJTlNUQU5USUFURV9URVNUX0NBU0VfUChC
b29sU2VxdWVuY2UsIEZsYWdEZXBlbmRlbnRUZXN0LCBCb29sKCkpOwotLy8KLWlubGluZSBpbnRl
cm5hbDo6UGFyYW1HZW5lcmF0b3I8Ym9vbD4gQm9vbCgpIHsKLSAgcmV0dXJuIFZhbHVlcyhmYWxz
ZSwgdHJ1ZSk7Ci19Ci0KLSMgaWYgR1RFU1RfSEFTX0NPTUJJTkUKLS8vIENvbWJpbmUoKSBhbGxv
d3MgdGhlIHVzZXIgdG8gY29tYmluZSB0d28gb3IgbW9yZSBzZXF1ZW5jZXMgdG8gcHJvZHVjZQot
Ly8gdmFsdWVzIG9mIGEgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgdGhvc2Ugc2VxdWVuY2VzJyBlbGVt
ZW50cy4KLS8vCi0vLyBTeW5vcHNpczoKLS8vIENvbWJpbmUoZ2VuMSwgZ2VuMiwgLi4uLCBnZW5O
KQotLy8gICAtIHJldHVybnMgYSBnZW5lcmF0b3IgcHJvZHVjaW5nIHNlcXVlbmNlcyB3aXRoIGVs
ZW1lbnRzIGNvbWluZyBmcm9tCi0vLyAgICAgdGhlIENhcnRlc2lhbiBwcm9kdWN0IG9mIGVsZW1l
bnRzIGZyb20gdGhlIHNlcXVlbmNlcyBnZW5lcmF0ZWQgYnkKLS8vICAgICBnZW4xLCBnZW4yLCAu
Li4sIGdlbk4uIFRoZSBzZXF1ZW5jZSBlbGVtZW50cyB3aWxsIGhhdmUgYSB0eXBlIG9mCi0vLyAg
ICAgdHVwbGU8VDEsIFQyLCAuLi4sIFROPiB3aGVyZSBUMSwgVDIsIC4uLiwgVE4gYXJlIHRoZSB0
eXBlcwotLy8gICAgIG9mIGVsZW1lbnRzIGZyb20gc2VxdWVuY2VzIHByb2R1Y2VzIGJ5IGdlbjEs
IGdlbjIsIC4uLiwgZ2VuTi4KLS8vCi0vLyBDb21iaW5lIGNhbiBoYXZlIHVwIHRvIDEwIGFyZ3Vt
ZW50cy4gVGhpcyBudW1iZXIgaXMgY3VycmVudGx5IGxpbWl0ZWQKLS8vIGJ5IHRoZSBtYXhpbXVt
IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdHVwbGUgaW1wbGVtZW50YXRpb24gdXNlZCBieSBH
b29nbGUKLS8vIFRlc3QuCi0vLwotLy8gRXhhbXBsZToKLS8vCi0vLyBUaGlzIHdpbGwgaW5zdGFu
dGlhdGUgdGVzdHMgaW4gdGVzdCBjYXNlIEFuaW1hbFRlc3QgZWFjaCBvbmUgd2l0aAotLy8gdGhl
IHBhcmFtZXRlciB2YWx1ZXMgdHVwbGUoImNhdCIsIEJMQUNLKSwgdHVwbGUoImNhdCIsIFdISVRF
KSwKLS8vIHR1cGxlKCJkb2ciLCBCTEFDSyksIGFuZCB0dXBsZSgiZG9nIiwgV0hJVEUpOgotLy8K
LS8vIGVudW0gQ29sb3IgeyBCTEFDSywgR1JBWSwgV0hJVEUgfTsKLS8vIGNsYXNzIEFuaW1hbFRl
c3QKLS8vICAgICA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0V2l0aFBhcmFtPHR1cGxlPGNvbnN0IGNo
YXIqLCBDb2xvcj4gPiB7Li4ufTsKLS8vCi0vLyBURVNUX1AoQW5pbWFsVGVzdCwgQW5pbWFsTG9v
a3NOaWNlKSB7Li4ufQotLy8KLS8vIElOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKEFuaW1hbFZhcmlh
dGlvbnMsIEFuaW1hbFRlc3QsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICBDb21iaW5lKFZh
bHVlcygiY2F0IiwgImRvZyIpLAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
YWx1ZXMoQkxBQ0ssIFdISVRFKSkpOwotLy8KLS8vIFRoaXMgd2lsbCBpbnN0YW50aWF0ZSB0ZXN0
cyBpbiBGbGFnRGVwZW5kZW50VGVzdCB3aXRoIGFsbCB2YXJpYXRpb25zIG9mIHR3bwotLy8gQm9v
bGVhbiBmbGFnczoKLS8vCi0vLyBjbGFzcyBGbGFnRGVwZW5kZW50VGVzdAotLy8gICAgIDogcHVi
bGljIHRlc3Rpbmc6OlRlc3RXaXRoUGFyYW08dHVwbGU8Ym9vbCwgYm9vbD4gPiB7Ci0vLyAgIHZp
cnR1YWwgdm9pZCBTZXRVcCgpIHsKLS8vICAgICAvLyBBc3NpZ25zIGV4dGVybmFsX2ZsYWdfMSBh
bmQgZXh0ZXJuYWxfZmxhZ18yIHZhbHVlcyBmcm9tIHRoZSB0dXBsZS4KLS8vICAgICB0aWUoZXh0
ZXJuYWxfZmxhZ18xLCBleHRlcm5hbF9mbGFnXzIpID0gR2V0UGFyYW0oKTsKLS8vICAgfQotLy8g
fTsKLS8vCi0vLyBURVNUX1AoRmxhZ0RlcGVuZGVudFRlc3QsIFRlc3RGZWF0dXJlMSkgewotLy8g
ICAvLyBUZXN0IHlvdXIgY29kZSB1c2luZyBleHRlcm5hbF9mbGFnXzEgYW5kIGV4dGVybmFsX2Zs
YWdfMiBoZXJlLgotLy8gfQotLy8gSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoVHdvQm9vbFNlcXVl
bmNlLCBGbGFnRGVwZW5kZW50VGVzdCwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgIENvbWJp
bmUoQm9vbCgpLCBCb29sKCkpKTsKLS8vCi10ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yMSwg
dHlwZW5hbWUgR2VuZXJhdG9yMj4KLWludGVybmFsOjpDYXJ0ZXNpYW5Qcm9kdWN0SG9sZGVyMjxH
ZW5lcmF0b3IxLCBHZW5lcmF0b3IyPiBDb21iaW5lKAotICAgIGNvbnN0IEdlbmVyYXRvcjEmIGcx
LCBjb25zdCBHZW5lcmF0b3IyJiBnMikgewotICByZXR1cm4gaW50ZXJuYWw6OkNhcnRlc2lhblBy
b2R1Y3RIb2xkZXIyPEdlbmVyYXRvcjEsIEdlbmVyYXRvcjI+KAotICAgICAgZzEsIGcyKTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvcjEsIHR5cGVuYW1lIEdlbmVyYXRvcjIsIHR5
cGVuYW1lIEdlbmVyYXRvcjM+Ci1pbnRlcm5hbDo6Q2FydGVzaWFuUHJvZHVjdEhvbGRlcjM8R2Vu
ZXJhdG9yMSwgR2VuZXJhdG9yMiwgR2VuZXJhdG9yMz4gQ29tYmluZSgKLSAgICBjb25zdCBHZW5l
cmF0b3IxJiBnMSwgY29uc3QgR2VuZXJhdG9yMiYgZzIsIGNvbnN0IEdlbmVyYXRvcjMmIGczKSB7
Ci0gIHJldHVybiBpbnRlcm5hbDo6Q2FydGVzaWFuUHJvZHVjdEhvbGRlcjM8R2VuZXJhdG9yMSwg
R2VuZXJhdG9yMiwgR2VuZXJhdG9yMz4oCi0gICAgICBnMSwgZzIsIGczKTsKLX0KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIEdlbmVyYXRvcjEsIHR5cGVuYW1lIEdlbmVyYXRvcjIsIHR5cGVuYW1lIEdl
bmVyYXRvcjMsCi0gICAgdHlwZW5hbWUgR2VuZXJhdG9yND4KLWludGVybmFsOjpDYXJ0ZXNpYW5Q
cm9kdWN0SG9sZGVyNDxHZW5lcmF0b3IxLCBHZW5lcmF0b3IyLCBHZW5lcmF0b3IzLAotICAgIEdl
bmVyYXRvcjQ+IENvbWJpbmUoCi0gICAgY29uc3QgR2VuZXJhdG9yMSYgZzEsIGNvbnN0IEdlbmVy
YXRvcjImIGcyLCBjb25zdCBHZW5lcmF0b3IzJiBnMywKLSAgICAgICAgY29uc3QgR2VuZXJhdG9y
NCYgZzQpIHsKLSAgcmV0dXJuIGludGVybmFsOjpDYXJ0ZXNpYW5Qcm9kdWN0SG9sZGVyNDxHZW5l
cmF0b3IxLCBHZW5lcmF0b3IyLCBHZW5lcmF0b3IzLAotICAgICAgR2VuZXJhdG9yND4oCi0gICAg
ICBnMSwgZzIsIGczLCBnNCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IxLCB0
eXBlbmFtZSBHZW5lcmF0b3IyLCB0eXBlbmFtZSBHZW5lcmF0b3IzLAotICAgIHR5cGVuYW1lIEdl
bmVyYXRvcjQsIHR5cGVuYW1lIEdlbmVyYXRvcjU+Ci1pbnRlcm5hbDo6Q2FydGVzaWFuUHJvZHVj
dEhvbGRlcjU8R2VuZXJhdG9yMSwgR2VuZXJhdG9yMiwgR2VuZXJhdG9yMywKLSAgICBHZW5lcmF0
b3I0LCBHZW5lcmF0b3I1PiBDb21iaW5lKAotICAgIGNvbnN0IEdlbmVyYXRvcjEmIGcxLCBjb25z
dCBHZW5lcmF0b3IyJiBnMiwgY29uc3QgR2VuZXJhdG9yMyYgZzMsCi0gICAgICAgIGNvbnN0IEdl
bmVyYXRvcjQmIGc0LCBjb25zdCBHZW5lcmF0b3I1JiBnNSkgewotICByZXR1cm4gaW50ZXJuYWw6
OkNhcnRlc2lhblByb2R1Y3RIb2xkZXI1PEdlbmVyYXRvcjEsIEdlbmVyYXRvcjIsIEdlbmVyYXRv
cjMsCi0gICAgICBHZW5lcmF0b3I0LCBHZW5lcmF0b3I1PigKLSAgICAgIGcxLCBnMiwgZzMsIGc0
LCBnNSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IxLCB0eXBlbmFtZSBHZW5l
cmF0b3IyLCB0eXBlbmFtZSBHZW5lcmF0b3IzLAotICAgIHR5cGVuYW1lIEdlbmVyYXRvcjQsIHR5
cGVuYW1lIEdlbmVyYXRvcjUsIHR5cGVuYW1lIEdlbmVyYXRvcjY+Ci1pbnRlcm5hbDo6Q2FydGVz
aWFuUHJvZHVjdEhvbGRlcjY8R2VuZXJhdG9yMSwgR2VuZXJhdG9yMiwgR2VuZXJhdG9yMywKLSAg
ICBHZW5lcmF0b3I0LCBHZW5lcmF0b3I1LCBHZW5lcmF0b3I2PiBDb21iaW5lKAotICAgIGNvbnN0
IEdlbmVyYXRvcjEmIGcxLCBjb25zdCBHZW5lcmF0b3IyJiBnMiwgY29uc3QgR2VuZXJhdG9yMyYg
ZzMsCi0gICAgICAgIGNvbnN0IEdlbmVyYXRvcjQmIGc0LCBjb25zdCBHZW5lcmF0b3I1JiBnNSwg
Y29uc3QgR2VuZXJhdG9yNiYgZzYpIHsKLSAgcmV0dXJuIGludGVybmFsOjpDYXJ0ZXNpYW5Qcm9k
dWN0SG9sZGVyNjxHZW5lcmF0b3IxLCBHZW5lcmF0b3IyLCBHZW5lcmF0b3IzLAotICAgICAgR2Vu
ZXJhdG9yNCwgR2VuZXJhdG9yNSwgR2VuZXJhdG9yNj4oCi0gICAgICBnMSwgZzIsIGczLCBnNCwg
ZzUsIGc2KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvcjEsIHR5cGVuYW1lIEdl
bmVyYXRvcjIsIHR5cGVuYW1lIEdlbmVyYXRvcjMsCi0gICAgdHlwZW5hbWUgR2VuZXJhdG9yNCwg
dHlwZW5hbWUgR2VuZXJhdG9yNSwgdHlwZW5hbWUgR2VuZXJhdG9yNiwKLSAgICB0eXBlbmFtZSBH
ZW5lcmF0b3I3PgotaW50ZXJuYWw6OkNhcnRlc2lhblByb2R1Y3RIb2xkZXI3PEdlbmVyYXRvcjEs
IEdlbmVyYXRvcjIsIEdlbmVyYXRvcjMsCi0gICAgR2VuZXJhdG9yNCwgR2VuZXJhdG9yNSwgR2Vu
ZXJhdG9yNiwgR2VuZXJhdG9yNz4gQ29tYmluZSgKLSAgICBjb25zdCBHZW5lcmF0b3IxJiBnMSwg
Y29uc3QgR2VuZXJhdG9yMiYgZzIsIGNvbnN0IEdlbmVyYXRvcjMmIGczLAotICAgICAgICBjb25z
dCBHZW5lcmF0b3I0JiBnNCwgY29uc3QgR2VuZXJhdG9yNSYgZzUsIGNvbnN0IEdlbmVyYXRvcjYm
IGc2LAotICAgICAgICBjb25zdCBHZW5lcmF0b3I3JiBnNykgewotICByZXR1cm4gaW50ZXJuYWw6
OkNhcnRlc2lhblByb2R1Y3RIb2xkZXI3PEdlbmVyYXRvcjEsIEdlbmVyYXRvcjIsIEdlbmVyYXRv
cjMsCi0gICAgICBHZW5lcmF0b3I0LCBHZW5lcmF0b3I1LCBHZW5lcmF0b3I2LCBHZW5lcmF0b3I3
PigKLSAgICAgIGcxLCBnMiwgZzMsIGc0LCBnNSwgZzYsIGc3KTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIEdlbmVyYXRvcjEsIHR5cGVuYW1lIEdlbmVyYXRvcjIsIHR5cGVuYW1lIEdlbmVyYXRv
cjMsCi0gICAgdHlwZW5hbWUgR2VuZXJhdG9yNCwgdHlwZW5hbWUgR2VuZXJhdG9yNSwgdHlwZW5h
bWUgR2VuZXJhdG9yNiwKLSAgICB0eXBlbmFtZSBHZW5lcmF0b3I3LCB0eXBlbmFtZSBHZW5lcmF0
b3I4PgotaW50ZXJuYWw6OkNhcnRlc2lhblByb2R1Y3RIb2xkZXI4PEdlbmVyYXRvcjEsIEdlbmVy
YXRvcjIsIEdlbmVyYXRvcjMsCi0gICAgR2VuZXJhdG9yNCwgR2VuZXJhdG9yNSwgR2VuZXJhdG9y
NiwgR2VuZXJhdG9yNywgR2VuZXJhdG9yOD4gQ29tYmluZSgKLSAgICBjb25zdCBHZW5lcmF0b3Ix
JiBnMSwgY29uc3QgR2VuZXJhdG9yMiYgZzIsIGNvbnN0IEdlbmVyYXRvcjMmIGczLAotICAgICAg
ICBjb25zdCBHZW5lcmF0b3I0JiBnNCwgY29uc3QgR2VuZXJhdG9yNSYgZzUsIGNvbnN0IEdlbmVy
YXRvcjYmIGc2LAotICAgICAgICBjb25zdCBHZW5lcmF0b3I3JiBnNywgY29uc3QgR2VuZXJhdG9y
OCYgZzgpIHsKLSAgcmV0dXJuIGludGVybmFsOjpDYXJ0ZXNpYW5Qcm9kdWN0SG9sZGVyODxHZW5l
cmF0b3IxLCBHZW5lcmF0b3IyLCBHZW5lcmF0b3IzLAotICAgICAgR2VuZXJhdG9yNCwgR2VuZXJh
dG9yNSwgR2VuZXJhdG9yNiwgR2VuZXJhdG9yNywgR2VuZXJhdG9yOD4oCi0gICAgICBnMSwgZzIs
IGczLCBnNCwgZzUsIGc2LCBnNywgZzgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJh
dG9yMSwgdHlwZW5hbWUgR2VuZXJhdG9yMiwgdHlwZW5hbWUgR2VuZXJhdG9yMywKLSAgICB0eXBl
bmFtZSBHZW5lcmF0b3I0LCB0eXBlbmFtZSBHZW5lcmF0b3I1LCB0eXBlbmFtZSBHZW5lcmF0b3I2
LAotICAgIHR5cGVuYW1lIEdlbmVyYXRvcjcsIHR5cGVuYW1lIEdlbmVyYXRvcjgsIHR5cGVuYW1l
IEdlbmVyYXRvcjk+Ci1pbnRlcm5hbDo6Q2FydGVzaWFuUHJvZHVjdEhvbGRlcjk8R2VuZXJhdG9y
MSwgR2VuZXJhdG9yMiwgR2VuZXJhdG9yMywKLSAgICBHZW5lcmF0b3I0LCBHZW5lcmF0b3I1LCBH
ZW5lcmF0b3I2LCBHZW5lcmF0b3I3LCBHZW5lcmF0b3I4LAotICAgIEdlbmVyYXRvcjk+IENvbWJp
bmUoCi0gICAgY29uc3QgR2VuZXJhdG9yMSYgZzEsIGNvbnN0IEdlbmVyYXRvcjImIGcyLCBjb25z
dCBHZW5lcmF0b3IzJiBnMywKLSAgICAgICAgY29uc3QgR2VuZXJhdG9yNCYgZzQsIGNvbnN0IEdl
bmVyYXRvcjUmIGc1LCBjb25zdCBHZW5lcmF0b3I2JiBnNiwKLSAgICAgICAgY29uc3QgR2VuZXJh
dG9yNyYgZzcsIGNvbnN0IEdlbmVyYXRvcjgmIGc4LCBjb25zdCBHZW5lcmF0b3I5JiBnOSkgewot
ICByZXR1cm4gaW50ZXJuYWw6OkNhcnRlc2lhblByb2R1Y3RIb2xkZXI5PEdlbmVyYXRvcjEsIEdl
bmVyYXRvcjIsIEdlbmVyYXRvcjMsCi0gICAgICBHZW5lcmF0b3I0LCBHZW5lcmF0b3I1LCBHZW5l
cmF0b3I2LCBHZW5lcmF0b3I3LCBHZW5lcmF0b3I4LCBHZW5lcmF0b3I5PigKLSAgICAgIGcxLCBn
MiwgZzMsIGc0LCBnNSwgZzYsIGc3LCBnOCwgZzkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yMSwgdHlwZW5hbWUgR2VuZXJhdG9yMiwgdHlwZW5hbWUgR2VuZXJhdG9yMywKLSAg
ICB0eXBlbmFtZSBHZW5lcmF0b3I0LCB0eXBlbmFtZSBHZW5lcmF0b3I1LCB0eXBlbmFtZSBHZW5l
cmF0b3I2LAotICAgIHR5cGVuYW1lIEdlbmVyYXRvcjcsIHR5cGVuYW1lIEdlbmVyYXRvcjgsIHR5
cGVuYW1lIEdlbmVyYXRvcjksCi0gICAgdHlwZW5hbWUgR2VuZXJhdG9yMTA+Ci1pbnRlcm5hbDo6
Q2FydGVzaWFuUHJvZHVjdEhvbGRlcjEwPEdlbmVyYXRvcjEsIEdlbmVyYXRvcjIsIEdlbmVyYXRv
cjMsCi0gICAgR2VuZXJhdG9yNCwgR2VuZXJhdG9yNSwgR2VuZXJhdG9yNiwgR2VuZXJhdG9yNywg
R2VuZXJhdG9yOCwgR2VuZXJhdG9yOSwKLSAgICBHZW5lcmF0b3IxMD4gQ29tYmluZSgKLSAgICBj
b25zdCBHZW5lcmF0b3IxJiBnMSwgY29uc3QgR2VuZXJhdG9yMiYgZzIsIGNvbnN0IEdlbmVyYXRv
cjMmIGczLAotICAgICAgICBjb25zdCBHZW5lcmF0b3I0JiBnNCwgY29uc3QgR2VuZXJhdG9yNSYg
ZzUsIGNvbnN0IEdlbmVyYXRvcjYmIGc2LAotICAgICAgICBjb25zdCBHZW5lcmF0b3I3JiBnNywg
Y29uc3QgR2VuZXJhdG9yOCYgZzgsIGNvbnN0IEdlbmVyYXRvcjkmIGc5LAotICAgICAgICBjb25z
dCBHZW5lcmF0b3IxMCYgZzEwKSB7Ci0gIHJldHVybiBpbnRlcm5hbDo6Q2FydGVzaWFuUHJvZHVj
dEhvbGRlcjEwPEdlbmVyYXRvcjEsIEdlbmVyYXRvcjIsIEdlbmVyYXRvcjMsCi0gICAgICBHZW5l
cmF0b3I0LCBHZW5lcmF0b3I1LCBHZW5lcmF0b3I2LCBHZW5lcmF0b3I3LCBHZW5lcmF0b3I4LCBH
ZW5lcmF0b3I5LAotICAgICAgR2VuZXJhdG9yMTA+KAotICAgICAgZzEsIGcyLCBnMywgZzQsIGc1
LCBnNiwgZzcsIGc4LCBnOSwgZzEwKTsKLX0KLSMgZW5kaWYgIC8vIEdURVNUX0hBU19DT01CSU5F
Ci0KLQotCi0jIGRlZmluZSBURVNUX1AodGVzdF9jYXNlX25hbWUsIHRlc3RfbmFtZSkgXAotICBj
bGFzcyBHVEVTVF9URVNUX0NMQVNTX05BTUVfKHRlc3RfY2FzZV9uYW1lLCB0ZXN0X25hbWUpIFwK
LSAgICAgIDogcHVibGljIHRlc3RfY2FzZV9uYW1lIHsgXAotICAgcHVibGljOiBcCi0gICAgR1RF
U1RfVEVTVF9DTEFTU19OQU1FXyh0ZXN0X2Nhc2VfbmFtZSwgdGVzdF9uYW1lKSgpIHt9IFwKLSAg
ICB2aXJ0dWFsIHZvaWQgVGVzdEJvZHkoKTsgXAotICAgcHJpdmF0ZTogXAotICAgIHN0YXRpYyBp
bnQgQWRkVG9SZWdpc3RyeSgpIHsgXAotICAgICAgOjp0ZXN0aW5nOjpVbml0VGVzdDo6R2V0SW5z
dGFuY2UoKS0+cGFyYW1ldGVyaXplZF90ZXN0X3JlZ2lzdHJ5KCkuIFwKLSAgICAgICAgICBHZXRU
ZXN0Q2FzZVBhdHRlcm5Ib2xkZXI8dGVzdF9jYXNlX25hbWU+KFwKLSAgICAgICAgICAgICAgI3Rl
c3RfY2FzZV9uYW1lLCBcCi0gICAgICAgICAgICAgIDo6dGVzdGluZzo6aW50ZXJuYWw6OkNvZGVM
b2NhdGlvbihcCi0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18pKS0+QWRkVGVz
dFBhdHRlcm4oXAotICAgICAgICAgICAgICAgICAgICAgICN0ZXN0X2Nhc2VfbmFtZSwgXAotICAg
ICAgICAgICAgICAgICAgICAgICN0ZXN0X25hbWUsIFwKLSAgICAgICAgICAgICAgICAgICAgICBu
ZXcgOjp0ZXN0aW5nOjppbnRlcm5hbDo6VGVzdE1ldGFGYWN0b3J5PCBcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIEdURVNUX1RFU1RfQ0xBU1NfTkFNRV8oXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVzdF9jYXNlX25hbWUsIHRlc3RfbmFtZSk+KCkpOyBcCi0gICAgICByZXR1
cm4gMDsgXAotICAgIH0gXAotICAgIHN0YXRpYyBpbnQgZ3Rlc3RfcmVnaXN0ZXJpbmdfZHVtbXlf
IEdURVNUX0FUVFJJQlVURV9VTlVTRURfOyBcCi0gICAgR1RFU1RfRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOXyhcCi0gICAgICAgIEdURVNUX1RFU1RfQ0xBU1NfTkFNRV8odGVzdF9jYXNlX25hbWUs
IHRlc3RfbmFtZSkpOyBcCi0gIH07IFwKLSAgaW50IEdURVNUX1RFU1RfQ0xBU1NfTkFNRV8odGVz
dF9jYXNlX25hbWUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9uYW1lKTo6
Z3Rlc3RfcmVnaXN0ZXJpbmdfZHVtbXlfID0gXAotICAgICAgR1RFU1RfVEVTVF9DTEFTU19OQU1F
Xyh0ZXN0X2Nhc2VfbmFtZSwgdGVzdF9uYW1lKTo6QWRkVG9SZWdpc3RyeSgpOyBcCi0gIHZvaWQg
R1RFU1RfVEVTVF9DTEFTU19OQU1FXyh0ZXN0X2Nhc2VfbmFtZSwgdGVzdF9uYW1lKTo6VGVzdEJv
ZHkoKQotCi0vLyBUaGUgb3B0aW9uYWwgbGFzdCBhcmd1bWVudCB0byBJTlNUQU5USUFURV9URVNU
X0NBU0VfUCBhbGxvd3MgdGhlIHVzZXIKLS8vIHRvIHNwZWNpZnkgYSBmdW5jdGlvbiBvciBmdW5j
dG9yIHRoYXQgZ2VuZXJhdGVzIGN1c3RvbSB0ZXN0IG5hbWUgc3VmZml4ZXMKLS8vIGJhc2VkIG9u
IHRoZSB0ZXN0IHBhcmFtZXRlcnMuIFRoZSBmdW5jdGlvbiBzaG91bGQgYWNjZXB0IG9uZSBhcmd1
bWVudCBvZgotLy8gdHlwZSB0ZXN0aW5nOjpUZXN0UGFyYW1JbmZvPGNsYXNzIFBhcmFtVHlwZT4s
IGFuZCByZXR1cm4gc3RkOjpzdHJpbmcuCi0vLwotLy8gdGVzdGluZzo6UHJpbnRUb1N0cmluZ1Bh
cmFtTmFtZSBpcyBhIGJ1aWx0aW4gdGVzdCBzdWZmaXggZ2VuZXJhdG9yIHRoYXQKLS8vIHJldHVy
bnMgdGhlIHZhbHVlIG9mIHRlc3Rpbmc6OlByaW50VG9TdHJpbmcoR2V0UGFyYW0oKSkuIEl0IGRv
ZXMgbm90IHdvcmsKLS8vIGZvciBzdGQ6OnN0cmluZyBvciBDIHN0cmluZ3MuCi0vLwotLy8gTm90
ZTogdGVzdCBuYW1lcyBtdXN0IGJlIG5vbi1lbXB0eSwgdW5pcXVlLCBhbmQgbWF5IG9ubHkgY29u
dGFpbiBBU0NJSQotLy8gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgdW5kZXJzY29yZS4KLQot
IyBkZWZpbmUgSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AocHJlZml4LCB0ZXN0X2Nhc2VfbmFtZSwg
Z2VuZXJhdG9yLCAuLi4pIFwKLSAgOjp0ZXN0aW5nOjppbnRlcm5hbDo6UGFyYW1HZW5lcmF0b3I8
dGVzdF9jYXNlX25hbWU6OlBhcmFtVHlwZT4gXAotICAgICAgZ3Rlc3RfIyNwcmVmaXgjI3Rlc3Rf
Y2FzZV9uYW1lIyNfRXZhbEdlbmVyYXRvcl8oKSB7IHJldHVybiBnZW5lcmF0b3I7IH0gXAotICA6
OnN0ZDo6c3RyaW5nIGd0ZXN0XyMjcHJlZml4IyN0ZXN0X2Nhc2VfbmFtZSMjX0V2YWxHZW5lcmF0
ZU5hbWVfKCBcCi0gICAgICBjb25zdCA6OnRlc3Rpbmc6OlRlc3RQYXJhbUluZm88dGVzdF9jYXNl
X25hbWU6OlBhcmFtVHlwZT4mIGluZm8pIHsgXAotICAgIHJldHVybiA6OnRlc3Rpbmc6OmludGVy
bmFsOjpHZXRQYXJhbU5hbWVHZW48dGVzdF9jYXNlX25hbWU6OlBhcmFtVHlwZT4gXAotICAgICAg
ICAoX19WQV9BUkdTX18pKGluZm8pOyBcCi0gIH0gXAotICBpbnQgZ3Rlc3RfIyNwcmVmaXgjI3Rl
c3RfY2FzZV9uYW1lIyNfZHVtbXlfIEdURVNUX0FUVFJJQlVURV9VTlVTRURfID0gXAotICAgICAg
Ojp0ZXN0aW5nOjpVbml0VGVzdDo6R2V0SW5zdGFuY2UoKS0+cGFyYW1ldGVyaXplZF90ZXN0X3Jl
Z2lzdHJ5KCkuIFwKLSAgICAgICAgICBHZXRUZXN0Q2FzZVBhdHRlcm5Ib2xkZXI8dGVzdF9jYXNl
X25hbWU+KFwKLSAgICAgICAgICAgICAgI3Rlc3RfY2FzZV9uYW1lLCBcCi0gICAgICAgICAgICAg
IDo6dGVzdGluZzo6aW50ZXJuYWw6OkNvZGVMb2NhdGlvbihcCi0gICAgICAgICAgICAgICAgICBf
X0ZJTEVfXywgX19MSU5FX18pKS0+QWRkVGVzdENhc2VJbnN0YW50aWF0aW9uKFwKLSAgICAgICAg
ICAgICAgICAgICAgICAjcHJlZml4LCBcCi0gICAgICAgICAgICAgICAgICAgICAgJmd0ZXN0XyMj
cHJlZml4IyN0ZXN0X2Nhc2VfbmFtZSMjX0V2YWxHZW5lcmF0b3JfLCBcCi0gICAgICAgICAgICAg
ICAgICAgICAgJmd0ZXN0XyMjcHJlZml4IyN0ZXN0X2Nhc2VfbmFtZSMjX0V2YWxHZW5lcmF0ZU5h
bWVfLCBcCi0gICAgICAgICAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fKQotCi19ICAv
LyBuYW1lc3BhY2UgdGVzdGluZwotCi0jZW5kaWYgIC8vIEdURVNUX0hBU19QQVJBTV9URVNUCi0K
LSNlbmRpZiAgLy8gR1RFU1RfSU5DTFVERV9HVEVTVF9HVEVTVF9QQVJBTV9URVNUX0hfCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0
ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QtcGFyYW0tdGVzdC5oLnB1bXAgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rl
c3QtcGFyYW0tdGVzdC5oLnB1bXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNzhk
NmQyYTE5ZDc5MThlZDNjNzU2YWJjZmNiNDk5MzdlMTZlYjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LXBhcmFtLXRlc3QuaC5w
dW1wCisrKyAvZGV2L251bGwKQEAgLTEsNTEwICswLDAgQEAKLSQkIC0qLSBtb2RlOiBjKys7IC0q
LQotJHZhciBuID0gNTAgICQkIE1heGltdW0gbGVuZ3RoIG9mIFZhbHVlcyBhcmd1bWVudHMgd2Ug
d2FudCB0byBzdXBwb3J0LgotJHZhciBtYXh0dXBsZSA9IDEwICAkJCBNYXhpbXVtIG51bWJlciBv
ZiBDb21iaW5lIGFyZ3VtZW50cyB3ZSB3YW50IHRvIHN1cHBvcnQuCi0vLyBDb3B5cmlnaHQgMjAw
OCwgR29vZ2xlIEluYy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0vLwotLy8gQXV0aG9yczogdmxhZGxAZ29vZ2xl
LmNvbSAoVmxhZCBMb3NldikKLS8vCi0vLyBNYWNyb3MgYW5kIGZ1bmN0aW9ucyBmb3IgaW1wbGVt
ZW50aW5nIHBhcmFtZXRlcml6ZWQgdGVzdHMKLS8vIGluIEdvb2dsZSBDKysgVGVzdGluZyBGcmFt
ZXdvcmsgKEdvb2dsZSBUZXN0KQotLy8KLS8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgYSBT
Q1JJUFQuICBETyBOT1QgRURJVCBCWSBIQU5EIQotLy8KLSNpZm5kZWYgR1RFU1RfSU5DTFVERV9H
VEVTVF9HVEVTVF9QQVJBTV9URVNUX0hfCi0jZGVmaW5lIEdURVNUX0lOQ0xVREVfR1RFU1RfR1RF
U1RfUEFSQU1fVEVTVF9IXwotCi0KLS8vIFZhbHVlLXBhcmFtZXRlcml6ZWQgdGVzdHMgYWxsb3cg
eW91IHRvIHRlc3QgeW91ciBjb2RlIHdpdGggZGlmZmVyZW50Ci0vLyBwYXJhbWV0ZXJzIHdpdGhv
dXQgd3JpdGluZyBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHNhbWUgdGVzdC4KLS8vCi0vLyBIZXJl
IGlzIGhvdyB5b3UgdXNlIHZhbHVlLXBhcmFtZXRlcml6ZWQgdGVzdHM6Ci0KLSNpZiAwCi0KLS8v
IFRvIHdyaXRlIHZhbHVlLXBhcmFtZXRlcml6ZWQgdGVzdHMsIGZpcnN0IHlvdSBzaG91bGQgZGVm
aW5lIGEgZml4dHVyZQotLy8gY2xhc3MuIEl0IGlzIHVzdWFsbHkgZGVyaXZlZCBmcm9tIHRlc3Rp
bmc6OlRlc3RXaXRoUGFyYW08VD4gKHNlZSBiZWxvdyBmb3IKLS8vIGFub3RoZXIgaW5oZXJpdGFu
Y2Ugc2NoZW1lIHRoYXQncyBzb21ldGltZXMgdXNlZnVsIGluIG1vcmUgY29tcGxpY2F0ZWQKLS8v
IGNsYXNzIGhpZXJhcmNoaWVzKSwgd2hlcmUgdGhlIHR5cGUgb2YgeW91ciBwYXJhbWV0ZXIgdmFs
dWVzLgotLy8gVGVzdFdpdGhQYXJhbTxUPiBpcyBpdHNlbGYgZGVyaXZlZCBmcm9tIHRlc3Rpbmc6
OlRlc3QuIFQgY2FuIGJlIGFueQotLy8gY29weWFibGUgdHlwZS4gSWYgaXQncyBhIHJhdyBwb2lu
dGVyLCB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUKLS8vIGxpZmVzcGFuIG9m
IHRoZSBwb2ludGVkIHZhbHVlcy4KLQotY2xhc3MgRm9vVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6
OlRlc3RXaXRoUGFyYW08Y29uc3QgY2hhcio+IHsKLSAgLy8gWW91IGNhbiBpbXBsZW1lbnQgYWxs
IHRoZSB1c3VhbCBjbGFzcyBmaXh0dXJlIG1lbWJlcnMgaGVyZS4KLX07Ci0KLS8vIFRoZW4sIHVz
ZSB0aGUgVEVTVF9QIG1hY3JvIHRvIGRlZmluZSBhcyBtYW55IHBhcmFtZXRlcml6ZWQgdGVzdHMK
LS8vIGZvciB0aGlzIGZpeHR1cmUgYXMgeW91IHdhbnQuIFRoZSBfUCBzdWZmaXggaXMgZm9yICJw
YXJhbWV0ZXJpemVkIgotLy8gb3IgInBhdHRlcm4iLCB3aGljaGV2ZXIgeW91IHByZWZlciB0byB0
aGluay4KLQotVEVTVF9QKEZvb1Rlc3QsIERvZXNCbGFoKSB7Ci0gIC8vIEluc2lkZSBhIHRlc3Qs
IGFjY2VzcyB0aGUgdGVzdCBwYXJhbWV0ZXIgd2l0aCB0aGUgR2V0UGFyYW0oKSBtZXRob2QKLSAg
Ly8gb2YgdGhlIFRlc3RXaXRoUGFyYW08VD4gY2xhc3M6Ci0gIEVYUEVDVF9UUlVFKGZvby5CbGFo
KEdldFBhcmFtKCkpKTsKLSAgLi4uCi19Ci0KLVRFU1RfUChGb29UZXN0LCBIYXNCbGFoQmxhaCkg
ewotICAuLi4KLX0KLQotLy8gRmluYWxseSwgeW91IGNhbiB1c2UgSU5TVEFOVElBVEVfVEVTVF9D
QVNFX1AgdG8gaW5zdGFudGlhdGUgdGhlIHRlc3QKLS8vIGNhc2Ugd2l0aCBhbnkgc2V0IG9mIHBh
cmFtZXRlcnMgeW91IHdhbnQuIEdvb2dsZSBUZXN0IGRlZmluZXMgYSBudW1iZXIKLS8vIG9mIGZ1
bmN0aW9ucyBmb3IgZ2VuZXJhdGluZyB0ZXN0IHBhcmFtZXRlcnMuIFRoZXkgcmV0dXJuIHdoYXQg
d2UgY2FsbAotLy8gKHN1cnByaXNlISkgcGFyYW1ldGVyIGdlbmVyYXRvcnMuIEhlcmUgaXMgYSAg
c3VtbWFyeSBvZiB0aGVtLCB3aGljaAotLy8gYXJlIGFsbCBpbiB0aGUgdGVzdGluZyBuYW1lc3Bh
Y2U6Ci0vLwotLy8KLS8vICBSYW5nZShiZWdpbiwgZW5kIFssIHN0ZXBdKSAtIFlpZWxkcyB2YWx1
ZXMge2JlZ2luLCBiZWdpbitzdGVwLAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmVnaW4rc3RlcCtzdGVwLCAuLi59LiBUaGUgdmFsdWVzIGRvIG5vdAotLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5jbHVkZSBlbmQuIHN0ZXAgZGVmYXVsdHMgdG8gMS4KLS8vICBW
YWx1ZXModjEsIHYyLCAuLi4sIHZOKSAgICAtIFlpZWxkcyB2YWx1ZXMge3YxLCB2MiwgLi4uLCB2
Tn0uCi0vLyAgVmFsdWVzSW4oY29udGFpbmVyKSAgICAgICAgLSBZaWVsZHMgdmFsdWVzIGZyb20g
YSBDLXN0eWxlIGFycmF5LCBhbiBTVEwKLS8vICBWYWx1ZXNJbihiZWdpbixlbmQpICAgICAgICAg
IGNvbnRhaW5lciwgb3IgYW4gaXRlcmF0b3IgcmFuZ2UgW2JlZ2luLCBlbmQpLgotLy8gIEJvb2wo
KSAgICAgICAgICAgICAgICAgICAgIC0gWWllbGRzIHNlcXVlbmNlIHtmYWxzZSwgdHJ1ZX0uCi0v
LyAgQ29tYmluZShnMSwgZzIsIC4uLiwgZ04pICAgLSBZaWVsZHMgYWxsIGNvbWJpbmF0aW9ucyAo
dGhlIENhcnRlc2lhbiBwcm9kdWN0Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgdGhlIG1hdGggc2F2dnkpIG9mIHRoZSB2YWx1ZXMgZ2VuZXJhdGVkCi0vLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBieSB0aGUgTiBnZW5lcmF0b3JzLgotLy8KLS8vIEZvciBtb3Jl
IGRldGFpbHMsIHNlZSBjb21tZW50cyBhdCB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlc2UgZnVuY3Rp
b25zIGJlbG93Ci0vLyBpbiB0aGlzIGZpbGUuCi0vLwotLy8gVGhlIGZvbGxvd2luZyBzdGF0ZW1l
bnQgd2lsbCBpbnN0YW50aWF0ZSB0ZXN0cyBmcm9tIHRoZSBGb29UZXN0IHRlc3QgY2FzZQotLy8g
ZWFjaCB3aXRoIHBhcmFtZXRlciB2YWx1ZXMgIm1lZW55IiwgIm1pbnkiLCBhbmQgIm1vZSIuCi0K
LUlOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKEluc3RhbnRpYXRpb25OYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgRm9vVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlcygibWVl
bnkiLCAibWlueSIsICJtb2UiKSk7Ci0KLS8vIFRvIGRpc3Rpbmd1aXNoIGRpZmZlcmVudCBpbnN0
YW5jZXMgb2YgdGhlIHBhdHRlcm4sICh5ZXMsIHlvdQotLy8gY2FuIGluc3RhbnRpYXRlIGl0IG1v
cmUgdGhlbiBvbmNlKSB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlCi0vLyBJTlNUQU5USUFURV9U
RVNUX0NBU0VfUCBtYWNybyBpcyBhIHByZWZpeCB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlCi0v
LyBhY3R1YWwgdGVzdCBjYXNlIG5hbWUuIFJlbWVtYmVyIHRvIHBpY2sgdW5pcXVlIHByZWZpeGVz
IGZvciBkaWZmZXJlbnQKLS8vIGluc3RhbnRpYXRpb25zLiBUaGUgdGVzdHMgZnJvbSB0aGUgaW5z
dGFudGlhdGlvbiBhYm92ZSB3aWxsIGhhdmUKLS8vIHRoZXNlIG5hbWVzOgotLy8KLS8vICAgICog
SW5zdGFudGlhdGlvbk5hbWUvRm9vVGVzdC5Eb2VzQmxhaC8wIGZvciAibWVlbnkiCi0vLyAgICAq
IEluc3RhbnRpYXRpb25OYW1lL0Zvb1Rlc3QuRG9lc0JsYWgvMSBmb3IgIm1pbnkiCi0vLyAgICAq
IEluc3RhbnRpYXRpb25OYW1lL0Zvb1Rlc3QuRG9lc0JsYWgvMiBmb3IgIm1vZSIKLS8vICAgICog
SW5zdGFudGlhdGlvbk5hbWUvRm9vVGVzdC5IYXNCbGFoQmxhaC8wIGZvciAibWVlbnkiCi0vLyAg
ICAqIEluc3RhbnRpYXRpb25OYW1lL0Zvb1Rlc3QuSGFzQmxhaEJsYWgvMSBmb3IgIm1pbnkiCi0v
LyAgICAqIEluc3RhbnRpYXRpb25OYW1lL0Zvb1Rlc3QuSGFzQmxhaEJsYWgvMiBmb3IgIm1vZSIK
LS8vCi0vLyBZb3UgY2FuIHVzZSB0aGVzZSBuYW1lcyBpbiAtLWd0ZXN0X2ZpbHRlci4KLS8vCi0v
LyBUaGlzIHN0YXRlbWVudCB3aWxsIGluc3RhbnRpYXRlIGFsbCB0ZXN0cyBmcm9tIEZvb1Rlc3Qg
YWdhaW4sIGVhY2gKLS8vIHdpdGggcGFyYW1ldGVyIHZhbHVlcyAiY2F0IiBhbmQgImRvZyI6Ci0K
LWNvbnN0IGNoYXIqIHBldHNbXSA9IHsiY2F0IiwgImRvZyJ9OwotSU5TVEFOVElBVEVfVEVTVF9D
QVNFX1AoQW5vdGhlckluc3RhbnRpYXRpb25OYW1lLCBGb29UZXN0LCBWYWx1ZXNJbihwZXRzKSk7
Ci0KLS8vIFRoZSB0ZXN0cyBmcm9tIHRoZSBpbnN0YW50aWF0aW9uIGFib3ZlIHdpbGwgaGF2ZSB0
aGVzZSBuYW1lczoKLS8vCi0vLyAgICAqIEFub3RoZXJJbnN0YW50aWF0aW9uTmFtZS9Gb29UZXN0
LkRvZXNCbGFoLzAgZm9yICJjYXQiCi0vLyAgICAqIEFub3RoZXJJbnN0YW50aWF0aW9uTmFtZS9G
b29UZXN0LkRvZXNCbGFoLzEgZm9yICJkb2ciCi0vLyAgICAqIEFub3RoZXJJbnN0YW50aWF0aW9u
TmFtZS9Gb29UZXN0Lkhhc0JsYWhCbGFoLzAgZm9yICJjYXQiCi0vLyAgICAqIEFub3RoZXJJbnN0
YW50aWF0aW9uTmFtZS9Gb29UZXN0Lkhhc0JsYWhCbGFoLzEgZm9yICJkb2ciCi0vLwotLy8gUGxl
YXNlIG5vdGUgdGhhdCBJTlNUQU5USUFURV9URVNUX0NBU0VfUCB3aWxsIGluc3RhbnRpYXRlIGFs
bCB0ZXN0cwotLy8gaW4gdGhlIGdpdmVuIHRlc3QgY2FzZSwgd2hldGhlciB0aGVpciBkZWZpbml0
aW9ucyBjb21lIGJlZm9yZSBvcgotLy8gQUZURVIgdGhlIElOU1RBTlRJQVRFX1RFU1RfQ0FTRV9Q
IHN0YXRlbWVudC4KLS8vCi0vLyBQbGVhc2UgYWxzbyBub3RlIHRoYXQgZ2VuZXJhdG9yIGV4cHJl
c3Npb25zIChpbmNsdWRpbmcgcGFyYW1ldGVycyB0byB0aGUKLS8vIGdlbmVyYXRvcnMpIGFyZSBl
dmFsdWF0ZWQgaW4gSW5pdEdvb2dsZVRlc3QoKSwgYWZ0ZXIgbWFpbigpIGhhcyBzdGFydGVkLgot
Ly8gVGhpcyBhbGxvd3MgdGhlIHVzZXIgb24gb25lIGhhbmQsIHRvIGFkanVzdCBnZW5lcmF0b3Ig
cGFyYW1ldGVycyBpbiBvcmRlcgotLy8gdG8gZHluYW1pY2FsbHkgZGV0ZXJtaW5lIGEgc2V0IG9m
IHRlc3RzIHRvIHJ1biBhbmQgb24gdGhlIG90aGVyIGhhbmQsCi0vLyBnaXZlIHRoZSB1c2VyIGEg
Y2hhbmNlIHRvIGluc3BlY3QgdGhlIGdlbmVyYXRlZCB0ZXN0cyB3aXRoIEdvb2dsZSBUZXN0Ci0v
LyByZWZsZWN0aW9uIEFQSSBiZWZvcmUgUlVOX0FMTF9URVNUUygpIGlzIGV4ZWN1dGVkLgotLy8K
LS8vIFlvdSBjYW4gc2VlIHNhbXBsZXMvc2FtcGxlN191bml0dGVzdC5jYyBhbmQgc2FtcGxlcy9z
YW1wbGU4X3VuaXR0ZXN0LmNjCi0vLyBmb3IgbW9yZSBleGFtcGxlcy4KLS8vCi0vLyBJbiB0aGUg
ZnV0dXJlLCB3ZSBwbGFuIHRvIHB1Ymxpc2ggdGhlIEFQSSBmb3IgZGVmaW5pbmcgbmV3IHBhcmFt
ZXRlcgotLy8gZ2VuZXJhdG9ycy4gQnV0IGZvciBub3cgdGhpcyBpbnRlcmZhY2UgcmVtYWlucyBw
YXJ0IG9mIHRoZSBpbnRlcm5hbAotLy8gaW1wbGVtZW50YXRpb24gYW5kIGlzIHN1YmplY3QgdG8g
Y2hhbmdlLgotLy8KLS8vCi0vLyBBIHBhcmFtZXRlcml6ZWQgdGVzdCBmaXh0dXJlIG11c3QgYmUg
ZGVyaXZlZCBmcm9tIHRlc3Rpbmc6OlRlc3QgYW5kIGZyb20KLS8vIHRlc3Rpbmc6OldpdGhQYXJh
bUludGVyZmFjZTxUPiwgd2hlcmUgVCBpcyB0aGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVyCi0vLyB2
YWx1ZXMuIEluaGVyaXRpbmcgZnJvbSBUZXN0V2l0aFBhcmFtPFQ+IHNhdGlzZmllcyB0aGF0IHJl
cXVpcmVtZW50IGJlY2F1c2UKLS8vIFRlc3RXaXRoUGFyYW08VD4gaW5oZXJpdHMgZnJvbSBib3Ro
IFRlc3QgYW5kIFdpdGhQYXJhbUludGVyZmFjZS4gSW4gbW9yZQotLy8gY29tcGxpY2F0ZWQgaGll
cmFyY2hpZXMsIGhvd2V2ZXIsIGl0IGlzIG9jY2FzaW9uYWxseSB1c2VmdWwgdG8gaW5oZXJpdAot
Ly8gc2VwYXJhdGVseSBmcm9tIFRlc3QgYW5kIFdpdGhQYXJhbUludGVyZmFjZS4gRm9yIGV4YW1w
bGU6Ci0KLWNsYXNzIEJhc2VUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Ci0gIC8vIFlv
dSBjYW4gaW5oZXJpdCBhbGwgdGhlIHVzdWFsIG1lbWJlcnMgZm9yIGEgbm9uLXBhcmFtZXRlcml6
ZWQgdGVzdAotICAvLyBmaXh0dXJlIGhlcmUuCi19OwotCi1jbGFzcyBEZXJpdmVkVGVzdCA6IHB1
YmxpYyBCYXNlVGVzdCwgcHVibGljIDo6dGVzdGluZzo6V2l0aFBhcmFtSW50ZXJmYWNlPGludD4g
ewotICAvLyBUaGUgdXN1YWwgdGVzdCBmaXh0dXJlIG1lbWJlcnMgZ28gaGVyZSB0b28uCi19Owot
Ci1URVNUX0YoQmFzZVRlc3QsIEhhc0ZvbykgewotICAvLyBUaGlzIGlzIGFuIG9yZGluYXJ5IG5v
bi1wYXJhbWV0ZXJpemVkIHRlc3QuCi19Ci0KLVRFU1RfUChEZXJpdmVkVGVzdCwgRG9lc0JsYWgp
IHsKLSAgLy8gR2V0UGFyYW0gd29ya3MganVzdCB0aGUgc2FtZSBoZXJlIGFzIGlmIHlvdSBpbmhl
cml0IGZyb20gVGVzdFdpdGhQYXJhbS4KLSAgRVhQRUNUX1RSVUUoZm9vLkJsYWgoR2V0UGFyYW0o
KSkpOwotfQotCi0jZW5kaWYgIC8vIDAKLQotI2luY2x1ZGUgImd0ZXN0L2ludGVybmFsL2d0ZXN0
LXBvcnQuaCIKLQotI2lmICFHVEVTVF9PU19TWU1CSUFOCi0jIGluY2x1ZGUgPHV0aWxpdHk+Ci0j
ZW5kaWYKLQotLy8gc2NyaXB0cy9mdXNlX2d0ZXN0LnB5IGRlcGVuZHMgb24gZ3Rlc3QncyBvd24g
aGVhZGVyIGJlaW5nICNpbmNsdWRlZAotLy8gKnVuY29uZGl0aW9uYWxseSouICBUaGVyZWZvcmUg
dGhlc2UgI2luY2x1ZGVzIGNhbm5vdCBiZSBtb3ZlZAotLy8gaW5zaWRlICNpZiBHVEVTVF9IQVNf
UEFSQU1fVEVTVC4KLSNpbmNsdWRlICJndGVzdC9pbnRlcm5hbC9ndGVzdC1pbnRlcm5hbC5oIgot
I2luY2x1ZGUgImd0ZXN0L2ludGVybmFsL2d0ZXN0LXBhcmFtLXV0aWwuaCIKLSNpbmNsdWRlICJn
dGVzdC9pbnRlcm5hbC9ndGVzdC1wYXJhbS11dGlsLWdlbmVyYXRlZC5oIgotCi0jaWYgR1RFU1Rf
SEFTX1BBUkFNX1RFU1QKLQotbmFtZXNwYWNlIHRlc3RpbmcgewotCi0vLyBGdW5jdGlvbnMgcHJv
ZHVjaW5nIHBhcmFtZXRlciBnZW5lcmF0b3JzLgotLy8KLS8vIEdvb2dsZSBUZXN0IHVzZXMgdGhl
c2UgZ2VuZXJhdG9ycyB0byBwcm9kdWNlIHBhcmFtZXRlcnMgZm9yIHZhbHVlLQotLy8gcGFyYW1l
dGVyaXplZCB0ZXN0cy4gV2hlbiBhIHBhcmFtZXRlcml6ZWQgdGVzdCBjYXNlIGlzIGluc3RhbnRp
YXRlZAotLy8gd2l0aCBhIHBhcnRpY3VsYXIgZ2VuZXJhdG9yLCBHb29nbGUgVGVzdCBjcmVhdGVz
IGFuZCBydW5zIHRlc3RzCi0vLyBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBzZXF1ZW5jZSBwcm9k
dWNlZCBieSB0aGUgZ2VuZXJhdG9yLgotLy8KLS8vIEluIHRoZSBmb2xsb3dpbmcgc2FtcGxlLCB0
ZXN0cyBmcm9tIHRlc3QgY2FzZSBGb29UZXN0IGFyZSBpbnN0YW50aWF0ZWQKLS8vIGVhY2ggdGhy
ZWUgdGltZXMgd2l0aCBwYXJhbWV0ZXIgdmFsdWVzIDMsIDUsIGFuZCA4OgotLy8KLS8vIGNsYXNz
IEZvb1Rlc3QgOiBwdWJsaWMgVGVzdFdpdGhQYXJhbTxpbnQ+IHsgLi4uIH07Ci0vLwotLy8gVEVT
VF9QKEZvb1Rlc3QsIFRlc3RUaGlzKSB7Ci0vLyB9Ci0vLyBURVNUX1AoRm9vVGVzdCwgVGVzdFRo
YXQpIHsKLS8vIH0KLS8vIElOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKFRlc3RTZXF1ZW5jZSwgRm9v
VGVzdCwgVmFsdWVzKDMsIDUsIDgpKTsKLS8vCi0KLS8vIFJhbmdlKCkgcmV0dXJucyBnZW5lcmF0
b3JzIHByb3ZpZGluZyBzZXF1ZW5jZXMgb2YgdmFsdWVzIGluIGEgcmFuZ2UuCi0vLwotLy8gU3lu
b3BzaXM6Ci0vLyBSYW5nZShzdGFydCwgZW5kKQotLy8gICAtIHJldHVybnMgYSBnZW5lcmF0b3Ig
cHJvZHVjaW5nIGEgc2VxdWVuY2Ugb2YgdmFsdWVzIHtzdGFydCwgc3RhcnQrMSwKLS8vICAgICBz
dGFydCsyLCAuLi4sIH0uCi0vLyBSYW5nZShzdGFydCwgZW5kLCBzdGVwKQotLy8gICAtIHJldHVy
bnMgYSBnZW5lcmF0b3IgcHJvZHVjaW5nIGEgc2VxdWVuY2Ugb2YgdmFsdWVzIHtzdGFydCwgc3Rh
cnQrc3RlcCwKLS8vICAgICBzdGFydCtzdGVwK3N0ZXAsIC4uLiwgfS4KLS8vIE5vdGVzOgotLy8g
ICAqIFRoZSBnZW5lcmF0ZWQgc2VxdWVuY2VzIG5ldmVyIGluY2x1ZGUgZW5kLiBGb3IgZXhhbXBs
ZSwgUmFuZ2UoMSwgNSkKLS8vICAgICByZXR1cm5zIGEgZ2VuZXJhdG9yIHByb2R1Y2luZyBhIHNl
cXVlbmNlIHsxLCAyLCAzLCA0fS4gUmFuZ2UoMSwgOSwgMikKLS8vICAgICByZXR1cm5zIGEgZ2Vu
ZXJhdG9yIHByb2R1Y2luZyB7MSwgMywgNSwgN30uCi0vLyAgICogc3RhcnQgYW5kIGVuZCBtdXN0
IGhhdmUgdGhlIHNhbWUgdHlwZS4gVGhhdCB0eXBlIG1heSBiZSBhbnkgaW50ZWdyYWwgb3IKLS8v
ICAgICBmbG9hdGluZy1wb2ludCB0eXBlIG9yIGEgdXNlciBkZWZpbmVkIHR5cGUgc2F0aXNmeWlu
ZyB0aGVzZSBjb25kaXRpb25zOgotLy8gICAgICogSXQgbXVzdCBiZSBhc3NpZ25hYmxlIChoYXZl
IG9wZXJhdG9yPSgpIGRlZmluZWQpLgotLy8gICAgICogSXQgbXVzdCBoYXZlIG9wZXJhdG9yKygp
IChvcGVyYXRvcisoaW50LWNvbXBhdGlibGUgdHlwZSkgZm9yCi0vLyAgICAgICB0d28tb3BlcmFu
ZCB2ZXJzaW9uKS4KLS8vICAgICAqIEl0IG11c3QgaGF2ZSBvcGVyYXRvcjwoKSBkZWZpbmVkLgot
Ly8gICAgIEVsZW1lbnRzIGluIHRoZSByZXN1bHRpbmcgc2VxdWVuY2VzIHdpbGwgYWxzbyBoYXZl
IHRoYXQgdHlwZS4KLS8vICAgKiBDb25kaXRpb24gc3RhcnQgPCBlbmQgbXVzdCBiZSBzYXRpc2Zp
ZWQgaW4gb3JkZXIgZm9yIHJlc3VsdGluZyBzZXF1ZW5jZXMKLS8vICAgICB0byBjb250YWluIGFu
eSBlbGVtZW50cy4KLS8vCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSW5jcmVtZW50
VD4KLWludGVybmFsOjpQYXJhbUdlbmVyYXRvcjxUPiBSYW5nZShUIHN0YXJ0LCBUIGVuZCwgSW5j
cmVtZW50VCBzdGVwKSB7Ci0gIHJldHVybiBpbnRlcm5hbDo6UGFyYW1HZW5lcmF0b3I8VD4oCi0g
ICAgICBuZXcgaW50ZXJuYWw6OlJhbmdlR2VuZXJhdG9yPFQsIEluY3JlbWVudFQ+KHN0YXJ0LCBl
bmQsIHN0ZXApKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1pbnRlcm5hbDo6UGFyYW1H
ZW5lcmF0b3I8VD4gUmFuZ2UoVCBzdGFydCwgVCBlbmQpIHsKLSAgcmV0dXJuIFJhbmdlKHN0YXJ0
LCBlbmQsIDEpOwotfQotCi0vLyBWYWx1ZXNJbigpIGZ1bmN0aW9uIGFsbG93cyBnZW5lcmF0aW9u
IG9mIHRlc3RzIHdpdGggcGFyYW1ldGVycyBjb21pbmcgZnJvbQotLy8gYSBjb250YWluZXIuCi0v
LwotLy8gU3lub3BzaXM6Ci0vLyBWYWx1ZXNJbihjb25zdCBUICgmYXJyYXkpW05dKQotLy8gICAt
IHJldHVybnMgYSBnZW5lcmF0b3IgcHJvZHVjaW5nIHNlcXVlbmNlcyB3aXRoIGVsZW1lbnRzIGZy
b20KLS8vICAgICBhIEMtc3R5bGUgYXJyYXkuCi0vLyBWYWx1ZXNJbihjb25zdCBDb250YWluZXIm
IGNvbnRhaW5lcikKLS8vICAgLSByZXR1cm5zIGEgZ2VuZXJhdG9yIHByb2R1Y2luZyBzZXF1ZW5j
ZXMgd2l0aCBlbGVtZW50cyBmcm9tCi0vLyAgICAgYW4gU1RMLXN0eWxlIGNvbnRhaW5lci4KLS8v
IFZhbHVlc0luKEl0ZXJhdG9yIGJlZ2luLCBJdGVyYXRvciBlbmQpCi0vLyAgIC0gcmV0dXJucyBh
IGdlbmVyYXRvciBwcm9kdWNpbmcgc2VxdWVuY2VzIHdpdGggZWxlbWVudHMgZnJvbQotLy8gICAg
IGEgcmFuZ2UgW2JlZ2luLCBlbmQpIGRlZmluZWQgYnkgYSBwYWlyIG9mIFNUTC1zdHlsZSBpdGVy
YXRvcnMuIFRoZXNlCi0vLyAgICAgaXRlcmF0b3JzIGNhbiBhbHNvIGJlIHBsYWluIEMgcG9pbnRl
cnMuCi0vLwotLy8gUGxlYXNlIG5vdGUgdGhhdCBWYWx1ZXNJbiBjb3BpZXMgdGhlIHZhbHVlcyBm
cm9tIHRoZSBjb250YWluZXJzCi0vLyBwYXNzZWQgaW4gYW5kIGtlZXBzIHRoZW0gdG8gZ2VuZXJh
dGUgdGVzdHMgaW4gUlVOX0FMTF9URVNUUygpLgotLy8KLS8vIEV4YW1wbGVzOgotLy8KLS8vIFRo
aXMgaW5zdGFudGlhdGVzIHRlc3RzIGZyb20gdGVzdCBjYXNlIFN0cmluZ1Rlc3QKLS8vIGVhY2gg
d2l0aCBDLXN0cmluZyB2YWx1ZXMgb2YgImZvbyIsICJiYXIiLCBhbmQgImJheiI6Ci0vLwotLy8g
Y29uc3QgY2hhciogc3RyaW5nc1tdID0geyJmb28iLCAiYmFyIiwgImJheiJ9OwotLy8gSU5TVEFO
VElBVEVfVEVTVF9DQVNFX1AoU3RyaW5nU2VxdWVuY2UsIFNydGluZ1Rlc3QsIFZhbHVlc0luKHN0
cmluZ3MpKTsKLS8vCi0vLyBUaGlzIGluc3RhbnRpYXRlcyB0ZXN0cyBmcm9tIHRlc3QgY2FzZSBT
dGxTdHJpbmdUZXN0Ci0vLyBlYWNoIHdpdGggU1RMIHN0cmluZ3Mgd2l0aCB2YWx1ZXMgImEiIGFu
ZCAiYiI6Ci0vLwotLy8gOjpzdGQ6OnZlY3RvcjwgOjpzdGQ6OnN0cmluZz4gR2V0UGFyYW1ldGVy
U3RyaW5ncygpIHsKLS8vICAgOjpzdGQ6OnZlY3RvcjwgOjpzdGQ6OnN0cmluZz4gdjsKLS8vICAg
di5wdXNoX2JhY2soImEiKTsKLS8vICAgdi5wdXNoX2JhY2soImIiKTsKLS8vICAgcmV0dXJuIHY7
Ci0vLyB9Ci0vLwotLy8gSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoQ2hhclNlcXVlbmNlLAotLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgU3RsU3RyaW5nVGVzdCwKLS8vICAgICAgICAgICAgICAg
ICAgICAgICAgIFZhbHVlc0luKEdldFBhcmFtZXRlclN0cmluZ3MoKSkpOwotLy8KLS8vCi0vLyBU
aGlzIHdpbGwgYWxzbyBpbnN0YW50aWF0ZSB0ZXN0cyBmcm9tIENoYXJUZXN0Ci0vLyBlYWNoIHdp
dGggcGFyYW1ldGVyIHZhbHVlcyAnYScgYW5kICdiJzoKLS8vCi0vLyA6OnN0ZDo6bGlzdDxjaGFy
PiBHZXRQYXJhbWV0ZXJDaGFycygpIHsKLS8vICAgOjpzdGQ6Omxpc3Q8Y2hhcj4gbGlzdDsKLS8v
ICAgbGlzdC5wdXNoX2JhY2soJ2EnKTsKLS8vICAgbGlzdC5wdXNoX2JhY2soJ2InKTsKLS8vICAg
cmV0dXJuIGxpc3Q7Ci0vLyB9Ci0vLyA6OnN0ZDo6bGlzdDxjaGFyPiBsID0gR2V0UGFyYW1ldGVy
Q2hhcnMoKTsKLS8vIElOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKENoYXJTZXF1ZW5jZTIsCi0vLyAg
ICAgICAgICAgICAgICAgICAgICAgICBDaGFyVGVzdCwKLS8vICAgICAgICAgICAgICAgICAgICAg
ICAgIFZhbHVlc0luKGwuYmVnaW4oKSwgbC5lbmQoKSkpOwotLy8KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBGb3J3YXJkSXRlcmF0b3I+Ci1pbnRlcm5hbDo6UGFyYW1HZW5lcmF0b3I8Ci0gIHR5cGVuYW1l
IDo6dGVzdGluZzo6aW50ZXJuYWw6Okl0ZXJhdG9yVHJhaXRzPEZvcndhcmRJdGVyYXRvcj46OnZh
bHVlX3R5cGU+Ci1WYWx1ZXNJbihGb3J3YXJkSXRlcmF0b3IgYmVnaW4sIEZvcndhcmRJdGVyYXRv
ciBlbmQpIHsKLSAgdHlwZWRlZiB0eXBlbmFtZSA6OnRlc3Rpbmc6OmludGVybmFsOjpJdGVyYXRv
clRyYWl0czxGb3J3YXJkSXRlcmF0b3I+Ci0gICAgICA6OnZhbHVlX3R5cGUgUGFyYW1UeXBlOwot
ICByZXR1cm4gaW50ZXJuYWw6OlBhcmFtR2VuZXJhdG9yPFBhcmFtVHlwZT4oCi0gICAgICBuZXcg
aW50ZXJuYWw6OlZhbHVlc0luSXRlcmF0b3JSYW5nZUdlbmVyYXRvcjxQYXJhbVR5cGU+KGJlZ2lu
LCBlbmQpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgotaW50ZXJuYWw6
OlBhcmFtR2VuZXJhdG9yPFQ+IFZhbHVlc0luKGNvbnN0IFQgKCZhcnJheSlbTl0pIHsKLSAgcmV0
dXJuIFZhbHVlc0luKGFycmF5LCBhcnJheSArIE4pOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29u
dGFpbmVyPgotaW50ZXJuYWw6OlBhcmFtR2VuZXJhdG9yPHR5cGVuYW1lIENvbnRhaW5lcjo6dmFs
dWVfdHlwZT4gVmFsdWVzSW4oCi0gICAgY29uc3QgQ29udGFpbmVyJiBjb250YWluZXIpIHsKLSAg
cmV0dXJuIFZhbHVlc0luKGNvbnRhaW5lci5iZWdpbigpLCBjb250YWluZXIuZW5kKCkpOwotfQot
Ci0vLyBWYWx1ZXMoKSBhbGxvd3MgZ2VuZXJhdGluZyB0ZXN0cyBmcm9tIGV4cGxpY2l0bHkgc3Bl
Y2lmaWVkIGxpc3Qgb2YKLS8vIHBhcmFtZXRlcnMuCi0vLwotLy8gU3lub3BzaXM6Ci0vLyBWYWx1
ZXMoVCB2MSwgVCB2MiwgLi4uLCBUIHZOKQotLy8gICAtIHJldHVybnMgYSBnZW5lcmF0b3IgcHJv
ZHVjaW5nIHNlcXVlbmNlcyB3aXRoIGVsZW1lbnRzIHYxLCB2MiwgLi4uLCB2Ti4KLS8vCi0vLyBG
b3IgZXhhbXBsZSwgdGhpcyBpbnN0YW50aWF0ZXMgdGVzdHMgZnJvbSB0ZXN0IGNhc2UgQmFyVGVz
dCBlYWNoCi0vLyB3aXRoIHZhbHVlcyAib25lIiwgInR3byIsIGFuZCAidGhyZWUiOgotLy8KLS8v
IElOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKE51bVNlcXVlbmNlLCBCYXJUZXN0LCBWYWx1ZXMoIm9u
ZSIsICJ0d28iLCAidGhyZWUiKSk7Ci0vLwotLy8gVGhpcyBpbnN0YW50aWF0ZXMgdGVzdHMgZnJv
bSB0ZXN0IGNhc2UgQmF6VGVzdCBlYWNoIHdpdGggdmFsdWVzIDEsIDIsIDMuNS4KLS8vIFRoZSBl
eGFjdCB0eXBlIG9mIHZhbHVlcyB3aWxsIGRlcGVuZCBvbiB0aGUgdHlwZSBvZiBwYXJhbWV0ZXIg
aW4gQmF6VGVzdC4KLS8vCi0vLyBJTlNUQU5USUFURV9URVNUX0NBU0VfUChGbG9hdGluZ051bWJl
cnMsIEJhelRlc3QsIFZhbHVlcygxLCAyLCAzLjUpKTsKLS8vCi0vLyBDdXJyZW50bHksIFZhbHVl
cygpIHN1cHBvcnRzIGZyb20gMSB0byAkbiBwYXJhbWV0ZXJzLgotLy8KLSRyYW5nZSBpIDEuLm4K
LSRmb3IgaSBbWwotJHJhbmdlIGogMS4uaQotCi10ZW1wbGF0ZSA8JGZvciBqLCBbW3R5cGVuYW1l
IFQkal1dPgotaW50ZXJuYWw6OlZhbHVlQXJyYXkkaTwkZm9yIGosIFtbVCRqXV0+IFZhbHVlcygk
Zm9yIGosIFtbVCRqIHYkal1dKSB7Ci0gIHJldHVybiBpbnRlcm5hbDo6VmFsdWVBcnJheSRpPCRm
b3IgaiwgW1tUJGpdXT4oJGZvciBqLCBbW3Ykal1dKTsKLX0KLQotXV0KLQotLy8gQm9vbCgpIGFs
bG93cyBnZW5lcmF0aW5nIHRlc3RzIHdpdGggcGFyYW1ldGVycyBpbiBhIHNldCBvZiAoZmFsc2Us
IHRydWUpLgotLy8KLS8vIFN5bm9wc2lzOgotLy8gQm9vbCgpCi0vLyAgIC0gcmV0dXJucyBhIGdl
bmVyYXRvciBwcm9kdWNpbmcgc2VxdWVuY2VzIHdpdGggZWxlbWVudHMge2ZhbHNlLCB0cnVlfS4K
LS8vCi0vLyBJdCBpcyB1c2VmdWwgd2hlbiB0ZXN0aW5nIGNvZGUgdGhhdCBkZXBlbmRzIG9uIEJv
b2xlYW4gZmxhZ3MuIENvbWJpbmF0aW9ucwotLy8gb2YgbXVsdGlwbGUgZmxhZ3MgY2FuIGJlIHRl
c3RlZCB3aGVuIHNldmVyYWwgQm9vbCgpJ3MgYXJlIGNvbWJpbmVkIHVzaW5nCi0vLyBDb21iaW5l
KCkgZnVuY3Rpb24uCi0vLwotLy8gSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlIGFsbCB0ZXN0cyBp
biB0aGUgdGVzdCBjYXNlIEZsYWdEZXBlbmRlbnRUZXN0Ci0vLyB3aWxsIGJlIGluc3RhbnRpYXRl
ZCB0d2ljZSB3aXRoIHBhcmFtZXRlcnMgZmFsc2UgYW5kIHRydWUuCi0vLwotLy8gY2xhc3MgRmxh
Z0RlcGVuZGVudFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdFdpdGhQYXJhbTxib29sPiB7Ci0v
LyAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIHsKLS8vICAgICBleHRlcm5hbF9mbGFnID0gR2V0UGFy
YW0oKTsKLS8vICAgfQotLy8gfQotLy8gSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoQm9vbFNlcXVl
bmNlLCBGbGFnRGVwZW5kZW50VGVzdCwgQm9vbCgpKTsKLS8vCi1pbmxpbmUgaW50ZXJuYWw6OlBh
cmFtR2VuZXJhdG9yPGJvb2w+IEJvb2woKSB7Ci0gIHJldHVybiBWYWx1ZXMoZmFsc2UsIHRydWUp
OwotfQotCi0jIGlmIEdURVNUX0hBU19DT01CSU5FCi0vLyBDb21iaW5lKCkgYWxsb3dzIHRoZSB1
c2VyIHRvIGNvbWJpbmUgdHdvIG9yIG1vcmUgc2VxdWVuY2VzIHRvIHByb2R1Y2UKLS8vIHZhbHVl
cyBvZiBhIENhcnRlc2lhbiBwcm9kdWN0IG9mIHRob3NlIHNlcXVlbmNlcycgZWxlbWVudHMuCi0v
LwotLy8gU3lub3BzaXM6Ci0vLyBDb21iaW5lKGdlbjEsIGdlbjIsIC4uLiwgZ2VuTikKLS8vICAg
LSByZXR1cm5zIGEgZ2VuZXJhdG9yIHByb2R1Y2luZyBzZXF1ZW5jZXMgd2l0aCBlbGVtZW50cyBj
b21pbmcgZnJvbQotLy8gICAgIHRoZSBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiBlbGVtZW50cyBmcm9t
IHRoZSBzZXF1ZW5jZXMgZ2VuZXJhdGVkIGJ5Ci0vLyAgICAgZ2VuMSwgZ2VuMiwgLi4uLCBnZW5O
LiBUaGUgc2VxdWVuY2UgZWxlbWVudHMgd2lsbCBoYXZlIGEgdHlwZSBvZgotLy8gICAgIHR1cGxl
PFQxLCBUMiwgLi4uLCBUTj4gd2hlcmUgVDEsIFQyLCAuLi4sIFROIGFyZSB0aGUgdHlwZXMKLS8v
ICAgICBvZiBlbGVtZW50cyBmcm9tIHNlcXVlbmNlcyBwcm9kdWNlcyBieSBnZW4xLCBnZW4yLCAu
Li4sIGdlbk4uCi0vLwotLy8gQ29tYmluZSBjYW4gaGF2ZSB1cCB0byAkbWF4dHVwbGUgYXJndW1l
bnRzLiBUaGlzIG51bWJlciBpcyBjdXJyZW50bHkgbGltaXRlZAotLy8gYnkgdGhlIG1heGltdW0g
bnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0dXBsZSBpbXBsZW1lbnRhdGlvbiB1c2VkIGJ5IEdv
b2dsZQotLy8gVGVzdC4KLS8vCi0vLyBFeGFtcGxlOgotLy8KLS8vIFRoaXMgd2lsbCBpbnN0YW50
aWF0ZSB0ZXN0cyBpbiB0ZXN0IGNhc2UgQW5pbWFsVGVzdCBlYWNoIG9uZSB3aXRoCi0vLyB0aGUg
cGFyYW1ldGVyIHZhbHVlcyB0dXBsZSgiY2F0IiwgQkxBQ0spLCB0dXBsZSgiY2F0IiwgV0hJVEUp
LAotLy8gdHVwbGUoImRvZyIsIEJMQUNLKSwgYW5kIHR1cGxlKCJkb2ciLCBXSElURSk6Ci0vLwot
Ly8gZW51bSBDb2xvciB7IEJMQUNLLCBHUkFZLCBXSElURSB9OwotLy8gY2xhc3MgQW5pbWFsVGVz
dAotLy8gICAgIDogcHVibGljIHRlc3Rpbmc6OlRlc3RXaXRoUGFyYW08dHVwbGU8Y29uc3QgY2hh
ciosIENvbG9yPiA+IHsuLi59OwotLy8KLS8vIFRFU1RfUChBbmltYWxUZXN0LCBBbmltYWxMb29r
c05pY2UpIHsuLi59Ci0vLwotLy8gSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoQW5pbWFsVmFyaWF0
aW9ucywgQW5pbWFsVGVzdCwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgIENvbWJpbmUoVmFs
dWVzKCJjYXQiLCAiZG9nIiksCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZh
bHVlcyhCTEFDSywgV0hJVEUpKSk7Ci0vLwotLy8gVGhpcyB3aWxsIGluc3RhbnRpYXRlIHRlc3Rz
IGluIEZsYWdEZXBlbmRlbnRUZXN0IHdpdGggYWxsIHZhcmlhdGlvbnMgb2YgdHdvCi0vLyBCb29s
ZWFuIGZsYWdzOgotLy8KLS8vIGNsYXNzIEZsYWdEZXBlbmRlbnRUZXN0Ci0vLyAgICAgOiBwdWJs
aWMgdGVzdGluZzo6VGVzdFdpdGhQYXJhbTx0dXBsZTxib29sLCBib29sPiA+IHsKLS8vICAgdmly
dHVhbCB2b2lkIFNldFVwKCkgewotLy8gICAgIC8vIEFzc2lnbnMgZXh0ZXJuYWxfZmxhZ18xIGFu
ZCBleHRlcm5hbF9mbGFnXzIgdmFsdWVzIGZyb20gdGhlIHR1cGxlLgotLy8gICAgIHRpZShleHRl
cm5hbF9mbGFnXzEsIGV4dGVybmFsX2ZsYWdfMikgPSBHZXRQYXJhbSgpOwotLy8gICB9Ci0vLyB9
OwotLy8KLS8vIFRFU1RfUChGbGFnRGVwZW5kZW50VGVzdCwgVGVzdEZlYXR1cmUxKSB7Ci0vLyAg
IC8vIFRlc3QgeW91ciBjb2RlIHVzaW5nIGV4dGVybmFsX2ZsYWdfMSBhbmQgZXh0ZXJuYWxfZmxh
Z18yIGhlcmUuCi0vLyB9Ci0vLyBJTlNUQU5USUFURV9URVNUX0NBU0VfUChUd29Cb29sU2VxdWVu
Y2UsIEZsYWdEZXBlbmRlbnRUZXN0LAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgQ29tYmlu
ZShCb29sKCksIEJvb2woKSkpOwotLy8KLSRyYW5nZSBpIDIuLm1heHR1cGxlCi0kZm9yIGkgW1sK
LSRyYW5nZSBqIDEuLmkKLQotdGVtcGxhdGUgPCRmb3IgaiwgW1t0eXBlbmFtZSBHZW5lcmF0b3Ik
al1dPgotaW50ZXJuYWw6OkNhcnRlc2lhblByb2R1Y3RIb2xkZXIkaTwkZm9yIGosIFtbR2VuZXJh
dG9yJGpdXT4gQ29tYmluZSgKLSAgICAkZm9yIGosIFtbY29uc3QgR2VuZXJhdG9yJGomIGckal1d
KSB7Ci0gIHJldHVybiBpbnRlcm5hbDo6Q2FydGVzaWFuUHJvZHVjdEhvbGRlciRpPCRmb3Igaiwg
W1tHZW5lcmF0b3Ikal1dPigKLSAgICAgICRmb3IgaiwgW1tnJGpdXSk7Ci19Ci0KLV1dCi0jIGVu
ZGlmICAvLyBHVEVTVF9IQVNfQ09NQklORQotCi0KLQotIyBkZWZpbmUgVEVTVF9QKHRlc3RfY2Fz
ZV9uYW1lLCB0ZXN0X25hbWUpIFwKLSAgY2xhc3MgR1RFU1RfVEVTVF9DTEFTU19OQU1FXyh0ZXN0
X2Nhc2VfbmFtZSwgdGVzdF9uYW1lKSBcCi0gICAgICA6IHB1YmxpYyB0ZXN0X2Nhc2VfbmFtZSB7
IFwKLSAgIHB1YmxpYzogXAotICAgIEdURVNUX1RFU1RfQ0xBU1NfTkFNRV8odGVzdF9jYXNlX25h
bWUsIHRlc3RfbmFtZSkoKSB7fSBcCi0gICAgdmlydHVhbCB2b2lkIFRlc3RCb2R5KCk7IFwKLSAg
IHByaXZhdGU6IFwKLSAgICBzdGF0aWMgaW50IEFkZFRvUmVnaXN0cnkoKSB7IFwKLSAgICAgIDo6
dGVzdGluZzo6VW5pdFRlc3Q6OkdldEluc3RhbmNlKCktPnBhcmFtZXRlcml6ZWRfdGVzdF9yZWdp
c3RyeSgpLiBcCi0gICAgICAgICAgR2V0VGVzdENhc2VQYXR0ZXJuSG9sZGVyPHRlc3RfY2FzZV9u
YW1lPihcCi0gICAgICAgICAgICAgICN0ZXN0X2Nhc2VfbmFtZSwgXAotICAgICAgICAgICAgICA6
OnRlc3Rpbmc6OmludGVybmFsOjpDb2RlTG9jYXRpb24oXAotICAgICAgICAgICAgICAgICAgX19G
SUxFX18sIF9fTElORV9fKSktPkFkZFRlc3RQYXR0ZXJuKFwKLSAgICAgICAgICAgICAgICAgICAg
ICAjdGVzdF9jYXNlX25hbWUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAjdGVzdF9uYW1lLCBc
Ci0gICAgICAgICAgICAgICAgICAgICAgbmV3IDo6dGVzdGluZzo6aW50ZXJuYWw6OlRlc3RNZXRh
RmFjdG9yeTwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICBHVEVTVF9URVNUX0NMQVNTX05B
TUVfKFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY2FzZV9uYW1lLCB0ZXN0
X25hbWUpPigpKTsgXAotICAgICAgcmV0dXJuIDA7IFwKLSAgICB9IFwKLSAgICBzdGF0aWMgaW50
IGd0ZXN0X3JlZ2lzdGVyaW5nX2R1bW15XyBHVEVTVF9BVFRSSUJVVEVfVU5VU0VEXzsgXAotICAg
IEdURVNUX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTl8oXAotICAgICAgICBHVEVTVF9URVNUX0NM
QVNTX05BTUVfKHRlc3RfY2FzZV9uYW1lLCB0ZXN0X25hbWUpKTsgXAotICB9OyBcCi0gIGludCBH
VEVTVF9URVNUX0NMQVNTX05BTUVfKHRlc3RfY2FzZV9uYW1lLCBcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlc3RfbmFtZSk6Omd0ZXN0X3JlZ2lzdGVyaW5nX2R1bW15XyA9IFwKLSAg
ICAgIEdURVNUX1RFU1RfQ0xBU1NfTkFNRV8odGVzdF9jYXNlX25hbWUsIHRlc3RfbmFtZSk6OkFk
ZFRvUmVnaXN0cnkoKTsgXAotICB2b2lkIEdURVNUX1RFU1RfQ0xBU1NfTkFNRV8odGVzdF9jYXNl
X25hbWUsIHRlc3RfbmFtZSk6OlRlc3RCb2R5KCkKLQotLy8gVGhlIG9wdGlvbmFsIGxhc3QgYXJn
dW1lbnQgdG8gSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AgYWxsb3dzIHRoZSB1c2VyCi0vLyB0byBz
cGVjaWZ5IGEgZnVuY3Rpb24gb3IgZnVuY3RvciB0aGF0IGdlbmVyYXRlcyBjdXN0b20gdGVzdCBu
YW1lIHN1ZmZpeGVzCi0vLyBiYXNlZCBvbiB0aGUgdGVzdCBwYXJhbWV0ZXJzLiBUaGUgZnVuY3Rp
b24gc2hvdWxkIGFjY2VwdCBvbmUgYXJndW1lbnQgb2YKLS8vIHR5cGUgdGVzdGluZzo6VGVzdFBh
cmFtSW5mbzxjbGFzcyBQYXJhbVR5cGU+LCBhbmQgcmV0dXJuIHN0ZDo6c3RyaW5nLgotLy8KLS8v
IHRlc3Rpbmc6OlByaW50VG9TdHJpbmdQYXJhbU5hbWUgaXMgYSBidWlsdGluIHRlc3Qgc3VmZml4
IGdlbmVyYXRvciB0aGF0Ci0vLyByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0ZXN0aW5nOjpQcmludFRv
U3RyaW5nKEdldFBhcmFtKCkpLgotLy8KLS8vIE5vdGU6IHRlc3QgbmFtZXMgbXVzdCBiZSBub24t
ZW1wdHksIHVuaXF1ZSwgYW5kIG1heSBvbmx5IGNvbnRhaW4gQVNDSUkKLS8vIGFscGhhbnVtZXJp
YyBjaGFyYWN0ZXJzIG9yIHVuZGVyc2NvcmUuIEJlY2F1c2UgUHJpbnRUb1N0cmluZyBhZGRzIHF1
b3RlcwotLy8gdG8gc3RkOjpzdHJpbmcgYW5kIEMgc3RyaW5ncywgaXQgd29uJ3Qgd29yayBmb3Ig
dGhlc2UgdHlwZXMuCi0KLSMgZGVmaW5lIElOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKHByZWZpeCwg
dGVzdF9jYXNlX25hbWUsIGdlbmVyYXRvciwgLi4uKSBcCi0gIDo6dGVzdGluZzo6aW50ZXJuYWw6
OlBhcmFtR2VuZXJhdG9yPHRlc3RfY2FzZV9uYW1lOjpQYXJhbVR5cGU+IFwKLSAgICAgIGd0ZXN0
XyMjcHJlZml4IyN0ZXN0X2Nhc2VfbmFtZSMjX0V2YWxHZW5lcmF0b3JfKCkgeyByZXR1cm4gZ2Vu
ZXJhdG9yOyB9IFwKLSAgOjpzdGQ6OnN0cmluZyBndGVzdF8jI3ByZWZpeCMjdGVzdF9jYXNlX25h
bWUjI19FdmFsR2VuZXJhdGVOYW1lXyggXAotICAgICAgY29uc3QgOjp0ZXN0aW5nOjpUZXN0UGFy
YW1JbmZvPHRlc3RfY2FzZV9uYW1lOjpQYXJhbVR5cGU+JiBpbmZvKSB7IFwKLSAgICByZXR1cm4g
Ojp0ZXN0aW5nOjppbnRlcm5hbDo6R2V0UGFyYW1OYW1lR2VuPHRlc3RfY2FzZV9uYW1lOjpQYXJh
bVR5cGU+IFwKLSAgICAgICAgKF9fVkFfQVJHU19fKShpbmZvKTsgXAotICB9IFwKLSAgaW50IGd0
ZXN0XyMjcHJlZml4IyN0ZXN0X2Nhc2VfbmFtZSMjX2R1bW15XyBHVEVTVF9BVFRSSUJVVEVfVU5V
U0VEXyA9IFwKLSAgICAgIDo6dGVzdGluZzo6VW5pdFRlc3Q6OkdldEluc3RhbmNlKCktPnBhcmFt
ZXRlcml6ZWRfdGVzdF9yZWdpc3RyeSgpLiBcCi0gICAgICAgICAgR2V0VGVzdENhc2VQYXR0ZXJu
SG9sZGVyPHRlc3RfY2FzZV9uYW1lPihcCi0gICAgICAgICAgICAgICN0ZXN0X2Nhc2VfbmFtZSwg
XAotICAgICAgICAgICAgICA6OnRlc3Rpbmc6OmludGVybmFsOjpDb2RlTG9jYXRpb24oXAotICAg
ICAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fKSktPkFkZFRlc3RDYXNlSW5zdGFudGlh
dGlvbihcCi0gICAgICAgICAgICAgICAgICAgICAgI3ByZWZpeCwgXAotICAgICAgICAgICAgICAg
ICAgICAgICZndGVzdF8jI3ByZWZpeCMjdGVzdF9jYXNlX25hbWUjI19FdmFsR2VuZXJhdG9yXywg
XAotICAgICAgICAgICAgICAgICAgICAgICZndGVzdF8jI3ByZWZpeCMjdGVzdF9jYXNlX25hbWUj
I19FdmFsR2VuZXJhdGVOYW1lXywgXAotICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCBf
X0xJTkVfXykKLQotfSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKLQotI2VuZGlmICAvLyBHVEVTVF9I
QVNfUEFSQU1fVEVTVAotCi0jZW5kaWYgIC8vIEdURVNUX0lOQ0xVREVfR1RFU1RfR1RFU1RfUEFS
QU1fVEVTVF9IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LXByaW50ZXJzLmggYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUv
Z3Rlc3QvZ3Rlc3QtcHJpbnRlcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEz
MzE2NGNiMzhhYjUwNTk2MmY3NWIxNTc2NTRhZWVlNTQ1OWYzYS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QtcHJpbnRlcnMuaAor
KysgL2Rldi9udWxsCkBAIC0xLDk5MyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAwNywgR29vZ2xl
IEluYy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0vLwotLy8gQXV0aG9yOiB3YW5AZ29vZ2xlLmNvbSAoWmhhbnlv
bmcgV2FuKQotCi0vLyBHb29nbGUgVGVzdCAtIFRoZSBHb29nbGUgQysrIFRlc3RpbmcgRnJhbWV3
b3JrCi0vLwotLy8gVGhpcyBmaWxlIGltcGxlbWVudHMgYSB1bml2ZXJzYWwgdmFsdWUgcHJpbnRl
ciB0aGF0IGNhbiBwcmludCBhCi0vLyB2YWx1ZSBvZiBhbnkgdHlwZSBUOgotLy8KLS8vICAgdm9p
ZCA6OnRlc3Rpbmc6OmludGVybmFsOjpVbml2ZXJzYWxQcmludGVyPFQ+OjpQcmludCh2YWx1ZSwg
b3N0cmVhbV9wdHIpOwotLy8KLS8vIEEgdXNlciBjYW4gdGVhY2ggdGhpcyBmdW5jdGlvbiBob3cg
dG8gcHJpbnQgYSBjbGFzcyB0eXBlIFQgYnkKLS8vIGRlZmluaW5nIGVpdGhlciBvcGVyYXRvcjw8
KCkgb3IgUHJpbnRUbygpIGluIHRoZSBuYW1lc3BhY2UgdGhhdAotLy8gZGVmaW5lcyBULiAgTW9y
ZSBzcGVjaWZpY2FsbHksIHRoZSBGSVJTVCBkZWZpbmVkIGZ1bmN0aW9uIGluIHRoZQotLy8gZm9s
bG93aW5nIGxpc3Qgd2lsbCBiZSB1c2VkIChhc3N1bWluZyBUIGlzIGRlZmluZWQgaW4gbmFtZXNw
YWNlCi0vLyBmb28pOgotLy8KLS8vICAgMS4gZm9vOjpQcmludFRvKGNvbnN0IFQmLCBvc3RyZWFt
KikKLS8vICAgMi4gb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgVCYpIGRlZmluZWQgaW4gZWl0
aGVyIGZvbyBvciB0aGUKLS8vICAgICAgZ2xvYmFsIG5hbWVzcGFjZS4KLS8vCi0vLyBJZiBub25l
IG9mIHRoZSBhYm92ZSBpcyBkZWZpbmVkLCBpdCB3aWxsIHByaW50IHRoZSBkZWJ1ZyBzdHJpbmcg
b2YKLS8vIHRoZSB2YWx1ZSBpZiBpdCBpcyBhIHByb3RvY29sIGJ1ZmZlciwgb3IgcHJpbnQgdGhl
IHJhdyBieXRlcyBpbiB0aGUKLS8vIHZhbHVlIG90aGVyd2lzZS4KLS8vCi0vLyBUbyBhaWQgZGVi
dWdnaW5nOiB3aGVuIFQgaXMgYSByZWZlcmVuY2UgdHlwZSwgdGhlIGFkZHJlc3Mgb2YgdGhlCi0v
LyB2YWx1ZSBpcyBhbHNvIHByaW50ZWQ7IHdoZW4gVCBpcyBhIChjb25zdCkgY2hhciBwb2ludGVy
LCBib3RoIHRoZQotLy8gcG9pbnRlciB2YWx1ZSBhbmQgdGhlIE5VTC10ZXJtaW5hdGVkIHN0cmlu
ZyBpdCBwb2ludHMgdG8gYXJlCi0vLyBwcmludGVkLgotLy8KLS8vIFdlIGFsc28gcHJvdmlkZSBz
b21lIGNvbnZlbmllbnQgd3JhcHBlcnM6Ci0vLwotLy8gICAvLyBQcmludHMgYSB2YWx1ZSB0byBh
IHN0cmluZy4gIEZvciBhIChjb25zdCBvciBub3QpIGNoYXIKLS8vICAgLy8gcG9pbnRlciwgdGhl
IE5VTC10ZXJtaW5hdGVkIHN0cmluZyAoYnV0IG5vdCB0aGUgcG9pbnRlcikgaXMKLS8vICAgLy8g
cHJpbnRlZC4KLS8vICAgc3RkOjpzdHJpbmcgOjp0ZXN0aW5nOjpQcmludFRvU3RyaW5nKGNvbnN0
IFQmIHZhbHVlKTsKLS8vCi0vLyAgIC8vIFByaW50cyBhIHZhbHVlIHRlcnNlbHk6IGZvciBhIHJl
ZmVyZW5jZSB0eXBlLCB0aGUgcmVmZXJlbmNlZAotLy8gICAvLyB2YWx1ZSAoYnV0IG5vdCB0aGUg
YWRkcmVzcykgaXMgcHJpbnRlZDsgZm9yIGEgKGNvbnN0IG9yIG5vdCkgY2hhcgotLy8gICAvLyBw
b2ludGVyLCB0aGUgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIChidXQgbm90IHRoZSBwb2ludGVyKSBp
cwotLy8gICAvLyBwcmludGVkLgotLy8gICB2b2lkIDo6dGVzdGluZzo6aW50ZXJuYWw6OlVuaXZl
cnNhbFRlcnNlUHJpbnQoY29uc3QgVCYgdmFsdWUsIG9zdHJlYW0qKTsKLS8vCi0vLyAgIC8vIFBy
aW50cyB2YWx1ZSB1c2luZyB0aGUgdHlwZSBpbmZlcnJlZCBieSB0aGUgY29tcGlsZXIuICBUaGUg
ZGlmZmVyZW5jZQotLy8gICAvLyBmcm9tIFVuaXZlcnNhbFRlcnNlUHJpbnQoKSBpcyB0aGF0IHRo
aXMgZnVuY3Rpb24gcHJpbnRzIGJvdGggdGhlCi0vLyAgIC8vIHBvaW50ZXIgYW5kIHRoZSBOVUwt
dGVybWluYXRlZCBzdHJpbmcgZm9yIGEgKGNvbnN0IG9yIG5vdCkgY2hhciBwb2ludGVyLgotLy8g
ICB2b2lkIDo6dGVzdGluZzo6aW50ZXJuYWw6OlVuaXZlcnNhbFByaW50KGNvbnN0IFQmIHZhbHVl
LCBvc3RyZWFtKik7Ci0vLwotLy8gICAvLyBQcmludHMgdGhlIGZpZWxkcyBvZiBhIHR1cGxlIHRl
cnNlbHkgdG8gYSBzdHJpbmcgdmVjdG9yLCBvbmUKLS8vICAgLy8gZWxlbWVudCBmb3IgZWFjaCBm
aWVsZC4gVHVwbGUgc3VwcG9ydCBtdXN0IGJlIGVuYWJsZWQgaW4KLS8vICAgLy8gZ3Rlc3QtcG9y
dC5oLgotLy8gICBzdGQ6OnZlY3RvcjxzdHJpbmc+IFVuaXZlcnNhbFRlcnNlUHJpbnRUdXBsZUZp
ZWxkc1RvU3RyaW5ncygKLS8vICAgICAgIGNvbnN0IFR1cGxlJiB2YWx1ZSk7Ci0vLwotLy8gS25v
d24gbGltaXRhdGlvbjoKLS8vCi0vLyBUaGUgcHJpbnQgcHJpbWl0aXZlcyBwcmludCB0aGUgZWxl
bWVudHMgb2YgYW4gU1RMLXN0eWxlIGNvbnRhaW5lcgotLy8gdXNpbmcgdGhlIGNvbXBpbGVyLWlu
ZmVycmVkIHR5cGUgb2YgKml0ZXIgd2hlcmUgaXRlciBpcyBhCi0vLyBjb25zdF9pdGVyYXRvciBv
ZiB0aGUgY29udGFpbmVyLiAgV2hlbiBjb25zdF9pdGVyYXRvciBpcyBhbiBpbnB1dAotLy8gaXRl
cmF0b3IgYnV0IG5vdCBhIGZvcndhcmQgaXRlcmF0b3IsIHRoaXMgaW5mZXJyZWQgdHlwZSBtYXkg
bm90Ci0vLyBtYXRjaCB2YWx1ZV90eXBlLCBhbmQgdGhlIHByaW50IG91dHB1dCBtYXkgYmUgaW5j
b3JyZWN0LiAgSW4KLS8vIHByYWN0aWNlLCB0aGlzIGlzIHJhcmVseSBhIHByb2JsZW0gYXMgZm9y
IG1vc3QgY29udGFpbmVycwotLy8gY29uc3RfaXRlcmF0b3IgaXMgYSBmb3J3YXJkIGl0ZXJhdG9y
LiAgV2UnbGwgZml4IHRoaXMgaWYgdGhlcmUncyBhbgotLy8gYWN0dWFsIG5lZWQgZm9yIGl0LiAg
Tm90ZSB0aGF0IHRoaXMgZml4IGNhbm5vdCByZWx5IG9uIHZhbHVlX3R5cGUKLS8vIGJlaW5nIGRl
ZmluZWQgYXMgbWFueSB1c2VyLWRlZmluZWQgY29udGFpbmVyIHR5cGVzIGRvbid0IGhhdmUKLS8v
IHZhbHVlX3R5cGUuCi0KLSNpZm5kZWYgR1RFU1RfSU5DTFVERV9HVEVTVF9HVEVTVF9QUklOVEVS
U19IXwotI2RlZmluZSBHVEVTVF9JTkNMVURFX0dURVNUX0dURVNUX1BSSU5URVJTX0hfCi0KLSNp
bmNsdWRlIDxvc3RyZWFtPiAgLy8gTk9MSU5UCi0jaW5jbHVkZSA8c3N0cmVhbT4KLSNpbmNsdWRl
IDxzdHJpbmc+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVk
ZSAiZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtcG9ydC5oIgotI2luY2x1ZGUgImd0ZXN0L2ludGVybmFs
L2d0ZXN0LWludGVybmFsLmgiCi0KLSNpZiBHVEVTVF9IQVNfU1REX1RVUExFXwotIyBpbmNsdWRl
IDx0dXBsZT4KLSNlbmRpZgotCi1uYW1lc3BhY2UgdGVzdGluZyB7Ci0KLS8vIERlZmluaXRpb25z
IGluIHRoZSAnaW50ZXJuYWwnIGFuZCAnaW50ZXJuYWwyJyBuYW1lIHNwYWNlcyBhcmUKLS8vIHN1
YmplY3QgdG8gY2hhbmdlIHdpdGhvdXQgbm90aWNlLiAgRE8gTk9UIFVTRSBUSEVNIElOIFVTRVIg
Q09ERSEKLW5hbWVzcGFjZSBpbnRlcm5hbDIgewotCi0vLyBQcmludHMgdGhlIGdpdmVuIG51bWJl
ciBvZiBieXRlcyBpbiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBnaXZlbgotLy8gb3N0cmVhbS4K
LUdURVNUX0FQSV8gdm9pZCBQcmludEJ5dGVzSW5PYmplY3RUbyhjb25zdCB1bnNpZ25lZCBjaGFy
KiBvYmpfYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6c3RkOjpvc3Ry
ZWFtKiBvcyk7Ci0KLS8vIEZvciBzZWxlY3Rpbmcgd2hpY2ggcHJpbnRlciB0byB1c2Ugd2hlbiBh
IGdpdmVuIHR5cGUgaGFzIG5laXRoZXIgPDwKLS8vIG5vciBQcmludFRvKCkuCi1lbnVtIFR5cGVL
aW5kIHsKLSAga1Byb3RvYnVmLCAgICAgICAgICAgICAgLy8gYSBwcm90b2J1ZiB0eXBlCi0gIGtD
b252ZXJ0aWJsZVRvSW50ZWdlciwgIC8vIGEgdHlwZSBpbXBsaWNpdGx5IGNvbnZlcnRpYmxlIHRv
IEJpZ2dlc3RJbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGUuZy4gYSBuYW1lZCBv
ciB1bm5hbWVkIGVudW0gdHlwZSkKLSAga090aGVyVHlwZSAgICAgICAgICAgICAgLy8gYW55dGhp
bmcgZWxzZQotfTsKLQotLy8gVHlwZVdpdGhvdXRGb3JtYXR0ZXI8VCwga1R5cGVLaW5kPjo6UHJp
bnRWYWx1ZSh2YWx1ZSwgb3MpIGlzIGNhbGxlZAotLy8gYnkgdGhlIHVuaXZlcnNhbCBwcmludGVy
IHRvIHByaW50IGEgdmFsdWUgb2YgdHlwZSBUIHdoZW4gbmVpdGhlcgotLy8gb3BlcmF0b3I8PCBu
b3IgUHJpbnRUbygpIGlzIGRlZmluZWQgZm9yIFQsIHdoZXJlIGtUeXBlS2luZCBpcyB0aGUKLS8v
ICJraW5kIiBvZiBUIGFzIGRlZmluZWQgYnkgZW51bSBUeXBlS2luZC4KLXRlbXBsYXRlIDx0eXBl
bmFtZSBULCBUeXBlS2luZCBrVHlwZUtpbmQ+Ci1jbGFzcyBUeXBlV2l0aG91dEZvcm1hdHRlciB7
Ci0gcHVibGljOgotICAvLyBUaGlzIGRlZmF1bHQgdmVyc2lvbiBpcyBjYWxsZWQgd2hlbiBrVHlw
ZUtpbmQgaXMga090aGVyVHlwZS4KLSAgc3RhdGljIHZvaWQgUHJpbnRWYWx1ZShjb25zdCBUJiB2
YWx1ZSwgOjpzdGQ6Om9zdHJlYW0qIG9zKSB7Ci0gICAgUHJpbnRCeXRlc0luT2JqZWN0VG8ocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJnZhbHVlKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplb2YodmFsdWUpLCBvcyk7Ci0gIH0KLX07Ci0KLS8vIFdlIHByaW50
IGEgcHJvdG9idWYgdXNpbmcgaXRzIFNob3J0RGVidWdTdHJpbmcoKSB3aGVuIHRoZSBzdHJpbmcK
LS8vIGRvZXNuJ3QgZXhjZWVkIHRoaXMgbWFueSBjaGFyYWN0ZXJzOyBvdGhlcndpc2Ugd2UgcHJp
bnQgaXQgdXNpbmcKLS8vIERlYnVnU3RyaW5nKCkgZm9yIGJldHRlciByZWFkYWJpbGl0eS4KLWNv
bnN0IHNpemVfdCBrUHJvdG9idWZPbmVMaW5lck1heExlbmd0aCA9IDUwOwotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KLWNsYXNzIFR5cGVXaXRob3V0Rm9ybWF0dGVyPFQsIGtQcm90b2J1Zj4gewot
IHB1YmxpYzoKLSAgc3RhdGljIHZvaWQgUHJpbnRWYWx1ZShjb25zdCBUJiB2YWx1ZSwgOjpzdGQ6
Om9zdHJlYW0qIG9zKSB7Ci0gICAgY29uc3QgOjp0ZXN0aW5nOjppbnRlcm5hbDo6c3RyaW5nIHNo
b3J0X3N0ciA9IHZhbHVlLlNob3J0RGVidWdTdHJpbmcoKTsKLSAgICBjb25zdCA6OnRlc3Rpbmc6
OmludGVybmFsOjpzdHJpbmcgcHJldHR5X3N0ciA9Ci0gICAgICAgIHNob3J0X3N0ci5sZW5ndGgo
KSA8PSBrUHJvdG9idWZPbmVMaW5lck1heExlbmd0aCA/Ci0gICAgICAgIHNob3J0X3N0ciA6ICgi
XG4iICsgdmFsdWUuRGVidWdTdHJpbmcoKSk7Ci0gICAgKm9zIDw8ICgiPCIgKyBwcmV0dHlfc3Ry
ICsgIj4iKTsKLSAgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBUeXBlV2l0
aG91dEZvcm1hdHRlcjxULCBrQ29udmVydGlibGVUb0ludGVnZXI+IHsKLSBwdWJsaWM6Ci0gIC8v
IFNpbmNlIFQgaGFzIG5vIDw8IG9wZXJhdG9yIG9yIFByaW50VG8oKSBidXQgY2FuIGJlIGltcGxp
Y2l0bHkKLSAgLy8gY29udmVydGVkIHRvIEJpZ2dlc3RJbnQsIHdlIHByaW50IGl0IGFzIGEgQmln
Z2VzdEludC4KLSAgLy8KLSAgLy8gTW9zdCBsaWtlbHkgVCBpcyBhbiBlbnVtIHR5cGUgKGVpdGhl
ciBuYW1lZCBvciB1bm5hbWVkKSwgaW4gd2hpY2gKLSAgLy8gY2FzZSBwcmludGluZyBpdCBhcyBh
biBpbnRlZ2VyIGlzIHRoZSBkZXNpcmVkIGJlaGF2aW9yLiAgSW4gY2FzZQotICAvLyBUIGlzIG5v
dCBhbiBlbnVtLCBwcmludGluZyBpdCBhcyBhbiBpbnRlZ2VyIGlzIHRoZSBiZXN0IHdlIGNhbiBk
bwotICAvLyBnaXZlbiB0aGF0IGl0IGhhcyBubyB1c2VyLWRlZmluZWQgcHJpbnRlci4KLSAgc3Rh
dGljIHZvaWQgUHJpbnRWYWx1ZShjb25zdCBUJiB2YWx1ZSwgOjpzdGQ6Om9zdHJlYW0qIG9zKSB7
Ci0gICAgY29uc3QgaW50ZXJuYWw6OkJpZ2dlc3RJbnQga0JpZ0ludCA9IHZhbHVlOwotICAgICpv
cyA8PCBrQmlnSW50OwotICB9Ci19OwotCi0vLyBQcmludHMgdGhlIGdpdmVuIHZhbHVlIHRvIHRo
ZSBnaXZlbiBvc3RyZWFtLiAgSWYgdGhlIHZhbHVlIGlzIGEKLS8vIHByb3RvY29sIG1lc3NhZ2Us
IGl0cyBkZWJ1ZyBzdHJpbmcgaXMgcHJpbnRlZDsgaWYgaXQncyBhbiBlbnVtIG9yCi0vLyBvZiBh
IHR5cGUgaW1wbGljaXRseSBjb252ZXJ0aWJsZSB0byBCaWdnZXN0SW50LCBpdCdzIHByaW50ZWQg
YXMgYW4KLS8vIGludGVnZXI7IG90aGVyd2lzZSB0aGUgYnl0ZXMgaW4gdGhlIHZhbHVlIGFyZSBw
cmludGVkLiAgVGhpcyBpcwotLy8gd2hhdCBVbml2ZXJzYWxQcmludGVyPFQ+OjpQcmludCgpIGRv
ZXMgd2hlbiBpdCBrbm93cyBub3RoaW5nIGFib3V0Ci0vLyB0eXBlIFQgYW5kIFQgaGFzIG5laXRo
ZXIgPDwgb3BlcmF0b3Igbm9yIFByaW50VG8oKS4KLS8vCi0vLyBBIHVzZXIgY2FuIG92ZXJyaWRl
IHRoaXMgYmVoYXZpb3IgZm9yIGEgY2xhc3MgdHlwZSBGb28gYnkgZGVmaW5pbmcKLS8vIGEgPDwg
b3BlcmF0b3IgaW4gdGhlIG5hbWVzcGFjZSB3aGVyZSBGb28gaXMgZGVmaW5lZC4KLS8vCi0vLyBX
ZSBwdXQgdGhpcyBvcGVyYXRvciBpbiBuYW1lc3BhY2UgJ2ludGVybmFsMicgaW5zdGVhZCBvZiAn
aW50ZXJuYWwnCi0vLyB0byBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24sIGFzIG11Y2ggY29k
ZSBpbiAnaW50ZXJuYWwnIG5lZWRzIHRvCi0vLyB1c2UgPDwgaW4gU1RMLCB3aGljaCB3b3VsZCBj
b25mbGljdCB3aXRoIG91ciBvd24gPDwgd2VyZSBpdCBkZWZpbmVkCi0vLyBpbiAnaW50ZXJuYWwn
LgotLy8KLS8vIE5vdGUgdGhhdCB0aGlzIG9wZXJhdG9yPDwgdGFrZXMgYSBnZW5lcmljIHN0ZDo6
YmFzaWNfb3N0cmVhbTxDaGFyLAotLy8gQ2hhclRyYWl0cz4gdHlwZSBpbnN0ZWFkIG9mIHRoZSBt
b3JlIHJlc3RyaWN0ZWQgc3RkOjpvc3RyZWFtLiAgSWYKLS8vIHdlIGRlZmluZSBpdCB0byB0YWtl
IGFuIHN0ZDo6b3N0cmVhbSBpbnN0ZWFkLCB3ZSdsbCBnZXQgYW4KLS8vICJhbWJpZ3VvdXMgb3Zl
cmxvYWRzIiBjb21waWxlciBlcnJvciB3aGVuIHRyeWluZyB0byBwcmludCBhIHR5cGUKLS8vIEZv
byB0aGF0IHN1cHBvcnRzIHN0cmVhbWluZyB0byBzdGQ6OmJhc2ljX29zdHJlYW08Q2hhciwKLS8v
IENoYXJUcmFpdHM+LCBhcyB0aGUgY29tcGlsZXIgY2Fubm90IHRlbGwgd2hldGhlcgotLy8gb3Bl
cmF0b3I8PChzdGQ6Om9zdHJlYW0mLCBjb25zdCBUJikgb3IKLS8vIG9wZXJhdG9yPDwoc3RkOjpi
YXNpY19zdHJlYW08Q2hhciwgQ2hhclRyYWl0cz4sIGNvbnN0IEZvbyYpIGlzIG1vcmUKLS8vIHNw
ZWNpZmljLgotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXIsIHR5cGVuYW1lIENoYXJUcmFpdHMsIHR5
cGVuYW1lIFQ+Ci06OnN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyLCBDaGFyVHJhaXRzPiYgb3BlcmF0
b3I8PCgKLSAgICA6OnN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyLCBDaGFyVHJhaXRzPiYgb3MsIGNv
bnN0IFQmIHgpIHsKLSAgVHlwZVdpdGhvdXRGb3JtYXR0ZXI8VCwKLSAgICAgIChpbnRlcm5hbDo6
SXNBUHJvdG9jb2xNZXNzYWdlPFQ+Ojp2YWx1ZSA/IGtQcm90b2J1ZiA6Ci0gICAgICAgaW50ZXJu
YWw6OkltcGxpY2l0bHlDb252ZXJ0aWJsZTxjb25zdCBUJiwgaW50ZXJuYWw6OkJpZ2dlc3RJbnQ+
Ojp2YWx1ZSA/Ci0gICAgICAga0NvbnZlcnRpYmxlVG9JbnRlZ2VyIDoga090aGVyVHlwZSk+OjpQ
cmludFZhbHVlKHgsICZvcyk7Ci0gIHJldHVybiBvczsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGlu
dGVybmFsMgotfSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKLQotLy8gVGhpcyBuYW1lc3BhY2UgTVVT
VCBOT1QgQkUgTkVTVEVEIElOIDo6dGVzdGluZywgb3IgdGhlIG5hbWUgbG9vay11cAotLy8gbWFn
aWMgbmVlZGVkIGZvciBpbXBsZW1lbnRpbmcgVW5pdmVyc2FsUHJpbnRlciB3b24ndCB3b3JrLgot
bmFtZXNwYWNlIHRlc3RpbmdfaW50ZXJuYWwgewotCi0vLyBVc2VkIHRvIHByaW50IGEgdmFsdWUg
dGhhdCBpcyBub3QgYW4gU1RMLXN0eWxlIGNvbnRhaW5lciB3aGVuIHRoZQotLy8gdXNlciBkb2Vz
bid0IGRlZmluZSBQcmludFRvKCkgZm9yIGl0LgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci12b2lk
IERlZmF1bHRQcmludE5vbkNvbnRhaW5lclRvKGNvbnN0IFQmIHZhbHVlLCA6OnN0ZDo6b3N0cmVh
bSogb3MpIHsKLSAgLy8gV2l0aCB0aGUgZm9sbG93aW5nIHN0YXRlbWVudCwgZHVyaW5nIHVucXVh
bGlmaWVkIG5hbWUgbG9va3VwLAotICAvLyB0ZXN0aW5nOjppbnRlcm5hbDI6Om9wZXJhdG9yPDwg
YXBwZWFycyBhcyBpZiBpdCB3YXMgZGVjbGFyZWQgaW4KLSAgLy8gdGhlIG5lYXJlc3QgZW5jbG9z
aW5nIG5hbWVzcGFjZSB0aGF0IGNvbnRhaW5zIGJvdGgKLSAgLy8gOjp0ZXN0aW5nX2ludGVybmFs
IGFuZCA6OnRlc3Rpbmc6OmludGVybmFsMiwgaS5lLiB0aGUgZ2xvYmFsCi0gIC8vIG5hbWVzcGFj
ZS4gIEZvciBtb3JlIGRldGFpbHMsIHJlZmVyIHRvIHRoZSBDKysgU3RhbmRhcmQgc2VjdGlvbgot
ICAvLyA3LjMuNC0xIFtuYW1lc3BhY2UudWRpcl0uICBUaGlzIGFsbG93cyB1cyB0byBmYWxsIGJh
Y2sgb250bwotICAvLyB0ZXN0aW5nOjppbnRlcm5hbDI6Om9wZXJhdG9yPDwgaW4gY2FzZSBUIGRv
ZXNuJ3QgY29tZSB3aXRoIGEgPDwKLSAgLy8gb3BlcmF0b3IuCi0gIC8vCi0gIC8vIFdlIGNhbm5v
dCB3cml0ZSAndXNpbmcgOjp0ZXN0aW5nOjppbnRlcm5hbDI6Om9wZXJhdG9yPDw7Jywgd2hpY2gK
LSAgLy8gZ2NjIDMuMyBmYWlscyB0byBjb21waWxlIGR1ZSB0byBhIGNvbXBpbGVyIGJ1Zy4KLSAg
dXNpbmcgbmFtZXNwYWNlIDo6dGVzdGluZzo6aW50ZXJuYWwyOyAgLy8gTk9MSU5UCi0KLSAgLy8g
QXNzdW1pbmcgVCBpcyBkZWZpbmVkIGluIG5hbWVzcGFjZSBmb28sIGluIHRoZSBuZXh0IHN0YXRl
bWVudCwKLSAgLy8gdGhlIGNvbXBpbGVyIHdpbGwgY29uc2lkZXIgYWxsIG9mOgotICAvLwotICAv
LyAgIDEuIGZvbzo6b3BlcmF0b3I8PCAodGhhbmtzIHRvIEtvZW5pZyBsb29rLXVwKSwKLSAgLy8g
ICAyLiA6Om9wZXJhdG9yPDwgKGFzIHRoZSBjdXJyZW50IG5hbWVzcGFjZSBpcyBlbmNsb3NlZCBp
biA6OiksCi0gIC8vICAgMy4gdGVzdGluZzo6aW50ZXJuYWwyOjpvcGVyYXRvcjw8ICh0aGFua3Mg
dG8gdGhlIHVzaW5nIHN0YXRlbWVudCBhYm92ZSkuCi0gIC8vCi0gIC8vIFRoZSBvcGVyYXRvcjw8
IHdob3NlIHR5cGUgbWF0Y2hlcyBUIGJlc3Qgd2lsbCBiZSBwaWNrZWQuCi0gIC8vCi0gIC8vIFdl
IGRlbGliZXJhdGVseSBhbGxvdyAjMiB0byBiZSBhIGNhbmRpZGF0ZSwgYXMgc29tZXRpbWVzIGl0
J3MKLSAgLy8gaW1wb3NzaWJsZSB0byBkZWZpbmUgIzEgKGUuZy4gd2hlbiBmb28gaXMgOjpzdGQs
IGRlZmluaW5nCi0gIC8vIGFueXRoaW5nIGluIGl0IGlzIHVuZGVmaW5lZCBiZWhhdmlvciB1bmxl
c3MgeW91IGFyZSBhIGNvbXBpbGVyCi0gIC8vIHZlbmRvci4pLgotICAqb3MgPDwgdmFsdWU7Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSB0ZXN0aW5nX2ludGVybmFsCi0KLW5hbWVzcGFjZSB0ZXN0aW5n
IHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLS8vIEZvcm1hdEZvckNvbXBhcmlzb248VG9Qcmlu
dCwgT3RoZXJPcGVyYW5kPjo6Rm9ybWF0KHZhbHVlKSBmb3JtYXRzIGEKLS8vIHZhbHVlIG9mIHR5
cGUgVG9QcmludCB0aGF0IGlzIGFuIG9wZXJhbmQgb2YgYSBjb21wYXJpc29uIGFzc2VydGlvbgot
Ly8gKGUuZy4gQVNTRVJUX0VRKS4gIE90aGVyT3BlcmFuZCBpcyB0aGUgdHlwZSBvZiB0aGUgb3Ro
ZXIgb3BlcmFuZCBpbgotLy8gdGhlIGNvbXBhcmlzb24sIGFuZCBpcyB1c2VkIHRvIGhlbHAgZGV0
ZXJtaW5lIHRoZSBiZXN0IHdheSB0bwotLy8gZm9ybWF0IHRoZSB2YWx1ZS4gIEluIHBhcnRpY3Vs
YXIsIHdoZW4gdGhlIHZhbHVlIGlzIGEgQyBzdHJpbmcKLS8vIChjaGFyIHBvaW50ZXIpIGFuZCB0
aGUgb3RoZXIgb3BlcmFuZCBpcyBhbiBTVEwgc3RyaW5nIG9iamVjdCwgd2UKLS8vIHdhbnQgdG8g
Zm9ybWF0IHRoZSBDIHN0cmluZyBhcyBhIHN0cmluZywgc2luY2Ugd2Uga25vdyBpdCBpcwotLy8g
Y29tcGFyZWQgYnkgdmFsdWUgd2l0aCB0aGUgc3RyaW5nIG9iamVjdC4gIElmIHRoZSB2YWx1ZSBp
cyBhIGNoYXIKLS8vIHBvaW50ZXIgYnV0IHRoZSBvdGhlciBvcGVyYW5kIGlzIG5vdCBhbiBTVEwg
c3RyaW5nIG9iamVjdCwgd2UgZG9uJ3QKLS8vIGtub3cgd2hldGhlciB0aGUgcG9pbnRlciBpcyBz
dXBwb3NlZCB0byBwb2ludCB0byBhIE5VTC10ZXJtaW5hdGVkCi0vLyBzdHJpbmcsIGFuZCB0aHVz
IHdhbnQgdG8gcHJpbnQgaXQgYXMgYSBwb2ludGVyIHRvIGJlIHNhZmUuCi0vLwotLy8gSU5URVJO
QUwgSU1QTEVNRU5UQVRJT04gLSBETyBOT1QgVVNFIElOIEEgVVNFUiBQUk9HUkFNLgotCi0vLyBU
aGUgZGVmYXVsdCBjYXNlLgotdGVtcGxhdGUgPHR5cGVuYW1lIFRvUHJpbnQsIHR5cGVuYW1lIE90
aGVyT3BlcmFuZD4KLWNsYXNzIEZvcm1hdEZvckNvbXBhcmlzb24gewotIHB1YmxpYzoKLSAgc3Rh
dGljIDo6c3RkOjpzdHJpbmcgRm9ybWF0KGNvbnN0IFRvUHJpbnQmIHZhbHVlKSB7Ci0gICAgcmV0
dXJuIDo6dGVzdGluZzo6UHJpbnRUb1N0cmluZyh2YWx1ZSk7Ci0gIH0KLX07Ci0KLS8vIEFycmF5
LgotdGVtcGxhdGUgPHR5cGVuYW1lIFRvUHJpbnQsIHNpemVfdCBOLCB0eXBlbmFtZSBPdGhlck9w
ZXJhbmQ+Ci1jbGFzcyBGb3JtYXRGb3JDb21wYXJpc29uPFRvUHJpbnRbTl0sIE90aGVyT3BlcmFu
ZD4gewotIHB1YmxpYzoKLSAgc3RhdGljIDo6c3RkOjpzdHJpbmcgRm9ybWF0KGNvbnN0IFRvUHJp
bnQqIHZhbHVlKSB7Ci0gICAgcmV0dXJuIEZvcm1hdEZvckNvbXBhcmlzb248Y29uc3QgVG9Qcmlu
dCosIE90aGVyT3BlcmFuZD46OkZvcm1hdCh2YWx1ZSk7Ci0gIH0KLX07Ci0KLS8vIEJ5IGRlZmF1
bHQsIHByaW50IEMgc3RyaW5nIGFzIHBvaW50ZXJzIHRvIGJlIHNhZmUsIGFzIHdlIGRvbid0IGtu
b3cKLS8vIHdoZXRoZXIgdGhleSBhY3R1YWxseSBwb2ludCB0byBhIE5VTC10ZXJtaW5hdGVkIHN0
cmluZy4KLQotI2RlZmluZSBHVEVTVF9JTVBMX0ZPUk1BVF9DX1NUUklOR19BU19QT0lOVEVSXyhD
aGFyVHlwZSkgICAgICAgICAgICAgICAgXAotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3RoZXJPcGVy
YW5kPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjbGFzcyBGb3Jt
YXRGb3JDb21wYXJpc29uPENoYXJUeXBlKiwgT3RoZXJPcGVyYW5kPiB7ICAgICAgICAgICAgICAg
ICAgXAotICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyA6OnN0ZDo6c3RyaW5nIEZvcm1hdChD
aGFyVHlwZSogdmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIDo6
dGVzdGluZzo6UHJpbnRUb1N0cmluZyhzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4odmFsdWUpKTsg
XAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLUdURVNUX0lNUExfRk9STUFUX0NfU1RSSU5HX0FT
X1BPSU5URVJfKGNoYXIpOwotR1RFU1RfSU1QTF9GT1JNQVRfQ19TVFJJTkdfQVNfUE9JTlRFUl8o
Y29uc3QgY2hhcik7Ci1HVEVTVF9JTVBMX0ZPUk1BVF9DX1NUUklOR19BU19QT0lOVEVSXyh3Y2hh
cl90KTsKLUdURVNUX0lNUExfRk9STUFUX0NfU1RSSU5HX0FTX1BPSU5URVJfKGNvbnN0IHdjaGFy
X3QpOwotCi0jdW5kZWYgR1RFU1RfSU1QTF9GT1JNQVRfQ19TVFJJTkdfQVNfUE9JTlRFUl8KLQot
Ly8gSWYgYSBDIHN0cmluZyBpcyBjb21wYXJlZCB3aXRoIGFuIFNUTCBzdHJpbmcgb2JqZWN0LCB3
ZSBrbm93IGl0J3MgbWVhbnQKLS8vIHRvIHBvaW50IHRvIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5n
LCBhbmQgdGh1cyBjYW4gcHJpbnQgaXQgYXMgYSBzdHJpbmcuCi0KLSNkZWZpbmUgR1RFU1RfSU1Q
TF9GT1JNQVRfQ19TVFJJTkdfQVNfU1RSSU5HXyhDaGFyVHlwZSwgT3RoZXJTdHJpbmdUeXBlKSBc
Ci0gIHRlbXBsYXRlIDw+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGNsYXNzIEZvcm1hdEZvckNvbXBhcmlzb248Q2hhclR5cGUq
LCBPdGhlclN0cmluZ1R5cGU+IHsgICAgICAgICAgICAgICBcCi0gICBwdWJsaWM6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgc3RhdGljIDo6c3RkOjpzdHJpbmcgRm9ybWF0KENoYXJUeXBlKiB2YWx1ZSkgeyAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gOjp0ZXN0aW5nOjpQcmludFRvU3RyaW5nKHZh
bHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0K
LQotR1RFU1RfSU1QTF9GT1JNQVRfQ19TVFJJTkdfQVNfU1RSSU5HXyhjaGFyLCA6OnN0ZDo6c3Ry
aW5nKTsKLUdURVNUX0lNUExfRk9STUFUX0NfU1RSSU5HX0FTX1NUUklOR18oY29uc3QgY2hhciwg
OjpzdGQ6OnN0cmluZyk7Ci0KLSNpZiBHVEVTVF9IQVNfR0xPQkFMX1NUUklORwotR1RFU1RfSU1Q
TF9GT1JNQVRfQ19TVFJJTkdfQVNfU1RSSU5HXyhjaGFyLCA6OnN0cmluZyk7Ci1HVEVTVF9JTVBM
X0ZPUk1BVF9DX1NUUklOR19BU19TVFJJTkdfKGNvbnN0IGNoYXIsIDo6c3RyaW5nKTsKLSNlbmRp
ZgotCi0jaWYgR1RFU1RfSEFTX0dMT0JBTF9XU1RSSU5HCi1HVEVTVF9JTVBMX0ZPUk1BVF9DX1NU
UklOR19BU19TVFJJTkdfKHdjaGFyX3QsIDo6d3N0cmluZyk7Ci1HVEVTVF9JTVBMX0ZPUk1BVF9D
X1NUUklOR19BU19TVFJJTkdfKGNvbnN0IHdjaGFyX3QsIDo6d3N0cmluZyk7Ci0jZW5kaWYKLQot
I2lmIEdURVNUX0hBU19TVERfV1NUUklORwotR1RFU1RfSU1QTF9GT1JNQVRfQ19TVFJJTkdfQVNf
U1RSSU5HXyh3Y2hhcl90LCA6OnN0ZDo6d3N0cmluZyk7Ci1HVEVTVF9JTVBMX0ZPUk1BVF9DX1NU
UklOR19BU19TVFJJTkdfKGNvbnN0IHdjaGFyX3QsIDo6c3RkOjp3c3RyaW5nKTsKLSNlbmRpZgot
Ci0jdW5kZWYgR1RFU1RfSU1QTF9GT1JNQVRfQ19TVFJJTkdfQVNfU1RSSU5HXwotCi0vLyBGb3Jt
YXRzIGEgY29tcGFyaXNvbiBhc3NlcnRpb24gKGUuZy4gQVNTRVJUX0VRLCBFWFBFQ1RfTFQsIGFu
ZCBldGMpCi0vLyBvcGVyYW5kIHRvIGJlIHVzZWQgaW4gYSBmYWlsdXJlIG1lc3NhZ2UuICBUaGUg
dHlwZSAoYnV0IG5vdCB2YWx1ZSkKLS8vIG9mIHRoZSBvdGhlciBvcGVyYW5kIG1heSBhZmZlY3Qg
dGhlIGZvcm1hdC4gIFRoaXMgYWxsb3dzIHVzIHRvCi0vLyBwcmludCBhIGNoYXIqIGFzIGEgcmF3
IHBvaW50ZXIgd2hlbiBpdCBpcyBjb21wYXJlZCBhZ2FpbnN0IGFub3RoZXIKLS8vIGNoYXIqIG9y
IHZvaWQqLCBhbmQgcHJpbnQgaXQgYXMgYSBDIHN0cmluZyB3aGVuIGl0IGlzIGNvbXBhcmVkCi0v
LyBhZ2FpbnN0IGFuIHN0ZDo6c3RyaW5nIG9iamVjdCwgZm9yIGV4YW1wbGUuCi0vLwotLy8gSU5U
RVJOQUwgSU1QTEVNRU5UQVRJT04gLSBETyBOT1QgVVNFIElOIEEgVVNFUiBQUk9HUkFNLgotdGVt
cGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KLXN0ZDo6c3RyaW5nIEZvcm1hdEZvckNv
bXBhcmlzb25GYWlsdXJlTWVzc2FnZSgKLSAgICBjb25zdCBUMSYgdmFsdWUsIGNvbnN0IFQyJiAv
KiBvdGhlcl9vcGVyYW5kICovKSB7Ci0gIHJldHVybiBGb3JtYXRGb3JDb21wYXJpc29uPFQxLCBU
Mj46OkZvcm1hdCh2YWx1ZSk7Ci19Ci0KLS8vIFVuaXZlcnNhbFByaW50ZXI8VD46OlByaW50KHZh
bHVlLCBvc3RyZWFtX3B0cikgcHJpbnRzIHRoZSBnaXZlbgotLy8gdmFsdWUgdG8gdGhlIGdpdmVu
IG9zdHJlYW0uICBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQKLS8vICdvc3RyZWFtX3B0cicg
aXMgbm90IE5VTEwsIG9yIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQuCi0vLwotLy8gV2UgZGVm
aW5lIFVuaXZlcnNhbFByaW50ZXIgYXMgYSBjbGFzcyB0ZW1wbGF0ZSAoYXMgb3Bwb3NlZCB0byBh
Ci0vLyBmdW5jdGlvbiB0ZW1wbGF0ZSksIGFzIHdlIG5lZWQgdG8gcGFydGlhbGx5IHNwZWNpYWxp
emUgaXQgZm9yCi0vLyByZWZlcmVuY2UgdHlwZXMsIHdoaWNoIGNhbm5vdCBiZSBkb25lIHdpdGgg
ZnVuY3Rpb24gdGVtcGxhdGVzLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBVbml2ZXJz
YWxQcmludGVyOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXZvaWQgVW5pdmVyc2FsUHJpbnQo
Y29uc3QgVCYgdmFsdWUsIDo6c3RkOjpvc3RyZWFtKiBvcyk7Ci0KLS8vIFVzZWQgdG8gcHJpbnQg
YW4gU1RMLXN0eWxlIGNvbnRhaW5lciB3aGVuIHRoZSB1c2VyIGRvZXNuJ3QgZGVmaW5lCi0vLyBh
IFByaW50VG8oKSBmb3IgaXQuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQz4KLXZvaWQgRGVmYXVsdFBy
aW50VG8oSXNDb250YWluZXIgLyogZHVtbXkgKi8sCi0gICAgICAgICAgICAgICAgICAgIGZhbHNl
X3R5cGUgLyogaXMgbm90IGEgcG9pbnRlciAqLywKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
QyYgY29udGFpbmVyLCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgY29uc3Qgc2l6ZV90IGtNYXhD
b3VudCA9IDMyOyAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHByaW50Lgot
ICAqb3MgPDwgJ3snOwotICBzaXplX3QgY291bnQgPSAwOwotICBmb3IgKHR5cGVuYW1lIEM6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gY29udGFpbmVyLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gY29udGFp
bmVyLmVuZCgpOyArK2l0LCArK2NvdW50KSB7Ci0gICAgaWYgKGNvdW50ID4gMCkgewotICAgICAg
Km9zIDw8ICcsJzsKLSAgICAgIGlmIChjb3VudCA9PSBrTWF4Q291bnQpIHsgIC8vIEVub3VnaCBo
YXMgYmVlbiBwcmludGVkLgotICAgICAgICAqb3MgPDwgIiAuLi4iOwotICAgICAgICBicmVhazsK
LSAgICAgIH0KLSAgICB9Ci0gICAgKm9zIDw8ICcgJzsKLSAgICAvLyBXZSBjYW5ub3QgY2FsbCBQ
cmludFRvKCppdCwgb3MpIGhlcmUgYXMgUHJpbnRUbygpIGRvZXNuJ3QKLSAgICAvLyBoYW5kbGUg
Kml0IGJlaW5nIGEgbmF0aXZlIGFycmF5LgotICAgIGludGVybmFsOjpVbml2ZXJzYWxQcmludCgq
aXQsIG9zKTsKLSAgfQotCi0gIGlmIChjb3VudCA+IDApIHsKLSAgICAqb3MgPDwgJyAnOwotICB9
Ci0gICpvcyA8PCAnfSc7Ci19Ci0KLS8vIFVzZWQgdG8gcHJpbnQgYSBwb2ludGVyIHRoYXQgaXMg
bmVpdGhlciBhIGNoYXIgcG9pbnRlciBub3IgYSBtZW1iZXIKLS8vIHBvaW50ZXIsIHdoZW4gdGhl
IHVzZXIgZG9lc24ndCBkZWZpbmUgUHJpbnRUbygpIGZvciBpdC4gIChBIG1lbWJlcgotLy8gdmFy
aWFibGUgcG9pbnRlciBvciBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlciBkb2Vzbid0IHJlYWxseSBw
b2ludCB0bwotLy8gYSBsb2NhdGlvbiBpbiB0aGUgYWRkcmVzcyBzcGFjZS4gIFRoZWlyIHJlcHJl
c2VudGF0aW9uIGlzCi0vLyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLiAgVGhlcmVmb3JlIHRoZXkg
d2lsbCBiZSBwcmludGVkIGFzIHJhdwotLy8gYnl0ZXMuKQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci12b2lkIERlZmF1bHRQcmludFRvKElzTm90Q29udGFpbmVyIC8qIGR1bW15ICovLAotICAgICAg
ICAgICAgICAgICAgICB0cnVlX3R5cGUgLyogaXMgYSBwb2ludGVyICovLAotICAgICAgICAgICAg
ICAgICAgICBUKiBwLCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgaWYgKHAgPT0gTlVMTCkgewot
ICAgICpvcyA8PCAiTlVMTCI7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gQysrIGRvZXNuJ3QgYWxsb3cg
Y2FzdGluZyBmcm9tIGEgZnVuY3Rpb24gcG9pbnRlciB0byBhbnkgb2JqZWN0Ci0gICAgLy8gcG9p
bnRlci4KLSAgICAvLwotICAgIC8vIElzVHJ1ZSgpIHNpbGVuY2VzIHdhcm5pbmdzOiAiQ29uZGl0
aW9uIGlzIGFsd2F5cyB0cnVlIiwKLSAgICAvLyAidW5yZWFjaGFibGUgY29kZSIuCi0gICAgaWYg
KElzVHJ1ZShJbXBsaWNpdGx5Q29udmVydGlibGU8VCosIGNvbnN0IHZvaWQqPjo6dmFsdWUpKSB7
Ci0gICAgICAvLyBUIGlzIG5vdCBhIGZ1bmN0aW9uIHR5cGUuICBXZSBqdXN0IGNhbGwgPDwgdG8g
cHJpbnQgcCwKLSAgICAgIC8vIHJlbHlpbmcgb24gQURMIHRvIHBpY2sgdXAgdXNlci1kZWZpbmVk
IDw8IGZvciB0aGVpciBwb2ludGVyCi0gICAgICAvLyB0eXBlcywgaWYgYW55LgotICAgICAgKm9z
IDw8IHA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIFQgaXMgYSBmdW5jdGlvbiB0eXBlLCBzbyAn
Km9zIDw8IHAnIGRvZXNuJ3QgZG8gd2hhdCB3ZSB3YW50Ci0gICAgICAvLyAoaXQganVzdCBwcmlu
dHMgcCBhcyBib29sKS4gIFdlIHdhbnQgdG8gcHJpbnQgcCBhcyBhIGNvbnN0Ci0gICAgICAvLyB2
b2lkKi4gIEhvd2V2ZXIsIHdlIGNhbm5vdCBjYXN0IGl0IHRvIGNvbnN0IHZvaWQqIGRpcmVjdGx5
LAotICAgICAgLy8gZXZlbiB1c2luZyByZWludGVycHJldF9jYXN0LCBhcyBlYXJsaWVyIHZlcnNp
b25zIG9mIGdjYwotICAgICAgLy8gKGUuZy4gMy40LjUpIGNhbm5vdCBjb21waWxlIHRoZSBjYXN0
IHdoZW4gcCBpcyBhIGZ1bmN0aW9uCi0gICAgICAvLyBwb2ludGVyLiAgQ2FzdGluZyB0byBVSW50
NjQgZmlyc3Qgc29sdmVzIHRoZSBwcm9ibGVtLgotICAgICAgKm9zIDw8IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3Qgdm9pZCo+KAotICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8aW50ZXJuYWw6OlVJ
bnQ2ND4ocCkpOwotICAgIH0KLSAgfQotfQotCi0vLyBVc2VkIHRvIHByaW50IGEgbm9uLWNvbnRh
aW5lciwgbm9uLXBvaW50ZXIgdmFsdWUgd2hlbiB0aGUgdXNlcgotLy8gZG9lc24ndCBkZWZpbmUg
UHJpbnRUbygpIGZvciBpdC4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdm9pZCBEZWZhdWx0UHJp
bnRUbyhJc05vdENvbnRhaW5lciAvKiBkdW1teSAqLywKLSAgICAgICAgICAgICAgICAgICAgZmFs
c2VfdHlwZSAvKiBpcyBub3QgYSBwb2ludGVyICovLAotICAgICAgICAgICAgICAgICAgICBjb25z
dCBUJiB2YWx1ZSwgOjpzdGQ6Om9zdHJlYW0qIG9zKSB7Ci0gIDo6dGVzdGluZ19pbnRlcm5hbDo6
RGVmYXVsdFByaW50Tm9uQ29udGFpbmVyVG8odmFsdWUsIG9zKTsKLX0KLQotLy8gUHJpbnRzIHRo
ZSBnaXZlbiB2YWx1ZSB1c2luZyB0aGUgPDwgb3BlcmF0b3IgaWYgaXQgaGFzIG9uZTsKLS8vIG90
aGVyd2lzZSBwcmludHMgdGhlIGJ5dGVzIGluIGl0LiAgVGhpcyBpcyB3aGF0Ci0vLyBVbml2ZXJz
YWxQcmludGVyPFQ+OjpQcmludCgpIGRvZXMgd2hlbiBQcmludFRvKCkgaXMgbm90IHNwZWNpYWxp
emVkCi0vLyBvciBvdmVybG9hZGVkIGZvciB0eXBlIFQuCi0vLwotLy8gQSB1c2VyIGNhbiBvdmVy
cmlkZSB0aGlzIGJlaGF2aW9yIGZvciBhIGNsYXNzIHR5cGUgRm9vIGJ5IGRlZmluaW5nCi0vLyBh
biBvdmVybG9hZCBvZiBQcmludFRvKCkgaW4gdGhlIG5hbWVzcGFjZSB3aGVyZSBGb28gaXMgZGVm
aW5lZC4gIFdlCi0vLyBnaXZlIHRoZSB1c2VyIHRoaXMgb3B0aW9uIGFzIHNvbWV0aW1lcyBkZWZp
bmluZyBhIDw8IG9wZXJhdG9yIGZvcgotLy8gRm9vIGlzIG5vdCBkZXNpcmFibGUgKGUuZy4gdGhl
IGNvZGluZyBzdHlsZSBtYXkgcHJldmVudCBkb2luZyBpdCwKLS8vIG9yIHRoZXJlIGlzIGFscmVh
ZHkgYSA8PCBvcGVyYXRvciBidXQgaXQgZG9lc24ndCBkbyB3aGF0IHRoZSB1c2VyCi0vLyB3YW50
cykuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXZvaWQgUHJpbnRUbyhjb25zdCBUJiB2YWx1ZSwg
OjpzdGQ6Om9zdHJlYW0qIG9zKSB7Ci0gIC8vIERlZmF1bHRQcmludFRvKCkgaXMgb3ZlcmxvYWRl
ZC4gIFRoZSB0eXBlIG9mIGl0cyBmaXJzdCB0d28KLSAgLy8gYXJndW1lbnRzIGRldGVybWluZSB3
aGljaCB2ZXJzaW9uIHdpbGwgYmUgcGlja2VkLiAgSWYgVCBpcyBhbgotICAvLyBTVEwtc3R5bGUg
Y29udGFpbmVyLCB0aGUgdmVyc2lvbiBmb3IgY29udGFpbmVyIHdpbGwgYmUgY2FsbGVkOyBpZgot
ICAvLyBUIGlzIGEgcG9pbnRlciwgdGhlIHBvaW50ZXIgdmVyc2lvbiB3aWxsIGJlIGNhbGxlZDsg
b3RoZXJ3aXNlIHRoZQotICAvLyBnZW5lcmljIHZlcnNpb24gd2lsbCBiZSBjYWxsZWQuCi0gIC8v
Ci0gIC8vIE5vdGUgdGhhdCB3ZSBjaGVjayBmb3IgY29udGFpbmVyIHR5cGVzIGhlcmUsIHByaW9y
IHRvIHdlIGNoZWNrCi0gIC8vIGZvciBwcm90b2NvbCBtZXNzYWdlIHR5cGVzIGluIG91ciBvcGVy
YXRvcjw8LiAgVGhlIHJhdGlvbmFsZSBpczoKLSAgLy8KLSAgLy8gRm9yIHByb3RvY29sIG1lc3Nh
Z2VzLCB3ZSB3YW50IHRvIGdpdmUgcGVvcGxlIGEgY2hhbmNlIHRvCi0gIC8vIG92ZXJyaWRlIEdv
b2dsZSBNb2NrJ3MgZm9ybWF0IGJ5IGRlZmluaW5nIGEgUHJpbnRUbygpIG9yCi0gIC8vIG9wZXJh
dG9yPDwuICBGb3IgU1RMIGNvbnRhaW5lcnMsIG90aGVyIGZvcm1hdHMgY2FuIGJlCi0gIC8vIGlu
Y29tcGF0aWJsZSB3aXRoIEdvb2dsZSBNb2NrJ3MgZm9ybWF0IGZvciB0aGUgY29udGFpbmVyCi0g
IC8vIGVsZW1lbnRzOyB0aGVyZWZvcmUgd2UgY2hlY2sgZm9yIGNvbnRhaW5lciB0eXBlcyBoZXJl
IHRvIGVuc3VyZQotICAvLyB0aGF0IG91ciBmb3JtYXQgaXMgdXNlZC4KLSAgLy8KLSAgLy8gVGhl
IHNlY29uZCBhcmd1bWVudCBvZiBEZWZhdWx0UHJpbnRUbygpIGlzIG5lZWRlZCB0byBieXBhc3Mg
YSBidWcKLSAgLy8gaW4gU3ltYmlhbidzIEMrKyBjb21waWxlciB0aGF0IHByZXZlbnRzIGl0IGZy
b20gcGlja2luZyB0aGUgcmlnaHQKLSAgLy8gb3ZlcmxvYWQgYmV0d2VlbjoKLSAgLy8KLSAgLy8g
ICBQcmludFRvKGNvbnN0IFQmIHgsIC4uLik7Ci0gIC8vICAgUHJpbnRUbyhUKiB4LCAuLi4pOwot
ICBEZWZhdWx0UHJpbnRUbyhJc0NvbnRhaW5lclRlc3Q8VD4oMCksIGlzX3BvaW50ZXI8VD4oKSwg
dmFsdWUsIG9zKTsKLX0KLQotLy8gVGhlIGZvbGxvd2luZyBsaXN0IG9mIFByaW50VG8oKSBvdmVy
bG9hZHMgdGVsbHMKLS8vIFVuaXZlcnNhbFByaW50ZXI8VD46OlByaW50KCkgaG93IHRvIHByaW50
IHN0YW5kYXJkIHR5cGVzIChidWlsdC1pbgotLy8gdHlwZXMsIHN0cmluZ3MsIHBsYWluIGFycmF5
cywgYW5kIHBvaW50ZXJzKS4KLQotLy8gT3ZlcmxvYWRzIGZvciB2YXJpb3VzIGNoYXIgdHlwZXMu
Ci1HVEVTVF9BUElfIHZvaWQgUHJpbnRUbyh1bnNpZ25lZCBjaGFyIGMsIDo6c3RkOjpvc3RyZWFt
KiBvcyk7Ci1HVEVTVF9BUElfIHZvaWQgUHJpbnRUbyhzaWduZWQgY2hhciBjLCA6OnN0ZDo6b3N0
cmVhbSogb3MpOwotaW5saW5lIHZvaWQgUHJpbnRUbyhjaGFyIGMsIDo6c3RkOjpvc3RyZWFtKiBv
cykgewotICAvLyBXaGVuIHByaW50aW5nIGEgcGxhaW4gY2hhciwgd2UgYWx3YXlzIHRyZWF0IGl0
IGFzIHVuc2lnbmVkLiAgVGhpcwotICAvLyB3YXksIHRoZSBvdXRwdXQgd29uJ3QgYmUgYWZmZWN0
ZWQgYnkgd2hldGhlciB0aGUgY29tcGlsZXIgdGhpbmtzCi0gIC8vIGNoYXIgaXMgc2lnbmVkIG9y
IG5vdC4KLSAgUHJpbnRUbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSwgb3MpOwotfQot
Ci0vLyBPdmVybG9hZHMgZm9yIG90aGVyIHNpbXBsZSBidWlsdC1pbiB0eXBlcy4KLWlubGluZSB2
b2lkIFByaW50VG8oYm9vbCB4LCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgKm9zIDw8ICh4ID8g
InRydWUiIDogImZhbHNlIik7Ci19Ci0KLS8vIE92ZXJsb2FkIGZvciB3Y2hhcl90IHR5cGUuCi0v
LyBQcmludHMgYSB3Y2hhcl90IGFzIGEgc3ltYm9sIGlmIGl0IGlzIHByaW50YWJsZSBvciBhcyBp
dHMgaW50ZXJuYWwKLS8vIGNvZGUgb3RoZXJ3aXNlIGFuZCBhbHNvIGFzIGl0cyBkZWNpbWFsIGNv
ZGUgKGV4Y2VwdCBmb3IgTCdcMCcpLgotLy8gVGhlIEwnXDAnIGNoYXIgaXMgcHJpbnRlZCBhcyAi
TCdcXDAnIi4gVGhlIGRlY2ltYWwgY29kZSBpcyBwcmludGVkCi0vLyBhcyBzaWduZWQgaW50ZWdl
ciB3aGVuIHdjaGFyX3QgaXMgaW1wbGVtZW50ZWQgYnkgdGhlIGNvbXBpbGVyCi0vLyBhcyBhIHNp
Z25lZCB0eXBlIGFuZCBpcyBwcmludGVkIGFzIGFuIHVuc2lnbmVkIGludGVnZXIgd2hlbiB3Y2hh
cl90Ci0vLyBpcyBpbXBsZW1lbnRlZCBhcyBhbiB1bnNpZ25lZCB0eXBlLgotR1RFU1RfQVBJXyB2
b2lkIFByaW50VG8od2NoYXJfdCB3YywgOjpzdGQ6Om9zdHJlYW0qIG9zKTsKLQotLy8gT3Zlcmxv
YWRzIGZvciBDIHN0cmluZ3MuCi1HVEVTVF9BUElfIHZvaWQgUHJpbnRUbyhjb25zdCBjaGFyKiBz
LCA6OnN0ZDo6b3N0cmVhbSogb3MpOwotaW5saW5lIHZvaWQgUHJpbnRUbyhjaGFyKiBzLCA6OnN0
ZDo6b3N0cmVhbSogb3MpIHsKLSAgUHJpbnRUbyhJbXBsaWNpdENhc3RfPGNvbnN0IGNoYXIqPihz
KSwgb3MpOwotfQotCi0vLyBzaWduZWQvdW5zaWduZWQgY2hhciBpcyBvZnRlbiB1c2VkIGZvciBy
ZXByZXNlbnRpbmcgYmluYXJ5IGRhdGEsIHNvCi0vLyB3ZSBwcmludCBwb2ludGVycyB0byBpdCBh
cyB2b2lkKiB0byBiZSBzYWZlLgotaW5saW5lIHZvaWQgUHJpbnRUbyhjb25zdCBzaWduZWQgY2hh
ciogcywgOjpzdGQ6Om9zdHJlYW0qIG9zKSB7Ci0gIFByaW50VG8oSW1wbGljaXRDYXN0Xzxjb25z
dCB2b2lkKj4ocyksIG9zKTsKLX0KLWlubGluZSB2b2lkIFByaW50VG8oc2lnbmVkIGNoYXIqIHMs
IDo6c3RkOjpvc3RyZWFtKiBvcykgewotICBQcmludFRvKEltcGxpY2l0Q2FzdF88Y29uc3Qgdm9p
ZCo+KHMpLCBvcyk7Ci19Ci1pbmxpbmUgdm9pZCBQcmludFRvKGNvbnN0IHVuc2lnbmVkIGNoYXIq
IHMsIDo6c3RkOjpvc3RyZWFtKiBvcykgewotICBQcmludFRvKEltcGxpY2l0Q2FzdF88Y29uc3Qg
dm9pZCo+KHMpLCBvcyk7Ci19Ci1pbmxpbmUgdm9pZCBQcmludFRvKHVuc2lnbmVkIGNoYXIqIHMs
IDo6c3RkOjpvc3RyZWFtKiBvcykgewotICBQcmludFRvKEltcGxpY2l0Q2FzdF88Y29uc3Qgdm9p
ZCo+KHMpLCBvcyk7Ci19Ci0KLS8vIE1TVkMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZGVmaW5lIHdj
aGFyX3QgYXMgYSB0eXBlZGVmIG9mIHVuc2lnbmVkCi0vLyBzaG9ydC4gIEl0IGRlZmluZXMgX05B
VElWRV9XQ0hBUl9UX0RFRklORUQgd2hlbiB3Y2hhcl90IGlzIGEgbmF0aXZlCi0vLyB0eXBlLiAg
V2hlbiB3Y2hhcl90IGlzIGEgdHlwZWRlZiwgZGVmaW5pbmcgYW4gb3ZlcmxvYWQgZm9yIGNvbnN0
Ci0vLyB3Y2hhcl90KiB3b3VsZCBjYXVzZSB1bnNpZ25lZCBzaG9ydCogYmUgcHJpbnRlZCBhcyBh
IHdpZGUgc3RyaW5nLAotLy8gcG9zc2libHkgY2F1c2luZyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nl
cy4KLSNpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfTkFUSVZFX1dDSEFSX1RfREVG
SU5FRCkKLS8vIE92ZXJsb2FkcyBmb3Igd2lkZSBDIHN0cmluZ3MKLUdURVNUX0FQSV8gdm9pZCBQ
cmludFRvKGNvbnN0IHdjaGFyX3QqIHMsIDo6c3RkOjpvc3RyZWFtKiBvcyk7Ci1pbmxpbmUgdm9p
ZCBQcmludFRvKHdjaGFyX3QqIHMsIDo6c3RkOjpvc3RyZWFtKiBvcykgewotICBQcmludFRvKElt
cGxpY2l0Q2FzdF88Y29uc3Qgd2NoYXJfdCo+KHMpLCBvcyk7Ci19Ci0jZW5kaWYKLQotLy8gT3Zl
cmxvYWQgZm9yIEMgYXJyYXlzLiAgTXVsdGktZGltZW5zaW9uYWwgYXJyYXlzIGFyZSBwcmludGVk
Ci0vLyBwcm9wZXJseS4KLQotLy8gUHJpbnRzIHRoZSBnaXZlbiBudW1iZXIgb2YgZWxlbWVudHMg
aW4gYW4gYXJyYXksIHdpdGhvdXQgcHJpbnRpbmcKLS8vIHRoZSBjdXJseSBicmFjZXMuCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KLXZvaWQgUHJpbnRSYXdBcnJheVRvKGNvbnN0IFQgYVtdLCBzaXpl
X3QgY291bnQsIDo6c3RkOjpvc3RyZWFtKiBvcykgewotICBVbml2ZXJzYWxQcmludChhWzBdLCBv
cyk7Ci0gIGZvciAoc2l6ZV90IGkgPSAxOyBpICE9IGNvdW50OyBpKyspIHsKLSAgICAqb3MgPDwg
IiwgIjsKLSAgICBVbml2ZXJzYWxQcmludChhW2ldLCBvcyk7Ci0gIH0KLX0KLQotLy8gT3Zlcmxv
YWRzIGZvciA6OnN0cmluZyBhbmQgOjpzdGQ6OnN0cmluZy4KLSNpZiBHVEVTVF9IQVNfR0xPQkFM
X1NUUklORwotR1RFU1RfQVBJXyB2b2lkIFByaW50U3RyaW5nVG8oY29uc3QgOjpzdHJpbmcmcywg
OjpzdGQ6Om9zdHJlYW0qIG9zKTsKLWlubGluZSB2b2lkIFByaW50VG8oY29uc3QgOjpzdHJpbmcm
IHMsIDo6c3RkOjpvc3RyZWFtKiBvcykgewotICBQcmludFN0cmluZ1RvKHMsIG9zKTsKLX0KLSNl
bmRpZiAgLy8gR1RFU1RfSEFTX0dMT0JBTF9TVFJJTkcKLQotR1RFU1RfQVBJXyB2b2lkIFByaW50
U3RyaW5nVG8oY29uc3QgOjpzdGQ6OnN0cmluZyZzLCA6OnN0ZDo6b3N0cmVhbSogb3MpOwotaW5s
aW5lIHZvaWQgUHJpbnRUbyhjb25zdCA6OnN0ZDo6c3RyaW5nJiBzLCA6OnN0ZDo6b3N0cmVhbSog
b3MpIHsKLSAgUHJpbnRTdHJpbmdUbyhzLCBvcyk7Ci19Ci0KLS8vIE92ZXJsb2FkcyBmb3IgOjp3
c3RyaW5nIGFuZCA6OnN0ZDo6d3N0cmluZy4KLSNpZiBHVEVTVF9IQVNfR0xPQkFMX1dTVFJJTkcK
LUdURVNUX0FQSV8gdm9pZCBQcmludFdpZGVTdHJpbmdUbyhjb25zdCA6OndzdHJpbmcmcywgOjpz
dGQ6Om9zdHJlYW0qIG9zKTsKLWlubGluZSB2b2lkIFByaW50VG8oY29uc3QgOjp3c3RyaW5nJiBz
LCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgUHJpbnRXaWRlU3RyaW5nVG8ocywgb3MpOwotfQot
I2VuZGlmICAvLyBHVEVTVF9IQVNfR0xPQkFMX1dTVFJJTkcKLQotI2lmIEdURVNUX0hBU19TVERf
V1NUUklORwotR1RFU1RfQVBJXyB2b2lkIFByaW50V2lkZVN0cmluZ1RvKGNvbnN0IDo6c3RkOjp3
c3RyaW5nJnMsIDo6c3RkOjpvc3RyZWFtKiBvcyk7Ci1pbmxpbmUgdm9pZCBQcmludFRvKGNvbnN0
IDo6c3RkOjp3c3RyaW5nJiBzLCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgUHJpbnRXaWRlU3Ry
aW5nVG8ocywgb3MpOwotfQotI2VuZGlmICAvLyBHVEVTVF9IQVNfU1REX1dTVFJJTkcKLQotI2lm
IEdURVNUX0hBU19UUjFfVFVQTEUgfHwgR1RFU1RfSEFTX1NURF9UVVBMRV8KLS8vIEhlbHBlciBm
dW5jdGlvbiBmb3IgcHJpbnRpbmcgYSB0dXBsZS4gIFQgbXVzdCBiZSBpbnN0YW50aWF0ZWQgd2l0
aAotLy8gYSB0dXBsZSB0eXBlLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci12b2lkIFByaW50VHVw
bGVUbyhjb25zdCBUJiB0LCA6OnN0ZDo6b3N0cmVhbSogb3MpOwotI2VuZGlmICAvLyBHVEVTVF9I
QVNfVFIxX1RVUExFIHx8IEdURVNUX0hBU19TVERfVFVQTEVfCi0KLSNpZiBHVEVTVF9IQVNfVFIx
X1RVUExFCi0vLyBPdmVybG9hZCBmb3IgOjpzdGQ6OnRyMTo6dHVwbGUuICBOZWVkZWQgZm9yIHBy
aW50aW5nIGZ1bmN0aW9uIGFyZ3VtZW50cywKLS8vIHdoaWNoIGFyZSBwYWNrZWQgYXMgdHVwbGVz
LgotCi0vLyBPdmVybG9hZGVkIFByaW50VG8oKSBmb3IgdHVwbGVzIG9mIHZhcmlvdXMgYXJpdGll
cy4gIFdlIHN1cHBvcnQKLS8vIHR1cGxlcyBvZiB1cC10byAxMCBmaWVsZHMuICBUaGUgZm9sbG93
aW5nIGltcGxlbWVudGF0aW9uIHdvcmtzCi0vLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdHIxOjp0
dXBsZSBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUKLS8vIG5vbi1zdGFuZGFyZCB2YXJpYWRpYyB0
ZW1wbGF0ZSBmZWF0dXJlIG9yIG5vdC4KLQotaW5saW5lIHZvaWQgUHJpbnRUbyhjb25zdCA6OnN0
ZDo6dHIxOjp0dXBsZTw+JiB0LCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgUHJpbnRUdXBsZVRv
KHQsIG9zKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxPgotdm9pZCBQcmludFRvKGNvbnN0
IDo6c3RkOjp0cjE6OnR1cGxlPFQxPiYgdCwgOjpzdGQ6Om9zdHJlYW0qIG9zKSB7Ci0gIFByaW50
VHVwbGVUbyh0LCBvcyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+
Ci12b2lkIFByaW50VG8oY29uc3QgOjpzdGQ6OnRyMTo6dHVwbGU8VDEsIFQyPiYgdCwgOjpzdGQ6
Om9zdHJlYW0qIG9zKSB7Ci0gIFByaW50VHVwbGVUbyh0LCBvcyk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzPgotdm9pZCBQcmludFRvKGNvbnN0
IDo6c3RkOjp0cjE6OnR1cGxlPFQxLCBUMiwgVDM+JiB0LCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsK
LSAgUHJpbnRUdXBsZVRvKHQsIG9zKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBl
bmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Pgotdm9pZCBQcmludFRvKGNvbnN0IDo6
c3RkOjp0cjE6OnR1cGxlPFQxLCBUMiwgVDMsIFQ0PiYgdCwgOjpzdGQ6Om9zdHJlYW0qIG9zKSB7
Ci0gIFByaW50VHVwbGVUbyh0LCBvcyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDU+Ci12b2lkIFBy
aW50VG8oY29uc3QgOjpzdGQ6OnRyMTo6dHVwbGU8VDEsIFQyLCBUMywgVDQsIFQ1PiYgdCwKLSAg
ICAgICAgICAgICA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgUHJpbnRUdXBsZVRvKHQsIG9zKTsK
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5
cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICAgICAgICB0eXBlbmFtZSBUNj4KLXZvaWQgUHJp
bnRUbyhjb25zdCA6OnN0ZDo6dHIxOjp0dXBsZTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2PiYgdCwK
LSAgICAgICAgICAgICA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgUHJpbnRUdXBsZVRvKHQsIG9z
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMs
IHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICAgICAgICB0eXBlbmFtZSBUNiwgdHlwZW5h
bWUgVDc+Ci12b2lkIFByaW50VG8oY29uc3QgOjpzdGQ6OnRyMTo6dHVwbGU8VDEsIFQyLCBUMywg
VDQsIFQ1LCBUNiwgVDc+JiB0LAotICAgICAgICAgICAgIDo6c3RkOjpvc3RyZWFtKiBvcykgewot
ICBQcmludFR1cGxlVG8odCwgb3MpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVu
YW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgICAgICAg
IHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDg+Ci12b2lkIFByaW50VG8oY29u
c3QgOjpzdGQ6OnRyMTo6dHVwbGU8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4PiYgdCwK
LSAgICAgICAgICAgICA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgUHJpbnRUdXBsZVRvKHQsIG9z
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMs
IHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICAgICAgICB0eXBlbmFtZSBUNiwgdHlwZW5h
bWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOT4KLXZvaWQgUHJpbnRUbyhjb25zdCA6OnN0
ZDo6dHIxOjp0dXBsZTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5PiYgdCwKLSAg
ICAgICAgICAgICA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgUHJpbnRUdXBsZVRvKHQsIG9zKTsK
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5
cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICAgICAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUg
VDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwPgotdm9pZCBQcmludFRv
KAotICAgIGNvbnN0IDo6c3RkOjp0cjE6OnR1cGxlPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3
LCBUOCwgVDksIFQxMD4mIHQsCi0gICAgOjpzdGQ6Om9zdHJlYW0qIG9zKSB7Ci0gIFByaW50VHVw
bGVUbyh0LCBvcyk7Ci19Ci0jZW5kaWYgIC8vIEdURVNUX0hBU19UUjFfVFVQTEUKLQotI2lmIEdU
RVNUX0hBU19TVERfVFVQTEVfCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHlwZXM+Ci12b2lkIFBy
aW50VG8oY29uc3QgOjpzdGQ6OnR1cGxlPFR5cGVzLi4uPiYgdCwgOjpzdGQ6Om9zdHJlYW0qIG9z
KSB7Ci0gIFByaW50VHVwbGVUbyh0LCBvcyk7Ci19Ci0jZW5kaWYgIC8vIEdURVNUX0hBU19TVERf
VFVQTEVfCi0KLS8vIE92ZXJsb2FkIGZvciBzdGQ6OnBhaXIuCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyPgotdm9pZCBQcmludFRvKGNvbnN0IDo6c3RkOjpwYWlyPFQxLCBUMj4m
IHZhbHVlLCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgKm9zIDw8ICcoJzsKLSAgLy8gV2UgY2Fu
bm90IHVzZSBVbml2ZXJzYWxQcmludCh2YWx1ZS5maXJzdCwgb3MpIGhlcmUsIGFzIFQxIG1heSBi
ZQotICAvLyBhIHJlZmVyZW5jZSB0eXBlLiAgVGhlIHNhbWUgZm9yIHByaW50aW5nIHZhbHVlLnNl
Y29uZC4KLSAgVW5pdmVyc2FsUHJpbnRlcjxUMT46OlByaW50KHZhbHVlLmZpcnN0LCBvcyk7Ci0g
ICpvcyA8PCAiLCAiOwotICBVbml2ZXJzYWxQcmludGVyPFQyPjo6UHJpbnQodmFsdWUuc2Vjb25k
LCBvcyk7Ci0gICpvcyA8PCAnKSc7Ci19Ci0KLS8vIEltcGxlbWVudHMgcHJpbnRpbmcgYSBub24t
cmVmZXJlbmNlIHR5cGUgVCBieSBsZXR0aW5nIHRoZSBjb21waWxlcgotLy8gcGljayB0aGUgcmln
aHQgb3ZlcmxvYWQgb2YgUHJpbnRUbygpIGZvciBULgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1j
bGFzcyBVbml2ZXJzYWxQcmludGVyIHsKLSBwdWJsaWM6Ci0gIC8vIE1TVkMgd2FybnMgYWJvdXQg
YWRkaW5nIGNvbnN0IHRvIGEgZnVuY3Rpb24gdHlwZSwgc28gd2Ugd2FudCB0bwotICAvLyBkaXNh
YmxlIHRoZSB3YXJuaW5nLgotICBHVEVTVF9ESVNBQkxFX01TQ19XQVJOSU5HU19QVVNIXyg0MTgw
KQotCi0gIC8vIE5vdGU6IHdlIGRlbGliZXJhdGVseSBkb24ndCBjYWxsIHRoaXMgUHJpbnRUbygp
LCBhcyB0aGF0IG5hbWUKLSAgLy8gY29uZmxpY3RzIHdpdGggOjp0ZXN0aW5nOjppbnRlcm5hbDo6
UHJpbnRUbyBpbiB0aGUgYm9keSBvZiB0aGUKLSAgLy8gZnVuY3Rpb24uCi0gIHN0YXRpYyB2b2lk
IFByaW50KGNvbnN0IFQmIHZhbHVlLCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgICAvLyBCeSBk
ZWZhdWx0LCA6OnRlc3Rpbmc6OmludGVybmFsOjpQcmludFRvKCkgaXMgdXNlZCBmb3IgcHJpbnRp
bmcKLSAgICAvLyB0aGUgdmFsdWUuCi0gICAgLy8KLSAgICAvLyBUaGFua3MgdG8gS29lbmlnIGxv
b2stdXAsIGlmIFQgaXMgYSBjbGFzcyBhbmQgaGFzIGl0cyBvd24KLSAgICAvLyBQcmludFRvKCkg
ZnVuY3Rpb24gZGVmaW5lZCBpbiBpdHMgbmFtZXNwYWNlLCB0aGF0IGZ1bmN0aW9uIHdpbGwKLSAg
ICAvLyBiZSB2aXNpYmxlIGhlcmUuICBTaW5jZSBpdCBpcyBtb3JlIHNwZWNpZmljIHRoYW4gdGhl
IGdlbmVyaWMgb25lcwotICAgIC8vIGluIDo6dGVzdGluZzo6aW50ZXJuYWwsIGl0IHdpbGwgYmUg
cGlja2VkIGJ5IHRoZSBjb21waWxlciBpbiB0aGUKLSAgICAvLyBmb2xsb3dpbmcgc3RhdGVtZW50
IC0gZXhhY3RseSB3aGF0IHdlIHdhbnQuCi0gICAgUHJpbnRUbyh2YWx1ZSwgb3MpOwotICB9Ci0K
LSAgR1RFU1RfRElTQUJMRV9NU0NfV0FSTklOR1NfUE9QXygpCi19OwotCi0vLyBVbml2ZXJzYWxQ
cmludEFycmF5KGJlZ2luLCBsZW4sIG9zKSBwcmludHMgYW4gYXJyYXkgb2YgJ2xlbicKLS8vIGVs
ZW1lbnRzLCBzdGFydGluZyBhdCBhZGRyZXNzICdiZWdpbicuCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KLXZvaWQgVW5pdmVyc2FsUHJpbnRBcnJheShjb25zdCBUKiBiZWdpbiwgc2l6ZV90IGxlbiwg
OjpzdGQ6Om9zdHJlYW0qIG9zKSB7Ci0gIGlmIChsZW4gPT0gMCkgewotICAgICpvcyA8PCAie30i
OwotICB9IGVsc2UgewotICAgICpvcyA8PCAieyAiOwotICAgIGNvbnN0IHNpemVfdCBrVGhyZXNo
b2xkID0gMTg7Ci0gICAgY29uc3Qgc2l6ZV90IGtDaHVua1NpemUgPSA4OwotICAgIC8vIElmIHRo
ZSBhcnJheSBoYXMgbW9yZSB0aGFuIGtUaHJlc2hvbGQgZWxlbWVudHMsIHdlJ2xsIGhhdmUgdG8K
LSAgICAvLyBvbWl0IHNvbWUgZGV0YWlscyBieSBwcmludGluZyBvbmx5IHRoZSBmaXJzdCBhbmQg
dGhlIGxhc3QKLSAgICAvLyBrQ2h1bmtTaXplIGVsZW1lbnRzLgotICAgIC8vIFRPRE8od2FuQGdv
b2dsZS5jb20pOiBsZXQgdGhlIHVzZXIgY29udHJvbCB0aGUgdGhyZXNob2xkIHVzaW5nIGEgZmxh
Zy4KLSAgICBpZiAobGVuIDw9IGtUaHJlc2hvbGQpIHsKLSAgICAgIFByaW50UmF3QXJyYXlUbyhi
ZWdpbiwgbGVuLCBvcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFByaW50UmF3QXJyYXlUbyhiZWdp
biwga0NodW5rU2l6ZSwgb3MpOwotICAgICAgKm9zIDw8ICIsIC4uLiwgIjsKLSAgICAgIFByaW50
UmF3QXJyYXlUbyhiZWdpbiArIGxlbiAtIGtDaHVua1NpemUsIGtDaHVua1NpemUsIG9zKTsKLSAg
ICB9Ci0gICAgKm9zIDw8ICIgfSI7Ci0gIH0KLX0KLS8vIFRoaXMgb3ZlcmxvYWQgcHJpbnRzIGEg
KGNvbnN0KSBjaGFyIGFycmF5IGNvbXBhY3RseS4KLUdURVNUX0FQSV8gdm9pZCBVbml2ZXJzYWxQ
cmludEFycmF5KAotICAgIGNvbnN0IGNoYXIqIGJlZ2luLCBzaXplX3QgbGVuLCA6OnN0ZDo6b3N0
cmVhbSogb3MpOwotCi0vLyBUaGlzIG92ZXJsb2FkIHByaW50cyBhIChjb25zdCkgd2NoYXJfdCBh
cnJheSBjb21wYWN0bHkuCi1HVEVTVF9BUElfIHZvaWQgVW5pdmVyc2FsUHJpbnRBcnJheSgKLSAg
ICBjb25zdCB3Y2hhcl90KiBiZWdpbiwgc2l6ZV90IGxlbiwgOjpzdGQ6Om9zdHJlYW0qIG9zKTsK
LQotLy8gSW1wbGVtZW50cyBwcmludGluZyBhbiBhcnJheSB0eXBlIFRbTl0uCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgc2l6ZV90IE4+Ci1jbGFzcyBVbml2ZXJzYWxQcmludGVyPFRbTl0+IHsKLSBw
dWJsaWM6Ci0gIC8vIFByaW50cyB0aGUgZ2l2ZW4gYXJyYXksIG9taXR0aW5nIHNvbWUgZWxlbWVu
dHMgd2hlbiB0aGVyZSBhcmUgdG9vCi0gIC8vIG1hbnkuCi0gIHN0YXRpYyB2b2lkIFByaW50KGNv
bnN0IFQgKCZhKVtOXSwgOjpzdGQ6Om9zdHJlYW0qIG9zKSB7Ci0gICAgVW5pdmVyc2FsUHJpbnRB
cnJheShhLCBOLCBvcyk7Ci0gIH0KLX07Ci0KLS8vIEltcGxlbWVudHMgcHJpbnRpbmcgYSByZWZl
cmVuY2UgdHlwZSBUJi4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgVW5pdmVyc2FsUHJp
bnRlcjxUJj4gewotIHB1YmxpYzoKLSAgLy8gTVNWQyB3YXJucyBhYm91dCBhZGRpbmcgY29uc3Qg
dG8gYSBmdW5jdGlvbiB0eXBlLCBzbyB3ZSB3YW50IHRvCi0gIC8vIGRpc2FibGUgdGhlIHdhcm5p
bmcuCi0gIEdURVNUX0RJU0FCTEVfTVNDX1dBUk5JTkdTX1BVU0hfKDQxODApCi0KLSAgc3RhdGlj
IHZvaWQgUHJpbnQoY29uc3QgVCYgdmFsdWUsIDo6c3RkOjpvc3RyZWFtKiBvcykgewotICAgIC8v
IFByaW50cyB0aGUgYWRkcmVzcyBvZiB0aGUgdmFsdWUuICBXZSB1c2UgcmVpbnRlcnByZXRfY2Fz
dCBoZXJlCi0gICAgLy8gYXMgc3RhdGljX2Nhc3QgZG9lc24ndCBjb21waWxlIHdoZW4gVCBpcyBh
IGZ1bmN0aW9uIHR5cGUuCi0gICAgKm9zIDw8ICJAIiA8PCByZWludGVycHJldF9jYXN0PGNvbnN0
IHZvaWQqPigmdmFsdWUpIDw8ICIgIjsKLQotICAgIC8vIFRoZW4gcHJpbnRzIHRoZSB2YWx1ZSBp
dHNlbGYuCi0gICAgVW5pdmVyc2FsUHJpbnQodmFsdWUsIG9zKTsKLSAgfQotCi0gIEdURVNUX0RJ
U0FCTEVfTVNDX1dBUk5JTkdTX1BPUF8oKQotfTsKLQotLy8gUHJpbnRzIGEgdmFsdWUgdGVyc2Vs
eTogZm9yIGEgcmVmZXJlbmNlIHR5cGUsIHRoZSByZWZlcmVuY2VkIHZhbHVlCi0vLyAoYnV0IG5v
dCB0aGUgYWRkcmVzcykgaXMgcHJpbnRlZDsgZm9yIGEgKGNvbnN0KSBjaGFyIHBvaW50ZXIsIHRo
ZQotLy8gTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIChidXQgbm90IHRoZSBwb2ludGVyKSBpcyBwcmlu
dGVkLgotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFVuaXZlcnNhbFRlcnNlUHJpbnRl
ciB7Ci0gcHVibGljOgotICBzdGF0aWMgdm9pZCBQcmludChjb25zdCBUJiB2YWx1ZSwgOjpzdGQ6
Om9zdHJlYW0qIG9zKSB7Ci0gICAgVW5pdmVyc2FsUHJpbnQodmFsdWUsIG9zKTsKLSAgfQotfTsK
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgVW5pdmVyc2FsVGVyc2VQcmludGVyPFQmPiB7
Ci0gcHVibGljOgotICBzdGF0aWMgdm9pZCBQcmludChjb25zdCBUJiB2YWx1ZSwgOjpzdGQ6Om9z
dHJlYW0qIG9zKSB7Ci0gICAgVW5pdmVyc2FsUHJpbnQodmFsdWUsIG9zKTsKLSAgfQotfTsKLXRl
bXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KLWNsYXNzIFVuaXZlcnNhbFRlcnNlUHJpbnRl
cjxUW05dPiB7Ci0gcHVibGljOgotICBzdGF0aWMgdm9pZCBQcmludChjb25zdCBUICgmdmFsdWUp
W05dLCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgICBVbml2ZXJzYWxQcmludGVyPFRbTl0+OjpQ
cmludCh2YWx1ZSwgb3MpOwotICB9Ci19OwotdGVtcGxhdGUgPD4KLWNsYXNzIFVuaXZlcnNhbFRl
cnNlUHJpbnRlcjxjb25zdCBjaGFyKj4gewotIHB1YmxpYzoKLSAgc3RhdGljIHZvaWQgUHJpbnQo
Y29uc3QgY2hhciogc3RyLCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgICBpZiAoc3RyID09IE5V
TEwpIHsKLSAgICAgICpvcyA8PCAiTlVMTCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFVuaXZlcnNh
bFByaW50KHN0cmluZyhzdHIpLCBvcyk7Ci0gICAgfQotICB9Ci19OwotdGVtcGxhdGUgPD4KLWNs
YXNzIFVuaXZlcnNhbFRlcnNlUHJpbnRlcjxjaGFyKj4gewotIHB1YmxpYzoKLSAgc3RhdGljIHZv
aWQgUHJpbnQoY2hhciogc3RyLCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgICBVbml2ZXJzYWxU
ZXJzZVByaW50ZXI8Y29uc3QgY2hhcio+OjpQcmludChzdHIsIG9zKTsKLSAgfQotfTsKLQotI2lm
IEdURVNUX0hBU19TVERfV1NUUklORwotdGVtcGxhdGUgPD4KLWNsYXNzIFVuaXZlcnNhbFRlcnNl
UHJpbnRlcjxjb25zdCB3Y2hhcl90Kj4gewotIHB1YmxpYzoKLSAgc3RhdGljIHZvaWQgUHJpbnQo
Y29uc3Qgd2NoYXJfdCogc3RyLCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgICBpZiAoc3RyID09
IE5VTEwpIHsKLSAgICAgICpvcyA8PCAiTlVMTCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFVuaXZl
cnNhbFByaW50KDo6c3RkOjp3c3RyaW5nKHN0ciksIG9zKTsKLSAgICB9Ci0gIH0KLX07Ci0jZW5k
aWYKLQotdGVtcGxhdGUgPD4KLWNsYXNzIFVuaXZlcnNhbFRlcnNlUHJpbnRlcjx3Y2hhcl90Kj4g
ewotIHB1YmxpYzoKLSAgc3RhdGljIHZvaWQgUHJpbnQod2NoYXJfdCogc3RyLCA6OnN0ZDo6b3N0
cmVhbSogb3MpIHsKLSAgICBVbml2ZXJzYWxUZXJzZVByaW50ZXI8Y29uc3Qgd2NoYXJfdCo+OjpQ
cmludChzdHIsIG9zKTsKLSAgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci12b2lkIFVu
aXZlcnNhbFRlcnNlUHJpbnQoY29uc3QgVCYgdmFsdWUsIDo6c3RkOjpvc3RyZWFtKiBvcykgewot
ICBVbml2ZXJzYWxUZXJzZVByaW50ZXI8VD46OlByaW50KHZhbHVlLCBvcyk7Ci19Ci0KLS8vIFBy
aW50cyBhIHZhbHVlIHVzaW5nIHRoZSB0eXBlIGluZmVycmVkIGJ5IHRoZSBjb21waWxlci4gIFRo
ZQotLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgYW5kIFVuaXZlcnNhbFRlcnNlUHJpbnQoKSBp
cyB0aGF0IGZvciBhCi0vLyAoY29uc3QpIGNoYXIgcG9pbnRlciwgdGhpcyBwcmludHMgYm90aCB0
aGUgcG9pbnRlciBhbmQgdGhlCi0vLyBOVUwtdGVybWluYXRlZCBzdHJpbmcuCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KLXZvaWQgVW5pdmVyc2FsUHJpbnQoY29uc3QgVCYgdmFsdWUsIDo6c3RkOjpv
c3RyZWFtKiBvcykgewotICAvLyBBIHdvcmthcm9uZCBmb3IgdGhlIGJ1ZyBpbiBWQysrIDcuMSB0
aGF0IHByZXZlbnRzIHVzIGZyb20gaW5zdGFudGlhdGluZwotICAvLyBVbml2ZXJzYWxQcmludGVy
IHdpdGggVCBkaXJlY3RseS4KLSAgdHlwZWRlZiBUIFQxOwotICBVbml2ZXJzYWxQcmludGVyPFQx
Pjo6UHJpbnQodmFsdWUsIG9zKTsKLX0KLQotdHlwZWRlZiA6OnN0ZDo6dmVjdG9yPHN0cmluZz4g
U3RyaW5nczsKLQotLy8gVHVwbGVQb2xpY3k8VHVwbGVUPiBtdXN0IHByb3ZpZGU6Ci0vLyAtIHR1
cGxlX3NpemUKLS8vICAgICBzaXplIG9mIHR1cGxlIFR1cGxlVC4KLS8vIC0gZ2V0PHNpemVfdCBJ
Pihjb25zdCBUdXBsZVQmIHQpCi0vLyAgICAgc3RhdGljIGZ1bmN0aW9uIGV4dHJhY3RpbmcgZWxl
bWVudCBJIG9mIHR1cGxlIFR1cGxlVC4KLS8vIC0gdHVwbGVfZWxlbWVudDxzaXplX3QgST46OnR5
cGUKLS8vICAgICB0eXBlIG9mIGVsZW1lbnQgSSBvZiB0dXBsZSBUdXBsZVQuCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVHVwbGVUPgotc3RydWN0IFR1cGxlUG9saWN5OwotCi0jaWYgR1RFU1RfSEFTX1RS
MV9UVVBMRQotdGVtcGxhdGUgPHR5cGVuYW1lIFR1cGxlVD4KLXN0cnVjdCBUdXBsZVBvbGljeSB7
Ci0gIHR5cGVkZWYgVHVwbGVUIFR1cGxlOwotICBzdGF0aWMgY29uc3Qgc2l6ZV90IHR1cGxlX3Np
emUgPSA6OnN0ZDo6dHIxOjp0dXBsZV9zaXplPFR1cGxlPjo6dmFsdWU7Ci0KLSAgdGVtcGxhdGUg
PHNpemVfdCBJPgotICBzdHJ1Y3QgdHVwbGVfZWxlbWVudCA6IDo6c3RkOjp0cjE6OnR1cGxlX2Vs
ZW1lbnQ8SSwgVHVwbGU+IHt9OwotCi0gIHRlbXBsYXRlIDxzaXplX3QgST4KLSAgc3RhdGljIHR5
cGVuYW1lIEFkZFJlZmVyZW5jZTwKLSAgICAgIGNvbnN0IHR5cGVuYW1lIDo6c3RkOjp0cjE6OnR1
cGxlX2VsZW1lbnQ8SSwgVHVwbGU+Ojp0eXBlPjo6dHlwZSBnZXQoCi0gICAgICBjb25zdCBUdXBs
ZSYgdHVwbGUpIHsKLSAgICByZXR1cm4gOjpzdGQ6OnRyMTo6Z2V0PEk+KHR1cGxlKTsKLSAgfQot
fTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUdXBsZVQ+Ci1jb25zdCBzaXplX3QgVHVwbGVQb2xpY3k8
VHVwbGVUPjo6dHVwbGVfc2l6ZTsKLSNlbmRpZiAgLy8gR1RFU1RfSEFTX1RSMV9UVVBMRQotCi0j
aWYgR1RFU1RfSEFTX1NURF9UVVBMRV8KLXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUeXBlcz4KLXN0
cnVjdCBUdXBsZVBvbGljeTwgOjpzdGQ6OnR1cGxlPFR5cGVzLi4uPiA+IHsKLSAgdHlwZWRlZiA6
OnN0ZDo6dHVwbGU8VHlwZXMuLi4+IFR1cGxlOwotICBzdGF0aWMgY29uc3Qgc2l6ZV90IHR1cGxl
X3NpemUgPSA6OnN0ZDo6dHVwbGVfc2l6ZTxUdXBsZT46OnZhbHVlOwotCi0gIHRlbXBsYXRlIDxz
aXplX3QgST4KLSAgc3RydWN0IHR1cGxlX2VsZW1lbnQgOiA6OnN0ZDo6dHVwbGVfZWxlbWVudDxJ
LCBUdXBsZT4ge307Ci0KLSAgdGVtcGxhdGUgPHNpemVfdCBJPgotICBzdGF0aWMgY29uc3QgdHlw
ZW5hbWUgOjpzdGQ6OnR1cGxlX2VsZW1lbnQ8SSwgVHVwbGU+Ojp0eXBlJiBnZXQoCi0gICAgICBj
b25zdCBUdXBsZSYgdHVwbGUpIHsKLSAgICByZXR1cm4gOjpzdGQ6OmdldDxJPih0dXBsZSk7Ci0g
IH0KLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHlwZXM+Ci1jb25zdCBzaXplX3QgVHVwbGVQ
b2xpY3k8IDo6c3RkOjp0dXBsZTxUeXBlcy4uLj4gPjo6dHVwbGVfc2l6ZTsKLSNlbmRpZiAgLy8g
R1RFU1RfSEFTX1NURF9UVVBMRV8KLQotI2lmIEdURVNUX0hBU19UUjFfVFVQTEUgfHwgR1RFU1Rf
SEFTX1NURF9UVVBMRV8KLS8vIFRoaXMgaGVscGVyIHRlbXBsYXRlIGFsbG93cyBQcmludFRvKCkg
Zm9yIHR1cGxlcyBhbmQKLS8vIFVuaXZlcnNhbFRlcnNlUHJpbnRUdXBsZUZpZWxkc1RvU3RyaW5n
cygpIHRvIGJlIGRlZmluZWQgYnkKLS8vIGluZHVjdGlvbiBvbiB0aGUgbnVtYmVyIG9mIHR1cGxl
IGZpZWxkcy4gIFRoZSBpZGVhIGlzIHRoYXQKLS8vIFR1cGxlUHJlZml4UHJpbnRlcjxOPjo6UHJp
bnRQcmVmaXhUbyh0LCBvcykgcHJpbnRzIHRoZSBmaXJzdCBOCi0vLyBmaWVsZHMgaW4gdHVwbGUg
dCwgYW5kIGNhbiBiZSBkZWZpbmVkIGluIHRlcm1zIG9mCi0vLyBUdXBsZVByZWZpeFByaW50ZXI8
TiAtIDE+LgotLy8KLS8vIFRoZSBpbmR1Y3RpdmUgY2FzZS4KLXRlbXBsYXRlIDxzaXplX3QgTj4K
LXN0cnVjdCBUdXBsZVByZWZpeFByaW50ZXIgewotICAvLyBQcmludHMgdGhlIGZpcnN0IE4gZmll
bGRzIG9mIGEgdHVwbGUuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUdXBsZT4KLSAgc3RhdGljIHZv
aWQgUHJpbnRQcmVmaXhUbyhjb25zdCBUdXBsZSYgdCwgOjpzdGQ6Om9zdHJlYW0qIG9zKSB7Ci0g
ICAgVHVwbGVQcmVmaXhQcmludGVyPE4gLSAxPjo6UHJpbnRQcmVmaXhUbyh0LCBvcyk7Ci0gICAg
R1RFU1RfSU5URU5USU9OQUxfQ09OU1RfQ09ORF9QVVNIXygpCi0gICAgaWYgKE4gPiAxKSB7Ci0g
ICAgR1RFU1RfSU5URU5USU9OQUxfQ09OU1RfQ09ORF9QT1BfKCkKLSAgICAgICpvcyA8PCAiLCAi
OwotICAgIH0KLSAgICBVbml2ZXJzYWxQcmludGVyPAotICAgICAgICB0eXBlbmFtZSBUdXBsZVBv
bGljeTxUdXBsZT46OnRlbXBsYXRlIHR1cGxlX2VsZW1lbnQ8TiAtIDE+Ojp0eXBlPgotICAgICAg
ICA6OlByaW50KFR1cGxlUG9saWN5PFR1cGxlPjo6dGVtcGxhdGUgZ2V0PE4gLSAxPih0KSwgb3Mp
OwotICB9Ci0KLSAgLy8gVGVyc2VseSBwcmludHMgdGhlIGZpcnN0IE4gZmllbGRzIG9mIGEgdHVw
bGUgdG8gYSBzdHJpbmcgdmVjdG9yLAotICAvLyBvbmUgZWxlbWVudCBmb3IgZWFjaCBmaWVsZC4K
LSAgdGVtcGxhdGUgPHR5cGVuYW1lIFR1cGxlPgotICBzdGF0aWMgdm9pZCBUZXJzZVByaW50UHJl
Zml4VG9TdHJpbmdzKGNvbnN0IFR1cGxlJiB0LCBTdHJpbmdzKiBzdHJpbmdzKSB7Ci0gICAgVHVw
bGVQcmVmaXhQcmludGVyPE4gLSAxPjo6VGVyc2VQcmludFByZWZpeFRvU3RyaW5ncyh0LCBzdHJp
bmdzKTsKLSAgICA6OnN0ZDo6c3RyaW5nc3RyZWFtIHNzOwotICAgIFVuaXZlcnNhbFRlcnNlUHJp
bnQoVHVwbGVQb2xpY3k8VHVwbGU+Ojp0ZW1wbGF0ZSBnZXQ8TiAtIDE+KHQpLCAmc3MpOwotICAg
IHN0cmluZ3MtPnB1c2hfYmFjayhzcy5zdHIoKSk7Ci0gIH0KLX07Ci0KLS8vIEJhc2UgY2FzZS4K
LXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgVHVwbGVQcmVmaXhQcmludGVyPDA+IHsKLSAgdGVtcGxhdGUg
PHR5cGVuYW1lIFR1cGxlPgotICBzdGF0aWMgdm9pZCBQcmludFByZWZpeFRvKGNvbnN0IFR1cGxl
JiwgOjpzdGQ6Om9zdHJlYW0qKSB7fQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUdXBsZT4KLSAg
c3RhdGljIHZvaWQgVGVyc2VQcmludFByZWZpeFRvU3RyaW5ncyhjb25zdCBUdXBsZSYsIFN0cmlu
Z3MqKSB7fQotfTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBwcmludGluZyBhIHR1cGxlLgot
Ly8gVHVwbGUgbXVzdCBiZSBlaXRoZXIgc3RkOjp0cjE6OnR1cGxlIG9yIHN0ZDo6dHVwbGUgdHlw
ZS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUdXBsZT4KLXZvaWQgUHJpbnRUdXBsZVRvKGNvbnN0IFR1
cGxlJiB0LCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgKm9zIDw8ICIoIjsKLSAgVHVwbGVQcmVm
aXhQcmludGVyPFR1cGxlUG9saWN5PFR1cGxlPjo6dHVwbGVfc2l6ZT46OlByaW50UHJlZml4VG8o
dCwgb3MpOwotICAqb3MgPDwgIikiOwotfQotCi0vLyBQcmludHMgdGhlIGZpZWxkcyBvZiBhIHR1
cGxlIHRlcnNlbHkgdG8gYSBzdHJpbmcgdmVjdG9yLCBvbmUKLS8vIGVsZW1lbnQgZm9yIGVhY2gg
ZmllbGQuICBTZWUgdGhlIGNvbW1lbnQgYmVmb3JlCi0vLyBVbml2ZXJzYWxUZXJzZVByaW50KCkg
Zm9yIGhvdyB3ZSBkZWZpbmUgInRlcnNlbHkiLgotdGVtcGxhdGUgPHR5cGVuYW1lIFR1cGxlPgot
U3RyaW5ncyBVbml2ZXJzYWxUZXJzZVByaW50VHVwbGVGaWVsZHNUb1N0cmluZ3MoY29uc3QgVHVw
bGUmIHZhbHVlKSB7Ci0gIFN0cmluZ3MgcmVzdWx0OwotICBUdXBsZVByZWZpeFByaW50ZXI8VHVw
bGVQb2xpY3k8VHVwbGU+Ojp0dXBsZV9zaXplPjo6Ci0gICAgICBUZXJzZVByaW50UHJlZml4VG9T
dHJpbmdzKHZhbHVlLCAmcmVzdWx0KTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZiAgLy8g
R1RFU1RfSEFTX1RSMV9UVVBMRSB8fCBHVEVTVF9IQVNfU1REX1RVUExFXwotCi19ICAvLyBuYW1l
c3BhY2UgaW50ZXJuYWwKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci06OnN0ZDo6c3RyaW5nIFBy
aW50VG9TdHJpbmcoY29uc3QgVCYgdmFsdWUpIHsKLSAgOjpzdGQ6OnN0cmluZ3N0cmVhbSBzczsK
LSAgaW50ZXJuYWw6OlVuaXZlcnNhbFRlcnNlUHJpbnRlcjxUPjo6UHJpbnQodmFsdWUsICZzcyk7
Ci0gIHJldHVybiBzcy5zdHIoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKLQotLy8g
SW5jbHVkZSBhbnkgY3VzdG9tIHByaW50ZXIgYWRkZWQgYnkgdGhlIGxvY2FsIGluc3RhbGxhdGlv
bi4KLS8vIFdlIG11c3QgaW5jbHVkZSB0aGlzIGhlYWRlciBhdCB0aGUgZW5kIHRvIG1ha2Ugc3Vy
ZSBpdCBjYW4gdXNlIHRoZQotLy8gZGVjbGFyYXRpb25zIGZyb20gdGhpcyBmaWxlLgotI2luY2x1
ZGUgImd0ZXN0L2ludGVybmFsL2N1c3RvbS9ndGVzdC1wcmludGVycy5oIgotCi0jZW5kaWYgIC8v
IEdURVNUX0lOQ0xVREVfR1RFU1RfR1RFU1RfUFJJTlRFUlNfSF8KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVkZS9n
dGVzdC9ndGVzdC1zcGkuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0
ZXN0L2dvb2dsZXRlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC1zcGkuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjYzZmE5YTFiMmE4NzUwODFkYTM2MDZmYzQ1NzhlZTVhOTRhYmI4Yy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3Qv
Z3Rlc3Qtc3BpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotLy8gQ29weXJpZ2h0
IDIwMDcsIEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24u
Ci0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLy8KLS8vIEF1dGhvcjogd2FuQGdvb2ds
ZS5jb20gKFpoYW55b25nIFdhbikKLS8vCi0vLyBVdGlsaXRpZXMgZm9yIHRlc3RpbmcgR29vZ2xl
IFRlc3QgaXRzZWxmIGFuZCBjb2RlIHRoYXQgdXNlcyBHb29nbGUgVGVzdAotLy8gKGUuZy4gZnJh
bWV3b3JrcyBidWlsdCBvbiB0b3Agb2YgR29vZ2xlIFRlc3QpLgotCi0jaWZuZGVmIEdURVNUX0lO
Q0xVREVfR1RFU1RfR1RFU1RfU1BJX0hfCi0jZGVmaW5lIEdURVNUX0lOQ0xVREVfR1RFU1RfR1RF
U1RfU1BJX0hfCi0KLSNpbmNsdWRlICJndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgdGVzdGlu
ZyB7Ci0KLS8vIFRoaXMgaGVscGVyIGNsYXNzIGNhbiBiZSB1c2VkIHRvIG1vY2sgb3V0IEdvb2ds
ZSBUZXN0IGZhaWx1cmUgcmVwb3J0aW5nCi0vLyBzbyB0aGF0IHdlIGNhbiB0ZXN0IEdvb2dsZSBU
ZXN0IG9yIGNvZGUgdGhhdCBidWlsZHMgb24gR29vZ2xlIFRlc3QuCi0vLwotLy8gQW4gb2JqZWN0
IG9mIHRoaXMgY2xhc3MgYXBwZW5kcyBhIFRlc3RQYXJ0UmVzdWx0IG9iamVjdCB0byB0aGUKLS8v
IFRlc3RQYXJ0UmVzdWx0QXJyYXkgb2JqZWN0IGdpdmVuIGluIHRoZSBjb25zdHJ1Y3RvciB3aGVu
ZXZlciBhIEdvb2dsZSBUZXN0Ci0vLyBmYWlsdXJlIGlzIHJlcG9ydGVkLiBJdCBjYW4gZWl0aGVy
IGludGVyY2VwdCBvbmx5IGZhaWx1cmVzIHRoYXQgYXJlCi0vLyBnZW5lcmF0ZWQgaW4gdGhlIHNh
bWUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGlzIG9iamVjdCBvciBpdCBjYW4gaW50ZXJjZXB0Ci0v
LyBhbGwgZ2VuZXJhdGVkIGZhaWx1cmVzLiBUaGUgc2NvcGUgb2YgdGhpcyBtb2NrIG9iamVjdCBj
YW4gYmUgY29udHJvbGxlZCB3aXRoCi0vLyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSB0d28g
YXJndW1lbnRzIGNvbnN0cnVjdG9yLgotY2xhc3MgR1RFU1RfQVBJXyBTY29wZWRGYWtlVGVzdFBh
cnRSZXN1bHRSZXBvcnRlcgotICAgIDogcHVibGljIFRlc3RQYXJ0UmVzdWx0UmVwb3J0ZXJJbnRl
cmZhY2UgewotIHB1YmxpYzoKLSAgLy8gVGhlIHR3byBwb3NzaWJsZSBtb2NraW5nIG1vZGVzIG9m
IHRoaXMgb2JqZWN0LgotICBlbnVtIEludGVyY2VwdE1vZGUgewotICAgIElOVEVSQ0VQVF9PTkxZ
X0NVUlJFTlRfVEhSRUFELCAgLy8gSW50ZXJjZXB0cyBvbmx5IHRocmVhZCBsb2NhbCBmYWlsdXJl
cy4KLSAgICBJTlRFUkNFUFRfQUxMX1RIUkVBRFMgICAgICAgICAgIC8vIEludGVyY2VwdHMgYWxs
IGZhaWx1cmVzLgotICB9OwotCi0gIC8vIFRoZSBjJ3RvciBzZXRzIHRoaXMgb2JqZWN0IGFzIHRo
ZSB0ZXN0IHBhcnQgcmVzdWx0IHJlcG9ydGVyIHVzZWQKLSAgLy8gYnkgR29vZ2xlIFRlc3QuICBU
aGUgJ3Jlc3VsdCcgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGVyZSB0byByZXBvcnQgdGhlCi0gIC8v
IHJlc3VsdHMuIFRoaXMgcmVwb3J0ZXIgd2lsbCBvbmx5IGNhdGNoIGZhaWx1cmVzIGdlbmVyYXRl
ZCBpbiB0aGUgY3VycmVudAotICAvLyB0aHJlYWQuIERFUFJFQ0FURUQKLSAgZXhwbGljaXQgU2Nv
cGVkRmFrZVRlc3RQYXJ0UmVzdWx0UmVwb3J0ZXIoVGVzdFBhcnRSZXN1bHRBcnJheSogcmVzdWx0
KTsKLQotICAvLyBTYW1lIGFzIGFib3ZlLCBidXQgeW91IGNhbiBjaG9vc2UgdGhlIGludGVyY2Vw
dGlvbiBzY29wZSBvZiB0aGlzIG9iamVjdC4KLSAgU2NvcGVkRmFrZVRlc3RQYXJ0UmVzdWx0UmVw
b3J0ZXIoSW50ZXJjZXB0TW9kZSBpbnRlcmNlcHRfbW9kZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVGVzdFBhcnRSZXN1bHRBcnJheSogcmVzdWx0KTsKLQotICAvLyBUaGUg
ZCd0b3IgcmVzdG9yZXMgdGhlIHByZXZpb3VzIHRlc3QgcGFydCByZXN1bHQgcmVwb3J0ZXIuCi0g
IHZpcnR1YWwgflNjb3BlZEZha2VUZXN0UGFydFJlc3VsdFJlcG9ydGVyKCk7Ci0KLSAgLy8gQXBw
ZW5kcyB0aGUgVGVzdFBhcnRSZXN1bHQgb2JqZWN0IHRvIHRoZSBUZXN0UGFydFJlc3VsdEFycmF5
Ci0gIC8vIHJlY2VpdmVkIGluIHRoZSBjb25zdHJ1Y3Rvci4KLSAgLy8KLSAgLy8gVGhpcyBtZXRo
b2QgaXMgZnJvbSB0aGUgVGVzdFBhcnRSZXN1bHRSZXBvcnRlckludGVyZmFjZQotICAvLyBpbnRl
cmZhY2UuCi0gIHZpcnR1YWwgdm9pZCBSZXBvcnRUZXN0UGFydFJlc3VsdChjb25zdCBUZXN0UGFy
dFJlc3VsdCYgcmVzdWx0KTsKLSBwcml2YXRlOgotICB2b2lkIEluaXQoKTsKLQotICBjb25zdCBJ
bnRlcmNlcHRNb2RlIGludGVyY2VwdF9tb2RlXzsKLSAgVGVzdFBhcnRSZXN1bHRSZXBvcnRlcklu
dGVyZmFjZSogb2xkX3JlcG9ydGVyXzsKLSAgVGVzdFBhcnRSZXN1bHRBcnJheSogY29uc3QgcmVz
dWx0XzsKLQotICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJR05fKFNjb3BlZEZha2VUZXN0
UGFydFJlc3VsdFJlcG9ydGVyKTsKLX07Ci0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLS8vIEEg
aGVscGVyIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgRVhQRUNUX0ZBVEFMX0ZBSUxVUkUoKSBhbmQK
LS8vIEVYUEVDVF9OT05GQVRBTF9GQUlMVVJFKCkuICBJdHMgZGVzdHJ1Y3RvciB2ZXJpZmllcyB0
aGF0IHRoZSBnaXZlbgotLy8gVGVzdFBhcnRSZXN1bHRBcnJheSBjb250YWlucyBleGFjdGx5IG9u
ZSBmYWlsdXJlIHRoYXQgaGFzIHRoZSBnaXZlbgotLy8gdHlwZSBhbmQgY29udGFpbnMgdGhlIGdp
dmVuIHN1YnN0cmluZy4gIElmIHRoYXQncyBub3QgdGhlIGNhc2UsIGEKLS8vIG5vbi1mYXRhbCBm
YWlsdXJlIHdpbGwgYmUgZ2VuZXJhdGVkLgotY2xhc3MgR1RFU1RfQVBJXyBTaW5nbGVGYWlsdXJl
Q2hlY2tlciB7Ci0gcHVibGljOgotICAvLyBUaGUgY29uc3RydWN0b3IgcmVtZW1iZXJzIHRoZSBh
cmd1bWVudHMuCi0gIFNpbmdsZUZhaWx1cmVDaGVja2VyKGNvbnN0IFRlc3RQYXJ0UmVzdWx0QXJy
YXkqIHJlc3VsdHMsCi0gICAgICAgICAgICAgICAgICAgICAgIFRlc3RQYXJ0UmVzdWx0OjpUeXBl
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgc3Vic3RyKTsKLSAg
flNpbmdsZUZhaWx1cmVDaGVja2VyKCk7Ci0gcHJpdmF0ZToKLSAgY29uc3QgVGVzdFBhcnRSZXN1
bHRBcnJheSogY29uc3QgcmVzdWx0c187Ci0gIGNvbnN0IFRlc3RQYXJ0UmVzdWx0OjpUeXBlIHR5
cGVfOwotICBjb25zdCBzdHJpbmcgc3Vic3RyXzsKLQotICBHVEVTVF9ESVNBTExPV19DT1BZX0FO
RF9BU1NJR05fKFNpbmdsZUZhaWx1cmVDaGVja2VyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBp
bnRlcm5hbAotCi19ICAvLyBuYW1lc3BhY2UgdGVzdGluZwotCi0vLyBBIHNldCBvZiBtYWNyb3Mg
Zm9yIHRlc3RpbmcgR29vZ2xlIFRlc3QgYXNzZXJ0aW9ucyBvciBjb2RlIHRoYXQncyBleHBlY3Rl
ZAotLy8gdG8gZ2VuZXJhdGUgR29vZ2xlIFRlc3QgZmF0YWwgZmFpbHVyZXMuICBJdCB2ZXJpZmll
cyB0aGF0IHRoZSBnaXZlbgotLy8gc3RhdGVtZW50IHdpbGwgY2F1c2UgZXhhY3RseSBvbmUgZmF0
YWwgR29vZ2xlIFRlc3QgZmFpbHVyZSB3aXRoICdzdWJzdHInCi0vLyBiZWluZyBwYXJ0IG9mIHRo
ZSBmYWlsdXJlIG1lc3NhZ2UuCi0vLwotLy8gVGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgdmVyc2lv
bnMgb2YgdGhpcyBtYWNyby4gRVhQRUNUX0ZBVEFMX0ZBSUxVUkUgb25seQotLy8gYWZmZWN0cyBh
bmQgY29uc2lkZXJzIGZhaWx1cmVzIGdlbmVyYXRlZCBpbiB0aGUgY3VycmVudCB0aHJlYWQgYW5k
Ci0vLyBFWFBFQ1RfRkFUQUxfRkFJTFVSRV9PTl9BTExfVEhSRUFEUyBkb2VzIHRoZSBzYW1lIGJ1
dCBmb3IgYWxsIHRocmVhZHMuCi0vLwotLy8gVGhlIHZlcmlmaWNhdGlvbiBvZiB0aGUgYXNzZXJ0
aW9uIGlzIGRvbmUgY29ycmVjdGx5IGV2ZW4gd2hlbiB0aGUgc3RhdGVtZW50Ci0vLyB0aHJvd3Mg
YW4gZXhjZXB0aW9uIG9yIGFib3J0cyB0aGUgY3VycmVudCBmdW5jdGlvbi4KLS8vCi0vLyBLbm93
biByZXN0cmljdGlvbnM6Ci0vLyAgIC0gJ3N0YXRlbWVudCcgY2Fubm90IHJlZmVyZW5jZSBsb2Nh
bCBub24tc3RhdGljIHZhcmlhYmxlcyBvcgotLy8gICAgIG5vbi1zdGF0aWMgbWVtYmVycyBvZiB0
aGUgY3VycmVudCBvYmplY3QuCi0vLyAgIC0gJ3N0YXRlbWVudCcgY2Fubm90IHJldHVybiBhIHZh
bHVlLgotLy8gICAtIFlvdSBjYW5ub3Qgc3RyZWFtIGEgZmFpbHVyZSBtZXNzYWdlIHRvIHRoaXMg
bWFjcm8uCi0vLwotLy8gTm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHRoZSBpbXBsZW1lbnRhdGlvbnMg
b2YgdGhlIGZvbGxvd2luZyB0d28KLS8vIG1hY3JvcyBhcmUgbXVjaCBhbGlrZSwgd2UgY2Fubm90
IHJlZmFjdG9yIHRoZW0gdG8gdXNlIGEgY29tbW9uCi0vLyBoZWxwZXIgbWFjcm8sIGR1ZSB0byBz
b21lIHBlY3VsaWFyaXR5IGluIGhvdyB0aGUgcHJlcHJvY2Vzc29yCi0vLyB3b3Jrcy4gIFRoZSBB
Y2NlcHRzTWFjcm9UaGF0RXhwYW5kc1RvVW5wcm90ZWN0ZWRDb21tYSB0ZXN0IGluCi0vLyBndGVz
dF91bml0dGVzdC5jYyB3aWxsIGZhaWwgdG8gY29tcGlsZSBpZiB3ZSBkbyB0aGF0LgotI2RlZmlu
ZSBFWFBFQ1RfRkFUQUxfRkFJTFVSRShzdGF0ZW1lbnQsIHN1YnN0cikgXAotICBkbyB7IFwKLSAg
ICBjbGFzcyBHVGVzdEV4cGVjdEZhdGFsRmFpbHVyZUhlbHBlciB7XAotICAgICBwdWJsaWM6XAot
ICAgICAgc3RhdGljIHZvaWQgRXhlY3V0ZSgpIHsgc3RhdGVtZW50OyB9XAotICAgIH07XAotICAg
IDo6dGVzdGluZzo6VGVzdFBhcnRSZXN1bHRBcnJheSBndGVzdF9mYWlsdXJlcztcCi0gICAgOjp0
ZXN0aW5nOjppbnRlcm5hbDo6U2luZ2xlRmFpbHVyZUNoZWNrZXIgZ3Rlc3RfY2hlY2tlcihcCi0g
ICAgICAgICZndGVzdF9mYWlsdXJlcywgOjp0ZXN0aW5nOjpUZXN0UGFydFJlc3VsdDo6a0ZhdGFs
RmFpbHVyZSwgKHN1YnN0cikpO1wKLSAgICB7XAotICAgICAgOjp0ZXN0aW5nOjpTY29wZWRGYWtl
VGVzdFBhcnRSZXN1bHRSZXBvcnRlciBndGVzdF9yZXBvcnRlcihcCi0gICAgICAgICAgOjp0ZXN0
aW5nOjpTY29wZWRGYWtlVGVzdFBhcnRSZXN1bHRSZXBvcnRlcjo6IFwKLSAgICAgICAgICBJTlRF
UkNFUFRfT05MWV9DVVJSRU5UX1RIUkVBRCwgJmd0ZXN0X2ZhaWx1cmVzKTtcCi0gICAgICBHVGVz
dEV4cGVjdEZhdGFsRmFpbHVyZUhlbHBlcjo6RXhlY3V0ZSgpO1wKLSAgICB9XAotICB9IHdoaWxl
ICg6OnRlc3Rpbmc6OmludGVybmFsOjpBbHdheXNGYWxzZSgpKQotCi0jZGVmaW5lIEVYUEVDVF9G
QVRBTF9GQUlMVVJFX09OX0FMTF9USFJFQURTKHN0YXRlbWVudCwgc3Vic3RyKSBcCi0gIGRvIHsg
XAotICAgIGNsYXNzIEdUZXN0RXhwZWN0RmF0YWxGYWlsdXJlSGVscGVyIHtcCi0gICAgIHB1Ymxp
YzpcCi0gICAgICBzdGF0aWMgdm9pZCBFeGVjdXRlKCkgeyBzdGF0ZW1lbnQ7IH1cCi0gICAgfTtc
Ci0gICAgOjp0ZXN0aW5nOjpUZXN0UGFydFJlc3VsdEFycmF5IGd0ZXN0X2ZhaWx1cmVzO1wKLSAg
ICA6OnRlc3Rpbmc6OmludGVybmFsOjpTaW5nbGVGYWlsdXJlQ2hlY2tlciBndGVzdF9jaGVja2Vy
KFwKLSAgICAgICAgJmd0ZXN0X2ZhaWx1cmVzLCA6OnRlc3Rpbmc6OlRlc3RQYXJ0UmVzdWx0Ojpr
RmF0YWxGYWlsdXJlLCAoc3Vic3RyKSk7XAotICAgIHtcCi0gICAgICA6OnRlc3Rpbmc6OlNjb3Bl
ZEZha2VUZXN0UGFydFJlc3VsdFJlcG9ydGVyIGd0ZXN0X3JlcG9ydGVyKFwKLSAgICAgICAgICA6
OnRlc3Rpbmc6OlNjb3BlZEZha2VUZXN0UGFydFJlc3VsdFJlcG9ydGVyOjogXAotICAgICAgICAg
IElOVEVSQ0VQVF9BTExfVEhSRUFEUywgJmd0ZXN0X2ZhaWx1cmVzKTtcCi0gICAgICBHVGVzdEV4
cGVjdEZhdGFsRmFpbHVyZUhlbHBlcjo6RXhlY3V0ZSgpO1wKLSAgICB9XAotICB9IHdoaWxlICg6
OnRlc3Rpbmc6OmludGVybmFsOjpBbHdheXNGYWxzZSgpKQotCi0vLyBBIG1hY3JvIGZvciB0ZXN0
aW5nIEdvb2dsZSBUZXN0IGFzc2VydGlvbnMgb3IgY29kZSB0aGF0J3MgZXhwZWN0ZWQgdG8KLS8v
IGdlbmVyYXRlIEdvb2dsZSBUZXN0IG5vbi1mYXRhbCBmYWlsdXJlcy4gIEl0IGFzc2VydHMgdGhh
dCB0aGUgZ2l2ZW4KLS8vIHN0YXRlbWVudCB3aWxsIGNhdXNlIGV4YWN0bHkgb25lIG5vbi1mYXRh
bCBHb29nbGUgVGVzdCBmYWlsdXJlIHdpdGggJ3N1YnN0cicKLS8vIGJlaW5nIHBhcnQgb2YgdGhl
IGZhaWx1cmUgbWVzc2FnZS4KLS8vCi0vLyBUaGVyZSBhcmUgdHdvIGRpZmZlcmVudCB2ZXJzaW9u
cyBvZiB0aGlzIG1hY3JvLiBFWFBFQ1RfTk9ORkFUQUxfRkFJTFVSRSBvbmx5Ci0vLyBhZmZlY3Rz
IGFuZCBjb25zaWRlcnMgZmFpbHVyZXMgZ2VuZXJhdGVkIGluIHRoZSBjdXJyZW50IHRocmVhZCBh
bmQKLS8vIEVYUEVDVF9OT05GQVRBTF9GQUlMVVJFX09OX0FMTF9USFJFQURTIGRvZXMgdGhlIHNh
bWUgYnV0IGZvciBhbGwgdGhyZWFkcy4KLS8vCi0vLyAnc3RhdGVtZW50JyBpcyBhbGxvd2VkIHRv
IHJlZmVyZW5jZSBsb2NhbCB2YXJpYWJsZXMgYW5kIG1lbWJlcnMgb2YKLS8vIHRoZSBjdXJyZW50
IG9iamVjdC4KLS8vCi0vLyBUaGUgdmVyaWZpY2F0aW9uIG9mIHRoZSBhc3NlcnRpb24gaXMgZG9u
ZSBjb3JyZWN0bHkgZXZlbiB3aGVuIHRoZSBzdGF0ZW1lbnQKLS8vIHRocm93cyBhbiBleGNlcHRp
b24gb3IgYWJvcnRzIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgotLy8KLS8vIEtub3duIHJlc3RyaWN0
aW9uczoKLS8vICAgLSBZb3UgY2Fubm90IHN0cmVhbSBhIGZhaWx1cmUgbWVzc2FnZSB0byB0aGlz
IG1hY3JvLgotLy8KLS8vIE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGUgaW1wbGVtZW50YXRpb25z
IG9mIHRoZSBmb2xsb3dpbmcgdHdvCi0vLyBtYWNyb3MgYXJlIG11Y2ggYWxpa2UsIHdlIGNhbm5v
dCByZWZhY3RvciB0aGVtIHRvIHVzZSBhIGNvbW1vbgotLy8gaGVscGVyIG1hY3JvLCBkdWUgdG8g
c29tZSBwZWN1bGlhcml0eSBpbiBob3cgdGhlIHByZXByb2Nlc3NvcgotLy8gd29ya3MuICBJZiB3
ZSBkbyB0aGF0LCB0aGUgY29kZSB3b24ndCBjb21waWxlIHdoZW4gdGhlIHVzZXIgZ2l2ZXMKLS8v
IEVYUEVDVF9OT05GQVRBTF9GQUlMVVJFKCkgYSBzdGF0ZW1lbnQgdGhhdCBjb250YWlucyBhIG1h
Y3JvIHRoYXQKLS8vIGV4cGFuZHMgdG8gY29kZSBjb250YWluaW5nIGFuIHVucHJvdGVjdGVkIGNv
bW1hLiAgVGhlCi0vLyBBY2NlcHRzTWFjcm9UaGF0RXhwYW5kc1RvVW5wcm90ZWN0ZWRDb21tYSB0
ZXN0IGluIGd0ZXN0X3VuaXR0ZXN0LmNjCi0vLyBjYXRjaGVzIHRoYXQuCi0vLwotLy8gRm9yIHRo
ZSBzYW1lIHJlYXNvbiwgd2UgaGF2ZSB0byB3cml0ZQotLy8gICBpZiAoOjp0ZXN0aW5nOjppbnRl
cm5hbDo6QWx3YXlzVHJ1ZSgpKSB7IHN0YXRlbWVudDsgfQotLy8gaW5zdGVhZCBvZgotLy8gICBH
VEVTVF9TVVBQUkVTU19VTlJFQUNIQUJMRV9DT0RFX1dBUk5JTkdfQkVMT1dfKHN0YXRlbWVudCkK
LS8vIHRvIGF2b2lkIGFuIE1TVkMgd2FybmluZyBvbiB1bnJlYWNoYWJsZSBjb2RlLgotI2RlZmlu
ZSBFWFBFQ1RfTk9ORkFUQUxfRkFJTFVSRShzdGF0ZW1lbnQsIHN1YnN0cikgXAotICBkbyB7XAot
ICAgIDo6dGVzdGluZzo6VGVzdFBhcnRSZXN1bHRBcnJheSBndGVzdF9mYWlsdXJlcztcCi0gICAg
Ojp0ZXN0aW5nOjppbnRlcm5hbDo6U2luZ2xlRmFpbHVyZUNoZWNrZXIgZ3Rlc3RfY2hlY2tlcihc
Ci0gICAgICAgICZndGVzdF9mYWlsdXJlcywgOjp0ZXN0aW5nOjpUZXN0UGFydFJlc3VsdDo6a05v
bkZhdGFsRmFpbHVyZSwgXAotICAgICAgICAoc3Vic3RyKSk7XAotICAgIHtcCi0gICAgICA6OnRl
c3Rpbmc6OlNjb3BlZEZha2VUZXN0UGFydFJlc3VsdFJlcG9ydGVyIGd0ZXN0X3JlcG9ydGVyKFwK
LSAgICAgICAgICA6OnRlc3Rpbmc6OlNjb3BlZEZha2VUZXN0UGFydFJlc3VsdFJlcG9ydGVyOjog
XAotICAgICAgICAgIElOVEVSQ0VQVF9PTkxZX0NVUlJFTlRfVEhSRUFELCAmZ3Rlc3RfZmFpbHVy
ZXMpO1wKLSAgICAgIGlmICg6OnRlc3Rpbmc6OmludGVybmFsOjpBbHdheXNUcnVlKCkpIHsgc3Rh
dGVtZW50OyB9XAotICAgIH1cCi0gIH0gd2hpbGUgKDo6dGVzdGluZzo6aW50ZXJuYWw6OkFsd2F5
c0ZhbHNlKCkpCi0KLSNkZWZpbmUgRVhQRUNUX05PTkZBVEFMX0ZBSUxVUkVfT05fQUxMX1RIUkVB
RFMoc3RhdGVtZW50LCBzdWJzdHIpIFwKLSAgZG8ge1wKLSAgICA6OnRlc3Rpbmc6OlRlc3RQYXJ0
UmVzdWx0QXJyYXkgZ3Rlc3RfZmFpbHVyZXM7XAotICAgIDo6dGVzdGluZzo6aW50ZXJuYWw6OlNp
bmdsZUZhaWx1cmVDaGVja2VyIGd0ZXN0X2NoZWNrZXIoXAotICAgICAgICAmZ3Rlc3RfZmFpbHVy
ZXMsIDo6dGVzdGluZzo6VGVzdFBhcnRSZXN1bHQ6OmtOb25GYXRhbEZhaWx1cmUsIFwKLSAgICAg
ICAgKHN1YnN0cikpO1wKLSAgICB7XAotICAgICAgOjp0ZXN0aW5nOjpTY29wZWRGYWtlVGVzdFBh
cnRSZXN1bHRSZXBvcnRlciBndGVzdF9yZXBvcnRlcihcCi0gICAgICAgICAgOjp0ZXN0aW5nOjpT
Y29wZWRGYWtlVGVzdFBhcnRSZXN1bHRSZXBvcnRlcjo6SU5URVJDRVBUX0FMTF9USFJFQURTLCBc
Ci0gICAgICAgICAgJmd0ZXN0X2ZhaWx1cmVzKTtcCi0gICAgICBpZiAoOjp0ZXN0aW5nOjppbnRl
cm5hbDo6QWx3YXlzVHJ1ZSgpKSB7IHN0YXRlbWVudDsgfVwKLSAgICB9XAotICB9IHdoaWxlICg6
OnRlc3Rpbmc6OmludGVybmFsOjpBbHdheXNGYWxzZSgpKQotCi0jZW5kaWYgIC8vIEdURVNUX0lO
Q0xVREVfR1RFU1RfR1RFU1RfU1BJX0hfCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QtdGVz
dC1wYXJ0LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29n
bGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QtdGVzdC1wYXJ0LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDc3ZWI4NDQ4MzlkODkyN2EyOTNkMjU3MDRkZjliMTcwN2E0MjczYTUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2d0
ZXN0LXRlc3QtcGFydC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLS8vIENvcHly
aWdodCAyMDA4LCBHb29nbGUgSW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLS8vCi0vLyBBdXRob3I6IG1oZXVs
ZUBnb29nbGUuY29tIChNYXJrdXMgSGV1bGUpCi0vLwotCi0jaWZuZGVmIEdURVNUX0lOQ0xVREVf
R1RFU1RfR1RFU1RfVEVTVF9QQVJUX0hfCi0jZGVmaW5lIEdURVNUX0lOQ0xVREVfR1RFU1RfR1RF
U1RfVEVTVF9QQVJUX0hfCi0KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8dmVjdG9yPgot
I2luY2x1ZGUgImd0ZXN0L2ludGVybmFsL2d0ZXN0LWludGVybmFsLmgiCi0jaW5jbHVkZSAiZ3Rl
c3QvaW50ZXJuYWwvZ3Rlc3Qtc3RyaW5nLmgiCi0KLW5hbWVzcGFjZSB0ZXN0aW5nIHsKLQotLy8g
QSBjb3B5YWJsZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgYSB0ZXN0IHBhcnQg
KGkuZS4gYW4KLS8vIGFzc2VydGlvbiBvciBhbiBleHBsaWNpdCBGQUlMKCksIEFERF9GQUlMVVJF
KCksIG9yIFNVQ0NFU1MoKSkuCi0vLwotLy8gRG9uJ3QgaW5oZXJpdCBmcm9tIFRlc3RQYXJ0UmVz
dWx0IGFzIGl0cyBkZXN0cnVjdG9yIGlzIG5vdCB2aXJ0dWFsLgotY2xhc3MgR1RFU1RfQVBJXyBU
ZXN0UGFydFJlc3VsdCB7Ci0gcHVibGljOgotICAvLyBUaGUgcG9zc2libGUgb3V0Y29tZXMgb2Yg
YSB0ZXN0IHBhcnQgKGkuZS4gYW4gYXNzZXJ0aW9uIG9yIGFuCi0gIC8vIGV4cGxpY2l0IFNVQ0NF
RUQoKSwgRkFJTCgpLCBvciBBRERfRkFJTFVSRSgpKS4KLSAgZW51bSBUeXBlIHsKLSAgICBrU3Vj
Y2VzcywgICAgICAgICAgLy8gU3VjY2VlZGVkLgotICAgIGtOb25GYXRhbEZhaWx1cmUsICAvLyBG
YWlsZWQgYnV0IHRoZSB0ZXN0IGNhbiBjb250aW51ZS4KLSAgICBrRmF0YWxGYWlsdXJlICAgICAg
Ly8gRmFpbGVkIGFuZCB0aGUgdGVzdCBzaG91bGQgYmUgdGVybWluYXRlZC4KLSAgfTsKLQotICAv
LyBDJ3Rvci4gIFRlc3RQYXJ0UmVzdWx0IGRvZXMgTk9UIGhhdmUgYSBkZWZhdWx0IGNvbnN0cnVj
dG9yLgotICAvLyBBbHdheXMgdXNlIHRoaXMgY29uc3RydWN0b3IgKHdpdGggcGFyYW1ldGVycykg
dG8gY3JlYXRlIGEKLSAgLy8gVGVzdFBhcnRSZXN1bHQgb2JqZWN0LgotICBUZXN0UGFydFJlc3Vs
dChUeXBlIGFfdHlwZSwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYV9maWxlX25hbWUs
Ci0gICAgICAgICAgICAgICAgIGludCBhX2xpbmVfbnVtYmVyLAotICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBhX21lc3NhZ2UpCi0gICAgICA6IHR5cGVfKGFfdHlwZSksCi0gICAgICAgIGZp
bGVfbmFtZV8oYV9maWxlX25hbWUgPT0gTlVMTCA/ICIiIDogYV9maWxlX25hbWUpLAotICAgICAg
ICBsaW5lX251bWJlcl8oYV9saW5lX251bWJlciksCi0gICAgICAgIHN1bW1hcnlfKEV4dHJhY3RT
dW1tYXJ5KGFfbWVzc2FnZSkpLAotICAgICAgICBtZXNzYWdlXyhhX21lc3NhZ2UpIHsKLSAgfQot
Ci0gIC8vIEdldHMgdGhlIG91dGNvbWUgb2YgdGhlIHRlc3QgcGFydC4KLSAgVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gdHlwZV87IH0KLQotICAvLyBHZXRzIHRoZSBuYW1lIG9mIHRoZSBzb3Vy
Y2UgZmlsZSB3aGVyZSB0aGUgdGVzdCBwYXJ0IHRvb2sgcGxhY2UsIG9yCi0gIC8vIE5VTEwgaWYg
aXQncyB1bmtub3duLgotICBjb25zdCBjaGFyKiBmaWxlX25hbWUoKSBjb25zdCB7Ci0gICAgcmV0
dXJuIGZpbGVfbmFtZV8uZW1wdHkoKSA/IE5VTEwgOiBmaWxlX25hbWVfLmNfc3RyKCk7Ci0gIH0K
LQotICAvLyBHZXRzIHRoZSBsaW5lIGluIHRoZSBzb3VyY2UgZmlsZSB3aGVyZSB0aGUgdGVzdCBw
YXJ0IHRvb2sgcGxhY2UsCi0gIC8vIG9yIC0xIGlmIGl0J3MgdW5rbm93bi4KLSAgaW50IGxpbmVf
bnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbGluZV9udW1iZXJfOyB9Ci0KLSAgLy8gR2V0cyB0aGUg
c3VtbWFyeSBvZiB0aGUgZmFpbHVyZSBtZXNzYWdlLgotICBjb25zdCBjaGFyKiBzdW1tYXJ5KCkg
Y29uc3QgeyByZXR1cm4gc3VtbWFyeV8uY19zdHIoKTsgfQotCi0gIC8vIEdldHMgdGhlIG1lc3Nh
Z2UgYXNzb2NpYXRlZCB3aXRoIHRoZSB0ZXN0IHBhcnQuCi0gIGNvbnN0IGNoYXIqIG1lc3NhZ2Uo
KSBjb25zdCB7IHJldHVybiBtZXNzYWdlXy5jX3N0cigpOyB9Ci0KLSAgLy8gUmV0dXJucyB0cnVl
IGlmZiB0aGUgdGVzdCBwYXJ0IHBhc3NlZC4KLSAgYm9vbCBwYXNzZWQoKSBjb25zdCB7IHJldHVy
biB0eXBlXyA9PSBrU3VjY2VzczsgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHRlc3Qg
cGFydCBmYWlsZWQuCi0gIGJvb2wgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gdHlwZV8gIT0ga1N1
Y2Nlc3M7IH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSB0ZXN0IHBhcnQgbm9uLWZhdGFs
bHkgZmFpbGVkLgotICBib29sIG5vbmZhdGFsbHlfZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gdHlw
ZV8gPT0ga05vbkZhdGFsRmFpbHVyZTsgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHRl
c3QgcGFydCBmYXRhbGx5IGZhaWxlZC4KLSAgYm9vbCBmYXRhbGx5X2ZhaWxlZCgpIGNvbnN0IHsg
cmV0dXJuIHR5cGVfID09IGtGYXRhbEZhaWx1cmU7IH0KLQotIHByaXZhdGU6Ci0gIFR5cGUgdHlw
ZV87Ci0KLSAgLy8gR2V0cyB0aGUgc3VtbWFyeSBvZiB0aGUgZmFpbHVyZSBtZXNzYWdlIGJ5IG9t
aXR0aW5nIHRoZSBzdGFjawotICAvLyB0cmFjZSBpbiBpdC4KLSAgc3RhdGljIHN0ZDo6c3RyaW5n
IEV4dHJhY3RTdW1tYXJ5KGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwotCi0gIC8vIFRoZSBuYW1lIG9m
IHRoZSBzb3VyY2UgZmlsZSB3aGVyZSB0aGUgdGVzdCBwYXJ0IHRvb2sgcGxhY2UsIG9yCi0gIC8v
ICIiIGlmIHRoZSBzb3VyY2UgZmlsZSBpcyB1bmtub3duLgotICBzdGQ6OnN0cmluZyBmaWxlX25h
bWVfOwotICAvLyBUaGUgbGluZSBpbiB0aGUgc291cmNlIGZpbGUgd2hlcmUgdGhlIHRlc3QgcGFy
dCB0b29rIHBsYWNlLCBvciAtMQotICAvLyBpZiB0aGUgbGluZSBudW1iZXIgaXMgdW5rbm93bi4K
LSAgaW50IGxpbmVfbnVtYmVyXzsKLSAgc3RkOjpzdHJpbmcgc3VtbWFyeV87ICAvLyBUaGUgdGVz
dCBmYWlsdXJlIHN1bW1hcnkuCi0gIHN0ZDo6c3RyaW5nIG1lc3NhZ2VfOyAgLy8gVGhlIHRlc3Qg
ZmFpbHVyZSBtZXNzYWdlLgotfTsKLQotLy8gUHJpbnRzIGEgVGVzdFBhcnRSZXN1bHQgb2JqZWN0
Lgotc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IFRlc3RQ
YXJ0UmVzdWx0JiByZXN1bHQpOwotCi0vLyBBbiBhcnJheSBvZiBUZXN0UGFydFJlc3VsdCBvYmpl
Y3RzLgotLy8KLS8vIERvbid0IGluaGVyaXQgZnJvbSBUZXN0UGFydFJlc3VsdEFycmF5IGFzIGl0
cyBkZXN0cnVjdG9yIGlzIG5vdAotLy8gdmlydHVhbC4KLWNsYXNzIEdURVNUX0FQSV8gVGVzdFBh
cnRSZXN1bHRBcnJheSB7Ci0gcHVibGljOgotICBUZXN0UGFydFJlc3VsdEFycmF5KCkge30KLQot
ICAvLyBBcHBlbmRzIHRoZSBnaXZlbiBUZXN0UGFydFJlc3VsdCB0byB0aGUgYXJyYXkuCi0gIHZv
aWQgQXBwZW5kKGNvbnN0IFRlc3RQYXJ0UmVzdWx0JiByZXN1bHQpOwotCi0gIC8vIFJldHVybnMg
dGhlIFRlc3RQYXJ0UmVzdWx0IGF0IHRoZSBnaXZlbiBpbmRleCAoMC1iYXNlZCkuCi0gIGNvbnN0
IFRlc3RQYXJ0UmVzdWx0JiBHZXRUZXN0UGFydFJlc3VsdChpbnQgaW5kZXgpIGNvbnN0OwotCi0g
IC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBUZXN0UGFydFJlc3VsdCBvYmplY3RzIGluIHRoZSBh
cnJheS4KLSAgaW50IHNpemUoKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIHN0ZDo6dmVjdG9yPFRl
c3RQYXJ0UmVzdWx0PiBhcnJheV87Ci0KLSAgR1RFU1RfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
XyhUZXN0UGFydFJlc3VsdEFycmF5KTsKLX07Ci0KLS8vIFRoaXMgaW50ZXJmYWNlIGtub3dzIGhv
dyB0byByZXBvcnQgYSB0ZXN0IHBhcnQgcmVzdWx0LgotY2xhc3MgVGVzdFBhcnRSZXN1bHRSZXBv
cnRlckludGVyZmFjZSB7Ci0gcHVibGljOgotICB2aXJ0dWFsIH5UZXN0UGFydFJlc3VsdFJlcG9y
dGVySW50ZXJmYWNlKCkge30KLQotICB2aXJ0dWFsIHZvaWQgUmVwb3J0VGVzdFBhcnRSZXN1bHQo
Y29uc3QgVGVzdFBhcnRSZXN1bHQmIHJlc3VsdCkgPSAwOwotfTsKLQotbmFtZXNwYWNlIGludGVy
bmFsIHsKLQotLy8gVGhpcyBoZWxwZXIgY2xhc3MgaXMgdXNlZCBieSB7QVNTRVJUfEVYUEVDVH1f
Tk9fRkFUQUxfRkFJTFVSRSB0byBjaGVjayBpZiBhCi0vLyBzdGF0ZW1lbnQgZ2VuZXJhdGVzIG5l
dyBmYXRhbCBmYWlsdXJlcy4gVG8gZG8gc28gaXQgcmVnaXN0ZXJzIGl0c2VsZiBhcyB0aGUKLS8v
IGN1cnJlbnQgdGVzdCBwYXJ0IHJlc3VsdCByZXBvcnRlci4gQmVzaWRlcyBjaGVja2luZyBpZiBm
YXRhbCBmYWlsdXJlcyB3ZXJlCi0vLyByZXBvcnRlZCwgaXQgb25seSBkZWxlZ2F0ZXMgdGhlIHJl
cG9ydGluZyB0byB0aGUgZm9ybWVyIHJlc3VsdCByZXBvcnRlci4KLS8vIFRoZSBvcmlnaW5hbCBy
ZXN1bHQgcmVwb3J0ZXIgaXMgcmVzdG9yZWQgaW4gdGhlIGRlc3RydWN0b3IuCi0vLyBJTlRFUk5B
TCBJTVBMRU1FTlRBVElPTiAtIERPIE5PVCBVU0UgSU4gQSBVU0VSIFBST0dSQU0uCi1jbGFzcyBH
VEVTVF9BUElfIEhhc05ld0ZhdGFsRmFpbHVyZUhlbHBlcgotICAgIDogcHVibGljIFRlc3RQYXJ0
UmVzdWx0UmVwb3J0ZXJJbnRlcmZhY2UgewotIHB1YmxpYzoKLSAgSGFzTmV3RmF0YWxGYWlsdXJl
SGVscGVyKCk7Ci0gIHZpcnR1YWwgfkhhc05ld0ZhdGFsRmFpbHVyZUhlbHBlcigpOwotICB2aXJ0
dWFsIHZvaWQgUmVwb3J0VGVzdFBhcnRSZXN1bHQoY29uc3QgVGVzdFBhcnRSZXN1bHQmIHJlc3Vs
dCk7Ci0gIGJvb2wgaGFzX25ld19mYXRhbF9mYWlsdXJlKCkgY29uc3QgeyByZXR1cm4gaGFzX25l
d19mYXRhbF9mYWlsdXJlXzsgfQotIHByaXZhdGU6Ci0gIGJvb2wgaGFzX25ld19mYXRhbF9mYWls
dXJlXzsKLSAgVGVzdFBhcnRSZXN1bHRSZXBvcnRlckludGVyZmFjZSogb3JpZ2luYWxfcmVwb3J0
ZXJfOwotCi0gIEdURVNUX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTl8oSGFzTmV3RmF0YWxGYWls
dXJlSGVscGVyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotCi19ICAvLyBuYW1l
c3BhY2UgdGVzdGluZwotCi0jZW5kaWYgIC8vIEdURVNUX0lOQ0xVREVfR1RFU1RfR1RFU1RfVEVT
VF9QQVJUX0hfCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QtdHlwZWQtdGVzdC5oIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRl
L2d0ZXN0L2d0ZXN0LXR5cGVkLXRlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NWY2OWQ1Njc4ZWFmMzRhNjAwY2E0NWY4Y2Y5MzQwODMxNjJmYWZkMi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QtdHlwZWQtdGVz
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDA4IEdv
b2dsZSBJbmMuCi0vLyBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLy8KLS8vIEF1dGhvcjogd2FuQGdvb2dsZS5jb20gKFpo
YW55b25nIFdhbikKLQotI2lmbmRlZiBHVEVTVF9JTkNMVURFX0dURVNUX0dURVNUX1RZUEVEX1RF
U1RfSF8KLSNkZWZpbmUgR1RFU1RfSU5DTFVERV9HVEVTVF9HVEVTVF9UWVBFRF9URVNUX0hfCi0K
LS8vIFRoaXMgaGVhZGVyIGltcGxlbWVudHMgdHlwZWQgdGVzdHMgYW5kIHR5cGUtcGFyYW1ldGVy
aXplZCB0ZXN0cy4KLQotLy8gVHlwZWQgKGFrYSB0eXBlLWRyaXZlbikgdGVzdHMgcmVwZWF0IHRo
ZSBzYW1lIHRlc3QgZm9yIHR5cGVzIGluIGEKLS8vIGxpc3QuICBZb3UgbXVzdCBrbm93IHdoaWNo
IHR5cGVzIHlvdSB3YW50IHRvIHRlc3Qgd2l0aCB3aGVuIHdyaXRpbmcKLS8vIHR5cGVkIHRlc3Rz
LiBIZXJlJ3MgaG93IHlvdSBkbyBpdDoKLQotI2lmIDAKLQotLy8gRmlyc3QsIGRlZmluZSBhIGZp
eHR1cmUgY2xhc3MgdGVtcGxhdGUuICBJdCBzaG91bGQgYmUgcGFyYW1ldGVyaXplZAotLy8gYnkg
YSB0eXBlLiAgUmVtZW1iZXIgdG8gZGVyaXZlIGl0IGZyb20gdGVzdGluZzo6VGVzdC4KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgRm9vVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsK
LSBwdWJsaWM6Ci0gIC4uLgotICB0eXBlZGVmIHN0ZDo6bGlzdDxUPiBMaXN0OwotICBzdGF0aWMg
VCBzaGFyZWRfOwotICBUIHZhbHVlXzsKLX07Ci0KLS8vIE5leHQsIGFzc29jaWF0ZSBhIGxpc3Qg
b2YgdHlwZXMgd2l0aCB0aGUgdGVzdCBjYXNlLCB3aGljaCB3aWxsIGJlCi0vLyByZXBlYXRlZCBm
b3IgZWFjaCB0eXBlIGluIHRoZSBsaXN0LiAgVGhlIHR5cGVkZWYgaXMgbmVjZXNzYXJ5IGZvcgot
Ly8gdGhlIG1hY3JvIHRvIHBhcnNlIGNvcnJlY3RseS4KLXR5cGVkZWYgdGVzdGluZzo6VHlwZXM8
Y2hhciwgaW50LCB1bnNpZ25lZCBpbnQ+IE15VHlwZXM7Ci1UWVBFRF9URVNUX0NBU0UoRm9vVGVz
dCwgTXlUeXBlcyk7Ci0KLS8vIElmIHRoZSB0eXBlIGxpc3QgY29udGFpbnMgb25seSBvbmUgdHlw
ZSwgeW91IGNhbiB3cml0ZSB0aGF0IHR5cGUKLS8vIGRpcmVjdGx5IHdpdGhvdXQgVHlwZXM8Li4u
PjoKLS8vICAgVFlQRURfVEVTVF9DQVNFKEZvb1Rlc3QsIGludCk7Ci0KLS8vIFRoZW4sIHVzZSBU
WVBFRF9URVNUKCkgaW5zdGVhZCBvZiBURVNUX0YoKSB0byBkZWZpbmUgYXMgbWFueSB0eXBlZAot
Ly8gdGVzdHMgZm9yIHRoaXMgdGVzdCBjYXNlIGFzIHlvdSB3YW50LgotVFlQRURfVEVTVChGb29U
ZXN0LCBEb2VzQmxhaCkgewotICAvLyBJbnNpZGUgYSB0ZXN0LCByZWZlciB0byBUeXBlUGFyYW0g
dG8gZ2V0IHRoZSB0eXBlIHBhcmFtZXRlci4KLSAgLy8gU2luY2Ugd2UgYXJlIGluc2lkZSBhIGRl
cml2ZWQgY2xhc3MgdGVtcGxhdGUsIEMrKyByZXF1aXJlcyB1c2UgdG8KLSAgLy8gdmlzaXQgdGhl
IG1lbWJlcnMgb2YgRm9vVGVzdCB2aWEgJ3RoaXMnLgotICBUeXBlUGFyYW0gbiA9IHRoaXMtPnZh
bHVlXzsKLQotICAvLyBUbyB2aXNpdCBzdGF0aWMgbWVtYmVycyBvZiB0aGUgZml4dHVyZSwgYWRk
IHRoZSBUZXN0Rml4dHVyZTo6Ci0gIC8vIHByZWZpeC4KLSAgbiArPSBUZXN0Rml4dHVyZTo6c2hh
cmVkXzsKLQotICAvLyBUbyByZWZlciB0byB0eXBlZGVmcyBpbiB0aGUgZml4dHVyZSwgYWRkIHRo
ZSAidHlwZW5hbWUKLSAgLy8gVGVzdEZpeHR1cmU6OiIgcHJlZml4LgotICB0eXBlbmFtZSBUZXN0
Rml4dHVyZTo6TGlzdCB2YWx1ZXM7Ci0gIHZhbHVlcy5wdXNoX2JhY2sobik7Ci0gIC4uLgotfQot
Ci1UWVBFRF9URVNUKEZvb1Rlc3QsIEhhc1Byb3BlcnR5QSkgeyAuLi4gfQotCi0jZW5kaWYgIC8v
IDAKLQotLy8gVHlwZS1wYXJhbWV0ZXJpemVkIHRlc3RzIGFyZSBhYnN0cmFjdCB0ZXN0IHBhdHRl
cm5zIHBhcmFtZXRlcml6ZWQKLS8vIGJ5IGEgdHlwZS4gIENvbXBhcmVkIHdpdGggdHlwZWQgdGVz
dHMsIHR5cGUtcGFyYW1ldGVyaXplZCB0ZXN0cwotLy8gYWxsb3cgeW91IHRvIGRlZmluZSB0aGUg
dGVzdCBwYXR0ZXJuIHdpdGhvdXQga25vd2luZyB3aGF0IHRoZSB0eXBlCi0vLyBwYXJhbWV0ZXJz
IGFyZS4gIFRoZSBkZWZpbmVkIHBhdHRlcm4gY2FuIGJlIGluc3RhbnRpYXRlZCB3aXRoCi0vLyBk
aWZmZXJlbnQgdHlwZXMgYW55IG51bWJlciBvZiB0aW1lcywgaW4gYW55IG51bWJlciBvZiB0cmFu
c2xhdGlvbgotLy8gdW5pdHMuCi0vLwotLy8gSWYgeW91IGFyZSBkZXNpZ25pbmcgYW4gaW50ZXJm
YWNlIG9yIGNvbmNlcHQsIHlvdSBjYW4gZGVmaW5lIGEKLS8vIHN1aXRlIG9mIHR5cGUtcGFyYW1l
dGVyaXplZCB0ZXN0cyB0byB2ZXJpZnkgcHJvcGVydGllcyB0aGF0IGFueQotLy8gdmFsaWQgaW1w
bGVtZW50YXRpb24gb2YgdGhlIGludGVyZmFjZS9jb25jZXB0IHNob3VsZCBoYXZlLiAgVGhlbiwK
LS8vIGVhY2ggaW1wbGVtZW50YXRpb24gY2FuIGVhc2lseSBpbnN0YW50aWF0ZSB0aGUgdGVzdCBz
dWl0ZSB0byB2ZXJpZnkKLS8vIHRoYXQgaXQgY29uZm9ybXMgdG8gdGhlIHJlcXVpcmVtZW50cywg
d2l0aG91dCBoYXZpbmcgdG8gd3JpdGUKLS8vIHNpbWlsYXIgdGVzdHMgcmVwZWF0ZWRseS4gIEhl
cmUncyBhbiBleGFtcGxlOgotCi0jaWYgMAotCi0vLyBGaXJzdCwgZGVmaW5lIGEgZml4dHVyZSBj
bGFzcyB0ZW1wbGF0ZS4gIEl0IHNob3VsZCBiZSBwYXJhbWV0ZXJpemVkCi0vLyBieSBhIHR5cGUu
ICBSZW1lbWJlciB0byBkZXJpdmUgaXQgZnJvbSB0ZXN0aW5nOjpUZXN0LgotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci1jbGFzcyBGb29UZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotICAuLi4K
LX07Ci0KLS8vIE5leHQsIGRlY2xhcmUgdGhhdCB5b3Ugd2lsbCBkZWZpbmUgYSB0eXBlLXBhcmFt
ZXRlcml6ZWQgdGVzdCBjYXNlCi0vLyAodGhlIF9QIHN1ZmZpeCBpcyBmb3IgInBhcmFtZXRlcml6
ZWQiIG9yICJwYXR0ZXJuIiwgd2hpY2hldmVyIHlvdQotLy8gcHJlZmVyKToKLVRZUEVEX1RFU1Rf
Q0FTRV9QKEZvb1Rlc3QpOwotCi0vLyBUaGVuLCB1c2UgVFlQRURfVEVTVF9QKCkgdG8gZGVmaW5l
IGFzIG1hbnkgdHlwZS1wYXJhbWV0ZXJpemVkIHRlc3RzCi0vLyBmb3IgdGhpcyB0eXBlLXBhcmFt
ZXRlcml6ZWQgdGVzdCBjYXNlIGFzIHlvdSB3YW50LgotVFlQRURfVEVTVF9QKEZvb1Rlc3QsIERv
ZXNCbGFoKSB7Ci0gIC8vIEluc2lkZSBhIHRlc3QsIHJlZmVyIHRvIFR5cGVQYXJhbSB0byBnZXQg
dGhlIHR5cGUgcGFyYW1ldGVyLgotICBUeXBlUGFyYW0gbiA9IDA7Ci0gIC4uLgotfQotCi1UWVBF
RF9URVNUX1AoRm9vVGVzdCwgSGFzUHJvcGVydHlBKSB7IC4uLiB9Ci0KLS8vIE5vdyB0aGUgdHJp
Y2t5IHBhcnQ6IHlvdSBuZWVkIHRvIHJlZ2lzdGVyIGFsbCB0ZXN0IHBhdHRlcm5zIGJlZm9yZQot
Ly8geW91IGNhbiBpbnN0YW50aWF0ZSB0aGVtLiAgVGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZSBt
YWNybyBpcyB0aGUKLS8vIHRlc3QgY2FzZSBuYW1lOyB0aGUgcmVzdCBhcmUgdGhlIG5hbWVzIG9m
IHRoZSB0ZXN0cyBpbiB0aGlzIHRlc3QKLS8vIGNhc2UuCi1SRUdJU1RFUl9UWVBFRF9URVNUX0NB
U0VfUChGb29UZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9lc0JsYWgsIEhhc1By
b3BlcnR5QSk7Ci0KLS8vIEZpbmFsbHksIHlvdSBhcmUgZnJlZSB0byBpbnN0YW50aWF0ZSB0aGUg
cGF0dGVybiB3aXRoIHRoZSB0eXBlcyB5b3UKLS8vIHdhbnQuICBJZiB5b3UgcHV0IHRoZSBhYm92
ZSBjb2RlIGluIGEgaGVhZGVyIGZpbGUsIHlvdSBjYW4gI2luY2x1ZGUKLS8vIGl0IGluIG11bHRp
cGxlIEMrKyBzb3VyY2UgZmlsZXMgYW5kIGluc3RhbnRpYXRlIGl0IG11bHRpcGxlIHRpbWVzLgot
Ly8KLS8vIFRvIGRpc3Rpbmd1aXNoIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgdGhlIHBhdHRlcm4s
IHRoZSBmaXJzdAotLy8gYXJndW1lbnQgdG8gdGhlIElOU1RBTlRJQVRFXyogbWFjcm8gaXMgYSBw
cmVmaXggdGhhdCB3aWxsIGJlIGFkZGVkCi0vLyB0byB0aGUgYWN0dWFsIHRlc3QgY2FzZSBuYW1l
LiAgUmVtZW1iZXIgdG8gcGljayB1bmlxdWUgcHJlZml4ZXMgZm9yCi0vLyBkaWZmZXJlbnQgaW5z
dGFuY2VzLgotdHlwZWRlZiB0ZXN0aW5nOjpUeXBlczxjaGFyLCBpbnQsIHVuc2lnbmVkIGludD4g
TXlUeXBlczsKLUlOU1RBTlRJQVRFX1RZUEVEX1RFU1RfQ0FTRV9QKE15LCBGb29UZXN0LCBNeVR5
cGVzKTsKLQotLy8gSWYgdGhlIHR5cGUgbGlzdCBjb250YWlucyBvbmx5IG9uZSB0eXBlLCB5b3Ug
Y2FuIHdyaXRlIHRoYXQgdHlwZQotLy8gZGlyZWN0bHkgd2l0aG91dCBUeXBlczwuLi4+OgotLy8g
ICBJTlNUQU5USUFURV9UWVBFRF9URVNUX0NBU0VfUChNeSwgRm9vVGVzdCwgaW50KTsKLQotI2Vu
ZGlmICAvLyAwCi0KLSNpbmNsdWRlICJndGVzdC9pbnRlcm5hbC9ndGVzdC1wb3J0LmgiCi0jaW5j
bHVkZSAiZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtdHlwZS11dGlsLmgiCi0KLS8vIEltcGxlbWVudHMg
dHlwZWQgdGVzdHMuCi0KLSNpZiBHVEVTVF9IQVNfVFlQRURfVEVTVAotCi0vLyBJTlRFUk5BTCBJ
TVBMRU1FTlRBVElPTiAtIERPIE5PVCBVU0UgSU4gVVNFUiBDT0RFLgotLy8KLS8vIEV4cGFuZHMg
dG8gdGhlIG5hbWUgb2YgdGhlIHR5cGVkZWYgZm9yIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhl
Ci0vLyBnaXZlbiB0ZXN0IGNhc2UuCi0jIGRlZmluZSBHVEVTVF9UWVBFX1BBUkFNU18oVGVzdENh
c2VOYW1lKSBndGVzdF90eXBlX3BhcmFtc18jI1Rlc3RDYXNlTmFtZSMjXwotCi0vLyBUaGUgJ1R5
cGVzJyB0ZW1wbGF0ZSBhcmd1bWVudCBiZWxvdyBtdXN0IGhhdmUgc3BhY2VzIGFyb3VuZCBpdAot
Ly8gc2luY2Ugc29tZSBjb21waWxlcnMgbWF5IGNob2tlIG9uICc+Picgd2hlbiBwYXNzaW5nIGEg
dGVtcGxhdGUKLS8vIGluc3RhbmNlIChlLmcuIFR5cGVzPGludD4pCi0jIGRlZmluZSBUWVBFRF9U
RVNUX0NBU0UoQ2FzZU5hbWUsIFR5cGVzKSBcCi0gIHR5cGVkZWYgOjp0ZXN0aW5nOjppbnRlcm5h
bDo6VHlwZUxpc3Q8IFR5cGVzID46OnR5cGUgXAotICAgICAgR1RFU1RfVFlQRV9QQVJBTVNfKENh
c2VOYW1lKQotCi0jIGRlZmluZSBUWVBFRF9URVNUKENhc2VOYW1lLCBUZXN0TmFtZSkgXAotICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgZ3Rlc3RfVHlwZVBhcmFtXz4gXAotICBjbGFzcyBHVEVTVF9URVNU
X0NMQVNTX05BTUVfKENhc2VOYW1lLCBUZXN0TmFtZSkgXAotICAgICAgOiBwdWJsaWMgQ2FzZU5h
bWU8Z3Rlc3RfVHlwZVBhcmFtXz4geyBcCi0gICBwcml2YXRlOiBcCi0gICAgdHlwZWRlZiBDYXNl
TmFtZTxndGVzdF9UeXBlUGFyYW1fPiBUZXN0Rml4dHVyZTsgXAotICAgIHR5cGVkZWYgZ3Rlc3Rf
VHlwZVBhcmFtXyBUeXBlUGFyYW07IFwKLSAgICB2aXJ0dWFsIHZvaWQgVGVzdEJvZHkoKTsgXAot
ICB9OyBcCi0gIGJvb2wgZ3Rlc3RfIyNDYXNlTmFtZSMjXyMjVGVzdE5hbWUjI19yZWdpc3RlcmVk
XyBHVEVTVF9BVFRSSUJVVEVfVU5VU0VEXyA9IFwKLSAgICAgIDo6dGVzdGluZzo6aW50ZXJuYWw6
OlR5cGVQYXJhbWV0ZXJpemVkVGVzdDwgXAotICAgICAgICAgIENhc2VOYW1lLCBcCi0gICAgICAg
ICAgOjp0ZXN0aW5nOjppbnRlcm5hbDo6VGVtcGxhdGVTZWw8IFwKLSAgICAgICAgICAgICAgR1RF
U1RfVEVTVF9DTEFTU19OQU1FXyhDYXNlTmFtZSwgVGVzdE5hbWUpPiwgXAotICAgICAgICAgIEdU
RVNUX1RZUEVfUEFSQU1TXyhDYXNlTmFtZSk+OjpSZWdpc3RlcihcCi0gICAgICAgICAgICAgICIi
LCA6OnRlc3Rpbmc6OmludGVybmFsOjpDb2RlTG9jYXRpb24oX19GSUxFX18sIF9fTElORV9fKSwg
XAotICAgICAgICAgICAgICAjQ2FzZU5hbWUsICNUZXN0TmFtZSwgMCk7IFwKLSAgdGVtcGxhdGUg
PHR5cGVuYW1lIGd0ZXN0X1R5cGVQYXJhbV8+IFwKLSAgdm9pZCBHVEVTVF9URVNUX0NMQVNTX05B
TUVfKENhc2VOYW1lLCBUZXN0TmFtZSk8Z3Rlc3RfVHlwZVBhcmFtXz46OlRlc3RCb2R5KCkKLQot
I2VuZGlmICAvLyBHVEVTVF9IQVNfVFlQRURfVEVTVAotCi0vLyBJbXBsZW1lbnRzIHR5cGUtcGFy
YW1ldGVyaXplZCB0ZXN0cy4KLQotI2lmIEdURVNUX0hBU19UWVBFRF9URVNUX1AKLQotLy8gSU5U
RVJOQUwgSU1QTEVNRU5UQVRJT04gLSBETyBOT1QgVVNFIElOIFVTRVIgQ09ERS4KLS8vCi0vLyBF
eHBhbmRzIHRvIHRoZSBuYW1lc3BhY2UgbmFtZSB0aGF0IHRoZSB0eXBlLXBhcmFtZXRlcml6ZWQg
dGVzdHMgZm9yCi0vLyB0aGUgZ2l2ZW4gdHlwZS1wYXJhbWV0ZXJpemVkIHRlc3QgY2FzZSBhcmUg
ZGVmaW5lZCBpbi4gIFRoZSBleGFjdAotLy8gbmFtZSBvZiB0aGUgbmFtZXNwYWNlIGlzIHN1Ympl
Y3QgdG8gY2hhbmdlIHdpdGhvdXQgbm90aWNlLgotIyBkZWZpbmUgR1RFU1RfQ0FTRV9OQU1FU1BB
Q0VfKFRlc3RDYXNlTmFtZSkgXAotICBndGVzdF9jYXNlXyMjVGVzdENhc2VOYW1lIyNfCi0KLS8v
IElOVEVSTkFMIElNUExFTUVOVEFUSU9OIC0gRE8gTk9UIFVTRSBJTiBVU0VSIENPREUuCi0vLwot
Ly8gRXhwYW5kcyB0byB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdXNlZCB0byByZW1lbWJlciB0
aGUgbmFtZXMgb2YKLS8vIHRoZSBkZWZpbmVkIHRlc3RzIGluIHRoZSBnaXZlbiB0ZXN0IGNhc2Uu
Ci0jIGRlZmluZSBHVEVTVF9UWVBFRF9URVNUX0NBU0VfUF9TVEFURV8oVGVzdENhc2VOYW1lKSBc
Ci0gIGd0ZXN0X3R5cGVkX3Rlc3RfY2FzZV9wX3N0YXRlXyMjVGVzdENhc2VOYW1lIyNfCi0KLS8v
IElOVEVSTkFMIElNUExFTUVOVEFUSU9OIC0gRE8gTk9UIFVTRSBJTiBVU0VSIENPREUgRElSRUNU
TFkuCi0vLwotLy8gRXhwYW5kcyB0byB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdXNlZCB0byBy
ZW1lbWJlciB0aGUgbmFtZXMgb2YKLS8vIHRoZSByZWdpc3RlcmVkIHRlc3RzIGluIHRoZSBnaXZl
biB0ZXN0IGNhc2UuCi0jIGRlZmluZSBHVEVTVF9SRUdJU1RFUkVEX1RFU1RfTkFNRVNfKFRlc3RD
YXNlTmFtZSkgXAotICBndGVzdF9yZWdpc3RlcmVkX3Rlc3RfbmFtZXNfIyNUZXN0Q2FzZU5hbWUj
I18KLQotLy8gVGhlIHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSB0eXBlLXBhcmFtZXRlcml6ZWQg
dGVzdCBtYWNyb3MgYXJlCi0vLyBzdGF0aWMgYXMgdHlwaWNhbGx5IHRoZXNlIG1hY3JvcyBhcmUg
dXNlZCBpbiBhIC5oIGZpbGUgdGhhdCBjYW4gYmUKLS8vICNpbmNsdWRlZCBpbiBtdWx0aXBsZSB0
cmFuc2xhdGlvbiB1bml0cyBsaW5rZWQgdG9nZXRoZXIuCi0jIGRlZmluZSBUWVBFRF9URVNUX0NB
U0VfUChDYXNlTmFtZSkgXAotICBzdGF0aWMgOjp0ZXN0aW5nOjppbnRlcm5hbDo6VHlwZWRUZXN0
Q2FzZVBTdGF0ZSBcCi0gICAgICBHVEVTVF9UWVBFRF9URVNUX0NBU0VfUF9TVEFURV8oQ2FzZU5h
bWUpCi0KLSMgZGVmaW5lIFRZUEVEX1RFU1RfUChDYXNlTmFtZSwgVGVzdE5hbWUpIFwKLSAgbmFt
ZXNwYWNlIEdURVNUX0NBU0VfTkFNRVNQQUNFXyhDYXNlTmFtZSkgeyBcCi0gIHRlbXBsYXRlIDx0
eXBlbmFtZSBndGVzdF9UeXBlUGFyYW1fPiBcCi0gIGNsYXNzIFRlc3ROYW1lIDogcHVibGljIENh
c2VOYW1lPGd0ZXN0X1R5cGVQYXJhbV8+IHsgXAotICAgcHJpdmF0ZTogXAotICAgIHR5cGVkZWYg
Q2FzZU5hbWU8Z3Rlc3RfVHlwZVBhcmFtXz4gVGVzdEZpeHR1cmU7IFwKLSAgICB0eXBlZGVmIGd0
ZXN0X1R5cGVQYXJhbV8gVHlwZVBhcmFtOyBcCi0gICAgdmlydHVhbCB2b2lkIFRlc3RCb2R5KCk7
IFwKLSAgfTsgXAotICBzdGF0aWMgYm9vbCBndGVzdF8jI1Rlc3ROYW1lIyNfZGVmaW5lZF8gR1RF
U1RfQVRUUklCVVRFX1VOVVNFRF8gPSBcCi0gICAgICBHVEVTVF9UWVBFRF9URVNUX0NBU0VfUF9T
VEFURV8oQ2FzZU5hbWUpLkFkZFRlc3ROYW1lKFwKLSAgICAgICAgICBfX0ZJTEVfXywgX19MSU5F
X18sICNDYXNlTmFtZSwgI1Rlc3ROYW1lKTsgXAotICB9IFwKLSAgdGVtcGxhdGUgPHR5cGVuYW1l
IGd0ZXN0X1R5cGVQYXJhbV8+IFwKLSAgdm9pZCBHVEVTVF9DQVNFX05BTUVTUEFDRV8oQ2FzZU5h
bWUpOjpUZXN0TmFtZTxndGVzdF9UeXBlUGFyYW1fPjo6VGVzdEJvZHkoKQotCi0jIGRlZmluZSBS
RUdJU1RFUl9UWVBFRF9URVNUX0NBU0VfUChDYXNlTmFtZSwgLi4uKSBcCi0gIG5hbWVzcGFjZSBH
VEVTVF9DQVNFX05BTUVTUEFDRV8oQ2FzZU5hbWUpIHsgXAotICB0eXBlZGVmIDo6dGVzdGluZzo6
aW50ZXJuYWw6OlRlbXBsYXRlczxfX1ZBX0FSR1NfXz46OnR5cGUgZ3Rlc3RfQWxsVGVzdHNfOyBc
Ci0gIH0gXAotICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgR1RFU1RfUkVHSVNURVJFRF9URVNU
X05BTUVTXyhDYXNlTmFtZSkgPSBcCi0gICAgICBHVEVTVF9UWVBFRF9URVNUX0NBU0VfUF9TVEFU
RV8oQ2FzZU5hbWUpLlZlcmlmeVJlZ2lzdGVyZWRUZXN0TmFtZXMoXAotICAgICAgICAgIF9fRklM
RV9fLCBfX0xJTkVfXywgI19fVkFfQVJHU19fKQotCi0vLyBUaGUgJ1R5cGVzJyB0ZW1wbGF0ZSBh
cmd1bWVudCBiZWxvdyBtdXN0IGhhdmUgc3BhY2VzIGFyb3VuZCBpdAotLy8gc2luY2Ugc29tZSBj
b21waWxlcnMgbWF5IGNob2tlIG9uICc+Picgd2hlbiBwYXNzaW5nIGEgdGVtcGxhdGUKLS8vIGlu
c3RhbmNlIChlLmcuIFR5cGVzPGludD4pCi0jIGRlZmluZSBJTlNUQU5USUFURV9UWVBFRF9URVNU
X0NBU0VfUChQcmVmaXgsIENhc2VOYW1lLCBUeXBlcykgXAotICBib29sIGd0ZXN0XyMjUHJlZml4
IyNfIyNDYXNlTmFtZSBHVEVTVF9BVFRSSUJVVEVfVU5VU0VEXyA9IFwKLSAgICAgIDo6dGVzdGlu
Zzo6aW50ZXJuYWw6OlR5cGVQYXJhbWV0ZXJpemVkVGVzdENhc2U8Q2FzZU5hbWUsIFwKLSAgICAg
ICAgICBHVEVTVF9DQVNFX05BTUVTUEFDRV8oQ2FzZU5hbWUpOjpndGVzdF9BbGxUZXN0c18sIFwK
LSAgICAgICAgICA6OnRlc3Rpbmc6OmludGVybmFsOjpUeXBlTGlzdDwgVHlwZXMgPjo6dHlwZT46
OlJlZ2lzdGVyKFwKLSAgICAgICAgICAgICAgI1ByZWZpeCwgXAotICAgICAgICAgICAgICA6OnRl
c3Rpbmc6OmludGVybmFsOjpDb2RlTG9jYXRpb24oX19GSUxFX18sIF9fTElORV9fKSwgXAotICAg
ICAgICAgICAgICAmR1RFU1RfVFlQRURfVEVTVF9DQVNFX1BfU1RBVEVfKENhc2VOYW1lKSwgXAot
ICAgICAgICAgICAgICAjQ2FzZU5hbWUsIEdURVNUX1JFR0lTVEVSRURfVEVTVF9OQU1FU18oQ2Fz
ZU5hbWUpKQotCi0jZW5kaWYgIC8vIEdURVNUX0hBU19UWVBFRF9URVNUX1AKLQotI2VuZGlmICAv
LyBHVEVTVF9JTkNMVURFX0dURVNUX0dURVNUX1RZUEVEX1RFU1RfSF8KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVk
ZS9ndGVzdC9ndGVzdC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rl
c3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDJmMTRlZDIzZGQ4ZDhiZGQxYzM5ZmQ1NmUwYmI0ZmQxMzQ4MzQ5ZTAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDA1LCBH
b29nbGUgSW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLS8vCi0vLyBBdXRob3I6IHdhbkBnb29nbGUuY29tICha
aGFueW9uZyBXYW4pCi0vLwotLy8gVGhlIEdvb2dsZSBDKysgVGVzdGluZyBGcmFtZXdvcmsgKEdv
b2dsZSBUZXN0KQotLy8KLS8vIFRoaXMgaGVhZGVyIGZpbGUgZGVmaW5lcyB0aGUgcHVibGljIEFQ
SSBmb3IgR29vZ2xlIFRlc3QuICBJdCBzaG91bGQgYmUKLS8vIGluY2x1ZGVkIGJ5IGFueSB0ZXN0
IHByb2dyYW0gdGhhdCB1c2VzIEdvb2dsZSBUZXN0LgotLy8KLS8vIElNUE9SVEFOVCBOT1RFOiBE
dWUgdG8gbGltaXRhdGlvbiBvZiB0aGUgQysrIGxhbmd1YWdlLCB3ZSBoYXZlIHRvCi0vLyBsZWF2
ZSBzb21lIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgaW4gdGhpcyBoZWFkZXIgZmls
ZS4KLS8vIFRoZXkgYXJlIGNsZWFybHkgbWFya2VkIGJ5IGNvbW1lbnRzIGxpa2UgdGhpczoKLS8v
Ci0vLyAgIC8vIElOVEVSTkFMIElNUExFTUVOVEFUSU9OIC0gRE8gTk9UIFVTRSBJTiBBIFVTRVIg
UFJPR1JBTS4KLS8vCi0vLyBTdWNoIGNvZGUgaXMgTk9UIG1lYW50IHRvIGJlIHVzZWQgYnkgYSB1
c2VyIGRpcmVjdGx5LCBhbmQgaXMgc3ViamVjdAotLy8gdG8gQ0hBTkdFIFdJVEhPVVQgTk9USUNF
LiAgVGhlcmVmb3JlIERPIE5PVCBERVBFTkQgT04gSVQgaW4gYSB1c2VyCi0vLyBwcm9ncmFtIQot
Ly8KLS8vIEFja25vd2xlZGdtZW50OiBHb29nbGUgVGVzdCBib3Jyb3dlZCB0aGUgaWRlYSBvZiBh
dXRvbWF0aWMgdGVzdAotLy8gcmVnaXN0cmF0aW9uIGZyb20gQmFydGhlbGVteSBEYWdlbmFpcycg
KGJhcnRoZWxlbXlAcHJvbG9naXF1ZS5jb20pCi0vLyBlYXN5VW5pdCBmcmFtZXdvcmsuCi0KLSNp
Zm5kZWYgR1RFU1RfSU5DTFVERV9HVEVTVF9HVEVTVF9IXwotI2RlZmluZSBHVEVTVF9JTkNMVURF
X0dURVNUX0dURVNUX0hfCi0KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8b3N0cmVhbT4K
LSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJndGVzdC9pbnRlcm5hbC9ndGVzdC1pbnRl
cm5hbC5oIgotI2luY2x1ZGUgImd0ZXN0L2ludGVybmFsL2d0ZXN0LXN0cmluZy5oIgotI2luY2x1
ZGUgImd0ZXN0L2d0ZXN0LWRlYXRoLXRlc3QuaCIKLSNpbmNsdWRlICJndGVzdC9ndGVzdC1tZXNz
YWdlLmgiCi0jaW5jbHVkZSAiZ3Rlc3QvZ3Rlc3QtcGFyYW0tdGVzdC5oIgotI2luY2x1ZGUgImd0
ZXN0L2d0ZXN0LXByaW50ZXJzLmgiCi0jaW5jbHVkZSAiZ3Rlc3QvZ3Rlc3RfcHJvZC5oIgotI2lu
Y2x1ZGUgImd0ZXN0L2d0ZXN0LXRlc3QtcGFydC5oIgotI2luY2x1ZGUgImd0ZXN0L2d0ZXN0LXR5
cGVkLXRlc3QuaCIKLQotLy8gRGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSwgZGlmZmVyZW50IHN0
cmluZyBjbGFzc2VzIGFyZSBhdmFpbGFibGUuCi0vLyBPbiBMaW51eCwgaW4gYWRkaXRpb24gdG8g
OjpzdGQ6OnN0cmluZywgR29vZ2xlIGFsc28gbWFrZXMgdXNlIG9mCi0vLyBjbGFzcyA6OnN0cmlu
Zywgd2hpY2ggaGFzIHRoZSBzYW1lIGludGVyZmFjZSBhcyA6OnN0ZDo6c3RyaW5nLCBidXQKLS8v
IGhhcyBhIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbi4KLS8vCi0vLyBZb3UgY2FuIGRlZmluZSBH
VEVTVF9IQVNfR0xPQkFMX1NUUklORyB0byAxIHRvIGluZGljYXRlIHRoYXQKLS8vIDo6c3RyaW5n
IGlzIGF2YWlsYWJsZSBBTkQgaXMgYSBkaXN0aW5jdCB0eXBlIHRvIDo6c3RkOjpzdHJpbmcsIG9y
Ci0vLyBkZWZpbmUgaXQgdG8gMCB0byBpbmRpY2F0ZSBvdGhlcndpc2UuCi0vLwotLy8gSWYgOjpz
dGQ6OnN0cmluZyBhbmQgOjpzdHJpbmcgYXJlIHRoZSBzYW1lIGNsYXNzIG9uIHlvdXIgcGxhdGZv
cm0KLS8vIGR1ZSB0byBhbGlhc2luZywgeW91IHNob3VsZCBkZWZpbmUgR1RFU1RfSEFTX0dMT0JB
TF9TVFJJTkcgdG8gMC4KLS8vCi0vLyBJZiB5b3UgZG8gbm90IGRlZmluZSBHVEVTVF9IQVNfR0xP
QkFMX1NUUklORywgaXQgaXMgZGVmaW5lZAotLy8gaGV1cmlzdGljYWxseS4KLQotbmFtZXNwYWNl
IHRlc3RpbmcgewotCi0vLyBEZWNsYXJlcyB0aGUgZmxhZ3MuCi0KLS8vIFRoaXMgZmxhZyB0ZW1w
b3JhcnkgZW5hYmxlcyB0aGUgZGlzYWJsZWQgdGVzdHMuCi1HVEVTVF9ERUNMQVJFX2Jvb2xfKGFs
c29fcnVuX2Rpc2FibGVkX3Rlc3RzKTsKLQotLy8gVGhpcyBmbGFnIGJyaW5ncyB0aGUgZGVidWdn
ZXIgb24gYW4gYXNzZXJ0aW9uIGZhaWx1cmUuCi1HVEVTVF9ERUNMQVJFX2Jvb2xfKGJyZWFrX29u
X2ZhaWx1cmUpOwotCi0vLyBUaGlzIGZsYWcgY29udHJvbHMgd2hldGhlciBHb29nbGUgVGVzdCBj
YXRjaGVzIGFsbCB0ZXN0LXRocm93biBleGNlcHRpb25zCi0vLyBhbmQgbG9ncyB0aGVtIGFzIGZh
aWx1cmVzLgotR1RFU1RfREVDTEFSRV9ib29sXyhjYXRjaF9leGNlcHRpb25zKTsKLQotLy8gVGhp
cyBmbGFnIGVuYWJsZXMgdXNpbmcgY29sb3JzIGluIHRlcm1pbmFsIG91dHB1dC4gQXZhaWxhYmxl
IHZhbHVlcyBhcmUKLS8vICJ5ZXMiIHRvIGVuYWJsZSBjb2xvcnMsICJubyIgKGRpc2FibGUgY29s
b3JzKSwgb3IgImF1dG8iICh0aGUgZGVmYXVsdCkKLS8vIHRvIGxldCBHb29nbGUgVGVzdCBkZWNp
ZGUuCi1HVEVTVF9ERUNMQVJFX3N0cmluZ18oY29sb3IpOwotCi0vLyBUaGlzIGZsYWcgc2V0cyB1
cCB0aGUgZmlsdGVyIHRvIHNlbGVjdCBieSBuYW1lIHVzaW5nIGEgZ2xvYiBwYXR0ZXJuCi0vLyB0
aGUgdGVzdHMgdG8gcnVuLiBJZiB0aGUgZmlsdGVyIGlzIG5vdCBnaXZlbiBhbGwgdGVzdHMgYXJl
IGV4ZWN1dGVkLgotR1RFU1RfREVDTEFSRV9zdHJpbmdfKGZpbHRlcik7Ci0KLS8vIFRoaXMgZmxh
ZyBjYXVzZXMgdGhlIEdvb2dsZSBUZXN0IHRvIGxpc3QgdGVzdHMuIE5vbmUgb2YgdGhlIHRlc3Rz
IGxpc3RlZAotLy8gYXJlIGFjdHVhbGx5IHJ1biBpZiB0aGUgZmxhZyBpcyBwcm92aWRlZC4KLUdU
RVNUX0RFQ0xBUkVfYm9vbF8obGlzdF90ZXN0cyk7Ci0KLS8vIFRoaXMgZmxhZyBjb250cm9scyB3
aGV0aGVyIEdvb2dsZSBUZXN0IGVtaXRzIGEgZGV0YWlsZWQgWE1MIHJlcG9ydCB0byBhIGZpbGUK
LS8vIGluIGFkZGl0aW9uIHRvIGl0cyBub3JtYWwgdGV4dHVhbCBvdXRwdXQuCi1HVEVTVF9ERUNM
QVJFX3N0cmluZ18ob3V0cHV0KTsKLQotLy8gVGhpcyBmbGFncyBjb250cm9sIHdoZXRoZXIgR29v
Z2xlIFRlc3QgcHJpbnRzIHRoZSBlbGFwc2VkIHRpbWUgZm9yIGVhY2gKLS8vIHRlc3QuCi1HVEVT
VF9ERUNMQVJFX2Jvb2xfKHByaW50X3RpbWUpOwotCi0vLyBUaGlzIGZsYWcgc3BlY2lmaWVzIHRo
ZSByYW5kb20gbnVtYmVyIHNlZWQuCi1HVEVTVF9ERUNMQVJFX2ludDMyXyhyYW5kb21fc2VlZCk7
Ci0KLS8vIFRoaXMgZmxhZyBzZXRzIGhvdyBtYW55IHRpbWVzIHRoZSB0ZXN0cyBhcmUgcmVwZWF0
ZWQuIFRoZSBkZWZhdWx0IHZhbHVlCi0vLyBpcyAxLiBJZiB0aGUgdmFsdWUgaXMgLTEgdGhlIHRl
c3RzIGFyZSByZXBlYXRpbmcgZm9yZXZlci4KLUdURVNUX0RFQ0xBUkVfaW50MzJfKHJlcGVhdCk7
Ci0KLS8vIFRoaXMgZmxhZyBjb250cm9scyB3aGV0aGVyIEdvb2dsZSBUZXN0IGluY2x1ZGVzIEdv
b2dsZSBUZXN0IGludGVybmFsCi0vLyBzdGFjayBmcmFtZXMgaW4gZmFpbHVyZSBzdGFjayB0cmFj
ZXMuCi1HVEVTVF9ERUNMQVJFX2Jvb2xfKHNob3dfaW50ZXJuYWxfc3RhY2tfZnJhbWVzKTsKLQot
Ly8gV2hlbiB0aGlzIGZsYWcgaXMgc3BlY2lmaWVkLCB0ZXN0cycgb3JkZXIgaXMgcmFuZG9taXpl
ZCBvbiBldmVyeSBpdGVyYXRpb24uCi1HVEVTVF9ERUNMQVJFX2Jvb2xfKHNodWZmbGUpOwotCi0v
LyBUaGlzIGZsYWcgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzdGFjayBmcmFtZXMg
dG8gYmUKLS8vIHByaW50ZWQgaW4gYSBmYWlsdXJlIG1lc3NhZ2UuCi1HVEVTVF9ERUNMQVJFX2lu
dDMyXyhzdGFja190cmFjZV9kZXB0aCk7Ci0KLS8vIFdoZW4gdGhpcyBmbGFnIGlzIHNwZWNpZmll
ZCwgYSBmYWlsZWQgYXNzZXJ0aW9uIHdpbGwgdGhyb3cgYW4KLS8vIGV4Y2VwdGlvbiBpZiBleGNl
cHRpb25zIGFyZSBlbmFibGVkLCBvciBleGl0IHRoZSBwcm9ncmFtIHdpdGggYQotLy8gbm9uLXpl
cm8gY29kZSBvdGhlcndpc2UuCi1HVEVTVF9ERUNMQVJFX2Jvb2xfKHRocm93X29uX2ZhaWx1cmUp
OwotCi0vLyBXaGVuIHRoaXMgZmxhZyBpcyBzZXQgd2l0aCBhICJob3N0OnBvcnQiIHN0cmluZywg
b24gc3VwcG9ydGVkCi0vLyBwbGF0Zm9ybXMgdGVzdCByZXN1bHRzIGFyZSBzdHJlYW1lZCB0byB0
aGUgc3BlY2lmaWVkIHBvcnQgb24KLS8vIHRoZSBzcGVjaWZpZWQgaG9zdCBtYWNoaW5lLgotR1RF
U1RfREVDTEFSRV9zdHJpbmdfKHN0cmVhbV9yZXN1bHRfdG8pOwotCi0vLyBUaGUgdXBwZXIgbGlt
aXQgZm9yIHZhbGlkIHN0YWNrIHRyYWNlIGRlcHRocy4KLWNvbnN0IGludCBrTWF4U3RhY2tUcmFj
ZURlcHRoID0gMTAwOwotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi1jbGFzcyBBc3NlcnRIZWxw
ZXI7Ci1jbGFzcyBEZWZhdWx0R2xvYmFsVGVzdFBhcnRSZXN1bHRSZXBvcnRlcjsKLWNsYXNzIEV4
ZWNEZWF0aFRlc3Q7Ci1jbGFzcyBOb0V4ZWNEZWF0aFRlc3Q7Ci1jbGFzcyBGaW5hbFN1Y2Nlc3ND
aGVja2VyOwotY2xhc3MgR1Rlc3RGbGFnU2F2ZXI7Ci1jbGFzcyBTdHJlYW1pbmdMaXN0ZW5lclRl
c3Q7Ci1jbGFzcyBUZXN0UmVzdWx0QWNjZXNzb3I7Ci1jbGFzcyBUZXN0RXZlbnRMaXN0ZW5lcnNB
Y2Nlc3NvcjsKLWNsYXNzIFRlc3RFdmVudFJlcGVhdGVyOwotY2xhc3MgVW5pdFRlc3RSZWNvcmRQ
cm9wZXJ0eVRlc3RIZWxwZXI7Ci1jbGFzcyBXaW5kb3dzRGVhdGhUZXN0OwotY2xhc3MgVW5pdFRl
c3RJbXBsKiBHZXRVbml0VGVzdEltcGwoKTsKLXZvaWQgUmVwb3J0RmFpbHVyZUluVW5rbm93bkxv
Y2F0aW9uKFRlc3RQYXJ0UmVzdWx0OjpUeXBlIHJlc3VsdF90eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UpOwotCi19ICAv
LyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotLy8gVGhlIGZyaWVuZCByZWxhdGlvbnNoaXAgb2Ygc29t
ZSBvZiB0aGVzZSBjbGFzc2VzIGlzIGN5Y2xpYy4KLS8vIElmIHdlIGRvbid0IGZvcndhcmQgZGVj
bGFyZSB0aGVtIHRoZSBjb21waWxlciBtaWdodCBjb25mdXNlIHRoZSBjbGFzc2VzCi0vLyBpbiBm
cmllbmRzaGlwIGNsYXVzZXMgd2l0aCBzYW1lIG5hbWVkIGNsYXNzZXMgb24gdGhlIHNjb3BlLgot
Y2xhc3MgVGVzdDsKLWNsYXNzIFRlc3RDYXNlOwotY2xhc3MgVGVzdEluZm87Ci1jbGFzcyBVbml0
VGVzdDsKLQotLy8gQSBjbGFzcyBmb3IgaW5kaWNhdGluZyB3aGV0aGVyIGFuIGFzc2VydGlvbiB3
YXMgc3VjY2Vzc2Z1bC4gIFdoZW4KLS8vIHRoZSBhc3NlcnRpb24gd2Fzbid0IHN1Y2Nlc3NmdWws
IHRoZSBBc3NlcnRpb25SZXN1bHQgb2JqZWN0Ci0vLyByZW1lbWJlcnMgYSBub24tZW1wdHkgbWVz
c2FnZSB0aGF0IGRlc2NyaWJlcyBob3cgaXQgZmFpbGVkLgotLy8KLS8vIFRvIGNyZWF0ZSBhbiBp
bnN0YW5jZSBvZiB0aGlzIGNsYXNzLCB1c2Ugb25lIG9mIHRoZSBmYWN0b3J5IGZ1bmN0aW9ucwot
Ly8gKEFzc2VydGlvblN1Y2Nlc3MoKSBhbmQgQXNzZXJ0aW9uRmFpbHVyZSgpKS4KLS8vCi0vLyBU
aGlzIGNsYXNzIGlzIHVzZWZ1bCBmb3IgdHdvIHB1cnBvc2VzOgotLy8gICAxLiBEZWZpbmluZyBw
cmVkaWNhdGUgZnVuY3Rpb25zIHRvIGJlIHVzZWQgd2l0aCBCb29sZWFuIHRlc3QgYXNzZXJ0aW9u
cwotLy8gICAgICBFWFBFQ1RfVFJVRS9FWFBFQ1RfRkFMU0UgYW5kIHRoZWlyIEFTU0VSVF8gY291
bnRlcnBhcnRzCi0vLyAgIDIuIERlZmluaW5nIHByZWRpY2F0ZS1mb3JtYXQgZnVuY3Rpb25zIHRv
IGJlCi0vLyAgICAgIHVzZWQgd2l0aCBwcmVkaWNhdGUgYXNzZXJ0aW9ucyAoQVNTRVJUX1BSRURf
Rk9STUFUKiwgZXRjKS4KLS8vCi0vLyBGb3IgZXhhbXBsZSwgaWYgeW91IGRlZmluZSBJc0V2ZW4g
cHJlZGljYXRlOgotLy8KLS8vICAgdGVzdGluZzo6QXNzZXJ0aW9uUmVzdWx0IElzRXZlbihpbnQg
bikgewotLy8gICAgIGlmICgobiAlIDIpID09IDApCi0vLyAgICAgICByZXR1cm4gdGVzdGluZzo6
QXNzZXJ0aW9uU3VjY2VzcygpOwotLy8gICAgIGVsc2UKLS8vICAgICAgIHJldHVybiB0ZXN0aW5n
OjpBc3NlcnRpb25GYWlsdXJlKCkgPDwgbiA8PCAiIGlzIG9kZCI7Ci0vLyAgIH0KLS8vCi0vLyBU
aGVuIHRoZSBmYWlsZWQgZXhwZWN0YXRpb24gRVhQRUNUX1RSVUUoSXNFdmVuKEZpYig1KSkpCi0v
LyB3aWxsIHByaW50IHRoZSBtZXNzYWdlCi0vLwotLy8gICBWYWx1ZSBvZjogSXNFdmVuKEZpYig1
KSkKLS8vICAgICBBY3R1YWw6IGZhbHNlICg1IGlzIG9kZCkKLS8vICAgRXhwZWN0ZWQ6IHRydWUK
LS8vCi0vLyBpbnN0ZWFkIG9mIGEgbW9yZSBvcGFxdWUKLS8vCi0vLyAgIFZhbHVlIG9mOiBJc0V2
ZW4oRmliKDUpKQotLy8gICAgIEFjdHVhbDogZmFsc2UKLS8vICAgRXhwZWN0ZWQ6IHRydWUKLS8v
Ci0vLyBpbiBjYXNlIElzRXZlbiBpcyBhIHNpbXBsZSBCb29sZWFuIHByZWRpY2F0ZS4KLS8vCi0v
LyBJZiB5b3UgZXhwZWN0IHlvdXIgcHJlZGljYXRlIHRvIGJlIHJldXNlZCBhbmQgd2FudCB0byBz
dXBwb3J0IGluZm9ybWF0aXZlCi0vLyBtZXNzYWdlcyBpbiBFWFBFQ1RfRkFMU0UgYW5kIEFTU0VS
VF9GQUxTRSAobmVnYXRpdmUgYXNzZXJ0aW9ucyBzaG93IHVwCi0vLyBhYm91dCBoYWxmIGFzIG9m
dGVuIGFzIHBvc2l0aXZlIG9uZXMgaW4gb3VyIHRlc3RzKSwgc3VwcGx5IG1lc3NhZ2VzIGZvcgot
Ly8gYm90aCBzdWNjZXNzIGFuZCBmYWlsdXJlIGNhc2VzOgotLy8KLS8vICAgdGVzdGluZzo6QXNz
ZXJ0aW9uUmVzdWx0IElzRXZlbihpbnQgbikgewotLy8gICAgIGlmICgobiAlIDIpID09IDApCi0v
LyAgICAgICByZXR1cm4gdGVzdGluZzo6QXNzZXJ0aW9uU3VjY2VzcygpIDw8IG4gPDwgIiBpcyBl
dmVuIjsKLS8vICAgICBlbHNlCi0vLyAgICAgICByZXR1cm4gdGVzdGluZzo6QXNzZXJ0aW9uRmFp
bHVyZSgpIDw8IG4gPDwgIiBpcyBvZGQiOwotLy8gICB9Ci0vLwotLy8gVGhlbiBhIHN0YXRlbWVu
dCBFWFBFQ1RfRkFMU0UoSXNFdmVuKEZpYig2KSkpIHdpbGwgcHJpbnQKLS8vCi0vLyAgIFZhbHVl
IG9mOiBJc0V2ZW4oRmliKDYpKQotLy8gICAgIEFjdHVhbDogdHJ1ZSAoOCBpcyBldmVuKQotLy8g
ICBFeHBlY3RlZDogZmFsc2UKLS8vCi0vLyBOQjogUHJlZGljYXRlcyB0aGF0IHN1cHBvcnQgbmVn
YXRpdmUgQm9vbGVhbiBhc3NlcnRpb25zIGhhdmUgcmVkdWNlZAotLy8gcGVyZm9ybWFuY2UgaW4g
cG9zaXRpdmUgb25lcyBzbyBiZSBjYXJlZnVsIG5vdCB0byB1c2UgdGhlbSBpbiB0ZXN0cwotLy8g
dGhhdCBoYXZlIGxvdHMgKHRlbnMgb2YgdGhvdXNhbmRzKSBvZiBwb3NpdGl2ZSBCb29sZWFuIGFz
c2VydGlvbnMuCi0vLwotLy8gVG8gdXNlIHRoaXMgY2xhc3Mgd2l0aCBFWFBFQ1RfUFJFRF9GT1JN
QVQgYXNzZXJ0aW9ucyBzdWNoIGFzOgotLy8KLS8vICAgLy8gVmVyaWZpZXMgdGhhdCBGb28oKSBy
ZXR1cm5zIGFuIGV2ZW4gbnVtYmVyLgotLy8gICBFWFBFQ1RfUFJFRF9GT1JNQVQxKElzRXZlbiwg
Rm9vKCkpOwotLy8KLS8vIHlvdSBuZWVkIHRvIGRlZmluZToKLS8vCi0vLyAgIHRlc3Rpbmc6OkFz
c2VydGlvblJlc3VsdCBJc0V2ZW4oY29uc3QgY2hhciogZXhwciwgaW50IG4pIHsKLS8vICAgICBp
ZiAoKG4gJSAyKSA9PSAwKQotLy8gICAgICAgcmV0dXJuIHRlc3Rpbmc6OkFzc2VydGlvblN1Y2Nl
c3MoKTsKLS8vICAgICBlbHNlCi0vLyAgICAgICByZXR1cm4gdGVzdGluZzo6QXNzZXJ0aW9uRmFp
bHVyZSgpCi0vLyAgICAgICAgIDw8ICJFeHBlY3RlZDogIiA8PCBleHByIDw8ICIgaXMgZXZlblxu
ICBBY3R1YWw6IGl0J3MgIiA8PCBuOwotLy8gICB9Ci0vLwotLy8gSWYgRm9vKCkgcmV0dXJucyA1
LCB5b3Ugd2lsbCBzZWUgdGhlIGZvbGxvd2luZyBtZXNzYWdlOgotLy8KLS8vICAgRXhwZWN0ZWQ6
IEZvbygpIGlzIGV2ZW4KLS8vICAgICBBY3R1YWw6IGl0J3MgNQotLy8KLWNsYXNzIEdURVNUX0FQ
SV8gQXNzZXJ0aW9uUmVzdWx0IHsKLSBwdWJsaWM6Ci0gIC8vIENvcHkgY29uc3RydWN0b3IuCi0g
IC8vIFVzZWQgaW4gRVhQRUNUX1RSVUUvRkFMU0UoYXNzZXJ0aW9uX3Jlc3VsdCkuCi0gIEFzc2Vy
dGlvblJlc3VsdChjb25zdCBBc3NlcnRpb25SZXN1bHQmIG90aGVyKTsKLQotICBHVEVTVF9ESVNB
QkxFX01TQ19XQVJOSU5HU19QVVNIXyg0ODAwIC8qIGZvcmNpbmcgdmFsdWUgdG8gYm9vbCAqLykK
LQotICAvLyBVc2VkIGluIHRoZSBFWFBFQ1RfVFJVRS9GQUxTRShib29sX2V4cHJlc3Npb24pLgot
ICAvLwotICAvLyBUIG11c3QgYmUgY29udGV4dHVhbGx5IGNvbnZlcnRpYmxlIHRvIGJvb2wuCi0g
IC8vCi0gIC8vIFRoZSBzZWNvbmQgcGFyYW1ldGVyIHByZXZlbnRzIHRoaXMgb3ZlcmxvYWQgZnJv
bSBiZWluZyBjb25zaWRlcmVkIGlmCi0gIC8vIHRoZSBhcmd1bWVudCBpcyBpbXBsaWNpdGx5IGNv
bnZlcnRpYmxlIHRvIEFzc2VydGlvblJlc3VsdC4gSW4gdGhhdCBjYXNlCi0gIC8vIHdlIHdhbnQg
QXNzZXJ0aW9uUmVzdWx0J3MgY29weSBjb25zdHJ1Y3RvciB0byBiZSB1c2VkLgotICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLSAgZXhwbGljaXQgQXNzZXJ0aW9uUmVzdWx0KAotICAgICAgY29uc3Qg
VCYgc3VjY2VzcywKLSAgICAgIHR5cGVuYW1lIGludGVybmFsOjpFbmFibGVJZjwKLSAgICAgICAg
ICAhaW50ZXJuYWw6OkltcGxpY2l0bHlDb252ZXJ0aWJsZTxULCBBc3NlcnRpb25SZXN1bHQ+Ojp2
YWx1ZT46OnR5cGUqCi0gICAgICAgICAgLyplbmFibGVyKi8gPSBOVUxMKQotICAgICAgOiBzdWNj
ZXNzXyhzdWNjZXNzKSB7fQotCi0gIEdURVNUX0RJU0FCTEVfTVNDX1dBUk5JTkdTX1BPUF8oKQot
Ci0gIC8vIEFzc2lnbm1lbnQgb3BlcmF0b3IuCi0gIEFzc2VydGlvblJlc3VsdCYgb3BlcmF0b3I9
KEFzc2VydGlvblJlc3VsdCBvdGhlcikgewotICAgIHN3YXAob3RoZXIpOwotICAgIHJldHVybiAq
dGhpczsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGFzc2VydGlvbiBzdWNjZWVk
ZWQuCi0gIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBzdWNjZXNzXzsgfSAgLy8gTk9M
SU5UCi0KLSAgLy8gUmV0dXJucyB0aGUgYXNzZXJ0aW9uJ3MgbmVnYXRpb24uIFVzZWQgd2l0aCBF
WFBFQ1QvQVNTRVJUX0ZBTFNFLgotICBBc3NlcnRpb25SZXN1bHQgb3BlcmF0b3IhKCkgY29uc3Q7
Ci0KLSAgLy8gUmV0dXJucyB0aGUgdGV4dCBzdHJlYW1lZCBpbnRvIHRoaXMgQXNzZXJ0aW9uUmVz
dWx0LiBUZXN0IGFzc2VydGlvbnMKLSAgLy8gdXNlIGl0IHdoZW4gdGhleSBmYWlsIChpLmUuLCB0
aGUgcHJlZGljYXRlJ3Mgb3V0Y29tZSBkb2Vzbid0IG1hdGNoIHRoZQotICAvLyBhc3NlcnRpb24n
cyBleHBlY3RhdGlvbikuIFdoZW4gbm90aGluZyBoYXMgYmVlbiBzdHJlYW1lZCBpbnRvIHRoZQot
ICAvLyBvYmplY3QsIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgotICBjb25zdCBjaGFyKiBtZXNz
YWdlKCkgY29uc3QgewotICAgIHJldHVybiBtZXNzYWdlXy5nZXQoKSAhPSBOVUxMID8gIG1lc3Nh
Z2VfLT5jX3N0cigpIDogIiI7Ci0gIH0KLSAgLy8gVE9ETyh2bGFkbEBnb29nbGUuY29tKTogUmVt
b3ZlIHRoaXMgYWZ0ZXIgbWFraW5nIHN1cmUgbm8gY2xpZW50cyB1c2UgaXQuCi0gIC8vIERlcHJl
Y2F0ZWQ7IHBsZWFzZSB1c2UgbWVzc2FnZSgpIGluc3RlYWQuCi0gIGNvbnN0IGNoYXIqIGZhaWx1
cmVfbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1lc3NhZ2UoKTsgfQotCi0gIC8vIFN0cmVhbXMg
YSBjdXN0b20gZmFpbHVyZSBtZXNzYWdlIGludG8gdGhpcyBvYmplY3QuCi0gIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBBc3NlcnRpb25SZXN1bHQmIG9wZXJhdG9yPDwoY29uc3QgVCYgdmFsdWUpIHsK
LSAgICBBcHBlbmRNZXNzYWdlKE1lc3NhZ2UoKSA8PCB2YWx1ZSk7Ci0gICAgcmV0dXJuICp0aGlz
OwotICB9Ci0KLSAgLy8gQWxsb3dzIHN0cmVhbWluZyBiYXNpYyBvdXRwdXQgbWFuaXB1bGF0b3Jz
IHN1Y2ggYXMgZW5kbCBvciBmbHVzaCBpbnRvCi0gIC8vIHRoaXMgb2JqZWN0LgotICBBc3NlcnRp
b25SZXN1bHQmIG9wZXJhdG9yPDwoCi0gICAgICA6OnN0ZDo6b3N0cmVhbSYgKCpiYXNpY19tYW5p
cHVsYXRvcikoOjpzdGQ6Om9zdHJlYW0mIHN0cmVhbSkpIHsKLSAgICBBcHBlbmRNZXNzYWdlKE1l
c3NhZ2UoKSA8PCBiYXNpY19tYW5pcHVsYXRvcik7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0K
LSBwcml2YXRlOgotICAvLyBBcHBlbmRzIHRoZSBjb250ZW50cyBvZiBtZXNzYWdlIHRvIG1lc3Nh
Z2VfLgotICB2b2lkIEFwcGVuZE1lc3NhZ2UoY29uc3QgTWVzc2FnZSYgYV9tZXNzYWdlKSB7Ci0g
ICAgaWYgKG1lc3NhZ2VfLmdldCgpID09IE5VTEwpCi0gICAgICBtZXNzYWdlXy5yZXNldChuZXcg
OjpzdGQ6OnN0cmluZyk7Ci0gICAgbWVzc2FnZV8tPmFwcGVuZChhX21lc3NhZ2UuR2V0U3RyaW5n
KCkuY19zdHIoKSk7Ci0gIH0KLQotICAvLyBTd2FwIHRoZSBjb250ZW50cyBvZiB0aGlzIEFzc2Vy
dGlvblJlc3VsdCB3aXRoIG90aGVyLgotICB2b2lkIHN3YXAoQXNzZXJ0aW9uUmVzdWx0JiBvdGhl
cik7Ci0KLSAgLy8gU3RvcmVzIHJlc3VsdCBvZiB0aGUgYXNzZXJ0aW9uIHByZWRpY2F0ZS4KLSAg
Ym9vbCBzdWNjZXNzXzsKLSAgLy8gU3RvcmVzIHRoZSBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIGNv
bmRpdGlvbiBpbiBjYXNlIHRoZSBleHBlY3RhdGlvbgotICAvLyBjb25zdHJ1Y3QgaXMgbm90IHNh
dGlzZmllZCB3aXRoIHRoZSBwcmVkaWNhdGUncyBvdXRjb21lLgotICAvLyBSZWZlcmVuY2VkIHZp
YSBhIHBvaW50ZXIgdG8gYXZvaWQgdGFraW5nIHRvbyBtdWNoIHN0YWNrIGZyYW1lIHNwYWNlCi0g
IC8vIHdpdGggdGVzdCBhc3NlcnRpb25zLgotICBpbnRlcm5hbDo6c2NvcGVkX3B0cjwgOjpzdGQ6
OnN0cmluZz4gbWVzc2FnZV87Ci19OwotCi0vLyBNYWtlcyBhIHN1Y2Nlc3NmdWwgYXNzZXJ0aW9u
IHJlc3VsdC4KLUdURVNUX0FQSV8gQXNzZXJ0aW9uUmVzdWx0IEFzc2VydGlvblN1Y2Nlc3MoKTsK
LQotLy8gTWFrZXMgYSBmYWlsZWQgYXNzZXJ0aW9uIHJlc3VsdC4KLUdURVNUX0FQSV8gQXNzZXJ0
aW9uUmVzdWx0IEFzc2VydGlvbkZhaWx1cmUoKTsKLQotLy8gTWFrZXMgYSBmYWlsZWQgYXNzZXJ0
aW9uIHJlc3VsdCB3aXRoIHRoZSBnaXZlbiBmYWlsdXJlIG1lc3NhZ2UuCi0vLyBEZXByZWNhdGVk
OyB1c2UgQXNzZXJ0aW9uRmFpbHVyZSgpIDw8IG1zZy4KLUdURVNUX0FQSV8gQXNzZXJ0aW9uUmVz
dWx0IEFzc2VydGlvbkZhaWx1cmUoY29uc3QgTWVzc2FnZSYgbXNnKTsKLQotLy8gVGhlIGFic3Ry
YWN0IGNsYXNzIHRoYXQgYWxsIHRlc3RzIGluaGVyaXQgZnJvbS4KLS8vCi0vLyBJbiBHb29nbGUg
VGVzdCwgYSB1bml0IHRlc3QgcHJvZ3JhbSBjb250YWlucyBvbmUgb3IgbWFueSBUZXN0Q2FzZXMs
IGFuZAotLy8gZWFjaCBUZXN0Q2FzZSBjb250YWlucyBvbmUgb3IgbWFueSBUZXN0cy4KLS8vCi0v
LyBXaGVuIHlvdSBkZWZpbmUgYSB0ZXN0IHVzaW5nIHRoZSBURVNUIG1hY3JvLCB5b3UgZG9uJ3Qg
bmVlZCB0bwotLy8gZXhwbGljaXRseSBkZXJpdmUgZnJvbSBUZXN0IC0gdGhlIFRFU1QgbWFjcm8g
YXV0b21hdGljYWxseSBkb2VzCi0vLyB0aGlzIGZvciB5b3UuCi0vLwotLy8gVGhlIG9ubHkgdGlt
ZSB5b3UgZGVyaXZlIGZyb20gVGVzdCBpcyB3aGVuIGRlZmluaW5nIGEgdGVzdCBmaXh0dXJlCi0v
LyB0byBiZSB1c2VkIGEgVEVTVF9GLiAgRm9yIGV4YW1wbGU6Ci0vLwotLy8gICBjbGFzcyBGb29U
ZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotLy8gICAgcHJvdGVjdGVkOgotLy8gICAgIHZv
aWQgU2V0VXAoKSBvdmVycmlkZSB7IC4uLiB9Ci0vLyAgICAgdm9pZCBUZWFyRG93bigpIG92ZXJy
aWRlIHsgLi4uIH0KLS8vICAgICAuLi4KLS8vICAgfTsKLS8vCi0vLyAgIFRFU1RfRihGb29UZXN0
LCBCYXIpIHsgLi4uIH0KLS8vICAgVEVTVF9GKEZvb1Rlc3QsIEJheikgeyAuLi4gfQotLy8KLS8v
IFRlc3QgaXMgbm90IGNvcHlhYmxlLgotY2xhc3MgR1RFU1RfQVBJXyBUZXN0IHsKLSBwdWJsaWM6
Ci0gIGZyaWVuZCBjbGFzcyBUZXN0SW5mbzsKLQotICAvLyBEZWZpbmVzIHR5cGVzIGZvciBwb2lu
dGVycyB0byBmdW5jdGlvbnMgdGhhdCBzZXQgdXAgYW5kIHRlYXIgZG93bgotICAvLyBhIHRlc3Qg
Y2FzZS4KLSAgdHlwZWRlZiBpbnRlcm5hbDo6U2V0VXBUZXN0Q2FzZUZ1bmMgU2V0VXBUZXN0Q2Fz
ZUZ1bmM7Ci0gIHR5cGVkZWYgaW50ZXJuYWw6OlRlYXJEb3duVGVzdENhc2VGdW5jIFRlYXJEb3du
VGVzdENhc2VGdW5jOwotCi0gIC8vIFRoZSBkJ3RvciBpcyB2aXJ0dWFsIGFzIHdlIGludGVuZCB0
byBpbmhlcml0IGZyb20gVGVzdC4KLSAgdmlydHVhbCB+VGVzdCgpOwotCi0gIC8vIFNldHMgdXAg
dGhlIHN0dWZmIHNoYXJlZCBieSBhbGwgdGVzdHMgaW4gdGhpcyB0ZXN0IGNhc2UuCi0gIC8vCi0g
IC8vIEdvb2dsZSBUZXN0IHdpbGwgY2FsbCBGb286OlNldFVwVGVzdENhc2UoKSBiZWZvcmUgcnVu
bmluZyB0aGUgZmlyc3QKLSAgLy8gdGVzdCBpbiB0ZXN0IGNhc2UgRm9vLiAgSGVuY2UgYSBzdWIt
Y2xhc3MgY2FuIGRlZmluZSBpdHMgb3duCi0gIC8vIFNldFVwVGVzdENhc2UoKSBtZXRob2QgdG8g
c2hhZG93IHRoZSBvbmUgZGVmaW5lZCBpbiB0aGUgc3VwZXIKLSAgLy8gY2xhc3MuCi0gIHN0YXRp
YyB2b2lkIFNldFVwVGVzdENhc2UoKSB7fQotCi0gIC8vIFRlYXJzIGRvd24gdGhlIHN0dWZmIHNo
YXJlZCBieSBhbGwgdGVzdHMgaW4gdGhpcyB0ZXN0IGNhc2UuCi0gIC8vCi0gIC8vIEdvb2dsZSBU
ZXN0IHdpbGwgY2FsbCBGb286OlRlYXJEb3duVGVzdENhc2UoKSBhZnRlciBydW5uaW5nIHRoZSBs
YXN0Ci0gIC8vIHRlc3QgaW4gdGVzdCBjYXNlIEZvby4gIEhlbmNlIGEgc3ViLWNsYXNzIGNhbiBk
ZWZpbmUgaXRzIG93bgotICAvLyBUZWFyRG93blRlc3RDYXNlKCkgbWV0aG9kIHRvIHNoYWRvdyB0
aGUgb25lIGRlZmluZWQgaW4gdGhlIHN1cGVyCi0gIC8vIGNsYXNzLgotICBzdGF0aWMgdm9pZCBU
ZWFyRG93blRlc3RDYXNlKCkge30KLQotICAvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSBjdXJyZW50
IHRlc3QgaGFzIGEgZmF0YWwgZmFpbHVyZS4KLSAgc3RhdGljIGJvb2wgSGFzRmF0YWxGYWlsdXJl
KCk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgY3VycmVudCB0ZXN0IGhhcyBhIG5vbi1m
YXRhbCBmYWlsdXJlLgotICBzdGF0aWMgYm9vbCBIYXNOb25mYXRhbEZhaWx1cmUoKTsKLQotICAv
LyBSZXR1cm5zIHRydWUgaWZmIHRoZSBjdXJyZW50IHRlc3QgaGFzIGEgKGVpdGhlciBmYXRhbCBv
cgotICAvLyBub24tZmF0YWwpIGZhaWx1cmUuCi0gIHN0YXRpYyBib29sIEhhc0ZhaWx1cmUoKSB7
IHJldHVybiBIYXNGYXRhbEZhaWx1cmUoKSB8fCBIYXNOb25mYXRhbEZhaWx1cmUoKTsgfQotCi0g
IC8vIExvZ3MgYSBwcm9wZXJ0eSBmb3IgdGhlIGN1cnJlbnQgdGVzdCwgdGVzdCBjYXNlLCBvciBm
b3IgdGhlIGVudGlyZQotICAvLyBpbnZvY2F0aW9uIG9mIHRoZSB0ZXN0IHByb2dyYW0gd2hlbiB1
c2VkIG91dHNpZGUgb2YgdGhlIGNvbnRleHQgb2YgYQotICAvLyB0ZXN0IGNhc2UuICBPbmx5IHRo
ZSBsYXN0IHZhbHVlIGZvciBhIGdpdmVuIGtleSBpcyByZW1lbWJlcmVkLiAgVGhlc2UKLSAgLy8g
YXJlIHB1YmxpYyBzdGF0aWMgc28gdGhleSBjYW4gYmUgY2FsbGVkIGZyb20gdXRpbGl0eSBmdW5j
dGlvbnMgdGhhdCBhcmUKLSAgLy8gbm90IG1lbWJlcnMgb2YgdGhlIHRlc3QgZml4dHVyZS4gIENh
bGxzIHRvIFJlY29yZFByb3BlcnR5IG1hZGUgZHVyaW5nCi0gIC8vIGxpZmVzcGFuIG9mIHRoZSB0
ZXN0IChmcm9tIHRoZSBtb21lbnQgaXRzIGNvbnN0cnVjdG9yIHN0YXJ0cyB0byB0aGUKLSAgLy8g
bW9tZW50IGl0cyBkZXN0cnVjdG9yIGZpbmlzaGVzKSB3aWxsIGJlIG91dHB1dCBpbiBYTUwgYXMg
YXR0cmlidXRlcyBvZgotICAvLyB0aGUgPHRlc3RjYXNlPiBlbGVtZW50LiAgUHJvcGVydGllcyBy
ZWNvcmRlZCBmcm9tIGZpeHR1cmUncwotICAvLyBTZXRVcFRlc3RDYXNlIG9yIFRlYXJEb3duVGVz
dENhc2UgYXJlIGxvZ2dlZCBhcyBhdHRyaWJ1dGVzIG9mIHRoZQotICAvLyBjb3JyZXNwb25kaW5n
IDx0ZXN0c3VpdGU+IGVsZW1lbnQuICBDYWxscyB0byBSZWNvcmRQcm9wZXJ0eSBtYWRlIGluIHRo
ZQotICAvLyBnbG9iYWwgY29udGV4dCAoYmVmb3JlIG9yIGFmdGVyIGludm9jYXRpb24gb2YgUlVO
X0FMTF9URVNUUyBhbmQgZnJvbQotICAvLyBTZXRVcC9UZWFyRG93biBtZXRob2Qgb2YgRW52aXJv
bm1lbnQgb2JqZWN0cyByZWdpc3RlcmVkIHdpdGggR29vZ2xlCi0gIC8vIFRlc3QpIHdpbGwgYmUg
b3V0cHV0IGFzIGF0dHJpYnV0ZXMgb2YgdGhlIDx0ZXN0c3VpdGVzPiBlbGVtZW50LgotICBzdGF0
aWMgdm9pZCBSZWNvcmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBjb25zdCBzdGQ6
OnN0cmluZyYgdmFsdWUpOwotICBzdGF0aWMgdm9pZCBSZWNvcmRQcm9wZXJ0eShjb25zdCBzdGQ6
OnN0cmluZyYga2V5LCBpbnQgdmFsdWUpOwotCi0gcHJvdGVjdGVkOgotICAvLyBDcmVhdGVzIGEg
VGVzdCBvYmplY3QuCi0gIFRlc3QoKTsKLQotICAvLyBTZXRzIHVwIHRoZSB0ZXN0IGZpeHR1cmUu
Ci0gIHZpcnR1YWwgdm9pZCBTZXRVcCgpOwotCi0gIC8vIFRlYXJzIGRvd24gdGhlIHRlc3QgZml4
dHVyZS4KLSAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCk7Ci0KLSBwcml2YXRlOgotICAvLyBSZXR1
cm5zIHRydWUgaWZmIHRoZSBjdXJyZW50IHRlc3QgaGFzIHRoZSBzYW1lIGZpeHR1cmUgY2xhc3Mg
YXMKLSAgLy8gdGhlIGZpcnN0IHRlc3QgaW4gdGhlIGN1cnJlbnQgdGVzdCBjYXNlLgotICBzdGF0
aWMgYm9vbCBIYXNTYW1lRml4dHVyZUNsYXNzKCk7Ci0KLSAgLy8gUnVucyB0aGUgdGVzdCBhZnRl
ciB0aGUgdGVzdCBmaXh0dXJlIGhhcyBiZWVuIHNldCB1cC4KLSAgLy8KLSAgLy8gQSBzdWItY2xh
c3MgbXVzdCBpbXBsZW1lbnQgdGhpcyB0byBkZWZpbmUgdGhlIHRlc3QgbG9naWMuCi0gIC8vCi0g
IC8vIERPIE5PVCBPVkVSUklERSBUSElTIEZVTkNUSU9OIERJUkVDVExZIElOIEEgVVNFUiBQUk9H
UkFNLgotICAvLyBJbnN0ZWFkLCB1c2UgdGhlIFRFU1Qgb3IgVEVTVF9GIG1hY3JvLgotICB2aXJ0
dWFsIHZvaWQgVGVzdEJvZHkoKSA9IDA7Ci0KLSAgLy8gU2V0cyB1cCwgZXhlY3V0ZXMsIGFuZCB0
ZWFycyBkb3duIHRoZSB0ZXN0LgotICB2b2lkIFJ1bigpOwotCi0gIC8vIERlbGV0ZXMgc2VsZi4g
IFdlIGRlbGliZXJhdGVseSBwaWNrIGFuIHVudXN1YWwgbmFtZSBmb3IgdGhpcwotICAvLyBpbnRl
cm5hbCBtZXRob2QgdG8gYXZvaWQgY2xhc2hpbmcgd2l0aCBuYW1lcyB1c2VkIGluIHVzZXIgVEVT
VHMuCi0gIHZvaWQgRGVsZXRlU2VsZl8oKSB7IGRlbGV0ZSB0aGlzOyB9Ci0KLSAgY29uc3QgaW50
ZXJuYWw6OnNjb3BlZF9wdHI8IEdURVNUX0ZMQUdfU0FWRVJfID4gZ3Rlc3RfZmxhZ19zYXZlcl87
Ci0KLSAgLy8gT2Z0ZW4gYSB1c2VyIG1pc3NwZWxscyBTZXRVcCgpIGFzIFNldHVwKCkgYW5kIHNw
ZW5kcyBhIGxvbmcgdGltZQotICAvLyB3b25kZXJpbmcgd2h5IGl0IGlzIG5ldmVyIGNhbGxlZCBi
eSBHb29nbGUgVGVzdC4gIFRoZSBkZWNsYXJhdGlvbiBvZgotICAvLyB0aGUgZm9sbG93aW5nIG1l
dGhvZCBpcyBzb2xlbHkgZm9yIGNhdGNoaW5nIHN1Y2ggYW4gZXJyb3IgYXQKLSAgLy8gY29tcGls
ZSB0aW1lOgotICAvLwotICAvLyAgIC0gVGhlIHJldHVybiB0eXBlIGlzIGRlbGliZXJhdGVseSBj
aG9zZW4gdG8gYmUgbm90IHZvaWQsIHNvIGl0Ci0gIC8vICAgd2lsbCBiZSBhIGNvbmZsaWN0IGlm
IHZvaWQgU2V0dXAoKSBpcyBkZWNsYXJlZCBpbiB0aGUgdXNlcidzCi0gIC8vICAgdGVzdCBmaXh0
dXJlLgotICAvLwotICAvLyAgIC0gVGhpcyBtZXRob2QgaXMgcHJpdmF0ZSwgc28gaXQgd2lsbCBi
ZSBhbm90aGVyIGNvbXBpbGVyIGVycm9yCi0gIC8vICAgaWYgdGhlIG1ldGhvZCBpcyBjYWxsZWQg
ZnJvbSB0aGUgdXNlcidzIHRlc3QgZml4dHVyZS4KLSAgLy8KLSAgLy8gRE8gTk9UIE9WRVJSSURF
IFRISVMgRlVOQ1RJT04uCi0gIC8vCi0gIC8vIElmIHlvdSBzZWUgYW4gZXJyb3IgYWJvdXQgb3Zl
cnJpZGluZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIG9yCi0gIC8vIGFib3V0IGl0IGJlaW5nIHBy
aXZhdGUsIHlvdSBoYXZlIG1pcy1zcGVsbGVkIFNldFVwKCkgYXMgU2V0dXAoKS4KLSAgc3RydWN0
IFNldHVwX3Nob3VsZF9iZV9zcGVsbGVkX1NldFVwIHt9OwotICB2aXJ0dWFsIFNldHVwX3Nob3Vs
ZF9iZV9zcGVsbGVkX1NldFVwKiBTZXR1cCgpIHsgcmV0dXJuIE5VTEw7IH0KLQotICAvLyBXZSBk
aXNhbGxvdyBjb3B5aW5nIFRlc3RzLgotICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJR05f
KFRlc3QpOwotfTsKLQotdHlwZWRlZiBpbnRlcm5hbDo6VGltZUluTWlsbGlzIFRpbWVJbk1pbGxp
czsKLQotLy8gQSBjb3B5YWJsZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgdXNlciBzcGVjaWZpZWQg
dGVzdCBwcm9wZXJ0eSB3aGljaCBjYW4gYmUKLS8vIG91dHB1dCBhcyBhIGtleS92YWx1ZSBzdHJp
bmcgcGFpci4KLS8vCi0vLyBEb24ndCBpbmhlcml0IGZyb20gVGVzdFByb3BlcnR5IGFzIGl0cyBk
ZXN0cnVjdG9yIGlzIG5vdCB2aXJ0dWFsLgotY2xhc3MgVGVzdFByb3BlcnR5IHsKLSBwdWJsaWM6
Ci0gIC8vIEMndG9yLiAgVGVzdFByb3BlcnR5IGRvZXMgTk9UIGhhdmUgYSBkZWZhdWx0IGNvbnN0
cnVjdG9yLgotICAvLyBBbHdheXMgdXNlIHRoaXMgY29uc3RydWN0b3IgKHdpdGggcGFyYW1ldGVy
cykgdG8gY3JlYXRlIGEKLSAgLy8gVGVzdFByb3BlcnR5IG9iamVjdC4KLSAgVGVzdFByb3BlcnR5
KGNvbnN0IHN0ZDo6c3RyaW5nJiBhX2tleSwgY29uc3Qgc3RkOjpzdHJpbmcmIGFfdmFsdWUpIDoK
LSAgICBrZXlfKGFfa2V5KSwgdmFsdWVfKGFfdmFsdWUpIHsKLSAgfQotCi0gIC8vIEdldHMgdGhl
IHVzZXIgc3VwcGxpZWQga2V5LgotICBjb25zdCBjaGFyKiBrZXkoKSBjb25zdCB7Ci0gICAgcmV0
dXJuIGtleV8uY19zdHIoKTsKLSAgfQotCi0gIC8vIEdldHMgdGhlIHVzZXIgc3VwcGxpZWQgdmFs
dWUuCi0gIGNvbnN0IGNoYXIqIHZhbHVlKCkgY29uc3QgewotICAgIHJldHVybiB2YWx1ZV8uY19z
dHIoKTsKLSAgfQotCi0gIC8vIFNldHMgYSBuZXcgdmFsdWUsIG92ZXJyaWRpbmcgdGhlIG9uZSBz
dXBwbGllZCBpbiB0aGUgY29uc3RydWN0b3IuCi0gIHZvaWQgU2V0VmFsdWUoY29uc3Qgc3RkOjpz
dHJpbmcmIG5ld192YWx1ZSkgewotICAgIHZhbHVlXyA9IG5ld192YWx1ZTsKLSAgfQotCi0gcHJp
dmF0ZToKLSAgLy8gVGhlIGtleSBzdXBwbGllZCBieSB0aGUgdXNlci4KLSAgc3RkOjpzdHJpbmcg
a2V5XzsKLSAgLy8gVGhlIHZhbHVlIHN1cHBsaWVkIGJ5IHRoZSB1c2VyLgotICBzdGQ6OnN0cmlu
ZyB2YWx1ZV87Ci19OwotCi0vLyBUaGUgcmVzdWx0IG9mIGEgc2luZ2xlIFRlc3QuICBUaGlzIGlu
Y2x1ZGVzIGEgbGlzdCBvZgotLy8gVGVzdFBhcnRSZXN1bHRzLCBhIGxpc3Qgb2YgVGVzdFByb3Bl
cnRpZXMsIGEgY291bnQgb2YgaG93IG1hbnkKLS8vIGRlYXRoIHRlc3RzIHRoZXJlIGFyZSBpbiB0
aGUgVGVzdCwgYW5kIGhvdyBtdWNoIHRpbWUgaXQgdG9vayB0byBydW4KLS8vIHRoZSBUZXN0Lgot
Ly8KLS8vIFRlc3RSZXN1bHQgaXMgbm90IGNvcHlhYmxlLgotY2xhc3MgR1RFU1RfQVBJXyBUZXN0
UmVzdWx0IHsKLSBwdWJsaWM6Ci0gIC8vIENyZWF0ZXMgYW4gZW1wdHkgVGVzdFJlc3VsdC4KLSAg
VGVzdFJlc3VsdCgpOwotCi0gIC8vIEQndG9yLiAgRG8gbm90IGluaGVyaXQgZnJvbSBUZXN0UmVz
dWx0LgotICB+VGVzdFJlc3VsdCgpOwotCi0gIC8vIEdldHMgdGhlIG51bWJlciBvZiBhbGwgdGVz
dCBwYXJ0cy4gIFRoaXMgaXMgdGhlIHN1bSBvZiB0aGUgbnVtYmVyCi0gIC8vIG9mIHN1Y2Nlc3Nm
dWwgdGVzdCBwYXJ0cyBhbmQgdGhlIG51bWJlciBvZiBmYWlsZWQgdGVzdCBwYXJ0cy4KLSAgaW50
IHRvdGFsX3BhcnRfY291bnQoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg
dGhlIHRlc3QgcHJvcGVydGllcy4KLSAgaW50IHRlc3RfcHJvcGVydHlfY291bnQoKSBjb25zdDsK
LQotICAvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSB0ZXN0IHBhc3NlZCAoaS5lLiBubyB0ZXN0IHBh
cnQgZmFpbGVkKS4KLSAgYm9vbCBQYXNzZWQoKSBjb25zdCB7IHJldHVybiAhRmFpbGVkKCk7IH0K
LQotICAvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSB0ZXN0IGZhaWxlZC4KLSAgYm9vbCBGYWlsZWQo
KSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSB0ZXN0IGZhdGFsbHkgZmFpbGVk
LgotICBib29sIEhhc0ZhdGFsRmFpbHVyZSgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBp
ZmYgdGhlIHRlc3QgaGFzIGEgbm9uLWZhdGFsIGZhaWx1cmUuCi0gIGJvb2wgSGFzTm9uZmF0YWxG
YWlsdXJlKCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0aGUgZWxhcHNlZCB0aW1lLCBpbiBtaWxs
aXNlY29uZHMuCi0gIFRpbWVJbk1pbGxpcyBlbGFwc2VkX3RpbWUoKSBjb25zdCB7IHJldHVybiBl
bGFwc2VkX3RpbWVfOyB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgaS10aCB0ZXN0IHBhcnQgcmVzdWx0
IGFtb25nIGFsbCB0aGUgcmVzdWx0cy4gaSBjYW4gcmFuZ2UKLSAgLy8gZnJvbSAwIHRvIHRlc3Rf
cHJvcGVydHlfY291bnQoKSAtIDEuIElmIGkgaXMgbm90IGluIHRoYXQgcmFuZ2UsIGFib3J0cwot
ICAvLyB0aGUgcHJvZ3JhbS4KLSAgY29uc3QgVGVzdFBhcnRSZXN1bHQmIEdldFRlc3RQYXJ0UmVz
dWx0KGludCBpKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBpLXRoIHRlc3QgcHJvcGVydHku
IGkgY2FuIHJhbmdlIGZyb20gMCB0bwotICAvLyB0ZXN0X3Byb3BlcnR5X2NvdW50KCkgLSAxLiBJ
ZiBpIGlzIG5vdCBpbiB0aGF0IHJhbmdlLCBhYm9ydHMgdGhlCi0gIC8vIHByb2dyYW0uCi0gIGNv
bnN0IFRlc3RQcm9wZXJ0eSYgR2V0VGVzdFByb3BlcnR5KGludCBpKSBjb25zdDsKLQotIHByaXZh
dGU6Ci0gIGZyaWVuZCBjbGFzcyBUZXN0SW5mbzsKLSAgZnJpZW5kIGNsYXNzIFRlc3RDYXNlOwot
ICBmcmllbmQgY2xhc3MgVW5pdFRlc3Q7Ci0gIGZyaWVuZCBjbGFzcyBpbnRlcm5hbDo6RGVmYXVs
dEdsb2JhbFRlc3RQYXJ0UmVzdWx0UmVwb3J0ZXI7Ci0gIGZyaWVuZCBjbGFzcyBpbnRlcm5hbDo6
RXhlY0RlYXRoVGVzdDsKLSAgZnJpZW5kIGNsYXNzIGludGVybmFsOjpUZXN0UmVzdWx0QWNjZXNz
b3I7Ci0gIGZyaWVuZCBjbGFzcyBpbnRlcm5hbDo6VW5pdFRlc3RJbXBsOwotICBmcmllbmQgY2xh
c3MgaW50ZXJuYWw6OldpbmRvd3NEZWF0aFRlc3Q7Ci0KLSAgLy8gR2V0cyB0aGUgdmVjdG9yIG9m
IFRlc3RQYXJ0UmVzdWx0cy4KLSAgY29uc3Qgc3RkOjp2ZWN0b3I8VGVzdFBhcnRSZXN1bHQ+JiB0
ZXN0X3BhcnRfcmVzdWx0cygpIGNvbnN0IHsKLSAgICByZXR1cm4gdGVzdF9wYXJ0X3Jlc3VsdHNf
OwotICB9Ci0KLSAgLy8gR2V0cyB0aGUgdmVjdG9yIG9mIFRlc3RQcm9wZXJ0aWVzLgotICBjb25z
dCBzdGQ6OnZlY3RvcjxUZXN0UHJvcGVydHk+JiB0ZXN0X3Byb3BlcnRpZXMoKSBjb25zdCB7Ci0g
ICAgcmV0dXJuIHRlc3RfcHJvcGVydGllc187Ci0gIH0KLQotICAvLyBTZXRzIHRoZSBlbGFwc2Vk
IHRpbWUuCi0gIHZvaWQgc2V0X2VsYXBzZWRfdGltZShUaW1lSW5NaWxsaXMgZWxhcHNlZCkgeyBl
bGFwc2VkX3RpbWVfID0gZWxhcHNlZDsgfQotCi0gIC8vIEFkZHMgYSB0ZXN0IHByb3BlcnR5IHRv
IHRoZSBsaXN0LiBUaGUgcHJvcGVydHkgaXMgdmFsaWRhdGVkIGFuZCBtYXkgYWRkCi0gIC8vIGEg
bm9uLWZhdGFsIGZhaWx1cmUgaWYgaW52YWxpZCAoZS5nLiwgaWYgaXQgY29uZmxpY3RzIHdpdGgg
cmVzZXJ2ZWQKLSAgLy8ga2V5IG5hbWVzKS4gSWYgYSBwcm9wZXJ0eSBpcyBhbHJlYWR5IHJlY29y
ZGVkIGZvciB0aGUgc2FtZSBrZXksIHRoZQotICAvLyB2YWx1ZSB3aWxsIGJlIHVwZGF0ZWQsIHJh
dGhlciB0aGFuIHN0b3JpbmcgbXVsdGlwbGUgdmFsdWVzIGZvciB0aGUgc2FtZQotICAvLyBrZXku
ICB4bWxfZWxlbWVudCBzcGVjaWZpZXMgdGhlIGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBwcm9wZXJ0
eSBpcyBiZWluZwotICAvLyByZWNvcmRlZCBhbmQgaXMgdXNlZCBmb3IgdmFsaWRhdGlvbi4KLSAg
dm9pZCBSZWNvcmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYgeG1sX2VsZW1lbnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVGVzdFByb3BlcnR5JiB0ZXN0X3Byb3BlcnR5KTsKLQot
ICAvLyBBZGRzIGEgZmFpbHVyZSBpZiB0aGUga2V5IGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlIG9m
IEdvb2dsZSBUZXN0Ci0gIC8vIHRlc3RjYXNlIHRhZ3MuICBSZXR1cm5zIHRydWUgaWYgdGhlIHBy
b3BlcnR5IGlzIHZhbGlkLgotICAvLyBUT0RPKHJ1c3NyKTogVmFsaWRhdGUgYXR0cmlidXRlIG5h
bWVzIGFyZSBsZWdhbCBhbmQgaHVtYW4gcmVhZGFibGUuCi0gIHN0YXRpYyBib29sIFZhbGlkYXRl
VGVzdFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiB4bWxfZWxlbWVudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVzdFByb3BlcnR5JiB0ZXN0X3Byb3BlcnR5
KTsKLQotICAvLyBBZGRzIGEgdGVzdCBwYXJ0IHJlc3VsdCB0byB0aGUgbGlzdC4KLSAgdm9pZCBB
ZGRUZXN0UGFydFJlc3VsdChjb25zdCBUZXN0UGFydFJlc3VsdCYgdGVzdF9wYXJ0X3Jlc3VsdCk7
Ci0KLSAgLy8gUmV0dXJucyB0aGUgZGVhdGggdGVzdCBjb3VudC4KLSAgaW50IGRlYXRoX3Rlc3Rf
Y291bnQoKSBjb25zdCB7IHJldHVybiBkZWF0aF90ZXN0X2NvdW50XzsgfQotCi0gIC8vIEluY3Jl
bWVudHMgdGhlIGRlYXRoIHRlc3QgY291bnQsIHJldHVybmluZyB0aGUgbmV3IGNvdW50LgotICBp
bnQgaW5jcmVtZW50X2RlYXRoX3Rlc3RfY291bnQoKSB7IHJldHVybiArK2RlYXRoX3Rlc3RfY291
bnRfOyB9Ci0KLSAgLy8gQ2xlYXJzIHRoZSB0ZXN0IHBhcnQgcmVzdWx0cy4KLSAgdm9pZCBDbGVh
clRlc3RQYXJ0UmVzdWx0cygpOwotCi0gIC8vIENsZWFycyB0aGUgb2JqZWN0LgotICB2b2lkIENs
ZWFyKCk7Ci0KLSAgLy8gUHJvdGVjdHMgbXV0YWJsZSBzdGF0ZSBvZiB0aGUgcHJvcGVydHkgdmVj
dG9yIGFuZCBvZiBvd25lZAotICAvLyBwcm9wZXJ0aWVzLCB3aG9zZSB2YWx1ZXMgbWF5IGJlIHVw
ZGF0ZWQuCi0gIGludGVybmFsOjpNdXRleCB0ZXN0X3Byb3Blcml0ZXNfbXV0ZXhfOwotCi0gIC8v
IFRoZSB2ZWN0b3Igb2YgVGVzdFBhcnRSZXN1bHRzCi0gIHN0ZDo6dmVjdG9yPFRlc3RQYXJ0UmVz
dWx0PiB0ZXN0X3BhcnRfcmVzdWx0c187Ci0gIC8vIFRoZSB2ZWN0b3Igb2YgVGVzdFByb3BlcnRp
ZXMKLSAgc3RkOjp2ZWN0b3I8VGVzdFByb3BlcnR5PiB0ZXN0X3Byb3BlcnRpZXNfOwotICAvLyBS
dW5uaW5nIGNvdW50IG9mIGRlYXRoIHRlc3RzLgotICBpbnQgZGVhdGhfdGVzdF9jb3VudF87Ci0g
IC8vIFRoZSBlbGFwc2VkIHRpbWUsIGluIG1pbGxpc2Vjb25kcy4KLSAgVGltZUluTWlsbGlzIGVs
YXBzZWRfdGltZV87Ci0KLSAgLy8gV2UgZGlzYWxsb3cgY29weWluZyBUZXN0UmVzdWx0LgotICBH
VEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJR05fKFRlc3RSZXN1bHQpOwotfTsgIC8vIGNsYXNz
IFRlc3RSZXN1bHQKLQotLy8gQSBUZXN0SW5mbyBvYmplY3Qgc3RvcmVzIHRoZSBmb2xsb3dpbmcg
aW5mb3JtYXRpb24gYWJvdXQgYSB0ZXN0OgotLy8KLS8vICAgVGVzdCBjYXNlIG5hbWUKLS8vICAg
VGVzdCBuYW1lCi0vLyAgIFdoZXRoZXIgdGhlIHRlc3Qgc2hvdWxkIGJlIHJ1bgotLy8gICBBIGZ1
bmN0aW9uIHBvaW50ZXIgdGhhdCBjcmVhdGVzIHRoZSB0ZXN0IG9iamVjdCB3aGVuIGludm9rZWQK
LS8vICAgVGVzdCByZXN1bHQKLS8vCi0vLyBUaGUgY29uc3RydWN0b3Igb2YgVGVzdEluZm8gcmVn
aXN0ZXJzIGl0c2VsZiB3aXRoIHRoZSBVbml0VGVzdAotLy8gc2luZ2xldG9uIHN1Y2ggdGhhdCB0
aGUgUlVOX0FMTF9URVNUUygpIG1hY3JvIGtub3dzIHdoaWNoIHRlc3RzIHRvCi0vLyBydW4uCi1j
bGFzcyBHVEVTVF9BUElfIFRlc3RJbmZvIHsKLSBwdWJsaWM6Ci0gIC8vIERlc3RydWN0cyBhIFRl
c3RJbmZvIG9iamVjdC4gIFRoaXMgZnVuY3Rpb24gaXMgbm90IHZpcnR1YWwsIHNvCi0gIC8vIGRv
bid0IGluaGVyaXQgZnJvbSBUZXN0SW5mby4KLSAgflRlc3RJbmZvKCk7Ci0KLSAgLy8gUmV0dXJu
cyB0aGUgdGVzdCBjYXNlIG5hbWUuCi0gIGNvbnN0IGNoYXIqIHRlc3RfY2FzZV9uYW1lKCkgY29u
c3QgeyByZXR1cm4gdGVzdF9jYXNlX25hbWVfLmNfc3RyKCk7IH0KLQotICAvLyBSZXR1cm5zIHRo
ZSB0ZXN0IG5hbWUuCi0gIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lXy5j
X3N0cigpOyB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIHR5cGUs
IG9yIE5VTEwgaWYgdGhpcyBpcyBub3QgYSB0eXBlZAotICAvLyBvciBhIHR5cGUtcGFyYW1ldGVy
aXplZCB0ZXN0LgotICBjb25zdCBjaGFyKiB0eXBlX3BhcmFtKCkgY29uc3QgewotICAgIGlmICh0
eXBlX3BhcmFtXy5nZXQoKSAhPSBOVUxMKQotICAgICAgcmV0dXJuIHR5cGVfcGFyYW1fLT5jX3N0
cigpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgdGV4dCByZXBy
ZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgcGFyYW1ldGVyLCBvciBOVUxMIGlmIHRoaXMKLSAgLy8g
aXMgbm90IGEgdmFsdWUtcGFyYW1ldGVyaXplZCB0ZXN0LgotICBjb25zdCBjaGFyKiB2YWx1ZV9w
YXJhbSgpIGNvbnN0IHsKLSAgICBpZiAodmFsdWVfcGFyYW1fLmdldCgpICE9IE5VTEwpCi0gICAg
ICByZXR1cm4gdmFsdWVfcGFyYW1fLT5jX3N0cigpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0K
LSAgLy8gUmV0dXJucyB0aGUgZmlsZSBuYW1lIHdoZXJlIHRoaXMgdGVzdCBpcyBkZWZpbmVkLgot
ICBjb25zdCBjaGFyKiBmaWxlKCkgY29uc3QgeyByZXR1cm4gbG9jYXRpb25fLmZpbGUuY19zdHIo
KTsgfQotCi0gIC8vIFJldHVybnMgdGhlIGxpbmUgd2hlcmUgdGhpcyB0ZXN0IGlzIGRlZmluZWQu
Ci0gIGludCBsaW5lKCkgY29uc3QgeyByZXR1cm4gbG9jYXRpb25fLmxpbmU7IH0KLQotICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhpcyB0ZXN0IHNob3VsZCBydW4sIHRoYXQgaXMgaWYgdGhlIHRlc3Qg
aXMgbm90Ci0gIC8vIGRpc2FibGVkIChvciBpdCBpcyBkaXNhYmxlZCBidXQgdGhlIGFsc29fcnVu
X2Rpc2FibGVkX3Rlc3RzIGZsYWcgaGFzCi0gIC8vIGJlZW4gc3BlY2lmaWVkKSBhbmQgaXRzIGZ1
bGwgbmFtZSBtYXRjaGVzIHRoZSB1c2VyLXNwZWNpZmllZCBmaWx0ZXIuCi0gIC8vCi0gIC8vIEdv
b2dsZSBUZXN0IGFsbG93cyB0aGUgdXNlciB0byBmaWx0ZXIgdGhlIHRlc3RzIGJ5IHRoZWlyIGZ1
bGwgbmFtZXMuCi0gIC8vIFRoZSBmdWxsIG5hbWUgb2YgYSB0ZXN0IEJhciBpbiB0ZXN0IGNhc2Ug
Rm9vIGlzIGRlZmluZWQgYXMKLSAgLy8gIkZvby5CYXIiLiAgT25seSB0aGUgdGVzdHMgdGhhdCBt
YXRjaCB0aGUgZmlsdGVyIHdpbGwgcnVuLgotICAvLwotICAvLyBBIGZpbHRlciBpcyBhIGNvbG9u
LXNlcGFyYXRlZCBsaXN0IG9mIGdsb2IgKG5vdCByZWdleCkgcGF0dGVybnMsCi0gIC8vIG9wdGlv
bmFsbHkgZm9sbG93ZWQgYnkgYSAnLScgYW5kIGEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YKLSAg
Ly8gbmVnYXRpdmUgcGF0dGVybnMgKHRlc3RzIHRvIGV4Y2x1ZGUpLiAgQSB0ZXN0IGlzIHJ1biBp
ZiBpdAotICAvLyBtYXRjaGVzIG9uZSBvZiB0aGUgcG9zaXRpdmUgcGF0dGVybnMgYW5kIGRvZXMg
bm90IG1hdGNoIGFueSBvZgotICAvLyB0aGUgbmVnYXRpdmUgcGF0dGVybnMuCi0gIC8vCi0gIC8v
IEZvciBleGFtcGxlLCAqQSo6Rm9vLiogaXMgYSBmaWx0ZXIgdGhhdCBtYXRjaGVzIGFueSBzdHJp
bmcgdGhhdAotICAvLyBjb250YWlucyB0aGUgY2hhcmFjdGVyICdBJyBvciBzdGFydHMgd2l0aCAi
Rm9vLiIuCi0gIGJvb2wgc2hvdWxkX3J1bigpIGNvbnN0IHsgcmV0dXJuIHNob3VsZF9ydW5fOyB9
Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGlzIHRlc3Qgd2lsbCBhcHBlYXIgaW4gdGhlIFhN
TCByZXBvcnQuCi0gIGJvb2wgaXNfcmVwb3J0YWJsZSgpIGNvbnN0IHsKLSAgICAvLyBGb3Igbm93
LCB0aGUgWE1MIHJlcG9ydCBpbmNsdWRlcyBhbGwgdGVzdHMgbWF0Y2hpbmcgdGhlIGZpbHRlci4K
LSAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtYXkgdHJpbSB0ZXN0cyB0aGF0IGFyZSBleGNsdWRl
ZCBiZWNhdXNlIG9mCi0gICAgLy8gc2hhcmRpbmcuCi0gICAgcmV0dXJuIG1hdGNoZXNfZmlsdGVy
XzsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdC4KLSAgY29uc3Qg
VGVzdFJlc3VsdCogcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gJnJlc3VsdF87IH0KLQotIHByaXZh
dGU6Ci0gIGZyaWVuZCBjbGFzcyBUZXN0OwotICBmcmllbmQgY2xhc3MgVGVzdENhc2U7Ci0gIGZy
aWVuZCBjbGFzcyBpbnRlcm5hbDo6VW5pdFRlc3RJbXBsOwotICBmcmllbmQgY2xhc3MgaW50ZXJu
YWw6OlN0cmVhbWluZ0xpc3RlbmVyVGVzdDsKLSAgZnJpZW5kIFRlc3RJbmZvKiBpbnRlcm5hbDo6
TWFrZUFuZFJlZ2lzdGVyVGVzdEluZm8oCi0gICAgICBjb25zdCBjaGFyKiB0ZXN0X2Nhc2VfbmFt
ZSwKLSAgICAgIGNvbnN0IGNoYXIqIG5hbWUsCi0gICAgICBjb25zdCBjaGFyKiB0eXBlX3BhcmFt
LAotICAgICAgY29uc3QgY2hhciogdmFsdWVfcGFyYW0sCi0gICAgICBpbnRlcm5hbDo6Q29kZUxv
Y2F0aW9uIGNvZGVfbG9jYXRpb24sCi0gICAgICBpbnRlcm5hbDo6VHlwZUlkIGZpeHR1cmVfY2xh
c3NfaWQsCi0gICAgICBUZXN0OjpTZXRVcFRlc3RDYXNlRnVuYyBzZXRfdXBfdGMsCi0gICAgICBU
ZXN0OjpUZWFyRG93blRlc3RDYXNlRnVuYyB0ZWFyX2Rvd25fdGMsCi0gICAgICBpbnRlcm5hbDo6
VGVzdEZhY3RvcnlCYXNlKiBmYWN0b3J5KTsKLQotICAvLyBDb25zdHJ1Y3RzIGEgVGVzdEluZm8g
b2JqZWN0LiBUaGUgbmV3bHkgY29uc3RydWN0ZWQgaW5zdGFuY2UgYXNzdW1lcwotICAvLyBvd25l
cnNoaXAgb2YgdGhlIGZhY3Rvcnkgb2JqZWN0LgotICBUZXN0SW5mbyhjb25zdCBzdGQ6OnN0cmlu
ZyYgdGVzdF9jYXNlX25hbWUsCi0gICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAot
ICAgICAgICAgICBjb25zdCBjaGFyKiBhX3R5cGVfcGFyYW0sICAgLy8gTlVMTCBpZiBub3QgYSB0
eXBlLXBhcmFtZXRlcml6ZWQgdGVzdAotICAgICAgICAgICBjb25zdCBjaGFyKiBhX3ZhbHVlX3Bh
cmFtLCAgLy8gTlVMTCBpZiBub3QgYSB2YWx1ZS1wYXJhbWV0ZXJpemVkIHRlc3QKLSAgICAgICAg
ICAgaW50ZXJuYWw6OkNvZGVMb2NhdGlvbiBhX2NvZGVfbG9jYXRpb24sCi0gICAgICAgICAgIGlu
dGVybmFsOjpUeXBlSWQgZml4dHVyZV9jbGFzc19pZCwKLSAgICAgICAgICAgaW50ZXJuYWw6OlRl
c3RGYWN0b3J5QmFzZSogZmFjdG9yeSk7Ci0KLSAgLy8gSW5jcmVtZW50cyB0aGUgbnVtYmVyIG9m
IGRlYXRoIHRlc3RzIGVuY291bnRlcmVkIGluIHRoaXMgdGVzdCBzbwotICAvLyBmYXIuCi0gIGlu
dCBpbmNyZW1lbnRfZGVhdGhfdGVzdF9jb3VudCgpIHsKLSAgICByZXR1cm4gcmVzdWx0Xy5pbmNy
ZW1lbnRfZGVhdGhfdGVzdF9jb3VudCgpOwotICB9Ci0KLSAgLy8gQ3JlYXRlcyB0aGUgdGVzdCBv
YmplY3QsIHJ1bnMgaXQsIHJlY29yZHMgaXRzIHJlc3VsdCwgYW5kIHRoZW4KLSAgLy8gZGVsZXRl
cyBpdC4KLSAgdm9pZCBSdW4oKTsKLQotICBzdGF0aWMgdm9pZCBDbGVhclRlc3RSZXN1bHQoVGVz
dEluZm8qIHRlc3RfaW5mbykgewotICAgIHRlc3RfaW5mby0+cmVzdWx0Xy5DbGVhcigpOwotICB9
Ci0KLSAgLy8gVGhlc2UgZmllbGRzIGFyZSBpbW11dGFibGUgcHJvcGVydGllcyBvZiB0aGUgdGVz
dC4KLSAgY29uc3Qgc3RkOjpzdHJpbmcgdGVzdF9jYXNlX25hbWVfOyAgICAgLy8gVGVzdCBjYXNl
IG5hbWUKLSAgY29uc3Qgc3RkOjpzdHJpbmcgbmFtZV87ICAgICAgICAgICAgICAgLy8gVGVzdCBu
YW1lCi0gIC8vIE5hbWUgb2YgdGhlIHBhcmFtZXRlciB0eXBlLCBvciBOVUxMIGlmIHRoaXMgaXMg
bm90IGEgdHlwZWQgb3IgYQotICAvLyB0eXBlLXBhcmFtZXRlcml6ZWQgdGVzdC4KLSAgY29uc3Qg
aW50ZXJuYWw6OnNjb3BlZF9wdHI8Y29uc3QgOjpzdGQ6OnN0cmluZz4gdHlwZV9wYXJhbV87Ci0g
IC8vIFRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIHBhcmFtZXRlciwgb3IgTlVMTCBp
ZiB0aGlzIGlzIG5vdCBhCi0gIC8vIHZhbHVlLXBhcmFtZXRlcml6ZWQgdGVzdC4KLSAgY29uc3Qg
aW50ZXJuYWw6OnNjb3BlZF9wdHI8Y29uc3QgOjpzdGQ6OnN0cmluZz4gdmFsdWVfcGFyYW1fOwot
ICBpbnRlcm5hbDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uXzsKLSAgY29uc3QgaW50ZXJuYWw6OlR5
cGVJZCBmaXh0dXJlX2NsYXNzX2lkXzsgICAvLyBJRCBvZiB0aGUgdGVzdCBmaXh0dXJlIGNsYXNz
Ci0gIGJvb2wgc2hvdWxkX3J1bl87ICAgICAgICAgICAgICAgICAvLyBUcnVlIGlmZiB0aGlzIHRl
c3Qgc2hvdWxkIHJ1bgotICBib29sIGlzX2Rpc2FibGVkXzsgICAgICAgICAgICAgICAgLy8gVHJ1
ZSBpZmYgdGhpcyB0ZXN0IGlzIGRpc2FibGVkCi0gIGJvb2wgbWF0Y2hlc19maWx0ZXJfOyAgICAg
ICAgICAgICAvLyBUcnVlIGlmIHRoaXMgdGVzdCBtYXRjaGVzIHRoZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdXNlci1zcGVjaWZpZWQgZmlsdGVyLgotICBpbnRlcm5h
bDo6VGVzdEZhY3RvcnlCYXNlKiBjb25zdCBmYWN0b3J5XzsgIC8vIFRoZSBmYWN0b3J5IHRoYXQg
Y3JlYXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRoZSB0ZXN0IG9iamVjdAotCi0gIC8vIFRoaXMgZmllbGQgaXMgbXV0YWJsZSBhbmQgbmVlZHMg
dG8gYmUgcmVzZXQgYmVmb3JlIHJ1bm5pbmcgdGhlCi0gIC8vIHRlc3QgZm9yIHRoZSBzZWNvbmQg
dGltZS4KLSAgVGVzdFJlc3VsdCByZXN1bHRfOwotCi0gIEdURVNUX0RJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTl8oVGVzdEluZm8pOwotfTsKLQotLy8gQSB0ZXN0IGNhc2UsIHdoaWNoIGNvbnNpc3Rz
IG9mIGEgdmVjdG9yIG9mIFRlc3RJbmZvcy4KLS8vCi0vLyBUZXN0Q2FzZSBpcyBub3QgY29weWFi
bGUuCi1jbGFzcyBHVEVTVF9BUElfIFRlc3RDYXNlIHsKLSBwdWJsaWM6Ci0gIC8vIENyZWF0ZXMg
YSBUZXN0Q2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgotICAvLwotICAvLyBUZXN0Q2FzZSBkb2Vz
IE5PVCBoYXZlIGEgZGVmYXVsdCBjb25zdHJ1Y3Rvci4gIEFsd2F5cyB1c2UgdGhpcwotICAvLyBj
b25zdHJ1Y3RvciB0byBjcmVhdGUgYSBUZXN0Q2FzZSBvYmplY3QuCi0gIC8vCi0gIC8vIEFyZ3Vt
ZW50czoKLSAgLy8KLSAgLy8gICBuYW1lOiAgICAgICAgIG5hbWUgb2YgdGhlIHRlc3QgY2FzZQot
ICAvLyAgIGFfdHlwZV9wYXJhbTogdGhlIG5hbWUgb2YgdGhlIHRlc3QncyB0eXBlIHBhcmFtZXRl
ciwgb3IgTlVMTCBpZgotICAvLyAgICAgICAgICAgICAgICAgdGhpcyBpcyBub3QgYSB0eXBlLXBh
cmFtZXRlcml6ZWQgdGVzdC4KLSAgLy8gICBzZXRfdXBfdGM6ICAgIHBvaW50ZXIgdG8gdGhlIGZ1
bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgdGVzdCBjYXNlCi0gIC8vICAgdGVhcl9kb3duX3RjOiBw
b2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHRlYXJzIGRvd24gdGhlIHRlc3QgY2FzZQotICBU
ZXN0Q2FzZShjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBhX3R5cGVfcGFyYW0sCi0gICAg
ICAgICAgIFRlc3Q6OlNldFVwVGVzdENhc2VGdW5jIHNldF91cF90YywKLSAgICAgICAgICAgVGVz
dDo6VGVhckRvd25UZXN0Q2FzZUZ1bmMgdGVhcl9kb3duX3RjKTsKLQotICAvLyBEZXN0cnVjdG9y
IG9mIFRlc3RDYXNlLgotICB2aXJ0dWFsIH5UZXN0Q2FzZSgpOwotCi0gIC8vIEdldHMgdGhlIG5h
bWUgb2YgdGhlIFRlc3RDYXNlLgotICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
bmFtZV8uY19zdHIoKTsgfQotCi0gIC8vIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRl
ciB0eXBlLCBvciBOVUxMIGlmIHRoaXMgaXMgbm90IGEKLSAgLy8gdHlwZS1wYXJhbWV0ZXJpemVk
IHRlc3QgY2FzZS4KLSAgY29uc3QgY2hhciogdHlwZV9wYXJhbSgpIGNvbnN0IHsKLSAgICBpZiAo
dHlwZV9wYXJhbV8uZ2V0KCkgIT0gTlVMTCkKLSAgICAgIHJldHVybiB0eXBlX3BhcmFtXy0+Y19z
dHIoKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkg
dGVzdCBpbiB0aGlzIHRlc3QgY2FzZSBzaG91bGQgcnVuLgotICBib29sIHNob3VsZF9ydW4oKSBj
b25zdCB7IHJldHVybiBzaG91bGRfcnVuXzsgfQotCi0gIC8vIEdldHMgdGhlIG51bWJlciBvZiBz
dWNjZXNzZnVsIHRlc3RzIGluIHRoaXMgdGVzdCBjYXNlLgotICBpbnQgc3VjY2Vzc2Z1bF90ZXN0
X2NvdW50KCkgY29uc3Q7Ci0KLSAgLy8gR2V0cyB0aGUgbnVtYmVyIG9mIGZhaWxlZCB0ZXN0cyBp
biB0aGlzIHRlc3QgY2FzZS4KLSAgaW50IGZhaWxlZF90ZXN0X2NvdW50KCkgY29uc3Q7Ci0KLSAg
Ly8gR2V0cyB0aGUgbnVtYmVyIG9mIGRpc2FibGVkIHRlc3RzIHRoYXQgd2lsbCBiZSByZXBvcnRl
ZCBpbiB0aGUgWE1MIHJlcG9ydC4KLSAgaW50IHJlcG9ydGFibGVfZGlzYWJsZWRfdGVzdF9jb3Vu
dCgpIGNvbnN0OwotCi0gIC8vIEdldHMgdGhlIG51bWJlciBvZiBkaXNhYmxlZCB0ZXN0cyBpbiB0
aGlzIHRlc3QgY2FzZS4KLSAgaW50IGRpc2FibGVkX3Rlc3RfY291bnQoKSBjb25zdDsKLQotICAv
LyBHZXRzIHRoZSBudW1iZXIgb2YgdGVzdHMgdG8gYmUgcHJpbnRlZCBpbiB0aGUgWE1MIHJlcG9y
dC4KLSAgaW50IHJlcG9ydGFibGVfdGVzdF9jb3VudCgpIGNvbnN0OwotCi0gIC8vIEdldCB0aGUg
bnVtYmVyIG9mIHRlc3RzIGluIHRoaXMgdGVzdCBjYXNlIHRoYXQgc2hvdWxkIHJ1bi4KLSAgaW50
IHRlc3RfdG9fcnVuX2NvdW50KCkgY29uc3Q7Ci0KLSAgLy8gR2V0cyB0aGUgbnVtYmVyIG9mIGFs
bCB0ZXN0cyBpbiB0aGlzIHRlc3QgY2FzZS4KLSAgaW50IHRvdGFsX3Rlc3RfY291bnQoKSBjb25z
dDsKLQotICAvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSB0ZXN0IGNhc2UgcGFzc2VkLgotICBib29s
IFBhc3NlZCgpIGNvbnN0IHsgcmV0dXJuICFGYWlsZWQoKTsgfQotCi0gIC8vIFJldHVybnMgdHJ1
ZSBpZmYgdGhlIHRlc3QgY2FzZSBmYWlsZWQuCi0gIGJvb2wgRmFpbGVkKCkgY29uc3QgeyByZXR1
cm4gZmFpbGVkX3Rlc3RfY291bnQoKSA+IDA7IH0KLQotICAvLyBSZXR1cm5zIHRoZSBlbGFwc2Vk
IHRpbWUsIGluIG1pbGxpc2Vjb25kcy4KLSAgVGltZUluTWlsbGlzIGVsYXBzZWRfdGltZSgpIGNv
bnN0IHsgcmV0dXJuIGVsYXBzZWRfdGltZV87IH0KLQotICAvLyBSZXR1cm5zIHRoZSBpLXRoIHRl
c3QgYW1vbmcgYWxsIHRoZSB0ZXN0cy4gaSBjYW4gcmFuZ2UgZnJvbSAwIHRvCi0gIC8vIHRvdGFs
X3Rlc3RfY291bnQoKSAtIDEuIElmIGkgaXMgbm90IGluIHRoYXQgcmFuZ2UsIHJldHVybnMgTlVM
TC4KLSAgY29uc3QgVGVzdEluZm8qIEdldFRlc3RJbmZvKGludCBpKSBjb25zdDsKLQotICAvLyBS
ZXR1cm5zIHRoZSBUZXN0UmVzdWx0IHRoYXQgaG9sZHMgdGVzdCBwcm9wZXJ0aWVzIHJlY29yZGVk
IGR1cmluZwotICAvLyBleGVjdXRpb24gb2YgU2V0VXBUZXN0Q2FzZSBhbmQgVGVhckRvd25UZXN0
Q2FzZS4KLSAgY29uc3QgVGVzdFJlc3VsdCYgYWRfaG9jX3Rlc3RfcmVzdWx0KCkgY29uc3QgeyBy
ZXR1cm4gYWRfaG9jX3Rlc3RfcmVzdWx0XzsgfQotCi0gcHJpdmF0ZToKLSAgZnJpZW5kIGNsYXNz
IFRlc3Q7Ci0gIGZyaWVuZCBjbGFzcyBpbnRlcm5hbDo6VW5pdFRlc3RJbXBsOwotCi0gIC8vIEdl
dHMgdGhlIChtdXRhYmxlKSB2ZWN0b3Igb2YgVGVzdEluZm9zIGluIHRoaXMgVGVzdENhc2UuCi0g
IHN0ZDo6dmVjdG9yPFRlc3RJbmZvKj4mIHRlc3RfaW5mb19saXN0KCkgeyByZXR1cm4gdGVzdF9p
bmZvX2xpc3RfOyB9Ci0KLSAgLy8gR2V0cyB0aGUgKGltbXV0YWJsZSkgdmVjdG9yIG9mIFRlc3RJ
bmZvcyBpbiB0aGlzIFRlc3RDYXNlLgotICBjb25zdCBzdGQ6OnZlY3RvcjxUZXN0SW5mbyo+JiB0
ZXN0X2luZm9fbGlzdCgpIGNvbnN0IHsKLSAgICByZXR1cm4gdGVzdF9pbmZvX2xpc3RfOwotICB9
Ci0KLSAgLy8gUmV0dXJucyB0aGUgaS10aCB0ZXN0IGFtb25nIGFsbCB0aGUgdGVzdHMuIGkgY2Fu
IHJhbmdlIGZyb20gMCB0bwotICAvLyB0b3RhbF90ZXN0X2NvdW50KCkgLSAxLiBJZiBpIGlzIG5v
dCBpbiB0aGF0IHJhbmdlLCByZXR1cm5zIE5VTEwuCi0gIFRlc3RJbmZvKiBHZXRNdXRhYmxlVGVz
dEluZm8oaW50IGkpOwotCi0gIC8vIFNldHMgdGhlIHNob3VsZF9ydW4gbWVtYmVyLgotICB2b2lk
IHNldF9zaG91bGRfcnVuKGJvb2wgc2hvdWxkKSB7IHNob3VsZF9ydW5fID0gc2hvdWxkOyB9Ci0K
LSAgLy8gQWRkcyBhIFRlc3RJbmZvIHRvIHRoaXMgdGVzdCBjYXNlLiAgV2lsbCBkZWxldGUgdGhl
IFRlc3RJbmZvIHVwb24KLSAgLy8gZGVzdHJ1Y3Rpb24gb2YgdGhlIFRlc3RDYXNlIG9iamVjdC4K
LSAgdm9pZCBBZGRUZXN0SW5mbyhUZXN0SW5mbyAqIHRlc3RfaW5mbyk7Ci0KLSAgLy8gQ2xlYXJz
IHRoZSByZXN1bHRzIG9mIGFsbCB0ZXN0cyBpbiB0aGlzIHRlc3QgY2FzZS4KLSAgdm9pZCBDbGVh
clJlc3VsdCgpOwotCi0gIC8vIENsZWFycyB0aGUgcmVzdWx0cyBvZiBhbGwgdGVzdHMgaW4gdGhl
IGdpdmVuIHRlc3QgY2FzZS4KLSAgc3RhdGljIHZvaWQgQ2xlYXJUZXN0Q2FzZVJlc3VsdChUZXN0
Q2FzZSogdGVzdF9jYXNlKSB7Ci0gICAgdGVzdF9jYXNlLT5DbGVhclJlc3VsdCgpOwotICB9Ci0K
LSAgLy8gUnVucyBldmVyeSB0ZXN0IGluIHRoaXMgVGVzdENhc2UuCi0gIHZvaWQgUnVuKCk7Ci0K
LSAgLy8gUnVucyBTZXRVcFRlc3RDYXNlKCkgZm9yIHRoaXMgVGVzdENhc2UuICBUaGlzIHdyYXBw
ZXIgaXMgbmVlZGVkCi0gIC8vIGZvciBjYXRjaGluZyBleGNlcHRpb25zIHRocm93biBmcm9tIFNl
dFVwVGVzdENhc2UoKS4KLSAgdm9pZCBSdW5TZXRVcFRlc3RDYXNlKCkgeyAoKnNldF91cF90Y18p
KCk7IH0KLQotICAvLyBSdW5zIFRlYXJEb3duVGVzdENhc2UoKSBmb3IgdGhpcyBUZXN0Q2FzZS4g
IFRoaXMgd3JhcHBlciBpcwotICAvLyBuZWVkZWQgZm9yIGNhdGNoaW5nIGV4Y2VwdGlvbnMgdGhy
b3duIGZyb20gVGVhckRvd25UZXN0Q2FzZSgpLgotICB2b2lkIFJ1blRlYXJEb3duVGVzdENhc2Uo
KSB7ICgqdGVhcl9kb3duX3RjXykoKTsgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGVzdCBw
YXNzZWQuCi0gIHN0YXRpYyBib29sIFRlc3RQYXNzZWQoY29uc3QgVGVzdEluZm8qIHRlc3RfaW5m
bykgewotICAgIHJldHVybiB0ZXN0X2luZm8tPnNob3VsZF9ydW4oKSAmJiB0ZXN0X2luZm8tPnJl
c3VsdCgpLT5QYXNzZWQoKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGVzdCBmYWls
ZWQuCi0gIHN0YXRpYyBib29sIFRlc3RGYWlsZWQoY29uc3QgVGVzdEluZm8qIHRlc3RfaW5mbykg
ewotICAgIHJldHVybiB0ZXN0X2luZm8tPnNob3VsZF9ydW4oKSAmJiB0ZXN0X2luZm8tPnJlc3Vs
dCgpLT5GYWlsZWQoKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHRlc3QgaXMg
ZGlzYWJsZWQgYW5kIHdpbGwgYmUgcmVwb3J0ZWQgaW4gdGhlIFhNTAotICAvLyByZXBvcnQuCi0g
IHN0YXRpYyBib29sIFRlc3RSZXBvcnRhYmxlRGlzYWJsZWQoY29uc3QgVGVzdEluZm8qIHRlc3Rf
aW5mbykgewotICAgIHJldHVybiB0ZXN0X2luZm8tPmlzX3JlcG9ydGFibGUoKSAmJiB0ZXN0X2lu
Zm8tPmlzX2Rpc2FibGVkXzsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGVzdCBpcyBk
aXNhYmxlZC4KLSAgc3RhdGljIGJvb2wgVGVzdERpc2FibGVkKGNvbnN0IFRlc3RJbmZvKiB0ZXN0
X2luZm8pIHsKLSAgICByZXR1cm4gdGVzdF9pbmZvLT5pc19kaXNhYmxlZF87Ci0gIH0KLQotICAv
LyBSZXR1cm5zIHRydWUgaWZmIHRoaXMgdGVzdCB3aWxsIGFwcGVhciBpbiB0aGUgWE1MIHJlcG9y
dC4KLSAgc3RhdGljIGJvb2wgVGVzdFJlcG9ydGFibGUoY29uc3QgVGVzdEluZm8qIHRlc3RfaW5m
bykgewotICAgIHJldHVybiB0ZXN0X2luZm8tPmlzX3JlcG9ydGFibGUoKTsKLSAgfQotCi0gIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdGVzdCBzaG91bGQgcnVuLgotICBzdGF0aWMgYm9v
bCBTaG91bGRSdW5UZXN0KGNvbnN0IFRlc3RJbmZvKiB0ZXN0X2luZm8pIHsKLSAgICByZXR1cm4g
dGVzdF9pbmZvLT5zaG91bGRfcnVuKCk7Ci0gIH0KLQotICAvLyBTaHVmZmxlcyB0aGUgdGVzdHMg
aW4gdGhpcyB0ZXN0IGNhc2UuCi0gIHZvaWQgU2h1ZmZsZVRlc3RzKGludGVybmFsOjpSYW5kb20q
IHJhbmRvbSk7Ci0KLSAgLy8gUmVzdG9yZXMgdGhlIHRlc3Qgb3JkZXIgdG8gYmVmb3JlIHRoZSBm
aXJzdCBzaHVmZmxlLgotICB2b2lkIFVuc2h1ZmZsZVRlc3RzKCk7Ci0KLSAgLy8gTmFtZSBvZiB0
aGUgdGVzdCBjYXNlLgotICBzdGQ6OnN0cmluZyBuYW1lXzsKLSAgLy8gTmFtZSBvZiB0aGUgcGFy
YW1ldGVyIHR5cGUsIG9yIE5VTEwgaWYgdGhpcyBpcyBub3QgYSB0eXBlZCBvciBhCi0gIC8vIHR5
cGUtcGFyYW1ldGVyaXplZCB0ZXN0LgotICBjb25zdCBpbnRlcm5hbDo6c2NvcGVkX3B0cjxjb25z
dCA6OnN0ZDo6c3RyaW5nPiB0eXBlX3BhcmFtXzsKLSAgLy8gVGhlIHZlY3RvciBvZiBUZXN0SW5m
b3MgaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIuICBJdCBvd25zIHRoZQotICAvLyBlbGVtZW50cyBp
biB0aGUgdmVjdG9yLgotICBzdGQ6OnZlY3RvcjxUZXN0SW5mbyo+IHRlc3RfaW5mb19saXN0XzsK
LSAgLy8gUHJvdmlkZXMgYSBsZXZlbCBvZiBpbmRpcmVjdGlvbiBmb3IgdGhlIHRlc3QgbGlzdCB0
byBhbGxvdyBlYXN5Ci0gIC8vIHNodWZmbGluZyBhbmQgcmVzdG9yaW5nIHRoZSB0ZXN0IG9yZGVy
LiAgVGhlIGktdGggZWxlbWVudCBpbiB0aGlzCi0gIC8vIHZlY3RvciBpcyB0aGUgaW5kZXggb2Yg
dGhlIGktdGggdGVzdCBpbiB0aGUgc2h1ZmZsZWQgdGVzdCBsaXN0LgotICBzdGQ6OnZlY3Rvcjxp
bnQ+IHRlc3RfaW5kaWNlc187Ci0gIC8vIFBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgc2V0
cyB1cCB0aGUgdGVzdCBjYXNlLgotICBUZXN0OjpTZXRVcFRlc3RDYXNlRnVuYyBzZXRfdXBfdGNf
OwotICAvLyBQb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHRlYXJzIGRvd24gdGhlIHRlc3Qg
Y2FzZS4KLSAgVGVzdDo6VGVhckRvd25UZXN0Q2FzZUZ1bmMgdGVhcl9kb3duX3RjXzsKLSAgLy8g
VHJ1ZSBpZmYgYW55IHRlc3QgaW4gdGhpcyB0ZXN0IGNhc2Ugc2hvdWxkIHJ1bi4KLSAgYm9vbCBz
aG91bGRfcnVuXzsKLSAgLy8gRWxhcHNlZCB0aW1lLCBpbiBtaWxsaXNlY29uZHMuCi0gIFRpbWVJ
bk1pbGxpcyBlbGFwc2VkX3RpbWVfOwotICAvLyBIb2xkcyB0ZXN0IHByb3BlcnRpZXMgcmVjb3Jk
ZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBTZXRVcFRlc3RDYXNlIGFuZAotICAvLyBUZWFyRG93blRl
c3RDYXNlLgotICBUZXN0UmVzdWx0IGFkX2hvY190ZXN0X3Jlc3VsdF87Ci0KLSAgLy8gV2UgZGlz
YWxsb3cgY29weWluZyBUZXN0Q2FzZXMuCi0gIEdURVNUX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
Tl8oVGVzdENhc2UpOwotfTsKLQotLy8gQW4gRW52aXJvbm1lbnQgb2JqZWN0IGlzIGNhcGFibGUg
b2Ygc2V0dGluZyB1cCBhbmQgdGVhcmluZyBkb3duIGFuCi0vLyBlbnZpcm9ubWVudC4gIFlvdSBz
aG91bGQgc3ViY2xhc3MgdGhpcyB0byBkZWZpbmUgeW91ciBvd24KLS8vIGVudmlyb25tZW50KHMp
LgotLy8KLS8vIEFuIEVudmlyb25tZW50IG9iamVjdCBkb2VzIHRoZSBzZXQtdXAgYW5kIHRlYXIt
ZG93biBpbiB2aXJ0dWFsCi0vLyBtZXRob2RzIFNldFVwKCkgYW5kIFRlYXJEb3duKCkgaW5zdGVh
ZCBvZiB0aGUgY29uc3RydWN0b3IgYW5kIHRoZQotLy8gZGVzdHJ1Y3RvciwgYXM6Ci0vLwotLy8g
ICAxLiBZb3UgY2Fubm90IHNhZmVseSB0aHJvdyBmcm9tIGEgZGVzdHJ1Y3Rvci4gIFRoaXMgaXMg
YSBwcm9ibGVtCi0vLyAgICAgIGFzIGluIHNvbWUgY2FzZXMgR29vZ2xlIFRlc3QgaXMgdXNlZCB3
aGVyZSBleGNlcHRpb25zIGFyZSBlbmFibGVkLCBhbmQKLS8vICAgICAgd2UgbWF5IHdhbnQgdG8g
aW1wbGVtZW50IEFTU0VSVF8qIHVzaW5nIGV4Y2VwdGlvbnMgd2hlcmUgdGhleSBhcmUKLS8vICAg
ICAgYXZhaWxhYmxlLgotLy8gICAyLiBZb3UgY2Fubm90IHVzZSBBU1NFUlRfKiBkaXJlY3RseSBp
biBhIGNvbnN0cnVjdG9yIG9yCi0vLyAgICAgIGRlc3RydWN0b3IuCi1jbGFzcyBFbnZpcm9ubWVu
dCB7Ci0gcHVibGljOgotICAvLyBUaGUgZCd0b3IgaXMgdmlydHVhbCBhcyB3ZSBuZWVkIHRvIHN1
YmNsYXNzIEVudmlyb25tZW50LgotICB2aXJ0dWFsIH5FbnZpcm9ubWVudCgpIHt9Ci0KLSAgLy8g
T3ZlcnJpZGUgdGhpcyB0byBkZWZpbmUgaG93IHRvIHNldCB1cCB0aGUgZW52aXJvbm1lbnQuCi0g
IHZpcnR1YWwgdm9pZCBTZXRVcCgpIHt9Ci0KLSAgLy8gT3ZlcnJpZGUgdGhpcyB0byBkZWZpbmUg
aG93IHRvIHRlYXIgZG93biB0aGUgZW52aXJvbm1lbnQuCi0gIHZpcnR1YWwgdm9pZCBUZWFyRG93
bigpIHt9Ci0gcHJpdmF0ZToKLSAgLy8gSWYgeW91IHNlZSBhbiBlcnJvciBhYm91dCBvdmVycmlk
aW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gb3IKLSAgLy8gYWJvdXQgaXQgYmVpbmcgcHJpdmF0
ZSwgeW91IGhhdmUgbWlzLXNwZWxsZWQgU2V0VXAoKSBhcyBTZXR1cCgpLgotICBzdHJ1Y3QgU2V0
dXBfc2hvdWxkX2JlX3NwZWxsZWRfU2V0VXAge307Ci0gIHZpcnR1YWwgU2V0dXBfc2hvdWxkX2Jl
X3NwZWxsZWRfU2V0VXAqIFNldHVwKCkgeyByZXR1cm4gTlVMTDsgfQotfTsKLQotLy8gVGhlIGlu
dGVyZmFjZSBmb3IgdHJhY2luZyBleGVjdXRpb24gb2YgdGVzdHMuIFRoZSBtZXRob2RzIGFyZSBv
cmdhbml6ZWQgaW4KLS8vIHRoZSBvcmRlciB0aGUgY29ycmVzcG9uZGluZyBldmVudHMgYXJlIGZp
cmVkLgotY2xhc3MgVGVzdEV2ZW50TGlzdGVuZXIgewotIHB1YmxpYzoKLSAgdmlydHVhbCB+VGVz
dEV2ZW50TGlzdGVuZXIoKSB7fQotCi0gIC8vIEZpcmVkIGJlZm9yZSBhbnkgdGVzdCBhY3Rpdml0
eSBzdGFydHMuCi0gIHZpcnR1YWwgdm9pZCBPblRlc3RQcm9ncmFtU3RhcnQoY29uc3QgVW5pdFRl
c3QmIHVuaXRfdGVzdCkgPSAwOwotCi0gIC8vIEZpcmVkIGJlZm9yZSBlYWNoIGl0ZXJhdGlvbiBv
ZiB0ZXN0cyBzdGFydHMuICBUaGVyZSBtYXkgYmUgbW9yZSB0aGFuCi0gIC8vIG9uZSBpdGVyYXRp
b24gaWYgR1RFU1RfRkxBRyhyZXBlYXQpIGlzIHNldC4gaXRlcmF0aW9uIGlzIHRoZSBpdGVyYXRp
b24KLSAgLy8gaW5kZXgsIHN0YXJ0aW5nIGZyb20gMC4KLSAgdmlydHVhbCB2b2lkIE9uVGVzdEl0
ZXJhdGlvblN0YXJ0KGNvbnN0IFVuaXRUZXN0JiB1bml0X3Rlc3QsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaXRlcmF0aW9uKSA9IDA7Ci0KLSAgLy8gRmlyZWQgYmVm
b3JlIGVudmlyb25tZW50IHNldC11cCBmb3IgZWFjaCBpdGVyYXRpb24gb2YgdGVzdHMgc3RhcnRz
LgotICB2aXJ0dWFsIHZvaWQgT25FbnZpcm9ubWVudHNTZXRVcFN0YXJ0KGNvbnN0IFVuaXRUZXN0
JiB1bml0X3Rlc3QpID0gMDsKLQotICAvLyBGaXJlZCBhZnRlciBlbnZpcm9ubWVudCBzZXQtdXAg
Zm9yIGVhY2ggaXRlcmF0aW9uIG9mIHRlc3RzIGVuZHMuCi0gIHZpcnR1YWwgdm9pZCBPbkVudmly
b25tZW50c1NldFVwRW5kKGNvbnN0IFVuaXRUZXN0JiB1bml0X3Rlc3QpID0gMDsKLQotICAvLyBG
aXJlZCBiZWZvcmUgdGhlIHRlc3QgY2FzZSBzdGFydHMuCi0gIHZpcnR1YWwgdm9pZCBPblRlc3RD
YXNlU3RhcnQoY29uc3QgVGVzdENhc2UmIHRlc3RfY2FzZSkgPSAwOwotCi0gIC8vIEZpcmVkIGJl
Zm9yZSB0aGUgdGVzdCBzdGFydHMuCi0gIHZpcnR1YWwgdm9pZCBPblRlc3RTdGFydChjb25zdCBU
ZXN0SW5mbyYgdGVzdF9pbmZvKSA9IDA7Ci0KLSAgLy8gRmlyZWQgYWZ0ZXIgYSBmYWlsZWQgYXNz
ZXJ0aW9uIG9yIGEgU1VDQ0VFRCgpIGludm9jYXRpb24uCi0gIHZpcnR1YWwgdm9pZCBPblRlc3RQ
YXJ0UmVzdWx0KGNvbnN0IFRlc3RQYXJ0UmVzdWx0JiB0ZXN0X3BhcnRfcmVzdWx0KSA9IDA7Ci0K
LSAgLy8gRmlyZWQgYWZ0ZXIgdGhlIHRlc3QgZW5kcy4KLSAgdmlydHVhbCB2b2lkIE9uVGVzdEVu
ZChjb25zdCBUZXN0SW5mbyYgdGVzdF9pbmZvKSA9IDA7Ci0KLSAgLy8gRmlyZWQgYWZ0ZXIgdGhl
IHRlc3QgY2FzZSBlbmRzLgotICB2aXJ0dWFsIHZvaWQgT25UZXN0Q2FzZUVuZChjb25zdCBUZXN0
Q2FzZSYgdGVzdF9jYXNlKSA9IDA7Ci0KLSAgLy8gRmlyZWQgYmVmb3JlIGVudmlyb25tZW50IHRl
YXItZG93biBmb3IgZWFjaCBpdGVyYXRpb24gb2YgdGVzdHMgc3RhcnRzLgotICB2aXJ0dWFsIHZv
aWQgT25FbnZpcm9ubWVudHNUZWFyRG93blN0YXJ0KGNvbnN0IFVuaXRUZXN0JiB1bml0X3Rlc3Qp
ID0gMDsKLQotICAvLyBGaXJlZCBhZnRlciBlbnZpcm9ubWVudCB0ZWFyLWRvd24gZm9yIGVhY2gg
aXRlcmF0aW9uIG9mIHRlc3RzIGVuZHMuCi0gIHZpcnR1YWwgdm9pZCBPbkVudmlyb25tZW50c1Rl
YXJEb3duRW5kKGNvbnN0IFVuaXRUZXN0JiB1bml0X3Rlc3QpID0gMDsKLQotICAvLyBGaXJlZCBh
ZnRlciBlYWNoIGl0ZXJhdGlvbiBvZiB0ZXN0cyBmaW5pc2hlcy4KLSAgdmlydHVhbCB2b2lkIE9u
VGVzdEl0ZXJhdGlvbkVuZChjb25zdCBVbml0VGVzdCYgdW5pdF90ZXN0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpdGVyYXRpb24pID0gMDsKLQotICAvLyBGaXJlZCBh
ZnRlciBhbGwgdGVzdCBhY3Rpdml0aWVzIGhhdmUgZW5kZWQuCi0gIHZpcnR1YWwgdm9pZCBPblRl
c3RQcm9ncmFtRW5kKGNvbnN0IFVuaXRUZXN0JiB1bml0X3Rlc3QpID0gMDsKLX07Ci0KLS8vIFRo
ZSBjb252ZW5pZW5jZSBjbGFzcyBmb3IgdXNlcnMgd2hvIG5lZWQgdG8gb3ZlcnJpZGUganVzdCBv
bmUgb3IgdHdvCi0vLyBtZXRob2RzIGFuZCBhcmUgbm90IGNvbmNlcm5lZCB0aGF0IGEgcG9zc2li
bGUgY2hhbmdlIHRvIGEgc2lnbmF0dXJlIG9mCi0vLyB0aGUgbWV0aG9kcyB0aGV5IG92ZXJyaWRl
IHdpbGwgbm90IGJlIGNhdWdodCBkdXJpbmcgdGhlIGJ1aWxkLiAgRm9yCi0vLyBjb21tZW50cyBh
Ym91dCBlYWNoIG1ldGhvZCBwbGVhc2Ugc2VlIHRoZSBkZWZpbml0aW9uIG9mIFRlc3RFdmVudExp
c3RlbmVyCi0vLyBhYm92ZS4KLWNsYXNzIEVtcHR5VGVzdEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMg
VGVzdEV2ZW50TGlzdGVuZXIgewotIHB1YmxpYzoKLSAgdmlydHVhbCB2b2lkIE9uVGVzdFByb2dy
YW1TdGFydChjb25zdCBVbml0VGVzdCYgLyp1bml0X3Rlc3QqLykge30KLSAgdmlydHVhbCB2b2lk
IE9uVGVzdEl0ZXJhdGlvblN0YXJ0KGNvbnN0IFVuaXRUZXN0JiAvKnVuaXRfdGVzdCovLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qaXRlcmF0aW9uKi8pIHt9Ci0g
IHZpcnR1YWwgdm9pZCBPbkVudmlyb25tZW50c1NldFVwU3RhcnQoY29uc3QgVW5pdFRlc3QmIC8q
dW5pdF90ZXN0Ki8pIHt9Ci0gIHZpcnR1YWwgdm9pZCBPbkVudmlyb25tZW50c1NldFVwRW5kKGNv
bnN0IFVuaXRUZXN0JiAvKnVuaXRfdGVzdCovKSB7fQotICB2aXJ0dWFsIHZvaWQgT25UZXN0Q2Fz
ZVN0YXJ0KGNvbnN0IFRlc3RDYXNlJiAvKnRlc3RfY2FzZSovKSB7fQotICB2aXJ0dWFsIHZvaWQg
T25UZXN0U3RhcnQoY29uc3QgVGVzdEluZm8mIC8qdGVzdF9pbmZvKi8pIHt9Ci0gIHZpcnR1YWwg
dm9pZCBPblRlc3RQYXJ0UmVzdWx0KGNvbnN0IFRlc3RQYXJ0UmVzdWx0JiAvKnRlc3RfcGFydF9y
ZXN1bHQqLykge30KLSAgdmlydHVhbCB2b2lkIE9uVGVzdEVuZChjb25zdCBUZXN0SW5mbyYgLyp0
ZXN0X2luZm8qLykge30KLSAgdmlydHVhbCB2b2lkIE9uVGVzdENhc2VFbmQoY29uc3QgVGVzdENh
c2UmIC8qdGVzdF9jYXNlKi8pIHt9Ci0gIHZpcnR1YWwgdm9pZCBPbkVudmlyb25tZW50c1RlYXJE
b3duU3RhcnQoY29uc3QgVW5pdFRlc3QmIC8qdW5pdF90ZXN0Ki8pIHt9Ci0gIHZpcnR1YWwgdm9p
ZCBPbkVudmlyb25tZW50c1RlYXJEb3duRW5kKGNvbnN0IFVuaXRUZXN0JiAvKnVuaXRfdGVzdCov
KSB7fQotICB2aXJ0dWFsIHZvaWQgT25UZXN0SXRlcmF0aW9uRW5kKGNvbnN0IFVuaXRUZXN0JiAv
KnVuaXRfdGVzdCovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKml0
ZXJhdGlvbiovKSB7fQotICB2aXJ0dWFsIHZvaWQgT25UZXN0UHJvZ3JhbUVuZChjb25zdCBVbml0
VGVzdCYgLyp1bml0X3Rlc3QqLykge30KLX07Ci0KLS8vIFRlc3RFdmVudExpc3RlbmVycyBsZXRz
IHVzZXJzIGFkZCBsaXN0ZW5lcnMgdG8gdHJhY2sgZXZlbnRzIGluIEdvb2dsZSBUZXN0LgotY2xh
c3MgR1RFU1RfQVBJXyBUZXN0RXZlbnRMaXN0ZW5lcnMgewotIHB1YmxpYzoKLSAgVGVzdEV2ZW50
TGlzdGVuZXJzKCk7Ci0gIH5UZXN0RXZlbnRMaXN0ZW5lcnMoKTsKLQotICAvLyBBcHBlbmRzIGFu
IGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuIEdvb2dsZSBUZXN0IGFzc3Vt
ZXMKLSAgLy8gdGhlIG93bmVyc2hpcCBvZiB0aGUgbGlzdGVuZXIgKGkuZS4gaXQgd2lsbCBkZWxl
dGUgdGhlIGxpc3RlbmVyIHdoZW4KLSAgLy8gdGhlIHRlc3QgcHJvZ3JhbSBmaW5pc2hlcykuCi0g
IHZvaWQgQXBwZW5kKFRlc3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lcik7Ci0KLSAgLy8gUmVtb3Zl
cyB0aGUgZ2l2ZW4gZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGUgbGlzdCBhbmQgcmV0dXJucyBpdC4g
IEl0IHRoZW4KLSAgLy8gYmVjb21lcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZGVs
ZXRlIHRoZSBsaXN0ZW5lci4gUmV0dXJucwotICAvLyBOVUxMIGlmIHRoZSBsaXN0ZW5lciBpcyBu
b3QgZm91bmQgaW4gdGhlIGxpc3QuCi0gIFRlc3RFdmVudExpc3RlbmVyKiBSZWxlYXNlKFRlc3RF
dmVudExpc3RlbmVyKiBsaXN0ZW5lcik7Ci0KLSAgLy8gUmV0dXJucyB0aGUgc3RhbmRhcmQgbGlz
dGVuZXIgcmVzcG9uc2libGUgZm9yIHRoZSBkZWZhdWx0IGNvbnNvbGUKLSAgLy8gb3V0cHV0LiAg
Q2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdGVuZXJzIGxpc3QgdG8gc2h1dCBkb3duIGRlZmF1
bHQKLSAgLy8gY29uc29sZSBvdXRwdXQuICBOb3RlIHRoYXQgcmVtb3ZpbmcgdGhpcyBvYmplY3Qg
ZnJvbSB0aGUgbGlzdGVuZXIgbGlzdAotICAvLyB3aXRoIFJlbGVhc2UgdHJhbnNmZXJzIGl0cyBv
d25lcnNoaXAgdG8gdGhlIGNhbGxlciBhbmQgbWFrZXMgdGhpcwotICAvLyBmdW5jdGlvbiByZXR1
cm4gTlVMTCB0aGUgbmV4dCB0aW1lLgotICBUZXN0RXZlbnRMaXN0ZW5lciogZGVmYXVsdF9yZXN1
bHRfcHJpbnRlcigpIGNvbnN0IHsKLSAgICByZXR1cm4gZGVmYXVsdF9yZXN1bHRfcHJpbnRlcl87
Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBzdGFuZGFyZCBsaXN0ZW5lciByZXNwb25zaWJsZSBm
b3IgdGhlIGRlZmF1bHQgWE1MIG91dHB1dAotICAvLyBjb250cm9sbGVkIGJ5IHRoZSAtLWd0ZXN0
X291dHB1dD14bWwgZmxhZy4gIENhbiBiZSByZW1vdmVkIGZyb20gdGhlCi0gIC8vIGxpc3RlbmVy
cyBsaXN0IGJ5IHVzZXJzIHdobyB3YW50IHRvIHNodXQgZG93biB0aGUgZGVmYXVsdCBYTUwgb3V0
cHV0Ci0gIC8vIGNvbnRyb2xsZWQgYnkgdGhpcyBmbGFnIGFuZCBzdWJzdGl0dXRlIGl0IHdpdGgg
Y3VzdG9tIG9uZS4gIE5vdGUgdGhhdAotICAvLyByZW1vdmluZyB0aGlzIG9iamVjdCBmcm9tIHRo
ZSBsaXN0ZW5lciBsaXN0IHdpdGggUmVsZWFzZSB0cmFuc2ZlcnMgaXRzCi0gIC8vIG93bmVyc2hp
cCB0byB0aGUgY2FsbGVyIGFuZCBtYWtlcyB0aGlzIGZ1bmN0aW9uIHJldHVybiBOVUxMIHRoZSBu
ZXh0Ci0gIC8vIHRpbWUuCi0gIFRlc3RFdmVudExpc3RlbmVyKiBkZWZhdWx0X3htbF9nZW5lcmF0
b3IoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGRlZmF1bHRfeG1sX2dlbmVyYXRvcl87Ci0gIH0KLQot
IHByaXZhdGU6Ci0gIGZyaWVuZCBjbGFzcyBUZXN0Q2FzZTsKLSAgZnJpZW5kIGNsYXNzIFRlc3RJ
bmZvOwotICBmcmllbmQgY2xhc3MgaW50ZXJuYWw6OkRlZmF1bHRHbG9iYWxUZXN0UGFydFJlc3Vs
dFJlcG9ydGVyOwotICBmcmllbmQgY2xhc3MgaW50ZXJuYWw6Ok5vRXhlY0RlYXRoVGVzdDsKLSAg
ZnJpZW5kIGNsYXNzIGludGVybmFsOjpUZXN0RXZlbnRMaXN0ZW5lcnNBY2Nlc3NvcjsKLSAgZnJp
ZW5kIGNsYXNzIGludGVybmFsOjpVbml0VGVzdEltcGw7Ci0KLSAgLy8gUmV0dXJucyByZXBlYXRl
ciB0aGF0IGJyb2FkY2FzdHMgdGhlIFRlc3RFdmVudExpc3RlbmVyIGV2ZW50cyB0byBhbGwKLSAg
Ly8gc3Vic2NyaWJlcnMuCi0gIFRlc3RFdmVudExpc3RlbmVyKiByZXBlYXRlcigpOwotCi0gIC8v
IFNldHMgdGhlIGRlZmF1bHRfcmVzdWx0X3ByaW50ZXIgYXR0cmlidXRlIHRvIHRoZSBwcm92aWRl
ZCBsaXN0ZW5lci4KLSAgLy8gVGhlIGxpc3RlbmVyIGlzIGFsc28gYWRkZWQgdG8gdGhlIGxpc3Rl
bmVyIGxpc3QgYW5kIHByZXZpb3VzCi0gIC8vIGRlZmF1bHRfcmVzdWx0X3ByaW50ZXIgaXMgcmVt
b3ZlZCBmcm9tIGl0IGFuZCBkZWxldGVkLiBUaGUgbGlzdGVuZXIgY2FuCi0gIC8vIGFsc28gYmUg
TlVMTCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBsaXN0LiBEb2Vz
Ci0gIC8vIG5vdGhpbmcgaWYgdGhlIHByZXZpb3VzIGFuZCB0aGUgY3VycmVudCBsaXN0ZW5lciBv
YmplY3RzIGFyZSB0aGUgc2FtZS4KLSAgdm9pZCBTZXREZWZhdWx0UmVzdWx0UHJpbnRlcihUZXN0
RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpOwotCi0gIC8vIFNldHMgdGhlIGRlZmF1bHRfeG1sX2dl
bmVyYXRvciBhdHRyaWJ1dGUgdG8gdGhlIHByb3ZpZGVkIGxpc3RlbmVyLiAgVGhlCi0gIC8vIGxp
c3RlbmVyIGlzIGFsc28gYWRkZWQgdG8gdGhlIGxpc3RlbmVyIGxpc3QgYW5kIHByZXZpb3VzCi0g
IC8vIGRlZmF1bHRfeG1sX2dlbmVyYXRvciBpcyByZW1vdmVkIGZyb20gaXQgYW5kIGRlbGV0ZWQu
IFRoZSBsaXN0ZW5lciBjYW4KLSAgLy8gYWxzbyBiZSBOVUxMIGluIHdoaWNoIGNhc2UgaXQgd2ls
bCBub3QgYmUgYWRkZWQgdG8gdGhlIGxpc3QuIERvZXMKLSAgLy8gbm90aGluZyBpZiB0aGUgcHJl
dmlvdXMgYW5kIHRoZSBjdXJyZW50IGxpc3RlbmVyIG9iamVjdHMgYXJlIHRoZSBzYW1lLgotICB2
b2lkIFNldERlZmF1bHRYbWxHZW5lcmF0b3IoVGVzdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKTsK
LQotICAvLyBDb250cm9scyB3aGV0aGVyIGV2ZW50cyB3aWxsIGJlIGZvcndhcmRlZCBieSB0aGUg
cmVwZWF0ZXIgdG8gdGhlCi0gIC8vIGxpc3RlbmVycyBpbiB0aGUgbGlzdC4KLSAgYm9vbCBFdmVu
dEZvcndhcmRpbmdFbmFibGVkKCkgY29uc3Q7Ci0gIHZvaWQgU3VwcHJlc3NFdmVudEZvcndhcmRp
bmcoKTsKLQotICAvLyBUaGUgYWN0dWFsIGxpc3Qgb2YgbGlzdGVuZXJzLgotICBpbnRlcm5hbDo6
VGVzdEV2ZW50UmVwZWF0ZXIqIHJlcGVhdGVyXzsKLSAgLy8gTGlzdGVuZXIgcmVzcG9uc2libGUg
Zm9yIHRoZSBzdGFuZGFyZCByZXN1bHQgb3V0cHV0LgotICBUZXN0RXZlbnRMaXN0ZW5lciogZGVm
YXVsdF9yZXN1bHRfcHJpbnRlcl87Ci0gIC8vIExpc3RlbmVyIHJlc3BvbnNpYmxlIGZvciB0aGUg
Y3JlYXRpb24gb2YgdGhlIFhNTCBvdXRwdXQgZmlsZS4KLSAgVGVzdEV2ZW50TGlzdGVuZXIqIGRl
ZmF1bHRfeG1sX2dlbmVyYXRvcl87Ci0KLSAgLy8gV2UgZGlzYWxsb3cgY29weWluZyBUZXN0RXZl
bnRMaXN0ZW5lcnMuCi0gIEdURVNUX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTl8oVGVzdEV2ZW50
TGlzdGVuZXJzKTsKLX07Ci0KLS8vIEEgVW5pdFRlc3QgY29uc2lzdHMgb2YgYSB2ZWN0b3Igb2Yg
VGVzdENhc2VzLgotLy8KLS8vIFRoaXMgaXMgYSBzaW5nbGV0b24gY2xhc3MuICBUaGUgb25seSBp
bnN0YW5jZSBvZiBVbml0VGVzdCBpcwotLy8gY3JlYXRlZCB3aGVuIFVuaXRUZXN0OjpHZXRJbnN0
YW5jZSgpIGlzIGZpcnN0IGNhbGxlZC4gIFRoaXMKLS8vIGluc3RhbmNlIGlzIG5ldmVyIGRlbGV0
ZWQuCi0vLwotLy8gVW5pdFRlc3QgaXMgbm90IGNvcHlhYmxlLgotLy8KLS8vIFRoaXMgY2xhc3Mg
aXMgdGhyZWFkLXNhZmUgYXMgbG9uZyBhcyB0aGUgbWV0aG9kcyBhcmUgY2FsbGVkCi0vLyBhY2Nv
cmRpbmcgdG8gdGhlaXIgc3BlY2lmaWNhdGlvbi4KLWNsYXNzIEdURVNUX0FQSV8gVW5pdFRlc3Qg
ewotIHB1YmxpYzoKLSAgLy8gR2V0cyB0aGUgc2luZ2xldG9uIFVuaXRUZXN0IG9iamVjdC4gIFRo
ZSBmaXJzdCB0aW1lIHRoaXMgbWV0aG9kCi0gIC8vIGlzIGNhbGxlZCwgYSBVbml0VGVzdCBvYmpl
Y3QgaXMgY29uc3RydWN0ZWQgYW5kIHJldHVybmVkLgotICAvLyBDb25zZWN1dGl2ZSBjYWxscyB3
aWxsIHJldHVybiB0aGUgc2FtZSBvYmplY3QuCi0gIHN0YXRpYyBVbml0VGVzdCogR2V0SW5zdGFu
Y2UoKTsKLQotICAvLyBSdW5zIGFsbCB0ZXN0cyBpbiB0aGlzIFVuaXRUZXN0IG9iamVjdCBhbmQg
cHJpbnRzIHRoZSByZXN1bHQuCi0gIC8vIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBvciAxIG90
aGVyd2lzZS4KLSAgLy8KLSAgLy8gVGhpcyBtZXRob2QgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20g
dGhlIG1haW4gdGhyZWFkLgotICAvLwotICAvLyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiAtIERP
IE5PVCBVU0UgSU4gQSBVU0VSIFBST0dSQU0uCi0gIGludCBSdW4oKSBHVEVTVF9NVVNUX1VTRV9S
RVNVTFRfOwotCi0gIC8vIFJldHVybnMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gdGhlIGZp
cnN0IFRFU1QoKSBvciBURVNUX0YoKQotICAvLyB3YXMgZXhlY3V0ZWQuICBUaGUgVW5pdFRlc3Qg
b2JqZWN0IG93bnMgdGhlIHN0cmluZy4KLSAgY29uc3QgY2hhciogb3JpZ2luYWxfd29ya2luZ19k
aXIoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBUZXN0Q2FzZSBvYmplY3QgZm9yIHRoZSB0
ZXN0IHRoYXQncyBjdXJyZW50bHkgcnVubmluZywKLSAgLy8gb3IgTlVMTCBpZiBubyB0ZXN0IGlz
IHJ1bm5pbmcuCi0gIGNvbnN0IFRlc3RDYXNlKiBjdXJyZW50X3Rlc3RfY2FzZSgpIGNvbnN0Ci0g
ICAgICBHVEVTVF9MT0NLX0VYQ0xVREVEXyhtdXRleF8pOwotCi0gIC8vIFJldHVybnMgdGhlIFRl
c3RJbmZvIG9iamVjdCBmb3IgdGhlIHRlc3QgdGhhdCdzIGN1cnJlbnRseSBydW5uaW5nLAotICAv
LyBvciBOVUxMIGlmIG5vIHRlc3QgaXMgcnVubmluZy4KLSAgY29uc3QgVGVzdEluZm8qIGN1cnJl
bnRfdGVzdF9pbmZvKCkgY29uc3QKLSAgICAgIEdURVNUX0xPQ0tfRVhDTFVERURfKG11dGV4Xyk7
Ci0KLSAgLy8gUmV0dXJucyB0aGUgcmFuZG9tIHNlZWQgdXNlZCBhdCB0aGUgc3RhcnQgb2YgdGhl
IGN1cnJlbnQgdGVzdCBydW4uCi0gIGludCByYW5kb21fc2VlZCgpIGNvbnN0OwotCi0jaWYgR1RF
U1RfSEFTX1BBUkFNX1RFU1QKLSAgLy8gUmV0dXJucyB0aGUgUGFyYW1ldGVyaXplZFRlc3RDYXNl
UmVnaXN0cnkgb2JqZWN0IHVzZWQgdG8ga2VlcCB0cmFjayBvZgotICAvLyB2YWx1ZS1wYXJhbWV0
ZXJpemVkIHRlc3RzIGFuZCBpbnN0YW50aWF0ZSBhbmQgcmVnaXN0ZXIgdGhlbS4KLSAgLy8KLSAg
Ly8gSU5URVJOQUwgSU1QTEVNRU5UQVRJT04gLSBETyBOT1QgVVNFIElOIEEgVVNFUiBQUk9HUkFN
LgotICBpbnRlcm5hbDo6UGFyYW1ldGVyaXplZFRlc3RDYXNlUmVnaXN0cnkmIHBhcmFtZXRlcml6
ZWRfdGVzdF9yZWdpc3RyeSgpCi0gICAgICBHVEVTVF9MT0NLX0VYQ0xVREVEXyhtdXRleF8pOwot
I2VuZGlmICAvLyBHVEVTVF9IQVNfUEFSQU1fVEVTVAotCi0gIC8vIEdldHMgdGhlIG51bWJlciBv
ZiBzdWNjZXNzZnVsIHRlc3QgY2FzZXMuCi0gIGludCBzdWNjZXNzZnVsX3Rlc3RfY2FzZV9jb3Vu
dCgpIGNvbnN0OwotCi0gIC8vIEdldHMgdGhlIG51bWJlciBvZiBmYWlsZWQgdGVzdCBjYXNlcy4K
LSAgaW50IGZhaWxlZF90ZXN0X2Nhc2VfY291bnQoKSBjb25zdDsKLQotICAvLyBHZXRzIHRoZSBu
dW1iZXIgb2YgYWxsIHRlc3QgY2FzZXMuCi0gIGludCB0b3RhbF90ZXN0X2Nhc2VfY291bnQoKSBj
b25zdDsKLQotICAvLyBHZXRzIHRoZSBudW1iZXIgb2YgYWxsIHRlc3QgY2FzZXMgdGhhdCBjb250
YWluIGF0IGxlYXN0IG9uZSB0ZXN0Ci0gIC8vIHRoYXQgc2hvdWxkIHJ1bi4KLSAgaW50IHRlc3Rf
Y2FzZV90b19ydW5fY291bnQoKSBjb25zdDsKLQotICAvLyBHZXRzIHRoZSBudW1iZXIgb2Ygc3Vj
Y2Vzc2Z1bCB0ZXN0cy4KLSAgaW50IHN1Y2Nlc3NmdWxfdGVzdF9jb3VudCgpIGNvbnN0OwotCi0g
IC8vIEdldHMgdGhlIG51bWJlciBvZiBmYWlsZWQgdGVzdHMuCi0gIGludCBmYWlsZWRfdGVzdF9j
b3VudCgpIGNvbnN0OwotCi0gIC8vIEdldHMgdGhlIG51bWJlciBvZiBkaXNhYmxlZCB0ZXN0cyB0
aGF0IHdpbGwgYmUgcmVwb3J0ZWQgaW4gdGhlIFhNTCByZXBvcnQuCi0gIGludCByZXBvcnRhYmxl
X2Rpc2FibGVkX3Rlc3RfY291bnQoKSBjb25zdDsKLQotICAvLyBHZXRzIHRoZSBudW1iZXIgb2Yg
ZGlzYWJsZWQgdGVzdHMuCi0gIGludCBkaXNhYmxlZF90ZXN0X2NvdW50KCkgY29uc3Q7Ci0KLSAg
Ly8gR2V0cyB0aGUgbnVtYmVyIG9mIHRlc3RzIHRvIGJlIHByaW50ZWQgaW4gdGhlIFhNTCByZXBv
cnQuCi0gIGludCByZXBvcnRhYmxlX3Rlc3RfY291bnQoKSBjb25zdDsKLQotICAvLyBHZXRzIHRo
ZSBudW1iZXIgb2YgYWxsIHRlc3RzLgotICBpbnQgdG90YWxfdGVzdF9jb3VudCgpIGNvbnN0Owot
Ci0gIC8vIEdldHMgdGhlIG51bWJlciBvZiB0ZXN0cyB0aGF0IHNob3VsZCBydW4uCi0gIGludCB0
ZXN0X3RvX3J1bl9jb3VudCgpIGNvbnN0OwotCi0gIC8vIEdldHMgdGhlIHRpbWUgb2YgdGhlIHRl
c3QgcHJvZ3JhbSBzdGFydCwgaW4gbXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlCi0gIC8vIFVOSVgg
ZXBvY2guCi0gIFRpbWVJbk1pbGxpcyBzdGFydF90aW1lc3RhbXAoKSBjb25zdDsKLQotICAvLyBH
ZXRzIHRoZSBlbGFwc2VkIHRpbWUsIGluIG1pbGxpc2Vjb25kcy4KLSAgVGltZUluTWlsbGlzIGVs
YXBzZWRfdGltZSgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHVuaXQgdGVz
dCBwYXNzZWQgKGkuZS4gYWxsIHRlc3QgY2FzZXMgcGFzc2VkKS4KLSAgYm9vbCBQYXNzZWQoKSBj
b25zdDsKLQotICAvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSB1bml0IHRlc3QgZmFpbGVkIChpLmUu
IHNvbWUgdGVzdCBjYXNlIGZhaWxlZAotICAvLyBvciBzb21ldGhpbmcgb3V0c2lkZSBvZiBhbGwg
dGVzdHMgZmFpbGVkKS4KLSAgYm9vbCBGYWlsZWQoKSBjb25zdDsKLQotICAvLyBHZXRzIHRoZSBp
LXRoIHRlc3QgY2FzZSBhbW9uZyBhbGwgdGhlIHRlc3QgY2FzZXMuIGkgY2FuIHJhbmdlIGZyb20g
MCB0bwotICAvLyB0b3RhbF90ZXN0X2Nhc2VfY291bnQoKSAtIDEuIElmIGkgaXMgbm90IGluIHRo
YXQgcmFuZ2UsIHJldHVybnMgTlVMTC4KLSAgY29uc3QgVGVzdENhc2UqIEdldFRlc3RDYXNlKGlu
dCBpKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBUZXN0UmVzdWx0IGNvbnRhaW5pbmcgaW5m
b3JtYXRpb24gb24gdGVzdCBmYWlsdXJlcyBhbmQKLSAgLy8gcHJvcGVydGllcyBsb2dnZWQgb3V0
c2lkZSBvZiBpbmRpdmlkdWFsIHRlc3QgY2FzZXMuCi0gIGNvbnN0IFRlc3RSZXN1bHQmIGFkX2hv
Y190ZXN0X3Jlc3VsdCgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdGhlIGxpc3Qgb2YgZXZlbnQg
bGlzdGVuZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gdHJhY2sgZXZlbnRzCi0gIC8vIGluc2lkZSBH
b29nbGUgVGVzdC4KLSAgVGVzdEV2ZW50TGlzdGVuZXJzJiBsaXN0ZW5lcnMoKTsKLQotIHByaXZh
dGU6Ci0gIC8vIFJlZ2lzdGVycyBhbmQgcmV0dXJucyBhIGdsb2JhbCB0ZXN0IGVudmlyb25tZW50
LiAgV2hlbiBhIHRlc3QKLSAgLy8gcHJvZ3JhbSBpcyBydW4sIGFsbCBnbG9iYWwgdGVzdCBlbnZp
cm9ubWVudHMgd2lsbCBiZSBzZXQtdXAgaW4KLSAgLy8gdGhlIG9yZGVyIHRoZXkgd2VyZSByZWdp
c3RlcmVkLiAgQWZ0ZXIgYWxsIHRlc3RzIGluIHRoZSBwcm9ncmFtCi0gIC8vIGhhdmUgZmluaXNo
ZWQsIGFsbCBnbG9iYWwgdGVzdCBlbnZpcm9ubWVudHMgd2lsbCBiZSB0b3JuLWRvd24gaW4KLSAg
Ly8gdGhlICpyZXZlcnNlKiBvcmRlciB0aGV5IHdlcmUgcmVnaXN0ZXJlZC4KLSAgLy8KLSAgLy8g
VGhlIFVuaXRUZXN0IG9iamVjdCB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGdpdmVuIGVudmlyb25t
ZW50LgotICAvLwotICAvLyBUaGlzIG1ldGhvZCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSB0aGUg
bWFpbiB0aHJlYWQuCi0gIEVudmlyb25tZW50KiBBZGRFbnZpcm9ubWVudChFbnZpcm9ubWVudCog
ZW52KTsKLQotICAvLyBBZGRzIGEgVGVzdFBhcnRSZXN1bHQgdG8gdGhlIGN1cnJlbnQgVGVzdFJl
c3VsdCBvYmplY3QuICBBbGwKLSAgLy8gR29vZ2xlIFRlc3QgYXNzZXJ0aW9uIG1hY3JvcyAoZS5n
LiBBU1NFUlRfVFJVRSwgRVhQRUNUX0VRLCBldGMpCi0gIC8vIGV2ZW50dWFsbHkgY2FsbCB0aGlz
IHRvIHJlcG9ydCB0aGVpciByZXN1bHRzLiAgVGhlIHVzZXIgY29kZQotICAvLyBzaG91bGQgdXNl
IHRoZSBhc3NlcnRpb24gbWFjcm9zIGluc3RlYWQgb2YgY2FsbGluZyB0aGlzIGRpcmVjdGx5Lgot
ICB2b2lkIEFkZFRlc3RQYXJ0UmVzdWx0KFRlc3RQYXJ0UmVzdWx0OjpUeXBlIHJlc3VsdF90eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVfbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbGluZV9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIG9zX3N0YWNrX3RyYWNlKQotICAgICAgR1RFU1RfTE9DS19F
WENMVURFRF8obXV0ZXhfKTsKLQotICAvLyBBZGRzIGEgVGVzdFByb3BlcnR5IHRvIHRoZSBjdXJy
ZW50IFRlc3RSZXN1bHQgb2JqZWN0IHdoZW4gaW52b2tlZCBmcm9tCi0gIC8vIGluc2lkZSBhIHRl
c3QsIHRvIGN1cnJlbnQgVGVzdENhc2UncyBhZF9ob2NfdGVzdF9yZXN1bHRfIHdoZW4gaW52b2tl
ZAotICAvLyBmcm9tIFNldFVwVGVzdENhc2Ugb3IgVGVhckRvd25UZXN0Q2FzZSwgb3IgdG8gdGhl
IGdsb2JhbCBwcm9wZXJ0eSBzZXQKLSAgLy8gd2hlbiBpbnZva2VkIGVsc2V3aGVyZS4gIElmIHRo
ZSByZXN1bHQgYWxyZWFkeSBjb250YWlucyBhIHByb3BlcnR5IHdpdGgKLSAgLy8gdGhlIHNhbWUg
a2V5LCB0aGUgdmFsdWUgd2lsbCBiZSB1cGRhdGVkLgotICB2b2lkIFJlY29yZFByb3BlcnR5KGNv
bnN0IHN0ZDo6c3RyaW5nJiBrZXksIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0KLSAgLy8g
R2V0cyB0aGUgaS10aCB0ZXN0IGNhc2UgYW1vbmcgYWxsIHRoZSB0ZXN0IGNhc2VzLiBpIGNhbiBy
YW5nZSBmcm9tIDAgdG8KLSAgLy8gdG90YWxfdGVzdF9jYXNlX2NvdW50KCkgLSAxLiBJZiBpIGlz
IG5vdCBpbiB0aGF0IHJhbmdlLCByZXR1cm5zIE5VTEwuCi0gIFRlc3RDYXNlKiBHZXRNdXRhYmxl
VGVzdENhc2UoaW50IGkpOwotCi0gIC8vIEFjY2Vzc29ycyBmb3IgdGhlIGltcGxlbWVudGF0aW9u
IG9iamVjdC4KLSAgaW50ZXJuYWw6OlVuaXRUZXN0SW1wbCogaW1wbCgpIHsgcmV0dXJuIGltcGxf
OyB9Ci0gIGNvbnN0IGludGVybmFsOjpVbml0VGVzdEltcGwqIGltcGwoKSBjb25zdCB7IHJldHVy
biBpbXBsXzsgfQotCi0gIC8vIFRoZXNlIGNsYXNzZXMgYW5kIGZ1bmNpb25zIGFyZSBmcmllbmRz
IGFzIHRoZXkgbmVlZCB0byBhY2Nlc3MgcHJpdmF0ZQotICAvLyBtZW1iZXJzIG9mIFVuaXRUZXN0
LgotICBmcmllbmQgY2xhc3MgVGVzdDsKLSAgZnJpZW5kIGNsYXNzIGludGVybmFsOjpBc3NlcnRI
ZWxwZXI7Ci0gIGZyaWVuZCBjbGFzcyBpbnRlcm5hbDo6U2NvcGVkVHJhY2U7Ci0gIGZyaWVuZCBj
bGFzcyBpbnRlcm5hbDo6U3RyZWFtaW5nTGlzdGVuZXJUZXN0OwotICBmcmllbmQgY2xhc3MgaW50
ZXJuYWw6OlVuaXRUZXN0UmVjb3JkUHJvcGVydHlUZXN0SGVscGVyOwotICBmcmllbmQgRW52aXJv
bm1lbnQqIEFkZEdsb2JhbFRlc3RFbnZpcm9ubWVudChFbnZpcm9ubWVudCogZW52KTsKLSAgZnJp
ZW5kIGludGVybmFsOjpVbml0VGVzdEltcGwqIGludGVybmFsOjpHZXRVbml0VGVzdEltcGwoKTsK
LSAgZnJpZW5kIHZvaWQgaW50ZXJuYWw6OlJlcG9ydEZhaWx1cmVJblVua25vd25Mb2NhdGlvbigK
LSAgICAgIFRlc3RQYXJ0UmVzdWx0OjpUeXBlIHJlc3VsdF90eXBlLAotICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIG1lc3NhZ2UpOwotCi0gIC8vIENyZWF0ZXMgYW4gZW1wdHkgVW5pdFRlc3QuCi0g
IFVuaXRUZXN0KCk7Ci0KLSAgLy8gRCd0b3IKLSAgdmlydHVhbCB+VW5pdFRlc3QoKTsKLQotICAv
LyBQdXNoZXMgYSB0cmFjZSBkZWZpbmVkIGJ5IFNDT1BFRF9UUkFDRSgpIG9uIHRvIHRoZSBwZXIt
dGhyZWFkCi0gIC8vIEdvb2dsZSBUZXN0IHRyYWNlIHN0YWNrLgotICB2b2lkIFB1c2hHVGVzdFRy
YWNlKGNvbnN0IGludGVybmFsOjpUcmFjZUluZm8mIHRyYWNlKQotICAgICAgR1RFU1RfTE9DS19F
WENMVURFRF8obXV0ZXhfKTsKLQotICAvLyBQb3BzIGEgdHJhY2UgZnJvbSB0aGUgcGVyLXRocmVh
ZCBHb29nbGUgVGVzdCB0cmFjZSBzdGFjay4KLSAgdm9pZCBQb3BHVGVzdFRyYWNlKCkKLSAgICAg
IEdURVNUX0xPQ0tfRVhDTFVERURfKG11dGV4Xyk7Ci0KLSAgLy8gUHJvdGVjdHMgbXV0YWJsZSBz
dGF0ZSBpbiAqaW1wbF8uICBUaGlzIGlzIG11dGFibGUgYXMgc29tZSBjb25zdAotICAvLyBtZXRo
b2RzIG5lZWQgdG8gbG9jayBpdCB0b28uCi0gIG11dGFibGUgaW50ZXJuYWw6Ok11dGV4IG11dGV4
XzsKLQotICAvLyBPcGFxdWUgaW1wbGVtZW50YXRpb24gb2JqZWN0LiAgVGhpcyBmaWVsZCBpcyBu
ZXZlciBjaGFuZ2VkIG9uY2UKLSAgLy8gdGhlIG9iamVjdCBpcyBjb25zdHJ1Y3RlZC4gIFdlIGRv
bid0IG1hcmsgaXQgYXMgY29uc3QgaGVyZSwgYXMKLSAgLy8gZG9pbmcgc28gd2lsbCBjYXVzZSBh
IHdhcm5pbmcgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIFVuaXRUZXN0LgotICAvLyBNdXRhYmxlIHN0
YXRlIGluICppbXBsXyBpcyBwcm90ZWN0ZWQgYnkgbXV0ZXhfLgotICBpbnRlcm5hbDo6VW5pdFRl
c3RJbXBsKiBpbXBsXzsKLQotICAvLyBXZSBkaXNhbGxvdyBjb3B5aW5nIFVuaXRUZXN0LgotICBH
VEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJR05fKFVuaXRUZXN0KTsKLX07Ci0KLS8vIEEgY29u
dmVuaWVudCB3cmFwcGVyIGZvciBhZGRpbmcgYW4gZW52aXJvbm1lbnQgZm9yIHRoZSB0ZXN0Ci0v
LyBwcm9ncmFtLgotLy8KLS8vIFlvdSBzaG91bGQgY2FsbCB0aGlzIGJlZm9yZSBSVU5fQUxMX1RF
U1RTKCkgaXMgY2FsbGVkLCBwcm9iYWJseSBpbgotLy8gbWFpbigpLiAgSWYgeW91IHVzZSBndGVz
dF9tYWluLCB5b3UgbmVlZCB0byBjYWxsIHRoaXMgYmVmb3JlIG1haW4oKQotLy8gc3RhcnRzIGZv
ciBpdCB0byB0YWtlIGVmZmVjdC4gIEZvciBleGFtcGxlLCB5b3UgY2FuIGRlZmluZSBhIGdsb2Jh
bAotLy8gdmFyaWFibGUgbGlrZSB0aGlzOgotLy8KLS8vICAgdGVzdGluZzo6RW52aXJvbm1lbnQq
IGNvbnN0IGZvb19lbnYgPQotLy8gICAgICAgdGVzdGluZzo6QWRkR2xvYmFsVGVzdEVudmlyb25t
ZW50KG5ldyBGb29FbnZpcm9ubWVudCk7Ci0vLwotLy8gSG93ZXZlciwgd2Ugc3Ryb25nbHkgcmVj
b21tZW5kIHlvdSB0byB3cml0ZSB5b3VyIG93biBtYWluKCkgYW5kCi0vLyBjYWxsIEFkZEdsb2Jh
bFRlc3RFbnZpcm9ubWVudCgpIHRoZXJlLCBhcyByZWx5aW5nIG9uIGluaXRpYWxpemF0aW9uCi0v
LyBvZiBnbG9iYWwgdmFyaWFibGVzIG1ha2VzIHRoZSBjb2RlIGhhcmRlciB0byByZWFkIGFuZCBt
YXkgY2F1c2UKLS8vIHByb2JsZW1zIHdoZW4geW91IHJlZ2lzdGVyIG11bHRpcGxlIGVudmlyb25t
ZW50cyBmcm9tIGRpZmZlcmVudAotLy8gdHJhbnNsYXRpb24gdW5pdHMgYW5kIHRoZSBlbnZpcm9u
bWVudHMgaGF2ZSBkZXBlbmRlbmNpZXMgYW1vbmcgdGhlbQotLy8gKHJlbWVtYmVyIHRoYXQgdGhl
IGNvbXBpbGVyIGRvZXNuJ3QgZ3VhcmFudGVlIHRoZSBvcmRlciBpbiB3aGljaAotLy8gZ2xvYmFs
IHZhcmlhYmxlcyBmcm9tIGRpZmZlcmVudCB0cmFuc2xhdGlvbiB1bml0cyBhcmUgaW5pdGlhbGl6
ZWQpLgotaW5saW5lIEVudmlyb25tZW50KiBBZGRHbG9iYWxUZXN0RW52aXJvbm1lbnQoRW52aXJv
bm1lbnQqIGVudikgewotICByZXR1cm4gVW5pdFRlc3Q6OkdldEluc3RhbmNlKCktPkFkZEVudmly
b25tZW50KGVudik7Ci19Ci0KLS8vIEluaXRpYWxpemVzIEdvb2dsZSBUZXN0LiAgVGhpcyBtdXN0
IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZwotLy8gUlVOX0FMTF9URVNUUygpLiAgSW4gcGFydGlj
dWxhciwgaXQgcGFyc2VzIGEgY29tbWFuZCBsaW5lIGZvciB0aGUKLS8vIGZsYWdzIHRoYXQgR29v
Z2xlIFRlc3QgcmVjb2duaXplcy4gIFdoZW5ldmVyIGEgR29vZ2xlIFRlc3QgZmxhZyBpcwotLy8g
c2VlbiwgaXQgaXMgcmVtb3ZlZCBmcm9tIGFyZ3YsIGFuZCAqYXJnYyBpcyBkZWNyZW1lbnRlZC4K
LS8vCi0vLyBObyB2YWx1ZSBpcyByZXR1cm5lZC4gIEluc3RlYWQsIHRoZSBHb29nbGUgVGVzdCBm
bGFnIHZhcmlhYmxlcyBhcmUKLS8vIHVwZGF0ZWQuCi0vLwotLy8gQ2FsbGluZyB0aGUgZnVuY3Rp
b24gZm9yIHRoZSBzZWNvbmQgdGltZSBoYXMgbm8gdXNlci12aXNpYmxlIGVmZmVjdC4KLUdURVNU
X0FQSV8gdm9pZCBJbml0R29vZ2xlVGVzdChpbnQqIGFyZ2MsIGNoYXIqKiBhcmd2KTsKLQotLy8g
VGhpcyBvdmVybG9hZGVkIHZlcnNpb24gY2FuIGJlIHVzZWQgaW4gV2luZG93cyBwcm9ncmFtcyBj
b21waWxlZCBpbgotLy8gVU5JQ09ERSBtb2RlLgotR1RFU1RfQVBJXyB2b2lkIEluaXRHb29nbGVU
ZXN0KGludCogYXJnYywgd2NoYXJfdCoqIGFyZ3YpOwotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewot
Ci0vLyBTZXBhcmF0ZSB0aGUgZXJyb3IgZ2VuZXJhdGluZyBjb2RlIGZyb20gdGhlIGNvZGUgcGF0
aCB0byByZWR1Y2UgdGhlIHN0YWNrCi0vLyBmcmFtZSBzaXplIG9mIENtcEhlbHBlckVRLiBUaGlz
IGhlbHBzIHJlZHVjZSB0aGUgb3ZlcmhlYWQgb2Ygc29tZSBzYW5pdGl6ZXJzCi0vLyB3aGVuIGNh
bGxpbmcgRVhQRUNUXyogaW4gYSB0aWdodCBsb29wLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMj4KLUFzc2VydGlvblJlc3VsdCBDbXBIZWxwZXJFUUZhaWx1cmUoY29uc3QgY2hh
ciogbGhzX2V4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHJoc19leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUMSYgbGhzLCBjb25zdCBUMiYgcmhzKSB7Ci0gIHJldHVybiBFcUZhaWx1cmUo
bGhzX2V4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgcmhzX2V4cHJlc3Npb24sCi0gICAg
ICAgICAgICAgICAgICAgRm9ybWF0Rm9yQ29tcGFyaXNvbkZhaWx1cmVNZXNzYWdlKGxocywgcmhz
KSwKLSAgICAgICAgICAgICAgICAgICBGb3JtYXRGb3JDb21wYXJpc29uRmFpbHVyZU1lc3NhZ2Uo
cmhzLCBsaHMpLAotICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKLX0KLQotLy8gVGhlIGhlbHBl
ciBmdW5jdGlvbiBmb3Ige0FTU0VSVHxFWFBFQ1R9X0VRLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQx
LCB0eXBlbmFtZSBUMj4KLUFzc2VydGlvblJlc3VsdCBDbXBIZWxwZXJFUShjb25zdCBjaGFyKiBs
aHNfZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBy
aHNfZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUMSYgbGhz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQyJiByaHMpIHsKLUdURVNUX0RJ
U0FCTEVfTVNDX1dBUk5JTkdTX1BVU0hfKDQzODkgLyogc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNo
ICovKQotICBpZiAobGhzID09IHJocykgewotICAgIHJldHVybiBBc3NlcnRpb25TdWNjZXNzKCk7
Ci0gIH0KLUdURVNUX0RJU0FCTEVfTVNDX1dBUk5JTkdTX1BPUF8oKQotCi0gIHJldHVybiBDbXBI
ZWxwZXJFUUZhaWx1cmUobGhzX2V4cHJlc3Npb24sIHJoc19leHByZXNzaW9uLCBsaHMsIHJocyk7
Ci19Ci0KLS8vIFdpdGggdGhpcyBvdmVybG9hZGVkIHZlcnNpb24sIHdlIGFsbG93IGFub255bW91
cyBlbnVtcyB0byBiZSB1c2VkCi0vLyBpbiB7QVNTRVJUfEVYUEVDVH1fRVEgd2hlbiBjb21waWxl
ZCB3aXRoIGdjYyA0LCBhcyBhbm9ueW1vdXMgZW51bXMKLS8vIGNhbiBiZSBpbXBsaWNpdGx5IGNh
c3QgdG8gQmlnZ2VzdEludC4KLUdURVNUX0FQSV8gQXNzZXJ0aW9uUmVzdWx0IENtcEhlbHBlckVR
KGNvbnN0IGNoYXIqIGxoc19leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogcmhzX2V4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCaWdnZXN0SW50IGxocywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJpZ2dlc3RJbnQgcmhzKTsKLQotLy8gVGhlIGhlbHBlciBj
bGFzcyBmb3Ige0FTU0VSVHxFWFBFQ1R9X0VRLiAgVGhlIHRlbXBsYXRlIGFyZ3VtZW50Ci0vLyBs
aHNfaXNfbnVsbF9saXRlcmFsIGlzIHRydWUgaWZmIHRoZSBmaXJzdCBhcmd1bWVudCB0byBBU1NF
UlRfRVEoKQotLy8gaXMgYSBudWxsIHBvaW50ZXIgbGl0ZXJhbC4gIFRoZSBmb2xsb3dpbmcgZGVm
YXVsdCBpbXBsZW1lbnRhdGlvbiBpcwotLy8gZm9yIGxoc19pc19udWxsX2xpdGVyYWwgYmVpbmcg
ZmFsc2UuCi10ZW1wbGF0ZSA8Ym9vbCBsaHNfaXNfbnVsbF9saXRlcmFsPgotY2xhc3MgRXFIZWxw
ZXIgewotIHB1YmxpYzoKLSAgLy8gVGhpcyB0ZW1wbGF0aXplZCB2ZXJzaW9uIGlzIGZvciB0aGUg
Z2VuZXJhbCBjYXNlLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgotICBz
dGF0aWMgQXNzZXJ0aW9uUmVzdWx0IENvbXBhcmUoY29uc3QgY2hhciogbGhzX2V4cHJlc3Npb24s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByaHNfZXhwcmVz
c2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQxJiBsaHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUMiYgcmhzKSB7Ci0gICAgcmV0
dXJuIENtcEhlbHBlckVRKGxoc19leHByZXNzaW9uLCByaHNfZXhwcmVzc2lvbiwgbGhzLCByaHMp
OwotICB9Ci0KLSAgLy8gV2l0aCB0aGlzIG92ZXJsb2FkZWQgdmVyc2lvbiwgd2UgYWxsb3cgYW5v
bnltb3VzIGVudW1zIHRvIGJlIHVzZWQKLSAgLy8gaW4ge0FTU0VSVHxFWFBFQ1R9X0VRIHdoZW4g
Y29tcGlsZWQgd2l0aCBnY2MgNCwgYXMgYW5vbnltb3VzCi0gIC8vIGVudW1zIGNhbiBiZSBpbXBs
aWNpdGx5IGNhc3QgdG8gQmlnZ2VzdEludC4KLSAgLy8KLSAgLy8gRXZlbiB0aG91Z2ggaXRzIGJv
ZHkgbG9va3MgdGhlIHNhbWUgYXMgdGhlIGFib3ZlIHZlcnNpb24sIHdlCi0gIC8vIGNhbm5vdCBt
ZXJnZSB0aGUgdHdvLCBhcyBpdCB3aWxsIG1ha2UgYW5vbnltb3VzIGVudW1zIHVuaGFwcHkuCi0g
IHN0YXRpYyBBc3NlcnRpb25SZXN1bHQgQ29tcGFyZShjb25zdCBjaGFyKiBsaHNfZXhwcmVzc2lv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJoc19leHBy
ZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnZ2VzdEludCBsaHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdnZXN0SW50IHJocykgewotICAg
IHJldHVybiBDbXBIZWxwZXJFUShsaHNfZXhwcmVzc2lvbiwgcmhzX2V4cHJlc3Npb24sIGxocywg
cmhzKTsKLSAgfQotfTsKLQotLy8gVGhpcyBzcGVjaWFsaXphdGlvbiBpcyB1c2VkIHdoZW4gdGhl
IGZpcnN0IGFyZ3VtZW50IHRvIEFTU0VSVF9FUSgpCi0vLyBpcyBhIG51bGwgcG9pbnRlciBsaXRl
cmFsLCBsaWtlIE5VTEwsIGZhbHNlLCBvciAwLgotdGVtcGxhdGUgPD4KLWNsYXNzIEVxSGVscGVy
PHRydWU+IHsKLSBwdWJsaWM6Ci0gIC8vIFdlIGRlZmluZSB0d28gb3ZlcmxvYWRlZCB2ZXJzaW9u
cyBvZiBDb21wYXJlKCkuICBUaGUgZmlyc3QKLSAgLy8gdmVyc2lvbiB3aWxsIGJlIHBpY2tlZCB3
aGVuIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gQVNTRVJUX0VRKCkgaXMKLSAgLy8gTk9UIGEgcG9p
bnRlciwgZS5nLiBBU1NFUlRfRVEoMCwgQW5JbnRGdW5jdGlvbigpKSBvcgotICAvLyBFWFBFQ1Rf
RVEoZmFsc2UsIGFfYm9vbCkuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+
Ci0gIHN0YXRpYyBBc3NlcnRpb25SZXN1bHQgQ29tcGFyZSgKLSAgICAgIGNvbnN0IGNoYXIqIGxo
c19leHByZXNzaW9uLAotICAgICAgY29uc3QgY2hhciogcmhzX2V4cHJlc3Npb24sCi0gICAgICBj
b25zdCBUMSYgbGhzLAotICAgICAgY29uc3QgVDImIHJocywKLSAgICAgIC8vIFRoZSBmb2xsb3dp
bmcgbGluZSBwcmV2ZW50cyB0aGlzIG92ZXJsb2FkIGZyb20gYmVpbmcgY29uc2lkZXJlZCBpZiBU
MgotICAgICAgLy8gaXMgbm90IGEgcG9pbnRlciB0eXBlLiAgV2UgbmVlZCB0aGlzIGJlY2F1c2Ug
QVNTRVJUX0VRKE5VTEwsIG15X3B0cikKLSAgICAgIC8vIGV4cGFuZHMgdG8gQ29tcGFyZSgiIiwg
IiIsIE5VTEwsIG15X3B0ciksIHdoaWNoIHJlcXVpcmVzIGEgY29udmVyc2lvbgotICAgICAgLy8g
dG8gbWF0Y2ggdGhlIFNlY3JldCogaW4gdGhlIG90aGVyIG92ZXJsb2FkLCB3aGljaCB3b3VsZCBv
dGhlcndpc2UgbWFrZQotICAgICAgLy8gdGhpcyB0ZW1wbGF0ZSBtYXRjaCBiZXR0ZXIuCi0gICAg
ICB0eXBlbmFtZSBFbmFibGVJZjwhaXNfcG9pbnRlcjxUMj46OnZhbHVlPjo6dHlwZSogPSAwKSB7
Ci0gICAgcmV0dXJuIENtcEhlbHBlckVRKGxoc19leHByZXNzaW9uLCByaHNfZXhwcmVzc2lvbiwg
bGhzLCByaHMpOwotICB9Ci0KLSAgLy8gVGhpcyB2ZXJzaW9uIHdpbGwgYmUgcGlja2VkIHdoZW4g
dGhlIHNlY29uZCBhcmd1bWVudCB0byBBU1NFUlRfRVEoKSBpcyBhCi0gIC8vIHBvaW50ZXIsIGUu
Zy4gQVNTRVJUX0VRKE5VTEwsIGFfcG9pbnRlcikuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
ICBzdGF0aWMgQXNzZXJ0aW9uUmVzdWx0IENvbXBhcmUoCi0gICAgICBjb25zdCBjaGFyKiBsaHNf
ZXhwcmVzc2lvbiwKLSAgICAgIGNvbnN0IGNoYXIqIHJoc19leHByZXNzaW9uLAotICAgICAgLy8g
V2UgdXNlZCB0byBoYXZlIGEgc2Vjb25kIHRlbXBsYXRlIHBhcmFtZXRlciBpbnN0ZWFkIG9mIFNl
Y3JldCouICBUaGF0Ci0gICAgICAvLyB0ZW1wbGF0ZSBwYXJhbWV0ZXIgd291bGQgZGVkdWNlIHRv
ICdsb25nJywgbWFraW5nIHRoaXMgYSBiZXR0ZXIgbWF0Y2gKLSAgICAgIC8vIHRoYW4gdGhlIGZp
cnN0IG92ZXJsb2FkIGV2ZW4gd2l0aG91dCB0aGUgZmlyc3Qgb3ZlcmxvYWQncyBFbmFibGVJZi4K
LSAgICAgIC8vIFVuZm9ydHVuYXRlbHksIGdjYyB3aXRoIC1XY29udmVyc2lvbi1udWxsIHdhcm5z
IHdoZW4gInBhc3NpbmcgTlVMTCB0bwotICAgICAgLy8gbm9uLXBvaW50ZXIgYXJndW1lbnQiIChl
dmVuIGEgZGVkdWNlZCBpbnRlZ3JhbCBhcmd1bWVudCksIHNvIHRoZSBvbGQKLSAgICAgIC8vIGlt
cGxlbWVudGF0aW9uIGNhdXNlZCB3YXJuaW5ncyBpbiB1c2VyIGNvZGUuCi0gICAgICBTZWNyZXQq
IC8qIGxocyAoTlVMTCkgKi8sCi0gICAgICBUKiByaHMpIHsKLSAgICAvLyBXZSBhbHJlYWR5IGtu
b3cgdGhhdCAnbGhzJyBpcyBhIG51bGwgcG9pbnRlci4KLSAgICByZXR1cm4gQ21wSGVscGVyRVEo
bGhzX2V4cHJlc3Npb24sIHJoc19leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxUKj4oTlVMTCksIHJocyk7Ci0gIH0KLX07Ci0KLS8vIFNlcGFyYXRlIHRoZSBl
cnJvciBnZW5lcmF0aW5nIGNvZGUgZnJvbSB0aGUgY29kZSBwYXRoIHRvIHJlZHVjZSB0aGUgc3Rh
Y2sKLS8vIGZyYW1lIHNpemUgb2YgQ21wSGVscGVyT1AuIFRoaXMgaGVscHMgcmVkdWNlIHRoZSBv
dmVyaGVhZCBvZiBzb21lIHNhbml0aXplcnMKLS8vIHdoZW4gY2FsbGluZyBFWFBFQ1RfT1AgaW4g
YSB0aWdodCBsb29wLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KLUFzc2Vy
dGlvblJlc3VsdCBDbXBIZWxwZXJPcEZhaWx1cmUoY29uc3QgY2hhciogZXhwcjEsIGNvbnN0IGNo
YXIqIGV4cHIyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUMSYg
dmFsMSwgY29uc3QgVDImIHZhbDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIG9wKSB7Ci0gIHJldHVybiBBc3NlcnRpb25GYWlsdXJlKCkKLSAgICAgICAg
IDw8ICJFeHBlY3RlZDogKCIgPDwgZXhwcjEgPDwgIikgIiA8PCBvcCA8PCAiICgiIDw8IGV4cHIy
Ci0gICAgICAgICA8PCAiKSwgYWN0dWFsOiAiIDw8IEZvcm1hdEZvckNvbXBhcmlzb25GYWlsdXJl
TWVzc2FnZSh2YWwxLCB2YWwyKQotICAgICAgICAgPDwgIiB2cyAiIDw8IEZvcm1hdEZvckNvbXBh
cmlzb25GYWlsdXJlTWVzc2FnZSh2YWwyLCB2YWwxKTsKLX0KLQotLy8gQSBtYWNybyBmb3IgaW1w
bGVtZW50aW5nIHRoZSBoZWxwZXIgZnVuY3Rpb25zIG5lZWRlZCB0byBpbXBsZW1lbnQKLS8vIEFT
U0VSVF8/PyBhbmQgRVhQRUNUXz8/LiAgSXQgaXMgaGVyZSBqdXN0IHRvIGF2b2lkIGNvcHktYW5k
LXBhc3RlCi0vLyBvZiBzaW1pbGFyIGNvZGUuCi0vLwotLy8gRm9yIGVhY2ggdGVtcGxhdGl6ZWQg
aGVscGVyIGZ1bmN0aW9uLCB3ZSBhbHNvIGRlZmluZSBhbiBvdmVybG9hZGVkCi0vLyB2ZXJzaW9u
IGZvciBCaWdnZXN0SW50IGluIG9yZGVyIHRvIHJlZHVjZSBjb2RlIGJsb2F0IGFuZCBhbGxvdwot
Ly8gYW5vbnltb3VzIGVudW1zIHRvIGJlIHVzZWQgd2l0aCB7QVNTRVJUfEVYUEVDVH1fPz8gd2hl
biBjb21waWxlZAotLy8gd2l0aCBnY2MgNC4KLS8vCi0vLyBJTlRFUk5BTCBJTVBMRU1FTlRBVElP
TiAtIERPIE5PVCBVU0UgSU4gQSBVU0VSIFBST0dSQU0uCi0KLSNkZWZpbmUgR1RFU1RfSU1QTF9D
TVBfSEVMUEVSXyhvcF9uYW1lLCBvcClcCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1l
IFQyPlwKLUFzc2VydGlvblJlc3VsdCBDbXBIZWxwZXIjI29wX25hbWUoY29uc3QgY2hhciogZXhw
cjEsIGNvbnN0IGNoYXIqIGV4cHIyLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFQxJiB2YWwxLCBjb25zdCBUMiYgdmFsMikge1wKLSAgaWYgKHZhbDEgb3AgdmFs
Mikge1wKLSAgICByZXR1cm4gQXNzZXJ0aW9uU3VjY2VzcygpO1wKLSAgfSBlbHNlIHtcCi0gICAg
cmV0dXJuIENtcEhlbHBlck9wRmFpbHVyZShleHByMSwgZXhwcjIsIHZhbDEsIHZhbDIsICNvcCk7
XAotICB9XAotfVwKLUdURVNUX0FQSV8gQXNzZXJ0aW9uUmVzdWx0IENtcEhlbHBlciMjb3BfbmFt
ZShcCi0gICAgY29uc3QgY2hhciogZXhwcjEsIGNvbnN0IGNoYXIqIGV4cHIyLCBCaWdnZXN0SW50
IHZhbDEsIEJpZ2dlc3RJbnQgdmFsMikKLQotLy8gSU5URVJOQUwgSU1QTEVNRU5UQVRJT04gLSBE
TyBOT1QgVVNFIElOIEEgVVNFUiBQUk9HUkFNLgotCi0vLyBJbXBsZW1lbnRzIHRoZSBoZWxwZXIg
ZnVuY3Rpb24gZm9yIHtBU1NFUlR8RVhQRUNUfV9ORQotR1RFU1RfSU1QTF9DTVBfSEVMUEVSXyhO
RSwgIT0pOwotLy8gSW1wbGVtZW50cyB0aGUgaGVscGVyIGZ1bmN0aW9uIGZvciB7QVNTRVJUfEVY
UEVDVH1fTEUKLUdURVNUX0lNUExfQ01QX0hFTFBFUl8oTEUsIDw9KTsKLS8vIEltcGxlbWVudHMg
dGhlIGhlbHBlciBmdW5jdGlvbiBmb3Ige0FTU0VSVHxFWFBFQ1R9X0xUCi1HVEVTVF9JTVBMX0NN
UF9IRUxQRVJfKExULCA8KTsKLS8vIEltcGxlbWVudHMgdGhlIGhlbHBlciBmdW5jdGlvbiBmb3Ig
e0FTU0VSVHxFWFBFQ1R9X0dFCi1HVEVTVF9JTVBMX0NNUF9IRUxQRVJfKEdFLCA+PSk7Ci0vLyBJ
bXBsZW1lbnRzIHRoZSBoZWxwZXIgZnVuY3Rpb24gZm9yIHtBU1NFUlR8RVhQRUNUfV9HVAotR1RF
U1RfSU1QTF9DTVBfSEVMUEVSXyhHVCwgPik7Ci0KLSN1bmRlZiBHVEVTVF9JTVBMX0NNUF9IRUxQ
RVJfCi0KLS8vIFRoZSBoZWxwZXIgZnVuY3Rpb24gZm9yIHtBU1NFUlR8RVhQRUNUfV9TVFJFUS4K
LS8vCi0vLyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiAtIERPIE5PVCBVU0UgSU4gQSBVU0VSIFBS
T0dSQU0uCi1HVEVTVF9BUElfIEFzc2VydGlvblJlc3VsdCBDbXBIZWxwZXJTVFJFUShjb25zdCBj
aGFyKiBzMV9leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogczJfZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHMxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogczIpOwotCi0vLyBUaGUgaGVscGVyIGZ1
bmN0aW9uIGZvciB7QVNTRVJUfEVYUEVDVH1fU1RSQ0FTRUVRLgotLy8KLS8vIElOVEVSTkFMIElN
UExFTUVOVEFUSU9OIC0gRE8gTk9UIFVTRSBJTiBBIFVTRVIgUFJPR1JBTS4KLUdURVNUX0FQSV8g
QXNzZXJ0aW9uUmVzdWx0IENtcEhlbHBlclNUUkNBU0VFUShjb25zdCBjaGFyKiBzMV9leHByZXNz
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIHMyX2V4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogczEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogczIpOwotCi0vLyBUaGUgaGVscGVyIGZ1bmN0
aW9uIGZvciB7QVNTRVJUfEVYUEVDVH1fU1RSTkUuCi0vLwotLy8gSU5URVJOQUwgSU1QTEVNRU5U
QVRJT04gLSBETyBOT1QgVVNFIElOIEEgVVNFUiBQUk9HUkFNLgotR1RFU1RfQVBJXyBBc3NlcnRp
b25SZXN1bHQgQ21wSGVscGVyU1RSTkUoY29uc3QgY2hhciogczFfZXhwcmVzc2lvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHMyX2V4cHJl
c3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBzMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIHMyKTsKLQotLy8gVGhlIGhlbHBlciBmdW5jdGlvbiBmb3Ige0FTU0VSVHxFWFBFQ1R9
X1NUUkNBU0VORS4KLS8vCi0vLyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiAtIERPIE5PVCBVU0Ug
SU4gQSBVU0VSIFBST0dSQU0uCi1HVEVTVF9BUElfIEFzc2VydGlvblJlc3VsdCBDbXBIZWxwZXJT
VFJDQVNFTkUoY29uc3QgY2hhciogczFfZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzMl9leHByZXNzaW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHMx
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIHMyKTsKLQotCi0vLyBIZWxwZXIgZnVuY3Rpb24gZm9yICpfU1RSRVEgb24gd2lkZSBzdHJp
bmdzLgotLy8KLS8vIElOVEVSTkFMIElNUExFTUVOVEFUSU9OIC0gRE8gTk9UIFVTRSBJTiBBIFVT
RVIgUFJPR1JBTS4KLUdURVNUX0FQSV8gQXNzZXJ0aW9uUmVzdWx0IENtcEhlbHBlclNUUkVRKGNv
bnN0IGNoYXIqIHMxX2V4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBzMl9leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCogczEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90KiBzMik7Ci0KLS8vIEhl
bHBlciBmdW5jdGlvbiBmb3IgKl9TVFJORSBvbiB3aWRlIHN0cmluZ3MuCi0vLwotLy8gSU5URVJO
QUwgSU1QTEVNRU5UQVRJT04gLSBETyBOT1QgVVNFIElOIEEgVVNFUiBQUk9HUkFNLgotR1RFU1Rf
QVBJXyBBc3NlcnRpb25SZXN1bHQgQ21wSGVscGVyU1RSTkUoY29uc3QgY2hhciogczFfZXhwcmVz
c2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIHMyX2V4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB3Y2hhcl90KiBzMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHdjaGFyX3QqIHMyKTsKLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFs
Ci0KLS8vIElzU3Vic3RyaW5nKCkgYW5kIElzTm90U3Vic3RyaW5nKCkgYXJlIGludGVuZGVkIHRv
IGJlIHVzZWQgYXMgdGhlCi0vLyBmaXJzdCBhcmd1bWVudCB0byB7RVhQRUNULEFTU0VSVH1fUFJF
RF9GT1JNQVQyKCksIG5vdCBieQotLy8gdGhlbXNlbHZlcy4gIFRoZXkgY2hlY2sgd2hldGhlciBu
ZWVkbGUgaXMgYSBzdWJzdHJpbmcgb2YgaGF5c3RhY2sKLS8vIChOVUxMIGlzIGNvbnNpZGVyZWQg
YSBzdWJzdHJpbmcgb2YgaXRzZWxmIG9ubHkpLCBhbmQgcmV0dXJuIGFuCi0vLyBhcHByb3ByaWF0
ZSBlcnJvciBtZXNzYWdlIHdoZW4gdGhleSBmYWlsLgotLy8KLS8vIFRoZSB7bmVlZGxlLGhheXN0
YWNrfV9leHByIGFyZ3VtZW50cyBhcmUgdGhlIHN0cmluZ2lmaWVkCi0vLyBleHByZXNzaW9ucyB0
aGF0IGdlbmVyYXRlZCB0aGUgdHdvIHJlYWwgYXJndW1lbnRzLgotR1RFU1RfQVBJXyBBc3NlcnRp
b25SZXN1bHQgSXNTdWJzdHJpbmcoCi0gICAgY29uc3QgY2hhciogbmVlZGxlX2V4cHIsIGNvbnN0
IGNoYXIqIGhheXN0YWNrX2V4cHIsCi0gICAgY29uc3QgY2hhciogbmVlZGxlLCBjb25zdCBjaGFy
KiBoYXlzdGFjayk7Ci1HVEVTVF9BUElfIEFzc2VydGlvblJlc3VsdCBJc1N1YnN0cmluZygKLSAg
ICBjb25zdCBjaGFyKiBuZWVkbGVfZXhwciwgY29uc3QgY2hhciogaGF5c3RhY2tfZXhwciwKLSAg
ICBjb25zdCB3Y2hhcl90KiBuZWVkbGUsIGNvbnN0IHdjaGFyX3QqIGhheXN0YWNrKTsKLUdURVNU
X0FQSV8gQXNzZXJ0aW9uUmVzdWx0IElzTm90U3Vic3RyaW5nKAotICAgIGNvbnN0IGNoYXIqIG5l
ZWRsZV9leHByLCBjb25zdCBjaGFyKiBoYXlzdGFja19leHByLAotICAgIGNvbnN0IGNoYXIqIG5l
ZWRsZSwgY29uc3QgY2hhciogaGF5c3RhY2spOwotR1RFU1RfQVBJXyBBc3NlcnRpb25SZXN1bHQg
SXNOb3RTdWJzdHJpbmcoCi0gICAgY29uc3QgY2hhciogbmVlZGxlX2V4cHIsIGNvbnN0IGNoYXIq
IGhheXN0YWNrX2V4cHIsCi0gICAgY29uc3Qgd2NoYXJfdCogbmVlZGxlLCBjb25zdCB3Y2hhcl90
KiBoYXlzdGFjayk7Ci1HVEVTVF9BUElfIEFzc2VydGlvblJlc3VsdCBJc1N1YnN0cmluZygKLSAg
ICBjb25zdCBjaGFyKiBuZWVkbGVfZXhwciwgY29uc3QgY2hhciogaGF5c3RhY2tfZXhwciwKLSAg
ICBjb25zdCA6OnN0ZDo6c3RyaW5nJiBuZWVkbGUsIGNvbnN0IDo6c3RkOjpzdHJpbmcmIGhheXN0
YWNrKTsKLUdURVNUX0FQSV8gQXNzZXJ0aW9uUmVzdWx0IElzTm90U3Vic3RyaW5nKAotICAgIGNv
bnN0IGNoYXIqIG5lZWRsZV9leHByLCBjb25zdCBjaGFyKiBoYXlzdGFja19leHByLAotICAgIGNv
bnN0IDo6c3RkOjpzdHJpbmcmIG5lZWRsZSwgY29uc3QgOjpzdGQ6OnN0cmluZyYgaGF5c3RhY2sp
OwotCi0jaWYgR1RFU1RfSEFTX1NURF9XU1RSSU5HCi1HVEVTVF9BUElfIEFzc2VydGlvblJlc3Vs
dCBJc1N1YnN0cmluZygKLSAgICBjb25zdCBjaGFyKiBuZWVkbGVfZXhwciwgY29uc3QgY2hhciog
aGF5c3RhY2tfZXhwciwKLSAgICBjb25zdCA6OnN0ZDo6d3N0cmluZyYgbmVlZGxlLCBjb25zdCA6
OnN0ZDo6d3N0cmluZyYgaGF5c3RhY2spOwotR1RFU1RfQVBJXyBBc3NlcnRpb25SZXN1bHQgSXNO
b3RTdWJzdHJpbmcoCi0gICAgY29uc3QgY2hhciogbmVlZGxlX2V4cHIsIGNvbnN0IGNoYXIqIGhh
eXN0YWNrX2V4cHIsCi0gICAgY29uc3QgOjpzdGQ6OndzdHJpbmcmIG5lZWRsZSwgY29uc3QgOjpz
dGQ6OndzdHJpbmcmIGhheXN0YWNrKTsKLSNlbmRpZiAgLy8gR1RFU1RfSEFTX1NURF9XU1RSSU5H
Ci0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLS8vIEhlbHBlciB0ZW1wbGF0ZSBmdW5jdGlvbiBm
b3IgY29tcGFyaW5nIGZsb2F0aW5nLXBvaW50cy4KLS8vCi0vLyBUZW1wbGF0ZSBwYXJhbWV0ZXI6
Ci0vLwotLy8gICBSYXdUeXBlOiB0aGUgcmF3IGZsb2F0aW5nLXBvaW50IHR5cGUgKGVpdGhlciBm
bG9hdCBvciBkb3VibGUpCi0vLwotLy8gSU5URVJOQUwgSU1QTEVNRU5UQVRJT04gLSBETyBOT1Qg
VVNFIElOIEEgVVNFUiBQUk9HUkFNLgotdGVtcGxhdGUgPHR5cGVuYW1lIFJhd1R5cGU+Ci1Bc3Nl
cnRpb25SZXN1bHQgQ21wSGVscGVyRmxvYXRpbmdQb2ludEVRKGNvbnN0IGNoYXIqIGxoc19leHBy
ZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiByaHNfZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUmF3VHlwZSBsaHNfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJhd1R5cGUgcmhzX3ZhbHVlKSB7Ci0gIGNvbnN0IEZsb2F0aW5nUG9pbnQ8UmF3
VHlwZT4gbGhzKGxoc192YWx1ZSksIHJocyhyaHNfdmFsdWUpOwotCi0gIGlmIChsaHMuQWxtb3N0
RXF1YWxzKHJocykpIHsKLSAgICByZXR1cm4gQXNzZXJ0aW9uU3VjY2VzcygpOwotICB9Ci0KLSAg
OjpzdGQ6OnN0cmluZ3N0cmVhbSBsaHNfc3M7Ci0gIGxoc19zcyA8PCBzdGQ6OnNldHByZWNpc2lv
bihzdGQ6Om51bWVyaWNfbGltaXRzPFJhd1R5cGU+OjpkaWdpdHMxMCArIDIpCi0gICAgICAgICA8
PCBsaHNfdmFsdWU7Ci0KLSAgOjpzdGQ6OnN0cmluZ3N0cmVhbSByaHNfc3M7Ci0gIHJoc19zcyA8
PCBzdGQ6OnNldHByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPFJhd1R5cGU+OjpkaWdpdHMx
MCArIDIpCi0gICAgICAgICA8PCByaHNfdmFsdWU7Ci0KLSAgcmV0dXJuIEVxRmFpbHVyZShsaHNf
ZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICByaHNfZXhwcmVzc2lvbiwKLSAgICAgICAg
ICAgICAgICAgICBTdHJpbmdTdHJlYW1Ub1N0cmluZygmbGhzX3NzKSwKLSAgICAgICAgICAgICAg
ICAgICBTdHJpbmdTdHJlYW1Ub1N0cmluZygmcmhzX3NzKSwKLSAgICAgICAgICAgICAgICAgICBm
YWxzZSk7Ci19Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiBmb3IgaW1wbGVtZW50aW5nIEFTU0VSVF9O
RUFSLgotLy8KLS8vIElOVEVSTkFMIElNUExFTUVOVEFUSU9OIC0gRE8gTk9UIFVTRSBJTiBBIFVT
RVIgUFJPR1JBTS4KLUdURVNUX0FQSV8gQXNzZXJ0aW9uUmVzdWx0IERvdWJsZU5lYXJQcmVkRm9y
bWF0KGNvbnN0IGNoYXIqIGV4cHIxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXhwcjIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhYnNfZXJyb3JfZXhwciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2YWwx
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
IHZhbDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgYWJzX2Vycm9yKTsKLQotLy8gSU5URVJOQUwgSU1QTEVNRU5UQVRJT04gLSBETyBOT1Qg
VVNFIElOIFVTRVIgQ09ERS4KLS8vIEEgY2xhc3MgdGhhdCBlbmFibGVzIG9uZSB0byBzdHJlYW0g
bWVzc2FnZXMgdG8gYXNzZXJ0aW9uIG1hY3JvcwotY2xhc3MgR1RFU1RfQVBJXyBBc3NlcnRIZWxw
ZXIgewotIHB1YmxpYzoKLSAgLy8gQ29uc3RydWN0b3IuCi0gIEFzc2VydEhlbHBlcihUZXN0UGFy
dFJlc3VsdDo6VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZSwKLSAg
ICAgICAgICAgICAgIGludCBsaW5lLAotICAgICAgICAgICAgICAgY29uc3QgY2hhciogbWVzc2Fn
ZSk7Ci0gIH5Bc3NlcnRIZWxwZXIoKTsKLQotICAvLyBNZXNzYWdlIGFzc2lnbm1lbnQgaXMgYSBz
ZW1hbnRpYyB0cmljayB0byBlbmFibGUgYXNzZXJ0aW9uCi0gIC8vIHN0cmVhbWluZzsgc2VlIHRo
ZSBHVEVTVF9NRVNTQUdFXyBtYWNybyBiZWxvdy4KLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgTWVz
c2FnZSYgbWVzc2FnZSkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICAvLyBXZSBwdXQgb3VyIGRhdGEg
aW4gYSBzdHJ1Y3Qgc28gdGhhdCB0aGUgc2l6ZSBvZiB0aGUgQXNzZXJ0SGVscGVyIGNsYXNzIGNh
bgotICAvLyBiZSBhcyBzbWFsbCBhcyBwb3NzaWJsZS4gIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1
c2UgZ2NjIGlzIGluY2FwYWJsZSBvZgotICAvLyByZS11c2luZyBzdGFjayBzcGFjZSBldmVuIGZv
ciB0ZW1wb3JhcnkgdmFyaWFibGVzLCBzbyBldmVyeSBFWFBFQ1RfRVEKLSAgLy8gcmVzZXJ2ZXMg
c3RhY2sgc3BhY2UgZm9yIGFub3RoZXIgQXNzZXJ0SGVscGVyLgotICBzdHJ1Y3QgQXNzZXJ0SGVs
cGVyRGF0YSB7Ci0gICAgQXNzZXJ0SGVscGVyRGF0YShUZXN0UGFydFJlc3VsdDo6VHlwZSB0LAot
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogc3JjZmlsZSwKLSAgICAgICAgICAgICAg
ICAgICAgIGludCBsaW5lX251bSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1z
ZykKLSAgICAgICAgOiB0eXBlKHQpLCBmaWxlKHNyY2ZpbGUpLCBsaW5lKGxpbmVfbnVtKSwgbWVz
c2FnZShtc2cpIHsgfQotCi0gICAgVGVzdFBhcnRSZXN1bHQ6OlR5cGUgY29uc3QgdHlwZTsKLSAg
ICBjb25zdCBjaGFyKiBjb25zdCBmaWxlOwotICAgIGludCBjb25zdCBsaW5lOwotICAgIHN0ZDo6
c3RyaW5nIGNvbnN0IG1lc3NhZ2U7Ci0KLSAgIHByaXZhdGU6Ci0gICAgR1RFU1RfRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOXyhBc3NlcnRIZWxwZXJEYXRhKTsKLSAgfTsKLQotICBBc3NlcnRIZWxw
ZXJEYXRhKiBjb25zdCBkYXRhXzsKLQotICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJR05f
KEFzc2VydEhlbHBlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotI2lmIEdU
RVNUX0hBU19QQVJBTV9URVNUCi0vLyBUaGUgcHVyZSBpbnRlcmZhY2UgY2xhc3MgdGhhdCBhbGwg
dmFsdWUtcGFyYW1ldGVyaXplZCB0ZXN0cyBpbmhlcml0IGZyb20uCi0vLyBBIHZhbHVlLXBhcmFt
ZXRlcml6ZWQgY2xhc3MgbXVzdCBpbmhlcml0IGZyb20gYm90aCA6OnRlc3Rpbmc6OlRlc3QgYW5k
Ci0vLyA6OnRlc3Rpbmc6OldpdGhQYXJhbUludGVyZmFjZS4gSW4gbW9zdCBjYXNlcyB0aGF0IGp1
c3QgbWVhbnMgaW5oZXJpdGluZwotLy8gZnJvbSA6OnRlc3Rpbmc6OlRlc3RXaXRoUGFyYW0sIGJ1
dCBtb3JlIGNvbXBsaWNhdGVkIHRlc3QgaGllcmFyY2hpZXMKLS8vIG1heSBuZWVkIHRvIGluaGVy
aXQgZnJvbSBUZXN0IGFuZCBXaXRoUGFyYW1JbnRlcmZhY2UgYXQgZGlmZmVyZW50IGxldmVscy4K
LS8vCi0vLyBUaGlzIGludGVyZmFjZSBoYXMgc3VwcG9ydCBmb3IgYWNjZXNzaW5nIHRoZSB0ZXN0
IHBhcmFtZXRlciB2YWx1ZSB2aWEKLS8vIHRoZSBHZXRQYXJhbSgpIG1ldGhvZC4KLS8vCi0vLyBV
c2UgaXQgd2l0aCBvbmUgb2YgdGhlIHBhcmFtZXRlciBnZW5lcmF0b3IgZGVmaW5pbmcgZnVuY3Rp
b25zLCBsaWtlIFJhbmdlKCksCi0vLyBWYWx1ZXMoKSwgVmFsdWVzSW4oKSwgQm9vbCgpLCBhbmQg
Q29tYmluZSgpLgotLy8KLS8vIGNsYXNzIEZvb1Rlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0
V2l0aFBhcmFtPGludD4gewotLy8gIHByb3RlY3RlZDoKLS8vICAgRm9vVGVzdCgpIHsKLS8vICAg
ICAvLyBDYW4gdXNlIEdldFBhcmFtKCkgaGVyZS4KLS8vICAgfQotLy8gICB2aXJ0dWFsIH5Gb29U
ZXN0KCkgewotLy8gICAgIC8vIENhbiB1c2UgR2V0UGFyYW0oKSBoZXJlLgotLy8gICB9Ci0vLyAg
IHZpcnR1YWwgdm9pZCBTZXRVcCgpIHsKLS8vICAgICAvLyBDYW4gdXNlIEdldFBhcmFtKCkgaGVy
ZS4KLS8vICAgfQotLy8gICB2aXJ0dWFsIHZvaWQgVGVhckRvd24gewotLy8gICAgIC8vIENhbiB1
c2UgR2V0UGFyYW0oKSBoZXJlLgotLy8gICB9Ci0vLyB9OwotLy8gVEVTVF9QKEZvb1Rlc3QsIERv
ZXNCYXIpIHsKLS8vICAgLy8gQ2FuIHVzZSBHZXRQYXJhbSgpIG1ldGhvZCBoZXJlLgotLy8gICBG
b28gZm9vOwotLy8gICBBU1NFUlRfVFJVRShmb28uRG9lc0JhcihHZXRQYXJhbSgpKSk7Ci0vLyB9
Ci0vLyBJTlNUQU5USUFURV9URVNUX0NBU0VfUChPbmVUb1RlblJhbmdlLCBGb29UZXN0LCA6OnRl
c3Rpbmc6OlJhbmdlKDEsIDEwKSk7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgV2l0
aFBhcmFtSW50ZXJmYWNlIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgVCBQYXJhbVR5cGU7Ci0gIHZp
cnR1YWwgfldpdGhQYXJhbUludGVyZmFjZSgpIHt9Ci0KLSAgLy8gVGhlIGN1cnJlbnQgcGFyYW1l
dGVyIHZhbHVlLiBJcyBhbHNvIGF2YWlsYWJsZSBpbiB0aGUgdGVzdCBmaXh0dXJlJ3MKLSAgLy8g
Y29uc3RydWN0b3IuIFRoaXMgbWVtYmVyIGZ1bmN0aW9uIGlzIG5vbi1zdGF0aWMsIGV2ZW4gdGhv
dWdoIGl0IG9ubHkKLSAgLy8gcmVmZXJlbmNlcyBzdGF0aWMgZGF0YSwgdG8gcmVkdWNlIHRoZSBv
cHBvcnR1bml0eSBmb3IgaW5jb3JyZWN0IHVzZXMKLSAgLy8gbGlrZSB3cml0aW5nICdXaXRoUGFy
YW1JbnRlcmZhY2U8Ym9vbD46OkdldFBhcmFtKCknIGZvciBhIHRlc3QgdGhhdAotICAvLyB1c2Vz
IGEgZml4dHVyZSB3aG9zZSBwYXJhbWV0ZXIgdHlwZSBpcyBpbnQuCi0gIGNvbnN0IFBhcmFtVHlw
ZSYgR2V0UGFyYW0oKSBjb25zdCB7Ci0gICAgR1RFU1RfQ0hFQ0tfKHBhcmFtZXRlcl8gIT0gTlVM
TCkKLSAgICAgICAgPDwgIkdldFBhcmFtKCkgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBhIHZh
bHVlLXBhcmFtZXRlcml6ZWQgdGVzdCAiCi0gICAgICAgIDw8ICItLSBkaWQgeW91IGludGVuZCB0
byB3cml0ZSBURVNUX1AgaW5zdGVhZCBvZiBURVNUX0Y/IjsKLSAgICByZXR1cm4gKnBhcmFtZXRl
cl87Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIFNldHMgcGFyYW1ldGVyIHZhbHVlLiBUaGUgY2Fs
bGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgdmFsdWUKLSAgLy8gcmVtYWlu
cyBhbGl2ZSBhbmQgdW5jaGFuZ2VkIHRocm91Z2hvdXQgdGhlIGN1cnJlbnQgdGVzdC4KLSAgc3Rh
dGljIHZvaWQgU2V0UGFyYW0oY29uc3QgUGFyYW1UeXBlKiBwYXJhbWV0ZXIpIHsKLSAgICBwYXJh
bWV0ZXJfID0gcGFyYW1ldGVyOwotICB9Ci0KLSAgLy8gU3RhdGljIHZhbHVlIHVzZWQgZm9yIGFj
Y2Vzc2luZyBwYXJhbWV0ZXIgZHVyaW5nIGEgdGVzdCBsaWZldGltZS4KLSAgc3RhdGljIGNvbnN0
IFBhcmFtVHlwZSogcGFyYW1ldGVyXzsKLQotICAvLyBUZXN0Q2xhc3MgbXVzdCBiZSBhIHN1YmNs
YXNzIG9mIFdpdGhQYXJhbUludGVyZmFjZTxUPiBhbmQgVGVzdC4KLSAgdGVtcGxhdGUgPGNsYXNz
IFRlc3RDbGFzcz4gZnJpZW5kIGNsYXNzIGludGVybmFsOjpQYXJhbWV0ZXJpemVkVGVzdEZhY3Rv
cnk7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNvbnN0IFQqIFdpdGhQYXJhbUludGVy
ZmFjZTxUPjo6cGFyYW1ldGVyXyA9IE5VTEw7Ci0KLS8vIE1vc3QgdmFsdWUtcGFyYW1ldGVyaXpl
ZCBjbGFzc2VzIGNhbiBpZ25vcmUgdGhlIGV4aXN0ZW5jZSBvZgotLy8gV2l0aFBhcmFtSW50ZXJm
YWNlLCBhbmQgY2FuIGp1c3QgaW5oZXJpdCBmcm9tIDo6dGVzdGluZzo6VGVzdFdpdGhQYXJhbS4K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBUZXN0V2l0aFBhcmFtIDogcHVibGljIFRl
c3QsIHB1YmxpYyBXaXRoUGFyYW1JbnRlcmZhY2U8VD4gewotfTsKLQotI2VuZGlmICAvLyBHVEVT
VF9IQVNfUEFSQU1fVEVTVAotCi0vLyBNYWNyb3MgZm9yIGluZGljYXRpbmcgc3VjY2Vzcy9mYWls
dXJlIGluIHRlc3QgY29kZS4KLQotLy8gQUREX0ZBSUxVUkUgdW5jb25kaXRpb25hbGx5IGFkZHMg
YSBmYWlsdXJlIHRvIHRoZSBjdXJyZW50IHRlc3QuCi0vLyBTVUNDRUVEIGdlbmVyYXRlcyBhIHN1
Y2Nlc3MgLSBpdCBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgbWFrZSB0aGUKLS8vIGN1cnJlbnQgdGVz
dCBzdWNjZXNzZnVsLCBhcyBhIHRlc3QgaXMgb25seSBzdWNjZXNzZnVsIHdoZW4gaXQgaGFzCi0v
LyBubyBmYWlsdXJlLgotLy8KLS8vIEVYUEVDVF8qIHZlcmlmaWVzIHRoYXQgYSBjZXJ0YWluIGNv
bmRpdGlvbiBpcyBzYXRpc2ZpZWQuICBJZiBub3QsCi0vLyBpdCBiZWhhdmVzIGxpa2UgQUREX0ZB
SUxVUkUuICBJbiBwYXJ0aWN1bGFyOgotLy8KLS8vICAgRVhQRUNUX1RSVUUgIHZlcmlmaWVzIHRo
YXQgYSBCb29sZWFuIGNvbmRpdGlvbiBpcyB0cnVlLgotLy8gICBFWFBFQ1RfRkFMU0UgdmVyaWZp
ZXMgdGhhdCBhIEJvb2xlYW4gY29uZGl0aW9uIGlzIGZhbHNlLgotLy8KLS8vIEZBSUwgYW5kIEFT
U0VSVF8qIGFyZSBzaW1pbGFyIHRvIEFERF9GQUlMVVJFIGFuZCBFWFBFQ1RfKiwgZXhjZXB0Ci0v
LyB0aGF0IHRoZXkgd2lsbCBhbHNvIGFib3J0IHRoZSBjdXJyZW50IGZ1bmN0aW9uIG9uIGZhaWx1
cmUuICBQZW9wbGUKLS8vIHVzdWFsbHkgd2FudCB0aGUgZmFpbC1mYXN0IGJlaGF2aW9yIG9mIEZB
SUwgYW5kIEFTU0VSVF8qLCBidXQgdGhvc2UKLS8vIHdyaXRpbmcgZGF0YS1kcml2ZW4gdGVzdHMg
b2Z0ZW4gZmluZCB0aGVtc2VsdmVzIHVzaW5nIEFERF9GQUlMVVJFCi0vLyBhbmQgRVhQRUNUXyog
bW9yZS4KLQotLy8gR2VuZXJhdGVzIGEgbm9uZmF0YWwgZmFpbHVyZSB3aXRoIGEgZ2VuZXJpYyBt
ZXNzYWdlLgotI2RlZmluZSBBRERfRkFJTFVSRSgpIEdURVNUX05PTkZBVEFMX0ZBSUxVUkVfKCJG
YWlsZWQiKQotCi0vLyBHZW5lcmF0ZXMgYSBub25mYXRhbCBmYWlsdXJlIGF0IHRoZSBnaXZlbiBz
b3VyY2UgZmlsZSBsb2NhdGlvbiB3aXRoCi0vLyBhIGdlbmVyaWMgbWVzc2FnZS4KLSNkZWZpbmUg
QUREX0ZBSUxVUkVfQVQoZmlsZSwgbGluZSkgXAotICBHVEVTVF9NRVNTQUdFX0FUXyhmaWxlLCBs
aW5lLCAiRmFpbGVkIiwgXAotICAgICAgICAgICAgICAgICAgICA6OnRlc3Rpbmc6OlRlc3RQYXJ0
UmVzdWx0OjprTm9uRmF0YWxGYWlsdXJlKQotCi0vLyBHZW5lcmF0ZXMgYSBmYXRhbCBmYWlsdXJl
IHdpdGggYSBnZW5lcmljIG1lc3NhZ2UuCi0jZGVmaW5lIEdURVNUX0ZBSUwoKSBHVEVTVF9GQVRB
TF9GQUlMVVJFXygiRmFpbGVkIikKLQotLy8gRGVmaW5lIHRoaXMgbWFjcm8gdG8gMSB0byBvbWl0
IHRoZSBkZWZpbml0aW9uIG9mIEZBSUwoKSwgd2hpY2ggaXMgYQotLy8gZ2VuZXJpYyBuYW1lIGFu
ZCBjbGFzaGVzIHdpdGggc29tZSBvdGhlciBsaWJyYXJpZXMuCi0jaWYgIUdURVNUX0RPTlRfREVG
SU5FX0ZBSUwKLSMgZGVmaW5lIEZBSUwoKSBHVEVTVF9GQUlMKCkKLSNlbmRpZgotCi0vLyBHZW5l
cmF0ZXMgYSBzdWNjZXNzIHdpdGggYSBnZW5lcmljIG1lc3NhZ2UuCi0jZGVmaW5lIEdURVNUX1NV
Q0NFRUQoKSBHVEVTVF9TVUNDRVNTXygiU3VjY2VlZGVkIikKLQotLy8gRGVmaW5lIHRoaXMgbWFj
cm8gdG8gMSB0byBvbWl0IHRoZSBkZWZpbml0aW9uIG9mIFNVQ0NFRUQoKSwgd2hpY2gKLS8vIGlz
IGEgZ2VuZXJpYyBuYW1lIGFuZCBjbGFzaGVzIHdpdGggc29tZSBvdGhlciBsaWJyYXJpZXMuCi0j
aWYgIUdURVNUX0RPTlRfREVGSU5FX1NVQ0NFRUQKLSMgZGVmaW5lIFNVQ0NFRUQoKSBHVEVTVF9T
VUNDRUVEKCkKLSNlbmRpZgotCi0vLyBNYWNyb3MgZm9yIHRlc3RpbmcgZXhjZXB0aW9ucy4KLS8v
Ci0vLyAgICAqIHtBU1NFUlR8RVhQRUNUfV9USFJPVyhzdGF0ZW1lbnQsIGV4cGVjdGVkX2V4Y2Vw
dGlvbik6Ci0vLyAgICAgICAgIFRlc3RzIHRoYXQgdGhlIHN0YXRlbWVudCB0aHJvd3MgdGhlIGV4
cGVjdGVkIGV4Y2VwdGlvbi4KLS8vICAgICoge0FTU0VSVHxFWFBFQ1R9X05PX1RIUk9XKHN0YXRl
bWVudCk6Ci0vLyAgICAgICAgIFRlc3RzIHRoYXQgdGhlIHN0YXRlbWVudCBkb2Vzbid0IHRocm93
IGFueSBleGNlcHRpb24uCi0vLyAgICAqIHtBU1NFUlR8RVhQRUNUfV9BTllfVEhST1coc3RhdGVt
ZW50KToKLS8vICAgICAgICAgVGVzdHMgdGhhdCB0aGUgc3RhdGVtZW50IHRocm93cyBhbiBleGNl
cHRpb24uCi0KLSNkZWZpbmUgRVhQRUNUX1RIUk9XKHN0YXRlbWVudCwgZXhwZWN0ZWRfZXhjZXB0
aW9uKSBcCi0gIEdURVNUX1RFU1RfVEhST1dfKHN0YXRlbWVudCwgZXhwZWN0ZWRfZXhjZXB0aW9u
LCBHVEVTVF9OT05GQVRBTF9GQUlMVVJFXykKLSNkZWZpbmUgRVhQRUNUX05PX1RIUk9XKHN0YXRl
bWVudCkgXAotICBHVEVTVF9URVNUX05PX1RIUk9XXyhzdGF0ZW1lbnQsIEdURVNUX05PTkZBVEFM
X0ZBSUxVUkVfKQotI2RlZmluZSBFWFBFQ1RfQU5ZX1RIUk9XKHN0YXRlbWVudCkgXAotICBHVEVT
VF9URVNUX0FOWV9USFJPV18oc3RhdGVtZW50LCBHVEVTVF9OT05GQVRBTF9GQUlMVVJFXykKLSNk
ZWZpbmUgQVNTRVJUX1RIUk9XKHN0YXRlbWVudCwgZXhwZWN0ZWRfZXhjZXB0aW9uKSBcCi0gIEdU
RVNUX1RFU1RfVEhST1dfKHN0YXRlbWVudCwgZXhwZWN0ZWRfZXhjZXB0aW9uLCBHVEVTVF9GQVRB
TF9GQUlMVVJFXykKLSNkZWZpbmUgQVNTRVJUX05PX1RIUk9XKHN0YXRlbWVudCkgXAotICBHVEVT
VF9URVNUX05PX1RIUk9XXyhzdGF0ZW1lbnQsIEdURVNUX0ZBVEFMX0ZBSUxVUkVfKQotI2RlZmlu
ZSBBU1NFUlRfQU5ZX1RIUk9XKHN0YXRlbWVudCkgXAotICBHVEVTVF9URVNUX0FOWV9USFJPV18o
c3RhdGVtZW50LCBHVEVTVF9GQVRBTF9GQUlMVVJFXykKLQotLy8gQm9vbGVhbiBhc3NlcnRpb25z
LiBDb25kaXRpb24gY2FuIGJlIGVpdGhlciBhIEJvb2xlYW4gZXhwcmVzc2lvbiBvciBhbgotLy8g
QXNzZXJ0aW9uUmVzdWx0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIEFzc2Vy
dGlvblJlc3VsdCB3aXRoCi0vLyB0aGVzZSBtYWNyb3Mgc2VlIGNvbW1lbnRzIG9uIHRoYXQgY2xh
c3MuCi0jZGVmaW5lIEVYUEVDVF9UUlVFKGNvbmRpdGlvbikgXAotICBHVEVTVF9URVNUX0JPT0xF
QU5fKChjb25kaXRpb24pLCAjY29uZGl0aW9uLCBmYWxzZSwgdHJ1ZSwgXAotICAgICAgICAgICAg
ICAgICAgICAgIEdURVNUX05PTkZBVEFMX0ZBSUxVUkVfKQotI2RlZmluZSBFWFBFQ1RfRkFMU0Uo
Y29uZGl0aW9uKSBcCi0gIEdURVNUX1RFU1RfQk9PTEVBTl8oIShjb25kaXRpb24pLCAjY29uZGl0
aW9uLCB0cnVlLCBmYWxzZSwgXAotICAgICAgICAgICAgICAgICAgICAgIEdURVNUX05PTkZBVEFM
X0ZBSUxVUkVfKQotI2RlZmluZSBBU1NFUlRfVFJVRShjb25kaXRpb24pIFwKLSAgR1RFU1RfVEVT
VF9CT09MRUFOXygoY29uZGl0aW9uKSwgI2NvbmRpdGlvbiwgZmFsc2UsIHRydWUsIFwKLSAgICAg
ICAgICAgICAgICAgICAgICBHVEVTVF9GQVRBTF9GQUlMVVJFXykKLSNkZWZpbmUgQVNTRVJUX0ZB
TFNFKGNvbmRpdGlvbikgXAotICBHVEVTVF9URVNUX0JPT0xFQU5fKCEoY29uZGl0aW9uKSwgI2Nv
bmRpdGlvbiwgdHJ1ZSwgZmFsc2UsIFwKLSAgICAgICAgICAgICAgICAgICAgICBHVEVTVF9GQVRB
TF9GQUlMVVJFXykKLQotLy8gSW5jbHVkZXMgdGhlIGF1dG8tZ2VuZXJhdGVkIGhlYWRlciB0aGF0
IGltcGxlbWVudHMgYSBmYW1pbHkgb2YKLS8vIGdlbmVyaWMgcHJlZGljYXRlIGFzc2VydGlvbiBt
YWNyb3MuCi0jaW5jbHVkZSAiZ3Rlc3QvZ3Rlc3RfcHJlZF9pbXBsLmgiCi0KLS8vIE1hY3JvcyBm
b3IgdGVzdGluZyBlcXVhbGl0aWVzIGFuZCBpbmVxdWFsaXRpZXMuCi0vLwotLy8gICAgKiB7QVNT
RVJUfEVYUEVDVH1fRVEodjEsIHYyKTogVGVzdHMgdGhhdCB2MSA9PSB2MgotLy8gICAgKiB7QVNT
RVJUfEVYUEVDVH1fTkUodjEsIHYyKTogVGVzdHMgdGhhdCB2MSAhPSB2MgotLy8gICAgKiB7QVNT
RVJUfEVYUEVDVH1fTFQodjEsIHYyKTogVGVzdHMgdGhhdCB2MSA8IHYyCi0vLyAgICAqIHtBU1NF
UlR8RVhQRUNUfV9MRSh2MSwgdjIpOiBUZXN0cyB0aGF0IHYxIDw9IHYyCi0vLyAgICAqIHtBU1NF
UlR8RVhQRUNUfV9HVCh2MSwgdjIpOiBUZXN0cyB0aGF0IHYxID4gdjIKLS8vICAgICoge0FTU0VS
VHxFWFBFQ1R9X0dFKHYxLCB2Mik6IFRlc3RzIHRoYXQgdjEgPj0gdjIKLS8vCi0vLyBXaGVuIHRo
ZXkgYXJlIG5vdCwgR29vZ2xlIFRlc3QgcHJpbnRzIGJvdGggdGhlIHRlc3RlZCBleHByZXNzaW9u
cyBhbmQKLS8vIHRoZWlyIGFjdHVhbCB2YWx1ZXMuICBUaGUgdmFsdWVzIG11c3QgYmUgY29tcGF0
aWJsZSBidWlsdC1pbiB0eXBlcywKLS8vIG9yIHlvdSB3aWxsIGdldCBhIGNvbXBpbGVyIGVycm9y
LiAgQnkgImNvbXBhdGlibGUiIHdlIG1lYW4gdGhhdCB0aGUKLS8vIHZhbHVlcyBjYW4gYmUgY29t
cGFyZWQgYnkgdGhlIHJlc3BlY3RpdmUgb3BlcmF0b3IuCi0vLwotLy8gTm90ZToKLS8vCi0vLyAg
IDEuIEl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgYSB1c2VyLWRlZmluZWQgdHlwZSB3b3JrIHdpdGgK
LS8vICAge0FTU0VSVHxFWFBFQ1R9Xz8/KCksIGJ1dCB0aGF0IHJlcXVpcmVzIG92ZXJsb2FkaW5n
IHRoZQotLy8gICBjb21wYXJpc29uIG9wZXJhdG9ycyBhbmQgaXMgdGh1cyBkaXNjb3VyYWdlZCBi
eSB0aGUgR29vZ2xlIEMrKwotLy8gICBVc2FnZSBHdWlkZS4gIFRoZXJlZm9yZSwgeW91IGFyZSBh
ZHZpc2VkIHRvIHVzZSB0aGUKLS8vICAge0FTU0VSVHxFWFBFQ1R9X1RSVUUoKSBtYWNybyB0byBh
c3NlcnQgdGhhdCB0d28gb2JqZWN0cyBhcmUKLS8vICAgZXF1YWwuCi0vLwotLy8gICAyLiBUaGUg
e0FTU0VSVHxFWFBFQ1R9Xz8/KCkgbWFjcm9zIGRvIHBvaW50ZXIgY29tcGFyaXNvbnMgb24KLS8v
ICAgcG9pbnRlcnMgKGluIHBhcnRpY3VsYXIsIEMgc3RyaW5ncykuICBUaGVyZWZvcmUsIGlmIHlv
dSB1c2UgaXQKLS8vICAgd2l0aCB0d28gQyBzdHJpbmdzLCB5b3UgYXJlIHRlc3RpbmcgaG93IHRo
ZWlyIGxvY2F0aW9ucyBpbiBtZW1vcnkKLS8vICAgYXJlIHJlbGF0ZWQsIG5vdCBob3cgdGhlaXIg
Y29udGVudCBpcyByZWxhdGVkLiAgVG8gY29tcGFyZSB0d28gQwotLy8gICBzdHJpbmdzIGJ5IGNv
bnRlbnQsIHVzZSB7QVNTRVJUfEVYUEVDVH1fU1RSKigpLgotLy8KLS8vICAgMy4ge0FTU0VSVHxF
WFBFQ1R9X0VRKHYxLCB2MikgaXMgcHJlZmVycmVkIHRvCi0vLyAgIHtBU1NFUlR8RVhQRUNUfV9U
UlVFKHYxID09IHYyKSwgYXMgdGhlIGZvcm1lciB0ZWxscyB5b3UKLS8vICAgd2hhdCB0aGUgYWN0
dWFsIHZhbHVlIGlzIHdoZW4gaXQgZmFpbHMsIGFuZCBzaW1pbGFybHkgZm9yIHRoZQotLy8gICBv
dGhlciBjb21wYXJpc29ucy4KLS8vCi0vLyAgIDQuIERvIG5vdCBkZXBlbmQgb24gdGhlIG9yZGVy
IGluIHdoaWNoIHtBU1NFUlR8RVhQRUNUfV8/PygpCi0vLyAgIGV2YWx1YXRlIHRoZWlyIGFyZ3Vt
ZW50cywgd2hpY2ggaXMgdW5kZWZpbmVkLgotLy8KLS8vICAgNS4gVGhlc2UgbWFjcm9zIGV2YWx1
YXRlIHRoZWlyIGFyZ3VtZW50cyBleGFjdGx5IG9uY2UuCi0vLwotLy8gRXhhbXBsZXM6Ci0vLwot
Ly8gICBFWFBFQ1RfTkUoNSwgRm9vKCkpOwotLy8gICBFWFBFQ1RfRVEoTlVMTCwgYV9wb2ludGVy
KTsKLS8vICAgQVNTRVJUX0xUKGksIGFycmF5X3NpemUpOwotLy8gICBBU1NFUlRfR1QocmVjb3Jk
cy5zaXplKCksIDApIDw8ICJUaGVyZSBpcyBubyByZWNvcmQgbGVmdC4iOwotCi0jZGVmaW5lIEVY
UEVDVF9FUSh2YWwxLCB2YWwyKSBcCi0gIEVYUEVDVF9QUkVEX0ZPUk1BVDIoOjp0ZXN0aW5nOjpp
bnRlcm5hbDo6IFwKLSAgICAgICAgICAgICAgICAgICAgICBFcUhlbHBlcjxHVEVTVF9JU19OVUxM
X0xJVEVSQUxfKHZhbDEpPjo6Q29tcGFyZSwgXAotICAgICAgICAgICAgICAgICAgICAgIHZhbDEs
IHZhbDIpCi0jZGVmaW5lIEVYUEVDVF9ORSh2YWwxLCB2YWwyKSBcCi0gIEVYUEVDVF9QUkVEX0ZP
Uk1BVDIoOjp0ZXN0aW5nOjppbnRlcm5hbDo6Q21wSGVscGVyTkUsIHZhbDEsIHZhbDIpCi0jZGVm
aW5lIEVYUEVDVF9MRSh2YWwxLCB2YWwyKSBcCi0gIEVYUEVDVF9QUkVEX0ZPUk1BVDIoOjp0ZXN0
aW5nOjppbnRlcm5hbDo6Q21wSGVscGVyTEUsIHZhbDEsIHZhbDIpCi0jZGVmaW5lIEVYUEVDVF9M
VCh2YWwxLCB2YWwyKSBcCi0gIEVYUEVDVF9QUkVEX0ZPUk1BVDIoOjp0ZXN0aW5nOjppbnRlcm5h
bDo6Q21wSGVscGVyTFQsIHZhbDEsIHZhbDIpCi0jZGVmaW5lIEVYUEVDVF9HRSh2YWwxLCB2YWwy
KSBcCi0gIEVYUEVDVF9QUkVEX0ZPUk1BVDIoOjp0ZXN0aW5nOjppbnRlcm5hbDo6Q21wSGVscGVy
R0UsIHZhbDEsIHZhbDIpCi0jZGVmaW5lIEVYUEVDVF9HVCh2YWwxLCB2YWwyKSBcCi0gIEVYUEVD
VF9QUkVEX0ZPUk1BVDIoOjp0ZXN0aW5nOjppbnRlcm5hbDo6Q21wSGVscGVyR1QsIHZhbDEsIHZh
bDIpCi0KLSNkZWZpbmUgR1RFU1RfQVNTRVJUX0VRKHZhbDEsIHZhbDIpIFwKLSAgQVNTRVJUX1BS
RURfRk9STUFUMig6OnRlc3Rpbmc6OmludGVybmFsOjogXAotICAgICAgICAgICAgICAgICAgICAg
IEVxSGVscGVyPEdURVNUX0lTX05VTExfTElURVJBTF8odmFsMSk+OjpDb21wYXJlLCBcCi0gICAg
ICAgICAgICAgICAgICAgICAgdmFsMSwgdmFsMikKLSNkZWZpbmUgR1RFU1RfQVNTRVJUX05FKHZh
bDEsIHZhbDIpIFwKLSAgQVNTRVJUX1BSRURfRk9STUFUMig6OnRlc3Rpbmc6OmludGVybmFsOjpD
bXBIZWxwZXJORSwgdmFsMSwgdmFsMikKLSNkZWZpbmUgR1RFU1RfQVNTRVJUX0xFKHZhbDEsIHZh
bDIpIFwKLSAgQVNTRVJUX1BSRURfRk9STUFUMig6OnRlc3Rpbmc6OmludGVybmFsOjpDbXBIZWxw
ZXJMRSwgdmFsMSwgdmFsMikKLSNkZWZpbmUgR1RFU1RfQVNTRVJUX0xUKHZhbDEsIHZhbDIpIFwK
LSAgQVNTRVJUX1BSRURfRk9STUFUMig6OnRlc3Rpbmc6OmludGVybmFsOjpDbXBIZWxwZXJMVCwg
dmFsMSwgdmFsMikKLSNkZWZpbmUgR1RFU1RfQVNTRVJUX0dFKHZhbDEsIHZhbDIpIFwKLSAgQVNT
RVJUX1BSRURfRk9STUFUMig6OnRlc3Rpbmc6OmludGVybmFsOjpDbXBIZWxwZXJHRSwgdmFsMSwg
dmFsMikKLSNkZWZpbmUgR1RFU1RfQVNTRVJUX0dUKHZhbDEsIHZhbDIpIFwKLSAgQVNTRVJUX1BS
RURfRk9STUFUMig6OnRlc3Rpbmc6OmludGVybmFsOjpDbXBIZWxwZXJHVCwgdmFsMSwgdmFsMikK
LQotLy8gRGVmaW5lIG1hY3JvIEdURVNUX0RPTlRfREVGSU5FX0FTU0VSVF9YWSB0byAxIHRvIG9t
aXQgdGhlIGRlZmluaXRpb24gb2YKLS8vIEFTU0VSVF9YWSgpLCB3aGljaCBjbGFzaGVzIHdpdGgg
c29tZSB1c2Vycycgb3duIGNvZGUuCi0KLSNpZiAhR1RFU1RfRE9OVF9ERUZJTkVfQVNTRVJUX0VR
Ci0jIGRlZmluZSBBU1NFUlRfRVEodmFsMSwgdmFsMikgR1RFU1RfQVNTRVJUX0VRKHZhbDEsIHZh
bDIpCi0jZW5kaWYKLQotI2lmICFHVEVTVF9ET05UX0RFRklORV9BU1NFUlRfTkUKLSMgZGVmaW5l
IEFTU0VSVF9ORSh2YWwxLCB2YWwyKSBHVEVTVF9BU1NFUlRfTkUodmFsMSwgdmFsMikKLSNlbmRp
ZgotCi0jaWYgIUdURVNUX0RPTlRfREVGSU5FX0FTU0VSVF9MRQotIyBkZWZpbmUgQVNTRVJUX0xF
KHZhbDEsIHZhbDIpIEdURVNUX0FTU0VSVF9MRSh2YWwxLCB2YWwyKQotI2VuZGlmCi0KLSNpZiAh
R1RFU1RfRE9OVF9ERUZJTkVfQVNTRVJUX0xUCi0jIGRlZmluZSBBU1NFUlRfTFQodmFsMSwgdmFs
MikgR1RFU1RfQVNTRVJUX0xUKHZhbDEsIHZhbDIpCi0jZW5kaWYKLQotI2lmICFHVEVTVF9ET05U
X0RFRklORV9BU1NFUlRfR0UKLSMgZGVmaW5lIEFTU0VSVF9HRSh2YWwxLCB2YWwyKSBHVEVTVF9B
U1NFUlRfR0UodmFsMSwgdmFsMikKLSNlbmRpZgotCi0jaWYgIUdURVNUX0RPTlRfREVGSU5FX0FT
U0VSVF9HVAotIyBkZWZpbmUgQVNTRVJUX0dUKHZhbDEsIHZhbDIpIEdURVNUX0FTU0VSVF9HVCh2
YWwxLCB2YWwyKQotI2VuZGlmCi0KLS8vIEMtc3RyaW5nIENvbXBhcmlzb25zLiAgQWxsIHRlc3Rz
IHRyZWF0IE5VTEwgYW5kIGFueSBub24tTlVMTCBzdHJpbmcKLS8vIGFzIGRpZmZlcmVudC4gIFR3
byBOVUxMcyBhcmUgZXF1YWwuCi0vLwotLy8gICAgKiB7QVNTRVJUfEVYUEVDVH1fU1RSRVEoczEs
IHMyKTogICAgIFRlc3RzIHRoYXQgczEgPT0gczIKLS8vICAgICoge0FTU0VSVHxFWFBFQ1R9X1NU
Uk5FKHMxLCBzMik6ICAgICBUZXN0cyB0aGF0IHMxICE9IHMyCi0vLyAgICAqIHtBU1NFUlR8RVhQ
RUNUfV9TVFJDQVNFRVEoczEsIHMyKTogVGVzdHMgdGhhdCBzMSA9PSBzMiwgaWdub3JpbmcgY2Fz
ZQotLy8gICAgKiB7QVNTRVJUfEVYUEVDVH1fU1RSQ0FTRU5FKHMxLCBzMik6IFRlc3RzIHRoYXQg
czEgIT0gczIsIGlnbm9yaW5nIGNhc2UKLS8vCi0vLyBGb3Igd2lkZSBvciBuYXJyb3cgc3RyaW5n
IG9iamVjdHMsIHlvdSBjYW4gdXNlIHRoZQotLy8ge0FTU0VSVHxFWFBFQ1R9Xz8/KCkgbWFjcm9z
LgotLy8KLS8vIERvbid0IGRlcGVuZCBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGFyZ3VtZW50
cyBhcmUgZXZhbHVhdGVkLAotLy8gd2hpY2ggaXMgdW5kZWZpbmVkLgotLy8KLS8vIFRoZXNlIG1h
Y3JvcyBldmFsdWF0ZSB0aGVpciBhcmd1bWVudHMgZXhhY3RseSBvbmNlLgotCi0jZGVmaW5lIEVY
UEVDVF9TVFJFUShzMSwgczIpIFwKLSAgRVhQRUNUX1BSRURfRk9STUFUMig6OnRlc3Rpbmc6Omlu
dGVybmFsOjpDbXBIZWxwZXJTVFJFUSwgczEsIHMyKQotI2RlZmluZSBFWFBFQ1RfU1RSTkUoczEs
IHMyKSBcCi0gIEVYUEVDVF9QUkVEX0ZPUk1BVDIoOjp0ZXN0aW5nOjppbnRlcm5hbDo6Q21wSGVs
cGVyU1RSTkUsIHMxLCBzMikKLSNkZWZpbmUgRVhQRUNUX1NUUkNBU0VFUShzMSwgczIpIFwKLSAg
RVhQRUNUX1BSRURfRk9STUFUMig6OnRlc3Rpbmc6OmludGVybmFsOjpDbXBIZWxwZXJTVFJDQVNF
RVEsIHMxLCBzMikKLSNkZWZpbmUgRVhQRUNUX1NUUkNBU0VORShzMSwgczIpXAotICBFWFBFQ1Rf
UFJFRF9GT1JNQVQyKDo6dGVzdGluZzo6aW50ZXJuYWw6OkNtcEhlbHBlclNUUkNBU0VORSwgczEs
IHMyKQotCi0jZGVmaW5lIEFTU0VSVF9TVFJFUShzMSwgczIpIFwKLSAgQVNTRVJUX1BSRURfRk9S
TUFUMig6OnRlc3Rpbmc6OmludGVybmFsOjpDbXBIZWxwZXJTVFJFUSwgczEsIHMyKQotI2RlZmlu
ZSBBU1NFUlRfU1RSTkUoczEsIHMyKSBcCi0gIEFTU0VSVF9QUkVEX0ZPUk1BVDIoOjp0ZXN0aW5n
OjppbnRlcm5hbDo6Q21wSGVscGVyU1RSTkUsIHMxLCBzMikKLSNkZWZpbmUgQVNTRVJUX1NUUkNB
U0VFUShzMSwgczIpIFwKLSAgQVNTRVJUX1BSRURfRk9STUFUMig6OnRlc3Rpbmc6OmludGVybmFs
OjpDbXBIZWxwZXJTVFJDQVNFRVEsIHMxLCBzMikKLSNkZWZpbmUgQVNTRVJUX1NUUkNBU0VORShz
MSwgczIpXAotICBBU1NFUlRfUFJFRF9GT1JNQVQyKDo6dGVzdGluZzo6aW50ZXJuYWw6OkNtcEhl
bHBlclNUUkNBU0VORSwgczEsIHMyKQotCi0vLyBNYWNyb3MgZm9yIGNvbXBhcmluZyBmbG9hdGlu
Zy1wb2ludCBudW1iZXJzLgotLy8KLS8vICAgICoge0FTU0VSVHxFWFBFQ1R9X0ZMT0FUX0VRKHZh
bDEsIHZhbDIpOgotLy8gICAgICAgICBUZXN0cyB0aGF0IHR3byBmbG9hdCB2YWx1ZXMgYXJlIGFs
bW9zdCBlcXVhbC4KLS8vICAgICoge0FTU0VSVHxFWFBFQ1R9X0RPVUJMRV9FUSh2YWwxLCB2YWwy
KToKLS8vICAgICAgICAgVGVzdHMgdGhhdCB0d28gZG91YmxlIHZhbHVlcyBhcmUgYWxtb3N0IGVx
dWFsLgotLy8gICAgKiB7QVNTRVJUfEVYUEVDVH1fTkVBUih2MSwgdjIsIGFic19lcnJvcik6Ci0v
LyAgICAgICAgIFRlc3RzIHRoYXQgdjEgYW5kIHYyIGFyZSB3aXRoaW4gdGhlIGdpdmVuIGRpc3Rh
bmNlIHRvIGVhY2ggb3RoZXIuCi0vLwotLy8gR29vZ2xlIFRlc3QgdXNlcyBVTFAtYmFzZWQgY29t
cGFyaXNvbiB0byBhdXRvbWF0aWNhbGx5IHBpY2sgYSBkZWZhdWx0Ci0vLyBlcnJvciBib3VuZCB0
aGF0IGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgb3BlcmFuZHMuICBTZWUgdGhlCi0vLyBGbG9hdGlu
Z1BvaW50IHRlbXBsYXRlIGNsYXNzIGluIGd0ZXN0LWludGVybmFsLmggaWYgeW91IGFyZQotLy8g
aW50ZXJlc3RlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KLQotI2RlZmluZSBFWFBF
Q1RfRkxPQVRfRVEodmFsMSwgdmFsMilcCi0gIEVYUEVDVF9QUkVEX0ZPUk1BVDIoOjp0ZXN0aW5n
OjppbnRlcm5hbDo6Q21wSGVscGVyRmxvYXRpbmdQb2ludEVRPGZsb2F0PiwgXAotICAgICAgICAg
ICAgICAgICAgICAgIHZhbDEsIHZhbDIpCi0KLSNkZWZpbmUgRVhQRUNUX0RPVUJMRV9FUSh2YWwx
LCB2YWwyKVwKLSAgRVhQRUNUX1BSRURfRk9STUFUMig6OnRlc3Rpbmc6OmludGVybmFsOjpDbXBI
ZWxwZXJGbG9hdGluZ1BvaW50RVE8ZG91YmxlPiwgXAotICAgICAgICAgICAgICAgICAgICAgIHZh
bDEsIHZhbDIpCi0KLSNkZWZpbmUgQVNTRVJUX0ZMT0FUX0VRKHZhbDEsIHZhbDIpXAotICBBU1NF
UlRfUFJFRF9GT1JNQVQyKDo6dGVzdGluZzo6aW50ZXJuYWw6OkNtcEhlbHBlckZsb2F0aW5nUG9p
bnRFUTxmbG9hdD4sIFwKLSAgICAgICAgICAgICAgICAgICAgICB2YWwxLCB2YWwyKQotCi0jZGVm
aW5lIEFTU0VSVF9ET1VCTEVfRVEodmFsMSwgdmFsMilcCi0gIEFTU0VSVF9QUkVEX0ZPUk1BVDIo
Ojp0ZXN0aW5nOjppbnRlcm5hbDo6Q21wSGVscGVyRmxvYXRpbmdQb2ludEVRPGRvdWJsZT4sIFwK
LSAgICAgICAgICAgICAgICAgICAgICB2YWwxLCB2YWwyKQotCi0jZGVmaW5lIEVYUEVDVF9ORUFS
KHZhbDEsIHZhbDIsIGFic19lcnJvcilcCi0gIEVYUEVDVF9QUkVEX0ZPUk1BVDMoOjp0ZXN0aW5n
OjppbnRlcm5hbDo6RG91YmxlTmVhclByZWRGb3JtYXQsIFwKLSAgICAgICAgICAgICAgICAgICAg
ICB2YWwxLCB2YWwyLCBhYnNfZXJyb3IpCi0KLSNkZWZpbmUgQVNTRVJUX05FQVIodmFsMSwgdmFs
MiwgYWJzX2Vycm9yKVwKLSAgQVNTRVJUX1BSRURfRk9STUFUMyg6OnRlc3Rpbmc6OmludGVybmFs
OjpEb3VibGVOZWFyUHJlZEZvcm1hdCwgXAotICAgICAgICAgICAgICAgICAgICAgIHZhbDEsIHZh
bDIsIGFic19lcnJvcikKLQotLy8gVGhlc2UgcHJlZGljYXRlIGZvcm1hdCBmdW5jdGlvbnMgd29y
ayBvbiBmbG9hdGluZy1wb2ludCB2YWx1ZXMsIGFuZAotLy8gY2FuIGJlIHVzZWQgaW4ge0FTU0VS
VHxFWFBFQ1R9X1BSRURfRk9STUFUMiooKSwgZS5nLgotLy8KLS8vICAgRVhQRUNUX1BSRURfRk9S
TUFUMih0ZXN0aW5nOjpEb3VibGVMRSwgRm9vKCksIDUuMCk7Ci0KLS8vIEFzc2VydHMgdGhhdCB2
YWwxIGlzIGxlc3MgdGhhbiwgb3IgYWxtb3N0IGVxdWFsIHRvLCB2YWwyLiAgRmFpbHMKLS8vIG90
aGVyd2lzZS4gIEluIHBhcnRpY3VsYXIsIGl0IGZhaWxzIGlmIGVpdGhlciB2YWwxIG9yIHZhbDIg
aXMgTmFOLgotR1RFU1RfQVBJXyBBc3NlcnRpb25SZXN1bHQgRmxvYXRMRShjb25zdCBjaGFyKiBl
eHByMSwgY29uc3QgY2hhciogZXhwcjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIpOwotR1RFU1RfQVBJXyBBc3NlcnRpb25SZXN1bHQg
RG91YmxlTEUoY29uc3QgY2hhciogZXhwcjEsIGNvbnN0IGNoYXIqIGV4cHIyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbDEsIGRvdWJsZSB2YWwyKTsKLQot
Ci0jaWYgR1RFU1RfT1NfV0lORE9XUwotCi0vLyBNYWNyb3MgdGhhdCB0ZXN0IGZvciBIUkVTVUxU
IGZhaWx1cmUgYW5kIHN1Y2Nlc3MsIHRoZXNlIGFyZSBvbmx5IHVzZWZ1bAotLy8gb24gV2luZG93
cywgYW5kIHJlbHkgb24gV2luZG93cyBTREsgbWFjcm9zIGFuZCBBUElzIHRvIGNvbXBpbGUuCi0v
LwotLy8gICAgKiB7QVNTRVJUfEVYUEVDVH1fSFJFU1VMVF97U1VDQ0VFREVEfEZBSUxFRH0oZXhw
cikKLS8vCi0vLyBXaGVuIGV4cHIgdW5leHBlY3RlZGx5IGZhaWxzIG9yIHN1Y2NlZWRzLCBHb29n
bGUgVGVzdCBwcmludHMgdGhlCi0vLyBleHBlY3RlZCByZXN1bHQgYW5kIHRoZSBhY3R1YWwgcmVz
dWx0IHdpdGggYm90aCBhIGh1bWFuLXJlYWRhYmxlCi0vLyBzdHJpbmcgcmVwcmVzZW50YXRpb24g
b2YgdGhlIGVycm9yLCBpZiBhdmFpbGFibGUsIGFzIHdlbGwgYXMgdGhlCi0vLyBoZXggcmVzdWx0
IGNvZGUuCi0jIGRlZmluZSBFWFBFQ1RfSFJFU1VMVF9TVUNDRUVERUQoZXhwcikgXAotICAgIEVY
UEVDVF9QUkVEX0ZPUk1BVDEoOjp0ZXN0aW5nOjppbnRlcm5hbDo6SXNIUkVTVUxUU3VjY2Vzcywg
KGV4cHIpKQotCi0jIGRlZmluZSBBU1NFUlRfSFJFU1VMVF9TVUNDRUVERUQoZXhwcikgXAotICAg
IEFTU0VSVF9QUkVEX0ZPUk1BVDEoOjp0ZXN0aW5nOjppbnRlcm5hbDo6SXNIUkVTVUxUU3VjY2Vz
cywgKGV4cHIpKQotCi0jIGRlZmluZSBFWFBFQ1RfSFJFU1VMVF9GQUlMRUQoZXhwcikgXAotICAg
IEVYUEVDVF9QUkVEX0ZPUk1BVDEoOjp0ZXN0aW5nOjppbnRlcm5hbDo6SXNIUkVTVUxURmFpbHVy
ZSwgKGV4cHIpKQotCi0jIGRlZmluZSBBU1NFUlRfSFJFU1VMVF9GQUlMRUQoZXhwcikgXAotICAg
IEFTU0VSVF9QUkVEX0ZPUk1BVDEoOjp0ZXN0aW5nOjppbnRlcm5hbDo6SXNIUkVTVUxURmFpbHVy
ZSwgKGV4cHIpKQotCi0jZW5kaWYgIC8vIEdURVNUX09TX1dJTkRPV1MKLQotLy8gTWFjcm9zIHRo
YXQgZXhlY3V0ZSBzdGF0ZW1lbnQgYW5kIGNoZWNrIHRoYXQgaXQgZG9lc24ndCBnZW5lcmF0ZSBu
ZXcgZmF0YWwKLS8vIGZhaWx1cmVzIGluIHRoZSBjdXJyZW50IHRocmVhZC4KLS8vCi0vLyAgICog
e0FTU0VSVHxFWFBFQ1R9X05PX0ZBVEFMX0ZBSUxVUkUoc3RhdGVtZW50KTsKLS8vCi0vLyBFeGFt
cGxlczoKLS8vCi0vLyAgIEVYUEVDVF9OT19GQVRBTF9GQUlMVVJFKFByb2Nlc3MoKSk7Ci0vLyAg
IEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKFByb2Nlc3MoKSkgPDwgIlByb2Nlc3MoKSBmYWlsZWQi
OwotLy8KLSNkZWZpbmUgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoc3RhdGVtZW50KSBcCi0gICAg
R1RFU1RfVEVTVF9OT19GQVRBTF9GQUlMVVJFXyhzdGF0ZW1lbnQsIEdURVNUX0ZBVEFMX0ZBSUxV
UkVfKQotI2RlZmluZSBFWFBFQ1RfTk9fRkFUQUxfRkFJTFVSRShzdGF0ZW1lbnQpIFwKLSAgICBH
VEVTVF9URVNUX05PX0ZBVEFMX0ZBSUxVUkVfKHN0YXRlbWVudCwgR1RFU1RfTk9ORkFUQUxfRkFJ
TFVSRV8pCi0KLS8vIENhdXNlcyBhIHRyYWNlIChpbmNsdWRpbmcgdGhlIHNvdXJjZSBmaWxlIHBh
dGgsIHRoZSBjdXJyZW50IGxpbmUKLS8vIG51bWJlciwgYW5kIHRoZSBnaXZlbiBtZXNzYWdlKSB0
byBiZSBpbmNsdWRlZCBpbiBldmVyeSB0ZXN0IGZhaWx1cmUKLS8vIG1lc3NhZ2UgZ2VuZXJhdGVk
IGJ5IGNvZGUgaW4gdGhlIGN1cnJlbnQgc2NvcGUuICBUaGUgZWZmZWN0IGlzCi0vLyB1bmRvbmUg
d2hlbiB0aGUgY29udHJvbCBsZWF2ZXMgdGhlIGN1cnJlbnQgc2NvcGUuCi0vLwotLy8gVGhlIG1l
c3NhZ2UgYXJndW1lbnQgY2FuIGJlIGFueXRoaW5nIHN0cmVhbWFibGUgdG8gc3RkOjpvc3RyZWFt
LgotLy8KLS8vIEluIHRoZSBpbXBsZW1lbnRhdGlvbiwgd2UgaW5jbHVkZSB0aGUgY3VycmVudCBs
aW5lIG51bWJlciBhcyBwYXJ0Ci0vLyBvZiB0aGUgZHVtbXkgdmFyaWFibGUgbmFtZSwgdGh1cyBh
bGxvd2luZyBtdWx0aXBsZSBTQ09QRURfVFJBQ0UoKXMKLS8vIHRvIGFwcGVhciBpbiB0aGUgc2Ft
ZSBibG9jayAtIGFzIGxvbmcgYXMgdGhleSBhcmUgb24gZGlmZmVyZW50Ci0vLyBsaW5lcy4KLSNk
ZWZpbmUgU0NPUEVEX1RSQUNFKG1lc3NhZ2UpIFwKLSAgOjp0ZXN0aW5nOjppbnRlcm5hbDo6U2Nv
cGVkVHJhY2UgR1RFU1RfQ09OQ0FUX1RPS0VOXyhndGVzdF90cmFjZV8sIF9fTElORV9fKShcCi0g
ICAgX19GSUxFX18sIF9fTElORV9fLCA6OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8PCAobWVzc2FnZSkp
Ci0KLS8vIENvbXBpbGUtdGltZSBhc3NlcnRpb24gZm9yIHR5cGUgZXF1YWxpdHkuCi0vLyBTdGF0
aWNBc3NlcnRUeXBlRXE8dHlwZTEsIHR5cGUyPigpIGNvbXBpbGVzIGlmZiB0eXBlMSBhbmQgdHlw
ZTIgYXJlCi0vLyB0aGUgc2FtZSB0eXBlLiAgVGhlIHZhbHVlIGl0IHJldHVybnMgaXMgbm90IGlu
dGVyZXN0aW5nLgotLy8KLS8vIEluc3RlYWQgb2YgbWFraW5nIFN0YXRpY0Fzc2VydFR5cGVFcSBh
IGNsYXNzIHRlbXBsYXRlLCB3ZSBtYWtlIGl0IGEKLS8vIGZ1bmN0aW9uIHRlbXBsYXRlIHRoYXQg
aW52b2tlcyBhIGhlbHBlciBjbGFzcyB0ZW1wbGF0ZS4gIFRoaXMKLS8vIHByZXZlbnRzIGEgdXNl
ciBmcm9tIG1pc3VzaW5nIFN0YXRpY0Fzc2VydFR5cGVFcTxUMSwgVDI+IGJ5Ci0vLyBkZWZpbmlu
ZyBvYmplY3RzIG9mIHRoYXQgdHlwZS4KLS8vCi0vLyBDQVZFQVQ6Ci0vLwotLy8gV2hlbiB1c2Vk
IGluc2lkZSBhIG1ldGhvZCBvZiBhIGNsYXNzIHRlbXBsYXRlLAotLy8gU3RhdGljQXNzZXJ0VHlw
ZUVxPFQxLCBUMj4oKSBpcyBlZmZlY3RpdmUgT05MWSBJRiB0aGUgbWV0aG9kIGlzCi0vLyBpbnN0
YW50aWF0ZWQuICBGb3IgZXhhbXBsZSwgZ2l2ZW46Ci0vLwotLy8gICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gY2xhc3MgRm9vIHsKLS8vICAgIHB1YmxpYzoKLS8vICAgICB2b2lkIEJhcigpIHsgdGVz
dGluZzo6U3RhdGljQXNzZXJ0VHlwZUVxPGludCwgVD4oKTsgfQotLy8gICB9OwotLy8KLS8vIHRo
ZSBjb2RlOgotLy8KLS8vICAgdm9pZCBUZXN0MSgpIHsgRm9vPGJvb2w+IGZvbzsgfQotLy8KLS8v
IHdpbGwgTk9UIGdlbmVyYXRlIGEgY29tcGlsZXIgZXJyb3IsIGFzIEZvbzxib29sPjo6QmFyKCkg
aXMgbmV2ZXIKLS8vIGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gIEluc3RlYWQsIHlvdSBuZWVkOgot
Ly8KLS8vICAgdm9pZCBUZXN0MigpIHsgRm9vPGJvb2w+IGZvbzsgZm9vLkJhcigpOyB9Ci0vLwot
Ly8gdG8gY2F1c2UgYSBjb21waWxlciBlcnJvci4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDI+Ci1ib29sIFN0YXRpY0Fzc2VydFR5cGVFcSgpIHsKLSAgKHZvaWQpaW50ZXJuYWw6
OlN0YXRpY0Fzc2VydFR5cGVFcUhlbHBlcjxUMSwgVDI+KCk7Ci0gIHJldHVybiB0cnVlOwotfQot
Ci0vLyBEZWZpbmVzIGEgdGVzdC4KLS8vCi0vLyBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBu
YW1lIG9mIHRoZSB0ZXN0IGNhc2UsIGFuZCB0aGUgc2Vjb25kCi0vLyBwYXJhbWV0ZXIgaXMgdGhl
IG5hbWUgb2YgdGhlIHRlc3Qgd2l0aGluIHRoZSB0ZXN0IGNhc2UuCi0vLwotLy8gVGhlIGNvbnZl
bnRpb24gaXMgdG8gZW5kIHRoZSB0ZXN0IGNhc2UgbmFtZSB3aXRoICJUZXN0Ii4gIEZvcgotLy8g
ZXhhbXBsZSwgYSB0ZXN0IGNhc2UgZm9yIHRoZSBGb28gY2xhc3MgY2FuIGJlIG5hbWVkIEZvb1Rl
c3QuCi0vLwotLy8gVGVzdCBjb2RlIHNob3VsZCBhcHBlYXIgYmV0d2VlbiBicmFjZXMgYWZ0ZXIg
YW4gaW52b2NhdGlvbiBvZgotLy8gdGhpcyBtYWNyby4gIEV4YW1wbGU6Ci0vLwotLy8gICBURVNU
KEZvb1Rlc3QsIEluaXRpYWxpemVzQ29ycmVjdGx5KSB7Ci0vLyAgICAgRm9vIGZvbzsKLS8vICAg
ICBFWFBFQ1RfVFJVRShmb28uU3RhdHVzSXNPSygpKTsKLS8vICAgfQotCi0vLyBOb3RlIHRoYXQg
d2UgY2FsbCBHZXRUZXN0VHlwZUlkKCkgaW5zdGVhZCBvZiBHZXRUeXBlSWQ8Ci0vLyA6OnRlc3Rp
bmc6OlRlc3Q+KCkgaGVyZSB0byBnZXQgdGhlIHR5cGUgSUQgb2YgdGVzdGluZzo6VGVzdC4gIFRo
aXMKLS8vIGlzIHRvIHdvcmsgYXJvdW5kIGEgc3VzcGVjdGVkIGxpbmtlciBidWcgd2hlbiB1c2lu
ZyBHb29nbGUgVGVzdCBhcwotLy8gYSBmcmFtZXdvcmsgb24gTWFjIE9TIFguICBUaGUgYnVnIGNh
dXNlcyBHZXRUeXBlSWQ8Ci0vLyA6OnRlc3Rpbmc6OlRlc3Q+KCkgdG8gcmV0dXJuIGRpZmZlcmVu
dCB2YWx1ZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIKLS8vIHRoZSBjYWxsIGlzIGZyb20gdGhlIEdv
b2dsZSBUZXN0IGZyYW1ld29yayBpdHNlbGYgb3IgZnJvbSB1c2VyIHRlc3QKLS8vIGNvZGUuICBH
ZXRUZXN0VHlwZUlkKCkgaXMgZ3VhcmFudGVlZCB0byBhbHdheXMgcmV0dXJuIHRoZSBzYW1lCi0v
LyB2YWx1ZSwgYXMgaXQgYWx3YXlzIGNhbGxzIEdldFR5cGVJZDw+KCkgZnJvbSB0aGUgR29vZ2xl
IFRlc3QKLS8vIGZyYW1ld29yay4KLSNkZWZpbmUgR1RFU1RfVEVTVCh0ZXN0X2Nhc2VfbmFtZSwg
dGVzdF9uYW1lKVwKLSAgR1RFU1RfVEVTVF8odGVzdF9jYXNlX25hbWUsIHRlc3RfbmFtZSwgXAot
ICAgICAgICAgICAgICA6OnRlc3Rpbmc6OlRlc3QsIDo6dGVzdGluZzo6aW50ZXJuYWw6OkdldFRl
c3RUeXBlSWQoKSkKLQotLy8gRGVmaW5lIHRoaXMgbWFjcm8gdG8gMSB0byBvbWl0IHRoZSBkZWZp
bml0aW9uIG9mIFRFU1QoKSwgd2hpY2gKLS8vIGlzIGEgZ2VuZXJpYyBuYW1lIGFuZCBjbGFzaGVz
IHdpdGggc29tZSBvdGhlciBsaWJyYXJpZXMuCi0jaWYgIUdURVNUX0RPTlRfREVGSU5FX1RFU1QK
LSMgZGVmaW5lIFRFU1QodGVzdF9jYXNlX25hbWUsIHRlc3RfbmFtZSkgR1RFU1RfVEVTVCh0ZXN0
X2Nhc2VfbmFtZSwgdGVzdF9uYW1lKQotI2VuZGlmCi0KLS8vIERlZmluZXMgYSB0ZXN0IHRoYXQg
dXNlcyBhIHRlc3QgZml4dHVyZS4KLS8vCi0vLyBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBu
YW1lIG9mIHRoZSB0ZXN0IGZpeHR1cmUgY2xhc3MsIHdoaWNoCi0vLyBhbHNvIGRvdWJsZXMgYXMg
dGhlIHRlc3QgY2FzZSBuYW1lLiAgVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlCi0vLyBuYW1l
IG9mIHRoZSB0ZXN0IHdpdGhpbiB0aGUgdGVzdCBjYXNlLgotLy8KLS8vIEEgdGVzdCBmaXh0dXJl
IGNsYXNzIG11c3QgYmUgZGVjbGFyZWQgZWFybGllci4gIFRoZSB1c2VyIHNob3VsZCBwdXQKLS8v
IGhpcyB0ZXN0IGNvZGUgYmV0d2VlbiBicmFjZXMgYWZ0ZXIgdXNpbmcgdGhpcyBtYWNyby4gIEV4
YW1wbGU6Ci0vLwotLy8gICBjbGFzcyBGb29UZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qgewot
Ly8gICAgcHJvdGVjdGVkOgotLy8gICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIHsgYl8uQWRkRWxl
bWVudCgzKTsgfQotLy8KLS8vICAgICBGb28gYV87Ci0vLyAgICAgRm9vIGJfOwotLy8gICB9Owot
Ly8KLS8vICAgVEVTVF9GKEZvb1Rlc3QsIEluaXRpYWxpemVzQ29ycmVjdGx5KSB7Ci0vLyAgICAg
RVhQRUNUX1RSVUUoYV8uU3RhdHVzSXNPSygpKTsKLS8vICAgfQotLy8KLS8vICAgVEVTVF9GKEZv
b1Rlc3QsIFJldHVybnNFbGVtZW50Q291bnRDb3JyZWN0bHkpIHsKLS8vICAgICBFWFBFQ1RfRVEo
MCwgYV8uc2l6ZSgpKTsKLS8vICAgICBFWFBFQ1RfRVEoMSwgYl8uc2l6ZSgpKTsKLS8vICAgfQot
Ci0jZGVmaW5lIFRFU1RfRih0ZXN0X2ZpeHR1cmUsIHRlc3RfbmFtZSlcCi0gIEdURVNUX1RFU1Rf
KHRlc3RfZml4dHVyZSwgdGVzdF9uYW1lLCB0ZXN0X2ZpeHR1cmUsIFwKLSAgICAgICAgICAgICAg
Ojp0ZXN0aW5nOjppbnRlcm5hbDo6R2V0VHlwZUlkPHRlc3RfZml4dHVyZT4oKSkKLQotfSAgLy8g
bmFtZXNwYWNlIHRlc3RpbmcKLQotLy8gVXNlIHRoaXMgZnVuY3Rpb24gaW4gbWFpbigpIHRvIHJ1
biBhbGwgdGVzdHMuICBJdCByZXR1cm5zIDAgaWYgYWxsCi0vLyB0ZXN0cyBhcmUgc3VjY2Vzc2Z1
bCwgb3IgMSBvdGhlcndpc2UuCi0vLwotLy8gUlVOX0FMTF9URVNUUygpIHNob3VsZCBiZSBpbnZv
a2VkIGFmdGVyIHRoZSBjb21tYW5kIGxpbmUgaGFzIGJlZW4KLS8vIHBhcnNlZCBieSBJbml0R29v
Z2xlVGVzdCgpLgotLy8KLS8vIFRoaXMgZnVuY3Rpb24gd2FzIGZvcm1lcmx5IGEgbWFjcm87IHRo
dXMsIGl0IGlzIGluIHRoZSBnbG9iYWwKLS8vIG5hbWVzcGFjZSBhbmQgaGFzIGFuIGFsbC1jYXBz
IG5hbWUuCi1pbnQgUlVOX0FMTF9URVNUUygpIEdURVNUX01VU1RfVVNFX1JFU1VMVF87Ci0KLWlu
bGluZSBpbnQgUlVOX0FMTF9URVNUUygpIHsKLSAgcmV0dXJuIDo6dGVzdGluZzo6VW5pdFRlc3Q6
OkdldEluc3RhbmNlKCktPlJ1bigpOwotfQotCi0jZW5kaWYgIC8vIEdURVNUX0lOQ0xVREVfR1RF
U1RfR1RFU1RfSF8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdF9wcmVkX2ltcGwuaCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVk
ZS9ndGVzdC9ndGVzdF9wcmVkX2ltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MzBhZTcxMmY1MGVkM2Q4ZTg0NDZlNDQ5NWFmOWIxYWJlY2FiMmU4Ni4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3RfcHJlZF9pbXBs
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNTggKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMDYsIEdv
b2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBUaGlzIGZpbGUgaXMgQVVUT01BVElDQUxMWSBH
RU5FUkFURUQgb24gMTAvMzEvMjAxMSBieSBjb21tYW5kCi0vLyAnZ2VuX2d0ZXN0X3ByZWRfaW1w
bC5weSA1Jy4gIERPIE5PVCBFRElUIEJZIEhBTkQhCi0vLwotLy8gSW1wbGVtZW50cyBhIGZhbWls
eSBvZiBnZW5lcmljIHByZWRpY2F0ZSBhc3NlcnRpb24gbWFjcm9zLgotCi0jaWZuZGVmIEdURVNU
X0lOQ0xVREVfR1RFU1RfR1RFU1RfUFJFRF9JTVBMX0hfCi0jZGVmaW5lIEdURVNUX0lOQ0xVREVf
R1RFU1RfR1RFU1RfUFJFRF9JTVBMX0hfCi0KLS8vIE1ha2VzIHN1cmUgdGhpcyBoZWFkZXIgaXMg
bm90IGluY2x1ZGVkIGJlZm9yZSBndGVzdC5oLgotI2lmbmRlZiBHVEVTVF9JTkNMVURFX0dURVNU
X0dURVNUX0hfCi0jIGVycm9yIERvIG5vdCBpbmNsdWRlIGd0ZXN0X3ByZWRfaW1wbC5oIGRpcmVj
dGx5LiAgSW5jbHVkZSBndGVzdC5oIGluc3RlYWQuCi0jZW5kaWYgIC8vIEdURVNUX0lOQ0xVREVf
R1RFU1RfR1RFU1RfSF8KLQotLy8gVGhpcyBoZWFkZXIgaW1wbGVtZW50cyBhIGZhbWlseSBvZiBn
ZW5lcmljIHByZWRpY2F0ZSBhc3NlcnRpb24KLS8vIG1hY3JvczoKLS8vCi0vLyAgIEFTU0VSVF9Q
UkVEX0ZPUk1BVDEocHJlZF9mb3JtYXQsIHYxKQotLy8gICBBU1NFUlRfUFJFRF9GT1JNQVQyKHBy
ZWRfZm9ybWF0LCB2MSwgdjIpCi0vLyAgIC4uLgotLy8KLS8vIHdoZXJlIHByZWRfZm9ybWF0IGlz
IGEgZnVuY3Rpb24gb3IgZnVuY3RvciB0aGF0IHRha2VzIG4gKGluIHRoZQotLy8gY2FzZSBvZiBB
U1NFUlRfUFJFRF9GT1JNQVRuKSB2YWx1ZXMgYW5kIHRoZWlyIHNvdXJjZSBleHByZXNzaW9uCi0v
LyB0ZXh0LCBhbmQgcmV0dXJucyBhIHRlc3Rpbmc6OkFzc2VydGlvblJlc3VsdC4gIFNlZSB0aGUg
ZGVmaW5pdGlvbgotLy8gb2YgQVNTRVJUX0VRIGluIGd0ZXN0LmggZm9yIGFuIGV4YW1wbGUuCi0v
LwotLy8gSWYgeW91IGRvbid0IGNhcmUgYWJvdXQgZm9ybWF0dGluZywgeW91IGNhbiB1c2UgdGhl
IG1vcmUKLS8vIHJlc3RyaWN0aXZlIHZlcnNpb246Ci0vLwotLy8gICBBU1NFUlRfUFJFRDEocHJl
ZCwgdjEpCi0vLyAgIEFTU0VSVF9QUkVEMihwcmVkLCB2MSwgdjIpCi0vLyAgIC4uLgotLy8KLS8v
IHdoZXJlIHByZWQgaXMgYW4gbi1hcnkgZnVuY3Rpb24gb3IgZnVuY3RvciB0aGF0IHJldHVybnMg
Ym9vbCwKLS8vIGFuZCB0aGUgdmFsdWVzIHYxLCB2MiwgLi4uLCBtdXN0IHN1cHBvcnQgdGhlIDw8
IG9wZXJhdG9yIGZvcgotLy8gc3RyZWFtaW5nIHRvIHN0ZDo6b3N0cmVhbS4KLS8vCi0vLyBXZSBh
bHNvIGRlZmluZSB0aGUgRVhQRUNUXyogdmFyaWF0aW9ucy4KLS8vCi0vLyBGb3Igbm93IHdlIG9u
bHkgc3VwcG9ydCBwcmVkaWNhdGVzIHdob3NlIGFyaXR5IGlzIGF0IG1vc3QgNS4KLS8vIFBsZWFz
ZSBlbWFpbCBnb29nbGV0ZXN0ZnJhbWV3b3JrQGdvb2dsZWdyb3Vwcy5jb20gaWYgeW91IG5lZWQK
LS8vIHN1cHBvcnQgZm9yIGhpZ2hlciBhcml0aWVzLgotCi0vLyBHVEVTVF9BU1NFUlRfIGlzIHRo
ZSBiYXNpYyBzdGF0ZW1lbnQgdG8gd2hpY2ggYWxsIG9mIHRoZSBhc3NlcnRpb25zCi0vLyBpbiB0
aGlzIGZpbGUgcmVkdWNlLiAgRG9uJ3QgdXNlIHRoaXMgaW4geW91ciBjb2RlLgotCi0jZGVmaW5l
IEdURVNUX0FTU0VSVF8oZXhwcmVzc2lvbiwgb25fZmFpbHVyZSkgXAotICBHVEVTVF9BTUJJR1VP
VVNfRUxTRV9CTE9DS0VSXyBcCi0gIGlmIChjb25zdCA6OnRlc3Rpbmc6OkFzc2VydGlvblJlc3Vs
dCBndGVzdF9hciA9IChleHByZXNzaW9uKSkgXAotICAgIDsgXAotICBlbHNlIFwKLSAgICBvbl9m
YWlsdXJlKGd0ZXN0X2FyLmZhaWx1cmVfbWVzc2FnZSgpKQotCi0KLS8vIEhlbHBlciBmdW5jdGlv
biBmb3IgaW1wbGVtZW50aW5nIHtFWFBFQ1R8QVNTRVJUfV9QUkVEMS4gIERvbid0IHVzZQotLy8g
dGhpcyBpbiB5b3VyIGNvZGUuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUHJlZCwKLSAgICAgICAgICB0
eXBlbmFtZSBUMT4KLUFzc2VydGlvblJlc3VsdCBBc3NlcnRQcmVkMUhlbHBlcihjb25zdCBjaGFy
KiBwcmVkX3RleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZCBwcmVkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQxJiB2MSkgewotICBpZiAocHJl
ZCh2MSkpIHJldHVybiBBc3NlcnRpb25TdWNjZXNzKCk7Ci0KLSAgcmV0dXJuIEFzc2VydGlvbkZh
aWx1cmUoKSA8PCBwcmVkX3RleHQgPDwgIigiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
PDwgZTEgPDwgIikgZXZhbHVhdGVzIHRvIGZhbHNlLCB3aGVyZSIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8PCAiXG4iIDw8IGUxIDw8ICIgZXZhbHVhdGVzIHRvICIgPDwgdjE7Ci19Ci0K
LS8vIEludGVybmFsIG1hY3JvIGZvciBpbXBsZW1lbnRpbmcge0VYUEVDVHxBU1NFUlR9X1BSRURf
Rk9STUFUMS4KLS8vIERvbid0IHVzZSB0aGlzIGluIHlvdXIgY29kZS4KLSNkZWZpbmUgR1RFU1Rf
UFJFRF9GT1JNQVQxXyhwcmVkX2Zvcm1hdCwgdjEsIG9uX2ZhaWx1cmUpXAotICBHVEVTVF9BU1NF
UlRfKHByZWRfZm9ybWF0KCN2MSwgdjEpLCBcCi0gICAgICAgICAgICAgICAgb25fZmFpbHVyZSkK
LQotLy8gSW50ZXJuYWwgbWFjcm8gZm9yIGltcGxlbWVudGluZyB7RVhQRUNUfEFTU0VSVH1fUFJF
RDEuICBEb24ndCB1c2UKLS8vIHRoaXMgaW4geW91ciBjb2RlLgotI2RlZmluZSBHVEVTVF9QUkVE
MV8ocHJlZCwgdjEsIG9uX2ZhaWx1cmUpXAotICBHVEVTVF9BU1NFUlRfKDo6dGVzdGluZzo6QXNz
ZXJ0UHJlZDFIZWxwZXIoI3ByZWQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICN2MSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJlZCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdjEpLCBvbl9mYWlsdXJlKQotCi0vLyBVbmFyeSBwcmVkaWNhdGUgYXNzZXJ0aW9uIG1h
Y3Jvcy4KLSNkZWZpbmUgRVhQRUNUX1BSRURfRk9STUFUMShwcmVkX2Zvcm1hdCwgdjEpIFwKLSAg
R1RFU1RfUFJFRF9GT1JNQVQxXyhwcmVkX2Zvcm1hdCwgdjEsIEdURVNUX05PTkZBVEFMX0ZBSUxV
UkVfKQotI2RlZmluZSBFWFBFQ1RfUFJFRDEocHJlZCwgdjEpIFwKLSAgR1RFU1RfUFJFRDFfKHBy
ZWQsIHYxLCBHVEVTVF9OT05GQVRBTF9GQUlMVVJFXykKLSNkZWZpbmUgQVNTRVJUX1BSRURfRk9S
TUFUMShwcmVkX2Zvcm1hdCwgdjEpIFwKLSAgR1RFU1RfUFJFRF9GT1JNQVQxXyhwcmVkX2Zvcm1h
dCwgdjEsIEdURVNUX0ZBVEFMX0ZBSUxVUkVfKQotI2RlZmluZSBBU1NFUlRfUFJFRDEocHJlZCwg
djEpIFwKLSAgR1RFU1RfUFJFRDFfKHByZWQsIHYxLCBHVEVTVF9GQVRBTF9GQUlMVVJFXykKLQot
Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiBmb3IgaW1wbGVtZW50aW5nIHtFWFBFQ1R8QVNTRVJUfV9Q
UkVEMi4gIERvbid0IHVzZQotLy8gdGhpcyBpbiB5b3VyIGNvZGUuCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgUHJlZCwKLSAgICAgICAgICB0eXBlbmFtZSBUMSwKLSAgICAgICAgICB0eXBlbmFtZSBUMj4K
LUFzc2VydGlvblJlc3VsdCBBc3NlcnRQcmVkMkhlbHBlcihjb25zdCBjaGFyKiBwcmVkX3RleHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZTEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZTIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUHJlZCBwcmVkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFQxJiB2MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUMiYgdjIpIHsKLSAgaWYgKHByZWQodjEsIHYyKSkgcmV0dXJuIEFzc2VydGlv
blN1Y2Nlc3MoKTsKLQotICByZXR1cm4gQXNzZXJ0aW9uRmFpbHVyZSgpIDw8IHByZWRfdGV4dCA8
PCAiKCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBlMSA8PCAiLCAiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPDwgZTIgPDwgIikgZXZhbHVhdGVzIHRvIGZhbHNlLCB3aGVy
ZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXG4iIDw8IGUxIDw8ICIgZXZhbHVh
dGVzIHRvICIgPDwgdjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXG4iIDw8IGUy
IDw8ICIgZXZhbHVhdGVzIHRvICIgPDwgdjI7Ci19Ci0KLS8vIEludGVybmFsIG1hY3JvIGZvciBp
bXBsZW1lbnRpbmcge0VYUEVDVHxBU1NFUlR9X1BSRURfRk9STUFUMi4KLS8vIERvbid0IHVzZSB0
aGlzIGluIHlvdXIgY29kZS4KLSNkZWZpbmUgR1RFU1RfUFJFRF9GT1JNQVQyXyhwcmVkX2Zvcm1h
dCwgdjEsIHYyLCBvbl9mYWlsdXJlKVwKLSAgR1RFU1RfQVNTRVJUXyhwcmVkX2Zvcm1hdCgjdjEs
ICN2MiwgdjEsIHYyKSwgXAotICAgICAgICAgICAgICAgIG9uX2ZhaWx1cmUpCi0KLS8vIEludGVy
bmFsIG1hY3JvIGZvciBpbXBsZW1lbnRpbmcge0VYUEVDVHxBU1NFUlR9X1BSRUQyLiAgRG9uJ3Qg
dXNlCi0vLyB0aGlzIGluIHlvdXIgY29kZS4KLSNkZWZpbmUgR1RFU1RfUFJFRDJfKHByZWQsIHYx
LCB2Miwgb25fZmFpbHVyZSlcCi0gIEdURVNUX0FTU0VSVF8oOjp0ZXN0aW5nOjpBc3NlcnRQcmVk
MkhlbHBlcigjcHJlZCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgI3YxLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAjdjIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZWQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYxLCBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MiksIG9uX2Zh
aWx1cmUpCi0KLS8vIEJpbmFyeSBwcmVkaWNhdGUgYXNzZXJ0aW9uIG1hY3Jvcy4KLSNkZWZpbmUg
RVhQRUNUX1BSRURfRk9STUFUMihwcmVkX2Zvcm1hdCwgdjEsIHYyKSBcCi0gIEdURVNUX1BSRURf
Rk9STUFUMl8ocHJlZF9mb3JtYXQsIHYxLCB2MiwgR1RFU1RfTk9ORkFUQUxfRkFJTFVSRV8pCi0j
ZGVmaW5lIEVYUEVDVF9QUkVEMihwcmVkLCB2MSwgdjIpIFwKLSAgR1RFU1RfUFJFRDJfKHByZWQs
IHYxLCB2MiwgR1RFU1RfTk9ORkFUQUxfRkFJTFVSRV8pCi0jZGVmaW5lIEFTU0VSVF9QUkVEX0ZP
Uk1BVDIocHJlZF9mb3JtYXQsIHYxLCB2MikgXAotICBHVEVTVF9QUkVEX0ZPUk1BVDJfKHByZWRf
Zm9ybWF0LCB2MSwgdjIsIEdURVNUX0ZBVEFMX0ZBSUxVUkVfKQotI2RlZmluZSBBU1NFUlRfUFJF
RDIocHJlZCwgdjEsIHYyKSBcCi0gIEdURVNUX1BSRUQyXyhwcmVkLCB2MSwgdjIsIEdURVNUX0ZB
VEFMX0ZBSUxVUkVfKQotCi0KLQotLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBpbXBsZW1lbnRpbmcg
e0VYUEVDVHxBU1NFUlR9X1BSRUQzLiAgRG9uJ3QgdXNlCi0vLyB0aGlzIGluIHlvdXIgY29kZS4K
LXRlbXBsYXRlIDx0eXBlbmFtZSBQcmVkLAotICAgICAgICAgIHR5cGVuYW1lIFQxLAotICAgICAg
ICAgIHR5cGVuYW1lIFQyLAotICAgICAgICAgIHR5cGVuYW1lIFQzPgotQXNzZXJ0aW9uUmVzdWx0
IEFzc2VydFByZWQzSGVscGVyKGNvbnN0IGNoYXIqIHByZWRfdGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlMSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBlMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQcmVkIHByZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVDEm
IHYxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQyJiB2MiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUMyYgdjMpIHsKLSAgaWYgKHBy
ZWQodjEsIHYyLCB2MykpIHJldHVybiBBc3NlcnRpb25TdWNjZXNzKCk7Ci0KLSAgcmV0dXJuIEFz
c2VydGlvbkZhaWx1cmUoKSA8PCBwcmVkX3RleHQgPDwgIigiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPDwgZTEgPDwgIiwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGUy
IDw8ICIsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBlMyA8PCAiKSBldmFsdWF0
ZXMgdG8gZmFsc2UsIHdoZXJlIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJcbiIg
PDwgZTEgPDwgIiBldmFsdWF0ZXMgdG8gIiA8PCB2MQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDw8ICJcbiIgPDwgZTIgPDwgIiBldmFsdWF0ZXMgdG8gIiA8PCB2MgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDw8ICJcbiIgPDwgZTMgPDwgIiBldmFsdWF0ZXMgdG8gIiA8PCB2MzsK
LX0KLQotLy8gSW50ZXJuYWwgbWFjcm8gZm9yIGltcGxlbWVudGluZyB7RVhQRUNUfEFTU0VSVH1f
UFJFRF9GT1JNQVQzLgotLy8gRG9uJ3QgdXNlIHRoaXMgaW4geW91ciBjb2RlLgotI2RlZmluZSBH
VEVTVF9QUkVEX0ZPUk1BVDNfKHByZWRfZm9ybWF0LCB2MSwgdjIsIHYzLCBvbl9mYWlsdXJlKVwK
LSAgR1RFU1RfQVNTRVJUXyhwcmVkX2Zvcm1hdCgjdjEsICN2MiwgI3YzLCB2MSwgdjIsIHYzKSwg
XAotICAgICAgICAgICAgICAgIG9uX2ZhaWx1cmUpCi0KLS8vIEludGVybmFsIG1hY3JvIGZvciBp
bXBsZW1lbnRpbmcge0VYUEVDVHxBU1NFUlR9X1BSRUQzLiAgRG9uJ3QgdXNlCi0vLyB0aGlzIGlu
IHlvdXIgY29kZS4KLSNkZWZpbmUgR1RFU1RfUFJFRDNfKHByZWQsIHYxLCB2MiwgdjMsIG9uX2Zh
aWx1cmUpXAotICBHVEVTVF9BU1NFUlRfKDo6dGVzdGluZzo6QXNzZXJ0UHJlZDNIZWxwZXIoI3By
ZWQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN2MSwg
XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3YyLCBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdjMsIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWQsIFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYxLCBcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MiwgXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdjMpLCBvbl9mYWlsdXJlKQotCi0vLyBUZXJuYXJ5
IHByZWRpY2F0ZSBhc3NlcnRpb24gbWFjcm9zLgotI2RlZmluZSBFWFBFQ1RfUFJFRF9GT1JNQVQz
KHByZWRfZm9ybWF0LCB2MSwgdjIsIHYzKSBcCi0gIEdURVNUX1BSRURfRk9STUFUM18ocHJlZF9m
b3JtYXQsIHYxLCB2MiwgdjMsIEdURVNUX05PTkZBVEFMX0ZBSUxVUkVfKQotI2RlZmluZSBFWFBF
Q1RfUFJFRDMocHJlZCwgdjEsIHYyLCB2MykgXAotICBHVEVTVF9QUkVEM18ocHJlZCwgdjEsIHYy
LCB2MywgR1RFU1RfTk9ORkFUQUxfRkFJTFVSRV8pCi0jZGVmaW5lIEFTU0VSVF9QUkVEX0ZPUk1B
VDMocHJlZF9mb3JtYXQsIHYxLCB2MiwgdjMpIFwKLSAgR1RFU1RfUFJFRF9GT1JNQVQzXyhwcmVk
X2Zvcm1hdCwgdjEsIHYyLCB2MywgR1RFU1RfRkFUQUxfRkFJTFVSRV8pCi0jZGVmaW5lIEFTU0VS
VF9QUkVEMyhwcmVkLCB2MSwgdjIsIHYzKSBcCi0gIEdURVNUX1BSRUQzXyhwcmVkLCB2MSwgdjIs
IHYzLCBHVEVTVF9GQVRBTF9GQUlMVVJFXykKLQotCi0KLS8vIEhlbHBlciBmdW5jdGlvbiBmb3Ig
aW1wbGVtZW50aW5nIHtFWFBFQ1R8QVNTRVJUfV9QUkVENC4gIERvbid0IHVzZQotLy8gdGhpcyBp
biB5b3VyIGNvZGUuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUHJlZCwKLSAgICAgICAgICB0eXBlbmFt
ZSBUMSwKLSAgICAgICAgICB0eXBlbmFtZSBUMiwKLSAgICAgICAgICB0eXBlbmFtZSBUMywKLSAg
ICAgICAgICB0eXBlbmFtZSBUND4KLUFzc2VydGlvblJlc3VsdCBBc3NlcnRQcmVkNEhlbHBlcihj
b25zdCBjaGFyKiBwcmVkX3RleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogZTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
ZTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZTQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZCBwcmVkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQxJiB2MSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUMiYgdjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVDMmIHYzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFQ0JiB2NCkgewotICBpZiAocHJlZCh2MSwgdjIsIHYzLCB2NCkpIHJldHVybiBBc3NlcnRp
b25TdWNjZXNzKCk7Ci0KLSAgcmV0dXJuIEFzc2VydGlvbkZhaWx1cmUoKSA8PCBwcmVkX3RleHQg
PDwgIigiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZTEgPDwgIiwgIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDw8IGUyIDw8ICIsICIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8PCBlMyA8PCAiLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZTQg
PDwgIikgZXZhbHVhdGVzIHRvIGZhbHNlLCB3aGVyZSIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8PCAiXG4iIDw8IGUxIDw8ICIgZXZhbHVhdGVzIHRvICIgPDwgdjEKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8PCAiXG4iIDw8IGUyIDw8ICIgZXZhbHVhdGVzIHRvICIgPDwgdjIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXG4iIDw8IGUzIDw8ICIgZXZhbHVhdGVz
IHRvICIgPDwgdjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXG4iIDw8IGU0IDw8
ICIgZXZhbHVhdGVzIHRvICIgPDwgdjQ7Ci19Ci0KLS8vIEludGVybmFsIG1hY3JvIGZvciBpbXBs
ZW1lbnRpbmcge0VYUEVDVHxBU1NFUlR9X1BSRURfRk9STUFUNC4KLS8vIERvbid0IHVzZSB0aGlz
IGluIHlvdXIgY29kZS4KLSNkZWZpbmUgR1RFU1RfUFJFRF9GT1JNQVQ0XyhwcmVkX2Zvcm1hdCwg
djEsIHYyLCB2MywgdjQsIG9uX2ZhaWx1cmUpXAotICBHVEVTVF9BU1NFUlRfKHByZWRfZm9ybWF0
KCN2MSwgI3YyLCAjdjMsICN2NCwgdjEsIHYyLCB2MywgdjQpLCBcCi0gICAgICAgICAgICAgICAg
b25fZmFpbHVyZSkKLQotLy8gSW50ZXJuYWwgbWFjcm8gZm9yIGltcGxlbWVudGluZyB7RVhQRUNU
fEFTU0VSVH1fUFJFRDQuICBEb24ndCB1c2UKLS8vIHRoaXMgaW4geW91ciBjb2RlLgotI2RlZmlu
ZSBHVEVTVF9QUkVENF8ocHJlZCwgdjEsIHYyLCB2MywgdjQsIG9uX2ZhaWx1cmUpXAotICBHVEVT
VF9BU1NFUlRfKDo6dGVzdGluZzo6QXNzZXJ0UHJlZDRIZWxwZXIoI3ByZWQsIFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN2MSwgXAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3YyLCBcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdjMsIFwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICN2NCwgXAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJlZCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdjEsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHYyLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2MywgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdjQpLCBvbl9mYWlsdXJlKQotCi0vLyA0LWFyeSBwcmVkaWNhdGUgYXNzZXJ0aW9uIG1hY3Jv
cy4KLSNkZWZpbmUgRVhQRUNUX1BSRURfRk9STUFUNChwcmVkX2Zvcm1hdCwgdjEsIHYyLCB2Mywg
djQpIFwKLSAgR1RFU1RfUFJFRF9GT1JNQVQ0XyhwcmVkX2Zvcm1hdCwgdjEsIHYyLCB2MywgdjQs
IEdURVNUX05PTkZBVEFMX0ZBSUxVUkVfKQotI2RlZmluZSBFWFBFQ1RfUFJFRDQocHJlZCwgdjEs
IHYyLCB2MywgdjQpIFwKLSAgR1RFU1RfUFJFRDRfKHByZWQsIHYxLCB2MiwgdjMsIHY0LCBHVEVT
VF9OT05GQVRBTF9GQUlMVVJFXykKLSNkZWZpbmUgQVNTRVJUX1BSRURfRk9STUFUNChwcmVkX2Zv
cm1hdCwgdjEsIHYyLCB2MywgdjQpIFwKLSAgR1RFU1RfUFJFRF9GT1JNQVQ0XyhwcmVkX2Zvcm1h
dCwgdjEsIHYyLCB2MywgdjQsIEdURVNUX0ZBVEFMX0ZBSUxVUkVfKQotI2RlZmluZSBBU1NFUlRf
UFJFRDQocHJlZCwgdjEsIHYyLCB2MywgdjQpIFwKLSAgR1RFU1RfUFJFRDRfKHByZWQsIHYxLCB2
MiwgdjMsIHY0LCBHVEVTVF9GQVRBTF9GQUlMVVJFXykKLQotCi0KLS8vIEhlbHBlciBmdW5jdGlv
biBmb3IgaW1wbGVtZW50aW5nIHtFWFBFQ1R8QVNTRVJUfV9QUkVENS4gIERvbid0IHVzZQotLy8g
dGhpcyBpbiB5b3VyIGNvZGUuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUHJlZCwKLSAgICAgICAgICB0
eXBlbmFtZSBUMSwKLSAgICAgICAgICB0eXBlbmFtZSBUMiwKLSAgICAgICAgICB0eXBlbmFtZSBU
MywKLSAgICAgICAgICB0eXBlbmFtZSBUNCwKLSAgICAgICAgICB0eXBlbmFtZSBUNT4KLUFzc2Vy
dGlvblJlc3VsdCBBc3NlcnRQcmVkNUhlbHBlcihjb25zdCBjaGFyKiBwcmVkX3RleHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZTEsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZTIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZTMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZTQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogZTUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UHJlZCBwcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQxJiB2
MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUMiYgdjIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVDMmIHYzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQ0JiB2NCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUNSYgdjUpIHsKLSAgaWYgKHByZWQodjEsIHYyLCB2MywgdjQs
IHY1KSkgcmV0dXJuIEFzc2VydGlvblN1Y2Nlc3MoKTsKLQotICByZXR1cm4gQXNzZXJ0aW9uRmFp
bHVyZSgpIDw8IHByZWRfdGV4dCA8PCAiKCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
PCBlMSA8PCAiLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZTIgPDwgIiwgIgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGUzIDw8ICIsICIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8PCBlNCA8PCAiLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
PDwgZTUgPDwgIikgZXZhbHVhdGVzIHRvIGZhbHNlLCB3aGVyZSIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8PCAiXG4iIDw8IGUxIDw8ICIgZXZhbHVhdGVzIHRvICIgPDwgdjEKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8PCAiXG4iIDw8IGUyIDw8ICIgZXZhbHVhdGVzIHRvICIg
PDwgdjIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXG4iIDw8IGUzIDw8ICIgZXZh
bHVhdGVzIHRvICIgPDwgdjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiXG4iIDw8
IGU0IDw8ICIgZXZhbHVhdGVzIHRvICIgPDwgdjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8PCAiXG4iIDw8IGU1IDw8ICIgZXZhbHVhdGVzIHRvICIgPDwgdjU7Ci19Ci0KLS8vIEludGVy
bmFsIG1hY3JvIGZvciBpbXBsZW1lbnRpbmcge0VYUEVDVHxBU1NFUlR9X1BSRURfRk9STUFUNS4K
LS8vIERvbid0IHVzZSB0aGlzIGluIHlvdXIgY29kZS4KLSNkZWZpbmUgR1RFU1RfUFJFRF9GT1JN
QVQ1XyhwcmVkX2Zvcm1hdCwgdjEsIHYyLCB2MywgdjQsIHY1LCBvbl9mYWlsdXJlKVwKLSAgR1RF
U1RfQVNTRVJUXyhwcmVkX2Zvcm1hdCgjdjEsICN2MiwgI3YzLCAjdjQsICN2NSwgdjEsIHYyLCB2
MywgdjQsIHY1KSwgXAotICAgICAgICAgICAgICAgIG9uX2ZhaWx1cmUpCi0KLS8vIEludGVybmFs
IG1hY3JvIGZvciBpbXBsZW1lbnRpbmcge0VYUEVDVHxBU1NFUlR9X1BSRUQ1LiAgRG9uJ3QgdXNl
Ci0vLyB0aGlzIGluIHlvdXIgY29kZS4KLSNkZWZpbmUgR1RFU1RfUFJFRDVfKHByZWQsIHYxLCB2
MiwgdjMsIHY0LCB2NSwgb25fZmFpbHVyZSlcCi0gIEdURVNUX0FTU0VSVF8oOjp0ZXN0aW5nOjpB
c3NlcnRQcmVkNUhlbHBlcigjcHJlZCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgI3YxLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAjdjIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICN2MywgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgI3Y0LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj
djUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWQs
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYxLCBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MiwgXAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjMsIFwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0LCBcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NSksIG9uX2ZhaWx1cmUpCi0KLS8vIDUtYXJ5
IHByZWRpY2F0ZSBhc3NlcnRpb24gbWFjcm9zLgotI2RlZmluZSBFWFBFQ1RfUFJFRF9GT1JNQVQ1
KHByZWRfZm9ybWF0LCB2MSwgdjIsIHYzLCB2NCwgdjUpIFwKLSAgR1RFU1RfUFJFRF9GT1JNQVQ1
XyhwcmVkX2Zvcm1hdCwgdjEsIHYyLCB2MywgdjQsIHY1LCBHVEVTVF9OT05GQVRBTF9GQUlMVVJF
XykKLSNkZWZpbmUgRVhQRUNUX1BSRUQ1KHByZWQsIHYxLCB2MiwgdjMsIHY0LCB2NSkgXAotICBH
VEVTVF9QUkVENV8ocHJlZCwgdjEsIHYyLCB2MywgdjQsIHY1LCBHVEVTVF9OT05GQVRBTF9GQUlM
VVJFXykKLSNkZWZpbmUgQVNTRVJUX1BSRURfRk9STUFUNShwcmVkX2Zvcm1hdCwgdjEsIHYyLCB2
MywgdjQsIHY1KSBcCi0gIEdURVNUX1BSRURfRk9STUFUNV8ocHJlZF9mb3JtYXQsIHYxLCB2Miwg
djMsIHY0LCB2NSwgR1RFU1RfRkFUQUxfRkFJTFVSRV8pCi0jZGVmaW5lIEFTU0VSVF9QUkVENShw
cmVkLCB2MSwgdjIsIHYzLCB2NCwgdjUpIFwKLSAgR1RFU1RfUFJFRDVfKHByZWQsIHYxLCB2Miwg
djMsIHY0LCB2NSwgR1RFU1RfRkFUQUxfRkFJTFVSRV8pCi0KLQotCi0jZW5kaWYgIC8vIEdURVNU
X0lOQ0xVREVfR1RFU1RfR1RFU1RfUFJFRF9JTVBMX0hfCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3Qv
Z3Rlc3RfcHJvZC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3Qv
Z29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0X3Byb2QuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZGE4MGRkYzZjNzBlZTJkYzc3M2VkNjc2NWE0Zjg5ZGZhOGNiMzhlOC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rl
c3RfcHJvZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIw
MDYsIEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0v
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLy8KLS8vIEF1dGhvcjogd2FuQGdvb2dsZS5j
b20gKFpoYW55b25nIFdhbikKLS8vCi0vLyBHb29nbGUgQysrIFRlc3RpbmcgRnJhbWV3b3JrIGRl
ZmluaXRpb25zIHVzZWZ1bCBpbiBwcm9kdWN0aW9uIGNvZGUuCi0KLSNpZm5kZWYgR1RFU1RfSU5D
TFVERV9HVEVTVF9HVEVTVF9QUk9EX0hfCi0jZGVmaW5lIEdURVNUX0lOQ0xVREVfR1RFU1RfR1RF
U1RfUFJPRF9IXwotCi0vLyBXaGVuIHlvdSBuZWVkIHRvIHRlc3QgdGhlIHByaXZhdGUgb3IgcHJv
dGVjdGVkIG1lbWJlcnMgb2YgYSBjbGFzcywKLS8vIHVzZSB0aGUgRlJJRU5EX1RFU1QgbWFjcm8g
dG8gZGVjbGFyZSB5b3VyIHRlc3RzIGFzIGZyaWVuZHMgb2YgdGhlCi0vLyBjbGFzcy4gIEZvciBl
eGFtcGxlOgotLy8KLS8vIGNsYXNzIE15Q2xhc3MgewotLy8gIHByaXZhdGU6Ci0vLyAgIHZvaWQg
TXlNZXRob2QoKTsKLS8vICAgRlJJRU5EX1RFU1QoTXlDbGFzc1Rlc3QsIE15TWV0aG9kKTsKLS8v
IH07Ci0vLwotLy8gY2xhc3MgTXlDbGFzc1Rlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0v
LyAgIC8vIC4uLgotLy8gfTsKLS8vCi0vLyBURVNUX0YoTXlDbGFzc1Rlc3QsIE15TWV0aG9kKSB7
Ci0vLyAgIC8vIENhbiBjYWxsIE15Q2xhc3M6Ok15TWV0aG9kKCkgaGVyZS4KLS8vIH0KLQotI2Rl
ZmluZSBGUklFTkRfVEVTVCh0ZXN0X2Nhc2VfbmFtZSwgdGVzdF9uYW1lKVwKLWZyaWVuZCBjbGFz
cyB0ZXN0X2Nhc2VfbmFtZSMjXyMjdGVzdF9uYW1lIyNfVGVzdAotCi0jZW5kaWYgIC8vIEdURVNU
X0lOQ0xVREVfR1RFU1RfR1RFU1RfUFJPRF9IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2ludGVy
bmFsL2N1c3RvbS9ndGVzdC1wb3J0LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9m
b2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvaW50ZXJuYWwvY3VzdG9tL2d0ZXN0
LXBvcnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U3NDRiZDNiYjM4YzNhMjFi
NzUyMDc4YjdhMjFlYjNkNjIyMzdmOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9n
b29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvaW50ZXJuYWwvY3VzdG9tL2d0ZXN0LXBvcnQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1LCBHb29nbGUgSW5j
LgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLS8vCi0vLyBJbmplY3Rpb24gcG9pbnQgZm9yIGN1c3RvbSB1c2VyIGNv
bmZpZ3VyYXRpb25zLgotLy8gVGhlIGZvbGxvd2luZyBtYWNyb3MgY2FuIGJlIGRlZmluZWQ6Ci0v
LwotLy8gICBGbGFnIHJlbGF0ZWQgbWFjcm9zOgotLy8gICAgIEdURVNUX0ZMQUcoZmxhZ19uYW1l
KQotLy8gICAgIEdURVNUX1VTRV9PV05fRkxBR0ZJTEVfRkxBR18gIC0gRGVmaW5lIHRvIDAgd2hl
biB0aGUgc3lzdGVtIHByb3ZpZGVzIGl0cwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3duIGZsYWdmaWxlIGZsYWcgcGFyc2luZy4KLS8vICAgICBHVEVTVF9ERUNMQVJF
X2Jvb2xfKG5hbWUpCi0vLyAgICAgR1RFU1RfREVDTEFSRV9pbnQzMl8obmFtZSkKLS8vICAgICBH
VEVTVF9ERUNMQVJFX3N0cmluZ18obmFtZSkKLS8vICAgICBHVEVTVF9ERUZJTkVfYm9vbF8obmFt
ZSwgZGVmYXVsdF92YWwsIGRvYykKLS8vICAgICBHVEVTVF9ERUZJTkVfaW50MzJfKG5hbWUsIGRl
ZmF1bHRfdmFsLCBkb2MpCi0vLyAgICAgR1RFU1RfREVGSU5FX3N0cmluZ18obmFtZSwgZGVmYXVs
dF92YWwsIGRvYykKLS8vCi0vLyAgIFRlc3QgZmlsdGVyaW5nOgotLy8gICAgIEdURVNUX1RFU1Rf
RklMVEVSX0VOVl9WQVJfIC0gVGhlIG5hbWUgb2YgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhh
dAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSB1c2VkIGlmIC0t
R1RFU1RfRkxBRyh0ZXN0X2ZpbHRlcikKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlzIG5vdCBwcm92aWRlZC4KLS8vCi0vLyAgIExvZ2dpbmc6Ci0vLyAgICAgR1RFU1RfTE9H
XyhzZXZlcml0eSkKLS8vICAgICBHVEVTVF9DSEVDS18oY29uZGl0aW9uKQotLy8gICAgIEZ1bmN0
aW9ucyBMb2dUb1N0ZGVycigpIGFuZCBGbHVzaEluZm9Mb2coKSBoYXZlIHRvIGJlIHByb3ZpZGVk
IHRvby4KLS8vCi0vLyAgIFRocmVhZGluZzoKLS8vICAgICBHVEVTVF9IQVNfTk9USUZJQ0FUSU9O
XyAtIEVuYWJsZWQgaWYgTm90aWZpY2F0aW9uIGlzIGFscmVhZHkgcHJvdmlkZWQuCi0vLyAgICAg
R1RFU1RfSEFTX01VVEVYX0FORF9USFJFQURfTE9DQUxfIC0gRW5hYmxlZCBpZiBNdXRleCBhbmQg
VGhyZWFkTG9jYWwgYXJlCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWxyZWFkeSBwcm92aWRlZC4KLS8vICAgICBNdXN0IGFsc28gcHJvdmlkZSBHVEVTVF9ERUNM
QVJFX1NUQVRJQ19NVVRFWF8obXV0ZXgpIGFuZAotLy8gICAgIEdURVNUX0RFRklORV9TVEFUSUNf
TVVURVhfKG11dGV4KQotLy8KLS8vICAgICBHVEVTVF9FWENMVVNJVkVfTE9DS19SRVFVSVJFRF8o
bG9ja3MpCi0vLyAgICAgR1RFU1RfTE9DS19FWENMVURFRF8obG9ja3MpCi0vLwotLy8gKiogQ3Vz
dG9tIGltcGxlbWVudGF0aW9uIHN0YXJ0cyBoZXJlICoqCi0KLSNpZm5kZWYgR1RFU1RfSU5DTFVE
RV9HVEVTVF9JTlRFUk5BTF9DVVNUT01fR1RFU1RfUE9SVF9IXwotI2RlZmluZSBHVEVTVF9JTkNM
VURFX0dURVNUX0lOVEVSTkFMX0NVU1RPTV9HVEVTVF9QT1JUX0hfCi0KLSNlbmRpZiAgLy8gR1RF
U1RfSU5DTFVERV9HVEVTVF9JTlRFUk5BTF9DVVNUT01fR1RFU1RfUE9SVF9IXwpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9p
bmNsdWRlL2d0ZXN0L2ludGVybmFsL2N1c3RvbS9ndGVzdC1wcmludGVycy5oIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0
L2ludGVybmFsL2N1c3RvbS9ndGVzdC1wcmludGVycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2MGMxZWEwNTBiNjFlOTNiZmNmMTQ2ZTYxMTFiZmE1MDMxNWM4MmVlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5h
bC9jdXN0b20vZ3Rlc3QtcHJpbnRlcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAK
LS8vIENvcHlyaWdodCAyMDE1LCBHb29nbGUgSW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLS8vCi0vLyBUaGlz
IGZpbGUgcHJvdmlkZXMgYW4gaW5qZWN0aW9uIHBvaW50IGZvciBjdXN0b20gcHJpbnRlcnMgaW4g
YSBsb2NhbAotLy8gaW5zdGFsbGF0aW9uIG9mIGdUZXN0LgotLy8gSXQgd2lsbCBiZSBpbmNsdWRl
ZCBmcm9tIGd0ZXN0LXByaW50ZXJzLmggYW5kIHRoZSBvdmVycmlkZXMgaW4gdGhpcyBmaWxlCi0v
LyB3aWxsIGJlIHZpc2libGUgdG8gZXZlcnlvbmUuCi0vLyBTZWUgZG9jdW1lbnRhdGlvbiBhdCBn
dGVzdC9ndGVzdC1wcmludGVycy5oIGZvciBkZXRhaWxzIG9uIGhvdyB0byBkZWZpbmUgYQotLy8g
Y3VzdG9tIHByaW50ZXIuCi0vLwotLy8gKiogQ3VzdG9tIGltcGxlbWVudGF0aW9uIHN0YXJ0cyBo
ZXJlICoqCi0KLSNpZm5kZWYgR1RFU1RfSU5DTFVERV9HVEVTVF9JTlRFUk5BTF9DVVNUT01fR1RF
U1RfUFJJTlRFUlNfSF8KLSNkZWZpbmUgR1RFU1RfSU5DTFVERV9HVEVTVF9JTlRFUk5BTF9DVVNU
T01fR1RFU1RfUFJJTlRFUlNfSF8KLQotI2VuZGlmICAvLyBHVEVTVF9JTkNMVURFX0dURVNUX0lO
VEVSTkFMX0NVU1RPTV9HVEVTVF9QUklOVEVSU19IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2lu
dGVybmFsL2N1c3RvbS9ndGVzdC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9s
bHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2N1c3RvbS9ndGVzdC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjc0MTJhODk4MTg0NGQ5MjE3MWFiZTU1
OGMxZDY4OTg5ZDAxNWZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRl
c3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9jdXN0b20vZ3Rlc3QuaAorKysgL2Rldi9udWxsCkBA
IC0xLDQxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1LCBHb29nbGUgSW5jLgotLy8gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLS8vCi0vLyBJbmplY3Rpb24gcG9pbnQgZm9yIGN1c3RvbSB1c2VyIGNvbmZpZ3VyYXRpb25z
LgotLy8gVGhlIGZvbGxvd2luZyBtYWNyb3MgY2FuIGJlIGRlZmluZWQ6Ci0vLwotLy8gR1RFU1Rf
T1NfU1RBQ0tfVFJBQ0VfR0VUVEVSXyAgLSBUaGUgbmFtZSBvZiBhbiBpbXBsZW1lbnRhdGlvbiBv
ZgotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPc1N0YWNrVHJhY2VHZXR0ZXJJ
bnRlcmZhY2UuCi0vLwotLy8gKiogQ3VzdG9tIGltcGxlbWVudGF0aW9uIHN0YXJ0cyBoZXJlICoq
Ci0KLSNpZm5kZWYgR1RFU1RfSU5DTFVERV9HVEVTVF9JTlRFUk5BTF9DVVNUT01fR1RFU1RfSF8K
LSNkZWZpbmUgR1RFU1RfSU5DTFVERV9HVEVTVF9JTlRFUk5BTF9DVVNUT01fR1RFU1RfSF8KLQot
I2VuZGlmICAvLyBHVEVTVF9JTkNMVURFX0dURVNUX0lOVEVSTkFMX0NVU1RPTV9HVEVTVF9IXwpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29v
Z2xldGVzdC9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2d0ZXN0LWRlYXRoLXRlc3QtaW50ZXJuYWwu
aCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3Qv
aW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1kZWF0aC10ZXN0LWludGVybmFsLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMmRjOTU1Zjg3ODI4OGVlYTVjMzhiMjk2MTM3Nzhh
Nzk2YzM4MjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNs
dWRlL2d0ZXN0L2ludGVybmFsL2d0ZXN0LWRlYXRoLXRlc3QtaW50ZXJuYWwuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwMiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAwNSwgR29vZ2xlIEluYy4KLS8v
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0vLwotLy8gQXV0aG9yczogd2FuQGdvb2dsZS5jb20gKFpoYW55b25nIFdhbiks
IGVlZmFjbUBnbWFpbC5jb20gKFNlYW4gTWNhZmVlKQotLy8KLS8vIFRoZSBHb29nbGUgQysrIFRl
c3RpbmcgRnJhbWV3b3JrIChHb29nbGUgVGVzdCkKLS8vCi0vLyBUaGlzIGhlYWRlciBmaWxlIGRl
ZmluZXMgaW50ZXJuYWwgdXRpbGl0aWVzIG5lZWRlZCBmb3IgaW1wbGVtZW50aW5nCi0vLyBkZWF0
aCB0ZXN0cy4gIFRoZXkgYXJlIHN1YmplY3QgdG8gY2hhbmdlIHdpdGhvdXQgbm90aWNlLgotCi0j
aWZuZGVmIEdURVNUX0lOQ0xVREVfR1RFU1RfSU5URVJOQUxfR1RFU1RfREVBVEhfVEVTVF9JTlRF
Uk5BTF9IXwotI2RlZmluZSBHVEVTVF9JTkNMVURFX0dURVNUX0lOVEVSTkFMX0dURVNUX0RFQVRI
X1RFU1RfSU5URVJOQUxfSF8KLQotI2luY2x1ZGUgImd0ZXN0L2ludGVybmFsL2d0ZXN0LWludGVy
bmFsLmgiCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi1uYW1lc3BhY2UgdGVzdGluZyB7Ci1uYW1l
c3BhY2UgaW50ZXJuYWwgewotCi1HVEVTVF9ERUNMQVJFX3N0cmluZ18oaW50ZXJuYWxfcnVuX2Rl
YXRoX3Rlc3QpOwotCi0vLyBOYW1lcyBvZiB0aGUgZmxhZ3MgKG5lZWRlZCBmb3IgcGFyc2luZyBH
b29nbGUgVGVzdCBmbGFncykuCi1jb25zdCBjaGFyIGtEZWF0aFRlc3RTdHlsZUZsYWdbXSA9ICJk
ZWF0aF90ZXN0X3N0eWxlIjsKLWNvbnN0IGNoYXIga0RlYXRoVGVzdFVzZUZvcmtbXSA9ICJkZWF0
aF90ZXN0X3VzZV9mb3JrIjsKLWNvbnN0IGNoYXIga0ludGVybmFsUnVuRGVhdGhUZXN0RmxhZ1td
ID0gImludGVybmFsX3J1bl9kZWF0aF90ZXN0IjsKLQotLy8gVGhpcyBtYWNybyBpcyB1c2VkIGZv
ciBpbXBsZW1lbnRpbmcgbWFjcm9zIHN1Y2ggYXMKLS8vIEVYUEVDVF9ERUFUSF9JRl9TVVBQT1JU
RUQgYW5kIEFTU0VSVF9ERUFUSF9JRl9TVVBQT1JURUQgb24gc3lzdGVtcyB3aGVyZQotLy8gZGVh
dGggdGVzdHMgYXJlIG5vdCBzdXBwb3J0ZWQuIFRob3NlIG1hY3JvcyBtdXN0IGNvbXBpbGUgb24g
c3VjaCBzeXN0ZW1zCi0vLyBpZmYgRVhQRUNUX0RFQVRIIGFuZCBBU1NFUlRfREVBVEggY29tcGls
ZSB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMgb24KLS8vIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGRl
YXRoIHRlc3RzLiBUaGlzIGFsbG93cyBvbmUgdG8gd3JpdGUgc3VjaCBhIG1hY3JvCi0vLyBvbiBh
IHN5c3RlbSB0aGF0IGRvZXMgbm90IHN1cHBvcnQgZGVhdGggdGVzdHMgYW5kIGJlIHN1cmUgdGhh
dCBpdCB3aWxsCi0vLyBjb21waWxlIG9uIGEgZGVhdGgtdGVzdCBzdXBwb3J0aW5nIHN5c3RlbS4K
LS8vCi0vLyBQYXJhbWV0ZXJzOgotLy8gICBzdGF0ZW1lbnQgLSAgQSBzdGF0ZW1lbnQgdGhhdCBh
IG1hY3JvIHN1Y2ggYXMgRVhQRUNUX0RFQVRIIHdvdWxkIHRlc3QKLS8vICAgICAgICAgICAgICAg
IGZvciBwcm9ncmFtIHRlcm1pbmF0aW9uLiBUaGlzIG1hY3JvIGhhcyB0byBtYWtlIHN1cmUgdGhp
cwotLy8gICAgICAgICAgICAgICAgc3RhdGVtZW50IGlzIGNvbXBpbGVkIGJ1dCBub3QgZXhlY3V0
ZWQsIHRvIGVuc3VyZSB0aGF0Ci0vLyAgICAgICAgICAgICAgICBFWFBFQ1RfREVBVEhfSUZfU1VQ
UE9SVEVEIGNvbXBpbGVzIHdpdGggYSBjZXJ0YWluCi0vLyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXIgaWZmIEVYUEVDVF9ERUFUSCBjb21waWxlcyB3aXRoIGl0LgotLy8gICByZWdleCAgICAgLSAg
QSByZWdleCB0aGF0IGEgbWFjcm8gc3VjaCBhcyBFWFBFQ1RfREVBVEggd291bGQgdXNlIHRvIHRl
c3QKLS8vICAgICAgICAgICAgICAgIHRoZSBvdXRwdXQgb2Ygc3RhdGVtZW50LiAgVGhpcyBwYXJh
bWV0ZXIgaGFzIHRvIGJlCi0vLyAgICAgICAgICAgICAgICBjb21waWxlZCBidXQgbm90IGV2YWx1
YXRlZCBieSB0aGlzIG1hY3JvLCB0byBlbnN1cmUgdGhhdAotLy8gICAgICAgICAgICAgICAgdGhp
cyBtYWNybyBvbmx5IGFjY2VwdHMgZXhwcmVzc2lvbnMgdGhhdCBhIG1hY3JvIHN1Y2ggYXMKLS8v
ICAgICAgICAgICAgICAgIEVYUEVDVF9ERUFUSCB3b3VsZCBhY2NlcHQuCi0vLyAgIHRlcm1pbmF0
b3IgLSBNdXN0IGJlIGFuIGVtcHR5IHN0YXRlbWVudCBmb3IgRVhQRUNUX0RFQVRIX0lGX1NVUFBP
UlRFRAotLy8gICAgICAgICAgICAgICAgYW5kIGEgcmV0dXJuIHN0YXRlbWVudCBmb3IgQVNTRVJU
X0RFQVRIX0lGX1NVUFBPUlRFRC4KLS8vICAgICAgICAgICAgICAgIFRoaXMgZW5zdXJlcyB0aGF0
IEFTU0VSVF9ERUFUSF9JRl9TVVBQT1JURUQgd2lsbCBub3QKLS8vICAgICAgICAgICAgICAgIGNv
bXBpbGUgaW5zaWRlIGZ1bmN0aW9ucyB3aGVyZSBBU1NFUlRfREVBVEggZG9lc24ndAotLy8gICAg
ICAgICAgICAgICAgY29tcGlsZS4KLS8vCi0vLyAgVGhlIGJyYW5jaCB0aGF0IGhhcyBhbiBhbHdh
eXMgZmFsc2UgY29uZGl0aW9uIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQKLS8vICBzdGF0ZW1lbnQg
YW5kIHJlZ2V4IGFyZSBjb21waWxlZCAoYW5kIHRodXMgc3ludGFjdGljYWxseSBjb3JyZWN0KSBi
dXQKLS8vICBuZXZlciBleGVjdXRlZC4gVGhlIHVucmVhY2hhYmxlIGNvZGUgbWFjcm8gcHJvdGVj
dHMgdGhlIHRlcm1pbmF0b3IKLS8vICBzdGF0ZW1lbnQgZnJvbSBnZW5lcmF0aW5nIGFuICd1bnJl
YWNoYWJsZSBjb2RlJyB3YXJuaW5nIGluIGNhc2UKLS8vICBzdGF0ZW1lbnQgdW5jb25kaXRpb25h
bGx5IHJldHVybnMgb3IgdGhyb3dzLiBUaGUgTWVzc2FnZSBjb25zdHJ1Y3RvciBhdAotLy8gIHRo
ZSBlbmQgYWxsb3dzIHRoZSBzeW50YXggb2Ygc3RyZWFtaW5nIGFkZGl0aW9uYWwgbWVzc2FnZXMg
aW50byB0aGUKLS8vICBtYWNybywgZm9yIGNvbXBpbGF0aW9uYWwgY29tcGF0aWJpbGl0eSB3aXRo
IEVYUEVDVF9ERUFUSC9BU1NFUlRfREVBVEguCi0jIGRlZmluZSBHVEVTVF9VTlNVUFBPUlRFRF9E
RUFUSF9URVNUXyhzdGF0ZW1lbnQsIHJlZ2V4LCB0ZXJtaW5hdG9yKSBcCi0gICAgR1RFU1RfQU1C
SUdVT1VTX0VMU0VfQkxPQ0tFUl8gXAotICAgIGlmICg6OnRlc3Rpbmc6OmludGVybmFsOjpBbHdh
eXNUcnVlKCkpIHsgXAotICAgICAgR1RFU1RfTE9HXyhXQVJOSU5HKSBcCi0gICAgICAgICAgPDwg
IkRlYXRoIHRlc3RzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uXG4iIFwKLSAg
ICAgICAgICA8PCAiU3RhdGVtZW50ICciICNzdGF0ZW1lbnQgIicgY2Fubm90IGJlIHZlcmlmaWVk
LiI7IFwKLSAgICB9IGVsc2UgaWYgKDo6dGVzdGluZzo6aW50ZXJuYWw6OkFsd2F5c0ZhbHNlKCkp
IHsgXAotICAgICAgOjp0ZXN0aW5nOjppbnRlcm5hbDo6UkU6OlBhcnRpYWxNYXRjaCgiLioiLCAo
cmVnZXgpKTsgXAotICAgICAgR1RFU1RfU1VQUFJFU1NfVU5SRUFDSEFCTEVfQ09ERV9XQVJOSU5H
X0JFTE9XXyhzdGF0ZW1lbnQpOyBcCi0gICAgICB0ZXJtaW5hdG9yOyBcCi0gICAgfSBlbHNlIFwK
LSAgICAgIDo6dGVzdGluZzo6TWVzc2FnZSgpCi0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAot
fSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKLQotI2VuZGlmICAvLyBHVEVTVF9JTkNMVURFX0dURVNU
X0lOVEVSTkFMX0dURVNUX0RFQVRIX1RFU1RfSU5URVJOQUxfSF8KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVkZS9n
dGVzdC9pbnRlcm5hbC9ndGVzdC1maWxlcGF0aC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2d0ZXN0
LWZpbGVwYXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMTNiNGIwZGU2MDgz
YmJmZTY5NjNmOGMwZWQxNmUyN2RlNzcwMTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rl
c3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2d0ZXN0LWZpbGVwYXRoLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMDgsIEdvb2dsZSBJ
bmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotLy8KLS8vIEF1dGhvcjoga2VpdGgucmF5QGdtYWlsLmNvbSAoS2Vp
dGggUmF5KQotLy8KLS8vIEdvb2dsZSBUZXN0IGZpbGVwYXRoIHV0aWxpdGllcwotLy8KLS8vIFRo
aXMgaGVhZGVyIGZpbGUgZGVjbGFyZXMgY2xhc3NlcyBhbmQgZnVuY3Rpb25zIHVzZWQgaW50ZXJu
YWxseSBieQotLy8gR29vZ2xlIFRlc3QuICBUaGV5IGFyZSBzdWJqZWN0IHRvIGNoYW5nZSB3aXRo
b3V0IG5vdGljZS4KLS8vCi0vLyBUaGlzIGZpbGUgaXMgI2luY2x1ZGVkIGluIDxndGVzdC9pbnRl
cm5hbC9ndGVzdC1pbnRlcm5hbC5oPi4KLS8vIERvIG5vdCBpbmNsdWRlIHRoaXMgaGVhZGVyIGZp
bGUgc2VwYXJhdGVseSEKLQotI2lmbmRlZiBHVEVTVF9JTkNMVURFX0dURVNUX0lOVEVSTkFMX0dU
RVNUX0ZJTEVQQVRIX0hfCi0jZGVmaW5lIEdURVNUX0lOQ0xVREVfR1RFU1RfSU5URVJOQUxfR1RF
U1RfRklMRVBBVEhfSF8KLQotI2luY2x1ZGUgImd0ZXN0L2ludGVybmFsL2d0ZXN0LXN0cmluZy5o
IgotCi1uYW1lc3BhY2UgdGVzdGluZyB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi0vLyBGaWxl
UGF0aCAtIGEgY2xhc3MgZm9yIGZpbGUgYW5kIGRpcmVjdG9yeSBwYXRobmFtZSBtYW5pcHVsYXRp
b24gd2hpY2gKLS8vIGhhbmRsZXMgcGxhdGZvcm0tc3BlY2lmaWMgY29udmVudGlvbnMgKGxpa2Ug
dGhlIHBhdGhuYW1lIHNlcGFyYXRvcikuCi0vLyBVc2VkIGZvciBoZWxwZXIgZnVuY3Rpb25zIGZv
ciBuYW1pbmcgZmlsZXMgaW4gYSBkaXJlY3RvcnkgZm9yIHhtbCBvdXRwdXQuCi0vLyBFeGNlcHQg
Zm9yIFNldCBtZXRob2RzLCBhbGwgbWV0aG9kcyBhcmUgY29uc3Qgb3Igc3RhdGljLCB3aGljaCBw
cm92aWRlcyBhbgotLy8gImltbXV0YWJsZSB2YWx1ZSBvYmplY3QiIC0tIHVzZWZ1bCBmb3IgcGVh
Y2Ugb2YgbWluZC4KLS8vIEEgRmlsZVBhdGggd2l0aCBhIHZhbHVlIGVuZGluZyBpbiBhIHBhdGgg
c2VwYXJhdG9yICgibGlrZS90aGlzLyIpIHJlcHJlc2VudHMKLS8vIGEgZGlyZWN0b3J5LCBvdGhl
cndpc2UgaXQgaXMgYXNzdW1lZCB0byByZXByZXNlbnQgYSBmaWxlLiBJbiBlaXRoZXIgY2FzZSwK
LS8vIGl0IG1heSBvciBtYXkgbm90IHJlcHJlc2VudCBhbiBhY3R1YWwgZmlsZSBvciBkaXJlY3Rv
cnkgaW4gdGhlIGZpbGUgc3lzdGVtLgotLy8gTmFtZXMgYXJlIE5PVCBjaGVja2VkIGZvciBzeW50
YXggY29ycmVjdG5lc3MgLS0gbm8gY2hlY2tpbmcgZm9yIGlsbGVnYWwKLS8vIGNoYXJhY3RlcnMs
IG1hbGZvcm1lZCBwYXRocywgZXRjLgotCi1jbGFzcyBHVEVTVF9BUElfIEZpbGVQYXRoIHsKLSBw
dWJsaWM6Ci0gIEZpbGVQYXRoKCkgOiBwYXRobmFtZV8oIiIpIHsgfQotICBGaWxlUGF0aChjb25z
dCBGaWxlUGF0aCYgcmhzKSA6IHBhdGhuYW1lXyhyaHMucGF0aG5hbWVfKSB7IH0KLQotICBleHBs
aWNpdCBGaWxlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aG5hbWUpIDogcGF0aG5hbWVfKHBh
dGhuYW1lKSB7Ci0gICAgTm9ybWFsaXplKCk7Ci0gIH0KLQotICBGaWxlUGF0aCYgb3BlcmF0b3I9
KGNvbnN0IEZpbGVQYXRoJiByaHMpIHsKLSAgICBTZXQocmhzKTsKLSAgICByZXR1cm4gKnRoaXM7
Ci0gIH0KLQotICB2b2lkIFNldChjb25zdCBGaWxlUGF0aCYgcmhzKSB7Ci0gICAgcGF0aG5hbWVf
ID0gcmhzLnBhdGhuYW1lXzsKLSAgfQotCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmcoKSBj
b25zdCB7IHJldHVybiBwYXRobmFtZV87IH0KLSAgY29uc3QgY2hhciogY19zdHIoKSBjb25zdCB7
IHJldHVybiBwYXRobmFtZV8uY19zdHIoKTsgfQotCi0gIC8vIFJldHVybnMgdGhlIGN1cnJlbnQg
d29ya2luZyBkaXJlY3RvcnksIG9yICIiIGlmIHVuc3VjY2Vzc2Z1bC4KLSAgc3RhdGljIEZpbGVQ
YXRoIEdldEN1cnJlbnREaXIoKTsKLQotICAvLyBHaXZlbiBkaXJlY3RvcnkgPSAiZGlyIiwgYmFz
ZV9uYW1lID0gInRlc3QiLCBudW1iZXIgPSAwLAotICAvLyBleHRlbnNpb24gPSAieG1sIiwgcmV0
dXJucyAiZGlyL3Rlc3QueG1sIi4gSWYgbnVtYmVyIGlzIGdyZWF0ZXIKLSAgLy8gdGhhbiB6ZXJv
IChlLmcuLCAxMiksIHJldHVybnMgImRpci90ZXN0XzEyLnhtbCIuCi0gIC8vIE9uIFdpbmRvd3Mg
cGxhdGZvcm0sIHVzZXMgXCBhcyB0aGUgc2VwYXJhdG9yIHJhdGhlciB0aGFuIC8uCi0gIHN0YXRp
YyBGaWxlUGF0aCBNYWtlRmlsZU5hbWUoY29uc3QgRmlsZVBhdGgmIGRpcmVjdG9yeSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlUGF0aCYgYmFzZV9uYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1iZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0ZW5zaW9uKTsKLQotICAvLyBHaXZlbiBkaXJl
Y3RvcnkgPSAiZGlyIiwgcmVsYXRpdmVfcGF0aCA9ICJ0ZXN0LnhtbCIsCi0gIC8vIHJldHVybnMg
ImRpci90ZXN0LnhtbCIuCi0gIC8vIE9uIFdpbmRvd3MsIHVzZXMgXCBhcyB0aGUgc2VwYXJhdG9y
IHJhdGhlciB0aGFuIC8uCi0gIHN0YXRpYyBGaWxlUGF0aCBDb25jYXRQYXRocyhjb25zdCBGaWxl
UGF0aCYgZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmls
ZVBhdGgmIHJlbGF0aXZlX3BhdGgpOwotCi0gIC8vIFJldHVybnMgYSBwYXRobmFtZSBmb3IgYSBm
aWxlIHRoYXQgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0LiBUaGUgcGF0aG5hbWUKLSAgLy8gd2ls
bCBiZSBkaXJlY3RvcnkvYmFzZV9uYW1lLmV4dGVuc2lvbiBvcgotICAvLyBkaXJlY3RvcnkvYmFz
ZV9uYW1lXzxudW1iZXI+LmV4dGVuc2lvbiBpZiBkaXJlY3RvcnkvYmFzZV9uYW1lLmV4dGVuc2lv
bgotICAvLyBhbHJlYWR5IGV4aXN0cy4gVGhlIG51bWJlciB3aWxsIGJlIGluY3JlbWVudGVkIHVu
dGlsIGEgcGF0aG5hbWUgaXMgZm91bmQKLSAgLy8gdGhhdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0
LgotICAvLyBFeGFtcGxlczogJ2Rpci9mb29fdGVzdC54bWwnIG9yICdkaXIvZm9vX3Rlc3RfMS54
bWwnLgotICAvLyBUaGVyZSBjb3VsZCBiZSBhIHJhY2UgY29uZGl0aW9uIGlmIHR3byBvciBtb3Jl
IHByb2Nlc3NlcyBhcmUgY2FsbGluZyB0aGlzCi0gIC8vIGZ1bmN0aW9uIGF0IHRoZSBzYW1lIHRp
bWUgLS0gdGhleSBjb3VsZCBib3RoIHBpY2sgdGhlIHNhbWUgZmlsZW5hbWUuCi0gIHN0YXRpYyBG
aWxlUGF0aCBHZW5lcmF0ZVVuaXF1ZUZpbGVOYW1lKGNvbnN0IEZpbGVQYXRoJiBkaXJlY3Rvcnks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVQYXRo
JiBiYXNlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGV4dGVuc2lvbik7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgcGF0aCBp
cyAiIi4KLSAgYm9vbCBJc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gcGF0aG5hbWVfLmVtcHR5KCk7
IH0KLQotICAvLyBJZiBpbnB1dCBuYW1lIGhhcyBhIHRyYWlsaW5nIHNlcGFyYXRvciBjaGFyYWN0
ZXIsIHJlbW92ZXMgaXQgYW5kIHJldHVybnMKLSAgLy8gdGhlIG5hbWUsIG90aGVyd2lzZSByZXR1
cm4gdGhlIG5hbWUgc3RyaW5nIHVubW9kaWZpZWQuCi0gIC8vIE9uIFdpbmRvd3MgcGxhdGZvcm0s
IHVzZXMgXCBhcyB0aGUgc2VwYXJhdG9yLCBvdGhlciBwbGF0Zm9ybXMgdXNlIC8uCi0gIEZpbGVQ
YXRoIFJlbW92ZVRyYWlsaW5nUGF0aFNlcGFyYXRvcigpIGNvbnN0OwotCi0gIC8vIFJldHVybnMg
YSBjb3B5IG9mIHRoZSBGaWxlUGF0aCB3aXRoIHRoZSBkaXJlY3RvcnkgcGFydCByZW1vdmVkLgot
ICAvLyBFeGFtcGxlOiBGaWxlUGF0aCgicGF0aC90by9maWxlIikuUmVtb3ZlRGlyZWN0b3J5TmFt
ZSgpIHJldHVybnMKLSAgLy8gRmlsZVBhdGgoImZpbGUiKS4gSWYgdGhlcmUgaXMgbm8gZGlyZWN0
b3J5IHBhcnQgKCJqdXN0X2FfZmlsZSIpLCBpdCByZXR1cm5zCi0gIC8vIHRoZSBGaWxlUGF0aCB1
bm1vZGlmaWVkLiBJZiB0aGVyZSBpcyBubyBmaWxlIHBhcnQgKCJqdXN0X2FfZGlyLyIpIGl0Ci0g
IC8vIHJldHVybnMgYW4gZW1wdHkgRmlsZVBhdGggKCIiKS4KLSAgLy8gT24gV2luZG93cyBwbGF0
Zm9ybSwgJ1wnIGlzIHRoZSBwYXRoIHNlcGFyYXRvciwgb3RoZXJ3aXNlIGl0IGlzICcvJy4KLSAg
RmlsZVBhdGggUmVtb3ZlRGlyZWN0b3J5TmFtZSgpIGNvbnN0OwotCi0gIC8vIFJlbW92ZUZpbGVO
YW1lIHJldHVybnMgdGhlIGRpcmVjdG9yeSBwYXRoIHdpdGggdGhlIGZpbGVuYW1lIHJlbW92ZWQu
Ci0gIC8vIEV4YW1wbGU6IEZpbGVQYXRoKCJwYXRoL3RvL2ZpbGUiKS5SZW1vdmVGaWxlTmFtZSgp
IHJldHVybnMgInBhdGgvdG8vIi4KLSAgLy8gSWYgdGhlIEZpbGVQYXRoIGlzICJhX2ZpbGUiIG9y
ICIvYV9maWxlIiwgUmVtb3ZlRmlsZU5hbWUgcmV0dXJucwotICAvLyBGaWxlUGF0aCgiLi8iKSBv
ciwgb24gV2luZG93cywgRmlsZVBhdGgoIi5cXCIpLiBJZiB0aGUgZmlsZXBhdGggZG9lcwotICAv
LyBub3QgaGF2ZSBhIGZpbGUsIGxpa2UgImp1c3QvYS9kaXIvIiwgaXQgcmV0dXJucyB0aGUgRmls
ZVBhdGggdW5tb2RpZmllZC4KLSAgLy8gT24gV2luZG93cyBwbGF0Zm9ybSwgJ1wnIGlzIHRoZSBw
YXRoIHNlcGFyYXRvciwgb3RoZXJ3aXNlIGl0IGlzICcvJy4KLSAgRmlsZVBhdGggUmVtb3ZlRmls
ZU5hbWUoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgRmlsZVBhdGggd2l0
aCB0aGUgY2FzZS1pbnNlbnNpdGl2ZSBleHRlbnNpb24gcmVtb3ZlZC4KLSAgLy8gRXhhbXBsZTog
RmlsZVBhdGgoImRpci9maWxlLmV4ZSIpLlJlbW92ZUV4dGVuc2lvbigiRVhFIikgcmV0dXJucwot
ICAvLyBGaWxlUGF0aCgiZGlyL2ZpbGUiKS4gSWYgYSBjYXNlLWluc2Vuc2l0aXZlIGV4dGVuc2lv
biBpcyBub3QKLSAgLy8gZm91bmQsIHJldHVybnMgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBGaWxl
UGF0aC4KLSAgRmlsZVBhdGggUmVtb3ZlRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIGV4dGVuc2lvbikg
Y29uc3Q7Ci0KLSAgLy8gQ3JlYXRlcyBkaXJlY3RvcmllcyBzbyB0aGF0IHBhdGggZXhpc3RzLiBS
ZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCBvciBpZgotICAvLyB0aGUgZGlyZWN0b3JpZXMgYWxy
ZWFkeSBleGlzdDsgcmV0dXJucyBmYWxzZSBpZiB1bmFibGUgdG8gY3JlYXRlCi0gIC8vIGRpcmVj
dG9yaWVzIGZvciBhbnkgcmVhc29uLiBXaWxsIGFsc28gcmV0dXJuIGZhbHNlIGlmIHRoZSBGaWxl
UGF0aCBkb2VzCi0gIC8vIG5vdCByZXByZXNlbnQgYSBkaXJlY3RvcnkgKHRoYXQgaXMsIGl0IGRv
ZXNuJ3QgZW5kIHdpdGggYSBwYXRoIHNlcGFyYXRvcikuCi0gIGJvb2wgQ3JlYXRlRGlyZWN0b3Jp
ZXNSZWN1cnNpdmVseSgpIGNvbnN0OwotCi0gIC8vIENyZWF0ZSB0aGUgZGlyZWN0b3J5IHNvIHRo
YXQgcGF0aCBleGlzdHMuIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsIG9yCi0gIC8vIGlmIHRo
ZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHM7IHJldHVybnMgZmFsc2UgaWYgdW5hYmxlIHRvIGNy
ZWF0ZSB0aGUKLSAgLy8gZGlyZWN0b3J5IGZvciBhbnkgcmVhc29uLCBpbmNsdWRpbmcgaWYgdGhl
IHBhcmVudCBkaXJlY3RvcnkgZG9lcyBub3QKLSAgLy8gZXhpc3QuIE5vdCBuYW1lZCAiQ3JlYXRl
RGlyZWN0b3J5IiBiZWNhdXNlIHRoYXQncyBhIG1hY3JvIG9uIFdpbmRvd3MuCi0gIGJvb2wgQ3Jl
YXRlRm9sZGVyKCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIEZpbGVQYXRoIGRlc2Ny
aWJlcyBzb21ldGhpbmcgaW4gdGhlIGZpbGUtc3lzdGVtLAotICAvLyBlaXRoZXIgYSBmaWxlLCBk
aXJlY3RvcnksIG9yIHdoYXRldmVyLCBhbmQgdGhhdCBzb21ldGhpbmcgZXhpc3RzLgotICBib29s
IEZpbGVPckRpcmVjdG9yeUV4aXN0cygpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBw
YXRobmFtZSBkZXNjcmliZXMgYSBkaXJlY3RvcnkgaW4gdGhlIGZpbGUtc3lzdGVtCi0gIC8vIHRo
YXQgZXhpc3RzLgotICBib29sIERpcmVjdG9yeUV4aXN0cygpIGNvbnN0OwotCi0gIC8vIFJldHVy
bnMgdHJ1ZSBpZiBGaWxlUGF0aCBlbmRzIHdpdGggYSBwYXRoIHNlcGFyYXRvciwgd2hpY2ggaW5k
aWNhdGVzIHRoYXQKLSAgLy8gaXQgaXMgaW50ZW5kZWQgdG8gcmVwcmVzZW50IGEgZGlyZWN0b3J5
LiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS4KLSAgLy8gVGhpcyBkb2VzIE5PVCBjaGVjayB0aGF0
IGEgZGlyZWN0b3J5IChvciBmaWxlKSBhY3R1YWxseSBleGlzdHMuCi0gIGJvb2wgSXNEaXJlY3Rv
cnkoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgcGF0aG5hbWUgZGVzY3JpYmVzIGEg
cm9vdCBkaXJlY3RvcnkuIChXaW5kb3dzIGhhcyBvbmUKLSAgLy8gcm9vdCBkaXJlY3RvcnkgcGVy
IGRpc2sgZHJpdmUuKQotICBib29sIElzUm9vdERpcmVjdG9yeSgpIGNvbnN0OwotCi0gIC8vIFJl
dHVybnMgdHJ1ZSBpZiBwYXRobmFtZSBkZXNjcmliZXMgYW4gYWJzb2x1dGUgcGF0aC4KLSAgYm9v
bCBJc0Fic29sdXRlUGF0aCgpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgLy8gUmVwbGFjZXMgbXVs
dGlwbGUgY29uc2VjdXRpdmUgc2VwYXJhdG9ycyB3aXRoIGEgc2luZ2xlIHNlcGFyYXRvci4KLSAg
Ly8gRm9yIGV4YW1wbGUsICJiYXIvLy9mb28iIGJlY29tZXMgImJhci9mb28iLiBEb2VzIG5vdCBl
bGltaW5hdGUgb3RoZXIKLSAgLy8gcmVkdW5kYW5jaWVzIHRoYXQgbWlnaHQgYmUgaW4gYSBwYXRo
bmFtZSBpbnZvbHZpbmcgIi4iIG9yICIuLiIuCi0gIC8vCi0gIC8vIEEgcGF0aG5hbWUgd2l0aCBt
dWx0aXBsZSBjb25zZWN1dGl2ZSBzZXBhcmF0b3JzIG1heSBvY2N1ciBlaXRoZXIgdGhyb3VnaAot
ICAvLyB1c2VyIGVycm9yIG9yIGFzIGEgcmVzdWx0IG9mIHNvbWUgc2NyaXB0cyBvciBBUElzIHRo
YXQgZ2VuZXJhdGUgYSBwYXRobmFtZQotICAvLyB3aXRoIGEgdHJhaWxpbmcgc2VwYXJhdG9yLiBP
biBvdGhlciBwbGF0Zm9ybXMgdGhlIHNhbWUgQVBJIG9yIHNjcmlwdAotICAvLyBtYXkgTk9UIGdl
bmVyYXRlIGEgcGF0aG5hbWUgd2l0aCBhIHRyYWlsaW5nICIvIi4gVGhlbiBlbHNld2hlcmUgdGhh
dAotICAvLyBwYXRobmFtZSBtYXkgaGF2ZSBhbm90aGVyICIvIiBhbmQgcGF0aG5hbWUgY29tcG9u
ZW50cyBhZGRlZCB0byBpdCwKLSAgLy8gd2l0aG91dCBjaGVja2luZyBmb3IgdGhlIHNlcGFyYXRv
ciBhbHJlYWR5IGJlaW5nIHRoZXJlLgotICAvLyBUaGUgc2NyaXB0IGxhbmd1YWdlIGFuZCBvcGVy
YXRpbmcgc3lzdGVtIG1heSBhbGxvdyBwYXRocyBsaWtlICJmb28vL2JhciIKLSAgLy8gYnV0IHNv
bWUgb2YgdGhlIGZ1bmN0aW9ucyBpbiBGaWxlUGF0aCB3aWxsIG5vdCBoYW5kbGUgdGhhdCBjb3Jy
ZWN0bHkuIEluCi0gIC8vIHBhcnRpY3VsYXIsIFJlbW92ZVRyYWlsaW5nUGF0aFNlcGFyYXRvcigp
IG9ubHkgcmVtb3ZlcyBvbmUgc2VwYXJhdG9yLCBhbmQKLSAgLy8gaXQgaXMgY2FsbGVkIGluIENy
ZWF0ZURpcmVjdG9yaWVzUmVjdXJzaXZlbHkoKSBhc3N1bWluZyB0aGF0IGl0IHdpbGwgY2hhbmdl
Ci0gIC8vIGEgcGF0aG5hbWUgZnJvbSBkaXJlY3Rvcnkgc3ludGF4ICh0cmFpbGluZyBzZXBhcmF0
b3IpIHRvIGZpbGVuYW1lIHN5bnRheC4KLSAgLy8KLSAgLy8gT24gV2luZG93cyB0aGlzIG1ldGhv
ZCBhbHNvIHJlcGxhY2VzIHRoZSBhbHRlcm5hdGUgcGF0aCBzZXBhcmF0b3IgJy8nIHdpdGgKLSAg
Ly8gdGhlIHByaW1hcnkgcGF0aCBzZXBhcmF0b3IgJ1xcJywgc28gdGhhdCBmb3IgZXhhbXBsZSAi
YmFyXFwvXFxmb28iIGJlY29tZXMKLSAgLy8gImJhclxcZm9vIi4KLQotICB2b2lkIE5vcm1hbGl6
ZSgpOwotCi0gIC8vIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBsYXN0IG9jY3VyZW5jZSBvZiBh
IHZhbGlkIHBhdGggc2VwYXJhdG9yIGluCi0gIC8vIHRoZSBGaWxlUGF0aC4gT24gV2luZG93cywg
Zm9yIGV4YW1wbGUsIGJvdGggJy8nIGFuZCAnXCcgYXJlIHZhbGlkIHBhdGgKLSAgLy8gc2VwYXJh
dG9ycy4gUmV0dXJucyBOVUxMIGlmIG5vIHBhdGggc2VwYXJhdG9yIHdhcyBmb3VuZC4KLSAgY29u
c3QgY2hhciogRmluZExhc3RQYXRoU2VwYXJhdG9yKCkgY29uc3Q7Ci0KLSAgc3RkOjpzdHJpbmcg
cGF0aG5hbWVfOwotfTsgIC8vIGNsYXNzIEZpbGVQYXRoCi0KLX0gIC8vIG5hbWVzcGFjZSBpbnRl
cm5hbAotfSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKLQotI2VuZGlmICAvLyBHVEVTVF9JTkNMVURF
X0dURVNUX0lOVEVSTkFMX0dURVNUX0ZJTEVQQVRIX0hfCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3Qv
aW50ZXJuYWwvZ3Rlc3QtaW50ZXJuYWwuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1pbnRl
cm5hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmQxY2Y2MTVkZTA3ZDliNWFi
MGU2MGM3MTAwODI2MWVmZTU0MjEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dv
b2dsZXRlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1pbnRlcm5hbC5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTIzOCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAwNSwgR29vZ2xlIEluYy4K
LS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0vLwotLy8gQXV0aG9yczogd2FuQGdvb2dsZS5jb20gKFpoYW55b25nIFdh
biksIGVlZmFjbUBnbWFpbC5jb20gKFNlYW4gTWNhZmVlKQotLy8KLS8vIFRoZSBHb29nbGUgQysr
IFRlc3RpbmcgRnJhbWV3b3JrIChHb29nbGUgVGVzdCkKLS8vCi0vLyBUaGlzIGhlYWRlciBmaWxl
IGRlY2xhcmVzIGZ1bmN0aW9ucyBhbmQgbWFjcm9zIHVzZWQgaW50ZXJuYWxseSBieQotLy8gR29v
Z2xlIFRlc3QuICBUaGV5IGFyZSBzdWJqZWN0IHRvIGNoYW5nZSB3aXRob3V0IG5vdGljZS4KLQot
I2lmbmRlZiBHVEVTVF9JTkNMVURFX0dURVNUX0lOVEVSTkFMX0dURVNUX0lOVEVSTkFMX0hfCi0j
ZGVmaW5lIEdURVNUX0lOQ0xVREVfR1RFU1RfSU5URVJOQUxfR1RFU1RfSU5URVJOQUxfSF8KLQot
I2luY2x1ZGUgImd0ZXN0L2ludGVybmFsL2d0ZXN0LXBvcnQuaCIKLQotI2lmIEdURVNUX09TX0xJ
TlVYCi0jIGluY2x1ZGUgPHN0ZGxpYi5oPgotIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSMgaW5j
bHVkZSA8c3lzL3dhaXQuaD4KLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYgIC8vIEdURVNU
X09TX0xJTlVYCi0KLSNpZiBHVEVTVF9IQVNfRVhDRVBUSU9OUwotIyBpbmNsdWRlIDxzdGRleGNl
cHQ+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZmxvYXQuaD4KLSNp
bmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxpb21hbmlwPgotI2luY2x1ZGUgPGxpbWl0cz4K
LSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNs
dWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJndGVzdC9ndGVzdC1tZXNzYWdlLmgiCi0jaW5jbHVk
ZSAiZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3Qtc3RyaW5nLmgiCi0jaW5jbHVkZSAiZ3Rlc3QvaW50ZXJu
YWwvZ3Rlc3QtZmlsZXBhdGguaCIKLSNpbmNsdWRlICJndGVzdC9pbnRlcm5hbC9ndGVzdC10eXBl
LXV0aWwuaCIKLQotLy8gRHVlIHRvIEMrKyBwcmVwcm9jZXNzb3Igd2VpcmRuZXNzLCB3ZSBuZWVk
IGRvdWJsZSBpbmRpcmVjdGlvbiB0bwotLy8gY29uY2F0ZW5hdGUgdHdvIHRva2VucyB3aGVuIG9u
ZSBvZiB0aGVtIGlzIF9fTElORV9fLiAgV3JpdGluZwotLy8KLS8vICAgZm9vICMjIF9fTElORV9f
Ci0vLwotLy8gd2lsbCByZXN1bHQgaW4gdGhlIHRva2VuIGZvb19fTElORV9fLCBpbnN0ZWFkIG9m
IGZvbyBmb2xsb3dlZCBieQotLy8gdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuICBGb3IgbW9yZSBk
ZXRhaWxzLCBzZWUKLS8vIGh0dHA6Ly93d3cucGFyYXNoaWZ0LmNvbS9jKystZmFxLWxpdGUvbWlz
Yy10ZWNobmljYWwtaXNzdWVzLmh0bWwjZmFxLTM5LjYKLSNkZWZpbmUgR1RFU1RfQ09OQ0FUX1RP
S0VOXyhmb28sIGJhcikgR1RFU1RfQ09OQ0FUX1RPS0VOX0lNUExfKGZvbywgYmFyKQotI2RlZmlu
ZSBHVEVTVF9DT05DQVRfVE9LRU5fSU1QTF8oZm9vLCBiYXIpIGZvbyAjIyBiYXIKLQotY2xhc3Mg
UHJvdG9jb2xNZXNzYWdlOwotbmFtZXNwYWNlIHByb3RvMiB7IGNsYXNzIE1lc3NhZ2U7IH0KLQot
bmFtZXNwYWNlIHRlc3RpbmcgewotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotY2xhc3Mg
QXNzZXJ0aW9uUmVzdWx0OyAgICAgICAgICAgICAgICAgLy8gUmVzdWx0IG9mIGFuIGFzc2VydGlv
bi4KLWNsYXNzIE1lc3NhZ2U7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcHJlc2VudHMg
YSBmYWlsdXJlIG1lc3NhZ2UuCi1jbGFzcyBUZXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBSZXByZXNlbnRzIGEgdGVzdC4KLWNsYXNzIFRlc3RJbmZvOyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IGEgdGVzdC4KLWNsYXNzIFRlc3RQYXJ0UmVzdWx0
OyAgICAgICAgICAgICAgICAgIC8vIFJlc3VsdCBvZiBhIHRlc3QgcGFydC4KLWNsYXNzIFVuaXRU
ZXN0OyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgY29sbGVjdGlvbiBvZiB0ZXN0IGNhc2Vz
LgotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLTo6c3RkOjpzdHJpbmcgUHJpbnRUb1N0cmluZyhj
b25zdCBUJiB2YWx1ZSk7Ci0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLXN0cnVjdCBUcmFjZUlu
Zm87ICAgICAgICAgICAgICAgICAgICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IGEgdHJhY2UgcG9p
bnQuCi1jbGFzcyBTY29wZWRUcmFjZTsgICAgICAgICAgICAgICAgICAgICAvLyBJbXBsZW1lbnRz
IHNjb3BlZCB0cmFjZS4KLWNsYXNzIFRlc3RJbmZvSW1wbDsgICAgICAgICAgICAgICAgICAgIC8v
IE9wYXF1ZSBpbXBsZW1lbnRhdGlvbiBvZiBUZXN0SW5mbwotY2xhc3MgVW5pdFRlc3RJbXBsOyAg
ICAgICAgICAgICAgICAgICAgLy8gT3BhcXVlIGltcGxlbWVudGF0aW9uIG9mIFVuaXRUZXN0Ci0K
LS8vIFRoZSB0ZXh0IHVzZWQgaW4gZmFpbHVyZSBtZXNzYWdlcyB0byBpbmRpY2F0ZSB0aGUgc3Rh
cnQgb2YgdGhlCi0vLyBzdGFjayB0cmFjZS4KLUdURVNUX0FQSV8gZXh0ZXJuIGNvbnN0IGNoYXIg
a1N0YWNrVHJhY2VNYXJrZXJbXTsKLQotLy8gVHdvIG92ZXJsb2FkZWQgaGVscGVycyBmb3IgY2hl
Y2tpbmcgYXQgY29tcGlsZSB0aW1lIHdoZXRoZXIgYW4KLS8vIGV4cHJlc3Npb24gaXMgYSBudWxs
IHBvaW50ZXIgbGl0ZXJhbCAoaS5lLiBOVUxMIG9yIGFueSAwLXZhbHVlZAotLy8gY29tcGlsZS10
aW1lIGludGVncmFsIGNvbnN0YW50KS4gIFRoZWlyIHJldHVybiB2YWx1ZXMgaGF2ZQotLy8gZGlm
ZmVyZW50IHNpemVzLCBzbyB3ZSBjYW4gdXNlIHNpemVvZigpIHRvIHRlc3Qgd2hpY2ggdmVyc2lv
biBpcwotLy8gcGlja2VkIGJ5IHRoZSBjb21waWxlci4gIFRoZXNlIGhlbHBlcnMgaGF2ZSBubyBp
bXBsZW1lbnRhdGlvbnMsIGFzCi0vLyB3ZSBvbmx5IG5lZWQgdGhlaXIgc2lnbmF0dXJlcy4KLS8v
Ci0vLyBHaXZlbiBJc051bGxMaXRlcmFsSGVscGVyKHgpLCB0aGUgY29tcGlsZXIgd2lsbCBwaWNr
IHRoZSBmaXJzdAotLy8gdmVyc2lvbiBpZiB4IGNhbiBiZSBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0
byBTZWNyZXQqLCBhbmQgcGljayB0aGUKLS8vIHNlY29uZCB2ZXJzaW9uIG90aGVyd2lzZS4gIFNp
bmNlIFNlY3JldCBpcyBhIHNlY3JldCBhbmQgaW5jb21wbGV0ZQotLy8gdHlwZSwgdGhlIG9ubHkg
ZXhwcmVzc2lvbiBhIHVzZXIgY2FuIHdyaXRlIHRoYXQgaGFzIHR5cGUgU2VjcmV0KiBpcwotLy8g
YSBudWxsIHBvaW50ZXIgbGl0ZXJhbC4gIFRoZXJlZm9yZSwgd2Uga25vdyB0aGF0IHggaXMgYSBu
dWxsCi0vLyBwb2ludGVyIGxpdGVyYWwgaWYgYW5kIG9ubHkgaWYgdGhlIGZpcnN0IHZlcnNpb24g
aXMgcGlja2VkIGJ5IHRoZQotLy8gY29tcGlsZXIuCi1jaGFyIElzTnVsbExpdGVyYWxIZWxwZXIo
U2VjcmV0KiBwKTsKLWNoYXIgKCZJc051bGxMaXRlcmFsSGVscGVyKC4uLikpWzJdOyAgLy8gTk9M
SU5UCi0KLS8vIEEgY29tcGlsZS10aW1lIGJvb2wgY29uc3RhbnQgdGhhdCBpcyB0cnVlIGlmIGFu
ZCBvbmx5IGlmIHggaXMgYQotLy8gbnVsbCBwb2ludGVyIGxpdGVyYWwgKGkuZS4gTlVMTCBvciBh
bnkgMC12YWx1ZWQgY29tcGlsZS10aW1lCi0vLyBpbnRlZ3JhbCBjb25zdGFudCkuCi0jaWZkZWYg
R1RFU1RfRUxMSVBTSVNfTkVFRFNfUE9EXwotLy8gV2UgbG9zZSBzdXBwb3J0IGZvciBOVUxMIGRl
dGVjdGlvbiB3aGVyZSB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlCi0vLyBwYXNzaW5nIG5vbi1Q
T0QgY2xhc3NlcyB0aHJvdWdoIGVsbGlwc2lzICguLi4pLgotIyBkZWZpbmUgR1RFU1RfSVNfTlVM
TF9MSVRFUkFMXyh4KSBmYWxzZQotI2Vsc2UKLSMgZGVmaW5lIEdURVNUX0lTX05VTExfTElURVJB
TF8oeCkgXAotICAgIChzaXplb2YoOjp0ZXN0aW5nOjppbnRlcm5hbDo6SXNOdWxsTGl0ZXJhbEhl
bHBlcih4KSkgPT0gMSkKLSNlbmRpZiAgLy8gR1RFU1RfRUxMSVBTSVNfTkVFRFNfUE9EXwotCi0v
LyBBcHBlbmRzIHRoZSB1c2VyLXN1cHBsaWVkIG1lc3NhZ2UgdG8gdGhlIEdvb2dsZS1UZXN0LWdl
bmVyYXRlZCBtZXNzYWdlLgotR1RFU1RfQVBJXyBzdGQ6OnN0cmluZyBBcHBlbmRVc2VyTWVzc2Fn
ZSgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgZ3Rlc3RfbXNnLCBjb25zdCBNZXNzYWdlJiB1c2Vy
X21zZyk7Ci0KLSNpZiBHVEVTVF9IQVNfRVhDRVBUSU9OUwotCi0vLyBUaGlzIGV4Y2VwdGlvbiBp
cyB0aHJvd24gYnkgKGFuZCBvbmx5IGJ5KSBhIGZhaWxlZCBHb29nbGUgVGVzdAotLy8gYXNzZXJ0
aW9uIHdoZW4gR1RFU1RfRkxBRyh0aHJvd19vbl9mYWlsdXJlKSBpcyB0cnVlIChpZiBleGNlcHRp
b25zCi0vLyBhcmUgZW5hYmxlZCkuICBXZSBkZXJpdmUgaXQgZnJvbSBzdGQ6OnJ1bnRpbWVfZXJy
b3IsIHdoaWNoIGlzIGZvcgotLy8gZXJyb3JzIHByZXN1bWFibHkgZGV0ZWN0YWJsZSBvbmx5IGF0
IHJ1biB0aW1lLiAgU2luY2UKLS8vIHN0ZDo6cnVudGltZV9lcnJvciBpbmhlcml0cyBmcm9tIHN0
ZDo6ZXhjZXB0aW9uLCBtYW55IHRlc3RpbmcKLS8vIGZyYW1ld29ya3Mga25vdyBob3cgdG8gZXh0
cmFjdCBhbmQgcHJpbnQgdGhlIG1lc3NhZ2UgaW5zaWRlIGl0LgotY2xhc3MgR1RFU1RfQVBJXyBH
b29nbGVUZXN0RmFpbHVyZUV4Y2VwdGlvbiA6IHB1YmxpYyA6OnN0ZDo6cnVudGltZV9lcnJvciB7
Ci0gcHVibGljOgotICBleHBsaWNpdCBHb29nbGVUZXN0RmFpbHVyZUV4Y2VwdGlvbihjb25zdCBU
ZXN0UGFydFJlc3VsdCYgZmFpbHVyZSk7Ci19OwotCi0jZW5kaWYgIC8vIEdURVNUX0hBU19FWENF
UFRJT05TCi0KLS8vIEEgaGVscGVyIGNsYXNzIGZvciBjcmVhdGluZyBzY29wZWQgdHJhY2VzIGlu
IHVzZXIgcHJvZ3JhbXMuCi1jbGFzcyBHVEVTVF9BUElfIFNjb3BlZFRyYWNlIHsKLSBwdWJsaWM6
Ci0gIC8vIFRoZSBjJ3RvciBwdXNoZXMgdGhlIGdpdmVuIHNvdXJjZSBmaWxlIGxvY2F0aW9uIGFu
ZCBtZXNzYWdlIG9udG8KLSAgLy8gYSB0cmFjZSBzdGFjayBtYWludGFpbmVkIGJ5IEdvb2dsZSBU
ZXN0LgotICBTY29wZWRUcmFjZShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgTWVz
c2FnZSYgbWVzc2FnZSk7Ci0KLSAgLy8gVGhlIGQndG9yIHBvcHMgdGhlIGluZm8gcHVzaGVkIGJ5
IHRoZSBjJ3Rvci4KLSAgLy8KLSAgLy8gTm90ZSB0aGF0IHRoZSBkJ3RvciBpcyBub3QgdmlydHVh
bCBpbiBvcmRlciB0byBiZSBlZmZpY2llbnQuCi0gIC8vIERvbid0IGluaGVyaXQgZnJvbSBTY29w
ZWRUcmFjZSEKLSAgflNjb3BlZFRyYWNlKCk7Ci0KLSBwcml2YXRlOgotICBHVEVTVF9ESVNBTExP
V19DT1BZX0FORF9BU1NJR05fKFNjb3BlZFRyYWNlKTsKLX0gR1RFU1RfQVRUUklCVVRFX1VOVVNF
RF87ICAvLyBBIFNjb3BlZFRyYWNlIG9iamVjdCBkb2VzIGl0cyBqb2IgaW4gaXRzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYyd0b3IgYW5kIGQndG9yLiAgVGhlcmVmb3JlIGl0IGRv
ZXNuJ3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGJlIHVzZWQgb3Ro
ZXJ3aXNlLgotCi1uYW1lc3BhY2UgZWRpdF9kaXN0YW5jZSB7Ci0vLyBSZXR1cm5zIHRoZSBvcHRp
bWFsIGVkaXRzIHRvIGdvIGZyb20gJ2xlZnQnIHRvICdyaWdodCcuCi0vLyBBbGwgZWRpdHMgY29z
dCB0aGUgc2FtZSwgd2l0aCByZXBsYWNlIGhhdmluZyBsb3dlciBwcmlvcml0eSB0aGFuCi0vLyBh
ZGQvcmVtb3ZlLgotLy8gU2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBXYWduZXLigJNGaXNj
aGVyIGFsZ29yaXRobS4KLS8vIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dhZ25l
ci1GaXNjaGVyX2FsZ29yaXRobQotZW51bSBFZGl0VHlwZSB7IGtNYXRjaCwga0FkZCwga1JlbW92
ZSwga1JlcGxhY2UgfTsKLUdURVNUX0FQSV8gc3RkOjp2ZWN0b3I8RWRpdFR5cGU+IENhbGN1bGF0
ZU9wdGltYWxFZGl0cygKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxzaXplX3Q+JiBsZWZ0LCBjb25z
dCBzdGQ6OnZlY3RvcjxzaXplX3Q+JiByaWdodCk7Ci0KLS8vIFNhbWUgYXMgYWJvdmUsIGJ1dCB0
aGUgaW5wdXQgaXMgcmVwcmVzZW50ZWQgYXMgc3RyaW5ncy4KLUdURVNUX0FQSV8gc3RkOjp2ZWN0
b3I8RWRpdFR5cGU+IENhbGN1bGF0ZU9wdGltYWxFZGl0cygKLSAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxzdGQ6OnN0cmluZz4mIGxlZnQsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+
JiByaWdodCk7Ci0KLS8vIENyZWF0ZSBhIGRpZmYgb2YgdGhlIGlucHV0IHN0cmluZ3MgaW4gVW5p
ZmllZCBkaWZmIGZvcm1hdC4KLUdURVNUX0FQSV8gc3RkOjpzdHJpbmcgQ3JlYXRlVW5pZmllZERp
ZmYoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBsZWZ0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4m
IHJpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
Y29udGV4dCA9IDIpOwotCi19ICAvLyBuYW1lc3BhY2UgZWRpdF9kaXN0YW5jZQotCi0vLyBDYWxj
dWxhdGUgdGhlIGRpZmYgYmV0d2VlbiAnbGVmdCcgYW5kICdyaWdodCcgYW5kIHJldHVybiBpdCBp
biB1bmlmaWVkIGRpZmYKLS8vIGZvcm1hdC4KLS8vIElmIG5vdCBudWxsLCBzdG9yZXMgaW4gJ3Rv
dGFsX2xpbmVfY291bnQnIHRoZSB0b3RhbCBudW1iZXIgb2YgbGluZXMgZm91bmQKLS8vIGluIGxl
ZnQgKyByaWdodC4KLUdURVNUX0FQSV8gc3RkOjpzdHJpbmcgRGlmZlN0cmluZ3MoY29uc3Qgc3Rk
OjpzdHJpbmcmIGxlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiByaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90KiB0b3RhbF9saW5lX2NvdW50KTsKLQotLy8gQ29uc3RydWN0cyBhbmQgcmV0dXJucyB0
aGUgbWVzc2FnZSBmb3IgYW4gZXF1YWxpdHkgYXNzZXJ0aW9uCi0vLyAoZS5nLiBBU1NFUlRfRVEs
IEVYUEVDVF9TVFJFUSwgZXRjKSBmYWlsdXJlLgotLy8KLS8vIFRoZSBmaXJzdCBmb3VyIHBhcmFt
ZXRlcnMgYXJlIHRoZSBleHByZXNzaW9ucyB1c2VkIGluIHRoZSBhc3NlcnRpb24KLS8vIGFuZCB0
aGVpciB2YWx1ZXMsIGFzIHN0cmluZ3MuICBGb3IgZXhhbXBsZSwgZm9yIEFTU0VSVF9FUShmb28s
IGJhcikKLS8vIHdoZXJlIGZvbyBpcyA1IGFuZCBiYXIgaXMgNiwgd2UgaGF2ZToKLS8vCi0vLyAg
IGV4cGVjdGVkX2V4cHJlc3Npb246ICJmb28iCi0vLyAgIGFjdHVhbF9leHByZXNzaW9uOiAgICJi
YXIiCi0vLyAgIGV4cGVjdGVkX3ZhbHVlOiAgICAgICI1IgotLy8gICBhY3R1YWxfdmFsdWU6ICAg
ICAgICAiNiIKLS8vCi0vLyBUaGUgaWdub3JpbmdfY2FzZSBwYXJhbWV0ZXIgaXMgdHJ1ZSBpZmYg
dGhlIGFzc2VydGlvbiBpcyBhCi0vLyAqX1NUUkNBU0VFUSouICBXaGVuIGl0J3MgdHJ1ZSwgdGhl
IHN0cmluZyAiIChpZ25vcmluZyBjYXNlKSIgd2lsbAotLy8gYmUgaW5zZXJ0ZWQgaW50byB0aGUg
bWVzc2FnZS4KLUdURVNUX0FQSV8gQXNzZXJ0aW9uUmVzdWx0IEVxRmFpbHVyZShjb25zdCBjaGFy
KiBleHBlY3RlZF9leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGFjdHVhbF9leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZF92YWx1ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYWN0dWFs
X3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3Jp
bmdfY2FzZSk7Ci0KLS8vIENvbnN0cnVjdHMgYSBmYWlsdXJlIG1lc3NhZ2UgZm9yIEJvb2xlYW4g
YXNzZXJ0aW9ucyBzdWNoIGFzIEVYUEVDVF9UUlVFLgotR1RFU1RfQVBJXyBzdGQ6OnN0cmluZyBH
ZXRCb29sQXNzZXJ0aW9uRmFpbHVyZU1lc3NhZ2UoCi0gICAgY29uc3QgQXNzZXJ0aW9uUmVzdWx0
JiBhc3NlcnRpb25fcmVzdWx0LAotICAgIGNvbnN0IGNoYXIqIGV4cHJlc3Npb25fdGV4dCwKLSAg
ICBjb25zdCBjaGFyKiBhY3R1YWxfcHJlZGljYXRlX3ZhbHVlLAotICAgIGNvbnN0IGNoYXIqIGV4
cGVjdGVkX3ByZWRpY2F0ZV92YWx1ZSk7Ci0KLS8vIFRoaXMgdGVtcGxhdGUgY2xhc3MgcmVwcmVz
ZW50cyBhbiBJRUVFIGZsb2F0aW5nLXBvaW50IG51bWJlcgotLy8gKGVpdGhlciBzaW5nbGUtcHJl
Y2lzaW9uIG9yIGRvdWJsZS1wcmVjaXNpb24sIGRlcGVuZGluZyBvbiB0aGUKLS8vIHRlbXBsYXRl
IHBhcmFtZXRlcnMpLgotLy8KLS8vIFRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgdG8gZG8g
bW9yZSBzb3BoaXN0aWNhdGVkIG51bWJlcgotLy8gY29tcGFyaXNvbi4gIChEdWUgdG8gcm91bmQt
b2ZmIGVycm9yLCBldGMsIGl0J3MgdmVyeSB1bmxpa2VseSB0aGF0Ci0vLyB0d28gZmxvYXRpbmct
cG9pbnRzIHdpbGwgYmUgZXF1YWwgZXhhY3RseS4gIEhlbmNlIGEgbmFpdmUKLS8vIGNvbXBhcmlz
b24gYnkgdGhlID09IG9wZXJhdGlvbiBvZnRlbiBkb2Vzbid0IHdvcmsuKQotLy8KLS8vIEZvcm1h
dCBvZiBJRUVFIGZsb2F0aW5nLXBvaW50OgotLy8KLS8vICAgVGhlIG1vc3Qtc2lnbmlmaWNhbnQg
Yml0IGJlaW5nIHRoZSBsZWZ0bW9zdCwgYW4gSUVFRQotLy8gICBmbG9hdGluZy1wb2ludCBsb29r
cyBsaWtlCi0vLwotLy8gICAgIHNpZ25fYml0IGV4cG9uZW50X2JpdHMgZnJhY3Rpb25fYml0cwot
Ly8KLS8vICAgSGVyZSwgc2lnbl9iaXQgaXMgYSBzaW5nbGUgYml0IHRoYXQgZGVzaWduYXRlcyB0
aGUgc2lnbiBvZiB0aGUKLS8vICAgbnVtYmVyLgotLy8KLS8vICAgRm9yIGZsb2F0LCB0aGVyZSBh
cmUgOCBleHBvbmVudCBiaXRzIGFuZCAyMyBmcmFjdGlvbiBiaXRzLgotLy8KLS8vICAgRm9yIGRv
dWJsZSwgdGhlcmUgYXJlIDExIGV4cG9uZW50IGJpdHMgYW5kIDUyIGZyYWN0aW9uIGJpdHMuCi0v
LwotLy8gICBNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGF0Ci0vLyAgIGh0dHA6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvSUVFRV9mbG9hdGluZy1wb2ludF9zdGFuZGFyZC4KLS8vCi0vLyBUZW1w
bGF0ZSBwYXJhbWV0ZXI6Ci0vLwotLy8gICBSYXdUeXBlOiB0aGUgcmF3IGZsb2F0aW5nLXBvaW50
IHR5cGUgKGVpdGhlciBmbG9hdCBvciBkb3VibGUpCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUmF3VHlw
ZT4KLWNsYXNzIEZsb2F0aW5nUG9pbnQgewotIHB1YmxpYzoKLSAgLy8gRGVmaW5lcyB0aGUgdW5z
aWduZWQgaW50ZWdlciB0eXBlIHRoYXQgaGFzIHRoZSBzYW1lIHNpemUgYXMgdGhlCi0gIC8vIGZs
b2F0aW5nIHBvaW50IG51bWJlci4KLSAgdHlwZWRlZiB0eXBlbmFtZSBUeXBlV2l0aFNpemU8c2l6
ZW9mKFJhd1R5cGUpPjo6VUludCBCaXRzOwotCi0gIC8vIENvbnN0YW50cy4KLQotICAvLyAjIG9m
IGJpdHMgaW4gYSBudW1iZXIuCi0gIHN0YXRpYyBjb25zdCBzaXplX3Qga0JpdENvdW50ID0gOCpz
aXplb2YoUmF3VHlwZSk7Ci0KLSAgLy8gIyBvZiBmcmFjdGlvbiBiaXRzIGluIGEgbnVtYmVyLgot
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtGcmFjdGlvbkJpdENvdW50ID0KLSAgICBzdGQ6Om51bWVy
aWNfbGltaXRzPFJhd1R5cGU+OjpkaWdpdHMgLSAxOwotCi0gIC8vICMgb2YgZXhwb25lbnQgYml0
cyBpbiBhIG51bWJlci4KLSAgc3RhdGljIGNvbnN0IHNpemVfdCBrRXhwb25lbnRCaXRDb3VudCA9
IGtCaXRDb3VudCAtIDEgLSBrRnJhY3Rpb25CaXRDb3VudDsKLQotICAvLyBUaGUgbWFzayBmb3Ig
dGhlIHNpZ24gYml0LgotICBzdGF0aWMgY29uc3QgQml0cyBrU2lnbkJpdE1hc2sgPSBzdGF0aWNf
Y2FzdDxCaXRzPigxKSA8PCAoa0JpdENvdW50IC0gMSk7Ci0KLSAgLy8gVGhlIG1hc2sgZm9yIHRo
ZSBmcmFjdGlvbiBiaXRzLgotICBzdGF0aWMgY29uc3QgQml0cyBrRnJhY3Rpb25CaXRNYXNrID0K
LSAgICB+c3RhdGljX2Nhc3Q8Qml0cz4oMCkgPj4gKGtFeHBvbmVudEJpdENvdW50ICsgMSk7Ci0K
LSAgLy8gVGhlIG1hc2sgZm9yIHRoZSBleHBvbmVudCBiaXRzLgotICBzdGF0aWMgY29uc3QgQml0
cyBrRXhwb25lbnRCaXRNYXNrID0gfihrU2lnbkJpdE1hc2sgfCBrRnJhY3Rpb25CaXRNYXNrKTsK
LQotICAvLyBIb3cgbWFueSBVTFAncyAoVW5pdHMgaW4gdGhlIExhc3QgUGxhY2UpIHdlIHdhbnQg
dG8gdG9sZXJhdGUgd2hlbgotICAvLyBjb21wYXJpbmcgdHdvIG51bWJlcnMuICBUaGUgbGFyZ2Vy
IHRoZSB2YWx1ZSwgdGhlIG1vcmUgZXJyb3Igd2UKLSAgLy8gYWxsb3cuICBBIDAgdmFsdWUgbWVh
bnMgdGhhdCB0d28gbnVtYmVycyBtdXN0IGJlIGV4YWN0bHkgdGhlIHNhbWUKLSAgLy8gdG8gYmUg
Y29uc2lkZXJlZCBlcXVhbC4KLSAgLy8KLSAgLy8gVGhlIG1heGltdW0gZXJyb3Igb2YgYSBzaW5n
bGUgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGlzIDAuNQotICAvLyB1bml0cyBpbiB0aGUgbGFz
dCBwbGFjZS4gIE9uIEludGVsIENQVSdzLCBhbGwgZmxvYXRpbmctcG9pbnQKLSAgLy8gY2FsY3Vs
YXRpb25zIGFyZSBkb25lIHdpdGggODAtYml0IHByZWNpc2lvbiwgd2hpbGUgZG91YmxlIGhhcyA2
NAotICAvLyBiaXRzLiAgVGhlcmVmb3JlLCA0IHNob3VsZCBiZSBlbm91Z2ggZm9yIG9yZGluYXJ5
IHVzZS4KLSAgLy8KLSAgLy8gU2VlIHRoZSBmb2xsb3dpbmcgYXJ0aWNsZSBmb3IgbW9yZSBkZXRh
aWxzIG9uIFVMUDoKLSAgLy8gaHR0cDovL3JhbmRvbWFzY2lpLndvcmRwcmVzcy5jb20vMjAxMi8w
Mi8yNS9jb21wYXJpbmctZmxvYXRpbmctcG9pbnQtbnVtYmVycy0yMDEyLWVkaXRpb24vCi0gIHN0
YXRpYyBjb25zdCBzaXplX3Qga01heFVscHMgPSA0OwotCi0gIC8vIENvbnN0cnVjdHMgYSBGbG9h
dGluZ1BvaW50IGZyb20gYSByYXcgZmxvYXRpbmctcG9pbnQgbnVtYmVyLgotICAvLwotICAvLyBP
biBhbiBJbnRlbCBDUFUsIHBhc3NpbmcgYSBub24tbm9ybWFsaXplZCBOQU4gKE5vdCBhIE51bWJl
cikKLSAgLy8gYXJvdW5kIG1heSBjaGFuZ2UgaXRzIGJpdHMsIGFsdGhvdWdoIHRoZSBuZXcgdmFs
dWUgaXMgZ3VhcmFudGVlZAotICAvLyB0byBiZSBhbHNvIGEgTkFOLiAgVGhlcmVmb3JlLCBkb24n
dCBleHBlY3QgdGhpcyBjb25zdHJ1Y3RvciB0bwotICAvLyBwcmVzZXJ2ZSB0aGUgYml0cyBpbiB4
IHdoZW4geCBpcyBhIE5BTi4KLSAgZXhwbGljaXQgRmxvYXRpbmdQb2ludChjb25zdCBSYXdUeXBl
JiB4KSB7IHVfLnZhbHVlXyA9IHg7IH0KLQotICAvLyBTdGF0aWMgbWV0aG9kcwotCi0gIC8vIFJl
aW50ZXJwcmV0cyBhIGJpdCBwYXR0ZXJuIGFzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLgotICAv
LwotICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5lZWRlZCB0byB0ZXN0IHRoZSBBbG1vc3RFcXVhbHMo
KSBtZXRob2QuCi0gIHN0YXRpYyBSYXdUeXBlIFJlaW50ZXJwcmV0Qml0cyhjb25zdCBCaXRzIGJp
dHMpIHsKLSAgICBGbG9hdGluZ1BvaW50IGZwKDApOwotICAgIGZwLnVfLmJpdHNfID0gYml0czsK
LSAgICByZXR1cm4gZnAudV8udmFsdWVfOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgZmxvYXRp
bmctcG9pbnQgbnVtYmVyIHRoYXQgcmVwcmVzZW50IHBvc2l0aXZlIGluZmluaXR5LgotICBzdGF0
aWMgUmF3VHlwZSBJbmZpbml0eSgpIHsKLSAgICByZXR1cm4gUmVpbnRlcnByZXRCaXRzKGtFeHBv
bmVudEJpdE1hc2spOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbWF4aW11bSByZXByZXNlbnRh
YmxlIGZpbml0ZSBmbG9hdGluZy1wb2ludCBudW1iZXIuCi0gIHN0YXRpYyBSYXdUeXBlIE1heCgp
OwotCi0gIC8vIE5vbi1zdGF0aWMgbWV0aG9kcwotCi0gIC8vIFJldHVybnMgdGhlIGJpdHMgdGhh
dCByZXByZXNlbnRzIHRoaXMgbnVtYmVyLgotICBjb25zdCBCaXRzICZiaXRzKCkgY29uc3QgeyBy
ZXR1cm4gdV8uYml0c187IH0KLQotICAvLyBSZXR1cm5zIHRoZSBleHBvbmVudCBiaXRzIG9mIHRo
aXMgbnVtYmVyLgotICBCaXRzIGV4cG9uZW50X2JpdHMoKSBjb25zdCB7IHJldHVybiBrRXhwb25l
bnRCaXRNYXNrICYgdV8uYml0c187IH0KLQotICAvLyBSZXR1cm5zIHRoZSBmcmFjdGlvbiBiaXRz
IG9mIHRoaXMgbnVtYmVyLgotICBCaXRzIGZyYWN0aW9uX2JpdHMoKSBjb25zdCB7IHJldHVybiBr
RnJhY3Rpb25CaXRNYXNrICYgdV8uYml0c187IH0KLQotICAvLyBSZXR1cm5zIHRoZSBzaWduIGJp
dCBvZiB0aGlzIG51bWJlci4KLSAgQml0cyBzaWduX2JpdCgpIGNvbnN0IHsgcmV0dXJuIGtTaWdu
Qml0TWFzayAmIHVfLmJpdHNfOyB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGlzIGlzIE5B
TiAobm90IGEgbnVtYmVyKS4KLSAgYm9vbCBpc19uYW4oKSBjb25zdCB7Ci0gICAgLy8gSXQncyBh
IE5BTiBpZiB0aGUgZXhwb25lbnQgYml0cyBhcmUgYWxsIG9uZXMgYW5kIHRoZSBmcmFjdGlvbgot
ICAgIC8vIGJpdHMgYXJlIG5vdCBlbnRpcmVseSB6ZXJvcy4KLSAgICByZXR1cm4gKGV4cG9uZW50
X2JpdHMoKSA9PSBrRXhwb25lbnRCaXRNYXNrKSAmJiAoZnJhY3Rpb25fYml0cygpICE9IDApOwot
ICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGlzIG51bWJlciBpcyBhdCBtb3N0IGtNYXhV
bHBzIFVMUCdzIGF3YXkgZnJvbQotICAvLyByaHMuICBJbiBwYXJ0aWN1bGFyLCB0aGlzIGZ1bmN0
aW9uOgotICAvLwotICAvLyAgIC0gcmV0dXJucyBmYWxzZSBpZiBlaXRoZXIgbnVtYmVyIGlzIChv
ciBib3RoIGFyZSkgTkFOLgotICAvLyAgIC0gdHJlYXRzIHJlYWxseSBsYXJnZSBudW1iZXJzIGFz
IGFsbW9zdCBlcXVhbCB0byBpbmZpbml0eS4KLSAgLy8gICAtIHRoaW5rcyArMC4wIGFuZCAtMC4w
IGFyZSAwIERMUCdzIGFwYXJ0LgotICBib29sIEFsbW9zdEVxdWFscyhjb25zdCBGbG9hdGluZ1Bv
aW50JiByaHMpIGNvbnN0IHsKLSAgICAvLyBUaGUgSUVFRSBzdGFuZGFyZCBzYXlzIHRoYXQgYW55
IGNvbXBhcmlzb24gb3BlcmF0aW9uIGludm9sdmluZwotICAgIC8vIGEgTkFOIG11c3QgcmV0dXJu
IGZhbHNlLgotICAgIGlmIChpc19uYW4oKSB8fCByaHMuaXNfbmFuKCkpIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBEaXN0YW5jZUJldHdlZW5TaWduQW5kTWFnbml0dWRlTnVtYmVycyh1Xy5i
aXRzXywgcmhzLnVfLmJpdHNfKQotICAgICAgICA8PSBrTWF4VWxwczsKLSAgfQotCi0gcHJpdmF0
ZToKLSAgLy8gVGhlIGRhdGEgdHlwZSB1c2VkIHRvIHN0b3JlIHRoZSBhY3R1YWwgZmxvYXRpbmct
cG9pbnQgbnVtYmVyLgotICB1bmlvbiBGbG9hdGluZ1BvaW50VW5pb24gewotICAgIFJhd1R5cGUg
dmFsdWVfOyAgLy8gVGhlIHJhdyBmbG9hdGluZy1wb2ludCBudW1iZXIuCi0gICAgQml0cyBiaXRz
XzsgICAgICAvLyBUaGUgYml0cyB0aGF0IHJlcHJlc2VudCB0aGUgbnVtYmVyLgotICB9OwotCi0g
IC8vIENvbnZlcnRzIGFuIGludGVnZXIgZnJvbSB0aGUgc2lnbi1hbmQtbWFnbml0dWRlIHJlcHJl
c2VudGF0aW9uIHRvCi0gIC8vIHRoZSBiaWFzZWQgcmVwcmVzZW50YXRpb24uICBNb3JlIHByZWNp
c2VseSwgbGV0IE4gYmUgMiB0byB0aGUKLSAgLy8gcG93ZXIgb2YgKGtCaXRDb3VudCAtIDEpLCBh
biBpbnRlZ2VyIHggaXMgcmVwcmVzZW50ZWQgYnkgdGhlCi0gIC8vIHVuc2lnbmVkIG51bWJlciB4
ICsgTi4KLSAgLy8KLSAgLy8gRm9yIGluc3RhbmNlLAotICAvLwotICAvLyAgIC1OICsgMSAodGhl
IG1vc3QgbmVnYXRpdmUgbnVtYmVyIHJlcHJlc2VudGFibGUgdXNpbmcKLSAgLy8gICAgICAgICAg
c2lnbi1hbmQtbWFnbml0dWRlKSBpcyByZXByZXNlbnRlZCBieSAxOwotICAvLyAgIDAgICAgICBp
cyByZXByZXNlbnRlZCBieSBOOyBhbmQKLSAgLy8gICBOIC0gMSAgKHRoZSBiaWdnZXN0IG51bWJl
ciByZXByZXNlbnRhYmxlIHVzaW5nCi0gIC8vICAgICAgICAgIHNpZ24tYW5kLW1hZ25pdHVkZSkg
aXMgcmVwcmVzZW50ZWQgYnkgMk4gLSAxLgotICAvLwotICAvLyBSZWFkIGh0dHA6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvU2lnbmVkX251bWJlcl9yZXByZXNlbnRhdGlvbnMKLSAgLy8gZm9yIG1v
cmUgZGV0YWlscyBvbiBzaWduZWQgbnVtYmVyIHJlcHJlc2VudGF0aW9ucy4KLSAgc3RhdGljIEJp
dHMgU2lnbkFuZE1hZ25pdHVkZVRvQmlhc2VkKGNvbnN0IEJpdHMgJnNhbSkgewotICAgIGlmIChr
U2lnbkJpdE1hc2sgJiBzYW0pIHsKLSAgICAgIC8vIHNhbSByZXByZXNlbnRzIGEgbmVnYXRpdmUg
bnVtYmVyLgotICAgICAgcmV0dXJuIH5zYW0gKyAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBz
YW0gcmVwcmVzZW50cyBhIHBvc2l0aXZlIG51bWJlci4KLSAgICAgIHJldHVybiBrU2lnbkJpdE1h
c2sgfCBzYW07Ci0gICAgfQotICB9Ci0KLSAgLy8gR2l2ZW4gdHdvIG51bWJlcnMgaW4gdGhlIHNp
Z24tYW5kLW1hZ25pdHVkZSByZXByZXNlbnRhdGlvbiwKLSAgLy8gcmV0dXJucyB0aGUgZGlzdGFu
Y2UgYmV0d2VlbiB0aGVtIGFzIGFuIHVuc2lnbmVkIG51bWJlci4KLSAgc3RhdGljIEJpdHMgRGlz
dGFuY2VCZXR3ZWVuU2lnbkFuZE1hZ25pdHVkZU51bWJlcnMoY29uc3QgQml0cyAmc2FtMSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Qml0cyAmc2FtMikgewotICAgIGNvbnN0IEJpdHMgYmlhc2VkMSA9IFNpZ25BbmRNYWduaXR1ZGVU
b0JpYXNlZChzYW0xKTsKLSAgICBjb25zdCBCaXRzIGJpYXNlZDIgPSBTaWduQW5kTWFnbml0dWRl
VG9CaWFzZWQoc2FtMik7Ci0gICAgcmV0dXJuIChiaWFzZWQxID49IGJpYXNlZDIpID8gKGJpYXNl
ZDEgLSBiaWFzZWQyKSA6IChiaWFzZWQyIC0gYmlhc2VkMSk7Ci0gIH0KLQotICBGbG9hdGluZ1Bv
aW50VW5pb24gdV87Ci19OwotCi0vLyBXZSBjYW5ub3QgdXNlIHN0ZDo6bnVtZXJpY19saW1pdHM8
VD46Om1heCgpIGFzIGl0IGNsYXNoZXMgd2l0aCB0aGUgbWF4KCkKLS8vIG1hY3JvIGRlZmluZWQg
YnkgPHdpbmRvd3MuaD4uCi10ZW1wbGF0ZSA8PgotaW5saW5lIGZsb2F0IEZsb2F0aW5nUG9pbnQ8
ZmxvYXQ+OjpNYXgoKSB7IHJldHVybiBGTFRfTUFYOyB9Ci10ZW1wbGF0ZSA8PgotaW5saW5lIGRv
dWJsZSBGbG9hdGluZ1BvaW50PGRvdWJsZT46Ok1heCgpIHsgcmV0dXJuIERCTF9NQVg7IH0KLQot
Ly8gVHlwZWRlZnMgdGhlIGluc3RhbmNlcyBvZiB0aGUgRmxvYXRpbmdQb2ludCB0ZW1wbGF0ZSBj
bGFzcyB0aGF0IHdlCi0vLyBjYXJlIHRvIHVzZS4KLXR5cGVkZWYgRmxvYXRpbmdQb2ludDxmbG9h
dD4gRmxvYXQ7Ci10eXBlZGVmIEZsb2F0aW5nUG9pbnQ8ZG91YmxlPiBEb3VibGU7Ci0KLS8vIElu
IG9yZGVyIHRvIGNhdGNoIHRoZSBtaXN0YWtlIG9mIHB1dHRpbmcgdGVzdHMgdGhhdCB1c2UgZGlm
ZmVyZW50Ci0vLyB0ZXN0IGZpeHR1cmUgY2xhc3NlcyBpbiB0aGUgc2FtZSB0ZXN0IGNhc2UsIHdl
IG5lZWQgdG8gYXNzaWduCi0vLyB1bmlxdWUgSURzIHRvIGZpeHR1cmUgY2xhc3NlcyBhbmQgY29t
cGFyZSB0aGVtLiAgVGhlIFR5cGVJZCB0eXBlIGlzCi0vLyB1c2VkIHRvIGhvbGQgc3VjaCBJRHMu
ICBUaGUgdXNlciBzaG91bGQgdHJlYXQgVHlwZUlkIGFzIGFuIG9wYXF1ZQotLy8gdHlwZTogdGhl
IG9ubHkgb3BlcmF0aW9uIGFsbG93ZWQgb24gVHlwZUlkIHZhbHVlcyBpcyB0byBjb21wYXJlCi0v
LyB0aGVtIGZvciBlcXVhbGl0eSB1c2luZyB0aGUgPT0gb3BlcmF0b3IuCi10eXBlZGVmIGNvbnN0
IHZvaWQqIFR5cGVJZDsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBUeXBlSWRIZWxw
ZXIgewotIHB1YmxpYzoKLSAgLy8gZHVtbXlfIG11c3Qgbm90IGhhdmUgYSBjb25zdCB0eXBlLiAg
T3RoZXJ3aXNlIGFuIG92ZXJseSBlYWdlcgotICAvLyBjb21waWxlciAoZS5nLiBNU1ZDIDcuMSAm
IDguMCkgbWF5IHRyeSB0byBtZXJnZQotICAvLyBUeXBlSWRIZWxwZXI8VD46OmR1bW15XyBmb3Ig
ZGlmZmVyZW50IFRzIGFzIGFuICJvcHRpbWl6YXRpb24iLgotICBzdGF0aWMgYm9vbCBkdW1teV87
Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWJvb2wgVHlwZUlkSGVscGVyPFQ+OjpkdW1t
eV8gPSBmYWxzZTsKLQotLy8gR2V0VHlwZUlkPFQ+KCkgcmV0dXJucyB0aGUgSUQgb2YgdHlwZSBU
LiAgRGlmZmVyZW50IHZhbHVlcyB3aWxsIGJlCi0vLyByZXR1cm5lZCBmb3IgZGlmZmVyZW50IHR5
cGVzLiAgQ2FsbGluZyB0aGUgZnVuY3Rpb24gdHdpY2Ugd2l0aCB0aGUKLS8vIHNhbWUgdHlwZSBh
cmd1bWVudCBpcyBndWFyYW50ZWVkIHRvIHJldHVybiB0aGUgc2FtZSBJRC4KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotVHlwZUlkIEdldFR5cGVJZCgpIHsKLSAgLy8gVGhlIGNvbXBpbGVyIGlzIHJl
cXVpcmVkIHRvIGFsbG9jYXRlIGEgZGlmZmVyZW50Ci0gIC8vIFR5cGVJZEhlbHBlcjxUPjo6ZHVt
bXlfIHZhcmlhYmxlIGZvciBlYWNoIFQgdXNlZCB0byBpbnN0YW50aWF0ZQotICAvLyB0aGUgdGVt
cGxhdGUuICBUaGVyZWZvcmUsIHRoZSBhZGRyZXNzIG9mIGR1bW15XyBpcyBndWFyYW50ZWVkIHRv
Ci0gIC8vIGJlIHVuaXF1ZS4KLSAgcmV0dXJuICYoVHlwZUlkSGVscGVyPFQ+OjpkdW1teV8pOwot
fQotCi0vLyBSZXR1cm5zIHRoZSB0eXBlIElEIG9mIDo6dGVzdGluZzo6VGVzdC4gIEFsd2F5cyBj
YWxsIHRoaXMgaW5zdGVhZAotLy8gb2YgR2V0VHlwZUlkPCA6OnRlc3Rpbmc6OlRlc3Q+KCkgdG8g
Z2V0IHRoZSB0eXBlIElEIG9mCi0vLyA6OnRlc3Rpbmc6OlRlc3QsIGFzIHRoZSBsYXR0ZXIgbWF5
IGdpdmUgdGhlIHdyb25nIHJlc3VsdCBkdWUgdG8gYQotLy8gc3VzcGVjdGVkIGxpbmtlciBidWcg
d2hlbiBjb21waWxpbmcgR29vZ2xlIFRlc3QgYXMgYSBNYWMgT1MgWAotLy8gZnJhbWV3b3JrLgot
R1RFU1RfQVBJXyBUeXBlSWQgR2V0VGVzdFR5cGVJZCgpOwotCi0vLyBEZWZpbmVzIHRoZSBhYnN0
cmFjdCBmYWN0b3J5IGludGVyZmFjZSB0aGF0IGNyZWF0ZXMgaW5zdGFuY2VzCi0vLyBvZiBhIFRl
c3Qgb2JqZWN0LgotY2xhc3MgVGVzdEZhY3RvcnlCYXNlIHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwg
flRlc3RGYWN0b3J5QmFzZSgpIHt9Ci0KLSAgLy8gQ3JlYXRlcyBhIHRlc3QgaW5zdGFuY2UgdG8g
cnVuLiBUaGUgaW5zdGFuY2UgaXMgYm90aCBjcmVhdGVkIGFuZCBkZXN0cm95ZWQKLSAgLy8gd2l0
aGluIFRlc3RJbmZvSW1wbDo6UnVuKCkKLSAgdmlydHVhbCBUZXN0KiBDcmVhdGVUZXN0KCkgPSAw
OwotCi0gcHJvdGVjdGVkOgotICBUZXN0RmFjdG9yeUJhc2UoKSB7fQotCi0gcHJpdmF0ZToKLSAg
R1RFU1RfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOXyhUZXN0RmFjdG9yeUJhc2UpOwotfTsKLQot
Ly8gVGhpcyBjbGFzcyBwcm92aWRlcyBpbXBsZW1lbnRhdGlvbiBvZiBUZWFzdEZhY3RvcnlCYXNl
IGludGVyZmFjZS4KLS8vIEl0IGlzIHVzZWQgaW4gVEVTVCBhbmQgVEVTVF9GIG1hY3Jvcy4KLXRl
bXBsYXRlIDxjbGFzcyBUZXN0Q2xhc3M+Ci1jbGFzcyBUZXN0RmFjdG9yeUltcGwgOiBwdWJsaWMg
VGVzdEZhY3RvcnlCYXNlIHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgVGVzdCogQ3JlYXRlVGVzdCgp
IHsgcmV0dXJuIG5ldyBUZXN0Q2xhc3M7IH0KLX07Ci0KLSNpZiBHVEVTVF9PU19XSU5ET1dTCi0K
LS8vIFByZWRpY2F0ZS1mb3JtYXR0ZXJzIGZvciBpbXBsZW1lbnRpbmcgdGhlIEhSRVNVTFQgY2hl
Y2tpbmcgbWFjcm9zCi0vLyB7QVNTRVJUfEVYUEVDVH1fSFJFU1VMVF97U1VDQ0VFREVEfEZBSUxF
RH0KLS8vIFdlIHBhc3MgYSBsb25nIGluc3RlYWQgb2YgSFJFU1VMVCB0byBhdm9pZCBjYXVzaW5n
IGFuCi0vLyBpbmNsdWRlIGRlcGVuZGVuY3kgZm9yIHRoZSBIUkVTVUxUIHR5cGUuCi1HVEVTVF9B
UElfIEFzc2VydGlvblJlc3VsdCBJc0hSRVNVTFRTdWNjZXNzKGNvbnN0IGNoYXIqIGV4cHIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaHIpOyAgLy8g
Tk9MSU5UCi1HVEVTVF9BUElfIEFzc2VydGlvblJlc3VsdCBJc0hSRVNVTFRGYWlsdXJlKGNvbnN0
IGNoYXIqIGV4cHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvbmcgaHIpOyAgLy8gTk9MSU5UCi0KLSNlbmRpZiAgLy8gR1RFU1RfT1NfV0lORE9XUwotCi0v
LyBUeXBlcyBvZiBTZXRVcFRlc3RDYXNlKCkgYW5kIFRlYXJEb3duVGVzdENhc2UoKSBmdW5jdGlv
bnMuCi10eXBlZGVmIHZvaWQgKCpTZXRVcFRlc3RDYXNlRnVuYykoKTsKLXR5cGVkZWYgdm9pZCAo
KlRlYXJEb3duVGVzdENhc2VGdW5jKSgpOwotCi1zdHJ1Y3QgQ29kZUxvY2F0aW9uIHsKLSAgQ29k
ZUxvY2F0aW9uKGNvbnN0IHN0cmluZyYgYV9maWxlLCBpbnQgYV9saW5lKSA6IGZpbGUoYV9maWxl
KSwgbGluZShhX2xpbmUpIHt9Ci0KLSAgc3RyaW5nIGZpbGU7Ci0gIGludCBsaW5lOwotfTsKLQot
Ly8gQ3JlYXRlcyBhIG5ldyBUZXN0SW5mbyBvYmplY3QgYW5kIHJlZ2lzdGVycyBpdCB3aXRoIEdv
b2dsZSBUZXN0OwotLy8gcmV0dXJucyB0aGUgY3JlYXRlZCBvYmplY3QuCi0vLwotLy8gQXJndW1l
bnRzOgotLy8KLS8vICAgdGVzdF9jYXNlX25hbWU6ICAgbmFtZSBvZiB0aGUgdGVzdCBjYXNlCi0v
LyAgIG5hbWU6ICAgICAgICAgICAgIG5hbWUgb2YgdGhlIHRlc3QKLS8vICAgdHlwZV9wYXJhbSAg
ICAgICAgdGhlIG5hbWUgb2YgdGhlIHRlc3QncyB0eXBlIHBhcmFtZXRlciwgb3IgTlVMTCBpZgot
Ly8gICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIG5vdCBhIHR5cGVkIG9yIGEgdHlwZS1wYXJh
bWV0ZXJpemVkIHRlc3QuCi0vLyAgIHZhbHVlX3BhcmFtICAgICAgIHRleHQgcmVwcmVzZW50YXRp
b24gb2YgdGhlIHRlc3QncyB2YWx1ZSBwYXJhbWV0ZXIsCi0vLyAgICAgICAgICAgICAgICAgICAg
IG9yIE5VTEwgaWYgdGhpcyBpcyBub3QgYSB0eXBlLXBhcmFtZXRlcml6ZWQgdGVzdC4KLS8vICAg
Y29kZV9sb2NhdGlvbjogICAgY29kZSBsb2NhdGlvbiB3aGVyZSB0aGUgdGVzdCBpcyBkZWZpbmVk
Ci0vLyAgIGZpeHR1cmVfY2xhc3NfaWQ6IElEIG9mIHRoZSB0ZXN0IGZpeHR1cmUgY2xhc3MKLS8v
ICAgc2V0X3VwX3RjOiAgICAgICAgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdGhhdCBzZXRzIHVw
IHRoZSB0ZXN0IGNhc2UKLS8vICAgdGVhcl9kb3duX3RjOiAgICAgcG9pbnRlciB0byB0aGUgZnVu
Y3Rpb24gdGhhdCB0ZWFycyBkb3duIHRoZSB0ZXN0IGNhc2UKLS8vICAgZmFjdG9yeTogICAgICAg
ICAgcG9pbnRlciB0byB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgYSB0ZXN0IG9iamVjdC4KLS8v
ICAgICAgICAgICAgICAgICAgICAgVGhlIG5ld2x5IGNyZWF0ZWQgVGVzdEluZm8gaW5zdGFuY2Ug
d2lsbCBhc3N1bWUKLS8vICAgICAgICAgICAgICAgICAgICAgb3duZXJzaGlwIG9mIHRoZSBmYWN0
b3J5IG9iamVjdC4KLUdURVNUX0FQSV8gVGVzdEluZm8qIE1ha2VBbmRSZWdpc3RlclRlc3RJbmZv
KAotICAgIGNvbnN0IGNoYXIqIHRlc3RfY2FzZV9uYW1lLAotICAgIGNvbnN0IGNoYXIqIG5hbWUs
Ci0gICAgY29uc3QgY2hhciogdHlwZV9wYXJhbSwKLSAgICBjb25zdCBjaGFyKiB2YWx1ZV9wYXJh
bSwKLSAgICBDb2RlTG9jYXRpb24gY29kZV9sb2NhdGlvbiwKLSAgICBUeXBlSWQgZml4dHVyZV9j
bGFzc19pZCwKLSAgICBTZXRVcFRlc3RDYXNlRnVuYyBzZXRfdXBfdGMsCi0gICAgVGVhckRvd25U
ZXN0Q2FzZUZ1bmMgdGVhcl9kb3duX3RjLAotICAgIFRlc3RGYWN0b3J5QmFzZSogZmFjdG9yeSk7
Ci0KLS8vIElmICpwc3RyIHN0YXJ0cyB3aXRoIHRoZSBnaXZlbiBwcmVmaXgsIG1vZGlmaWVzICpw
c3RyIHRvIGJlIHJpZ2h0Ci0vLyBwYXN0IHRoZSBwcmVmaXggYW5kIHJldHVybnMgdHJ1ZTsgb3Ro
ZXJ3aXNlIGxlYXZlcyAqcHN0ciB1bmNoYW5nZWQKLS8vIGFuZCByZXR1cm5zIGZhbHNlLiAgTm9u
ZSBvZiBwc3RyLCAqcHN0ciwgYW5kIHByZWZpeCBjYW4gYmUgTlVMTC4KLUdURVNUX0FQSV8gYm9v
bCBTa2lwUHJlZml4KGNvbnN0IGNoYXIqIHByZWZpeCwgY29uc3QgY2hhcioqIHBzdHIpOwotCi0j
aWYgR1RFU1RfSEFTX1RZUEVEX1RFU1QgfHwgR1RFU1RfSEFTX1RZUEVEX1RFU1RfUAotCi0vLyBT
dGF0ZSBvZiB0aGUgZGVmaW5pdGlvbiBvZiBhIHR5cGUtcGFyYW1ldGVyaXplZCB0ZXN0IGNhc2Uu
Ci1jbGFzcyBHVEVTVF9BUElfIFR5cGVkVGVzdENhc2VQU3RhdGUgewotIHB1YmxpYzoKLSAgVHlw
ZWRUZXN0Q2FzZVBTdGF0ZSgpIDogcmVnaXN0ZXJlZF8oZmFsc2UpIHt9Ci0KLSAgLy8gQWRkcyB0
aGUgZ2l2ZW4gdGVzdCBuYW1lIHRvIGRlZmluZWRfdGVzdF9uYW1lc18gYW5kIHJldHVybiB0cnVl
Ci0gIC8vIGlmIHRoZSB0ZXN0IGNhc2UgaGFzbid0IGJlZW4gcmVnaXN0ZXJlZDsgb3RoZXJ3aXNl
IGFib3J0cyB0aGUKLSAgLy8gcHJvZ3JhbS4KLSAgYm9vbCBBZGRUZXN0TmFtZShjb25zdCBjaGFy
KiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogY2FzZV9uYW1lLAotICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIHRlc3RfbmFtZSkgewotICAgIGlmIChyZWdpc3RlcmVkXykgewotICAg
ICAgZnByaW50ZihzdGRlcnIsICIlcyBUZXN0ICVzIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgIgot
ICAgICAgICAgICAgICAiUkVHSVNURVJfVFlQRURfVEVTVF9DQVNFX1AoJXMsIC4uLikuXG4iLAot
ICAgICAgICAgICAgICBGb3JtYXRGaWxlTG9jYXRpb24oZmlsZSwgbGluZSkuY19zdHIoKSwgdGVz
dF9uYW1lLCBjYXNlX25hbWUpOwotICAgICAgZmZsdXNoKHN0ZGVycik7Ci0gICAgICBwb3NpeDo6
QWJvcnQoKTsKLSAgICB9Ci0gICAgcmVnaXN0ZXJlZF90ZXN0c18uaW5zZXJ0KAotICAgICAgICA6
OnN0ZDo6bWFrZV9wYWlyKHRlc3RfbmFtZSwgQ29kZUxvY2F0aW9uKGZpbGUsIGxpbmUpKSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBib29sIFRlc3RFeGlzdHMoY29uc3Qgc3RkOjpzdHJp
bmcmIHRlc3RfbmFtZSkgY29uc3QgewotICAgIHJldHVybiByZWdpc3RlcmVkX3Rlc3RzXy5jb3Vu
dCh0ZXN0X25hbWUpID4gMDsKLSAgfQotCi0gIGNvbnN0IENvZGVMb2NhdGlvbiYgR2V0Q29kZUxv
Y2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0X25hbWUpIGNvbnN0IHsKLSAgICBSZWdpc3Rl
cmVkVGVzdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVnaXN0ZXJlZF90ZXN0c18uZmluZCh0
ZXN0X25hbWUpOwotICAgIEdURVNUX0NIRUNLXyhpdCAhPSByZWdpc3RlcmVkX3Rlc3RzXy5lbmQo
KSk7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci0gIH0KLQotICAvLyBWZXJpZmllcyB0aGF0IHJl
Z2lzdGVyZWRfdGVzdHMgbWF0Y2ggdGhlIHRlc3QgbmFtZXMgaW4KLSAgLy8gZGVmaW5lZF90ZXN0
X25hbWVzXzsgcmV0dXJucyByZWdpc3RlcmVkX3Rlc3RzIGlmIHN1Y2Nlc3NmdWwsIG9yCi0gIC8v
IGFib3J0cyB0aGUgcHJvZ3JhbSBvdGhlcndpc2UuCi0gIGNvbnN0IGNoYXIqIFZlcmlmeVJlZ2lz
dGVyZWRUZXN0TmFtZXMoCi0gICAgICBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3Qg
Y2hhciogcmVnaXN0ZXJlZF90ZXN0cyk7Ci0KLSBwcml2YXRlOgotICB0eXBlZGVmIDo6c3RkOjpt
YXA8c3RkOjpzdHJpbmcsIENvZGVMb2NhdGlvbj4gUmVnaXN0ZXJlZFRlc3RzTWFwOwotCi0gIGJv
b2wgcmVnaXN0ZXJlZF87Ci0gIFJlZ2lzdGVyZWRUZXN0c01hcCByZWdpc3RlcmVkX3Rlc3RzXzsK
LX07Ci0KLS8vIFNraXBzIHRvIHRoZSBmaXJzdCBub24tc3BhY2UgY2hhciBhZnRlciB0aGUgZmly
c3QgY29tbWEgaW4gJ3N0cic7Ci0vLyByZXR1cm5zIE5VTEwgaWYgbm8gY29tbWEgaXMgZm91bmQg
aW4gJ3N0cicuCi1pbmxpbmUgY29uc3QgY2hhciogU2tpcENvbW1hKGNvbnN0IGNoYXIqIHN0cikg
ewotICBjb25zdCBjaGFyKiBjb21tYSA9IHN0cmNocihzdHIsICcsJyk7Ci0gIGlmIChjb21tYSA9
PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgd2hpbGUgKElzU3BhY2UoKigrK2Nv
bW1hKSkpIHt9Ci0gIHJldHVybiBjb21tYTsKLX0KLQotLy8gUmV0dXJucyB0aGUgcHJlZml4IG9m
ICdzdHInIGJlZm9yZSB0aGUgZmlyc3QgY29tbWEgaW4gaXQ7IHJldHVybnMKLS8vIHRoZSBlbnRp
cmUgc3RyaW5nIGlmIGl0IGNvbnRhaW5zIG5vIGNvbW1hLgotaW5saW5lIHN0ZDo6c3RyaW5nIEdl
dFByZWZpeFVudGlsQ29tbWEoY29uc3QgY2hhciogc3RyKSB7Ci0gIGNvbnN0IGNoYXIqIGNvbW1h
ID0gc3RyY2hyKHN0ciwgJywnKTsKLSAgcmV0dXJuIGNvbW1hID09IE5VTEwgPyBzdHIgOiBzdGQ6
OnN0cmluZyhzdHIsIGNvbW1hKTsKLX0KLQotLy8gU3BsaXRzIGEgZ2l2ZW4gc3RyaW5nIG9uIGEg
Z2l2ZW4gZGVsaW1pdGVyLCBwb3B1bGF0aW5nIGEgZ2l2ZW4KLS8vIHZlY3RvciB3aXRoIHRoZSBm
aWVsZHMuCi12b2lkIFNwbGl0U3RyaW5nKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHN0ciwgY2hhciBk
ZWxpbWl0ZXIsCi0gICAgICAgICAgICAgICAgIDo6c3RkOjp2ZWN0b3I8IDo6c3RkOjpzdHJpbmc+
KiBkZXN0KTsKLQotLy8gVHlwZVBhcmFtZXRlcml6ZWRUZXN0PEZpeHR1cmUsIFRlc3RTZWwsIFR5
cGVzPjo6UmVnaXN0ZXIoKQotLy8gcmVnaXN0ZXJzIGEgbGlzdCBvZiB0eXBlLXBhcmFtZXRlcml6
ZWQgdGVzdHMgd2l0aCBHb29nbGUgVGVzdC4gIFRoZQotLy8gcmV0dXJuIHZhbHVlIGlzIGluc2ln
bmlmaWNhbnQgLSB3ZSBqdXN0IG5lZWQgdG8gcmV0dXJuIHNvbWV0aGluZwotLy8gc3VjaCB0aGF0
IHdlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gYSBuYW1lc3BhY2Ugc2NvcGUuCi0vLwotLy8g
SW1wbGVtZW50YXRpb24gbm90ZTogVGhlIEdURVNUX1RFTVBMQVRFXyBtYWNybyBkZWNsYXJlcyBh
IHRlbXBsYXRlCi0vLyB0ZW1wbGF0ZSBwYXJhbWV0ZXIuICBJdCdzIGRlZmluZWQgaW4gZ3Rlc3Qt
dHlwZS11dGlsLmguCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIEZpeHR1cmUsIGNsYXNzIFRl
c3RTZWwsIHR5cGVuYW1lIFR5cGVzPgotY2xhc3MgVHlwZVBhcmFtZXRlcml6ZWRUZXN0IHsKLSBw
dWJsaWM6Ci0gIC8vICdpbmRleCcgaXMgdGhlIGluZGV4IG9mIHRoZSB0ZXN0IGluIHRoZSB0eXBl
IGxpc3QgJ1R5cGVzJwotICAvLyBzcGVjaWZpZWQgaW4gSU5TVEFOVElBVEVfVFlQRURfVEVTVF9D
QVNFX1AoUHJlZml4LCBUZXN0Q2FzZSwKLSAgLy8gVHlwZXMpLiAgVmFsaWQgdmFsdWVzIGZvciAn
aW5kZXgnIGFyZSBbMCwgTiAtIDFdIHdoZXJlIE4gaXMgdGhlCi0gIC8vIGxlbmd0aCBvZiBUeXBl
cy4KLSAgc3RhdGljIGJvb2wgUmVnaXN0ZXIoY29uc3QgY2hhciogcHJlZml4LAotICAgICAgICAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb24gY29kZV9sb2NhdGlvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogY2FzZV9uYW1lLCBjb25zdCBjaGFyKiB0ZXN0X25hbWVzLAot
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgpIHsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IFR5cGVzOjpIZWFkIFR5cGU7Ci0gICAgdHlwZWRlZiBGaXh0dXJlPFR5cGU+IEZpeHR1cmVDbGFz
czsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEdURVNUX0JJTkRfKFRlc3RTZWwsIFR5cGUpIFRlc3RD
bGFzczsKLQotICAgIC8vIEZpcnN0LCByZWdpc3RlcnMgdGhlIGZpcnN0IHR5cGUtcGFyYW1ldGVy
aXplZCB0ZXN0IGluIHRoZSB0eXBlCi0gICAgLy8gbGlzdC4KLSAgICBNYWtlQW5kUmVnaXN0ZXJU
ZXN0SW5mbygKLSAgICAgICAgKHN0ZDo6c3RyaW5nKHByZWZpeCkgKyAocHJlZml4WzBdID09ICdc
MCcgPyAiIiA6ICIvIikgKyBjYXNlX25hbWUgKyAiLyIKLSAgICAgICAgICsgU3RyZWFtYWJsZVRv
U3RyaW5nKGluZGV4KSkuY19zdHIoKSwKLSAgICAgICAgU3RyaXBUcmFpbGluZ1NwYWNlcyhHZXRQ
cmVmaXhVbnRpbENvbW1hKHRlc3RfbmFtZXMpKS5jX3N0cigpLAotICAgICAgICBHZXRUeXBlTmFt
ZTxUeXBlPigpLmNfc3RyKCksCi0gICAgICAgIE5VTEwsICAvLyBObyB2YWx1ZSBwYXJhbWV0ZXIu
Ci0gICAgICAgIGNvZGVfbG9jYXRpb24sCi0gICAgICAgIEdldFR5cGVJZDxGaXh0dXJlQ2xhc3M+
KCksCi0gICAgICAgIFRlc3RDbGFzczo6U2V0VXBUZXN0Q2FzZSwKLSAgICAgICAgVGVzdENsYXNz
OjpUZWFyRG93blRlc3RDYXNlLAotICAgICAgICBuZXcgVGVzdEZhY3RvcnlJbXBsPFRlc3RDbGFz
cz4pOwotCi0gICAgLy8gTmV4dCwgcmVjdXJzZXMgKGF0IGNvbXBpbGUgdGltZSkgd2l0aCB0aGUg
dGFpbCBvZiB0aGUgdHlwZSBsaXN0LgotICAgIHJldHVybiBUeXBlUGFyYW1ldGVyaXplZFRlc3Q8
Rml4dHVyZSwgVGVzdFNlbCwgdHlwZW5hbWUgVHlwZXM6OlRhaWw+Ci0gICAgICAgIDo6UmVnaXN0
ZXIocHJlZml4LCBjb2RlX2xvY2F0aW9uLCBjYXNlX25hbWUsIHRlc3RfbmFtZXMsIGluZGV4ICsg
MSk7Ci0gIH0KLX07Ci0KLS8vIFRoZSBiYXNlIGNhc2UgZm9yIHRoZSBjb21waWxlIHRpbWUgcmVj
dXJzaW9uLgotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBGaXh0dXJlLCBjbGFzcyBUZXN0U2Vs
PgotY2xhc3MgVHlwZVBhcmFtZXRlcml6ZWRUZXN0PEZpeHR1cmUsIFRlc3RTZWwsIFR5cGVzMD4g
ewotIHB1YmxpYzoKLSAgc3RhdGljIGJvb2wgUmVnaXN0ZXIoY29uc3QgY2hhciogLypwcmVmaXgq
LywgQ29kZUxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAvKmNh
c2VfbmFtZSovLCBjb25zdCBjaGFyKiAvKnRlc3RfbmFtZXMqLywKLSAgICAgICAgICAgICAgICAg
ICAgICAgaW50IC8qaW5kZXgqLykgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19OwotCi0vLyBU
eXBlUGFyYW1ldGVyaXplZFRlc3RDYXNlPEZpeHR1cmUsIFRlc3RzLCBUeXBlcz46OlJlZ2lzdGVy
KCkKLS8vIHJlZ2lzdGVycyAqYWxsIGNvbWJpbmF0aW9ucyogb2YgJ1Rlc3RzJyBhbmQgJ1R5cGVz
JyB3aXRoIEdvb2dsZQotLy8gVGVzdC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgaW5zaWduaWZpY2Fu
dCAtIHdlIGp1c3QgbmVlZCB0byByZXR1cm4KLS8vIHNvbWV0aGluZyBzdWNoIHRoYXQgd2UgY2Fu
IGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBhIG5hbWVzcGFjZSBzY29wZS4KLXRlbXBsYXRlIDxHVEVT
VF9URU1QTEFURV8gRml4dHVyZSwgdHlwZW5hbWUgVGVzdHMsIHR5cGVuYW1lIFR5cGVzPgotY2xh
c3MgVHlwZVBhcmFtZXRlcml6ZWRUZXN0Q2FzZSB7Ci0gcHVibGljOgotICBzdGF0aWMgYm9vbCBS
ZWdpc3Rlcihjb25zdCBjaGFyKiBwcmVmaXgsIENvZGVMb2NhdGlvbiBjb2RlX2xvY2F0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUeXBlZFRlc3RDYXNlUFN0YXRlKiBzdGF0ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY2FzZV9uYW1lLCBjb25zdCBjaGFy
KiB0ZXN0X25hbWVzKSB7Ci0gICAgc3RkOjpzdHJpbmcgdGVzdF9uYW1lID0gU3RyaXBUcmFpbGlu
Z1NwYWNlcygKLSAgICAgICAgR2V0UHJlZml4VW50aWxDb21tYSh0ZXN0X25hbWVzKSk7Ci0gICAg
aWYgKCFzdGF0ZS0+VGVzdEV4aXN0cyh0ZXN0X25hbWUpKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkZhaWxlZCB0byBnZXQgY29kZSBsb2NhdGlvbiBmb3IgdGVzdCAlcy4lcyBhdCAlcy4iLAot
ICAgICAgICAgICAgICBjYXNlX25hbWUsIHRlc3RfbmFtZS5jX3N0cigpLAotICAgICAgICAgICAg
ICBGb3JtYXRGaWxlTG9jYXRpb24oY29kZV9sb2NhdGlvbi5maWxlLmNfc3RyKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2xvY2F0aW9uLmxpbmUpLmNfc3RyKCkpOwot
ICAgICAgZmZsdXNoKHN0ZGVycik7Ci0gICAgICBwb3NpeDo6QWJvcnQoKTsKLSAgICB9Ci0gICAg
Y29uc3QgQ29kZUxvY2F0aW9uJiB0ZXN0X2xvY2F0aW9uID0gc3RhdGUtPkdldENvZGVMb2NhdGlv
bih0ZXN0X25hbWUpOwotCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBUZXN0czo6SGVhZCBIZWFkOwot
Ci0gICAgLy8gRmlyc3QsIHJlZ2lzdGVyIHRoZSBmaXJzdCB0ZXN0IGluICdUZXN0JyBmb3IgZWFj
aCB0eXBlIGluICdUeXBlcycuCi0gICAgVHlwZVBhcmFtZXRlcml6ZWRUZXN0PEZpeHR1cmUsIEhl
YWQsIFR5cGVzPjo6UmVnaXN0ZXIoCi0gICAgICAgIHByZWZpeCwgdGVzdF9sb2NhdGlvbiwgY2Fz
ZV9uYW1lLCB0ZXN0X25hbWVzLCAwKTsKLQotICAgIC8vIE5leHQsIHJlY3Vyc2VzIChhdCBjb21w
aWxlIHRpbWUpIHdpdGggdGhlIHRhaWwgb2YgdGhlIHRlc3QgbGlzdC4KLSAgICByZXR1cm4gVHlw
ZVBhcmFtZXRlcml6ZWRUZXN0Q2FzZTxGaXh0dXJlLCB0eXBlbmFtZSBUZXN0czo6VGFpbCwgVHlw
ZXM+Ci0gICAgICAgIDo6UmVnaXN0ZXIocHJlZml4LCBjb2RlX2xvY2F0aW9uLCBzdGF0ZSwKLSAg
ICAgICAgICAgICAgICAgICBjYXNlX25hbWUsIFNraXBDb21tYSh0ZXN0X25hbWVzKSk7Ci0gIH0K
LX07Ci0KLS8vIFRoZSBiYXNlIGNhc2UgZm9yIHRoZSBjb21waWxlIHRpbWUgcmVjdXJzaW9uLgot
dGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBGaXh0dXJlLCB0eXBlbmFtZSBUeXBlcz4KLWNsYXNz
IFR5cGVQYXJhbWV0ZXJpemVkVGVzdENhc2U8Rml4dHVyZSwgVGVtcGxhdGVzMCwgVHlwZXM+IHsK
LSBwdWJsaWM6Ci0gIHN0YXRpYyBib29sIFJlZ2lzdGVyKGNvbnN0IGNoYXIqIC8qcHJlZml4Ki8s
IENvZGVMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHlwZWRUZXN0Q2Fz
ZVBTdGF0ZSogLypzdGF0ZSovLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAv
KmNhc2VfbmFtZSovLCBjb25zdCBjaGFyKiAvKnRlc3RfbmFtZXMqLykgewotICAgIHJldHVybiB0
cnVlOwotICB9Ci19OwotCi0jZW5kaWYgIC8vIEdURVNUX0hBU19UWVBFRF9URVNUIHx8IEdURVNU
X0hBU19UWVBFRF9URVNUX1AKLQotLy8gUmV0dXJucyB0aGUgY3VycmVudCBPUyBzdGFjayB0cmFj
ZSBhcyBhbiBzdGQ6OnN0cmluZy4KLS8vCi0vLyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3RhY2sg
ZnJhbWVzIHRvIGJlIGluY2x1ZGVkIGlzIHNwZWNpZmllZCBieQotLy8gdGhlIGd0ZXN0X3N0YWNr
X3RyYWNlX2RlcHRoIGZsYWcuICBUaGUgc2tpcF9jb3VudCBwYXJhbWV0ZXIKLS8vIHNwZWNpZmll
cyB0aGUgbnVtYmVyIG9mIHRvcCBmcmFtZXMgdG8gYmUgc2tpcHBlZCwgd2hpY2ggZG9lc24ndAot
Ly8gY291bnQgYWdhaW5zdCB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byBiZSBpbmNsdWRlZC4KLS8v
Ci0vLyBGb3IgZXhhbXBsZSwgaWYgRm9vKCkgY2FsbHMgQmFyKCksIHdoaWNoIGluIHR1cm4gY2Fs
bHMKLS8vIEdldEN1cnJlbnRPc1N0YWNrVHJhY2VFeGNlcHRUb3AoLi4uLCAxKSwgRm9vKCkgd2ls
bCBiZSBpbmNsdWRlZCBpbgotLy8gdGhlIHRyYWNlIGJ1dCBCYXIoKSBhbmQgR2V0Q3VycmVudE9z
U3RhY2tUcmFjZUV4Y2VwdFRvcCgpIHdvbid0LgotR1RFU1RfQVBJXyBzdGQ6OnN0cmluZyBHZXRD
dXJyZW50T3NTdGFja1RyYWNlRXhjZXB0VG9wKAotICAgIFVuaXRUZXN0KiB1bml0X3Rlc3QsIGlu
dCBza2lwX2NvdW50KTsKLQotLy8gSGVscGVycyBmb3Igc3VwcHJlc3Npbmcgd2FybmluZ3Mgb24g
dW5yZWFjaGFibGUgY29kZSBvciBjb25zdGFudAotLy8gY29uZGl0aW9uLgotCi0vLyBBbHdheXMg
cmV0dXJucyB0cnVlLgotR1RFU1RfQVBJXyBib29sIEFsd2F5c1RydWUoKTsKLQotLy8gQWx3YXlz
IHJldHVybnMgZmFsc2UuCi1pbmxpbmUgYm9vbCBBbHdheXNGYWxzZSgpIHsgcmV0dXJuICFBbHdh
eXNUcnVlKCk7IH0KLQotLy8gSGVscGVyIGZvciBzdXBwcmVzc2luZyBmYWxzZSB3YXJuaW5nIGZy
b20gQ2xhbmcgb24gYSBjb25zdCBjaGFyKgotLy8gdmFyaWFibGUgZGVjbGFyZWQgaW4gYSBjb25k
aXRpb25hbCBleHByZXNzaW9uIGFsd2F5cyBiZWluZyBOVUxMIGluCi0vLyB0aGUgZWxzZSBicmFu
Y2guCi1zdHJ1Y3QgR1RFU1RfQVBJXyBDb25zdENoYXJQdHIgewotICBDb25zdENoYXJQdHIoY29u
c3QgY2hhciogc3RyKSA6IHZhbHVlKHN0cikge30KLSAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KLSAgY29uc3QgY2hhciogdmFsdWU7Ci19OwotCi0vLyBBIHNpbXBsZSBM
aW5lYXIgQ29uZ3J1ZW50aWFsIEdlbmVyYXRvciBmb3IgZ2VuZXJhdGluZyByYW5kb20KLS8vIG51
bWJlcnMgd2l0aCBhIHVuaWZvcm0gZGlzdHJpYnV0aW9uLiAgVW5saWtlIHJhbmQoKSBhbmQgc3Jh
bmQoKSwgaXQKLS8vIGRvZXNuJ3QgdXNlIGdsb2JhbCBzdGF0ZSAoYW5kIHRoZXJlZm9yZSBjYW4n
dCBpbnRlcmZlcmUgd2l0aCB1c2VyCi0vLyBjb2RlKS4gIFVubGlrZSByYW5kX3IoKSwgaXQncyBw
b3J0YWJsZS4gIEFuIExDRyBpc24ndCB2ZXJ5IHJhbmRvbSwKLS8vIGJ1dCBpdCdzIGdvb2QgZW5v
dWdoIGZvciBvdXIgcHVycG9zZXMuCi1jbGFzcyBHVEVTVF9BUElfIFJhbmRvbSB7Ci0gcHVibGlj
OgotICBzdGF0aWMgY29uc3QgVUludDMyIGtNYXhSYW5nZSA9IDF1IDw8IDMxOwotCi0gIGV4cGxp
Y2l0IFJhbmRvbShVSW50MzIgc2VlZCkgOiBzdGF0ZV8oc2VlZCkge30KLQotICB2b2lkIFJlc2Vl
ZChVSW50MzIgc2VlZCkgeyBzdGF0ZV8gPSBzZWVkOyB9Ci0KLSAgLy8gR2VuZXJhdGVzIGEgcmFu
ZG9tIG51bWJlciBmcm9tIFswLCByYW5nZSkuICBDcmFzaGVzIGlmICdyYW5nZScgaXMKLSAgLy8g
MCBvciBncmVhdGVyIHRoYW4ga01heFJhbmdlLgotICBVSW50MzIgR2VuZXJhdGUoVUludDMyIHJh
bmdlKTsKLQotIHByaXZhdGU6Ci0gIFVJbnQzMiBzdGF0ZV87Ci0gIEdURVNUX0RJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTl8oUmFuZG9tKTsKLX07Ci0KLS8vIERlZmluaW5nIGEgdmFyaWFibGUgb2Yg
dHlwZSBDb21waWxlQXNzZXJ0VHlwZXNFcXVhbDxUMSwgVDI+IHdpbGwgY2F1c2UgYQotLy8gY29t
cGlsZXIgZXJyb3IgaWZmIFQxIGFuZCBUMiBhcmUgZGlmZmVyZW50IHR5cGVzLgotdGVtcGxhdGUg
PHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KLXN0cnVjdCBDb21waWxlQXNzZXJ0VHlwZXNFcXVh
bDsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29tcGlsZUFzc2VydFR5cGVzRXF1
YWw8VCwgVD4gewotfTsKLQotLy8gUmVtb3ZlcyB0aGUgcmVmZXJlbmNlIGZyb20gYSB0eXBlIGlm
IGl0IGlzIGEgcmVmZXJlbmNlIHR5cGUsCi0vLyBvdGhlcndpc2UgbGVhdmVzIGl0IHVuY2hhbmdl
ZC4gIFRoaXMgaXMgdGhlIHNhbWUgYXMKLS8vIHRyMTo6cmVtb3ZlX3JlZmVyZW5jZSwgd2hpY2gg
aXMgbm90IHdpZGVseSBhdmFpbGFibGUgeWV0LgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1
Y3QgUmVtb3ZlUmVmZXJlbmNlIHsgdHlwZWRlZiBUIHR5cGU7IH07ICAvLyBOT0xJTlQKLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IFJlbW92ZVJlZmVyZW5jZTxUJj4geyB0eXBlZGVmIFQg
dHlwZTsgfTsgIC8vIE5PTElOVAotCi0vLyBBIGhhbmR5IHdyYXBwZXIgYXJvdW5kIFJlbW92ZVJl
ZmVyZW5jZSB0aGF0IHdvcmtzIHdoZW4gdGhlIGFyZ3VtZW50Ci0vLyBUIGRlcGVuZHMgb24gdGVt
cGxhdGUgcGFyYW1ldGVycy4KLSNkZWZpbmUgR1RFU1RfUkVNT1ZFX1JFRkVSRU5DRV8oVCkgXAot
ICAgIHR5cGVuYW1lIDo6dGVzdGluZzo6aW50ZXJuYWw6OlJlbW92ZVJlZmVyZW5jZTxUPjo6dHlw
ZQotCi0vLyBSZW1vdmVzIGNvbnN0IGZyb20gYSB0eXBlIGlmIGl0IGlzIGEgY29uc3QgdHlwZSwg
b3RoZXJ3aXNlIGxlYXZlcwotLy8gaXQgdW5jaGFuZ2VkLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0
cjE6OnJlbW92ZV9jb25zdCwgd2hpY2ggaXMgbm90Ci0vLyB3aWRlbHkgYXZhaWxhYmxlIHlldC4K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IFJlbW92ZUNvbnN0IHsgdHlwZWRlZiBUIHR5
cGU7IH07ICAvLyBOT0xJTlQKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IFJlbW92ZUNv
bnN0PGNvbnN0IFQ+IHsgdHlwZWRlZiBUIHR5cGU7IH07ICAvLyBOT0xJTlQKLQotLy8gTVNWQyA4
LjAsIFN1biBDKyssIGFuZCBJQk0gWEwgQysrIGhhdmUgYSBidWcgd2hpY2ggY2F1c2VzIHRoZSBh
Ym92ZQotLy8gZGVmaW5pdGlvbiB0byBmYWlsIHRvIHJlbW92ZSB0aGUgY29uc3QgaW4gJ2NvbnN0
IGludFszXScgYW5kICdjb25zdAotLy8gY2hhclszXVs0XScuICBUaGUgZm9sbG93aW5nIHNwZWNp
YWxpemF0aW9uIHdvcmtzIGFyb3VuZCB0aGUgYnVnLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNp
emVfdCBOPgotc3RydWN0IFJlbW92ZUNvbnN0PGNvbnN0IFRbTl0+IHsKLSAgdHlwZWRlZiB0eXBl
bmFtZSBSZW1vdmVDb25zdDxUPjo6dHlwZSB0eXBlW05dOwotfTsKLQotI2lmIGRlZmluZWQoX01T
Q19WRVIpICYmIF9NU0NfVkVSIDwgMTQwMAotLy8gVGhpcyBpcyB0aGUgb25seSBzcGVjaWFsaXph
dGlvbiB0aGF0IGFsbG93cyBWQysrIDcuMSB0byByZW1vdmUgY29uc3QgaW4KLS8vICdjb25zdCBp
bnRbM10gYW5kICdjb25zdCBpbnRbM11bNF0nLiAgSG93ZXZlciwgaXQgY2F1c2VzIHRyb3VibGUg
d2l0aCBHQ0MKLS8vIGFuZCB0aHVzIG5lZWRzIHRvIGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQu
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+Ci1zdHJ1Y3QgUmVtb3ZlQ29uc3Q8VFtO
XT4gewotICB0eXBlZGVmIHR5cGVuYW1lIFJlbW92ZUNvbnN0PFQ+Ojp0eXBlIHR5cGVbTl07Ci19
OwotI2VuZGlmCi0KLS8vIEEgaGFuZHkgd3JhcHBlciBhcm91bmQgUmVtb3ZlQ29uc3QgdGhhdCB3
b3JrcyB3aGVuIHRoZSBhcmd1bWVudAotLy8gVCBkZXBlbmRzIG9uIHRlbXBsYXRlIHBhcmFtZXRl
cnMuCi0jZGVmaW5lIEdURVNUX1JFTU9WRV9DT05TVF8oVCkgXAotICAgIHR5cGVuYW1lIDo6dGVz
dGluZzo6aW50ZXJuYWw6OlJlbW92ZUNvbnN0PFQ+Ojp0eXBlCi0KLS8vIFR1cm5zIGNvbnN0IFUm
LCBVJiwgY29uc3QgVSwgYW5kIFUgYWxsIGludG8gVS4KLSNkZWZpbmUgR1RFU1RfUkVNT1ZFX1JF
RkVSRU5DRV9BTkRfQ09OU1RfKFQpIFwKLSAgICBHVEVTVF9SRU1PVkVfQ09OU1RfKEdURVNUX1JF
TU9WRV9SRUZFUkVOQ0VfKFQpKQotCi0vLyBBZGRzIHJlZmVyZW5jZSB0byBhIHR5cGUgaWYgaXQg
aXMgbm90IGEgcmVmZXJlbmNlIHR5cGUsCi0vLyBvdGhlcndpc2UgbGVhdmVzIGl0IHVuY2hhbmdl
ZC4gIFRoaXMgaXMgdGhlIHNhbWUgYXMKLS8vIHRyMTo6YWRkX3JlZmVyZW5jZSwgd2hpY2ggaXMg
bm90IHdpZGVseSBhdmFpbGFibGUgeWV0LgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3Qg
QWRkUmVmZXJlbmNlIHsgdHlwZWRlZiBUJiB0eXBlOyB9OyAgLy8gTk9MSU5UCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KLXN0cnVjdCBBZGRSZWZlcmVuY2U8VCY+IHsgdHlwZWRlZiBUJiB0eXBlOyB9
OyAgLy8gTk9MSU5UCi0KLS8vIEEgaGFuZHkgd3JhcHBlciBhcm91bmQgQWRkUmVmZXJlbmNlIHRo
YXQgd29ya3Mgd2hlbiB0aGUgYXJndW1lbnQgVAotLy8gZGVwZW5kcyBvbiB0ZW1wbGF0ZSBwYXJh
bWV0ZXJzLgotI2RlZmluZSBHVEVTVF9BRERfUkVGRVJFTkNFXyhUKSBcCi0gICAgdHlwZW5hbWUg
Ojp0ZXN0aW5nOjppbnRlcm5hbDo6QWRkUmVmZXJlbmNlPFQ+Ojp0eXBlCi0KLS8vIEFkZHMgYSBy
ZWZlcmVuY2UgdG8gY29uc3Qgb24gdG9wIG9mIFQgYXMgbmVjZXNzYXJ5LiAgRm9yIGV4YW1wbGUs
Ci0vLyBpdCB0cmFuc2Zvcm1zCi0vLwotLy8gICBjaGFyICAgICAgICAgPT0+IGNvbnN0IGNoYXIm
Ci0vLyAgIGNvbnN0IGNoYXIgICA9PT4gY29uc3QgY2hhciYKLS8vICAgY2hhciYgICAgICAgID09
PiBjb25zdCBjaGFyJgotLy8gICBjb25zdCBjaGFyJiAgPT0+IGNvbnN0IGNoYXImCi0vLwotLy8g
VGhlIGFyZ3VtZW50IFQgbXVzdCBkZXBlbmQgb24gc29tZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgot
I2RlZmluZSBHVEVTVF9SRUZFUkVOQ0VfVE9fQ09OU1RfKFQpIFwKLSAgICBHVEVTVF9BRERfUkVG
RVJFTkNFXyhjb25zdCBHVEVTVF9SRU1PVkVfUkVGRVJFTkNFXyhUKSkKLQotLy8gSW1wbGljaXRs
eUNvbnZlcnRpYmxlPEZyb20sIFRvPjo6dmFsdWUgaXMgYSBjb21waWxlLXRpbWUgYm9vbAotLy8g
Y29uc3RhbnQgdGhhdCdzIHRydWUgaWZmIHR5cGUgRnJvbSBjYW4gYmUgaW1wbGljaXRseSBjb252
ZXJ0ZWQgdG8KLS8vIHR5cGUgVG8uCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRnJvbSwgdHlwZW5hbWUg
VG8+Ci1jbGFzcyBJbXBsaWNpdGx5Q29udmVydGlibGUgewotIHByaXZhdGU6Ci0gIC8vIFdlIG5l
ZWQgdGhlIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb25zIG9ubHkgZm9yIHRoZWlyIHR5cGVzLgot
ICAvLyBUaGV5IGhhdmUgbm8gaW1wbGVtZW50YXRpb25zLgotCi0gIC8vIE1ha2VGcm9tKCkgaXMg
YW4gZXhwcmVzc2lvbiB3aG9zZSB0eXBlIGlzIEZyb20uICBXZSBjYW5ub3Qgc2ltcGx5Ci0gIC8v
IHVzZSBGcm9tKCksIGFzIHRoZSB0eXBlIEZyb20gbWF5IG5vdCBoYXZlIGEgcHVibGljIGRlZmF1
bHQKLSAgLy8gY29uc3RydWN0b3IuCi0gIHN0YXRpYyB0eXBlbmFtZSBBZGRSZWZlcmVuY2U8RnJv
bT46OnR5cGUgTWFrZUZyb20oKTsKLQotICAvLyBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSBvdmVy
bG9hZGVkLiAgR2l2ZW4gYW4gZXhwcmVzc2lvbgotICAvLyBIZWxwZXIoeCksIHRoZSBjb21waWxl
ciB3aWxsIHBpY2sgdGhlIGZpcnN0IHZlcnNpb24gaWYgeCBjYW4gYmUKLSAgLy8gaW1wbGljaXRs
eSBjb252ZXJ0ZWQgdG8gdHlwZSBUbzsgb3RoZXJ3aXNlIGl0IHdpbGwgcGljayB0aGUKLSAgLy8g
c2Vjb25kIHZlcnNpb24uCi0gIC8vCi0gIC8vIFRoZSBmaXJzdCB2ZXJzaW9uIHJldHVybnMgYSB2
YWx1ZSBvZiBzaXplIDEsIGFuZCB0aGUgc2Vjb25kCi0gIC8vIHZlcnNpb24gcmV0dXJucyBhIHZh
bHVlIG9mIHNpemUgMi4gIFRoZXJlZm9yZSwgYnkgY2hlY2tpbmcgdGhlCi0gIC8vIHNpemUgb2Yg
SGVscGVyKHgpLCB3aGljaCBjYW4gYmUgZG9uZSBhdCBjb21waWxlIHRpbWUsIHdlIGNhbiB0ZWxs
Ci0gIC8vIHdoaWNoIHZlcnNpb24gb2YgSGVscGVyKCkgaXMgdXNlZCwgYW5kIGhlbmNlIHdoZXRo
ZXIgeCBjYW4gYmUKLSAgLy8gaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gdHlwZSBUby4KLSAgc3Rh
dGljIGNoYXIgSGVscGVyKFRvKTsKLSAgc3RhdGljIGNoYXIgKCZIZWxwZXIoLi4uKSlbMl07ICAv
LyBOT0xJTlQKLQotICAvLyBXZSBoYXZlIHRvIHB1dCB0aGUgJ3B1YmxpYycgc2VjdGlvbiBhZnRl
ciB0aGUgJ3ByaXZhdGUnIHNlY3Rpb24sCi0gIC8vIG9yIE1TVkMgcmVmdXNlcyB0byBjb21waWxl
IHRoZSBjb2RlLgotIHB1YmxpYzoKLSNpZiBkZWZpbmVkKF9fQk9STEFORENfXykKLSAgLy8gQysr
QnVpbGRlciBjYW5ub3QgdXNlIG1lbWJlciBvdmVybG9hZCByZXNvbHV0aW9uIGR1cmluZyB0ZW1w
bGF0ZQotICAvLyBpbnN0YW50aWF0aW9uLiAgVGhlIHNpbXBsZXN0IHdvcmthcm91bmQgaXMgdG8g
dXNlIGl0cyBDKysweCB0eXBlIHRyYWl0cwotICAvLyBmdW5jdGlvbnMgKEMrK0J1aWxkZXIgMjAw
OSBhbmQgYWJvdmUgb25seSkuCi0gIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gX19pc19jb252
ZXJ0aWJsZShGcm9tLCBUbyk7Ci0jZWxzZQotICAvLyBNU1ZDIHdhcm5zIGFib3V0IGltcGxpY2l0
bHkgY29udmVydGluZyBmcm9tIGRvdWJsZSB0byBpbnQgZm9yCi0gIC8vIHBvc3NpYmxlIGxvc3Mg
b2YgZGF0YSwgc28gd2UgbmVlZCB0byB0ZW1wb3JhcmlseSBkaXNhYmxlIHRoZQotICAvLyB3YXJu
aW5nLgotICBHVEVTVF9ESVNBQkxFX01TQ19XQVJOSU5HU19QVVNIXyg0MjQ0KQotICBzdGF0aWMg
Y29uc3QgYm9vbCB2YWx1ZSA9Ci0gICAgICBzaXplb2YoSGVscGVyKEltcGxpY2l0bHlDb252ZXJ0
aWJsZTo6TWFrZUZyb20oKSkpID09IDE7Ci0gIEdURVNUX0RJU0FCTEVfTVNDX1dBUk5JTkdTX1BP
UF8oKQotI2VuZGlmICAvLyBfX0JPUkxBTkRDX18KLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRnJv
bSwgdHlwZW5hbWUgVG8+Ci1jb25zdCBib29sIEltcGxpY2l0bHlDb252ZXJ0aWJsZTxGcm9tLCBU
bz46OnZhbHVlOwotCi0vLyBJc0FQcm90b2NvbE1lc3NhZ2U8VD46OnZhbHVlIGlzIGEgY29tcGls
ZS10aW1lIGJvb2wgY29uc3RhbnQgdGhhdCdzCi0vLyB0cnVlIGlmZiBUIGlzIHR5cGUgUHJvdG9j
b2xNZXNzYWdlLCBwcm90bzI6Ok1lc3NhZ2UsIG9yIGEgc3ViY2xhc3MKLS8vIG9mIHRob3NlLgot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSXNBUHJvdG9jb2xNZXNzYWdlCi0gICAgOiBw
dWJsaWMgYm9vbF9jb25zdGFudDwKLSAgSW1wbGljaXRseUNvbnZlcnRpYmxlPGNvbnN0IFQqLCBj
b25zdCA6OlByb3RvY29sTWVzc2FnZSo+Ojp2YWx1ZSB8fAotICBJbXBsaWNpdGx5Q29udmVydGli
bGU8Y29uc3QgVCosIGNvbnN0IDo6cHJvdG8yOjpNZXNzYWdlKj46OnZhbHVlPiB7Ci19OwotCi0v
LyBXaGVuIHRoZSBjb21waWxlciBzZWVzIGV4cHJlc3Npb24gSXNDb250YWluZXJUZXN0PEM+KDAp
LCBpZiBDIGlzIGFuCi0vLyBTVEwtc3R5bGUgY29udGFpbmVyIGNsYXNzLCB0aGUgZmlyc3Qgb3Zl
cmxvYWQgb2YgSXNDb250YWluZXJUZXN0Ci0vLyB3aWxsIGJlIHZpYWJsZSAoc2luY2UgYm90aCBD
OjppdGVyYXRvciogYW5kIEM6OmNvbnN0X2l0ZXJhdG9yKiBhcmUKLS8vIHZhbGlkIHR5cGVzIGFu
ZCBOVUxMIGNhbiBiZSBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byB0aGVtKS4gIEl0IHdpbGwKLS8v
IGJlIHBpY2tlZCBvdmVyIHRoZSBzZWNvbmQgb3ZlcmxvYWQgYXMgJ2ludCcgaXMgYSBwZXJmZWN0
IG1hdGNoIGZvcgotLy8gdGhlIHR5cGUgb2YgYXJndW1lbnQgMC4gIElmIEM6Oml0ZXJhdG9yIG9y
IEM6OmNvbnN0X2l0ZXJhdG9yIGlzIG5vdAotLy8gYSB2YWxpZCB0eXBlLCB0aGUgZmlyc3Qgb3Zl
cmxvYWQgaXMgbm90IHZpYWJsZSwgYW5kIHRoZSBzZWNvbmQKLS8vIG92ZXJsb2FkIHdpbGwgYmUg
cGlja2VkLiAgVGhlcmVmb3JlLCB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgQyBpcwotLy8gYSBj
b250YWluZXIgY2xhc3MgYnkgY2hlY2tpbmcgdGhlIHR5cGUgb2YgSXNDb250YWluZXJUZXN0PEM+
KDApLgotLy8gVGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzIGluc2lnbmlmaWNhbnQuCi0v
LwotLy8gTm90ZSB0aGF0IHdlIGxvb2sgZm9yIGJvdGggQzo6aXRlcmF0b3IgYW5kIEM6OmNvbnN0
X2l0ZXJhdG9yLiAgVGhlCi0vLyByZWFzb24gaXMgdGhhdCBDKysgaW5qZWN0cyB0aGUgbmFtZSBv
ZiBhIGNsYXNzIGFzIGEgbWVtYmVyIG9mIHRoZQotLy8gY2xhc3MgaXRzZWxmIChlLmcuIHlvdSBj
YW4gcmVmZXIgdG8gY2xhc3MgaXRlcmF0b3IgYXMgZWl0aGVyCi0vLyAnaXRlcmF0b3InIG9yICdp
dGVyYXRvcjo6aXRlcmF0b3InKS4gIElmIHdlIGxvb2sgZm9yIEM6Oml0ZXJhdG9yCi0vLyBvbmx5
LCBmb3IgZXhhbXBsZSwgd2Ugd291bGQgbWlzdGFrZW5seSB0aGluayB0aGF0IGEgY2xhc3MgbmFt
ZWQKLS8vIGl0ZXJhdG9yIGlzIGFuIFNUTCBjb250YWluZXIuCi0vLwotLy8gQWxzbyBub3RlIHRo
YXQgdGhlIHNpbXBsZXIgYXBwcm9hY2ggb2Ygb3ZlcmxvYWRpbmcKLS8vIElzQ29udGFpbmVyVGVz
dCh0eXBlbmFtZSBDOjpjb25zdF9pdGVyYXRvciopIGFuZAotLy8gSXNDb250YWluZXJUZXN0KC4u
LikgZG9lc24ndCB3b3JrIHdpdGggVmlzdWFsIEFnZSBDKysgYW5kIFN1biBDKysuCi10eXBlZGVm
IGludCBJc0NvbnRhaW5lcjsKLXRlbXBsYXRlIDxjbGFzcyBDPgotSXNDb250YWluZXIgSXNDb250
YWluZXJUZXN0KGludCAvKiBkdW1teSAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlbmFtZSBDOjppdGVyYXRvciogLyogaXQgKi8gPSBOVUxMLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIEM6OmNvbnN0X2l0ZXJhdG9yKiAvKiBjb25zdF9pdCAqLyA9IE5V
TEwpIHsKLSAgcmV0dXJuIDA7Ci19Ci0KLXR5cGVkZWYgY2hhciBJc05vdENvbnRhaW5lcjsKLXRl
bXBsYXRlIDxjbGFzcyBDPgotSXNOb3RDb250YWluZXIgSXNDb250YWluZXJUZXN0KGxvbmcgLyog
ZHVtbXkgKi8pIHsgcmV0dXJuICdcMCc7IH0KLQotLy8gRW5hYmxlSWY8Y29uZGl0aW9uPjo6dHlw
ZSBpcyB2b2lkIHdoZW4gJ0NvbmQnIGlzIHRydWUsIGFuZAotLy8gdW5kZWZpbmVkIHdoZW4gJ0Nv
bmQnIGlzIGZhbHNlLiAgVG8gdXNlIFNGSU5BRSB0byBtYWtlIGEgZnVuY3Rpb24KLS8vIG92ZXJs
b2FkIG9ubHkgYXBwbHkgd2hlbiBhIHBhcnRpY3VsYXIgZXhwcmVzc2lvbiBpcyB0cnVlLCBhZGQK
LS8vICJ0eXBlbmFtZSBFbmFibGVJZjxleHByZXNzaW9uPjo6dHlwZSogPSAwIiBhcyB0aGUgbGFz
dCBwYXJhbWV0ZXIuCi10ZW1wbGF0ZTxib29sPiBzdHJ1Y3QgRW5hYmxlSWY7Ci10ZW1wbGF0ZTw+
IHN0cnVjdCBFbmFibGVJZjx0cnVlPiB7IHR5cGVkZWYgdm9pZCB0eXBlOyB9OyAgLy8gTk9MSU5U
Ci0KLS8vIFV0aWxpdGllcyBmb3IgbmF0aXZlIGFycmF5cy4KLQotLy8gQXJyYXlFcSgpIGNvbXBh
cmVzIHR3byBrLWRpbWVuc2lvbmFsIG5hdGl2ZSBhcnJheXMgdXNpbmcgdGhlCi0vLyBlbGVtZW50
cycgb3BlcmF0b3I9PSwgd2hlcmUgayBjYW4gYmUgYW55IGludGVnZXIgPj0gMC4gIFdoZW4gayBp
cwotLy8gMCwgQXJyYXlFcSgpIGRlZ2VuZXJhdGVzIGludG8gY29tcGFyaW5nIGEgc2luZ2xlIHBh
aXIgb2YgdmFsdWVzLgotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWJvb2wg
QXJyYXlFcShjb25zdCBUKiBsaHMsIHNpemVfdCBzaXplLCBjb25zdCBVKiByaHMpOwotCi0vLyBU
aGlzIGdlbmVyaWMgdmVyc2lvbiBpcyB1c2VkIHdoZW4gayBpcyAwLgotdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+Ci1pbmxpbmUgYm9vbCBBcnJheUVxKGNvbnN0IFQmIGxocywgY29u
c3QgVSYgcmhzKSB7IHJldHVybiBsaHMgPT0gcmhzOyB9Ci0KLS8vIFRoaXMgb3ZlcmxvYWQgaXMg
dXNlZCB3aGVuIGsgPj0gMS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCBzaXpl
X3QgTj4KLWlubGluZSBib29sIEFycmF5RXEoY29uc3QgVCgmbGhzKVtOXSwgY29uc3QgVSgmcmhz
KVtOXSkgewotICByZXR1cm4gaW50ZXJuYWw6OkFycmF5RXEobGhzLCBOLCByaHMpOwotfQotCi0v
LyBUaGlzIGhlbHBlciByZWR1Y2VzIGNvZGUgYmxvYXQuICBJZiB3ZSBpbnN0ZWFkIHB1dCBpdHMg
bG9naWMgaW5zaWRlCi0vLyB0aGUgcHJldmlvdXMgQXJyYXlFcSgpIGZ1bmN0aW9uLCBhcnJheXMg
d2l0aCBkaWZmZXJlbnQgc2l6ZXMgd291bGQKLS8vIGxlYWQgdG8gZGlmZmVyZW50IGNvcGllcyBv
ZiB0aGUgdGVtcGxhdGUgY29kZS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgot
Ym9vbCBBcnJheUVxKGNvbnN0IFQqIGxocywgc2l6ZV90IHNpemUsIGNvbnN0IFUqIHJocykgewot
ICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBzaXplOyBpKyspIHsKLSAgICBpZiAoIWludGVybmFs
OjpBcnJheUVxKGxoc1tpXSwgcmhzW2ldKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGl0ZXJh
dG9yIHJhbmdlIFtiZWdpbiwgZW5kKSB0aGF0Ci0vLyBlcXVhbHMgZWxlbS4gIEVsZW1lbnQgbWF5
IGJlIGEgbmF0aXZlIGFycmF5IHR5cGUgaXRzZWxmLgotdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXIs
IHR5cGVuYW1lIEVsZW1lbnQ+Ci1JdGVyIEFycmF5QXdhcmVGaW5kKEl0ZXIgYmVnaW4sIEl0ZXIg
ZW5kLCBjb25zdCBFbGVtZW50JiBlbGVtKSB7Ci0gIGZvciAoSXRlciBpdCA9IGJlZ2luOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICBpZiAoaW50ZXJuYWw6OkFycmF5RXEoKml0LCBlbGVtKSkKLSAg
ICAgIHJldHVybiBpdDsKLSAgfQotICByZXR1cm4gZW5kOwotfQotCi0vLyBDb3B5QXJyYXkoKSBj
b3BpZXMgYSBrLWRpbWVuc2lvbmFsIG5hdGl2ZSBhcnJheSB1c2luZyB0aGUgZWxlbWVudHMnCi0v
LyBvcGVyYXRvcj0sIHdoZXJlIGsgY2FuIGJlIGFueSBpbnRlZ2VyID49IDAuICBXaGVuIGsgaXMg
MCwKLS8vIENvcHlBcnJheSgpIGRlZ2VuZXJhdGVzIGludG8gY29weWluZyBhIHNpbmdsZSB2YWx1
ZS4KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci12b2lkIENvcHlBcnJheShj
b25zdCBUKiBmcm9tLCBzaXplX3Qgc2l6ZSwgVSogdG8pOwotCi0vLyBUaGlzIGdlbmVyaWMgdmVy
c2lvbiBpcyB1c2VkIHdoZW4gayBpcyAwLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+Ci1pbmxpbmUgdm9pZCBDb3B5QXJyYXkoY29uc3QgVCYgZnJvbSwgVSogdG8pIHsgKnRvID0g
ZnJvbTsgfQotCi0vLyBUaGlzIG92ZXJsb2FkIGlzIHVzZWQgd2hlbiBrID49IDEuCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgc2l6ZV90IE4+Ci1pbmxpbmUgdm9pZCBDb3B5QXJy
YXkoY29uc3QgVCgmZnJvbSlbTl0sIFUoKnRvKVtOXSkgewotICBpbnRlcm5hbDo6Q29weUFycmF5
KGZyb20sIE4sICp0byk7Ci19Ci0KLS8vIFRoaXMgaGVscGVyIHJlZHVjZXMgY29kZSBibG9hdC4g
IElmIHdlIGluc3RlYWQgcHV0IGl0cyBsb2dpYyBpbnNpZGUKLS8vIHRoZSBwcmV2aW91cyBDb3B5
QXJyYXkoKSBmdW5jdGlvbiwgYXJyYXlzIHdpdGggZGlmZmVyZW50IHNpemVzCi0vLyB3b3VsZCBs
ZWFkIHRvIGRpZmZlcmVudCBjb3BpZXMgb2YgdGhlIHRlbXBsYXRlIGNvZGUuCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLXZvaWQgQ29weUFycmF5KGNvbnN0IFQqIGZyb20sIHNp
emVfdCBzaXplLCBVKiB0bykgewotICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBzaXplOyBpKysp
IHsKLSAgICBpbnRlcm5hbDo6Q29weUFycmF5KGZyb21baV0sIHRvICsgaSk7Ci0gIH0KLX0KLQot
Ly8gVGhlIHJlbGF0aW9uIGJldHdlZW4gYW4gTmF0aXZlQXJyYXkgb2JqZWN0IChzZWUgYmVsb3cp
IGFuZCB0aGUKLS8vIG5hdGl2ZSBhcnJheSBpdCByZXByZXNlbnRzLgotLy8gV2UgdXNlIDIgZGlm
ZmVyZW50IHN0cnVjdHMgdG8gYWxsb3cgbm9uLWNvcHlhYmxlIHR5cGVzIHRvIGJlIHVzZWQsIGFz
IGxvbmcKLS8vIGFzIFJlbGF0aW9uVG9Tb3VyY2VSZWZlcmVuY2UoKSBpcyBwYXNzZWQuCi1zdHJ1
Y3QgUmVsYXRpb25Ub1NvdXJjZVJlZmVyZW5jZSB7fTsKLXN0cnVjdCBSZWxhdGlvblRvU291cmNl
Q29weSB7fTsKLQotLy8gQWRhcHRzIGEgbmF0aXZlIGFycmF5IHRvIGEgcmVhZC1vbmx5IFNUTC1z
dHlsZSBjb250YWluZXIuICBJbnN0ZWFkCi0vLyBvZiB0aGUgY29tcGxldGUgU1RMIGNvbnRhaW5l
ciBjb25jZXB0LCB0aGlzIGFkYXB0b3Igb25seSBpbXBsZW1lbnRzCi0vLyBtZW1iZXJzIHVzZWZ1
bCBmb3IgR29vZ2xlIE1vY2sncyBjb250YWluZXIgbWF0Y2hlcnMuICBOZXcgbWVtYmVycwotLy8g
c2hvdWxkIGJlIGFkZGVkIGFzIG5lZWRlZC4gIFRvIHNpbXBsaWZ5IHRoZSBpbXBsZW1lbnRhdGlv
biwgd2Ugb25seQotLy8gc3VwcG9ydCBFbGVtZW50IGJlaW5nIGEgcmF3IHR5cGUgKGkuZS4gaGF2
aW5nIG5vIHRvcC1sZXZlbCBjb25zdCBvcgotLy8gcmVmZXJlbmNlIG1vZGlmaWVyKS4gIEl0J3Mg
dGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHNhdGlzZnkKLS8vIHRoaXMgcmVxdWlyZW1l
bnQuICBFbGVtZW50IGNhbiBiZSBhbiBhcnJheSB0eXBlIGl0c2VsZiAoaGVuY2UKLS8vIG11bHRp
LWRpbWVuc2lvbmFsIGFycmF5cyBhcmUgc3VwcG9ydGVkKS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBF
bGVtZW50PgotY2xhc3MgTmF0aXZlQXJyYXkgewotIHB1YmxpYzoKLSAgLy8gU1RMLXN0eWxlIGNv
bnRhaW5lciB0eXBlZGVmcy4KLSAgdHlwZWRlZiBFbGVtZW50IHZhbHVlX3R5cGU7Ci0gIHR5cGVk
ZWYgRWxlbWVudCogaXRlcmF0b3I7Ci0gIHR5cGVkZWYgY29uc3QgRWxlbWVudCogY29uc3RfaXRl
cmF0b3I7Ci0KLSAgLy8gQ29uc3RydWN0cyBmcm9tIGEgbmF0aXZlIGFycmF5LiBSZWZlcmVuY2Vz
IHRoZSBzb3VyY2UuCi0gIE5hdGl2ZUFycmF5KGNvbnN0IEVsZW1lbnQqIGFycmF5LCBzaXplX3Qg
Y291bnQsIFJlbGF0aW9uVG9Tb3VyY2VSZWZlcmVuY2UpIHsKLSAgICBJbml0UmVmKGFycmF5LCBj
b3VudCk7Ci0gIH0KLQotICAvLyBDb25zdHJ1Y3RzIGZyb20gYSBuYXRpdmUgYXJyYXkuIENvcGll
cyB0aGUgc291cmNlLgotICBOYXRpdmVBcnJheShjb25zdCBFbGVtZW50KiBhcnJheSwgc2l6ZV90
IGNvdW50LCBSZWxhdGlvblRvU291cmNlQ29weSkgewotICAgIEluaXRDb3B5KGFycmF5LCBjb3Vu
dCk7Ci0gIH0KLQotICAvLyBDb3B5IGNvbnN0cnVjdG9yLgotICBOYXRpdmVBcnJheShjb25zdCBO
YXRpdmVBcnJheSYgcmhzKSB7Ci0gICAgKHRoaXMtPipyaHMuY2xvbmVfKShyaHMuYXJyYXlfLCBy
aHMuc2l6ZV8pOwotICB9Ci0KLSAgfk5hdGl2ZUFycmF5KCkgewotICAgIGlmIChjbG9uZV8gIT0g
Jk5hdGl2ZUFycmF5OjpJbml0UmVmKQotICAgICAgZGVsZXRlW10gYXJyYXlfOwotICB9Ci0KLSAg
Ly8gU1RMLXN0eWxlIGNvbnRhaW5lciBtZXRob2RzLgotICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIHNpemVfOyB9Ci0gIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
YXJyYXlfOyB9Ci0gIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGFycmF5XyAr
IHNpemVfOyB9Ci0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBOYXRpdmVBcnJheSYgcmhzKSBjb25z
dCB7Ci0gICAgcmV0dXJuIHNpemUoKSA9PSByaHMuc2l6ZSgpICYmCi0gICAgICAgIEFycmF5RXEo
YmVnaW4oKSwgc2l6ZSgpLCByaHMuYmVnaW4oKSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGVudW0g
ewotICAgIGtDaGVja1R5cGVJc05vdENvbnN0T3JBUmVmZXJlbmNlID0gU3RhdGljQXNzZXJ0VHlw
ZUVxSGVscGVyPAotICAgICAgICBFbGVtZW50LCBHVEVTVF9SRU1PVkVfUkVGRVJFTkNFX0FORF9D
T05TVF8oRWxlbWVudCk+Ojp2YWx1ZSwKLSAgfTsKLQotICAvLyBJbml0aWFsaXplcyB0aGlzIG9i
amVjdCB3aXRoIGEgY29weSBvZiB0aGUgaW5wdXQuCi0gIHZvaWQgSW5pdENvcHkoY29uc3QgRWxl
bWVudCogYXJyYXksIHNpemVfdCBhX3NpemUpIHsKLSAgICBFbGVtZW50KiBjb25zdCBjb3B5ID0g
bmV3IEVsZW1lbnRbYV9zaXplXTsKLSAgICBDb3B5QXJyYXkoYXJyYXksIGFfc2l6ZSwgY29weSk7
Ci0gICAgYXJyYXlfID0gY29weTsKLSAgICBzaXplXyA9IGFfc2l6ZTsKLSAgICBjbG9uZV8gPSAm
TmF0aXZlQXJyYXk6OkluaXRDb3B5OwotICB9Ci0KLSAgLy8gSW5pdGlhbGl6ZXMgdGhpcyBvYmpl
Y3Qgd2l0aCBhIHJlZmVyZW5jZSBvZiB0aGUgaW5wdXQuCi0gIHZvaWQgSW5pdFJlZihjb25zdCBF
bGVtZW50KiBhcnJheSwgc2l6ZV90IGFfc2l6ZSkgewotICAgIGFycmF5XyA9IGFycmF5OwotICAg
IHNpemVfID0gYV9zaXplOwotICAgIGNsb25lXyA9ICZOYXRpdmVBcnJheTo6SW5pdFJlZjsKLSAg
fQotCi0gIGNvbnN0IEVsZW1lbnQqIGFycmF5XzsKLSAgc2l6ZV90IHNpemVfOwotICB2b2lkIChO
YXRpdmVBcnJheTo6KmNsb25lXykoY29uc3QgRWxlbWVudCosIHNpemVfdCk7Ci0KLSAgR1RFU1Rf
RElTQUxMT1dfQVNTSUdOXyhOYXRpdmVBcnJheSk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgaW50
ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSB0ZXN0aW5nCi0KLSNkZWZpbmUgR1RFU1RfTUVTU0FHRV9B
VF8oZmlsZSwgbGluZSwgbWVzc2FnZSwgcmVzdWx0X3R5cGUpIFwKLSAgOjp0ZXN0aW5nOjppbnRl
cm5hbDo6QXNzZXJ0SGVscGVyKHJlc3VsdF90eXBlLCBmaWxlLCBsaW5lLCBtZXNzYWdlKSBcCi0g
ICAgPSA6OnRlc3Rpbmc6Ok1lc3NhZ2UoKQotCi0jZGVmaW5lIEdURVNUX01FU1NBR0VfKG1lc3Nh
Z2UsIHJlc3VsdF90eXBlKSBcCi0gIEdURVNUX01FU1NBR0VfQVRfKF9fRklMRV9fLCBfX0xJTkVf
XywgbWVzc2FnZSwgcmVzdWx0X3R5cGUpCi0KLSNkZWZpbmUgR1RFU1RfRkFUQUxfRkFJTFVSRV8o
bWVzc2FnZSkgXAotICByZXR1cm4gR1RFU1RfTUVTU0FHRV8obWVzc2FnZSwgOjp0ZXN0aW5nOjpU
ZXN0UGFydFJlc3VsdDo6a0ZhdGFsRmFpbHVyZSkKLQotI2RlZmluZSBHVEVTVF9OT05GQVRBTF9G
QUlMVVJFXyhtZXNzYWdlKSBcCi0gIEdURVNUX01FU1NBR0VfKG1lc3NhZ2UsIDo6dGVzdGluZzo6
VGVzdFBhcnRSZXN1bHQ6OmtOb25GYXRhbEZhaWx1cmUpCi0KLSNkZWZpbmUgR1RFU1RfU1VDQ0VT
U18obWVzc2FnZSkgXAotICBHVEVTVF9NRVNTQUdFXyhtZXNzYWdlLCA6OnRlc3Rpbmc6OlRlc3RQ
YXJ0UmVzdWx0OjprU3VjY2VzcykKLQotLy8gU3VwcHJlc3NlcyBNU1ZDIHdhcm5pbmdzIDQwNzIg
KHVucmVhY2hhYmxlIGNvZGUpIGZvciB0aGUgY29kZSBmb2xsb3dpbmcKLS8vIHN0YXRlbWVudCBp
ZiBpdCByZXR1cm5zIG9yIHRocm93cyAob3IgZG9lc24ndCByZXR1cm4gb3IgdGhyb3cgaW4gc29t
ZQotLy8gc2l0dWF0aW9ucykuCi0jZGVmaW5lIEdURVNUX1NVUFBSRVNTX1VOUkVBQ0hBQkxFX0NP
REVfV0FSTklOR19CRUxPV18oc3RhdGVtZW50KSBcCi0gIGlmICg6OnRlc3Rpbmc6OmludGVybmFs
OjpBbHdheXNUcnVlKCkpIHsgc3RhdGVtZW50OyB9Ci0KLSNkZWZpbmUgR1RFU1RfVEVTVF9USFJP
V18oc3RhdGVtZW50LCBleHBlY3RlZF9leGNlcHRpb24sIGZhaWwpIFwKLSAgR1RFU1RfQU1CSUdV
T1VTX0VMU0VfQkxPQ0tFUl8gXAotICBpZiAoOjp0ZXN0aW5nOjppbnRlcm5hbDo6Q29uc3RDaGFy
UHRyIGd0ZXN0X21zZyA9ICIiKSB7IFwKLSAgICBib29sIGd0ZXN0X2NhdWdodF9leHBlY3RlZCA9
IGZhbHNlOyBcCi0gICAgdHJ5IHsgXAotICAgICAgR1RFU1RfU1VQUFJFU1NfVU5SRUFDSEFCTEVf
Q09ERV9XQVJOSU5HX0JFTE9XXyhzdGF0ZW1lbnQpOyBcCi0gICAgfSBcCi0gICAgY2F0Y2ggKGV4
cGVjdGVkX2V4Y2VwdGlvbiBjb25zdCYpIHsgXAotICAgICAgZ3Rlc3RfY2F1Z2h0X2V4cGVjdGVk
ID0gdHJ1ZTsgXAotICAgIH0gXAotICAgIGNhdGNoICguLi4pIHsgXAotICAgICAgZ3Rlc3RfbXNn
LnZhbHVlID0gXAotICAgICAgICAgICJFeHBlY3RlZDogIiAjc3RhdGVtZW50ICIgdGhyb3dzIGFu
IGV4Y2VwdGlvbiBvZiB0eXBlICIgXAotICAgICAgICAgICNleHBlY3RlZF9leGNlcHRpb24gIi5c
biAgQWN0dWFsOiBpdCB0aHJvd3MgYSBkaWZmZXJlbnQgdHlwZS4iOyBcCi0gICAgICBnb3RvIEdU
RVNUX0NPTkNBVF9UT0tFTl8oZ3Rlc3RfbGFiZWxfdGVzdHRocm93XywgX19MSU5FX18pOyBcCi0g
ICAgfSBcCi0gICAgaWYgKCFndGVzdF9jYXVnaHRfZXhwZWN0ZWQpIHsgXAotICAgICAgZ3Rlc3Rf
bXNnLnZhbHVlID0gXAotICAgICAgICAgICJFeHBlY3RlZDogIiAjc3RhdGVtZW50ICIgdGhyb3dz
IGFuIGV4Y2VwdGlvbiBvZiB0eXBlICIgXAotICAgICAgICAgICNleHBlY3RlZF9leGNlcHRpb24g
Ii5cbiAgQWN0dWFsOiBpdCB0aHJvd3Mgbm90aGluZy4iOyBcCi0gICAgICBnb3RvIEdURVNUX0NP
TkNBVF9UT0tFTl8oZ3Rlc3RfbGFiZWxfdGVzdHRocm93XywgX19MSU5FX18pOyBcCi0gICAgfSBc
Ci0gIH0gZWxzZSBcCi0gICAgR1RFU1RfQ09OQ0FUX1RPS0VOXyhndGVzdF9sYWJlbF90ZXN0dGhy
b3dfLCBfX0xJTkVfXyk6IFwKLSAgICAgIGZhaWwoZ3Rlc3RfbXNnLnZhbHVlKQotCi0jZGVmaW5l
IEdURVNUX1RFU1RfTk9fVEhST1dfKHN0YXRlbWVudCwgZmFpbCkgXAotICBHVEVTVF9BTUJJR1VP
VVNfRUxTRV9CTE9DS0VSXyBcCi0gIGlmICg6OnRlc3Rpbmc6OmludGVybmFsOjpBbHdheXNUcnVl
KCkpIHsgXAotICAgIHRyeSB7IFwKLSAgICAgIEdURVNUX1NVUFBSRVNTX1VOUkVBQ0hBQkxFX0NP
REVfV0FSTklOR19CRUxPV18oc3RhdGVtZW50KTsgXAotICAgIH0gXAotICAgIGNhdGNoICguLi4p
IHsgXAotICAgICAgZ290byBHVEVTVF9DT05DQVRfVE9LRU5fKGd0ZXN0X2xhYmVsX3Rlc3Rub3Ro
cm93XywgX19MSU5FX18pOyBcCi0gICAgfSBcCi0gIH0gZWxzZSBcCi0gICAgR1RFU1RfQ09OQ0FU
X1RPS0VOXyhndGVzdF9sYWJlbF90ZXN0bm90aHJvd18sIF9fTElORV9fKTogXAotICAgICAgZmFp
bCgiRXhwZWN0ZWQ6ICIgI3N0YXRlbWVudCAiIGRvZXNuJ3QgdGhyb3cgYW4gZXhjZXB0aW9uLlxu
IiBcCi0gICAgICAgICAgICIgIEFjdHVhbDogaXQgdGhyb3dzLiIpCi0KLSNkZWZpbmUgR1RFU1Rf
VEVTVF9BTllfVEhST1dfKHN0YXRlbWVudCwgZmFpbCkgXAotICBHVEVTVF9BTUJJR1VPVVNfRUxT
RV9CTE9DS0VSXyBcCi0gIGlmICg6OnRlc3Rpbmc6OmludGVybmFsOjpBbHdheXNUcnVlKCkpIHsg
XAotICAgIGJvb2wgZ3Rlc3RfY2F1Z2h0X2FueSA9IGZhbHNlOyBcCi0gICAgdHJ5IHsgXAotICAg
ICAgR1RFU1RfU1VQUFJFU1NfVU5SRUFDSEFCTEVfQ09ERV9XQVJOSU5HX0JFTE9XXyhzdGF0ZW1l
bnQpOyBcCi0gICAgfSBcCi0gICAgY2F0Y2ggKC4uLikgeyBcCi0gICAgICBndGVzdF9jYXVnaHRf
YW55ID0gdHJ1ZTsgXAotICAgIH0gXAotICAgIGlmICghZ3Rlc3RfY2F1Z2h0X2FueSkgeyBcCi0g
ICAgICBnb3RvIEdURVNUX0NPTkNBVF9UT0tFTl8oZ3Rlc3RfbGFiZWxfdGVzdGFueXRocm93Xywg
X19MSU5FX18pOyBcCi0gICAgfSBcCi0gIH0gZWxzZSBcCi0gICAgR1RFU1RfQ09OQ0FUX1RPS0VO
XyhndGVzdF9sYWJlbF90ZXN0YW55dGhyb3dfLCBfX0xJTkVfXyk6IFwKLSAgICAgIGZhaWwoIkV4
cGVjdGVkOiAiICNzdGF0ZW1lbnQgIiB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuIiBcCi0gICAgICAg
ICAgICIgIEFjdHVhbDogaXQgZG9lc24ndC4iKQotCi0KLS8vIEltcGxlbWVudHMgQm9vbGVhbiB0
ZXN0IGFzc2VydGlvbnMgc3VjaCBhcyBFWFBFQ1RfVFJVRS4gZXhwcmVzc2lvbiBjYW4gYmUKLS8v
IGVpdGhlciBhIGJvb2xlYW4gZXhwcmVzc2lvbiBvciBhbiBBc3NlcnRpb25SZXN1bHQuIHRleHQg
aXMgYSB0ZXh0dWFsCi0vLyByZXByZXNlbmF0aW9uIG9mIGV4cHJlc3Npb24gYXMgaXQgd2FzIHBh
c3NlZCBpbnRvIHRoZSBFWFBFQ1RfVFJVRS4KLSNkZWZpbmUgR1RFU1RfVEVTVF9CT09MRUFOXyhl
eHByZXNzaW9uLCB0ZXh0LCBhY3R1YWwsIGV4cGVjdGVkLCBmYWlsKSBcCi0gIEdURVNUX0FNQklH
VU9VU19FTFNFX0JMT0NLRVJfIFwKLSAgaWYgKGNvbnN0IDo6dGVzdGluZzo6QXNzZXJ0aW9uUmVz
dWx0IGd0ZXN0X2FyXyA9IFwKLSAgICAgIDo6dGVzdGluZzo6QXNzZXJ0aW9uUmVzdWx0KGV4cHJl
c3Npb24pKSBcCi0gICAgOyBcCi0gIGVsc2UgXAotICAgIGZhaWwoOjp0ZXN0aW5nOjppbnRlcm5h
bDo6R2V0Qm9vbEFzc2VydGlvbkZhaWx1cmVNZXNzYWdlKFwKLSAgICAgICAgZ3Rlc3RfYXJfLCB0
ZXh0LCAjYWN0dWFsLCAjZXhwZWN0ZWQpLmNfc3RyKCkpCi0KLSNkZWZpbmUgR1RFU1RfVEVTVF9O
T19GQVRBTF9GQUlMVVJFXyhzdGF0ZW1lbnQsIGZhaWwpIFwKLSAgR1RFU1RfQU1CSUdVT1VTX0VM
U0VfQkxPQ0tFUl8gXAotICBpZiAoOjp0ZXN0aW5nOjppbnRlcm5hbDo6QWx3YXlzVHJ1ZSgpKSB7
IFwKLSAgICA6OnRlc3Rpbmc6OmludGVybmFsOjpIYXNOZXdGYXRhbEZhaWx1cmVIZWxwZXIgZ3Rl
c3RfZmF0YWxfZmFpbHVyZV9jaGVja2VyOyBcCi0gICAgR1RFU1RfU1VQUFJFU1NfVU5SRUFDSEFC
TEVfQ09ERV9XQVJOSU5HX0JFTE9XXyhzdGF0ZW1lbnQpOyBcCi0gICAgaWYgKGd0ZXN0X2ZhdGFs
X2ZhaWx1cmVfY2hlY2tlci5oYXNfbmV3X2ZhdGFsX2ZhaWx1cmUoKSkgeyBcCi0gICAgICBnb3Rv
IEdURVNUX0NPTkNBVF9UT0tFTl8oZ3Rlc3RfbGFiZWxfdGVzdG5vZmF0YWxfLCBfX0xJTkVfXyk7
IFwKLSAgICB9IFwKLSAgfSBlbHNlIFwKLSAgICBHVEVTVF9DT05DQVRfVE9LRU5fKGd0ZXN0X2xh
YmVsX3Rlc3Rub2ZhdGFsXywgX19MSU5FX18pOiBcCi0gICAgICBmYWlsKCJFeHBlY3RlZDogIiAj
c3RhdGVtZW50ICIgZG9lc24ndCBnZW5lcmF0ZSBuZXcgZmF0YWwgIiBcCi0gICAgICAgICAgICJm
YWlsdXJlcyBpbiB0aGUgY3VycmVudCB0aHJlYWQuXG4iIFwKLSAgICAgICAgICAgIiAgQWN0dWFs
OiBpdCBkb2VzLiIpCi0KLS8vIEV4cGFuZHMgdG8gdGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRoYXQg
aW1wbGVtZW50cyB0aGUgZ2l2ZW4gdGVzdC4KLSNkZWZpbmUgR1RFU1RfVEVTVF9DTEFTU19OQU1F
Xyh0ZXN0X2Nhc2VfbmFtZSwgdGVzdF9uYW1lKSBcCi0gIHRlc3RfY2FzZV9uYW1lIyNfIyN0ZXN0
X25hbWUjI19UZXN0Ci0KLS8vIEhlbHBlciBtYWNybyBmb3IgZGVmaW5pbmcgdGVzdHMuCi0jZGVm
aW5lIEdURVNUX1RFU1RfKHRlc3RfY2FzZV9uYW1lLCB0ZXN0X25hbWUsIHBhcmVudF9jbGFzcywg
cGFyZW50X2lkKVwKLWNsYXNzIEdURVNUX1RFU1RfQ0xBU1NfTkFNRV8odGVzdF9jYXNlX25hbWUs
IHRlc3RfbmFtZSkgOiBwdWJsaWMgcGFyZW50X2NsYXNzIHtcCi0gcHVibGljOlwKLSAgR1RFU1Rf
VEVTVF9DTEFTU19OQU1FXyh0ZXN0X2Nhc2VfbmFtZSwgdGVzdF9uYW1lKSgpIHt9XAotIHByaXZh
dGU6XAotICB2aXJ0dWFsIHZvaWQgVGVzdEJvZHkoKTtcCi0gIHN0YXRpYyA6OnRlc3Rpbmc6OlRl
c3RJbmZvKiBjb25zdCB0ZXN0X2luZm9fIEdURVNUX0FUVFJJQlVURV9VTlVTRURfO1wKLSAgR1RF
U1RfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOXyhcCi0gICAgICBHVEVTVF9URVNUX0NMQVNTX05B
TUVfKHRlc3RfY2FzZV9uYW1lLCB0ZXN0X25hbWUpKTtcCi19O1wKLVwKLTo6dGVzdGluZzo6VGVz
dEluZm8qIGNvbnN0IEdURVNUX1RFU1RfQ0xBU1NfTkFNRV8odGVzdF9jYXNlX25hbWUsIHRlc3Rf
bmFtZSlcCi0gIDo6dGVzdF9pbmZvXyA9XAotICAgIDo6dGVzdGluZzo6aW50ZXJuYWw6Ok1ha2VB
bmRSZWdpc3RlclRlc3RJbmZvKFwKLSAgICAgICAgI3Rlc3RfY2FzZV9uYW1lLCAjdGVzdF9uYW1l
LCBOVUxMLCBOVUxMLCBcCi0gICAgICAgIDo6dGVzdGluZzo6aW50ZXJuYWw6OkNvZGVMb2NhdGlv
bihfX0ZJTEVfXywgX19MSU5FX18pLCBcCi0gICAgICAgIChwYXJlbnRfaWQpLCBcCi0gICAgICAg
IHBhcmVudF9jbGFzczo6U2V0VXBUZXN0Q2FzZSwgXAotICAgICAgICBwYXJlbnRfY2xhc3M6OlRl
YXJEb3duVGVzdENhc2UsIFwKLSAgICAgICAgbmV3IDo6dGVzdGluZzo6aW50ZXJuYWw6OlRlc3RG
YWN0b3J5SW1wbDxcCi0gICAgICAgICAgICBHVEVTVF9URVNUX0NMQVNTX05BTUVfKHRlc3RfY2Fz
ZV9uYW1lLCB0ZXN0X25hbWUpPik7XAotdm9pZCBHVEVTVF9URVNUX0NMQVNTX05BTUVfKHRlc3Rf
Y2FzZV9uYW1lLCB0ZXN0X25hbWUpOjpUZXN0Qm9keSgpCi0KLSNlbmRpZiAgLy8gR1RFU1RfSU5D
TFVERV9HVEVTVF9JTlRFUk5BTF9HVEVTVF9JTlRFUk5BTF9IXwotCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUv
Z3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtbGlua2VkX3B0ci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2d0
ZXN0LWxpbmtlZF9wdHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYwMjk0MjIx
NzRmMjE1ODQ4NjgxZGIxMTEwYmNkYjIzNTM4YTEyZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtbGlua2VkX3B0
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDAzIEdv
b2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0v
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0v
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLy8KLS8vIEF1dGhvcnM6IERhbiBFZ25vciAoZWdub3JA
Z29vZ2xlLmNvbSkKLS8vCi0vLyBBICJzbWFydCIgcG9pbnRlciB0eXBlIHdpdGggcmVmZXJlbmNl
IHRyYWNraW5nLiAgRXZlcnkgcG9pbnRlciB0byBhCi0vLyBwYXJ0aWN1bGFyIG9iamVjdCBpcyBr
ZXB0IG9uIGEgY2lyY3VsYXIgbGlua2VkIGxpc3QuICBXaGVuIHRoZSBsYXN0IHBvaW50ZXIKLS8v
IHRvIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQgb3IgcmVhc3NpZ25lZCwgdGhlIG9iamVjdCBpcyBk
ZWxldGVkLgotLy8KLS8vIFVzZWQgcHJvcGVybHksIHRoaXMgZGVsZXRlcyB0aGUgb2JqZWN0IHdo
ZW4gdGhlIGxhc3QgcmVmZXJlbmNlIGdvZXMgYXdheS4KLS8vIFRoZXJlIGFyZSBzZXZlcmFsIGNh
dmVhdHM6Ci0vLyAtIExpa2UgYWxsIHJlZmVyZW5jZSBjb3VudGluZyBzY2hlbWVzLCBjeWNsZXMg
bGVhZCB0byBsZWFrcy4KLS8vIC0gRWFjaCBzbWFydCBwb2ludGVyIGlzIGFjdHVhbGx5IHR3byBw
b2ludGVycyAoOCBieXRlcyBpbnN0ZWFkIG9mIDQpLgotLy8gLSBFdmVyeSB0aW1lIGEgcG9pbnRl
ciBpcyBhc3NpZ25lZCwgdGhlIGVudGlyZSBsaXN0IG9mIHBvaW50ZXJzIHRvIHRoYXQKLS8vICAg
b2JqZWN0IGlzIHRyYXZlcnNlZC4gIFRoaXMgY2xhc3MgaXMgdGhlcmVmb3JlIE5PVCBTVUlUQUJM
RSB3aGVuIHRoZXJlCi0vLyAgIHdpbGwgb2Z0ZW4gYmUgbW9yZSB0aGFuIHR3byBvciB0aHJlZSBw
b2ludGVycyB0byBhIHBhcnRpY3VsYXIgb2JqZWN0LgotLy8gLSBSZWZlcmVuY2VzIGFyZSBvbmx5
IHRyYWNrZWQgYXMgbG9uZyBhcyBsaW5rZWRfcHRyPD4gb2JqZWN0cyBhcmUgY29waWVkLgotLy8g
ICBJZiBhIGxpbmtlZF9wdHI8PiBpcyBjb252ZXJ0ZWQgdG8gYSByYXcgcG9pbnRlciBhbmQgYmFj
aywgQkFEIFRISU5HUwotLy8gICB3aWxsIGhhcHBlbiAoZG91YmxlIGRlbGV0aW9uKS4KLS8vCi0v
LyBBIGdvb2QgdXNlIG9mIHRoaXMgY2xhc3MgaXMgc3RvcmluZyBvYmplY3QgcmVmZXJlbmNlcyBp
biBTVEwgY29udGFpbmVycy4KLS8vIFlvdSBjYW4gc2FmZWx5IHB1dCBsaW5rZWRfcHRyPD4gaW4g
YSB2ZWN0b3I8Pi4KLS8vIE90aGVyIHVzZXMgbWF5IG5vdCBiZSBhcyBnb29kLgotLy8KLS8vIE5v
dGU6IElmIHlvdSB1c2UgYW4gaW5jb21wbGV0ZSB0eXBlIHdpdGggbGlua2VkX3B0cjw+LCB0aGUg
Y2xhc3MKLS8vICpjb250YWluaW5nKiBsaW5rZWRfcHRyPD4gbXVzdCBoYXZlIGEgY29uc3RydWN0
b3IgYW5kIGRlc3RydWN0b3IgKGV2ZW4KLS8vIGlmIHRoZXkgZG8gbm90aGluZyEpLgotLy8KLS8v
IEJpbGwgR2liYm9ucyBzdWdnZXN0ZWQgd2UgdXNlIHNvbWV0aGluZyBsaWtlIHRoaXMuCi0vLwot
Ly8gVGhyZWFkIFNhZmV0eToKLS8vICAgVW5saWtlIG90aGVyIGxpbmtlZF9wdHIgaW1wbGVtZW50
YXRpb25zLCBpbiB0aGlzIGltcGxlbWVudGF0aW9uCi0vLyAgIGEgbGlua2VkX3B0ciBvYmplY3Qg
aXMgdGhyZWFkLXNhZmUgaW4gdGhlIHNlbnNlIHRoYXQ6Ci0vLyAgICAgLSBpdCdzIHNhZmUgdG8g
Y29weSBsaW5rZWRfcHRyIG9iamVjdHMgY29uY3VycmVudGx5LAotLy8gICAgIC0gaXQncyBzYWZl
IHRvIGNvcHkgKmZyb20qIGEgbGlua2VkX3B0ciBhbmQgcmVhZCBpdHMgdW5kZXJseWluZwotLy8g
ICAgICAgcmF3IHBvaW50ZXIgKGUuZy4gdmlhIGdldCgpKSBjb25jdXJyZW50bHksIGFuZAotLy8g
ICAgIC0gaXQncyBzYWZlIHRvIHdyaXRlIHRvIHR3byBsaW5rZWRfcHRycyB0aGF0IHBvaW50IHRv
IHRoZSBzYW1lCi0vLyAgICAgICBzaGFyZWQgb2JqZWN0IGNvbmN1cnJlbnRseS4KLS8vIFRPRE8o
d2FuQGdvb2dsZS5jb20pOiByZW5hbWUgdGhpcyB0byBzYWZlX2xpbmtlZF9wdHIgdG8gYXZvaWQK
LS8vIGNvbmZ1c2lvbiB3aXRoIG5vcm1hbCBsaW5rZWRfcHRyLgotCi0jaWZuZGVmIEdURVNUX0lO
Q0xVREVfR1RFU1RfSU5URVJOQUxfR1RFU1RfTElOS0VEX1BUUl9IXwotI2RlZmluZSBHVEVTVF9J
TkNMVURFX0dURVNUX0lOVEVSTkFMX0dURVNUX0xJTktFRF9QVFJfSF8KLQotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotCi0jaW5jbHVkZSAiZ3Rlc3QvaW50ZXJuYWwv
Z3Rlc3QtcG9ydC5oIgotCi1uYW1lc3BhY2UgdGVzdGluZyB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwg
ewotCi0vLyBQcm90ZWN0cyBjb3B5aW5nIG9mIGFsbCBsaW5rZWRfcHRyIG9iamVjdHMuCi1HVEVT
VF9BUElfIEdURVNUX0RFQ0xBUkVfU1RBVElDX01VVEVYXyhnX2xpbmtlZF9wdHJfbXV0ZXgpOwot
Ci0vLyBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSBhbGwgaW5zdGFuY2VzIG9mIGxpbmtlZF9w
dHI8Pi4gIEl0IG5lZWRzIHRvIGJlCi0vLyBhIG5vbi10ZW1wbGF0ZSBjbGFzcyBiZWNhdXNlIGRp
ZmZlcmVudCB0eXBlcyBvZiBsaW5rZWRfcHRyPD4gY2FuIHJlZmVyIHRvCi0vLyB0aGUgc2FtZSBv
YmplY3QgKGxpbmtlZF9wdHI8U3VwZXJjbGFzcz4ob2JqKSB2cyBsaW5rZWRfcHRyPFN1YmNsYXNz
PihvYmopKS4KLS8vIFNvLCBpdCBuZWVkcyB0byBiZSBwb3NzaWJsZSBmb3IgZGlmZmVyZW50IHR5
cGVzIG9mIGxpbmtlZF9wdHIgdG8gcGFydGljaXBhdGUKLS8vIGluIHRoZSBzYW1lIGNpcmN1bGFy
IGxpbmtlZCBsaXN0LCBzbyB3ZSBuZWVkIGEgc2luZ2xlIGNsYXNzIHR5cGUgaGVyZS4KLS8vCi0v
LyBETyBOT1QgVVNFIFRISVMgQ0xBU1MgRElSRUNUTFkgWU9VUlNFTEYuICBVc2UgbGlua2VkX3B0
cjxUPi4KLWNsYXNzIGxpbmtlZF9wdHJfaW50ZXJuYWwgewotIHB1YmxpYzoKLSAgLy8gQ3JlYXRl
IGEgbmV3IGNpcmNsZSB0aGF0IGluY2x1ZGVzIG9ubHkgdGhpcyBpbnN0YW5jZS4KLSAgdm9pZCBq
b2luX25ldygpIHsKLSAgICBuZXh0XyA9IHRoaXM7Ci0gIH0KLQotICAvLyBNYW55IGxpbmtlZF9w
dHIgb3BlcmF0aW9ucyBtYXkgY2hhbmdlIHAubGlua18gZm9yIHNvbWUgbGlua2VkX3B0cgotICAv
LyB2YXJpYWJsZSBwIGluIHRoZSBzYW1lIGNpcmNsZSBhcyB0aGlzIG9iamVjdC4gIFRoZXJlZm9y
ZSB3ZSBuZWVkCi0gIC8vIHRvIHByZXZlbnQgdHdvIHN1Y2ggb3BlcmF0aW9ucyBmcm9tIG9jY3Vy
cmluZyBjb25jdXJyZW50bHkuCi0gIC8vCi0gIC8vIE5vdGUgdGhhdCBkaWZmZXJlbnQgdHlwZXMg
b2YgbGlua2VkX3B0ciBvYmplY3RzIGNhbiBjb2V4aXN0IGluIGEKLSAgLy8gY2lyY2xlIChlLmcu
IGxpbmtlZF9wdHI8QmFzZT4sIGxpbmtlZF9wdHI8RGVyaXZlZDE+LCBhbmQKLSAgLy8gbGlua2Vk
X3B0cjxEZXJpdmVkMj4pLiAgVGhlcmVmb3JlIHdlIG11c3QgdXNlIGEgc2luZ2xlIG11dGV4IHRv
Ci0gIC8vIHByb3RlY3QgYWxsIGxpbmtlZF9wdHIgb2JqZWN0cy4gIFRoaXMgY2FuIGNyZWF0ZSBz
ZXJpb3VzCi0gIC8vIGNvbnRlbnRpb24gaW4gcHJvZHVjdGlvbiBjb2RlLCBidXQgaXMgYWNjZXB0
YWJsZSBpbiBhIHRlc3RpbmcKLSAgLy8gZnJhbWV3b3JrLgotCi0gIC8vIEpvaW4gYW4gZXhpc3Rp
bmcgY2lyY2xlLgotICB2b2lkIGpvaW4obGlua2VkX3B0cl9pbnRlcm5hbCBjb25zdCogcHRyKQot
ICAgICAgR1RFU1RfTE9DS19FWENMVURFRF8oZ19saW5rZWRfcHRyX211dGV4KSB7Ci0gICAgTXV0
ZXhMb2NrIGxvY2soJmdfbGlua2VkX3B0cl9tdXRleCk7Ci0KLSAgICBsaW5rZWRfcHRyX2ludGVy
bmFsIGNvbnN0KiBwID0gcHRyOwotICAgIHdoaWxlIChwLT5uZXh0XyAhPSBwdHIpIHsKLSAgICAg
IGFzc2VydChwLT5uZXh0XyAhPSB0aGlzICYmCi0gICAgICAgICAgICAgIlRyeWluZyB0byBqb2lu
KCkgYSBsaW5rZWQgcmluZyB3ZSBhcmUgYWxyZWFkeSBpbi4gIgotICAgICAgICAgICAgICJJcyBH
TW9jayB0aHJlYWQgc2FmZXR5IGVuYWJsZWQ/Iik7Ci0gICAgICBwID0gcC0+bmV4dF87Ci0gICAg
fQotICAgIHAtPm5leHRfID0gdGhpczsKLSAgICBuZXh0XyA9IHB0cjsKLSAgfQotCi0gIC8vIExl
YXZlIHdoYXRldmVyIGNpcmNsZSB3ZSdyZSBwYXJ0IG9mLiAgUmV0dXJucyB0cnVlIGlmIHdlIHdl
cmUgdGhlCi0gIC8vIGxhc3QgbWVtYmVyIG9mIHRoZSBjaXJjbGUuICBPbmNlIHRoaXMgaXMgZG9u
ZSwgeW91IGNhbiBqb2luKCkgYW5vdGhlci4KLSAgYm9vbCBkZXBhcnQoKQotICAgICAgR1RFU1Rf
TE9DS19FWENMVURFRF8oZ19saW5rZWRfcHRyX211dGV4KSB7Ci0gICAgTXV0ZXhMb2NrIGxvY2so
JmdfbGlua2VkX3B0cl9tdXRleCk7Ci0KLSAgICBpZiAobmV4dF8gPT0gdGhpcykgcmV0dXJuIHRy
dWU7Ci0gICAgbGlua2VkX3B0cl9pbnRlcm5hbCBjb25zdCogcCA9IG5leHRfOwotICAgIHdoaWxl
IChwLT5uZXh0XyAhPSB0aGlzKSB7Ci0gICAgICBhc3NlcnQocC0+bmV4dF8gIT0gbmV4dF8gJiYK
LSAgICAgICAgICAgICAiVHJ5aW5nIHRvIGRlcGFydCgpIGEgbGlua2VkIHJpbmcgd2UgYXJlIG5v
dCBpbi4gIgotICAgICAgICAgICAgICJJcyBHTW9jayB0aHJlYWQgc2FmZXR5IGVuYWJsZWQ/Iik7
Ci0gICAgICBwID0gcC0+bmV4dF87Ci0gICAgfQotICAgIHAtPm5leHRfID0gbmV4dF87Ci0gICAg
cmV0dXJuIGZhbHNlOwotICB9Ci0KLSBwcml2YXRlOgotICBtdXRhYmxlIGxpbmtlZF9wdHJfaW50
ZXJuYWwgY29uc3QqIG5leHRfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBs
aW5rZWRfcHRyIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgVCBlbGVtZW50X3R5cGU7Ci0KLSAgLy8g
VGFrZSBvdmVyIG93bmVyc2hpcCBvZiBhIHJhdyBwb2ludGVyLiAgVGhpcyBzaG91bGQgaGFwcGVu
IGFzIHNvb24gYXMKLSAgLy8gcG9zc2libGUgYWZ0ZXIgdGhlIG9iamVjdCBpcyBjcmVhdGVkLgot
ICBleHBsaWNpdCBsaW5rZWRfcHRyKFQqIHB0ciA9IE5VTEwpIHsgY2FwdHVyZShwdHIpOyB9Ci0g
IH5saW5rZWRfcHRyKCkgeyBkZXBhcnQoKTsgfQotCi0gIC8vIENvcHkgYW4gZXhpc3RpbmcgbGlu
a2VkX3B0cjw+LCBhZGRpbmcgb3Vyc2VsdmVzIHRvIHRoZSBsaXN0IG9mIHJlZmVyZW5jZXMuCi0g
IHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBsaW5rZWRfcHRyKGxpbmtlZF9wdHI8VT4gY29uc3QmIHB0
cikgeyBjb3B5KCZwdHIpOyB9Ci0gIGxpbmtlZF9wdHIobGlua2VkX3B0ciBjb25zdCYgcHRyKSB7
ICAvLyBOT0xJTlQKLSAgICBhc3NlcnQoJnB0ciAhPSB0aGlzKTsKLSAgICBjb3B5KCZwdHIpOwot
ICB9Ci0KLSAgLy8gQXNzaWdubWVudCByZWxlYXNlcyB0aGUgb2xkIHZhbHVlIGFuZCBhY3F1aXJl
cyB0aGUgbmV3LgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gbGlua2VkX3B0ciYgb3BlcmF0b3I9
KGxpbmtlZF9wdHI8VT4gY29uc3QmIHB0cikgewotICAgIGRlcGFydCgpOwotICAgIGNvcHkoJnB0
cik7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgbGlua2VkX3B0ciYgb3BlcmF0b3I9KGxp
bmtlZF9wdHIgY29uc3QmIHB0cikgewotICAgIGlmICgmcHRyICE9IHRoaXMpIHsKLSAgICAgIGRl
cGFydCgpOwotICAgICAgY29weSgmcHRyKTsKLSAgICB9Ci0gICAgcmV0dXJuICp0aGlzOwotICB9
Ci0KLSAgLy8gU21hcnQgcG9pbnRlciBtZW1iZXJzLgotICB2b2lkIHJlc2V0KFQqIHB0ciA9IE5V
TEwpIHsKLSAgICBkZXBhcnQoKTsKLSAgICBjYXB0dXJlKHB0cik7Ci0gIH0KLSAgVCogZ2V0KCkg
Y29uc3QgeyByZXR1cm4gdmFsdWVfOyB9Ci0gIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biB2YWx1ZV87IH0KLSAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKnZhbHVlXzsgfQot
Ci0gIGJvb2wgb3BlcmF0b3I9PShUKiBwKSBjb25zdCB7IHJldHVybiB2YWx1ZV8gPT0gcDsgfQot
ICBib29sIG9wZXJhdG9yIT0oVCogcCkgY29uc3QgeyByZXR1cm4gdmFsdWVfICE9IHA7IH0KLSAg
dGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gIGJvb2wgb3BlcmF0b3I9PShsaW5rZWRfcHRyPFU+IGNv
bnN0JiBwdHIpIGNvbnN0IHsKLSAgICByZXR1cm4gdmFsdWVfID09IHB0ci5nZXQoKTsKLSAgfQot
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgYm9vbCBvcGVyYXRvciE9KGxpbmtlZF9wdHI8VT4g
Y29uc3QmIHB0cikgY29uc3QgewotICAgIHJldHVybiB2YWx1ZV8gIT0gcHRyLmdldCgpOwotICB9
Ci0KLSBwcml2YXRlOgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgZnJpZW5kIGNsYXNzIGxp
bmtlZF9wdHI7Ci0KLSAgVCogdmFsdWVfOwotICBsaW5rZWRfcHRyX2ludGVybmFsIGxpbmtfOwot
Ci0gIHZvaWQgZGVwYXJ0KCkgewotICAgIGlmIChsaW5rXy5kZXBhcnQoKSkgZGVsZXRlIHZhbHVl
XzsKLSAgfQotCi0gIHZvaWQgY2FwdHVyZShUKiBwdHIpIHsKLSAgICB2YWx1ZV8gPSBwdHI7Ci0g
ICAgbGlua18uam9pbl9uZXcoKTsKLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiB2b2lk
IGNvcHkobGlua2VkX3B0cjxVPiBjb25zdCogcHRyKSB7Ci0gICAgdmFsdWVfID0gcHRyLT5nZXQo
KTsKLSAgICBpZiAodmFsdWVfKQotICAgICAgbGlua18uam9pbigmcHRyLT5saW5rXyk7Ci0gICAg
ZWxzZQotICAgICAgbGlua18uam9pbl9uZXcoKTsKLSAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lCi1ib29sIG9wZXJhdG9yPT0oVCogcHRyLCBjb25zdCBsaW5rZWRfcHRyPFQ+
JiB4KSB7Ci0gIHJldHVybiBwdHIgPT0geC5nZXQoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lCi1ib29sIG9wZXJhdG9yIT0oVCogcHRyLCBjb25zdCBsaW5rZWRfcHRyPFQ+JiB4
KSB7Ci0gIHJldHVybiBwdHIgIT0geC5nZXQoKTsKLX0KLQotLy8gQSBmdW5jdGlvbiB0byBjb252
ZXJ0IFQqIGludG8gbGlua2VkX3B0cjxUPgotLy8gRG9pbmcgZS5nLiBtYWtlX2xpbmtlZF9wdHIo
bmV3IEZvb0JhckJhejx0eXBlPihhcmcpKSBpcyBhIHNob3J0ZXIgbm90YXRpb24KLS8vIGZvciBs
aW5rZWRfcHRyPEZvb0JhckJhejx0eXBlPiA+KG5ldyBGb29CYXJCYXo8dHlwZT4oYXJnKSkKLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotbGlua2VkX3B0cjxUPiBtYWtlX2xpbmtlZF9wdHIoVCogcHRy
KSB7Ci0gIHJldHVybiBsaW5rZWRfcHRyPFQ+KHB0cik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBp
bnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKLQotI2VuZGlmICAvLyBHVEVTVF9JTkNM
VURFX0dURVNUX0lOVEVSTkFMX0dURVNUX0xJTktFRF9QVFJfSF8KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVkZS9n
dGVzdC9pbnRlcm5hbC9ndGVzdC1wYXJhbS11dGlsLWdlbmVyYXRlZC5oIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2lu
dGVybmFsL2d0ZXN0LXBhcmFtLXV0aWwtZ2VuZXJhdGVkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDRkMWQ4MWQyMGZmY2EzMmJhOGY5NTc3ZmY1YmQwNmJmZTJkZTc0NjMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2ludGVy
bmFsL2d0ZXN0LXBhcmFtLXV0aWwtZ2VuZXJhdGVkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MTQ2
ICswLDAgQEAKLS8vIFRoaXMgZmlsZSB3YXMgR0VORVJBVEVEIGJ5IGNvbW1hbmQ6Ci0vLyAgICAg
cHVtcC5weSBndGVzdC1wYXJhbS11dGlsLWdlbmVyYXRlZC5oLnB1bXAKLS8vIERPIE5PVCBFRElU
IEJZIEhBTkQhISEKLQotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KLS8vIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6
Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8K
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0vLwotLy8gQXV0aG9yOiB2bGFkbEBnb29nbGUuY29tIChWbGFkIExvc2V2KQotCi0vLyBUeXBl
IGFuZCBmdW5jdGlvbiB1dGlsaXRpZXMgZm9yIGltcGxlbWVudGluZyBwYXJhbWV0ZXJpemVkIHRl
c3RzLgotLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBhIFNDUklQVC4gIERPIE5PVCBFRElU
IEJZIEhBTkQhCi0vLwotLy8gQ3VycmVudGx5IEdvb2dsZSBUZXN0IHN1cHBvcnRzIGF0IG1vc3Qg
NTAgYXJndW1lbnRzIGluIFZhbHVlcywKLS8vIGFuZCBhdCBtb3N0IDEwIGFyZ3VtZW50cyBpbiBD
b21iaW5lLiBQbGVhc2UgY29udGFjdAotLy8gZ29vZ2xldGVzdGZyYW1ld29ya0Bnb29nbGVncm91
cHMuY29tIGlmIHlvdSBuZWVkIG1vcmUuCi0vLyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBudW1iZXIg
b2YgYXJndW1lbnRzIHRvIENvbWJpbmUgaXMgbGltaXRlZAotLy8gYnkgdGhlIG1heGltdW0gYXJp
dHkgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHR1cGxlIHdoaWNoIGlzCi0vLyBjdXJyZW50bHkg
c2V0IGF0IDEwLgotCi0jaWZuZGVmIEdURVNUX0lOQ0xVREVfR1RFU1RfSU5URVJOQUxfR1RFU1Rf
UEFSQU1fVVRJTF9HRU5FUkFURURfSF8KLSNkZWZpbmUgR1RFU1RfSU5DTFVERV9HVEVTVF9JTlRF
Uk5BTF9HVEVTVF9QQVJBTV9VVElMX0dFTkVSQVRFRF9IXwotCi0vLyBzY3JpcHRzL2Z1c2VfZ3Rl
c3QucHkgZGVwZW5kcyBvbiBndGVzdCdzIG93biBoZWFkZXIgYmVpbmcgI2luY2x1ZGVkCi0vLyAq
dW5jb25kaXRpb25hbGx5Ki4gIFRoZXJlZm9yZSB0aGVzZSAjaW5jbHVkZXMgY2Fubm90IGJlIG1v
dmVkCi0vLyBpbnNpZGUgI2lmIEdURVNUX0hBU19QQVJBTV9URVNULgotI2luY2x1ZGUgImd0ZXN0
L2ludGVybmFsL2d0ZXN0LXBhcmFtLXV0aWwuaCIKLSNpbmNsdWRlICJndGVzdC9pbnRlcm5hbC9n
dGVzdC1wb3J0LmgiCi0KLSNpZiBHVEVTVF9IQVNfUEFSQU1fVEVTVAotCi1uYW1lc3BhY2UgdGVz
dGluZyB7Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zIG9mIFZhbHVlc0luKCksIHdoaWNoIGlz
IGltcGxlbWVudGVkIGluCi0vLyBpbmNsdWRlL2d0ZXN0L2d0ZXN0LXBhcmFtLXRlc3QuaC4KLXRl
bXBsYXRlIDx0eXBlbmFtZSBGb3J3YXJkSXRlcmF0b3I+Ci1pbnRlcm5hbDo6UGFyYW1HZW5lcmF0
b3I8Ci0gIHR5cGVuYW1lIDo6dGVzdGluZzo6aW50ZXJuYWw6Okl0ZXJhdG9yVHJhaXRzPEZvcndh
cmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+Ci1WYWx1ZXNJbihGb3J3YXJkSXRlcmF0b3IgYmVnaW4s
IEZvcndhcmRJdGVyYXRvciBlbmQpOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+
Ci1pbnRlcm5hbDo6UGFyYW1HZW5lcmF0b3I8VD4gVmFsdWVzSW4oY29uc3QgVCAoJmFycmF5KVtO
XSk7Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+Ci1pbnRlcm5hbDo6UGFyYW1HZW5lcmF0
b3I8dHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlPiBWYWx1ZXNJbigKLSAgICBjb25zdCBD
b250YWluZXImIGNvbnRhaW5lcik7Ci0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLS8vIFVzZWQg
aW4gdGhlIFZhbHVlcygpIGZ1bmN0aW9uIHRvIHByb3ZpZGUgcG9seW1vcnBoaWMgY2FwYWJpbGl0
aWVzLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQxPgotY2xhc3MgVmFsdWVBcnJheTEgewotIHB1Ymxp
YzoKLSAgZXhwbGljaXQgVmFsdWVBcnJheTEoVDEgdjEpIDogdjFfKHYxKSB7fQotCi0gIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjxUPigpIGNvbnN0IHsK
LSAgICBjb25zdCBUIGFycmF5W10gPSB7c3RhdGljX2Nhc3Q8VD4odjFfKX07Ci0gICAgcmV0dXJu
IFZhbHVlc0luKGFycmF5KTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRp
b24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBW
YWx1ZUFycmF5MSYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLX07Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+Ci1jbGFzcyBWYWx1ZUFycmF5MiB7Ci0gcHVibGljOgot
ICBWYWx1ZUFycmF5MihUMSB2MSwgVDIgdjIpIDogdjFfKHYxKSwgdjJfKHYyKSB7fQotCi0gIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjxUPigpIGNvbnN0
IHsKLSAgICBjb25zdCBUIGFycmF5W10gPSB7c3RhdGljX2Nhc3Q8VD4odjFfKSwgc3RhdGljX2Nh
c3Q8VD4odjJfKX07Ci0gICAgcmV0dXJuIFZhbHVlc0luKGFycmF5KTsKLSAgfQotCi0gcHJpdmF0
ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgot
ICB2b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1ZUFycmF5MiYgb3RoZXIpOwotCi0gIGNvbnN0IFQx
IHYxXzsKLSAgY29uc3QgVDIgdjJfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBl
bmFtZSBUMiwgdHlwZW5hbWUgVDM+Ci1jbGFzcyBWYWx1ZUFycmF5MyB7Ci0gcHVibGljOgotICBW
YWx1ZUFycmF5MyhUMSB2MSwgVDIgdjIsIFQzIHYzKSA6IHYxXyh2MSksIHYyXyh2MiksIHYzXyh2
Mykge30KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgb3BlcmF0b3IgUGFyYW1HZW5lcmF0
b3I8VD4oKSBjb25zdCB7Ci0gICAgY29uc3QgVCBhcnJheVtdID0ge3N0YXRpY19jYXN0PFQ+KHYx
XyksIHN0YXRpY19jYXN0PFQ+KHYyXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzXyl9Owot
ICAgIHJldHVybiBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIE5vIGlt
cGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgdm9pZCBvcGVyYXRv
cj0oY29uc3QgVmFsdWVBcnJheTMmIG90aGVyKTsKLQotICBjb25zdCBUMSB2MV87Ci0gIGNvbnN0
IFQyIHYyXzsKLSAgY29uc3QgVDMgdjNfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0PgotY2xhc3MgVmFsdWVBcnJheTQg
ewotIHB1YmxpYzoKLSAgVmFsdWVBcnJheTQoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQpIDog
djFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwKLSAgICAgIHY0Xyh2NCkge30KLQotICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLSAgb3BlcmF0b3IgUGFyYW1HZW5lcmF0b3I8VD4oKSBjb25zdCB7Ci0g
ICAgY29uc3QgVCBhcnJheVtdID0ge3N0YXRpY19jYXN0PFQ+KHYxXyksIHN0YXRpY19jYXN0PFQ+
KHYyXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzXyksIHN0YXRpY19jYXN0PFQ+KHY0Xyl9
OwotICAgIHJldHVybiBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIE5v
IGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgdm9pZCBvcGVy
YXRvcj0oY29uc3QgVmFsdWVBcnJheTQmIG90aGVyKTsKLQotICBjb25zdCBUMSB2MV87Ci0gIGNv
bnN0IFQyIHYyXzsKLSAgY29uc3QgVDMgdjNfOwotICBjb25zdCBUNCB2NF87Ci19OwotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQs
IHR5cGVuYW1lIFQ1PgotY2xhc3MgVmFsdWVBcnJheTUgewotIHB1YmxpYzoKLSAgVmFsdWVBcnJh
eTUoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1KSA6IHYxXyh2MSksIHYyXyh2Miks
IHYzXyh2MyksCi0gICAgICB2NF8odjQpLCB2NV8odjUpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci0gIG9wZXJhdG9yIFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0
IFQgYXJyYXlbXSA9IHtzdGF0aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAot
ICAgICAgICBzdGF0aWNfY2FzdDxUPih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNf
Y2FzdDxUPih2NV8pfTsKLSAgICByZXR1cm4gVmFsdWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2
YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQu
Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVlQXJyYXk1JiBvdGhlcik7Ci0KLSAgY29uc3Qg
VDEgdjFfOwotICBjb25zdCBUMiB2Ml87Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3QgVDQgdjRf
OwotICBjb25zdCBUNSB2NV87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1l
IFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1l
IFQ2PgotY2xhc3MgVmFsdWVBcnJheTYgewotIHB1YmxpYzoKLSAgVmFsdWVBcnJheTYoVDEgdjEs
IFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2NikgOiB2MV8odjEpLCB2Ml8odjIpLAot
ICAgICAgdjNfKHYzKSwgdjRfKHY0KSwgdjVfKHY1KSwgdjZfKHY2KSB7fQotCi0gIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjxUPigpIGNvbnN0IHsKLSAg
ICBjb25zdCBUIGFycmF5W10gPSB7c3RhdGljX2Nhc3Q8VD4odjFfKSwgc3RhdGljX2Nhc3Q8VD4o
djJfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjNfKSwgc3RhdGljX2Nhc3Q8VD4odjRfKSwg
c3RhdGljX2Nhc3Q8VD4odjVfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjZfKX07Ci0gICAg
cmV0dXJuIFZhbHVlc0luKGFycmF5KTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gTm8gaW1wbGVt
ZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShj
b25zdCBWYWx1ZUFycmF5NiYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3QgVDIg
djJfOwotICBjb25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVfOwot
ICBjb25zdCBUNiB2Nl87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQy
LCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2
LCB0eXBlbmFtZSBUNz4KLWNsYXNzIFZhbHVlQXJyYXk3IHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJy
YXk3KFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3KSA6IHYx
Xyh2MSksCi0gICAgICB2Ml8odjIpLCB2M18odjMpLCB2NF8odjQpLCB2NV8odjUpLCB2Nl8odjYp
LCB2N18odjcpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIG9wZXJhdG9yIFBhcmFt
R2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0IFQgYXJyYXlbXSA9IHtzdGF0aWNfY2Fz
dDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2
M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNfY2FzdDxUPih2NV8pLAotICAgICAgICBz
dGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxUPih2N18pfTsKLSAgICByZXR1cm4gVmFs
dWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAt
IGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVl
QXJyYXk3JiBvdGhlcik7Ci0KLSAgY29uc3QgVDEgdjFfOwotICBjb25zdCBUMiB2Ml87Ci0gIGNv
bnN0IFQzIHYzXzsKLSAgY29uc3QgVDQgdjRfOwotICBjb25zdCBUNSB2NV87Ci0gIGNvbnN0IFQ2
IHY2XzsKLSAgY29uc3QgVDcgdjdfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBl
bmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBl
bmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4PgotY2xhc3MgVmFsdWVBcnJheTggewot
IHB1YmxpYzoKLSAgVmFsdWVBcnJheTgoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1
LCBUNiB2NiwgVDcgdjcsCi0gICAgICBUOCB2OCkgOiB2MV8odjEpLCB2Ml8odjIpLCB2M18odjMp
LCB2NF8odjQpLCB2NV8odjUpLCB2Nl8odjYpLCB2N18odjcpLAotICAgICAgdjhfKHY4KSB7fQot
Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjxUPigp
IGNvbnN0IHsKLSAgICBjb25zdCBUIGFycmF5W10gPSB7c3RhdGljX2Nhc3Q8VD4odjFfKSwgc3Rh
dGljX2Nhc3Q8VD4odjJfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjNfKSwgc3RhdGljX2Nh
c3Q8VD4odjRfKSwgc3RhdGljX2Nhc3Q8VD4odjVfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4o
djZfKSwgc3RhdGljX2Nhc3Q8VD4odjdfKSwgc3RhdGljX2Nhc3Q8VD4odjhfKX07Ci0gICAgcmV0
dXJuIFZhbHVlc0luKGFycmF5KTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50
YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25z
dCBWYWx1ZUFycmF5OCYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJf
OwotICBjb25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVfOwotICBj
b25zdCBUNiB2Nl87Ci0gIGNvbnN0IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhfOwotfTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0
LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4
LCB0eXBlbmFtZSBUOT4KLWNsYXNzIFZhbHVlQXJyYXk5IHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJy
YXk5KFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2
OCwKLSAgICAgIFQ5IHY5KSA6IHYxXyh2MSksIHYyXyh2MiksIHYzXyh2MyksIHY0Xyh2NCksIHY1
Xyh2NSksIHY2Xyh2NiksIHY3Xyh2NyksCi0gICAgICB2OF8odjgpLCB2OV8odjkpIHt9Ci0KLSAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIG9wZXJhdG9yIFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29u
c3QgewotICAgIGNvbnN0IFQgYXJyYXlbXSA9IHtzdGF0aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNf
Y2FzdDxUPih2Ml8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2M18pLCBzdGF0aWNfY2FzdDxU
Pih2NF8pLCBzdGF0aWNfY2FzdDxUPih2NV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2Nl8p
LCBzdGF0aWNfY2FzdDxUPih2N18pLCBzdGF0aWNfY2FzdDxUPih2OF8pLAotICAgICAgICBzdGF0
aWNfY2FzdDxUPih2OV8pfTsKLSAgICByZXR1cm4gVmFsdWVzSW4oYXJyYXkpOwotICB9Ci0KLSBw
cml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0
ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVlQXJyYXk5JiBvdGhlcik7Ci0KLSAgY29u
c3QgVDEgdjFfOwotICBjb25zdCBUMiB2Ml87Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3QgVDQg
djRfOwotICBjb25zdCBUNSB2NV87Ci0gIGNvbnN0IFQ2IHY2XzsKLSAgY29uc3QgVDcgdjdfOwot
ICBjb25zdCBUOCB2OF87Ci0gIGNvbnN0IFQ5IHY5XzsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUs
Ci0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDks
IHR5cGVuYW1lIFQxMD4KLWNsYXNzIFZhbHVlQXJyYXkxMCB7Ci0gcHVibGljOgotICBWYWx1ZUFy
cmF5MTAoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4
IHY4LCBUOSB2OSwKLSAgICAgIFQxMCB2MTApIDogdjFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwg
djRfKHY0KSwgdjVfKHY1KSwgdjZfKHY2KSwgdjdfKHY3KSwKLSAgICAgIHY4Xyh2OCksIHY5Xyh2
OSksIHYxMF8odjEwKSB7fQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBvcGVyYXRvciBQ
YXJhbUdlbmVyYXRvcjxUPigpIGNvbnN0IHsKLSAgICBjb25zdCBUIGFycmF5W10gPSB7c3RhdGlj
X2Nhc3Q8VD4odjFfKSwgc3RhdGljX2Nhc3Q8VD4odjJfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8
VD4odjNfKSwgc3RhdGljX2Nhc3Q8VD4odjRfKSwgc3RhdGljX2Nhc3Q8VD4odjVfKSwKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8VD4odjZfKSwgc3RhdGljX2Nhc3Q8VD4odjdfKSwgc3RhdGljX2Nhc3Q8
VD4odjhfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjlfKSwgc3RhdGljX2Nhc3Q8VD4odjEw
Xyl9OwotICAgIHJldHVybiBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8v
IE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgdm9pZCBv
cGVyYXRvcj0oY29uc3QgVmFsdWVBcnJheTEwJiBvdGhlcik7Ci0KLSAgY29uc3QgVDEgdjFfOwot
ICBjb25zdCBUMiB2Ml87Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3QgVDQgdjRfOwotICBjb25z
dCBUNSB2NV87Ci0gIGNvbnN0IFQ2IHY2XzsKLSAgY29uc3QgVDcgdjdfOwotICBjb25zdCBUOCB2
OF87Ci0gIGNvbnN0IFQ5IHY5XzsKLSAgY29uc3QgVDEwIHYxMF87Ci19OwotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVu
YW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVu
YW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExPgotY2xhc3MgVmFsdWVBcnJh
eTExIHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJyYXkxMShUMSB2MSwgVDIgdjIsIFQzIHYzLCBUNCB2
NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LAotICAgICAgVDEwIHYxMCwgVDEx
IHYxMSkgOiB2MV8odjEpLCB2Ml8odjIpLCB2M18odjMpLCB2NF8odjQpLCB2NV8odjUpLCB2Nl8o
djYpLAotICAgICAgdjdfKHY3KSwgdjhfKHY4KSwgdjlfKHY5KSwgdjEwXyh2MTApLCB2MTFfKHYx
MSkge30KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgb3BlcmF0b3IgUGFyYW1HZW5lcmF0
b3I8VD4oKSBjb25zdCB7Ci0gICAgY29uc3QgVCBhcnJheVtdID0ge3N0YXRpY19jYXN0PFQ+KHYx
XyksIHN0YXRpY19jYXN0PFQ+KHYyXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzXyksIHN0
YXRpY19jYXN0PFQ+KHY0XyksIHN0YXRpY19jYXN0PFQ+KHY1XyksCi0gICAgICAgIHN0YXRpY19j
YXN0PFQ+KHY2XyksIHN0YXRpY19jYXN0PFQ+KHY3XyksIHN0YXRpY19jYXN0PFQ+KHY4XyksCi0g
ICAgICAgIHN0YXRpY19jYXN0PFQ+KHY5XyksIHN0YXRpY19jYXN0PFQ+KHYxMF8pLCBzdGF0aWNf
Y2FzdDxUPih2MTFfKX07Ci0gICAgcmV0dXJuIFZhbHVlc0luKGFycmF5KTsKLSAgfQotCi0gcHJp
dmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVk
LgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1ZUFycmF5MTEmIG90aGVyKTsKLQotICBjb25z
dCBUMSB2MV87Ci0gIGNvbnN0IFQyIHYyXzsKLSAgY29uc3QgVDMgdjNfOwotICBjb25zdCBUNCB2
NF87Ci0gIGNvbnN0IFQ1IHY1XzsKLSAgY29uc3QgVDYgdjZfOwotICBjb25zdCBUNyB2N187Ci0g
IGNvbnN0IFQ4IHY4XzsKLSAgY29uc3QgVDkgdjlfOwotICBjb25zdCBUMTAgdjEwXzsKLSAgY29u
c3QgVDExIHYxMV87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0
eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0
eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAg
dHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTI+Ci1jbGFzcyBWYWx1ZUFycmF5MTIgewotIHB1Ymxp
YzoKLSAgVmFsdWVBcnJheTEyKFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYg
djYsIFQ3IHY3LCBUOCB2OCwgVDkgdjksCi0gICAgICBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEy
KSA6IHYxXyh2MSksIHYyXyh2MiksIHYzXyh2MyksIHY0Xyh2NCksIHY1Xyh2NSksCi0gICAgICB2
Nl8odjYpLCB2N18odjcpLCB2OF8odjgpLCB2OV8odjkpLCB2MTBfKHYxMCksIHYxMV8odjExKSwg
djEyXyh2MTIpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIG9wZXJhdG9yIFBhcmFt
R2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0IFQgYXJyYXlbXSA9IHtzdGF0aWNfY2Fz
dDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2
M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNfY2FzdDxUPih2NV8pLAotICAgICAgICBz
dGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxUPih2N18pLCBzdGF0aWNfY2FzdDxUPih2
OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2OV8pLCBzdGF0aWNfY2FzdDxUPih2MTBfKSwg
c3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxMl8pfTsKLSAg
ICByZXR1cm4gVmFsdWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBs
ZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9
KGNvbnN0IFZhbHVlQXJyYXkxMiYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3Qg
VDIgdjJfOwotICBjb25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVf
OwotICBjb25zdCBUNiB2Nl87Ci0gIGNvbnN0IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhfOwotICBj
b25zdCBUOSB2OV87Ci0gIGNvbnN0IFQxMCB2MTBfOwotICBjb25zdCBUMTEgdjExXzsKLSAgY29u
c3QgVDEyIHYxMl87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0
eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0
eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAg
dHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMz4KLWNsYXNzIFZhbHVlQXJy
YXkxMyB7Ci0gcHVibGljOgotICBWYWx1ZUFycmF5MTMoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQg
djQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwKLSAgICAgIFQxMCB2MTAsIFQx
MSB2MTEsIFQxMiB2MTIsIFQxMyB2MTMpIDogdjFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwgdjRf
KHY0KSwKLSAgICAgIHY1Xyh2NSksIHY2Xyh2NiksIHY3Xyh2NyksIHY4Xyh2OCksIHY5Xyh2OSks
IHYxMF8odjEwKSwgdjExXyh2MTEpLAotICAgICAgdjEyXyh2MTIpLCB2MTNfKHYxMykge30KLQot
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgb3BlcmF0b3IgUGFyYW1HZW5lcmF0b3I8VD4oKSBj
b25zdCB7Ci0gICAgY29uc3QgVCBhcnJheVtdID0ge3N0YXRpY19jYXN0PFQ+KHYxXyksIHN0YXRp
Y19jYXN0PFQ+KHYyXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzXyksIHN0YXRpY19jYXN0
PFQ+KHY0XyksIHN0YXRpY19jYXN0PFQ+KHY1XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY2
XyksIHN0YXRpY19jYXN0PFQ+KHY3XyksIHN0YXRpY19jYXN0PFQ+KHY4XyksCi0gICAgICAgIHN0
YXRpY19jYXN0PFQ+KHY5XyksIHN0YXRpY19jYXN0PFQ+KHYxMF8pLCBzdGF0aWNfY2FzdDxUPih2
MTFfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjEyXyksIHN0YXRpY19jYXN0PFQ+KHYxM18p
fTsKLSAgICByZXR1cm4gVmFsdWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBO
byBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3Bl
cmF0b3I9KGNvbnN0IFZhbHVlQXJyYXkxMyYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAg
Y29uc3QgVDIgdjJfOwotICBjb25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3Qg
VDUgdjVfOwotICBjb25zdCBUNiB2Nl87Ci0gIGNvbnN0IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhf
OwotICBjb25zdCBUOSB2OV87Ci0gIGNvbnN0IFQxMCB2MTBfOwotICBjb25zdCBUMTEgdjExXzsK
LSAgY29uc3QgVDEyIHYxMl87Ci0gIGNvbnN0IFQxMyB2MTNfOwotfTsKLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFt
ZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFt
ZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBl
bmFtZSBUMTMsIHR5cGVuYW1lIFQxND4KLWNsYXNzIFZhbHVlQXJyYXkxNCB7Ci0gcHVibGljOgot
ICBWYWx1ZUFycmF5MTQoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2Niwg
VDcgdjcsIFQ4IHY4LCBUOSB2OSwKLSAgICAgIFQxMCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIsIFQx
MyB2MTMsIFQxNCB2MTQpIDogdjFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwKLSAgICAgIHY0Xyh2
NCksIHY1Xyh2NSksIHY2Xyh2NiksIHY3Xyh2NyksIHY4Xyh2OCksIHY5Xyh2OSksIHYxMF8odjEw
KSwKLSAgICAgIHYxMV8odjExKSwgdjEyXyh2MTIpLCB2MTNfKHYxMyksIHYxNF8odjE0KSB7fQot
Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjxUPigp
IGNvbnN0IHsKLSAgICBjb25zdCBUIGFycmF5W10gPSB7c3RhdGljX2Nhc3Q8VD4odjFfKSwgc3Rh
dGljX2Nhc3Q8VD4odjJfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjNfKSwgc3RhdGljX2Nh
c3Q8VD4odjRfKSwgc3RhdGljX2Nhc3Q8VD4odjVfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4o
djZfKSwgc3RhdGljX2Nhc3Q8VD4odjdfKSwgc3RhdGljX2Nhc3Q8VD4odjhfKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8VD4odjlfKSwgc3RhdGljX2Nhc3Q8VD4odjEwXyksIHN0YXRpY19jYXN0PFQ+
KHYxMV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MTJfKSwgc3RhdGljX2Nhc3Q8VD4odjEz
XyksIHN0YXRpY19jYXN0PFQ+KHYxNF8pfTsKLSAgICByZXR1cm4gVmFsdWVzSW4oYXJyYXkpOwot
ICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMg
dW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVlQXJyYXkxNCYgb3RoZXIp
OwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJfOwotICBjb25zdCBUMyB2M187Ci0g
IGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVfOwotICBjb25zdCBUNiB2Nl87Ci0gIGNvbnN0
IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhfOwotICBjb25zdCBUOSB2OV87Ci0gIGNvbnN0IFQxMCB2
MTBfOwotICBjb25zdCBUMTEgdjExXzsKLSAgY29uc3QgVDEyIHYxMl87Ci0gIGNvbnN0IFQxMyB2
MTNfOwotICBjb25zdCBUMTQgdjE0XzsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlw
ZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1l
IFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBl
bmFtZSBUMTQsIHR5cGVuYW1lIFQxNT4KLWNsYXNzIFZhbHVlQXJyYXkxNSB7Ci0gcHVibGljOgot
ICBWYWx1ZUFycmF5MTUoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2Niwg
VDcgdjcsIFQ4IHY4LCBUOSB2OSwKLSAgICAgIFQxMCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIsIFQx
MyB2MTMsIFQxNCB2MTQsIFQxNSB2MTUpIDogdjFfKHYxKSwgdjJfKHYyKSwKLSAgICAgIHYzXyh2
MyksIHY0Xyh2NCksIHY1Xyh2NSksIHY2Xyh2NiksIHY3Xyh2NyksIHY4Xyh2OCksIHY5Xyh2OSks
IHYxMF8odjEwKSwKLSAgICAgIHYxMV8odjExKSwgdjEyXyh2MTIpLCB2MTNfKHYxMyksIHYxNF8o
djE0KSwgdjE1Xyh2MTUpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIG9wZXJhdG9y
IFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0IFQgYXJyYXlbXSA9IHtzdGF0
aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAotICAgICAgICBzdGF0aWNfY2Fz
dDxUPih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNfY2FzdDxUPih2NV8pLAotICAg
ICAgICBzdGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxUPih2N18pLCBzdGF0aWNfY2Fz
dDxUPih2OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2OV8pLCBzdGF0aWNfY2FzdDxUPih2
MTBfKSwgc3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxMl8p
LCBzdGF0aWNfY2FzdDxUPih2MTNfKSwgc3RhdGljX2Nhc3Q8VD4odjE0XyksCi0gICAgICAgIHN0
YXRpY19jYXN0PFQ+KHYxNV8pfTsKLSAgICByZXR1cm4gVmFsdWVzSW4oYXJyYXkpOwotICB9Ci0K
LSBwcml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBw
b3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVlQXJyYXkxNSYgb3RoZXIpOwotCi0g
IGNvbnN0IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJfOwotICBjb25zdCBUMyB2M187Ci0gIGNvbnN0
IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVfOwotICBjb25zdCBUNiB2Nl87Ci0gIGNvbnN0IFQ3IHY3
XzsKLSAgY29uc3QgVDggdjhfOwotICBjb25zdCBUOSB2OV87Ci0gIGNvbnN0IFQxMCB2MTBfOwot
ICBjb25zdCBUMTEgdjExXzsKLSAgY29uc3QgVDEyIHYxMl87Ci0gIGNvbnN0IFQxMyB2MTNfOwot
ICBjb25zdCBUMTQgdjE0XzsKLSAgY29uc3QgVDE1IHYxNV87Ci19OwotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1l
IFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1l
IFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVu
YW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2Pgot
Y2xhc3MgVmFsdWVBcnJheTE2IHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJyYXkxNihUMSB2MSwgVDIg
djIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LAotICAg
ICAgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYxNCwgVDE1IHYxNSwg
VDE2IHYxNikgOiB2MV8odjEpLAotICAgICAgdjJfKHYyKSwgdjNfKHYzKSwgdjRfKHY0KSwgdjVf
KHY1KSwgdjZfKHY2KSwgdjdfKHY3KSwgdjhfKHY4KSwgdjlfKHY5KSwKLSAgICAgIHYxMF8odjEw
KSwgdjExXyh2MTEpLCB2MTJfKHYxMiksIHYxM18odjEzKSwgdjE0Xyh2MTQpLCB2MTVfKHYxNSks
Ci0gICAgICB2MTZfKHYxNikge30KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgb3BlcmF0
b3IgUGFyYW1HZW5lcmF0b3I8VD4oKSBjb25zdCB7Ci0gICAgY29uc3QgVCBhcnJheVtdID0ge3N0
YXRpY19jYXN0PFQ+KHYxXyksIHN0YXRpY19jYXN0PFQ+KHYyXyksCi0gICAgICAgIHN0YXRpY19j
YXN0PFQ+KHYzXyksIHN0YXRpY19jYXN0PFQ+KHY0XyksIHN0YXRpY19jYXN0PFQ+KHY1XyksCi0g
ICAgICAgIHN0YXRpY19jYXN0PFQ+KHY2XyksIHN0YXRpY19jYXN0PFQ+KHY3XyksIHN0YXRpY19j
YXN0PFQ+KHY4XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY5XyksIHN0YXRpY19jYXN0PFQ+
KHYxMF8pLCBzdGF0aWNfY2FzdDxUPih2MTFfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjEy
XyksIHN0YXRpY19jYXN0PFQ+KHYxM18pLCBzdGF0aWNfY2FzdDxUPih2MTRfKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8VD4odjE1XyksIHN0YXRpY19jYXN0PFQ+KHYxNl8pfTsKLSAgICByZXR1cm4g
VmFsdWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlv
biAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZh
bHVlQXJyYXkxNiYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJfOwot
ICBjb25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVfOwotICBjb25z
dCBUNiB2Nl87Ci0gIGNvbnN0IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhfOwotICBjb25zdCBUOSB2
OV87Ci0gIGNvbnN0IFQxMCB2MTBfOwotICBjb25zdCBUMTEgdjExXzsKLSAgY29uc3QgVDEyIHYx
Ml87Ci0gIGNvbnN0IFQxMyB2MTNfOwotICBjb25zdCBUMTQgdjE0XzsKLSAgY29uc3QgVDE1IHYx
NV87Ci0gIGNvbnN0IFQxNiB2MTZfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBl
bmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBl
bmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUg
VDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVu
YW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3Pgot
Y2xhc3MgVmFsdWVBcnJheTE3IHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJyYXkxNyhUMSB2MSwgVDIg
djIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LAotICAg
ICAgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYxNCwgVDE1IHYxNSwg
VDE2IHYxNiwKLSAgICAgIFQxNyB2MTcpIDogdjFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwgdjRf
KHY0KSwgdjVfKHY1KSwgdjZfKHY2KSwgdjdfKHY3KSwKLSAgICAgIHY4Xyh2OCksIHY5Xyh2OSks
IHYxMF8odjEwKSwgdjExXyh2MTEpLCB2MTJfKHYxMiksIHYxM18odjEzKSwgdjE0Xyh2MTQpLAot
ICAgICAgdjE1Xyh2MTUpLCB2MTZfKHYxNiksIHYxN18odjE3KSB7fQotCi0gIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjxUPigpIGNvbnN0IHsKLSAgICBj
b25zdCBUIGFycmF5W10gPSB7c3RhdGljX2Nhc3Q8VD4odjFfKSwgc3RhdGljX2Nhc3Q8VD4odjJf
KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjNfKSwgc3RhdGljX2Nhc3Q8VD4odjRfKSwgc3Rh
dGljX2Nhc3Q8VD4odjVfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjZfKSwgc3RhdGljX2Nh
c3Q8VD4odjdfKSwgc3RhdGljX2Nhc3Q8VD4odjhfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4o
djlfKSwgc3RhdGljX2Nhc3Q8VD4odjEwXyksIHN0YXRpY19jYXN0PFQ+KHYxMV8pLAotICAgICAg
ICBzdGF0aWNfY2FzdDxUPih2MTJfKSwgc3RhdGljX2Nhc3Q8VD4odjEzXyksIHN0YXRpY19jYXN0
PFQ+KHYxNF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MTVfKSwgc3RhdGljX2Nhc3Q8VD4o
djE2XyksIHN0YXRpY19jYXN0PFQ+KHYxN18pfTsKLSAgICByZXR1cm4gVmFsdWVzSW4oYXJyYXkp
OwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQg
aXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVlQXJyYXkxNyYgb3Ro
ZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJfOwotICBjb25zdCBUMyB2M187
Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVfOwotICBjb25zdCBUNiB2Nl87Ci0gIGNv
bnN0IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhfOwotICBjb25zdCBUOSB2OV87Ci0gIGNvbnN0IFQx
MCB2MTBfOwotICBjb25zdCBUMTEgdjExXzsKLSAgY29uc3QgVDEyIHYxMl87Ci0gIGNvbnN0IFQx
MyB2MTNfOwotICBjb25zdCBUMTQgdjE0XzsKLSAgY29uc3QgVDE1IHYxNV87Ci0gIGNvbnN0IFQx
NiB2MTZfOwotICBjb25zdCBUMTcgdjE3XzsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwg
dHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAg
dHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVu
YW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0
eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQx
NywgdHlwZW5hbWUgVDE4PgotY2xhc3MgVmFsdWVBcnJheTE4IHsKLSBwdWJsaWM6Ci0gIFZhbHVl
QXJyYXkxOChUMSB2MSwgVDIgdjIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2Nywg
VDggdjgsIFQ5IHY5LAotICAgICAgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywg
VDE0IHYxNCwgVDE1IHYxNSwgVDE2IHYxNiwgVDE3IHYxNywKLSAgICAgIFQxOCB2MTgpIDogdjFf
KHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwgdjRfKHY0KSwgdjVfKHY1KSwgdjZfKHY2KSwgdjdfKHY3
KSwKLSAgICAgIHY4Xyh2OCksIHY5Xyh2OSksIHYxMF8odjEwKSwgdjExXyh2MTEpLCB2MTJfKHYx
MiksIHYxM18odjEzKSwgdjE0Xyh2MTQpLAotICAgICAgdjE1Xyh2MTUpLCB2MTZfKHYxNiksIHYx
N18odjE3KSwgdjE4Xyh2MTgpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIG9wZXJh
dG9yIFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0IFQgYXJyYXlbXSA9IHtz
dGF0aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAotICAgICAgICBzdGF0aWNf
Y2FzdDxUPih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNfY2FzdDxUPih2NV8pLAot
ICAgICAgICBzdGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxUPih2N18pLCBzdGF0aWNf
Y2FzdDxUPih2OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2OV8pLCBzdGF0aWNfY2FzdDxU
Pih2MTBfKSwgc3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYx
Ml8pLCBzdGF0aWNfY2FzdDxUPih2MTNfKSwgc3RhdGljX2Nhc3Q8VD4odjE0XyksCi0gICAgICAg
IHN0YXRpY19jYXN0PFQ+KHYxNV8pLCBzdGF0aWNfY2FzdDxUPih2MTZfKSwgc3RhdGljX2Nhc3Q8
VD4odjE3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxOF8pfTsKLSAgICByZXR1cm4gVmFs
dWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAt
IGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVl
QXJyYXkxOCYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJfOwotICBj
b25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVfOwotICBjb25zdCBU
NiB2Nl87Ci0gIGNvbnN0IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhfOwotICBjb25zdCBUOSB2OV87
Ci0gIGNvbnN0IFQxMCB2MTBfOwotICBjb25zdCBUMTEgdjExXzsKLSAgY29uc3QgVDEyIHYxMl87
Ci0gIGNvbnN0IFQxMyB2MTNfOwotICBjb25zdCBUMTQgdjE0XzsKLSAgY29uc3QgVDE1IHYxNV87
Ci0gIGNvbnN0IFQxNiB2MTZfOwotICBjb25zdCBUMTcgdjE3XzsKLSAgY29uc3QgVDE4IHYxOF87
Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywg
dHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywg
dHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDEx
LCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUs
Ci0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUg
VDE5PgotY2xhc3MgVmFsdWVBcnJheTE5IHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJyYXkxOShUMSB2
MSwgVDIgdjIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5
LAotICAgICAgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYxNCwgVDE1
IHYxNSwgVDE2IHYxNiwgVDE3IHYxNywKLSAgICAgIFQxOCB2MTgsIFQxOSB2MTkpIDogdjFfKHYx
KSwgdjJfKHYyKSwgdjNfKHYzKSwgdjRfKHY0KSwgdjVfKHY1KSwgdjZfKHY2KSwKLSAgICAgIHY3
Xyh2NyksIHY4Xyh2OCksIHY5Xyh2OSksIHYxMF8odjEwKSwgdjExXyh2MTEpLCB2MTJfKHYxMiks
IHYxM18odjEzKSwKLSAgICAgIHYxNF8odjE0KSwgdjE1Xyh2MTUpLCB2MTZfKHYxNiksIHYxN18o
djE3KSwgdjE4Xyh2MTgpLCB2MTlfKHYxOSkge30KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LSAgb3BlcmF0b3IgUGFyYW1HZW5lcmF0b3I8VD4oKSBjb25zdCB7Ci0gICAgY29uc3QgVCBhcnJh
eVtdID0ge3N0YXRpY19jYXN0PFQ+KHYxXyksIHN0YXRpY19jYXN0PFQ+KHYyXyksCi0gICAgICAg
IHN0YXRpY19jYXN0PFQ+KHYzXyksIHN0YXRpY19jYXN0PFQ+KHY0XyksIHN0YXRpY19jYXN0PFQ+
KHY1XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY2XyksIHN0YXRpY19jYXN0PFQ+KHY3Xyks
IHN0YXRpY19jYXN0PFQ+KHY4XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY5XyksIHN0YXRp
Y19jYXN0PFQ+KHYxMF8pLCBzdGF0aWNfY2FzdDxUPih2MTFfKSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8VD4odjEyXyksIHN0YXRpY19jYXN0PFQ+KHYxM18pLCBzdGF0aWNfY2FzdDxUPih2MTRfKSwK
LSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE1XyksIHN0YXRpY19jYXN0PFQ+KHYxNl8pLCBzdGF0
aWNfY2FzdDxUPih2MTdfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE4XyksIHN0YXRpY19j
YXN0PFQ+KHYxOV8pfTsKLSAgICByZXR1cm4gVmFsdWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2
YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQu
Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVlQXJyYXkxOSYgb3RoZXIpOwotCi0gIGNvbnN0
IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJfOwotICBjb25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0
XzsKLSAgY29uc3QgVDUgdjVfOwotICBjb25zdCBUNiB2Nl87Ci0gIGNvbnN0IFQ3IHY3XzsKLSAg
Y29uc3QgVDggdjhfOwotICBjb25zdCBUOSB2OV87Ci0gIGNvbnN0IFQxMCB2MTBfOwotICBjb25z
dCBUMTEgdjExXzsKLSAgY29uc3QgVDEyIHYxMl87Ci0gIGNvbnN0IFQxMyB2MTNfOwotICBjb25z
dCBUMTQgdjE0XzsKLSAgY29uc3QgVDE1IHYxNV87Ci0gIGNvbnN0IFQxNiB2MTZfOwotICBjb25z
dCBUMTcgdjE3XzsKLSAgY29uc3QgVDE4IHYxOF87Ci0gIGNvbnN0IFQxOSB2MTlfOwotfTsKLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1l
IFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1l
IFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5h
bWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5
cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlw
ZW5hbWUgVDIwPgotY2xhc3MgVmFsdWVBcnJheTIwIHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJyYXky
MChUMSB2MSwgVDIgdjIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgs
IFQ5IHY5LAotICAgICAgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYx
NCwgVDE1IHYxNSwgVDE2IHYxNiwgVDE3IHYxNywKLSAgICAgIFQxOCB2MTgsIFQxOSB2MTksIFQy
MCB2MjApIDogdjFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwgdjRfKHY0KSwgdjVfKHY1KSwKLSAg
ICAgIHY2Xyh2NiksIHY3Xyh2NyksIHY4Xyh2OCksIHY5Xyh2OSksIHYxMF8odjEwKSwgdjExXyh2
MTEpLCB2MTJfKHYxMiksCi0gICAgICB2MTNfKHYxMyksIHYxNF8odjE0KSwgdjE1Xyh2MTUpLCB2
MTZfKHYxNiksIHYxN18odjE3KSwgdjE4Xyh2MTgpLAotICAgICAgdjE5Xyh2MTkpLCB2MjBfKHYy
MCkge30KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgb3BlcmF0b3IgUGFyYW1HZW5lcmF0
b3I8VD4oKSBjb25zdCB7Ci0gICAgY29uc3QgVCBhcnJheVtdID0ge3N0YXRpY19jYXN0PFQ+KHYx
XyksIHN0YXRpY19jYXN0PFQ+KHYyXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzXyksIHN0
YXRpY19jYXN0PFQ+KHY0XyksIHN0YXRpY19jYXN0PFQ+KHY1XyksCi0gICAgICAgIHN0YXRpY19j
YXN0PFQ+KHY2XyksIHN0YXRpY19jYXN0PFQ+KHY3XyksIHN0YXRpY19jYXN0PFQ+KHY4XyksCi0g
ICAgICAgIHN0YXRpY19jYXN0PFQ+KHY5XyksIHN0YXRpY19jYXN0PFQ+KHYxMF8pLCBzdGF0aWNf
Y2FzdDxUPih2MTFfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjEyXyksIHN0YXRpY19jYXN0
PFQ+KHYxM18pLCBzdGF0aWNfY2FzdDxUPih2MTRfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4o
djE1XyksIHN0YXRpY19jYXN0PFQ+KHYxNl8pLCBzdGF0aWNfY2FzdDxUPih2MTdfKSwKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8VD4odjE4XyksIHN0YXRpY19jYXN0PFQ+KHYxOV8pLCBzdGF0aWNfY2Fz
dDxUPih2MjBfKX07Ci0gICAgcmV0dXJuIFZhbHVlc0luKGFycmF5KTsKLSAgfQotCi0gcHJpdmF0
ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgot
ICB2b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1ZUFycmF5MjAmIG90aGVyKTsKLQotICBjb25zdCBU
MSB2MV87Ci0gIGNvbnN0IFQyIHYyXzsKLSAgY29uc3QgVDMgdjNfOwotICBjb25zdCBUNCB2NF87
Ci0gIGNvbnN0IFQ1IHY1XzsKLSAgY29uc3QgVDYgdjZfOwotICBjb25zdCBUNyB2N187Ci0gIGNv
bnN0IFQ4IHY4XzsKLSAgY29uc3QgVDkgdjlfOwotICBjb25zdCBUMTAgdjEwXzsKLSAgY29uc3Qg
VDExIHYxMV87Ci0gIGNvbnN0IFQxMiB2MTJfOwotICBjb25zdCBUMTMgdjEzXzsKLSAgY29uc3Qg
VDE0IHYxNF87Ci0gIGNvbnN0IFQxNSB2MTVfOwotICBjb25zdCBUMTYgdjE2XzsKLSAgY29uc3Qg
VDE3IHYxN187Ci0gIGNvbnN0IFQxOCB2MThfOwotICBjb25zdCBUMTkgdjE5XzsKLSAgY29uc3Qg
VDIwIHYyMF87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBl
bmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBl
bmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlw
ZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBl
bmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwg
dHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxPgotY2xhc3MgVmFs
dWVBcnJheTIxIHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJyYXkyMShUMSB2MSwgVDIgdjIsIFQzIHYz
LCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LAotICAgICAgVDEwIHYx
MCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYxNCwgVDE1IHYxNSwgVDE2IHYxNiwg
VDE3IHYxNywKLSAgICAgIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsIFQyMSB2MjEpIDogdjFf
KHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwgdjRfKHY0KSwKLSAgICAgIHY1Xyh2NSksIHY2Xyh2Niks
IHY3Xyh2NyksIHY4Xyh2OCksIHY5Xyh2OSksIHYxMF8odjEwKSwgdjExXyh2MTEpLAotICAgICAg
djEyXyh2MTIpLCB2MTNfKHYxMyksIHYxNF8odjE0KSwgdjE1Xyh2MTUpLCB2MTZfKHYxNiksIHYx
N18odjE3KSwKLSAgICAgIHYxOF8odjE4KSwgdjE5Xyh2MTkpLCB2MjBfKHYyMCksIHYyMV8odjIx
KSB7fQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRv
cjxUPigpIGNvbnN0IHsKLSAgICBjb25zdCBUIGFycmF5W10gPSB7c3RhdGljX2Nhc3Q8VD4odjFf
KSwgc3RhdGljX2Nhc3Q8VD4odjJfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjNfKSwgc3Rh
dGljX2Nhc3Q8VD4odjRfKSwgc3RhdGljX2Nhc3Q8VD4odjVfKSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8VD4odjZfKSwgc3RhdGljX2Nhc3Q8VD4odjdfKSwgc3RhdGljX2Nhc3Q8VD4odjhfKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8VD4odjlfKSwgc3RhdGljX2Nhc3Q8VD4odjEwXyksIHN0YXRpY19j
YXN0PFQ+KHYxMV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MTJfKSwgc3RhdGljX2Nhc3Q8
VD4odjEzXyksIHN0YXRpY19jYXN0PFQ+KHYxNF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2
MTVfKSwgc3RhdGljX2Nhc3Q8VD4odjE2XyksIHN0YXRpY19jYXN0PFQ+KHYxN18pLAotICAgICAg
ICBzdGF0aWNfY2FzdDxUPih2MThfKSwgc3RhdGljX2Nhc3Q8VD4odjE5XyksIHN0YXRpY19jYXN0
PFQ+KHYyMF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MjFfKX07Ci0gICAgcmV0dXJuIFZh
bHVlc0luKGFycmF5KTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24g
LSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1
ZUFycmF5MjEmIG90aGVyKTsKLQotICBjb25zdCBUMSB2MV87Ci0gIGNvbnN0IFQyIHYyXzsKLSAg
Y29uc3QgVDMgdjNfOwotICBjb25zdCBUNCB2NF87Ci0gIGNvbnN0IFQ1IHY1XzsKLSAgY29uc3Qg
VDYgdjZfOwotICBjb25zdCBUNyB2N187Ci0gIGNvbnN0IFQ4IHY4XzsKLSAgY29uc3QgVDkgdjlf
OwotICBjb25zdCBUMTAgdjEwXzsKLSAgY29uc3QgVDExIHYxMV87Ci0gIGNvbnN0IFQxMiB2MTJf
OwotICBjb25zdCBUMTMgdjEzXzsKLSAgY29uc3QgVDE0IHYxNF87Ci0gIGNvbnN0IFQxNSB2MTVf
OwotICBjb25zdCBUMTYgdjE2XzsKLSAgY29uc3QgVDE3IHYxN187Ci0gIGNvbnN0IFQxOCB2MThf
OwotICBjb25zdCBUMTkgdjE5XzsKLSAgY29uc3QgVDIwIHYyMF87Ci0gIGNvbnN0IFQyMSB2MjFf
OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMs
IHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcs
IHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQx
MSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1
LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1l
IFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyPgotY2xh
c3MgVmFsdWVBcnJheTIyIHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJyYXkyMihUMSB2MSwgVDIgdjIs
IFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LAotICAgICAg
VDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYxNCwgVDE1IHYxNSwgVDE2
IHYxNiwgVDE3IHYxNywKLSAgICAgIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsIFQyMSB2MjEs
IFQyMiB2MjIpIDogdjFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwKLSAgICAgIHY0Xyh2NCksIHY1
Xyh2NSksIHY2Xyh2NiksIHY3Xyh2NyksIHY4Xyh2OCksIHY5Xyh2OSksIHYxMF8odjEwKSwKLSAg
ICAgIHYxMV8odjExKSwgdjEyXyh2MTIpLCB2MTNfKHYxMyksIHYxNF8odjE0KSwgdjE1Xyh2MTUp
LCB2MTZfKHYxNiksCi0gICAgICB2MTdfKHYxNyksIHYxOF8odjE4KSwgdjE5Xyh2MTkpLCB2MjBf
KHYyMCksIHYyMV8odjIxKSwgdjIyXyh2MjIpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci0gIG9wZXJhdG9yIFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0IFQgYXJy
YXlbXSA9IHtzdGF0aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAotICAgICAg
ICBzdGF0aWNfY2FzdDxUPih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNfY2FzdDxU
Pih2NV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxUPih2N18p
LCBzdGF0aWNfY2FzdDxUPih2OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2OV8pLCBzdGF0
aWNfY2FzdDxUPih2MTBfKSwgc3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAgIHN0YXRpY19j
YXN0PFQ+KHYxMl8pLCBzdGF0aWNfY2FzdDxUPih2MTNfKSwgc3RhdGljX2Nhc3Q8VD4odjE0Xyks
Ci0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxNV8pLCBzdGF0aWNfY2FzdDxUPih2MTZfKSwgc3Rh
dGljX2Nhc3Q8VD4odjE3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxOF8pLCBzdGF0aWNf
Y2FzdDxUPih2MTlfKSwgc3RhdGljX2Nhc3Q8VD4odjIwXyksCi0gICAgICAgIHN0YXRpY19jYXN0
PFQ+KHYyMV8pLCBzdGF0aWNfY2FzdDxUPih2MjJfKX07Ci0gICAgcmV0dXJuIFZhbHVlc0luKGFy
cmF5KTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25t
ZW50IGlzIHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1ZUFycmF5MjIm
IG90aGVyKTsKLQotICBjb25zdCBUMSB2MV87Ci0gIGNvbnN0IFQyIHYyXzsKLSAgY29uc3QgVDMg
djNfOwotICBjb25zdCBUNCB2NF87Ci0gIGNvbnN0IFQ1IHY1XzsKLSAgY29uc3QgVDYgdjZfOwot
ICBjb25zdCBUNyB2N187Ci0gIGNvbnN0IFQ4IHY4XzsKLSAgY29uc3QgVDkgdjlfOwotICBjb25z
dCBUMTAgdjEwXzsKLSAgY29uc3QgVDExIHYxMV87Ci0gIGNvbnN0IFQxMiB2MTJfOwotICBjb25z
dCBUMTMgdjEzXzsKLSAgY29uc3QgVDE0IHYxNF87Ci0gIGNvbnN0IFQxNSB2MTVfOwotICBjb25z
dCBUMTYgdjE2XzsKLSAgY29uc3QgVDE3IHYxN187Ci0gIGNvbnN0IFQxOCB2MThfOwotICBjb25z
dCBUMTkgdjE5XzsKLSAgY29uc3QgVDIwIHYyMF87Ci0gIGNvbnN0IFQyMSB2MjFfOwotICBjb25z
dCBUMjIgdjIyXzsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5
cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5
cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0
eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5
cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4
LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1l
IFQyMiwgdHlwZW5hbWUgVDIzPgotY2xhc3MgVmFsdWVBcnJheTIzIHsKLSBwdWJsaWM6Ci0gIFZh
bHVlQXJyYXkyMyhUMSB2MSwgVDIgdjIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2
NywgVDggdjgsIFQ5IHY5LAotICAgICAgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYx
MywgVDE0IHYxNCwgVDE1IHYxNSwgVDE2IHYxNiwgVDE3IHYxNywKLSAgICAgIFQxOCB2MTgsIFQx
OSB2MTksIFQyMCB2MjAsIFQyMSB2MjEsIFQyMiB2MjIsIFQyMyB2MjMpIDogdjFfKHYxKSwgdjJf
KHYyKSwKLSAgICAgIHYzXyh2MyksIHY0Xyh2NCksIHY1Xyh2NSksIHY2Xyh2NiksIHY3Xyh2Nyks
IHY4Xyh2OCksIHY5Xyh2OSksIHYxMF8odjEwKSwKLSAgICAgIHYxMV8odjExKSwgdjEyXyh2MTIp
LCB2MTNfKHYxMyksIHYxNF8odjE0KSwgdjE1Xyh2MTUpLCB2MTZfKHYxNiksCi0gICAgICB2MTdf
KHYxNyksIHYxOF8odjE4KSwgdjE5Xyh2MTkpLCB2MjBfKHYyMCksIHYyMV8odjIxKSwgdjIyXyh2
MjIpLAotICAgICAgdjIzXyh2MjMpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIG9w
ZXJhdG9yIFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0IFQgYXJyYXlbXSA9
IHtzdGF0aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAotICAgICAgICBzdGF0
aWNfY2FzdDxUPih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNfY2FzdDxUPih2NV8p
LAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxUPih2N18pLCBzdGF0
aWNfY2FzdDxUPih2OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2OV8pLCBzdGF0aWNfY2Fz
dDxUPih2MTBfKSwgc3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+
KHYxMl8pLCBzdGF0aWNfY2FzdDxUPih2MTNfKSwgc3RhdGljX2Nhc3Q8VD4odjE0XyksCi0gICAg
ICAgIHN0YXRpY19jYXN0PFQ+KHYxNV8pLCBzdGF0aWNfY2FzdDxUPih2MTZfKSwgc3RhdGljX2Nh
c3Q8VD4odjE3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxOF8pLCBzdGF0aWNfY2FzdDxU
Pih2MTlfKSwgc3RhdGljX2Nhc3Q8VD4odjIwXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYy
MV8pLCBzdGF0aWNfY2FzdDxUPih2MjJfKSwgc3RhdGljX2Nhc3Q8VD4odjIzXyl9OwotICAgIHJl
dHVybiBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIE5vIGltcGxlbWVu
dGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgVmFsdWVBcnJheTIzJiBvdGhlcik7Ci0KLSAgY29uc3QgVDEgdjFfOwotICBjb25zdCBUMiB2
Ml87Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3QgVDQgdjRfOwotICBjb25zdCBUNSB2NV87Ci0g
IGNvbnN0IFQ2IHY2XzsKLSAgY29uc3QgVDcgdjdfOwotICBjb25zdCBUOCB2OF87Ci0gIGNvbnN0
IFQ5IHY5XzsKLSAgY29uc3QgVDEwIHYxMF87Ci0gIGNvbnN0IFQxMSB2MTFfOwotICBjb25zdCBU
MTIgdjEyXzsKLSAgY29uc3QgVDEzIHYxM187Ci0gIGNvbnN0IFQxNCB2MTRfOwotICBjb25zdCBU
MTUgdjE1XzsKLSAgY29uc3QgVDE2IHYxNl87Ci0gIGNvbnN0IFQxNyB2MTdfOwotICBjb25zdCBU
MTggdjE4XzsKLSAgY29uc3QgVDE5IHYxOV87Ci0gIGNvbnN0IFQyMCB2MjBfOwotICBjb25zdCBU
MjEgdjIxXzsKLSAgY29uc3QgVDIyIHYyMl87Ci0gIGNvbnN0IFQyMyB2MjNfOwotfTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0
LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4
LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUg
VDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVu
YW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5h
bWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5
cGVuYW1lIFQyND4KLWNsYXNzIFZhbHVlQXJyYXkyNCB7Ci0gcHVibGljOgotICBWYWx1ZUFycmF5
MjQoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4
LCBUOSB2OSwKLSAgICAgIFQxMCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIsIFQxMyB2MTMsIFQxNCB2
MTQsIFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2MTcsCi0gICAgICBUMTggdjE4LCBUMTkgdjE5LCBU
MjAgdjIwLCBUMjEgdjIxLCBUMjIgdjIyLCBUMjMgdjIzLCBUMjQgdjI0KSA6IHYxXyh2MSksCi0g
ICAgICB2Ml8odjIpLCB2M18odjMpLCB2NF8odjQpLCB2NV8odjUpLCB2Nl8odjYpLCB2N18odjcp
LCB2OF8odjgpLCB2OV8odjkpLAotICAgICAgdjEwXyh2MTApLCB2MTFfKHYxMSksIHYxMl8odjEy
KSwgdjEzXyh2MTMpLCB2MTRfKHYxNCksIHYxNV8odjE1KSwKLSAgICAgIHYxNl8odjE2KSwgdjE3
Xyh2MTcpLCB2MThfKHYxOCksIHYxOV8odjE5KSwgdjIwXyh2MjApLCB2MjFfKHYyMSksCi0gICAg
ICB2MjJfKHYyMiksIHYyM18odjIzKSwgdjI0Xyh2MjQpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci0gIG9wZXJhdG9yIFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0
IFQgYXJyYXlbXSA9IHtzdGF0aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAot
ICAgICAgICBzdGF0aWNfY2FzdDxUPih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNf
Y2FzdDxUPih2NV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxU
Pih2N18pLCBzdGF0aWNfY2FzdDxUPih2OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2OV8p
LCBzdGF0aWNfY2FzdDxUPih2MTBfKSwgc3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAgIHN0
YXRpY19jYXN0PFQ+KHYxMl8pLCBzdGF0aWNfY2FzdDxUPih2MTNfKSwgc3RhdGljX2Nhc3Q8VD4o
djE0XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxNV8pLCBzdGF0aWNfY2FzdDxUPih2MTZf
KSwgc3RhdGljX2Nhc3Q8VD4odjE3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxOF8pLCBz
dGF0aWNfY2FzdDxUPih2MTlfKSwgc3RhdGljX2Nhc3Q8VD4odjIwXyksCi0gICAgICAgIHN0YXRp
Y19jYXN0PFQ+KHYyMV8pLCBzdGF0aWNfY2FzdDxUPih2MjJfKSwgc3RhdGljX2Nhc3Q8VD4odjIz
XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyNF8pfTsKLSAgICByZXR1cm4gVmFsdWVzSW4o
YXJyYXkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2ln
bm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVlQXJyYXky
NCYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJfOwotICBjb25zdCBU
MyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVfOwotICBjb25zdCBUNiB2Nl87
Ci0gIGNvbnN0IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhfOwotICBjb25zdCBUOSB2OV87Ci0gIGNv
bnN0IFQxMCB2MTBfOwotICBjb25zdCBUMTEgdjExXzsKLSAgY29uc3QgVDEyIHYxMl87Ci0gIGNv
bnN0IFQxMyB2MTNfOwotICBjb25zdCBUMTQgdjE0XzsKLSAgY29uc3QgVDE1IHYxNV87Ci0gIGNv
bnN0IFQxNiB2MTZfOwotICBjb25zdCBUMTcgdjE3XzsKLSAgY29uc3QgVDE4IHYxOF87Ci0gIGNv
bnN0IFQxOSB2MTlfOwotICBjb25zdCBUMjAgdjIwXzsKLSAgY29uc3QgVDIxIHYyMV87Ci0gIGNv
bnN0IFQyMiB2MjJfOwotICBjb25zdCBUMjMgdjIzXzsKLSAgY29uc3QgVDI0IHYyNF87Ci19Owot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5h
bWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5h
bWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBl
bmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAg
dHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0
eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQy
MywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjU+Ci1jbGFzcyBWYWx1ZUFycmF5MjUgewotIHB1
YmxpYzoKLSAgVmFsdWVBcnJheTI1KFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwg
VDYgdjYsIFQ3IHY3LCBUOCB2OCwgVDkgdjksCi0gICAgICBUMTAgdjEwLCBUMTEgdjExLCBUMTIg
djEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3LAotICAgICAg
VDE4IHYxOCwgVDE5IHYxOSwgVDIwIHYyMCwgVDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYyMywgVDI0
IHYyNCwKLSAgICAgIFQyNSB2MjUpIDogdjFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwgdjRfKHY0
KSwgdjVfKHY1KSwgdjZfKHY2KSwgdjdfKHY3KSwKLSAgICAgIHY4Xyh2OCksIHY5Xyh2OSksIHYx
MF8odjEwKSwgdjExXyh2MTEpLCB2MTJfKHYxMiksIHYxM18odjEzKSwgdjE0Xyh2MTQpLAotICAg
ICAgdjE1Xyh2MTUpLCB2MTZfKHYxNiksIHYxN18odjE3KSwgdjE4Xyh2MTgpLCB2MTlfKHYxOSks
IHYyMF8odjIwKSwKLSAgICAgIHYyMV8odjIxKSwgdjIyXyh2MjIpLCB2MjNfKHYyMyksIHYyNF8o
djI0KSwgdjI1Xyh2MjUpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIG9wZXJhdG9y
IFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0IFQgYXJyYXlbXSA9IHtzdGF0
aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAotICAgICAgICBzdGF0aWNfY2Fz
dDxUPih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNfY2FzdDxUPih2NV8pLAotICAg
ICAgICBzdGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxUPih2N18pLCBzdGF0aWNfY2Fz
dDxUPih2OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2OV8pLCBzdGF0aWNfY2FzdDxUPih2
MTBfKSwgc3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxMl8p
LCBzdGF0aWNfY2FzdDxUPih2MTNfKSwgc3RhdGljX2Nhc3Q8VD4odjE0XyksCi0gICAgICAgIHN0
YXRpY19jYXN0PFQ+KHYxNV8pLCBzdGF0aWNfY2FzdDxUPih2MTZfKSwgc3RhdGljX2Nhc3Q8VD4o
djE3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxOF8pLCBzdGF0aWNfY2FzdDxUPih2MTlf
KSwgc3RhdGljX2Nhc3Q8VD4odjIwXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyMV8pLCBz
dGF0aWNfY2FzdDxUPih2MjJfKSwgc3RhdGljX2Nhc3Q8VD4odjIzXyksCi0gICAgICAgIHN0YXRp
Y19jYXN0PFQ+KHYyNF8pLCBzdGF0aWNfY2FzdDxUPih2MjVfKX07Ci0gICAgcmV0dXJuIFZhbHVl
c0luKGFycmF5KTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBh
c3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1ZUFy
cmF5MjUmIG90aGVyKTsKLQotICBjb25zdCBUMSB2MV87Ci0gIGNvbnN0IFQyIHYyXzsKLSAgY29u
c3QgVDMgdjNfOwotICBjb25zdCBUNCB2NF87Ci0gIGNvbnN0IFQ1IHY1XzsKLSAgY29uc3QgVDYg
djZfOwotICBjb25zdCBUNyB2N187Ci0gIGNvbnN0IFQ4IHY4XzsKLSAgY29uc3QgVDkgdjlfOwot
ICBjb25zdCBUMTAgdjEwXzsKLSAgY29uc3QgVDExIHYxMV87Ci0gIGNvbnN0IFQxMiB2MTJfOwot
ICBjb25zdCBUMTMgdjEzXzsKLSAgY29uc3QgVDE0IHYxNF87Ci0gIGNvbnN0IFQxNSB2MTVfOwot
ICBjb25zdCBUMTYgdjE2XzsKLSAgY29uc3QgVDE3IHYxN187Ci0gIGNvbnN0IFQxOCB2MThfOwot
ICBjb25zdCBUMTkgdjE5XzsKLSAgY29uc3QgVDIwIHYyMF87Ci0gIGNvbnN0IFQyMSB2MjFfOwot
ICBjb25zdCBUMjIgdjIyXzsKLSAgY29uc3QgVDIzIHYyM187Ci0gIGNvbnN0IFQyNCB2MjRfOwot
ICBjb25zdCBUMjUgdjI1XzsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUg
VDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUg
VDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwK
LSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBU
MTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5h
bWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5
cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAg
ICB0eXBlbmFtZSBUMjY+Ci1jbGFzcyBWYWx1ZUFycmF5MjYgewotIHB1YmxpYzoKLSAgVmFsdWVB
cnJheTI2KFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBU
OCB2OCwgVDkgdjksCi0gICAgICBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBU
MTQgdjE0LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3LAotICAgICAgVDE4IHYxOCwgVDE5IHYx
OSwgVDIwIHYyMCwgVDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYyMywgVDI0IHYyNCwgVDI1IHYyNSwK
LSAgICAgIFQyNiB2MjYpIDogdjFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwgdjRfKHY0KSwgdjVf
KHY1KSwgdjZfKHY2KSwgdjdfKHY3KSwKLSAgICAgIHY4Xyh2OCksIHY5Xyh2OSksIHYxMF8odjEw
KSwgdjExXyh2MTEpLCB2MTJfKHYxMiksIHYxM18odjEzKSwgdjE0Xyh2MTQpLAotICAgICAgdjE1
Xyh2MTUpLCB2MTZfKHYxNiksIHYxN18odjE3KSwgdjE4Xyh2MTgpLCB2MTlfKHYxOSksIHYyMF8o
djIwKSwKLSAgICAgIHYyMV8odjIxKSwgdjIyXyh2MjIpLCB2MjNfKHYyMyksIHYyNF8odjI0KSwg
djI1Xyh2MjUpLCB2MjZfKHYyNikge30KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgb3Bl
cmF0b3IgUGFyYW1HZW5lcmF0b3I8VD4oKSBjb25zdCB7Ci0gICAgY29uc3QgVCBhcnJheVtdID0g
e3N0YXRpY19jYXN0PFQ+KHYxXyksIHN0YXRpY19jYXN0PFQ+KHYyXyksCi0gICAgICAgIHN0YXRp
Y19jYXN0PFQ+KHYzXyksIHN0YXRpY19jYXN0PFQ+KHY0XyksIHN0YXRpY19jYXN0PFQ+KHY1Xyks
Ci0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY2XyksIHN0YXRpY19jYXN0PFQ+KHY3XyksIHN0YXRp
Y19jYXN0PFQ+KHY4XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY5XyksIHN0YXRpY19jYXN0
PFQ+KHYxMF8pLCBzdGF0aWNfY2FzdDxUPih2MTFfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4o
djEyXyksIHN0YXRpY19jYXN0PFQ+KHYxM18pLCBzdGF0aWNfY2FzdDxUPih2MTRfKSwKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8VD4odjE1XyksIHN0YXRpY19jYXN0PFQ+KHYxNl8pLCBzdGF0aWNfY2Fz
dDxUPih2MTdfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE4XyksIHN0YXRpY19jYXN0PFQ+
KHYxOV8pLCBzdGF0aWNfY2FzdDxUPih2MjBfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjIx
XyksIHN0YXRpY19jYXN0PFQ+KHYyMl8pLCBzdGF0aWNfY2FzdDxUPih2MjNfKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8VD4odjI0XyksIHN0YXRpY19jYXN0PFQ+KHYyNV8pLCBzdGF0aWNfY2FzdDxU
Pih2MjZfKX07Ci0gICAgcmV0dXJuIFZhbHVlc0luKGFycmF5KTsKLSAgfQotCi0gcHJpdmF0ZToK
LSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICB2
b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1ZUFycmF5MjYmIG90aGVyKTsKLQotICBjb25zdCBUMSB2
MV87Ci0gIGNvbnN0IFQyIHYyXzsKLSAgY29uc3QgVDMgdjNfOwotICBjb25zdCBUNCB2NF87Ci0g
IGNvbnN0IFQ1IHY1XzsKLSAgY29uc3QgVDYgdjZfOwotICBjb25zdCBUNyB2N187Ci0gIGNvbnN0
IFQ4IHY4XzsKLSAgY29uc3QgVDkgdjlfOwotICBjb25zdCBUMTAgdjEwXzsKLSAgY29uc3QgVDEx
IHYxMV87Ci0gIGNvbnN0IFQxMiB2MTJfOwotICBjb25zdCBUMTMgdjEzXzsKLSAgY29uc3QgVDE0
IHYxNF87Ci0gIGNvbnN0IFQxNSB2MTVfOwotICBjb25zdCBUMTYgdjE2XzsKLSAgY29uc3QgVDE3
IHYxN187Ci0gIGNvbnN0IFQxOCB2MThfOwotICBjb25zdCBUMTkgdjE5XzsKLSAgY29uc3QgVDIw
IHYyMF87Ci0gIGNvbnN0IFQyMSB2MjFfOwotICBjb25zdCBUMjIgdjIyXzsKLSAgY29uc3QgVDIz
IHYyM187Ci0gIGNvbnN0IFQyNCB2MjRfOwotICBjb25zdCBUMjUgdjI1XzsKLSAgY29uc3QgVDI2
IHYyNl87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFt
ZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFt
ZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5h
bWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFt
ZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlw
ZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIs
IHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUg
VDI2LCB0eXBlbmFtZSBUMjc+Ci1jbGFzcyBWYWx1ZUFycmF5MjcgewotIHB1YmxpYzoKLSAgVmFs
dWVBcnJheTI3KFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3
LCBUOCB2OCwgVDkgdjksCi0gICAgICBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEz
LCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3LAotICAgICAgVDE4IHYxOCwgVDE5
IHYxOSwgVDIwIHYyMCwgVDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYyMywgVDI0IHYyNCwgVDI1IHYy
NSwKLSAgICAgIFQyNiB2MjYsIFQyNyB2MjcpIDogdjFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwg
djRfKHY0KSwgdjVfKHY1KSwgdjZfKHY2KSwKLSAgICAgIHY3Xyh2NyksIHY4Xyh2OCksIHY5Xyh2
OSksIHYxMF8odjEwKSwgdjExXyh2MTEpLCB2MTJfKHYxMiksIHYxM18odjEzKSwKLSAgICAgIHYx
NF8odjE0KSwgdjE1Xyh2MTUpLCB2MTZfKHYxNiksIHYxN18odjE3KSwgdjE4Xyh2MTgpLCB2MTlf
KHYxOSksCi0gICAgICB2MjBfKHYyMCksIHYyMV8odjIxKSwgdjIyXyh2MjIpLCB2MjNfKHYyMyks
IHYyNF8odjI0KSwgdjI1Xyh2MjUpLAotICAgICAgdjI2Xyh2MjYpLCB2MjdfKHYyNykge30KLQot
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgb3BlcmF0b3IgUGFyYW1HZW5lcmF0b3I8VD4oKSBj
b25zdCB7Ci0gICAgY29uc3QgVCBhcnJheVtdID0ge3N0YXRpY19jYXN0PFQ+KHYxXyksIHN0YXRp
Y19jYXN0PFQ+KHYyXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzXyksIHN0YXRpY19jYXN0
PFQ+KHY0XyksIHN0YXRpY19jYXN0PFQ+KHY1XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY2
XyksIHN0YXRpY19jYXN0PFQ+KHY3XyksIHN0YXRpY19jYXN0PFQ+KHY4XyksCi0gICAgICAgIHN0
YXRpY19jYXN0PFQ+KHY5XyksIHN0YXRpY19jYXN0PFQ+KHYxMF8pLCBzdGF0aWNfY2FzdDxUPih2
MTFfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjEyXyksIHN0YXRpY19jYXN0PFQ+KHYxM18p
LCBzdGF0aWNfY2FzdDxUPih2MTRfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE1XyksIHN0
YXRpY19jYXN0PFQ+KHYxNl8pLCBzdGF0aWNfY2FzdDxUPih2MTdfKSwKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8VD4odjE4XyksIHN0YXRpY19jYXN0PFQ+KHYxOV8pLCBzdGF0aWNfY2FzdDxUPih2MjBf
KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjIxXyksIHN0YXRpY19jYXN0PFQ+KHYyMl8pLCBz
dGF0aWNfY2FzdDxUPih2MjNfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjI0XyksIHN0YXRp
Y19jYXN0PFQ+KHYyNV8pLCBzdGF0aWNfY2FzdDxUPih2MjZfKSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8VD4odjI3Xyl9OwotICAgIHJldHVybiBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQotIHByaXZh
dGU6Ci0gIC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4K
LSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVmFsdWVBcnJheTI3JiBvdGhlcik7Ci0KLSAgY29uc3Qg
VDEgdjFfOwotICBjb25zdCBUMiB2Ml87Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3QgVDQgdjRf
OwotICBjb25zdCBUNSB2NV87Ci0gIGNvbnN0IFQ2IHY2XzsKLSAgY29uc3QgVDcgdjdfOwotICBj
b25zdCBUOCB2OF87Ci0gIGNvbnN0IFQ5IHY5XzsKLSAgY29uc3QgVDEwIHYxMF87Ci0gIGNvbnN0
IFQxMSB2MTFfOwotICBjb25zdCBUMTIgdjEyXzsKLSAgY29uc3QgVDEzIHYxM187Ci0gIGNvbnN0
IFQxNCB2MTRfOwotICBjb25zdCBUMTUgdjE1XzsKLSAgY29uc3QgVDE2IHYxNl87Ci0gIGNvbnN0
IFQxNyB2MTdfOwotICBjb25zdCBUMTggdjE4XzsKLSAgY29uc3QgVDE5IHYxOV87Ci0gIGNvbnN0
IFQyMCB2MjBfOwotICBjb25zdCBUMjEgdjIxXzsKLSAgY29uc3QgVDIyIHYyMl87Ci0gIGNvbnN0
IFQyMyB2MjNfOwotICBjb25zdCBUMjQgdjI0XzsKLSAgY29uc3QgVDI1IHYyNV87Ci0gIGNvbnN0
IFQyNiB2MjZfOwotICBjb25zdCBUMjcgdjI3XzsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
MSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0g
ICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5
cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEz
LCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1l
IFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBl
bmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVu
YW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4Pgot
Y2xhc3MgVmFsdWVBcnJheTI4IHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJyYXkyOChUMSB2MSwgVDIg
djIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LAotICAg
ICAgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYxNCwgVDE1IHYxNSwg
VDE2IHYxNiwgVDE3IHYxNywKLSAgICAgIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsIFQyMSB2
MjEsIFQyMiB2MjIsIFQyMyB2MjMsIFQyNCB2MjQsIFQyNSB2MjUsCi0gICAgICBUMjYgdjI2LCBU
MjcgdjI3LCBUMjggdjI4KSA6IHYxXyh2MSksIHYyXyh2MiksIHYzXyh2MyksIHY0Xyh2NCksIHY1
Xyh2NSksCi0gICAgICB2Nl8odjYpLCB2N18odjcpLCB2OF8odjgpLCB2OV8odjkpLCB2MTBfKHYx
MCksIHYxMV8odjExKSwgdjEyXyh2MTIpLAotICAgICAgdjEzXyh2MTMpLCB2MTRfKHYxNCksIHYx
NV8odjE1KSwgdjE2Xyh2MTYpLCB2MTdfKHYxNyksIHYxOF8odjE4KSwKLSAgICAgIHYxOV8odjE5
KSwgdjIwXyh2MjApLCB2MjFfKHYyMSksIHYyMl8odjIyKSwgdjIzXyh2MjMpLCB2MjRfKHYyNCks
Ci0gICAgICB2MjVfKHYyNSksIHYyNl8odjI2KSwgdjI3Xyh2MjcpLCB2MjhfKHYyOCkge30KLQot
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgb3BlcmF0b3IgUGFyYW1HZW5lcmF0b3I8VD4oKSBj
b25zdCB7Ci0gICAgY29uc3QgVCBhcnJheVtdID0ge3N0YXRpY19jYXN0PFQ+KHYxXyksIHN0YXRp
Y19jYXN0PFQ+KHYyXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzXyksIHN0YXRpY19jYXN0
PFQ+KHY0XyksIHN0YXRpY19jYXN0PFQ+KHY1XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY2
XyksIHN0YXRpY19jYXN0PFQ+KHY3XyksIHN0YXRpY19jYXN0PFQ+KHY4XyksCi0gICAgICAgIHN0
YXRpY19jYXN0PFQ+KHY5XyksIHN0YXRpY19jYXN0PFQ+KHYxMF8pLCBzdGF0aWNfY2FzdDxUPih2
MTFfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjEyXyksIHN0YXRpY19jYXN0PFQ+KHYxM18p
LCBzdGF0aWNfY2FzdDxUPih2MTRfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE1XyksIHN0
YXRpY19jYXN0PFQ+KHYxNl8pLCBzdGF0aWNfY2FzdDxUPih2MTdfKSwKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8VD4odjE4XyksIHN0YXRpY19jYXN0PFQ+KHYxOV8pLCBzdGF0aWNfY2FzdDxUPih2MjBf
KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjIxXyksIHN0YXRpY19jYXN0PFQ+KHYyMl8pLCBz
dGF0aWNfY2FzdDxUPih2MjNfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjI0XyksIHN0YXRp
Y19jYXN0PFQ+KHYyNV8pLCBzdGF0aWNfY2FzdDxUPih2MjZfKSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8VD4odjI3XyksIHN0YXRpY19jYXN0PFQ+KHYyOF8pfTsKLSAgICByZXR1cm4gVmFsdWVzSW4o
YXJyYXkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2ln
bm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVlQXJyYXky
OCYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJfOwotICBjb25zdCBU
MyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVfOwotICBjb25zdCBUNiB2Nl87
Ci0gIGNvbnN0IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhfOwotICBjb25zdCBUOSB2OV87Ci0gIGNv
bnN0IFQxMCB2MTBfOwotICBjb25zdCBUMTEgdjExXzsKLSAgY29uc3QgVDEyIHYxMl87Ci0gIGNv
bnN0IFQxMyB2MTNfOwotICBjb25zdCBUMTQgdjE0XzsKLSAgY29uc3QgVDE1IHYxNV87Ci0gIGNv
bnN0IFQxNiB2MTZfOwotICBjb25zdCBUMTcgdjE3XzsKLSAgY29uc3QgVDE4IHYxOF87Ci0gIGNv
bnN0IFQxOSB2MTlfOwotICBjb25zdCBUMjAgdjIwXzsKLSAgY29uc3QgVDIxIHYyMV87Ci0gIGNv
bnN0IFQyMiB2MjJfOwotICBjb25zdCBUMjMgdjIzXzsKLSAgY29uc3QgVDI0IHYyNF87Ci0gIGNv
bnN0IFQyNSB2MjVfOwotICBjb25zdCBUMjYgdjI2XzsKLSAgY29uc3QgVDI3IHYyN187Ci0gIGNv
bnN0IFQyOCB2MjhfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwg
dHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwg
dHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAg
IHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwg
dHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBU
MTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5h
bWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5
cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOT4KLWNs
YXNzIFZhbHVlQXJyYXkyOSB7Ci0gcHVibGljOgotICBWYWx1ZUFycmF5MjkoVDEgdjEsIFQyIHYy
LCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwKLSAgICAg
IFQxMCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIsIFQxMyB2MTMsIFQxNCB2MTQsIFQxNSB2MTUsIFQx
NiB2MTYsIFQxNyB2MTcsCi0gICAgICBUMTggdjE4LCBUMTkgdjE5LCBUMjAgdjIwLCBUMjEgdjIx
LCBUMjIgdjIyLCBUMjMgdjIzLCBUMjQgdjI0LCBUMjUgdjI1LAotICAgICAgVDI2IHYyNiwgVDI3
IHYyNywgVDI4IHYyOCwgVDI5IHYyOSkgOiB2MV8odjEpLCB2Ml8odjIpLCB2M18odjMpLCB2NF8o
djQpLAotICAgICAgdjVfKHY1KSwgdjZfKHY2KSwgdjdfKHY3KSwgdjhfKHY4KSwgdjlfKHY5KSwg
djEwXyh2MTApLCB2MTFfKHYxMSksCi0gICAgICB2MTJfKHYxMiksIHYxM18odjEzKSwgdjE0Xyh2
MTQpLCB2MTVfKHYxNSksIHYxNl8odjE2KSwgdjE3Xyh2MTcpLAotICAgICAgdjE4Xyh2MTgpLCB2
MTlfKHYxOSksIHYyMF8odjIwKSwgdjIxXyh2MjEpLCB2MjJfKHYyMiksIHYyM18odjIzKSwKLSAg
ICAgIHYyNF8odjI0KSwgdjI1Xyh2MjUpLCB2MjZfKHYyNiksIHYyN18odjI3KSwgdjI4Xyh2Mjgp
LCB2MjlfKHYyOSkge30KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgb3BlcmF0b3IgUGFy
YW1HZW5lcmF0b3I8VD4oKSBjb25zdCB7Ci0gICAgY29uc3QgVCBhcnJheVtdID0ge3N0YXRpY19j
YXN0PFQ+KHYxXyksIHN0YXRpY19jYXN0PFQ+KHYyXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+
KHYzXyksIHN0YXRpY19jYXN0PFQ+KHY0XyksIHN0YXRpY19jYXN0PFQ+KHY1XyksCi0gICAgICAg
IHN0YXRpY19jYXN0PFQ+KHY2XyksIHN0YXRpY19jYXN0PFQ+KHY3XyksIHN0YXRpY19jYXN0PFQ+
KHY4XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY5XyksIHN0YXRpY19jYXN0PFQ+KHYxMF8p
LCBzdGF0aWNfY2FzdDxUPih2MTFfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjEyXyksIHN0
YXRpY19jYXN0PFQ+KHYxM18pLCBzdGF0aWNfY2FzdDxUPih2MTRfKSwKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8VD4odjE1XyksIHN0YXRpY19jYXN0PFQ+KHYxNl8pLCBzdGF0aWNfY2FzdDxUPih2MTdf
KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE4XyksIHN0YXRpY19jYXN0PFQ+KHYxOV8pLCBz
dGF0aWNfY2FzdDxUPih2MjBfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjIxXyksIHN0YXRp
Y19jYXN0PFQ+KHYyMl8pLCBzdGF0aWNfY2FzdDxUPih2MjNfKSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8VD4odjI0XyksIHN0YXRpY19jYXN0PFQ+KHYyNV8pLCBzdGF0aWNfY2FzdDxUPih2MjZfKSwK
LSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjI3XyksIHN0YXRpY19jYXN0PFQ+KHYyOF8pLCBzdGF0
aWNfY2FzdDxUPih2MjlfKX07Ci0gICAgcmV0dXJuIFZhbHVlc0luKGFycmF5KTsKLSAgfQotCi0g
cHJpdmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9y
dGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1ZUFycmF5MjkmIG90aGVyKTsKLQotICBj
b25zdCBUMSB2MV87Ci0gIGNvbnN0IFQyIHYyXzsKLSAgY29uc3QgVDMgdjNfOwotICBjb25zdCBU
NCB2NF87Ci0gIGNvbnN0IFQ1IHY1XzsKLSAgY29uc3QgVDYgdjZfOwotICBjb25zdCBUNyB2N187
Ci0gIGNvbnN0IFQ4IHY4XzsKLSAgY29uc3QgVDkgdjlfOwotICBjb25zdCBUMTAgdjEwXzsKLSAg
Y29uc3QgVDExIHYxMV87Ci0gIGNvbnN0IFQxMiB2MTJfOwotICBjb25zdCBUMTMgdjEzXzsKLSAg
Y29uc3QgVDE0IHYxNF87Ci0gIGNvbnN0IFQxNSB2MTVfOwotICBjb25zdCBUMTYgdjE2XzsKLSAg
Y29uc3QgVDE3IHYxN187Ci0gIGNvbnN0IFQxOCB2MThfOwotICBjb25zdCBUMTkgdjE5XzsKLSAg
Y29uc3QgVDIwIHYyMF87Ci0gIGNvbnN0IFQyMSB2MjFfOwotICBjb25zdCBUMjIgdjIyXzsKLSAg
Y29uc3QgVDIzIHYyM187Ci0gIGNvbnN0IFQyNCB2MjRfOwotICBjb25zdCBUMjUgdjI1XzsKLSAg
Y29uc3QgVDI2IHYyNl87Ci0gIGNvbnN0IFQyNyB2MjdfOwotICBjb25zdCBUMjggdjI4XzsKLSAg
Y29uc3QgVDI5IHYyOV87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQy
LCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2
LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0g
ICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0
LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1l
IFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBl
bmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAg
dHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0
eXBlbmFtZSBUMzA+Ci1jbGFzcyBWYWx1ZUFycmF5MzAgewotIHB1YmxpYzoKLSAgVmFsdWVBcnJh
eTMwKFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2
OCwgVDkgdjksCi0gICAgICBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQg
djE0LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3LAotICAgICAgVDE4IHYxOCwgVDE5IHYxOSwg
VDIwIHYyMCwgVDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYyMywgVDI0IHYyNCwgVDI1IHYyNSwKLSAg
ICAgIFQyNiB2MjYsIFQyNyB2MjcsIFQyOCB2MjgsIFQyOSB2MjksIFQzMCB2MzApIDogdjFfKHYx
KSwgdjJfKHYyKSwgdjNfKHYzKSwKLSAgICAgIHY0Xyh2NCksIHY1Xyh2NSksIHY2Xyh2NiksIHY3
Xyh2NyksIHY4Xyh2OCksIHY5Xyh2OSksIHYxMF8odjEwKSwKLSAgICAgIHYxMV8odjExKSwgdjEy
Xyh2MTIpLCB2MTNfKHYxMyksIHYxNF8odjE0KSwgdjE1Xyh2MTUpLCB2MTZfKHYxNiksCi0gICAg
ICB2MTdfKHYxNyksIHYxOF8odjE4KSwgdjE5Xyh2MTkpLCB2MjBfKHYyMCksIHYyMV8odjIxKSwg
djIyXyh2MjIpLAotICAgICAgdjIzXyh2MjMpLCB2MjRfKHYyNCksIHYyNV8odjI1KSwgdjI2Xyh2
MjYpLCB2MjdfKHYyNyksIHYyOF8odjI4KSwKLSAgICAgIHYyOV8odjI5KSwgdjMwXyh2MzApIHt9
Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIG9wZXJhdG9yIFBhcmFtR2VuZXJhdG9yPFQ+
KCkgY29uc3QgewotICAgIGNvbnN0IFQgYXJyYXlbXSA9IHtzdGF0aWNfY2FzdDxUPih2MV8pLCBz
dGF0aWNfY2FzdDxUPih2Ml8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2M18pLCBzdGF0aWNf
Y2FzdDxUPih2NF8pLCBzdGF0aWNfY2FzdDxUPih2NV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxU
Pih2Nl8pLCBzdGF0aWNfY2FzdDxUPih2N18pLCBzdGF0aWNfY2FzdDxUPih2OF8pLAotICAgICAg
ICBzdGF0aWNfY2FzdDxUPih2OV8pLCBzdGF0aWNfY2FzdDxUPih2MTBfKSwgc3RhdGljX2Nhc3Q8
VD4odjExXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxMl8pLCBzdGF0aWNfY2FzdDxUPih2
MTNfKSwgc3RhdGljX2Nhc3Q8VD4odjE0XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxNV8p
LCBzdGF0aWNfY2FzdDxUPih2MTZfKSwgc3RhdGljX2Nhc3Q8VD4odjE3XyksCi0gICAgICAgIHN0
YXRpY19jYXN0PFQ+KHYxOF8pLCBzdGF0aWNfY2FzdDxUPih2MTlfKSwgc3RhdGljX2Nhc3Q8VD4o
djIwXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyMV8pLCBzdGF0aWNfY2FzdDxUPih2MjJf
KSwgc3RhdGljX2Nhc3Q8VD4odjIzXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyNF8pLCBz
dGF0aWNfY2FzdDxUPih2MjVfKSwgc3RhdGljX2Nhc3Q8VD4odjI2XyksCi0gICAgICAgIHN0YXRp
Y19jYXN0PFQ+KHYyN18pLCBzdGF0aWNfY2FzdDxUPih2MjhfKSwgc3RhdGljX2Nhc3Q8VD4odjI5
XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzMF8pfTsKLSAgICByZXR1cm4gVmFsdWVzSW4o
YXJyYXkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2ln
bm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVlQXJyYXkz
MCYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJfOwotICBjb25zdCBU
MyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVfOwotICBjb25zdCBUNiB2Nl87
Ci0gIGNvbnN0IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhfOwotICBjb25zdCBUOSB2OV87Ci0gIGNv
bnN0IFQxMCB2MTBfOwotICBjb25zdCBUMTEgdjExXzsKLSAgY29uc3QgVDEyIHYxMl87Ci0gIGNv
bnN0IFQxMyB2MTNfOwotICBjb25zdCBUMTQgdjE0XzsKLSAgY29uc3QgVDE1IHYxNV87Ci0gIGNv
bnN0IFQxNiB2MTZfOwotICBjb25zdCBUMTcgdjE3XzsKLSAgY29uc3QgVDE4IHYxOF87Ci0gIGNv
bnN0IFQxOSB2MTlfOwotICBjb25zdCBUMjAgdjIwXzsKLSAgY29uc3QgVDIxIHYyMV87Ci0gIGNv
bnN0IFQyMiB2MjJfOwotICBjb25zdCBUMjMgdjIzXzsKLSAgY29uc3QgVDI0IHYyNF87Ci0gIGNv
bnN0IFQyNSB2MjVfOwotICBjb25zdCBUMjYgdjI2XzsKLSAgY29uc3QgVDI3IHYyN187Ci0gIGNv
bnN0IFQyOCB2MjhfOwotICBjb25zdCBUMjkgdjI5XzsKLSAgY29uc3QgVDMwIHYzMF87Ci19Owot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5h
bWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5h
bWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBl
bmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAg
dHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0
eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQy
MywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFt
ZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlw
ZW5hbWUgVDMxPgotY2xhc3MgVmFsdWVBcnJheTMxIHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJyYXkz
MShUMSB2MSwgVDIgdjIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgs
IFQ5IHY5LAotICAgICAgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYx
NCwgVDE1IHYxNSwgVDE2IHYxNiwgVDE3IHYxNywKLSAgICAgIFQxOCB2MTgsIFQxOSB2MTksIFQy
MCB2MjAsIFQyMSB2MjEsIFQyMiB2MjIsIFQyMyB2MjMsIFQyNCB2MjQsIFQyNSB2MjUsCi0gICAg
ICBUMjYgdjI2LCBUMjcgdjI3LCBUMjggdjI4LCBUMjkgdjI5LCBUMzAgdjMwLCBUMzEgdjMxKSA6
IHYxXyh2MSksIHYyXyh2MiksCi0gICAgICB2M18odjMpLCB2NF8odjQpLCB2NV8odjUpLCB2Nl8o
djYpLCB2N18odjcpLCB2OF8odjgpLCB2OV8odjkpLCB2MTBfKHYxMCksCi0gICAgICB2MTFfKHYx
MSksIHYxMl8odjEyKSwgdjEzXyh2MTMpLCB2MTRfKHYxNCksIHYxNV8odjE1KSwgdjE2Xyh2MTYp
LAotICAgICAgdjE3Xyh2MTcpLCB2MThfKHYxOCksIHYxOV8odjE5KSwgdjIwXyh2MjApLCB2MjFf
KHYyMSksIHYyMl8odjIyKSwKLSAgICAgIHYyM18odjIzKSwgdjI0Xyh2MjQpLCB2MjVfKHYyNSks
IHYyNl8odjI2KSwgdjI3Xyh2MjcpLCB2MjhfKHYyOCksCi0gICAgICB2MjlfKHYyOSksIHYzMF8o
djMwKSwgdjMxXyh2MzEpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIG9wZXJhdG9y
IFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0IFQgYXJyYXlbXSA9IHtzdGF0
aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAotICAgICAgICBzdGF0aWNfY2Fz
dDxUPih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNfY2FzdDxUPih2NV8pLAotICAg
ICAgICBzdGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxUPih2N18pLCBzdGF0aWNfY2Fz
dDxUPih2OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2OV8pLCBzdGF0aWNfY2FzdDxUPih2
MTBfKSwgc3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxMl8p
LCBzdGF0aWNfY2FzdDxUPih2MTNfKSwgc3RhdGljX2Nhc3Q8VD4odjE0XyksCi0gICAgICAgIHN0
YXRpY19jYXN0PFQ+KHYxNV8pLCBzdGF0aWNfY2FzdDxUPih2MTZfKSwgc3RhdGljX2Nhc3Q8VD4o
djE3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxOF8pLCBzdGF0aWNfY2FzdDxUPih2MTlf
KSwgc3RhdGljX2Nhc3Q8VD4odjIwXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyMV8pLCBz
dGF0aWNfY2FzdDxUPih2MjJfKSwgc3RhdGljX2Nhc3Q8VD4odjIzXyksCi0gICAgICAgIHN0YXRp
Y19jYXN0PFQ+KHYyNF8pLCBzdGF0aWNfY2FzdDxUPih2MjVfKSwgc3RhdGljX2Nhc3Q8VD4odjI2
XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyN18pLCBzdGF0aWNfY2FzdDxUPih2MjhfKSwg
c3RhdGljX2Nhc3Q8VD4odjI5XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzMF8pLCBzdGF0
aWNfY2FzdDxUPih2MzFfKX07Ci0gICAgcmV0dXJuIFZhbHVlc0luKGFycmF5KTsKLSAgfQotCi0g
cHJpdmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9y
dGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1ZUFycmF5MzEmIG90aGVyKTsKLQotICBj
b25zdCBUMSB2MV87Ci0gIGNvbnN0IFQyIHYyXzsKLSAgY29uc3QgVDMgdjNfOwotICBjb25zdCBU
NCB2NF87Ci0gIGNvbnN0IFQ1IHY1XzsKLSAgY29uc3QgVDYgdjZfOwotICBjb25zdCBUNyB2N187
Ci0gIGNvbnN0IFQ4IHY4XzsKLSAgY29uc3QgVDkgdjlfOwotICBjb25zdCBUMTAgdjEwXzsKLSAg
Y29uc3QgVDExIHYxMV87Ci0gIGNvbnN0IFQxMiB2MTJfOwotICBjb25zdCBUMTMgdjEzXzsKLSAg
Y29uc3QgVDE0IHYxNF87Ci0gIGNvbnN0IFQxNSB2MTVfOwotICBjb25zdCBUMTYgdjE2XzsKLSAg
Y29uc3QgVDE3IHYxN187Ci0gIGNvbnN0IFQxOCB2MThfOwotICBjb25zdCBUMTkgdjE5XzsKLSAg
Y29uc3QgVDIwIHYyMF87Ci0gIGNvbnN0IFQyMSB2MjFfOwotICBjb25zdCBUMjIgdjIyXzsKLSAg
Y29uc3QgVDIzIHYyM187Ci0gIGNvbnN0IFQyNCB2MjRfOwotICBjb25zdCBUMjUgdjI1XzsKLSAg
Y29uc3QgVDI2IHYyNl87Ci0gIGNvbnN0IFQyNyB2MjdfOwotICBjb25zdCBUMjggdjI4XzsKLSAg
Y29uc3QgVDI5IHYyOV87Ci0gIGNvbnN0IFQzMCB2MzBfOwotICBjb25zdCBUMzEgdjMxXzsKLX07
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBl
bmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBl
bmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5
cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAg
ICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTks
IHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUg
VDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVu
YW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0
eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMj4KLWNsYXNzIFZhbHVlQXJyYXkzMiB7Ci0gcHVibGlj
OgotICBWYWx1ZUFycmF5MzIoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2
NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwKLSAgICAgIFQxMCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIs
IFQxMyB2MTMsIFQxNCB2MTQsIFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2MTcsCi0gICAgICBUMTgg
djE4LCBUMTkgdjE5LCBUMjAgdjIwLCBUMjEgdjIxLCBUMjIgdjIyLCBUMjMgdjIzLCBUMjQgdjI0
LCBUMjUgdjI1LAotICAgICAgVDI2IHYyNiwgVDI3IHYyNywgVDI4IHYyOCwgVDI5IHYyOSwgVDMw
IHYzMCwgVDMxIHYzMSwgVDMyIHYzMikgOiB2MV8odjEpLAotICAgICAgdjJfKHYyKSwgdjNfKHYz
KSwgdjRfKHY0KSwgdjVfKHY1KSwgdjZfKHY2KSwgdjdfKHY3KSwgdjhfKHY4KSwgdjlfKHY5KSwK
LSAgICAgIHYxMF8odjEwKSwgdjExXyh2MTEpLCB2MTJfKHYxMiksIHYxM18odjEzKSwgdjE0Xyh2
MTQpLCB2MTVfKHYxNSksCi0gICAgICB2MTZfKHYxNiksIHYxN18odjE3KSwgdjE4Xyh2MTgpLCB2
MTlfKHYxOSksIHYyMF8odjIwKSwgdjIxXyh2MjEpLAotICAgICAgdjIyXyh2MjIpLCB2MjNfKHYy
MyksIHYyNF8odjI0KSwgdjI1Xyh2MjUpLCB2MjZfKHYyNiksIHYyN18odjI3KSwKLSAgICAgIHYy
OF8odjI4KSwgdjI5Xyh2MjkpLCB2MzBfKHYzMCksIHYzMV8odjMxKSwgdjMyXyh2MzIpIHt9Ci0K
LSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIG9wZXJhdG9yIFBhcmFtR2VuZXJhdG9yPFQ+KCkg
Y29uc3QgewotICAgIGNvbnN0IFQgYXJyYXlbXSA9IHtzdGF0aWNfY2FzdDxUPih2MV8pLCBzdGF0
aWNfY2FzdDxUPih2Ml8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2M18pLCBzdGF0aWNfY2Fz
dDxUPih2NF8pLCBzdGF0aWNfY2FzdDxUPih2NV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2
Nl8pLCBzdGF0aWNfY2FzdDxUPih2N18pLCBzdGF0aWNfY2FzdDxUPih2OF8pLAotICAgICAgICBz
dGF0aWNfY2FzdDxUPih2OV8pLCBzdGF0aWNfY2FzdDxUPih2MTBfKSwgc3RhdGljX2Nhc3Q8VD4o
djExXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxMl8pLCBzdGF0aWNfY2FzdDxUPih2MTNf
KSwgc3RhdGljX2Nhc3Q8VD4odjE0XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxNV8pLCBz
dGF0aWNfY2FzdDxUPih2MTZfKSwgc3RhdGljX2Nhc3Q8VD4odjE3XyksCi0gICAgICAgIHN0YXRp
Y19jYXN0PFQ+KHYxOF8pLCBzdGF0aWNfY2FzdDxUPih2MTlfKSwgc3RhdGljX2Nhc3Q8VD4odjIw
XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyMV8pLCBzdGF0aWNfY2FzdDxUPih2MjJfKSwg
c3RhdGljX2Nhc3Q8VD4odjIzXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyNF8pLCBzdGF0
aWNfY2FzdDxUPih2MjVfKSwgc3RhdGljX2Nhc3Q8VD4odjI2XyksCi0gICAgICAgIHN0YXRpY19j
YXN0PFQ+KHYyN18pLCBzdGF0aWNfY2FzdDxUPih2MjhfKSwgc3RhdGljX2Nhc3Q8VD4odjI5Xyks
Ci0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzMF8pLCBzdGF0aWNfY2FzdDxUPih2MzFfKSwgc3Rh
dGljX2Nhc3Q8VD4odjMyXyl9OwotICAgIHJldHVybiBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQot
IHByaXZhdGU6Ci0gIC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBv
cnRlZC4KLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVmFsdWVBcnJheTMyJiBvdGhlcik7Ci0KLSAg
Y29uc3QgVDEgdjFfOwotICBjb25zdCBUMiB2Ml87Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3Qg
VDQgdjRfOwotICBjb25zdCBUNSB2NV87Ci0gIGNvbnN0IFQ2IHY2XzsKLSAgY29uc3QgVDcgdjdf
OwotICBjb25zdCBUOCB2OF87Ci0gIGNvbnN0IFQ5IHY5XzsKLSAgY29uc3QgVDEwIHYxMF87Ci0g
IGNvbnN0IFQxMSB2MTFfOwotICBjb25zdCBUMTIgdjEyXzsKLSAgY29uc3QgVDEzIHYxM187Ci0g
IGNvbnN0IFQxNCB2MTRfOwotICBjb25zdCBUMTUgdjE1XzsKLSAgY29uc3QgVDE2IHYxNl87Ci0g
IGNvbnN0IFQxNyB2MTdfOwotICBjb25zdCBUMTggdjE4XzsKLSAgY29uc3QgVDE5IHYxOV87Ci0g
IGNvbnN0IFQyMCB2MjBfOwotICBjb25zdCBUMjEgdjIxXzsKLSAgY29uc3QgVDIyIHYyMl87Ci0g
IGNvbnN0IFQyMyB2MjNfOwotICBjb25zdCBUMjQgdjI0XzsKLSAgY29uc3QgVDI1IHYyNV87Ci0g
IGNvbnN0IFQyNiB2MjZfOwotICBjb25zdCBUMjcgdjI3XzsKLSAgY29uc3QgVDI4IHYyOF87Ci0g
IGNvbnN0IFQyOSB2MjlfOwotICBjb25zdCBUMzAgdjMwXzsKLSAgY29uc3QgVDMxIHYzMV87Ci0g
IGNvbnN0IFQzMiB2MzJfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBU
MiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBU
NiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAot
ICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQx
NCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFt
ZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlw
ZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAg
IHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwg
dHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBU
MzM+Ci1jbGFzcyBWYWx1ZUFycmF5MzMgewotIHB1YmxpYzoKLSAgVmFsdWVBcnJheTMzKFQxIHYx
LCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2OCwgVDkgdjks
Ci0gICAgICBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUg
djE1LCBUMTYgdjE2LCBUMTcgdjE3LAotICAgICAgVDE4IHYxOCwgVDE5IHYxOSwgVDIwIHYyMCwg
VDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYyMywgVDI0IHYyNCwgVDI1IHYyNSwKLSAgICAgIFQyNiB2
MjYsIFQyNyB2MjcsIFQyOCB2MjgsIFQyOSB2MjksIFQzMCB2MzAsIFQzMSB2MzEsIFQzMiB2MzIs
Ci0gICAgICBUMzMgdjMzKSA6IHYxXyh2MSksIHYyXyh2MiksIHYzXyh2MyksIHY0Xyh2NCksIHY1
Xyh2NSksIHY2Xyh2NiksIHY3Xyh2NyksCi0gICAgICB2OF8odjgpLCB2OV8odjkpLCB2MTBfKHYx
MCksIHYxMV8odjExKSwgdjEyXyh2MTIpLCB2MTNfKHYxMyksIHYxNF8odjE0KSwKLSAgICAgIHYx
NV8odjE1KSwgdjE2Xyh2MTYpLCB2MTdfKHYxNyksIHYxOF8odjE4KSwgdjE5Xyh2MTkpLCB2MjBf
KHYyMCksCi0gICAgICB2MjFfKHYyMSksIHYyMl8odjIyKSwgdjIzXyh2MjMpLCB2MjRfKHYyNCks
IHYyNV8odjI1KSwgdjI2Xyh2MjYpLAotICAgICAgdjI3Xyh2MjcpLCB2MjhfKHYyOCksIHYyOV8o
djI5KSwgdjMwXyh2MzApLCB2MzFfKHYzMSksIHYzMl8odjMyKSwKLSAgICAgIHYzM18odjMzKSB7
fQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjxU
PigpIGNvbnN0IHsKLSAgICBjb25zdCBUIGFycmF5W10gPSB7c3RhdGljX2Nhc3Q8VD4odjFfKSwg
c3RhdGljX2Nhc3Q8VD4odjJfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjNfKSwgc3RhdGlj
X2Nhc3Q8VD4odjRfKSwgc3RhdGljX2Nhc3Q8VD4odjVfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8
VD4odjZfKSwgc3RhdGljX2Nhc3Q8VD4odjdfKSwgc3RhdGljX2Nhc3Q8VD4odjhfKSwKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8VD4odjlfKSwgc3RhdGljX2Nhc3Q8VD4odjEwXyksIHN0YXRpY19jYXN0
PFQ+KHYxMV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MTJfKSwgc3RhdGljX2Nhc3Q8VD4o
djEzXyksIHN0YXRpY19jYXN0PFQ+KHYxNF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MTVf
KSwgc3RhdGljX2Nhc3Q8VD4odjE2XyksIHN0YXRpY19jYXN0PFQ+KHYxN18pLAotICAgICAgICBz
dGF0aWNfY2FzdDxUPih2MThfKSwgc3RhdGljX2Nhc3Q8VD4odjE5XyksIHN0YXRpY19jYXN0PFQ+
KHYyMF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MjFfKSwgc3RhdGljX2Nhc3Q8VD4odjIy
XyksIHN0YXRpY19jYXN0PFQ+KHYyM18pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MjRfKSwg
c3RhdGljX2Nhc3Q8VD4odjI1XyksIHN0YXRpY19jYXN0PFQ+KHYyNl8pLAotICAgICAgICBzdGF0
aWNfY2FzdDxUPih2MjdfKSwgc3RhdGljX2Nhc3Q8VD4odjI4XyksIHN0YXRpY19jYXN0PFQ+KHYy
OV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MzBfKSwgc3RhdGljX2Nhc3Q8VD4odjMxXyks
IHN0YXRpY19jYXN0PFQ+KHYzMl8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MzNfKX07Ci0g
ICAgcmV0dXJuIFZhbHVlc0luKGFycmF5KTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gTm8gaW1w
bGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9y
PShjb25zdCBWYWx1ZUFycmF5MzMmIG90aGVyKTsKLQotICBjb25zdCBUMSB2MV87Ci0gIGNvbnN0
IFQyIHYyXzsKLSAgY29uc3QgVDMgdjNfOwotICBjb25zdCBUNCB2NF87Ci0gIGNvbnN0IFQ1IHY1
XzsKLSAgY29uc3QgVDYgdjZfOwotICBjb25zdCBUNyB2N187Ci0gIGNvbnN0IFQ4IHY4XzsKLSAg
Y29uc3QgVDkgdjlfOwotICBjb25zdCBUMTAgdjEwXzsKLSAgY29uc3QgVDExIHYxMV87Ci0gIGNv
bnN0IFQxMiB2MTJfOwotICBjb25zdCBUMTMgdjEzXzsKLSAgY29uc3QgVDE0IHYxNF87Ci0gIGNv
bnN0IFQxNSB2MTVfOwotICBjb25zdCBUMTYgdjE2XzsKLSAgY29uc3QgVDE3IHYxN187Ci0gIGNv
bnN0IFQxOCB2MThfOwotICBjb25zdCBUMTkgdjE5XzsKLSAgY29uc3QgVDIwIHYyMF87Ci0gIGNv
bnN0IFQyMSB2MjFfOwotICBjb25zdCBUMjIgdjIyXzsKLSAgY29uc3QgVDIzIHYyM187Ci0gIGNv
bnN0IFQyNCB2MjRfOwotICBjb25zdCBUMjUgdjI1XzsKLSAgY29uc3QgVDI2IHYyNl87Ci0gIGNv
bnN0IFQyNyB2MjdfOwotICBjb25zdCBUMjggdjI4XzsKLSAgY29uc3QgVDI5IHYyOV87Ci0gIGNv
bnN0IFQzMCB2MzBfOwotICBjb25zdCBUMzEgdjMxXzsKLSAgY29uc3QgVDMyIHYzMl87Ci0gIGNv
bnN0IFQzMyB2MzNfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwg
dHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwg
dHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAg
IHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwg
dHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBU
MTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5h
bWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5
cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlw
ZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMs
IHR5cGVuYW1lIFQzND4KLWNsYXNzIFZhbHVlQXJyYXkzNCB7Ci0gcHVibGljOgotICBWYWx1ZUFy
cmF5MzQoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4
IHY4LCBUOSB2OSwKLSAgICAgIFQxMCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIsIFQxMyB2MTMsIFQx
NCB2MTQsIFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2MTcsCi0gICAgICBUMTggdjE4LCBUMTkgdjE5
LCBUMjAgdjIwLCBUMjEgdjIxLCBUMjIgdjIyLCBUMjMgdjIzLCBUMjQgdjI0LCBUMjUgdjI1LAot
ICAgICAgVDI2IHYyNiwgVDI3IHYyNywgVDI4IHYyOCwgVDI5IHYyOSwgVDMwIHYzMCwgVDMxIHYz
MSwgVDMyIHYzMiwgVDMzIHYzMywKLSAgICAgIFQzNCB2MzQpIDogdjFfKHYxKSwgdjJfKHYyKSwg
djNfKHYzKSwgdjRfKHY0KSwgdjVfKHY1KSwgdjZfKHY2KSwgdjdfKHY3KSwKLSAgICAgIHY4Xyh2
OCksIHY5Xyh2OSksIHYxMF8odjEwKSwgdjExXyh2MTEpLCB2MTJfKHYxMiksIHYxM18odjEzKSwg
djE0Xyh2MTQpLAotICAgICAgdjE1Xyh2MTUpLCB2MTZfKHYxNiksIHYxN18odjE3KSwgdjE4Xyh2
MTgpLCB2MTlfKHYxOSksIHYyMF8odjIwKSwKLSAgICAgIHYyMV8odjIxKSwgdjIyXyh2MjIpLCB2
MjNfKHYyMyksIHYyNF8odjI0KSwgdjI1Xyh2MjUpLCB2MjZfKHYyNiksCi0gICAgICB2MjdfKHYy
NyksIHYyOF8odjI4KSwgdjI5Xyh2MjkpLCB2MzBfKHYzMCksIHYzMV8odjMxKSwgdjMyXyh2MzIp
LAotICAgICAgdjMzXyh2MzMpLCB2MzRfKHYzNCkge30KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KLSAgb3BlcmF0b3IgUGFyYW1HZW5lcmF0b3I8VD4oKSBjb25zdCB7Ci0gICAgY29uc3QgVCBh
cnJheVtdID0ge3N0YXRpY19jYXN0PFQ+KHYxXyksIHN0YXRpY19jYXN0PFQ+KHYyXyksCi0gICAg
ICAgIHN0YXRpY19jYXN0PFQ+KHYzXyksIHN0YXRpY19jYXN0PFQ+KHY0XyksIHN0YXRpY19jYXN0
PFQ+KHY1XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY2XyksIHN0YXRpY19jYXN0PFQ+KHY3
XyksIHN0YXRpY19jYXN0PFQ+KHY4XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY5XyksIHN0
YXRpY19jYXN0PFQ+KHYxMF8pLCBzdGF0aWNfY2FzdDxUPih2MTFfKSwKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8VD4odjEyXyksIHN0YXRpY19jYXN0PFQ+KHYxM18pLCBzdGF0aWNfY2FzdDxUPih2MTRf
KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE1XyksIHN0YXRpY19jYXN0PFQ+KHYxNl8pLCBz
dGF0aWNfY2FzdDxUPih2MTdfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE4XyksIHN0YXRp
Y19jYXN0PFQ+KHYxOV8pLCBzdGF0aWNfY2FzdDxUPih2MjBfKSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8VD4odjIxXyksIHN0YXRpY19jYXN0PFQ+KHYyMl8pLCBzdGF0aWNfY2FzdDxUPih2MjNfKSwK
LSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjI0XyksIHN0YXRpY19jYXN0PFQ+KHYyNV8pLCBzdGF0
aWNfY2FzdDxUPih2MjZfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjI3XyksIHN0YXRpY19j
YXN0PFQ+KHYyOF8pLCBzdGF0aWNfY2FzdDxUPih2MjlfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8
VD4odjMwXyksIHN0YXRpY19jYXN0PFQ+KHYzMV8pLCBzdGF0aWNfY2FzdDxUPih2MzJfKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8VD4odjMzXyksIHN0YXRpY19jYXN0PFQ+KHYzNF8pfTsKLSAgICBy
ZXR1cm4gVmFsdWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBsZW1l
bnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNv
bnN0IFZhbHVlQXJyYXkzNCYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3QgVDIg
djJfOwotICBjb25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVfOwot
ICBjb25zdCBUNiB2Nl87Ci0gIGNvbnN0IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhfOwotICBjb25z
dCBUOSB2OV87Ci0gIGNvbnN0IFQxMCB2MTBfOwotICBjb25zdCBUMTEgdjExXzsKLSAgY29uc3Qg
VDEyIHYxMl87Ci0gIGNvbnN0IFQxMyB2MTNfOwotICBjb25zdCBUMTQgdjE0XzsKLSAgY29uc3Qg
VDE1IHYxNV87Ci0gIGNvbnN0IFQxNiB2MTZfOwotICBjb25zdCBUMTcgdjE3XzsKLSAgY29uc3Qg
VDE4IHYxOF87Ci0gIGNvbnN0IFQxOSB2MTlfOwotICBjb25zdCBUMjAgdjIwXzsKLSAgY29uc3Qg
VDIxIHYyMV87Ci0gIGNvbnN0IFQyMiB2MjJfOwotICBjb25zdCBUMjMgdjIzXzsKLSAgY29uc3Qg
VDI0IHYyNF87Ci0gIGNvbnN0IFQyNSB2MjVfOwotICBjb25zdCBUMjYgdjI2XzsKLSAgY29uc3Qg
VDI3IHYyN187Ci0gIGNvbnN0IFQyOCB2MjhfOwotICBjb25zdCBUMjkgdjI5XzsKLSAgY29uc3Qg
VDMwIHYzMF87Ci0gIGNvbnN0IFQzMSB2MzFfOwotICBjb25zdCBUMzIgdjMyXzsKLSAgY29uc3Qg
VDMzIHYzM187Ci0gIGNvbnN0IFQzNCB2MzRfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQx
LCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAg
ICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlw
ZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMs
IHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUg
VDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVu
YW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5h
bWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5
cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMy
LCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1PgotY2xhc3MgVmFsdWVB
cnJheTM1IHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJyYXkzNShUMSB2MSwgVDIgdjIsIFQzIHYzLCBU
NCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LAotICAgICAgVDEwIHYxMCwg
VDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYxNCwgVDE1IHYxNSwgVDE2IHYxNiwgVDE3
IHYxNywKLSAgICAgIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsIFQyMSB2MjEsIFQyMiB2MjIs
IFQyMyB2MjMsIFQyNCB2MjQsIFQyNSB2MjUsCi0gICAgICBUMjYgdjI2LCBUMjcgdjI3LCBUMjgg
djI4LCBUMjkgdjI5LCBUMzAgdjMwLCBUMzEgdjMxLCBUMzIgdjMyLCBUMzMgdjMzLAotICAgICAg
VDM0IHYzNCwgVDM1IHYzNSkgOiB2MV8odjEpLCB2Ml8odjIpLCB2M18odjMpLCB2NF8odjQpLCB2
NV8odjUpLCB2Nl8odjYpLAotICAgICAgdjdfKHY3KSwgdjhfKHY4KSwgdjlfKHY5KSwgdjEwXyh2
MTApLCB2MTFfKHYxMSksIHYxMl8odjEyKSwgdjEzXyh2MTMpLAotICAgICAgdjE0Xyh2MTQpLCB2
MTVfKHYxNSksIHYxNl8odjE2KSwgdjE3Xyh2MTcpLCB2MThfKHYxOCksIHYxOV8odjE5KSwKLSAg
ICAgIHYyMF8odjIwKSwgdjIxXyh2MjEpLCB2MjJfKHYyMiksIHYyM18odjIzKSwgdjI0Xyh2MjQp
LCB2MjVfKHYyNSksCi0gICAgICB2MjZfKHYyNiksIHYyN18odjI3KSwgdjI4Xyh2MjgpLCB2Mjlf
KHYyOSksIHYzMF8odjMwKSwgdjMxXyh2MzEpLAotICAgICAgdjMyXyh2MzIpLCB2MzNfKHYzMyks
IHYzNF8odjM0KSwgdjM1Xyh2MzUpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIG9w
ZXJhdG9yIFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0IFQgYXJyYXlbXSA9
IHtzdGF0aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAotICAgICAgICBzdGF0
aWNfY2FzdDxUPih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNfY2FzdDxUPih2NV8p
LAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxUPih2N18pLCBzdGF0
aWNfY2FzdDxUPih2OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2OV8pLCBzdGF0aWNfY2Fz
dDxUPih2MTBfKSwgc3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+
KHYxMl8pLCBzdGF0aWNfY2FzdDxUPih2MTNfKSwgc3RhdGljX2Nhc3Q8VD4odjE0XyksCi0gICAg
ICAgIHN0YXRpY19jYXN0PFQ+KHYxNV8pLCBzdGF0aWNfY2FzdDxUPih2MTZfKSwgc3RhdGljX2Nh
c3Q8VD4odjE3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxOF8pLCBzdGF0aWNfY2FzdDxU
Pih2MTlfKSwgc3RhdGljX2Nhc3Q8VD4odjIwXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYy
MV8pLCBzdGF0aWNfY2FzdDxUPih2MjJfKSwgc3RhdGljX2Nhc3Q8VD4odjIzXyksCi0gICAgICAg
IHN0YXRpY19jYXN0PFQ+KHYyNF8pLCBzdGF0aWNfY2FzdDxUPih2MjVfKSwgc3RhdGljX2Nhc3Q8
VD4odjI2XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyN18pLCBzdGF0aWNfY2FzdDxUPih2
MjhfKSwgc3RhdGljX2Nhc3Q8VD4odjI5XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzMF8p
LCBzdGF0aWNfY2FzdDxUPih2MzFfKSwgc3RhdGljX2Nhc3Q8VD4odjMyXyksCi0gICAgICAgIHN0
YXRpY19jYXN0PFQ+KHYzM18pLCBzdGF0aWNfY2FzdDxUPih2MzRfKSwgc3RhdGljX2Nhc3Q8VD4o
djM1Xyl9OwotICAgIHJldHVybiBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0g
IC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgdm9p
ZCBvcGVyYXRvcj0oY29uc3QgVmFsdWVBcnJheTM1JiBvdGhlcik7Ci0KLSAgY29uc3QgVDEgdjFf
OwotICBjb25zdCBUMiB2Ml87Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3QgVDQgdjRfOwotICBj
b25zdCBUNSB2NV87Ci0gIGNvbnN0IFQ2IHY2XzsKLSAgY29uc3QgVDcgdjdfOwotICBjb25zdCBU
OCB2OF87Ci0gIGNvbnN0IFQ5IHY5XzsKLSAgY29uc3QgVDEwIHYxMF87Ci0gIGNvbnN0IFQxMSB2
MTFfOwotICBjb25zdCBUMTIgdjEyXzsKLSAgY29uc3QgVDEzIHYxM187Ci0gIGNvbnN0IFQxNCB2
MTRfOwotICBjb25zdCBUMTUgdjE1XzsKLSAgY29uc3QgVDE2IHYxNl87Ci0gIGNvbnN0IFQxNyB2
MTdfOwotICBjb25zdCBUMTggdjE4XzsKLSAgY29uc3QgVDE5IHYxOV87Ci0gIGNvbnN0IFQyMCB2
MjBfOwotICBjb25zdCBUMjEgdjIxXzsKLSAgY29uc3QgVDIyIHYyMl87Ci0gIGNvbnN0IFQyMyB2
MjNfOwotICBjb25zdCBUMjQgdjI0XzsKLSAgY29uc3QgVDI1IHYyNV87Ci0gIGNvbnN0IFQyNiB2
MjZfOwotICBjb25zdCBUMjcgdjI3XzsKLSAgY29uc3QgVDI4IHYyOF87Ci0gIGNvbnN0IFQyOSB2
MjlfOwotICBjb25zdCBUMzAgdjMwXzsKLSAgY29uc3QgVDMxIHYzMV87Ci0gIGNvbnN0IFQzMiB2
MzJfOwotICBjb25zdCBUMzMgdjMzXzsKLSAgY29uc3QgVDM0IHYzNF87Ci0gIGNvbnN0IFQzNSB2
MzVfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUg
VDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUg
VDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1l
IFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUg
VDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVu
YW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0
eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQy
NiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMw
LAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1l
IFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNj4KLWNsYXNzIFZhbHVlQXJyYXkz
NiB7Ci0gcHVibGljOgotICBWYWx1ZUFycmF5MzYoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQs
IFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwKLSAgICAgIFQxMCB2MTAsIFQxMSB2
MTEsIFQxMiB2MTIsIFQxMyB2MTMsIFQxNCB2MTQsIFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2MTcs
Ci0gICAgICBUMTggdjE4LCBUMTkgdjE5LCBUMjAgdjIwLCBUMjEgdjIxLCBUMjIgdjIyLCBUMjMg
djIzLCBUMjQgdjI0LCBUMjUgdjI1LAotICAgICAgVDI2IHYyNiwgVDI3IHYyNywgVDI4IHYyOCwg
VDI5IHYyOSwgVDMwIHYzMCwgVDMxIHYzMSwgVDMyIHYzMiwgVDMzIHYzMywKLSAgICAgIFQzNCB2
MzQsIFQzNSB2MzUsIFQzNiB2MzYpIDogdjFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwgdjRfKHY0
KSwgdjVfKHY1KSwKLSAgICAgIHY2Xyh2NiksIHY3Xyh2NyksIHY4Xyh2OCksIHY5Xyh2OSksIHYx
MF8odjEwKSwgdjExXyh2MTEpLCB2MTJfKHYxMiksCi0gICAgICB2MTNfKHYxMyksIHYxNF8odjE0
KSwgdjE1Xyh2MTUpLCB2MTZfKHYxNiksIHYxN18odjE3KSwgdjE4Xyh2MTgpLAotICAgICAgdjE5
Xyh2MTkpLCB2MjBfKHYyMCksIHYyMV8odjIxKSwgdjIyXyh2MjIpLCB2MjNfKHYyMyksIHYyNF8o
djI0KSwKLSAgICAgIHYyNV8odjI1KSwgdjI2Xyh2MjYpLCB2MjdfKHYyNyksIHYyOF8odjI4KSwg
djI5Xyh2MjkpLCB2MzBfKHYzMCksCi0gICAgICB2MzFfKHYzMSksIHYzMl8odjMyKSwgdjMzXyh2
MzMpLCB2MzRfKHYzNCksIHYzNV8odjM1KSwgdjM2Xyh2MzYpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci0gIG9wZXJhdG9yIFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNv
bnN0IFQgYXJyYXlbXSA9IHtzdGF0aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8p
LAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0
aWNfY2FzdDxUPih2NV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2Fz
dDxUPih2N18pLCBzdGF0aWNfY2FzdDxUPih2OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2
OV8pLCBzdGF0aWNfY2FzdDxUPih2MTBfKSwgc3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAg
IHN0YXRpY19jYXN0PFQ+KHYxMl8pLCBzdGF0aWNfY2FzdDxUPih2MTNfKSwgc3RhdGljX2Nhc3Q8
VD4odjE0XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxNV8pLCBzdGF0aWNfY2FzdDxUPih2
MTZfKSwgc3RhdGljX2Nhc3Q8VD4odjE3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxOF8p
LCBzdGF0aWNfY2FzdDxUPih2MTlfKSwgc3RhdGljX2Nhc3Q8VD4odjIwXyksCi0gICAgICAgIHN0
YXRpY19jYXN0PFQ+KHYyMV8pLCBzdGF0aWNfY2FzdDxUPih2MjJfKSwgc3RhdGljX2Nhc3Q8VD4o
djIzXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyNF8pLCBzdGF0aWNfY2FzdDxUPih2MjVf
KSwgc3RhdGljX2Nhc3Q8VD4odjI2XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyN18pLCBz
dGF0aWNfY2FzdDxUPih2MjhfKSwgc3RhdGljX2Nhc3Q8VD4odjI5XyksCi0gICAgICAgIHN0YXRp
Y19jYXN0PFQ+KHYzMF8pLCBzdGF0aWNfY2FzdDxUPih2MzFfKSwgc3RhdGljX2Nhc3Q8VD4odjMy
XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzM18pLCBzdGF0aWNfY2FzdDxUPih2MzRfKSwg
c3RhdGljX2Nhc3Q8VD4odjM1XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzNl8pfTsKLSAg
ICByZXR1cm4gVmFsdWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBs
ZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9
KGNvbnN0IFZhbHVlQXJyYXkzNiYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3Qg
VDIgdjJfOwotICBjb25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVf
OwotICBjb25zdCBUNiB2Nl87Ci0gIGNvbnN0IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhfOwotICBj
b25zdCBUOSB2OV87Ci0gIGNvbnN0IFQxMCB2MTBfOwotICBjb25zdCBUMTEgdjExXzsKLSAgY29u
c3QgVDEyIHYxMl87Ci0gIGNvbnN0IFQxMyB2MTNfOwotICBjb25zdCBUMTQgdjE0XzsKLSAgY29u
c3QgVDE1IHYxNV87Ci0gIGNvbnN0IFQxNiB2MTZfOwotICBjb25zdCBUMTcgdjE3XzsKLSAgY29u
c3QgVDE4IHYxOF87Ci0gIGNvbnN0IFQxOSB2MTlfOwotICBjb25zdCBUMjAgdjIwXzsKLSAgY29u
c3QgVDIxIHYyMV87Ci0gIGNvbnN0IFQyMiB2MjJfOwotICBjb25zdCBUMjMgdjIzXzsKLSAgY29u
c3QgVDI0IHYyNF87Ci0gIGNvbnN0IFQyNSB2MjVfOwotICBjb25zdCBUMjYgdjI2XzsKLSAgY29u
c3QgVDI3IHYyN187Ci0gIGNvbnN0IFQyOCB2MjhfOwotICBjb25zdCBUMjkgdjI5XzsKLSAgY29u
c3QgVDMwIHYzMF87Ci0gIGNvbnN0IFQzMSB2MzFfOwotICBjb25zdCBUMzIgdjMyXzsKLSAgY29u
c3QgVDMzIHYzM187Ci0gIGNvbnN0IFQzNCB2MzRfOwotICBjb25zdCBUMzUgdjM1XzsKLSAgY29u
c3QgVDM2IHYzNl87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0
eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0
eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAg
dHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0
eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQx
OCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFt
ZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlw
ZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBl
bmFtZSBUMzAsCi0gICAgdHlwZW5hbWUgVDMxLCB0eXBlbmFtZSBUMzIsIHR5cGVuYW1lIFQzMywg
dHlwZW5hbWUgVDM0LCB0eXBlbmFtZSBUMzUsCi0gICAgdHlwZW5hbWUgVDM2LCB0eXBlbmFtZSBU
Mzc+Ci1jbGFzcyBWYWx1ZUFycmF5MzcgewotIHB1YmxpYzoKLSAgVmFsdWVBcnJheTM3KFQxIHYx
LCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2OCwgVDkgdjks
Ci0gICAgICBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUg
djE1LCBUMTYgdjE2LCBUMTcgdjE3LAotICAgICAgVDE4IHYxOCwgVDE5IHYxOSwgVDIwIHYyMCwg
VDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYyMywgVDI0IHYyNCwgVDI1IHYyNSwKLSAgICAgIFQyNiB2
MjYsIFQyNyB2MjcsIFQyOCB2MjgsIFQyOSB2MjksIFQzMCB2MzAsIFQzMSB2MzEsIFQzMiB2MzIs
IFQzMyB2MzMsCi0gICAgICBUMzQgdjM0LCBUMzUgdjM1LCBUMzYgdjM2LCBUMzcgdjM3KSA6IHYx
Xyh2MSksIHYyXyh2MiksIHYzXyh2MyksIHY0Xyh2NCksCi0gICAgICB2NV8odjUpLCB2Nl8odjYp
LCB2N18odjcpLCB2OF8odjgpLCB2OV8odjkpLCB2MTBfKHYxMCksIHYxMV8odjExKSwKLSAgICAg
IHYxMl8odjEyKSwgdjEzXyh2MTMpLCB2MTRfKHYxNCksIHYxNV8odjE1KSwgdjE2Xyh2MTYpLCB2
MTdfKHYxNyksCi0gICAgICB2MThfKHYxOCksIHYxOV8odjE5KSwgdjIwXyh2MjApLCB2MjFfKHYy
MSksIHYyMl8odjIyKSwgdjIzXyh2MjMpLAotICAgICAgdjI0Xyh2MjQpLCB2MjVfKHYyNSksIHYy
Nl8odjI2KSwgdjI3Xyh2MjcpLCB2MjhfKHYyOCksIHYyOV8odjI5KSwKLSAgICAgIHYzMF8odjMw
KSwgdjMxXyh2MzEpLCB2MzJfKHYzMiksIHYzM18odjMzKSwgdjM0Xyh2MzQpLCB2MzVfKHYzNSks
Ci0gICAgICB2MzZfKHYzNiksIHYzN18odjM3KSB7fQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjxUPigpIGNvbnN0IHsKLSAgICBjb25zdCBUIGFy
cmF5W10gPSB7c3RhdGljX2Nhc3Q8VD4odjFfKSwgc3RhdGljX2Nhc3Q8VD4odjJfKSwKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8VD4odjNfKSwgc3RhdGljX2Nhc3Q8VD4odjRfKSwgc3RhdGljX2Nhc3Q8
VD4odjVfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjZfKSwgc3RhdGljX2Nhc3Q8VD4odjdf
KSwgc3RhdGljX2Nhc3Q8VD4odjhfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjlfKSwgc3Rh
dGljX2Nhc3Q8VD4odjEwXyksIHN0YXRpY19jYXN0PFQ+KHYxMV8pLAotICAgICAgICBzdGF0aWNf
Y2FzdDxUPih2MTJfKSwgc3RhdGljX2Nhc3Q8VD4odjEzXyksIHN0YXRpY19jYXN0PFQ+KHYxNF8p
LAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MTVfKSwgc3RhdGljX2Nhc3Q8VD4odjE2XyksIHN0
YXRpY19jYXN0PFQ+KHYxN18pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MThfKSwgc3RhdGlj
X2Nhc3Q8VD4odjE5XyksIHN0YXRpY19jYXN0PFQ+KHYyMF8pLAotICAgICAgICBzdGF0aWNfY2Fz
dDxUPih2MjFfKSwgc3RhdGljX2Nhc3Q8VD4odjIyXyksIHN0YXRpY19jYXN0PFQ+KHYyM18pLAot
ICAgICAgICBzdGF0aWNfY2FzdDxUPih2MjRfKSwgc3RhdGljX2Nhc3Q8VD4odjI1XyksIHN0YXRp
Y19jYXN0PFQ+KHYyNl8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MjdfKSwgc3RhdGljX2Nh
c3Q8VD4odjI4XyksIHN0YXRpY19jYXN0PFQ+KHYyOV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxU
Pih2MzBfKSwgc3RhdGljX2Nhc3Q8VD4odjMxXyksIHN0YXRpY19jYXN0PFQ+KHYzMl8pLAotICAg
ICAgICBzdGF0aWNfY2FzdDxUPih2MzNfKSwgc3RhdGljX2Nhc3Q8VD4odjM0XyksIHN0YXRpY19j
YXN0PFQ+KHYzNV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MzZfKSwgc3RhdGljX2Nhc3Q8
VD4odjM3Xyl9OwotICAgIHJldHVybiBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQotIHByaXZhdGU6
Ci0gIC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAg
dm9pZCBvcGVyYXRvcj0oY29uc3QgVmFsdWVBcnJheTM3JiBvdGhlcik7Ci0KLSAgY29uc3QgVDEg
djFfOwotICBjb25zdCBUMiB2Ml87Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3QgVDQgdjRfOwot
ICBjb25zdCBUNSB2NV87Ci0gIGNvbnN0IFQ2IHY2XzsKLSAgY29uc3QgVDcgdjdfOwotICBjb25z
dCBUOCB2OF87Ci0gIGNvbnN0IFQ5IHY5XzsKLSAgY29uc3QgVDEwIHYxMF87Ci0gIGNvbnN0IFQx
MSB2MTFfOwotICBjb25zdCBUMTIgdjEyXzsKLSAgY29uc3QgVDEzIHYxM187Ci0gIGNvbnN0IFQx
NCB2MTRfOwotICBjb25zdCBUMTUgdjE1XzsKLSAgY29uc3QgVDE2IHYxNl87Ci0gIGNvbnN0IFQx
NyB2MTdfOwotICBjb25zdCBUMTggdjE4XzsKLSAgY29uc3QgVDE5IHYxOV87Ci0gIGNvbnN0IFQy
MCB2MjBfOwotICBjb25zdCBUMjEgdjIxXzsKLSAgY29uc3QgVDIyIHYyMl87Ci0gIGNvbnN0IFQy
MyB2MjNfOwotICBjb25zdCBUMjQgdjI0XzsKLSAgY29uc3QgVDI1IHYyNV87Ci0gIGNvbnN0IFQy
NiB2MjZfOwotICBjb25zdCBUMjcgdjI3XzsKLSAgY29uc3QgVDI4IHYyOF87Ci0gIGNvbnN0IFQy
OSB2MjlfOwotICBjb25zdCBUMzAgdjMwXzsKLSAgY29uc3QgVDMxIHYzMV87Ci0gIGNvbnN0IFQz
MiB2MzJfOwotICBjb25zdCBUMzMgdjMzXzsKLSAgY29uc3QgVDM0IHYzNF87Ci0gIGNvbnN0IFQz
NSB2MzVfOwotICBjb25zdCBUMzYgdjM2XzsKLSAgY29uc3QgVDM3IHYzN187Ci19OwotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQs
IHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgs
IHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBU
MTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5h
bWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFt
ZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlw
ZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcs
IHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5hbWUg
VDMxLCB0eXBlbmFtZSBUMzIsIHR5cGVuYW1lIFQzMywgdHlwZW5hbWUgVDM0LCB0eXBlbmFtZSBU
MzUsCi0gICAgdHlwZW5hbWUgVDM2LCB0eXBlbmFtZSBUMzcsIHR5cGVuYW1lIFQzOD4KLWNsYXNz
IFZhbHVlQXJyYXkzOCB7Ci0gcHVibGljOgotICBWYWx1ZUFycmF5MzgoVDEgdjEsIFQyIHYyLCBU
MyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwKLSAgICAgIFQx
MCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIsIFQxMyB2MTMsIFQxNCB2MTQsIFQxNSB2MTUsIFQxNiB2
MTYsIFQxNyB2MTcsCi0gICAgICBUMTggdjE4LCBUMTkgdjE5LCBUMjAgdjIwLCBUMjEgdjIxLCBU
MjIgdjIyLCBUMjMgdjIzLCBUMjQgdjI0LCBUMjUgdjI1LAotICAgICAgVDI2IHYyNiwgVDI3IHYy
NywgVDI4IHYyOCwgVDI5IHYyOSwgVDMwIHYzMCwgVDMxIHYzMSwgVDMyIHYzMiwgVDMzIHYzMywK
LSAgICAgIFQzNCB2MzQsIFQzNSB2MzUsIFQzNiB2MzYsIFQzNyB2MzcsIFQzOCB2MzgpIDogdjFf
KHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwKLSAgICAgIHY0Xyh2NCksIHY1Xyh2NSksIHY2Xyh2Niks
IHY3Xyh2NyksIHY4Xyh2OCksIHY5Xyh2OSksIHYxMF8odjEwKSwKLSAgICAgIHYxMV8odjExKSwg
djEyXyh2MTIpLCB2MTNfKHYxMyksIHYxNF8odjE0KSwgdjE1Xyh2MTUpLCB2MTZfKHYxNiksCi0g
ICAgICB2MTdfKHYxNyksIHYxOF8odjE4KSwgdjE5Xyh2MTkpLCB2MjBfKHYyMCksIHYyMV8odjIx
KSwgdjIyXyh2MjIpLAotICAgICAgdjIzXyh2MjMpLCB2MjRfKHYyNCksIHYyNV8odjI1KSwgdjI2
Xyh2MjYpLCB2MjdfKHYyNyksIHYyOF8odjI4KSwKLSAgICAgIHYyOV8odjI5KSwgdjMwXyh2MzAp
LCB2MzFfKHYzMSksIHYzMl8odjMyKSwgdjMzXyh2MzMpLCB2MzRfKHYzNCksCi0gICAgICB2MzVf
KHYzNSksIHYzNl8odjM2KSwgdjM3Xyh2MzcpLCB2MzhfKHYzOCkge30KLQotICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KLSAgb3BlcmF0b3IgUGFyYW1HZW5lcmF0b3I8VD4oKSBjb25zdCB7Ci0gICAg
Y29uc3QgVCBhcnJheVtdID0ge3N0YXRpY19jYXN0PFQ+KHYxXyksIHN0YXRpY19jYXN0PFQ+KHYy
XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzXyksIHN0YXRpY19jYXN0PFQ+KHY0XyksIHN0
YXRpY19jYXN0PFQ+KHY1XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY2XyksIHN0YXRpY19j
YXN0PFQ+KHY3XyksIHN0YXRpY19jYXN0PFQ+KHY4XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+
KHY5XyksIHN0YXRpY19jYXN0PFQ+KHYxMF8pLCBzdGF0aWNfY2FzdDxUPih2MTFfKSwKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8VD4odjEyXyksIHN0YXRpY19jYXN0PFQ+KHYxM18pLCBzdGF0aWNfY2Fz
dDxUPih2MTRfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE1XyksIHN0YXRpY19jYXN0PFQ+
KHYxNl8pLCBzdGF0aWNfY2FzdDxUPih2MTdfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE4
XyksIHN0YXRpY19jYXN0PFQ+KHYxOV8pLCBzdGF0aWNfY2FzdDxUPih2MjBfKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8VD4odjIxXyksIHN0YXRpY19jYXN0PFQ+KHYyMl8pLCBzdGF0aWNfY2FzdDxU
Pih2MjNfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjI0XyksIHN0YXRpY19jYXN0PFQ+KHYy
NV8pLCBzdGF0aWNfY2FzdDxUPih2MjZfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjI3Xyks
IHN0YXRpY19jYXN0PFQ+KHYyOF8pLCBzdGF0aWNfY2FzdDxUPih2MjlfKSwKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8VD4odjMwXyksIHN0YXRpY19jYXN0PFQ+KHYzMV8pLCBzdGF0aWNfY2FzdDxUPih2
MzJfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjMzXyksIHN0YXRpY19jYXN0PFQ+KHYzNF8p
LCBzdGF0aWNfY2FzdDxUPih2MzVfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjM2XyksIHN0
YXRpY19jYXN0PFQ+KHYzN18pLCBzdGF0aWNfY2FzdDxUPih2MzhfKX07Ci0gICAgcmV0dXJuIFZh
bHVlc0luKGFycmF5KTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24g
LSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1
ZUFycmF5MzgmIG90aGVyKTsKLQotICBjb25zdCBUMSB2MV87Ci0gIGNvbnN0IFQyIHYyXzsKLSAg
Y29uc3QgVDMgdjNfOwotICBjb25zdCBUNCB2NF87Ci0gIGNvbnN0IFQ1IHY1XzsKLSAgY29uc3Qg
VDYgdjZfOwotICBjb25zdCBUNyB2N187Ci0gIGNvbnN0IFQ4IHY4XzsKLSAgY29uc3QgVDkgdjlf
OwotICBjb25zdCBUMTAgdjEwXzsKLSAgY29uc3QgVDExIHYxMV87Ci0gIGNvbnN0IFQxMiB2MTJf
OwotICBjb25zdCBUMTMgdjEzXzsKLSAgY29uc3QgVDE0IHYxNF87Ci0gIGNvbnN0IFQxNSB2MTVf
OwotICBjb25zdCBUMTYgdjE2XzsKLSAgY29uc3QgVDE3IHYxN187Ci0gIGNvbnN0IFQxOCB2MThf
OwotICBjb25zdCBUMTkgdjE5XzsKLSAgY29uc3QgVDIwIHYyMF87Ci0gIGNvbnN0IFQyMSB2MjFf
OwotICBjb25zdCBUMjIgdjIyXzsKLSAgY29uc3QgVDIzIHYyM187Ci0gIGNvbnN0IFQyNCB2MjRf
OwotICBjb25zdCBUMjUgdjI1XzsKLSAgY29uc3QgVDI2IHYyNl87Ci0gIGNvbnN0IFQyNyB2Mjdf
OwotICBjb25zdCBUMjggdjI4XzsKLSAgY29uc3QgVDI5IHYyOV87Ci0gIGNvbnN0IFQzMCB2MzBf
OwotICBjb25zdCBUMzEgdjMxXzsKLSAgY29uc3QgVDMyIHYzMl87Ci0gIGNvbnN0IFQzMyB2MzNf
OwotICBjb25zdCBUMzQgdjM0XzsKLSAgY29uc3QgVDM1IHYzNV87Ci0gIGNvbnN0IFQzNiB2MzZf
OwotICBjb25zdCBUMzcgdjM3XzsKLSAgY29uc3QgVDM4IHYzOF87Ci19OwotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVu
YW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVu
YW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5
cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2
LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAs
Ci0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUg
VDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVu
YW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5hbWUgVDMxLCB0
eXBlbmFtZSBUMzIsIHR5cGVuYW1lIFQzMywgdHlwZW5hbWUgVDM0LCB0eXBlbmFtZSBUMzUsCi0g
ICAgdHlwZW5hbWUgVDM2LCB0eXBlbmFtZSBUMzcsIHR5cGVuYW1lIFQzOCwgdHlwZW5hbWUgVDM5
PgotY2xhc3MgVmFsdWVBcnJheTM5IHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJyYXkzOShUMSB2MSwg
VDIgdjIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDggdjgsIFQ5IHY5LAot
ICAgICAgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0IHYxNCwgVDE1IHYx
NSwgVDE2IHYxNiwgVDE3IHYxNywKLSAgICAgIFQxOCB2MTgsIFQxOSB2MTksIFQyMCB2MjAsIFQy
MSB2MjEsIFQyMiB2MjIsIFQyMyB2MjMsIFQyNCB2MjQsIFQyNSB2MjUsCi0gICAgICBUMjYgdjI2
LCBUMjcgdjI3LCBUMjggdjI4LCBUMjkgdjI5LCBUMzAgdjMwLCBUMzEgdjMxLCBUMzIgdjMyLCBU
MzMgdjMzLAotICAgICAgVDM0IHYzNCwgVDM1IHYzNSwgVDM2IHYzNiwgVDM3IHYzNywgVDM4IHYz
OCwgVDM5IHYzOSkgOiB2MV8odjEpLCB2Ml8odjIpLAotICAgICAgdjNfKHYzKSwgdjRfKHY0KSwg
djVfKHY1KSwgdjZfKHY2KSwgdjdfKHY3KSwgdjhfKHY4KSwgdjlfKHY5KSwgdjEwXyh2MTApLAot
ICAgICAgdjExXyh2MTEpLCB2MTJfKHYxMiksIHYxM18odjEzKSwgdjE0Xyh2MTQpLCB2MTVfKHYx
NSksIHYxNl8odjE2KSwKLSAgICAgIHYxN18odjE3KSwgdjE4Xyh2MTgpLCB2MTlfKHYxOSksIHYy
MF8odjIwKSwgdjIxXyh2MjEpLCB2MjJfKHYyMiksCi0gICAgICB2MjNfKHYyMyksIHYyNF8odjI0
KSwgdjI1Xyh2MjUpLCB2MjZfKHYyNiksIHYyN18odjI3KSwgdjI4Xyh2MjgpLAotICAgICAgdjI5
Xyh2MjkpLCB2MzBfKHYzMCksIHYzMV8odjMxKSwgdjMyXyh2MzIpLCB2MzNfKHYzMyksIHYzNF8o
djM0KSwKLSAgICAgIHYzNV8odjM1KSwgdjM2Xyh2MzYpLCB2MzdfKHYzNyksIHYzOF8odjM4KSwg
djM5Xyh2MzkpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIG9wZXJhdG9yIFBhcmFt
R2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0IFQgYXJyYXlbXSA9IHtzdGF0aWNfY2Fz
dDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2
M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNfY2FzdDxUPih2NV8pLAotICAgICAgICBz
dGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxUPih2N18pLCBzdGF0aWNfY2FzdDxUPih2
OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2OV8pLCBzdGF0aWNfY2FzdDxUPih2MTBfKSwg
c3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxMl8pLCBzdGF0
aWNfY2FzdDxUPih2MTNfKSwgc3RhdGljX2Nhc3Q8VD4odjE0XyksCi0gICAgICAgIHN0YXRpY19j
YXN0PFQ+KHYxNV8pLCBzdGF0aWNfY2FzdDxUPih2MTZfKSwgc3RhdGljX2Nhc3Q8VD4odjE3Xyks
Ci0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxOF8pLCBzdGF0aWNfY2FzdDxUPih2MTlfKSwgc3Rh
dGljX2Nhc3Q8VD4odjIwXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyMV8pLCBzdGF0aWNf
Y2FzdDxUPih2MjJfKSwgc3RhdGljX2Nhc3Q8VD4odjIzXyksCi0gICAgICAgIHN0YXRpY19jYXN0
PFQ+KHYyNF8pLCBzdGF0aWNfY2FzdDxUPih2MjVfKSwgc3RhdGljX2Nhc3Q8VD4odjI2XyksCi0g
ICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyN18pLCBzdGF0aWNfY2FzdDxUPih2MjhfKSwgc3RhdGlj
X2Nhc3Q8VD4odjI5XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzMF8pLCBzdGF0aWNfY2Fz
dDxUPih2MzFfKSwgc3RhdGljX2Nhc3Q8VD4odjMyXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+
KHYzM18pLCBzdGF0aWNfY2FzdDxUPih2MzRfKSwgc3RhdGljX2Nhc3Q8VD4odjM1XyksCi0gICAg
ICAgIHN0YXRpY19jYXN0PFQ+KHYzNl8pLCBzdGF0aWNfY2FzdDxUPih2MzdfKSwgc3RhdGljX2Nh
c3Q8VD4odjM4XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzOV8pfTsKLSAgICByZXR1cm4g
VmFsdWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlv
biAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZh
bHVlQXJyYXkzOSYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJfOwot
ICBjb25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVfOwotICBjb25z
dCBUNiB2Nl87Ci0gIGNvbnN0IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhfOwotICBjb25zdCBUOSB2
OV87Ci0gIGNvbnN0IFQxMCB2MTBfOwotICBjb25zdCBUMTEgdjExXzsKLSAgY29uc3QgVDEyIHYx
Ml87Ci0gIGNvbnN0IFQxMyB2MTNfOwotICBjb25zdCBUMTQgdjE0XzsKLSAgY29uc3QgVDE1IHYx
NV87Ci0gIGNvbnN0IFQxNiB2MTZfOwotICBjb25zdCBUMTcgdjE3XzsKLSAgY29uc3QgVDE4IHYx
OF87Ci0gIGNvbnN0IFQxOSB2MTlfOwotICBjb25zdCBUMjAgdjIwXzsKLSAgY29uc3QgVDIxIHYy
MV87Ci0gIGNvbnN0IFQyMiB2MjJfOwotICBjb25zdCBUMjMgdjIzXzsKLSAgY29uc3QgVDI0IHYy
NF87Ci0gIGNvbnN0IFQyNSB2MjVfOwotICBjb25zdCBUMjYgdjI2XzsKLSAgY29uc3QgVDI3IHYy
N187Ci0gIGNvbnN0IFQyOCB2MjhfOwotICBjb25zdCBUMjkgdjI5XzsKLSAgY29uc3QgVDMwIHYz
MF87Ci0gIGNvbnN0IFQzMSB2MzFfOwotICBjb25zdCBUMzIgdjMyXzsKLSAgY29uc3QgVDMzIHYz
M187Ci0gIGNvbnN0IFQzNCB2MzRfOwotICBjb25zdCBUMzUgdjM1XzsKLSAgY29uc3QgVDM2IHYz
Nl87Ci0gIGNvbnN0IFQzNyB2MzdfOwotICBjb25zdCBUMzggdjM4XzsKLSAgY29uc3QgVDM5IHYz
OV87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBU
MywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBU
NywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUg
VDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBU
MTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5h
bWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5
cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2
LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAs
Ci0gICAgdHlwZW5hbWUgVDMxLCB0eXBlbmFtZSBUMzIsIHR5cGVuYW1lIFQzMywgdHlwZW5hbWUg
VDM0LCB0eXBlbmFtZSBUMzUsCi0gICAgdHlwZW5hbWUgVDM2LCB0eXBlbmFtZSBUMzcsIHR5cGVu
YW1lIFQzOCwgdHlwZW5hbWUgVDM5LCB0eXBlbmFtZSBUNDA+Ci1jbGFzcyBWYWx1ZUFycmF5NDAg
ewotIHB1YmxpYzoKLSAgVmFsdWVBcnJheTQwKFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBU
NSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2OCwgVDkgdjksCi0gICAgICBUMTAgdjEwLCBUMTEgdjEx
LCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3LAot
ICAgICAgVDE4IHYxOCwgVDE5IHYxOSwgVDIwIHYyMCwgVDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYy
MywgVDI0IHYyNCwgVDI1IHYyNSwKLSAgICAgIFQyNiB2MjYsIFQyNyB2MjcsIFQyOCB2MjgsIFQy
OSB2MjksIFQzMCB2MzAsIFQzMSB2MzEsIFQzMiB2MzIsIFQzMyB2MzMsCi0gICAgICBUMzQgdjM0
LCBUMzUgdjM1LCBUMzYgdjM2LCBUMzcgdjM3LCBUMzggdjM4LCBUMzkgdjM5LCBUNDAgdjQwKSA6
IHYxXyh2MSksCi0gICAgICB2Ml8odjIpLCB2M18odjMpLCB2NF8odjQpLCB2NV8odjUpLCB2Nl8o
djYpLCB2N18odjcpLCB2OF8odjgpLCB2OV8odjkpLAotICAgICAgdjEwXyh2MTApLCB2MTFfKHYx
MSksIHYxMl8odjEyKSwgdjEzXyh2MTMpLCB2MTRfKHYxNCksIHYxNV8odjE1KSwKLSAgICAgIHYx
Nl8odjE2KSwgdjE3Xyh2MTcpLCB2MThfKHYxOCksIHYxOV8odjE5KSwgdjIwXyh2MjApLCB2MjFf
KHYyMSksCi0gICAgICB2MjJfKHYyMiksIHYyM18odjIzKSwgdjI0Xyh2MjQpLCB2MjVfKHYyNSks
IHYyNl8odjI2KSwgdjI3Xyh2MjcpLAotICAgICAgdjI4Xyh2MjgpLCB2MjlfKHYyOSksIHYzMF8o
djMwKSwgdjMxXyh2MzEpLCB2MzJfKHYzMiksIHYzM18odjMzKSwKLSAgICAgIHYzNF8odjM0KSwg
djM1Xyh2MzUpLCB2MzZfKHYzNiksIHYzN18odjM3KSwgdjM4Xyh2MzgpLCB2MzlfKHYzOSksCi0g
ICAgICB2NDBfKHY0MCkge30KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgb3BlcmF0b3Ig
UGFyYW1HZW5lcmF0b3I8VD4oKSBjb25zdCB7Ci0gICAgY29uc3QgVCBhcnJheVtdID0ge3N0YXRp
Y19jYXN0PFQ+KHYxXyksIHN0YXRpY19jYXN0PFQ+KHYyXyksCi0gICAgICAgIHN0YXRpY19jYXN0
PFQ+KHYzXyksIHN0YXRpY19jYXN0PFQ+KHY0XyksIHN0YXRpY19jYXN0PFQ+KHY1XyksCi0gICAg
ICAgIHN0YXRpY19jYXN0PFQ+KHY2XyksIHN0YXRpY19jYXN0PFQ+KHY3XyksIHN0YXRpY19jYXN0
PFQ+KHY4XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY5XyksIHN0YXRpY19jYXN0PFQ+KHYx
MF8pLCBzdGF0aWNfY2FzdDxUPih2MTFfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjEyXyks
IHN0YXRpY19jYXN0PFQ+KHYxM18pLCBzdGF0aWNfY2FzdDxUPih2MTRfKSwKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8VD4odjE1XyksIHN0YXRpY19jYXN0PFQ+KHYxNl8pLCBzdGF0aWNfY2FzdDxUPih2
MTdfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE4XyksIHN0YXRpY19jYXN0PFQ+KHYxOV8p
LCBzdGF0aWNfY2FzdDxUPih2MjBfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjIxXyksIHN0
YXRpY19jYXN0PFQ+KHYyMl8pLCBzdGF0aWNfY2FzdDxUPih2MjNfKSwKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8VD4odjI0XyksIHN0YXRpY19jYXN0PFQ+KHYyNV8pLCBzdGF0aWNfY2FzdDxUPih2MjZf
KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjI3XyksIHN0YXRpY19jYXN0PFQ+KHYyOF8pLCBz
dGF0aWNfY2FzdDxUPih2MjlfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjMwXyksIHN0YXRp
Y19jYXN0PFQ+KHYzMV8pLCBzdGF0aWNfY2FzdDxUPih2MzJfKSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8VD4odjMzXyksIHN0YXRpY19jYXN0PFQ+KHYzNF8pLCBzdGF0aWNfY2FzdDxUPih2MzVfKSwK
LSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjM2XyksIHN0YXRpY19jYXN0PFQ+KHYzN18pLCBzdGF0
aWNfY2FzdDxUPih2MzhfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjM5XyksIHN0YXRpY19j
YXN0PFQ+KHY0MF8pfTsKLSAgICByZXR1cm4gVmFsdWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2
YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQu
Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVlQXJyYXk0MCYgb3RoZXIpOwotCi0gIGNvbnN0
IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJfOwotICBjb25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0
XzsKLSAgY29uc3QgVDUgdjVfOwotICBjb25zdCBUNiB2Nl87Ci0gIGNvbnN0IFQ3IHY3XzsKLSAg
Y29uc3QgVDggdjhfOwotICBjb25zdCBUOSB2OV87Ci0gIGNvbnN0IFQxMCB2MTBfOwotICBjb25z
dCBUMTEgdjExXzsKLSAgY29uc3QgVDEyIHYxMl87Ci0gIGNvbnN0IFQxMyB2MTNfOwotICBjb25z
dCBUMTQgdjE0XzsKLSAgY29uc3QgVDE1IHYxNV87Ci0gIGNvbnN0IFQxNiB2MTZfOwotICBjb25z
dCBUMTcgdjE3XzsKLSAgY29uc3QgVDE4IHYxOF87Ci0gIGNvbnN0IFQxOSB2MTlfOwotICBjb25z
dCBUMjAgdjIwXzsKLSAgY29uc3QgVDIxIHYyMV87Ci0gIGNvbnN0IFQyMiB2MjJfOwotICBjb25z
dCBUMjMgdjIzXzsKLSAgY29uc3QgVDI0IHYyNF87Ci0gIGNvbnN0IFQyNSB2MjVfOwotICBjb25z
dCBUMjYgdjI2XzsKLSAgY29uc3QgVDI3IHYyN187Ci0gIGNvbnN0IFQyOCB2MjhfOwotICBjb25z
dCBUMjkgdjI5XzsKLSAgY29uc3QgVDMwIHYzMF87Ci0gIGNvbnN0IFQzMSB2MzFfOwotICBjb25z
dCBUMzIgdjMyXzsKLSAgY29uc3QgVDMzIHYzM187Ci0gIGNvbnN0IFQzNCB2MzRfOwotICBjb25z
dCBUMzUgdjM1XzsKLSAgY29uc3QgVDM2IHYzNl87Ci0gIGNvbnN0IFQzNyB2MzdfOwotICBjb25z
dCBUMzggdjM4XzsKLSAgY29uc3QgVDM5IHYzOV87Ci0gIGNvbnN0IFQ0MCB2NDBfOwotfTsKLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1l
IFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1l
IFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5h
bWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5
cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlw
ZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMs
IHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUg
VDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVu
YW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQzNCwgdHlwZW5h
bWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3LCB0eXBlbmFtZSBUMzgsIHR5
cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQwLAotICAgIHR5cGVuYW1lIFQ0MT4KLWNsYXNzIFZhbHVl
QXJyYXk0MSB7Ci0gcHVibGljOgotICBWYWx1ZUFycmF5NDEoVDEgdjEsIFQyIHYyLCBUMyB2Mywg
VDQgdjQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2OSwKLSAgICAgIFQxMCB2MTAs
IFQxMSB2MTEsIFQxMiB2MTIsIFQxMyB2MTMsIFQxNCB2MTQsIFQxNSB2MTUsIFQxNiB2MTYsIFQx
NyB2MTcsCi0gICAgICBUMTggdjE4LCBUMTkgdjE5LCBUMjAgdjIwLCBUMjEgdjIxLCBUMjIgdjIy
LCBUMjMgdjIzLCBUMjQgdjI0LCBUMjUgdjI1LAotICAgICAgVDI2IHYyNiwgVDI3IHYyNywgVDI4
IHYyOCwgVDI5IHYyOSwgVDMwIHYzMCwgVDMxIHYzMSwgVDMyIHYzMiwgVDMzIHYzMywKLSAgICAg
IFQzNCB2MzQsIFQzNSB2MzUsIFQzNiB2MzYsIFQzNyB2MzcsIFQzOCB2MzgsIFQzOSB2MzksIFQ0
MCB2NDAsCi0gICAgICBUNDEgdjQxKSA6IHYxXyh2MSksIHYyXyh2MiksIHYzXyh2MyksIHY0Xyh2
NCksIHY1Xyh2NSksIHY2Xyh2NiksIHY3Xyh2NyksCi0gICAgICB2OF8odjgpLCB2OV8odjkpLCB2
MTBfKHYxMCksIHYxMV8odjExKSwgdjEyXyh2MTIpLCB2MTNfKHYxMyksIHYxNF8odjE0KSwKLSAg
ICAgIHYxNV8odjE1KSwgdjE2Xyh2MTYpLCB2MTdfKHYxNyksIHYxOF8odjE4KSwgdjE5Xyh2MTkp
LCB2MjBfKHYyMCksCi0gICAgICB2MjFfKHYyMSksIHYyMl8odjIyKSwgdjIzXyh2MjMpLCB2MjRf
KHYyNCksIHYyNV8odjI1KSwgdjI2Xyh2MjYpLAotICAgICAgdjI3Xyh2MjcpLCB2MjhfKHYyOCks
IHYyOV8odjI5KSwgdjMwXyh2MzApLCB2MzFfKHYzMSksIHYzMl8odjMyKSwKLSAgICAgIHYzM18o
djMzKSwgdjM0Xyh2MzQpLCB2MzVfKHYzNSksIHYzNl8odjM2KSwgdjM3Xyh2MzcpLCB2MzhfKHYz
OCksCi0gICAgICB2MzlfKHYzOSksIHY0MF8odjQwKSwgdjQxXyh2NDEpIHt9Ci0KLSAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Ci0gIG9wZXJhdG9yIFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29uc3Qgewot
ICAgIGNvbnN0IFQgYXJyYXlbXSA9IHtzdGF0aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxU
Pih2Ml8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8p
LCBzdGF0aWNfY2FzdDxUPih2NV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0
aWNfY2FzdDxUPih2N18pLCBzdGF0aWNfY2FzdDxUPih2OF8pLAotICAgICAgICBzdGF0aWNfY2Fz
dDxUPih2OV8pLCBzdGF0aWNfY2FzdDxUPih2MTBfKSwgc3RhdGljX2Nhc3Q8VD4odjExXyksCi0g
ICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxMl8pLCBzdGF0aWNfY2FzdDxUPih2MTNfKSwgc3RhdGlj
X2Nhc3Q8VD4odjE0XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxNV8pLCBzdGF0aWNfY2Fz
dDxUPih2MTZfKSwgc3RhdGljX2Nhc3Q8VD4odjE3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+
KHYxOF8pLCBzdGF0aWNfY2FzdDxUPih2MTlfKSwgc3RhdGljX2Nhc3Q8VD4odjIwXyksCi0gICAg
ICAgIHN0YXRpY19jYXN0PFQ+KHYyMV8pLCBzdGF0aWNfY2FzdDxUPih2MjJfKSwgc3RhdGljX2Nh
c3Q8VD4odjIzXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyNF8pLCBzdGF0aWNfY2FzdDxU
Pih2MjVfKSwgc3RhdGljX2Nhc3Q8VD4odjI2XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYy
N18pLCBzdGF0aWNfY2FzdDxUPih2MjhfKSwgc3RhdGljX2Nhc3Q8VD4odjI5XyksCi0gICAgICAg
IHN0YXRpY19jYXN0PFQ+KHYzMF8pLCBzdGF0aWNfY2FzdDxUPih2MzFfKSwgc3RhdGljX2Nhc3Q8
VD4odjMyXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzM18pLCBzdGF0aWNfY2FzdDxUPih2
MzRfKSwgc3RhdGljX2Nhc3Q8VD4odjM1XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzNl8p
LCBzdGF0aWNfY2FzdDxUPih2MzdfKSwgc3RhdGljX2Nhc3Q8VD4odjM4XyksCi0gICAgICAgIHN0
YXRpY19jYXN0PFQ+KHYzOV8pLCBzdGF0aWNfY2FzdDxUPih2NDBfKSwgc3RhdGljX2Nhc3Q8VD4o
djQxXyl9OwotICAgIHJldHVybiBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0g
IC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgdm9p
ZCBvcGVyYXRvcj0oY29uc3QgVmFsdWVBcnJheTQxJiBvdGhlcik7Ci0KLSAgY29uc3QgVDEgdjFf
OwotICBjb25zdCBUMiB2Ml87Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3QgVDQgdjRfOwotICBj
b25zdCBUNSB2NV87Ci0gIGNvbnN0IFQ2IHY2XzsKLSAgY29uc3QgVDcgdjdfOwotICBjb25zdCBU
OCB2OF87Ci0gIGNvbnN0IFQ5IHY5XzsKLSAgY29uc3QgVDEwIHYxMF87Ci0gIGNvbnN0IFQxMSB2
MTFfOwotICBjb25zdCBUMTIgdjEyXzsKLSAgY29uc3QgVDEzIHYxM187Ci0gIGNvbnN0IFQxNCB2
MTRfOwotICBjb25zdCBUMTUgdjE1XzsKLSAgY29uc3QgVDE2IHYxNl87Ci0gIGNvbnN0IFQxNyB2
MTdfOwotICBjb25zdCBUMTggdjE4XzsKLSAgY29uc3QgVDE5IHYxOV87Ci0gIGNvbnN0IFQyMCB2
MjBfOwotICBjb25zdCBUMjEgdjIxXzsKLSAgY29uc3QgVDIyIHYyMl87Ci0gIGNvbnN0IFQyMyB2
MjNfOwotICBjb25zdCBUMjQgdjI0XzsKLSAgY29uc3QgVDI1IHYyNV87Ci0gIGNvbnN0IFQyNiB2
MjZfOwotICBjb25zdCBUMjcgdjI3XzsKLSAgY29uc3QgVDI4IHYyOF87Ci0gIGNvbnN0IFQyOSB2
MjlfOwotICBjb25zdCBUMzAgdjMwXzsKLSAgY29uc3QgVDMxIHYzMV87Ci0gIGNvbnN0IFQzMiB2
MzJfOwotICBjb25zdCBUMzMgdjMzXzsKLSAgY29uc3QgVDM0IHYzNF87Ci0gIGNvbnN0IFQzNSB2
MzVfOwotICBjb25zdCBUMzYgdjM2XzsKLSAgY29uc3QgVDM3IHYzN187Ci0gIGNvbnN0IFQzOCB2
MzhfOwotICBjb25zdCBUMzkgdjM5XzsKLSAgY29uc3QgVDQwIHY0MF87Ci0gIGNvbnN0IFQ0MSB2
NDFfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUg
VDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUg
VDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1l
IFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUg
VDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVu
YW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0
eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQy
NiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMw
LAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1l
IFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3LCB0eXBl
bmFtZSBUMzgsIHR5cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQwLAotICAgIHR5cGVuYW1lIFQ0MSwg
dHlwZW5hbWUgVDQyPgotY2xhc3MgVmFsdWVBcnJheTQyIHsKLSBwdWJsaWM6Ci0gIFZhbHVlQXJy
YXk0MihUMSB2MSwgVDIgdjIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2NywgVDgg
djgsIFQ5IHY5LAotICAgICAgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYxMywgVDE0
IHYxNCwgVDE1IHYxNSwgVDE2IHYxNiwgVDE3IHYxNywKLSAgICAgIFQxOCB2MTgsIFQxOSB2MTks
IFQyMCB2MjAsIFQyMSB2MjEsIFQyMiB2MjIsIFQyMyB2MjMsIFQyNCB2MjQsIFQyNSB2MjUsCi0g
ICAgICBUMjYgdjI2LCBUMjcgdjI3LCBUMjggdjI4LCBUMjkgdjI5LCBUMzAgdjMwLCBUMzEgdjMx
LCBUMzIgdjMyLCBUMzMgdjMzLAotICAgICAgVDM0IHYzNCwgVDM1IHYzNSwgVDM2IHYzNiwgVDM3
IHYzNywgVDM4IHYzOCwgVDM5IHYzOSwgVDQwIHY0MCwgVDQxIHY0MSwKLSAgICAgIFQ0MiB2NDIp
IDogdjFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwgdjRfKHY0KSwgdjVfKHY1KSwgdjZfKHY2KSwg
djdfKHY3KSwKLSAgICAgIHY4Xyh2OCksIHY5Xyh2OSksIHYxMF8odjEwKSwgdjExXyh2MTEpLCB2
MTJfKHYxMiksIHYxM18odjEzKSwgdjE0Xyh2MTQpLAotICAgICAgdjE1Xyh2MTUpLCB2MTZfKHYx
NiksIHYxN18odjE3KSwgdjE4Xyh2MTgpLCB2MTlfKHYxOSksIHYyMF8odjIwKSwKLSAgICAgIHYy
MV8odjIxKSwgdjIyXyh2MjIpLCB2MjNfKHYyMyksIHYyNF8odjI0KSwgdjI1Xyh2MjUpLCB2MjZf
KHYyNiksCi0gICAgICB2MjdfKHYyNyksIHYyOF8odjI4KSwgdjI5Xyh2MjkpLCB2MzBfKHYzMCks
IHYzMV8odjMxKSwgdjMyXyh2MzIpLAotICAgICAgdjMzXyh2MzMpLCB2MzRfKHYzNCksIHYzNV8o
djM1KSwgdjM2Xyh2MzYpLCB2MzdfKHYzNyksIHYzOF8odjM4KSwKLSAgICAgIHYzOV8odjM5KSwg
djQwXyh2NDApLCB2NDFfKHY0MSksIHY0Ml8odjQyKSB7fQotCi0gIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjxUPigpIGNvbnN0IHsKLSAgICBjb25zdCBU
IGFycmF5W10gPSB7c3RhdGljX2Nhc3Q8VD4odjFfKSwgc3RhdGljX2Nhc3Q8VD4odjJfKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8VD4odjNfKSwgc3RhdGljX2Nhc3Q8VD4odjRfKSwgc3RhdGljX2Nh
c3Q8VD4odjVfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjZfKSwgc3RhdGljX2Nhc3Q8VD4o
djdfKSwgc3RhdGljX2Nhc3Q8VD4odjhfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjlfKSwg
c3RhdGljX2Nhc3Q8VD4odjEwXyksIHN0YXRpY19jYXN0PFQ+KHYxMV8pLAotICAgICAgICBzdGF0
aWNfY2FzdDxUPih2MTJfKSwgc3RhdGljX2Nhc3Q8VD4odjEzXyksIHN0YXRpY19jYXN0PFQ+KHYx
NF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MTVfKSwgc3RhdGljX2Nhc3Q8VD4odjE2Xyks
IHN0YXRpY19jYXN0PFQ+KHYxN18pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MThfKSwgc3Rh
dGljX2Nhc3Q8VD4odjE5XyksIHN0YXRpY19jYXN0PFQ+KHYyMF8pLAotICAgICAgICBzdGF0aWNf
Y2FzdDxUPih2MjFfKSwgc3RhdGljX2Nhc3Q8VD4odjIyXyksIHN0YXRpY19jYXN0PFQ+KHYyM18p
LAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MjRfKSwgc3RhdGljX2Nhc3Q8VD4odjI1XyksIHN0
YXRpY19jYXN0PFQ+KHYyNl8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MjdfKSwgc3RhdGlj
X2Nhc3Q8VD4odjI4XyksIHN0YXRpY19jYXN0PFQ+KHYyOV8pLAotICAgICAgICBzdGF0aWNfY2Fz
dDxUPih2MzBfKSwgc3RhdGljX2Nhc3Q8VD4odjMxXyksIHN0YXRpY19jYXN0PFQ+KHYzMl8pLAot
ICAgICAgICBzdGF0aWNfY2FzdDxUPih2MzNfKSwgc3RhdGljX2Nhc3Q8VD4odjM0XyksIHN0YXRp
Y19jYXN0PFQ+KHYzNV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MzZfKSwgc3RhdGljX2Nh
c3Q8VD4odjM3XyksIHN0YXRpY19jYXN0PFQ+KHYzOF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxU
Pih2MzlfKSwgc3RhdGljX2Nhc3Q8VD4odjQwXyksIHN0YXRpY19jYXN0PFQ+KHY0MV8pLAotICAg
ICAgICBzdGF0aWNfY2FzdDxUPih2NDJfKX07Ci0gICAgcmV0dXJuIFZhbHVlc0luKGFycmF5KTsK
LSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlz
IHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1ZUFycmF5NDImIG90aGVy
KTsKLQotICBjb25zdCBUMSB2MV87Ci0gIGNvbnN0IFQyIHYyXzsKLSAgY29uc3QgVDMgdjNfOwot
ICBjb25zdCBUNCB2NF87Ci0gIGNvbnN0IFQ1IHY1XzsKLSAgY29uc3QgVDYgdjZfOwotICBjb25z
dCBUNyB2N187Ci0gIGNvbnN0IFQ4IHY4XzsKLSAgY29uc3QgVDkgdjlfOwotICBjb25zdCBUMTAg
djEwXzsKLSAgY29uc3QgVDExIHYxMV87Ci0gIGNvbnN0IFQxMiB2MTJfOwotICBjb25zdCBUMTMg
djEzXzsKLSAgY29uc3QgVDE0IHYxNF87Ci0gIGNvbnN0IFQxNSB2MTVfOwotICBjb25zdCBUMTYg
djE2XzsKLSAgY29uc3QgVDE3IHYxN187Ci0gIGNvbnN0IFQxOCB2MThfOwotICBjb25zdCBUMTkg
djE5XzsKLSAgY29uc3QgVDIwIHYyMF87Ci0gIGNvbnN0IFQyMSB2MjFfOwotICBjb25zdCBUMjIg
djIyXzsKLSAgY29uc3QgVDIzIHYyM187Ci0gIGNvbnN0IFQyNCB2MjRfOwotICBjb25zdCBUMjUg
djI1XzsKLSAgY29uc3QgVDI2IHYyNl87Ci0gIGNvbnN0IFQyNyB2MjdfOwotICBjb25zdCBUMjgg
djI4XzsKLSAgY29uc3QgVDI5IHYyOV87Ci0gIGNvbnN0IFQzMCB2MzBfOwotICBjb25zdCBUMzEg
djMxXzsKLSAgY29uc3QgVDMyIHYzMl87Ci0gIGNvbnN0IFQzMyB2MzNfOwotICBjb25zdCBUMzQg
djM0XzsKLSAgY29uc3QgVDM1IHYzNV87Ci0gIGNvbnN0IFQzNiB2MzZfOwotICBjb25zdCBUMzcg
djM3XzsKLSAgY29uc3QgVDM4IHYzOF87Ci0gIGNvbnN0IFQzOSB2MzlfOwotICBjb25zdCBUNDAg
djQwXzsKLSAgY29uc3QgVDQxIHY0MV87Ci0gIGNvbnN0IFQ0MiB2NDJfOwotfTsKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0
eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0
eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEy
LCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1l
IFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUg
VDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVu
YW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0
eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQz
MSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1
LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3LCB0eXBlbmFtZSBUMzgsIHR5cGVuYW1l
IFQzOSwgdHlwZW5hbWUgVDQwLAotICAgIHR5cGVuYW1lIFQ0MSwgdHlwZW5hbWUgVDQyLCB0eXBl
bmFtZSBUNDM+Ci1jbGFzcyBWYWx1ZUFycmF5NDMgewotIHB1YmxpYzoKLSAgVmFsdWVBcnJheTQz
KFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2OCwg
VDkgdjksCi0gICAgICBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0
LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3LAotICAgICAgVDE4IHYxOCwgVDE5IHYxOSwgVDIw
IHYyMCwgVDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYyMywgVDI0IHYyNCwgVDI1IHYyNSwKLSAgICAg
IFQyNiB2MjYsIFQyNyB2MjcsIFQyOCB2MjgsIFQyOSB2MjksIFQzMCB2MzAsIFQzMSB2MzEsIFQz
MiB2MzIsIFQzMyB2MzMsCi0gICAgICBUMzQgdjM0LCBUMzUgdjM1LCBUMzYgdjM2LCBUMzcgdjM3
LCBUMzggdjM4LCBUMzkgdjM5LCBUNDAgdjQwLCBUNDEgdjQxLAotICAgICAgVDQyIHY0MiwgVDQz
IHY0MykgOiB2MV8odjEpLCB2Ml8odjIpLCB2M18odjMpLCB2NF8odjQpLCB2NV8odjUpLCB2Nl8o
djYpLAotICAgICAgdjdfKHY3KSwgdjhfKHY4KSwgdjlfKHY5KSwgdjEwXyh2MTApLCB2MTFfKHYx
MSksIHYxMl8odjEyKSwgdjEzXyh2MTMpLAotICAgICAgdjE0Xyh2MTQpLCB2MTVfKHYxNSksIHYx
Nl8odjE2KSwgdjE3Xyh2MTcpLCB2MThfKHYxOCksIHYxOV8odjE5KSwKLSAgICAgIHYyMF8odjIw
KSwgdjIxXyh2MjEpLCB2MjJfKHYyMiksIHYyM18odjIzKSwgdjI0Xyh2MjQpLCB2MjVfKHYyNSks
Ci0gICAgICB2MjZfKHYyNiksIHYyN18odjI3KSwgdjI4Xyh2MjgpLCB2MjlfKHYyOSksIHYzMF8o
djMwKSwgdjMxXyh2MzEpLAotICAgICAgdjMyXyh2MzIpLCB2MzNfKHYzMyksIHYzNF8odjM0KSwg
djM1Xyh2MzUpLCB2MzZfKHYzNiksIHYzN18odjM3KSwKLSAgICAgIHYzOF8odjM4KSwgdjM5Xyh2
MzkpLCB2NDBfKHY0MCksIHY0MV8odjQxKSwgdjQyXyh2NDIpLCB2NDNfKHY0Mykge30KLQotICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgb3BlcmF0b3IgUGFyYW1HZW5lcmF0b3I8VD4oKSBjb25z
dCB7Ci0gICAgY29uc3QgVCBhcnJheVtdID0ge3N0YXRpY19jYXN0PFQ+KHYxXyksIHN0YXRpY19j
YXN0PFQ+KHYyXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzXyksIHN0YXRpY19jYXN0PFQ+
KHY0XyksIHN0YXRpY19jYXN0PFQ+KHY1XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY2Xyks
IHN0YXRpY19jYXN0PFQ+KHY3XyksIHN0YXRpY19jYXN0PFQ+KHY4XyksCi0gICAgICAgIHN0YXRp
Y19jYXN0PFQ+KHY5XyksIHN0YXRpY19jYXN0PFQ+KHYxMF8pLCBzdGF0aWNfY2FzdDxUPih2MTFf
KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjEyXyksIHN0YXRpY19jYXN0PFQ+KHYxM18pLCBz
dGF0aWNfY2FzdDxUPih2MTRfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE1XyksIHN0YXRp
Y19jYXN0PFQ+KHYxNl8pLCBzdGF0aWNfY2FzdDxUPih2MTdfKSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8VD4odjE4XyksIHN0YXRpY19jYXN0PFQ+KHYxOV8pLCBzdGF0aWNfY2FzdDxUPih2MjBfKSwK
LSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjIxXyksIHN0YXRpY19jYXN0PFQ+KHYyMl8pLCBzdGF0
aWNfY2FzdDxUPih2MjNfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjI0XyksIHN0YXRpY19j
YXN0PFQ+KHYyNV8pLCBzdGF0aWNfY2FzdDxUPih2MjZfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8
VD4odjI3XyksIHN0YXRpY19jYXN0PFQ+KHYyOF8pLCBzdGF0aWNfY2FzdDxUPih2MjlfKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8VD4odjMwXyksIHN0YXRpY19jYXN0PFQ+KHYzMV8pLCBzdGF0aWNf
Y2FzdDxUPih2MzJfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjMzXyksIHN0YXRpY19jYXN0
PFQ+KHYzNF8pLCBzdGF0aWNfY2FzdDxUPih2MzVfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4o
djM2XyksIHN0YXRpY19jYXN0PFQ+KHYzN18pLCBzdGF0aWNfY2FzdDxUPih2MzhfKSwKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8VD4odjM5XyksIHN0YXRpY19jYXN0PFQ+KHY0MF8pLCBzdGF0aWNfY2Fz
dDxUPih2NDFfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjQyXyksIHN0YXRpY19jYXN0PFQ+
KHY0M18pfTsKLSAgICByZXR1cm4gVmFsdWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2YXRlOgot
ICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZv
aWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVlQXJyYXk0MyYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYx
XzsKLSAgY29uc3QgVDIgdjJfOwotICBjb25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAg
Y29uc3QgVDUgdjVfOwotICBjb25zdCBUNiB2Nl87Ci0gIGNvbnN0IFQ3IHY3XzsKLSAgY29uc3Qg
VDggdjhfOwotICBjb25zdCBUOSB2OV87Ci0gIGNvbnN0IFQxMCB2MTBfOwotICBjb25zdCBUMTEg
djExXzsKLSAgY29uc3QgVDEyIHYxMl87Ci0gIGNvbnN0IFQxMyB2MTNfOwotICBjb25zdCBUMTQg
djE0XzsKLSAgY29uc3QgVDE1IHYxNV87Ci0gIGNvbnN0IFQxNiB2MTZfOwotICBjb25zdCBUMTcg
djE3XzsKLSAgY29uc3QgVDE4IHYxOF87Ci0gIGNvbnN0IFQxOSB2MTlfOwotICBjb25zdCBUMjAg
djIwXzsKLSAgY29uc3QgVDIxIHYyMV87Ci0gIGNvbnN0IFQyMiB2MjJfOwotICBjb25zdCBUMjMg
djIzXzsKLSAgY29uc3QgVDI0IHYyNF87Ci0gIGNvbnN0IFQyNSB2MjVfOwotICBjb25zdCBUMjYg
djI2XzsKLSAgY29uc3QgVDI3IHYyN187Ci0gIGNvbnN0IFQyOCB2MjhfOwotICBjb25zdCBUMjkg
djI5XzsKLSAgY29uc3QgVDMwIHYzMF87Ci0gIGNvbnN0IFQzMSB2MzFfOwotICBjb25zdCBUMzIg
djMyXzsKLSAgY29uc3QgVDMzIHYzM187Ci0gIGNvbnN0IFQzNCB2MzRfOwotICBjb25zdCBUMzUg
djM1XzsKLSAgY29uc3QgVDM2IHYzNl87Ci0gIGNvbnN0IFQzNyB2MzdfOwotICBjb25zdCBUMzgg
djM4XzsKLSAgY29uc3QgVDM5IHYzOV87Ci0gIGNvbnN0IFQ0MCB2NDBfOwotICBjb25zdCBUNDEg
djQxXzsKLSAgY29uc3QgVDQyIHY0Ml87Ci0gIGNvbnN0IFQ0MyB2NDNfOwotfTsKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0
eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0
eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEy
LCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1l
IFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUg
VDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVu
YW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0
eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQz
MSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1
LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3LCB0eXBlbmFtZSBUMzgsIHR5cGVuYW1l
IFQzOSwgdHlwZW5hbWUgVDQwLAotICAgIHR5cGVuYW1lIFQ0MSwgdHlwZW5hbWUgVDQyLCB0eXBl
bmFtZSBUNDMsIHR5cGVuYW1lIFQ0ND4KLWNsYXNzIFZhbHVlQXJyYXk0NCB7Ci0gcHVibGljOgot
ICBWYWx1ZUFycmF5NDQoVDEgdjEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2Niwg
VDcgdjcsIFQ4IHY4LCBUOSB2OSwKLSAgICAgIFQxMCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIsIFQx
MyB2MTMsIFQxNCB2MTQsIFQxNSB2MTUsIFQxNiB2MTYsIFQxNyB2MTcsCi0gICAgICBUMTggdjE4
LCBUMTkgdjE5LCBUMjAgdjIwLCBUMjEgdjIxLCBUMjIgdjIyLCBUMjMgdjIzLCBUMjQgdjI0LCBU
MjUgdjI1LAotICAgICAgVDI2IHYyNiwgVDI3IHYyNywgVDI4IHYyOCwgVDI5IHYyOSwgVDMwIHYz
MCwgVDMxIHYzMSwgVDMyIHYzMiwgVDMzIHYzMywKLSAgICAgIFQzNCB2MzQsIFQzNSB2MzUsIFQz
NiB2MzYsIFQzNyB2MzcsIFQzOCB2MzgsIFQzOSB2MzksIFQ0MCB2NDAsIFQ0MSB2NDEsCi0gICAg
ICBUNDIgdjQyLCBUNDMgdjQzLCBUNDQgdjQ0KSA6IHYxXyh2MSksIHYyXyh2MiksIHYzXyh2Myks
IHY0Xyh2NCksIHY1Xyh2NSksCi0gICAgICB2Nl8odjYpLCB2N18odjcpLCB2OF8odjgpLCB2OV8o
djkpLCB2MTBfKHYxMCksIHYxMV8odjExKSwgdjEyXyh2MTIpLAotICAgICAgdjEzXyh2MTMpLCB2
MTRfKHYxNCksIHYxNV8odjE1KSwgdjE2Xyh2MTYpLCB2MTdfKHYxNyksIHYxOF8odjE4KSwKLSAg
ICAgIHYxOV8odjE5KSwgdjIwXyh2MjApLCB2MjFfKHYyMSksIHYyMl8odjIyKSwgdjIzXyh2MjMp
LCB2MjRfKHYyNCksCi0gICAgICB2MjVfKHYyNSksIHYyNl8odjI2KSwgdjI3Xyh2MjcpLCB2Mjhf
KHYyOCksIHYyOV8odjI5KSwgdjMwXyh2MzApLAotICAgICAgdjMxXyh2MzEpLCB2MzJfKHYzMiks
IHYzM18odjMzKSwgdjM0Xyh2MzQpLCB2MzVfKHYzNSksIHYzNl8odjM2KSwKLSAgICAgIHYzN18o
djM3KSwgdjM4Xyh2MzgpLCB2MzlfKHYzOSksIHY0MF8odjQwKSwgdjQxXyh2NDEpLCB2NDJfKHY0
MiksCi0gICAgICB2NDNfKHY0MyksIHY0NF8odjQ0KSB7fQotCi0gIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjxUPigpIGNvbnN0IHsKLSAgICBjb25zdCBU
IGFycmF5W10gPSB7c3RhdGljX2Nhc3Q8VD4odjFfKSwgc3RhdGljX2Nhc3Q8VD4odjJfKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8VD4odjNfKSwgc3RhdGljX2Nhc3Q8VD4odjRfKSwgc3RhdGljX2Nh
c3Q8VD4odjVfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjZfKSwgc3RhdGljX2Nhc3Q8VD4o
djdfKSwgc3RhdGljX2Nhc3Q8VD4odjhfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjlfKSwg
c3RhdGljX2Nhc3Q8VD4odjEwXyksIHN0YXRpY19jYXN0PFQ+KHYxMV8pLAotICAgICAgICBzdGF0
aWNfY2FzdDxUPih2MTJfKSwgc3RhdGljX2Nhc3Q8VD4odjEzXyksIHN0YXRpY19jYXN0PFQ+KHYx
NF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MTVfKSwgc3RhdGljX2Nhc3Q8VD4odjE2Xyks
IHN0YXRpY19jYXN0PFQ+KHYxN18pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MThfKSwgc3Rh
dGljX2Nhc3Q8VD4odjE5XyksIHN0YXRpY19jYXN0PFQ+KHYyMF8pLAotICAgICAgICBzdGF0aWNf
Y2FzdDxUPih2MjFfKSwgc3RhdGljX2Nhc3Q8VD4odjIyXyksIHN0YXRpY19jYXN0PFQ+KHYyM18p
LAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MjRfKSwgc3RhdGljX2Nhc3Q8VD4odjI1XyksIHN0
YXRpY19jYXN0PFQ+KHYyNl8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MjdfKSwgc3RhdGlj
X2Nhc3Q8VD4odjI4XyksIHN0YXRpY19jYXN0PFQ+KHYyOV8pLAotICAgICAgICBzdGF0aWNfY2Fz
dDxUPih2MzBfKSwgc3RhdGljX2Nhc3Q8VD4odjMxXyksIHN0YXRpY19jYXN0PFQ+KHYzMl8pLAot
ICAgICAgICBzdGF0aWNfY2FzdDxUPih2MzNfKSwgc3RhdGljX2Nhc3Q8VD4odjM0XyksIHN0YXRp
Y19jYXN0PFQ+KHYzNV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MzZfKSwgc3RhdGljX2Nh
c3Q8VD4odjM3XyksIHN0YXRpY19jYXN0PFQ+KHYzOF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxU
Pih2MzlfKSwgc3RhdGljX2Nhc3Q8VD4odjQwXyksIHN0YXRpY19jYXN0PFQ+KHY0MV8pLAotICAg
ICAgICBzdGF0aWNfY2FzdDxUPih2NDJfKSwgc3RhdGljX2Nhc3Q8VD4odjQzXyksIHN0YXRpY19j
YXN0PFQ+KHY0NF8pfTsKLSAgICByZXR1cm4gVmFsdWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2
YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQu
Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVlQXJyYXk0NCYgb3RoZXIpOwotCi0gIGNvbnN0
IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJfOwotICBjb25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0
XzsKLSAgY29uc3QgVDUgdjVfOwotICBjb25zdCBUNiB2Nl87Ci0gIGNvbnN0IFQ3IHY3XzsKLSAg
Y29uc3QgVDggdjhfOwotICBjb25zdCBUOSB2OV87Ci0gIGNvbnN0IFQxMCB2MTBfOwotICBjb25z
dCBUMTEgdjExXzsKLSAgY29uc3QgVDEyIHYxMl87Ci0gIGNvbnN0IFQxMyB2MTNfOwotICBjb25z
dCBUMTQgdjE0XzsKLSAgY29uc3QgVDE1IHYxNV87Ci0gIGNvbnN0IFQxNiB2MTZfOwotICBjb25z
dCBUMTcgdjE3XzsKLSAgY29uc3QgVDE4IHYxOF87Ci0gIGNvbnN0IFQxOSB2MTlfOwotICBjb25z
dCBUMjAgdjIwXzsKLSAgY29uc3QgVDIxIHYyMV87Ci0gIGNvbnN0IFQyMiB2MjJfOwotICBjb25z
dCBUMjMgdjIzXzsKLSAgY29uc3QgVDI0IHYyNF87Ci0gIGNvbnN0IFQyNSB2MjVfOwotICBjb25z
dCBUMjYgdjI2XzsKLSAgY29uc3QgVDI3IHYyN187Ci0gIGNvbnN0IFQyOCB2MjhfOwotICBjb25z
dCBUMjkgdjI5XzsKLSAgY29uc3QgVDMwIHYzMF87Ci0gIGNvbnN0IFQzMSB2MzFfOwotICBjb25z
dCBUMzIgdjMyXzsKLSAgY29uc3QgVDMzIHYzM187Ci0gIGNvbnN0IFQzNCB2MzRfOwotICBjb25z
dCBUMzUgdjM1XzsKLSAgY29uc3QgVDM2IHYzNl87Ci0gIGNvbnN0IFQzNyB2MzdfOwotICBjb25z
dCBUMzggdjM4XzsKLSAgY29uc3QgVDM5IHYzOV87Ci0gIGNvbnN0IFQ0MCB2NDBfOwotICBjb25z
dCBUNDEgdjQxXzsKLSAgY29uc3QgVDQyIHY0Ml87Ci0gIGNvbnN0IFQ0MyB2NDNfOwotICBjb25z
dCBUNDQgdjQ0XzsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5
cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5
cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0
eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5
cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4
LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1l
IFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBl
bmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVu
YW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMzLCB0
eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBUMzYsIHR5cGVuYW1lIFQz
NywgdHlwZW5hbWUgVDM4LCB0eXBlbmFtZSBUMzksIHR5cGVuYW1lIFQ0MCwKLSAgICB0eXBlbmFt
ZSBUNDEsIHR5cGVuYW1lIFQ0MiwgdHlwZW5hbWUgVDQzLCB0eXBlbmFtZSBUNDQsIHR5cGVuYW1l
IFQ0NT4KLWNsYXNzIFZhbHVlQXJyYXk0NSB7Ci0gcHVibGljOgotICBWYWx1ZUFycmF5NDUoVDEg
djEsIFQyIHYyLCBUMyB2MywgVDQgdjQsIFQ1IHY1LCBUNiB2NiwgVDcgdjcsIFQ4IHY4LCBUOSB2
OSwKLSAgICAgIFQxMCB2MTAsIFQxMSB2MTEsIFQxMiB2MTIsIFQxMyB2MTMsIFQxNCB2MTQsIFQx
NSB2MTUsIFQxNiB2MTYsIFQxNyB2MTcsCi0gICAgICBUMTggdjE4LCBUMTkgdjE5LCBUMjAgdjIw
LCBUMjEgdjIxLCBUMjIgdjIyLCBUMjMgdjIzLCBUMjQgdjI0LCBUMjUgdjI1LAotICAgICAgVDI2
IHYyNiwgVDI3IHYyNywgVDI4IHYyOCwgVDI5IHYyOSwgVDMwIHYzMCwgVDMxIHYzMSwgVDMyIHYz
MiwgVDMzIHYzMywKLSAgICAgIFQzNCB2MzQsIFQzNSB2MzUsIFQzNiB2MzYsIFQzNyB2MzcsIFQz
OCB2MzgsIFQzOSB2MzksIFQ0MCB2NDAsIFQ0MSB2NDEsCi0gICAgICBUNDIgdjQyLCBUNDMgdjQz
LCBUNDQgdjQ0LCBUNDUgdjQ1KSA6IHYxXyh2MSksIHYyXyh2MiksIHYzXyh2MyksIHY0Xyh2NCks
Ci0gICAgICB2NV8odjUpLCB2Nl8odjYpLCB2N18odjcpLCB2OF8odjgpLCB2OV8odjkpLCB2MTBf
KHYxMCksIHYxMV8odjExKSwKLSAgICAgIHYxMl8odjEyKSwgdjEzXyh2MTMpLCB2MTRfKHYxNCks
IHYxNV8odjE1KSwgdjE2Xyh2MTYpLCB2MTdfKHYxNyksCi0gICAgICB2MThfKHYxOCksIHYxOV8o
djE5KSwgdjIwXyh2MjApLCB2MjFfKHYyMSksIHYyMl8odjIyKSwgdjIzXyh2MjMpLAotICAgICAg
djI0Xyh2MjQpLCB2MjVfKHYyNSksIHYyNl8odjI2KSwgdjI3Xyh2MjcpLCB2MjhfKHYyOCksIHYy
OV8odjI5KSwKLSAgICAgIHYzMF8odjMwKSwgdjMxXyh2MzEpLCB2MzJfKHYzMiksIHYzM18odjMz
KSwgdjM0Xyh2MzQpLCB2MzVfKHYzNSksCi0gICAgICB2MzZfKHYzNiksIHYzN18odjM3KSwgdjM4
Xyh2MzgpLCB2MzlfKHYzOSksIHY0MF8odjQwKSwgdjQxXyh2NDEpLAotICAgICAgdjQyXyh2NDIp
LCB2NDNfKHY0MyksIHY0NF8odjQ0KSwgdjQ1Xyh2NDUpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci0gIG9wZXJhdG9yIFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0
IFQgYXJyYXlbXSA9IHtzdGF0aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAot
ICAgICAgICBzdGF0aWNfY2FzdDxUPih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNf
Y2FzdDxUPih2NV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxU
Pih2N18pLCBzdGF0aWNfY2FzdDxUPih2OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2OV8p
LCBzdGF0aWNfY2FzdDxUPih2MTBfKSwgc3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAgIHN0
YXRpY19jYXN0PFQ+KHYxMl8pLCBzdGF0aWNfY2FzdDxUPih2MTNfKSwgc3RhdGljX2Nhc3Q8VD4o
djE0XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxNV8pLCBzdGF0aWNfY2FzdDxUPih2MTZf
KSwgc3RhdGljX2Nhc3Q8VD4odjE3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxOF8pLCBz
dGF0aWNfY2FzdDxUPih2MTlfKSwgc3RhdGljX2Nhc3Q8VD4odjIwXyksCi0gICAgICAgIHN0YXRp
Y19jYXN0PFQ+KHYyMV8pLCBzdGF0aWNfY2FzdDxUPih2MjJfKSwgc3RhdGljX2Nhc3Q8VD4odjIz
XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyNF8pLCBzdGF0aWNfY2FzdDxUPih2MjVfKSwg
c3RhdGljX2Nhc3Q8VD4odjI2XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyN18pLCBzdGF0
aWNfY2FzdDxUPih2MjhfKSwgc3RhdGljX2Nhc3Q8VD4odjI5XyksCi0gICAgICAgIHN0YXRpY19j
YXN0PFQ+KHYzMF8pLCBzdGF0aWNfY2FzdDxUPih2MzFfKSwgc3RhdGljX2Nhc3Q8VD4odjMyXyks
Ci0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzM18pLCBzdGF0aWNfY2FzdDxUPih2MzRfKSwgc3Rh
dGljX2Nhc3Q8VD4odjM1XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzNl8pLCBzdGF0aWNf
Y2FzdDxUPih2MzdfKSwgc3RhdGljX2Nhc3Q8VD4odjM4XyksCi0gICAgICAgIHN0YXRpY19jYXN0
PFQ+KHYzOV8pLCBzdGF0aWNfY2FzdDxUPih2NDBfKSwgc3RhdGljX2Nhc3Q8VD4odjQxXyksCi0g
ICAgICAgIHN0YXRpY19jYXN0PFQ+KHY0Ml8pLCBzdGF0aWNfY2FzdDxUPih2NDNfKSwgc3RhdGlj
X2Nhc3Q8VD4odjQ0XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY0NV8pfTsKLSAgICByZXR1
cm4gVmFsdWVzSW4oYXJyYXkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRh
dGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0
IFZhbHVlQXJyYXk0NSYgb3RoZXIpOwotCi0gIGNvbnN0IFQxIHYxXzsKLSAgY29uc3QgVDIgdjJf
OwotICBjb25zdCBUMyB2M187Ci0gIGNvbnN0IFQ0IHY0XzsKLSAgY29uc3QgVDUgdjVfOwotICBj
b25zdCBUNiB2Nl87Ci0gIGNvbnN0IFQ3IHY3XzsKLSAgY29uc3QgVDggdjhfOwotICBjb25zdCBU
OSB2OV87Ci0gIGNvbnN0IFQxMCB2MTBfOwotICBjb25zdCBUMTEgdjExXzsKLSAgY29uc3QgVDEy
IHYxMl87Ci0gIGNvbnN0IFQxMyB2MTNfOwotICBjb25zdCBUMTQgdjE0XzsKLSAgY29uc3QgVDE1
IHYxNV87Ci0gIGNvbnN0IFQxNiB2MTZfOwotICBjb25zdCBUMTcgdjE3XzsKLSAgY29uc3QgVDE4
IHYxOF87Ci0gIGNvbnN0IFQxOSB2MTlfOwotICBjb25zdCBUMjAgdjIwXzsKLSAgY29uc3QgVDIx
IHYyMV87Ci0gIGNvbnN0IFQyMiB2MjJfOwotICBjb25zdCBUMjMgdjIzXzsKLSAgY29uc3QgVDI0
IHYyNF87Ci0gIGNvbnN0IFQyNSB2MjVfOwotICBjb25zdCBUMjYgdjI2XzsKLSAgY29uc3QgVDI3
IHYyN187Ci0gIGNvbnN0IFQyOCB2MjhfOwotICBjb25zdCBUMjkgdjI5XzsKLSAgY29uc3QgVDMw
IHYzMF87Ci0gIGNvbnN0IFQzMSB2MzFfOwotICBjb25zdCBUMzIgdjMyXzsKLSAgY29uc3QgVDMz
IHYzM187Ci0gIGNvbnN0IFQzNCB2MzRfOwotICBjb25zdCBUMzUgdjM1XzsKLSAgY29uc3QgVDM2
IHYzNl87Ci0gIGNvbnN0IFQzNyB2MzdfOwotICBjb25zdCBUMzggdjM4XzsKLSAgY29uc3QgVDM5
IHYzOV87Ci0gIGNvbnN0IFQ0MCB2NDBfOwotICBjb25zdCBUNDEgdjQxXzsKLSAgY29uc3QgVDQy
IHY0Ml87Ci0gIGNvbnN0IFQ0MyB2NDNfOwotICBjb25zdCBUNDQgdjQ0XzsKLSAgY29uc3QgVDQ1
IHY0NV87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFt
ZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFt
ZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5h
bWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFt
ZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlw
ZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIs
IHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUg
VDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBU
MzAsCi0gICAgdHlwZW5hbWUgVDMxLCB0eXBlbmFtZSBUMzIsIHR5cGVuYW1lIFQzMywgdHlwZW5h
bWUgVDM0LCB0eXBlbmFtZSBUMzUsCi0gICAgdHlwZW5hbWUgVDM2LCB0eXBlbmFtZSBUMzcsIHR5
cGVuYW1lIFQzOCwgdHlwZW5hbWUgVDM5LCB0eXBlbmFtZSBUNDAsCi0gICAgdHlwZW5hbWUgVDQx
LCB0eXBlbmFtZSBUNDIsIHR5cGVuYW1lIFQ0MywgdHlwZW5hbWUgVDQ0LCB0eXBlbmFtZSBUNDUs
Ci0gICAgdHlwZW5hbWUgVDQ2PgotY2xhc3MgVmFsdWVBcnJheTQ2IHsKLSBwdWJsaWM6Ci0gIFZh
bHVlQXJyYXk0NihUMSB2MSwgVDIgdjIsIFQzIHYzLCBUNCB2NCwgVDUgdjUsIFQ2IHY2LCBUNyB2
NywgVDggdjgsIFQ5IHY5LAotICAgICAgVDEwIHYxMCwgVDExIHYxMSwgVDEyIHYxMiwgVDEzIHYx
MywgVDE0IHYxNCwgVDE1IHYxNSwgVDE2IHYxNiwgVDE3IHYxNywKLSAgICAgIFQxOCB2MTgsIFQx
OSB2MTksIFQyMCB2MjAsIFQyMSB2MjEsIFQyMiB2MjIsIFQyMyB2MjMsIFQyNCB2MjQsIFQyNSB2
MjUsCi0gICAgICBUMjYgdjI2LCBUMjcgdjI3LCBUMjggdjI4LCBUMjkgdjI5LCBUMzAgdjMwLCBU
MzEgdjMxLCBUMzIgdjMyLCBUMzMgdjMzLAotICAgICAgVDM0IHYzNCwgVDM1IHYzNSwgVDM2IHYz
NiwgVDM3IHYzNywgVDM4IHYzOCwgVDM5IHYzOSwgVDQwIHY0MCwgVDQxIHY0MSwKLSAgICAgIFQ0
MiB2NDIsIFQ0MyB2NDMsIFQ0NCB2NDQsIFQ0NSB2NDUsIFQ0NiB2NDYpIDogdjFfKHYxKSwgdjJf
KHYyKSwgdjNfKHYzKSwKLSAgICAgIHY0Xyh2NCksIHY1Xyh2NSksIHY2Xyh2NiksIHY3Xyh2Nyks
IHY4Xyh2OCksIHY5Xyh2OSksIHYxMF8odjEwKSwKLSAgICAgIHYxMV8odjExKSwgdjEyXyh2MTIp
LCB2MTNfKHYxMyksIHYxNF8odjE0KSwgdjE1Xyh2MTUpLCB2MTZfKHYxNiksCi0gICAgICB2MTdf
KHYxNyksIHYxOF8odjE4KSwgdjE5Xyh2MTkpLCB2MjBfKHYyMCksIHYyMV8odjIxKSwgdjIyXyh2
MjIpLAotICAgICAgdjIzXyh2MjMpLCB2MjRfKHYyNCksIHYyNV8odjI1KSwgdjI2Xyh2MjYpLCB2
MjdfKHYyNyksIHYyOF8odjI4KSwKLSAgICAgIHYyOV8odjI5KSwgdjMwXyh2MzApLCB2MzFfKHYz
MSksIHYzMl8odjMyKSwgdjMzXyh2MzMpLCB2MzRfKHYzNCksCi0gICAgICB2MzVfKHYzNSksIHYz
Nl8odjM2KSwgdjM3Xyh2MzcpLCB2MzhfKHYzOCksIHYzOV8odjM5KSwgdjQwXyh2NDApLAotICAg
ICAgdjQxXyh2NDEpLCB2NDJfKHY0MiksIHY0M18odjQzKSwgdjQ0Xyh2NDQpLCB2NDVfKHY0NSks
IHY0Nl8odjQ2KSB7fQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBvcGVyYXRvciBQYXJh
bUdlbmVyYXRvcjxUPigpIGNvbnN0IHsKLSAgICBjb25zdCBUIGFycmF5W10gPSB7c3RhdGljX2Nh
c3Q8VD4odjFfKSwgc3RhdGljX2Nhc3Q8VD4odjJfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4o
djNfKSwgc3RhdGljX2Nhc3Q8VD4odjRfKSwgc3RhdGljX2Nhc3Q8VD4odjVfKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8VD4odjZfKSwgc3RhdGljX2Nhc3Q8VD4odjdfKSwgc3RhdGljX2Nhc3Q8VD4o
djhfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjlfKSwgc3RhdGljX2Nhc3Q8VD4odjEwXyks
IHN0YXRpY19jYXN0PFQ+KHYxMV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MTJfKSwgc3Rh
dGljX2Nhc3Q8VD4odjEzXyksIHN0YXRpY19jYXN0PFQ+KHYxNF8pLAotICAgICAgICBzdGF0aWNf
Y2FzdDxUPih2MTVfKSwgc3RhdGljX2Nhc3Q8VD4odjE2XyksIHN0YXRpY19jYXN0PFQ+KHYxN18p
LAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MThfKSwgc3RhdGljX2Nhc3Q8VD4odjE5XyksIHN0
YXRpY19jYXN0PFQ+KHYyMF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MjFfKSwgc3RhdGlj
X2Nhc3Q8VD4odjIyXyksIHN0YXRpY19jYXN0PFQ+KHYyM18pLAotICAgICAgICBzdGF0aWNfY2Fz
dDxUPih2MjRfKSwgc3RhdGljX2Nhc3Q8VD4odjI1XyksIHN0YXRpY19jYXN0PFQ+KHYyNl8pLAot
ICAgICAgICBzdGF0aWNfY2FzdDxUPih2MjdfKSwgc3RhdGljX2Nhc3Q8VD4odjI4XyksIHN0YXRp
Y19jYXN0PFQ+KHYyOV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MzBfKSwgc3RhdGljX2Nh
c3Q8VD4odjMxXyksIHN0YXRpY19jYXN0PFQ+KHYzMl8pLAotICAgICAgICBzdGF0aWNfY2FzdDxU
Pih2MzNfKSwgc3RhdGljX2Nhc3Q8VD4odjM0XyksIHN0YXRpY19jYXN0PFQ+KHYzNV8pLAotICAg
ICAgICBzdGF0aWNfY2FzdDxUPih2MzZfKSwgc3RhdGljX2Nhc3Q8VD4odjM3XyksIHN0YXRpY19j
YXN0PFQ+KHYzOF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MzlfKSwgc3RhdGljX2Nhc3Q8
VD4odjQwXyksIHN0YXRpY19jYXN0PFQ+KHY0MV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2
NDJfKSwgc3RhdGljX2Nhc3Q8VD4odjQzXyksIHN0YXRpY19jYXN0PFQ+KHY0NF8pLAotICAgICAg
ICBzdGF0aWNfY2FzdDxUPih2NDVfKSwgc3RhdGljX2Nhc3Q8VD4odjQ2Xyl9OwotICAgIHJldHVy
biBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIE5vIGltcGxlbWVudGF0
aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgdm9pZCBvcGVyYXRvcj0oY29uc3Qg
VmFsdWVBcnJheTQ2JiBvdGhlcik7Ci0KLSAgY29uc3QgVDEgdjFfOwotICBjb25zdCBUMiB2Ml87
Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3QgVDQgdjRfOwotICBjb25zdCBUNSB2NV87Ci0gIGNv
bnN0IFQ2IHY2XzsKLSAgY29uc3QgVDcgdjdfOwotICBjb25zdCBUOCB2OF87Ci0gIGNvbnN0IFQ5
IHY5XzsKLSAgY29uc3QgVDEwIHYxMF87Ci0gIGNvbnN0IFQxMSB2MTFfOwotICBjb25zdCBUMTIg
djEyXzsKLSAgY29uc3QgVDEzIHYxM187Ci0gIGNvbnN0IFQxNCB2MTRfOwotICBjb25zdCBUMTUg
djE1XzsKLSAgY29uc3QgVDE2IHYxNl87Ci0gIGNvbnN0IFQxNyB2MTdfOwotICBjb25zdCBUMTgg
djE4XzsKLSAgY29uc3QgVDE5IHYxOV87Ci0gIGNvbnN0IFQyMCB2MjBfOwotICBjb25zdCBUMjEg
djIxXzsKLSAgY29uc3QgVDIyIHYyMl87Ci0gIGNvbnN0IFQyMyB2MjNfOwotICBjb25zdCBUMjQg
djI0XzsKLSAgY29uc3QgVDI1IHYyNV87Ci0gIGNvbnN0IFQyNiB2MjZfOwotICBjb25zdCBUMjcg
djI3XzsKLSAgY29uc3QgVDI4IHYyOF87Ci0gIGNvbnN0IFQyOSB2MjlfOwotICBjb25zdCBUMzAg
djMwXzsKLSAgY29uc3QgVDMxIHYzMV87Ci0gIGNvbnN0IFQzMiB2MzJfOwotICBjb25zdCBUMzMg
djMzXzsKLSAgY29uc3QgVDM0IHYzNF87Ci0gIGNvbnN0IFQzNSB2MzVfOwotICBjb25zdCBUMzYg
djM2XzsKLSAgY29uc3QgVDM3IHYzN187Ci0gIGNvbnN0IFQzOCB2MzhfOwotICBjb25zdCBUMzkg
djM5XzsKLSAgY29uc3QgVDQwIHY0MF87Ci0gIGNvbnN0IFQ0MSB2NDFfOwotICBjb25zdCBUNDIg
djQyXzsKLSAgY29uc3QgVDQzIHY0M187Ci0gIGNvbnN0IFQ0NCB2NDRfOwotICBjb25zdCBUNDUg
djQ1XzsKLSAgY29uc3QgVDQ2IHY0Nl87Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5
cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5
cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFt
ZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlw
ZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcs
IHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUg
VDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBU
MjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5h
bWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5hbWUgVDMxLCB0eXBlbmFtZSBUMzIsIHR5
cGVuYW1lIFQzMywgdHlwZW5hbWUgVDM0LCB0eXBlbmFtZSBUMzUsCi0gICAgdHlwZW5hbWUgVDM2
LCB0eXBlbmFtZSBUMzcsIHR5cGVuYW1lIFQzOCwgdHlwZW5hbWUgVDM5LCB0eXBlbmFtZSBUNDAs
Ci0gICAgdHlwZW5hbWUgVDQxLCB0eXBlbmFtZSBUNDIsIHR5cGVuYW1lIFQ0MywgdHlwZW5hbWUg
VDQ0LCB0eXBlbmFtZSBUNDUsCi0gICAgdHlwZW5hbWUgVDQ2LCB0eXBlbmFtZSBUNDc+Ci1jbGFz
cyBWYWx1ZUFycmF5NDcgewotIHB1YmxpYzoKLSAgVmFsdWVBcnJheTQ3KFQxIHYxLCBUMiB2Miwg
VDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2OCwgVDkgdjksCi0gICAgICBU
MTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYg
djE2LCBUMTcgdjE3LAotICAgICAgVDE4IHYxOCwgVDE5IHYxOSwgVDIwIHYyMCwgVDIxIHYyMSwg
VDIyIHYyMiwgVDIzIHYyMywgVDI0IHYyNCwgVDI1IHYyNSwKLSAgICAgIFQyNiB2MjYsIFQyNyB2
MjcsIFQyOCB2MjgsIFQyOSB2MjksIFQzMCB2MzAsIFQzMSB2MzEsIFQzMiB2MzIsIFQzMyB2MzMs
Ci0gICAgICBUMzQgdjM0LCBUMzUgdjM1LCBUMzYgdjM2LCBUMzcgdjM3LCBUMzggdjM4LCBUMzkg
djM5LCBUNDAgdjQwLCBUNDEgdjQxLAotICAgICAgVDQyIHY0MiwgVDQzIHY0MywgVDQ0IHY0NCwg
VDQ1IHY0NSwgVDQ2IHY0NiwgVDQ3IHY0NykgOiB2MV8odjEpLCB2Ml8odjIpLAotICAgICAgdjNf
KHYzKSwgdjRfKHY0KSwgdjVfKHY1KSwgdjZfKHY2KSwgdjdfKHY3KSwgdjhfKHY4KSwgdjlfKHY5
KSwgdjEwXyh2MTApLAotICAgICAgdjExXyh2MTEpLCB2MTJfKHYxMiksIHYxM18odjEzKSwgdjE0
Xyh2MTQpLCB2MTVfKHYxNSksIHYxNl8odjE2KSwKLSAgICAgIHYxN18odjE3KSwgdjE4Xyh2MTgp
LCB2MTlfKHYxOSksIHYyMF8odjIwKSwgdjIxXyh2MjEpLCB2MjJfKHYyMiksCi0gICAgICB2MjNf
KHYyMyksIHYyNF8odjI0KSwgdjI1Xyh2MjUpLCB2MjZfKHYyNiksIHYyN18odjI3KSwgdjI4Xyh2
MjgpLAotICAgICAgdjI5Xyh2MjkpLCB2MzBfKHYzMCksIHYzMV8odjMxKSwgdjMyXyh2MzIpLCB2
MzNfKHYzMyksIHYzNF8odjM0KSwKLSAgICAgIHYzNV8odjM1KSwgdjM2Xyh2MzYpLCB2MzdfKHYz
NyksIHYzOF8odjM4KSwgdjM5Xyh2MzkpLCB2NDBfKHY0MCksCi0gICAgICB2NDFfKHY0MSksIHY0
Ml8odjQyKSwgdjQzXyh2NDMpLCB2NDRfKHY0NCksIHY0NV8odjQ1KSwgdjQ2Xyh2NDYpLAotICAg
ICAgdjQ3Xyh2NDcpIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIG9wZXJhdG9yIFBh
cmFtR2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0IFQgYXJyYXlbXSA9IHtzdGF0aWNf
Y2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAotICAgICAgICBzdGF0aWNfY2FzdDxU
Pih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNfY2FzdDxUPih2NV8pLAotICAgICAg
ICBzdGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxUPih2N18pLCBzdGF0aWNfY2FzdDxU
Pih2OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2OV8pLCBzdGF0aWNfY2FzdDxUPih2MTBf
KSwgc3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxMl8pLCBz
dGF0aWNfY2FzdDxUPih2MTNfKSwgc3RhdGljX2Nhc3Q8VD4odjE0XyksCi0gICAgICAgIHN0YXRp
Y19jYXN0PFQ+KHYxNV8pLCBzdGF0aWNfY2FzdDxUPih2MTZfKSwgc3RhdGljX2Nhc3Q8VD4odjE3
XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxOF8pLCBzdGF0aWNfY2FzdDxUPih2MTlfKSwg
c3RhdGljX2Nhc3Q8VD4odjIwXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyMV8pLCBzdGF0
aWNfY2FzdDxUPih2MjJfKSwgc3RhdGljX2Nhc3Q8VD4odjIzXyksCi0gICAgICAgIHN0YXRpY19j
YXN0PFQ+KHYyNF8pLCBzdGF0aWNfY2FzdDxUPih2MjVfKSwgc3RhdGljX2Nhc3Q8VD4odjI2Xyks
Ci0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyN18pLCBzdGF0aWNfY2FzdDxUPih2MjhfKSwgc3Rh
dGljX2Nhc3Q8VD4odjI5XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzMF8pLCBzdGF0aWNf
Y2FzdDxUPih2MzFfKSwgc3RhdGljX2Nhc3Q8VD4odjMyXyksCi0gICAgICAgIHN0YXRpY19jYXN0
PFQ+KHYzM18pLCBzdGF0aWNfY2FzdDxUPih2MzRfKSwgc3RhdGljX2Nhc3Q8VD4odjM1XyksCi0g
ICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzNl8pLCBzdGF0aWNfY2FzdDxUPih2MzdfKSwgc3RhdGlj
X2Nhc3Q8VD4odjM4XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzOV8pLCBzdGF0aWNfY2Fz
dDxUPih2NDBfKSwgc3RhdGljX2Nhc3Q8VD4odjQxXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+
KHY0Ml8pLCBzdGF0aWNfY2FzdDxUPih2NDNfKSwgc3RhdGljX2Nhc3Q8VD4odjQ0XyksCi0gICAg
ICAgIHN0YXRpY19jYXN0PFQ+KHY0NV8pLCBzdGF0aWNfY2FzdDxUPih2NDZfKSwgc3RhdGljX2Nh
c3Q8VD4odjQ3Xyl9OwotICAgIHJldHVybiBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQotIHByaXZh
dGU6Ci0gIC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4K
LSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVmFsdWVBcnJheTQ3JiBvdGhlcik7Ci0KLSAgY29uc3Qg
VDEgdjFfOwotICBjb25zdCBUMiB2Ml87Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3QgVDQgdjRf
OwotICBjb25zdCBUNSB2NV87Ci0gIGNvbnN0IFQ2IHY2XzsKLSAgY29uc3QgVDcgdjdfOwotICBj
b25zdCBUOCB2OF87Ci0gIGNvbnN0IFQ5IHY5XzsKLSAgY29uc3QgVDEwIHYxMF87Ci0gIGNvbnN0
IFQxMSB2MTFfOwotICBjb25zdCBUMTIgdjEyXzsKLSAgY29uc3QgVDEzIHYxM187Ci0gIGNvbnN0
IFQxNCB2MTRfOwotICBjb25zdCBUMTUgdjE1XzsKLSAgY29uc3QgVDE2IHYxNl87Ci0gIGNvbnN0
IFQxNyB2MTdfOwotICBjb25zdCBUMTggdjE4XzsKLSAgY29uc3QgVDE5IHYxOV87Ci0gIGNvbnN0
IFQyMCB2MjBfOwotICBjb25zdCBUMjEgdjIxXzsKLSAgY29uc3QgVDIyIHYyMl87Ci0gIGNvbnN0
IFQyMyB2MjNfOwotICBjb25zdCBUMjQgdjI0XzsKLSAgY29uc3QgVDI1IHYyNV87Ci0gIGNvbnN0
IFQyNiB2MjZfOwotICBjb25zdCBUMjcgdjI3XzsKLSAgY29uc3QgVDI4IHYyOF87Ci0gIGNvbnN0
IFQyOSB2MjlfOwotICBjb25zdCBUMzAgdjMwXzsKLSAgY29uc3QgVDMxIHYzMV87Ci0gIGNvbnN0
IFQzMiB2MzJfOwotICBjb25zdCBUMzMgdjMzXzsKLSAgY29uc3QgVDM0IHYzNF87Ci0gIGNvbnN0
IFQzNSB2MzVfOwotICBjb25zdCBUMzYgdjM2XzsKLSAgY29uc3QgVDM3IHYzN187Ci0gIGNvbnN0
IFQzOCB2MzhfOwotICBjb25zdCBUMzkgdjM5XzsKLSAgY29uc3QgVDQwIHY0MF87Ci0gIGNvbnN0
IFQ0MSB2NDFfOwotICBjb25zdCBUNDIgdjQyXzsKLSAgY29uc3QgVDQzIHY0M187Ci0gIGNvbnN0
IFQ0NCB2NDRfOwotICBjb25zdCBUNDUgdjQ1XzsKLSAgY29uc3QgVDQ2IHY0Nl87Ci0gIGNvbnN0
IFQ0NyB2NDdfOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlw
ZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlw
ZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5
cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlw
ZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgs
IHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUg
VDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVu
YW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5h
bWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5
cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3
LCB0eXBlbmFtZSBUMzgsIHR5cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQwLAotICAgIHR5cGVuYW1l
IFQ0MSwgdHlwZW5hbWUgVDQyLCB0eXBlbmFtZSBUNDMsIHR5cGVuYW1lIFQ0NCwgdHlwZW5hbWUg
VDQ1LAotICAgIHR5cGVuYW1lIFQ0NiwgdHlwZW5hbWUgVDQ3LCB0eXBlbmFtZSBUNDg+Ci1jbGFz
cyBWYWx1ZUFycmF5NDggewotIHB1YmxpYzoKLSAgVmFsdWVBcnJheTQ4KFQxIHYxLCBUMiB2Miwg
VDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2OCwgVDkgdjksCi0gICAgICBU
MTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYg
djE2LCBUMTcgdjE3LAotICAgICAgVDE4IHYxOCwgVDE5IHYxOSwgVDIwIHYyMCwgVDIxIHYyMSwg
VDIyIHYyMiwgVDIzIHYyMywgVDI0IHYyNCwgVDI1IHYyNSwKLSAgICAgIFQyNiB2MjYsIFQyNyB2
MjcsIFQyOCB2MjgsIFQyOSB2MjksIFQzMCB2MzAsIFQzMSB2MzEsIFQzMiB2MzIsIFQzMyB2MzMs
Ci0gICAgICBUMzQgdjM0LCBUMzUgdjM1LCBUMzYgdjM2LCBUMzcgdjM3LCBUMzggdjM4LCBUMzkg
djM5LCBUNDAgdjQwLCBUNDEgdjQxLAotICAgICAgVDQyIHY0MiwgVDQzIHY0MywgVDQ0IHY0NCwg
VDQ1IHY0NSwgVDQ2IHY0NiwgVDQ3IHY0NywgVDQ4IHY0OCkgOiB2MV8odjEpLAotICAgICAgdjJf
KHYyKSwgdjNfKHYzKSwgdjRfKHY0KSwgdjVfKHY1KSwgdjZfKHY2KSwgdjdfKHY3KSwgdjhfKHY4
KSwgdjlfKHY5KSwKLSAgICAgIHYxMF8odjEwKSwgdjExXyh2MTEpLCB2MTJfKHYxMiksIHYxM18o
djEzKSwgdjE0Xyh2MTQpLCB2MTVfKHYxNSksCi0gICAgICB2MTZfKHYxNiksIHYxN18odjE3KSwg
djE4Xyh2MTgpLCB2MTlfKHYxOSksIHYyMF8odjIwKSwgdjIxXyh2MjEpLAotICAgICAgdjIyXyh2
MjIpLCB2MjNfKHYyMyksIHYyNF8odjI0KSwgdjI1Xyh2MjUpLCB2MjZfKHYyNiksIHYyN18odjI3
KSwKLSAgICAgIHYyOF8odjI4KSwgdjI5Xyh2MjkpLCB2MzBfKHYzMCksIHYzMV8odjMxKSwgdjMy
Xyh2MzIpLCB2MzNfKHYzMyksCi0gICAgICB2MzRfKHYzNCksIHYzNV8odjM1KSwgdjM2Xyh2MzYp
LCB2MzdfKHYzNyksIHYzOF8odjM4KSwgdjM5Xyh2MzkpLAotICAgICAgdjQwXyh2NDApLCB2NDFf
KHY0MSksIHY0Ml8odjQyKSwgdjQzXyh2NDMpLCB2NDRfKHY0NCksIHY0NV8odjQ1KSwKLSAgICAg
IHY0Nl8odjQ2KSwgdjQ3Xyh2NDcpLCB2NDhfKHY0OCkge30KLQotICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLSAgb3BlcmF0b3IgUGFyYW1HZW5lcmF0b3I8VD4oKSBjb25zdCB7Ci0gICAgY29uc3Qg
VCBhcnJheVtdID0ge3N0YXRpY19jYXN0PFQ+KHYxXyksIHN0YXRpY19jYXN0PFQ+KHYyXyksCi0g
ICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzXyksIHN0YXRpY19jYXN0PFQ+KHY0XyksIHN0YXRpY19j
YXN0PFQ+KHY1XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY2XyksIHN0YXRpY19jYXN0PFQ+
KHY3XyksIHN0YXRpY19jYXN0PFQ+KHY4XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY5Xyks
IHN0YXRpY19jYXN0PFQ+KHYxMF8pLCBzdGF0aWNfY2FzdDxUPih2MTFfKSwKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8VD4odjEyXyksIHN0YXRpY19jYXN0PFQ+KHYxM18pLCBzdGF0aWNfY2FzdDxUPih2
MTRfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE1XyksIHN0YXRpY19jYXN0PFQ+KHYxNl8p
LCBzdGF0aWNfY2FzdDxUPih2MTdfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjE4XyksIHN0
YXRpY19jYXN0PFQ+KHYxOV8pLCBzdGF0aWNfY2FzdDxUPih2MjBfKSwKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8VD4odjIxXyksIHN0YXRpY19jYXN0PFQ+KHYyMl8pLCBzdGF0aWNfY2FzdDxUPih2MjNf
KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjI0XyksIHN0YXRpY19jYXN0PFQ+KHYyNV8pLCBz
dGF0aWNfY2FzdDxUPih2MjZfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjI3XyksIHN0YXRp
Y19jYXN0PFQ+KHYyOF8pLCBzdGF0aWNfY2FzdDxUPih2MjlfKSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8VD4odjMwXyksIHN0YXRpY19jYXN0PFQ+KHYzMV8pLCBzdGF0aWNfY2FzdDxUPih2MzJfKSwK
LSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjMzXyksIHN0YXRpY19jYXN0PFQ+KHYzNF8pLCBzdGF0
aWNfY2FzdDxUPih2MzVfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjM2XyksIHN0YXRpY19j
YXN0PFQ+KHYzN18pLCBzdGF0aWNfY2FzdDxUPih2MzhfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8
VD4odjM5XyksIHN0YXRpY19jYXN0PFQ+KHY0MF8pLCBzdGF0aWNfY2FzdDxUPih2NDFfKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8VD4odjQyXyksIHN0YXRpY19jYXN0PFQ+KHY0M18pLCBzdGF0aWNf
Y2FzdDxUPih2NDRfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjQ1XyksIHN0YXRpY19jYXN0
PFQ+KHY0Nl8pLCBzdGF0aWNfY2FzdDxUPih2NDdfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4o
djQ4Xyl9OwotICAgIHJldHVybiBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0g
IC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgdm9p
ZCBvcGVyYXRvcj0oY29uc3QgVmFsdWVBcnJheTQ4JiBvdGhlcik7Ci0KLSAgY29uc3QgVDEgdjFf
OwotICBjb25zdCBUMiB2Ml87Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3QgVDQgdjRfOwotICBj
b25zdCBUNSB2NV87Ci0gIGNvbnN0IFQ2IHY2XzsKLSAgY29uc3QgVDcgdjdfOwotICBjb25zdCBU
OCB2OF87Ci0gIGNvbnN0IFQ5IHY5XzsKLSAgY29uc3QgVDEwIHYxMF87Ci0gIGNvbnN0IFQxMSB2
MTFfOwotICBjb25zdCBUMTIgdjEyXzsKLSAgY29uc3QgVDEzIHYxM187Ci0gIGNvbnN0IFQxNCB2
MTRfOwotICBjb25zdCBUMTUgdjE1XzsKLSAgY29uc3QgVDE2IHYxNl87Ci0gIGNvbnN0IFQxNyB2
MTdfOwotICBjb25zdCBUMTggdjE4XzsKLSAgY29uc3QgVDE5IHYxOV87Ci0gIGNvbnN0IFQyMCB2
MjBfOwotICBjb25zdCBUMjEgdjIxXzsKLSAgY29uc3QgVDIyIHYyMl87Ci0gIGNvbnN0IFQyMyB2
MjNfOwotICBjb25zdCBUMjQgdjI0XzsKLSAgY29uc3QgVDI1IHYyNV87Ci0gIGNvbnN0IFQyNiB2
MjZfOwotICBjb25zdCBUMjcgdjI3XzsKLSAgY29uc3QgVDI4IHYyOF87Ci0gIGNvbnN0IFQyOSB2
MjlfOwotICBjb25zdCBUMzAgdjMwXzsKLSAgY29uc3QgVDMxIHYzMV87Ci0gIGNvbnN0IFQzMiB2
MzJfOwotICBjb25zdCBUMzMgdjMzXzsKLSAgY29uc3QgVDM0IHYzNF87Ci0gIGNvbnN0IFQzNSB2
MzVfOwotICBjb25zdCBUMzYgdjM2XzsKLSAgY29uc3QgVDM3IHYzN187Ci0gIGNvbnN0IFQzOCB2
MzhfOwotICBjb25zdCBUMzkgdjM5XzsKLSAgY29uc3QgVDQwIHY0MF87Ci0gIGNvbnN0IFQ0MSB2
NDFfOwotICBjb25zdCBUNDIgdjQyXzsKLSAgY29uc3QgVDQzIHY0M187Ci0gIGNvbnN0IFQ0NCB2
NDRfOwotICBjb25zdCBUNDUgdjQ1XzsKLSAgY29uc3QgVDQ2IHY0Nl87Ci0gIGNvbnN0IFQ0NyB2
NDdfOwotICBjb25zdCBUNDggdjQ4XzsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlw
ZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1l
IFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBl
bmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywg
dHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBU
MjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQy
NSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFt
ZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlw
ZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBUMzYs
IHR5cGVuYW1lIFQzNywgdHlwZW5hbWUgVDM4LCB0eXBlbmFtZSBUMzksIHR5cGVuYW1lIFQ0MCwK
LSAgICB0eXBlbmFtZSBUNDEsIHR5cGVuYW1lIFQ0MiwgdHlwZW5hbWUgVDQzLCB0eXBlbmFtZSBU
NDQsIHR5cGVuYW1lIFQ0NSwKLSAgICB0eXBlbmFtZSBUNDYsIHR5cGVuYW1lIFQ0NywgdHlwZW5h
bWUgVDQ4LCB0eXBlbmFtZSBUNDk+Ci1jbGFzcyBWYWx1ZUFycmF5NDkgewotIHB1YmxpYzoKLSAg
VmFsdWVBcnJheTQ5KFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3
IHY3LCBUOCB2OCwgVDkgdjksCi0gICAgICBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMg
djEzLCBUMTQgdjE0LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3LAotICAgICAgVDE4IHYxOCwg
VDE5IHYxOSwgVDIwIHYyMCwgVDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYyMywgVDI0IHYyNCwgVDI1
IHYyNSwKLSAgICAgIFQyNiB2MjYsIFQyNyB2MjcsIFQyOCB2MjgsIFQyOSB2MjksIFQzMCB2MzAs
IFQzMSB2MzEsIFQzMiB2MzIsIFQzMyB2MzMsCi0gICAgICBUMzQgdjM0LCBUMzUgdjM1LCBUMzYg
djM2LCBUMzcgdjM3LCBUMzggdjM4LCBUMzkgdjM5LCBUNDAgdjQwLCBUNDEgdjQxLAotICAgICAg
VDQyIHY0MiwgVDQzIHY0MywgVDQ0IHY0NCwgVDQ1IHY0NSwgVDQ2IHY0NiwgVDQ3IHY0NywgVDQ4
IHY0OCwKLSAgICAgIFQ0OSB2NDkpIDogdjFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwgdjRfKHY0
KSwgdjVfKHY1KSwgdjZfKHY2KSwgdjdfKHY3KSwKLSAgICAgIHY4Xyh2OCksIHY5Xyh2OSksIHYx
MF8odjEwKSwgdjExXyh2MTEpLCB2MTJfKHYxMiksIHYxM18odjEzKSwgdjE0Xyh2MTQpLAotICAg
ICAgdjE1Xyh2MTUpLCB2MTZfKHYxNiksIHYxN18odjE3KSwgdjE4Xyh2MTgpLCB2MTlfKHYxOSks
IHYyMF8odjIwKSwKLSAgICAgIHYyMV8odjIxKSwgdjIyXyh2MjIpLCB2MjNfKHYyMyksIHYyNF8o
djI0KSwgdjI1Xyh2MjUpLCB2MjZfKHYyNiksCi0gICAgICB2MjdfKHYyNyksIHYyOF8odjI4KSwg
djI5Xyh2MjkpLCB2MzBfKHYzMCksIHYzMV8odjMxKSwgdjMyXyh2MzIpLAotICAgICAgdjMzXyh2
MzMpLCB2MzRfKHYzNCksIHYzNV8odjM1KSwgdjM2Xyh2MzYpLCB2MzdfKHYzNyksIHYzOF8odjM4
KSwKLSAgICAgIHYzOV8odjM5KSwgdjQwXyh2NDApLCB2NDFfKHY0MSksIHY0Ml8odjQyKSwgdjQz
Xyh2NDMpLCB2NDRfKHY0NCksCi0gICAgICB2NDVfKHY0NSksIHY0Nl8odjQ2KSwgdjQ3Xyh2NDcp
LCB2NDhfKHY0OCksIHY0OV8odjQ5KSB7fQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBv
cGVyYXRvciBQYXJhbUdlbmVyYXRvcjxUPigpIGNvbnN0IHsKLSAgICBjb25zdCBUIGFycmF5W10g
PSB7c3RhdGljX2Nhc3Q8VD4odjFfKSwgc3RhdGljX2Nhc3Q8VD4odjJfKSwKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8VD4odjNfKSwgc3RhdGljX2Nhc3Q8VD4odjRfKSwgc3RhdGljX2Nhc3Q8VD4odjVf
KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjZfKSwgc3RhdGljX2Nhc3Q8VD4odjdfKSwgc3Rh
dGljX2Nhc3Q8VD4odjhfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8VD4odjlfKSwgc3RhdGljX2Nh
c3Q8VD4odjEwXyksIHN0YXRpY19jYXN0PFQ+KHYxMV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxU
Pih2MTJfKSwgc3RhdGljX2Nhc3Q8VD4odjEzXyksIHN0YXRpY19jYXN0PFQ+KHYxNF8pLAotICAg
ICAgICBzdGF0aWNfY2FzdDxUPih2MTVfKSwgc3RhdGljX2Nhc3Q8VD4odjE2XyksIHN0YXRpY19j
YXN0PFQ+KHYxN18pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MThfKSwgc3RhdGljX2Nhc3Q8
VD4odjE5XyksIHN0YXRpY19jYXN0PFQ+KHYyMF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2
MjFfKSwgc3RhdGljX2Nhc3Q8VD4odjIyXyksIHN0YXRpY19jYXN0PFQ+KHYyM18pLAotICAgICAg
ICBzdGF0aWNfY2FzdDxUPih2MjRfKSwgc3RhdGljX2Nhc3Q8VD4odjI1XyksIHN0YXRpY19jYXN0
PFQ+KHYyNl8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MjdfKSwgc3RhdGljX2Nhc3Q8VD4o
djI4XyksIHN0YXRpY19jYXN0PFQ+KHYyOV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MzBf
KSwgc3RhdGljX2Nhc3Q8VD4odjMxXyksIHN0YXRpY19jYXN0PFQ+KHYzMl8pLAotICAgICAgICBz
dGF0aWNfY2FzdDxUPih2MzNfKSwgc3RhdGljX2Nhc3Q8VD4odjM0XyksIHN0YXRpY19jYXN0PFQ+
KHYzNV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MzZfKSwgc3RhdGljX2Nhc3Q8VD4odjM3
XyksIHN0YXRpY19jYXN0PFQ+KHYzOF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2MzlfKSwg
c3RhdGljX2Nhc3Q8VD4odjQwXyksIHN0YXRpY19jYXN0PFQ+KHY0MV8pLAotICAgICAgICBzdGF0
aWNfY2FzdDxUPih2NDJfKSwgc3RhdGljX2Nhc3Q8VD4odjQzXyksIHN0YXRpY19jYXN0PFQ+KHY0
NF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2NDVfKSwgc3RhdGljX2Nhc3Q8VD4odjQ2Xyks
IHN0YXRpY19jYXN0PFQ+KHY0N18pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2NDhfKSwgc3Rh
dGljX2Nhc3Q8VD4odjQ5Xyl9OwotICAgIHJldHVybiBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQot
IHByaXZhdGU6Ci0gIC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBv
cnRlZC4KLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVmFsdWVBcnJheTQ5JiBvdGhlcik7Ci0KLSAg
Y29uc3QgVDEgdjFfOwotICBjb25zdCBUMiB2Ml87Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3Qg
VDQgdjRfOwotICBjb25zdCBUNSB2NV87Ci0gIGNvbnN0IFQ2IHY2XzsKLSAgY29uc3QgVDcgdjdf
OwotICBjb25zdCBUOCB2OF87Ci0gIGNvbnN0IFQ5IHY5XzsKLSAgY29uc3QgVDEwIHYxMF87Ci0g
IGNvbnN0IFQxMSB2MTFfOwotICBjb25zdCBUMTIgdjEyXzsKLSAgY29uc3QgVDEzIHYxM187Ci0g
IGNvbnN0IFQxNCB2MTRfOwotICBjb25zdCBUMTUgdjE1XzsKLSAgY29uc3QgVDE2IHYxNl87Ci0g
IGNvbnN0IFQxNyB2MTdfOwotICBjb25zdCBUMTggdjE4XzsKLSAgY29uc3QgVDE5IHYxOV87Ci0g
IGNvbnN0IFQyMCB2MjBfOwotICBjb25zdCBUMjEgdjIxXzsKLSAgY29uc3QgVDIyIHYyMl87Ci0g
IGNvbnN0IFQyMyB2MjNfOwotICBjb25zdCBUMjQgdjI0XzsKLSAgY29uc3QgVDI1IHYyNV87Ci0g
IGNvbnN0IFQyNiB2MjZfOwotICBjb25zdCBUMjcgdjI3XzsKLSAgY29uc3QgVDI4IHYyOF87Ci0g
IGNvbnN0IFQyOSB2MjlfOwotICBjb25zdCBUMzAgdjMwXzsKLSAgY29uc3QgVDMxIHYzMV87Ci0g
IGNvbnN0IFQzMiB2MzJfOwotICBjb25zdCBUMzMgdjMzXzsKLSAgY29uc3QgVDM0IHYzNF87Ci0g
IGNvbnN0IFQzNSB2MzVfOwotICBjb25zdCBUMzYgdjM2XzsKLSAgY29uc3QgVDM3IHYzN187Ci0g
IGNvbnN0IFQzOCB2MzhfOwotICBjb25zdCBUMzkgdjM5XzsKLSAgY29uc3QgVDQwIHY0MF87Ci0g
IGNvbnN0IFQ0MSB2NDFfOwotICBjb25zdCBUNDIgdjQyXzsKLSAgY29uc3QgVDQzIHY0M187Ci0g
IGNvbnN0IFQ0NCB2NDRfOwotICBjb25zdCBUNDUgdjQ1XzsKLSAgY29uc3QgVDQ2IHY0Nl87Ci0g
IGNvbnN0IFQ0NyB2NDdfOwotICBjb25zdCBUNDggdjQ4XzsKLSAgY29uc3QgVDQ5IHY0OV87Ci19
OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlw
ZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlw
ZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0
eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0g
ICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5
LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1l
IFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBl
bmFtZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAg
dHlwZW5hbWUgVDMxLCB0eXBlbmFtZSBUMzIsIHR5cGVuYW1lIFQzMywgdHlwZW5hbWUgVDM0LCB0
eXBlbmFtZSBUMzUsCi0gICAgdHlwZW5hbWUgVDM2LCB0eXBlbmFtZSBUMzcsIHR5cGVuYW1lIFQz
OCwgdHlwZW5hbWUgVDM5LCB0eXBlbmFtZSBUNDAsCi0gICAgdHlwZW5hbWUgVDQxLCB0eXBlbmFt
ZSBUNDIsIHR5cGVuYW1lIFQ0MywgdHlwZW5hbWUgVDQ0LCB0eXBlbmFtZSBUNDUsCi0gICAgdHlw
ZW5hbWUgVDQ2LCB0eXBlbmFtZSBUNDcsIHR5cGVuYW1lIFQ0OCwgdHlwZW5hbWUgVDQ5LCB0eXBl
bmFtZSBUNTA+Ci1jbGFzcyBWYWx1ZUFycmF5NTAgewotIHB1YmxpYzoKLSAgVmFsdWVBcnJheTUw
KFQxIHYxLCBUMiB2MiwgVDMgdjMsIFQ0IHY0LCBUNSB2NSwgVDYgdjYsIFQ3IHY3LCBUOCB2OCwg
VDkgdjksCi0gICAgICBUMTAgdjEwLCBUMTEgdjExLCBUMTIgdjEyLCBUMTMgdjEzLCBUMTQgdjE0
LCBUMTUgdjE1LCBUMTYgdjE2LCBUMTcgdjE3LAotICAgICAgVDE4IHYxOCwgVDE5IHYxOSwgVDIw
IHYyMCwgVDIxIHYyMSwgVDIyIHYyMiwgVDIzIHYyMywgVDI0IHYyNCwgVDI1IHYyNSwKLSAgICAg
IFQyNiB2MjYsIFQyNyB2MjcsIFQyOCB2MjgsIFQyOSB2MjksIFQzMCB2MzAsIFQzMSB2MzEsIFQz
MiB2MzIsIFQzMyB2MzMsCi0gICAgICBUMzQgdjM0LCBUMzUgdjM1LCBUMzYgdjM2LCBUMzcgdjM3
LCBUMzggdjM4LCBUMzkgdjM5LCBUNDAgdjQwLCBUNDEgdjQxLAotICAgICAgVDQyIHY0MiwgVDQz
IHY0MywgVDQ0IHY0NCwgVDQ1IHY0NSwgVDQ2IHY0NiwgVDQ3IHY0NywgVDQ4IHY0OCwgVDQ5IHY0
OSwKLSAgICAgIFQ1MCB2NTApIDogdjFfKHYxKSwgdjJfKHYyKSwgdjNfKHYzKSwgdjRfKHY0KSwg
djVfKHY1KSwgdjZfKHY2KSwgdjdfKHY3KSwKLSAgICAgIHY4Xyh2OCksIHY5Xyh2OSksIHYxMF8o
djEwKSwgdjExXyh2MTEpLCB2MTJfKHYxMiksIHYxM18odjEzKSwgdjE0Xyh2MTQpLAotICAgICAg
djE1Xyh2MTUpLCB2MTZfKHYxNiksIHYxN18odjE3KSwgdjE4Xyh2MTgpLCB2MTlfKHYxOSksIHYy
MF8odjIwKSwKLSAgICAgIHYyMV8odjIxKSwgdjIyXyh2MjIpLCB2MjNfKHYyMyksIHYyNF8odjI0
KSwgdjI1Xyh2MjUpLCB2MjZfKHYyNiksCi0gICAgICB2MjdfKHYyNyksIHYyOF8odjI4KSwgdjI5
Xyh2MjkpLCB2MzBfKHYzMCksIHYzMV8odjMxKSwgdjMyXyh2MzIpLAotICAgICAgdjMzXyh2MzMp
LCB2MzRfKHYzNCksIHYzNV8odjM1KSwgdjM2Xyh2MzYpLCB2MzdfKHYzNyksIHYzOF8odjM4KSwK
LSAgICAgIHYzOV8odjM5KSwgdjQwXyh2NDApLCB2NDFfKHY0MSksIHY0Ml8odjQyKSwgdjQzXyh2
NDMpLCB2NDRfKHY0NCksCi0gICAgICB2NDVfKHY0NSksIHY0Nl8odjQ2KSwgdjQ3Xyh2NDcpLCB2
NDhfKHY0OCksIHY0OV8odjQ5KSwgdjUwXyh2NTApIHt9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci0gIG9wZXJhdG9yIFBhcmFtR2VuZXJhdG9yPFQ+KCkgY29uc3QgewotICAgIGNvbnN0IFQg
YXJyYXlbXSA9IHtzdGF0aWNfY2FzdDxUPih2MV8pLCBzdGF0aWNfY2FzdDxUPih2Ml8pLAotICAg
ICAgICBzdGF0aWNfY2FzdDxUPih2M18pLCBzdGF0aWNfY2FzdDxUPih2NF8pLCBzdGF0aWNfY2Fz
dDxUPih2NV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2Nl8pLCBzdGF0aWNfY2FzdDxUPih2
N18pLCBzdGF0aWNfY2FzdDxUPih2OF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxUPih2OV8pLCBz
dGF0aWNfY2FzdDxUPih2MTBfKSwgc3RhdGljX2Nhc3Q8VD4odjExXyksCi0gICAgICAgIHN0YXRp
Y19jYXN0PFQ+KHYxMl8pLCBzdGF0aWNfY2FzdDxUPih2MTNfKSwgc3RhdGljX2Nhc3Q8VD4odjE0
XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxNV8pLCBzdGF0aWNfY2FzdDxUPih2MTZfKSwg
c3RhdGljX2Nhc3Q8VD4odjE3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYxOF8pLCBzdGF0
aWNfY2FzdDxUPih2MTlfKSwgc3RhdGljX2Nhc3Q8VD4odjIwXyksCi0gICAgICAgIHN0YXRpY19j
YXN0PFQ+KHYyMV8pLCBzdGF0aWNfY2FzdDxUPih2MjJfKSwgc3RhdGljX2Nhc3Q8VD4odjIzXyks
Ci0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyNF8pLCBzdGF0aWNfY2FzdDxUPih2MjVfKSwgc3Rh
dGljX2Nhc3Q8VD4odjI2XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYyN18pLCBzdGF0aWNf
Y2FzdDxUPih2MjhfKSwgc3RhdGljX2Nhc3Q8VD4odjI5XyksCi0gICAgICAgIHN0YXRpY19jYXN0
PFQ+KHYzMF8pLCBzdGF0aWNfY2FzdDxUPih2MzFfKSwgc3RhdGljX2Nhc3Q8VD4odjMyXyksCi0g
ICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzM18pLCBzdGF0aWNfY2FzdDxUPih2MzRfKSwgc3RhdGlj
X2Nhc3Q8VD4odjM1XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHYzNl8pLCBzdGF0aWNfY2Fz
dDxUPih2MzdfKSwgc3RhdGljX2Nhc3Q8VD4odjM4XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+
KHYzOV8pLCBzdGF0aWNfY2FzdDxUPih2NDBfKSwgc3RhdGljX2Nhc3Q8VD4odjQxXyksCi0gICAg
ICAgIHN0YXRpY19jYXN0PFQ+KHY0Ml8pLCBzdGF0aWNfY2FzdDxUPih2NDNfKSwgc3RhdGljX2Nh
c3Q8VD4odjQ0XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY0NV8pLCBzdGF0aWNfY2FzdDxU
Pih2NDZfKSwgc3RhdGljX2Nhc3Q8VD4odjQ3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFQ+KHY0
OF8pLCBzdGF0aWNfY2FzdDxUPih2NDlfKSwgc3RhdGljX2Nhc3Q8VD4odjUwXyl9OwotICAgIHJl
dHVybiBWYWx1ZXNJbihhcnJheSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIE5vIGltcGxlbWVu
dGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgVmFsdWVBcnJheTUwJiBvdGhlcik7Ci0KLSAgY29uc3QgVDEgdjFfOwotICBjb25zdCBUMiB2
Ml87Ci0gIGNvbnN0IFQzIHYzXzsKLSAgY29uc3QgVDQgdjRfOwotICBjb25zdCBUNSB2NV87Ci0g
IGNvbnN0IFQ2IHY2XzsKLSAgY29uc3QgVDcgdjdfOwotICBjb25zdCBUOCB2OF87Ci0gIGNvbnN0
IFQ5IHY5XzsKLSAgY29uc3QgVDEwIHYxMF87Ci0gIGNvbnN0IFQxMSB2MTFfOwotICBjb25zdCBU
MTIgdjEyXzsKLSAgY29uc3QgVDEzIHYxM187Ci0gIGNvbnN0IFQxNCB2MTRfOwotICBjb25zdCBU
MTUgdjE1XzsKLSAgY29uc3QgVDE2IHYxNl87Ci0gIGNvbnN0IFQxNyB2MTdfOwotICBjb25zdCBU
MTggdjE4XzsKLSAgY29uc3QgVDE5IHYxOV87Ci0gIGNvbnN0IFQyMCB2MjBfOwotICBjb25zdCBU
MjEgdjIxXzsKLSAgY29uc3QgVDIyIHYyMl87Ci0gIGNvbnN0IFQyMyB2MjNfOwotICBjb25zdCBU
MjQgdjI0XzsKLSAgY29uc3QgVDI1IHYyNV87Ci0gIGNvbnN0IFQyNiB2MjZfOwotICBjb25zdCBU
MjcgdjI3XzsKLSAgY29uc3QgVDI4IHYyOF87Ci0gIGNvbnN0IFQyOSB2MjlfOwotICBjb25zdCBU
MzAgdjMwXzsKLSAgY29uc3QgVDMxIHYzMV87Ci0gIGNvbnN0IFQzMiB2MzJfOwotICBjb25zdCBU
MzMgdjMzXzsKLSAgY29uc3QgVDM0IHYzNF87Ci0gIGNvbnN0IFQzNSB2MzVfOwotICBjb25zdCBU
MzYgdjM2XzsKLSAgY29uc3QgVDM3IHYzN187Ci0gIGNvbnN0IFQzOCB2MzhfOwotICBjb25zdCBU
MzkgdjM5XzsKLSAgY29uc3QgVDQwIHY0MF87Ci0gIGNvbnN0IFQ0MSB2NDFfOwotICBjb25zdCBU
NDIgdjQyXzsKLSAgY29uc3QgVDQzIHY0M187Ci0gIGNvbnN0IFQ0NCB2NDRfOwotICBjb25zdCBU
NDUgdjQ1XzsKLSAgY29uc3QgVDQ2IHY0Nl87Ci0gIGNvbnN0IFQ0NyB2NDdfOwotICBjb25zdCBU
NDggdjQ4XzsKLSAgY29uc3QgVDQ5IHY0OV87Ci0gIGNvbnN0IFQ1MCB2NTBfOwotfTsKLQotIyBp
ZiBHVEVTVF9IQVNfQ09NQklORQotLy8gSU5URVJOQUwgSU1QTEVNRU5UQVRJT04gLSBETyBOT1Qg
VVNFIElOIFVTRVIgQ09ERS4KLS8vCi0vLyBHZW5lcmF0ZXMgdmFsdWVzIGZyb20gdGhlIENhcnRl
c2lhbiBwcm9kdWN0IG9mIHZhbHVlcyBwcm9kdWNlZAotLy8gYnkgdGhlIGFyZ3VtZW50IGdlbmVy
YXRvcnMuCi0vLwotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KLWNsYXNzIENh
cnRlc2lhblByb2R1Y3RHZW5lcmF0b3IyCi0gICAgOiBwdWJsaWMgUGFyYW1HZW5lcmF0b3JJbnRl
cmZhY2U8IDo6dGVzdGluZzo6dHVwbGU8VDEsIFQyPiA+IHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYg
Ojp0ZXN0aW5nOjp0dXBsZTxUMSwgVDI+IFBhcmFtVHlwZTsKLQotICBDYXJ0ZXNpYW5Qcm9kdWN0
R2VuZXJhdG9yMihjb25zdCBQYXJhbUdlbmVyYXRvcjxUMT4mIGcxLAotICAgICAgY29uc3QgUGFy
YW1HZW5lcmF0b3I8VDI+JiBnMikKLSAgICAgIDogZzFfKGcxKSwgZzJfKGcyKSB7fQotICB2aXJ0
dWFsIH5DYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yMigpIHt9Ci0KLSAgdmlydHVhbCBQYXJhbUl0
ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIEJlZ2luKCkgY29uc3QgewotICAgIHJldHVybiBu
ZXcgSXRlcmF0b3IodGhpcywgZzFfLCBnMV8uYmVnaW4oKSwgZzJfLCBnMl8uYmVnaW4oKSk7Ci0g
IH0KLSAgdmlydHVhbCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIEVuZCgpIGNv
bnN0IHsKLSAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKHRoaXMsIGcxXywgZzFfLmVuZCgpLCBnMl8s
IGcyXy5lbmQoKSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGNsYXNzIEl0ZXJhdG9yIDogcHVibGlj
IFBhcmFtSXRlcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiB7Ci0gICBwdWJsaWM6Ci0gICAgSXRl
cmF0b3IoY29uc3QgUGFyYW1HZW5lcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiogYmFzZSwKLSAg
ICAgIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQxPiYgZzEsCi0gICAgICBjb25zdCB0eXBlbmFtZSBQ
YXJhbUdlbmVyYXRvcjxUMT46Oml0ZXJhdG9yJiBjdXJyZW50MSwKLSAgICAgIGNvbnN0IFBhcmFt
R2VuZXJhdG9yPFQyPiYgZzIsCi0gICAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxU
Mj46Oml0ZXJhdG9yJiBjdXJyZW50MikKLSAgICAgICAgOiBiYXNlXyhiYXNlKSwKLSAgICAgICAg
ICBiZWdpbjFfKGcxLmJlZ2luKCkpLCBlbmQxXyhnMS5lbmQoKSksIGN1cnJlbnQxXyhjdXJyZW50
MSksCi0gICAgICAgICAgYmVnaW4yXyhnMi5iZWdpbigpKSwgZW5kMl8oZzIuZW5kKCkpLCBjdXJy
ZW50Ml8oY3VycmVudDIpICAgIHsKLSAgICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9
Ci0gICAgdmlydHVhbCB+SXRlcmF0b3IoKSB7fQotCi0gICAgdmlydHVhbCBjb25zdCBQYXJhbUdl
bmVyYXRvckludGVyZmFjZTxQYXJhbVR5cGU+KiBCYXNlR2VuZXJhdG9yKCkgY29uc3QgewotICAg
ICAgcmV0dXJuIGJhc2VfOwotICAgIH0KLSAgICAvLyBBZHZhbmNlIHNob3VsZCBub3QgYmUgY2Fs
bGVkIG9uIGJleW9uZC1vZi1yYW5nZSBpdGVyYXRvcnMKLSAgICAvLyBzbyBubyBjb21wb25lbnQg
aXRlcmF0b3JzIG11c3QgYmUgYmV5b25kIGVuZCBvZiByYW5nZSwgZWl0aGVyLgotICAgIHZpcnR1
YWwgdm9pZCBBZHZhbmNlKCkgewotICAgICAgYXNzZXJ0KCFBdEVuZCgpKTsKLSAgICAgICsrY3Vy
cmVudDJfOwotICAgICAgaWYgKGN1cnJlbnQyXyA9PSBlbmQyXykgewotICAgICAgICBjdXJyZW50
Ml8gPSBiZWdpbjJfOwotICAgICAgICArK2N1cnJlbnQxXzsKLSAgICAgIH0KLSAgICAgIENvbXB1
dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0gICAgdmlydHVhbCBQYXJhbUl0ZXJhdG9ySW50ZXJm
YWNlPFBhcmFtVHlwZT4qIENsb25lKCkgY29uc3QgewotICAgICAgcmV0dXJuIG5ldyBJdGVyYXRv
cigqdGhpcyk7Ci0gICAgfQotICAgIHZpcnR1YWwgY29uc3QgUGFyYW1UeXBlKiBDdXJyZW50KCkg
Y29uc3QgeyByZXR1cm4gJmN1cnJlbnRfdmFsdWVfOyB9Ci0gICAgdmlydHVhbCBib29sIEVxdWFs
cyhjb25zdCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4mIG90aGVyKSBjb25zdCB7
Ci0gICAgICAvLyBIYXZpbmcgdGhlIHNhbWUgYmFzZSBnZW5lcmF0b3IgZ3VhcmFudGVlcyB0aGF0
IHRoZSBvdGhlcgotICAgICAgLy8gaXRlcmF0b3IgaXMgb2YgdGhlIHNhbWUgdHlwZSBhbmQgd2Ug
Y2FuIGRvd25jYXN0LgotICAgICAgR1RFU1RfQ0hFQ0tfKEJhc2VHZW5lcmF0b3IoKSA9PSBvdGhl
ci5CYXNlR2VuZXJhdG9yKCkpCi0gICAgICAgICAgPDwgIlRoZSBwcm9ncmFtIGF0dGVtcHRlZCB0
byBjb21wYXJlIGl0ZXJhdG9ycyAiCi0gICAgICAgICAgPDwgImZyb20gZGlmZmVyZW50IGdlbmVy
YXRvcnMuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICBjb25zdCBJdGVyYXRvciogdHlwZWRfb3RoZXIg
PQotICAgICAgICAgIENoZWNrZWREb3duY2FzdFRvQWN0dWFsVHlwZTxjb25zdCBJdGVyYXRvcj4o
Jm90aGVyKTsKLSAgICAgIC8vIFdlIG11c3QgcmVwb3J0IGl0ZXJhdG9ycyBlcXVhbCBpZiB0aGV5
IGJvdGggcG9pbnQgYmV5b25kIHRoZWlyCi0gICAgICAvLyByZXNwZWN0aXZlIHJhbmdlcy4gVGhh
dCBjYW4gaGFwcGVuIGluIGEgdmFyaWV0eSBvZiBmYXNoaW9ucywKLSAgICAgIC8vIHNvIHdlIGhh
dmUgdG8gY29uc3VsdCBBdEVuZCgpLgotICAgICAgcmV0dXJuIChBdEVuZCgpICYmIHR5cGVkX290
aGVyLT5BdEVuZCgpKSB8fAotICAgICAgICAgKAotICAgICAgICAgIGN1cnJlbnQxXyA9PSB0eXBl
ZF9vdGhlci0+Y3VycmVudDFfICYmCi0gICAgICAgICAgY3VycmVudDJfID09IHR5cGVkX290aGVy
LT5jdXJyZW50Ml8pOwotICAgIH0KLQotICAgcHJpdmF0ZToKLSAgICBJdGVyYXRvcihjb25zdCBJ
dGVyYXRvciYgb3RoZXIpCi0gICAgICAgIDogYmFzZV8ob3RoZXIuYmFzZV8pLAotICAgICAgICBi
ZWdpbjFfKG90aGVyLmJlZ2luMV8pLAotICAgICAgICBlbmQxXyhvdGhlci5lbmQxXyksCi0gICAg
ICAgIGN1cnJlbnQxXyhvdGhlci5jdXJyZW50MV8pLAotICAgICAgICBiZWdpbjJfKG90aGVyLmJl
Z2luMl8pLAotICAgICAgICBlbmQyXyhvdGhlci5lbmQyXyksCi0gICAgICAgIGN1cnJlbnQyXyhv
dGhlci5jdXJyZW50Ml8pIHsKLSAgICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0K
LSAgICB2b2lkIENvbXB1dGVDdXJyZW50VmFsdWUoKSB7Ci0gICAgICBpZiAoIUF0RW5kKCkpCi0g
ICAgICAgIGN1cnJlbnRfdmFsdWVfID0gUGFyYW1UeXBlKCpjdXJyZW50MV8sICpjdXJyZW50Ml8p
OwotICAgIH0KLSAgICBib29sIEF0RW5kKCkgY29uc3QgewotICAgICAgLy8gV2UgbXVzdCByZXBv
cnQgaXRlcmF0b3IgcGFzdCB0aGUgZW5kIG9mIHRoZSByYW5nZSB3aGVuIGVpdGhlciBvZiB0aGUK
LSAgICAgIC8vIGNvbXBvbmVudCBpdGVyYXRvcnMgaGFzIHJlYWNoZWQgdGhlIGVuZCBvZiBpdHMg
cmFuZ2UuCi0gICAgICByZXR1cm4KLSAgICAgICAgICBjdXJyZW50MV8gPT0gZW5kMV8gfHwKLSAg
ICAgICAgICBjdXJyZW50Ml8gPT0gZW5kMl87Ci0gICAgfQotCi0gICAgLy8gTm8gaW1wbGVtZW50
YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICAgIHZvaWQgb3BlcmF0b3I9KGNv
bnN0IEl0ZXJhdG9yJiBvdGhlcik7Ci0KLSAgICBjb25zdCBQYXJhbUdlbmVyYXRvckludGVyZmFj
ZTxQYXJhbVR5cGU+KiBjb25zdCBiYXNlXzsKLSAgICAvLyBiZWdpbltpXV8gYW5kIGVuZFtpXV8g
ZGVmaW5lIHRoZSBpLXRoIHJhbmdlIHRoYXQgSXRlcmF0b3IgdHJhdmVyc2VzLgotICAgIC8vIGN1
cnJlbnRbaV1fIGlzIHRoZSBhY3R1YWwgdHJhdmVyc2luZyBpdGVyYXRvci4KLSAgICBjb25zdCB0
eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMT46Oml0ZXJhdG9yIGJlZ2luMV87Ci0gICAgY29uc3Qg
dHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDE+OjppdGVyYXRvciBlbmQxXzsKLSAgICB0eXBlbmFt
ZSBQYXJhbUdlbmVyYXRvcjxUMT46Oml0ZXJhdG9yIGN1cnJlbnQxXzsKLSAgICBjb25zdCB0eXBl
bmFtZSBQYXJhbUdlbmVyYXRvcjxUMj46Oml0ZXJhdG9yIGJlZ2luMl87Ci0gICAgY29uc3QgdHlw
ZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDI+OjppdGVyYXRvciBlbmQyXzsKLSAgICB0eXBlbmFtZSBQ
YXJhbUdlbmVyYXRvcjxUMj46Oml0ZXJhdG9yIGN1cnJlbnQyXzsKLSAgICBQYXJhbVR5cGUgY3Vy
cmVudF92YWx1ZV87Ci0gIH07ICAvLyBjbGFzcyBDYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yMjo6
SXRlcmF0b3IKLQotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBw
b3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IENhcnRlc2lhblByb2R1Y3RHZW5lcmF0b3Iy
JiBvdGhlcik7Ci0KLSAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDE+IGcxXzsKLSAgY29uc3QgUGFy
YW1HZW5lcmF0b3I8VDI+IGcyXzsKLX07ICAvLyBjbGFzcyBDYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJh
dG9yMgotCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQz
PgotY2xhc3MgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjMKLSAgICA6IHB1YmxpYyBQYXJhbUdl
bmVyYXRvckludGVyZmFjZTwgOjp0ZXN0aW5nOjp0dXBsZTxUMSwgVDIsIFQzPiA+IHsKLSBwdWJs
aWM6Ci0gIHR5cGVkZWYgOjp0ZXN0aW5nOjp0dXBsZTxUMSwgVDIsIFQzPiBQYXJhbVR5cGU7Ci0K
LSAgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjMoY29uc3QgUGFyYW1HZW5lcmF0b3I8VDE+JiBn
MSwKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQyPiYgZzIsIGNvbnN0IFBhcmFtR2VuZXJh
dG9yPFQzPiYgZzMpCi0gICAgICA6IGcxXyhnMSksIGcyXyhnMiksIGczXyhnMykge30KLSAgdmly
dHVhbCB+Q2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjMoKSB7fQotCi0gIHZpcnR1YWwgUGFyYW1J
dGVyYXRvckludGVyZmFjZTxQYXJhbVR5cGU+KiBCZWdpbigpIGNvbnN0IHsKLSAgICByZXR1cm4g
bmV3IEl0ZXJhdG9yKHRoaXMsIGcxXywgZzFfLmJlZ2luKCksIGcyXywgZzJfLmJlZ2luKCksIGcz
XywKLSAgICAgICAgZzNfLmJlZ2luKCkpOwotICB9Ci0gIHZpcnR1YWwgUGFyYW1JdGVyYXRvcklu
dGVyZmFjZTxQYXJhbVR5cGU+KiBFbmQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIG5ldyBJdGVyYXRv
cih0aGlzLCBnMV8sIGcxXy5lbmQoKSwgZzJfLCBnMl8uZW5kKCksIGczXywgZzNfLmVuZCgpKTsK
LSAgfQotCi0gcHJpdmF0ZToKLSAgY2xhc3MgSXRlcmF0b3IgOiBwdWJsaWMgUGFyYW1JdGVyYXRv
ckludGVyZmFjZTxQYXJhbVR5cGU+IHsKLSAgIHB1YmxpYzoKLSAgICBJdGVyYXRvcihjb25zdCBQ
YXJhbUdlbmVyYXRvckludGVyZmFjZTxQYXJhbVR5cGU+KiBiYXNlLAotICAgICAgY29uc3QgUGFy
YW1HZW5lcmF0b3I8VDE+JiBnMSwKLSAgICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9y
PFQxPjo6aXRlcmF0b3ImIGN1cnJlbnQxLAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDI+
JiBnMiwKLSAgICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQyPjo6aXRlcmF0b3Im
IGN1cnJlbnQyLAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDM+JiBnMywKLSAgICAgIGNv
bnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQzPjo6aXRlcmF0b3ImIGN1cnJlbnQzKQotICAg
ICAgICA6IGJhc2VfKGJhc2UpLAotICAgICAgICAgIGJlZ2luMV8oZzEuYmVnaW4oKSksIGVuZDFf
KGcxLmVuZCgpKSwgY3VycmVudDFfKGN1cnJlbnQxKSwKLSAgICAgICAgICBiZWdpbjJfKGcyLmJl
Z2luKCkpLCBlbmQyXyhnMi5lbmQoKSksIGN1cnJlbnQyXyhjdXJyZW50MiksCi0gICAgICAgICAg
YmVnaW4zXyhnMy5iZWdpbigpKSwgZW5kM18oZzMuZW5kKCkpLCBjdXJyZW50M18oY3VycmVudDMp
ICAgIHsKLSAgICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+
SXRlcmF0b3IoKSB7fQotCi0gICAgdmlydHVhbCBjb25zdCBQYXJhbUdlbmVyYXRvckludGVyZmFj
ZTxQYXJhbVR5cGU+KiBCYXNlR2VuZXJhdG9yKCkgY29uc3QgewotICAgICAgcmV0dXJuIGJhc2Vf
OwotICAgIH0KLSAgICAvLyBBZHZhbmNlIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uIGJleW9uZC1v
Zi1yYW5nZSBpdGVyYXRvcnMKLSAgICAvLyBzbyBubyBjb21wb25lbnQgaXRlcmF0b3JzIG11c3Qg
YmUgYmV5b25kIGVuZCBvZiByYW5nZSwgZWl0aGVyLgotICAgIHZpcnR1YWwgdm9pZCBBZHZhbmNl
KCkgewotICAgICAgYXNzZXJ0KCFBdEVuZCgpKTsKLSAgICAgICsrY3VycmVudDNfOwotICAgICAg
aWYgKGN1cnJlbnQzXyA9PSBlbmQzXykgewotICAgICAgICBjdXJyZW50M18gPSBiZWdpbjNfOwot
ICAgICAgICArK2N1cnJlbnQyXzsKLSAgICAgIH0KLSAgICAgIGlmIChjdXJyZW50Ml8gPT0gZW5k
Ml8pIHsKLSAgICAgICAgY3VycmVudDJfID0gYmVnaW4yXzsKLSAgICAgICAgKytjdXJyZW50MV87
Ci0gICAgICB9Ci0gICAgICBDb21wdXRlQ3VycmVudFZhbHVlKCk7Ci0gICAgfQotICAgIHZpcnR1
YWwgUGFyYW1JdGVyYXRvckludGVyZmFjZTxQYXJhbVR5cGU+KiBDbG9uZSgpIGNvbnN0IHsKLSAg
ICAgIHJldHVybiBuZXcgSXRlcmF0b3IoKnRoaXMpOwotICAgIH0KLSAgICB2aXJ0dWFsIGNvbnN0
IFBhcmFtVHlwZSogQ3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICZjdXJyZW50X3ZhbHVlXzsgfQot
ICAgIHZpcnR1YWwgYm9vbCBFcXVhbHMoY29uc3QgUGFyYW1JdGVyYXRvckludGVyZmFjZTxQYXJh
bVR5cGU+JiBvdGhlcikgY29uc3QgewotICAgICAgLy8gSGF2aW5nIHRoZSBzYW1lIGJhc2UgZ2Vu
ZXJhdG9yIGd1YXJhbnRlZXMgdGhhdCB0aGUgb3RoZXIKLSAgICAgIC8vIGl0ZXJhdG9yIGlzIG9m
IHRoZSBzYW1lIHR5cGUgYW5kIHdlIGNhbiBkb3duY2FzdC4KLSAgICAgIEdURVNUX0NIRUNLXyhC
YXNlR2VuZXJhdG9yKCkgPT0gb3RoZXIuQmFzZUdlbmVyYXRvcigpKQotICAgICAgICAgIDw8ICJU
aGUgcHJvZ3JhbSBhdHRlbXB0ZWQgdG8gY29tcGFyZSBpdGVyYXRvcnMgIgotICAgICAgICAgIDw8
ICJmcm9tIGRpZmZlcmVudCBnZW5lcmF0b3JzLiIgPDwgc3RkOjplbmRsOwotICAgICAgY29uc3Qg
SXRlcmF0b3IqIHR5cGVkX290aGVyID0KLSAgICAgICAgICBDaGVja2VkRG93bmNhc3RUb0FjdHVh
bFR5cGU8Y29uc3QgSXRlcmF0b3I+KCZvdGhlcik7Ci0gICAgICAvLyBXZSBtdXN0IHJlcG9ydCBp
dGVyYXRvcnMgZXF1YWwgaWYgdGhleSBib3RoIHBvaW50IGJleW9uZCB0aGVpcgotICAgICAgLy8g
cmVzcGVjdGl2ZSByYW5nZXMuIFRoYXQgY2FuIGhhcHBlbiBpbiBhIHZhcmlldHkgb2YgZmFzaGlv
bnMsCi0gICAgICAvLyBzbyB3ZSBoYXZlIHRvIGNvbnN1bHQgQXRFbmQoKS4KLSAgICAgIHJldHVy
biAoQXRFbmQoKSAmJiB0eXBlZF9vdGhlci0+QXRFbmQoKSkgfHwKLSAgICAgICAgICgKLSAgICAg
ICAgICBjdXJyZW50MV8gPT0gdHlwZWRfb3RoZXItPmN1cnJlbnQxXyAmJgotICAgICAgICAgIGN1
cnJlbnQyXyA9PSB0eXBlZF9vdGhlci0+Y3VycmVudDJfICYmCi0gICAgICAgICAgY3VycmVudDNf
ID09IHR5cGVkX290aGVyLT5jdXJyZW50M18pOwotICAgIH0KLQotICAgcHJpdmF0ZToKLSAgICBJ
dGVyYXRvcihjb25zdCBJdGVyYXRvciYgb3RoZXIpCi0gICAgICAgIDogYmFzZV8ob3RoZXIuYmFz
ZV8pLAotICAgICAgICBiZWdpbjFfKG90aGVyLmJlZ2luMV8pLAotICAgICAgICBlbmQxXyhvdGhl
ci5lbmQxXyksCi0gICAgICAgIGN1cnJlbnQxXyhvdGhlci5jdXJyZW50MV8pLAotICAgICAgICBi
ZWdpbjJfKG90aGVyLmJlZ2luMl8pLAotICAgICAgICBlbmQyXyhvdGhlci5lbmQyXyksCi0gICAg
ICAgIGN1cnJlbnQyXyhvdGhlci5jdXJyZW50Ml8pLAotICAgICAgICBiZWdpbjNfKG90aGVyLmJl
Z2luM18pLAotICAgICAgICBlbmQzXyhvdGhlci5lbmQzXyksCi0gICAgICAgIGN1cnJlbnQzXyhv
dGhlci5jdXJyZW50M18pIHsKLSAgICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0K
LSAgICB2b2lkIENvbXB1dGVDdXJyZW50VmFsdWUoKSB7Ci0gICAgICBpZiAoIUF0RW5kKCkpCi0g
ICAgICAgIGN1cnJlbnRfdmFsdWVfID0gUGFyYW1UeXBlKCpjdXJyZW50MV8sICpjdXJyZW50Ml8s
ICpjdXJyZW50M18pOwotICAgIH0KLSAgICBib29sIEF0RW5kKCkgY29uc3QgewotICAgICAgLy8g
V2UgbXVzdCByZXBvcnQgaXRlcmF0b3IgcGFzdCB0aGUgZW5kIG9mIHRoZSByYW5nZSB3aGVuIGVp
dGhlciBvZiB0aGUKLSAgICAgIC8vIGNvbXBvbmVudCBpdGVyYXRvcnMgaGFzIHJlYWNoZWQgdGhl
IGVuZCBvZiBpdHMgcmFuZ2UuCi0gICAgICByZXR1cm4KLSAgICAgICAgICBjdXJyZW50MV8gPT0g
ZW5kMV8gfHwKLSAgICAgICAgICBjdXJyZW50Ml8gPT0gZW5kMl8gfHwKLSAgICAgICAgICBjdXJy
ZW50M18gPT0gZW5kM187Ci0gICAgfQotCi0gICAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3Np
Z25tZW50IGlzIHVuc3VwcG9ydGVkLgotICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEl0ZXJhdG9y
JiBvdGhlcik7Ci0KLSAgICBjb25zdCBQYXJhbUdlbmVyYXRvckludGVyZmFjZTxQYXJhbVR5cGU+
KiBjb25zdCBiYXNlXzsKLSAgICAvLyBiZWdpbltpXV8gYW5kIGVuZFtpXV8gZGVmaW5lIHRoZSBp
LXRoIHJhbmdlIHRoYXQgSXRlcmF0b3IgdHJhdmVyc2VzLgotICAgIC8vIGN1cnJlbnRbaV1fIGlz
IHRoZSBhY3R1YWwgdHJhdmVyc2luZyBpdGVyYXRvci4KLSAgICBjb25zdCB0eXBlbmFtZSBQYXJh
bUdlbmVyYXRvcjxUMT46Oml0ZXJhdG9yIGJlZ2luMV87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFy
YW1HZW5lcmF0b3I8VDE+OjppdGVyYXRvciBlbmQxXzsKLSAgICB0eXBlbmFtZSBQYXJhbUdlbmVy
YXRvcjxUMT46Oml0ZXJhdG9yIGN1cnJlbnQxXzsKLSAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdl
bmVyYXRvcjxUMj46Oml0ZXJhdG9yIGJlZ2luMl87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1H
ZW5lcmF0b3I8VDI+OjppdGVyYXRvciBlbmQyXzsKLSAgICB0eXBlbmFtZSBQYXJhbUdlbmVyYXRv
cjxUMj46Oml0ZXJhdG9yIGN1cnJlbnQyXzsKLSAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVy
YXRvcjxUMz46Oml0ZXJhdG9yIGJlZ2luM187Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5l
cmF0b3I8VDM+OjppdGVyYXRvciBlbmQzXzsKLSAgICB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxU
Mz46Oml0ZXJhdG9yIGN1cnJlbnQzXzsKLSAgICBQYXJhbVR5cGUgY3VycmVudF92YWx1ZV87Ci0g
IH07ICAvLyBjbGFzcyBDYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yMzo6SXRlcmF0b3IKLQotICAv
LyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQg
b3BlcmF0b3I9KGNvbnN0IENhcnRlc2lhblByb2R1Y3RHZW5lcmF0b3IzJiBvdGhlcik7Ci0KLSAg
Y29uc3QgUGFyYW1HZW5lcmF0b3I8VDE+IGcxXzsKLSAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDI+
IGcyXzsKLSAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDM+IGczXzsKLX07ICAvLyBjbGFzcyBDYXJ0
ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yMwotCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5h
bWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUND4KLWNsYXNzIENhcnRlc2lhblByb2R1Y3RH
ZW5lcmF0b3I0Ci0gICAgOiBwdWJsaWMgUGFyYW1HZW5lcmF0b3JJbnRlcmZhY2U8IDo6dGVzdGlu
Zzo6dHVwbGU8VDEsIFQyLCBUMywgVDQ+ID4gewotIHB1YmxpYzoKLSAgdHlwZWRlZiA6OnRlc3Rp
bmc6OnR1cGxlPFQxLCBUMiwgVDMsIFQ0PiBQYXJhbVR5cGU7Ci0KLSAgQ2FydGVzaWFuUHJvZHVj
dEdlbmVyYXRvcjQoY29uc3QgUGFyYW1HZW5lcmF0b3I8VDE+JiBnMSwKLSAgICAgIGNvbnN0IFBh
cmFtR2VuZXJhdG9yPFQyPiYgZzIsIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQzPiYgZzMsCi0gICAg
ICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUND4mIGc0KQotICAgICAgOiBnMV8oZzEpLCBnMl8oZzIp
LCBnM18oZzMpLCBnNF8oZzQpIHt9Ci0gIHZpcnR1YWwgfkNhcnRlc2lhblByb2R1Y3RHZW5lcmF0
b3I0KCkge30KLQotICB2aXJ0dWFsIFBhcmFtSXRlcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiog
QmVnaW4oKSBjb25zdCB7Ci0gICAgcmV0dXJuIG5ldyBJdGVyYXRvcih0aGlzLCBnMV8sIGcxXy5i
ZWdpbigpLCBnMl8sIGcyXy5iZWdpbigpLCBnM18sCi0gICAgICAgIGczXy5iZWdpbigpLCBnNF8s
IGc0Xy5iZWdpbigpKTsKLSAgfQotICB2aXJ0dWFsIFBhcmFtSXRlcmF0b3JJbnRlcmZhY2U8UGFy
YW1UeXBlPiogRW5kKCkgY29uc3QgewotICAgIHJldHVybiBuZXcgSXRlcmF0b3IodGhpcywgZzFf
LCBnMV8uZW5kKCksIGcyXywgZzJfLmVuZCgpLCBnM18sIGczXy5lbmQoKSwKLSAgICAgICAgZzRf
LCBnNF8uZW5kKCkpOwotICB9Ci0KLSBwcml2YXRlOgotICBjbGFzcyBJdGVyYXRvciA6IHB1Ymxp
YyBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4gewotICAgcHVibGljOgotICAgIEl0
ZXJhdG9yKGNvbnN0IFBhcmFtR2VuZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIGJhc2UsCi0g
ICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUMT4mIGcxLAotICAgICAgY29uc3QgdHlwZW5hbWUg
UGFyYW1HZW5lcmF0b3I8VDE+OjppdGVyYXRvciYgY3VycmVudDEsCi0gICAgICBjb25zdCBQYXJh
bUdlbmVyYXRvcjxUMj4mIGcyLAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8
VDI+OjppdGVyYXRvciYgY3VycmVudDIsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUMz4m
IGczLAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDM+OjppdGVyYXRvciYg
Y3VycmVudDMsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUND4mIGc0LAotICAgICAgY29u
c3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDQ+OjppdGVyYXRvciYgY3VycmVudDQpCi0gICAg
ICAgIDogYmFzZV8oYmFzZSksCi0gICAgICAgICAgYmVnaW4xXyhnMS5iZWdpbigpKSwgZW5kMV8o
ZzEuZW5kKCkpLCBjdXJyZW50MV8oY3VycmVudDEpLAotICAgICAgICAgIGJlZ2luMl8oZzIuYmVn
aW4oKSksIGVuZDJfKGcyLmVuZCgpKSwgY3VycmVudDJfKGN1cnJlbnQyKSwKLSAgICAgICAgICBi
ZWdpbjNfKGczLmJlZ2luKCkpLCBlbmQzXyhnMy5lbmQoKSksIGN1cnJlbnQzXyhjdXJyZW50Myks
Ci0gICAgICAgICAgYmVnaW40XyhnNC5iZWdpbigpKSwgZW5kNF8oZzQuZW5kKCkpLCBjdXJyZW50
NF8oY3VycmVudDQpICAgIHsKLSAgICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0g
ICAgdmlydHVhbCB+SXRlcmF0b3IoKSB7fQotCi0gICAgdmlydHVhbCBjb25zdCBQYXJhbUdlbmVy
YXRvckludGVyZmFjZTxQYXJhbVR5cGU+KiBCYXNlR2VuZXJhdG9yKCkgY29uc3QgewotICAgICAg
cmV0dXJuIGJhc2VfOwotICAgIH0KLSAgICAvLyBBZHZhbmNlIHNob3VsZCBub3QgYmUgY2FsbGVk
IG9uIGJleW9uZC1vZi1yYW5nZSBpdGVyYXRvcnMKLSAgICAvLyBzbyBubyBjb21wb25lbnQgaXRl
cmF0b3JzIG11c3QgYmUgYmV5b25kIGVuZCBvZiByYW5nZSwgZWl0aGVyLgotICAgIHZpcnR1YWwg
dm9pZCBBZHZhbmNlKCkgewotICAgICAgYXNzZXJ0KCFBdEVuZCgpKTsKLSAgICAgICsrY3VycmVu
dDRfOwotICAgICAgaWYgKGN1cnJlbnQ0XyA9PSBlbmQ0XykgewotICAgICAgICBjdXJyZW50NF8g
PSBiZWdpbjRfOwotICAgICAgICArK2N1cnJlbnQzXzsKLSAgICAgIH0KLSAgICAgIGlmIChjdXJy
ZW50M18gPT0gZW5kM18pIHsKLSAgICAgICAgY3VycmVudDNfID0gYmVnaW4zXzsKLSAgICAgICAg
KytjdXJyZW50Ml87Ci0gICAgICB9Ci0gICAgICBpZiAoY3VycmVudDJfID09IGVuZDJfKSB7Ci0g
ICAgICAgIGN1cnJlbnQyXyA9IGJlZ2luMl87Ci0gICAgICAgICsrY3VycmVudDFfOwotICAgICAg
fQotICAgICAgQ29tcHV0ZUN1cnJlbnRWYWx1ZSgpOwotICAgIH0KLSAgICB2aXJ0dWFsIFBhcmFt
SXRlcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiogQ2xvbmUoKSBjb25zdCB7Ci0gICAgICByZXR1
cm4gbmV3IEl0ZXJhdG9yKCp0aGlzKTsKLSAgICB9Ci0gICAgdmlydHVhbCBjb25zdCBQYXJhbVR5
cGUqIEN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAmY3VycmVudF92YWx1ZV87IH0KLSAgICB2aXJ0
dWFsIGJvb2wgRXF1YWxzKGNvbnN0IFBhcmFtSXRlcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiYg
b3RoZXIpIGNvbnN0IHsKLSAgICAgIC8vIEhhdmluZyB0aGUgc2FtZSBiYXNlIGdlbmVyYXRvciBn
dWFyYW50ZWVzIHRoYXQgdGhlIG90aGVyCi0gICAgICAvLyBpdGVyYXRvciBpcyBvZiB0aGUgc2Ft
ZSB0eXBlIGFuZCB3ZSBjYW4gZG93bmNhc3QuCi0gICAgICBHVEVTVF9DSEVDS18oQmFzZUdlbmVy
YXRvcigpID09IG90aGVyLkJhc2VHZW5lcmF0b3IoKSkKLSAgICAgICAgICA8PCAiVGhlIHByb2dy
YW0gYXR0ZW1wdGVkIHRvIGNvbXBhcmUgaXRlcmF0b3JzICIKLSAgICAgICAgICA8PCAiZnJvbSBk
aWZmZXJlbnQgZ2VuZXJhdG9ycy4iIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIGNvbnN0IEl0ZXJhdG9y
KiB0eXBlZF9vdGhlciA9Ci0gICAgICAgICAgQ2hlY2tlZERvd25jYXN0VG9BY3R1YWxUeXBlPGNv
bnN0IEl0ZXJhdG9yPigmb3RoZXIpOwotICAgICAgLy8gV2UgbXVzdCByZXBvcnQgaXRlcmF0b3Jz
IGVxdWFsIGlmIHRoZXkgYm90aCBwb2ludCBiZXlvbmQgdGhlaXIKLSAgICAgIC8vIHJlc3BlY3Rp
dmUgcmFuZ2VzLiBUaGF0IGNhbiBoYXBwZW4gaW4gYSB2YXJpZXR5IG9mIGZhc2hpb25zLAotICAg
ICAgLy8gc28gd2UgaGF2ZSB0byBjb25zdWx0IEF0RW5kKCkuCi0gICAgICByZXR1cm4gKEF0RW5k
KCkgJiYgdHlwZWRfb3RoZXItPkF0RW5kKCkpIHx8Ci0gICAgICAgICAoCi0gICAgICAgICAgY3Vy
cmVudDFfID09IHR5cGVkX290aGVyLT5jdXJyZW50MV8gJiYKLSAgICAgICAgICBjdXJyZW50Ml8g
PT0gdHlwZWRfb3RoZXItPmN1cnJlbnQyXyAmJgotICAgICAgICAgIGN1cnJlbnQzXyA9PSB0eXBl
ZF9vdGhlci0+Y3VycmVudDNfICYmCi0gICAgICAgICAgY3VycmVudDRfID09IHR5cGVkX290aGVy
LT5jdXJyZW50NF8pOwotICAgIH0KLQotICAgcHJpdmF0ZToKLSAgICBJdGVyYXRvcihjb25zdCBJ
dGVyYXRvciYgb3RoZXIpCi0gICAgICAgIDogYmFzZV8ob3RoZXIuYmFzZV8pLAotICAgICAgICBi
ZWdpbjFfKG90aGVyLmJlZ2luMV8pLAotICAgICAgICBlbmQxXyhvdGhlci5lbmQxXyksCi0gICAg
ICAgIGN1cnJlbnQxXyhvdGhlci5jdXJyZW50MV8pLAotICAgICAgICBiZWdpbjJfKG90aGVyLmJl
Z2luMl8pLAotICAgICAgICBlbmQyXyhvdGhlci5lbmQyXyksCi0gICAgICAgIGN1cnJlbnQyXyhv
dGhlci5jdXJyZW50Ml8pLAotICAgICAgICBiZWdpbjNfKG90aGVyLmJlZ2luM18pLAotICAgICAg
ICBlbmQzXyhvdGhlci5lbmQzXyksCi0gICAgICAgIGN1cnJlbnQzXyhvdGhlci5jdXJyZW50M18p
LAotICAgICAgICBiZWdpbjRfKG90aGVyLmJlZ2luNF8pLAotICAgICAgICBlbmQ0XyhvdGhlci5l
bmQ0XyksCi0gICAgICAgIGN1cnJlbnQ0XyhvdGhlci5jdXJyZW50NF8pIHsKLSAgICAgIENvbXB1
dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIENvbXB1dGVDdXJyZW50VmFsdWUo
KSB7Ci0gICAgICBpZiAoIUF0RW5kKCkpCi0gICAgICAgIGN1cnJlbnRfdmFsdWVfID0gUGFyYW1U
eXBlKCpjdXJyZW50MV8sICpjdXJyZW50Ml8sICpjdXJyZW50M18sCi0gICAgICAgICAgICAqY3Vy
cmVudDRfKTsKLSAgICB9Ci0gICAgYm9vbCBBdEVuZCgpIGNvbnN0IHsKLSAgICAgIC8vIFdlIG11
c3QgcmVwb3J0IGl0ZXJhdG9yIHBhc3QgdGhlIGVuZCBvZiB0aGUgcmFuZ2Ugd2hlbiBlaXRoZXIg
b2YgdGhlCi0gICAgICAvLyBjb21wb25lbnQgaXRlcmF0b3JzIGhhcyByZWFjaGVkIHRoZSBlbmQg
b2YgaXRzIHJhbmdlLgotICAgICAgcmV0dXJuCi0gICAgICAgICAgY3VycmVudDFfID09IGVuZDFf
IHx8Ci0gICAgICAgICAgY3VycmVudDJfID09IGVuZDJfIHx8Ci0gICAgICAgICAgY3VycmVudDNf
ID09IGVuZDNfIHx8Ci0gICAgICAgICAgY3VycmVudDRfID09IGVuZDRfOwotICAgIH0KLQotICAg
IC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgICB2
b2lkIG9wZXJhdG9yPShjb25zdCBJdGVyYXRvciYgb3RoZXIpOwotCi0gICAgY29uc3QgUGFyYW1H
ZW5lcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiogY29uc3QgYmFzZV87Ci0gICAgLy8gYmVnaW5b
aV1fIGFuZCBlbmRbaV1fIGRlZmluZSB0aGUgaS10aCByYW5nZSB0aGF0IEl0ZXJhdG9yIHRyYXZl
cnNlcy4KLSAgICAvLyBjdXJyZW50W2ldXyBpcyB0aGUgYWN0dWFsIHRyYXZlcnNpbmcgaXRlcmF0
b3IuCi0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDE+OjppdGVyYXRvciBiZWdp
bjFfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQxPjo6aXRlcmF0b3IgZW5k
MV87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDE+OjppdGVyYXRvciBjdXJyZW50MV87
Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDI+OjppdGVyYXRvciBiZWdpbjJf
OwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQyPjo6aXRlcmF0b3IgZW5kMl87
Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDI+OjppdGVyYXRvciBjdXJyZW50Ml87Ci0g
ICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDM+OjppdGVyYXRvciBiZWdpbjNfOwot
ICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQzPjo6aXRlcmF0b3IgZW5kM187Ci0g
ICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDM+OjppdGVyYXRvciBjdXJyZW50M187Ci0gICAg
Y29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDQ+OjppdGVyYXRvciBiZWdpbjRfOwotICAg
IGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ0Pjo6aXRlcmF0b3IgZW5kNF87Ci0gICAg
dHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDQ+OjppdGVyYXRvciBjdXJyZW50NF87Ci0gICAgUGFy
YW1UeXBlIGN1cnJlbnRfdmFsdWVfOwotICB9OyAgLy8gY2xhc3MgQ2FydGVzaWFuUHJvZHVjdEdl
bmVyYXRvcjQ6Okl0ZXJhdG9yCi0KLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50
IGlzIHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBDYXJ0ZXNpYW5Qcm9kdWN0
R2VuZXJhdG9yNCYgb3RoZXIpOwotCi0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQxPiBnMV87Ci0g
IGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQyPiBnMl87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQz
PiBnM187Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ0PiBnNF87Ci19OyAgLy8gY2xhc3MgQ2Fy
dGVzaWFuUHJvZHVjdEdlbmVyYXRvcjQKLQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVu
YW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1PgotY2xhc3MgQ2Fy
dGVzaWFuUHJvZHVjdEdlbmVyYXRvcjUKLSAgICA6IHB1YmxpYyBQYXJhbUdlbmVyYXRvckludGVy
ZmFjZTwgOjp0ZXN0aW5nOjp0dXBsZTxUMSwgVDIsIFQzLCBUNCwgVDU+ID4gewotIHB1YmxpYzoK
LSAgdHlwZWRlZiA6OnRlc3Rpbmc6OnR1cGxlPFQxLCBUMiwgVDMsIFQ0LCBUNT4gUGFyYW1UeXBl
OwotCi0gIENhcnRlc2lhblByb2R1Y3RHZW5lcmF0b3I1KGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQx
PiYgZzEsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUMj4mIGcyLCBjb25zdCBQYXJhbUdl
bmVyYXRvcjxUMz4mIGczLAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDQ+JiBnNCwgY29u
c3QgUGFyYW1HZW5lcmF0b3I8VDU+JiBnNSkKLSAgICAgIDogZzFfKGcxKSwgZzJfKGcyKSwgZzNf
KGczKSwgZzRfKGc0KSwgZzVfKGc1KSB7fQotICB2aXJ0dWFsIH5DYXJ0ZXNpYW5Qcm9kdWN0R2Vu
ZXJhdG9yNSgpIHt9Ci0KLSAgdmlydHVhbCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlw
ZT4qIEJlZ2luKCkgY29uc3QgewotICAgIHJldHVybiBuZXcgSXRlcmF0b3IodGhpcywgZzFfLCBn
MV8uYmVnaW4oKSwgZzJfLCBnMl8uYmVnaW4oKSwgZzNfLAotICAgICAgICBnM18uYmVnaW4oKSwg
ZzRfLCBnNF8uYmVnaW4oKSwgZzVfLCBnNV8uYmVnaW4oKSk7Ci0gIH0KLSAgdmlydHVhbCBQYXJh
bUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIEVuZCgpIGNvbnN0IHsKLSAgICByZXR1cm4g
bmV3IEl0ZXJhdG9yKHRoaXMsIGcxXywgZzFfLmVuZCgpLCBnMl8sIGcyXy5lbmQoKSwgZzNfLCBn
M18uZW5kKCksCi0gICAgICAgIGc0XywgZzRfLmVuZCgpLCBnNV8sIGc1Xy5lbmQoKSk7Ci0gIH0K
LQotIHByaXZhdGU6Ci0gIGNsYXNzIEl0ZXJhdG9yIDogcHVibGljIFBhcmFtSXRlcmF0b3JJbnRl
cmZhY2U8UGFyYW1UeXBlPiB7Ci0gICBwdWJsaWM6Ci0gICAgSXRlcmF0b3IoY29uc3QgUGFyYW1H
ZW5lcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiogYmFzZSwKLSAgICAgIGNvbnN0IFBhcmFtR2Vu
ZXJhdG9yPFQxPiYgZzEsCi0gICAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMT46
Oml0ZXJhdG9yJiBjdXJyZW50MSwKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQyPiYgZzIs
Ci0gICAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMj46Oml0ZXJhdG9yJiBjdXJy
ZW50MiwKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQzPiYgZzMsCi0gICAgICBjb25zdCB0
eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMz46Oml0ZXJhdG9yJiBjdXJyZW50MywKLSAgICAgIGNv
bnN0IFBhcmFtR2VuZXJhdG9yPFQ0PiYgZzQsCi0gICAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdl
bmVyYXRvcjxUND46Oml0ZXJhdG9yJiBjdXJyZW50NCwKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJh
dG9yPFQ1PiYgZzUsCi0gICAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUNT46Oml0
ZXJhdG9yJiBjdXJyZW50NSkKLSAgICAgICAgOiBiYXNlXyhiYXNlKSwKLSAgICAgICAgICBiZWdp
bjFfKGcxLmJlZ2luKCkpLCBlbmQxXyhnMS5lbmQoKSksIGN1cnJlbnQxXyhjdXJyZW50MSksCi0g
ICAgICAgICAgYmVnaW4yXyhnMi5iZWdpbigpKSwgZW5kMl8oZzIuZW5kKCkpLCBjdXJyZW50Ml8o
Y3VycmVudDIpLAotICAgICAgICAgIGJlZ2luM18oZzMuYmVnaW4oKSksIGVuZDNfKGczLmVuZCgp
KSwgY3VycmVudDNfKGN1cnJlbnQzKSwKLSAgICAgICAgICBiZWdpbjRfKGc0LmJlZ2luKCkpLCBl
bmQ0XyhnNC5lbmQoKSksIGN1cnJlbnQ0XyhjdXJyZW50NCksCi0gICAgICAgICAgYmVnaW41Xyhn
NS5iZWdpbigpKSwgZW5kNV8oZzUuZW5kKCkpLCBjdXJyZW50NV8oY3VycmVudDUpICAgIHsKLSAg
ICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+SXRlcmF0b3Io
KSB7fQotCi0gICAgdmlydHVhbCBjb25zdCBQYXJhbUdlbmVyYXRvckludGVyZmFjZTxQYXJhbVR5
cGU+KiBCYXNlR2VuZXJhdG9yKCkgY29uc3QgewotICAgICAgcmV0dXJuIGJhc2VfOwotICAgIH0K
LSAgICAvLyBBZHZhbmNlIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uIGJleW9uZC1vZi1yYW5nZSBp
dGVyYXRvcnMKLSAgICAvLyBzbyBubyBjb21wb25lbnQgaXRlcmF0b3JzIG11c3QgYmUgYmV5b25k
IGVuZCBvZiByYW5nZSwgZWl0aGVyLgotICAgIHZpcnR1YWwgdm9pZCBBZHZhbmNlKCkgewotICAg
ICAgYXNzZXJ0KCFBdEVuZCgpKTsKLSAgICAgICsrY3VycmVudDVfOwotICAgICAgaWYgKGN1cnJl
bnQ1XyA9PSBlbmQ1XykgewotICAgICAgICBjdXJyZW50NV8gPSBiZWdpbjVfOwotICAgICAgICAr
K2N1cnJlbnQ0XzsKLSAgICAgIH0KLSAgICAgIGlmIChjdXJyZW50NF8gPT0gZW5kNF8pIHsKLSAg
ICAgICAgY3VycmVudDRfID0gYmVnaW40XzsKLSAgICAgICAgKytjdXJyZW50M187Ci0gICAgICB9
Ci0gICAgICBpZiAoY3VycmVudDNfID09IGVuZDNfKSB7Ci0gICAgICAgIGN1cnJlbnQzXyA9IGJl
Z2luM187Ci0gICAgICAgICsrY3VycmVudDJfOwotICAgICAgfQotICAgICAgaWYgKGN1cnJlbnQy
XyA9PSBlbmQyXykgewotICAgICAgICBjdXJyZW50Ml8gPSBiZWdpbjJfOwotICAgICAgICArK2N1
cnJlbnQxXzsKLSAgICAgIH0KLSAgICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0g
ICAgdmlydHVhbCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIENsb25lKCkgY29u
c3QgewotICAgICAgcmV0dXJuIG5ldyBJdGVyYXRvcigqdGhpcyk7Ci0gICAgfQotICAgIHZpcnR1
YWwgY29uc3QgUGFyYW1UeXBlKiBDdXJyZW50KCkgY29uc3QgeyByZXR1cm4gJmN1cnJlbnRfdmFs
dWVfOyB9Ci0gICAgdmlydHVhbCBib29sIEVxdWFscyhjb25zdCBQYXJhbUl0ZXJhdG9ySW50ZXJm
YWNlPFBhcmFtVHlwZT4mIG90aGVyKSBjb25zdCB7Ci0gICAgICAvLyBIYXZpbmcgdGhlIHNhbWUg
YmFzZSBnZW5lcmF0b3IgZ3VhcmFudGVlcyB0aGF0IHRoZSBvdGhlcgotICAgICAgLy8gaXRlcmF0
b3IgaXMgb2YgdGhlIHNhbWUgdHlwZSBhbmQgd2UgY2FuIGRvd25jYXN0LgotICAgICAgR1RFU1Rf
Q0hFQ0tfKEJhc2VHZW5lcmF0b3IoKSA9PSBvdGhlci5CYXNlR2VuZXJhdG9yKCkpCi0gICAgICAg
ICAgPDwgIlRoZSBwcm9ncmFtIGF0dGVtcHRlZCB0byBjb21wYXJlIGl0ZXJhdG9ycyAiCi0gICAg
ICAgICAgPDwgImZyb20gZGlmZmVyZW50IGdlbmVyYXRvcnMuIiA8PCBzdGQ6OmVuZGw7Ci0gICAg
ICBjb25zdCBJdGVyYXRvciogdHlwZWRfb3RoZXIgPQotICAgICAgICAgIENoZWNrZWREb3duY2Fz
dFRvQWN0dWFsVHlwZTxjb25zdCBJdGVyYXRvcj4oJm90aGVyKTsKLSAgICAgIC8vIFdlIG11c3Qg
cmVwb3J0IGl0ZXJhdG9ycyBlcXVhbCBpZiB0aGV5IGJvdGggcG9pbnQgYmV5b25kIHRoZWlyCi0g
ICAgICAvLyByZXNwZWN0aXZlIHJhbmdlcy4gVGhhdCBjYW4gaGFwcGVuIGluIGEgdmFyaWV0eSBv
ZiBmYXNoaW9ucywKLSAgICAgIC8vIHNvIHdlIGhhdmUgdG8gY29uc3VsdCBBdEVuZCgpLgotICAg
ICAgcmV0dXJuIChBdEVuZCgpICYmIHR5cGVkX290aGVyLT5BdEVuZCgpKSB8fAotICAgICAgICAg
KAotICAgICAgICAgIGN1cnJlbnQxXyA9PSB0eXBlZF9vdGhlci0+Y3VycmVudDFfICYmCi0gICAg
ICAgICAgY3VycmVudDJfID09IHR5cGVkX290aGVyLT5jdXJyZW50Ml8gJiYKLSAgICAgICAgICBj
dXJyZW50M18gPT0gdHlwZWRfb3RoZXItPmN1cnJlbnQzXyAmJgotICAgICAgICAgIGN1cnJlbnQ0
XyA9PSB0eXBlZF9vdGhlci0+Y3VycmVudDRfICYmCi0gICAgICAgICAgY3VycmVudDVfID09IHR5
cGVkX290aGVyLT5jdXJyZW50NV8pOwotICAgIH0KLQotICAgcHJpdmF0ZToKLSAgICBJdGVyYXRv
cihjb25zdCBJdGVyYXRvciYgb3RoZXIpCi0gICAgICAgIDogYmFzZV8ob3RoZXIuYmFzZV8pLAot
ICAgICAgICBiZWdpbjFfKG90aGVyLmJlZ2luMV8pLAotICAgICAgICBlbmQxXyhvdGhlci5lbmQx
XyksCi0gICAgICAgIGN1cnJlbnQxXyhvdGhlci5jdXJyZW50MV8pLAotICAgICAgICBiZWdpbjJf
KG90aGVyLmJlZ2luMl8pLAotICAgICAgICBlbmQyXyhvdGhlci5lbmQyXyksCi0gICAgICAgIGN1
cnJlbnQyXyhvdGhlci5jdXJyZW50Ml8pLAotICAgICAgICBiZWdpbjNfKG90aGVyLmJlZ2luM18p
LAotICAgICAgICBlbmQzXyhvdGhlci5lbmQzXyksCi0gICAgICAgIGN1cnJlbnQzXyhvdGhlci5j
dXJyZW50M18pLAotICAgICAgICBiZWdpbjRfKG90aGVyLmJlZ2luNF8pLAotICAgICAgICBlbmQ0
XyhvdGhlci5lbmQ0XyksCi0gICAgICAgIGN1cnJlbnQ0XyhvdGhlci5jdXJyZW50NF8pLAotICAg
ICAgICBiZWdpbjVfKG90aGVyLmJlZ2luNV8pLAotICAgICAgICBlbmQ1XyhvdGhlci5lbmQ1Xyks
Ci0gICAgICAgIGN1cnJlbnQ1XyhvdGhlci5jdXJyZW50NV8pIHsKLSAgICAgIENvbXB1dGVDdXJy
ZW50VmFsdWUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIENvbXB1dGVDdXJyZW50VmFsdWUoKSB7Ci0g
ICAgICBpZiAoIUF0RW5kKCkpCi0gICAgICAgIGN1cnJlbnRfdmFsdWVfID0gUGFyYW1UeXBlKCpj
dXJyZW50MV8sICpjdXJyZW50Ml8sICpjdXJyZW50M18sCi0gICAgICAgICAgICAqY3VycmVudDRf
LCAqY3VycmVudDVfKTsKLSAgICB9Ci0gICAgYm9vbCBBdEVuZCgpIGNvbnN0IHsKLSAgICAgIC8v
IFdlIG11c3QgcmVwb3J0IGl0ZXJhdG9yIHBhc3QgdGhlIGVuZCBvZiB0aGUgcmFuZ2Ugd2hlbiBl
aXRoZXIgb2YgdGhlCi0gICAgICAvLyBjb21wb25lbnQgaXRlcmF0b3JzIGhhcyByZWFjaGVkIHRo
ZSBlbmQgb2YgaXRzIHJhbmdlLgotICAgICAgcmV0dXJuCi0gICAgICAgICAgY3VycmVudDFfID09
IGVuZDFfIHx8Ci0gICAgICAgICAgY3VycmVudDJfID09IGVuZDJfIHx8Ci0gICAgICAgICAgY3Vy
cmVudDNfID09IGVuZDNfIHx8Ci0gICAgICAgICAgY3VycmVudDRfID09IGVuZDRfIHx8Ci0gICAg
ICAgICAgY3VycmVudDVfID09IGVuZDVfOwotICAgIH0KLQotICAgIC8vIE5vIGltcGxlbWVudGF0
aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgICB2b2lkIG9wZXJhdG9yPShjb25z
dCBJdGVyYXRvciYgb3RoZXIpOwotCi0gICAgY29uc3QgUGFyYW1HZW5lcmF0b3JJbnRlcmZhY2U8
UGFyYW1UeXBlPiogY29uc3QgYmFzZV87Ci0gICAgLy8gYmVnaW5baV1fIGFuZCBlbmRbaV1fIGRl
ZmluZSB0aGUgaS10aCByYW5nZSB0aGF0IEl0ZXJhdG9yIHRyYXZlcnNlcy4KLSAgICAvLyBjdXJy
ZW50W2ldXyBpcyB0aGUgYWN0dWFsIHRyYXZlcnNpbmcgaXRlcmF0b3IuCi0gICAgY29uc3QgdHlw
ZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDE+OjppdGVyYXRvciBiZWdpbjFfOwotICAgIGNvbnN0IHR5
cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQxPjo6aXRlcmF0b3IgZW5kMV87Ci0gICAgdHlwZW5hbWUg
UGFyYW1HZW5lcmF0b3I8VDE+OjppdGVyYXRvciBjdXJyZW50MV87Ci0gICAgY29uc3QgdHlwZW5h
bWUgUGFyYW1HZW5lcmF0b3I8VDI+OjppdGVyYXRvciBiZWdpbjJfOwotICAgIGNvbnN0IHR5cGVu
YW1lIFBhcmFtR2VuZXJhdG9yPFQyPjo6aXRlcmF0b3IgZW5kMl87Ci0gICAgdHlwZW5hbWUgUGFy
YW1HZW5lcmF0b3I8VDI+OjppdGVyYXRvciBjdXJyZW50Ml87Ci0gICAgY29uc3QgdHlwZW5hbWUg
UGFyYW1HZW5lcmF0b3I8VDM+OjppdGVyYXRvciBiZWdpbjNfOwotICAgIGNvbnN0IHR5cGVuYW1l
IFBhcmFtR2VuZXJhdG9yPFQzPjo6aXRlcmF0b3IgZW5kM187Ci0gICAgdHlwZW5hbWUgUGFyYW1H
ZW5lcmF0b3I8VDM+OjppdGVyYXRvciBjdXJyZW50M187Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFy
YW1HZW5lcmF0b3I8VDQ+OjppdGVyYXRvciBiZWdpbjRfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBh
cmFtR2VuZXJhdG9yPFQ0Pjo6aXRlcmF0b3IgZW5kNF87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5l
cmF0b3I8VDQ+OjppdGVyYXRvciBjdXJyZW50NF87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1H
ZW5lcmF0b3I8VDU+OjppdGVyYXRvciBiZWdpbjVfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFt
R2VuZXJhdG9yPFQ1Pjo6aXRlcmF0b3IgZW5kNV87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0
b3I8VDU+OjppdGVyYXRvciBjdXJyZW50NV87Ci0gICAgUGFyYW1UeXBlIGN1cnJlbnRfdmFsdWVf
OwotICB9OyAgLy8gY2xhc3MgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjU6Okl0ZXJhdG9yCi0K
LSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICB2
b2lkIG9wZXJhdG9yPShjb25zdCBDYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yNSYgb3RoZXIpOwot
Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQxPiBnMV87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9y
PFQyPiBnMl87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQzPiBnM187Ci0gIGNvbnN0IFBhcmFt
R2VuZXJhdG9yPFQ0PiBnNF87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ1PiBnNV87Ci19OyAg
Ly8gY2xhc3MgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjUKLQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1
LAotICAgIHR5cGVuYW1lIFQ2PgotY2xhc3MgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjYKLSAg
ICA6IHB1YmxpYyBQYXJhbUdlbmVyYXRvckludGVyZmFjZTwgOjp0ZXN0aW5nOjp0dXBsZTxUMSwg
VDIsIFQzLCBUNCwgVDUsCi0gICAgICAgIFQ2PiA+IHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgOjp0
ZXN0aW5nOjp0dXBsZTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2PiBQYXJhbVR5cGU7Ci0KLSAgQ2Fy
dGVzaWFuUHJvZHVjdEdlbmVyYXRvcjYoY29uc3QgUGFyYW1HZW5lcmF0b3I8VDE+JiBnMSwKLSAg
ICAgIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQyPiYgZzIsIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQz
PiYgZzMsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUND4mIGc0LCBjb25zdCBQYXJhbUdl
bmVyYXRvcjxUNT4mIGc1LAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDY+JiBnNikKLSAg
ICAgIDogZzFfKGcxKSwgZzJfKGcyKSwgZzNfKGczKSwgZzRfKGc0KSwgZzVfKGc1KSwgZzZfKGc2
KSB7fQotICB2aXJ0dWFsIH5DYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yNigpIHt9Ci0KLSAgdmly
dHVhbCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIEJlZ2luKCkgY29uc3Qgewot
ICAgIHJldHVybiBuZXcgSXRlcmF0b3IodGhpcywgZzFfLCBnMV8uYmVnaW4oKSwgZzJfLCBnMl8u
YmVnaW4oKSwgZzNfLAotICAgICAgICBnM18uYmVnaW4oKSwgZzRfLCBnNF8uYmVnaW4oKSwgZzVf
LCBnNV8uYmVnaW4oKSwgZzZfLCBnNl8uYmVnaW4oKSk7Ci0gIH0KLSAgdmlydHVhbCBQYXJhbUl0
ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIEVuZCgpIGNvbnN0IHsKLSAgICByZXR1cm4gbmV3
IEl0ZXJhdG9yKHRoaXMsIGcxXywgZzFfLmVuZCgpLCBnMl8sIGcyXy5lbmQoKSwgZzNfLCBnM18u
ZW5kKCksCi0gICAgICAgIGc0XywgZzRfLmVuZCgpLCBnNV8sIGc1Xy5lbmQoKSwgZzZfLCBnNl8u
ZW5kKCkpOwotICB9Ci0KLSBwcml2YXRlOgotICBjbGFzcyBJdGVyYXRvciA6IHB1YmxpYyBQYXJh
bUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4gewotICAgcHVibGljOgotICAgIEl0ZXJhdG9y
KGNvbnN0IFBhcmFtR2VuZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIGJhc2UsCi0gICAgICBj
b25zdCBQYXJhbUdlbmVyYXRvcjxUMT4mIGcxLAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1H
ZW5lcmF0b3I8VDE+OjppdGVyYXRvciYgY3VycmVudDEsCi0gICAgICBjb25zdCBQYXJhbUdlbmVy
YXRvcjxUMj4mIGcyLAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDI+Ojpp
dGVyYXRvciYgY3VycmVudDIsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUMz4mIGczLAot
ICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDM+OjppdGVyYXRvciYgY3VycmVu
dDMsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUND4mIGc0LAotICAgICAgY29uc3QgdHlw
ZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDQ+OjppdGVyYXRvciYgY3VycmVudDQsCi0gICAgICBjb25z
dCBQYXJhbUdlbmVyYXRvcjxUNT4mIGc1LAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5l
cmF0b3I8VDU+OjppdGVyYXRvciYgY3VycmVudDUsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRv
cjxUNj4mIGc2LAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDY+OjppdGVy
YXRvciYgY3VycmVudDYpCi0gICAgICAgIDogYmFzZV8oYmFzZSksCi0gICAgICAgICAgYmVnaW4x
XyhnMS5iZWdpbigpKSwgZW5kMV8oZzEuZW5kKCkpLCBjdXJyZW50MV8oY3VycmVudDEpLAotICAg
ICAgICAgIGJlZ2luMl8oZzIuYmVnaW4oKSksIGVuZDJfKGcyLmVuZCgpKSwgY3VycmVudDJfKGN1
cnJlbnQyKSwKLSAgICAgICAgICBiZWdpbjNfKGczLmJlZ2luKCkpLCBlbmQzXyhnMy5lbmQoKSks
IGN1cnJlbnQzXyhjdXJyZW50MyksCi0gICAgICAgICAgYmVnaW40XyhnNC5iZWdpbigpKSwgZW5k
NF8oZzQuZW5kKCkpLCBjdXJyZW50NF8oY3VycmVudDQpLAotICAgICAgICAgIGJlZ2luNV8oZzUu
YmVnaW4oKSksIGVuZDVfKGc1LmVuZCgpKSwgY3VycmVudDVfKGN1cnJlbnQ1KSwKLSAgICAgICAg
ICBiZWdpbjZfKGc2LmJlZ2luKCkpLCBlbmQ2XyhnNi5lbmQoKSksIGN1cnJlbnQ2XyhjdXJyZW50
NikgICAgewotICAgICAgQ29tcHV0ZUN1cnJlbnRWYWx1ZSgpOwotICAgIH0KLSAgICB2aXJ0dWFs
IH5JdGVyYXRvcigpIHt9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IFBhcmFtR2VuZXJhdG9ySW50ZXJm
YWNlPFBhcmFtVHlwZT4qIEJhc2VHZW5lcmF0b3IoKSBjb25zdCB7Ci0gICAgICByZXR1cm4gYmFz
ZV87Ci0gICAgfQotICAgIC8vIEFkdmFuY2Ugc2hvdWxkIG5vdCBiZSBjYWxsZWQgb24gYmV5b25k
LW9mLXJhbmdlIGl0ZXJhdG9ycwotICAgIC8vIHNvIG5vIGNvbXBvbmVudCBpdGVyYXRvcnMgbXVz
dCBiZSBiZXlvbmQgZW5kIG9mIHJhbmdlLCBlaXRoZXIuCi0gICAgdmlydHVhbCB2b2lkIEFkdmFu
Y2UoKSB7Ci0gICAgICBhc3NlcnQoIUF0RW5kKCkpOwotICAgICAgKytjdXJyZW50Nl87Ci0gICAg
ICBpZiAoY3VycmVudDZfID09IGVuZDZfKSB7Ci0gICAgICAgIGN1cnJlbnQ2XyA9IGJlZ2luNl87
Ci0gICAgICAgICsrY3VycmVudDVfOwotICAgICAgfQotICAgICAgaWYgKGN1cnJlbnQ1XyA9PSBl
bmQ1XykgewotICAgICAgICBjdXJyZW50NV8gPSBiZWdpbjVfOwotICAgICAgICArK2N1cnJlbnQ0
XzsKLSAgICAgIH0KLSAgICAgIGlmIChjdXJyZW50NF8gPT0gZW5kNF8pIHsKLSAgICAgICAgY3Vy
cmVudDRfID0gYmVnaW40XzsKLSAgICAgICAgKytjdXJyZW50M187Ci0gICAgICB9Ci0gICAgICBp
ZiAoY3VycmVudDNfID09IGVuZDNfKSB7Ci0gICAgICAgIGN1cnJlbnQzXyA9IGJlZ2luM187Ci0g
ICAgICAgICsrY3VycmVudDJfOwotICAgICAgfQotICAgICAgaWYgKGN1cnJlbnQyXyA9PSBlbmQy
XykgewotICAgICAgICBjdXJyZW50Ml8gPSBiZWdpbjJfOwotICAgICAgICArK2N1cnJlbnQxXzsK
LSAgICAgIH0KLSAgICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0gICAgdmlydHVh
bCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIENsb25lKCkgY29uc3QgewotICAg
ICAgcmV0dXJuIG5ldyBJdGVyYXRvcigqdGhpcyk7Ci0gICAgfQotICAgIHZpcnR1YWwgY29uc3Qg
UGFyYW1UeXBlKiBDdXJyZW50KCkgY29uc3QgeyByZXR1cm4gJmN1cnJlbnRfdmFsdWVfOyB9Ci0g
ICAgdmlydHVhbCBib29sIEVxdWFscyhjb25zdCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFt
VHlwZT4mIG90aGVyKSBjb25zdCB7Ci0gICAgICAvLyBIYXZpbmcgdGhlIHNhbWUgYmFzZSBnZW5l
cmF0b3IgZ3VhcmFudGVlcyB0aGF0IHRoZSBvdGhlcgotICAgICAgLy8gaXRlcmF0b3IgaXMgb2Yg
dGhlIHNhbWUgdHlwZSBhbmQgd2UgY2FuIGRvd25jYXN0LgotICAgICAgR1RFU1RfQ0hFQ0tfKEJh
c2VHZW5lcmF0b3IoKSA9PSBvdGhlci5CYXNlR2VuZXJhdG9yKCkpCi0gICAgICAgICAgPDwgIlRo
ZSBwcm9ncmFtIGF0dGVtcHRlZCB0byBjb21wYXJlIGl0ZXJhdG9ycyAiCi0gICAgICAgICAgPDwg
ImZyb20gZGlmZmVyZW50IGdlbmVyYXRvcnMuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICBjb25zdCBJ
dGVyYXRvciogdHlwZWRfb3RoZXIgPQotICAgICAgICAgIENoZWNrZWREb3duY2FzdFRvQWN0dWFs
VHlwZTxjb25zdCBJdGVyYXRvcj4oJm90aGVyKTsKLSAgICAgIC8vIFdlIG11c3QgcmVwb3J0IGl0
ZXJhdG9ycyBlcXVhbCBpZiB0aGV5IGJvdGggcG9pbnQgYmV5b25kIHRoZWlyCi0gICAgICAvLyBy
ZXNwZWN0aXZlIHJhbmdlcy4gVGhhdCBjYW4gaGFwcGVuIGluIGEgdmFyaWV0eSBvZiBmYXNoaW9u
cywKLSAgICAgIC8vIHNvIHdlIGhhdmUgdG8gY29uc3VsdCBBdEVuZCgpLgotICAgICAgcmV0dXJu
IChBdEVuZCgpICYmIHR5cGVkX290aGVyLT5BdEVuZCgpKSB8fAotICAgICAgICAgKAotICAgICAg
ICAgIGN1cnJlbnQxXyA9PSB0eXBlZF9vdGhlci0+Y3VycmVudDFfICYmCi0gICAgICAgICAgY3Vy
cmVudDJfID09IHR5cGVkX290aGVyLT5jdXJyZW50Ml8gJiYKLSAgICAgICAgICBjdXJyZW50M18g
PT0gdHlwZWRfb3RoZXItPmN1cnJlbnQzXyAmJgotICAgICAgICAgIGN1cnJlbnQ0XyA9PSB0eXBl
ZF9vdGhlci0+Y3VycmVudDRfICYmCi0gICAgICAgICAgY3VycmVudDVfID09IHR5cGVkX290aGVy
LT5jdXJyZW50NV8gJiYKLSAgICAgICAgICBjdXJyZW50Nl8gPT0gdHlwZWRfb3RoZXItPmN1cnJl
bnQ2Xyk7Ci0gICAgfQotCi0gICBwcml2YXRlOgotICAgIEl0ZXJhdG9yKGNvbnN0IEl0ZXJhdG9y
JiBvdGhlcikKLSAgICAgICAgOiBiYXNlXyhvdGhlci5iYXNlXyksCi0gICAgICAgIGJlZ2luMV8o
b3RoZXIuYmVnaW4xXyksCi0gICAgICAgIGVuZDFfKG90aGVyLmVuZDFfKSwKLSAgICAgICAgY3Vy
cmVudDFfKG90aGVyLmN1cnJlbnQxXyksCi0gICAgICAgIGJlZ2luMl8ob3RoZXIuYmVnaW4yXyks
Ci0gICAgICAgIGVuZDJfKG90aGVyLmVuZDJfKSwKLSAgICAgICAgY3VycmVudDJfKG90aGVyLmN1
cnJlbnQyXyksCi0gICAgICAgIGJlZ2luM18ob3RoZXIuYmVnaW4zXyksCi0gICAgICAgIGVuZDNf
KG90aGVyLmVuZDNfKSwKLSAgICAgICAgY3VycmVudDNfKG90aGVyLmN1cnJlbnQzXyksCi0gICAg
ICAgIGJlZ2luNF8ob3RoZXIuYmVnaW40XyksCi0gICAgICAgIGVuZDRfKG90aGVyLmVuZDRfKSwK
LSAgICAgICAgY3VycmVudDRfKG90aGVyLmN1cnJlbnQ0XyksCi0gICAgICAgIGJlZ2luNV8ob3Ro
ZXIuYmVnaW41XyksCi0gICAgICAgIGVuZDVfKG90aGVyLmVuZDVfKSwKLSAgICAgICAgY3VycmVu
dDVfKG90aGVyLmN1cnJlbnQ1XyksCi0gICAgICAgIGJlZ2luNl8ob3RoZXIuYmVnaW42XyksCi0g
ICAgICAgIGVuZDZfKG90aGVyLmVuZDZfKSwKLSAgICAgICAgY3VycmVudDZfKG90aGVyLmN1cnJl
bnQ2XykgewotICAgICAgQ29tcHV0ZUN1cnJlbnRWYWx1ZSgpOwotICAgIH0KLQotICAgIHZvaWQg
Q29tcHV0ZUN1cnJlbnRWYWx1ZSgpIHsKLSAgICAgIGlmICghQXRFbmQoKSkKLSAgICAgICAgY3Vy
cmVudF92YWx1ZV8gPSBQYXJhbVR5cGUoKmN1cnJlbnQxXywgKmN1cnJlbnQyXywgKmN1cnJlbnQz
XywKLSAgICAgICAgICAgICpjdXJyZW50NF8sICpjdXJyZW50NV8sICpjdXJyZW50Nl8pOwotICAg
IH0KLSAgICBib29sIEF0RW5kKCkgY29uc3QgewotICAgICAgLy8gV2UgbXVzdCByZXBvcnQgaXRl
cmF0b3IgcGFzdCB0aGUgZW5kIG9mIHRoZSByYW5nZSB3aGVuIGVpdGhlciBvZiB0aGUKLSAgICAg
IC8vIGNvbXBvbmVudCBpdGVyYXRvcnMgaGFzIHJlYWNoZWQgdGhlIGVuZCBvZiBpdHMgcmFuZ2Uu
Ci0gICAgICByZXR1cm4KLSAgICAgICAgICBjdXJyZW50MV8gPT0gZW5kMV8gfHwKLSAgICAgICAg
ICBjdXJyZW50Ml8gPT0gZW5kMl8gfHwKLSAgICAgICAgICBjdXJyZW50M18gPT0gZW5kM18gfHwK
LSAgICAgICAgICBjdXJyZW50NF8gPT0gZW5kNF8gfHwKLSAgICAgICAgICBjdXJyZW50NV8gPT0g
ZW5kNV8gfHwKLSAgICAgICAgICBjdXJyZW50Nl8gPT0gZW5kNl87Ci0gICAgfQotCi0gICAgLy8g
Tm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICAgIHZvaWQg
b3BlcmF0b3I9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcik7Ci0KLSAgICBjb25zdCBQYXJhbUdlbmVy
YXRvckludGVyZmFjZTxQYXJhbVR5cGU+KiBjb25zdCBiYXNlXzsKLSAgICAvLyBiZWdpbltpXV8g
YW5kIGVuZFtpXV8gZGVmaW5lIHRoZSBpLXRoIHJhbmdlIHRoYXQgSXRlcmF0b3IgdHJhdmVyc2Vz
LgotICAgIC8vIGN1cnJlbnRbaV1fIGlzIHRoZSBhY3R1YWwgdHJhdmVyc2luZyBpdGVyYXRvci4K
LSAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMT46Oml0ZXJhdG9yIGJlZ2luMV87
Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDE+OjppdGVyYXRvciBlbmQxXzsK
LSAgICB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMT46Oml0ZXJhdG9yIGN1cnJlbnQxXzsKLSAg
ICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMj46Oml0ZXJhdG9yIGJlZ2luMl87Ci0g
ICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDI+OjppdGVyYXRvciBlbmQyXzsKLSAg
ICB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMj46Oml0ZXJhdG9yIGN1cnJlbnQyXzsKLSAgICBj
b25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMz46Oml0ZXJhdG9yIGJlZ2luM187Ci0gICAg
Y29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDM+OjppdGVyYXRvciBlbmQzXzsKLSAgICB0
eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMz46Oml0ZXJhdG9yIGN1cnJlbnQzXzsKLSAgICBjb25z
dCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUND46Oml0ZXJhdG9yIGJlZ2luNF87Ci0gICAgY29u
c3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDQ+OjppdGVyYXRvciBlbmQ0XzsKLSAgICB0eXBl
bmFtZSBQYXJhbUdlbmVyYXRvcjxUND46Oml0ZXJhdG9yIGN1cnJlbnQ0XzsKLSAgICBjb25zdCB0
eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUNT46Oml0ZXJhdG9yIGJlZ2luNV87Ci0gICAgY29uc3Qg
dHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDU+OjppdGVyYXRvciBlbmQ1XzsKLSAgICB0eXBlbmFt
ZSBQYXJhbUdlbmVyYXRvcjxUNT46Oml0ZXJhdG9yIGN1cnJlbnQ1XzsKLSAgICBjb25zdCB0eXBl
bmFtZSBQYXJhbUdlbmVyYXRvcjxUNj46Oml0ZXJhdG9yIGJlZ2luNl87Ci0gICAgY29uc3QgdHlw
ZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDY+OjppdGVyYXRvciBlbmQ2XzsKLSAgICB0eXBlbmFtZSBQ
YXJhbUdlbmVyYXRvcjxUNj46Oml0ZXJhdG9yIGN1cnJlbnQ2XzsKLSAgICBQYXJhbVR5cGUgY3Vy
cmVudF92YWx1ZV87Ci0gIH07ICAvLyBjbGFzcyBDYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yNjo6
SXRlcmF0b3IKLQotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBw
b3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IENhcnRlc2lhblByb2R1Y3RHZW5lcmF0b3I2
JiBvdGhlcik7Ci0KLSAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDE+IGcxXzsKLSAgY29uc3QgUGFy
YW1HZW5lcmF0b3I8VDI+IGcyXzsKLSAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDM+IGczXzsKLSAg
Y29uc3QgUGFyYW1HZW5lcmF0b3I8VDQ+IGc0XzsKLSAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDU+
IGc1XzsKLSAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDY+IGc2XzsKLX07ICAvLyBjbGFzcyBDYXJ0
ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yNgotCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5h
bWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5h
bWUgVDYsIHR5cGVuYW1lIFQ3PgotY2xhc3MgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjcKLSAg
ICA6IHB1YmxpYyBQYXJhbUdlbmVyYXRvckludGVyZmFjZTwgOjp0ZXN0aW5nOjp0dXBsZTxUMSwg
VDIsIFQzLCBUNCwgVDUsIFQ2LAotICAgICAgICBUNz4gPiB7Ci0gcHVibGljOgotICB0eXBlZGVm
IDo6dGVzdGluZzo6dHVwbGU8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDc+IFBhcmFtVHlwZTsK
LQotICBDYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yNyhjb25zdCBQYXJhbUdlbmVyYXRvcjxUMT4m
IGcxLAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDI+JiBnMiwgY29uc3QgUGFyYW1HZW5l
cmF0b3I8VDM+JiBnMywKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ0PiYgZzQsIGNvbnN0
IFBhcmFtR2VuZXJhdG9yPFQ1PiYgZzUsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUNj4m
IGc2LCBjb25zdCBQYXJhbUdlbmVyYXRvcjxUNz4mIGc3KQotICAgICAgOiBnMV8oZzEpLCBnMl8o
ZzIpLCBnM18oZzMpLCBnNF8oZzQpLCBnNV8oZzUpLCBnNl8oZzYpLCBnN18oZzcpIHt9Ci0gIHZp
cnR1YWwgfkNhcnRlc2lhblByb2R1Y3RHZW5lcmF0b3I3KCkge30KLQotICB2aXJ0dWFsIFBhcmFt
SXRlcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiogQmVnaW4oKSBjb25zdCB7Ci0gICAgcmV0dXJu
IG5ldyBJdGVyYXRvcih0aGlzLCBnMV8sIGcxXy5iZWdpbigpLCBnMl8sIGcyXy5iZWdpbigpLCBn
M18sCi0gICAgICAgIGczXy5iZWdpbigpLCBnNF8sIGc0Xy5iZWdpbigpLCBnNV8sIGc1Xy5iZWdp
bigpLCBnNl8sIGc2Xy5iZWdpbigpLCBnN18sCi0gICAgICAgIGc3Xy5iZWdpbigpKTsKLSAgfQot
ICB2aXJ0dWFsIFBhcmFtSXRlcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiogRW5kKCkgY29uc3Qg
ewotICAgIHJldHVybiBuZXcgSXRlcmF0b3IodGhpcywgZzFfLCBnMV8uZW5kKCksIGcyXywgZzJf
LmVuZCgpLCBnM18sIGczXy5lbmQoKSwKLSAgICAgICAgZzRfLCBnNF8uZW5kKCksIGc1XywgZzVf
LmVuZCgpLCBnNl8sIGc2Xy5lbmQoKSwgZzdfLCBnN18uZW5kKCkpOwotICB9Ci0KLSBwcml2YXRl
OgotICBjbGFzcyBJdGVyYXRvciA6IHB1YmxpYyBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFt
VHlwZT4gewotICAgcHVibGljOgotICAgIEl0ZXJhdG9yKGNvbnN0IFBhcmFtR2VuZXJhdG9ySW50
ZXJmYWNlPFBhcmFtVHlwZT4qIGJhc2UsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUMT4m
IGcxLAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDE+OjppdGVyYXRvciYg
Y3VycmVudDEsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUMj4mIGcyLAotICAgICAgY29u
c3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDI+OjppdGVyYXRvciYgY3VycmVudDIsCi0gICAg
ICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUMz4mIGczLAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFy
YW1HZW5lcmF0b3I8VDM+OjppdGVyYXRvciYgY3VycmVudDMsCi0gICAgICBjb25zdCBQYXJhbUdl
bmVyYXRvcjxUND4mIGc0LAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDQ+
OjppdGVyYXRvciYgY3VycmVudDQsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUNT4mIGc1
LAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDU+OjppdGVyYXRvciYgY3Vy
cmVudDUsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUNj4mIGc2LAotICAgICAgY29uc3Qg
dHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDY+OjppdGVyYXRvciYgY3VycmVudDYsCi0gICAgICBj
b25zdCBQYXJhbUdlbmVyYXRvcjxUNz4mIGc3LAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1H
ZW5lcmF0b3I8VDc+OjppdGVyYXRvciYgY3VycmVudDcpCi0gICAgICAgIDogYmFzZV8oYmFzZSks
Ci0gICAgICAgICAgYmVnaW4xXyhnMS5iZWdpbigpKSwgZW5kMV8oZzEuZW5kKCkpLCBjdXJyZW50
MV8oY3VycmVudDEpLAotICAgICAgICAgIGJlZ2luMl8oZzIuYmVnaW4oKSksIGVuZDJfKGcyLmVu
ZCgpKSwgY3VycmVudDJfKGN1cnJlbnQyKSwKLSAgICAgICAgICBiZWdpbjNfKGczLmJlZ2luKCkp
LCBlbmQzXyhnMy5lbmQoKSksIGN1cnJlbnQzXyhjdXJyZW50MyksCi0gICAgICAgICAgYmVnaW40
XyhnNC5iZWdpbigpKSwgZW5kNF8oZzQuZW5kKCkpLCBjdXJyZW50NF8oY3VycmVudDQpLAotICAg
ICAgICAgIGJlZ2luNV8oZzUuYmVnaW4oKSksIGVuZDVfKGc1LmVuZCgpKSwgY3VycmVudDVfKGN1
cnJlbnQ1KSwKLSAgICAgICAgICBiZWdpbjZfKGc2LmJlZ2luKCkpLCBlbmQ2XyhnNi5lbmQoKSks
IGN1cnJlbnQ2XyhjdXJyZW50NiksCi0gICAgICAgICAgYmVnaW43XyhnNy5iZWdpbigpKSwgZW5k
N18oZzcuZW5kKCkpLCBjdXJyZW50N18oY3VycmVudDcpICAgIHsKLSAgICAgIENvbXB1dGVDdXJy
ZW50VmFsdWUoKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+SXRlcmF0b3IoKSB7fQotCi0gICAgdmly
dHVhbCBjb25zdCBQYXJhbUdlbmVyYXRvckludGVyZmFjZTxQYXJhbVR5cGU+KiBCYXNlR2VuZXJh
dG9yKCkgY29uc3QgewotICAgICAgcmV0dXJuIGJhc2VfOwotICAgIH0KLSAgICAvLyBBZHZhbmNl
IHNob3VsZCBub3QgYmUgY2FsbGVkIG9uIGJleW9uZC1vZi1yYW5nZSBpdGVyYXRvcnMKLSAgICAv
LyBzbyBubyBjb21wb25lbnQgaXRlcmF0b3JzIG11c3QgYmUgYmV5b25kIGVuZCBvZiByYW5nZSwg
ZWl0aGVyLgotICAgIHZpcnR1YWwgdm9pZCBBZHZhbmNlKCkgewotICAgICAgYXNzZXJ0KCFBdEVu
ZCgpKTsKLSAgICAgICsrY3VycmVudDdfOwotICAgICAgaWYgKGN1cnJlbnQ3XyA9PSBlbmQ3Xykg
ewotICAgICAgICBjdXJyZW50N18gPSBiZWdpbjdfOwotICAgICAgICArK2N1cnJlbnQ2XzsKLSAg
ICAgIH0KLSAgICAgIGlmIChjdXJyZW50Nl8gPT0gZW5kNl8pIHsKLSAgICAgICAgY3VycmVudDZf
ID0gYmVnaW42XzsKLSAgICAgICAgKytjdXJyZW50NV87Ci0gICAgICB9Ci0gICAgICBpZiAoY3Vy
cmVudDVfID09IGVuZDVfKSB7Ci0gICAgICAgIGN1cnJlbnQ1XyA9IGJlZ2luNV87Ci0gICAgICAg
ICsrY3VycmVudDRfOwotICAgICAgfQotICAgICAgaWYgKGN1cnJlbnQ0XyA9PSBlbmQ0Xykgewot
ICAgICAgICBjdXJyZW50NF8gPSBiZWdpbjRfOwotICAgICAgICArK2N1cnJlbnQzXzsKLSAgICAg
IH0KLSAgICAgIGlmIChjdXJyZW50M18gPT0gZW5kM18pIHsKLSAgICAgICAgY3VycmVudDNfID0g
YmVnaW4zXzsKLSAgICAgICAgKytjdXJyZW50Ml87Ci0gICAgICB9Ci0gICAgICBpZiAoY3VycmVu
dDJfID09IGVuZDJfKSB7Ci0gICAgICAgIGN1cnJlbnQyXyA9IGJlZ2luMl87Ci0gICAgICAgICsr
Y3VycmVudDFfOwotICAgICAgfQotICAgICAgQ29tcHV0ZUN1cnJlbnRWYWx1ZSgpOwotICAgIH0K
LSAgICB2aXJ0dWFsIFBhcmFtSXRlcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiogQ2xvbmUoKSBj
b25zdCB7Ci0gICAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKCp0aGlzKTsKLSAgICB9Ci0gICAgdmly
dHVhbCBjb25zdCBQYXJhbVR5cGUqIEN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAmY3VycmVudF92
YWx1ZV87IH0KLSAgICB2aXJ0dWFsIGJvb2wgRXF1YWxzKGNvbnN0IFBhcmFtSXRlcmF0b3JJbnRl
cmZhY2U8UGFyYW1UeXBlPiYgb3RoZXIpIGNvbnN0IHsKLSAgICAgIC8vIEhhdmluZyB0aGUgc2Ft
ZSBiYXNlIGdlbmVyYXRvciBndWFyYW50ZWVzIHRoYXQgdGhlIG90aGVyCi0gICAgICAvLyBpdGVy
YXRvciBpcyBvZiB0aGUgc2FtZSB0eXBlIGFuZCB3ZSBjYW4gZG93bmNhc3QuCi0gICAgICBHVEVT
VF9DSEVDS18oQmFzZUdlbmVyYXRvcigpID09IG90aGVyLkJhc2VHZW5lcmF0b3IoKSkKLSAgICAg
ICAgICA8PCAiVGhlIHByb2dyYW0gYXR0ZW1wdGVkIHRvIGNvbXBhcmUgaXRlcmF0b3JzICIKLSAg
ICAgICAgICA8PCAiZnJvbSBkaWZmZXJlbnQgZ2VuZXJhdG9ycy4iIDw8IHN0ZDo6ZW5kbDsKLSAg
ICAgIGNvbnN0IEl0ZXJhdG9yKiB0eXBlZF9vdGhlciA9Ci0gICAgICAgICAgQ2hlY2tlZERvd25j
YXN0VG9BY3R1YWxUeXBlPGNvbnN0IEl0ZXJhdG9yPigmb3RoZXIpOwotICAgICAgLy8gV2UgbXVz
dCByZXBvcnQgaXRlcmF0b3JzIGVxdWFsIGlmIHRoZXkgYm90aCBwb2ludCBiZXlvbmQgdGhlaXIK
LSAgICAgIC8vIHJlc3BlY3RpdmUgcmFuZ2VzLiBUaGF0IGNhbiBoYXBwZW4gaW4gYSB2YXJpZXR5
IG9mIGZhc2hpb25zLAotICAgICAgLy8gc28gd2UgaGF2ZSB0byBjb25zdWx0IEF0RW5kKCkuCi0g
ICAgICByZXR1cm4gKEF0RW5kKCkgJiYgdHlwZWRfb3RoZXItPkF0RW5kKCkpIHx8Ci0gICAgICAg
ICAoCi0gICAgICAgICAgY3VycmVudDFfID09IHR5cGVkX290aGVyLT5jdXJyZW50MV8gJiYKLSAg
ICAgICAgICBjdXJyZW50Ml8gPT0gdHlwZWRfb3RoZXItPmN1cnJlbnQyXyAmJgotICAgICAgICAg
IGN1cnJlbnQzXyA9PSB0eXBlZF9vdGhlci0+Y3VycmVudDNfICYmCi0gICAgICAgICAgY3VycmVu
dDRfID09IHR5cGVkX290aGVyLT5jdXJyZW50NF8gJiYKLSAgICAgICAgICBjdXJyZW50NV8gPT0g
dHlwZWRfb3RoZXItPmN1cnJlbnQ1XyAmJgotICAgICAgICAgIGN1cnJlbnQ2XyA9PSB0eXBlZF9v
dGhlci0+Y3VycmVudDZfICYmCi0gICAgICAgICAgY3VycmVudDdfID09IHR5cGVkX290aGVyLT5j
dXJyZW50N18pOwotICAgIH0KLQotICAgcHJpdmF0ZToKLSAgICBJdGVyYXRvcihjb25zdCBJdGVy
YXRvciYgb3RoZXIpCi0gICAgICAgIDogYmFzZV8ob3RoZXIuYmFzZV8pLAotICAgICAgICBiZWdp
bjFfKG90aGVyLmJlZ2luMV8pLAotICAgICAgICBlbmQxXyhvdGhlci5lbmQxXyksCi0gICAgICAg
IGN1cnJlbnQxXyhvdGhlci5jdXJyZW50MV8pLAotICAgICAgICBiZWdpbjJfKG90aGVyLmJlZ2lu
Ml8pLAotICAgICAgICBlbmQyXyhvdGhlci5lbmQyXyksCi0gICAgICAgIGN1cnJlbnQyXyhvdGhl
ci5jdXJyZW50Ml8pLAotICAgICAgICBiZWdpbjNfKG90aGVyLmJlZ2luM18pLAotICAgICAgICBl
bmQzXyhvdGhlci5lbmQzXyksCi0gICAgICAgIGN1cnJlbnQzXyhvdGhlci5jdXJyZW50M18pLAot
ICAgICAgICBiZWdpbjRfKG90aGVyLmJlZ2luNF8pLAotICAgICAgICBlbmQ0XyhvdGhlci5lbmQ0
XyksCi0gICAgICAgIGN1cnJlbnQ0XyhvdGhlci5jdXJyZW50NF8pLAotICAgICAgICBiZWdpbjVf
KG90aGVyLmJlZ2luNV8pLAotICAgICAgICBlbmQ1XyhvdGhlci5lbmQ1XyksCi0gICAgICAgIGN1
cnJlbnQ1XyhvdGhlci5jdXJyZW50NV8pLAotICAgICAgICBiZWdpbjZfKG90aGVyLmJlZ2luNl8p
LAotICAgICAgICBlbmQ2XyhvdGhlci5lbmQ2XyksCi0gICAgICAgIGN1cnJlbnQ2XyhvdGhlci5j
dXJyZW50Nl8pLAotICAgICAgICBiZWdpbjdfKG90aGVyLmJlZ2luN18pLAotICAgICAgICBlbmQ3
XyhvdGhlci5lbmQ3XyksCi0gICAgICAgIGN1cnJlbnQ3XyhvdGhlci5jdXJyZW50N18pIHsKLSAg
ICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIENvbXB1dGVDdXJy
ZW50VmFsdWUoKSB7Ci0gICAgICBpZiAoIUF0RW5kKCkpCi0gICAgICAgIGN1cnJlbnRfdmFsdWVf
ID0gUGFyYW1UeXBlKCpjdXJyZW50MV8sICpjdXJyZW50Ml8sICpjdXJyZW50M18sCi0gICAgICAg
ICAgICAqY3VycmVudDRfLCAqY3VycmVudDVfLCAqY3VycmVudDZfLCAqY3VycmVudDdfKTsKLSAg
ICB9Ci0gICAgYm9vbCBBdEVuZCgpIGNvbnN0IHsKLSAgICAgIC8vIFdlIG11c3QgcmVwb3J0IGl0
ZXJhdG9yIHBhc3QgdGhlIGVuZCBvZiB0aGUgcmFuZ2Ugd2hlbiBlaXRoZXIgb2YgdGhlCi0gICAg
ICAvLyBjb21wb25lbnQgaXRlcmF0b3JzIGhhcyByZWFjaGVkIHRoZSBlbmQgb2YgaXRzIHJhbmdl
LgotICAgICAgcmV0dXJuCi0gICAgICAgICAgY3VycmVudDFfID09IGVuZDFfIHx8Ci0gICAgICAg
ICAgY3VycmVudDJfID09IGVuZDJfIHx8Ci0gICAgICAgICAgY3VycmVudDNfID09IGVuZDNfIHx8
Ci0gICAgICAgICAgY3VycmVudDRfID09IGVuZDRfIHx8Ci0gICAgICAgICAgY3VycmVudDVfID09
IGVuZDVfIHx8Ci0gICAgICAgICAgY3VycmVudDZfID09IGVuZDZfIHx8Ci0gICAgICAgICAgY3Vy
cmVudDdfID09IGVuZDdfOwotICAgIH0KLQotICAgIC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNz
aWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBJdGVyYXRv
ciYgb3RoZXIpOwotCi0gICAgY29uc3QgUGFyYW1HZW5lcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBl
PiogY29uc3QgYmFzZV87Ci0gICAgLy8gYmVnaW5baV1fIGFuZCBlbmRbaV1fIGRlZmluZSB0aGUg
aS10aCByYW5nZSB0aGF0IEl0ZXJhdG9yIHRyYXZlcnNlcy4KLSAgICAvLyBjdXJyZW50W2ldXyBp
cyB0aGUgYWN0dWFsIHRyYXZlcnNpbmcgaXRlcmF0b3IuCi0gICAgY29uc3QgdHlwZW5hbWUgUGFy
YW1HZW5lcmF0b3I8VDE+OjppdGVyYXRvciBiZWdpbjFfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBh
cmFtR2VuZXJhdG9yPFQxPjo6aXRlcmF0b3IgZW5kMV87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5l
cmF0b3I8VDE+OjppdGVyYXRvciBjdXJyZW50MV87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1H
ZW5lcmF0b3I8VDI+OjppdGVyYXRvciBiZWdpbjJfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFt
R2VuZXJhdG9yPFQyPjo6aXRlcmF0b3IgZW5kMl87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0
b3I8VDI+OjppdGVyYXRvciBjdXJyZW50Ml87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5l
cmF0b3I8VDM+OjppdGVyYXRvciBiZWdpbjNfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2Vu
ZXJhdG9yPFQzPjo6aXRlcmF0b3IgZW5kM187Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8
VDM+OjppdGVyYXRvciBjdXJyZW50M187Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0
b3I8VDQ+OjppdGVyYXRvciBiZWdpbjRfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJh
dG9yPFQ0Pjo6aXRlcmF0b3IgZW5kNF87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDQ+
OjppdGVyYXRvciBjdXJyZW50NF87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8
VDU+OjppdGVyYXRvciBiZWdpbjVfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9y
PFQ1Pjo6aXRlcmF0b3IgZW5kNV87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDU+Ojpp
dGVyYXRvciBjdXJyZW50NV87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDY+
OjppdGVyYXRvciBiZWdpbjZfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ2
Pjo6aXRlcmF0b3IgZW5kNl87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDY+OjppdGVy
YXRvciBjdXJyZW50Nl87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDc+Ojpp
dGVyYXRvciBiZWdpbjdfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ3Pjo6
aXRlcmF0b3IgZW5kN187Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDc+OjppdGVyYXRv
ciBjdXJyZW50N187Ci0gICAgUGFyYW1UeXBlIGN1cnJlbnRfdmFsdWVfOwotICB9OyAgLy8gY2xh
c3MgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjc6Okl0ZXJhdG9yCi0KLSAgLy8gTm8gaW1wbGVt
ZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShj
b25zdCBDYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yNyYgb3RoZXIpOwotCi0gIGNvbnN0IFBhcmFt
R2VuZXJhdG9yPFQxPiBnMV87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQyPiBnMl87Ci0gIGNv
bnN0IFBhcmFtR2VuZXJhdG9yPFQzPiBnM187Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ0PiBn
NF87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ1PiBnNV87Ci0gIGNvbnN0IFBhcmFtR2VuZXJh
dG9yPFQ2PiBnNl87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ3PiBnN187Ci19OyAgLy8gY2xh
c3MgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjcKLQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEs
IHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAg
IHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDg+Ci1jbGFzcyBDYXJ0ZXNpYW5Q
cm9kdWN0R2VuZXJhdG9yOAotICAgIDogcHVibGljIFBhcmFtR2VuZXJhdG9ySW50ZXJmYWNlPCA6
OnRlc3Rpbmc6OnR1cGxlPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsCi0gICAgICAgIFQ3LCBUOD4g
PiB7Ci0gcHVibGljOgotICB0eXBlZGVmIDo6dGVzdGluZzo6dHVwbGU8VDEsIFQyLCBUMywgVDQs
IFQ1LCBUNiwgVDcsIFQ4PiBQYXJhbVR5cGU7Ci0KLSAgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRv
cjgoY29uc3QgUGFyYW1HZW5lcmF0b3I8VDE+JiBnMSwKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJh
dG9yPFQyPiYgZzIsIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQzPiYgZzMsCi0gICAgICBjb25zdCBQ
YXJhbUdlbmVyYXRvcjxUND4mIGc0LCBjb25zdCBQYXJhbUdlbmVyYXRvcjxUNT4mIGc1LAotICAg
ICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDY+JiBnNiwgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDc+
JiBnNywKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ4PiYgZzgpCi0gICAgICA6IGcxXyhn
MSksIGcyXyhnMiksIGczXyhnMyksIGc0XyhnNCksIGc1XyhnNSksIGc2XyhnNiksIGc3XyhnNyks
Ci0gICAgICAgICAgZzhfKGc4KSB7fQotICB2aXJ0dWFsIH5DYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJh
dG9yOCgpIHt9Ci0KLSAgdmlydHVhbCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4q
IEJlZ2luKCkgY29uc3QgewotICAgIHJldHVybiBuZXcgSXRlcmF0b3IodGhpcywgZzFfLCBnMV8u
YmVnaW4oKSwgZzJfLCBnMl8uYmVnaW4oKSwgZzNfLAotICAgICAgICBnM18uYmVnaW4oKSwgZzRf
LCBnNF8uYmVnaW4oKSwgZzVfLCBnNV8uYmVnaW4oKSwgZzZfLCBnNl8uYmVnaW4oKSwgZzdfLAot
ICAgICAgICBnN18uYmVnaW4oKSwgZzhfLCBnOF8uYmVnaW4oKSk7Ci0gIH0KLSAgdmlydHVhbCBQ
YXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIEVuZCgpIGNvbnN0IHsKLSAgICByZXR1
cm4gbmV3IEl0ZXJhdG9yKHRoaXMsIGcxXywgZzFfLmVuZCgpLCBnMl8sIGcyXy5lbmQoKSwgZzNf
LCBnM18uZW5kKCksCi0gICAgICAgIGc0XywgZzRfLmVuZCgpLCBnNV8sIGc1Xy5lbmQoKSwgZzZf
LCBnNl8uZW5kKCksIGc3XywgZzdfLmVuZCgpLCBnOF8sCi0gICAgICAgIGc4Xy5lbmQoKSk7Ci0g
IH0KLQotIHByaXZhdGU6Ci0gIGNsYXNzIEl0ZXJhdG9yIDogcHVibGljIFBhcmFtSXRlcmF0b3JJ
bnRlcmZhY2U8UGFyYW1UeXBlPiB7Ci0gICBwdWJsaWM6Ci0gICAgSXRlcmF0b3IoY29uc3QgUGFy
YW1HZW5lcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiogYmFzZSwKLSAgICAgIGNvbnN0IFBhcmFt
R2VuZXJhdG9yPFQxPiYgZzEsCi0gICAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxU
MT46Oml0ZXJhdG9yJiBjdXJyZW50MSwKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQyPiYg
ZzIsCi0gICAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMj46Oml0ZXJhdG9yJiBj
dXJyZW50MiwKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQzPiYgZzMsCi0gICAgICBjb25z
dCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMz46Oml0ZXJhdG9yJiBjdXJyZW50MywKLSAgICAg
IGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ0PiYgZzQsCi0gICAgICBjb25zdCB0eXBlbmFtZSBQYXJh
bUdlbmVyYXRvcjxUND46Oml0ZXJhdG9yJiBjdXJyZW50NCwKLSAgICAgIGNvbnN0IFBhcmFtR2Vu
ZXJhdG9yPFQ1PiYgZzUsCi0gICAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUNT46
Oml0ZXJhdG9yJiBjdXJyZW50NSwKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ2PiYgZzYs
Ci0gICAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUNj46Oml0ZXJhdG9yJiBjdXJy
ZW50NiwKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ3PiYgZzcsCi0gICAgICBjb25zdCB0
eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUNz46Oml0ZXJhdG9yJiBjdXJyZW50NywKLSAgICAgIGNv
bnN0IFBhcmFtR2VuZXJhdG9yPFQ4PiYgZzgsCi0gICAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdl
bmVyYXRvcjxUOD46Oml0ZXJhdG9yJiBjdXJyZW50OCkKLSAgICAgICAgOiBiYXNlXyhiYXNlKSwK
LSAgICAgICAgICBiZWdpbjFfKGcxLmJlZ2luKCkpLCBlbmQxXyhnMS5lbmQoKSksIGN1cnJlbnQx
XyhjdXJyZW50MSksCi0gICAgICAgICAgYmVnaW4yXyhnMi5iZWdpbigpKSwgZW5kMl8oZzIuZW5k
KCkpLCBjdXJyZW50Ml8oY3VycmVudDIpLAotICAgICAgICAgIGJlZ2luM18oZzMuYmVnaW4oKSks
IGVuZDNfKGczLmVuZCgpKSwgY3VycmVudDNfKGN1cnJlbnQzKSwKLSAgICAgICAgICBiZWdpbjRf
KGc0LmJlZ2luKCkpLCBlbmQ0XyhnNC5lbmQoKSksIGN1cnJlbnQ0XyhjdXJyZW50NCksCi0gICAg
ICAgICAgYmVnaW41XyhnNS5iZWdpbigpKSwgZW5kNV8oZzUuZW5kKCkpLCBjdXJyZW50NV8oY3Vy
cmVudDUpLAotICAgICAgICAgIGJlZ2luNl8oZzYuYmVnaW4oKSksIGVuZDZfKGc2LmVuZCgpKSwg
Y3VycmVudDZfKGN1cnJlbnQ2KSwKLSAgICAgICAgICBiZWdpbjdfKGc3LmJlZ2luKCkpLCBlbmQ3
XyhnNy5lbmQoKSksIGN1cnJlbnQ3XyhjdXJyZW50NyksCi0gICAgICAgICAgYmVnaW44XyhnOC5i
ZWdpbigpKSwgZW5kOF8oZzguZW5kKCkpLCBjdXJyZW50OF8oY3VycmVudDgpICAgIHsKLSAgICAg
IENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+SXRlcmF0b3IoKSB7
fQotCi0gICAgdmlydHVhbCBjb25zdCBQYXJhbUdlbmVyYXRvckludGVyZmFjZTxQYXJhbVR5cGU+
KiBCYXNlR2VuZXJhdG9yKCkgY29uc3QgewotICAgICAgcmV0dXJuIGJhc2VfOwotICAgIH0KLSAg
ICAvLyBBZHZhbmNlIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uIGJleW9uZC1vZi1yYW5nZSBpdGVy
YXRvcnMKLSAgICAvLyBzbyBubyBjb21wb25lbnQgaXRlcmF0b3JzIG11c3QgYmUgYmV5b25kIGVu
ZCBvZiByYW5nZSwgZWl0aGVyLgotICAgIHZpcnR1YWwgdm9pZCBBZHZhbmNlKCkgewotICAgICAg
YXNzZXJ0KCFBdEVuZCgpKTsKLSAgICAgICsrY3VycmVudDhfOwotICAgICAgaWYgKGN1cnJlbnQ4
XyA9PSBlbmQ4XykgewotICAgICAgICBjdXJyZW50OF8gPSBiZWdpbjhfOwotICAgICAgICArK2N1
cnJlbnQ3XzsKLSAgICAgIH0KLSAgICAgIGlmIChjdXJyZW50N18gPT0gZW5kN18pIHsKLSAgICAg
ICAgY3VycmVudDdfID0gYmVnaW43XzsKLSAgICAgICAgKytjdXJyZW50Nl87Ci0gICAgICB9Ci0g
ICAgICBpZiAoY3VycmVudDZfID09IGVuZDZfKSB7Ci0gICAgICAgIGN1cnJlbnQ2XyA9IGJlZ2lu
Nl87Ci0gICAgICAgICsrY3VycmVudDVfOwotICAgICAgfQotICAgICAgaWYgKGN1cnJlbnQ1XyA9
PSBlbmQ1XykgewotICAgICAgICBjdXJyZW50NV8gPSBiZWdpbjVfOwotICAgICAgICArK2N1cnJl
bnQ0XzsKLSAgICAgIH0KLSAgICAgIGlmIChjdXJyZW50NF8gPT0gZW5kNF8pIHsKLSAgICAgICAg
Y3VycmVudDRfID0gYmVnaW40XzsKLSAgICAgICAgKytjdXJyZW50M187Ci0gICAgICB9Ci0gICAg
ICBpZiAoY3VycmVudDNfID09IGVuZDNfKSB7Ci0gICAgICAgIGN1cnJlbnQzXyA9IGJlZ2luM187
Ci0gICAgICAgICsrY3VycmVudDJfOwotICAgICAgfQotICAgICAgaWYgKGN1cnJlbnQyXyA9PSBl
bmQyXykgewotICAgICAgICBjdXJyZW50Ml8gPSBiZWdpbjJfOwotICAgICAgICArK2N1cnJlbnQx
XzsKLSAgICAgIH0KLSAgICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0gICAgdmly
dHVhbCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIENsb25lKCkgY29uc3Qgewot
ICAgICAgcmV0dXJuIG5ldyBJdGVyYXRvcigqdGhpcyk7Ci0gICAgfQotICAgIHZpcnR1YWwgY29u
c3QgUGFyYW1UeXBlKiBDdXJyZW50KCkgY29uc3QgeyByZXR1cm4gJmN1cnJlbnRfdmFsdWVfOyB9
Ci0gICAgdmlydHVhbCBib29sIEVxdWFscyhjb25zdCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBh
cmFtVHlwZT4mIG90aGVyKSBjb25zdCB7Ci0gICAgICAvLyBIYXZpbmcgdGhlIHNhbWUgYmFzZSBn
ZW5lcmF0b3IgZ3VhcmFudGVlcyB0aGF0IHRoZSBvdGhlcgotICAgICAgLy8gaXRlcmF0b3IgaXMg
b2YgdGhlIHNhbWUgdHlwZSBhbmQgd2UgY2FuIGRvd25jYXN0LgotICAgICAgR1RFU1RfQ0hFQ0tf
KEJhc2VHZW5lcmF0b3IoKSA9PSBvdGhlci5CYXNlR2VuZXJhdG9yKCkpCi0gICAgICAgICAgPDwg
IlRoZSBwcm9ncmFtIGF0dGVtcHRlZCB0byBjb21wYXJlIGl0ZXJhdG9ycyAiCi0gICAgICAgICAg
PDwgImZyb20gZGlmZmVyZW50IGdlbmVyYXRvcnMuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICBjb25z
dCBJdGVyYXRvciogdHlwZWRfb3RoZXIgPQotICAgICAgICAgIENoZWNrZWREb3duY2FzdFRvQWN0
dWFsVHlwZTxjb25zdCBJdGVyYXRvcj4oJm90aGVyKTsKLSAgICAgIC8vIFdlIG11c3QgcmVwb3J0
IGl0ZXJhdG9ycyBlcXVhbCBpZiB0aGV5IGJvdGggcG9pbnQgYmV5b25kIHRoZWlyCi0gICAgICAv
LyByZXNwZWN0aXZlIHJhbmdlcy4gVGhhdCBjYW4gaGFwcGVuIGluIGEgdmFyaWV0eSBvZiBmYXNo
aW9ucywKLSAgICAgIC8vIHNvIHdlIGhhdmUgdG8gY29uc3VsdCBBdEVuZCgpLgotICAgICAgcmV0
dXJuIChBdEVuZCgpICYmIHR5cGVkX290aGVyLT5BdEVuZCgpKSB8fAotICAgICAgICAgKAotICAg
ICAgICAgIGN1cnJlbnQxXyA9PSB0eXBlZF9vdGhlci0+Y3VycmVudDFfICYmCi0gICAgICAgICAg
Y3VycmVudDJfID09IHR5cGVkX290aGVyLT5jdXJyZW50Ml8gJiYKLSAgICAgICAgICBjdXJyZW50
M18gPT0gdHlwZWRfb3RoZXItPmN1cnJlbnQzXyAmJgotICAgICAgICAgIGN1cnJlbnQ0XyA9PSB0
eXBlZF9vdGhlci0+Y3VycmVudDRfICYmCi0gICAgICAgICAgY3VycmVudDVfID09IHR5cGVkX290
aGVyLT5jdXJyZW50NV8gJiYKLSAgICAgICAgICBjdXJyZW50Nl8gPT0gdHlwZWRfb3RoZXItPmN1
cnJlbnQ2XyAmJgotICAgICAgICAgIGN1cnJlbnQ3XyA9PSB0eXBlZF9vdGhlci0+Y3VycmVudDdf
ICYmCi0gICAgICAgICAgY3VycmVudDhfID09IHR5cGVkX290aGVyLT5jdXJyZW50OF8pOwotICAg
IH0KLQotICAgcHJpdmF0ZToKLSAgICBJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgb3RoZXIpCi0g
ICAgICAgIDogYmFzZV8ob3RoZXIuYmFzZV8pLAotICAgICAgICBiZWdpbjFfKG90aGVyLmJlZ2lu
MV8pLAotICAgICAgICBlbmQxXyhvdGhlci5lbmQxXyksCi0gICAgICAgIGN1cnJlbnQxXyhvdGhl
ci5jdXJyZW50MV8pLAotICAgICAgICBiZWdpbjJfKG90aGVyLmJlZ2luMl8pLAotICAgICAgICBl
bmQyXyhvdGhlci5lbmQyXyksCi0gICAgICAgIGN1cnJlbnQyXyhvdGhlci5jdXJyZW50Ml8pLAot
ICAgICAgICBiZWdpbjNfKG90aGVyLmJlZ2luM18pLAotICAgICAgICBlbmQzXyhvdGhlci5lbmQz
XyksCi0gICAgICAgIGN1cnJlbnQzXyhvdGhlci5jdXJyZW50M18pLAotICAgICAgICBiZWdpbjRf
KG90aGVyLmJlZ2luNF8pLAotICAgICAgICBlbmQ0XyhvdGhlci5lbmQ0XyksCi0gICAgICAgIGN1
cnJlbnQ0XyhvdGhlci5jdXJyZW50NF8pLAotICAgICAgICBiZWdpbjVfKG90aGVyLmJlZ2luNV8p
LAotICAgICAgICBlbmQ1XyhvdGhlci5lbmQ1XyksCi0gICAgICAgIGN1cnJlbnQ1XyhvdGhlci5j
dXJyZW50NV8pLAotICAgICAgICBiZWdpbjZfKG90aGVyLmJlZ2luNl8pLAotICAgICAgICBlbmQ2
XyhvdGhlci5lbmQ2XyksCi0gICAgICAgIGN1cnJlbnQ2XyhvdGhlci5jdXJyZW50Nl8pLAotICAg
ICAgICBiZWdpbjdfKG90aGVyLmJlZ2luN18pLAotICAgICAgICBlbmQ3XyhvdGhlci5lbmQ3Xyks
Ci0gICAgICAgIGN1cnJlbnQ3XyhvdGhlci5jdXJyZW50N18pLAotICAgICAgICBiZWdpbjhfKG90
aGVyLmJlZ2luOF8pLAotICAgICAgICBlbmQ4XyhvdGhlci5lbmQ4XyksCi0gICAgICAgIGN1cnJl
bnQ4XyhvdGhlci5jdXJyZW50OF8pIHsKLSAgICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIENvbXB1dGVDdXJyZW50VmFsdWUoKSB7Ci0gICAgICBpZiAoIUF0RW5k
KCkpCi0gICAgICAgIGN1cnJlbnRfdmFsdWVfID0gUGFyYW1UeXBlKCpjdXJyZW50MV8sICpjdXJy
ZW50Ml8sICpjdXJyZW50M18sCi0gICAgICAgICAgICAqY3VycmVudDRfLCAqY3VycmVudDVfLCAq
Y3VycmVudDZfLCAqY3VycmVudDdfLCAqY3VycmVudDhfKTsKLSAgICB9Ci0gICAgYm9vbCBBdEVu
ZCgpIGNvbnN0IHsKLSAgICAgIC8vIFdlIG11c3QgcmVwb3J0IGl0ZXJhdG9yIHBhc3QgdGhlIGVu
ZCBvZiB0aGUgcmFuZ2Ugd2hlbiBlaXRoZXIgb2YgdGhlCi0gICAgICAvLyBjb21wb25lbnQgaXRl
cmF0b3JzIGhhcyByZWFjaGVkIHRoZSBlbmQgb2YgaXRzIHJhbmdlLgotICAgICAgcmV0dXJuCi0g
ICAgICAgICAgY3VycmVudDFfID09IGVuZDFfIHx8Ci0gICAgICAgICAgY3VycmVudDJfID09IGVu
ZDJfIHx8Ci0gICAgICAgICAgY3VycmVudDNfID09IGVuZDNfIHx8Ci0gICAgICAgICAgY3VycmVu
dDRfID09IGVuZDRfIHx8Ci0gICAgICAgICAgY3VycmVudDVfID09IGVuZDVfIHx8Ci0gICAgICAg
ICAgY3VycmVudDZfID09IGVuZDZfIHx8Ci0gICAgICAgICAgY3VycmVudDdfID09IGVuZDdfIHx8
Ci0gICAgICAgICAgY3VycmVudDhfID09IGVuZDhfOwotICAgIH0KLQotICAgIC8vIE5vIGltcGxl
bWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgICB2b2lkIG9wZXJhdG9y
PShjb25zdCBJdGVyYXRvciYgb3RoZXIpOwotCi0gICAgY29uc3QgUGFyYW1HZW5lcmF0b3JJbnRl
cmZhY2U8UGFyYW1UeXBlPiogY29uc3QgYmFzZV87Ci0gICAgLy8gYmVnaW5baV1fIGFuZCBlbmRb
aV1fIGRlZmluZSB0aGUgaS10aCByYW5nZSB0aGF0IEl0ZXJhdG9yIHRyYXZlcnNlcy4KLSAgICAv
LyBjdXJyZW50W2ldXyBpcyB0aGUgYWN0dWFsIHRyYXZlcnNpbmcgaXRlcmF0b3IuCi0gICAgY29u
c3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDE+OjppdGVyYXRvciBiZWdpbjFfOwotICAgIGNv
bnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQxPjo6aXRlcmF0b3IgZW5kMV87Ci0gICAgdHlw
ZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDE+OjppdGVyYXRvciBjdXJyZW50MV87Ci0gICAgY29uc3Qg
dHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDI+OjppdGVyYXRvciBiZWdpbjJfOwotICAgIGNvbnN0
IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQyPjo6aXRlcmF0b3IgZW5kMl87Ci0gICAgdHlwZW5h
bWUgUGFyYW1HZW5lcmF0b3I8VDI+OjppdGVyYXRvciBjdXJyZW50Ml87Ci0gICAgY29uc3QgdHlw
ZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDM+OjppdGVyYXRvciBiZWdpbjNfOwotICAgIGNvbnN0IHR5
cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQzPjo6aXRlcmF0b3IgZW5kM187Ci0gICAgdHlwZW5hbWUg
UGFyYW1HZW5lcmF0b3I8VDM+OjppdGVyYXRvciBjdXJyZW50M187Ci0gICAgY29uc3QgdHlwZW5h
bWUgUGFyYW1HZW5lcmF0b3I8VDQ+OjppdGVyYXRvciBiZWdpbjRfOwotICAgIGNvbnN0IHR5cGVu
YW1lIFBhcmFtR2VuZXJhdG9yPFQ0Pjo6aXRlcmF0b3IgZW5kNF87Ci0gICAgdHlwZW5hbWUgUGFy
YW1HZW5lcmF0b3I8VDQ+OjppdGVyYXRvciBjdXJyZW50NF87Ci0gICAgY29uc3QgdHlwZW5hbWUg
UGFyYW1HZW5lcmF0b3I8VDU+OjppdGVyYXRvciBiZWdpbjVfOwotICAgIGNvbnN0IHR5cGVuYW1l
IFBhcmFtR2VuZXJhdG9yPFQ1Pjo6aXRlcmF0b3IgZW5kNV87Ci0gICAgdHlwZW5hbWUgUGFyYW1H
ZW5lcmF0b3I8VDU+OjppdGVyYXRvciBjdXJyZW50NV87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFy
YW1HZW5lcmF0b3I8VDY+OjppdGVyYXRvciBiZWdpbjZfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBh
cmFtR2VuZXJhdG9yPFQ2Pjo6aXRlcmF0b3IgZW5kNl87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5l
cmF0b3I8VDY+OjppdGVyYXRvciBjdXJyZW50Nl87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1H
ZW5lcmF0b3I8VDc+OjppdGVyYXRvciBiZWdpbjdfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFt
R2VuZXJhdG9yPFQ3Pjo6aXRlcmF0b3IgZW5kN187Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0
b3I8VDc+OjppdGVyYXRvciBjdXJyZW50N187Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5l
cmF0b3I8VDg+OjppdGVyYXRvciBiZWdpbjhfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2Vu
ZXJhdG9yPFQ4Pjo6aXRlcmF0b3IgZW5kOF87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8
VDg+OjppdGVyYXRvciBjdXJyZW50OF87Ci0gICAgUGFyYW1UeXBlIGN1cnJlbnRfdmFsdWVfOwot
ICB9OyAgLy8gY2xhc3MgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjg6Okl0ZXJhdG9yCi0KLSAg
Ly8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICB2b2lk
IG9wZXJhdG9yPShjb25zdCBDYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yOCYgb3RoZXIpOwotCi0g
IGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQxPiBnMV87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQy
PiBnMl87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQzPiBnM187Ci0gIGNvbnN0IFBhcmFtR2Vu
ZXJhdG9yPFQ0PiBnNF87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ1PiBnNV87Ci0gIGNvbnN0
IFBhcmFtR2VuZXJhdG9yPFQ2PiBnNl87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ3PiBnN187
Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ4PiBnOF87Ci19OyAgLy8gY2xhc3MgQ2FydGVzaWFu
UHJvZHVjdEdlbmVyYXRvcjgKLQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQy
LCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2
LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5PgotY2xhc3MgQ2FydGVzaWFu
UHJvZHVjdEdlbmVyYXRvcjkKLSAgICA6IHB1YmxpYyBQYXJhbUdlbmVyYXRvckludGVyZmFjZTwg
Ojp0ZXN0aW5nOjp0dXBsZTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LAotICAgICAgICBUNywgVDgs
IFQ5PiA+IHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgOjp0ZXN0aW5nOjp0dXBsZTxUMSwgVDIsIFQz
LCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5PiBQYXJhbVR5cGU7Ci0KLSAgQ2FydGVzaWFuUHJvZHVj
dEdlbmVyYXRvcjkoY29uc3QgUGFyYW1HZW5lcmF0b3I8VDE+JiBnMSwKLSAgICAgIGNvbnN0IFBh
cmFtR2VuZXJhdG9yPFQyPiYgZzIsIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQzPiYgZzMsCi0gICAg
ICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUND4mIGc0LCBjb25zdCBQYXJhbUdlbmVyYXRvcjxUNT4m
IGc1LAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDY+JiBnNiwgY29uc3QgUGFyYW1HZW5l
cmF0b3I8VDc+JiBnNywKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ4PiYgZzgsIGNvbnN0
IFBhcmFtR2VuZXJhdG9yPFQ5PiYgZzkpCi0gICAgICA6IGcxXyhnMSksIGcyXyhnMiksIGczXyhn
MyksIGc0XyhnNCksIGc1XyhnNSksIGc2XyhnNiksIGc3XyhnNyksIGc4XyhnOCksCi0gICAgICAg
ICAgZzlfKGc5KSB7fQotICB2aXJ0dWFsIH5DYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yOSgpIHt9
Ci0KLSAgdmlydHVhbCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIEJlZ2luKCkg
Y29uc3QgewotICAgIHJldHVybiBuZXcgSXRlcmF0b3IodGhpcywgZzFfLCBnMV8uYmVnaW4oKSwg
ZzJfLCBnMl8uYmVnaW4oKSwgZzNfLAotICAgICAgICBnM18uYmVnaW4oKSwgZzRfLCBnNF8uYmVn
aW4oKSwgZzVfLCBnNV8uYmVnaW4oKSwgZzZfLCBnNl8uYmVnaW4oKSwgZzdfLAotICAgICAgICBn
N18uYmVnaW4oKSwgZzhfLCBnOF8uYmVnaW4oKSwgZzlfLCBnOV8uYmVnaW4oKSk7Ci0gIH0KLSAg
dmlydHVhbCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIEVuZCgpIGNvbnN0IHsK
LSAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKHRoaXMsIGcxXywgZzFfLmVuZCgpLCBnMl8sIGcyXy5l
bmQoKSwgZzNfLCBnM18uZW5kKCksCi0gICAgICAgIGc0XywgZzRfLmVuZCgpLCBnNV8sIGc1Xy5l
bmQoKSwgZzZfLCBnNl8uZW5kKCksIGc3XywgZzdfLmVuZCgpLCBnOF8sCi0gICAgICAgIGc4Xy5l
bmQoKSwgZzlfLCBnOV8uZW5kKCkpOwotICB9Ci0KLSBwcml2YXRlOgotICBjbGFzcyBJdGVyYXRv
ciA6IHB1YmxpYyBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4gewotICAgcHVibGlj
OgotICAgIEl0ZXJhdG9yKGNvbnN0IFBhcmFtR2VuZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4q
IGJhc2UsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUMT4mIGcxLAotICAgICAgY29uc3Qg
dHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDE+OjppdGVyYXRvciYgY3VycmVudDEsCi0gICAgICBj
b25zdCBQYXJhbUdlbmVyYXRvcjxUMj4mIGcyLAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1H
ZW5lcmF0b3I8VDI+OjppdGVyYXRvciYgY3VycmVudDIsCi0gICAgICBjb25zdCBQYXJhbUdlbmVy
YXRvcjxUMz4mIGczLAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDM+Ojpp
dGVyYXRvciYgY3VycmVudDMsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUND4mIGc0LAot
ICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDQ+OjppdGVyYXRvciYgY3VycmVu
dDQsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUNT4mIGc1LAotICAgICAgY29uc3QgdHlw
ZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDU+OjppdGVyYXRvciYgY3VycmVudDUsCi0gICAgICBjb25z
dCBQYXJhbUdlbmVyYXRvcjxUNj4mIGc2LAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5l
cmF0b3I8VDY+OjppdGVyYXRvciYgY3VycmVudDYsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRv
cjxUNz4mIGc3LAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDc+OjppdGVy
YXRvciYgY3VycmVudDcsCi0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUOD4mIGc4LAotICAg
ICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDg+OjppdGVyYXRvciYgY3VycmVudDgs
Ci0gICAgICBjb25zdCBQYXJhbUdlbmVyYXRvcjxUOT4mIGc5LAotICAgICAgY29uc3QgdHlwZW5h
bWUgUGFyYW1HZW5lcmF0b3I8VDk+OjppdGVyYXRvciYgY3VycmVudDkpCi0gICAgICAgIDogYmFz
ZV8oYmFzZSksCi0gICAgICAgICAgYmVnaW4xXyhnMS5iZWdpbigpKSwgZW5kMV8oZzEuZW5kKCkp
LCBjdXJyZW50MV8oY3VycmVudDEpLAotICAgICAgICAgIGJlZ2luMl8oZzIuYmVnaW4oKSksIGVu
ZDJfKGcyLmVuZCgpKSwgY3VycmVudDJfKGN1cnJlbnQyKSwKLSAgICAgICAgICBiZWdpbjNfKGcz
LmJlZ2luKCkpLCBlbmQzXyhnMy5lbmQoKSksIGN1cnJlbnQzXyhjdXJyZW50MyksCi0gICAgICAg
ICAgYmVnaW40XyhnNC5iZWdpbigpKSwgZW5kNF8oZzQuZW5kKCkpLCBjdXJyZW50NF8oY3VycmVu
dDQpLAotICAgICAgICAgIGJlZ2luNV8oZzUuYmVnaW4oKSksIGVuZDVfKGc1LmVuZCgpKSwgY3Vy
cmVudDVfKGN1cnJlbnQ1KSwKLSAgICAgICAgICBiZWdpbjZfKGc2LmJlZ2luKCkpLCBlbmQ2Xyhn
Ni5lbmQoKSksIGN1cnJlbnQ2XyhjdXJyZW50NiksCi0gICAgICAgICAgYmVnaW43XyhnNy5iZWdp
bigpKSwgZW5kN18oZzcuZW5kKCkpLCBjdXJyZW50N18oY3VycmVudDcpLAotICAgICAgICAgIGJl
Z2luOF8oZzguYmVnaW4oKSksIGVuZDhfKGc4LmVuZCgpKSwgY3VycmVudDhfKGN1cnJlbnQ4KSwK
LSAgICAgICAgICBiZWdpbjlfKGc5LmJlZ2luKCkpLCBlbmQ5XyhnOS5lbmQoKSksIGN1cnJlbnQ5
XyhjdXJyZW50OSkgICAgewotICAgICAgQ29tcHV0ZUN1cnJlbnRWYWx1ZSgpOwotICAgIH0KLSAg
ICB2aXJ0dWFsIH5JdGVyYXRvcigpIHt9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IFBhcmFtR2VuZXJh
dG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIEJhc2VHZW5lcmF0b3IoKSBjb25zdCB7Ci0gICAgICBy
ZXR1cm4gYmFzZV87Ci0gICAgfQotICAgIC8vIEFkdmFuY2Ugc2hvdWxkIG5vdCBiZSBjYWxsZWQg
b24gYmV5b25kLW9mLXJhbmdlIGl0ZXJhdG9ycwotICAgIC8vIHNvIG5vIGNvbXBvbmVudCBpdGVy
YXRvcnMgbXVzdCBiZSBiZXlvbmQgZW5kIG9mIHJhbmdlLCBlaXRoZXIuCi0gICAgdmlydHVhbCB2
b2lkIEFkdmFuY2UoKSB7Ci0gICAgICBhc3NlcnQoIUF0RW5kKCkpOwotICAgICAgKytjdXJyZW50
OV87Ci0gICAgICBpZiAoY3VycmVudDlfID09IGVuZDlfKSB7Ci0gICAgICAgIGN1cnJlbnQ5XyA9
IGJlZ2luOV87Ci0gICAgICAgICsrY3VycmVudDhfOwotICAgICAgfQotICAgICAgaWYgKGN1cnJl
bnQ4XyA9PSBlbmQ4XykgewotICAgICAgICBjdXJyZW50OF8gPSBiZWdpbjhfOwotICAgICAgICAr
K2N1cnJlbnQ3XzsKLSAgICAgIH0KLSAgICAgIGlmIChjdXJyZW50N18gPT0gZW5kN18pIHsKLSAg
ICAgICAgY3VycmVudDdfID0gYmVnaW43XzsKLSAgICAgICAgKytjdXJyZW50Nl87Ci0gICAgICB9
Ci0gICAgICBpZiAoY3VycmVudDZfID09IGVuZDZfKSB7Ci0gICAgICAgIGN1cnJlbnQ2XyA9IGJl
Z2luNl87Ci0gICAgICAgICsrY3VycmVudDVfOwotICAgICAgfQotICAgICAgaWYgKGN1cnJlbnQ1
XyA9PSBlbmQ1XykgewotICAgICAgICBjdXJyZW50NV8gPSBiZWdpbjVfOwotICAgICAgICArK2N1
cnJlbnQ0XzsKLSAgICAgIH0KLSAgICAgIGlmIChjdXJyZW50NF8gPT0gZW5kNF8pIHsKLSAgICAg
ICAgY3VycmVudDRfID0gYmVnaW40XzsKLSAgICAgICAgKytjdXJyZW50M187Ci0gICAgICB9Ci0g
ICAgICBpZiAoY3VycmVudDNfID09IGVuZDNfKSB7Ci0gICAgICAgIGN1cnJlbnQzXyA9IGJlZ2lu
M187Ci0gICAgICAgICsrY3VycmVudDJfOwotICAgICAgfQotICAgICAgaWYgKGN1cnJlbnQyXyA9
PSBlbmQyXykgewotICAgICAgICBjdXJyZW50Ml8gPSBiZWdpbjJfOwotICAgICAgICArK2N1cnJl
bnQxXzsKLSAgICAgIH0KLSAgICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0gICAg
dmlydHVhbCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIENsb25lKCkgY29uc3Qg
ewotICAgICAgcmV0dXJuIG5ldyBJdGVyYXRvcigqdGhpcyk7Ci0gICAgfQotICAgIHZpcnR1YWwg
Y29uc3QgUGFyYW1UeXBlKiBDdXJyZW50KCkgY29uc3QgeyByZXR1cm4gJmN1cnJlbnRfdmFsdWVf
OyB9Ci0gICAgdmlydHVhbCBib29sIEVxdWFscyhjb25zdCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNl
PFBhcmFtVHlwZT4mIG90aGVyKSBjb25zdCB7Ci0gICAgICAvLyBIYXZpbmcgdGhlIHNhbWUgYmFz
ZSBnZW5lcmF0b3IgZ3VhcmFudGVlcyB0aGF0IHRoZSBvdGhlcgotICAgICAgLy8gaXRlcmF0b3Ig
aXMgb2YgdGhlIHNhbWUgdHlwZSBhbmQgd2UgY2FuIGRvd25jYXN0LgotICAgICAgR1RFU1RfQ0hF
Q0tfKEJhc2VHZW5lcmF0b3IoKSA9PSBvdGhlci5CYXNlR2VuZXJhdG9yKCkpCi0gICAgICAgICAg
PDwgIlRoZSBwcm9ncmFtIGF0dGVtcHRlZCB0byBjb21wYXJlIGl0ZXJhdG9ycyAiCi0gICAgICAg
ICAgPDwgImZyb20gZGlmZmVyZW50IGdlbmVyYXRvcnMuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICBj
b25zdCBJdGVyYXRvciogdHlwZWRfb3RoZXIgPQotICAgICAgICAgIENoZWNrZWREb3duY2FzdFRv
QWN0dWFsVHlwZTxjb25zdCBJdGVyYXRvcj4oJm90aGVyKTsKLSAgICAgIC8vIFdlIG11c3QgcmVw
b3J0IGl0ZXJhdG9ycyBlcXVhbCBpZiB0aGV5IGJvdGggcG9pbnQgYmV5b25kIHRoZWlyCi0gICAg
ICAvLyByZXNwZWN0aXZlIHJhbmdlcy4gVGhhdCBjYW4gaGFwcGVuIGluIGEgdmFyaWV0eSBvZiBm
YXNoaW9ucywKLSAgICAgIC8vIHNvIHdlIGhhdmUgdG8gY29uc3VsdCBBdEVuZCgpLgotICAgICAg
cmV0dXJuIChBdEVuZCgpICYmIHR5cGVkX290aGVyLT5BdEVuZCgpKSB8fAotICAgICAgICAgKAot
ICAgICAgICAgIGN1cnJlbnQxXyA9PSB0eXBlZF9vdGhlci0+Y3VycmVudDFfICYmCi0gICAgICAg
ICAgY3VycmVudDJfID09IHR5cGVkX290aGVyLT5jdXJyZW50Ml8gJiYKLSAgICAgICAgICBjdXJy
ZW50M18gPT0gdHlwZWRfb3RoZXItPmN1cnJlbnQzXyAmJgotICAgICAgICAgIGN1cnJlbnQ0XyA9
PSB0eXBlZF9vdGhlci0+Y3VycmVudDRfICYmCi0gICAgICAgICAgY3VycmVudDVfID09IHR5cGVk
X290aGVyLT5jdXJyZW50NV8gJiYKLSAgICAgICAgICBjdXJyZW50Nl8gPT0gdHlwZWRfb3RoZXIt
PmN1cnJlbnQ2XyAmJgotICAgICAgICAgIGN1cnJlbnQ3XyA9PSB0eXBlZF9vdGhlci0+Y3VycmVu
dDdfICYmCi0gICAgICAgICAgY3VycmVudDhfID09IHR5cGVkX290aGVyLT5jdXJyZW50OF8gJiYK
LSAgICAgICAgICBjdXJyZW50OV8gPT0gdHlwZWRfb3RoZXItPmN1cnJlbnQ5Xyk7Ci0gICAgfQot
Ci0gICBwcml2YXRlOgotICAgIEl0ZXJhdG9yKGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikKLSAgICAg
ICAgOiBiYXNlXyhvdGhlci5iYXNlXyksCi0gICAgICAgIGJlZ2luMV8ob3RoZXIuYmVnaW4xXyks
Ci0gICAgICAgIGVuZDFfKG90aGVyLmVuZDFfKSwKLSAgICAgICAgY3VycmVudDFfKG90aGVyLmN1
cnJlbnQxXyksCi0gICAgICAgIGJlZ2luMl8ob3RoZXIuYmVnaW4yXyksCi0gICAgICAgIGVuZDJf
KG90aGVyLmVuZDJfKSwKLSAgICAgICAgY3VycmVudDJfKG90aGVyLmN1cnJlbnQyXyksCi0gICAg
ICAgIGJlZ2luM18ob3RoZXIuYmVnaW4zXyksCi0gICAgICAgIGVuZDNfKG90aGVyLmVuZDNfKSwK
LSAgICAgICAgY3VycmVudDNfKG90aGVyLmN1cnJlbnQzXyksCi0gICAgICAgIGJlZ2luNF8ob3Ro
ZXIuYmVnaW40XyksCi0gICAgICAgIGVuZDRfKG90aGVyLmVuZDRfKSwKLSAgICAgICAgY3VycmVu
dDRfKG90aGVyLmN1cnJlbnQ0XyksCi0gICAgICAgIGJlZ2luNV8ob3RoZXIuYmVnaW41XyksCi0g
ICAgICAgIGVuZDVfKG90aGVyLmVuZDVfKSwKLSAgICAgICAgY3VycmVudDVfKG90aGVyLmN1cnJl
bnQ1XyksCi0gICAgICAgIGJlZ2luNl8ob3RoZXIuYmVnaW42XyksCi0gICAgICAgIGVuZDZfKG90
aGVyLmVuZDZfKSwKLSAgICAgICAgY3VycmVudDZfKG90aGVyLmN1cnJlbnQ2XyksCi0gICAgICAg
IGJlZ2luN18ob3RoZXIuYmVnaW43XyksCi0gICAgICAgIGVuZDdfKG90aGVyLmVuZDdfKSwKLSAg
ICAgICAgY3VycmVudDdfKG90aGVyLmN1cnJlbnQ3XyksCi0gICAgICAgIGJlZ2luOF8ob3RoZXIu
YmVnaW44XyksCi0gICAgICAgIGVuZDhfKG90aGVyLmVuZDhfKSwKLSAgICAgICAgY3VycmVudDhf
KG90aGVyLmN1cnJlbnQ4XyksCi0gICAgICAgIGJlZ2luOV8ob3RoZXIuYmVnaW45XyksCi0gICAg
ICAgIGVuZDlfKG90aGVyLmVuZDlfKSwKLSAgICAgICAgY3VycmVudDlfKG90aGVyLmN1cnJlbnQ5
XykgewotICAgICAgQ29tcHV0ZUN1cnJlbnRWYWx1ZSgpOwotICAgIH0KLQotICAgIHZvaWQgQ29t
cHV0ZUN1cnJlbnRWYWx1ZSgpIHsKLSAgICAgIGlmICghQXRFbmQoKSkKLSAgICAgICAgY3VycmVu
dF92YWx1ZV8gPSBQYXJhbVR5cGUoKmN1cnJlbnQxXywgKmN1cnJlbnQyXywgKmN1cnJlbnQzXywK
LSAgICAgICAgICAgICpjdXJyZW50NF8sICpjdXJyZW50NV8sICpjdXJyZW50Nl8sICpjdXJyZW50
N18sICpjdXJyZW50OF8sCi0gICAgICAgICAgICAqY3VycmVudDlfKTsKLSAgICB9Ci0gICAgYm9v
bCBBdEVuZCgpIGNvbnN0IHsKLSAgICAgIC8vIFdlIG11c3QgcmVwb3J0IGl0ZXJhdG9yIHBhc3Qg
dGhlIGVuZCBvZiB0aGUgcmFuZ2Ugd2hlbiBlaXRoZXIgb2YgdGhlCi0gICAgICAvLyBjb21wb25l
bnQgaXRlcmF0b3JzIGhhcyByZWFjaGVkIHRoZSBlbmQgb2YgaXRzIHJhbmdlLgotICAgICAgcmV0
dXJuCi0gICAgICAgICAgY3VycmVudDFfID09IGVuZDFfIHx8Ci0gICAgICAgICAgY3VycmVudDJf
ID09IGVuZDJfIHx8Ci0gICAgICAgICAgY3VycmVudDNfID09IGVuZDNfIHx8Ci0gICAgICAgICAg
Y3VycmVudDRfID09IGVuZDRfIHx8Ci0gICAgICAgICAgY3VycmVudDVfID09IGVuZDVfIHx8Ci0g
ICAgICAgICAgY3VycmVudDZfID09IGVuZDZfIHx8Ci0gICAgICAgICAgY3VycmVudDdfID09IGVu
ZDdfIHx8Ci0gICAgICAgICAgY3VycmVudDhfID09IGVuZDhfIHx8Ci0gICAgICAgICAgY3VycmVu
dDlfID09IGVuZDlfOwotICAgIH0KLQotICAgIC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdu
bWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBJdGVyYXRvciYg
b3RoZXIpOwotCi0gICAgY29uc3QgUGFyYW1HZW5lcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiog
Y29uc3QgYmFzZV87Ci0gICAgLy8gYmVnaW5baV1fIGFuZCBlbmRbaV1fIGRlZmluZSB0aGUgaS10
aCByYW5nZSB0aGF0IEl0ZXJhdG9yIHRyYXZlcnNlcy4KLSAgICAvLyBjdXJyZW50W2ldXyBpcyB0
aGUgYWN0dWFsIHRyYXZlcnNpbmcgaXRlcmF0b3IuCi0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1H
ZW5lcmF0b3I8VDE+OjppdGVyYXRvciBiZWdpbjFfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFt
R2VuZXJhdG9yPFQxPjo6aXRlcmF0b3IgZW5kMV87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0
b3I8VDE+OjppdGVyYXRvciBjdXJyZW50MV87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5l
cmF0b3I8VDI+OjppdGVyYXRvciBiZWdpbjJfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2Vu
ZXJhdG9yPFQyPjo6aXRlcmF0b3IgZW5kMl87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8
VDI+OjppdGVyYXRvciBjdXJyZW50Ml87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0
b3I8VDM+OjppdGVyYXRvciBiZWdpbjNfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJh
dG9yPFQzPjo6aXRlcmF0b3IgZW5kM187Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDM+
OjppdGVyYXRvciBjdXJyZW50M187Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8
VDQ+OjppdGVyYXRvciBiZWdpbjRfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9y
PFQ0Pjo6aXRlcmF0b3IgZW5kNF87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDQ+Ojpp
dGVyYXRvciBjdXJyZW50NF87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDU+
OjppdGVyYXRvciBiZWdpbjVfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ1
Pjo6aXRlcmF0b3IgZW5kNV87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDU+OjppdGVy
YXRvciBjdXJyZW50NV87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDY+Ojpp
dGVyYXRvciBiZWdpbjZfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ2Pjo6
aXRlcmF0b3IgZW5kNl87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDY+OjppdGVyYXRv
ciBjdXJyZW50Nl87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDc+OjppdGVy
YXRvciBiZWdpbjdfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ3Pjo6aXRl
cmF0b3IgZW5kN187Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDc+OjppdGVyYXRvciBj
dXJyZW50N187Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDg+OjppdGVyYXRv
ciBiZWdpbjhfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ4Pjo6aXRlcmF0
b3IgZW5kOF87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDg+OjppdGVyYXRvciBjdXJy
ZW50OF87Ci0gICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDk+OjppdGVyYXRvciBi
ZWdpbjlfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ5Pjo6aXRlcmF0b3Ig
ZW5kOV87Ci0gICAgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VDk+OjppdGVyYXRvciBjdXJyZW50
OV87Ci0gICAgUGFyYW1UeXBlIGN1cnJlbnRfdmFsdWVfOwotICB9OyAgLy8gY2xhc3MgQ2FydGVz
aWFuUHJvZHVjdEdlbmVyYXRvcjk6Okl0ZXJhdG9yCi0KLSAgLy8gTm8gaW1wbGVtZW50YXRpb24g
LSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBDYXJ0
ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yOSYgb3RoZXIpOwotCi0gIGNvbnN0IFBhcmFtR2VuZXJhdG9y
PFQxPiBnMV87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQyPiBnMl87Ci0gIGNvbnN0IFBhcmFt
R2VuZXJhdG9yPFQzPiBnM187Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ0PiBnNF87Ci0gIGNv
bnN0IFBhcmFtR2VuZXJhdG9yPFQ1PiBnNV87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ2PiBn
Nl87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ3PiBnN187Ci0gIGNvbnN0IFBhcmFtR2VuZXJh
dG9yPFQ4PiBnOF87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ5PiBnOV87Ci19OyAgLy8gY2xh
c3MgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjkKLQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEs
IHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAg
IHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBl
bmFtZSBUMTA+Ci1jbGFzcyBDYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yMTAKLSAgICA6IHB1Ymxp
YyBQYXJhbUdlbmVyYXRvckludGVyZmFjZTwgOjp0ZXN0aW5nOjp0dXBsZTxUMSwgVDIsIFQzLCBU
NCwgVDUsIFQ2LAotICAgICAgICBUNywgVDgsIFQ5LCBUMTA+ID4gewotIHB1YmxpYzoKLSAgdHlw
ZWRlZiA6OnRlc3Rpbmc6OnR1cGxlPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDks
IFQxMD4gUGFyYW1UeXBlOwotCi0gIENhcnRlc2lhblByb2R1Y3RHZW5lcmF0b3IxMChjb25zdCBQ
YXJhbUdlbmVyYXRvcjxUMT4mIGcxLAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDI+JiBn
MiwgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDM+JiBnMywKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJh
dG9yPFQ0PiYgZzQsIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ1PiYgZzUsCi0gICAgICBjb25zdCBQ
YXJhbUdlbmVyYXRvcjxUNj4mIGc2LCBjb25zdCBQYXJhbUdlbmVyYXRvcjxUNz4mIGc3LAotICAg
ICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDg+JiBnOCwgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDk+
JiBnOSwKLSAgICAgIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQxMD4mIGcxMCkKLSAgICAgIDogZzFf
KGcxKSwgZzJfKGcyKSwgZzNfKGczKSwgZzRfKGc0KSwgZzVfKGc1KSwgZzZfKGc2KSwgZzdfKGc3
KSwgZzhfKGc4KSwKLSAgICAgICAgICBnOV8oZzkpLCBnMTBfKGcxMCkge30KLSAgdmlydHVhbCB+
Q2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjEwKCkge30KLQotICB2aXJ0dWFsIFBhcmFtSXRlcmF0
b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiogQmVnaW4oKSBjb25zdCB7Ci0gICAgcmV0dXJuIG5ldyBJ
dGVyYXRvcih0aGlzLCBnMV8sIGcxXy5iZWdpbigpLCBnMl8sIGcyXy5iZWdpbigpLCBnM18sCi0g
ICAgICAgIGczXy5iZWdpbigpLCBnNF8sIGc0Xy5iZWdpbigpLCBnNV8sIGc1Xy5iZWdpbigpLCBn
Nl8sIGc2Xy5iZWdpbigpLCBnN18sCi0gICAgICAgIGc3Xy5iZWdpbigpLCBnOF8sIGc4Xy5iZWdp
bigpLCBnOV8sIGc5Xy5iZWdpbigpLCBnMTBfLCBnMTBfLmJlZ2luKCkpOwotICB9Ci0gIHZpcnR1
YWwgUGFyYW1JdGVyYXRvckludGVyZmFjZTxQYXJhbVR5cGU+KiBFbmQoKSBjb25zdCB7Ci0gICAg
cmV0dXJuIG5ldyBJdGVyYXRvcih0aGlzLCBnMV8sIGcxXy5lbmQoKSwgZzJfLCBnMl8uZW5kKCks
IGczXywgZzNfLmVuZCgpLAotICAgICAgICBnNF8sIGc0Xy5lbmQoKSwgZzVfLCBnNV8uZW5kKCks
IGc2XywgZzZfLmVuZCgpLCBnN18sIGc3Xy5lbmQoKSwgZzhfLAotICAgICAgICBnOF8uZW5kKCks
IGc5XywgZzlfLmVuZCgpLCBnMTBfLCBnMTBfLmVuZCgpKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAg
Y2xhc3MgSXRlcmF0b3IgOiBwdWJsaWMgUGFyYW1JdGVyYXRvckludGVyZmFjZTxQYXJhbVR5cGU+
IHsKLSAgIHB1YmxpYzoKLSAgICBJdGVyYXRvcihjb25zdCBQYXJhbUdlbmVyYXRvckludGVyZmFj
ZTxQYXJhbVR5cGU+KiBiYXNlLAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDE+JiBnMSwK
LSAgICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQxPjo6aXRlcmF0b3ImIGN1cnJl
bnQxLAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDI+JiBnMiwKLSAgICAgIGNvbnN0IHR5
cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQyPjo6aXRlcmF0b3ImIGN1cnJlbnQyLAotICAgICAgY29u
c3QgUGFyYW1HZW5lcmF0b3I8VDM+JiBnMywKLSAgICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2Vu
ZXJhdG9yPFQzPjo6aXRlcmF0b3ImIGN1cnJlbnQzLAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0
b3I8VDQ+JiBnNCwKLSAgICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ0Pjo6aXRl
cmF0b3ImIGN1cnJlbnQ0LAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDU+JiBnNSwKLSAg
ICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ1Pjo6aXRlcmF0b3ImIGN1cnJlbnQ1
LAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDY+JiBnNiwKLSAgICAgIGNvbnN0IHR5cGVu
YW1lIFBhcmFtR2VuZXJhdG9yPFQ2Pjo6aXRlcmF0b3ImIGN1cnJlbnQ2LAotICAgICAgY29uc3Qg
UGFyYW1HZW5lcmF0b3I8VDc+JiBnNywKLSAgICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJh
dG9yPFQ3Pjo6aXRlcmF0b3ImIGN1cnJlbnQ3LAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8
VDg+JiBnOCwKLSAgICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ4Pjo6aXRlcmF0
b3ImIGN1cnJlbnQ4LAotICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDk+JiBnOSwKLSAgICAg
IGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ5Pjo6aXRlcmF0b3ImIGN1cnJlbnQ5LAot
ICAgICAgY29uc3QgUGFyYW1HZW5lcmF0b3I8VDEwPiYgZzEwLAotICAgICAgY29uc3QgdHlwZW5h
bWUgUGFyYW1HZW5lcmF0b3I8VDEwPjo6aXRlcmF0b3ImIGN1cnJlbnQxMCkKLSAgICAgICAgOiBi
YXNlXyhiYXNlKSwKLSAgICAgICAgICBiZWdpbjFfKGcxLmJlZ2luKCkpLCBlbmQxXyhnMS5lbmQo
KSksIGN1cnJlbnQxXyhjdXJyZW50MSksCi0gICAgICAgICAgYmVnaW4yXyhnMi5iZWdpbigpKSwg
ZW5kMl8oZzIuZW5kKCkpLCBjdXJyZW50Ml8oY3VycmVudDIpLAotICAgICAgICAgIGJlZ2luM18o
ZzMuYmVnaW4oKSksIGVuZDNfKGczLmVuZCgpKSwgY3VycmVudDNfKGN1cnJlbnQzKSwKLSAgICAg
ICAgICBiZWdpbjRfKGc0LmJlZ2luKCkpLCBlbmQ0XyhnNC5lbmQoKSksIGN1cnJlbnQ0XyhjdXJy
ZW50NCksCi0gICAgICAgICAgYmVnaW41XyhnNS5iZWdpbigpKSwgZW5kNV8oZzUuZW5kKCkpLCBj
dXJyZW50NV8oY3VycmVudDUpLAotICAgICAgICAgIGJlZ2luNl8oZzYuYmVnaW4oKSksIGVuZDZf
KGc2LmVuZCgpKSwgY3VycmVudDZfKGN1cnJlbnQ2KSwKLSAgICAgICAgICBiZWdpbjdfKGc3LmJl
Z2luKCkpLCBlbmQ3XyhnNy5lbmQoKSksIGN1cnJlbnQ3XyhjdXJyZW50NyksCi0gICAgICAgICAg
YmVnaW44XyhnOC5iZWdpbigpKSwgZW5kOF8oZzguZW5kKCkpLCBjdXJyZW50OF8oY3VycmVudDgp
LAotICAgICAgICAgIGJlZ2luOV8oZzkuYmVnaW4oKSksIGVuZDlfKGc5LmVuZCgpKSwgY3VycmVu
dDlfKGN1cnJlbnQ5KSwKLSAgICAgICAgICBiZWdpbjEwXyhnMTAuYmVnaW4oKSksIGVuZDEwXyhn
MTAuZW5kKCkpLCBjdXJyZW50MTBfKGN1cnJlbnQxMCkgICAgewotICAgICAgQ29tcHV0ZUN1cnJl
bnRWYWx1ZSgpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5JdGVyYXRvcigpIHt9Ci0KLSAgICB2aXJ0
dWFsIGNvbnN0IFBhcmFtR2VuZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIEJhc2VHZW5lcmF0
b3IoKSBjb25zdCB7Ci0gICAgICByZXR1cm4gYmFzZV87Ci0gICAgfQotICAgIC8vIEFkdmFuY2Ug
c2hvdWxkIG5vdCBiZSBjYWxsZWQgb24gYmV5b25kLW9mLXJhbmdlIGl0ZXJhdG9ycwotICAgIC8v
IHNvIG5vIGNvbXBvbmVudCBpdGVyYXRvcnMgbXVzdCBiZSBiZXlvbmQgZW5kIG9mIHJhbmdlLCBl
aXRoZXIuCi0gICAgdmlydHVhbCB2b2lkIEFkdmFuY2UoKSB7Ci0gICAgICBhc3NlcnQoIUF0RW5k
KCkpOwotICAgICAgKytjdXJyZW50MTBfOwotICAgICAgaWYgKGN1cnJlbnQxMF8gPT0gZW5kMTBf
KSB7Ci0gICAgICAgIGN1cnJlbnQxMF8gPSBiZWdpbjEwXzsKLSAgICAgICAgKytjdXJyZW50OV87
Ci0gICAgICB9Ci0gICAgICBpZiAoY3VycmVudDlfID09IGVuZDlfKSB7Ci0gICAgICAgIGN1cnJl
bnQ5XyA9IGJlZ2luOV87Ci0gICAgICAgICsrY3VycmVudDhfOwotICAgICAgfQotICAgICAgaWYg
KGN1cnJlbnQ4XyA9PSBlbmQ4XykgewotICAgICAgICBjdXJyZW50OF8gPSBiZWdpbjhfOwotICAg
ICAgICArK2N1cnJlbnQ3XzsKLSAgICAgIH0KLSAgICAgIGlmIChjdXJyZW50N18gPT0gZW5kN18p
IHsKLSAgICAgICAgY3VycmVudDdfID0gYmVnaW43XzsKLSAgICAgICAgKytjdXJyZW50Nl87Ci0g
ICAgICB9Ci0gICAgICBpZiAoY3VycmVudDZfID09IGVuZDZfKSB7Ci0gICAgICAgIGN1cnJlbnQ2
XyA9IGJlZ2luNl87Ci0gICAgICAgICsrY3VycmVudDVfOwotICAgICAgfQotICAgICAgaWYgKGN1
cnJlbnQ1XyA9PSBlbmQ1XykgewotICAgICAgICBjdXJyZW50NV8gPSBiZWdpbjVfOwotICAgICAg
ICArK2N1cnJlbnQ0XzsKLSAgICAgIH0KLSAgICAgIGlmIChjdXJyZW50NF8gPT0gZW5kNF8pIHsK
LSAgICAgICAgY3VycmVudDRfID0gYmVnaW40XzsKLSAgICAgICAgKytjdXJyZW50M187Ci0gICAg
ICB9Ci0gICAgICBpZiAoY3VycmVudDNfID09IGVuZDNfKSB7Ci0gICAgICAgIGN1cnJlbnQzXyA9
IGJlZ2luM187Ci0gICAgICAgICsrY3VycmVudDJfOwotICAgICAgfQotICAgICAgaWYgKGN1cnJl
bnQyXyA9PSBlbmQyXykgewotICAgICAgICBjdXJyZW50Ml8gPSBiZWdpbjJfOwotICAgICAgICAr
K2N1cnJlbnQxXzsKLSAgICAgIH0KLSAgICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9
Ci0gICAgdmlydHVhbCBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIENsb25lKCkg
Y29uc3QgewotICAgICAgcmV0dXJuIG5ldyBJdGVyYXRvcigqdGhpcyk7Ci0gICAgfQotICAgIHZp
cnR1YWwgY29uc3QgUGFyYW1UeXBlKiBDdXJyZW50KCkgY29uc3QgeyByZXR1cm4gJmN1cnJlbnRf
dmFsdWVfOyB9Ci0gICAgdmlydHVhbCBib29sIEVxdWFscyhjb25zdCBQYXJhbUl0ZXJhdG9ySW50
ZXJmYWNlPFBhcmFtVHlwZT4mIG90aGVyKSBjb25zdCB7Ci0gICAgICAvLyBIYXZpbmcgdGhlIHNh
bWUgYmFzZSBnZW5lcmF0b3IgZ3VhcmFudGVlcyB0aGF0IHRoZSBvdGhlcgotICAgICAgLy8gaXRl
cmF0b3IgaXMgb2YgdGhlIHNhbWUgdHlwZSBhbmQgd2UgY2FuIGRvd25jYXN0LgotICAgICAgR1RF
U1RfQ0hFQ0tfKEJhc2VHZW5lcmF0b3IoKSA9PSBvdGhlci5CYXNlR2VuZXJhdG9yKCkpCi0gICAg
ICAgICAgPDwgIlRoZSBwcm9ncmFtIGF0dGVtcHRlZCB0byBjb21wYXJlIGl0ZXJhdG9ycyAiCi0g
ICAgICAgICAgPDwgImZyb20gZGlmZmVyZW50IGdlbmVyYXRvcnMuIiA8PCBzdGQ6OmVuZGw7Ci0g
ICAgICBjb25zdCBJdGVyYXRvciogdHlwZWRfb3RoZXIgPQotICAgICAgICAgIENoZWNrZWREb3du
Y2FzdFRvQWN0dWFsVHlwZTxjb25zdCBJdGVyYXRvcj4oJm90aGVyKTsKLSAgICAgIC8vIFdlIG11
c3QgcmVwb3J0IGl0ZXJhdG9ycyBlcXVhbCBpZiB0aGV5IGJvdGggcG9pbnQgYmV5b25kIHRoZWly
Ci0gICAgICAvLyByZXNwZWN0aXZlIHJhbmdlcy4gVGhhdCBjYW4gaGFwcGVuIGluIGEgdmFyaWV0
eSBvZiBmYXNoaW9ucywKLSAgICAgIC8vIHNvIHdlIGhhdmUgdG8gY29uc3VsdCBBdEVuZCgpLgot
ICAgICAgcmV0dXJuIChBdEVuZCgpICYmIHR5cGVkX290aGVyLT5BdEVuZCgpKSB8fAotICAgICAg
ICAgKAotICAgICAgICAgIGN1cnJlbnQxXyA9PSB0eXBlZF9vdGhlci0+Y3VycmVudDFfICYmCi0g
ICAgICAgICAgY3VycmVudDJfID09IHR5cGVkX290aGVyLT5jdXJyZW50Ml8gJiYKLSAgICAgICAg
ICBjdXJyZW50M18gPT0gdHlwZWRfb3RoZXItPmN1cnJlbnQzXyAmJgotICAgICAgICAgIGN1cnJl
bnQ0XyA9PSB0eXBlZF9vdGhlci0+Y3VycmVudDRfICYmCi0gICAgICAgICAgY3VycmVudDVfID09
IHR5cGVkX290aGVyLT5jdXJyZW50NV8gJiYKLSAgICAgICAgICBjdXJyZW50Nl8gPT0gdHlwZWRf
b3RoZXItPmN1cnJlbnQ2XyAmJgotICAgICAgICAgIGN1cnJlbnQ3XyA9PSB0eXBlZF9vdGhlci0+
Y3VycmVudDdfICYmCi0gICAgICAgICAgY3VycmVudDhfID09IHR5cGVkX290aGVyLT5jdXJyZW50
OF8gJiYKLSAgICAgICAgICBjdXJyZW50OV8gPT0gdHlwZWRfb3RoZXItPmN1cnJlbnQ5XyAmJgot
ICAgICAgICAgIGN1cnJlbnQxMF8gPT0gdHlwZWRfb3RoZXItPmN1cnJlbnQxMF8pOwotICAgIH0K
LQotICAgcHJpdmF0ZToKLSAgICBJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgb3RoZXIpCi0gICAg
ICAgIDogYmFzZV8ob3RoZXIuYmFzZV8pLAotICAgICAgICBiZWdpbjFfKG90aGVyLmJlZ2luMV8p
LAotICAgICAgICBlbmQxXyhvdGhlci5lbmQxXyksCi0gICAgICAgIGN1cnJlbnQxXyhvdGhlci5j
dXJyZW50MV8pLAotICAgICAgICBiZWdpbjJfKG90aGVyLmJlZ2luMl8pLAotICAgICAgICBlbmQy
XyhvdGhlci5lbmQyXyksCi0gICAgICAgIGN1cnJlbnQyXyhvdGhlci5jdXJyZW50Ml8pLAotICAg
ICAgICBiZWdpbjNfKG90aGVyLmJlZ2luM18pLAotICAgICAgICBlbmQzXyhvdGhlci5lbmQzXyks
Ci0gICAgICAgIGN1cnJlbnQzXyhvdGhlci5jdXJyZW50M18pLAotICAgICAgICBiZWdpbjRfKG90
aGVyLmJlZ2luNF8pLAotICAgICAgICBlbmQ0XyhvdGhlci5lbmQ0XyksCi0gICAgICAgIGN1cnJl
bnQ0XyhvdGhlci5jdXJyZW50NF8pLAotICAgICAgICBiZWdpbjVfKG90aGVyLmJlZ2luNV8pLAot
ICAgICAgICBlbmQ1XyhvdGhlci5lbmQ1XyksCi0gICAgICAgIGN1cnJlbnQ1XyhvdGhlci5jdXJy
ZW50NV8pLAotICAgICAgICBiZWdpbjZfKG90aGVyLmJlZ2luNl8pLAotICAgICAgICBlbmQ2Xyhv
dGhlci5lbmQ2XyksCi0gICAgICAgIGN1cnJlbnQ2XyhvdGhlci5jdXJyZW50Nl8pLAotICAgICAg
ICBiZWdpbjdfKG90aGVyLmJlZ2luN18pLAotICAgICAgICBlbmQ3XyhvdGhlci5lbmQ3XyksCi0g
ICAgICAgIGN1cnJlbnQ3XyhvdGhlci5jdXJyZW50N18pLAotICAgICAgICBiZWdpbjhfKG90aGVy
LmJlZ2luOF8pLAotICAgICAgICBlbmQ4XyhvdGhlci5lbmQ4XyksCi0gICAgICAgIGN1cnJlbnQ4
XyhvdGhlci5jdXJyZW50OF8pLAotICAgICAgICBiZWdpbjlfKG90aGVyLmJlZ2luOV8pLAotICAg
ICAgICBlbmQ5XyhvdGhlci5lbmQ5XyksCi0gICAgICAgIGN1cnJlbnQ5XyhvdGhlci5jdXJyZW50
OV8pLAotICAgICAgICBiZWdpbjEwXyhvdGhlci5iZWdpbjEwXyksCi0gICAgICAgIGVuZDEwXyhv
dGhlci5lbmQxMF8pLAotICAgICAgICBjdXJyZW50MTBfKG90aGVyLmN1cnJlbnQxMF8pIHsKLSAg
ICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIENvbXB1dGVDdXJy
ZW50VmFsdWUoKSB7Ci0gICAgICBpZiAoIUF0RW5kKCkpCi0gICAgICAgIGN1cnJlbnRfdmFsdWVf
ID0gUGFyYW1UeXBlKCpjdXJyZW50MV8sICpjdXJyZW50Ml8sICpjdXJyZW50M18sCi0gICAgICAg
ICAgICAqY3VycmVudDRfLCAqY3VycmVudDVfLCAqY3VycmVudDZfLCAqY3VycmVudDdfLCAqY3Vy
cmVudDhfLAotICAgICAgICAgICAgKmN1cnJlbnQ5XywgKmN1cnJlbnQxMF8pOwotICAgIH0KLSAg
ICBib29sIEF0RW5kKCkgY29uc3QgewotICAgICAgLy8gV2UgbXVzdCByZXBvcnQgaXRlcmF0b3Ig
cGFzdCB0aGUgZW5kIG9mIHRoZSByYW5nZSB3aGVuIGVpdGhlciBvZiB0aGUKLSAgICAgIC8vIGNv
bXBvbmVudCBpdGVyYXRvcnMgaGFzIHJlYWNoZWQgdGhlIGVuZCBvZiBpdHMgcmFuZ2UuCi0gICAg
ICByZXR1cm4KLSAgICAgICAgICBjdXJyZW50MV8gPT0gZW5kMV8gfHwKLSAgICAgICAgICBjdXJy
ZW50Ml8gPT0gZW5kMl8gfHwKLSAgICAgICAgICBjdXJyZW50M18gPT0gZW5kM18gfHwKLSAgICAg
ICAgICBjdXJyZW50NF8gPT0gZW5kNF8gfHwKLSAgICAgICAgICBjdXJyZW50NV8gPT0gZW5kNV8g
fHwKLSAgICAgICAgICBjdXJyZW50Nl8gPT0gZW5kNl8gfHwKLSAgICAgICAgICBjdXJyZW50N18g
PT0gZW5kN18gfHwKLSAgICAgICAgICBjdXJyZW50OF8gPT0gZW5kOF8gfHwKLSAgICAgICAgICBj
dXJyZW50OV8gPT0gZW5kOV8gfHwKLSAgICAgICAgICBjdXJyZW50MTBfID09IGVuZDEwXzsKLSAg
ICB9Ci0KLSAgICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0
ZWQuCi0gICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgSXRlcmF0b3ImIG90aGVyKTsKLQotICAgIGNv
bnN0IFBhcmFtR2VuZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlwZT4qIGNvbnN0IGJhc2VfOwotICAg
IC8vIGJlZ2luW2ldXyBhbmQgZW5kW2ldXyBkZWZpbmUgdGhlIGktdGggcmFuZ2UgdGhhdCBJdGVy
YXRvciB0cmF2ZXJzZXMuCi0gICAgLy8gY3VycmVudFtpXV8gaXMgdGhlIGFjdHVhbCB0cmF2ZXJz
aW5nIGl0ZXJhdG9yLgotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQxPjo6aXRl
cmF0b3IgYmVnaW4xXzsKLSAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMT46Oml0
ZXJhdG9yIGVuZDFfOwotICAgIHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQxPjo6aXRlcmF0b3Ig
Y3VycmVudDFfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQyPjo6aXRlcmF0
b3IgYmVnaW4yXzsKLSAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMj46Oml0ZXJh
dG9yIGVuZDJfOwotICAgIHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQyPjo6aXRlcmF0b3IgY3Vy
cmVudDJfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQzPjo6aXRlcmF0b3Ig
YmVnaW4zXzsKLSAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUMz46Oml0ZXJhdG9y
IGVuZDNfOwotICAgIHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQzPjo6aXRlcmF0b3IgY3VycmVu
dDNfOwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ0Pjo6aXRlcmF0b3IgYmVn
aW40XzsKLSAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUND46Oml0ZXJhdG9yIGVu
ZDRfOwotICAgIHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ0Pjo6aXRlcmF0b3IgY3VycmVudDRf
OwotICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ1Pjo6aXRlcmF0b3IgYmVnaW41
XzsKLSAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUNT46Oml0ZXJhdG9yIGVuZDVf
OwotICAgIHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ1Pjo6aXRlcmF0b3IgY3VycmVudDVfOwot
ICAgIGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ2Pjo6aXRlcmF0b3IgYmVnaW42XzsK
LSAgICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUNj46Oml0ZXJhdG9yIGVuZDZfOwot
ICAgIHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ2Pjo6aXRlcmF0b3IgY3VycmVudDZfOwotICAg
IGNvbnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ3Pjo6aXRlcmF0b3IgYmVnaW43XzsKLSAg
ICBjb25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUNz46Oml0ZXJhdG9yIGVuZDdfOwotICAg
IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ3Pjo6aXRlcmF0b3IgY3VycmVudDdfOwotICAgIGNv
bnN0IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ4Pjo6aXRlcmF0b3IgYmVnaW44XzsKLSAgICBj
b25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUOD46Oml0ZXJhdG9yIGVuZDhfOwotICAgIHR5
cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ4Pjo6aXRlcmF0b3IgY3VycmVudDhfOwotICAgIGNvbnN0
IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQ5Pjo6aXRlcmF0b3IgYmVnaW45XzsKLSAgICBjb25z
dCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUOT46Oml0ZXJhdG9yIGVuZDlfOwotICAgIHR5cGVu
YW1lIFBhcmFtR2VuZXJhdG9yPFQ5Pjo6aXRlcmF0b3IgY3VycmVudDlfOwotICAgIGNvbnN0IHR5
cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQxMD46Oml0ZXJhdG9yIGJlZ2luMTBfOwotICAgIGNvbnN0
IHR5cGVuYW1lIFBhcmFtR2VuZXJhdG9yPFQxMD46Oml0ZXJhdG9yIGVuZDEwXzsKLSAgICB0eXBl
bmFtZSBQYXJhbUdlbmVyYXRvcjxUMTA+OjppdGVyYXRvciBjdXJyZW50MTBfOwotICAgIFBhcmFt
VHlwZSBjdXJyZW50X3ZhbHVlXzsKLSAgfTsgIC8vIGNsYXNzIENhcnRlc2lhblByb2R1Y3RHZW5l
cmF0b3IxMDo6SXRlcmF0b3IKLQotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQg
aXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IENhcnRlc2lhblByb2R1Y3RH
ZW5lcmF0b3IxMCYgb3RoZXIpOwotCi0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQxPiBnMV87Ci0g
IGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQyPiBnMl87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQz
PiBnM187Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ0PiBnNF87Ci0gIGNvbnN0IFBhcmFtR2Vu
ZXJhdG9yPFQ1PiBnNV87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ2PiBnNl87Ci0gIGNvbnN0
IFBhcmFtR2VuZXJhdG9yPFQ3PiBnN187Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ4PiBnOF87
Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9yPFQ5PiBnOV87Ci0gIGNvbnN0IFBhcmFtR2VuZXJhdG9y
PFQxMD4gZzEwXzsKLX07ICAvLyBjbGFzcyBDYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yMTAKLQot
Ci0vLyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiAtIERPIE5PVCBVU0UgSU4gVVNFUiBDT0RFLgot
Ly8KLS8vIEhlbHBlciBjbGFzc2VzIHByb3ZpZGluZyBDb21iaW5lKCkgd2l0aCBwb2x5bW9ycGhp
YyBmZWF0dXJlcy4gVGhleSBhbGxvdwotLy8gY2FzdGluZyBDYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJh
dG9yTjxUPiB0byBQYXJhbUdlbmVyYXRvcjxVPiBpZiBUIGlzCi0vLyBjb252ZXJ0aWJsZSB0byBV
LgotLy8KLXRlbXBsYXRlIDxjbGFzcyBHZW5lcmF0b3IxLCBjbGFzcyBHZW5lcmF0b3IyPgotY2xh
c3MgQ2FydGVzaWFuUHJvZHVjdEhvbGRlcjIgewotIHB1YmxpYzoKLUNhcnRlc2lhblByb2R1Y3RI
b2xkZXIyKGNvbnN0IEdlbmVyYXRvcjEmIGcxLCBjb25zdCBHZW5lcmF0b3IyJiBnMikKLSAgICAg
IDogZzFfKGcxKSwgZzJfKGcyKSB7fQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1l
IFQyPgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjwgOjp0ZXN0aW5nOjp0dXBsZTxUMSwgVDI+
ID4oKSBjb25zdCB7Ci0gICAgcmV0dXJuIFBhcmFtR2VuZXJhdG9yPCA6OnRlc3Rpbmc6OnR1cGxl
PFQxLCBUMj4gPigKLSAgICAgICAgbmV3IENhcnRlc2lhblByb2R1Y3RHZW5lcmF0b3IyPFQxLCBU
Mj4oCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQxPiA+KGcxXyksCi0gICAg
ICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQyPiA+KGcyXykpKTsKLSAgfQotCi0gcHJp
dmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3VwcG9ydGVk
LgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBDYXJ0ZXNpYW5Qcm9kdWN0SG9sZGVyMiYgb3RoZXIp
OwotCi0gIGNvbnN0IEdlbmVyYXRvcjEgZzFfOwotICBjb25zdCBHZW5lcmF0b3IyIGcyXzsKLX07
ICAvLyBjbGFzcyBDYXJ0ZXNpYW5Qcm9kdWN0SG9sZGVyMgotCi10ZW1wbGF0ZSA8Y2xhc3MgR2Vu
ZXJhdG9yMSwgY2xhc3MgR2VuZXJhdG9yMiwgY2xhc3MgR2VuZXJhdG9yMz4KLWNsYXNzIENhcnRl
c2lhblByb2R1Y3RIb2xkZXIzIHsKLSBwdWJsaWM6Ci1DYXJ0ZXNpYW5Qcm9kdWN0SG9sZGVyMyhj
b25zdCBHZW5lcmF0b3IxJiBnMSwgY29uc3QgR2VuZXJhdG9yMiYgZzIsCi0gICAgY29uc3QgR2Vu
ZXJhdG9yMyYgZzMpCi0gICAgICA6IGcxXyhnMSksIGcyXyhnMiksIGczXyhnMykge30KLSAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDM+Ci0gIG9wZXJhdG9y
IFBhcmFtR2VuZXJhdG9yPCA6OnRlc3Rpbmc6OnR1cGxlPFQxLCBUMiwgVDM+ID4oKSBjb25zdCB7
Ci0gICAgcmV0dXJuIFBhcmFtR2VuZXJhdG9yPCA6OnRlc3Rpbmc6OnR1cGxlPFQxLCBUMiwgVDM+
ID4oCi0gICAgICAgIG5ldyBDYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yMzxUMSwgVDIsIFQzPigK
LSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyYW1HZW5lcmF0b3I8VDE+ID4oZzFfKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8UGFyYW1HZW5lcmF0b3I8VDI+ID4oZzJfKSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8UGFyYW1HZW5lcmF0b3I8VDM+ID4oZzNfKSkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBO
byBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3Bl
cmF0b3I9KGNvbnN0IENhcnRlc2lhblByb2R1Y3RIb2xkZXIzJiBvdGhlcik7Ci0KLSAgY29uc3Qg
R2VuZXJhdG9yMSBnMV87Ci0gIGNvbnN0IEdlbmVyYXRvcjIgZzJfOwotICBjb25zdCBHZW5lcmF0
b3IzIGczXzsKLX07ICAvLyBjbGFzcyBDYXJ0ZXNpYW5Qcm9kdWN0SG9sZGVyMwotCi10ZW1wbGF0
ZSA8Y2xhc3MgR2VuZXJhdG9yMSwgY2xhc3MgR2VuZXJhdG9yMiwgY2xhc3MgR2VuZXJhdG9yMywK
LSAgICBjbGFzcyBHZW5lcmF0b3I0PgotY2xhc3MgQ2FydGVzaWFuUHJvZHVjdEhvbGRlcjQgewot
IHB1YmxpYzoKLUNhcnRlc2lhblByb2R1Y3RIb2xkZXI0KGNvbnN0IEdlbmVyYXRvcjEmIGcxLCBj
b25zdCBHZW5lcmF0b3IyJiBnMiwKLSAgICBjb25zdCBHZW5lcmF0b3IzJiBnMywgY29uc3QgR2Vu
ZXJhdG9yNCYgZzQpCi0gICAgICA6IGcxXyhnMSksIGcyXyhnMiksIGczXyhnMyksIGc0XyhnNCkg
e30KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5
cGVuYW1lIFQ0PgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjwgOjp0ZXN0aW5nOjp0dXBsZTxU
MSwgVDIsIFQzLCBUND4gPigpIGNvbnN0IHsKLSAgICByZXR1cm4gUGFyYW1HZW5lcmF0b3I8IDo6
dGVzdGluZzo6dHVwbGU8VDEsIFQyLCBUMywgVDQ+ID4oCi0gICAgICAgIG5ldyBDYXJ0ZXNpYW5Q
cm9kdWN0R2VuZXJhdG9yNDxUMSwgVDIsIFQzLCBUND4oCi0gICAgICAgIHN0YXRpY19jYXN0PFBh
cmFtR2VuZXJhdG9yPFQxPiA+KGcxXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJh
dG9yPFQyPiA+KGcyXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQzPiA+
KGczXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQ0PiA+KGc0XykpKTsK
LSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlz
IHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBDYXJ0ZXNpYW5Qcm9kdWN0SG9s
ZGVyNCYgb3RoZXIpOwotCi0gIGNvbnN0IEdlbmVyYXRvcjEgZzFfOwotICBjb25zdCBHZW5lcmF0
b3IyIGcyXzsKLSAgY29uc3QgR2VuZXJhdG9yMyBnM187Ci0gIGNvbnN0IEdlbmVyYXRvcjQgZzRf
OwotfTsgIC8vIGNsYXNzIENhcnRlc2lhblByb2R1Y3RIb2xkZXI0Ci0KLXRlbXBsYXRlIDxjbGFz
cyBHZW5lcmF0b3IxLCBjbGFzcyBHZW5lcmF0b3IyLCBjbGFzcyBHZW5lcmF0b3IzLAotICAgIGNs
YXNzIEdlbmVyYXRvcjQsIGNsYXNzIEdlbmVyYXRvcjU+Ci1jbGFzcyBDYXJ0ZXNpYW5Qcm9kdWN0
SG9sZGVyNSB7Ci0gcHVibGljOgotQ2FydGVzaWFuUHJvZHVjdEhvbGRlcjUoY29uc3QgR2VuZXJh
dG9yMSYgZzEsIGNvbnN0IEdlbmVyYXRvcjImIGcyLAotICAgIGNvbnN0IEdlbmVyYXRvcjMmIGcz
LCBjb25zdCBHZW5lcmF0b3I0JiBnNCwgY29uc3QgR2VuZXJhdG9yNSYgZzUpCi0gICAgICA6IGcx
XyhnMSksIGcyXyhnMiksIGczXyhnMyksIGc0XyhnNCksIGc1XyhnNSkge30KLSAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBl
bmFtZSBUNT4KLSAgb3BlcmF0b3IgUGFyYW1HZW5lcmF0b3I8IDo6dGVzdGluZzo6dHVwbGU8VDEs
IFQyLCBUMywgVDQsIFQ1PiA+KCkgY29uc3QgewotICAgIHJldHVybiBQYXJhbUdlbmVyYXRvcjwg
Ojp0ZXN0aW5nOjp0dXBsZTxUMSwgVDIsIFQzLCBUNCwgVDU+ID4oCi0gICAgICAgIG5ldyBDYXJ0
ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yNTxUMSwgVDIsIFQzLCBUNCwgVDU+KAotICAgICAgICBzdGF0
aWNfY2FzdDxQYXJhbUdlbmVyYXRvcjxUMT4gPihnMV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxQ
YXJhbUdlbmVyYXRvcjxUMj4gPihnMl8pLAotICAgICAgICBzdGF0aWNfY2FzdDxQYXJhbUdlbmVy
YXRvcjxUMz4gPihnM18pLAotICAgICAgICBzdGF0aWNfY2FzdDxQYXJhbUdlbmVyYXRvcjxUND4g
PihnNF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxQYXJhbUdlbmVyYXRvcjxUNT4gPihnNV8pKSk7
Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBp
cyB1bnN1cHBvcnRlZC4KLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgQ2FydGVzaWFuUHJvZHVjdEhv
bGRlcjUmIG90aGVyKTsKLQotICBjb25zdCBHZW5lcmF0b3IxIGcxXzsKLSAgY29uc3QgR2VuZXJh
dG9yMiBnMl87Ci0gIGNvbnN0IEdlbmVyYXRvcjMgZzNfOwotICBjb25zdCBHZW5lcmF0b3I0IGc0
XzsKLSAgY29uc3QgR2VuZXJhdG9yNSBnNV87Ci19OyAgLy8gY2xhc3MgQ2FydGVzaWFuUHJvZHVj
dEhvbGRlcjUKLQotdGVtcGxhdGUgPGNsYXNzIEdlbmVyYXRvcjEsIGNsYXNzIEdlbmVyYXRvcjIs
IGNsYXNzIEdlbmVyYXRvcjMsCi0gICAgY2xhc3MgR2VuZXJhdG9yNCwgY2xhc3MgR2VuZXJhdG9y
NSwgY2xhc3MgR2VuZXJhdG9yNj4KLWNsYXNzIENhcnRlc2lhblByb2R1Y3RIb2xkZXI2IHsKLSBw
dWJsaWM6Ci1DYXJ0ZXNpYW5Qcm9kdWN0SG9sZGVyNihjb25zdCBHZW5lcmF0b3IxJiBnMSwgY29u
c3QgR2VuZXJhdG9yMiYgZzIsCi0gICAgY29uc3QgR2VuZXJhdG9yMyYgZzMsIGNvbnN0IEdlbmVy
YXRvcjQmIGc0LCBjb25zdCBHZW5lcmF0b3I1JiBnNSwKLSAgICBjb25zdCBHZW5lcmF0b3I2JiBn
NikKLSAgICAgIDogZzFfKGcxKSwgZzJfKGcyKSwgZzNfKGczKSwgZzRfKGc0KSwgZzVfKGc1KSwg
ZzZfKGc2KSB7fQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFt
ZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgICAgdHlwZW5hbWUgVDY+Ci0gIG9w
ZXJhdG9yIFBhcmFtR2VuZXJhdG9yPCA6OnRlc3Rpbmc6OnR1cGxlPFQxLCBUMiwgVDMsIFQ0LCBU
NSwgVDY+ID4oKSBjb25zdCB7Ci0gICAgcmV0dXJuIFBhcmFtR2VuZXJhdG9yPCA6OnRlc3Rpbmc6
OnR1cGxlPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDY+ID4oCi0gICAgICAgIG5ldyBDYXJ0ZXNpYW5Q
cm9kdWN0R2VuZXJhdG9yNjxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2PigKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8UGFyYW1HZW5lcmF0b3I8VDE+ID4oZzFfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFy
YW1HZW5lcmF0b3I8VDI+ID4oZzJfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyYW1HZW5lcmF0
b3I8VDM+ID4oZzNfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyYW1HZW5lcmF0b3I8VDQ+ID4o
ZzRfKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyYW1HZW5lcmF0b3I8VDU+ID4oZzVfKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8UGFyYW1HZW5lcmF0b3I8VDY+ID4oZzZfKSkpOwotICB9Ci0KLSBw
cml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2lnbm1lbnQgaXMgdW5zdXBwb3J0
ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IENhcnRlc2lhblByb2R1Y3RIb2xkZXI2JiBvdGhl
cik7Ci0KLSAgY29uc3QgR2VuZXJhdG9yMSBnMV87Ci0gIGNvbnN0IEdlbmVyYXRvcjIgZzJfOwot
ICBjb25zdCBHZW5lcmF0b3IzIGczXzsKLSAgY29uc3QgR2VuZXJhdG9yNCBnNF87Ci0gIGNvbnN0
IEdlbmVyYXRvcjUgZzVfOwotICBjb25zdCBHZW5lcmF0b3I2IGc2XzsKLX07ICAvLyBjbGFzcyBD
YXJ0ZXNpYW5Qcm9kdWN0SG9sZGVyNgotCi10ZW1wbGF0ZSA8Y2xhc3MgR2VuZXJhdG9yMSwgY2xh
c3MgR2VuZXJhdG9yMiwgY2xhc3MgR2VuZXJhdG9yMywKLSAgICBjbGFzcyBHZW5lcmF0b3I0LCBj
bGFzcyBHZW5lcmF0b3I1LCBjbGFzcyBHZW5lcmF0b3I2LCBjbGFzcyBHZW5lcmF0b3I3PgotY2xh
c3MgQ2FydGVzaWFuUHJvZHVjdEhvbGRlcjcgewotIHB1YmxpYzoKLUNhcnRlc2lhblByb2R1Y3RI
b2xkZXI3KGNvbnN0IEdlbmVyYXRvcjEmIGcxLCBjb25zdCBHZW5lcmF0b3IyJiBnMiwKLSAgICBj
b25zdCBHZW5lcmF0b3IzJiBnMywgY29uc3QgR2VuZXJhdG9yNCYgZzQsIGNvbnN0IEdlbmVyYXRv
cjUmIGc1LAotICAgIGNvbnN0IEdlbmVyYXRvcjYmIGc2LCBjb25zdCBHZW5lcmF0b3I3JiBnNykK
LSAgICAgIDogZzFfKGcxKSwgZzJfKGcyKSwgZzNfKGczKSwgZzRfKGc0KSwgZzVfKGc1KSwgZzZf
KGc2KSwgZzdfKGc3KSB7fQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0
eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgICAgdHlwZW5hbWUgVDYs
IHR5cGVuYW1lIFQ3PgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjwgOjp0ZXN0aW5nOjp0dXBs
ZTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LAotICAgICAgVDc+ID4oKSBjb25zdCB7Ci0gICAgcmV0
dXJuIFBhcmFtR2VuZXJhdG9yPCA6OnRlc3Rpbmc6OnR1cGxlPFQxLCBUMiwgVDMsIFQ0LCBUNSwg
VDYsIFQ3PiA+KAotICAgICAgICBuZXcgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjc8VDEsIFQy
LCBUMywgVDQsIFQ1LCBUNiwgVDc+KAotICAgICAgICBzdGF0aWNfY2FzdDxQYXJhbUdlbmVyYXRv
cjxUMT4gPihnMV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxQYXJhbUdlbmVyYXRvcjxUMj4gPihn
Ml8pLAotICAgICAgICBzdGF0aWNfY2FzdDxQYXJhbUdlbmVyYXRvcjxUMz4gPihnM18pLAotICAg
ICAgICBzdGF0aWNfY2FzdDxQYXJhbUdlbmVyYXRvcjxUND4gPihnNF8pLAotICAgICAgICBzdGF0
aWNfY2FzdDxQYXJhbUdlbmVyYXRvcjxUNT4gPihnNV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxQ
YXJhbUdlbmVyYXRvcjxUNj4gPihnNl8pLAotICAgICAgICBzdGF0aWNfY2FzdDxQYXJhbUdlbmVy
YXRvcjxUNz4gPihnN18pKSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIE5vIGltcGxlbWVudGF0
aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgdm9pZCBvcGVyYXRvcj0oY29uc3Qg
Q2FydGVzaWFuUHJvZHVjdEhvbGRlcjcmIG90aGVyKTsKLQotICBjb25zdCBHZW5lcmF0b3IxIGcx
XzsKLSAgY29uc3QgR2VuZXJhdG9yMiBnMl87Ci0gIGNvbnN0IEdlbmVyYXRvcjMgZzNfOwotICBj
b25zdCBHZW5lcmF0b3I0IGc0XzsKLSAgY29uc3QgR2VuZXJhdG9yNSBnNV87Ci0gIGNvbnN0IEdl
bmVyYXRvcjYgZzZfOwotICBjb25zdCBHZW5lcmF0b3I3IGc3XzsKLX07ICAvLyBjbGFzcyBDYXJ0
ZXNpYW5Qcm9kdWN0SG9sZGVyNwotCi10ZW1wbGF0ZSA8Y2xhc3MgR2VuZXJhdG9yMSwgY2xhc3Mg
R2VuZXJhdG9yMiwgY2xhc3MgR2VuZXJhdG9yMywKLSAgICBjbGFzcyBHZW5lcmF0b3I0LCBjbGFz
cyBHZW5lcmF0b3I1LCBjbGFzcyBHZW5lcmF0b3I2LCBjbGFzcyBHZW5lcmF0b3I3LAotICAgIGNs
YXNzIEdlbmVyYXRvcjg+Ci1jbGFzcyBDYXJ0ZXNpYW5Qcm9kdWN0SG9sZGVyOCB7Ci0gcHVibGlj
OgotQ2FydGVzaWFuUHJvZHVjdEhvbGRlcjgoY29uc3QgR2VuZXJhdG9yMSYgZzEsIGNvbnN0IEdl
bmVyYXRvcjImIGcyLAotICAgIGNvbnN0IEdlbmVyYXRvcjMmIGczLCBjb25zdCBHZW5lcmF0b3I0
JiBnNCwgY29uc3QgR2VuZXJhdG9yNSYgZzUsCi0gICAgY29uc3QgR2VuZXJhdG9yNiYgZzYsIGNv
bnN0IEdlbmVyYXRvcjcmIGc3LCBjb25zdCBHZW5lcmF0b3I4JiBnOCkKLSAgICAgIDogZzFfKGcx
KSwgZzJfKGcyKSwgZzNfKGczKSwgZzRfKGc0KSwgZzVfKGc1KSwgZzZfKGc2KSwgZzdfKGc3KSwK
LSAgICAgICAgICBnOF8oZzgpIHt9Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUg
VDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgICB0eXBlbmFt
ZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4PgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRv
cjwgOjp0ZXN0aW5nOjp0dXBsZTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywKLSAgICAgIFQ4
PiA+KCkgY29uc3QgewotICAgIHJldHVybiBQYXJhbUdlbmVyYXRvcjwgOjp0ZXN0aW5nOjp0dXBs
ZTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDg+ID4oCi0gICAgICAgIG5ldyBDYXJ0ZXNp
YW5Qcm9kdWN0R2VuZXJhdG9yODxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDg+KAotICAg
ICAgICBzdGF0aWNfY2FzdDxQYXJhbUdlbmVyYXRvcjxUMT4gPihnMV8pLAotICAgICAgICBzdGF0
aWNfY2FzdDxQYXJhbUdlbmVyYXRvcjxUMj4gPihnMl8pLAotICAgICAgICBzdGF0aWNfY2FzdDxQ
YXJhbUdlbmVyYXRvcjxUMz4gPihnM18pLAotICAgICAgICBzdGF0aWNfY2FzdDxQYXJhbUdlbmVy
YXRvcjxUND4gPihnNF8pLAotICAgICAgICBzdGF0aWNfY2FzdDxQYXJhbUdlbmVyYXRvcjxUNT4g
PihnNV8pLAotICAgICAgICBzdGF0aWNfY2FzdDxQYXJhbUdlbmVyYXRvcjxUNj4gPihnNl8pLAot
ICAgICAgICBzdGF0aWNfY2FzdDxQYXJhbUdlbmVyYXRvcjxUNz4gPihnN18pLAotICAgICAgICBz
dGF0aWNfY2FzdDxQYXJhbUdlbmVyYXRvcjxUOD4gPihnOF8pKSk7Ci0gIH0KLQotIHByaXZhdGU6
Ci0gIC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAg
dm9pZCBvcGVyYXRvcj0oY29uc3QgQ2FydGVzaWFuUHJvZHVjdEhvbGRlcjgmIG90aGVyKTsKLQot
ICBjb25zdCBHZW5lcmF0b3IxIGcxXzsKLSAgY29uc3QgR2VuZXJhdG9yMiBnMl87Ci0gIGNvbnN0
IEdlbmVyYXRvcjMgZzNfOwotICBjb25zdCBHZW5lcmF0b3I0IGc0XzsKLSAgY29uc3QgR2VuZXJh
dG9yNSBnNV87Ci0gIGNvbnN0IEdlbmVyYXRvcjYgZzZfOwotICBjb25zdCBHZW5lcmF0b3I3IGc3
XzsKLSAgY29uc3QgR2VuZXJhdG9yOCBnOF87Ci19OyAgLy8gY2xhc3MgQ2FydGVzaWFuUHJvZHVj
dEhvbGRlcjgKLQotdGVtcGxhdGUgPGNsYXNzIEdlbmVyYXRvcjEsIGNsYXNzIEdlbmVyYXRvcjIs
IGNsYXNzIEdlbmVyYXRvcjMsCi0gICAgY2xhc3MgR2VuZXJhdG9yNCwgY2xhc3MgR2VuZXJhdG9y
NSwgY2xhc3MgR2VuZXJhdG9yNiwgY2xhc3MgR2VuZXJhdG9yNywKLSAgICBjbGFzcyBHZW5lcmF0
b3I4LCBjbGFzcyBHZW5lcmF0b3I5PgotY2xhc3MgQ2FydGVzaWFuUHJvZHVjdEhvbGRlcjkgewot
IHB1YmxpYzoKLUNhcnRlc2lhblByb2R1Y3RIb2xkZXI5KGNvbnN0IEdlbmVyYXRvcjEmIGcxLCBj
b25zdCBHZW5lcmF0b3IyJiBnMiwKLSAgICBjb25zdCBHZW5lcmF0b3IzJiBnMywgY29uc3QgR2Vu
ZXJhdG9yNCYgZzQsIGNvbnN0IEdlbmVyYXRvcjUmIGc1LAotICAgIGNvbnN0IEdlbmVyYXRvcjYm
IGc2LCBjb25zdCBHZW5lcmF0b3I3JiBnNywgY29uc3QgR2VuZXJhdG9yOCYgZzgsCi0gICAgY29u
c3QgR2VuZXJhdG9yOSYgZzkpCi0gICAgICA6IGcxXyhnMSksIGcyXyhnMiksIGczXyhnMyksIGc0
XyhnNCksIGc1XyhnNSksIGc2XyhnNiksIGc3XyhnNyksIGc4XyhnOCksCi0gICAgICAgICAgZzlf
KGc5KSB7fQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBU
MywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1l
IFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDk+Ci0gIG9wZXJhdG9yIFBhcmFtR2VuZXJhdG9y
PCA6OnRlc3Rpbmc6OnR1cGxlPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwKLSAgICAg
IFQ5PiA+KCkgY29uc3QgewotICAgIHJldHVybiBQYXJhbUdlbmVyYXRvcjwgOjp0ZXN0aW5nOjp0
dXBsZTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsCi0gICAgICAgIFQ5PiA+KAotICAg
ICAgICBuZXcgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvcjk8VDEsIFQyLCBUMywgVDQsIFQ1LCBU
NiwgVDcsIFQ4LCBUOT4oCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQxPiA+
KGcxXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQyPiA+KGcyXyksCi0g
ICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQzPiA+KGczXyksCi0gICAgICAgIHN0
YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQ0PiA+KGc0XyksCi0gICAgICAgIHN0YXRpY19jYXN0
PFBhcmFtR2VuZXJhdG9yPFQ1PiA+KGc1XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2Vu
ZXJhdG9yPFQ2PiA+KGc2XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQ3
PiA+KGc3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQ4PiA+KGc4Xyks
Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQ5PiA+KGc5XykpKTsKLSAgfQot
Ci0gcHJpdmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlzIHVuc3Vw
cG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBDYXJ0ZXNpYW5Qcm9kdWN0SG9sZGVyOSYg
b3RoZXIpOwotCi0gIGNvbnN0IEdlbmVyYXRvcjEgZzFfOwotICBjb25zdCBHZW5lcmF0b3IyIGcy
XzsKLSAgY29uc3QgR2VuZXJhdG9yMyBnM187Ci0gIGNvbnN0IEdlbmVyYXRvcjQgZzRfOwotICBj
b25zdCBHZW5lcmF0b3I1IGc1XzsKLSAgY29uc3QgR2VuZXJhdG9yNiBnNl87Ci0gIGNvbnN0IEdl
bmVyYXRvcjcgZzdfOwotICBjb25zdCBHZW5lcmF0b3I4IGc4XzsKLSAgY29uc3QgR2VuZXJhdG9y
OSBnOV87Ci19OyAgLy8gY2xhc3MgQ2FydGVzaWFuUHJvZHVjdEhvbGRlcjkKLQotdGVtcGxhdGUg
PGNsYXNzIEdlbmVyYXRvcjEsIGNsYXNzIEdlbmVyYXRvcjIsIGNsYXNzIEdlbmVyYXRvcjMsCi0g
ICAgY2xhc3MgR2VuZXJhdG9yNCwgY2xhc3MgR2VuZXJhdG9yNSwgY2xhc3MgR2VuZXJhdG9yNiwg
Y2xhc3MgR2VuZXJhdG9yNywKLSAgICBjbGFzcyBHZW5lcmF0b3I4LCBjbGFzcyBHZW5lcmF0b3I5
LCBjbGFzcyBHZW5lcmF0b3IxMD4KLWNsYXNzIENhcnRlc2lhblByb2R1Y3RIb2xkZXIxMCB7Ci0g
cHVibGljOgotQ2FydGVzaWFuUHJvZHVjdEhvbGRlcjEwKGNvbnN0IEdlbmVyYXRvcjEmIGcxLCBj
b25zdCBHZW5lcmF0b3IyJiBnMiwKLSAgICBjb25zdCBHZW5lcmF0b3IzJiBnMywgY29uc3QgR2Vu
ZXJhdG9yNCYgZzQsIGNvbnN0IEdlbmVyYXRvcjUmIGc1LAotICAgIGNvbnN0IEdlbmVyYXRvcjYm
IGc2LCBjb25zdCBHZW5lcmF0b3I3JiBnNywgY29uc3QgR2VuZXJhdG9yOCYgZzgsCi0gICAgY29u
c3QgR2VuZXJhdG9yOSYgZzksIGNvbnN0IEdlbmVyYXRvcjEwJiBnMTApCi0gICAgICA6IGcxXyhn
MSksIGcyXyhnMiksIGczXyhnMyksIGc0XyhnNCksIGc1XyhnNSksIGc2XyhnNiksIGc3XyhnNyks
IGc4XyhnOCksCi0gICAgICAgICAgZzlfKGc5KSwgZzEwXyhnMTApIHt9Ci0gIHRlbXBsYXRlIDx0
eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5h
bWUgVDUsCi0gICAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBl
bmFtZSBUOSwgdHlwZW5hbWUgVDEwPgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjwgOjp0ZXN0
aW5nOjp0dXBsZTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LAotICAgICAgVDEw
PiA+KCkgY29uc3QgewotICAgIHJldHVybiBQYXJhbUdlbmVyYXRvcjwgOjp0ZXN0aW5nOjp0dXBs
ZTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LAotICAgICAgICBUMTA+ID4oCi0g
ICAgICAgIG5ldyBDYXJ0ZXNpYW5Qcm9kdWN0R2VuZXJhdG9yMTA8VDEsIFQyLCBUMywgVDQsIFQ1
LCBUNiwgVDcsIFQ4LCBUOSwKLSAgICAgICAgICAgIFQxMD4oCi0gICAgICAgIHN0YXRpY19jYXN0
PFBhcmFtR2VuZXJhdG9yPFQxPiA+KGcxXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2Vu
ZXJhdG9yPFQyPiA+KGcyXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQz
PiA+KGczXyksCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQ0PiA+KGc0Xyks
Ci0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQ1PiA+KGc1XyksCi0gICAgICAg
IHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQ2PiA+KGc2XyksCi0gICAgICAgIHN0YXRpY19j
YXN0PFBhcmFtR2VuZXJhdG9yPFQ3PiA+KGc3XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFt
R2VuZXJhdG9yPFQ4PiA+KGc4XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9y
PFQ5PiA+KGc5XyksCi0gICAgICAgIHN0YXRpY19jYXN0PFBhcmFtR2VuZXJhdG9yPFQxMD4gPihn
MTBfKSkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBObyBpbXBsZW1lbnRhdGlvbiAtIGFzc2ln
bm1lbnQgaXMgdW5zdXBwb3J0ZWQuCi0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IENhcnRlc2lhblBy
b2R1Y3RIb2xkZXIxMCYgb3RoZXIpOwotCi0gIGNvbnN0IEdlbmVyYXRvcjEgZzFfOwotICBjb25z
dCBHZW5lcmF0b3IyIGcyXzsKLSAgY29uc3QgR2VuZXJhdG9yMyBnM187Ci0gIGNvbnN0IEdlbmVy
YXRvcjQgZzRfOwotICBjb25zdCBHZW5lcmF0b3I1IGc1XzsKLSAgY29uc3QgR2VuZXJhdG9yNiBn
Nl87Ci0gIGNvbnN0IEdlbmVyYXRvcjcgZzdfOwotICBjb25zdCBHZW5lcmF0b3I4IGc4XzsKLSAg
Y29uc3QgR2VuZXJhdG9yOSBnOV87Ci0gIGNvbnN0IEdlbmVyYXRvcjEwIGcxMF87Ci19OyAgLy8g
Y2xhc3MgQ2FydGVzaWFuUHJvZHVjdEhvbGRlcjEwCi0KLSMgZW5kaWYgIC8vIEdURVNUX0hBU19D
T01CSU5FCi0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHRlc3Rp
bmcKLQotI2VuZGlmICAvLyAgR1RFU1RfSEFTX1BBUkFNX1RFU1QKLQotI2VuZGlmICAvLyBHVEVT
VF9JTkNMVURFX0dURVNUX0lOVEVSTkFMX0dURVNUX1BBUkFNX1VUSUxfR0VORVJBVEVEX0hfCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29n
bGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtcGFyYW0tdXRpbC1nZW5lcmF0ZWQu
aC5wdW1wIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xl
dGVzdC9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2d0ZXN0LXBhcmFtLXV0aWwtZ2VuZXJhdGVkLmgu
cHVtcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM3YzQ3YWYwYmIxZTg4OTg0OTJl
MDU0MjVlNDAzOTdhNGQxMmY2YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29n
bGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtcGFyYW0tdXRpbC1nZW5lcmF0ZWQu
aC5wdW1wCisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLSQkIC0qLSBtb2RlOiBjKys7
IC0qLQotJHZhciBuID0gNTAgICQkIE1heGltdW0gbGVuZ3RoIG9mIFZhbHVlcyBhcmd1bWVudHMg
d2Ugd2FudCB0byBzdXBwb3J0LgotJHZhciBtYXh0dXBsZSA9IDEwICAkJCBNYXhpbXVtIG51bWJl
ciBvZiBDb21iaW5lIGFyZ3VtZW50cyB3ZSB3YW50IHRvIHN1cHBvcnQuCi0vLyBDb3B5cmlnaHQg
MjAwOCBHb29nbGUgSW5jLgotLy8gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgot
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLS8vCi0vLyBBdXRob3I6IHZsYWRsQGdvb2ds
ZS5jb20gKFZsYWQgTG9zZXYpCi0KLS8vIFR5cGUgYW5kIGZ1bmN0aW9uIHV0aWxpdGllcyBmb3Ig
aW1wbGVtZW50aW5nIHBhcmFtZXRlcml6ZWQgdGVzdHMuCi0vLyBUaGlzIGZpbGUgaXMgZ2VuZXJh
dGVkIGJ5IGEgU0NSSVBULiAgRE8gTk9UIEVESVQgQlkgSEFORCEKLS8vCi0vLyBDdXJyZW50bHkg
R29vZ2xlIFRlc3Qgc3VwcG9ydHMgYXQgbW9zdCAkbiBhcmd1bWVudHMgaW4gVmFsdWVzLAotLy8g
YW5kIGF0IG1vc3QgJG1heHR1cGxlIGFyZ3VtZW50cyBpbiBDb21iaW5lLiBQbGVhc2UgY29udGFj
dAotLy8gZ29vZ2xldGVzdGZyYW1ld29ya0Bnb29nbGVncm91cHMuY29tIGlmIHlvdSBuZWVkIG1v
cmUuCi0vLyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIENvbWJp
bmUgaXMgbGltaXRlZAotLy8gYnkgdGhlIG1heGltdW0gYXJpdHkgb2YgdGhlIGltcGxlbWVudGF0
aW9uIG9mIHR1cGxlIHdoaWNoIGlzCi0vLyBjdXJyZW50bHkgc2V0IGF0ICRtYXh0dXBsZS4KLQot
I2lmbmRlZiBHVEVTVF9JTkNMVURFX0dURVNUX0lOVEVSTkFMX0dURVNUX1BBUkFNX1VUSUxfR0VO
RVJBVEVEX0hfCi0jZGVmaW5lIEdURVNUX0lOQ0xVREVfR1RFU1RfSU5URVJOQUxfR1RFU1RfUEFS
QU1fVVRJTF9HRU5FUkFURURfSF8KLQotLy8gc2NyaXB0cy9mdXNlX2d0ZXN0LnB5IGRlcGVuZHMg
b24gZ3Rlc3QncyBvd24gaGVhZGVyIGJlaW5nICNpbmNsdWRlZAotLy8gKnVuY29uZGl0aW9uYWxs
eSouICBUaGVyZWZvcmUgdGhlc2UgI2luY2x1ZGVzIGNhbm5vdCBiZSBtb3ZlZAotLy8gaW5zaWRl
ICNpZiBHVEVTVF9IQVNfUEFSQU1fVEVTVC4KLSNpbmNsdWRlICJndGVzdC9pbnRlcm5hbC9ndGVz
dC1wYXJhbS11dGlsLmgiCi0jaW5jbHVkZSAiZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtcG9ydC5oIgot
Ci0jaWYgR1RFU1RfSEFTX1BBUkFNX1RFU1QKLQotbmFtZXNwYWNlIHRlc3RpbmcgewotCi0vLyBG
b3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBWYWx1ZXNJbigpLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBp
bgotLy8gaW5jbHVkZS9ndGVzdC9ndGVzdC1wYXJhbS10ZXN0LmguCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgRm9yd2FyZEl0ZXJhdG9yPgotaW50ZXJuYWw6OlBhcmFtR2VuZXJhdG9yPAotICB0eXBlbmFt
ZSA6OnRlc3Rpbmc6OmludGVybmFsOjpJdGVyYXRvclRyYWl0czxGb3J3YXJkSXRlcmF0b3I+Ojp2
YWx1ZV90eXBlPgotVmFsdWVzSW4oRm9yd2FyZEl0ZXJhdG9yIGJlZ2luLCBGb3J3YXJkSXRlcmF0
b3IgZW5kKTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgotaW50ZXJuYWw6OlBh
cmFtR2VuZXJhdG9yPFQ+IFZhbHVlc0luKGNvbnN0IFQgKCZhcnJheSlbTl0pOwotCi10ZW1wbGF0
ZSA8Y2xhc3MgQ29udGFpbmVyPgotaW50ZXJuYWw6OlBhcmFtR2VuZXJhdG9yPHR5cGVuYW1lIENv
bnRhaW5lcjo6dmFsdWVfdHlwZT4gVmFsdWVzSW4oCi0gICAgY29uc3QgQ29udGFpbmVyJiBjb250
YWluZXIpOwotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi0vLyBVc2VkIGluIHRoZSBWYWx1ZXMo
KSBmdW5jdGlvbiB0byBwcm92aWRlIHBvbHltb3JwaGljIGNhcGFiaWxpdGllcy4KLSRyYW5nZSBp
IDEuLm4KLSRmb3IgaSBbWwotJHJhbmdlIGogMS4uaQotCi10ZW1wbGF0ZSA8JGZvciBqLCBbW3R5
cGVuYW1lIFQkal1dPgotY2xhc3MgVmFsdWVBcnJheSRpIHsKLSBwdWJsaWM6Ci0gICRpZiBpPT0x
IFtbZXhwbGljaXQgXV1WYWx1ZUFycmF5JGkoJGZvciBqLCBbW1QkaiB2JGpdXSkgOiAkZm9yIGos
IFtbdiQoailfKHYkaildXSB7fQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBvcGVyYXRv
ciBQYXJhbUdlbmVyYXRvcjxUPigpIGNvbnN0IHsKLSAgICBjb25zdCBUIGFycmF5W10gPSB7JGZv
ciBqLCBbW3N0YXRpY19jYXN0PFQ+KHYkKGopXyldXX07Ci0gICAgcmV0dXJuIFZhbHVlc0luKGFy
cmF5KTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25t
ZW50IGlzIHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1ZUFycmF5JGkm
IG90aGVyKTsKLQotJGZvciBqIFtbCi0KLSAgY29uc3QgVCRqIHYkKGopXzsKLV1dCi0KLX07Ci0K
LV1dCi0KLSMgaWYgR1RFU1RfSEFTX0NPTUJJTkUKLS8vIElOVEVSTkFMIElNUExFTUVOVEFUSU9O
IC0gRE8gTk9UIFVTRSBJTiBVU0VSIENPREUuCi0vLwotLy8gR2VuZXJhdGVzIHZhbHVlcyBmcm9t
IHRoZSBDYXJ0ZXNpYW4gcHJvZHVjdCBvZiB2YWx1ZXMgcHJvZHVjZWQKLS8vIGJ5IHRoZSBhcmd1
bWVudCBnZW5lcmF0b3JzLgotLy8KLSRyYW5nZSBpIDIuLm1heHR1cGxlCi0kZm9yIGkgW1sKLSRy
YW5nZSBqIDEuLmkKLSRyYW5nZSBrIDIuLmkKLQotdGVtcGxhdGUgPCRmb3IgaiwgW1t0eXBlbmFt
ZSBUJGpdXT4KLWNsYXNzIENhcnRlc2lhblByb2R1Y3RHZW5lcmF0b3IkaQotICAgIDogcHVibGlj
IFBhcmFtR2VuZXJhdG9ySW50ZXJmYWNlPCA6OnRlc3Rpbmc6OnR1cGxlPCRmb3IgaiwgW1tUJGpd
XT4gPiB7Ci0gcHVibGljOgotICB0eXBlZGVmIDo6dGVzdGluZzo6dHVwbGU8JGZvciBqLCBbW1Qk
al1dPiBQYXJhbVR5cGU7Ci0KLSAgQ2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvciRpKCRmb3Igaiwg
W1tjb25zdCBQYXJhbUdlbmVyYXRvcjxUJGo+JiBnJGpdXSkKLSAgICAgIDogJGZvciBqLCBbW2ck
KGopXyhnJGopXV0ge30KLSAgdmlydHVhbCB+Q2FydGVzaWFuUHJvZHVjdEdlbmVyYXRvciRpKCkg
e30KLQotICB2aXJ0dWFsIFBhcmFtSXRlcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiogQmVnaW4o
KSBjb25zdCB7Ci0gICAgcmV0dXJuIG5ldyBJdGVyYXRvcih0aGlzLCAkZm9yIGosIFtbZyQoailf
LCBnJChqKV8uYmVnaW4oKV1dKTsKLSAgfQotICB2aXJ0dWFsIFBhcmFtSXRlcmF0b3JJbnRlcmZh
Y2U8UGFyYW1UeXBlPiogRW5kKCkgY29uc3QgewotICAgIHJldHVybiBuZXcgSXRlcmF0b3IodGhp
cywgJGZvciBqLCBbW2ckKGopXywgZyQoailfLmVuZCgpXV0pOwotICB9Ci0KLSBwcml2YXRlOgot
ICBjbGFzcyBJdGVyYXRvciA6IHB1YmxpYyBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFBhcmFtVHlw
ZT4gewotICAgcHVibGljOgotICAgIEl0ZXJhdG9yKGNvbnN0IFBhcmFtR2VuZXJhdG9ySW50ZXJm
YWNlPFBhcmFtVHlwZT4qIGJhc2UsICRmb3IgaiwgW1sKLQotICAgICAgY29uc3QgUGFyYW1HZW5l
cmF0b3I8VCRqPiYgZyRqLAotICAgICAgY29uc3QgdHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VCRq
Pjo6aXRlcmF0b3ImIGN1cnJlbnQkKGopXV0pCi0gICAgICAgIDogYmFzZV8oYmFzZSksCi0kZm9y
IGosIFtbCi0KLSAgICAgICAgICBiZWdpbiQoailfKGckai5iZWdpbigpKSwgZW5kJChqKV8oZyRq
LmVuZCgpKSwgY3VycmVudCQoailfKGN1cnJlbnQkaikKLV1dICAgIHsKLSAgICAgIENvbXB1dGVD
dXJyZW50VmFsdWUoKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+SXRlcmF0b3IoKSB7fQotCi0gICAg
dmlydHVhbCBjb25zdCBQYXJhbUdlbmVyYXRvckludGVyZmFjZTxQYXJhbVR5cGU+KiBCYXNlR2Vu
ZXJhdG9yKCkgY29uc3QgewotICAgICAgcmV0dXJuIGJhc2VfOwotICAgIH0KLSAgICAvLyBBZHZh
bmNlIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uIGJleW9uZC1vZi1yYW5nZSBpdGVyYXRvcnMKLSAg
ICAvLyBzbyBubyBjb21wb25lbnQgaXRlcmF0b3JzIG11c3QgYmUgYmV5b25kIGVuZCBvZiByYW5n
ZSwgZWl0aGVyLgotICAgIHZpcnR1YWwgdm9pZCBBZHZhbmNlKCkgewotICAgICAgYXNzZXJ0KCFB
dEVuZCgpKTsKLSAgICAgICsrY3VycmVudCQoaSlfOwotCi0kZm9yIGsgW1sKLSAgICAgIGlmIChj
dXJyZW50JChpKzItaylfID09IGVuZCQoaSsyLWspXykgewotICAgICAgICBjdXJyZW50JChpKzIt
aylfID0gYmVnaW4kKGkrMi1rKV87Ci0gICAgICAgICsrY3VycmVudCQoaSsyLWstMSlfOwotICAg
ICAgfQotCi1dXQotICAgICAgQ29tcHV0ZUN1cnJlbnRWYWx1ZSgpOwotICAgIH0KLSAgICB2aXJ0
dWFsIFBhcmFtSXRlcmF0b3JJbnRlcmZhY2U8UGFyYW1UeXBlPiogQ2xvbmUoKSBjb25zdCB7Ci0g
ICAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKCp0aGlzKTsKLSAgICB9Ci0gICAgdmlydHVhbCBjb25z
dCBQYXJhbVR5cGUqIEN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAmY3VycmVudF92YWx1ZV87IH0K
LSAgICB2aXJ0dWFsIGJvb2wgRXF1YWxzKGNvbnN0IFBhcmFtSXRlcmF0b3JJbnRlcmZhY2U8UGFy
YW1UeXBlPiYgb3RoZXIpIGNvbnN0IHsKLSAgICAgIC8vIEhhdmluZyB0aGUgc2FtZSBiYXNlIGdl
bmVyYXRvciBndWFyYW50ZWVzIHRoYXQgdGhlIG90aGVyCi0gICAgICAvLyBpdGVyYXRvciBpcyBv
ZiB0aGUgc2FtZSB0eXBlIGFuZCB3ZSBjYW4gZG93bmNhc3QuCi0gICAgICBHVEVTVF9DSEVDS18o
QmFzZUdlbmVyYXRvcigpID09IG90aGVyLkJhc2VHZW5lcmF0b3IoKSkKLSAgICAgICAgICA8PCAi
VGhlIHByb2dyYW0gYXR0ZW1wdGVkIHRvIGNvbXBhcmUgaXRlcmF0b3JzICIKLSAgICAgICAgICA8
PCAiZnJvbSBkaWZmZXJlbnQgZ2VuZXJhdG9ycy4iIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIGNvbnN0
IEl0ZXJhdG9yKiB0eXBlZF9vdGhlciA9Ci0gICAgICAgICAgQ2hlY2tlZERvd25jYXN0VG9BY3R1
YWxUeXBlPGNvbnN0IEl0ZXJhdG9yPigmb3RoZXIpOwotICAgICAgLy8gV2UgbXVzdCByZXBvcnQg
aXRlcmF0b3JzIGVxdWFsIGlmIHRoZXkgYm90aCBwb2ludCBiZXlvbmQgdGhlaXIKLSAgICAgIC8v
IHJlc3BlY3RpdmUgcmFuZ2VzLiBUaGF0IGNhbiBoYXBwZW4gaW4gYSB2YXJpZXR5IG9mIGZhc2hp
b25zLAotICAgICAgLy8gc28gd2UgaGF2ZSB0byBjb25zdWx0IEF0RW5kKCkuCi0gICAgICByZXR1
cm4gKEF0RW5kKCkgJiYgdHlwZWRfb3RoZXItPkF0RW5kKCkpIHx8Ci0gICAgICAgICAoJGZvciBq
ICAmJiBbWwotCi0gICAgICAgICAgY3VycmVudCQoailfID09IHR5cGVkX290aGVyLT5jdXJyZW50
JChqKV8KLV1dKTsKLSAgICB9Ci0KLSAgIHByaXZhdGU6Ci0gICAgSXRlcmF0b3IoY29uc3QgSXRl
cmF0b3ImIG90aGVyKQotICAgICAgICA6IGJhc2VfKG90aGVyLmJhc2VfKSwgJGZvciBqLCBbWwot
Ci0gICAgICAgIGJlZ2luJChqKV8ob3RoZXIuYmVnaW4kKGopXyksCi0gICAgICAgIGVuZCQoailf
KG90aGVyLmVuZCQoailfKSwKLSAgICAgICAgY3VycmVudCQoailfKG90aGVyLmN1cnJlbnQkKGop
XykKLV1dIHsKLSAgICAgIENvbXB1dGVDdXJyZW50VmFsdWUoKTsKLSAgICB9Ci0KLSAgICB2b2lk
IENvbXB1dGVDdXJyZW50VmFsdWUoKSB7Ci0gICAgICBpZiAoIUF0RW5kKCkpCi0gICAgICAgIGN1
cnJlbnRfdmFsdWVfID0gUGFyYW1UeXBlKCRmb3IgaiwgW1sqY3VycmVudCQoailfXV0pOwotICAg
IH0KLSAgICBib29sIEF0RW5kKCkgY29uc3QgewotICAgICAgLy8gV2UgbXVzdCByZXBvcnQgaXRl
cmF0b3IgcGFzdCB0aGUgZW5kIG9mIHRoZSByYW5nZSB3aGVuIGVpdGhlciBvZiB0aGUKLSAgICAg
IC8vIGNvbXBvbmVudCBpdGVyYXRvcnMgaGFzIHJlYWNoZWQgdGhlIGVuZCBvZiBpdHMgcmFuZ2Uu
Ci0gICAgICByZXR1cm4KLSRmb3IgaiAgfHwgW1sKLQotICAgICAgICAgIGN1cnJlbnQkKGopXyA9
PSBlbmQkKGopXwotXV07Ci0gICAgfQotCi0gICAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3Np
Z25tZW50IGlzIHVuc3VwcG9ydGVkLgotICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEl0ZXJhdG9y
JiBvdGhlcik7Ci0KLSAgICBjb25zdCBQYXJhbUdlbmVyYXRvckludGVyZmFjZTxQYXJhbVR5cGU+
KiBjb25zdCBiYXNlXzsKLSAgICAvLyBiZWdpbltpXV8gYW5kIGVuZFtpXV8gZGVmaW5lIHRoZSBp
LXRoIHJhbmdlIHRoYXQgSXRlcmF0b3IgdHJhdmVyc2VzLgotICAgIC8vIGN1cnJlbnRbaV1fIGlz
IHRoZSBhY3R1YWwgdHJhdmVyc2luZyBpdGVyYXRvci4KLSRmb3IgaiBbWwotCi0gICAgY29uc3Qg
dHlwZW5hbWUgUGFyYW1HZW5lcmF0b3I8VCRqPjo6aXRlcmF0b3IgYmVnaW4kKGopXzsKLSAgICBj
b25zdCB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUJGo+OjppdGVyYXRvciBlbmQkKGopXzsKLSAg
ICB0eXBlbmFtZSBQYXJhbUdlbmVyYXRvcjxUJGo+OjppdGVyYXRvciBjdXJyZW50JChqKV87Ci1d
XQotCi0gICAgUGFyYW1UeXBlIGN1cnJlbnRfdmFsdWVfOwotICB9OyAgLy8gY2xhc3MgQ2FydGVz
aWFuUHJvZHVjdEdlbmVyYXRvciRpOjpJdGVyYXRvcgotCi0gIC8vIE5vIGltcGxlbWVudGF0aW9u
IC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgQ2Fy
dGVzaWFuUHJvZHVjdEdlbmVyYXRvciRpJiBvdGhlcik7Ci0KLQotJGZvciBqIFtbCi0gIGNvbnN0
IFBhcmFtR2VuZXJhdG9yPFQkaj4gZyQoailfOwotCi1dXQotfTsgIC8vIGNsYXNzIENhcnRlc2lh
blByb2R1Y3RHZW5lcmF0b3IkaQotCi0KLV1dCi0KLS8vIElOVEVSTkFMIElNUExFTUVOVEFUSU9O
IC0gRE8gTk9UIFVTRSBJTiBVU0VSIENPREUuCi0vLwotLy8gSGVscGVyIGNsYXNzZXMgcHJvdmlk
aW5nIENvbWJpbmUoKSB3aXRoIHBvbHltb3JwaGljIGZlYXR1cmVzLiBUaGV5IGFsbG93Ci0vLyBj
YXN0aW5nIENhcnRlc2lhblByb2R1Y3RHZW5lcmF0b3JOPFQ+IHRvIFBhcmFtR2VuZXJhdG9yPFU+
IGlmIFQgaXMKLS8vIGNvbnZlcnRpYmxlIHRvIFUuCi0vLwotJHJhbmdlIGkgMi4ubWF4dHVwbGUK
LSRmb3IgaSBbWwotJHJhbmdlIGogMS4uaQotCi10ZW1wbGF0ZSA8JGZvciBqLCBbW2NsYXNzIEdl
bmVyYXRvciRqXV0+Ci1jbGFzcyBDYXJ0ZXNpYW5Qcm9kdWN0SG9sZGVyJGkgewotIHB1YmxpYzoK
LUNhcnRlc2lhblByb2R1Y3RIb2xkZXIkaSgkZm9yIGosIFtbY29uc3QgR2VuZXJhdG9yJGomIGck
al1dKQotICAgICAgOiAkZm9yIGosIFtbZyQoailfKGckaildXSB7fQotICB0ZW1wbGF0ZSA8JGZv
ciBqLCBbW3R5cGVuYW1lIFQkal1dPgotICBvcGVyYXRvciBQYXJhbUdlbmVyYXRvcjwgOjp0ZXN0
aW5nOjp0dXBsZTwkZm9yIGosIFtbVCRqXV0+ID4oKSBjb25zdCB7Ci0gICAgcmV0dXJuIFBhcmFt
R2VuZXJhdG9yPCA6OnRlc3Rpbmc6OnR1cGxlPCRmb3IgaiwgW1tUJGpdXT4gPigKLSAgICAgICAg
bmV3IENhcnRlc2lhblByb2R1Y3RHZW5lcmF0b3IkaTwkZm9yIGosIFtbVCRqXV0+KAotJGZvciBq
LFtbCi0KLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFyYW1HZW5lcmF0b3I8VCRqPiA+KGckKGopXykK
LV1dKSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdu
bWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgQ2FydGVzaWFuUHJv
ZHVjdEhvbGRlciRpJiBvdGhlcik7Ci0KLQotJGZvciBqIFtbCi0gIGNvbnN0IEdlbmVyYXRvciRq
IGckKGopXzsKLQotXV0KLX07ICAvLyBjbGFzcyBDYXJ0ZXNpYW5Qcm9kdWN0SG9sZGVyJGkKLQot
XV0KLQotIyBlbmRpZiAgLy8gR1RFU1RfSEFTX0NPTUJJTkUKLQotfSAgLy8gbmFtZXNwYWNlIGlu
dGVybmFsCi19ICAvLyBuYW1lc3BhY2UgdGVzdGluZwotCi0jZW5kaWYgIC8vICBHVEVTVF9IQVNf
UEFSQU1fVEVTVAotCi0jZW5kaWYgIC8vIEdURVNUX0lOQ0xVREVfR1RFU1RfSU5URVJOQUxfR1RF
U1RfUEFSQU1fVVRJTF9HRU5FUkFURURfSF8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5h
bC9ndGVzdC1wYXJhbS11dGlsLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xs
eS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtcGFyYW0tdXRp
bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmNhYjliMDIwMWIxOWI3YWZiYTM5
MTk3ZjdlYTdmOGE0YTBiMTcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2ds
ZXRlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1wYXJhbS11dGlsLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw3MzEgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4KLS8v
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0vLwotLy8gQXV0aG9yOiB2bGFkbEBnb29nbGUuY29tIChWbGFkIExvc2V2KQot
Ci0vLyBUeXBlIGFuZCBmdW5jdGlvbiB1dGlsaXRpZXMgZm9yIGltcGxlbWVudGluZyBwYXJhbWV0
ZXJpemVkIHRlc3RzLgotCi0jaWZuZGVmIEdURVNUX0lOQ0xVREVfR1RFU1RfSU5URVJOQUxfR1RF
U1RfUEFSQU1fVVRJTF9IXwotI2RlZmluZSBHVEVTVF9JTkNMVURFX0dURVNUX0lOVEVSTkFMX0dU
RVNUX1BBUkFNX1VUSUxfSF8KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0KLSNpbmNsdWRlIDxpdGVy
YXRvcj4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDx2ZWN0
b3I+Ci0KLS8vIHNjcmlwdHMvZnVzZV9ndGVzdC5weSBkZXBlbmRzIG9uIGd0ZXN0J3Mgb3duIGhl
YWRlciBiZWluZyAjaW5jbHVkZWQKLS8vICp1bmNvbmRpdGlvbmFsbHkqLiAgVGhlcmVmb3JlIHRo
ZXNlICNpbmNsdWRlcyBjYW5ub3QgYmUgbW92ZWQKLS8vIGluc2lkZSAjaWYgR1RFU1RfSEFTX1BB
UkFNX1RFU1QuCi0jaW5jbHVkZSAiZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtaW50ZXJuYWwuaCIKLSNp
bmNsdWRlICJndGVzdC9pbnRlcm5hbC9ndGVzdC1saW5rZWRfcHRyLmgiCi0jaW5jbHVkZSAiZ3Rl
c3QvaW50ZXJuYWwvZ3Rlc3QtcG9ydC5oIgotI2luY2x1ZGUgImd0ZXN0L2d0ZXN0LXByaW50ZXJz
LmgiCi0KLSNpZiBHVEVTVF9IQVNfUEFSQU1fVEVTVAotCi1uYW1lc3BhY2UgdGVzdGluZyB7Ci0K
LS8vIElucHV0IHRvIGEgcGFyYW1ldGVyaXplZCB0ZXN0IG5hbWUgZ2VuZXJhdG9yLCBkZXNjcmli
aW5nIGEgdGVzdCBwYXJhbWV0ZXIuCi0vLyBDb25zaXN0cyBvZiB0aGUgcGFyYW1ldGVyIHZhbHVl
IGFuZCB0aGUgaW50ZWdlciBwYXJhbWV0ZXIgaW5kZXguCi10ZW1wbGF0ZSA8Y2xhc3MgUGFyYW1U
eXBlPgotc3RydWN0IFRlc3RQYXJhbUluZm8gewotICBUZXN0UGFyYW1JbmZvKGNvbnN0IFBhcmFt
VHlwZSYgYV9wYXJhbSwgc2l6ZV90IGFuX2luZGV4KSA6Ci0gICAgcGFyYW0oYV9wYXJhbSksCi0g
ICAgaW5kZXgoYW5faW5kZXgpIHt9Ci0gIFBhcmFtVHlwZSBwYXJhbTsKLSAgc2l6ZV90IGluZGV4
OwotfTsKLQotLy8gQSBidWlsdGluIHBhcmFtZXRlcml6ZWQgdGVzdCBuYW1lIGdlbmVyYXRvciB3
aGljaCByZXR1cm5zIHRoZSByZXN1bHQgb2YKLS8vIHRlc3Rpbmc6OlByaW50VG9TdHJpbmcuCi1z
dHJ1Y3QgUHJpbnRUb1N0cmluZ1BhcmFtTmFtZSB7Ci0gIHRlbXBsYXRlIDxjbGFzcyBQYXJhbVR5
cGU+Ci0gIHN0ZDo6c3RyaW5nIG9wZXJhdG9yKCkoY29uc3QgVGVzdFBhcmFtSW5mbzxQYXJhbVR5
cGU+JiBpbmZvKSBjb25zdCB7Ci0gICAgcmV0dXJuIFByaW50VG9TdHJpbmcoaW5mby5wYXJhbSk7
Ci0gIH0KLX07Ci0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLS8vIElOVEVSTkFMIElNUExFTUVO
VEFUSU9OIC0gRE8gTk9UIFVTRSBJTiBVU0VSIENPREUuCi0vLwotLy8gT3V0cHV0cyBhIG1lc3Nh
Z2UgZXhwbGFpbmluZyBpbnZhbGlkIHJlZ2lzdHJhdGlvbiBvZiBkaWZmZXJlbnQKLS8vIGZpeHR1
cmUgY2xhc3MgZm9yIHRoZSBzYW1lIHRlc3QgY2FzZS4gVGhpcyBtYXkgaGFwcGVuIHdoZW4KLS8v
IFRFU1RfUCBtYWNybyBpcyB1c2VkIHRvIGRlZmluZSB0d28gdGVzdHMgd2l0aCB0aGUgc2FtZSBu
YW1lCi0vLyBidXQgaW4gZGlmZmVyZW50IG5hbWVzcGFjZXMuCi1HVEVTVF9BUElfIHZvaWQgUmVw
b3J0SW52YWxpZFRlc3RDYXNlVHlwZShjb25zdCBjaGFyKiB0ZXN0X2Nhc2VfbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbiBjb2RlX2xv
Y2F0aW9uKTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lPiBjbGFzcyBQYXJhbUdlbmVyYXRvckludGVy
ZmFjZTsKLXRlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3MgUGFyYW1HZW5lcmF0b3I7Ci0KLS8vIElu
dGVyZmFjZSBmb3IgaXRlcmF0aW5nIG92ZXIgZWxlbWVudHMgcHJvdmlkZWQgYnkgYW4gaW1wbGVt
ZW50YXRpb24KLS8vIG9mIFBhcmFtR2VuZXJhdG9ySW50ZXJmYWNlPFQ+LgotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci1jbGFzcyBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlIHsKLSBwdWJsaWM6Ci0gIHZp
cnR1YWwgflBhcmFtSXRlcmF0b3JJbnRlcmZhY2UoKSB7fQotICAvLyBBIHBvaW50ZXIgdG8gdGhl
IGJhc2UgZ2VuZXJhdG9yIGluc3RhbmNlLgotICAvLyBVc2VkIG9ubHkgZm9yIHRoZSBwdXJwb3Nl
cyBvZiBpdGVyYXRvciBjb21wYXJpc29uCi0gIC8vIHRvIG1ha2Ugc3VyZSB0aGF0IHR3byBpdGVy
YXRvcnMgYmVsb25nIHRvIHRoZSBzYW1lIGdlbmVyYXRvci4KLSAgdmlydHVhbCBjb25zdCBQYXJh
bUdlbmVyYXRvckludGVyZmFjZTxUPiogQmFzZUdlbmVyYXRvcigpIGNvbnN0ID0gMDsKLSAgLy8g
QWR2YW5jZXMgaXRlcmF0b3IgdG8gcG9pbnQgdG8gdGhlIG5leHQgZWxlbWVudAotICAvLyBwcm92
aWRlZCBieSB0aGUgZ2VuZXJhdG9yLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlCi0gIC8vIGZv
ciBub3QgY2FsbGluZyBBZHZhbmNlKCkgb24gYW4gaXRlcmF0b3IgZXF1YWwgdG8KLSAgLy8gQmFz
ZUdlbmVyYXRvcigpLT5FbmQoKS4KLSAgdmlydHVhbCB2b2lkIEFkdmFuY2UoKSA9IDA7Ci0gIC8v
IENsb25lcyB0aGUgaXRlcmF0b3Igb2JqZWN0LiBVc2VkIGZvciBpbXBsZW1lbnRpbmcgY29weSBz
ZW1hbnRpY3MKLSAgLy8gb2YgUGFyYW1JdGVyYXRvcjxUPi4KLSAgdmlydHVhbCBQYXJhbUl0ZXJh
dG9ySW50ZXJmYWNlKiBDbG9uZSgpIGNvbnN0ID0gMDsKLSAgLy8gRGVyZWZlcmVuY2VzIHRoZSBj
dXJyZW50IGl0ZXJhdG9yIGFuZCBwcm92aWRlcyAocmVhZC1vbmx5KSBhY2Nlc3MKLSAgLy8gdG8g
dGhlIHBvaW50ZWQgdmFsdWUuIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSBub3Qg
dG8gY2FsbAotICAvLyBDdXJyZW50KCkgb24gYW4gaXRlcmF0b3IgZXF1YWwgdG8gQmFzZUdlbmVy
YXRvcigpLT5FbmQoKS4KLSAgLy8gVXNlZCBmb3IgaW1wbGVtZW50aW5nIFBhcmFtR2VuZXJhdG9y
PFQ+OjpvcGVyYXRvciooKS4KLSAgdmlydHVhbCBjb25zdCBUKiBDdXJyZW50KCkgY29uc3QgPSAw
OwotICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIGl0ZXJhdG9yIGFuZCBvdGhlciBw
b2ludCB0byB0aGUgc2FtZQotICAvLyBlbGVtZW50IGluIHRoZSBzZXF1ZW5jZSBnZW5lcmF0ZWQg
YnkgdGhlIGdlbmVyYXRvci4KLSAgLy8gVXNlZCBmb3IgaW1wbGVtZW50aW5nIFBhcmFtR2VuZXJh
dG9yPFQ+OjpvcGVyYXRvcj09KCkuCi0gIHZpcnR1YWwgYm9vbCBFcXVhbHMoY29uc3QgUGFyYW1J
dGVyYXRvckludGVyZmFjZSYgb3RoZXIpIGNvbnN0ID0gMDsKLX07Ci0KLS8vIENsYXNzIGl0ZXJh
dGluZyBvdmVyIGVsZW1lbnRzIHByb3ZpZGVkIGJ5IGFuIGltcGxlbWVudGF0aW9uIG9mCi0vLyBQ
YXJhbUdlbmVyYXRvckludGVyZmFjZTxUPi4gSXQgd3JhcHMgUGFyYW1JdGVyYXRvckludGVyZmFj
ZTxUPgotLy8gYW5kIGltcGxlbWVudHMgdGhlIGNvbnN0IGZvcndhcmQgaXRlcmF0b3IgY29uY2Vw
dC4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgUGFyYW1JdGVyYXRvciB7Ci0gcHVibGlj
OgotICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKLSAgdHlwZWRlZiBjb25zdCBUJiByZWZlcmVuY2U7
Ci0gIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKLQotICAvLyBQYXJhbUl0ZXJh
dG9yIGFzc3VtZXMgb3duZXJzaGlwIG9mIHRoZSBpbXBsXyBwb2ludGVyLgotICBQYXJhbUl0ZXJh
dG9yKGNvbnN0IFBhcmFtSXRlcmF0b3ImIG90aGVyKSA6IGltcGxfKG90aGVyLmltcGxfLT5DbG9u
ZSgpKSB7fQotICBQYXJhbUl0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgUGFyYW1JdGVyYXRvciYg
b3RoZXIpIHsKLSAgICBpZiAodGhpcyAhPSAmb3RoZXIpCi0gICAgICBpbXBsXy5yZXNldChvdGhl
ci5pbXBsXy0+Q2xvbmUoKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgY29uc3QgVCYg
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmltcGxfLT5DdXJyZW50KCk7IH0KLSAgY29uc3Qg
VCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGltcGxfLT5DdXJyZW50KCk7IH0KLSAgLy8g
UHJlZml4IHZlcnNpb24gb2Ygb3BlcmF0b3IrKy4KLSAgUGFyYW1JdGVyYXRvciYgb3BlcmF0b3Ir
KygpIHsKLSAgICBpbXBsXy0+QWR2YW5jZSgpOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotICAv
LyBQb3N0Zml4IHZlcnNpb24gb2Ygb3BlcmF0b3IrKy4KLSAgUGFyYW1JdGVyYXRvciBvcGVyYXRv
cisrKGludCAvKnVudXNlZCovKSB7Ci0gICAgUGFyYW1JdGVyYXRvckludGVyZmFjZTxUPiogY2xv
bmUgPSBpbXBsXy0+Q2xvbmUoKTsKLSAgICBpbXBsXy0+QWR2YW5jZSgpOwotICAgIHJldHVybiBQ
YXJhbUl0ZXJhdG9yKGNsb25lKTsKLSAgfQotICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFyYW1J
dGVyYXRvciYgb3RoZXIpIGNvbnN0IHsKLSAgICByZXR1cm4gaW1wbF8uZ2V0KCkgPT0gb3RoZXIu
aW1wbF8uZ2V0KCkgfHwgaW1wbF8tPkVxdWFscygqb3RoZXIuaW1wbF8pOwotICB9Ci0gIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBQYXJhbUl0ZXJhdG9yJiBvdGhlcikgY29uc3QgewotICAgIHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgZnJpZW5kIGNsYXNzIFBh
cmFtR2VuZXJhdG9yPFQ+OwotICBleHBsaWNpdCBQYXJhbUl0ZXJhdG9yKFBhcmFtSXRlcmF0b3JJ
bnRlcmZhY2U8VD4qIGltcGwpIDogaW1wbF8oaW1wbCkge30KLSAgc2NvcGVkX3B0cjxQYXJhbUl0
ZXJhdG9ySW50ZXJmYWNlPFQ+ID4gaW1wbF87Ci19OwotCi0vLyBQYXJhbUdlbmVyYXRvckludGVy
ZmFjZTxUPiBpcyB0aGUgYmluYXJ5IGludGVyZmFjZSB0byBhY2Nlc3MgZ2VuZXJhdG9ycwotLy8g
ZGVmaW5lZCBpbiBvdGhlciB0cmFuc2xhdGlvbiB1bml0cy4KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
PgotY2xhc3MgUGFyYW1HZW5lcmF0b3JJbnRlcmZhY2UgewotIHB1YmxpYzoKLSAgdHlwZWRlZiBU
IFBhcmFtVHlwZTsKLQotICB2aXJ0dWFsIH5QYXJhbUdlbmVyYXRvckludGVyZmFjZSgpIHt9Ci0K
LSAgLy8gR2VuZXJhdG9yIGludGVyZmFjZSBkZWZpbml0aW9uCi0gIHZpcnR1YWwgUGFyYW1JdGVy
YXRvckludGVyZmFjZTxUPiogQmVnaW4oKSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgUGFyYW1JdGVy
YXRvckludGVyZmFjZTxUPiogRW5kKCkgY29uc3QgPSAwOwotfTsKLQotLy8gV3JhcHMgUGFyYW1H
ZW5lcmF0b3JJbnRlcmZhY2U8VD4gYW5kIHByb3ZpZGVzIGdlbmVyYWwgZ2VuZXJhdG9yIHN5bnRh
eAotLy8gY29tcGF0aWJsZSB3aXRoIHRoZSBTVEwgQ29udGFpbmVyIGNvbmNlcHQuCi0vLyBUaGlz
IGNsYXNzIGltcGxlbWVudHMgY29weSBpbml0aWFsaXphdGlvbiBzZW1hbnRpY3MgYW5kIHRoZSBj
b250YWluZWQKLS8vIFBhcmFtR2VuZXJhdG9ySW50ZXJmYWNlPFQ+IGluc3RhbmNlIGlzIHNoYXJl
ZCBhbW9uZyBhbGwgY29waWVzCi0vLyBvZiB0aGUgb3JpZ2luYWwgb2JqZWN0LiBUaGlzIGlzIHBv
c3NpYmxlIGJlY2F1c2UgdGhhdCBpbnN0YW5jZSBpcyBpbW11dGFibGUuCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotY2xhc3MgUGFyYW1HZW5lcmF0b3IgewotIHB1YmxpYzoKLSAgdHlwZWRlZiBQYXJh
bUl0ZXJhdG9yPFQ+IGl0ZXJhdG9yOwotCi0gIGV4cGxpY2l0IFBhcmFtR2VuZXJhdG9yKFBhcmFt
R2VuZXJhdG9ySW50ZXJmYWNlPFQ+KiBpbXBsKSA6IGltcGxfKGltcGwpIHt9Ci0gIFBhcmFtR2Vu
ZXJhdG9yKGNvbnN0IFBhcmFtR2VuZXJhdG9yJiBvdGhlcikgOiBpbXBsXyhvdGhlci5pbXBsXykg
e30KLQotICBQYXJhbUdlbmVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IFBhcmFtR2VuZXJhdG9yJiBv
dGhlcikgewotICAgIGltcGxfID0gb3RoZXIuaW1wbF87Ci0gICAgcmV0dXJuICp0aGlzOwotICB9
Ci0KLSAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihpbXBsXy0+QmVn
aW4oKSk7IH0KLSAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoaW1wbF8t
PkVuZCgpKTsgfQotCi0gcHJpdmF0ZToKLSAgbGlua2VkX3B0cjxjb25zdCBQYXJhbUdlbmVyYXRv
ckludGVyZmFjZTxUPiA+IGltcGxfOwotfTsKLQotLy8gR2VuZXJhdGVzIHZhbHVlcyBmcm9tIGEg
cmFuZ2Ugb2YgdHdvIGNvbXBhcmFibGUgdmFsdWVzLiBDYW4gYmUgdXNlZCB0bwotLy8gZ2VuZXJh
dGUgc2VxdWVuY2VzIG9mIHVzZXItZGVmaW5lZCB0eXBlcyB0aGF0IGltcGxlbWVudCBvcGVyYXRv
cisoKSBhbmQKLS8vIG9wZXJhdG9yPCgpLgotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGluIHRoZSBS
YW5nZSgpIGZ1bmN0aW9uLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEluY3JlbWVu
dFQ+Ci1jbGFzcyBSYW5nZUdlbmVyYXRvciA6IHB1YmxpYyBQYXJhbUdlbmVyYXRvckludGVyZmFj
ZTxUPiB7Ci0gcHVibGljOgotICBSYW5nZUdlbmVyYXRvcihUIGJlZ2luLCBUIGVuZCwgSW5jcmVt
ZW50VCBzdGVwKQotICAgICAgOiBiZWdpbl8oYmVnaW4pLCBlbmRfKGVuZCksCi0gICAgICAgIHN0
ZXBfKHN0ZXApLCBlbmRfaW5kZXhfKENhbGN1bGF0ZUVuZEluZGV4KGJlZ2luLCBlbmQsIHN0ZXAp
KSB7fQotICB2aXJ0dWFsIH5SYW5nZUdlbmVyYXRvcigpIHt9Ci0KLSAgdmlydHVhbCBQYXJhbUl0
ZXJhdG9ySW50ZXJmYWNlPFQ+KiBCZWdpbigpIGNvbnN0IHsKLSAgICByZXR1cm4gbmV3IEl0ZXJh
dG9yKHRoaXMsIGJlZ2luXywgMCwgc3RlcF8pOwotICB9Ci0gIHZpcnR1YWwgUGFyYW1JdGVyYXRv
ckludGVyZmFjZTxUPiogRW5kKCkgY29uc3QgewotICAgIHJldHVybiBuZXcgSXRlcmF0b3IodGhp
cywgZW5kXywgZW5kX2luZGV4Xywgc3RlcF8pOwotICB9Ci0KLSBwcml2YXRlOgotICBjbGFzcyBJ
dGVyYXRvciA6IHB1YmxpYyBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFQ+IHsKLSAgIHB1YmxpYzoK
LSAgICBJdGVyYXRvcihjb25zdCBQYXJhbUdlbmVyYXRvckludGVyZmFjZTxUPiogYmFzZSwgVCB2
YWx1ZSwgaW50IGluZGV4LAotICAgICAgICAgICAgIEluY3JlbWVudFQgc3RlcCkKLSAgICAgICAg
OiBiYXNlXyhiYXNlKSwgdmFsdWVfKHZhbHVlKSwgaW5kZXhfKGluZGV4KSwgc3RlcF8oc3RlcCkg
e30KLSAgICB2aXJ0dWFsIH5JdGVyYXRvcigpIHt9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IFBhcmFt
R2VuZXJhdG9ySW50ZXJmYWNlPFQ+KiBCYXNlR2VuZXJhdG9yKCkgY29uc3QgewotICAgICAgcmV0
dXJuIGJhc2VfOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgQWR2YW5jZSgpIHsKLSAgICAgIHZh
bHVlXyA9IHN0YXRpY19jYXN0PFQ+KHZhbHVlXyArIHN0ZXBfKTsKLSAgICAgIGluZGV4XysrOwot
ICAgIH0KLSAgICB2aXJ0dWFsIFBhcmFtSXRlcmF0b3JJbnRlcmZhY2U8VD4qIENsb25lKCkgY29u
c3QgewotICAgICAgcmV0dXJuIG5ldyBJdGVyYXRvcigqdGhpcyk7Ci0gICAgfQotICAgIHZpcnR1
YWwgY29uc3QgVCogQ3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICZ2YWx1ZV87IH0KLSAgICB2aXJ0
dWFsIGJvb2wgRXF1YWxzKGNvbnN0IFBhcmFtSXRlcmF0b3JJbnRlcmZhY2U8VD4mIG90aGVyKSBj
b25zdCB7Ci0gICAgICAvLyBIYXZpbmcgdGhlIHNhbWUgYmFzZSBnZW5lcmF0b3IgZ3VhcmFudGVl
cyB0aGF0IHRoZSBvdGhlcgotICAgICAgLy8gaXRlcmF0b3IgaXMgb2YgdGhlIHNhbWUgdHlwZSBh
bmQgd2UgY2FuIGRvd25jYXN0LgotICAgICAgR1RFU1RfQ0hFQ0tfKEJhc2VHZW5lcmF0b3IoKSA9
PSBvdGhlci5CYXNlR2VuZXJhdG9yKCkpCi0gICAgICAgICAgPDwgIlRoZSBwcm9ncmFtIGF0dGVt
cHRlZCB0byBjb21wYXJlIGl0ZXJhdG9ycyAiCi0gICAgICAgICAgPDwgImZyb20gZGlmZmVyZW50
IGdlbmVyYXRvcnMuIiA8PCBzdGQ6OmVuZGw7Ci0gICAgICBjb25zdCBpbnQgb3RoZXJfaW5kZXgg
PQotICAgICAgICAgIENoZWNrZWREb3duY2FzdFRvQWN0dWFsVHlwZTxjb25zdCBJdGVyYXRvcj4o
Jm90aGVyKS0+aW5kZXhfOwotICAgICAgcmV0dXJuIGluZGV4XyA9PSBvdGhlcl9pbmRleDsKLSAg
ICB9Ci0KLSAgIHByaXZhdGU6Ci0gICAgSXRlcmF0b3IoY29uc3QgSXRlcmF0b3ImIG90aGVyKQot
ICAgICAgICA6IFBhcmFtSXRlcmF0b3JJbnRlcmZhY2U8VD4oKSwKLSAgICAgICAgICBiYXNlXyhv
dGhlci5iYXNlXyksIHZhbHVlXyhvdGhlci52YWx1ZV8pLCBpbmRleF8ob3RoZXIuaW5kZXhfKSwK
LSAgICAgICAgICBzdGVwXyhvdGhlci5zdGVwXykge30KLQotICAgIC8vIE5vIGltcGxlbWVudGF0
aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBvcnRlZC4KLSAgICB2b2lkIG9wZXJhdG9yPShjb25z
dCBJdGVyYXRvciYgb3RoZXIpOwotCi0gICAgY29uc3QgUGFyYW1HZW5lcmF0b3JJbnRlcmZhY2U8
VD4qIGNvbnN0IGJhc2VfOwotICAgIFQgdmFsdWVfOwotICAgIGludCBpbmRleF87Ci0gICAgY29u
c3QgSW5jcmVtZW50VCBzdGVwXzsKLSAgfTsgIC8vIGNsYXNzIFJhbmdlR2VuZXJhdG9yOjpJdGVy
YXRvcgotCi0gIHN0YXRpYyBpbnQgQ2FsY3VsYXRlRW5kSW5kZXgoY29uc3QgVCYgYmVnaW4sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCYgZW5kLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEluY3JlbWVudFQmIHN0ZXApIHsKLSAgICBpbnQgZW5k
X2luZGV4ID0gMDsKLSAgICBmb3IgKFQgaSA9IGJlZ2luOyBpIDwgZW5kOyBpID0gc3RhdGljX2Nh
c3Q8VD4oaSArIHN0ZXApKQotICAgICAgZW5kX2luZGV4Kys7Ci0gICAgcmV0dXJuIGVuZF9pbmRl
eDsKLSAgfQotCi0gIC8vIE5vIGltcGxlbWVudGF0aW9uIC0gYXNzaWdubWVudCBpcyB1bnN1cHBv
cnRlZC4KLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgUmFuZ2VHZW5lcmF0b3ImIG90aGVyKTsKLQot
ICBjb25zdCBUIGJlZ2luXzsKLSAgY29uc3QgVCBlbmRfOwotICBjb25zdCBJbmNyZW1lbnRUIHN0
ZXBfOwotICAvLyBUaGUgaW5kZXggZm9yIHRoZSBlbmQoKSBpdGVyYXRvci4gQWxsIHRoZSBlbGVt
ZW50cyBpbiB0aGUgZ2VuZXJhdGVkCi0gIC8vIHNlcXVlbmNlIGFyZSBpbmRleGVkICgwLWJhc2Vk
KSB0byBhaWQgaXRlcmF0b3IgY29tcGFyaXNvbi4KLSAgY29uc3QgaW50IGVuZF9pbmRleF87Ci19
OyAgLy8gY2xhc3MgUmFuZ2VHZW5lcmF0b3IKLQotCi0vLyBHZW5lcmF0ZXMgdmFsdWVzIGZyb20g
YSBwYWlyIG9mIFNUTC1zdHlsZSBpdGVyYXRvcnMuIFVzZWQgaW4gdGhlCi0vLyBWYWx1ZXNJbigp
IGZ1bmN0aW9uLiBUaGUgZWxlbWVudHMgYXJlIGNvcGllZCBmcm9tIHRoZSBzb3VyY2UgcmFuZ2UK
LS8vIHNpbmNlIHRoZSBzb3VyY2UgY2FuIGJlIGxvY2F0ZWQgb24gdGhlIHN0YWNrLCBhbmQgdGhl
IGdlbmVyYXRvcgotLy8gaXMgbGlrZWx5IHRvIHBlcnNpc3QgYmV5b25kIHRoYXQgc3RhY2sgZnJh
bWUuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFZhbHVlc0luSXRlcmF0b3JSYW5nZUdl
bmVyYXRvciA6IHB1YmxpYyBQYXJhbUdlbmVyYXRvckludGVyZmFjZTxUPiB7Ci0gcHVibGljOgot
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRm9yd2FyZEl0ZXJhdG9yPgotICBWYWx1ZXNJbkl0ZXJhdG9y
UmFuZ2VHZW5lcmF0b3IoRm9yd2FyZEl0ZXJhdG9yIGJlZ2luLCBGb3J3YXJkSXRlcmF0b3IgZW5k
KQotICAgICAgOiBjb250YWluZXJfKGJlZ2luLCBlbmQpIHt9Ci0gIHZpcnR1YWwgflZhbHVlc0lu
SXRlcmF0b3JSYW5nZUdlbmVyYXRvcigpIHt9Ci0KLSAgdmlydHVhbCBQYXJhbUl0ZXJhdG9ySW50
ZXJmYWNlPFQ+KiBCZWdpbigpIGNvbnN0IHsKLSAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKHRoaXMs
IGNvbnRhaW5lcl8uYmVnaW4oKSk7Ci0gIH0KLSAgdmlydHVhbCBQYXJhbUl0ZXJhdG9ySW50ZXJm
YWNlPFQ+KiBFbmQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIG5ldyBJdGVyYXRvcih0aGlzLCBjb250
YWluZXJfLmVuZCgpKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgdHlwZWRlZiB0eXBlbmFtZSA6OnN0
ZDo6dmVjdG9yPFQ+IENvbnRhaW5lclR5cGU7Ci0KLSAgY2xhc3MgSXRlcmF0b3IgOiBwdWJsaWMg
UGFyYW1JdGVyYXRvckludGVyZmFjZTxUPiB7Ci0gICBwdWJsaWM6Ci0gICAgSXRlcmF0b3IoY29u
c3QgUGFyYW1HZW5lcmF0b3JJbnRlcmZhY2U8VD4qIGJhc2UsCi0gICAgICAgICAgICAgdHlwZW5h
bWUgQ29udGFpbmVyVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IpCi0gICAgICAgIDogYmFz
ZV8oYmFzZSksIGl0ZXJhdG9yXyhpdGVyYXRvcikge30KLSAgICB2aXJ0dWFsIH5JdGVyYXRvcigp
IHt9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IFBhcmFtR2VuZXJhdG9ySW50ZXJmYWNlPFQ+KiBCYXNl
R2VuZXJhdG9yKCkgY29uc3QgewotICAgICAgcmV0dXJuIGJhc2VfOwotICAgIH0KLSAgICB2aXJ0
dWFsIHZvaWQgQWR2YW5jZSgpIHsKLSAgICAgICsraXRlcmF0b3JfOwotICAgICAgdmFsdWVfLnJl
c2V0KCk7Ci0gICAgfQotICAgIHZpcnR1YWwgUGFyYW1JdGVyYXRvckludGVyZmFjZTxUPiogQ2xv
bmUoKSBjb25zdCB7Ci0gICAgICByZXR1cm4gbmV3IEl0ZXJhdG9yKCp0aGlzKTsKLSAgICB9Ci0g
ICAgLy8gV2UgbmVlZCB0byB1c2UgY2FjaGVkIHZhbHVlIHJlZmVyZW5jZWQgYnkgaXRlcmF0b3Jf
IGJlY2F1c2UgKml0ZXJhdG9yXwotICAgIC8vIGNhbiByZXR1cm4gYSB0ZW1wb3Jhcnkgb2JqZWN0
IChhbmQgb2YgdHlwZSBvdGhlciB0aGVuIFQpLCBzbyBqdXN0Ci0gICAgLy8gaGF2aW5nICJyZXR1
cm4gJippdGVyYXRvcl87IiBkb2Vzbid0IHdvcmsuCi0gICAgLy8gdmFsdWVfIGlzIHVwZGF0ZWQg
aGVyZSBhbmQgbm90IGluIEFkdmFuY2UoKSBiZWNhdXNlIEFkdmFuY2UoKQotICAgIC8vIGNhbiBh
ZHZhbmNlIGl0ZXJhdG9yXyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgcmFuZ2UsIGFuZCB3ZSBjYW5u
b3QKLSAgICAvLyBkZXRlY3QgdGhhdCBmYWN0LiBUaGUgY2xpZW50IGNvZGUsIG9uIHRoZSBvdGhl
ciBoYW5kLCBpcwotICAgIC8vIHJlc3BvbnNpYmxlIGZvciBub3QgY2FsbGluZyBDdXJyZW50KCkg
b24gYW4gb3V0LW9mLXJhbmdlIGl0ZXJhdG9yLgotICAgIHZpcnR1YWwgY29uc3QgVCogQ3VycmVu
dCgpIGNvbnN0IHsKLSAgICAgIGlmICh2YWx1ZV8uZ2V0KCkgPT0gTlVMTCkKLSAgICAgICAgdmFs
dWVfLnJlc2V0KG5ldyBUKCppdGVyYXRvcl8pKTsKLSAgICAgIHJldHVybiB2YWx1ZV8uZ2V0KCk7
Ci0gICAgfQotICAgIHZpcnR1YWwgYm9vbCBFcXVhbHMoY29uc3QgUGFyYW1JdGVyYXRvckludGVy
ZmFjZTxUPiYgb3RoZXIpIGNvbnN0IHsKLSAgICAgIC8vIEhhdmluZyB0aGUgc2FtZSBiYXNlIGdl
bmVyYXRvciBndWFyYW50ZWVzIHRoYXQgdGhlIG90aGVyCi0gICAgICAvLyBpdGVyYXRvciBpcyBv
ZiB0aGUgc2FtZSB0eXBlIGFuZCB3ZSBjYW4gZG93bmNhc3QuCi0gICAgICBHVEVTVF9DSEVDS18o
QmFzZUdlbmVyYXRvcigpID09IG90aGVyLkJhc2VHZW5lcmF0b3IoKSkKLSAgICAgICAgICA8PCAi
VGhlIHByb2dyYW0gYXR0ZW1wdGVkIHRvIGNvbXBhcmUgaXRlcmF0b3JzICIKLSAgICAgICAgICA8
PCAiZnJvbSBkaWZmZXJlbnQgZ2VuZXJhdG9ycy4iIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIHJldHVy
biBpdGVyYXRvcl8gPT0KLSAgICAgICAgICBDaGVja2VkRG93bmNhc3RUb0FjdHVhbFR5cGU8Y29u
c3QgSXRlcmF0b3I+KCZvdGhlciktPml0ZXJhdG9yXzsKLSAgICB9Ci0KLSAgIHByaXZhdGU6Ci0g
ICAgSXRlcmF0b3IoY29uc3QgSXRlcmF0b3ImIG90aGVyKQotICAgICAgICAgIC8vIFRoZSBleHBs
aWNpdCBjb25zdHJ1Y3RvciBjYWxsIHN1cHByZXNzZXMgYSBmYWxzZSB3YXJuaW5nCi0gICAgICAg
ICAgLy8gZW1pdHRlZCBieSBnY2Mgd2hlbiBzdXBwbGllZCB3aXRoIHRoZSAtV2V4dHJhIG9wdGlv
bi4KLSAgICAgICAgOiBQYXJhbUl0ZXJhdG9ySW50ZXJmYWNlPFQ+KCksCi0gICAgICAgICAgYmFz
ZV8ob3RoZXIuYmFzZV8pLAotICAgICAgICAgIGl0ZXJhdG9yXyhvdGhlci5pdGVyYXRvcl8pIHt9
Ci0KLSAgICBjb25zdCBQYXJhbUdlbmVyYXRvckludGVyZmFjZTxUPiogY29uc3QgYmFzZV87Ci0g
ICAgdHlwZW5hbWUgQ29udGFpbmVyVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3JfOwotICAg
IC8vIEEgY2FjaGVkIHZhbHVlIG9mICppdGVyYXRvcl8uIFdlIGtlZXAgaXQgaGVyZSB0byBhbGxv
dyBhY2Nlc3MgYnkKLSAgICAvLyBwb2ludGVyIGluIHRoZSB3cmFwcGluZyBpdGVyYXRvcidzIG9w
ZXJhdG9yLT4oKS4KLSAgICAvLyB2YWx1ZV8gbmVlZHMgdG8gYmUgbXV0YWJsZSB0byBiZSBhY2Nl
c3NlZCBpbiBDdXJyZW50KCkuCi0gICAgLy8gVXNlIG9mIHNjb3BlZF9wdHIgaGVscHMgbWFuYWdl
IGNhY2hlZCB2YWx1ZSdzIGxpZmV0aW1lLAotICAgIC8vIHdoaWNoIGlzIGJvdW5kIGJ5IHRoZSBs
aWZlc3BhbiBvZiB0aGUgaXRlcmF0b3IgaXRzZWxmLgotICAgIG11dGFibGUgc2NvcGVkX3B0cjxj
b25zdCBUPiB2YWx1ZV87Ci0gIH07ICAvLyBjbGFzcyBWYWx1ZXNJbkl0ZXJhdG9yUmFuZ2VHZW5l
cmF0b3I6Okl0ZXJhdG9yCi0KLSAgLy8gTm8gaW1wbGVtZW50YXRpb24gLSBhc3NpZ25tZW50IGlz
IHVuc3VwcG9ydGVkLgotICB2b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1ZXNJbkl0ZXJhdG9yUmFu
Z2VHZW5lcmF0b3ImIG90aGVyKTsKLQotICBjb25zdCBDb250YWluZXJUeXBlIGNvbnRhaW5lcl87
Ci19OyAgLy8gY2xhc3MgVmFsdWVzSW5JdGVyYXRvclJhbmdlR2VuZXJhdG9yCi0KLS8vIElOVEVS
TkFMIElNUExFTUVOVEFUSU9OIC0gRE8gTk9UIFVTRSBJTiBVU0VSIENPREUuCi0vLwotLy8gRGVm
YXVsdCBwYXJhbWV0ZXJpemVkIHRlc3QgbmFtZSBnZW5lcmF0b3IsIHJldHVybnMgYSBzdHJpbmcg
Y29udGFpbmluZyB0aGUKLS8vIGludGVnZXIgdGVzdCBwYXJhbWV0ZXIgaW5kZXguCi10ZW1wbGF0
ZSA8Y2xhc3MgUGFyYW1UeXBlPgotc3RkOjpzdHJpbmcgRGVmYXVsdFBhcmFtTmFtZShjb25zdCBU
ZXN0UGFyYW1JbmZvPFBhcmFtVHlwZT4mIGluZm8pIHsKLSAgTWVzc2FnZSBuYW1lX3N0cmVhbTsK
LSAgbmFtZV9zdHJlYW0gPDwgaW5mby5pbmRleDsKLSAgcmV0dXJuIG5hbWVfc3RyZWFtLkdldFN0
cmluZygpOwotfQotCi0vLyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiAtIERPIE5PVCBVU0UgSU4g
VVNFUiBDT0RFLgotLy8KLS8vIFBhcmFtZXRlcml6ZWQgdGVzdCBuYW1lIG92ZXJsb2FkIGhlbHBl
cnMsIHdoaWNoIGhlbHAgdGhlCi0vLyBJTlNUQU5USUFURV9URVNUX0NBU0VfUCBtYWNybyBjaG9v
c2UgYmV0d2VlbiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJpemVkCi0vLyB0ZXN0IG5hbWUgZ2VuZXJh
dG9yIGFuZCB1c2VyIHBhcmFtIG5hbWUgZ2VuZXJhdG9yLgotdGVtcGxhdGUgPGNsYXNzIFBhcmFt
VHlwZSwgY2xhc3MgUGFyYW1OYW1lR2VuRnVuY3Rvcj4KLVBhcmFtTmFtZUdlbkZ1bmN0b3IgR2V0
UGFyYW1OYW1lR2VuKFBhcmFtTmFtZUdlbkZ1bmN0b3IgZnVuYykgewotICByZXR1cm4gZnVuYzsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFBhcmFtVHlwZT4KLXN0cnVjdCBQYXJhbU5hbWVHZW5GdW5j
IHsKLSAgdHlwZWRlZiBzdGQ6OnN0cmluZyBUeXBlKGNvbnN0IFRlc3RQYXJhbUluZm88UGFyYW1U
eXBlPiYpOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFBhcmFtVHlwZT4KLXR5cGVuYW1lIFBhcmFt
TmFtZUdlbkZ1bmM8UGFyYW1UeXBlPjo6VHlwZSAqR2V0UGFyYW1OYW1lR2VuKCkgewotICByZXR1
cm4gRGVmYXVsdFBhcmFtTmFtZTsKLX0KLQotLy8gSU5URVJOQUwgSU1QTEVNRU5UQVRJT04gLSBE
TyBOT1QgVVNFIElOIFVTRVIgQ09ERS4KLS8vCi0vLyBTdG9yZXMgYSBwYXJhbWV0ZXIgdmFsdWUg
YW5kIGxhdGVyIGNyZWF0ZXMgdGVzdHMgcGFyYW1ldGVyaXplZCB3aXRoIHRoYXQKLS8vIHZhbHVl
LgotdGVtcGxhdGUgPGNsYXNzIFRlc3RDbGFzcz4KLWNsYXNzIFBhcmFtZXRlcml6ZWRUZXN0RmFj
dG9yeSA6IHB1YmxpYyBUZXN0RmFjdG9yeUJhc2UgewotIHB1YmxpYzoKLSAgdHlwZWRlZiB0eXBl
bmFtZSBUZXN0Q2xhc3M6OlBhcmFtVHlwZSBQYXJhbVR5cGU7Ci0gIGV4cGxpY2l0IFBhcmFtZXRl
cml6ZWRUZXN0RmFjdG9yeShQYXJhbVR5cGUgcGFyYW1ldGVyKSA6Ci0gICAgICBwYXJhbWV0ZXJf
KHBhcmFtZXRlcikge30KLSAgdmlydHVhbCBUZXN0KiBDcmVhdGVUZXN0KCkgewotICAgIFRlc3RD
bGFzczo6U2V0UGFyYW0oJnBhcmFtZXRlcl8pOwotICAgIHJldHVybiBuZXcgVGVzdENsYXNzKCk7
Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGNvbnN0IFBhcmFtVHlwZSBwYXJhbWV0ZXJfOwotCi0gIEdU
RVNUX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTl8oUGFyYW1ldGVyaXplZFRlc3RGYWN0b3J5KTsK
LX07Ci0KLS8vIElOVEVSTkFMIElNUExFTUVOVEFUSU9OIC0gRE8gTk9UIFVTRSBJTiBVU0VSIENP
REUuCi0vLwotLy8gVGVzdE1ldGFGYWN0b3J5QmFzZSBpcyBhIGJhc2UgY2xhc3MgZm9yIG1ldGEt
ZmFjdG9yaWVzIHRoYXQgY3JlYXRlCi0vLyB0ZXN0IGZhY3RvcmllcyBmb3IgcGFzc2luZyBpbnRv
IE1ha2VBbmRSZWdpc3RlclRlc3RJbmZvIGZ1bmN0aW9uLgotdGVtcGxhdGUgPGNsYXNzIFBhcmFt
VHlwZT4KLWNsYXNzIFRlc3RNZXRhRmFjdG9yeUJhc2UgewotIHB1YmxpYzoKLSAgdmlydHVhbCB+
VGVzdE1ldGFGYWN0b3J5QmFzZSgpIHt9Ci0KLSAgdmlydHVhbCBUZXN0RmFjdG9yeUJhc2UqIENy
ZWF0ZVRlc3RGYWN0b3J5KFBhcmFtVHlwZSBwYXJhbWV0ZXIpID0gMDsKLX07Ci0KLS8vIElOVEVS
TkFMIElNUExFTUVOVEFUSU9OIC0gRE8gTk9UIFVTRSBJTiBVU0VSIENPREUuCi0vLwotLy8gVGVz
dE1ldGFGYWN0b3J5IGNyZWF0ZXMgdGVzdCBmYWN0b3JpZXMgZm9yIHBhc3NpbmcgaW50bwotLy8g
TWFrZUFuZFJlZ2lzdGVyVGVzdEluZm8gZnVuY3Rpb24uIFNpbmNlIE1ha2VBbmRSZWdpc3RlclRl
c3RJbmZvIHJlY2VpdmVzCi0vLyBvd25lcnNoaXAgb2YgdGVzdCBmYWN0b3J5IHBvaW50ZXIsIHNh
bWUgZmFjdG9yeSBvYmplY3QgY2Fubm90IGJlIHBhc3NlZAotLy8gaW50byB0aGF0IG1ldGhvZCB0
d2ljZS4gQnV0IFBhcmFtZXRlcml6ZWRUZXN0Q2FzZUluZm8gaXMgZ29pbmcgdG8gY2FsbAotLy8g
aXQgZm9yIGVhY2ggVGVzdC9QYXJhbWV0ZXIgdmFsdWUgY29tYmluYXRpb24uIFRodXMgaXQgbmVl
ZHMgbWV0YSBmYWN0b3J5Ci0vLyBjcmVhdG9yIGNsYXNzLgotdGVtcGxhdGUgPGNsYXNzIFRlc3RD
YXNlPgotY2xhc3MgVGVzdE1ldGFGYWN0b3J5Ci0gICAgOiBwdWJsaWMgVGVzdE1ldGFGYWN0b3J5
QmFzZTx0eXBlbmFtZSBUZXN0Q2FzZTo6UGFyYW1UeXBlPiB7Ci0gcHVibGljOgotICB0eXBlZGVm
IHR5cGVuYW1lIFRlc3RDYXNlOjpQYXJhbVR5cGUgUGFyYW1UeXBlOwotCi0gIFRlc3RNZXRhRmFj
dG9yeSgpIHt9Ci0KLSAgdmlydHVhbCBUZXN0RmFjdG9yeUJhc2UqIENyZWF0ZVRlc3RGYWN0b3J5
KFBhcmFtVHlwZSBwYXJhbWV0ZXIpIHsKLSAgICByZXR1cm4gbmV3IFBhcmFtZXRlcml6ZWRUZXN0
RmFjdG9yeTxUZXN0Q2FzZT4ocGFyYW1ldGVyKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgR1RFU1Rf
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOXyhUZXN0TWV0YUZhY3RvcnkpOwotfTsKLQotLy8gSU5U
RVJOQUwgSU1QTEVNRU5UQVRJT04gLSBETyBOT1QgVVNFIElOIFVTRVIgQ09ERS4KLS8vCi0vLyBQ
YXJhbWV0ZXJpemVkVGVzdENhc2VJbmZvQmFzZSBpcyBhIGdlbmVyaWMgaW50ZXJmYWNlCi0vLyB0
byBQYXJhbWV0ZXJpemVkVGVzdENhc2VJbmZvIGNsYXNzZXMuIFBhcmFtZXRlcml6ZWRUZXN0Q2Fz
ZUluZm9CYXNlCi0vLyBhY2N1bXVsYXRlcyB0ZXN0IGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IFRF
U1RfUCBtYWNybyBpbnZvY2F0aW9ucwotLy8gYW5kIGdlbmVyYXRvcnMgcHJvdmlkZWQgYnkgSU5T
VEFOVElBVEVfVEVTVF9DQVNFX1AgbWFjcm8gaW52b2NhdGlvbnMKLS8vIGFuZCB1c2VzIHRoYXQg
aW5mb3JtYXRpb24gdG8gcmVnaXN0ZXIgYWxsIHJlc3VsdGluZyB0ZXN0IGluc3RhbmNlcwotLy8g
aW4gUmVnaXN0ZXJUZXN0cyBtZXRob2QuIFRoZSBQYXJhbWV0ZXJpemVUZXN0Q2FzZVJlZ2lzdHJ5
IGNsYXNzIGhvbGRzCi0vLyBhIGNvbGxlY3Rpb24gb2YgcG9pbnRlcnMgdG8gdGhlIFBhcmFtZXRl
cml6ZWRUZXN0Q2FzZUluZm8gb2JqZWN0cwotLy8gYW5kIGNhbGxzIFJlZ2lzdGVyVGVzdHMoKSBv
biBlYWNoIG9mIHRoZW0gd2hlbiBhc2tlZC4KLWNsYXNzIFBhcmFtZXRlcml6ZWRUZXN0Q2FzZUlu
Zm9CYXNlIHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgflBhcmFtZXRlcml6ZWRUZXN0Q2FzZUluZm9C
YXNlKCkge30KLQotICAvLyBCYXNlIHBhcnQgb2YgdGVzdCBjYXNlIG5hbWUgZm9yIGRpc3BsYXkg
cHVycG9zZXMuCi0gIHZpcnR1YWwgY29uc3Qgc3RyaW5nJiBHZXRUZXN0Q2FzZU5hbWUoKSBjb25z
dCA9IDA7Ci0gIC8vIFRlc3QgY2FzZSBpZCB0byB2ZXJpZnkgaWRlbnRpdHkuCi0gIHZpcnR1YWwg
VHlwZUlkIEdldFRlc3RDYXNlVHlwZUlkKCkgY29uc3QgPSAwOwotICAvLyBVbml0VGVzdCBjbGFz
cyBpbnZva2VzIHRoaXMgbWV0aG9kIHRvIHJlZ2lzdGVyIHRlc3RzIGluIHRoaXMKLSAgLy8gdGVz
dCBjYXNlIHJpZ2h0IGJlZm9yZSBydW5uaW5nIHRoZW0gaW4gUlVOX0FMTF9URVNUUyBtYWNyby4K
LSAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgbW9yZSB0aGVuIG9uY2Ugb24g
YW55IHNpbmdsZQotICAvLyBpbnN0YW5jZSBvZiBhIFBhcmFtZXRlcml6ZWRUZXN0Q2FzZUluZm9C
YXNlIGRlcml2ZWQgY2xhc3MuCi0gIHZpcnR1YWwgdm9pZCBSZWdpc3RlclRlc3RzKCkgPSAwOwot
Ci0gcHJvdGVjdGVkOgotICBQYXJhbWV0ZXJpemVkVGVzdENhc2VJbmZvQmFzZSgpIHt9Ci0KLSBw
cml2YXRlOgotICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJR05fKFBhcmFtZXRlcml6ZWRU
ZXN0Q2FzZUluZm9CYXNlKTsKLX07Ci0KLS8vIElOVEVSTkFMIElNUExFTUVOVEFUSU9OIC0gRE8g
Tk9UIFVTRSBJTiBVU0VSIENPREUuCi0vLwotLy8gUGFyYW1ldGVyaXplZFRlc3RDYXNlSW5mbyBh
Y2N1bXVsYXRlcyB0ZXN0cyBvYnRhaW5lZCBmcm9tIFRFU1RfUAotLy8gbWFjcm8gaW52b2NhdGlv
bnMgZm9yIGEgcGFydGljdWxhciB0ZXN0IGNhc2UgYW5kIGdlbmVyYXRvcnMKLS8vIG9idGFpbmVk
IGZyb20gSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AgbWFjcm8gaW52b2NhdGlvbnMgZm9yIHRoYXQK
LS8vIHRlc3QgY2FzZS4gSXQgcmVnaXN0ZXJzIHRlc3RzIHdpdGggYWxsIHZhbHVlcyBnZW5lcmF0
ZWQgYnkgYWxsCi0vLyBnZW5lcmF0b3JzIHdoZW4gYXNrZWQuCi10ZW1wbGF0ZSA8Y2xhc3MgVGVz
dENhc2U+Ci1jbGFzcyBQYXJhbWV0ZXJpemVkVGVzdENhc2VJbmZvIDogcHVibGljIFBhcmFtZXRl
cml6ZWRUZXN0Q2FzZUluZm9CYXNlIHsKLSBwdWJsaWM6Ci0gIC8vIFBhcmFtVHlwZSBhbmQgR2Vu
ZXJhdG9yQ3JlYXRpb25GdW5jIGFyZSBwcml2YXRlIHR5cGVzIGJ1dCBhcmUgcmVxdWlyZWQKLSAg
Ly8gZm9yIGRlY2xhcmF0aW9ucyBvZiBwdWJsaWMgbWV0aG9kcyBBZGRUZXN0UGF0dGVybigpIGFu
ZAotICAvLyBBZGRUZXN0Q2FzZUluc3RhbnRpYXRpb24oKS4KLSAgdHlwZWRlZiB0eXBlbmFtZSBU
ZXN0Q2FzZTo6UGFyYW1UeXBlIFBhcmFtVHlwZTsKLSAgLy8gQSBmdW5jdGlvbiB0aGF0IHJldHVy
bnMgYW4gaW5zdGFuY2Ugb2YgYXBwcm9wcmlhdGUgZ2VuZXJhdG9yIHR5cGUuCi0gIHR5cGVkZWYg
UGFyYW1HZW5lcmF0b3I8UGFyYW1UeXBlPihHZW5lcmF0b3JDcmVhdGlvbkZ1bmMpKCk7Ci0gIHR5
cGVkZWYgdHlwZW5hbWUgUGFyYW1OYW1lR2VuRnVuYzxQYXJhbVR5cGU+OjpUeXBlIFBhcmFtTmFt
ZUdlbmVyYXRvckZ1bmM7Ci0KLSAgZXhwbGljaXQgUGFyYW1ldGVyaXplZFRlc3RDYXNlSW5mbygK
LSAgICAgIGNvbnN0IGNoYXIqIG5hbWUsIENvZGVMb2NhdGlvbiBjb2RlX2xvY2F0aW9uKQotICAg
ICAgOiB0ZXN0X2Nhc2VfbmFtZV8obmFtZSksIGNvZGVfbG9jYXRpb25fKGNvZGVfbG9jYXRpb24p
IHt9Ci0KLSAgLy8gVGVzdCBjYXNlIGJhc2UgbmFtZSBmb3IgZGlzcGxheSBwdXJwb3Nlcy4KLSAg
dmlydHVhbCBjb25zdCBzdHJpbmcmIEdldFRlc3RDYXNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIHRl
c3RfY2FzZV9uYW1lXzsgfQotICAvLyBUZXN0IGNhc2UgaWQgdG8gdmVyaWZ5IGlkZW50aXR5Lgot
ICB2aXJ0dWFsIFR5cGVJZCBHZXRUZXN0Q2FzZVR5cGVJZCgpIGNvbnN0IHsgcmV0dXJuIEdldFR5
cGVJZDxUZXN0Q2FzZT4oKTsgfQotICAvLyBURVNUX1AgbWFjcm8gdXNlcyBBZGRUZXN0UGF0dGVy
bigpIHRvIHJlY29yZCBpbmZvcm1hdGlvbgotICAvLyBhYm91dCBhIHNpbmdsZSB0ZXN0IGluIGEg
TG9jYWxUZXN0SW5mbyBzdHJ1Y3R1cmUuCi0gIC8vIHRlc3RfY2FzZV9uYW1lIGlzIHRoZSBiYXNl
IG5hbWUgb2YgdGhlIHRlc3QgY2FzZSAod2l0aG91dCBpbnZvY2F0aW9uCi0gIC8vIHByZWZpeCku
IHRlc3RfYmFzZV9uYW1lIGlzIHRoZSBuYW1lIG9mIGFuIGluZGl2aWR1YWwgdGVzdCB3aXRob3V0
Ci0gIC8vIHBhcmFtZXRlciBpbmRleC4gRm9yIHRoZSB0ZXN0IFNlcXVlbmNlQS9Gb29UZXN0LkRv
QmFyLzEgRm9vVGVzdCBpcwotICAvLyB0ZXN0IGNhc2UgYmFzZSBuYW1lIGFuZCBEb0JhciBpcyB0
ZXN0IGJhc2UgbmFtZS4KLSAgdm9pZCBBZGRUZXN0UGF0dGVybihjb25zdCBjaGFyKiB0ZXN0X2Nh
c2VfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0ZXN0X2Jhc2VfbmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICBUZXN0TWV0YUZhY3RvcnlCYXNlPFBhcmFtVHlwZT4q
IG1ldGFfZmFjdG9yeSkgewotICAgIHRlc3RzXy5wdXNoX2JhY2sobGlua2VkX3B0cjxUZXN0SW5m
bz4obmV3IFRlc3RJbmZvKHRlc3RfY2FzZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfYmFzZV9uYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFfZmFjdG9y
eSkpKTsKLSAgfQotICAvLyBJTlNUQU5USUFURV9URVNUX0NBU0VfUCBtYWNybyB1c2VzIEFkZEdl
bmVyYXRvcigpIHRvIHJlY29yZCBpbmZvcm1hdGlvbgotICAvLyBhYm91dCBhIGdlbmVyYXRvci4K
LSAgaW50IEFkZFRlc3RDYXNlSW5zdGFudGlhdGlvbihjb25zdCBzdHJpbmcmIGluc3RhbnRpYXRp
b25fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3JDcmVhdGlv
bkZ1bmMqIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYW1OYW1lR2Vu
ZXJhdG9yRnVuYyogbmFtZV9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmUp
IHsKLSAgICBpbnN0YW50aWF0aW9uc18ucHVzaF9iYWNrKAotICAgICAgICBJbnN0YW50aWF0aW9u
SW5mbyhpbnN0YW50aWF0aW9uX25hbWUsIGZ1bmMsIG5hbWVfZnVuYywgZmlsZSwgbGluZSkpOwot
ICAgIHJldHVybiAwOyAgLy8gUmV0dXJuIHZhbHVlIHVzZWQgb25seSB0byBydW4gdGhpcyBtZXRo
b2QgaW4gbmFtZXNwYWNlIHNjb3BlLgotICB9Ci0gIC8vIFVuaXRUZXN0IGNsYXNzIGludm9rZXMg
dGhpcyBtZXRob2QgdG8gcmVnaXN0ZXIgdGVzdHMgaW4gdGhpcyB0ZXN0IGNhc2UKLSAgLy8gdGVz
dCBjYXNlcyByaWdodCBiZWZvcmUgcnVubmluZyB0ZXN0cyBpbiBSVU5fQUxMX1RFU1RTIG1hY3Jv
LgotICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBtb3JlIHRoZW4gb25jZSBv
biBhbnkgc2luZ2xlCi0gIC8vIGluc3RhbmNlIG9mIGEgUGFyYW1ldGVyaXplZFRlc3RDYXNlSW5m
b0Jhc2UgZGVyaXZlZCBjbGFzcy4KLSAgLy8gVW5pdFRlc3QgaGFzIGEgZ3VhcmQgdG8gcHJldmVu
dCBmcm9tIGNhbGxpbmcgdGhpcyBtZXRob2QgbW9yZSB0aGVuIG9uY2UuCi0gIHZpcnR1YWwgdm9p
ZCBSZWdpc3RlclRlc3RzKCkgewotICAgIGZvciAodHlwZW5hbWUgVGVzdEluZm9Db250YWluZXI6
Oml0ZXJhdG9yIHRlc3RfaXQgPSB0ZXN0c18uYmVnaW4oKTsKLSAgICAgICAgIHRlc3RfaXQgIT0g
dGVzdHNfLmVuZCgpOyArK3Rlc3RfaXQpIHsKLSAgICAgIGxpbmtlZF9wdHI8VGVzdEluZm8+IHRl
c3RfaW5mbyA9ICp0ZXN0X2l0OwotICAgICAgZm9yICh0eXBlbmFtZSBJbnN0YW50aWF0aW9uQ29u
dGFpbmVyOjppdGVyYXRvciBnZW5faXQgPQotICAgICAgICAgICAgICAgaW5zdGFudGlhdGlvbnNf
LmJlZ2luKCk7IGdlbl9pdCAhPSBpbnN0YW50aWF0aW9uc18uZW5kKCk7Ci0gICAgICAgICAgICAg
ICArK2dlbl9pdCkgewotICAgICAgICBjb25zdCBzdHJpbmcmIGluc3RhbnRpYXRpb25fbmFtZSA9
IGdlbl9pdC0+bmFtZTsKLSAgICAgICAgUGFyYW1HZW5lcmF0b3I8UGFyYW1UeXBlPiBnZW5lcmF0
b3IoKCpnZW5faXQtPmdlbmVyYXRvcikoKSk7Ci0gICAgICAgIFBhcmFtTmFtZUdlbmVyYXRvckZ1
bmMqIG5hbWVfZnVuYyA9IGdlbl9pdC0+bmFtZV9mdW5jOwotICAgICAgICBjb25zdCBjaGFyKiBm
aWxlID0gZ2VuX2l0LT5maWxlOwotICAgICAgICBpbnQgbGluZSA9IGdlbl9pdC0+bGluZTsKLQot
ICAgICAgICBzdHJpbmcgdGVzdF9jYXNlX25hbWU7Ci0gICAgICAgIGlmICggIWluc3RhbnRpYXRp
b25fbmFtZS5lbXB0eSgpICkKLSAgICAgICAgICB0ZXN0X2Nhc2VfbmFtZSA9IGluc3RhbnRpYXRp
b25fbmFtZSArICIvIjsKLSAgICAgICAgdGVzdF9jYXNlX25hbWUgKz0gdGVzdF9pbmZvLT50ZXN0
X2Nhc2VfYmFzZV9uYW1lOwotCi0gICAgICAgIHNpemVfdCBpID0gMDsKLSAgICAgICAgc3RkOjpz
ZXQ8c3RkOjpzdHJpbmc+IHRlc3RfcGFyYW1fbmFtZXM7Ci0gICAgICAgIGZvciAodHlwZW5hbWUg
UGFyYW1HZW5lcmF0b3I8UGFyYW1UeXBlPjo6aXRlcmF0b3IgcGFyYW1faXQgPQotICAgICAgICAg
ICAgICAgICBnZW5lcmF0b3IuYmVnaW4oKTsKLSAgICAgICAgICAgICBwYXJhbV9pdCAhPSBnZW5l
cmF0b3IuZW5kKCk7ICsrcGFyYW1faXQsICsraSkgewotICAgICAgICAgIE1lc3NhZ2UgdGVzdF9u
YW1lX3N0cmVhbTsKLQotICAgICAgICAgIHN0ZDo6c3RyaW5nIHBhcmFtX25hbWUgPSBuYW1lX2Z1
bmMoCi0gICAgICAgICAgICAgIFRlc3RQYXJhbUluZm88UGFyYW1UeXBlPigqcGFyYW1faXQsIGkp
KTsKLQotICAgICAgICAgIEdURVNUX0NIRUNLXyhJc1ZhbGlkUGFyYW1OYW1lKHBhcmFtX25hbWUp
KQotICAgICAgICAgICAgICA8PCAiUGFyYW1ldGVyaXplZCB0ZXN0IG5hbWUgJyIgPDwgcGFyYW1f
bmFtZQotICAgICAgICAgICAgICA8PCAiJyBpcyBpbnZhbGlkLCBpbiAiIDw8IGZpbGUKLSAgICAg
ICAgICAgICAgPDwgIiBsaW5lICIgPDwgbGluZSA8PCBzdGQ6OmVuZGw7Ci0KLSAgICAgICAgICBH
VEVTVF9DSEVDS18odGVzdF9wYXJhbV9uYW1lcy5jb3VudChwYXJhbV9uYW1lKSA9PSAwKQotICAg
ICAgICAgICAgICA8PCAiRHVwbGljYXRlIHBhcmFtZXRlcml6ZWQgdGVzdCBuYW1lICciIDw8IHBh
cmFtX25hbWUKLSAgICAgICAgICAgICAgPDwgIicsIGluICIgPDwgZmlsZSA8PCAiIGxpbmUgIiA8
PCBsaW5lIDw8IHN0ZDo6ZW5kbDsKLQotICAgICAgICAgIHRlc3RfcGFyYW1fbmFtZXMuaW5zZXJ0
KHBhcmFtX25hbWUpOwotCi0gICAgICAgICAgdGVzdF9uYW1lX3N0cmVhbSA8PCB0ZXN0X2luZm8t
PnRlc3RfYmFzZV9uYW1lIDw8ICIvIiA8PCBwYXJhbV9uYW1lOwotICAgICAgICAgIE1ha2VBbmRS
ZWdpc3RlclRlc3RJbmZvKAotICAgICAgICAgICAgICB0ZXN0X2Nhc2VfbmFtZS5jX3N0cigpLAot
ICAgICAgICAgICAgICB0ZXN0X25hbWVfc3RyZWFtLkdldFN0cmluZygpLmNfc3RyKCksCi0gICAg
ICAgICAgICAgIE5VTEwsICAvLyBObyB0eXBlIHBhcmFtZXRlci4KLSAgICAgICAgICAgICAgUHJp
bnRUb1N0cmluZygqcGFyYW1faXQpLmNfc3RyKCksCi0gICAgICAgICAgICAgIGNvZGVfbG9jYXRp
b25fLAotICAgICAgICAgICAgICBHZXRUZXN0Q2FzZVR5cGVJZCgpLAotICAgICAgICAgICAgICBU
ZXN0Q2FzZTo6U2V0VXBUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgVGVzdENhc2U6OlRlYXJEb3du
VGVzdENhc2UsCi0gICAgICAgICAgICAgIHRlc3RfaW5mby0+dGVzdF9tZXRhX2ZhY3RvcnktPkNy
ZWF0ZVRlc3RGYWN0b3J5KCpwYXJhbV9pdCkpOwotICAgICAgICB9ICAvLyBmb3IgcGFyYW1faXQK
LSAgICAgIH0gIC8vIGZvciBnZW5faXQKLSAgICB9ICAvLyBmb3IgdGVzdF9pdAotICB9ICAvLyBS
ZWdpc3RlclRlc3RzCi0KLSBwcml2YXRlOgotICAvLyBMb2NhbFRlc3RJbmZvIHN0cnVjdHVyZSBr
ZWVwcyBpbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSB0ZXN0IHJlZ2lzdGVyZWQKLSAgLy8gd2l0
aCBURVNUX1AgbWFjcm8uCi0gIHN0cnVjdCBUZXN0SW5mbyB7Ci0gICAgVGVzdEluZm8oY29uc3Qg
Y2hhciogYV90ZXN0X2Nhc2VfYmFzZV9uYW1lLAotICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFf
dGVzdF9iYXNlX25hbWUsCi0gICAgICAgICAgICAgVGVzdE1ldGFGYWN0b3J5QmFzZTxQYXJhbVR5
cGU+KiBhX3Rlc3RfbWV0YV9mYWN0b3J5KSA6Ci0gICAgICAgIHRlc3RfY2FzZV9iYXNlX25hbWUo
YV90ZXN0X2Nhc2VfYmFzZV9uYW1lKSwKLSAgICAgICAgdGVzdF9iYXNlX25hbWUoYV90ZXN0X2Jh
c2VfbmFtZSksCi0gICAgICAgIHRlc3RfbWV0YV9mYWN0b3J5KGFfdGVzdF9tZXRhX2ZhY3Rvcnkp
IHt9Ci0KLSAgICBjb25zdCBzdHJpbmcgdGVzdF9jYXNlX2Jhc2VfbmFtZTsKLSAgICBjb25zdCBz
dHJpbmcgdGVzdF9iYXNlX25hbWU7Ci0gICAgY29uc3Qgc2NvcGVkX3B0cjxUZXN0TWV0YUZhY3Rv
cnlCYXNlPFBhcmFtVHlwZT4gPiB0ZXN0X21ldGFfZmFjdG9yeTsKLSAgfTsKLSAgdHlwZWRlZiA6
OnN0ZDo6dmVjdG9yPGxpbmtlZF9wdHI8VGVzdEluZm8+ID4gVGVzdEluZm9Db250YWluZXI7Ci0g
IC8vIFJlY29yZHMgZGF0YSByZWNlaXZlZCBmcm9tIElOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QIG1h
Y3JvczoKLSAgLy8gIDxJbnN0YW50aWF0aW9uIG5hbWUsIFNlcXVlbmNlIGdlbmVyYXRvciBjcmVh
dGlvbiBmdW5jdGlvbiwKLSAgLy8gICAgIE5hbWUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBTb3VyY2Ug
ZmlsZSwgU291cmNlIGxpbmU+Ci0gIHN0cnVjdCBJbnN0YW50aWF0aW9uSW5mbyB7Ci0gICAgICBJ
bnN0YW50aWF0aW9uSW5mbyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZV9pbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEdlbmVyYXRvckNyZWF0aW9uRnVuYyogZ2VuZXJhdG9yX2luLAotICAgICAg
ICAgICAgICAgICAgICAgICAgUGFyYW1OYW1lR2VuZXJhdG9yRnVuYyogbmFtZV9mdW5jX2luLAot
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZmlsZV9pbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBsaW5lX2luKQotICAgICAgICAgIDogbmFtZShuYW1lX2luKSwKLSAg
ICAgICAgICAgIGdlbmVyYXRvcihnZW5lcmF0b3JfaW4pLAotICAgICAgICAgICAgbmFtZV9mdW5j
KG5hbWVfZnVuY19pbiksCi0gICAgICAgICAgICBmaWxlKGZpbGVfaW4pLAotICAgICAgICAgICAg
bGluZShsaW5lX2luKSB7fQotCi0gICAgICBzdGQ6OnN0cmluZyBuYW1lOwotICAgICAgR2VuZXJh
dG9yQ3JlYXRpb25GdW5jKiBnZW5lcmF0b3I7Ci0gICAgICBQYXJhbU5hbWVHZW5lcmF0b3JGdW5j
KiBuYW1lX2Z1bmM7Ci0gICAgICBjb25zdCBjaGFyKiBmaWxlOwotICAgICAgaW50IGxpbmU7Ci0g
IH07Ci0gIHR5cGVkZWYgOjpzdGQ6OnZlY3RvcjxJbnN0YW50aWF0aW9uSW5mbz4gSW5zdGFudGlh
dGlvbkNvbnRhaW5lcjsKLQotICBzdGF0aWMgYm9vbCBJc1ZhbGlkUGFyYW1OYW1lKGNvbnN0IHN0
ZDo6c3RyaW5nJiBuYW1lKSB7Ci0gICAgLy8gQ2hlY2sgZm9yIGVtcHR5IHN0cmluZwotICAgIGlm
IChuYW1lLmVtcHR5KCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDaGVjayBmb3Ig
aW52YWxpZCBjaGFyYWN0ZXJzCi0gICAgZm9yIChzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGluZGV4
ID0gMDsgaW5kZXggPCBuYW1lLnNpemUoKTsgKytpbmRleCkgewotICAgICAgaWYgKCFpc2FsbnVt
KG5hbWVbaW5kZXhdKSAmJiBuYW1lW2luZGV4XSAhPSAnXycpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGNvbnN0IHN0cmluZyB0ZXN0
X2Nhc2VfbmFtZV87Ci0gIENvZGVMb2NhdGlvbiBjb2RlX2xvY2F0aW9uXzsKLSAgVGVzdEluZm9D
b250YWluZXIgdGVzdHNfOwotICBJbnN0YW50aWF0aW9uQ29udGFpbmVyIGluc3RhbnRpYXRpb25z
XzsKLQotICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJR05fKFBhcmFtZXRlcml6ZWRUZXN0
Q2FzZUluZm8pOwotfTsgIC8vIGNsYXNzIFBhcmFtZXRlcml6ZWRUZXN0Q2FzZUluZm8KLQotLy8g
SU5URVJOQUwgSU1QTEVNRU5UQVRJT04gLSBETyBOT1QgVVNFIElOIFVTRVIgQ09ERS4KLS8vCi0v
LyBQYXJhbWV0ZXJpemVkVGVzdENhc2VSZWdpc3RyeSBjb250YWlucyBhIG1hcCBvZiBQYXJhbWV0
ZXJpemVkVGVzdENhc2VJbmZvQmFzZQotLy8gY2xhc3NlcyBhY2Nlc3NlZCBieSB0ZXN0IGNhc2Ug
bmFtZXMuIFRFU1RfUCBhbmQgSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AKLS8vIG1hY3JvcyB1c2Ug
aXQgdG8gbG9jYXRlIHRoZWlyIGNvcnJlc3BvbmRpbmcgUGFyYW1ldGVyaXplZFRlc3RDYXNlSW5m
bwotLy8gZGVzY3JpcHRvcnMuCi1jbGFzcyBQYXJhbWV0ZXJpemVkVGVzdENhc2VSZWdpc3RyeSB7
Ci0gcHVibGljOgotICBQYXJhbWV0ZXJpemVkVGVzdENhc2VSZWdpc3RyeSgpIHt9Ci0gIH5QYXJh
bWV0ZXJpemVkVGVzdENhc2VSZWdpc3RyeSgpIHsKLSAgICBmb3IgKFRlc3RDYXNlSW5mb0NvbnRh
aW5lcjo6aXRlcmF0b3IgaXQgPSB0ZXN0X2Nhc2VfaW5mb3NfLmJlZ2luKCk7Ci0gICAgICAgICBp
dCAhPSB0ZXN0X2Nhc2VfaW5mb3NfLmVuZCgpOyArK2l0KSB7Ci0gICAgICBkZWxldGUgKml0Owot
ICAgIH0KLSAgfQotCi0gIC8vIExvb2tzIHVwIG9yIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBzdHJ1
Y3R1cmUgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dAotICAvLyB0ZXN0cyBhbmQgaW5zdGFu
dGlhdGlvbnMgb2YgYSBwYXJ0aWN1bGFyIHRlc3QgY2FzZS4KLSAgdGVtcGxhdGUgPGNsYXNzIFRl
c3RDYXNlPgotICBQYXJhbWV0ZXJpemVkVGVzdENhc2VJbmZvPFRlc3RDYXNlPiogR2V0VGVzdENh
c2VQYXR0ZXJuSG9sZGVyKAotICAgICAgY29uc3QgY2hhciogdGVzdF9jYXNlX25hbWUsCi0gICAg
ICBDb2RlTG9jYXRpb24gY29kZV9sb2NhdGlvbikgewotICAgIFBhcmFtZXRlcml6ZWRUZXN0Q2Fz
ZUluZm88VGVzdENhc2U+KiB0eXBlZF90ZXN0X2luZm8gPSBOVUxMOwotICAgIGZvciAoVGVzdENh
c2VJbmZvQ29udGFpbmVyOjppdGVyYXRvciBpdCA9IHRlc3RfY2FzZV9pbmZvc18uYmVnaW4oKTsK
LSAgICAgICAgIGl0ICE9IHRlc3RfY2FzZV9pbmZvc18uZW5kKCk7ICsraXQpIHsKLSAgICAgIGlm
ICgoKml0KS0+R2V0VGVzdENhc2VOYW1lKCkgPT0gdGVzdF9jYXNlX25hbWUpIHsKLSAgICAgICAg
aWYgKCgqaXQpLT5HZXRUZXN0Q2FzZVR5cGVJZCgpICE9IEdldFR5cGVJZDxUZXN0Q2FzZT4oKSkg
ewotICAgICAgICAgIC8vIENvbXBsYWluIGFib3V0IGluY29ycmVjdCB1c2FnZSBvZiBHb29nbGUg
VGVzdCBmYWNpbGl0aWVzCi0gICAgICAgICAgLy8gYW5kIHRlcm1pbmF0ZSB0aGUgcHJvZ3JhbSBz
aW5jZSB3ZSBjYW5ub3QgZ3VhcmFudHkgY29ycmVjdAotICAgICAgICAgIC8vIHRlc3QgY2FzZSBz
ZXR1cCBhbmQgdGVhci1kb3duIGluIHRoaXMgY2FzZS4KLSAgICAgICAgICBSZXBvcnRJbnZhbGlk
VGVzdENhc2VUeXBlKHRlc3RfY2FzZV9uYW1lLCBjb2RlX2xvY2F0aW9uKTsKLSAgICAgICAgICBw
b3NpeDo6QWJvcnQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyBBdCB0aGlzIHBv
aW50IHdlIGFyZSBzdXJlIHRoYXQgdGhlIG9iamVjdCB3ZSBmb3VuZCBpcyBvZiB0aGUgc2FtZQot
ICAgICAgICAgIC8vIHR5cGUgd2UgYXJlIGxvb2tpbmcgZm9yLCBzbyB3ZSBkb3duY2FzdCBpdCB0
byB0aGF0IHR5cGUKLSAgICAgICAgICAvLyB3aXRob3V0IGZ1cnRoZXIgY2hlY2tzLgotICAgICAg
ICAgIHR5cGVkX3Rlc3RfaW5mbyA9IENoZWNrZWREb3duY2FzdFRvQWN0dWFsVHlwZTwKLSAgICAg
ICAgICAgICAgUGFyYW1ldGVyaXplZFRlc3RDYXNlSW5mbzxUZXN0Q2FzZT4gPigqaXQpOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodHlwZWRfdGVz
dF9pbmZvID09IE5VTEwpIHsKLSAgICAgIHR5cGVkX3Rlc3RfaW5mbyA9IG5ldyBQYXJhbWV0ZXJp
emVkVGVzdENhc2VJbmZvPFRlc3RDYXNlPigKLSAgICAgICAgICB0ZXN0X2Nhc2VfbmFtZSwgY29k
ZV9sb2NhdGlvbik7Ci0gICAgICB0ZXN0X2Nhc2VfaW5mb3NfLnB1c2hfYmFjayh0eXBlZF90ZXN0
X2luZm8pOwotICAgIH0KLSAgICByZXR1cm4gdHlwZWRfdGVzdF9pbmZvOwotICB9Ci0gIHZvaWQg
UmVnaXN0ZXJUZXN0cygpIHsKLSAgICBmb3IgKFRlc3RDYXNlSW5mb0NvbnRhaW5lcjo6aXRlcmF0
b3IgaXQgPSB0ZXN0X2Nhc2VfaW5mb3NfLmJlZ2luKCk7Ci0gICAgICAgICBpdCAhPSB0ZXN0X2Nh
c2VfaW5mb3NfLmVuZCgpOyArK2l0KSB7Ci0gICAgICAoKml0KS0+UmVnaXN0ZXJUZXN0cygpOwot
ICAgIH0KLSAgfQotCi0gcHJpdmF0ZToKLSAgdHlwZWRlZiA6OnN0ZDo6dmVjdG9yPFBhcmFtZXRl
cml6ZWRUZXN0Q2FzZUluZm9CYXNlKj4gVGVzdENhc2VJbmZvQ29udGFpbmVyOwotCi0gIFRlc3RD
YXNlSW5mb0NvbnRhaW5lciB0ZXN0X2Nhc2VfaW5mb3NfOwotCi0gIEdURVNUX0RJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTl8oUGFyYW1ldGVyaXplZFRlc3RDYXNlUmVnaXN0cnkpOwotfTsKLQotfSAg
Ly8gbmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgdGVzdGluZwotCi0jZW5kaWYg
IC8vICBHVEVTVF9IQVNfUEFSQU1fVEVTVAotCi0jZW5kaWYgIC8vIEdURVNUX0lOQ0xVREVfR1RF
U1RfSU5URVJOQUxfR1RFU1RfUEFSQU1fVVRJTF9IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2lu
dGVybmFsL2d0ZXN0LXBvcnQtYXJjaC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
Zm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2d0ZXN0LXBvcnQt
YXJjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGFiOTQ5MDU3YzczNGZhNDkx
ODhlOGQ2YmM0ZTc0YmU5MTBkYzBkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dv
b2dsZXRlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1wb3J0LWFyY2guaAorKysgL2Rl
di9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1LCBHb29nbGUgSW5jLgot
Ly8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLS8vCi0vLyBUaGUgR29vZ2xlIEMrKyBUZXN0aW5nIEZyYW1ld29yayAoR29v
Z2xlIFRlc3QpCi0vLwotLy8gVGhpcyBoZWFkZXIgZmlsZSBkZWZpbmVzIHRoZSBHVEVTVF9PU18q
IG1hY3JvLgotLy8gSXQgaXMgc2VwYXJhdGUgZnJvbSBndGVzdC1wb3J0Lmggc28gdGhhdCBjdXN0
b20vZ3Rlc3QtcG9ydC5oIGNhbiBpbmNsdWRlIGl0LgotCi0jaWZuZGVmIEdURVNUX0lOQ0xVREVf
R1RFU1RfSU5URVJOQUxfR1RFU1RfUE9SVF9BUkNIX0hfCi0jZGVmaW5lIEdURVNUX0lOQ0xVREVf
R1RFU1RfSU5URVJOQUxfR1RFU1RfUE9SVF9BUkNIX0hfCi0KLS8vIERldGVybWluZXMgdGhlIHBs
YXRmb3JtIG9uIHdoaWNoIEdvb2dsZSBUZXN0IGlzIGNvbXBpbGVkLgotI2lmZGVmIF9fQ1lHV0lO
X18KLSMgZGVmaW5lIEdURVNUX09TX0NZR1dJTiAxCi0jZWxpZiBkZWZpbmVkIF9fU1lNQklBTjMy
X18KLSMgZGVmaW5lIEdURVNUX09TX1NZTUJJQU4gMQotI2VsaWYgZGVmaW5lZCBfV0lOMzIKLSMg
ZGVmaW5lIEdURVNUX09TX1dJTkRPV1MgMQotIyBpZmRlZiBfV0lOMzJfV0NFCi0jICBkZWZpbmUg
R1RFU1RfT1NfV0lORE9XU19NT0JJTEUgMQotIyBlbGlmIGRlZmluZWQoX19NSU5HV19fKSB8fCBk
ZWZpbmVkKF9fTUlOR1czMl9fKQotIyAgZGVmaW5lIEdURVNUX09TX1dJTkRPV1NfTUlOR1cgMQot
IyBlbGlmIGRlZmluZWQoV0lOQVBJX0ZBTUlMWSkKLSMgIGluY2x1ZGUgPHdpbmFwaWZhbWlseS5o
PgotIyAgaWYgV0lOQVBJX0ZBTUlMWV9QQVJUSVRJT04oV0lOQVBJX1BBUlRJVElPTl9ERVNLVE9Q
KQotIyAgIGRlZmluZSBHVEVTVF9PU19XSU5ET1dTX0RFU0tUT1AgMQotIyAgZWxpZiBXSU5BUElf
RkFNSUxZX1BBUlRJVElPTihXSU5BUElfUEFSVElUSU9OX1BIT05FX0FQUCkKLSMgICBkZWZpbmUg
R1RFU1RfT1NfV0lORE9XU19QSE9ORSAxCi0jICBlbGlmIFdJTkFQSV9GQU1JTFlfUEFSVElUSU9O
KFdJTkFQSV9QQVJUSVRJT05fQVBQKQotIyAgIGRlZmluZSBHVEVTVF9PU19XSU5ET1dTX1JUIDEK
LSMgIGVsc2UKLSAgICAvLyBXSU5BUElfRkFNSUxZIGRlZmluZWQgYnV0IG5vIGtub3duIHBhcnRp
dGlvbiBtYXRjaGVkLgotICAgIC8vIERlZmF1bHQgdG8gZGVza3RvcC4KLSMgICBkZWZpbmUgR1RF
U1RfT1NfV0lORE9XU19ERVNLVE9QIDEKLSMgIGVuZGlmCi0jIGVsc2UKLSMgIGRlZmluZSBHVEVT
VF9PU19XSU5ET1dTX0RFU0tUT1AgMQotIyBlbmRpZiAgLy8gX1dJTjMyX1dDRQotI2VsaWYgZGVm
aW5lZCBfX0FQUExFX18KLSMgZGVmaW5lIEdURVNUX09TX01BQyAxCi0jIGlmIFRBUkdFVF9PU19J
UEhPTkUKLSMgIGRlZmluZSBHVEVTVF9PU19JT1MgMQotIyBlbmRpZgotI2VsaWYgZGVmaW5lZCBf
X0ZyZWVCU0RfXwotIyBkZWZpbmUgR1RFU1RfT1NfRlJFRUJTRCAxCi0jZWxpZiBkZWZpbmVkIF9f
bGludXhfXwotIyBkZWZpbmUgR1RFU1RfT1NfTElOVVggMQotIyBpZiBkZWZpbmVkIF9fQU5EUk9J
RF9fCi0jICBkZWZpbmUgR1RFU1RfT1NfTElOVVhfQU5EUk9JRCAxCi0jIGVuZGlmCi0jZWxpZiBk
ZWZpbmVkIF9fTVZTX18KLSMgZGVmaW5lIEdURVNUX09TX1pPUyAxCi0jZWxpZiBkZWZpbmVkKF9f
c3VuKSAmJiBkZWZpbmVkKF9fU1ZSNCkKLSMgZGVmaW5lIEdURVNUX09TX1NPTEFSSVMgMQotI2Vs
aWYgZGVmaW5lZChfQUlYKQotIyBkZWZpbmUgR1RFU1RfT1NfQUlYIDEKLSNlbGlmIGRlZmluZWQo
X19ocHV4KQotIyBkZWZpbmUgR1RFU1RfT1NfSFBVWCAxCi0jZWxpZiBkZWZpbmVkIF9fbmF0aXZl
X2NsaWVudF9fCi0jIGRlZmluZSBHVEVTVF9PU19OQUNMIDEKLSNlbGlmIGRlZmluZWQgX19PcGVu
QlNEX18KLSMgZGVmaW5lIEdURVNUX09TX09QRU5CU0QgMQotI2VsaWYgZGVmaW5lZCBfX1FOWF9f
Ci0jIGRlZmluZSBHVEVTVF9PU19RTlggMQotI2VuZGlmICAvLyBfX0NZR1dJTl9fCi0KLSNlbmRp
ZiAgLy8gR1RFU1RfSU5DTFVERV9HVEVTVF9JTlRFUk5BTF9HVEVTVF9QT1JUX0FSQ0hfSF8KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2ds
ZXRlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1wb3J0LmggYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3QvaW50
ZXJuYWwvZ3Rlc3QtcG9ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDk0ZWQ1
MDc3ZTY5YTU5YWZjM2Y1MzVjOWRjZmM0MDNiMzFmYmJjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2Zv
bGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1wb3J0LmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyNTU0ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDA1LCBHb29n
bGUgSW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLS8vCi0vLyBBdXRob3JzOiB3YW5AZ29vZ2xlLmNvbSAoWmhh
bnlvbmcgV2FuKQotLy8KLS8vIExvdy1sZXZlbCB0eXBlcyBhbmQgdXRpbGl0aWVzIGZvciBwb3J0
aW5nIEdvb2dsZSBUZXN0IHRvIHZhcmlvdXMKLS8vIHBsYXRmb3Jtcy4gIEFsbCBtYWNyb3MgZW5k
aW5nIHdpdGggXyBhbmQgc3ltYm9scyBkZWZpbmVkIGluIGFuCi0vLyBpbnRlcm5hbCBuYW1lc3Bh
Y2UgYXJlIHN1YmplY3QgdG8gY2hhbmdlIHdpdGhvdXQgbm90aWNlLiAgQ29kZQotLy8gb3V0c2lk
ZSBHb29nbGUgVGVzdCBNVVNUIE5PVCBVU0UgVEhFTSBESVJFQ1RMWS4gIE1hY3JvcyB0aGF0IGRv
bid0Ci0vLyBlbmQgd2l0aCBfIGFyZSBwYXJ0IG9mIEdvb2dsZSBUZXN0J3MgcHVibGljIEFQSSBh
bmQgY2FuIGJlIHVzZWQgYnkKLS8vIGNvZGUgb3V0c2lkZSBHb29nbGUgVGVzdC4KLS8vCi0vLyBU
aGlzIGZpbGUgaXMgZnVuZGFtZW50YWwgdG8gR29vZ2xlIFRlc3QuICBBbGwgb3RoZXIgR29vZ2xl
IFRlc3Qgc291cmNlCi0vLyBmaWxlcyBhcmUgZXhwZWN0ZWQgdG8gI2luY2x1ZGUgdGhpcy4gIFRo
ZXJlZm9yZSwgaXQgY2Fubm90ICNpbmNsdWRlCi0vLyBhbnkgb3RoZXIgR29vZ2xlIFRlc3QgaGVh
ZGVyLgotCi0jaWZuZGVmIEdURVNUX0lOQ0xVREVfR1RFU1RfSU5URVJOQUxfR1RFU1RfUE9SVF9I
XwotI2RlZmluZSBHVEVTVF9JTkNMVURFX0dURVNUX0lOVEVSTkFMX0dURVNUX1BPUlRfSF8KLQot
Ly8gRW52aXJvbm1lbnQtZGVzY3JpYmluZyBtYWNyb3MKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLwotLy8gR29vZ2xlIFRlc3QgY2FuIGJlIHVzZWQgaW4gbWFueSBkaWZmZXJl
bnQgZW52aXJvbm1lbnRzLiAgTWFjcm9zIGluCi0vLyB0aGlzIHNlY3Rpb24gdGVsbCBHb29nbGUg
VGVzdCB3aGF0IGtpbmQgb2YgZW52aXJvbm1lbnQgaXQgaXMgYmVpbmcKLS8vIHVzZWQgaW4sIHN1
Y2ggdGhhdCBHb29nbGUgVGVzdCBjYW4gcHJvdmlkZSBlbnZpcm9ubWVudC1zcGVjaWZpYwotLy8g
ZmVhdHVyZXMgYW5kIGltcGxlbWVudGF0aW9ucy4KLS8vCi0vLyBHb29nbGUgVGVzdCB0cmllcyB0
byBhdXRvbWF0aWNhbGx5IGRldGVjdCB0aGUgcHJvcGVydGllcyBvZiBpdHMKLS8vIGVudmlyb25t
ZW50LCBzbyB1c2VycyB1c3VhbGx5IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlc2UKLS8v
IG1hY3Jvcy4gIEhvd2V2ZXIsIHRoZSBhdXRvbWF0aWMgZGV0ZWN0aW9uIGlzIG5vdCBwZXJmZWN0
LgotLy8gU29tZXRpbWVzIGl0J3MgbmVjZXNzYXJ5IGZvciBhIHVzZXIgdG8gZGVmaW5lIHNvbWUg
b2YgdGhlIGZvbGxvd2luZwotLy8gbWFjcm9zIGluIHRoZSBidWlsZCBzY3JpcHQgdG8gb3ZlcnJp
ZGUgR29vZ2xlIFRlc3QncyBkZWNpc2lvbnMuCi0vLwotLy8gSWYgdGhlIHVzZXIgZG9lc24ndCBk
ZWZpbmUgYSBtYWNybyBpbiB0aGUgbGlzdCwgR29vZ2xlIFRlc3Qgd2lsbAotLy8gcHJvdmlkZSBh
IGRlZmF1bHQgZGVmaW5pdGlvbi4gIEFmdGVyIHRoaXMgaGVhZGVyIGlzICNpbmNsdWRlZCwgYWxs
Ci0vLyBtYWNyb3MgaW4gdGhpcyBsaXN0IHdpbGwgYmUgZGVmaW5lZCB0byBlaXRoZXIgMSBvciAw
LgotLy8KLS8vIE5vdGVzIHRvIG1haW50YWluZXJzOgotLy8gICAtIEVhY2ggbWFjcm8gaGVyZSBp
cyBhIHVzZXItdHdlYWthYmxlIGtub2I7IGRvIG5vdCBncm93IHRoZSBsaXN0Ci0vLyAgICAgbGln
aHRseS4KLS8vICAgLSBVc2UgI2lmIHRvIGtleSBvZmYgdGhlc2UgbWFjcm9zLiAgRG9uJ3QgdXNl
ICNpZmRlZiBvciAiI2lmCi0vLyAgICAgZGVmaW5lZCguLi4pIiwgd2hpY2ggd2lsbCBub3Qgd29y
ayBhcyB0aGVzZSBtYWNyb3MgYXJlIEFMV0FZUwotLy8gICAgIGRlZmluZWQuCi0vLwotLy8gICBH
VEVTVF9IQVNfQ0xPTkUgICAgICAgICAgLSBEZWZpbmUgaXQgdG8gMS8wIHRvIGluZGljYXRlIHRo
YXQgY2xvbmUoMikKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMvaXNuJ3QgYXZh
aWxhYmxlLgotLy8gICBHVEVTVF9IQVNfRVhDRVBUSU9OUyAgICAgLSBEZWZpbmUgaXQgdG8gMS8w
IHRvIGluZGljYXRlIHRoYXQgZXhjZXB0aW9ucwotLy8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmUgZW5hYmxlZC4KLS8vICAgR1RFU1RfSEFTX0dMT0JBTF9TVFJJTkcgIC0gRGVmaW5l
IGl0IHRvIDEvMCB0byBpbmRpY2F0ZSB0aGF0IDo6c3RyaW5nCi0vLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlzL2lzbid0IGF2YWlsYWJsZSAoc29tZSBzeXN0ZW1zIGRlZmluZQotLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OnN0cmluZywgd2hpY2ggaXMgZGlmZmVyZW50
IHRvIHN0ZDo6c3RyaW5nKS4KLS8vICAgR1RFU1RfSEFTX0dMT0JBTF9XU1RSSU5HIC0gRGVmaW5l
IGl0IHRvIDEvMCB0byBpbmRpY2F0ZSB0aGF0IDo6c3RyaW5nCi0vLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlzL2lzbid0IGF2YWlsYWJsZSAoc29tZSBzeXN0ZW1zIGRlZmluZQotLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OndzdHJpbmcsIHdoaWNoIGlzIGRpZmZlcmVu
dCB0byBzdGQ6OndzdHJpbmcpLgotLy8gICBHVEVTVF9IQVNfUE9TSVhfUkUgICAgICAgLSBEZWZp
bmUgaXQgdG8gMS8wIHRvIGluZGljYXRlIHRoYXQgUE9TSVggcmVndWxhcgotLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucyBhcmUvYXJlbid0IGF2YWlsYWJsZS4KLS8v
ICAgR1RFU1RfSEFTX1BUSFJFQUQgICAgICAgIC0gRGVmaW5lIGl0IHRvIDEvMCB0byBpbmRpY2F0
ZSB0aGF0IDxwdGhyZWFkLmg+Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzL2lz
bid0IGF2YWlsYWJsZS4KLS8vICAgR1RFU1RfSEFTX1JUVEkgICAgICAgICAgIC0gRGVmaW5lIGl0
IHRvIDEvMCB0byBpbmRpY2F0ZSB0aGF0IFJUVEkgaXMvaXNuJ3QKLS8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5hYmxlZC4KLS8vICAgR1RFU1RfSEFTX1NURF9XU1RSSU5HICAgIC0g
RGVmaW5lIGl0IHRvIDEvMCB0byBpbmRpY2F0ZSB0aGF0Ci0vLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6d3N0cmluZyBkb2VzL2RvZXNuJ3Qgd29yayAoR29vZ2xlIFRlc3QgY2Fu
Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgd2hlcmUgc3RkOjp3c3Ry
aW5nIGlzIHVuYXZhaWxhYmxlKS4KLS8vICAgR1RFU1RfSEFTX1RSMV9UVVBMRSAgICAgIC0gRGVm
aW5lIGl0IHRvIDEvMCB0byBpbmRpY2F0ZSB0cjE6OnR1cGxlCi0vLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlzL2lzbid0IGF2YWlsYWJsZS4KLS8vICAgR1RFU1RfSEFTX1NFSCAgICAg
ICAgICAgIC0gRGVmaW5lIGl0IHRvIDEvMCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZQotLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlciBzdXBwb3J0cyBNaWNyb3NvZnQncyAi
U3RydWN0dXJlZAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gSGFu
ZGxpbmciLgotLy8gICBHVEVTVF9IQVNfU1RSRUFNX1JFRElSRUNUSU9OCi0vLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtIERlZmluZSBpdCB0byAxLzAgdG8gaW5kaWNhdGUgd2hldGhlciB0
aGUKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0gc3VwcG9ydHMgSS9P
IHN0cmVhbSByZWRpcmVjdGlvbiB1c2luZwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkdXAoKSBhbmQgZHVwMigpLgotLy8gICBHVEVTVF9VU0VfT1dOX1RSMV9UVVBMRSAgLSBEZWZp
bmUgaXQgdG8gMS8wIHRvIGluZGljYXRlIHdoZXRoZXIgR29vZ2xlCi0vLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRlc3QncyBvd24gdHIxIHR1cGxlIGltcGxlbWVudGF0aW9uIHNob3Vs
ZCBiZQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkLiAgVW51c2VkIHdoZW4g
dGhlIHVzZXIgc2V0cwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEVTVF9IQVNf
VFIxX1RVUExFIHRvIDAuCi0vLyAgIEdURVNUX0xBTkdfQ1hYMTEgICAgICAgICAtIERlZmluZSBp
dCB0byAxLzAgdG8gaW5kaWNhdGUgdGhhdCBHb29nbGUgVGVzdAotLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpcyBidWlsZGluZyBpbiBDKysxMS9DKys5OCBtb2RlLgotLy8gICBHVEVT
VF9MSU5LRURfQVNfU0hBUkVEX0xJQlJBUlkKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0gRGVmaW5lIHRvIDEgd2hlbiBjb21waWxpbmcgdGVzdHMgdGhhdCB1c2UKLS8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR29vZ2xlIFRlc3QgYXMgYSBzaGFyZWQgbGlicmFyeSAoa25v
d24gYXMKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRExMIG9uIFdpbmRvd3MpLgot
Ly8gICBHVEVTVF9DUkVBVEVfU0hBUkVEX0xJQlJBUlkKLS8vICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0gRGVmaW5lIHRvIDEgd2hlbiBjb21waWxpbmcgR29vZ2xlIFRlc3QgaXRzZWxmCi0v
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgc2hhcmVkIGxpYnJhcnkuCi0KLS8v
IFBsYXRmb3JtLWluZGljYXRpbmcgbWFjcm9zCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotLy8KLS8vIE1hY3JvcyBpbmRpY2F0aW5nIHRoZSBwbGF0Zm9ybSBvbiB3aGljaCBHb29nbGUg
VGVzdCBpcyBiZWluZyB1c2VkCi0vLyAoYSBtYWNybyBpcyBkZWZpbmVkIHRvIDEgaWYgY29tcGls
ZWQgb24gdGhlIGdpdmVuIHBsYXRmb3JtOwotLy8gb3RoZXJ3aXNlIFVOREVGSU5FRCAtLSBpdCdz
IG5ldmVyIGRlZmluZWQgdG8gMC4pLiAgR29vZ2xlIFRlc3QKLS8vIGRlZmluZXMgdGhlc2UgbWFj
cm9zIGF1dG9tYXRpY2FsbHkuICBDb2RlIG91dHNpZGUgR29vZ2xlIFRlc3QgTVVTVAotLy8gTk9U
IGRlZmluZSB0aGVtLgotLy8KLS8vICAgR1RFU1RfT1NfQUlYICAgICAgLSBJQk0gQUlYCi0vLyAg
IEdURVNUX09TX0NZR1dJTiAgIC0gQ3lnd2luCi0vLyAgIEdURVNUX09TX0ZSRUVCU0QgIC0gRnJl
ZUJTRAotLy8gICBHVEVTVF9PU19IUFVYICAgICAtIEhQLVVYCi0vLyAgIEdURVNUX09TX0xJTlVY
ICAgIC0gTGludXgKLS8vICAgICBHVEVTVF9PU19MSU5VWF9BTkRST0lEIC0gR29vZ2xlIEFuZHJv
aWQKLS8vICAgR1RFU1RfT1NfTUFDICAgICAgLSBNYWMgT1MgWAotLy8gICAgIEdURVNUX09TX0lP
UyAgICAtIGlPUwotLy8gICBHVEVTVF9PU19OQUNMICAgICAtIEdvb2dsZSBOYXRpdmUgQ2xpZW50
IChOYUNsKQotLy8gICBHVEVTVF9PU19PUEVOQlNEICAtIE9wZW5CU0QKLS8vICAgR1RFU1RfT1Nf
UU5YICAgICAgLSBRTlgKLS8vICAgR1RFU1RfT1NfU09MQVJJUyAgLSBTdW4gU29sYXJpcwotLy8g
ICBHVEVTVF9PU19TWU1CSUFOICAtIFN5bWJpYW4KLS8vICAgR1RFU1RfT1NfV0lORE9XUyAgLSBX
aW5kb3dzIChEZXNrdG9wLCBNaW5HVywgb3IgTW9iaWxlKQotLy8gICAgIEdURVNUX09TX1dJTkRP
V1NfREVTS1RPUCAgLSBXaW5kb3dzIERlc2t0b3AKLS8vICAgICBHVEVTVF9PU19XSU5ET1dTX01J
TkdXICAgIC0gTWluR1cKLS8vICAgICBHVEVTVF9PU19XSU5ET1dTX01PQklMRSAgIC0gV2luZG93
cyBNb2JpbGUKLS8vICAgICBHVEVTVF9PU19XSU5ET1dTX1BIT05FICAgIC0gV2luZG93cyBQaG9u
ZQotLy8gICAgIEdURVNUX09TX1dJTkRPV1NfUlQgICAgICAgLSBXaW5kb3dzIFN0b3JlIEFwcC9X
aW5SVAotLy8gICBHVEVTVF9PU19aT1MgICAgICAtIHovT1MKLS8vCi0vLyBBbW9uZyB0aGUgcGxh
dGZvcm1zLCBDeWd3aW4sIExpbnV4LCBNYXggT1MgWCwgYW5kIFdpbmRvd3MgaGF2ZSB0aGUKLS8v
IG1vc3Qgc3RhYmxlIHN1cHBvcnQuICBTaW5jZSBjb3JlIG1lbWJlcnMgb2YgdGhlIEdvb2dsZSBU
ZXN0IHByb2plY3QKLS8vIGRvbid0IGhhdmUgYWNjZXNzIHRvIG90aGVyIHBsYXRmb3Jtcywgc3Vw
cG9ydCBmb3IgdGhlbSBtYXkgYmUgbGVzcwotLy8gc3RhYmxlLiAgSWYgeW91IG5vdGljZSBhbnkg
cHJvYmxlbXMgb24geW91ciBwbGF0Zm9ybSwgcGxlYXNlIG5vdGlmeQotLy8gZ29vZ2xldGVzdGZy
YW1ld29ya0Bnb29nbGVncm91cHMuY29tIChwYXRjaGVzIGZvciBmaXhpbmcgdGhlbSBhcmUKLS8v
IGV2ZW4gbW9yZSB3ZWxjb21lISkuCi0vLwotLy8gSXQgaXMgcG9zc2libGUgdGhhdCBub25lIG9m
IHRoZSBHVEVTVF9PU18qIG1hY3JvcyBhcmUgZGVmaW5lZC4KLQotLy8gRmVhdHVyZS1pbmRpY2F0
aW5nIG1hY3JvcwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIE1hY3JvcyBp
bmRpY2F0aW5nIHdoaWNoIEdvb2dsZSBUZXN0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgKGEgbWFj
cm8KLS8vIGlzIGRlZmluZWQgdG8gMSBpZiB0aGUgY29ycmVzcG9uZGluZyBmZWF0dXJlIGlzIHN1
cHBvcnRlZDsKLS8vIG90aGVyd2lzZSBVTkRFRklORUQgLS0gaXQncyBuZXZlciBkZWZpbmVkIHRv
IDAuKS4gIEdvb2dsZSBUZXN0Ci0vLyBkZWZpbmVzIHRoZXNlIG1hY3JvcyBhdXRvbWF0aWNhbGx5
LiAgQ29kZSBvdXRzaWRlIEdvb2dsZSBUZXN0IE1VU1QKLS8vIE5PVCBkZWZpbmUgdGhlbS4KLS8v
Ci0vLyBUaGVzZSBtYWNyb3MgYXJlIHB1YmxpYyBzbyB0aGF0IHBvcnRhYmxlIHRlc3RzIGNhbiBi
ZSB3cml0dGVuLgotLy8gU3VjaCB0ZXN0cyB0eXBpY2FsbHkgc3Vycm91bmQgY29kZSB1c2luZyBh
IGZlYXR1cmUgd2l0aCBhbiAjaWYKLS8vIHdoaWNoIGNvbnRyb2xzIHRoYXQgY29kZS4gIEZvciBl
eGFtcGxlOgotLy8KLS8vICNpZiBHVEVTVF9IQVNfREVBVEhfVEVTVAotLy8gICBFWFBFQ1RfREVB
VEgoRG9Tb21ldGhpbmdEZWFkbHkoKSk7Ci0vLyAjZW5kaWYKLS8vCi0vLyAgIEdURVNUX0hBU19D
T01CSU5FICAgICAgLSB0aGUgQ29tYmluZSgpIGZ1bmN0aW9uIChmb3IgdmFsdWUtcGFyYW1ldGVy
aXplZAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMpCi0vLyAgIEdURVNUX0hB
U19ERUFUSF9URVNUICAgLSBkZWF0aCB0ZXN0cwotLy8gICBHVEVTVF9IQVNfUEFSQU1fVEVTVCAg
IC0gdmFsdWUtcGFyYW1ldGVyaXplZCB0ZXN0cwotLy8gICBHVEVTVF9IQVNfVFlQRURfVEVTVCAg
IC0gdHlwZWQgdGVzdHMKLS8vICAgR1RFU1RfSEFTX1RZUEVEX1RFU1RfUCAtIHR5cGUtcGFyYW1l
dGVyaXplZCB0ZXN0cwotLy8gICBHVEVTVF9JU19USFJFQURTQUZFICAgIC0gR29vZ2xlIFRlc3Qg
aXMgdGhyZWFkLXNhZmUuCi0vLyAgIEdURVNUX1VTRVNfUE9TSVhfUkUgICAgLSBlbmhhbmNlZCBQ
T1NJWCByZWdleCBpcyB1c2VkLiBEbyBub3QgY29uZnVzZSB3aXRoCi0vLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHVEVTVF9IQVNfUE9TSVhfUkUgKHNlZSBhYm92ZSkgd2hpY2ggdXNlcnMg
Y2FuCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgdGhlbXNlbHZlcy4KLS8v
ICAgR1RFU1RfVVNFU19TSU1QTEVfUkUgICAtIG91ciBvd24gc2ltcGxlIHJlZ2V4IGlzIHVzZWQ7
Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWJvdmUgdHdvIGFyZSBtdXR1YWxs
eSBleGNsdXNpdmUuCi0vLyAgIEdURVNUX0NBTl9DT01QQVJFX05VTEwgLSBhY2NlcHRzIHVudHlw
ZWQgTlVMTCBpbiBFWFBFQ1RfRVEoKS4KLQotLy8gTWlzYyBwdWJsaWMgbWFjcm9zCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0KLS8vCi0vLyAgIEdURVNUX0ZMQUcoZmxhZ19uYW1lKSAgLSByZWZlcmVu
Y2VzIHRoZSB2YXJpYWJsZSBjb3JyZXNwb25kaW5nIHRvCi0vLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGUgZ2l2ZW4gR29vZ2xlIFRlc3QgZmxhZy4KLQotLy8gSW50ZXJuYWwgdXRpbGl0
aWVzCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBUaGUgZm9sbG93aW5nIG1hY3JvcyBh
bmQgdXRpbGl0aWVzIGFyZSBmb3IgR29vZ2xlIFRlc3QncyBJTlRFUk5BTAotLy8gdXNlIG9ubHku
ICBDb2RlIG91dHNpZGUgR29vZ2xlIFRlc3QgTVVTVCBOT1QgVVNFIFRIRU0gRElSRUNUTFkuCi0v
LwotLy8gTWFjcm9zIGZvciBiYXNpYyBDKysgY29kaW5nOgotLy8gICBHVEVTVF9BTUJJR1VPVVNf
RUxTRV9CTE9DS0VSXyAtIGZvciBkaXNhYmxpbmcgYSBnY2Mgd2FybmluZy4KLS8vICAgR1RFU1Rf
QVRUUklCVVRFX1VOVVNFRF8gIC0gZGVjbGFyZXMgdGhhdCBhIGNsYXNzJyBpbnN0YW5jZXMgb3Ig
YQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBkb24ndCBoYXZlIHRv
IGJlIHVzZWQuCi0vLyAgIEdURVNUX0RJU0FMTE9XX0FTU0lHTl8gICAtIGRpc2FibGVzIG9wZXJh
dG9yPS4KLS8vICAgR1RFU1RfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOXyAtIGRpc2FibGVzIGNv
cHkgY3RvciBhbmQgb3BlcmF0b3I9LgotLy8gICBHVEVTVF9NVVNUX1VTRV9SRVNVTFRfICAgLSBk
ZWNsYXJlcyB0aGF0IGEgZnVuY3Rpb24ncyByZXN1bHQgbXVzdCBiZSB1c2VkLgotLy8gICBHVEVT
VF9JTlRFTlRJT05BTF9DT05TVF9DT05EX1BVU0hfIC0gc3RhcnQgY29kZSBzZWN0aW9uIHdoZXJl
IE1TVkMgQzQxMjcgaXMKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN1cHByZXNzZWQgKGNvbnN0YW50IGNvbmRpdGlvbmFsKS4KLS8vICAgR1RFU1RfSU5URU5USU9O
QUxfQ09OU1RfQ09ORF9QT1BfICAtIGZpbmlzaCBjb2RlIHNlY3Rpb24gd2hlcmUgTVNWQyBDNDEy
NwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgc3VwcHJlc3Nl
ZC4KLS8vCi0vLyBDKysxMSBmZWF0dXJlIHdyYXBwZXJzOgotLy8KLS8vICAgdGVzdGluZzo6aW50
ZXJuYWw6Om1vdmUgIC0gcG9ydGFiaWxpdHkgd3JhcHBlciBmb3Igc3RkOjptb3ZlLgotLy8KLS8v
IFN5bmNocm9uaXphdGlvbjoKLS8vICAgTXV0ZXgsIE11dGV4TG9jaywgVGhyZWFkTG9jYWwsIEdl
dFRocmVhZENvdW50KCkKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3luY2hyb25p
emF0aW9uIHByaW1pdGl2ZXMuCi0vLwotLy8gVGVtcGxhdGUgbWV0YSBwcm9ncmFtbWluZzoKLS8v
ICAgaXNfcG9pbnRlciAgICAgLSBhcyBpbiBUUjE7IG5lZWRlZCBvbiBTeW1iaWFuIGFuZCBJQk0g
WEwgQy9DKysgb25seS4KLS8vICAgSXRlcmF0b3JUcmFpdHMgLSBwYXJ0aWFsIGltcGxlbWVudGF0
aW9uIG9mIHN0ZDo6aXRlcmF0b3JfdHJhaXRzLCB3aGljaAotLy8gICAgICAgICAgICAgICAgICAg
IGlzIG5vdCBhdmFpbGFibGUgaW4gbGliQ3N0ZCB3aGVuIGNvbXBpbGVkIHdpdGggU3VuIEMrKy4K
LS8vCi0vLyBTbWFydCBwb2ludGVyczoKLS8vICAgc2NvcGVkX3B0ciAgICAgLSBhcyBpbiBUUjIu
Ci0vLwotLy8gUmVndWxhciBleHByZXNzaW9uczoKLS8vICAgUkUgICAgICAgICAgICAgLSBhIHNp
bXBsZSByZWd1bGFyIGV4cHJlc3Npb24gY2xhc3MgdXNpbmcgdGhlIFBPU0lYCi0vLyAgICAgICAg
ICAgICAgICAgICAgRXh0ZW5kZWQgUmVndWxhciBFeHByZXNzaW9uIHN5bnRheCBvbiBVTklYLWxp
a2UKLS8vICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybXMsIG9yIGEgcmVkdWNlZCByZWd1bGFy
IGV4Y2VwdGlvbiBzeW50YXggb24KLS8vICAgICAgICAgICAgICAgICAgICBvdGhlciBwbGF0Zm9y
bXMsIGluY2x1ZGluZyBXaW5kb3dzLgotLy8KLS8vIExvZ2dpbmc6Ci0vLyAgIEdURVNUX0xPR18o
KSAgIC0gbG9ncyBtZXNzYWdlcyBhdCB0aGUgc3BlY2lmaWVkIHNldmVyaXR5IGxldmVsLgotLy8g
ICBMb2dUb1N0ZGVycigpICAtIGRpcmVjdHMgYWxsIGxvZyBtZXNzYWdlcyB0byBzdGRlcnIuCi0v
LyAgIEZsdXNoSW5mb0xvZygpIC0gZmx1c2hlcyBpbmZvcm1hdGlvbmFsIGxvZyBtZXNzYWdlcy4K
LS8vCi0vLyBTdGRvdXQgYW5kIHN0ZGVyciBjYXB0dXJpbmc6Ci0vLyAgIENhcHR1cmVTdGRvdXQo
KSAgICAgLSBzdGFydHMgY2FwdHVyaW5nIHN0ZG91dC4KLS8vICAgR2V0Q2FwdHVyZWRTdGRvdXQo
KSAtIHN0b3BzIGNhcHR1cmluZyBzdGRvdXQgYW5kIHJldHVybnMgdGhlIGNhcHR1cmVkCi0vLyAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuCi0vLyAgIENhcHR1cmVTdGRlcnIoKSAgICAg
LSBzdGFydHMgY2FwdHVyaW5nIHN0ZGVyci4KLS8vICAgR2V0Q2FwdHVyZWRTdGRlcnIoKSAtIHN0
b3BzIGNhcHR1cmluZyBzdGRlcnIgYW5kIHJldHVybnMgdGhlIGNhcHR1cmVkCi0vLyAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJpbmcuCi0vLwotLy8gSW50ZWdlciB0eXBlczoKLS8vICAgVHlw
ZVdpdGhTaXplICAgLSBtYXBzIGFuIGludGVnZXIgdG8gYSBpbnQgdHlwZS4KLS8vICAgSW50MzIs
IFVJbnQzMiwgSW50NjQsIFVJbnQ2NCwgVGltZUluTWlsbGlzCi0vLyAgICAgICAgICAgICAgICAg
IC0gaW50ZWdlcnMgb2Yga25vd24gc2l6ZXMuCi0vLyAgIEJpZ2dlc3RJbnQgICAgIC0gdGhlIGJp
Z2dlc3Qgc2lnbmVkIGludGVnZXIgdHlwZS4KLS8vCi0vLyBDb21tYW5kLWxpbmUgdXRpbGl0aWVz
OgotLy8gICBHVEVTVF9ERUNMQVJFXyooKSAgLSBkZWNsYXJlcyBhIGZsYWcuCi0vLyAgIEdURVNU
X0RFRklORV8qKCkgICAtIGRlZmluZXMgYSBmbGFnLgotLy8gICBHZXRJbmplY3RhYmxlQXJndnMo
KSAtIHJldHVybnMgdGhlIGNvbW1hbmQgbGluZSBhcyBhIHZlY3RvciBvZiBzdHJpbmdzLgotLy8K
LS8vIEVudmlyb25tZW50IHZhcmlhYmxlIHV0aWxpdGllczoKLS8vICAgR2V0RW52KCkgICAgICAg
ICAgICAgLSBnZXRzIHRoZSB2YWx1ZSBvZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLS8vICAg
Qm9vbEZyb21HVGVzdEVudigpICAgLSBwYXJzZXMgYSBib29sIGVudmlyb25tZW50IHZhcmlhYmxl
LgotLy8gICBJbnQzMkZyb21HVGVzdEVudigpICAtIHBhcnNlcyBhbiBJbnQzMiBlbnZpcm9ubWVu
dCB2YXJpYWJsZS4KLS8vICAgU3RyaW5nRnJvbUdUZXN0RW52KCkgLSBwYXJzZXMgYSBzdHJpbmcg
ZW52aXJvbm1lbnQgdmFyaWFibGUuCi0KLSNpbmNsdWRlIDxjdHlwZS5oPiAgIC8vIGZvciBpc3Nw
YWNlLCBldGMKLSNpbmNsdWRlIDxzdGRkZWYuaD4gIC8vIGZvciBwdHJkaWZmX3QKLSNpbmNsdWRl
IDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lm
bmRlZiBfV0lOMzJfV0NFCi0jIGluY2x1ZGUgPHN5cy90eXBlcy5oPgotIyBpbmNsdWRlIDxzeXMv
c3RhdC5oPgotI2VuZGlmICAvLyAhX1dJTjMyX1dDRQotCi0jaWYgZGVmaW5lZCBfX0FQUExFX18K
LSMgaW5jbHVkZSA8QXZhaWxhYmlsaXR5TWFjcm9zLmg+Ci0jIGluY2x1ZGUgPFRhcmdldENvbmRp
dGlvbmFscy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+ICAvLyBOT0xJTlQKLSNp
bmNsdWRlIDxpb3N0cmVhbT4gIC8vIE5PTElOVAotI2luY2x1ZGUgPHNzdHJlYW0+ICAvLyBOT0xJ
TlQKLSNpbmNsdWRlIDxzdHJpbmc+ICAvLyBOT0xJTlQKLSNpbmNsdWRlIDx1dGlsaXR5PgotI2lu
Y2x1ZGUgPHZlY3Rvcj4gIC8vIE5PTElOVAotCi0jaW5jbHVkZSAiZ3Rlc3QvaW50ZXJuYWwvZ3Rl
c3QtcG9ydC1hcmNoLmgiCi0jaW5jbHVkZSAiZ3Rlc3QvaW50ZXJuYWwvY3VzdG9tL2d0ZXN0LXBv
cnQuaCIKLQotI2lmICFkZWZpbmVkKEdURVNUX0RFVl9FTUFJTF8pCi0jIGRlZmluZSBHVEVTVF9E
RVZfRU1BSUxfICJnb29nbGV0ZXN0ZnJhbWV3b3JrQEBnb29nbGVncm91cHMuY29tIgotIyBkZWZp
bmUgR1RFU1RfRkxBR19QUkVGSVhfICJndGVzdF8iCi0jIGRlZmluZSBHVEVTVF9GTEFHX1BSRUZJ
WF9EQVNIXyAiZ3Rlc3QtIgotIyBkZWZpbmUgR1RFU1RfRkxBR19QUkVGSVhfVVBQRVJfICJHVEVT
VF8iCi0jIGRlZmluZSBHVEVTVF9OQU1FXyAiR29vZ2xlIFRlc3QiCi0jIGRlZmluZSBHVEVTVF9Q
Uk9KRUNUX1VSTF8gImh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvZ29vZ2xldGVzdC8iCi0jZW5k
aWYgIC8vICFkZWZpbmVkKEdURVNUX0RFVl9FTUFJTF8pCi0KLSNpZiAhZGVmaW5lZChHVEVTVF9J
TklUX0dPT0dMRV9URVNUX05BTUVfKQotIyBkZWZpbmUgR1RFU1RfSU5JVF9HT09HTEVfVEVTVF9O
QU1FXyAidGVzdGluZzo6SW5pdEdvb2dsZVRlc3QiCi0jZW5kaWYgIC8vICFkZWZpbmVkKEdURVNU
X0lOSVRfR09PR0xFX1RFU1RfTkFNRV8pCi0KLS8vIERldGVybWluZXMgdGhlIHZlcnNpb24gb2Yg
Z2NjIHRoYXQgaXMgdXNlZCB0byBjb21waWxlIHRoaXMuCi0jaWZkZWYgX19HTlVDX18KLS8vIDQw
MzAyIG1lYW5zIHZlcnNpb24gNC4zLjIuCi0jIGRlZmluZSBHVEVTVF9HQ0NfVkVSXyBcCi0gICAg
KF9fR05VQ19fKjEwMDAwICsgX19HTlVDX01JTk9SX18qMTAwICsgX19HTlVDX1BBVENITEVWRUxf
XykKLSNlbmRpZiAgLy8gX19HTlVDX18KLQotLy8gTWFjcm9zIGZvciBkaXNhYmxpbmcgTWljcm9z
b2Z0IFZpc3VhbCBDKysgd2FybmluZ3MuCi0vLwotLy8gICBHVEVTVF9ESVNBQkxFX01TQ19XQVJO
SU5HU19QVVNIXyg0ODAwIDQzODUpCi0vLyAgIC8qIGNvZGUgdGhhdCB0cmlnZ2VycyB3YXJuaW5n
cyBDNDgwMCBhbmQgQzQzODUgKi8KLS8vICAgR1RFU1RfRElTQUJMRV9NU0NfV0FSTklOR1NfUE9Q
XygpCi0jaWYgX01TQ19WRVIgPj0gMTUwMAotIyBkZWZpbmUgR1RFU1RfRElTQUJMRV9NU0NfV0FS
TklOR1NfUFVTSF8od2FybmluZ3MpIFwKLSAgICBfX3ByYWdtYSh3YXJuaW5nKHB1c2gpKSAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBfX3ByYWdtYSh3YXJuaW5nKGRpc2FibGU6IHdhcm5p
bmdzKSkKLSMgZGVmaW5lIEdURVNUX0RJU0FCTEVfTVNDX1dBUk5JTkdTX1BPUF8oKSAgICAgICAg
ICBcCi0gICAgX19wcmFnbWEod2FybmluZyhwb3ApKQotI2Vsc2UKLS8vIE9sZGVyIHZlcnNpb25z
IG9mIE1TVkMgZG9uJ3QgaGF2ZSBfX3ByYWdtYS4KLSMgZGVmaW5lIEdURVNUX0RJU0FCTEVfTVND
X1dBUk5JTkdTX1BVU0hfKHdhcm5pbmdzKQotIyBkZWZpbmUgR1RFU1RfRElTQUJMRV9NU0NfV0FS
TklOR1NfUE9QXygpCi0jZW5kaWYKLQotI2lmbmRlZiBHVEVTVF9MQU5HX0NYWDExCi0vLyBnY2Mg
YW5kIGNsYW5nIGRlZmluZSBfX0dYWF9FWFBFUklNRU5UQUxfQ1hYMFhfXyB3aGVuCi0vLyAtc3Rk
PXtjLGdudX0rK3sweCwxMX0gaXMgcGFzc2VkLiAgVGhlIEMrKzExIHN0YW5kYXJkIHNwZWNpZmll
cyBhCi0vLyB2YWx1ZSBmb3IgX19jcGx1c3BsdXMsIGFuZCByZWNlbnQgdmVyc2lvbnMgb2YgY2xh
bmcsIGdjYywgYW5kCi0vLyBwcm9iYWJseSBvdGhlciBjb21waWxlcnMgc2V0IHRoYXQgdG9vIGlu
IEMrKzExIG1vZGUuCi0jIGlmIF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fIHx8IF9fY3BsdXNw
bHVzID49IDIwMTEwM0wKLS8vIENvbXBpbGluZyBpbiBhdCBsZWFzdCBDKysxMSBtb2RlLgotIyAg
ZGVmaW5lIEdURVNUX0xBTkdfQ1hYMTEgMQotIyBlbHNlCi0jICBkZWZpbmUgR1RFU1RfTEFOR19D
WFgxMSAwCi0jIGVuZGlmCi0jZW5kaWYKLQotLy8gRGlzdGluY3QgZnJvbSBDKysxMSBsYW5ndWFn
ZSBzdXBwb3J0LCBzb21lIGVudmlyb25tZW50cyBkb24ndCBwcm92aWRlCi0vLyBwcm9wZXIgQysr
MTEgbGlicmFyeSBzdXBwb3J0LiBOb3RhYmx5LCBpdCdzIHBvc3NpYmxlIHRvIGJ1aWxkIGluCi0v
LyBDKysxMSBtb2RlIHdoZW4gdGFyZ2V0aW5nIE1hYyBPUyBYIDEwLjYsIHdoaWNoIGhhcyBhbiBv
bGQgbGlic3RkYysrCi0vLyB3aXRoIG5vIEMrKzExIHN1cHBvcnQuCi0vLwotLy8gbGlic3RkYysr
IGhhcyBzdWZmaWNpZW50IEMrKzExIHN1cHBvcnQgYXMgb2YgR0NDIDQuNi4wLCBfX0dMSUJDWFhf
XwotLy8gMjAxMTAzMjUsIGJ1dCBtYWludGVuYW5jZSByZWxlYXNlcyBpbiB0aGUgNC40IGFuZCA0
LjUgc2VyaWVzIGZvbGxvd2VkCi0vLyB0aGlzIGRhdGUsIHNvIGNoZWNrIGZvciB0aG9zZSB2ZXJz
aW9ucyBieSB0aGVpciBkYXRlIHN0YW1wcy4KLS8vIGh0dHBzOi8vZ2NjLmdudS5vcmcvb25saW5l
ZG9jcy9saWJzdGRjKysvbWFudWFsL2FiaS5odG1sI2FiaS52ZXJzaW9uaW5nCi0jaWYgR1RFU1Rf
TEFOR19DWFgxMSAmJiBcCi0gICAgKCFkZWZpbmVkKF9fR0xJQkNYWF9fKSB8fCAoIFwKLSAgICAg
ICAgX19HTElCQ1hYX18gPj0gMjAxMTAzMjV1bCAmJiAgLyogR0NDID49IDQuNi4wICovIFwKLSAg
ICAgICAgLyogQmxhY2tsaXN0IG9mIHBhdGNoIHJlbGVhc2VzIG9mIG9sZGVyIGJyYW5jaGVzOiAq
LyBcCi0gICAgICAgIF9fR0xJQkNYWF9fICE9IDIwMTEwNDE2dWwgJiYgIC8qIEdDQyA0LjQuNiAq
LyBcCi0gICAgICAgIF9fR0xJQkNYWF9fICE9IDIwMTIwMzEzdWwgJiYgIC8qIEdDQyA0LjQuNyAq
LyBcCi0gICAgICAgIF9fR0xJQkNYWF9fICE9IDIwMTEwNDI4dWwgJiYgIC8qIEdDQyA0LjUuMyAq
LyBcCi0gICAgICAgIF9fR0xJQkNYWF9fICE9IDIwMTIwNzAydWwpKSAgIC8qIEdDQyA0LjUuNCAq
LwotIyBkZWZpbmUgR1RFU1RfU1RETElCX0NYWDExIDEKLSNlbmRpZgotCi0vLyBPbmx5IHVzZSBD
KysxMSBsaWJyYXJ5IGZlYXR1cmVzIGlmIHRoZSBsaWJyYXJ5IHByb3ZpZGVzIHRoZW0uCi0jaWYg
R1RFU1RfU1RETElCX0NYWDExCi0jIGRlZmluZSBHVEVTVF9IQVNfU1REX0JFR0lOX0FORF9FTkRf
IDEKLSMgZGVmaW5lIEdURVNUX0hBU19TVERfRk9SV0FSRF9MSVNUXyAxCi0jIGRlZmluZSBHVEVT
VF9IQVNfU1REX0ZVTkNUSU9OXyAxCi0jIGRlZmluZSBHVEVTVF9IQVNfU1REX0lOSVRJQUxJWkVS
X0xJU1RfIDEKLSMgZGVmaW5lIEdURVNUX0hBU19TVERfTU9WRV8gMQotIyBkZWZpbmUgR1RFU1Rf
SEFTX1NURF9TSEFSRURfUFRSXyAxCi0jIGRlZmluZSBHVEVTVF9IQVNfU1REX1RZUEVfVFJBSVRT
XyAxCi0jIGRlZmluZSBHVEVTVF9IQVNfU1REX1VOSVFVRV9QVFJfIDEKLSNlbmRpZgotCi0vLyBD
KysxMSBzcGVjaWZpZXMgdGhhdCA8dHVwbGU+IHByb3ZpZGVzIHN0ZDo6dHVwbGUuCi0vLyBTb21l
IHBsYXRmb3JtcyBzdGlsbCBtaWdodCBub3QgaGF2ZSBpdCwgaG93ZXZlci4KLSNpZiBHVEVTVF9M
QU5HX0NYWDExCi0jIGRlZmluZSBHVEVTVF9IQVNfU1REX1RVUExFXyAxCi0jIGlmIGRlZmluZWQo
X19jbGFuZ19fKQotLy8gSW5zcGlyZWQgYnkgaHR0cDovL2NsYW5nLmxsdm0ub3JnL2RvY3MvTGFu
Z3VhZ2VFeHRlbnNpb25zLmh0bWwjX19oYXNfaW5jbHVkZQotIyAgaWYgZGVmaW5lZChfX2hhc19p
bmNsdWRlKSAmJiAhX19oYXNfaW5jbHVkZSg8dHVwbGU+KQotIyAgIHVuZGVmIEdURVNUX0hBU19T
VERfVFVQTEVfCi0jICBlbmRpZgotIyBlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0vLyBJbnNwaXJl
ZCBieSBib29zdC9jb25maWcvc3RkbGliL2Rpbmt1bXdhcmUuaHBwCi0jICBpZiBkZWZpbmVkKF9D
UFBMSUJfVkVSKSAmJiBfQ1BQTElCX1ZFUiA8IDUyMAotIyAgIHVuZGVmIEdURVNUX0hBU19TVERf
VFVQTEVfCi0jICBlbmRpZgotIyBlbGlmIGRlZmluZWQoX19HTElCQ1hYX18pCi0vLyBJbnNwaXJl
ZCBieSBib29zdC9jb25maWcvc3RkbGliL2xpYnN0ZGNwcDMuaHBwLAotLy8gaHR0cDovL2djYy5n
bnUub3JnL2djYy00LjIvY2hhbmdlcy5odG1sIGFuZAotLy8gaHR0cDovL2djYy5nbnUub3JnL29u
bGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwMWNoMDEuaHRtbCNtYW51YWwuaW50cm8u
c3RhdHVzLnN0YW5kYXJkLjIwMHgKLSMgIGlmIF9fR05VQ19fIDwgNCB8fCAoX19HTlVDX18gPT0g
NCAmJiBfX0dOVUNfTUlOT1JfXyA8IDIpCi0jICAgdW5kZWYgR1RFU1RfSEFTX1NURF9UVVBMRV8K
LSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYKLQotLy8gQnJpbmdzIGluIGRlZmluaXRpb25zIGZv
ciBmdW5jdGlvbnMgdXNlZCBpbiB0aGUgdGVzdGluZzo6aW50ZXJuYWw6OnBvc2l4Ci0vLyBuYW1l
c3BhY2UgKHJlYWQsIHdyaXRlLCBjbG9zZSwgY2hkaXIsIGlzYXR0eSwgc3RhdCkuIFdlIGRvIG5v
dCBjdXJyZW50bHkKLS8vIHVzZSB0aGVtIG9uIFdpbmRvd3MgTW9iaWxlLgotI2lmIEdURVNUX09T
X1dJTkRPV1MKLSMgaWYgIUdURVNUX09TX1dJTkRPV1NfTU9CSUxFCi0jICBpbmNsdWRlIDxkaXJl
Y3QuaD4KLSMgIGluY2x1ZGUgPGlvLmg+Ci0jIGVuZGlmCi0vLyBJbiBvcmRlciB0byBhdm9pZCBo
YXZpbmcgdG8gaW5jbHVkZSA8d2luZG93cy5oPiwgdXNlIGZvcndhcmQgZGVjbGFyYXRpb24KLS8v
IGFzc3VtaW5nIENSSVRJQ0FMX1NFQ1RJT04gaXMgYSB0eXBlZGVmIG9mIF9SVExfQ1JJVElDQUxf
U0VDVElPTi4KLS8vIFRoaXMgYXNzdW1wdGlvbiBpcyB2ZXJpZmllZCBieQotLy8gV2luZG93c1R5
cGVzVGVzdC5DUklUSUNBTF9TRUNUSU9OSXNfUlRMX0NSSVRJQ0FMX1NFQ1RJT04uCi1zdHJ1Y3Qg
X1JUTF9DUklUSUNBTF9TRUNUSU9OOwotI2Vsc2UKLS8vIFRoaXMgYXNzdW1lcyB0aGF0IG5vbi1X
aW5kb3dzIE9TZXMgcHJvdmlkZSB1bmlzdGQuaC4gRm9yIE9TZXMgd2hlcmUgdGhpcwotLy8gaXMg
bm90IHRoZSBjYXNlLCB3ZSBuZWVkIHRvIGluY2x1ZGUgaGVhZGVycyB0aGF0IHByb3ZpZGUgdGhl
IGZ1bmN0aW9ucwotLy8gbWVudGlvbmVkIGFib3ZlLgotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSMg
aW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmICAvLyBHVEVTVF9PU19XSU5ET1dTCi0KLSNpZiBH
VEVTVF9PU19MSU5VWF9BTkRST0lECi0vLyBVc2VkIHRvIGRlZmluZSBfX0FORFJPSURfQVBJX18g
bWF0Y2hpbmcgdGhlIHRhcmdldCBOREsgQVBJIGxldmVsLgotIyAgaW5jbHVkZSA8YW5kcm9pZC9h
cGktbGV2ZWwuaD4gIC8vIE5PTElOVAotI2VuZGlmCi0KLS8vIERlZmluZXMgdGhpcyB0byB0cnVl
IGlmZiBHb29nbGUgVGVzdCBjYW4gdXNlIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCi0jaWZu
ZGVmIEdURVNUX0hBU19QT1NJWF9SRQotIyBpZiBHVEVTVF9PU19MSU5VWF9BTkRST0lECi0vLyBP
biBBbmRyb2lkLCA8cmVnZXguaD4gaXMgb25seSBhdmFpbGFibGUgc3RhcnRpbmcgd2l0aCBHaW5n
ZXJicmVhZC4KLSMgIGRlZmluZSBHVEVTVF9IQVNfUE9TSVhfUkUgKF9fQU5EUk9JRF9BUElfXyA+
PSA5KQotIyBlbHNlCi0jICBkZWZpbmUgR1RFU1RfSEFTX1BPU0lYX1JFICghR1RFU1RfT1NfV0lO
RE9XUykKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgR1RFU1RfVVNFU19QQ1JFCi0vLyBUaGUgYXBw
cm9wcmlhdGUgaGVhZGVycyBoYXZlIGFscmVhZHkgYmVlbiBpbmNsdWRlZC4KLQotI2VsaWYgR1RF
U1RfSEFTX1BPU0lYX1JFCi0KLS8vIE9uIHNvbWUgcGxhdGZvcm1zLCA8cmVnZXguaD4gbmVlZHMg
c29tZW9uZSB0byBkZWZpbmUgc2l6ZV90LCBhbmQKLS8vIHdvbid0IGNvbXBpbGUgb3RoZXJ3aXNl
LiAgV2UgY2FuICNpbmNsdWRlIGl0IGhlcmUgYXMgd2UgYWxyZWFkeQotLy8gaW5jbHVkZWQgPHN0
ZGxpYi5oPiwgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBkZWZpbmUgc2l6ZV90IHRocm91Z2gKLS8v
IDxzdGRkZWYuaD4uCi0jIGluY2x1ZGUgPHJlZ2V4Lmg+ICAvLyBOT0xJTlQKLQotIyBkZWZpbmUg
R1RFU1RfVVNFU19QT1NJWF9SRSAxCi0KLSNlbGlmIEdURVNUX09TX1dJTkRPV1MKLQotLy8gPHJl
Z2V4Lmg+IGlzIG5vdCBhdmFpbGFibGUgb24gV2luZG93cy4gIFVzZSBvdXIgb3duIHNpbXBsZSBy
ZWdleAotLy8gaW1wbGVtZW50YXRpb24gaW5zdGVhZC4KLSMgZGVmaW5lIEdURVNUX1VTRVNfU0lN
UExFX1JFIDEKLQotI2Vsc2UKLQotLy8gPHJlZ2V4Lmg+IG1heSBub3QgYmUgYXZhaWxhYmxlIG9u
IHRoaXMgcGxhdGZvcm0uICBVc2Ugb3VyIG93bgotLy8gc2ltcGxlIHJlZ2V4IGltcGxlbWVudGF0
aW9uIGluc3RlYWQuCi0jIGRlZmluZSBHVEVTVF9VU0VTX1NJTVBMRV9SRSAxCi0KLSNlbmRpZiAg
Ly8gR1RFU1RfVVNFU19QQ1JFCi0KLSNpZm5kZWYgR1RFU1RfSEFTX0VYQ0VQVElPTlMKLS8vIFRo
ZSB1c2VyIGRpZG4ndCB0ZWxsIHVzIHdoZXRoZXIgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZCwgc28g
d2UgbmVlZAotLy8gdG8gZmlndXJlIGl0IG91dC4KLSMgaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwg
ZGVmaW5lZChfX0JPUkxBTkRDX18pCi0vLyBNU1ZDJ3MgYW5kIEMrK0J1aWxkZXIncyBpbXBsZW1l
bnRhdGlvbnMgb2YgdGhlIFNUTCB1c2UgdGhlIF9IQVNfRVhDRVBUSU9OUwotLy8gbWFjcm8gdG8g
ZW5hYmxlIGV4Y2VwdGlvbnMsIHNvIHdlJ2xsIGRvIHRoZSBzYW1lLgotLy8gQXNzdW1lcyB0aGF0
IGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KLSMgIGlmbmRlZiBfSEFTX0VYQ0VQ
VElPTlMKLSMgICBkZWZpbmUgX0hBU19FWENFUFRJT05TIDEKLSMgIGVuZGlmICAvLyBfSEFTX0VY
Q0VQVElPTlMKLSMgIGRlZmluZSBHVEVTVF9IQVNfRVhDRVBUSU9OUyBfSEFTX0VYQ0VQVElPTlMK
LSMgZWxpZiBkZWZpbmVkKF9fY2xhbmdfXykKLS8vIGNsYW5nIGRlZmluZXMgX19FWENFUFRJT05T
IGlmZiBleGNlcHRpb25zIGFyZSBlbmFibGVkIGJlZm9yZSBjbGFuZyAyMjA3MTQsCi0vLyBidXQg
aWZmIGNsZWFudXBzIGFyZSBlbmFibGVkIGFmdGVyIHRoYXQuIEluIE9iai1DKysgZmlsZXMsIHRo
ZXJlIGNhbiBiZQotLy8gY2xlYW51cHMgZm9yIE9iakMgZXhjZXB0aW9ucyB3aGljaCBhbHNvIG5l
ZWQgY2xlYW51cHMsIGV2ZW4gaWYgQysrIGV4Y2VwdGlvbnMKLS8vIGFyZSBkaXNhYmxlZC4gY2xh
bmcgaGFzIF9faGFzX2ZlYXR1cmUoY3h4X2V4Y2VwdGlvbnMpIHdoaWNoIGNoZWNrcyBmb3IgQysr
Ci0vLyBleGNlcHRpb25zIHN0YXJ0aW5nIGF0IGNsYW5nIHIyMDYzNTIsIGJ1dCB3aGljaCBjaGVj
a2VkIGZvciBjbGVhbnVwcyBwcmlvciB0bwotLy8gdGhhdC4gVG8gcmVsaWFibHkgY2hlY2sgZm9y
IEMrKyBleGNlcHRpb24gYXZhaWxhYmlsaXR5IHdpdGggY2xhbmcsIGNoZWNrIGZvcgotLy8gX19F
WENFUFRJT05TICYmIF9faGFzX2ZlYXR1cmUoY3h4X2V4Y2VwdGlvbnMpLgotIyAgZGVmaW5lIEdU
RVNUX0hBU19FWENFUFRJT05TIChfX0VYQ0VQVElPTlMgJiYgX19oYXNfZmVhdHVyZShjeHhfZXhj
ZXB0aW9ucykpCi0jIGVsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19FWENFUFRJT05TCi0vLyBn
Y2MgZGVmaW5lcyBfX0VYQ0VQVElPTlMgdG8gMSBpZmYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4K
LSMgIGRlZmluZSBHVEVTVF9IQVNfRVhDRVBUSU9OUyAxCi0jIGVsaWYgZGVmaW5lZChfX1NVTlBS
T19DQykKLS8vIFN1biBQcm8gQ0Mgc3VwcG9ydHMgZXhjZXB0aW9ucy4gIEhvd2V2ZXIsIHRoZXJl
IGlzIG5vIGNvbXBpbGUtdGltZSB3YXkgb2YKLS8vIGRldGVjdGluZyB3aGV0aGVyIHRoZXkgYXJl
IGVuYWJsZWQgb3Igbm90LiAgVGhlcmVmb3JlLCB3ZSBhc3N1bWUgdGhhdAotLy8gdGhleSBhcmUg
ZW5hYmxlZCB1bmxlc3MgdGhlIHVzZXIgdGVsbHMgdXMgb3RoZXJ3aXNlLgotIyAgZGVmaW5lIEdU
RVNUX0hBU19FWENFUFRJT05TIDEKLSMgZWxpZiBkZWZpbmVkKF9fSUJNQ1BQX18pICYmIF9fRVhD
RVBUSU9OUwotLy8geGxDIGRlZmluZXMgX19FWENFUFRJT05TIHRvIDEgaWZmIGV4Y2VwdGlvbnMg
YXJlIGVuYWJsZWQuCi0jICBkZWZpbmUgR1RFU1RfSEFTX0VYQ0VQVElPTlMgMQotIyBlbGlmIGRl
ZmluZWQoX19IUF9hQ0MpCi0vLyBFeGNlcHRpb24gaGFuZGxpbmcgaXMgaW4gZWZmZWN0IGJ5IGRl
ZmF1bHQgaW4gSFAgYUNDIGNvbXBpbGVyLiBJdCBoYXMgdG8KLS8vIGJlIHR1cm5lZCBvZiBieSAr
bm9laCBjb21waWxlciBvcHRpb24gaWYgZGVzaXJlZC4KLSMgIGRlZmluZSBHVEVTVF9IQVNfRVhD
RVBUSU9OUyAxCi0jIGVsc2UKLS8vIEZvciBvdGhlciBjb21waWxlcnMsIHdlIGFzc3VtZSBleGNl
cHRpb25zIGFyZSBkaXNhYmxlZCB0byBiZQotLy8gY29uc2VydmF0aXZlLgotIyAgZGVmaW5lIEdU
RVNUX0hBU19FWENFUFRJT05TIDAKLSMgZW5kaWYgIC8vIGRlZmluZWQoX01TQ19WRVIpIHx8IGRl
ZmluZWQoX19CT1JMQU5EQ19fKQotI2VuZGlmICAvLyBHVEVTVF9IQVNfRVhDRVBUSU9OUwotCi0j
aWYgIWRlZmluZWQoR1RFU1RfSEFTX1NURF9TVFJJTkcpCi0vLyBFdmVuIHRob3VnaCB3ZSBkb24n
dCB1c2UgdGhpcyBtYWNybyBhbnkgbG9uZ2VyLCB3ZSBrZWVwIGl0IGluIGNhc2UKLS8vIHNvbWUg
Y2xpZW50cyBzdGlsbCBkZXBlbmQgb24gaXQuCi0jIGRlZmluZSBHVEVTVF9IQVNfU1REX1NUUklO
RyAxCi0jZWxpZiAhR1RFU1RfSEFTX1NURF9TVFJJTkcKLS8vIFRoZSB1c2VyIHRvbGQgdXMgdGhh
dCA6OnN0ZDo6c3RyaW5nIGlzbid0IGF2YWlsYWJsZS4KLSMgZXJyb3IgIkdvb2dsZSBUZXN0IGNh
bm5vdCBiZSB1c2VkIHdoZXJlIDo6c3RkOjpzdHJpbmcgaXNuJ3QgYXZhaWxhYmxlLiIKLSNlbmRp
ZiAgLy8gIWRlZmluZWQoR1RFU1RfSEFTX1NURF9TVFJJTkcpCi0KLSNpZm5kZWYgR1RFU1RfSEFT
X0dMT0JBTF9TVFJJTkcKLS8vIFRoZSB1c2VyIGRpZG4ndCB0ZWxsIHVzIHdoZXRoZXIgOjpzdHJp
bmcgaXMgYXZhaWxhYmxlLCBzbyB3ZSBuZWVkCi0vLyB0byBmaWd1cmUgaXQgb3V0LgotCi0jIGRl
ZmluZSBHVEVTVF9IQVNfR0xPQkFMX1NUUklORyAwCi0KLSNlbmRpZiAgLy8gR1RFU1RfSEFTX0dM
T0JBTF9TVFJJTkcKLQotI2lmbmRlZiBHVEVTVF9IQVNfU1REX1dTVFJJTkcKLS8vIFRoZSB1c2Vy
IGRpZG4ndCB0ZWxsIHVzIHdoZXRoZXIgOjpzdGQ6OndzdHJpbmcgaXMgYXZhaWxhYmxlLCBzbyB3
ZSBuZWVkCi0vLyB0byBmaWd1cmUgaXQgb3V0LgotLy8gVE9ETyh3YW5AZ29vZ2xlLmNvbSk6IHVz
ZXMgYXV0b2NvbmYgdG8gZGV0ZWN0IHdoZXRoZXIgOjpzdGQ6OndzdHJpbmcKLS8vICAgaXMgYXZh
aWxhYmxlLgotCi0vLyBDeWd3aW4gMS43IGFuZCBiZWxvdyBkb2Vzbid0IHN1cHBvcnQgOjpzdGQ6
OndzdHJpbmcuCi0vLyBTb2xhcmlzJyBsaWJjKysgZG9lc24ndCBzdXBwb3J0IGl0IGVpdGhlci4g
IEFuZHJvaWQgaGFzCi0vLyBubyBzdXBwb3J0IGZvciBpdCBhdCBsZWFzdCBhcyByZWNlbnQgYXMg
RnJveW8gKDIuMikuCi0jIGRlZmluZSBHVEVTVF9IQVNfU1REX1dTVFJJTkcgXAotICAgICghKEdU
RVNUX09TX0xJTlVYX0FORFJPSUQgfHwgR1RFU1RfT1NfQ1lHV0lOIHx8IEdURVNUX09TX1NPTEFS
SVMpKQotCi0jZW5kaWYgIC8vIEdURVNUX0hBU19TVERfV1NUUklORwotCi0jaWZuZGVmIEdURVNU
X0hBU19HTE9CQUxfV1NUUklORwotLy8gVGhlIHVzZXIgZGlkbid0IHRlbGwgdXMgd2hldGhlciA6
OndzdHJpbmcgaXMgYXZhaWxhYmxlLCBzbyB3ZSBuZWVkCi0vLyB0byBmaWd1cmUgaXQgb3V0Lgot
IyBkZWZpbmUgR1RFU1RfSEFTX0dMT0JBTF9XU1RSSU5HIFwKLSAgICAoR1RFU1RfSEFTX1NURF9X
U1RSSU5HICYmIEdURVNUX0hBU19HTE9CQUxfU1RSSU5HKQotI2VuZGlmICAvLyBHVEVTVF9IQVNf
R0xPQkFMX1dTVFJJTkcKLQotLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIFJUVEkgaXMgYXZhaWxhYmxl
LgotI2lmbmRlZiBHVEVTVF9IQVNfUlRUSQotLy8gVGhlIHVzZXIgZGlkbid0IHRlbGwgdXMgd2hl
dGhlciBSVFRJIGlzIGVuYWJsZWQsIHNvIHdlIG5lZWQgdG8KLS8vIGZpZ3VyZSBpdCBvdXQuCi0K
LSMgaWZkZWYgX01TQ19WRVIKLQotIyAgaWZkZWYgX0NQUFJUVEkgIC8vIE1TVkMgZGVmaW5lcyB0
aGlzIG1hY3JvIGlmZiBSVFRJIGlzIGVuYWJsZWQuCi0jICAgZGVmaW5lIEdURVNUX0hBU19SVFRJ
IDEKLSMgIGVsc2UKLSMgICBkZWZpbmUgR1RFU1RfSEFTX1JUVEkgMAotIyAgZW5kaWYKLQotLy8g
U3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDQuMy4yLCBnY2MgZGVmaW5lcyBfX0dYWF9SVFRJIGlmZiBS
VFRJIGlzIGVuYWJsZWQuCi0jIGVsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKEdURVNUX0dDQ19W
RVJfID49IDQwMzAyKQotCi0jICBpZmRlZiBfX0dYWF9SVFRJCi0vLyBXaGVuIGJ1aWxkaW5nIGFn
YWluc3QgU1RMcG9ydCB3aXRoIHRoZSBBbmRyb2lkIE5ESyBhbmQgd2l0aAotLy8gLWZydHRpIC1m
bm8tZXhjZXB0aW9ucywgdGhlIGJ1aWxkIGZhaWxzIGF0IGxpbmsgdGltZSB3aXRoIHVuZGVmaW5l
ZAotLy8gcmVmZXJlbmNlcyB0byBfX2N4YV9iYWRfdHlwZWlkLiBOb3RlIHN1cmUgaWYgU1RMIG9y
IHRvb2xjaGFpbiBidWcsCi0vLyBzbyBkaXNhYmxlIFJUVEkgd2hlbiBkZXRlY3RlZC4KLSMgICBp
ZiBHVEVTVF9PU19MSU5VWF9BTkRST0lEICYmIGRlZmluZWQoX1NUTFBPUlRfTUFKT1IpICYmIFwK
LSAgICAgICAhZGVmaW5lZChfX0VYQ0VQVElPTlMpCi0jICAgIGRlZmluZSBHVEVTVF9IQVNfUlRU
SSAwCi0jICAgZWxzZQotIyAgICBkZWZpbmUgR1RFU1RfSEFTX1JUVEkgMQotIyAgIGVuZGlmICAv
LyBHVEVTVF9PU19MSU5VWF9BTkRST0lEICYmIF9fU1RMUE9SVF9NQUpPUiAmJiAhX19FWENFUFRJ
T05TCi0jICBlbHNlCi0jICAgZGVmaW5lIEdURVNUX0hBU19SVFRJIDAKLSMgIGVuZGlmICAvLyBf
X0dYWF9SVFRJCi0KLS8vIENsYW5nIGRlZmluZXMgX19HWFhfUlRUSSBzdGFydGluZyB3aXRoIHZl
cnNpb24gMy4wLCBidXQgaXRzIG1hbnVhbCByZWNvbW1lbmRzCi0vLyB1c2luZyBoYXNfZmVhdHVy
ZSBpbnN0ZWFkLiBoYXNfZmVhdHVyZShjeHhfcnR0aSkgaXMgc3VwcG9ydGVkIHNpbmNlIDIuNywg
dGhlCi0vLyBmaXJzdCB2ZXJzaW9uIHdpdGggQysrIHN1cHBvcnQuCi0jIGVsaWYgZGVmaW5lZChf
X2NsYW5nX18pCi0KLSMgIGRlZmluZSBHVEVTVF9IQVNfUlRUSSBfX2hhc19mZWF0dXJlKGN4eF9y
dHRpKQotCi0vLyBTdGFydGluZyB3aXRoIHZlcnNpb24gOS4wIElCTSBWaXN1YWwgQWdlIGRlZmlu
ZXMgX19SVFRJX0FMTF9fIHRvIDEgaWYKLS8vIGJvdGggdGhlIHR5cGVpZCBhbmQgZHluYW1pY19j
YXN0IGZlYXR1cmVzIGFyZSBwcmVzZW50LgotIyBlbGlmIGRlZmluZWQoX19JQk1DUFBfXykgJiYg
KF9fSUJNQ1BQX18gPj0gOTAwKQotCi0jICBpZmRlZiBfX1JUVElfQUxMX18KLSMgICBkZWZpbmUg
R1RFU1RfSEFTX1JUVEkgMQotIyAgZWxzZQotIyAgIGRlZmluZSBHVEVTVF9IQVNfUlRUSSAwCi0j
ICBlbmRpZgotCi0jIGVsc2UKLQotLy8gRm9yIGFsbCBvdGhlciBjb21waWxlcnMsIHdlIGFzc3Vt
ZSBSVFRJIGlzIGVuYWJsZWQuCi0jICBkZWZpbmUgR1RFU1RfSEFTX1JUVEkgMQotCi0jIGVuZGlm
ICAvLyBfTVNDX1ZFUgotCi0jZW5kaWYgIC8vIEdURVNUX0hBU19SVFRJCi0KLS8vIEl0J3MgdGhp
cyBoZWFkZXIncyByZXNwb25zaWJpbGl0eSB0byAjaW5jbHVkZSA8dHlwZWluZm8+IHdoZW4gUlRU
SQotLy8gaXMgZW5hYmxlZC4KLSNpZiBHVEVTVF9IQVNfUlRUSQotIyBpbmNsdWRlIDx0eXBlaW5m
bz4KLSNlbmRpZgotCi0vLyBEZXRlcm1pbmVzIHdoZXRoZXIgR29vZ2xlIFRlc3QgY2FuIHVzZSB0
aGUgcHRocmVhZHMgbGlicmFyeS4KLSNpZm5kZWYgR1RFU1RfSEFTX1BUSFJFQUQKLS8vIFRoZSB1
c2VyIGRpZG4ndCB0ZWxsIHVzIGV4cGxpY2l0bHksIHNvIHdlIG1ha2UgcmVhc29uYWJsZSBhc3N1
bXB0aW9ucyBhYm91dAotLy8gd2hpY2ggcGxhdGZvcm1zIGhhdmUgcHRocmVhZHMgc3VwcG9ydC4K
LS8vCi0vLyBUbyBkaXNhYmxlIHRocmVhZGluZyBzdXBwb3J0IGluIEdvb2dsZSBUZXN0LCBhZGQg
LURHVEVTVF9IQVNfUFRIUkVBRD0wCi0vLyB0byB5b3VyIGNvbXBpbGVyIGZsYWdzLgotIyBkZWZp
bmUgR1RFU1RfSEFTX1BUSFJFQUQgKEdURVNUX09TX0xJTlVYIHx8IEdURVNUX09TX01BQyB8fCBH
VEVTVF9PU19IUFVYIFwKLSAgICB8fCBHVEVTVF9PU19RTlggfHwgR1RFU1RfT1NfRlJFRUJTRCB8
fCBHVEVTVF9PU19OQUNMKQotI2VuZGlmICAvLyBHVEVTVF9IQVNfUFRIUkVBRAotCi0jaWYgR1RF
U1RfSEFTX1BUSFJFQUQKLS8vIGd0ZXN0LXBvcnQuaCBndWFyYW50ZWVzIHRvICNpbmNsdWRlIDxw
dGhyZWFkLmg+IHdoZW4gR1RFU1RfSEFTX1BUSFJFQUQgaXMKLS8vIHRydWUuCi0jIGluY2x1ZGUg
PHB0aHJlYWQuaD4gIC8vIE5PTElOVAotCi0vLyBGb3IgdGltZXNwZWMgYW5kIG5hbm9zbGVlcCwg
dXNlZCBiZWxvdy4KLSMgaW5jbHVkZSA8dGltZS5oPiAgLy8gTk9MSU5UCi0jZW5kaWYKLQotLy8g
RGV0ZXJtaW5lcyBpZiBoYXNoX21hcC9oYXNoX3NldCBhcmUgYXZhaWxhYmxlLgotLy8gT25seSB1
c2VkIGZvciB0ZXN0aW5nIGFnYWluc3QgdGhvc2UgY29udGFpbmVycy4KLSNpZiAhZGVmaW5lZChH
VEVTVF9IQVNfSEFTSF9NQVBfKQotIyBpZiBfTVNDX1ZFUgotIyAgZGVmaW5lIEdURVNUX0hBU19I
QVNIX01BUF8gMSAgLy8gSW5kaWNhdGVzIHRoYXQgaGFzaF9tYXAgaXMgYXZhaWxhYmxlLgotIyAg
ZGVmaW5lIEdURVNUX0hBU19IQVNIX1NFVF8gMSAgLy8gSW5kaWNhdGVzIHRoYXQgaGFzaF9zZXQg
aXMgYXZhaWxhYmxlLgotIyBlbmRpZiAgLy8gX01TQ19WRVIKLSNlbmRpZiAgLy8gIWRlZmluZWQo
R1RFU1RfSEFTX0hBU0hfTUFQXykKLQotLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIEdvb2dsZSBUZXN0
IGNhbiB1c2UgdHIxL3R1cGxlLiAgWW91IGNhbiBkZWZpbmUKLS8vIHRoaXMgbWFjcm8gdG8gMCB0
byBwcmV2ZW50IEdvb2dsZSBUZXN0IGZyb20gdXNpbmcgdHVwbGUgKGFueQotLy8gZmVhdHVyZSBk
ZXBlbmRpbmcgb24gdHVwbGUgd2l0aCBiZSBkaXNhYmxlZCBpbiB0aGlzIG1vZGUpLgotI2lmbmRl
ZiBHVEVTVF9IQVNfVFIxX1RVUExFCi0jIGlmIEdURVNUX09TX0xJTlVYX0FORFJPSUQgJiYgZGVm
aW5lZChfU1RMUE9SVF9NQUpPUikKLS8vIFNUTHBvcnQsIHByb3ZpZGVkIHdpdGggdGhlIEFuZHJv
aWQgTkRLLCBoYXMgbmVpdGhlciA8dHIxL3R1cGxlPiBvciA8dHVwbGU+LgotIyAgZGVmaW5lIEdU
RVNUX0hBU19UUjFfVFVQTEUgMAotIyBlbHNlCi0vLyBUaGUgdXNlciBkaWRuJ3QgdGVsbCB1cyBu
b3QgdG8gZG8gaXQsIHNvIHdlIGFzc3VtZSBpdCdzIE9LLgotIyAgZGVmaW5lIEdURVNUX0hBU19U
UjFfVFVQTEUgMQotIyBlbmRpZgotI2VuZGlmICAvLyBHVEVTVF9IQVNfVFIxX1RVUExFCi0KLS8v
IERldGVybWluZXMgd2hldGhlciBHb29nbGUgVGVzdCdzIG93biB0cjEgdHVwbGUgaW1wbGVtZW50
YXRpb24KLS8vIHNob3VsZCBiZSB1c2VkLgotI2lmbmRlZiBHVEVTVF9VU0VfT1dOX1RSMV9UVVBM
RQotLy8gVGhlIHVzZXIgZGlkbid0IHRlbGwgdXMsIHNvIHdlIG5lZWQgdG8gZmlndXJlIGl0IG91
dC4KLQotLy8gV2UgdXNlIG91ciBvd24gVFIxIHR1cGxlIGlmIHdlIGFyZW4ndCBzdXJlIHRoZSB1
c2VyIGhhcyBhbgotLy8gaW1wbGVtZW50YXRpb24gb2YgaXQgYWxyZWFkeS4gIEF0IHRoaXMgdGlt
ZSwgbGlic3RkYysrIDQuMC4wKyBhbmQKLS8vIE1TVkMgMjAxMCBhcmUgdGhlIG9ubHkgbWFpbnN0
cmVhbSBzdGFuZGFyZCBsaWJyYXJpZXMgdGhhdCBjb21lCi0vLyB3aXRoIGEgVFIxIHR1cGxlIGlt
cGxlbWVudGF0aW9uLiAgTlZJRElBJ3MgQ1VEQSBOVkNDIGNvbXBpbGVyCi0vLyBwcmV0ZW5kcyB0
byBiZSBHQ0MgYnkgZGVmaW5pbmcgX19HTlVDX18gYW5kIGZyaWVuZHMsIGJ1dCBjYW5ub3QKLS8v
IGNvbXBpbGUgR0NDJ3MgdHVwbGUgaW1wbGVtZW50YXRpb24uICBNU1ZDIDIwMDggKDkuMCkgcHJv
dmlkZXMgVFIxCi0vLyB0dXBsZSBpbiBhIDMyMyBNQiBGZWF0dXJlIFBhY2sgZG93bmxvYWQsIHdo
aWNoIHdlIGNhbm5vdCBhc3N1bWUgdGhlCi0vLyB1c2VyIGhhcy4gIFFOWCdzIFFDQyBjb21waWxl
ciBpcyBhIG1vZGlmaWVkIEdDQyBidXQgaXQgZG9lc24ndAotLy8gc3VwcG9ydCBUUjEgdHVwbGUu
ICBsaWJjKysgb25seSBwcm92aWRlcyBzdGQ6OnR1cGxlLCBpbiBDKysxMSBtb2RlLAotLy8gYW5k
IGl0IGNhbiBiZSB1c2VkIHdpdGggc29tZSBjb21waWxlcnMgdGhhdCBkZWZpbmUgX19HTlVDX18u
Ci0jIGlmIChkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0NVREFDQ19fKSAmJiAoR1RF
U1RfR0NDX1ZFUl8gPj0gNDAwMDApIFwKLSAgICAgICYmICFHVEVTVF9PU19RTlggJiYgIWRlZmlu
ZWQoX0xJQkNQUF9WRVJTSU9OKSkgfHwgX01TQ19WRVIgPj0gMTYwMAotIyAgZGVmaW5lIEdURVNU
X0VOVl9IQVNfVFIxX1RVUExFXyAxCi0jIGVuZGlmCi0KLS8vIEMrKzExIHNwZWNpZmllcyB0aGF0
IDx0dXBsZT4gcHJvdmlkZXMgc3RkOjp0dXBsZS4gVXNlIHRoYXQgaWYgZ3Rlc3QgaXMgdXNlZAot
Ly8gaW4gQysrMTEgbW9kZSBhbmQgbGlic3RkYysrIGlzbid0IHZlcnkgb2xkIChiaW5hcmllcyB0
YXJnZXRpbmcgT1MgWCAxMC42Ci0vLyBjYW4gYnVpbGQgd2l0aCBjbGFuZyBidXQgbmVlZCB0byB1
c2UgZ2NjNC4yJ3MgbGlic3RkYysrKS4KLSMgaWYgR1RFU1RfTEFOR19DWFgxMSAmJiAoIWRlZmlu
ZWQoX19HTElCQ1hYX18pIHx8IF9fR0xJQkNYWF9fID4gMjAxMTAzMjUpCi0jICBkZWZpbmUgR1RF
U1RfRU5WX0hBU19TVERfVFVQTEVfIDEKLSMgZW5kaWYKLQotIyBpZiBHVEVTVF9FTlZfSEFTX1RS
MV9UVVBMRV8gfHwgR1RFU1RfRU5WX0hBU19TVERfVFVQTEVfCi0jICBkZWZpbmUgR1RFU1RfVVNF
X09XTl9UUjFfVFVQTEUgMAotIyBlbHNlCi0jICBkZWZpbmUgR1RFU1RfVVNFX09XTl9UUjFfVFVQ
TEUgMQotIyBlbmRpZgotCi0jZW5kaWYgIC8vIEdURVNUX1VTRV9PV05fVFIxX1RVUExFCi0KLS8v
IFRvIGF2b2lkIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGV2ZXJ5d2hlcmUsIHdlIG1ha2UgaXQK
LS8vIGd0ZXN0LXBvcnQuaCdzIHJlc3BvbnNpYmlsaXR5IHRvICNpbmNsdWRlIHRoZSBoZWFkZXIg
aW1wbGVtZW50aW5nCi0vLyB0dXBsZS4KLSNpZiBHVEVTVF9IQVNfU1REX1RVUExFXwotIyBpbmNs
dWRlIDx0dXBsZT4gIC8vIElXWVUgcHJhZ21hOiBleHBvcnQKLSMgZGVmaW5lIEdURVNUX1RVUExF
X05BTUVTUEFDRV8gOjpzdGQKLSNlbmRpZiAgLy8gR1RFU1RfSEFTX1NURF9UVVBMRV8KLQotLy8g
V2UgaW5jbHVkZSB0cjE6OnR1cGxlIGV2ZW4gaWYgc3RkOjp0dXBsZSBpcyBhdmFpbGFibGUgdG8g
ZGVmaW5lIHByaW50ZXJzIGZvcgotLy8gdGhlbS4KLSNpZiBHVEVTVF9IQVNfVFIxX1RVUExFCi0j
IGlmbmRlZiBHVEVTVF9UVVBMRV9OQU1FU1BBQ0VfCi0jICBkZWZpbmUgR1RFU1RfVFVQTEVfTkFN
RVNQQUNFXyA6OnN0ZDo6dHIxCi0jIGVuZGlmICAvLyBHVEVTVF9UVVBMRV9OQU1FU1BBQ0VfCi0K
LSMgaWYgR1RFU1RfVVNFX09XTl9UUjFfVFVQTEUKLSMgIGluY2x1ZGUgImd0ZXN0L2ludGVybmFs
L2d0ZXN0LXR1cGxlLmgiICAvLyBJV1lVIHByYWdtYTogZXhwb3J0ICAvLyBOT0xJTlQKLSMgZWxp
ZiBHVEVTVF9FTlZfSEFTX1NURF9UVVBMRV8KLSMgIGluY2x1ZGUgPHR1cGxlPgotLy8gQysrMTEg
cHV0cyBpdHMgdHVwbGUgaW50byB0aGUgOjpzdGQgbmFtZXNwYWNlIHJhdGhlciB0aGFuCi0vLyA6
OnN0ZDo6dHIxLiAgZ3Rlc3QgZXhwZWN0cyB0dXBsZSB0byBsaXZlIGluIDo6c3RkOjp0cjEsIHNv
IHB1dCBpdCB0aGVyZS4KLS8vIFRoaXMgY2F1c2VzIHVuZGVmaW5lZCBiZWhhdmlvciwgYnV0IHN1
cHBvcnRlZCBjb21waWxlcnMgcmVhY3QgaW4KLS8vIHRoZSB3YXkgd2UgaW50ZW5kLgotbmFtZXNw
YWNlIHN0ZCB7Ci1uYW1lc3BhY2UgdHIxIHsKLXVzaW5nIDo6c3RkOjpnZXQ7Ci11c2luZyA6OnN0
ZDo6bWFrZV90dXBsZTsKLXVzaW5nIDo6c3RkOjp0dXBsZTsKLXVzaW5nIDo6c3RkOjp0dXBsZV9l
bGVtZW50OwotdXNpbmcgOjpzdGQ6OnR1cGxlX3NpemU7Ci19Ci19Ci0KLSMgZWxpZiBHVEVTVF9P
U19TWU1CSUFOCi0KLS8vIE9uIFN5bWJpYW4sIEJPT1NUX0hBU19UUjFfVFVQTEUgY2F1c2VzIEJv
b3N0J3MgVFIxIHR1cGxlIGxpYnJhcnkgdG8KLS8vIHVzZSBTVExwb3J0J3MgdHVwbGUgaW1wbGVt
ZW50YXRpb24sIHdoaWNoIHVuZm9ydHVuYXRlbHkgZG9lc24ndAotLy8gd29yayBhcyB0aGUgY29w
eSBvZiBTVExwb3J0IGRpc3RyaWJ1dGVkIHdpdGggU3ltYmlhbiBpcyBpbmNvbXBsZXRlLgotLy8g
QnkgbWFraW5nIHN1cmUgQk9PU1RfSEFTX1RSMV9UVVBMRSBpcyB1bmRlZmluZWQsIHdlIGZvcmNl
IEJvb3N0IHRvCi0vLyB1c2UgaXRzIG93biB0dXBsZSBpbXBsZW1lbnRhdGlvbi4KLSMgIGlmZGVm
IEJPT1NUX0hBU19UUjFfVFVQTEUKLSMgICB1bmRlZiBCT09TVF9IQVNfVFIxX1RVUExFCi0jICBl
bmRpZiAgLy8gQk9PU1RfSEFTX1RSMV9UVVBMRQotCi0vLyBUaGlzIHByZXZlbnRzIDxib29zdC90
cjEvZGV0YWlsL2NvbmZpZy5ocHA+LCB3aGljaCBkZWZpbmVzCi0vLyBCT09TVF9IQVNfVFIxX1RV
UExFLCBmcm9tIGJlaW5nICNpbmNsdWRlZCBieSBCb29zdCdzIDx0dXBsZT4uCi0jICBkZWZpbmUg
Qk9PU1RfVFIxX0RFVEFJTF9DT05GSUdfSFBQX0lOQ0xVREVECi0jICBpbmNsdWRlIDx0dXBsZT4g
IC8vIElXWVUgcHJhZ21hOiBleHBvcnQgIC8vIE5PTElOVAotCi0jIGVsaWYgZGVmaW5lZChfX0dO
VUNfXykgJiYgKEdURVNUX0dDQ19WRVJfID49IDQwMDAwKQotLy8gR0NDIDQuMCsgaW1wbGVtZW50
cyB0cjEvdHVwbGUgaW4gdGhlIDx0cjEvdHVwbGU+IGhlYWRlci4gIFRoaXMgZG9lcwotLy8gbm90
IGNvbmZvcm0gdG8gdGhlIFRSMSBzcGVjLCB3aGljaCByZXF1aXJlcyB0aGUgaGVhZGVyIHRvIGJl
IDx0dXBsZT4uCi0KLSMgIGlmICFHVEVTVF9IQVNfUlRUSSAmJiBHVEVTVF9HQ0NfVkVSXyA8IDQw
MzAyCi0vLyBVbnRpbCB2ZXJzaW9uIDQuMy4yLCBnY2MgaGFzIGEgYnVnIHRoYXQgY2F1c2VzIDx0
cjEvZnVuY3Rpb25hbD4sCi0vLyB3aGljaCBpcyAjaW5jbHVkZWQgYnkgPHRyMS90dXBsZT4sIHRv
IG5vdCBjb21waWxlIHdoZW4gUlRUSSBpcwotLy8gZGlzYWJsZWQuICBfVFIxX0ZVTkNUSU9OQUwg
aXMgdGhlIGhlYWRlciBndWFyZCBmb3IKLS8vIDx0cjEvZnVuY3Rpb25hbD4uICBIZW5jZSB0aGUg
Zm9sbG93aW5nICNkZWZpbmUgaXMgYSBoYWNrIHRvIHByZXZlbnQKLS8vIDx0cjEvZnVuY3Rpb25h
bD4gZnJvbSBiZWluZyBpbmNsdWRlZC4KLSMgICBkZWZpbmUgX1RSMV9GVU5DVElPTkFMIDEKLSMg
ICBpbmNsdWRlIDx0cjEvdHVwbGU+Ci0jICAgdW5kZWYgX1RSMV9GVU5DVElPTkFMICAvLyBBbGxv
d3MgdGhlIHVzZXIgdG8gI2luY2x1ZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIDx0cjEv
ZnVuY3Rpb25hbD4gaWYgaGUgY2hvb3NlcyB0by4KLSMgIGVsc2UKLSMgICBpbmNsdWRlIDx0cjEv
dHVwbGU+ICAvLyBOT0xJTlQKLSMgIGVuZGlmICAvLyAhR1RFU1RfSEFTX1JUVEkgJiYgR1RFU1Rf
R0NDX1ZFUl8gPCA0MDMwMgotCi0jIGVsc2UKLS8vIElmIHRoZSBjb21waWxlciBpcyBub3QgR0ND
IDQuMCssIHdlIGFzc3VtZSB0aGUgdXNlciBpcyB1c2luZyBhCi0vLyBzcGVjLWNvbmZvcm1pbmcg
VFIxIGltcGxlbWVudGF0aW9uLgotIyAgaW5jbHVkZSA8dHVwbGU+ICAvLyBJV1lVIHByYWdtYTog
ZXhwb3J0ICAvLyBOT0xJTlQKLSMgZW5kaWYgIC8vIEdURVNUX1VTRV9PV05fVFIxX1RVUExFCi0K
LSNlbmRpZiAgLy8gR1RFU1RfSEFTX1RSMV9UVVBMRQotCi0vLyBEZXRlcm1pbmVzIHdoZXRoZXIg
Y2xvbmUoMikgaXMgc3VwcG9ydGVkLgotLy8gVXN1YWxseSBpdCB3aWxsIG9ubHkgYmUgYXZhaWxh
YmxlIG9uIExpbnV4LCBleGNsdWRpbmcKLS8vIExpbnV4IG9uIHRoZSBJdGFuaXVtIGFyY2hpdGVj
dHVyZS4KLS8vIEFsc28gc2VlIGh0dHA6Ly9saW51eC5kaWUubmV0L21hbi8yL2Nsb25lLgotI2lm
bmRlZiBHVEVTVF9IQVNfQ0xPTkUKLS8vIFRoZSB1c2VyIGRpZG4ndCB0ZWxsIHVzLCBzbyB3ZSBu
ZWVkIHRvIGZpZ3VyZSBpdCBvdXQuCi0KLSMgaWYgR1RFU1RfT1NfTElOVVggJiYgIWRlZmluZWQo
X19pYTY0X18pCi0jICBpZiBHVEVTVF9PU19MSU5VWF9BTkRST0lECi0vLyBPbiBBbmRyb2lkLCBj
bG9uZSgpIGlzIG9ubHkgYXZhaWxhYmxlIG9uIEFSTSBzdGFydGluZyB3aXRoIEdpbmdlcmJyZWFk
LgotIyAgICBpZiBkZWZpbmVkKF9fYXJtX18pICYmIF9fQU5EUk9JRF9BUElfXyA+PSA5Ci0jICAg
ICBkZWZpbmUgR1RFU1RfSEFTX0NMT05FIDEKLSMgICAgZWxzZQotIyAgICAgZGVmaW5lIEdURVNU
X0hBU19DTE9ORSAwCi0jICAgIGVuZGlmCi0jICBlbHNlCi0jICAgZGVmaW5lIEdURVNUX0hBU19D
TE9ORSAxCi0jICBlbmRpZgotIyBlbHNlCi0jICBkZWZpbmUgR1RFU1RfSEFTX0NMT05FIDAKLSMg
ZW5kaWYgIC8vIEdURVNUX09TX0xJTlVYICYmICFkZWZpbmVkKF9faWE2NF9fKQotCi0jZW5kaWYg
IC8vIEdURVNUX0hBU19DTE9ORQotCi0vLyBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc3VwcG9ydCBz
dHJlYW0gcmVkaXJlY3Rpb24uIFRoaXMgaXMgdXNlZCB0byB0ZXN0Ci0vLyBvdXRwdXQgY29ycmVj
dG5lc3MgYW5kIHRvIGltcGxlbWVudCBkZWF0aCB0ZXN0cy4KLSNpZm5kZWYgR1RFU1RfSEFTX1NU
UkVBTV9SRURJUkVDVElPTgotLy8gQnkgZGVmYXVsdCwgd2UgYXNzdW1lIHRoYXQgc3RyZWFtIHJl
ZGlyZWN0aW9uIGlzIHN1cHBvcnRlZCBvbiBhbGwKLS8vIHBsYXRmb3JtcyBleGNlcHQga25vd24g
bW9iaWxlIG9uZXMuCi0jIGlmIEdURVNUX09TX1dJTkRPV1NfTU9CSUxFIHx8IEdURVNUX09TX1NZ
TUJJQU4gfHwgXAotICAgIEdURVNUX09TX1dJTkRPV1NfUEhPTkUgfHwgR1RFU1RfT1NfV0lORE9X
U19SVAotIyAgZGVmaW5lIEdURVNUX0hBU19TVFJFQU1fUkVESVJFQ1RJT04gMAotIyBlbHNlCi0j
ICBkZWZpbmUgR1RFU1RfSEFTX1NUUkVBTV9SRURJUkVDVElPTiAxCi0jIGVuZGlmICAvLyAhR1RF
U1RfT1NfV0lORE9XU19NT0JJTEUgJiYgIUdURVNUX09TX1NZTUJJQU4KLSNlbmRpZiAgLy8gR1RF
U1RfSEFTX1NUUkVBTV9SRURJUkVDVElPTgotCi0vLyBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc3Vw
cG9ydCBkZWF0aCB0ZXN0cy4KLS8vIEdvb2dsZSBUZXN0IGRvZXMgbm90IHN1cHBvcnQgZGVhdGgg
dGVzdHMgZm9yIFZDIDcuMSBhbmQgZWFybGllciBhcwotLy8gYWJvcnQoKSBpbiBhIFZDIDcuMSBh
cHBsaWNhdGlvbiBjb21waWxlZCBhcyBHVUkgaW4gZGVidWcgY29uZmlnCi0vLyBwb3BzIHVwIGEg
ZGlhbG9nIHdpbmRvdyB0aGF0IGNhbm5vdCBiZSBzdXBwcmVzc2VkIHByb2dyYW1tYXRpY2FsbHku
Ci0jaWYgKEdURVNUX09TX0xJTlVYIHx8IEdURVNUX09TX0NZR1dJTiB8fCBHVEVTVF9PU19TT0xB
UklTIHx8IFwKLSAgICAgKEdURVNUX09TX01BQyAmJiAhR1RFU1RfT1NfSU9TKSB8fCBcCi0gICAg
IChHVEVTVF9PU19XSU5ET1dTX0RFU0tUT1AgJiYgX01TQ19WRVIgPj0gMTQwMCkgfHwgXAotICAg
ICBHVEVTVF9PU19XSU5ET1dTX01JTkdXIHx8IEdURVNUX09TX0FJWCB8fCBHVEVTVF9PU19IUFVY
IHx8IFwKLSAgICAgR1RFU1RfT1NfT1BFTkJTRCB8fCBHVEVTVF9PU19RTlggfHwgR1RFU1RfT1Nf
RlJFRUJTRCkKLSMgZGVmaW5lIEdURVNUX0hBU19ERUFUSF9URVNUIDEKLSNlbmRpZgotCi0vLyBX
ZSBkb24ndCBzdXBwb3J0IE1TVkMgNy4xIHdpdGggZXhjZXB0aW9ucyBkaXNhYmxlZCBub3cuICBU
aGVyZWZvcmUKLS8vIGFsbCB0aGUgY29tcGlsZXJzIHdlIGNhcmUgYWJvdXQgYXJlIGFkZXF1YXRl
IGZvciBzdXBwb3J0aW5nCi0vLyB2YWx1ZS1wYXJhbWV0ZXJpemVkIHRlc3RzLgotI2RlZmluZSBH
VEVTVF9IQVNfUEFSQU1fVEVTVCAxCi0KLS8vIERldGVybWluZXMgd2hldGhlciB0byBzdXBwb3J0
IHR5cGUtZHJpdmVuIHRlc3RzLgotCi0vLyBUeXBlZCB0ZXN0cyBuZWVkIDx0eXBlaW5mbz4gYW5k
IHZhcmlhZGljIG1hY3Jvcywgd2hpY2ggR0NDLCBWQysrIDguMCwKLS8vIFN1biBQcm8gQ0MsIElC
TSBWaXN1YWwgQWdlLCBhbmQgSFAgYUNDIHN1cHBvcnQuCi0jaWYgZGVmaW5lZChfX0dOVUNfXykg
fHwgKF9NU0NfVkVSID49IDE0MDApIHx8IGRlZmluZWQoX19TVU5QUk9fQ0MpIHx8IFwKLSAgICBk
ZWZpbmVkKF9fSUJNQ1BQX18pIHx8IGRlZmluZWQoX19IUF9hQ0MpCi0jIGRlZmluZSBHVEVTVF9I
QVNfVFlQRURfVEVTVCAxCi0jIGRlZmluZSBHVEVTVF9IQVNfVFlQRURfVEVTVF9QIDEKLSNlbmRp
ZgotCi0vLyBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc3VwcG9ydCBDb21iaW5lKCkuIFRoaXMgb25s
eSBtYWtlcyBzZW5zZSB3aGVuCi0vLyB2YWx1ZS1wYXJhbWV0ZXJpemVkIHRlc3RzIGFyZSBlbmFi
bGVkLiAgVGhlIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QKLS8vIHdvcmsgb24gU3VuIFN0dWRpbyBz
aW5jZSBpdCBkb2Vzbid0IHVuZGVyc3RhbmQgdGVtcGxhdGVkIGNvbnZlcnNpb24KLS8vIG9wZXJh
dG9ycy4KLSNpZiBHVEVTVF9IQVNfUEFSQU1fVEVTVCAmJiBHVEVTVF9IQVNfVFIxX1RVUExFICYm
ICFkZWZpbmVkKF9fU1VOUFJPX0NDKQotIyBkZWZpbmUgR1RFU1RfSEFTX0NPTUJJTkUgMQotI2Vu
ZGlmCi0KLS8vIERldGVybWluZXMgd2hldGhlciB0aGUgc3lzdGVtIGNvbXBpbGVyIHVzZXMgVVRG
LTE2IGZvciBlbmNvZGluZyB3aWRlIHN0cmluZ3MuCi0jZGVmaW5lIEdURVNUX1dJREVfU1RSSU5H
X1VTRVNfVVRGMTZfIFwKLSAgICAoR1RFU1RfT1NfV0lORE9XUyB8fCBHVEVTVF9PU19DWUdXSU4g
fHwgR1RFU1RfT1NfU1lNQklBTiB8fCBHVEVTVF9PU19BSVgpCi0KLS8vIERldGVybWluZXMgd2hl
dGhlciB0ZXN0IHJlc3VsdHMgY2FuIGJlIHN0cmVhbWVkIHRvIGEgc29ja2V0LgotI2lmIEdURVNU
X09TX0xJTlVYCi0jIGRlZmluZSBHVEVTVF9DQU5fU1RSRUFNX1JFU1VMVFNfIDEKLSNlbmRpZgot
Ci0vLyBEZWZpbmVzIHNvbWUgdXRpbGl0eSBtYWNyb3MuCi0KLS8vIFRoZSBHTlUgY29tcGlsZXIg
ZW1pdHMgYSB3YXJuaW5nIGlmIG5lc3RlZCAiaWYiIHN0YXRlbWVudHMgYXJlIGZvbGxvd2VkIGJ5
Ci0vLyBhbiAiZWxzZSIgc3RhdGVtZW50IGFuZCBicmFjZXMgYXJlIG5vdCB1c2VkIHRvIGV4cGxp
Y2l0bHkgZGlzYW1iaWd1YXRlIHRoZQotLy8gImVsc2UiIGJpbmRpbmcuICBUaGlzIGxlYWRzIHRv
IHByb2JsZW1zIHdpdGggY29kZSBsaWtlOgotLy8KLS8vICAgaWYgKGdhdGUpCi0vLyAgICAgQVNT
RVJUXyooY29uZGl0aW9uKSA8PCAiU29tZSBtZXNzYWdlIjsKLS8vCi0vLyBUaGUgInN3aXRjaCAo
MCkgY2FzZSAwOiIgaWRpb20gaXMgdXNlZCB0byBzdXBwcmVzcyB0aGlzLgotI2lmZGVmIF9fSU5U
RUxfQ09NUElMRVIKLSMgZGVmaW5lIEdURVNUX0FNQklHVU9VU19FTFNFX0JMT0NLRVJfCi0jZWxz
ZQotIyBkZWZpbmUgR1RFU1RfQU1CSUdVT1VTX0VMU0VfQkxPQ0tFUl8gc3dpdGNoICgwKSBjYXNl
IDA6IGRlZmF1bHQ6ICAvLyBOT0xJTlQKLSNlbmRpZgotCi0vLyBVc2UgdGhpcyBhbm5vdGF0aW9u
IGF0IHRoZSBlbmQgb2YgYSBzdHJ1Y3QvY2xhc3MgZGVmaW5pdGlvbiB0bwotLy8gcHJldmVudCB0
aGUgY29tcGlsZXIgZnJvbSBvcHRpbWl6aW5nIGF3YXkgaW5zdGFuY2VzIHRoYXQgYXJlIG5ldmVy
Ci0vLyB1c2VkLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiBhbGwgaW50ZXJlc3RpbmcgbG9naWMgaGFw
cGVucyBpbnNpZGUgdGhlCi0vLyBjJ3RvciBhbmQgLyBvciBkJ3Rvci4gIEV4YW1wbGU6Ci0vLwot
Ly8gICBzdHJ1Y3QgRm9vIHsKLS8vICAgICBGb28oKSB7IC4uLiB9Ci0vLyAgIH0gR1RFU1RfQVRU
UklCVVRFX1VOVVNFRF87Ci0vLwotLy8gQWxzbyB1c2UgaXQgYWZ0ZXIgYSB2YXJpYWJsZSBvciBw
YXJhbWV0ZXIgZGVjbGFyYXRpb24gdG8gdGVsbCB0aGUKLS8vIGNvbXBpbGVyIHRoZSB2YXJpYWJs
ZS9wYXJhbWV0ZXIgZG9lcyBub3QgaGF2ZSB0byBiZSB1c2VkLgotI2lmIGRlZmluZWQoX19HTlVD
X18pICYmICFkZWZpbmVkKENPTVBJTEVSX0lDQykKLSMgZGVmaW5lIEdURVNUX0FUVFJJQlVURV9V
TlVTRURfIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQotI2VsaWYgZGVmaW5lZChfX2NsYW5nX18p
Ci0jIGlmIF9faGFzX2F0dHJpYnV0ZSh1bnVzZWQpCi0jICBkZWZpbmUgR1RFU1RfQVRUUklCVVRF
X1VOVVNFRF8gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCi0jIGVuZGlmCi0jZW5kaWYKLSNpZm5k
ZWYgR1RFU1RfQVRUUklCVVRFX1VOVVNFRF8KLSMgZGVmaW5lIEdURVNUX0FUVFJJQlVURV9VTlVT
RURfCi0jZW5kaWYKLQotLy8gQSBtYWNybyB0byBkaXNhbGxvdyBvcGVyYXRvcj0KLS8vIFRoaXMg
c2hvdWxkIGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFzcy4K
LSNkZWZpbmUgR1RFU1RfRElTQUxMT1dfQVNTSUdOXyh0eXBlKVwKLSAgdm9pZCBvcGVyYXRvcj0o
dHlwZSBjb25zdCAmKQotCi0vLyBBIG1hY3JvIHRvIGRpc2FsbG93IGNvcHkgY29uc3RydWN0b3Ig
YW5kIG9wZXJhdG9yPQotLy8gVGhpcyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVj
bGFyYXRpb25zIGZvciBhIGNsYXNzLgotI2RlZmluZSBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9B
U1NJR05fKHR5cGUpXAotICB0eXBlKHR5cGUgY29uc3QgJik7XAotICBHVEVTVF9ESVNBTExPV19B
U1NJR05fKHR5cGUpCi0KLS8vIFRlbGwgdGhlIGNvbXBpbGVyIHRvIHdhcm4gYWJvdXQgdW51c2Vk
IHJldHVybiB2YWx1ZXMgZm9yIGZ1bmN0aW9ucyBkZWNsYXJlZAotLy8gd2l0aCB0aGlzIG1hY3Jv
LiAgVGhlIG1hY3JvIHNob3VsZCBiZSB1c2VkIG9uIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucwotLy8g
Zm9sbG93aW5nIHRoZSBhcmd1bWVudCBsaXN0OgotLy8KLS8vICAgU3Byb2NrZXQqIEFsbG9jYXRl
U3Byb2NrZXQoKSBHVEVTVF9NVVNUX1VTRV9SRVNVTFRfOwotI2lmIGRlZmluZWQoX19HTlVDX18p
ICYmIChHVEVTVF9HQ0NfVkVSXyA+PSAzMDQwMCkgJiYgIWRlZmluZWQoQ09NUElMRVJfSUNDKQot
IyBkZWZpbmUgR1RFU1RfTVVTVF9VU0VfUkVTVUxUXyBfX2F0dHJpYnV0ZV9fICgod2Fybl91bnVz
ZWRfcmVzdWx0KSkKLSNlbHNlCi0jIGRlZmluZSBHVEVTVF9NVVNUX1VTRV9SRVNVTFRfCi0jZW5k
aWYgIC8vIF9fR05VQ19fICYmIChHVEVTVF9HQ0NfVkVSXyA+PSAzMDQwMCkgJiYgIUNPTVBJTEVS
X0lDQwotCi0vLyBNUyBDKysgY29tcGlsZXIgZW1pdHMgd2FybmluZyB3aGVuIGEgY29uZGl0aW9u
YWwgZXhwcmVzc2lvbiBpcyBjb21waWxlIHRpbWUKLS8vIGNvbnN0YW50LiBJbiBzb21lIGNvbnRl
eHRzIHRoaXMgd2FybmluZyBpcyBmYWxzZSBwb3NpdGl2ZSBhbmQgbmVlZHMgdG8gYmUKLS8vIHN1
cHByZXNzZWQuIFVzZSB0aGUgZm9sbG93aW5nIHR3byBtYWNyb3MgaW4gc3VjaCBjYXNlczoKLS8v
Ci0vLyBHVEVTVF9JTlRFTlRJT05BTF9DT05TVF9DT05EX1BVU0hfKCkKLS8vIHdoaWxlICh0cnVl
KSB7Ci0vLyBHVEVTVF9JTlRFTlRJT05BTF9DT05TVF9DT05EX1BPUF8oKQotLy8gfQotIyBkZWZp
bmUgR1RFU1RfSU5URU5USU9OQUxfQ09OU1RfQ09ORF9QVVNIXygpIFwKLSAgICBHVEVTVF9ESVNB
QkxFX01TQ19XQVJOSU5HU19QVVNIXyg0MTI3KQotIyBkZWZpbmUgR1RFU1RfSU5URU5USU9OQUxf
Q09OU1RfQ09ORF9QT1BfKCkgXAotICAgIEdURVNUX0RJU0FCTEVfTVNDX1dBUk5JTkdTX1BPUF8o
KQotCi0vLyBEZXRlcm1pbmUgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgTWljcm9zb2Z0
J3MgU3RydWN0dXJlZCBFeGNlcHRpb24KLS8vIEhhbmRsaW5nLiAgVGhpcyBpcyBzdXBwb3J0ZWQg
Ynkgc2V2ZXJhbCBXaW5kb3dzIGNvbXBpbGVycyBidXQgZ2VuZXJhbGx5Ci0vLyBkb2VzIG5vdCBl
eGlzdCBvbiBhbnkgb3RoZXIgc3lzdGVtLgotI2lmbmRlZiBHVEVTVF9IQVNfU0VICi0vLyBUaGUg
dXNlciBkaWRuJ3QgdGVsbCB1cywgc28gd2UgbmVlZCB0byBmaWd1cmUgaXQgb3V0LgotCi0jIGlm
IGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQotLy8gVGhlc2UgdHdv
IGNvbXBpbGVycyBhcmUga25vd24gdG8gc3VwcG9ydCBTRUguCi0jICBkZWZpbmUgR1RFU1RfSEFT
X1NFSCAxCi0jIGVsc2UKLS8vIEFzc3VtZSBubyBTRUguCi0jICBkZWZpbmUgR1RFU1RfSEFTX1NF
SCAwCi0jIGVuZGlmCi0KLSNkZWZpbmUgR1RFU1RfSVNfVEhSRUFEU0FGRSBcCi0gICAgKEdURVNU
X0hBU19NVVRFWF9BTkRfVEhSRUFEX0xPQ0FMXyBcCi0gICAgIHx8IChHVEVTVF9PU19XSU5ET1dT
ICYmICFHVEVTVF9PU19XSU5ET1dTX1BIT05FICYmICFHVEVTVF9PU19XSU5ET1dTX1JUKSBcCi0g
ICAgIHx8IEdURVNUX0hBU19QVEhSRUFEKQotCi0jZW5kaWYgIC8vIEdURVNUX0hBU19TRUgKLQot
I2lmZGVmIF9NU0NfVkVSCi0jIGlmIEdURVNUX0xJTktFRF9BU19TSEFSRURfTElCUkFSWQotIyAg
ZGVmaW5lIEdURVNUX0FQSV8gX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jIGVsaWYgR1RFU1RfQ1JF
QVRFX1NIQVJFRF9MSUJSQVJZCi0jICBkZWZpbmUgR1RFU1RfQVBJXyBfX2RlY2xzcGVjKGRsbGV4
cG9ydCkKLSMgZW5kaWYKLSNlbGlmIF9fR05VQ19fID49IDQgfHwgZGVmaW5lZChfX2NsYW5nX18p
Ci0jIGRlZmluZSBHVEVTVF9BUElfIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQotI2VuZGlmIC8vIF9NU0NfVkVSCi0KLSNpZm5kZWYgR1RFU1RfQVBJXwotIyBkZWZpbmUg
R1RFU1RfQVBJXwotI2VuZGlmCi0KLSNpZmRlZiBfX0dOVUNfXwotLy8gQXNrIHRoZSBjb21waWxl
ciB0byBuZXZlciBpbmxpbmUgYSBnaXZlbiBmdW5jdGlvbi4KLSMgZGVmaW5lIEdURVNUX05PX0lO
TElORV8gX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQotI2Vsc2UKLSMgZGVmaW5lIEdURVNUX05P
X0lOTElORV8KLSNlbmRpZgotCi0vLyBfTElCQ1BQX1ZFUlNJT04gaXMgZGVmaW5lZCBieSB0aGUg
bGliYysrIGxpYnJhcnkgZnJvbSB0aGUgTExWTSBwcm9qZWN0LgotI2lmIGRlZmluZWQoX19HTElC
Q1hYX18pIHx8IGRlZmluZWQoX0xJQkNQUF9WRVJTSU9OKQotIyBkZWZpbmUgR1RFU1RfSEFTX0NY
WEFCSV9IXyAxCi0jZWxzZQotIyBkZWZpbmUgR1RFU1RfSEFTX0NYWEFCSV9IXyAwCi0jZW5kaWYK
LQotLy8gQSBmdW5jdGlvbiBsZXZlbCBhdHRyaWJ1dGUgdG8gZGlzYWJsZSBjaGVja2luZyBmb3Ig
dXNlIG9mIHVuaW5pdGlhbGl6ZWQKLS8vIG1lbW9yeSB3aGVuIGJ1aWx0IHdpdGggTWVtb3J5U2Fu
aXRpemVyLgotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotIyBpZiBfX2hhc19mZWF0dXJlKG1lbW9y
eV9zYW5pdGl6ZXIpCi0jICBkZWZpbmUgR1RFU1RfQVRUUklCVVRFX05PX1NBTklUSVpFX01FTU9S
WV8gXAotICAgICAgIF9fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplX21lbW9yeSkpCi0jIGVsc2UK
LSMgIGRlZmluZSBHVEVTVF9BVFRSSUJVVEVfTk9fU0FOSVRJWkVfTUVNT1JZXwotIyBlbmRpZiAg
Ly8gX19oYXNfZmVhdHVyZShtZW1vcnlfc2FuaXRpemVyKQotI2Vsc2UKLSMgZGVmaW5lIEdURVNU
X0FUVFJJQlVURV9OT19TQU5JVElaRV9NRU1PUllfCi0jZW5kaWYgIC8vIF9fY2xhbmdfXwotCi0v
LyBBIGZ1bmN0aW9uIGxldmVsIGF0dHJpYnV0ZSB0byBkaXNhYmxlIEFkZHJlc3NTYW5pdGl6ZXIg
aW5zdHJ1bWVudGF0aW9uLgotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotIyBpZiBfX2hhc19mZWF0
dXJlKGFkZHJlc3Nfc2FuaXRpemVyKQotIyAgZGVmaW5lIEdURVNUX0FUVFJJQlVURV9OT19TQU5J
VElaRV9BRERSRVNTXyBcCi0gICAgICAgX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemVfYWRkcmVz
cykpCi0jIGVsc2UKLSMgIGRlZmluZSBHVEVTVF9BVFRSSUJVVEVfTk9fU0FOSVRJWkVfQUREUkVT
U18KLSMgZW5kaWYgIC8vIF9faGFzX2ZlYXR1cmUoYWRkcmVzc19zYW5pdGl6ZXIpCi0jZWxzZQot
IyBkZWZpbmUgR1RFU1RfQVRUUklCVVRFX05PX1NBTklUSVpFX0FERFJFU1NfCi0jZW5kaWYgIC8v
IF9fY2xhbmdfXwotCi0vLyBBIGZ1bmN0aW9uIGxldmVsIGF0dHJpYnV0ZSB0byBkaXNhYmxlIFRo
cmVhZFNhbml0aXplciBpbnN0cnVtZW50YXRpb24uCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0j
IGlmIF9faGFzX2ZlYXR1cmUodGhyZWFkX3Nhbml0aXplcikKLSMgIGRlZmluZSBHVEVTVF9BVFRS
SUJVVEVfTk9fU0FOSVRJWkVfVEhSRUFEXyBcCi0gICAgICAgX19hdHRyaWJ1dGVfXygobm9fc2Fu
aXRpemVfdGhyZWFkKSkKLSMgZWxzZQotIyAgZGVmaW5lIEdURVNUX0FUVFJJQlVURV9OT19TQU5J
VElaRV9USFJFQURfCi0jIGVuZGlmICAvLyBfX2hhc19mZWF0dXJlKHRocmVhZF9zYW5pdGl6ZXIp
Ci0jZWxzZQotIyBkZWZpbmUgR1RFU1RfQVRUUklCVVRFX05PX1NBTklUSVpFX1RIUkVBRF8KLSNl
bmRpZiAgLy8gX19jbGFuZ19fCi0KLW5hbWVzcGFjZSB0ZXN0aW5nIHsKLQotY2xhc3MgTWVzc2Fn
ZTsKLQotI2lmIGRlZmluZWQoR1RFU1RfVFVQTEVfTkFNRVNQQUNFXykKLS8vIEltcG9ydCB0dXBs
ZSBhbmQgZnJpZW5kcyBpbnRvIHRoZSA6OnRlc3RpbmcgbmFtZXNwYWNlLgotLy8gSXQgaXMgcGFy
dCBvZiBvdXIgaW50ZXJmYWNlLCBoYXZpbmcgdGhlbSBpbiA6OnRlc3RpbmcgYWxsb3dzIHVzIHRv
IGNoYW5nZQotLy8gdGhlaXIgdHlwZXMgYXMgbmVlZGVkLgotdXNpbmcgR1RFU1RfVFVQTEVfTkFN
RVNQQUNFXzo6Z2V0OwotdXNpbmcgR1RFU1RfVFVQTEVfTkFNRVNQQUNFXzo6bWFrZV90dXBsZTsK
LXVzaW5nIEdURVNUX1RVUExFX05BTUVTUEFDRV86OnR1cGxlOwotdXNpbmcgR1RFU1RfVFVQTEVf
TkFNRVNQQUNFXzo6dHVwbGVfc2l6ZTsKLXVzaW5nIEdURVNUX1RVUExFX05BTUVTUEFDRV86OnR1
cGxlX2VsZW1lbnQ7Ci0jZW5kaWYgIC8vIGRlZmluZWQoR1RFU1RfVFVQTEVfTkFNRVNQQUNFXykK
LQotbmFtZXNwYWNlIGludGVybmFsIHsKLQotLy8gQSBzZWNyZXQgdHlwZSB0aGF0IEdvb2dsZSBU
ZXN0IHVzZXJzIGRvbid0IGtub3cgYWJvdXQuICBJdCBoYXMgbm8KLS8vIGRlZmluaXRpb24gb24g
cHVycG9zZS4gIFRoZXJlZm9yZSBpdCdzIGltcG9zc2libGUgdG8gY3JlYXRlIGEKLS8vIFNlY3Jl
dCBvYmplY3QsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudC4KLWNsYXNzIFNlY3JldDsKLQotLy8gVGhl
IEdURVNUX0NPTVBJTEVfQVNTRVJUXyBtYWNybyBjYW4gYmUgdXNlZCB0byB2ZXJpZnkgdGhhdCBh
IGNvbXBpbGUgdGltZQotLy8gZXhwcmVzc2lvbiBpcyB0cnVlLiBGb3IgZXhhbXBsZSwgeW91IGNv
dWxkIHVzZSBpdCB0byB2ZXJpZnkgdGhlCi0vLyBzaXplIG9mIGEgc3RhdGljIGFycmF5OgotLy8K
LS8vICAgR1RFU1RfQ09NUElMRV9BU1NFUlRfKEdURVNUX0FSUkFZX1NJWkVfKG5hbWVzKSA9PSBO
VU1fTkFNRVMsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc19pbmNvcnJlY3Rfc2l6
ZSk7Ci0vLwotLy8gb3IgdG8gbWFrZSBzdXJlIGEgc3RydWN0IGlzIHNtYWxsZXIgdGhhbiBhIGNl
cnRhaW4gc2l6ZToKLS8vCi0vLyAgIEdURVNUX0NPTVBJTEVfQVNTRVJUXyhzaXplb2YoZm9vKSA8
IDEyOCwgZm9vX3Rvb19sYXJnZSk7Ci0vLwotLy8gVGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUg
bWFjcm8gaXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLiBJZgotLy8gdGhlIGV4cHJlc3Npb24g
aXMgZmFsc2UsIG1vc3QgY29tcGlsZXJzIHdpbGwgaXNzdWUgYSB3YXJuaW5nL2Vycm9yCi0vLyBj
b250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZS4KLQotI2lmIEdURVNUX0xBTkdfQ1hY
MTEKLSMgZGVmaW5lIEdURVNUX0NPTVBJTEVfQVNTRVJUXyhleHByLCBtc2cpIHN0YXRpY19hc3Nl
cnQoZXhwciwgI21zZykKLSNlbHNlICAvLyAhR1RFU1RfTEFOR19DWFgxMQotdGVtcGxhdGUgPGJv
b2w+Ci0gIHN0cnVjdCBDb21waWxlQXNzZXJ0IHsKLX07Ci0KLSMgZGVmaW5lIEdURVNUX0NPTVBJ
TEVfQVNTRVJUXyhleHByLCBtc2cpIFwKLSAgdHlwZWRlZiA6OnRlc3Rpbmc6OmludGVybmFsOjpD
b21waWxlQXNzZXJ0PChzdGF0aWNfY2FzdDxib29sPihleHByKSk+IFwKLSAgICAgIG1zZ1tzdGF0
aWNfY2FzdDxib29sPihleHByKSA/IDEgOiAtMV0gR1RFU1RfQVRUUklCVVRFX1VOVVNFRF8KLSNl
bmRpZiAgLy8gIUdURVNUX0xBTkdfQ1hYMTEKLQotLy8gSW1wbGVtZW50YXRpb24gZGV0YWlscyBv
ZiBHVEVTVF9DT01QSUxFX0FTU0VSVF86Ci0vLwotLy8gKEluIEMrKzExLCB3ZSBzaW1wbHkgdXNl
IHN0YXRpY19hc3NlcnQgaW5zdGVhZCBvZiB0aGUgZm9sbG93aW5nKQotLy8KLS8vIC0gR1RFU1Rf
Q09NUElMRV9BU1NFUlRfIHdvcmtzIGJ5IGRlZmluaW5nIGFuIGFycmF5IHR5cGUgdGhhdCBoYXMg
LTEKLS8vICAgZWxlbWVudHMgKGFuZCB0aHVzIGlzIGludmFsaWQpIHdoZW4gdGhlIGV4cHJlc3Np
b24gaXMgZmFsc2UuCi0vLwotLy8gLSBUaGUgc2ltcGxlciBkZWZpbml0aW9uCi0vLwotLy8gICAg
I2RlZmluZSBHVEVTVF9DT01QSUxFX0FTU0VSVF8oZXhwciwgbXNnKSB0eXBlZGVmIGNoYXIgbXNn
WyhleHByKSA/IDEgOiAtMV0KLS8vCi0vLyAgIGRvZXMgbm90IHdvcmssIGFzIGdjYyBzdXBwb3J0
cyB2YXJpYWJsZS1sZW5ndGggYXJyYXlzIHdob3NlIHNpemVzCi0vLyAgIGFyZSBkZXRlcm1pbmVk
IGF0IHJ1bi10aW1lICh0aGlzIGlzIGdjYydzIGV4dGVuc2lvbiBhbmQgbm90IHBhcnQKLS8vICAg
b2YgdGhlIEMrKyBzdGFuZGFyZCkuICBBcyBhIHJlc3VsdCwgZ2NjIGZhaWxzIHRvIHJlamVjdCB0
aGUKLS8vICAgZm9sbG93aW5nIGNvZGUgd2l0aCB0aGUgc2ltcGxlIGRlZmluaXRpb246Ci0vLwot
Ly8gICAgIGludCBmb287Ci0vLyAgICAgR1RFU1RfQ09NUElMRV9BU1NFUlRfKGZvbywgbXNnKTsg
Ly8gbm90IHN1cHBvc2VkIHRvIGNvbXBpbGUgYXMgZm9vIGlzCi0vLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGEgY29tcGlsZS10aW1lIGNvbnN0YW50LgotLy8K
LS8vIC0gQnkgdXNpbmcgdGhlIHR5cGUgQ29tcGlsZUFzc2VydDwoYm9vbChleHByKSk+LCB3ZSBl
bnN1cmVzIHRoYXQKLS8vICAgZXhwciBpcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudC4gIChUZW1w
bGF0ZSBhcmd1bWVudHMgbXVzdCBiZQotLy8gICBkZXRlcm1pbmVkIGF0IGNvbXBpbGUtdGltZS4p
Ci0vLwotLy8gLSBUaGUgb3V0dGVyIHBhcmVudGhlc2VzIGluIENvbXBpbGVBc3NlcnQ8KGJvb2wo
ZXhwcikpPiBhcmUgbmVjZXNzYXJ5Ci0vLyAgIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIGdjYyAz
LjQuNCBhbmQgNC4wLjEuICBJZiB3ZSBoYWQgd3JpdHRlbgotLy8KLS8vICAgICBDb21waWxlQXNz
ZXJ0PGJvb2woZXhwcik+Ci0vLwotLy8gICBpbnN0ZWFkLCB0aGVzZSBjb21waWxlcnMgd2lsbCBy
ZWZ1c2UgdG8gY29tcGlsZQotLy8KLS8vICAgICBHVEVTVF9DT01QSUxFX0FTU0VSVF8oNSA+IDAs
IHNvbWVfbWVzc2FnZSk7Ci0vLwotLy8gICAoVGhleSBzZWVtIHRvIHRoaW5rIHRoZSAiPiIgaW4g
IjUgPiAwIiBtYXJrcyB0aGUgZW5kIG9mIHRoZQotLy8gICB0ZW1wbGF0ZSBhcmd1bWVudCBsaXN0
LikKLS8vCi0vLyAtIFRoZSBhcnJheSBzaXplIGlzIChib29sKGV4cHIpID8gMSA6IC0xKSwgaW5z
dGVhZCBvZiBzaW1wbHkKLS8vCi0vLyAgICAgKChleHByKSA/IDEgOiAtMSkuCi0vLwotLy8gICBU
aGlzIGlzIHRvIGF2b2lkIHJ1bm5pbmcgaW50byBhIGJ1ZyBpbiBNUyBWQyA3LjEsIHdoaWNoCi0v
LyAgIGNhdXNlcyAoKDAuMCkgPyAxIDogLTEpIHRvIGluY29ycmVjdGx5IGV2YWx1YXRlIHRvIDEu
Ci0KLS8vIFN0YXRpY0Fzc2VydFR5cGVFcUhlbHBlciBpcyB1c2VkIGJ5IFN0YXRpY0Fzc2VydFR5
cGVFcSBkZWZpbmVkIGluIGd0ZXN0LmguCi0vLwotLy8gVGhpcyB0ZW1wbGF0ZSBpcyBkZWNsYXJl
ZCwgYnV0IGludGVudGlvbmFsbHkgdW5kZWZpbmVkLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMj4KLXN0cnVjdCBTdGF0aWNBc3NlcnRUeXBlRXFIZWxwZXI7Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBUPgotc3RydWN0IFN0YXRpY0Fzc2VydFR5cGVFcUhlbHBlcjxULCBUPiB7Ci0g
IGVudW0geyB2YWx1ZSA9IHRydWUgfTsKLX07Ci0KLS8vIEV2YWx1YXRlcyB0byB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzIGluICdhcnJheScuCi0jZGVmaW5lIEdURVNUX0FSUkFZX1NJWkVfKGFycmF5
KSAoc2l6ZW9mKGFycmF5KSAvIHNpemVvZihhcnJheVswXSkpCi0KLSNpZiBHVEVTVF9IQVNfR0xP
QkFMX1NUUklORwotdHlwZWRlZiA6OnN0cmluZyBzdHJpbmc7Ci0jZWxzZQotdHlwZWRlZiA6OnN0
ZDo6c3RyaW5nIHN0cmluZzsKLSNlbmRpZiAgLy8gR1RFU1RfSEFTX0dMT0JBTF9TVFJJTkcKLQot
I2lmIEdURVNUX0hBU19HTE9CQUxfV1NUUklORwotdHlwZWRlZiA6OndzdHJpbmcgd3N0cmluZzsK
LSNlbGlmIEdURVNUX0hBU19TVERfV1NUUklORwotdHlwZWRlZiA6OnN0ZDo6d3N0cmluZyB3c3Ry
aW5nOwotI2VuZGlmICAvLyBHVEVTVF9IQVNfR0xPQkFMX1dTVFJJTkcKLQotLy8gQSBoZWxwZXIg
Zm9yIHN1cHByZXNzaW5nIHdhcm5pbmdzIG9uIGNvbnN0YW50IGNvbmRpdGlvbi4gIEl0IGp1c3QK
LS8vIHJldHVybnMgJ2NvbmRpdGlvbicuCi1HVEVTVF9BUElfIGJvb2wgSXNUcnVlKGJvb2wgY29u
ZGl0aW9uKTsKLQotLy8gRGVmaW5lcyBzY29wZWRfcHRyLgotCi0vLyBUaGlzIGltcGxlbWVudGF0
aW9uIG9mIHNjb3BlZF9wdHIgaXMgUEFSVElBTCAtIGl0IG9ubHkgY29udGFpbnMKLS8vIGVub3Vn
aCBzdHVmZiB0byBzYXRpc2Z5IEdvb2dsZSBUZXN0J3MgbmVlZC4KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotY2xhc3Mgc2NvcGVkX3B0ciB7Ci0gcHVibGljOgotICB0eXBlZGVmIFQgZWxlbWVudF90
eXBlOwotCi0gIGV4cGxpY2l0IHNjb3BlZF9wdHIoVCogcCA9IE5VTEwpIDogcHRyXyhwKSB7fQot
ICB+c2NvcGVkX3B0cigpIHsgcmVzZXQoKTsgfQotCi0gIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsg
cmV0dXJuICpwdHJfOyB9Ci0gIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBwdHJfOyB9
Ci0gIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIHB0cl87IH0KLQotICBUKiByZWxlYXNlKCkgewot
ICAgIFQqIGNvbnN0IHB0ciA9IHB0cl87Ci0gICAgcHRyXyA9IE5VTEw7Ci0gICAgcmV0dXJuIHB0
cjsKLSAgfQotCi0gIHZvaWQgcmVzZXQoVCogcCA9IE5VTEwpIHsKLSAgICBpZiAocCAhPSBwdHJf
KSB7Ci0gICAgICBpZiAoSXNUcnVlKHNpemVvZihUKSA+IDApKSB7ICAvLyBNYWtlcyBzdXJlIFQg
aXMgYSBjb21wbGV0ZSB0eXBlLgotICAgICAgICBkZWxldGUgcHRyXzsKLSAgICAgIH0KLSAgICAg
IHB0cl8gPSBwOwotICAgIH0KLSAgfQotCi0gIGZyaWVuZCB2b2lkIHN3YXAoc2NvcGVkX3B0ciYg
YSwgc2NvcGVkX3B0ciYgYikgewotICAgIHVzaW5nIHN0ZDo6c3dhcDsKLSAgICBzd2FwKGEucHRy
XywgYi5wdHJfKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgVCogcHRyXzsKLQotICBHVEVTVF9ESVNB
TExPV19DT1BZX0FORF9BU1NJR05fKHNjb3BlZF9wdHIpOwotfTsKLQotLy8gRGVmaW5lcyBSRS4K
LQotLy8gQSBzaW1wbGUgQysrIHdyYXBwZXIgZm9yIDxyZWdleC5oPi4gIEl0IHVzZXMgdGhlIFBP
U0lYIEV4dGVuZGVkCi0vLyBSZWd1bGFyIEV4cHJlc3Npb24gc3ludGF4LgotY2xhc3MgR1RFU1Rf
QVBJXyBSRSB7Ci0gcHVibGljOgotICAvLyBBIGNvcHkgY29uc3RydWN0b3IgaXMgcmVxdWlyZWQg
YnkgdGhlIFN0YW5kYXJkIHRvIGluaXRpYWxpemUgb2JqZWN0Ci0gIC8vIHJlZmVyZW5jZXMgZnJv
bSByLXZhbHVlcy4KLSAgUkUoY29uc3QgUkUmIG90aGVyKSB7IEluaXQob3RoZXIucGF0dGVybigp
KTsgfQotCi0gIC8vIENvbnN0cnVjdHMgYW4gUkUgZnJvbSBhIHN0cmluZy4KLSAgUkUoY29uc3Qg
OjpzdGQ6OnN0cmluZyYgcmVnZXgpIHsgSW5pdChyZWdleC5jX3N0cigpKTsgfSAgLy8gTk9MSU5U
Ci0KLSNpZiBHVEVTVF9IQVNfR0xPQkFMX1NUUklORwotCi0gIFJFKGNvbnN0IDo6c3RyaW5nJiBy
ZWdleCkgeyBJbml0KHJlZ2V4LmNfc3RyKCkpOyB9ICAvLyBOT0xJTlQKLQotI2VuZGlmICAvLyBH
VEVTVF9IQVNfR0xPQkFMX1NUUklORwotCi0gIFJFKGNvbnN0IGNoYXIqIHJlZ2V4KSB7IEluaXQo
cmVnZXgpOyB9ICAvLyBOT0xJTlQKLSAgflJFKCk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgc3RyaW5n
IHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZWdleC4KLSAgY29uc3QgY2hhciogcGF0dGVybigpIGNv
bnN0IHsgcmV0dXJuIHBhdHRlcm5fOyB9Ci0KLSAgLy8gRnVsbE1hdGNoKHN0ciwgcmUpIHJldHVy
bnMgdHJ1ZSBpZmYgcmVndWxhciBleHByZXNzaW9uIHJlIG1hdGNoZXMKLSAgLy8gdGhlIGVudGly
ZSBzdHIuCi0gIC8vIFBhcnRpYWxNYXRjaChzdHIsIHJlKSByZXR1cm5zIHRydWUgaWZmIHJlZ3Vs
YXIgZXhwcmVzc2lvbiByZQotICAvLyBtYXRjaGVzIGEgc3Vic3RyaW5nIG9mIHN0ciAoaW5jbHVk
aW5nIHN0ciBpdHNlbGYpLgotICAvLwotICAvLyBUT0RPKHdhbkBnb29nbGUuY29tKTogbWFrZSBG
dWxsTWF0Y2goKSBhbmQgUGFydGlhbE1hdGNoKCkgd29yawotICAvLyB3aGVuIHN0ciBjb250YWlu
cyBOVUwgY2hhcmFjdGVycy4KLSAgc3RhdGljIGJvb2wgRnVsbE1hdGNoKGNvbnN0IDo6c3RkOjpz
dHJpbmcmIHN0ciwgY29uc3QgUkUmIHJlKSB7Ci0gICAgcmV0dXJuIEZ1bGxNYXRjaChzdHIuY19z
dHIoKSwgcmUpOwotICB9Ci0gIHN0YXRpYyBib29sIFBhcnRpYWxNYXRjaChjb25zdCA6OnN0ZDo6
c3RyaW5nJiBzdHIsIGNvbnN0IFJFJiByZSkgewotICAgIHJldHVybiBQYXJ0aWFsTWF0Y2goc3Ry
LmNfc3RyKCksIHJlKTsKLSAgfQotCi0jaWYgR1RFU1RfSEFTX0dMT0JBTF9TVFJJTkcKLQotICBz
dGF0aWMgYm9vbCBGdWxsTWF0Y2goY29uc3QgOjpzdHJpbmcmIHN0ciwgY29uc3QgUkUmIHJlKSB7
Ci0gICAgcmV0dXJuIEZ1bGxNYXRjaChzdHIuY19zdHIoKSwgcmUpOwotICB9Ci0gIHN0YXRpYyBi
b29sIFBhcnRpYWxNYXRjaChjb25zdCA6OnN0cmluZyYgc3RyLCBjb25zdCBSRSYgcmUpIHsKLSAg
ICByZXR1cm4gUGFydGlhbE1hdGNoKHN0ci5jX3N0cigpLCByZSk7Ci0gIH0KLQotI2VuZGlmICAv
LyBHVEVTVF9IQVNfR0xPQkFMX1NUUklORwotCi0gIHN0YXRpYyBib29sIEZ1bGxNYXRjaChjb25z
dCBjaGFyKiBzdHIsIGNvbnN0IFJFJiByZSk7Ci0gIHN0YXRpYyBib29sIFBhcnRpYWxNYXRjaChj
b25zdCBjaGFyKiBzdHIsIGNvbnN0IFJFJiByZSk7Ci0KLSBwcml2YXRlOgotICB2b2lkIEluaXQo
Y29uc3QgY2hhciogcmVnZXgpOwotCi0gIC8vIFdlIHVzZSBhIGNvbnN0IGNoYXIqIGluc3RlYWQg
b2YgYW4gc3RkOjpzdHJpbmcsIGFzIEdvb2dsZSBUZXN0IHVzZWQgdG8gYmUKLSAgLy8gdXNlZCB3
aGVyZSBzdGQ6OnN0cmluZyBpcyBub3QgYXZhaWxhYmxlLiAgVE9ETyh3YW5AZ29vZ2xlLmNvbSk6
IGNoYW5nZSB0bwotICAvLyBzdGQ6OnN0cmluZy4KLSAgY29uc3QgY2hhciogcGF0dGVybl87Ci0g
IGJvb2wgaXNfdmFsaWRfOwotCi0jaWYgR1RFU1RfVVNFU19QT1NJWF9SRQotCi0gIHJlZ2V4X3Qg
ZnVsbF9yZWdleF87ICAgICAvLyBGb3IgRnVsbE1hdGNoKCkuCi0gIHJlZ2V4X3QgcGFydGlhbF9y
ZWdleF87ICAvLyBGb3IgUGFydGlhbE1hdGNoKCkuCi0KLSNlbHNlICAvLyBHVEVTVF9VU0VTX1NJ
TVBMRV9SRQotCi0gIGNvbnN0IGNoYXIqIGZ1bGxfcGF0dGVybl87ICAvLyBGb3IgRnVsbE1hdGNo
KCk7Ci0KLSNlbmRpZgotCi0gIEdURVNUX0RJU0FMTE9XX0FTU0lHTl8oUkUpOwotfTsKLQotLy8g
Rm9ybWF0cyBhIHNvdXJjZSBmaWxlIHBhdGggYW5kIGEgbGluZSBudW1iZXIgYXMgdGhleSB3b3Vs
ZCBhcHBlYXIKLS8vIGluIGFuIGVycm9yIG1lc3NhZ2UgZnJvbSB0aGUgY29tcGlsZXIgdXNlZCB0
byBjb21waWxlIHRoaXMgY29kZS4KLUdURVNUX0FQSV8gOjpzdGQ6OnN0cmluZyBGb3JtYXRGaWxl
TG9jYXRpb24oY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpOwotCi0vLyBGb3JtYXRzIGEgZmls
ZSBsb2NhdGlvbiBmb3IgY29tcGlsZXItaW5kZXBlbmRlbnQgWE1MIG91dHB1dC4KLS8vIEFsdGhv
dWdoIHRoaXMgZnVuY3Rpb24gaXMgbm90IHBsYXRmb3JtIGRlcGVuZGVudCwgd2UgcHV0IGl0IG5l
eHQgdG8KLS8vIEZvcm1hdEZpbGVMb2NhdGlvbiBpbiBvcmRlciB0byBjb250cmFzdCB0aGUgdHdv
IGZ1bmN0aW9ucy4KLUdURVNUX0FQSV8gOjpzdGQ6OnN0cmluZyBGb3JtYXRDb21waWxlckluZGVw
ZW5kZW50RmlsZUxvY2F0aW9uKGNvbnN0IGNoYXIqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSk7Ci0K
LS8vIERlZmluZXMgbG9nZ2luZyB1dGlsaXRpZXM6Ci0vLyAgIEdURVNUX0xPR18oc2V2ZXJpdHkp
IC0gbG9ncyBtZXNzYWdlcyBhdCB0aGUgc3BlY2lmaWVkIHNldmVyaXR5IGxldmVsLiBUaGUKLS8v
ICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIGl0c2VsZiBpcyBzdHJlYW1lZCBpbnRv
IHRoZSBtYWNyby4KLS8vICAgTG9nVG9TdGRlcnIoKSAgLSBkaXJlY3RzIGFsbCBsb2cgbWVzc2Fn
ZXMgdG8gc3RkZXJyLgotLy8gICBGbHVzaEluZm9Mb2coKSAtIGZsdXNoZXMgaW5mb3JtYXRpb25h
bCBsb2cgbWVzc2FnZXMuCi0KLWVudW0gR1Rlc3RMb2dTZXZlcml0eSB7Ci0gIEdURVNUX0lORk8s
Ci0gIEdURVNUX1dBUk5JTkcsCi0gIEdURVNUX0VSUk9SLAotICBHVEVTVF9GQVRBTAotfTsKLQot
Ly8gRm9ybWF0cyBsb2cgZW50cnkgc2V2ZXJpdHksIHByb3ZpZGVzIGEgc3RyZWFtIG9iamVjdCBm
b3Igc3RyZWFtaW5nIHRoZQotLy8gbG9nIG1lc3NhZ2UsIGFuZCB0ZXJtaW5hdGVzIHRoZSBtZXNz
YWdlIHdpdGggYSBuZXdsaW5lIHdoZW4gZ29pbmcgb3V0IG9mCi0vLyBzY29wZS4KLWNsYXNzIEdU
RVNUX0FQSV8gR1Rlc3RMb2cgewotIHB1YmxpYzoKLSAgR1Rlc3RMb2coR1Rlc3RMb2dTZXZlcml0
eSBzZXZlcml0eSwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpOwotCi0gIC8vIEZsdXNoZXMg
dGhlIGJ1ZmZlcnMgYW5kLCBpZiBzZXZlcml0eSBpcyBHVEVTVF9GQVRBTCwgYWJvcnRzIHRoZSBw
cm9ncmFtLgotICB+R1Rlc3RMb2coKTsKLQotICA6OnN0ZDo6b3N0cmVhbSYgR2V0U3RyZWFtKCkg
eyByZXR1cm4gOjpzdGQ6OmNlcnI7IH0KLQotIHByaXZhdGU6Ci0gIGNvbnN0IEdUZXN0TG9nU2V2
ZXJpdHkgc2V2ZXJpdHlfOwotCi0gIEdURVNUX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTl8oR1Rl
c3RMb2cpOwotfTsKLQotI2lmICFkZWZpbmVkKEdURVNUX0xPR18pCi0KLSMgZGVmaW5lIEdURVNU
X0xPR18oc2V2ZXJpdHkpIFwKLSAgICA6OnRlc3Rpbmc6OmludGVybmFsOjpHVGVzdExvZyg6OnRl
c3Rpbmc6OmludGVybmFsOjpHVEVTVF8jI3NldmVyaXR5LCBcCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fKS5HZXRTdHJlYW0oKQotCi1pbmxpbmUg
dm9pZCBMb2dUb1N0ZGVycigpIHt9Ci1pbmxpbmUgdm9pZCBGbHVzaEluZm9Mb2coKSB7IGZmbHVz
aChOVUxMKTsgfQotCi0jZW5kaWYgIC8vICFkZWZpbmVkKEdURVNUX0xPR18pCi0KLSNpZiAhZGVm
aW5lZChHVEVTVF9DSEVDS18pCi0vLyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiAtIERPIE5PVCBV
U0UuCi0vLwotLy8gR1RFU1RfQ0hFQ0tfIGlzIGFuIGFsbC1tb2RlIGFzc2VydC4gSXQgYWJvcnRz
IHRoZSBwcm9ncmFtIGlmIHRoZSBjb25kaXRpb24KLS8vIGlzIG5vdCBzYXRpc2ZpZWQuCi0vLyAg
U3lub3BzeXM6Ci0vLyAgICBHVEVTVF9DSEVDS18oYm9vbGVhbl9jb25kaXRpb24pOwotLy8gICAg
IG9yCi0vLyAgICBHVEVTVF9DSEVDS18oYm9vbGVhbl9jb25kaXRpb24pIDw8ICJBZGRpdGlvbmFs
IG1lc3NhZ2UiOwotLy8KLS8vICAgIFRoaXMgY2hlY2tzIHRoZSBjb25kaXRpb24gYW5kIGlmIHRo
ZSBjb25kaXRpb24gaXMgbm90IHNhdGlzZmllZAotLy8gICAgaXQgcHJpbnRzIG1lc3NhZ2UgYWJv
dXQgdGhlIGNvbmRpdGlvbiB2aW9sYXRpb24sIGluY2x1ZGluZyB0aGUKLS8vICAgIGNvbmRpdGlv
biBpdHNlbGYsIHBsdXMgYWRkaXRpb25hbCBtZXNzYWdlIHN0cmVhbWVkIGludG8gaXQsIGlmIGFu
eSwKLS8vICAgIGFuZCB0aGVuIGl0IGFib3J0cyB0aGUgcHJvZ3JhbS4gSXQgYWJvcnRzIHRoZSBw
cm9ncmFtIGlycmVzcGVjdGl2ZSBvZgotLy8gICAgd2hldGhlciBpdCBpcyBidWlsdCBpbiB0aGUg
ZGVidWcgbW9kZSBvciBub3QuCi0jIGRlZmluZSBHVEVTVF9DSEVDS18oY29uZGl0aW9uKSBcCi0g
ICAgR1RFU1RfQU1CSUdVT1VTX0VMU0VfQkxPQ0tFUl8gXAotICAgIGlmICg6OnRlc3Rpbmc6Omlu
dGVybmFsOjpJc1RydWUoY29uZGl0aW9uKSkgXAotICAgICAgOyBcCi0gICAgZWxzZSBcCi0gICAg
ICBHVEVTVF9MT0dfKEZBVEFMKSA8PCAiQ29uZGl0aW9uICIgI2NvbmRpdGlvbiAiIGZhaWxlZC4g
IgotI2VuZGlmICAvLyAhZGVmaW5lZChHVEVTVF9DSEVDS18pCi0KLS8vIEFuIGFsbC1tb2RlIGFz
c2VydCB0byB2ZXJpZnkgdGhhdCB0aGUgZ2l2ZW4gUE9TSVgtc3R5bGUgZnVuY3Rpb24KLS8vIGNh
bGwgcmV0dXJucyAwIChpbmRpY2F0aW5nIHN1Y2Nlc3MpLiAgS25vd24gbGltaXRhdGlvbjogdGhp
cwotLy8gZG9lc24ndCBleHBhbmQgdG8gYSBiYWxhbmNlZCAnaWYnIHN0YXRlbWVudCwgc28gZW5j
bG9zZSB0aGUgbWFjcm8KLS8vIGluIHt9IGlmIHlvdSBuZWVkIHRvIHVzZSBpdCBhcyB0aGUgb25s
eSBzdGF0ZW1lbnQgaW4gYW4gJ2lmJwotLy8gYnJhbmNoLgotI2RlZmluZSBHVEVTVF9DSEVDS19Q
T1NJWF9TVUNDRVNTXyhwb3NpeF9jYWxsKSBcCi0gIGlmIChjb25zdCBpbnQgZ3Rlc3RfZXJyb3Ig
PSAocG9zaXhfY2FsbCkpIFwKLSAgICBHVEVTVF9MT0dfKEZBVEFMKSA8PCAjcG9zaXhfY2FsbCA8
PCAiZmFpbGVkIHdpdGggZXJyb3IgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgPDwgZ3Rlc3Rf
ZXJyb3IKLQotI2lmIEdURVNUX0hBU19TVERfTU9WRV8KLXVzaW5nIHN0ZDo6bW92ZTsKLSNlbHNl
ICAvLyBHVEVTVF9IQVNfU1REX01PVkVfCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNvbnN0IFQm
IG1vdmUoY29uc3QgVCYgdCkgewotICByZXR1cm4gdDsKLX0KLSNlbmRpZiAgLy8gR1RFU1RfSEFT
X1NURF9NT1ZFXwotCi0vLyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiAtIERPIE5PVCBVU0UgSU4g
VVNFUiBDT0RFLgotLy8KLS8vIFVzZSBJbXBsaWNpdENhc3RfIGFzIGEgc2FmZSB2ZXJzaW9uIG9m
IHN0YXRpY19jYXN0IGZvciB1cGNhc3RpbmcgaW4KLS8vIHRoZSB0eXBlIGhpZXJhcmNoeSAoZS5n
LiBjYXN0aW5nIGEgRm9vKiB0byBhIFN1cGVyY2xhc3NPZkZvbyogb3IgYQotLy8gY29uc3QgRm9v
KikuICBXaGVuIHlvdSB1c2UgSW1wbGljaXRDYXN0XywgdGhlIGNvbXBpbGVyIGNoZWNrcyB0aGF0
Ci0vLyB0aGUgY2FzdCBpcyBzYWZlLiAgU3VjaCBleHBsaWNpdCBJbXBsaWNpdENhc3RfcyBhcmUg
bmVjZXNzYXJ5IGluCi0vLyBzdXJwcmlzaW5nbHkgbWFueSBzaXR1YXRpb25zIHdoZXJlIEMrKyBk
ZW1hbmRzIGFuIGV4YWN0IHR5cGUgbWF0Y2gKLS8vIGluc3RlYWQgb2YgYW4gYXJndW1lbnQgdHlw
ZSBjb252ZXJ0YWJsZSB0byBhIHRhcmdldCB0eXBlLgotLy8KLS8vIFRoZSBzeW50YXggZm9yIHVz
aW5nIEltcGxpY2l0Q2FzdF8gaXMgdGhlIHNhbWUgYXMgZm9yIHN0YXRpY19jYXN0OgotLy8KLS8v
ICAgSW1wbGljaXRDYXN0XzxUb1R5cGU+KGV4cHIpCi0vLwotLy8gSW1wbGljaXRDYXN0XyB3b3Vs
ZCBoYXZlIGJlZW4gcGFydCBvZiB0aGUgQysrIHN0YW5kYXJkIGxpYnJhcnksCi0vLyBidXQgdGhl
IHByb3Bvc2FsIHdhcyBzdWJtaXR0ZWQgdG9vIGxhdGUuICBJdCB3aWxsIHByb2JhYmx5IG1ha2UK
LS8vIGl0cyB3YXkgaW50byB0aGUgbGFuZ3VhZ2UgaW4gdGhlIGZ1dHVyZS4KLS8vCi0vLyBUaGlz
IHJlbGF0aXZlbHkgdWdseSBuYW1lIGlzIGludGVudGlvbmFsLiBJdCBwcmV2ZW50cyBjbGFzaGVz
IHdpdGgKLS8vIHNpbWlsYXIgZnVuY3Rpb25zIHVzZXJzIG1heSBoYXZlIChlLmcuLCBpbXBsaWNp
dF9jYXN0KS4gVGhlIGludGVybmFsCi0vLyBuYW1lc3BhY2UgYWxvbmUgaXMgbm90IGVub3VnaCBi
ZWNhdXNlIHRoZSBmdW5jdGlvbiBjYW4gYmUgZm91bmQgYnkgQURMLgotdGVtcGxhdGU8dHlwZW5h
bWUgVG8+Ci1pbmxpbmUgVG8gSW1wbGljaXRDYXN0XyhUbyB4KSB7IHJldHVybiB4OyB9Ci0KLS8v
IFdoZW4geW91IHVwY2FzdCAodGhhdCBpcywgY2FzdCBhIHBvaW50ZXIgZnJvbSB0eXBlIEZvbyB0
byB0eXBlCi0vLyBTdXBlcmNsYXNzT2ZGb28pLCBpdCdzIGZpbmUgdG8gdXNlIEltcGxpY2l0Q2Fz
dF88Piwgc2luY2UgdXBjYXN0cwotLy8gYWx3YXlzIHN1Y2NlZWQuICBXaGVuIHlvdSBkb3duY2Fz
dCAodGhhdCBpcywgY2FzdCBhIHBvaW50ZXIgZnJvbQotLy8gdHlwZSBGb28gdG8gdHlwZSBTdWJj
bGFzc09mRm9vKSwgc3RhdGljX2Nhc3Q8PiBpc24ndCBzYWZlLCBiZWNhdXNlCi0vLyBob3cgZG8g
eW91IGtub3cgdGhlIHBvaW50ZXIgaXMgcmVhbGx5IG9mIHR5cGUgU3ViY2xhc3NPZkZvbz8gIEl0
Ci0vLyBjb3VsZCBiZSBhIGJhcmUgRm9vLCBvciBvZiB0eXBlIERpZmZlcmVudFN1YmNsYXNzT2ZG
b28uICBUaHVzLAotLy8gd2hlbiB5b3UgZG93bmNhc3QsIHlvdSBzaG91bGQgdXNlIHRoaXMgbWFj
cm8uICBJbiBkZWJ1ZyBtb2RlLCB3ZQotLy8gdXNlIGR5bmFtaWNfY2FzdDw+IHRvIGRvdWJsZS1j
aGVjayB0aGUgZG93bmNhc3QgaXMgbGVnYWwgKHdlIGRpZQotLy8gaWYgaXQncyBub3QpLiAgSW4g
bm9ybWFsIG1vZGUsIHdlIGRvIHRoZSBlZmZpY2llbnQgc3RhdGljX2Nhc3Q8PgotLy8gaW5zdGVh
ZC4gIFRodXMsIGl0J3MgaW1wb3J0YW50IHRvIHRlc3QgaW4gZGVidWcgbW9kZSB0byBtYWtlIHN1
cmUKLS8vIHRoZSBjYXN0IGlzIGxlZ2FsIQotLy8gICAgVGhpcyBpcyB0aGUgb25seSBwbGFjZSBp
biB0aGUgY29kZSB3ZSBzaG91bGQgdXNlIGR5bmFtaWNfY2FzdDw+LgotLy8gSW4gcGFydGljdWxh
ciwgeW91IFNIT1VMRE4nVCBiZSB1c2luZyBkeW5hbWljX2Nhc3Q8PiBpbiBvcmRlciB0bwotLy8g
ZG8gUlRUSSAoZWcgY29kZSBsaWtlIHRoaXM6Ci0vLyAgICBpZiAoZHluYW1pY19jYXN0PFN1YmNs
YXNzMT4oZm9vKSkgSGFuZGxlQVN1YmNsYXNzMU9iamVjdChmb28pOwotLy8gICAgaWYgKGR5bmFt
aWNfY2FzdDxTdWJjbGFzczI+KGZvbykpIEhhbmRsZUFTdWJjbGFzczJPYmplY3QoZm9vKTsKLS8v
IFlvdSBzaG91bGQgZGVzaWduIHRoZSBjb2RlIHNvbWUgb3RoZXIgd2F5IG5vdCB0byBuZWVkIHRo
aXMuCi0vLwotLy8gVGhpcyByZWxhdGl2ZWx5IHVnbHkgbmFtZSBpcyBpbnRlbnRpb25hbC4gSXQg
cHJldmVudHMgY2xhc2hlcyB3aXRoCi0vLyBzaW1pbGFyIGZ1bmN0aW9ucyB1c2VycyBtYXkgaGF2
ZSAoZS5nLiwgZG93bl9jYXN0KS4gVGhlIGludGVybmFsCi0vLyBuYW1lc3BhY2UgYWxvbmUgaXMg
bm90IGVub3VnaCBiZWNhdXNlIHRoZSBmdW5jdGlvbiBjYW4gYmUgZm91bmQgYnkgQURMLgotdGVt
cGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+ICAvLyB1c2UgbGlrZSB0aGlzOiBEb3du
Q2FzdF88VCo+KGZvbyk7Ci1pbmxpbmUgVG8gRG93bkNhc3RfKEZyb20qIGYpIHsgIC8vIHNvIHdl
IG9ubHkgYWNjZXB0IHBvaW50ZXJzCi0gIC8vIEVuc3VyZXMgdGhhdCBUbyBpcyBhIHN1Yi10eXBl
IG9mIEZyb20gKi4gIFRoaXMgdGVzdCBpcyBoZXJlIG9ubHkKLSAgLy8gZm9yIGNvbXBpbGUtdGlt
ZSB0eXBlIGNoZWNraW5nLCBhbmQgaGFzIG5vIG92ZXJoZWFkIGluIGFuCi0gIC8vIG9wdGltaXpl
ZCBidWlsZCBhdCBydW4tdGltZSwgYXMgaXQgd2lsbCBiZSBvcHRpbWl6ZWQgYXdheQotICAvLyBj
b21wbGV0ZWx5LgotICBHVEVTVF9JTlRFTlRJT05BTF9DT05TVF9DT05EX1BVU0hfKCkKLSAgaWYg
KGZhbHNlKSB7Ci0gIEdURVNUX0lOVEVOVElPTkFMX0NPTlNUX0NPTkRfUE9QXygpCi0gICAgY29u
c3QgVG8gdG8gPSBOVUxMOwotICAgIDo6dGVzdGluZzo6aW50ZXJuYWw6OkltcGxpY2l0Q2FzdF88
RnJvbSo+KHRvKTsKLSAgfQotCi0jaWYgR1RFU1RfSEFTX1JUVEkKLSAgLy8gUlRUSTogZGVidWcg
bW9kZSBvbmx5IQotICBHVEVTVF9DSEVDS18oZiA9PSBOVUxMIHx8IGR5bmFtaWNfY2FzdDxUbz4o
ZikgIT0gTlVMTCk7Ci0jZW5kaWYKLSAgcmV0dXJuIHN0YXRpY19jYXN0PFRvPihmKTsKLX0KLQot
Ly8gRG93bmNhc3RzIHRoZSBwb2ludGVyIG9mIHR5cGUgQmFzZSB0byBEZXJpdmVkLgotLy8gRGVy
aXZlZCBtdXN0IGJlIGEgc3ViY2xhc3Mgb2YgQmFzZS4gVGhlIHBhcmFtZXRlciBNVVNUCi0vLyBw
b2ludCB0byBhIGNsYXNzIG9mIHR5cGUgRGVyaXZlZCwgbm90IGFueSBzdWJjbGFzcyBvZiBpdC4K
LS8vIFdoZW4gUlRUSSBpcyBhdmFpbGFibGUsIHRoZSBmdW5jdGlvbiBwZXJmb3JtcyBhIHJ1bnRp
bWUKLS8vIGNoZWNrIHRvIGVuZm9yY2UgdGhpcy4KLXRlbXBsYXRlIDxjbGFzcyBEZXJpdmVkLCBj
bGFzcyBCYXNlPgotRGVyaXZlZCogQ2hlY2tlZERvd25jYXN0VG9BY3R1YWxUeXBlKEJhc2UqIGJh
c2UpIHsKLSNpZiBHVEVTVF9IQVNfUlRUSQotICBHVEVTVF9DSEVDS18odHlwZWlkKCpiYXNlKSA9
PSB0eXBlaWQoRGVyaXZlZCkpOwotI2VuZGlmCi0KLSNpZiBHVEVTVF9IQVNfRE9XTkNBU1RfCi0g
IHJldHVybiA6OmRvd25fY2FzdDxEZXJpdmVkKj4oYmFzZSk7Ci0jZWxpZiBHVEVTVF9IQVNfUlRU
SQotICByZXR1cm4gZHluYW1pY19jYXN0PERlcml2ZWQqPihiYXNlKTsgIC8vIE5PTElOVAotI2Vs
c2UKLSAgcmV0dXJuIHN0YXRpY19jYXN0PERlcml2ZWQqPihiYXNlKTsgIC8vIFBvb3IgbWFuJ3Mg
ZG93bmNhc3QuCi0jZW5kaWYKLX0KLQotI2lmIEdURVNUX0hBU19TVFJFQU1fUkVESVJFQ1RJT04K
LQotLy8gRGVmaW5lcyB0aGUgc3RkZXJyIGNhcHR1cmVyOgotLy8gICBDYXB0dXJlU3Rkb3V0ICAg
ICAtIHN0YXJ0cyBjYXB0dXJpbmcgc3Rkb3V0LgotLy8gICBHZXRDYXB0dXJlZFN0ZG91dCAtIHN0
b3BzIGNhcHR1cmluZyBzdGRvdXQgYW5kIHJldHVybnMgdGhlIGNhcHR1cmVkIHN0cmluZy4KLS8v
ICAgQ2FwdHVyZVN0ZGVyciAgICAgLSBzdGFydHMgY2FwdHVyaW5nIHN0ZGVyci4KLS8vICAgR2V0
Q2FwdHVyZWRTdGRlcnIgLSBzdG9wcyBjYXB0dXJpbmcgc3RkZXJyIGFuZCByZXR1cm5zIHRoZSBj
YXB0dXJlZCBzdHJpbmcuCi0vLwotR1RFU1RfQVBJXyB2b2lkIENhcHR1cmVTdGRvdXQoKTsKLUdU
RVNUX0FQSV8gc3RkOjpzdHJpbmcgR2V0Q2FwdHVyZWRTdGRvdXQoKTsKLUdURVNUX0FQSV8gdm9p
ZCBDYXB0dXJlU3RkZXJyKCk7Ci1HVEVTVF9BUElfIHN0ZDo6c3RyaW5nIEdldENhcHR1cmVkU3Rk
ZXJyKCk7Ci0KLSNlbmRpZiAgLy8gR1RFU1RfSEFTX1NUUkVBTV9SRURJUkVDVElPTgotCi0vLyBS
ZXR1cm5zIGEgcGF0aCB0byB0ZW1wb3JhcnkgZGlyZWN0b3J5LgotR1RFU1RfQVBJXyBzdGQ6OnN0
cmluZyBUZW1wRGlyKCk7Ci0KLS8vIFJldHVybnMgdGhlIHNpemUgKGluIGJ5dGVzKSBvZiBhIGZp
bGUuCi1HVEVTVF9BUElfIHNpemVfdCBHZXRGaWxlU2l6ZShGSUxFKiBmaWxlKTsKLQotLy8gUmVh
ZHMgdGhlIGVudGlyZSBjb250ZW50IG9mIGEgZmlsZSBhcyBhIHN0cmluZy4KLUdURVNUX0FQSV8g
c3RkOjpzdHJpbmcgUmVhZEVudGlyZUZpbGUoRklMRSogZmlsZSk7Ci0KLS8vIEFsbCBjb21tYW5k
IGxpbmUgYXJndW1lbnRzLgotR1RFU1RfQVBJXyBjb25zdCA6OnN0ZDo6dmVjdG9yPHRlc3Rpbmc6
OmludGVybmFsOjpzdHJpbmc+JiBHZXRBcmd2cygpOwotCi0jaWYgR1RFU1RfSEFTX0RFQVRIX1RF
U1QKLQotY29uc3QgOjpzdGQ6OnZlY3Rvcjx0ZXN0aW5nOjppbnRlcm5hbDo6c3RyaW5nPiYgR2V0
SW5qZWN0YWJsZUFyZ3ZzKCk7Ci12b2lkIFNldEluamVjdGFibGVBcmd2cyhjb25zdCA6OnN0ZDo6
dmVjdG9yPHRlc3Rpbmc6OmludGVybmFsOjpzdHJpbmc+KgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXdfYXJndnMpOwotCi0KLSNlbmRpZiAgLy8gR1RFU1RfSEFTX0RFQVRIX1RFU1QK
LQotLy8gRGVmaW5lcyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4KLSNpZiBHVEVTVF9JU19U
SFJFQURTQUZFCi0jIGlmIEdURVNUX0hBU19QVEhSRUFECi0vLyBTbGVlcHMgZm9yIChyb3VnaGx5
KSBuIG1pbGxpc2Vjb25kcy4gIFRoaXMgZnVuY3Rpb24gaXMgb25seSBmb3IgdGVzdGluZwotLy8g
R29vZ2xlIFRlc3QncyBvd24gY29uc3RydWN0cy4gIERvbid0IHVzZSBpdCBpbiB1c2VyIHRlc3Rz
LCBlaXRoZXIKLS8vIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuCi1pbmxpbmUgdm9pZCBTbGVlcE1p
bGxpc2Vjb25kcyhpbnQgbikgewotICBjb25zdCB0aW1lc3BlYyB0aW1lID0gewotICAgIDAsICAg
ICAgICAgICAgICAgICAgLy8gMCBzZWNvbmRzLgotICAgIG4gKiAxMDAwTCAqIDEwMDBMLCAgLy8g
QW5kIG4gbXMuCi0gIH07Ci0gIG5hbm9zbGVlcCgmdGltZSwgTlVMTCk7Ci19Ci0jIGVuZGlmICAv
LyBHVEVTVF9IQVNfUFRIUkVBRAotCi0jIGlmIEdURVNUX0hBU19OT1RJRklDQVRJT05fCi0vLyBO
b3RpZmljYXRpb24gaGFzIGFscmVhZHkgYmVlbiBpbXBvcnRlZCBpbnRvIHRoZSBuYW1lc3BhY2Uu
Ci0vLyBOb3RoaW5nIHRvIGRvIGhlcmUuCi0KLSMgZWxpZiBHVEVTVF9IQVNfUFRIUkVBRAotLy8g
QWxsb3dzIGEgY29udHJvbGxlciB0aHJlYWQgdG8gcGF1c2UgZXhlY3V0aW9uIG9mIG5ld2x5IGNy
ZWF0ZWQKLS8vIHRocmVhZHMgdW50aWwgbm90aWZpZWQuICBJbnN0YW5jZXMgb2YgdGhpcyBjbGFz
cyBtdXN0IGJlIGNyZWF0ZWQKLS8vIGFuZCBkZXN0cm95ZWQgaW4gdGhlIGNvbnRyb2xsZXIgdGhy
ZWFkLgotLy8KLS8vIFRoaXMgY2xhc3MgaXMgb25seSBmb3IgdGVzdGluZyBHb29nbGUgVGVzdCdz
IG93biBjb25zdHJ1Y3RzLiBEbyBub3QKLS8vIHVzZSBpdCBpbiB1c2VyIHRlc3RzLCBlaXRoZXIg
ZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4KLWNsYXNzIE5vdGlmaWNhdGlvbiB7Ci0gcHVibGljOgot
ICBOb3RpZmljYXRpb24oKSA6IG5vdGlmaWVkXyhmYWxzZSkgewotICAgIEdURVNUX0NIRUNLX1BP
U0lYX1NVQ0NFU1NfKHB0aHJlYWRfbXV0ZXhfaW5pdCgmbXV0ZXhfLCBOVUxMKSk7Ci0gIH0KLSAg
fk5vdGlmaWNhdGlvbigpIHsKLSAgICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm11dGV4Xyk7Ci0g
IH0KLQotICAvLyBOb3RpZmllcyBhbGwgdGhyZWFkcyBjcmVhdGVkIHdpdGggdGhpcyBub3RpZmlj
YXRpb24gdG8gc3RhcnQuIE11c3QKLSAgLy8gYmUgY2FsbGVkIGZyb20gdGhlIGNvbnRyb2xsZXIg
dGhyZWFkLgotICB2b2lkIE5vdGlmeSgpIHsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJm11dGV4
Xyk7Ci0gICAgbm90aWZpZWRfID0gdHJ1ZTsKLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbXV0
ZXhfKTsKLSAgfQotCi0gIC8vIEJsb2NrcyB1bnRpbCB0aGUgY29udHJvbGxlciB0aHJlYWQgbm90
aWZpZXMuIE11c3QgYmUgY2FsbGVkIGZyb20gYSB0ZXN0Ci0gIC8vIHRocmVhZC4KLSAgdm9pZCBX
YWl0Rm9yTm90aWZpY2F0aW9uKCkgewotICAgIGZvciAoOzspIHsKLSAgICAgIHB0aHJlYWRfbXV0
ZXhfbG9jaygmbXV0ZXhfKTsKLSAgICAgIGNvbnN0IGJvb2wgbm90aWZpZWQgPSBub3RpZmllZF87
Ci0gICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbXV0ZXhfKTsKLSAgICAgIGlmIChub3RpZmll
ZCkKLSAgICAgICAgYnJlYWs7Ci0gICAgICBTbGVlcE1pbGxpc2Vjb25kcygxMCk7Ci0gICAgfQot
ICB9Ci0KLSBwcml2YXRlOgotICBwdGhyZWFkX211dGV4X3QgbXV0ZXhfOwotICBib29sIG5vdGlm
aWVkXzsKLQotICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJR05fKE5vdGlmaWNhdGlvbik7
Ci19OwotCi0jIGVsaWYgR1RFU1RfT1NfV0lORE9XUyAmJiAhR1RFU1RfT1NfV0lORE9XU19QSE9O
RSAmJiAhR1RFU1RfT1NfV0lORE9XU19SVAotCi1HVEVTVF9BUElfIHZvaWQgU2xlZXBNaWxsaXNl
Y29uZHMoaW50IG4pOwotCi0vLyBQcm92aWRlcyBsZWFrLXNhZmUgV2luZG93cyBrZXJuZWwgaGFu
ZGxlIG93bmVyc2hpcC4KLS8vIFVzZWQgaW4gZGVhdGggdGVzdHMgYW5kIGluIHRocmVhZGluZyBz
dXBwb3J0LgotY2xhc3MgR1RFU1RfQVBJXyBBdXRvSGFuZGxlIHsKLSBwdWJsaWM6Ci0gIC8vIEFz
c3VtZSB0aGF0IFdpbjMyIEhBTkRMRSB0eXBlIGlzIGVxdWl2YWxlbnQgdG8gdm9pZCouIERvaW5n
IHNvIGFsbG93cyB1cyB0bwotICAvLyBhdm9pZCBpbmNsdWRpbmcgPHdpbmRvd3MuaD4gaW4gdGhp
cyBoZWFkZXIgZmlsZS4gSW5jbHVkaW5nIDx3aW5kb3dzLmg+IGlzCi0gIC8vIHVuZGVzaXJhYmxl
IGJlY2F1c2UgaXQgZGVmaW5lcyBhIGxvdCBvZiBzeW1ib2xzIGFuZCBtYWNyb3MgdGhhdCB0ZW5k
IHRvCi0gIC8vIGNvbmZsaWN0IHdpdGggY2xpZW50IGNvZGUuIFRoaXMgYXNzdW1wdGlvbiBpcyB2
ZXJpZmllZCBieQotICAvLyBXaW5kb3dzVHlwZXNUZXN0LkhBTkRMRUlzVm9pZFN0YXIuCi0gIHR5
cGVkZWYgdm9pZCogSGFuZGxlOwotICBBdXRvSGFuZGxlKCk7Ci0gIGV4cGxpY2l0IEF1dG9IYW5k
bGUoSGFuZGxlIGhhbmRsZSk7Ci0KLSAgfkF1dG9IYW5kbGUoKTsKLQotICBIYW5kbGUgR2V0KCkg
Y29uc3Q7Ci0gIHZvaWQgUmVzZXQoKTsKLSAgdm9pZCBSZXNldChIYW5kbGUgaGFuZGxlKTsKLQot
IHByaXZhdGU6Ci0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGhhbmRsZSBpcyBhIHZhbGlkIGhh
bmRsZSBvYmplY3QgdGhhdCBjYW4gYmUgY2xvc2VkLgotICBib29sIElzQ2xvc2VhYmxlKCkgY29u
c3Q7Ci0KLSAgSGFuZGxlIGhhbmRsZV87Ci0KLSAgR1RFU1RfRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOXyhBdXRvSGFuZGxlKTsKLX07Ci0KLS8vIEFsbG93cyBhIGNvbnRyb2xsZXIgdGhyZWFkIHRv
IHBhdXNlIGV4ZWN1dGlvbiBvZiBuZXdseSBjcmVhdGVkCi0vLyB0aHJlYWRzIHVudGlsIG5vdGlm
aWVkLiAgSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgbXVzdCBiZSBjcmVhdGVkCi0vLyBhbmQgZGVz
dHJveWVkIGluIHRoZSBjb250cm9sbGVyIHRocmVhZC4KLS8vCi0vLyBUaGlzIGNsYXNzIGlzIG9u
bHkgZm9yIHRlc3RpbmcgR29vZ2xlIFRlc3QncyBvd24gY29uc3RydWN0cy4gRG8gbm90Ci0vLyB1
c2UgaXQgaW4gdXNlciB0ZXN0cywgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuCi1jbGFz
cyBHVEVTVF9BUElfIE5vdGlmaWNhdGlvbiB7Ci0gcHVibGljOgotICBOb3RpZmljYXRpb24oKTsK
LSAgdm9pZCBOb3RpZnkoKTsKLSAgdm9pZCBXYWl0Rm9yTm90aWZpY2F0aW9uKCk7Ci0KLSBwcml2
YXRlOgotICBBdXRvSGFuZGxlIGV2ZW50XzsKLQotICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9B
U1NJR05fKE5vdGlmaWNhdGlvbik7Ci19OwotIyBlbmRpZiAgLy8gR1RFU1RfSEFTX05PVElGSUNB
VElPTl8KLQotLy8gT24gTWluR1csIHdlIGNhbiBoYXZlIGJvdGggR1RFU1RfT1NfV0lORE9XUyBh
bmQgR1RFU1RfSEFTX1BUSFJFQUQKLS8vIGRlZmluZWQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHVz
ZSBNaW5HVydzIHB0aHJlYWRzIGltcGxlbWVudGF0aW9uLCB3aGljaAotLy8gaGFzIGNvbmZvcm1h
bmNlIHByb2JsZW1zIHdpdGggc29tZSB2ZXJzaW9ucyBvZiB0aGUgUE9TSVggc3RhbmRhcmQuCi0j
IGlmIEdURVNUX0hBU19QVEhSRUFEICYmICFHVEVTVF9PU19XSU5ET1dTX01JTkdXCi0KLS8vIEFz
IGEgQy1mdW5jdGlvbiwgVGhyZWFkRnVuY1dpdGhDTGlua2FnZSBjYW5ub3QgYmUgdGVtcGxhdGVk
IGl0c2VsZi4KLS8vIENvbnNlcXVlbnRseSwgaXQgY2Fubm90IHNlbGVjdCBhIGNvcnJlY3QgaW5z
dGFudGlhdGlvbiBvZiBUaHJlYWRXaXRoUGFyYW0KLS8vIGluIG9yZGVyIHRvIGNhbGwgaXRzIFJ1
bigpLiBJbnRyb2R1Y2luZyBUaHJlYWRXaXRoUGFyYW1CYXNlIGFzIGEKLS8vIG5vbi10ZW1wbGF0
ZWQgYmFzZSBjbGFzcyBmb3IgVGhyZWFkV2l0aFBhcmFtIGFsbG93cyB1cyB0byBieXBhc3MgdGhp
cwotLy8gcHJvYmxlbS4KLWNsYXNzIFRocmVhZFdpdGhQYXJhbUJhc2UgewotIHB1YmxpYzoKLSAg
dmlydHVhbCB+VGhyZWFkV2l0aFBhcmFtQmFzZSgpIHt9Ci0gIHZpcnR1YWwgdm9pZCBSdW4oKSA9
IDA7Ci19OwotCi0vLyBwdGhyZWFkX2NyZWF0ZSgpIGFjY2VwdHMgYSBwb2ludGVyIHRvIGEgZnVu
Y3Rpb24gdHlwZSB3aXRoIHRoZSBDIGxpbmthZ2UuCi0vLyBBY2NvcmRpbmcgdG8gdGhlIFN0YW5k
YXJkICg3LjUvMSksIGZ1bmN0aW9uIHR5cGVzIHdpdGggZGlmZmVyZW50IGxpbmthZ2VzCi0vLyBh
cmUgZGlmZmVyZW50IGV2ZW4gaWYgdGhleSBhcmUgb3RoZXJ3aXNlIGlkZW50aWNhbC4gIFNvbWUg
Y29tcGlsZXJzIChmb3IKLS8vIGV4YW1wbGUsIFN1blN0dWRpbykgdHJlYXQgdGhlbSBhcyBkaWZm
ZXJlbnQgdHlwZXMuICBTaW5jZSBjbGFzcyBtZXRob2RzCi0vLyBjYW5ub3QgYmUgZGVmaW5lZCB3
aXRoIEMtbGlua2FnZSB3ZSBuZWVkIHRvIGRlZmluZSBhIGZyZWUgQy1mdW5jdGlvbiB0bwotLy8g
cGFzcyBpbnRvIHB0aHJlYWRfY3JlYXRlKCkuCi1leHRlcm4gIkMiIGlubGluZSB2b2lkKiBUaHJl
YWRGdW5jV2l0aENMaW5rYWdlKHZvaWQqIHRocmVhZCkgewotICBzdGF0aWNfY2FzdDxUaHJlYWRX
aXRoUGFyYW1CYXNlKj4odGhyZWFkKS0+UnVuKCk7Ci0gIHJldHVybiBOVUxMOwotfQotCi0vLyBI
ZWxwZXIgY2xhc3MgZm9yIHRlc3RpbmcgR29vZ2xlIFRlc3QncyBtdWx0aS10aHJlYWRpbmcgY29u
c3RydWN0cy4KLS8vIFRvIHVzZSBpdCwgd3JpdGU6Ci0vLwotLy8gICB2b2lkIFRocmVhZEZ1bmMo
aW50IHBhcmFtKSB7IC8qIERvIHRoaW5ncyB3aXRoIHBhcmFtICovIH0KLS8vICAgTm90aWZpY2F0
aW9uIHRocmVhZF9jYW5fc3RhcnQ7Ci0vLyAgIC4uLgotLy8gICAvLyBUaGUgdGhyZWFkX2Nhbl9z
dGFydCBwYXJhbWV0ZXIgaXMgb3B0aW9uYWw7IHlvdSBjYW4gc3VwcGx5IE5VTEwuCi0vLyAgIFRo
cmVhZFdpdGhQYXJhbTxpbnQ+IHRocmVhZCgmVGhyZWFkRnVuYywgNSwgJnRocmVhZF9jYW5fc3Rh
cnQpOwotLy8gICB0aHJlYWRfY2FuX3N0YXJ0Lk5vdGlmeSgpOwotLy8KLS8vIFRoZXNlIGNsYXNz
ZXMgYXJlIG9ubHkgZm9yIHRlc3RpbmcgR29vZ2xlIFRlc3QncyBvd24gY29uc3RydWN0cy4gRG8K
LS8vIG5vdCB1c2UgdGhlbSBpbiB1c2VyIHRlc3RzLCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJl
Y3RseS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgVGhyZWFkV2l0aFBhcmFtIDogcHVi
bGljIFRocmVhZFdpdGhQYXJhbUJhc2UgewotIHB1YmxpYzoKLSAgdHlwZWRlZiB2b2lkIFVzZXJU
aHJlYWRGdW5jKFQpOwotCi0gIFRocmVhZFdpdGhQYXJhbShVc2VyVGhyZWFkRnVuYyogZnVuYywg
VCBwYXJhbSwgTm90aWZpY2F0aW9uKiB0aHJlYWRfY2FuX3N0YXJ0KQotICAgICAgOiBmdW5jXyhm
dW5jKSwKLSAgICAgICAgcGFyYW1fKHBhcmFtKSwKLSAgICAgICAgdGhyZWFkX2Nhbl9zdGFydF8o
dGhyZWFkX2Nhbl9zdGFydCksCi0gICAgICAgIGZpbmlzaGVkXyhmYWxzZSkgewotICAgIFRocmVh
ZFdpdGhQYXJhbUJhc2UqIGNvbnN0IGJhc2UgPSB0aGlzOwotICAgIC8vIFRoZSB0aHJlYWQgY2Fu
IGJlIGNyZWF0ZWQgb25seSBhZnRlciBhbGwgZmllbGRzIGV4Y2VwdCB0aHJlYWRfCi0gICAgLy8g
aGF2ZSBiZWVuIGluaXRpYWxpemVkLgotICAgIEdURVNUX0NIRUNLX1BPU0lYX1NVQ0NFU1NfKAot
ICAgICAgICBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkXywgMCwgJlRocmVhZEZ1bmNXaXRoQ0xpbmth
Z2UsIGJhc2UpKTsKLSAgfQotICB+VGhyZWFkV2l0aFBhcmFtKCkgeyBKb2luKCk7IH0KLQotICB2
b2lkIEpvaW4oKSB7Ci0gICAgaWYgKCFmaW5pc2hlZF8pIHsKLSAgICAgIEdURVNUX0NIRUNLX1BP
U0lYX1NVQ0NFU1NfKHB0aHJlYWRfam9pbih0aHJlYWRfLCAwKSk7Ci0gICAgICBmaW5pc2hlZF8g
PSB0cnVlOwotICAgIH0KLSAgfQotCi0gIHZpcnR1YWwgdm9pZCBSdW4oKSB7Ci0gICAgaWYgKHRo
cmVhZF9jYW5fc3RhcnRfICE9IE5VTEwpCi0gICAgICB0aHJlYWRfY2FuX3N0YXJ0Xy0+V2FpdEZv
ck5vdGlmaWNhdGlvbigpOwotICAgIGZ1bmNfKHBhcmFtXyk7Ci0gIH0KLQotIHByaXZhdGU6Ci0g
IFVzZXJUaHJlYWRGdW5jKiBjb25zdCBmdW5jXzsgIC8vIFVzZXItc3VwcGxpZWQgdGhyZWFkIGZ1
bmN0aW9uLgotICBjb25zdCBUIHBhcmFtXzsgIC8vIFVzZXItc3VwcGxpZWQgcGFyYW1ldGVyIHRv
IHRoZSB0aHJlYWQgZnVuY3Rpb24uCi0gIC8vIFdoZW4gbm9uLU5VTEwsIHVzZWQgdG8gYmxvY2sg
ZXhlY3V0aW9uIHVudGlsIHRoZSBjb250cm9sbGVyIHRocmVhZAotICAvLyBub3RpZmllcy4KLSAg
Tm90aWZpY2F0aW9uKiBjb25zdCB0aHJlYWRfY2FuX3N0YXJ0XzsKLSAgYm9vbCBmaW5pc2hlZF87
ICAvLyB0cnVlIGlmZiB3ZSBrbm93IHRoYXQgdGhlIHRocmVhZCBmdW5jdGlvbiBoYXMgZmluaXNo
ZWQuCi0gIHB0aHJlYWRfdCB0aHJlYWRfOyAgLy8gVGhlIG5hdGl2ZSB0aHJlYWQgb2JqZWN0Lgot
Ci0gIEdURVNUX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTl8oVGhyZWFkV2l0aFBhcmFtKTsKLX07
Ci0jIGVuZGlmICAvLyAhR1RFU1RfT1NfV0lORE9XUyAmJiBHVEVTVF9IQVNfUFRIUkVBRCB8fAot
ICAgICAgICAgLy8gR1RFU1RfSEFTX01VVEVYX0FORF9USFJFQURfTE9DQUxfCi0KLSMgaWYgR1RF
U1RfSEFTX01VVEVYX0FORF9USFJFQURfTE9DQUxfCi0vLyBNdXRleCBhbmQgVGhyZWFkTG9jYWwg
aGF2ZSBhbHJlYWR5IGJlZW4gaW1wb3J0ZWQgaW50byB0aGUgbmFtZXNwYWNlLgotLy8gTm90aGlu
ZyB0byBkbyBoZXJlLgotCi0jIGVsaWYgR1RFU1RfT1NfV0lORE9XUyAmJiAhR1RFU1RfT1NfV0lO
RE9XU19QSE9ORSAmJiAhR1RFU1RfT1NfV0lORE9XU19SVAotCi0vLyBNdXRleCBpbXBsZW1lbnRz
IG11dGV4IG9uIFdpbmRvd3MgcGxhdGZvcm1zLiAgSXQgaXMgdXNlZCBpbiBjb25qdW5jdGlvbgot
Ly8gd2l0aCBjbGFzcyBNdXRleExvY2s6Ci0vLwotLy8gICBNdXRleCBtdXRleDsKLS8vICAgLi4u
Ci0vLyAgIE11dGV4TG9jayBsb2NrKCZtdXRleCk7ICAvLyBBY3F1aXJlcyB0aGUgbXV0ZXggYW5k
IHJlbGVhc2VzIGl0IGF0IHRoZQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5k
IG9mIHRoZSBjdXJyZW50IHNjb3BlLgotLy8KLS8vIEEgc3RhdGljIE11dGV4ICptdXN0KiBiZSBk
ZWZpbmVkIG9yIGRlY2xhcmVkIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nCi0vLyBtYWNyb3M6
Ci0vLyAgIEdURVNUX0RFRklORV9TVEFUSUNfTVVURVhfKGdfc29tZV9tdXRleCk7Ci0vLyAgIEdU
RVNUX0RFQ0xBUkVfU1RBVElDX01VVEVYXyhnX3NvbWVfbXV0ZXgpOwotLy8KLS8vIChBIG5vbi1z
dGF0aWMgTXV0ZXggaXMgZGVmaW5lZC9kZWNsYXJlZCBpbiB0aGUgdXN1YWwgd2F5KS4KLWNsYXNz
IEdURVNUX0FQSV8gTXV0ZXggewotIHB1YmxpYzoKLSAgZW51bSBNdXRleFR5cGUgeyBrU3RhdGlj
ID0gMCwga0R5bmFtaWMgPSAxIH07Ci0gIC8vIFdlIHJlbHkgb24ga1N0YXRpY011dGV4IGJlaW5n
IDAgYXMgaXQgaXMgdG8gd2hhdCB0aGUgbGlua2VyIGluaXRpYWxpemVzCi0gIC8vIHR5cGVfIGlu
IHN0YXRpYyBtdXRleGVzLiAgY3JpdGljYWxfc2VjdGlvbl8gd2lsbCBiZSBpbml0aWFsaXplZCBs
YXppbHkKLSAgLy8gaW4gVGhyZWFkU2FmZUxhenlJbml0KCkuCi0gIGVudW0gU3RhdGljQ29uc3Ry
dWN0b3JTZWxlY3RvciB7IGtTdGF0aWNNdXRleCA9IDAgfTsKLQotICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGludGVudGlvbmFsbHkgZG9lcyBub3RoaW5nLiAgSXQgcmVsaWVzIG9uIHR5cGVfIGJlaW5n
Ci0gIC8vIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgdG8gMCAoZWZmZWN0aXZlbHkgc2V0dGluZyBp
dCB0byBrU3RhdGljKSBhbmQgb24KLSAgLy8gVGhyZWFkU2FmZUxhenlJbml0KCkgdG8gbGF6aWx5
IGluaXRpYWxpemUgdGhlIHJlc3Qgb2YgdGhlIG1lbWJlcnMuCi0gIGV4cGxpY2l0IE11dGV4KFN0
YXRpY0NvbnN0cnVjdG9yU2VsZWN0b3IgLypkdW1teSovKSB7fQotCi0gIE11dGV4KCk7Ci0gIH5N
dXRleCgpOwotCi0gIHZvaWQgTG9jaygpOwotCi0gIHZvaWQgVW5sb2NrKCk7Ci0KLSAgLy8gRG9l
cyBub3RoaW5nIGlmIHRoZSBjdXJyZW50IHRocmVhZCBob2xkcyB0aGUgbXV0ZXguIE90aGVyd2lz
ZSwgY3Jhc2hlcwotICAvLyB3aXRoIGhpZ2ggcHJvYmFiaWxpdHkuCi0gIHZvaWQgQXNzZXJ0SGVs
ZCgpOwotCi0gcHJpdmF0ZToKLSAgLy8gSW5pdGlhbGl6ZXMgb3duZXJfdGhyZWFkX2lkXyBhbmQg
Y3JpdGljYWxfc2VjdGlvbl8gaW4gc3RhdGljIG11dGV4ZXMuCi0gIHZvaWQgVGhyZWFkU2FmZUxh
enlJbml0KCk7Ci0KLSAgLy8gUGVyIGh0dHA6Ly9ibG9ncy5tc2RuLmNvbS9iL29sZG5ld3RoaW5n
L2FyY2hpdmUvMjAwNC8wMi8yMy83ODM5NS5hc3B4LAotICAvLyB3ZSBhc3N1bWUgdGhhdCAwIGlz
IGFuIGludmFsaWQgdmFsdWUgZm9yIHRocmVhZCBJRHMuCi0gIHVuc2lnbmVkIGludCBvd25lcl90
aHJlYWRfaWRfOwotCi0gIC8vIEZvciBzdGF0aWMgbXV0ZXhlcywgd2UgcmVseSBvbiB0aGVzZSBt
ZW1iZXJzIGJlaW5nIGluaXRpYWxpemVkIHRvIHplcm9zCi0gIC8vIGJ5IHRoZSBsaW5rZXIuCi0g
IE11dGV4VHlwZSB0eXBlXzsKLSAgbG9uZyBjcml0aWNhbF9zZWN0aW9uX2luaXRfcGhhc2VfOyAg
Ly8gTk9MSU5UCi0gIF9SVExfQ1JJVElDQUxfU0VDVElPTiogY3JpdGljYWxfc2VjdGlvbl87Ci0K
LSAgR1RFU1RfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOXyhNdXRleCk7Ci19OwotCi0jIGRlZmlu
ZSBHVEVTVF9ERUNMQVJFX1NUQVRJQ19NVVRFWF8obXV0ZXgpIFwKLSAgICBleHRlcm4gOjp0ZXN0
aW5nOjppbnRlcm5hbDo6TXV0ZXggbXV0ZXgKLQotIyBkZWZpbmUgR1RFU1RfREVGSU5FX1NUQVRJ
Q19NVVRFWF8obXV0ZXgpIFwKLSAgICA6OnRlc3Rpbmc6OmludGVybmFsOjpNdXRleCBtdXRleCg6
OnRlc3Rpbmc6OmludGVybmFsOjpNdXRleDo6a1N0YXRpY011dGV4KQotCi0vLyBXZSBjYW5ub3Qg
bmFtZSB0aGlzIGNsYXNzIE11dGV4TG9jayBiZWNhdXNlIHRoZSBjdG9yIGRlY2xhcmF0aW9uIHdv
dWxkCi0vLyBjb25mbGljdCB3aXRoIGEgbWFjcm8gbmFtZWQgTXV0ZXhMb2NrLCB3aGljaCBpcyBk
ZWZpbmVkIG9uIHNvbWUKLS8vIHBsYXRmb3Jtcy4gVGhhdCBtYWNybyBpcyB1c2VkIGFzIGEgZGVm
ZW5zaXZlIG1lYXN1cmUgdG8gcHJldmVudCBhZ2FpbnN0Ci0vLyBpbmFkdmVydGVudCBtaXN1c2Vz
IG9mIE11dGV4TG9jayBsaWtlICJNdXRleExvY2soJm11KSIgcmF0aGVyIHRoYW4KLS8vICJNdXRl
eExvY2sgbCgmbXUpIi4gIEhlbmNlIHRoZSB0eXBlZGVmIHRyaWNrIGJlbG93LgotY2xhc3MgR1Rl
c3RNdXRleExvY2sgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgR1Rlc3RNdXRleExvY2soTXV0ZXgq
IG11dGV4KQotICAgICAgOiBtdXRleF8obXV0ZXgpIHsgbXV0ZXhfLT5Mb2NrKCk7IH0KLQotICB+
R1Rlc3RNdXRleExvY2soKSB7IG11dGV4Xy0+VW5sb2NrKCk7IH0KLQotIHByaXZhdGU6Ci0gIE11
dGV4KiBjb25zdCBtdXRleF87Ci0KLSAgR1RFU1RfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOXyhH
VGVzdE11dGV4TG9jayk7Ci19OwotCi10eXBlZGVmIEdUZXN0TXV0ZXhMb2NrIE11dGV4TG9jazsK
LQotLy8gQmFzZSBjbGFzcyBmb3IgVmFsdWVIb2xkZXI8VD4uICBBbGxvd3MgYSBjYWxsZXIgdG8g
aG9sZCBhbmQgZGVsZXRlIGEgdmFsdWUKLS8vIHdpdGhvdXQga25vd2luZyBpdHMgdHlwZS4KLWNs
YXNzIFRocmVhZExvY2FsVmFsdWVIb2xkZXJCYXNlIHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgflRo
cmVhZExvY2FsVmFsdWVIb2xkZXJCYXNlKCkge30KLX07Ci0KLS8vIFByb3ZpZGVzIGEgd2F5IGZv
ciBhIHRocmVhZCB0byBzZW5kIG5vdGlmaWNhdGlvbnMgdG8gYSBUaHJlYWRMb2NhbAotLy8gcmVn
YXJkbGVzcyBvZiBpdHMgcGFyYW1ldGVyIHR5cGUuCi1jbGFzcyBUaHJlYWRMb2NhbEJhc2Ugewot
IHB1YmxpYzoKLSAgLy8gQ3JlYXRlcyBhIG5ldyBWYWx1ZUhvbGRlcjxUPiBvYmplY3QgaG9sZGlu
ZyBhIGRlZmF1bHQgdmFsdWUgcGFzc2VkIHRvCi0gIC8vIHRoaXMgVGhyZWFkTG9jYWw8VD4ncyBj
b25zdHJ1Y3RvciBhbmQgcmV0dXJucyBpdC4gIEl0IGlzIHRoZSBjYWxsZXIncwotICAvLyByZXNw
b25zaWJpbGl0eSBub3QgdG8gY2FsbCB0aGlzIHdoZW4gdGhlIFRocmVhZExvY2FsPFQ+IGluc3Rh
bmNlIGFscmVhZHkKLSAgLy8gaGFzIGEgdmFsdWUgb24gdGhlIGN1cnJlbnQgdGhyZWFkLgotICB2
aXJ0dWFsIFRocmVhZExvY2FsVmFsdWVIb2xkZXJCYXNlKiBOZXdWYWx1ZUZvckN1cnJlbnRUaHJl
YWQoKSBjb25zdCA9IDA7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIFRocmVhZExvY2FsQmFzZSgpIHt9Ci0g
IHZpcnR1YWwgflRocmVhZExvY2FsQmFzZSgpIHt9Ci0KLSBwcml2YXRlOgotICBHVEVTVF9ESVNB
TExPV19DT1BZX0FORF9BU1NJR05fKFRocmVhZExvY2FsQmFzZSk7Ci19OwotCi0vLyBNYXBzIGEg
dGhyZWFkIHRvIGEgc2V0IG9mIFRocmVhZExvY2FscyB0aGF0IGhhdmUgdmFsdWVzIGluc3RhbnRp
YXRlZCBvbiB0aGF0Ci0vLyB0aHJlYWQgYW5kIG5vdGlmaWVzIHRoZW0gd2hlbiB0aGUgdGhyZWFk
IGV4aXRzLiAgQSBUaHJlYWRMb2NhbCBpbnN0YW5jZSBpcwotLy8gZXhwZWN0ZWQgdG8gcGVyc2lz
dCB1bnRpbCBhbGwgdGhyZWFkcyBpdCBoYXMgdmFsdWVzIG9uIGhhdmUgdGVybWluYXRlZC4KLWNs
YXNzIEdURVNUX0FQSV8gVGhyZWFkTG9jYWxSZWdpc3RyeSB7Ci0gcHVibGljOgotICAvLyBSZWdp
c3RlcnMgdGhyZWFkX2xvY2FsX2luc3RhbmNlIGFzIGhhdmluZyB2YWx1ZSBvbiB0aGUgY3VycmVu
dCB0aHJlYWQuCi0gIC8vIFJldHVybnMgYSB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGlkZW50
aWZ5IHRoZSB0aHJlYWQgZnJvbSBvdGhlciB0aHJlYWRzLgotICBzdGF0aWMgVGhyZWFkTG9jYWxW
YWx1ZUhvbGRlckJhc2UqIEdldFZhbHVlT25DdXJyZW50VGhyZWFkKAotICAgICAgY29uc3QgVGhy
ZWFkTG9jYWxCYXNlKiB0aHJlYWRfbG9jYWxfaW5zdGFuY2UpOwotCi0gIC8vIEludm9rZWQgd2hl
biBhIFRocmVhZExvY2FsIGluc3RhbmNlIGlzIGRlc3Ryb3llZC4KLSAgc3RhdGljIHZvaWQgT25U
aHJlYWRMb2NhbERlc3Ryb3llZCgKLSAgICAgIGNvbnN0IFRocmVhZExvY2FsQmFzZSogdGhyZWFk
X2xvY2FsX2luc3RhbmNlKTsKLX07Ci0KLWNsYXNzIEdURVNUX0FQSV8gVGhyZWFkV2l0aFBhcmFt
QmFzZSB7Ci0gcHVibGljOgotICB2b2lkIEpvaW4oKTsKLQotIHByb3RlY3RlZDoKLSAgY2xhc3Mg
UnVubmFibGUgewotICAgcHVibGljOgotICAgIHZpcnR1YWwgflJ1bm5hYmxlKCkge30KLSAgICB2
aXJ0dWFsIHZvaWQgUnVuKCkgPSAwOwotICB9OwotCi0gIFRocmVhZFdpdGhQYXJhbUJhc2UoUnVu
bmFibGUgKnJ1bm5hYmxlLCBOb3RpZmljYXRpb24qIHRocmVhZF9jYW5fc3RhcnQpOwotICB2aXJ0
dWFsIH5UaHJlYWRXaXRoUGFyYW1CYXNlKCk7Ci0KLSBwcml2YXRlOgotICBBdXRvSGFuZGxlIHRo
cmVhZF87Ci19OwotCi0vLyBIZWxwZXIgY2xhc3MgZm9yIHRlc3RpbmcgR29vZ2xlIFRlc3QncyBt
dWx0aS10aHJlYWRpbmcgY29uc3RydWN0cy4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3Mg
VGhyZWFkV2l0aFBhcmFtIDogcHVibGljIFRocmVhZFdpdGhQYXJhbUJhc2UgewotIHB1YmxpYzoK
LSAgdHlwZWRlZiB2b2lkIFVzZXJUaHJlYWRGdW5jKFQpOwotCi0gIFRocmVhZFdpdGhQYXJhbShV
c2VyVGhyZWFkRnVuYyogZnVuYywgVCBwYXJhbSwgTm90aWZpY2F0aW9uKiB0aHJlYWRfY2FuX3N0
YXJ0KQotICAgICAgOiBUaHJlYWRXaXRoUGFyYW1CYXNlKG5ldyBSdW5uYWJsZUltcGwoZnVuYywg
cGFyYW0pLCB0aHJlYWRfY2FuX3N0YXJ0KSB7Ci0gIH0KLSAgdmlydHVhbCB+VGhyZWFkV2l0aFBh
cmFtKCkge30KLQotIHByaXZhdGU6Ci0gIGNsYXNzIFJ1bm5hYmxlSW1wbCA6IHB1YmxpYyBSdW5u
YWJsZSB7Ci0gICBwdWJsaWM6Ci0gICAgUnVubmFibGVJbXBsKFVzZXJUaHJlYWRGdW5jKiBmdW5j
LCBUIHBhcmFtKQotICAgICAgICA6IGZ1bmNfKGZ1bmMpLAotICAgICAgICAgIHBhcmFtXyhwYXJh
bSkgewotICAgIH0KLSAgICB2aXJ0dWFsIH5SdW5uYWJsZUltcGwoKSB7fQotICAgIHZpcnR1YWwg
dm9pZCBSdW4oKSB7Ci0gICAgICBmdW5jXyhwYXJhbV8pOwotICAgIH0KLQotICAgcHJpdmF0ZToK
LSAgICBVc2VyVGhyZWFkRnVuYyogY29uc3QgZnVuY187Ci0gICAgY29uc3QgVCBwYXJhbV87Ci0K
LSAgICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJR05fKFJ1bm5hYmxlSW1wbCk7Ci0gIH07
Ci0KLSAgR1RFU1RfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOXyhUaHJlYWRXaXRoUGFyYW0pOwot
fTsKLQotLy8gSW1wbGVtZW50cyB0aHJlYWQtbG9jYWwgc3RvcmFnZSBvbiBXaW5kb3dzIHN5c3Rl
bXMuCi0vLwotLy8gICAvLyBUaHJlYWQgMQotLy8gICBUaHJlYWRMb2NhbDxpbnQ+IHRsKDEwMCk7
ICAvLyAxMDAgaXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggdGhyZWFkLgotLy8KLS8vICAg
Ly8gVGhyZWFkIDIKLS8vICAgdGwuc2V0KDE1MCk7ICAvLyBDaGFuZ2VzIHRoZSB2YWx1ZSBmb3Ig
dGhyZWFkIDIgb25seS4KLS8vICAgRVhQRUNUX0VRKDE1MCwgdGwuZ2V0KCkpOwotLy8KLS8vICAg
Ly8gVGhyZWFkIDEKLS8vICAgRVhQRUNUX0VRKDEwMCwgdGwuZ2V0KCkpOyAgLy8gSW4gdGhyZWFk
IDEsIHRsIGhhcyB0aGUgb3JpZ2luYWwgdmFsdWUuCi0vLyAgIHRsLnNldCgyMDApOwotLy8gICBF
WFBFQ1RfRVEoMjAwLCB0bC5nZXQoKSk7Ci0vLwotLy8gVGhlIHRlbXBsYXRlIHR5cGUgYXJndW1l
bnQgVCBtdXN0IGhhdmUgYSBwdWJsaWMgY29weSBjb25zdHJ1Y3Rvci4KLS8vIEluIGFkZGl0aW9u
LCB0aGUgZGVmYXVsdCBUaHJlYWRMb2NhbCBjb25zdHJ1Y3RvciByZXF1aXJlcyBUIHRvIGhhdmUK
LS8vIGEgcHVibGljIGRlZmF1bHQgY29uc3RydWN0b3IuCi0vLwotLy8gVGhlIHVzZXJzIG9mIGEg
VGhlYWRMb2NhbCBpbnN0YW5jZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCBidXQgb25lCi0v
LyB0aHJlYWRzIChpbmNsdWRpbmcgdGhlIG1haW4gb25lKSB1c2luZyB0aGF0IGluc3RhbmNlIGhh
dmUgZXhpdGVkIGJlZm9yZQotLy8gZGVzdHJveWluZyBpdC4gT3RoZXJ3aXNlLCB0aGUgcGVyLXRo
cmVhZCBvYmplY3RzIG1hbmFnZWQgZm9yIHRoZW0gYnkgdGhlCi0vLyBUaHJlYWRMb2NhbCBpbnN0
YW5jZSBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgZGVzdHJveWVkIG9uIGFsbCBwbGF0Zm9ybXMu
Ci0vLwotLy8gR29vZ2xlIFRlc3Qgb25seSB1c2VzIGdsb2JhbCBUaHJlYWRMb2NhbCBvYmplY3Rz
LiAgVGhhdCBtZWFucyB0aGV5Ci0vLyB3aWxsIGRpZSBhZnRlciBtYWluKCkgaGFzIHJldHVybmVk
LiAgVGhlcmVmb3JlLCBubyBwZXItdGhyZWFkCi0vLyBvYmplY3QgbWFuYWdlZCBieSBHb29nbGUg
VGVzdCB3aWxsIGJlIGxlYWtlZCBhcyBsb25nIGFzIGFsbCB0aHJlYWRzCi0vLyB1c2luZyBHb29n
bGUgVGVzdCBoYXZlIGV4aXRlZCB3aGVuIG1haW4oKSByZXR1cm5zLgotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci1jbGFzcyBUaHJlYWRMb2NhbCA6IHB1YmxpYyBUaHJlYWRMb2NhbEJhc2UgewotIHB1
YmxpYzoKLSAgVGhyZWFkTG9jYWwoKSA6IGRlZmF1bHRfZmFjdG9yeV8obmV3IERlZmF1bHRWYWx1
ZUhvbGRlckZhY3RvcnkoKSkge30KLSAgZXhwbGljaXQgVGhyZWFkTG9jYWwoY29uc3QgVCYgdmFs
dWUpCi0gICAgICA6IGRlZmF1bHRfZmFjdG9yeV8obmV3IEluc3RhbmNlVmFsdWVIb2xkZXJGYWN0
b3J5KHZhbHVlKSkge30KLQotICB+VGhyZWFkTG9jYWwoKSB7IFRocmVhZExvY2FsUmVnaXN0cnk6
Ok9uVGhyZWFkTG9jYWxEZXN0cm95ZWQodGhpcyk7IH0KLQotICBUKiBwb2ludGVyKCkgeyByZXR1
cm4gR2V0T3JDcmVhdGVWYWx1ZSgpOyB9Ci0gIGNvbnN0IFQqIHBvaW50ZXIoKSBjb25zdCB7IHJl
dHVybiBHZXRPckNyZWF0ZVZhbHVlKCk7IH0KLSAgY29uc3QgVCYgZ2V0KCkgY29uc3QgeyByZXR1
cm4gKnBvaW50ZXIoKTsgfQotICB2b2lkIHNldChjb25zdCBUJiB2YWx1ZSkgeyAqcG9pbnRlcigp
ID0gdmFsdWU7IH0KLQotIHByaXZhdGU6Ci0gIC8vIEhvbGRzIGEgdmFsdWUgb2YgVC4gIENhbiBi
ZSBkZWxldGVkIHZpYSBpdHMgYmFzZSBjbGFzcyB3aXRob3V0IHRoZSBjYWxsZXIKLSAgLy8ga25v
d2luZyB0aGUgdHlwZSBvZiBULgotICBjbGFzcyBWYWx1ZUhvbGRlciA6IHB1YmxpYyBUaHJlYWRM
b2NhbFZhbHVlSG9sZGVyQmFzZSB7Ci0gICBwdWJsaWM6Ci0gICAgVmFsdWVIb2xkZXIoKSA6IHZh
bHVlXygpIHt9Ci0gICAgZXhwbGljaXQgVmFsdWVIb2xkZXIoY29uc3QgVCYgdmFsdWUpIDogdmFs
dWVfKHZhbHVlKSB7fQotCi0gICAgVCogcG9pbnRlcigpIHsgcmV0dXJuICZ2YWx1ZV87IH0KLQot
ICAgcHJpdmF0ZToKLSAgICBUIHZhbHVlXzsKLSAgICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9B
U1NJR05fKFZhbHVlSG9sZGVyKTsKLSAgfTsKLQotCi0gIFQqIEdldE9yQ3JlYXRlVmFsdWUoKSBj
b25zdCB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlSG9sZGVyKj4oCi0gICAgICAgIFRo
cmVhZExvY2FsUmVnaXN0cnk6OkdldFZhbHVlT25DdXJyZW50VGhyZWFkKHRoaXMpKS0+cG9pbnRl
cigpOwotICB9Ci0KLSAgdmlydHVhbCBUaHJlYWRMb2NhbFZhbHVlSG9sZGVyQmFzZSogTmV3VmFs
dWVGb3JDdXJyZW50VGhyZWFkKCkgY29uc3QgewotICAgIHJldHVybiBkZWZhdWx0X2ZhY3Rvcnlf
LT5NYWtlTmV3SG9sZGVyKCk7Ci0gIH0KLQotICBjbGFzcyBWYWx1ZUhvbGRlckZhY3Rvcnkgewot
ICAgcHVibGljOgotICAgIFZhbHVlSG9sZGVyRmFjdG9yeSgpIHt9Ci0gICAgdmlydHVhbCB+VmFs
dWVIb2xkZXJGYWN0b3J5KCkge30KLSAgICB2aXJ0dWFsIFZhbHVlSG9sZGVyKiBNYWtlTmV3SG9s
ZGVyKCkgY29uc3QgPSAwOwotCi0gICBwcml2YXRlOgotICAgIEdURVNUX0RJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTl8oVmFsdWVIb2xkZXJGYWN0b3J5KTsKLSAgfTsKLQotICBjbGFzcyBEZWZhdWx0
VmFsdWVIb2xkZXJGYWN0b3J5IDogcHVibGljIFZhbHVlSG9sZGVyRmFjdG9yeSB7Ci0gICBwdWJs
aWM6Ci0gICAgRGVmYXVsdFZhbHVlSG9sZGVyRmFjdG9yeSgpIHt9Ci0gICAgdmlydHVhbCBWYWx1
ZUhvbGRlciogTWFrZU5ld0hvbGRlcigpIGNvbnN0IHsgcmV0dXJuIG5ldyBWYWx1ZUhvbGRlcigp
OyB9Ci0KLSAgIHByaXZhdGU6Ci0gICAgR1RFU1RfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOXyhE
ZWZhdWx0VmFsdWVIb2xkZXJGYWN0b3J5KTsKLSAgfTsKLQotICBjbGFzcyBJbnN0YW5jZVZhbHVl
SG9sZGVyRmFjdG9yeSA6IHB1YmxpYyBWYWx1ZUhvbGRlckZhY3RvcnkgewotICAgcHVibGljOgot
ICAgIGV4cGxpY2l0IEluc3RhbmNlVmFsdWVIb2xkZXJGYWN0b3J5KGNvbnN0IFQmIHZhbHVlKSA6
IHZhbHVlXyh2YWx1ZSkge30KLSAgICB2aXJ0dWFsIFZhbHVlSG9sZGVyKiBNYWtlTmV3SG9sZGVy
KCkgY29uc3QgewotICAgICAgcmV0dXJuIG5ldyBWYWx1ZUhvbGRlcih2YWx1ZV8pOwotICAgIH0K
LQotICAgcHJpdmF0ZToKLSAgICBjb25zdCBUIHZhbHVlXzsgIC8vIFRoZSB2YWx1ZSBmb3IgZWFj
aCB0aHJlYWQuCi0KLSAgICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJR05fKEluc3RhbmNl
VmFsdWVIb2xkZXJGYWN0b3J5KTsKLSAgfTsKLQotICBzY29wZWRfcHRyPFZhbHVlSG9sZGVyRmFj
dG9yeT4gZGVmYXVsdF9mYWN0b3J5XzsKLQotICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJ
R05fKFRocmVhZExvY2FsKTsKLX07Ci0KLSMgZWxpZiBHVEVTVF9IQVNfUFRIUkVBRAotCi0vLyBN
dXRleEJhc2UgYW5kIE11dGV4IGltcGxlbWVudCBtdXRleCBvbiBwdGhyZWFkcy1iYXNlZCBwbGF0
Zm9ybXMuCi1jbGFzcyBNdXRleEJhc2UgewotIHB1YmxpYzoKLSAgLy8gQWNxdWlyZXMgdGhpcyBt
dXRleC4KLSAgdm9pZCBMb2NrKCkgewotICAgIEdURVNUX0NIRUNLX1BPU0lYX1NVQ0NFU1NfKHB0
aHJlYWRfbXV0ZXhfbG9jaygmbXV0ZXhfKSk7Ci0gICAgb3duZXJfID0gcHRocmVhZF9zZWxmKCk7
Ci0gICAgaGFzX293bmVyXyA9IHRydWU7Ci0gIH0KLQotICAvLyBSZWxlYXNlcyB0aGlzIG11dGV4
LgotICB2b2lkIFVubG9jaygpIHsKLSAgICAvLyBTaW5jZSB0aGUgbG9jayBpcyBiZWluZyByZWxl
YXNlZCB0aGUgb3duZXJfIGZpZWxkIHNob3VsZCBubyBsb25nZXIgYmUKLSAgICAvLyBjb25zaWRl
cmVkIHZhbGlkLiBXZSBkb24ndCBwcm90ZWN0IHdyaXRpbmcgdG8gaGFzX293bmVyXyBoZXJlLCBh
cyBpdCdzCi0gICAgLy8gdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0
IHRoZSBjdXJyZW50IHRocmVhZCBob2xkcyB0aGUKLSAgICAvLyBtdXRleCB3aGVuIHRoaXMgaXMg
Y2FsbGVkLgotICAgIGhhc19vd25lcl8gPSBmYWxzZTsKLSAgICBHVEVTVF9DSEVDS19QT1NJWF9T
VUNDRVNTXyhwdGhyZWFkX211dGV4X3VubG9jaygmbXV0ZXhfKSk7Ci0gIH0KLQotICAvLyBEb2Vz
IG5vdGhpbmcgaWYgdGhlIGN1cnJlbnQgdGhyZWFkIGhvbGRzIHRoZSBtdXRleC4gT3RoZXJ3aXNl
LCBjcmFzaGVzCi0gIC8vIHdpdGggaGlnaCBwcm9iYWJpbGl0eS4KLSAgdm9pZCBBc3NlcnRIZWxk
KCkgY29uc3QgewotICAgIEdURVNUX0NIRUNLXyhoYXNfb3duZXJfICYmIHB0aHJlYWRfZXF1YWwo
b3duZXJfLCBwdGhyZWFkX3NlbGYoKSkpCi0gICAgICAgIDw8ICJUaGUgY3VycmVudCB0aHJlYWQg
aXMgbm90IGhvbGRpbmcgdGhlIG11dGV4IEAiIDw8IHRoaXM7Ci0gIH0KLQotICAvLyBBIHN0YXRp
YyBtdXRleCBtYXkgYmUgdXNlZCBiZWZvcmUgbWFpbigpIGlzIGVudGVyZWQuICBJdCBtYXkgZXZl
bgotICAvLyBiZSB1c2VkIGJlZm9yZSB0aGUgZHluYW1pYyBpbml0aWFsaXphdGlvbiBzdGFnZS4g
IFRoZXJlZm9yZSB3ZQotICAvLyBtdXN0IGJlIGFibGUgdG8gaW5pdGlhbGl6ZSBhIHN0YXRpYyBt
dXRleCBvYmplY3QgYXQgbGluayB0aW1lLgotICAvLyBUaGlzIG1lYW5zIE11dGV4QmFzZSBoYXMg
dG8gYmUgYSBQT0QgYW5kIGl0cyBtZW1iZXIgdmFyaWFibGVzCi0gIC8vIGhhdmUgdG8gYmUgcHVi
bGljLgotIHB1YmxpYzoKLSAgcHRocmVhZF9tdXRleF90IG11dGV4XzsgIC8vIFRoZSB1bmRlcmx5
aW5nIHB0aHJlYWQgbXV0ZXguCi0gIC8vIGhhc19vd25lcl8gaW5kaWNhdGVzIHdoZXRoZXIgdGhl
IG93bmVyXyBmaWVsZCBiZWxvdyBjb250YWlucyBhIHZhbGlkIHRocmVhZAotICAvLyBJRCBhbmQg
aXMgdGhlcmVmb3JlIHNhZmUgdG8gaW5zcGVjdCAoZS5nLiwgdG8gdXNlIGluIHB0aHJlYWRfZXF1
YWwoKSkuIEFsbAotICAvLyBhY2Nlc3NlcyB0byB0aGUgb3duZXJfIGZpZWxkIHNob3VsZCBiZSBw
cm90ZWN0ZWQgYnkgYSBjaGVjayBvZiB0aGlzIGZpZWxkLgotICAvLyBBbiBhbHRlcm5hdGl2ZSBt
aWdodCBiZSB0byBtZW1zZXQoKSBvd25lcl8gdG8gYWxsIHplcm9zLCBidXQgdGhlcmUncyBubwot
ICAvLyBndWFyYW50ZWUgdGhhdCBhIHplcm8nZCBwdGhyZWFkX3QgaXMgbmVjZXNzYXJpbHkgaW52
YWxpZCBvciBldmVuIGRpZmZlcmVudAotICAvLyBmcm9tIHB0aHJlYWRfc2VsZigpLgotICBib29s
IGhhc19vd25lcl87Ci0gIHB0aHJlYWRfdCBvd25lcl87ICAvLyBUaGUgdGhyZWFkIGhvbGRpbmcg
dGhlIG11dGV4LgotfTsKLQotLy8gRm9yd2FyZC1kZWNsYXJlcyBhIHN0YXRpYyBtdXRleC4KLSMg
IGRlZmluZSBHVEVTVF9ERUNMQVJFX1NUQVRJQ19NVVRFWF8obXV0ZXgpIFwKLSAgICAgZXh0ZXJu
IDo6dGVzdGluZzo6aW50ZXJuYWw6Ok11dGV4QmFzZSBtdXRleAotCi0vLyBEZWZpbmVzIGFuZCBz
dGF0aWNhbGx5IChpLmUuIGF0IGxpbmsgdGltZSkgaW5pdGlhbGl6ZXMgYSBzdGF0aWMgbXV0ZXgu
Ci0jICBkZWZpbmUgR1RFU1RfREVGSU5FX1NUQVRJQ19NVVRFWF8obXV0ZXgpIFwKLSAgICAgOjp0
ZXN0aW5nOjppbnRlcm5hbDo6TXV0ZXhCYXNlIG11dGV4ID0geyBQVEhSRUFEX01VVEVYX0lOSVRJ
QUxJWkVSLCBmYWxzZSwgcHRocmVhZF90KCkgfQotCi0vLyBUaGUgTXV0ZXggY2xhc3MgY2FuIG9u
bHkgYmUgdXNlZCBmb3IgbXV0ZXhlcyBjcmVhdGVkIGF0IHJ1bnRpbWUuIEl0Ci0vLyBzaGFyZXMg
aXRzIEFQSSB3aXRoIE11dGV4QmFzZSBvdGhlcndpc2UuCi1jbGFzcyBNdXRleCA6IHB1YmxpYyBN
dXRleEJhc2UgewotIHB1YmxpYzoKLSAgTXV0ZXgoKSB7Ci0gICAgR1RFU1RfQ0hFQ0tfUE9TSVhf
U1VDQ0VTU18ocHRocmVhZF9tdXRleF9pbml0KCZtdXRleF8sIE5VTEwpKTsKLSAgICBoYXNfb3du
ZXJfID0gZmFsc2U7Ci0gIH0KLSAgfk11dGV4KCkgewotICAgIEdURVNUX0NIRUNLX1BPU0lYX1NV
Q0NFU1NfKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbXV0ZXhfKSk7Ci0gIH0KLQotIHByaXZhdGU6
Ci0gIEdURVNUX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTl8oTXV0ZXgpOwotfTsKLQotLy8gV2Ug
Y2Fubm90IG5hbWUgdGhpcyBjbGFzcyBNdXRleExvY2sgYmVjYXVzZSB0aGUgY3RvciBkZWNsYXJh
dGlvbiB3b3VsZAotLy8gY29uZmxpY3Qgd2l0aCBhIG1hY3JvIG5hbWVkIE11dGV4TG9jaywgd2hp
Y2ggaXMgZGVmaW5lZCBvbiBzb21lCi0vLyBwbGF0Zm9ybXMuIFRoYXQgbWFjcm8gaXMgdXNlZCBh
cyBhIGRlZmVuc2l2ZSBtZWFzdXJlIHRvIHByZXZlbnQgYWdhaW5zdAotLy8gaW5hZHZlcnRlbnQg
bWlzdXNlcyBvZiBNdXRleExvY2sgbGlrZSAiTXV0ZXhMb2NrKCZtdSkiIHJhdGhlciB0aGFuCi0v
LyAiTXV0ZXhMb2NrIGwoJm11KSIuICBIZW5jZSB0aGUgdHlwZWRlZiB0cmljayBiZWxvdy4KLWNs
YXNzIEdUZXN0TXV0ZXhMb2NrIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEdUZXN0TXV0ZXhMb2Nr
KE11dGV4QmFzZSogbXV0ZXgpCi0gICAgICA6IG11dGV4XyhtdXRleCkgeyBtdXRleF8tPkxvY2so
KTsgfQotCi0gIH5HVGVzdE11dGV4TG9jaygpIHsgbXV0ZXhfLT5VbmxvY2soKTsgfQotCi0gcHJp
dmF0ZToKLSAgTXV0ZXhCYXNlKiBjb25zdCBtdXRleF87Ci0KLSAgR1RFU1RfRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOXyhHVGVzdE11dGV4TG9jayk7Ci19OwotCi10eXBlZGVmIEdUZXN0TXV0ZXhM
b2NrIE11dGV4TG9jazsKLQotLy8gSGVscGVycyBmb3IgVGhyZWFkTG9jYWwuCi0KLS8vIHB0aHJl
YWRfa2V5X2NyZWF0ZSgpIHJlcXVpcmVzIERlbGV0ZVRocmVhZExvY2FsVmFsdWUoKSB0byBoYXZl
Ci0vLyBDLWxpbmthZ2UuICBUaGVyZWZvcmUgaXQgY2Fubm90IGJlIHRlbXBsYXRpemVkIHRvIGFj
Y2VzcwotLy8gVGhyZWFkTG9jYWw8VD4uICBIZW5jZSB0aGUgbmVlZCBmb3IgY2xhc3MKLS8vIFRo
cmVhZExvY2FsVmFsdWVIb2xkZXJCYXNlLgotY2xhc3MgVGhyZWFkTG9jYWxWYWx1ZUhvbGRlckJh
c2UgewotIHB1YmxpYzoKLSAgdmlydHVhbCB+VGhyZWFkTG9jYWxWYWx1ZUhvbGRlckJhc2UoKSB7
fQotfTsKLQotLy8gQ2FsbGVkIGJ5IHB0aHJlYWQgdG8gZGVsZXRlIHRocmVhZC1sb2NhbCBkYXRh
IHN0b3JlZCBieQotLy8gcHRocmVhZF9zZXRzcGVjaWZpYygpLgotZXh0ZXJuICJDIiBpbmxpbmUg
dm9pZCBEZWxldGVUaHJlYWRMb2NhbFZhbHVlKHZvaWQqIHZhbHVlX2hvbGRlcikgewotICBkZWxl
dGUgc3RhdGljX2Nhc3Q8VGhyZWFkTG9jYWxWYWx1ZUhvbGRlckJhc2UqPih2YWx1ZV9ob2xkZXIp
OwotfQotCi0vLyBJbXBsZW1lbnRzIHRocmVhZC1sb2NhbCBzdG9yYWdlIG9uIHB0aHJlYWRzLWJh
c2VkIHN5c3RlbXMuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFRocmVhZExvY2FsIHsK
LSBwdWJsaWM6Ci0gIFRocmVhZExvY2FsKCkKLSAgICAgIDoga2V5XyhDcmVhdGVLZXkoKSksIGRl
ZmF1bHRfZmFjdG9yeV8obmV3IERlZmF1bHRWYWx1ZUhvbGRlckZhY3RvcnkoKSkge30KLSAgZXhw
bGljaXQgVGhyZWFkTG9jYWwoY29uc3QgVCYgdmFsdWUpCi0gICAgICA6IGtleV8oQ3JlYXRlS2V5
KCkpLAotICAgICAgICBkZWZhdWx0X2ZhY3RvcnlfKG5ldyBJbnN0YW5jZVZhbHVlSG9sZGVyRmFj
dG9yeSh2YWx1ZSkpIHt9Ci0KLSAgflRocmVhZExvY2FsKCkgewotICAgIC8vIERlc3Ryb3lzIHRo
ZSBtYW5hZ2VkIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkLCBpZiBhbnkuCi0gICAgRGVs
ZXRlVGhyZWFkTG9jYWxWYWx1ZShwdGhyZWFkX2dldHNwZWNpZmljKGtleV8pKTsKLQotICAgIC8v
IFJlbGVhc2VzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGtleS4gIFRoaXMgd2lsbCAq
bm90KgotICAgIC8vIGRlbGV0ZSBtYW5hZ2VkIG9iamVjdHMgZm9yIG90aGVyIHRocmVhZHMuCi0g
ICAgR1RFU1RfQ0hFQ0tfUE9TSVhfU1VDQ0VTU18ocHRocmVhZF9rZXlfZGVsZXRlKGtleV8pKTsK
LSAgfQotCi0gIFQqIHBvaW50ZXIoKSB7IHJldHVybiBHZXRPckNyZWF0ZVZhbHVlKCk7IH0KLSAg
Y29uc3QgVCogcG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIEdldE9yQ3JlYXRlVmFsdWUoKTsgfQot
ICBjb25zdCBUJiBnZXQoKSBjb25zdCB7IHJldHVybiAqcG9pbnRlcigpOyB9Ci0gIHZvaWQgc2V0
KGNvbnN0IFQmIHZhbHVlKSB7ICpwb2ludGVyKCkgPSB2YWx1ZTsgfQotCi0gcHJpdmF0ZToKLSAg
Ly8gSG9sZHMgYSB2YWx1ZSBvZiB0eXBlIFQuCi0gIGNsYXNzIFZhbHVlSG9sZGVyIDogcHVibGlj
IFRocmVhZExvY2FsVmFsdWVIb2xkZXJCYXNlIHsKLSAgIHB1YmxpYzoKLSAgICBWYWx1ZUhvbGRl
cigpIDogdmFsdWVfKCkge30KLSAgICBleHBsaWNpdCBWYWx1ZUhvbGRlcihjb25zdCBUJiB2YWx1
ZSkgOiB2YWx1ZV8odmFsdWUpIHt9Ci0KLSAgICBUKiBwb2ludGVyKCkgeyByZXR1cm4gJnZhbHVl
XzsgfQotCi0gICBwcml2YXRlOgotICAgIFQgdmFsdWVfOwotICAgIEdURVNUX0RJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTl8oVmFsdWVIb2xkZXIpOwotICB9OwotCi0gIHN0YXRpYyBwdGhyZWFkX2tl
eV90IENyZWF0ZUtleSgpIHsKLSAgICBwdGhyZWFkX2tleV90IGtleTsKLSAgICAvLyBXaGVuIGEg
dGhyZWFkIGV4aXRzLCBEZWxldGVUaHJlYWRMb2NhbFZhbHVlKCkgd2lsbCBiZSBjYWxsZWQgb24K
LSAgICAvLyB0aGUgb2JqZWN0IG1hbmFnZWQgZm9yIHRoYXQgdGhyZWFkLgotICAgIEdURVNUX0NI
RUNLX1BPU0lYX1NVQ0NFU1NfKAotICAgICAgICBwdGhyZWFkX2tleV9jcmVhdGUoJmtleSwgJkRl
bGV0ZVRocmVhZExvY2FsVmFsdWUpKTsKLSAgICByZXR1cm4ga2V5OwotICB9Ci0KLSAgVCogR2V0
T3JDcmVhdGVWYWx1ZSgpIGNvbnN0IHsKLSAgICBUaHJlYWRMb2NhbFZhbHVlSG9sZGVyQmFzZSog
Y29uc3QgaG9sZGVyID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8VGhyZWFkTG9jYWxWYWx1ZUhvbGRl
ckJhc2UqPihwdGhyZWFkX2dldHNwZWNpZmljKGtleV8pKTsKLSAgICBpZiAoaG9sZGVyICE9IE5V
TEwpIHsKLSAgICAgIHJldHVybiBDaGVja2VkRG93bmNhc3RUb0FjdHVhbFR5cGU8VmFsdWVIb2xk
ZXI+KGhvbGRlciktPnBvaW50ZXIoKTsKLSAgICB9Ci0KLSAgICBWYWx1ZUhvbGRlciogY29uc3Qg
bmV3X2hvbGRlciA9IGRlZmF1bHRfZmFjdG9yeV8tPk1ha2VOZXdIb2xkZXIoKTsKLSAgICBUaHJl
YWRMb2NhbFZhbHVlSG9sZGVyQmFzZSogY29uc3QgaG9sZGVyX2Jhc2UgPSBuZXdfaG9sZGVyOwot
ICAgIEdURVNUX0NIRUNLX1BPU0lYX1NVQ0NFU1NfKHB0aHJlYWRfc2V0c3BlY2lmaWMoa2V5Xywg
aG9sZGVyX2Jhc2UpKTsKLSAgICByZXR1cm4gbmV3X2hvbGRlci0+cG9pbnRlcigpOwotICB9Ci0K
LSAgY2xhc3MgVmFsdWVIb2xkZXJGYWN0b3J5IHsKLSAgIHB1YmxpYzoKLSAgICBWYWx1ZUhvbGRl
ckZhY3RvcnkoKSB7fQotICAgIHZpcnR1YWwgflZhbHVlSG9sZGVyRmFjdG9yeSgpIHt9Ci0gICAg
dmlydHVhbCBWYWx1ZUhvbGRlciogTWFrZU5ld0hvbGRlcigpIGNvbnN0ID0gMDsKLQotICAgcHJp
dmF0ZToKLSAgICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJR05fKFZhbHVlSG9sZGVyRmFj
dG9yeSk7Ci0gIH07Ci0KLSAgY2xhc3MgRGVmYXVsdFZhbHVlSG9sZGVyRmFjdG9yeSA6IHB1Ymxp
YyBWYWx1ZUhvbGRlckZhY3RvcnkgewotICAgcHVibGljOgotICAgIERlZmF1bHRWYWx1ZUhvbGRl
ckZhY3RvcnkoKSB7fQotICAgIHZpcnR1YWwgVmFsdWVIb2xkZXIqIE1ha2VOZXdIb2xkZXIoKSBj
b25zdCB7IHJldHVybiBuZXcgVmFsdWVIb2xkZXIoKTsgfQotCi0gICBwcml2YXRlOgotICAgIEdU
RVNUX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTl8oRGVmYXVsdFZhbHVlSG9sZGVyRmFjdG9yeSk7
Ci0gIH07Ci0KLSAgY2xhc3MgSW5zdGFuY2VWYWx1ZUhvbGRlckZhY3RvcnkgOiBwdWJsaWMgVmFs
dWVIb2xkZXJGYWN0b3J5IHsKLSAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJbnN0YW5jZVZhbHVl
SG9sZGVyRmFjdG9yeShjb25zdCBUJiB2YWx1ZSkgOiB2YWx1ZV8odmFsdWUpIHt9Ci0gICAgdmly
dHVhbCBWYWx1ZUhvbGRlciogTWFrZU5ld0hvbGRlcigpIGNvbnN0IHsKLSAgICAgIHJldHVybiBu
ZXcgVmFsdWVIb2xkZXIodmFsdWVfKTsKLSAgICB9Ci0KLSAgIHByaXZhdGU6Ci0gICAgY29uc3Qg
VCB2YWx1ZV87ICAvLyBUaGUgdmFsdWUgZm9yIGVhY2ggdGhyZWFkLgotCi0gICAgR1RFU1RfRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOXyhJbnN0YW5jZVZhbHVlSG9sZGVyRmFjdG9yeSk7Ci0gIH07
Ci0KLSAgLy8gQSBrZXkgcHRocmVhZHMgdXNlcyBmb3IgbG9va2luZyB1cCBwZXItdGhyZWFkIHZh
bHVlcy4KLSAgY29uc3QgcHRocmVhZF9rZXlfdCBrZXlfOwotICBzY29wZWRfcHRyPFZhbHVlSG9s
ZGVyRmFjdG9yeT4gZGVmYXVsdF9mYWN0b3J5XzsKLQotICBHVEVTVF9ESVNBTExPV19DT1BZX0FO
RF9BU1NJR05fKFRocmVhZExvY2FsKTsKLX07Ci0KLSMgZW5kaWYgIC8vIEdURVNUX0hBU19NVVRF
WF9BTkRfVEhSRUFEX0xPQ0FMXwotCi0jZWxzZSAgLy8gR1RFU1RfSVNfVEhSRUFEU0FGRQotCi0v
LyBBIGR1bW15IGltcGxlbWVudGF0aW9uIG9mIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzICht
dXRleCwgbG9jaywKLS8vIGFuZCB0aHJlYWQtbG9jYWwgdmFyaWFibGUpLiAgTmVjZXNzYXJ5IGZv
ciBjb21waWxpbmcgR29vZ2xlIFRlc3Qgd2hlcmUKLS8vIG11dGV4IGlzIG5vdCBzdXBwb3J0ZWQg
LSB1c2luZyBHb29nbGUgVGVzdCBpbiBtdWx0aXBsZSB0aHJlYWRzIGlzIG5vdAotLy8gc3VwcG9y
dGVkIG9uIHN1Y2ggcGxhdGZvcm1zLgotCi1jbGFzcyBNdXRleCB7Ci0gcHVibGljOgotICBNdXRl
eCgpIHt9Ci0gIHZvaWQgTG9jaygpIHt9Ci0gIHZvaWQgVW5sb2NrKCkge30KLSAgdm9pZCBBc3Nl
cnRIZWxkKCkgY29uc3Qge30KLX07Ci0KLSMgZGVmaW5lIEdURVNUX0RFQ0xBUkVfU1RBVElDX01V
VEVYXyhtdXRleCkgXAotICBleHRlcm4gOjp0ZXN0aW5nOjppbnRlcm5hbDo6TXV0ZXggbXV0ZXgK
LQotIyBkZWZpbmUgR1RFU1RfREVGSU5FX1NUQVRJQ19NVVRFWF8obXV0ZXgpIDo6dGVzdGluZzo6
aW50ZXJuYWw6Ok11dGV4IG11dGV4Ci0KLS8vIFdlIGNhbm5vdCBuYW1lIHRoaXMgY2xhc3MgTXV0
ZXhMb2NrIGJlY2F1c2UgdGhlIGN0b3IgZGVjbGFyYXRpb24gd291bGQKLS8vIGNvbmZsaWN0IHdp
dGggYSBtYWNybyBuYW1lZCBNdXRleExvY2ssIHdoaWNoIGlzIGRlZmluZWQgb24gc29tZQotLy8g
cGxhdGZvcm1zLiBUaGF0IG1hY3JvIGlzIHVzZWQgYXMgYSBkZWZlbnNpdmUgbWVhc3VyZSB0byBw
cmV2ZW50IGFnYWluc3QKLS8vIGluYWR2ZXJ0ZW50IG1pc3VzZXMgb2YgTXV0ZXhMb2NrIGxpa2Ug
Ik11dGV4TG9jaygmbXUpIiByYXRoZXIgdGhhbgotLy8gIk11dGV4TG9jayBsKCZtdSkiLiAgSGVu
Y2UgdGhlIHR5cGVkZWYgdHJpY2sgYmVsb3cuCi1jbGFzcyBHVGVzdE11dGV4TG9jayB7Ci0gcHVi
bGljOgotICBleHBsaWNpdCBHVGVzdE11dGV4TG9jayhNdXRleCopIHt9ICAvLyBOT0xJTlQKLX07
Ci0KLXR5cGVkZWYgR1Rlc3RNdXRleExvY2sgTXV0ZXhMb2NrOwotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLWNsYXNzIFRocmVhZExvY2FsIHsKLSBwdWJsaWM6Ci0gIFRocmVhZExvY2FsKCkgOiB2
YWx1ZV8oKSB7fQotICBleHBsaWNpdCBUaHJlYWRMb2NhbChjb25zdCBUJiB2YWx1ZSkgOiB2YWx1
ZV8odmFsdWUpIHt9Ci0gIFQqIHBvaW50ZXIoKSB7IHJldHVybiAmdmFsdWVfOyB9Ci0gIGNvbnN0
IFQqIHBvaW50ZXIoKSBjb25zdCB7IHJldHVybiAmdmFsdWVfOyB9Ci0gIGNvbnN0IFQmIGdldCgp
IGNvbnN0IHsgcmV0dXJuIHZhbHVlXzsgfQotICB2b2lkIHNldChjb25zdCBUJiB2YWx1ZSkgeyB2
YWx1ZV8gPSB2YWx1ZTsgfQotIHByaXZhdGU6Ci0gIFQgdmFsdWVfOwotfTsKLQotI2VuZGlmICAv
LyBHVEVTVF9JU19USFJFQURTQUZFCi0KLS8vIFJldHVybnMgdGhlIG51bWJlciBvZiB0aHJlYWRz
IHJ1bm5pbmcgaW4gdGhlIHByb2Nlc3MsIG9yIDAgdG8gaW5kaWNhdGUgdGhhdAotLy8gd2UgY2Fu
bm90IGRldGVjdCBpdC4KLUdURVNUX0FQSV8gc2l6ZV90IEdldFRocmVhZENvdW50KCk7Ci0KLS8v
IFBhc3Npbmcgbm9uLVBPRCBjbGFzc2VzIHRocm91Z2ggZWxsaXBzaXMgKC4uLikgY3Jhc2hlcyB0
aGUgQVJNCi0vLyBjb21waWxlciBhbmQgZ2VuZXJhdGVzIGEgd2FybmluZyBpbiBTdW4gU3R1ZGlv
LiAgVGhlIE5va2lhIFN5bWJpYW4KLS8vIGFuZCB0aGUgSUJNIFhMIEMvQysrIGNvbXBpbGVyIHRy
eSB0byBpbnN0YW50aWF0ZSBhIGNvcHkgY29uc3RydWN0b3IKLS8vIGZvciBvYmplY3RzIHBhc3Nl
ZCB0aHJvdWdoIGVsbGlwc2lzICguLi4pLCBmYWlsaW5nIGZvciB1bmNvcHlhYmxlCi0vLyBvYmpl
Y3RzLiAgV2UgZGVmaW5lIHRoaXMgdG8gZW5zdXJlIHRoYXQgb25seSBQT0QgaXMgcGFzc2VkIHRo
cm91Z2gKLS8vIGVsbGlwc2lzIG9uIHRoZXNlIHN5c3RlbXMuCi0jaWYgZGVmaW5lZChfX1NZTUJJ
QU4zMl9fKSB8fCBkZWZpbmVkKF9fSUJNQ1BQX18pIHx8IGRlZmluZWQoX19TVU5QUk9fQ0MpCi0v
LyBXZSBsb3NlIHN1cHBvcnQgZm9yIE5VTEwgZGV0ZWN0aW9uIHdoZXJlIHRoZSBjb21waWxlciBk
b2Vzbid0IGxpa2UKLS8vIHBhc3Npbmcgbm9uLVBPRCBjbGFzc2VzIHRocm91Z2ggZWxsaXBzaXMg
KC4uLikuCi0jIGRlZmluZSBHVEVTVF9FTExJUFNJU19ORUVEU19QT0RfIDEKLSNlbHNlCi0jIGRl
ZmluZSBHVEVTVF9DQU5fQ09NUEFSRV9OVUxMIDEKLSNlbmRpZgotCi0vLyBUaGUgTm9raWEgU3lt
YmlhbiBhbmQgSUJNIFhMIEMvQysrIGNvbXBpbGVycyBjYW5ub3QgZGVjaWRlIGJldHdlZW4KLS8v
IGNvbnN0IFQmIGFuZCBjb25zdCBUKiBpbiBhIGZ1bmN0aW9uIHRlbXBsYXRlLiAgVGhlc2UgY29t
cGlsZXJzCi0vLyBfY2FuXyBkZWNpZGUgYmV0d2VlbiBjbGFzcyB0ZW1wbGF0ZSBzcGVjaWFsaXph
dGlvbnMgZm9yIFQgYW5kIFQqLAotLy8gc28gYSB0cjE6OnR5cGVfdHJhaXRzLWxpa2UgaXNfcG9p
bnRlciB3b3Jrcy4KLSNpZiBkZWZpbmVkKF9fU1lNQklBTjMyX18pIHx8IGRlZmluZWQoX19JQk1D
UFBfXykKLSMgZGVmaW5lIEdURVNUX05FRURTX0lTX1BPSU5URVJfIDEKLSNlbmRpZgotCi10ZW1w
bGF0ZSA8Ym9vbCBib29sX3ZhbHVlPgotc3RydWN0IGJvb2xfY29uc3RhbnQgewotICB0eXBlZGVm
IGJvb2xfY29uc3RhbnQ8Ym9vbF92YWx1ZT4gdHlwZTsKLSAgc3RhdGljIGNvbnN0IGJvb2wgdmFs
dWUgPSBib29sX3ZhbHVlOwotfTsKLXRlbXBsYXRlIDxib29sIGJvb2xfdmFsdWU+IGNvbnN0IGJv
b2wgYm9vbF9jb25zdGFudDxib29sX3ZhbHVlPjo6dmFsdWU7Ci0KLXR5cGVkZWYgYm9vbF9jb25z
dGFudDxmYWxzZT4gZmFsc2VfdHlwZTsKLXR5cGVkZWYgYm9vbF9jb25zdGFudDx0cnVlPiB0cnVl
X3R5cGU7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IGlzX3BvaW50ZXIgOiBwdWJs
aWMgZmFsc2VfdHlwZSB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgaXNfcG9p
bnRlcjxUKj4gOiBwdWJsaWMgdHJ1ZV90eXBlIHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSXRl
cmF0b3I+Ci1zdHJ1Y3QgSXRlcmF0b3JUcmFpdHMgewotICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJh
dG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LXN0cnVjdCBJdGVyYXRvclRyYWl0czxUKj4gewotICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKLX07
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IEl0ZXJhdG9yVHJhaXRzPGNvbnN0IFQq
PiB7Ci0gIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwotfTsKLQotI2lmIEdURVNUX09TX1dJTkRPV1MK
LSMgZGVmaW5lIEdURVNUX1BBVEhfU0VQXyAiXFwiCi0jIGRlZmluZSBHVEVTVF9IQVNfQUxUX1BB
VEhfU0VQXyAxCi0vLyBUaGUgYmlnZ2VzdCBzaWduZWQgaW50ZWdlciB0eXBlIHRoZSBjb21waWxl
ciBzdXBwb3J0cy4KLXR5cGVkZWYgX19pbnQ2NCBCaWdnZXN0SW50OwotI2Vsc2UKLSMgZGVmaW5l
IEdURVNUX1BBVEhfU0VQXyAiLyIKLSMgZGVmaW5lIEdURVNUX0hBU19BTFRfUEFUSF9TRVBfIDAK
LXR5cGVkZWYgbG9uZyBsb25nIEJpZ2dlc3RJbnQ7ICAvLyBOT0xJTlQKLSNlbmRpZiAgLy8gR1RF
U1RfT1NfV0lORE9XUwotCi0vLyBVdGlsaXRpZXMgZm9yIGNoYXIuCi0KLS8vIGlzc3BhY2UoaW50
IGNoKSBhbmQgZnJpZW5kcyBhY2NlcHQgYW4gdW5zaWduZWQgY2hhciBvciBFT0YuICBjaGFyCi0v
LyBtYXkgYmUgc2lnbmVkLCBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyIChvciBjb21waWxlciBm
bGFncykuCi0vLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBjYXN0IGEgY2hhciB0byB1bnNpZ25lZCBj
aGFyIGJlZm9yZSBjYWxsaW5nCi0vLyBpc3NwYWNlKCksIGV0Yy4KLQotaW5saW5lIGJvb2wgSXNB
bHBoYShjaGFyIGNoKSB7Ci0gIHJldHVybiBpc2FscGhhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KGNoKSkgIT0gMDsKLX0KLWlubGluZSBib29sIElzQWxOdW0oY2hhciBjaCkgewotICByZXR1
cm4gaXNhbG51bShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjaCkpICE9IDA7Ci19Ci1pbmxp
bmUgYm9vbCBJc0RpZ2l0KGNoYXIgY2gpIHsKLSAgcmV0dXJuIGlzZGlnaXQoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oY2gpKSAhPSAwOwotfQotaW5saW5lIGJvb2wgSXNMb3dlcihjaGFyIGNo
KSB7Ci0gIHJldHVybiBpc2xvd2VyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNoKSkgIT0g
MDsKLX0KLWlubGluZSBib29sIElzU3BhY2UoY2hhciBjaCkgewotICByZXR1cm4gaXNzcGFjZShz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjaCkpICE9IDA7Ci19Ci1pbmxpbmUgYm9vbCBJc1Vw
cGVyKGNoYXIgY2gpIHsKLSAgcmV0dXJuIGlzdXBwZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oY2gpKSAhPSAwOwotfQotaW5saW5lIGJvb2wgSXNYRGlnaXQoY2hhciBjaCkgewotICByZXR1
cm4gaXN4ZGlnaXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY2gpKSAhPSAwOwotfQotaW5s
aW5lIGJvb2wgSXNYRGlnaXQod2NoYXJfdCBjaCkgewotICBjb25zdCB1bnNpZ25lZCBjaGFyIGxv
d19ieXRlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY2gpOwotICByZXR1cm4gY2ggPT0g
bG93X2J5dGUgJiYgaXN4ZGlnaXQobG93X2J5dGUpICE9IDA7Ci19Ci0KLWlubGluZSBjaGFyIFRv
TG93ZXIoY2hhciBjaCkgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4odG9sb3dlcihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjaCkpKTsKLX0KLWlubGluZSBjaGFyIFRvVXBwZXIoY2hh
ciBjaCkgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4odG91cHBlcihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihjaCkpKTsKLX0KLQotaW5saW5lIHN0ZDo6c3RyaW5nIFN0cmlwVHJhaWxp
bmdTcGFjZXMoc3RkOjpzdHJpbmcgc3RyKSB7Ci0gIHN0ZDo6c3RyaW5nOjppdGVyYXRvciBpdCA9
IHN0ci5lbmQoKTsKLSAgd2hpbGUgKGl0ICE9IHN0ci5iZWdpbigpICYmIElzU3BhY2UoKi0taXQp
KQotICAgIGl0ID0gc3RyLmVyYXNlKGl0KTsKLSAgcmV0dXJuIHN0cjsKLX0KLQotLy8gVGhlIHRl
c3Rpbmc6OmludGVybmFsOjpwb3NpeCBuYW1lc3BhY2UgaG9sZHMgd3JhcHBlcnMgZm9yIGNvbW1v
bgotLy8gUE9TSVggZnVuY3Rpb25zLiAgVGhlc2Ugd3JhcHBlcnMgaGlkZSB0aGUgZGlmZmVyZW5j
ZXMgYmV0d2VlbgotLy8gV2luZG93cy9NU1ZDIGFuZCBQT1NJWCBzeXN0ZW1zLiAgU2luY2Ugc29t
ZSBjb21waWxlcnMgZGVmaW5lIHRoZXNlCi0vLyBzdGFuZGFyZCBmdW5jdGlvbnMgYXMgbWFjcm9z
LCB0aGUgd3JhcHBlciBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBuYW1lCi0vLyBhcyB0aGUgd3JhcHBl
ZCBmdW5jdGlvbi4KLQotbmFtZXNwYWNlIHBvc2l4IHsKLQotLy8gRnVuY3Rpb25zIHdpdGggYSBk
aWZmZXJlbnQgbmFtZSBvbiBXaW5kb3dzLgotCi0jaWYgR1RFU1RfT1NfV0lORE9XUwotCi10eXBl
ZGVmIHN0cnVjdCBfc3RhdCBTdGF0U3RydWN0OwotCi0jIGlmZGVmIF9fQk9STEFORENfXwotaW5s
aW5lIGludCBJc0FUVFkoaW50IGZkKSB7IHJldHVybiBpc2F0dHkoZmQpOyB9Ci1pbmxpbmUgaW50
IFN0ckNhc2VDbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyKSB7Ci0gIHJldHVybiBz
dHJpY21wKHMxLCBzMik7Ci19Ci1pbmxpbmUgY2hhciogU3RyRHVwKGNvbnN0IGNoYXIqIHNyYykg
eyByZXR1cm4gc3RyZHVwKHNyYyk7IH0KLSMgZWxzZSAgLy8gIV9fQk9STEFORENfXwotIyAgaWYg
R1RFU1RfT1NfV0lORE9XU19NT0JJTEUKLWlubGluZSBpbnQgSXNBVFRZKGludCAvKiBmZCAqLykg
eyByZXR1cm4gMDsgfQotIyAgZWxzZQotaW5saW5lIGludCBJc0FUVFkoaW50IGZkKSB7IHJldHVy
biBfaXNhdHR5KGZkKTsgfQotIyAgZW5kaWYgIC8vIEdURVNUX09TX1dJTkRPV1NfTU9CSUxFCi1p
bmxpbmUgaW50IFN0ckNhc2VDbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyKSB7Ci0g
IHJldHVybiBfc3RyaWNtcChzMSwgczIpOwotfQotaW5saW5lIGNoYXIqIFN0ckR1cChjb25zdCBj
aGFyKiBzcmMpIHsgcmV0dXJuIF9zdHJkdXAoc3JjKTsgfQotIyBlbmRpZiAgLy8gX19CT1JMQU5E
Q19fCi0KLSMgaWYgR1RFU1RfT1NfV0lORE9XU19NT0JJTEUKLWlubGluZSBpbnQgRmlsZU5vKEZJ
TEUqIGZpbGUpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50PihfZmlsZW5vKGZpbGUpKTsg
fQotLy8gU3RhdCgpLCBSbURpcigpLCBhbmQgSXNEaXIoKSBhcmUgbm90IG5lZWRlZCBvbiBXaW5k
b3dzIENFIGF0IHRoaXMKLS8vIHRpbWUgYW5kIHRodXMgbm90IGRlZmluZWQgdGhlcmUuCi0jIGVs
c2UKLWlubGluZSBpbnQgRmlsZU5vKEZJTEUqIGZpbGUpIHsgcmV0dXJuIF9maWxlbm8oZmlsZSk7
IH0KLWlubGluZSBpbnQgU3RhdChjb25zdCBjaGFyKiBwYXRoLCBTdGF0U3RydWN0KiBidWYpIHsg
cmV0dXJuIF9zdGF0KHBhdGgsIGJ1Zik7IH0KLWlubGluZSBpbnQgUm1EaXIoY29uc3QgY2hhciog
ZGlyKSB7IHJldHVybiBfcm1kaXIoZGlyKTsgfQotaW5saW5lIGJvb2wgSXNEaXIoY29uc3QgU3Rh
dFN0cnVjdCYgc3QpIHsKLSAgcmV0dXJuIChfU19JRkRJUiAmIHN0LnN0X21vZGUpICE9IDA7Ci19
Ci0jIGVuZGlmICAvLyBHVEVTVF9PU19XSU5ET1dTX01PQklMRQotCi0jZWxzZQotCi10eXBlZGVm
IHN0cnVjdCBzdGF0IFN0YXRTdHJ1Y3Q7Ci0KLWlubGluZSBpbnQgRmlsZU5vKEZJTEUqIGZpbGUp
IHsgcmV0dXJuIGZpbGVubyhmaWxlKTsgfQotaW5saW5lIGludCBJc0FUVFkoaW50IGZkKSB7IHJl
dHVybiBpc2F0dHkoZmQpOyB9Ci1pbmxpbmUgaW50IFN0YXQoY29uc3QgY2hhciogcGF0aCwgU3Rh
dFN0cnVjdCogYnVmKSB7IHJldHVybiBzdGF0KHBhdGgsIGJ1Zik7IH0KLWlubGluZSBpbnQgU3Ry
Q2FzZUNtcChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIpIHsKLSAgcmV0dXJuIHN0cmNh
c2VjbXAoczEsIHMyKTsKLX0KLWlubGluZSBjaGFyKiBTdHJEdXAoY29uc3QgY2hhciogc3JjKSB7
IHJldHVybiBzdHJkdXAoc3JjKTsgfQotaW5saW5lIGludCBSbURpcihjb25zdCBjaGFyKiBkaXIp
IHsgcmV0dXJuIHJtZGlyKGRpcik7IH0KLWlubGluZSBib29sIElzRGlyKGNvbnN0IFN0YXRTdHJ1
Y3QmIHN0KSB7IHJldHVybiBTX0lTRElSKHN0LnN0X21vZGUpOyB9Ci0KLSNlbmRpZiAgLy8gR1RF
U1RfT1NfV0lORE9XUwotCi0vLyBGdW5jdGlvbnMgZGVwcmVjYXRlZCBieSBNU1ZDIDguMC4KLQot
R1RFU1RfRElTQUJMRV9NU0NfV0FSTklOR1NfUFVTSF8oNDk5NiAvKiBkZXByZWNhdGVkIGZ1bmN0
aW9uICovKQotCi1pbmxpbmUgY29uc3QgY2hhciogU3RyTkNweShjaGFyKiBkZXN0LCBjb25zdCBj
aGFyKiBzcmMsIHNpemVfdCBuKSB7Ci0gIHJldHVybiBzdHJuY3B5KGRlc3QsIHNyYywgbik7Ci19
Ci0KLS8vIENoRGlyKCksIEZSZW9wZW4oKSwgRkRPcGVuKCksIFJlYWQoKSwgV3JpdGUoKSwgQ2xv
c2UoKSwgYW5kCi0vLyBTdHJFcnJvcigpIGFyZW4ndCBuZWVkZWQgb24gV2luZG93cyBDRSBhdCB0
aGlzIHRpbWUgYW5kIHRodXMgbm90Ci0vLyBkZWZpbmVkIHRoZXJlLgotCi0jaWYgIUdURVNUX09T
X1dJTkRPV1NfTU9CSUxFICYmICFHVEVTVF9PU19XSU5ET1dTX1BIT05FICYmICFHVEVTVF9PU19X
SU5ET1dTX1JUCi1pbmxpbmUgaW50IENoRGlyKGNvbnN0IGNoYXIqIGRpcikgeyByZXR1cm4gY2hk
aXIoZGlyKTsgfQotI2VuZGlmCi1pbmxpbmUgRklMRSogRk9wZW4oY29uc3QgY2hhciogcGF0aCwg
Y29uc3QgY2hhciogbW9kZSkgewotICByZXR1cm4gZm9wZW4ocGF0aCwgbW9kZSk7Ci19Ci0jaWYg
IUdURVNUX09TX1dJTkRPV1NfTU9CSUxFCi1pbmxpbmUgRklMRSAqRlJlb3Blbihjb25zdCBjaGFy
KiBwYXRoLCBjb25zdCBjaGFyKiBtb2RlLCBGSUxFKiBzdHJlYW0pIHsKLSAgcmV0dXJuIGZyZW9w
ZW4ocGF0aCwgbW9kZSwgc3RyZWFtKTsKLX0KLWlubGluZSBGSUxFKiBGRE9wZW4oaW50IGZkLCBj
b25zdCBjaGFyKiBtb2RlKSB7IHJldHVybiBmZG9wZW4oZmQsIG1vZGUpOyB9Ci0jZW5kaWYKLWlu
bGluZSBpbnQgRkNsb3NlKEZJTEUqIGZwKSB7IHJldHVybiBmY2xvc2UoZnApOyB9Ci0jaWYgIUdU
RVNUX09TX1dJTkRPV1NfTU9CSUxFCi1pbmxpbmUgaW50IFJlYWQoaW50IGZkLCB2b2lkKiBidWYs
IHVuc2lnbmVkIGludCBjb3VudCkgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihyZWFkKGZk
LCBidWYsIGNvdW50KSk7Ci19Ci1pbmxpbmUgaW50IFdyaXRlKGludCBmZCwgY29uc3Qgdm9pZCog
YnVmLCB1bnNpZ25lZCBpbnQgY291bnQpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4od3Jp
dGUoZmQsIGJ1ZiwgY291bnQpKTsKLX0KLWlubGluZSBpbnQgQ2xvc2UoaW50IGZkKSB7IHJldHVy
biBjbG9zZShmZCk7IH0KLWlubGluZSBjb25zdCBjaGFyKiBTdHJFcnJvcihpbnQgZXJybnVtKSB7
IHJldHVybiBzdHJlcnJvcihlcnJudW0pOyB9Ci0jZW5kaWYKLWlubGluZSBjb25zdCBjaGFyKiBH
ZXRFbnYoY29uc3QgY2hhciogbmFtZSkgewotI2lmIEdURVNUX09TX1dJTkRPV1NfTU9CSUxFIHx8
IEdURVNUX09TX1dJTkRPV1NfUEhPTkUgfCBHVEVTVF9PU19XSU5ET1dTX1JUCi0gIC8vIFdlIGFy
ZSBvbiBXaW5kb3dzIENFLCB3aGljaCBoYXMgbm8gZW52aXJvbm1lbnQgdmFyaWFibGVzLgotICBz
dGF0aWNfY2FzdDx2b2lkPihuYW1lKTsgIC8vIFRvIHByZXZlbnQgJ3VudXNlZCBhcmd1bWVudCcg
d2FybmluZy4KLSAgcmV0dXJuIE5VTEw7Ci0jZWxpZiBkZWZpbmVkKF9fQk9STEFORENfXykgfHwg
ZGVmaW5lZChfX1N1bk9TXzVfOCkgfHwgZGVmaW5lZChfX1N1bk9TXzVfOSkKLSAgLy8gRW52aXJv
bm1lbnQgdmFyaWFibGVzIHdoaWNoIHdlIHByb2dyYW1tYXRpY2FsbHkgY2xlYXIgd2lsbCBiZSBz
ZXQgdG8gdGhlCi0gIC8vIGVtcHR5IHN0cmluZyByYXRoZXIgdGhhbiB1bnNldCAoTlVMTCkuICBI
YW5kbGUgdGhhdCBjYXNlLgotICBjb25zdCBjaGFyKiBjb25zdCBlbnYgPSBnZXRlbnYobmFtZSk7
Ci0gIHJldHVybiAoZW52ICE9IE5VTEwgJiYgZW52WzBdICE9ICdcMCcpID8gZW52IDogTlVMTDsK
LSNlbHNlCi0gIHJldHVybiBnZXRlbnYobmFtZSk7Ci0jZW5kaWYKLX0KLQotR1RFU1RfRElTQUJM
RV9NU0NfV0FSTklOR1NfUE9QXygpCi0KLSNpZiBHVEVTVF9PU19XSU5ET1dTX01PQklMRQotLy8g
V2luZG93cyBDRSBoYXMgbm8gQyBsaWJyYXJ5LiBUaGUgYWJvcnQoKSBmdW5jdGlvbiBpcyB1c2Vk
IGluCi0vLyBzZXZlcmFsIHBsYWNlcyBpbiBHb29nbGUgVGVzdC4gVGhpcyBpbXBsZW1lbnRhdGlv
biBwcm92aWRlcyBhIHJlYXNvbmFibGUKLS8vIGltaXRhdGlvbiBvZiBzdGFuZGFyZCBiZWhhdmlv
dXIuCi12b2lkIEFib3J0KCk7Ci0jZWxzZQotaW5saW5lIHZvaWQgQWJvcnQoKSB7IGFib3J0KCk7
IH0KLSNlbmRpZiAgLy8gR1RFU1RfT1NfV0lORE9XU19NT0JJTEUKLQotfSAgLy8gbmFtZXNwYWNl
IHBvc2l4Ci0KLS8vIE1TVkMgImRlcHJlY2F0ZXMiIHNucHJpbnRmIGFuZCBpc3N1ZXMgd2Fybmlu
Z3Mgd2hlcmV2ZXIgaXQgaXMgdXNlZC4gIEluCi0vLyBvcmRlciB0byBhdm9pZCB0aGVzZSB3YXJu
aW5ncywgd2UgbmVlZCB0byB1c2UgX3NucHJpbnRmIG9yIF9zbnByaW50Zl9zIG9uCi0vLyBNU1ZD
LWJhc2VkIHBsYXRmb3Jtcy4gIFdlIG1hcCB0aGUgR1RFU1RfU05QUklOVEZfIG1hY3JvIHRvIHRo
ZSBhcHByb3ByaWF0ZQotLy8gZnVuY3Rpb24gaW4gb3JkZXIgdG8gYWNoaWV2ZSB0aGF0LiAgV2Ug
dXNlIG1hY3JvIGRlZmluaXRpb24gaGVyZSBiZWNhdXNlCi0vLyBzbnByaW50ZiBpcyBhIHZhcmlh
ZGljIGZ1bmN0aW9uLgotI2lmIF9NU0NfVkVSID49IDE0MDAgJiYgIUdURVNUX09TX1dJTkRPV1Nf
TU9CSUxFCi0vLyBNU1ZDIDIwMDUgYW5kIGFib3ZlIHN1cHBvcnQgdmFyaWFkaWMgbWFjcm9zLgot
IyBkZWZpbmUgR1RFU1RfU05QUklOVEZfKGJ1ZmZlciwgc2l6ZSwgZm9ybWF0LCAuLi4pIFwKLSAg
ICAgX3NucHJpbnRmX3MoYnVmZmVyLCBzaXplLCBzaXplLCBmb3JtYXQsIF9fVkFfQVJHU19fKQot
I2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLS8vIFdpbmRvd3MgQ0UgZG9lcyBub3QgZGVmaW5lIF9z
bnByaW50Zl9zIGFuZCBNU1ZDIHByaW9yIHRvIDIwMDUgZG9lc24ndAotLy8gY29tcGxhaW4gYWJv
dXQgX3NucHJpbnRmLgotIyBkZWZpbmUgR1RFU1RfU05QUklOVEZfIF9zbnByaW50ZgotI2Vsc2UK
LSMgZGVmaW5lIEdURVNUX1NOUFJJTlRGXyBzbnByaW50ZgotI2VuZGlmCi0KLS8vIFRoZSBtYXhp
bXVtIG51bWJlciBhIEJpZ2dlc3RJbnQgY2FuIHJlcHJlc2VudC4gIFRoaXMgZGVmaW5pdGlvbgot
Ly8gd29ya3Mgbm8gbWF0dGVyIEJpZ2dlc3RJbnQgaXMgcmVwcmVzZW50ZWQgaW4gb25lJ3MgY29t
cGxlbWVudCBvcgotLy8gdHdvJ3MgY29tcGxlbWVudC4KLS8vCi0vLyBXZSBjYW5ub3QgcmVseSBv
biBudW1lcmljX2xpbWl0cyBpbiBTVEwsIGFzIF9faW50NjQgYW5kIGxvbmcgbG9uZwotLy8gYXJl
IG5vdCBwYXJ0IG9mIHN0YW5kYXJkIEMrKyBhbmQgbnVtZXJpY19saW1pdHMgZG9lc24ndCBuZWVk
IHRvIGJlCi0vLyBkZWZpbmVkIGZvciB0aGVtLgotY29uc3QgQmlnZ2VzdEludCBrTWF4QmlnZ2Vz
dEludCA9Ci0gICAgfihzdGF0aWNfY2FzdDxCaWdnZXN0SW50PigxKSA8PCAoOCpzaXplb2YoQmln
Z2VzdEludCkgLSAxKSk7Ci0KLS8vIFRoaXMgdGVtcGxhdGUgY2xhc3Mgc2VydmVzIGFzIGEgY29t
cGlsZS10aW1lIGZ1bmN0aW9uIGZyb20gc2l6ZSB0bwotLy8gdHlwZS4gIEl0IG1hcHMgYSBzaXpl
IGluIGJ5dGVzIHRvIGEgcHJpbWl0aXZlIHR5cGUgd2l0aCB0aGF0Ci0vLyBzaXplLiBlLmcuCi0v
LwotLy8gICBUeXBlV2l0aFNpemU8ND46OlVJbnQKLS8vCi0vLyBpcyB0eXBlZGVmLWVkIHRvIGJl
IHVuc2lnbmVkIGludCAodW5zaWduZWQgaW50ZWdlciBtYWRlIHVwIG9mIDQKLS8vIGJ5dGVzKS4K
LS8vCi0vLyBTdWNoIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlbG9uZyB0byBTVEwsIGJ1dCBJIGNh
bm5vdCBmaW5kIGl0Ci0vLyB0aGVyZS4KLS8vCi0vLyBHb29nbGUgVGVzdCB1c2VzIHRoaXMgY2xh
c3MgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIGZsb2F0aW5nLXBvaW50Ci0vLyBjb21wYXJpc29u
LgotLy8KLS8vIEZvciBub3cgaXQgb25seSBoYW5kbGVzIFVJbnQgKHVuc2lnbmVkIGludCkgYXMg
dGhhdCdzIGFsbCBHb29nbGUgVGVzdAotLy8gbmVlZHMuICBPdGhlciB0eXBlcyBjYW4gYmUgZWFz
aWx5IGFkZGVkIGluIHRoZSBmdXR1cmUgaWYgbmVlZAotLy8gYXJpc2VzLgotdGVtcGxhdGUgPHNp
emVfdCBzaXplPgotY2xhc3MgVHlwZVdpdGhTaXplIHsKLSBwdWJsaWM6Ci0gIC8vIFRoaXMgcHJl
dmVudHMgdGhlIHVzZXIgZnJvbSB1c2luZyBUeXBlV2l0aFNpemU8Tj4gd2l0aCBpbmNvcnJlY3QK
LSAgLy8gdmFsdWVzIG9mIE4uCi0gIHR5cGVkZWYgdm9pZCBVSW50OwotfTsKLQotLy8gVGhlIHNw
ZWNpYWxpemF0aW9uIGZvciBzaXplIDQuCi10ZW1wbGF0ZSA8PgotY2xhc3MgVHlwZVdpdGhTaXpl
PDQ+IHsKLSBwdWJsaWM6Ci0gIC8vIHVuc2lnbmVkIGludCBoYXMgc2l6ZSA0IGluIGJvdGggZ2Nj
IGFuZCBNU1ZDLgotICAvLwotICAvLyBBcyBiYXNlL2Jhc2ljdHlwZXMuaCBkb2Vzbid0IGNvbXBp
bGUgb24gV2luZG93cywgd2UgY2Fubm90IHVzZQotICAvLyB1aW50MzIsIHVpbnQ2NCwgYW5kIGV0
YyBoZXJlLgotICB0eXBlZGVmIGludCBJbnQ7Ci0gIHR5cGVkZWYgdW5zaWduZWQgaW50IFVJbnQ7
Ci19OwotCi0vLyBUaGUgc3BlY2lhbGl6YXRpb24gZm9yIHNpemUgOC4KLXRlbXBsYXRlIDw+Ci1j
bGFzcyBUeXBlV2l0aFNpemU8OD4gewotIHB1YmxpYzoKLSNpZiBHVEVTVF9PU19XSU5ET1dTCi0g
IHR5cGVkZWYgX19pbnQ2NCBJbnQ7Ci0gIHR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBVSW50Owot
I2Vsc2UKLSAgdHlwZWRlZiBsb25nIGxvbmcgSW50OyAgLy8gTk9MSU5UCi0gIHR5cGVkZWYgdW5z
aWduZWQgbG9uZyBsb25nIFVJbnQ7ICAvLyBOT0xJTlQKLSNlbmRpZiAgLy8gR1RFU1RfT1NfV0lO
RE9XUwotfTsKLQotLy8gSW50ZWdlciB0eXBlcyBvZiBrbm93biBzaXplcy4KLXR5cGVkZWYgVHlw
ZVdpdGhTaXplPDQ+OjpJbnQgSW50MzI7Ci10eXBlZGVmIFR5cGVXaXRoU2l6ZTw0Pjo6VUludCBV
SW50MzI7Ci10eXBlZGVmIFR5cGVXaXRoU2l6ZTw4Pjo6SW50IEludDY0OwotdHlwZWRlZiBUeXBl
V2l0aFNpemU8OD46OlVJbnQgVUludDY0OwotdHlwZWRlZiBUeXBlV2l0aFNpemU8OD46OkludCBU
aW1lSW5NaWxsaXM7ICAvLyBSZXByZXNlbnRzIHRpbWUgaW4gbWlsbGlzZWNvbmRzLgotCi0vLyBV
dGlsaXRpZXMgZm9yIGNvbW1hbmQgbGluZSBmbGFncyBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVz
LgotCi0vLyBNYWNybyBmb3IgcmVmZXJlbmNpbmcgZmxhZ3MuCi0jaWYgIWRlZmluZWQoR1RFU1Rf
RkxBRykKLSMgZGVmaW5lIEdURVNUX0ZMQUcobmFtZSkgRkxBR1NfZ3Rlc3RfIyNuYW1lCi0jZW5k
aWYgIC8vICFkZWZpbmVkKEdURVNUX0ZMQUcpCi0KLSNpZiAhZGVmaW5lZChHVEVTVF9VU0VfT1dO
X0ZMQUdGSUxFX0ZMQUdfKQotIyBkZWZpbmUgR1RFU1RfVVNFX09XTl9GTEFHRklMRV9GTEFHXyAx
Ci0jZW5kaWYgIC8vICFkZWZpbmVkKEdURVNUX1VTRV9PV05fRkxBR0ZJTEVfRkxBR18pCi0KLSNp
ZiAhZGVmaW5lZChHVEVTVF9ERUNMQVJFX2Jvb2xfKQotIyBkZWZpbmUgR1RFU1RfRkxBR19TQVZF
Ul8gOjp0ZXN0aW5nOjppbnRlcm5hbDo6R1Rlc3RGbGFnU2F2ZXIKLQotLy8gTWFjcm9zIGZvciBk
ZWNsYXJpbmcgZmxhZ3MuCi0jIGRlZmluZSBHVEVTVF9ERUNMQVJFX2Jvb2xfKG5hbWUpIEdURVNU
X0FQSV8gZXh0ZXJuIGJvb2wgR1RFU1RfRkxBRyhuYW1lKQotIyBkZWZpbmUgR1RFU1RfREVDTEFS
RV9pbnQzMl8obmFtZSkgXAotICAgIEdURVNUX0FQSV8gZXh0ZXJuIDo6dGVzdGluZzo6aW50ZXJu
YWw6OkludDMyIEdURVNUX0ZMQUcobmFtZSkKLSNkZWZpbmUgR1RFU1RfREVDTEFSRV9zdHJpbmdf
KG5hbWUpIFwKLSAgICBHVEVTVF9BUElfIGV4dGVybiA6OnN0ZDo6c3RyaW5nIEdURVNUX0ZMQUco
bmFtZSkKLQotLy8gTWFjcm9zIGZvciBkZWZpbmluZyBmbGFncy4KLSNkZWZpbmUgR1RFU1RfREVG
SU5FX2Jvb2xfKG5hbWUsIGRlZmF1bHRfdmFsLCBkb2MpIFwKLSAgICBHVEVTVF9BUElfIGJvb2wg
R1RFU1RfRkxBRyhuYW1lKSA9IChkZWZhdWx0X3ZhbCkKLSNkZWZpbmUgR1RFU1RfREVGSU5FX2lu
dDMyXyhuYW1lLCBkZWZhdWx0X3ZhbCwgZG9jKSBcCi0gICAgR1RFU1RfQVBJXyA6OnRlc3Rpbmc6
OmludGVybmFsOjpJbnQzMiBHVEVTVF9GTEFHKG5hbWUpID0gKGRlZmF1bHRfdmFsKQotI2RlZmlu
ZSBHVEVTVF9ERUZJTkVfc3RyaW5nXyhuYW1lLCBkZWZhdWx0X3ZhbCwgZG9jKSBcCi0gICAgR1RF
U1RfQVBJXyA6OnN0ZDo6c3RyaW5nIEdURVNUX0ZMQUcobmFtZSkgPSAoZGVmYXVsdF92YWwpCi0K
LSNlbmRpZiAgLy8gIWRlZmluZWQoR1RFU1RfREVDTEFSRV9ib29sXykKLQotLy8gVGhyZWFkIGFu
bm90YXRpb25zCi0jaWYgIWRlZmluZWQoR1RFU1RfRVhDTFVTSVZFX0xPQ0tfUkVRVUlSRURfKQot
IyBkZWZpbmUgR1RFU1RfRVhDTFVTSVZFX0xPQ0tfUkVRVUlSRURfKGxvY2tzKQotIyBkZWZpbmUg
R1RFU1RfTE9DS19FWENMVURFRF8obG9ja3MpCi0jZW5kaWYgIC8vICFkZWZpbmVkKEdURVNUX0VY
Q0xVU0lWRV9MT0NLX1JFUVVJUkVEXykKLQotLy8gUGFyc2VzICdzdHInIGZvciBhIDMyLWJpdCBz
aWduZWQgaW50ZWdlci4gIElmIHN1Y2Nlc3NmdWwsIHdyaXRlcyB0aGUgcmVzdWx0Ci0vLyB0byAq
dmFsdWUgYW5kIHJldHVybnMgdHJ1ZTsgb3RoZXJ3aXNlIGxlYXZlcyAqdmFsdWUgdW5jaGFuZ2Vk
IGFuZCByZXR1cm5zCi0vLyBmYWxzZS4KLS8vIFRPRE8oY2hhbmRsZXJjKTogRmluZCBhIGJldHRl
ciB3YXkgdG8gcmVmYWN0b3IgZmxhZyBhbmQgZW52aXJvbm1lbnQgcGFyc2luZwotLy8gb3V0IG9m
IGJvdGggZ3Rlc3QtcG9ydC5jYyBhbmQgZ3Rlc3QuY2MgdG8gYXZvaWQgZXhwb3J0aW5nIHRoaXMg
dXRpbGl0eQotLy8gZnVuY3Rpb24uCi1ib29sIFBhcnNlSW50MzIoY29uc3QgTWVzc2FnZSYgc3Jj
X3RleHQsIGNvbnN0IGNoYXIqIHN0ciwgSW50MzIqIHZhbHVlKTsKLQotLy8gUGFyc2VzIGEgYm9v
bC9JbnQzMi9zdHJpbmcgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLS8vIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIGdpdmVuIEdvb2dsZSBUZXN0IGZsYWcuCi1ib29sIEJvb2xGcm9tR1Rlc3RF
bnYoY29uc3QgY2hhciogZmxhZywgYm9vbCBkZWZhdWx0X3ZhbCk7Ci1HVEVTVF9BUElfIEludDMy
IEludDMyRnJvbUdUZXN0RW52KGNvbnN0IGNoYXIqIGZsYWcsIEludDMyIGRlZmF1bHRfdmFsKTsK
LXN0ZDo6c3RyaW5nIFN0cmluZ0Zyb21HVGVzdEVudihjb25zdCBjaGFyKiBmbGFnLCBjb25zdCBj
aGFyKiBkZWZhdWx0X3ZhbCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotfSAgLy8gbmFt
ZXNwYWNlIHRlc3RpbmcKLQotI2VuZGlmICAvLyBHVEVTVF9JTkNMVURFX0dURVNUX0lOVEVSTkFM
X0dURVNUX1BPUlRfSF8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1zdHJp
bmcuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRl
c3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1zdHJpbmcuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOTdmMWE3ZmRkMmMwY2M0NGMzYTE0OGYwZjFlY2RjYmRmZTliYWM2Yy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3Qv
aW50ZXJuYWwvZ3Rlc3Qtc3RyaW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAot
Ly8gQ29weXJpZ2h0IDIwMDUsIEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBk
aXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLy8KLS8vIEF1dGhv
cnM6IHdhbkBnb29nbGUuY29tIChaaGFueW9uZyBXYW4pLCBlZWZhY21AZ21haWwuY29tIChTZWFu
IE1jYWZlZSkKLS8vCi0vLyBUaGUgR29vZ2xlIEMrKyBUZXN0aW5nIEZyYW1ld29yayAoR29vZ2xl
IFRlc3QpCi0vLwotLy8gVGhpcyBoZWFkZXIgZmlsZSBkZWNsYXJlcyB0aGUgU3RyaW5nIGNsYXNz
IGFuZCBmdW5jdGlvbnMgdXNlZCBpbnRlcm5hbGx5IGJ5Ci0vLyBHb29nbGUgVGVzdC4gIFRoZXkg
YXJlIHN1YmplY3QgdG8gY2hhbmdlIHdpdGhvdXQgbm90aWNlLiBUaGV5IHNob3VsZCBub3QgdXNl
ZAotLy8gYnkgY29kZSBleHRlcm5hbCB0byBHb29nbGUgVGVzdC4KLS8vCi0vLyBUaGlzIGhlYWRl
ciBmaWxlIGlzICNpbmNsdWRlZCBieSA8Z3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtaW50ZXJuYWwuaD4u
Ci0vLyBJdCBzaG91bGQgbm90IGJlICNpbmNsdWRlZCBieSBvdGhlciBmaWxlcy4KLQotI2lmbmRl
ZiBHVEVTVF9JTkNMVURFX0dURVNUX0lOVEVSTkFMX0dURVNUX1NUUklOR19IXwotI2RlZmluZSBH
VEVTVF9JTkNMVURFX0dURVNUX0lOVEVSTkFMX0dURVNUX1NUUklOR19IXwotCi0jaWZkZWYgX19C
T1JMQU5EQ19fCi0vLyBzdHJpbmcuaCBpcyBub3QgZ3VhcmFudGVlZCB0byBwcm92aWRlIHN0cmNw
eSBvbiBDKysgQnVpbGRlci4KLSMgaW5jbHVkZSA8bWVtLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUg
PHN0cmluZy5oPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgImd0ZXN0L2ludGVybmFs
L2d0ZXN0LXBvcnQuaCIKLQotbmFtZXNwYWNlIHRlc3RpbmcgewotbmFtZXNwYWNlIGludGVybmFs
IHsKLQotLy8gU3RyaW5nIC0gYW4gYWJzdHJhY3QgY2xhc3MgaG9sZGluZyBzdGF0aWMgc3RyaW5n
IHV0aWxpdGllcy4KLWNsYXNzIEdURVNUX0FQSV8gU3RyaW5nIHsKLSBwdWJsaWM6Ci0gIC8vIFN0
YXRpYyB1dGlsaXR5IG1ldGhvZHMKLQotICAvLyBDbG9uZXMgYSAwLXRlcm1pbmF0ZWQgQyBzdHJp
bmcsIGFsbG9jYXRpbmcgbWVtb3J5IHVzaW5nIG5ldy4gIFRoZQotICAvLyBjYWxsZXIgaXMgcmVz
cG9uc2libGUgZm9yIGRlbGV0aW5nIHRoZSByZXR1cm4gdmFsdWUgdXNpbmcKLSAgLy8gZGVsZXRl
W10uICBSZXR1cm5zIHRoZSBjbG9uZWQgc3RyaW5nLCBvciBOVUxMIGlmIHRoZSBpbnB1dCBpcwot
ICAvLyBOVUxMLgotICAvLwotICAvLyBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHN0cmR1cCgpIGlu
IHN0cmluZy5oLCB3aGljaCBhbGxvY2F0ZXMKLSAgLy8gbWVtb3J5IHVzaW5nIG1hbGxvYygpLgot
ICBzdGF0aWMgY29uc3QgY2hhciogQ2xvbmVDU3RyaW5nKGNvbnN0IGNoYXIqIGNfc3RyKTsKLQot
I2lmIEdURVNUX09TX1dJTkRPV1NfTU9CSUxFCi0gIC8vIFdpbmRvd3MgQ0UgZG9lcyBub3QgaGF2
ZSB0aGUgJ0FOU0knIHZlcnNpb25zIG9mIFdpbjMyIEFQSXMuIFRvIGJlCi0gIC8vIGFibGUgdG8g
cGFzcyBzdHJpbmdzIHRvIFdpbjMyIEFQSXMgb24gQ0Ugd2UgbmVlZCB0byBjb252ZXJ0IHRoZW0K
LSAgLy8gdG8gJ1VuaWNvZGUnLCBVVEYtMTYuCi0KLSAgLy8gQ3JlYXRlcyBhIFVURi0xNiB3aWRl
IHN0cmluZyBmcm9tIHRoZSBnaXZlbiBBTlNJIHN0cmluZywgYWxsb2NhdGluZwotICAvLyBtZW1v
cnkgdXNpbmcgbmV3LiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZWxldGluZyB0aGUg
cmV0dXJuCi0gIC8vIHZhbHVlIHVzaW5nIGRlbGV0ZVtdLiBSZXR1cm5zIHRoZSB3aWRlIHN0cmlu
Zywgb3IgTlVMTCBpZiB0aGUKLSAgLy8gaW5wdXQgaXMgTlVMTC4KLSAgLy8KLSAgLy8gVGhlIHdp
ZGUgc3RyaW5nIGlzIGNyZWF0ZWQgdXNpbmcgdGhlIEFOU0kgY29kZXBhZ2UgKENQX0FDUCkgdG8K
LSAgLy8gbWF0Y2ggdGhlIGJlaGF2aW91ciBvZiB0aGUgQU5TSSB2ZXJzaW9ucyBvZiBXaW4zMiBj
YWxscyBhbmQgdGhlCi0gIC8vIEMgcnVudGltZS4KLSAgc3RhdGljIExQQ1dTVFIgQW5zaVRvVXRm
MTYoY29uc3QgY2hhciogY19zdHIpOwotCi0gIC8vIENyZWF0ZXMgYW4gQU5TSSBzdHJpbmcgZnJv
bSB0aGUgZ2l2ZW4gd2lkZSBzdHJpbmcsIGFsbG9jYXRpbmcKLSAgLy8gbWVtb3J5IHVzaW5nIG5l
dy4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZGVsZXRpbmcgdGhlIHJldHVybgotICAv
LyB2YWx1ZSB1c2luZyBkZWxldGVbXS4gUmV0dXJucyB0aGUgQU5TSSBzdHJpbmcsIG9yIE5VTEwg
aWYgdGhlCi0gIC8vIGlucHV0IGlzIE5VTEwuCi0gIC8vCi0gIC8vIFRoZSByZXR1cm5lZCBzdHJp
bmcgaXMgY3JlYXRlZCB1c2luZyB0aGUgQU5TSSBjb2RlcGFnZSAoQ1BfQUNQKSB0bwotICAvLyBt
YXRjaCB0aGUgYmVoYXZpb3VyIG9mIHRoZSBBTlNJIHZlcnNpb25zIG9mIFdpbjMyIGNhbGxzIGFu
ZCB0aGUKLSAgLy8gQyBydW50aW1lLgotICBzdGF0aWMgY29uc3QgY2hhciogVXRmMTZUb0Fuc2ko
TFBDV1NUUiB1dGYxNl9zdHIpOwotI2VuZGlmCi0KLSAgLy8gQ29tcGFyZXMgdHdvIEMgc3RyaW5n
cy4gIFJldHVybnMgdHJ1ZSBpZmYgdGhleSBoYXZlIHRoZSBzYW1lIGNvbnRlbnQuCi0gIC8vCi0g
IC8vIFVubGlrZSBzdHJjbXAoKSwgdGhpcyBmdW5jdGlvbiBjYW4gaGFuZGxlIE5VTEwgYXJndW1l
bnQocykuICBBCi0gIC8vIE5VTEwgQyBzdHJpbmcgaXMgY29uc2lkZXJlZCBkaWZmZXJlbnQgdG8g
YW55IG5vbi1OVUxMIEMgc3RyaW5nLAotICAvLyBpbmNsdWRpbmcgdGhlIGVtcHR5IHN0cmluZy4K
LSAgc3RhdGljIGJvb2wgQ1N0cmluZ0VxdWFscyhjb25zdCBjaGFyKiBsaHMsIGNvbnN0IGNoYXIq
IHJocyk7Ci0KLSAgLy8gQ29udmVydHMgYSB3aWRlIEMgc3RyaW5nIHRvIGEgU3RyaW5nIHVzaW5n
IHRoZSBVVEYtOCBlbmNvZGluZy4KLSAgLy8gTlVMTCB3aWxsIGJlIGNvbnZlcnRlZCB0byAiKG51
bGwpIi4gIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZwotICAvLyB0aGUgY29udmVyc2lvbiwg
IihmYWlsZWQgdG8gY29udmVydCBmcm9tIHdpZGUgc3RyaW5nKSIgaXMKLSAgLy8gcmV0dXJuZWQu
Ci0gIHN0YXRpYyBzdGQ6OnN0cmluZyBTaG93V2lkZUNTdHJpbmcoY29uc3Qgd2NoYXJfdCogd2lk
ZV9jX3N0cik7Ci0KLSAgLy8gQ29tcGFyZXMgdHdvIHdpZGUgQyBzdHJpbmdzLiAgUmV0dXJucyB0
cnVlIGlmZiB0aGV5IGhhdmUgdGhlIHNhbWUKLSAgLy8gY29udGVudC4KLSAgLy8KLSAgLy8gVW5s
aWtlIHdjc2NtcCgpLCB0aGlzIGZ1bmN0aW9uIGNhbiBoYW5kbGUgTlVMTCBhcmd1bWVudChzKS4g
IEEKLSAgLy8gTlVMTCBDIHN0cmluZyBpcyBjb25zaWRlcmVkIGRpZmZlcmVudCB0byBhbnkgbm9u
LU5VTEwgQyBzdHJpbmcsCi0gIC8vIGluY2x1ZGluZyB0aGUgZW1wdHkgc3RyaW5nLgotICBzdGF0
aWMgYm9vbCBXaWRlQ1N0cmluZ0VxdWFscyhjb25zdCB3Y2hhcl90KiBsaHMsIGNvbnN0IHdjaGFy
X3QqIHJocyk7Ci0KLSAgLy8gQ29tcGFyZXMgdHdvIEMgc3RyaW5ncywgaWdub3JpbmcgY2FzZS4g
IFJldHVybnMgdHJ1ZSBpZmYgdGhleQotICAvLyBoYXZlIHRoZSBzYW1lIGNvbnRlbnQuCi0gIC8v
Ci0gIC8vIFVubGlrZSBzdHJjYXNlY21wKCksIHRoaXMgZnVuY3Rpb24gY2FuIGhhbmRsZSBOVUxM
IGFyZ3VtZW50KHMpLgotICAvLyBBIE5VTEwgQyBzdHJpbmcgaXMgY29uc2lkZXJlZCBkaWZmZXJl
bnQgdG8gYW55IG5vbi1OVUxMIEMgc3RyaW5nLAotICAvLyBpbmNsdWRpbmcgdGhlIGVtcHR5IHN0
cmluZy4KLSAgc3RhdGljIGJvb2wgQ2FzZUluc2Vuc2l0aXZlQ1N0cmluZ0VxdWFscyhjb25zdCBj
aGFyKiBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogcmhzKTsKLQotICAvLyBDb21wYXJlcyB0d28gd2lkZSBDIHN0cmluZ3MsIGlnbm9y
aW5nIGNhc2UuICBSZXR1cm5zIHRydWUgaWZmIHRoZXkKLSAgLy8gaGF2ZSB0aGUgc2FtZSBjb250
ZW50LgotICAvLwotICAvLyBVbmxpa2Ugd2NzY2FzZWNtcCgpLCB0aGlzIGZ1bmN0aW9uIGNhbiBo
YW5kbGUgTlVMTCBhcmd1bWVudChzKS4KLSAgLy8gQSBOVUxMIEMgc3RyaW5nIGlzIGNvbnNpZGVy
ZWQgZGlmZmVyZW50IHRvIGFueSBub24tTlVMTCB3aWRlIEMgc3RyaW5nLAotICAvLyBpbmNsdWRp
bmcgdGhlIGVtcHR5IHN0cmluZy4KLSAgLy8gTkI6IFRoZSBpbXBsZW1lbnRhdGlvbnMgb24gZGlm
ZmVyZW50IHBsYXRmb3JtcyBzbGlnaHRseSBkaWZmZXIuCi0gIC8vIE9uIHdpbmRvd3MsIHRoaXMg
bWV0aG9kIHVzZXMgX3djc2ljbXAgd2hpY2ggY29tcGFyZXMgYWNjb3JkaW5nIHRvIExDX0NUWVBF
Ci0gIC8vIGVudmlyb25tZW50IHZhcmlhYmxlLiBPbiBHTlUgcGxhdGZvcm0gdGhpcyBtZXRob2Qg
dXNlcyB3Y3NjYXNlY21wCi0gIC8vIHdoaWNoIGNvbXBhcmVzIGFjY29yZGluZyB0byBMQ19DVFlQ
RSBjYXRlZ29yeSBvZiB0aGUgY3VycmVudCBsb2NhbGUuCi0gIC8vIE9uIE1hY09TIFgsIGl0IHVz
ZXMgdG93bG93ZXIsIHdoaWNoIGFsc28gdXNlcyBMQ19DVFlQRSBjYXRlZ29yeSBvZiB0aGUKLSAg
Ly8gY3VycmVudCBsb2NhbGUuCi0gIHN0YXRpYyBib29sIENhc2VJbnNlbnNpdGl2ZVdpZGVDU3Ry
aW5nRXF1YWxzKGNvbnN0IHdjaGFyX3QqIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCogcmhzKTsKLQotICAvLyBSZXR1cm5z
IHRydWUgaWZmIHRoZSBnaXZlbiBzdHJpbmcgZW5kcyB3aXRoIHRoZSBnaXZlbiBzdWZmaXgsIGln
bm9yaW5nCi0gIC8vIGNhc2UuIEFueSBzdHJpbmcgaXMgY29uc2lkZXJlZCB0byBlbmQgd2l0aCBh
biBlbXB0eSBzdWZmaXguCi0gIHN0YXRpYyBib29sIEVuZHNXaXRoQ2FzZUluc2Vuc2l0aXZlKAot
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHN0ciwgY29uc3Qgc3RkOjpzdHJpbmcmIHN1ZmZpeCk7
Ci0KLSAgLy8gRm9ybWF0cyBhbiBpbnQgdmFsdWUgYXMgIiUwMmQiLgotICBzdGF0aWMgc3RkOjpz
dHJpbmcgRm9ybWF0SW50V2lkdGgyKGludCB2YWx1ZSk7ICAvLyAiJTAyZCIgZm9yIHdpZHRoID09
IDIKLQotICAvLyBGb3JtYXRzIGFuIGludCB2YWx1ZSBhcyAiJVgiLgotICBzdGF0aWMgc3RkOjpz
dHJpbmcgRm9ybWF0SGV4SW50KGludCB2YWx1ZSk7Ci0KLSAgLy8gRm9ybWF0cyBhIGJ5dGUgYXMg
IiUwMlgiLgotICBzdGF0aWMgc3RkOjpzdHJpbmcgRm9ybWF0Qnl0ZSh1bnNpZ25lZCBjaGFyIHZh
bHVlKTsKLQotIHByaXZhdGU6Ci0gIFN0cmluZygpOyAgLy8gTm90IG1lYW50IHRvIGJlIGluc3Rh
bnRpYXRlZC4KLX07ICAvLyBjbGFzcyBTdHJpbmcKLQotLy8gR2V0cyB0aGUgY29udGVudCBvZiB0
aGUgc3RyaW5nc3RyZWFtJ3MgYnVmZmVyIGFzIGFuIHN0ZDo6c3RyaW5nLiAgRWFjaCAnXDAnCi0v
LyBjaGFyYWN0ZXIgaW4gdGhlIGJ1ZmZlciBpcyByZXBsYWNlZCB3aXRoICJcXDAiLgotR1RFU1Rf
QVBJXyBzdGQ6OnN0cmluZyBTdHJpbmdTdHJlYW1Ub1N0cmluZyg6OnN0ZDo6c3RyaW5nc3RyZWFt
KiBzdHJlYW0pOwotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSB0
ZXN0aW5nCi0KLSNlbmRpZiAgLy8gR1RFU1RfSU5DTFVERV9HVEVTVF9JTlRFUk5BTF9HVEVTVF9T
VFJJTkdfSF8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5
L2d0ZXN0L2dvb2dsZXRlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC10eXBlLXV0aWwu
aCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3Qv
aW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC10eXBlLXV0aWwuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTQ2ZjdjZmNiNDgzYTk1NTFjMjBhZGEyM2I3N2Y5ODgwNDA1ZjRmZS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L2luY2x1ZGUvZ3Rlc3Qv
aW50ZXJuYWwvZ3Rlc3QtdHlwZS11dGlsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMzMxICswLDAg
QEAKLS8vIFRoaXMgZmlsZSB3YXMgR0VORVJBVEVEIGJ5IGNvbW1hbmQ6Ci0vLyAgICAgcHVtcC5w
eSBndGVzdC10eXBlLXV0aWwuaC5wdW1wCi0vLyBETyBOT1QgRURJVCBCWSBIQU5EISEhCi0KLS8v
IENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuCi0vLyBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8K
LS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0v
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLy8KLS8vIEF1dGhvcjog
d2FuQGdvb2dsZS5jb20gKFpoYW55b25nIFdhbikKLQotLy8gVHlwZSB1dGlsaXRpZXMgbmVlZGVk
IGZvciBpbXBsZW1lbnRpbmcgdHlwZWQgYW5kIHR5cGUtcGFyYW1ldGVyaXplZAotLy8gdGVzdHMu
ICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IGEgU0NSSVBULiAgRE8gTk9UIEVESVQgQlkgSEFO
RCEKLS8vCi0vLyBDdXJyZW50bHkgd2Ugc3VwcG9ydCBhdCBtb3N0IDUwIHR5cGVzIGluIGEgbGlz
dCwgYW5kIGF0IG1vc3QgNTAKLS8vIHR5cGUtcGFyYW1ldGVyaXplZCB0ZXN0cyBpbiBvbmUgdHlw
ZS1wYXJhbWV0ZXJpemVkIHRlc3QgY2FzZS4KLS8vIFBsZWFzZSBjb250YWN0IGdvb2dsZXRlc3Rm
cmFtZXdvcmtAZ29vZ2xlZ3JvdXBzLmNvbSBpZiB5b3UgbmVlZAotLy8gbW9yZS4KLQotI2lmbmRl
ZiBHVEVTVF9JTkNMVURFX0dURVNUX0lOVEVSTkFMX0dURVNUX1RZUEVfVVRJTF9IXwotI2RlZmlu
ZSBHVEVTVF9JTkNMVURFX0dURVNUX0lOVEVSTkFMX0dURVNUX1RZUEVfVVRJTF9IXwotCi0jaW5j
bHVkZSAiZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtcG9ydC5oIgotCi0vLyAjaWZkZWYgX19HTlVDX18g
aXMgdG9vIGdlbmVyYWwgaGVyZS4gIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSBnY2Mgd2l0aG91dCB1
c2luZwotLy8gbGlic3RkYysrICh3aGljaCBpcyB3aGVyZSBjeHhhYmkuaCBjb21lcyBmcm9tKS4K
LSMgaWYgR1RFU1RfSEFTX0NYWEFCSV9IXwotIyAgaW5jbHVkZSA8Y3h4YWJpLmg+Ci0jIGVsaWYg
ZGVmaW5lZChfX0hQX2FDQykKLSMgIGluY2x1ZGUgPGFjeHhfZGVtYW5nbGUuaD4KLSMgZW5kaWYg
IC8vIEdURVNUX0hBU0hfQ1hYQUJJX0hfCi0KLW5hbWVzcGFjZSB0ZXN0aW5nIHsKLW5hbWVzcGFj
ZSBpbnRlcm5hbCB7Ci0KLS8vIEdldFR5cGVOYW1lPFQ+KCkgcmV0dXJucyBhIGh1bWFuLXJlYWRh
YmxlIG5hbWUgb2YgdHlwZSBULgotLy8gTkI6IFRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIGlu
IEdvb2dsZSBNb2NrLCBzbyBkb24ndCBtb3ZlIGl0IGluc2lkZSBvZgotLy8gdGhlIHR5cGVkLXRl
c3Qtb25seSBzZWN0aW9uIGJlbG93LgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGQ6OnN0cmlu
ZyBHZXRUeXBlTmFtZSgpIHsKLSMgaWYgR1RFU1RfSEFTX1JUVEkKLQotICBjb25zdCBjaGFyKiBj
b25zdCBuYW1lID0gdHlwZWlkKFQpLm5hbWUoKTsKLSMgIGlmIEdURVNUX0hBU19DWFhBQklfSF8g
fHwgZGVmaW5lZChfX0hQX2FDQykKLSAgaW50IHN0YXR1cyA9IDA7Ci0gIC8vIGdjYydzIGltcGxl
bWVudGF0aW9uIG9mIHR5cGVpZChUKS5uYW1lKCkgbWFuZ2xlcyB0aGUgdHlwZSBuYW1lLAotICAv
LyBzbyB3ZSBoYXZlIHRvIGRlbWFuZ2xlIGl0LgotIyAgIGlmIEdURVNUX0hBU19DWFhBQklfSF8K
LSAgdXNpbmcgYWJpOjpfX2N4YV9kZW1hbmdsZTsKLSMgICBlbmRpZiAgLy8gR1RFU1RfSEFTX0NY
WEFCSV9IXwotICBjaGFyKiBjb25zdCByZWFkYWJsZV9uYW1lID0gX19jeGFfZGVtYW5nbGUobmFt
ZSwgMCwgMCwgJnN0YXR1cyk7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWVfc3RyKHN0YXR1cyA9
PSAwID8gcmVhZGFibGVfbmFtZSA6IG5hbWUpOwotICBmcmVlKHJlYWRhYmxlX25hbWUpOwotICBy
ZXR1cm4gbmFtZV9zdHI7Ci0jICBlbHNlCi0gIHJldHVybiBuYW1lOwotIyAgZW5kaWYgIC8vIEdU
RVNUX0hBU19DWFhBQklfSF8gfHwgX19IUF9hQ0MKLQotIyBlbHNlCi0KLSAgcmV0dXJuICI8dHlw
ZT4iOwotCi0jIGVuZGlmICAvLyBHVEVTVF9IQVNfUlRUSQotfQotCi0jaWYgR1RFU1RfSEFTX1RZ
UEVEX1RFU1QgfHwgR1RFU1RfSEFTX1RZUEVEX1RFU1RfUAotCi0vLyBBc3NlcnR5VHlwZUVxPFQx
LCBUMj46OnR5cGUgaXMgZGVmaW5lZCBpZmYgVDEgYW5kIFQyIGFyZSB0aGUgc2FtZQotLy8gdHlw
ZS4gIFRoaXMgY2FuIGJlIHVzZWQgYXMgYSBjb21waWxlLXRpbWUgYXNzZXJ0aW9uIHRvIGVuc3Vy
ZSB0aGF0Ci0vLyB0d28gdHlwZXMgYXJlIGVxdWFsLgotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEs
IHR5cGVuYW1lIFQyPgotc3RydWN0IEFzc2VydFR5cGVFcTsKLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci1zdHJ1Y3QgQXNzZXJ0VHlwZUVxPFQsIFQ+IHsKLSAgdHlwZWRlZiBib29sIHR5cGU7Ci19
OwotCi0vLyBBIHVuaXF1ZSB0eXBlIHVzZWQgYXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBh
cmd1bWVudHMgb2YgY2xhc3MKLS8vIHRlbXBsYXRlIFR5cGVzLiAgVGhpcyBhbGxvd3MgdXMgdG8g
c2ltdWxhdGUgdmFyaWFkaWMgdGVtcGxhdGVzCi0vLyAoZS5nLiBUeXBlczxpbnQ+LCBUeXBlPGlu
dCwgZG91YmxlPiwgYW5kIGV0YyksIHdoaWNoIEMrKyBkb2Vzbid0Ci0vLyBzdXBwb3J0IGRpcmVj
dGx5Lgotc3RydWN0IE5vbmUge307Ci0KLS8vIFRoZSBmb2xsb3dpbmcgZmFtaWx5IG9mIHN0cnVj
dCBhbmQgc3RydWN0IHRlbXBsYXRlcyBhcmUgdXNlZCB0bwotLy8gcmVwcmVzZW50IHR5cGUgbGlz
dHMuICBJbiBwYXJ0aWN1bGFyLCBUeXBlc048VDEsIFQyLCAuLi4sIFROPgotLy8gcmVwcmVzZW50
cyBhIHR5cGUgbGlzdCB3aXRoIE4gdHlwZXMgKFQxLCBUMiwgLi4uLCBhbmQgVE4pIGluIGl0Lgot
Ly8gRXhjZXB0IGZvciBUeXBlczAsIGV2ZXJ5IHN0cnVjdCBpbiB0aGUgZmFtaWx5IGhhcyB0d28g
bWVtYmVyIHR5cGVzOgotLy8gSGVhZCBmb3IgdGhlIGZpcnN0IHR5cGUgaW4gdGhlIGxpc3QsIGFu
ZCBUYWlsIGZvciB0aGUgcmVzdCBvZiB0aGUKLS8vIGxpc3QuCi0KLS8vIFRoZSBlbXB0eSB0eXBl
IGxpc3QuCi1zdHJ1Y3QgVHlwZXMwIHt9OwotCi0vLyBUeXBlIGxpc3RzIG9mIGxlbmd0aCAxLCAy
LCAzLCBhbmQgc28gb24uCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMT4KLXN0cnVjdCBUeXBlczEg
ewotICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlwZXMwIFRhaWw7Ci19OwotdGVtcGxh
dGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KLXN0cnVjdCBUeXBlczIgewotICB0eXBlZGVm
IFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlwZXMxPFQyPiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDM+Ci1zdHJ1Y3QgVHlwZXMzIHsKLSAg
dHlwZWRlZiBUMSBIZWFkOwotICB0eXBlZGVmIFR5cGVzMjxUMiwgVDM+IFRhaWw7Ci19OwotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUg
VDQ+Ci1zdHJ1Y3QgVHlwZXM0IHsKLSAgdHlwZWRlZiBUMSBIZWFkOwotICB0eXBlZGVmIFR5cGVz
MzxUMiwgVDMsIFQ0PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFt
ZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNT4KLXN0cnVjdCBUeXBl
czUgewotICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlwZXM0PFQyLCBUMywgVDQsIFQ1
PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h
bWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNj4KLXN0cnVj
dCBUeXBlczYgewotICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlwZXM1PFQyLCBUMywg
VDQsIFQ1LCBUNj4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUg
VDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUg
VDYsIHR5cGVuYW1lIFQ3Pgotc3RydWN0IFR5cGVzNyB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAg
dHlwZWRlZiBUeXBlczY8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNz4gVGFpbDsKLX07Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwg
dHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOD4K
LXN0cnVjdCBUeXBlczggewotICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlwZXM3PFQy
LCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwK
LSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOT4K
LXN0cnVjdCBUeXBlczkgewotICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlwZXM4PFQy
LCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOT4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUg
VDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUg
VDksIHR5cGVuYW1lIFQxMD4KLXN0cnVjdCBUeXBlczEwIHsKLSAgdHlwZWRlZiBUMSBIZWFkOwot
ICB0eXBlZGVmIFR5cGVzOTxUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMD4gVGFp
bDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQz
LCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3
LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBU
MTE+Ci1zdHJ1Y3QgVHlwZXMxMSB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRlZiBUeXBl
czEwPFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTE+IFRhaWw7Ci19Owot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5h
bWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5h
bWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBl
bmFtZSBUMTI+Ci1zdHJ1Y3QgVHlwZXMxMiB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRl
ZiBUeXBlczExPFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMj4g
VGFpbDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1l
IFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1l
IFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFt
ZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzPgotc3RydWN0IFR5cGVzMTMgewotICB0
eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlwZXMxMjxUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3
LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMz4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUg
VDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUg
VDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5h
bWUgVDEzLCB0eXBlbmFtZSBUMTQ+Ci1zdHJ1Y3QgVHlwZXMxNCB7Ci0gIHR5cGVkZWYgVDEgSGVh
ZDsKLSAgdHlwZWRlZiBUeXBlczEzPFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEw
LCBUMTEsIFQxMiwgVDEzLCBUMTQ+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEs
IHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAg
IHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBl
bmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywg
dHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTU+Ci1zdHJ1Y3QgVHlwZXMxNSB7Ci0gIHR5cGVkZWYg
VDEgSGVhZDsKLSAgdHlwZWRlZiBUeXBlczE0PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBU
OSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgICBUMTU+IFRhaWw7Ci19OwotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQs
IHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgs
IHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBU
MTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5h
bWUgVDE2Pgotc3RydWN0IFR5cGVzMTYgewotICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYg
VHlwZXMxNTxUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQx
MywgVDE0LCBUMTUsCi0gICAgICBUMTY+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAot
ICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0
eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQx
MywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFt
ZSBUMTc+Ci1zdHJ1Y3QgVHlwZXMxNyB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRlZiBU
eXBlczE2PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEz
LCBUMTQsIFQxNSwKLSAgICAgIFQxNiwgVDE3PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBU
NSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBU
OSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFt
ZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlw
ZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTg+Ci1zdHJ1Y3QgVHlwZXMxOCB7Ci0gIHR5cGVkZWYgVDEg
SGVhZDsKLSAgdHlwZWRlZiBUeXBlczE3PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwg
VDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICAgIFQxNiwgVDE3LCBUMTg+IFRhaWw7
Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywg
dHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywg
dHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDEx
LCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUs
Ci0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUg
VDE5Pgotc3RydWN0IFR5cGVzMTkgewotICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlw
ZXMxODxUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywg
VDE0LCBUMTUsCi0gICAgICBUMTYsIFQxNywgVDE4LCBUMTk+IFRhaWw7Ci19OwotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5
cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5
cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIs
IHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUg
VDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBU
MjA+Ci1zdHJ1Y3QgVHlwZXMyMCB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRlZiBUeXBl
czE5PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBU
MTQsIFQxNSwKLSAgICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwPiBUYWlsOwotfTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0
LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4
LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUg
VDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVu
YW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5h
bWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMT4KLXN0cnVjdCBUeXBlczIxIHsKLSAgdHlwZWRlZiBU
MSBIZWFkOwotICB0eXBlZGVmIFR5cGVzMjA8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5
LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAotICAgICAgVDE2LCBUMTcsIFQxOCwgVDE5
LCBUMjAsIFQyMT4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUg
VDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUg
VDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwK
LSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBU
MTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5h
bWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5
cGVuYW1lIFQyMj4KLXN0cnVjdCBUeXBlczIyIHsKLSAgdHlwZWRlZiBUMSBIZWFkOwotICB0eXBl
ZGVmIFR5cGVzMjE8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEy
LCBUMTMsIFQxNCwgVDE1LAotICAgICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIy
PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h
bWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5h
bWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVu
YW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5h
bWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5
cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIy
LCB0eXBlbmFtZSBUMjM+Ci1zdHJ1Y3QgVHlwZXMyMyB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAg
dHlwZWRlZiBUeXBlczIyPFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEs
IFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEs
IFQyMiwgVDIzPiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBU
MiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBU
NiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAot
ICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQx
NCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFt
ZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlw
ZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyND4KLXN0cnVjdCBUeXBlczI0IHsK
LSAgdHlwZWRlZiBUMSBIZWFkOwotICB0eXBlZGVmIFR5cGVzMjM8VDIsIFQzLCBUNCwgVDUsIFQ2
LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAotICAgICAgVDE2LCBU
MTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyND4gVGFpbDsKLX07Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwg
dHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwg
dHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQx
MiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFt
ZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1l
IFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBl
bmFtZSBUMjQsIHR5cGVuYW1lIFQyNT4KLXN0cnVjdCBUeXBlczI1IHsKLSAgdHlwZWRlZiBUMSBI
ZWFkOwotICB0eXBlZGVmIFR5cGVzMjQ8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBU
MTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAotICAgICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBU
MjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBU
NSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBU
OSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFt
ZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlw
ZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAg
IHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwg
dHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNj4KLXN0cnVjdCBUeXBlczI2IHsKLSAgdHlw
ZWRlZiBUMSBIZWFkOwotICB0eXBlZGVmIFR5cGVzMjU8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywg
VDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAotICAgICAgVDE2LCBUMTcsIFQx
OCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjY+IFRhaWw7Ci19OwotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUg
VDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUg
VDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFt
ZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlw
ZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBl
bmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywg
dHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBU
Mjc+Ci1zdHJ1Y3QgVHlwZXMyNyB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRlZiBUeXBl
czI2PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBU
MTQsIFQxNSwKLSAgICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBU
MjQsIFQyNSwgVDI2LCBUMjc+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5
cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5
cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFt
ZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlw
ZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcs
IHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUg
VDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBU
MjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOD4KLXN0cnVj
dCBUeXBlczI4IHsKLSAgdHlwZWRlZiBUMSBIZWFkOwotICB0eXBlZGVmIFR5cGVzMjc8VDIsIFQz
LCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAot
ICAgICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBU
MjYsIFQyNywgVDI4PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFt
ZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFt
ZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEw
LAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1l
IFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBl
bmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwg
dHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAot
ICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQy
OT4KLXN0cnVjdCBUeXBlczI5IHsKLSAgdHlwZWRlZiBUMSBIZWFkOwotICB0eXBlZGVmIFR5cGVz
Mjg8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQx
NCwgVDE1LAotICAgICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQy
NCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAgICAgVDI5PiBUYWlsOwotfTsKLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBl
bmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBl
bmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0
eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQx
NiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIw
LAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1l
IFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBl
bmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwPgotc3RydWN0IFR5cGVzMzAgewot
ICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlwZXMyOTxUMiwgVDMsIFQ0LCBUNSwgVDYs
IFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LCBUMTUsCi0gICAgICBUMTYsIFQx
NywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgs
IFQyOSwKLSAgICAgIFQzMD4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlw
ZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1l
IFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBl
bmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywg
dHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBU
MjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQy
NSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFt
ZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzE+Ci1zdHJ1Y3QgVHlwZXMzMSB7
Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRlZiBUeXBlczMwPFQyLCBUMywgVDQsIFQ1LCBU
NiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICAgIFQxNiwg
VDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQy
OCwgVDI5LAotICAgICAgVDMwLCBUMzE+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAot
ICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0
eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQx
MywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFt
ZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlw
ZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBl
bmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOCwg
dHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5hbWUgVDMxLCB0eXBlbmFtZSBU
MzI+Ci1zdHJ1Y3QgVHlwZXMzMiB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRlZiBUeXBl
czMxPFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBU
MTQsIFQxNSwKLSAgICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBU
MjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LAotICAgICAgVDMwLCBUMzEsIFQzMj4gVGFpbDsK
LX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0
eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0
eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEs
IHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwK
LSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBU
MTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5h
bWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5
cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAg
ICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMzPgotc3RydWN0IFR5cGVz
MzMgewotICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlwZXMzMjxUMiwgVDMsIFQ0LCBU
NSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LCBUMTUsCi0gICAgICBU
MTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3
LCBUMjgsIFQyOSwKLSAgICAgIFQzMCwgVDMxLCBUMzIsIFQzMz4gVGFpbDsKLX07Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwg
dHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwg
dHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQx
MiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFt
ZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1l
IFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBl
bmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywg
dHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBU
MzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQ+Ci1zdHJ1Y3QgVHlw
ZXMzNCB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRlZiBUeXBlczMzPFQyLCBUMywgVDQs
IFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICAg
IFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBU
MjcsIFQyOCwgVDI5LAotICAgICAgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQ+IFRhaWw7Ci19Owot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5h
bWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5h
bWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBl
bmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAg
dHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0
eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQy
MywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFt
ZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlw
ZW5hbWUgVDMxLCB0eXBlbmFtZSBUMzIsIHR5cGVuYW1lIFQzMywgdHlwZW5hbWUgVDM0LCB0eXBl
bmFtZSBUMzU+Ci1zdHJ1Y3QgVHlwZXMzNSB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRl
ZiBUeXBlczM0PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwg
VDEzLCBUMTQsIFQxNSwKLSAgICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwg
VDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LAotICAgICAgVDMwLCBUMzEsIFQzMiwg
VDMzLCBUMzQsIFQzNT4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5h
bWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5h
bWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQx
MCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFt
ZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlw
ZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEs
IHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwK
LSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBU
MjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5h
bWUgVDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBUMzY+Ci1z
dHJ1Y3QgVHlwZXMzNiB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRlZiBUeXBlczM1PFQy
LCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQx
NSwKLSAgICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQy
NSwgVDI2LCBUMjcsIFQyOCwgVDI5LAotICAgICAgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQz
NSwgVDM2PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwg
dHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwg
dHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAg
IHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwg
dHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBU
MTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5h
bWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5
cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlw
ZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMs
IHR5cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUg
VDM3Pgotc3RydWN0IFR5cGVzMzcgewotICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlw
ZXMzNjxUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywg
VDE0LCBUMTUsCi0gICAgICBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywg
VDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsIFQyOSwKLSAgICAgIFQzMCwgVDMxLCBUMzIsIFQzMywg
VDM0LCBUMzUsIFQzNiwgVDM3PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0
eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5h
bWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5
cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3
LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1l
IFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUg
VDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVu
YW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0
eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQz
NiwgdHlwZW5hbWUgVDM3LCB0eXBlbmFtZSBUMzg+Ci1zdHJ1Y3QgVHlwZXMzOCB7Ci0gIHR5cGVk
ZWYgVDEgSGVhZDsKLSAgdHlwZWRlZiBUeXBlczM3PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4
LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICAgIFQxNiwgVDE3LCBUMTgs
IFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LAot
ICAgICAgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOD4gVGFpbDsK
LX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0
eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0
eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEs
IHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwK
LSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBU
MTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5h
bWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5
cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAg
ICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQs
IHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBUMzYsIHR5cGVuYW1lIFQzNywgdHlwZW5hbWUg
VDM4LCB0eXBlbmFtZSBUMzk+Ci1zdHJ1Y3QgVHlwZXMzOSB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsK
LSAgdHlwZWRlZiBUeXBlczM4PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBU
MTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBU
MjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LAotICAgICAgVDMwLCBU
MzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5PiBUYWlsOwotfTsKLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1l
IFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1l
IFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5h
bWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5
cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlw
ZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMs
IHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUg
VDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVu
YW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQzNCwgdHlwZW5h
bWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3LCB0eXBlbmFtZSBUMzgsIHR5
cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQwPgotc3RydWN0IFR5cGVzNDAgewotICB0eXBlZGVmIFQx
IEhlYWQ7Ci0gIHR5cGVkZWYgVHlwZXMzOTxUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDks
IFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LCBUMTUsCi0gICAgICBUMTYsIFQxNywgVDE4LCBUMTks
IFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsIFQyOSwKLSAgICAg
IFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwPiBU
YWlsOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUg
VDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUg
VDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1l
IFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUg
VDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVu
YW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0
eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQy
NiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMw
LAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1l
IFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3LCB0eXBl
bmFtZSBUMzgsIHR5cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQwLAotICAgIHR5cGVuYW1lIFQ0MT4K
LXN0cnVjdCBUeXBlczQxIHsKLSAgdHlwZWRlZiBUMSBIZWFkOwotICB0eXBlZGVmIFR5cGVzNDA8
VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwg
VDE1LAotICAgICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwg
VDI1LCBUMjYsIFQyNywgVDI4LCBUMjksCi0gICAgICBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwg
VDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwgVDQxPiBUYWlsOwotfTsKLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBl
bmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBl
bmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0
eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQx
NiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIw
LAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1l
IFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBl
bmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwg
dHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1LAot
ICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3LCB0eXBlbmFtZSBUMzgsIHR5cGVuYW1lIFQz
OSwgdHlwZW5hbWUgVDQwLAotICAgIHR5cGVuYW1lIFQ0MSwgdHlwZW5hbWUgVDQyPgotc3RydWN0
IFR5cGVzNDIgewotICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlwZXM0MTxUMiwgVDMs
IFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LCBUMTUsCi0g
ICAgICBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQy
NiwgVDI3LCBUMjgsIFQyOSwKLSAgICAgIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQz
NiwgVDM3LCBUMzgsIFQzOSwgVDQwLCBUNDEsIFQ0Mj4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5h
bWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5h
bWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlw
ZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYs
IHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwK
LSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBU
MjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5h
bWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5
cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAg
ICB0eXBlbmFtZSBUMzYsIHR5cGVuYW1lIFQzNywgdHlwZW5hbWUgVDM4LCB0eXBlbmFtZSBUMzks
IHR5cGVuYW1lIFQ0MCwKLSAgICB0eXBlbmFtZSBUNDEsIHR5cGVuYW1lIFQ0MiwgdHlwZW5hbWUg
VDQzPgotc3RydWN0IFR5cGVzNDMgewotICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlw
ZXM0MjxUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywg
VDE0LCBUMTUsCi0gICAgICBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywg
VDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsIFQyOSwKLSAgICAgIFQzMCwgVDMxLCBUMzIsIFQzMywg
VDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLCBUNDEsIFQ0MiwKLSAgICAgIFQ0Mz4g
VGFpbDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1l
IFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1l
IFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFt
ZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1l
IFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBl
bmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwg
dHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBU
MjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQz
MCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMzLCB0eXBlbmFt
ZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBUMzYsIHR5cGVuYW1lIFQzNywgdHlw
ZW5hbWUgVDM4LCB0eXBlbmFtZSBUMzksIHR5cGVuYW1lIFQ0MCwKLSAgICB0eXBlbmFtZSBUNDEs
IHR5cGVuYW1lIFQ0MiwgdHlwZW5hbWUgVDQzLCB0eXBlbmFtZSBUNDQ+Ci1zdHJ1Y3QgVHlwZXM0
NCB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRlZiBUeXBlczQzPFQyLCBUMywgVDQsIFQ1
LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICAgIFQx
NiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcs
IFQyOCwgVDI5LAotICAgICAgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcs
IFQzOCwgVDM5LCBUNDAsIFQ0MSwgVDQyLCBUNDMsCi0gICAgICBUNDQ+IFRhaWw7Ci19OwotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUg
VDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUg
VDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFt
ZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlw
ZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBl
bmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywg
dHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBU
MjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5h
bWUgVDMxLCB0eXBlbmFtZSBUMzIsIHR5cGVuYW1lIFQzMywgdHlwZW5hbWUgVDM0LCB0eXBlbmFt
ZSBUMzUsCi0gICAgdHlwZW5hbWUgVDM2LCB0eXBlbmFtZSBUMzcsIHR5cGVuYW1lIFQzOCwgdHlw
ZW5hbWUgVDM5LCB0eXBlbmFtZSBUNDAsCi0gICAgdHlwZW5hbWUgVDQxLCB0eXBlbmFtZSBUNDIs
IHR5cGVuYW1lIFQ0MywgdHlwZW5hbWUgVDQ0LCB0eXBlbmFtZSBUNDU+Ci1zdHJ1Y3QgVHlwZXM0
NSB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRlZiBUeXBlczQ0PFQyLCBUMywgVDQsIFQ1
LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICAgIFQx
NiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcs
IFQyOCwgVDI5LAotICAgICAgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcs
IFQzOCwgVDM5LCBUNDAsIFQ0MSwgVDQyLCBUNDMsCi0gICAgICBUNDQsIFQ0NT4gVGFpbDsKLX07
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBl
bmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBl
bmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5
cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAg
ICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTks
IHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUg
VDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVu
YW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0
eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQsIHR5
cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBUMzYsIHR5cGVuYW1lIFQzNywgdHlwZW5hbWUgVDM4
LCB0eXBlbmFtZSBUMzksIHR5cGVuYW1lIFQ0MCwKLSAgICB0eXBlbmFtZSBUNDEsIHR5cGVuYW1l
IFQ0MiwgdHlwZW5hbWUgVDQzLCB0eXBlbmFtZSBUNDQsIHR5cGVuYW1lIFQ0NSwKLSAgICB0eXBl
bmFtZSBUNDY+Ci1zdHJ1Y3QgVHlwZXM0NiB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRl
ZiBUeXBlczQ1PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwg
VDEzLCBUMTQsIFQxNSwKLSAgICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwg
VDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LAotICAgICAgVDMwLCBUMzEsIFQzMiwg
VDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwgVDQyLCBUNDMsCi0g
ICAgICBUNDQsIFQ0NSwgVDQ2PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0
eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5h
bWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5
cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3
LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1l
IFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUg
VDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVu
YW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0
eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQz
NiwgdHlwZW5hbWUgVDM3LCB0eXBlbmFtZSBUMzgsIHR5cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQw
LAotICAgIHR5cGVuYW1lIFQ0MSwgdHlwZW5hbWUgVDQyLCB0eXBlbmFtZSBUNDMsIHR5cGVuYW1l
IFQ0NCwgdHlwZW5hbWUgVDQ1LAotICAgIHR5cGVuYW1lIFQ0NiwgdHlwZW5hbWUgVDQ3Pgotc3Ry
dWN0IFR5cGVzNDcgewotICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVkZWYgVHlwZXM0NjxUMiwg
VDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LCBUMTUs
Ci0gICAgICBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUs
IFQyNiwgVDI3LCBUMjgsIFQyOSwKLSAgICAgIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUs
IFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLCBUNDEsIFQ0MiwgVDQzLAotICAgICAgVDQ0LCBUNDUs
IFQ0NiwgVDQ3PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBU
MiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBU
NiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAot
ICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQx
NCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFt
ZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlw
ZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAg
IHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwg
dHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBU
MzMsIHR5cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5h
bWUgVDM3LCB0eXBlbmFtZSBUMzgsIHR5cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQwLAotICAgIHR5
cGVuYW1lIFQ0MSwgdHlwZW5hbWUgVDQyLCB0eXBlbmFtZSBUNDMsIHR5cGVuYW1lIFQ0NCwgdHlw
ZW5hbWUgVDQ1LAotICAgIHR5cGVuYW1lIFQ0NiwgdHlwZW5hbWUgVDQ3LCB0eXBlbmFtZSBUNDg+
Ci1zdHJ1Y3QgVHlwZXM0OCB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRlZiBUeXBlczQ3
PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQs
IFQxNSwKLSAgICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQs
IFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LAotICAgICAgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQs
IFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwgVDQyLCBUNDMsCi0gICAgICBUNDQs
IFQ0NSwgVDQ2LCBUNDcsIFQ0OD4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwg
dHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAg
dHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVu
YW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0
eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQx
NywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFt
ZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1l
IFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBl
bmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwg
dHlwZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBU
MzYsIHR5cGVuYW1lIFQzNywgdHlwZW5hbWUgVDM4LCB0eXBlbmFtZSBUMzksIHR5cGVuYW1lIFQ0
MCwKLSAgICB0eXBlbmFtZSBUNDEsIHR5cGVuYW1lIFQ0MiwgdHlwZW5hbWUgVDQzLCB0eXBlbmFt
ZSBUNDQsIHR5cGVuYW1lIFQ0NSwKLSAgICB0eXBlbmFtZSBUNDYsIHR5cGVuYW1lIFQ0NywgdHlw
ZW5hbWUgVDQ4LCB0eXBlbmFtZSBUNDk+Ci1zdHJ1Y3QgVHlwZXM0OSB7Ci0gIHR5cGVkZWYgVDEg
SGVhZDsKLSAgdHlwZWRlZiBUeXBlczQ4PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwg
VDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwg
VDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LAotICAgICAg
VDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0
MSwgVDQyLCBUNDMsCi0gICAgICBUNDQsIFQ0NSwgVDQ2LCBUNDcsIFQ0OCwgVDQ5PiBUYWlsOwot
fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5
cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5
cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwg
dHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAot
ICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQx
OSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFt
ZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlw
ZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAg
IHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQzNCwg
dHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3LCB0eXBlbmFtZSBU
MzgsIHR5cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQwLAotICAgIHR5cGVuYW1lIFQ0MSwgdHlwZW5h
bWUgVDQyLCB0eXBlbmFtZSBUNDMsIHR5cGVuYW1lIFQ0NCwgdHlwZW5hbWUgVDQ1LAotICAgIHR5
cGVuYW1lIFQ0NiwgdHlwZW5hbWUgVDQ3LCB0eXBlbmFtZSBUNDgsIHR5cGVuYW1lIFQ0OSwgdHlw
ZW5hbWUgVDUwPgotc3RydWN0IFR5cGVzNTAgewotICB0eXBlZGVmIFQxIEhlYWQ7Ci0gIHR5cGVk
ZWYgVHlwZXM0OTxUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIs
IFQxMywgVDE0LCBUMTUsCi0gICAgICBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIs
IFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsIFQyOSwKLSAgICAgIFQzMCwgVDMxLCBUMzIs
IFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLCBUNDEsIFQ0MiwgVDQzLAot
ICAgICAgVDQ0LCBUNDUsIFQ0NiwgVDQ3LCBUNDgsIFQ0OSwgVDUwPiBUYWlsOwotfTsKLQotCi19
ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotLy8gV2UgZG9uJ3Qgd2FudCB0byByZXF1aXJlIHRo
ZSB1c2VycyB0byB3cml0ZSBUeXBlc048Li4uPiBkaXJlY3RseSwKLS8vIGFzIHRoYXQgd291bGQg
cmVxdWlyZSB0aGVtIHRvIGNvdW50IHRoZSBsZW5ndGguICBUeXBlczwuLi4+IGlzIG11Y2gKLS8v
IGVhc2llciB0byB3cml0ZSwgYnV0IGdlbmVyYXRlcyBob3JyaWJsZSBtZXNzYWdlcyB3aGVuIHRo
ZXJlIGlzIGEKLS8vIGNvbXBpbGVyIGVycm9yLCBhcyBnY2MgaW5zaXN0cyBvbiBwcmludGluZyBv
dXQgZWFjaCB0ZW1wbGF0ZQotLy8gYXJndW1lbnQsIGV2ZW4gaWYgaXQgaGFzIHRoZSBkZWZhdWx0
IHZhbHVlICh0aGlzIG1lYW5zIFR5cGVzPGludD4KLS8vIHdpbGwgYXBwZWFyIGFzIFR5cGVzPGlu
dCwgTm9uZSwgTm9uZSwgLi4uLCBOb25lPiBpbiB0aGUgY29tcGlsZXIKLS8vIGVycm9ycykuCi0v
LwotLy8gT3VyIHNvbHV0aW9uIGlzIHRvIGNvbWJpbmUgdGhlIGJlc3QgcGFydCBvZiB0aGUgdHdv
IGFwcHJvYWNoZXM6IGEKLS8vIHVzZXIgd291bGQgd3JpdGUgVHlwZXM8VDEsIC4uLiwgVE4+LCBh
bmQgR29vZ2xlIFRlc3Qgd2lsbCB0cmFuc2xhdGUKLS8vIHRoYXQgdG8gVHlwZXNOPFQxLCAuLi4s
IFROPiBpbnRlcm5hbGx5IHRvIG1ha2UgZXJyb3IgbWVzc2FnZXMKLS8vIHJlYWRhYmxlLiAgVGhl
IHRyYW5zbGF0aW9uIGlzIGRvbmUgYnkgdGhlICd0eXBlJyBtZW1iZXIgb2YgdGhlCi0vLyBUeXBl
cyB0ZW1wbGF0ZS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSA9IGludGVybmFsOjpOb25lLCB0eXBl
bmFtZSBUMiA9IGludGVybmFsOjpOb25lLAotICAgIHR5cGVuYW1lIFQzID0gaW50ZXJuYWw6Ok5v
bmUsIHR5cGVuYW1lIFQ0ID0gaW50ZXJuYWw6Ok5vbmUsCi0gICAgdHlwZW5hbWUgVDUgPSBpbnRl
cm5hbDo6Tm9uZSwgdHlwZW5hbWUgVDYgPSBpbnRlcm5hbDo6Tm9uZSwKLSAgICB0eXBlbmFtZSBU
NyA9IGludGVybmFsOjpOb25lLCB0eXBlbmFtZSBUOCA9IGludGVybmFsOjpOb25lLAotICAgIHR5
cGVuYW1lIFQ5ID0gaW50ZXJuYWw6Ok5vbmUsIHR5cGVuYW1lIFQxMCA9IGludGVybmFsOjpOb25l
LAotICAgIHR5cGVuYW1lIFQxMSA9IGludGVybmFsOjpOb25lLCB0eXBlbmFtZSBUMTIgPSBpbnRl
cm5hbDo6Tm9uZSwKLSAgICB0eXBlbmFtZSBUMTMgPSBpbnRlcm5hbDo6Tm9uZSwgdHlwZW5hbWUg
VDE0ID0gaW50ZXJuYWw6Ok5vbmUsCi0gICAgdHlwZW5hbWUgVDE1ID0gaW50ZXJuYWw6Ok5vbmUs
IHR5cGVuYW1lIFQxNiA9IGludGVybmFsOjpOb25lLAotICAgIHR5cGVuYW1lIFQxNyA9IGludGVy
bmFsOjpOb25lLCB0eXBlbmFtZSBUMTggPSBpbnRlcm5hbDo6Tm9uZSwKLSAgICB0eXBlbmFtZSBU
MTkgPSBpbnRlcm5hbDo6Tm9uZSwgdHlwZW5hbWUgVDIwID0gaW50ZXJuYWw6Ok5vbmUsCi0gICAg
dHlwZW5hbWUgVDIxID0gaW50ZXJuYWw6Ok5vbmUsIHR5cGVuYW1lIFQyMiA9IGludGVybmFsOjpO
b25lLAotICAgIHR5cGVuYW1lIFQyMyA9IGludGVybmFsOjpOb25lLCB0eXBlbmFtZSBUMjQgPSBp
bnRlcm5hbDo6Tm9uZSwKLSAgICB0eXBlbmFtZSBUMjUgPSBpbnRlcm5hbDo6Tm9uZSwgdHlwZW5h
bWUgVDI2ID0gaW50ZXJuYWw6Ok5vbmUsCi0gICAgdHlwZW5hbWUgVDI3ID0gaW50ZXJuYWw6Ok5v
bmUsIHR5cGVuYW1lIFQyOCA9IGludGVybmFsOjpOb25lLAotICAgIHR5cGVuYW1lIFQyOSA9IGlu
dGVybmFsOjpOb25lLCB0eXBlbmFtZSBUMzAgPSBpbnRlcm5hbDo6Tm9uZSwKLSAgICB0eXBlbmFt
ZSBUMzEgPSBpbnRlcm5hbDo6Tm9uZSwgdHlwZW5hbWUgVDMyID0gaW50ZXJuYWw6Ok5vbmUsCi0g
ICAgdHlwZW5hbWUgVDMzID0gaW50ZXJuYWw6Ok5vbmUsIHR5cGVuYW1lIFQzNCA9IGludGVybmFs
OjpOb25lLAotICAgIHR5cGVuYW1lIFQzNSA9IGludGVybmFsOjpOb25lLCB0eXBlbmFtZSBUMzYg
PSBpbnRlcm5hbDo6Tm9uZSwKLSAgICB0eXBlbmFtZSBUMzcgPSBpbnRlcm5hbDo6Tm9uZSwgdHlw
ZW5hbWUgVDM4ID0gaW50ZXJuYWw6Ok5vbmUsCi0gICAgdHlwZW5hbWUgVDM5ID0gaW50ZXJuYWw6
Ok5vbmUsIHR5cGVuYW1lIFQ0MCA9IGludGVybmFsOjpOb25lLAotICAgIHR5cGVuYW1lIFQ0MSA9
IGludGVybmFsOjpOb25lLCB0eXBlbmFtZSBUNDIgPSBpbnRlcm5hbDo6Tm9uZSwKLSAgICB0eXBl
bmFtZSBUNDMgPSBpbnRlcm5hbDo6Tm9uZSwgdHlwZW5hbWUgVDQ0ID0gaW50ZXJuYWw6Ok5vbmUs
Ci0gICAgdHlwZW5hbWUgVDQ1ID0gaW50ZXJuYWw6Ok5vbmUsIHR5cGVuYW1lIFQ0NiA9IGludGVy
bmFsOjpOb25lLAotICAgIHR5cGVuYW1lIFQ0NyA9IGludGVybmFsOjpOb25lLCB0eXBlbmFtZSBU
NDggPSBpbnRlcm5hbDo6Tm9uZSwKLSAgICB0eXBlbmFtZSBUNDkgPSBpbnRlcm5hbDo6Tm9uZSwg
dHlwZW5hbWUgVDUwID0gaW50ZXJuYWw6Ok5vbmU+Ci1zdHJ1Y3QgVHlwZXMgewotICB0eXBlZGVm
IGludGVybmFsOjpUeXBlczUwPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQx
MCwgVDExLCBUMTIsCi0gICAgICBUMTMsIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQy
MCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwKLSAgICAgIFQyNywgVDI4LCBUMjksIFQz
MCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLAotICAg
ICAgVDQxLCBUNDIsIFQ0MywgVDQ0LCBUNDUsIFQ0NiwgVDQ3LCBUNDgsIFQ0OSwgVDUwPiB0eXBl
OwotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBUeXBlczxpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6
Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAg
ICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwK
LSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRl
cm5hbDo6VHlwZXMwIHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQxPgotc3RydWN0IFR5
cGVzPFQxLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAot
ICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBp
bnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGlu
dGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGlu
dGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZT4gewot
ICB0eXBlZGVmIGludGVybmFsOjpUeXBlczE8VDE+IHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5cGVu
YW1lIFQxLCB0eXBlbmFtZSBUMj4KLXN0cnVjdCBUeXBlczxUMSwgVDIsIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGlu
dGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
Ci0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAg
aW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRlcm5hbDo6VHlwZXMyPFQxLCBUMj4gdHlw
ZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMz4K
LXN0cnVjdCBUeXBlczxUMSwgVDIsIFQzLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAg
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAot
ICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lPiB7Ci0gIHR5cGVkZWYgaW50ZXJuYWw6
OlR5cGVzMzxUMSwgVDIsIFQzPiB0eXBlOwotfTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUND4KLXN0cnVjdCBUeXBlczxUMSwgVDIs
IFQzLCBUNCwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwK
LSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBp
bnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBp
bnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
PiB7Ci0gIHR5cGVkZWYgaW50ZXJuYWw6OlR5cGVzNDxUMSwgVDIsIFQzLCBUND4gdHlwZTsKLX07
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5h
bWUgVDQsIHR5cGVuYW1lIFQ1Pgotc3RydWN0IFR5cGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAg
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAot
ICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBp
bnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRlcm5hbDo6VHlw
ZXM1PFQxLCBUMiwgVDMsIFQ0LCBUNT4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEs
IHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAg
IHR5cGVuYW1lIFQ2Pgotc3RydWN0IFR5cGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBp
bnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGlu
dGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6
Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAg
ICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRlcm5hbDo6VHlwZXM2PFQxLCBUMiwgVDMsIFQ0
LCBUNSwgVDY+IHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwg
dHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwg
dHlwZW5hbWUgVDc+Ci1zdHJ1Y3QgVHlwZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIGlu
dGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6
Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAg
ICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwK
LSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZT4g
ewotICB0eXBlZGVmIGludGVybmFsOjpUeXBlczc8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDc+
IHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUg
VDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUg
VDcsIHR5cGVuYW1lIFQ4Pgotc3RydWN0IFR5cGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3
LCBUOCwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGlu
dGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAg
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lPiB7Ci0gIHR5cGVkZWYg
aW50ZXJuYWw6OlR5cGVzODxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDg+IHR5cGU7Ci19
OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVu
YW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVu
YW1lIFQ4LCB0eXBlbmFtZSBUOT4KLXN0cnVjdCBUeXBlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2
LCBUNywgVDgsIFQ5LCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6
Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAg
ICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwK
LSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZT4gewotICB0eXBlZGVmIGludGVybmFs
OjpUeXBlczk8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOT4gdHlwZTsKLX07Ci10
ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUg
VDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUg
VDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTA+Ci1zdHJ1Y3QgVHlwZXM8VDEsIFQyLCBUMywg
VDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwK
LSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBp
bnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lPiB7Ci0gIHR5cGVkZWYgaW50ZXJuYWw6
OlR5cGVzMTA8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwPiB0eXBlOwot
fTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBl
bmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBl
bmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTE+Ci1z
dHJ1Y3QgVHlwZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEs
IGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAg
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAot
ICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZT4gewotICB0eXBl
ZGVmIGludGVybmFsOjpUeXBlczExPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDks
IFQxMCwgVDExPiB0eXBlOwotfTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIs
IHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYs
IHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAg
ICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMj4KLXN0cnVjdCBUeXBlczxUMSwgVDIsIFQzLCBU
NCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBpbnRlcm5hbDo6Tm9uZSwKLSAg
ICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwK
LSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRl
cm5hbDo6Tm9uZT4gewotICB0eXBlZGVmIGludGVybmFsOjpUeXBlczEyPFQxLCBUMiwgVDMsIFQ0
LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLAotICAgICAgVDEyPiB0eXBlOwotfTsKLXRl
bXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBU
NCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBU
OCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1l
IFQxMiwgdHlwZW5hbWUgVDEzPgotc3RydWN0IFR5cGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYs
IFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwK
LSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBp
bnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZT4gewotICB0eXBl
ZGVmIGludGVybmFsOjpUeXBlczEzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDks
IFQxMCwgVDExLCBUMTIsCi0gICAgICBUMTM+IHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5cGVuYW1l
IFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwK
LSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwg
dHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBU
MTMsIHR5cGVuYW1lIFQxND4KLXN0cnVjdCBUeXBlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBU
NywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAgICBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBp
bnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBp
bnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGlu
dGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZT4gewotICB0eXBlZGVmIGludGVybmFsOjpUeXBl
czE0PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsCi0g
ICAgICBUMTMsIFQxND4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1l
IFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1l
IFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAs
Ci0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUg
VDE0LCB0eXBlbmFtZSBUMTU+Ci1zdHJ1Y3QgVHlwZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwg
VDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICBpbnRlcm5hbDo6
Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAg
ICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwK
LSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lPiB7Ci0gIHR5cGVkZWYgaW50ZXJuYWw6OlR5cGVzMTU8VDEsIFQy
LCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwKLSAgICAgIFQxMywg
VDE0LCBUMTU+IHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwg
dHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwg
dHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAg
IHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwg
dHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNj4KLXN0cnVjdCBUeXBlczxUMSwgVDIsIFQz
LCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAot
ICAgIFQxNiwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBp
bnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lPiB7Ci0gIHR5cGVkZWYgaW50ZXJuYWw6OlR5cGVzMTY8VDEs
IFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwKLSAgICAgIFQx
MywgVDE0LCBUMTUsIFQxNj4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVu
YW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVu
YW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBU
MTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5h
bWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTc+Ci1z
dHJ1Y3QgVHlwZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEs
IFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICBUMTYsIFQxNywgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0g
ICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGlu
dGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
Ci0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRlcm5hbDo6
VHlwZXMxNzxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEy
LAotICAgICAgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTc+IHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5
cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFt
ZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFt
ZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBl
bmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwg
dHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTg+Ci1zdHJ1Y3QgVHlwZXM8VDEsIFQyLCBUMywgVDQs
IFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICBU
MTYsIFQxNywgVDE4LCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAg
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lPiB7Ci0g
IHR5cGVkZWYgaW50ZXJuYWw6OlR5cGVzMTg8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4
LCBUOSwgVDEwLCBUMTEsIFQxMiwKLSAgICAgIFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTg+
IHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUg
VDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUg
VDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1l
IFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUg
VDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVu
YW1lIFQxOT4KLXN0cnVjdCBUeXBlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5
LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAotICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBp
bnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBp
bnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZT4gewotICB0eXBlZGVmIGludGVybmFsOjpUeXBlczE5PFQxLCBUMiwg
VDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsCi0gICAgICBUMTMsIFQx
NCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTk+IHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5cGVuYW1l
IFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwK
LSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwg
dHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBU
MTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5h
bWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwPgotc3RydWN0
IFR5cGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIs
IFQxMywgVDE0LCBUMTUsCi0gICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZT4gewotICB0eXBl
ZGVmIGludGVybmFsOjpUeXBlczIwPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDks
IFQxMCwgVDExLCBUMTIsCi0gICAgICBUMTMsIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTks
IFQyMD4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBl
bmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBl
bmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlw
ZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBl
bmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwg
dHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxPgotc3RydWN0IFR5
cGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQx
MywgVDE0LCBUMTUsCi0gICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBp
bnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGlu
dGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRlcm5hbDo6
VHlwZXMyMTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEy
LAotICAgICAgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMT4gdHlw
ZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywg
dHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywg
dHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDEx
LCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUs
Ci0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUg
VDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjI+Ci1zdHJ1
Y3QgVHlwZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQx
MiwgVDEzLCBUMTQsIFQxNSwKLSAgICBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIs
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwK
LSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRlcm5hbDo6VHlwZXMy
MjxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLAotICAg
ICAgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyPiB0eXBl
OwotfTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0
eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0
eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEs
IHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwK
LSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBU
MTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5h
bWUgVDIzPgotc3RydWN0IFR5cGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDks
IFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LCBUMTUsCi0gICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBU
MjAsIFQyMSwgVDIyLCBUMjMsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBp
bnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGlu
dGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6
Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAg
ICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZT4gewotICB0eXBlZGVmIGludGVybmFsOjpUeXBl
czIzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsCi0g
ICAgICBUMTMsIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQy
Mz4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFt
ZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFt
ZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5h
bWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFt
ZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlw
ZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIs
IHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0Pgotc3RydWN0IFR5cGVzPFQxLCBUMiwgVDMsIFQ0
LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LCBUMTUsCi0gICAg
VDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgaW50ZXJuYWw6Ok5v
bmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRl
cm5hbDo6VHlwZXMyNDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQx
MSwgVDEyLAotICAgICAgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQy
MSwgVDIyLCBUMjMsIFQyND4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVu
YW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVu
YW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBU
MTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5h
bWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5
cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIx
LCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjU+
Ci1zdHJ1Y3QgVHlwZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBU
MTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIx
LCBUMjIsIFQyMywgVDI0LCBUMjUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGlu
dGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lPiB7Ci0g
IHR5cGVkZWYgaW50ZXJuYWw6OlR5cGVzMjU8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4
LCBUOSwgVDEwLCBUMTEsIFQxMiwKLSAgICAgIFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgs
IFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNT4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8
dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVu
YW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVu
YW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5
cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2
LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAs
Ci0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUg
VDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2Pgotc3RydWN0IFR5cGVzPFQxLCBU
MiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LCBU
MTUsCi0gICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1
LCBUMjYsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBp
bnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGlu
dGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZSwgaW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRlcm5hbDo6VHlwZXMyNjxUMSwg
VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLAotICAgICAgVDEz
LCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwg
VDI1LAotICAgICAgVDI2PiB0eXBlOwotfTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5h
bWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5h
bWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQx
MCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFt
ZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlw
ZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEs
IHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwK
LSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNz4KLXN0cnVjdCBUeXBlczxUMSwgVDIsIFQz
LCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAot
ICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2
LCBUMjcsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBp
bnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGlu
dGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZT4gewotICB0eXBlZGVmIGludGVybmFsOjpUeXBlczI3PFQxLCBUMiwgVDMsIFQ0LCBUNSwg
VDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsCi0gICAgICBUMTMsIFQxNCwgVDE1LCBUMTYs
IFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwKLSAgICAg
IFQyNz4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBl
bmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBl
bmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlw
ZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBl
bmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwg
dHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBU
MjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5h
bWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOD4KLXN0cnVjdCBUeXBlczxUMSwgVDIs
IFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1
LAotICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwg
VDI2LCBUMjcsIFQyOCwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBp
bnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmU+IHsK
LSAgdHlwZWRlZiBpbnRlcm5hbDo6VHlwZXMyODxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywg
VDgsIFQ5LCBUMTAsIFQxMSwgVDEyLAotICAgICAgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQx
OCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsCi0gICAgICBUMjcsIFQy
OD4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFt
ZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFt
ZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5h
bWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFt
ZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlw
ZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIs
IHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUg
VDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5Pgotc3RydWN0IFR5
cGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQx
MywgVDE0LCBUMTUsCi0gICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMs
IFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LCBUMjksCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0g
ICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmU+IHsK
LSAgdHlwZWRlZiBpbnRlcm5hbDo6VHlwZXMyOTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywg
VDgsIFQ5LCBUMTAsIFQxMSwgVDEyLAotICAgICAgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQx
OCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsCi0gICAgICBUMjcsIFQy
OCwgVDI5PiB0eXBlOwotfTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5
cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5
cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0
eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5
cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4
LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1l
IFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBl
bmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVu
YW1lIFQzMD4KLXN0cnVjdCBUeXBlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5
LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAotICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwg
VDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LCBUMzAsCi0g
ICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGlu
dGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmU+
IHsKLSAgdHlwZWRlZiBpbnRlcm5hbDo6VHlwZXMzMDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBU
NywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLAotICAgICAgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcs
IFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsCi0gICAgICBUMjcs
IFQyOCwgVDI5LCBUMzA+IHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFt
ZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFt
ZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEw
LAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1l
IFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBl
bmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwg
dHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAot
ICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQy
OSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMT4KLXN0cnVjdCBUeXBlczxUMSwgVDIs
IFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1
LAotICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwg
VDI2LCBUMjcsIFQyOCwgVDI5LCBUMzAsCi0gICAgVDMxLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6
Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAg
ICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lPiB7Ci0gIHR5cGVkZWYgaW50ZXJuYWw6OlR5cGVzMzE8VDEsIFQyLCBU
MywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwKLSAgICAgIFQxMywgVDE0
LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwg
VDI2LAotICAgICAgVDI3LCBUMjgsIFQyOSwgVDMwLCBUMzE+IHR5cGU7Ci19OwotdGVtcGxhdGUg
PHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBl
bmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBl
bmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0
eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQx
NiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIw
LAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1l
IFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBl
bmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwg
dHlwZW5hbWUgVDMyPgotc3RydWN0IFR5cGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBU
OCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LCBUMTUsCi0gICAgVDE2LCBUMTcsIFQxOCwg
VDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LCBUMjksIFQz
MCwKLSAgICBUMzEsIFQzMiwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lPiB7Ci0gIHR5cGVkZWYgaW50
ZXJuYWw6OlR5cGVzMzI8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBU
MTEsIFQxMiwKLSAgICAgIFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBU
MjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LAotICAgICAgVDI3LCBUMjgsIFQyOSwgVDMwLCBU
MzEsIFQzMj4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0
eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0
eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAg
dHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0
eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQx
OCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFt
ZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlw
ZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBl
bmFtZSBUMzAsCi0gICAgdHlwZW5hbWUgVDMxLCB0eXBlbmFtZSBUMzIsIHR5cGVuYW1lIFQzMz4K
LXN0cnVjdCBUeXBlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQx
MSwgVDEyLCBUMTMsIFQxNCwgVDE1LAotICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEs
IFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LCBUMzAsCi0gICAgVDMxLCBU
MzIsIFQzMywgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwK
LSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRl
cm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwg
aW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRlcm5hbDo6VHlwZXMzMzxUMSwgVDIsIFQz
LCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLAotICAgICAgVDEzLCBUMTQs
IFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBU
MjYsCi0gICAgICBUMjcsIFQyOCwgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzM+IHR5cGU7Ci19Owot
dGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1l
IFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1l
IFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5h
bWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5
cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlw
ZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMs
IHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUg
VDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVu
YW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQzND4KLXN0cnVj
dCBUeXBlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEy
LCBUMTMsIFQxNCwgVDE1LAotICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwg
VDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LCBUMzAsCi0gICAgVDMxLCBUMzIsIFQz
MywgVDM0LCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAot
ICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9u
ZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lPiB7
Ci0gIHR5cGVkZWYgaW50ZXJuYWw6OlR5cGVzMzQ8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcs
IFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwKLSAgICAgIFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBU
MTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LAotICAgICAgVDI3LCBU
MjgsIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQ+IHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5
cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFt
ZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFt
ZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBl
bmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwg
dHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAot
ICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQy
NCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFt
ZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlw
ZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1Pgotc3Ry
dWN0IFR5cGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBU
MTIsIFQxMywgVDE0LCBUMTUsCi0gICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIy
LCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LCBUMjksIFQzMCwKLSAgICBUMzEsIFQzMiwg
VDMzLCBUMzQsIFQzNSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGlu
dGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZT4gewotICB0eXBlZGVmIGlu
dGVybmFsOjpUeXBlczM1PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwg
VDExLCBUMTIsCi0gICAgICBUMTMsIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwg
VDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwKLSAgICAgIFQyNywgVDI4LCBUMjksIFQzMCwg
VDMxLCBUMzIsIFQzMywgVDM0LCBUMzU+IHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQx
LCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAg
ICB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlw
ZW5hbWUgVDEwLAotICAgIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMs
IHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUg
VDE3LCB0eXBlbmFtZSBUMTgsIHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVu
YW1lIFQyMSwgdHlwZW5hbWUgVDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5h
bWUgVDI1LAotICAgIHR5cGVuYW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5
cGVuYW1lIFQyOSwgdHlwZW5hbWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMy
LCB0eXBlbmFtZSBUMzMsIHR5cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1l
IFQzNj4KLXN0cnVjdCBUeXBlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBU
MTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAotICAgIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIw
LCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LCBUMzAsCi0gICAg
VDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lPiB7Ci0gIHR5cGVkZWYgaW50
ZXJuYWw6OlR5cGVzMzY8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBU
MTEsIFQxMiwKLSAgICAgIFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBU
MjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LAotICAgICAgVDI3LCBUMjgsIFQyOSwgVDMwLCBU
MzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2PiB0eXBlOwotfTsKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUs
Ci0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDks
IHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUg
VDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVu
YW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0
eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5
cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4
LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1l
IFQzMiwgdHlwZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBl
bmFtZSBUMzYsIHR5cGVuYW1lIFQzNz4KLXN0cnVjdCBUeXBlczxUMSwgVDIsIFQzLCBUNCwgVDUs
IFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAotICAgIFQxNiwg
VDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQy
OCwgVDI5LCBUMzAsCi0gICAgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBpbnRl
cm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFs
OjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5v
bmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZT4gewotICB0eXBl
ZGVmIGludGVybmFsOjpUeXBlczM3PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDks
IFQxMCwgVDExLCBUMTIsCi0gICAgICBUMTMsIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTks
IFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwKLSAgICAgIFQyNywgVDI4LCBUMjks
IFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3PiB0eXBlOwotfTsKLXRlbXBs
YXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwg
dHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwg
dHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQx
MiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFt
ZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1l
IFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBl
bmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywg
dHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBU
MzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQz
NSwKLSAgICB0eXBlbmFtZSBUMzYsIHR5cGVuYW1lIFQzNywgdHlwZW5hbWUgVDM4Pgotc3RydWN0
IFR5cGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIs
IFQxMywgVDE0LCBUMTUsCi0gICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBU
MjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LCBUMjksIFQzMCwKLSAgICBUMzEsIFQzMiwgVDMz
LCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25l
LAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGlu
dGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJu
YWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6
Tm9uZT4gewotICB0eXBlZGVmIGludGVybmFsOjpUeXBlczM4PFQxLCBUMiwgVDMsIFQ0LCBUNSwg
VDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsCi0gICAgICBUMTMsIFQxNCwgVDE1LCBUMTYs
IFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwKLSAgICAg
IFQyNywgVDI4LCBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBU
Mzg+IHR5cGU7Ci19OwotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h
bWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlwZW5h
bWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5cGVu
YW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5h
bWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgsIHR5
cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUgVDIy
LCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVuYW1l
IFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5hbWUg
VDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5cGVu
YW1lIFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3LCB0
eXBlbmFtZSBUMzgsIHR5cGVuYW1lIFQzOT4KLXN0cnVjdCBUeXBlczxUMSwgVDIsIFQzLCBUNCwg
VDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAotICAgIFQx
NiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcs
IFQyOCwgVDI5LCBUMzAsCi0gICAgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBU
MzgsIFQzOSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50
ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lPiB7Ci0gIHR5cGVkZWYgaW50ZXJuYWw6OlR5cGVz
Mzk8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwKLSAg
ICAgIFQxMywgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIz
LCBUMjQsIFQyNSwgVDI2LAotICAgICAgVDI3LCBUMjgsIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMz
LCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5PiB0eXBlOwotfTsKLXRlbXBsYXRlIDx0eXBl
bmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUg
VDUsCi0gICAgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUg
VDksIHR5cGVuYW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5h
bWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5
cGVuYW1lIFQxNywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAg
ICB0eXBlbmFtZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQs
IHR5cGVuYW1lIFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUg
VDI4LCB0eXBlbmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVu
YW1lIFQzMiwgdHlwZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0
eXBlbmFtZSBUMzYsIHR5cGVuYW1lIFQzNywgdHlwZW5hbWUgVDM4LCB0eXBlbmFtZSBUMzksIHR5
cGVuYW1lIFQ0MD4KLXN0cnVjdCBUeXBlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgs
IFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAotICAgIFQxNiwgVDE3LCBUMTgsIFQx
OSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LCBUMzAs
Ci0gICAgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLCBp
bnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9u
ZT4gewotICB0eXBlZGVmIGludGVybmFsOjpUeXBlczQwPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYs
IFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsCi0gICAgICBUMTMsIFQxNCwgVDE1LCBUMTYsIFQx
NywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwKLSAgICAgIFQy
NywgVDI4LCBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgs
IFQzOSwKLSAgICAgIFQ0MD4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVu
YW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVu
YW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBU
MTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5h
bWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5
cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIx
LCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUs
Ci0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUg
VDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5hbWUgVDMxLCB0eXBlbmFtZSBUMzIsIHR5cGVu
YW1lIFQzMywgdHlwZW5hbWUgVDM0LCB0eXBlbmFtZSBUMzUsCi0gICAgdHlwZW5hbWUgVDM2LCB0
eXBlbmFtZSBUMzcsIHR5cGVuYW1lIFQzOCwgdHlwZW5hbWUgVDM5LCB0eXBlbmFtZSBUNDAsCi0g
ICAgdHlwZW5hbWUgVDQxPgotc3RydWN0IFR5cGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3
LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LCBUMTUsCi0gICAgVDE2LCBUMTcsIFQx
OCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LCBUMjks
IFQzMCwKLSAgICBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBU
NDAsIFQ0MSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmUs
IGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlw
ZWRlZiBpbnRlcm5hbDo6VHlwZXM0MTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5
LCBUMTAsIFQxMSwgVDEyLAotICAgICAgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5
LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsCi0gICAgICBUMjcsIFQyOCwgVDI5
LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwK
LSAgICAgIFQ0MT4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQy
LCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2
LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0g
ICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0
LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1l
IFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBl
bmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAg
dHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0
eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5hbWUgVDMxLCB0eXBlbmFtZSBUMzIsIHR5cGVuYW1lIFQz
MywgdHlwZW5hbWUgVDM0LCB0eXBlbmFtZSBUMzUsCi0gICAgdHlwZW5hbWUgVDM2LCB0eXBlbmFt
ZSBUMzcsIHR5cGVuYW1lIFQzOCwgdHlwZW5hbWUgVDM5LCB0eXBlbmFtZSBUNDAsCi0gICAgdHlw
ZW5hbWUgVDQxLCB0eXBlbmFtZSBUNDI+Ci1zdHJ1Y3QgVHlwZXM8VDEsIFQyLCBUMywgVDQsIFQ1
LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICBUMTYs
IFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBU
MjgsIFQyOSwgVDMwLAotICAgIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4
LCBUMzksIFQ0MCwgVDQxLCBUNDIsIGludGVybmFsOjpOb25lLAotICAgIGludGVybmFsOjpOb25l
LCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLAotICAgIGlu
dGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRl
ZiBpbnRlcm5hbDo6VHlwZXM0MjxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBU
MTAsIFQxMSwgVDEyLAotICAgICAgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBU
MjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsCi0gICAgICBUMjcsIFQyOCwgVDI5LCBU
MzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwKLSAg
ICAgIFQ0MSwgVDQyPiB0eXBlOwotfTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUg
VDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUg
VDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwK
LSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBU
MTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5h
bWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5
cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAg
ICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjks
IHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUg
VDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBUMzYsIHR5cGVu
YW1lIFQzNywgdHlwZW5hbWUgVDM4LCB0eXBlbmFtZSBUMzksIHR5cGVuYW1lIFQ0MCwKLSAgICB0
eXBlbmFtZSBUNDEsIHR5cGVuYW1lIFQ0MiwgdHlwZW5hbWUgVDQzPgotc3RydWN0IFR5cGVzPFQx
LCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0
LCBUMTUsCi0gICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwg
VDI1LCBUMjYsIFQyNywgVDI4LCBUMjksIFQzMCwKLSAgICBUMzEsIFQzMiwgVDMzLCBUMzQsIFQz
NSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwgVDQyLCBUNDMsCi0gICAgaW50ZXJuYWw6
Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsCi0g
ICAgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZT4gewotICB0
eXBlZGVmIGludGVybmFsOjpUeXBlczQzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwg
VDksIFQxMCwgVDExLCBUMTIsCi0gICAgICBUMTMsIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBU
MTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwKLSAgICAgIFQyNywgVDI4LCBU
MjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQw
LAotICAgICAgVDQxLCBUNDIsIFQ0Mz4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVDEs
IHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LAotICAg
IHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBl
bmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywg
dHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBlbmFtZSBU
MTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAgdHlwZW5h
bWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0eXBlbmFt
ZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQyOCwgdHlw
ZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5hbWUgVDMxLCB0eXBlbmFtZSBUMzIs
IHR5cGVuYW1lIFQzMywgdHlwZW5hbWUgVDM0LCB0eXBlbmFtZSBUMzUsCi0gICAgdHlwZW5hbWUg
VDM2LCB0eXBlbmFtZSBUMzcsIHR5cGVuYW1lIFQzOCwgdHlwZW5hbWUgVDM5LCB0eXBlbmFtZSBU
NDAsCi0gICAgdHlwZW5hbWUgVDQxLCB0eXBlbmFtZSBUNDIsIHR5cGVuYW1lIFQ0MywgdHlwZW5h
bWUgVDQ0Pgotc3RydWN0IFR5cGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDks
IFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LCBUMTUsCi0gICAgVDE2LCBUMTcsIFQxOCwgVDE5LCBU
MjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LCBUMjksIFQzMCwKLSAg
ICBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwg
VDQyLCBUNDMsIFQ0NCwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVy
bmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwKLSAgICBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRlcm5hbDo6VHlwZXM0NDxUMSwgVDIsIFQzLCBUNCwgVDUs
IFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLAotICAgICAgVDEzLCBUMTQsIFQxNSwgVDE2
LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsCi0gICAg
ICBUMjcsIFQyOCwgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywg
VDM4LCBUMzksIFQ0MCwKLSAgICAgIFQ0MSwgVDQyLCBUNDMsIFQ0ND4gdHlwZTsKLX07Ci10ZW1w
bGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQs
IHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgs
IHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBU
MTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5h
bWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFt
ZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlw
ZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcs
IHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5hbWUg
VDMxLCB0eXBlbmFtZSBUMzIsIHR5cGVuYW1lIFQzMywgdHlwZW5hbWUgVDM0LCB0eXBlbmFtZSBU
MzUsCi0gICAgdHlwZW5hbWUgVDM2LCB0eXBlbmFtZSBUMzcsIHR5cGVuYW1lIFQzOCwgdHlwZW5h
bWUgVDM5LCB0eXBlbmFtZSBUNDAsCi0gICAgdHlwZW5hbWUgVDQxLCB0eXBlbmFtZSBUNDIsIHR5
cGVuYW1lIFQ0MywgdHlwZW5hbWUgVDQ0LCB0eXBlbmFtZSBUNDU+Ci1zdHJ1Y3QgVHlwZXM8VDEs
IFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQs
IFQxNSwKLSAgICBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBU
MjUsIFQyNiwgVDI3LCBUMjgsIFQyOSwgVDMwLAotICAgIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1
LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwgVDQxLCBUNDIsIFQ0MywgVDQ0LCBUNDUsCi0gICAg
aW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6
Ok5vbmUsCi0gICAgaW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRlcm5hbDo6VHlwZXM0
NTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLAotICAg
ICAgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMs
IFQyNCwgVDI1LCBUMjYsCi0gICAgICBUMjcsIFQyOCwgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMs
IFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwKLSAgICAgIFQ0MSwgVDQyLCBUNDMs
IFQ0NCwgVDQ1PiB0eXBlOwotfTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIs
IHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAgdHlwZW5hbWUgVDYs
IHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwKLSAg
ICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQs
IHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQxNywgdHlwZW5hbWUg
VDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFtZSBUMjEsIHR5cGVu
YW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1lIFQyNSwKLSAgICB0
eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBlbmFtZSBUMjksIHR5
cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwgdHlwZW5hbWUgVDMz
LCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBUMzYsIHR5cGVuYW1l
IFQzNywgdHlwZW5hbWUgVDM4LCB0eXBlbmFtZSBUMzksIHR5cGVuYW1lIFQ0MCwKLSAgICB0eXBl
bmFtZSBUNDEsIHR5cGVuYW1lIFQ0MiwgdHlwZW5hbWUgVDQzLCB0eXBlbmFtZSBUNDQsIHR5cGVu
YW1lIFQ0NSwKLSAgICB0eXBlbmFtZSBUNDY+Ci1zdHJ1Y3QgVHlwZXM8VDEsIFQyLCBUMywgVDQs
IFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICBU
MTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3
LCBUMjgsIFQyOSwgVDMwLAotICAgIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywg
VDM4LCBUMzksIFQ0MCwgVDQxLCBUNDIsIFQ0MywgVDQ0LCBUNDUsCi0gICAgVDQ2LCBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmUsIGludGVybmFsOjpOb25lLCBpbnRlcm5hbDo6Tm9uZT4g
ewotICB0eXBlZGVmIGludGVybmFsOjpUeXBlczQ2PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3
LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsCi0gICAgICBUMTMsIFQxNCwgVDE1LCBUMTYsIFQxNywg
VDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwKLSAgICAgIFQyNywg
VDI4LCBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQz
OSwgVDQwLAotICAgICAgVDQxLCBUNDIsIFQ0MywgVDQ0LCBUNDUsIFQ0Nj4gdHlwZTsKLX07Ci10
ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUg
VDQsIHR5cGVuYW1lIFQ1LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUg
VDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFt
ZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlw
ZW5hbWUgVDE2LCB0eXBlbmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBl
bmFtZSBUMjAsCi0gICAgdHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywg
dHlwZW5hbWUgVDI0LCB0eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBU
MjcsIHR5cGVuYW1lIFQyOCwgdHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5h
bWUgVDMxLCB0eXBlbmFtZSBUMzIsIHR5cGVuYW1lIFQzMywgdHlwZW5hbWUgVDM0LCB0eXBlbmFt
ZSBUMzUsCi0gICAgdHlwZW5hbWUgVDM2LCB0eXBlbmFtZSBUMzcsIHR5cGVuYW1lIFQzOCwgdHlw
ZW5hbWUgVDM5LCB0eXBlbmFtZSBUNDAsCi0gICAgdHlwZW5hbWUgVDQxLCB0eXBlbmFtZSBUNDIs
IHR5cGVuYW1lIFQ0MywgdHlwZW5hbWUgVDQ0LCB0eXBlbmFtZSBUNDUsCi0gICAgdHlwZW5hbWUg
VDQ2LCB0eXBlbmFtZSBUNDc+Ci1zdHJ1Y3QgVHlwZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwg
VDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICBUMTYsIFQxNywg
VDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsIFQy
OSwgVDMwLAotICAgIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzks
IFQ0MCwgVDQxLCBUNDIsIFQ0MywgVDQ0LCBUNDUsCi0gICAgVDQ2LCBUNDcsIGludGVybmFsOjpO
b25lLCBpbnRlcm5hbDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRlcm5h
bDo6VHlwZXM0NzxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwg
VDEyLAotICAgICAgVDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwg
VDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsCi0gICAgICBUMjcsIFQyOCwgVDI5LCBUMzAsIFQzMSwg
VDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwKLSAgICAgIFQ0MSwg
VDQyLCBUNDMsIFQ0NCwgVDQ1LCBUNDYsIFQ0Nz4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8dHlwZW5h
bWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1
LAotICAgIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5
LCB0eXBlbmFtZSBUMTAsCi0gICAgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1l
IFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTUsCi0gICAgdHlwZW5hbWUgVDE2LCB0eXBl
bmFtZSBUMTcsIHR5cGVuYW1lIFQxOCwgdHlwZW5hbWUgVDE5LCB0eXBlbmFtZSBUMjAsCi0gICAg
dHlwZW5hbWUgVDIxLCB0eXBlbmFtZSBUMjIsIHR5cGVuYW1lIFQyMywgdHlwZW5hbWUgVDI0LCB0
eXBlbmFtZSBUMjUsCi0gICAgdHlwZW5hbWUgVDI2LCB0eXBlbmFtZSBUMjcsIHR5cGVuYW1lIFQy
OCwgdHlwZW5hbWUgVDI5LCB0eXBlbmFtZSBUMzAsCi0gICAgdHlwZW5hbWUgVDMxLCB0eXBlbmFt
ZSBUMzIsIHR5cGVuYW1lIFQzMywgdHlwZW5hbWUgVDM0LCB0eXBlbmFtZSBUMzUsCi0gICAgdHlw
ZW5hbWUgVDM2LCB0eXBlbmFtZSBUMzcsIHR5cGVuYW1lIFQzOCwgdHlwZW5hbWUgVDM5LCB0eXBl
bmFtZSBUNDAsCi0gICAgdHlwZW5hbWUgVDQxLCB0eXBlbmFtZSBUNDIsIHR5cGVuYW1lIFQ0Mywg
dHlwZW5hbWUgVDQ0LCB0eXBlbmFtZSBUNDUsCi0gICAgdHlwZW5hbWUgVDQ2LCB0eXBlbmFtZSBU
NDcsIHR5cGVuYW1lIFQ0OD4KLXN0cnVjdCBUeXBlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBU
NywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwgVDE1LAotICAgIFQxNiwgVDE3LCBU
MTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5
LCBUMzAsCi0gICAgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwg
VDQwLCBUNDEsIFQ0MiwgVDQzLCBUNDQsIFQ0NSwKLSAgICBUNDYsIFQ0NywgVDQ4LCBpbnRlcm5h
bDo6Tm9uZSwgaW50ZXJuYWw6Ok5vbmU+IHsKLSAgdHlwZWRlZiBpbnRlcm5hbDo6VHlwZXM0ODxU
MSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLAotICAgICAg
VDEzLCBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQy
NCwgVDI1LCBUMjYsCi0gICAgICBUMjcsIFQyOCwgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQz
NCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwKLSAgICAgIFQ0MSwgVDQyLCBUNDMsIFQ0
NCwgVDQ1LCBUNDYsIFQ0NywgVDQ4PiB0eXBlOwotfTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUMSwg
dHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsCi0gICAg
dHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVu
YW1lIFQxMCwKLSAgICB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0
eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNSwKLSAgICB0eXBlbmFtZSBUMTYsIHR5cGVuYW1lIFQx
NywgdHlwZW5hbWUgVDE4LCB0eXBlbmFtZSBUMTksIHR5cGVuYW1lIFQyMCwKLSAgICB0eXBlbmFt
ZSBUMjEsIHR5cGVuYW1lIFQyMiwgdHlwZW5hbWUgVDIzLCB0eXBlbmFtZSBUMjQsIHR5cGVuYW1l
IFQyNSwKLSAgICB0eXBlbmFtZSBUMjYsIHR5cGVuYW1lIFQyNywgdHlwZW5hbWUgVDI4LCB0eXBl
bmFtZSBUMjksIHR5cGVuYW1lIFQzMCwKLSAgICB0eXBlbmFtZSBUMzEsIHR5cGVuYW1lIFQzMiwg
dHlwZW5hbWUgVDMzLCB0eXBlbmFtZSBUMzQsIHR5cGVuYW1lIFQzNSwKLSAgICB0eXBlbmFtZSBU
MzYsIHR5cGVuYW1lIFQzNywgdHlwZW5hbWUgVDM4LCB0eXBlbmFtZSBUMzksIHR5cGVuYW1lIFQ0
MCwKLSAgICB0eXBlbmFtZSBUNDEsIHR5cGVuYW1lIFQ0MiwgdHlwZW5hbWUgVDQzLCB0eXBlbmFt
ZSBUNDQsIHR5cGVuYW1lIFQ0NSwKLSAgICB0eXBlbmFtZSBUNDYsIHR5cGVuYW1lIFQ0NywgdHlw
ZW5hbWUgVDQ4LCB0eXBlbmFtZSBUNDk+Ci1zdHJ1Y3QgVHlwZXM8VDEsIFQyLCBUMywgVDQsIFQ1
LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsIFQxNSwKLSAgICBUMTYs
IFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBU
MjgsIFQyOSwgVDMwLAotICAgIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4
LCBUMzksIFQ0MCwgVDQxLCBUNDIsIFQ0MywgVDQ0LCBUNDUsCi0gICAgVDQ2LCBUNDcsIFQ0OCwg
VDQ5LCBpbnRlcm5hbDo6Tm9uZT4gewotICB0eXBlZGVmIGludGVybmFsOjpUeXBlczQ5PFQxLCBU
MiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsCi0gICAgICBUMTMs
IFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBU
MjUsIFQyNiwKLSAgICAgIFQyNywgVDI4LCBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBU
MzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLAotICAgICAgVDQxLCBUNDIsIFQ0MywgVDQ0LCBU
NDUsIFQ0NiwgVDQ3LCBUNDgsIFQ0OT4gdHlwZTsKLX07Ci0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7
Ci0KLSMgZGVmaW5lIEdURVNUX1RFTVBMQVRFXyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MK
LQotLy8gVGhlIHRlbXBsYXRlICJzZWxlY3RvciIgc3RydWN0IFRlbXBsYXRlU2VsPFRtcGw+IGlz
IHVzZWQgdG8KLS8vIHJlcHJlc2VudCBUbXBsLCB3aGljaCBtdXN0IGJlIGEgY2xhc3MgdGVtcGxh
dGUgd2l0aCBvbmUgdHlwZQotLy8gcGFyYW1ldGVyLCBhcyBhIHR5cGUuICBUZW1wbGF0ZVNlbDxU
bXBsPjo6QmluZDxUPjo6dHlwZSBpcyBkZWZpbmVkCi0vLyBhcyB0aGUgdHlwZSBUbXBsPFQ+LiAg
VGhpcyBhbGxvd3MgdXMgdG8gYWN0dWFsbHkgaW5zdGFudGlhdGUgdGhlCi0vLyB0ZW1wbGF0ZSAi
c2VsZWN0ZWQiIGJ5IFRlbXBsYXRlU2VsPFRtcGw+LgotLy8KLS8vIFRoaXMgdHJpY2sgaXMgbmVj
ZXNzYXJ5IGZvciBzaW11bGF0aW5nIHR5cGVkZWYgZm9yIGNsYXNzIHRlbXBsYXRlcywKLS8vIHdo
aWNoIEMrKyBkb2Vzbid0IHN1cHBvcnQgZGlyZWN0bHkuCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExB
VEVfIFRtcGw+Ci1zdHJ1Y3QgVGVtcGxhdGVTZWwgewotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LSAgc3RydWN0IEJpbmQgewotICAgIHR5cGVkZWYgVG1wbDxUPiB0eXBlOwotICB9OwotfTsKLQot
IyBkZWZpbmUgR1RFU1RfQklORF8oVG1wbFNlbCwgVCkgXAotICBUbXBsU2VsOjp0ZW1wbGF0ZSBC
aW5kPFQ+Ojp0eXBlCi0KLS8vIEEgdW5pcXVlIHN0cnVjdCB0ZW1wbGF0ZSB1c2VkIGFzIHRoZSBk
ZWZhdWx0IHZhbHVlIGZvciB0aGUKLS8vIGFyZ3VtZW50cyBvZiBjbGFzcyB0ZW1wbGF0ZSBUZW1w
bGF0ZXMuICBUaGlzIGFsbG93cyB1cyB0byBzaW11bGF0ZQotLy8gdmFyaWFkaWMgdGVtcGxhdGVz
IChlLmcuIFRlbXBsYXRlczxpbnQ+LCBUZW1wbGF0ZXM8aW50LCBkb3VibGU+LAotLy8gYW5kIGV0
YyksIHdoaWNoIEMrKyBkb2Vzbid0IHN1cHBvcnQgZGlyZWN0bHkuCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLXN0cnVjdCBOb25lVCB7fTsKLQotLy8gVGhlIGZvbGxvd2luZyBmYW1pbHkgb2Ygc3Ry
dWN0IGFuZCBzdHJ1Y3QgdGVtcGxhdGVzIGFyZSB1c2VkIHRvCi0vLyByZXByZXNlbnQgdGVtcGxh
dGUgbGlzdHMuICBJbiBwYXJ0aWN1bGFyLCBUZW1wbGF0ZXNOPFQxLCBUMiwgLi4uLAotLy8gVE4+
IHJlcHJlc2VudHMgYSBsaXN0IG9mIE4gdGVtcGxhdGVzIChUMSwgVDIsIC4uLiwgYW5kIFROKS4g
IEV4Y2VwdAotLy8gZm9yIFRlbXBsYXRlczAsIGV2ZXJ5IHN0cnVjdCBpbiB0aGUgZmFtaWx5IGhh
cyB0d28gbWVtYmVyIHR5cGVzOgotLy8gSGVhZCBmb3IgdGhlIHNlbGVjdG9yIG9mIHRoZSBmaXJz
dCB0ZW1wbGF0ZSBpbiB0aGUgbGlzdCwgYW5kIFRhaWwKLS8vIGZvciB0aGUgcmVzdCBvZiB0aGUg
bGlzdC4KLQotLy8gVGhlIGVtcHR5IHRlbXBsYXRlIGxpc3QuCi1zdHJ1Y3QgVGVtcGxhdGVzMCB7
fTsKLQotLy8gVGVtcGxhdGUgbGlzdHMgb2YgbGVuZ3RoIDEsIDIsIDMsIGFuZCBzbyBvbi4KLQot
dGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMT4KLXN0cnVjdCBUZW1wbGF0ZXMxIHsKLSAgdHlw
ZWRlZiBUZW1wbGF0ZVNlbDxUMT4gSGVhZDsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMwIFRhaWw7Ci19
OwotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyPgotc3Ry
dWN0IFRlbXBsYXRlczIgewotICB0eXBlZGVmIFRlbXBsYXRlU2VsPFQxPiBIZWFkOwotICB0eXBl
ZGVmIFRlbXBsYXRlczE8VDI+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVf
IFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMz4KLXN0cnVjdCBUZW1w
bGF0ZXMzIHsKLSAgdHlwZWRlZiBUZW1wbGF0ZVNlbDxUMT4gSGVhZDsKLSAgdHlwZWRlZiBUZW1w
bGF0ZXMyPFQyLCBUMz4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEs
IEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBM
QVRFXyBUND4KLXN0cnVjdCBUZW1wbGF0ZXM0IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZVNlbDxUMT4g
SGVhZDsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMzPFQyLCBUMywgVDQ+IFRhaWw7Ci19OwotCi10ZW1w
bGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBM
QVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNT4KLXN0
cnVjdCBUZW1wbGF0ZXM1IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZVNlbDxUMT4gSGVhZDsKLSAgdHlw
ZWRlZiBUZW1wbGF0ZXM0PFQyLCBUMywgVDQsIFQ1PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPEdU
RVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMs
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBM
QVRFXyBUNj4KLXN0cnVjdCBUZW1wbGF0ZXM2IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZVNlbDxUMT4g
SGVhZDsKLSAgdHlwZWRlZiBUZW1wbGF0ZXM1PFQyLCBUMywgVDQsIFQ1LCBUNj4gVGFpbDsKLX07
Ci0KLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RF
U1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVf
IFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3Pgotc3RydWN0
IFRlbXBsYXRlczcgewotICB0eXBlZGVmIFRlbXBsYXRlU2VsPFQxPiBIZWFkOwotICB0eXBlZGVm
IFRlbXBsYXRlczY8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNz4gVGFpbDsKLX07Ci0KLXRlbXBsYXRl
IDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVf
IFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9U
RU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDg+
Ci1zdHJ1Y3QgVGVtcGxhdGVzOCB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhlYWQ7Ci0g
IHR5cGVkZWYgVGVtcGxhdGVzNzxUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOD4gVGFpbDsKLX07
Ci0KLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RF
U1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVf
IFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9U
RU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOT4KLXN0cnVjdCBUZW1wbGF0ZXM5IHsKLSAg
dHlwZWRlZiBUZW1wbGF0ZVNlbDxUMT4gSGVhZDsKLSAgdHlwZWRlZiBUZW1wbGF0ZXM4PFQyLCBU
MywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOT4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDxHVEVTVF9U
RU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAg
IEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8g
VDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RF
TVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEwPgotc3RydWN0IFRlbXBsYXRlczEw
IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZVNlbDxUMT4gSGVhZDsKLSAgdHlwZWRlZiBUZW1wbGF0ZXM5
PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwPiBUYWlsOwotfTsKLQotdGVtcGxh
dGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFU
RV8gVDMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNU
X1RFTVBMQVRFXyBUNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBU
OCwgR1RFU1RfVEVNUExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RF
TVBMQVRFXyBUMTE+Ci1zdHJ1Y3QgVGVtcGxhdGVzMTEgewotICB0eXBlZGVmIFRlbXBsYXRlU2Vs
PFQxPiBIZWFkOwotICB0eXBlZGVmIFRlbXBsYXRlczEwPFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcs
IFQ4LCBUOSwgVDEwLCBUMTE+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVf
IFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9U
RU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAg
IEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8g
VDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1Rf
VEVNUExBVEVfIFQxMj4KLXN0cnVjdCBUZW1wbGF0ZXMxMiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVT
ZWw8VDE+IEhlYWQ7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMTE8VDIsIFQzLCBUNCwgVDUsIFQ2LCBU
NywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyPiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPEdURVNUX1RF
TVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBU
NiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVN
UExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEs
IEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMz4KLXN0cnVjdCBU
ZW1wbGF0ZXMxMyB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhlYWQ7Ci0gIHR5cGVkZWYg
VGVtcGxhdGVzMTI8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEy
LCBUMTM+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9U
RU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQs
IEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBM
QVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RF
U1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQx
MiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0Pgotc3RydWN0
IFRlbXBsYXRlczE0IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZVNlbDxUMT4gSGVhZDsKLSAgdHlwZWRl
ZiBUZW1wbGF0ZXMxMzxUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBU
MTIsIFQxMywKLSAgICAgIFQxND4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFU
RV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNU
X1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRF
XyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVT
VF9URU1QTEFURV8gVDEyLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRF
XyBUMTQsIEdURVNUX1RFTVBMQVRFXyBUMTU+Ci1zdHJ1Y3QgVGVtcGxhdGVzMTUgewotICB0eXBl
ZGVmIFRlbXBsYXRlU2VsPFQxPiBIZWFkOwotICB0eXBlZGVmIFRlbXBsYXRlczE0PFQyLCBUMywg
VDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgICBU
MTU+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1Q
TEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdU
RVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRF
XyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwK
LSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1Q
TEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTY+Ci1zdHJ1Y3QgVGVtcGxhdGVzMTYg
ewotICB0eXBlZGVmIFRlbXBsYXRlU2VsPFQxPiBIZWFkOwotICB0eXBlZGVmIFRlbXBsYXRlczE1
PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQs
Ci0gICAgICBUMTUsIFQxNj4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8g
VDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RF
TVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBU
OSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVTVF9U
RU1QTEFURV8gVDEyLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRFXyBU
MTQsIEdURVNUX1RFTVBMQVRFXyBUMTUsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxNiwgR1RFU1Rf
VEVNUExBVEVfIFQxNz4KLXN0cnVjdCBUZW1wbGF0ZXMxNyB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVT
ZWw8VDE+IEhlYWQ7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMTY8VDIsIFQzLCBUNCwgVDUsIFQ2LCBU
NywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAgICAgIFQxNSwgVDE2LCBUMTc+
IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFU
RV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNU
X1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBU
NywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVN
UExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAg
ICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFU
RV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdU
RVNUX1RFTVBMQVRFXyBUMTg+Ci1zdHJ1Y3QgVGVtcGxhdGVzMTggewotICB0eXBlZGVmIFRlbXBs
YXRlU2VsPFQxPiBIZWFkOwotICB0eXBlZGVmIFRlbXBsYXRlczE3PFQyLCBUMywgVDQsIFQ1LCBU
NiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgICBUMTUsIFQxNiwg
VDE3LCBUMTg+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVT
VF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8g
VDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVf
IFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVT
VF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRF
XyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxOT4KLXN0
cnVjdCBUZW1wbGF0ZXMxOSB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhlYWQ7Ci0gIHR5
cGVkZWYgVGVtcGxhdGVzMTg8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQx
MSwgVDEyLCBUMTMsIFQxNCwKLSAgICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5PiBUYWlsOwot
fTsKLQotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBH
VEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFU
RV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNU
X1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBU
MTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQxNSwK
LSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBHVEVTVF9URU1QTEFURV8gVDE3LCBHVEVTVF9URU1Q
TEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTksIEdURVNUX1RFTVBMQVRFXyBUMjA+
Ci1zdHJ1Y3QgVGVtcGxhdGVzMjAgewotICB0eXBlZGVmIFRlbXBsYXRlU2VsPFQxPiBIZWFkOwot
ICB0eXBlZGVmIFRlbXBsYXRlczE5PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEw
LCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgICBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIw
PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExB
VEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVT
VF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVTVF9URU1QTEFURV8g
VDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBMQVRFXyBUMTIsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVfIFQxNCwgR1RFU1RfVEVNUExB
VEVfIFQxNSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBHVEVTVF9URU1QTEFURV8gVDE3LCBH
VEVTVF9URU1QTEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTksIEdURVNUX1RFTVBM
QVRFXyBUMjAsIEdURVNUX1RFTVBMQVRFXyBUMjE+Ci1zdHJ1Y3QgVGVtcGxhdGVzMjEgewotICB0
eXBlZGVmIFRlbXBsYXRlU2VsPFQxPiBIZWFkOwotICB0eXBlZGVmIFRlbXBsYXRlczIwPFQyLCBU
MywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAg
ICBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjE+IFRhaWw7Ci19OwotCi10ZW1wbGF0
ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRF
XyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1Rf
VEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4
LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVN
UExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEz
LCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQxOSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExB
VEVfIFQyMSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDIyPgotc3RydWN0IFRlbXBsYXRlczIyIHsK
LSAgdHlwZWRlZiBUZW1wbGF0ZVNlbDxUMT4gSGVhZDsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMyMTxU
MiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAot
ICAgICAgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjI+IFRhaWw7Ci19Owot
Ci10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNU
X1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBU
NSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVN
UExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwg
R1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRF
XyBUMTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxOSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RF
U1RfVEVNUExBVEVfIFQyMSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDIyLCBHVEVTVF9URU1QTEFU
RV8gVDIzPgotc3RydWN0IFRlbXBsYXRlczIzIHsKLSAgdHlwZWRlZiBUZW1wbGF0ZVNlbDxUMT4g
SGVhZDsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMyMjxUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwg
VDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAotICAgICAgVDE1LCBUMTYsIFQxNywgVDE4LCBU
MTksIFQyMCwgVDIxLCBUMjIsIFQyMz4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDxHVEVTVF9URU1Q
TEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdU
RVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYs
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBM
QVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBH
VEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBM
QVRFXyBUMTQsIEdURVNUX1RFTVBMQVRFXyBUMTUsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxNiwg
R1RFU1RfVEVNUExBVEVfIFQxNywgR1RFU1RfVEVNUExBVEVfIFQxOCwKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDE5LCBHVEVTVF9URU1QTEFURV8gVDIwLCBHVEVTVF9URU1QTEFURV8gVDIxLAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMjIsIEdURVNUX1RFTVBMQVRFXyBUMjMsIEdURVNUX1RFTVBMQVRF
XyBUMjQ+Ci1zdHJ1Y3QgVGVtcGxhdGVzMjQgewotICB0eXBlZGVmIFRlbXBsYXRlU2VsPFQxPiBI
ZWFkOwotICB0eXBlZGVmIFRlbXBsYXRlczIzPFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBU
OSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgICBUMTUsIFQxNiwgVDE3LCBUMTgsIFQx
OSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQ+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RFU1Rf
VEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAg
ICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVf
IFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9U
RU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQx
MSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9U
RU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBU
MTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQxOSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwK
LSAgICBHVEVTVF9URU1QTEFURV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIzLCBHVEVTVF9URU1Q
TEFURV8gVDI0LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjU+Ci1zdHJ1Y3QgVGVtcGxhdGVzMjUg
ewotICB0eXBlZGVmIFRlbXBsYXRlU2VsPFQxPiBIZWFkOwotICB0eXBlZGVmIFRlbXBsYXRlczI0
PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQs
Ci0gICAgICBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQs
IFQyNT4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RF
TVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwg
R1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBHVEVT
VF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVTVF9URU1QTEFURV8gVDEy
LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRFXyBUMTQsIEdURVNUX1RF
TVBMQVRFXyBUMTUsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxNiwgR1RFU1RfVEVNUExBVEVfIFQx
NywgR1RFU1RfVEVNUExBVEVfIFQxOCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE5LCBHVEVTVF9U
RU1QTEFURV8gVDIwLCBHVEVTVF9URU1QTEFURV8gVDIxLAotICAgIEdURVNUX1RFTVBMQVRFXyBU
MjIsIEdURVNUX1RFTVBMQVRFXyBUMjMsIEdURVNUX1RFTVBMQVRFXyBUMjQsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQyNSwgR1RFU1RfVEVNUExBVEVfIFQyNj4KLXN0cnVjdCBUZW1wbGF0ZXMyNiB7
Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhlYWQ7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMjU8
VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwK
LSAgICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwg
VDI1LCBUMjY+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVT
VF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8g
VDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVf
IFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVT
VF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRF
XyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxOSwgR1RF
U1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIzLCBHVEVTVF9URU1QTEFURV8gVDI0LAotICAgIEdU
RVNUX1RFTVBMQVRFXyBUMjUsIEdURVNUX1RFTVBMQVRFXyBUMjYsIEdURVNUX1RFTVBMQVRFXyBU
Mjc+Ci1zdHJ1Y3QgVGVtcGxhdGVzMjcgewotICB0eXBlZGVmIFRlbXBsYXRlU2VsPFQxPiBIZWFk
OwotICB0eXBlZGVmIFRlbXBsYXRlczI2PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwg
VDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgICBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwg
VDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjc+IFRhaWw7Ci19OwotCi10ZW1w
bGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBM
QVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RF
U1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVf
IFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1Rf
VEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8g
VDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNU
X1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgs
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQxOSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVN
UExBVEVfIFQyMSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIz
LCBHVEVTVF9URU1QTEFURV8gVDI0LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjUsIEdURVNUX1RF
TVBMQVRFXyBUMjYsIEdURVNUX1RFTVBMQVRFXyBUMjcsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQy
OD4KLXN0cnVjdCBUZW1wbGF0ZXMyOCB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhlYWQ7
Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMjc8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBU
MTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAgICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBU
MjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywKLSAgICAgIFQyOD4gVGFpbDsK
LX07Ci0KLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwg
R1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExB
VEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVT
VF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8g
VDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdURVNU
X1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRFXyBUMTUs
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQxNiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RFU1RfVEVN
UExBVEVfIFQxOCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE5LCBHVEVTVF9URU1QTEFURV8gVDIw
LCBHVEVTVF9URU1QTEFURV8gVDIxLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjIsIEdURVNUX1RF
TVBMQVRFXyBUMjMsIEdURVNUX1RFTVBMQVRFXyBUMjQsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQy
NSwgR1RFU1RfVEVNUExBVEVfIFQyNiwgR1RFU1RfVEVNUExBVEVfIFQyNywKLSAgICBHVEVTVF9U
RU1QTEFURV8gVDI4LCBHVEVTVF9URU1QTEFURV8gVDI5Pgotc3RydWN0IFRlbXBsYXRlczI5IHsK
LSAgdHlwZWRlZiBUZW1wbGF0ZVNlbDxUMT4gSGVhZDsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMyODxU
MiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAot
ICAgICAgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBU
MjUsIFQyNiwgVDI3LCBUMjgsCi0gICAgICBUMjk+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RF
U1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywK
LSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExB
VEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVT
VF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVf
IFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVT
VF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRF
XyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RF
U1RfVEVNUExBVEVfIFQxOSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExBVEVfIFQy
MSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIzLCBHVEVTVF9U
RU1QTEFURV8gVDI0LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjUsIEdURVNUX1RFTVBMQVRFXyBU
MjYsIEdURVNUX1RFTVBMQVRFXyBUMjcsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyOCwgR1RFU1Rf
VEVNUExBVEVfIFQyOSwgR1RFU1RfVEVNUExBVEVfIFQzMD4KLXN0cnVjdCBUZW1wbGF0ZXMzMCB7
Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhlYWQ7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMjk8
VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwK
LSAgICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwg
VDI1LCBUMjYsIFQyNywgVDI4LAotICAgICAgVDI5LCBUMzA+IFRhaWw7Ci19OwotCi10ZW1wbGF0
ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRF
XyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1Rf
VEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4
LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVN
UExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEz
LCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQxOSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExB
VEVfIFQyMSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIzLCBH
VEVTVF9URU1QTEFURV8gVDI0LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjUsIEdURVNUX1RFTVBM
QVRFXyBUMjYsIEdURVNUX1RFTVBMQVRFXyBUMjcsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyOCwg
R1RFU1RfVEVNUExBVEVfIFQyOSwgR1RFU1RfVEVNUExBVEVfIFQzMCwKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDMxPgotc3RydWN0IFRlbXBsYXRlczMxIHsKLSAgdHlwZWRlZiBUZW1wbGF0ZVNlbDxU
MT4gSGVhZDsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMzMDxUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBU
OCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAotICAgICAgVDE1LCBUMTYsIFQxNywgVDE4
LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsCi0gICAg
ICBUMjksIFQzMCwgVDMxPiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBU
MSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVN
UExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBH
VEVTVF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5
LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RF
TVBMQVRFXyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVfIFQx
NCwgR1RFU1RfVEVNUExBVEVfIFQxNSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBHVEVTVF9U
RU1QTEFURV8gVDE3LCBHVEVTVF9URU1QTEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBMQVRFXyBU
MTksIEdURVNUX1RFTVBMQVRFXyBUMjAsIEdURVNUX1RFTVBMQVRFXyBUMjEsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQyMiwgR1RFU1RfVEVNUExBVEVfIFQyMywgR1RFU1RfVEVNUExBVEVfIFQyNCwK
LSAgICBHVEVTVF9URU1QTEFURV8gVDI1LCBHVEVTVF9URU1QTEFURV8gVDI2LCBHVEVTVF9URU1Q
TEFURV8gVDI3LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjgsIEdURVNUX1RFTVBMQVRFXyBUMjks
IEdURVNUX1RFTVBMQVRFXyBUMzAsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzMSwgR1RFU1RfVEVN
UExBVEVfIFQzMj4KLXN0cnVjdCBUZW1wbGF0ZXMzMiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8
VDE+IEhlYWQ7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMzE8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywg
VDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAgICAgIFQxNSwgVDE2LCBUMTcsIFQx
OCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAg
ICAgVDI5LCBUMzAsIFQzMSwgVDMyPiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPEdURVNUX1RFTVBM
QVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RF
U1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwK
LSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExB
VEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdU
RVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExB
VEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQxNSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBH
VEVTVF9URU1QTEFURV8gVDE3LCBHVEVTVF9URU1QTEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBM
QVRFXyBUMTksIEdURVNUX1RFTVBMQVRFXyBUMjAsIEdURVNUX1RFTVBMQVRFXyBUMjEsCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQyMiwgR1RFU1RfVEVNUExBVEVfIFQyMywgR1RFU1RfVEVNUExBVEVf
IFQyNCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDI1LCBHVEVTVF9URU1QTEFURV8gVDI2LCBHVEVT
VF9URU1QTEFURV8gVDI3LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjgsIEdURVNUX1RFTVBMQVRF
XyBUMjksIEdURVNUX1RFTVBMQVRFXyBUMzAsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzMSwgR1RF
U1RfVEVNUExBVEVfIFQzMiwgR1RFU1RfVEVNUExBVEVfIFQzMz4KLXN0cnVjdCBUZW1wbGF0ZXMz
MyB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhlYWQ7Ci0gIHR5cGVkZWYgVGVtcGxhdGVz
MzI8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQx
NCwKLSAgICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQy
NCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAgICAgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzM+IFRh
aWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8g
VDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RF
TVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywg
R1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBH
VEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8g
VDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNU
X1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxOSwgR1RFU1RfVEVNUExBVEVf
IFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDIyLCBHVEVT
VF9URU1QTEFURV8gVDIzLCBHVEVTVF9URU1QTEFURV8gVDI0LAotICAgIEdURVNUX1RFTVBMQVRF
XyBUMjUsIEdURVNUX1RFTVBMQVRFXyBUMjYsIEdURVNUX1RFTVBMQVRFXyBUMjcsCi0gICAgR1RF
U1RfVEVNUExBVEVfIFQyOCwgR1RFU1RfVEVNUExBVEVfIFQyOSwgR1RFU1RfVEVNUExBVEVfIFQz
MCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDMxLCBHVEVTVF9URU1QTEFURV8gVDMyLCBHVEVTVF9U
RU1QTEFURV8gVDMzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzQ+Ci1zdHJ1Y3QgVGVtcGxhdGVz
MzQgewotICB0eXBlZGVmIFRlbXBsYXRlU2VsPFQxPiBIZWFkOwotICB0eXBlZGVmIFRlbXBsYXRl
czMzPFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBU
MTQsCi0gICAgICBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBU
MjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwKLSAgICAgIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBU
MzQ+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1Q
TEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdU
RVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRF
XyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwK
LSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1Q
TEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcs
IEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxOSwgR1RFU1RfVEVN
UExBVEVfIFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDIy
LCBHVEVTVF9URU1QTEFURV8gVDIzLCBHVEVTVF9URU1QTEFURV8gVDI0LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUMjUsIEdURVNUX1RFTVBMQVRFXyBUMjYsIEdURVNUX1RFTVBMQVRFXyBUMjcsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQyOCwgR1RFU1RfVEVNUExBVEVfIFQyOSwgR1RFU1RfVEVNUExB
VEVfIFQzMCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDMxLCBHVEVTVF9URU1QTEFURV8gVDMyLCBH
VEVTVF9URU1QTEFURV8gVDMzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzQsIEdURVNUX1RFTVBM
QVRFXyBUMzU+Ci1zdHJ1Y3QgVGVtcGxhdGVzMzUgewotICB0eXBlZGVmIFRlbXBsYXRlU2VsPFQx
PiBIZWFkOwotICB0eXBlZGVmIFRlbXBsYXRlczM0PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4
LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgICBUMTUsIFQxNiwgVDE3LCBUMTgs
IFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwKLSAgICAg
IFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNT4gVGFpbDsKLX07Ci0KLXRlbXBsYXRl
IDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVf
IFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9U
RU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgs
IEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1Q
TEFURV8gVDExLCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMs
IEdURVNUX1RFTVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRFXyBUMTUsCi0gICAgR1RFU1RfVEVN
UExBVEVfIFQxNiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RFU1RfVEVNUExBVEVfIFQxOCwKLSAg
ICBHVEVTVF9URU1QTEFURV8gVDE5LCBHVEVTVF9URU1QTEFURV8gVDIwLCBHVEVTVF9URU1QTEFU
RV8gVDIxLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjIsIEdURVNUX1RFTVBMQVRFXyBUMjMsIEdU
RVNUX1RFTVBMQVRFXyBUMjQsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyNSwgR1RFU1RfVEVNUExB
VEVfIFQyNiwgR1RFU1RfVEVNUExBVEVfIFQyNywKLSAgICBHVEVTVF9URU1QTEFURV8gVDI4LCBH
VEVTVF9URU1QTEFURV8gVDI5LCBHVEVTVF9URU1QTEFURV8gVDMwLAotICAgIEdURVNUX1RFTVBM
QVRFXyBUMzEsIEdURVNUX1RFTVBMQVRFXyBUMzIsIEdURVNUX1RFTVBMQVRFXyBUMzMsCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQzNCwgR1RFU1RfVEVNUExBVEVfIFQzNSwgR1RFU1RfVEVNUExBVEVf
IFQzNj4KLXN0cnVjdCBUZW1wbGF0ZXMzNiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhl
YWQ7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMzU8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5
LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAgICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5
LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAgICAgVDI5
LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzY+IFRhaWw7Ci19OwotCi10ZW1wbGF0
ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRF
XyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1Rf
VEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4
LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVN
UExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEz
LCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQxOSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExB
VEVfIFQyMSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIzLCBH
VEVTVF9URU1QTEFURV8gVDI0LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjUsIEdURVNUX1RFTVBM
QVRFXyBUMjYsIEdURVNUX1RFTVBMQVRFXyBUMjcsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyOCwg
R1RFU1RfVEVNUExBVEVfIFQyOSwgR1RFU1RfVEVNUExBVEVfIFQzMCwKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDMxLCBHVEVTVF9URU1QTEFURV8gVDMyLCBHVEVTVF9URU1QTEFURV8gVDMzLAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMzQsIEdURVNUX1RFTVBMQVRFXyBUMzUsIEdURVNUX1RFTVBMQVRF
XyBUMzYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzNz4KLXN0cnVjdCBUZW1wbGF0ZXMzNyB7Ci0g
IHR5cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhlYWQ7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMzY8VDIs
IFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAg
ICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1
LCBUMjYsIFQyNywgVDI4LAotICAgICAgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1
LCBUMzYsIFQzNz4gVGFpbDsKLX07Ci0KLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdU
RVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRF
XyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAg
ICBHVEVTVF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVTVF9URU1QTEFU
RV8gVDEyLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRFXyBUMTQsIEdU
RVNUX1RFTVBMQVRFXyBUMTUsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxNiwgR1RFU1RfVEVNUExB
VEVfIFQxNywgR1RFU1RfVEVNUExBVEVfIFQxOCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE5LCBH
VEVTVF9URU1QTEFURV8gVDIwLCBHVEVTVF9URU1QTEFURV8gVDIxLAotICAgIEdURVNUX1RFTVBM
QVRFXyBUMjIsIEdURVNUX1RFTVBMQVRFXyBUMjMsIEdURVNUX1RFTVBMQVRFXyBUMjQsCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQyNSwgR1RFU1RfVEVNUExBVEVfIFQyNiwgR1RFU1RfVEVNUExBVEVf
IFQyNywKLSAgICBHVEVTVF9URU1QTEFURV8gVDI4LCBHVEVTVF9URU1QTEFURV8gVDI5LCBHVEVT
VF9URU1QTEFURV8gVDMwLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzEsIEdURVNUX1RFTVBMQVRF
XyBUMzIsIEdURVNUX1RFTVBMQVRFXyBUMzMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzNCwgR1RF
U1RfVEVNUExBVEVfIFQzNSwgR1RFU1RfVEVNUExBVEVfIFQzNiwKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDM3LCBHVEVTVF9URU1QTEFURV8gVDM4Pgotc3RydWN0IFRlbXBsYXRlczM4IHsKLSAgdHlw
ZWRlZiBUZW1wbGF0ZVNlbDxUMT4gSGVhZDsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMzNzxUMiwgVDMs
IFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAotICAgICAg
VDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQy
NiwgVDI3LCBUMjgsCi0gICAgICBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQz
NiwgVDM3LCBUMzg+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBH
VEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNU
X1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExB
VEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBH
VEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBM
QVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxOSwg
R1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIzLCBHVEVTVF9URU1QTEFURV8gVDI0LAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMjUsIEdURVNUX1RFTVBMQVRFXyBUMjYsIEdURVNUX1RFTVBMQVRF
XyBUMjcsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyOCwgR1RFU1RfVEVNUExBVEVfIFQyOSwgR1RF
U1RfVEVNUExBVEVfIFQzMCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDMxLCBHVEVTVF9URU1QTEFU
RV8gVDMyLCBHVEVTVF9URU1QTEFURV8gVDMzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzQsIEdU
RVNUX1RFTVBMQVRFXyBUMzUsIEdURVNUX1RFTVBMQVRFXyBUMzYsCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQzNywgR1RFU1RfVEVNUExBVEVfIFQzOCwgR1RFU1RfVEVNUExBVEVfIFQzOT4KLXN0cnVj
dCBUZW1wbGF0ZXMzOSB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhlYWQ7Ci0gIHR5cGVk
ZWYgVGVtcGxhdGVzMzg8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwg
VDEyLCBUMTMsIFQxNCwKLSAgICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwg
VDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAgICAgVDI5LCBUMzAsIFQzMSwg
VDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzk+IFRhaWw7Ci19OwotCi10ZW1w
bGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBM
QVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RF
U1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVf
IFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1Rf
VEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8g
VDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNU
X1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgs
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQxOSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVN
UExBVEVfIFQyMSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIz
LCBHVEVTVF9URU1QTEFURV8gVDI0LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjUsIEdURVNUX1RF
TVBMQVRFXyBUMjYsIEdURVNUX1RFTVBMQVRFXyBUMjcsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQy
OCwgR1RFU1RfVEVNUExBVEVfIFQyOSwgR1RFU1RfVEVNUExBVEVfIFQzMCwKLSAgICBHVEVTVF9U
RU1QTEFURV8gVDMxLCBHVEVTVF9URU1QTEFURV8gVDMyLCBHVEVTVF9URU1QTEFURV8gVDMzLAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUMzQsIEdURVNUX1RFTVBMQVRFXyBUMzUsIEdURVNUX1RFTVBM
QVRFXyBUMzYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzNywgR1RFU1RfVEVNUExBVEVfIFQzOCwg
R1RFU1RfVEVNUExBVEVfIFQzOSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDQwPgotc3RydWN0IFRl
bXBsYXRlczQwIHsKLSAgdHlwZWRlZiBUZW1wbGF0ZVNlbDxUMT4gSGVhZDsKLSAgdHlwZWRlZiBU
ZW1wbGF0ZXMzOTxUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIs
IFQxMywgVDE0LAotICAgICAgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIs
IFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsCi0gICAgICBUMjksIFQzMCwgVDMxLCBUMzIs
IFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwPiBUYWlsOwotfTsKLQotdGVt
cGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1Q
TEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdU
RVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRF
XyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNU
X1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVf
IFQxMywgR1RFU1RfVEVNUExBVEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQxNSwKLSAgICBHVEVT
VF9URU1QTEFURV8gVDE2LCBHVEVTVF9URU1QTEFURV8gVDE3LCBHVEVTVF9URU1QTEFURV8gVDE4
LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTksIEdURVNUX1RFTVBMQVRFXyBUMjAsIEdURVNUX1RF
TVBMQVRFXyBUMjEsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyMiwgR1RFU1RfVEVNUExBVEVfIFQy
MywgR1RFU1RfVEVNUExBVEVfIFQyNCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDI1LCBHVEVTVF9U
RU1QTEFURV8gVDI2LCBHVEVTVF9URU1QTEFURV8gVDI3LAotICAgIEdURVNUX1RFTVBMQVRFXyBU
MjgsIEdURVNUX1RFTVBMQVRFXyBUMjksIEdURVNUX1RFTVBMQVRFXyBUMzAsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQzMSwgR1RFU1RfVEVNUExBVEVfIFQzMiwgR1RFU1RfVEVNUExBVEVfIFQzMywK
LSAgICBHVEVTVF9URU1QTEFURV8gVDM0LCBHVEVTVF9URU1QTEFURV8gVDM1LCBHVEVTVF9URU1Q
TEFURV8gVDM2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzcsIEdURVNUX1RFTVBMQVRFXyBUMzgs
IEdURVNUX1RFTVBMQVRFXyBUMzksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0MCwgR1RFU1RfVEVN
UExBVEVfIFQ0MT4KLXN0cnVjdCBUZW1wbGF0ZXM0MSB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8
VDE+IEhlYWQ7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzNDA8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywg
VDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAgICAgIFQxNSwgVDE2LCBUMTcsIFQx
OCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAg
ICAgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzks
IFQ0MCwgVDQxPiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RF
U1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExBVEVf
IFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVTVF9U
RU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBMQVRF
XyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVfIFQxNCwgR1RF
U1RfVEVNUExBVEVfIFQxNSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBHVEVTVF9URU1QTEFU
RV8gVDE3LCBHVEVTVF9URU1QTEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTksIEdU
RVNUX1RFTVBMQVRFXyBUMjAsIEdURVNUX1RFTVBMQVRFXyBUMjEsCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQyMiwgR1RFU1RfVEVNUExBVEVfIFQyMywgR1RFU1RfVEVNUExBVEVfIFQyNCwKLSAgICBH
VEVTVF9URU1QTEFURV8gVDI1LCBHVEVTVF9URU1QTEFURV8gVDI2LCBHVEVTVF9URU1QTEFURV8g
VDI3LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjgsIEdURVNUX1RFTVBMQVRFXyBUMjksIEdURVNU
X1RFTVBMQVRFXyBUMzAsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzMSwgR1RFU1RfVEVNUExBVEVf
IFQzMiwgR1RFU1RfVEVNUExBVEVfIFQzMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDM0LCBHVEVT
VF9URU1QTEFURV8gVDM1LCBHVEVTVF9URU1QTEFURV8gVDM2LAotICAgIEdURVNUX1RFTVBMQVRF
XyBUMzcsIEdURVNUX1RFTVBMQVRFXyBUMzgsIEdURVNUX1RFTVBMQVRFXyBUMzksCi0gICAgR1RF
U1RfVEVNUExBVEVfIFQ0MCwgR1RFU1RfVEVNUExBVEVfIFQ0MSwgR1RFU1RfVEVNUExBVEVfIFQ0
Mj4KLXN0cnVjdCBUZW1wbGF0ZXM0MiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhlYWQ7
Ci0gIHR5cGVkZWYgVGVtcGxhdGVzNDE8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBU
MTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAgICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBU
MjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAgICAgVDI5LCBU
MzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwgVDQx
LAotICAgICAgVDQyPiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwg
R1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVT
VF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBM
QVRFXyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVfIFQxNCwg
R1RFU1RfVEVNUExBVEVfIFQxNSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBHVEVTVF9URU1Q
TEFURV8gVDE3LCBHVEVTVF9URU1QTEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTks
IEdURVNUX1RFTVBMQVRFXyBUMjAsIEdURVNUX1RFTVBMQVRFXyBUMjEsCi0gICAgR1RFU1RfVEVN
UExBVEVfIFQyMiwgR1RFU1RfVEVNUExBVEVfIFQyMywgR1RFU1RfVEVNUExBVEVfIFQyNCwKLSAg
ICBHVEVTVF9URU1QTEFURV8gVDI1LCBHVEVTVF9URU1QTEFURV8gVDI2LCBHVEVTVF9URU1QTEFU
RV8gVDI3LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjgsIEdURVNUX1RFTVBMQVRFXyBUMjksIEdU
RVNUX1RFTVBMQVRFXyBUMzAsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzMSwgR1RFU1RfVEVNUExB
VEVfIFQzMiwgR1RFU1RfVEVNUExBVEVfIFQzMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDM0LCBH
VEVTVF9URU1QTEFURV8gVDM1LCBHVEVTVF9URU1QTEFURV8gVDM2LAotICAgIEdURVNUX1RFTVBM
QVRFXyBUMzcsIEdURVNUX1RFTVBMQVRFXyBUMzgsIEdURVNUX1RFTVBMQVRFXyBUMzksCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQ0MCwgR1RFU1RfVEVNUExBVEVfIFQ0MSwgR1RFU1RfVEVNUExBVEVf
IFQ0MiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDQzPgotc3RydWN0IFRlbXBsYXRlczQzIHsKLSAg
dHlwZWRlZiBUZW1wbGF0ZVNlbDxUMT4gSGVhZDsKLSAgdHlwZWRlZiBUZW1wbGF0ZXM0MjxUMiwg
VDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAotICAg
ICAgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUs
IFQyNiwgVDI3LCBUMjgsCi0gICAgICBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUs
IFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLCBUNDEsIFQ0MiwKLSAgICAgIFQ0Mz4gVGFpbDsKLX07
Ci0KLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RF
U1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVf
IFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9U
RU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEw
LCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdURVNUX1RF
TVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRFXyBUMTUsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQxNiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RFU1RfVEVNUExB
VEVfIFQxOCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE5LCBHVEVTVF9URU1QTEFURV8gVDIwLCBH
VEVTVF9URU1QTEFURV8gVDIxLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjIsIEdURVNUX1RFTVBM
QVRFXyBUMjMsIEdURVNUX1RFTVBMQVRFXyBUMjQsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyNSwg
R1RFU1RfVEVNUExBVEVfIFQyNiwgR1RFU1RfVEVNUExBVEVfIFQyNywKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDI4LCBHVEVTVF9URU1QTEFURV8gVDI5LCBHVEVTVF9URU1QTEFURV8gVDMwLAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMzEsIEdURVNUX1RFTVBMQVRFXyBUMzIsIEdURVNUX1RFTVBMQVRF
XyBUMzMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzNCwgR1RFU1RfVEVNUExBVEVfIFQzNSwgR1RF
U1RfVEVNUExBVEVfIFQzNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDM3LCBHVEVTVF9URU1QTEFU
RV8gVDM4LCBHVEVTVF9URU1QTEFURV8gVDM5LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDAsIEdU
RVNUX1RFTVBMQVRFXyBUNDEsIEdURVNUX1RFTVBMQVRFXyBUNDIsCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQ0MywgR1RFU1RfVEVNUExBVEVfIFQ0ND4KLXN0cnVjdCBUZW1wbGF0ZXM0NCB7Ci0gIHR5
cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhlYWQ7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzNDM8VDIsIFQz
LCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAgICAg
IFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBU
MjYsIFQyNywgVDI4LAotICAgICAgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBU
MzYsIFQzNywgVDM4LCBUMzksIFQ0MCwgVDQxLCBUNDIsCi0gICAgICBUNDMsIFQ0ND4gVGFpbDsK
LX07Ci0KLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwg
R1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExB
VEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVT
VF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8g
VDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdURVNU
X1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRFXyBUMTUs
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQxNiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RFU1RfVEVN
UExBVEVfIFQxOCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE5LCBHVEVTVF9URU1QTEFURV8gVDIw
LCBHVEVTVF9URU1QTEFURV8gVDIxLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjIsIEdURVNUX1RF
TVBMQVRFXyBUMjMsIEdURVNUX1RFTVBMQVRFXyBUMjQsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQy
NSwgR1RFU1RfVEVNUExBVEVfIFQyNiwgR1RFU1RfVEVNUExBVEVfIFQyNywKLSAgICBHVEVTVF9U
RU1QTEFURV8gVDI4LCBHVEVTVF9URU1QTEFURV8gVDI5LCBHVEVTVF9URU1QTEFURV8gVDMwLAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUMzEsIEdURVNUX1RFTVBMQVRFXyBUMzIsIEdURVNUX1RFTVBM
QVRFXyBUMzMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzNCwgR1RFU1RfVEVNUExBVEVfIFQzNSwg
R1RFU1RfVEVNUExBVEVfIFQzNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDM3LCBHVEVTVF9URU1Q
TEFURV8gVDM4LCBHVEVTVF9URU1QTEFURV8gVDM5LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDAs
IEdURVNUX1RFTVBMQVRFXyBUNDEsIEdURVNUX1RFTVBMQVRFXyBUNDIsCi0gICAgR1RFU1RfVEVN
UExBVEVfIFQ0MywgR1RFU1RfVEVNUExBVEVfIFQ0NCwgR1RFU1RfVEVNUExBVEVfIFQ0NT4KLXN0
cnVjdCBUZW1wbGF0ZXM0NSB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhlYWQ7Ci0gIHR5
cGVkZWYgVGVtcGxhdGVzNDQ8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQx
MSwgVDEyLCBUMTMsIFQxNCwKLSAgICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQy
MSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAgICAgVDI5LCBUMzAsIFQz
MSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwgVDQxLCBUNDIs
Ci0gICAgICBUNDMsIFQ0NCwgVDQ1PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPEdURVNUX1RFTVBM
QVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RF
U1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwK
LSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExB
VEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdU
RVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExB
VEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQxNSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBH
VEVTVF9URU1QTEFURV8gVDE3LCBHVEVTVF9URU1QTEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBM
QVRFXyBUMTksIEdURVNUX1RFTVBMQVRFXyBUMjAsIEdURVNUX1RFTVBMQVRFXyBUMjEsCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQyMiwgR1RFU1RfVEVNUExBVEVfIFQyMywgR1RFU1RfVEVNUExBVEVf
IFQyNCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDI1LCBHVEVTVF9URU1QTEFURV8gVDI2LCBHVEVT
VF9URU1QTEFURV8gVDI3LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjgsIEdURVNUX1RFTVBMQVRF
XyBUMjksIEdURVNUX1RFTVBMQVRFXyBUMzAsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzMSwgR1RF
U1RfVEVNUExBVEVfIFQzMiwgR1RFU1RfVEVNUExBVEVfIFQzMywKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDM0LCBHVEVTVF9URU1QTEFURV8gVDM1LCBHVEVTVF9URU1QTEFURV8gVDM2LAotICAgIEdU
RVNUX1RFTVBMQVRFXyBUMzcsIEdURVNUX1RFTVBMQVRFXyBUMzgsIEdURVNUX1RFTVBMQVRFXyBU
MzksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0MCwgR1RFU1RfVEVNUExBVEVfIFQ0MSwgR1RFU1Rf
VEVNUExBVEVfIFQ0MiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDQzLCBHVEVTVF9URU1QTEFURV8g
VDQ0LCBHVEVTVF9URU1QTEFURV8gVDQ1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDY+Ci1zdHJ1
Y3QgVGVtcGxhdGVzNDYgewotICB0eXBlZGVmIFRlbXBsYXRlU2VsPFQxPiBIZWFkOwotICB0eXBl
ZGVmIFRlbXBsYXRlczQ1PFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEs
IFQxMiwgVDEzLCBUMTQsCi0gICAgICBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEs
IFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwKLSAgICAgIFQyOSwgVDMwLCBUMzEs
IFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwgVDQyLAot
ICAgICAgVDQzLCBUNDQsIFQ0NSwgVDQ2PiBUYWlsOwotfTsKLQotdGVtcGxhdGUgPEdURVNUX1RF
TVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBU
NiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVN
UExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEs
IEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVN
UExBVEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQxNSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE2
LCBHVEVTVF9URU1QTEFURV8gVDE3LCBHVEVTVF9URU1QTEFURV8gVDE4LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUMTksIEdURVNUX1RFTVBMQVRFXyBUMjAsIEdURVNUX1RFTVBMQVRFXyBUMjEsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQyMiwgR1RFU1RfVEVNUExBVEVfIFQyMywgR1RFU1RfVEVNUExB
VEVfIFQyNCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDI1LCBHVEVTVF9URU1QTEFURV8gVDI2LCBH
VEVTVF9URU1QTEFURV8gVDI3LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjgsIEdURVNUX1RFTVBM
QVRFXyBUMjksIEdURVNUX1RFTVBMQVRFXyBUMzAsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzMSwg
R1RFU1RfVEVNUExBVEVfIFQzMiwgR1RFU1RfVEVNUExBVEVfIFQzMywKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDM0LCBHVEVTVF9URU1QTEFURV8gVDM1LCBHVEVTVF9URU1QTEFURV8gVDM2LAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMzcsIEdURVNUX1RFTVBMQVRFXyBUMzgsIEdURVNUX1RFTVBMQVRF
XyBUMzksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0MCwgR1RFU1RfVEVNUExBVEVfIFQ0MSwgR1RF
U1RfVEVNUExBVEVfIFQ0MiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDQzLCBHVEVTVF9URU1QTEFU
RV8gVDQ0LCBHVEVTVF9URU1QTEFURV8gVDQ1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDYsIEdU
RVNUX1RFTVBMQVRFXyBUNDc+Ci1zdHJ1Y3QgVGVtcGxhdGVzNDcgewotICB0eXBlZGVmIFRlbXBs
YXRlU2VsPFQxPiBIZWFkOwotICB0eXBlZGVmIFRlbXBsYXRlczQ2PFQyLCBUMywgVDQsIFQ1LCBU
NiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgICBUMTUsIFQxNiwg
VDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQy
OCwKLSAgICAgIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQz
OCwgVDM5LCBUNDAsIFQ0MSwgVDQyLAotICAgICAgVDQzLCBUNDQsIFQ0NSwgVDQ2LCBUNDc+IFRh
aWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8g
VDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RF
TVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywg
R1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBH
VEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8g
VDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNU
X1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxOSwgR1RFU1RfVEVNUExBVEVf
IFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDIyLCBHVEVT
VF9URU1QTEFURV8gVDIzLCBHVEVTVF9URU1QTEFURV8gVDI0LAotICAgIEdURVNUX1RFTVBMQVRF
XyBUMjUsIEdURVNUX1RFTVBMQVRFXyBUMjYsIEdURVNUX1RFTVBMQVRFXyBUMjcsCi0gICAgR1RF
U1RfVEVNUExBVEVfIFQyOCwgR1RFU1RfVEVNUExBVEVfIFQyOSwgR1RFU1RfVEVNUExBVEVfIFQz
MCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDMxLCBHVEVTVF9URU1QTEFURV8gVDMyLCBHVEVTVF9U
RU1QTEFURV8gVDMzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzQsIEdURVNUX1RFTVBMQVRFXyBU
MzUsIEdURVNUX1RFTVBMQVRFXyBUMzYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzNywgR1RFU1Rf
VEVNUExBVEVfIFQzOCwgR1RFU1RfVEVNUExBVEVfIFQzOSwKLSAgICBHVEVTVF9URU1QTEFURV8g
VDQwLCBHVEVTVF9URU1QTEFURV8gVDQxLCBHVEVTVF9URU1QTEFURV8gVDQyLAotICAgIEdURVNU
X1RFTVBMQVRFXyBUNDMsIEdURVNUX1RFTVBMQVRFXyBUNDQsIEdURVNUX1RFTVBMQVRFXyBUNDUs
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQ0NiwgR1RFU1RfVEVNUExBVEVfIFQ0NywgR1RFU1RfVEVN
UExBVEVfIFQ0OD4KLXN0cnVjdCBUZW1wbGF0ZXM0OCB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8
VDE+IEhlYWQ7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzNDc8VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywg
VDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAgICAgIFQxNSwgVDE2LCBUMTcsIFQx
OCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LAotICAg
ICAgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzks
IFQ0MCwgVDQxLCBUNDIsCi0gICAgICBUNDMsIFQ0NCwgVDQ1LCBUNDYsIFQ0NywgVDQ4PiBUYWls
OwotfTsKLQotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQy
LCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1Q
TEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdU
RVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRF
XyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RF
U1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQx
NSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBHVEVTVF9URU1QTEFURV8gVDE3LCBHVEVTVF9U
RU1QTEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTksIEdURVNUX1RFTVBMQVRFXyBU
MjAsIEdURVNUX1RFTVBMQVRFXyBUMjEsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyMiwgR1RFU1Rf
VEVNUExBVEVfIFQyMywgR1RFU1RfVEVNUExBVEVfIFQyNCwKLSAgICBHVEVTVF9URU1QTEFURV8g
VDI1LCBHVEVTVF9URU1QTEFURV8gVDI2LCBHVEVTVF9URU1QTEFURV8gVDI3LAotICAgIEdURVNU
X1RFTVBMQVRFXyBUMjgsIEdURVNUX1RFTVBMQVRFXyBUMjksIEdURVNUX1RFTVBMQVRFXyBUMzAs
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQzMSwgR1RFU1RfVEVNUExBVEVfIFQzMiwgR1RFU1RfVEVN
UExBVEVfIFQzMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDM0LCBHVEVTVF9URU1QTEFURV8gVDM1
LCBHVEVTVF9URU1QTEFURV8gVDM2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzcsIEdURVNUX1RF
TVBMQVRFXyBUMzgsIEdURVNUX1RFTVBMQVRFXyBUMzksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0
MCwgR1RFU1RfVEVNUExBVEVfIFQ0MSwgR1RFU1RfVEVNUExBVEVfIFQ0MiwKLSAgICBHVEVTVF9U
RU1QTEFURV8gVDQzLCBHVEVTVF9URU1QTEFURV8gVDQ0LCBHVEVTVF9URU1QTEFURV8gVDQ1LAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUNDYsIEdURVNUX1RFTVBMQVRFXyBUNDcsIEdURVNUX1RFTVBM
QVRFXyBUNDgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0OT4KLXN0cnVjdCBUZW1wbGF0ZXM0OSB7
Ci0gIHR5cGVkZWYgVGVtcGxhdGVTZWw8VDE+IEhlYWQ7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzNDg8
VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwK
LSAgICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwg
VDI1LCBUMjYsIFQyNywgVDI4LAotICAgICAgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwg
VDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwgVDQxLCBUNDIsCi0gICAgICBUNDMsIFQ0NCwg
VDQ1LCBUNDYsIFQ0NywgVDQ4LCBUNDk+IFRhaWw7Ci19OwotCi10ZW1wbGF0ZSA8R1RFU1RfVEVN
UExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBH
VEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2
LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1Q
TEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwg
R1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1Q
TEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYs
IEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVN
UExBVEVfIFQxOSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwKLSAg
ICBHVEVTVF9URU1QTEFURV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIzLCBHVEVTVF9URU1QTEFU
RV8gVDI0LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjUsIEdURVNUX1RFTVBMQVRFXyBUMjYsIEdU
RVNUX1RFTVBMQVRFXyBUMjcsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyOCwgR1RFU1RfVEVNUExB
VEVfIFQyOSwgR1RFU1RfVEVNUExBVEVfIFQzMCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDMxLCBH
VEVTVF9URU1QTEFURV8gVDMyLCBHVEVTVF9URU1QTEFURV8gVDMzLAotICAgIEdURVNUX1RFTVBM
QVRFXyBUMzQsIEdURVNUX1RFTVBMQVRFXyBUMzUsIEdURVNUX1RFTVBMQVRFXyBUMzYsCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQzNywgR1RFU1RfVEVNUExBVEVfIFQzOCwgR1RFU1RfVEVNUExBVEVf
IFQzOSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDQwLCBHVEVTVF9URU1QTEFURV8gVDQxLCBHVEVT
VF9URU1QTEFURV8gVDQyLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDMsIEdURVNUX1RFTVBMQVRF
XyBUNDQsIEdURVNUX1RFTVBMQVRFXyBUNDUsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0NiwgR1RF
U1RfVEVNUExBVEVfIFQ0NywgR1RFU1RfVEVNUExBVEVfIFQ0OCwKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDQ5LCBHVEVTVF9URU1QTEFURV8gVDUwPgotc3RydWN0IFRlbXBsYXRlczUwIHsKLSAgdHlw
ZWRlZiBUZW1wbGF0ZVNlbDxUMT4gSGVhZDsKLSAgdHlwZWRlZiBUZW1wbGF0ZXM0OTxUMiwgVDMs
IFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAotICAgICAg
VDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQy
NiwgVDI3LCBUMjgsCi0gICAgICBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQz
NiwgVDM3LCBUMzgsIFQzOSwgVDQwLCBUNDEsIFQ0MiwKLSAgICAgIFQ0MywgVDQ0LCBUNDUsIFQ0
NiwgVDQ3LCBUNDgsIFQ0OSwgVDUwPiBUYWlsOwotfTsKLQotCi0vLyBXZSBkb24ndCB3YW50IHRv
IHJlcXVpcmUgdGhlIHVzZXJzIHRvIHdyaXRlIFRlbXBsYXRlc048Li4uPiBkaXJlY3RseSwKLS8v
IGFzIHRoYXQgd291bGQgcmVxdWlyZSB0aGVtIHRvIGNvdW50IHRoZSBsZW5ndGguICBUZW1wbGF0
ZXM8Li4uPiBpcyBtdWNoCi0vLyBlYXNpZXIgdG8gd3JpdGUsIGJ1dCBnZW5lcmF0ZXMgaG9ycmli
bGUgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBhCi0vLyBjb21waWxlciBlcnJvciwgYXMgZ2NjIGlu
c2lzdHMgb24gcHJpbnRpbmcgb3V0IGVhY2ggdGVtcGxhdGUKLS8vIGFyZ3VtZW50LCBldmVuIGlm
IGl0IGhhcyB0aGUgZGVmYXVsdCB2YWx1ZSAodGhpcyBtZWFucyBUZW1wbGF0ZXM8bGlzdD4KLS8v
IHdpbGwgYXBwZWFyIGFzIFRlbXBsYXRlczxsaXN0LCBOb25lVCwgTm9uZVQsIC4uLiwgTm9uZVQ+
IGluIHRoZSBjb21waWxlcgotLy8gZXJyb3JzKS4KLS8vCi0vLyBPdXIgc29sdXRpb24gaXMgdG8g
Y29tYmluZSB0aGUgYmVzdCBwYXJ0IG9mIHRoZSB0d28gYXBwcm9hY2hlczogYQotLy8gdXNlciB3
b3VsZCB3cml0ZSBUZW1wbGF0ZXM8VDEsIC4uLiwgVE4+LCBhbmQgR29vZ2xlIFRlc3Qgd2lsbCB0
cmFuc2xhdGUKLS8vIHRoYXQgdG8gVGVtcGxhdGVzTjxUMSwgLi4uLCBUTj4gaW50ZXJuYWxseSB0
byBtYWtlIGVycm9yIG1lc3NhZ2VzCi0vLyByZWFkYWJsZS4gIFRoZSB0cmFuc2xhdGlvbiBpcyBk
b25lIGJ5IHRoZSAndHlwZScgbWVtYmVyIG9mIHRoZQotLy8gVGVtcGxhdGVzIHRlbXBsYXRlLgot
dGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSA9IE5vbmVULCBHVEVTVF9URU1QTEFURV8gVDIg
PSBOb25lVCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDMgPSBOb25lVCwgR1RFU1RfVEVNUExBVEVf
IFQ0ID0gTm9uZVQsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ1ID0gTm9uZVQsIEdURVNUX1RFTVBM
QVRFXyBUNiA9IE5vbmVULAotICAgIEdURVNUX1RFTVBMQVRFXyBUNyA9IE5vbmVULCBHVEVTVF9U
RU1QTEFURV8gVDggPSBOb25lVCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDkgPSBOb25lVCwgR1RF
U1RfVEVNUExBVEVfIFQxMCA9IE5vbmVULAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTEgPSBOb25l
VCwgR1RFU1RfVEVNUExBVEVfIFQxMiA9IE5vbmVULAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMg
PSBOb25lVCwgR1RFU1RfVEVNUExBVEVfIFQxNCA9IE5vbmVULAotICAgIEdURVNUX1RFTVBMQVRF
XyBUMTUgPSBOb25lVCwgR1RFU1RfVEVNUExBVEVfIFQxNiA9IE5vbmVULAotICAgIEdURVNUX1RF
TVBMQVRFXyBUMTcgPSBOb25lVCwgR1RFU1RfVEVNUExBVEVfIFQxOCA9IE5vbmVULAotICAgIEdU
RVNUX1RFTVBMQVRFXyBUMTkgPSBOb25lVCwgR1RFU1RfVEVNUExBVEVfIFQyMCA9IE5vbmVULAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUMjEgPSBOb25lVCwgR1RFU1RfVEVNUExBVEVfIFQyMiA9IE5v
bmVULAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjMgPSBOb25lVCwgR1RFU1RfVEVNUExBVEVfIFQy
NCA9IE5vbmVULAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjUgPSBOb25lVCwgR1RFU1RfVEVNUExB
VEVfIFQyNiA9IE5vbmVULAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjcgPSBOb25lVCwgR1RFU1Rf
VEVNUExBVEVfIFQyOCA9IE5vbmVULAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjkgPSBOb25lVCwg
R1RFU1RfVEVNUExBVEVfIFQzMCA9IE5vbmVULAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzEgPSBO
b25lVCwgR1RFU1RfVEVNUExBVEVfIFQzMiA9IE5vbmVULAotICAgIEdURVNUX1RFTVBMQVRFXyBU
MzMgPSBOb25lVCwgR1RFU1RfVEVNUExBVEVfIFQzNCA9IE5vbmVULAotICAgIEdURVNUX1RFTVBM
QVRFXyBUMzUgPSBOb25lVCwgR1RFU1RfVEVNUExBVEVfIFQzNiA9IE5vbmVULAotICAgIEdURVNU
X1RFTVBMQVRFXyBUMzcgPSBOb25lVCwgR1RFU1RfVEVNUExBVEVfIFQzOCA9IE5vbmVULAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMzkgPSBOb25lVCwgR1RFU1RfVEVNUExBVEVfIFQ0MCA9IE5vbmVU
LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDEgPSBOb25lVCwgR1RFU1RfVEVNUExBVEVfIFQ0MiA9
IE5vbmVULAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDMgPSBOb25lVCwgR1RFU1RfVEVNUExBVEVf
IFQ0NCA9IE5vbmVULAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDUgPSBOb25lVCwgR1RFU1RfVEVN
UExBVEVfIFQ0NiA9IE5vbmVULAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDcgPSBOb25lVCwgR1RF
U1RfVEVNUExBVEVfIFQ0OCA9IE5vbmVULAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDkgPSBOb25l
VCwgR1RFU1RfVEVNUExBVEVfIFQ1MCA9IE5vbmVUPgotc3RydWN0IFRlbXBsYXRlcyB7Ci0gIHR5
cGVkZWYgVGVtcGxhdGVzNTA8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEw
LCBUMTEsIFQxMiwgVDEzLAotICAgICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIw
LCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsCi0gICAgICBUMjgsIFQyOSwgVDMw
LCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwK
LSAgICAgIFQ0MiwgVDQzLCBUNDQsIFQ0NSwgVDQ2LCBUNDcsIFQ0OCwgVDQ5LCBUNTA+IHR5cGU7
Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IFRlbXBsYXRlczxOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LAotICAgIE5vbmVUPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMCB0eXBlOwotfTsKLXRlbXBsYXRl
IDxHVEVTVF9URU1QTEFURV8gVDE+Ci1zdHJ1Y3QgVGVtcGxhdGVzPFQxLCBOb25lVCwgTm9uZVQs
IE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9u
ZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
Ci0gICAgTm9uZVQ+IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMxPFQxPiB0eXBlOwotfTsKLXRlbXBs
YXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMj4KLXN0cnVjdCBUZW1w
bGF0ZXM8VDEsIFQyLCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwgTm9u
ZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25lVD4gewotICB0eXBlZGVmIFRlbXBsYXRlczI8
VDEsIFQyPiB0eXBlOwotfTsKLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RF
TVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzPgotc3RydWN0IFRlbXBsYXRlczxUMSwgVDIs
IFQzLCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAg
ICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULCBOb25lVD4gewotICB0eXBlZGVmIFRlbXBsYXRlczM8VDEsIFQyLCBUMz4gdHlwZTsKLX07
Ci10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNU
X1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQ+Ci1zdHJ1Y3QgVGVtcGxhdGVz
PFQxLCBUMiwgVDMsIFQ0LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAot
ICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVUPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzNDxUMSwgVDIsIFQzLCBUND4g
dHlwZTsKLX07Ci10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8g
VDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RF
TVBMQVRFXyBUNT4KLXN0cnVjdCBUZW1wbGF0ZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBOb25lVCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9u
ZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAg
IE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwg
Tm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9u
ZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQ+IHsKLSAgdHlwZWRlZiBU
ZW1wbGF0ZXM1PFQxLCBUMiwgVDMsIFQ0LCBUNT4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8R1RFU1Rf
VEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAg
ICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVf
IFQ2Pgotc3RydWN0IFRlbXBsYXRlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBOb25lVCwgTm9u
ZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9u
ZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVD4gewotICB0eXBlZGVmIFRlbXBsYXRlczY8
VDEsIFQyLCBUMywgVDQsIFQ1LCBUNj4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8R1RFU1RfVEVNUExB
VEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVT
VF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUNz4KLXN0cnVjdCBUZW1wbGF0ZXM8VDEsIFQyLCBUMywgVDQs
IFQ1LCBUNiwgVDcsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQ+IHsKLSAgdHlw
ZWRlZiBUZW1wbGF0ZXM3PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3PiB0eXBlOwotfTsKLXRl
bXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVN
UExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBH
VEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFU
RV8gVDg+Ci1zdHJ1Y3QgVGVtcGxhdGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9u
ZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQs
IE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwg
Tm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9u
ZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVUPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzODxUMSwg
VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDg+IHR5cGU7Ci19OwotdGVtcGxhdGUgPEdURVNUX1RF
TVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBU
NiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVN
UExBVEVfIFQ5Pgotc3RydWN0IFRlbXBsYXRlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywg
VDgsIFQ5LCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVD4gewotICB0eXBlZGVmIFRlbXBsYXRlczk8VDEs
IFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOT4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8R1RF
U1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywK
LSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExB
VEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVT
VF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMD4KLXN0cnVjdCBUZW1wbGF0
ZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBOb25lVCwgTm9uZVQs
IE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
PiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMTA8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4
LCBUOSwgVDEwPiB0eXBlOwotfTsKLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNU
X1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBU
NCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVN
UExBVEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBH
VEVTVF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDExPgotc3RydWN0IFRlbXBsYXRl
czxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgTm9uZVQsIE5v
bmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVUPiB7
Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMTE8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBU
OSwgVDEwLCBUMTE+IHR5cGU7Ci19OwotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RF
U1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExBVEVf
IFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVTVF9U
RU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBMQVRF
XyBUMTI+Ci1zdHJ1Y3QgVGVtcGxhdGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwg
VDksIFQxMCwgVDExLCBUMTIsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVUPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMTI8VDEsIFQyLCBUMywg
VDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMj4gdHlwZTsKLX07Ci10ZW1wbGF0
ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRF
XyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1Rf
VEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4
LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVN
UExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEz
Pgotc3RydWN0IFRlbXBsYXRlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBU
MTAsIFQxMSwgVDEyLCBUMTMsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwgTm9uZVQ+IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMxMzxUMSwgVDIsIFQzLCBUNCwgVDUs
IFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLAotICAgICAgVDEzPiB0eXBlOwotfTsKLXRl
bXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVN
UExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBH
VEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFU
RV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEwLCBHVEVT
VF9URU1QTEFURV8gVDExLCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdURVNUX1RFTVBMQVRF
XyBUMTMsIEdURVNUX1RFTVBMQVRFXyBUMTQ+Ci1zdHJ1Y3QgVGVtcGxhdGVzPFQxLCBUMiwgVDMs
IFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAotICAgIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9u
ZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQ+IHsKLSAgdHlwZWRlZiBUZW1wbGF0
ZXMxNDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBU
MTMsCi0gICAgICBUMTQ+IHR5cGU7Ci19OwotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwg
R1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVT
VF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBM
QVRFXyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVfIFQxNCwg
R1RFU1RfVEVNUExBVEVfIFQxNT4KLXN0cnVjdCBUZW1wbGF0ZXM8VDEsIFQyLCBUMywgVDQsIFQ1
LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgVDE1LCBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQ+IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMxNTxUMSwg
VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAg
ICBUMTQsIFQxNT4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVT
VF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8g
VDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVf
IFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVT
VF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTY+Ci1zdHJ1Y3QgVGVtcGxh
dGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQx
MywgVDE0LAotICAgIFQxNSwgVDE2LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVD4gewotICB0eXBl
ZGVmIFRlbXBsYXRlczE2PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwg
VDExLCBUMTIsIFQxMywKLSAgICAgIFQxNCwgVDE1LCBUMTY+IHR5cGU7Ci19OwotdGVtcGxhdGUg
PEdURVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8g
VDMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RF
TVBMQVRFXyBUNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwg
R1RFU1RfVEVNUExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBM
QVRFXyBUMTEsIEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMywg
R1RFU1RfVEVNUExBVEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQxNSwKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDE2LCBHVEVTVF9URU1QTEFURV8gVDE3Pgotc3RydWN0IFRlbXBsYXRlczxUMSwgVDIs
IFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAg
ICBUMTUsIFQxNiwgVDE3LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVUPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVz
MTc8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEz
LAotICAgICAgVDE0LCBUMTUsIFQxNiwgVDE3PiB0eXBlOwotfTsKLXRlbXBsYXRlIDxHVEVTVF9U
RU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAg
IEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8g
VDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RF
TVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDEx
LCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNUX1RF
TVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRFXyBUMTUsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQx
NiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RFU1RfVEVNUExBVEVfIFQxOD4KLXN0cnVjdCBUZW1w
bGF0ZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwg
VDEzLCBUMTQsCi0gICAgVDE1LCBUMTYsIFQxNywgVDE4LCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQ+IHsKLSAgdHlwZWRl
ZiBUZW1wbGF0ZXMxODxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQx
MSwgVDEyLCBUMTMsCi0gICAgICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOD4gdHlwZTsKLX07Ci10
ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RF
TVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwg
R1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExB
VEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RF
U1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdU
RVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBU
MTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxOT4KLXN0cnVjdCBUZW1wbGF0ZXM8VDEsIFQyLCBU
MywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAg
VDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9u
ZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAg
IE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVUPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMTk8VDEs
IFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLAotICAg
ICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOT4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8R1RF
U1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywK
LSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExB
VEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVT
VF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVf
IFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVT
VF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRF
XyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RF
U1RfVEVNUExBVEVfIFQxOSwgR1RFU1RfVEVNUExBVEVfIFQyMD4KLXN0cnVjdCBUZW1wbGF0ZXM8
VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBU
MTQsCi0gICAgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwgTm9u
ZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVD4gewotICB0eXBlZGVmIFRlbXBsYXRl
czIwPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQx
MywKLSAgICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMD4gdHlwZTsKLX07Ci10
ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RF
TVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwg
R1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExB
VEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RF
U1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdU
RVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBU
MTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxOSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1Rf
VEVNUExBVEVfIFQyMT4KLXN0cnVjdCBUZW1wbGF0ZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwg
VDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgVDE1LCBUMTYsIFQxNywg
VDE4LCBUMTksIFQyMCwgVDIxLCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0g
ICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQ+IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMyMTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2
LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgICBUMTQsIFQxNSwgVDE2LCBU
MTcsIFQxOCwgVDE5LCBUMjAsIFQyMT4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8R1RFU1RfVEVNUExB
VEVfIFQxLCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVT
VF9URU1QTEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFU
RV8gVDksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RF
U1RfVEVNUExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFU
RV8gVDE0LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdU
RVNUX1RFTVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQxOSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwKLSAgICBH
VEVTVF9URU1QTEFURV8gVDIyPgotc3RydWN0IFRlbXBsYXRlczxUMSwgVDIsIFQzLCBUNCwgVDUs
IFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAgICBUMTUsIFQxNiwg
VDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBO
b25lVCwgTm9uZVQ+IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMyMjxUMSwgVDIsIFQzLCBUNCwgVDUs
IFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgICBUMTQsIFQxNSwgVDE2
LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyPiB0eXBlOwotfTsKLXRlbXBsYXRlIDxHVEVT
VF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFU
RV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNU
X1RFTVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8g
VDExLCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNU
X1RFTVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRFXyBUMTUsCi0gICAgR1RFU1RfVEVNUExBVEVf
IFQxNiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RFU1RfVEVNUExBVEVfIFQxOCwKLSAgICBHVEVT
VF9URU1QTEFURV8gVDE5LCBHVEVTVF9URU1QTEFURV8gVDIwLCBHVEVTVF9URU1QTEFURV8gVDIx
LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjIsIEdURVNUX1RFTVBMQVRFXyBUMjM+Ci1zdHJ1Y3Qg
VGVtcGxhdGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBU
MTIsIFQxMywgVDE0LAotICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIy
LCBUMjMsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9u
ZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAg
IE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwg
Tm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQ+IHsKLSAgdHlwZWRlZiBUZW1w
bGF0ZXMyMzxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEy
LCBUMTMsCi0gICAgICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIy
LCBUMjM+IHR5cGU7Ci19OwotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVN
UExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBH
VEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAotICAgIEdURVNU
X1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBMQVRFXyBUMTIs
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVfIFQxNCwgR1RFU1RfVEVN
UExBVEVfIFQxNSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBHVEVTVF9URU1QTEFURV8gVDE3
LCBHVEVTVF9URU1QTEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTksIEdURVNUX1RF
TVBMQVRFXyBUMjAsIEdURVNUX1RFTVBMQVRFXyBUMjEsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQy
MiwgR1RFU1RfVEVNUExBVEVfIFQyMywgR1RFU1RfVEVNUExBVEVfIFQyND4KLXN0cnVjdCBUZW1w
bGF0ZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwg
VDEzLCBUMTQsCi0gICAgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQy
MywgVDI0LCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQ+IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMy
NDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMs
Ci0gICAgICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMs
IFQyND4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBHVEVTVF9URU1Q
TEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDQsIEdU
RVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNUX1RFTVBMQVRF
XyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExBVEVfIFQxMiwK
LSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBHVEVTVF9URU1Q
TEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBMQVRFXyBUMTcs
IEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxOSwgR1RFU1RfVEVN
UExBVEVfIFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDIy
LCBHVEVTVF9URU1QTEFURV8gVDIzLCBHVEVTVF9URU1QTEFURV8gVDI0LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUMjU+Ci1zdHJ1Y3QgVGVtcGxhdGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3
LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAotICAgIFQxNSwgVDE2LCBUMTcsIFQx
OCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBOb25lVCwgTm9uZVQsIE5vbmVU
LAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVD4g
ewotICB0eXBlZGVmIFRlbXBsYXRlczI1PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwg
VDksIFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBU
MTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjU+IHR5cGU7Ci19OwotdGVtcGxhdGUgPEdU
RVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMs
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBM
QVRFXyBUNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RF
U1RfVEVNUExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRF
XyBUMTEsIEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMywgR1RF
U1RfVEVNUExBVEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQxNSwKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDE2LCBHVEVTVF9URU1QTEFURV8gVDE3LCBHVEVTVF9URU1QTEFURV8gVDE4LAotICAgIEdU
RVNUX1RFTVBMQVRFXyBUMTksIEdURVNUX1RFTVBMQVRFXyBUMjAsIEdURVNUX1RFTVBMQVRFXyBU
MjEsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyMiwgR1RFU1RfVEVNUExBVEVfIFQyMywgR1RFU1Rf
VEVNUExBVEVfIFQyNCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDI1LCBHVEVTVF9URU1QTEFURV8g
VDI2Pgotc3RydWN0IFRlbXBsYXRlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5
LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAgICBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwg
VDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBOb25lVCwgTm9uZVQsCi0gICAgTm9u
ZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVUPiB7Ci0gIHR5cGVk
ZWYgVGVtcGxhdGVzMjY8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBU
MTEsIFQxMiwgVDEzLAotICAgICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBU
MjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2PiB0eXBlOwotfTsKLXRlbXBsYXRlIDxHVEVTVF9U
RU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAg
IEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8g
VDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RF
TVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDEx
LCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNUX1RF
TVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRFXyBUMTUsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQx
NiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RFU1RfVEVNUExBVEVfIFQxOCwKLSAgICBHVEVTVF9U
RU1QTEFURV8gVDE5LCBHVEVTVF9URU1QTEFURV8gVDIwLCBHVEVTVF9URU1QTEFURV8gVDIxLAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUMjIsIEdURVNUX1RFTVBMQVRFXyBUMjMsIEdURVNUX1RFTVBM
QVRFXyBUMjQsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyNSwgR1RFU1RfVEVNUExBVEVfIFQyNiwg
R1RFU1RfVEVNUExBVEVfIFQyNz4KLXN0cnVjdCBUZW1wbGF0ZXM8VDEsIFQyLCBUMywgVDQsIFQ1
LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgVDE1LCBUMTYs
IFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBO
b25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwgTm9u
ZVQ+IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMyNzxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywg
VDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQx
OCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsCi0gICAgICBUMjc+IHR5
cGU7Ci19OwotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQy
LCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1Q
TEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdU
RVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRF
XyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RF
U1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQx
NSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBHVEVTVF9URU1QTEFURV8gVDE3LCBHVEVTVF9U
RU1QTEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTksIEdURVNUX1RFTVBMQVRFXyBU
MjAsIEdURVNUX1RFTVBMQVRFXyBUMjEsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyMiwgR1RFU1Rf
VEVNUExBVEVfIFQyMywgR1RFU1RfVEVNUExBVEVfIFQyNCwKLSAgICBHVEVTVF9URU1QTEFURV8g
VDI1LCBHVEVTVF9URU1QTEFURV8gVDI2LCBHVEVTVF9URU1QTEFURV8gVDI3LAotICAgIEdURVNU
X1RFTVBMQVRFXyBUMjg+Ci1zdHJ1Y3QgVGVtcGxhdGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYs
IFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAotICAgIFQxNSwgVDE2LCBUMTcs
IFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LAot
ICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVD4gewot
ICB0eXBlZGVmIFRlbXBsYXRlczI4PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDks
IFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTks
IFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LAotICAgICAgVDI4PiB0eXBl
OwotfTsKLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwg
R1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExB
VEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVT
VF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8g
VDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdURVNU
X1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRFXyBUMTUs
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQxNiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RFU1RfVEVN
UExBVEVfIFQxOCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE5LCBHVEVTVF9URU1QTEFURV8gVDIw
LCBHVEVTVF9URU1QTEFURV8gVDIxLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjIsIEdURVNUX1RF
TVBMQVRFXyBUMjMsIEdURVNUX1RFTVBMQVRFXyBUMjQsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQy
NSwgR1RFU1RfVEVNUExBVEVfIFQyNiwgR1RFU1RfVEVNUExBVEVfIFQyNywKLSAgICBHVEVTVF9U
RU1QTEFURV8gVDI4LCBHVEVTVF9URU1QTEFURV8gVDI5Pgotc3RydWN0IFRlbXBsYXRlczxUMSwg
VDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwK
LSAgICBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQy
NSwgVDI2LCBUMjcsIFQyOCwgVDI5LAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LAotICAgIE5vbmVUPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMjk8VDEsIFQyLCBUMywgVDQsIFQ1
LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLAotICAgICAgVDE0LCBUMTUsIFQx
NiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcs
Ci0gICAgICBUMjgsIFQyOT4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQx
LCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdU
RVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDks
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVN
UExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0
LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RF
TVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQx
OSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwKLSAgICBHVEVTVF9U
RU1QTEFURV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIzLCBHVEVTVF9URU1QTEFURV8gVDI0LAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUMjUsIEdURVNUX1RFTVBMQVRFXyBUMjYsIEdURVNUX1RFTVBM
QVRFXyBUMjcsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyOCwgR1RFU1RfVEVNUExBVEVfIFQyOSwg
R1RFU1RfVEVNUExBVEVfIFQzMD4KLXN0cnVjdCBUZW1wbGF0ZXM8VDEsIFQyLCBUMywgVDQsIFQ1
LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgVDE1LCBUMTYs
IFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBU
MjgsIFQyOSwKLSAgICBUMzAsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9u
ZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVUPiB7Ci0gIHR5
cGVkZWYgVGVtcGxhdGVzMzA8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEw
LCBUMTEsIFQxMiwgVDEzLAotICAgICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIw
LCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsCi0gICAgICBUMjgsIFQyOSwgVDMw
PiB0eXBlOwotfTsKLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRF
XyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1Rf
VEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3
LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRF
XyBUMTUsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxNiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RF
U1RfVEVNUExBVEVfIFQxOCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE5LCBHVEVTVF9URU1QTEFU
RV8gVDIwLCBHVEVTVF9URU1QTEFURV8gVDIxLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjIsIEdU
RVNUX1RFTVBMQVRFXyBUMjMsIEdURVNUX1RFTVBMQVRFXyBUMjQsCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQyNSwgR1RFU1RfVEVNUExBVEVfIFQyNiwgR1RFU1RfVEVNUExBVEVfIFQyNywKLSAgICBH
VEVTVF9URU1QTEFURV8gVDI4LCBHVEVTVF9URU1QTEFURV8gVDI5LCBHVEVTVF9URU1QTEFURV8g
VDMwLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzE+Ci1zdHJ1Y3QgVGVtcGxhdGVzPFQxLCBUMiwg
VDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAotICAg
IFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBU
MjYsIFQyNywgVDI4LCBUMjksCi0gICAgVDMwLCBUMzEsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQ+
IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZXMzMTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgs
IFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwg
VDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywKLSAgICAgIFQyOCwg
VDI5LCBUMzAsIFQzMT4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBH
VEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNU
X1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExB
VEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBH
VEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBM
QVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxOSwg
R1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIzLCBHVEVTVF9URU1QTEFURV8gVDI0LAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMjUsIEdURVNUX1RFTVBMQVRFXyBUMjYsIEdURVNUX1RFTVBMQVRF
XyBUMjcsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyOCwgR1RFU1RfVEVNUExBVEVfIFQyOSwgR1RF
U1RfVEVNUExBVEVfIFQzMCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDMxLCBHVEVTVF9URU1QTEFU
RV8gVDMyPgotc3RydWN0IFRlbXBsYXRlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgs
IFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQxNCwKLSAgICBUMTUsIFQxNiwgVDE3LCBUMTgsIFQx
OSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LAotICAg
IFQzMCwgVDMxLCBUMzIsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVD4gewotICB0eXBlZGVmIFRlbXBsYXRlczMy
PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywK
LSAgICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywg
VDI0LCBUMjUsIFQyNiwgVDI3LAotICAgICAgVDI4LCBUMjksIFQzMCwgVDMxLCBUMzI+IHR5cGU7
Ci19OwotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBH
VEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFU
RV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNU
X1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBU
MTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQxNSwK
LSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBHVEVTVF9URU1QTEFURV8gVDE3LCBHVEVTVF9URU1Q
TEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTksIEdURVNUX1RFTVBMQVRFXyBUMjAs
IEdURVNUX1RFTVBMQVRFXyBUMjEsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyMiwgR1RFU1RfVEVN
UExBVEVfIFQyMywgR1RFU1RfVEVNUExBVEVfIFQyNCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDI1
LCBHVEVTVF9URU1QTEFURV8gVDI2LCBHVEVTVF9URU1QTEFURV8gVDI3LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUMjgsIEdURVNUX1RFTVBMQVRFXyBUMjksIEdURVNUX1RFTVBMQVRFXyBUMzAsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQzMSwgR1RFU1RfVEVNUExBVEVfIFQzMiwgR1RFU1RfVEVNUExB
VEVfIFQzMz4KLXN0cnVjdCBUZW1wbGF0ZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4
LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgVDE1LCBUMTYsIFQxNywgVDE4LCBU
MTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsIFQyOSwKLSAg
ICBUMzAsIFQzMSwgVDMyLCBUMzMsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9u
ZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVUPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMzM8
VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLAot
ICAgICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBU
MjQsIFQyNSwgVDI2LCBUMjcsCi0gICAgICBUMjgsIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzPiB0
eXBlOwotfTsKLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBU
MiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVN
UExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBH
VEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdU
RVNUX1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRFXyBU
MTUsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxNiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RFU1Rf
VEVNUExBVEVfIFQxOCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE5LCBHVEVTVF9URU1QTEFURV8g
VDIwLCBHVEVTVF9URU1QTEFURV8gVDIxLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjIsIEdURVNU
X1RFTVBMQVRFXyBUMjMsIEdURVNUX1RFTVBMQVRFXyBUMjQsCi0gICAgR1RFU1RfVEVNUExBVEVf
IFQyNSwgR1RFU1RfVEVNUExBVEVfIFQyNiwgR1RFU1RfVEVNUExBVEVfIFQyNywKLSAgICBHVEVT
VF9URU1QTEFURV8gVDI4LCBHVEVTVF9URU1QTEFURV8gVDI5LCBHVEVTVF9URU1QTEFURV8gVDMw
LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzEsIEdURVNUX1RFTVBMQVRFXyBUMzIsIEdURVNUX1RF
TVBMQVRFXyBUMzMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzND4KLXN0cnVjdCBUZW1wbGF0ZXM8
VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBU
MTQsCi0gICAgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0
LCBUMjUsIFQyNiwgVDI3LCBUMjgsIFQyOSwKLSAgICBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwg
Tm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9u
ZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VD4gewotICB0eXBlZGVmIFRlbXBsYXRlczM0PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBU
OCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4
LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LAotICAgICAgVDI4
LCBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0PiB0eXBlOwotfTsKLXRlbXBsYXRlIDxHVEVT
VF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFU
RV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNU
X1RFTVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8g
VDExLCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNU
X1RFTVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRFXyBUMTUsCi0gICAgR1RFU1RfVEVNUExBVEVf
IFQxNiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RFU1RfVEVNUExBVEVfIFQxOCwKLSAgICBHVEVT
VF9URU1QTEFURV8gVDE5LCBHVEVTVF9URU1QTEFURV8gVDIwLCBHVEVTVF9URU1QTEFURV8gVDIx
LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjIsIEdURVNUX1RFTVBMQVRFXyBUMjMsIEdURVNUX1RF
TVBMQVRFXyBUMjQsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyNSwgR1RFU1RfVEVNUExBVEVfIFQy
NiwgR1RFU1RfVEVNUExBVEVfIFQyNywKLSAgICBHVEVTVF9URU1QTEFURV8gVDI4LCBHVEVTVF9U
RU1QTEFURV8gVDI5LCBHVEVTVF9URU1QTEFURV8gVDMwLAotICAgIEdURVNUX1RFTVBMQVRFXyBU
MzEsIEdURVNUX1RFTVBMQVRFXyBUMzIsIEdURVNUX1RFTVBMQVRFXyBUMzMsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQzNCwgR1RFU1RfVEVNUExBVEVfIFQzNT4KLXN0cnVjdCBUZW1wbGF0ZXM8VDEs
IFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQs
Ci0gICAgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBU
MjUsIFQyNiwgVDI3LCBUMjgsIFQyOSwKLSAgICBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1
LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULAotICAgIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQ+IHsK
LSAgdHlwZWRlZiBUZW1wbGF0ZXMzNTxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5
LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5
LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywKLSAgICAgIFQyOCwgVDI5
LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1PiB0eXBlOwotfTsKLXRlbXBsYXRlIDxHVEVT
VF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFU
RV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNU
X1RFTVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8g
VDExLCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNU
X1RFTVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRFXyBUMTUsCi0gICAgR1RFU1RfVEVNUExBVEVf
IFQxNiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RFU1RfVEVNUExBVEVfIFQxOCwKLSAgICBHVEVT
VF9URU1QTEFURV8gVDE5LCBHVEVTVF9URU1QTEFURV8gVDIwLCBHVEVTVF9URU1QTEFURV8gVDIx
LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjIsIEdURVNUX1RFTVBMQVRFXyBUMjMsIEdURVNUX1RF
TVBMQVRFXyBUMjQsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyNSwgR1RFU1RfVEVNUExBVEVfIFQy
NiwgR1RFU1RfVEVNUExBVEVfIFQyNywKLSAgICBHVEVTVF9URU1QTEFURV8gVDI4LCBHVEVTVF9U
RU1QTEFURV8gVDI5LCBHVEVTVF9URU1QTEFURV8gVDMwLAotICAgIEdURVNUX1RFTVBMQVRFXyBU
MzEsIEdURVNUX1RFTVBMQVRFXyBUMzIsIEdURVNUX1RFTVBMQVRFXyBUMzMsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQzNCwgR1RFU1RfVEVNUExBVEVfIFQzNSwgR1RFU1RfVEVNUExBVEVfIFQzNj4K
LXN0cnVjdCBUZW1wbGF0ZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEw
LCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwg
VDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsIFQyOSwKLSAgICBUMzAsIFQz
MSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBO
b25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VCwgTm9uZVQsIE5vbmVUPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMzY8VDEsIFQyLCBUMywgVDQs
IFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLAotICAgICAgVDE0LCBUMTUs
IFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBU
MjcsCi0gICAgICBUMjgsIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2PiB0
eXBlOwotfTsKLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRFXyBU
MiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1RfVEVN
UExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3LCBH
VEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAgIEdU
RVNUX1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRFXyBU
MTUsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxNiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RFU1Rf
VEVNUExBVEVfIFQxOCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE5LCBHVEVTVF9URU1QTEFURV8g
VDIwLCBHVEVTVF9URU1QTEFURV8gVDIxLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjIsIEdURVNU
X1RFTVBMQVRFXyBUMjMsIEdURVNUX1RFTVBMQVRFXyBUMjQsCi0gICAgR1RFU1RfVEVNUExBVEVf
IFQyNSwgR1RFU1RfVEVNUExBVEVfIFQyNiwgR1RFU1RfVEVNUExBVEVfIFQyNywKLSAgICBHVEVT
VF9URU1QTEFURV8gVDI4LCBHVEVTVF9URU1QTEFURV8gVDI5LCBHVEVTVF9URU1QTEFURV8gVDMw
LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzEsIEdURVNUX1RFTVBMQVRFXyBUMzIsIEdURVNUX1RF
TVBMQVRFXyBUMzMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzNCwgR1RFU1RfVEVNUExBVEVfIFQz
NSwgR1RFU1RfVEVNUExBVEVfIFQzNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDM3Pgotc3RydWN0
IFRlbXBsYXRlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwg
VDEyLCBUMTMsIFQxNCwKLSAgICBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQy
MiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LAotICAgIFQzMCwgVDMxLCBUMzIs
IFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9u
ZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQs
IE5vbmVUPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMzc8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwg
VDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLAotICAgICAgVDE0LCBUMTUsIFQxNiwgVDE3
LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsCi0gICAg
ICBUMjgsIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzc+IHR5cGU7
Ci19OwotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBH
VEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFU
RV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNU
X1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBU
MTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQxNSwK
LSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBHVEVTVF9URU1QTEFURV8gVDE3LCBHVEVTVF9URU1Q
TEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTksIEdURVNUX1RFTVBMQVRFXyBUMjAs
IEdURVNUX1RFTVBMQVRFXyBUMjEsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyMiwgR1RFU1RfVEVN
UExBVEVfIFQyMywgR1RFU1RfVEVNUExBVEVfIFQyNCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDI1
LCBHVEVTVF9URU1QTEFURV8gVDI2LCBHVEVTVF9URU1QTEFURV8gVDI3LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUMjgsIEdURVNUX1RFTVBMQVRFXyBUMjksIEdURVNUX1RFTVBMQVRFXyBUMzAsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQzMSwgR1RFU1RfVEVNUExBVEVfIFQzMiwgR1RFU1RfVEVNUExB
VEVfIFQzMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDM0LCBHVEVTVF9URU1QTEFURV8gVDM1LCBH
VEVTVF9URU1QTEFURV8gVDM2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzcsIEdURVNUX1RFTVBM
QVRFXyBUMzg+Ci1zdHJ1Y3QgVGVtcGxhdGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBU
OCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAotICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwg
VDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LCBUMjksCi0g
ICAgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQsIE5vbmVUPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMzg8VDEsIFQyLCBU
MywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLAotICAgICAgVDE0
LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwg
VDI2LCBUMjcsCi0gICAgICBUMjgsIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwg
VDM2LCBUMzcsIFQzOD4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQxLCBH
VEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdURVNU
X1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDksCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVNUExB
VEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0LCBH
VEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RFTVBM
QVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxOSwg
R1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIzLCBHVEVTVF9URU1QTEFURV8gVDI0LAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMjUsIEdURVNUX1RFTVBMQVRFXyBUMjYsIEdURVNUX1RFTVBMQVRF
XyBUMjcsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyOCwgR1RFU1RfVEVNUExBVEVfIFQyOSwgR1RF
U1RfVEVNUExBVEVfIFQzMCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDMxLCBHVEVTVF9URU1QTEFU
RV8gVDMyLCBHVEVTVF9URU1QTEFURV8gVDMzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzQsIEdU
RVNUX1RFTVBMQVRFXyBUMzUsIEdURVNUX1RFTVBMQVRFXyBUMzYsCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQzNywgR1RFU1RfVEVNUExBVEVfIFQzOCwgR1RFU1RfVEVNUExBVEVfIFQzOT4KLXN0cnVj
dCBUZW1wbGF0ZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEs
IFQxMiwgVDEzLCBUMTQsCi0gICAgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBU
MjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsIFQyOSwKLSAgICBUMzAsIFQzMSwgVDMy
LCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIE5vbmVULCBOb25lVCwgTm9uZVQs
Ci0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5v
bmVUPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMzk8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcs
IFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLAotICAgICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBU
MTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsCi0gICAgICBU
MjgsIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5
PiB0eXBlOwotfTsKLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RFTVBMQVRF
XyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwgR1RFU1Rf
VEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ3
LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVTVF9URU1QTEFURV8gVDEyLAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRFXyBUMTQsIEdURVNUX1RFTVBMQVRF
XyBUMTUsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxNiwgR1RFU1RfVEVNUExBVEVfIFQxNywgR1RF
U1RfVEVNUExBVEVfIFQxOCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE5LCBHVEVTVF9URU1QTEFU
RV8gVDIwLCBHVEVTVF9URU1QTEFURV8gVDIxLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjIsIEdU
RVNUX1RFTVBMQVRFXyBUMjMsIEdURVNUX1RFTVBMQVRFXyBUMjQsCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQyNSwgR1RFU1RfVEVNUExBVEVfIFQyNiwgR1RFU1RfVEVNUExBVEVfIFQyNywKLSAgICBH
VEVTVF9URU1QTEFURV8gVDI4LCBHVEVTVF9URU1QTEFURV8gVDI5LCBHVEVTVF9URU1QTEFURV8g
VDMwLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzEsIEdURVNUX1RFTVBMQVRFXyBUMzIsIEdURVNU
X1RFTVBMQVRFXyBUMzMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzNCwgR1RFU1RfVEVNUExBVEVf
IFQzNSwgR1RFU1RfVEVNUExBVEVfIFQzNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDM3LCBHVEVT
VF9URU1QTEFURV8gVDM4LCBHVEVTVF9URU1QTEFURV8gVDM5LAotICAgIEdURVNUX1RFTVBMQVRF
XyBUNDA+Ci1zdHJ1Y3QgVGVtcGxhdGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwg
VDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAotICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5
LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LCBUMjksCi0gICAg
VDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIE5v
bmVULCBOb25lVCwgTm9uZVQsCi0gICAgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVU
LCBOb25lVCwgTm9uZVQ+IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZXM0MDxUMSwgVDIsIFQzLCBUNCwg
VDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgICBUMTQsIFQxNSwg
VDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQy
NywKLSAgICAgIFQyOCwgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQz
NywgVDM4LCBUMzksIFQ0MD4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQx
LCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdU
RVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDks
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVN
UExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0
LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RF
TVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQx
OSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwKLSAgICBHVEVTVF9U
RU1QTEFURV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIzLCBHVEVTVF9URU1QTEFURV8gVDI0LAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUMjUsIEdURVNUX1RFTVBMQVRFXyBUMjYsIEdURVNUX1RFTVBM
QVRFXyBUMjcsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyOCwgR1RFU1RfVEVNUExBVEVfIFQyOSwg
R1RFU1RfVEVNUExBVEVfIFQzMCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDMxLCBHVEVTVF9URU1Q
TEFURV8gVDMyLCBHVEVTVF9URU1QTEFURV8gVDMzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzQs
IEdURVNUX1RFTVBMQVRFXyBUMzUsIEdURVNUX1RFTVBMQVRFXyBUMzYsCi0gICAgR1RFU1RfVEVN
UExBVEVfIFQzNywgR1RFU1RfVEVNUExBVEVfIFQzOCwgR1RFU1RfVEVNUExBVEVfIFQzOSwKLSAg
ICBHVEVTVF9URU1QTEFURV8gVDQwLCBHVEVTVF9URU1QTEFURV8gVDQxPgotc3RydWN0IFRlbXBs
YXRlczxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBU
MTMsIFQxNCwKLSAgICBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIz
LCBUMjQsIFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LAotICAgIFQzMCwgVDMxLCBUMzIsIFQzMywg
VDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLCBUNDEsIE5vbmVULCBOb25lVCwKLSAg
ICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVD4gewotICB0
eXBlZGVmIFRlbXBsYXRlczQxPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQx
MCwgVDExLCBUMTIsIFQxMywKLSAgICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQy
MCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LAotICAgICAgVDI4LCBUMjksIFQz
MCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLAotICAg
ICAgVDQxPiB0eXBlOwotfTsKLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RF
TVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwg
R1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBHVEVT
VF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVTVF9URU1QTEFURV8gVDEy
LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRFXyBUMTQsIEdURVNUX1RF
TVBMQVRFXyBUMTUsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxNiwgR1RFU1RfVEVNUExBVEVfIFQx
NywgR1RFU1RfVEVNUExBVEVfIFQxOCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE5LCBHVEVTVF9U
RU1QTEFURV8gVDIwLCBHVEVTVF9URU1QTEFURV8gVDIxLAotICAgIEdURVNUX1RFTVBMQVRFXyBU
MjIsIEdURVNUX1RFTVBMQVRFXyBUMjMsIEdURVNUX1RFTVBMQVRFXyBUMjQsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQyNSwgR1RFU1RfVEVNUExBVEVfIFQyNiwgR1RFU1RfVEVNUExBVEVfIFQyNywK
LSAgICBHVEVTVF9URU1QTEFURV8gVDI4LCBHVEVTVF9URU1QTEFURV8gVDI5LCBHVEVTVF9URU1Q
TEFURV8gVDMwLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzEsIEdURVNUX1RFTVBMQVRFXyBUMzIs
IEdURVNUX1RFTVBMQVRFXyBUMzMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzNCwgR1RFU1RfVEVN
UExBVEVfIFQzNSwgR1RFU1RfVEVNUExBVEVfIFQzNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDM3
LCBHVEVTVF9URU1QTEFURV8gVDM4LCBHVEVTVF9URU1QTEFURV8gVDM5LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUNDAsIEdURVNUX1RFTVBMQVRFXyBUNDEsIEdURVNUX1RFTVBMQVRFXyBUNDI+Ci1z
dHJ1Y3QgVGVtcGxhdGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwg
VDExLCBUMTIsIFQxMywgVDE0LAotICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQy
MSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LCBUMjksCi0gICAgVDMwLCBUMzEs
IFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwgVDQyLCBO
b25lVCwKLSAgICBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25l
VD4gewotICB0eXBlZGVmIFRlbXBsYXRlczQyPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBU
OCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4
LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LAotICAgICAgVDI4
LCBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwg
VDQwLCBUNDEsCi0gICAgICBUNDI+IHR5cGU7Ci19OwotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRF
XyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAg
ICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVf
IFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNU
X1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVf
IFQxNCwgR1RFU1RfVEVNUExBVEVfIFQxNSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBHVEVT
VF9URU1QTEFURV8gVDE3LCBHVEVTVF9URU1QTEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBMQVRF
XyBUMTksIEdURVNUX1RFTVBMQVRFXyBUMjAsIEdURVNUX1RFTVBMQVRFXyBUMjEsCi0gICAgR1RF
U1RfVEVNUExBVEVfIFQyMiwgR1RFU1RfVEVNUExBVEVfIFQyMywgR1RFU1RfVEVNUExBVEVfIFQy
NCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDI1LCBHVEVTVF9URU1QTEFURV8gVDI2LCBHVEVTVF9U
RU1QTEFURV8gVDI3LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjgsIEdURVNUX1RFTVBMQVRFXyBU
MjksIEdURVNUX1RFTVBMQVRFXyBUMzAsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzMSwgR1RFU1Rf
VEVNUExBVEVfIFQzMiwgR1RFU1RfVEVNUExBVEVfIFQzMywKLSAgICBHVEVTVF9URU1QTEFURV8g
VDM0LCBHVEVTVF9URU1QTEFURV8gVDM1LCBHVEVTVF9URU1QTEFURV8gVDM2LAotICAgIEdURVNU
X1RFTVBMQVRFXyBUMzcsIEdURVNUX1RFTVBMQVRFXyBUMzgsIEdURVNUX1RFTVBMQVRFXyBUMzks
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQ0MCwgR1RFU1RfVEVNUExBVEVfIFQ0MSwgR1RFU1RfVEVN
UExBVEVfIFQ0MiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDQzPgotc3RydWN0IFRlbXBsYXRlczxU
MSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsIFQx
NCwKLSAgICBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQyMiwgVDIzLCBUMjQs
IFQyNSwgVDI2LCBUMjcsIFQyOCwgVDI5LAotICAgIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBU
MzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLCBUNDEsIFQ0MiwgVDQzLAotICAgIE5vbmVULCBO
b25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVUPiB7Ci0gIHR5cGVkZWYgVGVt
cGxhdGVzNDM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQx
MiwgVDEzLAotICAgICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEsIFQy
MiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsCi0gICAgICBUMjgsIFQyOSwgVDMwLCBUMzEsIFQz
MiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwKLSAgICAgIFQ0
MiwgVDQzPiB0eXBlOwotfTsKLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVDEsIEdURVNUX1RF
TVBMQVRFXyBUMiwgR1RFU1RfVEVNUExBVEVfIFQzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNCwg
R1RFU1RfVEVNUExBVEVfIFQ1LCBHVEVTVF9URU1QTEFURV8gVDYsCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQ3LCBHVEVTVF9URU1QTEFURV8gVDgsIEdURVNUX1RFTVBMQVRFXyBUOSwKLSAgICBHVEVT
VF9URU1QTEFURV8gVDEwLCBHVEVTVF9URU1QTEFURV8gVDExLCBHVEVTVF9URU1QTEFURV8gVDEy
LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTMsIEdURVNUX1RFTVBMQVRFXyBUMTQsIEdURVNUX1RF
TVBMQVRFXyBUMTUsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxNiwgR1RFU1RfVEVNUExBVEVfIFQx
NywgR1RFU1RfVEVNUExBVEVfIFQxOCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE5LCBHVEVTVF9U
RU1QTEFURV8gVDIwLCBHVEVTVF9URU1QTEFURV8gVDIxLAotICAgIEdURVNUX1RFTVBMQVRFXyBU
MjIsIEdURVNUX1RFTVBMQVRFXyBUMjMsIEdURVNUX1RFTVBMQVRFXyBUMjQsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQyNSwgR1RFU1RfVEVNUExBVEVfIFQyNiwgR1RFU1RfVEVNUExBVEVfIFQyNywK
LSAgICBHVEVTVF9URU1QTEFURV8gVDI4LCBHVEVTVF9URU1QTEFURV8gVDI5LCBHVEVTVF9URU1Q
TEFURV8gVDMwLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzEsIEdURVNUX1RFTVBMQVRFXyBUMzIs
IEdURVNUX1RFTVBMQVRFXyBUMzMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzNCwgR1RFU1RfVEVN
UExBVEVfIFQzNSwgR1RFU1RfVEVNUExBVEVfIFQzNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDM3
LCBHVEVTVF9URU1QTEFURV8gVDM4LCBHVEVTVF9URU1QTEFURV8gVDM5LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUNDAsIEdURVNUX1RFTVBMQVRFXyBUNDEsIEdURVNUX1RFTVBMQVRFXyBUNDIsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQ0MywgR1RFU1RfVEVNUExBVEVfIFQ0ND4KLXN0cnVjdCBUZW1w
bGF0ZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEsIFQxMiwg
VDEzLCBUMTQsCi0gICAgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQy
MywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsIFQyOSwKLSAgICBUMzAsIFQzMSwgVDMyLCBUMzMs
IFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwgVDQxLCBUNDIsIFQ0MywgVDQ0LAot
ICAgIE5vbmVULCBOb25lVCwgTm9uZVQsIE5vbmVULCBOb25lVCwgTm9uZVQ+IHsKLSAgdHlwZWRl
ZiBUZW1wbGF0ZXM0NDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQx
MSwgVDEyLCBUMTMsCi0gICAgICBUMTQsIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQy
MSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywKLSAgICAgIFQyOCwgVDI5LCBUMzAsIFQz
MSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwgVDQxLAotICAg
ICAgVDQyLCBUNDMsIFQ0ND4gdHlwZTsKLX07Ci10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVfIFQx
LCBHVEVTVF9URU1QTEFURV8gVDIsIEdURVNUX1RFTVBMQVRFXyBUMywKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDQsIEdURVNUX1RFTVBMQVRFXyBUNSwgR1RFU1RfVEVNUExBVEVfIFQ2LAotICAgIEdU
RVNUX1RFTVBMQVRFXyBUNywgR1RFU1RfVEVNUExBVEVfIFQ4LCBHVEVTVF9URU1QTEFURV8gVDks
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQxMCwgR1RFU1RfVEVNUExBVEVfIFQxMSwgR1RFU1RfVEVN
UExBVEVfIFQxMiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDEzLCBHVEVTVF9URU1QTEFURV8gVDE0
LCBHVEVTVF9URU1QTEFURV8gVDE1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTYsIEdURVNUX1RF
TVBMQVRFXyBUMTcsIEdURVNUX1RFTVBMQVRFXyBUMTgsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQx
OSwgR1RFU1RfVEVNUExBVEVfIFQyMCwgR1RFU1RfVEVNUExBVEVfIFQyMSwKLSAgICBHVEVTVF9U
RU1QTEFURV8gVDIyLCBHVEVTVF9URU1QTEFURV8gVDIzLCBHVEVTVF9URU1QTEFURV8gVDI0LAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUMjUsIEdURVNUX1RFTVBMQVRFXyBUMjYsIEdURVNUX1RFTVBM
QVRFXyBUMjcsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyOCwgR1RFU1RfVEVNUExBVEVfIFQyOSwg
R1RFU1RfVEVNUExBVEVfIFQzMCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDMxLCBHVEVTVF9URU1Q
TEFURV8gVDMyLCBHVEVTVF9URU1QTEFURV8gVDMzLAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzQs
IEdURVNUX1RFTVBMQVRFXyBUMzUsIEdURVNUX1RFTVBMQVRFXyBUMzYsCi0gICAgR1RFU1RfVEVN
UExBVEVfIFQzNywgR1RFU1RfVEVNUExBVEVfIFQzOCwgR1RFU1RfVEVNUExBVEVfIFQzOSwKLSAg
ICBHVEVTVF9URU1QTEFURV8gVDQwLCBHVEVTVF9URU1QTEFURV8gVDQxLCBHVEVTVF9URU1QTEFU
RV8gVDQyLAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDMsIEdURVNUX1RFTVBMQVRFXyBUNDQsIEdU
RVNUX1RFTVBMQVRFXyBUNDU+Ci1zdHJ1Y3QgVGVtcGxhdGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwg
VDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAotICAgIFQxNSwgVDE2LCBU
MTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4
LCBUMjksCi0gICAgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwg
VDM5LCBUNDAsIFQ0MSwgVDQyLCBUNDMsIFQ0NCwKLSAgICBUNDUsIE5vbmVULCBOb25lVCwgTm9u
ZVQsIE5vbmVULCBOb25lVD4gewotICB0eXBlZGVmIFRlbXBsYXRlczQ1PFQxLCBUMiwgVDMsIFQ0
LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICAgIFQxNCwgVDE1
LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwg
VDI3LAotICAgICAgVDI4LCBUMjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwg
VDM3LCBUMzgsIFQzOSwgVDQwLCBUNDEsCi0gICAgICBUNDIsIFQ0MywgVDQ0LCBUNDU+IHR5cGU7
Ci19OwotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBH
VEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFU
RV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNU
X1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBU
MTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1Rf
VEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQxNSwK
LSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBHVEVTVF9URU1QTEFURV8gVDE3LCBHVEVTVF9URU1Q
TEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTksIEdURVNUX1RFTVBMQVRFXyBUMjAs
IEdURVNUX1RFTVBMQVRFXyBUMjEsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyMiwgR1RFU1RfVEVN
UExBVEVfIFQyMywgR1RFU1RfVEVNUExBVEVfIFQyNCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDI1
LCBHVEVTVF9URU1QTEFURV8gVDI2LCBHVEVTVF9URU1QTEFURV8gVDI3LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUMjgsIEdURVNUX1RFTVBMQVRFXyBUMjksIEdURVNUX1RFTVBMQVRFXyBUMzAsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQzMSwgR1RFU1RfVEVNUExBVEVfIFQzMiwgR1RFU1RfVEVNUExB
VEVfIFQzMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDM0LCBHVEVTVF9URU1QTEFURV8gVDM1LCBH
VEVTVF9URU1QTEFURV8gVDM2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzcsIEdURVNUX1RFTVBM
QVRFXyBUMzgsIEdURVNUX1RFTVBMQVRFXyBUMzksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0MCwg
R1RFU1RfVEVNUExBVEVfIFQ0MSwgR1RFU1RfVEVNUExBVEVfIFQ0MiwKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDQzLCBHVEVTVF9URU1QTEFURV8gVDQ0LCBHVEVTVF9URU1QTEFURV8gVDQ1LAotICAg
IEdURVNUX1RFTVBMQVRFXyBUNDY+Ci1zdHJ1Y3QgVGVtcGxhdGVzPFQxLCBUMiwgVDMsIFQ0LCBU
NSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywgVDE0LAotICAgIFQxNSwgVDE2
LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywg
VDI4LCBUMjksCi0gICAgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQz
OCwgVDM5LCBUNDAsIFQ0MSwgVDQyLCBUNDMsIFQ0NCwKLSAgICBUNDUsIFQ0NiwgTm9uZVQsIE5v
bmVULCBOb25lVCwgTm9uZVQ+IHsKLSAgdHlwZWRlZiBUZW1wbGF0ZXM0NjxUMSwgVDIsIFQzLCBU
NCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLCBUMTMsCi0gICAgICBUMTQsIFQx
NSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYs
IFQyNywKLSAgICAgIFQyOCwgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYs
IFQzNywgVDM4LCBUMzksIFQ0MCwgVDQxLAotICAgICAgVDQyLCBUNDMsIFQ0NCwgVDQ1LCBUNDY+
IHR5cGU7Ci19OwotdGVtcGxhdGUgPEdURVNUX1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVf
IFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9U
RU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBUNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcs
IEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVNUExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBM
QVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEsIEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVNUExBVEVfIFQxNCwgR1RFU1RfVEVNUExBVEVf
IFQxNSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE2LCBHVEVTVF9URU1QTEFURV8gVDE3LCBHVEVT
VF9URU1QTEFURV8gVDE4LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTksIEdURVNUX1RFTVBMQVRF
XyBUMjAsIEdURVNUX1RFTVBMQVRFXyBUMjEsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQyMiwgR1RF
U1RfVEVNUExBVEVfIFQyMywgR1RFU1RfVEVNUExBVEVfIFQyNCwKLSAgICBHVEVTVF9URU1QTEFU
RV8gVDI1LCBHVEVTVF9URU1QTEFURV8gVDI2LCBHVEVTVF9URU1QTEFURV8gVDI3LAotICAgIEdU
RVNUX1RFTVBMQVRFXyBUMjgsIEdURVNUX1RFTVBMQVRFXyBUMjksIEdURVNUX1RFTVBMQVRFXyBU
MzAsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzMSwgR1RFU1RfVEVNUExBVEVfIFQzMiwgR1RFU1Rf
VEVNUExBVEVfIFQzMywKLSAgICBHVEVTVF9URU1QTEFURV8gVDM0LCBHVEVTVF9URU1QTEFURV8g
VDM1LCBHVEVTVF9URU1QTEFURV8gVDM2LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMzcsIEdURVNU
X1RFTVBMQVRFXyBUMzgsIEdURVNUX1RFTVBMQVRFXyBUMzksCi0gICAgR1RFU1RfVEVNUExBVEVf
IFQ0MCwgR1RFU1RfVEVNUExBVEVfIFQ0MSwgR1RFU1RfVEVNUExBVEVfIFQ0MiwKLSAgICBHVEVT
VF9URU1QTEFURV8gVDQzLCBHVEVTVF9URU1QTEFURV8gVDQ0LCBHVEVTVF9URU1QTEFURV8gVDQ1
LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDYsIEdURVNUX1RFTVBMQVRFXyBUNDc+Ci1zdHJ1Y3Qg
VGVtcGxhdGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBU
MTIsIFQxMywgVDE0LAotICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIy
LCBUMjMsIFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LCBUMjksCi0gICAgVDMwLCBUMzEsIFQzMiwg
VDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwgVDQyLCBUNDMsIFQ0
NCwKLSAgICBUNDUsIFQ0NiwgVDQ3LCBOb25lVCwgTm9uZVQsIE5vbmVUPiB7Ci0gIHR5cGVkZWYg
VGVtcGxhdGVzNDc8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOSwgVDEwLCBUMTEs
IFQxMiwgVDEzLAotICAgICAgVDE0LCBUMTUsIFQxNiwgVDE3LCBUMTgsIFQxOSwgVDIwLCBUMjEs
IFQyMiwgVDIzLCBUMjQsIFQyNSwgVDI2LCBUMjcsCi0gICAgICBUMjgsIFQyOSwgVDMwLCBUMzEs
IFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwKLSAgICAg
IFQ0MiwgVDQzLCBUNDQsIFQ0NSwgVDQ2LCBUNDc+IHR5cGU7Ci19OwotdGVtcGxhdGUgPEdURVNU
X1RFTVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRF
XyBUNiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1Rf
VEVNUExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBU
MTEsIEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMywgR1RFU1Rf
VEVNUExBVEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQxNSwKLSAgICBHVEVTVF9URU1QTEFURV8g
VDE2LCBHVEVTVF9URU1QTEFURV8gVDE3LCBHVEVTVF9URU1QTEFURV8gVDE4LAotICAgIEdURVNU
X1RFTVBMQVRFXyBUMTksIEdURVNUX1RFTVBMQVRFXyBUMjAsIEdURVNUX1RFTVBMQVRFXyBUMjEs
Ci0gICAgR1RFU1RfVEVNUExBVEVfIFQyMiwgR1RFU1RfVEVNUExBVEVfIFQyMywgR1RFU1RfVEVN
UExBVEVfIFQyNCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDI1LCBHVEVTVF9URU1QTEFURV8gVDI2
LCBHVEVTVF9URU1QTEFURV8gVDI3LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjgsIEdURVNUX1RF
TVBMQVRFXyBUMjksIEdURVNUX1RFTVBMQVRFXyBUMzAsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQz
MSwgR1RFU1RfVEVNUExBVEVfIFQzMiwgR1RFU1RfVEVNUExBVEVfIFQzMywKLSAgICBHVEVTVF9U
RU1QTEFURV8gVDM0LCBHVEVTVF9URU1QTEFURV8gVDM1LCBHVEVTVF9URU1QTEFURV8gVDM2LAot
ICAgIEdURVNUX1RFTVBMQVRFXyBUMzcsIEdURVNUX1RFTVBMQVRFXyBUMzgsIEdURVNUX1RFTVBM
QVRFXyBUMzksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0MCwgR1RFU1RfVEVNUExBVEVfIFQ0MSwg
R1RFU1RfVEVNUExBVEVfIFQ0MiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDQzLCBHVEVTVF9URU1Q
TEFURV8gVDQ0LCBHVEVTVF9URU1QTEFURV8gVDQ1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDYs
IEdURVNUX1RFTVBMQVRFXyBUNDcsIEdURVNUX1RFTVBMQVRFXyBUNDg+Ci1zdHJ1Y3QgVGVtcGxh
dGVzPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQx
MywgVDE0LAotICAgIFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMs
IFQyNCwgVDI1LCBUMjYsIFQyNywgVDI4LCBUMjksCi0gICAgVDMwLCBUMzEsIFQzMiwgVDMzLCBU
MzQsIFQzNSwgVDM2LCBUMzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwgVDQyLCBUNDMsIFQ0NCwKLSAg
ICBUNDUsIFQ0NiwgVDQ3LCBUNDgsIE5vbmVULCBOb25lVD4gewotICB0eXBlZGVmIFRlbXBsYXRl
czQ4PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQx
MywKLSAgICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBUMTksIFQyMCwgVDIxLCBUMjIsIFQy
MywgVDI0LCBUMjUsIFQyNiwgVDI3LAotICAgICAgVDI4LCBUMjksIFQzMCwgVDMxLCBUMzIsIFQz
MywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQwLCBUNDEsCi0gICAgICBUNDIsIFQ0
MywgVDQ0LCBUNDUsIFQ0NiwgVDQ3LCBUNDg+IHR5cGU7Ci19OwotdGVtcGxhdGUgPEdURVNUX1RF
TVBMQVRFXyBUMSwgR1RFU1RfVEVNUExBVEVfIFQyLCBHVEVTVF9URU1QTEFURV8gVDMsCi0gICAg
R1RFU1RfVEVNUExBVEVfIFQ0LCBHVEVTVF9URU1QTEFURV8gVDUsIEdURVNUX1RFTVBMQVRFXyBU
NiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDcsIEdURVNUX1RFTVBMQVRFXyBUOCwgR1RFU1RfVEVN
UExBVEVfIFQ5LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMTAsIEdURVNUX1RFTVBMQVRFXyBUMTEs
IEdURVNUX1RFTVBMQVRFXyBUMTIsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQxMywgR1RFU1RfVEVN
UExBVEVfIFQxNCwgR1RFU1RfVEVNUExBVEVfIFQxNSwKLSAgICBHVEVTVF9URU1QTEFURV8gVDE2
LCBHVEVTVF9URU1QTEFURV8gVDE3LCBHVEVTVF9URU1QTEFURV8gVDE4LAotICAgIEdURVNUX1RF
TVBMQVRFXyBUMTksIEdURVNUX1RFTVBMQVRFXyBUMjAsIEdURVNUX1RFTVBMQVRFXyBUMjEsCi0g
ICAgR1RFU1RfVEVNUExBVEVfIFQyMiwgR1RFU1RfVEVNUExBVEVfIFQyMywgR1RFU1RfVEVNUExB
VEVfIFQyNCwKLSAgICBHVEVTVF9URU1QTEFURV8gVDI1LCBHVEVTVF9URU1QTEFURV8gVDI2LCBH
VEVTVF9URU1QTEFURV8gVDI3LAotICAgIEdURVNUX1RFTVBMQVRFXyBUMjgsIEdURVNUX1RFTVBM
QVRFXyBUMjksIEdURVNUX1RFTVBMQVRFXyBUMzAsCi0gICAgR1RFU1RfVEVNUExBVEVfIFQzMSwg
R1RFU1RfVEVNUExBVEVfIFQzMiwgR1RFU1RfVEVNUExBVEVfIFQzMywKLSAgICBHVEVTVF9URU1Q
TEFURV8gVDM0LCBHVEVTVF9URU1QTEFURV8gVDM1LCBHVEVTVF9URU1QTEFURV8gVDM2LAotICAg
IEdURVNUX1RFTVBMQVRFXyBUMzcsIEdURVNUX1RFTVBMQVRFXyBUMzgsIEdURVNUX1RFTVBMQVRF
XyBUMzksCi0gICAgR1RFU1RfVEVNUExBVEVfIFQ0MCwgR1RFU1RfVEVNUExBVEVfIFQ0MSwgR1RF
U1RfVEVNUExBVEVfIFQ0MiwKLSAgICBHVEVTVF9URU1QTEFURV8gVDQzLCBHVEVTVF9URU1QTEFU
RV8gVDQ0LCBHVEVTVF9URU1QTEFURV8gVDQ1LAotICAgIEdURVNUX1RFTVBMQVRFXyBUNDYsIEdU
RVNUX1RFTVBMQVRFXyBUNDcsIEdURVNUX1RFTVBMQVRFXyBUNDgsCi0gICAgR1RFU1RfVEVNUExB
VEVfIFQ0OT4KLXN0cnVjdCBUZW1wbGF0ZXM8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4
LCBUOSwgVDEwLCBUMTEsIFQxMiwgVDEzLCBUMTQsCi0gICAgVDE1LCBUMTYsIFQxNywgVDE4LCBU
MTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LCBUMjgsIFQyOSwKLSAg
ICBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBUMzYsIFQzNywgVDM4LCBUMzksIFQ0MCwg
VDQxLCBUNDIsIFQ0MywgVDQ0LAotICAgIFQ0NSwgVDQ2LCBUNDcsIFQ0OCwgVDQ5LCBOb25lVD4g
ewotICB0eXBlZGVmIFRlbXBsYXRlczQ5PFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwg
VDksIFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICAgIFQxNCwgVDE1LCBUMTYsIFQxNywgVDE4LCBU
MTksIFQyMCwgVDIxLCBUMjIsIFQyMywgVDI0LCBUMjUsIFQyNiwgVDI3LAotICAgICAgVDI4LCBU
MjksIFQzMCwgVDMxLCBUMzIsIFQzMywgVDM0LCBUMzUsIFQzNiwgVDM3LCBUMzgsIFQzOSwgVDQw
LCBUNDEsCi0gICAgICBUNDIsIFQ0MywgVDQ0LCBUNDUsIFQ0NiwgVDQ3LCBUNDgsIFQ0OT4gdHlw
ZTsKLX07Ci0KLS8vIFRoZSBUeXBlTGlzdCB0ZW1wbGF0ZSBtYWtlcyBpdCBwb3NzaWJsZSB0byB1
c2UgZWl0aGVyIGEgc2luZ2xlIHR5cGUKLS8vIG9yIGEgVHlwZXM8Li4uPiBsaXN0IGluIFRZUEVE
X1RFU1RfQ0FTRSgpIGFuZAotLy8gSU5TVEFOVElBVEVfVFlQRURfVEVTVF9DQVNFX1AoKS4KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgVHlwZUxpc3QgewotICB0eXBlZGVmIFR5cGVz
MTxUPiB0eXBlOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlw
ZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwKLSAgICB0eXBlbmFtZSBUNiwgdHlw
ZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLAotICAgIHR5
cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlw
ZW5hbWUgVDE1LAotICAgIHR5cGVuYW1lIFQxNiwgdHlwZW5hbWUgVDE3LCB0eXBlbmFtZSBUMTgs
IHR5cGVuYW1lIFQxOSwgdHlwZW5hbWUgVDIwLAotICAgIHR5cGVuYW1lIFQyMSwgdHlwZW5hbWUg
VDIyLCB0eXBlbmFtZSBUMjMsIHR5cGVuYW1lIFQyNCwgdHlwZW5hbWUgVDI1LAotICAgIHR5cGVu
YW1lIFQyNiwgdHlwZW5hbWUgVDI3LCB0eXBlbmFtZSBUMjgsIHR5cGVuYW1lIFQyOSwgdHlwZW5h
bWUgVDMwLAotICAgIHR5cGVuYW1lIFQzMSwgdHlwZW5hbWUgVDMyLCB0eXBlbmFtZSBUMzMsIHR5
cGVuYW1lIFQzNCwgdHlwZW5hbWUgVDM1LAotICAgIHR5cGVuYW1lIFQzNiwgdHlwZW5hbWUgVDM3
LCB0eXBlbmFtZSBUMzgsIHR5cGVuYW1lIFQzOSwgdHlwZW5hbWUgVDQwLAotICAgIHR5cGVuYW1l
IFQ0MSwgdHlwZW5hbWUgVDQyLCB0eXBlbmFtZSBUNDMsIHR5cGVuYW1lIFQ0NCwgdHlwZW5hbWUg
VDQ1LAotICAgIHR5cGVuYW1lIFQ0NiwgdHlwZW5hbWUgVDQ3LCB0eXBlbmFtZSBUNDgsIHR5cGVu
YW1lIFQ0OSwgdHlwZW5hbWUgVDUwPgotc3RydWN0IFR5cGVMaXN0PFR5cGVzPFQxLCBUMiwgVDMs
IFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMCwgVDExLCBUMTIsIFQxMywKLSAgICBUMTQsIFQx
NSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBUMjYs
IFQyNywgVDI4LAotICAgIFQyOSwgVDMwLCBUMzEsIFQzMiwgVDMzLCBUMzQsIFQzNSwgVDM2LCBU
MzcsIFQzOCwgVDM5LCBUNDAsIFQ0MSwgVDQyLCBUNDMsCi0gICAgVDQ0LCBUNDUsIFQ0NiwgVDQ3
LCBUNDgsIFQ0OSwgVDUwPiA+IHsKLSAgdHlwZWRlZiB0eXBlbmFtZSBUeXBlczxUMSwgVDIsIFQz
LCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTAsIFQxMSwgVDEyLAotICAgICAgVDEzLCBUMTQs
IFQxNSwgVDE2LCBUMTcsIFQxOCwgVDE5LCBUMjAsIFQyMSwgVDIyLCBUMjMsIFQyNCwgVDI1LCBU
MjYsCi0gICAgICBUMjcsIFQyOCwgVDI5LCBUMzAsIFQzMSwgVDMyLCBUMzMsIFQzNCwgVDM1LCBU
MzYsIFQzNywgVDM4LCBUMzksIFQ0MCwKLSAgICAgIFQ0MSwgVDQyLCBUNDMsIFQ0NCwgVDQ1LCBU
NDYsIFQ0NywgVDQ4LCBUNDksIFQ1MD46OnR5cGUgdHlwZTsKLX07Ci0KLSNlbmRpZiAgLy8gR1RF
U1RfSEFTX1RZUEVEX1RFU1QgfHwgR1RFU1RfSEFTX1RZUEVEX1RFU1RfUAotCi19ICAvLyBuYW1l
c3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSB0ZXN0aW5nCi0KLSNlbmRpZiAgLy8gR1RF
U1RfSU5DTFVERV9HVEVTVF9JTlRFUk5BTF9HVEVTVF9UWVBFX1VUSUxfSF8KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3QvaW5j
bHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC10eXBlLXV0aWwuaC5wdW1wIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2lu
dGVybmFsL2d0ZXN0LXR5cGUtdXRpbC5oLnB1bXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDI1MWZkZjAyNWIyYzUzMTFmYWY5NWU4NmUzMzBmZTkyMWM2MGRhZGIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2d0
ZXN0LXR5cGUtdXRpbC5oLnB1bXAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotJCQg
LSotIG1vZGU6IGMrKzsgLSotCi0kdmFyIG4gPSA1MCAgJCQgTWF4aW11bSBsZW5ndGggb2YgdHlw
ZSBsaXN0cyB3ZSB3YW50IHRvIHN1cHBvcnQuCi0vLyBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5j
LgotLy8gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLS8vCi0vLyBBdXRob3I6IHdhbkBnb29nbGUuY29tIChaaGFueW9uZyBX
YW4pCi0KLS8vIFR5cGUgdXRpbGl0aWVzIG5lZWRlZCBmb3IgaW1wbGVtZW50aW5nIHR5cGVkIGFu
ZCB0eXBlLXBhcmFtZXRlcml6ZWQKLS8vIHRlc3RzLiAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBi
eSBhIFNDUklQVC4gIERPIE5PVCBFRElUIEJZIEhBTkQhCi0vLwotLy8gQ3VycmVudGx5IHdlIHN1
cHBvcnQgYXQgbW9zdCAkbiB0eXBlcyBpbiBhIGxpc3QsIGFuZCBhdCBtb3N0ICRuCi0vLyB0eXBl
LXBhcmFtZXRlcml6ZWQgdGVzdHMgaW4gb25lIHR5cGUtcGFyYW1ldGVyaXplZCB0ZXN0IGNhc2Uu
Ci0vLyBQbGVhc2UgY29udGFjdCBnb29nbGV0ZXN0ZnJhbWV3b3JrQGdvb2dsZWdyb3Vwcy5jb20g
aWYgeW91IG5lZWQKLS8vIG1vcmUuCi0KLSNpZm5kZWYgR1RFU1RfSU5DTFVERV9HVEVTVF9JTlRF
Uk5BTF9HVEVTVF9UWVBFX1VUSUxfSF8KLSNkZWZpbmUgR1RFU1RfSU5DTFVERV9HVEVTVF9JTlRF
Uk5BTF9HVEVTVF9UWVBFX1VUSUxfSF8KLQotI2luY2x1ZGUgImd0ZXN0L2ludGVybmFsL2d0ZXN0
LXBvcnQuaCIKLQotLy8gI2lmZGVmIF9fR05VQ19fIGlzIHRvbyBnZW5lcmFsIGhlcmUuICBJdCBp
cyBwb3NzaWJsZSB0byB1c2UgZ2NjIHdpdGhvdXQgdXNpbmcKLS8vIGxpYnN0ZGMrKyAod2hpY2gg
aXMgd2hlcmUgY3h4YWJpLmggY29tZXMgZnJvbSkuCi0jIGlmIEdURVNUX0hBU19DWFhBQklfSF8K
LSMgIGluY2x1ZGUgPGN4eGFiaS5oPgotIyBlbGlmIGRlZmluZWQoX19IUF9hQ0MpCi0jICBpbmNs
dWRlIDxhY3h4X2RlbWFuZ2xlLmg+Ci0jIGVuZGlmICAvLyBHVEVTVF9IQVNIX0NYWEFCSV9IXwot
Ci1uYW1lc3BhY2UgdGVzdGluZyB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi0vLyBHZXRUeXBl
TmFtZTxUPigpIHJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBuYW1lIG9mIHR5cGUgVC4KLS8vIE5C
OiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCBpbiBHb29nbGUgTW9jaywgc28gZG9uJ3QgbW92
ZSBpdCBpbnNpZGUgb2YKLS8vIHRoZSB0eXBlZC10ZXN0LW9ubHkgc2VjdGlvbiBiZWxvdy4KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotc3RkOjpzdHJpbmcgR2V0VHlwZU5hbWUoKSB7Ci0jIGlmIEdU
RVNUX0hBU19SVFRJCi0KLSAgY29uc3QgY2hhciogY29uc3QgbmFtZSA9IHR5cGVpZChUKS5uYW1l
KCk7Ci0jICBpZiBHVEVTVF9IQVNfQ1hYQUJJX0hfIHx8IGRlZmluZWQoX19IUF9hQ0MpCi0gIGlu
dCBzdGF0dXMgPSAwOwotICAvLyBnY2MncyBpbXBsZW1lbnRhdGlvbiBvZiB0eXBlaWQoVCkubmFt
ZSgpIG1hbmdsZXMgdGhlIHR5cGUgbmFtZSwKLSAgLy8gc28gd2UgaGF2ZSB0byBkZW1hbmdsZSBp
dC4KLSMgICBpZiBHVEVTVF9IQVNfQ1hYQUJJX0hfCi0gIHVzaW5nIGFiaTo6X19jeGFfZGVtYW5n
bGU7Ci0jICAgZW5kaWYgIC8vIEdURVNUX0hBU19DWFhBQklfSF8KLSAgY2hhciogY29uc3QgcmVh
ZGFibGVfbmFtZSA9IF9fY3hhX2RlbWFuZ2xlKG5hbWUsIDAsIDAsICZzdGF0dXMpOwotICBjb25z
dCBzdGQ6OnN0cmluZyBuYW1lX3N0cihzdGF0dXMgPT0gMCA/IHJlYWRhYmxlX25hbWUgOiBuYW1l
KTsKLSAgZnJlZShyZWFkYWJsZV9uYW1lKTsKLSAgcmV0dXJuIG5hbWVfc3RyOwotIyAgZWxzZQot
ICByZXR1cm4gbmFtZTsKLSMgIGVuZGlmICAvLyBHVEVTVF9IQVNfQ1hYQUJJX0hfIHx8IF9fSFBf
YUNDCi0KLSMgZWxzZQotCi0gIHJldHVybiAiPHR5cGU+IjsKLQotIyBlbmRpZiAgLy8gR1RFU1Rf
SEFTX1JUVEkKLX0KLQotI2lmIEdURVNUX0hBU19UWVBFRF9URVNUIHx8IEdURVNUX0hBU19UWVBF
RF9URVNUX1AKLQotLy8gQXNzZXJ0eVR5cGVFcTxUMSwgVDI+Ojp0eXBlIGlzIGRlZmluZWQgaWZm
IFQxIGFuZCBUMiBhcmUgdGhlIHNhbWUKLS8vIHR5cGUuICBUaGlzIGNhbiBiZSB1c2VkIGFzIGEg
Y29tcGlsZS10aW1lIGFzc2VydGlvbiB0byBlbnN1cmUgdGhhdAotLy8gdHdvIHR5cGVzIGFyZSBl
cXVhbC4KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KLXN0cnVjdCBBc3Nl
cnRUeXBlRXE7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IEFzc2VydFR5cGVFcTxU
LCBUPiB7Ci0gIHR5cGVkZWYgYm9vbCB0eXBlOwotfTsKLQotLy8gQSB1bmlxdWUgdHlwZSB1c2Vk
IGFzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYXJndW1lbnRzIG9mIGNsYXNzCi0vLyB0ZW1w
bGF0ZSBUeXBlcy4gIFRoaXMgYWxsb3dzIHVzIHRvIHNpbXVsYXRlIHZhcmlhZGljIHRlbXBsYXRl
cwotLy8gKGUuZy4gVHlwZXM8aW50PiwgVHlwZTxpbnQsIGRvdWJsZT4sIGFuZCBldGMpLCB3aGlj
aCBDKysgZG9lc24ndAotLy8gc3VwcG9ydCBkaXJlY3RseS4KLXN0cnVjdCBOb25lIHt9OwotCi0v
LyBUaGUgZm9sbG93aW5nIGZhbWlseSBvZiBzdHJ1Y3QgYW5kIHN0cnVjdCB0ZW1wbGF0ZXMgYXJl
IHVzZWQgdG8KLS8vIHJlcHJlc2VudCB0eXBlIGxpc3RzLiAgSW4gcGFydGljdWxhciwgVHlwZXNO
PFQxLCBUMiwgLi4uLCBUTj4KLS8vIHJlcHJlc2VudHMgYSB0eXBlIGxpc3Qgd2l0aCBOIHR5cGVz
IChUMSwgVDIsIC4uLiwgYW5kIFROKSBpbiBpdC4KLS8vIEV4Y2VwdCBmb3IgVHlwZXMwLCBldmVy
eSBzdHJ1Y3QgaW4gdGhlIGZhbWlseSBoYXMgdHdvIG1lbWJlciB0eXBlczoKLS8vIEhlYWQgZm9y
IHRoZSBmaXJzdCB0eXBlIGluIHRoZSBsaXN0LCBhbmQgVGFpbCBmb3IgdGhlIHJlc3Qgb2YgdGhl
Ci0vLyBsaXN0LgotCi0vLyBUaGUgZW1wdHkgdHlwZSBsaXN0Lgotc3RydWN0IFR5cGVzMCB7fTsK
LQotLy8gVHlwZSBsaXN0cyBvZiBsZW5ndGggMSwgMiwgMywgYW5kIHNvIG9uLgotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVDE+Ci1zdHJ1Y3QgVHlwZXMxIHsKLSAgdHlwZWRlZiBUMSBIZWFkOwotICB0
eXBlZGVmIFR5cGVzMCBUYWlsOwotfTsKLQotJHJhbmdlIGkgMi4ubgotCi0kZm9yIGkgW1sKLSRy
YW5nZSBqIDEuLmkKLSRyYW5nZSBrIDIuLmkKLXRlbXBsYXRlIDwkZm9yIGosIFtbdHlwZW5hbWUg
VCRqXV0+Ci1zdHJ1Y3QgVHlwZXMkaSB7Ci0gIHR5cGVkZWYgVDEgSGVhZDsKLSAgdHlwZWRlZiBU
eXBlcyQoaS0xKTwkZm9yIGssIFtbVCRrXV0+IFRhaWw7Ci19OwotCi0KLV1dCi0KLX0gIC8vIG5h
bWVzcGFjZSBpbnRlcm5hbAotCi0vLyBXZSBkb24ndCB3YW50IHRvIHJlcXVpcmUgdGhlIHVzZXJz
IHRvIHdyaXRlIFR5cGVzTjwuLi4+IGRpcmVjdGx5LAotLy8gYXMgdGhhdCB3b3VsZCByZXF1aXJl
IHRoZW0gdG8gY291bnQgdGhlIGxlbmd0aC4gIFR5cGVzPC4uLj4gaXMgbXVjaAotLy8gZWFzaWVy
IHRvIHdyaXRlLCBidXQgZ2VuZXJhdGVzIGhvcnJpYmxlIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMg
YQotLy8gY29tcGlsZXIgZXJyb3IsIGFzIGdjYyBpbnNpc3RzIG9uIHByaW50aW5nIG91dCBlYWNo
IHRlbXBsYXRlCi0vLyBhcmd1bWVudCwgZXZlbiBpZiBpdCBoYXMgdGhlIGRlZmF1bHQgdmFsdWUg
KHRoaXMgbWVhbnMgVHlwZXM8aW50PgotLy8gd2lsbCBhcHBlYXIgYXMgVHlwZXM8aW50LCBOb25l
LCBOb25lLCAuLi4sIE5vbmU+IGluIHRoZSBjb21waWxlcgotLy8gZXJyb3JzKS4KLS8vCi0vLyBP
dXIgc29sdXRpb24gaXMgdG8gY29tYmluZSB0aGUgYmVzdCBwYXJ0IG9mIHRoZSB0d28gYXBwcm9h
Y2hlczogYQotLy8gdXNlciB3b3VsZCB3cml0ZSBUeXBlczxUMSwgLi4uLCBUTj4sIGFuZCBHb29n
bGUgVGVzdCB3aWxsIHRyYW5zbGF0ZQotLy8gdGhhdCB0byBUeXBlc048VDEsIC4uLiwgVE4+IGlu
dGVybmFsbHkgdG8gbWFrZSBlcnJvciBtZXNzYWdlcwotLy8gcmVhZGFibGUuICBUaGUgdHJhbnNs
YXRpb24gaXMgZG9uZSBieSB0aGUgJ3R5cGUnIG1lbWJlciBvZiB0aGUKLS8vIFR5cGVzIHRlbXBs
YXRlLgotCi0kcmFuZ2UgaSAxLi5uCi10ZW1wbGF0ZSA8JGZvciBpLCBbW3R5cGVuYW1lIFQkaSA9
IGludGVybmFsOjpOb25lXV0+Ci1zdHJ1Y3QgVHlwZXMgewotICB0eXBlZGVmIGludGVybmFsOjpU
eXBlcyRuPCRmb3IgaSwgW1tUJGldXT4gdHlwZTsKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3Qg
VHlwZXM8JGZvciBpLCBbW2ludGVybmFsOjpOb25lXV0+IHsKLSAgdHlwZWRlZiBpbnRlcm5hbDo6
VHlwZXMwIHR5cGU7Ci19OwotCi0kcmFuZ2UgaSAxLi5uLTEKLSRmb3IgaSBbWwotJHJhbmdlIGog
MS4uaQotJHJhbmdlIGsgaSsxLi5uCi10ZW1wbGF0ZSA8JGZvciBqLCBbW3R5cGVuYW1lIFQkal1d
Pgotc3RydWN0IFR5cGVzPCRmb3IgaiwgW1tUJGpdXSRmb3Iga1tbLCBpbnRlcm5hbDo6Tm9uZV1d
PiB7Ci0gIHR5cGVkZWYgaW50ZXJuYWw6OlR5cGVzJGk8JGZvciBqLCBbW1Qkal1dPiB0eXBlOwot
fTsKLQotXV0KLQotbmFtZXNwYWNlIGludGVybmFsIHsKLQotIyBkZWZpbmUgR1RFU1RfVEVNUExB
VEVfIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcwotCi0vLyBUaGUgdGVtcGxhdGUgInNlbGVj
dG9yIiBzdHJ1Y3QgVGVtcGxhdGVTZWw8VG1wbD4gaXMgdXNlZCB0bwotLy8gcmVwcmVzZW50IFRt
cGwsIHdoaWNoIG11c3QgYmUgYSBjbGFzcyB0ZW1wbGF0ZSB3aXRoIG9uZSB0eXBlCi0vLyBwYXJh
bWV0ZXIsIGFzIGEgdHlwZS4gIFRlbXBsYXRlU2VsPFRtcGw+OjpCaW5kPFQ+Ojp0eXBlIGlzIGRl
ZmluZWQKLS8vIGFzIHRoZSB0eXBlIFRtcGw8VD4uICBUaGlzIGFsbG93cyB1cyB0byBhY3R1YWxs
eSBpbnN0YW50aWF0ZSB0aGUKLS8vIHRlbXBsYXRlICJzZWxlY3RlZCIgYnkgVGVtcGxhdGVTZWw8
VG1wbD4uCi0vLwotLy8gVGhpcyB0cmljayBpcyBuZWNlc3NhcnkgZm9yIHNpbXVsYXRpbmcgdHlw
ZWRlZiBmb3IgY2xhc3MgdGVtcGxhdGVzLAotLy8gd2hpY2ggQysrIGRvZXNuJ3Qgc3VwcG9ydCBk
aXJlY3RseS4KLXRlbXBsYXRlIDxHVEVTVF9URU1QTEFURV8gVG1wbD4KLXN0cnVjdCBUZW1wbGF0
ZVNlbCB7Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBzdHJ1Y3QgQmluZCB7Ci0gICAgdHlw
ZWRlZiBUbXBsPFQ+IHR5cGU7Ci0gIH07Ci19OwotCi0jIGRlZmluZSBHVEVTVF9CSU5EXyhUbXBs
U2VsLCBUKSBcCi0gIFRtcGxTZWw6OnRlbXBsYXRlIEJpbmQ8VD46OnR5cGUKLQotLy8gQSB1bmlx
dWUgc3RydWN0IHRlbXBsYXRlIHVzZWQgYXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQotLy8g
YXJndW1lbnRzIG9mIGNsYXNzIHRlbXBsYXRlIFRlbXBsYXRlcy4gIFRoaXMgYWxsb3dzIHVzIHRv
IHNpbXVsYXRlCi0vLyB2YXJpYWRpYyB0ZW1wbGF0ZXMgKGUuZy4gVGVtcGxhdGVzPGludD4sIFRl
bXBsYXRlczxpbnQsIGRvdWJsZT4sCi0vLyBhbmQgZXRjKSwgd2hpY2ggQysrIGRvZXNuJ3Qgc3Vw
cG9ydCBkaXJlY3RseS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IE5vbmVUIHt9Owot
Ci0vLyBUaGUgZm9sbG93aW5nIGZhbWlseSBvZiBzdHJ1Y3QgYW5kIHN0cnVjdCB0ZW1wbGF0ZXMg
YXJlIHVzZWQgdG8KLS8vIHJlcHJlc2VudCB0ZW1wbGF0ZSBsaXN0cy4gIEluIHBhcnRpY3VsYXIs
IFRlbXBsYXRlc048VDEsIFQyLCAuLi4sCi0vLyBUTj4gcmVwcmVzZW50cyBhIGxpc3Qgb2YgTiB0
ZW1wbGF0ZXMgKFQxLCBUMiwgLi4uLCBhbmQgVE4pLiAgRXhjZXB0Ci0vLyBmb3IgVGVtcGxhdGVz
MCwgZXZlcnkgc3RydWN0IGluIHRoZSBmYW1pbHkgaGFzIHR3byBtZW1iZXIgdHlwZXM6Ci0vLyBI
ZWFkIGZvciB0aGUgc2VsZWN0b3Igb2YgdGhlIGZpcnN0IHRlbXBsYXRlIGluIHRoZSBsaXN0LCBh
bmQgVGFpbAotLy8gZm9yIHRoZSByZXN0IG9mIHRoZSBsaXN0LgotCi0vLyBUaGUgZW1wdHkgdGVt
cGxhdGUgbGlzdC4KLXN0cnVjdCBUZW1wbGF0ZXMwIHt9OwotCi0vLyBUZW1wbGF0ZSBsaXN0cyBv
ZiBsZW5ndGggMSwgMiwgMywgYW5kIHNvIG9uLgotCi10ZW1wbGF0ZSA8R1RFU1RfVEVNUExBVEVf
IFQxPgotc3RydWN0IFRlbXBsYXRlczEgewotICB0eXBlZGVmIFRlbXBsYXRlU2VsPFQxPiBIZWFk
OwotICB0eXBlZGVmIFRlbXBsYXRlczAgVGFpbDsKLX07Ci0KLSRyYW5nZSBpIDIuLm4KLQotJGZv
ciBpIFtbCi0kcmFuZ2UgaiAxLi5pCi0kcmFuZ2UgayAyLi5pCi10ZW1wbGF0ZSA8JGZvciBqLCBb
W0dURVNUX1RFTVBMQVRFXyBUJGpdXT4KLXN0cnVjdCBUZW1wbGF0ZXMkaSB7Ci0gIHR5cGVkZWYg
VGVtcGxhdGVTZWw8VDE+IEhlYWQ7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzJChpLTEpPCRmb3Igaywg
W1tUJGtdXT4gVGFpbDsKLX07Ci0KLQotXV0KLQotLy8gV2UgZG9uJ3Qgd2FudCB0byByZXF1aXJl
IHRoZSB1c2VycyB0byB3cml0ZSBUZW1wbGF0ZXNOPC4uLj4gZGlyZWN0bHksCi0vLyBhcyB0aGF0
IHdvdWxkIHJlcXVpcmUgdGhlbSB0byBjb3VudCB0aGUgbGVuZ3RoLiAgVGVtcGxhdGVzPC4uLj4g
aXMgbXVjaAotLy8gZWFzaWVyIHRvIHdyaXRlLCBidXQgZ2VuZXJhdGVzIGhvcnJpYmxlIG1lc3Nh
Z2VzIHdoZW4gdGhlcmUgaXMgYQotLy8gY29tcGlsZXIgZXJyb3IsIGFzIGdjYyBpbnNpc3RzIG9u
IHByaW50aW5nIG91dCBlYWNoIHRlbXBsYXRlCi0vLyBhcmd1bWVudCwgZXZlbiBpZiBpdCBoYXMg
dGhlIGRlZmF1bHQgdmFsdWUgKHRoaXMgbWVhbnMgVGVtcGxhdGVzPGxpc3Q+Ci0vLyB3aWxsIGFw
cGVhciBhcyBUZW1wbGF0ZXM8bGlzdCwgTm9uZVQsIE5vbmVULCAuLi4sIE5vbmVUPiBpbiB0aGUg
Y29tcGlsZXIKLS8vIGVycm9ycykuCi0vLwotLy8gT3VyIHNvbHV0aW9uIGlzIHRvIGNvbWJpbmUg
dGhlIGJlc3QgcGFydCBvZiB0aGUgdHdvIGFwcHJvYWNoZXM6IGEKLS8vIHVzZXIgd291bGQgd3Jp
dGUgVGVtcGxhdGVzPFQxLCAuLi4sIFROPiwgYW5kIEdvb2dsZSBUZXN0IHdpbGwgdHJhbnNsYXRl
Ci0vLyB0aGF0IHRvIFRlbXBsYXRlc048VDEsIC4uLiwgVE4+IGludGVybmFsbHkgdG8gbWFrZSBl
cnJvciBtZXNzYWdlcwotLy8gcmVhZGFibGUuICBUaGUgdHJhbnNsYXRpb24gaXMgZG9uZSBieSB0
aGUgJ3R5cGUnIG1lbWJlciBvZiB0aGUKLS8vIFRlbXBsYXRlcyB0ZW1wbGF0ZS4KLQotJHJhbmdl
IGkgMS4ubgotdGVtcGxhdGUgPCRmb3IgaSwgW1tHVEVTVF9URU1QTEFURV8gVCRpID0gTm9uZVRd
XT4KLXN0cnVjdCBUZW1wbGF0ZXMgewotICB0eXBlZGVmIFRlbXBsYXRlcyRuPCRmb3IgaSwgW1tU
JGldXT4gdHlwZTsKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgVGVtcGxhdGVzPCRmb3IgaSwg
W1tOb25lVF1dPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzMCB0eXBlOwotfTsKLQotJHJhbmdlIGkg
MS4ubi0xCi0kZm9yIGkgW1sKLSRyYW5nZSBqIDEuLmkKLSRyYW5nZSBrIGkrMS4ubgotdGVtcGxh
dGUgPCRmb3IgaiwgW1tHVEVTVF9URU1QTEFURV8gVCRqXV0+Ci1zdHJ1Y3QgVGVtcGxhdGVzPCRm
b3IgaiwgW1tUJGpdXSRmb3Iga1tbLCBOb25lVF1dPiB7Ci0gIHR5cGVkZWYgVGVtcGxhdGVzJGk8
JGZvciBqLCBbW1Qkal1dPiB0eXBlOwotfTsKLQotXV0KLQotLy8gVGhlIFR5cGVMaXN0IHRlbXBs
YXRlIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBlaXRoZXIgYSBzaW5nbGUgdHlwZQotLy8gb3Ig
YSBUeXBlczwuLi4+IGxpc3QgaW4gVFlQRURfVEVTVF9DQVNFKCkgYW5kCi0vLyBJTlNUQU5USUFU
RV9UWVBFRF9URVNUX0NBU0VfUCgpLgotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBU
eXBlTGlzdCB7Ci0gIHR5cGVkZWYgVHlwZXMxPFQ+IHR5cGU7Ci19OwotCi0KLSRyYW5nZSBpIDEu
Lm4KLXRlbXBsYXRlIDwkZm9yIGksIFtbdHlwZW5hbWUgVCRpXV0+Ci1zdHJ1Y3QgVHlwZUxpc3Q8
VHlwZXM8JGZvciBpLCBbW1QkaV1dPiA+IHsKLSAgdHlwZWRlZiB0eXBlbmFtZSBUeXBlczwkZm9y
IGksIFtbVCRpXV0+Ojp0eXBlIHR5cGU7Ci19OwotCi0jZW5kaWYgIC8vIEdURVNUX0hBU19UWVBF
RF9URVNUIHx8IEdURVNUX0hBU19UWVBFRF9URVNUX1AKLQotfSAgLy8gbmFtZXNwYWNlIGludGVy
bmFsCi19ICAvLyBuYW1lc3BhY2UgdGVzdGluZwotCi0jZW5kaWYgIC8vIEdURVNUX0lOQ0xVREVf
R1RFU1RfSU5URVJOQUxfR1RFU1RfVFlQRV9VVElMX0hfCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L3NyYy9ndGVzdC1maWxl
cGF0aC5jYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2ds
ZXRlc3Qvc3JjL2d0ZXN0LWZpbGVwYXRoLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMjkyZGMxMTk1N2VhYTIxOGIzNThmMWY3NjFjYTRhNWNiMmZhZWE3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3Qvc3JjL2d0ZXN0LWZpbGVwYXRoLmNjCisrKyAv
ZGV2L251bGwKQEAgLTEsMzg3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDA4LCBHb29nbGUgSW5j
LgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8g
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLS8vCi0vLyBBdXRob3JzOiBrZWl0aC5yYXlAZ21haWwuY29tIChLZWl0
aCBSYXkpCi0KLSNpbmNsdWRlICJndGVzdC9ndGVzdC1tZXNzYWdlLmgiCi0jaW5jbHVkZSAiZ3Rl
c3QvaW50ZXJuYWwvZ3Rlc3QtZmlsZXBhdGguaCIKLSNpbmNsdWRlICJndGVzdC9pbnRlcm5hbC9n
dGVzdC1wb3J0LmgiCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2lmIEdURVNUX09TX1dJTkRP
V1NfTU9CSUxFCi0jIGluY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbGlmIEdURVNUX09TX1dJTkRPV1MK
LSMgaW5jbHVkZSA8ZGlyZWN0Lmg+Ci0jIGluY2x1ZGUgPGlvLmg+Ci0jZWxpZiBHVEVTVF9PU19T
WU1CSUFOCi0vLyBTeW1iaWFuIE9wZW5DIGhhcyBQQVRIX01BWCBpbiBzeXMvc3lzbGltaXRzLmgK
LSMgaW5jbHVkZSA8c3lzL3N5c2xpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8bGltaXRzLmg+
Ci0jIGluY2x1ZGUgPGNsaW1pdHM+ICAvLyBTb21lIExpbnV4IGRpc3RyaWJ1dGlvbnMgZGVmaW5l
IFBBVEhfTUFYIGhlcmUuCi0jZW5kaWYgIC8vIEdURVNUX09TX1dJTkRPV1NfTU9CSUxFCi0KLSNp
ZiBHVEVTVF9PU19XSU5ET1dTCi0jIGRlZmluZSBHVEVTVF9QQVRIX01BWF8gX01BWF9QQVRICi0j
ZWxpZiBkZWZpbmVkKFBBVEhfTUFYKQotIyBkZWZpbmUgR1RFU1RfUEFUSF9NQVhfIFBBVEhfTUFY
Ci0jZWxpZiBkZWZpbmVkKF9YT1BFTl9QQVRIX01BWCkKLSMgZGVmaW5lIEdURVNUX1BBVEhfTUFY
XyBfWE9QRU5fUEFUSF9NQVgKLSNlbHNlCi0jIGRlZmluZSBHVEVTVF9QQVRIX01BWF8gX1BPU0lY
X1BBVEhfTUFYCi0jZW5kaWYgIC8vIEdURVNUX09TX1dJTkRPV1MKLQotI2luY2x1ZGUgImd0ZXN0
L2ludGVybmFsL2d0ZXN0LXN0cmluZy5oIgotCi1uYW1lc3BhY2UgdGVzdGluZyB7Ci1uYW1lc3Bh
Y2UgaW50ZXJuYWwgewotCi0jaWYgR1RFU1RfT1NfV0lORE9XUwotLy8gT24gV2luZG93cywgJ1xc
JyBpcyB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IsIGJ1dCBtYW55IHRvb2xzIGFuZCB0aGUK
LS8vIFdpbmRvd3MgQVBJIGFsc28gYWNjZXB0ICcvJyBhcyBhbiBhbHRlcm5hdGUgcGF0aCBzZXBh
cmF0b3IuIFVubGVzcyBvdGhlcndpc2UKLS8vIG5vdGVkLCBhIGZpbGUgcGF0aCBjYW4gY29udGFp
biBlaXRoZXIga2luZCBvZiBwYXRoIHNlcGFyYXRvcnMsIG9yIGEgbWl4dHVyZQotLy8gb2YgdGhl
bS4KLWNvbnN0IGNoYXIga1BhdGhTZXBhcmF0b3IgPSAnXFwnOwotY29uc3QgY2hhciBrQWx0ZXJu
YXRlUGF0aFNlcGFyYXRvciA9ICcvJzsKLWNvbnN0IGNoYXIga0FsdGVybmF0ZVBhdGhTZXBhcmF0
b3JTdHJpbmdbXSA9ICIvIjsKLSMgaWYgR1RFU1RfT1NfV0lORE9XU19NT0JJTEUKLS8vIFdpbmRv
d3MgQ0UgZG9lc24ndCBoYXZlIGEgY3VycmVudCBkaXJlY3RvcnkuIFlvdSBzaG91bGQgbm90IHVz
ZQotLy8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGluIHRlc3RzIG9uIFdpbmRvd3MgQ0UsIGJ1dCB0
aGlzIGF0IGxlYXN0Ci0vLyBwcm92aWRlcyBhIHJlYXNvbmFibGUgZmFsbGJhY2suCi1jb25zdCBj
aGFyIGtDdXJyZW50RGlyZWN0b3J5U3RyaW5nW10gPSAiXFwiOwotLy8gV2luZG93cyBDRSBkb2Vz
bid0IGRlZmluZSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUwotY29uc3QgRFdPUkQga0ludmFsaWRG
aWxlQXR0cmlidXRlcyA9IDB4ZmZmZmZmZmY7Ci0jIGVsc2UKLWNvbnN0IGNoYXIga0N1cnJlbnRE
aXJlY3RvcnlTdHJpbmdbXSA9ICIuXFwiOwotIyBlbmRpZiAgLy8gR1RFU1RfT1NfV0lORE9XU19N
T0JJTEUKLSNlbHNlCi1jb25zdCBjaGFyIGtQYXRoU2VwYXJhdG9yID0gJy8nOwotY29uc3QgY2hh
ciBrQ3VycmVudERpcmVjdG9yeVN0cmluZ1tdID0gIi4vIjsKLSNlbmRpZiAgLy8gR1RFU1RfT1Nf
V0lORE9XUwotCi0vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGNoYXJhY3RlciBpcyBhIHZh
bGlkIHBhdGggc2VwYXJhdG9yLgotc3RhdGljIGJvb2wgSXNQYXRoU2VwYXJhdG9yKGNoYXIgYykg
ewotI2lmIEdURVNUX0hBU19BTFRfUEFUSF9TRVBfCi0gIHJldHVybiAoYyA9PSBrUGF0aFNlcGFy
YXRvcikgfHwgKGMgPT0ga0FsdGVybmF0ZVBhdGhTZXBhcmF0b3IpOwotI2Vsc2UKLSAgcmV0dXJu
IGMgPT0ga1BhdGhTZXBhcmF0b3I7Ci0jZW5kaWYKLX0KLQotLy8gUmV0dXJucyB0aGUgY3VycmVu
dCB3b3JraW5nIGRpcmVjdG9yeSwgb3IgIiIgaWYgdW5zdWNjZXNzZnVsLgotRmlsZVBhdGggRmls
ZVBhdGg6OkdldEN1cnJlbnREaXIoKSB7Ci0jaWYgR1RFU1RfT1NfV0lORE9XU19NT0JJTEUgfHwg
R1RFU1RfT1NfV0lORE9XU19QSE9ORSB8fCBHVEVTVF9PU19XSU5ET1dTX1JUCi0gIC8vIFdpbmRv
d3MgQ0UgZG9lc24ndCBoYXZlIGEgY3VycmVudCBkaXJlY3RvcnksIHNvIHdlIGp1c3QgcmV0dXJu
Ci0gIC8vIHNvbWV0aGluZyByZWFzb25hYmxlLgotICByZXR1cm4gRmlsZVBhdGgoa0N1cnJlbnRE
aXJlY3RvcnlTdHJpbmcpOwotI2VsaWYgR1RFU1RfT1NfV0lORE9XUwotICBjaGFyIGN3ZFtHVEVT
VF9QQVRIX01BWF8gKyAxXSA9IHsgJ1wwJyB9OwotICByZXR1cm4gRmlsZVBhdGgoX2dldGN3ZChj
d2QsIHNpemVvZihjd2QpKSA9PSBOVUxMID8gIiIgOiBjd2QpOwotI2Vsc2UKLSAgY2hhciBjd2Rb
R1RFU1RfUEFUSF9NQVhfICsgMV0gPSB7ICdcMCcgfTsKLSAgY2hhciogcmVzdWx0ID0gZ2V0Y3dk
KGN3ZCwgc2l6ZW9mKGN3ZCkpOwotIyBpZiBHVEVTVF9PU19OQUNMCi0gIC8vIGdldGN3ZCB3aWxs
IGxpa2VseSBmYWlsIGluIE5hQ2wgZHVlIHRvIHRoZSBzYW5kYm94LCBzbyByZXR1cm4gc29tZXRo
aW5nCi0gIC8vIHJlYXNvbmFibGUuIFRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIGEgc2hpbSBp
bXBsZW1lbnRhdGlvbiBmb3IgZ2V0Y3dkLAotICAvLyBob3dldmVyLCBzbyBmYWxsYmFjayBvbmx5
IHdoZW4gZmFpbHVyZSBpcyBkZXRlY3RlZC4KLSAgcmV0dXJuIEZpbGVQYXRoKHJlc3VsdCA9PSBO
VUxMID8ga0N1cnJlbnREaXJlY3RvcnlTdHJpbmcgOiBjd2QpOwotIyBlbmRpZiAgLy8gR1RFU1Rf
T1NfTkFDTAotICByZXR1cm4gRmlsZVBhdGgocmVzdWx0ID09IE5VTEwgPyAiIiA6IGN3ZCk7Ci0j
ZW5kaWYgIC8vIEdURVNUX09TX1dJTkRPV1NfTU9CSUxFCi19Ci0KLS8vIFJldHVybnMgYSBjb3B5
IG9mIHRoZSBGaWxlUGF0aCB3aXRoIHRoZSBjYXNlLWluc2Vuc2l0aXZlIGV4dGVuc2lvbiByZW1v
dmVkLgotLy8gRXhhbXBsZTogRmlsZVBhdGgoImRpci9maWxlLmV4ZSIpLlJlbW92ZUV4dGVuc2lv
bigiRVhFIikgcmV0dXJucwotLy8gRmlsZVBhdGgoImRpci9maWxlIikuIElmIGEgY2FzZS1pbnNl
bnNpdGl2ZSBleHRlbnNpb24gaXMgbm90Ci0vLyBmb3VuZCwgcmV0dXJucyBhIGNvcHkgb2YgdGhl
IG9yaWdpbmFsIEZpbGVQYXRoLgotRmlsZVBhdGggRmlsZVBhdGg6OlJlbW92ZUV4dGVuc2lvbihj
b25zdCBjaGFyKiBleHRlbnNpb24pIGNvbnN0IHsKLSAgY29uc3Qgc3RkOjpzdHJpbmcgZG90X2V4
dGVuc2lvbiA9IHN0ZDo6c3RyaW5nKCIuIikgKyBleHRlbnNpb247Ci0gIGlmIChTdHJpbmc6OkVu
ZHNXaXRoQ2FzZUluc2Vuc2l0aXZlKHBhdGhuYW1lXywgZG90X2V4dGVuc2lvbikpIHsKLSAgICBy
ZXR1cm4gRmlsZVBhdGgocGF0aG5hbWVfLnN1YnN0cigKLSAgICAgICAgMCwgcGF0aG5hbWVfLmxl
bmd0aCgpIC0gZG90X2V4dGVuc2lvbi5sZW5ndGgoKSkpOwotICB9Ci0gIHJldHVybiAqdGhpczsK
LX0KLQotLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGxhc3Qgb2NjdXJlbmNlIG9mIGEgdmFs
aWQgcGF0aCBzZXBhcmF0b3IgaW4KLS8vIHRoZSBGaWxlUGF0aC4gT24gV2luZG93cywgZm9yIGV4
YW1wbGUsIGJvdGggJy8nIGFuZCAnXCcgYXJlIHZhbGlkIHBhdGgKLS8vIHNlcGFyYXRvcnMuIFJl
dHVybnMgTlVMTCBpZiBubyBwYXRoIHNlcGFyYXRvciB3YXMgZm91bmQuCi1jb25zdCBjaGFyKiBG
aWxlUGF0aDo6RmluZExhc3RQYXRoU2VwYXJhdG9yKCkgY29uc3QgewotICBjb25zdCBjaGFyKiBj
b25zdCBsYXN0X3NlcCA9IHN0cnJjaHIoY19zdHIoKSwga1BhdGhTZXBhcmF0b3IpOwotI2lmIEdU
RVNUX0hBU19BTFRfUEFUSF9TRVBfCi0gIGNvbnN0IGNoYXIqIGNvbnN0IGxhc3RfYWx0X3NlcCA9
IHN0cnJjaHIoY19zdHIoKSwga0FsdGVybmF0ZVBhdGhTZXBhcmF0b3IpOwotICAvLyBDb21wYXJp
bmcgdHdvIHBvaW50ZXJzIG9mIHdoaWNoIG9ubHkgb25lIGlzIE5VTEwgaXMgdW5kZWZpbmVkLgot
ICBpZiAobGFzdF9hbHRfc2VwICE9IE5VTEwgJiYKLSAgICAgIChsYXN0X3NlcCA9PSBOVUxMIHx8
IGxhc3RfYWx0X3NlcCA+IGxhc3Rfc2VwKSkgewotICAgIHJldHVybiBsYXN0X2FsdF9zZXA7Ci0g
IH0KLSNlbmRpZgotICByZXR1cm4gbGFzdF9zZXA7Ci19Ci0KLS8vIFJldHVybnMgYSBjb3B5IG9m
IHRoZSBGaWxlUGF0aCB3aXRoIHRoZSBkaXJlY3RvcnkgcGFydCByZW1vdmVkLgotLy8gRXhhbXBs
ZTogRmlsZVBhdGgoInBhdGgvdG8vZmlsZSIpLlJlbW92ZURpcmVjdG9yeU5hbWUoKSByZXR1cm5z
Ci0vLyBGaWxlUGF0aCgiZmlsZSIpLiBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgcGFydCAoImp1
c3RfYV9maWxlIiksIGl0IHJldHVybnMKLS8vIHRoZSBGaWxlUGF0aCB1bm1vZGlmaWVkLiBJZiB0
aGVyZSBpcyBubyBmaWxlIHBhcnQgKCJqdXN0X2FfZGlyLyIpIGl0Ci0vLyByZXR1cm5zIGFuIGVt
cHR5IEZpbGVQYXRoICgiIikuCi0vLyBPbiBXaW5kb3dzIHBsYXRmb3JtLCAnXCcgaXMgdGhlIHBh
dGggc2VwYXJhdG9yLCBvdGhlcndpc2UgaXQgaXMgJy8nLgotRmlsZVBhdGggRmlsZVBhdGg6OlJl
bW92ZURpcmVjdG9yeU5hbWUoKSBjb25zdCB7Ci0gIGNvbnN0IGNoYXIqIGNvbnN0IGxhc3Rfc2Vw
ID0gRmluZExhc3RQYXRoU2VwYXJhdG9yKCk7Ci0gIHJldHVybiBsYXN0X3NlcCA/IEZpbGVQYXRo
KGxhc3Rfc2VwICsgMSkgOiAqdGhpczsKLX0KLQotLy8gUmVtb3ZlRmlsZU5hbWUgcmV0dXJucyB0
aGUgZGlyZWN0b3J5IHBhdGggd2l0aCB0aGUgZmlsZW5hbWUgcmVtb3ZlZC4KLS8vIEV4YW1wbGU6
IEZpbGVQYXRoKCJwYXRoL3RvL2ZpbGUiKS5SZW1vdmVGaWxlTmFtZSgpIHJldHVybnMgInBhdGgv
dG8vIi4KLS8vIElmIHRoZSBGaWxlUGF0aCBpcyAiYV9maWxlIiBvciAiL2FfZmlsZSIsIFJlbW92
ZUZpbGVOYW1lIHJldHVybnMKLS8vIEZpbGVQYXRoKCIuLyIpIG9yLCBvbiBXaW5kb3dzLCBGaWxl
UGF0aCgiLlxcIikuIElmIHRoZSBmaWxlcGF0aCBkb2VzCi0vLyBub3QgaGF2ZSBhIGZpbGUsIGxp
a2UgImp1c3QvYS9kaXIvIiwgaXQgcmV0dXJucyB0aGUgRmlsZVBhdGggdW5tb2RpZmllZC4KLS8v
IE9uIFdpbmRvd3MgcGxhdGZvcm0sICdcJyBpcyB0aGUgcGF0aCBzZXBhcmF0b3IsIG90aGVyd2lz
ZSBpdCBpcyAnLycuCi1GaWxlUGF0aCBGaWxlUGF0aDo6UmVtb3ZlRmlsZU5hbWUoKSBjb25zdCB7
Ci0gIGNvbnN0IGNoYXIqIGNvbnN0IGxhc3Rfc2VwID0gRmluZExhc3RQYXRoU2VwYXJhdG9yKCk7
Ci0gIHN0ZDo6c3RyaW5nIGRpcjsKLSAgaWYgKGxhc3Rfc2VwKSB7Ci0gICAgZGlyID0gc3RkOjpz
dHJpbmcoY19zdHIoKSwgbGFzdF9zZXAgKyAxIC0gY19zdHIoKSk7Ci0gIH0gZWxzZSB7Ci0gICAg
ZGlyID0ga0N1cnJlbnREaXJlY3RvcnlTdHJpbmc7Ci0gIH0KLSAgcmV0dXJuIEZpbGVQYXRoKGRp
cik7Ci19Ci0KLS8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIG5hbWluZyBmaWxlcyBpbiBhIGRpcmVj
dG9yeSBmb3IgeG1sIG91dHB1dC4KLQotLy8gR2l2ZW4gZGlyZWN0b3J5ID0gImRpciIsIGJhc2Vf
bmFtZSA9ICJ0ZXN0IiwgbnVtYmVyID0gMCwKLS8vIGV4dGVuc2lvbiA9ICJ4bWwiLCByZXR1cm5z
ICJkaXIvdGVzdC54bWwiLiBJZiBudW1iZXIgaXMgZ3JlYXRlcgotLy8gdGhhbiB6ZXJvIChlLmcu
LCAxMiksIHJldHVybnMgImRpci90ZXN0XzEyLnhtbCIuCi0vLyBPbiBXaW5kb3dzIHBsYXRmb3Jt
LCB1c2VzIFwgYXMgdGhlIHNlcGFyYXRvciByYXRoZXIgdGhhbiAvLgotRmlsZVBhdGggRmlsZVBh
dGg6Ok1ha2VGaWxlTmFtZShjb25zdCBGaWxlUGF0aCYgZGlyZWN0b3J5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlUGF0aCYgYmFzZV9uYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBleHRlbnNpb24pIHsKLSAgc3RkOjpzdHJpbmcgZmlsZTsK
LSAgaWYgKG51bWJlciA9PSAwKSB7Ci0gICAgZmlsZSA9IGJhc2VfbmFtZS5zdHJpbmcoKSArICIu
IiArIGV4dGVuc2lvbjsKLSAgfSBlbHNlIHsKLSAgICBmaWxlID0gYmFzZV9uYW1lLnN0cmluZygp
ICsgIl8iICsgU3RyZWFtYWJsZVRvU3RyaW5nKG51bWJlcikKLSAgICAgICAgKyAiLiIgKyBleHRl
bnNpb247Ci0gIH0KLSAgcmV0dXJuIENvbmNhdFBhdGhzKGRpcmVjdG9yeSwgRmlsZVBhdGgoZmls
ZSkpOwotfQotCi0vLyBHaXZlbiBkaXJlY3RvcnkgPSAiZGlyIiwgcmVsYXRpdmVfcGF0aCA9ICJ0
ZXN0LnhtbCIsIHJldHVybnMgImRpci90ZXN0LnhtbCIuCi0vLyBPbiBXaW5kb3dzLCB1c2VzIFwg
YXMgdGhlIHNlcGFyYXRvciByYXRoZXIgdGhhbiAvLgotRmlsZVBhdGggRmlsZVBhdGg6OkNvbmNh
dFBhdGhzKGNvbnN0IEZpbGVQYXRoJiBkaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmlsZVBhdGgmIHJlbGF0aXZlX3BhdGgpIHsKLSAgaWYgKGRpcmVjdG9y
eS5Jc0VtcHR5KCkpCi0gICAgcmV0dXJuIHJlbGF0aXZlX3BhdGg7Ci0gIGNvbnN0IEZpbGVQYXRo
IGRpcihkaXJlY3RvcnkuUmVtb3ZlVHJhaWxpbmdQYXRoU2VwYXJhdG9yKCkpOwotICByZXR1cm4g
RmlsZVBhdGgoZGlyLnN0cmluZygpICsga1BhdGhTZXBhcmF0b3IgKyByZWxhdGl2ZV9wYXRoLnN0
cmluZygpKTsKLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmIHBhdGhuYW1lIGRlc2NyaWJlcyBzb21l
dGhpbmcgZmluZGFibGUgaW4gdGhlIGZpbGUtc3lzdGVtLAotLy8gZWl0aGVyIGEgZmlsZSwgZGly
ZWN0b3J5LCBvciB3aGF0ZXZlci4KLWJvb2wgRmlsZVBhdGg6OkZpbGVPckRpcmVjdG9yeUV4aXN0
cygpIGNvbnN0IHsKLSNpZiBHVEVTVF9PU19XSU5ET1dTX01PQklMRQotICBMUENXU1RSIHVuaWNv
ZGUgPSBTdHJpbmc6OkFuc2lUb1V0ZjE2KHBhdGhuYW1lXy5jX3N0cigpKTsKLSAgY29uc3QgRFdP
UkQgYXR0cmlidXRlcyA9IEdldEZpbGVBdHRyaWJ1dGVzKHVuaWNvZGUpOwotICBkZWxldGUgW10g
dW5pY29kZTsKLSAgcmV0dXJuIGF0dHJpYnV0ZXMgIT0ga0ludmFsaWRGaWxlQXR0cmlidXRlczsK
LSNlbHNlCi0gIHBvc2l4OjpTdGF0U3RydWN0IGZpbGVfc3RhdDsKLSAgcmV0dXJuIHBvc2l4OjpT
dGF0KHBhdGhuYW1lXy5jX3N0cigpLCAmZmlsZV9zdGF0KSA9PSAwOwotI2VuZGlmICAvLyBHVEVT
VF9PU19XSU5ET1dTX01PQklMRQotfQotCi0vLyBSZXR1cm5zIHRydWUgaWYgcGF0aG5hbWUgZGVz
Y3JpYmVzIGEgZGlyZWN0b3J5IGluIHRoZSBmaWxlLXN5c3RlbQotLy8gdGhhdCBleGlzdHMuCi1i
b29sIEZpbGVQYXRoOjpEaXJlY3RvcnlFeGlzdHMoKSBjb25zdCB7Ci0gIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7Ci0jaWYgR1RFU1RfT1NfV0lORE9XUwotICAvLyBEb24ndCBzdHJpcCBvZmYgdHJhaWxp
bmcgc2VwYXJhdG9yIGlmIHBhdGggaXMgYSByb290IGRpcmVjdG9yeSBvbgotICAvLyBXaW5kb3dz
IChsaWtlICJDOlxcIikuCi0gIGNvbnN0IEZpbGVQYXRoJiBwYXRoKElzUm9vdERpcmVjdG9yeSgp
ID8gKnRoaXMgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl
bW92ZVRyYWlsaW5nUGF0aFNlcGFyYXRvcigpKTsKLSNlbHNlCi0gIGNvbnN0IEZpbGVQYXRoJiBw
YXRoKCp0aGlzKTsKLSNlbmRpZgotCi0jaWYgR1RFU1RfT1NfV0lORE9XU19NT0JJTEUKLSAgTFBD
V1NUUiB1bmljb2RlID0gU3RyaW5nOjpBbnNpVG9VdGYxNihwYXRoLmNfc3RyKCkpOwotICBjb25z
dCBEV09SRCBhdHRyaWJ1dGVzID0gR2V0RmlsZUF0dHJpYnV0ZXModW5pY29kZSk7Ci0gIGRlbGV0
ZSBbXSB1bmljb2RlOwotICBpZiAoKGF0dHJpYnV0ZXMgIT0ga0ludmFsaWRGaWxlQXR0cmlidXRl
cykgJiYKLSAgICAgIChhdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSkgewot
ICAgIHJlc3VsdCA9IHRydWU7Ci0gIH0KLSNlbHNlCi0gIHBvc2l4OjpTdGF0U3RydWN0IGZpbGVf
c3RhdDsKLSAgcmVzdWx0ID0gcG9zaXg6OlN0YXQocGF0aC5jX3N0cigpLCAmZmlsZV9zdGF0KSA9
PSAwICYmCi0gICAgICBwb3NpeDo6SXNEaXIoZmlsZV9zdGF0KTsKLSNlbmRpZiAgLy8gR1RFU1Rf
T1NfV0lORE9XU19NT0JJTEUKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBSZXR1cm5zIHRy
dWUgaWYgcGF0aG5hbWUgZGVzY3JpYmVzIGEgcm9vdCBkaXJlY3RvcnkuIChXaW5kb3dzIGhhcyBv
bmUKLS8vIHJvb3QgZGlyZWN0b3J5IHBlciBkaXNrIGRyaXZlLikKLWJvb2wgRmlsZVBhdGg6Oklz
Um9vdERpcmVjdG9yeSgpIGNvbnN0IHsKLSNpZiBHVEVTVF9PU19XSU5ET1dTCi0gIC8vIFRPRE8o
d2FuQGdvb2dsZS5jb20pOiBvbiBXaW5kb3dzIGEgbmV0d29yayBzaGFyZSBsaWtlCi0gIC8vIFxc
c2VydmVyXHNoYXJlIGNhbiBiZSBhIHJvb3QgZGlyZWN0b3J5LCBhbHRob3VnaCBpdCBjYW5ub3Qg
YmUgdGhlCi0gIC8vIGN1cnJlbnQgZGlyZWN0b3J5LiAgSGFuZGxlIHRoaXMgcHJvcGVybHkuCi0g
IHJldHVybiBwYXRobmFtZV8ubGVuZ3RoKCkgPT0gMyAmJiBJc0Fic29sdXRlUGF0aCgpOwotI2Vs
c2UKLSAgcmV0dXJuIHBhdGhuYW1lXy5sZW5ndGgoKSA9PSAxICYmIElzUGF0aFNlcGFyYXRvcihw
YXRobmFtZV8uY19zdHIoKVswXSk7Ci0jZW5kaWYKLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmIHBh
dGhuYW1lIGRlc2NyaWJlcyBhbiBhYnNvbHV0ZSBwYXRoLgotYm9vbCBGaWxlUGF0aDo6SXNBYnNv
bHV0ZVBhdGgoKSBjb25zdCB7Ci0gIGNvbnN0IGNoYXIqIGNvbnN0IG5hbWUgPSBwYXRobmFtZV8u
Y19zdHIoKTsKLSNpZiBHVEVTVF9PU19XSU5ET1dTCi0gIHJldHVybiBwYXRobmFtZV8ubGVuZ3Ro
KCkgPj0gMyAmJgotICAgICAoKG5hbWVbMF0gPj0gJ2EnICYmIG5hbWVbMF0gPD0gJ3onKSB8fAot
ICAgICAgKG5hbWVbMF0gPj0gJ0EnICYmIG5hbWVbMF0gPD0gJ1onKSkgJiYKLSAgICAgbmFtZVsx
XSA9PSAnOicgJiYKLSAgICAgSXNQYXRoU2VwYXJhdG9yKG5hbWVbMl0pOwotI2Vsc2UKLSAgcmV0
dXJuIElzUGF0aFNlcGFyYXRvcihuYW1lWzBdKTsKLSNlbmRpZgotfQotCi0vLyBSZXR1cm5zIGEg
cGF0aG5hbWUgZm9yIGEgZmlsZSB0aGF0IGRvZXMgbm90IGN1cnJlbnRseSBleGlzdC4gVGhlIHBh
dGhuYW1lCi0vLyB3aWxsIGJlIGRpcmVjdG9yeS9iYXNlX25hbWUuZXh0ZW5zaW9uIG9yCi0vLyBk
aXJlY3RvcnkvYmFzZV9uYW1lXzxudW1iZXI+LmV4dGVuc2lvbiBpZiBkaXJlY3RvcnkvYmFzZV9u
YW1lLmV4dGVuc2lvbgotLy8gYWxyZWFkeSBleGlzdHMuIFRoZSBudW1iZXIgd2lsbCBiZSBpbmNy
ZW1lbnRlZCB1bnRpbCBhIHBhdGhuYW1lIGlzIGZvdW5kCi0vLyB0aGF0IGRvZXMgbm90IGFscmVh
ZHkgZXhpc3QuCi0vLyBFeGFtcGxlczogJ2Rpci9mb29fdGVzdC54bWwnIG9yICdkaXIvZm9vX3Rl
c3RfMS54bWwnLgotLy8gVGhlcmUgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiBpZiB0d28gb3Ig
bW9yZSBwcm9jZXNzZXMgYXJlIGNhbGxpbmcgdGhpcwotLy8gZnVuY3Rpb24gYXQgdGhlIHNhbWUg
dGltZSAtLSB0aGV5IGNvdWxkIGJvdGggcGljayB0aGUgc2FtZSBmaWxlbmFtZS4KLUZpbGVQYXRo
IEZpbGVQYXRoOjpHZW5lcmF0ZVVuaXF1ZUZpbGVOYW1lKGNvbnN0IEZpbGVQYXRoJiBkaXJlY3Rv
cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxl
UGF0aCYgYmFzZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogZXh0ZW5zaW9uKSB7Ci0gIEZpbGVQYXRoIGZ1bGxfcGF0aG5hbWU7Ci0g
IGludCBudW1iZXIgPSAwOwotICBkbyB7Ci0gICAgZnVsbF9wYXRobmFtZS5TZXQoTWFrZUZpbGVO
YW1lKGRpcmVjdG9yeSwgYmFzZV9uYW1lLCBudW1iZXIrKywgZXh0ZW5zaW9uKSk7Ci0gIH0gd2hp
bGUgKGZ1bGxfcGF0aG5hbWUuRmlsZU9yRGlyZWN0b3J5RXhpc3RzKCkpOwotICByZXR1cm4gZnVs
bF9wYXRobmFtZTsKLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmIEZpbGVQYXRoIGVuZHMgd2l0aCBh
IHBhdGggc2VwYXJhdG9yLCB3aGljaCBpbmRpY2F0ZXMgdGhhdAotLy8gaXQgaXMgaW50ZW5kZWQg
dG8gcmVwcmVzZW50IGEgZGlyZWN0b3J5LiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS4KLS8vIFRo
aXMgZG9lcyBOT1QgY2hlY2sgdGhhdCBhIGRpcmVjdG9yeSAob3IgZmlsZSkgYWN0dWFsbHkgZXhp
c3RzLgotYm9vbCBGaWxlUGF0aDo6SXNEaXJlY3RvcnkoKSBjb25zdCB7Ci0gIHJldHVybiAhcGF0
aG5hbWVfLmVtcHR5KCkgJiYKLSAgICAgICAgIElzUGF0aFNlcGFyYXRvcihwYXRobmFtZV8uY19z
dHIoKVtwYXRobmFtZV8ubGVuZ3RoKCkgLSAxXSk7Ci19Ci0KLS8vIENyZWF0ZSBkaXJlY3Rvcmll
cyBzbyB0aGF0IHBhdGggZXhpc3RzLiBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCBvciBpZgot
Ly8gdGhlIGRpcmVjdG9yaWVzIGFscmVhZHkgZXhpc3Q7IHJldHVybnMgZmFsc2UgaWYgdW5hYmxl
IHRvIGNyZWF0ZSBkaXJlY3RvcmllcwotLy8gZm9yIGFueSByZWFzb24uCi1ib29sIEZpbGVQYXRo
OjpDcmVhdGVEaXJlY3Rvcmllc1JlY3Vyc2l2ZWx5KCkgY29uc3QgewotICBpZiAoIXRoaXMtPklz
RGlyZWN0b3J5KCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAocGF0aG5hbWVf
Lmxlbmd0aCgpID09IDAgfHwgdGhpcy0+RGlyZWN0b3J5RXhpc3RzKCkpIHsKLSAgICByZXR1cm4g
dHJ1ZTsKLSAgfQotCi0gIGNvbnN0IEZpbGVQYXRoIHBhcmVudCh0aGlzLT5SZW1vdmVUcmFpbGlu
Z1BhdGhTZXBhcmF0b3IoKS5SZW1vdmVGaWxlTmFtZSgpKTsKLSAgcmV0dXJuIHBhcmVudC5DcmVh
dGVEaXJlY3Rvcmllc1JlY3Vyc2l2ZWx5KCkgJiYgdGhpcy0+Q3JlYXRlRm9sZGVyKCk7Ci19Ci0K
LS8vIENyZWF0ZSB0aGUgZGlyZWN0b3J5IHNvIHRoYXQgcGF0aCBleGlzdHMuIFJldHVybnMgdHJ1
ZSBpZiBzdWNjZXNzZnVsIG9yCi0vLyBpZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzOyBy
ZXR1cm5zIGZhbHNlIGlmIHVuYWJsZSB0byBjcmVhdGUgdGhlCi0vLyBkaXJlY3RvcnkgZm9yIGFu
eSByZWFzb24sIGluY2x1ZGluZyBpZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBkb2VzIG5vdAotLy8g
ZXhpc3QuIE5vdCBuYW1lZCAiQ3JlYXRlRGlyZWN0b3J5IiBiZWNhdXNlIHRoYXQncyBhIG1hY3Jv
IG9uIFdpbmRvd3MuCi1ib29sIEZpbGVQYXRoOjpDcmVhdGVGb2xkZXIoKSBjb25zdCB7Ci0jaWYg
R1RFU1RfT1NfV0lORE9XU19NT0JJTEUKLSAgRmlsZVBhdGggcmVtb3ZlZF9zZXAodGhpcy0+UmVt
b3ZlVHJhaWxpbmdQYXRoU2VwYXJhdG9yKCkpOwotICBMUENXU1RSIHVuaWNvZGUgPSBTdHJpbmc6
OkFuc2lUb1V0ZjE2KHJlbW92ZWRfc2VwLmNfc3RyKCkpOwotICBpbnQgcmVzdWx0ID0gQ3JlYXRl
RGlyZWN0b3J5KHVuaWNvZGUsIE5VTEwpID8gMCA6IC0xOwotICBkZWxldGUgW10gdW5pY29kZTsK
LSNlbGlmIEdURVNUX09TX1dJTkRPV1MKLSAgaW50IHJlc3VsdCA9IF9ta2RpcihwYXRobmFtZV8u
Y19zdHIoKSk7Ci0jZWxzZQotICBpbnQgcmVzdWx0ID0gbWtkaXIocGF0aG5hbWVfLmNfc3RyKCks
IDA3NzcpOwotI2VuZGlmICAvLyBHVEVTVF9PU19XSU5ET1dTX01PQklMRQotCi0gIGlmIChyZXN1
bHQgPT0gLTEpIHsKLSAgICByZXR1cm4gdGhpcy0+RGlyZWN0b3J5RXhpc3RzKCk7ICAvLyBBbiBl
cnJvciBpcyBPSyBpZiB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KLSAgfQotICByZXR1cm4gdHJ1ZTsg
IC8vIE5vIGVycm9yLgotfQotCi0vLyBJZiBpbnB1dCBuYW1lIGhhcyBhIHRyYWlsaW5nIHNlcGFy
YXRvciBjaGFyYWN0ZXIsIHJlbW92ZSBpdCBhbmQgcmV0dXJuIHRoZQotLy8gbmFtZSwgb3RoZXJ3
aXNlIHJldHVybiB0aGUgbmFtZSBzdHJpbmcgdW5tb2RpZmllZC4KLS8vIE9uIFdpbmRvd3MgcGxh
dGZvcm0sIHVzZXMgXCBhcyB0aGUgc2VwYXJhdG9yLCBvdGhlciBwbGF0Zm9ybXMgdXNlIC8uCi1G
aWxlUGF0aCBGaWxlUGF0aDo6UmVtb3ZlVHJhaWxpbmdQYXRoU2VwYXJhdG9yKCkgY29uc3Qgewot
ICByZXR1cm4gSXNEaXJlY3RvcnkoKQotICAgICAgPyBGaWxlUGF0aChwYXRobmFtZV8uc3Vic3Ry
KDAsIHBhdGhuYW1lXy5sZW5ndGgoKSAtIDEpKQotICAgICAgOiAqdGhpczsKLX0KLQotLy8gUmVt
b3ZlcyBhbnkgcmVkdW5kYW50IHNlcGFyYXRvcnMgdGhhdCBtaWdodCBiZSBpbiB0aGUgcGF0aG5h
bWUuCi0vLyBGb3IgZXhhbXBsZSwgImJhci8vL2ZvbyIgYmVjb21lcyAiYmFyL2ZvbyIuIERvZXMg
bm90IGVsaW1pbmF0ZSBvdGhlcgotLy8gcmVkdW5kYW5jaWVzIHRoYXQgbWlnaHQgYmUgaW4gYSBw
YXRobmFtZSBpbnZvbHZpbmcgIi4iIG9yICIuLiIuCi0vLyBUT0RPKHdhbkBnb29nbGUuY29tKTog
aGFuZGxlIFdpbmRvd3MgbmV0d29yayBzaGFyZXMgKGUuZy4gXFxzZXJ2ZXJcc2hhcmUpLgotdm9p
ZCBGaWxlUGF0aDo6Tm9ybWFsaXplKCkgewotICBpZiAocGF0aG5hbWVfLmNfc3RyKCkgPT0gTlVM
TCkgewotICAgIHBhdGhuYW1lXyA9ICIiOwotICAgIHJldHVybjsKLSAgfQotICBjb25zdCBjaGFy
KiBzcmMgPSBwYXRobmFtZV8uY19zdHIoKTsKLSAgY2hhciogY29uc3QgZGVzdCA9IG5ldyBjaGFy
W3BhdGhuYW1lXy5sZW5ndGgoKSArIDFdOwotICBjaGFyKiBkZXN0X3B0ciA9IGRlc3Q7Ci0gIG1l
bXNldChkZXN0X3B0ciwgMCwgcGF0aG5hbWVfLmxlbmd0aCgpICsgMSk7Ci0KLSAgd2hpbGUgKCpz
cmMgIT0gJ1wwJykgewotICAgICpkZXN0X3B0ciA9ICpzcmM7Ci0gICAgaWYgKCFJc1BhdGhTZXBh
cmF0b3IoKnNyYykpIHsKLSAgICAgIHNyYysrOwotICAgIH0gZWxzZSB7Ci0jaWYgR1RFU1RfSEFT
X0FMVF9QQVRIX1NFUF8KLSAgICAgIGlmICgqZGVzdF9wdHIgPT0ga0FsdGVybmF0ZVBhdGhTZXBh
cmF0b3IpIHsKLSAgICAgICAgKmRlc3RfcHRyID0ga1BhdGhTZXBhcmF0b3I7Ci0gICAgICB9Ci0j
ZW5kaWYKLSAgICAgIHdoaWxlIChJc1BhdGhTZXBhcmF0b3IoKnNyYykpCi0gICAgICAgIHNyYysr
OwotICAgIH0KLSAgICBkZXN0X3B0cisrOwotICB9Ci0gICpkZXN0X3B0ciA9ICdcMCc7Ci0gIHBh
dGhuYW1lXyA9IGRlc3Q7Ci0gIGRlbGV0ZVtdIGRlc3Q7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBp
bnRlcm5hbAotfSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3Qvc3JjL2d0ZXN0LWludGVy
bmFsLWlubC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29v
Z2xldGVzdC9zcmMvZ3Rlc3QtaW50ZXJuYWwtaW5sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDZmZjA2YTZlMDBmMjdlZGI5YTFjYjNmNGM0ZWQ3M2UyODBjN2QzNmEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9zcmMvZ3Rlc3QtaW50ZXJuYWwtaW5s
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDg2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDA1LCBH
b29nbGUgSW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
Ly8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gVXRpbGl0eSBmdW5jdGlvbnMgYW5kIGNsYXNz
ZXMgdXNlZCBieSB0aGUgR29vZ2xlIEMrKyB0ZXN0aW5nIGZyYW1ld29yay4KLS8vCi0vLyBBdXRo
b3I6IHdhbkBnb29nbGUuY29tIChaaGFueW9uZyBXYW4pCi0vLwotLy8gVGhpcyBmaWxlIGNvbnRh
aW5zIHB1cmVseSBHb29nbGUgVGVzdCdzIGludGVybmFsIGltcGxlbWVudGF0aW9uLiAgUGxlYXNl
Ci0vLyBETyBOT1QgI0lOQ0xVREUgSVQgSU4gQSBVU0VSIFBST0dSQU0uCi0KLSNpZm5kZWYgR1RF
U1RfU1JDX0dURVNUX0lOVEVSTkFMX0lOTF9IXwotI2RlZmluZSBHVEVTVF9TUkNfR1RFU1RfSU5U
RVJOQUxfSU5MX0hfCi0KLS8vIEdURVNUX0lNUExFTUVOVEFUSU9OXyBpcyBkZWZpbmVkIHRvIDEg
aWZmIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQgaXMKLS8vIHBhcnQgb2YgR29vZ2xlIFRl
c3QncyBpbXBsZW1lbnRhdGlvbjsgb3RoZXJ3aXNlIGl0J3MgdW5kZWZpbmVkLgotI2lmICFHVEVT
VF9JTVBMRU1FTlRBVElPTl8KLS8vIElmIHRoaXMgZmlsZSBpcyBpbmNsdWRlZCBmcm9tIHRoZSB1
c2VyJ3MgY29kZSwganVzdCBzYXkgbm8uCi0jIGVycm9yICJndGVzdC1pbnRlcm5hbC1pbmwuaCBp
cyBwYXJ0IG9mIEdvb2dsZSBUZXN0J3MgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24uIgotIyBlcnJv
ciAiSXQgbXVzdCBub3QgYmUgaW5jbHVkZWQgZXhjZXB0IGJ5IEdvb2dsZSBUZXN0IGl0c2VsZi4i
Ci0jZW5kaWYgIC8vIEdURVNUX0lNUExFTUVOVEFUSU9OXwotCi0jaWZuZGVmIF9XSU4zMl9XQ0UK
LSMgaW5jbHVkZSA8ZXJybm8uaD4KLSNlbmRpZiAgLy8gIV9XSU4zMl9XQ0UKLSNpbmNsdWRlIDxz
dGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4gIC8vIEZvciBzdHJ0b2xsL19zdHJ0b3VsNjQv
bWFsbG9jL2ZyZWUuCi0jaW5jbHVkZSA8c3RyaW5nLmg+ICAvLyBGb3IgbWVtbW92ZS4KLQotI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgot
Ci0jaW5jbHVkZSAiZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtcG9ydC5oIgotCi0jaWYgR1RFU1RfQ0FO
X1NUUkVBTV9SRVNVTFRTXwotIyBpbmNsdWRlIDxhcnBhL2luZXQuaD4gIC8vIE5PTElOVAotIyBp
bmNsdWRlIDxuZXRkYi5oPiAgLy8gTk9MSU5UCi0jZW5kaWYKLQotI2lmIEdURVNUX09TX1dJTkRP
V1MKLSMgaW5jbHVkZSA8d2luZG93cy5oPiAgLy8gTk9MSU5UCi0jZW5kaWYgIC8vIEdURVNUX09T
X1dJTkRPV1MKLQotI2luY2x1ZGUgImd0ZXN0L2d0ZXN0LmgiICAvLyBOT0xJTlQKLSNpbmNsdWRl
ICJndGVzdC9ndGVzdC1zcGkuaCIKLQotbmFtZXNwYWNlIHRlc3RpbmcgewotCi1uYW1lc3BhY2Ug
aW50ZXJuYWwgewotCi0vLyBUaGUgdmFsdWUgb2YgR2V0VGVzdFR5cGVJZCgpIGFzIHNlZW4gZnJv
bSB3aXRoaW4gdGhlIEdvb2dsZSBUZXN0Ci0vLyBsaWJyYXJ5LiAgVGhpcyBpcyBzb2xlbHkgZm9y
IHRlc3RpbmcgR2V0VGVzdFR5cGVJZCgpLgotR1RFU1RfQVBJXyBleHRlcm4gY29uc3QgVHlwZUlk
IGtUZXN0VHlwZUlkSW5Hb29nbGVUZXN0OwotCi0vLyBOYW1lcyBvZiB0aGUgZmxhZ3MgKG5lZWRl
ZCBmb3IgcGFyc2luZyBHb29nbGUgVGVzdCBmbGFncykuCi1jb25zdCBjaGFyIGtBbHNvUnVuRGlz
YWJsZWRUZXN0c0ZsYWdbXSA9ICJhbHNvX3J1bl9kaXNhYmxlZF90ZXN0cyI7Ci1jb25zdCBjaGFy
IGtCcmVha09uRmFpbHVyZUZsYWdbXSA9ICJicmVha19vbl9mYWlsdXJlIjsKLWNvbnN0IGNoYXIg
a0NhdGNoRXhjZXB0aW9uc0ZsYWdbXSA9ICJjYXRjaF9leGNlcHRpb25zIjsKLWNvbnN0IGNoYXIg
a0NvbG9yRmxhZ1tdID0gImNvbG9yIjsKLWNvbnN0IGNoYXIga0ZpbHRlckZsYWdbXSA9ICJmaWx0
ZXIiOwotY29uc3QgY2hhciBrTGlzdFRlc3RzRmxhZ1tdID0gImxpc3RfdGVzdHMiOwotY29uc3Qg
Y2hhciBrT3V0cHV0RmxhZ1tdID0gIm91dHB1dCI7Ci1jb25zdCBjaGFyIGtQcmludFRpbWVGbGFn
W10gPSAicHJpbnRfdGltZSI7Ci1jb25zdCBjaGFyIGtSYW5kb21TZWVkRmxhZ1tdID0gInJhbmRv
bV9zZWVkIjsKLWNvbnN0IGNoYXIga1JlcGVhdEZsYWdbXSA9ICJyZXBlYXQiOwotY29uc3QgY2hh
ciBrU2h1ZmZsZUZsYWdbXSA9ICJzaHVmZmxlIjsKLWNvbnN0IGNoYXIga1N0YWNrVHJhY2VEZXB0
aEZsYWdbXSA9ICJzdGFja190cmFjZV9kZXB0aCI7Ci1jb25zdCBjaGFyIGtTdHJlYW1SZXN1bHRU
b0ZsYWdbXSA9ICJzdHJlYW1fcmVzdWx0X3RvIjsKLWNvbnN0IGNoYXIga1Rocm93T25GYWlsdXJl
RmxhZ1tdID0gInRocm93X29uX2ZhaWx1cmUiOwotY29uc3QgY2hhciBrRmxhZ2ZpbGVGbGFnW10g
PSAiZmxhZ2ZpbGUiOwotCi0vLyBBIHZhbGlkIHJhbmRvbSBzZWVkIG11c3QgYmUgaW4gWzEsIGtN
YXhSYW5kb21TZWVkXS4KLWNvbnN0IGludCBrTWF4UmFuZG9tU2VlZCA9IDk5OTk5OwotCi0vLyBn
X2hlbHBfZmxhZyBpcyB0cnVlIGlmZiB0aGUgLS1oZWxwIGZsYWcgb3IgYW4gZXF1aXZhbGVudCBm
b3JtIGlzCi0vLyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KLUdURVNUX0FQSV8gZXh0
ZXJuIGJvb2wgZ19oZWxwX2ZsYWc7Ci0KLS8vIFJldHVybnMgdGhlIGN1cnJlbnQgdGltZSBpbiBt
aWxsaXNlY29uZHMuCi1HVEVTVF9BUElfIFRpbWVJbk1pbGxpcyBHZXRUaW1lSW5NaWxsaXMoKTsK
LQotLy8gUmV0dXJucyB0cnVlIGlmZiBHb29nbGUgVGVzdCBzaG91bGQgdXNlIGNvbG9ycyBpbiB0
aGUgb3V0cHV0LgotR1RFU1RfQVBJXyBib29sIFNob3VsZFVzZUNvbG9yKGJvb2wgc3Rkb3V0X2lz
X3R0eSk7Ci0KLS8vIEZvcm1hdHMgdGhlIGdpdmVuIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFzIHNl
Y29uZHMuCi1HVEVTVF9BUElfIHN0ZDo6c3RyaW5nIEZvcm1hdFRpbWVJbk1pbGxpc0FzU2Vjb25k
cyhUaW1lSW5NaWxsaXMgbXMpOwotCi0vLyBDb252ZXJ0cyB0aGUgZ2l2ZW4gdGltZSBpbiBtaWxs
aXNlY29uZHMgdG8gYSBkYXRlIHN0cmluZyBpbiB0aGUgSVNPIDg2MDEKLS8vIGZvcm1hdCwgd2l0
aG91dCB0aGUgdGltZXpvbmUgaW5mb3JtYXRpb24uICBOLkIuOiBkdWUgdG8gdGhlIHVzZSB0aGUK
LS8vIG5vbi1yZWVudHJhbnQgbG9jYWx0aW1lKCkgZnVuY3Rpb24sIHRoaXMgZnVuY3Rpb24gaXMg
bm90IHRocmVhZCBzYWZlLiAgRG8KLS8vIG5vdCB1c2UgaXQgaW4gYW55IGNvZGUgdGhhdCBjYW4g
YmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KLUdURVNUX0FQSV8gc3RkOjpzdHJpbmcg
Rm9ybWF0RXBvY2hUaW1lSW5NaWxsaXNBc0lzbzg2MDEoVGltZUluTWlsbGlzIG1zKTsKLQotLy8g
UGFyc2VzIGEgc3RyaW5nIGZvciBhbiBJbnQzMiBmbGFnLCBpbiB0aGUgZm9ybSBvZiAiLS1mbGFn
PXZhbHVlIi4KLS8vCi0vLyBPbiBzdWNjZXNzLCBzdG9yZXMgdGhlIHZhbHVlIG9mIHRoZSBmbGFn
IGluICp2YWx1ZSwgYW5kIHJldHVybnMKLS8vIHRydWUuICBPbiBmYWlsdXJlLCByZXR1cm5zIGZh
bHNlIHdpdGhvdXQgY2hhbmdpbmcgKnZhbHVlLgotR1RFU1RfQVBJXyBib29sIFBhcnNlSW50MzJG
bGFnKAotICAgIGNvbnN0IGNoYXIqIHN0ciwgY29uc3QgY2hhciogZmxhZywgSW50MzIqIHZhbHVl
KTsKLQotLy8gUmV0dXJucyBhIHJhbmRvbSBzZWVkIGluIHJhbmdlIFsxLCBrTWF4UmFuZG9tU2Vl
ZF0gYmFzZWQgb24gdGhlCi0vLyBnaXZlbiAtLWd0ZXN0X3JhbmRvbV9zZWVkIGZsYWcgdmFsdWUu
Ci1pbmxpbmUgaW50IEdldFJhbmRvbVNlZWRGcm9tRmxhZyhJbnQzMiByYW5kb21fc2VlZF9mbGFn
KSB7Ci0gIGNvbnN0IHVuc2lnbmVkIGludCByYXdfc2VlZCA9IChyYW5kb21fc2VlZF9mbGFnID09
IDApID8KLSAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oR2V0VGltZUluTWlsbGlzKCkp
IDoKLSAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4ocmFuZG9tX3NlZWRfZmxhZyk7Ci0K
LSAgLy8gTm9ybWFsaXplcyB0aGUgYWN0dWFsIHNlZWQgdG8gcmFuZ2UgWzEsIGtNYXhSYW5kb21T
ZWVkXSBzdWNoIHRoYXQKLSAgLy8gaXQncyBlYXN5IHRvIHR5cGUuCi0gIGNvbnN0IGludCBub3Jt
YWxpemVkX3NlZWQgPQotICAgICAgc3RhdGljX2Nhc3Q8aW50PigocmF3X3NlZWQgLSAxVSkgJQot
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGtNYXhSYW5k
b21TZWVkKSkgKyAxOwotICByZXR1cm4gbm9ybWFsaXplZF9zZWVkOwotfQotCi0vLyBSZXR1cm5z
IHRoZSBmaXJzdCB2YWxpZCByYW5kb20gc2VlZCBhZnRlciAnc2VlZCcuICBUaGUgYmVoYXZpb3Ig
aXMKLS8vIHVuZGVmaW5lZCBpZiAnc2VlZCcgaXMgaW52YWxpZC4gIFRoZSBzZWVkIGFmdGVyIGtN
YXhSYW5kb21TZWVkIGlzCi0vLyBjb25zaWRlcmVkIHRvIGJlIDEuCi1pbmxpbmUgaW50IEdldE5l
eHRSYW5kb21TZWVkKGludCBzZWVkKSB7Ci0gIEdURVNUX0NIRUNLXygxIDw9IHNlZWQgJiYgc2Vl
ZCA8PSBrTWF4UmFuZG9tU2VlZCkKLSAgICAgIDw8ICJJbnZhbGlkIHJhbmRvbSBzZWVkICIgPDwg
c2VlZCA8PCAiIC0gbXVzdCBiZSBpbiBbMSwgIgotICAgICAgPDwga01heFJhbmRvbVNlZWQgPDwg
Il0uIjsKLSAgY29uc3QgaW50IG5leHRfc2VlZCA9IHNlZWQgKyAxOwotICByZXR1cm4gKG5leHRf
c2VlZCA+IGtNYXhSYW5kb21TZWVkKSA/IDEgOiBuZXh0X3NlZWQ7Ci19Ci0KLS8vIFRoaXMgY2xh
c3Mgc2F2ZXMgdGhlIHZhbHVlcyBvZiBhbGwgR29vZ2xlIFRlc3QgZmxhZ3MgaW4gaXRzIGMndG9y
LCBhbmQKLS8vIHJlc3RvcmVzIHRoZW0gaW4gaXRzIGQndG9yLgotY2xhc3MgR1Rlc3RGbGFnU2F2
ZXIgewotIHB1YmxpYzoKLSAgLy8gVGhlIGMndG9yLgotICBHVGVzdEZsYWdTYXZlcigpIHsKLSAg
ICBhbHNvX3J1bl9kaXNhYmxlZF90ZXN0c18gPSBHVEVTVF9GTEFHKGFsc29fcnVuX2Rpc2FibGVk
X3Rlc3RzKTsKLSAgICBicmVha19vbl9mYWlsdXJlXyA9IEdURVNUX0ZMQUcoYnJlYWtfb25fZmFp
bHVyZSk7Ci0gICAgY2F0Y2hfZXhjZXB0aW9uc18gPSBHVEVTVF9GTEFHKGNhdGNoX2V4Y2VwdGlv
bnMpOwotICAgIGNvbG9yXyA9IEdURVNUX0ZMQUcoY29sb3IpOwotICAgIGZpbHRlcl8gPSBHVEVT
VF9GTEFHKGZpbHRlcik7Ci0gICAgbGlzdF90ZXN0c18gPSBHVEVTVF9GTEFHKGxpc3RfdGVzdHMp
OwotICAgIG91dHB1dF8gPSBHVEVTVF9GTEFHKG91dHB1dCk7Ci0gICAgcHJpbnRfdGltZV8gPSBH
VEVTVF9GTEFHKHByaW50X3RpbWUpOwotICAgIHJhbmRvbV9zZWVkXyA9IEdURVNUX0ZMQUcocmFu
ZG9tX3NlZWQpOwotICAgIHJlcGVhdF8gPSBHVEVTVF9GTEFHKHJlcGVhdCk7Ci0gICAgc2h1ZmZs
ZV8gPSBHVEVTVF9GTEFHKHNodWZmbGUpOwotICAgIHN0YWNrX3RyYWNlX2RlcHRoXyA9IEdURVNU
X0ZMQUcoc3RhY2tfdHJhY2VfZGVwdGgpOwotICAgIHN0cmVhbV9yZXN1bHRfdG9fID0gR1RFU1Rf
RkxBRyhzdHJlYW1fcmVzdWx0X3RvKTsKLSAgICB0aHJvd19vbl9mYWlsdXJlXyA9IEdURVNUX0ZM
QUcodGhyb3dfb25fZmFpbHVyZSk7Ci0gIH0KLQotICAvLyBUaGUgZCd0b3IgaXMgbm90IHZpcnR1
YWwuICBETyBOT1QgSU5IRVJJVCBGUk9NIFRISVMgQ0xBU1MuCi0gIH5HVGVzdEZsYWdTYXZlcigp
IHsKLSAgICBHVEVTVF9GTEFHKGFsc29fcnVuX2Rpc2FibGVkX3Rlc3RzKSA9IGFsc29fcnVuX2Rp
c2FibGVkX3Rlc3RzXzsKLSAgICBHVEVTVF9GTEFHKGJyZWFrX29uX2ZhaWx1cmUpID0gYnJlYWtf
b25fZmFpbHVyZV87Ci0gICAgR1RFU1RfRkxBRyhjYXRjaF9leGNlcHRpb25zKSA9IGNhdGNoX2V4
Y2VwdGlvbnNfOwotICAgIEdURVNUX0ZMQUcoY29sb3IpID0gY29sb3JfOwotICAgIEdURVNUX0ZM
QUcoZmlsdGVyKSA9IGZpbHRlcl87Ci0gICAgR1RFU1RfRkxBRyhsaXN0X3Rlc3RzKSA9IGxpc3Rf
dGVzdHNfOwotICAgIEdURVNUX0ZMQUcob3V0cHV0KSA9IG91dHB1dF87Ci0gICAgR1RFU1RfRkxB
RyhwcmludF90aW1lKSA9IHByaW50X3RpbWVfOwotICAgIEdURVNUX0ZMQUcocmFuZG9tX3NlZWQp
ID0gcmFuZG9tX3NlZWRfOwotICAgIEdURVNUX0ZMQUcocmVwZWF0KSA9IHJlcGVhdF87Ci0gICAg
R1RFU1RfRkxBRyhzaHVmZmxlKSA9IHNodWZmbGVfOwotICAgIEdURVNUX0ZMQUcoc3RhY2tfdHJh
Y2VfZGVwdGgpID0gc3RhY2tfdHJhY2VfZGVwdGhfOwotICAgIEdURVNUX0ZMQUcoc3RyZWFtX3Jl
c3VsdF90bykgPSBzdHJlYW1fcmVzdWx0X3RvXzsKLSAgICBHVEVTVF9GTEFHKHRocm93X29uX2Zh
aWx1cmUpID0gdGhyb3dfb25fZmFpbHVyZV87Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIEZpZWxk
cyBmb3Igc2F2aW5nIHRoZSBvcmlnaW5hbCB2YWx1ZXMgb2YgZmxhZ3MuCi0gIGJvb2wgYWxzb19y
dW5fZGlzYWJsZWRfdGVzdHNfOwotICBib29sIGJyZWFrX29uX2ZhaWx1cmVfOwotICBib29sIGNh
dGNoX2V4Y2VwdGlvbnNfOwotICBzdGQ6OnN0cmluZyBjb2xvcl87Ci0gIHN0ZDo6c3RyaW5nIGZp
bHRlcl87Ci0gIGJvb2wgbGlzdF90ZXN0c187Ci0gIHN0ZDo6c3RyaW5nIG91dHB1dF87Ci0gIGJv
b2wgcHJpbnRfdGltZV87Ci0gIGludGVybmFsOjpJbnQzMiByYW5kb21fc2VlZF87Ci0gIGludGVy
bmFsOjpJbnQzMiByZXBlYXRfOwotICBib29sIHNodWZmbGVfOwotICBpbnRlcm5hbDo6SW50MzIg
c3RhY2tfdHJhY2VfZGVwdGhfOwotICBzdGQ6OnN0cmluZyBzdHJlYW1fcmVzdWx0X3RvXzsKLSAg
Ym9vbCB0aHJvd19vbl9mYWlsdXJlXzsKLX0gR1RFU1RfQVRUUklCVVRFX1VOVVNFRF87Ci0KLS8v
IENvbnZlcnRzIGEgVW5pY29kZSBjb2RlIHBvaW50IHRvIGEgbmFycm93IHN0cmluZyBpbiBVVEYt
OCBlbmNvZGluZy4KLS8vIGNvZGVfcG9pbnQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgVUludDMyIGJl
Y2F1c2Ugd2NoYXJfdCBtYXkgbm90IGJlCi0vLyB3aWRlIGVub3VnaCB0byBjb250YWluIGEgY29k
ZSBwb2ludC4KLS8vIElmIHRoZSBjb2RlX3BvaW50IGlzIG5vdCBhIHZhbGlkIFVuaWNvZGUgY29k
ZSBwb2ludAotLy8gKGkuZS4gb3V0c2lkZSBvZiBVbmljb2RlIHJhbmdlIFUrMCB0byBVKzEwRkZG
RikgaXQgd2lsbCBiZSBjb252ZXJ0ZWQKLS8vIHRvICIoSW52YWxpZCBVbmljb2RlIDB4WFhYWFhY
WFgpIi4KLUdURVNUX0FQSV8gc3RkOjpzdHJpbmcgQ29kZVBvaW50VG9VdGY4KFVJbnQzMiBjb2Rl
X3BvaW50KTsKLQotLy8gQ29udmVydHMgYSB3aWRlIHN0cmluZyB0byBhIG5hcnJvdyBzdHJpbmcg
aW4gVVRGLTggZW5jb2RpbmcuCi0vLyBUaGUgd2lkZSBzdHJpbmcgaXMgYXNzdW1lZCB0byBoYXZl
IHRoZSBmb2xsb3dpbmcgZW5jb2Rpbmc6Ci0vLyAgIFVURi0xNiBpZiBzaXplb2Yod2NoYXJfdCkg
PT0gMiAob24gV2luZG93cywgQ3lnd2luLCBTeW1iaWFuIE9TKQotLy8gICBVVEYtMzIgaWYgc2l6
ZW9mKHdjaGFyX3QpID09IDQgKG9uIExpbnV4KQotLy8gUGFyYW1ldGVyIHN0ciBwb2ludHMgdG8g
YSBudWxsLXRlcm1pbmF0ZWQgd2lkZSBzdHJpbmcuCi0vLyBQYXJhbWV0ZXIgbnVtX2NoYXJzIG1h
eSBhZGRpdGlvbmFsbHkgbGltaXQgdGhlIG51bWJlcgotLy8gb2Ygd2NoYXJfdCBjaGFyYWN0ZXJz
IHByb2Nlc3NlZC4gLTEgaXMgdXNlZCB3aGVuIHRoZSBlbnRpcmUgc3RyaW5nCi0vLyBzaG91bGQg
YmUgcHJvY2Vzc2VkLgotLy8gSWYgdGhlIHN0cmluZyBjb250YWlucyBjb2RlIHBvaW50cyB0aGF0
IGFyZSBub3QgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50cwotLy8gKGkuZS4gb3V0c2lkZSBvZiBV
bmljb2RlIHJhbmdlIFUrMCB0byBVKzEwRkZGRikgdGhleSB3aWxsIGJlIG91dHB1dAotLy8gYXMg
JyhJbnZhbGlkIFVuaWNvZGUgMHhYWFhYWFhYWCknLiBJZiB0aGUgc3RyaW5nIGlzIGluIFVURjE2
IGVuY29kaW5nCi0vLyBhbmQgY29udGFpbnMgaW52YWxpZCBVVEYtMTYgc3Vycm9nYXRlIHBhaXJz
LCB2YWx1ZXMgaW4gdGhvc2UgcGFpcnMKLS8vIHdpbGwgYmUgZW5jb2RlZCBhcyBpbmRpdmlkdWFs
IFVuaWNvZGUgY2hhcmFjdGVycyBmcm9tIEJhc2ljIE5vcm1hbCBQbGFuZS4KLUdURVNUX0FQSV8g
c3RkOjpzdHJpbmcgV2lkZVN0cmluZ1RvVXRmOChjb25zdCB3Y2hhcl90KiBzdHIsIGludCBudW1f
Y2hhcnMpOwotCi0vLyBSZWFkcyB0aGUgR1RFU1RfU0hBUkRfU1RBVFVTX0ZJTEUgZW52aXJvbm1l
bnQgdmFyaWFibGUsIGFuZCBjcmVhdGVzIHRoZSBmaWxlCi0vLyBpZiB0aGUgdmFyaWFibGUgaXMg
cHJlc2VudC4gSWYgYSBmaWxlIGFscmVhZHkgZXhpc3RzIGF0IHRoaXMgbG9jYXRpb24sIHRoaXMK
LS8vIGZ1bmN0aW9uIHdpbGwgd3JpdGUgb3ZlciBpdC4gSWYgdGhlIHZhcmlhYmxlIGlzIHByZXNl
bnQsIGJ1dCB0aGUgZmlsZSBjYW5ub3QKLS8vIGJlIGNyZWF0ZWQsIHByaW50cyBhbiBlcnJvciBh
bmQgZXhpdHMuCi12b2lkIFdyaXRlVG9TaGFyZFN0YXR1c0ZpbGVJZk5lZWRlZCgpOwotCi0vLyBD
aGVja3Mgd2hldGhlciBzaGFyZGluZyBpcyBlbmFibGVkIGJ5IGV4YW1pbmluZyB0aGUgcmVsZXZh
bnQKLS8vIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlcy4gSWYgdGhlIHZhcmlhYmxlcyBhcmUg
cHJlc2VudCwKLS8vIGJ1dCBpbmNvbnNpc3RlbnQgKGUuZy4sIHNoYXJkX2luZGV4ID49IHRvdGFs
X3NoYXJkcyksIHByaW50cwotLy8gYW4gZXJyb3IgYW5kIGV4aXRzLiBJZiBpbl9zdWJwcm9jZXNz
X2Zvcl9kZWF0aF90ZXN0LCBzaGFyZGluZyBpcwotLy8gZGlzYWJsZWQgYmVjYXVzZSBpdCBtdXN0
IG9ubHkgYmUgYXBwbGllZCB0byB0aGUgb3JpZ2luYWwgdGVzdAotLy8gcHJvY2Vzcy4gT3RoZXJ3
aXNlLCB3ZSBjb3VsZCBmaWx0ZXIgb3V0IGRlYXRoIHRlc3RzIHdlIGludGVuZGVkIHRvIGV4ZWN1
dGUuCi1HVEVTVF9BUElfIGJvb2wgU2hvdWxkU2hhcmQoY29uc3QgY2hhciogdG90YWxfc2hhcmRz
X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzaGFyZF9pbmRl
eF9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbl9zdWJwcm9jZXNzX2Zv
cl9kZWF0aF90ZXN0KTsKLQotLy8gUGFyc2VzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YXIg
YXMgYW4gSW50MzIuIElmIGl0IGlzIHVuc2V0LAotLy8gcmV0dXJucyBkZWZhdWx0X3ZhbC4gSWYg
aXQgaXMgbm90IGFuIEludDMyLCBwcmludHMgYW4gZXJyb3IgYW5kCi0vLyBhbmQgYWJvcnRzLgot
R1RFU1RfQVBJXyBJbnQzMiBJbnQzMkZyb21FbnZPckRpZShjb25zdCBjaGFyKiBlbnZfdmFyLCBJ
bnQzMiBkZWZhdWx0X3ZhbCk7Ci0KLS8vIEdpdmVuIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2hhcmRz
LCB0aGUgc2hhcmQgaW5kZXgsIGFuZCB0aGUgdGVzdCBpZCwKLS8vIHJldHVybnMgdHJ1ZSBpZmYg
dGhlIHRlc3Qgc2hvdWxkIGJlIHJ1biBvbiB0aGlzIHNoYXJkLiBUaGUgdGVzdCBpZCBpcwotLy8g
c29tZSBhcmJpdHJhcnkgYnV0IHVuaXF1ZSBub24tbmVnYXRpdmUgaW50ZWdlciBhc3NpZ25lZCB0
byBlYWNoIHRlc3QKLS8vIG1ldGhvZC4gQXNzdW1lcyB0aGF0IDAgPD0gc2hhcmRfaW5kZXggPCB0
b3RhbF9zaGFyZHMuCi1HVEVTVF9BUElfIGJvb2wgU2hvdWxkUnVuVGVzdE9uU2hhcmQoCi0gICAg
aW50IHRvdGFsX3NoYXJkcywgaW50IHNoYXJkX2luZGV4LCBpbnQgdGVzdF9pZCk7Ci0KLS8vIFNU
TCBjb250YWluZXIgdXRpbGl0aWVzLgotCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVu
dHMgaW4gdGhlIGdpdmVuIGNvbnRhaW5lciB0aGF0IHNhdGlzZnkKLS8vIHRoZSBnaXZlbiBwcmVk
aWNhdGUuCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyLCB0eXBlbmFtZSBQcmVkaWNhdGU+Ci1p
bmxpbmUgaW50IENvdW50SWYoY29uc3QgQ29udGFpbmVyJiBjLCBQcmVkaWNhdGUgcHJlZGljYXRl
KSB7Ci0gIC8vIEltcGxlbWVudGVkIGFzIGFuIGV4cGxpY2l0IGxvb3Agc2luY2Ugc3RkOjpjb3Vu
dF9pZigpIGluIGxpYkNzdGQgb24KLSAgLy8gU29sYXJpcyBoYXMgYSBub24tc3RhbmRhcmQgc2ln
bmF0dXJlLgotICBpbnQgY291bnQgPSAwOwotICBmb3IgKHR5cGVuYW1lIENvbnRhaW5lcjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBjLmJlZ2luKCk7IGl0ICE9IGMuZW5kKCk7ICsraXQpIHsKLSAgICBp
ZiAocHJlZGljYXRlKCppdCkpCi0gICAgICArK2NvdW50OwotICB9Ci0gIHJldHVybiBjb3VudDsK
LX0KLQotLy8gQXBwbGllcyBhIGZ1bmN0aW9uL2Z1bmN0b3IgdG8gZWFjaCBlbGVtZW50IGluIHRo
ZSBjb250YWluZXIuCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyLCB0eXBlbmFtZSBGdW5jdG9y
Pgotdm9pZCBGb3JFYWNoKGNvbnN0IENvbnRhaW5lciYgYywgRnVuY3RvciBmdW5jdG9yKSB7Ci0g
IHN0ZDo6Zm9yX2VhY2goYy5iZWdpbigpLCBjLmVuZCgpLCBmdW5jdG9yKTsKLX0KLQotLy8gUmV0
dXJucyB0aGUgaS10aCBlbGVtZW50IG9mIHRoZSB2ZWN0b3IsIG9yIGRlZmF1bHRfdmFsdWUgaWYg
aSBpcyBub3QKLS8vIGluIHJhbmdlIFswLCB2LnNpemUoKSkuCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
RT4KLWlubGluZSBFIEdldEVsZW1lbnRPcihjb25zdCBzdGQ6OnZlY3RvcjxFPiYgdiwgaW50IGks
IEUgZGVmYXVsdF92YWx1ZSkgewotICByZXR1cm4gKGkgPCAwIHx8IGkgPj0gc3RhdGljX2Nhc3Q8
aW50Pih2LnNpemUoKSkpID8gZGVmYXVsdF92YWx1ZSA6IHZbaV07Ci19Ci0KLS8vIFBlcmZvcm1z
IGFuIGluLXBsYWNlIHNodWZmbGUgb2YgYSByYW5nZSBvZiB0aGUgdmVjdG9yJ3MgZWxlbWVudHMu
Ci0vLyAnYmVnaW4nIGFuZCAnZW5kJyBhcmUgZWxlbWVudCBpbmRpY2VzIGFzIGFuIFNUTC1zdHls
ZSByYW5nZTsKLS8vIGkuZS4gW2JlZ2luLCBlbmQpIGFyZSBzaHVmZmxlZCwgd2hlcmUgJ2VuZCcg
PT0gc2l6ZSgpIG1lYW5zIHRvCi0vLyBzaHVmZmxlIHRvIHRoZSBlbmQgb2YgdGhlIHZlY3Rvci4K
LXRlbXBsYXRlIDx0eXBlbmFtZSBFPgotdm9pZCBTaHVmZmxlUmFuZ2UoaW50ZXJuYWw6OlJhbmRv
bSogcmFuZG9tLCBpbnQgYmVnaW4sIGludCBlbmQsCi0gICAgICAgICAgICAgICAgICBzdGQ6OnZl
Y3RvcjxFPiogdikgewotICBjb25zdCBpbnQgc2l6ZSA9IHN0YXRpY19jYXN0PGludD4odi0+c2l6
ZSgpKTsKLSAgR1RFU1RfQ0hFQ0tfKDAgPD0gYmVnaW4gJiYgYmVnaW4gPD0gc2l6ZSkKLSAgICAg
IDw8ICJJbnZhbGlkIHNodWZmbGUgcmFuZ2Ugc3RhcnQgIiA8PCBiZWdpbiA8PCAiOiBtdXN0IGJl
IGluIHJhbmdlIFswLCAiCi0gICAgICA8PCBzaXplIDw8ICJdLiI7Ci0gIEdURVNUX0NIRUNLXyhi
ZWdpbiA8PSBlbmQgJiYgZW5kIDw9IHNpemUpCi0gICAgICA8PCAiSW52YWxpZCBzaHVmZmxlIHJh
bmdlIGZpbmlzaCAiIDw8IGVuZCA8PCAiOiBtdXN0IGJlIGluIHJhbmdlIFsiCi0gICAgICA8PCBi
ZWdpbiA8PCAiLCAiIDw8IHNpemUgPDwgIl0uIjsKLQotICAvLyBGaXNoZXItWWF0ZXMgc2h1ZmZs
ZSwgZnJvbQotICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlci1ZYXRlc19z
aHVmZmxlCi0gIGZvciAoaW50IHJhbmdlX3dpZHRoID0gZW5kIC0gYmVnaW47IHJhbmdlX3dpZHRo
ID49IDI7IHJhbmdlX3dpZHRoLS0pIHsKLSAgICBjb25zdCBpbnQgbGFzdF9pbl9yYW5nZSA9IGJl
Z2luICsgcmFuZ2Vfd2lkdGggLSAxOwotICAgIGNvbnN0IGludCBzZWxlY3RlZCA9IGJlZ2luICsg
cmFuZG9tLT5HZW5lcmF0ZShyYW5nZV93aWR0aCk7Ci0gICAgc3RkOjpzd2FwKCgqdilbc2VsZWN0
ZWRdLCAoKnYpW2xhc3RfaW5fcmFuZ2VdKTsKLSAgfQotfQotCi0vLyBQZXJmb3JtcyBhbiBpbi1w
bGFjZSBzaHVmZmxlIG9mIHRoZSB2ZWN0b3IncyBlbGVtZW50cy4KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBFPgotaW5saW5lIHZvaWQgU2h1ZmZsZShpbnRlcm5hbDo6UmFuZG9tKiByYW5kb20sIHN0ZDo6
dmVjdG9yPEU+KiB2KSB7Ci0gIFNodWZmbGVSYW5nZShyYW5kb20sIDAsIHN0YXRpY19jYXN0PGlu
dD4odi0+c2l6ZSgpKSwgdik7Ci19Ci0KLS8vIEEgZnVuY3Rpb24gZm9yIGRlbGV0aW5nIGFuIG9i
amVjdC4gIEhhbmR5IGZvciBiZWluZyB1c2VkIGFzIGEKLS8vIGZ1bmN0b3IuCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KLXN0YXRpYyB2b2lkIERlbGV0ZShUKiB4KSB7Ci0gIGRlbGV0ZSB4OwotfQot
Ci0vLyBBIHByZWRpY2F0ZSB0aGF0IGNoZWNrcyB0aGUga2V5IG9mIGEgVGVzdFByb3BlcnR5IGFn
YWluc3QgYSBrbm93biBrZXkuCi0vLwotLy8gVGVzdFByb3BlcnR5S2V5SXMgaXMgY29weWFibGUu
Ci1jbGFzcyBUZXN0UHJvcGVydHlLZXlJcyB7Ci0gcHVibGljOgotICAvLyBDb25zdHJ1Y3Rvci4K
LSAgLy8KLSAgLy8gVGVzdFByb3BlcnR5S2V5SXMgaGFzIE5PIGRlZmF1bHQgY29uc3RydWN0b3Iu
Ci0gIGV4cGxpY2l0IFRlc3RQcm9wZXJ0eUtleUlzKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpIDog
a2V5XyhrZXkpIHt9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgdGVzdCBuYW1lIG9mIHRl
c3QgcHJvcGVydHkgbWF0Y2hlcyBvbiBrZXlfLgotICBib29sIG9wZXJhdG9yKCkoY29uc3QgVGVz
dFByb3BlcnR5JiB0ZXN0X3Byb3BlcnR5KSBjb25zdCB7Ci0gICAgcmV0dXJuIHRlc3RfcHJvcGVy
dHkua2V5KCkgPT0ga2V5XzsKLSAgfQotCi0gcHJpdmF0ZToKLSAgc3RkOjpzdHJpbmcga2V5XzsK
LX07Ci0KLS8vIENsYXNzIFVuaXRUZXN0T3B0aW9ucy4KLS8vCi0vLyBUaGlzIGNsYXNzIGNvbnRh
aW5zIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBvcHRpb25zIHRoZSB1c2VyCi0vLyBzcGVjaWZp
ZXMgd2hlbiBydW5uaW5nIHRoZSB0ZXN0cy4gIEl0IGhhcyBvbmx5IHN0YXRpYyBtZW1iZXJzLgot
Ly8KLS8vIEluIG1vc3QgY2FzZXMsIHRoZSB1c2VyIGNhbiBzcGVjaWZ5IGFuIG9wdGlvbiB1c2lu
ZyBlaXRoZXIgYW4KLS8vIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIGEgY29tbWFuZCBsaW5lIGZs
YWcuICBFLmcuIHlvdSBjYW4gc2V0IHRoZQotLy8gdGVzdCBmaWx0ZXIgdXNpbmcgZWl0aGVyIEdU
RVNUX0ZJTFRFUiBvciAtLWd0ZXN0X2ZpbHRlci4gIElmIGJvdGgKLS8vIHRoZSB2YXJpYWJsZSBh
bmQgdGhlIGZsYWcgYXJlIHByZXNlbnQsIHRoZSBsYXR0ZXIgb3ZlcnJpZGVzIHRoZQotLy8gZm9y
bWVyLgotY2xhc3MgR1RFU1RfQVBJXyBVbml0VGVzdE9wdGlvbnMgewotIHB1YmxpYzoKLSAgLy8g
RnVuY3Rpb25zIGZvciBwcm9jZXNzaW5nIHRoZSBndGVzdF9vdXRwdXQgZmxhZy4KLQotICAvLyBS
ZXR1cm5zIHRoZSBvdXRwdXQgZm9ybWF0LCBvciAiIiBmb3Igbm9ybWFsIHByaW50ZWQgb3V0cHV0
LgotICBzdGF0aWMgc3RkOjpzdHJpbmcgR2V0T3V0cHV0Rm9ybWF0KCk7Ci0KLSAgLy8gUmV0dXJu
cyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgcmVxdWVzdGVkIG91dHB1dCBmaWxlLCBvciB0aGUK
LSAgLy8gZGVmYXVsdCAodGVzdF9kZXRhaWwueG1sIGluIHRoZSBvcmlnaW5hbCB3b3JraW5nIGRp
cmVjdG9yeSkgaWYKLSAgLy8gbm9uZSB3YXMgZXhwbGljaXRseSBzcGVjaWZpZWQuCi0gIHN0YXRp
YyBzdGQ6OnN0cmluZyBHZXRBYnNvbHV0ZVBhdGhUb091dHB1dEZpbGUoKTsKLQotICAvLyBGdW5j
dGlvbnMgZm9yIHByb2Nlc3NpbmcgdGhlIGd0ZXN0X2ZpbHRlciBmbGFnLgotCi0gIC8vIFJldHVy
bnMgdHJ1ZSBpZmYgdGhlIHdpbGRjYXJkIHBhdHRlcm4gbWF0Y2hlcyB0aGUgc3RyaW5nLiAgVGhl
Ci0gIC8vIGZpcnN0ICc6JyBvciAnXDAnIGNoYXJhY3RlciBpbiBwYXR0ZXJuIG1hcmtzIHRoZSBl
bmQgb2YgaXQuCi0gIC8vCi0gIC8vIFRoaXMgcmVjdXJzaXZlIGFsZ29yaXRobSBpc24ndCB2ZXJ5
IGVmZmljaWVudCwgYnV0IGlzIGNsZWFyIGFuZAotICAvLyB3b3JrcyB3ZWxsIGVub3VnaCBmb3Ig
bWF0Y2hpbmcgdGVzdCBuYW1lcywgd2hpY2ggYXJlIHNob3J0LgotICBzdGF0aWMgYm9vbCBQYXR0
ZXJuTWF0Y2hlc1N0cmluZyhjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpzdHIpOwot
Ci0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHVzZXItc3BlY2lmaWVkIGZpbHRlciBtYXRjaGVz
IHRoZSB0ZXN0IGNhc2UKLSAgLy8gbmFtZSBhbmQgdGhlIHRlc3QgbmFtZS4KLSAgc3RhdGljIGJv
b2wgRmlsdGVyTWF0Y2hlc1Rlc3QoY29uc3Qgc3RkOjpzdHJpbmcgJnRlc3RfY2FzZV9uYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdGVzdF9u
YW1lKTsKLQotI2lmIEdURVNUX09TX1dJTkRPV1MKLSAgLy8gRnVuY3Rpb24gZm9yIHN1cHBvcnRp
bmcgdGhlIGd0ZXN0X2NhdGNoX2V4Y2VwdGlvbiBmbGFnLgotCi0gIC8vIFJldHVybnMgRVhDRVBU
SU9OX0VYRUNVVEVfSEFORExFUiBpZiBHb29nbGUgVGVzdCBzaG91bGQgaGFuZGxlIHRoZQotICAv
LyBnaXZlbiBTRUggZXhjZXB0aW9uLCBvciBFWENFUFRJT05fQ09OVElOVUVfU0VBUkNIIG90aGVy
d2lzZS4KLSAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgYXMgYW4gX19leGNlcHQgY29uZGl0
aW9uLgotICBzdGF0aWMgaW50IEdUZXN0U2hvdWxkUHJvY2Vzc1NFSChEV09SRCBleGNlcHRpb25f
Y29kZSk7Ci0jZW5kaWYgIC8vIEdURVNUX09TX1dJTkRPV1MKLQotICAvLyBSZXR1cm5zIHRydWUg
aWYgIm5hbWUiIG1hdGNoZXMgdGhlICc6JyBzZXBhcmF0ZWQgbGlzdCBvZiBnbG9iLXN0eWxlCi0g
IC8vIGZpbHRlcnMgaW4gImZpbHRlciIuCi0gIHN0YXRpYyBib29sIE1hdGNoZXNGaWx0ZXIoY29u
c3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IGNoYXIqIGZpbHRlcik7Ci19OwotCi0vLyBSZXR1
cm5zIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uJ3MgbmFtZSwgcmVtb3ZpbmcgZGlyZWN0b3J5IHBh
dGggaWYgdGhhdAotLy8gaXMgcHJlc2VudC4gIFVzZWQgYnkgVW5pdFRlc3RPcHRpb25zOjpHZXRP
dXRwdXRGaWxlLgotR1RFU1RfQVBJXyBGaWxlUGF0aCBHZXRDdXJyZW50RXhlY3V0YWJsZU5hbWUo
KTsKLQotLy8gVGhlIHJvbGUgaW50ZXJmYWNlIGZvciBnZXR0aW5nIHRoZSBPUyBzdGFjayB0cmFj
ZSBhcyBhIHN0cmluZy4KLWNsYXNzIE9zU3RhY2tUcmFjZUdldHRlckludGVyZmFjZSB7Ci0gcHVi
bGljOgotICBPc1N0YWNrVHJhY2VHZXR0ZXJJbnRlcmZhY2UoKSB7fQotICB2aXJ0dWFsIH5Pc1N0
YWNrVHJhY2VHZXR0ZXJJbnRlcmZhY2UoKSB7fQotCi0gIC8vIFJldHVybnMgdGhlIGN1cnJlbnQg
T1Mgc3RhY2sgdHJhY2UgYXMgYW4gc3RkOjpzdHJpbmcuICBQYXJhbWV0ZXJzOgotICAvLwotICAv
LyAgIG1heF9kZXB0aCAgLSB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3RhY2sgZnJhbWVzIHRvIGJl
IGluY2x1ZGVkCi0gIC8vICAgICAgICAgICAgICAgIGluIHRoZSB0cmFjZS4KLSAgLy8gICBza2lw
X2NvdW50IC0gdGhlIG51bWJlciBvZiB0b3AgZnJhbWVzIHRvIGJlIHNraXBwZWQ7IGRvZXNuJ3Qg
Y291bnQKLSAgLy8gICAgICAgICAgICAgICAgYWdhaW5zdCBtYXhfZGVwdGguCi0gIHZpcnR1YWwg
c3RyaW5nIEN1cnJlbnRTdGFja1RyYWNlKGludCBtYXhfZGVwdGgsIGludCBza2lwX2NvdW50KSA9
IDA7Ci0KLSAgLy8gVXBvbkxlYXZpbmdHVGVzdCgpIHNob3VsZCBiZSBjYWxsZWQgaW1tZWRpYXRl
bHkgYmVmb3JlIEdvb2dsZSBUZXN0IGNhbGxzCi0gIC8vIHVzZXIgY29kZS4gSXQgc2F2ZXMgc29t
ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBzdGFjayB0aGF0Ci0gIC8vIEN1cnJlbnRT
dGFja1RyYWNlKCkgd2lsbCB1c2UgdG8gZmluZCBhbmQgaGlkZSBHb29nbGUgVGVzdCBzdGFjayBm
cmFtZXMuCi0gIHZpcnR1YWwgdm9pZCBVcG9uTGVhdmluZ0dUZXN0KCkgPSAwOwotCi0gIC8vIFRo
aXMgc3RyaW5nIGlzIGluc2VydGVkIGluIHBsYWNlIG9mIHN0YWNrIGZyYW1lcyB0aGF0IGFyZSBw
YXJ0IG9mCi0gIC8vIEdvb2dsZSBUZXN0J3MgaW1wbGVtZW50YXRpb24uCi0gIHN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBrRWxpZGVkRnJhbWVzTWFya2VyOwotCi0gcHJpdmF0ZToKLSAgR1RFU1Rf
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOXyhPc1N0YWNrVHJhY2VHZXR0ZXJJbnRlcmZhY2UpOwot
fTsKLQotLy8gQSB3b3JraW5nIGltcGxlbWVudGF0aW9uIG9mIHRoZSBPc1N0YWNrVHJhY2VHZXR0
ZXJJbnRlcmZhY2UgaW50ZXJmYWNlLgotY2xhc3MgT3NTdGFja1RyYWNlR2V0dGVyIDogcHVibGlj
IE9zU3RhY2tUcmFjZUdldHRlckludGVyZmFjZSB7Ci0gcHVibGljOgotICBPc1N0YWNrVHJhY2VH
ZXR0ZXIoKSB7fQotCi0gIHZpcnR1YWwgc3RyaW5nIEN1cnJlbnRTdGFja1RyYWNlKGludCBtYXhf
ZGVwdGgsIGludCBza2lwX2NvdW50KTsKLSAgdmlydHVhbCB2b2lkIFVwb25MZWF2aW5nR1Rlc3Qo
KTsKLQotIHByaXZhdGU6Ci0gIEdURVNUX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTl8oT3NTdGFj
a1RyYWNlR2V0dGVyKTsKLX07Ci0KLS8vIEluZm9ybWF0aW9uIGFib3V0IGEgR29vZ2xlIFRlc3Qg
dHJhY2UgcG9pbnQuCi1zdHJ1Y3QgVHJhY2VJbmZvIHsKLSAgY29uc3QgY2hhciogZmlsZTsKLSAg
aW50IGxpbmU7Ci0gIHN0ZDo6c3RyaW5nIG1lc3NhZ2U7Ci19OwotCi0vLyBUaGlzIGlzIHRoZSBk
ZWZhdWx0IGdsb2JhbCB0ZXN0IHBhcnQgcmVzdWx0IHJlcG9ydGVyIHVzZWQgaW4gVW5pdFRlc3RJ
bXBsLgotLy8gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IFVuaXRUZXN0SW1wbC4K
LWNsYXNzIERlZmF1bHRHbG9iYWxUZXN0UGFydFJlc3VsdFJlcG9ydGVyCi0gIDogcHVibGljIFRl
c3RQYXJ0UmVzdWx0UmVwb3J0ZXJJbnRlcmZhY2UgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgRGVm
YXVsdEdsb2JhbFRlc3RQYXJ0UmVzdWx0UmVwb3J0ZXIoVW5pdFRlc3RJbXBsKiB1bml0X3Rlc3Qp
OwotICAvLyBJbXBsZW1lbnRzIHRoZSBUZXN0UGFydFJlc3VsdFJlcG9ydGVySW50ZXJmYWNlLiBS
ZXBvcnRzIHRoZSB0ZXN0IHBhcnQKLSAgLy8gcmVzdWx0IGluIHRoZSBjdXJyZW50IHRlc3QuCi0g
IHZpcnR1YWwgdm9pZCBSZXBvcnRUZXN0UGFydFJlc3VsdChjb25zdCBUZXN0UGFydFJlc3VsdCYg
cmVzdWx0KTsKLQotIHByaXZhdGU6Ci0gIFVuaXRUZXN0SW1wbCogY29uc3QgdW5pdF90ZXN0XzsK
LQotICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJR05fKERlZmF1bHRHbG9iYWxUZXN0UGFy
dFJlc3VsdFJlcG9ydGVyKTsKLX07Ci0KLS8vIFRoaXMgaXMgdGhlIGRlZmF1bHQgcGVyIHRocmVh
ZCB0ZXN0IHBhcnQgcmVzdWx0IHJlcG9ydGVyIHVzZWQgaW4KLS8vIFVuaXRUZXN0SW1wbC4gVGhp
cyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IFVuaXRUZXN0SW1wbC4KLWNsYXNzIERlZmF1
bHRQZXJUaHJlYWRUZXN0UGFydFJlc3VsdFJlcG9ydGVyCi0gICAgOiBwdWJsaWMgVGVzdFBhcnRS
ZXN1bHRSZXBvcnRlckludGVyZmFjZSB7Ci0gcHVibGljOgotICBleHBsaWNpdCBEZWZhdWx0UGVy
VGhyZWFkVGVzdFBhcnRSZXN1bHRSZXBvcnRlcihVbml0VGVzdEltcGwqIHVuaXRfdGVzdCk7Ci0g
IC8vIEltcGxlbWVudHMgdGhlIFRlc3RQYXJ0UmVzdWx0UmVwb3J0ZXJJbnRlcmZhY2UuIFRoZSBp
bXBsZW1lbnRhdGlvbiBqdXN0Ci0gIC8vIGRlbGVnYXRlcyB0byB0aGUgY3VycmVudCBnbG9iYWwg
dGVzdCBwYXJ0IHJlc3VsdCByZXBvcnRlciBvZiAqdW5pdF90ZXN0Xy4KLSAgdmlydHVhbCB2b2lk
IFJlcG9ydFRlc3RQYXJ0UmVzdWx0KGNvbnN0IFRlc3RQYXJ0UmVzdWx0JiByZXN1bHQpOwotCi0g
cHJpdmF0ZToKLSAgVW5pdFRlc3RJbXBsKiBjb25zdCB1bml0X3Rlc3RfOwotCi0gIEdURVNUX0RJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTl8oRGVmYXVsdFBlclRocmVhZFRlc3RQYXJ0UmVzdWx0UmVw
b3J0ZXIpOwotfTsKLQotLy8gVGhlIHByaXZhdGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFVuaXRU
ZXN0IGNsYXNzLiAgV2UgZG9uJ3QgcHJvdGVjdAotLy8gdGhlIG1ldGhvZHMgdW5kZXIgYSBtdXRl
eCwgYXMgdGhpcyBjbGFzcyBpcyBub3QgYWNjZXNzaWJsZSBieSBhCi0vLyB1c2VyIGFuZCB0aGUg
VW5pdFRlc3QgY2xhc3MgdGhhdCBkZWxlZ2F0ZXMgd29yayB0byB0aGlzIGNsYXNzIGRvZXMKLS8v
IHByb3BlciBsb2NraW5nLgotY2xhc3MgR1RFU1RfQVBJXyBVbml0VGVzdEltcGwgewotIHB1Ymxp
YzoKLSAgZXhwbGljaXQgVW5pdFRlc3RJbXBsKFVuaXRUZXN0KiBwYXJlbnQpOwotICB2aXJ0dWFs
IH5Vbml0VGVzdEltcGwoKTsKLQotICAvLyBUaGVyZSBhcmUgdHdvIGRpZmZlcmVudCB3YXlzIHRv
IHJlZ2lzdGVyIHlvdXIgb3duIFRlc3RQYXJ0UmVzdWx0UmVwb3J0ZXIuCi0gIC8vIFlvdSBjYW4g
cmVnaXN0ZXIgeW91ciBvd24gcmVwb3RlciB0byBsaXN0ZW4gZWl0aGVyIG9ubHkgZm9yIHRlc3Qg
cmVzdWx0cwotICAvLyBmcm9tIHRoZSBjdXJyZW50IHRocmVhZCBvciBmb3IgcmVzdWx0cyBmcm9t
IGFsbCB0aHJlYWRzLgotICAvLyBCeSBkZWZhdWx0LCBlYWNoIHBlci10aHJlYWQgdGVzdCByZXN1
bHQgcmVwb3RlciBqdXN0IHBhc3NlcyBhIG5ldwotICAvLyBUZXN0UGFydFJlc3VsdCB0byB0aGUg
Z2xvYmFsIHRlc3QgcmVzdWx0IHJlcG9ydGVyLCB3aGljaCByZWdpc3RlcnMgdGhlCi0gIC8vIHRl
c3QgcGFydCByZXN1bHQgZm9yIHRoZSBjdXJyZW50bHkgcnVubmluZyB0ZXN0LgotCi0gIC8vIFJl
dHVybnMgdGhlIGdsb2JhbCB0ZXN0IHBhcnQgcmVzdWx0IHJlcG9ydGVyLgotICBUZXN0UGFydFJl
c3VsdFJlcG9ydGVySW50ZXJmYWNlKiBHZXRHbG9iYWxUZXN0UGFydFJlc3VsdFJlcG9ydGVyKCk7
Ci0KLSAgLy8gU2V0cyB0aGUgZ2xvYmFsIHRlc3QgcGFydCByZXN1bHQgcmVwb3J0ZXIuCi0gIHZv
aWQgU2V0R2xvYmFsVGVzdFBhcnRSZXN1bHRSZXBvcnRlcigKLSAgICAgIFRlc3RQYXJ0UmVzdWx0
UmVwb3J0ZXJJbnRlcmZhY2UqIHJlcG9ydGVyKTsKLQotICAvLyBSZXR1cm5zIHRoZSB0ZXN0IHBh
cnQgcmVzdWx0IHJlcG9ydGVyIGZvciB0aGUgY3VycmVudCB0aHJlYWQuCi0gIFRlc3RQYXJ0UmVz
dWx0UmVwb3J0ZXJJbnRlcmZhY2UqIEdldFRlc3RQYXJ0UmVzdWx0UmVwb3J0ZXJGb3JDdXJyZW50
VGhyZWFkKCk7Ci0KLSAgLy8gU2V0cyB0aGUgdGVzdCBwYXJ0IHJlc3VsdCByZXBvcnRlciBmb3Ig
dGhlIGN1cnJlbnQgdGhyZWFkLgotICB2b2lkIFNldFRlc3RQYXJ0UmVzdWx0UmVwb3J0ZXJGb3JD
dXJyZW50VGhyZWFkKAotICAgICAgVGVzdFBhcnRSZXN1bHRSZXBvcnRlckludGVyZmFjZSogcmVw
b3J0ZXIpOwotCi0gIC8vIEdldHMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsIHRlc3QgY2FzZXMu
Ci0gIGludCBzdWNjZXNzZnVsX3Rlc3RfY2FzZV9jb3VudCgpIGNvbnN0OwotCi0gIC8vIEdldHMg
dGhlIG51bWJlciBvZiBmYWlsZWQgdGVzdCBjYXNlcy4KLSAgaW50IGZhaWxlZF90ZXN0X2Nhc2Vf
Y291bnQoKSBjb25zdDsKLQotICAvLyBHZXRzIHRoZSBudW1iZXIgb2YgYWxsIHRlc3QgY2FzZXMu
Ci0gIGludCB0b3RhbF90ZXN0X2Nhc2VfY291bnQoKSBjb25zdDsKLQotICAvLyBHZXRzIHRoZSBu
dW1iZXIgb2YgYWxsIHRlc3QgY2FzZXMgdGhhdCBjb250YWluIGF0IGxlYXN0IG9uZSB0ZXN0Ci0g
IC8vIHRoYXQgc2hvdWxkIHJ1bi4KLSAgaW50IHRlc3RfY2FzZV90b19ydW5fY291bnQoKSBjb25z
dDsKLQotICAvLyBHZXRzIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bCB0ZXN0cy4KLSAgaW50IHN1
Y2Nlc3NmdWxfdGVzdF9jb3VudCgpIGNvbnN0OwotCi0gIC8vIEdldHMgdGhlIG51bWJlciBvZiBm
YWlsZWQgdGVzdHMuCi0gIGludCBmYWlsZWRfdGVzdF9jb3VudCgpIGNvbnN0OwotCi0gIC8vIEdl
dHMgdGhlIG51bWJlciBvZiBkaXNhYmxlZCB0ZXN0cyB0aGF0IHdpbGwgYmUgcmVwb3J0ZWQgaW4g
dGhlIFhNTCByZXBvcnQuCi0gIGludCByZXBvcnRhYmxlX2Rpc2FibGVkX3Rlc3RfY291bnQoKSBj
b25zdDsKLQotICAvLyBHZXRzIHRoZSBudW1iZXIgb2YgZGlzYWJsZWQgdGVzdHMuCi0gIGludCBk
aXNhYmxlZF90ZXN0X2NvdW50KCkgY29uc3Q7Ci0KLSAgLy8gR2V0cyB0aGUgbnVtYmVyIG9mIHRl
c3RzIHRvIGJlIHByaW50ZWQgaW4gdGhlIFhNTCByZXBvcnQuCi0gIGludCByZXBvcnRhYmxlX3Rl
c3RfY291bnQoKSBjb25zdDsKLQotICAvLyBHZXRzIHRoZSBudW1iZXIgb2YgYWxsIHRlc3RzLgot
ICBpbnQgdG90YWxfdGVzdF9jb3VudCgpIGNvbnN0OwotCi0gIC8vIEdldHMgdGhlIG51bWJlciBv
ZiB0ZXN0cyB0aGF0IHNob3VsZCBydW4uCi0gIGludCB0ZXN0X3RvX3J1bl9jb3VudCgpIGNvbnN0
OwotCi0gIC8vIEdldHMgdGhlIHRpbWUgb2YgdGhlIHRlc3QgcHJvZ3JhbSBzdGFydCwgaW4gbXMg
ZnJvbSB0aGUgc3RhcnQgb2YgdGhlCi0gIC8vIFVOSVggZXBvY2guCi0gIFRpbWVJbk1pbGxpcyBz
dGFydF90aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBzdGFydF90aW1lc3RhbXBfOyB9Ci0KLSAg
Ly8gR2V0cyB0aGUgZWxhcHNlZCB0aW1lLCBpbiBtaWxsaXNlY29uZHMuCi0gIFRpbWVJbk1pbGxp
cyBlbGFwc2VkX3RpbWUoKSBjb25zdCB7IHJldHVybiBlbGFwc2VkX3RpbWVfOyB9Ci0KLSAgLy8g
UmV0dXJucyB0cnVlIGlmZiB0aGUgdW5pdCB0ZXN0IHBhc3NlZCAoaS5lLiBhbGwgdGVzdCBjYXNl
cyBwYXNzZWQpLgotICBib29sIFBhc3NlZCgpIGNvbnN0IHsgcmV0dXJuICFGYWlsZWQoKTsgfQot
Ci0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHVuaXQgdGVzdCBmYWlsZWQgKGkuZS4gc29tZSB0
ZXN0IGNhc2UgZmFpbGVkCi0gIC8vIG9yIHNvbWV0aGluZyBvdXRzaWRlIG9mIGFsbCB0ZXN0cyBm
YWlsZWQpLgotICBib29sIEZhaWxlZCgpIGNvbnN0IHsKLSAgICByZXR1cm4gZmFpbGVkX3Rlc3Rf
Y2FzZV9jb3VudCgpID4gMCB8fCBhZF9ob2NfdGVzdF9yZXN1bHQoKS0+RmFpbGVkKCk7Ci0gIH0K
LQotICAvLyBHZXRzIHRoZSBpLXRoIHRlc3QgY2FzZSBhbW9uZyBhbGwgdGhlIHRlc3QgY2FzZXMu
IGkgY2FuIHJhbmdlIGZyb20gMCB0bwotICAvLyB0b3RhbF90ZXN0X2Nhc2VfY291bnQoKSAtIDEu
IElmIGkgaXMgbm90IGluIHRoYXQgcmFuZ2UsIHJldHVybnMgTlVMTC4KLSAgY29uc3QgVGVzdENh
c2UqIEdldFRlc3RDYXNlKGludCBpKSBjb25zdCB7Ci0gICAgY29uc3QgaW50IGluZGV4ID0gR2V0
RWxlbWVudE9yKHRlc3RfY2FzZV9pbmRpY2VzXywgaSwgLTEpOwotICAgIHJldHVybiBpbmRleCA8
IDAgPyBOVUxMIDogdGVzdF9jYXNlc19baV07Ci0gIH0KLQotICAvLyBHZXRzIHRoZSBpLXRoIHRl
c3QgY2FzZSBhbW9uZyBhbGwgdGhlIHRlc3QgY2FzZXMuIGkgY2FuIHJhbmdlIGZyb20gMCB0bwot
ICAvLyB0b3RhbF90ZXN0X2Nhc2VfY291bnQoKSAtIDEuIElmIGkgaXMgbm90IGluIHRoYXQgcmFu
Z2UsIHJldHVybnMgTlVMTC4KLSAgVGVzdENhc2UqIEdldE11dGFibGVUZXN0Q2FzZShpbnQgaSkg
ewotICAgIGNvbnN0IGludCBpbmRleCA9IEdldEVsZW1lbnRPcih0ZXN0X2Nhc2VfaW5kaWNlc18s
IGksIC0xKTsKLSAgICByZXR1cm4gaW5kZXggPCAwID8gTlVMTCA6IHRlc3RfY2FzZXNfW2luZGV4
XTsKLSAgfQotCi0gIC8vIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgZXZlbnQgbGlzdGVuZXIgbGlz
dC4KLSAgVGVzdEV2ZW50TGlzdGVuZXJzKiBsaXN0ZW5lcnMoKSB7IHJldHVybiAmbGlzdGVuZXJz
XzsgfQotCi0gIC8vIFJldHVybnMgdGhlIFRlc3RSZXN1bHQgZm9yIHRoZSB0ZXN0IHRoYXQncyBj
dXJyZW50bHkgcnVubmluZywgb3IKLSAgLy8gdGhlIFRlc3RSZXN1bHQgZm9yIHRoZSBhZCBob2Mg
dGVzdCBpZiBubyB0ZXN0IGlzIHJ1bm5pbmcuCi0gIFRlc3RSZXN1bHQqIGN1cnJlbnRfdGVzdF9y
ZXN1bHQoKTsKLQotICAvLyBSZXR1cm5zIHRoZSBUZXN0UmVzdWx0IGZvciB0aGUgYWQgaG9jIHRl
c3QuCi0gIGNvbnN0IFRlc3RSZXN1bHQqIGFkX2hvY190ZXN0X3Jlc3VsdCgpIGNvbnN0IHsgcmV0
dXJuICZhZF9ob2NfdGVzdF9yZXN1bHRfOyB9Ci0KLSAgLy8gU2V0cyB0aGUgT1Mgc3RhY2sgdHJh
Y2UgZ2V0dGVyLgotICAvLwotICAvLyBEb2VzIG5vdGhpbmcgaWYgdGhlIGlucHV0IGFuZCB0aGUg
Y3VycmVudCBPUyBzdGFjayB0cmFjZSBnZXR0ZXIKLSAgLy8gYXJlIHRoZSBzYW1lOyBvdGhlcndp
c2UsIGRlbGV0ZXMgdGhlIG9sZCBnZXR0ZXIgYW5kIG1ha2VzIHRoZQotICAvLyBpbnB1dCB0aGUg
Y3VycmVudCBnZXR0ZXIuCi0gIHZvaWQgc2V0X29zX3N0YWNrX3RyYWNlX2dldHRlcihPc1N0YWNr
VHJhY2VHZXR0ZXJJbnRlcmZhY2UqIGdldHRlcik7Ci0KLSAgLy8gUmV0dXJucyB0aGUgY3VycmVu
dCBPUyBzdGFjayB0cmFjZSBnZXR0ZXIgaWYgaXQgaXMgbm90IE5VTEw7Ci0gIC8vIG90aGVyd2lz
ZSwgY3JlYXRlcyBhbiBPc1N0YWNrVHJhY2VHZXR0ZXIsIG1ha2VzIGl0IHRoZSBjdXJyZW50Ci0g
IC8vIGdldHRlciwgYW5kIHJldHVybnMgaXQuCi0gIE9zU3RhY2tUcmFjZUdldHRlckludGVyZmFj
ZSogb3Nfc3RhY2tfdHJhY2VfZ2V0dGVyKCk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgY3VycmVudCBP
UyBzdGFjayB0cmFjZSBhcyBhbiBzdGQ6OnN0cmluZy4KLSAgLy8KLSAgLy8gVGhlIG1heGltdW0g
bnVtYmVyIG9mIHN0YWNrIGZyYW1lcyB0byBiZSBpbmNsdWRlZCBpcyBzcGVjaWZpZWQgYnkKLSAg
Ly8gdGhlIGd0ZXN0X3N0YWNrX3RyYWNlX2RlcHRoIGZsYWcuICBUaGUgc2tpcF9jb3VudCBwYXJh
bWV0ZXIKLSAgLy8gc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdG9wIGZyYW1lcyB0byBiZSBza2lw
cGVkLCB3aGljaCBkb2Vzbid0Ci0gIC8vIGNvdW50IGFnYWluc3QgdGhlIG51bWJlciBvZiBmcmFt
ZXMgdG8gYmUgaW5jbHVkZWQuCi0gIC8vCi0gIC8vIEZvciBleGFtcGxlLCBpZiBGb28oKSBjYWxs
cyBCYXIoKSwgd2hpY2ggaW4gdHVybiBjYWxscwotICAvLyBDdXJyZW50T3NTdGFja1RyYWNlRXhj
ZXB0VG9wKDEpLCBGb28oKSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZQotICAvLyB0cmFjZSBidXQg
QmFyKCkgYW5kIEN1cnJlbnRPc1N0YWNrVHJhY2VFeGNlcHRUb3AoKSB3b24ndC4KLSAgc3RkOjpz
dHJpbmcgQ3VycmVudE9zU3RhY2tUcmFjZUV4Y2VwdFRvcChpbnQgc2tpcF9jb3VudCkgR1RFU1Rf
Tk9fSU5MSU5FXzsKLQotICAvLyBGaW5kcyBhbmQgcmV0dXJucyBhIFRlc3RDYXNlIHdpdGggdGhl
IGdpdmVuIG5hbWUuICBJZiBvbmUgZG9lc24ndAotICAvLyBleGlzdCwgY3JlYXRlcyBvbmUgYW5k
IHJldHVybnMgaXQuCi0gIC8vCi0gIC8vIEFyZ3VtZW50czoKLSAgLy8KLSAgLy8gICB0ZXN0X2Nh
c2VfbmFtZTogbmFtZSBvZiB0aGUgdGVzdCBjYXNlCi0gIC8vICAgdHlwZV9wYXJhbTogICAgIHRo
ZSBuYW1lIG9mIHRoZSB0ZXN0J3MgdHlwZSBwYXJhbWV0ZXIsIG9yIE5VTEwgaWYKLSAgLy8gICAg
ICAgICAgICAgICAgICAgdGhpcyBpcyBub3QgYSB0eXBlZCBvciBhIHR5cGUtcGFyYW1ldGVyaXpl
ZCB0ZXN0LgotICAvLyAgIHNldF91cF90YzogICAgICBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0
aGF0IHNldHMgdXAgdGhlIHRlc3QgY2FzZQotICAvLyAgIHRlYXJfZG93bl90YzogICBwb2ludGVy
IHRvIHRoZSBmdW5jdGlvbiB0aGF0IHRlYXJzIGRvd24gdGhlIHRlc3QgY2FzZQotICBUZXN0Q2Fz
ZSogR2V0VGVzdENhc2UoY29uc3QgY2hhciogdGVzdF9jYXNlX25hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiB0eXBlX3BhcmFtLAotICAgICAgICAgICAgICAgICAgICAg
ICAgVGVzdDo6U2V0VXBUZXN0Q2FzZUZ1bmMgc2V0X3VwX3RjLAotICAgICAgICAgICAgICAgICAg
ICAgICAgVGVzdDo6VGVhckRvd25UZXN0Q2FzZUZ1bmMgdGVhcl9kb3duX3RjKTsKLQotICAvLyBB
ZGRzIGEgVGVzdEluZm8gdG8gdGhlIHVuaXQgdGVzdC4KLSAgLy8KLSAgLy8gQXJndW1lbnRzOgot
ICAvLwotICAvLyAgIHNldF91cF90YzogICAgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdGhhdCBz
ZXRzIHVwIHRoZSB0ZXN0IGNhc2UKLSAgLy8gICB0ZWFyX2Rvd25fdGM6IHBvaW50ZXIgdG8gdGhl
IGZ1bmN0aW9uIHRoYXQgdGVhcnMgZG93biB0aGUgdGVzdCBjYXNlCi0gIC8vICAgdGVzdF9pbmZv
OiAgICB0aGUgVGVzdEluZm8gb2JqZWN0Ci0gIHZvaWQgQWRkVGVzdEluZm8oVGVzdDo6U2V0VXBU
ZXN0Q2FzZUZ1bmMgc2V0X3VwX3RjLAotICAgICAgICAgICAgICAgICAgIFRlc3Q6OlRlYXJEb3du
VGVzdENhc2VGdW5jIHRlYXJfZG93bl90YywKLSAgICAgICAgICAgICAgICAgICBUZXN0SW5mbyog
dGVzdF9pbmZvKSB7Ci0gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCB0aHJlYWQtc2FmZSBkZWF0
aCB0ZXN0cywgd2UgbmVlZCB0bwotICAgIC8vIHJlbWVtYmVyIHRoZSBvcmlnaW5hbCB3b3JraW5n
IGRpcmVjdG9yeSB3aGVuIHRoZSB0ZXN0IHByb2dyYW0KLSAgICAvLyB3YXMgZmlyc3QgaW52b2tl
ZC4gIFdlIGNhbm5vdCBkbyB0aGlzIGluIFJVTl9BTExfVEVTVFMoKSwgYXMKLSAgICAvLyB0aGUg
dXNlciBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBiZWZvcmUgY2FsbGlu
ZwotICAgIC8vIFJVTl9BTExfVEVTVFMoKS4gIFRoZXJlZm9yZSB3ZSBjYXB0dXJlIHRoZSBjdXJy
ZW50IGRpcmVjdG9yeSBpbgotICAgIC8vIEFkZFRlc3RJbmZvKCksIHdoaWNoIGlzIGNhbGxlZCB0
byByZWdpc3RlciBhIFRFU1Qgb3IgVEVTVF9GCi0gICAgLy8gYmVmb3JlIG1haW4oKSBpcyByZWFj
aGVkLgotICAgIGlmIChvcmlnaW5hbF93b3JraW5nX2Rpcl8uSXNFbXB0eSgpKSB7Ci0gICAgICBv
cmlnaW5hbF93b3JraW5nX2Rpcl8uU2V0KEZpbGVQYXRoOjpHZXRDdXJyZW50RGlyKCkpOwotICAg
ICAgR1RFU1RfQ0hFQ0tfKCFvcmlnaW5hbF93b3JraW5nX2Rpcl8uSXNFbXB0eSgpKQotICAgICAg
ICAgIDw8ICJGYWlsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiI7Ci0g
ICAgfQotCi0gICAgR2V0VGVzdENhc2UodGVzdF9pbmZvLT50ZXN0X2Nhc2VfbmFtZSgpLAotICAg
ICAgICAgICAgICAgIHRlc3RfaW5mby0+dHlwZV9wYXJhbSgpLAotICAgICAgICAgICAgICAgIHNl
dF91cF90YywKLSAgICAgICAgICAgICAgICB0ZWFyX2Rvd25fdGMpLT5BZGRUZXN0SW5mbyh0ZXN0
X2luZm8pOwotICB9Ci0KLSNpZiBHVEVTVF9IQVNfUEFSQU1fVEVTVAotICAvLyBSZXR1cm5zIFBh
cmFtZXRlcml6ZWRUZXN0Q2FzZVJlZ2lzdHJ5IG9iamVjdCB1c2VkIHRvIGtlZXAgdHJhY2sgb2YK
LSAgLy8gdmFsdWUtcGFyYW1ldGVyaXplZCB0ZXN0cyBhbmQgaW5zdGFudGlhdGUgYW5kIHJlZ2lz
dGVyIHRoZW0uCi0gIGludGVybmFsOjpQYXJhbWV0ZXJpemVkVGVzdENhc2VSZWdpc3RyeSYgcGFy
YW1ldGVyaXplZF90ZXN0X3JlZ2lzdHJ5KCkgewotICAgIHJldHVybiBwYXJhbWV0ZXJpemVkX3Rl
c3RfcmVnaXN0cnlfOwotICB9Ci0jZW5kaWYgIC8vIEdURVNUX0hBU19QQVJBTV9URVNUCi0KLSAg
Ly8gU2V0cyB0aGUgVGVzdENhc2Ugb2JqZWN0IGZvciB0aGUgdGVzdCB0aGF0J3MgY3VycmVudGx5
IHJ1bm5pbmcuCi0gIHZvaWQgc2V0X2N1cnJlbnRfdGVzdF9jYXNlKFRlc3RDYXNlKiBhX2N1cnJl
bnRfdGVzdF9jYXNlKSB7Ci0gICAgY3VycmVudF90ZXN0X2Nhc2VfID0gYV9jdXJyZW50X3Rlc3Rf
Y2FzZTsKLSAgfQotCi0gIC8vIFNldHMgdGhlIFRlc3RJbmZvIG9iamVjdCBmb3IgdGhlIHRlc3Qg
dGhhdCdzIGN1cnJlbnRseSBydW5uaW5nLiAgSWYKLSAgLy8gY3VycmVudF90ZXN0X2luZm8gaXMg
TlVMTCwgdGhlIGFzc2VydGlvbiByZXN1bHRzIHdpbGwgYmUgc3RvcmVkIGluCi0gIC8vIGFkX2hv
Y190ZXN0X3Jlc3VsdF8uCi0gIHZvaWQgc2V0X2N1cnJlbnRfdGVzdF9pbmZvKFRlc3RJbmZvKiBh
X2N1cnJlbnRfdGVzdF9pbmZvKSB7Ci0gICAgY3VycmVudF90ZXN0X2luZm9fID0gYV9jdXJyZW50
X3Rlc3RfaW5mbzsKLSAgfQotCi0gIC8vIFJlZ2lzdGVycyBhbGwgcGFyYW1ldGVyaXplZCB0ZXN0
cyBkZWZpbmVkIHVzaW5nIFRFU1RfUCBhbmQKLSAgLy8gSU5TVEFOVElBVEVfVEVTVF9DQVNFX1As
IGNyZWF0aW5nIHJlZ3VsYXIgdGVzdHMgZm9yIGVhY2ggdGVzdC9wYXJhbWV0ZXIKLSAgLy8gY29t
YmluYXRpb24uIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgbW9yZSB0aGVuIG9uY2U7IGl0IGhh
cyBndWFyZHMKLSAgLy8gcHJvdGVjdGluZyBmcm9tIHJlZ2lzdGVyaW5nIHRoZSB0ZXN0cyBtb3Jl
IHRoZW4gb25jZS4gIElmCi0gIC8vIHZhbHVlLXBhcmFtZXRlcml6ZWQgdGVzdHMgYXJlIGRpc2Fi
bGVkLCBSZWdpc3RlclBhcmFtZXRlcml6ZWRUZXN0cyBpcwotICAvLyBwcmVzZW50IGJ1dCBkb2Vz
IG5vdGhpbmcuCi0gIHZvaWQgUmVnaXN0ZXJQYXJhbWV0ZXJpemVkVGVzdHMoKTsKLQotICAvLyBS
dW5zIGFsbCB0ZXN0cyBpbiB0aGlzIFVuaXRUZXN0IG9iamVjdCwgcHJpbnRzIHRoZSByZXN1bHQs
IGFuZAotICAvLyByZXR1cm5zIHRydWUgaWYgYWxsIHRlc3RzIGFyZSBzdWNjZXNzZnVsLiAgSWYg
YW55IGV4Y2VwdGlvbiBpcwotICAvLyB0aHJvd24gZHVyaW5nIGEgdGVzdCwgdGhpcyB0ZXN0IGlz
IGNvbnNpZGVyZWQgdG8gYmUgZmFpbGVkLCBidXQKLSAgLy8gdGhlIHJlc3Qgb2YgdGhlIHRlc3Rz
IHdpbGwgc3RpbGwgYmUgcnVuLgotICBib29sIFJ1bkFsbFRlc3RzKCk7Ci0KLSAgLy8gQ2xlYXJz
IHRoZSByZXN1bHRzIG9mIGFsbCB0ZXN0cywgZXhjZXB0IHRoZSBhZCBob2MgdGVzdHMuCi0gIHZv
aWQgQ2xlYXJOb25BZEhvY1Rlc3RSZXN1bHQoKSB7Ci0gICAgRm9yRWFjaCh0ZXN0X2Nhc2VzXywg
VGVzdENhc2U6OkNsZWFyVGVzdENhc2VSZXN1bHQpOwotICB9Ci0KLSAgLy8gQ2xlYXJzIHRoZSBy
ZXN1bHRzIG9mIGFkLWhvYyB0ZXN0IGFzc2VydGlvbnMuCi0gIHZvaWQgQ2xlYXJBZEhvY1Rlc3RS
ZXN1bHQoKSB7Ci0gICAgYWRfaG9jX3Rlc3RfcmVzdWx0Xy5DbGVhcigpOwotICB9Ci0KLSAgLy8g
QWRkcyBhIFRlc3RQcm9wZXJ0eSB0byB0aGUgY3VycmVudCBUZXN0UmVzdWx0IG9iamVjdCB3aGVu
IGludm9rZWQgaW4gYQotICAvLyBjb250ZXh0IG9mIGEgdGVzdCBvciBhIHRlc3QgY2FzZSwgb3Ig
dG8gdGhlIGdsb2JhbCBwcm9wZXJ0eSBzZXQuIElmIHRoZQotICAvLyByZXN1bHQgYWxyZWFkeSBj
b250YWlucyBhIHByb3BlcnR5IHdpdGggdGhlIHNhbWUga2V5LCB0aGUgdmFsdWUgd2lsbCBiZQot
ICAvLyB1cGRhdGVkLgotICB2b2lkIFJlY29yZFByb3BlcnR5KGNvbnN0IFRlc3RQcm9wZXJ0eSYg
dGVzdF9wcm9wZXJ0eSk7Ci0KLSAgZW51bSBSZWFjdGlvblRvU2hhcmRpbmcgewotICAgIEhPTk9S
X1NIQVJESU5HX1BST1RPQ09MLAotICAgIElHTk9SRV9TSEFSRElOR19QUk9UT0NPTAotICB9Owot
Ci0gIC8vIE1hdGNoZXMgdGhlIGZ1bGwgbmFtZSBvZiBlYWNoIHRlc3QgYWdhaW5zdCB0aGUgdXNl
ci1zcGVjaWZpZWQKLSAgLy8gZmlsdGVyIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSB0ZXN0IHNob3Vs
ZCBydW4sIHRoZW4gcmVjb3JkcyB0aGUKLSAgLy8gcmVzdWx0IGluIGVhY2ggVGVzdENhc2UgYW5k
IFRlc3RJbmZvIG9iamVjdC4KLSAgLy8gSWYgc2hhcmRfdGVzdHMgPT0gSE9OT1JfU0hBUkRJTkdf
UFJPVE9DT0wsIGZ1cnRoZXIgZmlsdGVycyB0ZXN0cwotICAvLyBiYXNlZCBvbiBzaGFyZGluZyB2
YXJpYWJsZXMgaW4gdGhlIGVudmlyb25tZW50LgotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg
dGVzdHMgdGhhdCBzaG91bGQgcnVuLgotICBpbnQgRmlsdGVyVGVzdHMoUmVhY3Rpb25Ub1NoYXJk
aW5nIHNoYXJkX3Rlc3RzKTsKLQotICAvLyBQcmludHMgdGhlIG5hbWVzIG9mIHRoZSB0ZXN0cyBt
YXRjaGluZyB0aGUgdXNlci1zcGVjaWZpZWQgZmlsdGVyIGZsYWcuCi0gIHZvaWQgTGlzdFRlc3Rz
TWF0Y2hpbmdGaWx0ZXIoKTsKLQotICBjb25zdCBUZXN0Q2FzZSogY3VycmVudF90ZXN0X2Nhc2Uo
KSBjb25zdCB7IHJldHVybiBjdXJyZW50X3Rlc3RfY2FzZV87IH0KLSAgVGVzdEluZm8qIGN1cnJl
bnRfdGVzdF9pbmZvKCkgeyByZXR1cm4gY3VycmVudF90ZXN0X2luZm9fOyB9Ci0gIGNvbnN0IFRl
c3RJbmZvKiBjdXJyZW50X3Rlc3RfaW5mbygpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRfdGVzdF9p
bmZvXzsgfQotCi0gIC8vIFJldHVybnMgdGhlIHZlY3RvciBvZiBlbnZpcm9ubWVudHMgdGhhdCBu
ZWVkIHRvIGJlIHNldC11cC90b3JuLWRvd24KLSAgLy8gYmVmb3JlL2FmdGVyIHRoZSB0ZXN0cyBh
cmUgcnVuLgotICBzdGQ6OnZlY3RvcjxFbnZpcm9ubWVudCo+JiBlbnZpcm9ubWVudHMoKSB7IHJl
dHVybiBlbnZpcm9ubWVudHNfOyB9Ci0KLSAgLy8gR2V0dGVycyBmb3IgdGhlIHBlci10aHJlYWQg
R29vZ2xlIFRlc3QgdHJhY2Ugc3RhY2suCi0gIHN0ZDo6dmVjdG9yPFRyYWNlSW5mbz4mIGd0ZXN0
X3RyYWNlX3N0YWNrKCkgewotICAgIHJldHVybiAqKGd0ZXN0X3RyYWNlX3N0YWNrXy5wb2ludGVy
KCkpOwotICB9Ci0gIGNvbnN0IHN0ZDo6dmVjdG9yPFRyYWNlSW5mbz4mIGd0ZXN0X3RyYWNlX3N0
YWNrKCkgY29uc3QgewotICAgIHJldHVybiBndGVzdF90cmFjZV9zdGFja18uZ2V0KCk7Ci0gIH0K
LQotICAvLyBJbml0aWFsaXplcyB0aGUgZXZlbnQgbGlzdGVuZXIgcGVyZm9ybWluZyBYTUwgb3V0
cHV0IGFzIHNwZWNpZmllZCBieQotICAvLyBVbml0VGVzdE9wdGlvbnMuIE11c3Qgbm90IGJlIGNh
bGxlZCBiZWZvcmUgSW5pdEdvb2dsZVRlc3QuCi0gIHZvaWQgQ29uZmlndXJlWG1sT3V0cHV0KCk7
Ci0KLSNpZiBHVEVTVF9DQU5fU1RSRUFNX1JFU1VMVFNfCi0gIC8vIEluaXRpYWxpemVzIHRoZSBl
dmVudCBsaXN0ZW5lciBmb3Igc3RyZWFtaW5nIHRlc3QgcmVzdWx0cyB0byBhIHNvY2tldC4KLSAg
Ly8gTXVzdCBub3QgYmUgY2FsbGVkIGJlZm9yZSBJbml0R29vZ2xlVGVzdC4KLSAgdm9pZCBDb25m
aWd1cmVTdHJlYW1pbmdPdXRwdXQoKTsKLSNlbmRpZgotCi0gIC8vIFBlcmZvcm1zIGluaXRpYWxp
emF0aW9uIGRlcGVuZGVudCB1cG9uIGZsYWcgdmFsdWVzIG9idGFpbmVkIGluCi0gIC8vIFBhcnNl
R29vZ2xlVGVzdEZsYWdzT25seS4gIElzIGNhbGxlZCBmcm9tIEluaXRHb29nbGVUZXN0IGFmdGVy
IHRoZSBjYWxsIHRvCi0gIC8vIFBhcnNlR29vZ2xlVGVzdEZsYWdzT25seS4gIEluIGNhc2UgYSB1
c2VyIG5lZ2xlY3RzIHRvIGNhbGwgSW5pdEdvb2dsZVRlc3QKLSAgLy8gdGhpcyBmdW5jdGlvbiBp
cyBhbHNvIGNhbGxlZCBmcm9tIFJ1bkFsbFRlc3RzLiAgU2luY2UgdGhpcyBmdW5jdGlvbiBjYW4g
YmUKLSAgLy8gY2FsbGVkIG1vcmUgdGhhbiBvbmNlLCBpdCBoYXMgdG8gYmUgaWRlbXBvdGVudC4K
LSAgdm9pZCBQb3N0RmxhZ1BhcnNpbmdJbml0KCk7Ci0KLSAgLy8gR2V0cyB0aGUgcmFuZG9tIHNl
ZWQgdXNlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgdGVzdCBpdGVyYXRpb24uCi0gIGlu
dCByYW5kb21fc2VlZCgpIGNvbnN0IHsgcmV0dXJuIHJhbmRvbV9zZWVkXzsgfQotCi0gIC8vIEdl
dHMgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgotICBpbnRlcm5hbDo6UmFuZG9tKiByYW5k
b20oKSB7IHJldHVybiAmcmFuZG9tXzsgfQotCi0gIC8vIFNodWZmbGVzIGFsbCB0ZXN0IGNhc2Vz
LCBhbmQgdGhlIHRlc3RzIHdpdGhpbiBlYWNoIHRlc3QgY2FzZSwKLSAgLy8gbWFraW5nIHN1cmUg
dGhhdCBkZWF0aCB0ZXN0cyBhcmUgc3RpbGwgcnVuIGZpcnN0LgotICB2b2lkIFNodWZmbGVUZXN0
cygpOwotCi0gIC8vIFJlc3RvcmVzIHRoZSB0ZXN0IGNhc2VzIGFuZCB0ZXN0cyB0byB0aGVpciBv
cmRlciBiZWZvcmUgdGhlIGZpcnN0IHNodWZmbGUuCi0gIHZvaWQgVW5zaHVmZmxlVGVzdHMoKTsK
LQotICAvLyBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBHVEVTVF9GTEFHKGNhdGNoX2V4Y2VwdGlvbnMp
IGF0IHRoZSBtb21lbnQKLSAgLy8gVW5pdFRlc3Q6OlJ1bigpIHN0YXJ0cy4KLSAgYm9vbCBjYXRj
aF9leGNlcHRpb25zKCkgY29uc3QgeyByZXR1cm4gY2F0Y2hfZXhjZXB0aW9uc187IH0KLQotIHBy
aXZhdGU6Ci0gIGZyaWVuZCBjbGFzcyA6OnRlc3Rpbmc6OlVuaXRUZXN0OwotCi0gIC8vIFVzZWQg
YnkgVW5pdFRlc3Q6OlJ1bigpIHRvIGNhcHR1cmUgdGhlIHN0YXRlIG9mCi0gIC8vIEdURVNUX0ZM
QUcoY2F0Y2hfZXhjZXB0aW9ucykgYXQgdGhlIG1vbWVudCBpdCBzdGFydHMuCi0gIHZvaWQgc2V0
X2NhdGNoX2V4Y2VwdGlvbnMoYm9vbCB2YWx1ZSkgeyBjYXRjaF9leGNlcHRpb25zXyA9IHZhbHVl
OyB9Ci0KLSAgLy8gVGhlIFVuaXRUZXN0IG9iamVjdCB0aGF0IG93bnMgdGhpcyBpbXBsZW1lbnRh
dGlvbiBvYmplY3QuCi0gIFVuaXRUZXN0KiBjb25zdCBwYXJlbnRfOwotCi0gIC8vIFRoZSB3b3Jr
aW5nIGRpcmVjdG9yeSB3aGVuIHRoZSBmaXJzdCBURVNUKCkgb3IgVEVTVF9GKCkgd2FzCi0gIC8v
IGV4ZWN1dGVkLgotICBpbnRlcm5hbDo6RmlsZVBhdGggb3JpZ2luYWxfd29ya2luZ19kaXJfOwot
Ci0gIC8vIFRoZSBkZWZhdWx0IHRlc3QgcGFydCByZXN1bHQgcmVwb3J0ZXJzLgotICBEZWZhdWx0
R2xvYmFsVGVzdFBhcnRSZXN1bHRSZXBvcnRlciBkZWZhdWx0X2dsb2JhbF90ZXN0X3BhcnRfcmVz
dWx0X3JlcG9ydGVyXzsKLSAgRGVmYXVsdFBlclRocmVhZFRlc3RQYXJ0UmVzdWx0UmVwb3J0ZXIK
LSAgICAgIGRlZmF1bHRfcGVyX3RocmVhZF90ZXN0X3BhcnRfcmVzdWx0X3JlcG9ydGVyXzsKLQot
ICAvLyBQb2ludHMgdG8gKGJ1dCBkb2Vzbid0IG93bikgdGhlIGdsb2JhbCB0ZXN0IHBhcnQgcmVz
dWx0IHJlcG9ydGVyLgotICBUZXN0UGFydFJlc3VsdFJlcG9ydGVySW50ZXJmYWNlKiBnbG9iYWxf
dGVzdF9wYXJ0X3Jlc3VsdF9yZXBvdGVyXzsKLQotICAvLyBQcm90ZWN0cyByZWFkIGFuZCB3cml0
ZSBhY2Nlc3MgdG8gZ2xvYmFsX3Rlc3RfcGFydF9yZXN1bHRfcmVwb3J0ZXJfLgotICBpbnRlcm5h
bDo6TXV0ZXggZ2xvYmFsX3Rlc3RfcGFydF9yZXN1bHRfcmVwb3J0ZXJfbXV0ZXhfOwotCi0gIC8v
IFBvaW50cyB0byAoYnV0IGRvZXNuJ3Qgb3duKSB0aGUgcGVyLXRocmVhZCB0ZXN0IHBhcnQgcmVz
dWx0IHJlcG9ydGVyLgotICBpbnRlcm5hbDo6VGhyZWFkTG9jYWw8VGVzdFBhcnRSZXN1bHRSZXBv
cnRlckludGVyZmFjZSo+Ci0gICAgICBwZXJfdGhyZWFkX3Rlc3RfcGFydF9yZXN1bHRfcmVwb3J0
ZXJfOwotCi0gIC8vIFRoZSB2ZWN0b3Igb2YgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBiZSBz
ZXQtdXAvdG9ybi1kb3duCi0gIC8vIGJlZm9yZS9hZnRlciB0aGUgdGVzdHMgYXJlIHJ1bi4KLSAg
c3RkOjp2ZWN0b3I8RW52aXJvbm1lbnQqPiBlbnZpcm9ubWVudHNfOwotCi0gIC8vIFRoZSB2ZWN0
b3Igb2YgVGVzdENhc2VzIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLiAgSXQgb3ducyB0aGUKLSAg
Ly8gZWxlbWVudHMgaW4gdGhlIHZlY3Rvci4KLSAgc3RkOjp2ZWN0b3I8VGVzdENhc2UqPiB0ZXN0
X2Nhc2VzXzsKLQotICAvLyBQcm92aWRlcyBhIGxldmVsIG9mIGluZGlyZWN0aW9uIGZvciB0aGUg
dGVzdCBjYXNlIGxpc3QgdG8gYWxsb3cKLSAgLy8gZWFzeSBzaHVmZmxpbmcgYW5kIHJlc3Rvcmlu
ZyB0aGUgdGVzdCBjYXNlIG9yZGVyLiAgVGhlIGktdGgKLSAgLy8gZWxlbWVudCBvZiB0aGlzIHZl
Y3RvciBpcyB0aGUgaW5kZXggb2YgdGhlIGktdGggdGVzdCBjYXNlIGluIHRoZQotICAvLyBzaHVm
ZmxlZCBvcmRlci4KLSAgc3RkOjp2ZWN0b3I8aW50PiB0ZXN0X2Nhc2VfaW5kaWNlc187Ci0KLSNp
ZiBHVEVTVF9IQVNfUEFSQU1fVEVTVAotICAvLyBQYXJhbWV0ZXJpemVkVGVzdFJlZ2lzdHJ5IG9i
amVjdCB1c2VkIHRvIHJlZ2lzdGVyIHZhbHVlLXBhcmFtZXRlcml6ZWQKLSAgLy8gdGVzdHMuCi0g
IGludGVybmFsOjpQYXJhbWV0ZXJpemVkVGVzdENhc2VSZWdpc3RyeSBwYXJhbWV0ZXJpemVkX3Rl
c3RfcmVnaXN0cnlfOwotCi0gIC8vIEluZGljYXRlcyB3aGV0aGVyIFJlZ2lzdGVyUGFyYW1ldGVy
aXplZFRlc3RzKCkgaGFzIGJlZW4gY2FsbGVkIGFscmVhZHkuCi0gIGJvb2wgcGFyYW1ldGVyaXpl
ZF90ZXN0c19yZWdpc3RlcmVkXzsKLSNlbmRpZiAgLy8gR1RFU1RfSEFTX1BBUkFNX1RFU1QKLQot
ICAvLyBJbmRleCBvZiB0aGUgbGFzdCBkZWF0aCB0ZXN0IGNhc2UgcmVnaXN0ZXJlZC4gIEluaXRp
YWxseSAtMS4KLSAgaW50IGxhc3RfZGVhdGhfdGVzdF9jYXNlXzsKLQotICAvLyBUaGlzIHBvaW50
cyB0byB0aGUgVGVzdENhc2UgZm9yIHRoZSBjdXJyZW50bHkgcnVubmluZyB0ZXN0LiAgSXQKLSAg
Ly8gY2hhbmdlcyBhcyBHb29nbGUgVGVzdCBnb2VzIHRocm91Z2ggb25lIHRlc3QgY2FzZSBhZnRl
ciBhbm90aGVyLgotICAvLyBXaGVuIG5vIHRlc3QgaXMgcnVubmluZywgdGhpcyBpcyBzZXQgdG8g
TlVMTCBhbmQgR29vZ2xlIFRlc3QKLSAgLy8gc3RvcmVzIGFzc2VydGlvbiByZXN1bHRzIGluIGFk
X2hvY190ZXN0X3Jlc3VsdF8uICBJbml0aWFsbHkgTlVMTC4KLSAgVGVzdENhc2UqIGN1cnJlbnRf
dGVzdF9jYXNlXzsKLQotICAvLyBUaGlzIHBvaW50cyB0byB0aGUgVGVzdEluZm8gZm9yIHRoZSBj
dXJyZW50bHkgcnVubmluZyB0ZXN0LiAgSXQKLSAgLy8gY2hhbmdlcyBhcyBHb29nbGUgVGVzdCBn
b2VzIHRocm91Z2ggb25lIHRlc3QgYWZ0ZXIgYW5vdGhlci4gIFdoZW4KLSAgLy8gbm8gdGVzdCBp
cyBydW5uaW5nLCB0aGlzIGlzIHNldCB0byBOVUxMIGFuZCBHb29nbGUgVGVzdCBzdG9yZXMKLSAg
Ly8gYXNzZXJ0aW9uIHJlc3VsdHMgaW4gYWRfaG9jX3Rlc3RfcmVzdWx0Xy4gIEluaXRpYWxseSBO
VUxMLgotICBUZXN0SW5mbyogY3VycmVudF90ZXN0X2luZm9fOwotCi0gIC8vIE5vcm1hbGx5LCBh
IHVzZXIgb25seSB3cml0ZXMgYXNzZXJ0aW9ucyBpbnNpZGUgYSBURVNUIG9yIFRFU1RfRiwKLSAg
Ly8gb3IgaW5zaWRlIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IGEgVEVTVCBvciBURVNUX0YuICBTaW5j
ZSBHb29nbGUKLSAgLy8gVGVzdCBrZWVwcyB0cmFjayBvZiB3aGljaCB0ZXN0IGlzIGN1cnJlbnQg
cnVubmluZywgaXQgY2FuCi0gIC8vIGFzc29jaWF0ZSBzdWNoIGFuIGFzc2VydGlvbiB3aXRoIHRo
ZSB0ZXN0IGl0IGJlbG9uZ3MgdG8uCi0gIC8vCi0gIC8vIElmIGFuIGFzc2VydGlvbiBpcyBlbmNv
dW50ZXJlZCB3aGVuIG5vIFRFU1Qgb3IgVEVTVF9GIGlzIHJ1bm5pbmcsCi0gIC8vIEdvb2dsZSBU
ZXN0IGF0dHJpYnV0ZXMgdGhlIGFzc2VydGlvbiByZXN1bHQgdG8gYW4gaW1hZ2luYXJ5ICJhZCBo
b2MiCi0gIC8vIHRlc3QsIGFuZCByZWNvcmRzIHRoZSByZXN1bHQgaW4gYWRfaG9jX3Rlc3RfcmVz
dWx0Xy4KLSAgVGVzdFJlc3VsdCBhZF9ob2NfdGVzdF9yZXN1bHRfOwotCi0gIC8vIFRoZSBsaXN0
IG9mIGV2ZW50IGxpc3RlbmVycyB0aGF0IGNhbiBiZSB1c2VkIHRvIHRyYWNrIGV2ZW50cyBpbnNp
ZGUKLSAgLy8gR29vZ2xlIFRlc3QuCi0gIFRlc3RFdmVudExpc3RlbmVycyBsaXN0ZW5lcnNfOwot
Ci0gIC8vIFRoZSBPUyBzdGFjayB0cmFjZSBnZXR0ZXIuICBXaWxsIGJlIGRlbGV0ZWQgd2hlbiB0
aGUgVW5pdFRlc3QKLSAgLy8gb2JqZWN0IGlzIGRlc3RydWN0ZWQuICBCeSBkZWZhdWx0LCBhbiBP
c1N0YWNrVHJhY2VHZXR0ZXIgaXMgdXNlZCwKLSAgLy8gYnV0IHRoZSB1c2VyIGNhbiBzZXQgdGhp
cyBmaWVsZCB0byB1c2UgYSBjdXN0b20gZ2V0dGVyIGlmIHRoYXQgaXMKLSAgLy8gZGVzaXJlZC4K
LSAgT3NTdGFja1RyYWNlR2V0dGVySW50ZXJmYWNlKiBvc19zdGFja190cmFjZV9nZXR0ZXJfOwot
Ci0gIC8vIFRydWUgaWZmIFBvc3RGbGFnUGFyc2luZ0luaXQoKSBoYXMgYmVlbiBjYWxsZWQuCi0g
IGJvb2wgcG9zdF9mbGFnX3BhcnNlX2luaXRfcGVyZm9ybWVkXzsKLQotICAvLyBUaGUgcmFuZG9t
IG51bWJlciBzZWVkIHVzZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGVzdCBydW4uCi0gIGlu
dCByYW5kb21fc2VlZF87Ci0KLSAgLy8gT3VyIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgotICBp
bnRlcm5hbDo6UmFuZG9tIHJhbmRvbV87Ci0KLSAgLy8gVGhlIHRpbWUgb2YgdGhlIHRlc3QgcHJv
Z3JhbSBzdGFydCwgaW4gbXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlCi0gIC8vIFVOSVggZXBvY2gu
Ci0gIFRpbWVJbk1pbGxpcyBzdGFydF90aW1lc3RhbXBfOwotCi0gIC8vIEhvdyBsb25nIHRoZSB0
ZXN0IHRvb2sgdG8gcnVuLCBpbiBtaWxsaXNlY29uZHMuCi0gIFRpbWVJbk1pbGxpcyBlbGFwc2Vk
X3RpbWVfOwotCi0gIC8vIEEgcGVyLXRocmVhZCBzdGFjayBvZiB0cmFjZXMgY3JlYXRlZCBieSB0
aGUgU0NPUEVEX1RSQUNFKCkgbWFjcm8uCi0gIGludGVybmFsOjpUaHJlYWRMb2NhbDxzdGQ6OnZl
Y3RvcjxUcmFjZUluZm8+ID4gZ3Rlc3RfdHJhY2Vfc3RhY2tfOwotCi0gIC8vIFRoZSB2YWx1ZSBv
ZiBHVEVTVF9GTEFHKGNhdGNoX2V4Y2VwdGlvbnMpIGF0IHRoZSBtb21lbnQgUnVuQWxsVGVzdHMo
KQotICAvLyBzdGFydHMuCi0gIGJvb2wgY2F0Y2hfZXhjZXB0aW9uc187Ci0KLSAgR1RFU1RfRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOXyhVbml0VGVzdEltcGwpOwotfTsgIC8vIGNsYXNzIFVuaXRU
ZXN0SW1wbAotCi0vLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgYWNjZXNzaW5nIHRoZSBnbG9i
YWwgVW5pdFRlc3QKLS8vIGltcGxlbWVudGF0aW9uIG9iamVjdC4KLWlubGluZSBVbml0VGVzdElt
cGwqIEdldFVuaXRUZXN0SW1wbCgpIHsKLSAgcmV0dXJuIFVuaXRUZXN0OjpHZXRJbnN0YW5jZSgp
LT5pbXBsKCk7Ci19Ci0KLSNpZiBHVEVTVF9VU0VTX1NJTVBMRV9SRQotCi0vLyBJbnRlcm5hbCBo
ZWxwZXIgZnVuY3Rpb25zIGZvciBpbXBsZW1lbnRpbmcgdGhlIHNpbXBsZSByZWd1bGFyCi0vLyBl
eHByZXNzaW9uIG1hdGNoZXIuCi1HVEVTVF9BUElfIGJvb2wgSXNJblNldChjaGFyIGNoLCBjb25z
dCBjaGFyKiBzdHIpOwotR1RFU1RfQVBJXyBib29sIElzQXNjaWlEaWdpdChjaGFyIGNoKTsKLUdU
RVNUX0FQSV8gYm9vbCBJc0FzY2lpUHVuY3QoY2hhciBjaCk7Ci1HVEVTVF9BUElfIGJvb2wgSXNS
ZXBlYXQoY2hhciBjaCk7Ci1HVEVTVF9BUElfIGJvb2wgSXNBc2NpaVdoaXRlU3BhY2UoY2hhciBj
aCk7Ci1HVEVTVF9BUElfIGJvb2wgSXNBc2NpaVdvcmRDaGFyKGNoYXIgY2gpOwotR1RFU1RfQVBJ
XyBib29sIElzVmFsaWRFc2NhcGUoY2hhciBjaCk7Ci1HVEVTVF9BUElfIGJvb2wgQXRvbU1hdGNo
ZXNDaGFyKGJvb2wgZXNjYXBlZCwgY2hhciBwYXR0ZXJuLCBjaGFyIGNoKTsKLUdURVNUX0FQSV8g
Ym9vbCBWYWxpZGF0ZVJlZ2V4KGNvbnN0IGNoYXIqIHJlZ2V4KTsKLUdURVNUX0FQSV8gYm9vbCBN
YXRjaFJlZ2V4QXRIZWFkKGNvbnN0IGNoYXIqIHJlZ2V4LCBjb25zdCBjaGFyKiBzdHIpOwotR1RF
U1RfQVBJXyBib29sIE1hdGNoUmVwZXRpdGlvbkFuZFJlZ2V4QXRIZWFkKAotICAgIGJvb2wgZXNj
YXBlZCwgY2hhciBjaCwgY2hhciByZXBlYXQsIGNvbnN0IGNoYXIqIHJlZ2V4LCBjb25zdCBjaGFy
KiBzdHIpOwotR1RFU1RfQVBJXyBib29sIE1hdGNoUmVnZXhBbnl3aGVyZShjb25zdCBjaGFyKiBy
ZWdleCwgY29uc3QgY2hhciogc3RyKTsKLQotI2VuZGlmICAvLyBHVEVTVF9VU0VTX1NJTVBMRV9S
RQotCi0vLyBQYXJzZXMgdGhlIGNvbW1hbmQgbGluZSBmb3IgR29vZ2xlIFRlc3QgZmxhZ3MsIHdp
dGhvdXQgaW5pdGlhbGl6aW5nCi0vLyBvdGhlciBwYXJ0cyBvZiBHb29nbGUgVGVzdC4KLUdURVNU
X0FQSV8gdm9pZCBQYXJzZUdvb2dsZVRlc3RGbGFnc09ubHkoaW50KiBhcmdjLCBjaGFyKiogYXJn
dik7Ci1HVEVTVF9BUElfIHZvaWQgUGFyc2VHb29nbGVUZXN0RmxhZ3NPbmx5KGludCogYXJnYywg
d2NoYXJfdCoqIGFyZ3YpOwotCi0vLyBUZXN0UmVzdWx0IGNvbnRhaW5zIHNvbWUgcHJpdmF0ZSBt
ZXRob2RzIHRoYXQgc2hvdWxkIGJlIGhpZGRlbiBmcm9tCi0vLyBHb29nbGUgVGVzdCB1c2VyIGJ1
dCBhcmUgcmVxdWlyZWQgZm9yIHRlc3RpbmcuIFRoaXMgY2xhc3MgYWxsb3cgb3VyIHRlc3RzCi0v
LyB0byBhY2Nlc3MgdGhlbS4KLS8vCi0vLyBUaGlzIGNsYXNzIGlzIHN1cHBsaWVkIG9ubHkgZm9y
IHRoZSBwdXJwb3NlIG9mIHRlc3RpbmcgR29vZ2xlIFRlc3QncyBvd24KLS8vIGNvbnN0cnVjdHMu
IERvIG5vdCB1c2UgaXQgaW4gdXNlciB0ZXN0cywgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0
bHkuCi1jbGFzcyBUZXN0UmVzdWx0QWNjZXNzb3IgewotIHB1YmxpYzoKLSAgc3RhdGljIHZvaWQg
UmVjb3JkUHJvcGVydHkoVGVzdFJlc3VsdCogdGVzdF9yZXN1bHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB4bWxfZWxlbWVudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVGVzdFByb3BlcnR5JiBwcm9wZXJ0eSkgewotICAgIHRl
c3RfcmVzdWx0LT5SZWNvcmRQcm9wZXJ0eSh4bWxfZWxlbWVudCwgcHJvcGVydHkpOwotICB9Ci0K
LSAgc3RhdGljIHZvaWQgQ2xlYXJUZXN0UGFydFJlc3VsdHMoVGVzdFJlc3VsdCogdGVzdF9yZXN1
bHQpIHsKLSAgICB0ZXN0X3Jlc3VsdC0+Q2xlYXJUZXN0UGFydFJlc3VsdHMoKTsKLSAgfQotCi0g
IHN0YXRpYyBjb25zdCBzdGQ6OnZlY3Rvcjx0ZXN0aW5nOjpUZXN0UGFydFJlc3VsdD4mIHRlc3Rf
cGFydF9yZXN1bHRzKAotICAgICAgY29uc3QgVGVzdFJlc3VsdCYgdGVzdF9yZXN1bHQpIHsKLSAg
ICByZXR1cm4gdGVzdF9yZXN1bHQudGVzdF9wYXJ0X3Jlc3VsdHMoKTsKLSAgfQotfTsKLQotI2lm
IEdURVNUX0NBTl9TVFJFQU1fUkVTVUxUU18KLQotLy8gU3RyZWFtcyB0ZXN0IHJlc3VsdHMgdG8g
dGhlIGdpdmVuIHBvcnQgb24gdGhlIGdpdmVuIGhvc3QgbWFjaGluZS4KLWNsYXNzIEdURVNUX0FQ
SV8gU3RyZWFtaW5nTGlzdGVuZXIgOiBwdWJsaWMgRW1wdHlUZXN0RXZlbnRMaXN0ZW5lciB7Ci0g
cHVibGljOgotICAvLyBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB3cml0aW5nIHN0cmluZ3MgdG8g
YSBzb2NrZXQuCi0gIGNsYXNzIEFic3RyYWN0U29ja2V0V3JpdGVyIHsKLSAgIHB1YmxpYzoKLSAg
ICB2aXJ0dWFsIH5BYnN0cmFjdFNvY2tldFdyaXRlcigpIHt9Ci0KLSAgICAvLyBTZW5kcyBhIHN0
cmluZyB0byB0aGUgc29ja2V0LgotICAgIHZpcnR1YWwgdm9pZCBTZW5kKGNvbnN0IHN0cmluZyYg
bWVzc2FnZSkgPSAwOwotCi0gICAgLy8gQ2xvc2VzIHRoZSBzb2NrZXQuCi0gICAgdmlydHVhbCB2
b2lkIENsb3NlQ29ubmVjdGlvbigpIHt9Ci0KLSAgICAvLyBTZW5kcyBhIHN0cmluZyBhbmQgYSBu
ZXdsaW5lIHRvIHRoZSBzb2NrZXQuCi0gICAgdm9pZCBTZW5kTG4oY29uc3Qgc3RyaW5nJiBtZXNz
YWdlKSB7Ci0gICAgICBTZW5kKG1lc3NhZ2UgKyAiXG4iKTsKLSAgICB9Ci0gIH07Ci0KLSAgLy8g
Q29uY3JldGUgY2xhc3MgZm9yIGFjdHVhbGx5IHdyaXRpbmcgc3RyaW5ncyB0byBhIHNvY2tldC4K
LSAgY2xhc3MgU29ja2V0V3JpdGVyIDogcHVibGljIEFic3RyYWN0U29ja2V0V3JpdGVyIHsKLSAg
IHB1YmxpYzoKLSAgICBTb2NrZXRXcml0ZXIoY29uc3Qgc3RyaW5nJiBob3N0LCBjb25zdCBzdHJp
bmcmIHBvcnQpCi0gICAgICAgIDogc29ja2ZkXygtMSksIGhvc3RfbmFtZV8oaG9zdCksIHBvcnRf
bnVtXyhwb3J0KSB7Ci0gICAgICBNYWtlQ29ubmVjdGlvbigpOwotICAgIH0KLQotICAgIHZpcnR1
YWwgflNvY2tldFdyaXRlcigpIHsKLSAgICAgIGlmIChzb2NrZmRfICE9IC0xKQotICAgICAgICBD
bG9zZUNvbm5lY3Rpb24oKTsKLSAgICB9Ci0KLSAgICAvLyBTZW5kcyBhIHN0cmluZyB0byB0aGUg
c29ja2V0LgotICAgIHZpcnR1YWwgdm9pZCBTZW5kKGNvbnN0IHN0cmluZyYgbWVzc2FnZSkgewot
ICAgICAgR1RFU1RfQ0hFQ0tfKHNvY2tmZF8gIT0gLTEpCi0gICAgICAgICAgPDwgIlNlbmQoKSBj
YW4gYmUgY2FsbGVkIG9ubHkgd2hlbiB0aGVyZSBpcyBhIGNvbm5lY3Rpb24uIjsKLQotICAgICAg
Y29uc3QgaW50IGxlbiA9IHN0YXRpY19jYXN0PGludD4obWVzc2FnZS5sZW5ndGgoKSk7Ci0gICAg
ICBpZiAod3JpdGUoc29ja2ZkXywgbWVzc2FnZS5jX3N0cigpLCBsZW4pICE9IGxlbikgewotICAg
ICAgICBHVEVTVF9MT0dfKFdBUk5JTkcpCi0gICAgICAgICAgICA8PCAic3RyZWFtX3Jlc3VsdF90
bzogZmFpbGVkIHRvIHN0cmVhbSB0byAiCi0gICAgICAgICAgICA8PCBob3N0X25hbWVfIDw8ICI6
IiA8PCBwb3J0X251bV87Ci0gICAgICB9Ci0gICAgfQotCi0gICBwcml2YXRlOgotICAgIC8vIENy
ZWF0ZXMgYSBjbGllbnQgc29ja2V0IGFuZCBjb25uZWN0cyB0byB0aGUgc2VydmVyLgotICAgIHZv
aWQgTWFrZUNvbm5lY3Rpb24oKTsKLQotICAgIC8vIENsb3NlcyB0aGUgc29ja2V0LgotICAgIHZv
aWQgQ2xvc2VDb25uZWN0aW9uKCkgewotICAgICAgR1RFU1RfQ0hFQ0tfKHNvY2tmZF8gIT0gLTEp
Ci0gICAgICAgICAgPDwgIkNsb3NlQ29ubmVjdGlvbigpIGNhbiBiZSBjYWxsZWQgb25seSB3aGVu
IHRoZXJlIGlzIGEgY29ubmVjdGlvbi4iOwotCi0gICAgICBjbG9zZShzb2NrZmRfKTsKLSAgICAg
IHNvY2tmZF8gPSAtMTsKLSAgICB9Ci0KLSAgICBpbnQgc29ja2ZkXzsgIC8vIHNvY2tldCBmaWxl
IGRlc2NyaXB0b3IKLSAgICBjb25zdCBzdHJpbmcgaG9zdF9uYW1lXzsKLSAgICBjb25zdCBzdHJp
bmcgcG9ydF9udW1fOwotCi0gICAgR1RFU1RfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOXyhTb2Nr
ZXRXcml0ZXIpOwotICB9OyAgLy8gY2xhc3MgU29ja2V0V3JpdGVyCi0KLSAgLy8gRXNjYXBlcyAn
PScsICcmJywgJyUnLCBhbmQgJ1xuJyBjaGFyYWN0ZXJzIGluIHN0ciBhcyAiJXh4Ii4KLSAgc3Rh
dGljIHN0cmluZyBVcmxFbmNvZGUoY29uc3QgY2hhciogc3RyKTsKLQotICBTdHJlYW1pbmdMaXN0
ZW5lcihjb25zdCBzdHJpbmcmIGhvc3QsIGNvbnN0IHN0cmluZyYgcG9ydCkKLSAgICAgIDogc29j
a2V0X3dyaXRlcl8obmV3IFNvY2tldFdyaXRlcihob3N0LCBwb3J0KSkgeyBTdGFydCgpOyB9Ci0K
LSAgZXhwbGljaXQgU3RyZWFtaW5nTGlzdGVuZXIoQWJzdHJhY3RTb2NrZXRXcml0ZXIqIHNvY2tl
dF93cml0ZXIpCi0gICAgICA6IHNvY2tldF93cml0ZXJfKHNvY2tldF93cml0ZXIpIHsgU3RhcnQo
KTsgfQotCi0gIHZvaWQgT25UZXN0UHJvZ3JhbVN0YXJ0KGNvbnN0IFVuaXRUZXN0JiAvKiB1bml0
X3Rlc3QgKi8pIHsKLSAgICBTZW5kTG4oImV2ZW50PVRlc3RQcm9ncmFtU3RhcnQiKTsKLSAgfQot
Ci0gIHZvaWQgT25UZXN0UHJvZ3JhbUVuZChjb25zdCBVbml0VGVzdCYgdW5pdF90ZXN0KSB7Ci0g
ICAgLy8gTm90ZSB0aGF0IEdvb2dsZSBUZXN0IGN1cnJlbnQgb25seSByZXBvcnQgZWxhcHNlZCB0
aW1lIGZvciBlYWNoCi0gICAgLy8gdGVzdCBpdGVyYXRpb24sIG5vdCBmb3IgdGhlIGVudGlyZSB0
ZXN0IHByb2dyYW0uCi0gICAgU2VuZExuKCJldmVudD1UZXN0UHJvZ3JhbUVuZCZwYXNzZWQ9IiAr
IEZvcm1hdEJvb2wodW5pdF90ZXN0LlBhc3NlZCgpKSk7Ci0KLSAgICAvLyBOb3RpZnkgdGhlIHN0
cmVhbWluZyBzZXJ2ZXIgdG8gc3RvcC4KLSAgICBzb2NrZXRfd3JpdGVyXy0+Q2xvc2VDb25uZWN0
aW9uKCk7Ci0gIH0KLQotICB2b2lkIE9uVGVzdEl0ZXJhdGlvblN0YXJ0KGNvbnN0IFVuaXRUZXN0
JiAvKiB1bml0X3Rlc3QgKi8sIGludCBpdGVyYXRpb24pIHsKLSAgICBTZW5kTG4oImV2ZW50PVRl
c3RJdGVyYXRpb25TdGFydCZpdGVyYXRpb249IiArCi0gICAgICAgICAgIFN0cmVhbWFibGVUb1N0
cmluZyhpdGVyYXRpb24pKTsKLSAgfQotCi0gIHZvaWQgT25UZXN0SXRlcmF0aW9uRW5kKGNvbnN0
IFVuaXRUZXN0JiB1bml0X3Rlc3QsIGludCAvKiBpdGVyYXRpb24gKi8pIHsKLSAgICBTZW5kTG4o
ImV2ZW50PVRlc3RJdGVyYXRpb25FbmQmcGFzc2VkPSIgKwotICAgICAgICAgICBGb3JtYXRCb29s
KHVuaXRfdGVzdC5QYXNzZWQoKSkgKyAiJmVsYXBzZWRfdGltZT0iICsKLSAgICAgICAgICAgU3Ry
ZWFtYWJsZVRvU3RyaW5nKHVuaXRfdGVzdC5lbGFwc2VkX3RpbWUoKSkgKyAibXMiKTsKLSAgfQot
Ci0gIHZvaWQgT25UZXN0Q2FzZVN0YXJ0KGNvbnN0IFRlc3RDYXNlJiB0ZXN0X2Nhc2UpIHsKLSAg
ICBTZW5kTG4oc3RkOjpzdHJpbmcoImV2ZW50PVRlc3RDYXNlU3RhcnQmbmFtZT0iKSArIHRlc3Rf
Y2FzZS5uYW1lKCkpOwotICB9Ci0KLSAgdm9pZCBPblRlc3RDYXNlRW5kKGNvbnN0IFRlc3RDYXNl
JiB0ZXN0X2Nhc2UpIHsKLSAgICBTZW5kTG4oImV2ZW50PVRlc3RDYXNlRW5kJnBhc3NlZD0iICsg
Rm9ybWF0Qm9vbCh0ZXN0X2Nhc2UuUGFzc2VkKCkpCi0gICAgICAgICAgICsgIiZlbGFwc2VkX3Rp
bWU9IiArIFN0cmVhbWFibGVUb1N0cmluZyh0ZXN0X2Nhc2UuZWxhcHNlZF90aW1lKCkpCi0gICAg
ICAgICAgICsgIm1zIik7Ci0gIH0KLQotICB2b2lkIE9uVGVzdFN0YXJ0KGNvbnN0IFRlc3RJbmZv
JiB0ZXN0X2luZm8pIHsKLSAgICBTZW5kTG4oc3RkOjpzdHJpbmcoImV2ZW50PVRlc3RTdGFydCZu
YW1lPSIpICsgdGVzdF9pbmZvLm5hbWUoKSk7Ci0gIH0KLQotICB2b2lkIE9uVGVzdEVuZChjb25z
dCBUZXN0SW5mbyYgdGVzdF9pbmZvKSB7Ci0gICAgU2VuZExuKCJldmVudD1UZXN0RW5kJnBhc3Nl
ZD0iICsKLSAgICAgICAgICAgRm9ybWF0Qm9vbCgodGVzdF9pbmZvLnJlc3VsdCgpKS0+UGFzc2Vk
KCkpICsKLSAgICAgICAgICAgIiZlbGFwc2VkX3RpbWU9IiArCi0gICAgICAgICAgIFN0cmVhbWFi
bGVUb1N0cmluZygodGVzdF9pbmZvLnJlc3VsdCgpKS0+ZWxhcHNlZF90aW1lKCkpICsgIm1zIik7
Ci0gIH0KLQotICB2b2lkIE9uVGVzdFBhcnRSZXN1bHQoY29uc3QgVGVzdFBhcnRSZXN1bHQmIHRl
c3RfcGFydF9yZXN1bHQpIHsKLSAgICBjb25zdCBjaGFyKiBmaWxlX25hbWUgPSB0ZXN0X3BhcnRf
cmVzdWx0LmZpbGVfbmFtZSgpOwotICAgIGlmIChmaWxlX25hbWUgPT0gTlVMTCkKLSAgICAgIGZp
bGVfbmFtZSA9ICIiOwotICAgIFNlbmRMbigiZXZlbnQ9VGVzdFBhcnRSZXN1bHQmZmlsZT0iICsg
VXJsRW5jb2RlKGZpbGVfbmFtZSkgKwotICAgICAgICAgICAiJmxpbmU9IiArIFN0cmVhbWFibGVU
b1N0cmluZyh0ZXN0X3BhcnRfcmVzdWx0LmxpbmVfbnVtYmVyKCkpICsKLSAgICAgICAgICAgIiZt
ZXNzYWdlPSIgKyBVcmxFbmNvZGUodGVzdF9wYXJ0X3Jlc3VsdC5tZXNzYWdlKCkpKTsKLSAgfQot
Ci0gcHJpdmF0ZToKLSAgLy8gU2VuZHMgdGhlIGdpdmVuIG1lc3NhZ2UgYW5kIGEgbmV3bGluZSB0
byB0aGUgc29ja2V0LgotICB2b2lkIFNlbmRMbihjb25zdCBzdHJpbmcmIG1lc3NhZ2UpIHsgc29j
a2V0X3dyaXRlcl8tPlNlbmRMbihtZXNzYWdlKTsgfQotCi0gIC8vIENhbGxlZCBhdCB0aGUgc3Rh
cnQgb2Ygc3RyZWFtaW5nIHRvIG5vdGlmeSB0aGUgcmVjZWl2ZXIgd2hhdAotICAvLyBwcm90b2Nv
bCB3ZSBhcmUgdXNpbmcuCi0gIHZvaWQgU3RhcnQoKSB7IFNlbmRMbigiZ3Rlc3Rfc3RyZWFtaW5n
X3Byb3RvY29sX3ZlcnNpb249MS4wIik7IH0KLQotICBzdHJpbmcgRm9ybWF0Qm9vbChib29sIHZh
bHVlKSB7IHJldHVybiB2YWx1ZSA/ICIxIiA6ICIwIjsgfQotCi0gIGNvbnN0IHNjb3BlZF9wdHI8
QWJzdHJhY3RTb2NrZXRXcml0ZXI+IHNvY2tldF93cml0ZXJfOwotCi0gIEdURVNUX0RJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTl8oU3RyZWFtaW5nTGlzdGVuZXIpOwotfTsgIC8vIGNsYXNzIFN0cmVh
bWluZ0xpc3RlbmVyCi0KLSNlbmRpZiAgLy8gR1RFU1RfQ0FOX1NUUkVBTV9SRVNVTFRTXwotCi19
ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSB0ZXN0aW5nCi0KLSNlbmRp
ZiAgLy8gR1RFU1RfU1JDX0dURVNUX0lOVEVSTkFMX0lOTF9IXwpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9zcmMvZ3Rlc3Qt
cG9ydC5jYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2ds
ZXRlc3Qvc3JjL2d0ZXN0LXBvcnQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1
YmYzZGQyYmU0YmUzMzYxNzZmZWI1ZDE0ZDcwZDk1MjZiMjhjN2QuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9zcmMvZ3Rlc3QtcG9ydC5jYworKysgL2Rldi9udWxs
CkBAIC0xLDEyNTkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMDgsIEdvb2dsZSBJbmMuCi0vLyBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
Ly8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotLy8KLS8vIEF1dGhvcjogd2FuQGdvb2dsZS5jb20gKFpoYW55b25nIFdhbikKLQot
I2luY2x1ZGUgImd0ZXN0L2ludGVybmFsL2d0ZXN0LXBvcnQuaCIKLQotI2luY2x1ZGUgPGxpbWl0
cy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8
c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZnN0cmVhbT4KLQotI2lmIEdURVNUX09TX1dJTkRPV1MKLSMg
aW5jbHVkZSA8d2luZG93cy5oPgotIyBpbmNsdWRlIDxpby5oPgotIyBpbmNsdWRlIDxzeXMvc3Rh
dC5oPgotIyBpbmNsdWRlIDxtYXA+ICAvLyBVc2VkIGluIFRocmVhZExvY2FsLgotI2Vsc2UKLSMg
aW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYgIC8vIEdURVNUX09TX1dJTkRPV1MKLQotI2lmIEdU
RVNUX09TX01BQwotIyBpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgotIyBpbmNsdWRlIDxtYWNo
L3Rhc2suaD4KLSMgaW5jbHVkZSA8bWFjaC92bV9tYXAuaD4KLSNlbmRpZiAgLy8gR1RFU1RfT1Nf
TUFDCi0KLSNpZiBHVEVTVF9PU19RTlgKLSMgaW5jbHVkZSA8ZGV2Y3RsLmg+Ci0jIGluY2x1ZGUg
PGZjbnRsLmg+Ci0jIGluY2x1ZGUgPHN5cy9wcm9jZnMuaD4KLSNlbmRpZiAgLy8gR1RFU1RfT1Nf
UU5YCi0KLSNpZiBHVEVTVF9PU19BSVgKLSMgaW5jbHVkZSA8cHJvY2luZm8uaD4KLSMgaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYgIC8vIEdURVNUX09TX0FJWAotCi0jaW5jbHVkZSAiZ3Rl
c3QvZ3Rlc3Qtc3BpLmgiCi0jaW5jbHVkZSAiZ3Rlc3QvZ3Rlc3QtbWVzc2FnZS5oIgotI2luY2x1
ZGUgImd0ZXN0L2ludGVybmFsL2d0ZXN0LWludGVybmFsLmgiCi0jaW5jbHVkZSAiZ3Rlc3QvaW50
ZXJuYWwvZ3Rlc3Qtc3RyaW5nLmgiCi0KLS8vIEluZGljYXRlcyB0aGF0IHRoaXMgdHJhbnNsYXRp
b24gdW5pdCBpcyBwYXJ0IG9mIEdvb2dsZSBUZXN0J3MKLS8vIGltcGxlbWVudGF0aW9uLiAgSXQg
bXVzdCBjb21lIGJlZm9yZSBndGVzdC1pbnRlcm5hbC1pbmwuaCBpcwotLy8gaW5jbHVkZWQsIG9y
IHRoZXJlIHdpbGwgYmUgYSBjb21waWxlciBlcnJvci4gIFRoaXMgdHJpY2sgZXhpc3RzIHRvCi0v
LyBwcmV2ZW50IHRoZSBhY2NpZGVudGFsIGluY2x1c2lvbiBvZiBndGVzdC1pbnRlcm5hbC1pbmwu
aCBpbiB0aGUKLS8vIHVzZXIncyBjb2RlLgotI2RlZmluZSBHVEVTVF9JTVBMRU1FTlRBVElPTl8g
MQotI2luY2x1ZGUgInNyYy9ndGVzdC1pbnRlcm5hbC1pbmwuaCIKLSN1bmRlZiBHVEVTVF9JTVBM
RU1FTlRBVElPTl8KLQotbmFtZXNwYWNlIHRlc3RpbmcgewotbmFtZXNwYWNlIGludGVybmFsIHsK
LQotI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQotLy8gTVNW
QyBhbmQgQysrQnVpbGRlciBkbyBub3QgcHJvdmlkZSBhIGRlZmluaXRpb24gb2YgU1RERVJSX0ZJ
TEVOTy4KLWNvbnN0IGludCBrU3RkT3V0RmlsZW5vID0gMTsKLWNvbnN0IGludCBrU3RkRXJyRmls
ZW5vID0gMjsKLSNlbHNlCi1jb25zdCBpbnQga1N0ZE91dEZpbGVubyA9IFNURE9VVF9GSUxFTk87
Ci1jb25zdCBpbnQga1N0ZEVyckZpbGVubyA9IFNUREVSUl9GSUxFTk87Ci0jZW5kaWYgIC8vIF9N
U0NfVkVSCi0KLSNpZiBHVEVTVF9PU19MSU5VWAotCi1uYW1lc3BhY2UgewotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci1UIFJlYWRQcm9jRmlsZUZpZWxkKGNvbnN0IHN0cmluZyYgZmlsZW5hbWUsIGlu
dCBmaWVsZCkgewotICBzdGQ6OnN0cmluZyBkdW1teTsKLSAgc3RkOjppZnN0cmVhbSBmaWxlKGZp
bGVuYW1lLmNfc3RyKCkpOwotICB3aGlsZSAoZmllbGQtLSA+IDApIHsKLSAgICBmaWxlID4+IGR1
bW15OwotICB9Ci0gIFQgb3V0cHV0ID0gMDsKLSAgZmlsZSA+PiBvdXRwdXQ7Ci0gIHJldHVybiBv
dXRwdXQ7Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFj
dGl2ZSB0aHJlYWRzLCBvciAwIHdoZW4gdGhlcmUgaXMgYW4gZXJyb3IuCi1zaXplX3QgR2V0VGhy
ZWFkQ291bnQoKSB7Ci0gIGNvbnN0IHN0cmluZyBmaWxlbmFtZSA9Ci0gICAgICAoTWVzc2FnZSgp
IDw8ICIvcHJvYy8iIDw8IGdldHBpZCgpIDw8ICIvc3RhdCIpLkdldFN0cmluZygpOwotICByZXR1
cm4gUmVhZFByb2NGaWxlRmllbGQ8aW50PihmaWxlbmFtZSwgMTkpOwotfQotCi0jZWxpZiBHVEVT
VF9PU19NQUMKLQotc2l6ZV90IEdldFRocmVhZENvdW50KCkgewotICBjb25zdCB0YXNrX3QgdGFz
ayA9IG1hY2hfdGFza19zZWxmKCk7Ci0gIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgdGhyZWFkX2Nv
dW50OwotICB0aHJlYWRfYWN0X2FycmF5X3QgdGhyZWFkX2xpc3Q7Ci0gIGNvbnN0IGtlcm5fcmV0
dXJuX3Qgc3RhdHVzID0gdGFza190aHJlYWRzKHRhc2ssICZ0aHJlYWRfbGlzdCwgJnRocmVhZF9j
b3VudCk7Ci0gIGlmIChzdGF0dXMgPT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgLy8gdGFza190aHJl
YWRzIGFsbG9jYXRlcyByZXNvdXJjZXMgaW4gdGhyZWFkX2xpc3QgYW5kIHdlIG5lZWQgdG8gZnJl
ZSB0aGVtCi0gICAgLy8gdG8gYXZvaWQgbGVha3MuCi0gICAgdm1fZGVhbGxvY2F0ZSh0YXNrLAot
ICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KHRocmVhZF9s
aXN0KSwKLSAgICAgICAgICAgICAgICAgIHNpemVvZih0aHJlYWRfdCkgKiB0aHJlYWRfY291bnQp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KHRocmVhZF9jb3VudCk7Ci0gIH0gZWxz
ZSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotI2VsaWYgR1RFU1RfT1NfUU5YCi0KLS8vIFJl
dHVybnMgdGhlIG51bWJlciBvZiB0aHJlYWRzIHJ1bm5pbmcgaW4gdGhlIHByb2Nlc3MsIG9yIDAg
dG8gaW5kaWNhdGUgdGhhdAotLy8gd2UgY2Fubm90IGRldGVjdCBpdC4KLXNpemVfdCBHZXRUaHJl
YWRDb3VudCgpIHsKLSAgY29uc3QgaW50IGZkID0gb3BlbigiL3Byb2Mvc2VsZi9hcyIsIE9fUkRP
TkxZKTsKLSAgaWYgKGZkIDwgMCkgewotICAgIHJldHVybiAwOwotICB9Ci0gIHByb2Nmc19pbmZv
IHByb2Nlc3NfaW5mbzsKLSAgY29uc3QgaW50IHN0YXR1cyA9Ci0gICAgICBkZXZjdGwoZmQsIERD
TURfUFJPQ19JTkZPLCAmcHJvY2Vzc19pbmZvLCBzaXplb2YocHJvY2Vzc19pbmZvKSwgTlVMTCk7
Ci0gIGNsb3NlKGZkKTsKLSAgaWYgKHN0YXR1cyA9PSBFT0spIHsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihwcm9jZXNzX2luZm8ubnVtX3RocmVhZHMpOwotICB9IGVsc2UgewotICAg
IHJldHVybiAwOwotICB9Ci19Ci0KLSNlbGlmIEdURVNUX09TX0FJWAotCi1zaXplX3QgR2V0VGhy
ZWFkQ291bnQoKSB7Ci0gIHN0cnVjdCBwcm9jZW50cnk2NCBlbnRyeTsKLSAgcGlkX3QgcGlkID0g
Z2V0cGlkKCk7Ci0gIGludCBzdGF0dXMgPSBnZXRwcm9jczY0KCZlbnRyeSwgc2l6ZW9mKGVudHJ5
KSwgTlVMTCwgMCwgJnBpZCwgMSk7Ci0gIGlmIChzdGF0dXMgPT0gMSkgewotICAgIHJldHVybiBl
bnRyeS5waV90aGNvdW50OwotICB9IGVsc2UgewotICAgIHJldHVybiAwOwotICB9Ci19Ci0KLSNl
bHNlCi0KLXNpemVfdCBHZXRUaHJlYWRDb3VudCgpIHsKLSAgLy8gVGhlcmUncyBubyBwb3J0YWJs
ZSB3YXkgdG8gZGV0ZWN0IHRoZSBudW1iZXIgb2YgdGhyZWFkcywgc28gd2UganVzdAotICAvLyBy
ZXR1cm4gMCB0byBpbmRpY2F0ZSB0aGF0IHdlIGNhbm5vdCBkZXRlY3QgaXQuCi0gIHJldHVybiAw
OwotfQotCi0jZW5kaWYgIC8vIEdURVNUX09TX0xJTlVYCi0KLSNpZiBHVEVTVF9JU19USFJFQURT
QUZFICYmIEdURVNUX09TX1dJTkRPV1MKLQotdm9pZCBTbGVlcE1pbGxpc2Vjb25kcyhpbnQgbikg
ewotICA6OlNsZWVwKG4pOwotfQotCi1BdXRvSGFuZGxlOjpBdXRvSGFuZGxlKCkKLSAgICA6IGhh
bmRsZV8oSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHt9Ci0KLUF1dG9IYW5kbGU6OkF1dG9IYW5kbGUo
SGFuZGxlIGhhbmRsZSkKLSAgICA6IGhhbmRsZV8oaGFuZGxlKSB7fQotCi1BdXRvSGFuZGxlOjp+
QXV0b0hhbmRsZSgpIHsKLSAgUmVzZXQoKTsKLX0KLQotQXV0b0hhbmRsZTo6SGFuZGxlIEF1dG9I
YW5kbGU6OkdldCgpIGNvbnN0IHsKLSAgcmV0dXJuIGhhbmRsZV87Ci19Ci0KLXZvaWQgQXV0b0hh
bmRsZTo6UmVzZXQoKSB7Ci0gIFJlc2V0KElOVkFMSURfSEFORExFX1ZBTFVFKTsKLX0KLQotdm9p
ZCBBdXRvSGFuZGxlOjpSZXNldChIQU5ETEUgaGFuZGxlKSB7Ci0gIC8vIFJlc2V0dGluZyB3aXRo
IHRoZSBzYW1lIGhhbmRsZSB3ZSBhbHJlYWR5IG93biBpcyBpbnZhbGlkLgotICBpZiAoaGFuZGxl
XyAhPSBoYW5kbGUpIHsKLSAgICBpZiAoSXNDbG9zZWFibGUoKSkgewotICAgICAgOjpDbG9zZUhh
bmRsZShoYW5kbGVfKTsKLSAgICB9Ci0gICAgaGFuZGxlXyA9IGhhbmRsZTsKLSAgfSBlbHNlIHsK
LSAgICBHVEVTVF9DSEVDS18oIUlzQ2xvc2VhYmxlKCkpCi0gICAgICAgIDw8ICJSZXNldHRpbmcg
YSB2YWxpZCBoYW5kbGUgdG8gaXRzZWxmIGlzIGxpa2VseSBhIHByb2dyYW1tZXIgZXJyb3IgIgot
ICAgICAgICAgICAgImFuZCB0aHVzIG5vdCBhbGxvd2VkLiI7Ci0gIH0KLX0KLQotYm9vbCBBdXRv
SGFuZGxlOjpJc0Nsb3NlYWJsZSgpIGNvbnN0IHsKLSAgLy8gRGlmZmVyZW50IFdpbmRvd3MgQVBJ
cyBtYXkgdXNlIGVpdGhlciBvZiB0aGVzZSB2YWx1ZXMgdG8gcmVwcmVzZW50IGFuCi0gIC8vIGlu
dmFsaWQgaGFuZGxlLgotICByZXR1cm4gaGFuZGxlXyAhPSBOVUxMICYmIGhhbmRsZV8gIT0gSU5W
QUxJRF9IQU5ETEVfVkFMVUU7Ci19Ci0KLU5vdGlmaWNhdGlvbjo6Tm90aWZpY2F0aW9uKCkKLSAg
ICA6IGV2ZW50Xyg6OkNyZWF0ZUV2ZW50KE5VTEwsICAgLy8gRGVmYXVsdCBzZWN1cml0eSBhdHRy
aWJ1dGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwgICAvLyBEbyBub3QgcmVz
ZXQgYXV0b21hdGljYWxseS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCAgLy8g
SW5pdGlhbGx5IHVuc2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpIHsgIC8v
IEFub255bW91cyBldmVudC4KLSAgR1RFU1RfQ0hFQ0tfKGV2ZW50Xy5HZXQoKSAhPSBOVUxMKTsK
LX0KLQotdm9pZCBOb3RpZmljYXRpb246Ok5vdGlmeSgpIHsKLSAgR1RFU1RfQ0hFQ0tfKDo6U2V0
RXZlbnQoZXZlbnRfLkdldCgpKSAhPSBGQUxTRSk7Ci19Ci0KLXZvaWQgTm90aWZpY2F0aW9uOjpX
YWl0Rm9yTm90aWZpY2F0aW9uKCkgewotICBHVEVTVF9DSEVDS18oCi0gICAgICA6OldhaXRGb3JT
aW5nbGVPYmplY3QoZXZlbnRfLkdldCgpLCBJTkZJTklURSkgPT0gV0FJVF9PQkpFQ1RfMCk7Ci19
Ci0KLU11dGV4OjpNdXRleCgpCi0gICAgOiBvd25lcl90aHJlYWRfaWRfKDApLAotICAgICAgdHlw
ZV8oa0R5bmFtaWMpLAotICAgICAgY3JpdGljYWxfc2VjdGlvbl9pbml0X3BoYXNlXygwKSwKLSAg
ICAgIGNyaXRpY2FsX3NlY3Rpb25fKG5ldyBDUklUSUNBTF9TRUNUSU9OKSB7Ci0gIDo6SW5pdGlh
bGl6ZUNyaXRpY2FsU2VjdGlvbihjcml0aWNhbF9zZWN0aW9uXyk7Ci19Ci0KLU11dGV4Ojp+TXV0
ZXgoKSB7Ci0gIC8vIFN0YXRpYyBtdXRleGVzIGFyZSBsZWFrZWQgaW50ZW50aW9uYWxseS4gSXQg
aXMgbm90IHRocmVhZC1zYWZlIHRvIHRyeQotICAvLyB0byBjbGVhbiB0aGVtIHVwLgotICAvLyBU
T0RPKHl1a2F3YSk6IFN3aXRjaCB0byBTbGltIFJlYWRlci9Xcml0ZXIgKFNSVykgTG9ja3MsIHdo
aWNoIHJlcXVpcmVzCi0gIC8vIG5vdGhpbmcgdG8gY2xlYW4gaXQgdXAgYnV0IGlzIGF2YWlsYWJs
ZSBvbmx5IG9uIFZpc3RhIGFuZCBsYXRlci4KLSAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNv
bS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTkwNDkzNy5hc3B4Ci0gIGlmICh0eXBl
XyA9PSBrRHluYW1pYykgewotICAgIDo6RGVsZXRlQ3JpdGljYWxTZWN0aW9uKGNyaXRpY2FsX3Nl
Y3Rpb25fKTsKLSAgICBkZWxldGUgY3JpdGljYWxfc2VjdGlvbl87Ci0gICAgY3JpdGljYWxfc2Vj
dGlvbl8gPSBOVUxMOwotICB9Ci19Ci0KLXZvaWQgTXV0ZXg6OkxvY2soKSB7Ci0gIFRocmVhZFNh
ZmVMYXp5SW5pdCgpOwotICA6OkVudGVyQ3JpdGljYWxTZWN0aW9uKGNyaXRpY2FsX3NlY3Rpb25f
KTsKLSAgb3duZXJfdGhyZWFkX2lkXyA9IDo6R2V0Q3VycmVudFRocmVhZElkKCk7Ci19Ci0KLXZv
aWQgTXV0ZXg6OlVubG9jaygpIHsKLSAgVGhyZWFkU2FmZUxhenlJbml0KCk7Ci0gIC8vIFdlIGRv
bid0IHByb3RlY3Qgd3JpdGluZyB0byBvd25lcl90aHJlYWRfaWRfIGhlcmUsIGFzIGl0J3MgdGhl
Ci0gIC8vIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50
IHRocmVhZCBob2xkcyB0aGUKLSAgLy8gbXV0ZXggd2hlbiB0aGlzIGlzIGNhbGxlZC4KLSAgb3du
ZXJfdGhyZWFkX2lkXyA9IDA7Ci0gIDo6TGVhdmVDcml0aWNhbFNlY3Rpb24oY3JpdGljYWxfc2Vj
dGlvbl8pOwotfQotCi0vLyBEb2VzIG5vdGhpbmcgaWYgdGhlIGN1cnJlbnQgdGhyZWFkIGhvbGRz
IHRoZSBtdXRleC4gT3RoZXJ3aXNlLCBjcmFzaGVzCi0vLyB3aXRoIGhpZ2ggcHJvYmFiaWxpdHku
Ci12b2lkIE11dGV4OjpBc3NlcnRIZWxkKCkgewotICBUaHJlYWRTYWZlTGF6eUluaXQoKTsKLSAg
R1RFU1RfQ0hFQ0tfKG93bmVyX3RocmVhZF9pZF8gPT0gOjpHZXRDdXJyZW50VGhyZWFkSWQoKSkK
LSAgICAgIDw8ICJUaGUgY3VycmVudCB0aHJlYWQgaXMgbm90IGhvbGRpbmcgdGhlIG11dGV4IEAi
IDw8IHRoaXM7Ci19Ci0KLS8vIEluaXRpYWxpemVzIG93bmVyX3RocmVhZF9pZF8gYW5kIGNyaXRp
Y2FsX3NlY3Rpb25fIGluIHN0YXRpYyBtdXRleGVzLgotdm9pZCBNdXRleDo6VGhyZWFkU2FmZUxh
enlJbml0KCkgewotICAvLyBEeW5hbWljIG11dGV4ZXMgYXJlIGluaXRpYWxpemVkIGluIHRoZSBj
b25zdHJ1Y3Rvci4KLSAgaWYgKHR5cGVfID09IGtTdGF0aWMpIHsKLSAgICBzd2l0Y2ggKAotICAg
ICAgICA6OkludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCZjcml0aWNhbF9zZWN0aW9uX2luaXRf
cGhhc2VfLCAxTCwgMEwpKSB7Ci0gICAgICBjYXNlIDA6Ci0gICAgICAgIC8vIElmIGNyaXRpY2Fs
X3NlY3Rpb25faW5pdF9waGFzZV8gd2FzIDAgYmVmb3JlIHRoZSBleGNoYW5nZSwgd2UKLSAgICAg
ICAgLy8gYXJlIHRoZSBmaXJzdCB0byB0ZXN0IGl0IGFuZCBuZWVkIHRvIHBlcmZvcm0gdGhlIGlu
aXRpYWxpemF0aW9uLgotICAgICAgICBvd25lcl90aHJlYWRfaWRfID0gMDsKLSAgICAgICAgY3Jp
dGljYWxfc2VjdGlvbl8gPSBuZXcgQ1JJVElDQUxfU0VDVElPTjsKLSAgICAgICAgOjpJbml0aWFs
aXplQ3JpdGljYWxTZWN0aW9uKGNyaXRpY2FsX3NlY3Rpb25fKTsKLSAgICAgICAgLy8gVXBkYXRl
cyB0aGUgY3JpdGljYWxfc2VjdGlvbl9pbml0X3BoYXNlXyB0byAyIHRvIHNpZ25hbAotICAgICAg
ICAvLyBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS4KLSAgICAgICAgR1RFU1RfQ0hFQ0tfKDo6SW50
ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZjcml0
aWNhbF9zZWN0aW9uX2luaXRfcGhhc2VfLCAyTCwgMUwpID09Ci0gICAgICAgICAgICAgICAgICAg
ICAgMUwpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMToKLSAgICAgICAgLy8gU29tZWJv
ZHkgZWxzZSBpcyBhbHJlYWR5IGluaXRpYWxpemluZyB0aGUgbXV0ZXg7IHNwaW4gdW50aWwgdGhl
eQotICAgICAgICAvLyBhcmUgZG9uZS4KLSAgICAgICAgd2hpbGUgKDo6SW50ZXJsb2NrZWRDb21w
YXJlRXhjaGFuZ2UoJmNyaXRpY2FsX3NlY3Rpb25faW5pdF9waGFzZV8sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJMLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyTCkgIT0gMkwpIHsKLSAgICAgICAgICAvLyBQb3NzaWJs
eSB5aWVsZHMgdGhlIHJlc3Qgb2YgdGhlIHRocmVhZCdzIHRpbWUgc2xpY2UgdG8gb3RoZXIKLSAg
ICAgICAgICAvLyB0aHJlYWRzLgotICAgICAgICAgIDo6U2xlZXAoMCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgMjoKLSAgICAgICAgYnJlYWs7ICAvLyBUaGUgbXV0
ZXggaXMgYWxyZWFkeSBpbml0aWFsaXplZCBhbmQgcmVhZHkgZm9yIHVzZS4KLQotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgR1RFU1RfQ0hFQ0tfKGZhbHNlKQotICAgICAgICAgICAgPDwgIlVuZXhw
ZWN0ZWQgdmFsdWUgb2YgY3JpdGljYWxfc2VjdGlvbl9pbml0X3BoYXNlXyAiCi0gICAgICAgICAg
ICA8PCAid2hpbGUgaW5pdGlhbGl6aW5nIGEgc3RhdGljIG11dGV4LiI7Ci0gICAgfQotICB9Ci19
Ci0KLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIFRocmVhZFdpdGhQYXJhbVN1cHBvcnQgOiBwdWJsaWMg
VGhyZWFkV2l0aFBhcmFtQmFzZSB7Ci0gcHVibGljOgotICBzdGF0aWMgSEFORExFIENyZWF0ZVRo
cmVhZChSdW5uYWJsZSogcnVubmFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v
dGlmaWNhdGlvbiogdGhyZWFkX2Nhbl9zdGFydCkgewotICAgIFRocmVhZE1haW5QYXJhbSogcGFy
YW0gPSBuZXcgVGhyZWFkTWFpblBhcmFtKHJ1bm5hYmxlLCB0aHJlYWRfY2FuX3N0YXJ0KTsKLSAg
ICBEV09SRCB0aHJlYWRfaWQ7Ci0gICAgLy8gVE9ETyh5dWthd2EpOiBDb25zaWRlciB0byB1c2Ug
X2JlZ2ludGhyZWFkZXggaW5zdGVhZC4KLSAgICBIQU5ETEUgdGhyZWFkX2hhbmRsZSA9IDo6Q3Jl
YXRlVGhyZWFkKAotICAgICAgICBOVUxMLCAgICAvLyBEZWZhdWx0IHNlY3VyaXR5LgotICAgICAg
ICAwLCAgICAgICAvLyBEZWZhdWx0IHN0YWNrIHNpemUuCi0gICAgICAgICZUaHJlYWRXaXRoUGFy
YW1TdXBwb3J0OjpUaHJlYWRNYWluLAotICAgICAgICBwYXJhbSwgICAvLyBQYXJhbWV0ZXIgdG8g
VGhyZWFkTWFpblN0YXRpYwotICAgICAgICAweDAsICAgICAvLyBEZWZhdWx0IGNyZWF0aW9uIGZs
YWdzLgotICAgICAgICAmdGhyZWFkX2lkKTsgIC8vIE5lZWQgYSB2YWxpZCBwb2ludGVyIGZvciB0
aGUgY2FsbCB0byB3b3JrIHVuZGVyIFdpbjk4LgotICAgIEdURVNUX0NIRUNLXyh0aHJlYWRfaGFu
ZGxlICE9IE5VTEwpIDw8ICJDcmVhdGVUaHJlYWQgZmFpbGVkIHdpdGggZXJyb3IgIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IDo6R2V0TGFzdEVycm9yKCkgPDwg
Ii4iOwotICAgIGlmICh0aHJlYWRfaGFuZGxlID09IE5VTEwpIHsKLSAgICAgIGRlbGV0ZSBwYXJh
bTsKLSAgICB9Ci0gICAgcmV0dXJuIHRocmVhZF9oYW5kbGU7Ci0gIH0KLQotIHByaXZhdGU6Ci0g
IHN0cnVjdCBUaHJlYWRNYWluUGFyYW0gewotICAgIFRocmVhZE1haW5QYXJhbShSdW5uYWJsZSog
cnVubmFibGUsIE5vdGlmaWNhdGlvbiogdGhyZWFkX2Nhbl9zdGFydCkKLSAgICAgICAgOiBydW5u
YWJsZV8ocnVubmFibGUpLAotICAgICAgICAgIHRocmVhZF9jYW5fc3RhcnRfKHRocmVhZF9jYW5f
c3RhcnQpIHsKLSAgICB9Ci0gICAgc2NvcGVkX3B0cjxSdW5uYWJsZT4gcnVubmFibGVfOwotICAg
IC8vIERvZXMgbm90IG93bi4KLSAgICBOb3RpZmljYXRpb24qIHRocmVhZF9jYW5fc3RhcnRfOwot
ICB9OwotCi0gIHN0YXRpYyBEV09SRCBXSU5BUEkgVGhyZWFkTWFpbih2b2lkKiBwdHIpIHsKLSAg
ICAvLyBUcmFuc2ZlcnMgb3duZXJzaGlwLgotICAgIHNjb3BlZF9wdHI8VGhyZWFkTWFpblBhcmFt
PiBwYXJhbShzdGF0aWNfY2FzdDxUaHJlYWRNYWluUGFyYW0qPihwdHIpKTsKLSAgICBpZiAocGFy
YW0tPnRocmVhZF9jYW5fc3RhcnRfICE9IE5VTEwpCi0gICAgICBwYXJhbS0+dGhyZWFkX2Nhbl9z
dGFydF8tPldhaXRGb3JOb3RpZmljYXRpb24oKTsKLSAgICBwYXJhbS0+cnVubmFibGVfLT5SdW4o
KTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIC8vIFByb2hpYml0IGluc3RhbnRpYXRpb24uCi0g
IFRocmVhZFdpdGhQYXJhbVN1cHBvcnQoKTsKLQotICBHVEVTVF9ESVNBTExPV19DT1BZX0FORF9B
U1NJR05fKFRocmVhZFdpdGhQYXJhbVN1cHBvcnQpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlCi0K
LVRocmVhZFdpdGhQYXJhbUJhc2U6OlRocmVhZFdpdGhQYXJhbUJhc2UoUnVubmFibGUgKnJ1bm5h
YmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRp
b24qIHRocmVhZF9jYW5fc3RhcnQpCi0gICAgICA6IHRocmVhZF8oVGhyZWFkV2l0aFBhcmFtU3Vw
cG9ydDo6Q3JlYXRlVGhyZWFkKHJ1bm5hYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfY2FuX3N0YXJ0KSkgewotfQotCi1UaHJl
YWRXaXRoUGFyYW1CYXNlOjp+VGhyZWFkV2l0aFBhcmFtQmFzZSgpIHsKLSAgSm9pbigpOwotfQot
Ci12b2lkIFRocmVhZFdpdGhQYXJhbUJhc2U6OkpvaW4oKSB7Ci0gIEdURVNUX0NIRUNLXyg6Oldh
aXRGb3JTaW5nbGVPYmplY3QodGhyZWFkXy5HZXQoKSwgSU5GSU5JVEUpID09IFdBSVRfT0JKRUNU
XzApCi0gICAgICA8PCAiRmFpbGVkIHRvIGpvaW4gdGhlIHRocmVhZCB3aXRoIGVycm9yICIgPDwg
OjpHZXRMYXN0RXJyb3IoKSA8PCAiLiI7Ci19Ci0KLS8vIE1hcHMgYSB0aHJlYWQgdG8gYSBzZXQg
b2YgVGhyZWFkSWRUb1RocmVhZExvY2FscyB0aGF0IGhhdmUgdmFsdWVzCi0vLyBpbnN0YW50aWF0
ZWQgb24gdGhhdCB0aHJlYWQgYW5kIG5vdGlmaWVzIHRoZW0gd2hlbiB0aGUgdGhyZWFkIGV4aXRz
LiAgQQotLy8gVGhyZWFkTG9jYWwgaW5zdGFuY2UgaXMgZXhwZWN0ZWQgdG8gcGVyc2lzdCB1bnRp
bCBhbGwgdGhyZWFkcyBpdCBoYXMKLS8vIHZhbHVlcyBvbiBoYXZlIHRlcm1pbmF0ZWQuCi1jbGFz
cyBUaHJlYWRMb2NhbFJlZ2lzdHJ5SW1wbCB7Ci0gcHVibGljOgotICAvLyBSZWdpc3RlcnMgdGhy
ZWFkX2xvY2FsX2luc3RhbmNlIGFzIGhhdmluZyB2YWx1ZSBvbiB0aGUgY3VycmVudCB0aHJlYWQu
Ci0gIC8vIFJldHVybnMgYSB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSB0
aHJlYWQgZnJvbSBvdGhlciB0aHJlYWRzLgotICBzdGF0aWMgVGhyZWFkTG9jYWxWYWx1ZUhvbGRl
ckJhc2UqIEdldFZhbHVlT25DdXJyZW50VGhyZWFkKAotICAgICAgY29uc3QgVGhyZWFkTG9jYWxC
YXNlKiB0aHJlYWRfbG9jYWxfaW5zdGFuY2UpIHsKLSAgICBEV09SRCBjdXJyZW50X3RocmVhZCA9
IDo6R2V0Q3VycmVudFRocmVhZElkKCk7Ci0gICAgTXV0ZXhMb2NrIGxvY2soJm11dGV4Xyk7Ci0g
ICAgVGhyZWFkSWRUb1RocmVhZExvY2FscyogY29uc3QgdGhyZWFkX3RvX3RocmVhZF9sb2NhbHMg
PQotICAgICAgICBHZXRUaHJlYWRMb2NhbHNNYXBMb2NrZWQoKTsKLSAgICBUaHJlYWRJZFRvVGhy
ZWFkTG9jYWxzOjppdGVyYXRvciB0aHJlYWRfbG9jYWxfcG9zID0KLSAgICAgICAgdGhyZWFkX3Rv
X3RocmVhZF9sb2NhbHMtPmZpbmQoY3VycmVudF90aHJlYWQpOwotICAgIGlmICh0aHJlYWRfbG9j
YWxfcG9zID09IHRocmVhZF90b190aHJlYWRfbG9jYWxzLT5lbmQoKSkgewotICAgICAgdGhyZWFk
X2xvY2FsX3BvcyA9IHRocmVhZF90b190aHJlYWRfbG9jYWxzLT5pbnNlcnQoCi0gICAgICAgICAg
c3RkOjptYWtlX3BhaXIoY3VycmVudF90aHJlYWQsIFRocmVhZExvY2FsVmFsdWVzKCkpKS5maXJz
dDsKLSAgICAgIFN0YXJ0V2F0Y2hlclRocmVhZEZvcihjdXJyZW50X3RocmVhZCk7Ci0gICAgfQot
ICAgIFRocmVhZExvY2FsVmFsdWVzJiB0aHJlYWRfbG9jYWxfdmFsdWVzID0gdGhyZWFkX2xvY2Fs
X3Bvcy0+c2Vjb25kOwotICAgIFRocmVhZExvY2FsVmFsdWVzOjppdGVyYXRvciB2YWx1ZV9wb3Mg
PQotICAgICAgICB0aHJlYWRfbG9jYWxfdmFsdWVzLmZpbmQodGhyZWFkX2xvY2FsX2luc3RhbmNl
KTsKLSAgICBpZiAodmFsdWVfcG9zID09IHRocmVhZF9sb2NhbF92YWx1ZXMuZW5kKCkpIHsKLSAg
ICAgIHZhbHVlX3BvcyA9Ci0gICAgICAgICAgdGhyZWFkX2xvY2FsX3ZhbHVlcwotICAgICAgICAg
ICAgICAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKAotICAgICAgICAgICAgICAgICAgdGhyZWFkX2xv
Y2FsX2luc3RhbmNlLAotICAgICAgICAgICAgICAgICAgbGlua2VkX3B0cjxUaHJlYWRMb2NhbFZh
bHVlSG9sZGVyQmFzZT4oCi0gICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX2xvY2FsX2luc3Rh
bmNlLT5OZXdWYWx1ZUZvckN1cnJlbnRUaHJlYWQoKSkpKQotICAgICAgICAgICAgICAuZmlyc3Q7
Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZV9wb3MtPnNlY29uZC5nZXQoKTsKLSAgfQotCi0gIHN0
YXRpYyB2b2lkIE9uVGhyZWFkTG9jYWxEZXN0cm95ZWQoCi0gICAgICBjb25zdCBUaHJlYWRMb2Nh
bEJhc2UqIHRocmVhZF9sb2NhbF9pbnN0YW5jZSkgewotICAgIHN0ZDo6dmVjdG9yPGxpbmtlZF9w
dHI8VGhyZWFkTG9jYWxWYWx1ZUhvbGRlckJhc2U+ID4gdmFsdWVfaG9sZGVyczsKLSAgICAvLyBD
bGVhbiB1cCB0aGUgVGhyZWFkTG9jYWxWYWx1ZXMgZGF0YSBzdHJ1Y3R1cmUgd2hpbGUgaG9sZGlu
ZyB0aGUgbG9jaywgYnV0Ci0gICAgLy8gZGVmZXIgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSBUaHJl
YWRMb2NhbFZhbHVlSG9sZGVyQmFzZXMuCi0gICAgewotICAgICAgTXV0ZXhMb2NrIGxvY2soJm11
dGV4Xyk7Ci0gICAgICBUaHJlYWRJZFRvVGhyZWFkTG9jYWxzKiBjb25zdCB0aHJlYWRfdG9fdGhy
ZWFkX2xvY2FscyA9Ci0gICAgICAgICAgR2V0VGhyZWFkTG9jYWxzTWFwTG9ja2VkKCk7Ci0gICAg
ICBmb3IgKFRocmVhZElkVG9UaHJlYWRMb2NhbHM6Oml0ZXJhdG9yIGl0ID0KLSAgICAgICAgICB0
aHJlYWRfdG9fdGhyZWFkX2xvY2Fscy0+YmVnaW4oKTsKLSAgICAgICAgICBpdCAhPSB0aHJlYWRf
dG9fdGhyZWFkX2xvY2Fscy0+ZW5kKCk7Ci0gICAgICAgICAgKytpdCkgewotICAgICAgICBUaHJl
YWRMb2NhbFZhbHVlcyYgdGhyZWFkX2xvY2FsX3ZhbHVlcyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAg
IFRocmVhZExvY2FsVmFsdWVzOjppdGVyYXRvciB2YWx1ZV9wb3MgPQotICAgICAgICAgICAgdGhy
ZWFkX2xvY2FsX3ZhbHVlcy5maW5kKHRocmVhZF9sb2NhbF9pbnN0YW5jZSk7Ci0gICAgICAgIGlm
ICh2YWx1ZV9wb3MgIT0gdGhyZWFkX2xvY2FsX3ZhbHVlcy5lbmQoKSkgewotICAgICAgICAgIHZh
bHVlX2hvbGRlcnMucHVzaF9iYWNrKHZhbHVlX3Bvcy0+c2Vjb25kKTsKLSAgICAgICAgICB0aHJl
YWRfbG9jYWxfdmFsdWVzLmVyYXNlKHZhbHVlX3Bvcyk7Ci0gICAgICAgICAgLy8gVGhpcyAnaWYn
IGNhbiBvbmx5IGJlIHN1Y2Nlc3NmdWwgYXQgbW9zdCBvbmNlLCBzbyB0aGVvcmV0aWNhbGx5IHdl
Ci0gICAgICAgICAgLy8gY291bGQgYnJlYWsgb3V0IG9mIHRoZSBsb29wIGhlcmUsIGJ1dCB3ZSBk
b24ndCBib3RoZXIgZG9pbmcgc28uCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgLy8g
T3V0c2lkZSB0aGUgbG9jaywgbGV0IHRoZSBkZXN0cnVjdG9yIGZvciAndmFsdWVfaG9sZGVycycg
ZGVhbGxvY2F0ZSB0aGUKLSAgICAvLyBUaHJlYWRMb2NhbFZhbHVlSG9sZGVyQmFzZXMuCi0gIH0K
LQotICBzdGF0aWMgdm9pZCBPblRocmVhZEV4aXQoRFdPUkQgdGhyZWFkX2lkKSB7Ci0gICAgR1RF
U1RfQ0hFQ0tfKHRocmVhZF9pZCAhPSAwKSA8PCA6OkdldExhc3RFcnJvcigpOwotICAgIHN0ZDo6
dmVjdG9yPGxpbmtlZF9wdHI8VGhyZWFkTG9jYWxWYWx1ZUhvbGRlckJhc2U+ID4gdmFsdWVfaG9s
ZGVyczsKLSAgICAvLyBDbGVhbiB1cCB0aGUgVGhyZWFkSWRUb1RocmVhZExvY2FscyBkYXRhIHN0
cnVjdHVyZSB3aGlsZSBob2xkaW5nIHRoZQotICAgIC8vIGxvY2ssIGJ1dCBkZWZlciB0aGUgZGVz
dHJ1Y3Rpb24gb2YgdGhlIFRocmVhZExvY2FsVmFsdWVIb2xkZXJCYXNlcy4KLSAgICB7Ci0gICAg
ICBNdXRleExvY2sgbG9jaygmbXV0ZXhfKTsKLSAgICAgIFRocmVhZElkVG9UaHJlYWRMb2NhbHMq
IGNvbnN0IHRocmVhZF90b190aHJlYWRfbG9jYWxzID0KLSAgICAgICAgICBHZXRUaHJlYWRMb2Nh
bHNNYXBMb2NrZWQoKTsKLSAgICAgIFRocmVhZElkVG9UaHJlYWRMb2NhbHM6Oml0ZXJhdG9yIHRo
cmVhZF9sb2NhbF9wb3MgPQotICAgICAgICAgIHRocmVhZF90b190aHJlYWRfbG9jYWxzLT5maW5k
KHRocmVhZF9pZCk7Ci0gICAgICBpZiAodGhyZWFkX2xvY2FsX3BvcyAhPSB0aHJlYWRfdG9fdGhy
ZWFkX2xvY2Fscy0+ZW5kKCkpIHsKLSAgICAgICAgVGhyZWFkTG9jYWxWYWx1ZXMmIHRocmVhZF9s
b2NhbF92YWx1ZXMgPSB0aHJlYWRfbG9jYWxfcG9zLT5zZWNvbmQ7Ci0gICAgICAgIGZvciAoVGhy
ZWFkTG9jYWxWYWx1ZXM6Oml0ZXJhdG9yIHZhbHVlX3BvcyA9Ci0gICAgICAgICAgICB0aHJlYWRf
bG9jYWxfdmFsdWVzLmJlZ2luKCk7Ci0gICAgICAgICAgICB2YWx1ZV9wb3MgIT0gdGhyZWFkX2xv
Y2FsX3ZhbHVlcy5lbmQoKTsKLSAgICAgICAgICAgICsrdmFsdWVfcG9zKSB7Ci0gICAgICAgICAg
dmFsdWVfaG9sZGVycy5wdXNoX2JhY2sodmFsdWVfcG9zLT5zZWNvbmQpOwotICAgICAgICB9Ci0g
ICAgICAgIHRocmVhZF90b190aHJlYWRfbG9jYWxzLT5lcmFzZSh0aHJlYWRfbG9jYWxfcG9zKTsK
LSAgICAgIH0KLSAgICB9Ci0gICAgLy8gT3V0c2lkZSB0aGUgbG9jaywgbGV0IHRoZSBkZXN0cnVj
dG9yIGZvciAndmFsdWVfaG9sZGVycycgZGVhbGxvY2F0ZSB0aGUKLSAgICAvLyBUaHJlYWRMb2Nh
bFZhbHVlSG9sZGVyQmFzZXMuCi0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIEluIGEgcGFydGljdWxh
ciB0aHJlYWQsIG1hcHMgYSBUaHJlYWRMb2NhbCBvYmplY3QgdG8gaXRzIHZhbHVlLgotICB0eXBl
ZGVmIHN0ZDo6bWFwPGNvbnN0IFRocmVhZExvY2FsQmFzZSosCi0gICAgICAgICAgICAgICAgICAg
bGlua2VkX3B0cjxUaHJlYWRMb2NhbFZhbHVlSG9sZGVyQmFzZT4gPiBUaHJlYWRMb2NhbFZhbHVl
czsKLSAgLy8gU3RvcmVzIGFsbCBUaHJlYWRJZFRvVGhyZWFkTG9jYWxzIGhhdmluZyB2YWx1ZXMg
aW4gYSB0aHJlYWQsIGluZGV4ZWQgYnkKLSAgLy8gdGhyZWFkJ3MgSUQuCi0gIHR5cGVkZWYgc3Rk
OjptYXA8RFdPUkQsIFRocmVhZExvY2FsVmFsdWVzPiBUaHJlYWRJZFRvVGhyZWFkTG9jYWxzOwot
Ci0gIC8vIEhvbGRzIHRoZSB0aHJlYWQgaWQgYW5kIHRocmVhZCBoYW5kbGUgdGhhdCB3ZSBwYXNz
IGZyb20KLSAgLy8gU3RhcnRXYXRjaGVyVGhyZWFkRm9yIHRvIFdhdGNoZXJUaHJlYWRGdW5jLgot
ICB0eXBlZGVmIHN0ZDo6cGFpcjxEV09SRCwgSEFORExFPiBUaHJlYWRJZEFuZEhhbmRsZTsKLQot
ICBzdGF0aWMgdm9pZCBTdGFydFdhdGNoZXJUaHJlYWRGb3IoRFdPUkQgdGhyZWFkX2lkKSB7Ci0g
ICAgLy8gVGhlIHJldHVybmVkIGhhbmRsZSB3aWxsIGJlIGtlcHQgaW4gdGhyZWFkX21hcCBhbmQg
Y2xvc2VkIGJ5Ci0gICAgLy8gd2F0Y2hlcl90aHJlYWQgaW4gV2F0Y2hlclRocmVhZEZ1bmMuCi0g
ICAgSEFORExFIHRocmVhZCA9IDo6T3BlblRocmVhZChTWU5DSFJPTklaRSB8IFRIUkVBRF9RVUVS
WV9JTkZPUk1BVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX2lkKTsKLSAgICBHVEVTVF9D
SEVDS18odGhyZWFkICE9IE5VTEwpOwotICAgIC8vIFdlIG5lZWQgdG8gdG8gcGFzcyBhIHZhbGlk
IHRocmVhZCBJRCBwb2ludGVyIGludG8gQ3JlYXRlVGhyZWFkIGZvciBpdAotICAgIC8vIHRvIHdv
cmsgY29ycmVjdGx5IHVuZGVyIFdpbjk4LgotICAgIERXT1JEIHdhdGNoZXJfdGhyZWFkX2lkOwot
ICAgIEhBTkRMRSB3YXRjaGVyX3RocmVhZCA9IDo6Q3JlYXRlVGhyZWFkKAotICAgICAgICBOVUxM
LCAgIC8vIERlZmF1bHQgc2VjdXJpdHkuCi0gICAgICAgIDAsICAgICAgLy8gRGVmYXVsdCBzdGFj
ayBzaXplCi0gICAgICAgICZUaHJlYWRMb2NhbFJlZ2lzdHJ5SW1wbDo6V2F0Y2hlclRocmVhZEZ1
bmMsCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TFBWT0lEPihuZXcgVGhyZWFkSWRBbmRIYW5k
bGUodGhyZWFkX2lkLCB0aHJlYWQpKSwKLSAgICAgICAgQ1JFQVRFX1NVU1BFTkRFRCwKLSAgICAg
ICAgJndhdGNoZXJfdGhyZWFkX2lkKTsKLSAgICBHVEVTVF9DSEVDS18od2F0Y2hlcl90aHJlYWQg
IT0gTlVMTCk7Ci0gICAgLy8gR2l2ZSB0aGUgd2F0Y2hlciB0aHJlYWQgdGhlIHNhbWUgcHJpb3Jp
dHkgYXMgb3VycyB0byBhdm9pZCBiZWluZwotICAgIC8vIGJsb2NrZWQgYnkgaXQuCi0gICAgOjpT
ZXRUaHJlYWRQcmlvcml0eSh3YXRjaGVyX3RocmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IDo6R2V0VGhyZWFkUHJpb3JpdHkoOjpHZXRDdXJyZW50VGhyZWFkKCkpKTsKLSAgICA6OlJlc3Vt
ZVRocmVhZCh3YXRjaGVyX3RocmVhZCk7Ci0gICAgOjpDbG9zZUhhbmRsZSh3YXRjaGVyX3RocmVh
ZCk7Ci0gIH0KLQotICAvLyBNb25pdG9ycyBleGl0IGZyb20gYSBnaXZlbiB0aHJlYWQgYW5kIG5v
dGlmaWVzIHRob3NlCi0gIC8vIFRocmVhZElkVG9UaHJlYWRMb2NhbHMgYWJvdXQgdGhyZWFkIHRl
cm1pbmF0aW9uLgotICBzdGF0aWMgRFdPUkQgV0lOQVBJIFdhdGNoZXJUaHJlYWRGdW5jKExQVk9J
RCBwYXJhbSkgewotICAgIGNvbnN0IFRocmVhZElkQW5kSGFuZGxlKiB0YWggPQotICAgICAgICBy
ZWludGVycHJldF9jYXN0PGNvbnN0IFRocmVhZElkQW5kSGFuZGxlKj4ocGFyYW0pOwotICAgIEdU
RVNUX0NIRUNLXygKLSAgICAgICAgOjpXYWl0Rm9yU2luZ2xlT2JqZWN0KHRhaC0+c2Vjb25kLCBJ
TkZJTklURSkgPT0gV0FJVF9PQkpFQ1RfMCk7Ci0gICAgT25UaHJlYWRFeGl0KHRhaC0+Zmlyc3Qp
OwotICAgIDo6Q2xvc2VIYW5kbGUodGFoLT5zZWNvbmQpOwotICAgIGRlbGV0ZSB0YWg7Ci0gICAg
cmV0dXJuIDA7Ci0gIH0KLQotICAvLyBSZXR1cm5zIG1hcCBvZiB0aHJlYWQgbG9jYWwgaW5zdGFu
Y2VzLgotICBzdGF0aWMgVGhyZWFkSWRUb1RocmVhZExvY2FscyogR2V0VGhyZWFkTG9jYWxzTWFw
TG9ja2VkKCkgewotICAgIG11dGV4Xy5Bc3NlcnRIZWxkKCk7Ci0gICAgc3RhdGljIFRocmVhZElk
VG9UaHJlYWRMb2NhbHMqIG1hcCA9IG5ldyBUaHJlYWRJZFRvVGhyZWFkTG9jYWxzOwotICAgIHJl
dHVybiBtYXA7Ci0gIH0KLQotICAvLyBQcm90ZWN0cyBhY2Nlc3MgdG8gR2V0VGhyZWFkTG9jYWxz
TWFwTG9ja2VkKCkgYW5kIGl0cyByZXR1cm4gdmFsdWUuCi0gIHN0YXRpYyBNdXRleCBtdXRleF87
Ci0gIC8vIFByb3RlY3RzIGFjY2VzcyB0byBHZXRUaHJlYWRNYXBMb2NrZWQoKSBhbmQgaXRzIHJl
dHVybiB2YWx1ZS4KLSAgc3RhdGljIE11dGV4IHRocmVhZF9tYXBfbXV0ZXhfOwotfTsKLQotTXV0
ZXggVGhyZWFkTG9jYWxSZWdpc3RyeUltcGw6Om11dGV4XyhNdXRleDo6a1N0YXRpY011dGV4KTsK
LU11dGV4IFRocmVhZExvY2FsUmVnaXN0cnlJbXBsOjp0aHJlYWRfbWFwX211dGV4XyhNdXRleDo6
a1N0YXRpY011dGV4KTsKLQotVGhyZWFkTG9jYWxWYWx1ZUhvbGRlckJhc2UqIFRocmVhZExvY2Fs
UmVnaXN0cnk6OkdldFZhbHVlT25DdXJyZW50VGhyZWFkKAotICAgICAgY29uc3QgVGhyZWFkTG9j
YWxCYXNlKiB0aHJlYWRfbG9jYWxfaW5zdGFuY2UpIHsKLSAgcmV0dXJuIFRocmVhZExvY2FsUmVn
aXN0cnlJbXBsOjpHZXRWYWx1ZU9uQ3VycmVudFRocmVhZCgKLSAgICAgIHRocmVhZF9sb2NhbF9p
bnN0YW5jZSk7Ci19Ci0KLXZvaWQgVGhyZWFkTG9jYWxSZWdpc3RyeTo6T25UaHJlYWRMb2NhbERl
c3Ryb3llZCgKLSAgICAgIGNvbnN0IFRocmVhZExvY2FsQmFzZSogdGhyZWFkX2xvY2FsX2luc3Rh
bmNlKSB7Ci0gIFRocmVhZExvY2FsUmVnaXN0cnlJbXBsOjpPblRocmVhZExvY2FsRGVzdHJveWVk
KHRocmVhZF9sb2NhbF9pbnN0YW5jZSk7Ci19Ci0KLSNlbmRpZiAgLy8gR1RFU1RfSVNfVEhSRUFE
U0FGRSAmJiBHVEVTVF9PU19XSU5ET1dTCi0KLSNpZiBHVEVTVF9VU0VTX1BPU0lYX1JFCi0KLS8v
IEltcGxlbWVudHMgUkUuICBDdXJyZW50bHkgb25seSBuZWVkZWQgZm9yIGRlYXRoIHRlc3RzLgot
Ci1SRTo6flJFKCkgewotICBpZiAoaXNfdmFsaWRfKSB7Ci0gICAgLy8gcmVnZnJlZSdpbmcgYW4g
aW52YWxpZCByZWdleCBtaWdodCBjcmFzaCBiZWNhdXNlIHRoZSBjb250ZW50Ci0gICAgLy8gb2Yg
dGhlIHJlZ2V4IGlzIHVuZGVmaW5lZC4gU2luY2UgdGhlIHJlZ2V4J3MgYXJlIGVzc2VudGlhbGx5
Ci0gICAgLy8gdGhlIHNhbWUsIG9uZSBjYW5ub3QgYmUgdmFsaWQgKG9yIGludmFsaWQpIHdpdGhv
dXQgdGhlIG90aGVyCi0gICAgLy8gYmVpbmcgc28gdG9vLgotICAgIHJlZ2ZyZWUoJnBhcnRpYWxf
cmVnZXhfKTsKLSAgICByZWdmcmVlKCZmdWxsX3JlZ2V4Xyk7Ci0gIH0KLSAgZnJlZShjb25zdF9j
YXN0PGNoYXIqPihwYXR0ZXJuXykpOwotfQotCi0vLyBSZXR1cm5zIHRydWUgaWZmIHJlZ3VsYXIg
ZXhwcmVzc2lvbiByZSBtYXRjaGVzIHRoZSBlbnRpcmUgc3RyLgotYm9vbCBSRTo6RnVsbE1hdGNo
KGNvbnN0IGNoYXIqIHN0ciwgY29uc3QgUkUmIHJlKSB7Ci0gIGlmICghcmUuaXNfdmFsaWRfKSBy
ZXR1cm4gZmFsc2U7Ci0KLSAgcmVnbWF0Y2hfdCBtYXRjaDsKLSAgcmV0dXJuIHJlZ2V4ZWMoJnJl
LmZ1bGxfcmVnZXhfLCBzdHIsIDEsICZtYXRjaCwgMCkgPT0gMDsKLX0KLQotLy8gUmV0dXJucyB0
cnVlIGlmZiByZWd1bGFyIGV4cHJlc3Npb24gcmUgbWF0Y2hlcyBhIHN1YnN0cmluZyBvZiBzdHIK
LS8vIChpbmNsdWRpbmcgc3RyIGl0c2VsZikuCi1ib29sIFJFOjpQYXJ0aWFsTWF0Y2goY29uc3Qg
Y2hhciogc3RyLCBjb25zdCBSRSYgcmUpIHsKLSAgaWYgKCFyZS5pc192YWxpZF8pIHJldHVybiBm
YWxzZTsKLQotICByZWdtYXRjaF90IG1hdGNoOwotICByZXR1cm4gcmVnZXhlYygmcmUucGFydGlh
bF9yZWdleF8sIHN0ciwgMSwgJm1hdGNoLCAwKSA9PSAwOwotfQotCi0vLyBJbml0aWFsaXplcyBh
biBSRSBmcm9tIGl0cyBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi12b2lkIFJFOjpJbml0KGNvbnN0
IGNoYXIqIHJlZ2V4KSB7Ci0gIHBhdHRlcm5fID0gcG9zaXg6OlN0ckR1cChyZWdleCk7Ci0KLSAg
Ly8gUmVzZXJ2ZXMgZW5vdWdoIGJ5dGVzIHRvIGhvbGQgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB1
c2VkIGZvciBhCi0gIC8vIGZ1bGwgbWF0Y2guCi0gIGNvbnN0IHNpemVfdCBmdWxsX3JlZ2V4X2xl
biA9IHN0cmxlbihyZWdleCkgKyAxMDsKLSAgY2hhciogY29uc3QgZnVsbF9wYXR0ZXJuID0gbmV3
IGNoYXJbZnVsbF9yZWdleF9sZW5dOwotCi0gIHNucHJpbnRmKGZ1bGxfcGF0dGVybiwgZnVsbF9y
ZWdleF9sZW4sICJeKCVzKSQiLCByZWdleCk7Ci0gIGlzX3ZhbGlkXyA9IHJlZ2NvbXAoJmZ1bGxf
cmVnZXhfLCBmdWxsX3BhdHRlcm4sIFJFR19FWFRFTkRFRCkgPT0gMDsKLSAgLy8gV2Ugd2FudCB0
byBjYWxsIHJlZ2NvbXAoJnBhcnRpYWxfcmVnZXhfLCAuLi4pIGV2ZW4gaWYgdGhlCi0gIC8vIHBy
ZXZpb3VzIGV4cHJlc3Npb24gcmV0dXJucyBmYWxzZS4gIE90aGVyd2lzZSBwYXJ0aWFsX3JlZ2V4
XyBtYXkKLSAgLy8gbm90IGJlIHByb3Blcmx5IGluaXRpYWxpemVkIGNhbiBtYXkgY2F1c2UgdHJv
dWJsZSB3aGVuIGl0J3MKLSAgLy8gZnJlZWQuCi0gIC8vCi0gIC8vIFNvbWUgaW1wbGVtZW50YXRp
b24gb2YgUE9TSVggcmVnZXggKGUuZy4gb24gYXQgbGVhc3Qgc29tZQotICAvLyB2ZXJzaW9ucyBv
ZiBDeWd3aW4pIGRvZXNuJ3QgYWNjZXB0IHRoZSBlbXB0eSBzdHJpbmcgYXMgYSB2YWxpZAotICAv
LyByZWdleC4gIFdlIGNoYW5nZSBpdCB0byBhbiBlcXVpdmFsZW50IGZvcm0gIigpIiB0byBiZSBz
YWZlLgotICBpZiAoaXNfdmFsaWRfKSB7Ci0gICAgY29uc3QgY2hhciogY29uc3QgcGFydGlhbF9y
ZWdleCA9ICgqcmVnZXggPT0gJ1wwJykgPyAiKCkiIDogcmVnZXg7Ci0gICAgaXNfdmFsaWRfID0g
cmVnY29tcCgmcGFydGlhbF9yZWdleF8sIHBhcnRpYWxfcmVnZXgsIFJFR19FWFRFTkRFRCkgPT0g
MDsKLSAgfQotICBFWFBFQ1RfVFJVRShpc192YWxpZF8pCi0gICAgICA8PCAiUmVndWxhciBleHBy
ZXNzaW9uIFwiIiA8PCByZWdleAotICAgICAgPDwgIlwiIGlzIG5vdCBhIHZhbGlkIFBPU0lYIEV4
dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbi4iOwotCi0gIGRlbGV0ZVtdIGZ1bGxfcGF0dGVybjsK
LX0KLQotI2VsaWYgR1RFU1RfVVNFU19TSU1QTEVfUkUKLQotLy8gUmV0dXJucyB0cnVlIGlmZiBj
aCBhcHBlYXJzIGFueXdoZXJlIGluIHN0ciAoZXhjbHVkaW5nIHRoZQotLy8gdGVybWluYXRpbmcg
J1wwJyBjaGFyYWN0ZXIpLgotYm9vbCBJc0luU2V0KGNoYXIgY2gsIGNvbnN0IGNoYXIqIHN0cikg
ewotICByZXR1cm4gY2ggIT0gJ1wwJyAmJiBzdHJjaHIoc3RyLCBjaCkgIT0gTlVMTDsKLX0KLQot
Ly8gUmV0dXJucyB0cnVlIGlmZiBjaCBiZWxvbmdzIHRvIHRoZSBnaXZlbiBjbGFzc2lmaWNhdGlv
bi4gIFVubGlrZQotLy8gc2ltaWxhciBmdW5jdGlvbnMgaW4gPGN0eXBlLmg+LCB0aGVzZSBhcmVu
J3QgYWZmZWN0ZWQgYnkgdGhlCi0vLyBjdXJyZW50IGxvY2FsZS4KLWJvb2wgSXNBc2NpaURpZ2l0
KGNoYXIgY2gpIHsgcmV0dXJuICcwJyA8PSBjaCAmJiBjaCA8PSAnOSc7IH0KLWJvb2wgSXNBc2Np
aVB1bmN0KGNoYXIgY2gpIHsKLSAgcmV0dXJuIElzSW5TZXQoY2gsICJeLSFcIiMkJSYnKCkqKywu
Lzo7PD0+P0BbXFxdX2B7fH1+Iik7Ci19Ci1ib29sIElzUmVwZWF0KGNoYXIgY2gpIHsgcmV0dXJu
IElzSW5TZXQoY2gsICI/KisiKTsgfQotYm9vbCBJc0FzY2lpV2hpdGVTcGFjZShjaGFyIGNoKSB7
IHJldHVybiBJc0luU2V0KGNoLCAiIFxmXG5cclx0XHYiKTsgfQotYm9vbCBJc0FzY2lpV29yZENo
YXIoY2hhciBjaCkgewotICByZXR1cm4gKCdhJyA8PSBjaCAmJiBjaCA8PSAneicpIHx8ICgnQScg
PD0gY2ggJiYgY2ggPD0gJ1onKSB8fAotICAgICAgKCcwJyA8PSBjaCAmJiBjaCA8PSAnOScpIHx8
IGNoID09ICdfJzsKLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmZiAiXFxjIiBpcyBhIHN1cHBvcnRl
ZCBlc2NhcGUgc2VxdWVuY2UuCi1ib29sIElzVmFsaWRFc2NhcGUoY2hhciBjKSB7Ci0gIHJldHVy
biAoSXNBc2NpaVB1bmN0KGMpIHx8IElzSW5TZXQoYywgImREZm5yc1N0dndXIikpOwotfQotCi0v
LyBSZXR1cm5zIHRydWUgaWZmIHRoZSBnaXZlbiBhdG9tIChzcGVjaWZpZWQgYnkgZXNjYXBlZCBh
bmQgcGF0dGVybikKLS8vIG1hdGNoZXMgY2guICBUaGUgcmVzdWx0IGlzIHVuZGVmaW5lZCBpZiB0
aGUgYXRvbSBpcyBpbnZhbGlkLgotYm9vbCBBdG9tTWF0Y2hlc0NoYXIoYm9vbCBlc2NhcGVkLCBj
aGFyIHBhdHRlcm5fY2hhciwgY2hhciBjaCkgewotICBpZiAoZXNjYXBlZCkgeyAgLy8gIlxccCIg
d2hlcmUgcCBpcyBwYXR0ZXJuX2NoYXIuCi0gICAgc3dpdGNoIChwYXR0ZXJuX2NoYXIpIHsKLSAg
ICAgIGNhc2UgJ2QnOiByZXR1cm4gSXNBc2NpaURpZ2l0KGNoKTsKLSAgICAgIGNhc2UgJ0QnOiBy
ZXR1cm4gIUlzQXNjaWlEaWdpdChjaCk7Ci0gICAgICBjYXNlICdmJzogcmV0dXJuIGNoID09ICdc
Zic7Ci0gICAgICBjYXNlICduJzogcmV0dXJuIGNoID09ICdcbic7Ci0gICAgICBjYXNlICdyJzog
cmV0dXJuIGNoID09ICdccic7Ci0gICAgICBjYXNlICdzJzogcmV0dXJuIElzQXNjaWlXaGl0ZVNw
YWNlKGNoKTsKLSAgICAgIGNhc2UgJ1MnOiByZXR1cm4gIUlzQXNjaWlXaGl0ZVNwYWNlKGNoKTsK
LSAgICAgIGNhc2UgJ3QnOiByZXR1cm4gY2ggPT0gJ1x0JzsKLSAgICAgIGNhc2UgJ3YnOiByZXR1
cm4gY2ggPT0gJ1x2JzsKLSAgICAgIGNhc2UgJ3cnOiByZXR1cm4gSXNBc2NpaVdvcmRDaGFyKGNo
KTsKLSAgICAgIGNhc2UgJ1cnOiByZXR1cm4gIUlzQXNjaWlXb3JkQ2hhcihjaCk7Ci0gICAgfQot
ICAgIHJldHVybiBJc0FzY2lpUHVuY3QocGF0dGVybl9jaGFyKSAmJiBwYXR0ZXJuX2NoYXIgPT0g
Y2g7Ci0gIH0KLQotICByZXR1cm4gKHBhdHRlcm5fY2hhciA9PSAnLicgJiYgY2ggIT0gJ1xuJykg
fHwgcGF0dGVybl9jaGFyID09IGNoOwotfQotCi0vLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBW
YWxpZGF0ZVJlZ2V4KCkgdG8gZm9ybWF0IGVycm9yIG1lc3NhZ2VzLgotc3RkOjpzdHJpbmcgRm9y
bWF0UmVnZXhTeW50YXhFcnJvcihjb25zdCBjaGFyKiByZWdleCwgaW50IGluZGV4KSB7Ci0gIHJl
dHVybiAoTWVzc2FnZSgpIDw8ICJTeW50YXggZXJyb3IgYXQgaW5kZXggIiA8PCBpbmRleAotICAg
ICAgICAgIDw8ICIgaW4gc2ltcGxlIHJlZ3VsYXIgZXhwcmVzc2lvbiBcIiIgPDwgcmVnZXggPDwg
IlwiOiAiKS5HZXRTdHJpbmcoKTsKLX0KLQotLy8gR2VuZXJhdGVzIG5vbi1mYXRhbCBmYWlsdXJl
cyBhbmQgcmV0dXJucyBmYWxzZSBpZiByZWdleCBpcyBpbnZhbGlkOwotLy8gb3RoZXJ3aXNlIHJl
dHVybnMgdHJ1ZS4KLWJvb2wgVmFsaWRhdGVSZWdleChjb25zdCBjaGFyKiByZWdleCkgewotICBp
ZiAocmVnZXggPT0gTlVMTCkgewotICAgIC8vIFRPRE8od2FuQGdvb2dsZS5jb20pOiBmaXggdGhl
IHNvdXJjZSBmaWxlIGxvY2F0aW9uIGluIHRoZQotICAgIC8vIGFzc2VydGlvbiBmYWlsdXJlcyB0
byBtYXRjaCB3aGVyZSB0aGUgcmVnZXggaXMgdXNlZCBpbiB1c2VyCi0gICAgLy8gY29kZS4KLSAg
ICBBRERfRkFJTFVSRSgpIDw8ICJOVUxMIGlzIG5vdCBhIHZhbGlkIHNpbXBsZSByZWd1bGFyIGV4
cHJlc3Npb24uIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBib29sIGlzX3ZhbGlkID0g
dHJ1ZTsKLQotICAvLyBUcnVlIGlmZiA/LCAqLCBvciArIGNhbiBmb2xsb3cgdGhlIHByZXZpb3Vz
IGF0b20uCi0gIGJvb2wgcHJldl9yZXBlYXRhYmxlID0gZmFsc2U7Ci0gIGZvciAoaW50IGkgPSAw
OyByZWdleFtpXTsgaSsrKSB7Ci0gICAgaWYgKHJlZ2V4W2ldID09ICdcXCcpIHsgIC8vIEFuIGVz
Y2FwZSBzZXF1ZW5jZQotICAgICAgaSsrOwotICAgICAgaWYgKHJlZ2V4W2ldID09ICdcMCcpIHsK
LSAgICAgICAgQUREX0ZBSUxVUkUoKSA8PCBGb3JtYXRSZWdleFN5bnRheEVycm9yKHJlZ2V4LCBp
IC0gMSkKLSAgICAgICAgICAgICAgICAgICAgICA8PCAiJ1xcJyBjYW5ub3QgYXBwZWFyIGF0IHRo
ZSBlbmQuIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICBpZiAoIUlz
VmFsaWRFc2NhcGUocmVnZXhbaV0pKSB7Ci0gICAgICAgIEFERF9GQUlMVVJFKCkgPDwgRm9ybWF0
UmVnZXhTeW50YXhFcnJvcihyZWdleCwgaSAtIDEpCi0gICAgICAgICAgICAgICAgICAgICAgPDwg
ImludmFsaWQgZXNjYXBlIHNlcXVlbmNlIFwiXFwiIDw8IHJlZ2V4W2ldIDw8ICJcIi4iOwotICAg
ICAgICBpc192YWxpZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgcHJldl9yZXBlYXRhYmxlID0g
dHJ1ZTsKLSAgICB9IGVsc2UgeyAgLy8gTm90IGFuIGVzY2FwZSBzZXF1ZW5jZS4KLSAgICAgIGNv
bnN0IGNoYXIgY2ggPSByZWdleFtpXTsKLQotICAgICAgaWYgKGNoID09ICdeJyAmJiBpID4gMCkg
ewotICAgICAgICBBRERfRkFJTFVSRSgpIDw8IEZvcm1hdFJlZ2V4U3ludGF4RXJyb3IocmVnZXgs
IGkpCi0gICAgICAgICAgICAgICAgICAgICAgPDwgIideJyBjYW4gb25seSBhcHBlYXIgYXQgdGhl
IGJlZ2lubmluZy4iOwotICAgICAgICBpc192YWxpZCA9IGZhbHNlOwotICAgICAgfSBlbHNlIGlm
IChjaCA9PSAnJCcgJiYgcmVnZXhbaSArIDFdICE9ICdcMCcpIHsKLSAgICAgICAgQUREX0ZBSUxV
UkUoKSA8PCBGb3JtYXRSZWdleFN5bnRheEVycm9yKHJlZ2V4LCBpKQotICAgICAgICAgICAgICAg
ICAgICAgIDw8ICInJCcgY2FuIG9ubHkgYXBwZWFyIGF0IHRoZSBlbmQuIjsKLSAgICAgICAgaXNf
dmFsaWQgPSBmYWxzZTsKLSAgICAgIH0gZWxzZSBpZiAoSXNJblNldChjaCwgIigpW117fXwiKSkg
ewotICAgICAgICBBRERfRkFJTFVSRSgpIDw8IEZvcm1hdFJlZ2V4U3ludGF4RXJyb3IocmVnZXgs
IGkpCi0gICAgICAgICAgICAgICAgICAgICAgPDwgIiciIDw8IGNoIDw8ICInIGlzIHVuc3VwcG9y
dGVkLiI7Ci0gICAgICAgIGlzX3ZhbGlkID0gZmFsc2U7Ci0gICAgICB9IGVsc2UgaWYgKElzUmVw
ZWF0KGNoKSAmJiAhcHJldl9yZXBlYXRhYmxlKSB7Ci0gICAgICAgIEFERF9GQUlMVVJFKCkgPDwg
Rm9ybWF0UmVnZXhTeW50YXhFcnJvcihyZWdleCwgaSkKLSAgICAgICAgICAgICAgICAgICAgICA8
PCAiJyIgPDwgY2ggPDwgIicgY2FuIG9ubHkgZm9sbG93IGEgcmVwZWF0YWJsZSB0b2tlbi4iOwot
ICAgICAgICBpc192YWxpZCA9IGZhbHNlOwotICAgICAgfQotCi0gICAgICBwcmV2X3JlcGVhdGFi
bGUgPSAhSXNJblNldChjaCwgIl4kPyorIik7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGlzX3Zh
bGlkOwotfQotCi0vLyBNYXRjaGVzIGEgcmVwZWF0ZWQgcmVnZXggYXRvbSBmb2xsb3dlZCBieSBh
IHZhbGlkIHNpbXBsZSByZWd1bGFyCi0vLyBleHByZXNzaW9uLiAgVGhlIHJlZ2V4IGF0b20gaXMg
ZGVmaW5lZCBhcyBjIGlmIGVzY2FwZWQgaXMgZmFsc2UsCi0vLyBvciBcYyBvdGhlcndpc2UuICBy
ZXBlYXQgaXMgdGhlIHJlcGV0aXRpb24gbWV0YSBjaGFyYWN0ZXIgKD8sICosCi0vLyBvciArKS4g
IFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgc3RyIGNvbnRhaW5zIHRvbyBtYW55Ci0vLyBj
aGFyYWN0ZXJzIHRvIGJlIGluZGV4YWJsZSBieSBzaXplX3QsIGluIHdoaWNoIGNhc2UgdGhlIHRl
c3Qgd2lsbAotLy8gcHJvYmFibHkgdGltZSBvdXQgYW55d2F5LiAgV2UgYXJlIGZpbmUgd2l0aCB0
aGlzIGxpbWl0YXRpb24gYXMKLS8vIHN0ZDo6c3RyaW5nIGhhcyBpdCB0b28uCi1ib29sIE1hdGNo
UmVwZXRpdGlvbkFuZFJlZ2V4QXRIZWFkKAotICAgIGJvb2wgZXNjYXBlZCwgY2hhciBjLCBjaGFy
IHJlcGVhdCwgY29uc3QgY2hhciogcmVnZXgsCi0gICAgY29uc3QgY2hhciogc3RyKSB7Ci0gIGNv
bnN0IHNpemVfdCBtaW5fY291bnQgPSAocmVwZWF0ID09ICcrJykgPyAxIDogMDsKLSAgY29uc3Qg
c2l6ZV90IG1heF9jb3VudCA9IChyZXBlYXQgPT0gJz8nKSA/IDEgOgotICAgICAgc3RhdGljX2Nh
c3Q8c2l6ZV90PigtMSkgLSAxOwotICAvLyBXZSBjYW5ub3QgY2FsbCBudW1lcmljX2xpbWl0czo6
bWF4KCkgYXMgaXQgY29uZmxpY3RzIHdpdGggdGhlCi0gIC8vIG1heCgpIG1hY3JvIG9uIFdpbmRv
d3MuCi0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPD0gbWF4X2NvdW50OyArK2kpIHsKLSAgICAv
LyBXZSBrbm93IHRoYXQgdGhlIGF0b20gbWF0Y2hlcyBlYWNoIG9mIHRoZSBmaXJzdCBpIGNoYXJh
Y3RlcnMgaW4gc3RyLgotICAgIGlmIChpID49IG1pbl9jb3VudCAmJiBNYXRjaFJlZ2V4QXRIZWFk
KHJlZ2V4LCBzdHIgKyBpKSkgewotICAgICAgLy8gV2UgaGF2ZSBlbm91Z2ggbWF0Y2hlcyBhdCB0
aGUgaGVhZCwgYW5kIHRoZSB0YWlsIG1hdGNoZXMgdG9vLgotICAgICAgLy8gU2luY2Ugd2Ugb25s
eSBjYXJlIGFib3V0ICp3aGV0aGVyKiB0aGUgcGF0dGVybiBtYXRjaGVzIHN0cgotICAgICAgLy8g
KGFzIG9wcG9zZWQgdG8gKmhvdyogaXQgbWF0Y2hlcyksIHRoZXJlIGlzIG5vIG5lZWQgdG8gZmlu
ZCBhCi0gICAgICAvLyBncmVlZHkgbWF0Y2guCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgaWYgKHN0cltpXSA9PSAnXDAnIHx8ICFBdG9tTWF0Y2hlc0NoYXIoZXNjYXBlZCwgYywgc3Ry
W2ldKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8v
IFJldHVybnMgdHJ1ZSBpZmYgcmVnZXggbWF0Y2hlcyBhIHByZWZpeCBvZiBzdHIuICByZWdleCBt
dXN0IGJlIGEKLS8vIHZhbGlkIHNpbXBsZSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIG5vdCBzdGFy
dCB3aXRoICJeIiwgb3IgdGhlCi0vLyByZXN1bHQgaXMgdW5kZWZpbmVkLgotYm9vbCBNYXRjaFJl
Z2V4QXRIZWFkKGNvbnN0IGNoYXIqIHJlZ2V4LCBjb25zdCBjaGFyKiBzdHIpIHsKLSAgaWYgKCpy
ZWdleCA9PSAnXDAnKSAgLy8gQW4gZW1wdHkgcmVnZXggbWF0Y2hlcyBhIHByZWZpeCBvZiBhbnl0
aGluZy4KLSAgICByZXR1cm4gdHJ1ZTsKLQotICAvLyAiJCIgb25seSBtYXRjaGVzIHRoZSBlbmQg
b2YgYSBzdHJpbmcuICBOb3RlIHRoYXQgcmVnZXggYmVpbmcKLSAgLy8gdmFsaWQgZ3VhcmFudGVl
cyB0aGF0IHRoZXJlJ3Mgbm90aGluZyBhZnRlciAiJCIgaW4gaXQuCi0gIGlmICgqcmVnZXggPT0g
JyQnKQotICAgIHJldHVybiAqc3RyID09ICdcMCc7Ci0KLSAgLy8gSXMgdGhlIGZpcnN0IHRoaW5n
IGluIHJlZ2V4IGFuIGVzY2FwZSBzZXF1ZW5jZT8KLSAgY29uc3QgYm9vbCBlc2NhcGVkID0gKnJl
Z2V4ID09ICdcXCc7Ci0gIGlmIChlc2NhcGVkKQotICAgICsrcmVnZXg7Ci0gIGlmIChJc1JlcGVh
dChyZWdleFsxXSkpIHsKLSAgICAvLyBNYXRjaFJlcGV0aXRpb25BbmRSZWdleEF0SGVhZCgpIGNh
bGxzIE1hdGNoUmVnZXhBdEhlYWQoKSwgc28KLSAgICAvLyBoZXJlJ3MgYW4gaW5kaXJlY3QgcmVj
dXJzaW9uLiAgSXQgdGVybWluYXRlcyBhcyB0aGUgcmVnZXggZ2V0cwotICAgIC8vIHNob3J0ZXIg
aW4gZWFjaCByZWN1cnNpb24uCi0gICAgcmV0dXJuIE1hdGNoUmVwZXRpdGlvbkFuZFJlZ2V4QXRI
ZWFkKAotICAgICAgICBlc2NhcGVkLCByZWdleFswXSwgcmVnZXhbMV0sIHJlZ2V4ICsgMiwgc3Ry
KTsKLSAgfSBlbHNlIHsKLSAgICAvLyByZWdleCBpc24ndCBlbXB0eSwgaXNuJ3QgIiQiLCBhbmQg
ZG9lc24ndCBzdGFydCB3aXRoIGEKLSAgICAvLyByZXBldGl0aW9uLiAgV2UgbWF0Y2ggdGhlIGZp
cnN0IGF0b20gb2YgcmVnZXggd2l0aCB0aGUgZmlyc3QKLSAgICAvLyBjaGFyYWN0ZXIgb2Ygc3Ry
IGFuZCByZWN1cnNlLgotICAgIHJldHVybiAoKnN0ciAhPSAnXDAnKSAmJiBBdG9tTWF0Y2hlc0No
YXIoZXNjYXBlZCwgKnJlZ2V4LCAqc3RyKSAmJgotICAgICAgICBNYXRjaFJlZ2V4QXRIZWFkKHJl
Z2V4ICsgMSwgc3RyICsgMSk7Ci0gIH0KLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmZiByZWdleCBt
YXRjaGVzIGFueSBzdWJzdHJpbmcgb2Ygc3RyLiAgcmVnZXggbXVzdCBiZQotLy8gYSB2YWxpZCBz
aW1wbGUgcmVndWxhciBleHByZXNzaW9uLCBvciB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4KLS8v
Ci0vLyBUaGUgYWxnb3JpdGhtIGlzIHJlY3Vyc2l2ZSwgYnV0IHRoZSByZWN1cnNpb24gZGVwdGgg
ZG9lc24ndCBleGNlZWQKLS8vIHRoZSByZWdleCBsZW5ndGgsIHNvIHdlIHdvbid0IG5lZWQgdG8g
d29ycnkgYWJvdXQgcnVubmluZyBvdXQgb2YKLS8vIHN0YWNrIHNwYWNlIG5vcm1hbGx5LiAgSW4g
cmFyZSBjYXNlcyB0aGUgdGltZSBjb21wbGV4aXR5IGNhbiBiZQotLy8gZXhwb25lbnRpYWwgd2l0
aCByZXNwZWN0IHRvIHRoZSByZWdleCBsZW5ndGggKyB0aGUgc3RyaW5nIGxlbmd0aCwKLS8vIGJ1
dCB1c3VhbGx5IGl0J3MgbXVzdCBmYXN0ZXIgKG9mdGVuIGNsb3NlIHRvIGxpbmVhcikuCi1ib29s
IE1hdGNoUmVnZXhBbnl3aGVyZShjb25zdCBjaGFyKiByZWdleCwgY29uc3QgY2hhciogc3RyKSB7
Ci0gIGlmIChyZWdleCA9PSBOVUxMIHx8IHN0ciA9PSBOVUxMKQotICAgIHJldHVybiBmYWxzZTsK
LQotICBpZiAoKnJlZ2V4ID09ICdeJykKLSAgICByZXR1cm4gTWF0Y2hSZWdleEF0SGVhZChyZWdl
eCArIDEsIHN0cik7Ci0KLSAgLy8gQSBzdWNjZXNzZnVsIG1hdGNoIGNhbiBiZSBhbnl3aGVyZSBp
biBzdHIuCi0gIGRvIHsKLSAgICBpZiAoTWF0Y2hSZWdleEF0SGVhZChyZWdleCwgc3RyKSkKLSAg
ICAgIHJldHVybiB0cnVlOwotICB9IHdoaWxlICgqc3RyKysgIT0gJ1wwJyk7Ci0gIHJldHVybiBm
YWxzZTsKLX0KLQotLy8gSW1wbGVtZW50cyB0aGUgUkUgY2xhc3MuCi0KLVJFOjp+UkUoKSB7Ci0g
IGZyZWUoY29uc3RfY2FzdDxjaGFyKj4ocGF0dGVybl8pKTsKLSAgZnJlZShjb25zdF9jYXN0PGNo
YXIqPihmdWxsX3BhdHRlcm5fKSk7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZmYgcmVndWxhciBl
eHByZXNzaW9uIHJlIG1hdGNoZXMgdGhlIGVudGlyZSBzdHIuCi1ib29sIFJFOjpGdWxsTWF0Y2go
Y29uc3QgY2hhciogc3RyLCBjb25zdCBSRSYgcmUpIHsKLSAgcmV0dXJuIHJlLmlzX3ZhbGlkXyAm
JiBNYXRjaFJlZ2V4QW55d2hlcmUocmUuZnVsbF9wYXR0ZXJuXywgc3RyKTsKLX0KLQotLy8gUmV0
dXJucyB0cnVlIGlmZiByZWd1bGFyIGV4cHJlc3Npb24gcmUgbWF0Y2hlcyBhIHN1YnN0cmluZyBv
ZiBzdHIKLS8vIChpbmNsdWRpbmcgc3RyIGl0c2VsZikuCi1ib29sIFJFOjpQYXJ0aWFsTWF0Y2go
Y29uc3QgY2hhciogc3RyLCBjb25zdCBSRSYgcmUpIHsKLSAgcmV0dXJuIHJlLmlzX3ZhbGlkXyAm
JiBNYXRjaFJlZ2V4QW55d2hlcmUocmUucGF0dGVybl8sIHN0cik7Ci19Ci0KLS8vIEluaXRpYWxp
emVzIGFuIFJFIGZyb20gaXRzIHN0cmluZyByZXByZXNlbnRhdGlvbi4KLXZvaWQgUkU6OkluaXQo
Y29uc3QgY2hhciogcmVnZXgpIHsKLSAgcGF0dGVybl8gPSBmdWxsX3BhdHRlcm5fID0gTlVMTDsK
LSAgaWYgKHJlZ2V4ICE9IE5VTEwpIHsKLSAgICBwYXR0ZXJuXyA9IHBvc2l4OjpTdHJEdXAocmVn
ZXgpOwotICB9Ci0KLSAgaXNfdmFsaWRfID0gVmFsaWRhdGVSZWdleChyZWdleCk7Ci0gIGlmICgh
aXNfdmFsaWRfKSB7Ci0gICAgLy8gTm8gbmVlZCB0byBjYWxjdWxhdGUgdGhlIGZ1bGwgcGF0dGVy
biB3aGVuIHRoZSByZWdleCBpcyBpbnZhbGlkLgotICAgIHJldHVybjsKLSAgfQotCi0gIGNvbnN0
IHNpemVfdCBsZW4gPSBzdHJsZW4ocmVnZXgpOwotICAvLyBSZXNlcnZlcyBlbm91Z2ggYnl0ZXMg
dG8gaG9sZCB0aGUgcmVndWxhciBleHByZXNzaW9uIHVzZWQgZm9yIGEKLSAgLy8gZnVsbCBtYXRj
aDogd2UgbmVlZCBzcGFjZSB0byBwcmVwZW5kIGEgJ14nLCBhcHBlbmQgYSAnJCcsIGFuZAotICAv
LyB0ZXJtaW5hdGUgdGhlIHN0cmluZyB3aXRoICdcMCcuCi0gIGNoYXIqIGJ1ZmZlciA9IHN0YXRp
Y19jYXN0PGNoYXIqPihtYWxsb2MobGVuICsgMykpOwotICBmdWxsX3BhdHRlcm5fID0gYnVmZmVy
OwotCi0gIGlmICgqcmVnZXggIT0gJ14nKQotICAgICpidWZmZXIrKyA9ICdeJzsgIC8vIE1ha2Vz
IHN1cmUgZnVsbF9wYXR0ZXJuXyBzdGFydHMgd2l0aCAnXicuCi0KLSAgLy8gV2UgZG9uJ3QgdXNl
IHNucHJpbnRmIG9yIHN0cm5jcHksIGFzIHRoZXkgdHJpZ2dlciBhIHdhcm5pbmcgd2hlbgotICAv
LyBjb21waWxlZCB3aXRoIFZDKysgOC4wLgotICBtZW1jcHkoYnVmZmVyLCByZWdleCwgbGVuKTsK
LSAgYnVmZmVyICs9IGxlbjsKLQotICBpZiAobGVuID09IDAgfHwgcmVnZXhbbGVuIC0gMV0gIT0g
JyQnKQotICAgICpidWZmZXIrKyA9ICckJzsgIC8vIE1ha2VzIHN1cmUgZnVsbF9wYXR0ZXJuXyBl
bmRzIHdpdGggJyQnLgotCi0gICpidWZmZXIgPSAnXDAnOwotfQotCi0jZW5kaWYgIC8vIEdURVNU
X1VTRVNfUE9TSVhfUkUKLQotY29uc3QgY2hhciBrVW5rbm93bkZpbGVbXSA9ICJ1bmtub3duIGZp
bGUiOwotCi0vLyBGb3JtYXRzIGEgc291cmNlIGZpbGUgcGF0aCBhbmQgYSBsaW5lIG51bWJlciBh
cyB0aGV5IHdvdWxkIGFwcGVhcgotLy8gaW4gYW4gZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBjb21w
aWxlciB1c2VkIHRvIGNvbXBpbGUgdGhpcyBjb2RlLgotR1RFU1RfQVBJXyA6OnN0ZDo6c3RyaW5n
IEZvcm1hdEZpbGVMb2NhdGlvbihjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSkgewotICBjb25z
dCBzdGQ6OnN0cmluZyBmaWxlX25hbWUoZmlsZSA9PSBOVUxMID8ga1Vua25vd25GaWxlIDogZmls
ZSk7Ci0KLSAgaWYgKGxpbmUgPCAwKSB7Ci0gICAgcmV0dXJuIGZpbGVfbmFtZSArICI6IjsKLSAg
fQotI2lmZGVmIF9NU0NfVkVSCi0gIHJldHVybiBmaWxlX25hbWUgKyAiKCIgKyBTdHJlYW1hYmxl
VG9TdHJpbmcobGluZSkgKyAiKToiOwotI2Vsc2UKLSAgcmV0dXJuIGZpbGVfbmFtZSArICI6IiAr
IFN0cmVhbWFibGVUb1N0cmluZyhsaW5lKSArICI6IjsKLSNlbmRpZiAgLy8gX01TQ19WRVIKLX0K
LQotLy8gRm9ybWF0cyBhIGZpbGUgbG9jYXRpb24gZm9yIGNvbXBpbGVyLWluZGVwZW5kZW50IFhN
TCBvdXRwdXQuCi0vLyBBbHRob3VnaCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBwbGF0Zm9ybSBkZXBl
bmRlbnQsIHdlIHB1dCBpdCBuZXh0IHRvCi0vLyBGb3JtYXRGaWxlTG9jYXRpb24gaW4gb3JkZXIg
dG8gY29udHJhc3QgdGhlIHR3byBmdW5jdGlvbnMuCi0vLyBOb3RlIHRoYXQgRm9ybWF0Q29tcGls
ZXJJbmRlcGVuZGVudEZpbGVMb2NhdGlvbigpIGRvZXMgTk9UIGFwcGVuZCBjb2xvbgotLy8gdG8g
dGhlIGZpbGUgbG9jYXRpb24gaXQgcHJvZHVjZXMsIHVubGlrZSBGb3JtYXRGaWxlTG9jYXRpb24o
KS4KLUdURVNUX0FQSV8gOjpzdGQ6OnN0cmluZyBGb3JtYXRDb21waWxlckluZGVwZW5kZW50Rmls
ZUxvY2F0aW9uKAotICAgIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKSB7Ci0gIGNvbnN0IHN0
ZDo6c3RyaW5nIGZpbGVfbmFtZShmaWxlID09IE5VTEwgPyBrVW5rbm93bkZpbGUgOiBmaWxlKTsK
LQotICBpZiAobGluZSA8IDApCi0gICAgcmV0dXJuIGZpbGVfbmFtZTsKLSAgZWxzZQotICAgIHJl
dHVybiBmaWxlX25hbWUgKyAiOiIgKyBTdHJlYW1hYmxlVG9TdHJpbmcobGluZSk7Ci19Ci0KLUdU
ZXN0TG9nOjpHVGVzdExvZyhHVGVzdExvZ1NldmVyaXR5IHNldmVyaXR5LCBjb25zdCBjaGFyKiBm
aWxlLCBpbnQgbGluZSkKLSAgICA6IHNldmVyaXR5XyhzZXZlcml0eSkgewotICBjb25zdCBjaGFy
KiBjb25zdCBtYXJrZXIgPQotICAgICAgc2V2ZXJpdHkgPT0gR1RFU1RfSU5GTyA/ICAgICJbICBJ
TkZPIF0iIDoKLSAgICAgIHNldmVyaXR5ID09IEdURVNUX1dBUk5JTkcgPyAiW1dBUk5JTkddIiA6
Ci0gICAgICBzZXZlcml0eSA9PSBHVEVTVF9FUlJPUiA/ICAgIlsgRVJST1IgXSIgOiAiWyBGQVRB
TCBdIjsKLSAgR2V0U3RyZWFtKCkgPDwgOjpzdGQ6OmVuZGwgPDwgbWFya2VyIDw8ICIgIgotICAg
ICAgICAgICAgICA8PCBGb3JtYXRGaWxlTG9jYXRpb24oZmlsZSwgbGluZSkuY19zdHIoKSA8PCAi
OiAiOwotfQotCi0vLyBGbHVzaGVzIHRoZSBidWZmZXJzIGFuZCwgaWYgc2V2ZXJpdHkgaXMgR1RF
U1RfRkFUQUwsIGFib3J0cyB0aGUgcHJvZ3JhbS4KLUdUZXN0TG9nOjp+R1Rlc3RMb2coKSB7Ci0g
IEdldFN0cmVhbSgpIDw8IDo6c3RkOjplbmRsOwotICBpZiAoc2V2ZXJpdHlfID09IEdURVNUX0ZB
VEFMKSB7Ci0gICAgZmZsdXNoKHN0ZGVycik7Ci0gICAgcG9zaXg6OkFib3J0KCk7Ci0gIH0KLX0K
LS8vIERpc2FibGUgTWljcm9zb2Z0IGRlcHJlY2F0aW9uIHdhcm5pbmdzIGZvciBQT1NJWCBmdW5j
dGlvbnMgY2FsbGVkIGZyb20KLS8vIHRoaXMgY2xhc3MgKGNyZWF0LCBkdXAsIGR1cDIsIGFuZCBj
bG9zZSkKLUdURVNUX0RJU0FCTEVfTVNDX1dBUk5JTkdTX1BVU0hfKDQ5OTYpCi0KLSNpZiBHVEVT
VF9IQVNfU1RSRUFNX1JFRElSRUNUSU9OCi0KLS8vIE9iamVjdCB0aGF0IGNhcHR1cmVzIGFuIG91
dHB1dCBzdHJlYW0gKHN0ZG91dC9zdGRlcnIpLgotY2xhc3MgQ2FwdHVyZWRTdHJlYW0gewotIHB1
YmxpYzoKLSAgLy8gVGhlIGN0b3IgcmVkaXJlY3RzIHRoZSBzdHJlYW0gdG8gYSB0ZW1wb3Jhcnkg
ZmlsZS4KLSAgZXhwbGljaXQgQ2FwdHVyZWRTdHJlYW0oaW50IGZkKSA6IGZkXyhmZCksIHVuY2Fw
dHVyZWRfZmRfKGR1cChmZCkpIHsKLSMgaWYgR1RFU1RfT1NfV0lORE9XUwotICAgIGNoYXIgdGVt
cF9kaXJfcGF0aFtNQVhfUEFUSCArIDFdID0geyAnXDAnIH07ICAvLyBOT0xJTlQKLSAgICBjaGFy
IHRlbXBfZmlsZV9wYXRoW01BWF9QQVRIICsgMV0gPSB7ICdcMCcgfTsgIC8vIE5PTElOVAotCi0g
ICAgOjpHZXRUZW1wUGF0aEEoc2l6ZW9mKHRlbXBfZGlyX3BhdGgpLCB0ZW1wX2Rpcl9wYXRoKTsK
LSAgICBjb25zdCBVSU5UIHN1Y2Nlc3MgPSA6OkdldFRlbXBGaWxlTmFtZUEodGVtcF9kaXJfcGF0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImd0ZXN0X3Jl
ZGlyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgIC8v
IEdlbmVyYXRlIHVuaXF1ZSBmaWxlIG5hbWUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlbXBfZmlsZV9wYXRoKTsKLSAgICBHVEVTVF9DSEVDS18oc3VjY2Vz
cyAhPSAwKQotICAgICAgICA8PCAiVW5hYmxlIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIGlu
ICIgPDwgdGVtcF9kaXJfcGF0aDsKLSAgICBjb25zdCBpbnQgY2FwdHVyZWRfZmQgPSBjcmVhdCh0
ZW1wX2ZpbGVfcGF0aCwgX1NfSVJFQUQgfCBfU19JV1JJVEUpOwotICAgIEdURVNUX0NIRUNLXyhj
YXB0dXJlZF9mZCAhPSAtMSkgPDwgIlVuYWJsZSB0byBvcGVuIHRlbXBvcmFyeSBmaWxlICIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHRlbXBfZmlsZV9wYXRoOwotICAg
IGZpbGVuYW1lXyA9IHRlbXBfZmlsZV9wYXRoOwotIyBlbHNlCi0gICAgLy8gVGhlcmUncyBubyBn
dWFyYW50ZWUgdGhhdCBhIHRlc3QgaGFzIHdyaXRlIGFjY2VzcyB0byB0aGUgY3VycmVudAotICAg
IC8vIGRpcmVjdG9yeSwgc28gd2UgY3JlYXRlIHRoZSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgL3Rt
cCBkaXJlY3RvcnkKLSAgICAvLyBpbnN0ZWFkLiBXZSB1c2UgL3RtcCBvbiBtb3N0IHN5c3RlbXMs
IGFuZCAvc2RjYXJkIG9uIEFuZHJvaWQuCi0gICAgLy8gVGhhdCdzIGJlY2F1c2UgQW5kcm9pZCBk
b2Vzbid0IGhhdmUgL3RtcC4KLSMgIGlmIEdURVNUX09TX0xJTlVYX0FORFJPSUQKLSAgICAvLyBO
b3RlOiBBbmRyb2lkIGFwcGxpY2F0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gY2FsbCB0aGUgZnJhbWV3
b3JrJ3MKLSAgICAvLyBDb250ZXh0LmdldEV4dGVybmFsU3RvcmFnZURpcmVjdG9yeSgpIG1ldGhv
ZCB0aHJvdWdoIEpOSSB0byBnZXQKLSAgICAvLyB0aGUgbG9jYXRpb24gb2YgdGhlIHdvcmxkLXdy
aXRhYmxlIFNEIENhcmQgZGlyZWN0b3J5LiBIb3dldmVyLAotICAgIC8vIHRoaXMgcmVxdWlyZXMg
YSBDb250ZXh0IGhhbmRsZSwgd2hpY2ggY2Fubm90IGJlIHJldHJpZXZlZAotICAgIC8vIGdsb2Jh
bGx5IGZyb20gbmF0aXZlIGNvZGUuIERvaW5nIHNvIGFsc28gcHJlY2x1ZGVzIHJ1bm5pbmcgdGhl
Ci0gICAgLy8gY29kZSBhcyBwYXJ0IG9mIGEgcmVndWxhciBzdGFuZGFsb25lIGV4ZWN1dGFibGUs
IHdoaWNoIGRvZXNuJ3QKLSAgICAvLyBydW4gaW4gYSBEYWx2aWsgcHJvY2VzcyAoZS5nLiB3aGVu
IHJ1bm5pbmcgaXQgdGhyb3VnaCAnYWRiIHNoZWxsJykuCi0gICAgLy8KLSAgICAvLyBUaGUgbG9j
YXRpb24gL3NkY2FyZCBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gbmF0aXZlIGNvZGUKLSAg
ICAvLyBhbmQgaXMgdGhlIG9ubHkgbG9jYXRpb24gKHVub2ZmaWNpYWxseSkgc3VwcG9ydGVkIGJ5
IHRoZSBBbmRyb2lkCi0gICAgLy8gdGVhbS4gSXQncyBnZW5lcmFsbHkgYSBzeW1saW5rIHRvIHRo
ZSByZWFsIFNEIENhcmQgbW91bnQgcG9pbnQKLSAgICAvLyB3aGljaCBjYW4gYmUgL21udC9zZGNh
cmQsIC9tbnQvc2RjYXJkMCwgL3N5c3RlbS9tZWRpYS9zZGNhcmQsIG9yCi0gICAgLy8gb3RoZXIg
T0VNLWN1c3RvbWl6ZWQgbG9jYXRpb25zLiBOZXZlciByZWx5IG9uIHRoZXNlLCBhbmQgYWx3YXlz
Ci0gICAgLy8gdXNlIC9zZGNhcmQuCi0gICAgY2hhciBuYW1lX3RlbXBsYXRlW10gPSAiL3NkY2Fy
ZC9ndGVzdF9jYXB0dXJlZF9zdHJlYW0uWFhYWFhYIjsKLSMgIGVsc2UKLSAgICBjaGFyIG5hbWVf
dGVtcGxhdGVbXSA9ICIvdG1wL2NhcHR1cmVkX3N0cmVhbS5YWFhYWFgiOwotIyAgZW5kaWYgIC8v
IEdURVNUX09TX0xJTlVYX0FORFJPSUQKLSAgICBjb25zdCBpbnQgY2FwdHVyZWRfZmQgPSBta3N0
ZW1wKG5hbWVfdGVtcGxhdGUpOwotICAgIGZpbGVuYW1lXyA9IG5hbWVfdGVtcGxhdGU7Ci0jIGVu
ZGlmICAvLyBHVEVTVF9PU19XSU5ET1dTCi0gICAgZmZsdXNoKE5VTEwpOwotICAgIGR1cDIoY2Fw
dHVyZWRfZmQsIGZkXyk7Ci0gICAgY2xvc2UoY2FwdHVyZWRfZmQpOwotICB9Ci0KLSAgfkNhcHR1
cmVkU3RyZWFtKCkgewotICAgIHJlbW92ZShmaWxlbmFtZV8uY19zdHIoKSk7Ci0gIH0KLQotICBz
dGQ6OnN0cmluZyBHZXRDYXB0dXJlZFN0cmluZygpIHsKLSAgICBpZiAodW5jYXB0dXJlZF9mZF8g
IT0gLTEpIHsKLSAgICAgIC8vIFJlc3RvcmVzIHRoZSBvcmlnaW5hbCBzdHJlYW0uCi0gICAgICBm
Zmx1c2goTlVMTCk7Ci0gICAgICBkdXAyKHVuY2FwdHVyZWRfZmRfLCBmZF8pOwotICAgICAgY2xv
c2UodW5jYXB0dXJlZF9mZF8pOwotICAgICAgdW5jYXB0dXJlZF9mZF8gPSAtMTsKLSAgICB9Ci0K
LSAgICBGSUxFKiBjb25zdCBmaWxlID0gcG9zaXg6OkZPcGVuKGZpbGVuYW1lXy5jX3N0cigpLCAi
ciIpOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNvbnRlbnQgPSBSZWFkRW50aXJlRmlsZShmaWxl
KTsKLSAgICBwb3NpeDo6RkNsb3NlKGZpbGUpOwotICAgIHJldHVybiBjb250ZW50OwotICB9Ci0K
LSBwcml2YXRlOgotICBjb25zdCBpbnQgZmRfOyAgLy8gQSBzdHJlYW0gdG8gY2FwdHVyZS4KLSAg
aW50IHVuY2FwdHVyZWRfZmRfOwotICAvLyBOYW1lIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSBob2xk
aW5nIHRoZSBzdGRlcnIgb3V0cHV0LgotICA6OnN0ZDo6c3RyaW5nIGZpbGVuYW1lXzsKLQotICBH
VEVTVF9ESVNBTExPV19DT1BZX0FORF9BU1NJR05fKENhcHR1cmVkU3RyZWFtKTsKLX07Ci0KLUdU
RVNUX0RJU0FCTEVfTVNDX1dBUk5JTkdTX1BPUF8oKQotCi1zdGF0aWMgQ2FwdHVyZWRTdHJlYW0q
IGdfY2FwdHVyZWRfc3RkZXJyID0gTlVMTDsKLXN0YXRpYyBDYXB0dXJlZFN0cmVhbSogZ19jYXB0
dXJlZF9zdGRvdXQgPSBOVUxMOwotCi0vLyBTdGFydHMgY2FwdHVyaW5nIGFuIG91dHB1dCBzdHJl
YW0gKHN0ZG91dC9zdGRlcnIpLgotdm9pZCBDYXB0dXJlU3RyZWFtKGludCBmZCwgY29uc3QgY2hh
ciogc3RyZWFtX25hbWUsIENhcHR1cmVkU3RyZWFtKiogc3RyZWFtKSB7Ci0gIGlmICgqc3RyZWFt
ICE9IE5VTEwpIHsKLSAgICBHVEVTVF9MT0dfKEZBVEFMKSA8PCAiT25seSBvbmUgIiA8PCBzdHJl
YW1fbmFtZQotICAgICAgICAgICAgICAgICAgICAgIDw8ICIgY2FwdHVyZXIgY2FuIGV4aXN0IGF0
IGEgdGltZS4iOwotICB9Ci0gICpzdHJlYW0gPSBuZXcgQ2FwdHVyZWRTdHJlYW0oZmQpOwotfQot
Ci0vLyBTdG9wcyBjYXB0dXJpbmcgdGhlIG91dHB1dCBzdHJlYW0gYW5kIHJldHVybnMgdGhlIGNh
cHR1cmVkIHN0cmluZy4KLXN0ZDo6c3RyaW5nIEdldENhcHR1cmVkU3RyZWFtKENhcHR1cmVkU3Ry
ZWFtKiogY2FwdHVyZWRfc3RyZWFtKSB7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nIGNvbnRlbnQgPSAo
KmNhcHR1cmVkX3N0cmVhbSktPkdldENhcHR1cmVkU3RyaW5nKCk7Ci0KLSAgZGVsZXRlICpjYXB0
dXJlZF9zdHJlYW07Ci0gICpjYXB0dXJlZF9zdHJlYW0gPSBOVUxMOwotCi0gIHJldHVybiBjb250
ZW50OwotfQotCi0vLyBTdGFydHMgY2FwdHVyaW5nIHN0ZG91dC4KLXZvaWQgQ2FwdHVyZVN0ZG91
dCgpIHsKLSAgQ2FwdHVyZVN0cmVhbShrU3RkT3V0RmlsZW5vLCAic3Rkb3V0IiwgJmdfY2FwdHVy
ZWRfc3Rkb3V0KTsKLX0KLQotLy8gU3RhcnRzIGNhcHR1cmluZyBzdGRlcnIuCi12b2lkIENhcHR1
cmVTdGRlcnIoKSB7Ci0gIENhcHR1cmVTdHJlYW0oa1N0ZEVyckZpbGVubywgInN0ZGVyciIsICZn
X2NhcHR1cmVkX3N0ZGVycik7Ci19Ci0KLS8vIFN0b3BzIGNhcHR1cmluZyBzdGRvdXQgYW5kIHJl
dHVybnMgdGhlIGNhcHR1cmVkIHN0cmluZy4KLXN0ZDo6c3RyaW5nIEdldENhcHR1cmVkU3Rkb3V0
KCkgewotICByZXR1cm4gR2V0Q2FwdHVyZWRTdHJlYW0oJmdfY2FwdHVyZWRfc3Rkb3V0KTsKLX0K
LQotLy8gU3RvcHMgY2FwdHVyaW5nIHN0ZGVyciBhbmQgcmV0dXJucyB0aGUgY2FwdHVyZWQgc3Ry
aW5nLgotc3RkOjpzdHJpbmcgR2V0Q2FwdHVyZWRTdGRlcnIoKSB7Ci0gIHJldHVybiBHZXRDYXB0
dXJlZFN0cmVhbSgmZ19jYXB0dXJlZF9zdGRlcnIpOwotfQotCi0jZW5kaWYgIC8vIEdURVNUX0hB
U19TVFJFQU1fUkVESVJFQ1RJT04KLQotc3RkOjpzdHJpbmcgVGVtcERpcigpIHsKLSNpZiBHVEVT
VF9PU19XSU5ET1dTX01PQklMRQotICByZXR1cm4gIlxcdGVtcFxcIjsKLSNlbGlmIEdURVNUX09T
X1dJTkRPV1MKLSAgY29uc3QgY2hhciogdGVtcF9kaXIgPSBwb3NpeDo6R2V0RW52KCJURU1QIik7
Ci0gIGlmICh0ZW1wX2RpciA9PSBOVUxMIHx8IHRlbXBfZGlyWzBdID09ICdcMCcpCi0gICAgcmV0
dXJuICJcXHRlbXBcXCI7Ci0gIGVsc2UgaWYgKHRlbXBfZGlyW3N0cmxlbih0ZW1wX2RpcikgLSAx
XSA9PSAnXFwnKQotICAgIHJldHVybiB0ZW1wX2RpcjsKLSAgZWxzZQotICAgIHJldHVybiBzdGQ6
OnN0cmluZyh0ZW1wX2RpcikgKyAiXFwiOwotI2VsaWYgR1RFU1RfT1NfTElOVVhfQU5EUk9JRAot
ICByZXR1cm4gIi9zZGNhcmQvIjsKLSNlbHNlCi0gIHJldHVybiAiL3RtcC8iOwotI2VuZGlmICAv
LyBHVEVTVF9PU19XSU5ET1dTX01PQklMRQotfQotCi1zaXplX3QgR2V0RmlsZVNpemUoRklMRSog
ZmlsZSkgewotICBmc2VlayhmaWxlLCAwLCBTRUVLX0VORCk7Ci0gIHJldHVybiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGZ0ZWxsKGZpbGUpKTsKLX0KLQotc3RkOjpzdHJpbmcgUmVhZEVudGlyZUZpbGUo
RklMRSogZmlsZSkgewotICBjb25zdCBzaXplX3QgZmlsZV9zaXplID0gR2V0RmlsZVNpemUoZmls
ZSk7Ci0gIGNoYXIqIGNvbnN0IGJ1ZmZlciA9IG5ldyBjaGFyW2ZpbGVfc2l6ZV07Ci0KLSAgc2l6
ZV90IGJ5dGVzX2xhc3RfcmVhZCA9IDA7ICAvLyAjIG9mIGJ5dGVzIHJlYWQgaW4gdGhlIGxhc3Qg
ZnJlYWQoKQotICBzaXplX3QgYnl0ZXNfcmVhZCA9IDA7ICAgICAgIC8vICMgb2YgYnl0ZXMgcmVh
ZCBzbyBmYXIKLQotICBmc2VlayhmaWxlLCAwLCBTRUVLX1NFVCk7Ci0KLSAgLy8gS2VlcHMgcmVh
ZGluZyB0aGUgZmlsZSB1bnRpbCB3ZSBjYW5ub3QgcmVhZCBmdXJ0aGVyIG9yIHRoZQotICAvLyBw
cmUtZGV0ZXJtaW5lZCBmaWxlIHNpemUgaXMgcmVhY2hlZC4KLSAgZG8gewotICAgIGJ5dGVzX2xh
c3RfcmVhZCA9IGZyZWFkKGJ1ZmZlcitieXRlc19yZWFkLCAxLCBmaWxlX3NpemUtYnl0ZXNfcmVh
ZCwgZmlsZSk7Ci0gICAgYnl0ZXNfcmVhZCArPSBieXRlc19sYXN0X3JlYWQ7Ci0gIH0gd2hpbGUg
KGJ5dGVzX2xhc3RfcmVhZCA+IDAgJiYgYnl0ZXNfcmVhZCA8IGZpbGVfc2l6ZSk7Ci0KLSAgY29u
c3Qgc3RkOjpzdHJpbmcgY29udGVudChidWZmZXIsIGJ5dGVzX3JlYWQpOwotICBkZWxldGVbXSBi
dWZmZXI7Ci0KLSAgcmV0dXJuIGNvbnRlbnQ7Ci19Ci0KLSNpZiBHVEVTVF9IQVNfREVBVEhfVEVT
VAotCi1zdGF0aWMgY29uc3QgOjpzdGQ6OnZlY3Rvcjx0ZXN0aW5nOjppbnRlcm5hbDo6c3RyaW5n
PiogZ19pbmplY3RlZF90ZXN0X2FyZ3ZzID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMOyAgLy8gT3duZWQuCi0KLXZvaWQgU2V0SW5qZWN0YWJsZUFyZ3ZzKGNv
bnN0IDo6c3RkOjp2ZWN0b3I8dGVzdGluZzo6aW50ZXJuYWw6OnN0cmluZz4qIGFyZ3ZzKSB7Ci0g
IGlmIChnX2luamVjdGVkX3Rlc3RfYXJndnMgIT0gYXJndnMpCi0gICAgZGVsZXRlIGdfaW5qZWN0
ZWRfdGVzdF9hcmd2czsKLSAgZ19pbmplY3RlZF90ZXN0X2FyZ3ZzID0gYXJndnM7Ci19Ci0KLWNv
bnN0IDo6c3RkOjp2ZWN0b3I8dGVzdGluZzo6aW50ZXJuYWw6OnN0cmluZz4mIEdldEluamVjdGFi
bGVBcmd2cygpIHsKLSAgaWYgKGdfaW5qZWN0ZWRfdGVzdF9hcmd2cyAhPSBOVUxMKSB7Ci0gICAg
cmV0dXJuICpnX2luamVjdGVkX3Rlc3RfYXJndnM7Ci0gIH0KLSAgcmV0dXJuIEdldEFyZ3ZzKCk7
Ci19Ci0jZW5kaWYgIC8vIEdURVNUX0hBU19ERUFUSF9URVNUCi0KLSNpZiBHVEVTVF9PU19XSU5E
T1dTX01PQklMRQotbmFtZXNwYWNlIHBvc2l4IHsKLXZvaWQgQWJvcnQoKSB7Ci0gIERlYnVnQnJl
YWsoKTsKLSAgVGVybWluYXRlUHJvY2VzcyhHZXRDdXJyZW50UHJvY2VzcygpLCAxKTsKLX0KLX0g
IC8vIG5hbWVzcGFjZSBwb3NpeAotI2VuZGlmICAvLyBHVEVTVF9PU19XSU5ET1dTX01PQklMRQot
Ci0vLyBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb3JyZXNw
b25kaW5nIHRvIHRoZQotLy8gZ2l2ZW4gZmxhZy4gIEZvciBleGFtcGxlLCBGbGFnVG9FbnZWYXIo
ImZvbyIpIHdpbGwgcmV0dXJuCi0vLyAiR1RFU1RfRk9PIiBpbiB0aGUgb3Blbi1zb3VyY2UgdmVy
c2lvbi4KLXN0YXRpYyBzdGQ6OnN0cmluZyBGbGFnVG9FbnZWYXIoY29uc3QgY2hhciogZmxhZykg
ewotICBjb25zdCBzdGQ6OnN0cmluZyBmdWxsX2ZsYWcgPQotICAgICAgKE1lc3NhZ2UoKSA8PCBH
VEVTVF9GTEFHX1BSRUZJWF8gPDwgZmxhZykuR2V0U3RyaW5nKCk7Ci0KLSAgTWVzc2FnZSBlbnZf
dmFyOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBmdWxsX2ZsYWcubGVuZ3RoKCk7IGkrKykg
ewotICAgIGVudl92YXIgPDwgVG9VcHBlcihmdWxsX2ZsYWcuY19zdHIoKVtpXSk7Ci0gIH0KLQot
ICByZXR1cm4gZW52X3Zhci5HZXRTdHJpbmcoKTsKLX0KLQotLy8gUGFyc2VzICdzdHInIGZvciBh
IDMyLWJpdCBzaWduZWQgaW50ZWdlci4gIElmIHN1Y2Nlc3NmdWwsIHdyaXRlcwotLy8gdGhlIHJl
c3VsdCB0byAqdmFsdWUgYW5kIHJldHVybnMgdHJ1ZTsgb3RoZXJ3aXNlIGxlYXZlcyAqdmFsdWUK
LS8vIHVuY2hhbmdlZCBhbmQgcmV0dXJucyBmYWxzZS4KLWJvb2wgUGFyc2VJbnQzMihjb25zdCBN
ZXNzYWdlJiBzcmNfdGV4dCwgY29uc3QgY2hhciogc3RyLCBJbnQzMiogdmFsdWUpIHsKLSAgLy8g
UGFyc2VzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhcyBhIGRlY2ltYWwgaW50ZWdlci4KLSAg
Y2hhciogZW5kID0gTlVMTDsKLSAgY29uc3QgbG9uZyBsb25nX3ZhbHVlID0gc3RydG9sKHN0ciwg
JmVuZCwgMTApOyAgLy8gTk9MSU5UCi0KLSAgLy8gSGFzIHN0cnRvbCgpIGNvbnN1bWVkIGFsbCBj
aGFyYWN0ZXJzIGluIHRoZSBzdHJpbmc/Ci0gIGlmICgqZW5kICE9ICdcMCcpIHsKLSAgICAvLyBO
byAtIGFuIGludmFsaWQgY2hhcmFjdGVyIHdhcyBlbmNvdW50ZXJlZC4KLSAgICBNZXNzYWdlIG1z
ZzsKLSAgICBtc2cgPDwgIldBUk5JTkc6ICIgPDwgc3JjX3RleHQKLSAgICAgICAgPDwgIiBpcyBl
eHBlY3RlZCB0byBiZSBhIDMyLWJpdCBpbnRlZ2VyLCBidXQgYWN0dWFsbHkiCi0gICAgICAgIDw8
ICIgaGFzIHZhbHVlIFwiIiA8PCBzdHIgPDwgIlwiLlxuIjsKLSAgICBwcmludGYoIiVzIiwgbXNn
LkdldFN0cmluZygpLmNfc3RyKCkpOwotICAgIGZmbHVzaChzdGRvdXQpOwotICAgIHJldHVybiBm
YWxzZTsKLSAgfQotCi0gIC8vIElzIHRoZSBwYXJzZWQgdmFsdWUgaW4gdGhlIHJhbmdlIG9mIGFu
IEludDMyPwotICBjb25zdCBJbnQzMiByZXN1bHQgPSBzdGF0aWNfY2FzdDxJbnQzMj4obG9uZ192
YWx1ZSk7Ci0gIGlmIChsb25nX3ZhbHVlID09IExPTkdfTUFYIHx8IGxvbmdfdmFsdWUgPT0gTE9O
R19NSU4gfHwKLSAgICAgIC8vIFRoZSBwYXJzZWQgdmFsdWUgb3ZlcmZsb3dzIGFzIGEgbG9uZy4g
IChzdHJ0b2woKSByZXR1cm5zCi0gICAgICAvLyBMT05HX01BWCBvciBMT05HX01JTiB3aGVuIHRo
ZSBpbnB1dCBvdmVyZmxvd3MuKQotICAgICAgcmVzdWx0ICE9IGxvbmdfdmFsdWUKLSAgICAgIC8v
IFRoZSBwYXJzZWQgdmFsdWUgb3ZlcmZsb3dzIGFzIGFuIEludDMyLgotICAgICAgKSB7Ci0gICAg
TWVzc2FnZSBtc2c7Ci0gICAgbXNnIDw8ICJXQVJOSU5HOiAiIDw8IHNyY190ZXh0Ci0gICAgICAg
IDw8ICIgaXMgZXhwZWN0ZWQgdG8gYmUgYSAzMi1iaXQgaW50ZWdlciwgYnV0IGFjdHVhbGx5Igot
ICAgICAgICA8PCAiIGhhcyB2YWx1ZSAiIDw8IHN0ciA8PCAiLCB3aGljaCBvdmVyZmxvd3MuXG4i
OwotICAgIHByaW50ZigiJXMiLCBtc2cuR2V0U3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgZmZsdXNo
KHN0ZG91dCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgKnZhbHVlID0gcmVzdWx0Owot
ICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gUmVhZHMgYW5kIHJldHVybnMgdGhlIEJvb2xlYW4gZW52
aXJvbm1lbnQgdmFyaWFibGUgY29ycmVzcG9uZGluZyB0bwotLy8gdGhlIGdpdmVuIGZsYWc7IGlm
IGl0J3Mgbm90IHNldCwgcmV0dXJucyBkZWZhdWx0X3ZhbHVlLgotLy8KLS8vIFRoZSB2YWx1ZSBp
cyBjb25zaWRlcmVkIHRydWUgaWZmIGl0J3Mgbm90ICIwIi4KLWJvb2wgQm9vbEZyb21HVGVzdEVu
dihjb25zdCBjaGFyKiBmbGFnLCBib29sIGRlZmF1bHRfdmFsdWUpIHsKLSNpZiBkZWZpbmVkKEdU
RVNUX0dFVF9CT09MX0ZST01fRU5WXykKLSAgcmV0dXJuIEdURVNUX0dFVF9CT09MX0ZST01fRU5W
XyhmbGFnLCBkZWZhdWx0X3ZhbHVlKTsKLSNlbmRpZiAgLy8gZGVmaW5lZChHVEVTVF9HRVRfQk9P
TF9GUk9NX0VOVl8pCi0gIGNvbnN0IHN0ZDo6c3RyaW5nIGVudl92YXIgPSBGbGFnVG9FbnZWYXIo
ZmxhZyk7Ci0gIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ192YWx1ZSA9IHBvc2l4OjpHZXRFbnYo
ZW52X3Zhci5jX3N0cigpKTsKLSAgcmV0dXJuIHN0cmluZ192YWx1ZSA9PSBOVUxMID8KLSAgICAg
IGRlZmF1bHRfdmFsdWUgOiBzdHJjbXAoc3RyaW5nX3ZhbHVlLCAiMCIpICE9IDA7Ci19Ci0KLS8v
IFJlYWRzIGFuZCByZXR1cm5zIGEgMzItYml0IGludGVnZXIgc3RvcmVkIGluIHRoZSBlbnZpcm9u
bWVudAotLy8gdmFyaWFibGUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gZmxhZzsgaWYgaXQg
aXNuJ3Qgc2V0IG9yCi0vLyBkb2Vzbid0IHJlcHJlc2VudCBhIHZhbGlkIDMyLWJpdCBpbnRlZ2Vy
LCByZXR1cm5zIGRlZmF1bHRfdmFsdWUuCi1JbnQzMiBJbnQzMkZyb21HVGVzdEVudihjb25zdCBj
aGFyKiBmbGFnLCBJbnQzMiBkZWZhdWx0X3ZhbHVlKSB7Ci0jaWYgZGVmaW5lZChHVEVTVF9HRVRf
SU5UMzJfRlJPTV9FTlZfKQotICByZXR1cm4gR1RFU1RfR0VUX0lOVDMyX0ZST01fRU5WXyhmbGFn
LCBkZWZhdWx0X3ZhbHVlKTsKLSNlbmRpZiAgLy8gZGVmaW5lZChHVEVTVF9HRVRfSU5UMzJfRlJP
TV9FTlZfKQotICBjb25zdCBzdGQ6OnN0cmluZyBlbnZfdmFyID0gRmxhZ1RvRW52VmFyKGZsYWcp
OwotICBjb25zdCBjaGFyKiBjb25zdCBzdHJpbmdfdmFsdWUgPSBwb3NpeDo6R2V0RW52KGVudl92
YXIuY19zdHIoKSk7Ci0gIGlmIChzdHJpbmdfdmFsdWUgPT0gTlVMTCkgewotICAgIC8vIFRoZSBl
bnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LgotICAgIHJldHVybiBkZWZhdWx0X3ZhbHVl
OwotICB9Ci0KLSAgSW50MzIgcmVzdWx0ID0gZGVmYXVsdF92YWx1ZTsKLSAgaWYgKCFQYXJzZUlu
dDMyKE1lc3NhZ2UoKSA8PCAiRW52aXJvbm1lbnQgdmFyaWFibGUgIiA8PCBlbnZfdmFyLAotICAg
ICAgICAgICAgICAgICAgc3RyaW5nX3ZhbHVlLCAmcmVzdWx0KSkgewotICAgIHByaW50ZigiVGhl
IGRlZmF1bHQgdmFsdWUgJXMgaXMgdXNlZC5cbiIsCi0gICAgICAgICAgIChNZXNzYWdlKCkgPDwg
ZGVmYXVsdF92YWx1ZSkuR2V0U3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgZmZsdXNoKHN0ZG91dCk7
Ci0gICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQot
Ci0vLyBSZWFkcyBhbmQgcmV0dXJucyB0aGUgc3RyaW5nIGVudmlyb25tZW50IHZhcmlhYmxlIGNv
cnJlc3BvbmRpbmcgdG8KLS8vIHRoZSBnaXZlbiBmbGFnOyBpZiBpdCdzIG5vdCBzZXQsIHJldHVy
bnMgZGVmYXVsdF92YWx1ZS4KLXN0ZDo6c3RyaW5nIFN0cmluZ0Zyb21HVGVzdEVudihjb25zdCBj
aGFyKiBmbGFnLCBjb25zdCBjaGFyKiBkZWZhdWx0X3ZhbHVlKSB7Ci0jaWYgZGVmaW5lZChHVEVT
VF9HRVRfU1RSSU5HX0ZST01fRU5WXykKLSAgcmV0dXJuIEdURVNUX0dFVF9TVFJJTkdfRlJPTV9F
TlZfKGZsYWcsIGRlZmF1bHRfdmFsdWUpOwotI2VuZGlmICAvLyBkZWZpbmVkKEdURVNUX0dFVF9T
VFJJTkdfRlJPTV9FTlZfKQotICBjb25zdCBzdGQ6OnN0cmluZyBlbnZfdmFyID0gRmxhZ1RvRW52
VmFyKGZsYWcpOwotICBjb25zdCBjaGFyKiB2YWx1ZSA9IHBvc2l4OjpHZXRFbnYoZW52X3Zhci5j
X3N0cigpKTsKLSAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0K
LQotICAvLyBBcyBhIHNwZWNpYWwgY2FzZSBmb3IgdGhlICdvdXRwdXQnIGZsYWcsIGlmIEdURVNU
X09VVFBVVCBpcyBub3QKLSAgLy8gc2V0LCB3ZSBsb29rIGZvciBYTUxfT1VUUFVUX0ZJTEUsIHdo
aWNoIGlzIHNldCBieSB0aGUgQmF6ZWwgYnVpbGQKLSAgLy8gc3lzdGVtLiAgVGhlIHZhbHVlIG9m
IFhNTF9PVVRQVVRfRklMRSBpcyBhIGZpbGVuYW1lIHdpdGhvdXQgdGhlCi0gIC8vICJ4bWw6IiBw
cmVmaXggb2YgR1RFU1RfT1VUUFVULgotICAvLwotICAvLyBUaGUgbmV0IHByaW9yaXR5IG9yZGVy
IGFmdGVyIGZsYWcgcHJvY2Vzc2luZyBpcyB0aHVzOgotICAvLyAgIC0tZ3Rlc3Rfb3V0cHV0IGNv
bW1hbmQgbGluZSBmbGFnCi0gIC8vICAgR1RFU1RfT1VUUFVUIGVudmlyb25tZW50IHZhcmlhYmxl
Ci0gIC8vICAgWE1MX09VVFBVVF9GSUxFIGVudmlyb25tZW50IHZhcmlhYmxlCi0gIC8vICAgJ2Rl
ZmF1bHRfdmFsdWUnCi0gIGlmIChzdHJjbXAoZmxhZywgIm91dHB1dCIpID09IDApIHsKLSAgICB2
YWx1ZSA9IHBvc2l4OjpHZXRFbnYoIlhNTF9PVVRQVVRfRklMRSIpOwotICAgIGlmICh2YWx1ZSAh
PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gc3RkOjpzdHJpbmcoInhtbDoiKSArIHZhbHVlOwotICAg
IH0KLSAgfQotICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGlu
dGVybmFsCi19ICAvLyBuYW1lc3BhY2UgdGVzdGluZwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9zcmMvZ3Rlc3QtcHJpbnRl
cnMuY2MgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9mb2xseS9ndGVzdC9nb29nbGV0
ZXN0L3NyYy9ndGVzdC1wcmludGVycy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTJkZjQxMmY4YTIwNDU5MDQzY2RiNzBlNWIwOTVhNzJiN2ExMzk0YS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L3NyYy9ndGVzdC1wcmludGVycy5jYworKysgL2Rl
di9udWxsCkBAIC0xLDM3MyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAwNywgR29vZ2xlIEluYy4K
LS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0vLwotLy8gQXV0aG9yOiB3YW5AZ29vZ2xlLmNvbSAoWmhhbnlvbmcgV2Fu
KQotCi0vLyBHb29nbGUgVGVzdCAtIFRoZSBHb29nbGUgQysrIFRlc3RpbmcgRnJhbWV3b3JrCi0v
LwotLy8gVGhpcyBmaWxlIGltcGxlbWVudHMgYSB1bml2ZXJzYWwgdmFsdWUgcHJpbnRlciB0aGF0
IGNhbiBwcmludCBhCi0vLyB2YWx1ZSBvZiBhbnkgdHlwZSBUOgotLy8KLS8vICAgdm9pZCA6OnRl
c3Rpbmc6OmludGVybmFsOjpVbml2ZXJzYWxQcmludGVyPFQ+OjpQcmludCh2YWx1ZSwgb3N0cmVh
bV9wdHIpOwotLy8KLS8vIEl0IHVzZXMgdGhlIDw8IG9wZXJhdG9yIHdoZW4gcG9zc2libGUsIGFu
ZCBwcmludHMgdGhlIGJ5dGVzIGluIHRoZQotLy8gb2JqZWN0IG90aGVyd2lzZS4gIEEgdXNlciBj
YW4gb3ZlcnJpZGUgaXRzIGJlaGF2aW9yIGZvciBhIGNsYXNzCi0vLyB0eXBlIEZvbyBieSBkZWZp
bmluZyBlaXRoZXIgb3BlcmF0b3I8PCg6OnN0ZDo6b3N0cmVhbSYsIGNvbnN0IEZvbyYpCi0vLyBv
ciB2b2lkIFByaW50VG8oY29uc3QgRm9vJiwgOjpzdGQ6Om9zdHJlYW0qKSBpbiB0aGUgbmFtZXNw
YWNlIHRoYXQKLS8vIGRlZmluZXMgRm9vLgotCi0jaW5jbHVkZSAiZ3Rlc3QvZ3Rlc3QtcHJpbnRl
cnMuaCIKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8
Y3djaGFyPgotI2luY2x1ZGUgPG9zdHJlYW0+ICAvLyBOT0xJTlQKLSNpbmNsdWRlIDxzdHJpbmc+
Ci0jaW5jbHVkZSAiZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtcG9ydC5oIgotCi1uYW1lc3BhY2UgdGVz
dGluZyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXVzaW5nIDo6c3RkOjpvc3RyZWFtOwotCi0vLyBQcmlu
dHMgYSBzZWdtZW50IG9mIGJ5dGVzIGluIHRoZSBnaXZlbiBvYmplY3QuCi1HVEVTVF9BVFRSSUJV
VEVfTk9fU0FOSVRJWkVfTUVNT1JZXwotR1RFU1RfQVRUUklCVVRFX05PX1NBTklUSVpFX0FERFJF
U1NfCi1HVEVTVF9BVFRSSUJVVEVfTk9fU0FOSVRJWkVfVEhSRUFEXwotdm9pZCBQcmludEJ5dGVT
ZWdtZW50SW5PYmplY3RUbyhjb25zdCB1bnNpZ25lZCBjaGFyKiBvYmpfYnl0ZXMsIHNpemVfdCBz
dGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50LCBvc3Ry
ZWFtKiBvcykgewotICBjaGFyIHRleHRbNV0gPSAiIjsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkg
IT0gY291bnQ7IGkrKykgewotICAgIGNvbnN0IHNpemVfdCBqID0gc3RhcnQgKyBpOwotICAgIGlm
IChpICE9IDApIHsKLSAgICAgIC8vIE9yZ2FuaXplcyB0aGUgYnl0ZXMgaW50byBncm91cHMgb2Yg
MiBmb3IgZWFzeSBwYXJzaW5nIGJ5Ci0gICAgICAvLyBodW1hbi4KLSAgICAgIGlmICgoaiAlIDIp
ID09IDApCi0gICAgICAgICpvcyA8PCAnICc7Ci0gICAgICBlbHNlCi0gICAgICAgICpvcyA8PCAn
LSc7Ci0gICAgfQotICAgIEdURVNUX1NOUFJJTlRGXyh0ZXh0LCBzaXplb2YodGV4dCksICIlMDJY
Iiwgb2JqX2J5dGVzW2pdKTsKLSAgICAqb3MgPDwgdGV4dDsKLSAgfQotfQotCi0vLyBQcmludHMg
dGhlIGJ5dGVzIGluIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZ2l2ZW4gb3N0cmVhbS4KLXZvaWQg
UHJpbnRCeXRlc0luT2JqZWN0VG9JbXBsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIG9ial9ieXRlcywg
c2l6ZV90IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3N0cmVhbSogb3Mp
IHsKLSAgLy8gVGVsbHMgdGhlIHVzZXIgaG93IGJpZyB0aGUgb2JqZWN0IGlzLgotICAqb3MgPDwg
Y291bnQgPDwgIi1ieXRlIG9iamVjdCA8IjsKLQotICBjb25zdCBzaXplX3Qga1RocmVzaG9sZCA9
IDEzMjsKLSAgY29uc3Qgc2l6ZV90IGtDaHVua1NpemUgPSA2NDsKLSAgLy8gSWYgdGhlIG9iamVj
dCBzaXplIGlzIGJpZ2dlciB0aGFuIGtUaHJlc2hvbGQsIHdlJ2xsIGhhdmUgdG8gb21pdAotICAv
LyBzb21lIGRldGFpbHMgYnkgcHJpbnRpbmcgb25seSB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGtD
aHVua1NpemUKLSAgLy8gYnl0ZXMuCi0gIC8vIFRPRE8od2FuKTogbGV0IHRoZSB1c2VyIGNvbnRy
b2wgdGhlIHRocmVzaG9sZCB1c2luZyBhIGZsYWcuCi0gIGlmIChjb3VudCA8IGtUaHJlc2hvbGQp
IHsKLSAgICBQcmludEJ5dGVTZWdtZW50SW5PYmplY3RUbyhvYmpfYnl0ZXMsIDAsIGNvdW50LCBv
cyk7Ci0gIH0gZWxzZSB7Ci0gICAgUHJpbnRCeXRlU2VnbWVudEluT2JqZWN0VG8ob2JqX2J5dGVz
LCAwLCBrQ2h1bmtTaXplLCBvcyk7Ci0gICAgKm9zIDw8ICIgLi4uICI7Ci0gICAgLy8gUm91bmRz
IHVwIHRvIDItYnl0ZSBib3VuZGFyeS4KLSAgICBjb25zdCBzaXplX3QgcmVzdW1lX3BvcyA9IChj
b3VudCAtIGtDaHVua1NpemUgKyAxKS8yKjI7Ci0gICAgUHJpbnRCeXRlU2VnbWVudEluT2JqZWN0
VG8ob2JqX2J5dGVzLCByZXN1bWVfcG9zLCBjb3VudCAtIHJlc3VtZV9wb3MsIG9zKTsKLSAgfQot
ICAqb3MgPDwgIj4iOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotbmFtZXNwYWNlIGludGVybmFs
MiB7Ci0KLS8vIERlbGVnYXRlcyB0byBQcmludEJ5dGVzSW5PYmplY3RUb0ltcGwoKSB0byBwcmlu
dCB0aGUgYnl0ZXMgaW4gdGhlCi0vLyBnaXZlbiBvYmplY3QuICBUaGUgZGVsZWdhdGlvbiBzaW1w
bGlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiwgd2hpY2gKLS8vIHVzZXMgdGhlIDw8IG9wZXJhdG9y
IGFuZCB0aHVzIGlzIGVhc2llciBkb25lIG91dHNpZGUgb2YgdGhlCi0vLyA6OnRlc3Rpbmc6Omlu
dGVybmFsIG5hbWVzcGFjZSwgd2hpY2ggY29udGFpbnMgYSA8PCBvcGVyYXRvciB0aGF0Ci0vLyBz
b21ldGltZXMgY29uZmxpY3RzIHdpdGggdGhlIG9uZSBpbiBTVEwuCi12b2lkIFByaW50Qnl0ZXNJ
bk9iamVjdFRvKGNvbnN0IHVuc2lnbmVkIGNoYXIqIG9ial9ieXRlcywgc2l6ZV90IGNvdW50LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBvc3RyZWFtKiBvcykgewotICBQcmludEJ5dGVzSW5P
YmplY3RUb0ltcGwob2JqX2J5dGVzLCBjb3VudCwgb3MpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
aW50ZXJuYWwyCi0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLS8vIERlcGVuZGluZyBvbiB0aGUg
dmFsdWUgb2YgYSBjaGFyIChvciB3Y2hhcl90KSwgd2UgcHJpbnQgaXQgaW4gb25lCi0vLyBvZiB0
aHJlZSBmb3JtYXRzOgotLy8gICAtIGFzIGlzIGlmIGl0J3MgYSBwcmludGFibGUgQVNDSUkgKGUu
Zy4gJ2EnLCAnMicsICcgJyksCi0vLyAgIC0gYXMgYSBoZXhpZGVjaW1hbCBlc2NhcGUgc2VxdWVu
Y2UgKGUuZy4gJ1x4N0YnKSwgb3IKLS8vICAgLSBhcyBhIHNwZWNpYWwgZXNjYXBlIHNlcXVlbmNl
IChlLmcuICdccicsICdcbicpLgotZW51bSBDaGFyRm9ybWF0IHsKLSAga0FzSXMsCi0gIGtIZXhF
c2NhcGUsCi0gIGtTcGVjaWFsRXNjYXBlCi19OwotCi0vLyBSZXR1cm5zIHRydWUgaWYgYyBpcyBh
IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXIuICBXZSB0ZXN0IHRoZQotLy8gdmFsdWUgb2YgYyBk
aXJlY3RseSBpbnN0ZWFkIG9mIGNhbGxpbmcgaXNwcmludCgpLCB3aGljaCBpcyBidWdneSBvbgot
Ly8gV2luZG93cyBNb2JpbGUuCi1pbmxpbmUgYm9vbCBJc1ByaW50YWJsZUFzY2lpKHdjaGFyX3Qg
YykgewotICByZXR1cm4gMHgyMCA8PSBjICYmIGMgPD0gMHg3RTsKLX0KLQotLy8gUHJpbnRzIGEg
d2lkZSBvciBuYXJyb3cgY2hhciBjIGFzIGEgY2hhcmFjdGVyIGxpdGVyYWwgd2l0aG91dCB0aGUK
LS8vIHF1b3RlcywgZXNjYXBpbmcgaXQgd2hlbiBuZWNlc3Nhcnk7IHJldHVybnMgaG93IGMgd2Fz
IGZvcm1hdHRlZC4KLS8vIFRoZSB0ZW1wbGF0ZSBhcmd1bWVudCBVbnNpZ25lZENoYXIgaXMgdGhl
IHVuc2lnbmVkIHZlcnNpb24gb2YgQ2hhciwKLS8vIHdoaWNoIGlzIHRoZSB0eXBlIG9mIGMuCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVW5zaWduZWRDaGFyLCB0eXBlbmFtZSBDaGFyPgotc3RhdGljIENo
YXJGb3JtYXQgUHJpbnRBc0NoYXJMaXRlcmFsVG8oQ2hhciBjLCBvc3RyZWFtKiBvcykgewotICBz
d2l0Y2ggKHN0YXRpY19jYXN0PHdjaGFyX3Q+KGMpKSB7Ci0gICAgY2FzZSBMJ1wwJzoKLSAgICAg
ICpvcyA8PCAiXFwwIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgTCdcJyc6Ci0gICAgICAqb3Mg
PDwgIlxcJyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEwnXFwnOgotICAgICAgKm9zIDw8ICJc
XFxcIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgTCdcYSc6Ci0gICAgICAqb3MgPDwgIlxcYSI7
Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEwnXGInOgotICAgICAgKm9zIDw8ICJcXGIiOwotICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBMJ1xmJzoKLSAgICAgICpvcyA8PCAiXFxmIjsKLSAgICAgIGJy
ZWFrOwotICAgIGNhc2UgTCdcbic6Ci0gICAgICAqb3MgPDwgIlxcbiI7Ci0gICAgICBicmVhazsK
LSAgICBjYXNlIEwnXHInOgotICAgICAgKm9zIDw8ICJcXHIiOwotICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBMJ1x0JzoKLSAgICAgICpvcyA8PCAiXFx0IjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TCdcdic6Ci0gICAgICAqb3MgPDwgIlxcdiI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgaWYgKElzUHJpbnRhYmxlQXNjaWkoYykpIHsKLSAgICAgICAgKm9zIDw8IHN0YXRpY19j
YXN0PGNoYXI+KGMpOwotICAgICAgICByZXR1cm4ga0FzSXM7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICAqb3MgPDwgIlxceCIgKyBTdHJpbmc6OkZvcm1hdEhleEludChzdGF0aWNfY2FzdDxVbnNp
Z25lZENoYXI+KGMpKTsKLSAgICAgICAgcmV0dXJuIGtIZXhFc2NhcGU7Ci0gICAgICB9Ci0gIH0K
LSAgcmV0dXJuIGtTcGVjaWFsRXNjYXBlOwotfQotCi0vLyBQcmludHMgYSB3Y2hhcl90IGMgYXMg
aWYgaXQncyBwYXJ0IG9mIGEgc3RyaW5nIGxpdGVyYWwsIGVzY2FwaW5nIGl0IHdoZW4KLS8vIG5l
Y2Vzc2FyeTsgcmV0dXJucyBob3cgYyB3YXMgZm9ybWF0dGVkLgotc3RhdGljIENoYXJGb3JtYXQg
UHJpbnRBc1N0cmluZ0xpdGVyYWxUbyh3Y2hhcl90IGMsIG9zdHJlYW0qIG9zKSB7Ci0gIHN3aXRj
aCAoYykgewotICAgIGNhc2UgTCdcJyc6Ci0gICAgICAqb3MgPDwgIiciOwotICAgICAgcmV0dXJu
IGtBc0lzOwotICAgIGNhc2UgTCciJzoKLSAgICAgICpvcyA8PCAiXFxcIiI7Ci0gICAgICByZXR1
cm4ga1NwZWNpYWxFc2NhcGU7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBQcmludEFzQ2hh
ckxpdGVyYWxUbzx3Y2hhcl90PihjLCBvcyk7Ci0gIH0KLX0KLQotLy8gUHJpbnRzIGEgY2hhciBj
IGFzIGlmIGl0J3MgcGFydCBvZiBhIHN0cmluZyBsaXRlcmFsLCBlc2NhcGluZyBpdCB3aGVuCi0v
LyBuZWNlc3Nhcnk7IHJldHVybnMgaG93IGMgd2FzIGZvcm1hdHRlZC4KLXN0YXRpYyBDaGFyRm9y
bWF0IFByaW50QXNTdHJpbmdMaXRlcmFsVG8oY2hhciBjLCBvc3RyZWFtKiBvcykgewotICByZXR1
cm4gUHJpbnRBc1N0cmluZ0xpdGVyYWxUbygKLSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpKSwgb3MpOwotfQotCi0vLyBQcmludHMgYSB3aWRl
IG9yIG5hcnJvdyBjaGFyYWN0ZXIgYyBhbmQgaXRzIGNvZGUuICAnXDAnIGlzIHByaW50ZWQKLS8v
IGFzICInXFwwJyIsIG90aGVyIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlIGFsc28gcHJvcGVy
bHkgZXNjYXBlZAotLy8gdXNpbmcgdGhlIHN0YW5kYXJkIEMrKyBlc2NhcGUgc2VxdWVuY2UuICBU
aGUgdGVtcGxhdGUgYXJndW1lbnQKLS8vIFVuc2lnbmVkQ2hhciBpcyB0aGUgdW5zaWduZWQgdmVy
c2lvbiBvZiBDaGFyLCB3aGljaCBpcyB0aGUgdHlwZSBvZiBjLgotdGVtcGxhdGUgPHR5cGVuYW1l
IFVuc2lnbmVkQ2hhciwgdHlwZW5hbWUgQ2hhcj4KLXZvaWQgUHJpbnRDaGFyQW5kQ29kZVRvKENo
YXIgYywgb3N0cmVhbSogb3MpIHsKLSAgLy8gRmlyc3QsIHByaW50IGMgYXMgYSBsaXRlcmFsIGlu
IHRoZSBtb3N0IHJlYWRhYmxlIGZvcm0gd2UgY2FuIGZpbmQuCi0gICpvcyA8PCAoKHNpemVvZihj
KSA+IDEpID8gIkwnIiA6ICInIik7Ci0gIGNvbnN0IENoYXJGb3JtYXQgZm9ybWF0ID0gUHJpbnRB
c0NoYXJMaXRlcmFsVG88VW5zaWduZWRDaGFyPihjLCBvcyk7Ci0gICpvcyA8PCAiJyI7Ci0KLSAg
Ly8gVG8gYWlkIHVzZXIgZGVidWdnaW5nLCB3ZSBhbHNvIHByaW50IGMncyBjb2RlIGluIGRlY2lt
YWwsIHVubGVzcwotICAvLyBpdCdzIDAgKGluIHdoaWNoIGNhc2UgYyB3YXMgcHJpbnRlZCBhcyAn
XFwwJywgbWFraW5nIHRoZSBjb2RlCi0gIC8vIG9idmlvdXMpLgotICBpZiAoYyA9PSAwKQotICAg
IHJldHVybjsKLSAgKm9zIDw8ICIgKCIgPDwgc3RhdGljX2Nhc3Q8aW50PihjKTsKLQotICAvLyBG
b3IgbW9yZSBjb252ZW5pZW5jZSwgd2UgcHJpbnQgYydzIGNvZGUgYWdhaW4gaW4gaGV4aWRlY2lt
YWwsCi0gIC8vIHVubGVzcyBjIHdhcyBhbHJlYWR5IHByaW50ZWQgaW4gdGhlIGZvcm0gJ1x4IyMn
IG9yIHRoZSBjb2RlIGlzIGluCi0gIC8vIFsxLCA5XS4KLSAgaWYgKGZvcm1hdCA9PSBrSGV4RXNj
YXBlIHx8ICgxIDw9IGMgJiYgYyA8PSA5KSkgewotICAgIC8vIERvIG5vdGhpbmcuCi0gIH0gZWxz
ZSB7Ci0gICAgKm9zIDw8ICIsIDB4IiA8PCBTdHJpbmc6OkZvcm1hdEhleEludChzdGF0aWNfY2Fz
dDxVbnNpZ25lZENoYXI+KGMpKTsKLSAgfQotICAqb3MgPDwgIikiOwotfQotCi12b2lkIFByaW50
VG8odW5zaWduZWQgY2hhciBjLCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgUHJpbnRDaGFyQW5k
Q29kZVRvPHVuc2lnbmVkIGNoYXI+KGMsIG9zKTsKLX0KLXZvaWQgUHJpbnRUbyhzaWduZWQgY2hh
ciBjLCA6OnN0ZDo6b3N0cmVhbSogb3MpIHsKLSAgUHJpbnRDaGFyQW5kQ29kZVRvPHVuc2lnbmVk
IGNoYXI+KGMsIG9zKTsKLX0KLQotLy8gUHJpbnRzIGEgd2NoYXJfdCBhcyBhIHN5bWJvbCBpZiBp
dCBpcyBwcmludGFibGUgb3IgYXMgaXRzIGludGVybmFsCi0vLyBjb2RlIG90aGVyd2lzZSBhbmQg
YWxzbyBhcyBpdHMgY29kZS4gIEwnXDAnIGlzIHByaW50ZWQgYXMgIkwnXFwwJyIuCi12b2lkIFBy
aW50VG8od2NoYXJfdCB3Yywgb3N0cmVhbSogb3MpIHsKLSAgUHJpbnRDaGFyQW5kQ29kZVRvPHdj
aGFyX3Q+KHdjLCBvcyk7Ci19Ci0KLS8vIFByaW50cyB0aGUgZ2l2ZW4gYXJyYXkgb2YgY2hhcmFj
dGVycyB0byB0aGUgb3N0cmVhbS4gIENoYXJUeXBlIG11c3QgYmUgZWl0aGVyCi0vLyBjaGFyIG9y
IHdjaGFyX3QuCi0vLyBUaGUgYXJyYXkgc3RhcnRzIGF0IGJlZ2luLCB0aGUgbGVuZ3RoIGlzIGxl
biwgaXQgbWF5IGluY2x1ZGUgJ1wwJyBjaGFyYWN0ZXJzCi0vLyBhbmQgbWF5IG5vdCBiZSBOVUwt
dGVybWluYXRlZC4KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KLUdURVNUX0FUVFJJQlVU
RV9OT19TQU5JVElaRV9NRU1PUllfCi1HVEVTVF9BVFRSSUJVVEVfTk9fU0FOSVRJWkVfQUREUkVT
U18KLUdURVNUX0FUVFJJQlVURV9OT19TQU5JVElaRV9USFJFQURfCi1zdGF0aWMgdm9pZCBQcmlu
dENoYXJzQXNTdHJpbmdUbygKLSAgICBjb25zdCBDaGFyVHlwZSogYmVnaW4sIHNpemVfdCBsZW4s
IG9zdHJlYW0qIG9zKSB7Ci0gIGNvbnN0IGNoYXIqIGNvbnN0IGtRdW90ZUJlZ2luID0gc2l6ZW9m
KENoYXJUeXBlKSA9PSAxID8gIlwiIiA6ICJMXCIiOwotICAqb3MgPDwga1F1b3RlQmVnaW47Ci0g
IGJvb2wgaXNfcHJldmlvdXNfaGV4ID0gZmFsc2U7Ci0gIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBsZW47ICsraW5kZXgpIHsKLSAgICBjb25zdCBDaGFyVHlwZSBjdXIgPSBiZWdpbltp
bmRleF07Ci0gICAgaWYgKGlzX3ByZXZpb3VzX2hleCAmJiBJc1hEaWdpdChjdXIpKSB7Ci0gICAg
ICAvLyBQcmV2aW91cyBjaGFyYWN0ZXIgaXMgb2YgJ1x4Li4nIGZvcm0gYW5kIHRoaXMgY2hhcmFj
dGVyIGNhbiBiZQotICAgICAgLy8gaW50ZXJwcmV0ZWQgYXMgYW5vdGhlciBoZXhhZGVjaW1hbCBk
aWdpdCBpbiBpdHMgbnVtYmVyLiBCcmVhayBzdHJpbmcgdG8KLSAgICAgIC8vIGRpc2FtYmlndWF0
ZS4KLSAgICAgICpvcyA8PCAiXCIgIiA8PCBrUXVvdGVCZWdpbjsKLSAgICB9Ci0gICAgaXNfcHJl
dmlvdXNfaGV4ID0gUHJpbnRBc1N0cmluZ0xpdGVyYWxUbyhjdXIsIG9zKSA9PSBrSGV4RXNjYXBl
OwotICB9Ci0gICpvcyA8PCAiXCIiOwotfQotCi0vLyBQcmludHMgYSAoY29uc3QpIGNoYXIvd2No
YXJfdCBhcnJheSBvZiAnbGVuJyBlbGVtZW50cywgc3RhcnRpbmcgYXQgYWRkcmVzcwotLy8gJ2Jl
Z2luJy4gIENoYXJUeXBlIG11c3QgYmUgZWl0aGVyIGNoYXIgb3Igd2NoYXJfdC4KLXRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyVHlwZT4KLUdURVNUX0FUVFJJQlVURV9OT19TQU5JVElaRV9NRU1PUllf
Ci1HVEVTVF9BVFRSSUJVVEVfTk9fU0FOSVRJWkVfQUREUkVTU18KLUdURVNUX0FUVFJJQlVURV9O
T19TQU5JVElaRV9USFJFQURfCi1zdGF0aWMgdm9pZCBVbml2ZXJzYWxQcmludENoYXJBcnJheSgK
LSAgICBjb25zdCBDaGFyVHlwZSogYmVnaW4sIHNpemVfdCBsZW4sIG9zdHJlYW0qIG9zKSB7Ci0g
IC8vIFRoZSBjb2RlCi0gIC8vICAgY29uc3QgY2hhciBrRm9vW10gPSAiZm9vIjsKLSAgLy8gZ2Vu
ZXJhdGVzIGFuIGFycmF5IG9mIDQsIG5vdCAzLCBlbGVtZW50cywgd2l0aCB0aGUgbGFzdCBvbmUg
YmVpbmcgJ1wwJy4KLSAgLy8KLSAgLy8gVGhlcmVmb3JlIHdoZW4gcHJpbnRpbmcgYSBjaGFyIGFy
cmF5LCB3ZSBkb24ndCBwcmludCB0aGUgbGFzdCBlbGVtZW50IGlmCi0gIC8vIGl0J3MgJ1wwJywg
c3VjaCB0aGF0IHRoZSBvdXRwdXQgbWF0Y2hlcyB0aGUgc3RyaW5nIGxpdGVyYWwgYXMgaXQncwot
ICAvLyB3cml0dGVuIGluIHRoZSBzb3VyY2UgY29kZS4KLSAgaWYgKGxlbiA+IDAgJiYgYmVnaW5b
bGVuIC0gMV0gPT0gJ1wwJykgewotICAgIFByaW50Q2hhcnNBc1N0cmluZ1RvKGJlZ2luLCBsZW4g
LSAxLCBvcyk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLy8gSWYsIGhvd2V2ZXIsIHRoZSBsYXN0
IGVsZW1lbnQgaW4gdGhlIGFycmF5IGlzIG5vdCAnXDAnLCBlLmcuCi0gIC8vICAgIGNvbnN0IGNo
YXIga0Zvb1tdID0geyAnZicsICdvJywgJ28nIH07Ci0gIC8vIHdlIG11c3QgcHJpbnQgdGhlIGVu
dGlyZSBhcnJheS4gIFdlIGFsc28gcHJpbnQgYSBtZXNzYWdlIHRvIGluZGljYXRlCi0gIC8vIHRo
YXQgdGhlIGFycmF5IGlzIG5vdCBOVUwtdGVybWluYXRlZC4KLSAgUHJpbnRDaGFyc0FzU3RyaW5n
VG8oYmVnaW4sIGxlbiwgb3MpOwotICAqb3MgPDwgIiAobm8gdGVybWluYXRpbmcgTlVMKSI7Ci19
Ci0KLS8vIFByaW50cyBhIChjb25zdCkgY2hhciBhcnJheSBvZiAnbGVuJyBlbGVtZW50cywgc3Rh
cnRpbmcgYXQgYWRkcmVzcyAnYmVnaW4nLgotdm9pZCBVbml2ZXJzYWxQcmludEFycmF5KGNvbnN0
IGNoYXIqIGJlZ2luLCBzaXplX3QgbGVuLCBvc3RyZWFtKiBvcykgewotICBVbml2ZXJzYWxQcmlu
dENoYXJBcnJheShiZWdpbiwgbGVuLCBvcyk7Ci19Ci0KLS8vIFByaW50cyBhIChjb25zdCkgd2No
YXJfdCBhcnJheSBvZiAnbGVuJyBlbGVtZW50cywgc3RhcnRpbmcgYXQgYWRkcmVzcwotLy8gJ2Jl
Z2luJy4KLXZvaWQgVW5pdmVyc2FsUHJpbnRBcnJheShjb25zdCB3Y2hhcl90KiBiZWdpbiwgc2l6
ZV90IGxlbiwgb3N0cmVhbSogb3MpIHsKLSAgVW5pdmVyc2FsUHJpbnRDaGFyQXJyYXkoYmVnaW4s
IGxlbiwgb3MpOwotfQotCi0vLyBQcmludHMgdGhlIGdpdmVuIEMgc3RyaW5nIHRvIHRoZSBvc3Ry
ZWFtLgotdm9pZCBQcmludFRvKGNvbnN0IGNoYXIqIHMsIG9zdHJlYW0qIG9zKSB7Ci0gIGlmIChz
ID09IE5VTEwpIHsKLSAgICAqb3MgPDwgIk5VTEwiOwotICB9IGVsc2UgewotICAgICpvcyA8PCBJ
bXBsaWNpdENhc3RfPGNvbnN0IHZvaWQqPihzKSA8PCAiIHBvaW50aW5nIHRvICI7Ci0gICAgUHJp
bnRDaGFyc0FzU3RyaW5nVG8ocywgc3RybGVuKHMpLCBvcyk7Ci0gIH0KLX0KLQotLy8gTVNWQyBj
b21waWxlciBjYW4gYmUgY29uZmlndXJlZCB0byBkZWZpbmUgd2hhcl90IGFzIGEgdHlwZWRlZgot
Ly8gb2YgdW5zaWduZWQgc2hvcnQuIERlZmluaW5nIGFuIG92ZXJsb2FkIGZvciBjb25zdCB3Y2hh
cl90KiBpbiB0aGF0IGNhc2UKLS8vIHdvdWxkIGNhdXNlIHBvaW50ZXJzIHRvIHVuc2lnbmVkIHNo
b3J0cyBiZSBwcmludGVkIGFzIHdpZGUgc3RyaW5ncywKLS8vIHBvc3NpYmx5IGFjY2Vzc2luZyBt
b3JlIG1lbW9yeSB0aGFuIGludGVuZGVkIGFuZCBjYXVzaW5nIGludmFsaWQKLS8vIG1lbW9yeSBh
Y2Nlc3Nlcy4gTVNWQyBkZWZpbmVzIF9OQVRJVkVfV0NIQVJfVF9ERUZJTkVEIHN5bWJvbCB3aGVu
Ci0vLyB3Y2hhcl90IGlzIGltcGxlbWVudGVkIGFzIGEgbmF0aXZlIHR5cGUuCi0jaWYgIWRlZmlu
ZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX05BVElWRV9XQ0hBUl9UX0RFRklORUQpCi0vLyBQcmlu
dHMgdGhlIGdpdmVuIHdpZGUgQyBzdHJpbmcgdG8gdGhlIG9zdHJlYW0uCi12b2lkIFByaW50VG8o
Y29uc3Qgd2NoYXJfdCogcywgb3N0cmVhbSogb3MpIHsKLSAgaWYgKHMgPT0gTlVMTCkgewotICAg
ICpvcyA8PCAiTlVMTCI7Ci0gIH0gZWxzZSB7Ci0gICAgKm9zIDw8IEltcGxpY2l0Q2FzdF88Y29u
c3Qgdm9pZCo+KHMpIDw8ICIgcG9pbnRpbmcgdG8gIjsKLSAgICBQcmludENoYXJzQXNTdHJpbmdU
byhzLCBzdGQ6Ondjc2xlbihzKSwgb3MpOwotICB9Ci19Ci0jZW5kaWYgIC8vIHdjaGFyX3QgaXMg
bmF0aXZlCi0KLS8vIFByaW50cyBhIDo6c3RyaW5nIG9iamVjdC4KLSNpZiBHVEVTVF9IQVNfR0xP
QkFMX1NUUklORwotdm9pZCBQcmludFN0cmluZ1RvKGNvbnN0IDo6c3RyaW5nJiBzLCBvc3RyZWFt
KiBvcykgewotICBQcmludENoYXJzQXNTdHJpbmdUbyhzLmRhdGEoKSwgcy5zaXplKCksIG9zKTsK
LX0KLSNlbmRpZiAgLy8gR1RFU1RfSEFTX0dMT0JBTF9TVFJJTkcKLQotdm9pZCBQcmludFN0cmlu
Z1RvKGNvbnN0IDo6c3RkOjpzdHJpbmcmIHMsIG9zdHJlYW0qIG9zKSB7Ci0gIFByaW50Q2hhcnNB
c1N0cmluZ1RvKHMuZGF0YSgpLCBzLnNpemUoKSwgb3MpOwotfQotCi0vLyBQcmludHMgYSA6Ondz
dHJpbmcgb2JqZWN0LgotI2lmIEdURVNUX0hBU19HTE9CQUxfV1NUUklORwotdm9pZCBQcmludFdp
ZGVTdHJpbmdUbyhjb25zdCA6OndzdHJpbmcmIHMsIG9zdHJlYW0qIG9zKSB7Ci0gIFByaW50Q2hh
cnNBc1N0cmluZ1RvKHMuZGF0YSgpLCBzLnNpemUoKSwgb3MpOwotfQotI2VuZGlmICAvLyBHVEVT
VF9IQVNfR0xPQkFMX1dTVFJJTkcKLQotI2lmIEdURVNUX0hBU19TVERfV1NUUklORwotdm9pZCBQ
cmludFdpZGVTdHJpbmdUbyhjb25zdCA6OnN0ZDo6d3N0cmluZyYgcywgb3N0cmVhbSogb3MpIHsK
LSAgUHJpbnRDaGFyc0FzU3RyaW5nVG8ocy5kYXRhKCksIHMuc2l6ZSgpLCBvcyk7Ci19Ci0jZW5k
aWYgIC8vIEdURVNUX0hBU19TVERfV1NUUklORwotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwK
LQotfSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3Qvc3JjL2d0ZXN0LXRlc3QtcGFydC5j
YyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3Qv
c3JjL2d0ZXN0LXRlc3QtcGFydC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIw
ZTM1NDI1ZTFlNmY3MTc5ZDAyYjkzOTQ1YmRlZTQzMWIyNWU0ZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci9mb2xseS9ndGVzdC9nb29nbGV0ZXN0L3NyYy9ndGVzdC10ZXN0LXBhcnQuY2MKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMDgsIEdvb2dsZSBJbmMuCi0v
LyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0v
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotLy8KLS8vIEF1dGhvcjogbWhldWxlQGdvb2dsZS5jb20gKE1hcmt1cyBIZXVs
ZSkKLS8vCi0vLyBUaGUgR29vZ2xlIEMrKyBUZXN0aW5nIEZyYW1ld29yayAoR29vZ2xlIFRlc3Qp
Ci0KLSNpbmNsdWRlICJndGVzdC9ndGVzdC10ZXN0LXBhcnQuaCIKLQotLy8gSW5kaWNhdGVzIHRo
YXQgdGhpcyB0cmFuc2xhdGlvbiB1bml0IGlzIHBhcnQgb2YgR29vZ2xlIFRlc3QncwotLy8gaW1w
bGVtZW50YXRpb24uICBJdCBtdXN0IGNvbWUgYmVmb3JlIGd0ZXN0LWludGVybmFsLWlubC5oIGlz
Ci0vLyBpbmNsdWRlZCwgb3IgdGhlcmUgd2lsbCBiZSBhIGNvbXBpbGVyIGVycm9yLiAgVGhpcyB0
cmljayBleGlzdHMgdG8KLS8vIHByZXZlbnQgdGhlIGFjY2lkZW50YWwgaW5jbHVzaW9uIG9mIGd0
ZXN0LWludGVybmFsLWlubC5oIGluIHRoZQotLy8gdXNlcidzIGNvZGUuCi0jZGVmaW5lIEdURVNU
X0lNUExFTUVOVEFUSU9OXyAxCi0jaW5jbHVkZSAic3JjL2d0ZXN0LWludGVybmFsLWlubC5oIgot
I3VuZGVmIEdURVNUX0lNUExFTUVOVEFUSU9OXwotCi1uYW1lc3BhY2UgdGVzdGluZyB7Ci0KLXVz
aW5nIGludGVybmFsOjpHZXRVbml0VGVzdEltcGw7Ci0KLS8vIEdldHMgdGhlIHN1bW1hcnkgb2Yg
dGhlIGZhaWx1cmUgbWVzc2FnZSBieSBvbWl0dGluZyB0aGUgc3RhY2sgdHJhY2UKLS8vIGluIGl0
Lgotc3RkOjpzdHJpbmcgVGVzdFBhcnRSZXN1bHQ6OkV4dHJhY3RTdW1tYXJ5KGNvbnN0IGNoYXIq
IG1lc3NhZ2UpIHsKLSAgY29uc3QgY2hhciogY29uc3Qgc3RhY2tfdHJhY2UgPSBzdHJzdHIobWVz
c2FnZSwgaW50ZXJuYWw6OmtTdGFja1RyYWNlTWFya2VyKTsKLSAgcmV0dXJuIHN0YWNrX3RyYWNl
ID09IE5VTEwgPyBtZXNzYWdlIDoKLSAgICAgIHN0ZDo6c3RyaW5nKG1lc3NhZ2UsIHN0YWNrX3Ry
YWNlKTsKLX0KLQotLy8gUHJpbnRzIGEgVGVzdFBhcnRSZXN1bHQgb2JqZWN0Lgotc3RkOjpvc3Ry
ZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IFRlc3RQYXJ0UmVzdWx0JiBy
ZXN1bHQpIHsKLSAgcmV0dXJuIG9zCi0gICAgICA8PCByZXN1bHQuZmlsZV9uYW1lKCkgPDwgIjoi
IDw8IHJlc3VsdC5saW5lX251bWJlcigpIDw8ICI6ICIKLSAgICAgIDw8IChyZXN1bHQudHlwZSgp
ID09IFRlc3RQYXJ0UmVzdWx0OjprU3VjY2VzcyA/ICJTdWNjZXNzIiA6Ci0gICAgICAgICAgcmVz
dWx0LnR5cGUoKSA9PSBUZXN0UGFydFJlc3VsdDo6a0ZhdGFsRmFpbHVyZSA/ICJGYXRhbCBmYWls
dXJlIiA6Ci0gICAgICAgICAgIk5vbi1mYXRhbCBmYWlsdXJlIikgPDwgIjpcbiIKLSAgICAgIDw8
IHJlc3VsdC5tZXNzYWdlKCkgPDwgc3RkOjplbmRsOwotfQotCi0vLyBBcHBlbmRzIGEgVGVzdFBh
cnRSZXN1bHQgdG8gdGhlIGFycmF5Lgotdm9pZCBUZXN0UGFydFJlc3VsdEFycmF5OjpBcHBlbmQo
Y29uc3QgVGVzdFBhcnRSZXN1bHQmIHJlc3VsdCkgewotICBhcnJheV8ucHVzaF9iYWNrKHJlc3Vs
dCk7Ci19Ci0KLS8vIFJldHVybnMgdGhlIFRlc3RQYXJ0UmVzdWx0IGF0IHRoZSBnaXZlbiBpbmRl
eCAoMC1iYXNlZCkuCi1jb25zdCBUZXN0UGFydFJlc3VsdCYgVGVzdFBhcnRSZXN1bHRBcnJheTo6
R2V0VGVzdFBhcnRSZXN1bHQoaW50IGluZGV4KSBjb25zdCB7Ci0gIGlmIChpbmRleCA8IDAgfHwg
aW5kZXggPj0gc2l6ZSgpKSB7Ci0gICAgcHJpbnRmKCJcbkludmFsaWQgaW5kZXggKCVkKSBpbnRv
IFRlc3RQYXJ0UmVzdWx0QXJyYXkuXG4iLCBpbmRleCk7Ci0gICAgaW50ZXJuYWw6OnBvc2l4OjpB
Ym9ydCgpOwotICB9Ci0KLSAgcmV0dXJuIGFycmF5X1tpbmRleF07Ci19Ci0KLS8vIFJldHVybnMg
dGhlIG51bWJlciBvZiBUZXN0UGFydFJlc3VsdCBvYmplY3RzIGluIHRoZSBhcnJheS4KLWludCBU
ZXN0UGFydFJlc3VsdEFycmF5OjpzaXplKCkgY29uc3QgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihhcnJheV8uc2l6ZSgpKTsKLX0KLQotbmFtZXNwYWNlIGludGVybmFsIHsKLQotSGFzTmV3
RmF0YWxGYWlsdXJlSGVscGVyOjpIYXNOZXdGYXRhbEZhaWx1cmVIZWxwZXIoKQotICAgIDogaGFz
X25ld19mYXRhbF9mYWlsdXJlXyhmYWxzZSksCi0gICAgICBvcmlnaW5hbF9yZXBvcnRlcl8oR2V0
VW5pdFRlc3RJbXBsKCktPgotICAgICAgICAgICAgICAgICAgICAgICAgIEdldFRlc3RQYXJ0UmVz
dWx0UmVwb3J0ZXJGb3JDdXJyZW50VGhyZWFkKCkpIHsKLSAgR2V0VW5pdFRlc3RJbXBsKCktPlNl
dFRlc3RQYXJ0UmVzdWx0UmVwb3J0ZXJGb3JDdXJyZW50VGhyZWFkKHRoaXMpOwotfQotCi1IYXNO
ZXdGYXRhbEZhaWx1cmVIZWxwZXI6On5IYXNOZXdGYXRhbEZhaWx1cmVIZWxwZXIoKSB7Ci0gIEdl
dFVuaXRUZXN0SW1wbCgpLT5TZXRUZXN0UGFydFJlc3VsdFJlcG9ydGVyRm9yQ3VycmVudFRocmVh
ZCgKLSAgICAgIG9yaWdpbmFsX3JlcG9ydGVyXyk7Ci19Ci0KLXZvaWQgSGFzTmV3RmF0YWxGYWls
dXJlSGVscGVyOjpSZXBvcnRUZXN0UGFydFJlc3VsdCgKLSAgICBjb25zdCBUZXN0UGFydFJlc3Vs
dCYgcmVzdWx0KSB7Ci0gIGlmIChyZXN1bHQuZmF0YWxseV9mYWlsZWQoKSkKLSAgICBoYXNfbmV3
X2ZhdGFsX2ZhaWx1cmVfID0gdHJ1ZTsKLSAgb3JpZ2luYWxfcmVwb3J0ZXJfLT5SZXBvcnRUZXN0
UGFydFJlc3VsdChyZXN1bHQpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotfSAg
Ly8gbmFtZXNwYWNlIHRlc3RpbmcKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3Qvc3JjL2d0ZXN0LmNjIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9zcmMvZ3Rlc3QuY2MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNTI1ZWQzMmVmMzIyYTYxNDhjZDlmMGZhODk1
MmMxNDk0MGVjMWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9z
cmMvZ3Rlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1MzQ4ICswLDAgQEAKLS8vIENvcHlyaWdo
dCAyMDA1LCBHb29nbGUgSW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLS8vCi0vLyBBdXRob3I6IHdhbkBnb29n
bGUuY29tIChaaGFueW9uZyBXYW4pCi0vLwotLy8gVGhlIEdvb2dsZSBDKysgVGVzdGluZyBGcmFt
ZXdvcmsgKEdvb2dsZSBUZXN0KQotCi0jaW5jbHVkZSAiZ3Rlc3QvZ3Rlc3QuaCIKLSNpbmNsdWRl
ICJndGVzdC9pbnRlcm5hbC9jdXN0b20vZ3Rlc3QuaCIKLSNpbmNsdWRlICJndGVzdC9ndGVzdC1z
cGkuaCIKLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUg
PHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5j
bHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPHdjaGFyLmg+Ci0jaW5jbHVkZSA8d2N0eXBlLmg+Ci0K
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8aW9tYW5pcD4KLSNpbmNsdWRlIDxsaW1p
dHM+Ci0jaW5jbHVkZSA8bGlzdD4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8b3N0cmVhbT4g
IC8vIE5PTElOVAotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaWYg
R1RFU1RfT1NfTElOVVgKLQotLy8gVE9ETyhrZW50b25AZ29vZ2xlLmNvbSk6IFVzZSBhdXRvY29u
ZiB0byBkZXRlY3QgYXZhaWxhYmlsaXR5IG9mCi0vLyBnZXR0aW1lb2ZkYXkoKS4KLSMgZGVmaW5l
IEdURVNUX0hBU19HRVRUSU1FT0ZEQVlfIDEKLQotIyBpbmNsdWRlIDxmY250bC5oPiAgLy8gTk9M
SU5UCi0jIGluY2x1ZGUgPGxpbWl0cy5oPiAgLy8gTk9MSU5UCi0jIGluY2x1ZGUgPHNjaGVkLmg+
ICAvLyBOT0xJTlQKLS8vIERlY2xhcmVzIHZzbnByaW50ZigpLiAgVGhpcyBoZWFkZXIgaXMgbm90
IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgotIyBpbmNsdWRlIDxzdHJpbmdzLmg+ICAvLyBOT0xJTlQK
LSMgaW5jbHVkZSA8c3lzL21tYW4uaD4gIC8vIE5PTElOVAotIyBpbmNsdWRlIDxzeXMvdGltZS5o
PiAgLy8gTk9MSU5UCi0jIGluY2x1ZGUgPHVuaXN0ZC5oPiAgLy8gTk9MSU5UCi0jIGluY2x1ZGUg
PHN0cmluZz4KLQotI2VsaWYgR1RFU1RfT1NfU1lNQklBTgotIyBkZWZpbmUgR1RFU1RfSEFTX0dF
VFRJTUVPRkRBWV8gMQotIyBpbmNsdWRlIDxzeXMvdGltZS5oPiAgLy8gTk9MSU5UCi0KLSNlbGlm
IEdURVNUX09TX1pPUwotIyBkZWZpbmUgR1RFU1RfSEFTX0dFVFRJTUVPRkRBWV8gMQotIyBpbmNs
dWRlIDxzeXMvdGltZS5oPiAgLy8gTk9MSU5UCi0KLS8vIE9uIHovT1Mgd2UgYWRkaXRpb25hbGx5
IG5lZWQgc3RyaW5ncy5oIGZvciBzdHJjYXNlY21wLgotIyBpbmNsdWRlIDxzdHJpbmdzLmg+ICAv
LyBOT0xJTlQKLQotI2VsaWYgR1RFU1RfT1NfV0lORE9XU19NT0JJTEUgIC8vIFdlIGFyZSBvbiBX
aW5kb3dzIENFLgotCi0jIGluY2x1ZGUgPHdpbmRvd3MuaD4gIC8vIE5PTElOVAotIyB1bmRlZiBt
aW4KLQotI2VsaWYgR1RFU1RfT1NfV0lORE9XUyAgLy8gV2UgYXJlIG9uIFdpbmRvd3MgcHJvcGVy
LgotCi0jIGluY2x1ZGUgPGlvLmg+ICAvLyBOT0xJTlQKLSMgaW5jbHVkZSA8c3lzL3RpbWViLmg+
ICAvLyBOT0xJTlQKLSMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAvLyBOT0xJTlQKLSMgaW5jbHVk
ZSA8c3lzL3N0YXQuaD4gIC8vIE5PTElOVAotCi0jIGlmIEdURVNUX09TX1dJTkRPV1NfTUlOR1cK
LS8vIE1pbkdXIGhhcyBnZXR0aW1lb2ZkYXkoKSBidXQgbm90IF9mdGltZTY0KCkuCi0vLyBUT0RP
KGtlbnRvbkBnb29nbGUuY29tKTogVXNlIGF1dG9jb25mIHRvIGRldGVjdCBhdmFpbGFiaWxpdHkg
b2YKLS8vICAgZ2V0dGltZW9mZGF5KCkuCi0vLyBUT0RPKGtlbnRvbkBnb29nbGUuY29tKTogVGhl
cmUgYXJlIG90aGVyIHdheXMgdG8gZ2V0IHRoZSB0aW1lIG9uCi0vLyAgIFdpbmRvd3MsIGxpa2Ug
R2V0VGlja0NvdW50KCkgb3IgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoKS4gIE1pbkdXCi0vLyAg
IHN1cHBvcnRzIHRoZXNlLiAgY29uc2lkZXIgdXNpbmcgdGhlbSBpbnN0ZWFkLgotIyAgZGVmaW5l
IEdURVNUX0hBU19HRVRUSU1FT0ZEQVlfIDEKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+ICAvLyBO
T0xJTlQKLSMgZW5kaWYgIC8vIEdURVNUX09TX1dJTkRPV1NfTUlOR1cKLQotLy8gY3BwbGludCB0
aGlua3MgdGhhdCB0aGUgaGVhZGVyIGlzIGFscmVhZHkgaW5jbHVkZWQsIHNvIHdlIHdhbnQgdG8K
LS8vIHNpbGVuY2UgaXQuCi0jIGluY2x1ZGUgPHdpbmRvd3MuaD4gIC8vIE5PTElOVAotIyB1bmRl
ZiBtaW4KLQotI2Vsc2UKLQotLy8gQXNzdW1lIG90aGVyIHBsYXRmb3JtcyBoYXZlIGdldHRpbWVv
ZmRheSgpLgotLy8gVE9ETyhrZW50b25AZ29vZ2xlLmNvbSk6IFVzZSBhdXRvY29uZiB0byBkZXRl
Y3QgYXZhaWxhYmlsaXR5IG9mCi0vLyAgIGdldHRpbWVvZmRheSgpLgotIyBkZWZpbmUgR1RFU1Rf
SEFTX0dFVFRJTUVPRkRBWV8gMQotCi0vLyBjcHBsaW50IHRoaW5rcyB0aGF0IHRoZSBoZWFkZXIg
aXMgYWxyZWFkeSBpbmNsdWRlZCwgc28gd2Ugd2FudCB0bwotLy8gc2lsZW5jZSBpdC4KLSMgaW5j
bHVkZSA8c3lzL3RpbWUuaD4gIC8vIE5PTElOVAotIyBpbmNsdWRlIDx1bmlzdGQuaD4gIC8vIE5P
TElOVAotCi0jZW5kaWYgIC8vIEdURVNUX09TX0xJTlVYCi0KLSNpZiBHVEVTVF9IQVNfRVhDRVBU
SU9OUwotIyBpbmNsdWRlIDxzdGRleGNlcHQ+Ci0jZW5kaWYKLQotI2lmIEdURVNUX0NBTl9TVFJF
QU1fUkVTVUxUU18KLSMgaW5jbHVkZSA8YXJwYS9pbmV0Lmg+ICAvLyBOT0xJTlQKLSMgaW5jbHVk
ZSA8bmV0ZGIuaD4gIC8vIE5PTElOVAotIyBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+ICAvLyBOT0xJ
TlQKLSMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAvLyBOT0xJTlQKLSNlbmRpZgotCi0vLyBJbmRp
Y2F0ZXMgdGhhdCB0aGlzIHRyYW5zbGF0aW9uIHVuaXQgaXMgcGFydCBvZiBHb29nbGUgVGVzdCdz
Ci0vLyBpbXBsZW1lbnRhdGlvbi4gIEl0IG11c3QgY29tZSBiZWZvcmUgZ3Rlc3QtaW50ZXJuYWwt
aW5sLmggaXMKLS8vIGluY2x1ZGVkLCBvciB0aGVyZSB3aWxsIGJlIGEgY29tcGlsZXIgZXJyb3Iu
ICBUaGlzIHRyaWNrIGlzIHRvCi0vLyBwcmV2ZW50IGEgdXNlciBmcm9tIGFjY2lkZW50YWxseSBp
bmNsdWRpbmcgZ3Rlc3QtaW50ZXJuYWwtaW5sLmggaW4KLS8vIGhpcyBjb2RlLgotI2RlZmluZSBH
VEVTVF9JTVBMRU1FTlRBVElPTl8gMQotI2luY2x1ZGUgInNyYy9ndGVzdC1pbnRlcm5hbC1pbmwu
aCIKLSN1bmRlZiBHVEVTVF9JTVBMRU1FTlRBVElPTl8KLQotI2lmIEdURVNUX09TX1dJTkRPV1MK
LSMgZGVmaW5lIHZzbnByaW50ZiBfdnNucHJpbnRmCi0jZW5kaWYgIC8vIEdURVNUX09TX1dJTkRP
V1MKLQotbmFtZXNwYWNlIHRlc3RpbmcgewotCi11c2luZyBpbnRlcm5hbDo6Q291bnRJZjsKLXVz
aW5nIGludGVybmFsOjpGb3JFYWNoOwotdXNpbmcgaW50ZXJuYWw6OkdldEVsZW1lbnRPcjsKLXVz
aW5nIGludGVybmFsOjpTaHVmZmxlOwotCi0vLyBDb25zdGFudHMuCi0KLS8vIEEgdGVzdCB3aG9z
ZSB0ZXN0IGNhc2UgbmFtZSBvciB0ZXN0IG5hbWUgbWF0Y2hlcyB0aGlzIGZpbHRlciBpcwotLy8g
ZGlzYWJsZWQgYW5kIG5vdCBydW4uCi1zdGF0aWMgY29uc3QgY2hhciBrRGlzYWJsZVRlc3RGaWx0
ZXJbXSA9ICJESVNBQkxFRF8qOiovRElTQUJMRURfKiI7Ci0KLS8vIEEgdGVzdCBjYXNlIHdob3Nl
IG5hbWUgbWF0Y2hlcyB0aGlzIGZpbHRlciBpcyBjb25zaWRlcmVkIGEgZGVhdGgKLS8vIHRlc3Qg
Y2FzZSBhbmQgd2lsbCBiZSBydW4gYmVmb3JlIHRlc3QgY2FzZXMgd2hvc2UgbmFtZSBkb2Vzbid0
Ci0vLyBtYXRjaCB0aGlzIGZpbHRlci4KLXN0YXRpYyBjb25zdCBjaGFyIGtEZWF0aFRlc3RDYXNl
RmlsdGVyW10gPSAiKkRlYXRoVGVzdDoqRGVhdGhUZXN0LyoiOwotCi0vLyBBIHRlc3QgZmlsdGVy
IHRoYXQgbWF0Y2hlcyBldmVyeXRoaW5nLgotc3RhdGljIGNvbnN0IGNoYXIga1VuaXZlcnNhbEZp
bHRlcltdID0gIioiOwotCi0vLyBUaGUgZGVmYXVsdCBvdXRwdXQgZmlsZSBmb3IgWE1MIG91dHB1
dC4KLXN0YXRpYyBjb25zdCBjaGFyIGtEZWZhdWx0T3V0cHV0RmlsZVtdID0gInRlc3RfZGV0YWls
LnhtbCI7Ci0KLS8vIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lIGZvciB0aGUgdGVzdCBz
aGFyZCBpbmRleC4KLXN0YXRpYyBjb25zdCBjaGFyIGtUZXN0U2hhcmRJbmRleFtdID0gIkdURVNU
X1NIQVJEX0lOREVYIjsKLS8vIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lIGZvciB0aGUg
dG90YWwgbnVtYmVyIG9mIHRlc3Qgc2hhcmRzLgotc3RhdGljIGNvbnN0IGNoYXIga1Rlc3RUb3Rh
bFNoYXJkc1tdID0gIkdURVNUX1RPVEFMX1NIQVJEUyI7Ci0vLyBUaGUgZW52aXJvbm1lbnQgdmFy
aWFibGUgbmFtZSBmb3IgdGhlIHRlc3Qgc2hhcmQgc3RhdHVzIGZpbGUuCi1zdGF0aWMgY29uc3Qg
Y2hhciBrVGVzdFNoYXJkU3RhdHVzRmlsZVtdID0gIkdURVNUX1NIQVJEX1NUQVRVU19GSUxFIjsK
LQotbmFtZXNwYWNlIGludGVybmFsIHsKLQotLy8gVGhlIHRleHQgdXNlZCBpbiBmYWlsdXJlIG1l
c3NhZ2VzIHRvIGluZGljYXRlIHRoZSBzdGFydCBvZiB0aGUKLS8vIHN0YWNrIHRyYWNlLgotY29u
c3QgY2hhciBrU3RhY2tUcmFjZU1hcmtlcltdID0gIlxuU3RhY2sgdHJhY2U6XG4iOwotCi0vLyBn
X2hlbHBfZmxhZyBpcyB0cnVlIGlmZiB0aGUgLS1oZWxwIGZsYWcgb3IgYW4gZXF1aXZhbGVudCBm
b3JtIGlzCi0vLyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KLWJvb2wgZ19oZWxwX2Zs
YWcgPSBmYWxzZTsKLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi0KLXN0YXRpYyBjb25zdCBj
aGFyKiBHZXREZWZhdWx0RmlsdGVyKCkgewotI2lmZGVmIEdURVNUX1RFU1RfRklMVEVSX0VOVl9W
QVJfCi0gIGNvbnN0IGNoYXIqIGNvbnN0IHRlc3RicmlkZ2VfdGVzdF9vbmx5ID0gZ2V0ZW52KEdU
RVNUX1RFU1RfRklMVEVSX0VOVl9WQVJfKTsKLSAgaWYgKHRlc3RicmlkZ2VfdGVzdF9vbmx5ICE9
IE5VTEwpIHsKLSAgICByZXR1cm4gdGVzdGJyaWRnZV90ZXN0X29ubHk7Ci0gIH0KLSNlbmRpZiAg
Ly8gR1RFU1RfVEVTVF9GSUxURVJfRU5WX1ZBUl8KLSAgcmV0dXJuIGtVbml2ZXJzYWxGaWx0ZXI7
Ci19Ci0KLUdURVNUX0RFRklORV9ib29sXygKLSAgICBhbHNvX3J1bl9kaXNhYmxlZF90ZXN0cywK
LSAgICBpbnRlcm5hbDo6Qm9vbEZyb21HVGVzdEVudigiYWxzb19ydW5fZGlzYWJsZWRfdGVzdHMi
LCBmYWxzZSksCi0gICAgIlJ1biBkaXNhYmxlZCB0ZXN0cyB0b28sIGluIGFkZGl0aW9uIHRvIHRo
ZSB0ZXN0cyBub3JtYWxseSBiZWluZyBydW4uIik7Ci0KLUdURVNUX0RFRklORV9ib29sXygKLSAg
ICBicmVha19vbl9mYWlsdXJlLAotICAgIGludGVybmFsOjpCb29sRnJvbUdUZXN0RW52KCJicmVh
a19vbl9mYWlsdXJlIiwgZmFsc2UpLAotICAgICJUcnVlIGlmZiBhIGZhaWxlZCBhc3NlcnRpb24g
c2hvdWxkIGJlIGEgZGVidWdnZXIgYnJlYWstcG9pbnQuIik7Ci0KLUdURVNUX0RFRklORV9ib29s
XygKLSAgICBjYXRjaF9leGNlcHRpb25zLAotICAgIGludGVybmFsOjpCb29sRnJvbUdUZXN0RW52
KCJjYXRjaF9leGNlcHRpb25zIiwgdHJ1ZSksCi0gICAgIlRydWUgaWZmICIgR1RFU1RfTkFNRV8K
LSAgICAiIHNob3VsZCBjYXRjaCBleGNlcHRpb25zIGFuZCB0cmVhdCB0aGVtIGFzIHRlc3QgZmFp
bHVyZXMuIik7Ci0KLUdURVNUX0RFRklORV9zdHJpbmdfKAotICAgIGNvbG9yLAotICAgIGludGVy
bmFsOjpTdHJpbmdGcm9tR1Rlc3RFbnYoImNvbG9yIiwgImF1dG8iKSwKLSAgICAiV2hldGhlciB0
byB1c2UgY29sb3JzIGluIHRoZSBvdXRwdXQuICBWYWxpZCB2YWx1ZXM6IHllcywgbm8sICIKLSAg
ICAiYW5kIGF1dG8uICAnYXV0bycgbWVhbnMgdG8gdXNlIGNvbG9ycyBpZiB0aGUgb3V0cHV0IGlz
ICIKLSAgICAiYmVpbmcgc2VudCB0byBhIHRlcm1pbmFsIGFuZCB0aGUgVEVSTSBlbnZpcm9ubWVu
dCB2YXJpYWJsZSAiCi0gICAgImlzIHNldCB0byBhIHRlcm1pbmFsIHR5cGUgdGhhdCBzdXBwb3J0
cyBjb2xvcnMuIik7Ci0KLUdURVNUX0RFRklORV9zdHJpbmdfKAotICAgIGZpbHRlciwKLSAgICBp
bnRlcm5hbDo6U3RyaW5nRnJvbUdUZXN0RW52KCJmaWx0ZXIiLCBHZXREZWZhdWx0RmlsdGVyKCkp
LAotICAgICJBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGdsb2IgKG5vdCByZWdleCkgcGF0dGVy
bnMgIgotICAgICJmb3IgZmlsdGVyaW5nIHRoZSB0ZXN0cyB0byBydW4sIG9wdGlvbmFsbHkgZm9s
bG93ZWQgYnkgYSAiCi0gICAgIictJyBhbmQgYSA6IHNlcGFyYXRlZCBsaXN0IG9mIG5lZ2F0aXZl
IHBhdHRlcm5zICh0ZXN0cyB0byAiCi0gICAgImV4Y2x1ZGUpLiAgQSB0ZXN0IGlzIHJ1biBpZiBp
dCBtYXRjaGVzIG9uZSBvZiB0aGUgcG9zaXRpdmUgIgotICAgICJwYXR0ZXJucyBhbmQgZG9lcyBu
b3QgbWF0Y2ggYW55IG9mIHRoZSBuZWdhdGl2ZSBwYXR0ZXJucy4iKTsKLQotR1RFU1RfREVGSU5F
X2Jvb2xfKGxpc3RfdGVzdHMsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICJMaXN0IGFsbCB0
ZXN0cyB3aXRob3V0IHJ1bm5pbmcgdGhlbS4iKTsKLQotR1RFU1RfREVGSU5FX3N0cmluZ18oCi0g
ICAgb3V0cHV0LAotICAgIGludGVybmFsOjpTdHJpbmdGcm9tR1Rlc3RFbnYoIm91dHB1dCIsICIi
KSwKLSAgICAiQSBmb3JtYXQgKGN1cnJlbnRseSBtdXN0IGJlIFwieG1sXCIpLCBvcHRpb25hbGx5
IGZvbGxvd2VkICIKLSAgICAiYnkgYSBjb2xvbiBhbmQgYW4gb3V0cHV0IGZpbGUgbmFtZSBvciBk
aXJlY3RvcnkuIEEgZGlyZWN0b3J5ICIKLSAgICAiaXMgaW5kaWNhdGVkIGJ5IGEgdHJhaWxpbmcg
cGF0aG5hbWUgc2VwYXJhdG9yLiAiCi0gICAgIkV4YW1wbGVzOiBcInhtbDpmaWxlbmFtZS54bWxc
IiwgXCJ4bWw6OmRpcmVjdG9yeW5hbWUvXCIuICIKLSAgICAiSWYgYSBkaXJlY3RvcnkgaXMgc3Bl
Y2lmaWVkLCBvdXRwdXQgZmlsZXMgd2lsbCBiZSBjcmVhdGVkICIKLSAgICAid2l0aGluIHRoYXQg
ZGlyZWN0b3J5LCB3aXRoIGZpbGUtbmFtZXMgYmFzZWQgb24gdGhlIHRlc3QgIgotICAgICJleGVj
dXRhYmxlJ3MgbmFtZSBhbmQsIGlmIG5lY2Vzc2FyeSwgbWFkZSB1bmlxdWUgYnkgYWRkaW5nICIK
LSAgICAiZGlnaXRzLiIpOwotCi1HVEVTVF9ERUZJTkVfYm9vbF8oCi0gICAgcHJpbnRfdGltZSwK
LSAgICBpbnRlcm5hbDo6Qm9vbEZyb21HVGVzdEVudigicHJpbnRfdGltZSIsIHRydWUpLAotICAg
ICJUcnVlIGlmZiAiIEdURVNUX05BTUVfCi0gICAgIiBzaG91bGQgZGlzcGxheSBlbGFwc2VkIHRp
bWUgaW4gdGV4dCBvdXRwdXQuIik7Ci0KLUdURVNUX0RFRklORV9pbnQzMl8oCi0gICAgcmFuZG9t
X3NlZWQsCi0gICAgaW50ZXJuYWw6OkludDMyRnJvbUdUZXN0RW52KCJyYW5kb21fc2VlZCIsIDAp
LAotICAgICJSYW5kb20gbnVtYmVyIHNlZWQgdG8gdXNlIHdoZW4gc2h1ZmZsaW5nIHRlc3Qgb3Jk
ZXJzLiAgTXVzdCBiZSBpbiByYW5nZSAiCi0gICAgIlsxLCA5OTk5OV0sIG9yIDAgdG8gdXNlIGEg
c2VlZCBiYXNlZCBvbiB0aGUgY3VycmVudCB0aW1lLiIpOwotCi1HVEVTVF9ERUZJTkVfaW50MzJf
KAotICAgIHJlcGVhdCwKLSAgICBpbnRlcm5hbDo6SW50MzJGcm9tR1Rlc3RFbnYoInJlcGVhdCIs
IDEpLAotICAgICJIb3cgbWFueSB0aW1lcyB0byByZXBlYXQgZWFjaCB0ZXN0LiAgU3BlY2lmeSBh
IG5lZ2F0aXZlIG51bWJlciAiCi0gICAgImZvciByZXBlYXRpbmcgZm9yZXZlci4gIFVzZWZ1bCBm
b3Igc2hha2luZyBvdXQgZmxha3kgdGVzdHMuIik7Ci0KLUdURVNUX0RFRklORV9ib29sXygKLSAg
ICBzaG93X2ludGVybmFsX3N0YWNrX2ZyYW1lcywgZmFsc2UsCi0gICAgIlRydWUgaWZmICIgR1RF
U1RfTkFNRV8gIiBzaG91bGQgaW5jbHVkZSBpbnRlcm5hbCBzdGFjayBmcmFtZXMgd2hlbiAiCi0g
ICAgInByaW50aW5nIHRlc3QgZmFpbHVyZSBzdGFjayB0cmFjZXMuIik7Ci0KLUdURVNUX0RFRklO
RV9ib29sXygKLSAgICBzaHVmZmxlLAotICAgIGludGVybmFsOjpCb29sRnJvbUdUZXN0RW52KCJz
aHVmZmxlIiwgZmFsc2UpLAotICAgICJUcnVlIGlmZiAiIEdURVNUX05BTUVfCi0gICAgIiBzaG91
bGQgcmFuZG9taXplIHRlc3RzJyBvcmRlciBvbiBldmVyeSBydW4uIik7Ci0KLUdURVNUX0RFRklO
RV9pbnQzMl8oCi0gICAgc3RhY2tfdHJhY2VfZGVwdGgsCi0gICAgaW50ZXJuYWw6OkludDMyRnJv
bUdUZXN0RW52KCJzdGFja190cmFjZV9kZXB0aCIsIGtNYXhTdGFja1RyYWNlRGVwdGgpLAotICAg
ICJUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3RhY2sgZnJhbWVzIHRvIHByaW50IHdoZW4gYW4gIgot
ICAgICJhc3NlcnRpb24gZmFpbHMuICBUaGUgdmFsaWQgcmFuZ2UgaXMgMCB0aHJvdWdoIDEwMCwg
aW5jbHVzaXZlLiIpOwotCi1HVEVTVF9ERUZJTkVfc3RyaW5nXygKLSAgICBzdHJlYW1fcmVzdWx0
X3RvLAotICAgIGludGVybmFsOjpTdHJpbmdGcm9tR1Rlc3RFbnYoInN0cmVhbV9yZXN1bHRfdG8i
LCAiIiksCi0gICAgIlRoaXMgZmxhZyBzcGVjaWZpZXMgdGhlIGhvc3QgbmFtZSBhbmQgdGhlIHBv
cnQgbnVtYmVyIG9uIHdoaWNoIHRvIHN0cmVhbSAiCi0gICAgInRlc3QgcmVzdWx0cy4gRXhhbXBs
ZTogXCJsb2NhbGhvc3Q6NTU1XCIuIFRoZSBmbGFnIGlzIGVmZmVjdGl2ZSBvbmx5IG9uICIKLSAg
ICAiTGludXguIik7Ci0KLUdURVNUX0RFRklORV9ib29sXygKLSAgICB0aHJvd19vbl9mYWlsdXJl
LAotICAgIGludGVybmFsOjpCb29sRnJvbUdUZXN0RW52KCJ0aHJvd19vbl9mYWlsdXJlIiwgZmFs
c2UpLAotICAgICJXaGVuIHRoaXMgZmxhZyBpcyBzcGVjaWZpZWQsIGEgZmFpbGVkIGFzc2VydGlv
biB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiAiCi0gICAgImlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJs
ZWQgb3IgZXhpdCB0aGUgcHJvZ3JhbSB3aXRoIGEgbm9uLXplcm8gY29kZSAiCi0gICAgIm90aGVy
d2lzZS4iKTsKLQotI2lmIEdURVNUX1VTRV9PV05fRkxBR0ZJTEVfRkxBR18KLUdURVNUX0RFRklO
RV9zdHJpbmdfKAotICAgIGZsYWdmaWxlLAotICAgIGludGVybmFsOjpTdHJpbmdGcm9tR1Rlc3RF
bnYoImZsYWdmaWxlIiwgIiIpLAotICAgICJUaGlzIGZsYWcgc3BlY2lmaWVzIHRoZSBmbGFnZmls
ZSB0byByZWFkIGNvbW1hbmQtbGluZSBmbGFncyBmcm9tLiIpOwotI2VuZGlmICAvLyBHVEVTVF9V
U0VfT1dOX0ZMQUdGSUxFX0ZMQUdfCi0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLS8vIEdlbmVy
YXRlcyBhIHJhbmRvbSBudW1iZXIgZnJvbSBbMCwgcmFuZ2UpLCB1c2luZyBhIExpbmVhcgotLy8g
Q29uZ3J1ZW50aWFsIEdlbmVyYXRvciAoTENHKS4gIENyYXNoZXMgaWYgJ3JhbmdlJyBpcyAwIG9y
IGdyZWF0ZXIKLS8vIHRoYW4ga01heFJhbmdlLgotVUludDMyIFJhbmRvbTo6R2VuZXJhdGUoVUlu
dDMyIHJhbmdlKSB7Ci0gIC8vIFRoZXNlIGNvbnN0YW50cyBhcmUgdGhlIHNhbWUgYXMgYXJlIHVz
ZWQgaW4gZ2xpYmMncyByYW5kKDMpLgotICBzdGF0ZV8gPSAoMTEwMzUxNTI0NVUqc3RhdGVfICsg
MTIzNDVVKSAlIGtNYXhSYW5nZTsKLQotICBHVEVTVF9DSEVDS18ocmFuZ2UgPiAwKQotICAgICAg
PDwgIkNhbm5vdCBnZW5lcmF0ZSBhIG51bWJlciBpbiB0aGUgcmFuZ2UgWzAsIDApLiI7Ci0gIEdU
RVNUX0NIRUNLXyhyYW5nZSA8PSBrTWF4UmFuZ2UpCi0gICAgICA8PCAiR2VuZXJhdGlvbiBvZiBh
IG51bWJlciBpbiBbMCwgIiA8PCByYW5nZSA8PCAiKSB3YXMgcmVxdWVzdGVkLCAiCi0gICAgICA8
PCAiYnV0IHRoaXMgY2FuIG9ubHkgZ2VuZXJhdGUgbnVtYmVycyBpbiBbMCwgIiA8PCBrTWF4UmFu
Z2UgPDwgIikuIjsKLQotICAvLyBDb252ZXJ0aW5nIHZpYSBtb2R1bHVzIGludHJvZHVjZXMgYSBi
aXQgb2YgZG93bndhcmQgYmlhcywgYnV0Ci0gIC8vIGl0J3Mgc2ltcGxlLCBhbmQgYSBsaW5lYXIg
Y29uZ3J1ZW50aWFsIGdlbmVyYXRvciBpc24ndCB0b28gZ29vZAotICAvLyB0byBiZWdpbiB3aXRo
LgotICByZXR1cm4gc3RhdGVfICUgcmFuZ2U7Ci19Ci0KLS8vIEdUZXN0SXNJbml0aWFsaXplZCgp
IHJldHVybnMgdHJ1ZSBpZmYgdGhlIHVzZXIgaGFzIGluaXRpYWxpemVkCi0vLyBHb29nbGUgVGVz
dC4gIFVzZWZ1bCBmb3IgY2F0Y2hpbmcgdGhlIHVzZXIgbWlzdGFrZSBvZiBub3QgaW5pdGlhbGl6
aW5nCi0vLyBHb29nbGUgVGVzdCBiZWZvcmUgY2FsbGluZyBSVU5fQUxMX1RFU1RTKCkuCi1zdGF0
aWMgYm9vbCBHVGVzdElzSW5pdGlhbGl6ZWQoKSB7IHJldHVybiBHZXRBcmd2cygpLnNpemUoKSA+
IDA7IH0KLQotLy8gSXRlcmF0ZXMgb3ZlciBhIHZlY3RvciBvZiBUZXN0Q2FzZXMsIGtlZXBpbmcg
YSBydW5uaW5nIHN1bSBvZiB0aGUKLS8vIHJlc3VsdHMgb2YgY2FsbGluZyBhIGdpdmVuIGludC1y
ZXR1cm5pbmcgbWV0aG9kIG9uIGVhY2guCi0vLyBSZXR1cm5zIHRoZSBzdW0uCi1zdGF0aWMgaW50
IFN1bU92ZXJUZXN0Q2FzZUxpc3QoY29uc3Qgc3RkOjp2ZWN0b3I8VGVzdENhc2UqPiYgY2FzZV9s
aXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoVGVzdENhc2U6OiptZXRo
b2QpKCkgY29uc3QpIHsKLSAgaW50IHN1bSA9IDA7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y2FzZV9saXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgc3VtICs9IChjYXNlX2xpc3RbaV0tPiptZXRo
b2QpKCk7Ci0gIH0KLSAgcmV0dXJuIHN1bTsKLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUg
dGVzdCBjYXNlIHBhc3NlZC4KLXN0YXRpYyBib29sIFRlc3RDYXNlUGFzc2VkKGNvbnN0IFRlc3RD
YXNlKiB0ZXN0X2Nhc2UpIHsKLSAgcmV0dXJuIHRlc3RfY2FzZS0+c2hvdWxkX3J1bigpICYmIHRl
c3RfY2FzZS0+UGFzc2VkKCk7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHRlc3QgY2Fz
ZSBmYWlsZWQuCi1zdGF0aWMgYm9vbCBUZXN0Q2FzZUZhaWxlZChjb25zdCBUZXN0Q2FzZSogdGVz
dF9jYXNlKSB7Ci0gIHJldHVybiB0ZXN0X2Nhc2UtPnNob3VsZF9ydW4oKSAmJiB0ZXN0X2Nhc2Ut
PkZhaWxlZCgpOwotfQotCi0vLyBSZXR1cm5zIHRydWUgaWZmIHRlc3RfY2FzZSBjb250YWlucyBh
dCBsZWFzdCBvbmUgdGVzdCB0aGF0IHNob3VsZAotLy8gcnVuLgotc3RhdGljIGJvb2wgU2hvdWxk
UnVuVGVzdENhc2UoY29uc3QgVGVzdENhc2UqIHRlc3RfY2FzZSkgewotICByZXR1cm4gdGVzdF9j
YXNlLT5zaG91bGRfcnVuKCk7Ci19Ci0KLS8vIEFzc2VydEhlbHBlciBjb25zdHJ1Y3Rvci4KLUFz
c2VydEhlbHBlcjo6QXNzZXJ0SGVscGVyKFRlc3RQYXJ0UmVzdWx0OjpUeXBlIHR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBtZXNzYWdlKQotICAgIDogZGF0YV8obmV3IEFzc2VydEhlbHBlckRhdGEodHlwZSwgZmls
ZSwgbGluZSwgbWVzc2FnZSkpIHsKLX0KLQotQXNzZXJ0SGVscGVyOjp+QXNzZXJ0SGVscGVyKCkg
ewotICBkZWxldGUgZGF0YV87Ci19Ci0KLS8vIE1lc3NhZ2UgYXNzaWdubWVudCwgZm9yIGFzc2Vy
dGlvbiBzdHJlYW1pbmcgc3VwcG9ydC4KLXZvaWQgQXNzZXJ0SGVscGVyOjpvcGVyYXRvcj0oY29u
c3QgTWVzc2FnZSYgbWVzc2FnZSkgY29uc3QgewotICBVbml0VGVzdDo6R2V0SW5zdGFuY2UoKS0+
Ci0gICAgQWRkVGVzdFBhcnRSZXN1bHQoZGF0YV8tPnR5cGUsIGRhdGFfLT5maWxlLCBkYXRhXy0+
bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICBBcHBlbmRVc2VyTWVzc2FnZShkYXRhXy0+bWVz
c2FnZSwgbWVzc2FnZSksCi0gICAgICAgICAgICAgICAgICAgICAgVW5pdFRlc3Q6OkdldEluc3Rh
bmNlKCktPmltcGwoKQotICAgICAgICAgICAgICAgICAgICAgIC0+Q3VycmVudE9zU3RhY2tUcmFj
ZUV4Y2VwdFRvcCgxKQotICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXBzIHRoZSBzdGFjayBm
cmFtZSBmb3IgdGhpcyBmdW5jdGlvbiBpdHNlbGYuCi0gICAgICAgICAgICAgICAgICAgICAgKTsg
IC8vIE5PTElOVAotfQotCi0vLyBNdXRleCBmb3IgbGlua2VkIHBvaW50ZXJzLgotR1RFU1RfQVBJ
XyBHVEVTVF9ERUZJTkVfU1RBVElDX01VVEVYXyhnX2xpbmtlZF9wdHJfbXV0ZXgpOwotCi0vLyBB
IGNvcHkgb2YgYWxsIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuICBTZXQgYnkgSW5pdEdvb2dsZVRl
c3QoKS4KLTo6c3RkOjp2ZWN0b3I8dGVzdGluZzo6aW50ZXJuYWw6OnN0cmluZz4gZ19hcmd2czsK
LQotY29uc3QgOjpzdGQ6OnZlY3Rvcjx0ZXN0aW5nOjppbnRlcm5hbDo6c3RyaW5nPiYgR2V0QXJn
dnMoKSB7Ci0jaWYgZGVmaW5lZChHVEVTVF9DVVNUT01fR0VUX0FSR1ZTXykKLSAgcmV0dXJuIEdU
RVNUX0NVU1RPTV9HRVRfQVJHVlNfKCk7Ci0jZWxzZSAgLy8gZGVmaW5lZChHVEVTVF9DVVNUT01f
R0VUX0FSR1ZTXykKLSAgcmV0dXJuIGdfYXJndnM7Ci0jZW5kaWYgIC8vIGRlZmluZWQoR1RFU1Rf
Q1VTVE9NX0dFVF9BUkdWU18pCi19Ci0KLS8vIFJldHVybnMgdGhlIGN1cnJlbnQgYXBwbGljYXRp
b24ncyBuYW1lLCByZW1vdmluZyBkaXJlY3RvcnkgcGF0aCBpZiB0aGF0Ci0vLyBpcyBwcmVzZW50
LgotRmlsZVBhdGggR2V0Q3VycmVudEV4ZWN1dGFibGVOYW1lKCkgewotICBGaWxlUGF0aCByZXN1
bHQ7Ci0KLSNpZiBHVEVTVF9PU19XSU5ET1dTCi0gIHJlc3VsdC5TZXQoRmlsZVBhdGgoR2V0QXJn
dnMoKVswXSkuUmVtb3ZlRXh0ZW5zaW9uKCJleGUiKSk7Ci0jZWxzZQotICByZXN1bHQuU2V0KEZp
bGVQYXRoKEdldEFyZ3ZzKClbMF0pKTsKLSNlbmRpZiAgLy8gR1RFU1RfT1NfV0lORE9XUwotCi0g
IHJldHVybiByZXN1bHQuUmVtb3ZlRGlyZWN0b3J5TmFtZSgpOwotfQotCi0vLyBGdW5jdGlvbnMg
Zm9yIHByb2Nlc3NpbmcgdGhlIGd0ZXN0X291dHB1dCBmbGFnLgotCi0vLyBSZXR1cm5zIHRoZSBv
dXRwdXQgZm9ybWF0LCBvciAiIiBmb3Igbm9ybWFsIHByaW50ZWQgb3V0cHV0Lgotc3RkOjpzdHJp
bmcgVW5pdFRlc3RPcHRpb25zOjpHZXRPdXRwdXRGb3JtYXQoKSB7Ci0gIGNvbnN0IGNoYXIqIGNv
bnN0IGd0ZXN0X291dHB1dF9mbGFnID0gR1RFU1RfRkxBRyhvdXRwdXQpLmNfc3RyKCk7Ci0gIGlm
IChndGVzdF9vdXRwdXRfZmxhZyA9PSBOVUxMKSByZXR1cm4gc3RkOjpzdHJpbmcoIiIpOwotCi0g
IGNvbnN0IGNoYXIqIGNvbnN0IGNvbG9uID0gc3RyY2hyKGd0ZXN0X291dHB1dF9mbGFnLCAnOicp
OwotICByZXR1cm4gKGNvbG9uID09IE5VTEwpID8KLSAgICAgIHN0ZDo6c3RyaW5nKGd0ZXN0X291
dHB1dF9mbGFnKSA6Ci0gICAgICBzdGQ6OnN0cmluZyhndGVzdF9vdXRwdXRfZmxhZywgY29sb24g
LSBndGVzdF9vdXRwdXRfZmxhZyk7Ci19Ci0KLS8vIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHJl
cXVlc3RlZCBvdXRwdXQgZmlsZSwgb3IgdGhlIGRlZmF1bHQgaWYgbm9uZQotLy8gd2FzIGV4cGxp
Y2l0bHkgc3BlY2lmaWVkLgotc3RkOjpzdHJpbmcgVW5pdFRlc3RPcHRpb25zOjpHZXRBYnNvbHV0
ZVBhdGhUb091dHB1dEZpbGUoKSB7Ci0gIGNvbnN0IGNoYXIqIGNvbnN0IGd0ZXN0X291dHB1dF9m
bGFnID0gR1RFU1RfRkxBRyhvdXRwdXQpLmNfc3RyKCk7Ci0gIGlmIChndGVzdF9vdXRwdXRfZmxh
ZyA9PSBOVUxMKQotICAgIHJldHVybiAiIjsKLQotICBjb25zdCBjaGFyKiBjb25zdCBjb2xvbiA9
IHN0cmNocihndGVzdF9vdXRwdXRfZmxhZywgJzonKTsKLSAgaWYgKGNvbG9uID09IE5VTEwpCi0g
ICAgcmV0dXJuIGludGVybmFsOjpGaWxlUGF0aDo6Q29uY2F0UGF0aHMoCi0gICAgICAgIGludGVy
bmFsOjpGaWxlUGF0aCgKLSAgICAgICAgICAgIFVuaXRUZXN0OjpHZXRJbnN0YW5jZSgpLT5vcmln
aW5hbF93b3JraW5nX2RpcigpKSwKLSAgICAgICAgaW50ZXJuYWw6OkZpbGVQYXRoKGtEZWZhdWx0
T3V0cHV0RmlsZSkpLnN0cmluZygpOwotCi0gIGludGVybmFsOjpGaWxlUGF0aCBvdXRwdXRfbmFt
ZShjb2xvbiArIDEpOwotICBpZiAoIW91dHB1dF9uYW1lLklzQWJzb2x1dGVQYXRoKCkpCi0gICAg
Ly8gVE9ETyh3YW5AZ29vZ2xlLmNvbSk6IG9uIFdpbmRvd3MgXHNvbWVccGF0aCBpcyBub3QgYW4g
YWJzb2x1dGUKLSAgICAvLyBwYXRoIChhcyBpdHMgbWVhbmluZyBkZXBlbmRzIG9uIHRoZSBjdXJy
ZW50IGRyaXZlKSwgeWV0IHRoZQotICAgIC8vIGZvbGxvd2luZyBsb2dpYyBmb3IgdHVybmluZyBp
dCBpbnRvIGFuIGFic29sdXRlIHBhdGggaXMgd3JvbmcuCi0gICAgLy8gRml4IGl0LgotICAgIG91
dHB1dF9uYW1lID0gaW50ZXJuYWw6OkZpbGVQYXRoOjpDb25jYXRQYXRocygKLSAgICAgICAgaW50
ZXJuYWw6OkZpbGVQYXRoKFVuaXRUZXN0OjpHZXRJbnN0YW5jZSgpLT5vcmlnaW5hbF93b3JraW5n
X2RpcigpKSwKLSAgICAgICAgaW50ZXJuYWw6OkZpbGVQYXRoKGNvbG9uICsgMSkpOwotCi0gIGlm
ICghb3V0cHV0X25hbWUuSXNEaXJlY3RvcnkoKSkKLSAgICByZXR1cm4gb3V0cHV0X25hbWUuc3Ry
aW5nKCk7Ci0KLSAgaW50ZXJuYWw6OkZpbGVQYXRoIHJlc3VsdChpbnRlcm5hbDo6RmlsZVBhdGg6
OkdlbmVyYXRlVW5pcXVlRmlsZU5hbWUoCi0gICAgICBvdXRwdXRfbmFtZSwgaW50ZXJuYWw6Okdl
dEN1cnJlbnRFeGVjdXRhYmxlTmFtZSgpLAotICAgICAgR2V0T3V0cHV0Rm9ybWF0KCkuY19zdHIo
KSkpOwotICByZXR1cm4gcmVzdWx0LnN0cmluZygpOwotfQotCi0vLyBSZXR1cm5zIHRydWUgaWZm
IHRoZSB3aWxkY2FyZCBwYXR0ZXJuIG1hdGNoZXMgdGhlIHN0cmluZy4gIFRoZQotLy8gZmlyc3Qg
JzonIG9yICdcMCcgY2hhcmFjdGVyIGluIHBhdHRlcm4gbWFya3MgdGhlIGVuZCBvZiBpdC4KLS8v
Ci0vLyBUaGlzIHJlY3Vyc2l2ZSBhbGdvcml0aG0gaXNuJ3QgdmVyeSBlZmZpY2llbnQsIGJ1dCBp
cyBjbGVhciBhbmQKLS8vIHdvcmtzIHdlbGwgZW5vdWdoIGZvciBtYXRjaGluZyB0ZXN0IG5hbWVz
LCB3aGljaCBhcmUgc2hvcnQuCi1ib29sIFVuaXRUZXN0T3B0aW9uczo6UGF0dGVybk1hdGNoZXNT
dHJpbmcoY29uc3QgY2hhciAqcGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIpIHsKLSAgc3dpdGNoICgqcGF0dGVybikgewot
ICAgIGNhc2UgJ1wwJzoKLSAgICBjYXNlICc6JzogIC8vIEVpdGhlciAnOicgb3IgJ1wwJyBtYXJr
cyB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLgotICAgICAgcmV0dXJuICpzdHIgPT0gJ1wwJzsKLSAg
ICBjYXNlICc/JzogIC8vIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIuCi0gICAgICByZXR1
cm4gKnN0ciAhPSAnXDAnICYmIFBhdHRlcm5NYXRjaGVzU3RyaW5nKHBhdHRlcm4gKyAxLCBzdHIg
KyAxKTsKLSAgICBjYXNlICcqJzogIC8vIE1hdGNoZXMgYW55IHN0cmluZyAocG9zc2libHkgZW1w
dHkpIG9mIGNoYXJhY3RlcnMuCi0gICAgICByZXR1cm4gKCpzdHIgIT0gJ1wwJyAmJiBQYXR0ZXJu
TWF0Y2hlc1N0cmluZyhwYXR0ZXJuLCBzdHIgKyAxKSkgfHwKLSAgICAgICAgICBQYXR0ZXJuTWF0
Y2hlc1N0cmluZyhwYXR0ZXJuICsgMSwgc3RyKTsKLSAgICBkZWZhdWx0OiAgLy8gTm9uLXNwZWNp
YWwgY2hhcmFjdGVyLiAgTWF0Y2hlcyBpdHNlbGYuCi0gICAgICByZXR1cm4gKnBhdHRlcm4gPT0g
KnN0ciAmJgotICAgICAgICAgIFBhdHRlcm5NYXRjaGVzU3RyaW5nKHBhdHRlcm4gKyAxLCBzdHIg
KyAxKTsKLSAgfQotfQotCi1ib29sIFVuaXRUZXN0T3B0aW9uczo6TWF0Y2hlc0ZpbHRlcigKLSAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3QgY2hhciogZmlsdGVyKSB7Ci0gIGNvbnN0
IGNoYXIgKmN1cl9wYXR0ZXJuID0gZmlsdGVyOwotICBmb3IgKDs7KSB7Ci0gICAgaWYgKFBhdHRl
cm5NYXRjaGVzU3RyaW5nKGN1cl9wYXR0ZXJuLCBuYW1lLmNfc3RyKCkpKSB7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBGaW5kcyB0aGUgbmV4dCBwYXR0ZXJuIGluIHRoZSBm
aWx0ZXIuCi0gICAgY3VyX3BhdHRlcm4gPSBzdHJjaHIoY3VyX3BhdHRlcm4sICc6Jyk7Ci0KLSAg
ICAvLyBSZXR1cm5zIGlmIG5vIG1vcmUgcGF0dGVybiBjYW4gYmUgZm91bmQuCi0gICAgaWYgKGN1
cl9wYXR0ZXJuID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBTa2lwcyB0aGUgcGF0dGVybiBzZXBhcmF0ZXIgKHRoZSAnOicgY2hhcmFjdGVyKS4KLSAgICBj
dXJfcGF0dGVybisrOwotICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHVzZXItc3Bl
Y2lmaWVkIGZpbHRlciBtYXRjaGVzIHRoZSB0ZXN0IGNhc2UKLS8vIG5hbWUgYW5kIHRoZSB0ZXN0
IG5hbWUuCi1ib29sIFVuaXRUZXN0T3B0aW9uczo6RmlsdGVyTWF0Y2hlc1Rlc3QoY29uc3Qgc3Rk
OjpzdHJpbmcgJnRlc3RfY2FzZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ0ZXN0X25hbWUpIHsKLSAgY29uc3Qgc3RkOjpz
dHJpbmcmIGZ1bGxfbmFtZSA9IHRlc3RfY2FzZV9uYW1lICsgIi4iICsgdGVzdF9uYW1lLmNfc3Ry
KCk7Ci0KLSAgLy8gU3BsaXQgLS1ndGVzdF9maWx0ZXIgYXQgJy0nLCBpZiB0aGVyZSBpcyBvbmUs
IHRvIHNlcGFyYXRlIGludG8KLSAgLy8gcG9zaXRpdmUgZmlsdGVyIGFuZCBuZWdhdGl2ZSBmaWx0
ZXIgcG9ydGlvbnMKLSAgY29uc3QgY2hhciogY29uc3QgcCA9IEdURVNUX0ZMQUcoZmlsdGVyKS5j
X3N0cigpOwotICBjb25zdCBjaGFyKiBjb25zdCBkYXNoID0gc3RyY2hyKHAsICctJyk7Ci0gIHN0
ZDo6c3RyaW5nIHBvc2l0aXZlOwotICBzdGQ6OnN0cmluZyBuZWdhdGl2ZTsKLSAgaWYgKGRhc2gg
PT0gTlVMTCkgewotICAgIHBvc2l0aXZlID0gR1RFU1RfRkxBRyhmaWx0ZXIpLmNfc3RyKCk7ICAv
LyBXaG9sZSBzdHJpbmcgaXMgYSBwb3NpdGl2ZSBmaWx0ZXIKLSAgICBuZWdhdGl2ZSA9ICIiOwot
ICB9IGVsc2UgewotICAgIHBvc2l0aXZlID0gc3RkOjpzdHJpbmcocCwgZGFzaCk7ICAgLy8gRXZl
cnl0aGluZyB1cCB0byB0aGUgZGFzaAotICAgIG5lZ2F0aXZlID0gc3RkOjpzdHJpbmcoZGFzaCAr
IDEpOyAgLy8gRXZlcnl0aGluZyBhZnRlciB0aGUgZGFzaAotICAgIGlmIChwb3NpdGl2ZS5lbXB0
eSgpKSB7Ci0gICAgICAvLyBUcmVhdCAnLXRlc3QxJyBhcyB0aGUgc2FtZSBhcyAnKi10ZXN0MScK
LSAgICAgIHBvc2l0aXZlID0ga1VuaXZlcnNhbEZpbHRlcjsKLSAgICB9Ci0gIH0KLQotICAvLyBB
IGZpbHRlciBpcyBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBhdHRlcm5zLiAgSXQgbWF0Y2hl
cyBhCi0gIC8vIHRlc3QgaWYgYW55IHBhdHRlcm4gaW4gaXQgbWF0Y2hlcyB0aGUgdGVzdC4KLSAg
cmV0dXJuIChNYXRjaGVzRmlsdGVyKGZ1bGxfbmFtZSwgcG9zaXRpdmUuY19zdHIoKSkgJiYKLSAg
ICAgICAgICAhTWF0Y2hlc0ZpbHRlcihmdWxsX25hbWUsIG5lZ2F0aXZlLmNfc3RyKCkpKTsKLX0K
LQotI2lmIEdURVNUX0hBU19TRUgKLS8vIFJldHVybnMgRVhDRVBUSU9OX0VYRUNVVEVfSEFORExF
UiBpZiBHb29nbGUgVGVzdCBzaG91bGQgaGFuZGxlIHRoZQotLy8gZ2l2ZW4gU0VIIGV4Y2VwdGlv
biwgb3IgRVhDRVBUSU9OX0NPTlRJTlVFX1NFQVJDSCBvdGhlcndpc2UuCi0vLyBUaGlzIGZ1bmN0
aW9uIGlzIHVzZWZ1bCBhcyBhbiBfX2V4Y2VwdCBjb25kaXRpb24uCi1pbnQgVW5pdFRlc3RPcHRp
b25zOjpHVGVzdFNob3VsZFByb2Nlc3NTRUgoRFdPUkQgZXhjZXB0aW9uX2NvZGUpIHsKLSAgLy8g
R29vZ2xlIFRlc3Qgc2hvdWxkIGhhbmRsZSBhIFNFSCBleGNlcHRpb24gaWY6Ci0gIC8vICAgMS4g
dGhlIHVzZXIgd2FudHMgaXQgdG8sIEFORAotICAvLyAgIDIuIHRoaXMgaXMgbm90IGEgYnJlYWtw
b2ludCBleGNlcHRpb24sIEFORAotICAvLyAgIDMuIHRoaXMgaXMgbm90IGEgQysrIGV4Y2VwdGlv
biAoVkMrKyBpbXBsZW1lbnRzIHRoZW0gdmlhIFNFSCwKLSAgLy8gICAgICBhcHBhcmVudGx5KS4K
LSAgLy8KLSAgLy8gU0VIIGV4Y2VwdGlvbiBjb2RlIGZvciBDKysgZXhjZXB0aW9ucy4KLSAgLy8g
KHNlZSBodHRwOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2tiLzE4NTI5NCBmb3IgbW9yZSBpbmZv
cm1hdGlvbikuCi0gIGNvbnN0IERXT1JEIGtDeHhFeGNlcHRpb25Db2RlID0gMHhlMDZkNzM2MzsK
LQotICBib29sIHNob3VsZF9oYW5kbGUgPSB0cnVlOwotCi0gIGlmICghR1RFU1RfRkxBRyhjYXRj
aF9leGNlcHRpb25zKSkKLSAgICBzaG91bGRfaGFuZGxlID0gZmFsc2U7Ci0gIGVsc2UgaWYgKGV4
Y2VwdGlvbl9jb2RlID09IEVYQ0VQVElPTl9CUkVBS1BPSU5UKQotICAgIHNob3VsZF9oYW5kbGUg
PSBmYWxzZTsKLSAgZWxzZSBpZiAoZXhjZXB0aW9uX2NvZGUgPT0ga0N4eEV4Y2VwdGlvbkNvZGUp
Ci0gICAgc2hvdWxkX2hhbmRsZSA9IGZhbHNlOwotCi0gIHJldHVybiBzaG91bGRfaGFuZGxlID8g
RVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUiA6IEVYQ0VQVElPTl9DT05USU5VRV9TRUFSQ0g7Ci19
Ci0jZW5kaWYgIC8vIEdURVNUX0hBU19TRUgKLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi0K
LS8vIFRoZSBjJ3RvciBzZXRzIHRoaXMgb2JqZWN0IGFzIHRoZSB0ZXN0IHBhcnQgcmVzdWx0IHJl
cG9ydGVyIHVzZWQgYnkKLS8vIEdvb2dsZSBUZXN0LiAgVGhlICdyZXN1bHQnIHBhcmFtZXRlciBz
cGVjaWZpZXMgd2hlcmUgdG8gcmVwb3J0IHRoZQotLy8gcmVzdWx0cy4gSW50ZXJjZXB0cyBvbmx5
IGZhaWx1cmVzIGZyb20gdGhlIGN1cnJlbnQgdGhyZWFkLgotU2NvcGVkRmFrZVRlc3RQYXJ0UmVz
dWx0UmVwb3J0ZXI6OlNjb3BlZEZha2VUZXN0UGFydFJlc3VsdFJlcG9ydGVyKAotICAgIFRlc3RQ
YXJ0UmVzdWx0QXJyYXkqIHJlc3VsdCkKLSAgICA6IGludGVyY2VwdF9tb2RlXyhJTlRFUkNFUFRf
T05MWV9DVVJSRU5UX1RIUkVBRCksCi0gICAgICByZXN1bHRfKHJlc3VsdCkgewotICBJbml0KCk7
Ci19Ci0KLS8vIFRoZSBjJ3RvciBzZXRzIHRoaXMgb2JqZWN0IGFzIHRoZSB0ZXN0IHBhcnQgcmVz
dWx0IHJlcG9ydGVyIHVzZWQgYnkKLS8vIEdvb2dsZSBUZXN0LiAgVGhlICdyZXN1bHQnIHBhcmFt
ZXRlciBzcGVjaWZpZXMgd2hlcmUgdG8gcmVwb3J0IHRoZQotLy8gcmVzdWx0cy4KLVNjb3BlZEZh
a2VUZXN0UGFydFJlc3VsdFJlcG9ydGVyOjpTY29wZWRGYWtlVGVzdFBhcnRSZXN1bHRSZXBvcnRl
cigKLSAgICBJbnRlcmNlcHRNb2RlIGludGVyY2VwdF9tb2RlLCBUZXN0UGFydFJlc3VsdEFycmF5
KiByZXN1bHQpCi0gICAgOiBpbnRlcmNlcHRfbW9kZV8oaW50ZXJjZXB0X21vZGUpLAotICAgICAg
cmVzdWx0XyhyZXN1bHQpIHsKLSAgSW5pdCgpOwotfQotCi12b2lkIFNjb3BlZEZha2VUZXN0UGFy
dFJlc3VsdFJlcG9ydGVyOjpJbml0KCkgewotICBpbnRlcm5hbDo6VW5pdFRlc3RJbXBsKiBjb25z
dCBpbXBsID0gaW50ZXJuYWw6OkdldFVuaXRUZXN0SW1wbCgpOwotICBpZiAoaW50ZXJjZXB0X21v
ZGVfID09IElOVEVSQ0VQVF9BTExfVEhSRUFEUykgewotICAgIG9sZF9yZXBvcnRlcl8gPSBpbXBs
LT5HZXRHbG9iYWxUZXN0UGFydFJlc3VsdFJlcG9ydGVyKCk7Ci0gICAgaW1wbC0+U2V0R2xvYmFs
VGVzdFBhcnRSZXN1bHRSZXBvcnRlcih0aGlzKTsKLSAgfSBlbHNlIHsKLSAgICBvbGRfcmVwb3J0
ZXJfID0gaW1wbC0+R2V0VGVzdFBhcnRSZXN1bHRSZXBvcnRlckZvckN1cnJlbnRUaHJlYWQoKTsK
LSAgICBpbXBsLT5TZXRUZXN0UGFydFJlc3VsdFJlcG9ydGVyRm9yQ3VycmVudFRocmVhZCh0aGlz
KTsKLSAgfQotfQotCi0vLyBUaGUgZCd0b3IgcmVzdG9yZXMgdGhlIHRlc3QgcGFydCByZXN1bHQg
cmVwb3J0ZXIgdXNlZCBieSBHb29nbGUgVGVzdAotLy8gYmVmb3JlLgotU2NvcGVkRmFrZVRlc3RQ
YXJ0UmVzdWx0UmVwb3J0ZXI6On5TY29wZWRGYWtlVGVzdFBhcnRSZXN1bHRSZXBvcnRlcigpIHsK
LSAgaW50ZXJuYWw6OlVuaXRUZXN0SW1wbCogY29uc3QgaW1wbCA9IGludGVybmFsOjpHZXRVbml0
VGVzdEltcGwoKTsKLSAgaWYgKGludGVyY2VwdF9tb2RlXyA9PSBJTlRFUkNFUFRfQUxMX1RIUkVB
RFMpIHsKLSAgICBpbXBsLT5TZXRHbG9iYWxUZXN0UGFydFJlc3VsdFJlcG9ydGVyKG9sZF9yZXBv
cnRlcl8pOwotICB9IGVsc2UgewotICAgIGltcGwtPlNldFRlc3RQYXJ0UmVzdWx0UmVwb3J0ZXJG
b3JDdXJyZW50VGhyZWFkKG9sZF9yZXBvcnRlcl8pOwotICB9Ci19Ci0KLS8vIEluY3JlbWVudHMg
dGhlIHRlc3QgcGFydCByZXN1bHQgY291bnQgYW5kIHJlbWVtYmVycyB0aGUgcmVzdWx0LgotLy8g
VGhpcyBtZXRob2QgaXMgZnJvbSB0aGUgVGVzdFBhcnRSZXN1bHRSZXBvcnRlckludGVyZmFjZSBp
bnRlcmZhY2UuCi12b2lkIFNjb3BlZEZha2VUZXN0UGFydFJlc3VsdFJlcG9ydGVyOjpSZXBvcnRU
ZXN0UGFydFJlc3VsdCgKLSAgICBjb25zdCBUZXN0UGFydFJlc3VsdCYgcmVzdWx0KSB7Ci0gIHJl
c3VsdF8tPkFwcGVuZChyZXN1bHQpOwotfQotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi0vLyBS
ZXR1cm5zIHRoZSB0eXBlIElEIG9mIDo6dGVzdGluZzo6VGVzdC4gIFdlIHNob3VsZCBhbHdheXMg
Y2FsbCB0aGlzCi0vLyBpbnN0ZWFkIG9mIEdldFR5cGVJZDwgOjp0ZXN0aW5nOjpUZXN0PigpIHRv
IGdldCB0aGUgdHlwZSBJRCBvZgotLy8gdGVzdGluZzo6VGVzdC4gIFRoaXMgaXMgdG8gd29yayBh
cm91bmQgYSBzdXNwZWN0ZWQgbGlua2VyIGJ1ZyB3aGVuCi0vLyB1c2luZyBHb29nbGUgVGVzdCBh
cyBhIGZyYW1ld29yayBvbiBNYWMgT1MgWC4gIFRoZSBidWcgY2F1c2VzCi0vLyBHZXRUeXBlSWQ8
IDo6dGVzdGluZzo6VGVzdD4oKSB0byByZXR1cm4gZGlmZmVyZW50IHZhbHVlcyBkZXBlbmRpbmcK
LS8vIG9uIHdoZXRoZXIgdGhlIGNhbGwgaXMgZnJvbSB0aGUgR29vZ2xlIFRlc3QgZnJhbWV3b3Jr
IGl0c2VsZiBvcgotLy8gZnJvbSB1c2VyIHRlc3QgY29kZS4gIEdldFRlc3RUeXBlSWQoKSBpcyBn
dWFyYW50ZWVkIHRvIGFsd2F5cwotLy8gcmV0dXJuIHRoZSBzYW1lIHZhbHVlLCBhcyBpdCBhbHdh
eXMgY2FsbHMgR2V0VHlwZUlkPD4oKSBmcm9tIHRoZQotLy8gZ3Rlc3QuY2MsIHdoaWNoIGlzIHdp
dGhpbiB0aGUgR29vZ2xlIFRlc3QgZnJhbWV3b3JrLgotVHlwZUlkIEdldFRlc3RUeXBlSWQoKSB7
Ci0gIHJldHVybiBHZXRUeXBlSWQ8VGVzdD4oKTsKLX0KLQotLy8gVGhlIHZhbHVlIG9mIEdldFRl
c3RUeXBlSWQoKSBhcyBzZWVuIGZyb20gd2l0aGluIHRoZSBHb29nbGUgVGVzdAotLy8gbGlicmFy
eS4gIFRoaXMgaXMgc29sZWx5IGZvciB0ZXN0aW5nIEdldFRlc3RUeXBlSWQoKS4KLWV4dGVybiBj
b25zdCBUeXBlSWQga1Rlc3RUeXBlSWRJbkdvb2dsZVRlc3QgPSBHZXRUZXN0VHlwZUlkKCk7Ci0K
LS8vIFRoaXMgcHJlZGljYXRlLWZvcm1hdHRlciBjaGVja3MgdGhhdCAncmVzdWx0cycgY29udGFp
bnMgYSB0ZXN0IHBhcnQKLS8vIGZhaWx1cmUgb2YgdGhlIGdpdmVuIHR5cGUgYW5kIHRoYXQgdGhl
IGZhaWx1cmUgbWVzc2FnZSBjb250YWlucyB0aGUKLS8vIGdpdmVuIHN1YnN0cmluZy4KLUFzc2Vy
dGlvblJlc3VsdCBIYXNPbmVGYWlsdXJlKGNvbnN0IGNoYXIqIC8qIHJlc3VsdHNfZXhwciAqLywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIC8qIHR5cGVfZXhwciAq
LywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIC8qIHN1YnN0cl9l
eHByICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVzdFBhcnRSZXN1
bHRBcnJheSYgcmVzdWx0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RQYXJ0
UmVzdWx0OjpUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dHJpbmcmIHN1YnN0cikgewotICBjb25zdCBzdGQ6OnN0cmluZyBleHBlY3RlZCh0eXBlID09IFRl
c3RQYXJ0UmVzdWx0OjprRmF0YWxGYWlsdXJlID8KLSAgICAgICAgICAgICAgICAgICAgICAgICIx
IGZhdGFsIGZhaWx1cmUiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICIxIG5vbi1mYXRhbCBm
YWlsdXJlIik7Ci0gIE1lc3NhZ2UgbXNnOwotICBpZiAocmVzdWx0cy5zaXplKCkgIT0gMSkgewot
ICAgIG1zZyA8PCAiRXhwZWN0ZWQ6ICIgPDwgZXhwZWN0ZWQgPDwgIlxuIgotICAgICAgICA8PCAi
ICBBY3R1YWw6ICIgPDwgcmVzdWx0cy5zaXplKCkgPDwgIiBmYWlsdXJlcyI7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBtc2cgPDwgIlxuIiA8
PCByZXN1bHRzLkdldFRlc3RQYXJ0UmVzdWx0KGkpOwotICAgIH0KLSAgICByZXR1cm4gQXNzZXJ0
aW9uRmFpbHVyZSgpIDw8IG1zZzsKLSAgfQotCi0gIGNvbnN0IFRlc3RQYXJ0UmVzdWx0JiByID0g
cmVzdWx0cy5HZXRUZXN0UGFydFJlc3VsdCgwKTsKLSAgaWYgKHIudHlwZSgpICE9IHR5cGUpIHsK
LSAgICByZXR1cm4gQXNzZXJ0aW9uRmFpbHVyZSgpIDw8ICJFeHBlY3RlZDogIiA8PCBleHBlY3Rl
ZCA8PCAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiICBBY3R1YWw6XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCByOwotICB9Ci0KLSAgaWYgKHN0cnN0
cihyLm1lc3NhZ2UoKSwgc3Vic3RyLmNfc3RyKCkpID09IE5VTEwpIHsKLSAgICByZXR1cm4gQXNz
ZXJ0aW9uRmFpbHVyZSgpIDw8ICJFeHBlY3RlZDogIiA8PCBleHBlY3RlZCA8PCAiIGNvbnRhaW5p
bmcgXCIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdWJzdHIgPDwgIlwiXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiICBBY3R1YWw6XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8PCByOwotICB9Ci0KLSAgcmV0dXJuIEFzc2VydGlvblN1
Y2Nlc3MoKTsKLX0KLQotLy8gVGhlIGNvbnN0cnVjdG9yIG9mIFNpbmdsZUZhaWx1cmVDaGVja2Vy
IHJlbWVtYmVycyB3aGVyZSB0byBsb29rIHVwCi0vLyB0ZXN0IHBhcnQgcmVzdWx0cywgd2hhdCB0
eXBlIG9mIGZhaWx1cmUgd2UgZXhwZWN0LCBhbmQgd2hhdAotLy8gc3Vic3RyaW5nIHRoZSBmYWls
dXJlIG1lc3NhZ2Ugc2hvdWxkIGNvbnRhaW4uCi1TaW5nbGVGYWlsdXJlQ2hlY2tlcjo6IFNpbmds
ZUZhaWx1cmVDaGVja2VyKAotICAgIGNvbnN0IFRlc3RQYXJ0UmVzdWx0QXJyYXkqIHJlc3VsdHMs
Ci0gICAgVGVzdFBhcnRSZXN1bHQ6OlR5cGUgdHlwZSwKLSAgICBjb25zdCBzdHJpbmcmIHN1YnN0
cikKLSAgICA6IHJlc3VsdHNfKHJlc3VsdHMpLAotICAgICAgdHlwZV8odHlwZSksCi0gICAgICBz
dWJzdHJfKHN1YnN0cikge30KLQotLy8gVGhlIGRlc3RydWN0b3Igb2YgU2luZ2xlRmFpbHVyZUNo
ZWNrZXIgdmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4KLS8vIFRlc3RQYXJ0UmVzdWx0QXJyYXkgY29u
dGFpbnMgZXhhY3RseSBvbmUgZmFpbHVyZSB0aGF0IGhhcyB0aGUgZ2l2ZW4KLS8vIHR5cGUgYW5k
IGNvbnRhaW5zIHRoZSBnaXZlbiBzdWJzdHJpbmcuICBJZiB0aGF0J3Mgbm90IHRoZSBjYXNlLCBh
Ci0vLyBub24tZmF0YWwgZmFpbHVyZSB3aWxsIGJlIGdlbmVyYXRlZC4KLVNpbmdsZUZhaWx1cmVD
aGVja2VyOjp+U2luZ2xlRmFpbHVyZUNoZWNrZXIoKSB7Ci0gIEVYUEVDVF9QUkVEX0ZPUk1BVDMo
SGFzT25lRmFpbHVyZSwgKnJlc3VsdHNfLCB0eXBlXywgc3Vic3RyXyk7Ci19Ci0KLURlZmF1bHRH
bG9iYWxUZXN0UGFydFJlc3VsdFJlcG9ydGVyOjpEZWZhdWx0R2xvYmFsVGVzdFBhcnRSZXN1bHRS
ZXBvcnRlcigKLSAgICBVbml0VGVzdEltcGwqIHVuaXRfdGVzdCkgOiB1bml0X3Rlc3RfKHVuaXRf
dGVzdCkge30KLQotdm9pZCBEZWZhdWx0R2xvYmFsVGVzdFBhcnRSZXN1bHRSZXBvcnRlcjo6UmVw
b3J0VGVzdFBhcnRSZXN1bHQoCi0gICAgY29uc3QgVGVzdFBhcnRSZXN1bHQmIHJlc3VsdCkgewot
ICB1bml0X3Rlc3RfLT5jdXJyZW50X3Rlc3RfcmVzdWx0KCktPkFkZFRlc3RQYXJ0UmVzdWx0KHJl
c3VsdCk7Ci0gIHVuaXRfdGVzdF8tPmxpc3RlbmVycygpLT5yZXBlYXRlcigpLT5PblRlc3RQYXJ0
UmVzdWx0KHJlc3VsdCk7Ci19Ci0KLURlZmF1bHRQZXJUaHJlYWRUZXN0UGFydFJlc3VsdFJlcG9y
dGVyOjpEZWZhdWx0UGVyVGhyZWFkVGVzdFBhcnRSZXN1bHRSZXBvcnRlcigKLSAgICBVbml0VGVz
dEltcGwqIHVuaXRfdGVzdCkgOiB1bml0X3Rlc3RfKHVuaXRfdGVzdCkge30KLQotdm9pZCBEZWZh
dWx0UGVyVGhyZWFkVGVzdFBhcnRSZXN1bHRSZXBvcnRlcjo6UmVwb3J0VGVzdFBhcnRSZXN1bHQo
Ci0gICAgY29uc3QgVGVzdFBhcnRSZXN1bHQmIHJlc3VsdCkgewotICB1bml0X3Rlc3RfLT5HZXRH
bG9iYWxUZXN0UGFydFJlc3VsdFJlcG9ydGVyKCktPlJlcG9ydFRlc3RQYXJ0UmVzdWx0KHJlc3Vs
dCk7Ci19Ci0KLS8vIFJldHVybnMgdGhlIGdsb2JhbCB0ZXN0IHBhcnQgcmVzdWx0IHJlcG9ydGVy
LgotVGVzdFBhcnRSZXN1bHRSZXBvcnRlckludGVyZmFjZSoKLVVuaXRUZXN0SW1wbDo6R2V0R2xv
YmFsVGVzdFBhcnRSZXN1bHRSZXBvcnRlcigpIHsKLSAgaW50ZXJuYWw6Ok11dGV4TG9jayBsb2Nr
KCZnbG9iYWxfdGVzdF9wYXJ0X3Jlc3VsdF9yZXBvcnRlcl9tdXRleF8pOwotICByZXR1cm4gZ2xv
YmFsX3Rlc3RfcGFydF9yZXN1bHRfcmVwb3Rlcl87Ci19Ci0KLS8vIFNldHMgdGhlIGdsb2JhbCB0
ZXN0IHBhcnQgcmVzdWx0IHJlcG9ydGVyLgotdm9pZCBVbml0VGVzdEltcGw6OlNldEdsb2JhbFRl
c3RQYXJ0UmVzdWx0UmVwb3J0ZXIoCi0gICAgVGVzdFBhcnRSZXN1bHRSZXBvcnRlckludGVyZmFj
ZSogcmVwb3J0ZXIpIHsKLSAgaW50ZXJuYWw6Ok11dGV4TG9jayBsb2NrKCZnbG9iYWxfdGVzdF9w
YXJ0X3Jlc3VsdF9yZXBvcnRlcl9tdXRleF8pOwotICBnbG9iYWxfdGVzdF9wYXJ0X3Jlc3VsdF9y
ZXBvdGVyXyA9IHJlcG9ydGVyOwotfQotCi0vLyBSZXR1cm5zIHRoZSB0ZXN0IHBhcnQgcmVzdWx0
IHJlcG9ydGVyIGZvciB0aGUgY3VycmVudCB0aHJlYWQuCi1UZXN0UGFydFJlc3VsdFJlcG9ydGVy
SW50ZXJmYWNlKgotVW5pdFRlc3RJbXBsOjpHZXRUZXN0UGFydFJlc3VsdFJlcG9ydGVyRm9yQ3Vy
cmVudFRocmVhZCgpIHsKLSAgcmV0dXJuIHBlcl90aHJlYWRfdGVzdF9wYXJ0X3Jlc3VsdF9yZXBv
cnRlcl8uZ2V0KCk7Ci19Ci0KLS8vIFNldHMgdGhlIHRlc3QgcGFydCByZXN1bHQgcmVwb3J0ZXIg
Zm9yIHRoZSBjdXJyZW50IHRocmVhZC4KLXZvaWQgVW5pdFRlc3RJbXBsOjpTZXRUZXN0UGFydFJl
c3VsdFJlcG9ydGVyRm9yQ3VycmVudFRocmVhZCgKLSAgICBUZXN0UGFydFJlc3VsdFJlcG9ydGVy
SW50ZXJmYWNlKiByZXBvcnRlcikgewotICBwZXJfdGhyZWFkX3Rlc3RfcGFydF9yZXN1bHRfcmVw
b3J0ZXJfLnNldChyZXBvcnRlcik7Ci19Ci0KLS8vIEdldHMgdGhlIG51bWJlciBvZiBzdWNjZXNz
ZnVsIHRlc3QgY2FzZXMuCi1pbnQgVW5pdFRlc3RJbXBsOjpzdWNjZXNzZnVsX3Rlc3RfY2FzZV9j
b3VudCgpIGNvbnN0IHsKLSAgcmV0dXJuIENvdW50SWYodGVzdF9jYXNlc18sIFRlc3RDYXNlUGFz
c2VkKTsKLX0KLQotLy8gR2V0cyB0aGUgbnVtYmVyIG9mIGZhaWxlZCB0ZXN0IGNhc2VzLgotaW50
IFVuaXRUZXN0SW1wbDo6ZmFpbGVkX3Rlc3RfY2FzZV9jb3VudCgpIGNvbnN0IHsKLSAgcmV0dXJu
IENvdW50SWYodGVzdF9jYXNlc18sIFRlc3RDYXNlRmFpbGVkKTsKLX0KLQotLy8gR2V0cyB0aGUg
bnVtYmVyIG9mIGFsbCB0ZXN0IGNhc2VzLgotaW50IFVuaXRUZXN0SW1wbDo6dG90YWxfdGVzdF9j
YXNlX2NvdW50KCkgY29uc3QgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0ZXN0X2Nhc2Vz
Xy5zaXplKCkpOwotfQotCi0vLyBHZXRzIHRoZSBudW1iZXIgb2YgYWxsIHRlc3QgY2FzZXMgdGhh
dCBjb250YWluIGF0IGxlYXN0IG9uZSB0ZXN0Ci0vLyB0aGF0IHNob3VsZCBydW4uCi1pbnQgVW5p
dFRlc3RJbXBsOjp0ZXN0X2Nhc2VfdG9fcnVuX2NvdW50KCkgY29uc3QgewotICByZXR1cm4gQ291
bnRJZih0ZXN0X2Nhc2VzXywgU2hvdWxkUnVuVGVzdENhc2UpOwotfQotCi0vLyBHZXRzIHRoZSBu
dW1iZXIgb2Ygc3VjY2Vzc2Z1bCB0ZXN0cy4KLWludCBVbml0VGVzdEltcGw6OnN1Y2Nlc3NmdWxf
dGVzdF9jb3VudCgpIGNvbnN0IHsKLSAgcmV0dXJuIFN1bU92ZXJUZXN0Q2FzZUxpc3QodGVzdF9j
YXNlc18sICZUZXN0Q2FzZTo6c3VjY2Vzc2Z1bF90ZXN0X2NvdW50KTsKLX0KLQotLy8gR2V0cyB0
aGUgbnVtYmVyIG9mIGZhaWxlZCB0ZXN0cy4KLWludCBVbml0VGVzdEltcGw6OmZhaWxlZF90ZXN0
X2NvdW50KCkgY29uc3QgewotICByZXR1cm4gU3VtT3ZlclRlc3RDYXNlTGlzdCh0ZXN0X2Nhc2Vz
XywgJlRlc3RDYXNlOjpmYWlsZWRfdGVzdF9jb3VudCk7Ci19Ci0KLS8vIEdldHMgdGhlIG51bWJl
ciBvZiBkaXNhYmxlZCB0ZXN0cyB0aGF0IHdpbGwgYmUgcmVwb3J0ZWQgaW4gdGhlIFhNTCByZXBv
cnQuCi1pbnQgVW5pdFRlc3RJbXBsOjpyZXBvcnRhYmxlX2Rpc2FibGVkX3Rlc3RfY291bnQoKSBj
b25zdCB7Ci0gIHJldHVybiBTdW1PdmVyVGVzdENhc2VMaXN0KHRlc3RfY2FzZXNfLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmVGVzdENhc2U6OnJlcG9ydGFibGVfZGlzYWJsZWRfdGVz
dF9jb3VudCk7Ci19Ci0KLS8vIEdldHMgdGhlIG51bWJlciBvZiBkaXNhYmxlZCB0ZXN0cy4KLWlu
dCBVbml0VGVzdEltcGw6OmRpc2FibGVkX3Rlc3RfY291bnQoKSBjb25zdCB7Ci0gIHJldHVybiBT
dW1PdmVyVGVzdENhc2VMaXN0KHRlc3RfY2FzZXNfLCAmVGVzdENhc2U6OmRpc2FibGVkX3Rlc3Rf
Y291bnQpOwotfQotCi0vLyBHZXRzIHRoZSBudW1iZXIgb2YgdGVzdHMgdG8gYmUgcHJpbnRlZCBp
biB0aGUgWE1MIHJlcG9ydC4KLWludCBVbml0VGVzdEltcGw6OnJlcG9ydGFibGVfdGVzdF9jb3Vu
dCgpIGNvbnN0IHsKLSAgcmV0dXJuIFN1bU92ZXJUZXN0Q2FzZUxpc3QodGVzdF9jYXNlc18sICZU
ZXN0Q2FzZTo6cmVwb3J0YWJsZV90ZXN0X2NvdW50KTsKLX0KLQotLy8gR2V0cyB0aGUgbnVtYmVy
IG9mIGFsbCB0ZXN0cy4KLWludCBVbml0VGVzdEltcGw6OnRvdGFsX3Rlc3RfY291bnQoKSBjb25z
dCB7Ci0gIHJldHVybiBTdW1PdmVyVGVzdENhc2VMaXN0KHRlc3RfY2FzZXNfLCAmVGVzdENhc2U6
OnRvdGFsX3Rlc3RfY291bnQpOwotfQotCi0vLyBHZXRzIHRoZSBudW1iZXIgb2YgdGVzdHMgdGhh
dCBzaG91bGQgcnVuLgotaW50IFVuaXRUZXN0SW1wbDo6dGVzdF90b19ydW5fY291bnQoKSBjb25z
dCB7Ci0gIHJldHVybiBTdW1PdmVyVGVzdENhc2VMaXN0KHRlc3RfY2FzZXNfLCAmVGVzdENhc2U6
OnRlc3RfdG9fcnVuX2NvdW50KTsKLX0KLQotLy8gUmV0dXJucyB0aGUgY3VycmVudCBPUyBzdGFj
ayB0cmFjZSBhcyBhbiBzdGQ6OnN0cmluZy4KLS8vCi0vLyBUaGUgbWF4aW11bSBudW1iZXIgb2Yg
c3RhY2sgZnJhbWVzIHRvIGJlIGluY2x1ZGVkIGlzIHNwZWNpZmllZCBieQotLy8gdGhlIGd0ZXN0
X3N0YWNrX3RyYWNlX2RlcHRoIGZsYWcuICBUaGUgc2tpcF9jb3VudCBwYXJhbWV0ZXIKLS8vIHNw
ZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRvcCBmcmFtZXMgdG8gYmUgc2tpcHBlZCwgd2hpY2ggZG9l
c24ndAotLy8gY291bnQgYWdhaW5zdCB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byBiZSBpbmNsdWRl
ZC4KLS8vCi0vLyBGb3IgZXhhbXBsZSwgaWYgRm9vKCkgY2FsbHMgQmFyKCksIHdoaWNoIGluIHR1
cm4gY2FsbHMKLS8vIEN1cnJlbnRPc1N0YWNrVHJhY2VFeGNlcHRUb3AoMSksIEZvbygpIHdpbGwg
YmUgaW5jbHVkZWQgaW4gdGhlCi0vLyB0cmFjZSBidXQgQmFyKCkgYW5kIEN1cnJlbnRPc1N0YWNr
VHJhY2VFeGNlcHRUb3AoKSB3b24ndC4KLXN0ZDo6c3RyaW5nIFVuaXRUZXN0SW1wbDo6Q3VycmVu
dE9zU3RhY2tUcmFjZUV4Y2VwdFRvcChpbnQgc2tpcF9jb3VudCkgewotICByZXR1cm4gb3Nfc3Rh
Y2tfdHJhY2VfZ2V0dGVyKCktPkN1cnJlbnRTdGFja1RyYWNlKAotICAgICAgc3RhdGljX2Nhc3Q8
aW50PihHVEVTVF9GTEFHKHN0YWNrX3RyYWNlX2RlcHRoKSksCi0gICAgICBza2lwX2NvdW50ICsg
MQotICAgICAgLy8gU2tpcHMgdGhlIHVzZXItc3BlY2lmaWVkIG51bWJlciBvZiBmcmFtZXMgcGx1
cyB0aGlzIGZ1bmN0aW9uCi0gICAgICAvLyBpdHNlbGYuCi0gICAgICApOyAgLy8gTk9MSU5UCi19
Ci0KLS8vIFJldHVybnMgdGhlIGN1cnJlbnQgdGltZSBpbiBtaWxsaXNlY29uZHMuCi1UaW1lSW5N
aWxsaXMgR2V0VGltZUluTWlsbGlzKCkgewotI2lmIEdURVNUX09TX1dJTkRPV1NfTU9CSUxFIHx8
IGRlZmluZWQoX19CT1JMQU5EQ19fKQotICAvLyBEaWZmZXJlbmNlIGJldHdlZW4gMTk3MC0wMS0w
MSBhbmQgMTYwMS0wMS0wMSBpbiBtaWxsaXNlY29uZHMuCi0gIC8vIGh0dHA6Ly9hbmFsb2dvdXMu
YmxvZ3Nwb3QuY29tLzIwMDUvMDQvZXBvY2guaHRtbAotICBjb25zdCBUaW1lSW5NaWxsaXMga0ph
dmFFcG9jaFRvV2luRmlsZVRpbWVEZWx0YSA9Ci0gICAgc3RhdGljX2Nhc3Q8VGltZUluTWlsbGlz
PigxMTY0NDQ3MzZVTCkgKiAxMDAwMDBVTDsKLSAgY29uc3QgRFdPUkQga1RlbnRoTWljcm9zSW5N
aWxsaVNlY29uZCA9IDEwMDAwOwotCi0gIFNZU1RFTVRJTUUgbm93X3N5c3RpbWU7Ci0gIEZJTEVU
SU1FIG5vd19maWxldGltZTsKLSAgVUxBUkdFX0lOVEVHRVIgbm93X2ludDY0OwotICAvLyBUT0RP
KGtlbnRvbkBnb29nbGUuY29tKTogU2hvdWxkbid0IHRoaXMganVzdCB1c2UKLSAgLy8gICBHZXRT
eXN0ZW1UaW1lQXNGaWxlVGltZSgpPwotICBHZXRTeXN0ZW1UaW1lKCZub3dfc3lzdGltZSk7Ci0g
IGlmIChTeXN0ZW1UaW1lVG9GaWxlVGltZSgmbm93X3N5c3RpbWUsICZub3dfZmlsZXRpbWUpKSB7
Ci0gICAgbm93X2ludDY0Lkxvd1BhcnQgPSBub3dfZmlsZXRpbWUuZHdMb3dEYXRlVGltZTsKLSAg
ICBub3dfaW50NjQuSGlnaFBhcnQgPSBub3dfZmlsZXRpbWUuZHdIaWdoRGF0ZVRpbWU7Ci0gICAg
bm93X2ludDY0LlF1YWRQYXJ0ID0gKG5vd19pbnQ2NC5RdWFkUGFydCAvIGtUZW50aE1pY3Jvc0lu
TWlsbGlTZWNvbmQpIC0KLSAgICAgIGtKYXZhRXBvY2hUb1dpbkZpbGVUaW1lRGVsdGE7Ci0gICAg
cmV0dXJuIG5vd19pbnQ2NC5RdWFkUGFydDsKLSAgfQotICByZXR1cm4gMDsKLSNlbGlmIEdURVNU
X09TX1dJTkRPV1MgJiYgIUdURVNUX0hBU19HRVRUSU1FT0ZEQVlfCi0gIF9fdGltZWI2NCBub3c7
Ci0KLSAgLy8gTVNWQyA4IGRlcHJlY2F0ZXMgX2Z0aW1lNjQoKSwgc28gd2Ugd2FudCB0byBzdXBw
cmVzcyB3YXJuaW5nIDQ5OTYKLSAgLy8gKGRlcHJlY2F0ZWQgZnVuY3Rpb24pIHRoZXJlLgotICAv
LyBUT0RPKGtlbnRvbkBnb29nbGUuY29tKTogVXNlIEdldFRpY2tDb3VudCgpPyAgT3IgdXNlCi0g
IC8vICAgU3lzdGVtVGltZVRvRmlsZVRpbWUoKQotICBHVEVTVF9ESVNBQkxFX01TQ19XQVJOSU5H
U19QVVNIXyg0OTk2KQotICBfZnRpbWU2NCgmbm93KTsKLSAgR1RFU1RfRElTQUJMRV9NU0NfV0FS
TklOR1NfUE9QXygpCi0KLSAgcmV0dXJuIHN0YXRpY19jYXN0PFRpbWVJbk1pbGxpcz4obm93LnRp
bWUpICogMTAwMCArIG5vdy5taWxsaXRtOwotI2VsaWYgR1RFU1RfSEFTX0dFVFRJTUVPRkRBWV8K
LSAgc3RydWN0IHRpbWV2YWwgbm93OwotICBnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7Ci0gIHJl
dHVybiBzdGF0aWNfY2FzdDxUaW1lSW5NaWxsaXM+KG5vdy50dl9zZWMpICogMTAwMCArIG5vdy50
dl91c2VjIC8gMTAwMDsKLSNlbHNlCi0jIGVycm9yICJEb24ndCBrbm93IGhvdyB0byBnZXQgdGhl
IGN1cnJlbnQgdGltZSBvbiB5b3VyIHN5c3RlbS4iCi0jZW5kaWYKLX0KLQotLy8gVXRpbGl0aWVz
Ci0KLS8vIGNsYXNzIFN0cmluZy4KLQotI2lmIEdURVNUX09TX1dJTkRPV1NfTU9CSUxFCi0vLyBD
cmVhdGVzIGEgVVRGLTE2IHdpZGUgc3RyaW5nIGZyb20gdGhlIGdpdmVuIEFOU0kgc3RyaW5nLCBh
bGxvY2F0aW5nCi0vLyBtZW1vcnkgdXNpbmcgbmV3LiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxl
IGZvciBkZWxldGluZyB0aGUgcmV0dXJuCi0vLyB2YWx1ZSB1c2luZyBkZWxldGVbXS4gUmV0dXJu
cyB0aGUgd2lkZSBzdHJpbmcsIG9yIE5VTEwgaWYgdGhlCi0vLyBpbnB1dCBpcyBOVUxMLgotTFBD
V1NUUiBTdHJpbmc6OkFuc2lUb1V0ZjE2KGNvbnN0IGNoYXIqIGFuc2kpIHsKLSAgaWYgKCFhbnNp
KSByZXR1cm4gTlVMTDsKLSAgY29uc3QgaW50IGxlbmd0aCA9IHN0cmxlbihhbnNpKTsKLSAgY29u
c3QgaW50IHVuaWNvZGVfbGVuZ3RoID0KLSAgICAgIE11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfQUNQ
LCAwLCBhbnNpLCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOwot
ICBXQ0hBUiogdW5pY29kZSA9IG5ldyBXQ0hBUlt1bmljb2RlX2xlbmd0aCArIDFdOwotICBNdWx0
aUJ5dGVUb1dpZGVDaGFyKENQX0FDUCwgMCwgYW5zaSwgbGVuZ3RoLAotICAgICAgICAgICAgICAg
ICAgICAgIHVuaWNvZGUsIHVuaWNvZGVfbGVuZ3RoKTsKLSAgdW5pY29kZVt1bmljb2RlX2xlbmd0
aF0gPSAwOwotICByZXR1cm4gdW5pY29kZTsKLX0KLQotLy8gQ3JlYXRlcyBhbiBBTlNJIHN0cmlu
ZyBmcm9tIHRoZSBnaXZlbiB3aWRlIHN0cmluZywgYWxsb2NhdGluZwotLy8gbWVtb3J5IHVzaW5n
IG5ldy4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZGVsZXRpbmcgdGhlIHJldHVybgot
Ly8gdmFsdWUgdXNpbmcgZGVsZXRlW10uIFJldHVybnMgdGhlIEFOU0kgc3RyaW5nLCBvciBOVUxM
IGlmIHRoZQotLy8gaW5wdXQgaXMgTlVMTC4KLWNvbnN0IGNoYXIqIFN0cmluZzo6VXRmMTZUb0Fu
c2koTFBDV1NUUiB1dGYxNl9zdHIpICB7Ci0gIGlmICghdXRmMTZfc3RyKSByZXR1cm4gTlVMTDsK
LSAgY29uc3QgaW50IGFuc2lfbGVuZ3RoID0KLSAgICAgIFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1Bf
QUNQLCAwLCB1dGYxNl9zdHIsIC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAw
LCBOVUxMLCBOVUxMKTsKLSAgY2hhciogYW5zaSA9IG5ldyBjaGFyW2Fuc2lfbGVuZ3RoICsgMV07
Ci0gIFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfQUNQLCAwLCB1dGYxNl9zdHIsIC0xLAotICAgICAg
ICAgICAgICAgICAgICAgIGFuc2ksIGFuc2lfbGVuZ3RoLCBOVUxMLCBOVUxMKTsKLSAgYW5zaVth
bnNpX2xlbmd0aF0gPSAwOwotICByZXR1cm4gYW5zaTsKLX0KLQotI2VuZGlmICAvLyBHVEVTVF9P
U19XSU5ET1dTX01PQklMRQotCi0vLyBDb21wYXJlcyB0d28gQyBzdHJpbmdzLiAgUmV0dXJucyB0
cnVlIGlmZiB0aGV5IGhhdmUgdGhlIHNhbWUgY29udGVudC4KLS8vCi0vLyBVbmxpa2Ugc3RyY21w
KCksIHRoaXMgZnVuY3Rpb24gY2FuIGhhbmRsZSBOVUxMIGFyZ3VtZW50KHMpLiAgQSBOVUxMCi0v
LyBDIHN0cmluZyBpcyBjb25zaWRlcmVkIGRpZmZlcmVudCB0byBhbnkgbm9uLU5VTEwgQyBzdHJp
bmcsCi0vLyBpbmNsdWRpbmcgdGhlIGVtcHR5IHN0cmluZy4KLWJvb2wgU3RyaW5nOjpDU3RyaW5n
RXF1YWxzKGNvbnN0IGNoYXIgKiBsaHMsIGNvbnN0IGNoYXIgKiByaHMpIHsKLSAgaWYgKCBsaHMg
PT0gTlVMTCApIHJldHVybiByaHMgPT0gTlVMTDsKLQotICBpZiAoIHJocyA9PSBOVUxMICkgcmV0
dXJuIGZhbHNlOwotCi0gIHJldHVybiBzdHJjbXAobGhzLCByaHMpID09IDA7Ci19Ci0KLSNpZiBH
VEVTVF9IQVNfU1REX1dTVFJJTkcgfHwgR1RFU1RfSEFTX0dMT0JBTF9XU1RSSU5HCi0KLS8vIENv
bnZlcnRzIGFuIGFycmF5IG9mIHdpZGUgY2hhcnMgdG8gYSBuYXJyb3cgc3RyaW5nIHVzaW5nIHRo
ZSBVVEYtOAotLy8gZW5jb2RpbmcsIGFuZCBzdHJlYW1zIHRoZSByZXN1bHQgdG8gdGhlIGdpdmVu
IE1lc3NhZ2Ugb2JqZWN0Lgotc3RhdGljIHZvaWQgU3RyZWFtV2lkZUNoYXJzVG9NZXNzYWdlKGNv
bnN0IHdjaGFyX3QqIHdzdHIsIHNpemVfdCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWVzc2FnZSogbXNnKSB7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9
IGxlbmd0aDsgKSB7ICAvLyBOT0xJTlQKLSAgICBpZiAod3N0cltpXSAhPSBMJ1wwJykgewotICAg
ICAgKm1zZyA8PCBXaWRlU3RyaW5nVG9VdGY4KHdzdHIgKyBpLCBzdGF0aWNfY2FzdDxpbnQ+KGxl
bmd0aCAtIGkpKTsKLSAgICAgIHdoaWxlIChpICE9IGxlbmd0aCAmJiB3c3RyW2ldICE9IEwnXDAn
KQotICAgICAgICBpKys7Ci0gICAgfSBlbHNlIHsKLSAgICAgICptc2cgPDwgJ1wwJzsKLSAgICAg
IGkrKzsKLSAgICB9Ci0gIH0KLX0KLQotI2VuZGlmICAvLyBHVEVTVF9IQVNfU1REX1dTVFJJTkcg
fHwgR1RFU1RfSEFTX0dMT0JBTF9XU1RSSU5HCi0KLXZvaWQgU3BsaXRTdHJpbmcoY29uc3QgOjpz
dGQ6OnN0cmluZyYgc3RyLCBjaGFyIGRlbGltaXRlciwKLSAgICAgICAgICAgICAgICAgOjpzdGQ6
OnZlY3RvcjwgOjpzdGQ6OnN0cmluZz4qIGRlc3QpIHsKLSAgOjpzdGQ6OnZlY3RvcjwgOjpzdGQ6
OnN0cmluZz4gcGFyc2VkOwotICA6OnN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgcG9zID0gMDsKLSAg
d2hpbGUgKDo6dGVzdGluZzo6aW50ZXJuYWw6OkFsd2F5c1RydWUoKSkgewotICAgIGNvbnN0IDo6
c3RkOjpzdHJpbmc6OnNpemVfdHlwZSBjb2xvbiA9IHN0ci5maW5kKGRlbGltaXRlciwgcG9zKTsK
LSAgICBpZiAoY29sb24gPT0gOjpzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgcGFyc2VkLnB1
c2hfYmFjayhzdHIuc3Vic3RyKHBvcykpOwotICAgICAgYnJlYWs7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIHBhcnNlZC5wdXNoX2JhY2soc3RyLnN1YnN0cihwb3MsIGNvbG9uIC0gcG9zKSk7Ci0gICAg
ICBwb3MgPSBjb2xvbiArIDE7Ci0gICAgfQotICB9Ci0gIGRlc3QtPnN3YXAocGFyc2VkKTsKLX0K
LQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi0KLS8vIENvbnN0cnVjdHMgYW4gZW1wdHkgTWVz
c2FnZS4KLS8vIFdlIGFsbG9jYXRlIHRoZSBzdHJpbmdzdHJlYW0gc2VwYXJhdGVseSBiZWNhdXNl
IG90aGVyd2lzZSBlYWNoIHVzZSBvZgotLy8gQVNTRVJUL0VYUEVDVCBpbiBhIHByb2NlZHVyZSBh
ZGRzIG92ZXIgMjAwIGJ5dGVzIHRvIHRoZSBwcm9jZWR1cmUncwotLy8gc3RhY2sgZnJhbWUgbGVh
ZGluZyB0byBodWdlIHN0YWNrIGZyYW1lcyBpbiBzb21lIGNhc2VzOyBnY2MgZG9lcyBub3QgcmV1
c2UKLS8vIHRoZSBzdGFjayBzcGFjZS4KLU1lc3NhZ2U6Ok1lc3NhZ2UoKSA6IHNzXyhuZXcgOjpz
dGQ6OnN0cmluZ3N0cmVhbSkgewotICAvLyBCeSBkZWZhdWx0LCB3ZSB3YW50IHRoZXJlIHRvIGJl
IGVub3VnaCBwcmVjaXNpb24gd2hlbiBwcmludGluZwotICAvLyBhIGRvdWJsZSB0byBhIE1lc3Nh
Z2UuCi0gICpzc18gPDwgc3RkOjpzZXRwcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjpkaWdpdHMxMCArIDIpOwotfQotCi0vLyBUaGVzZSB0d28gb3ZlcmxvYWRzIGFsbG93IHN0
cmVhbWluZyBhIHdpZGUgQyBzdHJpbmcgdG8gYSBNZXNzYWdlCi0vLyB1c2luZyB0aGUgVVRGLTgg
ZW5jb2RpbmcuCi1NZXNzYWdlJiBNZXNzYWdlOjpvcGVyYXRvciA8PChjb25zdCB3Y2hhcl90KiB3
aWRlX2Nfc3RyKSB7Ci0gIHJldHVybiAqdGhpcyA8PCBpbnRlcm5hbDo6U3RyaW5nOjpTaG93V2lk
ZUNTdHJpbmcod2lkZV9jX3N0cik7Ci19Ci1NZXNzYWdlJiBNZXNzYWdlOjpvcGVyYXRvciA8PCh3
Y2hhcl90KiB3aWRlX2Nfc3RyKSB7Ci0gIHJldHVybiAqdGhpcyA8PCBpbnRlcm5hbDo6U3RyaW5n
OjpTaG93V2lkZUNTdHJpbmcod2lkZV9jX3N0cik7Ci19Ci0KLSNpZiBHVEVTVF9IQVNfU1REX1dT
VFJJTkcKLS8vIENvbnZlcnRzIHRoZSBnaXZlbiB3aWRlIHN0cmluZyB0byBhIG5hcnJvdyBzdHJp
bmcgdXNpbmcgdGhlIFVURi04Ci0vLyBlbmNvZGluZywgYW5kIHN0cmVhbXMgdGhlIHJlc3VsdCB0
byB0aGlzIE1lc3NhZ2Ugb2JqZWN0LgotTWVzc2FnZSYgTWVzc2FnZTo6b3BlcmF0b3IgPDwoY29u
c3QgOjpzdGQ6OndzdHJpbmcmIHdzdHIpIHsKLSAgaW50ZXJuYWw6OlN0cmVhbVdpZGVDaGFyc1Rv
TWVzc2FnZSh3c3RyLmNfc3RyKCksIHdzdHIubGVuZ3RoKCksIHRoaXMpOwotICByZXR1cm4gKnRo
aXM7Ci19Ci0jZW5kaWYgIC8vIEdURVNUX0hBU19TVERfV1NUUklORwotCi0jaWYgR1RFU1RfSEFT
X0dMT0JBTF9XU1RSSU5HCi0vLyBDb252ZXJ0cyB0aGUgZ2l2ZW4gd2lkZSBzdHJpbmcgdG8gYSBu
YXJyb3cgc3RyaW5nIHVzaW5nIHRoZSBVVEYtOAotLy8gZW5jb2RpbmcsIGFuZCBzdHJlYW1zIHRo
ZSByZXN1bHQgdG8gdGhpcyBNZXNzYWdlIG9iamVjdC4KLU1lc3NhZ2UmIE1lc3NhZ2U6Om9wZXJh
dG9yIDw8KGNvbnN0IDo6d3N0cmluZyYgd3N0cikgewotICBpbnRlcm5hbDo6U3RyZWFtV2lkZUNo
YXJzVG9NZXNzYWdlKHdzdHIuY19zdHIoKSwgd3N0ci5sZW5ndGgoKSwgdGhpcyk7Ci0gIHJldHVy
biAqdGhpczsKLX0KLSNlbmRpZiAgLy8gR1RFU1RfSEFTX0dMT0JBTF9XU1RSSU5HCi0KLS8vIEdl
dHMgdGhlIHRleHQgc3RyZWFtZWQgdG8gdGhpcyBvYmplY3Qgc28gZmFyIGFzIGFuIHN0ZDo6c3Ry
aW5nLgotLy8gRWFjaCAnXDAnIGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyIGlzIHJlcGxhY2VkIHdp
dGggIlxcMCIuCi1zdGQ6OnN0cmluZyBNZXNzYWdlOjpHZXRTdHJpbmcoKSBjb25zdCB7Ci0gIHJl
dHVybiBpbnRlcm5hbDo6U3RyaW5nU3RyZWFtVG9TdHJpbmcoc3NfLmdldCgpKTsKLX0KLQotLy8g
QXNzZXJ0aW9uUmVzdWx0IGNvbnN0cnVjdG9ycy4KLS8vIFVzZWQgaW4gRVhQRUNUX1RSVUUvRkFM
U0UoYXNzZXJ0aW9uX3Jlc3VsdCkuCi1Bc3NlcnRpb25SZXN1bHQ6OkFzc2VydGlvblJlc3VsdChj
b25zdCBBc3NlcnRpb25SZXN1bHQmIG90aGVyKQotICAgIDogc3VjY2Vzc18ob3RoZXIuc3VjY2Vz
c18pLAotICAgICAgbWVzc2FnZV8ob3RoZXIubWVzc2FnZV8uZ2V0KCkgIT0gTlVMTCA/Ci0gICAg
ICAgICAgICAgICBuZXcgOjpzdGQ6OnN0cmluZygqb3RoZXIubWVzc2FnZV8pIDoKLSAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PCA6OnN0ZDo6c3RyaW5nKj4oTlVMTCkpIHsKLX0KLQotLy8gU3dh
cHMgdHdvIEFzc2VydGlvblJlc3VsdHMuCi12b2lkIEFzc2VydGlvblJlc3VsdDo6c3dhcChBc3Nl
cnRpb25SZXN1bHQmIG90aGVyKSB7Ci0gIHVzaW5nIHN0ZDo6c3dhcDsKLSAgc3dhcChzdWNjZXNz
Xywgb3RoZXIuc3VjY2Vzc18pOwotICBzd2FwKG1lc3NhZ2VfLCBvdGhlci5tZXNzYWdlXyk7Ci19
Ci0KLS8vIFJldHVybnMgdGhlIGFzc2VydGlvbidzIG5lZ2F0aW9uLiBVc2VkIHdpdGggRVhQRUNU
L0FTU0VSVF9GQUxTRS4KLUFzc2VydGlvblJlc3VsdCBBc3NlcnRpb25SZXN1bHQ6Om9wZXJhdG9y
ISgpIGNvbnN0IHsKLSAgQXNzZXJ0aW9uUmVzdWx0IG5lZ2F0aW9uKCFzdWNjZXNzXyk7Ci0gIGlm
IChtZXNzYWdlXy5nZXQoKSAhPSBOVUxMKQotICAgIG5lZ2F0aW9uIDw8ICptZXNzYWdlXzsKLSAg
cmV0dXJuIG5lZ2F0aW9uOwotfQotCi0vLyBNYWtlcyBhIHN1Y2Nlc3NmdWwgYXNzZXJ0aW9uIHJl
c3VsdC4KLUFzc2VydGlvblJlc3VsdCBBc3NlcnRpb25TdWNjZXNzKCkgewotICByZXR1cm4gQXNz
ZXJ0aW9uUmVzdWx0KHRydWUpOwotfQotCi0vLyBNYWtlcyBhIGZhaWxlZCBhc3NlcnRpb24gcmVz
dWx0LgotQXNzZXJ0aW9uUmVzdWx0IEFzc2VydGlvbkZhaWx1cmUoKSB7Ci0gIHJldHVybiBBc3Nl
cnRpb25SZXN1bHQoZmFsc2UpOwotfQotCi0vLyBNYWtlcyBhIGZhaWxlZCBhc3NlcnRpb24gcmVz
dWx0IHdpdGggdGhlIGdpdmVuIGZhaWx1cmUgbWVzc2FnZS4KLS8vIERlcHJlY2F0ZWQ7IHVzZSBB
c3NlcnRpb25GYWlsdXJlKCkgPDwgbWVzc2FnZS4KLUFzc2VydGlvblJlc3VsdCBBc3NlcnRpb25G
YWlsdXJlKGNvbnN0IE1lc3NhZ2UmIG1lc3NhZ2UpIHsKLSAgcmV0dXJuIEFzc2VydGlvbkZhaWx1
cmUoKSA8PCBtZXNzYWdlOwotfQotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi1uYW1lc3BhY2Ug
ZWRpdF9kaXN0YW5jZSB7Ci1zdGQ6OnZlY3RvcjxFZGl0VHlwZT4gQ2FsY3VsYXRlT3B0aW1hbEVk
aXRzKGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIGxlZnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNpemVfdD4mIHJpZ2h0
KSB7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGRvdWJsZT4gPiBjb3N0cygKLSAgICAgIGxl
ZnQuc2l6ZSgpICsgMSwgc3RkOjp2ZWN0b3I8ZG91YmxlPihyaWdodC5zaXplKCkgKyAxKSk7Ci0g
IHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPEVkaXRUeXBlPiA+IGJlc3RfbW92ZSgKLSAgICAgIGxl
ZnQuc2l6ZSgpICsgMSwgc3RkOjp2ZWN0b3I8RWRpdFR5cGU+KHJpZ2h0LnNpemUoKSArIDEpKTsK
LQotICAvLyBQb3B1bGF0ZSBmb3IgZW1wdHkgcmlnaHQuCi0gIGZvciAoc2l6ZV90IGxfaSA9IDA7
IGxfaSA8IGNvc3RzLnNpemUoKTsgKytsX2kpIHsKLSAgICBjb3N0c1tsX2ldWzBdID0gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihsX2kpOwotICAgIGJlc3RfbW92ZVtsX2ldWzBdID0ga1JlbW92ZTsKLSAg
fQotICAvLyBQb3B1bGF0ZSBmb3IgZW1wdHkgbGVmdC4KLSAgZm9yIChzaXplX3Qgcl9pID0gMTsg
cl9pIDwgY29zdHNbMF0uc2l6ZSgpOyArK3JfaSkgewotICAgIGNvc3RzWzBdW3JfaV0gPSBzdGF0
aWNfY2FzdDxkb3VibGU+KHJfaSk7Ci0gICAgYmVzdF9tb3ZlWzBdW3JfaV0gPSBrQWRkOwotICB9
Ci0KLSAgZm9yIChzaXplX3QgbF9pID0gMDsgbF9pIDwgbGVmdC5zaXplKCk7ICsrbF9pKSB7Ci0g
ICAgZm9yIChzaXplX3Qgcl9pID0gMDsgcl9pIDwgcmlnaHQuc2l6ZSgpOyArK3JfaSkgewotICAg
ICAgaWYgKGxlZnRbbF9pXSA9PSByaWdodFtyX2ldKSB7Ci0gICAgICAgIC8vIEZvdW5kIGEgbWF0
Y2guIENvbnN1bWUgaXQuCi0gICAgICAgIGNvc3RzW2xfaSArIDFdW3JfaSArIDFdID0gY29zdHNb
bF9pXVtyX2ldOwotICAgICAgICBiZXN0X21vdmVbbF9pICsgMV1bcl9pICsgMV0gPSBrTWF0Y2g7
Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICBjb25zdCBkb3VibGUgYWRkID0g
Y29zdHNbbF9pICsgMV1bcl9pXTsKLSAgICAgIGNvbnN0IGRvdWJsZSByZW1vdmUgPSBjb3N0c1ts
X2ldW3JfaSArIDFdOwotICAgICAgY29uc3QgZG91YmxlIHJlcGxhY2UgPSBjb3N0c1tsX2ldW3Jf
aV07Ci0gICAgICBpZiAoYWRkIDwgcmVtb3ZlICYmIGFkZCA8IHJlcGxhY2UpIHsKLSAgICAgICAg
Y29zdHNbbF9pICsgMV1bcl9pICsgMV0gPSBhZGQgKyAxOwotICAgICAgICBiZXN0X21vdmVbbF9p
ICsgMV1bcl9pICsgMV0gPSBrQWRkOwotICAgICAgfSBlbHNlIGlmIChyZW1vdmUgPCBhZGQgJiYg
cmVtb3ZlIDwgcmVwbGFjZSkgewotICAgICAgICBjb3N0c1tsX2kgKyAxXVtyX2kgKyAxXSA9IHJl
bW92ZSArIDE7Ci0gICAgICAgIGJlc3RfbW92ZVtsX2kgKyAxXVtyX2kgKyAxXSA9IGtSZW1vdmU7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBtYWtlIHJlcGxhY2UgYSBsaXR0bGUgbW9y
ZSBleHBlbnNpdmUgdGhhbiBhZGQvcmVtb3ZlIHRvIGxvd2VyCi0gICAgICAgIC8vIHRoZWlyIHBy
aW9yaXR5LgotICAgICAgICBjb3N0c1tsX2kgKyAxXVtyX2kgKyAxXSA9IHJlcGxhY2UgKyAxLjAw
MDAxOwotICAgICAgICBiZXN0X21vdmVbbF9pICsgMV1bcl9pICsgMV0gPSBrUmVwbGFjZTsKLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBSZWNvbnN0cnVjdCB0aGUgYmVzdCBwYXRoLiBXZSBk
byBpdCBpbiByZXZlcnNlIG9yZGVyLgotICBzdGQ6OnZlY3RvcjxFZGl0VHlwZT4gYmVzdF9wYXRo
OwotICBmb3IgKHNpemVfdCBsX2kgPSBsZWZ0LnNpemUoKSwgcl9pID0gcmlnaHQuc2l6ZSgpOyBs
X2kgPiAwIHx8IHJfaSA+IDA7KSB7Ci0gICAgRWRpdFR5cGUgbW92ZSA9IGJlc3RfbW92ZVtsX2ld
W3JfaV07Ci0gICAgYmVzdF9wYXRoLnB1c2hfYmFjayhtb3ZlKTsKLSAgICBsX2kgLT0gbW92ZSAh
PSBrQWRkOwotICAgIHJfaSAtPSBtb3ZlICE9IGtSZW1vdmU7Ci0gIH0KLSAgc3RkOjpyZXZlcnNl
KGJlc3RfcGF0aC5iZWdpbigpLCBiZXN0X3BhdGguZW5kKCkpOwotICByZXR1cm4gYmVzdF9wYXRo
OwotfQotCi1uYW1lc3BhY2UgewotCi0vLyBIZWxwZXIgY2xhc3MgdG8gY29udmVydCBzdHJpbmcg
aW50byBpZHMgd2l0aCBkZWR1cGxpY2F0aW9uLgotY2xhc3MgSW50ZXJuYWxTdHJpbmdzIHsKLSBw
dWJsaWM6Ci0gIHNpemVfdCBHZXRJZChjb25zdCBzdGQ6OnN0cmluZyYgc3RyKSB7Ci0gICAgSWRN
YXA6Oml0ZXJhdG9yIGl0ID0gaWRzXy5maW5kKHN0cik7Ci0gICAgaWYgKGl0ICE9IGlkc18uZW5k
KCkpIHJldHVybiBpdC0+c2Vjb25kOwotICAgIHNpemVfdCBpZCA9IGlkc18uc2l6ZSgpOwotICAg
IHJldHVybiBpZHNfW3N0cl0gPSBpZDsKLSAgfQotCi0gcHJpdmF0ZToKLSAgdHlwZWRlZiBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgc2l6ZV90PiBJZE1hcDsKLSAgSWRNYXAgaWRzXzsKLX07Ci0KLX0g
IC8vIG5hbWVzcGFjZQotCi1zdGQ6OnZlY3RvcjxFZGl0VHlwZT4gQ2FsY3VsYXRlT3B0aW1hbEVk
aXRzKAotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgbGVmdCwKLSAgICBjb25z
dCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHJpZ2h0KSB7Ci0gIHN0ZDo6dmVjdG9yPHNpemVf
dD4gbGVmdF9pZHMsIHJpZ2h0X2lkczsKLSAgewotICAgIEludGVybmFsU3RyaW5ncyBpbnRlcm5f
dGFibGU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZWZ0LnNpemUoKTsgKytpKSB7Ci0g
ICAgICBsZWZ0X2lkcy5wdXNoX2JhY2soaW50ZXJuX3RhYmxlLkdldElkKGxlZnRbaV0pKTsKLSAg
ICB9Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByaWdodC5zaXplKCk7ICsraSkgewotICAg
ICAgcmlnaHRfaWRzLnB1c2hfYmFjayhpbnRlcm5fdGFibGUuR2V0SWQocmlnaHRbaV0pKTsKLSAg
ICB9Ci0gIH0KLSAgcmV0dXJuIENhbGN1bGF0ZU9wdGltYWxFZGl0cyhsZWZ0X2lkcywgcmlnaHRf
aWRzKTsKLX0KLQotbmFtZXNwYWNlIHsKLQotLy8gSGVscGVyIGNsYXNzIHRoYXQgaG9sZHMgdGhl
IHN0YXRlIGZvciBvbmUgaHVuayBhbmQgcHJpbnRzIGl0IG91dCB0byB0aGUKLS8vIHN0cmVhbS4K
LS8vIEl0IHJlb3JkZXJzIGFkZHMvcmVtb3ZlcyB3aGVuIHBvc3NpYmxlIHRvIGdyb3VwIGFsbCBy
ZW1vdmVzIGJlZm9yZSBhbGwKLS8vIGFkZHMuIEl0IGFsc28gYWRkcyB0aGUgaHVuayBoZWFkZXIg
YmVmb3JlIHByaW50aW50IGludG8gdGhlIHN0cmVhbS4KLWNsYXNzIEh1bmsgewotIHB1YmxpYzoK
LSAgSHVuayhzaXplX3QgbGVmdF9zdGFydCwgc2l6ZV90IHJpZ2h0X3N0YXJ0KQotICAgICAgOiBs
ZWZ0X3N0YXJ0XyhsZWZ0X3N0YXJ0KSwKLSAgICAgICAgcmlnaHRfc3RhcnRfKHJpZ2h0X3N0YXJ0
KSwKLSAgICAgICAgYWRkc18oKSwKLSAgICAgICAgcmVtb3Zlc18oKSwKLSAgICAgICAgY29tbW9u
XygpIHt9Ci0KLSAgdm9pZCBQdXNoTGluZShjaGFyIGVkaXQsIGNvbnN0IGNoYXIqIGxpbmUpIHsK
LSAgICBzd2l0Y2ggKGVkaXQpIHsKLSAgICAgIGNhc2UgJyAnOgotICAgICAgICArK2NvbW1vbl87
Ci0gICAgICAgIEZsdXNoRWRpdHMoKTsKLSAgICAgICAgaHVua18ucHVzaF9iYWNrKHN0ZDo6bWFr
ZV9wYWlyKCcgJywgbGluZSkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJy0nOgotICAg
ICAgICArK3JlbW92ZXNfOwotICAgICAgICBodW5rX3JlbW92ZXNfLnB1c2hfYmFjayhzdGQ6Om1h
a2VfcGFpcignLScsIGxpbmUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICcrJzoKLSAg
ICAgICAgKythZGRzXzsKLSAgICAgICAgaHVua19hZGRzXy5wdXNoX2JhY2soc3RkOjptYWtlX3Bh
aXIoJysnLCBsaW5lKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIHZvaWQgUHJp
bnRUbyhzdGQ6Om9zdHJlYW0qIG9zKSB7Ci0gICAgUHJpbnRIZWFkZXIob3MpOwotICAgIEZsdXNo
RWRpdHMoKTsKLSAgICBmb3IgKHN0ZDo6bGlzdDxzdGQ6OnBhaXI8Y2hhciwgY29uc3QgY2hhcio+
ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0KLSAgICAgICAgICAgICBodW5rXy5iZWdpbigpOwotICAg
ICAgICAgaXQgIT0gaHVua18uZW5kKCk7ICsraXQpIHsKLSAgICAgICpvcyA8PCBpdC0+Zmlyc3Qg
PDwgaXQtPnNlY29uZCA8PCAiXG4iOwotICAgIH0KLSAgfQotCi0gIGJvb2wgaGFzX2VkaXRzKCkg
Y29uc3QgeyByZXR1cm4gYWRkc18gfHwgcmVtb3Zlc187IH0KLQotIHByaXZhdGU6Ci0gIHZvaWQg
Rmx1c2hFZGl0cygpIHsKLSAgICBodW5rXy5zcGxpY2UoaHVua18uZW5kKCksIGh1bmtfcmVtb3Zl
c18pOwotICAgIGh1bmtfLnNwbGljZShodW5rXy5lbmQoKSwgaHVua19hZGRzXyk7Ci0gIH0KLQot
ICAvLyBQcmludCBhIHVuaWZpZWQgZGlmZiBoZWFkZXIgZm9yIG9uZSBodW5rLgotICAvLyBUaGUg
Zm9ybWF0IGlzCi0gIC8vICAgIkBAIC08bGVmdF9zdGFydD4sPGxlZnRfbGVuZ3RoPiArPHJpZ2h0
X3N0YXJ0Piw8cmlnaHRfbGVuZ3RoPiBAQCIKLSAgLy8gd2hlcmUgdGhlIGxlZnQvcmlnaHQgcGFy
dHMgYXJlIG9tbWl0dGVkIGlmIHVubmVjZXNzYXJ5LgotICB2b2lkIFByaW50SGVhZGVyKHN0ZDo6
b3N0cmVhbSogc3MpIGNvbnN0IHsKLSAgICAqc3MgPDwgIkBAICI7Ci0gICAgaWYgKHJlbW92ZXNf
KSB7Ci0gICAgICAqc3MgPDwgIi0iIDw8IGxlZnRfc3RhcnRfIDw8ICIsIiA8PCAocmVtb3Zlc18g
KyBjb21tb25fKTsKLSAgICB9Ci0gICAgaWYgKHJlbW92ZXNfICYmIGFkZHNfKSB7Ci0gICAgICAq
c3MgPDwgIiAiOwotICAgIH0KLSAgICBpZiAoYWRkc18pIHsKLSAgICAgICpzcyA8PCAiKyIgPDwg
cmlnaHRfc3RhcnRfIDw8ICIsIiA8PCAoYWRkc18gKyBjb21tb25fKTsKLSAgICB9Ci0gICAgKnNz
IDw8ICIgQEBcbiI7Ci0gIH0KLQotICBzaXplX3QgbGVmdF9zdGFydF8sIHJpZ2h0X3N0YXJ0XzsK
LSAgc2l6ZV90IGFkZHNfLCByZW1vdmVzXywgY29tbW9uXzsKLSAgc3RkOjpsaXN0PHN0ZDo6cGFp
cjxjaGFyLCBjb25zdCBjaGFyKj4gPiBodW5rXywgaHVua19hZGRzXywgaHVua19yZW1vdmVzXzsK
LX07Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyBDcmVhdGUgYSBsaXN0IG9mIGRpZmYgaHVua3Mg
aW4gVW5pZmllZCBkaWZmIGZvcm1hdC4KLS8vIEVhY2ggaHVuayBoYXMgYSBoZWFkZXIgZ2VuZXJh
dGVkIGJ5IFByaW50SGVhZGVyIGFib3ZlIHBsdXMgYSBib2R5IHdpdGgKLS8vIGxpbmVzIHByZWZp
eGVkIHdpdGggJyAnIGZvciBubyBjaGFuZ2UsICctJyBmb3IgZGVsZXRpb24gYW5kICcrJyBmb3IK
LS8vIGFkZGl0aW9uLgotLy8gJ2NvbnRleHQnIHJlcHJlc2VudHMgdGhlIGRlc2lyZWQgdW5jaGFu
Z2VkIHByZWZpeC9zdWZmaXggYXJvdW5kIHRoZSBkaWZmLgotLy8gSWYgdHdvIGh1bmtzIGFyZSBj
bG9zZSBlbm91Z2ggdGhhdCB0aGVpciBjb250ZXh0cyBvdmVybGFwLCB0aGVuIHRoZXkgYXJlCi0v
LyBqb2luZWQgaW50byBvbmUgaHVuay4KLXN0ZDo6c3RyaW5nIENyZWF0ZVVuaWZpZWREaWZmKGNv
bnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgbGVmdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgcmlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29udGV4dCkgewotICBjb25zdCBzdGQ6OnZl
Y3RvcjxFZGl0VHlwZT4gZWRpdHMgPSBDYWxjdWxhdGVPcHRpbWFsRWRpdHMobGVmdCwgcmlnaHQp
OwotCi0gIHNpemVfdCBsX2kgPSAwLCByX2kgPSAwLCBlZGl0X2kgPSAwOwotICBzdGQ6OnN0cmlu
Z3N0cmVhbSBzczsKLSAgd2hpbGUgKGVkaXRfaSA8IGVkaXRzLnNpemUoKSkgewotICAgIC8vIEZp
bmQgZmlyc3QgZWRpdC4KLSAgICB3aGlsZSAoZWRpdF9pIDwgZWRpdHMuc2l6ZSgpICYmIGVkaXRz
W2VkaXRfaV0gPT0ga01hdGNoKSB7Ci0gICAgICArK2xfaTsKLSAgICAgICsrcl9pOwotICAgICAg
KytlZGl0X2k7Ci0gICAgfQotCi0gICAgLy8gRmluZCB0aGUgZmlyc3QgbGluZSB0byBpbmNsdWRl
IGluIHRoZSBodW5rLgotICAgIGNvbnN0IHNpemVfdCBwcmVmaXhfY29udGV4dCA9IHN0ZDo6bWlu
KGxfaSwgY29udGV4dCk7Ci0gICAgSHVuayBodW5rKGxfaSAtIHByZWZpeF9jb250ZXh0ICsgMSwg
cl9pIC0gcHJlZml4X2NvbnRleHQgKyAxKTsKLSAgICBmb3IgKHNpemVfdCBpID0gcHJlZml4X2Nv
bnRleHQ7IGkgPiAwOyAtLWkpIHsKLSAgICAgIGh1bmsuUHVzaExpbmUoJyAnLCBsZWZ0W2xfaSAt
IGldLmNfc3RyKCkpOwotICAgIH0KLQotICAgIC8vIEl0ZXJhdGUgdGhlIGVkaXRzIHVudGlsIHdl
IGZvdW5kIGVub3VnaCBzdWZmaXggZm9yIHRoZSBodW5rIG9yIHRoZSBpbnB1dAotICAgIC8vIGlz
IG92ZXIuCi0gICAgc2l6ZV90IG5fc3VmZml4ID0gMDsKLSAgICBmb3IgKDsgZWRpdF9pIDwgZWRp
dHMuc2l6ZSgpOyArK2VkaXRfaSkgewotICAgICAgaWYgKG5fc3VmZml4ID49IGNvbnRleHQpIHsK
LSAgICAgICAgLy8gQ29udGludWUgb25seSBpZiB0aGUgbmV4dCBodW5rIGlzIHZlcnkgY2xvc2Uu
Ci0gICAgICAgIHN0ZDo6dmVjdG9yPEVkaXRUeXBlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBlZGl0
cy5iZWdpbigpICsgZWRpdF9pOwotICAgICAgICB3aGlsZSAoaXQgIT0gZWRpdHMuZW5kKCkgJiYg
Kml0ID09IGtNYXRjaCkgKytpdDsKLSAgICAgICAgaWYgKGl0ID09IGVkaXRzLmVuZCgpIHx8IChp
dCAtIGVkaXRzLmJlZ2luKCkpIC0gZWRpdF9pID49IGNvbnRleHQpIHsKLSAgICAgICAgICAvLyBU
aGVyZSBpcyBubyBuZXh0IGVkaXQgb3IgaXQgaXMgdG9vIGZhciBhd2F5LgotICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIEVkaXRUeXBlIGVkaXQgPSBlZGl0c1tl
ZGl0X2ldOwotICAgICAgLy8gUmVzZXQgY291bnQgd2hlbiBhIG5vbiBtYXRjaCBpcyBmb3VuZC4K
LSAgICAgIG5fc3VmZml4ID0gZWRpdCA9PSBrTWF0Y2ggPyBuX3N1ZmZpeCArIDEgOiAwOwotCi0g
ICAgICBpZiAoZWRpdCA9PSBrTWF0Y2ggfHwgZWRpdCA9PSBrUmVtb3ZlIHx8IGVkaXQgPT0ga1Jl
cGxhY2UpIHsKLSAgICAgICAgaHVuay5QdXNoTGluZShlZGl0ID09IGtNYXRjaCA/ICcgJyA6ICct
JywgbGVmdFtsX2ldLmNfc3RyKCkpOwotICAgICAgfQotICAgICAgaWYgKGVkaXQgPT0ga0FkZCB8
fCBlZGl0ID09IGtSZXBsYWNlKSB7Ci0gICAgICAgIGh1bmsuUHVzaExpbmUoJysnLCByaWdodFty
X2ldLmNfc3RyKCkpOwotICAgICAgfQotCi0gICAgICAvLyBBZHZhbmNlIGluZGljZXMsIGRlcGVu
ZGluZyBvbiBlZGl0IHR5cGUuCi0gICAgICBsX2kgKz0gZWRpdCAhPSBrQWRkOwotICAgICAgcl9p
ICs9IGVkaXQgIT0ga1JlbW92ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWh1bmsuaGFzX2VkaXRzKCkp
IHsKLSAgICAgIC8vIFdlIGFyZSBkb25lLiBXZSBkb24ndCB3YW50IHRoaXMgaHVuay4KLSAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGh1bmsuUHJpbnRUbygmc3MpOwotICB9Ci0gIHJldHVybiBz
cy5zdHIoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGVkaXRfZGlzdGFuY2UKLQotbmFtZXNwYWNl
IHsKLQotLy8gVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWVzIHJlY2VpdmVk
IGluIEVxRmFpbHVyZSgpIGFyZSBhbHJlYWR5Ci0vLyBlc2NhcGVkLiBTcGxpdCB0aGVtIG9uIGVz
Y2FwZWQgJ1xuJyBib3VuZGFyaWVzLiBMZWF2ZSBhbGwgb3RoZXIgZXNjYXBlZAotLy8gY2hhcmFj
dGVycyB0aGUgc2FtZS4KLXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBTcGxpdEVzY2FwZWRTdHJp
bmcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikgewotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
bGluZXM7Ci0gIHNpemVfdCBzdGFydCA9IDAsIGVuZCA9IHN0ci5zaXplKCk7Ci0gIGlmIChlbmQg
PiAyICYmIHN0clswXSA9PSAnIicgJiYgc3RyW2VuZCAtIDFdID09ICciJykgewotICAgICsrc3Rh
cnQ7Ci0gICAgLS1lbmQ7Ci0gIH0KLSAgYm9vbCBlc2NhcGVkID0gZmFsc2U7Ci0gIGZvciAoc2l6
ZV90IGkgPSBzdGFydDsgaSArIDEgPCBlbmQ7ICsraSkgewotICAgIGlmIChlc2NhcGVkKSB7Ci0g
ICAgICBlc2NhcGVkID0gZmFsc2U7Ci0gICAgICBpZiAoc3RyW2ldID09ICduJykgewotICAgICAg
ICBsaW5lcy5wdXNoX2JhY2soc3RyLnN1YnN0cihzdGFydCwgaSAtIHN0YXJ0IC0gMSkpOwotICAg
ICAgICBzdGFydCA9IGkgKyAxOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBlc2NhcGVk
ID0gc3RyW2ldID09ICdcXCc7Ci0gICAgfQotICB9Ci0gIGxpbmVzLnB1c2hfYmFjayhzdHIuc3Vi
c3RyKHN0YXJ0LCBlbmQgLSBzdGFydCkpOwotICByZXR1cm4gbGluZXM7Ci19Ci0KLX0gIC8vIG5h
bWVzcGFjZQotCi0vLyBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBtZXNzYWdlIGZvciBhbiBl
cXVhbGl0eSBhc3NlcnRpb24KLS8vIChlLmcuIEFTU0VSVF9FUSwgRVhQRUNUX1NUUkVRLCBldGMp
IGZhaWx1cmUuCi0vLwotLy8gVGhlIGZpcnN0IGZvdXIgcGFyYW1ldGVycyBhcmUgdGhlIGV4cHJl
c3Npb25zIHVzZWQgaW4gdGhlIGFzc2VydGlvbgotLy8gYW5kIHRoZWlyIHZhbHVlcywgYXMgc3Ry
aW5ncy4gIEZvciBleGFtcGxlLCBmb3IgQVNTRVJUX0VRKGZvbywgYmFyKQotLy8gd2hlcmUgZm9v
IGlzIDUgYW5kIGJhciBpcyA2LCB3ZSBoYXZlOgotLy8KLS8vICAgbGhzX2V4cHJlc3Npb246ICJm
b28iCi0vLyAgIHJoc19leHByZXNzaW9uOiAiYmFyIgotLy8gICBsaHNfdmFsdWU6ICAgICAgIjUi
Ci0vLyAgIHJoc192YWx1ZTogICAgICAiNiIKLS8vCi0vLyBUaGUgaWdub3JpbmdfY2FzZSBwYXJh
bWV0ZXIgaXMgdHJ1ZSBpZmYgdGhlIGFzc2VydGlvbiBpcyBhCi0vLyAqX1NUUkNBU0VFUSouICBX
aGVuIGl0J3MgdHJ1ZSwgdGhlIHN0cmluZyAiSWdub3JpbmcgY2FzZSIgd2lsbAotLy8gYmUgaW5z
ZXJ0ZWQgaW50byB0aGUgbWVzc2FnZS4KLUFzc2VydGlvblJlc3VsdCBFcUZhaWx1cmUoY29uc3Qg
Y2hhciogbGhzX2V4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIHJoc19leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyYgbGhzX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyYgcmhzX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9y
aW5nX2Nhc2UpIHsKLSAgTWVzc2FnZSBtc2c7Ci0gIG1zZyA8PCAiICAgICAgRXhwZWN0ZWQ6ICIg
PDwgbGhzX2V4cHJlc3Npb247Ci0gIGlmIChsaHNfdmFsdWUgIT0gbGhzX2V4cHJlc3Npb24pIHsK
LSAgICBtc2cgPDwgIlxuICAgICAgV2hpY2ggaXM6ICIgPDwgbGhzX3ZhbHVlOwotICB9Ci0gIG1z
ZyA8PCAiXG5UbyBiZSBlcXVhbCB0bzogIiA8PCByaHNfZXhwcmVzc2lvbjsKLSAgaWYgKHJoc192
YWx1ZSAhPSByaHNfZXhwcmVzc2lvbikgewotICAgIG1zZyA8PCAiXG4gICAgICBXaGljaCBpczog
IiA8PCByaHNfdmFsdWU7Ci0gIH0KLQotICBpZiAoaWdub3JpbmdfY2FzZSkgewotICAgIG1zZyA8
PCAiXG5JZ25vcmluZyBjYXNlIjsKLSAgfQotCi0gIGlmICghbGhzX3ZhbHVlLmVtcHR5KCkgJiYg
IXJoc192YWx1ZS5lbXB0eSgpKSB7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+
IGxoc19saW5lcyA9Ci0gICAgICAgIFNwbGl0RXNjYXBlZFN0cmluZyhsaHNfdmFsdWUpOwotICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByaHNfbGluZXMgPQotICAgICAgICBTcGxp
dEVzY2FwZWRTdHJpbmcocmhzX3ZhbHVlKTsKLSAgICBpZiAobGhzX2xpbmVzLnNpemUoKSA+IDEg
fHwgcmhzX2xpbmVzLnNpemUoKSA+IDEpIHsKLSAgICAgIG1zZyA8PCAiXG5XaXRoIGRpZmY6XG4i
Ci0gICAgICAgICAgPDwgZWRpdF9kaXN0YW5jZTo6Q3JlYXRlVW5pZmllZERpZmYobGhzX2xpbmVz
LCByaHNfbGluZXMpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBBc3NlcnRpb25GYWlsdXJlKCkg
PDwgbXNnOwotfQotCi0vLyBDb25zdHJ1Y3RzIGEgZmFpbHVyZSBtZXNzYWdlIGZvciBCb29sZWFu
IGFzc2VydGlvbnMgc3VjaCBhcyBFWFBFQ1RfVFJVRS4KLXN0ZDo6c3RyaW5nIEdldEJvb2xBc3Nl
cnRpb25GYWlsdXJlTWVzc2FnZSgKLSAgICBjb25zdCBBc3NlcnRpb25SZXN1bHQmIGFzc2VydGlv
bl9yZXN1bHQsCi0gICAgY29uc3QgY2hhciogZXhwcmVzc2lvbl90ZXh0LAotICAgIGNvbnN0IGNo
YXIqIGFjdHVhbF9wcmVkaWNhdGVfdmFsdWUsCi0gICAgY29uc3QgY2hhciogZXhwZWN0ZWRfcHJl
ZGljYXRlX3ZhbHVlKSB7Ci0gIGNvbnN0IGNoYXIqIGFjdHVhbF9tZXNzYWdlID0gYXNzZXJ0aW9u
X3Jlc3VsdC5tZXNzYWdlKCk7Ci0gIE1lc3NhZ2UgbXNnOwotICBtc2cgPDwgIlZhbHVlIG9mOiAi
IDw8IGV4cHJlc3Npb25fdGV4dAotICAgICAgPDwgIlxuICBBY3R1YWw6ICIgPDwgYWN0dWFsX3By
ZWRpY2F0ZV92YWx1ZTsKLSAgaWYgKGFjdHVhbF9tZXNzYWdlWzBdICE9ICdcMCcpCi0gICAgbXNn
IDw8ICIgKCIgPDwgYWN0dWFsX21lc3NhZ2UgPDwgIikiOwotICBtc2cgPDwgIlxuRXhwZWN0ZWQ6
ICIgPDwgZXhwZWN0ZWRfcHJlZGljYXRlX3ZhbHVlOwotICByZXR1cm4gbXNnLkdldFN0cmluZygp
OwotfQotCi0vLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGltcGxlbWVudGluZyBBU1NFUlRfTkVBUi4K
LUFzc2VydGlvblJlc3VsdCBEb3VibGVOZWFyUHJlZEZvcm1hdChjb25zdCBjaGFyKiBleHByMSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHByMiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhYnNfZXJy
b3JfZXhwciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdmFs
MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdmFsMiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYWJzX2Vycm9yKSB7Ci0g
IGNvbnN0IGRvdWJsZSBkaWZmID0gZmFicyh2YWwxIC0gdmFsMik7Ci0gIGlmIChkaWZmIDw9IGFi
c19lcnJvcikgcmV0dXJuIEFzc2VydGlvblN1Y2Nlc3MoKTsKLQotICAvLyBUT0RPKHdhbik6IGRv
IG5vdCBwcmludCB0aGUgdmFsdWUgb2YgYW4gZXhwcmVzc2lvbiBpZiBpdCdzCi0gIC8vIGFscmVh
ZHkgYSBsaXRlcmFsLgotICByZXR1cm4gQXNzZXJ0aW9uRmFpbHVyZSgpCi0gICAgICA8PCAiVGhl
IGRpZmZlcmVuY2UgYmV0d2VlbiAiIDw8IGV4cHIxIDw8ICIgYW5kICIgPDwgZXhwcjIKLSAgICAg
IDw8ICIgaXMgIiA8PCBkaWZmIDw8ICIsIHdoaWNoIGV4Y2VlZHMgIiA8PCBhYnNfZXJyb3JfZXhw
ciA8PCAiLCB3aGVyZVxuIgotICAgICAgPDwgZXhwcjEgPDwgIiBldmFsdWF0ZXMgdG8gIiA8PCB2
YWwxIDw8ICIsXG4iCi0gICAgICA8PCBleHByMiA8PCAiIGV2YWx1YXRlcyB0byAiIDw8IHZhbDIg
PDwgIiwgYW5kXG4iCi0gICAgICA8PCBhYnNfZXJyb3JfZXhwciA8PCAiIGV2YWx1YXRlcyB0byAi
IDw8IGFic19lcnJvciA8PCAiLiI7Ci19Ci0KLQotLy8gSGVscGVyIHRlbXBsYXRlIGZvciBpbXBs
ZW1lbnRpbmcgRmxvYXRMRSgpIGFuZCBEb3VibGVMRSgpLgotdGVtcGxhdGUgPHR5cGVuYW1lIFJh
d1R5cGU+Ci1Bc3NlcnRpb25SZXN1bHQgRmxvYXRpbmdQb2ludExFKGNvbnN0IGNoYXIqIGV4cHIx
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHByMiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF3VHlwZSB2YWwxLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSYXdUeXBlIHZhbDIpIHsKLSAgLy8gUmV0dXJucyBzdWNjZXNz
IGlmIHZhbDEgaXMgbGVzcyB0aGFuIHZhbDIsCi0gIGlmICh2YWwxIDwgdmFsMikgewotICAgIHJl
dHVybiBBc3NlcnRpb25TdWNjZXNzKCk7Ci0gIH0KLQotICAvLyBvciBpZiB2YWwxIGlzIGFsbW9z
dCBlcXVhbCB0byB2YWwyLgotICBjb25zdCBGbG9hdGluZ1BvaW50PFJhd1R5cGU+IGxocyh2YWwx
KSwgcmhzKHZhbDIpOwotICBpZiAobGhzLkFsbW9zdEVxdWFscyhyaHMpKSB7Ci0gICAgcmV0dXJu
IEFzc2VydGlvblN1Y2Nlc3MoKTsKLSAgfQotCi0gIC8vIE5vdGUgdGhhdCB0aGUgYWJvdmUgdHdv
IGNoZWNrcyB3aWxsIGJvdGggZmFpbCBpZiBlaXRoZXIgdmFsMSBvcgotICAvLyB2YWwyIGlzIE5h
TiwgYXMgdGhlIElFRUUgZmxvYXRpbmctcG9pbnQgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdAotICAv
LyBhbnkgcHJlZGljYXRlIGludm9sdmluZyBhIE5hTiBtdXN0IHJldHVybiBmYWxzZS4KLQotICA6
OnN0ZDo6c3RyaW5nc3RyZWFtIHZhbDFfc3M7Ci0gIHZhbDFfc3MgPDwgc3RkOjpzZXRwcmVjaXNp
b24oc3RkOjpudW1lcmljX2xpbWl0czxSYXdUeXBlPjo6ZGlnaXRzMTAgKyAyKQotICAgICAgICAg
IDw8IHZhbDE7Ci0KLSAgOjpzdGQ6OnN0cmluZ3N0cmVhbSB2YWwyX3NzOwotICB2YWwyX3NzIDw8
IHN0ZDo6c2V0cHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8UmF3VHlwZT46OmRpZ2l0czEw
ICsgMikKLSAgICAgICAgICA8PCB2YWwyOwotCi0gIHJldHVybiBBc3NlcnRpb25GYWlsdXJlKCkK
LSAgICAgIDw8ICJFeHBlY3RlZDogKCIgPDwgZXhwcjEgPDwgIikgPD0gKCIgPDwgZXhwcjIgPDwg
IilcbiIKLSAgICAgIDw8ICIgIEFjdHVhbDogIiA8PCBTdHJpbmdTdHJlYW1Ub1N0cmluZygmdmFs
MV9zcykgPDwgIiB2cyAiCi0gICAgICA8PCBTdHJpbmdTdHJlYW1Ub1N0cmluZygmdmFsMl9zcyk7
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotCi0vLyBBc3NlcnRzIHRoYXQgdmFsMSBp
cyBsZXNzIHRoYW4sIG9yIGFsbW9zdCBlcXVhbCB0bywgdmFsMi4gIEZhaWxzCi0vLyBvdGhlcndp
c2UuICBJbiBwYXJ0aWN1bGFyLCBpdCBmYWlscyBpZiBlaXRoZXIgdmFsMSBvciB2YWwyIGlzIE5h
Ti4KLUFzc2VydGlvblJlc3VsdCBGbG9hdExFKGNvbnN0IGNoYXIqIGV4cHIxLCBjb25zdCBjaGFy
KiBleHByMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZhbDEsIGZsb2F0IHZhbDIp
IHsKLSAgcmV0dXJuIGludGVybmFsOjpGbG9hdGluZ1BvaW50TEU8ZmxvYXQ+KGV4cHIxLCBleHBy
MiwgdmFsMSwgdmFsMik7Ci19Ci0KLS8vIEFzc2VydHMgdGhhdCB2YWwxIGlzIGxlc3MgdGhhbiwg
b3IgYWxtb3N0IGVxdWFsIHRvLCB2YWwyLiAgRmFpbHMKLS8vIG90aGVyd2lzZS4gIEluIHBhcnRp
Y3VsYXIsIGl0IGZhaWxzIGlmIGVpdGhlciB2YWwxIG9yIHZhbDIgaXMgTmFOLgotQXNzZXJ0aW9u
UmVzdWx0IERvdWJsZUxFKGNvbnN0IGNoYXIqIGV4cHIxLCBjb25zdCBjaGFyKiBleHByMiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdmFsMSwgZG91YmxlIHZhbDIpIHsKLSAgcmV0
dXJuIGludGVybmFsOjpGbG9hdGluZ1BvaW50TEU8ZG91YmxlPihleHByMSwgZXhwcjIsIHZhbDEs
IHZhbDIpOwotfQotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi0vLyBUaGUgaGVscGVyIGZ1bmN0
aW9uIGZvciB7QVNTRVJUfEVYUEVDVH1fRVEgd2l0aCBpbnQgb3IgZW51bQotLy8gYXJndW1lbnRz
LgotQXNzZXJ0aW9uUmVzdWx0IENtcEhlbHBlckVRKGNvbnN0IGNoYXIqIGxoc19leHByZXNzaW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJoc19leHByZXNzaW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ2dlc3RJbnQgbGhzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJpZ2dlc3RJbnQgcmhzKSB7Ci0gIGlmIChsaHMgPT0gcmhzKSB7
Ci0gICAgcmV0dXJuIEFzc2VydGlvblN1Y2Nlc3MoKTsKLSAgfQotCi0gIHJldHVybiBFcUZhaWx1
cmUobGhzX2V4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgcmhzX2V4cHJlc3Npb24sCi0g
ICAgICAgICAgICAgICAgICAgRm9ybWF0Rm9yQ29tcGFyaXNvbkZhaWx1cmVNZXNzYWdlKGxocywg
cmhzKSwKLSAgICAgICAgICAgICAgICAgICBGb3JtYXRGb3JDb21wYXJpc29uRmFpbHVyZU1lc3Nh
Z2UocmhzLCBsaHMpLAotICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKLX0KLQotLy8gQSBtYWNy
byBmb3IgaW1wbGVtZW50aW5nIHRoZSBoZWxwZXIgZnVuY3Rpb25zIG5lZWRlZCB0byBpbXBsZW1l
bnQKLS8vIEFTU0VSVF8/PyBhbmQgRVhQRUNUXz8/IHdpdGggaW50ZWdlciBvciBlbnVtIGFyZ3Vt
ZW50cy4gIEl0IGlzIGhlcmUKLS8vIGp1c3QgdG8gYXZvaWQgY29weS1hbmQtcGFzdGUgb2Ygc2lt
aWxhciBjb2RlLgotI2RlZmluZSBHVEVTVF9JTVBMX0NNUF9IRUxQRVJfKG9wX25hbWUsIG9wKVwK
LUFzc2VydGlvblJlc3VsdCBDbXBIZWxwZXIjI29wX25hbWUoY29uc3QgY2hhciogZXhwcjEsIGNv
bnN0IGNoYXIqIGV4cHIyLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJp
Z2dlc3RJbnQgdmFsMSwgQmlnZ2VzdEludCB2YWwyKSB7XAotICBpZiAodmFsMSBvcCB2YWwyKSB7
XAotICAgIHJldHVybiBBc3NlcnRpb25TdWNjZXNzKCk7XAotICB9IGVsc2Uge1wKLSAgICByZXR1
cm4gQXNzZXJ0aW9uRmFpbHVyZSgpIFwKLSAgICAgICAgPDwgIkV4cGVjdGVkOiAoIiA8PCBleHBy
MSA8PCAiKSAiICNvcCAiICgiIDw8IGV4cHIyXAotICAgICAgICA8PCAiKSwgYWN0dWFsOiAiIDw8
IEZvcm1hdEZvckNvbXBhcmlzb25GYWlsdXJlTWVzc2FnZSh2YWwxLCB2YWwyKVwKLSAgICAgICAg
PDwgIiB2cyAiIDw8IEZvcm1hdEZvckNvbXBhcmlzb25GYWlsdXJlTWVzc2FnZSh2YWwyLCB2YWwx
KTtcCi0gIH1cCi19Ci0KLS8vIEltcGxlbWVudHMgdGhlIGhlbHBlciBmdW5jdGlvbiBmb3Ige0FT
U0VSVHxFWFBFQ1R9X05FIHdpdGggaW50IG9yCi0vLyBlbnVtIGFyZ3VtZW50cy4KLUdURVNUX0lN
UExfQ01QX0hFTFBFUl8oTkUsICE9KQotLy8gSW1wbGVtZW50cyB0aGUgaGVscGVyIGZ1bmN0aW9u
IGZvciB7QVNTRVJUfEVYUEVDVH1fTEUgd2l0aCBpbnQgb3IKLS8vIGVudW0gYXJndW1lbnRzLgot
R1RFU1RfSU1QTF9DTVBfSEVMUEVSXyhMRSwgPD0pCi0vLyBJbXBsZW1lbnRzIHRoZSBoZWxwZXIg
ZnVuY3Rpb24gZm9yIHtBU1NFUlR8RVhQRUNUfV9MVCB3aXRoIGludCBvcgotLy8gZW51bSBhcmd1
bWVudHMuCi1HVEVTVF9JTVBMX0NNUF9IRUxQRVJfKExULCA8ICkKLS8vIEltcGxlbWVudHMgdGhl
IGhlbHBlciBmdW5jdGlvbiBmb3Ige0FTU0VSVHxFWFBFQ1R9X0dFIHdpdGggaW50IG9yCi0vLyBl
bnVtIGFyZ3VtZW50cy4KLUdURVNUX0lNUExfQ01QX0hFTFBFUl8oR0UsID49KQotLy8gSW1wbGVt
ZW50cyB0aGUgaGVscGVyIGZ1bmN0aW9uIGZvciB7QVNTRVJUfEVYUEVDVH1fR1Qgd2l0aCBpbnQg
b3IKLS8vIGVudW0gYXJndW1lbnRzLgotR1RFU1RfSU1QTF9DTVBfSEVMUEVSXyhHVCwgPiApCi0K
LSN1bmRlZiBHVEVTVF9JTVBMX0NNUF9IRUxQRVJfCi0KLS8vIFRoZSBoZWxwZXIgZnVuY3Rpb24g
Zm9yIHtBU1NFUlR8RVhQRUNUfV9TVFJFUS4KLUFzc2VydGlvblJlc3VsdCBDbXBIZWxwZXJTVFJF
UShjb25zdCBjaGFyKiBsaHNfZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiByaHNfZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogcmhzKSB7Ci0gIGlmIChTdHJpbmc6OkNTdHJpbmdFcXVhbHMobGhzLCByaHMp
KSB7Ci0gICAgcmV0dXJuIEFzc2VydGlvblN1Y2Nlc3MoKTsKLSAgfQotCi0gIHJldHVybiBFcUZh
aWx1cmUobGhzX2V4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgcmhzX2V4cHJlc3Npb24s
Ci0gICAgICAgICAgICAgICAgICAgUHJpbnRUb1N0cmluZyhsaHMpLAotICAgICAgICAgICAgICAg
ICAgIFByaW50VG9TdHJpbmcocmhzKSwKLSAgICAgICAgICAgICAgICAgICBmYWxzZSk7Ci19Ci0K
LS8vIFRoZSBoZWxwZXIgZnVuY3Rpb24gZm9yIHtBU1NFUlR8RVhQRUNUfV9TVFJDQVNFRVEuCi1B
c3NlcnRpb25SZXN1bHQgQ21wSGVscGVyU1RSQ0FTRUVRKGNvbnN0IGNoYXIqIGxoc19leHByZXNz
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByaHNf
ZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogbGhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBy
aHMpIHsKLSAgaWYgKFN0cmluZzo6Q2FzZUluc2Vuc2l0aXZlQ1N0cmluZ0VxdWFscyhsaHMsIHJo
cykpIHsKLSAgICByZXR1cm4gQXNzZXJ0aW9uU3VjY2VzcygpOwotICB9Ci0KLSAgcmV0dXJuIEVx
RmFpbHVyZShsaHNfZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICByaHNfZXhwcmVzc2lv
biwKLSAgICAgICAgICAgICAgICAgICBQcmludFRvU3RyaW5nKGxocyksCi0gICAgICAgICAgICAg
ICAgICAgUHJpbnRUb1N0cmluZyhyaHMpLAotICAgICAgICAgICAgICAgICAgIHRydWUpOwotfQot
Ci0vLyBUaGUgaGVscGVyIGZ1bmN0aW9uIGZvciB7QVNTRVJUfEVYUEVDVH1fU1RSTkUuCi1Bc3Nl
cnRpb25SZXN1bHQgQ21wSGVscGVyU1RSTkUoY29uc3QgY2hhciogczFfZXhwcmVzc2lvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzMl9leHByZXNzaW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHMxLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHMyKSB7Ci0gIGlmICghU3RyaW5nOjpD
U3RyaW5nRXF1YWxzKHMxLCBzMikpIHsKLSAgICByZXR1cm4gQXNzZXJ0aW9uU3VjY2VzcygpOwot
ICB9IGVsc2UgewotICAgIHJldHVybiBBc3NlcnRpb25GYWlsdXJlKCkgPDwgIkV4cGVjdGVkOiAo
IiA8PCBzMV9leHByZXNzaW9uIDw8ICIpICE9ICgiCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8PCBzMl9leHByZXNzaW9uIDw8ICIpLCBhY3R1YWw6IFwiIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPDwgczEgPDwgIlwiIHZzIFwiIiA8PCBzMiA8PCAiXCIiOwotICB9Ci19
Ci0KLS8vIFRoZSBoZWxwZXIgZnVuY3Rpb24gZm9yIHtBU1NFUlR8RVhQRUNUfV9TVFJDQVNFTkUu
Ci1Bc3NlcnRpb25SZXN1bHQgQ21wSGVscGVyU1RSQ0FTRU5FKGNvbnN0IGNoYXIqIHMxX2V4cHJl
c3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHMy
X2V4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIHMxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBz
MikgewotICBpZiAoIVN0cmluZzo6Q2FzZUluc2Vuc2l0aXZlQ1N0cmluZ0VxdWFscyhzMSwgczIp
KSB7Ci0gICAgcmV0dXJuIEFzc2VydGlvblN1Y2Nlc3MoKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1
cm4gQXNzZXJ0aW9uRmFpbHVyZSgpCi0gICAgICAgIDw8ICJFeHBlY3RlZDogKCIgPDwgczFfZXhw
cmVzc2lvbiA8PCAiKSAhPSAoIgotICAgICAgICA8PCBzMl9leHByZXNzaW9uIDw8ICIpIChpZ25v
cmluZyBjYXNlKSwgYWN0dWFsOiBcIiIKLSAgICAgICAgPDwgczEgPDwgIlwiIHZzIFwiIiA8PCBz
MiA8PCAiXCIiOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotCi1uYW1lc3Bh
Y2UgewotCi0vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBpbXBsZW1lbnRpbmcgSXNTdWJTdHJpbmco
KSBhbmQgSXNOb3RTdWJzdHJpbmcoKS4KLQotLy8gVGhpcyBncm91cCBvZiBvdmVybG9hZGVkIGZ1
bmN0aW9ucyByZXR1cm4gdHJ1ZSBpZmYgbmVlZGxlIGlzIGEKLS8vIHN1YnN0cmluZyBvZiBoYXlz
dGFjay4gIE5VTEwgaXMgY29uc2lkZXJlZCBhIHN1YnN0cmluZyBvZiBpdHNlbGYKLS8vIG9ubHku
Ci0KLWJvb2wgSXNTdWJzdHJpbmdQcmVkKGNvbnN0IGNoYXIqIG5lZWRsZSwgY29uc3QgY2hhciog
aGF5c3RhY2spIHsKLSAgaWYgKG5lZWRsZSA9PSBOVUxMIHx8IGhheXN0YWNrID09IE5VTEwpCi0g
ICAgcmV0dXJuIG5lZWRsZSA9PSBoYXlzdGFjazsKLQotICByZXR1cm4gc3Ryc3RyKGhheXN0YWNr
LCBuZWVkbGUpICE9IE5VTEw7Ci19Ci0KLWJvb2wgSXNTdWJzdHJpbmdQcmVkKGNvbnN0IHdjaGFy
X3QqIG5lZWRsZSwgY29uc3Qgd2NoYXJfdCogaGF5c3RhY2spIHsKLSAgaWYgKG5lZWRsZSA9PSBO
VUxMIHx8IGhheXN0YWNrID09IE5VTEwpCi0gICAgcmV0dXJuIG5lZWRsZSA9PSBoYXlzdGFjazsK
LQotICByZXR1cm4gd2Nzc3RyKGhheXN0YWNrLCBuZWVkbGUpICE9IE5VTEw7Ci19Ci0KLS8vIFN0
cmluZ1R5cGUgaGVyZSBjYW4gYmUgZWl0aGVyIDo6c3RkOjpzdHJpbmcgb3IgOjpzdGQ6OndzdHJp
bmcuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgU3RyaW5nVHlwZT4KLWJvb2wgSXNTdWJzdHJpbmdQcmVk
KGNvbnN0IFN0cmluZ1R5cGUmIG5lZWRsZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZ1R5cGUmIGhheXN0YWNrKSB7Ci0gIHJldHVybiBoYXlzdGFjay5maW5kKG5lZWRsZSkgIT0g
U3RyaW5nVHlwZTo6bnBvczsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIGVpdGhl
ciBJc1N1YnN0cmluZygpIG9yIElzTm90U3Vic3RyaW5nKCksCi0vLyBkZXBlbmRpbmcgb24gdGhl
IHZhbHVlIG9mIHRoZSBleHBlY3RlZF90b19iZV9zdWJzdHJpbmcgcGFyYW1ldGVyLgotLy8gU3Ry
aW5nVHlwZSBoZXJlIGNhbiBiZSBjb25zdCBjaGFyKiwgY29uc3Qgd2NoYXJfdCosIDo6c3RkOjpz
dHJpbmcsCi0vLyBvciA6OnN0ZDo6d3N0cmluZy4KLXRlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmdU
eXBlPgotQXNzZXJ0aW9uUmVzdWx0IElzU3Vic3RyaW5nSW1wbCgKLSAgICBib29sIGV4cGVjdGVk
X3RvX2JlX3N1YnN0cmluZywKLSAgICBjb25zdCBjaGFyKiBuZWVkbGVfZXhwciwgY29uc3QgY2hh
ciogaGF5c3RhY2tfZXhwciwKLSAgICBjb25zdCBTdHJpbmdUeXBlJiBuZWVkbGUsIGNvbnN0IFN0
cmluZ1R5cGUmIGhheXN0YWNrKSB7Ci0gIGlmIChJc1N1YnN0cmluZ1ByZWQobmVlZGxlLCBoYXlz
dGFjaykgPT0gZXhwZWN0ZWRfdG9fYmVfc3Vic3RyaW5nKQotICAgIHJldHVybiBBc3NlcnRpb25T
dWNjZXNzKCk7Ci0KLSAgY29uc3QgYm9vbCBpc193aWRlX3N0cmluZyA9IHNpemVvZihuZWVkbGVb
MF0pID4gMTsKLSAgY29uc3QgY2hhciogY29uc3QgYmVnaW5fc3RyaW5nX3F1b3RlID0gaXNfd2lk
ZV9zdHJpbmcgPyAiTFwiIiA6ICJcIiI7Ci0gIHJldHVybiBBc3NlcnRpb25GYWlsdXJlKCkKLSAg
ICAgIDw8ICJWYWx1ZSBvZjogIiA8PCBuZWVkbGVfZXhwciA8PCAiXG4iCi0gICAgICA8PCAiICBB
Y3R1YWw6ICIgPDwgYmVnaW5fc3RyaW5nX3F1b3RlIDw8IG5lZWRsZSA8PCAiXCJcbiIKLSAgICAg
IDw8ICJFeHBlY3RlZDogIiA8PCAoZXhwZWN0ZWRfdG9fYmVfc3Vic3RyaW5nID8gIiIgOiAibm90
ICIpCi0gICAgICA8PCAiYSBzdWJzdHJpbmcgb2YgIiA8PCBoYXlzdGFja19leHByIDw8ICJcbiIK
LSAgICAgIDw8ICJXaGljaCBpczogIiA8PCBiZWdpbl9zdHJpbmdfcXVvdGUgPDwgaGF5c3RhY2sg
PDwgIlwiIjsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLS8vIElzU3Vic3RyaW5nKCkgYW5kIElz
Tm90U3Vic3RyaW5nKCkgY2hlY2sgd2hldGhlciBuZWVkbGUgaXMgYQotLy8gc3Vic3RyaW5nIG9m
IGhheXN0YWNrIChOVUxMIGlzIGNvbnNpZGVyZWQgYSBzdWJzdHJpbmcgb2YgaXRzZWxmCi0vLyBv
bmx5KSwgYW5kIHJldHVybiBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIHdoZW4gdGhleSBm
YWlsLgotCi1Bc3NlcnRpb25SZXN1bHQgSXNTdWJzdHJpbmcoCi0gICAgY29uc3QgY2hhciogbmVl
ZGxlX2V4cHIsIGNvbnN0IGNoYXIqIGhheXN0YWNrX2V4cHIsCi0gICAgY29uc3QgY2hhciogbmVl
ZGxlLCBjb25zdCBjaGFyKiBoYXlzdGFjaykgewotICByZXR1cm4gSXNTdWJzdHJpbmdJbXBsKHRy
dWUsIG5lZWRsZV9leHByLCBoYXlzdGFja19leHByLCBuZWVkbGUsIGhheXN0YWNrKTsKLX0KLQot
QXNzZXJ0aW9uUmVzdWx0IElzU3Vic3RyaW5nKAotICAgIGNvbnN0IGNoYXIqIG5lZWRsZV9leHBy
LCBjb25zdCBjaGFyKiBoYXlzdGFja19leHByLAotICAgIGNvbnN0IHdjaGFyX3QqIG5lZWRsZSwg
Y29uc3Qgd2NoYXJfdCogaGF5c3RhY2spIHsKLSAgcmV0dXJuIElzU3Vic3RyaW5nSW1wbCh0cnVl
LCBuZWVkbGVfZXhwciwgaGF5c3RhY2tfZXhwciwgbmVlZGxlLCBoYXlzdGFjayk7Ci19Ci0KLUFz
c2VydGlvblJlc3VsdCBJc05vdFN1YnN0cmluZygKLSAgICBjb25zdCBjaGFyKiBuZWVkbGVfZXhw
ciwgY29uc3QgY2hhciogaGF5c3RhY2tfZXhwciwKLSAgICBjb25zdCBjaGFyKiBuZWVkbGUsIGNv
bnN0IGNoYXIqIGhheXN0YWNrKSB7Ci0gIHJldHVybiBJc1N1YnN0cmluZ0ltcGwoZmFsc2UsIG5l
ZWRsZV9leHByLCBoYXlzdGFja19leHByLCBuZWVkbGUsIGhheXN0YWNrKTsKLX0KLQotQXNzZXJ0
aW9uUmVzdWx0IElzTm90U3Vic3RyaW5nKAotICAgIGNvbnN0IGNoYXIqIG5lZWRsZV9leHByLCBj
b25zdCBjaGFyKiBoYXlzdGFja19leHByLAotICAgIGNvbnN0IHdjaGFyX3QqIG5lZWRsZSwgY29u
c3Qgd2NoYXJfdCogaGF5c3RhY2spIHsKLSAgcmV0dXJuIElzU3Vic3RyaW5nSW1wbChmYWxzZSwg
bmVlZGxlX2V4cHIsIGhheXN0YWNrX2V4cHIsIG5lZWRsZSwgaGF5c3RhY2spOwotfQotCi1Bc3Nl
cnRpb25SZXN1bHQgSXNTdWJzdHJpbmcoCi0gICAgY29uc3QgY2hhciogbmVlZGxlX2V4cHIsIGNv
bnN0IGNoYXIqIGhheXN0YWNrX2V4cHIsCi0gICAgY29uc3QgOjpzdGQ6OnN0cmluZyYgbmVlZGxl
LCBjb25zdCA6OnN0ZDo6c3RyaW5nJiBoYXlzdGFjaykgewotICByZXR1cm4gSXNTdWJzdHJpbmdJ
bXBsKHRydWUsIG5lZWRsZV9leHByLCBoYXlzdGFja19leHByLCBuZWVkbGUsIGhheXN0YWNrKTsK
LX0KLQotQXNzZXJ0aW9uUmVzdWx0IElzTm90U3Vic3RyaW5nKAotICAgIGNvbnN0IGNoYXIqIG5l
ZWRsZV9leHByLCBjb25zdCBjaGFyKiBoYXlzdGFja19leHByLAotICAgIGNvbnN0IDo6c3RkOjpz
dHJpbmcmIG5lZWRsZSwgY29uc3QgOjpzdGQ6OnN0cmluZyYgaGF5c3RhY2spIHsKLSAgcmV0dXJu
IElzU3Vic3RyaW5nSW1wbChmYWxzZSwgbmVlZGxlX2V4cHIsIGhheXN0YWNrX2V4cHIsIG5lZWRs
ZSwgaGF5c3RhY2spOwotfQotCi0jaWYgR1RFU1RfSEFTX1NURF9XU1RSSU5HCi1Bc3NlcnRpb25S
ZXN1bHQgSXNTdWJzdHJpbmcoCi0gICAgY29uc3QgY2hhciogbmVlZGxlX2V4cHIsIGNvbnN0IGNo
YXIqIGhheXN0YWNrX2V4cHIsCi0gICAgY29uc3QgOjpzdGQ6OndzdHJpbmcmIG5lZWRsZSwgY29u
c3QgOjpzdGQ6OndzdHJpbmcmIGhheXN0YWNrKSB7Ci0gIHJldHVybiBJc1N1YnN0cmluZ0ltcGwo
dHJ1ZSwgbmVlZGxlX2V4cHIsIGhheXN0YWNrX2V4cHIsIG5lZWRsZSwgaGF5c3RhY2spOwotfQot
Ci1Bc3NlcnRpb25SZXN1bHQgSXNOb3RTdWJzdHJpbmcoCi0gICAgY29uc3QgY2hhciogbmVlZGxl
X2V4cHIsIGNvbnN0IGNoYXIqIGhheXN0YWNrX2V4cHIsCi0gICAgY29uc3QgOjpzdGQ6OndzdHJp
bmcmIG5lZWRsZSwgY29uc3QgOjpzdGQ6OndzdHJpbmcmIGhheXN0YWNrKSB7Ci0gIHJldHVybiBJ
c1N1YnN0cmluZ0ltcGwoZmFsc2UsIG5lZWRsZV9leHByLCBoYXlzdGFja19leHByLCBuZWVkbGUs
IGhheXN0YWNrKTsKLX0KLSNlbmRpZiAgLy8gR1RFU1RfSEFTX1NURF9XU1RSSU5HCi0KLW5hbWVz
cGFjZSBpbnRlcm5hbCB7Ci0KLSNpZiBHVEVTVF9PU19XSU5ET1dTCi0KLW5hbWVzcGFjZSB7Ci0K
LS8vIEhlbHBlciBmdW5jdGlvbiBmb3IgSXNIUkVTVUxUe1N1Y2Nlc3NGYWlsdXJlfSBwcmVkaWNh
dGVzCi1Bc3NlcnRpb25SZXN1bHQgSFJFU1VMVEZhaWx1cmVIZWxwZXIoY29uc3QgY2hhciogZXhw
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHBl
Y3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGhyKSB7ICAv
LyBOT0xJTlQKLSMgaWYgR1RFU1RfT1NfV0lORE9XU19NT0JJTEUKLQotICAvLyBXaW5kb3dzIENF
IGRvZXNuJ3Qgc3VwcG9ydCBGb3JtYXRNZXNzYWdlLgotICBjb25zdCBjaGFyIGVycm9yX3RleHRb
XSA9ICIiOwotCi0jIGVsc2UKLQotICAvLyBMb29rcyB1cCB0aGUgaHVtYW4tcmVhZGFibGUgc3lz
dGVtIG1lc3NhZ2UgZm9yIHRoZSBIUkVTVUxUIGNvZGUKLSAgLy8gYW5kIHNpbmNlIHdlJ3JlIG5v
dCBwYXNzaW5nIGFueSBwYXJhbXMgdG8gRm9ybWF0TWVzc2FnZSwgd2UgZG9uJ3QKLSAgLy8gd2Fu
dCBpbnNlcnRzIGV4cGFuZGVkLgotICBjb25zdCBEV09SRCBrRmxhZ3MgPSBGT1JNQVRfTUVTU0FH
RV9GUk9NX1NZU1RFTSB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZPUk1BVF9NRVNTQUdFX0lH
Tk9SRV9JTlNFUlRTOwotICBjb25zdCBEV09SRCBrQnVmU2l6ZSA9IDQwOTY7Ci0gIC8vIEdldHMg
dGhlIHN5c3RlbSdzIGh1bWFuIHJlYWRhYmxlIG1lc3NhZ2Ugc3RyaW5nIGZvciB0aGlzIEhSRVNV
TFQuCi0gIGNoYXIgZXJyb3JfdGV4dFtrQnVmU2l6ZV0gPSB7ICdcMCcgfTsKLSAgRFdPUkQgbWVz
c2FnZV9sZW5ndGggPSA6OkZvcm1hdE1lc3NhZ2VBKGtGbGFncywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAvLyBubyBzb3VyY2UsIHdlJ3JlIGFza2luZyBz
eXN0ZW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyLCAgLy8g
dGhlIGVycm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAg
Ly8gbm8gbGluZSB3aWR0aCByZXN0cmljdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX3RleHQsICAvLyBvdXRwdXQgYnVmZmVyCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQnVmU2l6ZSwgIC8vIGJ1ZiBzaXplCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsgIC8vIG5vIGFy
Z3VtZW50cyBmb3IgaW5zZXJ0cwotICAvLyBUcmltcyB0YWlsaW5nIHdoaXRlIHNwYWNlIChGb3Jt
YXRNZXNzYWdlIGxlYXZlcyBhIHRyYWlsaW5nIENSLUxGKQotICBmb3IgKDsgbWVzc2FnZV9sZW5n
dGggJiYgSXNTcGFjZShlcnJvcl90ZXh0W21lc3NhZ2VfbGVuZ3RoIC0gMV0pOwotICAgICAgICAg
IC0tbWVzc2FnZV9sZW5ndGgpIHsKLSAgICBlcnJvcl90ZXh0W21lc3NhZ2VfbGVuZ3RoIC0gMV0g
PSAnXDAnOwotICB9Ci0KLSMgZW5kaWYgIC8vIEdURVNUX09TX1dJTkRPV1NfTU9CSUxFCi0KLSAg
Y29uc3Qgc3RkOjpzdHJpbmcgZXJyb3JfaGV4KCIweCIgKyBTdHJpbmc6OkZvcm1hdEhleEludCho
cikpOwotICByZXR1cm4gOjp0ZXN0aW5nOjpBc3NlcnRpb25GYWlsdXJlKCkKLSAgICAgIDw8ICJF
eHBlY3RlZDogIiA8PCBleHByIDw8ICIgIiA8PCBleHBlY3RlZCA8PCAiLlxuIgotICAgICAgPDwg
IiAgQWN0dWFsOiAiIDw8IGVycm9yX2hleCA8PCAiICIgPDwgZXJyb3JfdGV4dCA8PCAiXG4iOwot
fQotCi19ICAvLyBuYW1lc3BhY2UKLQotQXNzZXJ0aW9uUmVzdWx0IElzSFJFU1VMVFN1Y2Nlc3Mo
Y29uc3QgY2hhciogZXhwciwgbG9uZyBocikgeyAgLy8gTk9MSU5UCi0gIGlmIChTVUNDRUVERUQo
aHIpKSB7Ci0gICAgcmV0dXJuIEFzc2VydGlvblN1Y2Nlc3MoKTsKLSAgfQotICByZXR1cm4gSFJF
U1VMVEZhaWx1cmVIZWxwZXIoZXhwciwgInN1Y2NlZWRzIiwgaHIpOwotfQotCi1Bc3NlcnRpb25S
ZXN1bHQgSXNIUkVTVUxURmFpbHVyZShjb25zdCBjaGFyKiBleHByLCBsb25nIGhyKSB7ICAvLyBO
T0xJTlQKLSAgaWYgKEZBSUxFRChocikpIHsKLSAgICByZXR1cm4gQXNzZXJ0aW9uU3VjY2Vzcygp
OwotICB9Ci0gIHJldHVybiBIUkVTVUxURmFpbHVyZUhlbHBlcihleHByLCAiZmFpbHMiLCBocik7
Ci19Ci0KLSNlbmRpZiAgLy8gR1RFU1RfT1NfV0lORE9XUwotCi0vLyBVdGlsaXR5IGZ1bmN0aW9u
cyBmb3IgZW5jb2RpbmcgVW5pY29kZSB0ZXh0ICh3aWRlIHN0cmluZ3MpIGluCi0vLyBVVEYtOC4K
LQotLy8gQSBVbmljb2RlIGNvZGUtcG9pbnQgY2FuIGhhdmUgdXB0byAyMSBiaXRzLCBhbmQgaXMg
ZW5jb2RlZCBpbiBVVEYtOAotLy8gbGlrZSB0aGlzOgotLy8KLS8vIENvZGUtcG9pbnQgbGVuZ3Ro
ICAgRW5jb2RpbmcKLS8vICAgMCAtICA3IGJpdHMgICAgICAgMHh4eHh4eHgKLS8vICAgOCAtIDEx
IGJpdHMgICAgICAgMTEweHh4eHggMTB4eHh4eHgKLS8vICAxMiAtIDE2IGJpdHMgICAgICAgMTEx
MHh4eHggMTB4eHh4eHggMTB4eHh4eHgKLS8vICAxNyAtIDIxIGJpdHMgICAgICAgMTExMTB4eHgg
MTB4eHh4eHggMTB4eHh4eHggMTB4eHh4eHgKLQotLy8gVGhlIG1heGltdW0gY29kZS1wb2ludCBh
IG9uZS1ieXRlIFVURi04IHNlcXVlbmNlIGNhbiByZXByZXNlbnQuCi1jb25zdCBVSW50MzIga01h
eENvZGVQb2ludDEgPSAoc3RhdGljX2Nhc3Q8VUludDMyPigxKSA8PCAgNykgLSAxOwotCi0vLyBU
aGUgbWF4aW11bSBjb2RlLXBvaW50IGEgdHdvLWJ5dGUgVVRGLTggc2VxdWVuY2UgY2FuIHJlcHJl
c2VudC4KLWNvbnN0IFVJbnQzMiBrTWF4Q29kZVBvaW50MiA9IChzdGF0aWNfY2FzdDxVSW50MzI+
KDEpIDw8ICg1ICsgNikpIC0gMTsKLQotLy8gVGhlIG1heGltdW0gY29kZS1wb2ludCBhIHRocmVl
LWJ5dGUgVVRGLTggc2VxdWVuY2UgY2FuIHJlcHJlc2VudC4KLWNvbnN0IFVJbnQzMiBrTWF4Q29k
ZVBvaW50MyA9IChzdGF0aWNfY2FzdDxVSW50MzI+KDEpIDw8ICg0ICsgMio2KSkgLSAxOwotCi0v
LyBUaGUgbWF4aW11bSBjb2RlLXBvaW50IGEgZm91ci1ieXRlIFVURi04IHNlcXVlbmNlIGNhbiBy
ZXByZXNlbnQuCi1jb25zdCBVSW50MzIga01heENvZGVQb2ludDQgPSAoc3RhdGljX2Nhc3Q8VUlu
dDMyPigxKSA8PCAoMyArIDMqNikpIC0gMTsKLQotLy8gQ2hvcHMgb2ZmIHRoZSBuIGxvd2VzdCBi
aXRzIGZyb20gYSBiaXQgcGF0dGVybi4gIFJldHVybnMgdGhlIG4KLS8vIGxvd2VzdCBiaXRzLiAg
QXMgYSBzaWRlIGVmZmVjdCwgdGhlIG9yaWdpbmFsIGJpdCBwYXR0ZXJuIHdpbGwgYmUKLS8vIHNo
aWZ0ZWQgdG8gdGhlIHJpZ2h0IGJ5IG4gYml0cy4KLWlubGluZSBVSW50MzIgQ2hvcExvd0JpdHMo
VUludDMyKiBiaXRzLCBpbnQgbikgewotICBjb25zdCBVSW50MzIgbG93X2JpdHMgPSAqYml0cyAm
ICgoc3RhdGljX2Nhc3Q8VUludDMyPigxKSA8PCBuKSAtIDEpOwotICAqYml0cyA+Pj0gbjsKLSAg
cmV0dXJuIGxvd19iaXRzOwotfQotCi0vLyBDb252ZXJ0cyBhIFVuaWNvZGUgY29kZSBwb2ludCB0
byBhIG5hcnJvdyBzdHJpbmcgaW4gVVRGLTggZW5jb2RpbmcuCi0vLyBjb2RlX3BvaW50IHBhcmFt
ZXRlciBpcyBvZiB0eXBlIFVJbnQzMiBiZWNhdXNlIHdjaGFyX3QgbWF5IG5vdCBiZQotLy8gd2lk
ZSBlbm91Z2ggdG8gY29udGFpbiBhIGNvZGUgcG9pbnQuCi0vLyBJZiB0aGUgY29kZV9wb2ludCBp
cyBub3QgYSB2YWxpZCBVbmljb2RlIGNvZGUgcG9pbnQKLS8vIChpLmUuIG91dHNpZGUgb2YgVW5p
Y29kZSByYW5nZSBVKzAgdG8gVSsxMEZGRkYpIGl0IHdpbGwgYmUgY29udmVydGVkCi0vLyB0byAi
KEludmFsaWQgVW5pY29kZSAweFhYWFhYWFhYKSIuCi1zdGQ6OnN0cmluZyBDb2RlUG9pbnRUb1V0
ZjgoVUludDMyIGNvZGVfcG9pbnQpIHsKLSAgaWYgKGNvZGVfcG9pbnQgPiBrTWF4Q29kZVBvaW50
NCkgewotICAgIHJldHVybiAiKEludmFsaWQgVW5pY29kZSAweCIgKyBTdHJpbmc6OkZvcm1hdEhl
eEludChjb2RlX3BvaW50KSArICIpIjsKLSAgfQotCi0gIGNoYXIgc3RyWzVdOyAgLy8gQmlnIGVu
b3VnaCBmb3IgdGhlIGxhcmdlc3QgdmFsaWQgY29kZSBwb2ludC4KLSAgaWYgKGNvZGVfcG9pbnQg
PD0ga01heENvZGVQb2ludDEpIHsKLSAgICBzdHJbMV0gPSAnXDAnOwotICAgIHN0clswXSA9IHN0
YXRpY19jYXN0PGNoYXI+KGNvZGVfcG9pbnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
MHh4eHh4eHgKLSAgfSBlbHNlIGlmIChjb2RlX3BvaW50IDw9IGtNYXhDb2RlUG9pbnQyKSB7Ci0g
ICAgc3RyWzJdID0gJ1wwJzsKLSAgICBzdHJbMV0gPSBzdGF0aWNfY2FzdDxjaGFyPigweDgwIHwg
Q2hvcExvd0JpdHMoJmNvZGVfcG9pbnQsIDYpKTsgIC8vIDEweHh4eHh4Ci0gICAgc3RyWzBdID0g
c3RhdGljX2Nhc3Q8Y2hhcj4oMHhDMCB8IGNvZGVfcG9pbnQpOyAgICAgICAgICAgICAgICAgICAv
LyAxMTB4eHh4eAotICB9IGVsc2UgaWYgKGNvZGVfcG9pbnQgPD0ga01heENvZGVQb2ludDMpIHsK
LSAgICBzdHJbM10gPSAnXDAnOwotICAgIHN0clsyXSA9IHN0YXRpY19jYXN0PGNoYXI+KDB4ODAg
fCBDaG9wTG93Qml0cygmY29kZV9wb2ludCwgNikpOyAgLy8gMTB4eHh4eHgKLSAgICBzdHJbMV0g
PSBzdGF0aWNfY2FzdDxjaGFyPigweDgwIHwgQ2hvcExvd0JpdHMoJmNvZGVfcG9pbnQsIDYpKTsg
IC8vIDEweHh4eHh4Ci0gICAgc3RyWzBdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oMHhFMCB8IGNvZGVf
cG9pbnQpOyAgICAgICAgICAgICAgICAgICAvLyAxMTEweHh4eAotICB9IGVsc2UgeyAgLy8gY29k
ZV9wb2ludCA8PSBrTWF4Q29kZVBvaW50NAotICAgIHN0cls0XSA9ICdcMCc7Ci0gICAgc3RyWzNd
ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oMHg4MCB8IENob3BMb3dCaXRzKCZjb2RlX3BvaW50LCA2KSk7
ICAvLyAxMHh4eHh4eAotICAgIHN0clsyXSA9IHN0YXRpY19jYXN0PGNoYXI+KDB4ODAgfCBDaG9w
TG93Qml0cygmY29kZV9wb2ludCwgNikpOyAgLy8gMTB4eHh4eHgKLSAgICBzdHJbMV0gPSBzdGF0
aWNfY2FzdDxjaGFyPigweDgwIHwgQ2hvcExvd0JpdHMoJmNvZGVfcG9pbnQsIDYpKTsgIC8vIDEw
eHh4eHh4Ci0gICAgc3RyWzBdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oMHhGMCB8IGNvZGVfcG9pbnQp
OyAgICAgICAgICAgICAgICAgICAvLyAxMTExMHh4eAotICB9Ci0gIHJldHVybiBzdHI7Ci19Ci0K
LS8vIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBvbmx5IG1ha2Ugc2Vuc2UgaWYgdGhlIHRo
ZSBzeXN0ZW0KLS8vIHVzZXMgVVRGLTE2IGZvciB3aWRlIHN0cmluZyBlbmNvZGluZy4gQWxsIHN1
cHBvcnRlZCBzeXN0ZW1zCi0vLyB3aXRoIDE2IGJpdCB3Y2hhcl90IChXaW5kb3dzLCBDeWd3aW4s
IFN5bWJpYW4gT1MpIGRvIHVzZSBVVEYtMTYuCi0KLS8vIERldGVybWluZXMgaWYgdGhlIGFyZ3Vt
ZW50cyBjb25zdGl0dXRlIFVURi0xNiBzdXJyb2dhdGUgcGFpcgotLy8gYW5kIHRodXMgc2hvdWxk
IGJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgVW5pY29kZSBjb2RlIHBvaW50Ci0vLyB1c2luZyBD
cmVhdGVDb2RlUG9pbnRGcm9tVXRmMTZTdXJyb2dhdGVQYWlyLgotaW5saW5lIGJvb2wgSXNVdGYx
NlN1cnJvZ2F0ZVBhaXIod2NoYXJfdCBmaXJzdCwgd2NoYXJfdCBzZWNvbmQpIHsKLSAgcmV0dXJu
IHNpemVvZih3Y2hhcl90KSA9PSAyICYmCi0gICAgICAoZmlyc3QgJiAweEZDMDApID09IDB4RDgw
MCAmJiAoc2Vjb25kICYgMHhGQzAwKSA9PSAweERDMDA7Ci19Ci0KLS8vIENyZWF0ZXMgYSBVbmlj
b2RlIGNvZGUgcG9pbnQgZnJvbSBVVEYxNiBzdXJyb2dhdGUgcGFpci4KLWlubGluZSBVSW50MzIg
Q3JlYXRlQ29kZVBvaW50RnJvbVV0ZjE2U3Vycm9nYXRlUGFpcih3Y2hhcl90IGZpcnN0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
c2Vjb25kKSB7Ci0gIGNvbnN0IFVJbnQzMiBtYXNrID0gKDEgPDwgMTApIC0gMTsKLSAgcmV0dXJu
IChzaXplb2Yod2NoYXJfdCkgPT0gMikgPwotICAgICAgKCgoZmlyc3QgJiBtYXNrKSA8PCAxMCkg
fCAoc2Vjb25kICYgbWFzaykpICsgMHgxMDAwMCA6Ci0gICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNo
b3VsZCBub3QgYmUgY2FsbGVkIHdoZW4gdGhlIGNvbmRpdGlvbiBpcwotICAgICAgLy8gZmFsc2Us
IGJ1dCB3ZSBwcm92aWRlIGEgc2Vuc2libGUgZGVmYXVsdCBpbiBjYXNlIGl0IGlzLgotICAgICAg
c3RhdGljX2Nhc3Q8VUludDMyPihmaXJzdCk7Ci19Ci0KLS8vIENvbnZlcnRzIGEgd2lkZSBzdHJp
bmcgdG8gYSBuYXJyb3cgc3RyaW5nIGluIFVURi04IGVuY29kaW5nLgotLy8gVGhlIHdpZGUgc3Ry
aW5nIGlzIGFzc3VtZWQgdG8gaGF2ZSB0aGUgZm9sbG93aW5nIGVuY29kaW5nOgotLy8gICBVVEYt
MTYgaWYgc2l6ZW9mKHdjaGFyX3QpID09IDIgKG9uIFdpbmRvd3MsIEN5Z3dpbiwgU3ltYmlhbiBP
UykKLS8vICAgVVRGLTMyIGlmIHNpemVvZih3Y2hhcl90KSA9PSA0IChvbiBMaW51eCkKLS8vIFBh
cmFtZXRlciBzdHIgcG9pbnRzIHRvIGEgbnVsbC10ZXJtaW5hdGVkIHdpZGUgc3RyaW5nLgotLy8g
UGFyYW1ldGVyIG51bV9jaGFycyBtYXkgYWRkaXRpb25hbGx5IGxpbWl0IHRoZSBudW1iZXIKLS8v
IG9mIHdjaGFyX3QgY2hhcmFjdGVycyBwcm9jZXNzZWQuIC0xIGlzIHVzZWQgd2hlbiB0aGUgZW50
aXJlIHN0cmluZwotLy8gc2hvdWxkIGJlIHByb2Nlc3NlZC4KLS8vIElmIHRoZSBzdHJpbmcgY29u
dGFpbnMgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IHZhbGlkIFVuaWNvZGUgY29kZSBwb2ludHMK
LS8vIChpLmUuIG91dHNpZGUgb2YgVW5pY29kZSByYW5nZSBVKzAgdG8gVSsxMEZGRkYpIHRoZXkg
d2lsbCBiZSBvdXRwdXQKLS8vIGFzICcoSW52YWxpZCBVbmljb2RlIDB4WFhYWFhYWFgpJy4gSWYg
dGhlIHN0cmluZyBpcyBpbiBVVEYxNiBlbmNvZGluZwotLy8gYW5kIGNvbnRhaW5zIGludmFsaWQg
VVRGLTE2IHN1cnJvZ2F0ZSBwYWlycywgdmFsdWVzIGluIHRob3NlIHBhaXJzCi0vLyB3aWxsIGJl
IGVuY29kZWQgYXMgaW5kaXZpZHVhbCBVbmljb2RlIGNoYXJhY3RlcnMgZnJvbSBCYXNpYyBOb3Jt
YWwgUGxhbmUuCi1zdGQ6OnN0cmluZyBXaWRlU3RyaW5nVG9VdGY4KGNvbnN0IHdjaGFyX3QqIHN0
ciwgaW50IG51bV9jaGFycykgewotICBpZiAobnVtX2NoYXJzID09IC0xKQotICAgIG51bV9jaGFy
cyA9IHN0YXRpY19jYXN0PGludD4od2NzbGVuKHN0cikpOwotCi0gIDo6c3RkOjpzdHJpbmdzdHJl
YW0gc3RyZWFtOwotICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9jaGFyczsgKytpKSB7Ci0gICAg
VUludDMyIHVuaWNvZGVfY29kZV9wb2ludDsKLQotICAgIGlmIChzdHJbaV0gPT0gTCdcMCcpIHsK
LSAgICAgIGJyZWFrOwotICAgIH0gZWxzZSBpZiAoaSArIDEgPCBudW1fY2hhcnMgJiYgSXNVdGYx
NlN1cnJvZ2F0ZVBhaXIoc3RyW2ldLCBzdHJbaSArIDFdKSkgewotICAgICAgdW5pY29kZV9jb2Rl
X3BvaW50ID0gQ3JlYXRlQ29kZVBvaW50RnJvbVV0ZjE2U3Vycm9nYXRlUGFpcihzdHJbaV0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cltpICsgMV0pOwotICAgICAgaSsrOwotICAgIH0gZWxzZSB7Ci0gICAgICB1bmlj
b2RlX2NvZGVfcG9pbnQgPSBzdGF0aWNfY2FzdDxVSW50MzI+KHN0cltpXSk7Ci0gICAgfQotCi0g
ICAgc3RyZWFtIDw8IENvZGVQb2ludFRvVXRmOCh1bmljb2RlX2NvZGVfcG9pbnQpOwotICB9Ci0g
IHJldHVybiBTdHJpbmdTdHJlYW1Ub1N0cmluZygmc3RyZWFtKTsKLX0KLQotLy8gQ29udmVydHMg
YSB3aWRlIEMgc3RyaW5nIHRvIGFuIHN0ZDo6c3RyaW5nIHVzaW5nIHRoZSBVVEYtOCBlbmNvZGlu
Zy4KLS8vIE5VTEwgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gIihudWxsKSIuCi1zdGQ6OnN0cmluZyBT
dHJpbmc6OlNob3dXaWRlQ1N0cmluZyhjb25zdCB3Y2hhcl90ICogd2lkZV9jX3N0cikgewotICBp
ZiAod2lkZV9jX3N0ciA9PSBOVUxMKSAgcmV0dXJuICIobnVsbCkiOwotCi0gIHJldHVybiBpbnRl
cm5hbDo6V2lkZVN0cmluZ1RvVXRmOCh3aWRlX2Nfc3RyLCAtMSk7Ci19Ci0KLS8vIENvbXBhcmVz
IHR3byB3aWRlIEMgc3RyaW5ncy4gIFJldHVybnMgdHJ1ZSBpZmYgdGhleSBoYXZlIHRoZSBzYW1l
Ci0vLyBjb250ZW50LgotLy8KLS8vIFVubGlrZSB3Y3NjbXAoKSwgdGhpcyBmdW5jdGlvbiBjYW4g
aGFuZGxlIE5VTEwgYXJndW1lbnQocykuICBBIE5VTEwKLS8vIEMgc3RyaW5nIGlzIGNvbnNpZGVy
ZWQgZGlmZmVyZW50IHRvIGFueSBub24tTlVMTCBDIHN0cmluZywKLS8vIGluY2x1ZGluZyB0aGUg
ZW1wdHkgc3RyaW5nLgotYm9vbCBTdHJpbmc6OldpZGVDU3RyaW5nRXF1YWxzKGNvbnN0IHdjaGFy
X3QgKiBsaHMsIGNvbnN0IHdjaGFyX3QgKiByaHMpIHsKLSAgaWYgKGxocyA9PSBOVUxMKSByZXR1
cm4gcmhzID09IE5VTEw7Ci0KLSAgaWYgKHJocyA9PSBOVUxMKSByZXR1cm4gZmFsc2U7Ci0KLSAg
cmV0dXJuIHdjc2NtcChsaHMsIHJocykgPT0gMDsKLX0KLQotLy8gSGVscGVyIGZ1bmN0aW9uIGZv
ciAqX1NUUkVRIG9uIHdpZGUgc3RyaW5ncy4KLUFzc2VydGlvblJlc3VsdCBDbXBIZWxwZXJTVFJF
UShjb25zdCBjaGFyKiBsaHNfZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiByaHNfZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB3Y2hhcl90KiBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgd2NoYXJfdCogcmhzKSB7Ci0gIGlmIChTdHJpbmc6OldpZGVDU3RyaW5nRXF1YWxz
KGxocywgcmhzKSkgewotICAgIHJldHVybiBBc3NlcnRpb25TdWNjZXNzKCk7Ci0gIH0KLQotICBy
ZXR1cm4gRXFGYWlsdXJlKGxoc19leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgIHJoc19l
eHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgIFByaW50VG9TdHJpbmcobGhzKSwKLSAgICAg
ICAgICAgICAgICAgICBQcmludFRvU3RyaW5nKHJocyksCi0gICAgICAgICAgICAgICAgICAgZmFs
c2UpOwotfQotCi0vLyBIZWxwZXIgZnVuY3Rpb24gZm9yICpfU1RSTkUgb24gd2lkZSBzdHJpbmdz
LgotQXNzZXJ0aW9uUmVzdWx0IENtcEhlbHBlclNUUk5FKGNvbnN0IGNoYXIqIHMxX2V4cHJlc3Np
b24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogczJfZXhwcmVz
c2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90KiBzMSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90KiBzMikgewotICBp
ZiAoIVN0cmluZzo6V2lkZUNTdHJpbmdFcXVhbHMoczEsIHMyKSkgewotICAgIHJldHVybiBBc3Nl
cnRpb25TdWNjZXNzKCk7Ci0gIH0KLQotICByZXR1cm4gQXNzZXJ0aW9uRmFpbHVyZSgpIDw8ICJF
eHBlY3RlZDogKCIgPDwgczFfZXhwcmVzc2lvbiA8PCAiKSAhPSAoIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDw8IHMyX2V4cHJlc3Npb24gPDwgIiksIGFjdHVhbDogIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDw8IFByaW50VG9TdHJpbmcoczEpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPDwgIiB2cyAiIDw8IFByaW50VG9TdHJpbmcoczIpOwotfQotCi0vLyBDb21w
YXJlcyB0d28gQyBzdHJpbmdzLCBpZ25vcmluZyBjYXNlLiAgUmV0dXJucyB0cnVlIGlmZiB0aGV5
IGhhdmUKLS8vIHRoZSBzYW1lIGNvbnRlbnQuCi0vLwotLy8gVW5saWtlIHN0cmNhc2VjbXAoKSwg
dGhpcyBmdW5jdGlvbiBjYW4gaGFuZGxlIE5VTEwgYXJndW1lbnQocykuICBBCi0vLyBOVUxMIEMg
c3RyaW5nIGlzIGNvbnNpZGVyZWQgZGlmZmVyZW50IHRvIGFueSBub24tTlVMTCBDIHN0cmluZywK
LS8vIGluY2x1ZGluZyB0aGUgZW1wdHkgc3RyaW5nLgotYm9vbCBTdHJpbmc6OkNhc2VJbnNlbnNp
dGl2ZUNTdHJpbmdFcXVhbHMoY29uc3QgY2hhciAqIGxocywgY29uc3QgY2hhciAqIHJocykgewot
ICBpZiAobGhzID09IE5VTEwpCi0gICAgcmV0dXJuIHJocyA9PSBOVUxMOwotICBpZiAocmhzID09
IE5VTEwpCi0gICAgcmV0dXJuIGZhbHNlOwotICByZXR1cm4gcG9zaXg6OlN0ckNhc2VDbXAobGhz
LCByaHMpID09IDA7Ci19Ci0KLSAgLy8gQ29tcGFyZXMgdHdvIHdpZGUgQyBzdHJpbmdzLCBpZ25v
cmluZyBjYXNlLiAgUmV0dXJucyB0cnVlIGlmZiB0aGV5Ci0gIC8vIGhhdmUgdGhlIHNhbWUgY29u
dGVudC4KLSAgLy8KLSAgLy8gVW5saWtlIHdjc2Nhc2VjbXAoKSwgdGhpcyBmdW5jdGlvbiBjYW4g
aGFuZGxlIE5VTEwgYXJndW1lbnQocykuCi0gIC8vIEEgTlVMTCBDIHN0cmluZyBpcyBjb25zaWRl
cmVkIGRpZmZlcmVudCB0byBhbnkgbm9uLU5VTEwgd2lkZSBDIHN0cmluZywKLSAgLy8gaW5jbHVk
aW5nIHRoZSBlbXB0eSBzdHJpbmcuCi0gIC8vIE5COiBUaGUgaW1wbGVtZW50YXRpb25zIG9uIGRp
ZmZlcmVudCBwbGF0Zm9ybXMgc2xpZ2h0bHkgZGlmZmVyLgotICAvLyBPbiB3aW5kb3dzLCB0aGlz
IG1ldGhvZCB1c2VzIF93Y3NpY21wIHdoaWNoIGNvbXBhcmVzIGFjY29yZGluZyB0byBMQ19DVFlQ
RQotICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gT24gR05VIHBsYXRmb3JtIHRoaXMgbWV0aG9k
IHVzZXMgd2NzY2FzZWNtcAotICAvLyB3aGljaCBjb21wYXJlcyBhY2NvcmRpbmcgdG8gTENfQ1RZ
UEUgY2F0ZWdvcnkgb2YgdGhlIGN1cnJlbnQgbG9jYWxlLgotICAvLyBPbiBNYWNPUyBYLCBpdCB1
c2VzIHRvd2xvd2VyLCB3aGljaCBhbHNvIHVzZXMgTENfQ1RZUEUgY2F0ZWdvcnkgb2YgdGhlCi0g
IC8vIGN1cnJlbnQgbG9jYWxlLgotYm9vbCBTdHJpbmc6OkNhc2VJbnNlbnNpdGl2ZVdpZGVDU3Ry
aW5nRXF1YWxzKGNvbnN0IHdjaGFyX3QqIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90KiByaHMpIHsKLSAgaWYgKGxocyA9PSBO
VUxMKSByZXR1cm4gcmhzID09IE5VTEw7Ci0KLSAgaWYgKHJocyA9PSBOVUxMKSByZXR1cm4gZmFs
c2U7Ci0KLSNpZiBHVEVTVF9PU19XSU5ET1dTCi0gIHJldHVybiBfd2NzaWNtcChsaHMsIHJocykg
PT0gMDsKLSNlbGlmIEdURVNUX09TX0xJTlVYICYmICFHVEVTVF9PU19MSU5VWF9BTkRST0lECi0g
IHJldHVybiB3Y3NjYXNlY21wKGxocywgcmhzKSA9PSAwOwotI2Vsc2UKLSAgLy8gQW5kcm9pZCwg
TWFjIE9TIFggYW5kIEN5Z3dpbiBkb24ndCBkZWZpbmUgd2NzY2FzZWNtcC4KLSAgLy8gT3RoZXIg
dW5rbm93biBPU2VzIG1heSBub3QgZGVmaW5lIGl0IGVpdGhlci4KLSAgd2ludF90IGxlZnQsIHJp
Z2h0OwotICBkbyB7Ci0gICAgbGVmdCA9IHRvd2xvd2VyKCpsaHMrKyk7Ci0gICAgcmlnaHQgPSB0
b3dsb3dlcigqcmhzKyspOwotICB9IHdoaWxlIChsZWZ0ICYmIGxlZnQgPT0gcmlnaHQpOwotICBy
ZXR1cm4gbGVmdCA9PSByaWdodDsKLSNlbmRpZiAgLy8gT1Mgc2VsZWN0b3IKLX0KLQotLy8gUmV0
dXJucyB0cnVlIGlmZiBzdHIgZW5kcyB3aXRoIHRoZSBnaXZlbiBzdWZmaXgsIGlnbm9yaW5nIGNh
c2UuCi0vLyBBbnkgc3RyaW5nIGlzIGNvbnNpZGVyZWQgdG8gZW5kIHdpdGggYW4gZW1wdHkgc3Vm
Zml4LgotYm9vbCBTdHJpbmc6OkVuZHNXaXRoQ2FzZUluc2Vuc2l0aXZlKAotICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiBzdHIsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdWZmaXgpIHsKLSAgY29uc3Qgc2l6
ZV90IHN0cl9sZW4gPSBzdHIubGVuZ3RoKCk7Ci0gIGNvbnN0IHNpemVfdCBzdWZmaXhfbGVuID0g
c3VmZml4Lmxlbmd0aCgpOwotICByZXR1cm4gKHN0cl9sZW4gPj0gc3VmZml4X2xlbikgJiYKLSAg
ICAgICAgIENhc2VJbnNlbnNpdGl2ZUNTdHJpbmdFcXVhbHMoc3RyLmNfc3RyKCkgKyBzdHJfbGVu
IC0gc3VmZml4X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vm
Zml4LmNfc3RyKCkpOwotfQotCi0vLyBGb3JtYXRzIGFuIGludCB2YWx1ZSBhcyAiJTAyZCIuCi1z
dGQ6OnN0cmluZyBTdHJpbmc6OkZvcm1hdEludFdpZHRoMihpbnQgdmFsdWUpIHsKLSAgc3RkOjpz
dHJpbmdzdHJlYW0gc3M7Ci0gIHNzIDw8IHN0ZDo6c2V0ZmlsbCgnMCcpIDw8IHN0ZDo6c2V0dygy
KSA8PCB2YWx1ZTsKLSAgcmV0dXJuIHNzLnN0cigpOwotfQotCi0vLyBGb3JtYXRzIGFuIGludCB2
YWx1ZSBhcyAiJVgiLgotc3RkOjpzdHJpbmcgU3RyaW5nOjpGb3JtYXRIZXhJbnQoaW50IHZhbHVl
KSB7Ci0gIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOwotICBzcyA8PCBzdGQ6OmhleCA8PCBzdGQ6OnVw
cGVyY2FzZSA8PCB2YWx1ZTsKLSAgcmV0dXJuIHNzLnN0cigpOwotfQotCi0vLyBGb3JtYXRzIGEg
Ynl0ZSBhcyAiJTAyWCIuCi1zdGQ6OnN0cmluZyBTdHJpbmc6OkZvcm1hdEJ5dGUodW5zaWduZWQg
Y2hhciB2YWx1ZSkgewotICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKLSAgc3MgPDwgc3RkOjpzZXRm
aWxsKCcwJykgPDwgc3RkOjpzZXR3KDIpIDw8IHN0ZDo6aGV4IDw8IHN0ZDo6dXBwZXJjYXNlCi0g
ICAgIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpOwotICByZXR1cm4gc3Muc3Ry
KCk7Ci19Ci0KLS8vIENvbnZlcnRzIHRoZSBidWZmZXIgaW4gYSBzdHJpbmdzdHJlYW0gdG8gYW4g
c3RkOjpzdHJpbmcsIGNvbnZlcnRpbmcgTlVMCi0vLyBieXRlcyB0byAiXFwwIiBhbG9uZyB0aGUg
d2F5Lgotc3RkOjpzdHJpbmcgU3RyaW5nU3RyZWFtVG9TdHJpbmcoOjpzdGQ6OnN0cmluZ3N0cmVh
bSogc3MpIHsKLSAgY29uc3QgOjpzdGQ6OnN0cmluZyYgc3RyID0gc3MtPnN0cigpOwotICBjb25z
dCBjaGFyKiBjb25zdCBzdGFydCA9IHN0ci5jX3N0cigpOwotICBjb25zdCBjaGFyKiBjb25zdCBl
bmQgPSBzdGFydCArIHN0ci5sZW5ndGgoKTsKLQotICBzdGQ6OnN0cmluZyByZXN1bHQ7Ci0gIHJl
c3VsdC5yZXNlcnZlKDIgKiAoZW5kIC0gc3RhcnQpKTsKLSAgZm9yIChjb25zdCBjaGFyKiBjaCA9
IHN0YXJ0OyBjaCAhPSBlbmQ7ICsrY2gpIHsKLSAgICBpZiAoKmNoID09ICdcMCcpIHsKLSAgICAg
IHJlc3VsdCArPSAiXFwwIjsgIC8vIFJlcGxhY2VzIE5VTCB3aXRoICJcXDAiOwotICAgIH0gZWxz
ZSB7Ci0gICAgICByZXN1bHQgKz0gKmNoOwotICAgIH0KLSAgfQotCi0gIHJldHVybiByZXN1bHQ7
Ci19Ci0KLS8vIEFwcGVuZHMgdGhlIHVzZXItc3VwcGxpZWQgbWVzc2FnZSB0byB0aGUgR29vZ2xl
LVRlc3QtZ2VuZXJhdGVkIG1lc3NhZ2UuCi1zdGQ6OnN0cmluZyBBcHBlbmRVc2VyTWVzc2FnZShj
b25zdCBzdGQ6OnN0cmluZyYgZ3Rlc3RfbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTWVzc2FnZSYgdXNlcl9tc2cpIHsKLSAgLy8gQXBwZW5kcyB0aGUgdXNlciBtZXNz
YWdlIGlmIGl0J3Mgbm9uLWVtcHR5LgotICBjb25zdCBzdGQ6OnN0cmluZyB1c2VyX21zZ19zdHJp
bmcgPSB1c2VyX21zZy5HZXRTdHJpbmcoKTsKLSAgaWYgKHVzZXJfbXNnX3N0cmluZy5lbXB0eSgp
KSB7Ci0gICAgcmV0dXJuIGd0ZXN0X21zZzsKLSAgfQotCi0gIHJldHVybiBndGVzdF9tc2cgKyAi
XG4iICsgdXNlcl9tc2dfc3RyaW5nOwotfQotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLQot
Ly8gY2xhc3MgVGVzdFJlc3VsdAotCi0vLyBDcmVhdGVzIGFuIGVtcHR5IFRlc3RSZXN1bHQuCi1U
ZXN0UmVzdWx0OjpUZXN0UmVzdWx0KCkKLSAgICA6IGRlYXRoX3Rlc3RfY291bnRfKDApLAotICAg
ICAgZWxhcHNlZF90aW1lXygwKSB7Ci19Ci0KLS8vIEQndG9yLgotVGVzdFJlc3VsdDo6flRlc3RS
ZXN1bHQoKSB7Ci19Ci0KLS8vIFJldHVybnMgdGhlIGktdGggdGVzdCBwYXJ0IHJlc3VsdCBhbW9u
ZyBhbGwgdGhlIHJlc3VsdHMuIGkgY2FuCi0vLyByYW5nZSBmcm9tIDAgdG8gdG90YWxfcGFydF9j
b3VudCgpIC0gMS4gSWYgaSBpcyBub3QgaW4gdGhhdCByYW5nZSwKLS8vIGFib3J0cyB0aGUgcHJv
Z3JhbS4KLWNvbnN0IFRlc3RQYXJ0UmVzdWx0JiBUZXN0UmVzdWx0OjpHZXRUZXN0UGFydFJlc3Vs
dChpbnQgaSkgY29uc3QgewotICBpZiAoaSA8IDAgfHwgaSA+PSB0b3RhbF9wYXJ0X2NvdW50KCkp
Ci0gICAgaW50ZXJuYWw6OnBvc2l4OjpBYm9ydCgpOwotICByZXR1cm4gdGVzdF9wYXJ0X3Jlc3Vs
dHNfLmF0KGkpOwotfQotCi0vLyBSZXR1cm5zIHRoZSBpLXRoIHRlc3QgcHJvcGVydHkuIGkgY2Fu
IHJhbmdlIGZyb20gMCB0bwotLy8gdGVzdF9wcm9wZXJ0eV9jb3VudCgpIC0gMS4gSWYgaSBpcyBu
b3QgaW4gdGhhdCByYW5nZSwgYWJvcnRzIHRoZQotLy8gcHJvZ3JhbS4KLWNvbnN0IFRlc3RQcm9w
ZXJ0eSYgVGVzdFJlc3VsdDo6R2V0VGVzdFByb3BlcnR5KGludCBpKSBjb25zdCB7Ci0gIGlmIChp
IDwgMCB8fCBpID49IHRlc3RfcHJvcGVydHlfY291bnQoKSkKLSAgICBpbnRlcm5hbDo6cG9zaXg6
OkFib3J0KCk7Ci0gIHJldHVybiB0ZXN0X3Byb3BlcnRpZXNfLmF0KGkpOwotfQotCi0vLyBDbGVh
cnMgdGhlIHRlc3QgcGFydCByZXN1bHRzLgotdm9pZCBUZXN0UmVzdWx0OjpDbGVhclRlc3RQYXJ0
UmVzdWx0cygpIHsKLSAgdGVzdF9wYXJ0X3Jlc3VsdHNfLmNsZWFyKCk7Ci19Ci0KLS8vIEFkZHMg
YSB0ZXN0IHBhcnQgcmVzdWx0IHRvIHRoZSBsaXN0Lgotdm9pZCBUZXN0UmVzdWx0OjpBZGRUZXN0
UGFydFJlc3VsdChjb25zdCBUZXN0UGFydFJlc3VsdCYgdGVzdF9wYXJ0X3Jlc3VsdCkgewotICB0
ZXN0X3BhcnRfcmVzdWx0c18ucHVzaF9iYWNrKHRlc3RfcGFydF9yZXN1bHQpOwotfQotCi0vLyBB
ZGRzIGEgdGVzdCBwcm9wZXJ0eSB0byB0aGUgbGlzdC4gSWYgYSBwcm9wZXJ0eSB3aXRoIHRoZSBz
YW1lIGtleSBhcyB0aGUKLS8vIHN1cHBsaWVkIHByb3BlcnR5IGlzIGFscmVhZHkgcmVwcmVzZW50
ZWQsIHRoZSB2YWx1ZSBvZiB0aGlzIHRlc3RfcHJvcGVydHkKLS8vIHJlcGxhY2VzIHRoZSBvbGQg
dmFsdWUgZm9yIHRoYXQga2V5Lgotdm9pZCBUZXN0UmVzdWx0OjpSZWNvcmRQcm9wZXJ0eShjb25z
dCBzdGQ6OnN0cmluZyYgeG1sX2VsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRlc3RQcm9wZXJ0eSYgdGVzdF9wcm9wZXJ0eSkgewotICBpZiAoIVZhbGlkYXRl
VGVzdFByb3BlcnR5KHhtbF9lbGVtZW50LCB0ZXN0X3Byb3BlcnR5KSkgewotICAgIHJldHVybjsK
LSAgfQotICBpbnRlcm5hbDo6TXV0ZXhMb2NrIGxvY2soJnRlc3RfcHJvcGVyaXRlc19tdXRleF8p
OwotICBjb25zdCBzdGQ6OnZlY3RvcjxUZXN0UHJvcGVydHk+OjppdGVyYXRvciBwcm9wZXJ0eV93
aXRoX21hdGNoaW5nX2tleSA9Ci0gICAgICBzdGQ6OmZpbmRfaWYodGVzdF9wcm9wZXJ0aWVzXy5i
ZWdpbigpLCB0ZXN0X3Byb3BlcnRpZXNfLmVuZCgpLAotICAgICAgICAgICAgICAgICAgIGludGVy
bmFsOjpUZXN0UHJvcGVydHlLZXlJcyh0ZXN0X3Byb3BlcnR5LmtleSgpKSk7Ci0gIGlmIChwcm9w
ZXJ0eV93aXRoX21hdGNoaW5nX2tleSA9PSB0ZXN0X3Byb3BlcnRpZXNfLmVuZCgpKSB7Ci0gICAg
dGVzdF9wcm9wZXJ0aWVzXy5wdXNoX2JhY2sodGVzdF9wcm9wZXJ0eSk7Ci0gICAgcmV0dXJuOwot
ICB9Ci0gIHByb3BlcnR5X3dpdGhfbWF0Y2hpbmdfa2V5LT5TZXRWYWx1ZSh0ZXN0X3Byb3BlcnR5
LnZhbHVlKCkpOwotfQotCi0vLyBUaGUgbGlzdCBvZiByZXNlcnZlZCBhdHRyaWJ1dGVzIHVzZWQg
aW4gdGhlIDx0ZXN0c3VpdGVzPiBlbGVtZW50IG9mIFhNTAotLy8gb3V0cHV0Lgotc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGtSZXNlcnZlZFRlc3RTdWl0ZXNBdHRyaWJ1dGVzW10gPSB7Ci0gICJk
aXNhYmxlZCIsCi0gICJlcnJvcnMiLAotICAiZmFpbHVyZXMiLAotICAibmFtZSIsCi0gICJyYW5k
b21fc2VlZCIsCi0gICJ0ZXN0cyIsCi0gICJ0aW1lIiwKLSAgInRpbWVzdGFtcCIKLX07Ci0KLS8v
IFRoZSBsaXN0IG9mIHJlc2VydmVkIGF0dHJpYnV0ZXMgdXNlZCBpbiB0aGUgPHRlc3RzdWl0ZT4g
ZWxlbWVudCBvZiBYTUwKLS8vIG91dHB1dC4KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBrUmVz
ZXJ2ZWRUZXN0U3VpdGVBdHRyaWJ1dGVzW10gPSB7Ci0gICJkaXNhYmxlZCIsCi0gICJlcnJvcnMi
LAotICAiZmFpbHVyZXMiLAotICAibmFtZSIsCi0gICJ0ZXN0cyIsCi0gICJ0aW1lIgotfTsKLQot
Ly8gVGhlIGxpc3Qgb2YgcmVzZXJ2ZWQgYXR0cmlidXRlcyB1c2VkIGluIHRoZSA8dGVzdGNhc2U+
IGVsZW1lbnQgb2YgWE1MIG91dHB1dC4KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBrUmVzZXJ2
ZWRUZXN0Q2FzZUF0dHJpYnV0ZXNbXSA9IHsKLSAgImNsYXNzbmFtZSIsCi0gICJuYW1lIiwKLSAg
InN0YXR1cyIsCi0gICJ0aW1lIiwKLSAgInR5cGVfcGFyYW0iLAotICAidmFsdWVfcGFyYW0iCi19
OwotCi10ZW1wbGF0ZSA8aW50IGtTaXplPgotc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEFycmF5
QXNWZWN0b3IoY29uc3QgY2hhciogY29uc3QgKCZhcnJheSlba1NpemVdKSB7Ci0gIHJldHVybiBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oYXJyYXksIGFycmF5ICsga1NpemUpOwotfQotCi1zdGF0
aWMgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldFJlc2VydmVkQXR0cmlidXRlc0ZvckVsZW1l
bnQoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIHhtbF9lbGVtZW50KSB7Ci0gIGlmICh4bWxfZWxl
bWVudCA9PSAidGVzdHN1aXRlcyIpIHsKLSAgICByZXR1cm4gQXJyYXlBc1ZlY3RvcihrUmVzZXJ2
ZWRUZXN0U3VpdGVzQXR0cmlidXRlcyk7Ci0gIH0gZWxzZSBpZiAoeG1sX2VsZW1lbnQgPT0gInRl
c3RzdWl0ZSIpIHsKLSAgICByZXR1cm4gQXJyYXlBc1ZlY3RvcihrUmVzZXJ2ZWRUZXN0U3VpdGVB
dHRyaWJ1dGVzKTsKLSAgfSBlbHNlIGlmICh4bWxfZWxlbWVudCA9PSAidGVzdGNhc2UiKSB7Ci0g
ICAgcmV0dXJuIEFycmF5QXNWZWN0b3Ioa1Jlc2VydmVkVGVzdENhc2VBdHRyaWJ1dGVzKTsKLSAg
fSBlbHNlIHsKLSAgICBHVEVTVF9DSEVDS18oZmFsc2UpIDw8ICJVbnJlY29nbml6ZWQgeG1sX2Vs
ZW1lbnQgcHJvdmlkZWQ6ICIgPDwgeG1sX2VsZW1lbnQ7Ci0gIH0KLSAgLy8gVGhpcyBjb2RlIGlz
IHVucmVhY2hhYmxlIGJ1dCBzb21lIGNvbXBpbGVycyBtYXkgbm90IHJlYWxpemVzIHRoYXQuCi0g
IHJldHVybiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKTsKLX0KLQotc3RhdGljIHN0ZDo6c3Ry
aW5nIEZvcm1hdFdvcmRMaXN0KGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgd29yZHMp
IHsKLSAgTWVzc2FnZSB3b3JkX2xpc3Q7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29yZHMu
c2l6ZSgpOyArK2kpIHsKLSAgICBpZiAoaSA+IDAgJiYgd29yZHMuc2l6ZSgpID4gMikgewotICAg
ICAgd29yZF9saXN0IDw8ICIsICI7Ci0gICAgfQotICAgIGlmIChpID09IHdvcmRzLnNpemUoKSAt
IDEpIHsKLSAgICAgIHdvcmRfbGlzdCA8PCAiYW5kICI7Ci0gICAgfQotICAgIHdvcmRfbGlzdCA8
PCAiJyIgPDwgd29yZHNbaV0gPDwgIiciOwotICB9Ci0gIHJldHVybiB3b3JkX2xpc3QuR2V0U3Ry
aW5nKCk7Ci19Ci0KLWJvb2wgVmFsaWRhdGVUZXN0UHJvcGVydHlOYW1lKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBwcm9wZXJ0eV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiByZXNlcnZlZF9uYW1lcykgewotICBpZiAoc3RkOjpm
aW5kKHJlc2VydmVkX25hbWVzLmJlZ2luKCksIHJlc2VydmVkX25hbWVzLmVuZCgpLCBwcm9wZXJ0
eV9uYW1lKSAhPQotICAgICAgICAgIHJlc2VydmVkX25hbWVzLmVuZCgpKSB7Ci0gICAgQUREX0ZB
SUxVUkUoKSA8PCAiUmVzZXJ2ZWQga2V5IHVzZWQgaW4gUmVjb3JkUHJvcGVydHkoKTogIiA8PCBw
cm9wZXJ0eV9uYW1lCi0gICAgICAgICAgICAgICAgICA8PCAiICgiIDw8IEZvcm1hdFdvcmRMaXN0
KHJlc2VydmVkX25hbWVzKQotICAgICAgICAgICAgICAgICAgPDwgIiBhcmUgcmVzZXJ2ZWQgYnkg
IiA8PCBHVEVTVF9OQU1FXyA8PCAiKSI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVy
biB0cnVlOwotfQotCi0vLyBBZGRzIGEgZmFpbHVyZSBpZiB0aGUga2V5IGlzIGEgcmVzZXJ2ZWQg
YXR0cmlidXRlIG9mIHRoZSBlbGVtZW50IG5hbWVkCi0vLyB4bWxfZWxlbWVudC4gIFJldHVybnMg
dHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgdmFsaWQuCi1ib29sIFRlc3RSZXN1bHQ6OlZhbGlkYXRl
VGVzdFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiB4bWxfZWxlbWVudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVzdFByb3BlcnR5JiB0ZXN0X3Byb3Bl
cnR5KSB7Ci0gIHJldHVybiBWYWxpZGF0ZVRlc3RQcm9wZXJ0eU5hbWUodGVzdF9wcm9wZXJ0eS5r
ZXkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRSZXNlcnZlZEF0dHJp
YnV0ZXNGb3JFbGVtZW50KHhtbF9lbGVtZW50KSk7Ci19Ci0KLS8vIENsZWFycyB0aGUgb2JqZWN0
Lgotdm9pZCBUZXN0UmVzdWx0OjpDbGVhcigpIHsKLSAgdGVzdF9wYXJ0X3Jlc3VsdHNfLmNsZWFy
KCk7Ci0gIHRlc3RfcHJvcGVydGllc18uY2xlYXIoKTsKLSAgZGVhdGhfdGVzdF9jb3VudF8gPSAw
OwotICBlbGFwc2VkX3RpbWVfID0gMDsKLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgdGVz
dCBmYWlsZWQuCi1ib29sIFRlc3RSZXN1bHQ6OkZhaWxlZCgpIGNvbnN0IHsKLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCB0b3RhbF9wYXJ0X2NvdW50KCk7ICsraSkgewotICAgIGlmIChHZXRUZXN0UGFy
dFJlc3VsdChpKS5mYWlsZWQoKSkKLSAgICAgIHJldHVybiB0cnVlOwotICB9Ci0gIHJldHVybiBm
YWxzZTsKLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgdGVzdCBwYXJ0IGZhdGFsbHkgZmFp
bGVkLgotc3RhdGljIGJvb2wgVGVzdFBhcnRGYXRhbGx5RmFpbGVkKGNvbnN0IFRlc3RQYXJ0UmVz
dWx0JiByZXN1bHQpIHsKLSAgcmV0dXJuIHJlc3VsdC5mYXRhbGx5X2ZhaWxlZCgpOwotfQotCi0v
LyBSZXR1cm5zIHRydWUgaWZmIHRoZSB0ZXN0IGZhdGFsbHkgZmFpbGVkLgotYm9vbCBUZXN0UmVz
dWx0OjpIYXNGYXRhbEZhaWx1cmUoKSBjb25zdCB7Ci0gIHJldHVybiBDb3VudElmKHRlc3RfcGFy
dF9yZXN1bHRzXywgVGVzdFBhcnRGYXRhbGx5RmFpbGVkKSA+IDA7Ci19Ci0KLS8vIFJldHVybnMg
dHJ1ZSBpZmYgdGhlIHRlc3QgcGFydCBub24tZmF0YWxseSBmYWlsZWQuCi1zdGF0aWMgYm9vbCBU
ZXN0UGFydE5vbmZhdGFsbHlGYWlsZWQoY29uc3QgVGVzdFBhcnRSZXN1bHQmIHJlc3VsdCkgewot
ICByZXR1cm4gcmVzdWx0Lm5vbmZhdGFsbHlfZmFpbGVkKCk7Ci19Ci0KLS8vIFJldHVybnMgdHJ1
ZSBpZmYgdGhlIHRlc3QgaGFzIGEgbm9uLWZhdGFsIGZhaWx1cmUuCi1ib29sIFRlc3RSZXN1bHQ6
Okhhc05vbmZhdGFsRmFpbHVyZSgpIGNvbnN0IHsKLSAgcmV0dXJuIENvdW50SWYodGVzdF9wYXJ0
X3Jlc3VsdHNfLCBUZXN0UGFydE5vbmZhdGFsbHlGYWlsZWQpID4gMDsKLX0KLQotLy8gR2V0cyB0
aGUgbnVtYmVyIG9mIGFsbCB0ZXN0IHBhcnRzLiAgVGhpcyBpcyB0aGUgc3VtIG9mIHRoZSBudW1i
ZXIKLS8vIG9mIHN1Y2Nlc3NmdWwgdGVzdCBwYXJ0cyBhbmQgdGhlIG51bWJlciBvZiBmYWlsZWQg
dGVzdCBwYXJ0cy4KLWludCBUZXN0UmVzdWx0Ojp0b3RhbF9wYXJ0X2NvdW50KCkgY29uc3Qgewot
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0ZXN0X3BhcnRfcmVzdWx0c18uc2l6ZSgpKTsKLX0K
LQotLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSB0ZXN0IHByb3BlcnRpZXMuCi1pbnQgVGVz
dFJlc3VsdDo6dGVzdF9wcm9wZXJ0eV9jb3VudCgpIGNvbnN0IHsKLSAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4odGVzdF9wcm9wZXJ0aWVzXy5zaXplKCkpOwotfQotCi0vLyBjbGFzcyBUZXN0Ci0K
LS8vIENyZWF0ZXMgYSBUZXN0IG9iamVjdC4KLQotLy8gVGhlIGMndG9yIHNhdmVzIHRoZSBzdGF0
ZXMgb2YgYWxsIGZsYWdzLgotVGVzdDo6VGVzdCgpCi0gICAgOiBndGVzdF9mbGFnX3NhdmVyXyhu
ZXcgR1RFU1RfRkxBR19TQVZFUl8pIHsKLX0KLQotLy8gVGhlIGQndG9yIHJlc3RvcmVzIHRoZSBz
dGF0ZXMgb2YgYWxsIGZsYWdzLiAgVGhlIGFjdHVhbCB3b3JrIGlzCi0vLyBkb25lIGJ5IHRoZSBk
J3RvciBvZiB0aGUgZ3Rlc3RfZmxhZ19zYXZlcl8gZmllbGQsIGFuZCB0aHVzIG5vdAotLy8gdmlz
aWJsZSBoZXJlLgotVGVzdDo6flRlc3QoKSB7Ci19Ci0KLS8vIFNldHMgdXAgdGhlIHRlc3QgZml4
dHVyZS4KLS8vCi0vLyBBIHN1Yi1jbGFzcyBtYXkgb3ZlcnJpZGUgdGhpcy4KLXZvaWQgVGVzdDo6
U2V0VXAoKSB7Ci19Ci0KLS8vIFRlYXJzIGRvd24gdGhlIHRlc3QgZml4dHVyZS4KLS8vCi0vLyBB
IHN1Yi1jbGFzcyBtYXkgb3ZlcnJpZGUgdGhpcy4KLXZvaWQgVGVzdDo6VGVhckRvd24oKSB7Ci19
Ci0KLS8vIEFsbG93cyB1c2VyIHN1cHBsaWVkIGtleSB2YWx1ZSBwYWlycyB0byBiZSByZWNvcmRl
ZCBmb3IgbGF0ZXIgb3V0cHV0Lgotdm9pZCBUZXN0OjpSZWNvcmRQcm9wZXJ0eShjb25zdCBzdGQ6
OnN0cmluZyYga2V5LCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgVW5pdFRlc3Q6Okdl
dEluc3RhbmNlKCktPlJlY29yZFByb3BlcnR5KGtleSwgdmFsdWUpOwotfQotCi0vLyBBbGxvd3Mg
dXNlciBzdXBwbGllZCBrZXkgdmFsdWUgcGFpcnMgdG8gYmUgcmVjb3JkZWQgZm9yIGxhdGVyIG91
dHB1dC4KLXZvaWQgVGVzdDo6UmVjb3JkUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwg
aW50IHZhbHVlKSB7Ci0gIE1lc3NhZ2UgdmFsdWVfbWVzc2FnZTsKLSAgdmFsdWVfbWVzc2FnZSA8
PCB2YWx1ZTsKLSAgUmVjb3JkUHJvcGVydHkoa2V5LCB2YWx1ZV9tZXNzYWdlLkdldFN0cmluZygp
LmNfc3RyKCkpOwotfQotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi12b2lkIFJlcG9ydEZhaWx1
cmVJblVua25vd25Mb2NhdGlvbihUZXN0UGFydFJlc3VsdDo6VHlwZSByZXN1bHRfdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNz
YWdlKSB7Ci0gIC8vIFRoaXMgZnVuY3Rpb24gaXMgYSBmcmllbmQgb2YgVW5pdFRlc3QgYW5kIGFz
IHN1Y2ggaGFzIGFjY2VzcyB0bwotICAvLyBBZGRUZXN0UGFydFJlc3VsdC4KLSAgVW5pdFRlc3Q6
OkdldEluc3RhbmNlKCktPkFkZFRlc3RQYXJ0UmVzdWx0KAotICAgICAgcmVzdWx0X3R5cGUsCi0g
ICAgICBOVUxMLCAgLy8gTm8gaW5mbyBhYm91dCB0aGUgc291cmNlIGZpbGUgd2hlcmUgdGhlIGV4
Y2VwdGlvbiBvY2N1cnJlZC4KLSAgICAgIC0xLCAgICAvLyBXZSBoYXZlIG5vIGluZm8gb24gd2hp
Y2ggbGluZSBjYXVzZWQgdGhlIGV4Y2VwdGlvbi4KLSAgICAgIG1lc3NhZ2UsCi0gICAgICAiIik7
ICAgLy8gTm8gc3RhY2sgdHJhY2UsIGVpdGhlci4KLX0KLQotfSAgLy8gbmFtZXNwYWNlIGludGVy
bmFsCi0KLS8vIEdvb2dsZSBUZXN0IHJlcXVpcmVzIGFsbCB0ZXN0cyBpbiB0aGUgc2FtZSB0ZXN0
IGNhc2UgdG8gdXNlIHRoZSBzYW1lIHRlc3QKLS8vIGZpeHR1cmUgY2xhc3MuICBUaGlzIGZ1bmN0
aW9uIGNoZWNrcyBpZiB0aGUgY3VycmVudCB0ZXN0IGhhcyB0aGUKLS8vIHNhbWUgZml4dHVyZSBj
bGFzcyBhcyB0aGUgZmlyc3QgdGVzdCBpbiB0aGUgY3VycmVudCB0ZXN0IGNhc2UuICBJZgotLy8g
eWVzLCBpdCByZXR1cm5zIHRydWU7IG90aGVyd2lzZSBpdCBnZW5lcmF0ZXMgYSBHb29nbGUgVGVz
dCBmYWlsdXJlIGFuZAotLy8gcmV0dXJucyBmYWxzZS4KLWJvb2wgVGVzdDo6SGFzU2FtZUZpeHR1
cmVDbGFzcygpIHsKLSAgaW50ZXJuYWw6OlVuaXRUZXN0SW1wbCogY29uc3QgaW1wbCA9IGludGVy
bmFsOjpHZXRVbml0VGVzdEltcGwoKTsKLSAgY29uc3QgVGVzdENhc2UqIGNvbnN0IHRlc3RfY2Fz
ZSA9IGltcGwtPmN1cnJlbnRfdGVzdF9jYXNlKCk7Ci0KLSAgLy8gSW5mbyBhYm91dCB0aGUgZmly
c3QgdGVzdCBpbiB0aGUgY3VycmVudCB0ZXN0IGNhc2UuCi0gIGNvbnN0IFRlc3RJbmZvKiBjb25z
dCBmaXJzdF90ZXN0X2luZm8gPSB0ZXN0X2Nhc2UtPnRlc3RfaW5mb19saXN0KClbMF07Ci0gIGNv
bnN0IGludGVybmFsOjpUeXBlSWQgZmlyc3RfZml4dHVyZV9pZCA9IGZpcnN0X3Rlc3RfaW5mby0+
Zml4dHVyZV9jbGFzc19pZF87Ci0gIGNvbnN0IGNoYXIqIGNvbnN0IGZpcnN0X3Rlc3RfbmFtZSA9
IGZpcnN0X3Rlc3RfaW5mby0+bmFtZSgpOwotCi0gIC8vIEluZm8gYWJvdXQgdGhlIGN1cnJlbnQg
dGVzdC4KLSAgY29uc3QgVGVzdEluZm8qIGNvbnN0IHRoaXNfdGVzdF9pbmZvID0gaW1wbC0+Y3Vy
cmVudF90ZXN0X2luZm8oKTsKLSAgY29uc3QgaW50ZXJuYWw6OlR5cGVJZCB0aGlzX2ZpeHR1cmVf
aWQgPSB0aGlzX3Rlc3RfaW5mby0+Zml4dHVyZV9jbGFzc19pZF87Ci0gIGNvbnN0IGNoYXIqIGNv
bnN0IHRoaXNfdGVzdF9uYW1lID0gdGhpc190ZXN0X2luZm8tPm5hbWUoKTsKLQotICBpZiAodGhp
c19maXh0dXJlX2lkICE9IGZpcnN0X2ZpeHR1cmVfaWQpIHsKLSAgICAvLyBJcyB0aGUgZmlyc3Qg
dGVzdCBkZWZpbmVkIHVzaW5nIFRFU1Q/Ci0gICAgY29uc3QgYm9vbCBmaXJzdF9pc19URVNUID0g
Zmlyc3RfZml4dHVyZV9pZCA9PSBpbnRlcm5hbDo6R2V0VGVzdFR5cGVJZCgpOwotICAgIC8vIElz
IHRoaXMgdGVzdCBkZWZpbmVkIHVzaW5nIFRFU1Q/Ci0gICAgY29uc3QgYm9vbCB0aGlzX2lzX1RF
U1QgPSB0aGlzX2ZpeHR1cmVfaWQgPT0gaW50ZXJuYWw6OkdldFRlc3RUeXBlSWQoKTsKLQotICAg
IGlmIChmaXJzdF9pc19URVNUIHx8IHRoaXNfaXNfVEVTVCkgewotICAgICAgLy8gQm90aCBURVNU
IGFuZCBURVNUX0YgYXBwZWFyIGluIHNhbWUgdGVzdCBjYXNlLCB3aGljaCBpcyBpbmNvcnJlY3Qu
Ci0gICAgICAvLyBUZWxsIHRoZSB1c2VyIGhvdyB0byBmaXggdGhpcy4KLQotICAgICAgLy8gR2V0
cyB0aGUgbmFtZSBvZiB0aGUgVEVTVCBhbmQgdGhlIG5hbWUgb2YgdGhlIFRFU1RfRi4gIE5vdGUK
LSAgICAgIC8vIHRoYXQgZmlyc3RfaXNfVEVTVCBhbmQgdGhpc19pc19URVNUIGNhbm5vdCBib3Ro
IGJlIHRydWUsIGFzCi0gICAgICAvLyB0aGUgZml4dHVyZSBJRHMgYXJlIGRpZmZlcmVudCBmb3Ig
dGhlIHR3byB0ZXN0cy4KLSAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IFRFU1RfbmFtZSA9Ci0gICAg
ICAgICAgZmlyc3RfaXNfVEVTVCA/IGZpcnN0X3Rlc3RfbmFtZSA6IHRoaXNfdGVzdF9uYW1lOwot
ICAgICAgY29uc3QgY2hhciogY29uc3QgVEVTVF9GX25hbWUgPQotICAgICAgICAgIGZpcnN0X2lz
X1RFU1QgPyB0aGlzX3Rlc3RfbmFtZSA6IGZpcnN0X3Rlc3RfbmFtZTsKLQotICAgICAgQUREX0ZB
SUxVUkUoKQotICAgICAgICAgIDw8ICJBbGwgdGVzdHMgaW4gdGhlIHNhbWUgdGVzdCBjYXNlIG11
c3QgdXNlIHRoZSBzYW1lIHRlc3QgZml4dHVyZVxuIgotICAgICAgICAgIDw8ICJjbGFzcywgc28g
bWl4aW5nIFRFU1RfRiBhbmQgVEVTVCBpbiB0aGUgc2FtZSB0ZXN0IGNhc2UgaXNcbiIKLSAgICAg
ICAgICA8PCAiaWxsZWdhbC4gIEluIHRlc3QgY2FzZSAiIDw8IHRoaXNfdGVzdF9pbmZvLT50ZXN0
X2Nhc2VfbmFtZSgpCi0gICAgICAgICAgPDwgIixcbiIKLSAgICAgICAgICA8PCAidGVzdCAiIDw8
IFRFU1RfRl9uYW1lIDw8ICIgaXMgZGVmaW5lZCB1c2luZyBURVNUX0YgYnV0XG4iCi0gICAgICAg
ICAgPDwgInRlc3QgIiA8PCBURVNUX25hbWUgPDwgIiBpcyBkZWZpbmVkIHVzaW5nIFRFU1QuICBZ
b3UgcHJvYmFibHlcbiIKLSAgICAgICAgICA8PCAid2FudCB0byBjaGFuZ2UgdGhlIFRFU1QgdG8g
VEVTVF9GIG9yIG1vdmUgaXQgdG8gYW5vdGhlciB0ZXN0XG4iCi0gICAgICAgICAgPDwgImNhc2Uu
IjsKLSAgICB9IGVsc2UgewotICAgICAgLy8gVHdvIGZpeHR1cmUgY2xhc3NlcyB3aXRoIHRoZSBz
YW1lIG5hbWUgYXBwZWFyIGluIHR3byBkaWZmZXJlbnQKLSAgICAgIC8vIG5hbWVzcGFjZXMsIHdo
aWNoIGlzIG5vdCBhbGxvd2VkLiBUZWxsIHRoZSB1c2VyIGhvdyB0byBmaXggdGhpcy4KLSAgICAg
IEFERF9GQUlMVVJFKCkKLSAgICAgICAgICA8PCAiQWxsIHRlc3RzIGluIHRoZSBzYW1lIHRlc3Qg
Y2FzZSBtdXN0IHVzZSB0aGUgc2FtZSB0ZXN0IGZpeHR1cmVcbiIKLSAgICAgICAgICA8PCAiY2xh
c3MuICBIb3dldmVyLCBpbiB0ZXN0IGNhc2UgIgotICAgICAgICAgIDw8IHRoaXNfdGVzdF9pbmZv
LT50ZXN0X2Nhc2VfbmFtZSgpIDw8ICIsXG4iCi0gICAgICAgICAgPDwgInlvdSBkZWZpbmVkIHRl
c3QgIiA8PCBmaXJzdF90ZXN0X25hbWUKLSAgICAgICAgICA8PCAiIGFuZCB0ZXN0ICIgPDwgdGhp
c190ZXN0X25hbWUgPDwgIlxuIgotICAgICAgICAgIDw8ICJ1c2luZyB0d28gZGlmZmVyZW50IHRl
c3QgZml4dHVyZSBjbGFzc2VzLiAgVGhpcyBjYW4gaGFwcGVuIGlmXG4iCi0gICAgICAgICAgPDwg
InRoZSB0d28gY2xhc3NlcyBhcmUgZnJvbSBkaWZmZXJlbnQgbmFtZXNwYWNlcyBvciB0cmFuc2xh
dGlvblxuIgotICAgICAgICAgIDw8ICJ1bml0cyBhbmQgaGF2ZSB0aGUgc2FtZSBuYW1lLiAgWW91
IHNob3VsZCBwcm9iYWJseSByZW5hbWUgb25lXG4iCi0gICAgICAgICAgPDwgIm9mIHRoZSBjbGFz
c2VzIHRvIHB1dCB0aGUgdGVzdHMgaW50byBkaWZmZXJlbnQgdGVzdCBjYXNlcy4iOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotI2lmIEdURVNU
X0hBU19TRUgKLQotLy8gQWRkcyBhbiAiZXhjZXB0aW9uIHRocm93biIgZmF0YWwgZmFpbHVyZSB0
byB0aGUgY3VycmVudCB0ZXN0LiAgVGhpcwotLy8gZnVuY3Rpb24gcmV0dXJucyBpdHMgcmVzdWx0
IHZpYSBhbiBvdXRwdXQgcGFyYW1ldGVyIHBvaW50ZXIgYmVjYXVzZSBWQysrCi0vLyBwcm9oaWJp
dHMgY3JlYXRpb24gb2Ygb2JqZWN0cyB3aXRoIGRlc3RydWN0b3JzIG9uIHN0YWNrIGluIGZ1bmN0
aW9ucwotLy8gdXNpbmcgX190cnkgKHNlZSBlcnJvciBDMjcxMikuCi1zdGF0aWMgc3RkOjpzdHJp
bmcqIEZvcm1hdFNlaEV4Y2VwdGlvbk1lc3NhZ2UoRFdPUkQgZXhjZXB0aW9uX2NvZGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbG9j
YXRpb24pIHsKLSAgTWVzc2FnZSBtZXNzYWdlOwotICBtZXNzYWdlIDw8ICJTRUggZXhjZXB0aW9u
IHdpdGggY29kZSAweCIgPDwgc3RkOjpzZXRiYXNlKDE2KSA8PAotICAgIGV4Y2VwdGlvbl9jb2Rl
IDw8IHN0ZDo6c2V0YmFzZSgxMCkgPDwgIiB0aHJvd24gaW4gIiA8PCBsb2NhdGlvbiA8PCAiLiI7
Ci0KLSAgcmV0dXJuIG5ldyBzdGQ6OnN0cmluZyhtZXNzYWdlLkdldFN0cmluZygpKTsKLX0KLQot
I2VuZGlmICAvLyBHVEVTVF9IQVNfU0VICi0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLSNpZiBH
VEVTVF9IQVNfRVhDRVBUSU9OUwotCi0vLyBBZGRzIGFuICJleGNlcHRpb24gdGhyb3duIiBmYXRh
bCBmYWlsdXJlIHRvIHRoZSBjdXJyZW50IHRlc3QuCi1zdGF0aWMgc3RkOjpzdHJpbmcgRm9ybWF0
Q3h4RXhjZXB0aW9uTWVzc2FnZShjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGxvY2F0aW9uKSB7
Ci0gIE1lc3NhZ2UgbWVzc2FnZTsKLSAgaWYgKGRlc2NyaXB0aW9uICE9IE5VTEwpIHsKLSAgICBt
ZXNzYWdlIDw8ICJDKysgZXhjZXB0aW9uIHdpdGggZGVzY3JpcHRpb24gXCIiIDw8IGRlc2NyaXB0
aW9uIDw8ICJcIiI7Ci0gIH0gZWxzZSB7Ci0gICAgbWVzc2FnZSA8PCAiVW5rbm93biBDKysgZXhj
ZXB0aW9uIjsKLSAgfQotICBtZXNzYWdlIDw8ICIgdGhyb3duIGluICIgPDwgbG9jYXRpb24gPDwg
Ii4iOwotCi0gIHJldHVybiBtZXNzYWdlLkdldFN0cmluZygpOwotfQotCi1zdGF0aWMgc3RkOjpz
dHJpbmcgUHJpbnRUZXN0UGFydFJlc3VsdFRvU3RyaW5nKAotICAgIGNvbnN0IFRlc3RQYXJ0UmVz
dWx0JiB0ZXN0X3BhcnRfcmVzdWx0KTsKLQotR29vZ2xlVGVzdEZhaWx1cmVFeGNlcHRpb246Okdv
b2dsZVRlc3RGYWlsdXJlRXhjZXB0aW9uKAotICAgIGNvbnN0IFRlc3RQYXJ0UmVzdWx0JiBmYWls
dXJlKQotICAgIDogOjpzdGQ6OnJ1bnRpbWVfZXJyb3IoUHJpbnRUZXN0UGFydFJlc3VsdFRvU3Ry
aW5nKGZhaWx1cmUpLmNfc3RyKCkpIHt9Ci0KLSNlbmRpZiAgLy8gR1RFU1RfSEFTX0VYQ0VQVElP
TlMKLQotLy8gV2UgcHV0IHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgaW4gdGhlIGludGVybmFsIG5h
bWVzcGFjZSBhcyBJQk0ncyB4bEMKLS8vIGNvbXBpbGVyIHJlamVjdHMgdGhlIGNvZGUgaWYgdGhl
eSB3ZXJlIGRlY2xhcmVkIHN0YXRpYy4KLQotLy8gUnVucyB0aGUgZ2l2ZW4gbWV0aG9kIGFuZCBo
YW5kbGVzIFNFSCBleGNlcHRpb25zIGl0IHRocm93cywgd2hlbgotLy8gU0VIIGlzIHN1cHBvcnRl
ZDsgcmV0dXJucyB0aGUgMC12YWx1ZSBmb3IgdHlwZSBSZXN1bHQgaW4gY2FzZSBvZiBhbgotLy8g
U0VIIGV4Y2VwdGlvbi4gIChNaWNyb3NvZnQgY29tcGlsZXJzIGNhbm5vdCBoYW5kbGUgU0VIIGFu
ZCBDKysKLS8vIGV4Y2VwdGlvbnMgaW4gdGhlIHNhbWUgZnVuY3Rpb24uICBUaGVyZWZvcmUsIHdl
IHByb3ZpZGUgYSBzZXBhcmF0ZQotLy8gd3JhcHBlciBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgU0VI
IGV4Y2VwdGlvbnMuKQotdGVtcGxhdGUgPGNsYXNzIFQsIHR5cGVuYW1lIFJlc3VsdD4KLVJlc3Vs
dCBIYW5kbGVTZWhFeGNlcHRpb25zSW5NZXRob2RJZlN1cHBvcnRlZCgKLSAgICBUKiBvYmplY3Qs
IFJlc3VsdCAoVDo6Km1ldGhvZCkoKSwgY29uc3QgY2hhciogbG9jYXRpb24pIHsKLSNpZiBHVEVT
VF9IQVNfU0VICi0gIF9fdHJ5IHsKLSAgICByZXR1cm4gKG9iamVjdC0+Km1ldGhvZCkoKTsKLSAg
fSBfX2V4Y2VwdCAoaW50ZXJuYWw6OlVuaXRUZXN0T3B0aW9uczo6R1Rlc3RTaG91bGRQcm9jZXNz
U0VIKCAgLy8gTk9MSU5UCi0gICAgICBHZXRFeGNlcHRpb25Db2RlKCkpKSB7Ci0gICAgLy8gV2Ug
Y3JlYXRlIHRoZSBleGNlcHRpb24gbWVzc2FnZSBvbiB0aGUgaGVhcCBiZWNhdXNlIFZDKysgcHJv
aGliaXRzCi0gICAgLy8gY3JlYXRpb24gb2Ygb2JqZWN0cyB3aXRoIGRlc3RydWN0b3JzIG9uIHN0
YWNrIGluIGZ1bmN0aW9ucyB1c2luZyBfX3RyeQotICAgIC8vIChzZWUgZXJyb3IgQzI3MTIpLgot
ICAgIHN0ZDo6c3RyaW5nKiBleGNlcHRpb25fbWVzc2FnZSA9IEZvcm1hdFNlaEV4Y2VwdGlvbk1l
c3NhZ2UoCi0gICAgICAgIEdldEV4Y2VwdGlvbkNvZGUoKSwgbG9jYXRpb24pOwotICAgIGludGVy
bmFsOjpSZXBvcnRGYWlsdXJlSW5Vbmtub3duTG9jYXRpb24oVGVzdFBhcnRSZXN1bHQ6OmtGYXRh
bEZhaWx1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
ZXhjZXB0aW9uX21lc3NhZ2UpOwotICAgIGRlbGV0ZSBleGNlcHRpb25fbWVzc2FnZTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVzdWx0PigwKTsKLSAgfQotI2Vsc2UKLSAgKHZvaWQpbG9jYXRp
b247Ci0gIHJldHVybiAob2JqZWN0LT4qbWV0aG9kKSgpOwotI2VuZGlmICAvLyBHVEVTVF9IQVNf
U0VICi19Ci0KLS8vIFJ1bnMgdGhlIGdpdmVuIG1ldGhvZCBhbmQgY2F0Y2hlcyBhbmQgcmVwb3J0
cyBDKysgYW5kL29yIFNFSC1zdHlsZQotLy8gZXhjZXB0aW9ucywgaWYgdGhleSBhcmUgc3VwcG9y
dGVkOyByZXR1cm5zIHRoZSAwLXZhbHVlIGZvciB0eXBlCi0vLyBSZXN1bHQgaW4gY2FzZSBvZiBh
biBTRUggZXhjZXB0aW9uLgotdGVtcGxhdGUgPGNsYXNzIFQsIHR5cGVuYW1lIFJlc3VsdD4KLVJl
c3VsdCBIYW5kbGVFeGNlcHRpb25zSW5NZXRob2RJZlN1cHBvcnRlZCgKLSAgICBUKiBvYmplY3Qs
IFJlc3VsdCAoVDo6Km1ldGhvZCkoKSwgY29uc3QgY2hhciogbG9jYXRpb24pIHsKLSAgLy8gTk9U
RTogVGhlIHVzZXIgY29kZSBjYW4gYWZmZWN0IHRoZSB3YXkgaW4gd2hpY2ggR29vZ2xlIFRlc3Qg
aGFuZGxlcwotICAvLyBleGNlcHRpb25zIGJ5IHNldHRpbmcgR1RFU1RfRkxBRyhjYXRjaF9leGNl
cHRpb25zKSwgYnV0IG9ubHkgYmVmb3JlCi0gIC8vIFJVTl9BTExfVEVTVFMoKSBzdGFydHMuIEl0
IGlzIHRlY2huaWNhbGx5IHBvc3NpYmxlIHRvIGNoZWNrIHRoZSBmbGFnCi0gIC8vIGFmdGVyIHRo
ZSBleGNlcHRpb24gaXMgY2F1Z2h0IGFuZCBlaXRoZXIgcmVwb3J0IG9yIHJlLXRocm93IHRoZQot
ICAvLyBleGNlcHRpb24gYmFzZWQgb24gdGhlIGZsYWcncyB2YWx1ZToKLSAgLy8KLSAgLy8gdHJ5
IHsKLSAgLy8gICAvLyBQZXJmb3JtIHRoZSB0ZXN0IG1ldGhvZC4KLSAgLy8gfSBjYXRjaCAoLi4u
KSB7Ci0gIC8vICAgaWYgKEdURVNUX0ZMQUcoY2F0Y2hfZXhjZXB0aW9ucykpCi0gIC8vICAgICAv
LyBSZXBvcnQgdGhlIGV4Y2VwdGlvbiBhcyBmYWlsdXJlLgotICAvLyAgIGVsc2UKLSAgLy8gICAg
IHRocm93OyAgLy8gUmUtdGhyb3dzIHRoZSBvcmlnaW5hbCBleGNlcHRpb24uCi0gIC8vIH0KLSAg
Ly8KLSAgLy8gSG93ZXZlciwgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmbGFnIGlzIHRvIGFsbG93IHRo
ZSBwcm9ncmFtIHRvIGRyb3AgaW50bwotICAvLyB0aGUgZGVidWdnZXIgd2hlbiB0aGUgZXhjZXB0
aW9uIGlzIHRocm93bi4gT24gbW9zdCBwbGF0Zm9ybXMsIG9uY2UgdGhlCi0gIC8vIGNvbnRyb2wg
ZW50ZXJzIHRoZSBjYXRjaCBibG9jaywgdGhlIGV4Y2VwdGlvbiBvcmlnaW4gaW5mb3JtYXRpb24g
aXMKLSAgLy8gbG9zdCBhbmQgdGhlIGRlYnVnZ2VyIHdpbGwgc3RvcCB0aGUgcHJvZ3JhbSBhdCB0
aGUgcG9pbnQgb2YgdGhlCi0gIC8vIHJlLXRocm93IGluIHRoaXMgZnVuY3Rpb24gLS0gaW5zdGVh
ZCBvZiBhdCB0aGUgcG9pbnQgb2YgdGhlIG9yaWdpbmFsCi0gIC8vIHRocm93IHN0YXRlbWVudCBp
biB0aGUgY29kZSB1bmRlciB0ZXN0LiAgRm9yIHRoaXMgcmVhc29uLCB3ZSBwZXJmb3JtCi0gIC8v
IHRoZSBjaGVjayBlYXJseSwgc2FjcmlmaWNpbmcgdGhlIGFiaWxpdHkgdG8gYWZmZWN0IEdvb2ds
ZSBUZXN0J3MKLSAgLy8gZXhjZXB0aW9uIGhhbmRsaW5nIGluIHRoZSBtZXRob2Qgd2hlcmUgdGhl
IGV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gIGlmIChpbnRlcm5hbDo6R2V0VW5pdFRlc3RJbXBsKCkt
PmNhdGNoX2V4Y2VwdGlvbnMoKSkgewotI2lmIEdURVNUX0hBU19FWENFUFRJT05TCi0gICAgdHJ5
IHsKLSAgICAgIHJldHVybiBIYW5kbGVTZWhFeGNlcHRpb25zSW5NZXRob2RJZlN1cHBvcnRlZChv
YmplY3QsIG1ldGhvZCwgbG9jYXRpb24pOwotICAgIH0gY2F0Y2ggKGNvbnN0IGludGVybmFsOjpH
b29nbGVUZXN0RmFpbHVyZUV4Y2VwdGlvbiYpIHsgIC8vIE5PTElOVAotICAgICAgLy8gVGhpcyBl
eGNlcHRpb24gdHlwZSBjYW4gb25seSBiZSB0aHJvd24gYnkgYSBmYWlsZWQgR29vZ2xlCi0gICAg
ICAvLyBUZXN0IGFzc2VydGlvbiB3aXRoIHRoZSBpbnRlbnRpb24gb2YgbGV0dGluZyBhbm90aGVy
IHRlc3RpbmcKLSAgICAgIC8vIGZyYW1ld29yayBjYXRjaCBpdC4gIFRoZXJlZm9yZSB3ZSBqdXN0
IHJlLXRocm93IGl0LgotICAgICAgdGhyb3c7Ci0gICAgfSBjYXRjaCAoY29uc3Qgc3RkOjpleGNl
cHRpb24mIGUpIHsgIC8vIE5PTElOVAotICAgICAgaW50ZXJuYWw6OlJlcG9ydEZhaWx1cmVJblVu
a25vd25Mb2NhdGlvbigKLSAgICAgICAgICBUZXN0UGFydFJlc3VsdDo6a0ZhdGFsRmFpbHVyZSwK
LSAgICAgICAgICBGb3JtYXRDeHhFeGNlcHRpb25NZXNzYWdlKGUud2hhdCgpLCBsb2NhdGlvbikp
OwotICAgIH0gY2F0Y2ggKC4uLikgeyAgLy8gTk9MSU5UCi0gICAgICBpbnRlcm5hbDo6UmVwb3J0
RmFpbHVyZUluVW5rbm93bkxvY2F0aW9uKAotICAgICAgICAgIFRlc3RQYXJ0UmVzdWx0OjprRmF0
YWxGYWlsdXJlLAotICAgICAgICAgIEZvcm1hdEN4eEV4Y2VwdGlvbk1lc3NhZ2UoTlVMTCwgbG9j
YXRpb24pKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlc3VsdD4oMCk7Ci0jZWxz
ZQotICAgIHJldHVybiBIYW5kbGVTZWhFeGNlcHRpb25zSW5NZXRob2RJZlN1cHBvcnRlZChvYmpl
Y3QsIG1ldGhvZCwgbG9jYXRpb24pOwotI2VuZGlmICAvLyBHVEVTVF9IQVNfRVhDRVBUSU9OUwot
ICB9IGVsc2UgewotICAgIHJldHVybiAob2JqZWN0LT4qbWV0aG9kKSgpOwotICB9Ci19Ci0KLX0g
IC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotCi0vLyBSdW5zIHRoZSB0ZXN0IGFuZCB1cGRhdGVzIHRo
ZSB0ZXN0IHJlc3VsdC4KLXZvaWQgVGVzdDo6UnVuKCkgewotICBpZiAoIUhhc1NhbWVGaXh0dXJl
Q2xhc3MoKSkgcmV0dXJuOwotCi0gIGludGVybmFsOjpVbml0VGVzdEltcGwqIGNvbnN0IGltcGwg
PSBpbnRlcm5hbDo6R2V0VW5pdFRlc3RJbXBsKCk7Ci0gIGltcGwtPm9zX3N0YWNrX3RyYWNlX2dl
dHRlcigpLT5VcG9uTGVhdmluZ0dUZXN0KCk7Ci0gIGludGVybmFsOjpIYW5kbGVFeGNlcHRpb25z
SW5NZXRob2RJZlN1cHBvcnRlZCh0aGlzLCAmVGVzdDo6U2V0VXAsICJTZXRVcCgpIik7Ci0gIC8v
IFdlIHdpbGwgcnVuIHRoZSB0ZXN0IG9ubHkgaWYgU2V0VXAoKSB3YXMgc3VjY2Vzc2Z1bC4KLSAg
aWYgKCFIYXNGYXRhbEZhaWx1cmUoKSkgewotICAgIGltcGwtPm9zX3N0YWNrX3RyYWNlX2dldHRl
cigpLT5VcG9uTGVhdmluZ0dUZXN0KCk7Ci0gICAgaW50ZXJuYWw6OkhhbmRsZUV4Y2VwdGlvbnNJ
bk1ldGhvZElmU3VwcG9ydGVkKAotICAgICAgICB0aGlzLCAmVGVzdDo6VGVzdEJvZHksICJ0aGUg
dGVzdCBib2R5Iik7Ci0gIH0KLQotICAvLyBIb3dldmVyLCB3ZSB3YW50IHRvIGNsZWFuIHVwIGFz
IG11Y2ggYXMgcG9zc2libGUuICBIZW5jZSB3ZSB3aWxsCi0gIC8vIGFsd2F5cyBjYWxsIFRlYXJE
b3duKCksIGV2ZW4gaWYgU2V0VXAoKSBvciB0aGUgdGVzdCBib2R5IGhhcwotICAvLyBmYWlsZWQu
Ci0gIGltcGwtPm9zX3N0YWNrX3RyYWNlX2dldHRlcigpLT5VcG9uTGVhdmluZ0dUZXN0KCk7Ci0g
IGludGVybmFsOjpIYW5kbGVFeGNlcHRpb25zSW5NZXRob2RJZlN1cHBvcnRlZCgKLSAgICAgIHRo
aXMsICZUZXN0OjpUZWFyRG93biwgIlRlYXJEb3duKCkiKTsKLX0KLQotLy8gUmV0dXJucyB0cnVl
IGlmZiB0aGUgY3VycmVudCB0ZXN0IGhhcyBhIGZhdGFsIGZhaWx1cmUuCi1ib29sIFRlc3Q6Okhh
c0ZhdGFsRmFpbHVyZSgpIHsKLSAgcmV0dXJuIGludGVybmFsOjpHZXRVbml0VGVzdEltcGwoKS0+
Y3VycmVudF90ZXN0X3Jlc3VsdCgpLT5IYXNGYXRhbEZhaWx1cmUoKTsKLX0KLQotLy8gUmV0dXJu
cyB0cnVlIGlmZiB0aGUgY3VycmVudCB0ZXN0IGhhcyBhIG5vbi1mYXRhbCBmYWlsdXJlLgotYm9v
bCBUZXN0OjpIYXNOb25mYXRhbEZhaWx1cmUoKSB7Ci0gIHJldHVybiBpbnRlcm5hbDo6R2V0VW5p
dFRlc3RJbXBsKCktPmN1cnJlbnRfdGVzdF9yZXN1bHQoKS0+Ci0gICAgICBIYXNOb25mYXRhbEZh
aWx1cmUoKTsKLX0KLQotLy8gY2xhc3MgVGVzdEluZm8KLQotLy8gQ29uc3RydWN0cyBhIFRlc3RJ
bmZvIG9iamVjdC4gSXQgYXNzdW1lcyBvd25lcnNoaXAgb2YgdGhlIHRlc3QgZmFjdG9yeQotLy8g
b2JqZWN0LgotVGVzdEluZm86OlRlc3RJbmZvKGNvbnN0IHN0ZDo6c3RyaW5nJiBhX3Rlc3RfY2Fz
ZV9uYW1lLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhX25hbWUsCi0g
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYV90eXBlX3BhcmFtLAotICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGFfdmFsdWVfcGFyYW0sCi0gICAgICAgICAgICAgICAgICAgaW50
ZXJuYWw6OkNvZGVMb2NhdGlvbiBhX2NvZGVfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAg
aW50ZXJuYWw6OlR5cGVJZCBmaXh0dXJlX2NsYXNzX2lkLAotICAgICAgICAgICAgICAgICAgIGlu
dGVybmFsOjpUZXN0RmFjdG9yeUJhc2UqIGZhY3RvcnkpCi0gICAgOiB0ZXN0X2Nhc2VfbmFtZV8o
YV90ZXN0X2Nhc2VfbmFtZSksCi0gICAgICBuYW1lXyhhX25hbWUpLAotICAgICAgdHlwZV9wYXJh
bV8oYV90eXBlX3BhcmFtID8gbmV3IHN0ZDo6c3RyaW5nKGFfdHlwZV9wYXJhbSkgOiBOVUxMKSwK
LSAgICAgIHZhbHVlX3BhcmFtXyhhX3ZhbHVlX3BhcmFtID8gbmV3IHN0ZDo6c3RyaW5nKGFfdmFs
dWVfcGFyYW0pIDogTlVMTCksCi0gICAgICBsb2NhdGlvbl8oYV9jb2RlX2xvY2F0aW9uKSwKLSAg
ICAgIGZpeHR1cmVfY2xhc3NfaWRfKGZpeHR1cmVfY2xhc3NfaWQpLAotICAgICAgc2hvdWxkX3J1
bl8oZmFsc2UpLAotICAgICAgaXNfZGlzYWJsZWRfKGZhbHNlKSwKLSAgICAgIG1hdGNoZXNfZmls
dGVyXyhmYWxzZSksCi0gICAgICBmYWN0b3J5XyhmYWN0b3J5KSwKLSAgICAgIHJlc3VsdF8oKSB7
fQotCi0vLyBEZXN0cnVjdHMgYSBUZXN0SW5mbyBvYmplY3QuCi1UZXN0SW5mbzo6flRlc3RJbmZv
KCkgeyBkZWxldGUgZmFjdG9yeV87IH0KLQotbmFtZXNwYWNlIGludGVybmFsIHsKLQotLy8gQ3Jl
YXRlcyBhIG5ldyBUZXN0SW5mbyBvYmplY3QgYW5kIHJlZ2lzdGVycyBpdCB3aXRoIEdvb2dsZSBU
ZXN0OwotLy8gcmV0dXJucyB0aGUgY3JlYXRlZCBvYmplY3QuCi0vLwotLy8gQXJndW1lbnRzOgot
Ly8KLS8vICAgdGVzdF9jYXNlX25hbWU6ICAgbmFtZSBvZiB0aGUgdGVzdCBjYXNlCi0vLyAgIG5h
bWU6ICAgICAgICAgICAgIG5hbWUgb2YgdGhlIHRlc3QKLS8vICAgdHlwZV9wYXJhbTogICAgICAg
dGhlIG5hbWUgb2YgdGhlIHRlc3QncyB0eXBlIHBhcmFtZXRlciwgb3IgTlVMTCBpZgotLy8gICAg
ICAgICAgICAgICAgICAgICB0aGlzIGlzIG5vdCBhIHR5cGVkIG9yIGEgdHlwZS1wYXJhbWV0ZXJp
emVkIHRlc3QuCi0vLyAgIHZhbHVlX3BhcmFtOiAgICAgIHRleHQgcmVwcmVzZW50YXRpb24gb2Yg
dGhlIHRlc3QncyB2YWx1ZSBwYXJhbWV0ZXIsCi0vLyAgICAgICAgICAgICAgICAgICAgIG9yIE5V
TEwgaWYgdGhpcyBpcyBub3QgYSB2YWx1ZS1wYXJhbWV0ZXJpemVkIHRlc3QuCi0vLyAgIGNvZGVf
bG9jYXRpb246ICAgIGNvZGUgbG9jYXRpb24gd2hlcmUgdGhlIHRlc3QgaXMgZGVmaW5lZAotLy8g
ICBmaXh0dXJlX2NsYXNzX2lkOiBJRCBvZiB0aGUgdGVzdCBmaXh0dXJlIGNsYXNzCi0vLyAgIHNl
dF91cF90YzogICAgICAgIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUg
dGVzdCBjYXNlCi0vLyAgIHRlYXJfZG93bl90YzogICAgIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9u
IHRoYXQgdGVhcnMgZG93biB0aGUgdGVzdCBjYXNlCi0vLyAgIGZhY3Rvcnk6ICAgICAgICAgIHBv
aW50ZXIgdG8gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIGEgdGVzdCBvYmplY3QuCi0vLyAgICAg
ICAgICAgICAgICAgICAgIFRoZSBuZXdseSBjcmVhdGVkIFRlc3RJbmZvIGluc3RhbmNlIHdpbGwg
YXNzdW1lCi0vLyAgICAgICAgICAgICAgICAgICAgIG93bmVyc2hpcCBvZiB0aGUgZmFjdG9yeSBv
YmplY3QuCi1UZXN0SW5mbyogTWFrZUFuZFJlZ2lzdGVyVGVzdEluZm8oCi0gICAgY29uc3QgY2hh
ciogdGVzdF9jYXNlX25hbWUsCi0gICAgY29uc3QgY2hhciogbmFtZSwKLSAgICBjb25zdCBjaGFy
KiB0eXBlX3BhcmFtLAotICAgIGNvbnN0IGNoYXIqIHZhbHVlX3BhcmFtLAotICAgIENvZGVMb2Nh
dGlvbiBjb2RlX2xvY2F0aW9uLAotICAgIFR5cGVJZCBmaXh0dXJlX2NsYXNzX2lkLAotICAgIFNl
dFVwVGVzdENhc2VGdW5jIHNldF91cF90YywKLSAgICBUZWFyRG93blRlc3RDYXNlRnVuYyB0ZWFy
X2Rvd25fdGMsCi0gICAgVGVzdEZhY3RvcnlCYXNlKiBmYWN0b3J5KSB7Ci0gIFRlc3RJbmZvKiBj
b25zdCB0ZXN0X2luZm8gPQotICAgICAgbmV3IFRlc3RJbmZvKHRlc3RfY2FzZV9uYW1lLCBuYW1l
LCB0eXBlX3BhcmFtLCB2YWx1ZV9wYXJhbSwKLSAgICAgICAgICAgICAgICAgICBjb2RlX2xvY2F0
aW9uLCBmaXh0dXJlX2NsYXNzX2lkLCBmYWN0b3J5KTsKLSAgR2V0VW5pdFRlc3RJbXBsKCktPkFk
ZFRlc3RJbmZvKHNldF91cF90YywgdGVhcl9kb3duX3RjLCB0ZXN0X2luZm8pOwotICByZXR1cm4g
dGVzdF9pbmZvOwotfQotCi0jaWYgR1RFU1RfSEFTX1BBUkFNX1RFU1QKLXZvaWQgUmVwb3J0SW52
YWxpZFRlc3RDYXNlVHlwZShjb25zdCBjaGFyKiB0ZXN0X2Nhc2VfbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb24gY29kZV9sb2NhdGlvbikgewotICBNZXNz
YWdlIGVycm9yczsKLSAgZXJyb3JzCi0gICAgICA8PCAiQXR0ZW1wdGVkIHJlZGVmaW5pdGlvbiBv
ZiB0ZXN0IGNhc2UgIiA8PCB0ZXN0X2Nhc2VfbmFtZSA8PCAiLlxuIgotICAgICAgPDwgIkFsbCB0
ZXN0cyBpbiB0aGUgc2FtZSB0ZXN0IGNhc2UgbXVzdCB1c2UgdGhlIHNhbWUgdGVzdCBmaXh0dXJl
XG4iCi0gICAgICA8PCAiY2xhc3MuICBIb3dldmVyLCBpbiB0ZXN0IGNhc2UgIiA8PCB0ZXN0X2Nh
c2VfbmFtZSA8PCAiLCB5b3UgdHJpZWRcbiIKLSAgICAgIDw8ICJ0byBkZWZpbmUgYSB0ZXN0IHVz
aW5nIGEgZml4dHVyZSBjbGFzcyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lXG4iCi0gICAgICA8PCAi
dXNlZCBlYXJsaWVyLiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHR3byBmaXh0dXJlIGNsYXNzZXMg
YXJlXG4iCi0gICAgICA8PCAiZnJvbSBkaWZmZXJlbnQgbmFtZXNwYWNlcyBhbmQgaGF2ZSB0aGUg
c2FtZSBuYW1lLiBZb3Ugc2hvdWxkXG4iCi0gICAgICA8PCAicHJvYmFibHkgcmVuYW1lIG9uZSBv
ZiB0aGUgY2xhc3NlcyB0byBwdXQgdGhlIHRlc3RzIGludG8gZGlmZmVyZW50XG4iCi0gICAgICA8
PCAidGVzdCBjYXNlcy4iOwotCi0gIGZwcmludGYoc3RkZXJyLCAiJXMgJXMiLAotICAgICAgICAg
IEZvcm1hdEZpbGVMb2NhdGlvbihjb2RlX2xvY2F0aW9uLmZpbGUuY19zdHIoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29kZV9sb2NhdGlvbi5saW5lKS5jX3N0cigpLAotICAgICAg
ICAgIGVycm9ycy5HZXRTdHJpbmcoKS5jX3N0cigpKTsKLX0KLSNlbmRpZiAgLy8gR1RFU1RfSEFT
X1BBUkFNX1RFU1QKLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi0KLW5hbWVzcGFjZSB7Ci0K
LS8vIEEgcHJlZGljYXRlIHRoYXQgY2hlY2tzIHRoZSB0ZXN0IG5hbWUgb2YgYSBUZXN0SW5mbyBh
Z2FpbnN0IGEga25vd24KLS8vIHZhbHVlLgotLy8KLS8vIFRoaXMgaXMgdXNlZCBmb3IgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIFRlc3RDYXNlIGNsYXNzIG9ubHkuICBXZSBwdXQKLS8vIGl0IGluIHRo
ZSBhbm9ueW1vdXMgbmFtZXNwYWNlIHRvIHByZXZlbnQgcG9sbHV0aW5nIHRoZSBvdXRlcgotLy8g
bmFtZXNwYWNlLgotLy8KLS8vIFRlc3ROYW1lSXMgaXMgY29weWFibGUuCi1jbGFzcyBUZXN0TmFt
ZUlzIHsKLSBwdWJsaWM6Ci0gIC8vIENvbnN0cnVjdG9yLgotICAvLwotICAvLyBUZXN0TmFtZUlz
IGhhcyBOTyBkZWZhdWx0IGNvbnN0cnVjdG9yLgotICBleHBsaWNpdCBUZXN0TmFtZUlzKGNvbnN0
IGNoYXIqIG5hbWUpCi0gICAgICA6IG5hbWVfKG5hbWUpIHt9Ci0KLSAgLy8gUmV0dXJucyB0cnVl
IGlmZiB0aGUgdGVzdCBuYW1lIG9mIHRlc3RfaW5mbyBtYXRjaGVzIG5hbWVfLgotICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgVGVzdEluZm8gKiB0ZXN0X2luZm8pIGNvbnN0IHsKLSAgICByZXR1cm4g
dGVzdF9pbmZvICYmIHRlc3RfaW5mby0+bmFtZSgpID09IG5hbWVfOwotICB9Ci0KLSBwcml2YXRl
OgotICBzdGQ6OnN0cmluZyBuYW1lXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1uYW1lc3Bh
Y2UgaW50ZXJuYWwgewotCi0vLyBUaGlzIG1ldGhvZCBleHBhbmRzIGFsbCBwYXJhbWV0ZXJpemVk
IHRlc3RzIHJlZ2lzdGVyZWQgd2l0aCBtYWNyb3MgVEVTVF9QCi0vLyBhbmQgSU5TVEFOVElBVEVf
VEVTVF9DQVNFX1AgaW50byByZWd1bGFyIHRlc3RzIGFuZCByZWdpc3RlcnMgdGhvc2UuCi0vLyBU
aGlzIHdpbGwgYmUgZG9uZSBqdXN0IG9uY2UgZHVyaW5nIHRoZSBwcm9ncmFtIHJ1bnRpbWUuCi12
b2lkIFVuaXRUZXN0SW1wbDo6UmVnaXN0ZXJQYXJhbWV0ZXJpemVkVGVzdHMoKSB7Ci0jaWYgR1RF
U1RfSEFTX1BBUkFNX1RFU1QKLSAgaWYgKCFwYXJhbWV0ZXJpemVkX3Rlc3RzX3JlZ2lzdGVyZWRf
KSB7Ci0gICAgcGFyYW1ldGVyaXplZF90ZXN0X3JlZ2lzdHJ5Xy5SZWdpc3RlclRlc3RzKCk7Ci0g
ICAgcGFyYW1ldGVyaXplZF90ZXN0c19yZWdpc3RlcmVkXyA9IHRydWU7Ci0gIH0KLSNlbmRpZgot
fQotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLQotLy8gQ3JlYXRlcyB0aGUgdGVzdCBvYmpl
Y3QsIHJ1bnMgaXQsIHJlY29yZHMgaXRzIHJlc3VsdCwgYW5kIHRoZW4KLS8vIGRlbGV0ZXMgaXQu
Ci12b2lkIFRlc3RJbmZvOjpSdW4oKSB7Ci0gIGlmICghc2hvdWxkX3J1bl8pIHJldHVybjsKLQot
ICAvLyBUZWxscyBVbml0VGVzdCB3aGVyZSB0byBzdG9yZSB0ZXN0IHJlc3VsdC4KLSAgaW50ZXJu
YWw6OlVuaXRUZXN0SW1wbCogY29uc3QgaW1wbCA9IGludGVybmFsOjpHZXRVbml0VGVzdEltcGwo
KTsKLSAgaW1wbC0+c2V0X2N1cnJlbnRfdGVzdF9pbmZvKHRoaXMpOwotCi0gIFRlc3RFdmVudExp
c3RlbmVyKiByZXBlYXRlciA9IFVuaXRUZXN0OjpHZXRJbnN0YW5jZSgpLT5saXN0ZW5lcnMoKS5y
ZXBlYXRlcigpOwotCi0gIC8vIE5vdGlmaWVzIHRoZSB1bml0IHRlc3QgZXZlbnQgbGlzdGVuZXJz
IHRoYXQgYSB0ZXN0IGlzIGFib3V0IHRvIHN0YXJ0LgotICByZXBlYXRlci0+T25UZXN0U3RhcnQo
KnRoaXMpOwotCi0gIGNvbnN0IFRpbWVJbk1pbGxpcyBzdGFydCA9IGludGVybmFsOjpHZXRUaW1l
SW5NaWxsaXMoKTsKLQotICBpbXBsLT5vc19zdGFja190cmFjZV9nZXR0ZXIoKS0+VXBvbkxlYXZp
bmdHVGVzdCgpOwotCi0gIC8vIENyZWF0ZXMgdGhlIHRlc3Qgb2JqZWN0LgotICBUZXN0KiBjb25z
dCB0ZXN0ID0gaW50ZXJuYWw6OkhhbmRsZUV4Y2VwdGlvbnNJbk1ldGhvZElmU3VwcG9ydGVkKAot
ICAgICAgZmFjdG9yeV8sICZpbnRlcm5hbDo6VGVzdEZhY3RvcnlCYXNlOjpDcmVhdGVUZXN0LAot
ICAgICAgInRoZSB0ZXN0IGZpeHR1cmUncyBjb25zdHJ1Y3RvciIpOwotCi0gIC8vIFJ1bnMgdGhl
IHRlc3Qgb25seSBpZiB0aGUgdGVzdCBvYmplY3Qgd2FzIGNyZWF0ZWQgYW5kIGl0cwotICAvLyBj
b25zdHJ1Y3RvciBkaWRuJ3QgZ2VuZXJhdGUgYSBmYXRhbCBmYWlsdXJlLgotICBpZiAoKHRlc3Qg
IT0gTlVMTCkgJiYgIVRlc3Q6Okhhc0ZhdGFsRmFpbHVyZSgpKSB7Ci0gICAgLy8gVGhpcyBkb2Vz
bid0IHRocm93IGFzIGFsbCB1c2VyIGNvZGUgdGhhdCBjYW4gdGhyb3cgYXJlIHdyYXBwZWQgaW50
bwotICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGluZyBjb2RlLgotICAgIHRlc3QtPlJ1bigpOwotICB9
Ci0KLSAgLy8gRGVsZXRlcyB0aGUgdGVzdCBvYmplY3QuCi0gIGltcGwtPm9zX3N0YWNrX3RyYWNl
X2dldHRlcigpLT5VcG9uTGVhdmluZ0dUZXN0KCk7Ci0gIGludGVybmFsOjpIYW5kbGVFeGNlcHRp
b25zSW5NZXRob2RJZlN1cHBvcnRlZCgKLSAgICAgIHRlc3QsICZUZXN0OjpEZWxldGVTZWxmXywg
InRoZSB0ZXN0IGZpeHR1cmUncyBkZXN0cnVjdG9yIik7Ci0KLSAgcmVzdWx0Xy5zZXRfZWxhcHNl
ZF90aW1lKGludGVybmFsOjpHZXRUaW1lSW5NaWxsaXMoKSAtIHN0YXJ0KTsKLQotICAvLyBOb3Rp
ZmllcyB0aGUgdW5pdCB0ZXN0IGV2ZW50IGxpc3RlbmVyIHRoYXQgYSB0ZXN0IGhhcyBqdXN0IGZp
bmlzaGVkLgotICByZXBlYXRlci0+T25UZXN0RW5kKCp0aGlzKTsKLQotICAvLyBUZWxscyBVbml0
VGVzdCB0byBzdG9wIGFzc29jaWF0aW5nIGFzc2VydGlvbiByZXN1bHRzIHRvIHRoaXMKLSAgLy8g
dGVzdC4KLSAgaW1wbC0+c2V0X2N1cnJlbnRfdGVzdF9pbmZvKE5VTEwpOwotfQotCi0vLyBjbGFz
cyBUZXN0Q2FzZQotCi0vLyBHZXRzIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bCB0ZXN0cyBpbiB0
aGlzIHRlc3QgY2FzZS4KLWludCBUZXN0Q2FzZTo6c3VjY2Vzc2Z1bF90ZXN0X2NvdW50KCkgY29u
c3QgewotICByZXR1cm4gQ291bnRJZih0ZXN0X2luZm9fbGlzdF8sIFRlc3RQYXNzZWQpOwotfQot
Ci0vLyBHZXRzIHRoZSBudW1iZXIgb2YgZmFpbGVkIHRlc3RzIGluIHRoaXMgdGVzdCBjYXNlLgot
aW50IFRlc3RDYXNlOjpmYWlsZWRfdGVzdF9jb3VudCgpIGNvbnN0IHsKLSAgcmV0dXJuIENvdW50
SWYodGVzdF9pbmZvX2xpc3RfLCBUZXN0RmFpbGVkKTsKLX0KLQotLy8gR2V0cyB0aGUgbnVtYmVy
IG9mIGRpc2FibGVkIHRlc3RzIHRoYXQgd2lsbCBiZSByZXBvcnRlZCBpbiB0aGUgWE1MIHJlcG9y
dC4KLWludCBUZXN0Q2FzZTo6cmVwb3J0YWJsZV9kaXNhYmxlZF90ZXN0X2NvdW50KCkgY29uc3Qg
ewotICByZXR1cm4gQ291bnRJZih0ZXN0X2luZm9fbGlzdF8sIFRlc3RSZXBvcnRhYmxlRGlzYWJs
ZWQpOwotfQotCi0vLyBHZXRzIHRoZSBudW1iZXIgb2YgZGlzYWJsZWQgdGVzdHMgaW4gdGhpcyB0
ZXN0IGNhc2UuCi1pbnQgVGVzdENhc2U6OmRpc2FibGVkX3Rlc3RfY291bnQoKSBjb25zdCB7Ci0g
IHJldHVybiBDb3VudElmKHRlc3RfaW5mb19saXN0XywgVGVzdERpc2FibGVkKTsKLX0KLQotLy8g
R2V0cyB0aGUgbnVtYmVyIG9mIHRlc3RzIHRvIGJlIHByaW50ZWQgaW4gdGhlIFhNTCByZXBvcnQu
Ci1pbnQgVGVzdENhc2U6OnJlcG9ydGFibGVfdGVzdF9jb3VudCgpIGNvbnN0IHsKLSAgcmV0dXJu
IENvdW50SWYodGVzdF9pbmZvX2xpc3RfLCBUZXN0UmVwb3J0YWJsZSk7Ci19Ci0KLS8vIEdldCB0
aGUgbnVtYmVyIG9mIHRlc3RzIGluIHRoaXMgdGVzdCBjYXNlIHRoYXQgc2hvdWxkIHJ1bi4KLWlu
dCBUZXN0Q2FzZTo6dGVzdF90b19ydW5fY291bnQoKSBjb25zdCB7Ci0gIHJldHVybiBDb3VudElm
KHRlc3RfaW5mb19saXN0XywgU2hvdWxkUnVuVGVzdCk7Ci19Ci0KLS8vIEdldHMgdGhlIG51bWJl
ciBvZiBhbGwgdGVzdHMuCi1pbnQgVGVzdENhc2U6OnRvdGFsX3Rlc3RfY291bnQoKSBjb25zdCB7
Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHRlc3RfaW5mb19saXN0Xy5zaXplKCkpOwotfQot
Ci0vLyBDcmVhdGVzIGEgVGVzdENhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLS8vCi0vLyBBcmd1
bWVudHM6Ci0vLwotLy8gICBuYW1lOiAgICAgICAgIG5hbWUgb2YgdGhlIHRlc3QgY2FzZQotLy8g
ICBhX3R5cGVfcGFyYW06IHRoZSBuYW1lIG9mIHRoZSB0ZXN0IGNhc2UncyB0eXBlIHBhcmFtZXRl
ciwgb3IgTlVMTCBpZgotLy8gICAgICAgICAgICAgICAgIHRoaXMgaXMgbm90IGEgdHlwZWQgb3Ig
YSB0eXBlLXBhcmFtZXRlcml6ZWQgdGVzdCBjYXNlLgotLy8gICBzZXRfdXBfdGM6ICAgIHBvaW50
ZXIgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgdGVzdCBjYXNlCi0vLyAgIHRlYXJf
ZG93bl90YzogcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdGhhdCB0ZWFycyBkb3duIHRoZSB0ZXN0
IGNhc2UKLVRlc3RDYXNlOjpUZXN0Q2FzZShjb25zdCBjaGFyKiBhX25hbWUsIGNvbnN0IGNoYXIq
IGFfdHlwZV9wYXJhbSwKLSAgICAgICAgICAgICAgICAgICBUZXN0OjpTZXRVcFRlc3RDYXNlRnVu
YyBzZXRfdXBfdGMsCi0gICAgICAgICAgICAgICAgICAgVGVzdDo6VGVhckRvd25UZXN0Q2FzZUZ1
bmMgdGVhcl9kb3duX3RjKQotICAgIDogbmFtZV8oYV9uYW1lKSwKLSAgICAgIHR5cGVfcGFyYW1f
KGFfdHlwZV9wYXJhbSA/IG5ldyBzdGQ6OnN0cmluZyhhX3R5cGVfcGFyYW0pIDogTlVMTCksCi0g
ICAgICBzZXRfdXBfdGNfKHNldF91cF90YyksCi0gICAgICB0ZWFyX2Rvd25fdGNfKHRlYXJfZG93
bl90YyksCi0gICAgICBzaG91bGRfcnVuXyhmYWxzZSksCi0gICAgICBlbGFwc2VkX3RpbWVfKDAp
IHsKLX0KLQotLy8gRGVzdHJ1Y3RvciBvZiBUZXN0Q2FzZS4KLVRlc3RDYXNlOjp+VGVzdENhc2Uo
KSB7Ci0gIC8vIERlbGV0ZXMgZXZlcnkgVGVzdCBpbiB0aGUgY29sbGVjdGlvbi4KLSAgRm9yRWFj
aCh0ZXN0X2luZm9fbGlzdF8sIGludGVybmFsOjpEZWxldGU8VGVzdEluZm8+KTsKLX0KLQotLy8g
UmV0dXJucyB0aGUgaS10aCB0ZXN0IGFtb25nIGFsbCB0aGUgdGVzdHMuIGkgY2FuIHJhbmdlIGZy
b20gMCB0bwotLy8gdG90YWxfdGVzdF9jb3VudCgpIC0gMS4gSWYgaSBpcyBub3QgaW4gdGhhdCBy
YW5nZSwgcmV0dXJucyBOVUxMLgotY29uc3QgVGVzdEluZm8qIFRlc3RDYXNlOjpHZXRUZXN0SW5m
byhpbnQgaSkgY29uc3QgewotICBjb25zdCBpbnQgaW5kZXggPSBHZXRFbGVtZW50T3IodGVzdF9p
bmRpY2VzXywgaSwgLTEpOwotICByZXR1cm4gaW5kZXggPCAwID8gTlVMTCA6IHRlc3RfaW5mb19s
aXN0X1tpbmRleF07Ci19Ci0KLS8vIFJldHVybnMgdGhlIGktdGggdGVzdCBhbW9uZyBhbGwgdGhl
IHRlc3RzLiBpIGNhbiByYW5nZSBmcm9tIDAgdG8KLS8vIHRvdGFsX3Rlc3RfY291bnQoKSAtIDEu
IElmIGkgaXMgbm90IGluIHRoYXQgcmFuZ2UsIHJldHVybnMgTlVMTC4KLVRlc3RJbmZvKiBUZXN0
Q2FzZTo6R2V0TXV0YWJsZVRlc3RJbmZvKGludCBpKSB7Ci0gIGNvbnN0IGludCBpbmRleCA9IEdl
dEVsZW1lbnRPcih0ZXN0X2luZGljZXNfLCBpLCAtMSk7Ci0gIHJldHVybiBpbmRleCA8IDAgPyBO
VUxMIDogdGVzdF9pbmZvX2xpc3RfW2luZGV4XTsKLX0KLQotLy8gQWRkcyBhIHRlc3QgdG8gdGhp
cyB0ZXN0IGNhc2UuICBXaWxsIGRlbGV0ZSB0aGUgdGVzdCB1cG9uCi0vLyBkZXN0cnVjdGlvbiBv
ZiB0aGUgVGVzdENhc2Ugb2JqZWN0Lgotdm9pZCBUZXN0Q2FzZTo6QWRkVGVzdEluZm8oVGVzdElu
Zm8gKiB0ZXN0X2luZm8pIHsKLSAgdGVzdF9pbmZvX2xpc3RfLnB1c2hfYmFjayh0ZXN0X2luZm8p
OwotICB0ZXN0X2luZGljZXNfLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxpbnQ+KHRlc3RfaW5kaWNl
c18uc2l6ZSgpKSk7Ci19Ci0KLS8vIFJ1bnMgZXZlcnkgdGVzdCBpbiB0aGlzIFRlc3RDYXNlLgot
dm9pZCBUZXN0Q2FzZTo6UnVuKCkgewotICBpZiAoIXNob3VsZF9ydW5fKSByZXR1cm47Ci0KLSAg
aW50ZXJuYWw6OlVuaXRUZXN0SW1wbCogY29uc3QgaW1wbCA9IGludGVybmFsOjpHZXRVbml0VGVz
dEltcGwoKTsKLSAgaW1wbC0+c2V0X2N1cnJlbnRfdGVzdF9jYXNlKHRoaXMpOwotCi0gIFRlc3RF
dmVudExpc3RlbmVyKiByZXBlYXRlciA9IFVuaXRUZXN0OjpHZXRJbnN0YW5jZSgpLT5saXN0ZW5l
cnMoKS5yZXBlYXRlcigpOwotCi0gIHJlcGVhdGVyLT5PblRlc3RDYXNlU3RhcnQoKnRoaXMpOwot
ICBpbXBsLT5vc19zdGFja190cmFjZV9nZXR0ZXIoKS0+VXBvbkxlYXZpbmdHVGVzdCgpOwotICBp
bnRlcm5hbDo6SGFuZGxlRXhjZXB0aW9uc0luTWV0aG9kSWZTdXBwb3J0ZWQoCi0gICAgICB0aGlz
LCAmVGVzdENhc2U6OlJ1blNldFVwVGVzdENhc2UsICJTZXRVcFRlc3RDYXNlKCkiKTsKLQotICBj
b25zdCBpbnRlcm5hbDo6VGltZUluTWlsbGlzIHN0YXJ0ID0gaW50ZXJuYWw6OkdldFRpbWVJbk1p
bGxpcygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsX3Rlc3RfY291bnQoKTsgaSsrKSB7
Ci0gICAgR2V0TXV0YWJsZVRlc3RJbmZvKGkpLT5SdW4oKTsKLSAgfQotICBlbGFwc2VkX3RpbWVf
ID0gaW50ZXJuYWw6OkdldFRpbWVJbk1pbGxpcygpIC0gc3RhcnQ7Ci0KLSAgaW1wbC0+b3Nfc3Rh
Y2tfdHJhY2VfZ2V0dGVyKCktPlVwb25MZWF2aW5nR1Rlc3QoKTsKLSAgaW50ZXJuYWw6OkhhbmRs
ZUV4Y2VwdGlvbnNJbk1ldGhvZElmU3VwcG9ydGVkKAotICAgICAgdGhpcywgJlRlc3RDYXNlOjpS
dW5UZWFyRG93blRlc3RDYXNlLCAiVGVhckRvd25UZXN0Q2FzZSgpIik7Ci0KLSAgcmVwZWF0ZXIt
Pk9uVGVzdENhc2VFbmQoKnRoaXMpOwotICBpbXBsLT5zZXRfY3VycmVudF90ZXN0X2Nhc2UoTlVM
TCk7Ci19Ci0KLS8vIENsZWFycyB0aGUgcmVzdWx0cyBvZiBhbGwgdGVzdHMgaW4gdGhpcyB0ZXN0
IGNhc2UuCi12b2lkIFRlc3RDYXNlOjpDbGVhclJlc3VsdCgpIHsKLSAgYWRfaG9jX3Rlc3RfcmVz
dWx0Xy5DbGVhcigpOwotICBGb3JFYWNoKHRlc3RfaW5mb19saXN0XywgVGVzdEluZm86OkNsZWFy
VGVzdFJlc3VsdCk7Ci19Ci0KLS8vIFNodWZmbGVzIHRoZSB0ZXN0cyBpbiB0aGlzIHRlc3QgY2Fz
ZS4KLXZvaWQgVGVzdENhc2U6OlNodWZmbGVUZXN0cyhpbnRlcm5hbDo6UmFuZG9tKiByYW5kb20p
IHsKLSAgU2h1ZmZsZShyYW5kb20sICZ0ZXN0X2luZGljZXNfKTsKLX0KLQotLy8gUmVzdG9yZXMg
dGhlIHRlc3Qgb3JkZXIgdG8gYmVmb3JlIHRoZSBmaXJzdCBzaHVmZmxlLgotdm9pZCBUZXN0Q2Fz
ZTo6VW5zaHVmZmxlVGVzdHMoKSB7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGVzdF9pbmRp
Y2VzXy5zaXplKCk7IGkrKykgewotICAgIHRlc3RfaW5kaWNlc19baV0gPSBzdGF0aWNfY2FzdDxp
bnQ+KGkpOwotICB9Ci19Ci0KLS8vIEZvcm1hdHMgYSBjb3VudGFibGUgbm91bi4gIERlcGVuZGlu
ZyBvbiBpdHMgcXVhbnRpdHksIGVpdGhlciB0aGUKLS8vIHNpbmd1bGFyIGZvcm0gb3IgdGhlIHBs
dXJhbCBmb3JtIGlzIHVzZWQuIGUuZy4KLS8vCi0vLyBGb3JtYXRDb3VudGFibGVOb3VuKDEsICJm
b3JtdWxhIiwgImZvcm11bGkiKSByZXR1cm5zICIxIGZvcm11bGEiLgotLy8gRm9ybWF0Q291bnRh
YmxlTm91big1LCAiYm9vayIsICJib29rcyIpIHJldHVybnMgIjUgYm9va3MiLgotc3RhdGljIHN0
ZDo6c3RyaW5nIEZvcm1hdENvdW50YWJsZU5vdW4oaW50IGNvdW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIHNpbmd1bGFyX2Zvcm0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogcGx1cmFsX2Zv
cm0pIHsKLSAgcmV0dXJuIGludGVybmFsOjpTdHJlYW1hYmxlVG9TdHJpbmcoY291bnQpICsgIiAi
ICsKLSAgICAgIChjb3VudCA9PSAxID8gc2luZ3VsYXJfZm9ybSA6IHBsdXJhbF9mb3JtKTsKLX0K
LQotLy8gRm9ybWF0cyB0aGUgY291bnQgb2YgdGVzdHMuCi1zdGF0aWMgc3RkOjpzdHJpbmcgRm9y
bWF0VGVzdENvdW50KGludCB0ZXN0X2NvdW50KSB7Ci0gIHJldHVybiBGb3JtYXRDb3VudGFibGVO
b3VuKHRlc3RfY291bnQsICJ0ZXN0IiwgInRlc3RzIik7Ci19Ci0KLS8vIEZvcm1hdHMgdGhlIGNv
dW50IG9mIHRlc3QgY2FzZXMuCi1zdGF0aWMgc3RkOjpzdHJpbmcgRm9ybWF0VGVzdENhc2VDb3Vu
dChpbnQgdGVzdF9jYXNlX2NvdW50KSB7Ci0gIHJldHVybiBGb3JtYXRDb3VudGFibGVOb3VuKHRl
c3RfY2FzZV9jb3VudCwgInRlc3QgY2FzZSIsICJ0ZXN0IGNhc2VzIik7Ci19Ci0KLS8vIENvbnZl
cnRzIGEgVGVzdFBhcnRSZXN1bHQ6OlR5cGUgZW51bSB0byBodW1hbi1mcmllbmRseSBzdHJpbmcK
LS8vIHJlcHJlc2VudGF0aW9uLiAgQm90aCBrTm9uRmF0YWxGYWlsdXJlIGFuZCBrRmF0YWxGYWls
dXJlIGFyZSB0cmFuc2xhdGVkCi0vLyB0byAiRmFpbHVyZSIsIGFzIHRoZSB1c2VyIHVzdWFsbHkg
ZG9lc24ndCBjYXJlIGFib3V0IHRoZSBkaWZmZXJlbmNlCi0vLyBiZXR3ZWVuIHRoZSB0d28gd2hl
biB2aWV3aW5nIHRoZSB0ZXN0IHJlc3VsdC4KLXN0YXRpYyBjb25zdCBjaGFyICogVGVzdFBhcnRS
ZXN1bHRUeXBlVG9TdHJpbmcoVGVzdFBhcnRSZXN1bHQ6OlR5cGUgdHlwZSkgewotICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICBjYXNlIFRlc3RQYXJ0UmVzdWx0OjprU3VjY2VzczoKLSAgICAgIHJldHVy
biAiU3VjY2VzcyI7Ci0KLSAgICBjYXNlIFRlc3RQYXJ0UmVzdWx0OjprTm9uRmF0YWxGYWlsdXJl
OgotICAgIGNhc2UgVGVzdFBhcnRSZXN1bHQ6OmtGYXRhbEZhaWx1cmU6Ci0jaWZkZWYgX01TQ19W
RVIKLSAgICAgIHJldHVybiAiZXJyb3I6ICI7Ci0jZWxzZQotICAgICAgcmV0dXJuICJGYWlsdXJl
XG4iOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiAiVW5rbm93biByZXN1bHQg
dHlwZSI7Ci0gIH0KLX0KLQotbmFtZXNwYWNlIGludGVybmFsIHsKLQotLy8gUHJpbnRzIGEgVGVz
dFBhcnRSZXN1bHQgdG8gYW4gc3RkOjpzdHJpbmcuCi1zdGF0aWMgc3RkOjpzdHJpbmcgUHJpbnRU
ZXN0UGFydFJlc3VsdFRvU3RyaW5nKAotICAgIGNvbnN0IFRlc3RQYXJ0UmVzdWx0JiB0ZXN0X3Bh
cnRfcmVzdWx0KSB7Ci0gIHJldHVybiAoTWVzc2FnZSgpCi0gICAgICAgICAgPDwgaW50ZXJuYWw6
OkZvcm1hdEZpbGVMb2NhdGlvbih0ZXN0X3BhcnRfcmVzdWx0LmZpbGVfbmFtZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXJ0X3Jlc3VsdC5saW5l
X251bWJlcigpKQotICAgICAgICAgIDw8ICIgIiA8PCBUZXN0UGFydFJlc3VsdFR5cGVUb1N0cmlu
Zyh0ZXN0X3BhcnRfcmVzdWx0LnR5cGUoKSkKLSAgICAgICAgICA8PCB0ZXN0X3BhcnRfcmVzdWx0
Lm1lc3NhZ2UoKSkuR2V0U3RyaW5nKCk7Ci19Ci0KLS8vIFByaW50cyBhIFRlc3RQYXJ0UmVzdWx0
Lgotc3RhdGljIHZvaWQgUHJpbnRUZXN0UGFydFJlc3VsdChjb25zdCBUZXN0UGFydFJlc3VsdCYg
dGVzdF9wYXJ0X3Jlc3VsdCkgewotICBjb25zdCBzdGQ6OnN0cmluZyYgcmVzdWx0ID0KLSAgICAg
IFByaW50VGVzdFBhcnRSZXN1bHRUb1N0cmluZyh0ZXN0X3BhcnRfcmVzdWx0KTsKLSAgcHJpbnRm
KCIlc1xuIiwgcmVzdWx0LmNfc3RyKCkpOwotICBmZmx1c2goc3Rkb3V0KTsKLSAgLy8gSWYgdGhl
IHRlc3QgcHJvZ3JhbSBydW5zIGluIFZpc3VhbCBTdHVkaW8gb3IgYSBkZWJ1Z2dlciwgdGhlCi0g
IC8vIGZvbGxvd2luZyBzdGF0ZW1lbnRzIGFkZCB0aGUgdGVzdCBwYXJ0IHJlc3VsdCBtZXNzYWdl
IHRvIHRoZSBPdXRwdXQKLSAgLy8gd2luZG93IHN1Y2ggdGhhdCB0aGUgdXNlciBjYW4gZG91Ymxl
LWNsaWNrIG9uIGl0IHRvIGp1bXAgdG8gdGhlCi0gIC8vIGNvcnJlc3BvbmRpbmcgc291cmNlIGNv
ZGUgbG9jYXRpb247IG90aGVyd2lzZSB0aGV5IGRvIG5vdGhpbmcuCi0jaWYgR1RFU1RfT1NfV0lO
RE9XUyAmJiAhR1RFU1RfT1NfV0lORE9XU19NT0JJTEUKLSAgLy8gV2UgZG9uJ3QgY2FsbCBPdXRw
dXREZWJ1Z1N0cmluZyooKSBvbiBXaW5kb3dzIE1vYmlsZSwgYXMgcHJpbnRpbmcKLSAgLy8gdG8g
c3Rkb3V0IGlzIGRvbmUgYnkgT3V0cHV0RGVidWdTdHJpbmcoKSB0aGVyZSBhbHJlYWR5IC0gd2Ug
ZG9uJ3QKLSAgLy8gd2FudCB0aGUgc2FtZSBtZXNzYWdlIHByaW50ZWQgdHdpY2UuCi0gIDo6T3V0
cHV0RGVidWdTdHJpbmdBKHJlc3VsdC5jX3N0cigpKTsKLSAgOjpPdXRwdXREZWJ1Z1N0cmluZ0Eo
IlxuIik7Ci0jZW5kaWYKLX0KLQotLy8gY2xhc3MgUHJldHR5VW5pdFRlc3RSZXN1bHRQcmludGVy
Ci0KLWVudW0gR1Rlc3RDb2xvciB7Ci0gIENPTE9SX0RFRkFVTFQsCi0gIENPTE9SX1JFRCwKLSAg
Q09MT1JfR1JFRU4sCi0gIENPTE9SX1lFTExPVwotfTsKLQotI2lmIEdURVNUX09TX1dJTkRPV1Mg
JiYgIUdURVNUX09TX1dJTkRPV1NfTU9CSUxFICYmIFwKLSAgICAhR1RFU1RfT1NfV0lORE9XU19Q
SE9ORSAmJiAhR1RFU1RfT1NfV0lORE9XU19SVAotCi0vLyBSZXR1cm5zIHRoZSBjaGFyYWN0ZXIg
YXR0cmlidXRlIGZvciB0aGUgZ2l2ZW4gY29sb3IuCi1XT1JEIEdldENvbG9yQXR0cmlidXRlKEdU
ZXN0Q29sb3IgY29sb3IpIHsKLSAgc3dpdGNoIChjb2xvcikgewotICAgIGNhc2UgQ09MT1JfUkVE
OiAgICByZXR1cm4gRk9SRUdST1VORF9SRUQ7Ci0gICAgY2FzZSBDT0xPUl9HUkVFTjogIHJldHVy
biBGT1JFR1JPVU5EX0dSRUVOOwotICAgIGNhc2UgQ09MT1JfWUVMTE9XOiByZXR1cm4gRk9SRUdS
T1VORF9SRUQgfCBGT1JFR1JPVU5EX0dSRUVOOwotICAgIGRlZmF1bHQ6ICAgICAgICAgICByZXR1
cm4gMDsKLSAgfQotfQotCi0jZWxzZQotCi0vLyBSZXR1cm5zIHRoZSBBTlNJIGNvbG9yIGNvZGUg
Zm9yIHRoZSBnaXZlbiBjb2xvci4gIENPTE9SX0RFRkFVTFQgaXMKLS8vIGFuIGludmFsaWQgaW5w
dXQuCi1jb25zdCBjaGFyKiBHZXRBbnNpQ29sb3JDb2RlKEdUZXN0Q29sb3IgY29sb3IpIHsKLSAg
c3dpdGNoIChjb2xvcikgewotICAgIGNhc2UgQ09MT1JfUkVEOiAgICAgcmV0dXJuICIxIjsKLSAg
ICBjYXNlIENPTE9SX0dSRUVOOiAgIHJldHVybiAiMiI7Ci0gICAgY2FzZSBDT0xPUl9ZRUxMT1c6
ICByZXR1cm4gIjMiOwotICAgIGRlZmF1bHQ6ICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gIH07
Ci19Ci0KLSNlbmRpZiAgLy8gR1RFU1RfT1NfV0lORE9XUyAmJiAhR1RFU1RfT1NfV0lORE9XU19N
T0JJTEUKLQotLy8gUmV0dXJucyB0cnVlIGlmZiBHb29nbGUgVGVzdCBzaG91bGQgdXNlIGNvbG9y
cyBpbiB0aGUgb3V0cHV0LgotYm9vbCBTaG91bGRVc2VDb2xvcihib29sIHN0ZG91dF9pc190dHkp
IHsKLSAgY29uc3QgY2hhciogY29uc3QgZ3Rlc3RfY29sb3IgPSBHVEVTVF9GTEFHKGNvbG9yKS5j
X3N0cigpOwotCi0gIGlmIChTdHJpbmc6OkNhc2VJbnNlbnNpdGl2ZUNTdHJpbmdFcXVhbHMoZ3Rl
c3RfY29sb3IsICJhdXRvIikpIHsKLSNpZiBHVEVTVF9PU19XSU5ET1dTCi0gICAgLy8gT24gV2lu
ZG93cyB0aGUgVEVSTSB2YXJpYWJsZSBpcyB1c3VhbGx5IG5vdCBzZXQsIGJ1dCB0aGUKLSAgICAv
LyBjb25zb2xlIHRoZXJlIGRvZXMgc3VwcG9ydCBjb2xvcnMuCi0gICAgcmV0dXJuIHN0ZG91dF9p
c190dHk7Ci0jZWxzZQotICAgIC8vIE9uIG5vbi1XaW5kb3dzIHBsYXRmb3Jtcywgd2UgcmVseSBv
biB0aGUgVEVSTSB2YXJpYWJsZS4KLSAgICBjb25zdCBjaGFyKiBjb25zdCB0ZXJtID0gcG9zaXg6
OkdldEVudigiVEVSTSIpOwotICAgIGNvbnN0IGJvb2wgdGVybV9zdXBwb3J0c19jb2xvciA9Ci0g
ICAgICAgIFN0cmluZzo6Q1N0cmluZ0VxdWFscyh0ZXJtLCAieHRlcm0iKSB8fAotICAgICAgICBT
dHJpbmc6OkNTdHJpbmdFcXVhbHModGVybSwgInh0ZXJtLWNvbG9yIikgfHwKLSAgICAgICAgU3Ry
aW5nOjpDU3RyaW5nRXF1YWxzKHRlcm0sICJ4dGVybS0yNTZjb2xvciIpIHx8Ci0gICAgICAgIFN0
cmluZzo6Q1N0cmluZ0VxdWFscyh0ZXJtLCAic2NyZWVuIikgfHwKLSAgICAgICAgU3RyaW5nOjpD
U3RyaW5nRXF1YWxzKHRlcm0sICJzY3JlZW4tMjU2Y29sb3IiKSB8fAotICAgICAgICBTdHJpbmc6
OkNTdHJpbmdFcXVhbHModGVybSwgInRtdXgiKSB8fAotICAgICAgICBTdHJpbmc6OkNTdHJpbmdF
cXVhbHModGVybSwgInRtdXgtMjU2Y29sb3IiKSB8fAotICAgICAgICBTdHJpbmc6OkNTdHJpbmdF
cXVhbHModGVybSwgInJ4dnQtdW5pY29kZSIpIHx8Ci0gICAgICAgIFN0cmluZzo6Q1N0cmluZ0Vx
dWFscyh0ZXJtLCAicnh2dC11bmljb2RlLTI1NmNvbG9yIikgfHwKLSAgICAgICAgU3RyaW5nOjpD
U3RyaW5nRXF1YWxzKHRlcm0sICJsaW51eCIpIHx8Ci0gICAgICAgIFN0cmluZzo6Q1N0cmluZ0Vx
dWFscyh0ZXJtLCAiY3lnd2luIik7Ci0gICAgcmV0dXJuIHN0ZG91dF9pc190dHkgJiYgdGVybV9z
dXBwb3J0c19jb2xvcjsKLSNlbmRpZiAgLy8gR1RFU1RfT1NfV0lORE9XUwotICB9Ci0KLSAgcmV0
dXJuIFN0cmluZzo6Q2FzZUluc2Vuc2l0aXZlQ1N0cmluZ0VxdWFscyhndGVzdF9jb2xvciwgInll
cyIpIHx8Ci0gICAgICBTdHJpbmc6OkNhc2VJbnNlbnNpdGl2ZUNTdHJpbmdFcXVhbHMoZ3Rlc3Rf
Y29sb3IsICJ0cnVlIikgfHwKLSAgICAgIFN0cmluZzo6Q2FzZUluc2Vuc2l0aXZlQ1N0cmluZ0Vx
dWFscyhndGVzdF9jb2xvciwgInQiKSB8fAotICAgICAgU3RyaW5nOjpDU3RyaW5nRXF1YWxzKGd0
ZXN0X2NvbG9yLCAiMSIpOwotICAvLyBXZSB0YWtlICJ5ZXMiLCAidHJ1ZSIsICJ0IiwgYW5kICIx
IiBhcyBtZWFuaW5nICJ5ZXMiLiAgSWYgdGhlCi0gIC8vIHZhbHVlIGlzIG5laXRoZXIgb25lIG9m
IHRoZXNlIG5vciAiYXV0byIsIHdlIHRyZWF0IGl0IGFzICJubyIgdG8KLSAgLy8gYmUgY29uc2Vy
dmF0aXZlLgotfQotCi0vLyBIZWxwZXJzIGZvciBwcmludGluZyBjb2xvcmVkIHN0cmluZ3MgdG8g
c3Rkb3V0LiBOb3RlIHRoYXQgb24gV2luZG93cywgd2UKLS8vIGNhbm5vdCBzaW1wbHkgZW1pdCBz
cGVjaWFsIGNoYXJhY3RlcnMgYW5kIGhhdmUgdGhlIHRlcm1pbmFsIGNoYW5nZSBjb2xvcnMuCi0v
LyBUaGlzIHJvdXRpbmUgbXVzdCBhY3R1YWxseSBlbWl0IHRoZSBjaGFyYWN0ZXJzIHJhdGhlciB0
aGFuIHJldHVybiBhIHN0cmluZwotLy8gdGhhdCB3b3VsZCBiZSBjb2xvcmVkIHdoZW4gcHJpbnRl
ZCwgYXMgY2FuIGJlIGRvbmUgb24gTGludXguCi12b2lkIENvbG9yZWRQcmludGYoR1Rlc3RDb2xv
ciBjb2xvciwgY29uc3QgY2hhciogZm10LCAuLi4pIHsKLSAgdmFfbGlzdCBhcmdzOwotICB2YV9z
dGFydChhcmdzLCBmbXQpOwotCi0jaWYgR1RFU1RfT1NfV0lORE9XU19NT0JJTEUgfHwgR1RFU1Rf
T1NfU1lNQklBTiB8fCBHVEVTVF9PU19aT1MgfHwgXAotICAgIEdURVNUX09TX0lPUyB8fCBHVEVT
VF9PU19XSU5ET1dTX1BIT05FIHx8IEdURVNUX09TX1dJTkRPV1NfUlQKLSAgY29uc3QgYm9vbCB1
c2VfY29sb3IgPSBBbHdheXNGYWxzZSgpOwotI2Vsc2UKLSAgc3RhdGljIGNvbnN0IGJvb2wgaW5f
Y29sb3JfbW9kZSA9Ci0gICAgICBTaG91bGRVc2VDb2xvcihwb3NpeDo6SXNBVFRZKHBvc2l4OjpG
aWxlTm8oc3Rkb3V0KSkgIT0gMCk7Ci0gIGNvbnN0IGJvb2wgdXNlX2NvbG9yID0gaW5fY29sb3Jf
bW9kZSAmJiAoY29sb3IgIT0gQ09MT1JfREVGQVVMVCk7Ci0jZW5kaWYgIC8vIEdURVNUX09TX1dJ
TkRPV1NfTU9CSUxFIHx8IEdURVNUX09TX1NZTUJJQU4gfHwgR1RFU1RfT1NfWk9TCi0gIC8vIFRo
ZSAnIT0gMCcgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgdG8gc2F0aXNmeSBNU1ZDIDcuMS4KLQot
ICBpZiAoIXVzZV9jb2xvcikgewotICAgIHZwcmludGYoZm10LCBhcmdzKTsKLSAgICB2YV9lbmQo
YXJncyk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSNpZiBHVEVTVF9PU19XSU5ET1dTICYmICFHVEVT
VF9PU19XSU5ET1dTX01PQklMRSAmJiBcCi0gICAgIUdURVNUX09TX1dJTkRPV1NfUEhPTkUgJiYg
IUdURVNUX09TX1dJTkRPV1NfUlQKLSAgY29uc3QgSEFORExFIHN0ZG91dF9oYW5kbGUgPSBHZXRT
dGRIYW5kbGUoU1REX09VVFBVVF9IQU5ETEUpOwotCi0gIC8vIEdldHMgdGhlIGN1cnJlbnQgdGV4
dCBjb2xvci4KLSAgQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8gYnVmZmVyX2luZm87Ci0gIEdl
dENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvKHN0ZG91dF9oYW5kbGUsICZidWZmZXJfaW5mbyk7Ci0g
IGNvbnN0IFdPUkQgb2xkX2NvbG9yX2F0dHJzID0gYnVmZmVyX2luZm8ud0F0dHJpYnV0ZXM7Ci0K
LSAgLy8gV2UgbmVlZCB0byBmbHVzaCB0aGUgc3RyZWFtIGJ1ZmZlcnMgaW50byB0aGUgY29uc29s
ZSBiZWZvcmUgZWFjaAotICAvLyBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZSBjYWxsIGxlc3QgaXQg
YWZmZWN0IHRoZSB0ZXh0IHRoYXQgaXMgYWxyZWFkeQotICAvLyBwcmludGVkIGJ1dCBoYXMgbm90
IHlldCByZWFjaGVkIHRoZSBjb25zb2xlLgotICBmZmx1c2goc3Rkb3V0KTsKLSAgU2V0Q29uc29s
ZVRleHRBdHRyaWJ1dGUoc3Rkb3V0X2hhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
R2V0Q29sb3JBdHRyaWJ1dGUoY29sb3IpIHwgRk9SRUdST1VORF9JTlRFTlNJVFkpOwotICB2cHJp
bnRmKGZtdCwgYXJncyk7Ci0KLSAgZmZsdXNoKHN0ZG91dCk7Ci0gIC8vIFJlc3RvcmVzIHRoZSB0
ZXh0IGNvbG9yLgotICBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZShzdGRvdXRfaGFuZGxlLCBvbGRf
Y29sb3JfYXR0cnMpOwotI2Vsc2UKLSAgcHJpbnRmKCJcMDMzWzA7MyVzbSIsIEdldEFuc2lDb2xv
ckNvZGUoY29sb3IpKTsKLSAgdnByaW50ZihmbXQsIGFyZ3MpOwotICBwcmludGYoIlwwMzNbbSIp
OyAgLy8gUmVzZXRzIHRoZSB0ZXJtaW5hbCB0byBkZWZhdWx0LgotI2VuZGlmICAvLyBHVEVTVF9P
U19XSU5ET1dTICYmICFHVEVTVF9PU19XSU5ET1dTX01PQklMRQotICB2YV9lbmQoYXJncyk7Ci19
Ci0KLS8vIFRleHQgcHJpbnRlZCBpbiBHb29nbGUgVGVzdCdzIHRleHQgb3V0cHV0IGFuZCAtLWd1
bml0X2xpc3RfdGVzdHMKLS8vIG91dHB1dCB0byBsYWJlbCB0aGUgdHlwZSBwYXJhbWV0ZXIgYW5k
IHZhbHVlIHBhcmFtZXRlciBmb3IgYSB0ZXN0Lgotc3RhdGljIGNvbnN0IGNoYXIga1R5cGVQYXJh
bUxhYmVsW10gPSAiVHlwZVBhcmFtIjsKLXN0YXRpYyBjb25zdCBjaGFyIGtWYWx1ZVBhcmFtTGFi
ZWxbXSA9ICJHZXRQYXJhbSgpIjsKLQotdm9pZCBQcmludEZ1bGxUZXN0Q29tbWVudElmUHJlc2Vu
dChjb25zdCBUZXN0SW5mbyYgdGVzdF9pbmZvKSB7Ci0gIGNvbnN0IGNoYXIqIGNvbnN0IHR5cGVf
cGFyYW0gPSB0ZXN0X2luZm8udHlwZV9wYXJhbSgpOwotICBjb25zdCBjaGFyKiBjb25zdCB2YWx1
ZV9wYXJhbSA9IHRlc3RfaW5mby52YWx1ZV9wYXJhbSgpOwotCi0gIGlmICh0eXBlX3BhcmFtICE9
IE5VTEwgfHwgdmFsdWVfcGFyYW0gIT0gTlVMTCkgewotICAgIHByaW50ZigiLCB3aGVyZSAiKTsK
LSAgICBpZiAodHlwZV9wYXJhbSAhPSBOVUxMKSB7Ci0gICAgICBwcmludGYoIiVzID0gJXMiLCBr
VHlwZVBhcmFtTGFiZWwsIHR5cGVfcGFyYW0pOwotICAgICAgaWYgKHZhbHVlX3BhcmFtICE9IE5V
TEwpCi0gICAgICAgIHByaW50ZigiIGFuZCAiKTsKLSAgICB9Ci0gICAgaWYgKHZhbHVlX3BhcmFt
ICE9IE5VTEwpIHsKLSAgICAgIHByaW50ZigiJXMgPSAlcyIsIGtWYWx1ZVBhcmFtTGFiZWwsIHZh
bHVlX3BhcmFtKTsKLSAgICB9Ci0gIH0KLX0KLQotLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRo
ZSBUZXN0RXZlbnRMaXN0ZW5lciBpbnRlcmZhY2UuCi0vLwotLy8gQ2xhc3MgUHJldHR5VW5pdFRl
c3RSZXN1bHRQcmludGVyIGlzIGNvcHlhYmxlLgotY2xhc3MgUHJldHR5VW5pdFRlc3RSZXN1bHRQ
cmludGVyIDogcHVibGljIFRlc3RFdmVudExpc3RlbmVyIHsKLSBwdWJsaWM6Ci0gIFByZXR0eVVu
aXRUZXN0UmVzdWx0UHJpbnRlcigpIHt9Ci0gIHN0YXRpYyB2b2lkIFByaW50VGVzdE5hbWUoY29u
c3QgY2hhciAqIHRlc3RfY2FzZSwgY29uc3QgY2hhciAqIHRlc3QpIHsKLSAgICBwcmludGYoIiVz
LiVzIiwgdGVzdF9jYXNlLCB0ZXN0KTsKLSAgfQotCi0gIC8vIFRoZSBmb2xsb3dpbmcgbWV0aG9k
cyBvdmVycmlkZSB3aGF0J3MgaW4gdGhlIFRlc3RFdmVudExpc3RlbmVyIGNsYXNzLgotICB2aXJ0
dWFsIHZvaWQgT25UZXN0UHJvZ3JhbVN0YXJ0KGNvbnN0IFVuaXRUZXN0JiAvKnVuaXRfdGVzdCov
KSB7fQotICB2aXJ0dWFsIHZvaWQgT25UZXN0SXRlcmF0aW9uU3RhcnQoY29uc3QgVW5pdFRlc3Qm
IHVuaXRfdGVzdCwgaW50IGl0ZXJhdGlvbik7Ci0gIHZpcnR1YWwgdm9pZCBPbkVudmlyb25tZW50
c1NldFVwU3RhcnQoY29uc3QgVW5pdFRlc3QmIHVuaXRfdGVzdCk7Ci0gIHZpcnR1YWwgdm9pZCBP
bkVudmlyb25tZW50c1NldFVwRW5kKGNvbnN0IFVuaXRUZXN0JiAvKnVuaXRfdGVzdCovKSB7fQot
ICB2aXJ0dWFsIHZvaWQgT25UZXN0Q2FzZVN0YXJ0KGNvbnN0IFRlc3RDYXNlJiB0ZXN0X2Nhc2Up
OwotICB2aXJ0dWFsIHZvaWQgT25UZXN0U3RhcnQoY29uc3QgVGVzdEluZm8mIHRlc3RfaW5mbyk7
Ci0gIHZpcnR1YWwgdm9pZCBPblRlc3RQYXJ0UmVzdWx0KGNvbnN0IFRlc3RQYXJ0UmVzdWx0JiBy
ZXN1bHQpOwotICB2aXJ0dWFsIHZvaWQgT25UZXN0RW5kKGNvbnN0IFRlc3RJbmZvJiB0ZXN0X2lu
Zm8pOwotICB2aXJ0dWFsIHZvaWQgT25UZXN0Q2FzZUVuZChjb25zdCBUZXN0Q2FzZSYgdGVzdF9j
YXNlKTsKLSAgdmlydHVhbCB2b2lkIE9uRW52aXJvbm1lbnRzVGVhckRvd25TdGFydChjb25zdCBV
bml0VGVzdCYgdW5pdF90ZXN0KTsKLSAgdmlydHVhbCB2b2lkIE9uRW52aXJvbm1lbnRzVGVhckRv
d25FbmQoY29uc3QgVW5pdFRlc3QmIC8qdW5pdF90ZXN0Ki8pIHt9Ci0gIHZpcnR1YWwgdm9pZCBP
blRlc3RJdGVyYXRpb25FbmQoY29uc3QgVW5pdFRlc3QmIHVuaXRfdGVzdCwgaW50IGl0ZXJhdGlv
bik7Ci0gIHZpcnR1YWwgdm9pZCBPblRlc3RQcm9ncmFtRW5kKGNvbnN0IFVuaXRUZXN0JiAvKnVu
aXRfdGVzdCovKSB7fQotCi0gcHJpdmF0ZToKLSAgc3RhdGljIHZvaWQgUHJpbnRGYWlsZWRUZXN0
cyhjb25zdCBVbml0VGVzdCYgdW5pdF90ZXN0KTsKLX07Ci0KLSAgLy8gRmlyZWQgYmVmb3JlIGVh
Y2ggaXRlcmF0aW9uIG9mIHRlc3RzIHN0YXJ0cy4KLXZvaWQgUHJldHR5VW5pdFRlc3RSZXN1bHRQ
cmludGVyOjpPblRlc3RJdGVyYXRpb25TdGFydCgKLSAgICBjb25zdCBVbml0VGVzdCYgdW5pdF90
ZXN0LCBpbnQgaXRlcmF0aW9uKSB7Ci0gIGlmIChHVEVTVF9GTEFHKHJlcGVhdCkgIT0gMSkKLSAg
ICBwcmludGYoIlxuUmVwZWF0aW5nIGFsbCB0ZXN0cyAoaXRlcmF0aW9uICVkKSAuIC4gLlxuXG4i
LCBpdGVyYXRpb24gKyAxKTsKLQotICBjb25zdCBjaGFyKiBjb25zdCBmaWx0ZXIgPSBHVEVTVF9G
TEFHKGZpbHRlcikuY19zdHIoKTsKLQotICAvLyBQcmludHMgdGhlIGZpbHRlciBpZiBpdCdzIG5v
dCAqLiAgVGhpcyByZW1pbmRzIHRoZSB1c2VyIHRoYXQgc29tZQotICAvLyB0ZXN0cyBtYXkgYmUg
c2tpcHBlZC4KLSAgaWYgKCFTdHJpbmc6OkNTdHJpbmdFcXVhbHMoZmlsdGVyLCBrVW5pdmVyc2Fs
RmlsdGVyKSkgewotICAgIENvbG9yZWRQcmludGYoQ09MT1JfWUVMTE9XLAotICAgICAgICAgICAg
ICAgICAgIk5vdGU6ICVzIGZpbHRlciA9ICVzXG4iLCBHVEVTVF9OQU1FXywgZmlsdGVyKTsKLSAg
fQotCi0gIGlmIChpbnRlcm5hbDo6U2hvdWxkU2hhcmQoa1Rlc3RUb3RhbFNoYXJkcywga1Rlc3RT
aGFyZEluZGV4LCBmYWxzZSkpIHsKLSAgICBjb25zdCBJbnQzMiBzaGFyZF9pbmRleCA9IEludDMy
RnJvbUVudk9yRGllKGtUZXN0U2hhcmRJbmRleCwgLTEpOwotICAgIENvbG9yZWRQcmludGYoQ09M
T1JfWUVMTE9XLAotICAgICAgICAgICAgICAgICAgIk5vdGU6IFRoaXMgaXMgdGVzdCBzaGFyZCAl
ZCBvZiAlcy5cbiIsCi0gICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHNoYXJkX2lu
ZGV4KSArIDEsCi0gICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6cG9zaXg6OkdldEVudihrVGVz
dFRvdGFsU2hhcmRzKSk7Ci0gIH0KLQotICBpZiAoR1RFU1RfRkxBRyhzaHVmZmxlKSkgewotICAg
IENvbG9yZWRQcmludGYoQ09MT1JfWUVMTE9XLAotICAgICAgICAgICAgICAgICAgIk5vdGU6IFJh
bmRvbWl6aW5nIHRlc3RzJyBvcmRlcnMgd2l0aCBhIHNlZWQgb2YgJWQgLlxuIiwKLSAgICAgICAg
ICAgICAgICAgIHVuaXRfdGVzdC5yYW5kb21fc2VlZCgpKTsKLSAgfQotCi0gIENvbG9yZWRQcmlu
dGYoQ09MT1JfR1JFRU4sICAiWz09PT09PT09PT1dICIpOwotICBwcmludGYoIlJ1bm5pbmcgJXMg
ZnJvbSAlcy5cbiIsCi0gICAgICAgICBGb3JtYXRUZXN0Q291bnQodW5pdF90ZXN0LnRlc3RfdG9f
cnVuX2NvdW50KCkpLmNfc3RyKCksCi0gICAgICAgICBGb3JtYXRUZXN0Q2FzZUNvdW50KHVuaXRf
dGVzdC50ZXN0X2Nhc2VfdG9fcnVuX2NvdW50KCkpLmNfc3RyKCkpOwotICBmZmx1c2goc3Rkb3V0
KTsKLX0KLQotdm9pZCBQcmV0dHlVbml0VGVzdFJlc3VsdFByaW50ZXI6Ok9uRW52aXJvbm1lbnRz
U2V0VXBTdGFydCgKLSAgICBjb25zdCBVbml0VGVzdCYgLyp1bml0X3Rlc3QqLykgewotICBDb2xv
cmVkUHJpbnRmKENPTE9SX0dSRUVOLCAgIlstLS0tLS0tLS0tXSAiKTsKLSAgcHJpbnRmKCJHbG9i
YWwgdGVzdCBlbnZpcm9ubWVudCBzZXQtdXAuXG4iKTsKLSAgZmZsdXNoKHN0ZG91dCk7Ci19Ci0K
LXZvaWQgUHJldHR5VW5pdFRlc3RSZXN1bHRQcmludGVyOjpPblRlc3RDYXNlU3RhcnQoY29uc3Qg
VGVzdENhc2UmIHRlc3RfY2FzZSkgewotICBjb25zdCBzdGQ6OnN0cmluZyBjb3VudHMgPQotICAg
ICAgRm9ybWF0Q291bnRhYmxlTm91bih0ZXN0X2Nhc2UudGVzdF90b19ydW5fY291bnQoKSwgInRl
c3QiLCAidGVzdHMiKTsKLSAgQ29sb3JlZFByaW50ZihDT0xPUl9HUkVFTiwgIlstLS0tLS0tLS0t
XSAiKTsKLSAgcHJpbnRmKCIlcyBmcm9tICVzIiwgY291bnRzLmNfc3RyKCksIHRlc3RfY2FzZS5u
YW1lKCkpOwotICBpZiAodGVzdF9jYXNlLnR5cGVfcGFyYW0oKSA9PSBOVUxMKSB7Ci0gICAgcHJp
bnRmKCJcbiIpOwotICB9IGVsc2UgewotICAgIHByaW50ZigiLCB3aGVyZSAlcyA9ICVzXG4iLCBr
VHlwZVBhcmFtTGFiZWwsIHRlc3RfY2FzZS50eXBlX3BhcmFtKCkpOwotICB9Ci0gIGZmbHVzaChz
dGRvdXQpOwotfQotCi12b2lkIFByZXR0eVVuaXRUZXN0UmVzdWx0UHJpbnRlcjo6T25UZXN0U3Rh
cnQoY29uc3QgVGVzdEluZm8mIHRlc3RfaW5mbykgewotICBDb2xvcmVkUHJpbnRmKENPTE9SX0dS
RUVOLCAgIlsgUlVOICAgICAgXSAiKTsKLSAgUHJpbnRUZXN0TmFtZSh0ZXN0X2luZm8udGVzdF9j
YXNlX25hbWUoKSwgdGVzdF9pbmZvLm5hbWUoKSk7Ci0gIHByaW50ZigiXG4iKTsKLSAgZmZsdXNo
KHN0ZG91dCk7Ci19Ci0KLS8vIENhbGxlZCBhZnRlciBhbiBhc3NlcnRpb24gZmFpbHVyZS4KLXZv
aWQgUHJldHR5VW5pdFRlc3RSZXN1bHRQcmludGVyOjpPblRlc3RQYXJ0UmVzdWx0KAotICAgIGNv
bnN0IFRlc3RQYXJ0UmVzdWx0JiByZXN1bHQpIHsKLSAgLy8gSWYgdGhlIHRlc3QgcGFydCBzdWNj
ZWVkZWQsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCi0gIGlmIChyZXN1bHQudHlwZSgp
ID09IFRlc3RQYXJ0UmVzdWx0OjprU3VjY2VzcykKLSAgICByZXR1cm47Ci0KLSAgLy8gUHJpbnQg
ZmFpbHVyZSBtZXNzYWdlIGZyb20gdGhlIGFzc2VydGlvbiAoZS5nLiBleHBlY3RlZCB0aGlzIGFu
ZCBnb3QgdGhhdCkuCi0gIFByaW50VGVzdFBhcnRSZXN1bHQocmVzdWx0KTsKLSAgZmZsdXNoKHN0
ZG91dCk7Ci19Ci0KLXZvaWQgUHJldHR5VW5pdFRlc3RSZXN1bHRQcmludGVyOjpPblRlc3RFbmQo
Y29uc3QgVGVzdEluZm8mIHRlc3RfaW5mbykgewotICBpZiAodGVzdF9pbmZvLnJlc3VsdCgpLT5Q
YXNzZWQoKSkgewotICAgIENvbG9yZWRQcmludGYoQ09MT1JfR1JFRU4sICJbICAgICAgIE9LIF0g
Iik7Ci0gIH0gZWxzZSB7Ci0gICAgQ29sb3JlZFByaW50ZihDT0xPUl9SRUQsICJbICBGQUlMRUQg
IF0gIik7Ci0gIH0KLSAgUHJpbnRUZXN0TmFtZSh0ZXN0X2luZm8udGVzdF9jYXNlX25hbWUoKSwg
dGVzdF9pbmZvLm5hbWUoKSk7Ci0gIGlmICh0ZXN0X2luZm8ucmVzdWx0KCktPkZhaWxlZCgpKQot
ICAgIFByaW50RnVsbFRlc3RDb21tZW50SWZQcmVzZW50KHRlc3RfaW5mbyk7Ci0KLSAgaWYgKEdU
RVNUX0ZMQUcocHJpbnRfdGltZSkpIHsKLSAgICBwcmludGYoIiAoJXMgbXMpXG4iLCBpbnRlcm5h
bDo6U3RyZWFtYWJsZVRvU3RyaW5nKAotICAgICAgICAgICB0ZXN0X2luZm8ucmVzdWx0KCktPmVs
YXBzZWRfdGltZSgpKS5jX3N0cigpKTsKLSAgfSBlbHNlIHsKLSAgICBwcmludGYoIlxuIik7Ci0g
IH0KLSAgZmZsdXNoKHN0ZG91dCk7Ci19Ci0KLXZvaWQgUHJldHR5VW5pdFRlc3RSZXN1bHRQcmlu
dGVyOjpPblRlc3RDYXNlRW5kKGNvbnN0IFRlc3RDYXNlJiB0ZXN0X2Nhc2UpIHsKLSAgaWYgKCFH
VEVTVF9GTEFHKHByaW50X3RpbWUpKSByZXR1cm47Ci0KLSAgY29uc3Qgc3RkOjpzdHJpbmcgY291
bnRzID0KLSAgICAgIEZvcm1hdENvdW50YWJsZU5vdW4odGVzdF9jYXNlLnRlc3RfdG9fcnVuX2Nv
dW50KCksICJ0ZXN0IiwgInRlc3RzIik7Ci0gIENvbG9yZWRQcmludGYoQ09MT1JfR1JFRU4sICJb
LS0tLS0tLS0tLV0gIik7Ci0gIHByaW50ZigiJXMgZnJvbSAlcyAoJXMgbXMgdG90YWwpXG5cbiIs
Ci0gICAgICAgICBjb3VudHMuY19zdHIoKSwgdGVzdF9jYXNlLm5hbWUoKSwKLSAgICAgICAgIGlu
dGVybmFsOjpTdHJlYW1hYmxlVG9TdHJpbmcodGVzdF9jYXNlLmVsYXBzZWRfdGltZSgpKS5jX3N0
cigpKTsKLSAgZmZsdXNoKHN0ZG91dCk7Ci19Ci0KLXZvaWQgUHJldHR5VW5pdFRlc3RSZXN1bHRQ
cmludGVyOjpPbkVudmlyb25tZW50c1RlYXJEb3duU3RhcnQoCi0gICAgY29uc3QgVW5pdFRlc3Qm
IC8qdW5pdF90ZXN0Ki8pIHsKLSAgQ29sb3JlZFByaW50ZihDT0xPUl9HUkVFTiwgICJbLS0tLS0t
LS0tLV0gIik7Ci0gIHByaW50ZigiR2xvYmFsIHRlc3QgZW52aXJvbm1lbnQgdGVhci1kb3duXG4i
KTsKLSAgZmZsdXNoKHN0ZG91dCk7Ci19Ci0KLS8vIEludGVybmFsIGhlbHBlciBmb3IgcHJpbnRp
bmcgdGhlIGxpc3Qgb2YgZmFpbGVkIHRlc3RzLgotdm9pZCBQcmV0dHlVbml0VGVzdFJlc3VsdFBy
aW50ZXI6OlByaW50RmFpbGVkVGVzdHMoY29uc3QgVW5pdFRlc3QmIHVuaXRfdGVzdCkgewotICBj
b25zdCBpbnQgZmFpbGVkX3Rlc3RfY291bnQgPSB1bml0X3Rlc3QuZmFpbGVkX3Rlc3RfY291bnQo
KTsKLSAgaWYgKGZhaWxlZF90ZXN0X2NvdW50ID09IDApIHsKLSAgICByZXR1cm47Ci0gIH0KLQot
ICBmb3IgKGludCBpID0gMDsgaSA8IHVuaXRfdGVzdC50b3RhbF90ZXN0X2Nhc2VfY291bnQoKTsg
KytpKSB7Ci0gICAgY29uc3QgVGVzdENhc2UmIHRlc3RfY2FzZSA9ICp1bml0X3Rlc3QuR2V0VGVz
dENhc2UoaSk7Ci0gICAgaWYgKCF0ZXN0X2Nhc2Uuc2hvdWxkX3J1bigpIHx8ICh0ZXN0X2Nhc2Uu
ZmFpbGVkX3Rlc3RfY291bnQoKSA9PSAwKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotICAg
IGZvciAoaW50IGogPSAwOyBqIDwgdGVzdF9jYXNlLnRvdGFsX3Rlc3RfY291bnQoKTsgKytqKSB7
Ci0gICAgICBjb25zdCBUZXN0SW5mbyYgdGVzdF9pbmZvID0gKnRlc3RfY2FzZS5HZXRUZXN0SW5m
byhqKTsKLSAgICAgIGlmICghdGVzdF9pbmZvLnNob3VsZF9ydW4oKSB8fCB0ZXN0X2luZm8ucmVz
dWx0KCktPlBhc3NlZCgpKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgQ29s
b3JlZFByaW50ZihDT0xPUl9SRUQsICJbICBGQUlMRUQgIF0gIik7Ci0gICAgICBwcmludGYoIiVz
LiVzIiwgdGVzdF9jYXNlLm5hbWUoKSwgdGVzdF9pbmZvLm5hbWUoKSk7Ci0gICAgICBQcmludEZ1
bGxUZXN0Q29tbWVudElmUHJlc2VudCh0ZXN0X2luZm8pOwotICAgICAgcHJpbnRmKCJcbiIpOwot
ICAgIH0KLSAgfQotfQotCi12b2lkIFByZXR0eVVuaXRUZXN0UmVzdWx0UHJpbnRlcjo6T25UZXN0
SXRlcmF0aW9uRW5kKGNvbnN0IFVuaXRUZXN0JiB1bml0X3Rlc3QsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKml0ZXJhdGlvbiovKSB7
Ci0gIENvbG9yZWRQcmludGYoQ09MT1JfR1JFRU4sICAiWz09PT09PT09PT1dICIpOwotICBwcmlu
dGYoIiVzIGZyb20gJXMgcmFuLiIsCi0gICAgICAgICBGb3JtYXRUZXN0Q291bnQodW5pdF90ZXN0
LnRlc3RfdG9fcnVuX2NvdW50KCkpLmNfc3RyKCksCi0gICAgICAgICBGb3JtYXRUZXN0Q2FzZUNv
dW50KHVuaXRfdGVzdC50ZXN0X2Nhc2VfdG9fcnVuX2NvdW50KCkpLmNfc3RyKCkpOwotICBpZiAo
R1RFU1RfRkxBRyhwcmludF90aW1lKSkgewotICAgIHByaW50ZigiICglcyBtcyB0b3RhbCkiLAot
ICAgICAgICAgICBpbnRlcm5hbDo6U3RyZWFtYWJsZVRvU3RyaW5nKHVuaXRfdGVzdC5lbGFwc2Vk
X3RpbWUoKSkuY19zdHIoKSk7Ci0gIH0KLSAgcHJpbnRmKCJcbiIpOwotICBDb2xvcmVkUHJpbnRm
KENPTE9SX0dSRUVOLCAgIlsgIFBBU1NFRCAgXSAiKTsKLSAgcHJpbnRmKCIlcy5cbiIsIEZvcm1h
dFRlc3RDb3VudCh1bml0X3Rlc3Quc3VjY2Vzc2Z1bF90ZXN0X2NvdW50KCkpLmNfc3RyKCkpOwot
Ci0gIGludCBudW1fZmFpbHVyZXMgPSB1bml0X3Rlc3QuZmFpbGVkX3Rlc3RfY291bnQoKTsKLSAg
aWYgKCF1bml0X3Rlc3QuUGFzc2VkKCkpIHsKLSAgICBjb25zdCBpbnQgZmFpbGVkX3Rlc3RfY291
bnQgPSB1bml0X3Rlc3QuZmFpbGVkX3Rlc3RfY291bnQoKTsKLSAgICBDb2xvcmVkUHJpbnRmKENP
TE9SX1JFRCwgICJbICBGQUlMRUQgIF0gIik7Ci0gICAgcHJpbnRmKCIlcywgbGlzdGVkIGJlbG93
OlxuIiwgRm9ybWF0VGVzdENvdW50KGZhaWxlZF90ZXN0X2NvdW50KS5jX3N0cigpKTsKLSAgICBQ
cmludEZhaWxlZFRlc3RzKHVuaXRfdGVzdCk7Ci0gICAgcHJpbnRmKCJcbiUyZCBGQUlMRUQgJXNc
biIsIG51bV9mYWlsdXJlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bV9mYWlsdXJlcyA9
PSAxID8gIlRFU1QiIDogIlRFU1RTIik7Ci0gIH0KLQotICBpbnQgbnVtX2Rpc2FibGVkID0gdW5p
dF90ZXN0LnJlcG9ydGFibGVfZGlzYWJsZWRfdGVzdF9jb3VudCgpOwotICBpZiAobnVtX2Rpc2Fi
bGVkICYmICFHVEVTVF9GTEFHKGFsc29fcnVuX2Rpc2FibGVkX3Rlc3RzKSkgewotICAgIGlmICgh
bnVtX2ZhaWx1cmVzKSB7Ci0gICAgICBwcmludGYoIlxuIik7ICAvLyBBZGQgYSBzcGFjZXIgaWYg
bm8gRkFJTFVSRSBiYW5uZXIgaXMgZGlzcGxheWVkLgotICAgIH0KLSAgICBDb2xvcmVkUHJpbnRm
KENPTE9SX1lFTExPVywKLSAgICAgICAgICAgICAgICAgICIgIFlPVSBIQVZFICVkIERJU0FCTEVE
ICVzXG5cbiIsCi0gICAgICAgICAgICAgICAgICBudW1fZGlzYWJsZWQsCi0gICAgICAgICAgICAg
ICAgICBudW1fZGlzYWJsZWQgPT0gMSA/ICJURVNUIiA6ICJURVNUUyIpOwotICB9Ci0gIC8vIEVu
c3VyZSB0aGF0IEdvb2dsZSBUZXN0IG91dHB1dCBpcyBwcmludGVkIGJlZm9yZSwgZS5nLiwgaGVh
cGNoZWNrZXIgb3V0cHV0LgotICBmZmx1c2goc3Rkb3V0KTsKLX0KLQotLy8gRW5kIFByZXR0eVVu
aXRUZXN0UmVzdWx0UHJpbnRlcgotCi0vLyBjbGFzcyBUZXN0RXZlbnRSZXBlYXRlcgotLy8KLS8v
IFRoaXMgY2xhc3MgZm9yd2FyZHMgZXZlbnRzIHRvIG90aGVyIGV2ZW50IGxpc3RlbmVycy4KLWNs
YXNzIFRlc3RFdmVudFJlcGVhdGVyIDogcHVibGljIFRlc3RFdmVudExpc3RlbmVyIHsKLSBwdWJs
aWM6Ci0gIFRlc3RFdmVudFJlcGVhdGVyKCkgOiBmb3J3YXJkaW5nX2VuYWJsZWRfKHRydWUpIHt9
Ci0gIHZpcnR1YWwgflRlc3RFdmVudFJlcGVhdGVyKCk7Ci0gIHZvaWQgQXBwZW5kKFRlc3RFdmVu
dExpc3RlbmVyICpsaXN0ZW5lcik7Ci0gIFRlc3RFdmVudExpc3RlbmVyKiBSZWxlYXNlKFRlc3RF
dmVudExpc3RlbmVyKiBsaXN0ZW5lcik7Ci0KLSAgLy8gQ29udHJvbHMgd2hldGhlciBldmVudHMg
d2lsbCBiZSBmb3J3YXJkZWQgdG8gbGlzdGVuZXJzXy4gU2V0IHRvIGZhbHNlCi0gIC8vIGluIGRl
YXRoIHRlc3QgY2hpbGQgcHJvY2Vzc2VzLgotICBib29sIGZvcndhcmRpbmdfZW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIGZvcndhcmRpbmdfZW5hYmxlZF87IH0KLSAgdm9pZCBzZXRfZm9yd2FyZGlu
Z19lbmFibGVkKGJvb2wgZW5hYmxlKSB7IGZvcndhcmRpbmdfZW5hYmxlZF8gPSBlbmFibGU7IH0K
LQotICB2aXJ0dWFsIHZvaWQgT25UZXN0UHJvZ3JhbVN0YXJ0KGNvbnN0IFVuaXRUZXN0JiB1bml0
X3Rlc3QpOwotICB2aXJ0dWFsIHZvaWQgT25UZXN0SXRlcmF0aW9uU3RhcnQoY29uc3QgVW5pdFRl
c3QmIHVuaXRfdGVzdCwgaW50IGl0ZXJhdGlvbik7Ci0gIHZpcnR1YWwgdm9pZCBPbkVudmlyb25t
ZW50c1NldFVwU3RhcnQoY29uc3QgVW5pdFRlc3QmIHVuaXRfdGVzdCk7Ci0gIHZpcnR1YWwgdm9p
ZCBPbkVudmlyb25tZW50c1NldFVwRW5kKGNvbnN0IFVuaXRUZXN0JiB1bml0X3Rlc3QpOwotICB2
aXJ0dWFsIHZvaWQgT25UZXN0Q2FzZVN0YXJ0KGNvbnN0IFRlc3RDYXNlJiB0ZXN0X2Nhc2UpOwot
ICB2aXJ0dWFsIHZvaWQgT25UZXN0U3RhcnQoY29uc3QgVGVzdEluZm8mIHRlc3RfaW5mbyk7Ci0g
IHZpcnR1YWwgdm9pZCBPblRlc3RQYXJ0UmVzdWx0KGNvbnN0IFRlc3RQYXJ0UmVzdWx0JiByZXN1
bHQpOwotICB2aXJ0dWFsIHZvaWQgT25UZXN0RW5kKGNvbnN0IFRlc3RJbmZvJiB0ZXN0X2luZm8p
OwotICB2aXJ0dWFsIHZvaWQgT25UZXN0Q2FzZUVuZChjb25zdCBUZXN0Q2FzZSYgdGVzdF9jYXNl
KTsKLSAgdmlydHVhbCB2b2lkIE9uRW52aXJvbm1lbnRzVGVhckRvd25TdGFydChjb25zdCBVbml0
VGVzdCYgdW5pdF90ZXN0KTsKLSAgdmlydHVhbCB2b2lkIE9uRW52aXJvbm1lbnRzVGVhckRvd25F
bmQoY29uc3QgVW5pdFRlc3QmIHVuaXRfdGVzdCk7Ci0gIHZpcnR1YWwgdm9pZCBPblRlc3RJdGVy
YXRpb25FbmQoY29uc3QgVW5pdFRlc3QmIHVuaXRfdGVzdCwgaW50IGl0ZXJhdGlvbik7Ci0gIHZp
cnR1YWwgdm9pZCBPblRlc3RQcm9ncmFtRW5kKGNvbnN0IFVuaXRUZXN0JiB1bml0X3Rlc3QpOwot
Ci0gcHJpdmF0ZToKLSAgLy8gQ29udHJvbHMgd2hldGhlciBldmVudHMgd2lsbCBiZSBmb3J3YXJk
ZWQgdG8gbGlzdGVuZXJzXy4gU2V0IHRvIGZhbHNlCi0gIC8vIGluIGRlYXRoIHRlc3QgY2hpbGQg
cHJvY2Vzc2VzLgotICBib29sIGZvcndhcmRpbmdfZW5hYmxlZF87Ci0gIC8vIFRoZSBsaXN0IG9m
IGxpc3RlbmVycyB0aGF0IHJlY2VpdmUgZXZlbnRzLgotICBzdGQ6OnZlY3RvcjxUZXN0RXZlbnRM
aXN0ZW5lcio+IGxpc3RlbmVyc187Ci0KLSAgR1RFU1RfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
XyhUZXN0RXZlbnRSZXBlYXRlcik7Ci19OwotCi1UZXN0RXZlbnRSZXBlYXRlcjo6flRlc3RFdmVu
dFJlcGVhdGVyKCkgewotICBGb3JFYWNoKGxpc3RlbmVyc18sIERlbGV0ZTxUZXN0RXZlbnRMaXN0
ZW5lcj4pOwotfQotCi12b2lkIFRlc3RFdmVudFJlcGVhdGVyOjpBcHBlbmQoVGVzdEV2ZW50TGlz
dGVuZXIgKmxpc3RlbmVyKSB7Ci0gIGxpc3RlbmVyc18ucHVzaF9iYWNrKGxpc3RlbmVyKTsKLX0K
LQotLy8gVE9ETyh2bGFkbEBnb29nbGUuY29tKTogRmFjdG9yIHRoZSBzZWFyY2ggZnVuY3Rpb25h
bGl0eSBpbnRvIFZlY3Rvcjo6RmluZC4KLVRlc3RFdmVudExpc3RlbmVyKiBUZXN0RXZlbnRSZXBl
YXRlcjo6UmVsZWFzZShUZXN0RXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIpIHsKLSAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnNfLnNpemUoKTsgKytpKSB7Ci0gICAgaWYgKGxpc3RlbmVy
c19baV0gPT0gbGlzdGVuZXIpIHsKLSAgICAgIGxpc3RlbmVyc18uZXJhc2UobGlzdGVuZXJzXy5i
ZWdpbigpICsgaSk7Ci0gICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotICB9Ci0KLSAgcmV0
dXJuIE5VTEw7Ci19Ci0KLS8vIFNpbmNlIG1vc3QgbWV0aG9kcyBhcmUgdmVyeSBzaW1pbGFyLCB1
c2UgbWFjcm9zIHRvIHJlZHVjZSBib2lsZXJwbGF0ZS4KLS8vIFRoaXMgZGVmaW5lcyBhIG1lbWJl
ciB0aGF0IGZvcndhcmRzIHRoZSBjYWxsIHRvIGFsbCBsaXN0ZW5lcnMuCi0jZGVmaW5lIEdURVNU
X1JFUEVBVEVSX01FVEhPRF8oTmFtZSwgVHlwZSkgXAotdm9pZCBUZXN0RXZlbnRSZXBlYXRlcjo6
TmFtZShjb25zdCBUeXBlJiBwYXJhbWV0ZXIpIHsgXAotICBpZiAoZm9yd2FyZGluZ19lbmFibGVk
XykgeyBcCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lcnNfLnNpemUoKTsgaSsr
KSB7IFwKLSAgICAgIGxpc3RlbmVyc19baV0tPk5hbWUocGFyYW1ldGVyKTsgXAotICAgIH0gXAot
ICB9IFwKLX0KLS8vIFRoaXMgZGVmaW5lcyBhIG1lbWJlciB0aGF0IGZvcndhcmRzIHRoZSBjYWxs
IHRvIGFsbCBsaXN0ZW5lcnMgaW4gcmV2ZXJzZQotLy8gb3JkZXIuCi0jZGVmaW5lIEdURVNUX1JF
VkVSU0VfUkVQRUFURVJfTUVUSE9EXyhOYW1lLCBUeXBlKSBcCi12b2lkIFRlc3RFdmVudFJlcGVh
dGVyOjpOYW1lKGNvbnN0IFR5cGUmIHBhcmFtZXRlcikgeyBcCi0gIGlmIChmb3J3YXJkaW5nX2Vu
YWJsZWRfKSB7IFwKLSAgICBmb3IgKGludCBpID0gc3RhdGljX2Nhc3Q8aW50PihsaXN0ZW5lcnNf
LnNpemUoKSkgLSAxOyBpID49IDA7IGktLSkgeyBcCi0gICAgICBsaXN0ZW5lcnNfW2ldLT5OYW1l
KHBhcmFtZXRlcik7IFwKLSAgICB9IFwKLSAgfSBcCi19Ci0KLUdURVNUX1JFUEVBVEVSX01FVEhP
RF8oT25UZXN0UHJvZ3JhbVN0YXJ0LCBVbml0VGVzdCkKLUdURVNUX1JFUEVBVEVSX01FVEhPRF8o
T25FbnZpcm9ubWVudHNTZXRVcFN0YXJ0LCBVbml0VGVzdCkKLUdURVNUX1JFUEVBVEVSX01FVEhP
RF8oT25UZXN0Q2FzZVN0YXJ0LCBUZXN0Q2FzZSkKLUdURVNUX1JFUEVBVEVSX01FVEhPRF8oT25U
ZXN0U3RhcnQsIFRlc3RJbmZvKQotR1RFU1RfUkVQRUFURVJfTUVUSE9EXyhPblRlc3RQYXJ0UmVz
dWx0LCBUZXN0UGFydFJlc3VsdCkKLUdURVNUX1JFUEVBVEVSX01FVEhPRF8oT25FbnZpcm9ubWVu
dHNUZWFyRG93blN0YXJ0LCBVbml0VGVzdCkKLUdURVNUX1JFVkVSU0VfUkVQRUFURVJfTUVUSE9E
XyhPbkVudmlyb25tZW50c1NldFVwRW5kLCBVbml0VGVzdCkKLUdURVNUX1JFVkVSU0VfUkVQRUFU
RVJfTUVUSE9EXyhPbkVudmlyb25tZW50c1RlYXJEb3duRW5kLCBVbml0VGVzdCkKLUdURVNUX1JF
VkVSU0VfUkVQRUFURVJfTUVUSE9EXyhPblRlc3RFbmQsIFRlc3RJbmZvKQotR1RFU1RfUkVWRVJT
RV9SRVBFQVRFUl9NRVRIT0RfKE9uVGVzdENhc2VFbmQsIFRlc3RDYXNlKQotR1RFU1RfUkVWRVJT
RV9SRVBFQVRFUl9NRVRIT0RfKE9uVGVzdFByb2dyYW1FbmQsIFVuaXRUZXN0KQotCi0jdW5kZWYg
R1RFU1RfUkVQRUFURVJfTUVUSE9EXwotI3VuZGVmIEdURVNUX1JFVkVSU0VfUkVQRUFURVJfTUVU
SE9EXwotCi12b2lkIFRlc3RFdmVudFJlcGVhdGVyOjpPblRlc3RJdGVyYXRpb25TdGFydChjb25z
dCBVbml0VGVzdCYgdW5pdF90ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGl0ZXJhdGlvbikgewotICBpZiAoZm9yd2FyZGluZ19lbmFibGVkXykg
ewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdGVuZXJzXy5zaXplKCk7IGkrKykgewot
ICAgICAgbGlzdGVuZXJzX1tpXS0+T25UZXN0SXRlcmF0aW9uU3RhcnQodW5pdF90ZXN0LCBpdGVy
YXRpb24pOwotICAgIH0KLSAgfQotfQotCi12b2lkIFRlc3RFdmVudFJlcGVhdGVyOjpPblRlc3RJ
dGVyYXRpb25FbmQoY29uc3QgVW5pdFRlc3QmIHVuaXRfdGVzdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlcmF0aW9uKSB7Ci0gIGlmIChmb3J3YXJk
aW5nX2VuYWJsZWRfKSB7Ci0gICAgZm9yIChpbnQgaSA9IHN0YXRpY19jYXN0PGludD4obGlzdGVu
ZXJzXy5zaXplKCkpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgIGxpc3RlbmVyc19baV0tPk9u
VGVzdEl0ZXJhdGlvbkVuZCh1bml0X3Rlc3QsIGl0ZXJhdGlvbik7Ci0gICAgfQotICB9Ci19Ci0K
LS8vIEVuZCBUZXN0RXZlbnRSZXBlYXRlcgotCi0vLyBUaGlzIGNsYXNzIGdlbmVyYXRlcyBhbiBY
TUwgb3V0cHV0IGZpbGUuCi1jbGFzcyBYbWxVbml0VGVzdFJlc3VsdFByaW50ZXIgOiBwdWJsaWMg
RW1wdHlUZXN0RXZlbnRMaXN0ZW5lciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBYbWxVbml0VGVz
dFJlc3VsdFByaW50ZXIoY29uc3QgY2hhciogb3V0cHV0X2ZpbGUpOwotCi0gIHZpcnR1YWwgdm9p
ZCBPblRlc3RJdGVyYXRpb25FbmQoY29uc3QgVW5pdFRlc3QmIHVuaXRfdGVzdCwgaW50IGl0ZXJh
dGlvbik7Ci0KLSBwcml2YXRlOgotICAvLyBJcyBjIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgdGhh
dCBpcyBub3JtYWxpemVkIHRvIGEgc3BhY2UgY2hhcmFjdGVyCi0gIC8vIHdoZW4gaXQgYXBwZWFy
cyBpbiBhbiBYTUwgYXR0cmlidXRlIHZhbHVlPwotICBzdGF0aWMgYm9vbCBJc05vcm1hbGl6YWJs
ZVdoaXRlc3BhY2UoY2hhciBjKSB7Ci0gICAgcmV0dXJuIGMgPT0gMHg5IHx8IGMgPT0gMHhBIHx8
IGMgPT0gMHhEOwotICB9Ci0KLSAgLy8gTWF5IGMgYXBwZWFyIGluIGEgd2VsbC1mb3JtZWQgWE1M
IGRvY3VtZW50PwotICBzdGF0aWMgYm9vbCBJc1ZhbGlkWG1sQ2hhcmFjdGVyKGNoYXIgYykgewot
ICAgIHJldHVybiBJc05vcm1hbGl6YWJsZVdoaXRlc3BhY2UoYykgfHwgYyA+PSAweDIwOwotICB9
Ci0KLSAgLy8gUmV0dXJucyBhbiBYTUwtZXNjYXBlZCBjb3B5IG9mIHRoZSBpbnB1dCBzdHJpbmcg
c3RyLiAgSWYKLSAgLy8gaXNfYXR0cmlidXRlIGlzIHRydWUsIHRoZSB0ZXh0IGlzIG1lYW50IHRv
IGFwcGVhciBhcyBhbiBhdHRyaWJ1dGUKLSAgLy8gdmFsdWUsIGFuZCBub3JtYWxpemFibGUgd2hp
dGVzcGFjZSBpcyBwcmVzZXJ2ZWQgYnkgcmVwbGFjaW5nIGl0Ci0gIC8vIHdpdGggY2hhcmFjdGVy
IHJlZmVyZW5jZXMuCi0gIHN0YXRpYyBzdGQ6OnN0cmluZyBFc2NhcGVYbWwoY29uc3Qgc3RkOjpz
dHJpbmcmIHN0ciwgYm9vbCBpc19hdHRyaWJ1dGUpOwotCi0gIC8vIFJldHVybnMgdGhlIGdpdmVu
IHN0cmluZyB3aXRoIGFsbCBjaGFyYWN0ZXJzIGludmFsaWQgaW4gWE1MIHJlbW92ZWQuCi0gIHN0
YXRpYyBzdGQ6OnN0cmluZyBSZW1vdmVJbnZhbGlkWG1sQ2hhcmFjdGVycyhjb25zdCBzdGQ6OnN0
cmluZyYgc3RyKTsKLQotICAvLyBDb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCBFc2NhcGVYbWwg
d2hlbiBzdHIgaXMgYW4gYXR0cmlidXRlIHZhbHVlLgotICBzdGF0aWMgc3RkOjpzdHJpbmcgRXNj
YXBlWG1sQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpIHsKLSAgICByZXR1cm4gRXNj
YXBlWG1sKHN0ciwgdHJ1ZSk7Ci0gIH0KLQotICAvLyBDb252ZW5pZW5jZSB3cmFwcGVyIGFyb3Vu
ZCBFc2NhcGVYbWwgd2hlbiBzdHIgaXMgbm90IGFuIGF0dHJpYnV0ZSB2YWx1ZS4KLSAgc3RhdGlj
IHN0ZDo6c3RyaW5nIEVzY2FwZVhtbFRleHQoY29uc3QgY2hhciogc3RyKSB7Ci0gICAgcmV0dXJu
IEVzY2FwZVhtbChzdHIsIGZhbHNlKTsKLSAgfQotCi0gIC8vIFZlcmlmaWVzIHRoYXQgdGhlIGdp
dmVuIGF0dHJpYnV0ZSBiZWxvbmdzIHRvIHRoZSBnaXZlbiBlbGVtZW50IGFuZAotICAvLyBzdHJl
YW1zIHRoZSBhdHRyaWJ1dGUgYXMgWE1MLgotICBzdGF0aWMgdm9pZCBPdXRwdXRYbWxBdHRyaWJ1
dGUoc3RkOjpvc3RyZWFtKiBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgZWxlbWVudF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpOwotCi0gIC8vIFN0cmVhbXMg
YW4gWE1MIENEQVRBIHNlY3Rpb24sIGVzY2FwaW5nIGludmFsaWQgQ0RBVEEgc2VxdWVuY2VzIGFz
IG5lZWRlZC4KLSAgc3RhdGljIHZvaWQgT3V0cHV0WG1sQ0RhdGFTZWN0aW9uKDo6c3RkOjpvc3Ry
ZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIGRhdGEpOwotCi0gIC8vIFN0cmVhbXMgYW4gWE1MIHJl
cHJlc2VudGF0aW9uIG9mIGEgVGVzdEluZm8gb2JqZWN0LgotICBzdGF0aWMgdm9pZCBPdXRwdXRY
bWxUZXN0SW5mbyg6OnN0ZDo6b3N0cmVhbSogc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiB0ZXN0X2Nhc2VfbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVGVzdEluZm8mIHRlc3RfaW5mbyk7Ci0KLSAgLy8gUHJpbnRz
IGFuIFhNTCByZXByZXNlbnRhdGlvbiBvZiBhIFRlc3RDYXNlIG9iamVjdAotICBzdGF0aWMgdm9p
ZCBQcmludFhtbFRlc3RDYXNlKDo6c3RkOjpvc3RyZWFtKiBzdHJlYW0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVGVzdENhc2UmIHRlc3RfY2FzZSk7Ci0KLSAgLy8gUHJp
bnRzIGFuIFhNTCBzdW1tYXJ5IG9mIHVuaXRfdGVzdCB0byBvdXRwdXQgc3RyZWFtIG91dC4KLSAg
c3RhdGljIHZvaWQgUHJpbnRYbWxVbml0VGVzdCg6OnN0ZDo6b3N0cmVhbSogc3RyZWFtLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaXRUZXN0JiB1bml0X3Rlc3QpOwot
Ci0gIC8vIFByb2R1Y2VzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdGVzdCBwcm9wZXJ0aWVz
IGluIGEgcmVzdWx0IGFzIHNwYWNlCi0gIC8vIGRlbGltaXRlZCBYTUwgYXR0cmlidXRlcyBiYXNl
ZCBvbiB0aGUgcHJvcGVydHkga2V5PSJ2YWx1ZSIgcGFpcnMuCi0gIC8vIFdoZW4gdGhlIHN0ZDo6
c3RyaW5nIGlzIG5vdCBlbXB0eSwgaXQgaW5jbHVkZXMgYSBzcGFjZSBhdCB0aGUgYmVnaW5uaW5n
LAotICAvLyB0byBkZWxpbWl0IHRoaXMgYXR0cmlidXRlIGZyb20gcHJpb3IgYXR0cmlidXRlcy4K
LSAgc3RhdGljIHN0ZDo6c3RyaW5nIFRlc3RQcm9wZXJ0aWVzQXNYbWxBdHRyaWJ1dGVzKGNvbnN0
IFRlc3RSZXN1bHQmIHJlc3VsdCk7Ci0KLSAgLy8gVGhlIG91dHB1dCBmaWxlLgotICBjb25zdCBz
dGQ6OnN0cmluZyBvdXRwdXRfZmlsZV87Ci0KLSAgR1RFU1RfRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOXyhYbWxVbml0VGVzdFJlc3VsdFByaW50ZXIpOwotfTsKLQotLy8gQ3JlYXRlcyBhIG5ldyBY
bWxVbml0VGVzdFJlc3VsdFByaW50ZXIuCi1YbWxVbml0VGVzdFJlc3VsdFByaW50ZXI6OlhtbFVu
aXRUZXN0UmVzdWx0UHJpbnRlcihjb25zdCBjaGFyKiBvdXRwdXRfZmlsZSkKLSAgICA6IG91dHB1
dF9maWxlXyhvdXRwdXRfZmlsZSkgewotICBpZiAob3V0cHV0X2ZpbGVfLmNfc3RyKCkgPT0gTlVM
TCB8fCBvdXRwdXRfZmlsZV8uZW1wdHkoKSkgewotICAgIGZwcmludGYoc3RkZXJyLCAiWE1MIG91
dHB1dCBmaWxlIG1heSBub3QgYmUgbnVsbFxuIik7Ci0gICAgZmZsdXNoKHN0ZGVycik7Ci0gICAg
ZXhpdChFWElUX0ZBSUxVUkUpOwotICB9Ci19Ci0KLS8vIENhbGxlZCBhZnRlciB0aGUgdW5pdCB0
ZXN0IGVuZHMuCi12b2lkIFhtbFVuaXRUZXN0UmVzdWx0UHJpbnRlcjo6T25UZXN0SXRlcmF0aW9u
RW5kKGNvbnN0IFVuaXRUZXN0JiB1bml0X3Rlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKml0ZXJhdGlvbiovKSB7Ci0gIEZJTEUqIHht
bG91dCA9IE5VTEw7Ci0gIEZpbGVQYXRoIG91dHB1dF9maWxlKG91dHB1dF9maWxlXyk7Ci0gIEZp
bGVQYXRoIG91dHB1dF9kaXIob3V0cHV0X2ZpbGUuUmVtb3ZlRmlsZU5hbWUoKSk7Ci0KLSAgaWYg
KG91dHB1dF9kaXIuQ3JlYXRlRGlyZWN0b3JpZXNSZWN1cnNpdmVseSgpKSB7Ci0gICAgeG1sb3V0
ID0gcG9zaXg6OkZPcGVuKG91dHB1dF9maWxlXy5jX3N0cigpLCAidyIpOwotICB9Ci0gIGlmICh4
bWxvdXQgPT0gTlVMTCkgewotICAgIC8vIFRPRE8od2FuKTogcmVwb3J0IHRoZSByZWFzb24gb2Yg
dGhlIGZhaWx1cmUuCi0gICAgLy8KLSAgICAvLyBXZSBkb24ndCBkbyBpdCBmb3Igbm93IGFzOgot
ICAgIC8vCi0gICAgLy8gICAxLiBUaGVyZSBpcyBubyB1cmdlbnQgbmVlZCBmb3IgaXQuCi0gICAg
Ly8gICAyLiBJdCdzIGEgYml0IGludm9sdmVkIHRvIG1ha2UgdGhlIGVycm5vIHZhcmlhYmxlIHRo
cmVhZC1zYWZlIG9uCi0gICAgLy8gICAgICBhbGwgdGhyZWUgb3BlcmF0aW5nIHN5c3RlbXMgKExp
bnV4LCBXaW5kb3dzLCBhbmQgTWFjIE9TKS4KLSAgICAvLyAgIDMuIFRvIGludGVycHJldCB0aGUg
bWVhbmluZyBvZiBlcnJubyBpbiBhIHRocmVhZC1zYWZlIHdheSwKLSAgICAvLyAgICAgIHdlIG5l
ZWQgdGhlIHN0cmVycm9yX3IoKSBmdW5jdGlvbiwgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBvbgot
ICAgIC8vICAgICAgV2luZG93cy4KLSAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICJV
bmFibGUgdG8gb3BlbiBmaWxlIFwiJXNcIlxuIiwKLSAgICAgICAgICAgIG91dHB1dF9maWxlXy5j
X3N0cigpKTsKLSAgICBmZmx1c2goc3RkZXJyKTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0g
IH0KLSAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwotICBQcmludFhtbFVuaXRUZXN0KCZzdHJl
YW0sIHVuaXRfdGVzdCk7Ci0gIGZwcmludGYoeG1sb3V0LCAiJXMiLCBTdHJpbmdTdHJlYW1Ub1N0
cmluZygmc3RyZWFtKS5jX3N0cigpKTsKLSAgZmNsb3NlKHhtbG91dCk7Ci19Ci0KLS8vIFJldHVy
bnMgYW4gWE1MLWVzY2FwZWQgY29weSBvZiB0aGUgaW5wdXQgc3RyaW5nIHN0ci4gIElmIGlzX2F0
dHJpYnV0ZQotLy8gaXMgdHJ1ZSwgdGhlIHRleHQgaXMgbWVhbnQgdG8gYXBwZWFyIGFzIGFuIGF0
dHJpYnV0ZSB2YWx1ZSwgYW5kCi0vLyBub3JtYWxpemFibGUgd2hpdGVzcGFjZSBpcyBwcmVzZXJ2
ZWQgYnkgcmVwbGFjaW5nIGl0IHdpdGggY2hhcmFjdGVyCi0vLyByZWZlcmVuY2VzLgotLy8KLS8v
IEludmFsaWQgWE1MIGNoYXJhY3RlcnMgaW4gc3RyLCBpZiBhbnksIGFyZSBzdHJpcHBlZCBmcm9t
IHRoZSBvdXRwdXQuCi0vLyBJdCBpcyBleHBlY3RlZCB0aGF0IG1vc3QsIGlmIG5vdCBhbGwsIG9m
IHRoZSB0ZXh0IHByb2Nlc3NlZCBieSB0aGlzCi0vLyBtb2R1bGUgd2lsbCBjb25zaXN0IG9mIG9y
ZGluYXJ5IEVuZ2xpc2ggdGV4dC4KLS8vIElmIHRoaXMgbW9kdWxlIGlzIGV2ZXIgbW9kaWZpZWQg
dG8gcHJvZHVjZSB2ZXJzaW9uIDEuMSBYTUwgb3V0cHV0LAotLy8gbW9zdCBpbnZhbGlkIGNoYXJh
Y3RlcnMgY2FuIGJlIHJldGFpbmVkIHVzaW5nIGNoYXJhY3RlciByZWZlcmVuY2VzLgotLy8gVE9E
Tyh3YW4pOiBJdCBtaWdodCBiZSBuaWNlIHRvIGhhdmUgYSBtaW5pbWFsbHkgaW52YXNpdmUsIGh1
bWFuLXJlYWRhYmxlCi0vLyBlc2NhcGluZyBzY2hlbWUgZm9yIGludmFsaWQgY2hhcmFjdGVycywg
cmF0aGVyIHRoYW4gZHJvcHBpbmcgdGhlbS4KLXN0ZDo6c3RyaW5nIFhtbFVuaXRUZXN0UmVzdWx0
UHJpbnRlcjo6RXNjYXBlWG1sKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIGJvb2wgaXNf
YXR0cmlidXRlKSB7Ci0gIE1lc3NhZ2UgbTsKLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0
ci5zaXplKCk7ICsraSkgewotICAgIGNvbnN0IGNoYXIgY2ggPSBzdHJbaV07Ci0gICAgc3dpdGNo
IChjaCkgewotICAgICAgY2FzZSAnPCc6Ci0gICAgICAgIG0gPDwgIiZsdDsiOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgJz4nOgotICAgICAgICBtIDw8ICImZ3Q7IjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlICcmJzoKLSAgICAgICAgbSA8PCAiJmFtcDsiOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgJ1wnJzoKLSAgICAgICAgaWYgKGlzX2F0dHJpYnV0ZSkKLSAgICAgICAg
ICBtIDw8ICImYXBvczsiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbSA8PCAnXCcnOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgJyInOgotICAgICAgICBpZiAoaXNfYXR0cmlidXRlKQot
ICAgICAgICAgIG0gPDwgIiZxdW90OyI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBtIDw8ICci
JzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoSXNWYWxpZFht
bENoYXJhY3RlcihjaCkpIHsKLSAgICAgICAgICBpZiAoaXNfYXR0cmlidXRlICYmIElzTm9ybWFs
aXphYmxlV2hpdGVzcGFjZShjaCkpCi0gICAgICAgICAgICBtIDw8ICImI3giIDw8IFN0cmluZzo6
Rm9ybWF0Qnl0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjaCkpCi0gICAgICAgICAgICAg
IDw8ICI7IjsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBtIDw8IGNoOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBtLkdldFN0cmluZygpOwot
fQotCi0vLyBSZXR1cm5zIHRoZSBnaXZlbiBzdHJpbmcgd2l0aCBhbGwgY2hhcmFjdGVycyBpbnZh
bGlkIGluIFhNTCByZW1vdmVkLgotLy8gQ3VycmVudGx5IGludmFsaWQgY2hhcmFjdGVycyBhcmUg
ZHJvcHBlZCBmcm9tIHRoZSBzdHJpbmcuIEFuCi0vLyBhbHRlcm5hdGl2ZSBpcyB0byByZXBsYWNl
IHRoZW0gd2l0aCBjZXJ0YWluIGNoYXJhY3RlcnMgc3VjaCBhcyAuIG9yID8uCi1zdGQ6OnN0cmlu
ZyBYbWxVbml0VGVzdFJlc3VsdFByaW50ZXI6OlJlbW92ZUludmFsaWRYbWxDaGFyYWN0ZXJzKAot
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpIHsKLSAgc3RkOjpzdHJpbmcgb3V0cHV0OwotICBv
dXRwdXQucmVzZXJ2ZShzdHIuc2l6ZSgpKTsKLSAgZm9yIChzdGQ6OnN0cmluZzo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBzdHIuYmVnaW4oKTsgaXQgIT0gc3RyLmVuZCgpOyArK2l0KQotICAgIGlmIChJ
c1ZhbGlkWG1sQ2hhcmFjdGVyKCppdCkpCi0gICAgICBvdXRwdXQucHVzaF9iYWNrKCppdCk7Ci0K
LSAgcmV0dXJuIG91dHB1dDsKLX0KLQotLy8gVGhlIGZvbGxvd2luZyByb3V0aW5lcyBnZW5lcmF0
ZSBhbiBYTUwgcmVwcmVzZW50YXRpb24gb2YgYSBVbml0VGVzdAotLy8gb2JqZWN0LgotLy8KLS8v
IFRoaXMgaXMgaG93IEdvb2dsZSBUZXN0IGNvbmNlcHRzIG1hcCB0byB0aGUgRFREOgotLy8KLS8v
IDx0ZXN0c3VpdGVzIG5hbWU9IkFsbFRlc3RzIj4gICAgICAgIDwtLSBjb3JyZXNwb25kcyB0byBh
IFVuaXRUZXN0IG9iamVjdAotLy8gICA8dGVzdHN1aXRlIG5hbWU9InRlc3RjYXNlLW5hbWUiPiAg
PC0tIGNvcnJlc3BvbmRzIHRvIGEgVGVzdENhc2Ugb2JqZWN0Ci0vLyAgICAgPHRlc3RjYXNlIG5h
bWU9InRlc3QtbmFtZSI+ICAgICA8LS0gY29ycmVzcG9uZHMgdG8gYSBUZXN0SW5mbyBvYmplY3QK
LS8vICAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9Ii4uLiI+Li4uPC9mYWlsdXJlPgotLy8gICAgICAg
PGZhaWx1cmUgbWVzc2FnZT0iLi4uIj4uLi48L2ZhaWx1cmU+Ci0vLyAgICAgICA8ZmFpbHVyZSBt
ZXNzYWdlPSIuLi4iPi4uLjwvZmFpbHVyZT4KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDwtLSBpbmRpdmlkdWFsIGFzc2VydGlvbiBmYWlsdXJlcwotLy8gICAgIDwvdGVz
dGNhc2U+Ci0vLyAgIDwvdGVzdHN1aXRlPgotLy8gPC90ZXN0c3VpdGVzPgotCi0vLyBGb3JtYXRz
IHRoZSBnaXZlbiB0aW1lIGluIG1pbGxpc2Vjb25kcyBhcyBzZWNvbmRzLgotc3RkOjpzdHJpbmcg
Rm9ybWF0VGltZUluTWlsbGlzQXNTZWNvbmRzKFRpbWVJbk1pbGxpcyBtcykgewotICA6OnN0ZDo6
c3RyaW5nc3RyZWFtIHNzOwotICBzcyA8PCAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtcykgKiAxZS0z
KTsKLSAgcmV0dXJuIHNzLnN0cigpOwotfQotCi1zdGF0aWMgYm9vbCBQb3J0YWJsZUxvY2FsdGlt
ZSh0aW1lX3Qgc2Vjb25kcywgc3RydWN0IHRtKiBvdXQpIHsKLSNpZiBkZWZpbmVkKF9NU0NfVkVS
KQotICByZXR1cm4gbG9jYWx0aW1lX3Mob3V0LCAmc2Vjb25kcykgPT0gMDsKLSNlbGlmIGRlZmlu
ZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX19NSU5HVzY0X18pCi0gIC8vIE1JTkdXIDx0aW1l
Lmg+IHByb3ZpZGVzIG5laXRoZXIgbG9jYWx0aW1lX3Igbm9yIGxvY2FsdGltZV9zLCBidXQgdXNl
cwotICAvLyBXaW5kb3dzJyBsb2NhbHRpbWUoKSwgd2hpY2ggaGFzIGEgdGhyZWFkLWxvY2FsIHRt
IGJ1ZmZlci4KLSAgc3RydWN0IHRtKiB0bV9wdHIgPSBsb2NhbHRpbWUoJnNlY29uZHMpOyAgLy8g
Tk9MSU5UCi0gIGlmICh0bV9wdHIgPT0gTlVMTCkKLSAgICByZXR1cm4gZmFsc2U7Ci0gICpvdXQg
PSAqdG1fcHRyOwotICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gIHJldHVybiBsb2NhbHRpbWVfcigm
c2Vjb25kcywgb3V0KSAhPSBOVUxMOwotI2VuZGlmCi19Ci0KLS8vIENvbnZlcnRzIHRoZSBnaXZl
biBlcG9jaCB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byBhIGRhdGUgc3RyaW5nIGluIHRoZSBJU08K
LS8vIDg2MDEgZm9ybWF0LCB3aXRob3V0IHRoZSB0aW1lem9uZSBpbmZvcm1hdGlvbi4KLXN0ZDo6
c3RyaW5nIEZvcm1hdEVwb2NoVGltZUluTWlsbGlzQXNJc284NjAxKFRpbWVJbk1pbGxpcyBtcykg
ewotICBzdHJ1Y3QgdG0gdGltZV9zdHJ1Y3Q7Ci0gIGlmICghUG9ydGFibGVMb2NhbHRpbWUoc3Rh
dGljX2Nhc3Q8dGltZV90PihtcyAvIDEwMDApLCAmdGltZV9zdHJ1Y3QpKQotICAgIHJldHVybiAi
IjsKLSAgLy8gWVlZWS1NTS1ERFRoaDptbTpzcwotICByZXR1cm4gU3RyZWFtYWJsZVRvU3RyaW5n
KHRpbWVfc3RydWN0LnRtX3llYXIgKyAxOTAwKSArICItIiArCi0gICAgICBTdHJpbmc6OkZvcm1h
dEludFdpZHRoMih0aW1lX3N0cnVjdC50bV9tb24gKyAxKSArICItIiArCi0gICAgICBTdHJpbmc6
OkZvcm1hdEludFdpZHRoMih0aW1lX3N0cnVjdC50bV9tZGF5KSArICJUIiArCi0gICAgICBTdHJp
bmc6OkZvcm1hdEludFdpZHRoMih0aW1lX3N0cnVjdC50bV9ob3VyKSArICI6IiArCi0gICAgICBT
dHJpbmc6OkZvcm1hdEludFdpZHRoMih0aW1lX3N0cnVjdC50bV9taW4pICsgIjoiICsKLSAgICAg
IFN0cmluZzo6Rm9ybWF0SW50V2lkdGgyKHRpbWVfc3RydWN0LnRtX3NlYyk7Ci19Ci0KLS8vIFN0
cmVhbXMgYW4gWE1MIENEQVRBIHNlY3Rpb24sIGVzY2FwaW5nIGludmFsaWQgQ0RBVEEgc2VxdWVu
Y2VzIGFzIG5lZWRlZC4KLXZvaWQgWG1sVW5pdFRlc3RSZXN1bHRQcmludGVyOjpPdXRwdXRYbWxD
RGF0YVNlY3Rpb24oOjpzdGQ6Om9zdHJlYW0qIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZGF0YSkgewotICBj
b25zdCBjaGFyKiBzZWdtZW50ID0gZGF0YTsKLSAgKnN0cmVhbSA8PCAiPCFbQ0RBVEFbIjsKLSAg
Zm9yICg7OykgewotICAgIGNvbnN0IGNoYXIqIGNvbnN0IG5leHRfc2VnbWVudCA9IHN0cnN0cihz
ZWdtZW50LCAiXV0+Iik7Ci0gICAgaWYgKG5leHRfc2VnbWVudCAhPSBOVUxMKSB7Ci0gICAgICBz
dHJlYW0tPndyaXRlKAotICAgICAgICAgIHNlZ21lbnQsIHN0YXRpY19jYXN0PHN0ZDo6c3RyZWFt
c2l6ZT4obmV4dF9zZWdtZW50IC0gc2VnbWVudCkpOwotICAgICAgKnN0cmVhbSA8PCAiXV0+XV0m
Z3Q7PCFbQ0RBVEFbIjsKLSAgICAgIHNlZ21lbnQgPSBuZXh0X3NlZ21lbnQgKyBzdHJsZW4oIl1d
PiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAqc3RyZWFtIDw8IHNlZ21lbnQ7Ci0gICAgICBicmVh
azsKLSAgICB9Ci0gIH0KLSAgKnN0cmVhbSA8PCAiXV0+IjsKLX0KLQotdm9pZCBYbWxVbml0VGVz
dFJlc3VsdFByaW50ZXI6Ok91dHB1dFhtbEF0dHJpYnV0ZSgKLSAgICBzdGQ6Om9zdHJlYW0qIHN0
cmVhbSwKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgZWxlbWVudF9uYW1lLAotICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiBuYW1lLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBjb25z
dCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGFsbG93ZWRfbmFtZXMgPQotICAgICAgR2V0UmVz
ZXJ2ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudChlbGVtZW50X25hbWUpOwotCi0gIEdURVNUX0NIRUNL
XyhzdGQ6OmZpbmQoYWxsb3dlZF9uYW1lcy5iZWdpbigpLCBhbGxvd2VkX25hbWVzLmVuZCgpLCBu
YW1lKSAhPQotICAgICAgICAgICAgICAgICAgIGFsbG93ZWRfbmFtZXMuZW5kKCkpCi0gICAgICA8
PCAiQXR0cmlidXRlICIgPDwgbmFtZSA8PCAiIGlzIG5vdCBhbGxvd2VkIGZvciBlbGVtZW50IDwi
IDw8IGVsZW1lbnRfbmFtZQotICAgICAgPDwgIj4uIjsKLQotICAqc3RyZWFtIDw8ICIgIiA8PCBu
YW1lIDw8ICI9XCIiIDw8IEVzY2FwZVhtbEF0dHJpYnV0ZSh2YWx1ZSkgPDwgIlwiIjsKLX0KLQot
Ly8gUHJpbnRzIGFuIFhNTCByZXByZXNlbnRhdGlvbiBvZiBhIFRlc3RJbmZvIG9iamVjdC4KLS8v
IFRPRE8od2FuKTogVGhlcmUgaXMgYWxzbyB2YWx1ZSBpbiBwcmludGluZyBwcm9wZXJ0aWVzIHdp
dGggdGhlIHBsYWluIHByaW50ZXIuCi12b2lkIFhtbFVuaXRUZXN0UmVzdWx0UHJpbnRlcjo6T3V0
cHV0WG1sVGVzdEluZm8oOjpzdGQ6Om9zdHJlYW0qIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0ZXN0X2Nhc2VfbmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUZXN0SW5mbyYgdGVzdF9pbmZvKSB7Ci0gIGNvbnN0IFRlc3RSZXN1bHQmIHJlc3VsdCA9ICp0
ZXN0X2luZm8ucmVzdWx0KCk7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nIGtUZXN0Y2FzZSA9ICJ0ZXN0
Y2FzZSI7Ci0KLSAgKnN0cmVhbSA8PCAiICAgIDx0ZXN0Y2FzZSI7Ci0gIE91dHB1dFhtbEF0dHJp
YnV0ZShzdHJlYW0sIGtUZXN0Y2FzZSwgIm5hbWUiLCB0ZXN0X2luZm8ubmFtZSgpKTsKLQotICBp
ZiAodGVzdF9pbmZvLnZhbHVlX3BhcmFtKCkgIT0gTlVMTCkgewotICAgIE91dHB1dFhtbEF0dHJp
YnV0ZShzdHJlYW0sIGtUZXN0Y2FzZSwgInZhbHVlX3BhcmFtIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdF9pbmZvLnZhbHVlX3BhcmFtKCkpOwotICB9Ci0gIGlmICh0ZXN0X2luZm8udHlw
ZV9wYXJhbSgpICE9IE5VTEwpIHsKLSAgICBPdXRwdXRYbWxBdHRyaWJ1dGUoc3RyZWFtLCBrVGVz
dGNhc2UsICJ0eXBlX3BhcmFtIiwgdGVzdF9pbmZvLnR5cGVfcGFyYW0oKSk7Ci0gIH0KLQotICBP
dXRwdXRYbWxBdHRyaWJ1dGUoc3RyZWFtLCBrVGVzdGNhc2UsICJzdGF0dXMiLAotICAgICAgICAg
ICAgICAgICAgICAgdGVzdF9pbmZvLnNob3VsZF9ydW4oKSA/ICJydW4iIDogIm5vdHJ1biIpOwot
ICBPdXRwdXRYbWxBdHRyaWJ1dGUoc3RyZWFtLCBrVGVzdGNhc2UsICJ0aW1lIiwKLSAgICAgICAg
ICAgICAgICAgICAgIEZvcm1hdFRpbWVJbk1pbGxpc0FzU2Vjb25kcyhyZXN1bHQuZWxhcHNlZF90
aW1lKCkpKTsKLSAgT3V0cHV0WG1sQXR0cmlidXRlKHN0cmVhbSwga1Rlc3RjYXNlLCAiY2xhc3Nu
YW1lIiwgdGVzdF9jYXNlX25hbWUpOwotICAqc3RyZWFtIDw8IFRlc3RQcm9wZXJ0aWVzQXNYbWxB
dHRyaWJ1dGVzKHJlc3VsdCk7Ci0KLSAgaW50IGZhaWx1cmVzID0gMDsKLSAgZm9yIChpbnQgaSA9
IDA7IGkgPCByZXN1bHQudG90YWxfcGFydF9jb3VudCgpOyArK2kpIHsKLSAgICBjb25zdCBUZXN0
UGFydFJlc3VsdCYgcGFydCA9IHJlc3VsdC5HZXRUZXN0UGFydFJlc3VsdChpKTsKLSAgICBpZiAo
cGFydC5mYWlsZWQoKSkgewotICAgICAgaWYgKCsrZmFpbHVyZXMgPT0gMSkgewotICAgICAgICAq
c3RyZWFtIDw8ICI+XG4iOwotICAgICAgfQotICAgICAgY29uc3Qgc3RyaW5nIGxvY2F0aW9uID0g
aW50ZXJuYWw6OkZvcm1hdENvbXBpbGVySW5kZXBlbmRlbnRGaWxlTG9jYXRpb24oCi0gICAgICAg
ICAgcGFydC5maWxlX25hbWUoKSwgcGFydC5saW5lX251bWJlcigpKTsKLSAgICAgIGNvbnN0IHN0
cmluZyBzdW1tYXJ5ID0gbG9jYXRpb24gKyAiXG4iICsgcGFydC5zdW1tYXJ5KCk7Ci0gICAgICAq
c3RyZWFtIDw8ICIgICAgICA8ZmFpbHVyZSBtZXNzYWdlPVwiIgotICAgICAgICAgICAgICA8PCBF
c2NhcGVYbWxBdHRyaWJ1dGUoc3VtbWFyeS5jX3N0cigpKQotICAgICAgICAgICAgICA8PCAiXCIg
dHlwZT1cIlwiPiI7Ci0gICAgICBjb25zdCBzdHJpbmcgZGV0YWlsID0gbG9jYXRpb24gKyAiXG4i
ICsgcGFydC5tZXNzYWdlKCk7Ci0gICAgICBPdXRwdXRYbWxDRGF0YVNlY3Rpb24oc3RyZWFtLCBS
ZW1vdmVJbnZhbGlkWG1sQ2hhcmFjdGVycyhkZXRhaWwpLmNfc3RyKCkpOwotICAgICAgKnN0cmVh
bSA8PCAiPC9mYWlsdXJlPlxuIjsKLSAgICB9Ci0gIH0KLQotICBpZiAoZmFpbHVyZXMgPT0gMCkK
LSAgICAqc3RyZWFtIDw8ICIgLz5cbiI7Ci0gIGVsc2UKLSAgICAqc3RyZWFtIDw8ICIgICAgPC90
ZXN0Y2FzZT5cbiI7Ci19Ci0KLS8vIFByaW50cyBhbiBYTUwgcmVwcmVzZW50YXRpb24gb2YgYSBU
ZXN0Q2FzZSBvYmplY3QKLXZvaWQgWG1sVW5pdFRlc3RSZXN1bHRQcmludGVyOjpQcmludFhtbFRl
c3RDYXNlKHN0ZDo6b3N0cmVhbSogc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVzdENhc2UmIHRlc3RfY2FzZSkgewotICBjb25z
dCBzdGQ6OnN0cmluZyBrVGVzdHN1aXRlID0gInRlc3RzdWl0ZSI7Ci0gICpzdHJlYW0gPDwgIiAg
PCIgPDwga1Rlc3RzdWl0ZTsKLSAgT3V0cHV0WG1sQXR0cmlidXRlKHN0cmVhbSwga1Rlc3RzdWl0
ZSwgIm5hbWUiLCB0ZXN0X2Nhc2UubmFtZSgpKTsKLSAgT3V0cHV0WG1sQXR0cmlidXRlKHN0cmVh
bSwga1Rlc3RzdWl0ZSwgInRlc3RzIiwKLSAgICAgICAgICAgICAgICAgICAgIFN0cmVhbWFibGVU
b1N0cmluZyh0ZXN0X2Nhc2UucmVwb3J0YWJsZV90ZXN0X2NvdW50KCkpKTsKLSAgT3V0cHV0WG1s
QXR0cmlidXRlKHN0cmVhbSwga1Rlc3RzdWl0ZSwgImZhaWx1cmVzIiwKLSAgICAgICAgICAgICAg
ICAgICAgIFN0cmVhbWFibGVUb1N0cmluZyh0ZXN0X2Nhc2UuZmFpbGVkX3Rlc3RfY291bnQoKSkp
OwotICBPdXRwdXRYbWxBdHRyaWJ1dGUoCi0gICAgICBzdHJlYW0sIGtUZXN0c3VpdGUsICJkaXNh
YmxlZCIsCi0gICAgICBTdHJlYW1hYmxlVG9TdHJpbmcodGVzdF9jYXNlLnJlcG9ydGFibGVfZGlz
YWJsZWRfdGVzdF9jb3VudCgpKSk7Ci0gIE91dHB1dFhtbEF0dHJpYnV0ZShzdHJlYW0sIGtUZXN0
c3VpdGUsICJlcnJvcnMiLCAiMCIpOwotICBPdXRwdXRYbWxBdHRyaWJ1dGUoc3RyZWFtLCBrVGVz
dHN1aXRlLCAidGltZSIsCi0gICAgICAgICAgICAgICAgICAgICBGb3JtYXRUaW1lSW5NaWxsaXNB
c1NlY29uZHModGVzdF9jYXNlLmVsYXBzZWRfdGltZSgpKSk7Ci0gICpzdHJlYW0gPDwgVGVzdFBy
b3BlcnRpZXNBc1htbEF0dHJpYnV0ZXModGVzdF9jYXNlLmFkX2hvY190ZXN0X3Jlc3VsdCgpKQot
ICAgICAgICAgIDw8ICI+XG4iOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgdGVzdF9jYXNlLnRv
dGFsX3Rlc3RfY291bnQoKTsgKytpKSB7Ci0gICAgaWYgKHRlc3RfY2FzZS5HZXRUZXN0SW5mbyhp
KS0+aXNfcmVwb3J0YWJsZSgpKQotICAgICAgT3V0cHV0WG1sVGVzdEluZm8oc3RyZWFtLCB0ZXN0
X2Nhc2UubmFtZSgpLCAqdGVzdF9jYXNlLkdldFRlc3RJbmZvKGkpKTsKLSAgfQotICAqc3RyZWFt
IDw8ICIgIDwvIiA8PCBrVGVzdHN1aXRlIDw8ICI+XG4iOwotfQotCi0vLyBQcmludHMgYW4gWE1M
IHN1bW1hcnkgb2YgdW5pdF90ZXN0IHRvIG91dHB1dCBzdHJlYW0gb3V0Lgotdm9pZCBYbWxVbml0
VGVzdFJlc3VsdFByaW50ZXI6OlByaW50WG1sVW5pdFRlc3Qoc3RkOjpvc3RyZWFtKiBzdHJlYW0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
bml0VGVzdCYgdW5pdF90ZXN0KSB7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nIGtUZXN0c3VpdGVzID0g
InRlc3RzdWl0ZXMiOwotCi0gICpzdHJlYW0gPDwgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNv
ZGluZz1cIlVURi04XCI/PlxuIjsKLSAgKnN0cmVhbSA8PCAiPCIgPDwga1Rlc3RzdWl0ZXM7Ci0K
LSAgT3V0cHV0WG1sQXR0cmlidXRlKHN0cmVhbSwga1Rlc3RzdWl0ZXMsICJ0ZXN0cyIsCi0gICAg
ICAgICAgICAgICAgICAgICBTdHJlYW1hYmxlVG9TdHJpbmcodW5pdF90ZXN0LnJlcG9ydGFibGVf
dGVzdF9jb3VudCgpKSk7Ci0gIE91dHB1dFhtbEF0dHJpYnV0ZShzdHJlYW0sIGtUZXN0c3VpdGVz
LCAiZmFpbHVyZXMiLAotICAgICAgICAgICAgICAgICAgICAgU3RyZWFtYWJsZVRvU3RyaW5nKHVu
aXRfdGVzdC5mYWlsZWRfdGVzdF9jb3VudCgpKSk7Ci0gIE91dHB1dFhtbEF0dHJpYnV0ZSgKLSAg
ICAgIHN0cmVhbSwga1Rlc3RzdWl0ZXMsICJkaXNhYmxlZCIsCi0gICAgICBTdHJlYW1hYmxlVG9T
dHJpbmcodW5pdF90ZXN0LnJlcG9ydGFibGVfZGlzYWJsZWRfdGVzdF9jb3VudCgpKSk7Ci0gIE91
dHB1dFhtbEF0dHJpYnV0ZShzdHJlYW0sIGtUZXN0c3VpdGVzLCAiZXJyb3JzIiwgIjAiKTsKLSAg
T3V0cHV0WG1sQXR0cmlidXRlKAotICAgICAgc3RyZWFtLCBrVGVzdHN1aXRlcywgInRpbWVzdGFt
cCIsCi0gICAgICBGb3JtYXRFcG9jaFRpbWVJbk1pbGxpc0FzSXNvODYwMSh1bml0X3Rlc3Quc3Rh
cnRfdGltZXN0YW1wKCkpKTsKLSAgT3V0cHV0WG1sQXR0cmlidXRlKHN0cmVhbSwga1Rlc3RzdWl0
ZXMsICJ0aW1lIiwKLSAgICAgICAgICAgICAgICAgICAgIEZvcm1hdFRpbWVJbk1pbGxpc0FzU2Vj
b25kcyh1bml0X3Rlc3QuZWxhcHNlZF90aW1lKCkpKTsKLQotICBpZiAoR1RFU1RfRkxBRyhzaHVm
ZmxlKSkgewotICAgIE91dHB1dFhtbEF0dHJpYnV0ZShzdHJlYW0sIGtUZXN0c3VpdGVzLCAicmFu
ZG9tX3NlZWQiLAotICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW1hYmxlVG9TdHJpbmcodW5p
dF90ZXN0LnJhbmRvbV9zZWVkKCkpKTsKLSAgfQotCi0gICpzdHJlYW0gPDwgVGVzdFByb3BlcnRp
ZXNBc1htbEF0dHJpYnV0ZXModW5pdF90ZXN0LmFkX2hvY190ZXN0X3Jlc3VsdCgpKTsKLQotICBP
dXRwdXRYbWxBdHRyaWJ1dGUoc3RyZWFtLCBrVGVzdHN1aXRlcywgIm5hbWUiLCAiQWxsVGVzdHMi
KTsKLSAgKnN0cmVhbSA8PCAiPlxuIjsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IHVuaXRfdGVz
dC50b3RhbF90ZXN0X2Nhc2VfY291bnQoKTsgKytpKSB7Ci0gICAgaWYgKHVuaXRfdGVzdC5HZXRU
ZXN0Q2FzZShpKS0+cmVwb3J0YWJsZV90ZXN0X2NvdW50KCkgPiAwKQotICAgICAgUHJpbnRYbWxU
ZXN0Q2FzZShzdHJlYW0sICp1bml0X3Rlc3QuR2V0VGVzdENhc2UoaSkpOwotICB9Ci0gICpzdHJl
YW0gPDwgIjwvIiA8PCBrVGVzdHN1aXRlcyA8PCAiPlxuIjsKLX0KLQotLy8gUHJvZHVjZXMgYSBz
dHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0ZXN0IHByb3BlcnRpZXMgaW4gYSByZXN1bHQgYXMgc3Bh
Y2UKLS8vIGRlbGltaXRlZCBYTUwgYXR0cmlidXRlcyBiYXNlZCBvbiB0aGUgcHJvcGVydHkga2V5
PSJ2YWx1ZSIgcGFpcnMuCi1zdGQ6OnN0cmluZyBYbWxVbml0VGVzdFJlc3VsdFByaW50ZXI6OlRl
c3RQcm9wZXJ0aWVzQXNYbWxBdHRyaWJ1dGVzKAotICAgIGNvbnN0IFRlc3RSZXN1bHQmIHJlc3Vs
dCkgewotICBNZXNzYWdlIGF0dHJpYnV0ZXM7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0
LnRlc3RfcHJvcGVydHlfY291bnQoKTsgKytpKSB7Ci0gICAgY29uc3QgVGVzdFByb3BlcnR5JiBw
cm9wZXJ0eSA9IHJlc3VsdC5HZXRUZXN0UHJvcGVydHkoaSk7Ci0gICAgYXR0cmlidXRlcyA8PCAi
ICIgPDwgcHJvcGVydHkua2V5KCkgPDwgIj0iCi0gICAgICAgIDw8ICJcIiIgPDwgRXNjYXBlWG1s
QXR0cmlidXRlKHByb3BlcnR5LnZhbHVlKCkpIDw8ICJcIiI7Ci0gIH0KLSAgcmV0dXJuIGF0dHJp
YnV0ZXMuR2V0U3RyaW5nKCk7Ci19Ci0KLS8vIEVuZCBYbWxVbml0VGVzdFJlc3VsdFByaW50ZXIK
LQotI2lmIEdURVNUX0NBTl9TVFJFQU1fUkVTVUxUU18KLQotLy8gQ2hlY2tzIGlmIHN0ciBjb250
YWlucyAnPScsICcmJywgJyUnIG9yICdcbicgY2hhcmFjdGVycy4gSWYgeWVzLAotLy8gcmVwbGFj
ZXMgdGhlbSBieSAiJXh4IiB3aGVyZSB4eCBpcyB0aGVpciBoZXhhZGVjaW1hbCB2YWx1ZS4gRm9y
Ci0vLyBleGFtcGxlLCByZXBsYWNlcyAiPSIgd2l0aCAiJTNEIi4gIFRoaXMgYWxnb3JpdGhtIGlz
IE8oc3RybGVuKHN0cikpCi0vLyBpbiBib3RoIHRpbWUgYW5kIHNwYWNlIC0tIGltcG9ydGFudCBh
cyB0aGUgaW5wdXQgc3RyIG1heSBjb250YWluIGFuCi0vLyBhcmJpdHJhcmlseSBsb25nIHRlc3Qg
ZmFpbHVyZSBtZXNzYWdlIGFuZCBzdGFjayB0cmFjZS4KLXN0cmluZyBTdHJlYW1pbmdMaXN0ZW5l
cjo6VXJsRW5jb2RlKGNvbnN0IGNoYXIqIHN0cikgewotICBzdHJpbmcgcmVzdWx0OwotICByZXN1
bHQucmVzZXJ2ZShzdHJsZW4oc3RyKSArIDEpOwotICBmb3IgKGNoYXIgY2ggPSAqc3RyOyBjaCAh
PSAnXDAnOyBjaCA9ICorK3N0cikgewotICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgIGNhc2UgJyUn
OgotICAgICAgY2FzZSAnPSc6Ci0gICAgICBjYXNlICcmJzoKLSAgICAgIGNhc2UgJ1xuJzoKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiJSIgKyBTdHJpbmc6OkZvcm1hdEJ5dGUoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oY2gpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgcmVzdWx0LnB1c2hfYmFjayhjaCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQot
ICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFN0cmVhbWluZ0xpc3RlbmVyOjpTb2NrZXRXcml0
ZXI6Ok1ha2VDb25uZWN0aW9uKCkgewotICBHVEVTVF9DSEVDS18oc29ja2ZkXyA9PSAtMSkKLSAg
ICAgIDw8ICJNYWtlQ29ubmVjdGlvbigpIGNhbid0IGJlIGNhbGxlZCB3aGVuIHRoZXJlIGlzIGFs
cmVhZHkgYSBjb25uZWN0aW9uLiI7Ci0KLSAgYWRkcmluZm8gaGludHM7Ci0gIG1lbXNldCgmaGlu
dHMsIDAsIHNpemVvZihoaW50cykpOwotICBoaW50cy5haV9mYW1pbHkgPSBBRl9VTlNQRUM7ICAg
IC8vIFRvIGFsbG93IGJvdGggSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMuCi0gIGhpbnRzLmFpX3Nv
Y2t0eXBlID0gU09DS19TVFJFQU07Ci0gIGFkZHJpbmZvKiBzZXJ2aW5mbyA9IE5VTEw7Ci0KLSAg
Ly8gVXNlIHRoZSBnZXRhZGRyaW5mbygpIHRvIGdldCBhIGxpbmtlZCBsaXN0IG9mIElQIGFkZHJl
c3NlcyBmb3IKLSAgLy8gdGhlIGdpdmVuIGhvc3QgbmFtZS4KLSAgY29uc3QgaW50IGVycm9yX251
bSA9IGdldGFkZHJpbmZvKAotICAgICAgaG9zdF9uYW1lXy5jX3N0cigpLCBwb3J0X251bV8uY19z
dHIoKSwgJmhpbnRzLCAmc2VydmluZm8pOwotICBpZiAoZXJyb3JfbnVtICE9IDApIHsKLSAgICBH
VEVTVF9MT0dfKFdBUk5JTkcpIDw8ICJzdHJlYW1fcmVzdWx0X3RvOiBnZXRhZGRyaW5mbygpIGZh
aWxlZDogIgotICAgICAgICAgICAgICAgICAgICAgICAgPDwgZ2FpX3N0cmVycm9yKGVycm9yX251
bSk7Ci0gIH0KLQotICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSByZXN1bHRzIGFuZCBjb25uZWN0
IHRvIHRoZSBmaXJzdCB3ZSBjYW4uCi0gIGZvciAoYWRkcmluZm8qIGN1cl9hZGRyID0gc2Vydmlu
Zm87IHNvY2tmZF8gPT0gLTEgJiYgY3VyX2FkZHIgIT0gTlVMTDsKLSAgICAgICBjdXJfYWRkciA9
IGN1cl9hZGRyLT5haV9uZXh0KSB7Ci0gICAgc29ja2ZkXyA9IHNvY2tldCgKLSAgICAgICAgY3Vy
X2FkZHItPmFpX2ZhbWlseSwgY3VyX2FkZHItPmFpX3NvY2t0eXBlLCBjdXJfYWRkci0+YWlfcHJv
dG9jb2wpOwotICAgIGlmIChzb2NrZmRfICE9IC0xKSB7Ci0gICAgICAvLyBDb25uZWN0IHRoZSBj
bGllbnQgc29ja2V0IHRvIHRoZSBzZXJ2ZXIgc29ja2V0LgotICAgICAgaWYgKGNvbm5lY3Qoc29j
a2ZkXywgY3VyX2FkZHItPmFpX2FkZHIsIGN1cl9hZGRyLT5haV9hZGRybGVuKSA9PSAtMSkgewot
ICAgICAgICBjbG9zZShzb2NrZmRfKTsKLSAgICAgICAgc29ja2ZkXyA9IC0xOwotICAgICAgfQot
ICAgIH0KLSAgfQotCi0gIGZyZWVhZGRyaW5mbyhzZXJ2aW5mbyk7ICAvLyBhbGwgZG9uZSB3aXRo
IHRoaXMgc3RydWN0dXJlCi0KLSAgaWYgKHNvY2tmZF8gPT0gLTEpIHsKLSAgICBHVEVTVF9MT0df
KFdBUk5JTkcpIDw8ICJzdHJlYW1fcmVzdWx0X3RvOiBmYWlsZWQgdG8gY29ubmVjdCB0byAiCi0g
ICAgICAgICAgICAgICAgICAgICAgICA8PCBob3N0X25hbWVfIDw8ICI6IiA8PCBwb3J0X251bV87
Ci0gIH0KLX0KLQotLy8gRW5kIG9mIGNsYXNzIFN0cmVhbWluZyBMaXN0ZW5lcgotI2VuZGlmICAv
LyBHVEVTVF9DQU5fU1RSRUFNX1JFU1VMVFNfXwotCi0vLyBDbGFzcyBTY29wZWRUcmFjZQotCi0v
LyBQdXNoZXMgdGhlIGdpdmVuIHNvdXJjZSBmaWxlIGxvY2F0aW9uIGFuZCBtZXNzYWdlIG9udG8g
YSBwZXItdGhyZWFkCi0vLyB0cmFjZSBzdGFjayBtYWludGFpbmVkIGJ5IEdvb2dsZSBUZXN0Lgot
U2NvcGVkVHJhY2U6OlNjb3BlZFRyYWNlKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25z
dCBNZXNzYWdlJiBtZXNzYWdlKQotICAgIEdURVNUX0xPQ0tfRVhDTFVERURfKCZVbml0VGVzdDo6
bXV0ZXhfKSB7Ci0gIFRyYWNlSW5mbyB0cmFjZTsKLSAgdHJhY2UuZmlsZSA9IGZpbGU7Ci0gIHRy
YWNlLmxpbmUgPSBsaW5lOwotICB0cmFjZS5tZXNzYWdlID0gbWVzc2FnZS5HZXRTdHJpbmcoKTsK
LQotICBVbml0VGVzdDo6R2V0SW5zdGFuY2UoKS0+UHVzaEdUZXN0VHJhY2UodHJhY2UpOwotfQot
Ci0vLyBQb3BzIHRoZSBpbmZvIHB1c2hlZCBieSB0aGUgYyd0b3IuCi1TY29wZWRUcmFjZTo6flNj
b3BlZFRyYWNlKCkKLSAgICBHVEVTVF9MT0NLX0VYQ0xVREVEXygmVW5pdFRlc3Q6Om11dGV4Xykg
ewotICBVbml0VGVzdDo6R2V0SW5zdGFuY2UoKS0+UG9wR1Rlc3RUcmFjZSgpOwotfQotCi0KLS8v
IGNsYXNzIE9zU3RhY2tUcmFjZUdldHRlcgotCi1jb25zdCBjaGFyKiBjb25zdCBPc1N0YWNrVHJh
Y2VHZXR0ZXJJbnRlcmZhY2U6OmtFbGlkZWRGcmFtZXNNYXJrZXIgPQotICAgICIuLi4gIiBHVEVT
VF9OQU1FXyAiIGludGVybmFsIGZyYW1lcyAuLi4iOwotCi1zdHJpbmcgT3NTdGFja1RyYWNlR2V0
dGVyOjpDdXJyZW50U3RhY2tUcmFjZShpbnQgLyptYXhfZGVwdGgqLywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKnNraXBfY291bnQqLykgewotICBy
ZXR1cm4gIiI7Ci19Ci0KLXZvaWQgT3NTdGFja1RyYWNlR2V0dGVyOjpVcG9uTGVhdmluZ0dUZXN0
KCkge30KLQotLy8gQSBoZWxwZXIgY2xhc3MgdGhhdCBjcmVhdGVzIHRoZSBwcmVtYXR1cmUtZXhp
dCBmaWxlIGluIGl0cwotLy8gY29uc3RydWN0b3IgYW5kIGRlbGV0ZXMgdGhlIGZpbGUgaW4gaXRz
IGRlc3RydWN0b3IuCi1jbGFzcyBTY29wZWRQcmVtYXR1cmVFeGl0RmlsZSB7Ci0gcHVibGljOgot
ICBleHBsaWNpdCBTY29wZWRQcmVtYXR1cmVFeGl0RmlsZShjb25zdCBjaGFyKiBwcmVtYXR1cmVf
ZXhpdF9maWxlcGF0aCkKLSAgICAgIDogcHJlbWF0dXJlX2V4aXRfZmlsZXBhdGhfKHByZW1hdHVy
ZV9leGl0X2ZpbGVwYXRoKSB7Ci0gICAgLy8gSWYgYSBwYXRoIHRvIHRoZSBwcmVtYXR1cmUtZXhp
dCBmaWxlIGlzIHNwZWNpZmllZC4uLgotICAgIGlmIChwcmVtYXR1cmVfZXhpdF9maWxlcGF0aCAh
PSBOVUxMICYmICpwcmVtYXR1cmVfZXhpdF9maWxlcGF0aCAhPSAnXDAnKSB7Ci0gICAgICAvLyBj
cmVhdGUgdGhlIGZpbGUgd2l0aCBhIHNpbmdsZSAiMCIgY2hhcmFjdGVyIGluIGl0LiAgSS9PCi0g
ICAgICAvLyBlcnJvcnMgYXJlIGlnbm9yZWQgYXMgdGhlcmUncyBub3RoaW5nIGJldHRlciB3ZSBj
YW4gZG8gYW5kIHdlCi0gICAgICAvLyBkb24ndCB3YW50IHRvIGZhaWwgdGhlIHRlc3QgYmVjYXVz
ZSBvZiB0aGlzLgotICAgICAgRklMRSogcGZpbGUgPSBwb3NpeDo6Rk9wZW4ocHJlbWF0dXJlX2V4
aXRfZmlsZXBhdGgsICJ3Iik7Ci0gICAgICBmd3JpdGUoIjAiLCAxLCAxLCBwZmlsZSk7Ci0gICAg
ICBmY2xvc2UocGZpbGUpOwotICAgIH0KLSAgfQotCi0gIH5TY29wZWRQcmVtYXR1cmVFeGl0Rmls
ZSgpIHsKLSAgICBpZiAocHJlbWF0dXJlX2V4aXRfZmlsZXBhdGhfICE9IE5VTEwgJiYgKnByZW1h
dHVyZV9leGl0X2ZpbGVwYXRoXyAhPSAnXDAnKSB7Ci0gICAgICByZW1vdmUocHJlbWF0dXJlX2V4
aXRfZmlsZXBhdGhfKTsKLSAgICB9Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGNvbnN0IGNoYXIqIGNv
bnN0IHByZW1hdHVyZV9leGl0X2ZpbGVwYXRoXzsKLQotICBHVEVTVF9ESVNBTExPV19DT1BZX0FO
RF9BU1NJR05fKFNjb3BlZFByZW1hdHVyZUV4aXRGaWxlKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFj
ZSBpbnRlcm5hbAotCi0vLyBjbGFzcyBUZXN0RXZlbnRMaXN0ZW5lcnMKLQotVGVzdEV2ZW50TGlz
dGVuZXJzOjpUZXN0RXZlbnRMaXN0ZW5lcnMoKQotICAgIDogcmVwZWF0ZXJfKG5ldyBpbnRlcm5h
bDo6VGVzdEV2ZW50UmVwZWF0ZXIoKSksCi0gICAgICBkZWZhdWx0X3Jlc3VsdF9wcmludGVyXyhO
VUxMKSwKLSAgICAgIGRlZmF1bHRfeG1sX2dlbmVyYXRvcl8oTlVMTCkgewotfQotCi1UZXN0RXZl
bnRMaXN0ZW5lcnM6On5UZXN0RXZlbnRMaXN0ZW5lcnMoKSB7IGRlbGV0ZSByZXBlYXRlcl87IH0K
LQotLy8gUmV0dXJucyB0aGUgc3RhbmRhcmQgbGlzdGVuZXIgcmVzcG9uc2libGUgZm9yIHRoZSBk
ZWZhdWx0IGNvbnNvbGUKLS8vIG91dHB1dC4gIENhbiBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3Rl
bmVycyBsaXN0IHRvIHNodXQgZG93biBkZWZhdWx0Ci0vLyBjb25zb2xlIG91dHB1dC4gIE5vdGUg
dGhhdCByZW1vdmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBsaXN0ZW5lciBsaXN0Ci0vLyB3aXRo
IFJlbGVhc2UgdHJhbnNmZXJzIGl0cyBvd25lcnNoaXAgdG8gdGhlIHVzZXIuCi12b2lkIFRlc3RF
dmVudExpc3RlbmVyczo6QXBwZW5kKFRlc3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikgewotICBy
ZXBlYXRlcl8tPkFwcGVuZChsaXN0ZW5lcik7Ci19Ci0KLS8vIFJlbW92ZXMgdGhlIGdpdmVuIGV2
ZW50IGxpc3RlbmVyIGZyb20gdGhlIGxpc3QgYW5kIHJldHVybnMgaXQuICBJdCB0aGVuCi0vLyBi
ZWNvbWVzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBkZWxldGUgdGhlIGxpc3RlbmVy
LiBSZXR1cm5zCi0vLyBOVUxMIGlmIHRoZSBsaXN0ZW5lciBpcyBub3QgZm91bmQgaW4gdGhlIGxp
c3QuCi1UZXN0RXZlbnRMaXN0ZW5lciogVGVzdEV2ZW50TGlzdGVuZXJzOjpSZWxlYXNlKFRlc3RF
dmVudExpc3RlbmVyKiBsaXN0ZW5lcikgewotICBpZiAobGlzdGVuZXIgPT0gZGVmYXVsdF9yZXN1
bHRfcHJpbnRlcl8pCi0gICAgZGVmYXVsdF9yZXN1bHRfcHJpbnRlcl8gPSBOVUxMOwotICBlbHNl
IGlmIChsaXN0ZW5lciA9PSBkZWZhdWx0X3htbF9nZW5lcmF0b3JfKQotICAgIGRlZmF1bHRfeG1s
X2dlbmVyYXRvcl8gPSBOVUxMOwotICByZXR1cm4gcmVwZWF0ZXJfLT5SZWxlYXNlKGxpc3RlbmVy
KTsKLX0KLQotLy8gUmV0dXJucyByZXBlYXRlciB0aGF0IGJyb2FkY2FzdHMgdGhlIFRlc3RFdmVu
dExpc3RlbmVyIGV2ZW50cyB0byBhbGwKLS8vIHN1YnNjcmliZXJzLgotVGVzdEV2ZW50TGlzdGVu
ZXIqIFRlc3RFdmVudExpc3RlbmVyczo6cmVwZWF0ZXIoKSB7IHJldHVybiByZXBlYXRlcl87IH0K
LQotLy8gU2V0cyB0aGUgZGVmYXVsdF9yZXN1bHRfcHJpbnRlciBhdHRyaWJ1dGUgdG8gdGhlIHBy
b3ZpZGVkIGxpc3RlbmVyLgotLy8gVGhlIGxpc3RlbmVyIGlzIGFsc28gYWRkZWQgdG8gdGhlIGxp
c3RlbmVyIGxpc3QgYW5kIHByZXZpb3VzCi0vLyBkZWZhdWx0X3Jlc3VsdF9wcmludGVyIGlzIHJl
bW92ZWQgZnJvbSBpdCBhbmQgZGVsZXRlZC4gVGhlIGxpc3RlbmVyIGNhbgotLy8gYWxzbyBiZSBO
VUxMIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIGxpc3QuIERvZXMK
LS8vIG5vdGhpbmcgaWYgdGhlIHByZXZpb3VzIGFuZCB0aGUgY3VycmVudCBsaXN0ZW5lciBvYmpl
Y3RzIGFyZSB0aGUgc2FtZS4KLXZvaWQgVGVzdEV2ZW50TGlzdGVuZXJzOjpTZXREZWZhdWx0UmVz
dWx0UHJpbnRlcihUZXN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpIHsKLSAgaWYgKGRlZmF1bHRf
cmVzdWx0X3ByaW50ZXJfICE9IGxpc3RlbmVyKSB7Ci0gICAgLy8gSXQgaXMgYW4gZXJyb3IgdG8g
cGFzcyB0aGlzIG1ldGhvZCBhIGxpc3RlbmVyIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUKLSAgICAv
LyBsaXN0LgotICAgIGRlbGV0ZSBSZWxlYXNlKGRlZmF1bHRfcmVzdWx0X3ByaW50ZXJfKTsKLSAg
ICBkZWZhdWx0X3Jlc3VsdF9wcmludGVyXyA9IGxpc3RlbmVyOwotICAgIGlmIChsaXN0ZW5lciAh
PSBOVUxMKQotICAgICAgQXBwZW5kKGxpc3RlbmVyKTsKLSAgfQotfQotCi0vLyBTZXRzIHRoZSBk
ZWZhdWx0X3htbF9nZW5lcmF0b3IgYXR0cmlidXRlIHRvIHRoZSBwcm92aWRlZCBsaXN0ZW5lci4g
IFRoZQotLy8gbGlzdGVuZXIgaXMgYWxzbyBhZGRlZCB0byB0aGUgbGlzdGVuZXIgbGlzdCBhbmQg
cHJldmlvdXMKLS8vIGRlZmF1bHRfeG1sX2dlbmVyYXRvciBpcyByZW1vdmVkIGZyb20gaXQgYW5k
IGRlbGV0ZWQuIFRoZSBsaXN0ZW5lciBjYW4KLS8vIGFsc28gYmUgTlVMTCBpbiB3aGljaCBjYXNl
IGl0IHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBsaXN0LiBEb2VzCi0vLyBub3RoaW5nIGlmIHRo
ZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnQgbGlzdGVuZXIgb2JqZWN0cyBhcmUgdGhlIHNhbWUu
Ci12b2lkIFRlc3RFdmVudExpc3RlbmVyczo6U2V0RGVmYXVsdFhtbEdlbmVyYXRvcihUZXN0RXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIpIHsKLSAgaWYgKGRlZmF1bHRfeG1sX2dlbmVyYXRvcl8gIT0g
bGlzdGVuZXIpIHsKLSAgICAvLyBJdCBpcyBhbiBlcnJvciB0byBwYXNzIHRoaXMgbWV0aG9kIGEg
bGlzdGVuZXIgdGhhdCBpcyBhbHJlYWR5IGluIHRoZQotICAgIC8vIGxpc3QuCi0gICAgZGVsZXRl
IFJlbGVhc2UoZGVmYXVsdF94bWxfZ2VuZXJhdG9yXyk7Ci0gICAgZGVmYXVsdF94bWxfZ2VuZXJh
dG9yXyA9IGxpc3RlbmVyOwotICAgIGlmIChsaXN0ZW5lciAhPSBOVUxMKQotICAgICAgQXBwZW5k
KGxpc3RlbmVyKTsKLSAgfQotfQotCi0vLyBDb250cm9scyB3aGV0aGVyIGV2ZW50cyB3aWxsIGJl
IGZvcndhcmRlZCBieSB0aGUgcmVwZWF0ZXIgdG8gdGhlCi0vLyBsaXN0ZW5lcnMgaW4gdGhlIGxp
c3QuCi1ib29sIFRlc3RFdmVudExpc3RlbmVyczo6RXZlbnRGb3J3YXJkaW5nRW5hYmxlZCgpIGNv
bnN0IHsKLSAgcmV0dXJuIHJlcGVhdGVyXy0+Zm9yd2FyZGluZ19lbmFibGVkKCk7Ci19Ci0KLXZv
aWQgVGVzdEV2ZW50TGlzdGVuZXJzOjpTdXBwcmVzc0V2ZW50Rm9yd2FyZGluZygpIHsKLSAgcmVw
ZWF0ZXJfLT5zZXRfZm9yd2FyZGluZ19lbmFibGVkKGZhbHNlKTsKLX0KLQotLy8gY2xhc3MgVW5p
dFRlc3QKLQotLy8gR2V0cyB0aGUgc2luZ2xldG9uIFVuaXRUZXN0IG9iamVjdC4gIFRoZSBmaXJz
dCB0aW1lIHRoaXMgbWV0aG9kIGlzCi0vLyBjYWxsZWQsIGEgVW5pdFRlc3Qgb2JqZWN0IGlzIGNv
bnN0cnVjdGVkIGFuZCByZXR1cm5lZC4gIENvbnNlY3V0aXZlCi0vLyBjYWxscyB3aWxsIHJldHVy
biB0aGUgc2FtZSBvYmplY3QuCi0vLwotLy8gV2UgZG9uJ3QgcHJvdGVjdCB0aGlzIHVuZGVyIG11
dGV4XyBhcyBhIHVzZXIgaXMgbm90IHN1cHBvc2VkIHRvCi0vLyBjYWxsIHRoaXMgYmVmb3JlIG1h
aW4oKSBzdGFydHMsIGZyb20gd2hpY2ggcG9pbnQgb24gdGhlIHJldHVybgotLy8gdmFsdWUgd2ls
bCBuZXZlciBjaGFuZ2UuCi1Vbml0VGVzdCogVW5pdFRlc3Q6OkdldEluc3RhbmNlKCkgewotICAv
LyBXaGVuIGNvbXBpbGVkIHdpdGggTVNWQyA3LjEgaW4gb3B0aW1pemVkIG1vZGUsIGRlc3Ryb3lp
bmcgdGhlCi0gIC8vIFVuaXRUZXN0IG9iamVjdCB1cG9uIGV4aXRpbmcgdGhlIHByb2dyYW0gbWVz
c2VzIHVwIHRoZSBleGl0IGNvZGUsCi0gIC8vIGNhdXNpbmcgc3VjY2Vzc2Z1bCB0ZXN0cyB0byBh
cHBlYXIgZmFpbGVkLiAgV2UgaGF2ZSB0byB1c2UgYQotICAvLyBkaWZmZXJlbnQgaW1wbGVtZW50
YXRpb24gaW4gdGhpcyBjYXNlIHRvIGJ5cGFzcyB0aGUgY29tcGlsZXIgYnVnLgotICAvLyBUaGlz
IGltcGxlbWVudGF0aW9uIG1ha2VzIHRoZSBjb21waWxlciBoYXBweSwgYXQgdGhlIGNvc3Qgb2YK
LSAgLy8gbGVha2luZyB0aGUgVW5pdFRlc3Qgb2JqZWN0LgotCi0gIC8vIENvZGVHZWFyIEMrK0J1
aWxkZXIgaW5zaXN0cyBvbiBhIHB1YmxpYyBkZXN0cnVjdG9yIGZvciB0aGUKLSAgLy8gZGVmYXVs
dCBpbXBsZW1lbnRhdGlvbi4gIFVzZSB0aGlzIGltcGxlbWVudGF0aW9uIHRvIGtlZXAgZ29vZCBP
TwotICAvLyBkZXNpZ24gd2l0aCBwcml2YXRlIGRlc3RydWN0b3IuCi0KLSNpZiAoX01TQ19WRVIg
PT0gMTMxMCAmJiAhZGVmaW5lZChfREVCVUcpKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKLSAg
c3RhdGljIFVuaXRUZXN0KiBjb25zdCBpbnN0YW5jZSA9IG5ldyBVbml0VGVzdDsKLSAgcmV0dXJu
IGluc3RhbmNlOwotI2Vsc2UKLSAgc3RhdGljIFVuaXRUZXN0IGluc3RhbmNlOwotICByZXR1cm4g
Jmluc3RhbmNlOwotI2VuZGlmICAvLyAoX01TQ19WRVIgPT0gMTMxMCAmJiAhZGVmaW5lZChfREVC
VUcpKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKLX0KLQotLy8gR2V0cyB0aGUgbnVtYmVyIG9m
IHN1Y2Nlc3NmdWwgdGVzdCBjYXNlcy4KLWludCBVbml0VGVzdDo6c3VjY2Vzc2Z1bF90ZXN0X2Nh
c2VfY291bnQoKSBjb25zdCB7Ci0gIHJldHVybiBpbXBsKCktPnN1Y2Nlc3NmdWxfdGVzdF9jYXNl
X2NvdW50KCk7Ci19Ci0KLS8vIEdldHMgdGhlIG51bWJlciBvZiBmYWlsZWQgdGVzdCBjYXNlcy4K
LWludCBVbml0VGVzdDo6ZmFpbGVkX3Rlc3RfY2FzZV9jb3VudCgpIGNvbnN0IHsKLSAgcmV0dXJu
IGltcGwoKS0+ZmFpbGVkX3Rlc3RfY2FzZV9jb3VudCgpOwotfQotCi0vLyBHZXRzIHRoZSBudW1i
ZXIgb2YgYWxsIHRlc3QgY2FzZXMuCi1pbnQgVW5pdFRlc3Q6OnRvdGFsX3Rlc3RfY2FzZV9jb3Vu
dCgpIGNvbnN0IHsKLSAgcmV0dXJuIGltcGwoKS0+dG90YWxfdGVzdF9jYXNlX2NvdW50KCk7Ci19
Ci0KLS8vIEdldHMgdGhlIG51bWJlciBvZiBhbGwgdGVzdCBjYXNlcyB0aGF0IGNvbnRhaW4gYXQg
bGVhc3Qgb25lIHRlc3QKLS8vIHRoYXQgc2hvdWxkIHJ1bi4KLWludCBVbml0VGVzdDo6dGVzdF9j
YXNlX3RvX3J1bl9jb3VudCgpIGNvbnN0IHsKLSAgcmV0dXJuIGltcGwoKS0+dGVzdF9jYXNlX3Rv
X3J1bl9jb3VudCgpOwotfQotCi0vLyBHZXRzIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bCB0ZXN0
cy4KLWludCBVbml0VGVzdDo6c3VjY2Vzc2Z1bF90ZXN0X2NvdW50KCkgY29uc3QgewotICByZXR1
cm4gaW1wbCgpLT5zdWNjZXNzZnVsX3Rlc3RfY291bnQoKTsKLX0KLQotLy8gR2V0cyB0aGUgbnVt
YmVyIG9mIGZhaWxlZCB0ZXN0cy4KLWludCBVbml0VGVzdDo6ZmFpbGVkX3Rlc3RfY291bnQoKSBj
b25zdCB7IHJldHVybiBpbXBsKCktPmZhaWxlZF90ZXN0X2NvdW50KCk7IH0KLQotLy8gR2V0cyB0
aGUgbnVtYmVyIG9mIGRpc2FibGVkIHRlc3RzIHRoYXQgd2lsbCBiZSByZXBvcnRlZCBpbiB0aGUg
WE1MIHJlcG9ydC4KLWludCBVbml0VGVzdDo6cmVwb3J0YWJsZV9kaXNhYmxlZF90ZXN0X2NvdW50
KCkgY29uc3QgewotICByZXR1cm4gaW1wbCgpLT5yZXBvcnRhYmxlX2Rpc2FibGVkX3Rlc3RfY291
bnQoKTsKLX0KLQotLy8gR2V0cyB0aGUgbnVtYmVyIG9mIGRpc2FibGVkIHRlc3RzLgotaW50IFVu
aXRUZXN0OjpkaXNhYmxlZF90ZXN0X2NvdW50KCkgY29uc3QgewotICByZXR1cm4gaW1wbCgpLT5k
aXNhYmxlZF90ZXN0X2NvdW50KCk7Ci19Ci0KLS8vIEdldHMgdGhlIG51bWJlciBvZiB0ZXN0cyB0
byBiZSBwcmludGVkIGluIHRoZSBYTUwgcmVwb3J0LgotaW50IFVuaXRUZXN0OjpyZXBvcnRhYmxl
X3Rlc3RfY291bnQoKSBjb25zdCB7Ci0gIHJldHVybiBpbXBsKCktPnJlcG9ydGFibGVfdGVzdF9j
b3VudCgpOwotfQotCi0vLyBHZXRzIHRoZSBudW1iZXIgb2YgYWxsIHRlc3RzLgotaW50IFVuaXRU
ZXN0Ojp0b3RhbF90ZXN0X2NvdW50KCkgY29uc3QgeyByZXR1cm4gaW1wbCgpLT50b3RhbF90ZXN0
X2NvdW50KCk7IH0KLQotLy8gR2V0cyB0aGUgbnVtYmVyIG9mIHRlc3RzIHRoYXQgc2hvdWxkIHJ1
bi4KLWludCBVbml0VGVzdDo6dGVzdF90b19ydW5fY291bnQoKSBjb25zdCB7IHJldHVybiBpbXBs
KCktPnRlc3RfdG9fcnVuX2NvdW50KCk7IH0KLQotLy8gR2V0cyB0aGUgdGltZSBvZiB0aGUgdGVz
dCBwcm9ncmFtIHN0YXJ0LCBpbiBtcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUKLS8vIFVOSVggZXBv
Y2guCi1pbnRlcm5hbDo6VGltZUluTWlsbGlzIFVuaXRUZXN0OjpzdGFydF90aW1lc3RhbXAoKSBj
b25zdCB7Ci0gICAgcmV0dXJuIGltcGwoKS0+c3RhcnRfdGltZXN0YW1wKCk7Ci19Ci0KLS8vIEdl
dHMgdGhlIGVsYXBzZWQgdGltZSwgaW4gbWlsbGlzZWNvbmRzLgotaW50ZXJuYWw6OlRpbWVJbk1p
bGxpcyBVbml0VGVzdDo6ZWxhcHNlZF90aW1lKCkgY29uc3QgewotICByZXR1cm4gaW1wbCgpLT5l
bGFwc2VkX3RpbWUoKTsKLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgdW5pdCB0ZXN0IHBh
c3NlZCAoaS5lLiBhbGwgdGVzdCBjYXNlcyBwYXNzZWQpLgotYm9vbCBVbml0VGVzdDo6UGFzc2Vk
KCkgY29uc3QgeyByZXR1cm4gaW1wbCgpLT5QYXNzZWQoKTsgfQotCi0vLyBSZXR1cm5zIHRydWUg
aWZmIHRoZSB1bml0IHRlc3QgZmFpbGVkIChpLmUuIHNvbWUgdGVzdCBjYXNlIGZhaWxlZAotLy8g
b3Igc29tZXRoaW5nIG91dHNpZGUgb2YgYWxsIHRlc3RzIGZhaWxlZCkuCi1ib29sIFVuaXRUZXN0
OjpGYWlsZWQoKSBjb25zdCB7IHJldHVybiBpbXBsKCktPkZhaWxlZCgpOyB9Ci0KLS8vIEdldHMg
dGhlIGktdGggdGVzdCBjYXNlIGFtb25nIGFsbCB0aGUgdGVzdCBjYXNlcy4gaSBjYW4gcmFuZ2Ug
ZnJvbSAwIHRvCi0vLyB0b3RhbF90ZXN0X2Nhc2VfY291bnQoKSAtIDEuIElmIGkgaXMgbm90IGlu
IHRoYXQgcmFuZ2UsIHJldHVybnMgTlVMTC4KLWNvbnN0IFRlc3RDYXNlKiBVbml0VGVzdDo6R2V0
VGVzdENhc2UoaW50IGkpIGNvbnN0IHsKLSAgcmV0dXJuIGltcGwoKS0+R2V0VGVzdENhc2UoaSk7
Ci19Ci0KLS8vIFJldHVybnMgdGhlIFRlc3RSZXN1bHQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBv
biB0ZXN0IGZhaWx1cmVzIGFuZAotLy8gcHJvcGVydGllcyBsb2dnZWQgb3V0c2lkZSBvZiBpbmRp
dmlkdWFsIHRlc3QgY2FzZXMuCi1jb25zdCBUZXN0UmVzdWx0JiBVbml0VGVzdDo6YWRfaG9jX3Rl
c3RfcmVzdWx0KCkgY29uc3QgewotICByZXR1cm4gKmltcGwoKS0+YWRfaG9jX3Rlc3RfcmVzdWx0
KCk7Ci19Ci0KLS8vIEdldHMgdGhlIGktdGggdGVzdCBjYXNlIGFtb25nIGFsbCB0aGUgdGVzdCBj
YXNlcy4gaSBjYW4gcmFuZ2UgZnJvbSAwIHRvCi0vLyB0b3RhbF90ZXN0X2Nhc2VfY291bnQoKSAt
IDEuIElmIGkgaXMgbm90IGluIHRoYXQgcmFuZ2UsIHJldHVybnMgTlVMTC4KLVRlc3RDYXNlKiBV
bml0VGVzdDo6R2V0TXV0YWJsZVRlc3RDYXNlKGludCBpKSB7Ci0gIHJldHVybiBpbXBsKCktPkdl
dE11dGFibGVUZXN0Q2FzZShpKTsKLX0KLQotLy8gUmV0dXJucyB0aGUgbGlzdCBvZiBldmVudCBs
aXN0ZW5lcnMgdGhhdCBjYW4gYmUgdXNlZCB0byB0cmFjayBldmVudHMKLS8vIGluc2lkZSBHb29n
bGUgVGVzdC4KLVRlc3RFdmVudExpc3RlbmVycyYgVW5pdFRlc3Q6Omxpc3RlbmVycygpIHsKLSAg
cmV0dXJuICppbXBsKCktPmxpc3RlbmVycygpOwotfQotCi0vLyBSZWdpc3RlcnMgYW5kIHJldHVy
bnMgYSBnbG9iYWwgdGVzdCBlbnZpcm9ubWVudC4gIFdoZW4gYSB0ZXN0Ci0vLyBwcm9ncmFtIGlz
IHJ1biwgYWxsIGdsb2JhbCB0ZXN0IGVudmlyb25tZW50cyB3aWxsIGJlIHNldC11cCBpbiB0aGUK
LS8vIG9yZGVyIHRoZXkgd2VyZSByZWdpc3RlcmVkLiAgQWZ0ZXIgYWxsIHRlc3RzIGluIHRoZSBw
cm9ncmFtIGhhdmUKLS8vIGZpbmlzaGVkLCBhbGwgZ2xvYmFsIHRlc3QgZW52aXJvbm1lbnRzIHdp
bGwgYmUgdG9ybi1kb3duIGluIHRoZQotLy8gKnJldmVyc2UqIG9yZGVyIHRoZXkgd2VyZSByZWdp
c3RlcmVkLgotLy8KLS8vIFRoZSBVbml0VGVzdCBvYmplY3QgdGFrZXMgb3duZXJzaGlwIG9mIHRo
ZSBnaXZlbiBlbnZpcm9ubWVudC4KLS8vCi0vLyBXZSBkb24ndCBwcm90ZWN0IHRoaXMgdW5kZXIg
bXV0ZXhfLCBhcyB3ZSBvbmx5IHN1cHBvcnQgY2FsbGluZyBpdAotLy8gZnJvbSB0aGUgbWFpbiB0
aHJlYWQuCi1FbnZpcm9ubWVudCogVW5pdFRlc3Q6OkFkZEVudmlyb25tZW50KEVudmlyb25tZW50
KiBlbnYpIHsKLSAgaWYgKGVudiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQot
ICBpbXBsXy0+ZW52aXJvbm1lbnRzKCkucHVzaF9iYWNrKGVudik7Ci0gIHJldHVybiBlbnY7Ci19
Ci0KLS8vIEFkZHMgYSBUZXN0UGFydFJlc3VsdCB0byB0aGUgY3VycmVudCBUZXN0UmVzdWx0IG9i
amVjdC4gIEFsbCBHb29nbGUgVGVzdAotLy8gYXNzZXJ0aW9uIG1hY3JvcyAoZS5nLiBBU1NFUlRf
VFJVRSwgRVhQRUNUX0VRLCBldGMpIGV2ZW50dWFsbHkgY2FsbAotLy8gdGhpcyB0byByZXBvcnQg
dGhlaXIgcmVzdWx0cy4gIFRoZSB1c2VyIGNvZGUgc2hvdWxkIHVzZSB0aGUKLS8vIGFzc2VydGlv
biBtYWNyb3MgaW5zdGVhZCBvZiBjYWxsaW5nIHRoaXMgZGlyZWN0bHkuCi12b2lkIFVuaXRUZXN0
OjpBZGRUZXN0UGFydFJlc3VsdCgKLSAgICBUZXN0UGFydFJlc3VsdDo6VHlwZSByZXN1bHRfdHlw
ZSwKLSAgICBjb25zdCBjaGFyKiBmaWxlX25hbWUsCi0gICAgaW50IGxpbmVfbnVtYmVyLAotICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBvc19z
dGFja190cmFjZSkgR1RFU1RfTE9DS19FWENMVURFRF8obXV0ZXhfKSB7Ci0gIE1lc3NhZ2UgbXNn
OwotICBtc2cgPDwgbWVzc2FnZTsKLQotICBpbnRlcm5hbDo6TXV0ZXhMb2NrIGxvY2soJm11dGV4
Xyk7Ci0gIGlmIChpbXBsXy0+Z3Rlc3RfdHJhY2Vfc3RhY2soKS5zaXplKCkgPiAwKSB7Ci0gICAg
bXNnIDw8ICJcbiIgPDwgR1RFU1RfTkFNRV8gPDwgIiB0cmFjZToiOwotCi0gICAgZm9yIChpbnQg
aSA9IHN0YXRpY19jYXN0PGludD4oaW1wbF8tPmd0ZXN0X3RyYWNlX3N0YWNrKCkuc2l6ZSgpKTsK
LSAgICAgICAgIGkgPiAwOyAtLWkpIHsKLSAgICAgIGNvbnN0IGludGVybmFsOjpUcmFjZUluZm8m
IHRyYWNlID0gaW1wbF8tPmd0ZXN0X3RyYWNlX3N0YWNrKClbaSAtIDFdOwotICAgICAgbXNnIDw8
ICJcbiIgPDwgaW50ZXJuYWw6OkZvcm1hdEZpbGVMb2NhdGlvbih0cmFjZS5maWxlLCB0cmFjZS5s
aW5lKQotICAgICAgICAgIDw8ICIgIiA8PCB0cmFjZS5tZXNzYWdlOwotICAgIH0KLSAgfQotCi0g
IGlmIChvc19zdGFja190cmFjZS5jX3N0cigpICE9IE5VTEwgJiYgIW9zX3N0YWNrX3RyYWNlLmVt
cHR5KCkpIHsKLSAgICBtc2cgPDwgaW50ZXJuYWw6OmtTdGFja1RyYWNlTWFya2VyIDw8IG9zX3N0
YWNrX3RyYWNlOwotICB9Ci0KLSAgY29uc3QgVGVzdFBhcnRSZXN1bHQgcmVzdWx0ID0KLSAgICBU
ZXN0UGFydFJlc3VsdChyZXN1bHRfdHlwZSwgZmlsZV9uYW1lLCBsaW5lX251bWJlciwKLSAgICAg
ICAgICAgICAgICAgICBtc2cuR2V0U3RyaW5nKCkuY19zdHIoKSk7Ci0gIGltcGxfLT5HZXRUZXN0
UGFydFJlc3VsdFJlcG9ydGVyRm9yQ3VycmVudFRocmVhZCgpLT4KLSAgICAgIFJlcG9ydFRlc3RQ
YXJ0UmVzdWx0KHJlc3VsdCk7Ci0KLSAgaWYgKHJlc3VsdF90eXBlICE9IFRlc3RQYXJ0UmVzdWx0
OjprU3VjY2VzcykgewotICAgIC8vIGd0ZXN0X2JyZWFrX29uX2ZhaWx1cmUgdGFrZXMgcHJlY2Vk
ZW5jZSBvdmVyCi0gICAgLy8gZ3Rlc3RfdGhyb3dfb25fZmFpbHVyZS4gIFRoaXMgYWxsb3dzIGEg
dXNlciB0byBzZXQgdGhlIGxhdHRlcgotICAgIC8vIGluIHRoZSBjb2RlIChwZXJoYXBzIGluIG9y
ZGVyIHRvIHVzZSBHb29nbGUgVGVzdCBhc3NlcnRpb25zCi0gICAgLy8gd2l0aCBhbm90aGVyIHRl
c3RpbmcgZnJhbWV3b3JrKSBhbmQgc3BlY2lmeSB0aGUgZm9ybWVyIG9uIHRoZQotICAgIC8vIGNv
bW1hbmQgbGluZSBmb3IgZGVidWdnaW5nLgotICAgIGlmIChHVEVTVF9GTEFHKGJyZWFrX29uX2Zh
aWx1cmUpKSB7Ci0jaWYgR1RFU1RfT1NfV0lORE9XUyAmJiAhR1RFU1RfT1NfV0lORE9XU19QSE9O
RSAmJiAhR1RFU1RfT1NfV0lORE9XU19SVAotICAgICAgLy8gVXNpbmcgRGVidWdCcmVhayBvbiBX
aW5kb3dzIGFsbG93cyBndGVzdCB0byBzdGlsbCBicmVhayBpbnRvIGEgZGVidWdnZXIKLSAgICAg
IC8vIHdoZW4gYSBmYWlsdXJlIGhhcHBlbnMgYW5kIGJvdGggdGhlIC0tZ3Rlc3RfYnJlYWtfb25f
ZmFpbHVyZSBhbmQKLSAgICAgIC8vIHRoZSAtLWd0ZXN0X2NhdGNoX2V4Y2VwdGlvbnMgZmxhZ3Mg
YXJlIHNwZWNpZmllZC4KLSAgICAgIERlYnVnQnJlYWsoKTsKLSNlbHNlCi0gICAgICAvLyBEZXJl
ZmVyZW5jZSBOVUxMIHRocm91Z2ggYSB2b2xhdGlsZSBwb2ludGVyIHRvIHByZXZlbnQgdGhlIGNv
bXBpbGVyCi0gICAgICAvLyBmcm9tIHJlbW92aW5nLiBXZSB1c2UgdGhpcyByYXRoZXIgdGhhbiBh
Ym9ydCgpIG9yIF9fYnVpbHRpbl90cmFwKCkgZm9yCi0gICAgICAvLyBwb3J0YWJpbGl0eTogU3lt
YmlhbiBkb2Vzbid0IGltcGxlbWVudCBhYm9ydCgpIHdlbGwsIGFuZCBzb21lIGRlYnVnZ2Vycwot
ICAgICAgLy8gZG9uJ3QgY29ycmVjdGx5IHRyYXAgYWJvcnQoKS4KLSAgICAgICpzdGF0aWNfY2Fz
dDx2b2xhdGlsZSBpbnQqPihOVUxMKSA9IDE7Ci0jZW5kaWYgIC8vIEdURVNUX09TX1dJTkRPV1MK
LSAgICB9IGVsc2UgaWYgKEdURVNUX0ZMQUcodGhyb3dfb25fZmFpbHVyZSkpIHsKLSNpZiBHVEVT
VF9IQVNfRVhDRVBUSU9OUwotICAgICAgdGhyb3cgaW50ZXJuYWw6Okdvb2dsZVRlc3RGYWlsdXJl
RXhjZXB0aW9uKHJlc3VsdCk7Ci0jZWxzZQotICAgICAgLy8gV2UgY2Fubm90IGNhbGwgYWJvcnQo
KSBhcyBpdCBnZW5lcmF0ZXMgYSBwb3AtdXAgaW4gZGVidWcgbW9kZQotICAgICAgLy8gdGhhdCBj
YW5ub3QgYmUgc3VwcHJlc3NlZCBpbiBWQyA3LjEgb3IgYmVsb3cuCi0gICAgICBleGl0KDEpOwot
I2VuZGlmCi0gICAgfQotICB9Ci19Ci0KLS8vIEFkZHMgYSBUZXN0UHJvcGVydHkgdG8gdGhlIGN1
cnJlbnQgVGVzdFJlc3VsdCBvYmplY3Qgd2hlbiBpbnZva2VkIGZyb20KLS8vIGluc2lkZSBhIHRl
c3QsIHRvIGN1cnJlbnQgVGVzdENhc2UncyBhZF9ob2NfdGVzdF9yZXN1bHRfIHdoZW4gaW52b2tl
ZAotLy8gZnJvbSBTZXRVcFRlc3RDYXNlIG9yIFRlYXJEb3duVGVzdENhc2UsIG9yIHRvIHRoZSBn
bG9iYWwgcHJvcGVydHkgc2V0Ci0vLyB3aGVuIGludm9rZWQgZWxzZXdoZXJlLiAgSWYgdGhlIHJl
c3VsdCBhbHJlYWR5IGNvbnRhaW5zIGEgcHJvcGVydHkgd2l0aAotLy8gdGhlIHNhbWUga2V5LCB0
aGUgdmFsdWUgd2lsbCBiZSB1cGRhdGVkLgotdm9pZCBVbml0VGVzdDo6UmVjb3JkUHJvcGVydHko
Y29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBpbXBsXy0+UmVjb3JkUHJvcGVydHkoVGVzdFBy
b3BlcnR5KGtleSwgdmFsdWUpKTsKLX0KLQotLy8gUnVucyBhbGwgdGVzdHMgaW4gdGhpcyBVbml0
VGVzdCBvYmplY3QgYW5kIHByaW50cyB0aGUgcmVzdWx0LgotLy8gUmV0dXJucyAwIGlmIHN1Y2Nl
c3NmdWwsIG9yIDEgb3RoZXJ3aXNlLgotLy8KLS8vIFdlIGRvbid0IHByb3RlY3QgdGhpcyB1bmRl
ciBtdXRleF8sIGFzIHdlIG9ubHkgc3VwcG9ydCBjYWxsaW5nIGl0Ci0vLyBmcm9tIHRoZSBtYWlu
IHRocmVhZC4KLWludCBVbml0VGVzdDo6UnVuKCkgewotICAvLyBHb29nbGUgVGVzdCBpbXBsZW1l
bnRzIHRoaXMgcHJvdG9jb2wgZm9yIGNhdGNoaW5nIHRoYXQgYSB0ZXN0Ci0gIC8vIHByb2dyYW0g
ZXhpdHMgYmVmb3JlIHJldHVybmluZyBjb250cm9sIHRvIEdvb2dsZSBUZXN0OgotICAvLwotICAv
LyAgIDEuIFVwb24gc3RhcnQsIEdvb2dsZSBUZXN0IGNyZWF0ZXMgYSBmaWxlIHdob3NlIGFic29s
dXRlIHBhdGgKLSAgLy8gICAgICBpcyBzcGVjaWZpZWQgYnkgdGhlIGVudmlyb25tZW50IHZhcmlh
YmxlCi0gIC8vICAgICAgVEVTVF9QUkVNQVRVUkVfRVhJVF9GSUxFLgotICAvLyAgIDIuIFdoZW4g
R29vZ2xlIFRlc3QgaGFzIGZpbmlzaGVkIGl0cyB3b3JrLCBpdCBkZWxldGVzIHRoZSBmaWxlLgot
ICAvLwotICAvLyBUaGlzIGFsbG93cyBhIHRlc3QgcnVubmVyIHRvIHNldCBURVNUX1BSRU1BVFVS
RV9FWElUX0ZJTEUgYmVmb3JlCi0gIC8vIHJ1bm5pbmcgYSBHb29nbGUtVGVzdC1iYXNlZCB0ZXN0
IHByb2dyYW0gYW5kIGNoZWNrIHRoZSBleGlzdGVuY2UKLSAgLy8gb2YgdGhlIGZpbGUgYXQgdGhl
IGVuZCBvZiB0aGUgdGVzdCBleGVjdXRpb24gdG8gc2VlIGlmIGl0IGhhcwotICAvLyBleGl0ZWQg
cHJlbWF0dXJlbHkuCi0KLSAgLy8gSWYgd2UgYXJlIGluIHRoZSBjaGlsZCBwcm9jZXNzIG9mIGEg
ZGVhdGggdGVzdCwgZG9uJ3QKLSAgLy8gY3JlYXRlL2RlbGV0ZSB0aGUgcHJlbWF0dXJlIGV4aXQg
ZmlsZSwgYXMgZG9pbmcgc28gaXMgdW5uZWNlc3NhcnkKLSAgLy8gYW5kIHdpbGwgY29uZnVzZSB0
aGUgcGFyZW50IHByb2Nlc3MuICBPdGhlcndpc2UsIGNyZWF0ZS9kZWxldGUKLSAgLy8gdGhlIGZp
bGUgdXBvbiBlbnRlcmluZy9sZWF2aW5nIHRoaXMgZnVuY3Rpb24uICBJZiB0aGUgcHJvZ3JhbQot
ICAvLyBzb21laG93IGV4aXRzIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGhhcyBhIGNoYW5jZSB0byBy
ZXR1cm4sIHRoZQotICAvLyBwcmVtYXR1cmUtZXhpdCBmaWxlIHdpbGwgYmUgbGVmdCB1bmRlbGV0
ZWQsIGNhdXNpbmcgYSB0ZXN0IHJ1bm5lcgotICAvLyB0aGF0IHVuZGVyc3RhbmRzIHRoZSBwcmVt
YXR1cmUtZXhpdC1maWxlIHByb3RvY29sIHRvIHJlcG9ydCB0aGUKLSAgLy8gdGVzdCBhcyBoYXZp
bmcgZmFpbGVkLgotICBjb25zdCBpbnRlcm5hbDo6U2NvcGVkUHJlbWF0dXJlRXhpdEZpbGUgcHJl
bWF0dXJlX2V4aXRfZmlsZSgKLSAgICAgIGludGVybmFsOjpwb3NpeDo6R2V0RW52KCJURVNUX1BS
RU1BVFVSRV9FWElUX0ZJTEUiKSk7Ci0KLSAgLy8gQ2FwdHVyZXMgdGhlIHZhbHVlIG9mIEdURVNU
X0ZMQUcoY2F0Y2hfZXhjZXB0aW9ucykuICBUaGlzIHZhbHVlIHdpbGwgYmUKLSAgLy8gdXNlZCBm
b3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwcm9ncmFtLgotICBpbXBsKCktPnNldF9jYXRjaF9leGNl
cHRpb25zKEdURVNUX0ZMQUcoY2F0Y2hfZXhjZXB0aW9ucykpOwotCi0jaWYgR1RFU1RfSEFTX1NF
SAotICAvLyBFaXRoZXIgdGhlIHVzZXIgd2FudHMgR29vZ2xlIFRlc3QgdG8gY2F0Y2ggZXhjZXB0
aW9ucyB0aHJvd24gYnkgdGhlCi0gIC8vIHRlc3RzIG9yIHRoaXMgaXMgZXhlY3V0aW5nIGluIHRo
ZSBjb250ZXh0IG9mIGRlYXRoIHRlc3QgY2hpbGQKLSAgLy8gcHJvY2Vzcy4gSW4gZWl0aGVyIGNh
c2UgdGhlIHVzZXIgZG9lcyBub3Qgd2FudCB0byBzZWUgcG9wLXVwIGRpYWxvZ3MKLSAgLy8gYWJv
dXQgY3Jhc2hlcyAtIHRoZXkgYXJlIGV4cGVjdGVkLgotICBpZiAoaW1wbCgpLT5jYXRjaF9leGNl
cHRpb25zKCkpIHsKLSMgaWYgIUdURVNUX09TX1dJTkRPV1NfTU9CSUxFICYmICFHVEVTVF9PU19X
SU5ET1dTX1BIT05FICYmICFHVEVTVF9PU19XSU5ET1dTX1JUCi0gICAgLy8gU2V0RXJyb3JNb2Rl
IGRvZXNuJ3QgZXhpc3Qgb24gQ0UuCi0gICAgU2V0RXJyb3JNb2RlKFNFTV9GQUlMQ1JJVElDQUxF
UlJPUlMgfCBTRU1fTk9BTElHTk1FTlRGQVVMVEVYQ0VQVCB8Ci0gICAgICAgICAgICAgICAgIFNF
TV9OT0dQRkFVTFRFUlJPUkJPWCB8IFNFTV9OT09QRU5GSUxFRVJST1JCT1gpOwotIyBlbmRpZiAg
Ly8gIUdURVNUX09TX1dJTkRPV1NfTU9CSUxFCi0KLSMgaWYgKGRlZmluZWQoX01TQ19WRVIpIHx8
IEdURVNUX09TX1dJTkRPV1NfTUlOR1cpICYmICFHVEVTVF9PU19XSU5ET1dTX01PQklMRQotICAg
IC8vIERlYXRoIHRlc3QgY2hpbGRyZW4gY2FuIGJlIHRlcm1pbmF0ZWQgd2l0aCBfYWJvcnQoKS4g
IE9uIFdpbmRvd3MsCi0gICAgLy8gX2Fib3J0KCkgY2FuIHNob3cgYSBkaWFsb2cgd2l0aCBhIHdh
cm5pbmcgbWVzc2FnZS4gIFRoaXMgZm9yY2VzIHRoZQotICAgIC8vIGFib3J0IG1lc3NhZ2UgdG8g
Z28gdG8gc3RkZXJyIGluc3RlYWQuCi0gICAgX3NldF9lcnJvcl9tb2RlKF9PVVRfVE9fU1RERVJS
KTsKLSMgZW5kaWYKLQotIyBpZiBfTVNDX1ZFUiA+PSAxNDAwICYmICFHVEVTVF9PU19XSU5ET1dT
X01PQklMRQotICAgIC8vIEluIHRoZSBkZWJ1ZyB2ZXJzaW9uLCBWaXN1YWwgU3R1ZGlvIHBvcHMg
dXAgYSBzZXBhcmF0ZSBkaWFsb2cKLSAgICAvLyBvZmZlcmluZyBhIGNob2ljZSB0byBkZWJ1ZyB0
aGUgYWJvcnRlZCBwcm9ncmFtLiBXZSBuZWVkIHRvIHN1cHByZXNzCi0gICAgLy8gdGhpcyBkaWFs
b2cgb3IgaXQgd2lsbCBwb3AgdXAgZm9yIGV2ZXJ5IEVYUEVDVC9BU1NFUlRfREVBVEggc3RhdGVt
ZW50Ci0gICAgLy8gZXhlY3V0ZWQuIEdvb2dsZSBUZXN0IHdpbGwgbm90aWZ5IHRoZSB1c2VyIG9m
IGFueSB1bmV4cGVjdGVkCi0gICAgLy8gZmFpbHVyZSB2aWEgc3RkZXJyLgotICAgIC8vCi0gICAg
Ly8gVkMrKyBkb2Vzbid0IGRlZmluZSBfc2V0X2Fib3J0X2JlaGF2aW9yKCkgcHJpb3IgdG8gdGhl
IHZlcnNpb24gOC4wLgotICAgIC8vIFVzZXJzIG9mIHByaW9yIFZDIHZlcnNpb25zIHNoYWxsIHN1
ZmZlciB0aGUgYWdvbnkgYW5kIHBhaW4gb2YKLSAgICAvLyBjbGlja2luZyB0aHJvdWdoIHRoZSBj
b3VudGxlc3MgZGVidWcgZGlhbG9ncy4KLSAgICAvLyBUT0RPKHZsYWRsQGdvb2dsZS5jb20pOiBm
aW5kIGEgd2F5IHRvIHN1cHByZXNzIHRoZSBhYm9ydCBkaWFsb2coKSBpbiB0aGUKLSAgICAvLyBk
ZWJ1ZyBtb2RlIHdoZW4gY29tcGlsZWQgd2l0aCBWQyA3LjEgb3IgbG93ZXIuCi0gICAgaWYgKCFH
VEVTVF9GTEFHKGJyZWFrX29uX2ZhaWx1cmUpKQotICAgICAgX3NldF9hYm9ydF9iZWhhdmlvcigK
LSAgICAgICAgICAweDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xl
YXIgdGhlIGZvbGxvd2luZyBmbGFnczoKLSAgICAgICAgICBfV1JJVEVfQUJPUlRfTVNHIHwgX0NB
TExfUkVQT1JURkFVTFQpOyAgLy8gcG9wLXVwIHdpbmRvdywgY29yZSBkdW1wLgotIyBlbmRpZgot
ICB9Ci0jZW5kaWYgIC8vIEdURVNUX0hBU19TRUgKLQotICByZXR1cm4gaW50ZXJuYWw6OkhhbmRs
ZUV4Y2VwdGlvbnNJbk1ldGhvZElmU3VwcG9ydGVkKAotICAgICAgaW1wbCgpLAotICAgICAgJmlu
dGVybmFsOjpVbml0VGVzdEltcGw6OlJ1bkFsbFRlc3RzLAotICAgICAgImF1eGlsaWFyeSB0ZXN0
IGNvZGUgKGVudmlyb25tZW50cyBvciBldmVudCBsaXN0ZW5lcnMpIikgPyAwIDogMTsKLX0KLQot
Ly8gUmV0dXJucyB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiB0aGUgZmlyc3QgVEVTVCgpIG9y
IFRFU1RfRigpIHdhcwotLy8gZXhlY3V0ZWQuCi1jb25zdCBjaGFyKiBVbml0VGVzdDo6b3JpZ2lu
YWxfd29ya2luZ19kaXIoKSBjb25zdCB7Ci0gIHJldHVybiBpbXBsXy0+b3JpZ2luYWxfd29ya2lu
Z19kaXJfLmNfc3RyKCk7Ci19Ci0KLS8vIFJldHVybnMgdGhlIFRlc3RDYXNlIG9iamVjdCBmb3Ig
dGhlIHRlc3QgdGhhdCdzIGN1cnJlbnRseSBydW5uaW5nLAotLy8gb3IgTlVMTCBpZiBubyB0ZXN0
IGlzIHJ1bm5pbmcuCi1jb25zdCBUZXN0Q2FzZSogVW5pdFRlc3Q6OmN1cnJlbnRfdGVzdF9jYXNl
KCkgY29uc3QKLSAgICBHVEVTVF9MT0NLX0VYQ0xVREVEXyhtdXRleF8pIHsKLSAgaW50ZXJuYWw6
Ok11dGV4TG9jayBsb2NrKCZtdXRleF8pOwotICByZXR1cm4gaW1wbF8tPmN1cnJlbnRfdGVzdF9j
YXNlKCk7Ci19Ci0KLS8vIFJldHVybnMgdGhlIFRlc3RJbmZvIG9iamVjdCBmb3IgdGhlIHRlc3Qg
dGhhdCdzIGN1cnJlbnRseSBydW5uaW5nLAotLy8gb3IgTlVMTCBpZiBubyB0ZXN0IGlzIHJ1bm5p
bmcuCi1jb25zdCBUZXN0SW5mbyogVW5pdFRlc3Q6OmN1cnJlbnRfdGVzdF9pbmZvKCkgY29uc3QK
LSAgICBHVEVTVF9MT0NLX0VYQ0xVREVEXyhtdXRleF8pIHsKLSAgaW50ZXJuYWw6Ok11dGV4TG9j
ayBsb2NrKCZtdXRleF8pOwotICByZXR1cm4gaW1wbF8tPmN1cnJlbnRfdGVzdF9pbmZvKCk7Ci19
Ci0KLS8vIFJldHVybnMgdGhlIHJhbmRvbSBzZWVkIHVzZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBj
dXJyZW50IHRlc3QgcnVuLgotaW50IFVuaXRUZXN0OjpyYW5kb21fc2VlZCgpIGNvbnN0IHsgcmV0
dXJuIGltcGxfLT5yYW5kb21fc2VlZCgpOyB9Ci0KLSNpZiBHVEVTVF9IQVNfUEFSQU1fVEVTVAot
Ly8gUmV0dXJucyBQYXJhbWV0ZXJpemVkVGVzdENhc2VSZWdpc3RyeSBvYmplY3QgdXNlZCB0byBr
ZWVwIHRyYWNrIG9mCi0vLyB2YWx1ZS1wYXJhbWV0ZXJpemVkIHRlc3RzIGFuZCBpbnN0YW50aWF0
ZSBhbmQgcmVnaXN0ZXIgdGhlbS4KLWludGVybmFsOjpQYXJhbWV0ZXJpemVkVGVzdENhc2VSZWdp
c3RyeSYKLSAgICBVbml0VGVzdDo6cGFyYW1ldGVyaXplZF90ZXN0X3JlZ2lzdHJ5KCkKLSAgICAg
ICAgR1RFU1RfTE9DS19FWENMVURFRF8obXV0ZXhfKSB7Ci0gIHJldHVybiBpbXBsXy0+cGFyYW1l
dGVyaXplZF90ZXN0X3JlZ2lzdHJ5KCk7Ci19Ci0jZW5kaWYgIC8vIEdURVNUX0hBU19QQVJBTV9U
RVNUCi0KLS8vIENyZWF0ZXMgYW4gZW1wdHkgVW5pdFRlc3QuCi1Vbml0VGVzdDo6VW5pdFRlc3Qo
KSB7Ci0gIGltcGxfID0gbmV3IGludGVybmFsOjpVbml0VGVzdEltcGwodGhpcyk7Ci19Ci0KLS8v
IERlc3RydWN0b3Igb2YgVW5pdFRlc3QuCi1Vbml0VGVzdDo6flVuaXRUZXN0KCkgewotICBkZWxl
dGUgaW1wbF87Ci19Ci0KLS8vIFB1c2hlcyBhIHRyYWNlIGRlZmluZWQgYnkgU0NPUEVEX1RSQUNF
KCkgb24gdG8gdGhlIHBlci10aHJlYWQKLS8vIEdvb2dsZSBUZXN0IHRyYWNlIHN0YWNrLgotdm9p
ZCBVbml0VGVzdDo6UHVzaEdUZXN0VHJhY2UoY29uc3QgaW50ZXJuYWw6OlRyYWNlSW5mbyYgdHJh
Y2UpCi0gICAgR1RFU1RfTE9DS19FWENMVURFRF8obXV0ZXhfKSB7Ci0gIGludGVybmFsOjpNdXRl
eExvY2sgbG9jaygmbXV0ZXhfKTsKLSAgaW1wbF8tPmd0ZXN0X3RyYWNlX3N0YWNrKCkucHVzaF9i
YWNrKHRyYWNlKTsKLX0KLQotLy8gUG9wcyBhIHRyYWNlIGZyb20gdGhlIHBlci10aHJlYWQgR29v
Z2xlIFRlc3QgdHJhY2Ugc3RhY2suCi12b2lkIFVuaXRUZXN0OjpQb3BHVGVzdFRyYWNlKCkKLSAg
ICBHVEVTVF9MT0NLX0VYQ0xVREVEXyhtdXRleF8pIHsKLSAgaW50ZXJuYWw6Ok11dGV4TG9jayBs
b2NrKCZtdXRleF8pOwotICBpbXBsXy0+Z3Rlc3RfdHJhY2Vfc3RhY2soKS5wb3BfYmFjaygpOwot
fQotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi1Vbml0VGVzdEltcGw6OlVuaXRUZXN0SW1wbChV
bml0VGVzdCogcGFyZW50KQotICAgIDogcGFyZW50XyhwYXJlbnQpLAotICAgICAgR1RFU1RfRElT
QUJMRV9NU0NfV0FSTklOR1NfUFVTSF8oNDM1NSAvKiB1c2luZyB0aGlzIGluIGluaXRpYWxpemVy
ICovKQotICAgICAgZGVmYXVsdF9nbG9iYWxfdGVzdF9wYXJ0X3Jlc3VsdF9yZXBvcnRlcl8odGhp
cyksCi0gICAgICBkZWZhdWx0X3Blcl90aHJlYWRfdGVzdF9wYXJ0X3Jlc3VsdF9yZXBvcnRlcl8o
dGhpcyksCi0gICAgICBHVEVTVF9ESVNBQkxFX01TQ19XQVJOSU5HU19QT1BfKCkKLSAgICAgIGds
b2JhbF90ZXN0X3BhcnRfcmVzdWx0X3JlcG90ZXJfKAotICAgICAgICAgICZkZWZhdWx0X2dsb2Jh
bF90ZXN0X3BhcnRfcmVzdWx0X3JlcG9ydGVyXyksCi0gICAgICBwZXJfdGhyZWFkX3Rlc3RfcGFy
dF9yZXN1bHRfcmVwb3J0ZXJfKAotICAgICAgICAgICZkZWZhdWx0X3Blcl90aHJlYWRfdGVzdF9w
YXJ0X3Jlc3VsdF9yZXBvcnRlcl8pLAotI2lmIEdURVNUX0hBU19QQVJBTV9URVNUCi0gICAgICBw
YXJhbWV0ZXJpemVkX3Rlc3RfcmVnaXN0cnlfKCksCi0gICAgICBwYXJhbWV0ZXJpemVkX3Rlc3Rz
X3JlZ2lzdGVyZWRfKGZhbHNlKSwKLSNlbmRpZiAgLy8gR1RFU1RfSEFTX1BBUkFNX1RFU1QKLSAg
ICAgIGxhc3RfZGVhdGhfdGVzdF9jYXNlXygtMSksCi0gICAgICBjdXJyZW50X3Rlc3RfY2FzZV8o
TlVMTCksCi0gICAgICBjdXJyZW50X3Rlc3RfaW5mb18oTlVMTCksCi0gICAgICBhZF9ob2NfdGVz
dF9yZXN1bHRfKCksCi0gICAgICBvc19zdGFja190cmFjZV9nZXR0ZXJfKE5VTEwpLAotICAgICAg
cG9zdF9mbGFnX3BhcnNlX2luaXRfcGVyZm9ybWVkXyhmYWxzZSksCi0gICAgICByYW5kb21fc2Vl
ZF8oMCksICAvLyBXaWxsIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGZsYWcgYmVmb3JlIGZpcnN0IHVz
ZS4KLSAgICAgIHJhbmRvbV8oMCksICAvLyBXaWxsIGJlIHJlc2VlZGVkIGJlZm9yZSBmaXJzdCB1
c2UuCi0gICAgICBzdGFydF90aW1lc3RhbXBfKDApLAotICAgICAgZWxhcHNlZF90aW1lXygwKSwK
LSAgICAgIC8vIFdpbGwgYmUgb3ZlcnJpZGRlbiBieSB0aGUgZmxhZyBiZWZvcmUgZmlyc3QgdXNl
LgotICAgICAgY2F0Y2hfZXhjZXB0aW9uc18oZmFsc2UpIHsKLSAgbGlzdGVuZXJzKCktPlNldERl
ZmF1bHRSZXN1bHRQcmludGVyKG5ldyBQcmV0dHlVbml0VGVzdFJlc3VsdFByaW50ZXIpOwotfQot
Ci1Vbml0VGVzdEltcGw6On5Vbml0VGVzdEltcGwoKSB7Ci0gIC8vIERlbGV0ZXMgZXZlcnkgVGVz
dENhc2UuCi0gIEZvckVhY2godGVzdF9jYXNlc18sIGludGVybmFsOjpEZWxldGU8VGVzdENhc2U+
KTsKLQotICAvLyBEZWxldGVzIGV2ZXJ5IEVudmlyb25tZW50LgotICBGb3JFYWNoKGVudmlyb25t
ZW50c18sIGludGVybmFsOjpEZWxldGU8RW52aXJvbm1lbnQ+KTsKLQotICBkZWxldGUgb3Nfc3Rh
Y2tfdHJhY2VfZ2V0dGVyXzsKLX0KLQotLy8gQWRkcyBhIFRlc3RQcm9wZXJ0eSB0byB0aGUgY3Vy
cmVudCBUZXN0UmVzdWx0IG9iamVjdCB3aGVuIGludm9rZWQgaW4gYQotLy8gY29udGV4dCBvZiBh
IHRlc3QsIHRvIGN1cnJlbnQgdGVzdCBjYXNlJ3MgYWRfaG9jX3Rlc3RfcmVzdWx0IHdoZW4gaW52
b2tlCi0vLyBmcm9tIFNldFVwVGVzdENhc2UvVGVhckRvd25UZXN0Q2FzZSwgb3IgdG8gdGhlIGds
b2JhbCBwcm9wZXJ0eSBzZXQKLS8vIG90aGVyd2lzZS4gIElmIHRoZSByZXN1bHQgYWxyZWFkeSBj
b250YWlucyBhIHByb3BlcnR5IHdpdGggdGhlIHNhbWUga2V5LAotLy8gdGhlIHZhbHVlIHdpbGwg
YmUgdXBkYXRlZC4KLXZvaWQgVW5pdFRlc3RJbXBsOjpSZWNvcmRQcm9wZXJ0eShjb25zdCBUZXN0
UHJvcGVydHkmIHRlc3RfcHJvcGVydHkpIHsKLSAgc3RkOjpzdHJpbmcgeG1sX2VsZW1lbnQ7Ci0g
IFRlc3RSZXN1bHQqIHRlc3RfcmVzdWx0OyAgLy8gVGVzdFJlc3VsdCBhcHByb3ByaWF0ZSBmb3Ig
cHJvcGVydHkgcmVjb3JkaW5nLgotCi0gIGlmIChjdXJyZW50X3Rlc3RfaW5mb18gIT0gTlVMTCkg
ewotICAgIHhtbF9lbGVtZW50ID0gInRlc3RjYXNlIjsKLSAgICB0ZXN0X3Jlc3VsdCA9ICYoY3Vy
cmVudF90ZXN0X2luZm9fLT5yZXN1bHRfKTsKLSAgfSBlbHNlIGlmIChjdXJyZW50X3Rlc3RfY2Fz
ZV8gIT0gTlVMTCkgewotICAgIHhtbF9lbGVtZW50ID0gInRlc3RzdWl0ZSI7Ci0gICAgdGVzdF9y
ZXN1bHQgPSAmKGN1cnJlbnRfdGVzdF9jYXNlXy0+YWRfaG9jX3Rlc3RfcmVzdWx0Xyk7Ci0gIH0g
ZWxzZSB7Ci0gICAgeG1sX2VsZW1lbnQgPSAidGVzdHN1aXRlcyI7Ci0gICAgdGVzdF9yZXN1bHQg
PSAmYWRfaG9jX3Rlc3RfcmVzdWx0XzsKLSAgfQotICB0ZXN0X3Jlc3VsdC0+UmVjb3JkUHJvcGVy
dHkoeG1sX2VsZW1lbnQsIHRlc3RfcHJvcGVydHkpOwotfQotCi0vLyBJbml0aWFsaXplcyBldmVu
dCBsaXN0ZW5lcnMgcGVyZm9ybWluZyBYTUwgb3V0cHV0IGFzIHNwZWNpZmllZCBieQotLy8gVW5p
dFRlc3RPcHRpb25zLiBNdXN0IG5vdCBiZSBjYWxsZWQgYmVmb3JlIEluaXRHb29nbGVUZXN0Lgot
dm9pZCBVbml0VGVzdEltcGw6OkNvbmZpZ3VyZVhtbE91dHB1dCgpIHsKLSAgY29uc3Qgc3RkOjpz
dHJpbmcmIG91dHB1dF9mb3JtYXQgPSBVbml0VGVzdE9wdGlvbnM6OkdldE91dHB1dEZvcm1hdCgp
OwotICBpZiAob3V0cHV0X2Zvcm1hdCA9PSAieG1sIikgewotICAgIGxpc3RlbmVycygpLT5TZXRE
ZWZhdWx0WG1sR2VuZXJhdG9yKG5ldyBYbWxVbml0VGVzdFJlc3VsdFByaW50ZXIoCi0gICAgICAg
IFVuaXRUZXN0T3B0aW9uczo6R2V0QWJzb2x1dGVQYXRoVG9PdXRwdXRGaWxlKCkuY19zdHIoKSkp
OwotICB9IGVsc2UgaWYgKG91dHB1dF9mb3JtYXQgIT0gIiIpIHsKLSAgICBwcmludGYoIldBUk5J
Tkc6IHVucmVjb2duaXplZCBvdXRwdXQgZm9ybWF0IFwiJXNcIiBpZ25vcmVkLlxuIiwKLSAgICAg
ICAgICAgb3V0cHV0X2Zvcm1hdC5jX3N0cigpKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgfQot
fQotCi0jaWYgR1RFU1RfQ0FOX1NUUkVBTV9SRVNVTFRTXwotLy8gSW5pdGlhbGl6ZXMgZXZlbnQg
bGlzdGVuZXJzIGZvciBzdHJlYW1pbmcgdGVzdCByZXN1bHRzIGluIHN0cmluZyBmb3JtLgotLy8g
TXVzdCBub3QgYmUgY2FsbGVkIGJlZm9yZSBJbml0R29vZ2xlVGVzdC4KLXZvaWQgVW5pdFRlc3RJ
bXBsOjpDb25maWd1cmVTdHJlYW1pbmdPdXRwdXQoKSB7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiB0
YXJnZXQgPSBHVEVTVF9GTEFHKHN0cmVhbV9yZXN1bHRfdG8pOwotICBpZiAoIXRhcmdldC5lbXB0
eSgpKSB7Ci0gICAgY29uc3Qgc2l6ZV90IHBvcyA9IHRhcmdldC5maW5kKCc6Jyk7Ci0gICAgaWYg
KHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgbGlzdGVuZXJzKCktPkFwcGVuZChu
ZXcgU3RyZWFtaW5nTGlzdGVuZXIodGFyZ2V0LnN1YnN0cigwLCBwb3MpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnN1YnN0cihwb3MrMSkp
KTsKLSAgICB9IGVsc2UgewotICAgICAgcHJpbnRmKCJXQVJOSU5HOiB1bnJlY29nbml6ZWQgc3Ry
ZWFtaW5nIHRhcmdldCBcIiVzXCIgaWdub3JlZC5cbiIsCi0gICAgICAgICAgICAgdGFyZ2V0LmNf
c3RyKCkpOwotICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgfQotICB9Ci19Ci0jZW5kaWYgIC8v
IEdURVNUX0NBTl9TVFJFQU1fUkVTVUxUU18KLQotLy8gUGVyZm9ybXMgaW5pdGlhbGl6YXRpb24g
ZGVwZW5kZW50IHVwb24gZmxhZyB2YWx1ZXMgb2J0YWluZWQgaW4KLS8vIFBhcnNlR29vZ2xlVGVz
dEZsYWdzT25seS4gIElzIGNhbGxlZCBmcm9tIEluaXRHb29nbGVUZXN0IGFmdGVyIHRoZSBjYWxs
IHRvCi0vLyBQYXJzZUdvb2dsZVRlc3RGbGFnc09ubHkuICBJbiBjYXNlIGEgdXNlciBuZWdsZWN0
cyB0byBjYWxsIEluaXRHb29nbGVUZXN0Ci0vLyB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVk
IGZyb20gUnVuQWxsVGVzdHMuICBTaW5jZSB0aGlzIGZ1bmN0aW9uIGNhbiBiZQotLy8gY2FsbGVk
IG1vcmUgdGhhbiBvbmNlLCBpdCBoYXMgdG8gYmUgaWRlbXBvdGVudC4KLXZvaWQgVW5pdFRlc3RJ
bXBsOjpQb3N0RmxhZ1BhcnNpbmdJbml0KCkgewotICAvLyBFbnN1cmVzIHRoYXQgdGhpcyBmdW5j
dGlvbiBkb2VzIG5vdCBleGVjdXRlIG1vcmUgdGhhbiBvbmNlLgotICBpZiAoIXBvc3RfZmxhZ19w
YXJzZV9pbml0X3BlcmZvcm1lZF8pIHsKLSAgICBwb3N0X2ZsYWdfcGFyc2VfaW5pdF9wZXJmb3Jt
ZWRfID0gdHJ1ZTsKLQotI2lmIGRlZmluZWQoR1RFU1RfQ1VTVE9NX1RFU1RfRVZFTlRfTElTVEVO
RVJfKQotICAgIC8vIFJlZ2lzdGVyIHRvIHNlbmQgbm90aWZpY2F0aW9ucyBhYm91dCBrZXkgcHJv
Y2VzcyBzdGF0ZSBjaGFuZ2VzLgotICAgIGxpc3RlbmVycygpLT5BcHBlbmQobmV3IEdURVNUX0NV
U1RPTV9URVNUX0VWRU5UX0xJU1RFTkVSXygpKTsKLSNlbmRpZiAgLy8gZGVmaW5lZChHVEVTVF9D
VVNUT01fVEVTVF9FVkVOVF9MSVNURU5FUl8pCi0KLSAgICAvLyBSZWdpc3RlcnMgcGFyYW1ldGVy
aXplZCB0ZXN0cy4gVGhpcyBtYWtlcyBwYXJhbWV0ZXJpemVkIHRlc3RzCi0gICAgLy8gYXZhaWxh
YmxlIHRvIHRoZSBVbml0VGVzdCByZWZsZWN0aW9uIEFQSSB3aXRob3V0IHJ1bm5pbmcKLSAgICAv
LyBSVU5fQUxMX1RFU1RTLgotICAgIFJlZ2lzdGVyUGFyYW1ldGVyaXplZFRlc3RzKCk7Ci0KLSAg
ICAvLyBDb25maWd1cmVzIGxpc3RlbmVycyBmb3IgWE1MIG91dHB1dC4gVGhpcyBtYWtlcyBpdCBw
b3NzaWJsZSBmb3IgdXNlcnMKLSAgICAvLyB0byBzaHV0IGRvd24gdGhlIGRlZmF1bHQgWE1MIG91
dHB1dCBiZWZvcmUgaW52b2tpbmcgUlVOX0FMTF9URVNUUy4KLSAgICBDb25maWd1cmVYbWxPdXRw
dXQoKTsKLQotI2lmIEdURVNUX0NBTl9TVFJFQU1fUkVTVUxUU18KLSAgICAvLyBDb25maWd1cmVz
IGxpc3RlbmVycyBmb3Igc3RyZWFtaW5nIHRlc3QgcmVzdWx0cyB0byB0aGUgc3BlY2lmaWVkIHNl
cnZlci4KLSAgICBDb25maWd1cmVTdHJlYW1pbmdPdXRwdXQoKTsKLSNlbmRpZiAgLy8gR1RFU1Rf
Q0FOX1NUUkVBTV9SRVNVTFRTXwotICB9Ci19Ci0KLS8vIEEgcHJlZGljYXRlIHRoYXQgY2hlY2tz
IHRoZSBuYW1lIG9mIGEgVGVzdENhc2UgYWdhaW5zdCBhIGtub3duCi0vLyB2YWx1ZS4KLS8vCi0v
LyBUaGlzIGlzIHVzZWQgZm9yIGltcGxlbWVudGF0aW9uIG9mIHRoZSBVbml0VGVzdCBjbGFzcyBv
bmx5LiAgV2UgcHV0Ci0vLyBpdCBpbiB0aGUgYW5vbnltb3VzIG5hbWVzcGFjZSB0byBwcmV2ZW50
IHBvbGx1dGluZyB0aGUgb3V0ZXIKLS8vIG5hbWVzcGFjZS4KLS8vCi0vLyBUZXN0Q2FzZU5hbWVJ
cyBpcyBjb3B5YWJsZS4KLWNsYXNzIFRlc3RDYXNlTmFtZUlzIHsKLSBwdWJsaWM6Ci0gIC8vIENv
bnN0cnVjdG9yLgotICBleHBsaWNpdCBUZXN0Q2FzZU5hbWVJcyhjb25zdCBzdGQ6OnN0cmluZyYg
bmFtZSkKLSAgICAgIDogbmFtZV8obmFtZSkge30KLQotICAvLyBSZXR1cm5zIHRydWUgaWZmIHRo
ZSBuYW1lIG9mIHRlc3RfY2FzZSBtYXRjaGVzIG5hbWVfLgotICBib29sIG9wZXJhdG9yKCkoY29u
c3QgVGVzdENhc2UqIHRlc3RfY2FzZSkgY29uc3QgewotICAgIHJldHVybiB0ZXN0X2Nhc2UgIT0g
TlVMTCAmJiBzdHJjbXAodGVzdF9jYXNlLT5uYW1lKCksIG5hbWVfLmNfc3RyKCkpID09IDA7Ci0g
IH0KLQotIHByaXZhdGU6Ci0gIHN0ZDo6c3RyaW5nIG5hbWVfOwotfTsKLQotLy8gRmluZHMgYW5k
IHJldHVybnMgYSBUZXN0Q2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiAgSWYgb25lIGRvZXNuJ3QK
LS8vIGV4aXN0LCBjcmVhdGVzIG9uZSBhbmQgcmV0dXJucyBpdC4gIEl0J3MgdGhlIENBTExFUidT
Ci0vLyBSRVNQT05TSUJJTElUWSB0byBlbnN1cmUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkg
Y2FsbGVkIFdIRU4gVEhFCi0vLyBURVNUUyBBUkUgTk9UIFNIVUZGTEVELgotLy8KLS8vIEFyZ3Vt
ZW50czoKLS8vCi0vLyAgIHRlc3RfY2FzZV9uYW1lOiBuYW1lIG9mIHRoZSB0ZXN0IGNhc2UKLS8v
ICAgdHlwZV9wYXJhbTogICAgIHRoZSBuYW1lIG9mIHRoZSB0ZXN0IGNhc2UncyB0eXBlIHBhcmFt
ZXRlciwgb3IgTlVMTCBpZgotLy8gICAgICAgICAgICAgICAgICAgdGhpcyBpcyBub3QgYSB0eXBl
ZCBvciBhIHR5cGUtcGFyYW1ldGVyaXplZCB0ZXN0IGNhc2UuCi0vLyAgIHNldF91cF90YzogICAg
ICBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhlIHRlc3QgY2FzZQotLy8g
ICB0ZWFyX2Rvd25fdGM6ICAgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gdGhhdCB0ZWFycyBkb3du
IHRoZSB0ZXN0IGNhc2UKLVRlc3RDYXNlKiBVbml0VGVzdEltcGw6OkdldFRlc3RDYXNlKGNvbnN0
IGNoYXIqIHRlc3RfY2FzZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogdHlwZV9wYXJhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRlc3Q6OlNldFVwVGVzdENhc2VGdW5jIHNldF91cF90YywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRlc3Q6OlRlYXJEb3duVGVzdENhc2VGdW5jIHRlYXJfZG93
bl90YykgewotICAvLyBDYW4gd2UgZmluZCBhIFRlc3RDYXNlIHdpdGggdGhlIGdpdmVuIG5hbWU/
Ci0gIGNvbnN0IHN0ZDo6dmVjdG9yPFRlc3RDYXNlKj46OmNvbnN0X2l0ZXJhdG9yIHRlc3RfY2Fz
ZSA9Ci0gICAgICBzdGQ6OmZpbmRfaWYodGVzdF9jYXNlc18uYmVnaW4oKSwgdGVzdF9jYXNlc18u
ZW5kKCksCi0gICAgICAgICAgICAgICAgICAgVGVzdENhc2VOYW1lSXModGVzdF9jYXNlX25hbWUp
KTsKLQotICBpZiAodGVzdF9jYXNlICE9IHRlc3RfY2FzZXNfLmVuZCgpKQotICAgIHJldHVybiAq
dGVzdF9jYXNlOwotCi0gIC8vIE5vLiAgTGV0J3MgY3JlYXRlIG9uZS4KLSAgVGVzdENhc2UqIGNv
bnN0IG5ld190ZXN0X2Nhc2UgPQotICAgICAgbmV3IFRlc3RDYXNlKHRlc3RfY2FzZV9uYW1lLCB0
eXBlX3BhcmFtLCBzZXRfdXBfdGMsIHRlYXJfZG93bl90Yyk7Ci0KLSAgLy8gSXMgdGhpcyBhIGRl
YXRoIHRlc3QgY2FzZT8KLSAgaWYgKGludGVybmFsOjpVbml0VGVzdE9wdGlvbnM6Ok1hdGNoZXNG
aWx0ZXIodGVzdF9jYXNlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGtEZWF0aFRlc3RDYXNlRmlsdGVyKSkgewotICAgIC8vIFllcy4gIEluc2Vy
dHMgdGhlIHRlc3QgY2FzZSBhZnRlciB0aGUgbGFzdCBkZWF0aCB0ZXN0IGNhc2UKLSAgICAvLyBk
ZWZpbmVkIHNvIGZhci4gIFRoaXMgb25seSB3b3JrcyB3aGVuIHRoZSB0ZXN0IGNhc2VzIGhhdmVu
J3QKLSAgICAvLyBiZWVuIHNodWZmbGVkLiAgT3RoZXJ3aXNlIHdlIG1heSBlbmQgdXAgcnVubmlu
ZyBhIGRlYXRoIHRlc3QKLSAgICAvLyBhZnRlciBhIG5vbi1kZWF0aCB0ZXN0LgotICAgICsrbGFz
dF9kZWF0aF90ZXN0X2Nhc2VfOwotICAgIHRlc3RfY2FzZXNfLmluc2VydCh0ZXN0X2Nhc2VzXy5i
ZWdpbigpICsgbGFzdF9kZWF0aF90ZXN0X2Nhc2VfLAotICAgICAgICAgICAgICAgICAgICAgICBu
ZXdfdGVzdF9jYXNlKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBOby4gIEFwcGVuZHMgdG8gdGhlIGVu
ZCBvZiB0aGUgbGlzdC4KLSAgICB0ZXN0X2Nhc2VzXy5wdXNoX2JhY2sobmV3X3Rlc3RfY2FzZSk7
Ci0gIH0KLQotICB0ZXN0X2Nhc2VfaW5kaWNlc18ucHVzaF9iYWNrKHN0YXRpY19jYXN0PGludD4o
dGVzdF9jYXNlX2luZGljZXNfLnNpemUoKSkpOwotICByZXR1cm4gbmV3X3Rlc3RfY2FzZTsKLX0K
LQotLy8gSGVscGVycyBmb3Igc2V0dGluZyB1cCAvIHRlYXJpbmcgZG93biB0aGUgZ2l2ZW4gZW52
aXJvbm1lbnQuICBUaGV5Ci0vLyBhcmUgZm9yIHVzZSBpbiB0aGUgRm9yRWFjaCgpIGZ1bmN0aW9u
Lgotc3RhdGljIHZvaWQgU2V0VXBFbnZpcm9ubWVudChFbnZpcm9ubWVudCogZW52KSB7IGVudi0+
U2V0VXAoKTsgfQotc3RhdGljIHZvaWQgVGVhckRvd25FbnZpcm9ubWVudChFbnZpcm9ubWVudCog
ZW52KSB7IGVudi0+VGVhckRvd24oKTsgfQotCi0vLyBSdW5zIGFsbCB0ZXN0cyBpbiB0aGlzIFVu
aXRUZXN0IG9iamVjdCwgcHJpbnRzIHRoZSByZXN1bHQsIGFuZAotLy8gcmV0dXJucyB0cnVlIGlm
IGFsbCB0ZXN0cyBhcmUgc3VjY2Vzc2Z1bC4gIElmIGFueSBleGNlcHRpb24gaXMKLS8vIHRocm93
biBkdXJpbmcgYSB0ZXN0LCB0aGUgdGVzdCBpcyBjb25zaWRlcmVkIHRvIGJlIGZhaWxlZCwgYnV0
IHRoZQotLy8gcmVzdCBvZiB0aGUgdGVzdHMgd2lsbCBzdGlsbCBiZSBydW4uCi0vLwotLy8gV2hl
biBwYXJhbWV0ZXJpemVkIHRlc3RzIGFyZSBlbmFibGVkLCBpdCBleHBhbmRzIGFuZCByZWdpc3Rl
cnMKLS8vIHBhcmFtZXRlcml6ZWQgdGVzdHMgZmlyc3QgaW4gUmVnaXN0ZXJQYXJhbWV0ZXJpemVk
VGVzdHMoKS4KLS8vIEFsbCBvdGhlciBmdW5jdGlvbnMgY2FsbGVkIGZyb20gUnVuQWxsVGVzdHMo
KSBtYXkgc2FmZWx5IGFzc3VtZSB0aGF0Ci0vLyBwYXJhbWV0ZXJpemVkIHRlc3RzIGFyZSByZWFk
eSB0byBiZSBjb3VudGVkIGFuZCBydW4uCi1ib29sIFVuaXRUZXN0SW1wbDo6UnVuQWxsVGVzdHMo
KSB7Ci0gIC8vIE1ha2VzIHN1cmUgSW5pdEdvb2dsZVRlc3QoKSB3YXMgY2FsbGVkLgotICBpZiAo
IUdUZXN0SXNJbml0aWFsaXplZCgpKSB7Ci0gICAgcHJpbnRmKCIlcyIsCi0gICAgICAgICAgICJc
blRoaXMgdGVzdCBwcm9ncmFtIGRpZCBOT1QgY2FsbCA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0
ICIKLSAgICAgICAgICAgImJlZm9yZSBjYWxsaW5nIFJVTl9BTExfVEVTVFMoKS4gIFBsZWFzZSBm
aXggaXQuXG4iKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBEbyBub3QgcnVuIGFu
eSB0ZXN0IGlmIHRoZSAtLWhlbHAgZmxhZyB3YXMgc3BlY2lmaWVkLgotICBpZiAoZ19oZWxwX2Zs
YWcpCi0gICAgcmV0dXJuIHRydWU7Ci0KLSAgLy8gUmVwZWF0cyB0aGUgY2FsbCB0byB0aGUgcG9z
dC1mbGFnIHBhcnNpbmcgaW5pdGlhbGl6YXRpb24gaW4gY2FzZSB0aGUKLSAgLy8gdXNlciBkaWRu
J3QgY2FsbCBJbml0R29vZ2xlVGVzdC4KLSAgUG9zdEZsYWdQYXJzaW5nSW5pdCgpOwotCi0gIC8v
IEV2ZW4gaWYgc2hhcmRpbmcgaXMgbm90IG9uLCB0ZXN0IHJ1bm5lcnMgbWF5IHdhbnQgdG8gdXNl
IHRoZQotICAvLyBHVEVTVF9TSEFSRF9TVEFUVVNfRklMRSB0byBxdWVyeSB3aGV0aGVyIHRoZSB0
ZXN0IHN1cHBvcnRzIHRoZSBzaGFyZGluZwotICAvLyBwcm90b2NvbC4KLSAgaW50ZXJuYWw6Oldy
aXRlVG9TaGFyZFN0YXR1c0ZpbGVJZk5lZWRlZCgpOwotCi0gIC8vIFRydWUgaWZmIHdlIGFyZSBp
biBhIHN1YnByb2Nlc3MgZm9yIHJ1bm5pbmcgYSB0aHJlYWQtc2FmZS1zdHlsZQotICAvLyBkZWF0
aCB0ZXN0LgotICBib29sIGluX3N1YnByb2Nlc3NfZm9yX2RlYXRoX3Rlc3QgPSBmYWxzZTsKLQot
ICBjb25zdCBib29sIHNob3VsZF9zaGFyZCA9IFNob3VsZFNoYXJkKGtUZXN0VG90YWxTaGFyZHMs
IGtUZXN0U2hhcmRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbl9zdWJwcm9jZXNzX2Zvcl9kZWF0aF90ZXN0KTsKLQotICAvLyBDb21wYXJlcyB0aGUgZnVs
bCB0ZXN0IG5hbWVzIHdpdGggdGhlIGZpbHRlciB0byBkZWNpZGUgd2hpY2gKLSAgLy8gdGVzdHMg
dG8gcnVuLgotICBjb25zdCBib29sIGhhc190ZXN0c190b19ydW4gPSBGaWx0ZXJUZXN0cyhzaG91
bGRfc2hhcmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/
IEhPTk9SX1NIQVJESU5HX1BST1RPQ09MCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBJR05PUkVfU0hBUkRJTkdfUFJPVE9DT0wpID4gMDsKLQotICAvLyBM
aXN0cyB0aGUgdGVzdHMgYW5kIGV4aXRzIGlmIHRoZSAtLWd0ZXN0X2xpc3RfdGVzdHMgZmxhZyB3
YXMgc3BlY2lmaWVkLgotICBpZiAoR1RFU1RfRkxBRyhsaXN0X3Rlc3RzKSkgewotICAgIC8vIFRo
aXMgbXVzdCBiZSBjYWxsZWQgKmFmdGVyKiBGaWx0ZXJUZXN0cygpIGhhcyBiZWVuIGNhbGxlZC4K
LSAgICBMaXN0VGVzdHNNYXRjaGluZ0ZpbHRlcigpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0K
LSAgcmFuZG9tX3NlZWRfID0gR1RFU1RfRkxBRyhzaHVmZmxlKSA/Ci0gICAgICBHZXRSYW5kb21T
ZWVkRnJvbUZsYWcoR1RFU1RfRkxBRyhyYW5kb21fc2VlZCkpIDogMDsKLQotICAvLyBUcnVlIGlm
ZiBhdCBsZWFzdCBvbmUgdGVzdCBoYXMgZmFpbGVkLgotICBib29sIGZhaWxlZCA9IGZhbHNlOwot
Ci0gIFRlc3RFdmVudExpc3RlbmVyKiByZXBlYXRlciA9IGxpc3RlbmVycygpLT5yZXBlYXRlcigp
OwotCi0gIHN0YXJ0X3RpbWVzdGFtcF8gPSBHZXRUaW1lSW5NaWxsaXMoKTsKLSAgcmVwZWF0ZXIt
Pk9uVGVzdFByb2dyYW1TdGFydCgqcGFyZW50Xyk7Ci0KLSAgLy8gSG93IG1hbnkgdGltZXMgdG8g
cmVwZWF0IHRoZSB0ZXN0cz8gIFdlIGRvbid0IHdhbnQgdG8gcmVwZWF0IHRoZW0KLSAgLy8gd2hl
biB3ZSBhcmUgaW5zaWRlIHRoZSBzdWJwcm9jZXNzIG9mIGEgZGVhdGggdGVzdC4KLSAgY29uc3Qg
aW50IHJlcGVhdCA9IGluX3N1YnByb2Nlc3NfZm9yX2RlYXRoX3Rlc3QgPyAxIDogR1RFU1RfRkxB
RyhyZXBlYXQpOwotICAvLyBSZXBlYXRzIGZvcmV2ZXIgaWYgdGhlIHJlcGVhdCBjb3VudCBpcyBu
ZWdhdGl2ZS4KLSAgY29uc3QgYm9vbCBmb3JldmVyID0gcmVwZWF0IDwgMDsKLSAgZm9yIChpbnQg
aSA9IDA7IGZvcmV2ZXIgfHwgaSAhPSByZXBlYXQ7IGkrKykgewotICAgIC8vIFdlIHdhbnQgdG8g
cHJlc2VydmUgZmFpbHVyZXMgZ2VuZXJhdGVkIGJ5IGFkLWhvYyB0ZXN0Ci0gICAgLy8gYXNzZXJ0
aW9ucyBleGVjdXRlZCBiZWZvcmUgUlVOX0FMTF9URVNUUygpLgotICAgIENsZWFyTm9uQWRIb2NU
ZXN0UmVzdWx0KCk7Ci0KLSAgICBjb25zdCBUaW1lSW5NaWxsaXMgc3RhcnQgPSBHZXRUaW1lSW5N
aWxsaXMoKTsKLQotICAgIC8vIFNodWZmbGVzIHRlc3QgY2FzZXMgYW5kIHRlc3RzIGlmIHJlcXVl
c3RlZC4KLSAgICBpZiAoaGFzX3Rlc3RzX3RvX3J1biAmJiBHVEVTVF9GTEFHKHNodWZmbGUpKSB7
Ci0gICAgICByYW5kb20oKS0+UmVzZWVkKHJhbmRvbV9zZWVkXyk7Ci0gICAgICAvLyBUaGlzIHNo
b3VsZCBiZSBkb25lIGJlZm9yZSBjYWxsaW5nIE9uVGVzdEl0ZXJhdGlvblN0YXJ0KCksCi0gICAg
ICAvLyBzdWNoIHRoYXQgYSB0ZXN0IGV2ZW50IGxpc3RlbmVyIGNhbiBzZWUgdGhlIGFjdHVhbCB0
ZXN0IG9yZGVyCi0gICAgICAvLyBpbiB0aGUgZXZlbnQuCi0gICAgICBTaHVmZmxlVGVzdHMoKTsK
LSAgICB9Ci0KLSAgICAvLyBUZWxscyB0aGUgdW5pdCB0ZXN0IGV2ZW50IGxpc3RlbmVycyB0aGF0
IHRoZSB0ZXN0cyBhcmUgYWJvdXQgdG8gc3RhcnQuCi0gICAgcmVwZWF0ZXItPk9uVGVzdEl0ZXJh
dGlvblN0YXJ0KCpwYXJlbnRfLCBpKTsKLQotICAgIC8vIFJ1bnMgZWFjaCB0ZXN0IGNhc2UgaWYg
dGhlcmUgaXMgYXQgbGVhc3Qgb25lIHRlc3QgdG8gcnVuLgotICAgIGlmIChoYXNfdGVzdHNfdG9f
cnVuKSB7Ci0gICAgICAvLyBTZXRzIHVwIGFsbCBlbnZpcm9ubWVudHMgYmVmb3JlaGFuZC4KLSAg
ICAgIHJlcGVhdGVyLT5PbkVudmlyb25tZW50c1NldFVwU3RhcnQoKnBhcmVudF8pOwotICAgICAg
Rm9yRWFjaChlbnZpcm9ubWVudHNfLCBTZXRVcEVudmlyb25tZW50KTsKLSAgICAgIHJlcGVhdGVy
LT5PbkVudmlyb25tZW50c1NldFVwRW5kKCpwYXJlbnRfKTsKLQotICAgICAgLy8gUnVucyB0aGUg
dGVzdHMgb25seSBpZiB0aGVyZSB3YXMgbm8gZmF0YWwgZmFpbHVyZSBkdXJpbmcgZ2xvYmFsCi0g
ICAgICAvLyBzZXQtdXAuCi0gICAgICBpZiAoIVRlc3Q6Okhhc0ZhdGFsRmFpbHVyZSgpKSB7Ci0g
ICAgICAgIGZvciAoaW50IHRlc3RfaW5kZXggPSAwOyB0ZXN0X2luZGV4IDwgdG90YWxfdGVzdF9j
YXNlX2NvdW50KCk7Ci0gICAgICAgICAgICAgdGVzdF9pbmRleCsrKSB7Ci0gICAgICAgICAgR2V0
TXV0YWJsZVRlc3RDYXNlKHRlc3RfaW5kZXgpLT5SdW4oKTsKLSAgICAgICAgfQotICAgICAgfQot
Ci0gICAgICAvLyBUZWFycyBkb3duIGFsbCBlbnZpcm9ubWVudHMgaW4gcmV2ZXJzZSBvcmRlciBh
ZnRlcndhcmRzLgotICAgICAgcmVwZWF0ZXItPk9uRW52aXJvbm1lbnRzVGVhckRvd25TdGFydCgq
cGFyZW50Xyk7Ci0gICAgICBzdGQ6OmZvcl9lYWNoKGVudmlyb25tZW50c18ucmJlZ2luKCksIGVu
dmlyb25tZW50c18ucmVuZCgpLAotICAgICAgICAgICAgICAgICAgICBUZWFyRG93bkVudmlyb25t
ZW50KTsKLSAgICAgIHJlcGVhdGVyLT5PbkVudmlyb25tZW50c1RlYXJEb3duRW5kKCpwYXJlbnRf
KTsKLSAgICB9Ci0KLSAgICBlbGFwc2VkX3RpbWVfID0gR2V0VGltZUluTWlsbGlzKCkgLSBzdGFy
dDsKLQotICAgIC8vIFRlbGxzIHRoZSB1bml0IHRlc3QgZXZlbnQgbGlzdGVuZXIgdGhhdCB0aGUg
dGVzdHMgaGF2ZSBqdXN0IGZpbmlzaGVkLgotICAgIHJlcGVhdGVyLT5PblRlc3RJdGVyYXRpb25F
bmQoKnBhcmVudF8sIGkpOwotCi0gICAgLy8gR2V0cyB0aGUgcmVzdWx0IGFuZCBjbGVhcnMgaXQu
Ci0gICAgaWYgKCFQYXNzZWQoKSkgewotICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICAvLyBSZXN0b3JlcyB0aGUgb3JpZ2luYWwgdGVzdCBvcmRlciBhZnRlciB0aGUgaXRlcmF0aW9u
LiAgVGhpcwotICAgIC8vIGFsbG93cyB0aGUgdXNlciB0byBxdWlja2x5IHJlcHJvIGEgZmFpbHVy
ZSB0aGF0IGhhcHBlbnMgaW4gdGhlCi0gICAgLy8gTi10aCBpdGVyYXRpb24gd2l0aG91dCByZXBl
YXRpbmcgdGhlIGZpcnN0IChOIC0gMSkgaXRlcmF0aW9ucy4KLSAgICAvLyBUaGlzIGlzIG5vdCBl
bmNsb3NlZCBpbiAiaWYgKEdURVNUX0ZMQUcoc2h1ZmZsZSkpIHsgLi4uIH0iLCBpbgotICAgIC8v
IGNhc2UgdGhlIHVzZXIgc29tZWhvdyBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiB0aGUgZmxhZyBzb21l
d2hlcmUKLSAgICAvLyAoaXQncyBhbHdheXMgc2FmZSB0byB1bnNodWZmbGUgdGhlIHRlc3RzKS4K
LSAgICBVbnNodWZmbGVUZXN0cygpOwotCi0gICAgaWYgKEdURVNUX0ZMQUcoc2h1ZmZsZSkpIHsK
LSAgICAgIC8vIFBpY2tzIGEgbmV3IHJhbmRvbSBzZWVkIGZvciBlYWNoIGl0ZXJhdGlvbi4KLSAg
ICAgIHJhbmRvbV9zZWVkXyA9IEdldE5leHRSYW5kb21TZWVkKHJhbmRvbV9zZWVkXyk7Ci0gICAg
fQotICB9Ci0KLSAgcmVwZWF0ZXItPk9uVGVzdFByb2dyYW1FbmQoKnBhcmVudF8pOwotCi0gIHJl
dHVybiAhZmFpbGVkOwotfQotCi0vLyBSZWFkcyB0aGUgR1RFU1RfU0hBUkRfU1RBVFVTX0ZJTEUg
ZW52aXJvbm1lbnQgdmFyaWFibGUsIGFuZCBjcmVhdGVzIHRoZSBmaWxlCi0vLyBpZiB0aGUgdmFy
aWFibGUgaXMgcHJlc2VudC4gSWYgYSBmaWxlIGFscmVhZHkgZXhpc3RzIGF0IHRoaXMgbG9jYXRp
b24sIHRoaXMKLS8vIGZ1bmN0aW9uIHdpbGwgd3JpdGUgb3ZlciBpdC4gSWYgdGhlIHZhcmlhYmxl
IGlzIHByZXNlbnQsIGJ1dCB0aGUgZmlsZSBjYW5ub3QKLS8vIGJlIGNyZWF0ZWQsIHByaW50cyBh
biBlcnJvciBhbmQgZXhpdHMuCi12b2lkIFdyaXRlVG9TaGFyZFN0YXR1c0ZpbGVJZk5lZWRlZCgp
IHsKLSAgY29uc3QgY2hhciogY29uc3QgdGVzdF9zaGFyZF9maWxlID0gcG9zaXg6OkdldEVudihr
VGVzdFNoYXJkU3RhdHVzRmlsZSk7Ci0gIGlmICh0ZXN0X3NoYXJkX2ZpbGUgIT0gTlVMTCkgewot
ICAgIEZJTEUqIGNvbnN0IGZpbGUgPSBwb3NpeDo6Rk9wZW4odGVzdF9zaGFyZF9maWxlLCAidyIp
OwotICAgIGlmIChmaWxlID09IE5VTEwpIHsKLSAgICAgIENvbG9yZWRQcmludGYoQ09MT1JfUkVE
LAotICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IHdyaXRlIHRvIHRoZSB0ZXN0IHNoYXJk
IHN0YXR1cyBmaWxlIFwiJXNcIiAiCi0gICAgICAgICAgICAgICAgICAgICJzcGVjaWZpZWQgYnkg
dGhlICVzIGVudmlyb25tZW50IHZhcmlhYmxlLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgdGVz
dF9zaGFyZF9maWxlLCBrVGVzdFNoYXJkU3RhdHVzRmlsZSk7Ci0gICAgICBmZmx1c2goc3Rkb3V0
KTsKLSAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0gICAgZmNsb3NlKGZpbGUpOwot
ICB9Ci19Ci0KLS8vIENoZWNrcyB3aGV0aGVyIHNoYXJkaW5nIGlzIGVuYWJsZWQgYnkgZXhhbWlu
aW5nIHRoZSByZWxldmFudAotLy8gZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWVzLiBJZiB0aGUg
dmFyaWFibGVzIGFyZSBwcmVzZW50LAotLy8gYnV0IGluY29uc2lzdGVudCAoaS5lLiwgc2hhcmRf
aW5kZXggPj0gdG90YWxfc2hhcmRzKSwgcHJpbnRzCi0vLyBhbiBlcnJvciBhbmQgZXhpdHMuIElm
IGluX3N1YnByb2Nlc3NfZm9yX2RlYXRoX3Rlc3QsIHNoYXJkaW5nIGlzCi0vLyBkaXNhYmxlZCBi
ZWNhdXNlIGl0IG11c3Qgb25seSBiZSBhcHBsaWVkIHRvIHRoZSBvcmlnaW5hbCB0ZXN0Ci0vLyBw
cm9jZXNzLiBPdGhlcndpc2UsIHdlIGNvdWxkIGZpbHRlciBvdXQgZGVhdGggdGVzdHMgd2UgaW50
ZW5kZWQgdG8gZXhlY3V0ZS4KLWJvb2wgU2hvdWxkU2hhcmQoY29uc3QgY2hhciogdG90YWxfc2hh
cmRzX2VudiwKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogc2hhcmRfaW5kZXhfZW52LAot
ICAgICAgICAgICAgICAgICBib29sIGluX3N1YnByb2Nlc3NfZm9yX2RlYXRoX3Rlc3QpIHsKLSAg
aWYgKGluX3N1YnByb2Nlc3NfZm9yX2RlYXRoX3Rlc3QpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0g
IH0KLQotICBjb25zdCBJbnQzMiB0b3RhbF9zaGFyZHMgPSBJbnQzMkZyb21FbnZPckRpZSh0b3Rh
bF9zaGFyZHNfZW52LCAtMSk7Ci0gIGNvbnN0IEludDMyIHNoYXJkX2luZGV4ID0gSW50MzJGcm9t
RW52T3JEaWUoc2hhcmRfaW5kZXhfZW52LCAtMSk7Ci0KLSAgaWYgKHRvdGFsX3NoYXJkcyA9PSAt
MSAmJiBzaGFyZF9pbmRleCA9PSAtMSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIGlm
ICh0b3RhbF9zaGFyZHMgPT0gLTEgJiYgc2hhcmRfaW5kZXggIT0gLTEpIHsKLSAgICBjb25zdCBN
ZXNzYWdlIG1zZyA9IE1lc3NhZ2UoKQotICAgICAgPDwgIkludmFsaWQgZW52aXJvbm1lbnQgdmFy
aWFibGVzOiB5b3UgaGF2ZSAiCi0gICAgICA8PCBrVGVzdFNoYXJkSW5kZXggPDwgIiA9ICIgPDwg
c2hhcmRfaW5kZXgKLSAgICAgIDw8ICIsIGJ1dCBoYXZlIGxlZnQgIiA8PCBrVGVzdFRvdGFsU2hh
cmRzIDw8ICIgdW5zZXQuXG4iOwotICAgIENvbG9yZWRQcmludGYoQ09MT1JfUkVELCBtc2cuR2V0
U3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgZXhpdChFWElUX0ZB
SUxVUkUpOwotICB9IGVsc2UgaWYgKHRvdGFsX3NoYXJkcyAhPSAtMSAmJiBzaGFyZF9pbmRleCA9
PSAtMSkgewotICAgIGNvbnN0IE1lc3NhZ2UgbXNnID0gTWVzc2FnZSgpCi0gICAgICA8PCAiSW52
YWxpZCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6IHlvdSBoYXZlICIKLSAgICAgIDw8IGtUZXN0VG90
YWxTaGFyZHMgPDwgIiA9ICIgPDwgdG90YWxfc2hhcmRzCi0gICAgICA8PCAiLCBidXQgaGF2ZSBs
ZWZ0ICIgPDwga1Rlc3RTaGFyZEluZGV4IDw8ICIgdW5zZXQuXG4iOwotICAgIENvbG9yZWRQcmlu
dGYoQ09MT1JfUkVELCBtc2cuR2V0U3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgZmZsdXNoKHN0ZG91
dCk7Ci0gICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICB9IGVsc2UgaWYgKHNoYXJkX2luZGV4IDwg
MCB8fCBzaGFyZF9pbmRleCA+PSB0b3RhbF9zaGFyZHMpIHsKLSAgICBjb25zdCBNZXNzYWdlIG1z
ZyA9IE1lc3NhZ2UoKQotICAgICAgPDwgIkludmFsaWQgZW52aXJvbm1lbnQgdmFyaWFibGVzOiB3
ZSByZXF1aXJlIDAgPD0gIgotICAgICAgPDwga1Rlc3RTaGFyZEluZGV4IDw8ICIgPCAiIDw8IGtU
ZXN0VG90YWxTaGFyZHMKLSAgICAgIDw8ICIsIGJ1dCB5b3UgaGF2ZSAiIDw8IGtUZXN0U2hhcmRJ
bmRleCA8PCAiPSIgPDwgc2hhcmRfaW5kZXgKLSAgICAgIDw8ICIsICIgPDwga1Rlc3RUb3RhbFNo
YXJkcyA8PCAiPSIgPDwgdG90YWxfc2hhcmRzIDw8ICIuXG4iOwotICAgIENvbG9yZWRQcmludGYo
Q09MT1JfUkVELCBtc2cuR2V0U3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgZmZsdXNoKHN0ZG91dCk7
Ci0gICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICB9Ci0KLSAgcmV0dXJuIHRvdGFsX3NoYXJkcyA+
IDE7Ci19Ci0KLS8vIFBhcnNlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdmFyIGFzIGFuIElu
dDMyLiBJZiBpdCBpcyB1bnNldCwKLS8vIHJldHVybnMgZGVmYXVsdF92YWwuIElmIGl0IGlzIG5v
dCBhbiBJbnQzMiwgcHJpbnRzIGFuIGVycm9yCi0vLyBhbmQgYWJvcnRzLgotSW50MzIgSW50MzJG
cm9tRW52T3JEaWUoY29uc3QgY2hhciogdmFyLCBJbnQzMiBkZWZhdWx0X3ZhbCkgewotICBjb25z
dCBjaGFyKiBzdHJfdmFsID0gcG9zaXg6OkdldEVudih2YXIpOwotICBpZiAoc3RyX3ZhbCA9PSBO
VUxMKSB7Ci0gICAgcmV0dXJuIGRlZmF1bHRfdmFsOwotICB9Ci0KLSAgSW50MzIgcmVzdWx0Owot
ICBpZiAoIVBhcnNlSW50MzIoTWVzc2FnZSgpIDw8ICJUaGUgdmFsdWUgb2YgZW52aXJvbm1lbnQg
dmFyaWFibGUgIiA8PCB2YXIsCi0gICAgICAgICAgICAgICAgICBzdHJfdmFsLCAmcmVzdWx0KSkg
ewotICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0v
LyBHaXZlbiB0aGUgdG90YWwgbnVtYmVyIG9mIHNoYXJkcywgdGhlIHNoYXJkIGluZGV4LCBhbmQg
dGhlIHRlc3QgaWQsCi0vLyByZXR1cm5zIHRydWUgaWZmIHRoZSB0ZXN0IHNob3VsZCBiZSBydW4g
b24gdGhpcyBzaGFyZC4gVGhlIHRlc3QgaWQgaXMKLS8vIHNvbWUgYXJiaXRyYXJ5IGJ1dCB1bmlx
dWUgbm9uLW5lZ2F0aXZlIGludGVnZXIgYXNzaWduZWQgdG8gZWFjaCB0ZXN0Ci0vLyBtZXRob2Qu
IEFzc3VtZXMgdGhhdCAwIDw9IHNoYXJkX2luZGV4IDwgdG90YWxfc2hhcmRzLgotYm9vbCBTaG91
bGRSdW5UZXN0T25TaGFyZChpbnQgdG90YWxfc2hhcmRzLCBpbnQgc2hhcmRfaW5kZXgsIGludCB0
ZXN0X2lkKSB7Ci0gIHJldHVybiAodGVzdF9pZCAlIHRvdGFsX3NoYXJkcykgPT0gc2hhcmRfaW5k
ZXg7Ci19Ci0KLS8vIENvbXBhcmVzIHRoZSBuYW1lIG9mIGVhY2ggdGVzdCB3aXRoIHRoZSB1c2Vy
LXNwZWNpZmllZCBmaWx0ZXIgdG8KLS8vIGRlY2lkZSB3aGV0aGVyIHRoZSB0ZXN0IHNob3VsZCBi
ZSBydW4sIHRoZW4gcmVjb3JkcyB0aGUgcmVzdWx0IGluCi0vLyBlYWNoIFRlc3RDYXNlIGFuZCBU
ZXN0SW5mbyBvYmplY3QuCi0vLyBJZiBzaGFyZF90ZXN0cyA9PSB0cnVlLCBmdXJ0aGVyIGZpbHRl
cnMgdGVzdHMgYmFzZWQgb24gc2hhcmRpbmcKLS8vIHZhcmlhYmxlcyBpbiB0aGUgZW52aXJvbm1l
bnQgLSBzZWUKLS8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGV0ZXN0L3dpa2kvR29v
Z2xlVGVzdEFkdmFuY2VkR3VpZGUuCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGVzdHMgdGhh
dCBzaG91bGQgcnVuLgotaW50IFVuaXRUZXN0SW1wbDo6RmlsdGVyVGVzdHMoUmVhY3Rpb25Ub1No
YXJkaW5nIHNoYXJkX3Rlc3RzKSB7Ci0gIGNvbnN0IEludDMyIHRvdGFsX3NoYXJkcyA9IHNoYXJk
X3Rlc3RzID09IEhPTk9SX1NIQVJESU5HX1BST1RPQ09MID8KLSAgICAgIEludDMyRnJvbUVudk9y
RGllKGtUZXN0VG90YWxTaGFyZHMsIC0xKSA6IC0xOwotICBjb25zdCBJbnQzMiBzaGFyZF9pbmRl
eCA9IHNoYXJkX3Rlc3RzID09IEhPTk9SX1NIQVJESU5HX1BST1RPQ09MID8KLSAgICAgIEludDMy
RnJvbUVudk9yRGllKGtUZXN0U2hhcmRJbmRleCwgLTEpIDogLTE7Ci0KLSAgLy8gbnVtX3J1bm5h
YmxlX3Rlc3RzIGFyZSB0aGUgbnVtYmVyIG9mIHRlc3RzIHRoYXQgd2lsbAotICAvLyBydW4gYWNy
b3NzIGFsbCBzaGFyZHMgKGkuZS4sIG1hdGNoIGZpbHRlciBhbmQgYXJlIG5vdCBkaXNhYmxlZCku
Ci0gIC8vIG51bV9zZWxlY3RlZF90ZXN0cyBhcmUgdGhlIG51bWJlciBvZiB0ZXN0cyB0byBiZSBy
dW4gb24KLSAgLy8gdGhpcyBzaGFyZC4KLSAgaW50IG51bV9ydW5uYWJsZV90ZXN0cyA9IDA7Ci0g
IGludCBudW1fc2VsZWN0ZWRfdGVzdHMgPSAwOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRl
c3RfY2FzZXNfLnNpemUoKTsgaSsrKSB7Ci0gICAgVGVzdENhc2UqIGNvbnN0IHRlc3RfY2FzZSA9
IHRlc3RfY2FzZXNfW2ldOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ0ZXN0X2Nhc2VfbmFtZSA9
IHRlc3RfY2FzZS0+bmFtZSgpOwotICAgIHRlc3RfY2FzZS0+c2V0X3Nob3VsZF9ydW4oZmFsc2Up
OwotCi0gICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB0ZXN0X2Nhc2UtPnRlc3RfaW5mb19saXN0
KCkuc2l6ZSgpOyBqKyspIHsKLSAgICAgIFRlc3RJbmZvKiBjb25zdCB0ZXN0X2luZm8gPSB0ZXN0
X2Nhc2UtPnRlc3RfaW5mb19saXN0KClbal07Ci0gICAgICBjb25zdCBzdGQ6OnN0cmluZyB0ZXN0
X25hbWUodGVzdF9pbmZvLT5uYW1lKCkpOwotICAgICAgLy8gQSB0ZXN0IGlzIGRpc2FibGVkIGlm
IHRlc3QgY2FzZSBuYW1lIG9yIHRlc3QgbmFtZSBtYXRjaGVzCi0gICAgICAvLyBrRGlzYWJsZVRl
c3RGaWx0ZXIuCi0gICAgICBjb25zdCBib29sIGlzX2Rpc2FibGVkID0KLSAgICAgICAgICBpbnRl
cm5hbDo6VW5pdFRlc3RPcHRpb25zOjpNYXRjaGVzRmlsdGVyKHRlc3RfY2FzZV9uYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0Rpc2FibGVU
ZXN0RmlsdGVyKSB8fAotICAgICAgICAgIGludGVybmFsOjpVbml0VGVzdE9wdGlvbnM6Ok1hdGNo
ZXNGaWx0ZXIodGVzdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga0Rpc2FibGVUZXN0RmlsdGVyKTsKLSAgICAgIHRlc3RfaW5mby0+aXNf
ZGlzYWJsZWRfID0gaXNfZGlzYWJsZWQ7Ci0KLSAgICAgIGNvbnN0IGJvb2wgbWF0Y2hlc19maWx0
ZXIgPQotICAgICAgICAgIGludGVybmFsOjpVbml0VGVzdE9wdGlvbnM6OkZpbHRlck1hdGNoZXNU
ZXN0KHRlc3RfY2FzZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlc3RfbmFtZSk7Ci0gICAgICB0ZXN0X2luZm8tPm1hdGNoZXNf
ZmlsdGVyXyA9IG1hdGNoZXNfZmlsdGVyOwotCi0gICAgICBjb25zdCBib29sIGlzX3J1bm5hYmxl
ID0KLSAgICAgICAgICAoR1RFU1RfRkxBRyhhbHNvX3J1bl9kaXNhYmxlZF90ZXN0cykgfHwgIWlz
X2Rpc2FibGVkKSAmJgotICAgICAgICAgIG1hdGNoZXNfZmlsdGVyOwotCi0gICAgICBjb25zdCBi
b29sIGlzX3NlbGVjdGVkID0gaXNfcnVubmFibGUgJiYKLSAgICAgICAgICAoc2hhcmRfdGVzdHMg
PT0gSUdOT1JFX1NIQVJESU5HX1BST1RPQ09MIHx8Ci0gICAgICAgICAgIFNob3VsZFJ1blRlc3RP
blNoYXJkKHRvdGFsX3NoYXJkcywgc2hhcmRfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bV9ydW5uYWJsZV90ZXN0cykpOwotCi0gICAgICBudW1fcnVubmFibGVfdGVz
dHMgKz0gaXNfcnVubmFibGU7Ci0gICAgICBudW1fc2VsZWN0ZWRfdGVzdHMgKz0gaXNfc2VsZWN0
ZWQ7Ci0KLSAgICAgIHRlc3RfaW5mby0+c2hvdWxkX3J1bl8gPSBpc19zZWxlY3RlZDsKLSAgICAg
IHRlc3RfY2FzZS0+c2V0X3Nob3VsZF9ydW4odGVzdF9jYXNlLT5zaG91bGRfcnVuKCkgfHwgaXNf
c2VsZWN0ZWQpOwotICAgIH0KLSAgfQotICByZXR1cm4gbnVtX3NlbGVjdGVkX3Rlc3RzOwotfQot
Ci0vLyBQcmludHMgdGhlIGdpdmVuIEMtc3RyaW5nIG9uIGEgc2luZ2xlIGxpbmUgYnkgcmVwbGFj
aW5nIGFsbCAnXG4nCi0vLyBjaGFyYWN0ZXJzIHdpdGggc3RyaW5nICJcXG4iLiAgSWYgdGhlIG91
dHB1dCB0YWtlcyBtb3JlIHRoYW4KLS8vIG1heF9sZW5ndGggY2hhcmFjdGVycywgb25seSBwcmlu
dHMgdGhlIGZpcnN0IG1heF9sZW5ndGggY2hhcmFjdGVycwotLy8gYW5kICIuLi4iLgotc3RhdGlj
IHZvaWQgUHJpbnRPbk9uZUxpbmUoY29uc3QgY2hhciogc3RyLCBpbnQgbWF4X2xlbmd0aCkgewot
ICBpZiAoc3RyICE9IE5VTEwpIHsKLSAgICBmb3IgKGludCBpID0gMDsgKnN0ciAhPSAnXDAnOyAr
K3N0cikgewotICAgICAgaWYgKGkgPj0gbWF4X2xlbmd0aCkgewotICAgICAgICBwcmludGYoIi4u
LiIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmICgqc3RyID09ICdcbicpIHsK
LSAgICAgICAgcHJpbnRmKCJcXG4iKTsKLSAgICAgICAgaSArPSAyOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgcHJpbnRmKCIlYyIsICpzdHIpOwotICAgICAgICArK2k7Ci0gICAgICB9Ci0gICAg
fQotICB9Ci19Ci0KLS8vIFByaW50cyB0aGUgbmFtZXMgb2YgdGhlIHRlc3RzIG1hdGNoaW5nIHRo
ZSB1c2VyLXNwZWNpZmllZCBmaWx0ZXIgZmxhZy4KLXZvaWQgVW5pdFRlc3RJbXBsOjpMaXN0VGVz
dHNNYXRjaGluZ0ZpbHRlcigpIHsKLSAgLy8gUHJpbnQgYXQgbW9zdCB0aGlzIG1hbnkgY2hhcmFj
dGVycyBmb3IgZWFjaCB0eXBlL3ZhbHVlIHBhcmFtZXRlci4KLSAgY29uc3QgaW50IGtNYXhQYXJh
bUxlbmd0aCA9IDI1MDsKLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRlc3RfY2FzZXNfLnNp
emUoKTsgaSsrKSB7Ci0gICAgY29uc3QgVGVzdENhc2UqIGNvbnN0IHRlc3RfY2FzZSA9IHRlc3Rf
Y2FzZXNfW2ldOwotICAgIGJvb2wgcHJpbnRlZF90ZXN0X2Nhc2VfbmFtZSA9IGZhbHNlOwotCi0g
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB0ZXN0X2Nhc2UtPnRlc3RfaW5mb19saXN0KCkuc2l6
ZSgpOyBqKyspIHsKLSAgICAgIGNvbnN0IFRlc3RJbmZvKiBjb25zdCB0ZXN0X2luZm8gPQotICAg
ICAgICAgIHRlc3RfY2FzZS0+dGVzdF9pbmZvX2xpc3QoKVtqXTsKLSAgICAgIGlmICh0ZXN0X2lu
Zm8tPm1hdGNoZXNfZmlsdGVyXykgewotICAgICAgICBpZiAoIXByaW50ZWRfdGVzdF9jYXNlX25h
bWUpIHsKLSAgICAgICAgICBwcmludGVkX3Rlc3RfY2FzZV9uYW1lID0gdHJ1ZTsKLSAgICAgICAg
ICBwcmludGYoIiVzLiIsIHRlc3RfY2FzZS0+bmFtZSgpKTsKLSAgICAgICAgICBpZiAodGVzdF9j
YXNlLT50eXBlX3BhcmFtKCkgIT0gTlVMTCkgewotICAgICAgICAgICAgcHJpbnRmKCIgICMgJXMg
PSAiLCBrVHlwZVBhcmFtTGFiZWwpOwotICAgICAgICAgICAgLy8gV2UgcHJpbnQgdGhlIHR5cGUg
cGFyYW1ldGVyIG9uIGEgc2luZ2xlIGxpbmUgdG8gbWFrZQotICAgICAgICAgICAgLy8gdGhlIG91
dHB1dCBlYXN5IHRvIHBhcnNlIGJ5IGEgcHJvZ3JhbS4KLSAgICAgICAgICAgIFByaW50T25PbmVM
aW5lKHRlc3RfY2FzZS0+dHlwZV9wYXJhbSgpLCBrTWF4UGFyYW1MZW5ndGgpOwotICAgICAgICAg
IH0KLSAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCIg
ICVzIiwgdGVzdF9pbmZvLT5uYW1lKCkpOwotICAgICAgICBpZiAodGVzdF9pbmZvLT52YWx1ZV9w
YXJhbSgpICE9IE5VTEwpIHsKLSAgICAgICAgICBwcmludGYoIiAgIyAlcyA9ICIsIGtWYWx1ZVBh
cmFtTGFiZWwpOwotICAgICAgICAgIC8vIFdlIHByaW50IHRoZSB2YWx1ZSBwYXJhbWV0ZXIgb24g
YSBzaW5nbGUgbGluZSB0byBtYWtlIHRoZQotICAgICAgICAgIC8vIG91dHB1dCBlYXN5IHRvIHBh
cnNlIGJ5IGEgcHJvZ3JhbS4KLSAgICAgICAgICBQcmludE9uT25lTGluZSh0ZXN0X2luZm8tPnZh
bHVlX3BhcmFtKCksIGtNYXhQYXJhbUxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRm
KCJcbiIpOwotICAgICAgfQotICAgIH0KLSAgfQotICBmZmx1c2goc3Rkb3V0KTsKLX0KLQotLy8g
U2V0cyB0aGUgT1Mgc3RhY2sgdHJhY2UgZ2V0dGVyLgotLy8KLS8vIERvZXMgbm90aGluZyBpZiB0
aGUgaW5wdXQgYW5kIHRoZSBjdXJyZW50IE9TIHN0YWNrIHRyYWNlIGdldHRlciBhcmUKLS8vIHRo
ZSBzYW1lOyBvdGhlcndpc2UsIGRlbGV0ZXMgdGhlIG9sZCBnZXR0ZXIgYW5kIG1ha2VzIHRoZSBp
bnB1dCB0aGUKLS8vIGN1cnJlbnQgZ2V0dGVyLgotdm9pZCBVbml0VGVzdEltcGw6OnNldF9vc19z
dGFja190cmFjZV9nZXR0ZXIoCi0gICAgT3NTdGFja1RyYWNlR2V0dGVySW50ZXJmYWNlKiBnZXR0
ZXIpIHsKLSAgaWYgKG9zX3N0YWNrX3RyYWNlX2dldHRlcl8gIT0gZ2V0dGVyKSB7Ci0gICAgZGVs
ZXRlIG9zX3N0YWNrX3RyYWNlX2dldHRlcl87Ci0gICAgb3Nfc3RhY2tfdHJhY2VfZ2V0dGVyXyA9
IGdldHRlcjsKLSAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBjdXJyZW50IE9TIHN0YWNrIHRyYWNl
IGdldHRlciBpZiBpdCBpcyBub3QgTlVMTDsKLS8vIG90aGVyd2lzZSwgY3JlYXRlcyBhbiBPc1N0
YWNrVHJhY2VHZXR0ZXIsIG1ha2VzIGl0IHRoZSBjdXJyZW50Ci0vLyBnZXR0ZXIsIGFuZCByZXR1
cm5zIGl0LgotT3NTdGFja1RyYWNlR2V0dGVySW50ZXJmYWNlKiBVbml0VGVzdEltcGw6Om9zX3N0
YWNrX3RyYWNlX2dldHRlcigpIHsKLSAgaWYgKG9zX3N0YWNrX3RyYWNlX2dldHRlcl8gPT0gTlVM
TCkgewotI2lmZGVmIEdURVNUX09TX1NUQUNLX1RSQUNFX0dFVFRFUl8KLSAgICBvc19zdGFja190
cmFjZV9nZXR0ZXJfID0gbmV3IEdURVNUX09TX1NUQUNLX1RSQUNFX0dFVFRFUl87Ci0jZWxzZQot
ICAgIG9zX3N0YWNrX3RyYWNlX2dldHRlcl8gPSBuZXcgT3NTdGFja1RyYWNlR2V0dGVyOwotI2Vu
ZGlmICAvLyBHVEVTVF9PU19TVEFDS19UUkFDRV9HRVRURVJfCi0gIH0KLQotICByZXR1cm4gb3Nf
c3RhY2tfdHJhY2VfZ2V0dGVyXzsKLX0KLQotLy8gUmV0dXJucyB0aGUgVGVzdFJlc3VsdCBmb3Ig
dGhlIHRlc3QgdGhhdCdzIGN1cnJlbnRseSBydW5uaW5nLCBvcgotLy8gdGhlIFRlc3RSZXN1bHQg
Zm9yIHRoZSBhZCBob2MgdGVzdCBpZiBubyB0ZXN0IGlzIHJ1bm5pbmcuCi1UZXN0UmVzdWx0KiBV
bml0VGVzdEltcGw6OmN1cnJlbnRfdGVzdF9yZXN1bHQoKSB7Ci0gIHJldHVybiBjdXJyZW50X3Rl
c3RfaW5mb18gPwotICAgICAgJihjdXJyZW50X3Rlc3RfaW5mb18tPnJlc3VsdF8pIDogJmFkX2hv
Y190ZXN0X3Jlc3VsdF87Ci19Ci0KLS8vIFNodWZmbGVzIGFsbCB0ZXN0IGNhc2VzLCBhbmQgdGhl
IHRlc3RzIHdpdGhpbiBlYWNoIHRlc3QgY2FzZSwKLS8vIG1ha2luZyBzdXJlIHRoYXQgZGVhdGgg
dGVzdHMgYXJlIHN0aWxsIHJ1biBmaXJzdC4KLXZvaWQgVW5pdFRlc3RJbXBsOjpTaHVmZmxlVGVz
dHMoKSB7Ci0gIC8vIFNodWZmbGVzIHRoZSBkZWF0aCB0ZXN0IGNhc2VzLgotICBTaHVmZmxlUmFu
Z2UocmFuZG9tKCksIDAsIGxhc3RfZGVhdGhfdGVzdF9jYXNlXyArIDEsICZ0ZXN0X2Nhc2VfaW5k
aWNlc18pOwotCi0gIC8vIFNodWZmbGVzIHRoZSBub24tZGVhdGggdGVzdCBjYXNlcy4KLSAgU2h1
ZmZsZVJhbmdlKHJhbmRvbSgpLCBsYXN0X2RlYXRoX3Rlc3RfY2FzZV8gKyAxLAotICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50Pih0ZXN0X2Nhc2VzXy5zaXplKCkpLCAmdGVzdF9jYXNlX2lu
ZGljZXNfKTsKLQotICAvLyBTaHVmZmxlcyB0aGUgdGVzdHMgaW5zaWRlIGVhY2ggdGVzdCBjYXNl
LgotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRlc3RfY2FzZXNfLnNpemUoKTsgaSsrKSB7Ci0g
ICAgdGVzdF9jYXNlc19baV0tPlNodWZmbGVUZXN0cyhyYW5kb20oKSk7Ci0gIH0KLX0KLQotLy8g
UmVzdG9yZXMgdGhlIHRlc3QgY2FzZXMgYW5kIHRlc3RzIHRvIHRoZWlyIG9yZGVyIGJlZm9yZSB0
aGUgZmlyc3Qgc2h1ZmZsZS4KLXZvaWQgVW5pdFRlc3RJbXBsOjpVbnNodWZmbGVUZXN0cygpIHsK
LSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZXN0X2Nhc2VzXy5zaXplKCk7IGkrKykgewotICAg
IC8vIFVuc2h1ZmZsZXMgdGhlIHRlc3RzIGluIGVhY2ggdGVzdCBjYXNlLgotICAgIHRlc3RfY2Fz
ZXNfW2ldLT5VbnNodWZmbGVUZXN0cygpOwotICAgIC8vIFJlc2V0cyB0aGUgaW5kZXggb2YgZWFj
aCB0ZXN0IGNhc2UuCi0gICAgdGVzdF9jYXNlX2luZGljZXNfW2ldID0gc3RhdGljX2Nhc3Q8aW50
PihpKTsKLSAgfQotfQotCi0vLyBSZXR1cm5zIHRoZSBjdXJyZW50IE9TIHN0YWNrIHRyYWNlIGFz
IGFuIHN0ZDo6c3RyaW5nLgotLy8KLS8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzdGFjayBmcmFt
ZXMgdG8gYmUgaW5jbHVkZWQgaXMgc3BlY2lmaWVkIGJ5Ci0vLyB0aGUgZ3Rlc3Rfc3RhY2tfdHJh
Y2VfZGVwdGggZmxhZy4gIFRoZSBza2lwX2NvdW50IHBhcmFtZXRlcgotLy8gc3BlY2lmaWVzIHRo
ZSBudW1iZXIgb2YgdG9wIGZyYW1lcyB0byBiZSBza2lwcGVkLCB3aGljaCBkb2Vzbid0Ci0vLyBj
b3VudCBhZ2FpbnN0IHRoZSBudW1iZXIgb2YgZnJhbWVzIHRvIGJlIGluY2x1ZGVkLgotLy8KLS8v
IEZvciBleGFtcGxlLCBpZiBGb28oKSBjYWxscyBCYXIoKSwgd2hpY2ggaW4gdHVybiBjYWxscwot
Ly8gR2V0Q3VycmVudE9zU3RhY2tUcmFjZUV4Y2VwdFRvcCguLi4sIDEpLCBGb28oKSB3aWxsIGJl
IGluY2x1ZGVkIGluCi0vLyB0aGUgdHJhY2UgYnV0IEJhcigpIGFuZCBHZXRDdXJyZW50T3NTdGFj
a1RyYWNlRXhjZXB0VG9wKCkgd29uJ3QuCi1zdGQ6OnN0cmluZyBHZXRDdXJyZW50T3NTdGFja1Ry
YWNlRXhjZXB0VG9wKFVuaXRUZXN0KiAvKnVuaXRfdGVzdCovLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2tpcF9jb3VudCkgewotICAvLyBXZSBwYXNz
IHNraXBfY291bnQgKyAxIHRvIHNraXAgdGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGluIGFkZGl0aW9u
Ci0gIC8vIHRvIHdoYXQgdGhlIHVzZXIgcmVhbGx5IHdhbnRzIHRvIHNraXAuCi0gIHJldHVybiBH
ZXRVbml0VGVzdEltcGwoKS0+Q3VycmVudE9zU3RhY2tUcmFjZUV4Y2VwdFRvcChza2lwX2NvdW50
ICsgMSk7Ci19Ci0KLS8vIFVzZWQgYnkgdGhlIEdURVNUX1NVUFBSRVNTX1VOUkVBQ0hBQkxFX0NP
REVfV0FSTklOR19CRUxPV18gbWFjcm8gdG8KLS8vIHN1cHByZXNzIHVucmVhY2hhYmxlIGNvZGUg
d2FybmluZ3MuCi1uYW1lc3BhY2UgewotY2xhc3MgQ2xhc3NVbmlxdWVUb0Fsd2F5c1RydWUge307
Ci19Ci0KLWJvb2wgSXNUcnVlKGJvb2wgY29uZGl0aW9uKSB7IHJldHVybiBjb25kaXRpb247IH0K
LQotYm9vbCBBbHdheXNUcnVlKCkgewotI2lmIEdURVNUX0hBU19FWENFUFRJT05TCi0gIC8vIFRo
aXMgY29uZGl0aW9uIGlzIGFsd2F5cyBmYWxzZSBzbyBBbHdheXNUcnVlKCkgbmV2ZXIgYWN0dWFs
bHkgdGhyb3dzLAotICAvLyBidXQgaXQgbWFrZXMgdGhlIGNvbXBpbGVyIHRoaW5rIHRoYXQgaXQg
bWF5IHRocm93LgotICBpZiAoSXNUcnVlKGZhbHNlKSkKLSAgICB0aHJvdyBDbGFzc1VuaXF1ZVRv
QWx3YXlzVHJ1ZSgpOwotI2VuZGlmICAvLyBHVEVTVF9IQVNfRVhDRVBUSU9OUwotICByZXR1cm4g
dHJ1ZTsKLX0KLQotLy8gSWYgKnBzdHIgc3RhcnRzIHdpdGggdGhlIGdpdmVuIHByZWZpeCwgbW9k
aWZpZXMgKnBzdHIgdG8gYmUgcmlnaHQKLS8vIHBhc3QgdGhlIHByZWZpeCBhbmQgcmV0dXJucyB0
cnVlOyBvdGhlcndpc2UgbGVhdmVzICpwc3RyIHVuY2hhbmdlZAotLy8gYW5kIHJldHVybnMgZmFs
c2UuICBOb25lIG9mIHBzdHIsICpwc3RyLCBhbmQgcHJlZml4IGNhbiBiZSBOVUxMLgotYm9vbCBT
a2lwUHJlZml4KGNvbnN0IGNoYXIqIHByZWZpeCwgY29uc3QgY2hhcioqIHBzdHIpIHsKLSAgY29u
c3Qgc2l6ZV90IHByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTsKLSAgaWYgKHN0cm5jbXAoKnBz
dHIsIHByZWZpeCwgcHJlZml4X2xlbikgPT0gMCkgewotICAgICpwc3RyICs9IHByZWZpeF9sZW47
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBQYXJzZXMg
YSBzdHJpbmcgYXMgYSBjb21tYW5kIGxpbmUgZmxhZy4gIFRoZSBzdHJpbmcgc2hvdWxkIGhhdmUK
LS8vIHRoZSBmb3JtYXQgIi0tZmxhZz12YWx1ZSIuICBXaGVuIGRlZl9vcHRpb25hbCBpcyB0cnVl
LCB0aGUgIj12YWx1ZSIKLS8vIHBhcnQgY2FuIGJlIG9taXR0ZWQuCi0vLwotLy8gUmV0dXJucyB0
aGUgdmFsdWUgb2YgdGhlIGZsYWcsIG9yIE5VTEwgaWYgdGhlIHBhcnNpbmcgZmFpbGVkLgotY29u
c3QgY2hhciogUGFyc2VGbGFnVmFsdWUoY29uc3QgY2hhciogc3RyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgZGVmX29wdGlvbmFsKSB7Ci0gIC8vIHN0ciBhbmQgZmxhZyBtdXN0IG5vdCBiZSBOVUxM
LgotICBpZiAoc3RyID09IE5VTEwgfHwgZmxhZyA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQotICAv
LyBUaGUgZmxhZyBtdXN0IHN0YXJ0IHdpdGggIi0tIiBmb2xsb3dlZCBieSBHVEVTVF9GTEFHX1BS
RUZJWF8uCi0gIGNvbnN0IHN0ZDo6c3RyaW5nIGZsYWdfc3RyID0gc3RkOjpzdHJpbmcoIi0tIikg
KyBHVEVTVF9GTEFHX1BSRUZJWF8gKyBmbGFnOwotICBjb25zdCBzaXplX3QgZmxhZ19sZW4gPSBm
bGFnX3N0ci5sZW5ndGgoKTsKLSAgaWYgKHN0cm5jbXAoc3RyLCBmbGFnX3N0ci5jX3N0cigpLCBm
bGFnX2xlbikgIT0gMCkgcmV0dXJuIE5VTEw7Ci0KLSAgLy8gU2tpcHMgdGhlIGZsYWcgbmFtZS4K
LSAgY29uc3QgY2hhciogZmxhZ19lbmQgPSBzdHIgKyBmbGFnX2xlbjsKLQotICAvLyBXaGVuIGRl
Zl9vcHRpb25hbCBpcyB0cnVlLCBpdCdzIE9LIHRvIG5vdCBoYXZlIGEgIj12YWx1ZSIgcGFydC4K
LSAgaWYgKGRlZl9vcHRpb25hbCAmJiAoZmxhZ19lbmRbMF0gPT0gJ1wwJykpIHsKLSAgICByZXR1
cm4gZmxhZ19lbmQ7Ci0gIH0KLQotICAvLyBJZiBkZWZfb3B0aW9uYWwgaXMgdHJ1ZSBhbmQgdGhl
cmUgYXJlIG1vcmUgY2hhcmFjdGVycyBhZnRlciB0aGUKLSAgLy8gZmxhZyBuYW1lLCBvciBpZiBk
ZWZfb3B0aW9uYWwgaXMgZmFsc2UsIHRoZXJlIG11c3QgYmUgYSAnPScgYWZ0ZXIKLSAgLy8gdGhl
IGZsYWcgbmFtZS4KLSAgaWYgKGZsYWdfZW5kWzBdICE9ICc9JykgcmV0dXJuIE5VTEw7Ci0KLSAg
Ly8gUmV0dXJucyB0aGUgc3RyaW5nIGFmdGVyICI9Ii4KLSAgcmV0dXJuIGZsYWdfZW5kICsgMTsK
LX0KLQotLy8gUGFyc2VzIGEgc3RyaW5nIGZvciBhIGJvb2wgZmxhZywgaW4gdGhlIGZvcm0gb2Yg
ZWl0aGVyCi0vLyAiLS1mbGFnPXZhbHVlIiBvciAiLS1mbGFnIi4KLS8vCi0vLyBJbiB0aGUgZm9y
bWVyIGNhc2UsIHRoZSB2YWx1ZSBpcyB0YWtlbiBhcyB0cnVlIGFzIGxvbmcgYXMgaXQgZG9lcwot
Ly8gbm90IHN0YXJ0IHdpdGggJzAnLCAnZicsIG9yICdGJy4KLS8vCi0vLyBJbiB0aGUgbGF0dGVy
IGNhc2UsIHRoZSB2YWx1ZSBpcyB0YWtlbiBhcyB0cnVlLgotLy8KLS8vIE9uIHN1Y2Nlc3MsIHN0
b3JlcyB0aGUgdmFsdWUgb2YgdGhlIGZsYWcgaW4gKnZhbHVlLCBhbmQgcmV0dXJucwotLy8gdHJ1
ZS4gIE9uIGZhaWx1cmUsIHJldHVybnMgZmFsc2Ugd2l0aG91dCBjaGFuZ2luZyAqdmFsdWUuCi1i
b29sIFBhcnNlQm9vbEZsYWcoY29uc3QgY2hhciogc3RyLCBjb25zdCBjaGFyKiBmbGFnLCBib29s
KiB2YWx1ZSkgewotICAvLyBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgZmxhZyBhcyBhIHN0cmluZy4K
LSAgY29uc3QgY2hhciogY29uc3QgdmFsdWVfc3RyID0gUGFyc2VGbGFnVmFsdWUoc3RyLCBmbGFn
LCB0cnVlKTsKLQotICAvLyBBYm9ydHMgaWYgdGhlIHBhcnNpbmcgZmFpbGVkLgotICBpZiAodmFs
dWVfc3RyID09IE5VTEwpIHJldHVybiBmYWxzZTsKLQotICAvLyBDb252ZXJ0cyB0aGUgc3RyaW5n
IHZhbHVlIHRvIGEgYm9vbC4KLSAgKnZhbHVlID0gISgqdmFsdWVfc3RyID09ICcwJyB8fCAqdmFs
dWVfc3RyID09ICdmJyB8fCAqdmFsdWVfc3RyID09ICdGJyk7Ci0gIHJldHVybiB0cnVlOwotfQot
Ci0vLyBQYXJzZXMgYSBzdHJpbmcgZm9yIGFuIEludDMyIGZsYWcsIGluIHRoZSBmb3JtIG9mCi0v
LyAiLS1mbGFnPXZhbHVlIi4KLS8vCi0vLyBPbiBzdWNjZXNzLCBzdG9yZXMgdGhlIHZhbHVlIG9m
IHRoZSBmbGFnIGluICp2YWx1ZSwgYW5kIHJldHVybnMKLS8vIHRydWUuICBPbiBmYWlsdXJlLCBy
ZXR1cm5zIGZhbHNlIHdpdGhvdXQgY2hhbmdpbmcgKnZhbHVlLgotYm9vbCBQYXJzZUludDMyRmxh
Zyhjb25zdCBjaGFyKiBzdHIsIGNvbnN0IGNoYXIqIGZsYWcsIEludDMyKiB2YWx1ZSkgewotICAv
LyBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgZmxhZyBhcyBhIHN0cmluZy4KLSAgY29uc3QgY2hhciog
Y29uc3QgdmFsdWVfc3RyID0gUGFyc2VGbGFnVmFsdWUoc3RyLCBmbGFnLCBmYWxzZSk7Ci0KLSAg
Ly8gQWJvcnRzIGlmIHRoZSBwYXJzaW5nIGZhaWxlZC4KLSAgaWYgKHZhbHVlX3N0ciA9PSBOVUxM
KSByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gU2V0cyAqdmFsdWUgdG8gdGhlIHZhbHVlIG9mIHRoZSBm
bGFnLgotICByZXR1cm4gUGFyc2VJbnQzMihNZXNzYWdlKCkgPDwgIlRoZSB2YWx1ZSBvZiBmbGFn
IC0tIiA8PCBmbGFnLAotICAgICAgICAgICAgICAgICAgICB2YWx1ZV9zdHIsIHZhbHVlKTsKLX0K
LQotLy8gUGFyc2VzIGEgc3RyaW5nIGZvciBhIHN0cmluZyBmbGFnLCBpbiB0aGUgZm9ybSBvZgot
Ly8gIi0tZmxhZz12YWx1ZSIuCi0vLwotLy8gT24gc3VjY2Vzcywgc3RvcmVzIHRoZSB2YWx1ZSBv
ZiB0aGUgZmxhZyBpbiAqdmFsdWUsIGFuZCByZXR1cm5zCi0vLyB0cnVlLiAgT24gZmFpbHVyZSwg
cmV0dXJucyBmYWxzZSB3aXRob3V0IGNoYW5naW5nICp2YWx1ZS4KLWJvb2wgUGFyc2VTdHJpbmdG
bGFnKGNvbnN0IGNoYXIqIHN0ciwgY29uc3QgY2hhciogZmxhZywgc3RkOjpzdHJpbmcqIHZhbHVl
KSB7Ci0gIC8vIEdldHMgdGhlIHZhbHVlIG9mIHRoZSBmbGFnIGFzIGEgc3RyaW5nLgotICBjb25z
dCBjaGFyKiBjb25zdCB2YWx1ZV9zdHIgPSBQYXJzZUZsYWdWYWx1ZShzdHIsIGZsYWcsIGZhbHNl
KTsKLQotICAvLyBBYm9ydHMgaWYgdGhlIHBhcnNpbmcgZmFpbGVkLgotICBpZiAodmFsdWVfc3Ry
ID09IE5VTEwpIHJldHVybiBmYWxzZTsKLQotICAvLyBTZXRzICp2YWx1ZSB0byB0aGUgdmFsdWUg
b2YgdGhlIGZsYWcuCi0gICp2YWx1ZSA9IHZhbHVlX3N0cjsKLSAgcmV0dXJuIHRydWU7Ci19Ci0K
LS8vIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBoYXMgYSBwcmVmaXggdGhhdCBHb29nbGUg
VGVzdCB1c2VzIGZvciBpdHMKLS8vIGZsYWdzLCBpLmUuLCBzdGFydHMgd2l0aCBHVEVTVF9GTEFH
X1BSRUZJWF8gb3IgR1RFU1RfRkxBR19QUkVGSVhfREFTSF8uCi0vLyBJZiBHb29nbGUgVGVzdCBk
ZXRlY3RzIHRoYXQgYSBjb21tYW5kIGxpbmUgZmxhZyBoYXMgaXRzIHByZWZpeCBidXQgaXMgbm90
Ci0vLyByZWNvZ25pemVkLCBpdCB3aWxsIHByaW50IGl0cyBoZWxwIG1lc3NhZ2UuIEZsYWdzIHN0
YXJ0aW5nIHdpdGgKLS8vIEdURVNUX0lOVEVSTkFMX1BSRUZJWF8gZm9sbG93ZWQgYnkgImludGVy
bmFsXyIgYXJlIGNvbnNpZGVyZWQgR29vZ2xlIFRlc3QKLS8vIGludGVybmFsIGZsYWdzIGFuZCBk
byBub3QgdHJpZ2dlciB0aGUgaGVscCBtZXNzYWdlLgotc3RhdGljIGJvb2wgSGFzR29vZ2xlVGVz
dEZsYWdQcmVmaXgoY29uc3QgY2hhciogc3RyKSB7Ci0gIHJldHVybiAoU2tpcFByZWZpeCgiLS0i
LCAmc3RyKSB8fAotICAgICAgICAgIFNraXBQcmVmaXgoIi0iLCAmc3RyKSB8fAotICAgICAgICAg
IFNraXBQcmVmaXgoIi8iLCAmc3RyKSkgJiYKLSAgICAgICAgICFTa2lwUHJlZml4KEdURVNUX0ZM
QUdfUFJFRklYXyAiaW50ZXJuYWxfIiwgJnN0cikgJiYKLSAgICAgICAgIChTa2lwUHJlZml4KEdU
RVNUX0ZMQUdfUFJFRklYXywgJnN0cikgfHwKLSAgICAgICAgICBTa2lwUHJlZml4KEdURVNUX0ZM
QUdfUFJFRklYX0RBU0hfLCAmc3RyKSk7Ci19Ci0KLS8vIFByaW50cyBhIHN0cmluZyBjb250YWlu
aW5nIGNvZGUtZW5jb2RlZCB0ZXh0LiAgVGhlIGZvbGxvd2luZyBlc2NhcGUKLS8vIHNlcXVlbmNl
cyBjYW4gYmUgdXNlZCBpbiB0aGUgc3RyaW5nIHRvIGNvbnRyb2wgdGhlIHRleHQgY29sb3I6Ci0v
LwotLy8gICBAQCAgICBwcmludHMgYSBzaW5nbGUgJ0AnIGNoYXJhY3Rlci4KLS8vICAgQFIgICAg
Y2hhbmdlcyB0aGUgY29sb3IgdG8gcmVkLgotLy8gICBARyAgICBjaGFuZ2VzIHRoZSBjb2xvciB0
byBncmVlbi4KLS8vICAgQFkgICAgY2hhbmdlcyB0aGUgY29sb3IgdG8geWVsbG93LgotLy8gICBA
RCAgICBjaGFuZ2VzIHRvIHRoZSBkZWZhdWx0IHRlcm1pbmFsIHRleHQgY29sb3IuCi0vLwotLy8g
VE9ETyh3YW5AZ29vZ2xlLmNvbSk6IFdyaXRlIHRlc3RzIGZvciB0aGlzIG9uY2Ugd2UgYWRkIHN0
ZG91dAotLy8gY2FwdHVyaW5nIHRvIEdvb2dsZSBUZXN0Lgotc3RhdGljIHZvaWQgUHJpbnRDb2xv
ckVuY29kZWQoY29uc3QgY2hhciogc3RyKSB7Ci0gIEdUZXN0Q29sb3IgY29sb3IgPSBDT0xPUl9E
RUZBVUxUOyAgLy8gVGhlIGN1cnJlbnQgY29sb3IuCi0KLSAgLy8gQ29uY2VwdHVhbGx5LCB3ZSBz
cGxpdCB0aGUgc3RyaW5nIGludG8gc2VnbWVudHMgZGl2aWRlZCBieSBlc2NhcGUKLSAgLy8gc2Vx
dWVuY2VzLiAgVGhlbiB3ZSBwcmludCBvbmUgc2VnbWVudCBhdCBhIHRpbWUuICBBdCB0aGUgZW5k
IG9mCi0gIC8vIGVhY2ggaXRlcmF0aW9uLCB0aGUgc3RyIHBvaW50ZXIgYWR2YW5jZXMgdG8gdGhl
IGJlZ2lubmluZyBvZiB0aGUKLSAgLy8gbmV4dCBzZWdtZW50LgotICBmb3IgKDs7KSB7Ci0gICAg
Y29uc3QgY2hhciogcCA9IHN0cmNocihzdHIsICdAJyk7Ci0gICAgaWYgKHAgPT0gTlVMTCkgewot
ICAgICAgQ29sb3JlZFByaW50Zihjb2xvciwgIiVzIiwgc3RyKTsKLSAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBDb2xvcmVkUHJpbnRmKGNvbG9yLCAiJXMiLCBzdGQ6OnN0cmluZyhzdHIsIHAp
LmNfc3RyKCkpOwotCi0gICAgY29uc3QgY2hhciBjaCA9IHBbMV07Ci0gICAgc3RyID0gcCArIDI7
Ci0gICAgaWYgKGNoID09ICdAJykgewotICAgICAgQ29sb3JlZFByaW50Zihjb2xvciwgIkAiKTsK
LSAgICB9IGVsc2UgaWYgKGNoID09ICdEJykgewotICAgICAgY29sb3IgPSBDT0xPUl9ERUZBVUxU
OwotICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1InKSB7Ci0gICAgICBjb2xvciA9IENPTE9SX1JFRDsK
LSAgICB9IGVsc2UgaWYgKGNoID09ICdHJykgewotICAgICAgY29sb3IgPSBDT0xPUl9HUkVFTjsK
LSAgICB9IGVsc2UgaWYgKGNoID09ICdZJykgewotICAgICAgY29sb3IgPSBDT0xPUl9ZRUxMT1c7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIC0tc3RyOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgY29u
c3QgY2hhciBrQ29sb3JFbmNvZGVkSGVscE1lc3NhZ2VbXSA9Ci0iVGhpcyBwcm9ncmFtIGNvbnRh
aW5zIHRlc3RzIHdyaXR0ZW4gdXNpbmcgIiBHVEVTVF9OQU1FXyAiLiBZb3UgY2FuIHVzZSB0aGVc
biIKLSJmb2xsb3dpbmcgY29tbWFuZCBsaW5lIGZsYWdzIHRvIGNvbnRyb2wgaXRzIGJlaGF2aW9y
OlxuIgotIlxuIgotIlRlc3QgU2VsZWN0aW9uOlxuIgotIiAgQEctLSIgR1RFU1RfRkxBR19QUkVG
SVhfICJsaXN0X3Rlc3RzQERcbiIKLSIgICAgICBMaXN0IHRoZSBuYW1lcyBvZiBhbGwgdGVzdHMg
aW5zdGVhZCBvZiBydW5uaW5nIHRoZW0uIFRoZSBuYW1lIG9mXG4iCi0iICAgICAgVEVTVChGb28s
IEJhcikgaXMgXCJGb28uQmFyXCIuXG4iCi0iICBARy0tIiBHVEVTVF9GTEFHX1BSRUZJWF8gImZp
bHRlcj1AWVBPU1RJVkVfUEFUVEVSTlMiCi0gICAgIltARy1AWU5FR0FUSVZFX1BBVFRFUk5TXUBE
XG4iCi0iICAgICAgUnVuIG9ubHkgdGhlIHRlc3RzIHdob3NlIG5hbWUgbWF0Y2hlcyBvbmUgb2Yg
dGhlIHBvc2l0aXZlIHBhdHRlcm5zIGJ1dFxuIgotIiAgICAgIG5vbmUgb2YgdGhlIG5lZ2F0aXZl
IHBhdHRlcm5zLiAnPycgbWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlcjsgJyonXG4iCi0iICAg
ICAgbWF0Y2hlcyBhbnkgc3Vic3RyaW5nOyAnOicgc2VwYXJhdGVzIHR3byBwYXR0ZXJucy5cbiIK
LSIgIEBHLS0iIEdURVNUX0ZMQUdfUFJFRklYXyAiYWxzb19ydW5fZGlzYWJsZWRfdGVzdHNARFxu
IgotIiAgICAgIFJ1biBhbGwgZGlzYWJsZWQgdGVzdHMgdG9vLlxuIgotIlxuIgotIlRlc3QgRXhl
Y3V0aW9uOlxuIgotIiAgQEctLSIgR1RFU1RfRkxBR19QUkVGSVhfICJyZXBlYXQ9QFlbQ09VTlRd
QERcbiIKLSIgICAgICBSdW4gdGhlIHRlc3RzIHJlcGVhdGVkbHk7IHVzZSBhIG5lZ2F0aXZlIGNv
dW50IHRvIHJlcGVhdCBmb3JldmVyLlxuIgotIiAgQEctLSIgR1RFU1RfRkxBR19QUkVGSVhfICJz
aHVmZmxlQERcbiIKLSIgICAgICBSYW5kb21pemUgdGVzdHMnIG9yZGVycyBvbiBldmVyeSBpdGVy
YXRpb24uXG4iCi0iICBARy0tIiBHVEVTVF9GTEFHX1BSRUZJWF8gInJhbmRvbV9zZWVkPUBZW05V
TUJFUl1ARFxuIgotIiAgICAgIFJhbmRvbSBudW1iZXIgc2VlZCB0byB1c2UgZm9yIHNodWZmbGlu
ZyB0ZXN0IG9yZGVycyAoYmV0d2VlbiAxIGFuZFxuIgotIiAgICAgIDk5OTk5LCBvciAwIHRvIHVz
ZSBhIHNlZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgdGltZSkuXG4iCi0iXG4iCi0iVGVzdCBPdXRw
dXQ6XG4iCi0iICBARy0tIiBHVEVTVF9GTEFHX1BSRUZJWF8gImNvbG9yPUBZKEBHeWVzQFl8QEdu
b0BZfEBHYXV0b0BZKUBEXG4iCi0iICAgICAgRW5hYmxlL2Rpc2FibGUgY29sb3JlZCBvdXRwdXQu
IFRoZSBkZWZhdWx0IGlzIEBHYXV0b0BELlxuIgotIiAgLUBHLSIgR1RFU1RfRkxBR19QUkVGSVhf
ICJwcmludF90aW1lPTBARFxuIgotIiAgICAgIERvbid0IHByaW50IHRoZSBlbGFwc2VkIHRpbWUg
b2YgZWFjaCB0ZXN0LlxuIgotIiAgQEctLSIgR1RFU1RfRkxBR19QUkVGSVhfICJvdXRwdXQ9eG1s
QFlbQEc6QFlESVJFQ1RPUllfUEFUSEBHIgotICAgIEdURVNUX1BBVEhfU0VQXyAiQFl8QEc6QFlG
SUxFX1BBVEhdQERcbiIKLSIgICAgICBHZW5lcmF0ZSBhbiBYTUwgcmVwb3J0IGluIHRoZSBnaXZl
biBkaXJlY3Rvcnkgb3Igd2l0aCB0aGUgZ2l2ZW4gZmlsZVxuIgotIiAgICAgIG5hbWUuIEBZRklM
RV9QQVRIQEQgZGVmYXVsdHMgdG8gQEd0ZXN0X2RldGFpbHMueG1sQEQuXG4iCi0jaWYgR1RFU1Rf
Q0FOX1NUUkVBTV9SRVNVTFRTXwotIiAgQEctLSIgR1RFU1RfRkxBR19QUkVGSVhfICJzdHJlYW1f
cmVzdWx0X3RvPUBZSE9TVEBHOkBZUE9SVEBEXG4iCi0iICAgICAgU3RyZWFtIHRlc3QgcmVzdWx0
cyB0byB0aGUgZ2l2ZW4gc2VydmVyLlxuIgotI2VuZGlmICAvLyBHVEVTVF9DQU5fU1RSRUFNX1JF
U1VMVFNfCi0iXG4iCi0iQXNzZXJ0aW9uIEJlaGF2aW9yOlxuIgotIiAgQEctLSIgR1RFU1RfRkxB
R19QUkVGSVhfICJicmVha19vbl9mYWlsdXJlQERcbiIKLSIgICAgICBUdXJuIGFzc2VydGlvbiBm
YWlsdXJlcyBpbnRvIGRlYnVnZ2VyIGJyZWFrLXBvaW50cy5cbiIKLSIgIEBHLS0iIEdURVNUX0ZM
QUdfUFJFRklYXyAidGhyb3dfb25fZmFpbHVyZUBEXG4iCi0iICAgICAgVHVybiBhc3NlcnRpb24g
ZmFpbHVyZXMgaW50byBDKysgZXhjZXB0aW9ucy5cbiIKLSIgIEBHLS0iIEdURVNUX0ZMQUdfUFJF
RklYXyAiY2F0Y2hfZXhjZXB0aW9ucz0wQERcbiIKLSIgICAgICBEbyBub3QgcmVwb3J0IGV4Y2Vw
dGlvbnMgYXMgdGVzdCBmYWlsdXJlcy4gSW5zdGVhZCwgYWxsb3cgdGhlbVxuIgotIiAgICAgIHRv
IGNyYXNoIHRoZSBwcm9ncmFtIG9yIHRocm93IGEgcG9wLXVwIChvbiBXaW5kb3dzKS5cbiIKLSJc
biIKLSJFeGNlcHQgZm9yIEBHLS0iIEdURVNUX0ZMQUdfUFJFRklYXyAibGlzdF90ZXN0c0BELCB5
b3UgY2FuIGFsdGVybmF0aXZlbHkgc2V0ICIKLSAgICAidGhlIGNvcnJlc3BvbmRpbmdcbiIKLSJl
bnZpcm9ubWVudCB2YXJpYWJsZSBvZiBhIGZsYWcgKGFsbCBsZXR0ZXJzIGluIHVwcGVyLWNhc2Up
LiBGb3IgZXhhbXBsZSwgdG9cbiIKLSJkaXNhYmxlIGNvbG9yZWQgdGV4dCBvdXRwdXQsIHlvdSBj
YW4gZWl0aGVyIHNwZWNpZnkgQEctLSIgR1RFU1RfRkxBR19QUkVGSVhfCi0gICAgImNvbG9yPW5v
QEQgb3Igc2V0XG4iCi0idGhlIEBHIiBHVEVTVF9GTEFHX1BSRUZJWF9VUFBFUl8gIkNPTE9SQEQg
ZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gQEdub0BELlxuIgotIlxuIgotIkZvciBtb3JlIGluZm9y
bWF0aW9uLCBwbGVhc2UgcmVhZCB0aGUgIiBHVEVTVF9OQU1FXyAiIGRvY3VtZW50YXRpb24gYXRc
biIKLSJARyIgR1RFU1RfUFJPSkVDVF9VUkxfICJARC4gSWYgeW91IGZpbmQgYSBidWcgaW4gIiBH
VEVTVF9OQU1FXyAiXG4iCi0iKG5vdCBvbmUgaW4geW91ciBvd24gY29kZSBvciB0ZXN0cyksIHBs
ZWFzZSByZXBvcnQgaXQgdG9cbiIKLSJARzwiIEdURVNUX0RFVl9FTUFJTF8gIj5ARC5cbiI7Ci0K
LWJvb2wgUGFyc2VHb29nbGVUZXN0RmxhZyhjb25zdCBjaGFyKiBjb25zdCBhcmcpIHsKLSAgcmV0
dXJuIFBhcnNlQm9vbEZsYWcoYXJnLCBrQWxzb1J1bkRpc2FibGVkVGVzdHNGbGFnLAotICAgICAg
ICAgICAgICAgICAgICAgICAmR1RFU1RfRkxBRyhhbHNvX3J1bl9kaXNhYmxlZF90ZXN0cykpIHx8
Ci0gICAgICBQYXJzZUJvb2xGbGFnKGFyZywga0JyZWFrT25GYWlsdXJlRmxhZywKLSAgICAgICAg
ICAgICAgICAgICAgJkdURVNUX0ZMQUcoYnJlYWtfb25fZmFpbHVyZSkpIHx8Ci0gICAgICBQYXJz
ZUJvb2xGbGFnKGFyZywga0NhdGNoRXhjZXB0aW9uc0ZsYWcsCi0gICAgICAgICAgICAgICAgICAg
ICZHVEVTVF9GTEFHKGNhdGNoX2V4Y2VwdGlvbnMpKSB8fAotICAgICAgUGFyc2VTdHJpbmdGbGFn
KGFyZywga0NvbG9yRmxhZywgJkdURVNUX0ZMQUcoY29sb3IpKSB8fAotICAgICAgUGFyc2VTdHJp
bmdGbGFnKGFyZywga0ZpbHRlckZsYWcsICZHVEVTVF9GTEFHKGZpbHRlcikpIHx8Ci0gICAgICBQ
YXJzZUJvb2xGbGFnKGFyZywga0xpc3RUZXN0c0ZsYWcsICZHVEVTVF9GTEFHKGxpc3RfdGVzdHMp
KSB8fAotICAgICAgUGFyc2VTdHJpbmdGbGFnKGFyZywga091dHB1dEZsYWcsICZHVEVTVF9GTEFH
KG91dHB1dCkpIHx8Ci0gICAgICBQYXJzZUJvb2xGbGFnKGFyZywga1ByaW50VGltZUZsYWcsICZH
VEVTVF9GTEFHKHByaW50X3RpbWUpKSB8fAotICAgICAgUGFyc2VJbnQzMkZsYWcoYXJnLCBrUmFu
ZG9tU2VlZEZsYWcsICZHVEVTVF9GTEFHKHJhbmRvbV9zZWVkKSkgfHwKLSAgICAgIFBhcnNlSW50
MzJGbGFnKGFyZywga1JlcGVhdEZsYWcsICZHVEVTVF9GTEFHKHJlcGVhdCkpIHx8Ci0gICAgICBQ
YXJzZUJvb2xGbGFnKGFyZywga1NodWZmbGVGbGFnLCAmR1RFU1RfRkxBRyhzaHVmZmxlKSkgfHwK
LSAgICAgIFBhcnNlSW50MzJGbGFnKGFyZywga1N0YWNrVHJhY2VEZXB0aEZsYWcsCi0gICAgICAg
ICAgICAgICAgICAgICAmR1RFU1RfRkxBRyhzdGFja190cmFjZV9kZXB0aCkpIHx8Ci0gICAgICBQ
YXJzZVN0cmluZ0ZsYWcoYXJnLCBrU3RyZWFtUmVzdWx0VG9GbGFnLAotICAgICAgICAgICAgICAg
ICAgICAgICZHVEVTVF9GTEFHKHN0cmVhbV9yZXN1bHRfdG8pKSB8fAotICAgICAgUGFyc2VCb29s
RmxhZyhhcmcsIGtUaHJvd09uRmFpbHVyZUZsYWcsCi0gICAgICAgICAgICAgICAgICAgICZHVEVT
VF9GTEFHKHRocm93X29uX2ZhaWx1cmUpKTsKLX0KLQotI2lmIEdURVNUX1VTRV9PV05fRkxBR0ZJ
TEVfRkxBR18KLXZvaWQgTG9hZEZsYWdzRnJvbUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgp
IHsKLSAgRklMRSogZmxhZ2ZpbGUgPSBwb3NpeDo6Rk9wZW4ocGF0aC5jX3N0cigpLCAiciIpOwot
ICBpZiAoIWZsYWdmaWxlKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAiVW5h
YmxlIHRvIG9wZW4gZmlsZSBcIiVzXCJcbiIsCi0gICAgICAgICAgICBHVEVTVF9GTEFHKGZsYWdm
aWxlKS5jX3N0cigpKTsKLSAgICBmZmx1c2goc3RkZXJyKTsKLSAgICBleGl0KEVYSVRfRkFJTFVS
RSk7Ci0gIH0KLSAgc3RkOjpzdHJpbmcgY29udGVudHMoUmVhZEVudGlyZUZpbGUoZmxhZ2ZpbGUp
KTsKLSAgcG9zaXg6OkZDbG9zZShmbGFnZmlsZSk7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n
PiBsaW5lczsKLSAgU3BsaXRTdHJpbmcoY29udGVudHMsICdcbicsICZsaW5lcyk7Ci0gIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGluZXMuc2l6ZSgpOyArK2kpIHsKLSAgICBpZiAobGluZXNbaV0u
ZW1wdHkoKSkKLSAgICAgIGNvbnRpbnVlOwotICAgIGlmICghUGFyc2VHb29nbGVUZXN0RmxhZyhs
aW5lc1tpXS5jX3N0cigpKSkKLSAgICAgIGdfaGVscF9mbGFnID0gdHJ1ZTsKLSAgfQotfQotI2Vu
ZGlmICAvLyBHVEVTVF9VU0VfT1dOX0ZMQUdGSUxFX0ZMQUdfCi0KLS8vIFBhcnNlcyB0aGUgY29t
bWFuZCBsaW5lIGZvciBHb29nbGUgVGVzdCBmbGFncywgd2l0aG91dCBpbml0aWFsaXppbmcKLS8v
IG90aGVyIHBhcnRzIG9mIEdvb2dsZSBUZXN0LiAgVGhlIHR5cGUgcGFyYW1ldGVyIENoYXJUeXBl
IGNhbiBiZQotLy8gaW5zdGFudGlhdGVkIHRvIGVpdGhlciBjaGFyIG9yIHdjaGFyX3QuCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+Ci12b2lkIFBhcnNlR29vZ2xlVGVzdEZsYWdzT25seUlt
cGwoaW50KiBhcmdjLCBDaGFyVHlwZSoqIGFyZ3YpIHsKLSAgZm9yIChpbnQgaSA9IDE7IGkgPCAq
YXJnYzsgaSsrKSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgYXJnX3N0cmluZyA9IFN0cmVhbWFi
bGVUb1N0cmluZyhhcmd2W2ldKTsKLSAgICBjb25zdCBjaGFyKiBjb25zdCBhcmcgPSBhcmdfc3Ry
aW5nLmNfc3RyKCk7Ci0KLSAgICB1c2luZyBpbnRlcm5hbDo6UGFyc2VCb29sRmxhZzsKLSAgICB1
c2luZyBpbnRlcm5hbDo6UGFyc2VJbnQzMkZsYWc7Ci0gICAgdXNpbmcgaW50ZXJuYWw6OlBhcnNl
U3RyaW5nRmxhZzsKLQotICAgIGJvb2wgcmVtb3ZlX2ZsYWcgPSBmYWxzZTsKLSAgICBpZiAoUGFy
c2VHb29nbGVUZXN0RmxhZyhhcmcpKSB7Ci0gICAgICByZW1vdmVfZmxhZyA9IHRydWU7Ci0jaWYg
R1RFU1RfVVNFX09XTl9GTEFHRklMRV9GTEFHXwotICAgIH0gZWxzZSBpZiAoUGFyc2VTdHJpbmdG
bGFnKGFyZywga0ZsYWdmaWxlRmxhZywgJkdURVNUX0ZMQUcoZmxhZ2ZpbGUpKSkgewotICAgICAg
TG9hZEZsYWdzRnJvbUZpbGUoR1RFU1RfRkxBRyhmbGFnZmlsZSkpOwotICAgICAgcmVtb3ZlX2Zs
YWcgPSB0cnVlOwotI2VuZGlmICAvLyBHVEVTVF9VU0VfT1dOX0ZMQUdGSUxFX0ZMQUdfCi0gICAg
fSBlbHNlIGlmIChhcmdfc3RyaW5nID09ICItLWhlbHAiIHx8IGFyZ19zdHJpbmcgPT0gIi1oIiB8
fAotICAgICAgICAgICAgICAgYXJnX3N0cmluZyA9PSAiLT8iIHx8IGFyZ19zdHJpbmcgPT0gIi8/
IiB8fAotICAgICAgICAgICAgICAgSGFzR29vZ2xlVGVzdEZsYWdQcmVmaXgoYXJnKSkgewotICAg
ICAgLy8gQm90aCBoZWxwIGZsYWcgYW5kIHVucmVjb2duaXplZCBHb29nbGUgVGVzdCBmbGFncyAo
ZXhjbHVkaW5nCi0gICAgICAvLyBpbnRlcm5hbCBvbmVzKSB0cmlnZ2VyIGhlbHAgZGlzcGxheS4K
LSAgICAgIGdfaGVscF9mbGFnID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAocmVtb3ZlX2ZsYWcp
IHsKLSAgICAgIC8vIFNoaWZ0IHRoZSByZW1haW5kZXIgb2YgdGhlIGFyZ3YgbGlzdCBsZWZ0IGJ5
IG9uZS4gIE5vdGUKLSAgICAgIC8vIHRoYXQgYXJndiBoYXMgKCphcmdjICsgMSkgZWxlbWVudHMs
IHRoZSBsYXN0IG9uZSBhbHdheXMgYmVpbmcKLSAgICAgIC8vIE5VTEwuICBUaGUgZm9sbG93aW5n
IGxvb3AgbW92ZXMgdGhlIHRyYWlsaW5nIE5VTEwgZWxlbWVudCBhcwotICAgICAgLy8gd2VsbC4K
LSAgICAgIGZvciAoaW50IGogPSBpOyBqICE9ICphcmdjOyBqKyspIHsKLSAgICAgICAgYXJndltq
XSA9IGFyZ3ZbaiArIDFdOwotICAgICAgfQotCi0gICAgICAvLyBEZWNyZW1lbnRzIHRoZSBhcmd1
bWVudCBjb3VudC4KLSAgICAgICgqYXJnYyktLTsKLQotICAgICAgLy8gV2UgYWxzbyBuZWVkIHRv
IGRlY3JlbWVudCB0aGUgaXRlcmF0b3IgYXMgd2UganVzdCByZW1vdmVkCi0gICAgICAvLyBhbiBl
bGVtZW50LgotICAgICAgaS0tOwotICAgIH0KLSAgfQotCi0gIGlmIChnX2hlbHBfZmxhZykgewot
ICAgIC8vIFdlIHByaW50IHRoZSBoZWxwIGhlcmUgaW5zdGVhZCBvZiBpbiBSVU5fQUxMX1RFU1RT
KCksIGFzIHRoZQotICAgIC8vIGxhdHRlciBtYXkgbm90IGJlIGNhbGxlZCBhdCBhbGwgaWYgdGhl
IHVzZXIgaXMgdXNpbmcgR29vZ2xlCi0gICAgLy8gVGVzdCB3aXRoIGFub3RoZXIgdGVzdGluZyBm
cmFtZXdvcmsuCi0gICAgUHJpbnRDb2xvckVuY29kZWQoa0NvbG9yRW5jb2RlZEhlbHBNZXNzYWdl
KTsKLSAgfQotfQotCi0vLyBQYXJzZXMgdGhlIGNvbW1hbmQgbGluZSBmb3IgR29vZ2xlIFRlc3Qg
ZmxhZ3MsIHdpdGhvdXQgaW5pdGlhbGl6aW5nCi0vLyBvdGhlciBwYXJ0cyBvZiBHb29nbGUgVGVz
dC4KLXZvaWQgUGFyc2VHb29nbGVUZXN0RmxhZ3NPbmx5KGludCogYXJnYywgY2hhcioqIGFyZ3Yp
IHsKLSAgUGFyc2VHb29nbGVUZXN0RmxhZ3NPbmx5SW1wbChhcmdjLCBhcmd2KTsKLX0KLXZvaWQg
UGFyc2VHb29nbGVUZXN0RmxhZ3NPbmx5KGludCogYXJnYywgd2NoYXJfdCoqIGFyZ3YpIHsKLSAg
UGFyc2VHb29nbGVUZXN0RmxhZ3NPbmx5SW1wbChhcmdjLCBhcmd2KTsKLX0KLQotLy8gVGhlIGlu
dGVybmFsIGltcGxlbWVudGF0aW9uIG9mIEluaXRHb29nbGVUZXN0KCkuCi0vLwotLy8gVGhlIHR5
cGUgcGFyYW1ldGVyIENoYXJUeXBlIGNhbiBiZSBpbnN0YW50aWF0ZWQgdG8gZWl0aGVyIGNoYXIg
b3IKLS8vIHdjaGFyX3QuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+Ci12b2lkIEluaXRH
b29nbGVUZXN0SW1wbChpbnQqIGFyZ2MsIENoYXJUeXBlKiogYXJndikgewotICAvLyBXZSBkb24n
dCB3YW50IHRvIHJ1biB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSB0d2ljZS4KLSAgaWYgKEdUZXN0
SXNJbml0aWFsaXplZCgpKSByZXR1cm47Ci0KLSAgaWYgKCphcmdjIDw9IDApIHJldHVybjsKLQot
ICBnX2FyZ3ZzLmNsZWFyKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpICE9ICphcmdjOyBpKyspIHsK
LSAgICBnX2FyZ3ZzLnB1c2hfYmFjayhTdHJlYW1hYmxlVG9TdHJpbmcoYXJndltpXSkpOwotICB9
Ci0KLSAgUGFyc2VHb29nbGVUZXN0RmxhZ3NPbmx5KGFyZ2MsIGFyZ3YpOwotICBHZXRVbml0VGVz
dEltcGwoKS0+UG9zdEZsYWdQYXJzaW5nSW5pdCgpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgaW50
ZXJuYWwKLQotLy8gSW5pdGlhbGl6ZXMgR29vZ2xlIFRlc3QuICBUaGlzIG11c3QgYmUgY2FsbGVk
IGJlZm9yZSBjYWxsaW5nCi0vLyBSVU5fQUxMX1RFU1RTKCkuICBJbiBwYXJ0aWN1bGFyLCBpdCBw
YXJzZXMgYSBjb21tYW5kIGxpbmUgZm9yIHRoZQotLy8gZmxhZ3MgdGhhdCBHb29nbGUgVGVzdCBy
ZWNvZ25pemVzLiAgV2hlbmV2ZXIgYSBHb29nbGUgVGVzdCBmbGFnIGlzCi0vLyBzZWVuLCBpdCBp
cyByZW1vdmVkIGZyb20gYXJndiwgYW5kICphcmdjIGlzIGRlY3JlbWVudGVkLgotLy8KLS8vIE5v
IHZhbHVlIGlzIHJldHVybmVkLiAgSW5zdGVhZCwgdGhlIEdvb2dsZSBUZXN0IGZsYWcgdmFyaWFi
bGVzIGFyZQotLy8gdXBkYXRlZC4KLS8vCi0vLyBDYWxsaW5nIHRoZSBmdW5jdGlvbiBmb3IgdGhl
IHNlY29uZCB0aW1lIGhhcyBubyB1c2VyLXZpc2libGUgZWZmZWN0Lgotdm9pZCBJbml0R29vZ2xl
VGVzdChpbnQqIGFyZ2MsIGNoYXIqKiBhcmd2KSB7Ci0jaWYgZGVmaW5lZChHVEVTVF9DVVNUT01f
SU5JVF9HT09HTEVfVEVTVF9GVU5DVElPTl8pCi0gIEdURVNUX0NVU1RPTV9JTklUX0dPT0dMRV9U
RVNUX0ZVTkNUSU9OXyhhcmdjLCBhcmd2KTsKLSNlbHNlICAvLyBkZWZpbmVkKEdURVNUX0NVU1RP
TV9JTklUX0dPT0dMRV9URVNUX0ZVTkNUSU9OXykKLSAgaW50ZXJuYWw6OkluaXRHb29nbGVUZXN0
SW1wbChhcmdjLCBhcmd2KTsKLSNlbmRpZiAgLy8gZGVmaW5lZChHVEVTVF9DVVNUT01fSU5JVF9H
T09HTEVfVEVTVF9GVU5DVElPTl8pCi19Ci0KLS8vIFRoaXMgb3ZlcmxvYWRlZCB2ZXJzaW9uIGNh
biBiZSB1c2VkIGluIFdpbmRvd3MgcHJvZ3JhbXMgY29tcGlsZWQgaW4KLS8vIFVOSUNPREUgbW9k
ZS4KLXZvaWQgSW5pdEdvb2dsZVRlc3QoaW50KiBhcmdjLCB3Y2hhcl90KiogYXJndikgewotI2lm
IGRlZmluZWQoR1RFU1RfQ1VTVE9NX0lOSVRfR09PR0xFX1RFU1RfRlVOQ1RJT05fKQotICBHVEVT
VF9DVVNUT01fSU5JVF9HT09HTEVfVEVTVF9GVU5DVElPTl8oYXJnYywgYXJndik7Ci0jZWxzZSAg
Ly8gZGVmaW5lZChHVEVTVF9DVVNUT01fSU5JVF9HT09HTEVfVEVTVF9GVU5DVElPTl8pCi0gIGlu
dGVybmFsOjpJbml0R29vZ2xlVGVzdEltcGwoYXJnYywgYXJndik7Ci0jZW5kaWYgIC8vIGRlZmlu
ZWQoR1RFU1RfQ1VTVE9NX0lOSVRfR09PR0xFX1RFU1RfRlVOQ1RJT05fKQotfQotCi19ICAvLyBu
YW1lc3BhY2UgdGVzdGluZwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xldGVzdC9zcmMvZ3Rlc3RfbWFpbi5jYyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL2ZvbGx5L2d0ZXN0L2dvb2dsZXRlc3Qvc3JjL2d0ZXN0X21haW4u
Y2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMDI4MjI1NTIzMzA2ZWI5NjQ4Zjk0
YmNiZTllM2E3ODAxNmJiN2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvZm9sbHkvZ3Rlc3QvZ29vZ2xl
dGVzdC9zcmMvZ3Rlc3RfbWFpbi5jYworKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8v
IENvcHlyaWdodCAyMDA2LCBHb29nbGUgSW5jLgotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlz
dHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgPHN0
ZGlvLmg+Ci0KLSNpbmNsdWRlICJndGVzdC9ndGVzdC5oIgotCi1HVEVTVF9BUElfIGludCBtYWlu
KGludCBhcmdjLCBjaGFyICoqYXJndikgewotICBwcmludGYoIlJ1bm5pbmcgbWFpbigpIGZyb20g
Z3Rlc3RfbWFpbi5jY1xuIik7Ci0gIHRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2
KTsKLSAgcmV0dXJuIFJVTl9BTExfVEVTVFMoKTsKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL29naXJvdXguc2ggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci9vZ2lyb3V4LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4MTlhYjRiNjBh
OGIzNWFlYjM0ZjNiOWFhYzk3ZGJiYjNlNWZmNTAwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL29naXJv
dXguc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jIS9iaW4vYmFzaAotCi1zZXQg
LWUKLXNldCAtdQotc2V0IC14Ci0KLUZMQUdTPSItT3MgLVcgLXN0ZD1jKysxNCAtZnZpc2liaWxp
dHk9aGlkZGVuIgotSU5DTFVERVM9Ii1JLi9vZ2lyb3V4LyAtSS4vb2dpcm91eC9pbmNsdWRlIgot
Ci14Y3J1biBjbGFuZysrIC1vIHNlbWFwaG9yZSAuL29naXJvdXgvbGliL3NlbWFwaG9yZS5jcHAg
Li9vZ2lyb3V4L3Rlc3QuY3BwICRGTEFHUyAkSU5DTFVERVMKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL29naXJvdXgvaW5jbHVkZS9kZXRhaWxzL2NvbmZpZy5ocHAg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9vZ2lyb3V4L2luY2x1ZGUvZGV0YWlscy9j
b25maWcuaHBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmUyY2Y5N2IzYzZhNzcy
YTA2ODQyYjEzNzFkNjI5NGYzMWZhYWVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL29naXJvdXgvaW5j
bHVkZS9kZXRhaWxzL2NvbmZpZy5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTUgKzAsMCBAQAot
LyoKLQotQ29weXJpZ2h0IChjKSAyMDE3LCBOVklESUEgQ29ycG9yYXRpb24KLUFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCi1hcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLTEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwgdGhpcwotbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLXRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLWFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi1USElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELgotSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLUlORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKLUxJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UKLU9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0qLwotCi0jaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPGNocm9u
bz4KLSNpbmNsdWRlIDx0aHJlYWQ+Ci0jaW5jbHVkZSA8Y2Fzc2VydD4KLSNpbmNsdWRlIDxhbGdv
cml0aG0+Ci0KLSNpZmRlZiBXSU4zMgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbmRpZgotCi0j
aWZkZWYgX19saW51eF9fCi0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0j
aW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgvZnV0ZXguaD4KLSNpbmNsdWRlIDxz
eXMvc3lzY2FsbC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGNsaW1pdHM+
Ci0jaW5jbHVkZSA8c2VtYXBob3JlLmg+Ci0jZW5kaWYKLQotI2lmZGVmIF9fQVBQTEVfXwotI2lu
Y2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19DVURB
X0FSQ0hfXykgJiYgIWRlZmluZWQoX19oYXNfY3VkYV9uYW5vc2xlZXApCi0gICAgI3dhcm5pbmcg
IlVzZSBvZiBzZW1hcGhvcmVzIGlzIGlmZnkgd2l0aG91dCBDVURBIHN1cHBvcnQgZm9yIG5hbm9z
bGVlcCAoQ1VEQSB2ZXJzaW9uIFRCRCkuIgotI2VuZGlmCi0KLSNpZmRlZiBfX3NlbWFwaG9yZV9j
dWRhCi1uYW1lc3BhY2UgY3VkYQotewotI2Vsc2UKLW5hbWVzcGFjZSBzdGQKLXsKLSNlbmRpZgot
bmFtZXNwYWNlIGV4cGVyaW1lbnRhbAotewotaW5saW5lIG5hbWVzcGFjZSB2MQotewotbmFtZXNw
YWNlIGRldGFpbHMKLXsKLQotI2lmIGRlZmluZWQoX19zZW1hcGhvcmVfY3VkYSkKLQotI2lmbmRl
ZiBfX2hhc19jdWRhX2F0b21pYwotICAgICNlcnJvciAiQ1VEQSBhdG9taWM8VD4gc3VwcG9ydCBp
cyByZXF1aXJlZCIKLSNlbmRpZgotCi0jZGVmaW5lIF9fc2VtYXBob3JlX2FiaSBfX2hvc3RfXyBf
X2RldmljZV9fCi0jZGVmaW5lIF9fc2VtYXBob3JlX21hbmFnZWQgX19tYW5hZ2VkX18KLQotX19z
ZW1hcGhvcmVfYWJpIGlubGluZSB2b2lkIF9fc2VtYXBob3JlX3lpZWxkKCkKLXsKLSNpZiAhZGVm
aW5lZChfX0NVREFfQVJDSF9fKQotICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7Ci0jZWxp
ZiBkZWZpbmVkKF9faGFzX2N1ZGFfbmFub3NsZWVwKQotICAgIF9fbW1lX25hbm9zbGVlcCgxKTsK
LSNlbmRpZgotfQotI2RlZmluZSBfX3NlbWFwaG9yZV9leHBlY3QoYywgZSkgKGMpCi0KLSNlbHNl
Ci0KLSNkZWZpbmUgX19zZW1hcGhvcmVfYWJpCi0jZGVmaW5lIF9fc2VtYXBob3JlX21hbmFnZWQK
LQotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jZGVmaW5lIF9fc2VtYXBob3JlX2V4cGVjdCBfX2J1
aWx0aW5fZXhwZWN0Ci0jZWxzZQotI2RlZmluZSBfX3NlbWFwaG9yZV9leHBlY3QoYywgZSkgKGMp
Ci0jZW5kaWYKLQotI2lmZGVmIFdJTjMyCi10eXBlZGVmIEhBTkRMRSBfX3NlbWFwaG9yZV9zZW1f
dDsKLWlubGluZSBib29sIF9fc2VtYXBob3JlX3NlbV9pbml0KF9fc2VtYXBob3JlX3NlbV90ICZz
ZW0sIGludCBpbml0KQotewotICAgIGJvb2wgY29uc3QgcmV0ID0gKHNlbSA9IENyZWF0ZVNlbWFw
aG9yZShOVUxMLCBpbml0LCBJTlRfTUFYLCBOVUxMKSkgIT0gTlVMTDsKLSAgICBhc3NlcnQocmV0
KTsKLSAgICByZXR1cm4gcmV0OwotfQotaW5saW5lIGJvb2wgX19zZW1hcGhvcmVfc2VtX2Rlc3Ry
b3koX19zZW1hcGhvcmVfc2VtX3QgJnNlbSkKLXsKLSAgICBhc3NlcnQoc2VtICE9IE5VTEwpOwot
ICAgIHJldHVybiBDbG9zZUhhbmRsZShzZW0pID09IFRSVUU7Ci19Ci1pbmxpbmUgYm9vbCBfX3Nl
bWFwaG9yZV9zZW1fcG9zdChfX3NlbWFwaG9yZV9zZW1fdCAmc2VtLCBpbnQgaW5jKQotewotICAg
IGFzc2VydChzZW0gIT0gTlVMTCk7Ci0gICAgYXNzZXJ0KGluYyA+IDApOwotICAgIHJldHVybiBS
ZWxlYXNlU2VtYXBob3JlKHNlbSwgaW5jLCBOVUxMKSA9PSBUUlVFOwotfQotaW5saW5lIGJvb2wg
X19zZW1hcGhvcmVfc2VtX3dhaXQoX19zZW1hcGhvcmVfc2VtX3QgJnNlbSkKLXsKLSAgICBhc3Nl
cnQoc2VtICE9IE5VTEwpOwotICAgIHJldHVybiBXYWl0Rm9yU2luZ2xlT2JqZWN0KHNlbSwgSU5G
SU5JVEUpID09IFdBSVRfT0JKRUNUXzA7Ci19Ci10ZW1wbGF0ZSA8Y2xhc3MgUmVwLCBjbGFzcyBQ
ZXJpb2Q+Ci1pbmxpbmUgYm9vbCBfX3NlbWFwaG9yZV9zZW1fd2FpdF90aW1lZChfX3NlbWFwaG9y
ZV9zZW1fdCAmc2VtLCBjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiBjb25zdCAmZGVsdGEp
Ci17Ci0gICAgYXNzZXJ0KHNlbSAhPSBOVUxMKTsKLSAgICByZXR1cm4gV2FpdEZvclNpbmdsZU9i
amVjdChzZW0sIChEV09SRCljaHJvbm86OmR1cmF0aW9uX2Nhc3Q8Y2hyb25vOjptaWxsaXNlY29u
ZHM+KGRlbHRhKS5jb3VudCgpKSA9PSBXQUlUX09CSkVDVF8wOwotfQotI2lmIF9XSU4zMl9XSU5O
VCA+PSAweDA2MDIKLSNkZWZpbmUgX19zZW1hcGhvcmVfZmFzdF9wYXRoCi0jZW5kaWYKLSNkZWZp
bmUgX19zZW1hcGhvcmVfc2VtCi0jZW5kaWYgLy9XSU4zMgotCi0jaWZkZWYgX19saW51eF9fCi10
ZW1wbGF0ZSA8Y2xhc3MgUmVwLCBjbGFzcyBQZXJpb2Q+Ci10aW1lc3BlYyBfX3NlbWFwaG9yZV90
b190aW1lc3BlYyhjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiBjb25zdCAmZGVsdGEpCi17
Ci0gICAgc3RydWN0IHRpbWVzcGVjIHRzOwotICAgIHRzLnR2X3NlYyA9IHN0YXRpY19jYXN0PGxv
bmc+KGNocm9ubzo6ZHVyYXRpb25fY2FzdDxjaHJvbm86OnNlY29uZHM+KGRlbHRhKS5jb3VudCgp
KTsKLSAgICB0cy50dl9uc2VjID0gc3RhdGljX2Nhc3Q8bG9uZz4oY2hyb25vOjpkdXJhdGlvbl9j
YXN0PGNocm9ubzo6bmFub3NlY29uZHM+KGRlbHRhKS5jb3VudCgpKTsKLSAgICByZXR1cm4gdHM7
Ci19Ci10eXBlZGVmIHNlbV90IF9fc2VtYXBob3JlX3NlbV90OwotaW5saW5lIGJvb2wgX19zZW1h
cGhvcmVfc2VtX2luaXQoX19zZW1hcGhvcmVfc2VtX3QgJnNlbSwgaW50IGluaXQpCi17Ci0gICAg
cmV0dXJuIHNlbV9pbml0KCZzZW0sIDAsIGluaXQpID09IDA7Ci19Ci1pbmxpbmUgYm9vbCBfX3Nl
bWFwaG9yZV9zZW1fZGVzdHJveShfX3NlbWFwaG9yZV9zZW1fdCAmc2VtKQotewotICAgIHJldHVy
biBzZW1fZGVzdHJveSgmc2VtKSA9PSAwOwotfQotaW5saW5lIGJvb2wgX19zZW1hcGhvcmVfc2Vt
X3Bvc3QoX19zZW1hcGhvcmVfc2VtX3QgJnNlbSwgaW50IGluYykKLXsKLSAgICBhc3NlcnQoaW5j
ID09IDEpOwotICAgIHJldHVybiBzZW1fcG9zdCgmc2VtKSA9PSAwOwotfQotaW5saW5lIGJvb2wg
X19zZW1hcGhvcmVfc2VtX3dhaXQoX19zZW1hcGhvcmVfc2VtX3QgJnNlbSkKLXsKLSAgICByZXR1
cm4gc2VtX3dhaXQoJnNlbSkgPT0gMDsKLX0KLXRlbXBsYXRlIDxjbGFzcyBSZXAsIGNsYXNzIFBl
cmlvZD4KLWlubGluZSBib29sIF9fc2VtYXBob3JlX3NlbV93YWl0X3RpbWVkKF9fc2VtYXBob3Jl
X3NlbV90ICZzZW0sIGNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+IGNvbnN0ICZkZWx0YSkK
LXsKLSAgICBhdXRvIGNvbnN0IHRpbWVzcGVjID0gX19zZW1hcGhvcmVfdG9fdGltZXNwZWMoZGVs
dGEpOwotICAgIHJldHVybiBzZW1fdGltZWR3YWl0KCZzZW0sICZ0aW1lc3BlYykgPT0gMDsKLX0K
LWlubGluZSB2b2lkIF9fc2VtYXBob3JlX3lpZWxkKCkKLXsKLSAgICBzY2hlZF95aWVsZCgpOwot
fQotI2RlZmluZSBfX3NlbWFwaG9yZV9mYXN0X3BhdGgKLSNkZWZpbmUgX19zZW1hcGhvcmVfYmFj
a19idWZmZXJlZAotI2RlZmluZSBfX3NlbWFwaG9yZV9zZW0KLSNlbHNlCi1pbmxpbmUgdm9pZCBf
X3NlbWFwaG9yZV95aWVsZCgpCi17Ci0gICAgdGhpc190aHJlYWQ6OnlpZWxkKCk7Ci19Ci0jZW5k
aWYKLQotI2lmZGVmIF9fQVBQTEVfXwotdHlwZWRlZiBkaXNwYXRjaF9zZW1hcGhvcmVfdCBfX3Nl
bWFwaG9yZV9zZW1fdDsKLWlubGluZSBib29sIF9fc2VtYXBob3JlX3NlbV9pbml0KF9fc2VtYXBo
b3JlX3NlbV90ICZzZW0sIGludCBpbml0KQotewotICAgIHJldHVybiAoc2VtID0gZGlzcGF0Y2hf
c2VtYXBob3JlX2NyZWF0ZShpbml0KSkgIT0gTlVMTDsKLX0KLWlubGluZSBib29sIF9fc2VtYXBo
b3JlX3NlbV9kZXN0cm95KF9fc2VtYXBob3JlX3NlbV90ICZzZW0pCi17Ci0gICAgYXNzZXJ0KHNl
bSAhPSBOVUxMKTsKLSAgICBkaXNwYXRjaF9yZWxlYXNlKHNlbSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci1pbmxpbmUgYm9vbCBfX3NlbWFwaG9yZV9zZW1fcG9zdChfX3NlbWFwaG9yZV9zZW1fdCAm
c2VtLCBpbnQgaW5jKQotewotICAgIGFzc2VydChpbmMgPT0gMSk7Ci0gICAgZGlzcGF0Y2hfc2Vt
YXBob3JlX3NpZ25hbChzZW0pOwotICAgIHJldHVybiB0cnVlOwotfQotaW5saW5lIGJvb2wgX19z
ZW1hcGhvcmVfc2VtX3dhaXQoX19zZW1hcGhvcmVfc2VtX3QgJnNlbSkKLXsKLSAgICByZXR1cm4g
ZGlzcGF0Y2hfc2VtYXBob3JlX3dhaXQoc2VtLCBESVNQQVRDSF9USU1FX0ZPUkVWRVIpID09IDA7
Ci19Ci10ZW1wbGF0ZSA8Y2xhc3MgUmVwLCBjbGFzcyBQZXJpb2Q+Ci1pbmxpbmUgYm9vbCBfX3Nl
bWFwaG9yZV9zZW1fd2FpdF90aW1lZChfX3NlbWFwaG9yZV9zZW1fdCAmc2VtLCBjaHJvbm86OmR1
cmF0aW9uPFJlcCwgUGVyaW9kPiBjb25zdCAmZGVsdGEpCi17Ci0gICAgcmV0dXJuIGRpc3BhdGNo
X3NlbWFwaG9yZV93YWl0KHNlbSwgZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgY2hy
b25vOjpkdXJhdGlvbl9jYXN0PGNocm9ubzo6bmFub3NlY29uZHM+KGRlbHRhKS5jb3VudCgpKSkg
PT0gMDsKLX0KLSNkZWZpbmUgX19zZW1hcGhvcmVfYmFja19idWZmZXJlZAotI2RlZmluZSBfX3Nl
bWFwaG9yZV9zZW0KLSNlbmRpZgotCi0jZW5kaWYKLQotdXNpbmcgX19zZW1hcGhvcmVfY2xvY2sg
PSBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Omlz
X3N0ZWFkeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s+Ojp0eXBlOwotCi11
c2luZyBfX3NlbWFwaG9yZV9kdXJhdGlvbiA9IHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kczsKLQot
Ly8gQSBzaW1wbGUgZXhwb25lbnRpYWwgYmFjay1vZmYgaGVscGVyIHRoYXQgaXMgZGVzaWduZWQg
dG8gY292ZXIgdGhlIHNwYWNlIGJldHdlZW4gKDE8PF9fbWFnaWNfbnVtYmVyXzMpIGFuZCBfX21h
Z2ljX251bWJlcl80Ci1zdHJ1Y3QgX19zZW1hcGhvcmVfZXhwb25lbnRpYWxfYmFja29mZgotewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4X3RpbWUgPSAxMjgqNjQ7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtaW5fdGltZSA9IDY0OwotICAgIHVuc2lnbmVkIHRpbWUg
PSBtaW5fdGltZSwgdGltZV9zdW0gPSAwOwotCi0gICAgX19zZW1hcGhvcmVfYWJpIHZvaWQgcmVz
ZXQoKSB7Ci0gICAgICAgIHRpbWUgPSBtaW5fdGltZTsKLSAgICAgICAgdGltZV9zdW0gPSAwOwot
ICAgIH0KLQotICAgIF9fc2VtYXBob3JlX2FiaSB2b2lkIHNsZWVwKHVuc2lnbmVkIG1heGltdW0g
PSBtYXhfdGltZSkKLSAgICB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gY29uc3QgdGhp
c190aW1lID0gdGltZSA+IG1heGltdW0gPyBtYXhpbXVtIDogdGltZTsKLSAgICAgICAgICAgIHRp
bWVfc3VtICs9IHRoaXNfdGltZTsKLSNpZiAhZGVmaW5lZChfX0NVREFfQVJDSF9fKQotICAgICAg
ICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25k
cyh0aGlzX3RpbWUpKTsKLSNlbGlmIGRlZmluZWQoX19oYXNfY3VkYV9uYW5vc2xlZXApCi0gICAg
ICAgICAgICBfX21tZV9uYW5vc2xlZXAodGltZSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAg
ICB0aW1lICs9IG1pbl90aW1lICsgKHRpbWUgPj4gMik7Ci0gICAgICAgIGlmICh0aW1lID4gbWF4
X3RpbWUpIAotICAgICAgICAgICAgdGltZSA9IG1heF90aW1lOwotICAgIH0KLX07Ci19Ci19Ci19
Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9vZ2lyb3V4L2lu
Y2x1ZGUvc2VtYXBob3JlIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvb2dpcm91eC9p
bmNsdWRlL3NlbWFwaG9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA3MjUyOTBk
YTU0ZTMzZTMxZGUxZWJjZDE1MjZiMTlkYmIyMTk0MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9vZ2ly
b3V4L2luY2x1ZGUvc2VtYXBob3JlCisrKyAvZGV2L251bGwKQEAgLTEsNjQzICswLDAgQEAKLS8q
Ci0KLUNvcHlyaWdodCAoYykgMjAxNywgTlZJRElBIENvcnBvcmF0aW9uCi1BbGwgcmlnaHRzIHJl
c2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAotYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCi0xLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMKLWxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi10aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi1hbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4KLUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi1JTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLUJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi1EQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCi1MSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFCi1PUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLU9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotKi8KLQotI2lmbmRlZiBfX3NlbWFwaG9yZV9fCi0jZGVmaW5lIF9fc2Vt
YXBob3JlX18KLQotI2luY2x1ZGUgImRldGFpbHMvY29uZmlnLmhwcCIKLQotI2lmZGVmIF9fc2Vt
YXBob3JlX2N1ZGEKLW5hbWVzcGFjZSBjdWRhCi17Ci0jZWxzZQotbmFtZXNwYWNlIHN0ZAotewot
I2VuZGlmCi1uYW1lc3BhY2UgZXhwZXJpbWVudGFsCi17Ci1pbmxpbmUgbmFtZXNwYWNlIHYxCi17
Ci0KLS8vIDMyLjEwLCBzZW1hcGhvcmUgdHlwZSBhbmQgb3BlcmF0aW9ucwotZW51bSBzZW1hcGhv
cmVfbm90aWZ5Ci17Ci0gICAgc2VtYXBob3JlX25vdGlmeV9hbGwsCi0gICAgc2VtYXBob3JlX25v
dGlmeV9vbmUsCi0gICAgc2VtYXBob3JlX25vdGlmeV9ub25lCi19Owotc3RydWN0IGJpbmFyeV9z
ZW1hcGhvcmU7Ci1zdHJ1Y3QgY291bnRpbmdfc2VtYXBob3JlOwotc3RydWN0IHN5bmNocm9uaWM7
Ci0KLS8vIDMyLjEwLjIsIGluaXRpYWxpemF0aW9uCi0jZGVmaW5lIEFUT01JQ19TRU1fSU5JVCAw
IC8vc2VlIGJlbG93Ci0KLS8vIDMyLjEwLjMsIGF0b21pYyBmcmVlIGZ1bmN0aW9ucyBmb3Igd2Fp
dGluZwotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1fX3NlbWFwaG9yZV9hYmkgdm9pZCBhdG9taWNfc2ln
bmFsX2V4cGxpY2l0KGNvbnN0IGF0b21pYzxUPiAqLCBzZW1hcGhvcmVfbm90aWZ5KTsKLXRlbXBs
YXRlIDxjbGFzcyBUPgotX19zZW1hcGhvcmVfYWJpIHZvaWQgYXRvbWljX3NpZ25hbChjb25zdCBh
dG9taWM8VD4gKik7Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVj4KLV9fc2VtYXBob3JlX2Fi
aSB2b2lkIGF0b21pY193YWl0X2V4cGxpY2l0KGNvbnN0IGF0b21pYzxUPiAqLCBWLCBzdGQ6Om1l
bW9yeV9vcmRlcik7Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVj4KLV9fc2VtYXBob3JlX2Fi
aSB2b2lkIGF0b21pY193YWl0KGNvbnN0IGF0b21pYzxUPiAqLCBWKTsKLXRlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBWPgotX19zZW1hcGhvcmVfYWJpIGJvb2wgYXRvbWljX3RyeV93YWl0X2V4cGxp
Y2l0KGNvbnN0IGF0b21pYzxUPiAqLCBWLCBzdGQ6Om1lbW9yeV9vcmRlcik7Ci10ZW1wbGF0ZSA8
Y2xhc3MgVCwgY2xhc3MgVj4KLV9fc2VtYXBob3JlX2FiaSBib29sIGF0b21pY190cnlfd2FpdChj
b25zdCBhdG9taWM8VD4gKixWKTsKLQotc3RydWN0IGJpbmFyeV9zZW1hcGhvcmUKLXsKLSAgICB1
c2luZyBjb3VudF90eXBlID0gdWludDMyX3Q7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvdW50
X3R5cGUgbWF4ID0gMTsKLQotICAgIF9fc2VtYXBob3JlX2FiaSBpbmxpbmUgdm9pZCByZWxlYXNl
KCkgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIGlmKF9fc3RvbGVuKQotICAgICAgICAgICAgX19z
dG9sZW4gPSBmYWxzZTsKLSAgICAgICAgZWxzZQotI2lmZGVmIF9fc2VtYXBob3JlX2N1ZGEKLSAg
ICAgICAgICAgIF9fdG9ja2V0LmZldGNoX2FkZCgxLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
KTsKLSNlbHNlCi0gICAgICAgICAgICBfX3RvY2tldC5zdG9yZShfX3RvY2tldC5sb2FkKHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGF4ZWQpKzEsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotI2Vu
ZGlmCi0jaWZkZWYgX19zZW1hcGhvcmVfZmFzdF9wYXRoCi0gICAgICAgIGNvdW50X3R5cGUgb2xk
ID0gX192YWx1Yml0OwotICAgICAgICBpZiAoX19zZW1hcGhvcmVfZXhwZWN0KCFfX2F0b20uY29t
cGFyZV9leGNoYW5nZV9zdHJvbmcob2xkLCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlLCBz
dGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSwgMCkpCi0gICAgICAgICAgICBfX3JlbGVhc2Vfc2xv
dyhvbGQpOwotI2Vsc2UKLSAgICAgICAgX19hdG9tLmZldGNoX2FuZCh+X192YWx1Yml0LCBzdGQ6
Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKLSNlbmRpZgotICAgIH0KLSAgICBfX3NlbWFwaG9yZV9h
YmkgaW5saW5lIGJvb2wgdHJ5X2FjcXVpcmUoKSBub2V4Y2VwdAotICAgIHsKLSAgICAgICAgY291
bnRfdHlwZSBvbGQgPSAwOwotICAgICAgICBmb3IgKGludCBpID0gMDtpIDwgNjQ7ICsraSkgewot
ICAgICAgICAgICAgaWYoX19zZW1hcGhvcmVfZXhwZWN0KF9fYXRvbS5jb21wYXJlX2V4Y2hhbmdl
X3N0cm9uZyhvbGQgPSAwLCBfX3ZhbHViaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpLDEpKQotICAgICAgICAgICAgICAgIHJldHVybiBfX3N0
b2xlbiA9IHRydWU7Ci0gICAgICAgICAgICBmb3IoOyBvbGQgIT0gMCAmJiBpIDwgNjQ7ICsraSkg
ewotICAgICAgICAgICAgICAgIGRldGFpbHM6Ol9fc2VtYXBob3JlX3lpZWxkKCk7Ci0gICAgICAg
ICAgICAgICAgb2xkID0gX19hdG9tLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICBfX3NlbWFwaG9yZV9hYmkgaW5saW5lIHZvaWQgYWNxdWlyZSgpIG5vZXhjZXB0Ci0gICAgewot
ICAgICAgICBpZiAoX19zZW1hcGhvcmVfZXhwZWN0KHRyeV9hY3F1aXJlKCksIDEpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBfX2FjcXVpcmVfc2xvdygpOwotICAgIH0KLSAgICB0ZW1w
bGF0ZSA8Y2xhc3MgQ2xvY2ssIGNsYXNzIER1cmF0aW9uPgotICAgIF9fc2VtYXBob3JlX2FiaSBi
b29sIHRyeV9hY3F1aXJlX3VudGlsKGNvbnN0IHN0ZDo6Y2hyb25vOjp0aW1lX3BvaW50PENsb2Nr
LCBEdXJhdGlvbj4mIGFic190aW1lKQotICAgIHsKLSAgICAgICAgaWYgKF9fc2VtYXBob3JlX2V4
cGVjdCh0cnlfYWNxdWlyZSgpLCAxKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICByZXR1cm4gX19hY3F1aXJlX3Nsb3dfdGltZWQoYWJzX3RpbWUpOwotICAgIH0KLSAgICB0ZW1w
bGF0ZSA8Y2xhc3MgUmVwLCBjbGFzcyBQZXJpb2Q+Ci0gICAgX19zZW1hcGhvcmVfYWJpIGJvb2wg
dHJ5X2FjcXVpcmVfZm9yKGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4m
IHJlbF90aW1lKQotICAgIHsKLSAgICAgICAgaWYgKF9fc2VtYXBob3JlX2V4cGVjdCh0cnlfYWNx
dWlyZSgpLCAxKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gX19h
Y3F1aXJlX3Nsb3dfdGltZWQoZGV0YWlsczo6X19zZW1hcGhvcmVfY2xvY2s6Om5vdygpICsgcmVs
X3RpbWUpOwotICAgIH0KLQotICAgIF9fc2VtYXBob3JlX2FiaSBjb25zdGV4cHIgYmluYXJ5X3Nl
bWFwaG9yZShjb3VudF90eXBlIGRlc2lyZWQpIG5vZXhjZXB0IDogX19hdG9tKGRlc2lyZWQgPyAw
IDogMSksIF9fdGlja2V0KDApLCBfX3RvY2tldCgwKSwgX19zdG9sZW4oZmFsc2UpCi0gICAgewot
ICAgIH0KLQotICAgIGJpbmFyeV9zZW1hcGhvcmUoY29uc3QgYmluYXJ5X3NlbWFwaG9yZSYpID0g
ZGVsZXRlOwotICAgIGJpbmFyeV9zZW1hcGhvcmUgJm9wZXJhdG9yPShjb25zdCBiaW5hcnlfc2Vt
YXBob3JlJikgPSBkZWxldGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvdW50X3R5cGUgX192
YWx1Yml0ID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIGNvdW50X3R5cGUgX19sb2NrYml0ID0g
MjsKLSAgICBzdGF0aWMgY29uc3RleHByIGNvdW50X3R5cGUgX19zbG93Yml0ID0gNDsKLSAgICBz
dGF0aWMgY29uc3RleHByIGNvdW50X3R5cGUgX19jb250Yml0ID0gODsKLQotI2lmZGVmIF9fc2Vt
YXBob3JlX2Zhc3RfcGF0aAotICAgIF9fc2VtYXBob3JlX2FiaSB2b2lkIF9fcmVsZWFzZV9zbG93
KGNvdW50X3R5cGUgb2xkKSBub2V4Y2VwdDsKLSNlbmRpZgotCi0gICAgX19zZW1hcGhvcmVfYWJp
IHZvaWQgX19hY3F1aXJlX3Nsb3coKSBub2V4Y2VwdDsKLQotICAgIGJvb2wgX19hY3F1aXJlX3Ns
b3dfdGltZWQoc3RkOjpjaHJvbm86OnRpbWVfcG9pbnQ8ZGV0YWlsczo6X19zZW1hcGhvcmVfY2xv
Y2ssIGRldGFpbHM6Ol9fc2VtYXBob3JlX2R1cmF0aW9uPiBjb25zdCAmKSBub2V4Y2VwdDsKLQot
ICAgIGF0b21pYzxjb3VudF90eXBlPiBfX2F0b207Ci0gICAgYXRvbWljPGNvdW50X3R5cGU+IF9f
dGlja2V0OwotICAgIGF0b21pYzxjb3VudF90eXBlPiBfX3RvY2tldDsKLSAgICBib29sIF9fc3Rv
bGVuOwotfTsKLQotI2lmbmRlZiBfX3NlbWFwaG9yZV9zZW0KLQotc3RydWN0IGNvdW50aW5nX3Nl
bWFwaG9yZQotewotICAgIHVzaW5nIGNvdW50X3R5cGUgPSBpbnQzMl90OwotCi1wcml2YXRlOgot
I2lmZGVmIF9fc2VtYXBob3JlX2Zhc3RfcGF0aAotICAgIHN0YXRpYyBjb25zdGV4cHIgY291bnRf
dHlwZSBfX3ZhbHVtYXNrID0gfjMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29udG1hc2sgPSAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2ttYXNr
ID0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaGlmdCA9IDI7Ci0jZWxz
ZQotICAgIHN0YXRpYyBjb25zdGV4cHIgY291bnRfdHlwZSBfX3ZhbHVtYXNrID0gfjAsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29udG1hc2sgPSAwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2xvY2ttYXNrID0gMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19zaGlmdCA9IDA7Ci0jZW5kaWYKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29u
c3RleHByIGNvdW50X3R5cGUgbWF4ID0gKF9fdmFsdW1hc2sgPj4gKF9fc2hpZnQgPyBfX3NoaWZ0
IDogMSkpOwotCi0gICAgX19zZW1hcGhvcmVfYWJpIGlubGluZSB2b2lkIHJlbGVhc2Uoc3RkOjpt
ZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAot
ICAgIHsKLSAgICAgICAgcmVsZWFzZSgxLCBzZW1hcGhvcmVfbm90aWZ5X2FsbCwgb3JkZXIpOwot
ICAgIH0KLSAgICBfX3NlbWFwaG9yZV9hYmkgaW5saW5lIHZvaWQgcmVsZWFzZShjb3VudF90eXBl
IHRlcm0sIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2Nz
dCkgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIHJlbGVhc2UodGVybSwgc2VtYXBob3JlX25vdGlm
eV9hbGwsIG9yZGVyKTsKLSAgICB9Ci0gICAgX19zZW1hcGhvcmVfYWJpIGlubGluZSB2b2lkIHJl
bGVhc2UoY291bnRfdHlwZSB0ZXJtLCBzZW1hcGhvcmVfbm90aWZ5IG5vdGlmeSwgc3RkOjptZW1v
cnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAotICAg
IHsKLQotI2lmZGVmIF9fc2VtYXBob3JlX2Zhc3RfcGF0aAotICAgICAgICBjb3VudF90eXBlIG9s
ZCA9IDAsIHNldCA9IHRlcm0gPDwgX19zaGlmdDsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gYXRv
bS5jb21wYXJlX2V4Y2hhbmdlX3dlYWsob2xkLCBzZXQsIG9yZGVyLCBzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKLSAgICAgICAgd2hpbGUgKF9fc2VtYXBob3JlX2V4cGVjdCghc3VjY2VzcyAm
JiAhKG9sZCAmIChfX2NvbnRtYXNrIHwgX19sb2NrbWFzaykpLCAwKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgc2V0ID0gb2xkICsgKHRlcm0gPDwgX19zaGlmdCk7Ci0gICAgICAgICAgICBzdWNj
ZXNzID0gYXRvbS5jb21wYXJlX2V4Y2hhbmdlX3dlYWsob2xkLCBzZXQsIG9yZGVyLCBzdGQ6Om1l
bW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoX19zZW1hcGhvcmVf
ZXhwZWN0KCFzdWNjZXNzLCAwKSkKLSAgICAgICAgICAgIF9fZmV0Y2hfYWRkX3Nsb3codGVybSwg
b2xkLCBvcmRlciwgbm90aWZ5KTsKLSNlbHNlCi0gICAgICAgIGNvdW50X3R5cGUgb2xkID0gYXRv
bS5mZXRjaF9hZGQodGVybSwgb3JkZXIpOwotI2VuZGlmCi0gICAgfQotCi0gICAgX19zZW1hcGhv
cmVfYWJpIGlubGluZSB2b2lkIGFjcXVpcmUoc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6
Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAotICAgIHsKLQotICAgICAgICB3aGlsZSAo
X19zZW1hcGhvcmVfZXhwZWN0KCFfX2ZldGNoX3N1Yl9pZihvcmRlciksIDApKQotICAgICAgICB7
Ci0gICAgICAgICAgICBib29sIGNvbnN0IHN1Y2Nlc3MgPSBfX2FjcXVpcmVfZmFzdChvcmRlcik7
Ci0gICAgICAgICAgICBpZiAoX19zZW1hcGhvcmVfZXhwZWN0KCFzdWNjZXNzLCAwKSkKLSAgICAg
ICAgICAgICAgICBfX2FjcXVpcmVfc2xvdyhvcmRlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
X19zZW1hcGhvcmVfYWJpIGlubGluZSBib29sIHRyeV9hY3F1aXJlKHN0ZDo6bWVtb3J5X29yZGVy
IG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgbm9leGNlcHQKLSAgICB7Ci0KLSAg
ICAgICAgcmV0dXJuIF9fZmV0Y2hfc3ViX2lmKG9yZGVyKTsKLSAgICB9Ci0gICAgdGVtcGxhdGUg
PGNsYXNzIENsb2NrLCBjbGFzcyBEdXJhdGlvbj4KLSAgICBfX3NlbWFwaG9yZV9hYmkgYm9vbCB0
cnlfYWNxdWlyZV91bnRpbChzdGQ6OmNocm9ubzo6dGltZV9wb2ludDxDbG9jaywgRHVyYXRpb24+
IGNvbnN0ICZhYnNfdGltZSwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9v
cmRlcl9zZXFfY3N0KQotICAgIHsKLQotICAgICAgICB3aGlsZSAoX19zZW1hcGhvcmVfZXhwZWN0
KCFfX2ZldGNoX3N1Yl9pZihvcmRlciksIDApKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29s
IHN1Y2Nlc3MgPSBfX2FjcXVpcmVfZmFzdChvcmRlcik7Ci0gICAgICAgICAgICBpZiAoX19zZW1h
cGhvcmVfZXhwZWN0KCFzdWNjZXNzLCAwKSkKLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gX19h
Y3F1aXJlX3Nsb3dfdGltZWQoYWJzX3RpbWUsIG9yZGVyKTsKLSAgICAgICAgICAgIGlmIChfX3Nl
bWFwaG9yZV9leHBlY3QoIXN1Y2Nlc3MsIDApKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgdGVtcGxhdGUg
PGNsYXNzIFJlcCwgY2xhc3MgUGVyaW9kPgotICAgIF9fc2VtYXBob3JlX2FiaSBib29sIHRyeV9h
Y3F1aXJlX2ZvcihzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+IGNvbnN0ICZyZWxf
dGltZSwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0
KQotICAgIHsKLQotICAgICAgICBpZiAoX19zZW1hcGhvcmVfZXhwZWN0KF9fZmV0Y2hfc3ViX2lm
KG9yZGVyKSwgMSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcmV0dXJuIHRyeV9hY3F1aXJlX3VudGlsKGRldGFpbHM6Ol9fc2VtYXBob3JlX2Ns
b2NrOjpub3coKSArIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjpuYW5v
c2Vjb25kcz4ocmVsX3RpbWUpLCBvcmRlcik7Ci0gICAgfQotCi0gICAgX19zZW1hcGhvcmVfYWJp
IGNvbnN0ZXhwciBjb3VudGluZ19zZW1hcGhvcmUoY291bnRfdHlwZSBkZXNpcmVkKSBub2V4Y2Vw
dCA6IGF0b20oZGVzaXJlZCA8PCBfX3NoaWZ0KQotICAgIHsKLSAgICB9Ci0gICAgY291bnRpbmdf
c2VtYXBob3JlKGNvbnN0IGNvdW50aW5nX3NlbWFwaG9yZSAmKSA9IGRlbGV0ZTsKLSAgICBjb3Vu
dGluZ19zZW1hcGhvcmUgJm9wZXJhdG9yPShjb25zdCBjb3VudGluZ19zZW1hcGhvcmUgJikgPSBk
ZWxldGU7Ci0KLXByaXZhdGU6Ci0gICAgX19zZW1hcGhvcmVfYWJpIGJvb2wgX19mZXRjaF9zdWJf
aWZfc2xvdyhjb3VudF90eXBlIG9sZCwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIpIG5vZXhjZXB0
OwotCi0gICAgX19zZW1hcGhvcmVfYWJpIGJvb2wgX19mZXRjaF9zdWJfaWYoc3RkOjptZW1vcnlf
b3JkZXIgb3JkZXIpIG5vZXhjZXB0Ci0gICAgewotCi0gICAgICAgIGNvdW50X3R5cGUgb2xkID0g
MSA8PCBfX3NoaWZ0LCBzZXQgPSAwOwotICAgICAgICBib29sIHJldGNvZGUgPSBhdG9tLmNvbXBh
cmVfZXhjaGFuZ2Vfd2VhayhvbGQsIHNldCwgb3JkZXIsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4
ZWQpOwotICAgICAgICBpZiAoX19zZW1hcGhvcmVfZXhwZWN0KCFyZXRjb2RlICYmIChvbGQgPj4g
X19zaGlmdCkgPj0gMSwgMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9sZCAmPSBfX3ZhbHVt
YXNrOwotICAgICAgICAgICAgc2V0ID0gb2xkIC0gKDEgPDwgX19zaGlmdCk7Ci0gICAgICAgICAg
ICByZXRjb2RlID0gYXRvbS5jb21wYXJlX2V4Y2hhbmdlX3dlYWsob2xkLCBzZXQsIG9yZGVyLCBz
dGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoX19zZW1h
cGhvcmVfZXhwZWN0KCFyZXRjb2RlICYmIChvbGQgPj4gX19zaGlmdCkgPj0gMSwgMCkpCi0gICAg
ICAgICAgICByZXRjb2RlID0gX19mZXRjaF9zdWJfaWZfc2xvdyhvbGQsIG9yZGVyKTsKLSAgICAg
ICAgcmV0dXJuIHJldGNvZGU7Ci0gICAgfQotCi0jaWZkZWYgX19zZW1hcGhvcmVfZmFzdF9wYXRo
Ci0gICAgX19zZW1hcGhvcmVfYWJpIHZvaWQgX19mZXRjaF9hZGRfc2xvdyhjb3VudF90eXBlIHRl
cm0sIGNvdW50X3R5cGUgb2xkLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciwgc2VtYXBob3JlX25v
dGlmeSBub3RpZnkpIG5vZXhjZXB0OwotI2VuZGlmCi0KLSAgICBfX3NlbWFwaG9yZV9hYmkgYm9v
bCBfX2FjcXVpcmVfc2xvd190aW1lZChzdGQ6OmNocm9ubzo6dGltZV9wb2ludDxkZXRhaWxzOjpf
X3NlbWFwaG9yZV9jbG9jaywgZGV0YWlsczo6X19zZW1hcGhvcmVfZHVyYXRpb24+IGNvbnN0ICZh
YnNfdGltZSwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIpIG5vZXhjZXB0OwotCi0gICAgX19zZW1h
cGhvcmVfYWJpIHZvaWQgX19hY3F1aXJlX3Nsb3coc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIpIG5v
ZXhjZXB0OwotCi0gICAgX19zZW1hcGhvcmVfYWJpIGlubGluZSBib29sIF9fYWNxdWlyZV9mYXN0
KHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyKSBub2V4Y2VwdAotICAgIHsKLQotICAgICAgICBhdXRv
IHZhbHVlID0gKGF0b20ubG9hZChvcmRlcikgPj4gX19zaGlmdCk7Ci0gICAgICAgIGlmIChfX3Nl
bWFwaG9yZV9leHBlY3QodmFsdWUgPj0gMSwgMSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzMjsgKytpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBkZXRhaWxzOjpfX3NlbWFwaG9yZV95aWVsZCgpOwotICAgICAgICAgICAgdmFsdWUgPSAo
YXRvbS5sb2FkKG9yZGVyKSA+PiBfX3NoaWZ0KTsKLSAgICAgICAgICAgIGlmIChfX3NlbWFwaG9y
ZV9leHBlY3QodmFsdWUgPj0gMSwgMSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGF0b21pYzxjb3Vu
dF90eXBlPiBhdG9tOwotCi0gICAgZnJpZW5kIHN0cnVjdCBzeW5jaHJvbmljOwotfTsKLQotI2Vs
c2UKLQotc3RydWN0IGNvdW50aW5nX3NlbWFwaG9yZQotewotICAgIHVzaW5nIGNvdW50X3R5cGUg
PSBpbnQzMl90OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBjb3VudF90eXBlIG1heCA9IChudW1l
cmljX2xpbWl0czxjb3VudF90eXBlPjo6bWF4KSgpID4+IDE7Ci0KLSAgICBfX3NlbWFwaG9yZV9h
YmkgaW5saW5lIHZvaWQgcmVsZWFzZShzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVt
b3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0Ci0gICAgewotICAgICAgICByZWxlYXNlKDEsIHNl
bWFwaG9yZV9ub3RpZnlfYWxsLCBvcmRlcik7Ci0gICAgfQotICAgIF9fc2VtYXBob3JlX2FiaSBp
bmxpbmUgdm9pZCByZWxlYXNlKGNvdW50X3R5cGUgdGVybSwgc3RkOjptZW1vcnlfb3JkZXIgb3Jk
ZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAotICAgIHsKLSAgICAgICAg
cmVsZWFzZSh0ZXJtLCBzZW1hcGhvcmVfbm90aWZ5X2FsbCwgb3JkZXIpOwotICAgIH0KLSAgICBf
X3NlbWFwaG9yZV9hYmkgaW5saW5lIHZvaWQgcmVsZWFzZShjb3VudF90eXBlIHRlcm0sIHNlbWFw
aG9yZV9ub3RpZnksIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJf
c2VxX2NzdCkgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIGNvdW50X3R5cGUgb2xkID0gX19mcm9u
dGJ1ZmZlci5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAgICAgICB3aGlsZSAo
MSkKLSAgICAgICAgewotICAgICAgICAgICAgb2xkICY9IH4xOwotICAgICAgICAgICAgaWYgKF9f
ZnJvbnRidWZmZXIuY29tcGFyZV9leGNoYW5nZV93ZWFrKG9sZCwgb2xkICsgKHRlcm0gPDwgMSkg
KyAxLCBvcmRlciwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCkpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9sZCA+PiAxIDwgMCkKLSAgICAgICAgeyAv
LyB3YXMgaXQgZGVwbGV0ZWQ/Ci0gICAgICAgICAgICBjb3VudF90eXBlIGluYyA9IChtaW4pKC0o
b2xkID4+IDEpLCB0ZXJtKTsKLSNpZmRlZiBfX3NlbWFwaG9yZV9iYWNrX2J1ZmZlcmVkCi0gICAg
ICAgICAgICBfX2JhY2tidWZmZXIuZmV0Y2hfYWRkKGluYyAtIDEpOwotICAgICAgICAgICAgaW5j
ID0gMTsKLSNlbmRpZgotICAgICAgICAgICAgY291bnRfdHlwZSBjb25zdCByZXN1bHQgPSBkZXRh
aWxzOjpfX3NlbWFwaG9yZV9zZW1fcG9zdChfX3NlbWFwaG9yZSwgaW5jKTsKLSNpZmRlZiBXSU4z
MgotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYXV0byBkID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGQgPT0g
RVJST1JfU1VDQ0VTUyk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIGFzc2Vy
dChyZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIF9fZnJvbnRidWZmZXIuZmV0Y2hfc3ViKDEp
OwotICAgIH0KLQotICAgIGlubGluZSB2b2lkIGFjcXVpcmUoc3RkOjptZW1vcnlfb3JkZXIgb3Jk
ZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAotICAgIHsKLSAgICAgICAg
X19hY3F1aXJlX2Zhc3QoKTsKLSAgICAgICAgX19hY3F1aXJlX3Nsb3cob3JkZXIpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlIDxjbGFzcyBSZXAsIGNsYXNzIFBlcmlvZD4KLSAgICBib29sIHRyeV9h
Y3F1aXJlX2ZvcihzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+IGNvbnN0ICZyZWxf
dGltZSwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0
KQotICAgIHsKLQotICAgICAgICBfX2FjcXVpcmVfZmFzdCgpOwotICAgICAgICBpZiAoX19mcm9u
dGJ1ZmZlci5mZXRjaF9zdWIoMiwgb3JkZXIpID4+IDEgPiAwKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGF1dG8gY29uc3QgcmVzdWx0ID0gZGV0YWlsczo6X19zZW1hcGhvcmVf
c2VtX3dhaXRfdGltZWQoX19zZW1hcGhvcmUsIHJlbF90aW1lKTsKLSAgICAgICAgaWYgKHJlc3Vs
dCkKLSAgICAgICAgICAgIF9fYmFja2ZpbGwoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENsb2NrLCBjbGFzcyBEdXJhdGlvbj4KLSAgICBib29s
IHRyeV9hY3F1aXJlX3VudGlsKHN0ZDo6Y2hyb25vOjp0aW1lX3BvaW50PENsb2NrLCBEdXJhdGlv
bj4gY29uc3QgJmFic190aW1lLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5
X29yZGVyX3NlcV9jc3QpCi0gICAgewotCi0gICAgICAgIHJldHVybiB0cnlfYWNxdWlyZV9mb3Io
YWJzX3RpbWUgLSBDbG9jazo6bm93KCksIG9yZGVyKTsKLSAgICB9Ci0gICAgaW5saW5lIGJvb2wg
dHJ5X2FjcXVpcmUoc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9z
ZXFfY3N0KSBub2V4Y2VwdAotICAgIHsKLQotICAgICAgICBfX2FjcXVpcmVfZmFzdCgpOwotICAg
ICAgICBpZiAoX19mcm9udGJ1ZmZlci5mZXRjaF9zdWIoMiwgb3JkZXIpID4+IDEgPiAwKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiB0cnlfYWNxdWlyZV9mb3Ioc3Rk
OjpjaHJvbm86Om5hbm9zZWNvbmRzKDApLCBvcmRlcik7Ci0gICAgfQotICAgIGNvdW50aW5nX3Nl
bWFwaG9yZShjb3VudF90eXBlIGRlc2lyZWQpIG5vZXhjZXB0Ci0gICAgICAgIDogX19mcm9udGJ1
ZmZlciB7IGRlc2lyZWQgPDwgMSB9Ci0jaWZkZWYgX19zZW1hcGhvcmVfYmFja19idWZmZXJlZAot
ICAgICAgICAsIF9fYmFja2J1ZmZlcnsgMCB9Ci0jZW5kaWYKLSAgICB7Ci0gICAgICAgIGF1dG8g
Y29uc3QgcmVzdWx0ID0gZGV0YWlsczo6X19zZW1hcGhvcmVfc2VtX2luaXQoX19zZW1hcGhvcmUs
IGRlc2lyZWQpOwotI2lmZGVmIFdJTjMyCi0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBhdXRvIGQgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgICAgIGFzc2Vy
dChkID09IEVSUk9SX1NVQ0NFU1MpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgYXNzZXJ0
KHJlc3VsdCk7Ci0gICAgfQotICAgIH5jb3VudGluZ19zZW1hcGhvcmUoKQotICAgIHsKLQotICAg
ICAgICB3aGlsZSAoX19mcm9udGJ1ZmZlci5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUp
ICYgMSkKLSAgICAgICAgICAgIDsKLSAgICAgICAgYXV0byBjb25zdCByZXN1bHQgPSBkZXRhaWxz
OjpfX3NlbWFwaG9yZV9zZW1fZGVzdHJveShfX3NlbWFwaG9yZSk7Ci0gICAgICAgIGFzc2VydChy
ZXN1bHQpOwotICAgIH0KLSAgICBjb3VudGluZ19zZW1hcGhvcmUoY29uc3QgY291bnRpbmdfc2Vt
YXBob3JlICYpID0gZGVsZXRlOwotICAgIGNvdW50aW5nX3NlbWFwaG9yZSAmb3BlcmF0b3I9KGNv
bnN0IGNvdW50aW5nX3NlbWFwaG9yZSAmKSA9IGRlbGV0ZTsKLQotICBwcml2YXRlOgotICAgIGlu
bGluZSB2b2lkIF9fYWNxdWlyZV9mYXN0KCkgbm9leGNlcHQKLSAgICB7Ci0KLSAgICAgICAgaWYg
KF9fc2VtYXBob3JlX2V4cGVjdChfX2Zyb250YnVmZmVyLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJf
cmVsYXhlZCkgPiAxLCAxKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAzMjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXRhaWxzOjpfX3Nl
bWFwaG9yZV95aWVsZCgpOwotICAgICAgICAgICAgaWYgKF9fc2VtYXBob3JlX2V4cGVjdChfX2Zy
b250YnVmZmVyLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCkgPiAxLCAxKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbmxpbmUgdm9pZCBf
X2FjcXVpcmVfc2xvdyhzdGQ6Om1lbW9yeV9vcmRlciBvcmRlcikgbm9leGNlcHQgewotICAgICAg
ICBpZiAoX19mcm9udGJ1ZmZlci5mZXRjaF9zdWIoMiwgb3JkZXIpID4+IDEgPiAwKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBjb3VudF90eXBlIGNvbnN0IHJlc3VsdCA9IGRldGFpbHM6
Ol9fc2VtYXBob3JlX3NlbV93YWl0KF9fc2VtYXBob3JlKTsKLSNpZmRlZiBXSU4zMgotICAgICAg
ICBpZiAoIXJlc3VsdCkKLSAgICAgICAgeyAgIAotICAgICAgICAgICAgYXV0byBkID0gR2V0TGFz
dEVycm9yKCk7Ci0gICAgICAgICAgICBhc3NlcnQoZCA9PSBFUlJPUl9TVUNDRVNTKTsKLSAgICAg
ICAgfQotI2VuZGlmICAKLSAgICAgICAgYXNzZXJ0KHJlc3VsdCk7Ci0gICAgICAgIF9fYmFja2Zp
bGwoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdm9pZCBfX2JhY2tmaWxsKCkKLSAgICB7Ci0jaWZk
ZWYgX19zZW1hcGhvcmVfYmFja19idWZmZXJlZAotICAgICAgICBpZiAoX19zZW1hcGhvcmVfZXhw
ZWN0KF9fYmFja2J1ZmZlci5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpID09IDAsIDEp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoX19zZW1hcGhvcmVfZXhwZWN0KF9f
YmFja2J1ZmZlci5mZXRjaF9zdWIoMSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCkgPT0gMCwg
MCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9fYmFja2J1ZmZlci5mZXRjaF9hZGQoMSwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IC8vIHB1dCBiYWNrCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byBjb25zdCByZXN1bHQgPSBkZXRhaWxzOjpfX3NlbWFw
aG9yZV9zZW1fcG9zdChfX3NlbWFwaG9yZSwgMSk7Ci0gICAgICAgIGFzc2VydChyZXN1bHQpOwot
I2VuZGlmCi0gICAgfQotCi0gICAgZGV0YWlsczo6X19zZW1hcGhvcmVfc2VtX3QgX19zZW1hcGhv
cmU7Ci0gICAgYXRvbWljPGNvdW50X3R5cGU+IF9fZnJvbnRidWZmZXI7Ci0jaWZkZWYgX19zZW1h
cGhvcmVfYmFja19idWZmZXJlZAotICAgIGF0b21pYzxjb3VudF90eXBlPiBfX2JhY2tidWZmZXI7
Ci0jZW5kaWYKLQotICAgIGZyaWVuZCBzdHJ1Y3Qgc3luY2hyb25pYzsKLX07Ci0KLSNlbmRpZgot
Ci0jaWZuZGVmIF9fc2VtYXBob3JlX2N1ZGEKLSNkZWZpbmUgX19zZW1hcGhvcmVfYWJpX2EgX19z
ZW1hcGhvcmVfYWJpCi0jZWxzZQotI2RlZmluZSBfX3NlbWFwaG9yZV9hYmlfYSBfX3NlbWFwaG9y
ZV9hYmkgc3RhdGljCi0jZW5kaWYKLQotc3RydWN0IHN5bmNocm9uaWMgewotCi0gICAgdGVtcGxh
dGUgPGNsYXNzIFQ+Ci0gICAgX19zZW1hcGhvcmVfYWJpX2Egdm9pZCBzaWduYWwoY29uc3QgYXRv
bWljPFQ+Kiwgc2VtYXBob3JlX25vdGlmeSBub3RpZnkgPSBzZW1hcGhvcmVfbm90aWZ5X2FsbCkg
bm9leGNlcHQKLSAgICB7Ci0jaWZuZGVmIF9fc2VtYXBob3JlX2N1ZGEKLSAgICAgICAgaWYgKF9f
c2VtYXBob3JlX2V4cGVjdCghX19yZXZlcnNlYnVmZmVyLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJf
cmVsYXhlZCksIDEpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAoYXRvbWljX3RocmVh
ZF9mZW5jZSkoc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7Ci0gICAgICAgIGludCBjb25zdCB3
YWl0aW5nID0gX19yZXZlcnNlYnVmZmVyLmV4Y2hhbmdlKDAsIHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGF4ZWQpOwotICAgICAgICBpZiAoX19zZW1hcGhvcmVfZXhwZWN0KHdhaXRpbmcsIDApKQotICAg
ICAgICAgICAgX19zZW0ucmVsZWFzZSh3YWl0aW5nLCBub3RpZnksIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGVhc2UpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IFY+Ci0gICAgX19zZW1hcGhvcmVfYWJpX2Egdm9pZCB3YWl0X2NhcyhhdG9taWM8VD4qIGEsIFYg
b2xkdmFsLCBWIG5ld3ZhbCwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9v
cmRlcl9zZXFfY3N0KSBub2V4Y2VwdAotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCAxNjsgKytpLCBkZXRhaWxzOjpfX3NlbWFwaG9yZV95aWVsZCgpKSB7Ci0gICAgICAgICAgICBh
dXRvIG9sZCA9IG9sZHZhbDsKLSAgICAgICAgICAgIGlmIChfX3NlbWFwaG9yZV9leHBlY3QoYS0+
Y29tcGFyZV9leGNoYW5nZV93ZWFrKG9sZCwgbmV3dmFsLCBvcmRlciksIDEpKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBkZXRhaWxzOjpfX3NlbWFwaG9yZV9l
eHBvbmVudGlhbF9iYWNrb2ZmIGI7Ci0gICAgICAgIHdoaWxlICgxKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBiLnNsZWVwKCk7Ci0gICAgICAgICAgICBhdXRvIG9sZCA9IG9sZHZhbDsKLSAgICAg
ICAgICAgIGlmIChfX3NlbWFwaG9yZV9leHBlY3QoYS0+Y29tcGFyZV9leGNoYW5nZV93ZWFrKG9s
ZCwgbmV3dmFsLCBvcmRlciksIDEpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBWPgotICAgIF9fc2VtYXBo
b3JlX2FiaV9hIHZvaWQgd2FpdChhdG9taWM8VD4gY29uc3QgKmEsIFYgb2xkdmFsLCBzdGQ6Om1l
bW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0Ci0g
ICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyArK2ksIGRldGFpbHM6Ol9fc2Vt
YXBob3JlX3lpZWxkKCkpCi0gICAgICAgICAgICBpZiAoX19zZW1hcGhvcmVfZXhwZWN0KGEtPmxv
YWQob3JkZXIpICE9IG9sZHZhbCwgMSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBkZXRhaWxzOjpfX3NlbWFwaG9yZV9leHBvbmVudGlhbF9iYWNrb2ZmIGI7Ci0gICAgICAgIGRv
Ci0gICAgICAgIHsKLSNpZm5kZWYgX19zZW1hcGhvcmVfY3VkYQotICAgICAgICAgICAgX19yZXZl
cnNlYnVmZmVyLmZldGNoX2FkZCgxLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICAg
ICAgICAgIChhdG9taWNfdGhyZWFkX2ZlbmNlKShzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsK
LSAgICAgICAgICAgIGlmIChfX3NlbWFwaG9yZV9leHBlY3QoYS0+bG9hZChvcmRlcikgIT0gb2xk
dmFsLCAwKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvbnN0IHdhaXRp
bmcgPSBfX3JldmVyc2VidWZmZXIuZXhjaGFuZ2UoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhl
ZCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh3YWl0aW5nKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgIF9fc2VtLmFjcXVp
cmUoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7IC8vIHV1dXV1dXV1aGhoaCwgdGhpcyBpcyBy
ZWFsbHkgd2VpcmQgZm9yIGZvci91bnRpbAotICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgX19zZW0ucmVsZWFzZSh3YWl0aW5nIC0gMSwgc2VtYXBob3JlX25vdGlmeV9h
bGwsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOyBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBfX3Nl
bS5fX2FjcXVpcmVfc2xvdyhzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSNlbHNlCi0gICAg
ICAgICAgICBiLnNsZWVwKCk7Ci0jZW5kaWYKLSAgICAgICAgfSB3aGlsZSAoYS0+bG9hZChvcmRl
cikgPT0gb2xkdmFsKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVj4K
LSAgICBfX3NlbWFwaG9yZV9hYmlfYSBib29sIHRyeV93YWl0KGF0b21pYzxUPiBjb25zdCAqYSwg
ViBvbGR2YWwsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2Vx
X2NzdCkgbm9leGNlcHQKLSAgICB7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMjg7
ICsraSwgZGV0YWlsczo6X19zZW1hcGhvcmVfeWllbGQoKSkKLSAgICAgICAgICAgIGlmIChfX3Nl
bWFwaG9yZV9leHBlY3QoYS0+bG9hZChvcmRlcikgIT0gb2xkdmFsLCAxKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIF9f
c2VtYXBob3JlX2FiaSBpbmxpbmUgc3luY2hyb25pYyhjb3VudGluZ19zZW1hcGhvcmU6OmNvdW50
X3R5cGUgZGVzaXJlZCkgbm9leGNlcHQKLSNpZm5kZWYgX19zZW1hcGhvcmVfY3VkYQotICAgICAg
ICA6IF9fc2VtKGRlc2lyZWQpLCBfX3JldmVyc2VidWZmZXJ7MH0KLSNlbmRpZgotICAgIHsKLSAg
ICB9Ci0gICAgc3luY2hyb25pYyhjb25zdCBzeW5jaHJvbmljICYpID0gZGVsZXRlOwotICAgIHN5
bmNocm9uaWMgJm9wZXJhdG9yPShjb25zdCBzeW5jaHJvbmljICYpID0gZGVsZXRlOwotCi0jaWZu
ZGVmIF9fc2VtYXBob3JlX2N1ZGEKLSAgICBjb3VudGluZ19zZW1hcGhvcmUgICAgICAgICAgICAg
ICAgICAgICBfX3NlbTsKLSAgICBhdG9taWM8Y291bnRpbmdfc2VtYXBob3JlOjpjb3VudF90eXBl
PiBfX3JldmVyc2VidWZmZXJ7IDAgfTsKLSNlbmRpZgotfTsKLQotI2lmbmRlZiBfX3NlbWFwaG9y
ZV9jdWRhCi1leHRlcm4gX19zZW1hcGhvcmVfYWJpIHN5bmNocm9uaWMgKl9fYXRvbWljX3dhaXRf
Z2V0X3NlbWFwaG9yZSh2b2lkIGNvbnN0ICpwdHIpOwotI2VuZGlmCi0KLXRlbXBsYXRlIDxjbGFz
cyBUPgotX19zZW1hcGhvcmVfYWJpIHZvaWQgYXRvbWljX3NpZ25hbF9leHBsaWNpdChjb25zdCBh
dG9taWM8VD4qYSwgc2VtYXBob3JlX25vdGlmeSBub3RpZnkpCi17Ci0jaWZuZGVmIF9fc2VtYXBo
b3JlX2N1ZGEKLSAgICBfX2F0b21pY193YWl0X2dldF9zZW1hcGhvcmUoYSktPgotI2Vsc2UKLSAg
ICBzeW5jaHJvbmljOjoKLSNlbmRpZgotICAgIHNpZ25hbChhLCBub3RpZnkpOwotfQotdGVtcGxh
dGUgPGNsYXNzIFQ+Ci1fX3NlbWFwaG9yZV9hYmkgdm9pZCBhdG9taWNfc2lnbmFsKGNvbnN0IGF0
b21pYzxUPiogYSkKLXsKLSNpZm5kZWYgX19zZW1hcGhvcmVfY3VkYQotICAgIF9fYXRvbWljX3dh
aXRfZ2V0X3NlbWFwaG9yZShhKS0+Ci0jZWxzZQotICAgIHN5bmNocm9uaWM6OgotI2VuZGlmCi0g
ICAgc2lnbmFsKGEpOwotfQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFY+Ci1fX3NlbWFwaG9y
ZV9hYmkgdm9pZCBhdG9taWNfd2FpdF9jYXNfZXhwbGljaXQoYXRvbWljPFQ+KiBhLCBWIG9sZHZh
bCwgViBuZXd2YWwsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyKQotewotI2lmbmRlZiBfX3NlbWFw
aG9yZV9jdWRhCi0gICAgX19hdG9taWNfd2FpdF9nZXRfc2VtYXBob3JlKGEpLT4KLSNlbHNlCi0g
ICAgc3luY2hyb25pYzo6Ci0jZW5kaWYKLSAgICB3YWl0X2NhcyhhLCBvbGR2YWwsIG5ld3ZhbCwg
b3JkZXIpOwotfQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFY+Ci1fX3NlbWFwaG9yZV9hYmkg
dm9pZCBhdG9taWNfd2FpdF9jYXMoYXRvbWljPFQ+KiBhLCBWIG9sZHZhbCwgViBuZXd2YWwpCi17
Ci0jaWZuZGVmIF9fc2VtYXBob3JlX2N1ZGEKLSAgICBfX2F0b21pY193YWl0X2dldF9zZW1hcGhv
cmUoYSktPgotI2Vsc2UKLSAgICBzeW5jaHJvbmljOjoKLSNlbmRpZgotICAgIHdhaXRfY2FzKGEs
IG9sZHZhbCwgbmV3dmFsKTsKLX0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBWPgotX19zZW1h
cGhvcmVfYWJpIHZvaWQgYXRvbWljX3dhaXRfZXhwbGljaXQoY29uc3QgYXRvbWljPFQ+KiBhLCBW
IG9sZHZhbCwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIpCi17Ci0jaWZuZGVmIF9fc2VtYXBob3Jl
X2N1ZGEKLSAgICBfX2F0b21pY193YWl0X2dldF9zZW1hcGhvcmUoYSktPgotI2Vsc2UKLSAgICBz
eW5jaHJvbmljOjoKLSNlbmRpZgotICAgIHdhaXQoYSwgb2xkdmFsLCBvcmRlcik7Ci19Ci10ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVj4KLV9fc2VtYXBob3JlX2FiaSB2b2lkIGF0b21pY193YWl0
KGNvbnN0IGF0b21pYzxUPiogYSwgViBvbGR2YWwpCi17Ci0jaWZuZGVmIF9fc2VtYXBob3JlX2N1
ZGEKLSAgICBfX2F0b21pY193YWl0X2dldF9zZW1hcGhvcmUoYSktPgotI2Vsc2UKLSAgICBzeW5j
aHJvbmljOjoKLSNlbmRpZgotICAgIHdhaXQoYSwgb2xkdmFsKTsKLX0KLXRlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBWPgotX19zZW1hcGhvcmVfYWJpIHZvaWQgYXRvbWljX3RyeV93YWl0X2V4cGxp
Y2l0KGNvbnN0IGF0b21pYzxUPiogYSwgViBvbGR2YWwsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVy
KQotewotI2lmbmRlZiBfX3NlbWFwaG9yZV9jdWRhCi0gICAgX19hdG9taWNfd2FpdF9nZXRfc2Vt
YXBob3JlKGEpLT4KLSNlbHNlCi0gICAgc3luY2hyb25pYzo6Ci0jZW5kaWYKLSAgICB0cnlfd2Fp
dChhLCBvbGR2YWwsIG9yZGVyKTsKLX0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBWPgotX19z
ZW1hcGhvcmVfYWJpIHZvaWQgYXRvbWljX3RyeV93YWl0KGNvbnN0IGF0b21pYzxUPiogYSwgViBv
bGR2YWwpCi17Ci0jaWZuZGVmIF9fc2VtYXBob3JlX2N1ZGEKLSAgICBfX2F0b21pY193YWl0X2dl
dF9zZW1hcGhvcmUoYSktPgotI2Vsc2UKLSAgICBzeW5jaHJvbmljOjoKLSNlbmRpZgotICAgIHRy
eV93YWl0KGEsIG9sZHZhbCk7Ci19Ci0KLX0KLX0gLy8gbmFtZXNwYWNlIGV4cGVyaW1lbnRhbAot
fQotCi0jZW5kaWYgLy9fX3NlbWFwaG9yZV9fCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci9vZ2lyb3V4L2xpYi9zZW1hcGhvcmUuY3BwIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvb2dpcm91eC9saWIvc2VtYXBob3JlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjdlMmEyZjhlYWRjNzFiZmY0ODVlYjhkZGYzYTQxZWNlNjBhNWVkMC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci9vZ2lyb3V4L2xpYi9zZW1hcGhvcmUuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzY2ICswLDAgQEAKLS8qCi0KLUNvcHlyaWdodCAoYykgMjAxNywgTlZJRElBIENv
cnBvcmF0aW9uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9u
LAotYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgotCi0xLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKLWxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi10aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uCi1hbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi1JTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywKLUJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi1EQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GCi1MSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCi1PUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK
LU9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotKi8KLSNpZmRlZiBfX3NlbWFw
aG9yZV9jdWRhCi1uYW1lc3BhY2UgY3VkYQotewotI2Vsc2UKLSNpbmNsdWRlICJzZW1hcGhvcmUi
Ci1uYW1lc3BhY2Ugc3RkCi17Ci0jZW5kaWYgLy9fX3NlbWFwaG9yZV9jdWRhCi0KLW5hbWVzcGFj
ZSBleHBlcmltZW50YWwKLXsKLWlubGluZSBuYW1lc3BhY2UgdjEgewotbmFtZXNwYWNlIGRldGFp
bHMKLXsKLSNpZmRlZiBfX3NlbWFwaG9yZV9jdWRhCi0KLSNlbHNlCi0KLSNpZmRlZiBfX2xpbnV4
X18KLS8vIE9uIExpbnV4LCB3ZSBtYWtlIHVzZSBvZiB0aGUga2VybmVsIG1lbW9yeSB3YWl0IG9w
ZXJhdGlvbnMuIFRoZXNlIGhhdmUgYmVlbiBhdmFpbGFibGUgZm9yIGEgbG9uZyB0aW1lLgotdGVt
cGxhdGUgPGNsYXNzIEE+Ci1pbmxpbmUgY29uc3Qgdm9pZCAqX19zZW1hcGhvcmVfZml4YWxpZ24o
QSAmYSkKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBKSA8PSBzaXplb2YoaW50KSwgIkxp
bnV4IG9ubHkgc3VwcG9ydHMgJ2ludCcgZm9yIEZ1dGV4LiIpOwotICAgIHJldHVybiAoY29uc3Qg
dm9pZCAqKSgoaW50cHRyX3QpJmEgJiB+KHNpemVvZihpbnQpIC0gMSkpOwotfQotaW5saW5lIGlu
dCBfX3NlbWFwaG9yZV9yZWFkaW50KGNvbnN0IHZvaWQgKnApCi17Ci0gICAgaW50IGk7Ci0gICAg
bWVtY3B5KCZpLCBwLCBzaXplb2YoaW50KSk7Ci0gICAgcmV0dXJuIGk7Ci19Ci10ZW1wbGF0ZSA8
Y2xhc3MgQSwgY2xhc3MgVj4KLWlubGluZSB2b2lkIF9fc2VtYXBob3JlX3dhaXQoQSAmYSwgViB2
KQotewotICAgIGF1dG8gcCA9IF9fc2VtYXBob3JlX2ZpeGFsaWduKGEpOwotICAgIGF1dG8gaSA9
IF9fc2VtYXBob3JlX3JlYWRpbnQocCk7Ci0gICAgYXNtIHZvbGF0aWxlKCIiIDo6Ci0gICAgICAg
ICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKLSAgICBpZiAoYS5sb2FkKG1lbW9yeV9vcmRlcl9y
ZWxheGVkKSAhPSB2KQotICAgICAgICByZXR1cm47Ci0gICAgc3lzY2FsbChTWVNfZnV0ZXgsIHAs
IEZVVEVYX1dBSVRfUFJJVkFURSwgaSwgMCwgMCwgMCk7Ci19Ci10ZW1wbGF0ZSA8Y2xhc3MgQSwg
Y2xhc3MgViwgY2xhc3MgUmVwLCBjbGFzcyBQZXJpb2Q+Ci12b2lkIF9fc2VtYXBob3JlX3dhaXRf
dGltZWQoQSAmYSwgViB2LCBjb25zdCBjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiAmdCkK
LXsKLSAgICBhdXRvIHAgPSBfX3NlbWFwaG9yZV9maXhhbGlnbihhKTsKLSAgICBhdXRvIGkgPSBf
X3NlbWFwaG9yZV9yZWFkaW50KHApOwotICAgIGFzbSB2b2xhdGlsZSgiIiA6OgotICAgICAgICAg
ICAgICAgICAgICAgOiAibWVtb3J5Iik7Ci0gICAgaWYgKGEubG9hZChtZW1vcnlfb3JkZXJfcmVs
YXhlZCkgIT0gdikKLSAgICAgICAgcmV0dXJuOwotICAgIHN5c2NhbGwoU1lTX2Z1dGV4LCBwLCBG
VVRFWF9XQUlUX1BSSVZBVEUsIGksIF9fc2VtYXBob3JlX3RvX3RpbWVzcGVjKHQpLCAwLCAwKTsK
LX0KLXRlbXBsYXRlIDxjbGFzcyBBPgotaW5saW5lIHZvaWQgX19zZW1hcGhvcmVfd2FrZV9vbmUo
QSAmYSkKLXsKLSAgICBzeXNjYWxsKFNZU19mdXRleCwgX19zZW1hcGhvcmVfZml4YWxpZ24oYSks
IEZVVEVYX1dBS0VfUFJJVkFURSwgMSwgMCwgMCwgMCk7Ci19Ci10ZW1wbGF0ZSA8Y2xhc3MgQT4K
LWlubGluZSB2b2lkIF9fc2VtYXBob3JlX3dha2VfYWxsKEEgJmEpCi17Ci0gICAgc3lzY2FsbChT
WVNfZnV0ZXgsIF9fc2VtYXBob3JlX2ZpeGFsaWduKGEpLCBGVVRFWF9XQUtFX1BSSVZBVEUsIElO
VF9NQVgsIDAsIDAsIDApOwotfQotdGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzIFY+Ci1pbmxpbmUg
dm9pZCBfX3NlbWFwaG9yZV93YWl0KHZvbGF0aWxlIEEgJmEsIFYgdikKLXsKLSAgICBhdXRvIHAg
PSBfX3NlbWFwaG9yZV9maXhhbGlnbihhKTsKLSAgICBhdXRvIGkgPSBfX3NlbWFwaG9yZV9yZWFk
aW50KHApOwotICAgIGFzbSB2b2xhdGlsZSgiIiA6OgotICAgICAgICAgICAgICAgICAgICAgOiAi
bWVtb3J5Iik7Ci0gICAgaWYgKGEubG9hZChtZW1vcnlfb3JkZXJfcmVsYXhlZCkgIT0gdikKLSAg
ICAgICAgcmV0dXJuOwotICAgIHN5c2NhbGwoU1lTX2Z1dGV4LCBwLCBGVVRFWF9XQUlULCBpLCAw
LCAwLCAwKTsKLX0KLXRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBWLCBjbGFzcyBSZXAsIGNsYXNz
IFBlcmlvZD4KLXZvaWQgX19zZW1hcGhvcmVfd2FpdF90aW1lZCh2b2xhdGlsZSBBICZhLCBWIHYs
IGNvbnN0IGNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+ICZ0KQotewotICAgIGF1dG8gcCA9
IF9fc2VtYXBob3JlX2ZpeGFsaWduKGEpOwotICAgIGF1dG8gaSA9IF9fc2VtYXBob3JlX3JlYWRp
bnQocCk7Ci0gICAgYXNtIHZvbGF0aWxlKCIiIDo6Ci0gICAgICAgICAgICAgICAgICAgICA6ICJt
ZW1vcnkiKTsKLSAgICBpZiAoYS5sb2FkKG1lbW9yeV9vcmRlcl9yZWxheGVkKSAhPSB2KQotICAg
ICAgICByZXR1cm47Ci0gICAgc3lzY2FsbChTWVNfZnV0ZXgsIHAsIEZVVEVYX1dBSVQsIGksIGRl
dGFpbHM6Ol9fc2VtYXBob3JlX3RvX3RpbWVzcGVjKHQpLCAwLCAwKTsKLX0KLXRlbXBsYXRlIDxj
bGFzcyBBPgotaW5saW5lIHZvaWQgX19zZW1hcGhvcmVfd2FrZV9vbmUodm9sYXRpbGUgQSAmYSkK
LXsKLSAgICBzeXNjYWxsKFNZU19mdXRleCwgX19zZW1hcGhvcmVfZml4YWxpZ24oYSksIEZVVEVY
X1dBS0UsIDEsIDAsIDAsIDApOwotfQotdGVtcGxhdGUgPGNsYXNzIEE+Ci1pbmxpbmUgdm9pZCBf
X3NlbWFwaG9yZV93YWtlX2FsbCh2b2xhdGlsZSBBICZhKQotewotICAgIHN5c2NhbGwoU1lTX2Z1
dGV4LCBfX3NlbWFwaG9yZV9maXhhbGlnbihhKSwgRlVURVhfV0FLRSwgSU5UX01BWCwgMCwgMCwg
MCk7Ci19Ci0jZW5kaWYgLy8gX19saW51eF9fCi0KLSNpZiBkZWZpbmVkKFdJTjMyKSAmJiBfV0lO
MzJfV0lOTlQgPj0gMHgwNjAyCi0vLyBPbiBXaW5kb3dzLCB3ZSBtYWtlIHVzZSBvZiB0aGUga2Vy
bmVsIG1lbW9yeSB3YWl0IG9wZXJhdGlvbnMgYXMgd2VsbC4gVGhlc2UgZmlyc3QgYmVjYW1lIGF2
YWlsYWJsZSB3aXRoIFdpbmRvd3MgOC4KLXRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBWPgotdm9p
ZCBfX3NlbWFwaG9yZV93YWl0KEEgJmEsIFYgdikKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihWKSA8PSA4LCAiV2luZG93cyBvbmx5IGFsbG93cyBzaXplcyBiZXR3ZWVuIDFCIGFuZCA4QiBm
b3IgV2FpdE9uQWRkcmVzcy4iKTsKLSAgICBXYWl0T25BZGRyZXNzKChQVk9JRCkmYSwgKFBWT0lE
KSZ2LCBzaXplb2YodiksIC0xKTsKLX0KLXRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBWLCBjbGFz
cyBSZXAsIGNsYXNzIFBlcmlvZD4KLXZvaWQgX19zZW1hcGhvcmVfd2FpdF90aW1lZChBICZhLCBW
IHYsIGNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+IGNvbnN0ICZkZWx0YSkKLXsKLSAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihWKSA8PSA4LCAiV2luZG93cyBvbmx5IGFsbG93cyBzaXplcyBi
ZXR3ZWVuIDFCIGFuZCA4QiBmb3IgV2FpdE9uQWRkcmVzcy4iKTsKLSAgICBXYWl0T25BZGRyZXNz
KChQVk9JRCkmYSwgKFBWT0lEKSZ2LCBzaXplb2YodiksIChEV09SRCljaHJvbm86OmR1cmF0aW9u
X2Nhc3Q8Y2hyb25vOjptaWxsaXNlY29uZHM+KGRlbHRhKS5jb3VudCgpKTsKLX0KLXRlbXBsYXRl
IDxjbGFzcyBBPgotaW5saW5lIHZvaWQgX19zZW1hcGhvcmVfd2FrZV9vbmUoQSAmYSkKLXsKLSAg
ICBXYWtlQnlBZGRyZXNzU2luZ2xlKChQVk9JRCkmYSk7Ci19Ci10ZW1wbGF0ZSA8Y2xhc3MgQT4K
LWlubGluZSB2b2lkIF9fc2VtYXBob3JlX3dha2VfYWxsKEEgJmEpCi17Ci0gICAgV2FrZUJ5QWRk
cmVzc0FsbCgoUFZPSUQpJmEpOwotfQotI2VuZGlmIC8vIGRlZmluZWQoV0lOMzIpICYmIF9XSU4z
Ml9XSU5OVCA+PSAweDA2MDIKLQotI2VuZGlmIC8vIF9fc2VtYXBob3JlX2N1ZGEKLQotdGVtcGxh
dGU8Y2xhc3MgRm4+Ci1fX3NlbWFwaG9yZV9hYmkgYm9vbCBfX2JpbmFyeV9zZW1hcGhvcmVfYWNx
dWlyZV9zbG93KAotICAgIGF0b21pYzxiaW5hcnlfc2VtYXBob3JlOjpjb3VudF90eXBlPiYgYXRv
bSwgYXRvbWljPGJpbmFyeV9zZW1hcGhvcmU6OmNvdW50X3R5cGU+JiB0aWNrZXQsCi0gICAgYXRv
bWljPGJpbmFyeV9zZW1hcGhvcmU6OmNvdW50X3R5cGU+JiB0b2NrZXQsIGJvb2wgY29uc3QmLCBG
biBmbikgbm9leGNlcHQKLXsKLSAgICB1aW50MzJfdCBjb25zdCB0aWNrID0gdGlja2V0LmZldGNo
X2FkZCgxLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICB1aW50MzJfdCB0b2NrID0g
dG9ja2V0LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgdWludDMyX3QgY29u
dGJpdCA9IDB1OwotI2lmZGVmIF9fc2VtYXBob3JlX2Zhc3RfcGF0aAotICAgIHVpbnQzMl90IHN1
bSA9IDB1OwotICAgIHdoaWxlKDEpIHsKLSAgICAgICAgaWYoc3VtIDwgNjQqMTAyNCkgewotI2Vs
c2UKLSAgICB3aGlsZSgxKSB7Ci0jZW5kaWYKLSAgICAgICAgICAgIHVpbnQzMl90IGNvbnN0IGRl
bHRhID0gKHRpY2sgLSB0b2NrKSAqIDEyODsKLSNpZiAhZGVmaW5lZChfX0NVREFfQVJDSF9fKQot
ICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKHN0ZDo6Y2hyb25vOjpuYW5v
c2Vjb25kcyhkZWx0YSkpOwotI2VsaWYgZGVmaW5lZChfX2hhc19jdWRhX25hbm9zbGVlcCkKLSAg
ICAgICAgICAgIGRldGFpbHM6Ol9fbW1lX25hbm9zbGVlcChkZWx0YSk7Ci0jZW5kaWYKLSNpZmRl
ZiBfX3NlbWFwaG9yZV9mYXN0X3BhdGgKLSAgICAgICAgICAgIHN1bSArPSBkZWx0YTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIAotICAgICAgICB7Ci0gICAgICAgICAgICB1aW50MzJfdCBvbGQg
PSBhdG9tLmZldGNoX29yKGJpbmFyeV9zZW1hcGhvcmU6Ol9fc2xvd2JpdCwgc3RkOjptZW1vcnlf
b3JkZXJfcmVsYXhlZCkgfCBiaW5hcnlfc2VtYXBob3JlOjpfX3Nsb3diaXQ7Ci0gICAgICAgICAg
ICBpZiAoKG9sZCAmIGJpbmFyeV9zZW1hcGhvcmU6Ol9fdmFsdWJpdCkgIT0gMCkgewotICAgICAg
ICAgICAgICAgIGF0b21pY190aHJlYWRfZmVuY2Uoc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7
Ci0gICAgICAgICAgICAgICAgaWYoIWZuKG9sZCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB1aW50MzJfdCBvbGQg
PSBhdG9tLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0jZWxzZQotICAgICAgICB1
aW50MzJfdCBvbGQgPSBhdG9tLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAg
ICAgIGlmKCFmbihvbGQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0gICAg
ICAgIHRvY2sgPSB0b2NrZXQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICAg
ICAgaWYodG9jayAhPSB0aWNrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHdoaWxl
ICgob2xkICYgYmluYXJ5X3NlbWFwaG9yZTo6X192YWx1Yml0KSA9PSAwKSB7Ci0gICAgICAgICAg
ICBvbGQgJj0gfmJpbmFyeV9zZW1hcGhvcmU6Ol9fbG9ja2JpdDsKLSAgICAgICAgICAgIHVpbnQz
Ml90IG5leHQgPSBvbGQgLSBjb250Yml0ICsgYmluYXJ5X3NlbWFwaG9yZTo6X192YWx1Yml0Owot
ICAgICAgICAgICAgaWYgKGF0b20uY29tcGFyZV9leGNoYW5nZV93ZWFrKG9sZCwgbmV4dCwgc3Rk
OjptZW1vcnlfb3JkZXJfYWNxdWlyZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoY29udGJpdCA9
PSAwKQotICAgICAgICAgICAgYXRvbS5mZXRjaF9hZGQoY29udGJpdCA9IGJpbmFyeV9zZW1hcGhv
cmU6Ol9fY29udGJpdCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgfQotfQotCi19
Ci0KLSNpZmRlZiBfX3NlbWFwaG9yZV9mYXN0X3BhdGgKLV9fc2VtYXBob3JlX2FiaSB2b2lkIGJp
bmFyeV9zZW1hcGhvcmU6Ol9fcmVsZWFzZV9zbG93KGNvdW50X3R5cGUgb2xkKSBub2V4Y2VwdAot
ewotICAgIGNvdW50X3R5cGUgbG9jayA9IDA7Ci0gICAgZG8gewotICAgICAgICBvbGQgJj0gfl9f
bG9ja2JpdDsKLSAgICAgICAgbG9jayA9IChvbGQgJiBfX3Nsb3diaXQpID8gX19sb2NrYml0IDog
MDsKLSAgICB9IHdoaWxlICghX19hdG9tLmNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhvbGQsIChvbGQg
fCBsb2NrKSAmIH4oX192YWx1Yml0IHwgX19zbG93Yml0KSwgc3RkOjptZW1vcnlfb3JkZXJfcmVs
ZWFzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCkpOwotICAgIGlmIChsb2NrICE9IDApCi0g
ICAgewotICAgICAgICBhdG9taWNfdGhyZWFkX2ZlbmNlKHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9j
c3QpOwotICAgICAgICBkZXRhaWxzOjpfX3NlbWFwaG9yZV93YWtlX2FsbChfX2F0b20pOwotICAg
ICAgICBfX2F0b20uZmV0Y2hfYW5kKH5fX2xvY2tiaXQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVh
c2UpOwotICAgIH0KLX0KLSNlbmRpZgotCi1fX3NlbWFwaG9yZV9hYmkgdm9pZCBiaW5hcnlfc2Vt
YXBob3JlOjpfX2FjcXVpcmVfc2xvdygpIG5vZXhjZXB0Ci17Ci0gICAgYXV0byBjb25zdCBmbiA9
IFs9XSBfX3NlbWFwaG9yZV9hYmkgKHVpbnQzMl90IG9sZCkgLT4gYm9vbCB7IAotI2lmZGVmIF9f
c2VtYXBob3JlX2Zhc3RfcGF0aAotICAgICAgICBkZXRhaWxzOjpfX3NlbWFwaG9yZV93YWl0KF9f
YXRvbSwgb2xkKTsgCi0jZWxzZQotICAgICAgICAodm9pZClvbGQ7Ci0jZW5kaWYKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfTsKLSAgICBkZXRhaWxzOjpfX2JpbmFyeV9zZW1hcGhvcmVfYWNx
dWlyZV9zbG93KF9fYXRvbSwgX190aWNrZXQsIF9fdG9ja2V0LCBfX3N0b2xlbiwgZm4pOwotfQot
Ci0jaWZuZGVmIF9fc2VtYXBob3JlX2N1ZGEKLQotX19zZW1hcGhvcmVfYWJpIGJvb2wgYmluYXJ5
X3NlbWFwaG9yZTo6X19hY3F1aXJlX3Nsb3dfdGltZWQoc3RkOjpjaHJvbm86OnRpbWVfcG9pbnQ8
ZGV0YWlsczo6X19zZW1hcGhvcmVfY2xvY2ssIGRldGFpbHM6Ol9fc2VtYXBob3JlX2R1cmF0aW9u
PiBjb25zdCYgYWJzX3RpbWUpIG5vZXhjZXB0IAotewotICAgIGF1dG8gY29uc3QgZm4gPSBbPV0o
dWludDMyX3Qgb2xkKSBfX3NlbWFwaG9yZV9hYmkgLT4gYm9vbCB7IAotI2lmZGVmIF9fc2VtYXBo
b3JlX2Zhc3RfcGF0aAotICAgICAgICBhdXRvIHJlbF90aW1lID0gYWJzX3RpbWUgLSBkZXRhaWxz
OjpfX3NlbWFwaG9yZV9jbG9jazo6bm93KCk7Ci0gICAgICAgIGlmKHJlbF90aW1lID4gc3RkOjpj
aHJvbm86Om1pY3Jvc2Vjb25kcygwKSkKLSAgICAgICAgICAgIGRldGFpbHM6Ol9fc2VtYXBob3Jl
X3dhaXRfdGltZWQoX19hdG9tLCBvbGQsIHJlbF90aW1lKTsgCi0jZWxzZQotICAgICAgICAodm9p
ZClvbGQ7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIGRldGFpbHM6Ol9fc2VtYXBob3JlX2Nsb2Nr
Ojpub3coKSA8IGFic190aW1lOwotICAgIH07Ci0gICAgcmV0dXJuIGRldGFpbHM6Ol9fYmluYXJ5
X3NlbWFwaG9yZV9hY3F1aXJlX3Nsb3coX19hdG9tLCBfX3RpY2tldCwgX190b2NrZXQsIF9fc3Rv
bGVuLCBmbik7Ci19Ci0KLSNlbmRpZgotCi0jaWZuZGVmIF9fc2VtYXBob3JlX3NlbQotCi1fX3Nl
bWFwaG9yZV9hYmkgYm9vbCBjb3VudGluZ19zZW1hcGhvcmU6Ol9fZmV0Y2hfc3ViX2lmX3Nsb3co
Y291bnRpbmdfc2VtYXBob3JlOjpjb3VudF90eXBlIG9sZCwgc3RkOjptZW1vcnlfb3JkZXIgb3Jk
ZXIpIG5vZXhjZXB0Ci17Ci0KLSAgICBkbwotICAgIHsKLSAgICAgICAgb2xkICY9IH5fX2xvY2tt
YXNrOwotICAgICAgICBpZiAoYXRvbS5jb21wYXJlX2V4Y2hhbmdlX3dlYWsob2xkLCBvbGQgLSAo
MSA8PCBfX3NoaWZ0KSwgb3JkZXIsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSB3aGlsZSAoKG9sZCA+PiBfX3NoaWZ0KSA+PSAxKTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmZGVmIF9fc2VtYXBob3JlX2Zhc3RfcGF0aAot
dm9pZCBjb3VudGluZ19zZW1hcGhvcmU6Ol9fZmV0Y2hfYWRkX3Nsb3coY291bnRpbmdfc2VtYXBo
b3JlOjpjb3VudF90eXBlIHRlcm0sIGNvdW50aW5nX3NlbWFwaG9yZTo6Y291bnRfdHlwZSBvbGQs
IHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyLCBzZW1hcGhvcmVfbm90aWZ5IG5vdGlmeSkgbm9leGNl
cHQKLXsKLSAgICB3aGlsZSAoMSkKLSAgICB7Ci0KLSAgICAgICAgYm9vbCBjb25zdCBhcHBseV9s
b2NrID0gKChvbGQgJiBfX2NvbnRtYXNrKSAhPSAwKSAmJiAobm90aWZ5ICE9IHNlbWFwaG9yZV9u
b3RpZnk6Om5vbmUpOwotICAgICAgICBpbnQgY29uc3Qgc2V0ID0gKChvbGQgJiBfX3ZhbHVtYXNr
KSArICh0ZXJtIDw8IF9fc2hpZnQpKSB8IChhcHBseV9sb2NrID8gX19sb2NrbWFzayA6IDApOwot
Ci0gICAgICAgIG9sZCAmPSB+X19sb2NrbWFzazsKLSAgICAgICAgaWYgKGF0b20uY29tcGFyZV9l
eGNoYW5nZV93ZWFrKG9sZCwgc2V0LCBvcmRlciwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhcHBseV9sb2NrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHN3aXRjaCAobm90aWZ5KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIHNlbWFwaG9yZV9ub3RpZnlfYWxsOgotICAgICAgICAgICAgICAgICAg
ICBkZXRhaWxzOjpfX3NlbWFwaG9yZV93YWtlX2FsbChhdG9tKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBzZW1hcGhvcmVfbm90aWZ5X29uZToKLSAg
ICAgICAgICAgICAgICAgICAgZGV0YWlsczo6X19zZW1hcGhvcmVfd2FrZV9vbmUoYXRvbSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ugc2VtYXBob3Jl
X25vdGlmeV9ub25lOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYXRvbS5mZXRjaF9hbmQofl9fbG9ja21hc2ssIHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0jZW5kaWYKLQotX19zZW1hcGhvcmVfYWJpIHZvaWQgY291bnRp
bmdfc2VtYXBob3JlOjpfX2FjcXVpcmVfc2xvdyhzdGQ6Om1lbW9yeV9vcmRlciBvcmRlcikgbm9l
eGNlcHQKLXsKLQotICAgIGludCBvbGQ7Ci0gICAgZGV0YWlsczo6X19zZW1hcGhvcmVfZXhwb25l
bnRpYWxfYmFja29mZiBiOwotI2lmZGVmIF9fc2VtYXBob3JlX2Zhc3RfcGF0aAotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgMjsgKytpKQotICAgIHsKLSNlbHNlCi0gICAgd2hpbGUgKDEpCi0gICAg
ewotI2VuZGlmCi0gICAgICAgIGIuc2xlZXAoKTsKLSAgICAgICAgb2xkID0gYXRvbS5sb2FkKG9y
ZGVyKTsKLSAgICAgICAgaWYgKChvbGQgPj4gX19zaGlmdCkgPj0gMSkKLSAgICAgICAgICAgIGdv
dG8gZG9uZTsKLSAgICB9Ci0jaWZkZWYgX19zZW1hcGhvcmVfZmFzdF9wYXRoCi0gICAgd2hpbGUg
KDEpCi0gICAgewotICAgICAgICBvbGQgPSBhdG9tLmZldGNoX29yKF9fY29udG1hc2ssIHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGF4ZWQpIHwgX19jb250bWFzazsKLSAgICAgICAgaWYgKChvbGQgPj4g
X19zaGlmdCkgPj0gMSkKLSAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgZGV0YWlsczo6
X19zZW1hcGhvcmVfd2FpdChhdG9tLCBvbGQpOwotICAgICAgICBvbGQgPSBhdG9tLmxvYWQob3Jk
ZXIpOwotICAgICAgICBpZiAoKG9sZCA+PiBfX3NoaWZ0KSA+PSAxKQotICAgICAgICAgICAgZ290
byBkb25lOwotICAgIH0KLSNlbmRpZgotZG9uZToKLSNpZmRlZiBfX3NlbWFwaG9yZV9mYXN0X3Bh
dGgKLSAgICB3aGlsZSAob2xkICYgX19sb2NrbWFzaykKLSAgICAgICAgb2xkID0gYXRvbS5sb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotI2Vsc2UKLSAgICA7Ci0jZW5kaWYKLX0KLSNl
bmRpZgotCi0jaWZuZGVmIF9fc2VtYXBob3JlX2N1ZGEKLQotc3RhdGljIGNvbnN0ZXhwciBpbnQg
X19hdG9taWNfd2FpdF90YWJsZV9lbnRyeV9zaXplID0gc2l6ZW9mKHN5bmNocm9uaWMpID4gYWxp
Z25vZihzeW5jaHJvbmljKSA/IHNpemVvZihzeW5jaHJvbmljKSA6IGFsaWdub2Yoc3luY2hyb25p
Yyk7Ci0KLXN0YXRpYyBjb25zdGV4cHIgaW50IF9fYXRvbWljX3dhaXRfdGFibGVfZW50cnlfY291
bnQgPSAxMDI0OwotCi1fX3NlbWFwaG9yZV9tYW5hZ2VkIGFsaWduYXMoNjQpIHVuc2lnbmVkIGNo
YXIgX19hdG9taWNfd2FpdF90YWJsZVtfX2F0b21pY193YWl0X3RhYmxlX2VudHJ5X2NvdW50XVtf
X2F0b21pY193YWl0X3RhYmxlX2VudHJ5X3NpemVdID0geyAwIH07Ci0KLV9fc2VtYXBob3JlX2Fi
aSBzaXplX3QgX19hdG9taWNfd2FpdF90YWJsZV9pbmRleCh2b2lkIGNvbnN0KiBwdHIpIHsKLQot
ICAgIHJldHVybiAoKHVpbnRwdHJfdClwdHIgLyBfX2F0b21pY193YWl0X3RhYmxlX2VudHJ5X3Np
emUpICYgKF9fYXRvbWljX3dhaXRfdGFibGVfZW50cnlfY291bnQgLSAxKTsKLX0KLQotX19zZW1h
cGhvcmVfYWJpIHN5bmNocm9uaWMgKl9fYXRvbWljX3dhaXRfZ2V0X3NlbWFwaG9yZSh2b2lkIGNv
bnN0ICphKQotewotICAgIHJldHVybiAoc3luY2hyb25pYyAqKSZfX2F0b21pY193YWl0X3RhYmxl
W19fYXRvbWljX3dhaXRfdGFibGVfaW5kZXgoYSldWzBdOwotfQotCi0jZW5kaWYKLX0KLX0gLy8g
bmFtZXNwYWNlIGV4cGVyaW1lbnRhbAotfSAvLyBuYW1lc3BhY2Ugc3RkCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9vZ2lyb3V4L3Rlc3QuY3BwIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvb2dpcm91eC90ZXN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNzZhNmE2YmYwMGNhNGE3MzQ1MWU3NDZjMzc3YzMyZGM3NDQ5OTkxNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci9vZ2lyb3V4L3Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzYg
KzAsMCBAQAotLyoKLQotQ29weXJpZ2h0IChjKSAyMDE3LCBOVklESUEgQ29ycG9yYXRpb24KLUFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCi1hcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLTEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcwotbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLXRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLWFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi1U
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELgotSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKLUlORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLAotQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKLUxJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UKLU9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0qLwotCi0jaW5jbHVkZSAidGVzdF9kZWZzLmNwcCIK
LQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgY29uc3QqIGFyZ3ZbXSkgewotCi0jaWZkZWYgX190
ZXN0X3d0ZgotICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotI2VuZGlmCi0KLSAgc3Rh
dGljIGNvbnN0IHN0ZDo6c3RyaW5nIG9ubHljcHVfcyA9ICItLWNwdSIsIAotICAgIG9ubHlncHVf
cyA9ICItLWdwdSIsCi0gICAgb25seXNjZW5hcmlvX3MgPSAiLS1zY2VuYXJpbyIsIAotICAgIG9u
bHlsb2NrX3MgPSAiLS1sb2NrIiwKLSAgICBkZXZpY2VfcyA9ICItLWRldmljZSI7Ci0KLSAgZm9y
KGludCBpID0gMTsgaSA8IGFyZ2M7ICsraSkgewotICAgIGlmKGFyZ3ZbaV0gPT0gb25seWdwdV9z
KSBvbmx5Z3B1ID0gc3RkOjpzdG9pKGFyZ3ZbKytpXSk7Ci0gICAgZWxzZSBpZihhcmd2W2ldID09
IG9ubHljcHVfcykgb25seWNwdSA9IHN0ZDo6c3RvaShhcmd2WysraV0pOwotICAgIGVsc2UgaWYo
YXJndltpXSA9PSBkZXZpY2VfcykgZGV2ID0gc3RkOjpzdG9pKGFyZ3ZbKytpXSk7Ci0gICAgZWxz
ZSBpZihhcmd2W2ldID09IG9ubHlzY2VuYXJpb19zKSBvbmx5c2NlbmFyaW8gPSBhcmd2WysraV07
Ci0gICAgZWxzZSBpZihhcmd2W2ldID09IG9ubHlsb2NrX3MpIG9ubHlsb2NrID0gYXJndlsrK2ld
OwotICAgIGVsc2UgewotICAgICAgICBzdGQ6OmNvdXQgPDwgIkVSUk9SLCB1bmtub3duIGFyZ3Vt
ZW50OiAiIDw8IGFyZ3ZbaV0gPDwgc3RkOjplbmRsOyAKLSAgICAgICAgcmV0dXJuIC0xOwotICAg
IH0KLSAgfQotCi0gIHByaW50X2hlYWRlcnMoKTsKLQotICBydW5fY2FsaWJyYXRpb24oKTsKLQot
ICB1aW50MzJfdCBjb3VudCA9IDA7IAotICBkb3VibGUgcHJvZHVjdCA9IDEuMDsKLQotICBydW5f
YW5kX3JlcG9ydF9tdXRleF9zY2VuYXJpb3MobXV0ZXgsIGNvdW50LCBwcm9kdWN0KTsKLSAgcnVu
X2FuZF9yZXBvcnRfbXV0ZXhfc2NlbmFyaW9zKGJpbmFyeV9zZW1hcGhvcmVfbXV0ZXgsIGNvdW50
LCBwcm9kdWN0KTsKLSAgLy9pZighb25seWxvY2suZW1wdHkoKSkgewotI2lmZGVmIF9fdGVzdF93
dGYKLSAgICBydW5fYW5kX3JlcG9ydF9tdXRleF9zY2VuYXJpb3MoV1RGOjpMb2NrLCBjb3VudCwg
cHJvZHVjdCk7Ci0jZW5kaWYKLSNpZmRlZiBIQVNfVU5GQUlSX0xPQ0sKLSAgICBydW5fYW5kX3Jl
cG9ydF9tdXRleF9zY2VuYXJpb3ModW5mYWlyX2xvY2ssIGNvdW50LCBwcm9kdWN0KTsKLSNlbmRp
ZgotICAgIHJ1bl9hbmRfcmVwb3J0X211dGV4X3NjZW5hcmlvcyhjb3VudGluZ19zZW1hcGhvcmVf
bXV0ZXgsIGNvdW50LCBwcm9kdWN0KTsKLSAgICBydW5fYW5kX3JlcG9ydF9tdXRleF9zY2VuYXJp
b3MocG9vcl9tdXRleCwgY291bnQsIHByb2R1Y3QpOwotICAgIHJ1bl9hbmRfcmVwb3J0X211dGV4
X3NjZW5hcmlvcyhtdXRleCwgY291bnQsIHByb2R1Y3QpOwotICAvL30KLSAgc3RkOjpjb3V0IDw8
ICI9PSB0b3RhbCA6ICIgPDwgc3RkOjpmaXhlZCA8PCBzdGQ6OnNldHByZWNpc2lvbigwKSA8PCAx
MDAwMC9zdGQ6OnBvdyhwcm9kdWN0LCAxLjAvY291bnQpIDw8ICIgbG9ja21hcmtzID09IiA8PCBz
dGQ6OmVuZGw7Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9v
Z2lyb3V4L3Rlc3QuaHBwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvb2dpcm91eC90
ZXN0LmhwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFmMjQwMzgwNDg3ZDlkMDQw
YmJhOWE3NmMwMzZmZDIxY2FlNWEwMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci9vZ2lyb3V4L3Rlc3Qu
aHBwCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLQotQ29weXJpZ2h0IChjKSAy
MDE3LCBOVklESUEgQ29ycG9yYXRpb24KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dCBtb2RpZmljYXRpb24sCi1hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwotbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLTIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwKLXRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLWFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwKLUlORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLURB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKLU9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRAotT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0qLwot
Ci0jaWZuZGVmIFRFU1RfSFBQCi0jZGVmaW5lIFRFU1RfSFBQCi0KLXRlbXBsYXRlPGNsYXNzIFNl
bT4KLXN0cnVjdCBzZW1hcGhvcmVfbXV0ZXggewotICAgIF9fdGVzdF9hYmkgdm9pZCBsb2NrKCkg
ewotICAgICAgICBfX3NlbS5hY3F1aXJlKCk7Ci0gICAgfQotICAgIF9fdGVzdF9hYmkgdm9pZCB1
bmxvY2soKSB7Ci0gICAgICAgIF9fc2VtLnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgU2VtIF9fc2Vt
eyAxIH07Ci19OwotCi11c2luZyBiaW5hcnlfc2VtYXBob3JlX211dGV4ID0gc2VtYXBob3JlX211
dGV4PGJpbmFyeV9zZW1hcGhvcmU+OwotdXNpbmcgY291bnRpbmdfc2VtYXBob3JlX211dGV4ID0g
c2VtYXBob3JlX211dGV4PGNvdW50aW5nX3NlbWFwaG9yZT47Ci0KLSNpZm5kZWYgX19idWlsdGlu
X2V4cGVjdAotI2RlZmluZSBfX2J1aWx0aW5fZXhwZWN0KHgseSkgKHgpCi0jZW5kaWYKLQotc3Ry
dWN0IHN5bmNocm9uaWNfbXV0ZXggewotCi0gICAgX190ZXN0X2FiaSB2b2lkIGxvY2soKSB7Ci0K
LSAgICAgICAgYm9vbCBzdGF0ZTsKLSAgICAgICAgd2hpbGUoMSkgewotICAgICAgICAgICAgaWYg
KF9fYnVpbHRpbl9leHBlY3QoX19sb2NrZWQuY29tcGFyZV9leGNoYW5nZV93ZWFrKHN0YXRlID0g
ZmFsc2UsIHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpLCAxKSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGlmKHN0YXRlKQotICAgICAgICAgICAgICAgIGF0b21p
Y193YWl0X2V4cGxpY2l0KCZfX2xvY2tlZCwgc3RhdGUsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4
ZWQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgX190ZXN0X2FiaSB2b2lkIHVubG9jaygpIHsK
LQotICAgICAgICBfX2xvY2tlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFz
ZSk7Ci0gICAgICAgIGF0b21pY19zaWduYWwoJl9fbG9ja2VkKTsKLSAgICB9Ci0KLSAgICBhdG9t
aWM8Ym9vbD4gX19sb2NrZWR7IGZhbHNlIH07Ci19OwotCi1zdHJ1Y3QgcG9vcl9tdXRleCB7Ci0K
LSAgICBfX3Rlc3RfYWJpIHZvaWQgbG9jaygpIHsKLQotICAgICAgICBib29sIHN0YXRlOwotICAg
ICAgICB3aGlsZSAoIV9fbG9ja2VkLmNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhzdGF0ZSA9IGZhbHNl
LCB0cnVlLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkKLSAgICAgICAgICAgIDsKLSAgICB9
Ci0KLSAgICBfX3Rlc3RfYWJpIHZvaWQgdW5sb2NrKCkgewotCi0gICAgICAgIF9fbG9ja2VkLnN0
b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAgICB9Ci0KLSAgICBhdG9t
aWM8Ym9vbD4gX19sb2NrZWR7IGZhbHNlIH07Ci19OwotCi0jZW5kaWYgLy9URVNUX0hQUApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvb2dpcm91eC90ZXN0X2RlZnMu
Y3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvb2dpcm91eC90ZXN0X2RlZnMuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTliYjA0YjMyNzkxZTMyNDNmZDY5YzE2
YjIxZjBlYjMzOTJmOGFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL29naXJvdXgvdGVzdF9kZWZzLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDc3NSArMCwwIEBACi0vKgotCi1Db3B5cmlnaHQgKGMpIDIw
MTcsIE5WSURJQSBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
IG1vZGlmaWNhdGlvbiwKLWFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCi1saXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlLAotdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLUFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi1XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi1JTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULAotSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi1CVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRgotTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQotT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VECi1PRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSovCi0K
LSNpZmRlZiBXSU4zMgotI2RlZmluZSBfV0lOMzJfV0lOTlQgMHgwNjAyCi0jZW5kaWYKLQotI2lu
Y2x1ZGUgPG51bWVyaWM+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPGNocm9ubz4KLSNp
bmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxhdG9taWM+Ci0jaW5jbHVkZSA8dGhyZWFkPgot
I2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHNlbWFwaG9yZT4KLSNpbmNsdWRlIDxhbGdvcml0
aG0+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxpb21hbmlwPgot
I2luY2x1ZGUgPGZzdHJlYW0+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0KLSNpZm5kZWYgX19oYXNfaW5j
bHVkZQotICAjZGVmaW5lIF9faGFzX2luY2x1ZGUoeCkgMAotI2VuZGlmCi0KLSNpZm5kZWYgX190
ZXN0X2FiaQotICAjZGVmaW5lIF9fdGVzdF9hYmkKLSAgI2RlZmluZSBfX21hbmFnZWRfXwotICB0
ZW1wbGF0ZTxjbGFzcyBUPgotICB1c2luZyBhdG9taWMgPSBzdGQ6OmF0b21pYzxUPjsKLSAgdXNp
bmcgbXV0ZXggPSBzdGQ6Om11dGV4OwotICB1c2luZyB0aHJlYWQgPSBzdGQ6OnRocmVhZDsKLSAg
dXNpbmcgbmFtZXNwYWNlIHN0ZDo6ZXhwZXJpbWVudGFsOwotICB0ZW1wbGF0ZTxjbGFzcyBGPgot
ICBpbnQgc3RhcnRfZ3B1X3RocmVhZHModWludDMyX3QgY291bnQsIEYpIHsgYXNzZXJ0KCFjb3Vu
dCk7IHJldHVybiAwOyB9Ci0gIHZvaWQgc3RvcF9ncHVfdGhyZWFkcyhpbnQpIHsgfQotICB1aW50
MzJfdCBtYXhfZ3B1X3RocmVhZHMoKSB7IHJldHVybiAwOyB9Ci0gIHVuc2lnbmVkIGludCBkZXYg
PSAwOwotICB1bnNpZ25lZCBpbnQgY2FwID0gMDsKLSNlbmRpZgotCi0jaW5jbHVkZSAidGVzdC5o
cHAiCi0KLSNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCi0gICNp
bmNsdWRlIDx1bmlzdGQuaD4KLSAgI2luY2x1ZGUgPGNzdHJpbmc+Ci0gICNpbmNsdWRlIDxzeXMv
dGltZXMuaD4KLSAgI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0gICNpbmNsdWRlIDxzeXMvcmVzb3Vy
Y2UuaD4KLQotICB0eXBlZGVmIHJ1c2FnZSBjcHVfdGltZTsKLSAgY3B1X3RpbWUgZ2V0X2NwdV90
aW1lKCkgewotCi0gICAgY3B1X3RpbWUgYzsKLSAgICBzdGQ6Om1lbXNldCgmYywgMCwgc2l6ZW9m
KGNwdV90aW1lKSk7Ci0gICAgYXNzZXJ0KDAgPT0gZ2V0cnVzYWdlKFJVU0FHRV9TRUxGLCAmYykp
OwotCi0gICAgcmV0dXJuIGM7Ci0gIH0KLSAgZG91YmxlIHVzZXJfdGltZV9jb25zdW1lZChjcHVf
dGltZSBzdGFydCwgY3B1X3RpbWUgZW5kKSB7Ci0KLSAgICAgIHJldHVybiAoZW5kLnJ1X3V0aW1l
LnR2X3NlYyArIDFFLTYqZW5kLnJ1X3V0aW1lLnR2X3VzZWMpIC0KLSAgICAgICAgICAgICAoc3Rh
cnQucnVfdXRpbWUudHZfc2VjICsgMUUtNipzdGFydC5ydV91dGltZS50dl91c2VjKTsKLSAgfQot
ICBkb3VibGUgc3lzdGVtX3RpbWVfY29uc3VtZWQoY3B1X3RpbWUgc3RhcnQsIGNwdV90aW1lIGVu
ZCkgewotCi0gICAgICByZXR1cm4gKGVuZC5ydV9zdGltZS50dl9zZWMgKyAxRS02KmVuZC5ydV9z
dGltZS50dl91c2VjKSAtCi0gICAgICAgICAgICAgKHN0YXJ0LnJ1X3N0aW1lLnR2X3NlYyArIDFF
LTYqc3RhcnQucnVfc3RpbWUudHZfdXNlYyk7Ci0gIH0KLSNlbmRpZgotCi0jaWZkZWYgX19saW51
eF9fCi0gICNpbmNsdWRlIDxzY2hlZC5oPgotICB2b2lkIHNldF9hZmZpbml0eShzdGQ6OnVpbnQ2
NF90IGNwdSkgewotICAgIGNwdV9zZXRfdCBjcHVzZXQ7Ci0gICAgQ1BVX1pFUk8oJmNwdXNldCk7
Ci0KLSAgICBjcHUgJT0gc2l6ZW9mKGludCkgKiA4OwotICAgIENQVV9TRVQoY3B1LCAmY3B1c2V0
KTsKLQotICAgIHNjaGVkX3NldGFmZmluaXR5KDAsIHNpemVvZihjcHVzZXQpLCAmY3B1c2V0KTsK
LSAgfQotI2VuZGlmCi0KLSNpZmRlZiBfX0FQUExFX18KLSAgI2luY2x1ZGUgPG1hY2gvdGhyZWFk
X3BvbGljeS5oPgotICAjaW5jbHVkZSA8cHRocmVhZC5oPgotCi0gIGV4dGVybiAiQyIga2Vybl9y
ZXR1cm5fdCB0aHJlYWRfcG9saWN5X3NldCh0aHJlYWRfdCAgICAgICAgICAgICAgICB0aHJlYWQs
Ci0gICAgdGhyZWFkX3BvbGljeV9mbGF2b3JfdCAgZmxhdm9yLAotICAgIHRocmVhZF9wb2xpY3lf
dCAgICAgICAgIHBvbGljeV9pbmZvLAotICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgIGNvdW50
KTsKLQotICB2b2lkIHNldF9hZmZpbml0eShzdGQ6OnVpbnQ2NF90IGNwdSkgewotICAgIGNwdSAl
PSBzaXplb2YoaW50ZWdlcl90KSAqIDg7Ci0gICAgaW50ZWdlcl90IGNvdW50ID0gKDEgPDwgY3B1
KTsKLSAgICB0aHJlYWRfcG9saWN5X3NldChwdGhyZWFkX21hY2hfdGhyZWFkX25wKHB0aHJlYWRf
c2VsZigpKSwgVEhSRUFEX0FGRklOSVRZX1BPTElDWSwgKHRocmVhZF9wb2xpY3lfdCkmY291bnQs
IDEpOwotICB9Ci0KLSNpZiBfX2hhc19pbmNsdWRlKDxvcy9sb2NrLmg+KQotICAjaW5jbHVkZSA8
b3MvbG9jay5oPgotICAjZGVmaW5lIEhBU19VTkZBSVJfTE9DSyAxCi0gIGNsYXNzIHVuZmFpcl9s
b2NrIHsKLSAgICBvc191bmZhaXJfbG9jayBsID0gT1NfVU5GQUlSX0xPQ0tfSU5JVDsKLSAgcHVi
bGljOgotICAgIHZvaWQgbG9jaygpIHsgb3NfdW5mYWlyX2xvY2tfbG9jaygmbCk7IH0KLSAgICB2
b2lkIHVubG9jaygpIHsgb3NfdW5mYWlyX2xvY2tfdW5sb2NrKCZsKTsgfQotICB9OwotICAjZW5k
aWYKLSNlbmRpZgotCi0jaWZkZWYgV0lOMzIKLSAgc3RhdGljIEhBTkRMRSBzZWxmID0gR2V0Q3Vy
cmVudFByb2Nlc3MoKTsKLSAgdHlwZWRlZiBzdGQ6OnBhaXI8RklMRVRJTUUsIEZJTEVUSU1FPiBj
cHVfdGltZTsKLSAgY3B1X3RpbWUgZ2V0X2NwdV90aW1lKCkgewotICAgIGNwdV90aW1lIHQ7Ci0g
ICAgRklMRVRJTUUgZnRpbWUsIGZzeXMsIGZ1c2VyOwotICAgIEdldFByb2Nlc3NUaW1lcyhzZWxm
LCAmZnRpbWUsICZmdGltZSwgJmZzeXMsICZmdXNlcik7Ci0gICAgbWVtY3B5KCZ0LmZpcnN0LCAm
ZnN5cywgc2l6ZW9mKEZJTEVUSU1FKSk7Ci0gICAgbWVtY3B5KCZ0LnNlY29uZCwgJmZ1c2VyLCBz
aXplb2YoRklMRVRJTUUpKTsKLSAgICByZXR1cm4gdDsKLSAgfQotICBzdGQ6OnVpbnQ2NF90IG1h
a2U2NChzdGQ6OnVpbnQ2NF90IGxvdywgc3RkOjp1aW50NjRfdCBoaWdoKSB7Ci0gICAgcmV0dXJu
IGxvdyB8IChoaWdoIDw8IDMyKTsKLSAgfQotICBzdGQ6OnVpbnQ2NF90IG1ha2U2NChGSUxFVElN
RSBmdGltZSkgewotICAgIHJldHVybiBtYWtlNjQoZnRpbWUuZHdMb3dEYXRlVGltZSwgZnRpbWUu
ZHdIaWdoRGF0ZVRpbWUpOwotICB9Ci0gIGRvdWJsZSB1c2VyX3RpbWVfY29uc3VtZWQoY3B1X3Rp
bWUgc3RhcnQsIGNwdV90aW1lIGVuZCkgewotCi0gICAgZG91YmxlIG5hbm9zZWNvbmRzX3Blcl9j
bG9ja190aWNrID0gMTAwOyAvLzEwMC1uYW5vc2Vjb25kIGludGVydmFscwotICAgIGF1dG8gY2xv
Y2tfdGlja3NfZWxhcHNlZCA9IG1ha2U2NChlbmQuc2Vjb25kKSAtIG1ha2U2NChzdGFydC5zZWNv
bmQpOwotICAgIHJldHVybiBjbG9ja190aWNrc19lbGFwc2VkICogbmFub3NlY29uZHNfcGVyX2Ns
b2NrX3RpY2s7Ci0gIH0KLSAgZG91YmxlIHN5c3RlbV90aW1lX2NvbnN1bWVkKGNwdV90aW1lIHN0
YXJ0LCBjcHVfdGltZSBlbmQpIHsKLQotICAgIGRvdWJsZSBuYW5vc2Vjb25kc19wZXJfY2xvY2tf
dGljayA9IDEwMDsgLy8xMDAtbmFub3NlY29uZCBpbnRlcnZhbHMKLSAgICBhdXRvIGNsb2NrX3Rp
Y2tzX2VsYXBzZWQgPSBtYWtlNjQoZW5kLmZpcnN0KSAtIG1ha2U2NChzdGFydC5maXJzdCk7Ci0g
ICAgcmV0dXJuIGNsb2NrX3RpY2tzX2VsYXBzZWQgKiBuYW5vc2Vjb25kc19wZXJfY2xvY2tfdGlj
azsKLSAgfQotICB2b2lkIHNldF9hZmZpbml0eShzdGQ6OnVpbnQ2NF90IGNwdSkgewotICAgIGNw
dSAlPSBzaXplb2Yoc3RkOjp1aW50NjRfdCkgKiA4OwotICAgIFNldFRocmVhZEFmZmluaXR5TWFz
ayhHZXRDdXJyZW50VGhyZWFkKCksIGludCgxIDw8IGNwdSkpOwotICB9Ci0jZW5kaWYKLQotc3Rk
OjpvZnN0cmVhbSBjc3YoIm91dHB1dC5jc3YiKTsKLQotc3RydWN0IHRpbWVfcmVjb3JkIHsKLSAg
ICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIHVzOwotICAgIGRvdWJsZSB1c2VyX3RpbWU7Ci0g
ICAgZG91YmxlIHN5c3RlbV90aW1lOwotfTsKLQotc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBN
QVhfQ1BVX1RIUkVBRFMgPSAxMDI0Owotc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBNQVhfR1BV
X1RIUkVBRFMgPSAxMDI0KjE2MDsKLQotc3RydWN0IHdvcmtfaXRlbV9zdHJ1Y3QgewotCi0gICAg
YXRvbWljPGludD4gY3B1X2tlZXBfZ29pbmcgICAgICAgICAgICAgICAgICAgID0gQVRPTUlDX1ZB
Ul9JTklUKDApOwotICAgIHVuc2lnbmVkIGNoYXIgcGFkM1s0MDk2XSAgICAgICAgICAgICAgICAg
ICAgICA9IHswfTsKLSAgICBhdG9taWM8aW50PiBncHVfa2VlcF9nb2luZyAgICAgICAgICAgICAg
ICAgICAgPSBBVE9NSUNfVkFSX0lOSVQoMCk7Ci0gICAgdW5zaWduZWQgY2hhciBwYWQzNVs0MDk2
XSAgICAgICAgICAgICAgICAgICAgID0gezB9OwotICAgIGF0b21pYzx1aW50NjRfdD4gY3B1X2Nv
dW50W01BWF9DUFVfVEhSRUFEU10gICA9IHtBVE9NSUNfVkFSX0lOSVQoMCl9OwotICAgIHVuc2ln
bmVkIGNoYXIgcGFkNFs0MDk2XSAgICAgICAgICAgICAgICAgICAgICA9IHswfTsKLSAgICBhdG9t
aWM8dWludDY0X3Q+IGdwdV9jb3VudFtNQVhfR1BVX1RIUkVBRFNdICAgPSB7QVRPTUlDX1ZBUl9J
TklUKDApfTsKLSAgICB1bnNpZ25lZCBjaGFyIHBhZDVbNDA5Nl0gICAgICAgICAgICAgICAgICAg
ICAgPSB7MH07Ci0KLSAgICBfX3Rlc3RfYWJpIGludCBkb19pdCh1aW50MzJfdCBpbmRleCwgYm9v
bCBpc19jcHUpIHsKLQotICAgICAgICBpZiAoaXNfY3B1KSB7Ci0gICAgICAgICAgICBjcHVfY291
bnRbaW5kZXhdLmZldGNoX2FkZCgxLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICAg
ICAgICAgIHJldHVybiBjcHVfa2VlcF9nb2luZy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4
ZWQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZ3B1X2NvdW50W2lu
ZGV4XS5mZXRjaF9hZGQoMSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgICAgICAg
ICByZXR1cm4gZ3B1X2tlZXBfZ29pbmcubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsK
LSAgICAgICAgfQotICAgIAotICAgIH0KLX07Ci0KLXdvcmtfaXRlbV9zdHJ1Y3QqIGFsbG9jYXRl
X3dvcmtfaXRlbSgpIHsKLSAgICB3b3JrX2l0ZW1fc3RydWN0KiBoOwotI2lmZGVmIF9fTlZDQ19f
Ci0gICAgaWYoY2FwIDwgNikKLSAgICAgICAgY3VkYUhvc3RBbGxvYygmaCwgc2l6ZW9mKHdvcmtf
aXRlbV9zdHJ1Y3QpLCAwKTsKLSAgICBlbHNlIHsKLSAgICAgICAgY3VkYU1hbGxvY01hbmFnZWQo
JmgsIHNpemVvZih3b3JrX2l0ZW1fc3RydWN0KSk7Ci0gICAgICAgIGN1ZGFNZW1BZHZpc2UoaCwg
c2l6ZW9mKHdvcmtfaXRlbV9zdHJ1Y3QpLCBjdWRhTWVtQWR2aXNlU2V0UHJlZmVycmVkTG9jYXRp
b24sIDApOwotICAgIH0KLSNlbHNlCi0gICAgaCA9ICh3b3JrX2l0ZW1fc3RydWN0KiltYWxsb2Mo
c2l6ZW9mKHdvcmtfaXRlbV9zdHJ1Y3QpKTsKLSNlbmRpZgotICAgIG5ldyAoaCkgd29ya19pdGVt
X3N0cnVjdCgpOwotICAgIHJldHVybiBoOwotfQotCi12b2lkIGZyZWVfd29ya19pdGVtKHdvcmtf
aXRlbV9zdHJ1Y3QqIGgpIHsKLSNpZmRlZiBfX05WQ0NfXwotICAgIGlmKGNhcCA8IDYpCi0gICAg
ICAgIGN1ZGFGcmVlSG9zdChoKTsKLSAgICBlbHNlCi0gICAgICAgIGN1ZGFGcmVlKGgpOwotI2Vs
c2UKLSAgICBmcmVlKGgpOwotI2VuZGlmCi19Ci0KLWRvdWJsZSB3b3JrX2l0ZW1fY3B1X2Nvc3Rf
aW5fdXMgPSAwLjAsCi0gICAgICAgd29ya19pdGVtX2dwdV9jb3N0X2luX3VzID0gMC4wOwotCi0j
ZGVmaW5lIERFQlVHX1BSSU5UKHgpIHN0ZDo6Y291dCA8PCAjeCAiID0gIiA8PCB4IDw8IHN0ZDo6
ZW5kbAotCi1kb3VibGUgcmVwb3J0KHdvcmtfaXRlbV9zdHJ1Y3QgY29uc3QmIHdvcmtfaXRlbV9z
dGF0ZSwgdGltZV9yZWNvcmQgdHIsIGNoYXIgY29uc3QqIGxuYW1lLCBjaGFyIGNvbnN0KiBzbmFt
ZSwgCi0gICAgICAgICAgICAgIHVpbnQzMl90IGNfdGhyZWFkcywgdWludDMyX3QgZ190aHJlYWRz
LCBib29sIGNvbnRlbmRlZCwgdWludDY0X3QgY3B1X3dvcmtfaXRlbV9jb3VudCwgdWludDY0X3Qg
Z3B1X3dvcmtfaXRlbV9jb3VudCwgYm9vbCBiYXJyaWVyKSB7Ci0KLSAgYXV0byBjb25zdCBjcHVf
bWVhbiA9IGNfdGhyZWFkcyA/IHN0ZDo6YWNjdW11bGF0ZSh3b3JrX2l0ZW1fc3RhdGUuY3B1X2Nv
dW50LCB3b3JrX2l0ZW1fc3RhdGUuY3B1X2NvdW50ICsgY190aHJlYWRzLCAwdWxsKSAvIGNfdGhy
ZWFkcyA6IDA7Ci0gIGF1dG8gY29uc3QgZ3B1X21lYW4gPSBnX3RocmVhZHMgPyBzdGQ6OmFjY3Vt
dWxhdGUod29ya19pdGVtX3N0YXRlLmdwdV9jb3VudCwgd29ya19pdGVtX3N0YXRlLmdwdV9jb3Vu
dCArIGdfdGhyZWFkcywgMHVsbCkgLyBnX3RocmVhZHMgOiAwOwotICBhdXRvIGNvbnN0IGNwdV9t
ZWFuX3NlY3Rpb25zID0gY3B1X21lYW4gLyBjcHVfd29ya19pdGVtX2NvdW50OwotICBhdXRvIGNv
bnN0IGdwdV9tZWFuX3NlY3Rpb25zID0gZ3B1X21lYW4gLyBncHVfd29ya19pdGVtX2NvdW50Owot
ICBhdXRvIGNvbnN0IHRvdGFsX21lYW5fc2VjdGlvbnMgPSAoc3RkOjphY2N1bXVsYXRlKHdvcmtf
aXRlbV9zdGF0ZS5jcHVfY291bnQsIHdvcmtfaXRlbV9zdGF0ZS5jcHVfY291bnQgKyBjX3RocmVh
ZHMsIDB1bGwpIC8gY3B1X3dvcmtfaXRlbV9jb3VudCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsgc3RkOjphY2N1bXVsYXRlKHdvcmtfaXRlbV9zdGF0ZS5ncHVfY291bnQs
IHdvcmtfaXRlbV9zdGF0ZS5ncHVfY291bnQgKyBnX3RocmVhZHMsIDB1bGwpIC8gZ3B1X3dvcmtf
aXRlbV9jb3VudCkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIChjX3RocmVh
ZHMgKyBnX3RocmVhZHMpOwotCi0gIGF1dG8gY29uc3QgbWF4X3YgPSAoc3RkOjpudW1lcmljX2xp
bWl0czx1aW50NjRfdD46Om1heCkoKTsKLSAgYXV0byBjb25zdCBtaW5fZiA9IFtdKHVpbnQ2NF90
IGEsIHVpbnQ2NF90IGIpeyByZXR1cm4gKHN0ZDo6bWluKShhLGIpOyB9OwotICBhdXRvIGNvbnN0
IGNwdV9taW4gPSBzdGQ6OmFjY3VtdWxhdGUod29ya19pdGVtX3N0YXRlLmNwdV9jb3VudCwgd29y
a19pdGVtX3N0YXRlLmNwdV9jb3VudCArIGNfdGhyZWFkcywgbWF4X3YsIG1pbl9mKTsKLSAgYXV0
byBjb25zdCBncHVfbWluID0gc3RkOjphY2N1bXVsYXRlKHdvcmtfaXRlbV9zdGF0ZS5ncHVfY291
bnQsIHdvcmtfaXRlbV9zdGF0ZS5ncHVfY291bnQgKyBnX3RocmVhZHMsIG1heF92LCBtaW5fZik7
Ci0gIGF1dG8gY29uc3QgY3B1X21pbl9zZWN0aW9ucyA9IGNwdV9taW4gLyBjcHVfd29ya19pdGVt
X2NvdW50OwotICBhdXRvIGNvbnN0IGdwdV9taW5fc2VjdGlvbnMgPSBncHVfbWluIC8gZ3B1X3dv
cmtfaXRlbV9jb3VudDsKLSAgYXV0byBjb25zdCB0b3RhbF9taW5fc2VjdGlvbnMgPSBtaW5fZihj
cHVfbWluX3NlY3Rpb25zLCBncHVfbWluX3NlY3Rpb25zKTsKLQotICBhdXRvIGNvbnN0IG1pbl92
ID0gKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptaW4pKCk7Ci0gIGF1dG8gY29uc3Qg
bWF4X2YgPSBbXSh1aW50NjRfdCBhLCB1aW50NjRfdCBiKXsgcmV0dXJuIChzdGQ6Om1heCkoYSxi
KTsgfTsKLSAgYXV0byBjb25zdCBjcHVfbWF4ID0gc3RkOjphY2N1bXVsYXRlKHdvcmtfaXRlbV9z
dGF0ZS5jcHVfY291bnQsIHdvcmtfaXRlbV9zdGF0ZS5jcHVfY291bnQgKyBjX3RocmVhZHMsIG1p
bl92LCBtYXhfZik7Ci0gIGF1dG8gY29uc3QgZ3B1X21heCA9IHN0ZDo6YWNjdW11bGF0ZSh3b3Jr
X2l0ZW1fc3RhdGUuZ3B1X2NvdW50LCB3b3JrX2l0ZW1fc3RhdGUuZ3B1X2NvdW50ICsgZ190aHJl
YWRzLCBtaW5fdiwgbWF4X2YpOwotICBhdXRvIGNvbnN0IGNwdV9tYXhfc2VjdGlvbnMgPSBjcHVf
bWF4IC8gY3B1X3dvcmtfaXRlbV9jb3VudDsKLSAgYXV0byBjb25zdCBncHVfbWF4X3NlY3Rpb25z
ID0gZ3B1X21heCAvIGdwdV93b3JrX2l0ZW1fY291bnQ7Ci0gIGF1dG8gY29uc3QgdG90YWxfbWF4
X3NlY3Rpb25zID0gbWF4X2YoY3B1X21heF9zZWN0aW9ucywgZ3B1X21heF9zZWN0aW9ucyk7Ci0K
LSAgYXV0byBjb25zdCBjcHVfY291bnQgPSBzdGQ6OmFjY3VtdWxhdGUod29ya19pdGVtX3N0YXRl
LmNwdV9jb3VudCwgd29ya19pdGVtX3N0YXRlLmNwdV9jb3VudCArIGNfdGhyZWFkcywgMHVsbCk7
Ci0gIGF1dG8gY29uc3QgZ3B1X2NvdW50ID0gc3RkOjphY2N1bXVsYXRlKHdvcmtfaXRlbV9zdGF0
ZS5ncHVfY291bnQsIHdvcmtfaXRlbV9zdGF0ZS5ncHVfY291bnQgKyBnX3RocmVhZHMsIDB1bGwp
OwotICBhdXRvIGNvbnN0IGNwdV9zdW1fc2VjdGlvbnMgPSBjcHVfY291bnQgLyBjcHVfd29ya19p
dGVtX2NvdW50OwotICBhdXRvIGNvbnN0IGdwdV9zdW1fc2VjdGlvbnMgPSBncHVfY291bnQgLyBn
cHVfd29ya19pdGVtX2NvdW50OwotICBhdXRvIGNvbnN0IHRvdGFsX3N1bV9zZWN0aW9ucyA9IGNw
dV9zdW1fc2VjdGlvbnMgKyBncHVfc3VtX3NlY3Rpb25zOwotICBhdXRvIGNvbnN0IGNwdV9hdmdf
c2VjdGlvbnMgPSBjX3RocmVhZHMgPyBzdGQ6OmNlaWwoMS4wICogY3B1X3N1bV9zZWN0aW9ucyAv
IGNfdGhyZWFkcykgOiAwOwotICBhdXRvIGNvbnN0IGdwdV9hdmdfc2VjdGlvbnMgPSBnX3RocmVh
ZHMgPyBzdGQ6OmNlaWwoMS4wICogZ3B1X3N1bV9zZWN0aW9ucyAvIGdfdGhyZWFkcykgOiAwOwot
ICBhdXRvIGNvbnN0IHRvdGFsX2F2Z19zZWN0aW9ucyA9IHN0ZDo6Y2VpbCgxLjAgKiB0b3RhbF9z
dW1fc2VjdGlvbnMgLyAoY190aHJlYWRzICsgZ190aHJlYWRzKSk7Ci0KLSAgYXV0byBjcGN0ID0g
Y190aHJlYWRzID8gMTAwLjAgKiBjcHVfbWluX3NlY3Rpb25zIC8gY3B1X21lYW5fc2VjdGlvbnMg
OiAxMDAuMDsKLSAgYXV0byBncGN0ID0gZ190aHJlYWRzID8gMTAwLjAgKiBncHVfbWluX3NlY3Rp
b25zIC8gZ3B1X21lYW5fc2VjdGlvbnMgOiAxMDAuMDsKLSAgYXV0byBmcGN0ID0gMTAwLjAgKiB0
b3RhbF9taW5fc2VjdGlvbnMgLyB0b3RhbF9tZWFuX3NlY3Rpb25zOwotICBhdXRvIHVwY3QgPSAx
MDAuMCp0ci51c2VyX3RpbWUvKHRyLnVzZXJfdGltZSt0ci5zeXN0ZW1fdGltZSk7Ci0gIGlmKHN0
ZDo6aXNuYW4odXBjdCkpCi0gICAgdXBjdCA9IDEwMDsKLQotICBhdXRvIGNvbnN0IGNwdV9zZWN0
aW9ucyA9IGJhcnJpZXIgPyBjcHVfYXZnX3NlY3Rpb25zIDogY3B1X3N1bV9zZWN0aW9uczsKLSAg
YXV0byBjb25zdCBncHVfc2VjdGlvbnMgPSBiYXJyaWVyID8gZ3B1X2F2Z19zZWN0aW9ucyA6IGdw
dV9zdW1fc2VjdGlvbnM7Ci0gIGF1dG8gY29uc3QgY291bnQgPSBiYXJyaWVyID8gKHN0ZDo6bWF4
KShjcHVfYXZnX3NlY3Rpb25zLCBncHVfYXZnX3NlY3Rpb25zKSA6IGNwdV9zZWN0aW9ucyArIGdw
dV9zZWN0aW9uczsKLQotICBhdXRvIGNvbnN0IHJhdGUgPSBjb3VudCAqIDEwMDAwMDAuMCAvIHRy
LnVzLmNvdW50KCk7Ci0gIGF1dG8gY29uc3QgbGF0ZW5jeSA9IChiYXJyaWVyIHx8IGNvbnRlbmRl
ZCA/IDEgOiBjX3RocmVhZHMgKyBnX3RocmVhZHMpIC8gcmF0ZTsKLQotICBhdXRvIGNvbnN0IHNl
cXVlbnRpYWxfdGltZV9pbl91cyA9IGNwdV9zdW1fc2VjdGlvbnMgKiBjcHVfd29ya19pdGVtX2Nv
dW50ICogd29ya19pdGVtX2NwdV9jb3N0X2luX3VzICsgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3B1X3N1bV9zZWN0aW9ucyAqIGdwdV93b3JrX2l0ZW1fY291bnQgKiB3
b3JrX2l0ZW1fZ3B1X2Nvc3RfaW5fdXM7Ci0gIGF1dG8gY29uc3QgcGFyYWxsZWxfdGltZV9pbl91
cyA9IG1heF9mKHVpbnQ2NF90KGNwdV9hdmdfc2VjdGlvbnMgKiBjcHVfd29ya19pdGVtX2NvdW50
ICogd29ya19pdGVtX2NwdV9jb3N0X2luX3VzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDY0X3QoZ3B1X2F2Z19zZWN0aW9ucyAqIGdwdV93b3JrX2l0ZW1f
Y291bnQgKiB3b3JrX2l0ZW1fZ3B1X2Nvc3RfaW5fdXMpKTsKLSAgYXV0byBjb25zdCB0aGVvcnlf
dGltZV9pbl91cyA9IChjb250ZW5kZWQgPyBzZXF1ZW50aWFsX3RpbWVfaW5fdXMgOiBwYXJhbGxl
bF90aW1lX2luX3VzKTsKLQotICBhdXRvIGNvbnN0IG92ZXJoZWFkID0gdHIudXMuY291bnQoKSAv
IHRoZW9yeV90aW1lX2luX3VzOwotCi0gIHN0ZDo6Y291dCA8PCBzdGQ6OnNldHByZWNpc2lvbigy
KTsKLSAgc3RkOjpjb3V0IDw8IHN0ZDo6c2V0dygyNSkgPDwgbG5hbWUKLSAgICAgICAgICAgIDw8
IHN0ZDo6c2V0dygxNSkgPDwgc25hbWUKLSAgICAgICAgICAgIDw8IHN0ZDo6c2V0dyg1KSA8PCBj
X3RocmVhZHMKLSAgICAgICAgICAgIDw8IHN0ZDo6c2V0dygxMCkgPDwgc3RkOjpzY2llbnRpZmlj
IDw8IGRvdWJsZShjcHVfc2VjdGlvbnMpCi0gICAgICAgICAgICA8PCBzdGQ6OnNldHcoMTApIDw8
IHN0ZDo6c2NpZW50aWZpYyA8PCBkb3VibGUoY3B1X2NvdW50KQotICAgICAgICAgICAgPDwgc3Rk
OjpzZXR3KDQpIDw8IGludChjcGN0KSA8PCAnJScKLSAgICAgICAgICAgIDw8IHN0ZDo6c2V0dygx
MCkgPDwgZ190aHJlYWRzCi0gICAgICAgICAgICA8PCBzdGQ6OnNldHcoMTApIDw8IHN0ZDo6c2Np
ZW50aWZpYyA8PCBkb3VibGUoZ3B1X3NlY3Rpb25zKQotICAgICAgICAgICAgPDwgc3RkOjpzZXR3
KDEwKSA8PCBzdGQ6OnNjaWVudGlmaWMgPDwgZG91YmxlKGdwdV9jb3VudCkKLSAgICAgICAgICAg
IDw8IHN0ZDo6c2V0dyg0KSA8PCBpbnQoZ3BjdCkgPDwgJyUnCi0gICAgICAgICAgICA8PCBzdGQ6
OnNldHcoOSkgPDwgc3RkOjpmaXhlZCA8PCB0ci51cy5jb3VudCgpLzFFNiA8PCAncycKLSAgICAg
ICAgICAgIDw8IHN0ZDo6c2V0dyg5KSA8PCBzdGQ6OmZpeGVkIDw8IHRyLnVzZXJfdGltZSA8PCAn
cycKLSAgICAgICAgICAgIDw8IHN0ZDo6c2V0dyg0KSA8PCBpbnQodXBjdCkgPDwgJyUnCi0gICAg
ICAgICAgICA8PCBzdGQ6OnNldHcoMTApIDw8IHN0ZDo6c2NpZW50aWZpYyA8PCByYXRlIAotICAg
ICAgICAgICAgPDwgc3RkOjpzZXR3KDEwKSA8PCBzdGQ6OnNjaWVudGlmaWMgPDwgbGF0ZW5jeSAK
LSAgICAgICAgICAgIDw8IHN0ZDo6c2V0dyg5KSA8PCBzdGQ6OmZpeGVkIDw8IG92ZXJoZWFkIDw8
ICd4JyAKLSAgICAgICAgICAgIDw8IHN0ZDo6c2V0dyg0KSA8PCBpbnQoZnBjdCkgPDwgJyUnIDw8
IHN0ZDo6ZW5kbDsKLSAgY3N2IDw8IHN0ZDo6c2NpZW50aWZpYyA8PCBzdGQ6OnNldHByZWNpc2lv
bigzKTsKLSAgY3N2IDw8IGxuYW1lIDw8ICcsJwotICAgICAgPDwgc25hbWUgPDwgJywnCi0gICAg
ICA8PCBjX3RocmVhZHMgPDwgJywnCi0gICAgICA8PCBjcHVfc2VjdGlvbnMgPDwgJywnCi0gICAg
ICA8PCBjcHVfY291bnQgPDwgJywnCi0gICAgICA8PCBjcGN0IDw8ICcsJwotICAgICAgPDwgZ190
aHJlYWRzIDw8ICcsJwotICAgICAgPDwgZ3B1X3NlY3Rpb25zIDw8ICcsJwotICAgICAgPDwgZ3B1
X2NvdW50IDw8ICcsJwotICAgICAgPDwgZ3BjdCA8PCAnLCcKLSAgICAgIDw8IHRyLnVzLmNvdW50
KCkvMUU2IDw8ICcsJwotICAgICAgPDwgdHIudXNlcl90aW1lIDw8ICcsJwotICAgICAgPDwgdXBj
dCA8PCAnLCcKLSAgICAgIDw8IHJhdGUgPDwgJywnCi0gICAgICA8PCBsYXRlbmN5IDw8ICcsJwot
ICAgICAgPDwgb3ZlcmhlYWQgPDwgJywnCi0gICAgICA8PCBmcGN0IDw8IHN0ZDo6ZW5kbDsKLQot
ICAgIHJldHVybiBvdmVyaGVhZDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRj4KLXRpbWVfcmVjb3Jk
IHJ1bl9jb3JlKHdvcmtfaXRlbV9zdHJ1Y3QmIHdvcmtfaXRlbV9zdGF0ZSwgRiBmLCB1aW50MzJf
dCBjdGhyZWFkcywgdWludDMyX3QgZ3RocmVhZHMpIHsKLQotICAgIGFzc2VydChjdGhyZWFkcyA8
PSBNQVhfQ1BVX1RIUkVBRFMpOwotICAgIGFzc2VydChndGhyZWFkcyA8PSBNQVhfR1BVX1RIUkVB
RFMpOwotCi0gICAgdWludDMyX3QgY29uc3QgYmFzZXRpbWUgPSAzOyAvLyBzZWNvbmRzLCB3aWxs
IGdldCB1c2VkIGZvciB0aGUgcmVhbCB0aW1lciBhbmQgdGhlIGtpbGwgdGltZXIKLQotICAgIHN0
ZDo6YXRvbWljPGJvb2w+IGtpbGx7IHRydWUgfSwga2lsbGVkeyBmYWxzZSB9OwotICAgIHN0ZDo6
dGhyZWFkIGtpbGxlcihbJl0oKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyAr
K2kpIHsKLSAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2ZvcihzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzKDIqMTAwKmJhc2V0aW1lKSk7Ci0gICAgICAgICAgICBpZiAoIWtpbGwu
bG9hZCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB3b3Jr
X2l0ZW1fc3RhdGUuZ3B1X2tlZXBfZ29pbmcgPSAwOwotICAgICAgICB3b3JrX2l0ZW1fc3RhdGUu
Y3B1X2tlZXBfZ29pbmcgPSAwOwotICAgICAgICBraWxsZWQgPSB0cnVlOwotICAgIH0pOwotCi0g
ICAgdGhyZWFkKiBjb25zdCB0aHJlYWRzID0gKHRocmVhZCopbWFsbG9jKHNpemVvZih0aHJlYWQp
KmN0aHJlYWRzKTsKLQotICAgIHdvcmtfaXRlbV9zdGF0ZS5ncHVfa2VlcF9nb2luZyA9IDI7Ci0g
ICAgd29ya19pdGVtX3N0YXRlLmNwdV9rZWVwX2dvaW5nID0gMjsKLQotI2lmZGVmIF9fTlZDQ19f
Ci0gICAgaWYoY2FwID49IDYpCi0gICAgICBjdWRhTWVtQWR2aXNlKCZ3b3JrX2l0ZW1fc3RhdGUs
IHNpemVvZih3b3JrX2l0ZW1fc3RhdGUpLCBjdWRhTWVtQWR2aXNlU2V0UHJlZmVycmVkTG9jYXRp
b24sIDApOwotI2VuZGlmCi0KLSAgICBhdXRvIGNvbnN0IHN0YXJ0ID0gc3RkOjptYWtlX3BhaXIo
c3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCksIGdldF9jcHVfdGltZSgpKTsKLSAgICBh
dG9taWNfc2lnbmFsX2ZlbmNlKHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpOwotICAgIGZvciAo
dWludDMyX3QgYyA9IDA7IGMgPCBjdGhyZWFkczsgKytjKQotICAgICAgbmV3ICgmdGhyZWFkc1tj
XSkgdGhyZWFkKFs9XSgpIHsKLSAgICAgICAgc2V0X2FmZmluaXR5KGMpOwotI2lmbmRlZiBfTVND
X1ZFUgotICAgICAgICAjcHJhZ21hIG5vdW5yb2xsCi0jZW5kaWYKLSAgICAgICAgd2hpbGUoZihj
LCB0cnVlKSkKLSAgICAgICAgICA7Ci0gICAgICB9KTsKLQotICAgIGF1dG8gYSA9IHN0YXJ0X2dw
dV90aHJlYWRzKGd0aHJlYWRzLCBbPV0gX190ZXN0X2FiaSh1aW50MzJfdCBjKSB7Ci0jaWZuZGVm
IF9NU0NfVkVSCi0gICAgI3ByYWdtYSBub3Vucm9sbAotI2VuZGlmCi0gICAgICB3aGlsZShmKGMs
IGZhbHNlKSkKLSAgICAgICAgOwotICAgIH0pOwotCi0gICAgc3RkOjp0aGlzX3RocmVhZDo6c2xl
ZXBfZm9yKHN0ZDo6Y2hyb25vOjpzZWNvbmRzKGJhc2V0aW1lKSk7Ci0KLSAgICB3b3JrX2l0ZW1f
c3RhdGUuZ3B1X2tlZXBfZ29pbmcgPSAxOwotICAgIHdvcmtfaXRlbV9zdGF0ZS5jcHVfa2VlcF9n
b2luZyA9IDE7Ci0gICAgZm9yICh1aW50MzJfdCBjID0gMDsgYyA8IGN0aHJlYWRzOyArK2MpCi0g
ICAgICAgIHRocmVhZHNbY10uam9pbigpOwotICAgIHN0b3BfZ3B1X3RocmVhZHMoYSk7Ci0KLSAg
ICBraWxsID0gZmFsc2U7Ci0gICAga2lsbGVyLmpvaW4oKTsKLSAgICBpZiAoa2lsbGVkKQotICAg
ICAgICBzdGQ6OmNvdXQgPDwgIktJTExFRCIgPDwgc3RkOjplbmRsOwotCi0gICAgYXRvbWljX3Np
Z25hbF9mZW5jZShzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKLSAgICBhdXRvIGNvbnN0IGVu
ZCA9IHN0ZDo6bWFrZV9wYWlyKHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLCBnZXRf
Y3B1X3RpbWUoKSk7Ci0KLSAgICBmcmVlKHRocmVhZHMpOwotCi0gICAgcmV0dXJuIHRpbWVfcmVj
b3JkeyBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRz
PihlbmQuZmlyc3QgLSBzdGFydC5maXJzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2Vy
X3RpbWVfY29uc3VtZWQoc3RhcnQuc2Vjb25kLCBlbmQuc2Vjb25kKSwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzeXN0ZW1fdGltZV9jb25zdW1lZChzdGFydC5zZWNvbmQsIGVuZC5zZWNvbmQp
IH07Ci19Ci0KLXN0ZDo6c3RyaW5nIG9ubHlzY2VuYXJpbzsKLQotc3RhdGljIGNvbnN0IHN0ZDo6
c3RyaW5nIGNhbGlicmF0aW9uX3MgPSAiLWNhbGlicmF0aW9uLSI7Ci0KLXRlbXBsYXRlPGNsYXNz
IEY+Ci12b2lkIHJ1bl9zY2VuYXJpbyhGIGYsIHVpbnQzMl90JiBjb3VudCwgZG91YmxlJiBwcm9k
dWN0LCB1aW50NjRfdCB0YXJnZXRfZHVyYXRpb25faW5fdXMsIGNoYXIgY29uc3QqIGxvY2tuYW1l
LCBjaGFyIGNvbnN0KiBzY2VuYXJpb25hbWUsIHVpbnQzMl90IGN0aHJlYWRzLCB1aW50MzJfdCBn
dGhyZWFkcywgYm9vbCBjb250ZW5kZWQpIHsKLQotICBpZihsb2NrbmFtZSAhPSBjYWxpYnJhdGlv
bl9zICYmICFvbmx5c2NlbmFyaW8uZW1wdHkoKSAmJiBvbmx5c2NlbmFyaW8gIT0gc2NlbmFyaW9u
YW1lKQotICAgIHJldHVybjsKLQotICBhdXRvIGNvbnN0IGdwdV93b3JrX2l0ZW1fY291bnQgPSB3
b3JrX2l0ZW1fZ3B1X2Nvc3RfaW5fdXMgPyB1aW50NjRfdChndGhyZWFkcyAmJiB0YXJnZXRfZHVy
YXRpb25faW5fdXMgPyBzdGQ6OmNlaWwodGFyZ2V0X2R1cmF0aW9uX2luX3VzIC8gd29ya19pdGVt
X2dwdV9jb3N0X2luX3VzKSA6IDEpIDogMTAwMDA7Ci0gIGF1dG8gY29uc3QgdGFyZ2V0X2NwdV9k
dXJhdGlvbiA9IGd0aHJlYWRzID8gZ3B1X3dvcmtfaXRlbV9jb3VudCAqIHdvcmtfaXRlbV9ncHVf
Y29zdF9pbl91cyA6IHRhcmdldF9kdXJhdGlvbl9pbl91czsKLSAgYXV0byBjb25zdCBjcHVfd29y
a19pdGVtX2NvdW50ID0gd29ya19pdGVtX2NwdV9jb3N0X2luX3VzID8gdWludDY0X3QoY3RocmVh
ZHMgJiYgdGFyZ2V0X2NwdV9kdXJhdGlvbiA/IHN0ZDo6Y2VpbCh0YXJnZXRfY3B1X2R1cmF0aW9u
IC8gd29ya19pdGVtX2NwdV9jb3N0X2luX3VzKSA6IDEpIDogMTAwMDA7Ci0KLSAgd29ya19pdGVt
X3N0cnVjdCogY29uc3Qgd2kgPSBhbGxvY2F0ZV93b3JrX2l0ZW0oKTsKLQotICBhdXRvIGcgPSBb
PV0gX190ZXN0X2FiaSAodWludDMyX3QgaW5kZXgsIGJvb2wgaXNfY3B1KSAtPiBib29sIHsKLSAg
ICBhdXRvIGNvbnN0IHdvcmtfaXRlbV9jb3VudCA9IGlzX2NwdSA/IGNwdV93b3JrX2l0ZW1fY291
bnQgOiBncHVfd29ya19pdGVtX2NvdW50OwotICAgIGF1dG8gY29uc3QgdCA9IGYoaW5kZXgsIGlz
X2NwdSk7Ci0gICAgdC0+bG9jaygpOyAKLSAgICBpbnQga2VlcF9nb2luZ19zdGF0ZSA9IDI7Ci0j
aWZuZGVmIF9NU0NfVkVSCi0gICAgI3ByYWdtYSBub3Vucm9sbAotI2VuZGlmCi0gICAgZm9yICh1
aW50NjRfdCBqID0gMDsgaiA8IHdvcmtfaXRlbV9jb3VudCAmJiBrZWVwX2dvaW5nX3N0YXRlID4g
MDsgKytqKQotICAgICAgICBrZWVwX2dvaW5nX3N0YXRlID0gd2ktPmRvX2l0KGluZGV4LCBpc19j
cHUpOwotICAgIHQtPnVubG9jaygpOwotICAgIHJldHVybiBrZWVwX2dvaW5nX3N0YXRlID4gMTsK
LSAgfTsKLSAgYXV0byBjb25zdCB0ciA9IHJ1bl9jb3JlKCp3aSwgZywgY3RocmVhZHMsIGd0aHJl
YWRzKTsKLQotICBpZih3b3JrX2l0ZW1fY3B1X2Nvc3RfaW5fdXMgPT0gMC4wICYmIGN0aHJlYWRz
KQotICAgIHdvcmtfaXRlbV9jcHVfY29zdF9pbl91cyA9IHRyLnVzLmNvdW50KCkgLyBkb3VibGUo
c3RkOjphY2N1bXVsYXRlKHdpLT5jcHVfY291bnQsIHdpLT5jcHVfY291bnQgKyBjdGhyZWFkcywg
MHVsbCkpOwotICBpZih3b3JrX2l0ZW1fZ3B1X2Nvc3RfaW5fdXMgPT0gMC4wICYmIGd0aHJlYWRz
KQotICAgIHdvcmtfaXRlbV9ncHVfY29zdF9pbl91cyA9IHRyLnVzLmNvdW50KCkgLyBkb3VibGUo
c3RkOjphY2N1bXVsYXRlKHdpLT5ncHVfY291bnQsIHdpLT5ncHVfY291bnQgKyBndGhyZWFkcywg
MHVsbCkpOwotCi0gIHByb2R1Y3QgKj0gcmVwb3J0KCp3aSwgdHIsIGxvY2tuYW1lLCBzY2VuYXJp
b25hbWUsIGN0aHJlYWRzLCBndGhyZWFkcywgY29udGVuZGVkLCBjcHVfd29ya19pdGVtX2NvdW50
LCBncHVfd29ya19pdGVtX2NvdW50LCBmYWxzZSk7Ci0gIGNvdW50ICs9IDE7Ci0KLSAgZnJlZV93
b3JrX2l0ZW0od2kpOwotfQotCi12b2lkKiBhbGxvY2F0ZV9oZWFwKHNpemVfdCBzKSB7Ci0gICAg
dm9pZCogaDsKLSAgICAjaWZkZWYgX19OVkNDX18KLSAgICAgICAgaWYoY2FwIDwgNikKLSAgICAg
ICAgICAgIGN1ZGFIb3N0QWxsb2MoJmgsIHMsIDApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGN1ZGFNYWxsb2NNYW5hZ2VkKCZoLCBzKTsKLSAgICAgICAgICAgIGN1ZGFNZW1BZHZpc2Uo
aCwgcywgY3VkYU1lbUFkdmlzZVNldFByZWZlcnJlZExvY2F0aW9uLCAwKTsKLSAgICAgICAgfQot
ICAgICNlbHNlCi0gICAgICAgIGggPSBtYWxsb2Mocyk7Ci0gICAgI2VuZGlmCi0gICAgbWVtc2V0
KGgsIDAsIHMpOwotICAgIHJldHVybiBoOwotfQotCi12b2lkIGZyZWVfaGVhcCh2b2lkKiBoKSB7
Ci0jaWZkZWYgX19OVkNDX18KLSAgICBpZihjYXAgPCA2KQotICAgICAgICBjdWRhRnJlZUhvc3Qo
aCk7Ci0gICAgZWxzZQotICAgICAgICBjdWRhRnJlZShoKTsKLSNlbHNlCi0gICAgZnJlZShoKTsK
LSNlbmRpZgotfQotCi10ZW1wbGF0ZTxjbGFzcyBUPgotdm9pZCBydW5fc2NlbmFyaW9fc2luZ2xl
dGhyZWFkZWQoY2hhciBjb25zdCogbG9ja25hbWUsIHVpbnQzMl90JiBjb3VudCwgZG91YmxlJiBw
cm9kdWN0LCB1aW50MzJfdCBjdGhyZWFkcywgdWludDMyX3QgZ3RocmVhZHMpIHsKLQotICAgIHZv
aWQqIGhlYXAgPSBhbGxvY2F0ZV9oZWFwKHNpemVvZihUKSthbGlnbm9mKFQpKTsKLSAgICBUKiB0
ID0gbmV3IChoZWFwKSBUOwotCi0gICAgYXV0byBmID0gWz1dIF9fdGVzdF9hYmkgKHVpbnQzMl90
LCBib29sKSAtPiBUKiB7Ci0gICAgICAgIHJldHVybiB0OwotICAgIH07Ci0gICAgcnVuX3NjZW5h
cmlvKGYsIGNvdW50LCBwcm9kdWN0LCAwLCBsb2NrbmFtZSwgInNpbmdsZXRocmVhZGVkIiwgY3Ro
cmVhZHMsIGd0aHJlYWRzLCBmYWxzZSk7Ci0KLSAgICB0LT5+VCgpOwotICAgIGZyZWVfaGVhcCho
ZWFwKTsKLX0KLQotc3RhdGljIGNvbnN0ZXhwciBpbnQgdW5jb250ZW5kZWRfY291bnQgPSAxPDwy
MDsKLQotdGVtcGxhdGU8Y2xhc3MgVD4KLXZvaWQgcnVuX3NjZW5hcmlvX3VuY29udGVuZGVkKGNo
YXIgY29uc3QqIGxvY2tuYW1lLCB1aW50MzJfdCYgY291bnQsIGRvdWJsZSYgcHJvZHVjdCwgdWlu
dDMyX3QgY3RocmVhZHMsIHVpbnQzMl90IGd0aHJlYWRzKSB7Ci0KLSAgICB2b2lkKiBoZWFwID0g
YWxsb2NhdGVfaGVhcCh1bmNvbnRlbmRlZF9jb3VudCpzaXplb2YoVCkgKyBhbGlnbm9mKFQpKTsK
LSAgICBUKiB0ID0gbmV3IChoZWFwKSBUW3VuY29udGVuZGVkX2NvdW50XTsKLQotICAgIGFzc2Vy
dChjdGhyZWFkcyArIGd0aHJlYWRzIDw9IHVuY29udGVuZGVkX2NvdW50KTsKLSAgICBhdXRvIGYg
PSBbPV0gX190ZXN0X2FiaSAodWludDMyX3QgaW5kZXgsIGJvb2wgaXNfY3B1KSAtPiBUKiB7Ci0g
ICAgICAgIGlmIChpc19jcHUpCi0gICAgICAgICAgICByZXR1cm4gdCArIGluZGV4OwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gdCArIHVuY29udGVuZGVkX2NvdW50IC0gMSAtIGlu
ZGV4OwotICAgIH07Ci0KLSAgICBydW5fc2NlbmFyaW8oZiwgY291bnQsIHByb2R1Y3QsIDAsIGxv
Y2tuYW1lLCAidW5jb250ZW5kZWQiLCBjdGhyZWFkcywgZ3RocmVhZHMsIGZhbHNlKTsKLQotICAg
IGZvcihzaXplX3QgaSA9IDA7IGkgPCB1bmNvbnRlbmRlZF9jb3VudDsgKytpKQotICAgICAgICB0
W2ldLn5UKCk7Ci0gICAgZnJlZV9oZWFwKGhlYXApOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBUPgot
dm9pZCBydW5fc2NlbmFyaW9fc2hvcnRlc3QoY2hhciBjb25zdCogbG9ja25hbWUsIHVpbnQzMl90
JiBjb3VudCwgZG91YmxlJiBwcm9kdWN0LCB1aW50MzJfdCBjdGhyZWFkcywgdWludDMyX3QgZ3Ro
cmVhZHMpIHsKLQotICAgIHZvaWQqIGhlYXAgPSBhbGxvY2F0ZV9oZWFwKHNpemVvZihUKSArIGFs
aWdub2YoVCkpOwotICAgIFQqIHQgPSBuZXcgKGhlYXApIFQ7Ci0KLSAgICBhdXRvIGYgPSBbPV0g
X190ZXN0X2FiaSAodWludDMyX3QsIGJvb2wpIC0+IFQqIHsKLSAgICAgICAgcmV0dXJuIHQ7Ci0g
ICAgfTsKLSAgICBydW5fc2NlbmFyaW8oZiwgY291bnQsIHByb2R1Y3QsIDAsIGxvY2tuYW1lLCAi
c2hvcnRlc3QiLCBjdGhyZWFkcywgZ3RocmVhZHMsIHRydWUpOwotCi0gICAgdC0+flQoKTsKLSAg
ICBmcmVlX2hlYXAoaGVhcCk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+Ci12b2lkIHJ1bl9zY2Vu
YXJpb19zaG9ydChjaGFyIGNvbnN0KiBsb2NrbmFtZSwgdWludDMyX3QmIGNvdW50LCBkb3VibGUm
IHByb2R1Y3QsIHVpbnQzMl90IGN0aHJlYWRzLCB1aW50MzJfdCBndGhyZWFkcykgewotCi0gICAg
dm9pZCogaGVhcCA9IGFsbG9jYXRlX2hlYXAoc2l6ZW9mKFQpICsgYWxpZ25vZihUKSk7Ci0gICAg
VCogdCA9IG5ldyAoaGVhcCkgVDsKLQotICAgIGF1dG8gZiA9IFs9XSBfX3Rlc3RfYWJpICh1aW50
MzJfdCwgYm9vbCkgLT4gVCogewotICAgICAgICByZXR1cm4gdDsKLSAgICB9OwotICAgIHJ1bl9z
Y2VuYXJpbyhmLCBjb3VudCwgcHJvZHVjdCwgMSwgbG9ja25hbWUsICJzaG9ydCIsIGN0aHJlYWRz
LCBndGhyZWFkcywgdHJ1ZSk7Ci0KLSAgICB0LT5+VCgpOwotICAgIGZyZWVfaGVhcChoZWFwKTsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgVD4KLXZvaWQgcnVuX3NjZW5hcmlvX2xvbmcoY2hhciBjb25z
dCogbG9ja25hbWUsIHVpbnQzMl90JiBjb3VudCwgZG91YmxlJiBwcm9kdWN0LCB1aW50MzJfdCBj
dGhyZWFkcywgdWludDMyX3QgZ3RocmVhZHMpIHsKLSAgCi0gICAgdm9pZCogaGVhcCA9IGFsbG9j
YXRlX2hlYXAoc2l6ZW9mKFQpICsgYWxpZ25vZihUKSk7Ci0gICAgVCogdCA9IG5ldyAoaGVhcCkg
VDsKLQotICAgIGF1dG8gZiA9IFs9XSBfX3Rlc3RfYWJpICh1aW50MzJfdCwgYm9vbCkgLT4gVCog
ewotICAgICAgICByZXR1cm4gdDsKLSAgICB9OwotICAgIHJ1bl9zY2VuYXJpbyhmLCBjb3VudCwg
cHJvZHVjdCwgMTAwLCBsb2NrbmFtZSwgImxvbmciLCBjdGhyZWFkcywgZ3RocmVhZHMsIHRydWUp
OwotCi0gICAgdC0+flQoKTsKLSAgICBmcmVlX2hlYXAoaGVhcCk7Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIFQ+Ci12b2lkIHJ1bl9zY2VuYXJpb19waGFzZXIoY2hhciBjb25zdCogbG9ja25hbWUsIGNo
YXIgY29uc3QqIHNjZW5hcmlvbmFtZSwgdWludDMyX3Qgd2ljb3VudCwgdWludDMyX3QmIGNvdW50
LCBkb3VibGUmIHByb2R1Y3QsIHVpbnQzMl90IGN0aHJlYWRzLCB1aW50MzJfdCBndGhyZWFkcykg
ewotCi0gICAgaWYgKCFvbmx5c2NlbmFyaW8uZW1wdHkoKSAmJiBvbmx5c2NlbmFyaW8gIT0gc2Nl
bmFyaW9uYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2b2lkKiBoZWFwID0gYWxsb2NhdGVf
aGVhcChzaXplb2YoVCkgKyBhbGlnbm9mKFQpKTsKLSAgICBUKiB0ID0gbmV3IChoZWFwKSBUKGN0
aHJlYWRzICsgZ3RocmVhZHMpOwotCi0gICAgd29ya19pdGVtX3N0cnVjdCogY29uc3Qgd2kgPSBh
bGxvY2F0ZV93b3JrX2l0ZW0oKTsKLQotICAgIGF1dG8gZyA9IFs9XSBfX3Rlc3RfYWJpKHVpbnQz
Ml90IGluZGV4LCBib29sIGlzX2NwdSkgLT4gYm9vbCB7Ci0gICAgICAgIGF1dG8gcmV0ID0gd2kt
PmRvX2l0KGluZGV4LCBpc19jcHUpID4gMTsKLSAgICAgICAgZm9yKHVpbnQzMl90IGkgPSAwO3Jl
dCAmJiBpIDwgd2ljb3VudDsgKytpKSB7Ci0gICAgICAgICAgICB0LT5hcnJpdmVfYW5kX3dhaXQo
KTsKLSAgICAgICAgICAgIHJldCA9IHdpLT5kb19pdChpbmRleCwgaXNfY3B1KSA+IDE7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYoIXJldCkKLSAgICAgICAgICAgIHQtPmFycml2ZV9hbmRfZHJvcCgp
OwotICAgICAgICByZXR1cm4gcmV0OwotICAgIH07Ci0gICAgYXV0byBjb25zdCB0ciA9IHJ1bl9j
b3JlKCp3aSwgZywgY3RocmVhZHMsIGd0aHJlYWRzKTsKLSAgICBwcm9kdWN0ICo9IHJlcG9ydCgq
d2ksIHRyLCBsb2NrbmFtZSwgc2NlbmFyaW9uYW1lLCBjdGhyZWFkcywgZ3RocmVhZHMsIGZhbHNl
LCB3aWNvdW50LCB3aWNvdW50LCB0cnVlKTsKLSAgICBjb3VudCArPSAxOwotCi0gICAgZnJlZV93
b3JrX2l0ZW0od2kpOwotICAgIHQtPn5UKCk7Ci0gICAgZnJlZV9oZWFwKGhlYXApOwotfQotCi11
aW50MzJfdCBvbmx5Y3B1ID0gfjB1LCBvbmx5Z3B1ID0gfjB1OwotCi1zdGQ6OnN0cmluZyBvbmx5
bG9jazsKLQotdGVtcGxhdGU8Y2xhc3MgRj4KLXZvaWQgcnVuX3NjZW5hcmlvc19pbm5lcihjaGFy
IGNvbnN0KiBsb2NrbmFtZSwgRiBmKSB7Ci0KLSAgICBpZiAobG9ja25hbWUgIT0gY2FsaWJyYXRp
b25fcyAmJiAhb25seWxvY2suZW1wdHkoKSAmJiBvbmx5bG9jayAhPSBsb2NrbmFtZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdWludDMyX3QgY29uc3QgaGMgPSBzdGQ6OnRocmVhZDo6aGFyZHdh
cmVfY29uY3VycmVuY3koKTsKLSAgICB1aW50MzJfdCBjb25zdCBjdGhyZWFkc1tdID0geyAwLCAx
LCBoYyA+PiAyLCBoYyA+PiAxLCAoaGMgPj4gMikgKyAoaGMgPj4gMSksIGhjIH07Ci0gICAgdWlu
dDMyX3QgY29uc3QgbWF4ZyA9IG1heF9ncHVfdGhyZWFkcygpOwotICAgIHVpbnQzMl90IGNvbnN0
IG1pbmcgPSBtYXhnID8gMSA6IDA7Ci0gICAgdWludDMyX3QgY29uc3QgbG93ZyA9IG1heGcgPj4g
KGNhcCA+PSA3ID8gNSs0IDogNCk7Ci0gICAgdWludDMyX3QgY29uc3QgbWlkZyA9IG1heGcgPj4g
KGNhcCA+PSA3ID8gNSA6IDQpOwotICAgIHVpbnQzMl90IGNvbnN0IGd0aHJlYWRzW10gPSB7IDAs
IG1pbmcsIGxvd2cgPj4gMSwgbG93ZywgbWlkZywgbWF4ZyB9OwotCi0gICAgc3RkOjpzZXQ8c3Rk
OjpwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4+IHM7Ci0gICAgZm9yICh1aW50MzJfdCBjIDogY3Ro
cmVhZHMpIHsKLSAgICAgICAgZm9yICh1aW50MzJfdCBnIDogZ3RocmVhZHMpIHsKLSAgICAgICAg
ICAgIGlmIChsb2NrbmFtZSAhPSBjYWxpYnJhdGlvbl9zKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG9ubHljcHUgIT0gfjB1KSBjID0gb25seWNwdTsKLSAgICAgICAgICAgICAgICBpZiAob25seWdw
dSAhPSB+MHUpIGcgPSBvbmx5Z3B1OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0byBj
b25zdCBwID0gc3RkOjptYWtlX3BhaXIoYywgZyk7Ci0gICAgICAgICAgICBpZiAocy5maW5kKHAp
ICE9IHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzLmlu
c2VydChwKTsKLSAgICAgICAgICAgIGYoYywgZyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXRl
bXBsYXRlPGNsYXNzIFQ+Ci12b2lkIHJ1bl9iYXJyaWVyX3NjZW5hcmlvcyhjaGFyIGNvbnN0KiBs
b2NrbmFtZSwgdWludDMyX3QmIGNvdW50LCBkb3VibGUmIHByb2R1Y3QpIHsKLSAgICByZXR1cm4g
cnVuX3NjZW5hcmlvc19pbm5lcihsb2NrbmFtZSwgWyZdKGludCBjLCBpbnQgZykgewotICAgICAg
ICBzd2l0Y2ggKGMgKyBnKSB7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBydW5fc2Nl
bmFyaW9fcGhhc2VyPFQ+KGxvY2tuYW1lLCAic2hvcnRfcGhhc2VyIiwgMSwgY291bnQsIHByb2R1
Y3QsIGMsIGcpOwotICAgICAgICAgICAgcnVuX3NjZW5hcmlvX3BoYXNlcjxUPihsb2NrbmFtZSwg
ImxvbmdfcGhhc2VyIiwgMTAwMCwgY291bnQsIHByb2R1Y3QsIGMsIGcpOwotICAgICAgICBjYXNl
IDA6Ci0gICAgICAgICAgICA7Ci0gICAgICAgIH0KLSAgICB9KTsKLX0KLSAgICAKLXRlbXBsYXRl
PGNsYXNzIFQ+Ci12b2lkIHJ1bl9tdXRleF9zY2VuYXJpb3MoY2hhciBjb25zdCogbG9ja25hbWUs
IHVpbnQzMl90JiBjb3VudCwgZG91YmxlJiBwcm9kdWN0KSB7Ci0KLSAgICByZXR1cm4gcnVuX3Nj
ZW5hcmlvc19pbm5lcihsb2NrbmFtZSwgWyZdKGludCBjLCBpbnQgZykgewotICAgICAgICBzd2l0
Y2ggKGMgKyBnKSB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJ1bl9zY2VuYXJpb19z
aW5nbGV0aHJlYWRlZDxUPihsb2NrbmFtZSwgY291bnQsIHByb2R1Y3QsIGMsIGcpOwotICAgICAg
ICBjYXNlIDA6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJ1bl9zY2VuYXJpb191bmNvbnRlbmRlZDxUPihsb2NrbmFtZSwgY291bnQsIHByb2R1Y3Qs
IGMsIGcpOwotICAgICAgICAgICAgcnVuX3NjZW5hcmlvX3Nob3J0ZXN0PFQ+KGxvY2tuYW1lLCBj
b3VudCwgcHJvZHVjdCwgYywgZyk7Ci0gICAgICAgICAgICBydW5fc2NlbmFyaW9fc2hvcnQ8VD4o
bG9ja25hbWUsIGNvdW50LCBwcm9kdWN0LCBjLCBnKTsKLSAgICAgICAgICAgIHJ1bl9zY2VuYXJp
b19sb25nPFQ+KGxvY2tuYW1lLCBjb3VudCwgcHJvZHVjdCwgYywgZyk7Ci0gICAgICAgIH0KLSAg
ICB9KTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRm4+Ci12b2lkIHJ1bl9hbmRfcmVwb3J0X3NjZW5h
cmlvcyhGbiBmbiwgY2hhciBjb25zdCogbG9ja25hbWUsIHVpbnQzMl90JiBjb3VudCwgZG91Ymxl
JiBwcm9kdWN0KSB7Ci0KLSAgICB1aW50MzJfdCBjb3VudF8gPSAwOyAKLSAgICBkb3VibGUgcHJv
ZHVjdF8gPSAxLjA7Ci0KLSAgICBmbihsb2NrbmFtZSwgY291bnRfLCBwcm9kdWN0Xyk7Ci0gICAg
aWYoY291bnRfKQotICAgICAgc3RkOjpjb3V0IDw8ICI9PSAiIDw8IGxvY2tuYW1lIDw8ICIgOiAi
IDw8IHN0ZDo6Zml4ZWQgPDwgc3RkOjpzZXRwcmVjaXNpb24oMCkgPDwgMTAwMDAvc3RkOjpwb3co
cHJvZHVjdF8sIDEuMC9jb3VudF8pIDw8ICIgbG9ja21hcmtzID09IiA8PCBzdGQ6OmVuZGw7Ci0g
ICAgCi0gICAgY291bnQgKz0gY291bnRfOwotICAgIHByb2R1Y3QgKj0gcHJvZHVjdF87Ci19Ci0K
LSNkZWZpbmUgcnVuX2FuZF9yZXBvcnRfbXV0ZXhfc2NlbmFyaW9zKHgsYyxzKSBydW5fYW5kX3Jl
cG9ydF9zY2VuYXJpb3MocnVuX211dGV4X3NjZW5hcmlvczx3cmFwcGVkX211dGV4PHg+PiwgI3gs
YyxzKQotI2RlZmluZSBydW5fYW5kX3JlcG9ydF9iYXJyaWVyX3NjZW5hcmlvcyh4LGMscykgcnVu
X2FuZF9yZXBvcnRfc2NlbmFyaW9zKHJ1bl9iYXJyaWVyX3NjZW5hcmlvczx4PiwjeCxjLHMpCi0K
LXN0cnVjdCBudWxsX211dGV4IHsKLQotICBfX3Rlc3RfYWJpIHZvaWQgbG9jaygpIHsgfQotICBf
X3Rlc3RfYWJpIHZvaWQgdW5sb2NrKCkgeyB9Ci0KLX07Ci0KLXZvaWQgcnVuX2NhbGlicmF0aW9u
KCkgewotCi0gIHVpbnQzMl90IGNvdW50ID0gMDsKLSAgZG91YmxlIHByb2R1Y3QgPSAxLjA7Ci0K
LSAgcmV0dXJuIHJ1bl9zY2VuYXJpb3NfaW5uZXIoY2FsaWJyYXRpb25fcy5jX3N0cigpLCBbJl0o
aW50IGMsIGludCBnKSB7Ci0gICAgc3dpdGNoIChjICsgZykgewotICAgICAgY2FzZSAxOgotICAg
ICAgICBydW5fc2NlbmFyaW9fc2luZ2xldGhyZWFkZWQ8bnVsbF9tdXRleD4oY2FsaWJyYXRpb25f
cy5jX3N0cigpLCBjb3VudCwgcHJvZHVjdCwgYywgZyk7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICA7Ci0gICAgfQotICB9KTsKLX0KLQotI2lmZGVmIF9fdGVzdF93dGYKLQotICAgICNpbmNsdWRl
ICJjb25maWcuaCIKLQotICAgICNpbmNsdWRlICJUb3lMb2Nrcy5oIgotICAgICNpbmNsdWRlIDx0
aHJlYWQ+Ci0gICAgI2luY2x1ZGUgPHVuaXN0ZC5oPgotICAgICNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KLSAgICAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KLSAgICAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSAgICAjaW5jbHVkZSA8d3RmL0xvY2suaD4KLSAgICAjaW5jbHVkZSA8d3Rm
L1BhcmtpbmdMb3QuaD4KLSAgICAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotICAgICNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0gICAgI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmlt
aXRpdmVzLmg+Ci0gICAgI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSAgICAjaW5jbHVkZSA8d3Rm
L1dvcmRMb2NrLmg+Ci0gICAgI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2VuZGlm
Ci0KLXRlbXBsYXRlPGNsYXNzIE0+Ci1zdHJ1Y3QgYWxpZ25hcyg2NCkgd3JhcHBlZF9tdXRleCB7
Ci0KLSAgICB3cmFwcGVkX211dGV4KCkgOiBfX20oKSB7IH0KLSAgICB3cmFwcGVkX211dGV4KHdy
YXBwZWRfbXV0ZXggY29uc3QmKSA9IGRlbGV0ZTsKLSAgICB3cmFwcGVkX211dGV4JiBvcGVyYXRv
cj0od3JhcHBlZF9tdXRleCBjb25zdCYpID0gZGVsZXRlOwotCi0gICAgX190ZXN0X2FiaSB2b2lk
IGxvY2soKSBub2V4Y2VwdCB7Ci0gICAgICAgIF9fbS5sb2NrKCk7Ci0gICAgfQotICAgIF9fdGVz
dF9hYmkgdm9pZCB1bmxvY2soKSBub2V4Y2VwdCB7Ci0gICAgICAgIF9fbS51bmxvY2soKTsKLSAg
ICB9Ci0KLSAgICBNIF9fbTsKLX07Ci0KLXZvaWQgcHJpbnRfaGVhZGVycygpIHsKLQotICBzdGQ6
OmNvdXQgPDwgc3RkOjpzZXR3KDI1KSA8PCAibG9jayIKLSAgICAgICAgICAgIDw8IHN0ZDo6c2V0
dygxNSkgPDwgInNjZW5hcmlvIgotICAgICAgICAgICAgPDwgc3RkOjpzZXR3KDUpIDw8ICJjcHUi
IAotICAgICAgICAgICAgPDwgc3RkOjpzZXR3KDEwKSA8PCAic2VjdGlvbnMiCi0gICAgICAgICAg
ICA8PCBzdGQ6OnNldHcoMTApIDw8ICJpdGVtcyIKLSAgICAgICAgICAgIDw8IHN0ZDo6c2V0dyg1
KSA8PCAiZmFpciIKLSAgICAgICAgICAgIDw8IHN0ZDo6c2V0dygxMCkgPDwgImdwdSIKLSAgICAg
ICAgICAgIDw8IHN0ZDo6c2V0dygxMCkgPDwgInNlY3Rpb25zIgotICAgICAgICAgICAgPDwgc3Rk
OjpzZXR3KDEwKSA8PCAiaXRlbXMiCi0gICAgICAgICAgICA8PCBzdGQ6OnNldHcoNSkgPDwgImZh
aXIiCi0gICAgICAgICAgICA8PCBzdGQ6OnNldHcoMTApIDw8ICJ3YWxsdGltZSIKLSAgICAgICAg
ICAgIDw8IHN0ZDo6c2V0dygxMCkgPDwgImNwdXRpbWUiCi0gICAgICAgICAgICA8PCBzdGQ6OnNl
dHcoNSkgIDw8ICJ1OnMiCi0gICAgICAgICAgICA8PCBzdGQ6OnNldHcoMTApIDw8ICJyYXRlIiAK
LSAgICAgICAgICAgIDw8IHN0ZDo6c2V0dygxMCkgPDwgImxhdGVuY3kiIAotICAgICAgICAgICAg
PDwgc3RkOjpzZXR3KDEwKSA8PCAib3ZlcmhlYWQiIAotICAgICAgICAgICAgPDwgc3RkOjpzZXR3
KDUpIDw8ICJmYWlyIgotICAgICAgICAgICAgPDwgc3RkOjplbmRsOwotCi0gIGNzdiA8PCAibG9j
aywiCi0gICAgICA8PCAic2NlbmFyaW8sIgotICAgICAgPDwgImNwdSwiCi0gICAgICA8PCAic2Vj
dGlvbnMsIgotICAgICAgPDwgIml0ZW1zLCIKLSAgICAgIDw8ICJmYWlyLCIKLSAgICAgIDw8ICJn
cHUsIgotICAgICAgPDwgInNlY3Rpb25zLCIKLSAgICAgIDw8ICJpdGVtcywiCi0gICAgICA8PCAi
ZmFpciwiCi0gICAgICA8PCAid2FsbHRpbWUsIgotICAgICAgPDwgImNwdXRpbWUsIgotICAgICAg
PDwgInU6cywiCi0gICAgICA8PCAicmF0ZSwiCi0gICAgICA8PCAibGF0ZW5jeSwiCi0gICAgICA8
PCAib3ZlcmhlYWQsIgotICAgICAgPDwgImZhaXIsIgotICAgICAgPDwgc3RkOjplbmRsOwotfQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmLnNoIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCA5MTdmZDZkMjQyMmIxOGQzN2M3MGVjYzExMGY2YjZlOGJhMzdjZjZmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLSMhL2Jpbi9i
YXNoCi0KLXNldCAtZQotc2V0IC11Ci1zZXQgLXgKLQotRkxBR1M9Ii1PcyAtVyAtc3RkPWMrKzE0
IC1mdmlzaWJpbGl0eT1oaWRkZW4gLURXVEZfREVGQVVMVF9FVkVOVF9MT09QPTAgLURVU0VfR0VO
RVJJQ19FVkVOVF9MT09QPTEiCi1JTkNMVURFUz0iLUkuLyAtSS4vd3RmL2RlcGVuZGVuY2llcyAt
SS4vd3RmL2RlcGVuZGVuY2llcy9pY3UvIgotCi1ERVBFTkRFTkNJRVM9IgotICAgICAgICAgICAg
Li93dGYvQXNzZXJ0aW9ucy5jcHAKLSAgICAgICAgICAgIC4vd3RmL0Nsb2NrVHlwZS5jcHAKLSAg
ICAgICAgICAgIC4vd3RmL0N1cnJlbnRUaW1lLmNwcAotICAgICAgICAgICAgLi93dGYvRGF0YUxv
Zy5jcHAKLSAgICAgICAgICAgIC4vd3RmL0RhdGVNYXRoLmNwcAotICAgICAgICAgICAgLi93dGYv
RmFzdE1hbGxvYy5jcHAKLSAgICAgICAgICAgIC4vd3RmL0ZpbGVQcmludFN0cmVhbS5jcHAKLSAg
ICAgICAgICAgIC4vd3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5jcHAKLSAgICAgICAgICAgIC4vd3Rm
L0xvY2suY3BwCi0gICAgICAgICAgICAuL3d0Zi9Mb2NrZWRQcmludFN0cmVhbS5jcHAKLSAgICAg
ICAgICAgIC4vd3RmL01haW5UaHJlYWQuY3BwCi0gICAgICAgICAgICAuL3d0Zi9Nb25vdG9uaWNU
aW1lLmNwcAotICAgICAgICAgICAgLi93dGYvUGFya2luZ0xvdC5jcHAKLSAgICAgICAgICAgIC4v
d3RmL1ByaW50U3RyZWFtLmNwcAotICAgICAgICAgICAgLi93dGYvUnVuTG9vcC5jcHAKLSAgICAg
ICAgICAgIC4vd3RmL1NlY29uZHMuY3BwCi0gICAgICAgICAgICAuL3d0Zi9TdGFja0JvdW5kcy5j
cHAKLSAgICAgICAgICAgIC4vd3RmL1N0YWNrVHJhY2UuY3BwCi0gICAgICAgICAgICAuL3d0Zi9U
aHJlYWRIb2xkZXIuY3BwCi0gICAgICAgICAgICAuL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5j
cHAKLSAgICAgICAgICAgIC4vd3RmL1RocmVhZGluZy5jcHAKLSAgICAgICAgICAgIC4vd3RmL1Ro
cmVhZGluZ1B0aHJlYWRzLmNwcAotICAgICAgICAgICAgLi93dGYvVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlLmNwcAotICAgICAgICAgICAgLi93dGYvV1RGVGhyZWFkRGF0YS5jcHAKLSAgICAgICAg
ICAgIC4vd3RmL1dhbGxUaW1lLmNwcAotICAgICAgICAgICAgLi93dGYvV29yZExvY2suY3BwCi0g
ICAgICAgICAgICAuL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCi0gICAg
ICAgICAgICAuL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9DYWNoZS5jcHAKLSAgICAgICAgICAg
IC4vd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAotICAgICAgICAgICAg
Li93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvRGVidWdIZWFwLmNwcAotICAgICAgICAgICAgLi93
dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvRW52aXJvbm1lbnQuY3BwCi0gICAgICAgICAgICAuL3d0
Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9HaWdhY2FnZS5jcHAKLSAgICAgICAgICAgIC4vd3RmL2Rl
cGVuZGVuY2llcy9ibWFsbG9jL0hlYXAuY3BwCi0gICAgICAgICAgICAuL3d0Zi9kZXBlbmRlbmNp
ZXMvYm1hbGxvYy9MYXJnZU1hcC5jcHAKLSAgICAgICAgICAgIC4vd3RmL2RlcGVuZGVuY2llcy9i
bWFsbG9jL0xvZ2dpbmcuY3BwCi0gICAgICAgICAgICAuL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxv
Yy9PYmplY3RUeXBlLmNwcAotICAgICAgICAgICAgLi93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2Mv
U2NhdmVuZ2VyLmNwcAotICAgICAgICAgICAgLi93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvU3Rh
dGljTXV0ZXguY3BwCi0gICAgICAgICAgICAuL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9WTUhl
YXAuY3BwCi0gICAgICAgICAgICAuL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9ab25lLmNwcAot
ICAgICAgICAgICAgLi93dGYvZGVwZW5kZW5jaWVzL3VuaWNvZGUuY3BwCi0gICAgICAgICAgICAu
L3d0Zi9kdG9hLmNwcAotICAgICAgICAgICAgLi93dGYvZHRvYS9iaWdudW0tZHRvYS5jYwotICAg
ICAgICAgICAgLi93dGYvZHRvYS9iaWdudW0uY2MKLSAgICAgICAgICAgIC4vd3RmL2R0b2EvY2Fj
aGVkLXBvd2Vycy5jYwotICAgICAgICAgICAgLi93dGYvZHRvYS9kaXktZnAuY2MKLSAgICAgICAg
ICAgIC4vd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2MKLSAgICAgICAgICAgIC4vd3RmL2R0
b2EvZmFzdC1kdG9hLmNjCi0gICAgICAgICAgICAuL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuY2MKLSAg
ICAgICAgICAgIC4vd3RmL2R0b2Evc3RydG9kLmNjCi0gICAgICAgICAgICAuL3d0Zi9nZW5lcmlj
L01haW5UaHJlYWRHZW5lcmljLmNwcAotICAgICAgICAgICAgLi93dGYvZ2VuZXJpYy9SdW5Mb29w
R2VuZXJpYy5jcHAKLSAgICAgICAgICAgIC4vd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAotICAg
ICAgICAgICAgLi93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmNwcAotICAgICAgICAgICAgLi93
dGYvdGV4dC9BdG9taWNTdHJpbmdUYWJsZS5jcHAKLSAgICAgICAgICAgIC4vd3RmL3RleHQvQ1N0
cmluZy5jcHAKLSAgICAgICAgICAgIC4vd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKLSAgICAg
ICAgICAgIC4vd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKLSAgICAgICAgICAgIC4vd3RmL3RleHQv
U3RyaW5nVmlldy5jcHAKLSAgICAgICAgICAgIC4vd3RmL3RleHQvU3ltYm9sSW1wbC5jcHAKLSAg
ICAgICAgICAgIC4vd3RmL3RleHQvU3ltYm9sUmVnaXN0cnkuY3BwCi0gICAgICAgICAgICAuL3d0
Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcAotICAgICAgICAgICAgLi93dGYvdGV4dC9XVEZT
dHJpbmcuY3BwCi0gICAgICAgICAgICAuL3d0Zi90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyLmNwcAot
ICAgICAgICAgICAgLi93dGYvdGV4dC9pY3UvVVRleHRQcm92aWRlckxhdGluMS5jcHAKLSAgICAg
ICAgICAgIC4vd3RmL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJVVEYxNi5jcHAKLSAgICAgICAgICAg
IC4vd3RmL3RleHQvdW5peC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVVW5peC5jcHAKLSAg
ICAgICAgICAgIC4vd3RmL3VuaWNvZGUvVVRGOC5jcHAKLSIKLQoteGNydW4gY2xhbmcrKyAtbyBD
b25kaXRpb25TcGVlZFRlc3QgLi93dGYvYmVuY2htYXJrcy9Db25kaXRpb25TcGVlZFRlc3QuY3Bw
ICRGTEFHUyAkSU5DTFVERVMgJERFUEVOREVOQ0lFUwoteGNydW4gY2xhbmcrKyAtbyBMb2NrRmFp
cm5lc3NUZXN0IC4vd3RmL2JlbmNobWFya3MvTG9ja0ZhaXJuZXNzVGVzdC5jcHAgJEZMQUdTICRJ
TkNMVURFUyAkREVQRU5ERU5DSUVTCi14Y3J1biBjbGFuZysrIC1vIExvY2tTcGVlZFRlc3QgLi93
dGYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcCAkRkxBR1MgJElOQ0xVREVTICRERVBFTkRF
TkNJRVMKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9BU0NJ
SUNUeXBlLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvQVNDSUlDVHlwZS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTU0MGI4MzRhYjMzYzQzMDM1YTBkZmU4
ZWQzNjlkOWIzYTBiZjg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9BU0NJSUNUeXBlLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwyNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV1RGX0FTQ0lJQ1R5cGVfaAotI2Rl
ZmluZSBXVEZfQVNDSUlDVHlwZV9oCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+Ci0KLS8vIFRoZSBiZWhhdmlvciBvZiBtYW55IG9mIHRo
ZSBmdW5jdGlvbnMgaW4gdGhlIDxjdHlwZS5oPiBoZWFkZXIgaXMgZGVwZW5kZW50Ci0vLyBvbiB0
aGUgY3VycmVudCBsb2NhbGUuIEJ1dCBpbiB0aGUgV2ViS2l0IHByb2plY3QsIGFsbCB1c2VzIG9m
IHRob3NlIGZ1bmN0aW9ucwotLy8gYXJlIGluIGNvZGUgcHJvY2Vzc2luZyBzb21ldGhpbmcgdGhh
dCdzIG5vdCBsb2NhbGUtc3BlY2lmaWMuIFRoZXNlIGVxdWl2YWxlbnRzCi0vLyBmb3Igc29tZSBv
ZiB0aGUgPGN0eXBlLmg+IGZ1bmN0aW9ucyBhcmUgbmFtZWQgbW9yZSBleHBsaWNpdGx5LCBub3Qg
ZGVwZW5kZW50Ci0vLyBvbiB0aGUgQyBsaWJyYXJ5IGxvY2FsZSwgYW5kIHdlIHNob3VsZCBhbHNv
IG9wdGltaXplIHRoZW0gYXMgbmVlZGVkLgotCi0vLyBBbGwgZnVuY3Rpb25zIHJldHVybiBmYWxz
ZSBvciBsZWF2ZSB0aGUgY2hhcmFjdGVyIHVuY2hhbmdlZCBpZiBwYXNzZWQgYSBjaGFyYWN0ZXIK
LS8vIHRoYXQgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgMC03Ri4gU28gdGhleSBjYW4gYmUgdXNlZCBv
biBVbmljb2RlIHN0cmluZ3Mgb3IKLS8vIGNoYXJhY3RlcnMgaWYgdGhlIGludGVudCBpcyB0byBk
byBwcm9jZXNzaW5nIG9ubHkgaWYgdGhlIGNoYXJhY3RlciBpcyBBU0NJSS4KLQotbmFtZXNwYWNl
IFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgaXNBU0NJSShD
aGFyYWN0ZXJUeXBlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgaXNB
U0NJSUFscGhhKENoYXJhY3RlclR5cGUpOwotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gYm9vbCBpc0FTQ0lJQWxwaGFudW1lcmljKENoYXJhY3RlclR5cGUpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBpc0FTQ0lJQmluYXJ5RGlnaXQoQ2hhcmFjdGVyVHlw
ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIGlzQVNDSUlEaWdpdChD
aGFyYWN0ZXJUeXBlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgaXNB
U0NJSUhleERpZ2l0KENoYXJhY3RlclR5cGUpOwotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gYm9vbCBpc0FTQ0lJTG93ZXIoQ2hhcmFjdGVyVHlwZSk7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBib29sIGlzQVNDSUlPY3RhbERpZ2l0KENoYXJhY3RlclR5cGUpOwot
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBpc0FTQ0lJUHJpbnRhYmxlKENo
YXJhY3RlclR5cGUpOwotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBpc0FT
Q0lJU3BhY2UoQ2hhcmFjdGVyVHlwZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIGlzQVNDSUlVcHBlcihDaGFyYWN0ZXJUeXBlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gQ2hhcmFjdGVyVHlwZSB0b0FTQ0lJTG93ZXIoQ2hhcmFjdGVyVHlwZSk7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBDaGFyYWN0ZXJUeXBlIHRvQVNDSUlV
cHBlcihDaGFyYWN0ZXJUeXBlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
dWludDhfdCB0b0FTQ0lJSGV4VmFsdWUoQ2hhcmFjdGVyVHlwZSk7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiB1aW50OF90IHRvQVNDSUlIZXhWYWx1ZShDaGFyYWN0ZXJUeXBlIGZp
cnN0Q2hhcmFjdGVyLCBDaGFyYWN0ZXJUeXBlIHNlY29uZENoYXJhY3Rlcik7Ci0KLWNoYXIgbG93
ZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQodWludDhfdCk7Ci1jaGFyIHVwcGVyTmliYmxlVG9BU0NJ
SUhleERpZ2l0KHVpbnQ4X3QpOwotY2hhciBsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhE
aWdpdCh1aW50OF90KTsKLWNoYXIgdXBwZXJOaWJibGVUb0xvd2VyY2FzZUFTQ0lJSGV4RGlnaXQo
dWludDhfdCk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbChDaGFyYWN0ZXJUeXBlLCBjaGFyIGV4cGVjdGVkQVNDSUlMb3dl
cmNhc2VMZXR0ZXIpOwotCi0vLyBUaGUgdG9BU0NJSUxvd2VyVW5jaGVja2VkIGZ1bmN0aW9uIGNh
biBiZSB1c2VkIGZvciBjb21wYXJpbmcgYW55IGlucHV0IGNoYXJhY3RlcgotLy8gdG8gYSBsb3dl
cmNhc2UgRW5nbGlzaCBjaGFyYWN0ZXIuIFRoZSBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsIGZ1
bmN0aW9uIHNob3VsZAotLy8gYmUgdXNlZCBmb3IgcmVndWxhciBjb21wYXJpc29uIG9mIEFTQ0lJ
IGFscGhhIGNoYXJhY3RlcnMsIGJ1dCBzd2l0Y2ggc3RhdGVtZW50cwotLy8gaW4gdGhlIENTUyB0
b2tlbml6ZXIsIGZvciBleGFtcGxlLCBpbnN0ZWFkIG1ha2UgZGlyZWN0IHVzZSB0b0FTQ0lJTG93
ZXJVbmNoZWNrZWQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBDaGFyYWN0ZXJU
eXBlIHRvQVNDSUlMb3dlclVuY2hlY2tlZChDaGFyYWN0ZXJUeXBlKTsKLQotY29uc3QgdW5zaWdu
ZWQgY2hhciBhc2NpaUNhc2VGb2xkVGFibGVbMjU2XSA9IHsKLSAgICAweDAwLCAweDAxLCAweDAy
LCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LCAweDA5LCAweDBhLCAweDBiLCAw
eDBjLCAweDBkLCAweDBlLCAweDBmLAotICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQs
IDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4
MWUsIDB4MWYsCi0gICAgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwg
MHgyNywgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKLSAg
ICAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAw
eDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmLAotICAgIDB4NDAsIDB4NjEs
IDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksIDB4NmEsIDB4
NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsCi0gICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3Mywg
MHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwgMHg3OSwgMHg3YSwgMHg1YiwgMHg1YywgMHg1
ZCwgMHg1ZSwgMHg1ZiwKLSAgICAweDYwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAw
eDY2LCAweDY3LCAweDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZm
LAotICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4
NzgsIDB4NzksIDB4N2EsIDB4N2IsIDB4N2MsIDB4N2QsIDB4N2UsIDB4N2YsCi0gICAgMHg4MCwg
MHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywgMHg4OCwgMHg4OSwgMHg4
YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKLSAgICAweDkwLCAweDkxLCAweDkyLCAw
eDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LCAweDk4LCAweDk5LCAweDlhLCAweDliLCAweDlj
LCAweDlkLCAweDllLCAweDlmLAotICAgIDB4YTAsIDB4YTEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4
YTUsIDB4YTYsIDB4YTcsIDB4YTgsIDB4YTksIDB4YWEsIDB4YWIsIDB4YWMsIDB4YWQsIDB4YWUs
IDB4YWYsCi0gICAgMHhiMCwgMHhiMSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwgMHhi
NywgMHhiOCwgMHhiOSwgMHhiYSwgMHhiYiwgMHhiYywgMHhiZCwgMHhiZSwgMHhiZiwKLSAgICAw
eGMwLCAweGMxLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LCAweGM4LCAweGM5
LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmLAotICAgIDB4ZDAsIDB4ZDEsIDB4
ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZGIs
IDB4ZGMsIDB4ZGQsIDB4ZGUsIDB4ZGYsCi0gICAgMHhlMCwgMHhlMSwgMHhlMiwgMHhlMywgMHhl
NCwgMHhlNSwgMHhlNiwgMHhlNywgMHhlOCwgMHhlOSwgMHhlYSwgMHhlYiwgMHhlYywgMHhlZCwg
MHhlZSwgMHhlZiwKLSAgICAweGYwLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2
LCAweGY3LCAweGY4LCAweGY5LCAweGZhLCAweGZiLCAweGZjLCAweGZkLCAweGZlLCAweGZmCi19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgYm9vbCBpc0FTQ0lJ
KENoYXJhY3RlclR5cGUgY2hhcmFjdGVyKQotewotICAgIHJldHVybiAhKGNoYXJhY3RlciAmIH4w
eDdGKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5lIGJvb2wg
aXNBU0NJSUxvd2VyKENoYXJhY3RlclR5cGUgY2hhcmFjdGVyKQotewotICAgIHJldHVybiBjaGFy
YWN0ZXIgPj0gJ2EnICYmIGNoYXJhY3RlciA8PSAneic7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGlubGluZSBDaGFyYWN0ZXJUeXBlIHRvQVNDSUlMb3dlclVuY2hlY2tl
ZChDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGNhbiBi
ZSB1c2VkIGZvciBjb21wYXJpbmcgYW55IGlucHV0IGNoYXJhY3RlcgotICAgIC8vIHRvIGEgbG93
ZXJjYXNlIEVuZ2xpc2ggY2hhcmFjdGVyLiBUaGUgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbAot
ICAgIC8vIGJlbG93IHNob3VsZCBiZSB1c2VkIGZvciByZWd1bGFyIGNvbXBhcmlzb24gb2YgQVND
SUkgYWxwaGEKLSAgICAvLyBjaGFyYWN0ZXJzLCBidXQgc3dpdGNoIHN0YXRlbWVudHMgaW4gQ1NT
IHRva2VuaXplciBpbnN0ZWFkIG1ha2UKLSAgICAvLyBkaXJlY3QgdXNlIG9mIHRoaXMgZnVuY3Rp
b24uCi0gICAgcmV0dXJuIGNoYXJhY3RlciB8IDB4MjA7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIGlzQVNDSUlBbHBoYShDaGFyYWN0ZXJUeXBlIGNo
YXJhY3RlcikKLXsKLSAgICByZXR1cm4gaXNBU0NJSUxvd2VyKHRvQVNDSUlMb3dlclVuY2hlY2tl
ZChjaGFyYWN0ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5s
aW5lIGJvb2wgaXNBU0NJSURpZ2l0KENoYXJhY3RlclR5cGUgY2hhcmFjdGVyKQotewotICAgIHJl
dHVybiBjaGFyYWN0ZXIgPj0gJzAnICYmIGNoYXJhY3RlciA8PSAnOSc7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIGlzQVNDSUlBbHBoYW51bWVyaWMo
Q2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIGlzQVNDSUlEaWdpdChjaGFy
YWN0ZXIpIHx8IGlzQVNDSUlBbHBoYShjaGFyYWN0ZXIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgYm9vbCBpc0FTQ0lJSGV4RGlnaXQoQ2hhcmFjdGVyVHlw
ZSBjaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIGlzQVNDSUlEaWdpdChjaGFyYWN0ZXIpIHx8ICh0
b0FTQ0lJTG93ZXJVbmNoZWNrZWQoY2hhcmFjdGVyKSA+PSAnYScgJiYgdG9BU0NJSUxvd2VyVW5j
aGVja2VkKGNoYXJhY3RlcikgPD0gJ2YnKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gaW5saW5lIGJvb2wgaXNBU0NJSUJpbmFyeURpZ2l0KENoYXJhY3RlclR5cGUgY2hh
cmFjdGVyKQotewotICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJzAnIHx8IGNoYXJhY3RlciA9PSAn
MSc7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIGlz
QVNDSUlPY3RhbERpZ2l0KENoYXJhY3RlclR5cGUgY2hhcmFjdGVyKQotewotICAgIHJldHVybiBj
aGFyYWN0ZXIgPj0gJzAnICYmIGNoYXJhY3RlciA8PSAnNyc7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIGlzQVNDSUlQcmludGFibGUoQ2hhcmFjdGVy
VHlwZSBjaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIGNoYXJhY3RlciA+PSAnICcgJiYgY2hhcmFj
dGVyIDw9ICd+JzsKLX0KLQotLyoKLSAgICBTdGF0aXN0aWNzIGZyb20gYSBydW4gb2YgQXBwbGUn
cyBwYWdlIGxvYWQgdGVzdCBmb3IgY2FsbGVycyBvZiBpc0FTQ0lJU3BhY2U6Ci0KLSAgICBjaGFy
YWN0ZXIgICAgICAgICAgY291bnQKLSAgICAtLS0tLS0tLS0gICAgICAgICAgLS0tLS0KLSAgICBu
b24tc3BhY2VzICAgICAgICAgNjg5MzgzCi0gICAgMjAgIHNwYWNlICAgICAgICAgIDI5NDcyMAot
ICAgIDBBICBcbiAgICAgICAgICAgICA4OTA1OQotICAgIDA5ICBcdCAgICAgICAgICAgICAyODMy
MAotICAgIDBEICBcciAgICAgICAgICAgICAwCi0gICAgMEMgIFxmICAgICAgICAgICAgIDAKLSAg
ICAwQiAgXHYgICAgICAgICAgICAgMAotCi0gICAgQmVjYXVzZSBvZiB0aG9zZSwgd2UgZmlyc3Qg
Y2hlY2sgdG8gcXVpY2tseSByZXR1cm4gZmFsc2UgZm9yIG5vbi1jb250cm9sIGNoYXJhY3RlcnMs
Ci0gICAgdGhlbiBjaGVjayBmb3Igc3BhY2UgaXRzZWxmIHRvIHF1aWNrbHkgcmV0dXJuIHRydWUg
Zm9yIHRoYXQgY2FzZSwgdGhlbiBkbyB0aGUgcmVzdC4KLSovCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBpbmxpbmUgYm9vbCBpc0FTQ0lJU3BhY2UoQ2hhcmFjdGVyVHlwZSBjaGFy
YWN0ZXIpCi17Ci0gICAgcmV0dXJuIGNoYXJhY3RlciA8PSAnICcgJiYgKGNoYXJhY3RlciA9PSAn
ICcgfHwgKGNoYXJhY3RlciA8PSAweEQgJiYgY2hhcmFjdGVyID49IDB4OSkpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgYm9vbCBpc0FTQ0lJVXBwZXIoQ2hh
cmFjdGVyVHlwZSBjaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIGNoYXJhY3RlciA+PSAnQScgJiYg
Y2hhcmFjdGVyIDw9ICdaJzsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
aW5saW5lIENoYXJhY3RlclR5cGUgdG9BU0NJSUxvd2VyKENoYXJhY3RlclR5cGUgY2hhcmFjdGVy
KQotewotICAgIHJldHVybiBjaGFyYWN0ZXIgfCAoaXNBU0NJSVVwcGVyKGNoYXJhY3RlcikgPDwg
NSk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5lIGNoYXIgdG9BU0NJSUxvd2VyKGNoYXIgY2hhcmFj
dGVyKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPihhc2NpaUNhc2VGb2xkVGFibGVb
c3RhdGljX2Nhc3Q8dWludDhfdD4oY2hhcmFjdGVyKV0pOwotfQotCi10ZW1wbGF0ZTw+IGlubGlu
ZSBMQ2hhciB0b0FTQ0lJTG93ZXIoTENoYXIgY2hhcmFjdGVyKQotewotICAgIHJldHVybiBhc2Np
aUNhc2VGb2xkVGFibGVbY2hhcmFjdGVyXTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gaW5saW5lIENoYXJhY3RlclR5cGUgdG9BU0NJSVVwcGVyKENoYXJhY3RlclR5cGUg
Y2hhcmFjdGVyKQotewotICAgIHJldHVybiBjaGFyYWN0ZXIgJiB+KGlzQVNDSUlMb3dlcihjaGFy
YWN0ZXIpIDw8IDUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxp
bmUgdWludDhfdCB0b0FTQ0lJSGV4VmFsdWUoQ2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpCi17Ci0g
ICAgQVNTRVJUKGlzQVNDSUlIZXhEaWdpdChjaGFyYWN0ZXIpKTsKLSAgICByZXR1cm4gY2hhcmFj
dGVyIDwgJ0EnID8gY2hhcmFjdGVyIC0gJzAnIDogKGNoYXJhY3RlciAtICdBJyArIDEwKSAmIDB4
RjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5lIHVpbnQ4X3Qg
dG9BU0NJSUhleFZhbHVlKENoYXJhY3RlclR5cGUgZmlyc3RDaGFyYWN0ZXIsIENoYXJhY3RlclR5
cGUgc2Vjb25kQ2hhcmFjdGVyKQotewotICAgIHJldHVybiB0b0FTQ0lJSGV4VmFsdWUoZmlyc3RD
aGFyYWN0ZXIpIDw8IDQgfCB0b0FTQ0lJSGV4VmFsdWUoc2Vjb25kQ2hhcmFjdGVyKTsKLX0KLQot
aW5saW5lIGNoYXIgbG93ZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQodWludDhfdCB2YWx1ZSkKLXsK
LSAgICB1aW50OF90IG5pYmJsZSA9IHZhbHVlICYgMHhGOwotICAgIHJldHVybiBuaWJibGUgKyAo
bmliYmxlIDwgMTAgPyAnMCcgOiAnQScgLSAxMCk7Ci19Ci0KLWlubGluZSBjaGFyIHVwcGVyTmli
YmxlVG9BU0NJSUhleERpZ2l0KHVpbnQ4X3QgdmFsdWUpCi17Ci0gICAgdWludDhfdCBuaWJibGUg
PSB2YWx1ZSA+PiA0OwotICAgIHJldHVybiBuaWJibGUgKyAobmliYmxlIDwgMTAgPyAnMCcgOiAn
QScgLSAxMCk7Ci19Ci0KLWlubGluZSBjaGFyIGxvd2VyTmliYmxlVG9Mb3dlcmNhc2VBU0NJSUhl
eERpZ2l0KHVpbnQ4X3QgdmFsdWUpCi17Ci0gICAgdWludDhfdCBuaWJibGUgPSB2YWx1ZSAmIDB4
RjsKLSAgICByZXR1cm4gbmliYmxlICsgKG5pYmJsZSA8IDEwID8gJzAnIDogJ2EnIC0gMTApOwot
fQotCi1pbmxpbmUgY2hhciB1cHBlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhEaWdpdCh1aW50
OF90IHZhbHVlKQotewotICAgIHVpbnQ4X3QgbmliYmxlID0gdmFsdWUgPj4gNDsKLSAgICByZXR1
cm4gbmliYmxlICsgKG5pYmJsZSA8IDEwID8gJzAnIDogJ2EnIC0gMTApOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgYm9vbCBpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKENoYXJhY3RlclR5cGUgaW5wdXRDaGFyYWN0ZXIsIGNoYXIgZXhwZWN0ZWRBU0NJSUxv
d2VyY2FzZUxldHRlcikKLXsKLSAgICAvLyBOYW1lIG9mIHRoaXMgYXJndW1lbnQgc2F5cyB0aGlz
IG11c3QgYmUgYSBsb3dlcmNhc2UgbGV0dGVyLCBidXQgaXQgY2FuIGFjdHVhbGx5IGJlOgotICAg
IC8vICAgLSBhIGxvd2VyY2FzZSBsZXR0ZXIKLSAgICAvLyAgIC0gYSBudW1lcmljIGRpZ2l0Ci0g
ICAgLy8gICAtIGEgc3BhY2UKLSAgICAvLyAgIC0gcHVuY3R1YXRpb24gaW4gdGhlIHJhbmdlIDB4
MjEtMHgzRiwgaW5jbHVkaW5nICItIiwgIi8iLCBhbmQgIisiCi0gICAgLy8gSXQgY2Fubm90IGJl
OgotICAgIC8vICAgLSBhbiB1cHBlcmNhc2UgbGV0dGVyCi0gICAgLy8gICAtIGEgbm9uLUFTQ0lJ
IGNoYXJhY3RlcgotICAgIC8vICAgLSBvdGhlciBwdW5jdHVhdGlvbiwgc3VjaCBhcyB1bmRlcnNj
b3JlIGFuZCBiYWNrc2xhc2gKLSAgICAvLyAgIC0gYSBjb250cm9sIGNoYXJhY3RlciBzdWNoIGFz
ICJcbiIKLSAgICAvLyBGSVhNRTogV291bGQgYmUgbmljZSB0byBtYWtlIGJvdGggdGhlIGZ1bmN0
aW9uIG5hbWUgYW5kIGV4cGVjdGVkQVNDSUlMb3dlcmNhc2VMZXR0ZXIgYXJndW1lbnQgbmFtZSBj
bGVhcmVyLgotICAgIEFTU0VSVCh0b0FTQ0lJTG93ZXJVbmNoZWNrZWQoZXhwZWN0ZWRBU0NJSUxv
d2VyY2FzZUxldHRlcikgPT0gZXhwZWN0ZWRBU0NJSUxvd2VyY2FzZUxldHRlcik7Ci0gICAgcmV0
dXJuIExJS0VMWSh0b0FTQ0lJTG93ZXJVbmNoZWNrZWQoaW5wdXRDaGFyYWN0ZXIpID09IGV4cGVj
dGVkQVNDSUlMb3dlcmNhc2VMZXR0ZXIpOwotfQotCi19Ci0KLXVzaW5nIFdURjo6aXNBU0NJSTsK
LXVzaW5nIFdURjo6aXNBU0NJSUFscGhhOwotdXNpbmcgV1RGOjppc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsOwotdXNpbmcgV1RGOjppc0FTQ0lJQWxwaGFudW1lcmljOwotdXNpbmcgV1RGOjppc0FT
Q0lJQmluYXJ5RGlnaXQ7Ci11c2luZyBXVEY6OmlzQVNDSUlEaWdpdDsKLXVzaW5nIFdURjo6aXNB
U0NJSUhleERpZ2l0OwotdXNpbmcgV1RGOjppc0FTQ0lJTG93ZXI7Ci11c2luZyBXVEY6OmlzQVND
SUlPY3RhbERpZ2l0OwotdXNpbmcgV1RGOjppc0FTQ0lJUHJpbnRhYmxlOwotdXNpbmcgV1RGOjpp
c0FTQ0lJU3BhY2U7Ci11c2luZyBXVEY6OmlzQVNDSUlVcHBlcjsKLXVzaW5nIFdURjo6bG93ZXJO
aWJibGVUb0FTQ0lJSGV4RGlnaXQ7Ci11c2luZyBXVEY6Omxvd2VyTmliYmxlVG9Mb3dlcmNhc2VB
U0NJSUhleERpZ2l0OwotdXNpbmcgV1RGOjp0b0FTQ0lJSGV4VmFsdWU7Ci11c2luZyBXVEY6OnRv
QVNDSUlMb3dlcjsKLXVzaW5nIFdURjo6dG9BU0NJSUxvd2VyVW5jaGVja2VkOwotdXNpbmcgV1RG
Ojp0b0FTQ0lJVXBwZXI7Ci11c2luZyBXVEY6OnVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0Owot
dXNpbmcgV1RGOjp1cHBlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhEaWdpdDsKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvQXNzZXJ0aW9u
cy5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvQXNzZXJ0aW9ucy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhOTY5NzkwNDA4NmU2Yjc4NmVkZjRhZWNh
YTE3N2ZmYWZkOWI0N2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0Fzc2VydGlvbnMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNDA5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDYsIDIwMDcsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgotICogQ29weXJpZ2h0IChD
KSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBUaGUgdnByaW50Zl9zdGRl
cnJfY29tbW9uIGZ1bmN0aW9uIHRyaWdnZXJzIHRoaXMgZXJyb3IgaW4gdGhlIE1hYyBidWlsZC4K
LS8vIEZlZWwgZnJlZSB0byByZW1vdmUgdGhpcyBwcmFnbWEgaWYgdGhpcyBmaWxlIGJ1aWxkcyBv
biBNYWMuCi0vLyBBY2NvcmRpbmcgdG8gaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2Nj
LTQuMi4xL2djYy9EaWFnbm9zdGljLVByYWdtYXMuaHRtbCNEaWFnbm9zdGljLVByYWdtYXMKLS8v
IHdlIG5lZWQgdG8gcGxhY2UgdGhpcyBkaXJlY3RpdmUgYmVmb3JlIGFueSBkYXRhIG9yIGZ1bmN0
aW9ucyBhcmUgZGVmaW5lZC4KLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNz
aW5nLWZvcm1hdC1hdHRyaWJ1dGUiCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJB
c3NlcnRpb25zLmgiCi0KLSNpbmNsdWRlICJDb21waWxlci5oIgotI2luY2x1ZGUgPG11dGV4Pgot
I2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL0xv
Y2suaD4KLSNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+Ci0jaW5jbHVkZSA8d3RmL0xvZ2dpbmdBY2N1
bXVsYXRvci5oPgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi9T
dGFja1RyYWNlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0
Zi9TdHJpbmdFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1leHRlcm4gIkMiIHsKLQotc3RhdGljIHZvaWQgbG9nVG9TdGRlcnIoY29uc3QgY2hh
ciogYnVmZmVyKQotewotICAgIGZwdXRzKGJ1ZmZlciwgc3RkZXJyKTsKLX0KLQotV1RGX0FUVFJJ
QlVURV9QUklOVEYoMSwgMCkKLXN0YXRpYyB2b2lkIHZwcmludGZfc3RkZXJyX2NvbW1vbihjb25z
dCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKLXsKLSAgICB2ZnByaW50ZihzdGRlcnIsIGZv
cm1hdCwgYXJncyk7Ci19Ci0KLSNpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCi0jcHJhZ21hIEdD
QyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3Jt
YXQtbm9ubGl0ZXJhbCIKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCB2cHJpbnRmX3N0ZGVycl93aXRo
X3ByZWZpeChjb25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBh
cmdzKQotewotICAgIHNpemVfdCBwcmVmaXhMZW5ndGggPSBzdHJsZW4ocHJlZml4KTsKLSAgICBz
aXplX3QgZm9ybWF0TGVuZ3RoID0gc3RybGVuKGZvcm1hdCk7Ci0gICAgYXV0byBmb3JtYXRXaXRo
UHJlZml4ID0gc3RkOjptYWtlX3VuaXF1ZTxjaGFyW10+KHByZWZpeExlbmd0aCArIGZvcm1hdExl
bmd0aCArIDEpOwotICAgIG1lbWNweShmb3JtYXRXaXRoUHJlZml4LmdldCgpLCBwcmVmaXgsIHBy
ZWZpeExlbmd0aCk7Ci0gICAgbWVtY3B5KGZvcm1hdFdpdGhQcmVmaXguZ2V0KCkgKyBwcmVmaXhM
ZW5ndGgsIGZvcm1hdCwgZm9ybWF0TGVuZ3RoKTsKLSAgICBmb3JtYXRXaXRoUHJlZml4W3ByZWZp
eExlbmd0aCArIGZvcm1hdExlbmd0aF0gPSAwOwotCi0gICAgdnByaW50Zl9zdGRlcnJfY29tbW9u
KGZvcm1hdFdpdGhQcmVmaXguZ2V0KCksIGFyZ3MpOwotfQotCi1zdGF0aWMgdm9pZCB2cHJpbnRm
X3N0ZGVycl93aXRoX3RyYWlsaW5nX25ld2xpbmUoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0
IGFyZ3MpCi17Ci0gICAgc2l6ZV90IGZvcm1hdExlbmd0aCA9IHN0cmxlbihmb3JtYXQpOwotICAg
IGlmIChmb3JtYXRMZW5ndGggJiYgZm9ybWF0W2Zvcm1hdExlbmd0aCAtIDFdID09ICdcbicpIHsK
LSAgICAgICAgdnByaW50Zl9zdGRlcnJfY29tbW9uKGZvcm1hdCwgYXJncyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGZvcm1hdFdpdGhOZXdsaW5lID0gc3RkOjptYWtlX3Vu
aXF1ZTxjaGFyW10+KGZvcm1hdExlbmd0aCArIDIpOwotICAgIG1lbWNweShmb3JtYXRXaXRoTmV3
bGluZS5nZXQoKSwgZm9ybWF0LCBmb3JtYXRMZW5ndGgpOwotICAgIGZvcm1hdFdpdGhOZXdsaW5l
W2Zvcm1hdExlbmd0aF0gPSAnXG4nOwotICAgIGZvcm1hdFdpdGhOZXdsaW5lW2Zvcm1hdExlbmd0
aCArIDFdID0gMDsKLQotICAgIHZwcmludGZfc3RkZXJyX2NvbW1vbihmb3JtYXRXaXRoTmV3bGlu
ZS5nZXQoKSwgYXJncyk7Ci19Ci0KLSNpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCi0jcHJhZ21h
IEdDQyBkaWFnbm9zdGljIHBvcAotI2VuZGlmCi0KLVdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIp
Ci1zdGF0aWMgdm9pZCBwcmludGZfc3RkZXJyX2NvbW1vbihjb25zdCBjaGFyKiBmb3JtYXQsIC4u
LikKLXsKLSAgICB2YV9saXN0IGFyZ3M7Ci0gICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLSAg
ICB2cHJpbnRmX3N0ZGVycl9jb21tb24oZm9ybWF0LCBhcmdzKTsKLSAgICB2YV9lbmQoYXJncyk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50Q2FsbFNpdGUoY29uc3QgY2hhciogZmlsZSwgaW50IGxp
bmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uKQotewotICAgIC8vIEJ5IHVzaW5nIHRoaXMgZm9ybWF0
LCB3aGljaCBtYXRjaGVzIHRoZSBmb3JtYXQgdXNlZCBieSBNU1ZDIGZvciBjb21waWxlciBlcnJv
cnMsIGRldmVsb3BlcnMKLSAgICAvLyB1c2luZyBWaXN1YWwgU3R1ZGlvIGNhbiBkb3VibGUtY2xp
Y2sgdGhlIGZpbGUvbGluZSBudW1iZXIgaW4gdGhlIE91dHB1dCBXaW5kb3cgdG8gaGF2ZSB0aGUK
LSAgICAvLyBlZGl0b3IgbmF2aWdhdGUgdG8gdGhhdCBsaW5lIG9mIGNvZGUuIEl0IHNlZW1zIGZp
bmUgZm9yIG90aGVyIGRldmVsb3BlcnMsIHRvby4KLSAgICBwcmludGZfc3RkZXJyX2NvbW1vbigi
JXMoJWQpIDogJXNcbiIsIGZpbGUsIGxpbmUsIGZ1bmN0aW9uKTsKLX0KLQotdm9pZCBXVEZSZXBv
cnRBc3NlcnRpb25GYWlsdXJlKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbiwgY29uc3QgY2hhciogYXNzZXJ0aW9uKQotewotICAgIGlmIChhc3NlcnRpb24p
Ci0gICAgICAgIHByaW50Zl9zdGRlcnJfY29tbW9uKCJBU1NFUlRJT04gRkFJTEVEOiAlc1xuIiwg
YXNzZXJ0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIHByaW50Zl9zdGRlcnJfY29tbW9uKCJTSE9V
TEQgTkVWRVIgQkUgUkVBQ0hFRFxuIik7Ci0gICAgcHJpbnRDYWxsU2l0ZShmaWxlLCBsaW5lLCBm
dW5jdGlvbik7Ci19Ci0KLXZvaWQgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZVdpdGhNZXNzYWdl
KGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3Qg
Y2hhciogYXNzZXJ0aW9uLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKLXsKLSAgICB2YV9saXN0
IGFyZ3M7Ci0gICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLSAgICB2cHJpbnRmX3N0ZGVycl93
aXRoX3ByZWZpeCgiQVNTRVJUSU9OIEZBSUxFRDogIiwgZm9ybWF0LCBhcmdzKTsKLSAgICB2YV9l
bmQoYXJncyk7Ci0gICAgcHJpbnRmX3N0ZGVycl9jb21tb24oIlxuJXNcbiIsIGFzc2VydGlvbik7
Ci0gICAgcHJpbnRDYWxsU2l0ZShmaWxlLCBsaW5lLCBmdW5jdGlvbik7Ci19Ci0KLXZvaWQgV1RG
UmVwb3J0QXJndW1lbnRBc3NlcnRpb25GYWlsdXJlKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogYXJnTmFtZSwgY29uc3QgY2hhciog
YXNzZXJ0aW9uKQotewotICAgIHByaW50Zl9zdGRlcnJfY29tbW9uKCJBUkdVTUVOVCBCQUQ6ICVz
LCAlc1xuIiwgYXJnTmFtZSwgYXNzZXJ0aW9uKTsKLSAgICBwcmludENhbGxTaXRlKGZpbGUsIGxp
bmUsIGZ1bmN0aW9uKTsKLX0KLQotY2xhc3MgQ3Jhc2hMb2dQcmludFN0cmVhbSA6IHB1YmxpYyBQ
cmludFN0cmVhbSB7Ci1wdWJsaWM6Ci0gICAgV1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMCkKLSAg
ICB2b2lkIHZwcmludGYoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ0xpc3QpIG92ZXJy
aWRlCi0gICAgewotICAgICAgICB2cHJpbnRmX3N0ZGVycl9jb21tb24oZm9ybWF0LCBhcmdMaXN0
KTsKLSAgICB9Ci19OwotCi12b2lkIFdURlJlcG9ydEJhY2t0cmFjZSgpCi17Ci0gICAgc3RhdGlj
IGNvbnN0IGludCBmcmFtZXNUb1Nob3cgPSAzMTsKLSAgICBzdGF0aWMgY29uc3QgaW50IGZyYW1l
c1RvU2tpcCA9IDI7Ci0gICAgdm9pZCogc2FtcGxlc1tmcmFtZXNUb1Nob3cgKyBmcmFtZXNUb1Nr
aXBdOwotICAgIGludCBmcmFtZXMgPSBmcmFtZXNUb1Nob3cgKyBmcmFtZXNUb1NraXA7Ci0KLSAg
ICBXVEZHZXRCYWNrdHJhY2Uoc2FtcGxlcywgJmZyYW1lcyk7Ci0gICAgV1RGUHJpbnRCYWNrdHJh
Y2Uoc2FtcGxlcyArIGZyYW1lc1RvU2tpcCwgZnJhbWVzIC0gZnJhbWVzVG9Ta2lwKTsKLX0KLQot
dm9pZCBXVEZQcmludEJhY2t0cmFjZSh2b2lkKiogc3RhY2ssIGludCBzaXplKQotewotICAgIENy
YXNoTG9nUHJpbnRTdHJlYW0gb3V0OwotICAgIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZShzdGFjaywg
c2l6ZSk7Ci0gICAgb3V0LnByaW50KHN0YWNrVHJhY2UpOwotfQotCi1zdGF0aWMgV1RGQ3Jhc2hI
b29rRnVuY3Rpb24gZ2xvYmFsSG9vayA9IDA7Ci0KLXZvaWQgV1RGU2V0Q3Jhc2hIb29rKFdURkNy
YXNoSG9va0Z1bmN0aW9uIGZ1bmN0aW9uKQotewotICAgIGdsb2JhbEhvb2sgPSBmdW5jdGlvbjsK
LX0KLQotLy8gV2UgbmVlZCB0byBrZWVwIFdURkNyYXNoKCkgYXJvdW5kIChldmVuIG9uIG5vbi1k
ZWJ1ZyBPUyhEQVJXSU4pIGJ1aWxkcykgYXMgYSB3b3JrYXJvdW5kCi0vLyBmb3IgcHJlc2VudGx5
IHNoaXBwaW5nIChjaXJjYSBlYXJseSAyMDE2KSBTYWZhcmlGb3JXZWJLaXREZXZlbG9wbWVudCBi
aW5hcmllcyB3aGljaCBzdGlsbAotLy8gZXhwZWN0cyB0byBsaW5rIHRvIGl0Lgotdm9pZCBXVEZD
cmFzaCgpCi17Ci0gICAgQ1JBU0goKTsKLX0KLQotdm9pZCBXVEZDcmFzaFdpdGhTZWN1cml0eUlt
cGxpY2F0aW9uKCkKLXsKLSAgICBDUkFTSCgpOwotfQotCi0KLXZvaWQgV1RGSW5zdGFsbFJlcG9y
dEJhY2t0cmFjZU9uQ3Jhc2hIb29rKCkKLXsKLX0KLQotYm9vbCBXVEZJc0RlYnVnZ2VyQXR0YWNo
ZWQoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXVEZSZXBvcnRGYXRhbEVycm9y
KGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3Qg
Y2hhciogZm9ybWF0LCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIHZhX3N0YXJ0KGFy
Z3MsIGZvcm1hdCk7Ci0gICAgdnByaW50Zl9zdGRlcnJfd2l0aF9wcmVmaXgoIkZBVEFMIEVSUk9S
OiAiLCBmb3JtYXQsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsKLSAgICBwcmludGZfc3RkZXJy
X2NvbW1vbigiXG4iKTsKLSAgICBwcmludENhbGxTaXRlKGZpbGUsIGxpbmUsIGZ1bmN0aW9uKTsK
LX0KLQotdm9pZCBXVEZSZXBvcnRFcnJvcihjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29u
c3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQotewotICAgIHZhX2xp
c3QgYXJnczsKLSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIHZwcmludGZfc3RkZXJy
X3dpdGhfcHJlZml4KCJFUlJPUjogIiwgZm9ybWF0LCBhcmdzKTsKLSAgICB2YV9lbmQoYXJncyk7
Ci0gICAgcHJpbnRmX3N0ZGVycl9jb21tb24oIlxuIik7Ci0gICAgcHJpbnRDYWxsU2l0ZShmaWxl
LCBsaW5lLCBmdW5jdGlvbik7Ci19Ci0KLWNsYXNzIFdURkxvZ2dpbmdBY2N1bXVsYXRvciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBhY2N1bXVsYXRlKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgcmVz
ZXRBY2N1bXVsYXRlZExvZ3MoKTsKLSAgICBTdHJpbmcgZ2V0QW5kUmVzZXRBY2N1bXVsYXRlZExv
Z3MoKTsKLQotcHJpdmF0ZToKLSAgICBMb2NrIGFjY3VtdWxhdG9yTG9jazsKLSAgICBTdHJpbmdC
dWlsZGVyIGxvZ2dpbmdBY2N1bXVsYXRvcjsKLX07Ci0KLXZvaWQgV1RGTG9nZ2luZ0FjY3VtdWxh
dG9yOjphY2N1bXVsYXRlKGNvbnN0IFN0cmluZyYgbG9nKQotewotICAgIExvY2tlcjxMb2NrPiBs
b2NrZXIoYWNjdW11bGF0b3JMb2NrKTsKLSAgICBsb2dnaW5nQWNjdW11bGF0b3IuYXBwZW5kKGxv
Zyk7Ci19Ci0KLXZvaWQgV1RGTG9nZ2luZ0FjY3VtdWxhdG9yOjpyZXNldEFjY3VtdWxhdGVkTG9n
cygpCi17Ci0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihhY2N1bXVsYXRvckxvY2spOwotICAgIGxv
Z2dpbmdBY2N1bXVsYXRvci5jbGVhcigpOwotfQotCi1TdHJpbmcgV1RGTG9nZ2luZ0FjY3VtdWxh
dG9yOjpnZXRBbmRSZXNldEFjY3VtdWxhdGVkTG9ncygpCi17Ci0gICAgTG9ja2VyPExvY2s+IGxv
Y2tlcihhY2N1bXVsYXRvckxvY2spOwotICAgIFN0cmluZyByZXN1bHQgPSBsb2dnaW5nQWNjdW11
bGF0b3IudG9TdHJpbmcoKTsKLSAgICBsb2dnaW5nQWNjdW11bGF0b3IuY2xlYXIoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgV1RGTG9nZ2luZ0FjY3VtdWxhdG9yJiBsb2dnaW5n
QWNjdW11bGF0b3IoKQotewotICAgIHN0YXRpYyBXVEZMb2dnaW5nQWNjdW11bGF0b3IqIGFjY3Vt
dWxhdG9yOwotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplQWNjdW11bGF0b3JP
bmNlOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVBY2N1bXVsYXRvck9uY2UsIFtdIHsK
LSAgICAgICAgYWNjdW11bGF0b3IgPSBuZXcgV1RGTG9nZ2luZ0FjY3VtdWxhdG9yOwotICAgIH0p
OwotCi0gICAgcmV0dXJuICphY2N1bXVsYXRvcjsKLX0KLQotdm9pZCBXVEZMb2coV1RGTG9nQ2hh
bm5lbCogY2hhbm5lbCwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCi17Ci0gICAgaWYgKGNoYW5u
ZWwtPnN0YXRlID09IFdURkxvZ0NoYW5uZWxPZmYpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChjaGFubmVsLT5zdGF0ZSA9PSBXVEZMb2dDaGFubmVsT24pIHsKLSAgICAgICAgdmFfbGlzdCBh
cmdzOwotICAgICAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgICAgICB2cHJpbnRmX3N0
ZGVycl93aXRoX3RyYWlsaW5nX25ld2xpbmUoZm9ybWF0LCBhcmdzKTsKLSAgICAgICAgdmFfZW5k
KGFyZ3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGNoYW5uZWwtPnN0
YXRlID09IFdURkxvZ0NoYW5uZWxPbldpdGhBY2N1bXVsYXRpb24pOwotCi0gICAgdmFfbGlzdCBh
cmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0KLSNpZiBDT01QSUxFUihDTEFORykK
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdmb3JtYXQtbm9ubGl0ZXJhbCIKLSNlbmRpZgotICAgIFN0cmluZyBsb2dnaW5n
U3RyaW5nID0gU3RyaW5nOjpmb3JtYXQoZm9ybWF0LCBhcmdzKTsKLSNpZiBDT01QSUxFUihDTEFO
RykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZgotCi0gICAgdmFfZW5kKGFy
Z3MpOwotCi0gICAgaWYgKCFsb2dnaW5nU3RyaW5nLmVuZHNXaXRoKCdcbicpKQotICAgICAgICBs
b2dnaW5nU3RyaW5nLmFwcGVuZCgnXG4nKTsKLQotICAgIGxvZ2dpbmdBY2N1bXVsYXRvcigpLmFj
Y3VtdWxhdGUobG9nZ2luZ1N0cmluZyk7Ci0KLSAgICBsb2dUb1N0ZGVycihsb2dnaW5nU3RyaW5n
LnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIFdURkxvZ1ZlcmJvc2UoY29uc3QgY2hhciogZmls
ZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBXVEZMb2dDaGFubmVsKiBjaGFubmVs
LCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKLXsKLSAgICBpZiAoY2hhbm5lbC0+c3RhdGUgIT0g
V1RGTG9nQ2hhbm5lbE9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2YV9saXN0IGFyZ3M7Ci0g
ICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLQotI2lmIENPTVBJTEVSKENMQU5HKQotI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV2Zvcm1hdC1ub25saXRlcmFsIgotI2VuZGlmCi0gICAgV1RGTG9nKGNoYW5uZWwsIGZvcm1h
dCwgYXJncyk7Ci0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCi0jZW5kaWYKLQotICAgIHZhX2VuZChhcmdzKTsKLQotICAgIHByaW50Q2FsbFNpdGUoZmls
ZSwgbGluZSwgZnVuY3Rpb24pOwotfQotCi12b2lkIFdURkxvZ0Fsd2F5c1YoY29uc3QgY2hhciog
Zm9ybWF0LCB2YV9saXN0IGFyZ3MpCi17Ci0gICAgdnByaW50Zl9zdGRlcnJfd2l0aF90cmFpbGlu
Z19uZXdsaW5lKGZvcm1hdCwgYXJncyk7Ci19Ci0KLXZvaWQgV1RGTG9nQWx3YXlzKGNvbnN0IGNo
YXIqIGZvcm1hdCwgLi4uKQotewotICAgIHZhX2xpc3QgYXJnczsKLSAgICB2YV9zdGFydChhcmdz
LCBmb3JtYXQpOwotICAgIFdURkxvZ0Fsd2F5c1YoZm9ybWF0LCBhcmdzKTsKLSAgICB2YV9lbmQo
YXJncyk7Ci19Ci0KLXZvaWQgV1RGTG9nQWx3YXlzQW5kQ3Jhc2goY29uc3QgY2hhciogZm9ybWF0
LCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7
Ci0gICAgV1RGTG9nQWx3YXlzVihmb3JtYXQsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsKLSAg
ICBDUkFTSCgpOwotfQotCi1XVEZMb2dDaGFubmVsKiBXVEZMb2dDaGFubmVsQnlOYW1lKFdURkxv
Z0NoYW5uZWwqIGNoYW5uZWxzW10sIHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogbmFtZSkKLXsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgV1RGTG9n
Q2hhbm5lbCogY2hhbm5lbCA9IGNoYW5uZWxzW2ldOwotICAgICAgICBpZiAoIXN0cmNhc2VjbXAo
bmFtZSwgY2hhbm5lbC0+bmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gY2hhbm5lbDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2V0U3RhdGVPZkFsbENoYW5uZWxz
KFdURkxvZ0NoYW5uZWwqIGNoYW5uZWxzW10sIHNpemVfdCBjaGFubmVsQ291bnQsIFdURkxvZ0No
YW5uZWxTdGF0ZSBzdGF0ZSkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYW5uZWxD
b3VudDsgKytpKQotICAgICAgICBjaGFubmVsc1tpXS0+c3RhdGUgPSBzdGF0ZTsKLX0KLQotdm9p
ZCBXVEZJbml0aWFsaXplTG9nQ2hhbm5lbFN0YXRlc0Zyb21TdHJpbmcoV1RGTG9nQ2hhbm5lbCog
Y2hhbm5lbHNbXSwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyKiBsb2dMZXZlbCkKLXsKLSAgICBT
dHJpbmcgbG9nTGV2ZWxTdHJpbmcgPSBsb2dMZXZlbDsKLSAgICBWZWN0b3I8U3RyaW5nPiBjb21w
b25lbnRzOwotICAgIGxvZ0xldmVsU3RyaW5nLnNwbGl0KCcsJywgY29tcG9uZW50cyk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgU3RyaW5nIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbaV07Ci0KLSAgICAgICAgV1RGTG9nQ2hh
bm5lbFN0YXRlIGxvZ0NoYW5uZWxTdGF0ZSA9IFdURkxvZ0NoYW5uZWxPbjsKLSAgICAgICAgaWYg
KGNvbXBvbmVudC5zdGFydHNXaXRoKCctJykpIHsKLSAgICAgICAgICAgIGxvZ0NoYW5uZWxTdGF0
ZSA9IFdURkxvZ0NoYW5uZWxPZmY7Ci0gICAgICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQu
c3Vic3RyaW5nKDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGNvbXBvbmVudCwgImFsbCIpKSB7Ci0gICAgICAgICAgICBzZXRTdGF0ZU9m
QWxsQ2hhbm5lbHMoY2hhbm5lbHMsIGNvdW50LCBsb2dDaGFubmVsU3RhdGUpOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoV1RGTG9nQ2hhbm5lbCogY2hh
bm5lbCA9IFdURkxvZ0NoYW5uZWxCeU5hbWUoY2hhbm5lbHMsIGNvdW50LCBjb21wb25lbnQudXRm
OCgpLmRhdGEoKSkpCi0gICAgICAgICAgICBjaGFubmVsLT5zdGF0ZSA9IGxvZ0NoYW5uZWxTdGF0
ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJVbmtub3duIGxvZ2dp
bmcgY2hhbm5lbDogJXMiLCBjb21wb25lbnQudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQotfQotCi19
IC8vIGV4dGVybiAiQyIKLQotdm9pZCBXVEZDcmFzaFdpdGhJbmZvKGludCwgY29uc3QgY2hhcios
IGNvbnN0IGNoYXIqLCBpbnQsIHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDY0X3QsIHVpbnQ2NF90
LCB1aW50NjRfdCkgeyBDUkFTSCgpOyB9Ci12b2lkIFdURkNyYXNoV2l0aEluZm8oaW50LCBjb25z
dCBjaGFyKiwgY29uc3QgY2hhciosIGludCwgdWludDY0X3QsIHVpbnQ2NF90LCB1aW50NjRfdCwg
dWludDY0X3QpIHsgQ1JBU0goKTsgfQotdm9pZCBXVEZDcmFzaFdpdGhJbmZvKGludCwgY29uc3Qg
Y2hhciosIGNvbnN0IGNoYXIqLCBpbnQsIHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDY0X3QpIHsg
Q1JBU0goKTsgfQotdm9pZCBXVEZDcmFzaFdpdGhJbmZvKGludCwgY29uc3QgY2hhciosIGNvbnN0
IGNoYXIqLCBpbnQsIHVpbnQ2NF90LCB1aW50NjRfdCkgeyBDUkFTSCgpOyB9Ci12b2lkIFdURkNy
YXNoV2l0aEluZm8oaW50LCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGludCwgdWludDY0X3Qp
IHsgQ1JBU0goKTsgfQotdm9pZCBXVEZDcmFzaFdpdGhJbmZvKGludCwgY29uc3QgY2hhciosIGNv
bnN0IGNoYXIqLCBpbnQpIHsgQ1JBU0goKTsgfQotCi1uYW1lc3BhY2UgV1RGIHsKLQotdm9pZCBy
ZXNldEFjY3VtdWxhdGVkTG9ncygpCi17Ci0gICAgbG9nZ2luZ0FjY3VtdWxhdG9yKCkucmVzZXRB
Y2N1bXVsYXRlZExvZ3MoKTsKLX0KLQotU3RyaW5nIGdldEFuZFJlc2V0QWNjdW11bGF0ZWRMb2dz
KCkKLXsKLSAgICByZXR1cm4gbG9nZ2luZ0FjY3VtdWxhdG9yKCkuZ2V0QW5kUmVzZXRBY2N1bXVs
YXRlZExvZ3MoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvQXNzZXJ0aW9ucy5oIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL0Fzc2VydGlvbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYzYzYjNkOTgxMzZjM2M5ZGY5ODFjMjdmYjljYzBhNDU2NzIyNDliYy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvQXNzZXJ0aW9ucy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTI1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIwMTMgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpZm5kZWYgV1RGX0Fzc2VydGlvbnNfaAotI2RlZmluZSBXVEZfQXNzZXJ0
aW9uc19oCi0KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLQotLyoKLSAgIG5vIG5hbWVzcGFj
ZXMgYmVjYXVzZSB0aGlzIGZpbGUgaGFzIHRvIGJlIGluY2x1ZGFibGUgZnJvbSBDIGFuZCBPYmpl
Y3RpdmUtQwotCi0gICBOb3RlLCB0aGlzIGZpbGUgdXNlcyBtYW55IEdDQyBleHRlbnNpb25zLCBi
dXQgaXQgc2hvdWxkIGJlIGNvbXBhdGlibGUgd2l0aAotICAgQywgT2JqZWN0aXZlIEMsIEMrKywg
YW5kIE9iamVjdGl2ZSBDKysuCi0KLSAgIEZvciBub24tZGVidWcgYnVpbGRzLCBldmVyeXRoaW5n
IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgZXhjZXB0IGZvciAiYWx3YXlzCi0gICBvbiIgbG9nZ2lu
Zy4gRGVmaW5pbmcgYW55IG9mIHRoZSBzeW1ib2xzIGV4cGxpY2l0bHkgcHJldmVudHMgdGhpcyBm
cm9tCi0gICBoYXZpbmcgYW55IGVmZmVjdC4KLSovCi0KLSN1bmRlZiBfX1NURENfRk9STUFUX01B
Q1JPUwotI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUwotI2luY2x1ZGUgPGludHR5cGVzLmg+
Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkYm9vbC5oPgotI2luY2x1ZGUgPHN0
ZGRlZi5oPgotI2luY2x1ZGUgPHd0Zi9FeHBvcnRNYWNyb3MuaD4KLQotI2lmIFVTRShPU19MT0cp
Ci0jaW5jbHVkZSA8b3MvbG9nLmg+Ci0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jaW5j
bHVkZSA8dHlwZV90cmFpdHM+Ci0KLSNpZiBPUyhXSU5ET1dTKQotI2lmICFDT01QSUxFUihHQ0Nf
T1JfQ0xBTkcpCi1leHRlcm4gIkMiIHZvaWQgX1JlYWRXcml0ZUJhcnJpZXIodm9pZCk7Ci0jcHJh
Z21hIGludHJpbnNpYyhfUmVhZFdyaXRlQmFycmllcikKLSNlbmRpZgotI2luY2x1ZGUgPGludHJp
bi5oPgotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBBU1NFUlRfRU5BQkxFRAotI2lmZGVmIE5E
RUJVRwotI2RlZmluZSBBU1NFUlRfRU5BQkxFRCAwCi0jZWxzZQotI2RlZmluZSBBU1NFUlRfRU5B
QkxFRCAxCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEJBQ0tUUkFDRV9ESVNBQkxFRAotI2Rl
ZmluZSBCQUNLVFJBQ0VfRElTQUJMRUQgIUFTU0VSVF9FTkFCTEVECi0jZW5kaWYKLQotI2lmbmRl
ZiBBU1NFUlRfTVNHX0RJU0FCTEVECi0jZGVmaW5lIEFTU0VSVF9NU0dfRElTQUJMRUQgIUFTU0VS
VF9FTkFCTEVECi0jZW5kaWYKLQotI2lmbmRlZiBBU1NFUlRfQVJHX0RJU0FCTEVECi0jZGVmaW5l
IEFTU0VSVF9BUkdfRElTQUJMRUQgIUFTU0VSVF9FTkFCTEVECi0jZW5kaWYKLQotI2lmbmRlZiBG
QVRBTF9ESVNBQkxFRAotI2RlZmluZSBGQVRBTF9ESVNBQkxFRCAhQVNTRVJUX0VOQUJMRUQKLSNl
bmRpZgotCi0jaWZuZGVmIEVSUk9SX0RJU0FCTEVECi0jZGVmaW5lIEVSUk9SX0RJU0FCTEVEICFB
U1NFUlRfRU5BQkxFRAotI2VuZGlmCi0KLSNpZm5kZWYgTE9HX0RJU0FCTEVECi0jZGVmaW5lIExP
R19ESVNBQkxFRCAhQVNTRVJUX0VOQUJMRUQKLSNlbmRpZgotCi0jaWZuZGVmIFJFTEVBU0VfTE9H
X0RJU0FCTEVECi0jZGVmaW5lIFJFTEVBU0VfTE9HX0RJU0FCTEVEICEoVVNFKE9TX0xPRykpCi0j
ZW5kaWYKLQotI2lmIENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSNkZWZpbmUgV1RGX1BSRVRUWV9G
VU5DVElPTiBfX1BSRVRUWV9GVU5DVElPTl9fCi0jZWxzZQotI2RlZmluZSBXVEZfUFJFVFRZX0ZV
TkNUSU9OIF9fRlVOQ1RJT05fXwotI2VuZGlmCi0KLSNpZiBDT01QSUxFUihNSU5HVykKLS8qIEJ5
IGRlZmF1bHQgTWluR1cgZW1pdHMgd2FybmluZ3Mgd2hlbiBDOTkgZm9ybWF0IGF0dHJpYnV0ZXMg
YXJlIHVzZWQsIGV2ZW4gaWYgX19VU0VfTUlOR1dfQU5TSV9TVERJTyBpcyBkZWZpbmVkICovCi0j
ZGVmaW5lIFdURl9BVFRSSUJVVEVfUFJJTlRGKGZvcm1hdFN0cmluZ0FyZ3VtZW50LCBleHRyYUFy
Z3VtZW50cykgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyhnbnVfcHJpbnRmLCBmb3JtYXRTdHJp
bmdBcmd1bWVudCwgZXh0cmFBcmd1bWVudHMpKSkKLSNlbGlmIENPTVBJTEVSKEdDQ19PUl9DTEFO
RykgJiYgIWRlZmluZWQoX19PQkpDX18pCi0vKiBXVEYgbG9nZ2luZyBmdW5jdGlvbnMgY2FuIHBy
b2Nlc3MgJUAgaW4gdGhlIGZvcm1hdCBzdHJpbmcgdG8gbG9nIGEgTlNPYmplY3QqIGJ1dCB0aGUg
cHJpbnRmIGZvcm1hdCBhdHRyaWJ1dGUKLSAgIGVtaXRzIGEgd2FybmluZyB3aGVuICVAIGlzIHVz
ZWQgaW4gdGhlIGZvcm1hdCBzdHJpbmcuICBVbnRpbCA8cmRhcjovL3Byb2JsZW0vNTE5NTQzNz4g
aXMgcmVzb2x2ZWQgd2UgY2FuJ3QgaW5jbHVkZQotICAgdGhlIGF0dHJpYnV0ZSB3aGVuIGJlaW5n
IHVzZWQgZnJvbSBPYmplY3RpdmUtQyBjb2RlIGluIGNhc2UgaXQgZGVjaWRlcyB0byB1c2UgJUAu
ICovCi0jZGVmaW5lIFdURl9BVFRSSUJVVEVfUFJJTlRGKGZvcm1hdFN0cmluZ0FyZ3VtZW50LCBl
eHRyYUFyZ3VtZW50cykgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyhwcmludGYsIGZvcm1hdFN0
cmluZ0FyZ3VtZW50LCBleHRyYUFyZ3VtZW50cykpKQotI2Vsc2UKLSNkZWZpbmUgV1RGX0FUVFJJ
QlVURV9QUklOVEYoZm9ybWF0U3RyaW5nQXJndW1lbnQsIGV4dHJhQXJndW1lbnRzKQotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShJT1MpCi0vKiBGb3IgYSBwcm9qZWN0IHRoYXQgdXNlcyBXVEYgYnV0
IGhhcyBubyBjb25maWcuaCwgd2UgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgZXhwb3J0IGRl
ZmluZXMgaGVyZS4gKi8KLSNpZm5kZWYgV1RGX0VYUE9SVF9QUklWQVRFCi0jZGVmaW5lIFdURl9F
WFBPUlRfUFJJVkFURQotI2VuZGlmCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQotCi0vKiBUaGVz
ZSBoZWxwZXIgZnVuY3Rpb25zIGFyZSBhbHdheXMgZGVjbGFyZWQsIGJ1dCBub3QgbmVjZXNzYXJp
bHkgYWx3YXlzIGRlZmluZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gaXMgZGlzYWJs
ZWQuICovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotLyog
Q1JBU0goKSAtIFJhaXNlcyBhIGZhdGFsIGVycm9yIHJlc3VsdGluZyBpbiBwcm9ncmFtIHRlcm1p
bmF0aW9uIGFuZCB0cmlnZ2VyaW5nIGVpdGhlciB0aGUgZGVidWdnZXIgb3IgdGhlIGNyYXNoIHJl
cG9ydGVyLgotCi0gICBVc2UgQ1JBU0goKSBpbiByZXNwb25zZSB0byBrbm93biwgdW5yZWNvdmVy
YWJsZSBlcnJvcnMgbGlrZSBvdXQtb2YtbWVtb3J5LgotICAgTWFjcm8gaXMgZW5hYmxlZCBpbiBi
b3RoIGRlYnVnIGFuZCByZWxlYXNlIG1vZGUuCi0gICBUbyB0ZXN0IGZvciB1bmtub3duIGVycm9y
cyBhbmQgdmVyaWZ5IGFzc3VtcHRpb25zLCB1c2UgQVNTRVJUIGluc3RlYWQsIHRvIGF2b2lkIGlt
cGFjdGluZyBwZXJmb3JtYW5jZSBpbiByZWxlYXNlIGJ1aWxkcy4KLQotICAgU2lnbmFscyBhcmUg
aWdub3JlZCBieSB0aGUgY3Jhc2ggcmVwb3J0ZXIgb24gT1MgWCBzbyB3ZSBtdXN0IGRvIGJldHRl
ci4KLSovCi0jaWYgQ09NUElMRVIoR0NDX09SX0NMQU5HKSB8fCBDT01QSUxFUihNU1ZDKQotI2Rl
ZmluZSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIE5PX1JFVFVSTgotI2Vsc2UKLSNkZWZpbmUgTk9f
UkVUVVJOX0RVRV9UT19DUkFTSAotI2VuZGlmCi0KLXR5cGVkZWYgZW51bSB7IFdURkxvZ0NoYW5u
ZWxPZmYsIFdURkxvZ0NoYW5uZWxPbiwgV1RGTG9nQ2hhbm5lbE9uV2l0aEFjY3VtdWxhdGlvbiB9
IFdURkxvZ0NoYW5uZWxTdGF0ZTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFdURkxvZ0NoYW5u
ZWxTdGF0ZSBzdGF0ZTsKLSAgICBjb25zdCBjaGFyKiBuYW1lOwotI2lmICFSRUxFQVNFX0xPR19E
SVNBQkxFRAotICAgIGNvbnN0IGNoYXIqIHN1YnN5c3RlbTsKLSAgICBfX3Vuc2FmZV91bnJldGFp
bmVkIG9zX2xvZ190IG9zTG9nQ2hhbm5lbDsKLSNlbmRpZgotfSBXVEZMb2dDaGFubmVsOwotCi0j
ZGVmaW5lIExPR19DSEFOTkVMKG5hbWUpIEpPSU5fTE9HX0NIQU5ORUxfV0lUSF9QUkVGSVgoTE9H
X0NIQU5ORUxfUFJFRklYLCBuYW1lKQotI2RlZmluZSBMT0dfQ0hBTk5FTF9BRERSRVNTKG5hbWUp
ICZMT0dfQ0hBTk5FTChuYW1lKSwKLSNkZWZpbmUgSk9JTl9MT0dfQ0hBTk5FTF9XSVRIX1BSRUZJ
WChwcmVmaXgsIGNoYW5uZWwpIEpPSU5fTE9HX0NIQU5ORUxfV0lUSF9QUkVGSVhfTEVWRUxfMihw
cmVmaXgsIGNoYW5uZWwpCi0jZGVmaW5lIEpPSU5fTE9HX0NIQU5ORUxfV0lUSF9QUkVGSVhfTEVW
RUxfMihwcmVmaXgsIGNoYW5uZWwpIHByZWZpeCAjIyBjaGFubmVsCi0KLSNkZWZpbmUgTE9HX0NI
QU5ORUxfV0VCS0lUX1NVQlNZU1RFTSAiY29tLmFwcGxlLldlYktpdCIKLQotI2RlZmluZSBERUNM
QVJFX0xPR19DSEFOTkVMKG5hbWUpIFwKLSAgICBleHRlcm4gV1RGTG9nQ2hhbm5lbCBMT0dfQ0hB
Tk5FTChuYW1lKTsKLQotI2lmICFkZWZpbmVkKERFRklORV9MT0dfQ0hBTk5FTCkKLSNpZiBSRUxF
QVNFX0xPR19ESVNBQkxFRAotI2RlZmluZSBERUZJTkVfTE9HX0NIQU5ORUwobmFtZSwgc3Vic3lz
dGVtKSBcCi0gICAgV1RGTG9nQ2hhbm5lbCBMT0dfQ0hBTk5FTChuYW1lKSA9IHsgV1RGTG9nQ2hh
bm5lbE9mZiwgI25hbWUgfTsKLSNlbHNlCi0jZGVmaW5lIERFRklORV9MT0dfQ0hBTk5FTChuYW1l
LCBzdWJzeXN0ZW0pIFwKLSAgICBXVEZMb2dDaGFubmVsIExPR19DSEFOTkVMKG5hbWUpID0geyBX
VEZMb2dDaGFubmVsT2ZmLCAjbmFtZSwgc3Vic3lzdGVtLCBPU19MT0dfREVGQVVMVCB9OwotI2Vu
ZGlmCi0jZW5kaWYKLQotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgV1RGUmVwb3J0QXNzZXJ0aW9u
RmFpbHVyZShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24s
IGNvbnN0IGNoYXIqIGFzc2VydGlvbik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBXVEZSZXBv
cnRBc3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2UoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBhc3NlcnRpb24sIGNvbnN0IGNoYXIq
IGZvcm1hdCwgLi4uKSBXVEZfQVRUUklCVVRFX1BSSU5URig1LCA2KTsKLVdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIFdURlJlcG9ydEFyZ3VtZW50QXNzZXJ0aW9uRmFpbHVyZShjb25zdCBjaGFyKiBm
aWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGFyZ05hbWUs
IGNvbnN0IGNoYXIqIGFzc2VydGlvbik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBXVEZSZXBv
cnRGYXRhbEVycm9yKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5j
dGlvbiwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDQsIDUp
OwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgV1RGUmVwb3J0RXJyb3IoY29uc3QgY2hhciogZmls
ZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4u
LikgV1RGX0FUVFJJQlVURV9QUklOVEYoNCwgNSk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBX
VEZMb2coV1RGTG9nQ2hhbm5lbCosIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBXVEZfQVRUUklC
VVRFX1BSSU5URigyLCAzKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIFdURkxvZ1ZlcmJvc2Uo
Y29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBXVEZMb2dD
aGFubmVsKiwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDUs
IDYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgV1RGTG9nQWx3YXlzVihjb25zdCBjaGFyKiBm
b3JtYXQsIHZhX2xpc3QpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgV1RGTG9nQWx3YXlzKGNv
bnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBXVEZfQVRUUklCVVRFX1BSSU5URigxLCAyKTsKLVdURl9F
WFBPUlRfUFJJVkFURSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgV1RGTG9nQWx3YXlzQW5k
Q3Jhc2goY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIp
OwotV1RGX0VYUE9SVF9QUklWQVRFIFdURkxvZ0NoYW5uZWwqIFdURkxvZ0NoYW5uZWxCeU5hbWUo
V1RGTG9nQ2hhbm5lbCpbXSwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyKik7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBXVEZJbml0aWFsaXplTG9nQ2hhbm5lbFN0YXRlc0Zyb21TdHJpbmcoV1RG
TG9nQ2hhbm5lbCpbXSwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyKik7Ci0KLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIFdURkdldEJhY2t0cmFjZSh2b2lkKiogc3RhY2ssIGludCogc2l6ZSk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBXVEZSZXBvcnRCYWNrdHJhY2UoKTsKLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIFdURlByaW50QmFja3RyYWNlKHZvaWQqKiBzdGFjaywgaW50IHNpemUpOwot
Ci10eXBlZGVmIHZvaWQgKCpXVEZDcmFzaEhvb2tGdW5jdGlvbikoKTsKLVdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIFdURlNldENyYXNoSG9vayhXVEZDcmFzaEhvb2tGdW5jdGlvbik7Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBXVEZJbnN0YWxsUmVwb3J0QmFja3RyYWNlT25DcmFzaEhvb2soKTsK
LQotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgV1RGSXNEZWJ1Z2dlckF0dGFjaGVkKCk7Ci0KLSNp
ZiBDUFUoWDg2XzY0KSB8fCBDUFUoWDg2KQotI2RlZmluZSBXVEZCcmVha3BvaW50VHJhcCgpICBf
X2FzbV9fIHZvbGF0aWxlICgiaW50MyIpCi0jZWxpZiBDUFUoQVJNX1RIVU1CMikKLSNkZWZpbmUg
V1RGQnJlYWtwb2ludFRyYXAoKSAgX19hc21fXyB2b2xhdGlsZSAoImJrcHQgIzAiKQotI2VsaWYg
Q1BVKEFSTTY0KQotI2RlZmluZSBXVEZCcmVha3BvaW50VHJhcCgpICBfX2FzbV9fIHZvbGF0aWxl
ICgiYnJrICMwIikKLSNlbHNlCi0jZGVmaW5lIFdURkJyZWFrcG9pbnRUcmFwKCkgV1RGQ3Jhc2go
KSAvLyBOb3QgaW1wbGVtZW50ZWQuCi0jZW5kaWYKLQotI2lmbmRlZiBDUkFTSAotCi0jaWYgZGVm
aW5lZChOREVCVUcpICYmIE9TKERBUldJTikKLS8vIENyYXNoIHdpdGggYSBTSUdUUkFQIGkuZSBF
WENfQlJFQUtQT0lOVC4KLS8vIFdlIGFyZSBub3QgdXNpbmcgX19idWlsdGluX3RyYXAgYmVjYXVz
ZSBpdCBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gYWJvcnQsIGJ1dCBub3QgbmVjZXNzYXJpbHkKLS8v
IHRyaWdnZXIgYSBTSUdUUkFQLiBJbnN0ZWFkLCB3ZSB1c2UgaW5saW5lIGFzbSB0byBlbnN1cmUg
dGhhdCB3ZSB0cmlnZ2VyIHRoZSBTSUdUUkFQLgotI2RlZmluZSBDUkFTSCgpIGRvIHsgXAotICAg
IFdURkJyZWFrcG9pbnRUcmFwKCk7IFwKLSAgICBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsgXAot
fSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIENSQVNIKCkgV1RGQ3Jhc2goKQotI2VuZGlmCi0K
LSNlbmRpZiAvLyAhZGVmaW5lZChDUkFTSCkKLQotV1RGX0VYUE9SVF9QUklWQVRFIE5PX1JFVFVS
Tl9EVUVfVE9fQ1JBU0ggdm9pZCBXVEZDcmFzaCgpOwotCi0jaWZuZGVmIENSQVNIX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04KLSNkZWZpbmUgQ1JBU0hfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TigpIFdURkNyYXNoV2l0aFNlY3VyaXR5SW1wbGljYXRpb24oKQotI2VuZGlmCi0KLVdURl9FWFBP
UlRfUFJJVkFURSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgV1RGQ3Jhc2hXaXRoU2VjdXJp
dHlJbXBsaWNhdGlvbigpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0vKiBC
QUNLVFJBQ0UKLQotICBQcmludCBhIGJhY2t0cmFjZSB0byB0aGUgc2FtZSBsb2NhdGlvbiBhcyBB
U1NFUlQgbWVzc2FnZXMuCi0qLwotCi0jaWYgQkFDS1RSQUNFX0RJU0FCTEVECi0KLSNkZWZpbmUg
QkFDS1RSQUNFKCkgKCh2b2lkKTApCi0KLSNlbHNlCi0KLSNkZWZpbmUgQkFDS1RSQUNFKCkgZG8g
eyBcCi0gICAgV1RGUmVwb3J0QmFja3RyYWNlKCk7IFwKLX0gd2hpbGUoZmFsc2UpCi0KLSNlbmRp
ZgotCi0vKiBBU1NFUlQsIEFTU0VSVF9OT1RfUkVBQ0hFRCwgQVNTRVJUX1VOVVNFRAotCi0gIFRo
ZXNlIG1hY3JvcyBhcmUgY29tcGlsZWQgb3V0IG9mIHJlbGVhc2UgYnVpbGRzLgotICBFeHByZXNz
aW9ucyBpbnNpZGUgdGhlbSBhcmUgZXZhbHVhdGVkIGluIGRlYnVnIGJ1aWxkcyBvbmx5LgotKi8K
LQotI2lmIE9TKFdJTkRPV1MpCi0vKiBGSVhNRTogQ2hhbmdlIHRvIHVzZSBzb21ldGhpbmcgb3Ro
ZXIgdGhhbiBBU1NFUlQgdG8gYXZvaWQgdGhpcyBjb25mbGljdCB3aXRoIHRoZSB1bmRlcmx5aW5n
IHBsYXRmb3JtICovCi0jdW5kZWYgQVNTRVJUCi0jZW5kaWYKLQotI2lmICFBU1NFUlRfRU5BQkxF
RAotCi0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pICgodm9pZCkwKQotI2RlZmluZSBBU1NFUlRf
QVQoYXNzZXJ0aW9uLCBmaWxlLCBsaW5lLCBmdW5jdGlvbikgKCh2b2lkKTApCi0jZGVmaW5lIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpICgodm9pZCkwKQotI2RlZmluZSBBU1NFUlRfSU1QTElFUyhjb25k
aXRpb24sIGFzc2VydGlvbikgKCh2b2lkKTApCi0jZGVmaW5lIE5PX1JFVFVSTl9EVUVfVE9fQVNT
RVJUCi0KLSNkZWZpbmUgQVNTRVJUX1VOVVNFRCh2YXJpYWJsZSwgYXNzZXJ0aW9uKSAoKHZvaWQp
dmFyaWFibGUpCi0KLSNpZiBFTkFCTEUoU0VDVVJJVFlfQVNTRVJUSU9OUykKLSNkZWZpbmUgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oYXNzZXJ0aW9uKSBcCi0gICAgKCEoYXNzZXJ0
aW9uKSA/IFwKLSAgICAgICAgKFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9f
TElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNzZXJ0aW9uKSwgXAotICAgICAgICAgQ1JB
U0hfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigpKSA6IFwKLSAgICAgICAgKHZvaWQpMCkKLQot
I2RlZmluZSBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTl9ESVNBQkxFRCAwCi0jZWxz
ZQotI2RlZmluZSBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihhc3NlcnRpb24pICgo
dm9pZCkwKQotI2RlZmluZSBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTl9ESVNBQkxF
RCAxCi0jZW5kaWYKLQotI2Vsc2UKLQotI2RlZmluZSBBU1NFUlQoYXNzZXJ0aW9uKSBkbyB7IFwK
LSAgICBpZiAoIShhc3NlcnRpb24pKSB7IFwKLSAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFp
bHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNhc3NlcnRpb24p
OyBcCi0gICAgICAgIENSQVNIKCk7IFwKLSAgICB9IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUg
QVNTRVJUX0FUKGFzc2VydGlvbiwgZmlsZSwgbGluZSwgZnVuY3Rpb24pIGRvIHsgXAotICAgIGlm
ICghKGFzc2VydGlvbikpIHsgXAotICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZp
bGUsIGxpbmUsIGZ1bmN0aW9uLCAjYXNzZXJ0aW9uKTsgXAotICAgICAgICBDUkFTSCgpOyBcCi0g
ICAgfSBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIEFTU0VSVF9OT1RfUkVBQ0hFRCgpIGRvIHsg
XAotICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZf
UFJFVFRZX0ZVTkNUSU9OLCAwKTsgXAotICAgIENSQVNIKCk7IFwKLX0gd2hpbGUgKDApCi0KLSNk
ZWZpbmUgQVNTRVJUX0lNUExJRVMoY29uZGl0aW9uLCBhc3NlcnRpb24pIGRvIHsgXAotICAgIGlm
ICgoY29uZGl0aW9uKSAmJiAhKGFzc2VydGlvbikpIHsgXAotICAgICAgICBXVEZSZXBvcnRBc3Nl
cnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2Nv
bmRpdGlvbiAiID0+ICIgI2Fzc2VydGlvbik7IFwKLSAgICAgICAgQ1JBU0goKTsgXAotICAgIH0g
XAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBBU1NFUlRfVU5VU0VEKHZhcmlhYmxlLCBhc3NlcnRp
b24pIEFTU0VSVChhc3NlcnRpb24pCi0KLSNkZWZpbmUgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQg
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSAotCi0vKiBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTgotIAotICAgRmFpbHVyZSBvZiB0aGlzIGFzc2VydGlvbiBpbmRpY2F0ZXMgYSBwb3NzaWJs
ZSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgotICAgQ2xhc3Mgb2YgdnVsbmVyYWJpbGl0aWVzIHRo
YXQgaXQgdGVzdHMgaW5jbHVkZSBiYWQgY2FzdHMsIG91dCBvZiBib3VuZHMKLSAgIGFjY2Vzc2Vz
LCB1c2UtYWZ0ZXItZnJlZXMsIGV0Yy4gUGxlYXNlIGZpbGUgYSBidWcgdXNpbmcgdGhlIHNlY3Vy
aXR5Ci0gICB0ZW1wbGF0ZSAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL2VudGVyX2J1Zy5jZ2k/
cHJvZHVjdD1TZWN1cml0eS4KLSAKLSovCi0jZGVmaW5lIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKGFzc2VydGlvbikgXAotICAgICghKGFzc2VydGlvbikgPyBcCi0gICAgICAgIChX
VEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9G
VU5DVElPTiwgI2Fzc2VydGlvbiksIFwKLSAgICAgICAgIENSQVNIX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oKSkgOiBcCi0gICAgICAgICh2b2lkKTApCi0jZGVmaW5lIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OX0RJU0FCTEVEIDAKLSNlbmRpZgotCi0vKiBBU1NFUlRfV0lUSF9N
RVNTQUdFICovCi0KLSNpZiBBU1NFUlRfTVNHX0RJU0FCTEVECi0jZGVmaW5lIEFTU0VSVF9XSVRI
X01FU1NBR0UoYXNzZXJ0aW9uLCAuLi4pICgodm9pZCkwKQotI2Vsc2UKLSNkZWZpbmUgQVNTRVJU
X1dJVEhfTUVTU0FHRShhc3NlcnRpb24sIC4uLikgZG8geyBcCi0gICAgaWYgKCEoYXNzZXJ0aW9u
KSkgeyBcCi0gICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmVXaXRoTWVzc2FnZShfX0ZJ
TEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNhc3NlcnRpb24sIF9fVkFfQVJH
U19fKTsgXAotICAgICAgICBDUkFTSCgpOyBcCi0gICAgfSBcCi19IHdoaWxlICgwKQotI2VuZGlm
Ci0KLS8qIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEICovCi0KLSNpZiBBU1NFUlRfTVNHX0RJ
U0FCTEVECi0jZGVmaW5lIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKHZhcmlhYmxlLCBhc3Nl
cnRpb24sIC4uLikgKCh2b2lkKXZhcmlhYmxlKQotI2Vsc2UKLSNkZWZpbmUgQVNTRVJUX1dJVEhf
TUVTU0FHRV9VTlVTRUQodmFyaWFibGUsIGFzc2VydGlvbiwgLi4uKSBkbyB7IFwKLSAgICBpZiAo
IShhc3NlcnRpb24pKSB7IFwKLSAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZVdpdGhN
ZXNzYWdlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlv
biwgX19WQV9BUkdTX18pOyBcCi0gICAgICAgIENSQVNIKCk7IFwKLSAgICB9IFwKLX0gd2hpbGUg
KDApCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgCi0vKiBBU1NFUlRfQVJHICovCi0KLSNpZiBBU1NFUlRfQVJHX0RJU0FCTEVECi0KLSNk
ZWZpbmUgQVNTRVJUX0FSRyhhcmdOYW1lLCBhc3NlcnRpb24pICgodm9pZCkwKQotCi0jZWxzZQot
Ci0jZGVmaW5lIEFTU0VSVF9BUkcoYXJnTmFtZSwgYXNzZXJ0aW9uKSBkbyB7IFwKLSAgICBpZiAo
IShhc3NlcnRpb24pKSB7IFwKLSAgICAgICAgV1RGUmVwb3J0QXJndW1lbnRBc3NlcnRpb25GYWls
dXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2FyZ05hbWUsICNh
c3NlcnRpb24pOyBcCi0gICAgICAgIENSQVNIKCk7IFwKLSAgICB9IFwKLX0gd2hpbGUgKDApCi0K
LSNlbmRpZgotCi0vKiBDT01QSUxFX0FTU0VSVCAqLwotI2lmbmRlZiBDT01QSUxFX0FTU0VSVAot
I2lmIENPTVBJTEVSX1NVUFBPUlRTKENfU1RBVElDX0FTU0VSVCkKLS8qIFVubGlrZSBzdGF0aWNf
YXNzZXJ0IGJlbG93LCB0aGlzIGFsc28gd29ya3MgaW4gcGxhaW4gQyBjb2RlLiAqLwotI2RlZmlu
ZSBDT01QSUxFX0FTU0VSVChleHAsIG5hbWUpIF9TdGF0aWNfYXNzZXJ0KChleHApLCAjbmFtZSkK
LSNlbHNlCi0jZGVmaW5lIENPTVBJTEVfQVNTRVJUKGV4cCwgbmFtZSkgc3RhdGljX2Fzc2VydCgo
ZXhwKSwgI25hbWUpCi0jZW5kaWYKLSNlbmRpZgotCi0vKiBGQVRBTCAqLwotCi0jaWYgRkFUQUxf
RElTQUJMRUQKLSNkZWZpbmUgRkFUQUwoLi4uKSAoKHZvaWQpMCkKLSNlbHNlCi0jZGVmaW5lIEZB
VEFMKC4uLikgZG8geyBcCi0gICAgV1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5F
X18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIF9fVkFfQVJHU19fKTsgXAotICAgIENSQVNIKCk7IFwK
LX0gd2hpbGUgKDApCi0jZW5kaWYKLQotLyogTE9HX0VSUk9SICovCi0KLSNpZiBFUlJPUl9ESVNB
QkxFRAotI2RlZmluZSBMT0dfRVJST1IoLi4uKSAoKHZvaWQpMCkKLSNlbHNlCi0jZGVmaW5lIExP
R19FUlJPUiguLi4pIFdURlJlcG9ydEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRU
WV9GVU5DVElPTiwgX19WQV9BUkdTX18pCi0jZW5kaWYKLQotLyogTE9HICovCi0KLSNpZiBMT0df
RElTQUJMRUQKLSNkZWZpbmUgTE9HKGNoYW5uZWwsIC4uLikgKCh2b2lkKTApCi0jZWxzZQotI2Rl
ZmluZSBMT0coY2hhbm5lbCwgLi4uKSBXVEZMb2coJkxPR19DSEFOTkVMKGNoYW5uZWwpLCBfX1ZB
X0FSR1NfXykKLSNlbmRpZgotCi0vKiBMT0dfVkVSQk9TRSAqLwotCi0jaWYgTE9HX0RJU0FCTEVE
Ci0jZGVmaW5lIExPR19WRVJCT1NFKGNoYW5uZWwsIC4uLikgKCh2b2lkKTApCi0jZWxzZQotI2Rl
ZmluZSBMT0dfVkVSQk9TRShjaGFubmVsLCAuLi4pIFdURkxvZ1ZlcmJvc2UoX19GSUxFX18sIF9f
TElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAmTE9HX0NIQU5ORUwoY2hhbm5lbCksIF9fVkFf
QVJHU19fKQotI2VuZGlmCi0KLS8qIFJFTEVBU0VfTE9HICovCi0KLSNpZiBSRUxFQVNFX0xPR19E
SVNBQkxFRAotI2RlZmluZSBSRUxFQVNFX0xPRyggICAgICBjaGFubmVsLCBmb3JtYXQsIC4uLikg
KCh2b2lkKTApCi0jZGVmaW5lIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsIGZvcm1hdCwgLi4u
KSBMT0dfRVJST1IoZm9ybWF0LCAjI19fVkFfQVJHU19fKQotCi0jZGVmaW5lIFJFTEVBU0VfTE9H
X0lGKCAgICAgIGlzQWxsb3dlZCwgY2hhbm5lbCwgZm9ybWF0LCAuLi4pICgodm9pZCkwKQotI2Rl
ZmluZSBSRUxFQVNFX0xPR19FUlJPUl9JRihpc0FsbG93ZWQsIGNoYW5uZWwsIGZvcm1hdCwgLi4u
KSBkbyB7IGlmIChpc0FsbG93ZWQpIFJFTEVBU0VfTE9HX0VSUk9SKGNoYW5uZWwsIGZvcm1hdCwg
IyNfX1ZBX0FSR1NfXyk7IH0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBSRUxFQVNFX0xPRygg
ICAgICBjaGFubmVsLCBmb3JtYXQsIC4uLikgb3NfbG9nKCAgICAgIExPR19DSEFOTkVMKGNoYW5u
ZWwpLm9zTG9nQ2hhbm5lbCwgZm9ybWF0LCAjI19fVkFfQVJHU19fKQotI2RlZmluZSBSRUxFQVNF
X0xPR19FUlJPUihjaGFubmVsLCBmb3JtYXQsIC4uLikgb3NfbG9nX2Vycm9yKExPR19DSEFOTkVM
KGNoYW5uZWwpLm9zTG9nQ2hhbm5lbCwgZm9ybWF0LCAjI19fVkFfQVJHU19fKQotCi0jZGVmaW5l
IFJFTEVBU0VfTE9HX0lGKCAgICAgIGlzQWxsb3dlZCwgY2hhbm5lbCwgZm9ybWF0LCAuLi4pIGRv
IHsgaWYgKGlzQWxsb3dlZCkgUkVMRUFTRV9MT0coICAgICAgY2hhbm5lbCwgZm9ybWF0LCAjI19f
VkFfQVJHU19fKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVMRUFTRV9MT0dfRVJST1JfSUYoaXNB
bGxvd2VkLCBjaGFubmVsLCBmb3JtYXQsIC4uLikgZG8geyBpZiAoaXNBbGxvd2VkKSBSRUxFQVNF
X0xPR19FUlJPUihjaGFubmVsLCBmb3JtYXQsICMjX19WQV9BUkdTX18pOyB9IHdoaWxlICgwKQot
I2VuZGlmCi0KLQotLyogUkVMRUFTRV9BU1NFUlQgKi8KLQotI2lmICFBU1NFUlRfRU5BQkxFRAot
I2RlZmluZSBSRUxFQVNFX0FTU0VSVChhc3NlcnRpb24pIGRvIHsgXAotICAgIGlmIChVTkxJS0VM
WSghKGFzc2VydGlvbikpKSBcCi0gICAgICAgIENSQVNIKCk7IFwKLX0gd2hpbGUgKDApCi0jZGVm
aW5lIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShhc3NlcnRpb24sIC4uLikgUkVMRUFTRV9B
U1NFUlQoYXNzZXJ0aW9uKQotI2RlZmluZSBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpIENS
QVNIKCkKLSNlbHNlCi0jZGVmaW5lIFJFTEVBU0VfQVNTRVJUKGFzc2VydGlvbikgQVNTRVJUKGFz
c2VydGlvbikKLSNkZWZpbmUgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGFzc2VydGlvbiwg
Li4uKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFzc2VydGlvbiwgX19WQV9BUkdTX18pCi0jZGVmaW5l
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCkgQVNTRVJUX05PVF9SRUFDSEVEKCkKLSNlbmRp
ZgotCi0vKiBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0gKi8KLQotI2lmIENPTVBJTEVSKENMQU5H
KQotLy8gVGhpcyB3b3VsZCBiZSBhIG1hY3JvIGV4Y2VwdCB0aGF0IGl0cyB1c2Ugb2YgI3ByYWdt
YSB3b3JrcyBiZXN0IGFyb3VuZAotLy8gYSBmdW5jdGlvbi4gSGVuY2UgaXQgdXNlcyBtYWNybyBu
YW1pbmcgY29udmVudGlvbi4KLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgotc3RhdGljIGlu
bGluZSB2b2lkIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpCi17Ci0gICAgLy8gVGhpcyAqTVVT
VCogYmUgYSByZWxlYXNlIGFzc2VydC4gV2UgdXNlIGl0IGluIHBsYWNlcyB3aGVyZSBpdCdzIGJl
dHRlciB0byBjcmFzaCB0aGFuIHRvIGtlZXAKLSAgICAvLyBnb2luZy4KLSAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotI2Vs
c2UKLSNkZWZpbmUgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCkgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKQotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotCi0vLyBUaGUgY29tYmlu
YXRpb24gb2YgbGluZSwgZmlsZSwgZnVuY3Rpb24sIGFuZCBjb3VudGVyIHNob3VsZCBiZSBhIHVu
aXF1ZSBudW1iZXIgcGVyIGNhbGwgdG8gdGhpcyBjcmFzaC4gVGhpcyB0cmlja3MgdGhlIGNvbXBp
bGVyIGludG8gbm90IGNvYWxlc2NpbmcgY2FsbHMgdG8gV1RGQ3Jhc2hXaXRoSW5mby4KLS8vIFRo
ZSBlYXNpZXN0IHdheSB0byBmaWxsIHRoZXNlIHZhbHVlcyBwZXIgdHJhbnNsYXRpb24gdW5pdCBp
cyB0byBwYXNzIF9fTElORV9fLCBfX0ZJTEVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgYW5kIF9f
Q09VTlRFUl9fLgotV1RGX0VYUE9SVF9QUklWQVRFIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggTk9U
X1RBSUxfQ0FMTEVEIHZvaWQgV1RGQ3Jhc2hXaXRoSW5mbyhpbnQgbGluZSwgY29uc3QgY2hhciog
ZmlsZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIGludCBjb3VudGVyLCB1aW50NjRfdCByZWFzb24s
IHVpbnQ2NF90IG1pc2MxLCB1aW50NjRfdCBtaXNjMiwgdWludDY0X3QgbWlzYzMsIHVpbnQ2NF90
IG1pc2M0KTsKLVdURl9FWFBPUlRfUFJJVkFURSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIE5PVF9U
QUlMX0NBTExFRCB2b2lkIFdURkNyYXNoV2l0aEluZm8oaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZp
bGUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBpbnQgY291bnRlciwgdWludDY0X3QgcmVhc29uLCB1
aW50NjRfdCBtaXNjMSwgdWludDY0X3QgbWlzYzIsIHVpbnQ2NF90IG1pc2MzKTsKLVdURl9FWFBP
UlRfUFJJVkFURSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIE5PVF9UQUlMX0NBTExFRCB2b2lkIFdU
RkNyYXNoV2l0aEluZm8oaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZpbGUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uLCBpbnQgY291bnRlciwgdWludDY0X3QgcmVhc29uLCB1aW50NjRfdCBtaXNjMSwgdWlu
dDY0X3QgbWlzYzIpOwotV1RGX0VYUE9SVF9QUklWQVRFIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0gg
Tk9UX1RBSUxfQ0FMTEVEIHZvaWQgV1RGQ3Jhc2hXaXRoSW5mbyhpbnQgbGluZSwgY29uc3QgY2hh
ciogZmlsZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIGludCBjb3VudGVyLCB1aW50NjRfdCByZWFz
b24sIHVpbnQ2NF90IG1pc2MxKTsKLVdURl9FWFBPUlRfUFJJVkFURSBOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIE5PVF9UQUlMX0NBTExFRCB2b2lkIFdURkNyYXNoV2l0aEluZm8oaW50IGxpbmUsIGNv
bnN0IGNoYXIqIGZpbGUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBpbnQgY291bnRlciwgdWludDY0
X3QgcmVhc29uKTsKLVdURl9FWFBPUlRfUFJJVkFURSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIE5P
VF9UQUlMX0NBTExFRCB2b2lkIFdURkNyYXNoV2l0aEluZm8oaW50IGxpbmUsIGNvbnN0IGNoYXIq
IGZpbGUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBpbnQgY291bnRlcik7Ci0KLQotbmFtZXNwYWNl
IFdURiB7Ci1pbmxpbmUgdm9pZCBpc0ludGVncmFsVHlwZSgpIHsgfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZS4uLiBUeXBlcz4KLXZvaWQgaXNJbnRlZ3JhbFR5cGUoVCwgVHlwZXMu
Li4gdHlwZXMpCi17Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1
ZSB8fCBzdGQ6OmlzX2VudW08VD46OnZhbHVlLCAiQWxsIHR5cGVzIG5lZWQgdG8gYmUgaW50ZWdy
YWwgYml0d2lzZV9jYXN0IHRvIGludGVncmFsIHR5cGUgZm9yIGxvZ2dpbmciKTsKLSAgICBpc0lu
dGVncmFsVHlwZSh0eXBlcy4uLik7Ci19Ci19Ci0KLWlubGluZSB2b2lkIGNvbXBpbGVyRmVuY2VG
b3JDcmFzaCgpCi17Ci0jaWYgT1MoV0lORE9XUykgJiYgIUNPTVBJTEVSKEdDQ19PUl9DTEFORykK
LSAgICBfUmVhZFdyaXRlQmFycmllcigpOwotI2Vsc2UKLSAgICBhc20gdm9sYXRpbGUoIiIgOjo6
ICJtZW1vcnkiKTsKLSNlbmRpZgotfQotCi0jaWZuZGVmIENSQVNIX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT05fQU5EX0lORk8KLS8vIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBhcmUgZ29pbmcgdG8g
c3R1ZmYgZGF0YSBpbnRvIHJlZ2lzdGVycyBiZWZvcmUgY3Jhc2hpbmcuIExpa2UgdGhlIGNyYXNo
V2l0aEluZm8gZnVuY3Rpb25zIGJlbG93Li4uCi0vLyBHQ0MgZG9lc24ndCBsaWtlIHRoZSAjI19f
VkFfQVJHU19fIGhlcmUgc2luY2UgdGhpcyBtYWNybyBpcyBjYWxsZWQgZnJvbSBhbm90aGVyIG1h
Y3JvIHNvIHdlIGp1c3QgQ1JBU0ggaW5zdGVhZCB0aGVyZS4KLSNpZiBDT01QSUxFUihDTEFORykg
fHwgQ09NUElMRVIoTVNWQykKLSNkZWZpbmUgQ1JBU0hfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
Tl9BTkRfSU5GTyguLi4pIGRvIHsgXAotICAgICAgICBXVEY6OmlzSW50ZWdyYWxUeXBlKF9fVkFf
QVJHU19fKTsgXAotICAgICAgICBjb21waWxlckZlbmNlRm9yQ3Jhc2goKTsgXAotICAgICAgICBX
VEZDcmFzaFdpdGhJbmZvKF9fTElORV9fLCBfX0ZJTEVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwg
X19DT1VOVEVSX18sICMjX19WQV9BUkdTX18pOyBcCi0gICAgfSB3aGlsZSAoZmFsc2UpCi0jZWxz
ZQotI2RlZmluZSBDUkFTSF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OX0FORF9JTkZPKC4uLikg
Q1JBU0goKQotI2VuZGlmCi0jZW5kaWYgLy8gQ1JBU0hfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
Tl9BTkRfSU5GTwotCi0jZW5kaWYgLy8gX19jcGx1c3BsdXMKLQotI2VuZGlmIC8qIFdURl9Bc3Nl
cnRpb25zX2ggKi8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9BdG9taWNzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvQXRvbWljcy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGVjM2RiMDY5ZWNhNzI1MjlkOTNhODU5
YTYxZDk2M2M1NTU2YzM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9BdG9taWNzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0NzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBK
dXN0aW4gSGF5Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IEF0b21pY3NfaAotI2RlZmluZSBBdG9taWNzX2gKLQotI2luY2x1ZGUgPGF0b21pYz4KLSNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLSNpZiBPUyhXSU5ET1dTKQotI2lmICFDT01QSUxF
UihHQ0NfT1JfQ0xBTkcpCi1leHRlcm4gIkMiIHZvaWQgX1JlYWRXcml0ZUJhcnJpZXIodm9pZCk7
Ci0jcHJhZ21hIGludHJpbnNpYyhfUmVhZFdyaXRlQmFycmllcikKLSNlbmRpZgotI2luY2x1ZGUg
PHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxpbnRyaW4uaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RG
IHsKLQotQUxXQVlTX0lOTElORSBib29sIGhhc0ZlbmNlKHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVy
KQotewotICAgIHJldHVybiBvcmRlciAhPSBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkOwotfQot
ICAgIAotLy8gQXRvbWljIHdyYXBzIGFyb3VuZCBzdGQ6OmF0b21pYyB3aXRoIHRoZSBzb2xlIHB1
cnBvc2Ugb2YgbWFraW5nIHRoZSBjb21wYXJlX2V4Y2hhbmdlCi0vLyBvcGVyYXRpb25zIG5vdCBh
bHRlciB0aGUgZXhwZWN0ZWQgdmFsdWUuIFRoaXMgaXMgbW9yZSBpbiBsaW5lIHdpdGggaG93IHdl
IHR5cGljYWxseQotLy8gdXNlIENBUyBpbiBvdXIgY29kZS4KLS8vCi0vLyBBdG9taWMgaXMgYSBz
dHJ1Y3Qgd2l0aG91dCBleHBsaWNpdGx5IGRlZmluZWQgY29uc3RydWN0b3JzIHNvIHRoYXQgaXQg
Y2FuIGJlCi0vLyBpbml0aWFsaXplZCBhdCBjb21waWxlIHRpbWUuCi0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1zdHJ1Y3QgQXRvbWljIHsKLSAgICAvLyBEb24ndCBwYXNzIGEgbm9uLWRlZmF1bHQg
dmFsdWUgZm9yIHRoZSBvcmRlciBwYXJhbWV0ZXIgdW5sZXNzIHlvdSByZWFsbHkga25vdwotICAg
IC8vIHdoYXQgeW91IGFyZSBkb2luZyBhbmQgaGF2ZSB0aG91Z2h0IGFib3V0IGl0IHZlcnkgaGFy
ZC4gVGhlIGNvc3Qgb2Ygc2VxX2NzdAotICAgIC8vIGlzIHVzdWFsbHkgbm90IGhpZ2ggZW5vdWdo
IHRvIGp1c3RpZnkgdGhlIHJpc2suCi0KLSAgICBBTFdBWVNfSU5MSU5FIFQgbG9hZChzdGQ6Om1l
bW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpIGNvbnN0IHsgcmV0
dXJuIHZhbHVlLmxvYWQob3JkZXIpOyB9Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSBUIGxvYWRS
ZWxheGVkKCkgY29uc3QgeyByZXR1cm4gbG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsg
fQotICAgIAotICAgIC8vIFRoaXMgaXMgYSBsb2FkIHRoYXQgc2ltdWx0YW5lb3VzbHkgZG9lcyBh
IGZ1bGwgZmVuY2UgLSBuZWl0aGVyIGxvYWRzIG5vciBzdG9yZXMgd2lsbCBtb3ZlCi0gICAgLy8g
YWJvdmUgb3IgYmVsb3cgaXQuCi0gICAgQUxXQVlTX0lOTElORSBUIGxvYWRGdWxseUZlbmNlZCgp
IGNvbnN0Ci0gICAgewotICAgICAgICBBdG9taWM8VD4qIHB0ciA9IGNvbnN0X2Nhc3Q8QXRvbWlj
PFQ+Kj4odGhpcyk7Ci0gICAgICAgIHJldHVybiBwdHItPmV4Y2hhbmdlQWRkKFQoKSk7Ci0gICAg
fQotICAgIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzdG9yZShUIGRlc2lyZWQsIHN0ZDo6bWVt
b3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgeyB2YWx1ZS5zdG9y
ZShkZXNpcmVkLCBvcmRlcik7IH0KLSAgICAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc3RvcmVS
ZWxheGVkKFQgZGVzaXJlZCkgeyBzdG9yZShkZXNpcmVkLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxh
eGVkKTsgfQotCi0gICAgLy8gVGhpcyBpcyBhIHN0b3JlIHRoYXQgc2ltdWx0YW5lb3VzbHkgZG9l
cyBhIGZ1bGwgZmVuY2UgLSBuZWl0aGVyIGxvYWRzIG5vciBzdG9yZXMgd2lsbCBtb3ZlCi0gICAg
Ly8gYWJvdmUgb3IgYmVsb3cgaXQuCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHN0b3JlRnVsbHlG
ZW5jZWQoVCBkZXNpcmVkKQotICAgIHsKLSAgICAgICAgZXhjaGFuZ2UoZGVzaXJlZCk7Ci0gICAg
fQotCi0gICAgQUxXQVlTX0lOTElORSBib29sIGNvbXBhcmVFeGNoYW5nZVdlYWsoVCBleHBlY3Rl
ZCwgVCBkZXNpcmVkLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVy
X3NlcV9jc3QpCi0gICAgewotICAgICAgICBUIGV4cGVjdGVkT3JBY3R1YWwgPSBleHBlY3RlZDsK
LSAgICAgICAgcmV0dXJuIHZhbHVlLmNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhleHBlY3RlZE9yQWN0
dWFsLCBkZXNpcmVkLCBvcmRlcik7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBib29sIGNv
bXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKFQgZXhwZWN0ZWQsIFQgZGVzaXJlZCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBjb21wYXJlRXhjaGFuZ2VXZWFrKGV4cGVjdGVkLCBkZXNpcmVkLCBzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
Y29tcGFyZUV4Y2hhbmdlV2VhayhUIGV4cGVjdGVkLCBUIGRlc2lyZWQsIHN0ZDo6bWVtb3J5X29y
ZGVyIG9yZGVyX3N1Y2Nlc3MsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyX2ZhaWx1cmUpCi0gICAg
ewotICAgICAgICBUIGV4cGVjdGVkT3JBY3R1YWwgPSBleHBlY3RlZDsKLSAgICAgICAgcmV0dXJu
IHZhbHVlLmNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhleHBlY3RlZE9yQWN0dWFsLCBkZXNpcmVkLCBv
cmRlcl9zdWNjZXNzLCBvcmRlcl9mYWlsdXJlKTsKLSAgICB9Ci0KLSAgICAvLyBXQVJOSU5HOiBU
aGlzIGRvZXMgbm90IGhhdmUgc3Ryb25nIGZlbmNpbmcgZ3VhcmFudGVlcyB3aGVuIGl0IGZhaWxz
LiBGb3IgZXhhbXBsZSwgc3RvcmVzIGNvdWxkCi0gICAgLy8gc2luayBiZWxvdyBpdCBpbiB0aGF0
IGNhc2UuCi0gICAgQUxXQVlTX0lOTElORSBUIGNvbXBhcmVFeGNoYW5nZVN0cm9uZyhUIGV4cGVj
dGVkLCBUIGRlc2lyZWQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3Jk
ZXJfc2VxX2NzdCkKLSAgICB7Ci0gICAgICAgIFQgZXhwZWN0ZWRPckFjdHVhbCA9IGV4cGVjdGVk
OwotICAgICAgICB2YWx1ZS5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhleHBlY3RlZE9yQWN0dWFs
LCBkZXNpcmVkLCBvcmRlcik7Ci0gICAgICAgIHJldHVybiBleHBlY3RlZE9yQWN0dWFsOwotICAg
IH0KLQotICAgIEFMV0FZU19JTkxJTkUgVCBjb21wYXJlRXhjaGFuZ2VTdHJvbmcoVCBleHBlY3Rl
ZCwgVCBkZXNpcmVkLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlcl9zdWNjZXNzLCBzdGQ6Om1lbW9y
eV9vcmRlciBvcmRlcl9mYWlsdXJlKQotICAgIHsKLSAgICAgICAgVCBleHBlY3RlZE9yQWN0dWFs
ID0gZXhwZWN0ZWQ7Ci0gICAgICAgIHZhbHVlLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGV4cGVj
dGVkT3JBY3R1YWwsIGRlc2lyZWQsIG9yZGVyX3N1Y2Nlc3MsIG9yZGVyX2ZhaWx1cmUpOwotICAg
ICAgICByZXR1cm4gZXhwZWN0ZWRPckFjdHVhbDsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgotICAgIEFMV0FZU19JTkxJTkUgVCBleGNoYW5nZUFkZChVIG9wZXJhbmQsIHN0ZDo6
bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgeyByZXR1cm4g
dmFsdWUuZmV0Y2hfYWRkKG9wZXJhbmQsIG9yZGVyKTsgfQotICAgIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+Ci0gICAgQUxXQVlTX0lOTElORSBUIGV4Y2hhbmdlQW5kKFUgb3BlcmFuZCwgc3Rk
OjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSB7IHJldHVy
biB2YWx1ZS5mZXRjaF9hbmQob3BlcmFuZCwgb3JkZXIpOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KLSAgICBBTFdBWVNfSU5MSU5FIFQgZXhjaGFuZ2VPcihVIG9wZXJhbmQsIHN0
ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgeyByZXR1
cm4gdmFsdWUuZmV0Y2hfb3Iob3BlcmFuZCwgb3JkZXIpOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KLSAgICBBTFdBWVNfSU5MSU5FIFQgZXhjaGFuZ2VTdWIoVSBvcGVyYW5kLCBz
dGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpIHsgcmV0
dXJuIHZhbHVlLmZldGNoX3N1YihvcGVyYW5kLCBvcmRlcik7IH0KLSAgICAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgotICAgIEFMV0FZU19JTkxJTkUgVCBleGNoYW5nZVhvcihVIG9wZXJhbmQs
IHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgeyBy
ZXR1cm4gdmFsdWUuZmV0Y2hfeG9yKG9wZXJhbmQsIG9yZGVyKTsgfQotICAgIAotICAgIEFMV0FZ
U19JTkxJTkUgVCBleGNoYW5nZShUIG5ld1ZhbHVlLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9
IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpIHsgcmV0dXJuIHZhbHVlLmV4Y2hhbmdlKG5ld1Zh
bHVlLCBvcmRlcik7IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgQUxXQVlT
X0lOTElORSBib29sIHRyYW5zYWN0aW9uKGNvbnN0IEZ1bmMmIGZ1bmMsIHN0ZDo6bWVtb3J5X29y
ZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkKLSAgICB7Ci0gICAgICAgIGZv
ciAoOzspIHsKLSAgICAgICAgICAgIFQgb2xkVmFsdWUgPSBsb2FkKHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGF4ZWQpOwotICAgICAgICAgICAgVCBuZXdWYWx1ZSA9IG9sZFZhbHVlOwotICAgICAgICAg
ICAgaWYgKCFmdW5jKG5ld1ZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBpZiAoY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgbmV3VmFsdWUsIG9y
ZGVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgQUxXQVlTX0lOTElORSBib29sIHRyYW5z
YWN0aW9uUmVsYXhlZChjb25zdCBGdW5jJiBmdW5jKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRy
YW5zYWN0aW9uKGZ1bmMsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAgIH0KLQotICAg
IEF0b21pYygpID0gZGVmYXVsdDsKLSAgICBjb25zdGV4cHIgQXRvbWljKFQgaW5pdGlhbCkKLSAg
ICAgICAgOiB2YWx1ZShzdGQ6OmZvcndhcmQ8VD4oaW5pdGlhbCkpCi0gICAgewotICAgIH0KLQot
ICAgIHN0ZDo6YXRvbWljPFQ+IHZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlu
bGluZSBUIGF0b21pY0xvYWQoVCogbG9jYXRpb24sIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0g
c3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkKLXsKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PEF0
b21pYzxUPio+KGxvY2F0aW9uKS0+bG9hZChvcmRlcik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1pbmxpbmUgVCBhdG9taWNMb2FkRnVsbHlGZW5jZWQoVCogbG9jYXRpb24pCi17Ci0gICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxBdG9taWM8VD4qPihsb2NhdGlvbiktPmxvYWRGdWxseUZlbmNl
ZCgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgYXRvbWljU3RvcmUo
VCogbG9jYXRpb24sIFQgbmV3VmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjpt
ZW1vcnlfb3JkZXJfc2VxX2NzdCkKLXsKLSAgICBiaXR3aXNlX2Nhc3Q8QXRvbWljPFQ+Kj4obG9j
YXRpb24pLT5zdG9yZShuZXdWYWx1ZSwgb3JkZXIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotaW5saW5lIHZvaWQgYXRvbWljU3RvcmVGdWxseUZlbmNlZChUKiBsb2NhdGlvbiwgVCBuZXdW
YWx1ZSkKLXsKLSAgICBiaXR3aXNlX2Nhc3Q8QXRvbWljPFQ+Kj4obG9jYXRpb24pLT5zdG9yZUZ1
bGx5RmVuY2VkKG5ld1ZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBi
b29sIGF0b21pY0NvbXBhcmVFeGNoYW5nZVdlYWsoVCogbG9jYXRpb24sIFQgZXhwZWN0ZWQsIFQg
bmV3VmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2Vx
X2NzdCkKLXsKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PEF0b21pYzxUPio+KGxvY2F0aW9uKS0+
Y29tcGFyZUV4Y2hhbmdlV2VhayhleHBlY3RlZCwgbmV3VmFsdWUsIG9yZGVyKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBib29sIGF0b21pY0NvbXBhcmVFeGNoYW5nZVdlYWtS
ZWxheGVkKFQqIGxvY2F0aW9uLCBUIGV4cGVjdGVkLCBUIG5ld1ZhbHVlKQotewotICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8QXRvbWljPFQ+Kj4obG9jYXRpb24pLT5jb21wYXJlRXhjaGFuZ2VXZWFr
UmVsYXhlZChleHBlY3RlZCwgbmV3VmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
aW5saW5lIFQgYXRvbWljQ29tcGFyZUV4Y2hhbmdlU3Ryb25nKFQqIGxvY2F0aW9uLCBUIGV4cGVj
dGVkLCBUIG5ld1ZhbHVlLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29y
ZGVyX3NlcV9jc3QpCi17Ci0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBdG9taWM8VD4qPihsb2Nh
dGlvbiktPmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhleHBlY3RlZCwgbmV3VmFsdWUsIG9yZGVyKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWlubGluZSBUIGF0b21pY0V4
Y2hhbmdlQWRkKFQqIGxvY2F0aW9uLCBVIG9wZXJhbmQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVy
ID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkKLXsKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0
PEF0b21pYzxUPio+KGxvY2F0aW9uKS0+ZXhjaGFuZ2VBZGQob3BlcmFuZCwgb3JkZXIpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotaW5saW5lIFQgYXRvbWljRXhjaGFu
Z2VBbmQoVCogbG9jYXRpb24sIFUgb3BlcmFuZCwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBz
dGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KQotewotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QXRv
bWljPFQ+Kj4obG9jYXRpb24pLT5leGNoYW5nZUFuZChvcGVyYW5kLCBvcmRlcik7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1pbmxpbmUgVCBhdG9taWNFeGNoYW5nZU9y
KFQqIGxvY2F0aW9uLCBVIG9wZXJhbmQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjpt
ZW1vcnlfb3JkZXJfc2VxX2NzdCkKLXsKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PEF0b21pYzxU
Pio+KGxvY2F0aW9uKS0+ZXhjaGFuZ2VPcihvcGVyYW5kLCBvcmRlcik7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1pbmxpbmUgVCBhdG9taWNFeGNoYW5nZVN1YihUKiBs
b2NhdGlvbiwgVSBvcGVyYW5kLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5
X29yZGVyX3NlcV9jc3QpCi17Ci0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBdG9taWM8VD4qPihs
b2NhdGlvbiktPmV4Y2hhbmdlU3ViKG9wZXJhbmQsIG9yZGVyKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWlubGluZSBUIGF0b21pY0V4Y2hhbmdlWG9yKFQqIGxvY2F0
aW9uLCBVIG9wZXJhbmQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3Jk
ZXJfc2VxX2NzdCkKLXsKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PEF0b21pYzxUPio+KGxvY2F0
aW9uKS0+ZXhjaGFuZ2VYb3Iob3BlcmFuZCwgb3JkZXIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotaW5saW5lIFQgYXRvbWljRXhjaGFuZ2UoVCogbG9jYXRpb24sIFQgbmV3VmFsdWUsIHN0
ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkKLXsKLSAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PEF0b21pYzxUPio+KGxvY2F0aW9uKS0+ZXhjaGFuZ2UobmV3
VmFsdWUsIG9yZGVyKTsKLX0KLQotLy8gSnVzdCBhIGNvbXBpbGVyIGZlbmNlLiBIYXMgbm8gZWZm
ZWN0IG9uIHRoZSBoYXJkd2FyZSwgYnV0IHRlbGxzIHRoZSBjb21waWxlcgotLy8gbm90IHRvIG1v
dmUgdGhpbmdzIGFyb3VuZCB0aGlzIGNhbGwuIFNob3VsZCBub3QgYWZmZWN0IHRoZSBjb21waWxl
cidzIGFiaWxpdHkKLS8vIHRvIGRvIHRoaW5ncyBsaWtlIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5k
IGNvZGUgbW90aW9uIG92ZXIgcHVyZSBvcGVyYXRpb25zLgotaW5saW5lIHZvaWQgY29tcGlsZXJG
ZW5jZSgpCi17Ci0jaWYgT1MoV0lORE9XUykgJiYgIUNPTVBJTEVSKEdDQ19PUl9DTEFORykKLSAg
ICBfUmVhZFdyaXRlQmFycmllcigpOwotI2Vsc2UKLSAgICBhc20gdm9sYXRpbGUoIiIgOjo6ICJt
ZW1vcnkiKTsKLSNlbmRpZgotfQotCi0jaWYgQ1BVKEFSTV9USFVNQjIpIHx8IENQVShBUk02NCkK
LQotLy8gRnVsbCBtZW1vcnkgZmVuY2UuIE5vIGFjY2Vzc2VzIHdpbGwgZmxvYXQgYWJvdmUgdGhp
cywgYW5kIG5vIGFjY2Vzc2VzIHdpbGwgc2luawotLy8gYmVsb3cgaXQuCi1pbmxpbmUgdm9pZCBh
cm1fZG1iKCkKLXsKLSAgICBhc20gdm9sYXRpbGUoImRtYiBpc2giIDo6OiAibWVtb3J5Iik7Ci19
Ci0KLS8vIExpa2UgdGhlIGFib3ZlLCBidXQgb25seSBhZmZlY3RzIHN0b3Jlcy4KLWlubGluZSB2
b2lkIGFybV9kbWJfc3QoKQotewotICAgIGFzbSB2b2xhdGlsZSgiZG1iIGlzaHN0IiA6OjogIm1l
bW9yeSIpOwotfQotCi1pbmxpbmUgdm9pZCBhcm1faXNiKCkKLXsKLSAgICBhc20gdm9sYXRpbGUo
ImlzYiIgOjo6ICJtZW1vcnkiKTsKLX0KLQotaW5saW5lIHZvaWQgbG9hZExvYWRGZW5jZSgpIHsg
YXJtX2RtYigpOyB9Ci1pbmxpbmUgdm9pZCBsb2FkU3RvcmVGZW5jZSgpIHsgYXJtX2RtYigpOyB9
Ci1pbmxpbmUgdm9pZCBzdG9yZUxvYWRGZW5jZSgpIHsgYXJtX2RtYigpOyB9Ci1pbmxpbmUgdm9p
ZCBzdG9yZVN0b3JlRmVuY2UoKSB7IGFybV9kbWJfc3QoKTsgfQotaW5saW5lIHZvaWQgbWVtb3J5
QmFycmllckFmdGVyTG9jaygpIHsgYXJtX2RtYigpOyB9Ci1pbmxpbmUgdm9pZCBtZW1vcnlCYXJy
aWVyQmVmb3JlVW5sb2NrKCkgeyBhcm1fZG1iKCk7IH0KLWlubGluZSB2b2lkIGNyb3NzTW9kaWZ5
aW5nQ29kZUZlbmNlKCkgeyBhcm1faXNiKCk7IH0KLQotI2VsaWYgQ1BVKFg4NikgfHwgQ1BVKFg4
Nl82NCkKLQotaW5saW5lIHZvaWQgeDg2X29ydG9wKCkKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAg
IE1lbW9yeUJhcnJpZXIoKTsKLSNlbGlmIENQVShYODZfNjQpCi0gICAgLy8gVGhpcyBoYXMgYWNx
cmVsIHNlbWFudGljcyBhbmQgaXMgbXVjaCBjaGVhcGVyIHRoYW4gbWZlbmNlLiBGb3IgZXhhbXBl
LCBpbiB0aGUgSlNDIEdDLCB1c2luZwotICAgIC8vIG1mZW5jZSBhcyBhIHN0b3JlLWxvYWQgZmVu
Y2Ugd2FzIGEgOSUgc2xvdy1kb3duIG9uIE9jdGFuZS9zcGxheSB3aGlsZSB1c2luZyB0aGlzIHdh
cyBuZXV0cmFsLgotICAgIGFzbSB2b2xhdGlsZSgibG9jazsgb3JsICQwLCAoJSVyc3ApIiA6Ojog
Im1lbW9yeSIpOwotI2Vsc2UKLSAgICBhc20gdm9sYXRpbGUoImxvY2s7IG9ybCAkMCwgKCUlZXNw
KSIgOjo6ICJtZW1vcnkiKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgdm9pZCB4ODZfY3B1aWQoKQot
ewotI2lmIE9TKFdJTkRPV1MpCi0gICAgaW50IGluZm9bNF07Ci0gICAgX19jcHVpZChpbmZvLCAw
KTsKLSNlbGlmIENQVShYODYpCi0gICAgLy8gR0NDIDQuOSBvbiB4ODYgaW4gUElDIG1vZGUgY2Fu
J3QgdXNlICVlYngsIHNvIHdlIGhhdmUgdG8gc2F2ZSBhbmQgcmVzdG9yZSBpdCBtYW51YWxseS4K
LSAgICAvLyBCdXQgc2luY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dCB3aGF0IGNwdWlkIHJldHVybnMg
KHdlIHVzZSBpdCBhcyBhIHNlcmlhbGl6aW5nIGluc3RydWN0aW9uKSwKLSAgICAvLyB3ZSBjYW4g
c2ltcGx5IHRocm93IGF3YXkgd2hhdCBjcHVpZCBwdXQgaW4gJWVieC4KLSAgICBpbnRwdHJfdCBh
ID0gMCwgYywgZDsKLSAgICBhc20gdm9sYXRpbGUoCi0gICAgICAgICJwdXNobCAlJWVieFxuXHQi
Ci0gICAgICAgICJjcHVpZFxuXHQiCi0gICAgICAgICJwb3BsICUlZWJ4XG5cdCIKLSAgICAgICAg
OiAiK2EiKGEpLCAiPWMiKGMpLCAiPWQiKGQpCi0gICAgICAgIDoKLSAgICAgICAgOiAibWVtb3J5
Iik7Ci0jZWxzZQotICAgIGludHB0cl90IGEgPSAwLCBiLCBjLCBkOwotICAgIGFzbSB2b2xhdGls
ZSgKLSAgICAgICAgImNwdWlkIgotICAgICAgICA6ICIrYSIoYSksICI9YiIoYiksICI9YyIoYyks
ICI9ZCIoZCkKLSAgICAgICAgOgotICAgICAgICA6ICJtZW1vcnkiKTsKLSNlbmRpZgotfQotCi1p
bmxpbmUgdm9pZCBsb2FkTG9hZEZlbmNlKCkgeyBjb21waWxlckZlbmNlKCk7IH0KLWlubGluZSB2
b2lkIGxvYWRTdG9yZUZlbmNlKCkgeyBjb21waWxlckZlbmNlKCk7IH0KLWlubGluZSB2b2lkIHN0
b3JlTG9hZEZlbmNlKCkgeyB4ODZfb3J0b3AoKTsgfQotaW5saW5lIHZvaWQgc3RvcmVTdG9yZUZl
bmNlKCkgeyBjb21waWxlckZlbmNlKCk7IH0KLWlubGluZSB2b2lkIG1lbW9yeUJhcnJpZXJBZnRl
ckxvY2soKSB7IGNvbXBpbGVyRmVuY2UoKTsgfQotaW5saW5lIHZvaWQgbWVtb3J5QmFycmllckJl
Zm9yZVVubG9jaygpIHsgY29tcGlsZXJGZW5jZSgpOyB9Ci1pbmxpbmUgdm9pZCBjcm9zc01vZGlm
eWluZ0NvZGVGZW5jZSgpIHsgeDg2X2NwdWlkKCk7IH0KLQotI2Vsc2UKLQotaW5saW5lIHZvaWQg
bG9hZExvYWRGZW5jZSgpIHsgc3RkOjphdG9taWNfdGhyZWFkX2ZlbmNlKHN0ZDo6bWVtb3J5X29y
ZGVyX3NlcV9jc3QpOyB9Ci1pbmxpbmUgdm9pZCBsb2FkU3RvcmVGZW5jZSgpIHsgc3RkOjphdG9t
aWNfdGhyZWFkX2ZlbmNlKHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9Ci1pbmxpbmUgdm9p
ZCBzdG9yZUxvYWRGZW5jZSgpIHsgc3RkOjphdG9taWNfdGhyZWFkX2ZlbmNlKHN0ZDo6bWVtb3J5
X29yZGVyX3NlcV9jc3QpOyB9Ci1pbmxpbmUgdm9pZCBzdG9yZVN0b3JlRmVuY2UoKSB7IHN0ZDo6
YXRvbWljX3RocmVhZF9mZW5jZShzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KTsgfQotaW5saW5l
IHZvaWQgbWVtb3J5QmFycmllckFmdGVyTG9jaygpIHsgc3RkOjphdG9taWNfdGhyZWFkX2ZlbmNl
KHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9Ci1pbmxpbmUgdm9pZCBtZW1vcnlCYXJyaWVy
QmVmb3JlVW5sb2NrKCkgeyBzdGQ6OmF0b21pY190aHJlYWRfZmVuY2Uoc3RkOjptZW1vcnlfb3Jk
ZXJfc2VxX2NzdCk7IH0KLWlubGluZSB2b2lkIGNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCkgeyBz
dGQ6OmF0b21pY190aHJlYWRfZmVuY2Uoc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0gLy8g
UHJvYmFibHkgbm90IHN0cm9uZyBlbm91Z2guCi0KLSNlbmRpZgotCi10eXBlZGVmIHVuc2lnbmVk
IERlcGVuZGVuY3k7Ci0KLUFMV0FZU19JTkxJTkUgRGVwZW5kZW5jeSBudWxsRGVwZW5kZW5jeSgp
Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzaXplb2YoVCkgPT0gOD46OnR5cGUqID0gbnVsbHB0cj4KLUFMV0FZU19J
TkxJTkUgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KFQgdmFsdWUpCi17Ci0gICAgdW5zaWduZWQgZGVw
ZW5kZW5jeTsKLSAgICB1aW50NjRfdCBjb3B5ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1
ZSk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgIC8vIENyZWF0ZSBhIG1hZ2ljYWwgemVybyB2YWx1ZSB0
aHJvdWdoIGlubGluZSBhc3NlbWJseSwgd2hvc2UgY29tcHV0YXRpb24KLSAgICAvLyBpc24ndCB2
aXNpYmxlIHRvIHRoZSBvcHRpbWl6ZXIuIFRoaXMgemVybyBpcyB0aGVuIHVzYWJsZSBhcyBhbiBv
ZmZzZXQgaW4KLSAgICAvLyBmdXJ0aGVyIGFkZHJlc3MgY29tcHV0YXRpb25zOiBhZGRpbmcgemVy
byBkb2VzIG5vdGhpbmcsIGJ1dCB0aGUgY29tcGlsZXIKLSAgICAvLyBkb2Vzbid0IGtub3cgaXQu
IEl0J3MgbWFnaWNhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgYW4gYWRkcmVzcyBkZXBlbmRlbmN5Ci0g
ICAgLy8gZnJvbSB0aGUgbG9hZCBvZiBgbG9jYXRpb25gIHRvIHRoZSB1c2VzIG9mIHRoZSBkZXBl
bmRlbmN5LCB3aGljaCB0cmlnZ2VycwotICAgIC8vIHRoZSBBUk0gSVNBJ3MgYWRkcmVzcyBkZXBl
bmRlbmN5IHJ1bGUsIGEuay5hLiB0aGUgbXl0aGljYWwgQysrIGNvbnN1bWUKLSAgICAvLyBvcmRl
cmluZy4gVGhpcyBmb3JjZXMgd2VhayBtZW1vcnkgb3JkZXIgQ1BVcyB0byBvYnNlcnZlIGBsb2Nh
dGlvbmAgYW5kCi0gICAgLy8gZGVwZW5kZW50IGxvYWRzIGluIHRoZWlyIHN0b3JlIG9yZGVyIHdp
dGhvdXQgdGhlIHJlYWRlciB1c2luZyBhIGJhcnJpZXIKLSAgICAvLyBvciBhbiBhY3F1aXJlIGxv
YWQuCi0gICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3W2luXSwgJXdbaW5dIgotICAgICAg
ICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0gICAgICAgIDogW2luXSAiciIoY29w
eSkpOwotI2VsaWYgQ1BVKEFSTSkKLSAgICBhc20oImVvciAlW2RlcGVuZGVuY3ldLCAlW2luXSwg
JVtpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIoZGVwZW5kZW5jeSkKLSAgICAgICAg
OiBbaW5dICJyIihjb3B5KSk7Ci0jZWxzZQotICAgIC8vIE5vIGRlcGVuZGVuY3kgaXMgbmVlZGVk
IGZvciB0aGlzIGFyY2hpdGVjdHVyZS4KLSAgICBsb2FkTG9hZEZlbmNlKCk7Ci0gICAgZGVwZW5k
ZW5jeSA9IDA7Ci0gICAgVU5VU0VEX1BBUkFNKGNvcHkpOwotI2VuZGlmCi0gICAgcmV0dXJuIGRl
cGVuZGVuY3k7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgYWxtb3N0IGlkZW50aWNhbCB0
byB0aGUgb3RoZXIgZGVwZW5kZW5jeSgpIG92ZXJsb2FkLgotLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQwNQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSA0Pjo6dHlwZSogPSBudWxscHRyPgotQUxX
QVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAgICB1bnNpZ25l
ZCBkZXBlbmRlbmN5OwotICAgIHVpbnQzMl90IGNvcHkgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+
KHZhbHVlKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgYXNtKCJlb3IgJXdbZGVwZW5kZW5jeV0sICV3
W2luXSwgJXdbaW5dIgotICAgICAgICA6IFtkZXBlbmRlbmN5XSAiPXIiKGRlcGVuZGVuY3kpCi0g
ICAgICAgIDogW2luXSAiciIoY29weSkpOwotI2VsaWYgQ1BVKEFSTSkKLSAgICBhc20oImVvciAl
W2RlcGVuZGVuY3ldLCAlW2luXSwgJVtpbl0iCi0gICAgICAgIDogW2RlcGVuZGVuY3ldICI9ciIo
ZGVwZW5kZW5jeSkKLSAgICAgICAgOiBbaW5dICJyIihjb3B5KSk7Ci0jZWxzZQotICAgIGxvYWRM
b2FkRmVuY2UoKTsKLSAgICBkZXBlbmRlbmN5ID0gMDsKLSAgICBVTlVTRURfUEFSQU0oY29weSk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gZGVwZW5kZW5jeTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9PSAyPjo6dHlwZSogPSBudWxs
cHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVuY3koVCB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gZGVwZW5kZW5jeShzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihUKSA9
PSAxPjo6dHlwZSogPSBudWxscHRyPgotQUxXQVlTX0lOTElORSBEZXBlbmRlbmN5IGRlcGVuZGVu
Y3koVCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZGVwZW5kZW5jeShzdGF0aWNfY2FzdDx1aW50MzJf
dD4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBEZXBlbmRlbmN5
V2l0aCB7Ci1wdWJsaWM6Ci0gICAgRGVwZW5kZW5jeVdpdGgoKQotICAgICAgICA6IGRlcGVuZGVu
Y3kobnVsbERlcGVuZGVuY3koKSkKLSAgICAgICAgLCB2YWx1ZSgpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICBEZXBlbmRlbmN5V2l0aChEZXBlbmRlbmN5IGRlcGVuZGVuY3ksIGNvbnN0IFQmIHZh
bHVlKQotICAgICAgICA6IGRlcGVuZGVuY3koZGVwZW5kZW5jeSkKLSAgICAgICAgLCB2YWx1ZSh2
YWx1ZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIERlcGVuZGVuY3kgZGVwZW5kZW5jeTsKLSAg
ICBUIHZhbHVlOwotfTsKLSAgICAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgRGVwZW5k
ZW5jeVdpdGg8VD4gZGVwZW5kZW5jeVdpdGgoRGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBjb25zdCBU
JiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gRGVwZW5kZW5jeVdpdGg8VD4oZGVwZW5kZW5jeSwgdmFs
dWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQqIGNvbnN1bWUoVCogcG9p
bnRlciwgRGVwZW5kZW5jeSBkZXBlbmRlbmN5KQotewotI2lmIENQVShBUk02NCkgfHwgQ1BVKEFS
TSkKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHBvaW50
ZXIpICsgZGVwZW5kZW5jeSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkZXBlbmRlbmN5KTsK
LSAgICByZXR1cm4gcG9pbnRlcjsKLSNlbmRpZgotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBGdW5jPgotQUxXQVlTX0lOTElORSBUJiBlbnN1cmVQb2ludGVyKEF0b21pYzxUKj4m
IHBvaW50ZXIsIGNvbnN0IEZ1bmMmIGZ1bmMpCi17Ci0gICAgZm9yICg7OykgewotICAgICAgICBU
KiBvbGRWYWx1ZSA9IHBvaW50ZXIubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAg
ICAgICAgaWYgKG9sZFZhbHVlKSB7Ci0gICAgICAgICAgICAvLyBPbiBhbGwgc2Vuc2libGUgQ1BV
cywgd2UgZ2V0IGFuIGltcGxpY2l0IGRlcGVuZGVuY3ktYmFzZWQgbG9hZC1sb2FkIGJhcnJpZXIg
d2hlbgotICAgICAgICAgICAgLy8gbG9hZGluZyB0aGlzLgotICAgICAgICAgICAgcmV0dXJuICpv
bGRWYWx1ZTsKLSAgICAgICAgfQotICAgICAgICBUKiBuZXdWYWx1ZSA9IGZ1bmMoKTsKLSAgICAg
ICAgaWYgKHBvaW50ZXIuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgbmV3VmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuICpuZXdWYWx1ZTsKLSAgICAgICAgZGVsZXRlIG5ld1ZhbHVlOwot
ICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6QXRvbWljOwotdXNp
bmcgV1RGOjpEZXBlbmRlbmN5OwotdXNpbmcgV1RGOjpEZXBlbmRlbmN5V2l0aDsKLXVzaW5nIFdU
Rjo6Y29uc3VtZTsKLXVzaW5nIFdURjo6ZGVwZW5kZW5jeTsKLXVzaW5nIFdURjo6ZGVwZW5kZW5j
eVdpdGg7Ci11c2luZyBXVEY6OmVuc3VyZVBvaW50ZXI7Ci11c2luZyBXVEY6Om51bGxEZXBlbmRl
bmN5OwotCi0jZW5kaWYgLy8gQXRvbWljc19oCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3OThkNmYwN2NkMGFlNmJiZmZjODA5YjEwZmYxZGFjOGNhYjkzYTI0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oCisrKyAvZGV2L251bGwKQEAg
LTEsODUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2lmbmRlZiBDaGVja2VkQXJpdGhtZXRpY19oCi0jZGVmaW5lIENoZWNrZWRBcml0aG1l
dGljX2gKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNpbmNsdWRlIDxsaW1pdHM+
Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0KLS8qIENoZWNr
ZWQ8VD4KLSAqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIHBlcmZvcm0g
b3ZlcmZsb3ctc2FmZSBpbnRlZ2VyIGFyaXRobWV0aWMKLSAqIHdpdGhvdXQgaGF2aW5nIHRvIG1h
bnVhbGx5IGVuc3VyZSB0aGF0IHlvdSBoYXZlIGFsbCB0aGUgcmVxdWlyZWQgYm91bmRzIGNoZWNr
cwotICogZGlyZWN0bHkgaW4geW91ciBjb2RlLgotICoKLSAqIFRoZXJlIGFyZSB0d28gbW9kZXMg
b2Ygb3BlcmF0aW9uOgotICogIC0gVGhlIGRlZmF1bHQgaXMgQ2hlY2tlZDxULCBDcmFzaE9uT3Zl
cmZsb3c+LCBhbmQgY3Jhc2hlcyBhdCB0aGUgcG9pbnQKLSAqICAgIGFuZCBvdmVyZmxvdyBoYXMg
b2NjdXJyZWQuCi0gKiAgLSBUaGUgYWx0ZXJuYXRpdmUgaXMgQ2hlY2tlZDxULCBSZWNvcmRPdmVy
Zmxvdz4sIHdoaWNoIHVzZXMgYW4gYWRkaXRpb25hbAotICogICAgYnl0ZSBvZiBzdG9yYWdlIHRv
IHRyYWNrIHdoZXRoZXIgYW4gb3ZlcmZsb3cgaGFzIG9jY3VycmVkLCBzdWJzZXF1ZW50Ci0gKiAg
ICB1bmNoZWNrZWQgb3BlcmF0aW9ucyB3aWxsIGNyYXNoIGlmIGFuIG92ZXJmbG93IGhhcyBvY2N1
cmVkCi0gKgotICogSXQgaXMgcG9zc2libGUgdG8gcHJvdmlkZSBhIGN1c3RvbSBvdmVyZmxvdyBo
YW5kbGVyLCBpbiB3aGljaCBjYXNlIHlvdSBuZWVkCi0gKiB0byBzdXBwb3J0IHRoZXNlIGZ1bmN0
aW9uczoKLSAqICAtIHZvaWQgb3ZlcmZsb3dlZCgpOwotICogICAgVGhpcyBmdW5jdGlvbiBpcyBj
YWxsZWQgd2hlbiBhbiBvcGVyYXRpb24gaGFzIHByb2R1Y2VkIGFuIG92ZXJmbG93LgotICogIC0g
Ym9vbCBoYXNPdmVyZmxvd2VkKCk7Ci0gKiAgICBUaGlzIGZ1bmN0aW9uIG11c3QgcmV0dXJuIHRy
dWUgaWYgb3ZlcmZsb3dlZCgpIGhhcyBiZWVuIGNhbGxlZCBvbiBhbgotICogICAgaW5zdGFuY2Ug
YW5kIGZhbHNlIGlmIGl0IGhhcyBub3QuCi0gKiAgLSB2b2lkIGNsZWFyT3ZlcmZsb3coKTsKLSAq
ICAgIFVzZWQgdG8gcmVzZXQgb3ZlcmZsb3cgdHJhY2tpbmcgd2hlbiBhIHZhbHVlIGlzIGJlaW5n
IG92ZXJ3cml0dGVuIHdpdGgKLSAqICAgIGEgbmV3IHZhbHVlLgotICoKLSAqIENoZWNrZWQ8VD4g
d29ya3MgZm9yIGFsbCBpbnRlZ2VyIHR5cGVzLCB3aXRoIHRoZSBmb2xsb3dpbmcgY2F2ZWF0czoK
LSAqICAtIE1peGluZyBzaWduZWRuZXNzIG9mIG9wZXJhbmRzIGlzIG9ubHkgc3VwcG9ydGVkIGZv
ciB0eXBlcyBuYXJyb3dlciB0aGFuCi0gKiAgICA2NGJpdHMuCi0gKiAgLSBJdCBkb2VzIGhhdmUg
YSBwZXJmb3JtYW5jZSBpbXBhY3QsIHNvIHRpZ2h0IGxvb3BzIG1heSB3YW50IHRvIGJlIGNhcmVm
dWwKLSAqICAgIHdoZW4gdXNpbmcgaXQuCi0gKgotICovCi0KLW5hbWVzcGFjZSBXVEYgewotCi1l
bnVtIGNsYXNzIENoZWNrZWRTdGF0ZSB7Ci0gICAgRGlkT3ZlcmZsb3csCi0gICAgRGlkTm90T3Zl
cmZsb3cKLX07Ci0KLWNsYXNzIENyYXNoT25PdmVyZmxvdyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBvdmVyZmxvd2VkKCkKLSAgICB7Ci0gICAgICAg
IGNyYXNoKCk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhck92ZXJmbG93KCkgeyB9Ci0KLSAgICBz
dGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGNyYXNoKCkKLSAgICB7Ci0gICAgICAg
IENSQVNIKCk7Ci0gICAgfQotCi1wdWJsaWM6Ci0gICAgYm9vbCBoYXNPdmVyZmxvd2VkKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLX07Ci0KLWNsYXNzIFJlY29yZE92ZXJmbG93IHsKLXByb3Rl
Y3RlZDoKLSAgICBSZWNvcmRPdmVyZmxvdygpCi0gICAgICAgIDogbV9vdmVyZmxvd2VkKGZhbHNl
KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIG92ZXJmbG93ZWQoKQotICAgIHsKLSAgICAgICAg
bV9vdmVyZmxvd2VkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyT3ZlcmZsb3coKQot
ICAgIHsKLSAgICAgICAgbV9vdmVyZmxvd2VkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgc3RhdGlj
IE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBjcmFzaCgpCi0gICAgewotICAgICAgICBDUkFT
SCgpOwotICAgIH0KLQotcHVibGljOgotICAgIGJvb2wgaGFzT3ZlcmZsb3dlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fb3ZlcmZsb3dlZDsgfQotCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIGNoYXIgbV9v
dmVyZmxvd2VkOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGNsYXNzIE92ZXJmbG93SGFu
ZGxlciA9IENyYXNoT25PdmVyZmxvdz4gY2xhc3MgQ2hlY2tlZDsKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
UmVtb3ZlQ2hlY2tlZDxDaGVja2VkPFQ+PjsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFRhcmdldCwg
dHlwZW5hbWUgU291cmNlLCBib29sIGlzVGFyZ2V0QmlnZ2VyID0gc2l6ZW9mKFRhcmdldCkgPj0g
c2l6ZW9mKFNvdXJjZSksIGJvb2wgdGFyZ2V0U2lnbmVkID0gc3RkOjpudW1lcmljX2xpbWl0czxU
YXJnZXQ+Ojppc19zaWduZWQsIGJvb2wgc291cmNlU2lnbmVkID0gc3RkOjpudW1lcmljX2xpbWl0
czxTb3VyY2U+Ojppc19zaWduZWQ+IHN0cnVjdCBCb3VuZHNDaGVja2VyOwotdGVtcGxhdGUgPHR5
cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlPiBzdHJ1Y3QgQm91bmRzQ2hlY2tlcjxUYXJn
ZXQsIFNvdXJjZSwgZmFsc2UsIGZhbHNlLCBmYWxzZT4gewotICAgIHN0YXRpYyBib29sIGluQm91
bmRzKFNvdXJjZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIC8vIFNhbWUgc2lnbmVkbmVzcyBzbyBp
bXBsaWNpdCB0eXBlIGNvbnZlcnNpb24gd2lsbCBhbHdheXMgaW5jcmVhc2UgcHJlY2lzaW9uIHRv
IHdpZGVzdCB0eXBlLgotICAgICAgICByZXR1cm4gdmFsdWUgPD0gc3RkOjpudW1lcmljX2xpbWl0
czxUYXJnZXQ+OjptYXgoKTsKLSAgICB9Ci19OwotdGVtcGxhdGUgPHR5cGVuYW1lIFRhcmdldCwg
dHlwZW5hbWUgU291cmNlPiBzdHJ1Y3QgQm91bmRzQ2hlY2tlcjxUYXJnZXQsIFNvdXJjZSwgZmFs
c2UsIHRydWUsIHRydWU+IHsKLSAgICBzdGF0aWMgYm9vbCBpbkJvdW5kcyhTb3VyY2UgdmFsdWUp
Ci0gICAgewotICAgICAgICAvLyBTYW1lIHNpZ25lZG5lc3Mgc28gaW1wbGljaXQgdHlwZSBjb252
ZXJzaW9uIHdpbGwgYWx3YXlzIGluY3JlYXNlIHByZWNpc2lvbiB0byB3aWRlc3QgdHlwZS4KLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VGFyZ2V0Pjo6bWluKCkgPD0gdmFsdWUg
JiYgdmFsdWUgPD0gc3RkOjpudW1lcmljX2xpbWl0czxUYXJnZXQ+OjptYXgoKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+IHN0cnVjdCBC
b3VuZHNDaGVja2VyPFRhcmdldCwgU291cmNlLCBmYWxzZSwgZmFsc2UsIHRydWU+IHsKLSAgICBz
dGF0aWMgYm9vbCBpbkJvdW5kcyhTb3VyY2UgdmFsdWUpCi0gICAgewotICAgICAgICAvLyBXaGVu
IGNvbnZlcnRpbmcgdmFsdWUgdG8gdW5zaWduZWQgU291cmNlLCB2YWx1ZSB3aWxsIGJlY29tZSBh
IGJpZyB2YWx1ZSBpZiB2YWx1ZSBpcyBuZWdhdGl2ZS4KLSAgICAgICAgLy8gQ2FzdGVkIHZhbHVl
IHdpbGwgYmVjb21lIGJpZ2dlciB0aGFuIFRhcmdldDo6bWF4IGFzIFNvdXJjZSBpcyBiaWdnZXIg
dGhhbiBUYXJnZXQuCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdGQ6Om1h
a2VfdW5zaWduZWQ8U291cmNlPjo6dHlwZT4odmFsdWUpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8
VGFyZ2V0Pjo6bWF4KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFRhcmdldCwg
dHlwZW5hbWUgU291cmNlPiBzdHJ1Y3QgQm91bmRzQ2hlY2tlcjxUYXJnZXQsIFNvdXJjZSwgZmFs
c2UsIHRydWUsIGZhbHNlPiB7Ci0gICAgc3RhdGljIGJvb2wgaW5Cb3VuZHMoU291cmNlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgLy8gVGhlIHVuc2lnbmVkIFNvdXJjZSB0eXBlIGhhcyBncmVhdGVy
IHByZWNpc2lvbiB0aGFuIHRoZSB0YXJnZXQgc28gbWF4KFRhcmdldCkgLT4gU291cmNlIHdpbGwg
d2lkZW4uCi0gICAgICAgIHJldHVybiB2YWx1ZSA8PSBzdGF0aWNfY2FzdDxTb3VyY2U+KHN0ZDo6
bnVtZXJpY19saW1pdHM8VGFyZ2V0Pjo6bWF4KCkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrZXI8VGFy
Z2V0LCBTb3VyY2UsIHRydWUsIGZhbHNlLCBmYWxzZT4gewotICAgIHN0YXRpYyBib29sIGluQm91
bmRzKFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIC8vIFNhbWUgc2lnbiwgZ3JlYXRlciBvciBzYW1l
IHByZWNpc2lvbi4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlPiBzdHJ1Y3QgQm91bmRzQ2hlY2tlcjxU
YXJnZXQsIFNvdXJjZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZT4gewotICAgIHN0YXRpYyBib29sIGluQm91
bmRzKFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIC8vIFNhbWUgc2lnbiwgZ3JlYXRlciBvciBzYW1l
IHByZWNpc2lvbi4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlPiBzdHJ1Y3QgQm91bmRzQ2hlY2tlcjxU
YXJnZXQsIFNvdXJjZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2U+IHsKLSAgICBzdGF0aWMgYm9vbCBpbkJv
dW5kcyhTb3VyY2UgdmFsdWUpCi0gICAgewotICAgICAgICAvLyBUYXJnZXQgaXMgc2lnbmVkIHdp
dGggZ3JlYXRlciBvciBzYW1lIHByZWNpc2lvbi4gSWYgc3RyaWN0bHkgZ3JlYXRlciwgaXQgaXMg
YWx3YXlzIHNhZmUuCi0gICAgICAgIGlmIChzaXplb2YoVGFyZ2V0KSA+IHNpemVvZihTb3VyY2Up
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA8PSBzdGF0
aWNfY2FzdDxTb3VyY2U+KHN0ZDo6bnVtZXJpY19saW1pdHM8VGFyZ2V0Pjo6bWF4KCkpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3Ry
dWN0IEJvdW5kc0NoZWNrZXI8VGFyZ2V0LCBTb3VyY2UsIHRydWUsIGZhbHNlLCB0cnVlPiB7Ci0g
ICAgc3RhdGljIGJvb2wgaW5Cb3VuZHMoU291cmNlIHZhbHVlKQotICAgIHsKLSAgICAgICAgLy8g
VGFyZ2V0IGlzIHVuc2lnbmVkIHdpdGggZ3JlYXRlciBwcmVjaXNpb24uCi0gICAgICAgIHJldHVy
biB2YWx1ZSA+PSAwOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5
cGVuYW1lIFNvdXJjZT4gc3RhdGljIGlubGluZSBib29sIGlzSW5Cb3VuZHMoU291cmNlIHZhbHVl
KQotewotICAgIHJldHVybiBCb3VuZHNDaGVja2VyPFRhcmdldCwgU291cmNlPjo6aW5Cb3VuZHMo
dmFsdWUpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+
IHN0YXRpYyBpbmxpbmUgYm9vbCBjb252ZXJ0U2FmZWx5KFNvdXJjZSBpbnB1dCwgVGFyZ2V0JiBv
dXRwdXQpCi17Ci0gICAgaWYgKCFpc0luQm91bmRzPFRhcmdldD4oaW5wdXQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8VGFyZ2V0PihpbnB1dCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3Zl
Q2hlY2tlZCB7Ci0gICAgdHlwZWRlZiBUIENsZWFuVHlwZTsKLSAgICBzdGF0aWMgY29uc3QgQ2xl
YW5UeXBlIERlZmF1bHRWYWx1ZSA9IDA7ICAgIAotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IHN0cnVjdCBSZW1vdmVDaGVja2VkPENoZWNrZWQ8VCwgQ3Jhc2hPbk92ZXJmbG93Pj4gewotICAg
IHR5cGVkZWYgdHlwZW5hbWUgUmVtb3ZlQ2hlY2tlZDxUPjo6Q2xlYW5UeXBlIENsZWFuVHlwZTsK
LSAgICBzdGF0aWMgY29uc3QgQ2xlYW5UeXBlIERlZmF1bHRWYWx1ZSA9IDA7Ci19OwotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IFJlbW92ZUNoZWNrZWQ8Q2hlY2tlZDxULCBSZWNvcmRP
dmVyZmxvdz4+IHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFJlbW92ZUNoZWNrZWQ8VD46OkNsZWFu
VHlwZSBDbGVhblR5cGU7Ci0gICAgc3RhdGljIGNvbnN0IENsZWFuVHlwZSBEZWZhdWx0VmFsdWUg
PSAwOwotfTsKLQotLy8gVGhlIFJlc3VsdEJhc2UgYW5kIFNpZ25lZG5lc3NTZWxlY3RvciBhcmUg
dXNlZCB0byB3b3JrYXJvdW5kIHR5cGVvZiBub3QgYmVpbmcKLS8vIGF2YWlsYWJsZSBpbiBNU1ZD
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgYm9vbCB1SXNCaWdnZXIgPSAoc2l6
ZW9mKFUpID4gc2l6ZW9mKFYpKSwgYm9vbCBzYW1lU2l6ZSA9IChzaXplb2YoVSkgPT0gc2l6ZW9m
KFYpKT4gc3RydWN0IFJlc3VsdEJhc2U7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4gc3RydWN0IFJlc3VsdEJhc2U8VSwgViwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0eXBlZGVmIFUg
UmVzdWx0VHlwZTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1
Y3QgUmVzdWx0QmFzZTxVLCBWLCBmYWxzZSwgZmFsc2U+IHsKLSAgICB0eXBlZGVmIFYgUmVzdWx0
VHlwZTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBVPiBzdHJ1Y3QgUmVzdWx0QmFzZTxVLCBV
LCBmYWxzZSwgdHJ1ZT4gewotICAgIHR5cGVkZWYgVSBSZXN1bHRUeXBlOwotfTsKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIGJvb2wgdUlzU2lnbmVkID0gc3RkOjpudW1lcmlj
X2xpbWl0czxVPjo6aXNfc2lnbmVkLCBib29sIHZJc1NpZ25lZCA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8Vj46OmlzX3NpZ25lZD4gc3RydWN0IFNpZ25lZG5lc3NTZWxlY3RvcjsKLXRlbXBsYXRlIDx0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgU2lnbmVkbmVzc1NlbGVjdG9yPFUsIFYsIHRy
dWUsIHRydWU+IHsKLSAgICB0eXBlZGVmIFUgUmVzdWx0VHlwZTsKLX07Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgU2lnbmVkbmVzc1NlbGVjdG9yPFUsIFYsIGZh
bHNlLCBmYWxzZT4gewotICAgIHR5cGVkZWYgVSBSZXN1bHRUeXBlOwotfTsKLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0cnVjdCBTaWduZWRuZXNzU2VsZWN0b3I8VSwgViwg
dHJ1ZSwgZmFsc2U+IHsKLSAgICB0eXBlZGVmIFYgUmVzdWx0VHlwZTsKLX07Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgU2lnbmVkbmVzc1NlbGVjdG9yPFUsIFYs
IGZhbHNlLCB0cnVlPiB7Ci0gICAgdHlwZWRlZiBVIFJlc3VsdFR5cGU7Ci19OwotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3RydWN0IFJlc3VsdEJhc2U8VSwgViwgZmFsc2Us
IHRydWU+IHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFNpZ25lZG5lc3NTZWxlY3RvcjxVLCBWPjo6
UmVzdWx0VHlwZSBSZXN1bHRUeXBlOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+IHN0cnVjdCBSZXN1bHQgOiBSZXN1bHRCYXNlPHR5cGVuYW1lIFJlbW92ZUNoZWNrZWQ8
VT46OkNsZWFuVHlwZSwgdHlwZW5hbWUgUmVtb3ZlQ2hlY2tlZDxWPjo6Q2xlYW5UeXBlPiB7Ci19
OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTEhTLCB0eXBlbmFtZSBSSFMsIHR5cGVuYW1lIFJlc3Vs
dFR5cGUgPSB0eXBlbmFtZSBSZXN1bHQ8TEhTLCBSSFM+OjpSZXN1bHRUeXBlLCAKLSAgICBib29s
IGxoc1NpZ25lZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8TEhTPjo6aXNfc2lnbmVkLCBib29sIHJo
c1NpZ25lZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8UkhTPjo6aXNfc2lnbmVkPiBzdHJ1Y3QgQXJp
dGhtZXRpY09wZXJhdGlvbnM7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBMSFMsIHR5cGVuYW1lIFJI
UywgdHlwZW5hbWUgUmVzdWx0VHlwZT4gc3RydWN0IEFyaXRobWV0aWNPcGVyYXRpb25zPExIUywg
UkhTLCBSZXN1bHRUeXBlLCB0cnVlLCB0cnVlPiB7Ci0gICAgLy8gTEhTIGFuZCBSSFMgYXJlIHNp
Z25lZCB0eXBlcwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uCi0gICAgc3RhdGljIGlubGluZSBi
b29sIHNpZ25zTWF0Y2goTEhTIGxocywgUkhTIHJocykKLSAgICB7Ci0gICAgICAgIHJldHVybiAo
bGhzIF4gcmhzKSA+PSAwOwotICAgIH0KLQotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBhZGQoTEhT
IGxocywgUkhTIHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KSBXQVJOX1VOVVNFRF9SRVRVUk4KLSAg
ICB7Ci0gICAgICAgIGlmIChzaWduc01hdGNoKGxocywgcmhzKSkgewotICAgICAgICAgICAgaWYg
KGxocyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChzdGQ6Om51bWVyaWNfbGltaXRzPFJl
c3VsdFR5cGU+OjptYXgoKSAtIHJocykgPCBsaHMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgUmVzdWx0VHlw
ZSB0ZW1wID0gbGhzIC0gc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWluKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHJocyA8IC10ZW1wKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gLy8gaWYgdGhlIHNpZ25zIGRvIG5v
dCBtYXRjaCB0aGlzIG9wZXJhdGlvbiBjYW4ndCBvdmVyZmxvdwotICAgICAgICByZXN1bHQgPSBs
aHMgKyByaHM7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHN0YXRpYyBpbmxp
bmUgYm9vbCBzdWIoTEhTIGxocywgUkhTIHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KSBXQVJOX1VO
VVNFRF9SRVRVUk4KLSAgICB7Ci0gICAgICAgIGlmICghc2lnbnNNYXRjaChsaHMsIHJocykpIHsK
LSAgICAgICAgICAgIGlmIChsaHMgPj0gMCkgewotICAgICAgICAgICAgICAgIGlmIChsaHMgPiBz
dGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptYXgoKSArIHJocykKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBpZiAocmhzID4gc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWF4KCkgKyBs
aHMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSAvLyBpZiB0aGUgc2lnbnMgbWF0Y2ggdGhpcyBvcGVyYXRpb24gY2FuJ3Qgb3ZlcmZs
b3cKLSAgICAgICAgcmVzdWx0ID0gbGhzIC0gcmhzOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgbXVsdGlwbHkoTEhTIGxocywgUkhTIHJocywg
UmVzdWx0VHlwZSYgcmVzdWx0KSBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICB7Ci0gICAgICAgIGlm
IChzaWduc01hdGNoKGxocywgcmhzKSkgewotICAgICAgICAgICAgaWYgKGxocyA+PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGxocyAmJiAoc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBl
Pjo6bWF4KCkgLyBsaHMpIDwgcmhzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxS
ZXN1bHRUeXBlPihsaHMpID09IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1pbigp
IHx8IHN0YXRpY19jYXN0PFJlc3VsdFR5cGU+KHJocykgPT0gc3RkOjpudW1lcmljX2xpbWl0czxS
ZXN1bHRUeXBlPjo6bWluKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICBpZiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1heCgp
IC8gLWxocykgPCAtcmhzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobGhzIDwgMCkgewot
ICAgICAgICAgICAgICAgIGlmIChyaHMgJiYgbGhzIDwgKHN0ZDo6bnVtZXJpY19saW1pdHM8UmVz
dWx0VHlwZT46Om1pbigpIC8gcmhzKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobGhzICYmIHJocyA8
IChzdGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptaW4oKSAvIGxocykpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICByZXN1bHQgPSBsaHMgKiByaHM7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbHMoTEhTIGxocywgUkhTIHJocykgeyByZXR1cm4g
bGhzID09IHJoczsgfQotCi19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTEhTLCB0eXBlbmFtZSBS
SFMsIHR5cGVuYW1lIFJlc3VsdFR5cGU+IHN0cnVjdCBBcml0aG1ldGljT3BlcmF0aW9uczxMSFMs
IFJIUywgUmVzdWx0VHlwZSwgZmFsc2UsIGZhbHNlPiB7Ci0gICAgLy8gTEhTIGFuZCBSSFMgYXJl
IHVuc2lnbmVkIHR5cGVzIHNvIGJvdW5kcyBjaGVja3MgYXJlIG5pY2UgYW5kIGVhc3kKLSAgICBz
dGF0aWMgaW5saW5lIGJvb2wgYWRkKExIUyBsaHMsIFJIUyByaHMsIFJlc3VsdFR5cGUmIHJlc3Vs
dCkgV0FSTl9VTlVTRURfUkVUVVJOCi0gICAgewotICAgICAgICBSZXN1bHRUeXBlIHRlbXAgPSBs
aHMgKyByaHM7Ci0gICAgICAgIGlmICh0ZW1wIDwgbGhzKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICByZXN1bHQgPSB0ZW1wOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgc3ViKExIUyBsaHMsIFJIUyByaHMsIFJlc3VsdFR5
cGUmIHJlc3VsdCkgV0FSTl9VTlVTRURfUkVUVVJOCi0gICAgewotICAgICAgICBSZXN1bHRUeXBl
IHRlbXAgPSBsaHMgLSByaHM7Ci0gICAgICAgIGlmICh0ZW1wID4gbGhzKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQgPSB0ZW1wOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgbXVsdGlwbHkoTEhTIGxocywgUkhT
IHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KSBXQVJOX1VOVVNFRF9SRVRVUk4KLSAgICB7Ci0gICAg
ICAgIGlmICghbGhzIHx8ICFyaHMpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xp
bWl0czxSZXN1bHRUeXBlPjo6bWF4KCkgLyBsaHMgPCByaHMpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHJlc3VsdCA9IGxocyAqIHJoczsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgc3RhdGljIGlubGluZSBib29sIGVxdWFscyhMSFMgbGhzLCBSSFMgcmhz
KSB7IHJldHVybiBsaHMgPT0gcmhzOyB9Ci0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBSZXN1
bHRUeXBlPiBzdHJ1Y3QgQXJpdGhtZXRpY09wZXJhdGlvbnM8aW50LCB1bnNpZ25lZCwgUmVzdWx0
VHlwZSwgdHJ1ZSwgZmFsc2U+IHsKLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgYWRkKGludDY0X3Qg
bGhzLCBpbnQ2NF90IHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KQotICAgIHsKLSAgICAgICAgaW50
NjRfdCB0ZW1wID0gbGhzICsgcmhzOwotICAgICAgICBpZiAodGVtcCA8IHN0ZDo6bnVtZXJpY19s
aW1pdHM8UmVzdWx0VHlwZT46Om1pbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBpZiAodGVtcCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1heCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxS
ZXN1bHRUeXBlPih0ZW1wKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAg
IHN0YXRpYyBpbmxpbmUgYm9vbCBzdWIoaW50NjRfdCBsaHMsIGludDY0X3QgcmhzLCBSZXN1bHRU
eXBlJiByZXN1bHQpCi0gICAgewotICAgICAgICBpbnQ2NF90IHRlbXAgPSBsaHMgLSByaHM7Ci0g
ICAgICAgIGlmICh0ZW1wIDwgc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWluKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0ZW1wID4gc3RkOjpudW1l
cmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWF4KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PFJlc3VsdFR5cGU+KHRlbXApOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgbXVsdGlwbHko
aW50NjRfdCBsaHMsIGludDY0X3QgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpCi0gICAgewotICAg
ICAgICBpbnQ2NF90IHRlbXAgPSBsaHMgKiByaHM7Ci0gICAgICAgIGlmICh0ZW1wIDwgc3RkOjpu
dW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWluKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmICh0ZW1wID4gc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6
bWF4KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdCA9IHN0YXRp
Y19jYXN0PFJlc3VsdFR5cGU+KHRlbXApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWxzKGludCBsaHMsIHVuc2lnbmVkIHJocykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ2NF90PihsaHMpID09IHN0YXRpY19j
YXN0PGludDY0X3Q+KHJocyk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFJlc3Vs
dFR5cGU+IHN0cnVjdCBBcml0aG1ldGljT3BlcmF0aW9uczx1bnNpZ25lZCwgaW50LCBSZXN1bHRU
eXBlLCBmYWxzZSwgdHJ1ZT4gewotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBhZGQoaW50NjRfdCBs
aHMsIGludDY0X3QgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpCi0gICAgewotICAgICAgICByZXR1
cm4gQXJpdGhtZXRpY09wZXJhdGlvbnM8aW50LCB1bnNpZ25lZCwgUmVzdWx0VHlwZT46OmFkZChy
aHMsIGxocywgcmVzdWx0KTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGlubGluZSBib29sIHN1
YihpbnQ2NF90IGxocywgaW50NjRfdCByaHMsIFJlc3VsdFR5cGUmIHJlc3VsdCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBBcml0aG1ldGljT3BlcmF0aW9uczxpbnQsIHVuc2lnbmVkLCBSZXN1bHRU
eXBlPjo6c3ViKGxocywgcmhzLCByZXN1bHQpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbmxpbmUg
Ym9vbCBtdWx0aXBseShpbnQ2NF90IGxocywgaW50NjRfdCByaHMsIFJlc3VsdFR5cGUmIHJlc3Vs
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBBcml0aG1ldGljT3BlcmF0aW9uczxpbnQsIHVuc2ln
bmVkLCBSZXN1bHRUeXBlPjo6bXVsdGlwbHkocmhzLCBsaHMsIHJlc3VsdCk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGlubGluZSBib29sIGVxdWFscyh1bnNpZ25lZCBsaHMsIGludCByaHMpCi0gICAg
ewotICAgICAgICByZXR1cm4gQXJpdGhtZXRpY09wZXJhdGlvbnM8aW50LCB1bnNpZ25lZCwgUmVz
dWx0VHlwZT46OmVxdWFscyhyaHMsIGxocyk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFI+IHN0YXRpYyBpbmxpbmUgYm9vbCBzYWZlQWRk
KFUgbGhzLCBWIHJocywgUiYgcmVzdWx0KQotewotICAgIHJldHVybiBBcml0aG1ldGljT3BlcmF0
aW9uczxVLCBWLCBSPjo6YWRkKGxocywgcmhzLCByZXN1bHQpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgUj4gc3RhdGljIGlubGluZSBib29sIHNhZmVT
dWIoVSBsaHMsIFYgcmhzLCBSJiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIEFyaXRobWV0aWNPcGVy
YXRpb25zPFUsIFYsIFI+OjpzdWIobGhzLCByaHMsIHJlc3VsdCk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBSPiBzdGF0aWMgaW5saW5lIGJvb2wgc2Fm
ZU11bHRpcGx5KFUgbGhzLCBWIHJocywgUiYgcmVzdWx0KQotewotICAgIHJldHVybiBBcml0aG1l
dGljT3BlcmF0aW9uczxVLCBWLCBSPjo6bXVsdGlwbHkobGhzLCByaHMsIHJlc3VsdCk7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgaW5saW5lIGJvb2wgc2Fm
ZUVxdWFscyhVIGxocywgViByaHMpCi17Ci0gICAgcmV0dXJuIEFyaXRobWV0aWNPcGVyYXRpb25z
PFUsIFY+OjplcXVhbHMobGhzLCByaHMpOwotfQotCi1lbnVtIFJlc3VsdE92ZXJmbG93ZWRUYWcg
eyBSZXN1bHRPdmVyZmxvd2VkIH07Ci0gICAgCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgY2xhc3Mg
T3ZlcmZsb3dIYW5kbGVyPiBjbGFzcyBDaGVja2VkIDogcHVibGljIE92ZXJmbG93SGFuZGxlciB7
Ci1wdWJsaWM6Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9ULCBjbGFzcyBfT3ZlcmZsb3dIYW5k
bGVyPiBmcmllbmQgY2xhc3MgQ2hlY2tlZDsKLSAgICBDaGVja2VkKCkKLSAgICAgICAgOiBtX3Zh
bHVlKDApCi0gICAgewotICAgIH0KLQotICAgIENoZWNrZWQoUmVzdWx0T3ZlcmZsb3dlZFRhZykK
LSAgICAgICAgOiBtX3ZhbHVlKDApCi0gICAgewotICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IENoZWNrZWQoVSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIGlmICghaXNJbkJvdW5kczxUPih2YWx1ZSkpCi0gICAgICAgICAgICB0aGlz
LT5vdmVyZmxvd2VkKCk7Ci0gICAgICAgIG1fdmFsdWUgPSBzdGF0aWNfY2FzdDxUPih2YWx1ZSk7
Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWPiBDaGVja2VkKGNvbnN0IENo
ZWNrZWQ8VCwgVj4mIHJocykKLSAgICAgICAgOiBtX3ZhbHVlKHJocy5tX3ZhbHVlKQotICAgIHsK
LSAgICAgICAgaWYgKHJocy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICB0aGlzLT5vdmVy
Zmxvd2VkKCk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBDaGVja2Vk
KGNvbnN0IENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmhzKQotICAgICAgICA6IE92ZXJm
bG93SGFuZGxlcihyaHMpCi0gICAgewotICAgICAgICBpZiAoIWlzSW5Cb3VuZHM8VD4ocmhzLm1f
dmFsdWUpKQotICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOwotICAgICAgICBtX3ZhbHVl
ID0gc3RhdGljX2Nhc3Q8VD4ocmhzLm1fdmFsdWUpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gQ2hlY2tlZChjb25zdCBDaGVja2VkPFUsIFY+JiBy
aHMpCi0gICAgewotICAgICAgICBpZiAocmhzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAg
IHRoaXMtPm92ZXJmbG93ZWQoKTsKLSAgICAgICAgaWYgKCFpc0luQm91bmRzPFQ+KHJocy5tX3Zh
bHVlKSkKLSAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKLSAgICAgICAgbV92YWx1ZSA9
IHN0YXRpY19jYXN0PFQ+KHJocy5tX3ZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgQ2hl
Y2tlZCYgb3BlcmF0b3I9KENoZWNrZWQgcmhzKQotICAgIHsKLSAgICAgICAgdGhpcy0+Y2xlYXJP
dmVyZmxvdygpOwotICAgICAgICBpZiAocmhzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAg
IHRoaXMtPm92ZXJmbG93ZWQoKTsKLSAgICAgICAgbV92YWx1ZSA9IHN0YXRpY19jYXN0PFQ+KHJo
cy5tX3ZhbHVlKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICAKLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVT4gY29uc3QgQ2hlY2tlZCYgb3BlcmF0b3I9KFUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gKnRoaXMgPSBDaGVja2VkKHZhbHVlKTsKLSAgICB9Ci0gICAgCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IGNvbnN0IENoZWNrZWQmIG9wZXJh
dG9yPShjb25zdCBDaGVja2VkPFUsIFY+JiByaHMpCi0gICAgewotICAgICAgICByZXR1cm4gKnRo
aXMgPSBDaGVja2VkKHJocyk7Ci0gICAgfQotICAgIAotICAgIC8vIHByZWZpeAotICAgIGNvbnN0
IENoZWNrZWQmIG9wZXJhdG9yKysoKQotICAgIHsKLSAgICAgICAgaWYgKG1fdmFsdWUgPT0gc3Rk
OjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkpCi0gICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2Vk
KCk7Ci0gICAgICAgIG1fdmFsdWUrKzsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAg
ICAKLSAgICBjb25zdCBDaGVja2VkJiBvcGVyYXRvci0tKCkKLSAgICB7Ci0gICAgICAgIGlmICht
X3ZhbHVlID09IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1pbigpKQotICAgICAgICAgICAgdGhp
cy0+b3ZlcmZsb3dlZCgpOwotICAgICAgICBtX3ZhbHVlLS07Ci0gICAgICAgIHJldHVybiAqdGhp
czsKLSAgICB9Ci0gICAgCi0gICAgLy8gcG9zdGZpeCBvcGVyYXRvcnMKLSAgICBjb25zdCBDaGVj
a2VkIG9wZXJhdG9yKysoaW50KQotICAgIHsKLSAgICAgICAgaWYgKG1fdmFsdWUgPT0gc3RkOjpu
dW1lcmljX2xpbWl0czxUPjo6bWF4KCkpCi0gICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7
Ci0gICAgICAgIHJldHVybiBDaGVja2VkKG1fdmFsdWUrKyk7Ci0gICAgfQotICAgIAotICAgIGNv
bnN0IENoZWNrZWQgb3BlcmF0b3ItLShpbnQpCi0gICAgewotICAgICAgICBpZiAobV92YWx1ZSA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKSkKLSAgICAgICAgICAgIHRoaXMtPm92ZXJm
bG93ZWQoKTsKLSAgICAgICAgcmV0dXJuIENoZWNrZWQobV92YWx1ZS0tKTsKLSAgICB9Ci0gICAg
Ci0gICAgLy8gQm9vbGVhbiBvcGVyYXRvcnMKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBpZiAodGhpcy0+aGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgdGhp
cy0+Y3Jhc2goKTsKLSAgICAgICAgcmV0dXJuICFtX3ZhbHVlOwotICAgIH0KLQotICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHRoaXMtPmhhc092
ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHRoaXMtPmNyYXNoKCk7Ci0gICAgICAgIHJldHVybiBt
X3ZhbHVlOwotICAgIH0KLQotICAgIC8vIFZhbHVlIGFjY2Vzc29ycy4gdW5zYWZlR2V0KCkgd2ls
bCBjcmFzaCBpZiB0aGVyZSdzIGJlZW4gYW4gb3ZlcmZsb3cuCi0gICAgVCB1bnNhZmVHZXQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKHRoaXMtPmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAg
ICAgIHRoaXMtPmNyYXNoKCk7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlOwotICAgIH0KLSAgICAK
LSAgICBpbmxpbmUgQ2hlY2tlZFN0YXRlIHNhZmVHZXQoVCYgdmFsdWUpIGNvbnN0IFdBUk5fVU5V
U0VEX1JFVFVSTgotICAgIHsKLSAgICAgICAgdmFsdWUgPSBtX3ZhbHVlOwotICAgICAgICBpZiAo
dGhpcy0+aGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgcmV0dXJuIENoZWNrZWRTdGF0ZTo6
RGlkT3ZlcmZsb3c7Ci0gICAgICAgIHJldHVybiBDaGVja2VkU3RhdGU6OkRpZE5vdE92ZXJmbG93
OwotICAgIH0KLQotICAgIC8vIE11dGF0aW5nIGFzc2lnbm1lbnQKLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4gY29uc3QgQ2hlY2tlZCBvcGVyYXRvcis9KFUgcmhzKQotICAgIHsKLSAgICAgICAg
aWYgKCFzYWZlQWRkKG1fdmFsdWUsIHJocywgbV92YWx1ZSkpCi0gICAgICAgICAgICB0aGlzLT5v
dmVyZmxvd2VkKCk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4gY29uc3QgQ2hlY2tlZCBvcGVyYXRvci09KFUgcmhzKQotICAgIHsKLSAg
ICAgICAgaWYgKCFzYWZlU3ViKG1fdmFsdWUsIHJocywgbV92YWx1ZSkpCi0gICAgICAgICAgICB0
aGlzLT5vdmVyZmxvd2VkKCk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gY29uc3QgQ2hlY2tlZCBvcGVyYXRvcio9KFUgcmhzKQotICAg
IHsKLSAgICAgICAgaWYgKCFzYWZlTXVsdGlwbHkobV92YWx1ZSwgcmhzLCBtX3ZhbHVlKSkKLSAg
ICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAg
IH0KLQotICAgIGNvbnN0IENoZWNrZWQgb3BlcmF0b3IqPShkb3VibGUgcmhzKQotICAgIHsKLSAg
ICAgICAgZG91YmxlIHJlc3VsdCA9IHJocyAqIG1fdmFsdWU7Ci0gICAgICAgIC8vIEhhbmRsZSAr
Ly0gaW5maW5pdHkgYW5kIE5hTgotICAgICAgICBpZiAoIShzdGQ6Om51bWVyaWNfbGltaXRzPFQ+
OjptaW4oKSA8PSByZXN1bHQgJiYgc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkgPj0gcmVz
dWx0KSkKLSAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKLSAgICAgICAgbV92YWx1ZSA9
IChUKXJlc3VsdDsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIGNvbnN0IENo
ZWNrZWQgb3BlcmF0b3IqPShmbG9hdCByaHMpCi0gICAgewotICAgICAgICByZXR1cm4gKnRoaXMg
Kj0gKGRvdWJsZSlyaHM7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yKz0oQ2hlY2tlZDxVLCBWPiByaHMpCi0g
ICAgewotICAgICAgICBpZiAocmhzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHRoaXMt
Pm92ZXJmbG93ZWQoKTsKLSAgICAgICAgcmV0dXJuICp0aGlzICs9IHJocy5tX3ZhbHVlOwotICAg
IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBjb25zdCBDaGVja2Vk
IG9wZXJhdG9yLT0oQ2hlY2tlZDxVLCBWPiByaHMpCi0gICAgewotICAgICAgICBpZiAocmhzLmhh
c092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKLSAgICAgICAg
cmV0dXJuICp0aGlzIC09IHJocy5tX3ZhbHVlOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yKj0oQ2hlY2tlZDxVLCBW
PiByaHMpCi0gICAgewotICAgICAgICBpZiAocmhzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAg
ICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKLSAgICAgICAgcmV0dXJuICp0aGlzICo9IHJocy5tX3Zh
bHVlOwotICAgIH0KLQotICAgIC8vIEVxdWFsaXR5IGNvbXBhcmlzb25zCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFY+IGJvb2wgb3BlcmF0b3I9PShDaGVja2VkPFQsIFY+IHJocykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA9PSByaHMudW5zYWZlR2V0KCk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IGJvb2wgb3BlcmF0b3I9PShVIHJocykKLSAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLT5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICB0aGlzLT5jcmFz
aCgpOwotICAgICAgICByZXR1cm4gc2FmZUVxdWFscyhtX3ZhbHVlLCByaHMpOwotICAgIH0KLSAg
ICAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gY29uc3QgQ2hlY2tlZCBv
cGVyYXRvcj09KENoZWNrZWQ8VSwgVj4gcmhzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHVuc2Fm
ZUdldCgpID09IENoZWNrZWQocmhzLnVuc2FmZUdldCgpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4gYm9vbCBvcGVyYXRvciE9KFUgcmhzKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gcmhzKTsKLSAgICB9Ci0KLSAgICAvLyBPdGhlciBjb21wYXJpc29ucwot
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWPiBib29sIG9wZXJhdG9yPChDaGVja2VkPFQsIFY+IHJo
cykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8IHJocy51bnNhZmVH
ZXQoKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPChUIHJocykgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA8IHJoczsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVj4gYm9vbCBvcGVyYXRvcjw9KENoZWNrZWQ8VCwgVj4gcmhzKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIHVuc2FmZUdldCgpIDw9IHJocy51bnNhZmVHZXQoKTsKLSAgICB9
Ci0KLSAgICBib29sIG9wZXJhdG9yPD0oVCByaHMpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gdW5zYWZlR2V0KCkgPD0gcmhzOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBW
PiBib29sIG9wZXJhdG9yPihDaGVja2VkPFQsIFY+IHJocykgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiB1bnNhZmVHZXQoKSA+IHJocy51bnNhZmVHZXQoKTsKLSAgICB9Ci0KLSAgICBib29s
IG9wZXJhdG9yPihUIHJocykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bnNhZmVHZXQo
KSA+IHJoczsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVj4gYm9vbCBvcGVyYXRv
cj49KENoZWNrZWQ8VCwgVj4gcmhzKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHVuc2Fm
ZUdldCgpID49IHJocy51bnNhZmVHZXQoKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPj0o
VCByaHMpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdW5zYWZlR2V0KCkgPj0gcmhzOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICAvLyBEaXNhbGxvdyBpbXBsaWNpdCBjb252ZXJzaW9uIG9m
IGZsb2F0aW5nIHBvaW50IHRvIGludGVnZXIgdHlwZXMKLSAgICBDaGVja2VkKGZsb2F0KTsKLSAg
ICBDaGVja2VkKGRvdWJsZSk7Ci0gICAgdm9pZCBvcGVyYXRvcj0oZmxvYXQpOwotICAgIHZvaWQg
b3BlcmF0b3I9KGRvdWJsZSk7Ci0gICAgdm9pZCBvcGVyYXRvcis9KGZsb2F0KTsKLSAgICB2b2lk
IG9wZXJhdG9yKz0oZG91YmxlKTsKLSAgICB2b2lkIG9wZXJhdG9yLT0oZmxvYXQpOwotICAgIHZv
aWQgb3BlcmF0b3ItPShkb3VibGUpOwotICAgIFQgbV92YWx1ZTsKLX07Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBp
bmxpbmUgQ2hlY2tlZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93
SGFuZGxlcj4gb3BlcmF0b3IrKENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiBsaHMsIENoZWNr
ZWQ8ViwgT3ZlcmZsb3dIYW5kbGVyPiByaHMpCi17Ci0gICAgVSB4ID0gMDsKLSAgICBWIHkgPSAw
OwotICAgIGJvb2wgb3ZlcmZsb3dlZCA9IGxocy5zYWZlR2V0KHgpID09IENoZWNrZWRTdGF0ZTo6
RGlkT3ZlcmZsb3cgfHwgcmhzLnNhZmVHZXQoeSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxv
dzsKLSAgICB0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUgcmVzdWx0ID0gMDsKLSAg
ICBvdmVyZmxvd2VkIHw9ICFzYWZlQWRkKHgsIHksIHJlc3VsdCk7Ci0gICAgaWYgKG92ZXJmbG93
ZWQpCi0gICAgICAgIHJldHVybiBSZXN1bHRPdmVyZmxvd2VkOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tlZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJl
c3VsdFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3BlcmF0b3ItKENoZWNrZWQ8VSwgT3ZlcmZsb3dI
YW5kbGVyPiBsaHMsIENoZWNrZWQ8ViwgT3ZlcmZsb3dIYW5kbGVyPiByaHMpCi17Ci0gICAgVSB4
ID0gMDsKLSAgICBWIHkgPSAwOwotICAgIGJvb2wgb3ZlcmZsb3dlZCA9IGxocy5zYWZlR2V0KHgp
ID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cgfHwgcmhzLnNhZmVHZXQoeSkgPT0gQ2hlY2tl
ZFN0YXRlOjpEaWRPdmVyZmxvdzsKLSAgICB0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5
cGUgcmVzdWx0ID0gMDsKLSAgICBvdmVyZmxvd2VkIHw9ICFzYWZlU3ViKHgsIHksIHJlc3VsdCk7
Ci0gICAgaWYgKG92ZXJmbG93ZWQpCi0gICAgICAgIHJldHVybiBSZXN1bHRPdmVyZmxvd2VkOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tlZDx0eXBlbmFt
ZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3BlcmF0b3IqKENo
ZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiBsaHMsIENoZWNrZWQ8ViwgT3ZlcmZsb3dIYW5kbGVy
PiByaHMpCi17Ci0gICAgVSB4ID0gMDsKLSAgICBWIHkgPSAwOwotICAgIGJvb2wgb3ZlcmZsb3dl
ZCA9IGxocy5zYWZlR2V0KHgpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cgfHwgcmhzLnNh
ZmVHZXQoeSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdzsKLSAgICB0eXBlbmFtZSBSZXN1
bHQ8VSwgVj46OlJlc3VsdFR5cGUgcmVzdWx0ID0gMDsKLSAgICBvdmVyZmxvd2VkIHw9ICFzYWZl
TXVsdGlwbHkoeCwgeSwgcmVzdWx0KTsKLSAgICBpZiAob3ZlcmZsb3dlZCkKLSAgICAgICAgcmV0
dXJuIFJlc3VsdE92ZXJmbG93ZWQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gc3RhdGlj
IGlubGluZSBDaGVja2VkPHR5cGVuYW1lIFJlc3VsdDxVLCBWPjo6UmVzdWx0VHlwZSwgT3ZlcmZs
b3dIYW5kbGVyPiBvcGVyYXRvcisoQ2hlY2tlZDxVLCBPdmVyZmxvd0hhbmRsZXI+IGxocywgViBy
aHMpCi17Ci0gICAgcmV0dXJuIGxocyArIENoZWNrZWQ8ViwgT3ZlcmZsb3dIYW5kbGVyPihyaHMp
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPiBzdGF0aWMgaW5saW5lIENoZWNrZWQ8dHlwZW5hbWUgUmVzdWx0PFUsIFY+OjpS
ZXN1bHRUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IG9wZXJhdG9yLShDaGVja2VkPFUsIE92ZXJmbG93
SGFuZGxlcj4gbGhzLCBWIHJocykKLXsKLSAgICByZXR1cm4gbGhzIC0gQ2hlY2tlZDxWLCBPdmVy
Zmxvd0hhbmRsZXI+KHJocyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tlZDx0eXBlbmFt
ZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3BlcmF0b3IqKENo
ZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiBsaHMsIFYgcmhzKQotewotICAgIHJldHVybiBsaHMg
KiBDaGVja2VkPFYsIE92ZXJmbG93SGFuZGxlcj4ocmhzKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gc3RhdGljIGlubGlu
ZSBDaGVja2VkPHR5cGVuYW1lIFJlc3VsdDxVLCBWPjo6UmVzdWx0VHlwZSwgT3ZlcmZsb3dIYW5k
bGVyPiBvcGVyYXRvcisoVSBsaHMsIENoZWNrZWQ8ViwgT3ZlcmZsb3dIYW5kbGVyPiByaHMpCi17
Ci0gICAgcmV0dXJuIENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPihsaHMpICsgcmhzOwotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPiBzdGF0aWMgaW5saW5lIENoZWNrZWQ8dHlwZW5hbWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRU
eXBlLCBPdmVyZmxvd0hhbmRsZXI+IG9wZXJhdG9yLShVIGxocywgQ2hlY2tlZDxWLCBPdmVyZmxv
d0hhbmRsZXI+IHJocykKLXsKLSAgICByZXR1cm4gQ2hlY2tlZDxVLCBPdmVyZmxvd0hhbmRsZXI+
KGxocykgLSByaHM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tlZDx0eXBlbmFtZSBSZXN1
bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3BlcmF0b3IqKFUgbGhzLCBD
aGVja2VkPFYsIE92ZXJmbG93SGFuZGxlcj4gcmhzKQotewotICAgIHJldHVybiBDaGVja2VkPFUs
IE92ZXJmbG93SGFuZGxlcj4obGhzKSAqIHJoczsKLX0KLQotLy8gQ29udmVuaWVuY2UgdHlwZWRl
ZnMuCi10eXBlZGVmIENoZWNrZWQ8aW50OF90LCBSZWNvcmRPdmVyZmxvdz4gQ2hlY2tlZEludDg7
Ci10eXBlZGVmIENoZWNrZWQ8dWludDhfdCwgUmVjb3JkT3ZlcmZsb3c+IENoZWNrZWRVaW50ODsK
LXR5cGVkZWYgQ2hlY2tlZDxpbnQxNl90LCBSZWNvcmRPdmVyZmxvdz4gQ2hlY2tlZEludDE2Owot
dHlwZWRlZiBDaGVja2VkPHVpbnQxNl90LCBSZWNvcmRPdmVyZmxvdz4gQ2hlY2tlZFVpbnQxNjsK
LXR5cGVkZWYgQ2hlY2tlZDxpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gQ2hlY2tlZEludDMyOwot
dHlwZWRlZiBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gQ2hlY2tlZFVpbnQzMjsK
LXR5cGVkZWYgQ2hlY2tlZDxpbnQ2NF90LCBSZWNvcmRPdmVyZmxvdz4gQ2hlY2tlZEludDY0Owot
dHlwZWRlZiBDaGVja2VkPHVpbnQ2NF90LCBSZWNvcmRPdmVyZmxvdz4gQ2hlY2tlZFVpbnQ2NDsK
LXR5cGVkZWYgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBDaGVja2VkU2l6ZTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLUNoZWNrZWQ8VCwgUmVjb3JkT3ZlcmZs
b3c+IGNoZWNrZWRTdW0oVSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gQ2hlY2tlZDxULCBSZWNvcmRP
dmVyZmxvdz4odmFsdWUpOwotfQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUuLi4gQXJncz4KLUNoZWNrZWQ8VCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0oVSB2
YWx1ZSwgQXJncy4uLiBhcmdzKQotewotICAgIHJldHVybiBDaGVja2VkPFQsIFJlY29yZE92ZXJm
bG93Pih2YWx1ZSkgKyBjaGVja2VkU3VtPFQ+KGFyZ3MuLi4pOwotfQotCi0vLyBTb21ldGltZXMs
IHlvdSBqdXN0IHdhbnQgdG8gY2hlY2sgaWYgc29tZSBtYXRoIHdvdWxkIG92ZXJmbG93IC0gdGhl
IGNvZGUgdG8gZG8gdGhlIG1hdGggaXMKLS8vIGFscmVhZHkgaW4gcGxhY2UsIGFuZCB5b3Ugd2Fu
dCB0byBndWFyZCBpdC4KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4g
Ym9vbCBzdW1PdmVyZmxvd3MoQXJncy4uLiBhcmdzKQotewotICAgIHJldHVybiBjaGVja2VkU3Vt
PFQ+KGFyZ3MuLi4pLmhhc092ZXJmbG93ZWQoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gYm9vbCBkaWZmZXJlbmNlT3ZlcmZsb3dzKFUgbGVmdCwgVSByaWdodCkKLXsK
LSAgICByZXR1cm4gKENoZWNrZWQ8VCwgUmVjb3JkT3ZlcmZsb3c+KGxlZnQpIC0gQ2hlY2tlZDxU
LCBSZWNvcmRPdmVyZmxvdz4ocmlnaHQpKS5oYXNPdmVyZmxvd2VkKCk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1DaGVja2VkPFQsIFJlY29yZE92ZXJmbG93PiBjaGVj
a2VkUHJvZHVjdChVIHZhbHVlKQotewotICAgIHJldHVybiBDaGVja2VkPFQsIFJlY29yZE92ZXJm
bG93Pih2YWx1ZSk7Ci19Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZS4uLiBBcmdzPgotQ2hlY2tlZDxULCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFByb2R1Y3QoVSB2
YWx1ZSwgQXJncy4uLiBhcmdzKQotewotICAgIHJldHVybiBDaGVja2VkPFQsIFJlY29yZE92ZXJm
bG93Pih2YWx1ZSkgKiBjaGVja2VkUHJvZHVjdDxUPihhcmdzLi4uKTsKLX0KLQotLy8gU29tZXRp
bWVzLCB5b3UganVzdCB3YW50IHRvIGNoZWNrIGlmIHNvbWUgbWF0aCB3b3VsZCBvdmVyZmxvdyAt
IHRoZSBjb2RlIHRvIGRvIHRoZSBtYXRoIGlzCi0vLyBhbHJlYWR5IGluIHBsYWNlLCBhbmQgeW91
IHdhbnQgdG8gZ3VhcmQgaXQuCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFy
Z3M+IGJvb2wgcHJvZHVjdE92ZXJmbG93cyhBcmdzLi4uIGFyZ3MpCi17Ci0gICAgcmV0dXJuIGNo
ZWNrZWRQcm9kdWN0PFQ+KGFyZ3MuLi4pLmhhc092ZXJmbG93ZWQoKTsKLX0KLQotfQotCi11c2lu
ZyBXVEY6OkNoZWNrZWQ7Ci11c2luZyBXVEY6OkNoZWNrZWRTdGF0ZTsKLXVzaW5nIFdURjo6UmVj
b3JkT3ZlcmZsb3c7Ci11c2luZyBXVEY6OkNoZWNrZWRJbnQ4OwotdXNpbmcgV1RGOjpDaGVja2Vk
VWludDg7Ci11c2luZyBXVEY6OkNoZWNrZWRJbnQxNjsKLXVzaW5nIFdURjo6Q2hlY2tlZFVpbnQx
NjsKLXVzaW5nIFdURjo6Q2hlY2tlZEludDMyOwotdXNpbmcgV1RGOjpDaGVja2VkVWludDMyOwot
dXNpbmcgV1RGOjpDaGVja2VkSW50NjQ7Ci11c2luZyBXVEY6OkNoZWNrZWRVaW50NjQ7Ci11c2lu
ZyBXVEY6OkNoZWNrZWRTaXplOwotdXNpbmcgV1RGOjpjaGVja2VkU3VtOwotdXNpbmcgV1RGOjpk
aWZmZXJlbmNlT3ZlcmZsb3dzOwotdXNpbmcgV1RGOjpwcm9kdWN0T3ZlcmZsb3dzOwotdXNpbmcg
V1RGOjpzdW1PdmVyZmxvd3M7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL0Nsb2NrVHlwZS5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvQ2xvY2tUeXBlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZGY4ZWUxODJmZTAxNTRiYzE4NGVhNGEzNTg1NzdiODUzMGQyYWY3Ny4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvQ2xvY2tUeXBlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNsb2NrVHlwZS5oIgotCi0jaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQ2xvY2tUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2Fz
ZSBDbG9ja1R5cGU6OldhbGw6Ci0gICAgICAgIG91dC5wcmludCgiV2FsbCIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBDbG9ja1R5cGU6Ok1vbm90b25pYzoKLSAgICAgICAgb3V0LnByaW50
KCJNb25vdG9uaWMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0Nsb2NrVHlwZS5oIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0Nsb2NrVHlwZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxNTQ5MTA2MmM4ZjVhMjM3ZmUxYWQ1NzUwYTY3MTBlZjY3YWU2ZjcxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9DbG9ja1R5cGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBXVEZfQ2xvY2tUeXBlX2gKLSNkZWZpbmUgV1RGX0Nsb2NrVHlwZV9oCi0KLW5hbWVzcGFj
ZSBXVEYgewotCi1jbGFzcyBQcmludFN0cmVhbTsKLQotZW51bSBjbGFzcyBDbG9ja1R5cGUgewot
ICAgIFdhbGwsCi0gICAgTW9ub3RvbmljCi19OwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgQ2xvY2tUeXBlKTsKLQotfSAvLyBuYW1lc3BhY2Ug
V1RGCi0KLXVzaW5nIFdURjo6Q2xvY2tUeXBlOwotCi0jZW5kaWYgLy8gV1RGX0Nsb2NrVHlwZV9o
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvQ29tbWFQcmlu
dGVyLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvQ29tbWFQcmludGVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YWI5ZTgxMDFhMTE0MmRlMDU3MGU1NWE2
YThiMThmYWJjYTI3YTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0NvbW1hUHJpbnRlci5oCisr
KyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENvbW1hUHJpbnRlcl9oCi0jZGVmaW5l
IENvbW1hUHJpbnRlcl9oCi0KLSNpbmNsdWRlICJQcmludFN0cmVhbS5oIgotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotY2xhc3MgQ29tbWFQcmludGVyIHsKLXB1YmxpYzoKLSAgICBDb21tYVByaW50ZXIo
Y29uc3QgY2hhciogY29tbWEgPSAiLCAiLCBjb25zdCBjaGFyKiBzdGFydCA9ICIiKQotICAgICAg
ICA6IG1fY29tbWEoY29tbWEpCi0gICAgICAgICwgbV9zdGFydChzdGFydCkKLSAgICAgICAgLCBt
X2RpZFByaW50KGZhbHNlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1fZGlkUHJpbnQpIHsKLSAg
ICAgICAgICAgIG91dC5wcmludChtX3N0YXJ0KTsKLSAgICAgICAgICAgIG1fZGlkUHJpbnQgPSB0
cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBv
dXQucHJpbnQobV9jb21tYSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlkUHJpbnQoKSBjb25z
dCB7IHJldHVybiBtX2RpZFByaW50OyB9Ci0gICAgCi1wcml2YXRlOgotICAgIGNvbnN0IGNoYXIq
IG1fY29tbWE7Ci0gICAgY29uc3QgY2hhciogbV9zdGFydDsKLSAgICBtdXRhYmxlIGJvb2wgbV9k
aWRQcmludDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OkNvbW1hUHJp
bnRlcjsKLQotI2VuZGlmIC8vIENvbW1hUHJpbnRlcl9oCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Db21waWxlci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL0NvbXBpbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGYyZmVkNzk4Y2Q0Y2IzNWI3NWU3Zjg5MWNlOGNhZWY5Y2M5ZThkNmUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL0NvbXBpbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzODUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIFdURl9Db21waWxlcl9oCi0jZGVmaW5lIFdURl9Db21waWxlcl9oCi0KLS8qIENPTVBJ
TEVSKCkgLSB0aGUgY29tcGlsZXIgYmVpbmcgdXNlZCB0byBidWlsZCB0aGUgcHJvamVjdCAqLwot
I2RlZmluZSBDT01QSUxFUihXVEZfRkVBVFVSRSkgKGRlZmluZWQgV1RGX0NPTVBJTEVSXyMjV1RG
X0ZFQVRVUkUgICYmIFdURl9DT01QSUxFUl8jI1dURl9GRUFUVVJFKQotCi0vKiBDT01QSUxFUl9T
VVBQT1JUUygpIC0gd2hldGhlciB0aGUgY29tcGlsZXIgYmVpbmcgdXNlZCB0byBidWlsZCB0aGUg
cHJvamVjdCBzdXBwb3J0cyB0aGUgZ2l2ZW4gZmVhdHVyZS4gKi8KLSNkZWZpbmUgQ09NUElMRVJf
U1VQUE9SVFMoV1RGX0NPTVBJTEVSX0ZFQVRVUkUpIChkZWZpbmVkIFdURl9DT01QSUxFUl9TVVBQ
T1JUU18jI1dURl9DT01QSUxFUl9GRUFUVVJFICAmJiBXVEZfQ09NUElMRVJfU1VQUE9SVFNfIyNX
VEZfQ09NUElMRVJfRkVBVFVSRSkKLQotLyogQ09NUElMRVJfUVVJUksoKSAtIHdoZXRoZXIgdGhl
IGNvbXBpbGVyIGJlaW5nIHVzZWQgdG8gYnVpbGQgdGhlIHByb2plY3QgcmVxdWlyZXMgYSBnaXZl
biBxdWlyay4gKi8KLSNkZWZpbmUgQ09NUElMRVJfUVVJUksoV1RGX0NPTVBJTEVSX1FVSVJLKSAo
ZGVmaW5lZCBXVEZfQ09NUElMRVJfUVVJUktfIyNXVEZfQ09NUElMRVJfUVVJUksgICYmIFdURl9D
T01QSUxFUl9RVUlSS18jI1dURl9DT01QSUxFUl9RVUlSSykKLQotLyogQ09NUElMRVJfSEFTX0NM
QU5HX0JVSUxUSU4oKSAtIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGEgcGFydGljdWxh
ciBjbGFuZyBidWlsdGluLiAqLwotI2lmZGVmIF9faGFzX2J1aWx0aW4KLSNkZWZpbmUgQ09NUElM
RVJfSEFTX0NMQU5HX0JVSUxUSU4oeCkgX19oYXNfYnVpbHRpbih4KQotI2Vsc2UKLSNkZWZpbmUg
Q09NUElMRVJfSEFTX0NMQU5HX0JVSUxUSU4oeCkgMAotI2VuZGlmCi0KLS8qIENPTVBJTEVSX0hB
U19DTEFOR19IRUFUVVJFKCkgLSB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyBhIHBhcnRp
Y3VsYXIgbGFuZ3VhZ2Ugb3IgbGlicmFyeSBmZWF0dXJlLiAqLwotLyogaHR0cDovL2NsYW5nLmxs
dm0ub3JnL2RvY3MvTGFuZ3VhZ2VFeHRlbnNpb25zLmh0bWwjaGFzLWZlYXR1cmUtYW5kLWhhcy1l
eHRlbnNpb24gKi8KLSNpZmRlZiBfX2hhc19mZWF0dXJlCi0jZGVmaW5lIENPTVBJTEVSX0hBU19D
TEFOR19GRUFUVVJFKHgpIF9faGFzX2ZlYXR1cmUoeCkKLSNlbHNlCi0jZGVmaW5lIENPTVBJTEVS
X0hBU19DTEFOR19GRUFUVVJFKHgpIDAKLSNlbmRpZgotCi0vKiBDT01QSUxFUl9IQVNfQ0xBTkdf
REVDTFNQRUMoKSAtIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGEgTWljcm9zb2Z0IHN0
eWxlIF9fZGVjbHNwZWMgYXR0cmlidXRlLiAqLwotLyogaHR0cHM6Ly9jbGFuZy5sbHZtLm9yZy9k
b2NzL0xhbmd1YWdlRXh0ZW5zaW9ucy5odG1sI2hhcy1kZWNsc3BlYy1hdHRyaWJ1dGUgKi8KLSNp
ZmRlZiBfX2hhc19kZWNsc3BlY19hdHRyaWJ1dGUKLSNkZWZpbmUgQ09NUElMRVJfSEFTX0NMQU5H
X0RFQ0xTUEVDKHgpIF9faGFzX2RlY2xzcGVjX2F0dHJpYnV0ZSh4KQotI2Vsc2UKLSNkZWZpbmUg
Q09NUElMRVJfSEFTX0NMQU5HX0RFQ0xTUEVDKHgpIDAKLSNlbmRpZgotCi0vKiA9PT09IENPTVBJ
TEVSKCkgLSBwcmltYXJ5IGRldGVjdGlvbiBvZiB0aGUgY29tcGlsZXIgYmVpbmcgdXNlZCB0byBi
dWlsZCB0aGUgcHJvamVjdCwgaW4gYWxwaGFiZXRpY2FsIG9yZGVyID09PT0gKi8KLQotLyogQ09N
UElMRVIoQ0xBTkcpIC0gQ2xhbmcgICovCi0KLSNpZiBkZWZpbmVkKF9fY2xhbmdfXykKLSNkZWZp
bmUgV1RGX0NPTVBJTEVSX0NMQU5HIDEKLSNkZWZpbmUgV1RGX0NPTVBJTEVSX1NVUFBPUlRTX0JM
T0NLUyBDT01QSUxFUl9IQVNfQ0xBTkdfRkVBVFVSRShibG9ja3MpCi0jZGVmaW5lIFdURl9DT01Q
SUxFUl9TVVBQT1JUU19DX1NUQVRJQ19BU1NFUlQgQ09NUElMRVJfSEFTX0NMQU5HX0ZFQVRVUkUo
Y19zdGF0aWNfYXNzZXJ0KQotI2RlZmluZSBXVEZfQ09NUElMRVJfU1VQUE9SVFNfQ1hYX1JFRkVS
RU5DRV9RVUFMSUZJRURfRlVOQ1RJT05TIENPTVBJTEVSX0hBU19DTEFOR19GRUFUVVJFKGN4eF9y
ZWZlcmVuY2VfcXVhbGlmaWVkX2Z1bmN0aW9ucykKLSNkZWZpbmUgV1RGX0NPTVBJTEVSX1NVUFBP
UlRTX0NYWF9FWENFUFRJT05TIENPTVBJTEVSX0hBU19DTEFOR19GRUFUVVJFKGN4eF9leGNlcHRp
b25zKQotI2RlZmluZSBXVEZfQ09NUElMRVJfU1VQUE9SVFNfQlVJTFRJTl9JU19UUklWSUFMTFlf
Q09QWUFCTEUgQ09NUElMRVJfSEFTX0NMQU5HX0ZFQVRVUkUoaXNfdHJpdmlhbGx5X2NvcHlhYmxl
KQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLSNpZiBfX2NwbHVzcGx1cyA8PSAyMDExMDNMCi0jZGVm
aW5lIFdURl9DUFBfU1REX1ZFUiAxMQotI2VsaWYgX19jcGx1c3BsdXMgPD0gMjAxNDAyTAotI2Rl
ZmluZSBXVEZfQ1BQX1NURF9WRVIgMTQKLSNlbmRpZgotI2VuZGlmCi0KLSNlbmRpZiAvLyBkZWZp
bmVkKF9fY2xhbmdfXykKLQotLyogQ09NUElMRVIoR0NDX09SX0NMQU5HKSAtIEdOVSBDb21waWxl
ciBDb2xsZWN0aW9uIG9yIENsYW5nICovCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLSNkZWZpbmUg
V1RGX0NPTVBJTEVSX0dDQ19PUl9DTEFORyAxCi0jZW5kaWYKLQotLyogQ09NUElMRVIoR0NDKSAt
IEdOVSBDb21waWxlciBDb2xsZWN0aW9uICovCi0vKiBOb3RlOiBUaGlzIHNlY3Rpb24gbXVzdCBj
b21lIGFmdGVyIHRoZSBDbGFuZyBzZWN0aW9uIHNpbmNlIHdlIGNoZWNrICFDT01QSUxFUihDTEFO
RykgaGVyZS4gKi8KLSNpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpICYmICFDT01QSUxFUihDTEFO
RykKLSNkZWZpbmUgV1RGX0NPTVBJTEVSX0dDQyAxCi0jZGVmaW5lIFdURl9DT01QSUxFUl9TVVBQ
T1JUU19DWFhfUkVGRVJFTkNFX1FVQUxJRklFRF9GVU5DVElPTlMgMQotCi0jZGVmaW5lIEdDQ19W
RVJTSU9OIChfX0dOVUNfXyAqIDEwMDAwICsgX19HTlVDX01JTk9SX18gKiAxMDAgKyBfX0dOVUNf
UEFUQ0hMRVZFTF9fKQotI2RlZmluZSBHQ0NfVkVSU0lPTl9BVF9MRUFTVChtYWpvciwgbWlub3Is
IHBhdGNoKSAoR0NDX1ZFUlNJT04gPj0gKG1ham9yICogMTAwMDAgKyBtaW5vciAqIDEwMCArIHBh
dGNoKSkKLQotI2lmICFHQ0NfVkVSU0lPTl9BVF9MRUFTVCg1LCAwLCAwKQotI2Vycm9yICJQbGVh
c2UgdXNlIGEgbmV3ZXIgdmVyc2lvbiBvZiBHQ0MuIFdlYktpdCByZXF1aXJlcyBHQ0MgNS4wLjAg
b3IgbmV3ZXIgdG8gY29tcGlsZS4iCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19TVERDX1ZFUlNJ
T05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAyMDExMTJMCi0jZGVmaW5lIFdURl9DT01QSUxF
Ul9TVVBQT1JUU19DX1NUQVRJQ19BU1NFUlQgMQotI2VuZGlmCi0KLSNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdtYXliZS11bmluaXRpYWxpemVkIgotCi0jZW5kaWYgLyogQ09NUElM
RVIoR0NDKSAqLwotCi0vKiBDT01QSUxFUihNSU5HVykgLSBNaW5HVyBHQ0MgKi8KLQotI2lmIGRl
ZmluZWQoX19NSU5HVzMyX18pCi0jZGVmaW5lIFdURl9DT01QSUxFUl9NSU5HVyAxCi0jaW5jbHVk
ZSA8X21pbmd3Lmg+Ci0jZW5kaWYKLQotLyogQ09NUElMRVIoTUlOR1c2NCkgLSBtaW5ndy13NjQg
R0NDIC0gdXNlZCBhcyBhZGRpdGlvbmFsIGNoZWNrIHRvIGV4Y2x1ZGUgbWluZ3cub3JnIHNwZWNp
ZmljIGZ1bmN0aW9ucyAqLwotCi0vKiBOb3RlOiBUaGlzIHNlY3Rpb24gbXVzdCBjb21lIGFmdGVy
IHRoZSBNaW5HVyBzZWN0aW9uIHNpbmNlIHdlIGNoZWNrIENPTVBJTEVSKE1JTkdXKSBoZXJlLiAq
LwotCi0jaWYgQ09NUElMRVIoTUlOR1cpICYmIGRlZmluZWQoX19NSU5HVzY0X1ZFUlNJT05fTUFK
T1IpIC8qIGJlc3Qgd2F5IHRvIGNoZWNrIGZvciBtaW5ndy13NjQgdnMgbWluZ3cub3JnICovCi0j
ZGVmaW5lIFdURl9DT01QSUxFUl9NSU5HVzY0IDEKLSNlbmRpZgotCi0vKiBDT01QSUxFUihNU1ZD
KSAtIE1pY3Jvc29mdCBWaXN1YWwgQysrICovCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotCi0j
ZGVmaW5lIFdURl9DT01QSUxFUl9NU1ZDIDEKLSNkZWZpbmUgV1RGX0NPTVBJTEVSX1NVUFBPUlRT
X0NYWF9SRUZFUkVOQ0VfUVVBTElGSUVEX0ZVTkNUSU9OUyAxCi0KLSNpZiBfTVNDX1ZFUiA8IDE5
MDAKLSNlcnJvciAiUGxlYXNlIHVzZSBhIG5ld2VyIHZlcnNpb24gb2YgVmlzdWFsIFN0dWRpby4g
V2ViS2l0IHJlcXVpcmVzIFZTMjAxNSBvciBuZXdlciB0byBjb21waWxlLiIKLSNlbmRpZgotCi0j
ZW5kaWYKLQotLyogQ09NUElMRVIoU1VOQ0MpICovCi0KLSNpZiBkZWZpbmVkKF9fU1VOUFJPX0ND
KSB8fCBkZWZpbmVkKF9fU1VOUFJPX0MpCi0jZGVmaW5lIFdURl9DT01QSUxFUl9TVU5DQyAxCi0j
ZW5kaWYKLQotI2lmICFDT01QSUxFUihDTEFORykgJiYgIUNPTVBJTEVSKE1TVkMpCi0jZGVmaW5l
IFdURl9DT01QSUxFUl9RVUlSS19DT05TSURFUlNfVU5SRUFDSEFCTEVfQ09ERSAxCi0jZW5kaWYK
LQotLyogPT09PSBDT01QSUxFUl9TVVBQT1JUUyAtIGFkZGl0aW9uYWwgY29tcGlsZXIgZmVhdHVy
ZSBkZXRlY3Rpb24sIGluIGFscGhhYmV0aWNhbCBvcmRlciA9PT09ICovCi0KLS8qIENPTVBJTEVS
X1NVUFBPUlRTKEVBQkkpICovCi0KLSNpZiBkZWZpbmVkKF9fQVJNX0VBQklfXykgfHwgZGVmaW5l
ZChfX0VBQklfXykKLSNkZWZpbmUgV1RGX0NPTVBJTEVSX1NVUFBPUlRTX0VBQkkgMQotI2VuZGlm
Ci0KLS8qIFJFTEFYRURfQ09OU1RFWFBSICovCi0KLSNpZiBkZWZpbmVkKF9fY3BwX2NvbnN0ZXhw
cikgJiYgX19jcHBfY29uc3RleHByID49IDIwMTMwNAotI2RlZmluZSBXVEZfQ09NUElMRVJfU1VQ
UE9SVFNfUkVMQVhFRF9DT05TVEVYUFIgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChSRUxBWEVE
X0NPTlNURVhQUikKLSNpZiBDT01QSUxFUl9TVVBQT1JUUyhSRUxBWEVEX0NPTlNURVhQUikKLSNk
ZWZpbmUgUkVMQVhFRF9DT05TVEVYUFIgY29uc3RleHByCi0jZWxzZQotI2RlZmluZSBSRUxBWEVE
X0NPTlNURVhQUgotI2VuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBBU0FOX0VOQUJMRUQgQ09NUElM
RVJfSEFTX0NMQU5HX0ZFQVRVUkUoYWRkcmVzc19zYW5pdGl6ZXIpCi0KLSNpZiBBU0FOX0VOQUJM
RUQKLSNkZWZpbmUgU1VQUFJFU1NfQVNBTiBfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZV9hZGRy
ZXNzKSkKLSNlbHNlCi0jZGVmaW5lIFNVUFBSRVNTX0FTQU4KLSNlbmRpZgotCi0vKiA9PT09IENv
bXBpbGVyLWluZGVwZW5kZW50IG1hY3JvcyBmb3IgdmFyaW91cyBjb21waWxlciBmZWF0dXJlcywg
aW4gYWxwaGFiZXRpY2FsIG9yZGVyID09PT0gKi8KLQotLyogQUxXQVlTX0lOTElORSAqLwotCi0j
aWYgIWRlZmluZWQoQUxXQVlTX0lOTElORSkgJiYgQ09NUElMRVIoR0NDX09SX0NMQU5HKSAmJiBk
ZWZpbmVkKE5ERUJVRykgJiYgIUNPTVBJTEVSKE1JTkdXKQotI2RlZmluZSBBTFdBWVNfSU5MSU5F
IGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCi0jZW5kaWYKLQotI2lm
ICFkZWZpbmVkKEFMV0FZU19JTkxJTkUpICYmIENPTVBJTEVSKE1TVkMpICYmIGRlZmluZWQoTkRF
QlVHKQotI2RlZmluZSBBTFdBWVNfSU5MSU5FIF9fZm9yY2VpbmxpbmUKLSNlbmRpZgotCi0jaWYg
IWRlZmluZWQoQUxXQVlTX0lOTElORSkKLSNkZWZpbmUgQUxXQVlTX0lOTElORSBpbmxpbmUKLSNl
bmRpZgotCi0vKiBXVEZfRVhURVJOX0Nfe0JFR0lOLCBFTkR9ICovCi0KLSNpZmRlZiBfX2NwbHVz
cGx1cwotI2RlZmluZSBXVEZfRVhURVJOX0NfQkVHSU4gZXh0ZXJuICJDIiB7Ci0jZGVmaW5lIFdU
Rl9FWFRFUk5fQ19FTkQgfQotI2Vsc2UKLSNkZWZpbmUgV1RGX0VYVEVSTl9DX0JFR0lOCi0jZGVm
aW5lIFdURl9FWFRFUk5fQ19FTkQKLSNlbmRpZgotCi0vKiBGQUxMVEhST1VHSCAqLwotCi0jaWYg
IWRlZmluZWQoRkFMTFRIUk9VR0gpICYmIGRlZmluZWQoX19jcGx1c3BsdXMpICYmIGRlZmluZWQo
X19oYXNfY3BwX2F0dHJpYnV0ZSkKLQotI2lmIF9faGFzX2NwcF9hdHRyaWJ1dGUoZmFsbHRocm91
Z2gpCi0jZGVmaW5lIEZBTExUSFJPVUdIIFtbZmFsbHRocm91Z2hdXQotI2VsaWYgX19oYXNfY3Bw
X2F0dHJpYnV0ZShjbGFuZzo6ZmFsbHRocm91Z2gpCi0jZGVmaW5lIEZBTExUSFJPVUdIIFtbY2xh
bmc6OmZhbGx0aHJvdWdoXV0KLSNlbGlmIF9faGFzX2NwcF9hdHRyaWJ1dGUoZ251OjpmYWxsdGhy
b3VnaCkKLSNkZWZpbmUgRkFMTFRIUk9VR0ggW1tnbnU6OmZhbGx0aHJvdWdoXV0KLSNlbmRpZgot
Ci0jZWxpZiAhZGVmaW5lZChGQUxMVEhST1VHSCkgJiYgIWRlZmluZWQoX19jcGx1c3BsdXMpCi0K
LSNpZiBDT01QSUxFUihHQ0MpCi0jaWYgR0NDX1ZFUlNJT05fQVRfTEVBU1QoNywgMCwgMCkKLSNk
ZWZpbmUgRkFMTFRIUk9VR0ggX19hdHRyaWJ1dGVfXyAoKGZhbGx0aHJvdWdoKSkKLSNlbmRpZgot
I2VuZGlmCi0KLSNlbmRpZiAvLyAhZGVmaW5lZChGQUxMVEhST1VHSCkgJiYgZGVmaW5lZChfX2Nw
bHVzcGx1cykgJiYgZGVmaW5lZChfX2hhc19jcHBfYXR0cmlidXRlKQotCi0jaWYgIWRlZmluZWQo
RkFMTFRIUk9VR0gpCi0jZGVmaW5lIEZBTExUSFJPVUdICi0jZW5kaWYKLQotLyogTElLRUxZICov
Ci0KLSNpZiAhZGVmaW5lZChMSUtFTFkpICYmIENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSNkZWZp
bmUgTElLRUxZKHgpIF9fYnVpbHRpbl9leHBlY3QoISEoeCksIDEpCi0jZW5kaWYKLQotI2lmICFk
ZWZpbmVkKExJS0VMWSkKLSNkZWZpbmUgTElLRUxZKHgpICh4KQotI2VuZGlmCi0KLS8qIE5FVkVS
X0lOTElORSAqLwotCi0jaWYgIWRlZmluZWQoTkVWRVJfSU5MSU5FKSAmJiBDT01QSUxFUihHQ0Nf
T1JfQ0xBTkcpCi0jZGVmaW5lIE5FVkVSX0lOTElORSBfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5l
X18pKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChORVZFUl9JTkxJTkUpICYmIENPTVBJTEVSKE1T
VkMpCi0jZGVmaW5lIE5FVkVSX0lOTElORSBfX2RlY2xzcGVjKG5vaW5saW5lKQotI2VuZGlmCi0K
LSNpZiAhZGVmaW5lZChORVZFUl9JTkxJTkUpCi0jZGVmaW5lIE5FVkVSX0lOTElORQotI2VuZGlm
Ci0KLS8qIE5PX1JFVFVSTiAqLwotCi0jaWYgIWRlZmluZWQoTk9fUkVUVVJOKSAmJiBDT01QSUxF
UihHQ0NfT1JfQ0xBTkcpCi0jZGVmaW5lIE5PX1JFVFVSTiBfX2F0dHJpYnV0ZSgoX19ub3JldHVy
bl9fKSkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoTk9fUkVUVVJOKSAmJiBDT01QSUxFUihNU1ZD
KQotI2RlZmluZSBOT19SRVRVUk4gX19kZWNsc3BlYyhub3JldHVybikKLSNlbmRpZgotCi0jaWYg
IWRlZmluZWQoTk9fUkVUVVJOKQotI2RlZmluZSBOT19SRVRVUk4KLSNlbmRpZgotCi0vKiBOT1Rf
VEFJTF9DQUxMRUQgKi8KLQotI2lmICFkZWZpbmVkKE5PVF9UQUlMX0NBTExFRCkgJiYgZGVmaW5l
ZChfX2hhc19hdHRyaWJ1dGUpCi0jaWYgX19oYXNfYXR0cmlidXRlKG5vdF90YWlsX2NhbGxlZCkK
LSNkZWZpbmUgTk9UX1RBSUxfQ0FMTEVEIF9fYXR0cmlidXRlX18oKG5vdF90YWlsX2NhbGxlZCkp
Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoTk9UX1RBSUxfQ0FMTEVEKQotI2RlZmlu
ZSBOT1RfVEFJTF9DQUxMRUQKLSNlbmRpZgotCi0vKiBSRVRVUk5TX05PTk5VTEwgKi8KLSNpZiAh
ZGVmaW5lZChSRVRVUk5TX05PTk5VTEwpICYmIENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSNkZWZp
bmUgUkVUVVJOU19OT05OVUxMIF9fYXR0cmlidXRlX18oKHJldHVybnNfbm9ubnVsbCkpCi0jZW5k
aWYKLQotI2lmICFkZWZpbmVkKFJFVFVSTlNfTk9OTlVMTCkKLSNkZWZpbmUgUkVUVVJOU19OT05O
VUxMCi0jZW5kaWYKLQotLyogTk9fUkVUVVJOX1dJVEhfVkFMVUUgKi8KLQotI2lmICFkZWZpbmVk
KE5PX1JFVFVSTl9XSVRIX1ZBTFVFKSAmJiAhQ09NUElMRVIoTVNWQykKLSNkZWZpbmUgTk9fUkVU
VVJOX1dJVEhfVkFMVUUgTk9fUkVUVVJOCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKE5PX1JFVFVS
Tl9XSVRIX1ZBTFVFKQotI2RlZmluZSBOT19SRVRVUk5fV0lUSF9WQUxVRQotI2VuZGlmCi0KLS8q
IE9CSkNfQ0xBU1MgKi8KLQotI2lmICFkZWZpbmVkKE9CSkNfQ0xBU1MpICYmIGRlZmluZWQoX19P
QkpDX18pCi0jZGVmaW5lIE9CSkNfQ0xBU1MgQGNsYXNzCi0jZW5kaWYKLQotI2lmICFkZWZpbmVk
KE9CSkNfQ0xBU1MpCi0jZGVmaW5lIE9CSkNfQ0xBU1MgY2xhc3MKLSNlbmRpZgotCi0vKiBQVVJF
X0ZVTkNUSU9OICovCi0KLSNpZiAhZGVmaW5lZChQVVJFX0ZVTkNUSU9OKSAmJiBDT01QSUxFUihH
Q0NfT1JfQ0xBTkcpCi0jZGVmaW5lIFBVUkVfRlVOQ1RJT04gX19hdHRyaWJ1dGVfXygoX19wdXJl
X18pKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChQVVJFX0ZVTkNUSU9OKQotI2RlZmluZSBQVVJF
X0ZVTkNUSU9OCi0jZW5kaWYKLQotLyogVU5VU0VEX0ZVTkNUSU9OICovCi0KLSNpZiAhZGVmaW5l
ZChVTlVTRURfRlVOQ1RJT04pICYmIENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSNkZWZpbmUgVU5V
U0VEX0ZVTkNUSU9OIF9fYXR0cmlidXRlX18oKHVudXNlZCkpCi0jZW5kaWYKLQotI2lmICFkZWZp
bmVkKFVOVVNFRF9GVU5DVElPTikKLSNkZWZpbmUgVU5VU0VEX0ZVTkNUSU9OCi0jZW5kaWYKLQot
LyogUkVGRVJFTkNFRF9GUk9NX0FTTSAqLwotCi0jaWYgIWRlZmluZWQoUkVGRVJFTkNFRF9GUk9N
X0FTTSkgJiYgQ09NUElMRVIoR0NDX09SX0NMQU5HKQotI2RlZmluZSBSRUZFUkVOQ0VEX0ZST01f
QVNNIF9fYXR0cmlidXRlX18oKF9fdXNlZF9fKSkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoUkVG
RVJFTkNFRF9GUk9NX0FTTSkKLSNkZWZpbmUgUkVGRVJFTkNFRF9GUk9NX0FTTQotI2VuZGlmCi0K
LS8qIFVOTElLRUxZICovCi0KLSNpZiAhZGVmaW5lZChVTkxJS0VMWSkgJiYgQ09NUElMRVIoR0ND
X09SX0NMQU5HKQotI2RlZmluZSBVTkxJS0VMWSh4KSBfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAw
KQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChVTkxJS0VMWSkKLSNkZWZpbmUgVU5MSUtFTFkoeCkg
KHgpCi0jZW5kaWYKLQotLyogVU5VU0VEX0xBQkVMICovCi0KLS8qIEtlZXAgdGhlIGNvbXBpbGVy
IGZyb20gY29tcGxhaW5pbmcgZm9yIGEgbG9jYWwgbGFiZWwgdGhhdCBpcyBkZWZpbmVkIGJ1dCBu
b3QgcmVmZXJlbmNlZC4gKi8KLS8qIEhlbHBmdWwgd2hlbiBtaXhpbmcgaGFuZC13cml0dGVuIGFu
ZCBhdXRvZ2VuZXJhdGVkIGNvZGUuICovCi0KLSNpZiAhZGVmaW5lZChVTlVTRURfTEFCRUwpICYm
IENPTVBJTEVSKE1TVkMpCi0jZGVmaW5lIFVOVVNFRF9MQUJFTChsYWJlbCkgaWYgKGZhbHNlKSBn
b3RvIGxhYmVsCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFVOVVNFRF9MQUJFTCkKLSNkZWZpbmUg
VU5VU0VEX0xBQkVMKGxhYmVsKSBVTlVTRURfUEFSQU0oJiYgbGFiZWwpCi0jZW5kaWYKLQotLyog
VU5VU0VEX1BBUkFNICovCi0KLSNpZiAhZGVmaW5lZChVTlVTRURfUEFSQU0pICYmIENPTVBJTEVS
KE1TVkMpCi0jZGVmaW5lIFVOVVNFRF9QQVJBTSh2YXJpYWJsZSkgKHZvaWQpJnZhcmlhYmxlCi0j
ZW5kaWYKLQotI2lmICFkZWZpbmVkKFVOVVNFRF9QQVJBTSkKLSNkZWZpbmUgVU5VU0VEX1BBUkFN
KHZhcmlhYmxlKSAodm9pZCl2YXJpYWJsZQotI2VuZGlmCi0KLS8qIFdBUk5fVU5VU0VEX1JFVFVS
TiAqLwotCi0jaWYgIWRlZmluZWQoV0FSTl9VTlVTRURfUkVUVVJOKSAmJiBDT01QSUxFUihHQ0Nf
T1JfQ0xBTkcpCi0jZGVmaW5lIFdBUk5fVU5VU0VEX1JFVFVSTiBfX2F0dHJpYnV0ZV9fKChfX3dh
cm5fdW51c2VkX3Jlc3VsdF9fKSkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoV0FSTl9VTlVTRURf
UkVUVVJOKQotI2RlZmluZSBXQVJOX1VOVVNFRF9SRVRVUk4KLSNlbmRpZgotCi0jaWYgIWRlZmlu
ZWQoX19oYXNfaW5jbHVkZSkgJiYgQ09NUElMRVIoTVNWQykKLSNkZWZpbmUgX19oYXNfaW5jbHVk
ZShwYXRoKSAwCi0jZW5kaWYKLQotI2VuZGlmIC8qIFdURl9Db21waWxlcl9oICovCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvQ29uZGl0aW9uLmggYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvQ29uZGl0aW9uLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDk0NDRmOTQ5ZWVkZWZkZmY2NjFkYmM2YTRiMWRhY2RmNTRlNmI3NWQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0NvbmRpdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIFdURl9Db25kaXRpb25faAotI2RlZmluZSBXVEZfQ29uZGl0aW9uX2gK
LQotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXJraW5nTG90Lmg+Ci0jaW5jbHVkZSA8d3RmL1RpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gVGhpcyBpcyBhIGNv
bmRpdGlvbiB2YXJpYWJsZSB0aGF0IGlzIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCBhbnkgbG9jay1s
aWtlIG9iamVjdCwgaW5jbHVkaW5nCi0vLyBvdXIgb3duIFdURjo6TG9jay4gSXQgZmVhdHVyZXMg
c3RhbmRhcmQgd2FpdCgpL25vdGlmeU9uZSgpL25vdGlmeUFsbCgpIG1ldGhvZHMgaW4gYWRkaXRp
b24gdG8KLS8vIGEgdmFyaWV0eSBvZiB3YWl0LXdpdGgtdGltZW91dCBtZXRob2RzLiBUaGlzIGlu
Y2x1ZGVzIG1ldGhvZHMgdGhhdCB1c2UgV1RGJ3Mgb3duIG5vdGlvbiBvZgotLy8gdGltZSwgbGlr
ZSB3YWxsLWNsb2NrIHRpbWUgKGkuZS4gY3VycmVudFRpbWUoKSkgYW5kIG1vbm90b25pYyB0aW1l
IChpLmUuCi0vLyBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSkuIFRoaXMgaXMgYSB2ZXJ5
IGVmZmljaWVudCBjb25kaXRpb24gdmFyaWFibGUuIEl0IG9ubHkgcmVxdWlyZXMKLS8vIG9uZSBi
eXRlIG9mIG1lbW9yeS4gbm90aWZ5T25lKCkgYW5kIG5vdGlmeUFsbCgpIHJlcXVpcmUganVzdCBh
IGxvYWQgYW5kIGJyYW5jaCBmb3IgdGhlIGZhc3QKLS8vIGNhc2Ugd2hlcmUgbm8gdGhyZWFkIGlz
IHdhaXRpbmcuIFRoaXMgY29uZGl0aW9uIHZhcmlhYmxlLCB3aGVuIHVzZWQgd2l0aCBXVEY6Okxv
Y2ssIGNhbgotLy8gb3V0cGVyZm9ybSBhIHN5c3RlbSBjb25kaXRpb24gdmFyaWFibGUgYW5kIGxv
Y2sgYnkgdXAgdG8gNTh4LgotCi0vLyBUaGlzIGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1
Y3RvciBvciBkZXN0cnVjdG9yIHNvIHRoYXQgaXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6
ZWQuCi0vLyBVc2UgTG9jayBpbiBpbnN0YW5jZSB2YXJpYWJsZXMuCi1zdHJ1Y3QgQ29uZGl0aW9u
QmFzZSB7Ci0gICAgLy8gQ29uZGl0aW9uIHdpbGwgYWNjZXB0IGFueSBraW5kIG9mIHRpbWUgYW5k
IGNvbnZlcnQgaXQgaW50ZXJuYWxseSwgYnV0IHRoaXMgdHlwZWRlZiB0ZWxscwotICAgIC8vIHlv
dSB3aGF0IGtpbmQgb2YgdGltZSBDb25kaXRpb24gd291bGQgYmUgYWJsZSB0byB1c2Ugd2l0aG91
dCBjb252ZXJzaW9ucy4gSG93ZXZlciwgaWYgeW91Ci0gICAgLy8gYXJlIHVubGlrZWx5IHRvIGJl
IGFmZmVjdGVkIGJ5IHRoZSBjb3N0IG9mIGNvbnZlcnNpb25zLCBpdCBpcyBiZXR0ZXIgdG8gdXNl
IE1vbm90b25pY1RpbWUuCi0gICAgdHlwZWRlZiBQYXJraW5nTG90OjpUaW1lIFRpbWU7Ci0gICAg
Ci0gICAgLy8gV2FpdCBvbiBhIHBhcmtpbmcgcXVldWUgd2hpbGUgcmVsZWFzaW5nIHRoZSBnaXZl
biBsb2NrLiBJdCB3aWxsIHVubG9jayB0aGUgbG9jayBqdXN0IGJlZm9yZQotICAgIC8vIHBhcmtp
bmcsIGFuZCByZWxvY2sgaXQgdXBvbiB3YWtldXAuIFJldHVybnMgdHJ1ZSBpZiB3ZSB3b2tlIHVw
IGR1ZSB0byBzb21lIGNhbGwgdG8KLSAgICAvLyBub3RpZnlPbmUoKSBvciBub3RpZnlBbGwoKS4g
UmV0dXJucyBmYWxzZSBpZiB3ZSB3b2tlIHVwIGR1ZSB0byBhIHRpbWVvdXQuIE5vdGUgdGhhdCB0
aGlzIGZvcm0KLSAgICAvLyBvZiB3YWl0VW50aWwoKSBoYXMgc29tZSBxdWlya3M6Ci0gICAgLy8K
LSAgICAvLyBObyBzcHVyaW91cyB3YWtlLXVwOiBpbiBvcmRlciBmb3IgdGhpcyB0byByZXR1cm4g
YmVmb3JlIHRoZSB0aW1lb3V0LCBzb21lIG5vdGlmeU9uZSgpIG9yCi0gICAgLy8gbm90aWZ5QWxs
KCkgY2FsbCBtdXN0IGhhdmUgaGFwcGVuZWQuIE5vIHNjZW5hcmlvIG90aGVyIHRoYW4gdGltZW91
dCBvciBub3RpZnkgY2FuIGxlYWQgdG8gdGhpcwotICAgIC8vIG1ldGhvZCByZXR1cm5pbmcuIFRo
aXMgbWVhbnMsIGZvciBleGFtcGxlLCB0aGF0IHlvdSBjYW4ndCB1c2UgcHRocmVhZCBjYW5jZWxh
dGlvbiBvciBzaWduYWxzIHRvCi0gICAgLy8gY2F1c2UgZWFybHkgcmV0dXJuLgotICAgIC8vCi0g
ICAgLy8gUGFzdCB0aW1lb3V0OiBpdCdzIHBvc3NpYmxlIGZvciB3YWl0VW50aWwoKSB0byBiZSBj
YWxsZWQgd2l0aCBhIHRpbWVvdXQgaW4gdGhlIHBhc3QuIEluIHRoYXQKLSAgICAvLyBjYXNlLCB3
YWl0VW50aWwoKSB3aWxsIHN0aWxsIHJlbGVhc2UgdGhlIGxvY2sgYW5kIHJlYWNxdWlyZSBpdC4g
d2FpdFVudGlsKCkgd2lsbCBhbHdheXMgcmV0dXJuCi0gICAgLy8gZmFsc2UgaW4gdGhhdCBjYXNl
LiBUaGlzIGlzIHN1YnRseSBkaWZmZXJlbnQgZnJvbSBzb21lIHB0aHJlYWRfY29uZF90aW1lZHdh
aXQoKSBpbXBsZW1lbnRhdGlvbnMsCi0gICAgLy8gd2hpY2ggbWF5IG5vdCByZWxlYXNlIHRoZSBs
b2NrIGZvciBwYXN0IHRpbWVvdXQuIEJ1dCwgdGhpcyBiZWhhdmlvciBpcyBjb25zaXN0ZW50IHdp
dGggT3Blbkdyb3VwCi0gICAgLy8gZG9jdW1lbnRhdGlvbiBmb3IgdGltZWR3YWl0KCkuCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0VW50aWwoTG9ja1R5cGUm
IGxvY2ssIGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZW91dCkKLSAgICB7Ci0g
ICAgICAgIGJvb2wgcmVzdWx0OwotICAgICAgICBpZiAodGltZW91dCA8IHRpbWVvdXQubm93V2l0
aFNhbWVDbG9jaygpKSB7Ci0gICAgICAgICAgICBsb2NrLnVubG9jaygpOwotICAgICAgICAgICAg
cmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBQ
YXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxseSgKLSAgICAgICAgICAgICAgICAmbV9oYXNXYWl0
ZXJzLAotICAgICAgICAgICAgICAgIFt0aGlzXSAoKSAtPiBib29sIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gTGV0IGV2ZXJ5b25lIGtub3cgdGhhdCB3ZSB3aWxsIGJlIHdhaXRpbmcuIERvIHRo
aXMgd2hpbGUgd2UgaG9sZCB0aGUgcXVldWUgbG9jaywKLSAgICAgICAgICAgICAgICAgICAgLy8g
dG8gcHJldmVudCByYWNlcyB3aXRoIG5vdGlmeU9uZSgpLgotICAgICAgICAgICAgICAgICAgICBt
X2hhc1dhaXRlcnMuc3RvcmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgWyZsb2NrXSAoKSB7IGxvY2su
dW5sb2NrKCk7IH0sCi0gICAgICAgICAgICAgICAgdGltZW91dCkud2FzVW5wYXJrZWQ7Ci0gICAg
ICAgIH0KLSAgICAgICAgbG9jay5sb2NrKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotCi0gICAgLy8gV2FpdCB1bnRpbCB0aGUgZ2l2ZW4gcHJlZGljYXRlIGlzIHNhdGlzZmllZC4g
UmV0dXJucyB0cnVlIGlmIGl0IGlzIHNhdGlzZmllZCBpbiB0aGUgZW5kLgotICAgIC8vIE1heSBy
ZXR1cm4gZWFybHkgZHVlIHRvIHRpbWVvdXQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5
cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgYm9vbCB3YWl0VW50aWwoCi0gICAgICAgIExvY2tU
eXBlJiBsb2NrLCBjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQsIGNvbnN0
IEZ1bmN0b3ImIHByZWRpY2F0ZSkKLSAgICB7Ci0gICAgICAgIHdoaWxlICghcHJlZGljYXRlKCkp
IHsKLSAgICAgICAgICAgIGlmICghd2FpdFVudGlsKGxvY2ssIHRpbWVvdXQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBwcmVkaWNhdGUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICAvLyBXYWl0IHVudGlsIHRoZSBnaXZlbiBwcmVkaWNhdGUgaXMgc2F0
aXNmaWVkLiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgc2F0aXNmaWVkIGluIHRoZSBlbmQuCi0gICAg
Ly8gTWF5IHJldHVybiBlYXJseSBkdWUgdG8gdGltZW91dC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMb2NrVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KLSAgICBib29sIHdhaXRGb3IoCi0gICAgICAg
IExvY2tUeXBlJiBsb2NrLCBTZWNvbmRzIHJlbGF0aXZlVGltZW91dCwgY29uc3QgRnVuY3RvciYg
cHJlZGljYXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChsb2NrLCBNb25vdG9u
aWNUaW1lOjpub3coKSArIHJlbGF0aXZlVGltZW91dCwgcHJlZGljYXRlKTsKLSAgICB9Ci0gICAg
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci0gICAgYm9vbCB3YWl0Rm9yKExvY2tU
eXBlJiBsb2NrLCBTZWNvbmRzIHJlbGF0aXZlVGltZW91dCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB3YWl0VW50aWwobG9jaywgTW9ub3RvbmljVGltZTo6bm93KCkgKyByZWxhdGl2ZVRpbWVvdXQp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgotICAgIHZvaWQgd2Fp
dChMb2NrVHlwZSYgbG9jaykKLSAgICB7Ci0gICAgICAgIHdhaXRVbnRpbChsb2NrLCBUaW1lOjpp
bmZpbml0eSgpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlw
ZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIHdhaXQoTG9ja1R5cGUmIGxvY2ssIGNvbnN0IEZ1bmN0
b3ImIHByZWRpY2F0ZSkKLSAgICB7Ci0gICAgICAgIHdoaWxlICghcHJlZGljYXRlKCkpCi0gICAg
ICAgICAgICB3YWl0KGxvY2spOwotICAgIH0KLQotICAgIC8vIE5vdGUgdGhhdCB0aGlzIG1ldGhv
ZCBpcyBleHRyZW1lbHkgZmFzdCB3aGVuIG5vYm9keSBpcyB3YWl0aW5nLiBJdCBpcyBub3QgbmVj
ZXNzYXJ5IHRvIHRyeSB0bwotICAgIC8vIGF2b2lkIGNhbGxpbmcgdGhpcyBtZXRob2QuIFRoaXMg
cmV0dXJucyB0cnVlIGlmIHNvbWVvbmUgd2FzIGFjdHVhbGx5IHdva2VuIHVwLgotICAgIGJvb2wg
bm90aWZ5T25lKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9oYXNXYWl0ZXJzLmxvYWQoKSkgewot
ICAgICAgICAgICAgLy8gQXQgdGhpcyBleGFjdCBpbnN0YW50LCB0aGVyZSBpcyBub2JvZHkgd2Fp
dGluZyBvbiB0aGlzIGNvbmRpdGlvbi4gVGhlIHdheSB0byB2aXN1YWxpemUKLSAgICAgICAgICAg
IC8vIHRoaXMgaXMgdGhhdCBpZiB1bnBhcmtPbmUoKSByYW4gdG8gY29tcGxldGlvbiB3aXRob3V0
IG9ic3RydWN0aW9ucyBhdCB0aGlzIG1vbWVudCwgaXQKLSAgICAgICAgICAgIC8vIHdvdWxkbid0
IHdha2UgYW55b25lIHVwLiBIZW5jZSwgd2UgaGF2ZSBub3RoaW5nIHRvIGRvIQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIGRpZE5v
dGlmeVRocmVhZCA9IGZhbHNlOwotICAgICAgICBQYXJraW5nTG90Ojp1bnBhcmtPbmUoCi0gICAg
ICAgICAgICAmbV9oYXNXYWl0ZXJzLAotICAgICAgICAgICAgWyZdIChQYXJraW5nTG90OjpVbnBh
cmtSZXN1bHQgcmVzdWx0KSAtPiBpbnRwdHJfdCB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1
bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQotICAgICAgICAgICAgICAgICAgICBtX2hhc1dhaXRlcnMu
c3RvcmUoZmFsc2UpOwotICAgICAgICAgICAgICAgIGRpZE5vdGlmeVRocmVhZCA9IHJlc3VsdC5k
aWRVbnBhcmtUaHJlYWQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgcmV0dXJuIGRpZE5vdGlmeVRocmVhZDsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBub3RpZnlBbGwoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2hhc1dhaXRlcnMubG9hZCgpKSB7
Ci0gICAgICAgICAgICAvLyBTZWUgYWJvdmUuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBJdCdzIHRvdGFsbHkgc2FmZSBmb3IgdXMgdG8gc2V0IHRoaXMgdG8g
ZmFsc2Ugd2l0aG91dCBhbnkgbG9ja2luZywgYmVjYXVzZSB0aGlzIHRocmVhZCBpcwotICAgICAg
ICAvLyBndWFyYW50ZWVkIHRvIHRoZW4gdW5wYXJrQWxsKCkgYW55d2F5LiBTbywgaWYgdGhlcmUg
aXMgYSByYWNlIHdpdGggc29tZSB0aHJlYWQgY2FsbGluZwotICAgICAgICAvLyB3YWl0KCkganVz
dCBiZWZvcmUgdGhpcyBzdG9yZSBoYXBwZW5zLCB0aGF0IHRocmVhZCBpcyBndWFyYW50ZWVkIHRv
IGJlIGF3b2tlbiBieSB0aGUgY2FsbCB0bwotICAgICAgICAvLyB1bnBhcmtBbGwoKSwgYmVsb3cu
Ci0gICAgICAgIG1faGFzV2FpdGVycy5zdG9yZShmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICBQ
YXJraW5nTG90Ojp1bnBhcmtBbGwoJm1faGFzV2FpdGVycyk7Ci0gICAgfQotICAgIAotcHJvdGVj
dGVkOgotICAgIEF0b21pYzxib29sPiBtX2hhc1dhaXRlcnM7Ci19OwotCi1jbGFzcyBDb25kaXRp
b24gOiBwdWJsaWMgQ29uZGl0aW9uQmFzZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29u
ZGl0aW9uKTsKLXB1YmxpYzoKLSAgICBDb25kaXRpb24oKQotICAgIHsKLSAgICAgICAgbV9oYXNX
YWl0ZXJzLnN0b3JlKGZhbHNlKTsKLSAgICB9Ci19OwotCi10eXBlZGVmIENvbmRpdGlvbkJhc2Ug
U3RhdGljQ29uZGl0aW9uOwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpDb25k
aXRpb247Ci11c2luZyBXVEY6OlN0YXRpY0NvbmRpdGlvbjsKLQotI2VuZGlmIC8vIFdURl9Db25k
aXRpb25faAotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
Q3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4ZTlmMjcxZjFjNmIwZjA3YTI1OWM5YzIzZjhiMmI3ZWMwYmRhNDIw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5o
CisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBXVEZfQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXJfaAotI2RlZmluZSBX
VEZfQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXJfaAotCi0jaW5jbHVkZSA8c3RkaW50Lmg+
Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1XVEZfRVhQT1JUX1BSSVZBVEUgdWludDMyX3QgY3J5cHRv
Z3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7Ci0K
LX0KLQotdXNpbmcgV1RGOjpjcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlcjsKLXVzaW5nIFdU
Rjo6Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXM7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0N1cnJlbnRUaW1lLmNwcCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9DdXJyZW50VGltZS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDcxYWZlYmU0NDE1MjdhZDg5YTIwNmY0OTk1NWNjNzNiYmVkN2Rl
MTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0N1cnJlbnRUaW1lLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDMyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3Jj
aCBNb2JpbGUsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3
endhcmljaEB1d2F0ZXJsb28uY2E+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkN1cnJlbnRU
aW1lLmgiCi0KLSNpbmNsdWRlICJDb25kaXRpb24uaCIKLSNpbmNsdWRlICJMb2NrLmgiCi0KLSNp
ZiBPUyhEQVJXSU4pCi0jaW5jbHVkZSA8bWFjaC9tYWNoLmg+Ci0jaW5jbHVkZSA8bWFjaC9tYWNo
X3RpbWUuaD4KLSNpbmNsdWRlIDxtdXRleD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VsaWYg
T1MoV0lORE9XUykKLQotLy8gV2luZG93cyBpcyBmaXJzdCBzaW5jZSB3ZSB3YW50IHRvIHVzZSBo
aXJlcyB0aW1lcnMsIGRlc3BpdGUgVVNFKENGKQotLy8gYmVpbmcgZGVmaW5lZC4KLS8vIElmIGRl
ZmluZWQsIFdJTjMyX0xFQU5fQU5EX01FQU4gZGlzYWJsZXMgdGltZUJlZ2luUGVyaW9kL3RpbWVF
bmRQZXJpb2QuCi0jdW5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8dGlt
ZS5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoR0xJ
QikKLSNpbmNsdWRlIDxnbGliLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLSNpZiBP
UyhXSU5ET1dTKQotCi0vLyBOdW1iZXIgb2YgMTAwIG5hbm9zZWNvbmQgYmV0d2VlbiBKYW51YXJ5
IDEsIDE2MDEgYW5kIEphbnVhcnkgMSwgMTk3MC4KLXN0YXRpYyBjb25zdCBVTE9OR0xPTkcgZXBv
Y2hCaWFzID0gMTE2NDQ0NzM2MDAwMDAwMDAwVUxMOwotc3RhdGljIGNvbnN0IGRvdWJsZSBodW5k
cmVkc09mTmFub3NlY29uZHNQZXJNaWxsaXNlY29uZCA9IDEwMDAwOwotCi1zdGF0aWMgZG91Ymxl
IGxvd1Jlc1VUQ1RpbWUoKQotewotICAgIEZJTEVUSU1FIGZpbGVUaW1lOwotCi0gICAgR2V0U3lz
dGVtVGltZUFzRmlsZVRpbWUoJmZpbGVUaW1lKTsKLQotICAgIC8vIEFzIHBlciBXaW5kb3dzIGRv
Y3VtZW50YXRpb24gZm9yIEZJTEVUSU1FLCBjb3B5IHRoZSByZXN1bHRpbmcgRklMRVRJTUUgc3Ry
dWN0dXJlIHRvIGEKLSAgICAvLyBVTEFSR0VfSU5URUdFUiBzdHJ1Y3R1cmUgdXNpbmcgbWVtY3B5
ICh1c2luZyBtZW1jcHkgaW5zdGVhZCBvZiBkaXJlY3QgYXNzaWdubWVudCBjYW4KLSAgICAvLyBw
cmV2ZW50IGFsaWdubWVudCBmYXVsdHMgb24gNjQtYml0IFdpbmRvd3MpLgotCi0gICAgVUxBUkdF
X0lOVEVHRVIgZGF0ZVRpbWU7Ci0gICAgbWVtY3B5KCZkYXRlVGltZSwgJmZpbGVUaW1lLCBzaXpl
b2YoZGF0ZVRpbWUpKTsKLQotICAgIC8vIFdpbmRvd3MgZmlsZSB0aW1lcyBhcmUgaW4gMTAwcyBv
ZiBuYW5vc2Vjb25kcy4KLSAgICByZXR1cm4gKGRhdGVUaW1lLlF1YWRQYXJ0IC0gZXBvY2hCaWFz
KSAvIGh1bmRyZWRzT2ZOYW5vc2Vjb25kc1Blck1pbGxpc2Vjb25kOwotfQotCi0jaWYgVVNFKFFV
RVJZX1BFUkZPUk1BTkNFX0NPVU5URVIpCi0KLXN0YXRpYyBMQVJHRV9JTlRFR0VSIHFwY0ZyZXF1
ZW5jeTsKLXN0YXRpYyBib29sIHN5bmNlZFRpbWU7Ci0KLXN0YXRpYyBkb3VibGUgaGlnaFJlc1Vw
VGltZSgpCi17Ci0gICAgLy8gV2UgdXNlIFFQQywgYnV0IG9ubHkgYWZ0ZXIgc2FuaXR5IGNoZWNr
aW5nIGl0cyByZXN1bHQsIGR1ZSB0byBidWdzOgotICAgIC8vIGh0dHA6Ly9zdXBwb3J0Lm1pY3Jv
c29mdC5jb20va2IvMjc0MzIzCi0gICAgLy8gaHR0cDovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9r
Yi84OTU5ODAKLSAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
bXM2NDQ5MDQuYXNweCAoIi4uLnlvdSBjYW4gZ2V0IGRpZmZlcmVudCByZXN1bHRzIG9uIGRpZmZl
cmVudCBwcm9jZXNzb3JzIGR1ZSB0byBidWdzIGluIHRoZSBiYXNpYyBpbnB1dC9vdXRwdXQgc3lz
dGVtIChCSU9TKSBvciB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgKEhBTCkuIgotCi0g
ICAgc3RhdGljIExBUkdFX0lOVEVHRVIgcXBjTGFzdDsKLSAgICBzdGF0aWMgRFdPUkQgdGlja0Nv
dW50TGFzdDsKLSAgICBzdGF0aWMgYm9vbCBpbml0ZWQ7Ci0KLSAgICBMQVJHRV9JTlRFR0VSIHFw
YzsKLSAgICBRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigmcXBjKTsKLSNpZiBkZWZpbmVkKF9NX0lY
ODYpIHx8IGRlZmluZWQoX19pMzg2X18pCi0gICAgRFdPUkQgdGlja0NvdW50ID0gR2V0VGlja0Nv
dW50KCk7Ci0jZWxzZQotICAgIFVMT05HTE9ORyB0aWNrQ291bnQgPSBHZXRUaWNrQ291bnQ2NCgp
OwotI2VuZGlmCi0KLSAgICBpZiAoaW5pdGVkKSB7Ci0gICAgICAgIF9faW50NjQgcXBjRWxhcHNl
ZCA9ICgocXBjLlF1YWRQYXJ0IC0gcXBjTGFzdC5RdWFkUGFydCkgKiAxMDAwKSAvIHFwY0ZyZXF1
ZW5jeS5RdWFkUGFydDsKLSAgICAgICAgX19pbnQ2NCB0aWNrQ291bnRFbGFwc2VkOwotICAgICAg
ICBpZiAodGlja0NvdW50ID49IHRpY2tDb3VudExhc3QpCi0gICAgICAgICAgICB0aWNrQ291bnRF
bGFwc2VkID0gKHRpY2tDb3VudCAtIHRpY2tDb3VudExhc3QpOwotICAgICAgICBlbHNlIHsKLSNp
ZiBDT01QSUxFUihNSU5HVykKLSAgICAgICAgICAgIF9faW50NjQgdGlja0NvdW50TGFyZ2UgPSB0
aWNrQ291bnQgKyAweDEwMDAwMDAwMFVMTDsKLSNlbHNlCi0gICAgICAgICAgICBfX2ludDY0IHRp
Y2tDb3VudExhcmdlID0gdGlja0NvdW50ICsgMHgxMDAwMDAwMDBJNjQ7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIHRpY2tDb3VudEVsYXBzZWQgPSB0aWNrQ291bnRMYXJnZSAtIHRpY2tDb3VudExhc3Q7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBmb3JjZSBhIHJlLXN5bmMgaWYgUXVlcnlQZXJmb3Jt
YW5jZUNvdW50ZXIgZGlmZmVycyBmcm9tIEdldFRpY2tDb3VudCBieSBtb3JlIHRoYW4gNTAwbXMu
Ci0gICAgICAgIC8vICg1MDBtcyB2YWx1ZSBpcyBmcm9tIGh0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29m
dC5jb20va2IvMjc0MzIzKQotICAgICAgICBfX2ludDY0IGRpZmYgPSB0aWNrQ291bnRFbGFwc2Vk
IC0gcXBjRWxhcHNlZDsKLSAgICAgICAgaWYgKGRpZmYgPiA1MDAgfHwgZGlmZiA8IC01MDApCi0g
ICAgICAgICAgICBzeW5jZWRUaW1lID0gZmFsc2U7Ci0gICAgfSBlbHNlCi0gICAgICAgIGluaXRl
ZCA9IHRydWU7Ci0KLSAgICBxcGNMYXN0ID0gcXBjOwotICAgIHRpY2tDb3VudExhc3QgPSB0aWNr
Q291bnQ7Ci0KLSAgICByZXR1cm4gKDEwMDAuMCAqIHFwYy5RdWFkUGFydCkgLyBzdGF0aWNfY2Fz
dDxkb3VibGU+KHFwY0ZyZXF1ZW5jeS5RdWFkUGFydCk7Ci19Ci0KLXN0YXRpYyBib29sIHFwY0F2
YWlsYWJsZSgpCi17Ci0gICAgc3RhdGljIGJvb2wgYXZhaWxhYmxlOwotICAgIHN0YXRpYyBib29s
IGNoZWNrZWQ7Ci0KLSAgICBpZiAoY2hlY2tlZCkKLSAgICAgICAgcmV0dXJuIGF2YWlsYWJsZTsK
LQotICAgIGF2YWlsYWJsZSA9IFF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVuY3koJnFwY0ZyZXF1ZW5j
eSk7Ci0gICAgY2hlY2tlZCA9IHRydWU7Ci0gICAgcmV0dXJuIGF2YWlsYWJsZTsKLX0KLQotZG91
YmxlIGN1cnJlbnRUaW1lKCkKLXsKLSAgICAvLyBVc2UgYSBjb21iaW5hdGlvbiBvZiBmdGltZSBh
bmQgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIuCi0gICAgLy8gZnRpbWUgcmV0dXJucyB0aGUgaW5m
b3JtYXRpb24gd2Ugd2FudCwgYnV0IGRvZXNuJ3QgaGF2ZSBzdWZmaWNpZW50IHJlc29sdXRpb24u
Ci0gICAgLy8gUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIgaGFzIGhpZ2ggcmVzb2x1dGlvbiwgYnV0
IGlzIG9ubHkgdXNhYmxlIHRvIG1lYXN1cmUgdGltZSBpbnRlcnZhbHMuCi0gICAgLy8gVG8gY29t
YmluZSB0aGVtLCB3ZSBjYWxsIGZ0aW1lIGFuZCBRdWVyeVBlcmZvcm1hbmNlQ291bnRlciBpbml0
aWFsbHkuIExhdGVyIGNhbGxzIHdpbGwgdXNlIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyCi0gICAg
Ly8gYnkgaXRzZWxmLCBhZGRpbmcgdGhlIGRlbHRhIHRvIHRoZSBzYXZlZCBmdGltZS4gIFdlIHBl
cmlvZGljYWxseSByZS1zeW5jIHRvIGNvcnJlY3QgZm9yIGRyaWZ0LgotICAgIHN0YXRpYyBkb3Vi
bGUgc3luY0xvd1Jlc1VUQ1RpbWU7Ci0gICAgc3RhdGljIGRvdWJsZSBzeW5jSGlnaFJlc1VwVGlt
ZTsKLSAgICBzdGF0aWMgZG91YmxlIGxhc3RVVENUaW1lOwotCi0gICAgZG91YmxlIGxvd1Jlc1Rp
bWUgPSBsb3dSZXNVVENUaW1lKCk7Ci0KLSAgICBpZiAoIXFwY0F2YWlsYWJsZSgpKQotICAgICAg
ICByZXR1cm4gbG93UmVzVGltZSAvIDEwMDAuMDsKLQotICAgIGRvdWJsZSBoaWdoUmVzVGltZSA9
IGhpZ2hSZXNVcFRpbWUoKTsKLQotICAgIGlmICghc3luY2VkVGltZSkgewotICAgICAgICB0aW1l
QmVnaW5QZXJpb2QoMSk7IC8vIGluY3JlYXNlIHRpbWUgcmVzb2x1dGlvbiBhcm91bmQgbG93LXJl
cyB0aW1lIGdldHRlcgotICAgICAgICBzeW5jTG93UmVzVVRDVGltZSA9IGxvd1Jlc1RpbWUgPSBs
b3dSZXNVVENUaW1lKCk7Ci0gICAgICAgIHRpbWVFbmRQZXJpb2QoMSk7IC8vIHJlc3RvcmUgdGlt
ZSByZXNvbHV0aW9uCi0gICAgICAgIHN5bmNIaWdoUmVzVXBUaW1lID0gaGlnaFJlc1RpbWU7Ci0g
ICAgICAgIHN5bmNlZFRpbWUgPSB0cnVlOwotICAgIH0KLQotICAgIGRvdWJsZSBoaWdoUmVzRWxh
cHNlZCA9IGhpZ2hSZXNUaW1lIC0gc3luY0hpZ2hSZXNVcFRpbWU7Ci0gICAgZG91YmxlIHV0YyA9
IHN5bmNMb3dSZXNVVENUaW1lICsgaGlnaFJlc0VsYXBzZWQ7Ci0KLSAgICAvLyBmb3JjZSBhIGNs
b2NrIHJlLXN5bmMgaWYgd2UndmUgZHJpZnRlZAotICAgIGRvdWJsZSBsb3dSZXNFbGFwc2VkID0g
bG93UmVzVGltZSAtIHN5bmNMb3dSZXNVVENUaW1lOwotICAgIGNvbnN0IGRvdWJsZSBtYXhpbXVt
QWxsb3dlZERyaWZ0TXNlYyA9IDE1LjYyNSAqIDIuMDsgLy8gMnggdGhlIHR5cGljYWwgbG93LXJl
cyBhY2N1cmFjeQotICAgIGlmIChmYWJzKGhpZ2hSZXNFbGFwc2VkIC0gbG93UmVzRWxhcHNlZCkg
PiBtYXhpbXVtQWxsb3dlZERyaWZ0TXNlYykKLSAgICAgICAgc3luY2VkVGltZSA9IGZhbHNlOwot
Ci0gICAgLy8gbWFrZSBzdXJlIHRpbWUgZG9lc24ndCBydW4gYmFja3dhcmRzIChvbmx5IGNvcnJl
Y3QgaWYgZGlmZmVyZW5jZSBpcyA8IDIgc2Vjb25kcywgc2luY2UgRFNUIG9yIGNsb2NrIGNoYW5n
ZXMgY291bGQgb2NjdXIpCi0gICAgY29uc3QgZG91YmxlIGJhY2t3YXJkVGltZUxpbWl0ID0gMjAw
MC4wOwotICAgIGlmICh1dGMgPCBsYXN0VVRDVGltZSAmJiAobGFzdFVUQ1RpbWUgLSB1dGMpIDwg
YmFja3dhcmRUaW1lTGltaXQpCi0gICAgICAgIHJldHVybiBsYXN0VVRDVGltZSAvIDEwMDAuMDsK
LSAgICBsYXN0VVRDVGltZSA9IHV0YzsKLSAgICByZXR1cm4gdXRjIC8gMTAwMC4wOwotfQotCi0j
ZWxzZQotCi1kb3VibGUgY3VycmVudFRpbWUoKQotewotICAgIHN0YXRpYyBib29sIGluaXQgPSBm
YWxzZTsKLSAgICBzdGF0aWMgZG91YmxlIGxhc3RUaW1lOwotICAgIHN0YXRpYyBEV09SRCBsYXN0
VGlja0NvdW50OwotICAgIGlmICghaW5pdCkgewotICAgICAgICBsYXN0VGltZSA9IGxvd1Jlc1VU
Q1RpbWUoKTsKLSAgICAgICAgbGFzdFRpY2tDb3VudCA9IEdldFRpY2tDb3VudCgpOwotICAgICAg
ICBpbml0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGxhc3RUaW1lOwotICAgIH0KLQotICAgIERX
T1JEIHRpY2tDb3VudE5vdyA9IEdldFRpY2tDb3VudCgpOwotICAgIERXT1JEIGVsYXBzZWQgPSB0
aWNrQ291bnROb3cgLSBsYXN0VGlja0NvdW50OwotICAgIGRvdWJsZSB0aW1lTm93ID0gbGFzdFRp
bWUgKyAoZG91YmxlKWVsYXBzZWQgLyAxMDAwLjsKLSAgICBpZiAoZWxhcHNlZCA+PSAweDdGRkZG
RkZGKSB7Ci0gICAgICAgIGxhc3RUaW1lID0gdGltZU5vdzsKLSAgICAgICAgbGFzdFRpY2tDb3Vu
dCA9IHRpY2tDb3VudE5vdzsKLSAgICB9Ci0gICAgcmV0dXJuIHRpbWVOb3c7Ci19Ci0KLSNlbmRp
ZiAvLyBVU0UoUVVFUllfUEVSRk9STUFOQ0VfQ09VTlRFUikKLQotI2VsaWYgVVNFKEdMSUIpCi0K
LS8vIE5vdGU6IEdUSyBvbiBXaW5kb3dzIHdpbGwgcGljayB1cCB0aGUgUExBVEZPUk0oV0lOKSBp
bXBsZW1lbnRhdGlvbiBhYm92ZSB3aGljaCBwcm92aWRlcwotLy8gYmV0dGVyIGFjY3VyYWN5IGNv
bXBhcmVkIHdpdGggV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBnX2dldF9jdXJyZW50X3RpbWU6
Ci0vLyAoaHR0cDovL3d3dy5nb29nbGUuY29tL2NvZGVzZWFyY2gvcD9obD1lbiNISG5OUmprczF0
MC9nbGliLTIuNS4yL2dsaWIvZ21haW4uYyZxPWdfZ2V0X2N1cnJlbnRfdGltZSkuCi0vLyBOb24t
V2luZG93cyBHVEsgYnVpbGRzIGNvdWxkIHVzZSBnZXR0aW1lb2ZkYXkoKSBkaXJlY3RseSBidXQg
Zm9yIHRoZSBzYWtlIG9mIGNvbnNpc3RlbmN5IGxldHMgdXNlIEdUSyBmdW5jdGlvbi4KLWRvdWJs
ZSBjdXJyZW50VGltZSgpCi17Ci0gICAgR1RpbWVWYWwgbm93OwotICAgIGdfZ2V0X2N1cnJlbnRf
dGltZSgmbm93KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihub3cudHZfc2VjKSAr
IHN0YXRpY19jYXN0PGRvdWJsZT4obm93LnR2X3VzZWMgLyAxMDAwMDAwLjApOwotfQotCi0jZWxz
ZQotCi1kb3VibGUgY3VycmVudFRpbWUoKQotewotICAgIHN0cnVjdCB0aW1ldmFsIG5vdzsKLSAg
ICBnZXR0aW1lb2ZkYXkoJm5vdywgMCk7Ci0gICAgcmV0dXJuIG5vdy50dl9zZWMgKyBub3cudHZf
dXNlYyAvIDEwMDAwMDAuMDsKLX0KLQotI2VuZGlmCi0KLSNpZiBVU0UoR0xJQikKLQotZG91Ymxl
IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGRvdWJsZT4oZ19nZXRfbW9ub3RvbmljX3RpbWUoKSAvIDEwMDAwMDAuMCk7Ci19Ci0KLSNlbGlm
IE9TKERBUldJTikKLQotZG91YmxlIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpCi17Ci0g
ICAgLy8gQmFzZWQgb24gbGlzdGluZyAjMiBmcm9tIEFwcGxlIFFBIDEzOTgsIGJ1dCBtb2RpZmll
ZCB0byBiZSB0aHJlYWQtc2FmZS4KLSAgICBzdGF0aWMgbWFjaF90aW1lYmFzZV9pbmZvX2RhdGFf
dCB0aW1lYmFzZUluZm87Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVUaW1l
ck9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVUaW1lck9uY2VGbGFnLCBb
XSB7Ci0gICAgICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWVi
YXNlSW5mbyk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoa3IsIGtyID09IEtFUk5fU1VDQ0VTUyk7
Ci0gICAgICAgIEFTU0VSVCh0aW1lYmFzZUluZm8uZGVub20pOwotICAgIH0pOwotCi0gICAgcmV0
dXJuIChtYWNoX2Fic29sdXRlX3RpbWUoKSAqIHRpbWViYXNlSW5mby5udW1lcikgLyAoMS4wZTkg
KiB0aW1lYmFzZUluZm8uZGVub20pOwotfQotCi0jZWxzZQotCi1kb3VibGUgbW9ub3RvbmljYWxs
eUluY3JlYXNpbmdUaW1lKCkKLXsKLSAgICBzdGF0aWMgZG91YmxlIGxhc3RUaW1lID0gMDsKLSAg
ICBkb3VibGUgY3VycmVudFRpbWVOb3cgPSBjdXJyZW50VGltZSgpOwotICAgIGlmIChjdXJyZW50
VGltZU5vdyA8IGxhc3RUaW1lKQotICAgICAgICByZXR1cm4gbGFzdFRpbWU7Ci0gICAgbGFzdFRp
bWUgPSBjdXJyZW50VGltZU5vdzsKLSAgICByZXR1cm4gY3VycmVudFRpbWVOb3c7Ci19Ci0KLSNl
bmRpZgotCi1zdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIGN1cnJlbnRDUFVUaW1lKCkKLXsKLSNp
ZiBPUyhEQVJXSU4pCi0gICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBpbmZvQ291bnQgPSBUSFJF
QURfQkFTSUNfSU5GT19DT1VOVDsKLSAgICB0aHJlYWRfYmFzaWNfaW5mb19kYXRhX3QgaW5mbzsK
LQotICAgIC8vIEdldCB0aHJlYWQgaW5mb3JtYXRpb24KLSAgICBtYWNoX3BvcnRfdCB0aHJlYWRQ
b3J0ID0gbWFjaF90aHJlYWRfc2VsZigpOwotICAgIHRocmVhZF9pbmZvKHRocmVhZFBvcnQsIFRI
UkVBRF9CQVNJQ19JTkZPLCByZWludGVycHJldF9jYXN0PHRocmVhZF9pbmZvX3Q+KCZpbmZvKSwg
JmluZm9Db3VudCk7Ci0gICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwg
dGhyZWFkUG9ydCk7Ci0KLSAgICByZXR1cm4gc3RkOjpjaHJvbm86OnNlY29uZHMoaW5mby51c2Vy
X3RpbWUuc2Vjb25kcyArIGluZm8uc3lzdGVtX3RpbWUuc2Vjb25kcykgKyBzdGQ6OmNocm9ubzo6
bWljcm9zZWNvbmRzKGluZm8udXNlcl90aW1lLm1pY3Jvc2Vjb25kcyArIGluZm8uc3lzdGVtX3Rp
bWUubWljcm9zZWNvbmRzKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgdW5pb24gewotICAgICAg
ICBGSUxFVElNRSBmaWxlVGltZTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGZpbGVUaW1l
QXNMb25nOwotICAgIH0gdXNlclRpbWUsIGtlcm5lbFRpbWU7Ci0gICAgCi0gICAgLy8gR2V0VGhy
ZWFkVGltZXMgd29uJ3QgYWNjZXB0IG51bGwgYXJndW1lbnRzIHNvIHdlIHBhc3MgdGhlc2UgZXZl
biB0aG91Z2gKLSAgICAvLyB0aGV5J3JlIG5vdCB1c2VkLgotICAgIEZJTEVUSU1FIGNyZWF0aW9u
VGltZSwgZXhpdFRpbWU7Ci0gICAgCi0gICAgR2V0VGhyZWFkVGltZXMoR2V0Q3VycmVudFRocmVh
ZCgpLCAmY3JlYXRpb25UaW1lLCAmZXhpdFRpbWUsICZrZXJuZWxUaW1lLmZpbGVUaW1lLCAmdXNl
clRpbWUuZmlsZVRpbWUpOwotCi0gICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMo
KHVzZXJUaW1lLmZpbGVUaW1lQXNMb25nICsga2VybmVsVGltZS5maWxlVGltZUFzTG9uZykgLyAx
MCk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmV0dXJuIHRoZSB0aW1lIHRoZSBj
dXJyZW50IHRocmVhZCBoYXMgc3BlbnQgZXhlY3V0aW5nLgotCi0gICAgc3RhdGljIGF1dG8gZmly
c3RUaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7Ci0gICAgcmV0dXJuIHN0
ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHM+KHN0ZDo6
Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIC0gZmlyc3RUaW1lKTsKLSNlbmRpZgotfQotCi12
b2lkIHNsZWVwKGRvdWJsZSB2YWx1ZSkKLXsKLSAgICAvLyBJdCdzIHZlcnkgY2hhbGxlbmdpbmcg
dG8gZmluZCBwb3J0YWJsZSB3YXlzIG9mIHNsZWVwaW5nIGZvciBsZXNzIHRoYW4gYSBzZWNvbmQu
IE9uIFVOSVgsIHlvdSB3YW50IHRvCi0gICAgLy8gdXNlIHVzbGVlcCgpIGJ1dCBpdCdzIGhhcmQg
dG8gI2luY2x1ZGUgaXQgaW4gYSBwb3J0YWJsZSB3YXkgKHlvdSdkIHRoaW5rIGl0J3MgaW4gdW5p
c3RkLmgsIGJ1dCB0aGVuCi0gICAgLy8geW91J2QgYmUgd3Jvbmcgb24gc29tZSBPU1ggU0RLcyku
IEFsc28sIHVzbGVlcCgpIHdvbid0IHNhdmUgeW91IG9uIFdpbmRvd3MuIEhlbmNlLCBib3R0b21p
bmcgb3V0IGluCi0gICAgLy8gbG9jayBjb2RlLCB3aGljaCBhbHJlYWR5IHNvbHZlcyB0aGUgc2xl
ZXBpbmcgcHJvYmxlbSwgaXMgcHJvYmFibHkgZm9yIHRoZSBiZXN0LgotICAgIAotICAgIExvY2sg
ZmFrZUxvY2s7Ci0gICAgQ29uZGl0aW9uIGZha2VDb25kaXRpb247Ci0gICAgTG9ja0hvbGRlciBm
YWtlTG9ja2VyKGZha2VMb2NrKTsKLSAgICBmYWtlQ29uZGl0aW9uLndhaXRGb3IoZmFrZUxvY2ss
IFNlY29uZHModmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvQ3VycmVudFRpbWUuaCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9DdXJyZW50VGltZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3NGIyMzZmNzkxODJiN2U1ZTRkZGZhZjU3Y2U4MjMxMmM1NGVhZDQ3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9DdXJyZW50VGltZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
ODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBDdXJyZW50VGltZV9oCi0jZGVmaW5lIEN1cnJlbnRUaW1lX2gKLQot
I2luY2x1ZGUgPGNocm9ubz4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewot
Ci0vLyBSZXR1cm5zIHRoZSBjdXJyZW50IFVUQyB0aW1lIGluIHNlY29uZHMsIGNvdW50ZWQgZnJv
bSBKYW51YXJ5IDEsIDE5NzAuCi0vLyBQcmVjaXNpb24gdmFyaWVzIGRlcGVuZGluZyBvbiBwbGF0
Zm9ybSBidXQgaXMgdXN1YWxseSBhcyBnb29kIG9yIGJldHRlcgotLy8gdGhhbiBhIG1pbGxpc2Vj
b25kLgotLy8gVXNlIHRoaXMgZnVuY3Rpb24gb25seSBpZiB3YWxsIGNsb2NrIHRpbWUgaXMgbmVl
ZGVkLiBGb3IgZWxhcHNlZCB0aW1lCi0vLyBtZWFzdXJlbWVudCB1c2UgbW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCkgaW5zdGVhZC4KLVdURl9FWFBPUlRfUFJJVkFURSBkb3VibGUgY3VycmVu
dFRpbWUoKTsKLQotLy8gU2FtZSB0aGluZywgaW4gbWlsbGlzZWNvbmRzLgotaW5saW5lIGRvdWJs
ZSBjdXJyZW50VGltZU1TKCkKLXsKLSAgICByZXR1cm4gY3VycmVudFRpbWUoKSAqIDEwMDAuMDsK
LX0KLQotLy8gUHJvdmlkZXMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgdGltZSBpbiBzZWNv
bmRzIHNpbmNlIGFuIGFyYml0cmFyeSBwb2ludCBpbiB0aGUgcGFzdC4KLS8vIE9uIHVuc3VwcG9y
dGVkIHBsYXRmb3JtcywgdGhpcyBmdW5jdGlvbiBvbmx5IGd1YXJhbnRlZXMgdGhlIHJlc3VsdCB3
aWxsIGJlIG5vbi1kZWNyZWFzaW5nLgotLy8gUmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaW5jcmVh
c2VzIG1vbm90b25pY2FsbHkgZXZlbiB3aGVuIGNsb2NrIHRpbWUgZ29lcyBiYWNrIGR1ZSB0bwot
Ly8gTlRQIG9yIG1hbnVhbCBhZGp1c3RtZW50cywgc28gaXQgaXMgYmV0dGVyIHN1aXRlZCBmb3Ig
ZWxhcHNlZCB0aW1lIG1lYXN1cmVtZW50LgotV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBtb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKLQotaW5saW5lIGRvdWJsZSBtb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWVNUygpCi17Ci0gICAgcmV0dXJuIG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpICogMTAwMC4wOwotfQotCi0vLyBSZXR1cm5zIHRoZSBjdXJyZW50IENQVSB0aW1lIG9m
IHRoZSBjdXJyZW50IHRocmVhZC4KLS8vIFByZWNpc2lvbiB2YXJpZXMgZGVwZW5kaW5nIG9uIHBs
YXRmb3JtIGJ1dCBpcyB1c3VhbGx5IGFzIGdvb2Qgb3IgYmV0dGVyCi0vLyB0aGFuIGEgbWlsbGlz
ZWNvbmQuCi1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBjdXJy
ZW50Q1BVVGltZSgpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcChkb3VibGUpOwot
Ci1pbmxpbmUgdm9pZCBzbGVlcE1TKGRvdWJsZSB2YWx1ZSkKLXsKLSAgICBzbGVlcCh2YWx1ZSAv
IDEwMDAuMCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OmN1cnJlbnRD
UFVUaW1lOwotdXNpbmcgV1RGOjpjdXJyZW50VGltZTsKLXVzaW5nIFdURjo6Y3VycmVudFRpbWVN
UzsKLXVzaW5nIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lOwotdXNpbmcgV1RGOjpt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUzsKLXVzaW5nIFdURjo6c2xlZXA7Ci11c2luZyBX
VEY6OnNsZWVwTVM7Ci0KLSNlbmRpZiAvLyBDdXJyZW50VGltZV9oCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRGF0YUxvZy5jcHAgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvRGF0YUxvZy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDY4NDgwOTFhZjcyOGQxYmYzMGZkMzkzZmZhY2JiNWQ0ZTdhZGYzNDcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL0RhdGFMb2cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFMb2cuaCIKLSNpbmNsdWRlIDxzdGRhcmcuaD4K
LSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVByaW50U3RyZWFtLmg+Ci0j
aW5jbHVkZSA8d3RmL0xvY2tlZFByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL1Byb2Nlc3NJ
RC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDxtdXRleD4KLSNpbmNs
dWRlIDx0aHJlYWQ+Ci0KLSNpZiBPUyhVTklYKSB8fCBPUyhEQVJXSU4pCi0jaW5jbHVkZSA8dW5p
c3RkLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBEQVRBX0xPR19UT19GSUxFIDAKLQotLy8gU2V0IHRv
IDEgdG8gdXNlIHRoZSB0ZW1wIGRpcmVjdG9yeSBmcm9tIGNvbmZzdHIgaW5zdGVhZCBvZiBoYXJk
Y29kZWQgZGlyZWN0b3J5LgotLy8gVGhlIGxhc3QgY29tcG9uZW50IG9mIERBVEFfTE9HX0ZJTEVO
QU1FIHdpbGwgc3RpbGwgYmUgdXNlZC4KLSNkZWZpbmUgREFUQV9MT0dfVE9fREFSV0lOX1RFTVBf
RElSIDAKLQotLy8gVW5jb21tZW50IHRvIGZvcmNlIGxvZ2dpbmcgdG8gdGhlIGdpdmVuIGZpbGUg
cmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBzYXlzLgotLy8gTm90
ZSB0aGF0IHdlIHdpbGwgYXBwZW5kICIuPHBpZD4udHh0IiB3aGVyZSA8cGlkPiBpcyB0aGUgUElE
LgotLy8gVGhpcyBwYXRoIHdvbid0IHdvcmsgb24gV2luZG93cywgbWFrZSBzdXJlIHRvIGNoYW5n
ZSB0byBzb21ldGhpbmcgbGlrZSBDOlxcVXNlcnNcXDxtb3JlIHBhdGg+XFxsb2cudHh0LgotI2Rl
ZmluZSBEQVRBX0xPR19GSUxFTkFNRSAiL3RtcC9XVEZMb2ciCi0KLW5hbWVzcGFjZSBXVEYgewot
Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IG1heFBhdGhMZW5ndGggPSAxMDI0OwotCi1zdGF0aWMgUHJp
bnRTdHJlYW0qIHNfZmlsZTsKLXN0YXRpYyB1aW50NjRfdCBzX2ZpbGVEYXRhWyhzaXplb2YoRmls
ZVByaW50U3RyZWFtKSArIDcpIC8gOF07Ci1zdGF0aWMgdWludDY0X3Qgc19sb2NrZWRGaWxlRGF0
YVsoc2l6ZW9mKExvY2tlZFByaW50U3RyZWFtKSArIDcpIC8gOF07Ci0KLXN0YXRpYyB2b2lkIGlu
aXRpYWxpemVMb2dGaWxlT25jZSgpCi17Ci0gICAgY29uc3QgY2hhciogZmlsZW5hbWUgPSBudWxs
cHRyOwotCi0gICAgaWYgKHNfZmlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgREFUQV9MT0df
VE9fRklMRQotI2lmIERBVEFfTE9HX1RPX0RBUldJTl9URU1QX0RJUgotICAgIGNoYXIgZmlsZW5h
bWVCdWZmZXJbbWF4UGF0aExlbmd0aCArIDFdOwotI2lmIGRlZmluZWQoREFUQV9MT0dfRklMRU5B
TUUpCi0gICAgY29uc3QgY2hhciogbG9nQmFzZW5hbWUgPSBzdHJyY2hyKERBVEFfTE9HX0ZJTEVO
QU1FLCAnLycpOwotICAgIGlmICghbG9nQmFzZW5hbWUpCi0gICAgICAgIGxvZ0Jhc2VuYW1lID0g
KGNoYXIqKURBVEFfTE9HX0ZJTEVOQU1FOwotI2Vsc2UKLSAgICBjb25zdCBjaGFyKiBsb2dCYXNl
bmFtZSA9ICJXVEZMb2ciOwotI2VuZGlmCi0KLSAgICBib29sIHN1Y2Nlc3MgPSBjb25mc3RyKF9D
U19EQVJXSU5fVVNFUl9URU1QX0RJUiwgZmlsZW5hbWVCdWZmZXIsIHNpemVvZihmaWxlbmFtZUJ1
ZmZlcikpOwotICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBc3NlcnQgdGhh
dCB0aGUgcGF0aCBlbmRzIHdpdGggYSBzbGFzaCBpbnN0ZWFkIG9mIGFkZGluZyBhIHNsYXNoIGlm
IGl0IGRvZXMgbm90IGV4aXN0Ci0gICAgICAgIC8vIG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzIzNTc5
MDc3PiBpcyBmaXhlZCBpbiBhbGwgaU9TIFNpbXVsYXRvciB2ZXJzaW9ucyB0aGF0IHdlIHVzZS4K
LSAgICAgICAgc2l6ZV90IGxhc3RDb21wb25lbnRMZW5ndGggPSBzdHJsZW4obG9nQmFzZW5hbWUp
ICsgMjA7IC8vIE1vcmUgdGhhbiBlbm91Z2ggZm9yICIuPHBpZD4udHh0IgotICAgICAgICBzaXpl
X3QgZGlybmFtZUxlbmd0aCA9IHN0cmxlbihmaWxlbmFtZUJ1ZmZlcik7Ci0gICAgICAgIGJvb2wg
c2hvdWxkQWRkUGF0aFNlcGFyYXRvciA9IGZpbGVuYW1lQnVmZmVyW2Rpcm5hbWVMZW5ndGggLSAx
XSAhPSAnLycgJiYgbG9nQmFzZW5hbWVbMF0gIT0gJy8nOwotICAgICAgICBpZiAobGFzdENvbXBv
bmVudExlbmd0aCArIHNob3VsZEFkZFBhdGhTZXBhcmF0b3IgPD0gc2l6ZW9mKGZpbGVuYW1lQnVm
ZmVyKSAtIGRpcm5hbWVMZW5ndGggLSAxKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRkUGF0
aFNlcGFyYXRvcikKLSAgICAgICAgICAgICAgICBzdHJuY2F0KGZpbGVuYW1lQnVmZmVyLCAiLyIs
IDEpOwotICAgICAgICAgICAgc3RybmNhdChmaWxlbmFtZUJ1ZmZlciwgbG9nQmFzZW5hbWUsIHNp
emVvZihmaWxlbmFtZUJ1ZmZlcikgLSBzdHJsZW4oZmlsZW5hbWVCdWZmZXIpIC0gMSk7Ci0gICAg
ICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lQnVmZmVyOwotICAgICAgICB9Ci0gICAgfQotI2Vs
aWYgZGVmaW5lZChEQVRBX0xPR19GSUxFTkFNRSkKLSAgICBmaWxlbmFtZSA9IERBVEFfTE9HX0ZJ
TEVOQU1FOwotI2Vsc2UKLSAgICBmaWxlbmFtZSA9IGdldGVudigiV1RGX0RBVEFfTE9HX0ZJTEVO
QU1FIik7Ci0jZW5kaWYKLSAgICBjaGFyIGFjdHVhbEZpbGVuYW1lW21heFBhdGhMZW5ndGggKyAx
XTsKLQotICAgIGlmIChmaWxlbmFtZSAmJiAhc3Ryc3RyKGZpbGVuYW1lLCAiJXBpZCIpKSB7Ci0g
ICAgICAgIHNucHJpbnRmKGFjdHVhbEZpbGVuYW1lLCBzaXplb2YoYWN0dWFsRmlsZW5hbWUpLCAi
JXMuJSVwaWQudHh0IiwgZmlsZW5hbWUpOwotICAgICAgICBmaWxlbmFtZSA9IGFjdHVhbEZpbGVu
YW1lOwotICAgIH0KLSNlbmRpZiAvLyBEQVRBX0xPR19UT19GSUxFCi0KLSAgICBzZXREYXRhRmls
ZShmaWxlbmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVMb2dGaWxlKCkKLXsKLSAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKLSAgICBzdGQ6OmNhbGxfb25jZSgKLSAgICAg
ICAgb25jZSwKLSAgICAgICAgW10gewotICAgICAgICAgICAgaW5pdGlhbGl6ZUxvZ0ZpbGVPbmNl
KCk7Ci0gICAgICAgIH0pOwotfQotCi12b2lkIHNldERhdGFGaWxlKGNvbnN0IGNoYXIqIHBhdGgp
Ci17Ci0gICAgRmlsZVByaW50U3RyZWFtKiBmaWxlID0gbnVsbHB0cjsKLSAgICBjaGFyIGZvcm1h
dHRlZFBhdGhbbWF4UGF0aExlbmd0aCArIDFdOwotICAgIGNvbnN0IGNoYXIqIHBhdGhUb09wZW4g
PSBwYXRoOwotCi0gICAgaWYgKHBhdGgpIHsKLSAgICAgICAgY29uc3QgY2hhciogcGlkRm9ybWF0
ID0gc3Ryc3RyKHBhdGgsICIlcGlkIik7Ci0gICAgICAgIGlmIChwaWRGb3JtYXQpIHsKLSAgICAg
ICAgICAgIHNpemVfdCBsZWFkaW5nUGF0aExlbmd0aCA9IHBpZEZvcm1hdCAtIHBhdGg7Ci0gICAg
ICAgICAgICBzaXplX3QgcGF0aENoYXJhY3RlcnNBdmFpbGFibGUgPSBzdGQ6Om1pbihtYXhQYXRo
TGVuZ3RoLCBsZWFkaW5nUGF0aExlbmd0aCk7Ci0gICAgICAgICAgICBzdHJuY3B5KGZvcm1hdHRl
ZFBhdGgsIHBhdGgsIHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlKTsKLSAgICAgICAgICAgIGNoYXIq
IG5leHREZXN0ID0gZm9ybWF0dGVkUGF0aCArIHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlOwotICAg
ICAgICAgICAgcGF0aENoYXJhY3RlcnNBdmFpbGFibGUgPSBtYXhQYXRoTGVuZ3RoIC0gcGF0aENo
YXJhY3RlcnNBdmFpbGFibGU7Ci0gICAgICAgICAgICBpZiAocGF0aENoYXJhY3RlcnNBdmFpbGFi
bGUpIHsKLSAgICAgICAgICAgICAgICBpbnQgcGlkVGV4dExlbmd0aCA9IHNucHJpbnRmKG5leHRE
ZXN0LCBwYXRoQ2hhcmFjdGVyc0F2YWlsYWJsZSwgIiVkIiwgZ2V0Q3VycmVudFByb2Nlc3NJRCgp
KTsKLQotICAgICAgICAgICAgICAgIGlmIChwaWRUZXh0TGVuZ3RoIDwgMCB8fCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHBpZFRleHRMZW5ndGgpID49IHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlKQotICAg
ICAgICAgICAgICAgICAgICBwYXRoQ2hhcmFjdGVyc0F2YWlsYWJsZSA9IDA7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxl
IC09IHN0YXRpY19jYXN0PHNpemVfdD4ocGlkVGV4dExlbmd0aCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG5leHREZXN0ICs9IHBpZFRleHRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIHN0cm5j
cHkobmV4dERlc3QsIHBpZEZvcm1hdCArIDQsIHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JtYXR0ZWRQYXRo
W21heFBhdGhMZW5ndGhdID0gJ1wwJzsKLSAgICAgICAgICAgIHBhdGhUb09wZW4gPSBmb3JtYXR0
ZWRQYXRoOwotICAgICAgICB9Ci0KLSAgICAgICAgZmlsZSA9IEZpbGVQcmludFN0cmVhbTo6b3Bl
bihwYXRoVG9PcGVuLCAidyIpLnJlbGVhc2UoKTsKLSAgICAgICAgaWYgKGZpbGUpCi0gICAgICAg
ICAgICBXVEZMb2dBbHdheXMoIioqKiBEYXRhTG9nIG91dHB1dCB0byBcIiVzXCIgKioqXG4iLCBw
YXRoVG9PcGVuKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJXYXJu
aW5nOiBDb3VsZCBub3Qgb3BlbiBEYXRhTG9nIGZpbGUgJXMgZm9yIHdyaXRpbmcuXG4iLCBwYXRo
VG9PcGVuKTsKLSAgICB9Ci0KLSAgICBpZiAoIWZpbGUpIHsKLSAgICAgICAgLy8gVXNlIHBsYWNl
bWVudCBuZXc7IHRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHVzZSBkYXRhTG9nKCkgdG8gZGVidWcK
LSAgICAgICAgLy8gZmFzdE1hbGxvYy4KLSAgICAgICAgZmlsZSA9IG5ldyAoc19maWxlRGF0YSkg
RmlsZVByaW50U3RyZWFtKHN0ZGVyciwgRmlsZVByaW50U3RyZWFtOjpCb3Jyb3cpOwotICAgIH0K
LQotICAgIHNldHZidWYoZmlsZS0+ZmlsZSgpLCAwLCBfSU9OQkYsIDApOyAvLyBQcmVmZXIgdW5i
dWZmZXJlZCBvdXRwdXQsIHNvIHRoYXQgd2UgZ2V0IGEgZnVsbCBsb2cgdXBvbiBjcmFzaCBvciBk
ZWFkbG9jay4KLQotICAgIGlmIChzX2ZpbGUpCi0gICAgICAgIHNfZmlsZS0+Zmx1c2goKTsKLQot
ICAgIHNfZmlsZSA9IG5ldyAoc19sb2NrZWRGaWxlRGF0YSkgTG9ja2VkUHJpbnRTdHJlYW0oc3Rk
Ojp1bmlxdWVfcHRyPEZpbGVQcmludFN0cmVhbT4oZmlsZSkpOwotfQotCi1QcmludFN0cmVhbSYg
ZGF0YUZpbGUoKQotewotICAgIGluaXRpYWxpemVMb2dGaWxlKCk7Ci0gICAgcmV0dXJuICpzX2Zp
bGU7Ci19Ci0KLXZvaWQgZGF0YUxvZ0ZWKGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcmdM
aXN0KQotewotICAgIGRhdGFGaWxlKCkudnByaW50Zihmb3JtYXQsIGFyZ0xpc3QpOwotfQotCi12
b2lkIGRhdGFMb2dGKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQotewotICAgIHZhX2xpc3QgYXJn
TGlzdDsKLSAgICB2YV9zdGFydChhcmdMaXN0LCBmb3JtYXQpOwotICAgIGRhdGFMb2dGVihmb3Jt
YXQsIGFyZ0xpc3QpOwotICAgIHZhX2VuZChhcmdMaXN0KTsKLX0KLQotdm9pZCBkYXRhTG9nRlN0
cmluZyhjb25zdCBjaGFyKiBzdHIpCi17Ci0gICAgZGF0YUZpbGUoKS5wcmludGYoIiVzIiwgc3Ry
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9EYXRhTG9nLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvRGF0YUxvZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmU5NDgx
NmQ1YTk5MDMxZjg4MmQwNjQzMTJkOGIxYTgxYzE0ZmExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9EYXRhTG9nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRGF0YUxvZ19oCi0jZGVm
aW5lIERhdGFMb2dfaAotCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4K
LSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1XVEZfRVhQT1JUX1BSSVZBVEUgUHJpbnRTdHJlYW0m
IGRhdGFGaWxlKCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXREYXRhRmlsZShjb25zdCBj
aGFyKiBwYXRoKTsKLQotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGF0YUxvZ0ZWKGNvbnN0IGNo
YXIqIGZvcm1hdCwgdmFfbGlzdCkgV1RGX0FUVFJJQlVURV9QUklOVEYoMSwgMCk7Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkYXRhTG9nRihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgV1RGX0FU
VFJJQlVURV9QUklOVEYoMSwgMik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkYXRhTG9nRlN0
cmluZyhjb25zdCBjaGFyKik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPgotdm9pZCBk
YXRhTG9nKGNvbnN0IFR5cGVzJi4uLiB2YWx1ZXMpCi17Ci0gICAgZGF0YUZpbGUoKS5wcmludCh2
YWx1ZXMuLi4pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KLXZvaWQgZGF0YUxv
Z0xuKGNvbnN0IFR5cGVzJi4uLiB2YWx1ZXMpCi17Ci0gICAgZGF0YUxvZyh2YWx1ZXMuLi4sICJc
biIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KLXZvaWQgZGF0YUxvZ0lmKGJv
b2wgc2hvdWxkTG9nLCBjb25zdCBUeXBlcyYuLi4gdmFsdWVzKQotewotICAgIGlmIChzaG91bGRM
b2cpCi0gICAgICAgIGRhdGFMb2codmFsdWVzLi4uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUu
Li4gVHlwZXM+Ci12b2lkIGRhdGFMb2dMbklmKGJvb2wgc2hvdWxkTG9nLCBjb25zdCBUeXBlcyYu
Li4gdmFsdWVzKQotewotICAgIGlmIChzaG91bGRMb2cpCi0gICAgICAgIGRhdGFMb2dMbih2YWx1
ZXMuLi4pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpkYXRhTG9nOwot
dXNpbmcgV1RGOjpkYXRhTG9nTG47Ci11c2luZyBXVEY6OmRhdGFMb2dJZjsKLXVzaW5nIFdURjo6
ZGF0YUxvZ0xuSWY7Ci11c2luZyBXVEY6OmRhdGFMb2dGOwotdXNpbmcgV1RGOjpkYXRhTG9nRlN0
cmluZzsKLQotI2VuZGlmIC8vIERhdGFMb2dfaAotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvRGF0ZU1hdGguY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL0RhdGVNYXRoLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ODI4NzMzMGNiYjUyMDU3ZDBhOGM4YzJlYTkyOTcxNzAxYjcyNTBjNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvRGF0ZU1hdGguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTIwMyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgJnlldCwgTExDLiAobmF0ZUBhbmR5ZXQubmV0KQotICoKLSAqIFRo
ZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29tbXVuaWNhdG9yIGNsaWVudCBjb2RlLCByZWxl
YXNlZAotICogTWFyY2ggMzEsIDE5OTguCi0gKgotICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9m
IHRoZSBPcmlnaW5hbCBDb2RlIGlzCi0gKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3Jh
dGlvbi4KLSAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBD
b3B5cmlnaHQgKEMpIDE5OTgKLSAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250
ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiBlaXRo
ZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZvdW5kIGF0Ci0gKiBo
dHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0cDovL3d3dy5mc2Yu
b3JnL2NvcHlsZWZ0L2dwbC5odG1sCi0gKiAodGhlICJHUEwiKSwgaW4gd2hpY2ggY2FzZSB0aGUg
cHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCi0gKiBhcHBsaWNhYmxlIGluc3Rl
YWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91cgotICog
dmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9mIHRob3Nl
IHR3bwotICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBhbGxvdyBv
dGhlcnMgdG8gdXNlIHlvdXIKLSAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBMR1BM
LCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5Ci0gKiBkZWxldGluZ3RoZSBwcm92aXNpb25zIGFi
b3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAotICogb3RoZXIgcHJvdmlz
aW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBjYXNlIG1heSBiZS4K
LSAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVu
dCBtYXkgdXNlIHlvdXIKLSAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGFueSBvZiB0aGUg
TEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgotCi0gKiBDb3B5cmlnaHQgMjAwNi0yMDA4IHRoZSBW
OCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgICAgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0ZU1hdGguaCIKLQot
I2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKLSNpbmNsdWRlICJBU0NJSUNUeXBlLmgiCi0jaW5jbHVk
ZSAiQ3VycmVudFRpbWUuaCIKLSNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCi0jaW5jbHVkZSAiU3Rk
TGliRXh0cmFzLmgiCi0jaW5jbHVkZSAiU3RyaW5nRXh0cmFzLmgiCi0KLSNpbmNsdWRlIDxhbGdv
cml0aG0+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUg
PHN0ZGludC5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+Ci0KLSNpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbmRp
ZgotCi0jaWYgSEFWRShFUlJOT19IKQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jZW5kaWYKLQotI2lm
IEhBVkUoU1lTX1RJTUVfSCkKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0KLSNpZiBI
QVZFKFNZU19USU1FQl9IKQotI2luY2x1ZGUgPHN5cy90aW1lYi5oPgotI2VuZGlmCi0KLW5hbWVz
cGFjZSBXVEYgewotCi0vLyBGSVhNRTogU2hvdWxkIHRoaXMgZnVuY3Rpb24gZ28gaW50byBTdHJp
bmdDb21tb24uaCBvciBzb21lIG90aGVyIGhlYWRlcj8KLXRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0
aD4gaW5saW5lIGJvb2wgc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBj
aGFyKiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKQotewot
ICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsIGxvd2VyY2Fz
ZUxldHRlcnMsIGxlbmd0aCAtIDEpOwotfQotCi0vKiBDb25zdGFudHMgKi8KLQotc3RhdGljIGNv
bnN0IGRvdWJsZSBtYXhVbml4VGltZSA9IDIxNDU4NTkyMDAuMDsgLy8gMTIvMzEvMjAzNwotLy8g
RUNNQVNjcmlwdCBhc2tzIG5vdCB0byBzdXBwb3J0IGZvciBhIGRhdGUgb2Ygd2hpY2ggdG90YWwK
LS8vIG1pbGxpc2Vjb25kIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRoZSBmb2xsb3dpbmcgdmFsdWUu
Ci0vLyBTZWUgMTUuOS4xLjE0IG9mIEVDTUEtMjYyIDV0aCBlZGl0aW9uLgotc3RhdGljIGNvbnN0
IGRvdWJsZSBtYXhFQ01BU2NyaXB0VGltZSA9IDguNjRFMTU7Ci0KLS8vIERheSBvZiB5ZWFyIGZv
ciB0aGUgZmlyc3QgZGF5IG9mIGVhY2ggbW9udGgsIHdoZXJlIGluZGV4IDAgaXMgSmFudWFyeSwg
YW5kIGRheSAwIGlzIEphbnVhcnkgMS4KLS8vIEZpcnN0IGZvciBub24tbGVhcCB5ZWFycywgdGhl
biBmb3IgbGVhcCB5ZWFycy4KLXN0YXRpYyBjb25zdCBpbnQgZmlyc3REYXlPZk1vbnRoWzJdWzEy
XSA9IHsKLSAgICB7MCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3Mywg
MzA0LCAzMzR9LAotICAgIHswLCAzMSwgNjAsIDkxLCAxMjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwg
Mjc0LCAzMDUsIDMzNX0KLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRMb2NhbFRpbWUoY29u
c3QgdGltZV90KiBsb2NhbFRpbWUsIHN0cnVjdCB0bSogbG9jYWxUTSkKLXsKLSNpZiBDT01QSUxF
UihNU1ZDKQotICAgIGxvY2FsdGltZV9zKGxvY2FsVE0sIGxvY2FsVGltZSk7Ci0jZWxpZiBIQVZF
KExPQ0FMVElNRV9SKQotICAgIGxvY2FsdGltZV9yKGxvY2FsVGltZSwgbG9jYWxUTSk7Ci0jZWxz
ZQotICAgIGxvY2FsdGltZV9zKGxvY2FsVGltZSwgbG9jYWxUTSk7Ci0jZW5kaWYKLX0KLQotYm9v
bCBpc0xlYXBZZWFyKGludCB5ZWFyKQotewotICAgIGlmICh5ZWFyICUgNCAhPSAwKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHllYXIgJSA0MDAgPT0gMCkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgaWYgKHllYXIgJSAxMDAgPT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkYXlzSW5ZZWFyKGludCB5
ZWFyKQotewotICAgIHJldHVybiAzNjUgKyBpc0xlYXBZZWFyKHllYXIpOwotfQotCi1zdGF0aWMg
aW5saW5lIGRvdWJsZSBkYXlzRnJvbTE5NzBUb1llYXIoaW50IHllYXIpCi17Ci0gICAgLy8gVGhl
IEdyZWdvcmlhbiBDYWxlbmRhciBydWxlcyBmb3IgbGVhcCB5ZWFyczoKLSAgICAvLyBFdmVyeSBm
b3VydGggeWVhciBpcyBhIGxlYXAgeWVhci4gIDIwMDQsIDIwMDgsIGFuZCAyMDEyIGFyZSBsZWFw
IHllYXJzLgotICAgIC8vIEhvd2V2ZXIsIGV2ZXJ5IGh1bmRyZWR0aCB5ZWFyIGlzIG5vdCBhIGxl
YXAgeWVhci4gIDE5MDAgYW5kIDIxMDAgYXJlIG5vdCBsZWFwIHllYXJzLgotICAgIC8vIEV2ZXJ5
IGZvdXIgaHVuZHJlZCB5ZWFycywgdGhlcmUncyBhIGxlYXAgeWVhciBhZnRlciBhbGwuICAyMDAw
IGFuZCAyNDAwIGFyZSBsZWFwIHllYXJzLgotCi0gICAgc3RhdGljIGNvbnN0IGludCBsZWFwRGF5
c0JlZm9yZTE5NzFCeTRSdWxlID0gMTk3MCAvIDQ7Ci0gICAgc3RhdGljIGNvbnN0IGludCBleGNs
dWRlZExlYXBEYXlzQmVmb3JlMTk3MUJ5MTAwUnVsZSA9IDE5NzAgLyAxMDA7Ci0gICAgc3RhdGlj
IGNvbnN0IGludCBsZWFwRGF5c0JlZm9yZTE5NzFCeTQwMFJ1bGUgPSAxOTcwIC8gNDAwOwotCi0g
ICAgY29uc3QgZG91YmxlIHllYXJNaW51c09uZSA9IHllYXIgLSAxOwotICAgIGNvbnN0IGRvdWJs
ZSB5ZWFyc1RvQWRkQnk0UnVsZSA9IGZsb29yKHllYXJNaW51c09uZSAvIDQuMCkgLSBsZWFwRGF5
c0JlZm9yZTE5NzFCeTRSdWxlOwotICAgIGNvbnN0IGRvdWJsZSB5ZWFyc1RvRXhjbHVkZUJ5MTAw
UnVsZSA9IGZsb29yKHllYXJNaW51c09uZSAvIDEwMC4wKSAtIGV4Y2x1ZGVkTGVhcERheXNCZWZv
cmUxOTcxQnkxMDBSdWxlOwotICAgIGNvbnN0IGRvdWJsZSB5ZWFyc1RvQWRkQnk0MDBSdWxlID0g
Zmxvb3IoeWVhck1pbnVzT25lIC8gNDAwLjApIC0gbGVhcERheXNCZWZvcmUxOTcxQnk0MDBSdWxl
OwotCi0gICAgcmV0dXJuIDM2NS4wICogKHllYXIgLSAxOTcwLjApICsgeWVhcnNUb0FkZEJ5NFJ1
bGUgLSB5ZWFyc1RvRXhjbHVkZUJ5MTAwUnVsZSArIHllYXJzVG9BZGRCeTQwMFJ1bGU7Ci19Ci0K
LWRvdWJsZSBtc1RvRGF5cyhkb3VibGUgbXMpCi17Ci0gICAgcmV0dXJuIGZsb29yKG1zIC8gbXNQ
ZXJEYXkpOwotfQotCi1zdGF0aWMgdm9pZCBhcHBlbmRUd29EaWdpdE51bWJlcihTdHJpbmdCdWls
ZGVyJiBidWlsZGVyLCBpbnQgbnVtYmVyKQotewotICAgIEFTU0VSVChudW1iZXIgPj0gMCk7Ci0g
ICAgQVNTRVJUKG51bWJlciA8IDEwMCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoc3RhdGljX2Nhc3Q8
TENoYXI+KCcwJyArIG51bWJlciAvIDEwKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoc3RhdGljX2Nh
c3Q8TENoYXI+KCcwJyArIG51bWJlciAlIDEwKSk7Ci19Ci0KLWludCBtc1RvWWVhcihkb3VibGUg
bXMpCi17Ci0gICAgaW50IGFwcHJveFllYXIgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yKG1zIC8g
KG1zUGVyRGF5ICogMzY1LjI0MjUpKSArIDE5NzApOwotICAgIGRvdWJsZSBtc0Zyb21BcHByb3hZ
ZWFyVG8xOTcwID0gbXNQZXJEYXkgKiBkYXlzRnJvbTE5NzBUb1llYXIoYXBwcm94WWVhcik7Ci0g
ICAgaWYgKG1zRnJvbUFwcHJveFllYXJUbzE5NzAgPiBtcykKLSAgICAgICAgcmV0dXJuIGFwcHJv
eFllYXIgLSAxOwotICAgIGlmIChtc0Zyb21BcHByb3hZZWFyVG8xOTcwICsgbXNQZXJEYXkgKiBk
YXlzSW5ZZWFyKGFwcHJveFllYXIpIDw9IG1zKQotICAgICAgICByZXR1cm4gYXBwcm94WWVhciAr
IDE7Ci0gICAgcmV0dXJuIGFwcHJveFllYXI7Ci19Ci0KLWludCBkYXlJblllYXIoZG91YmxlIG1z
LCBpbnQgeWVhcikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihtc1RvRGF5cyhtcykg
LSBkYXlzRnJvbTE5NzBUb1llYXIoeWVhcikpOwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBt
c1RvTWlsbGlzZWNvbmRzKGRvdWJsZSBtcykKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gZm1vZCht
cywgbXNQZXJEYXkpOwotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICByZXN1bHQgKz0gbXNQ
ZXJEYXk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IG1zVG9NaW51dGVzKGRvdWJsZSBt
cykKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gZm1vZChmbG9vcihtcyAvIG1zUGVyTWludXRlKSwg
bWludXRlc1BlckhvdXIpOwotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICByZXN1bHQgKz0g
bWludXRlc1BlckhvdXI7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocmVzdWx0KTsKLX0K
LQotaW50IG1zVG9Ib3Vycyhkb3VibGUgbXMpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IGZtb2Qo
Zmxvb3IobXMvbXNQZXJIb3VyKSwgaG91cnNQZXJEYXkpOwotICAgIGlmIChyZXN1bHQgPCAwKQot
ICAgICAgICByZXN1bHQgKz0gaG91cnNQZXJEYXk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4ocmVzdWx0KTsKLX0KLQotaW50IG1vbnRoRnJvbURheUluWWVhcihpbnQgZGF5SW5ZZWFyLCBi
b29sIGxlYXBZZWFyKQotewotICAgIGNvbnN0IGludCBkID0gZGF5SW5ZZWFyOwotICAgIGludCBz
dGVwOwotCi0gICAgaWYgKGQgPCAoc3RlcCA9IDMxKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
c3RlcCArPSAobGVhcFllYXIgPyAyOSA6IDI4KTsKLSAgICBpZiAoZCA8IHN0ZXApCi0gICAgICAg
IHJldHVybiAxOwotICAgIGlmIChkIDwgKHN0ZXAgKz0gMzEpKQotICAgICAgICByZXR1cm4gMjsK
LSAgICBpZiAoZCA8IChzdGVwICs9IDMwKSkKLSAgICAgICAgcmV0dXJuIDM7Ci0gICAgaWYgKGQg
PCAoc3RlcCArPSAzMSkpCi0gICAgICAgIHJldHVybiA0OwotICAgIGlmIChkIDwgKHN0ZXAgKz0g
MzApKQotICAgICAgICByZXR1cm4gNTsKLSAgICBpZiAoZCA8IChzdGVwICs9IDMxKSkKLSAgICAg
ICAgcmV0dXJuIDY7Ci0gICAgaWYgKGQgPCAoc3RlcCArPSAzMSkpCi0gICAgICAgIHJldHVybiA3
OwotICAgIGlmIChkIDwgKHN0ZXAgKz0gMzApKQotICAgICAgICByZXR1cm4gODsKLSAgICBpZiAo
ZCA8IChzdGVwICs9IDMxKSkKLSAgICAgICAgcmV0dXJuIDk7Ci0gICAgaWYgKGQgPCAoc3RlcCAr
PSAzMCkpCi0gICAgICAgIHJldHVybiAxMDsKLSAgICByZXR1cm4gMTE7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBjaGVja01vbnRoKGludCBkYXlJblllYXIsIGludCYgc3RhcnREYXlPZlRoaXNN
b250aCwgaW50JiBzdGFydERheU9mTmV4dE1vbnRoLCBpbnQgZGF5c0luVGhpc01vbnRoKQotewot
ICAgIHN0YXJ0RGF5T2ZUaGlzTW9udGggPSBzdGFydERheU9mTmV4dE1vbnRoOwotICAgIHN0YXJ0
RGF5T2ZOZXh0TW9udGggKz0gZGF5c0luVGhpc01vbnRoOwotICAgIHJldHVybiAoZGF5SW5ZZWFy
IDw9IHN0YXJ0RGF5T2ZOZXh0TW9udGgpOwotfQotCi1pbnQgZGF5SW5Nb250aEZyb21EYXlJblll
YXIoaW50IGRheUluWWVhciwgYm9vbCBsZWFwWWVhcikKLXsKLSAgICBjb25zdCBpbnQgZCA9IGRh
eUluWWVhcjsKLSAgICBpbnQgc3RlcDsKLSAgICBpbnQgbmV4dCA9IDMwOwotCi0gICAgaWYgKGQg
PD0gbmV4dCkKLSAgICAgICAgcmV0dXJuIGQgKyAxOwotICAgIGNvbnN0IGludCBkYXlzSW5GZWIg
PSAobGVhcFllYXIgPyAyOSA6IDI4KTsKLSAgICBpZiAoY2hlY2tNb250aChkLCBzdGVwLCBuZXh0
LCBkYXlzSW5GZWIpKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9u
dGgoZCwgc3RlcCwgbmV4dCwgMzEpKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYg
KGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzApKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7
Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzEpKQotICAgICAgICByZXR1cm4g
ZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzApKQotICAgICAg
ICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzEp
KQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwg
bmV4dCwgMzEpKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNoZWNrTW9udGgo
ZCwgc3RlcCwgbmV4dCwgMzApKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0gICAgaWYgKGNo
ZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzEpKQotICAgICAgICByZXR1cm4gZCAtIHN0ZXA7Ci0g
ICAgaWYgKGNoZWNrTW9udGgoZCwgc3RlcCwgbmV4dCwgMzApKQotICAgICAgICByZXR1cm4gZCAt
IHN0ZXA7Ci0gICAgc3RlcCA9IG5leHQ7Ci0gICAgcmV0dXJuIGQgLSBzdGVwOwotfQotCi1pbnQg
ZGF5SW5ZZWFyKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXkpCi17Ci0gICAgcmV0dXJuIGZp
cnN0RGF5T2ZNb250aFtpc0xlYXBZZWFyKHllYXIpXVttb250aF0gKyBkYXkgLSAxOwotfQotCi1k
b3VibGUgZGF0ZVRvRGF5c0Zyb20xOTcwKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXkpCi17
Ci0gICAgeWVhciArPSBtb250aCAvIDEyOwotCi0gICAgbW9udGggJT0gMTI7Ci0gICAgaWYgKG1v
bnRoIDwgMCkgewotICAgICAgICBtb250aCArPSAxMjsKLSAgICAgICAgLS15ZWFyOwotICAgIH0K
LQotICAgIGRvdWJsZSB5ZWFyZGF5ID0gZmxvb3IoZGF5c0Zyb20xOTcwVG9ZZWFyKHllYXIpKTsK
LSAgICBBU1NFUlQoKHllYXIgPj0gMTk3MCAmJiB5ZWFyZGF5ID49IDApIHx8ICh5ZWFyIDwgMTk3
MCAmJiB5ZWFyZGF5IDwgMCkpOwotICAgIHJldHVybiB5ZWFyZGF5ICsgZGF5SW5ZZWFyKHllYXIs
IG1vbnRoLCBkYXkpOwotfQotCi0vLyBUaGVyZSBpcyBhIGhhcmQgbGltaXQgYXQgMjAzOCB0aGF0
IHdlIGN1cnJlbnRseSBkbyBub3QgaGF2ZSBhIHdvcmthcm91bmQKLS8vIGZvciAocmRhcjovL3By
b2JsZW0vNTA1Mjk3NSkuCi1zdGF0aWMgaW5saW5lIGludCBtYXhpbXVtWWVhckZvckRTVCgpCi17
Ci0gICAgcmV0dXJuIDIwMzc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1pbmltdW1ZZWFyRm9y
RFNUKCkKLXsKLSAgICAvLyBCZWNhdXNlIG9mIHRoZSAyMDM4IGlzc3VlIChzZWUgbWF4aW11bVll
YXJGb3JEU1QpIGlmIHRoZSBjdXJyZW50IHllYXIgaXMKLSAgICAvLyBncmVhdGVyIHRoYW4gdGhl
IG1heCB5ZWFyIG1pbnVzIDI3ICgyMDEwKSwgd2Ugd2FudCB0byB1c2UgdGhlIG1heCB5ZWFyCi0g
ICAgLy8gbWludXMgMjcgaW5zdGVhZCwgdG8gZW5zdXJlIHRoZXJlIGlzIGEgcmFuZ2Ugb2YgMjgg
eWVhcnMgdGhhdCBhbGwgeWVhcnMKLSAgICAvLyBjYW4gbWFwIHRvLgotICAgIHJldHVybiBzdGQ6
Om1pbihtc1RvWWVhcihqc0N1cnJlbnRUaW1lKCkpLCBtYXhpbXVtWWVhckZvckRTVCgpIC0gMjcp
IDsKLX0KLQotLyoKLSAqIEZpbmQgYW4gZXF1aXZhbGVudCB5ZWFyIGZvciB0aGUgb25lIGdpdmVu
LCB3aGVyZSBlcXVpdmFsZW5jZSBpcyBkZXRlcmluZWQgYnkKLSAqIHRoZSB0d28geWVhcnMgaGF2
aW5nIHRoZSBzYW1lIGxlYXBuZXNzIGFuZCB0aGUgZmlyc3QgZGF5IG9mIHRoZSB5ZWFyLCBmYWxs
aW5nCi0gKiBvbiB0aGUgc2FtZSBkYXkgb2YgdGhlIHdlZWsuCi0gKgotICogVGhpcyBmdW5jdGlv
biByZXR1cm5zIGEgeWVhciBiZXR3ZWVuIHRoaXMgY3VycmVudCB5ZWFyIGFuZCAyMDM3LCBob3dl
dmVyIHRoaXMKLSAqIGZ1bmN0aW9uIHdpbGwgcG90ZW50aWFsbHkgcmV0dXJuIGluY29ycmVjdCBy
ZXN1bHRzIGlmIHRoZSBjdXJyZW50IHllYXIgaXMgYWZ0ZXIKLSAqIDIwMTAsIChyZGFyOi8vcHJv
YmxlbS81MDUyOTc1KSwgaWYgdGhlIHllYXIgcGFzc2VkIGluIGlzIGJlZm9yZSAxOTAwIG9yIGFm
dGVyCi0gKiAyMTAwLCAocmRhcjovL3Byb2JsZW0vNTA1NTAzOCkuCi0gKi8KLWludCBlcXVpdmFs
ZW50WWVhckZvckRTVChpbnQgeWVhcikKLXsKLSAgICAvLyBJdCBpcyBvayBpZiB0aGUgY2FjaGVk
IHllYXIgaXMgbm90IHRoZSBjdXJyZW50IHllYXIgYXMgbG9uZyBhcyB0aGUgcnVsZXMKLSAgICAv
LyBmb3IgRFNUIGRpZCBub3QgY2hhbmdlIGJldHdlZW4gdGhlIHR3byB5ZWFyczsgaWYgdGhleSBk
aWQgdGhlIGFwcCB3b3VsZCBuZWVkCi0gICAgLy8gdG8gYmUgcmVzdGFydGVkLgotICAgIHN0YXRp
YyBpbnQgbWluWWVhciA9IG1pbmltdW1ZZWFyRm9yRFNUKCk7Ci0gICAgaW50IG1heFllYXIgPSBt
YXhpbXVtWWVhckZvckRTVCgpOwotCi0gICAgaW50IGRpZmZlcmVuY2U7Ci0gICAgaWYgKHllYXIg
PiBtYXhZZWFyKQotICAgICAgICBkaWZmZXJlbmNlID0gbWluWWVhciAtIHllYXI7Ci0gICAgZWxz
ZSBpZiAoeWVhciA8IG1pblllYXIpCi0gICAgICAgIGRpZmZlcmVuY2UgPSBtYXhZZWFyIC0geWVh
cjsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiB5ZWFyOwotCi0gICAgaW50IHF1b3RpZW50ID0g
ZGlmZmVyZW5jZSAvIDI4OwotICAgIGludCBwcm9kdWN0ID0gKHF1b3RpZW50KSAqIDI4OwotCi0g
ICAgeWVhciArPSBwcm9kdWN0OwotICAgIHJldHVybiB5ZWFyOwotfQotCi0jaWYgT1MoV0lORE9X
UykKLXR5cGVkZWYgQk9PTChXSU5BUEkqIGNhbGxHZXRUaW1lWm9uZUluZm9ybWF0aW9uRm9yWWVh
cl90KShVU0hPUlQsIFBEWU5BTUlDX1RJTUVfWk9ORV9JTkZPUk1BVElPTiwgTFBUSU1FX1pPTkVf
SU5GT1JNQVRJT04pOwotCi1zdGF0aWMgY2FsbEdldFRpbWVab25lSW5mb3JtYXRpb25Gb3JZZWFy
X3QgdGltZVpvbmVJbmZvcm1hdGlvbkZvclllYXJGdW5jdGlvbigpCi17Ci0gICAgc3RhdGljIGNh
bGxHZXRUaW1lWm9uZUluZm9ybWF0aW9uRm9yWWVhcl90IGdldFRpbWVab25lSW5mb3JtYXRpb25G
b3JZZWFyID0gbnVsbHB0cjsKLQotICAgIGlmIChnZXRUaW1lWm9uZUluZm9ybWF0aW9uRm9yWWVh
cikKLSAgICAgICAgcmV0dXJuIGdldFRpbWVab25lSW5mb3JtYXRpb25Gb3JZZWFyOwotCi0gICAg
SE1PRFVMRSBtb2R1bGUgPSA6OkdldE1vZHVsZUhhbmRsZVcoTCJrZXJuZWwzMi5kbGwiKTsKLSAg
ICBpZiAoIW1vZHVsZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBnZXRUaW1lWm9u
ZUluZm9ybWF0aW9uRm9yWWVhciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2FsbEdldFRpbWVab25lSW5m
b3JtYXRpb25Gb3JZZWFyX3Q+KDo6R2V0UHJvY0FkZHJlc3MobW9kdWxlLCAiR2V0VGltZVpvbmVJ
bmZvcm1hdGlvbkZvclllYXIiKSk7Ci0KLSAgICByZXR1cm4gZ2V0VGltZVpvbmVJbmZvcm1hdGlv
bkZvclllYXI7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludDMyX3QgY2FsY3VsYXRlVVRDT2Zmc2V0
KCkKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIFRJTUVfWk9ORV9JTkZPUk1BVElPTiB0aW1lWm9u
ZUluZm9ybWF0aW9uOwotICAgIERXT1JEIHJjID0gMDsKLQotICAgIGlmIChjYWxsR2V0VGltZVpv
bmVJbmZvcm1hdGlvbkZvclllYXJfdCB0aW1lWm9uZUZ1bmN0aW9uID0gdGltZVpvbmVJbmZvcm1h
dGlvbkZvclllYXJGdW5jdGlvbigpKSB7Ci0gICAgICAgIC8vIElmIGF2YWlsYWJsZSwgdXNlIHRo
ZSBXaW5kb3dzIEFQSSBjYWxsIHRoYXQgdGFrZXMgaW50byBhY2NvdW50IHRoZSB2YXJ5aW5nIERT
VCBmcm9tCi0gICAgICAgIC8vIHllYXIgdG8geWVhci4KLSAgICAgICAgU1lTVEVNVElNRSBzeXN0
ZW1UaW1lOwotICAgICAgICA6OkdldFN5c3RlbVRpbWUoJnN5c3RlbVRpbWUpOwotICAgICAgICBy
YyA9IHRpbWVab25lRnVuY3Rpb24oc3lzdGVtVGltZS53WWVhciwgbnVsbHB0ciwgJnRpbWVab25l
SW5mb3JtYXRpb24pOwotICAgICAgICBpZiAocmMgPT0gVElNRV9aT05FX0lEX0lOVkFMSUQpCi0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9IGVsc2UgewotICAgICAgICByYyA9IDo6R2V0VGlt
ZVpvbmVJbmZvcm1hdGlvbigmdGltZVpvbmVJbmZvcm1hdGlvbik7Ci0gICAgICAgIGlmIChyYyA9
PSBUSU1FX1pPTkVfSURfSU5WQUxJRCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIGludDMyX3QgYmlhcyA9IHRpbWVab25lSW5mb3JtYXRpb24uQmlhczsKLQotICAgIGlmIChy
YyA9PSBUSU1FX1pPTkVfSURfREFZTElHSFQpCi0gICAgICAgIGJpYXMgKz0gdGltZVpvbmVJbmZv
cm1hdGlvbi5EYXlsaWdodEJpYXM7Ci0gICAgZWxzZSBpZiAocmMgPT0gVElNRV9aT05FX0lEX1NU
QU5EQVJEIHx8IHJjID09IFRJTUVfWk9ORV9JRF9VTktOT1dOKQotICAgICAgICBiaWFzICs9IHRp
bWVab25lSW5mb3JtYXRpb24uU3RhbmRhcmRCaWFzOwotCi0gICAgcmV0dXJuIC1iaWFzICogNjAg
KiAxMDAwOwotI2Vsc2UKLSAgICB0aW1lX3QgbG9jYWxUaW1lID0gdGltZSgwKTsKLSAgICB0bSBs
b2NhbHQ7Ci0gICAgZ2V0TG9jYWxUaW1lKCZsb2NhbFRpbWUsICZsb2NhbHQpOwotCi0gICAgLy8g
R2V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyB0aW1lIHpvbmUgYW5kIFVUQyBvbiB0aGUg
MXN0IG9mIEphbnVhcnkgb2YgdGhpcyB5ZWFyLgotICAgIGxvY2FsdC50bV9zZWMgPSAwOwotICAg
IGxvY2FsdC50bV9taW4gPSAwOwotICAgIGxvY2FsdC50bV9ob3VyID0gMDsKLSAgICBsb2NhbHQu
dG1fbWRheSA9IDE7Ci0gICAgbG9jYWx0LnRtX21vbiA9IDA7Ci0gICAgLy8gTm90IHNldHRpbmcg
bG9jYWx0LnRtX3llYXIhCi0gICAgbG9jYWx0LnRtX3dkYXkgPSAwOwotICAgIGxvY2FsdC50bV95
ZGF5ID0gMDsKLSAgICBsb2NhbHQudG1faXNkc3QgPSAwOwotI2lmIEhBVkUoVE1fR01UT0ZGKQot
ICAgIGxvY2FsdC50bV9nbXRvZmYgPSAwOwotI2VuZGlmCi0jaWYgSEFWRShUTV9aT05FKQotICAg
IGxvY2FsdC50bV96b25lID0gMDsKLSNlbmRpZgotCi0jaWYgSEFWRShUSU1FR00pCi0gICAgdGlt
ZV90IHV0Y09mZnNldCA9IHRpbWVnbSgmbG9jYWx0KSAtIG1rdGltZSgmbG9jYWx0KTsKLSNlbHNl
Ci0gICAgLy8gVXNpbmcgYSBjYW5uZWQgZGF0ZSBvZiAwMS8wMS8yMDA5IG9uIHBsYXRmb3JtcyB3
aXRoIHdlYWtlciBkYXRlLWhhbmRsaW5nIGZvby4KLSAgICBsb2NhbHQudG1feWVhciA9IDEwOTsK
LSAgICB0aW1lX3QgdXRjT2Zmc2V0ID0gMTIzMDc2ODAwMCAtIG1rdGltZSgmbG9jYWx0KTsKLSNl
bmRpZgotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHV0Y09mZnNldCAqIDEwMDAp
OwotI2VuZGlmCi19Ci0KLSNpZiAhSEFWRShUTV9HTVRPRkYpCi0KLSNpZiBPUyhXSU5ET1dTKQot
Ly8gQ29kZSB0YWtlbiBmcm9tIGh0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20va2IvMTY3Mjk2
Ci1zdGF0aWMgdm9pZCBVbml4VGltZVRvRmlsZVRpbWUodGltZV90IHQsIExQRklMRVRJTUUgcGZ0
KQotewotICAgIC8vIE5vdGUgdGhhdCBMT05HTE9ORyBpcyBhIDY0LWJpdCB2YWx1ZQotICAgIExP
TkdMT05HIGxsOwotCi0gICAgbGwgPSBJbnQzMngzMlRvNjQodCwgMTAwMDAwMDApICsgMTE2NDQ0
NzM2MDAwMDAwMDAwOwotICAgIHBmdC0+ZHdMb3dEYXRlVGltZSA9IChEV09SRClsbDsKLSAgICBw
ZnQtPmR3SGlnaERhdGVUaW1lID0gbGwgPj4gMzI7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIEdldCB0
aGUgRFNUIG9mZnNldCBmb3IgdGhlIHRpbWUgcGFzc2VkIGluLgotICovCi1zdGF0aWMgZG91Ymxl
IGNhbGN1bGF0ZURTVE9mZnNldCh0aW1lX3QgbG9jYWxUaW1lLCBkb3VibGUgdXRjT2Zmc2V0KQot
ewotI2lmIE9TKFdJTkRPV1MpCi0gICAgRklMRVRJTUUgdXRjRmlsZVRpbWU7Ci0gICAgVW5peFRp
bWVUb0ZpbGVUaW1lKGxvY2FsVGltZSwgJnV0Y0ZpbGVUaW1lKTsKLSAgICBTWVNURU1USU1FIHV0
Y1N5c3RlbVRpbWUsIGxvY2FsU3lzdGVtVGltZTsKLSAgICBpZiAoITo6RmlsZVRpbWVUb1N5c3Rl
bVRpbWUoJnV0Y0ZpbGVUaW1lLCAmdXRjU3lzdGVtVGltZSkpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIGlmICghOjpTeXN0ZW1UaW1lVG9UelNwZWNpZmljTG9jYWxUaW1lKG51bGxwdHIsICZ1dGNT
eXN0ZW1UaW1lLCAmbG9jYWxTeXN0ZW1UaW1lKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBk
b3VibGUgb2Zmc2V0VGltZSA9IChsb2NhbFRpbWUgKiBtc1BlclNlY29uZCkgKyB1dGNPZmZzZXQ7
Ci0KLSAgICAvLyBPZmZzZXQgZnJvbSBVVEMgYnV0IGRvZXNuJ3QgaW5jbHVkZSBEU1Qgb2J2aW91
c2x5Ci0gICAgaW50IG9mZnNldEhvdXIgPSAgbXNUb0hvdXJzKG9mZnNldFRpbWUpOwotICAgIGlu
dCBvZmZzZXRNaW51dGUgPSAgbXNUb01pbnV0ZXMob2Zmc2V0VGltZSk7Ci0KLSAgICBkb3VibGUg
ZGlmZiA9ICgobG9jYWxTeXN0ZW1UaW1lLndIb3VyIC0gb2Zmc2V0SG91cikgKiBzZWNvbmRzUGVy
SG91cikgKyAoKGxvY2FsU3lzdGVtVGltZS53TWludXRlIC0gb2Zmc2V0TWludXRlKSAqIDYwKTsK
LQotICAgIHJldHVybiBkaWZmICogbXNQZXJTZWNvbmQ7Ci0jZWxzZQotICAgIC8vaW5wdXQgaXMg
VVRDIHNvIHdlIGhhdmUgdG8gc2hpZnQgYmFjayB0byBsb2NhbCB0aW1lIHRvIGRldGVybWluZSBE
U1QgdGh1cyB0aGUgKyBnZXRVVENPZmZzZXQoKQotICAgIGRvdWJsZSBvZmZzZXRUaW1lID0gKGxv
Y2FsVGltZSAqIG1zUGVyU2Vjb25kKSArIHV0Y09mZnNldDsKLQotICAgIC8vIE9mZnNldCBmcm9t
IFVUQyBidXQgZG9lc24ndCBpbmNsdWRlIERTVCBvYnZpb3VzbHkKLSAgICBpbnQgb2Zmc2V0SG91
ciA9ICBtc1RvSG91cnMob2Zmc2V0VGltZSk7Ci0gICAgaW50IG9mZnNldE1pbnV0ZSA9ICBtc1Rv
TWludXRlcyhvZmZzZXRUaW1lKTsKLQotICAgIHRtIGxvY2FsVE07Ci0gICAgZ2V0TG9jYWxUaW1l
KCZsb2NhbFRpbWUsICZsb2NhbFRNKTsKLQotICAgIGRvdWJsZSBkaWZmID0gKChsb2NhbFRNLnRt
X2hvdXIgLSBvZmZzZXRIb3VyKSAqIHNlY29uZHNQZXJIb3VyKSArICgobG9jYWxUTS50bV9taW4g
LSBvZmZzZXRNaW51dGUpICogNjApOwotCi0gICAgaWYgKGRpZmYgPCAwKQotICAgICAgICBkaWZm
ICs9IHNlY29uZHNQZXJEYXk7Ci0KLSAgICByZXR1cm4gKGRpZmYgKiBtc1BlclNlY29uZCk7Ci0j
ZW5kaWYKLX0KLQotI2VuZGlmCi0KLS8vIFJldHVybnMgY29tYmluZWQgb2Zmc2V0IGluIG1pbGxp
c2Vjb25kIChVVEMgKyBEU1QpLgotTG9jYWxUaW1lT2Zmc2V0IGNhbGN1bGF0ZUxvY2FsVGltZU9m
ZnNldChkb3VibGUgbXMsIFRpbWVUeXBlIGlucHV0VGltZVR5cGUpCi17Ci0jaWYgSEFWRShUTV9H
TVRPRkYpCi0gICAgZG91YmxlIGxvY2FsVG9VVENUaW1lT2Zmc2V0ID0gaW5wdXRUaW1lVHlwZSA9
PSBMb2NhbFRpbWUgPyBjYWxjdWxhdGVVVENPZmZzZXQoKSA6IDA7Ci0jZWxzZQotICAgIGRvdWJs
ZSBsb2NhbFRvVVRDVGltZU9mZnNldCA9IGNhbGN1bGF0ZVVUQ09mZnNldCgpOwotI2VuZGlmCi0g
ICAgaWYgKGlucHV0VGltZVR5cGUgPT0gTG9jYWxUaW1lKQotICAgICAgICBtcyAtPSBsb2NhbFRv
VVRDVGltZU9mZnNldDsKLQotICAgIC8vIE9uIE1hYyBPUyBYLCB0aGUgY2FsbCB0byBsb2NhbHRp
bWUgKHNlZSBjYWxjdWxhdGVEU1RPZmZzZXQpIHdpbGwgcmV0dXJuIGhpc3RvcmljYWxseSBhY2N1
cmF0ZQotICAgIC8vIERTVCBpbmZvcm1hdGlvbiAoZS5nLiBOZXcgWmVhbGFuZCBkaWQgbm90IGhh
dmUgRFNUIGZyb20gMTk0NiB0byAxOTc0KSBob3dldmVyIHRoZSBKYXZhU2NyaXB0Ci0gICAgLy8g
c3RhbmRhcmQgZXhwbGljaXRseSBkaWN0YXRlcyB0aGF0IGhpc3RvcmljYWwgaW5mb3JtYXRpb24g
c2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIHdoZW4KLSAgICAvLyBkZXRlcm1pbmluZyBEU1QuIEZv
ciB0aGlzIHJlYXNvbiB3ZSBzaGlmdCBhd2F5IGZyb20geWVhcnMgdGhhdCBsb2NhbHRpbWUgY2Fu
IGhhbmRsZSBidXQgd291bGQKLSAgICAvLyByZXR1cm4gaGlzdG9yaWNhbGx5IGFjY3VyYXRlIGlu
Zm9ybWF0aW9uLgotICAgIGludCB5ZWFyID0gbXNUb1llYXIobXMpOwotICAgIGludCBlcXVpdmFs
ZW50WWVhciA9IGVxdWl2YWxlbnRZZWFyRm9yRFNUKHllYXIpOwotICAgIGlmICh5ZWFyICE9IGVx
dWl2YWxlbnRZZWFyKSB7Ci0gICAgICAgIGJvb2wgbGVhcFllYXIgPSBpc0xlYXBZZWFyKHllYXIp
OwotICAgICAgICBpbnQgZGF5SW5ZZWFyTG9jYWwgPSBkYXlJblllYXIobXMsIHllYXIpOwotICAg
ICAgICBpbnQgZGF5SW5Nb250aCA9IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKGRheUluWWVhckxv
Y2FsLCBsZWFwWWVhcik7Ci0gICAgICAgIGludCBtb250aCA9IG1vbnRoRnJvbURheUluWWVhcihk
YXlJblllYXJMb2NhbCwgbGVhcFllYXIpOwotICAgICAgICBkb3VibGUgZGF5ID0gZGF0ZVRvRGF5
c0Zyb20xOTcwKGVxdWl2YWxlbnRZZWFyLCBtb250aCwgZGF5SW5Nb250aCk7Ci0gICAgICAgIG1z
ID0gKGRheSAqIG1zUGVyRGF5KSArIG1zVG9NaWxsaXNlY29uZHMobXMpOwotICAgIH0KLQotICAg
IGRvdWJsZSBsb2NhbFRpbWVTZWNvbmRzID0gbXMgLyBtc1BlclNlY29uZDsKLSAgICBpZiAobG9j
YWxUaW1lU2Vjb25kcyA+IG1heFVuaXhUaW1lKQotICAgICAgICBsb2NhbFRpbWVTZWNvbmRzID0g
bWF4VW5peFRpbWU7Ci0gICAgZWxzZSBpZiAobG9jYWxUaW1lU2Vjb25kcyA8IDApIC8vIEdvIGFo
ZWFkIGEgZGF5IHRvIG1ha2UgbG9jYWx0aW1lIHdvcmsgKGRvZXMgbm90IHdvcmsgd2l0aCAwKS4K
LSAgICAgICAgbG9jYWxUaW1lU2Vjb25kcyArPSBzZWNvbmRzUGVyRGF5OwotICAgIC8vIEZJWE1F
OiB0aW1lX3QgaGFzIGEgcG90ZW50aWFsIHByb2JsZW0gaW4gMjAzOC4KLSAgICB0aW1lX3QgbG9j
YWxUaW1lID0gc3RhdGljX2Nhc3Q8dGltZV90Pihsb2NhbFRpbWVTZWNvbmRzKTsKLQotI2lmIEhB
VkUoVE1fR01UT0ZGKQotICAgIHRtIGxvY2FsVE07Ci0gICAgZ2V0TG9jYWxUaW1lKCZsb2NhbFRp
bWUsICZsb2NhbFRNKTsKLSAgICByZXR1cm4gTG9jYWxUaW1lT2Zmc2V0KGxvY2FsVE0udG1faXNk
c3QsIGxvY2FsVE0udG1fZ210b2ZmICogbXNQZXJTZWNvbmQpOwotI2Vsc2UKLSAgICBkb3VibGUg
ZHN0T2Zmc2V0ID0gY2FsY3VsYXRlRFNUT2Zmc2V0KGxvY2FsVGltZSwgbG9jYWxUb1VUQ1RpbWVP
ZmZzZXQpOwotICAgIHJldHVybiBMb2NhbFRpbWVPZmZzZXQoZHN0T2Zmc2V0LCBsb2NhbFRvVVRD
VGltZU9mZnNldCArIGRzdE9mZnNldCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBpbml0aWFsaXplRGF0
ZXMoKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc3RhdGljIGJvb2wgYWxyZWFkeUluaXRp
YWxpemVkOwotICAgIEFTU0VSVCghYWxyZWFkeUluaXRpYWxpemVkKTsKLSAgICBhbHJlYWR5SW5p
dGlhbGl6ZWQgPSB0cnVlOwotI2VuZGlmCi0KLSAgICBlcXVpdmFsZW50WWVhckZvckRTVCgyMDAw
KTsgLy8gTmVlZCB0byBjYWxsIG9uY2UgdG8gaW5pdGlhbGl6ZSBhIHN0YXRpYyB1c2VkIGluIHRo
aXMgZnVuY3Rpb24uCi19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIHltZGhtc1RvU2Vjb25kcyhp
bnQgeWVhciwgbG9uZyBtb24sIGxvbmcgZGF5LCBsb25nIGhvdXIsIGxvbmcgbWludXRlLCBkb3Vi
bGUgc2Vjb25kKQotewotICAgIGludCBtZGF5ID0gZmlyc3REYXlPZk1vbnRoW2lzTGVhcFllYXIo
eWVhcildW21vbiAtIDFdOwotICAgIGRvdWJsZSB5ZGF5cyA9IGRheXNGcm9tMTk3MFRvWWVhcih5
ZWFyKTsKLQotICAgIHJldHVybiAoc2Vjb25kICsgbWludXRlICogc2Vjb25kc1Blck1pbnV0ZSAr
IGhvdXIgKiBzZWNvbmRzUGVySG91ciArIChtZGF5ICsgZGF5IC0gMSArIHlkYXlzKSAqIHNlY29u
ZHNQZXJEYXkpOwotfQotCi0vLyBXZSBmb2xsb3cgdGhlIHJlY29tbWVuZGF0aW9uIG9mIFJGQyAy
ODIyIHRvIGNvbnNpZGVyIGFsbAotLy8gb2Jzb2xldGUgdGltZSB6b25lcyBub3QgbGlzdGVkIGhl
cmUgZXF1aXZhbGVudCB0byAiLTAwMDAiLgotc3RhdGljIGNvbnN0IHN0cnVjdCBLbm93blpvbmUg
ewotI2lmICFPUyhXSU5ET1dTKQotICAgIGNvbnN0Ci0jZW5kaWYKLSAgICAgICAgY2hhciB0ek5h
bWVbNF07Ci0gICAgaW50IHR6T2Zmc2V0OwotfSBrbm93blpvbmVzW10gPSB7Ci0gICAgeyAidXQi
LCAwIH0sCi0gICAgeyAiZ210IiwgMCB9LAotICAgIHsgImVzdCIsIC0zMDAgfSwKLSAgICB7ICJl
ZHQiLCAtMjQwIH0sCi0gICAgeyAiY3N0IiwgLTM2MCB9LAotICAgIHsgImNkdCIsIC0zMDAgfSwK
LSAgICB7ICJtc3QiLCAtNDIwIH0sCi0gICAgeyAibWR0IiwgLTM2MCB9LAotICAgIHsgInBzdCIs
IC00ODAgfSwKLSAgICB7ICJwZHQiLCAtNDIwIH0KLX07Ci0KLWlubGluZSBzdGF0aWMgdm9pZCBz
a2lwU3BhY2VzQW5kQ29tbWVudHMoY29uc3QgY2hhciomIHMpCi17Ci0gICAgaW50IG5lc3Rpbmcg
PSAwOwotICAgIGNoYXIgY2g7Ci0gICAgd2hpbGUgKChjaCA9ICpzKSkgewotICAgICAgICBpZiAo
IWlzQVNDSUlTcGFjZShjaCkpIHsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnKCcpCi0gICAgICAg
ICAgICAgICAgbmVzdGluZysrOwotICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJyknICYmIG5l
c3RpbmcgPiAwKQotICAgICAgICAgICAgICAgIG5lc3RpbmctLTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKG5lc3RpbmcgPT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBzKys7Ci0gICAgfQotfQotCi0vLyByZXR1cm5zIDAtMTEgKEphbi1EZWMpOyAtMSBvbiBm
YWlsdXJlCi1zdGF0aWMgaW50IGZpbmRNb250aChjb25zdCBjaGFyKiBtb250aFN0cikKLXsKLSAg
ICBBU1NFUlQobW9udGhTdHIpOwotICAgIGNoYXIgbmVlZGxlWzRdOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGlmICghKm1vbnRoU3RyKQotICAgICAgICAgICAg
cmV0dXJuIC0xOwotICAgICAgICBuZWVkbGVbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPih0b0FTQ0lJ
TG93ZXIoKm1vbnRoU3RyKyspKTsKLSAgICB9Ci0gICAgbmVlZGxlWzNdID0gJ1wwJzsKLSAgICBj
b25zdCBjaGFyICpoYXlzdGFjayA9ICJqYW5mZWJtYXJhcHJtYXlqdW5qdWxhdWdzZXBvY3Rub3Zk
ZWMiOwotICAgIGNvbnN0IGNoYXIgKnN0ciA9IHN0cnN0cihoYXlzdGFjaywgbmVlZGxlKTsKLSAg
ICBpZiAoc3RyKSB7Ci0gICAgICAgIGludCBwb3NpdGlvbiA9IHN0YXRpY19jYXN0PGludD4oc3Ry
IC0gaGF5c3RhY2spOwotICAgICAgICBpZiAocG9zaXRpb24gJSAzID09IDApCi0gICAgICAgICAg
ICByZXR1cm4gcG9zaXRpb24gLyAzOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRp
YyBib29sIHBhcnNlSW50KGNvbnN0IGNoYXIqIHN0cmluZywgY2hhcioqIHN0b3BQb3NpdGlvbiwg
aW50IGJhc2UsIGludCogcmVzdWx0KQotewotICAgIGxvbmcgbG9uZ1Jlc3VsdCA9IHN0cnRvbChz
dHJpbmcsIHN0b3BQb3NpdGlvbiwgYmFzZSk7Ci0gICAgLy8gQXZvaWQgdGhlIHVzZSBvZiBlcnJu
byBhcyBpdCBpcyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MgQ0UKLSAgICBpZiAoc3RyaW5nID09
ICpzdG9wUG9zaXRpb24gfHwgbG9uZ1Jlc3VsdCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1pbigpIHx8IGxvbmdSZXN1bHQgPj0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxpbnQ+KGxv
bmdSZXN1bHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBwYXJzZUxvbmco
Y29uc3QgY2hhciogc3RyaW5nLCBjaGFyKiogc3RvcFBvc2l0aW9uLCBpbnQgYmFzZSwgbG9uZyog
cmVzdWx0KQotewotICAgICpyZXN1bHQgPSBzdHJ0b2woc3RyaW5nLCBzdG9wUG9zaXRpb24sIGJh
c2UpOwotICAgIC8vIEF2b2lkIHRoZSB1c2Ugb2YgZXJybm8gYXMgaXQgaXMgbm90IGF2YWlsYWJs
ZSBvbiBXaW5kb3dzIENFCi0gICAgaWYgKHN0cmluZyA9PSAqc3RvcFBvc2l0aW9uIHx8ICpyZXN1
bHQgPT0gc3RkOjpudW1lcmljX2xpbWl0czxsb25nPjo6bWluKCkgfHwgKnJlc3VsdCA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPGxvbmc+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi0vLyBQYXJzZXMgYSBkYXRlIHdpdGggdGhlIGZvcm1hdCBZWVlZ
Wy1NTVstRERdXS4KLS8vIFllYXIgcGFyc2luZyBpcyBsZW5pZW50LCBhbGxvd3MgYW55IG51bWJl
ciBvZiBkaWdpdHMsIGFuZCArLy0uCi0vLyBSZXR1cm5zIDAgaWYgYSBwYXJzZSBlcnJvciBvY2N1
cnMsIGVsc2UgcmV0dXJucyB0aGUgZW5kIG9mIHRoZSBwYXJzZWQgcG9ydGlvbiBvZiB0aGUgc3Ry
aW5nLgotc3RhdGljIGNoYXIqIHBhcnNlRVM1RGF0ZVBvcnRpb24oY29uc3QgY2hhciogY3VycmVu
dFBvc2l0aW9uLCBpbnQmIHllYXIsIGxvbmcmIG1vbnRoLCBsb25nJiBkYXkpCi17Ci0gICAgY2hh
ciogcG9zdFBhcnNlUG9zaXRpb247Ci0KLSAgICAvLyBUaGlzIGlzIGEgYml0IG1vcmUgbGVuaWVu
dCBvbiB0aGUgeWVhciBzdHJpbmcgdGhhbiBFUzUgc3BlY2lmaWVzOgotICAgIC8vIGluc3RlYWQg
b2YgcmVzdHJpY3RpbmcgdG8gNCBkaWdpdHMgKG9yIDYgZGlnaXRzIHdpdGggbWFuZGF0b3J5ICsv
LSksCi0gICAgLy8gaXQgYWNjZXB0cyBhbnkgaW50ZWdlciB2YWx1ZS4gQ29uc2lkZXIgdGhpcyBh
biBpbXBsZW1lbnRhdGlvbiBmYWxsYmFjay4KLSAgICBpZiAoIXBhcnNlSW50KGN1cnJlbnRQb3Np
dGlvbiwgJnBvc3RQYXJzZVBvc2l0aW9uLCAxMCwgJnllYXIpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIC8vIENoZWNrIGZvciBwcmVzZW5jZSBvZiAtTU0gcG9ydGlvbi4KLSAgICBpZiAoKnBv
c3RQYXJzZVBvc2l0aW9uICE9ICctJykKLSAgICAgICAgcmV0dXJuIHBvc3RQYXJzZVBvc2l0aW9u
OwotICAgIGN1cnJlbnRQb3NpdGlvbiA9IHBvc3RQYXJzZVBvc2l0aW9uICsgMTsKLSAgICAKLSAg
ICBpZiAoIWlzQVNDSUlEaWdpdCgqY3VycmVudFBvc2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKCFwYXJzZUxvbmcoY3VycmVudFBvc2l0aW9uLCAmcG9zdFBhcnNlUG9zaXRpb24s
IDEwLCAmbW9udGgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoKHBvc3RQYXJzZVBvc2l0
aW9uIC0gY3VycmVudFBvc2l0aW9uKSAhPSAyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8v
IENoZWNrIGZvciBwcmVzZW5jZSBvZiAtREQgcG9ydGlvbi4KLSAgICBpZiAoKnBvc3RQYXJzZVBv
c2l0aW9uICE9ICctJykKLSAgICAgICAgcmV0dXJuIHBvc3RQYXJzZVBvc2l0aW9uOwotICAgIGN1
cnJlbnRQb3NpdGlvbiA9IHBvc3RQYXJzZVBvc2l0aW9uICsgMTsKLSAgICAKLSAgICBpZiAoIWlz
QVNDSUlEaWdpdCgqY3VycmVudFBvc2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYg
KCFwYXJzZUxvbmcoY3VycmVudFBvc2l0aW9uLCAmcG9zdFBhcnNlUG9zaXRpb24sIDEwLCAmZGF5
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKChwb3N0UGFyc2VQb3NpdGlvbiAtIGN1cnJl
bnRQb3NpdGlvbikgIT0gMikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHBvc3RQYXJz
ZVBvc2l0aW9uOwotfQotCi0vLyBQYXJzZXMgYSB0aW1lIHdpdGggdGhlIGZvcm1hdCBISDptbVs6
c3NbLnNzc11dW1p8KCt8LSkwMDowMF0uCi0vLyBGcmFjdGlvbmFsIHNlY29uZHMgcGFyc2luZyBp
cyBsZW5pZW50LCBhbGxvd3MgYW55IG51bWJlciBvZiBkaWdpdHMuCi0vLyBSZXR1cm5zIDAgaWYg
YSBwYXJzZSBlcnJvciBvY2N1cnMsIGVsc2UgcmV0dXJucyB0aGUgZW5kIG9mIHRoZSBwYXJzZWQg
cG9ydGlvbiBvZiB0aGUgc3RyaW5nLgotc3RhdGljIGNoYXIqIHBhcnNlRVM1VGltZVBvcnRpb24o
Y2hhciogY3VycmVudFBvc2l0aW9uLCBsb25nJiBob3VycywgbG9uZyYgbWludXRlcywgZG91Ymxl
JiBzZWNvbmRzLCBsb25nJiB0aW1lWm9uZVNlY29uZHMpCi17Ci0gICAgY2hhciogcG9zdFBhcnNl
UG9zaXRpb247Ci0gICAgaWYgKCFpc0FTQ0lJRGlnaXQoKmN1cnJlbnRQb3NpdGlvbikpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGlmICghcGFyc2VMb25nKGN1cnJlbnRQb3NpdGlvbiwgJnBvc3RQ
YXJzZVBvc2l0aW9uLCAxMCwgJmhvdXJzKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCpw
b3N0UGFyc2VQb3NpdGlvbiAhPSAnOicgfHwgKHBvc3RQYXJzZVBvc2l0aW9uIC0gY3VycmVudFBv
c2l0aW9uKSAhPSAyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjdXJyZW50UG9zaXRpb24gPSBw
b3N0UGFyc2VQb3NpdGlvbiArIDE7Ci0gICAgCi0gICAgaWYgKCFpc0FTQ0lJRGlnaXQoKmN1cnJl
bnRQb3NpdGlvbikpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghcGFyc2VMb25nKGN1cnJl
bnRQb3NpdGlvbiwgJnBvc3RQYXJzZVBvc2l0aW9uLCAxMCwgJm1pbnV0ZXMpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpZiAoKHBvc3RQYXJzZVBvc2l0aW9uIC0gY3VycmVudFBvc2l0aW9uKSAh
PSAyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjdXJyZW50UG9zaXRpb24gPSBwb3N0UGFyc2VQ
b3NpdGlvbjsKLQotICAgIC8vIFNlY29uZHMgYXJlIG9wdGlvbmFsLgotICAgIGlmICgqY3VycmVu
dFBvc2l0aW9uID09ICc6JykgewotICAgICAgICArK2N1cnJlbnRQb3NpdGlvbjsKLSAgICAKLSAg
ICAgICAgbG9uZyBpbnRTZWNvbmRzOwotICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqY3VycmVu
dFBvc2l0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoIXBhcnNlTG9u
ZyhjdXJyZW50UG9zaXRpb24sICZwb3N0UGFyc2VQb3NpdGlvbiwgMTAsICZpbnRTZWNvbmRzKSkK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoKHBvc3RQYXJzZVBvc2l0aW9uIC0g
Y3VycmVudFBvc2l0aW9uKSAhPSAyKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHNl
Y29uZHMgPSBpbnRTZWNvbmRzOwotICAgICAgICBpZiAoKnBvc3RQYXJzZVBvc2l0aW9uID09ICcu
JykgewotICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gcG9zdFBhcnNlUG9zaXRpb24gKyAx
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBJbiBFQ01BLTI2Mi01IGl0J3MgYSBiaXQg
dW5jbGVhciBpZiAnLicgY2FuIGJlIHByZXNlbnQgd2l0aG91dCBtaWxsaXNlY29uZHMsIGJ1dAot
ICAgICAgICAgICAgLy8gYSByZWFzb25hYmxlIGludGVycHJldGF0aW9uIGd1aWRlZCBieSB0aGUg
Z2l2ZW4gZXhhbXBsZXMgYW5kIFJGQyAzMzM5IHNheXMgIm5vIi4KLSAgICAgICAgICAgIC8vIFdl
IGNoZWNrIHRoZSBuZXh0IGNoYXJhY3RlciB0byBhdm9pZCByZWFkaW5nICsvLSB0aW1lem9uZSBo
b3VycyBhZnRlciBhbiBpbnZhbGlkIGRlY2ltYWwuCi0gICAgICAgICAgICBpZiAoIWlzQVNDSUlE
aWdpdCgqY3VycmVudFBvc2l0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gV2UgYXJlIG1vcmUgbGVuaWVudCB0aGFuIEVTNSBieSBh
Y2NlcHRpbmcgbW9yZSBvciBsZXNzIHRoYW4gMyBmcmFjdGlvbiBkaWdpdHMuCi0gICAgICAgICAg
ICBsb25nIGZyYWNTZWNvbmRzOwotICAgICAgICAgICAgaWYgKCFwYXJzZUxvbmcoY3VycmVudFBv
c2l0aW9uLCAmcG9zdFBhcnNlUG9zaXRpb24sIDEwLCAmZnJhY1NlY29uZHMpKQotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsb25nIG51bUZyYWNE
aWdpdHMgPSBwb3N0UGFyc2VQb3NpdGlvbiAtIGN1cnJlbnRQb3NpdGlvbjsKLSAgICAgICAgICAg
IHNlY29uZHMgKz0gZnJhY1NlY29uZHMgKiBwb3coMTAuMCwgc3RhdGljX2Nhc3Q8ZG91YmxlPigt
bnVtRnJhY0RpZ2l0cykpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IHBv
c3RQYXJzZVBvc2l0aW9uOwotICAgIH0KLQotICAgIGlmICgqY3VycmVudFBvc2l0aW9uID09ICda
JykKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbiArIDE7Ci0KLSAgICBib29sIHR6TmVn
YXRpdmU7Ci0gICAgaWYgKCpjdXJyZW50UG9zaXRpb24gPT0gJy0nKQotICAgICAgICB0ek5lZ2F0
aXZlID0gdHJ1ZTsKLSAgICBlbHNlIGlmICgqY3VycmVudFBvc2l0aW9uID09ICcrJykKLSAgICAg
ICAgdHpOZWdhdGl2ZSA9IGZhbHNlOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRQ
b3NpdGlvbjsgLy8gbm8gdGltZXpvbmUKLSAgICArK2N1cnJlbnRQb3NpdGlvbjsKLSAgICAKLSAg
ICBsb25nIHR6SG91cnM7Ci0gICAgbG9uZyB0ekhvdXJzQWJzOwotICAgIGxvbmcgdHpNaW51dGVz
OwotICAgIAotICAgIGlmICghaXNBU0NJSURpZ2l0KCpjdXJyZW50UG9zaXRpb24pKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBpZiAoIXBhcnNlTG9uZyhjdXJyZW50UG9zaXRpb24sICZwb3N0UGFy
c2VQb3NpdGlvbiwgMTAsICZ0ekhvdXJzKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCpw
b3N0UGFyc2VQb3NpdGlvbiAhPSAnOicgfHwgKHBvc3RQYXJzZVBvc2l0aW9uIC0gY3VycmVudFBv
c2l0aW9uKSAhPSAyKQotICAgICAgICByZXR1cm4gMDsKLSAgICB0ekhvdXJzQWJzID0gbGFicyh0
ekhvdXJzKTsKLSAgICBjdXJyZW50UG9zaXRpb24gPSBwb3N0UGFyc2VQb3NpdGlvbiArIDE7Ci0g
ICAgCi0gICAgaWYgKCFpc0FTQ0lJRGlnaXQoKmN1cnJlbnRQb3NpdGlvbikpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIGlmICghcGFyc2VMb25nKGN1cnJlbnRQb3NpdGlvbiwgJnBvc3RQYXJzZVBv
c2l0aW9uLCAxMCwgJnR6TWludXRlcykpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICgocG9z
dFBhcnNlUG9zaXRpb24gLSBjdXJyZW50UG9zaXRpb24pICE9IDIpCi0gICAgICAgIHJldHVybiAw
OwotICAgIGN1cnJlbnRQb3NpdGlvbiA9IHBvc3RQYXJzZVBvc2l0aW9uOwotICAgIAotICAgIGlm
ICh0ekhvdXJzQWJzID4gMjQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICh0ek1pbnV0ZXMg
PCAwIHx8IHR6TWludXRlcyA+IDU5KQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICB0aW1l
Wm9uZVNlY29uZHMgPSA2MCAqICh0ek1pbnV0ZXMgKyAoNjAgKiB0ekhvdXJzQWJzKSk7Ci0gICAg
aWYgKHR6TmVnYXRpdmUpCi0gICAgICAgIHRpbWVab25lU2Vjb25kcyA9IC10aW1lWm9uZVNlY29u
ZHM7Ci0KLSAgICByZXR1cm4gY3VycmVudFBvc2l0aW9uOwotfQotCi1kb3VibGUgcGFyc2VFUzVE
YXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhjb25zdCBjaGFyKiBkYXRlU3RyaW5nKQot
ewotICAgIC8vIFRoaXMgcGFyc2VzIGEgZGF0ZSBvZiB0aGUgZm9ybSBkZWZpbmVkIGluIEVDTUEt
MjYyLTUsIHNlY3Rpb24gMTUuOS4xLjE1Ci0gICAgLy8gKHNpbWlsYXIgdG8gUkZDIDMzMzkgLyBJ
U08gODYwMTogWVlZWS1NTS1ERFRISDptbTpzc1suc3NzXVopLgotICAgIC8vIEluIG1vc3QgY2Fz
ZXMgaXQgaXMgaW50ZW50aW9uYWxseSBzdHJpY3QgKGUuZy4gY29ycmVjdCBmaWVsZCB3aWR0aHMs
IG5vIHN0cmF5IHdoaXRlc3BhY2UpLgotICAgIAotICAgIHN0YXRpYyBjb25zdCBsb25nIGRheXNQ
ZXJNb250aFsxMl0gPSB7IDMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAz
MCwgMzEgfTsKLSAgICAKLSAgICAvLyBUaGUgeWVhciBtdXN0IGJlIHByZXNlbnQsIGJ1dCB0aGUg
b3RoZXIgZmllbGRzIG1heSBiZSBvbWl0dGVkIC0gc2VlIEVTNS4xIDE1LjkuMS4xNS4KLSAgICBp
bnQgeWVhciA9IDA7Ci0gICAgbG9uZyBtb250aCA9IDE7Ci0gICAgbG9uZyBkYXkgPSAxOwotICAg
IGxvbmcgaG91cnMgPSAwOwotICAgIGxvbmcgbWludXRlcyA9IDA7Ci0gICAgZG91YmxlIHNlY29u
ZHMgPSAwOwotICAgIGxvbmcgdGltZVpvbmVTZWNvbmRzID0gMDsKLQotICAgIC8vIFBhcnNlIHRo
ZSBkYXRlIFlZWVlbLU1NWy1ERF1dCi0gICAgY2hhciogY3VycmVudFBvc2l0aW9uID0gcGFyc2VF
UzVEYXRlUG9ydGlvbihkYXRlU3RyaW5nLCB5ZWFyLCBtb250aCwgZGF5KTsKLSAgICBpZiAoIWN1
cnJlbnRQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7Ci0gICAgLy8gTG9vayBmb3IgYSB0aW1lIHBvcnRpb24uCi0gICAgaWYg
KCpjdXJyZW50UG9zaXRpb24gPT0gJ1QnKSB7Ci0gICAgICAgIC8vIFBhcnNlIHRoZSB0aW1lIEhI
Om1tWzpzc1suc3NzXV1bWnwoK3wtKTAwOjAwXQotICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBw
YXJzZUVTNVRpbWVQb3J0aW9uKGN1cnJlbnRQb3NpdGlvbiArIDEsIGhvdXJzLCBtaW51dGVzLCBz
ZWNvbmRzLCB0aW1lWm9uZVNlY29uZHMpOwotICAgICAgICBpZiAoIWN1cnJlbnRQb3NpdGlvbikK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05h
TigpOwotICAgIH0KLSAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgcGFyc2VkIGFsbCBjaGFyYWN0
ZXJzIGluIHRoZSBzdHJpbmcuCi0gICAgaWYgKCpjdXJyZW50UG9zaXRpb24pCi0gICAgICAgIHJl
dHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotCi0gICAgLy8g
QSBmZXcgb2YgdGhlc2UgY2hlY2tzIGNvdWxkIGJlIGRvbmUgaW5saW5lIGFib3ZlLCBidXQgc2lu
Y2UgbWFueSBvZiB0aGVtIGFyZSBpbnRlcnJlbGF0ZWQKLSAgICAvLyB3ZSB3b3VsZCBiZSBzYWNy
aWZpY2luZyByZWFkYWJpbGl0eSB0byAib3B0aW1pemUiIHRoZSAocHJlc3VtYWJseSBsZXNzIGNv
bW1vbikgZmFpbHVyZSBwYXRoLgotICAgIGlmIChtb250aCA8IDEgfHwgbW9udGggPiAxMikKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgaWYgKGRheSA8IDEgfHwgZGF5ID4gZGF5c1Blck1vbnRoW21vbnRoIC0gMV0pCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgIGlm
IChtb250aCA9PSAyICYmIGRheSA+IDI4ICYmICFpc0xlYXBZZWFyKHllYXIpKQotICAgICAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBpZiAo
aG91cnMgPCAwIHx8IGhvdXJzID4gMjQpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgIGlmIChob3VycyA9PSAyNCAmJiAobWludXRl
cyB8fCBzZWNvbmRzKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7Ci0gICAgaWYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPiA1OSkKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgaWYgKHNlY29uZHMgPCAwIHx8IHNlY29uZHMgPj0gNjEpCi0gICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgIGlmIChzZWNvbmRzID4g
NjApIHsKLSAgICAgICAgLy8gRGlzY2FyZCBsZWFwIHNlY29uZHMgYnkgY2xhbXBpbmcgdG8gdGhl
IGVuZCBvZiBhIG1pbnV0ZS4KLSAgICAgICAgc2Vjb25kcyA9IDYwOwotICAgIH0KLSAgICAgICAg
Ci0gICAgZG91YmxlIGRhdGVTZWNvbmRzID0geW1kaG1zVG9TZWNvbmRzKHllYXIsIG1vbnRoLCBk
YXksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSAtIHRpbWVab25lU2Vjb25kczsKLSAgICByZXR1
cm4gZGF0ZVNlY29uZHMgKiBtc1BlclNlY29uZDsKLX0KLQotLy8gT2RkIGNhc2Ugd2hlcmUgJ2V4
ZWMnIGlzIGFsbG93ZWQgdG8gYmUgMCwgdG8gYWNjb21vZGF0ZSBhIGNhbGxlciBpbiBXZWJDb3Jl
LgotZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoY29uc3QgY2hh
ciogZGF0ZVN0cmluZywgYm9vbCYgaGF2ZVRaLCBpbnQmIG9mZnNldCkKLXsKLSAgICBoYXZlVFog
PSBmYWxzZTsKLSAgICBvZmZzZXQgPSAwOwotCi0gICAgLy8gVGhpcyBwYXJzZXMgYSBkYXRlIGlu
IHRoZSBmb3JtOgotICAgIC8vICAgICBUdWVzZGF5LCAwOS1Ob3YtOTkgMjM6MTI6NDAgR01UCi0g
ICAgLy8gb3IKLSAgICAvLyAgICAgU2F0LCAwMS1KYW4tMjAwMCAwODowMDowMCBHTVQKLSAgICAv
LyBvcgotICAgIC8vICAgICBTYXQsIDAxIEphbiAyMDAwIDA4OjAwOjAwIEdNVAotICAgIC8vIG9y
Ci0gICAgLy8gICAgIDAxIEphbiA5OSAyMjowMCArMDEwMCAgICAoZXhjZXB0aW9ucyBpbiByZmM4
MjIvcmZjMjgyMikKLSAgICAvLyAjIyMgbm9uIFJGQyBmb3JtYXRzLCBhZGRlZCBmb3IgSmF2YXNj
cmlwdDoKLSAgICAvLyAgICAgW1dlZG5lc2RheV0gSmFudWFyeSAwOSAxOTk5IDIzOjEyOjQwIEdN
VAotICAgIC8vICAgICBbV2VkbmVzZGF5XSBKYW51YXJ5IDA5IDIzOjEyOjQwIEdNVCAxOTk5Ci0g
ICAgLy8KLSAgICAvLyBXZSBpZ25vcmUgdGhlIHdlZWtkYXkuCi0gICAgIAotICAgIC8vIFNraXAg
bGVhZGluZyBzcGFjZQotICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsKLQot
ICAgIGxvbmcgbW9udGggPSAtMTsKLSAgICBjb25zdCBjaGFyICp3b3JkU3RhcnQgPSBkYXRlU3Ry
aW5nOwotICAgIC8vIENoZWNrIGNvbnRlbnRzIG9mIGZpcnN0IHdvcmRzIGlmIG5vdCBudW1iZXIK
LSAgICB3aGlsZSAoKmRhdGVTdHJpbmcgJiYgIWlzQVNDSUlEaWdpdCgqZGF0ZVN0cmluZykpIHsK
LSAgICAgICAgaWYgKGlzQVNDSUlTcGFjZSgqZGF0ZVN0cmluZykgfHwgKmRhdGVTdHJpbmcgPT0g
JygnKSB7Ci0gICAgICAgICAgICBpZiAoZGF0ZVN0cmluZyAtIHdvcmRTdGFydCA+PSAzKQotICAg
ICAgICAgICAgICAgIG1vbnRoID0gZmluZE1vbnRoKHdvcmRTdGFydCk7Ci0gICAgICAgICAgICBz
a2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7Ci0gICAgICAgICAgICB3b3JkU3RhcnQg
PSBkYXRlU3RyaW5nOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgZGF0ZVN0cmluZysrOwot
ICAgIH0KLQotICAgIC8vIE1pc3NpbmcgZGVsaW1pdGVyIGJldHdlZW4gbW9udGggYW5kIGRheSAo
bGlrZSAiSmFudWFyeTI5Iik/Ci0gICAgaWYgKG1vbnRoID09IC0xICYmIHdvcmRTdGFydCAhPSBk
YXRlU3RyaW5nKQotICAgICAgICBtb250aCA9IGZpbmRNb250aCh3b3JkU3RhcnQpOwotCi0gICAg
c2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOwotCi0gICAgaWYgKCEqZGF0ZVN0cmlu
ZykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7Ci0KLSAgICAvLyAnIDA5LU5vdi05OSAyMzoxMjo0MCBHTVQnCi0gICAgY2hhciogbmV3UG9z
U3RyOwotICAgIGxvbmcgZGF5OwotICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQ
b3NTdHIsIDEwLCAmZGF5KSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKLQotICAgIGlm
IChkYXkgPCAwKQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpx
dWlldF9OYU4oKTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8aW50PiB5ZWFyOwotICAgIGlmIChkYXkg
PiAzMSkgewotICAgICAgICAvLyAjIyMgd2hlcmUgaXMgdGhlIGJvdW5kYXJ5IGFuZCB3aGF0IGhh
cHBlbnMgYmVsb3c/Ci0gICAgICAgIGlmICgqZGF0ZVN0cmluZyAhPSAnLycpCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAg
ICAgLy8gbG9va3MgbGlrZSBhIFlZWVkvTU0vREQgZGF0ZQotICAgICAgICBpZiAoISorK2RhdGVT
dHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpx
dWlldF9OYU4oKTsKLSAgICAgICAgaWYgKGRheSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1pbigpIHx8IGRheSA+PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgICAgIHllYXIgPSBzdGF0aWNfY2FzdDxpbnQ+KGRheSk7Ci0gICAgICAgIGlmICghcGFyc2VM
b25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmbW9udGgpKQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIG1v
bnRoIC09IDE7Ci0gICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7Ci0gICAgICAgIGlmICgq
ZGF0ZVN0cmluZysrICE9ICcvJyB8fCAhKmRhdGVTdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgaWYgKCFw
YXJzZUxvbmcoZGF0ZVN0cmluZywgJm5ld1Bvc1N0ciwgMTAsICZkYXkpKQotICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAg
IGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7Ci0gICAgfSBlbHNlIGlmICgqZGF0ZVN0cmluZyA9PSAn
LycgJiYgbW9udGggPT0gLTEpIHsKLSAgICAgICAgZGF0ZVN0cmluZysrOwotICAgICAgICAvLyBU
aGlzIGxvb2tzIGxpa2UgYSBNTS9ERC9ZWVlZIGRhdGUsIG5vdCBhbiBSRkMgZGF0ZS4KLSAgICAg
ICAgbW9udGggPSBkYXkgLSAxOyAvLyAwLWJhc2VkCi0gICAgICAgIGlmICghcGFyc2VMb25nKGRh
dGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmZGF5KSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICBpZiAoZGF5IDwg
MSB8fCBkYXkgPiAzMSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwotICAg
ICAgICBpZiAoKmRhdGVTdHJpbmcgPT0gJy8nKQotICAgICAgICAgICAgZGF0ZVN0cmluZysrOwot
ICAgICAgICBpZiAoISpkYXRlU3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
ICgqZGF0ZVN0cmluZyA9PSAnLScpCi0gICAgICAgICAgICBkYXRlU3RyaW5nKys7Ci0KLSAgICAg
ICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOwotCi0gICAgICAgIGlmICgqZGF0
ZVN0cmluZyA9PSAnLCcpCi0gICAgICAgICAgICBkYXRlU3RyaW5nKys7Ci0KLSAgICAgICAgaWYg
KG1vbnRoID09IC0xKSB7IC8vIG5vdCBmb3VuZCB5ZXQKLSAgICAgICAgICAgIG1vbnRoID0gZmlu
ZE1vbnRoKGRhdGVTdHJpbmcpOwotICAgICAgICAgICAgaWYgKG1vbnRoID09IC0xKQotICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
OwotCi0gICAgICAgICAgICB3aGlsZSAoKmRhdGVTdHJpbmcgJiYgKmRhdGVTdHJpbmcgIT0gJy0n
ICYmICpkYXRlU3RyaW5nICE9ICcsJyAmJiAhaXNBU0NJSVNwYWNlKCpkYXRlU3RyaW5nKSkKLSAg
ICAgICAgICAgICAgICBkYXRlU3RyaW5nKys7Ci0KLSAgICAgICAgICAgIGlmICghKmRhdGVTdHJp
bmcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCk7Ci0KLSAgICAgICAgICAgIC8vICctOTkgMjM6MTI6NDAgR01UJwotICAgICAg
ICAgICAgaWYgKCpkYXRlU3RyaW5nICE9ICctJyAmJiAqZGF0ZVN0cmluZyAhPSAnLycgJiYgKmRh
dGVTdHJpbmcgIT0gJywnICYmICFpc0FTQ0lJU3BhY2UoKmRhdGVTdHJpbmcpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwot
ICAgICAgICAgICAgZGF0ZVN0cmluZysrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1v
bnRoIDwgMCB8fCBtb250aCA+IDExKQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLQotICAgIC8vICc5OSAyMzoxMjo0MCBHTVQnCi0gICAg
aWYgKCpkYXRlU3RyaW5nICYmICF5ZWFyKSB7Ci0gICAgICAgIGludCByZXN1bHQgPSAwOwotICAg
ICAgICBpZiAoIXBhcnNlSW50KGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmcmVzdWx0KSkK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05h
TigpOwotICAgICAgICB5ZWFyID0gcmVzdWx0OwotICAgIH0KLQotICAgIC8vIERvbid0IGZhaWwg
aWYgdGhlIHRpbWUgaXMgbWlzc2luZy4KLSAgICBsb25nIGhvdXIgPSAwOwotICAgIGxvbmcgbWlu
dXRlID0gMDsKLSAgICBsb25nIHNlY29uZCA9IDA7Ci0gICAgaWYgKCEqbmV3UG9zU3RyKQotICAg
ICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwotICAgIGVsc2UgewotICAgICAgICAvLyAnIDIz
OjEyOjQwIEdNVCcKLSAgICAgICAgaWYgKCEoaXNBU0NJSVNwYWNlKCpuZXdQb3NTdHIpIHx8ICpu
ZXdQb3NTdHIgPT0gJywnKSkgewotICAgICAgICAgICAgaWYgKCpuZXdQb3NTdHIgIT0gJzonKQot
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpOwotICAgICAgICAgICAgLy8gVGhlcmUgd2FzIG5vIHllYXI7IHRoZSBudW1iZXIgd2Fz
IHRoZSBob3VyLgotICAgICAgICAgICAgeWVhciA9IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIGluIHRoZSBub3JtYWwgY2FzZSAod2UgcGFyc2VkIHRoZSB5
ZWFyKSwgYWR2YW5jZSB0byB0aGUgbmV4dCBudW1iZXIKLSAgICAgICAgICAgIGRhdGVTdHJpbmcg
PSArK25ld1Bvc1N0cjsKLSAgICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3Ry
aW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcnNlTG9uZyhkYXRlU3RyaW5nLCAmbmV3UG9z
U3RyLCAxMCwgJmhvdXIpOwotICAgICAgICAvLyBEbyBub3QgY2hlY2sgZm9yIGVycm5vIGhlcmUg
c2luY2Ugd2Ugd2FudCB0byBjb250aW51ZQotICAgICAgICAvLyBldmVuIGlmIGVycm5vIHdhcyBz
ZXQgYmVjYXN1ZSB3ZSBhcmUgc3RpbGwgbG9va2luZwotICAgICAgICAvLyBmb3IgdGhlIHRpbWV6
b25lIQotCi0gICAgICAgIC8vIFJlYWQgYSBudW1iZXI/IElmIG5vdCwgdGhpcyBtaWdodCBiZSBh
IHRpbWV6b25lIG5hbWUuCi0gICAgICAgIGlmIChuZXdQb3NTdHIgIT0gZGF0ZVN0cmluZykgewot
ICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKLQotICAgICAgICAgICAgaWYgKGhv
dXIgPCAwIHx8IGhvdXIgPiAyMykKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLQotICAgICAgICAgICAgaWYgKCEqZGF0ZVN0
cmluZykKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKTsKLQotICAgICAgICAgICAgLy8gJzoxMjo0MCBHTVQnCi0gICAgICAgICAg
ICBpZiAoKmRhdGVTdHJpbmcrKyAhPSAnOicpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0KLSAgICAgICAgICAgIGlmICgh
cGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmbWludXRlKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsK
LSAgICAgICAgICAgIGRhdGVTdHJpbmcgPSBuZXdQb3NTdHI7Ci0KLSAgICAgICAgICAgIGlmICht
aW51dGUgPCAwIHx8IG1pbnV0ZSA+IDU5KQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotCi0gICAgICAgICAgICAvLyAnOjQw
IEdNVCcKLSAgICAgICAgICAgIGlmICgqZGF0ZVN0cmluZyAmJiAqZGF0ZVN0cmluZyAhPSAnOicg
JiYgIWlzQVNDSUlTcGFjZSgqZGF0ZVN0cmluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0KLSAgICAgICAgICAgIC8v
IHNlY29uZHMgYXJlIG9wdGlvbmFsIGluIHJmYzgyMiArIHJmYzI4MjIKLSAgICAgICAgICAgIGlm
ICgqZGF0ZVN0cmluZyA9PSc6JykgewotICAgICAgICAgICAgICAgIGRhdGVTdHJpbmcrKzsKLQot
ICAgICAgICAgICAgICAgIGlmICghcGFyc2VMb25nKGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEw
LCAmc2Vjb25kKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5l
d1Bvc1N0cjsKLQotICAgICAgICAgICAgICAgIGlmIChzZWNvbmQgPCAwIHx8IHNlY29uZCA+IDU5
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2tpcFNwYWNlc0Fu
ZENvbW1lbnRzKGRhdGVTdHJpbmcpOwotCi0gICAgICAgICAgICBpZiAoc3RhcnRzV2l0aExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShkYXRlU3RyaW5nLCAiYW0iKSkgewotICAgICAgICAgICAgICAg
IGlmIChob3VyID4gMTIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICAgICAgICAgIGlmIChob3VyID09
IDEyKQotICAgICAgICAgICAgICAgICAgICBob3VyID0gMDsKLSAgICAgICAgICAgICAgICBkYXRl
U3RyaW5nICs9IDI7Ci0gICAgICAgICAgICAgICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVT
dHJpbmcpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGRhdGVTdHJpbmcsICJwbSIpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGhvdXIg
PiAxMikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpCi0gICAg
ICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7Ci0gICAgICAgICAgICAgICAgZGF0ZVN0cmluZyAr
PSAyOwotICAgICAgICAgICAgICAgIHNraXBTcGFjZXNBbmRDb21tZW50cyhkYXRlU3RyaW5nKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBUaGUgeWVhciBt
YXkgYmUgYWZ0ZXIgdGhlIHRpbWUgYnV0IGJlZm9yZSB0aGUgdGltZSB6b25lLgotICAgIGlmIChp
c0FTQ0lJRGlnaXQoKmRhdGVTdHJpbmcpICYmICF5ZWFyKSB7Ci0gICAgICAgIGludCByZXN1bHQg
PSAwOwotICAgICAgICBpZiAoIXBhcnNlSW50KGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAm
cmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
OnF1aWV0X05hTigpOwotICAgICAgICB5ZWFyID0gcmVzdWx0OwotICAgICAgICBkYXRlU3RyaW5n
ID0gbmV3UG9zU3RyOwotICAgICAgICBza2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7
Ci0gICAgfQotCi0gICAgLy8gRG9uJ3QgZmFpbCBpZiB0aGUgdGltZSB6b25lIGlzIG1pc3Npbmcu
IAotICAgIC8vIFNvbWUgd2Vic2l0ZXMgb21pdCB0aGUgdGltZSB6b25lICg0Mjc1MjA2KS4KLSAg
ICBpZiAoKmRhdGVTdHJpbmcpIHsKLSAgICAgICAgaWYgKHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoZGF0ZVN0cmluZywgImdtdCIpIHx8IHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoZGF0ZVN0cmluZywgInV0YyIpKSB7Ci0gICAgICAgICAgICBkYXRlU3RyaW5n
ICs9IDM7Ci0gICAgICAgICAgICBoYXZlVFogPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCpkYXRlU3RyaW5nID09ICcrJyB8fCAqZGF0ZVN0cmluZyA9PSAnLScpIHsKLSAgICAgICAg
ICAgIGludCBvOwotICAgICAgICAgICAgaWYgKCFwYXJzZUludChkYXRlU3RyaW5nLCAmbmV3UG9z
U3RyLCAxMCwgJm8pKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRz
PGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0
cjsKLQotICAgICAgICAgICAgaWYgKG8gPCAtOTk1OSB8fCBvID4gOTk1OSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLQot
ICAgICAgICAgICAgaW50IHNnbiA9IChvIDwgMCkgPyAtMSA6IDE7Ci0gICAgICAgICAgICBvID0g
YWJzKG8pOwotICAgICAgICAgICAgaWYgKCpkYXRlU3RyaW5nICE9ICc6JykgewotICAgICAgICAg
ICAgICAgIGlmIChvID49IDI0KQotICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAoKG8gLyAx
MDApICogNjAgKyAobyAlIDEwMCkpICogc2duOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgb2Zmc2V0ID0gbyAqIDYwICogc2duOwotICAgICAgICAgICAgfSBlbHNl
IHsgLy8gR01UKzA1OjAwCi0gICAgICAgICAgICAgICAgKytkYXRlU3RyaW5nOyAvLyBza2lwIHRo
ZSAnOicKLSAgICAgICAgICAgICAgICBpbnQgbzI7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJz
ZUludChkYXRlU3RyaW5nLCAmbmV3UG9zU3RyLCAxMCwgJm8yKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAg
ICAgICAgICAgICAgZGF0ZVN0cmluZyA9IG5ld1Bvc1N0cjsKLSAgICAgICAgICAgICAgICBvZmZz
ZXQgPSAobyAqIDYwICsgbzIpICogc2duOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaGF2
ZVRaID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYga25v
d25ab25lIDoga25vd25ab25lcykgewotICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBwYXNz
ZWQtaW4gbGVuZ3RoIGlzIHVzZWQgZm9yIGJvdGggc3RyaW5ncywgdGhlIGZvbGxvd2luZyBjaGVj
a3MgdGhhdAotICAgICAgICAgICAgICAgIC8vIGRhdGVTdHJpbmcgaGFzIHRoZSB0aW1lIHpvbmUg
bmFtZSBhcyBhIHByZWZpeCwgbm90IHRoYXQgaXQgaXMgZXF1YWwuCi0gICAgICAgICAgICAgICAg
YXV0byBsZW5ndGggPSBzdHJsZW4oa25vd25ab25lLnR6TmFtZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGRhdGVTdHJpbmcsIGtub3duWm9uZS50
ek5hbWUsIGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0ga25vd25ab25l
LnR6T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBkYXRlU3RyaW5nICs9IGxlbmd0aDsKLSAg
ICAgICAgICAgICAgICAgICAgaGF2ZVRaID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgc2tpcFNwYWNlc0FuZENvbW1lbnRzKGRhdGVTdHJpbmcpOwotCi0gICAgaWYgKCpkYXRl
U3RyaW5nICYmICF5ZWFyKSB7Ci0gICAgICAgIGludCByZXN1bHQgPSAwOwotICAgICAgICBpZiAo
IXBhcnNlSW50KGRhdGVTdHJpbmcsICZuZXdQb3NTdHIsIDEwLCAmcmVzdWx0KSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAg
ICAgICB5ZWFyID0gcmVzdWx0OwotICAgICAgICBkYXRlU3RyaW5nID0gbmV3UG9zU3RyOwotICAg
ICAgICBza2lwU3BhY2VzQW5kQ29tbWVudHMoZGF0ZVN0cmluZyk7Ci0gICAgfQotCi0gICAgLy8g
VHJhaWxpbmcgZ2FyYmFnZQotICAgIGlmICgqZGF0ZVN0cmluZykKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0KLSAgICAvLyBZMks6IEhh
bmRsZSAyIGRpZ2l0IHllYXJzLgotICAgIGlmICh5ZWFyKSB7Ci0gICAgICAgIGludCB5ZWFyVmFs
dWUgPSB5ZWFyLnZhbHVlKCk7Ci0gICAgICAgIGlmICh5ZWFyVmFsdWUgPj0gMCAmJiB5ZWFyVmFs
dWUgPCAxMDApIHsKLSAgICAgICAgICAgIGlmICh5ZWFyVmFsdWUgPCA1MCkKLSAgICAgICAgICAg
ICAgICB5ZWFyVmFsdWUgKz0gMjAwMDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB5ZWFyVmFsdWUgKz0gMTkwMDsKLSAgICAgICAgfQotICAgICAgICB5ZWFyID0geWVhclZhbHVl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdlIHNlbGVjdCAyMDAwIGFzIGRlZmF1bHQgdmFs
dWUuIFRoaXMgaXMgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnMuCi0gICAgICAgIC8v
IDEuIFllYXIgMjAwMCB3YXMgdXNlZCBmb3IgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHZhcmlh
YmxlIGB5ZWFyYC4gV2hpbGUgaXQgd29uJ3QgYmUgcG9zZWQgdG8gdXNlcnMgaW4gV2ViS2l0LAot
ICAgICAgICAvLyAgICBWOCB1c2VkIHRoaXMgMjAwMCBhcyBpdHMgZGVmYXVsdCB2YWx1ZS4gKEFz
IG9mIEFwcmlsIDIwMTcsIFY4IGlzIHVzaW5nIHRoZSB5ZWFyIDIwMDEgYW5kIFNwaWRlciBNb25r
ZXkgaXMKLSAgICAgICAgLy8gICAgbm90IGRvaW5nIHRoaXMga2luZCBvZiBmYWxsYmFjay4pCi0g
ICAgICAgIC8vIDIuIEl0IGlzIGEgbGVhcCB5ZWFyLiBXaGVuIHVzaW5nIGBuZXcgRGF0ZSgiRmVi
IDI5IilgLCB3ZSBhc3N1bWUgdGhhdCBwZW9wbGUgd2FudCB0byBzYXZlIG1vbnRoIGFuZCBkYXku
Ci0gICAgICAgIC8vICAgIExlYXAgeWVhciBjYW4gc2F2ZSB1c2VyIGlucHV0cyBpZiB0aGV5IGlz
IHZhbGlkLiBJZiB3ZSB1c2UgdGhlIGN1cnJlbnQgeWVhciBpbnN0ZWFkLCB0aGUgY3VycmVudCB5
ZWFyCi0gICAgICAgIC8vICAgIG1heSBub3QgYmUgYSBsZWFwIHllYXIuIEluIHRoYXQgY2FzZSwg
YG5ldyBEYXRlKCJGZWIgMjkiKS5nZXRNb250aCgpYCBiZWNvbWVzIDIgKE1hcmNoKS4KLSAgICAg
ICAgeWVhciA9IDIwMDA7Ci0gICAgfQotICAgIEFTU0VSVCh5ZWFyKTsKLSAgICAKLSAgICByZXR1
cm4geW1kaG1zVG9TZWNvbmRzKHllYXIudmFsdWUoKSwgbW9udGggKyAxLCBkYXksIGhvdXIsIG1p
bnV0ZSwgc2Vjb25kKSAqIG1zUGVyU2Vjb25kOwotfQotCi1kb3VibGUgcGFyc2VEYXRlRnJvbU51
bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhjb25zdCBjaGFyKiBkYXRlU3RyaW5nKQotewotICAgIGJv
b2wgaGF2ZVRaOwotICAgIGludCBvZmZzZXQ7Ci0gICAgZG91YmxlIG1zID0gcGFyc2VEYXRlRnJv
bU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhkYXRlU3RyaW5nLCBoYXZlVFosIG9mZnNldCk7Ci0g
ICAgaWYgKHN0ZDo6aXNuYW4obXMpKQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLQotICAgIC8vIGZhbGwgYmFjayB0byBsb2NhbCB0aW1l
em9uZQotICAgIGlmICghaGF2ZVRaKQotICAgICAgICBvZmZzZXQgPSBjYWxjdWxhdGVMb2NhbFRp
bWVPZmZzZXQobXMsIExvY2FsVGltZSkub2Zmc2V0IC8gbXNQZXJNaW51dGU7IC8vIG1zIHZhbHVl
IGlzIGluIGxvY2FsIHRpbWUgbWlsbGlzZWNvbmRzLgotCi0gICAgcmV0dXJuIG1zIC0gKG9mZnNl
dCAqIG1zUGVyTWludXRlKTsKLX0KLQotZG91YmxlIHRpbWVDbGlwKGRvdWJsZSB0KQotewotICAg
IGlmICghc3RkOjppc2Zpbml0ZSh0KSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgaWYgKGZhYnModCkgPiBtYXhFQ01BU2NyaXB0
VGltZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRf
TmFOKCk7Ci0gICAgcmV0dXJuIHRydW5jKHQpOwotfQotCi0vLyBTZWUgaHR0cDovL3Rvb2xzLmll
dGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuMyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLVN0
cmluZyBtYWtlUkZDMjgyMkRhdGVTdHJpbmcodW5zaWduZWQgZGF5T2ZXZWVrLCB1bnNpZ25lZCBk
YXksIHVuc2lnbmVkIG1vbnRoLCB1bnNpZ25lZCB5ZWFyLCB1bnNpZ25lZCBob3VycywgdW5zaWdu
ZWQgbWludXRlcywgdW5zaWduZWQgc2Vjb25kcywgaW50IHV0Y09mZnNldCkKLXsKLSAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQod2Vla2Rh
eU5hbWVbZGF5T2ZXZWVrXSk7Ci0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIp
OwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKGRheSk7Ci0gICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoJyAnKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtb250aE5hbWVbbW9udGhd
KTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnICcpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTnVtYmVyKHllYXIpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcgJyk7Ci0KLSAgICBh
cHBlbmRUd29EaWdpdE51bWJlcihzdHJpbmdCdWlsZGVyLCBob3Vycyk7Ci0gICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoJzonKTsKLSAgICBhcHBlbmRUd29EaWdpdE51bWJlcihzdHJpbmdCdWlsZGVy
LCBtaW51dGVzKTsKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnOicpOwotICAgIGFwcGVuZFR3
b0RpZ2l0TnVtYmVyKHN0cmluZ0J1aWxkZXIsIHNlY29uZHMpOwotICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCcgJyk7Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh1dGNPZmZzZXQgPiAwID8g
JysnIDogJy0nKTsKLSAgICBpbnQgYWJzb2x1dGVVVENPZmZzZXQgPSBhYnModXRjT2Zmc2V0KTsK
LSAgICBhcHBlbmRUd29EaWdpdE51bWJlcihzdHJpbmdCdWlsZGVyLCBhYnNvbHV0ZVVUQ09mZnNl
dCAvIDYwKTsKLSAgICBhcHBlbmRUd29EaWdpdE51bWJlcihzdHJpbmdCdWlsZGVyLCBhYnNvbHV0
ZVVUQ09mZnNldCAlIDYwKTsKLQotICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL0RhdGVNYXRoLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvRGF0ZU1hdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZmYjU1ODY5
MTRjZTM2NWU0YTlhYWEzMGM1NzhmNTE3MmNhMWFiNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
RGF0ZU1hdGguaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKLSAqCi0g
KiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24KLSAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2Uu
IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogaHR0cDovL3d3dy5t
b3ppbGxhLm9yZy9NUEwvCi0gKgotICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKLSAqIFdJVEhPVVQgV0FS
UkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGlj
ZW5zZQotICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBs
aW1pdGF0aW9ucyB1bmRlciB0aGUKLSAqIExpY2Vuc2UuCi0gKgotICogVGhlIE9yaWdpbmFsIENv
ZGUgaXMgTW96aWxsYSBDb21tdW5pY2F0b3IgY2xpZW50IGNvZGUsIHJlbGVhc2VkCi0gKiBNYXJj
aCAzMSwgMTk5OC4KLSAqCi0gKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFs
IENvZGUgaXMKLSAqIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgotICogUG9y
dGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykg
MTk5OAotICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqIENvbnRyaWJ1dG9yKHMpOgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBv
ZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCi0gKiBlaXRoZXIgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJH
UEwiKSwKLSAqIG9yIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAotICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlz
aW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKLSAqIG9m
IHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSBvbmx5Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3Ig
dGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCi0gKiB1c2UgeW91ciB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgot
ICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2Ug
dGhlbSB3aXRoIHRoZSBub3RpY2UKLSAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5
IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCi0gKiB0aGUgcHJvdmlz
aW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxl
IHVuZGVyCi0gKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRo
ZSBMR1BMLgotICoKLSAqLwotCi0jaWZuZGVmIERhdGVNYXRoX2gKLSNkZWZpbmUgRGF0ZU1hdGhf
aAotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0
cmluZy5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWVu
dW0gVGltZVR5cGUgewotICAgIFVUQ1RpbWUgPSAwLAotICAgIExvY2FsVGltZQotfTsKLQotc3Ry
dWN0IExvY2FsVGltZU9mZnNldCB7Ci0gICAgTG9jYWxUaW1lT2Zmc2V0KCkKLSAgICAgICAgOiBp
c0RTVChmYWxzZSkKLSAgICAgICAgLCBvZmZzZXQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgTG9j
YWxUaW1lT2Zmc2V0KGJvb2wgaXNEU1QsIGludCBvZmZzZXQpCi0gICAgICAgIDogaXNEU1QoaXNE
U1QpCi0gICAgICAgICwgb2Zmc2V0KG9mZnNldCkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IExvY2FsVGltZU9mZnNldCYgb3RoZXIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gaXNEU1QgPT0gb3RoZXIuaXNEU1QgJiYgb2Zmc2V0ID09IG90aGVyLm9mZnNldDsKLSAg
ICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgTG9jYWxUaW1lT2Zmc2V0JiBvdGhlcikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBpc0RTVCAhPSBvdGhlci5pc0RTVCB8fCBvZmZzZXQgIT0g
b3RoZXIub2Zmc2V0OwotICAgIH0KLQotICAgIGJvb2wgaXNEU1Q7Ci0gICAgaW50IG9mZnNldDsK
LX07Ci0KLXZvaWQgaW5pdGlhbGl6ZURhdGVzKCk7Ci1pbnQgZXF1aXZhbGVudFllYXJGb3JEU1Qo
aW50IHllYXIpOwotCi0vLyBOb3QgcmVhbGx5IG1hdGggcmVsYXRlZCwgYnV0IHRoaXMgaXMgY3Vy
cmVudGx5IHRoZSBvbmx5IHNoYXJlZCBwbGFjZSB0byBwdXQgdGhlc2UuCi1XVEZfRVhQT1JUX1BS
SVZBVEUgZG91YmxlIHBhcnNlRVM1RGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoY29u
c3QgY2hhciogZGF0ZVN0cmluZyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHBhcnNlRGF0
ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoY29uc3QgY2hhciogZGF0ZVN0cmluZyk7Ci1X
VEZfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJh
Y3RlcnMoY29uc3QgY2hhciogZGF0ZVN0cmluZywgYm9vbCYgaGF2ZVRaLCBpbnQmIG9mZnNldCk7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRpbWVDbGlwKGRvdWJsZSk7Ci0vLyBkYXlPZldl
ZWs6IFswLCA2XSAwIGJlaW5nIE1vbmRheSwgZGF5OiBbMSwgMzFdLCBtb250aDogWzAsIDExXSwg
eWVhcjogZXg6IDIwMTEsIGhvdXJzOiBbMCwgMjNdLCBtaW51dGVzOiBbMCwgNTldLCBzZWNvbmRz
OiBbMCwgNTldLCB1dGNPZmZzZXQ6IFstNzIwLDcyMF0uIAotU3RyaW5nIG1ha2VSRkMyODIyRGF0
ZVN0cmluZyh1bnNpZ25lZCBkYXlPZldlZWssIHVuc2lnbmVkIGRheSwgdW5zaWduZWQgbW9udGgs
IHVuc2lnbmVkIHllYXIsIHVuc2lnbmVkIGhvdXJzLCB1bnNpZ25lZCBtaW51dGVzLCB1bnNpZ25l
ZCBzZWNvbmRzLCBpbnQgdXRjT2Zmc2V0KTsKLQotaW5saW5lIGRvdWJsZSBqc0N1cnJlbnRUaW1l
KCkKLXsKLSAgICAvLyBKYXZhU2NyaXB0IGRvZXNuJ3QgcmVjb2duaXplIGZyYWN0aW9ucyBvZiBh
IG1pbGxpc2Vjb25kLgotICAgIHJldHVybiBmbG9vcihXVEY6OmN1cnJlbnRUaW1lTVMoKSk7Ci19
Ci0KLWNvbnN0IGNoYXIqIGNvbnN0IHdlZWtkYXlOYW1lWzddID0geyAiTW9uIiwgIlR1ZSIsICJX
ZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiLCAiU3VuIiB9OwotY29uc3QgY2hhciogY29uc3QgbW9u
dGhOYW1lWzEyXSA9IHsgIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwg
Ikp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIiB9OwotY29uc3QgY2hhciog
Y29uc3QgbW9udGhGdWxsTmFtZVsxMl0gPSB7ICJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgIk1hcmNo
IiwgIkFwcmlsIiwgIk1heSIsICJKdW5lIiwgIkp1bHkiLCAiQXVndXN0IiwgIlNlcHRlbWJlciIs
ICJPY3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIiB9OwotCi1jb25zdCBkb3VibGUgaG91
cnNQZXJEYXkgPSAyNC4wOwotY29uc3QgZG91YmxlIG1pbnV0ZXNQZXJIb3VyID0gNjAuMDsKLWNv
bnN0IGRvdWJsZSBzZWNvbmRzUGVyTWludXRlID0gNjAuMDsKLWNvbnN0IGRvdWJsZSBtc1BlclNl
Y29uZCA9IDEwMDAuMDsKLWNvbnN0IGRvdWJsZSBtc1Blck1vbnRoID0gMjU5MjAwMDAwMC4wOwot
Y29uc3QgZG91YmxlIHNlY29uZHNQZXJIb3VyID0gc2Vjb25kc1Blck1pbnV0ZSAqIG1pbnV0ZXNQ
ZXJIb3VyOwotY29uc3QgZG91YmxlIHNlY29uZHNQZXJEYXkgPSBzZWNvbmRzUGVySG91ciAqIGhv
dXJzUGVyRGF5OwotY29uc3QgZG91YmxlIG1zUGVyTWludXRlID0gbXNQZXJTZWNvbmQgKiBzZWNv
bmRzUGVyTWludXRlOwotY29uc3QgZG91YmxlIG1zUGVySG91ciA9IG1zUGVyU2Vjb25kICogc2Vj
b25kc1BlckhvdXI7Ci1jb25zdCBkb3VibGUgbXNQZXJEYXkgPSBtc1BlclNlY29uZCAqIHNlY29u
ZHNQZXJEYXk7Ci0KLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGlzTGVhcFllYXIoaW50IHllYXIp
OwotCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBmcm9tIDE5NzAtMDEtMDEgdG8gdGhl
IHNwZWNpZmllZCBkYXRlLgotV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBkYXRlVG9EYXlzRnJv
bTE5NzAoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUg
aW50IG1zVG9ZZWFyKGRvdWJsZSBtcyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgZG91YmxlIG1zVG9E
YXlzKGRvdWJsZSBtcyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgaW50IG1zVG9NaW51dGVzKGRvdWJs
ZSBtcyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgaW50IG1zVG9Ib3Vycyhkb3VibGUgbXMpOwotV1RG
X0VYUE9SVF9QUklWQVRFIGludCBkYXlJblllYXIoaW50IHllYXIsIGludCBtb250aCwgaW50IGRh
eSk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgaW50IGRheUluWWVhcihkb3VibGUgbXMsIGludCB5ZWFy
KTsKLVdURl9FWFBPUlRfUFJJVkFURSBpbnQgbW9udGhGcm9tRGF5SW5ZZWFyKGludCBkYXlJblll
YXIsIGJvb2wgbGVhcFllYXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGludCBkYXlJbk1vbnRoRnJv
bURheUluWWVhcihpbnQgZGF5SW5ZZWFyLCBib29sIGxlYXBZZWFyKTsKLQotLy8gUmV0dXJucyBj
b21iaW5lZCBvZmZzZXQgaW4gbWlsbGlzZWNvbmQgKFVUQyArIERTVCkuCi1XVEZfRVhQT1JUX1BS
SVZBVEUgTG9jYWxUaW1lT2Zmc2V0IGNhbGN1bGF0ZUxvY2FsVGltZU9mZnNldChkb3VibGUgdXRj
SW5NaWxsaXNlY29uZHMsIFRpbWVUeXBlID0gVVRDVGltZSk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdU
RgotCi11c2luZyBXVEY6OmlzTGVhcFllYXI7Ci11c2luZyBXVEY6OmRhdGVUb0RheXNGcm9tMTk3
MDsKLXVzaW5nIFdURjo6ZGF5SW5Nb250aEZyb21EYXlJblllYXI7Ci11c2luZyBXVEY6OmRheUlu
WWVhcjsKLXVzaW5nIFdURjo6bWludXRlc1BlckhvdXI7Ci11c2luZyBXVEY6Om1vbnRoRnJvbURh
eUluWWVhcjsKLXVzaW5nIFdURjo6bXNQZXJEYXk7Ci11c2luZyBXVEY6Om1zUGVySG91cjsKLXVz
aW5nIFdURjo6bXNQZXJNaW51dGU7Ci11c2luZyBXVEY6Om1zUGVyU2Vjb25kOwotdXNpbmcgV1RG
Ojptc1RvWWVhcjsKLXVzaW5nIFdURjo6bXNUb0RheXM7Ci11c2luZyBXVEY6Om1zVG9NaW51dGVz
OwotdXNpbmcgV1RGOjptc1RvSG91cnM7Ci11c2luZyBXVEY6OnNlY29uZHNQZXJEYXk7Ci11c2lu
ZyBXVEY6OnNlY29uZHNQZXJNaW51dGU7Ci11c2luZyBXVEY6OnBhcnNlRGF0ZUZyb21OdWxsVGVy
bWluYXRlZENoYXJhY3RlcnM7Ci11c2luZyBXVEY6Om1ha2VSRkMyODIyRGF0ZVN0cmluZzsKLXVz
aW5nIFdURjo6TG9jYWxUaW1lT2Zmc2V0OwotdXNpbmcgV1RGOjpjYWxjdWxhdGVMb2NhbFRpbWVP
ZmZzZXQ7Ci0KLSNlbmRpZiAvLyBEYXRlTWF0aF9oCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvRGVxdWUuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL3d0Zi9EZXF1ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTJiMDgxMTA0
ZTkzZmE2OWEzMGYxYjk2NGIxY2JhOTczNmZkZDEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9E
ZXF1ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV1RGX0RlcXVlX2gKLSNk
ZWZpbmUgV1RGX0RlcXVlX2gKLQotLy8gRklYTUU6IENvdWxkIG1vdmUgd2hhdCBWZWN0b3IgYW5k
IERlcXVlIHNoYXJlIGludG8gYSBzZXBhcmF0ZSBmaWxlLgotLy8gRGVxdWUgZG9lc24ndCBhY3R1
YWxseSB1c2UgVmVjdG9yLgotCi0jaW5jbHVkZSA8aXRlcmF0b3I+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PiBjbGFzcyBEZXF1ZUl0ZXJhdG9yQmFzZTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gY2xhc3MgRGVxdWVJdGVyYXRvcjsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gY2xhc3MgRGVxdWVDb25zdEl0
ZXJhdG9yOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHkgPSAw
PgotY2xhc3MgRGVxdWUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIHR5cGVkZWYgVCBWYWx1ZVR5cGU7Ci0KLSAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VCwg
aW5saW5lQ2FwYWNpdHk+IGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgRGVxdWVDb25zdEl0ZXJhdG9y
PFQsIGlubGluZUNhcGFjaXR5PiBjb25zdF9pdGVyYXRvcjsKLSAgICB0eXBlZGVmIHN0ZDo6cmV2
ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKLSAgICB0eXBlZGVmIHN0
ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cjsKLQotICAgIERlcXVlKCk7Ci0gICAgRGVxdWUoc3RkOjppbml0aWFsaXplcl9saXN0PFQ+KTsK
LSAgICBEZXF1ZShjb25zdCBEZXF1ZSYpOwotICAgIERlcXVlKERlcXVlJiYpOwotICAgIH5EZXF1
ZSgpOwotCi0gICAgRGVxdWUmIG9wZXJhdG9yPShjb25zdCBEZXF1ZSYpOwotICAgIERlcXVlJiBv
cGVyYXRvcj0oRGVxdWUmJik7Ci0KLSAgICB2b2lkIHN3YXAoRGVxdWUmKTsKLQotICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydCA8PSBtX2VuZCA/IG1fZW5kIC0gbV9zdGFy
dCA6IG1fZW5kICsgbV9idWZmZXIuY2FwYWNpdHkoKSAtIG1fc3RhcnQ7IH0KLSAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ID09IG1fZW5kOyB9Ci0KLSAgICBpdGVyYXRv
ciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIG1fc3RhcnQpOyB9Ci0gICAgaXRlcmF0
b3IgZW5kKCkgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgbV9lbmQpOyB9Ci0gICAgY29uc3RfaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBtX3N0YXJ0
KTsgfQotICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJh
dG9yKHRoaXMsIG1fZW5kKTsgfQotICAgIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1
cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KLSAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQo
KSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9Ci0gICAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
KGVuZCgpKTsgfQotICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KLQotICAgIFQmIGZpcnN0KCkg
eyBBU1NFUlQobV9zdGFydCAhPSBtX2VuZCk7IHJldHVybiBtX2J1ZmZlci5idWZmZXIoKVttX3N0
YXJ0XTsgfQotICAgIGNvbnN0IFQmIGZpcnN0KCkgY29uc3QgeyBBU1NFUlQobV9zdGFydCAhPSBt
X2VuZCk7IHJldHVybiBtX2J1ZmZlci5idWZmZXIoKVttX3N0YXJ0XTsgfQotICAgIFQgdGFrZUZp
cnN0KCk7Ci0KLSAgICBUJiBsYXN0KCkgeyBBU1NFUlQobV9zdGFydCAhPSBtX2VuZCk7IHJldHVy
biAqKC0tZW5kKCkpOyB9Ci0gICAgY29uc3QgVCYgbGFzdCgpIGNvbnN0IHsgQVNTRVJUKG1fc3Rh
cnQgIT0gbV9lbmQpOyByZXR1cm4gKigtLWVuZCgpKTsgfQotICAgIFQgdGFrZUxhc3QoKTsKLQot
ICAgIHZvaWQgYXBwZW5kKFQmJiB2YWx1ZSkgeyBhcHBlbmQ8VD4oc3RkOjpmb3J3YXJkPFQ+KHZh
bHVlKSk7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZChVJiYpOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgcHJlcGVuZChVJiYpOwotICAgIHZvaWQgcmVtb3Zl
Rmlyc3QoKTsKLSAgICB2b2lkIHJlbW92ZUxhc3QoKTsKLSAgICB2b2lkIHJlbW92ZShpdGVyYXRv
ciYpOwotICAgIHZvaWQgcmVtb3ZlKGNvbnN0X2l0ZXJhdG9yJik7Ci0gICAgCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4gdm9pZCByZW1vdmVBbGxNYXRjaGluZyhjb25zdCBGdW5jJik7Ci0g
ICAgCi0gICAgLy8gVGhpcyBpcyBhIHByaW9yaXR5IGVucXVldWUuIFRoZSBjYWxsYmFjayBpcyBn
aXZlbiBhIHZhbHVlLCBhbmQgaWYgaXQgcmV0dXJucyB0cnVlLCB0aGVuIHRoaXMKLSAgICAvLyB3
aWxsIHB1dCB0aGUgYXBwZW5kZWQgdmFsdWUgYmVmb3JlIHRoYXQgdmFsdWUuIEl0IHdpbGwga2Vl
cCBidWJibGluZyB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucwotICAgIC8vIGZhbHNlIG9yIHRo
ZSB2YWx1ZSBlbmRzIHVwIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS4KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jPgotICAgIHZvaWQgYXBwZW5kQW5kQnViYmxlKFUmJiwg
Y29uc3QgRnVuYyYpOwotICAgIAotICAgIC8vIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBsYXN0IGVs
ZW1lbnQgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUuIFJldHVybnMgYSBudWxs
IHZlcnNpb24gb2YKLSAgICAvLyBUIGlmIGl0IHRoZSBjYWxsYmFjayBhbHdheXMgcmV0dXJucyBm
YWxzZS4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgIFQgdGFrZUxhc3QoY29uc3Qg
RnVuYyYpOwotCi0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJl
ZGljYXRlPgotICAgIGl0ZXJhdG9yIGZpbmRJZihQcmVkaWNhdGUmJik7Ci0KLXByaXZhdGU6Ci0g
ICAgZnJpZW5kIGNsYXNzIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PjsKLQot
ICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiBCdWZmZXI7Ci0gICAg
dHlwZWRlZiBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPiBUeXBlT3BlcmF0aW9uczsKLSAgICB0eXBl
ZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiBJdGVyYXRvckJhc2U7Ci0K
LSAgICB2b2lkIHJlbW92ZShzaXplX3QgcG9zaXRpb24pOwotICAgIHZvaWQgaW52YWxpZGF0ZUl0
ZXJhdG9ycygpOwotICAgIHZvaWQgZGVzdHJveUFsbCgpOwotICAgIHZvaWQgY2hlY2tWYWxpZGl0
eSgpIGNvbnN0OwotICAgIHZvaWQgY2hlY2tJbmRleFZhbGlkaXR5KHNpemVfdCkgY29uc3Q7Ci0g
ICAgdm9pZCBleHBhbmRDYXBhY2l0eUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBleHBhbmRDYXBhY2l0
eSgpOwotCi0gICAgc2l6ZV90IG1fc3RhcnQ7Ci0gICAgc2l6ZV90IG1fZW5kOwotICAgIEJ1ZmZl
ciBtX2J1ZmZlcjsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbXV0YWJsZSBJdGVyYXRvckJhc2UqIG1f
aXRlcmF0b3JzOwotI2VuZGlmCi19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHkgPSAwPgotY2xhc3MgRGVxdWVJdGVyYXRvckJhc2UgewotcHJvdGVjdGVkOgot
ICAgIERlcXVlSXRlcmF0b3JCYXNlKCk7Ci0gICAgRGVxdWVJdGVyYXRvckJhc2UoY29uc3QgRGVx
dWU8VCwgaW5saW5lQ2FwYWNpdHk+Kiwgc2l6ZV90KTsKLSAgICBEZXF1ZUl0ZXJhdG9yQmFzZShj
b25zdCBEZXF1ZUl0ZXJhdG9yQmFzZSYpOwotICAgIERlcXVlSXRlcmF0b3JCYXNlJiBvcGVyYXRv
cj0oY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmKTsKLSAgICB+RGVxdWVJdGVyYXRvckJhc2UoKTsK
LQotICAgIHZvaWQgYXNzaWduKGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlJiBvdGhlcikgeyAqdGhp
cyA9IG90aGVyOyB9Ci0KLSAgICB2b2lkIGluY3JlbWVudCgpOwotICAgIHZvaWQgZGVjcmVtZW50
KCk7Ci0KLSAgICBUKiBiZWZvcmUoKSBjb25zdDsKLSAgICBUKiBhZnRlcigpIGNvbnN0OwotCi0g
ICAgYm9vbCBpc0VxdWFsKGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlJikgY29uc3Q7Ci0KLXByaXZh
dGU6Ci0gICAgdm9pZCBhZGRUb0l0ZXJhdG9yc0xpc3QoKTsKLSAgICB2b2lkIHJlbW92ZUZyb21J
dGVyYXRvcnNMaXN0KCk7Ci0gICAgdm9pZCBjaGVja1ZhbGlkaXR5KCkgY29uc3Q7Ci0gICAgdm9p
ZCBjaGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlJikgY29uc3Q7Ci0KLSAgICBE
ZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4qIG1fZGVxdWU7Ci0gICAgc2l6ZV90IG1faW5kZXg7Ci0K
LSAgICBmcmllbmQgY2xhc3MgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OwotCi0jaWZuZGVmIE5E
RUJVRwotICAgIG11dGFibGUgRGVxdWVJdGVyYXRvckJhc2UqIG1fbmV4dDsKLSAgICBtdXRhYmxl
IERlcXVlSXRlcmF0b3JCYXNlKiBtX3ByZXZpb3VzOwotI2VuZGlmCi19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHkgPSAwPgotY2xhc3MgRGVxdWVJdGVyYXRv
ciA6IHB1YmxpYyBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4gewotcHJpdmF0
ZToKLSAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiBCYXNl
OwotICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRvcjxULCBpbmxpbmVDYXBhY2l0eT4gSXRlcmF0b3I7
Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7Ci0gICAg
dHlwZWRlZiBUIHZhbHVlX3R5cGU7Ci0gICAgdHlwZWRlZiBUKiBwb2ludGVyOwotICAgIHR5cGVk
ZWYgVCYgcmVmZXJlbmNlOwotICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKLQotICAgIERlcXVlSXRlcmF0b3IoRGVxdWU8VCwgaW5s
aW5lQ2FwYWNpdHk+KiBkZXF1ZSwgc2l6ZV90IGluZGV4KQotICAgICAgICA6IEJhc2UoZGVxdWUs
IGluZGV4KSB7IH0KLQotICAgIERlcXVlSXRlcmF0b3IoY29uc3QgSXRlcmF0b3ImIG90aGVyKSA6
IEJhc2Uob3RoZXIpIHsgfQotICAgIERlcXVlSXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBJdGVy
YXRvciYgb3RoZXIpIHsgQmFzZTo6YXNzaWduKG90aGVyKTsgcmV0dXJuICp0aGlzOyB9Ci0KLSAg
ICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqQmFzZTo6YWZ0ZXIoKTsgfQotICAgIFQq
IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBCYXNlOjphZnRlcigpOyB9Ci0KLSAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBCYXNlOjpp
c0VxdWFsKG90aGVyKTsgfQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuICFCYXNlOjppc0VxdWFsKG90aGVyKTsgfQotCi0gICAgSXRlcmF0
b3ImIG9wZXJhdG9yKysoKSB7IEJhc2U6OmluY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KLSAg
ICAvLyBwb3N0Zml4ICsrIGludGVudGlvbmFsbHkgb21pdHRlZAotICAgIEl0ZXJhdG9yJiBvcGVy
YXRvci0tKCkgeyBCYXNlOjpkZWNyZW1lbnQoKTsgcmV0dXJuICp0aGlzOyB9Ci0gICAgLy8gcG9z
dGZpeCAtLSBpbnRlbnRpb25hbGx5IG9taXR0ZWQKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDA+Ci1jbGFzcyBEZXF1ZUNvbnN0SXRlcmF0b3IgOiBw
dWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+IHsKLXByaXZhdGU6Ci0g
ICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKLSAg
ICB0eXBlZGVmIERlcXVlQ29uc3RJdGVyYXRvcjxULCBpbmxpbmVDYXBhY2l0eT4gSXRlcmF0b3I7
Ci0gICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBOb25Db25zdEl0
ZXJhdG9yOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl
OwotICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwotICAgIHR5cGVkZWYgY29uc3QgVCogcG9pbnRl
cjsKLSAgICB0eXBlZGVmIGNvbnN0IFQmIHJlZmVyZW5jZTsKLSAgICB0eXBlZGVmIHN0ZDo6Ymlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7Ci0KLSAgICBEZXF1ZUNv
bnN0SXRlcmF0b3IoY29uc3QgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+KiBkZXF1ZSwgc2l6ZV90
IGluZGV4KQotICAgICAgICA6IEJhc2UoZGVxdWUsIGluZGV4KSB7IH0KLQotICAgIERlcXVlQ29u
c3RJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgb3RoZXIpIDogQmFzZShvdGhlcikgeyB9Ci0gICAg
RGVxdWVDb25zdEl0ZXJhdG9yKGNvbnN0IE5vbkNvbnN0SXRlcmF0b3ImIG90aGVyKSA6IEJhc2Uo
b3RoZXIpIHsgfQotICAgIERlcXVlQ29uc3RJdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IEl0ZXJh
dG9yJiBvdGhlcikgeyBCYXNlOjphc3NpZ24ob3RoZXIpOyByZXR1cm4gKnRoaXM7IH0KLSAgICBE
ZXF1ZUNvbnN0SXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBOb25Db25zdEl0ZXJhdG9yJiBvdGhl
cikgeyBCYXNlOjphc3NpZ24ob3RoZXIpOyByZXR1cm4gKnRoaXM7IH0KLQotICAgIGNvbnN0IFQm
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpCYXNlOjphZnRlcigpOyB9Ci0gICAgY29uc3Qg
VCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIEJhc2U6OmFmdGVyKCk7IH0KLQotICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIEJhc2U6
OmlzRXF1YWwob3RoZXIpOyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gIUJhc2U6OmlzRXF1YWwob3RoZXIpOyB9Ci0KLSAgICBJdGVy
YXRvciYgb3BlcmF0b3IrKygpIHsgQmFzZTo6aW5jcmVtZW50KCk7IHJldHVybiAqdGhpczsgfQot
ICAgIC8vIHBvc3RmaXggKysgaW50ZW50aW9uYWxseSBvbWl0dGVkCi0gICAgSXRlcmF0b3ImIG9w
ZXJhdG9yLS0oKSB7IEJhc2U6OmRlY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KLSAgICAvLyBw
b3N0Zml4IC0tIGludGVudGlvbmFsbHkgb21pdHRlZAotfTsKLQotI2lmZGVmIE5ERUJVRwotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1
ZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoKSBjb25zdCB7IH0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWU8VCwg
aW5saW5lQ2FwYWNpdHk+OjpjaGVja0luZGV4VmFsaWRpdHkoc2l6ZV90KSBjb25zdCB7IH0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVx
dWU8VCwgaW5saW5lQ2FwYWNpdHk+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9Ci0jZWxzZQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgotdm9pZCBEZXF1ZTxU
LCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoKSBjb25zdAotewotICAgIC8vIEluIHRo
aXMgaW1wbGVtZW50YXRpb24gYSBjYXBhY2l0eSBvZiAxIHdvdWxkIGNvbmZ1c2UgYXBwZW5kKCkg
YW5kCi0gICAgLy8gb3RoZXIgcGxhY2VzIHRoYXQgYXNzdW1lIHRoZSBpbmRleCBhZnRlciBjYXBh
Y2l0eSAtIDEgaXMgMC4KLSAgICBBU1NFUlQobV9idWZmZXIuY2FwYWNpdHkoKSAhPSAxKTsKLQot
ICAgIGlmICghbV9idWZmZXIuY2FwYWNpdHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fc3RhcnQp
OwotICAgICAgICBBU1NFUlQoIW1fZW5kKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQo
bV9zdGFydCA8IG1fYnVmZmVyLmNhcGFjaXR5KCkpOwotICAgICAgICBBU1NFUlQobV9lbmQgPCBt
X2J1ZmZlci5jYXBhY2l0eSgpKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KLXZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpjaGVj
a0luZGV4VmFsaWRpdHkoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIEFTU0VSVF9VTlVTRUQo
aW5kZXgsIGluZGV4IDw9IG1fYnVmZmVyLmNhcGFjaXR5KCkpOwotICAgIGlmIChtX3N0YXJ0IDw9
IG1fZW5kKSB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3N0YXJ0KTsKLSAgICAgICAgQVNT
RVJUKGluZGV4IDw9IG1fZW5kKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoaW5kZXgg
Pj0gbV9zdGFydCB8fCBpbmRleCA8PSBtX2VuZCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci12b2lkIERlcXVlPFQsIGlubGluZUNhcGFj
aXR5Pjo6aW52YWxpZGF0ZUl0ZXJhdG9ycygpCi17Ci0gICAgSXRlcmF0b3JCYXNlKiBuZXh0Owot
ICAgIGZvciAoSXRlcmF0b3JCYXNlKiBwID0gbV9pdGVyYXRvcnM7IHA7IHAgPSBuZXh0KSB7Ci0g
ICAgICAgIG5leHQgPSBwLT5tX25leHQ7Ci0gICAgICAgIHAtPm1fZGVxdWUgPSAwOwotICAgICAg
ICBwLT5tX25leHQgPSAwOwotICAgICAgICBwLT5tX3ByZXZpb3VzID0gMDsKLSAgICB9Ci0gICAg
bV9pdGVyYXRvcnMgPSAwOwotfQotI2VuZGlmCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KLWlubGluZSBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OkRlcXVl
KCkKLSAgICA6IG1fc3RhcnQoMCkKLSAgICAsIG1fZW5kKDApCi0jaWZuZGVmIE5ERUJVRwotICAg
ICwgbV9pdGVyYXRvcnMoMCkKLSNlbmRpZgotewotICAgIGNoZWNrVmFsaWRpdHkoKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotaW5saW5lIERlcXVl
PFQsIGlubGluZUNhcGFjaXR5Pjo6RGVxdWUoc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGluaXRp
YWxpemVyTGlzdCkKLSAgICA6IERlcXVlKCkKLXsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBp
bml0aWFsaXplckxpc3QpCi0gICAgICAgIGFwcGVuZChlbGVtZW50KTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotaW5saW5lIERlcXVlPFQsIGlubGlu
ZUNhcGFjaXR5Pjo6RGVxdWUoY29uc3QgRGVxdWUmIG90aGVyKQotICAgIDogbV9zdGFydChvdGhl
ci5tX3N0YXJ0KQotICAgICwgbV9lbmQob3RoZXIubV9lbmQpCi0gICAgLCBtX2J1ZmZlcihvdGhl
ci5tX2J1ZmZlci5jYXBhY2l0eSgpKQotI2lmbmRlZiBOREVCVUcKLSAgICAsIG1faXRlcmF0b3Jz
KDApCi0jZW5kaWYKLXsKLSAgICBjb25zdCBUKiBvdGhlckJ1ZmZlciA9IG90aGVyLm1fYnVmZmVy
LmJ1ZmZlcigpOwotICAgIGlmIChtX3N0YXJ0IDw9IG1fZW5kKQotICAgICAgICBUeXBlT3BlcmF0
aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXJCdWZmZXIgKyBtX3N0YXJ0LCBvdGhlckJ1ZmZl
ciArIG1fZW5kLCBtX2J1ZmZlci5idWZmZXIoKSArIG1fc3RhcnQpOwotICAgIGVsc2UgewotICAg
ICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXJCdWZmZXIsIG90aGVy
QnVmZmVyICsgbV9lbmQsIG1fYnVmZmVyLmJ1ZmZlcigpKTsKLSAgICAgICAgVHlwZU9wZXJhdGlv
bnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyQnVmZmVyICsgbV9zdGFydCwgb3RoZXJCdWZmZXIg
KyBtX2J1ZmZlci5jYXBhY2l0eSgpLCBtX2J1ZmZlci5idWZmZXIoKSArIG1fc3RhcnQpOwotICAg
IH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotaW5s
aW5lIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6RGVxdWUoRGVxdWUmJiBvdGhlcikKLSAgICA6
IERlcXVlKCkKLXsKLSAgICBzd2FwKG90aGVyKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgotaW5saW5lIGF1dG8gRGVxdWU8VCwgaW5saW5lQ2FwYWNp
dHk+OjpvcGVyYXRvcj0oY29uc3QgRGVxdWUmIG90aGVyKSAtPiBEZXF1ZSYKLXsKLSAgICAvLyBG
SVhNRTogVGhpcyBpcyBpbmVmZmljaWVudCBpZiB3ZSdyZSB1c2luZyBhbiBpbmxpbmUgYnVmZmVy
IGFuZCBUIGlzCi0gICAgLy8gZXhwZW5zaXZlIHRvIGNvcHkgc2luY2UgaXQgd2lsbCBjb3B5IHRo
ZSBidWZmZXIgdHdpY2UgaW5zdGVhZCBvZiBvbmNlLgotICAgIERlcXVlPFQsIGlubGluZUNhcGFj
aXR5PiBjb3B5KG90aGVyKTsKLSAgICBzd2FwKGNvcHkpOwotICAgIHJldHVybiAqdGhpczsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotaW5saW5lIGF1
dG8gRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpvcGVyYXRvcj0oRGVxdWUmJiBvdGhlcikgLT4g
RGVxdWUmCi17Ci0gICAgc3dhcChvdGhlcik7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci1pbmxpbmUgdm9pZCBEZXF1
ZTxULCBpbmxpbmVDYXBhY2l0eT46OmRlc3Ryb3lBbGwoKQotewotICAgIGlmIChtX3N0YXJ0IDw9
IG1fZW5kKQotICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QobV9idWZmZXIuYnVmZmVy
KCkgKyBtX3N0YXJ0LCBtX2J1ZmZlci5idWZmZXIoKSArIG1fZW5kKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KG1fYnVmZmVyLmJ1ZmZlcigpLCBtX2J1ZmZl
ci5idWZmZXIoKSArIG1fZW5kKTsKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KG1f
YnVmZmVyLmJ1ZmZlcigpICsgbV9zdGFydCwgbV9idWZmZXIuYnVmZmVyKCkgKyBtX2J1ZmZlci5j
YXBhY2l0eSgpKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4KLWlubGluZSBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46On5EZXF1ZSgpCi17
Ci0gICAgY2hlY2tWYWxpZGl0eSgpOwotICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKLSAgICBk
ZXN0cm95QWxsKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KLWlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6c3dhcChEZXF1ZTxU
LCBpbmxpbmVDYXBhY2l0eT4mIG90aGVyKQotewotICAgIGNoZWNrVmFsaWRpdHkoKTsKLSAgICBv
dGhlci5jaGVja1ZhbGlkaXR5KCk7Ci0gICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwotICAgIHN0
ZDo6c3dhcChtX3N0YXJ0LCBvdGhlci5tX3N0YXJ0KTsKLSAgICBzdGQ6OnN3YXAobV9lbmQsIG90
aGVyLm1fZW5kKTsKLSAgICBtX2J1ZmZlci5zd2FwKG90aGVyLm1fYnVmZmVyLCAwLCAwKTsKLSAg
ICBjaGVja1ZhbGlkaXR5KCk7Ci0gICAgb3RoZXIuY2hlY2tWYWxpZGl0eSgpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci1pbmxpbmUgdm9pZCBEZXF1
ZTxULCBpbmxpbmVDYXBhY2l0eT46OmNsZWFyKCkKLXsKLSAgICBjaGVja1ZhbGlkaXR5KCk7Ci0g
ICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwotICAgIGRlc3Ryb3lBbGwoKTsKLSAgICBtX3N0YXJ0
ID0gMDsKLSAgICBtX2VuZCA9IDA7Ci0gICAgbV9idWZmZXIuZGVhbGxvY2F0ZUJ1ZmZlcihtX2J1
ZmZlci5idWZmZXIoKSk7Ci0gICAgY2hlY2tWYWxpZGl0eSgpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNh
dGU+Ci1pbmxpbmUgYXV0byBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmZpbmRJZihQcmVkaWNh
dGUmJiBwcmVkaWNhdGUpIC0+IGl0ZXJhdG9yCi17Ci0gICAgaXRlcmF0b3IgZW5kX2l0ZXJhdG9y
ID0gZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdCA9IGJlZ2luKCk7IGl0ICE9IGVuZF9pdGVy
YXRvcjsgKytpdCkgewotICAgICAgICBpZiAocHJlZGljYXRlKCppdCkpCi0gICAgICAgICAgICBy
ZXR1cm4gaXQ7Ci0gICAgfQotICAgIHJldHVybiBlbmRfaXRlcmF0b3I7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLWlubGluZSB2b2lkIERlcXVlPFQs
IGlubGluZUNhcGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHlJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1f
c3RhcnQpIHsKLSAgICAgICAgaWYgKG1fZW5kICsgMSAhPSBtX3N0YXJ0KQotICAgICAgICAgICAg
cmV0dXJuOwotICAgIH0gZWxzZSBpZiAobV9lbmQpIHsKLSAgICAgICAgaWYgKG1fZW5kICE9IG1f
YnVmZmVyLmNhcGFjaXR5KCkgLSAxKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBp
ZiAobV9idWZmZXIuY2FwYWNpdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZXhwYW5kQ2Fw
YWNpdHkoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
Pgotdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmV4cGFuZENhcGFjaXR5KCkKLXsKLSAg
ICBjaGVja1ZhbGlkaXR5KCk7Ci0gICAgc2l6ZV90IG9sZENhcGFjaXR5ID0gbV9idWZmZXIuY2Fw
YWNpdHkoKTsKLSAgICBUKiBvbGRCdWZmZXIgPSBtX2J1ZmZlci5idWZmZXIoKTsKLSAgICBtX2J1
ZmZlci5hbGxvY2F0ZUJ1ZmZlcihzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KDE2KSwgb2xk
Q2FwYWNpdHkgKyBvbGRDYXBhY2l0eSAvIDQgKyAxKSk7Ci0gICAgaWYgKG1fc3RhcnQgPD0gbV9l
bmQpCi0gICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciArIG1fc3RhcnQsIG9s
ZEJ1ZmZlciArIG1fZW5kLCBtX2J1ZmZlci5idWZmZXIoKSArIG1fc3RhcnQpOwotICAgIGVsc2Ug
ewotICAgICAgICBUeXBlT3BlcmF0aW9uczo6bW92ZShvbGRCdWZmZXIsIG9sZEJ1ZmZlciArIG1f
ZW5kLCBtX2J1ZmZlci5idWZmZXIoKSk7Ci0gICAgICAgIHNpemVfdCBuZXdTdGFydCA9IG1fYnVm
ZmVyLmNhcGFjaXR5KCkgLSAob2xkQ2FwYWNpdHkgLSBtX3N0YXJ0KTsKLSAgICAgICAgVHlwZU9w
ZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyICsgbV9zdGFydCwgb2xkQnVmZmVyICsgb2xkQ2FwYWNp
dHksIG1fYnVmZmVyLmJ1ZmZlcigpICsgbmV3U3RhcnQpOwotICAgICAgICBtX3N0YXJ0ID0gbmV3
U3RhcnQ7Ci0gICAgfQotICAgIG1fYnVmZmVyLmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsK
LSAgICBjaGVja1ZhbGlkaXR5KCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4KLWlubGluZSBhdXRvIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFr
ZUZpcnN0KCkgLT4gVAotewotICAgIFQgb2xkRmlyc3QgPSBXVEZNb3ZlKGZpcnN0KCkpOwotICAg
IHJlbW92ZUZpcnN0KCk7Ci0gICAgcmV0dXJuIG9sZEZpcnN0OwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci1pbmxpbmUgYXV0byBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OnRha2VMYXN0KCkgLT4gVAotewotICAgIFQgb2xkTGFzdCA9IFdURk1vdmUo
bGFzdCgpKTsKLSAgICByZW1vdmVMYXN0KCk7Ci0gICAgcmV0dXJuIG9sZExhc3Q7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLWlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6YXBwZW5kKFUmJiB2
YWx1ZSkKLXsKLSAgICBjaGVja1ZhbGlkaXR5KCk7Ci0gICAgZXhwYW5kQ2FwYWNpdHlJZk5lZWRl
ZCgpOwotICAgIG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2YobV9idWZmZXIuYnVmZmVyKClb
bV9lbmRdKSkgVChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICBpZiAobV9lbmQgPT0gbV9i
dWZmZXIuY2FwYWNpdHkoKSAtIDEpCi0gICAgICAgIG1fZW5kID0gMDsKLSAgICBlbHNlCi0gICAg
ICAgICsrbV9lbmQ7Ci0gICAgY2hlY2tWYWxpZGl0eSgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1pbmxpbmUg
dm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnByZXBlbmQoVSYmIHZhbHVlKQotewotICAg
IGNoZWNrVmFsaWRpdHkoKTsKLSAgICBleHBhbmRDYXBhY2l0eUlmTmVlZGVkKCk7Ci0gICAgaWYg
KCFtX3N0YXJ0KQotICAgICAgICBtX3N0YXJ0ID0gbV9idWZmZXIuY2FwYWNpdHkoKSAtIDE7Ci0g
ICAgZWxzZQotICAgICAgICAtLW1fc3RhcnQ7Ci0gICAgbmV3IChOb3ROdWxsLCBzdGQ6OmFkZHJl
c3NvZihtX2J1ZmZlci5idWZmZXIoKVttX3N0YXJ0XSkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci0gICAgY2hlY2tWYWxpZGl0eSgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+Ci1pbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46
OnJlbW92ZUZpcnN0KCkKLXsKLSAgICBjaGVja1ZhbGlkaXR5KCk7Ci0gICAgaW52YWxpZGF0ZUl0
ZXJhdG9ycygpOwotICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6
ZGVzdHJ1Y3Qoc3RkOjphZGRyZXNzb2YobV9idWZmZXIuYnVmZmVyKClbbV9zdGFydF0pLCBzdGQ6
OmFkZHJlc3NvZihtX2J1ZmZlci5idWZmZXIoKVttX3N0YXJ0ICsgMV0pKTsKLSAgICBpZiAobV9z
dGFydCA9PSBtX2J1ZmZlci5jYXBhY2l0eSgpIC0gMSkKLSAgICAgICAgbV9zdGFydCA9IDA7Ci0g
ICAgZWxzZQotICAgICAgICArK21fc3RhcnQ7Ci0gICAgY2hlY2tWYWxpZGl0eSgpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci1pbmxpbmUgdm9pZCBE
ZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUxhc3QoKQotewotICAgIGNoZWNrVmFsaWRp
dHkoKTsKLSAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0gICAgQVNTRVJUKCFpc0VtcHR5KCkp
OwotICAgIGlmICghbV9lbmQpCi0gICAgICAgIG1fZW5kID0gbV9idWZmZXIuY2FwYWNpdHkoKSAt
IDE7Ci0gICAgZWxzZQotICAgICAgICAtLW1fZW5kOwotICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0
cnVjdChzdGQ6OmFkZHJlc3NvZihtX2J1ZmZlci5idWZmZXIoKVttX2VuZF0pLCBzdGQ6OmFkZHJl
c3NvZihtX2J1ZmZlci5idWZmZXIoKVttX2VuZCArIDFdKSk7Ci0gICAgY2hlY2tWYWxpZGl0eSgp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci1pbmxp
bmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZShpdGVyYXRvciYgaXQpCi17
Ci0gICAgaXQuY2hlY2tWYWxpZGl0eSgpOwotICAgIHJlbW92ZShpdC5tX2luZGV4KTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotaW5saW5lIHZvaWQg
RGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmUoY29uc3RfaXRlcmF0b3ImIGl0KQotewot
ICAgIGl0LmNoZWNrVmFsaWRpdHkoKTsKLSAgICByZW1vdmUoaXQubV9pbmRleCk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLWlubGluZSB2b2lkIERl
cXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6cmVtb3ZlKHNpemVfdCBwb3NpdGlvbikKLXsKLSAgICBp
ZiAocG9zaXRpb24gPT0gbV9lbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNoZWNrVmFsaWRp
dHkoKTsKLSAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0KLSAgICBUKiBidWZmZXIgPSBtX2J1
ZmZlci5idWZmZXIoKTsKLSAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3Qoc3RkOjphZGRyZXNz
b2YoYnVmZmVyW3Bvc2l0aW9uXSksIHN0ZDo6YWRkcmVzc29mKGJ1ZmZlcltwb3NpdGlvbiArIDFd
KSk7Ci0KLSAgICAvLyBGaW5kIHdoaWNoIHNlZ21lbnQgb2YgdGhlIGNpcmN1bGFyIGJ1ZmZlciBj
b250YWluZWQgdGhlIHJlbW92ZSBlbGVtZW50LCBhbmQgb25seSBtb3ZlIGVsZW1lbnRzIGluIHRo
YXQgcGFydC4KLSAgICBpZiAocG9zaXRpb24gPj0gbV9zdGFydCkgewotICAgICAgICBUeXBlT3Bl
cmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKGJ1ZmZlciArIG1fc3RhcnQsIGJ1ZmZlciArIHBvc2l0
aW9uLCBidWZmZXIgKyBtX3N0YXJ0ICsgMSk7Ci0gICAgICAgIG1fc3RhcnQgPSAobV9zdGFydCAr
IDEpICUgbV9idWZmZXIuY2FwYWNpdHkoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBUeXBlT3Bl
cmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKGJ1ZmZlciArIHBvc2l0aW9uICsgMSwgYnVmZmVyICsg
bV9lbmQsIGJ1ZmZlciArIHBvc2l0aW9uKTsKLSAgICAgICAgbV9lbmQgPSAobV9lbmQgLSAxICsg
bV9idWZmZXIuY2FwYWNpdHkoKSkgJSBtX2J1ZmZlci5jYXBhY2l0eSgpOwotICAgIH0KLSAgICBj
aGVja1ZhbGlkaXR5KCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1pbmxpbmUgdm9pZCBEZXF1ZTxULCBp
bmxpbmVDYXBhY2l0eT46OnJlbW92ZUFsbE1hdGNoaW5nKGNvbnN0IEZ1bmMmIGZ1bmMpCi17Ci0g
ICAgc2l6ZV90IGNvdW50ID0gc2l6ZSgpOwotICAgIHdoaWxlIChjb3VudC0tKSB7Ci0gICAgICAg
IFQgdmFsdWUgPSB0YWtlRmlyc3QoKTsKLSAgICAgICAgaWYgKCFmdW5jKHZhbHVlKSkKLSAgICAg
ICAgICAgIGFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBl
bmFtZSBGdW5jPgotaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcHBlbmRB
bmRCdWJibGUoVSYmIHZhbHVlLCBjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGFwcGVuZChXVEZN
b3ZlKHZhbHVlKSk7Ci0gICAgaXRlcmF0b3IgYmVnaW4gPSB0aGlzLT5iZWdpbigpOwotICAgIGl0
ZXJhdG9yIGl0ZXIgPSBlbmQoKTsKLSAgICAtLWl0ZXI7Ci0gICAgd2hpbGUgKGl0ZXIgIT0gYmVn
aW4pIHsKLSAgICAgICAgaXRlcmF0b3IgcHJldiA9IGl0ZXI7Ci0gICAgICAgIC0tcHJldjsKLSAg
ICAgICAgaWYgKCFmdW5jKCpwcmV2KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3Rk
Ojpzd2FwKCpwcmV2LCAqaXRlcik7Ci0gICAgICAgIGl0ZXIgPSBwcmV2OwotICAgIH0KLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLWlubGluZSBUIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6dGFrZUxhc3Qo
Y29uc3QgRnVuYyYgZnVuYykKLXsKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgdW5zaWdu
ZWQgc2l6ZSA9IHRoaXMtPnNpemUoKTsKLSAgICB3aGlsZSAoY291bnQgPCBzaXplKSB7Ci0gICAg
ICAgIFQgY2FuZGlkYXRlID0gdGFrZUxhc3QoKTsKLSAgICAgICAgaWYgKGZ1bmMoY2FuZGlkYXRl
KSkgewotICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCi0gICAgICAgICAgICAgICAgYXBwZW5k
KHRha2VGaXJzdCgpKTsKLSAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7Ci0gICAgICAgIH0K
LSAgICAgICAgY291bnQrKzsKLSAgICAgICAgcHJlcGVuZChXVEZNb3ZlKGNhbmRpZGF0ZSkpOwot
ICAgIH0KLSAgICByZXR1cm4gVCgpOwotfQotCi0jaWZkZWYgTkRFQlVHCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JC
YXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tWYWxpZGl0eSgpIGNvbnN0IHsgfQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZUl0
ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoY29uc3QgRGVxdWVJ
dGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+JikgY29uc3QgeyB9Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JC
YXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6YWRkVG9JdGVyYXRvcnNMaXN0KCkgeyB9Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlSXRl
cmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6cmVtb3ZlRnJvbUl0ZXJhdG9yc0xpc3QoKSB7
IH0KLSNlbHNlCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci12
b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tWYWxpZGl0eSgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZGVxdWUpOwotICAgIG1fZGVxdWUtPmNoZWNrSW5kZXhW
YWxpZGl0eShtX2luZGV4KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5Pgotdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNo
ZWNrVmFsaWRpdHkoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90aGVyKSBjb25zdAotewotICAg
IGNoZWNrVmFsaWRpdHkoKTsKLSAgICBvdGhlci5jaGVja1ZhbGlkaXR5KCk7Ci0gICAgQVNTRVJU
KG1fZGVxdWUgPT0gb3RoZXIubV9kZXF1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KLXZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2Fw
YWNpdHk+OjphZGRUb0l0ZXJhdG9yc0xpc3QoKQotewotICAgIGlmICghbV9kZXF1ZSkKLSAgICAg
ICAgbV9uZXh0ID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9uZXh0ID0gbV9kZXF1ZS0+bV9p
dGVyYXRvcnM7Ci0gICAgICAgIG1fZGVxdWUtPm1faXRlcmF0b3JzID0gdGhpczsKLSAgICAgICAg
aWYgKG1fbmV4dCkKLSAgICAgICAgICAgIG1fbmV4dC0+bV9wcmV2aW91cyA9IHRoaXM7Ci0gICAg
fQotICAgIG1fcHJldmlvdXMgPSAwOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+Ci12b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5
Pjo6cmVtb3ZlRnJvbUl0ZXJhdG9yc0xpc3QoKQotewotICAgIGlmICghbV9kZXF1ZSkgewotICAg
ICAgICBBU1NFUlQoIW1fbmV4dCk7Ci0gICAgICAgIEFTU0VSVCghbV9wcmV2aW91cyk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKG1fbmV4dCkgewotICAgICAgICAgICAgQVNTRVJUKG1fbmV4
dC0+bV9wcmV2aW91cyA9PSB0aGlzKTsKLSAgICAgICAgICAgIG1fbmV4dC0+bV9wcmV2aW91cyA9
IG1fcHJldmlvdXM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fcHJldmlvdXMpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX2RlcXVlLT5tX2l0ZXJhdG9ycyAhPSB0aGlzKTsKLSAgICAgICAgICAg
IEFTU0VSVChtX3ByZXZpb3VzLT5tX25leHQgPT0gdGhpcyk7Ci0gICAgICAgICAgICBtX3ByZXZp
b3VzLT5tX25leHQgPSBtX25leHQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NF
UlQobV9kZXF1ZS0+bV9pdGVyYXRvcnMgPT0gdGhpcyk7Ci0gICAgICAgICAgICBtX2RlcXVlLT5t
X2l0ZXJhdG9ycyA9IG1fbmV4dDsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX25leHQgPSAwOwot
ICAgIG1fcHJldmlvdXMgPSAwOwotfQotI2VuZGlmCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KLWlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVD
YXBhY2l0eT46OkRlcXVlSXRlcmF0b3JCYXNlKCkKLSAgICA6IG1fZGVxdWUoMCkKLXsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotaW5saW5lIERlcXVl
SXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6RGVxdWVJdGVyYXRvckJhc2UoY29uc3Qg
RGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+KiBkZXF1ZSwgc2l6ZV90IGluZGV4KQotICAgIDogbV9k
ZXF1ZShjb25zdF9jYXN0PERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pio+KGRlcXVlKSkKLSAgICAs
IG1faW5kZXgoaW5kZXgpCi17Ci0gICAgYWRkVG9JdGVyYXRvcnNMaXN0KCk7Ci0gICAgY2hlY2tW
YWxpZGl0eSgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+Ci1pbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpEZXF1ZUl0
ZXJhdG9yQmFzZShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZSYgb3RoZXIpCi0gICAgOiBtX2RlcXVl
KG90aGVyLm1fZGVxdWUpCi0gICAgLCBtX2luZGV4KG90aGVyLm1faW5kZXgpCi17Ci0gICAgYWRk
VG9JdGVyYXRvcnNMaXN0KCk7Ci0gICAgY2hlY2tWYWxpZGl0eSgpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci1pbmxpbmUgRGVxdWVJdGVyYXRvckJh
c2U8VCwgaW5saW5lQ2FwYWNpdHk+JiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0
eT46Om9wZXJhdG9yPShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZSYgb3RoZXIpCi17Ci0gICAgb3Ro
ZXIuY2hlY2tWYWxpZGl0eSgpOwotICAgIHJlbW92ZUZyb21JdGVyYXRvcnNMaXN0KCk7Ci0KLSAg
ICBtX2RlcXVlID0gb3RoZXIubV9kZXF1ZTsKLSAgICBtX2luZGV4ID0gb3RoZXIubV9pbmRleDsK
LSAgICBhZGRUb0l0ZXJhdG9yc0xpc3QoKTsKLSAgICBjaGVja1ZhbGlkaXR5KCk7Ci0gICAgcmV0
dXJuICp0aGlzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+Ci1pbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+Ojp+RGVxdWVJ
dGVyYXRvckJhc2UoKQotewotI2lmbmRlZiBOREVCVUcKLSAgICByZW1vdmVGcm9tSXRlcmF0b3Jz
TGlzdCgpOwotICAgIG1fZGVxdWUgPSAwOwotI2VuZGlmCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLWlubGluZSBib29sIERlcXVlSXRlcmF0b3JCYXNl
PFQsIGlubGluZUNhcGFjaXR5Pjo6aXNFcXVhbChjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZSYgb3Ro
ZXIpIGNvbnN0Ci17Ci0gICAgY2hlY2tWYWxpZGl0eShvdGhlcik7Ci0gICAgcmV0dXJuIG1faW5k
ZXggPT0gb3RoZXIubV9pbmRleDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5PgotaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2Fw
YWNpdHk+OjppbmNyZW1lbnQoKQotewotICAgIGNoZWNrVmFsaWRpdHkoKTsKLSAgICBBU1NFUlQo
bV9pbmRleCAhPSBtX2RlcXVlLT5tX2VuZCk7Ci0gICAgQVNTRVJUKG1fZGVxdWUtPm1fYnVmZmVy
LmNhcGFjaXR5KCkpOwotICAgIGlmIChtX2luZGV4ID09IG1fZGVxdWUtPm1fYnVmZmVyLmNhcGFj
aXR5KCkgLSAxKQotICAgICAgICBtX2luZGV4ID0gMDsKLSAgICBlbHNlCi0gICAgICAgICsrbV9p
bmRleDsKLSAgICBjaGVja1ZhbGlkaXR5KCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KLWlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlu
bGluZUNhcGFjaXR5Pjo6ZGVjcmVtZW50KCkKLXsKLSAgICBjaGVja1ZhbGlkaXR5KCk7Ci0gICAg
QVNTRVJUKG1faW5kZXggIT0gbV9kZXF1ZS0+bV9zdGFydCk7Ci0gICAgQVNTRVJUKG1fZGVxdWUt
Pm1fYnVmZmVyLmNhcGFjaXR5KCkpOwotICAgIGlmICghbV9pbmRleCkKLSAgICAgICAgbV9pbmRl
eCA9IG1fZGVxdWUtPm1fYnVmZmVyLmNhcGFjaXR5KCkgLSAxOwotICAgIGVsc2UKLSAgICAgICAg
LS1tX2luZGV4OwotICAgIGNoZWNrVmFsaWRpdHkoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotaW5saW5lIFQqIERlcXVlSXRlcmF0b3JCYXNlPFQs
IGlubGluZUNhcGFjaXR5Pjo6YWZ0ZXIoKSBjb25zdAotewotICAgIGNoZWNrVmFsaWRpdHkoKTsK
LSAgICBBU1NFUlQobV9pbmRleCAhPSBtX2RlcXVlLT5tX2VuZCk7Ci0gICAgcmV0dXJuIHN0ZDo6
YWRkcmVzc29mKG1fZGVxdWUtPm1fYnVmZmVyLmJ1ZmZlcigpW21faW5kZXhdKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotaW5saW5lIFQqIERlcXVl
SXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6YmVmb3JlKCkgY29uc3QKLXsKLSAgICBj
aGVja1ZhbGlkaXR5KCk7Ci0gICAgQVNTRVJUKG1faW5kZXggIT0gbV9kZXF1ZS0+bV9zdGFydCk7
Ci0gICAgaWYgKCFtX2luZGV4KQotICAgICAgICByZXR1cm4gc3RkOjphZGRyZXNzb2YobV9kZXF1
ZS0+bV9idWZmZXIuYnVmZmVyKClbbV9kZXF1ZS0+bV9idWZmZXIuY2FwYWNpdHkoKSAtIDFdKTsK
LSAgICByZXR1cm4gc3RkOjphZGRyZXNzb2YobV9kZXF1ZS0+bV9idWZmZXIuYnVmZmVyKClbbV9p
bmRleCAtIDFdKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6RGVxdWU7
Ci0KLSNlbmRpZiAvLyBXVEZfRGVxdWVfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL0V4cGVjdGVkLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvRXhwZWN0ZWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM3NmNkMGZh
YjRhZGIwN2IzNTliMDE4NTUyM2U2YTcwMmMxYWNkMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
RXhwZWN0ZWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gV1RGOjpFeHBlY3RlZCBpcyBiYXNlZCBvbiBzdGQ6OmV4cGVjdGVkLCBhcyBkZXNjcmliZWQg
aGVyZTogaHR0cDovL3dnMjEubGluay9wMDMyM3IxCi0vLyBUaGUgc3BlY2lmaWNhdGlvbiBleHBl
Y3RzIHRvIHRocm93LiBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBleGNlcHRp
b25zLCB1c2VzIFJFTEVBU0VfQVNTRVJUIGluc3RlYWQuCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgotI2luY2x1ZGUgPHR5
cGVfdHJhaXRzPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8Y2xhc3MgRT4KLWNsYXNzIFVuZXhw
ZWN0ZWRUeXBlIHsKLXB1YmxpYzoKLSAgICBVbmV4cGVjdGVkVHlwZSgpID0gZGVsZXRlOwotICAg
IGNvbnN0ZXhwciBleHBsaWNpdCBVbmV4cGVjdGVkVHlwZShjb25zdCBFJiBlKSA6IHZhbChlKSB7
IH0KLSAgICBjb25zdGV4cHIgZXhwbGljaXQgVW5leHBlY3RlZFR5cGUoRSYmIGUpIDogdmFsKHN0
ZDo6Zm9yd2FyZDxFPihlKSkgeyB9Ci0gICAgY29uc3RleHByIGNvbnN0IEUmIHZhbHVlKCkgY29u
c3QmIHsgcmV0dXJuIHZhbDsgfQotICAgIFJFTEFYRURfQ09OU1RFWFBSIEUmIHZhbHVlKCkgJiB7
IHJldHVybiB2YWw7IH0KLSAgICBSRUxBWEVEX0NPTlNURVhQUiBFJiYgdmFsdWUoKSAmJiB7IHJl
dHVybiBXVEZNb3ZlKHZhbCk7IH0KLQotcHJpdmF0ZToKLSAgICBFIHZhbDsKLX07Ci0KLXRlbXBs
YXRlIDxjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVuZXhwZWN0ZWRU
eXBlPEU+JiBsaHMsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiByaHMpIHsgcmV0dXJuIGxocy52
YWx1ZSgpID09IHJocy52YWx1ZSgpOyB9Ci10ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgbGhzLCBjb25zdCBVbmV4cGVj
dGVkVHlwZTxFPiYgcmhzKSB7IHJldHVybiBsaHMudmFsdWUoKSAhPSByaHMudmFsdWUoKTsgfQot
dGVtcGxhdGUgPGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBVbmV4cGVj
dGVkVHlwZTxFPiYgbGhzLCBjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgcmhzKSB7IHJldHVybiBs
aHMudmFsdWUoKSA8IHJocy52YWx1ZSgpOyB9Ci10ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3RleHBy
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiBsaHMsIGNvbnN0IFVuZXhw
ZWN0ZWRUeXBlPEU+JiByaHMpIHsgcmV0dXJuIGxocy52YWx1ZSgpID4gcmhzLnZhbHVlKCk7IH0K
LXRlbXBsYXRlIDxjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFVuZXhw
ZWN0ZWRUeXBlPEU+JiBsaHMsIGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiByaHMpIHsgcmV0dXJu
IGxocy52YWx1ZSgpIDw9IHJocy52YWx1ZSgpOyB9Ci10ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgbGhzLCBjb25zdCBV
bmV4cGVjdGVkVHlwZTxFPiYgcmhzKSB7IHJldHVybiBsaHMudmFsdWUoKSA+PSByaHMudmFsdWUo
KTsgfQotCi10ZW1wbGF0ZSA8Y2xhc3MgRT4gY29uc3RleHByIFVuZXhwZWN0ZWRUeXBlPHN0ZDo6
ZGVjYXlfdDxFPj4gbWFrZVVuZXhwZWN0ZWQoRSYmIHYpIHsgcmV0dXJuIFVuZXhwZWN0ZWRUeXBl
PHR5cGVuYW1lIHN0ZDo6ZGVjYXk8RT46OnR5cGU+KHN0ZDo6Zm9yd2FyZDxFPih2KSk7IH0KLQot
c3RydWN0IFVuZXhwZWN0VGFnIHsKLSAgICBVbmV4cGVjdFRhZygpID0gZGVsZXRlOwotfTsKLWNv
bnN0ZXhwciBVbmV4cGVjdFRhZyBVbmV4cGVjdCB7IH07Ci0KLW5hbWVzcGFjZSBFeHBlY3RlZERl
dGFpbCB7Ci0KLS8vIEludm9rZWQgd2hlcmUgc3RkOjpFeHBlY3RlZCB3b3VsZCBpbnN0ZWFkIHRo
cm93LgotaW5saW5lIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBUaHJvdygpIHsgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotCi1zdGF0aWMgY29uc3RleHByIGVudW0gY2xhc3Mg
VmFsdWVUYWdUeXBlIHsgfSBWYWx1ZVRhZyB7IH07Ci1zdGF0aWMgY29uc3RleHByIGVudW0gY2xh
c3MgRXJyb3JUYWdUeXBlIHsgfSBFcnJvclRhZyB7IH07Ci0KLXRlbXBsYXRlPGNsYXNzIFQsIHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZT4q
ID0gbnVsbHB0cj4gdm9pZCBkZXN0cm95KFQmKSB7IH0KLXRlbXBsYXRlPGNsYXNzIFQsIHN0ZDo6
ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUgJiYg
KHN0ZDo6aXNfY2xhc3M8VD46OnZhbHVlIHx8IHN0ZDo6aXNfdW5pb248VD46OnZhbHVlKT4qID0g
bnVsbHB0cj4gdm9pZCBkZXN0cm95KFQmIHQpIHsgdC5+VCgpOyB9Ci0KLXRlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBFPgotdW5pb24gQ29uc3RleHByU3RvcmFnZSB7Ci0gICAgdHlwZWRlZiBUIFZh
bHVlVHlwZTsKLSAgICB0eXBlZGVmIEUgRXJyb3JUeXBlOwotICAgIGNoYXIgZHVtbXk7Ci0gICAg
VmFsdWVUeXBlIHZhbDsKLSAgICBFcnJvclR5cGUgZXJyOwotICAgIGNvbnN0ZXhwciBDb25zdGV4
cHJTdG9yYWdlKCkgOiBkdW1teSgpIHsgfQotICAgIGNvbnN0ZXhwciBDb25zdGV4cHJTdG9yYWdl
KFZhbHVlVGFnVHlwZSkgOiB2YWwoKSB7IH0KLSAgICBjb25zdGV4cHIgQ29uc3RleHByU3RvcmFn
ZShFcnJvclRhZ1R5cGUpIDogZXJyKCkgeyB9Ci0gICAgY29uc3RleHByIENvbnN0ZXhwclN0b3Jh
Z2UoVmFsdWVUYWdUeXBlLCBjb25zdCBWYWx1ZVR5cGUmIHYpIDogdmFsKHYpIHsgfQotICAgIGNv
bnN0ZXhwciBDb25zdGV4cHJTdG9yYWdlKEVycm9yVGFnVHlwZSwgY29uc3QgRXJyb3JUeXBlJiBl
KSA6IGVycihlKSB7IH0KLSAgICB+Q29uc3RleHByU3RvcmFnZSgpID0gZGVmYXVsdDsKLX07Ci0K
LXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPgotdW5pb24gU3RvcmFnZSB7Ci0gICAgdHlwZWRl
ZiBUIFZhbHVlVHlwZTsKLSAgICB0eXBlZGVmIEUgRXJyb3JUeXBlOwotICAgIGNoYXIgZHVtbXk7
Ci0gICAgVmFsdWVUeXBlIHZhbDsKLSAgICBFcnJvclR5cGUgZXJyOwotICAgIGNvbnN0ZXhwciBT
dG9yYWdlKCkgOiBkdW1teSgpIHsgfQotICAgIGNvbnN0ZXhwciBTdG9yYWdlKFZhbHVlVGFnVHlw
ZSkgOiB2YWwoKSB7IH0KLSAgICBjb25zdGV4cHIgU3RvcmFnZShFcnJvclRhZ1R5cGUpIDogZXJy
KCkgeyB9Ci0gICAgY29uc3RleHByIFN0b3JhZ2UoVmFsdWVUYWdUeXBlLCBjb25zdCBWYWx1ZVR5
cGUmIHZhbCkgOiB2YWwodmFsKSB7IH0KLSAgICBjb25zdGV4cHIgU3RvcmFnZShWYWx1ZVRhZ1R5
cGUsIFZhbHVlVHlwZSYmIHZhbCkgOiB2YWwoc3RkOjpmb3J3YXJkPFZhbHVlVHlwZT4odmFsKSkg
eyB9Ci0gICAgY29uc3RleHByIFN0b3JhZ2UoRXJyb3JUYWdUeXBlLCBjb25zdCBFcnJvclR5cGUm
IGVycikgOiBlcnIoZXJyKSB7IH0KLSAgICBjb25zdGV4cHIgU3RvcmFnZShFcnJvclRhZ1R5cGUs
IEVycm9yVHlwZSYmIGVycikgOiBlcnIoc3RkOjpmb3J3YXJkPEVycm9yVHlwZT4oZXJyKSkgeyB9
Ci0gICAgflN0b3JhZ2UoKSB7IH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBFPgotdW5pb24gQ29u
c3RleHByU3RvcmFnZTx2b2lkLCBFPiB7Ci0gICAgdHlwZWRlZiB2b2lkIFZhbHVlVHlwZTsKLSAg
ICB0eXBlZGVmIEUgRXJyb3JUeXBlOwotICAgIGNoYXIgZHVtbXk7Ci0gICAgRXJyb3JUeXBlIGVy
cjsKLSAgICBjb25zdGV4cHIgQ29uc3RleHByU3RvcmFnZSgpIDogZHVtbXkoKSB7IH0KLSAgICBj
b25zdGV4cHIgQ29uc3RleHByU3RvcmFnZShWYWx1ZVRhZ1R5cGUpIDogZHVtbXkoKSB7IH0KLSAg
ICBjb25zdGV4cHIgQ29uc3RleHByU3RvcmFnZShFcnJvclRhZ1R5cGUpIDogZXJyKCkgeyB9Ci0g
ICAgY29uc3RleHByIENvbnN0ZXhwclN0b3JhZ2UoRXJyb3JUYWdUeXBlLCBjb25zdCBFcnJvclR5
cGUmIGUpIDogZXJyKGUpIHsgfQotICAgIH5Db25zdGV4cHJTdG9yYWdlKCkgPSBkZWZhdWx0Owot
fTsKLQotdGVtcGxhdGUgPGNsYXNzIEU+Ci11bmlvbiBTdG9yYWdlPHZvaWQsIEU+IHsKLSAgICB0
eXBlZGVmIHZvaWQgVmFsdWVUeXBlOwotICAgIHR5cGVkZWYgRSBFcnJvclR5cGU7Ci0gICAgY2hh
ciBkdW1teTsKLSAgICBFcnJvclR5cGUgZXJyOwotICAgIGNvbnN0ZXhwciBTdG9yYWdlKCkgOiBk
dW1teSgpIHsgfQotICAgIGNvbnN0ZXhwciBTdG9yYWdlKFZhbHVlVGFnVHlwZSkgOiBkdW1teSgp
IHsgfQotICAgIGNvbnN0ZXhwciBTdG9yYWdlKEVycm9yVGFnVHlwZSkgOiBlcnIoKSB7IH0KLSAg
ICBjb25zdGV4cHIgU3RvcmFnZShFcnJvclRhZ1R5cGUsIGNvbnN0IEVycm9yVHlwZSYgZXJyKSA6
IGVycihlcnIpIHsgfQotICAgIGNvbnN0ZXhwciBTdG9yYWdlKEVycm9yVGFnVHlwZSwgRXJyb3JU
eXBlJiYgZXJyKSA6IGVycihzdGQ6OmZvcndhcmQ8RXJyb3JUeXBlPihlcnIpKSB7IH0KLSAgICB+
U3RvcmFnZSgpIHsgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+Ci1zdHJ1Y3Qg
Q29uc3RleHByQmFzZSB7Ci0gICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKLSAgICB0eXBlZGVmIEUg
RXJyb3JUeXBlOwotICAgIENvbnN0ZXhwclN0b3JhZ2U8VmFsdWVUeXBlLCBFcnJvclR5cGU+IHM7
Ci0gICAgYm9vbCBoYXM7Ci0gICAgY29uc3RleHByIENvbnN0ZXhwckJhc2UoKSA6IHMoKSwgaGFz
KHRydWUpIHsgfQotICAgIGNvbnN0ZXhwciBDb25zdGV4cHJCYXNlKFZhbHVlVGFnVHlwZSB0YWcp
IDogcyh0YWcpLCBoYXModHJ1ZSkgeyB9Ci0gICAgY29uc3RleHByIENvbnN0ZXhwckJhc2UoRXJy
b3JUYWdUeXBlIHRhZykgOiBzKHRhZyksIGhhcyhmYWxzZSkgeyB9Ci0gICAgY29uc3RleHByIENv
bnN0ZXhwckJhc2UoVmFsdWVUYWdUeXBlIHRhZywgY29uc3QgVmFsdWVUeXBlJiB2YWwpIDogcyh0
YWcsIHZhbCksIGhhcyh0cnVlKSB7IH0KLSAgICBjb25zdGV4cHIgQ29uc3RleHByQmFzZShFcnJv
clRhZ1R5cGUgdGFnLCBjb25zdCBFcnJvclR5cGUmIGVycikgOiBzKHRhZywgZXJyKSwgaGFzKGZh
bHNlKSB7IH0KLSAgICB+Q29uc3RleHByQmFzZSgpID0gZGVmYXVsdDsKLX07Ci0KLXRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBFPgotc3RydWN0IEJhc2UgewotICAgIHR5cGVkZWYgVCBWYWx1ZVR5
cGU7Ci0gICAgdHlwZWRlZiBFIEVycm9yVHlwZTsKLSAgICBTdG9yYWdlPFZhbHVlVHlwZSwgRXJy
b3JUeXBlPiBzOwotICAgIGJvb2wgaGFzOwotICAgIGNvbnN0ZXhwciBCYXNlKCkgOiBzKCksIGhh
cyh0cnVlKSB7IH0KLSAgICBjb25zdGV4cHIgQmFzZShWYWx1ZVRhZ1R5cGUgdGFnKSA6IHModGFn
KSwgaGFzKHRydWUpIHsgfQotICAgIGNvbnN0ZXhwciBCYXNlKEVycm9yVGFnVHlwZSB0YWcpIDog
cyh0YWcpLCBoYXMoZmFsc2UpIHsgfQotICAgIGNvbnN0ZXhwciBCYXNlKFZhbHVlVGFnVHlwZSB0
YWcsIGNvbnN0IFZhbHVlVHlwZSYgdmFsKSA6IHModGFnLCB2YWwpLCBoYXModHJ1ZSkgeyB9Ci0g
ICAgY29uc3RleHByIEJhc2UoVmFsdWVUYWdUeXBlIHRhZywgVmFsdWVUeXBlJiYgdmFsKSA6IHMo
dGFnLCBzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPih2YWwpKSwgaGFzKHRydWUpIHsgfQotICAgIGNv
bnN0ZXhwciBCYXNlKEVycm9yVGFnVHlwZSB0YWcsIGNvbnN0IEVycm9yVHlwZSYgZXJyKSA6IHMo
dGFnLCBlcnIpLCBoYXMoZmFsc2UpIHsgfQotICAgIGNvbnN0ZXhwciBCYXNlKEVycm9yVGFnVHlw
ZSB0YWcsIEVycm9yVHlwZSYmIGVycikgOiBzKHRhZywgc3RkOjpmb3J3YXJkPEVycm9yVHlwZT4o
ZXJyKSksIGhhcyhmYWxzZSkgeyB9Ci0gICAgQmFzZShjb25zdCBCYXNlJiBvKQotICAgICAgICA6
IGhhcyhvLmhhcykKLSAgICB7Ci0gICAgICAgIGlmIChoYXMpCi0gICAgICAgICAgICA6Om5ldyAo
JnMudmFsKSBWYWx1ZVR5cGUoby5zLnZhbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIDo6
bmV3ICgmcy5lcnIpIEVycm9yVHlwZShvLnMuZXJyKTsKLSAgICB9Ci0gICAgQmFzZShCYXNlJiYg
bykKLSAgICAgICAgOiBoYXMoby5oYXMpCi0gICAgewotICAgICAgICBpZiAoaGFzKQotICAgICAg
ICAgICAgOjpuZXcgKCZzLnZhbCkgVmFsdWVUeXBlKFdURk1vdmUoby5zLnZhbCkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICA6Om5ldyAoJnMuZXJyKSBFcnJvclR5cGUoV1RGTW92ZShvLnMu
ZXJyKSk7Ci0gICAgfQotICAgIH5CYXNlKCkKLSAgICB7Ci0gICAgICAgIGlmIChoYXMpCi0gICAg
ICAgICAgICBkZXN0cm95KHMudmFsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVzdHJv
eShzLmVycik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNzIEU+Ci1zdHJ1Y3QgQ29uc3Rl
eHByQmFzZTx2b2lkLCBFPiB7Ci0gICAgdHlwZWRlZiB2b2lkIFZhbHVlVHlwZTsKLSAgICB0eXBl
ZGVmIEUgRXJyb3JUeXBlOwotICAgIENvbnN0ZXhwclN0b3JhZ2U8VmFsdWVUeXBlLCBFcnJvclR5
cGU+IHM7Ci0gICAgYm9vbCBoYXM7Ci0gICAgY29uc3RleHByIENvbnN0ZXhwckJhc2UoKSA6IHMo
KSwgaGFzKHRydWUpIHsgfQotICAgIGNvbnN0ZXhwciBDb25zdGV4cHJCYXNlKFZhbHVlVGFnVHlw
ZSB0YWcpIDogcyh0YWcpLCBoYXModHJ1ZSkgeyB9Ci0gICAgY29uc3RleHByIENvbnN0ZXhwckJh
c2UoRXJyb3JUYWdUeXBlIHRhZykgOiBzKHRhZyksIGhhcyhmYWxzZSkgeyB9Ci0gICAgY29uc3Rl
eHByIENvbnN0ZXhwckJhc2UoRXJyb3JUYWdUeXBlIHRhZywgY29uc3QgRXJyb3JUeXBlJiBlcnIp
IDogcyh0YWcsIGVyciksIGhhcyhmYWxzZSkgeyB9Ci0gICAgY29uc3RleHByIENvbnN0ZXhwckJh
c2UoRXJyb3JUYWdUeXBlIHRhZywgRXJyb3JUeXBlJiYgZXJyKSA6IHModGFnLCBzdGQ6OmZvcndh
cmQ8RXJyb3JUeXBlPihlcnIpKSwgaGFzKGZhbHNlKSB7IH0KLSAgICB+Q29uc3RleHByQmFzZSgp
ID0gZGVmYXVsdDsKLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBFPgotc3RydWN0IEJhc2U8dm9pZCwg
RT4gewotICAgIHR5cGVkZWYgdm9pZCBWYWx1ZVR5cGU7Ci0gICAgdHlwZWRlZiBFIEVycm9yVHlw
ZTsKLSAgICBTdG9yYWdlPFZhbHVlVHlwZSwgRXJyb3JUeXBlPiBzOwotICAgIGJvb2wgaGFzOwot
ICAgIGNvbnN0ZXhwciBCYXNlKCkgOiBzKCksIGhhcyh0cnVlKSB7IH0KLSAgICBjb25zdGV4cHIg
QmFzZShWYWx1ZVRhZ1R5cGUgdGFnKSA6IHModGFnKSwgaGFzKHRydWUpIHsgfQotICAgIGNvbnN0
ZXhwciBCYXNlKEVycm9yVGFnVHlwZSB0YWcpIDogcyh0YWcpLCBoYXMoZmFsc2UpIHsgfQotICAg
IGNvbnN0ZXhwciBCYXNlKEVycm9yVGFnVHlwZSB0YWcsIGNvbnN0IEVycm9yVHlwZSYgZXJyKSA6
IHModGFnLCBlcnIpLCBoYXMoZmFsc2UpIHsgfQotICAgIGNvbnN0ZXhwciBCYXNlKEVycm9yVGFn
VHlwZSB0YWcsIEVycm9yVHlwZSYmIGVycikgOiBzKHRhZywgc3RkOjpmb3J3YXJkPEVycm9yVHlw
ZT4oZXJyKSksIGhhcyhmYWxzZSkgeyB9Ci0gICAgQmFzZShjb25zdCBCYXNlJiBvKQotICAgICAg
ICA6IGhhcyhvLmhhcykKLSAgICB7Ci0gICAgICAgIGlmICghaGFzKQotICAgICAgICAgICAgOjpu
ZXcgKCZzLmVycikgRXJyb3JUeXBlKG8ucy5lcnIpOwotICAgIH0KLSAgICBCYXNlKEJhc2UmJiBv
KQotICAgICAgICA6IGhhcyhvLmhhcykKLSAgICB7Ci0gICAgICAgIGlmICghaGFzKQotICAgICAg
ICAgICAgOjpuZXcgKCZzLmVycikgRXJyb3JUeXBlKFdURk1vdmUoby5zLmVycikpOwotICAgIH0K
LSAgICB+QmFzZSgpCi0gICAgewotICAgICAgICBpZiAoIWhhcykKLSAgICAgICAgICAgIGRlc3Ry
b3kocy5lcnIpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPgotdXNp
bmcgQmFzZVNlbGVjdCA9IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgKChzdGQ6Omlz
X3ZvaWQ8VD46OnZhbHVlIHx8IHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFs
dWUpCi0gICAgICAgICYmIHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxFPjo6dmFsdWUp
LAotICAgIENvbnN0ZXhwckJhc2U8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGUs
IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PEU+Ojp0eXBlPiwKLSAgICBCYXNlPHR5cGVuYW1l
IHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlLCB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxF
Pjo6dHlwZT4KLT46OnR5cGU7Ci0KLX0gLy8gbmFtZXNwYWNlIEV4cGVjdGVkRGV0YWlsCi0KLXRl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPgotY2xhc3MgRXhwZWN0ZWQgOiBwcml2YXRlIEV4cGVj
dGVkRGV0YWlsOjpCYXNlU2VsZWN0PFQsIEU+IHsKLSAgICB0eXBlZGVmIEV4cGVjdGVkRGV0YWls
OjpCYXNlU2VsZWN0PFQsIEU+IGJhc2U7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IGJhc2U6OlZhbHVlVHlwZSBWYWx1ZVR5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlOjpF
cnJvclR5cGUgRXJyb3JUeXBlOwotCi1wcml2YXRlOgotICAgIHR5cGVkZWYgRXhwZWN0ZWQ8VmFs
dWVUeXBlLCBFcnJvclR5cGU+IHR5cGU7Ci0KLXB1YmxpYzoKLSAgICAvLyB0ZW1wbGF0ZSA8Y2xh
c3MgVT4gc3RydWN0IHJlYmluZCB7IHVzaW5nIHR5cGUgPSBFeHBlY3RlZDxVLCBFcnJvclR5cGU+
OyB9OwotCi0gICAgY29uc3RleHByIEV4cGVjdGVkKCkgOiBiYXNlKEV4cGVjdGVkRGV0YWlsOjpW
YWx1ZVRhZykgeyB9Ci0gICAgRXhwZWN0ZWQoY29uc3QgRXhwZWN0ZWQmKSA9IGRlZmF1bHQ7Ci0g
ICAgRXhwZWN0ZWQoRXhwZWN0ZWQmJikgPSBkZWZhdWx0OwotICAgIGNvbnN0ZXhwciBFeHBlY3Rl
ZChjb25zdCBWYWx1ZVR5cGUmIGUpIDogYmFzZShFeHBlY3RlZERldGFpbDo6VmFsdWVUYWcsIGUp
IHsgfQotICAgIGNvbnN0ZXhwciBFeHBlY3RlZChWYWx1ZVR5cGUmJiBlKSA6IGJhc2UoRXhwZWN0
ZWREZXRhaWw6OlZhbHVlVGFnLCBzdGQ6OmZvcndhcmQ8VmFsdWVUeXBlPihlKSkgeyB9Ci0gICAg
Ly8gdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+IGNvbnN0ZXhwciBleHBsaWNpdCBFeHBlY3RlZChp
bl9wbGFjZV90LCBBcmdzJiYuLi4pOwotICAgIC8vIHRlbXBsYXRlIDxjbGFzcyBVLCBjbGFzcy4u
LiBBcmdzPiBjb25zdGV4cHIgZXhwbGljaXQgRXhwZWN0ZWQoaW5fcGxhY2VfdCwgc3RkOjppbml0
aWFsaXplcl9saXN0PFU+LCBBcmdzJiYuLi4pOwotICAgIGNvbnN0ZXhwciBFeHBlY3RlZChVbmV4
cGVjdGVkVHlwZTxFcnJvclR5cGU+IGNvbnN0JiB1KSA6IGJhc2UoRXhwZWN0ZWREZXRhaWw6OkVy
cm9yVGFnLCB1LnZhbHVlKCkpIHsgfQotICAgIGNvbnN0ZXhwciBFeHBlY3RlZChVbmV4cGVjdGVk
VHlwZTxFcnJvclR5cGU+JiYgdSkgOiBiYXNlKEV4cGVjdGVkRGV0YWlsOjpFcnJvclRhZywgc3Rk
Ojpmb3J3YXJkPFVuZXhwZWN0ZWRUeXBlPEU+Pih1KS52YWx1ZSgpKSB7IH0KLSAgICB0ZW1wbGF0
ZSA8Y2xhc3MgRXJyPiBjb25zdGV4cHIgRXhwZWN0ZWQoVW5leHBlY3RlZFR5cGU8RXJyPiBjb25z
dCYgdSkgOiBiYXNlKEV4cGVjdGVkRGV0YWlsOjpFcnJvclRhZywgdS52YWx1ZSgpKSB7IH0KLSAg
ICAvLyB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4gY29uc3RleHByIGV4cGxpY2l0IEV4cGVjdGVk
KFVuZXhwZWN0VGFnLCBBcmdzJiYuLi4pOwotICAgIC8vIHRlbXBsYXRlIDxjbGFzcyBVLCBjbGFz
cy4uLiBBcmdzPiBjb25zdGV4cHIgZXhwbGljaXQgRXhwZWN0ZWQoVW5leHBlY3RUYWcsIHN0ZDo6
aW5pdGlhbGl6ZXJfbGlzdDxVPiwgQXJncyYmLi4uKTsKLQotICAgIH5FeHBlY3RlZCgpID0gZGVm
YXVsdDsKLQotICAgIEV4cGVjdGVkJiBvcGVyYXRvcj0oY29uc3QgRXhwZWN0ZWQmIGUpIHsgdHlw
ZShlKS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9Ci0gICAgRXhwZWN0ZWQmIG9wZXJhdG9y
PShFeHBlY3RlZCYmIGUpIHsgdHlwZShXVEZNb3ZlKGUpKS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0
aGlzOyB9Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFU+IEV4cGVjdGVkJiBvcGVyYXRvcj0oVSYmIHUp
IHsgdHlwZShXVEZNb3ZlKHUpKS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9Ci0gICAgRXhw
ZWN0ZWQmIG9wZXJhdG9yPShjb25zdCBVbmV4cGVjdGVkVHlwZTxFcnJvclR5cGU+JiB1KSB7IHR5
cGUodSkuc3dhcCgqdGhpcyk7IHJldHVybiAqdGhpczsgfQotICAgIEV4cGVjdGVkJiBvcGVyYXRv
cj0oVW5leHBlY3RlZFR5cGU8RXJyb3JUeXBlPiYmIHUpIHsgdHlwZShXVEZNb3ZlKHUpKS5zd2Fw
KCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9Ci0gICAgLy8gdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+
IHZvaWQgZW1wbGFjZShBcmdzJiYuLi4pOwotICAgIC8vIHRlbXBsYXRlIDxjbGFzcyBVLCBjbGFz
cy4uLiBBcmdzPiB2b2lkIGVtcGxhY2Uoc3RkOjppbml0aWFsaXplcl9saXN0PFU+LCBBcmdzJiYu
Li4pOwotCi0gICAgdm9pZCBzd2FwKEV4cGVjdGVkJiBvKQotICAgIHsKLSAgICAgICAgdXNpbmcg
c3RkOjpzd2FwOwotICAgICAgICBpZiAoYmFzZTo6aGFzICYmIG8uaGFzKQotICAgICAgICAgICAg
c3dhcChiYXNlOjpzLnZhbCwgby5zLnZhbCk7Ci0gICAgICAgIGVsc2UgaWYgKGJhc2U6OmhhcyAm
JiAhby5oYXMpIHsKLSAgICAgICAgICAgIEVycm9yVHlwZSBlKFdURk1vdmUoby5zLmVycikpOwot
ICAgICAgICAgICAgRXhwZWN0ZWREZXRhaWw6OmRlc3Ryb3koby5zLmVycik7Ci0gICAgICAgICAg
ICA6Om5ldyAoJm8ucy52YWwpIFZhbHVlVHlwZShXVEZNb3ZlKGJhc2U6OnMudmFsKSk7Ci0gICAg
ICAgICAgICBFeHBlY3RlZERldGFpbDo6ZGVzdHJveShiYXNlOjpzLnZhbCk7Ci0gICAgICAgICAg
ICA6Om5ldyAoJmJhc2U6OnMuZXJyKSBFcnJvclR5cGUoV1RGTW92ZShlKSk7Ci0gICAgICAgICAg
ICBzd2FwKGJhc2U6Omhhcywgby5oYXMpOwotICAgICAgICB9IGVsc2UgaWYgKCFiYXNlOjpoYXMg
JiYgby5oYXMpIHsKLSAgICAgICAgICAgIFZhbHVlVHlwZSB2KFdURk1vdmUoby5zLnZhbCkpOwot
ICAgICAgICAgICAgRXhwZWN0ZWREZXRhaWw6OmRlc3Ryb3koby5zLnZhbCk7Ci0gICAgICAgICAg
ICA6Om5ldyAoJm8ucy5lcnIpIEVycm9yVHlwZShXVEZNb3ZlKGJhc2U6OnMuZXJyKSk7Ci0gICAg
ICAgICAgICBFeHBlY3RlZERldGFpbDo6ZGVzdHJveShiYXNlOjpzLmVycik7Ci0gICAgICAgICAg
ICA6Om5ldyAoJmJhc2U6OnMudmFsKSBWYWx1ZVR5cGUoV1RGTW92ZSh2KSk7Ci0gICAgICAgICAg
ICBzd2FwKGJhc2U6Omhhcywgby5oYXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN3
YXAoYmFzZTo6cy5lcnIsIG8ucy5lcnIpOwotICAgIH0KLQotICAgIGNvbnN0ZXhwciBjb25zdCBW
YWx1ZVR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmYmFzZTo6cy52YWw7IH0KLSAg
ICBWYWx1ZVR5cGUqIG9wZXJhdG9yLT4oKSB7IHJldHVybiAmYmFzZTo6cy52YWw7IH0KLSAgICBj
b25zdGV4cHIgY29uc3QgVmFsdWVUeXBlJiBvcGVyYXRvciooKSBjb25zdCAmIHsgcmV0dXJuIGJh
c2U6OnMudmFsOyB9Ci0gICAgVmFsdWVUeXBlJiBvcGVyYXRvciooKSAmIHsgcmV0dXJuIGJhc2U6
OnMudmFsOyB9Ci0gICAgY29uc3RleHByIGNvbnN0IFZhbHVlVHlwZSYmIG9wZXJhdG9yKigpIGNv
bnN0ICYmIHsgcmV0dXJuIFdURk1vdmUoYmFzZTo6cy52YWwpOyB9Ci0gICAgUkVMQVhFRF9DT05T
VEVYUFIgVmFsdWVUeXBlJiYgb3BlcmF0b3IqKCkgJiYgeyByZXR1cm4gV1RGTW92ZShiYXNlOjpz
LnZhbCk7IH0KLSAgICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIGJhc2U6OmhhczsgfQotICAgIGNvbnN0ZXhwciBib29sIGhhc1ZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gYmFzZTo6aGFzOyB9Ci0gICAgY29uc3RleHByIGNvbnN0IFZhbHVlVHlwZSYgdmFs
dWUoKSBjb25zdCAmIHsgcmV0dXJuIGJhc2U6OmhhcyA/IGJhc2U6OnMudmFsIDogKEV4cGVjdGVk
RGV0YWlsOjpUaHJvdygpLCBiYXNlOjpzLnZhbCk7IH0KLSAgICBSRUxBWEVEX0NPTlNURVhQUiBW
YWx1ZVR5cGUmIHZhbHVlKCkgJiB7IHJldHVybiBiYXNlOjpoYXMgPyBiYXNlOjpzLnZhbCA6IChF
eHBlY3RlZERldGFpbDo6VGhyb3coKSwgYmFzZTo6cy52YWwpOyB9Ci0gICAgY29uc3RleHByIGNv
bnN0IFZhbHVlVHlwZSYmIHZhbHVlKCkgY29uc3QgJiYgeyByZXR1cm4gYmFzZTo6aGFzID8gYmFz
ZTo6cy52YWwgOiAoRXhwZWN0ZWREZXRhaWw6OlRocm93KCksIGJhc2U6OnMudmFsKTsgfQotICAg
IFJFTEFYRURfQ09OU1RFWFBSIFZhbHVlVHlwZSYmIHZhbHVlKCkgJiYgeyByZXR1cm4gV1RGTW92
ZShiYXNlOjpoYXMgPyBiYXNlOjpzLnZhbCA6IChFeHBlY3RlZERldGFpbDo6VGhyb3coKSwgYmFz
ZTo6cy52YWwpKTsgfQotICAgIGNvbnN0ZXhwciBjb25zdCBFcnJvclR5cGUmIGVycm9yKCkgY29u
c3QgJiB7IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWREZXRhaWw6
OlRocm93KCksIGJhc2U6OnMuZXJyKTsgfQotICAgIEVycm9yVHlwZSYgZXJyb3IoKSAmIHsgcmV0
dXJuICFiYXNlOjpoYXMgPyBiYXNlOjpzLmVyciA6IChFeHBlY3RlZERldGFpbDo6VGhyb3coKSwg
YmFzZTo6cy5lcnIpOyB9Ci0gICAgUkVMQVhFRF9DT05TVEVYUFIgRXJyb3JUeXBlJiYgZXJyb3Io
KSAmJiB7IHJldHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWREZXRhaWw6
OlRocm93KCksIGJhc2U6OnMuZXJyKTsgfQotICAgIGNvbnN0ZXhwciBjb25zdCBFcnJvclR5cGUm
JiBlcnJvcigpIGNvbnN0ICYmIHsgcmV0dXJuICFiYXNlOjpoYXMgPyBiYXNlOjpzLmVyciA6IChF
eHBlY3RlZERldGFpbDo6VGhyb3coKSwgYmFzZTo6cy5lcnIpOyB9Ci0gICAgY29uc3RleHByIFVu
ZXhwZWN0ZWRUeXBlPEVycm9yVHlwZT4gZ2V0VW5leHBlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIFVu
ZXhwZWN0ZWRUeXBlPEVycm9yVHlwZT4oYmFzZTo6cy5lcnIpOyB9Ci0gICAgdGVtcGxhdGUgPGNs
YXNzIFU+IGNvbnN0ZXhwciBWYWx1ZVR5cGUgdmFsdWVPcihVJiYgdSkgY29uc3QgJiB7IHJldHVy
biBiYXNlOjpoYXMgPyAqKnRoaXMgOiBzdGF0aWNfY2FzdDxWYWx1ZVR5cGU+KHN0ZDo6Zm9yd2Fy
ZDxVPih1KSk7IH0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVT4gVmFsdWVUeXBlIHZhbHVlT3IoVSYm
IHUpICYmIHsgcmV0dXJuIGJhc2U6OmhhcyA/IFdURk1vdmUoKip0aGlzKSA6IHN0YXRpY19jYXN0
PFZhbHVlVHlwZT4oc3RkOjpmb3J3YXJkPFU+KHUpKTsgfQotfTsKLQotdGVtcGxhdGUgPGNsYXNz
IEU+Ci1jbGFzcyBFeHBlY3RlZDx2b2lkLCBFPiA6IHByaXZhdGUgRXhwZWN0ZWREZXRhaWw6OkJh
c2VTZWxlY3Q8dm9pZCwgRT4gewotICAgIHR5cGVkZWYgRXhwZWN0ZWREZXRhaWw6OkJhc2VTZWxl
Y3Q8dm9pZCwgRT4gYmFzZTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZTo6
VmFsdWVUeXBlIFZhbHVlVHlwZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2U6OkVycm9yVHlw
ZSBFcnJvclR5cGU7Ci0KLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBFeHBlY3RlZDxWYWx1ZVR5cGUs
IEVycm9yVHlwZT4gdHlwZTsKLQotcHVibGljOgotICAgIC8vIHRlbXBsYXRlIDxjbGFzcyBVPiBz
dHJ1Y3QgcmViaW5kIHsgdHlwZWRlZiBFeHBlY3RlZDxVLCBFcnJvclR5cGU+IHR5cGU7IH07Ci0K
LSAgICBjb25zdGV4cHIgRXhwZWN0ZWQoKSA6IGJhc2UoRXhwZWN0ZWREZXRhaWw6OlZhbHVlVGFn
KSB7IH0KLSAgICBFeHBlY3RlZChjb25zdCBFeHBlY3RlZCYpID0gZGVmYXVsdDsKLSAgICBFeHBl
Y3RlZChFeHBlY3RlZCYmKSA9IGRlZmF1bHQ7Ci0gICAgLy8gY29uc3RleHByIGV4cGxpY2l0IEV4
cGVjdGVkKGluX3BsYWNlX3QpOwotICAgIGNvbnN0ZXhwciBFeHBlY3RlZChVbmV4cGVjdGVkVHlw
ZTxFPiBjb25zdCYgdSkgOiBiYXNlKEV4cGVjdGVkRGV0YWlsOjpFcnJvclRhZywgdS52YWx1ZSgp
KSB7IH0KLSAgICBjb25zdGV4cHIgRXhwZWN0ZWQoVW5leHBlY3RlZFR5cGU8RT4mJiB1KSA6IGJh
c2UoRXhwZWN0ZWREZXRhaWw6OkVycm9yVGFnLCBzdGQ6OmZvcndhcmQ8VW5leHBlY3RlZFR5cGU8
RT4+KHUpLnZhbHVlKCkpIHsgfQotICAgIHRlbXBsYXRlIDxjbGFzcyBFcnI+IGNvbnN0ZXhwciBF
eHBlY3RlZChVbmV4cGVjdGVkVHlwZTxFcnI+IGNvbnN0JiB1KSA6IGJhc2UoRXhwZWN0ZWREZXRh
aWw6OkVycm9yVGFnLCB1LnZhbHVlKCkpIHsgfQotCi0gICAgfkV4cGVjdGVkKCkgPSBkZWZhdWx0
OwotCi0gICAgRXhwZWN0ZWQmIG9wZXJhdG9yPShjb25zdCBFeHBlY3RlZCYgZSkgeyB0eXBlKGUp
LnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0KLSAgICBFeHBlY3RlZCYgb3BlcmF0b3I9KEV4
cGVjdGVkJiYgZSkgeyB0eXBlKFdURk1vdmUoZSkpLnN3YXAoKnRoaXMpOyByZXR1cm4gKnRoaXM7
IH0KLSAgICBFeHBlY3RlZCYgb3BlcmF0b3I9KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB1KSB7
IHR5cGUodSkuc3dhcCgqdGhpcyk7IHJldHVybiAqdGhpczsgfSAvLyBOb3QgaW4gdGhlIGN1cnJl
bnQgcGFwZXIuCi0gICAgRXhwZWN0ZWQmIG9wZXJhdG9yPShVbmV4cGVjdGVkVHlwZTxFPiYmIHUp
IHsgdHlwZShXVEZNb3ZlKHUpKS5zd2FwKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9IC8vIE5vdCBp
biB0aGUgY3VycmVudCBwYXBlci4KLSAgICAvLyB2b2lkIGVtcGxhY2UoKTsKLQotICAgIHZvaWQg
c3dhcChFeHBlY3RlZCYgbykKLSAgICB7Ci0gICAgICAgIHVzaW5nIHN0ZDo6c3dhcDsKLSAgICAg
ICAgaWYgKGJhc2U6OmhhcyAmJiBvLmhhcykgewotICAgICAgICAgICAgLy8gRG8gbm90aGluZy4K
LSAgICAgICAgfSBlbHNlIGlmIChiYXNlOjpoYXMgJiYgIW8uaGFzKSB7Ci0gICAgICAgICAgICBF
cnJvclR5cGUgZShXVEZNb3ZlKG8ucy5lcnIpKTsKLSAgICAgICAgICAgIDo6bmV3ICgmYmFzZTo6
cy5lcnIpIEVycm9yVHlwZShlKTsKLSAgICAgICAgICAgIHN3YXAoYmFzZTo6aGFzLCBvLmhhcyk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoIWJhc2U6OmhhcyAmJiBvLmhhcykgewotICAgICAgICAgICAg
OjpuZXcgKCZvLnMuZXJyKSBFcnJvclR5cGUoV1RGTW92ZShiYXNlOjpzLmVycikpOwotICAgICAg
ICAgICAgc3dhcChiYXNlOjpoYXMsIG8uaGFzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBzd2FwKGJhc2U6OnMuZXJyLCBvLnMuZXJyKTsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGJhc2U6OmhhczsgfQotICAgIGNv
bnN0ZXhwciBib29sIGhhc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gYmFzZTo6aGFzOyB9Ci0gICAg
dm9pZCB2YWx1ZSgpIGNvbnN0IHsgIWJhc2U6OmhhcyA/IEV4cGVjdGVkRGV0YWlsOjpUaHJvdygp
IDogdm9pZCgpOyB9Ci0gICAgY29uc3RleHByIGNvbnN0IEUmIGVycm9yKCkgY29uc3QgJiB7IHJl
dHVybiAhYmFzZTo6aGFzID8gYmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWREZXRhaWw6OlRocm93KCks
IGJhc2U6OnMuZXJyKTsgfQotICAgIEUmIGVycm9yKCkgJiB7IHJldHVybiAhYmFzZTo6aGFzID8g
YmFzZTo6cy5lcnIgOiAoRXhwZWN0ZWREZXRhaWw6OlRocm93KCksIGJhc2U6OnMuZXJyKTsgfSAv
LyBOb3QgaW4gdGhlIGN1cnJlbnQgcGFwZXIuCi0gICAgUkVMQVhFRF9DT05TVEVYUFIgRSYmIGVy
cm9yKCkgJiYgeyByZXR1cm4gIWJhc2U6OmhhcyA/IGJhc2U6OnMuZXJyIDogKEV4cGVjdGVkRGV0
YWlsOjpUaHJvdygpLCBiYXNlOjpzLmVycik7IH0KLSAgICBjb25zdGV4cHIgY29uc3QgRSYmIGVy
cm9yKCkgY29uc3QgJiYgeyByZXR1cm4gIWJhc2U6OmhhcyA/IGJhc2U6OnMuZXJyIDogKEV4cGVj
dGVkRGV0YWlsOjpUaHJvdygpLCBiYXNlOjpzLmVycik7IH0gLy8gTm90IGluIHRoZSBjdXJyZW50
IHBhcGVyLgotICAgIC8vIGNvbnN0ZXhwciBFJiBlcnJvcigpICY7Ci0gICAgY29uc3RleHByIFVu
ZXhwZWN0ZWRUeXBlPEU+IGdldFVuZXhwZWN0ZWQoKSBjb25zdCB7IHJldHVybiBVbmV4cGVjdGVk
VHlwZTxFPihiYXNlOjpzLmVycik7IH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBF
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBjb25z
dCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gYm9vbCh4KSA9PSBib29sKHkpICYmICh4ID8g
eC52YWx1ZSgpID09IHkudmFsdWUoKSA6IHguZXJyb3IoKSA9PSB5LmVycm9yKCkpOyB9Ci10ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBF
eHBlY3RlZDxULCBFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuICEoeCA9
PSB5KTsgfQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPChjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsg
cmV0dXJuICghYm9vbCh4KSAmJiBib29sKHkpKSA/IGZhbHNlIDogKChib29sKHgpICYmICFib29s
KHkpKSA/IHRydWUgOiAoKGJvb2woeCkgJiYgYm9vbCh5KSkgPyB4LnZhbHVlKCkgPCB5LnZhbHVl
KCkgOiB4LmVycm9yKCkgPCB5LmVycm9yKCkpKTsgfQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29u
c3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuICEoeCA9PSB5KSAmJiAhKHggPCB5KTsgfQot
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29u
c3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7IHJldHVybiAo
eCA9PSB5KSB8fCAoeCA8IHkpOyB9Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgRXhwZWN0
ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuICh4ID09IHkpIHx8ICh4ID4geSk7IH0KLQotdGVtcGxhdGUg
PGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgRXhwZWN0ZWQ8dm9pZCwg
RT4mIHgsIGNvbnN0IEV4cGVjdGVkPHZvaWQsIEU+JiB5KSB7IHJldHVybiBib29sKHgpID09IGJv
b2woeSkgJiYgKHggPyB0cnVlIDogeC5lcnJvcigpID09IHkuZXJyb3IoKSk7IH0gLy8gTm90IGlu
IHRoZSBjdXJyZW50IHBhcGVyLgotdGVtcGxhdGUgPGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPChjb25zdCBFeHBlY3RlZDx2b2lkLCBFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8dm9pZCwg
RT4mIHkpIHsgcmV0dXJuICghYm9vbCh4KSAmJiBib29sKHkpKSA/IGZhbHNlIDogKChib29sKHgp
ICYmICFib29sKHkpKSA/IHRydWUgOiAoKGJvb2woeCkgJiYgYm9vbCh5KSkgPyBmYWxzZSA6IHgu
ZXJyb3IoKSA8IHkuZXJyb3IoKSkpOyB9IC8vIE5vdCBpbiB0aGUgY3VycmVudCBwYXBlci4KLQot
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29u
c3QgRXhwZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFQmIHkpIHsgcmV0dXJuIHggPT0gRXhwZWN0ZWQ8
VCwgRT4oeSk7IH0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFQmIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7IHJldHVybiBF
eHBlY3RlZDxULCBFPih4KSA9PSB5OyB9Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgVCYg
eSkgeyByZXR1cm4geCAhPSBFeHBlY3RlZDxULCBFPih5KTsgfQotdGVtcGxhdGUgPGNsYXNzIFQs
IGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgeCwgY29uc3QgRXhw
ZWN0ZWQ8VCwgRT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpICE9IHk7IH0KLXRlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgRXhw
ZWN0ZWQ8VCwgRT4mIHgsIGNvbnN0IFQmIHkpIHsgcmV0dXJuIHggPCBFeHBlY3RlZDxULCBFPih5
KTsgfQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PChjb25zdCBUJiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gRXhwZWN0ZWQ8
VCwgRT4oeCkgPCB5OyB9Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3I8PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgVCYgeSkgeyByZXR1
cm4geCA8PSBFeHBlY3RlZDxULCBFPih5KTsgfQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+
IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgVCYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwg
RT4mIHkpIHsgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpIDw9IHk7IH0KLXRlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgRXhwZWN0ZWQ8VCwg
RT4mIHgsIGNvbnN0IFQmIHkpIHsgcmV0dXJuIHggPiBFeHBlY3RlZDxULCBFPih5KTsgfQotdGVt
cGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBU
JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkgeyByZXR1cm4gRXhwZWN0ZWQ8VCwgRT4oeCkg
PiB5OyB9Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBFeHBlY3RlZDxULCBFPiYgeCwgY29uc3QgVCYgeSkgeyByZXR1cm4geCA+PSBF
eHBlY3RlZDxULCBFPih5KTsgfQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPj0oY29uc3QgVCYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkpIHsg
cmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpID49IHk7IH0KLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNs
YXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgs
IGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB5KSB7IHJldHVybiB4ID09IEV4cGVjdGVkPFQsIEU+
KHkpOyB9Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkp
IHsgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpID09IHk7IH0KLXRlbXBsYXRlIDxjbGFzcyBULCBj
bGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4
LCBjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeSkgeyByZXR1cm4geCAhPSBFeHBlY3RlZDxULCBF
Pih5KTsgfQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yIT0oY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5
KSB7IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSAhPSB5OyB9Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4
LCBjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeSkgeyByZXR1cm4geCA8IEV4cGVjdGVkPFQsIEU+
KHkpOyB9Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB4LCBjb25zdCBFeHBlY3RlZDxULCBFPiYgeSkg
eyAgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpIDwgeTsgfQotdGVtcGxhdGUgPGNsYXNzIFQsIGNs
YXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgs
IGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB5KSB7IHJldHVybiB4IDw9IEV4cGVjdGVkPFQsIEU+
KHkpOyB9Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3I8PShjb25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeCwgY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHkp
IHsgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KHgpIDw9IHk7IH0KLXRlbXBsYXRlIDxjbGFzcyBULCBj
bGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgRXhwZWN0ZWQ8VCwgRT4mIHgs
IGNvbnN0IFVuZXhwZWN0ZWRUeXBlPEU+JiB5KSB7IHJldHVybiB4ID4gRXhwZWN0ZWQ8VCwgRT4o
eSk7IH0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj4oY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7
IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA+IHk7IH0KLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBFPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB4LCBj
b25zdCBVbmV4cGVjdGVkVHlwZTxFPiYgeSkgeyByZXR1cm4geCA+PSBFeHBlY3RlZDxULCBFPih5
KTsgfQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEU+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
Pj0oY29uc3QgVW5leHBlY3RlZFR5cGU8RT4mIHgsIGNvbnN0IEV4cGVjdGVkPFQsIEU+JiB5KSB7
IHJldHVybiBFeHBlY3RlZDxULCBFPih4KSA+PSB5OyB9Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFPiB2b2lkIHN3YXAoRXhwZWN0ZWQ8VCwgRT4mIHgsIEV4cGVjdGVkPFQsIEU+
JiB5KSB7IHguc3dhcCh5KTsgfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRSA9IHN0ZDo6
bnVsbG9wdF90PiBjb25zdGV4cHIgRXhwZWN0ZWQ8c3RkOjpkZWNheV90PFQ+LCBFPiBtYWtlRXhw
ZWN0ZWQoVCYmIHYpCi17Ci0gICAgcmV0dXJuIEV4cGVjdGVkPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8
VD46OnR5cGUsIEU+KHN0ZDo6Zm9yd2FyZDxUPih2KSk7Ci19Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgRT4gY29uc3RleHByIEV4cGVjdGVkPFQsIHN0ZDo6ZGVjYXlfdDxFPj4gbWFrZUV4cGVj
dGVkRnJvbUVycm9yKEUmJiBlKSB7IHJldHVybiBFeHBlY3RlZDxULCBzdGQ6OmRlY2F5X3Q8RT4+
KG1ha2VVbmV4cGVjdGVkKGUpKTsgfQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEUsIGNsYXNz
IFU+IGNvbnN0ZXhwciBFeHBlY3RlZDxULCBFPiBtYWtlRXhwZWN0ZWRGcm9tRXJyb3IoVSYmIHUp
IHsgcmV0dXJuIEV4cGVjdGVkPFQsIEU+KG1ha2VVbmV4cGVjdGVkKEUgeyBzdGQ6OmZvcndhcmQ8
VT4odSkgfSApKTsgfQotLy8gdGVtcGxhdGUgPGNsYXNzIEYsIGNsYXNzIEUgPSBzdGQ6Om51bGxv
cHRfdD4gY29uc3RleHByIEV4cGVjdGVkPHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPEY+Ojp0eXBl
LCBFPiBtYWtlRXhwZWN0ZWRfZnJvbV9jYWxsKEYgZik7Ci0KLWlubGluZSBFeHBlY3RlZDx2b2lk
LCBzdGQ6Om51bGxvcHRfdD4gbWFrZUV4cGVjdGVkKCkgeyByZXR1cm4gRXhwZWN0ZWQ8dm9pZCwg
c3RkOjpudWxsb3B0X3Q+KCk7IH0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLW5hbWVzcGFjZSBz
dGQgewotCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRT4gc3RydWN0IGhhc2g8V1RGOjpFeHBl
Y3RlZDxULCBFPj4gewotICAgIHR5cGVkZWYgV1RGOjpFeHBlY3RlZDxULCBFPiBhcmd1bWVudF90
eXBlOwotICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgcmVzdWx0X3R5cGU7Ci0gICAgcmVzdWx0X3R5
cGUgb3BlcmF0b3IoKShhcmd1bWVudF90eXBlIGNvbnN0JiBlKSBjb25zdCB7IHJldHVybiBlID8g
aGFzaDx0eXBlbmFtZSBhcmd1bWVudF90eXBlOjpWYWx1ZVR5cGU+IHsgfSAoZS52YWx1ZSgpKSA6
IGhhc2g8dHlwZW5hbWUgYXJndW1lbnRfdHlwZTo6RXJyb3JUeXBlPiB7IH0gKGUuZXJyb3IoKSk7
IH0KLX07Ci0KLXRlbXBsYXRlIDxjbGFzcyBFPiBzdHJ1Y3QgaGFzaDxXVEY6OkV4cGVjdGVkPHZv
aWQsIEU+PiB7Ci0gICAgdHlwZWRlZiBXVEY6OkV4cGVjdGVkPHZvaWQsIEU+IGFyZ3VtZW50X3R5
cGU7Ci0gICAgdHlwZWRlZiBzdGQ6OnNpemVfdCByZXN1bHRfdHlwZTsKLSAgICByZXN1bHRfdHlw
ZSBvcGVyYXRvcigpKGFyZ3VtZW50X3R5cGUgY29uc3QmIGUpIGNvbnN0IHsgcmV0dXJuIGUgPyAw
IDogaGFzaDx0eXBlbmFtZSBhcmd1bWVudF90eXBlOjpFcnJvclR5cGU+IHsgfSAoZS5lcnJvcigp
KTsgfQotfTsKLQotfQotCi11c2luZyBXVEY6OlVuZXhwZWN0ZWRUeXBlOwotdXNpbmcgV1RGOjpt
YWtlVW5leHBlY3RlZDsKLXVzaW5nIFdURjo6VW5leHBlY3Q7Ci11c2luZyBXVEY6OkV4cGVjdGVk
OwotdXNpbmcgV1RGOjptYWtlRXhwZWN0ZWQ7Ci11c2luZyBXVEY6Om1ha2VFeHBlY3RlZEZyb21F
cnJvcjsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9FeHBv
cnRNYWNyb3MuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9FeHBvcnRNYWNy
b3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJmZjE4ZjNkNTUxZjhiY2EwMjUy
ODM5Yjc0MTU0MzFkMzc4YmJmMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRXhwb3J0TWFjcm9z
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICogVGhpcyBmaWxlIGhhbmRsZXMgc2hhcmVkIGxpYnJh
cnkgc3ltYm9sIGV4cG9ydCBkZWNvcmF0aW9ucy4gSXQgaXMgcmVjb21tZW5kZWQKLSAqIHRoYXQg
YWxsIFdlYktpdCBwcm9qZWN0cyB1c2UgdGhlc2UgZGVmaW5pdGlvbnMgc28gdGhhdCBzeW1ib2wg
ZXhwb3J0cyB3b3JrCi0gKiBwcm9wZXJseSBvbiBhbGwgcGxhdGZvcm1zIGFuZCBjb21waWxlcnMg
dGhhdCBXZWJLaXQgYnVpbGRzIHVuZGVyLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+Ci0KLS8vIERpZmZlcmVudCBwbGF0Zm9ybXMgaGF2ZSBkaWZmZXJl
bnQgZGVmYXVsdHMgZm9yIHN5bWJvbCB2aXNpYmlsaXR5LiBVc3VhbGx5Ci0vLyB0aGUgY29tcGls
ZXIgYW5kIHRoZSBsaW5rZXIganVzdCB0YWtlIGNhcmUgb2YgaXQuIEhvd2V2ZXIgZm9yIHJlZmVy
ZW5jZXMgdG8KLS8vIHJ1bnRpbWUgcm91dGluZXMgZnJvbSBKSVQgc3R1YnMsIGl0IG1hdHRlcnMg
dG8gYmUgYWJsZSB0byBkZWNsYXJlIGEgc3ltYm9sIGFzCi0vLyBiZWluZyBsb2NhbCB0byB0aGUg
dGFyZ2V0IGJlaW5nIGdlbmVyYXRlZCwgYW5kIHRodXMgbm90IHN1YmplY3QgdG8gKGUuZy4pIEVM
RgotLy8gc3ltYm9sIGludGVycG9zaXRpb24gcnVsZXMuCi0KLSNpZiBVU0UoREVDTFNQRUNfQVRU
UklCVVRFKQotI2RlZmluZSBIQVZFX0lOVEVSTkFMX1ZJU0lCSUxJVFkgMQotI2RlZmluZSBXVEZf
SU5URVJOQUwKLSNlbGlmIFVTRShWSVNJQklMSVRZX0FUVFJJQlVURSkKLSNkZWZpbmUgSEFWRV9J
TlRFUk5BTF9WSVNJQklMSVRZIDEKLSNkZWZpbmUgV1RGX0lOVEVSTkFMIF9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkoImhpZGRlbiIpKSkKLSNlbHNlCi0jZGVmaW5lIFdURl9JTlRFUk5BTAotI2Vu
ZGlmCi0KLSNpZiBVU0UoREVDTFNQRUNfQVRUUklCVVRFKQotCi0jZGVmaW5lIFdURl9FWFBPUlRf
REVDTEFSQVRJT04gX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jZGVmaW5lIFdURl9JTVBPUlRfREVD
TEFSQVRJT04gX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jZGVmaW5lIFdURl9ISURERU5fREVDTEFS
QVRJT04KLQotI2VsaWYgVVNFKFZJU0lCSUxJVFlfQVRUUklCVVRFKQotCi0jZGVmaW5lIFdURl9F
WFBPUlRfREVDTEFSQVRJT04gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkK
LSNkZWZpbmUgV1RGX0lNUE9SVF9ERUNMQVJBVElPTiBXVEZfRVhQT1JUX0RFQ0xBUkFUSU9OCi0j
ZGVmaW5lIFdURl9ISURERU5fREVDTEFSQVRJT04gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgi
aGlkZGVuIikpKQotCi0jZWxzZQotCi0jZGVmaW5lIFdURl9FWFBPUlRfREVDTEFSQVRJT04KLSNk
ZWZpbmUgV1RGX0lNUE9SVF9ERUNMQVJBVElPTgotI2RlZmluZSBXVEZfSElEREVOX0RFQ0xBUkFU
SU9OCi0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCVUlMRElOR19XVEYpIHx8IGRlZmluZWQoU1RB
VElDQUxMWV9MSU5LRURfV0lUSF9XVEYpCi0jZGVmaW5lIFdURl9JU19MSU5LRURfSU5fU0FNRV9C
SU5BUlkgMQotI2VuZGlmCi0KLS8vIFNlZSBub3RlIGluIHd0Zi9QbGF0Zm9ybS5oIGZvciBtb3Jl
IGluZm8gb24gRVhQT1JUX01BQ1JPUy4KLSNpZiBVU0UoRVhQT1JUX01BQ1JPUykKLQotI2RlZmlu
ZSBXVEZfRVhQT1JUIFdURl9FWFBPUlRfREVDTEFSQVRJT04KLSNkZWZpbmUgV1RGX0lNUE9SVCBX
VEZfSU1QT1JUX0RFQ0xBUkFUSU9OCi0jZGVmaW5lIFdURl9ISURERU4gV1RGX0lNUE9SVF9ERUNM
QVJBVElPTgotCi0vLyBGSVhNRTogV2hlbiBhbGwgcG9ydHMgYXJlIHVzaW5nIHRoZSBleHBvcnQg
bWFjcm9zLCB3ZSBzaG91bGQgcmVwbGFjZQotLy8gV1RGX0VYUE9SVERBVEEgd2l0aCBXVEZfRVhQ
T1JUX1BSSVZBVEUgbWFjcm9zLgotI2lmIGRlZmluZWQoV1RGX0lTX0xJTktFRF9JTl9TQU1FX0JJ
TkFSWSkKLSNkZWZpbmUgV1RGX0VYUE9SVERBVEEgV1RGX0VYUE9SVAotI2Vsc2UKLSNkZWZpbmUg
V1RGX0VYUE9SVERBVEEgV1RGX0lNUE9SVAotI2VuZGlmCi0KLSNlbHNlIC8vICFVU0UoRVhQT1JU
X01BQ1JPUykKLQotI2lmIFVTRShERUNMU1BFQ19BVFRSSUJVVEUpCi0jaWYgZGVmaW5lZChCVUlM
RElOR19XVEYpIHx8IGRlZmluZWQoU1RBVElDQUxMWV9MSU5LRURfV0lUSF9XVEYpCi0jZGVmaW5l
IFdURl9FWFBPUlREQVRBIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotI2Vsc2UKLSNkZWZpbmUgV1RG
X0VYUE9SVERBVEEgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jZW5kaWYKLSNlbHNlIC8vICFPUyhX
SU5ET1dTKSB8fCBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCi0jZGVmaW5lIFdURl9FWFBPUlREQVRB
Ci0jZW5kaWYKLQotI2RlZmluZSBXVEZfRVhQT1JUQ0xBU1MgV1RGX0VYUE9SVERBVEEKLQotI2Rl
ZmluZSBXVEZfRVhQT1JUCi0jZGVmaW5lIFdURl9JTVBPUlQKLSNkZWZpbmUgV1RGX0hJRERFTgot
Ci0jZW5kaWYgLy8gVVNFKEVYUE9SVF9NQUNST1MpCi0KLSNpZiBkZWZpbmVkKFdURl9JU19MSU5L
RURfSU5fU0FNRV9CSU5BUlkpCi0jZGVmaW5lIFdURl9FWFBPUlRfUFJJVkFURSBXVEZfRVhQT1JU
Ci0jZWxzZQotI2RlZmluZSBXVEZfRVhQT1JUX1BSSVZBVEUgV1RGX0lNUE9SVAotI2VuZGlmCi0K
LSNkZWZpbmUgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFdURl9FWFBPUlRfUFJJVkFURQotCi0jZGVm
aW5lIFdURl9FWFBPUlRfSElEREVOIFdURl9ISURERU4KLQotI2RlZmluZSBISURERU5fSU5MSU5F
IFdURl9FWFBPUlRfSElEREVOIGlubGluZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL0Zhc3RNYWxsb2MuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL0Zhc3RNYWxsb2MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
YTBmMDhiYThmOTJmYjgxYTU4YjQ0MGYxODUzMDFlNjM1MDNkOTY2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL3d0Zi9GYXN0TWFsbG9jLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM2NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmFzdE1hbGxvYy5oIgotCi0jaW5jbHVkZSAiQ2hl
Y2tlZEFyaXRobWV0aWMuaCIKLSNpbmNsdWRlICJDdXJyZW50VGltZS5oIgotI2luY2x1ZGUgPGxp
bWl0cz4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotCi0j
aWYgT1MoV0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHB0
aHJlYWQuaD4KLSNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KLSNlbmRpZgotCi0jaWYgT1MoREFS
V0lOKQotI2luY2x1ZGUgPG1hY2gvbWFjaF9pbml0Lmg+Ci0jaW5jbHVkZSA8bWFsbG9jL21hbGxv
Yy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXVEYgewotCi0jaWYgIWRlZmluZWQoTkRFQlVHKQot
bmFtZXNwYWNlIHsKLS8vIFdlIGRvIG5vdCB1c2Ugc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+
OjptYXgoKSBoZXJlIGR1ZSB0byB0aGUgZWRnZSBjYXNlIGluIFZDKysuCi0vLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNzIwCi1zdGF0aWMgc2l6ZV90IG1heFNp
bmdsZUFsbG9jYXRpb25TaXplID0gU0laRV9NQVg7Ci19OwotCi12b2lkIGZhc3RTZXRNYXhTaW5n
bGVBbGxvY2F0aW9uU2l6ZShzaXplX3Qgc2l6ZSkKLXsKLSAgICBtYXhTaW5nbGVBbGxvY2F0aW9u
U2l6ZSA9IHNpemU7Ci19Ci0KLSNkZWZpbmUgQVNTRVJUX0lTX1dJVEhJTl9MSU1JVChzaXplKSBk
byB7IFwKLSAgICAgICAgc2l6ZV90IHNpemVfXyA9IChzaXplKTsgXAotICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKChzaXplX18pIDw9IG1heFNpbmdsZUFsbG9jYXRpb25TaXplLCAiUmVxdWVz
dGVkIHNpemUgKCV6dSkgZXhjZWVkcyBtYXggc2luZ2xlIGFsbG9jYXRpb24gc2l6ZSBzZXQgZm9y
IHRlc3RpbmcgKCV6dSkiLCAoc2l6ZV9fKSwgbWF4U2luZ2xlQWxsb2NhdGlvblNpemUpOyBcCi0g
ICAgfSB3aGlsZSAoZmFsc2UpCi0KLSNkZWZpbmUgRkFJTF9JRl9FWENFRURTX0xJTUlUKHNpemUp
IGRvIHsgXAotICAgICAgICBpZiAoVU5MSUtFTFkoKHNpemUpID4gbWF4U2luZ2xlQWxsb2NhdGlv
blNpemUpKSBcCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsgXAotICAgIH0gd2hpbGUgKGZh
bHNlKQotCi0jZWxzZSAvLyAhZGVmaW5lZChOREVCVUcpCi0KLSNkZWZpbmUgQVNTRVJUX0lTX1dJ
VEhJTl9MSU1JVChzaXplKQotI2RlZmluZSBGQUlMX0lGX0VYQ0VFRFNfTElNSVQoc2l6ZSkKLQot
I2VuZGlmIC8vICFkZWZpbmVkKE5ERUJVRykKLQotdm9pZCogZmFzdFplcm9lZE1hbGxvYyhzaXpl
X3QgbikgCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gZmFzdE1hbGxvYyhuKTsKLSAgICBtZW1zZXQo
cmVzdWx0LCAwLCBuKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1jaGFyKiBmYXN0U3RyRHVw
KGNvbnN0IGNoYXIqIHNyYykKLXsKLSAgICBzaXplX3QgbGVuID0gc3RybGVuKHNyYykgKyAxOwot
ICAgIGNoYXIqIGR1cCA9IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0TWFsbG9jKGxlbikpOwotICAg
IG1lbWNweShkdXAsIHNyYywgbGVuKTsKLSAgICByZXR1cm4gZHVwOwotfQotCi1UcnlNYWxsb2NS
ZXR1cm5WYWx1ZSB0cnlGYXN0WmVyb2VkTWFsbG9jKHNpemVfdCBuKSAKLXsKLSAgICB2b2lkKiBy
ZXN1bHQ7Ci0gICAgaWYgKCF0cnlGYXN0TWFsbG9jKG4pLmdldFZhbHVlKHJlc3VsdCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIG1lbXNldChyZXN1bHQsIDAsIG4pOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jaWYgZGVmaW5lZChVU0VfU1lTVEVNX01B
TExPQykgJiYgVVNFX1NZU1RFTV9NQUxMT0MKLQotI2lmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSA8
bWFsbG9jLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLWJvb2wgaXNGYXN0TWFsbG9j
RW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zaXplX3QgZmFzdE1hbGxvY0dv
b2RTaXplKHNpemVfdCBieXRlcykKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAgcmV0dXJuIG1hbGxv
Y19nb29kX3NpemUoYnl0ZXMpOwotI2Vsc2UKLSAgICByZXR1cm4gYnl0ZXM7Ci0jZW5kaWYKLX0K
LQotI2lmIE9TKFdJTkRPV1MpCi0KLXZvaWQqIGZhc3RBbGlnbmVkTWFsbG9jKHNpemVfdCBhbGln
bm1lbnQsIHNpemVfdCBzaXplKSAKLXsKLSAgICBBU1NFUlRfSVNfV0lUSElOX0xJTUlUKHNpemUp
OwotICAgIHZvaWQqIHAgPSBfYWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKLSAgICBp
ZiAoVU5MSUtFTFkoIXApKQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiBwOwotfQotCi12
b2lkKiB0cnlGYXN0QWxpZ25lZE1hbGxvYyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkg
Ci17Ci0gICAgRkFJTF9JRl9FWENFRURTX0xJTUlUKHNpemUpOwotICAgIHJldHVybiBfYWxpZ25l
ZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKLX0KLQotdm9pZCBmYXN0QWxpZ25lZEZyZWUodm9p
ZCogcCkgCi17Ci0gICAgX2FsaWduZWRfZnJlZShwKTsKLX0KLQotI2Vsc2UKLQotdm9pZCogZmFz
dEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAotewotICAgIEFT
U0VSVF9JU19XSVRISU5fTElNSVQoc2l6ZSk7Ci0gICAgdm9pZCogcCA9IG51bGxwdHI7Ci0gICAg
cG9zaXhfbWVtYWxpZ24oJnAsIGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFw
KSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcDsKLX0KLQotdm9pZCogdHJ5RmFzdEFs
aWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAotewotICAgIEZBSUxf
SUZfRVhDRUVEU19MSU1JVChzaXplKTsKLSAgICB2b2lkKiBwID0gbnVsbHB0cjsKLSAgICBwb3Np
eF9tZW1hbGlnbigmcCwgYWxpZ25tZW50LCBzaXplKTsKLSAgICByZXR1cm4gcDsKLX0KLQotdm9p
ZCBmYXN0QWxpZ25lZEZyZWUodm9pZCogcCkgCi17Ci0gICAgZnJlZShwKTsKLX0KLQotI2VuZGlm
IC8vIE9TKFdJTkRPV1MpCi0KLVRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RNYWxsb2Moc2l6
ZV90IG4pIAotewotICAgIEZBSUxfSUZfRVhDRUVEU19MSU1JVChuKTsKLSAgICByZXR1cm4gbWFs
bG9jKG4pOwotfQotCi12b2lkKiBmYXN0TWFsbG9jKHNpemVfdCBuKSAKLXsKLSAgICBBU1NFUlRf
SVNfV0lUSElOX0xJTUlUKG4pOwotICAgIHZvaWQqIHJlc3VsdCA9IG1hbGxvYyhuKTsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgQ1JBU0goKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LVRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNp
emVfdCBlbGVtZW50X3NpemUpCi17Ci0gICAgRkFJTF9JRl9FWENFRURTX0xJTUlUKG5fZWxlbWVu
dHMgKiBlbGVtZW50X3NpemUpOwotICAgIHJldHVybiBjYWxsb2Mobl9lbGVtZW50cywgZWxlbWVu
dF9zaXplKTsKLX0KLQotdm9pZCogZmFzdENhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90
IGVsZW1lbnRfc2l6ZSkKLXsKLSAgICBBU1NFUlRfSVNfV0lUSElOX0xJTUlUKG5fZWxlbWVudHMg
KiBlbGVtZW50X3NpemUpOwotICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYyhuX2VsZW1lbnRzLCBl
bGVtZW50X3NpemUpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBDUkFTSCgpOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBmYXN0RnJlZSh2b2lkKiBwKQotewotICAgIGZyZWUo
cCk7Ci19Ci0KLXZvaWQqIGZhc3RSZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBuKQotewotICAgIEFT
U0VSVF9JU19XSVRISU5fTElNSVQobik7Ci0gICAgdm9pZCogcmVzdWx0ID0gcmVhbGxvYyhwLCBu
KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIHJlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeSgpIHsgfQotdm9pZCByZWxl
YXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnlGb3JUaGlzVGhyZWFkKCkgeyB9Ci0gICAgCi1GYXN0TWFs
bG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGljcygpCi17Ci0gICAgRmFzdE1hbGxvY1N0
YXRpc3RpY3Mgc3RhdGlzdGljcyA9IHsgMCwgMCwgMCB9OwotICAgIHJldHVybiBzdGF0aXN0aWNz
OwotfQotCi1zaXplX3QgZmFzdE1hbGxvY1NpemUoY29uc3Qgdm9pZCogcCkKLXsKLSNpZiBPUyhE
QVJXSU4pCi0gICAgcmV0dXJuIG1hbGxvY19zaXplKHApOwotI2VsaWYgT1MoV0lORE9XUykKLSAg
ICByZXR1cm4gX21zaXplKGNvbnN0X2Nhc3Q8dm9pZCo+KHApKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHApOwotICAgIHJldHVybiAxOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdU
RgotCi0jZWxzZSAvLyBkZWZpbmVkKFVTRV9TWVNURU1fTUFMTE9DKSAmJiBVU0VfU1lTVEVNX01B
TExPQwotCi0jaW5jbHVkZSA8Ym1hbGxvYy9ibWFsbG9jLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewot
Ci1ib29sIGlzRmFzdE1hbGxvY0VuYWJsZWQoKQotewotICAgIHJldHVybiBibWFsbG9jOjphcGk6
OmlzRW5hYmxlZCgpOwotfQotCi12b2lkKiBmYXN0TWFsbG9jKHNpemVfdCBzaXplKQotewotICAg
IEFTU0VSVF9JU19XSVRISU5fTElNSVQoc2l6ZSk7Ci0gICAgcmV0dXJuIGJtYWxsb2M6OmFwaTo6
bWFsbG9jKHNpemUpOwotfQotCi12b2lkKiBmYXN0Q2FsbG9jKHNpemVfdCBudW1FbGVtZW50cywg
c2l6ZV90IGVsZW1lbnRTaXplKQotewotICAgIEFTU0VSVF9JU19XSVRISU5fTElNSVQobnVtRWxl
bWVudHMgKiBlbGVtZW50U2l6ZSk7Ci0gICAgQ2hlY2tlZDxzaXplX3Q+IGNoZWNrZWRTaXplID0g
ZWxlbWVudFNpemU7Ci0gICAgY2hlY2tlZFNpemUgKj0gbnVtRWxlbWVudHM7Ci0gICAgdm9pZCog
cmVzdWx0ID0gZmFzdFplcm9lZE1hbGxvYyhjaGVja2VkU2l6ZS51bnNhZmVHZXQoKSk7Ci0gICAg
aWYgKCFyZXN1bHQpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dm9pZCogZmFzdFJlYWxsb2Modm9pZCogb2JqZWN0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBBU1NF
UlRfSVNfV0lUSElOX0xJTUlUKHNpemUpOwotICAgIHJldHVybiBibWFsbG9jOjphcGk6OnJlYWxs
b2Mob2JqZWN0LCBzaXplKTsKLX0KLQotdm9pZCBmYXN0RnJlZSh2b2lkKiBvYmplY3QpCi17Ci0g
ICAgYm1hbGxvYzo6YXBpOjpmcmVlKG9iamVjdCk7Ci19Ci0KLXNpemVfdCBmYXN0TWFsbG9jU2l6
ZShjb25zdCB2b2lkKikKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmNvcnJlY3Q7IGJlc3Qg
Zml4IGlzIHByb2JhYmx5IHRvIHJlbW92ZSB0aGlzIGZ1bmN0aW9uLgotICAgIC8vIENhbGxlciBj
dXJyZW50bHkgYXJlIGFsbCB1c2luZyB0aGlzIGZvciBhc3NlcnRpb24sIG5vdCB0byBhY3R1YWxs
eSBjaGVjawotICAgIC8vIHRoZSBzaXplIG9mIHRoZSBhbGxvY2F0aW9uLCBzbyBtYXliZSB3ZSBj
YW4gY29tZSB1cCB3aXRoIHNvbWV0aGluZyBmb3IgdGhhdC4KLSAgICByZXR1cm4gMTsKLX0KLQot
c2l6ZV90IGZhc3RNYWxsb2NHb29kU2l6ZShzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gc2l6
ZTsKLX0KLQotdm9pZCogZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
IHNpemUpIAotewotICAgIEFTU0VSVF9JU19XSVRISU5fTElNSVQoc2l6ZSk7Ci0gICAgcmV0dXJu
IGJtYWxsb2M6OmFwaTo6bWVtYWxpZ24oYWxpZ25tZW50LCBzaXplKTsKLX0KLQotdm9pZCogdHJ5
RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAotewotICAg
IEZBSUxfSUZfRVhDRUVEU19MSU1JVChzaXplKTsKLSAgICByZXR1cm4gYm1hbGxvYzo6YXBpOjp0
cnlNZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOwotfQotCi12b2lkIGZhc3RBbGlnbmVkRnJlZSh2
b2lkKiBwKSAKLXsKLSAgICBibWFsbG9jOjphcGk6OmZyZWUocCk7Ci19Ci0KLVRyeU1hbGxvY1Jl
dHVyblZhbHVlIHRyeUZhc3RNYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0gICAgRkFJTF9JRl9FWENF
RURTX0xJTUlUKHNpemUpOwotICAgIHJldHVybiBibWFsbG9jOjphcGk6OnRyeU1hbGxvYyhzaXpl
KTsKLX0KLSAgICAKLVRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV90IG51
bUVsZW1lbnRzLCBzaXplX3QgZWxlbWVudFNpemUpCi17Ci0gICAgRkFJTF9JRl9FWENFRURTX0xJ
TUlUKG51bUVsZW1lbnRzICogZWxlbWVudFNpemUpOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNv
cmRPdmVyZmxvdz4gY2hlY2tlZFNpemUgPSBlbGVtZW50U2l6ZTsKLSAgICBjaGVja2VkU2l6ZSAq
PSBudW1FbGVtZW50czsKLSAgICBpZiAoY2hlY2tlZFNpemUuaGFzT3ZlcmZsb3dlZCgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gdHJ5RmFzdFplcm9lZE1hbGxvYyhjaGVj
a2VkU2l6ZS51bnNhZmVHZXQoKSk7Ci19Ci0gICAgCi12b2lkIHJlbGVhc2VGYXN0TWFsbG9jRnJl
ZU1lbW9yeUZvclRoaXNUaHJlYWQoKQotewotICAgIGJtYWxsb2M6OmFwaTo6c2NhdmVuZ2VUaGlz
VGhyZWFkKCk7Ci19Ci0KLXZvaWQgcmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5KCkKLXsKLSAg
ICBibWFsbG9jOjphcGk6OnNjYXZlbmdlKCk7Ci19Ci0KLUZhc3RNYWxsb2NTdGF0aXN0aWNzIGZh
c3RNYWxsb2NTdGF0aXN0aWNzKCkKLXsKLQotICAgIC8vIEZJWE1FOiBDYW4gYm1hbGxvYyBpdHNl
bGYgcmVwb3J0IHRoZSBzdGF0cyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIE9TPwotICAgIEZh
c3RNYWxsb2NTdGF0aXN0aWNzIHN0YXRpc3RpY3M7Ci0gICAgc3RhdGlzdGljcy5mcmVlTGlzdEJ5
dGVzID0gMDsKLSAgICBzdGF0aXN0aWNzLnJlc2VydmVkVk1CeXRlcyA9IDA7Ci0KLSNpZiBPUyhX
SU5ET1dTKQotICAgIFBST0NFU1NfTUVNT1JZX0NPVU5URVJTIHJlc291cmNlVXNhZ2U7Ci0gICAg
R2V0UHJvY2Vzc01lbW9yeUluZm8oR2V0Q3VycmVudFByb2Nlc3MoKSwgJnJlc291cmNlVXNhZ2Us
IHNpemVvZihyZXNvdXJjZVVzYWdlKSk7Ci0gICAgc3RhdGlzdGljcy5jb21taXR0ZWRWTUJ5dGVz
ID0gcmVzb3VyY2VVc2FnZS5QZWFrV29ya2luZ1NldFNpemU7Ci0jZWxzZQotICAgIHN0cnVjdCBy
dXNhZ2UgcmVzb3VyY2VVc2FnZTsKLSAgICBnZXRydXNhZ2UoUlVTQUdFX1NFTEYsICZyZXNvdXJj
ZVVzYWdlKTsKLQotI2lmIE9TKERBUldJTikKLSAgICBzdGF0aXN0aWNzLmNvbW1pdHRlZFZNQnl0
ZXMgPSByZXNvdXJjZVVzYWdlLnJ1X21heHJzczsKLSNlbHNlCi0gICAgc3RhdGlzdGljcy5jb21t
aXR0ZWRWTUJ5dGVzID0gcmVzb3VyY2VVc2FnZS5ydV9tYXhyc3MgKiAxMDI0OwotI2VuZGlmIC8v
IE9TKERBUldJTikKLQotI2VuZGlmIC8vIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIHN0YXRpc3Rp
Y3M7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gZGVmaW5lZChVU0VfU1lT
VEVNX01BTExPQykgJiYgVVNFX1NZU1RFTV9NQUxMT0MKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9GYXN0TWFsbG9jLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvRmFzdE1hbGxvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxZmRlMzMyOTU4YTQ0OTRkZDQxYWRmNGI3MTJmZWFkNzcwNWMyMzcwLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9GYXN0TWFsbG9jLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTggKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgV1RGX0Zhc3RNYWxsb2Nf
aAotI2RlZmluZSBXVEZfRmFzdE1hbGxvY19oCi0KLSNpbmNsdWRlIDxuZXc+Ci0jaW5jbHVkZSA8
c3RkbGliLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV1RG
IHsKLQotI2lmICFkZWZpbmVkKE5ERUJVRykKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZhc3RT
ZXRNYXhTaW5nbGVBbGxvY2F0aW9uU2l6ZShzaXplX3QpOwotI2VuZGlmCi0KLWNsYXNzIFRyeU1h
bGxvY1JldHVyblZhbHVlIHsKLXB1YmxpYzoKLSAgICBUcnlNYWxsb2NSZXR1cm5WYWx1ZSh2b2lk
Kik7Ci0gICAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUoVHJ5TWFsbG9jUmV0dXJuVmFsdWUmJik7Ci0g
ICAgflRyeU1hbGxvY1JldHVyblZhbHVlKCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9v
bCBnZXRWYWx1ZShUKiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLXByaXZhdGU6Ci0gICAgdm9pZCBv
cGVyYXRvcj0oVHJ5TWFsbG9jUmV0dXJuVmFsdWUmJikgPSBkZWxldGU7Ci0gICAgbXV0YWJsZSB2
b2lkKiBtX2RhdGE7Ci19OwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0Zhc3RNYWxsb2NF
bmFibGVkKCk7Ci0KLS8vIFRoZXNlIGZ1bmN0aW9ucyBjYWxsIENSQVNIKCkgaWYgYW4gYWxsb2Nh
dGlvbiBmYWlscy4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkKiBmYXN0TWFsbG9jKHNpemVfdCkg
UkVUVVJOU19OT05OVUxMOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIGZhc3RaZXJvZWRNYWxs
b2Moc2l6ZV90KSBSRVRVUk5TX05PTk5VTEw7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogZmFz
dENhbGxvYyhzaXplX3QgbnVtRWxlbWVudHMsIHNpemVfdCBlbGVtZW50U2l6ZSkgUkVUVVJOU19O
T05OVUxMOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIGZhc3RSZWFsbG9jKHZvaWQqLCBzaXpl
X3QpIFJFVFVSTlNfTk9OTlVMTDsKLVdURl9FWFBPUlRfUFJJVkFURSBjaGFyKiBmYXN0U3RyRHVw
KGNvbnN0IGNoYXIqKSBSRVRVUk5TX05PTk5VTEw7Ci0KLVdURl9FWFBPUlRfUFJJVkFURSBUcnlN
YWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0TWFsbG9jKHNpemVfdCk7Ci1UcnlNYWxsb2NSZXR1cm5W
YWx1ZSB0cnlGYXN0WmVyb2VkTWFsbG9jKHNpemVfdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgVHJ5
TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplX3QgbnVtRWxlbWVudHMsIHNpemVf
dCBlbGVtZW50U2l6ZSk7Ci0KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZhc3RGcmVlKHZvaWQq
KTsKLQotLy8gQWxsb2NhdGlvbnMgZnJvbSBmYXN0QWxpZ25lZE1hbGxvYygpIG11c3QgYmUgZnJl
ZWQgdXNpbmcgZmFzdEFsaWduZWRGcmVlKCkuCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogZmFz
dEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KSBSRVRVUk5TX05PTk5VTEw7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5RmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFs
aWdubWVudCwgc2l6ZV90KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZhc3RBbGlnbmVkRnJl
ZSh2b2lkKik7Ci0KLVdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZmFzdE1hbGxvY1NpemUoY29u
c3Qgdm9pZCopOwotCi0vLyBGSVhNRTogVGhpcyBpcyBub24taGVscGZ1bDsgZmFzdE1hbGxvY0dv
b2RTaXplIHdpbGwgYmUgcmVtb3ZlZCBzb29uLgotV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBm
YXN0TWFsbG9jR29vZFNpemUoc2l6ZV90KTsKLQotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVs
ZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5KCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZWxl
YXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnlGb3JUaGlzVGhyZWFkKCk7Ci0KLXN0cnVjdCBGYXN0TWFs
bG9jU3RhdGlzdGljcyB7Ci0gICAgc2l6ZV90IHJlc2VydmVkVk1CeXRlczsKLSAgICBzaXplX3Qg
Y29tbWl0dGVkVk1CeXRlczsKLSAgICBzaXplX3QgZnJlZUxpc3RCeXRlczsKLX07Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgRmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRpc3RpY3MoKTsK
LQotLy8gVGhpcyBkZWZpbmVzIGEgdHlwZSB3aGljaCBob2xkcyBhbiB1bnNpZ25lZCBpbnRlZ2Vy
IGFuZCBpcyB0aGUgc2FtZQotLy8gc2l6ZSBhcyB0aGUgbWluaW1hbGx5IGFsaWduZWQgbWVtb3J5
IGFsbG9jYXRpb24uCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBBbGxvY0FsaWdubWVudElu
dGVnZXI7Ci0KLWlubGluZSBUcnlNYWxsb2NSZXR1cm5WYWx1ZTo6VHJ5TWFsbG9jUmV0dXJuVmFs
dWUodm9pZCogZGF0YSkKLSAgICA6IG1fZGF0YShkYXRhKQotewotfQotCi1pbmxpbmUgVHJ5TWFs
bG9jUmV0dXJuVmFsdWU6OlRyeU1hbGxvY1JldHVyblZhbHVlKFRyeU1hbGxvY1JldHVyblZhbHVl
JiYgc291cmNlKQotICAgIDogbV9kYXRhKHNvdXJjZS5tX2RhdGEpCi17Ci0gICAgc291cmNlLm1f
ZGF0YSA9IG51bGxwdHI7Ci19Ci0KLWlubGluZSBUcnlNYWxsb2NSZXR1cm5WYWx1ZTo6flRyeU1h
bGxvY1JldHVyblZhbHVlKCkKLXsKLSAgICBBU1NFUlQoIW1fZGF0YSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBib29sIFRyeU1hbGxvY1JldHVyblZhbHVlOjpnZXRWYWx1ZShU
KiYgZGF0YSkKLXsKLSAgICBkYXRhID0gc3RhdGljX2Nhc3Q8VCo+KG1fZGF0YSk7Ci0gICAgbV9k
YXRhID0gbnVsbHB0cjsKLSAgICByZXR1cm4gZGF0YTsKLX0KLQotLy8gQysrIFNUTCBhbGxvY2F0
b3IgaW1wbGVtZW50YXRpb24uIFlvdSBjYW4gaW50ZWdyYXRlIGZhc3RNYWxsb2MgaW50byBTVEwg
Y29udGFpbmVycy4KLS8vIGUuZy4gc3RkOjp1bm9yZGVyZWRfbWFwPEtleSwgVmFsdWUsIHN0ZDo6
aGFzaDxLZXk+LCBzdGQ6OmVxdWFsX3RvPEtleT4sIEZhc3RBbGxvY2F0b3I8c3RkOjpwYWlyPGNv
bnN0IEtleSwgVmFsdWU+Pj4uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotY2xhc3MgRmFzdEFsbG9j
YXRvciB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgdmFsdWVfdHlwZSA9IFQ7Ci0KLSAgICBGYXN0QWxs
b2NhdG9yKCkgPSBkZWZhdWx0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gRmFzdEFsbG9j
YXRvcihjb25zdCBGYXN0QWxsb2NhdG9yPFU+JikgeyB9Ci0KLSAgICBUKiBhbGxvY2F0ZShzaXpl
X3QgY291bnQpCi0gICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oZmFz
dE1hbGxvYyhzaXplb2YoVCkgKiBjb3VudCkpOwotICAgIH0KLQotICAgIHZvaWQgZGVhbGxvY2F0
ZShUKiBwb2ludGVyLCBzaXplX3QpCi0gICAgewotICAgICAgICBmYXN0RnJlZShwb2ludGVyKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEZhc3RBbGxvY2F0b3I8VD4mLCBjb25zdCBGYXN0QWxsb2NhdG9y
PFU+JikgeyByZXR1cm4gdHJ1ZTsgfQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGYXN0QWxsb2NhdG9yPFQ+JiwgY29uc3QgRmFz
dEFsbG9jYXRvcjxVPiYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLQotfSAvLyBuYW1lc3BhY2UgV1RG
Ci0KLSNpZiAhZGVmaW5lZChOREVCVUcpCi11c2luZyBXVEY6OmZhc3RTZXRNYXhTaW5nbGVBbGxv
Y2F0aW9uU2l6ZTsKLSNlbmRpZgotCi11c2luZyBXVEY6OmlzRmFzdE1hbGxvY0VuYWJsZWQ7Ci11
c2luZyBXVEY6OmZhc3RDYWxsb2M7Ci11c2luZyBXVEY6OmZhc3RGcmVlOwotdXNpbmcgV1RGOjpm
YXN0TWFsbG9jOwotdXNpbmcgV1RGOjpmYXN0TWFsbG9jR29vZFNpemU7Ci11c2luZyBXVEY6OmZh
c3RNYWxsb2NTaXplOwotdXNpbmcgV1RGOjpmYXN0UmVhbGxvYzsKLXVzaW5nIFdURjo6ZmFzdFN0
ckR1cDsKLXVzaW5nIFdURjo6ZmFzdFplcm9lZE1hbGxvYzsKLXVzaW5nIFdURjo6dHJ5RmFzdEFs
aWduZWRNYWxsb2M7Ci11c2luZyBXVEY6OnRyeUZhc3RDYWxsb2M7Ci11c2luZyBXVEY6OnRyeUZh
c3RNYWxsb2M7Ci11c2luZyBXVEY6OnRyeUZhc3RaZXJvZWRNYWxsb2M7Ci11c2luZyBXVEY6OmZh
c3RBbGlnbmVkTWFsbG9jOwotdXNpbmcgV1RGOjpmYXN0QWxpZ25lZEZyZWU7Ci11c2luZyBXVEY6
OkZhc3RBbGxvY2F0b3I7Ci0KLSNpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpICYmIE9TKERBUldJ
TikKLSNkZWZpbmUgV1RGX1BSSVZBVEVfSU5MSU5FIF9fcHJpdmF0ZV9leHRlcm5fXyBpbmxpbmUg
X19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi0jZWxpZiBDT01QSUxFUihHQ0NfT1JfQ0xB
TkcpCi0jZGVmaW5lIFdURl9QUklWQVRFX0lOTElORSBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3
YXlzX2lubGluZSkpCi0jZWxpZiBDT01QSUxFUihNU1ZDKQotI2RlZmluZSBXVEZfUFJJVkFURV9J
TkxJTkUgX19mb3JjZWlubGluZQotI2Vsc2UKLSNkZWZpbmUgV1RGX1BSSVZBVEVfSU5MSU5FIGlu
bGluZQotI2VuZGlmCi0KLSNkZWZpbmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQgXAotcHVibGlj
OiBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsg
fSBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBw
OyB9IFwKLSAgICBcCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKSBcCi0gICAg
eyBcCi0gICAgICAgIHJldHVybiA6OldURjo6ZmFzdE1hbGxvYyhzaXplKTsgXAotICAgIH0gXAot
ICAgIFwKLSAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwKSBcCi0gICAgeyBcCi0gICAg
ICAgIDo6V1RGOjpmYXN0RnJlZShwKTsgXAotICAgIH0gXAotICAgIFwKLSAgICB2b2lkKiBvcGVy
YXRvciBuZXdbXShzaXplX3Qgc2l6ZSkgXAotICAgIHsgXAotICAgICAgICByZXR1cm4gOjpXVEY6
OmZhc3RNYWxsb2Moc2l6ZSk7IFwKLSAgICB9IFwKLSAgICBcCi0gICAgdm9pZCBvcGVyYXRvciBk
ZWxldGVbXSh2b2lkKiBwKSBcCi0gICAgeyBcCi0gICAgICAgIDo6V1RGOjpmYXN0RnJlZShwKTsg
XAotICAgIH0gXAotICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIE5vdE51bGxUYWcsIHZv
aWQqIGxvY2F0aW9uKSBcCi0gICAgeyBcCi0gICAgICAgIEFTU0VSVChsb2NhdGlvbik7IFwKLSAg
ICAgICAgcmV0dXJuIGxvY2F0aW9uOyBcCi0gICAgfSBcCi1wcml2YXRlOiBcCi10eXBlZGVmIGlu
dCBfX3RoaXNJc0hlcmVUb0ZvcmNlQVNlbWljb2xvbkFmdGVyVGhpc01hY3JvCi0KLSNlbmRpZiAv
KiBXVEZfRmFzdE1hbGxvY19oICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvRmFzdFRMUy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3Rm
L0Zhc3RUTFMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ0MzI5ZmNhMzMyMDQw
YTI1YmFmNjU4OTc3NTBiZTVkMTM3MTQzZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRmFzdFRM
Uy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEhBVkUoRkFTVF9U
TFMpCi0KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8U3lzdGVtL3B0aHJlYWRfbWFj
aGRlcC5oPgotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQot
Ly8gX19QVEtfRlJBTUVXT1JLX0pBVkFTQ1JJUFRDT1JFX0tFWTAgaXMgdGFrZW4gYnkgYm1hbGxv
Yywgc28gV1RGJ3MgS0VZMCBtYXBzIHRvIHRoZQotLy8gc3lzdGVtJ3MgS0VZMS4KLSNkZWZpbmUg
V1RGX0ZBU1RfVExTX0tFWTAgX19QVEtfRlJBTUVXT1JLX0pBVkFTQ1JJUFRDT1JFX0tFWTEKLSNk
ZWZpbmUgV1RGX0ZBU1RfVExTX0tFWTEgX19QVEtfRlJBTUVXT1JLX0pBVkFTQ1JJUFRDT1JFX0tF
WTIKLSNkZWZpbmUgV1RGX0ZBU1RfVExTX0tFWTIgX19QVEtfRlJBTUVXT1JLX0pBVkFTQ1JJUFRD
T1JFX0tFWTMKLSNkZWZpbmUgV1RGX0ZBU1RfVExTX0tFWTMgX19QVEtfRlJBTUVXT1JLX0pBVkFT
Q1JJUFRDT1JFX0tFWTQKLQotLy8gTk9URTogV2Ugc2hvdWxkIG1hbmFnZSBvdXIgdXNlIG9mIHRo
ZXNlIGtleXMgaGVyZS4gSWYgeW91IHdhbnQgdG8gdXNlIGEga2V5IGZvciBzb21ldGhpbmcsCi0v
LyBwdXQgYSAjZGVmaW5lIGluIGhlcmUgdG8gZ2l2ZSB5b3VyIGtleSBhIHN5bWJvbGljIG5hbWUu
IFRoaXMgZW5zdXJlcyB0aGF0IHdlIGRvbid0Ci0vLyBhY2NpZGVudGFsbHkgdXNlIHRoZSBzYW1l
IGtleSBmb3IgbW9yZSB0aGFuIG9uZSB0aGluZy4KLQotI2RlZmluZSBXVEZfVEhSRUFEX0RBVEFf
S0VZIFdURl9GQVNUX1RMU19LRVkwCi0jZGVmaW5lIFdURl9XQVNNX0NPTlRFWFRfS0VZIFdURl9G
QVNUX1RMU19LRVkxCi0jZGVmaW5lIFdURl9URVNUSU5HX0tFWSBXVEZfRkFTVF9UTFNfS0VZMwot
Ci0jaWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLWlubGluZSB1bnNpZ25lZCBmYXN0VExTT2Zmc2V0
Rm9yS2V5KHVuc2lnbmVkIGxvbmcgc2xvdCkKLXsKLSAgICByZXR1cm4gc2xvdCAqIHNpemVvZih2
b2lkKik7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNpZiBFTkFCTEUoRkFT
VF9UTFNfSklUKQotdXNpbmcgV1RGOjpmYXN0VExTT2Zmc2V0Rm9yS2V5OwotI2VuZGlmCi0KLSNl
bmRpZiAvLyBIQVZFKEZBU1RfVExTKQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvRmVhdHVyZURlZmluZXMuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9GZWF0dXJlRGVmaW5lcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyN2E2MTc2MzliOGFmYjExODVmNzJlZWM4YTUxMTU0YTA5YjYzNjRmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9GZWF0dXJlRGVmaW5lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQ1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkg
VG9yY2ggTW9iaWxlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXVEZfRmVhdHVyZURl
ZmluZXNfaAotI2RlZmluZSBXVEZfRmVhdHVyZURlZmluZXNfaAotCi0vKiBVc2UgdGhpcyBmaWxl
IHRvIGxpc3QgX2FsbF8gRU5BQkxFKCkgbWFjcm9zLiBEZWZpbmUgdGhlIG1hY3JvcyB0byBiZSBv
bmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gKiAgLSAiMCIgZGlzYWJsZXMgdGhlIGZlYXR1
cmUgYnkgZGVmYXVsdC4gVGhlIGZlYXR1cmUgY2FuIHN0aWxsIGJlIGVuYWJsZWQgZm9yIGEgc3Bl
Y2lmaWMgcG9ydCBvciBlbnZpcm9ubWVudC4KLSAqICAtICIxIiBlbmFibGVzIHRoZSBmZWF0dXJl
IGJ5IGRlZmF1bHQuIFRoZSBmZWF0dXJlIGNhbiBzdGlsbCBiZSBkaXNhYmxlZCBmb3IgYSBzcGVj
aWZpYyBwb3J0IG9yIGVudmlyb25tZW50LgotICoKLSAqIFRoZSBmZWF0dXJlIGRlZmF1bHRzIGlu
IHRoaXMgZmlsZSBhcmUgb25seSB0YWtlbiBpbnRvIGFjY291bnQgaWYgdGhlIChwb3J0IHNwZWNp
ZmljKSBidWlsZCBzeXN0ZW0KLSAqIGhhcyBub3QgZW5hYmxlZCBvciBkaXNhYmxlZCBhIHBhcnRp
Y3VsYXIgZmVhdHVyZS4KLSAqCi0gKiBVc2UgdGhpcyBmaWxlIHRvIGRlZmluZSBFTkFCTEUoKSBt
YWNyb3Mgb25seS4gRG8gbm90IHVzZSB0aGlzIGZpbGUgdG8gZGVmaW5lIFVTRSgpIG9yIG1hY3Jv
cyAhCi0gKgotICogT25seSBkZWZpbmUgYSBtYWNybyBpZiBpdCB3YXMgbm90IGRlZmluZWQgYmVm
b3JlIC0gYWx3YXlzIGNoZWNrIGZvciAhZGVmaW5lZCBmaXJzdC4KLSAqCi0gKiBLZWVwIHRoZSBm
aWxlIHNvcnRlZCBieSB0aGUgbmFtZSBvZiB0aGUgZGVmaW5lcy4gQXMgYW4gZXhjZXB0aW9uIHlv
dSBjYW4gY2hhbmdlIHRoZSBvcmRlcgotICogdG8gYWxsb3cgaW50ZXJkZXBlbmRlbmNpZXMgYmV0
d2VlbiB0aGUgZGVmYXVsdCB2YWx1ZXMuCi0gKgotICogQmVsb3cgYXJlIGEgZmV3IHBvdGVudGlh
bCBjb21tYW5kcyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIGZpbGUgcnVubmluZyBmcm9tIHRo
ZSBTb3VyY2UvV1RGIGRpcmVjdG9yeQotICoKLSAqIEdldCB0aGUgbGlzdCBvZiBmZWF0dXJlIGRl
ZmluZXM6IGdyZXAgLW8gIkVOQUJMRV9cKFx3XCtcKSIgd3RmL0ZlYXR1cmVEZWZpbmVzLmggfCBz
b3J0IHwgdW5pcQotICogR2V0IHRoZSBsaXN0IG9mIGZlYXR1cmVzIGVuYWJsZWQgYnkgZGVmYXVs
dCBmb3IgYSBQTEFURk9STShYWFgpOiBnY2MgLUUgLWRNIC1JLiAtRFdURl9QTEFURk9STV9YWFgg
Ind0Zi9QbGF0Zm9ybS5oIiB8IGdyZXAgIkVOQUJMRV9cd1wrIDEiIHwgY3V0IC1kJyAnIC1mMiB8
IHNvcnQKLSAqLwotCi0vKiBGSVhNRTogTW92ZSBvdXQgdGhlIFBMQVRGT1JNIHNwZWNpZmljIHJ1
bGVzIGludG8gcGxhdGZvcm0gc3BlY2lmaWMgZmlsZXMuICovCi0KLS8qIC0tLS0tLS0tLSBBcHBs
ZSBJT1MgKGJ1dCBub3QgTUFDKSBwb3J0IC0tLS0tLS0tLSAqLwotI2lmIFBMQVRGT1JNKElPUykK
LQotI2lmICFkZWZpbmVkKEVOQUJMRV9BU1lOQ19TQ1JPTExJTkcpCi0jZGVmaW5lIEVOQUJMRV9B
U1lOQ19TQ1JPTExJTkcgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfQ09OVEVOVF9F
WFRFTlNJT05TKQotI2RlZmluZSBFTkFCTEVfQ09OVEVOVF9FWFRFTlNJT05TIDEKLSNlbmRpZgot
Ci0jaWYgIWRlZmluZWQoRU5BQkxFX0NPTlRFWFRfTUVOVVMpCi0jZGVmaW5lIEVOQUJMRV9DT05U
RVhUX01FTlVTIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0NVUlNPUl9TVVBQT1JU
KQotI2RlZmluZSBFTkFCTEVfQ1VSU09SX1NVUFBPUlQgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5l
ZChFTkFCTEVfRFJBR19TVVBQT1JUKQotI2RlZmluZSBFTkFCTEVfRFJBR19TVVBQT1JUIDAKLSNl
bmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0dFT0xPQ0FUSU9OKQotI2RlZmluZSBFTkFCTEVf
R0VPTE9DQVRJT04gMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSNkZWZpbmUgRU5BQkxFX0lOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfTEVUVEVSUFJFU1Mp
Ci0jZGVmaW5lIEVOQUJMRV9MRVRURVJQUkVTUyAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVO
QUJMRV9BVVRPQ09SUkVDVCkKLSNkZWZpbmUgRU5BQkxFX0FVVE9DT1JSRUNUIDEKLSNlbmRpZgot
Ci0jaWYgIWRlZmluZWQoRU5BQkxFX0FVVE9DQVBJVEFMSVpFKQotI2RlZmluZSBFTkFCTEVfQVVU
T0NBUElUQUxJWkUgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfSU9TX0dFU1RVUkVf
RVZFTlRTKSAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2RlZmluZSBFTkFCTEVfSU9TX0dF
U1RVUkVfRVZFTlRTIDEKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX1RFWFRfQVVUT1NJ
WklORykKLSNkZWZpbmUgRU5BQkxFX1RFWFRfQVVUT1NJWklORyAxCi0jZW5kaWYKLQotI2lmICFk
ZWZpbmVkKEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTKSAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RL
KQotI2RlZmluZSBFTkFCTEVfSU9TX1RPVUNIX0VWRU5UUyAxCi0jZW5kaWYKLQotI2lmICFkZWZp
bmVkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKQotI2RlZmluZSBFTkFCTEVfTUVURVJfRUxFTUVOVCAw
Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2Rl
ZmluZSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVk
KEVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMpCi0jZGVmaW5lIEVOQUJMRV9PUklFTlRBVElPTl9F
VkVOVFMgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfUE9JTlRFUl9MT0NLKQotI2Rl
ZmluZSBFTkFCTEVfUE9JTlRFUl9MT0NLIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxF
X1JFTU9URV9JTlNQRUNUT1IpCi0jZGVmaW5lIEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SIDEKLSNl
bmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX1JFU1BFQ1RfRVhJRl9PUklFTlRBVElPTikKLSNk
ZWZpbmUgRU5BQkxFX1JFU1BFQ1RfRVhJRl9PUklFTlRBVElPTiAxCi0jZW5kaWYKLQotI2lmICFk
ZWZpbmVkKEVOQUJMRV9URVhUX0NBUkVUKQotI2RlZmluZSBFTkFCTEVfVEVYVF9DQVJFVCAwCi0j
ZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9URVhUX1NFTEVDVElPTikKLSNkZWZpbmUgRU5B
QkxFX1RFWFRfU0VMRUNUSU9OIDAKLSNlbmRpZgotCi0vKiBGSVhNRTogUmVtb3ZlIHRoZSBVU0Uo
QVBQTEVfSU5URVJOQUxfU0RLKSBjb25qdW5jdCBvbmNlIHdlIHN1cHBvcnQgdG91Y2ggZXZlbnRz
IHdoZW4gYnVpbGRpbmcgYWdhaW5zdAotdGhlIHB1YmxpYyBpT1MgU0RLLiBXZSB3aWxsIGFsc28g
bmVlZCB0byB1cGRhdGUgdGhlIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGZpbGVzLiAqLwotI2lm
ICFkZWZpbmVkKEVOQUJMRV9UT1VDSF9FVkVOVFMpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
Ci0jZGVmaW5lIEVOQUJMRV9UT1VDSF9FVkVOVFMgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChF
TkFCTEVfV0VCX0FSQ0hJVkUpCi0jZGVmaW5lIEVOQUJMRV9XRUJfQVJDSElWRSAxCi0jZW5kaWYK
LQotI2lmICFkZWZpbmVkKEVOQUJMRV9WSUVXX01PREVfQ1NTX01FRElBKQotI2RlZmluZSBFTkFC
TEVfVklFV19NT0RFX0NTU19NRURJQSAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9X
RUJBU1NFTUJMWSkKLSNkZWZpbmUgRU5BQkxFX1dFQkFTU0VNQkxZIChkZWZpbmVkKEVOQUJMRV9C
M19KSVQpICYmIEVOQUJMRV9CM19KSVQpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9X
RUJHTCkKLSNkZWZpbmUgRU5BQkxFX1dFQkdMIDEKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5B
QkxFX1BSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJU1RJQykKLSNkZWZpbmUgRU5BQkxF
X1BSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJU1RJQyAxCi0jZW5kaWYKLQotI2lmICFk
ZWZpbmVkKEVOQUJMRV9ET1dOTE9BRF9BVFRSSUJVVEUpCi0jZGVmaW5lIEVOQUJMRV9ET1dOTE9B
RF9BVFRSSUJVVEUgMAotI2VuZGlmCi0KLSNlbmRpZiAvKiBQTEFURk9STShJT1MpICovCi0KLS8q
IC0tLS0tLS0tLSBBcHBsZSBNQUMgcG9ydCAobm90IElPUykgLS0tLS0tLS0tICovCi0jaWYgUExB
VEZPUk0oTUFDKQotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0NPTlRFTlRfRVhURU5TSU9OUykKLSNk
ZWZpbmUgRU5BQkxFX0NPTlRFTlRfRVhURU5TSU9OUyAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVk
KEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkKLSNkZWZpbmUgRU5BQkxFX0RBU0hCT0FSRF9TVVBQ
T1JUIDEKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKQotI2Rl
ZmluZSBFTkFCTEVfRlVMTFNDUkVFTl9BUEkgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFC
TEVfUkVNT1RFX0lOU1BFQ1RPUikKLSNkZWZpbmUgRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IgMQot
I2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLSNkZWZpbmUgRU5BQkxFX0lOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMgMQot
I2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfU01PT1RIX1NDUk9MTElORykKLSNkZWZpbmUg
RU5BQkxFX1NNT09USF9TQ1JPTExJTkcgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVf
QVNZTkNfU0NST0xMSU5HKQotI2RlZmluZSBFTkFCTEVfQVNZTkNfU0NST0xMSU5HIDEKLSNlbmRp
ZgotCi0jaWYgRU5BQkxFKFZJREVPKQotI2lmICFkZWZpbmVkKEVOQUJMRV9WSURFT19UUkFDSykK
LSNkZWZpbmUgRU5BQkxFX1ZJREVPX1RSQUNLIDEKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiAhZGVm
aW5lZChFTkFCTEVfVklFV19NT0RFX0NTU19NRURJQSkKLSNkZWZpbmUgRU5BQkxFX1ZJRVdfTU9E
RV9DU1NfTUVESUEgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfV0VCQVNTRU1CTFkp
Ci0jZGVmaW5lIEVOQUJMRV9XRUJBU1NFTUJMWSAoZGVmaW5lZChFTkFCTEVfQjNfSklUKSAmJiBF
TkFCTEVfQjNfSklUKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfV0VCX0FSQ0hJVkUp
Ci0jZGVmaW5lIEVOQUJMRV9XRUJfQVJDSElWRSAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVO
QUJMRV9XRUJfQVVESU8pCi0jZGVmaW5lIEVOQUJMRV9XRUJfQVVESU8gMQotI2VuZGlmCi0KLSNp
ZiAhZGVmaW5lZChFTkFCTEVfQ1VSU09SX1ZJU0lCSUxJVFkpCi0jZGVmaW5lIEVOQUJMRV9DVVJT
T1JfVklTSUJJTElUWSAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9JTlBVVF9UWVBF
X0NPTE9SKQotI2RlZmluZSBFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUiAxCi0jZW5kaWYKLQotI2lm
ICFkZWZpbmVkKEVOQUJMRV9QUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCi0j
ZGVmaW5lIEVOQUJMRV9QUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMgMQotI2Vu
ZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfTUFDX0dFU1RVUkVfRVZFTlRTKSAmJiBVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKQotI2RlZmluZSBFTkFCTEVfTUFDX0dFU1RVUkVfRVZFTlRTIDEKLSNl
bmRpZgotCi0jZW5kaWYgLyogUExBVEZPUk0oTUFDKSAqLwotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0KLSNpZiAhZGVmaW5lZChFTkFCTEVfREFUQV9ERVRFQ1RJT04pCi0jZGVmaW5lIEVOQUJMRV9E
QVRBX0RFVEVDVElPTiAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9MRUdBQ1lfRU5D
UllQVEVEX01FRElBKQotI2RlZmluZSBFTkFCTEVfTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSAxCi0j
ZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9GSUxFX1JFUExBQ0VNRU5UKQotI2RlZmluZSBF
TkFCTEVfRklMRV9SRVBMQUNFTUVOVCAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9L
RVlCT0FSRF9LRVlfQVRUUklCVVRFKQotI2RlZmluZSBFTkFCTEVfS0VZQk9BUkRfS0VZX0FUVFJJ
QlVURSAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJ
QlVURSkKLSNkZWZpbmUgRU5BQkxFX0tFWUJPQVJEX0NPREVfQVRUUklCVVRFIDEKLSNlbmRpZgot
Ci0jZW5kaWYgLyogUExBVEZPUk0oQ09DT0EpICovCi0KLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0K
LSNpZiAhZGVmaW5lZChKU0NfT0JKQ19BUElfRU5BQkxFRCkKLSNkZWZpbmUgSlNDX09CSkNfQVBJ
X0VOQUJMRUQgMAotI2VuZGlmCi0KLSNlbmRpZiAvKiAhUExBVEZPUk0oQ09DT0EpICovCi0KLQot
LyogLS0tLS0tLS0tIEFwcGxlIFdpbmRvd3MgcG9ydCAtLS0tLS0tLS0gKi8KLSNpZiBQTEFURk9S
TShXSU4pICYmICFQTEFURk9STShXSU5fQ0FJUk8pCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfRlVM
TFNDUkVFTl9BUEkpCi0jZGVmaW5lIEVOQUJMRV9GVUxMU0NSRUVOX0FQSSAxCi0jZW5kaWYKLQot
I2lmICFkZWZpbmVkKEVOQUJMRV9XRUJfQVJDSElWRSkKLSNkZWZpbmUgRU5BQkxFX1dFQl9BUkNI
SVZFIDEKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX1dFQkdMKQotI2RlZmluZSBFTkFC
TEVfV0VCR0wgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfR0VPTE9DQVRJT04pCi0j
ZGVmaW5lIEVOQUJMRV9HRU9MT0NBVElPTiAxCi0jZW5kaWYKLQotI2VuZGlmIC8qIFBMQVRGT1JN
KFdJTikgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykgKi8KLQotLyogLS0tLS0tLS0tIFdpbmRvd3Mg
Q0FJUk8gcG9ydCAtLS0tLS0tLS0gKi8KLS8qIFBMQVRGT1JNKFdJTl9DQUlSTykgaXMgYSBzcGVj
aWFsaXphdGlvbiBvZiBQTEFURk9STShXSU4pLiAqLwotLyogUExBVEZPUk0oV0lOKSBpcyBhbHdh
eXMgZW5hYmxlZCB3aGVuIFBMQVRGT1JNKFdJTl9DQUlSTykgaXMgZW5hYmxlZC4gKi8KLSNpZiBQ
TEFURk9STShXSU5fQ0FJUk8pCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfV0VCX0FSQ0hJVkUpCi0j
ZGVmaW5lIEVOQUJMRV9XRUJfQVJDSElWRSAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJM
RV9WSUVXX01PREVfQ1NTX01FRElBKQotI2RlZmluZSBFTkFCTEVfVklFV19NT0RFX0NTU19NRURJ
QSAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9XRUJHTCkKLSNkZWZpbmUgRU5BQkxF
X1dFQkdMIDEKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0dFT0xPQ0FUSU9OKQotI2Rl
ZmluZSBFTkFCTEVfR0VPTE9DQVRJT04gMQotI2VuZGlmCi0KLSNlbmRpZiAvKiBQTEFURk9STShX
SU5fQ0FJUk8pICovCi0KLS8qIC0tLS0tLS0tLSBHdGsgcG9ydCAoVW5peCwgV2luZG93cywgTWFj
KSBhbmQgV1BFIC0tLS0tLS0tLSAqLwotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BF
KQotI2lmICFkZWZpbmVkKEVOQUJMRV9LRVlCT0FSRF9LRVlfQVRUUklCVVRFKQotI2RlZmluZSBF
TkFCTEVfS0VZQk9BUkRfS0VZX0FUVFJJQlVURSAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVO
QUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJQlVURSkKLSNkZWZpbmUgRU5BQkxFX0tFWUJPQVJEX0NP
REVfQVRUUklCVVRFIDEKLSNlbmRpZgotI2VuZGlmIC8qIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oV1BFKSAqLwotCi0vKiBFTkFCTEUgbWFjcm8gZGVmYXVsdHMgZm9yIFdlYkNvcmUgKi8KLS8q
IERvIG5vdCB1c2UgUExBVEZPUk0oKSB0ZXN0cyBpbiB0aGlzIHNlY3Rpb24gISAqLwotCi0jaWYg
IWRlZmluZWQoRU5BQkxFXzNEX1RSQU5TRk9STVMpCi0jZGVmaW5lIEVOQUJMRV8zRF9UUkFOU0ZP
Uk1TIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKLSNkZWZpbmUgRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyAwCi0jZW5kaWYKLQotI2lm
ICFkZWZpbmVkKEVOQUJMRV9BQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCi0jZGVmaW5l
IEVOQUJMRV9BQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcgMAotI2VuZGlmCi0KLSNpZiAh
ZGVmaW5lZChFTkFCTEVfQVBORykKLSNkZWZpbmUgRU5BQkxFX0FQTkcgMQotI2VuZGlmCi0KLSNp
ZiAhZGVmaW5lZChFTkFCTEVfQ0FOVkFTX1BBVEgpCi0jZGVmaW5lIEVOQUJMRV9DQU5WQVNfUEFU
SCAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9DQU5WQVNfUFJPWFkpCi0jZGVmaW5l
IEVOQUJMRV9DQU5WQVNfUFJPWFkgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfQ0hB
Tk5FTF9NRVNTQUdJTkcpCi0jZGVmaW5lIEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORyAxCi0jZW5k
aWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9DT05URU5UX0VYVEVOU0lPTlMpCi0jZGVmaW5lIEVO
QUJMRV9DT05URU5UX0VYVEVOU0lPTlMgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVf
Q09OVEVYVF9NRU5VUykKLSNkZWZpbmUgRU5BQkxFX0NPTlRFWFRfTUVOVVMgMQotI2VuZGlmCi0K
LSNpZiAhZGVmaW5lZChFTkFCTEVfQ1NTM19URVhUKQotI2RlZmluZSBFTkFCTEVfQ1NTM19URVhU
IDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVB
SykKLSNkZWZpbmUgRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVBSyAxCi0jZW5kaWYKLQot
I2lmICFkZWZpbmVkKEVOQUJMRV9DU1NfREVWSUNFX0FEQVBUQVRJT04pCi0jZGVmaW5lIEVOQUJM
RV9DU1NfREVWSUNFX0FEQVBUQVRJT04gMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVf
Q1NTX0NPTVBPU0lUSU5HKQotI2RlZmluZSBFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HIDAKLSNlbmRp
ZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikKLSNkZWZpbmUg
RU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTiAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVO
QUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikKLSNkZWZpbmUgRU5BQkxFX0NTU19JTUFHRV9SRVNP
TFVUSU9OIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0NVUlNPUl9TVVBQT1JUKQot
I2RlZmluZSBFTkFCTEVfQ1VSU09SX1NVUFBPUlQgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChF
TkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKQotI2RlZmluZSBFTkFCTEVfQ1VTVE9NX1NDSEVN
RV9IQU5ETEVSIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQ
T1JUKQotI2RlZmluZSBFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQgMAotI2VuZGlmCi0KLSNpZiAh
ZGVmaW5lZChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkKLSNkZWZpbmUgRU5BQkxFX0RBVEFMSVNU
X0VMRU1FTlQgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfREFUQV9UUkFOU0ZFUl9J
VEVNUykKLSNkZWZpbmUgRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMgMAotI2VuZGlmCi0KLSNp
ZiAhZGVmaW5lZChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKQotI2RlZmluZSBFTkFCTEVfREVW
SUNFX09SSUVOVEFUSU9OIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0RPV05MT0FE
X0FUVFJJQlVURSkKLSNkZWZpbmUgRU5BQkxFX0RPV05MT0FEX0FUVFJJQlVURSAxCi0jZW5kaWYK
LQotI2lmICFkZWZpbmVkKEVOQUJMRV9EUkFHX1NVUFBPUlQpCi0jZGVmaW5lIEVOQUJMRV9EUkFH
X1NVUFBPUlQgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfRU5DUllQVEVEX01FRElB
KQotI2RlZmluZSBFTkFCTEVfRU5DUllQVEVEX01FRElBIDAKLSNlbmRpZgotCi0jaWYgIWRlZmlu
ZWQoRU5BQkxFX0ZFVENIX0FQSSkKLSNkZWZpbmUgRU5BQkxFX0ZFVENIX0FQSSAxCi0jZW5kaWYK
LQotI2lmICFkZWZpbmVkKEVOQUJMRV9GSUxURVJTX0xFVkVMXzIpCi0jZGVmaW5lIEVOQUJMRV9G
SUxURVJTX0xFVkVMXzIgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfRlRQRElSKQot
I2RlZmluZSBFTkFCTEVfRlRQRElSIDEKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0ZV
TExTQ1JFRU5fQVBJKQotI2RlZmluZSBFTkFCTEVfRlVMTFNDUkVFTl9BUEkgMAotI2VuZGlmCi0K
LSNpZiAhZGVmaW5lZChFTkFCTEVfR0FNRVBBRCkKLSNkZWZpbmUgRU5BQkxFX0dBTUVQQUQgMAot
I2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfR0FNRVBBRF9ERVBSRUNBVEVEKQotI2RlZmlu
ZSBFTkFCTEVfR0FNRVBBRF9ERVBSRUNBVEVEIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5B
QkxFX0dFT0xPQ0FUSU9OKQotI2RlZmluZSBFTkFCTEVfR0VPTE9DQVRJT04gMAotI2VuZGlmCi0K
LSNpZiAhZGVmaW5lZChFTkFCTEVfSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotI2RlZmlu
ZSBFTkFCTEVfSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HIDAKLSNlbmRpZgotCi0jaWYgIWRl
ZmluZWQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpCi0jZGVmaW5lIEVOQUJMRV9JTkRFWEVEX0RB
VEFCQVNFIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0lOREVYRURfREFUQUJBU0Vf
SU5fV09SS0VSUykKLSNkZWZpbmUgRU5BQkxFX0lOREVYRURfREFUQUJBU0VfSU5fV09SS0VSUyAw
Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKQotI2RlZmlu
ZSBFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUiAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJM
RV9JTlBVVF9UWVBFX0RBVEUpCi0jZGVmaW5lIEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUgMAotI2Vu
ZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRF
KQotI2RlZmluZSBFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFIDAKLSNlbmRp
ZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkKLSNkZWZp
bmUgRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCAwCi0jZW5kaWYKLQotI2lmICFkZWZp
bmVkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKQotI2RlZmluZSBFTkFCTEVfSU5QVVRfVFlQRV9N
T05USCAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpCi0j
ZGVmaW5lIEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChF
TkFCTEVfSU5QVVRfVFlQRV9XRUVLKQotI2RlZmluZSBFTkFCTEVfSU5QVVRfVFlQRV9XRUVLIDAK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKElOUFVUX1RZUEVfREFURSkgfHwgRU5BQkxFKElOUFVUX1RZ
UEVfREFURVRJTUVfSU5DT01QTEVURSkgfHwgRU5BQkxFKElOUFVUX1RZUEVfREFURVRJTUVMT0NB
TCkgfHwgRU5BQkxFKElOUFVUX1RZUEVfTU9OVEgpIHx8IEVOQUJMRShJTlBVVF9UWVBFX1RJTUUp
IHx8IEVOQUJMRShJTlBVVF9UWVBFX1dFRUspCi0jaWYgIWRlZmluZWQoRU5BQkxFX0RBVEVfQU5E
X1RJTUVfSU5QVVRfVFlQRVMpCi0jZGVmaW5lIEVOQUJMRV9EQVRFX0FORF9USU1FX0lOUFVUX1RZ
UEVTIDEKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSNkZWZpbmUgRU5BQkxFX0lOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfSU5UTCkKLSNkZWZp
bmUgRU5BQkxFX0lOVEwgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfTEVHQUNZX0NT
U19WRU5ET1JfUFJFRklYRVMpCi0jZGVmaW5lIEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVG
SVhFUyAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9MRUdBQ1lfVkVORE9SX1BSRUZJ
WEVTKQotI2RlZmluZSBFTkFCTEVfTEVHQUNZX1ZFTkRPUl9QUkVGSVhFUyAwCi0jZW5kaWYKLQot
I2lmICFkZWZpbmVkKEVOQUJMRV9MRVRURVJQUkVTUykKLSNkZWZpbmUgRU5BQkxFX0xFVFRFUlBS
RVNTIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpCi0jZGVm
aW5lIEVOQUJMRV9MSU5LX1BSRUZFVENIIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxF
X01BVEhNTCkKLSNkZWZpbmUgRU5BQkxFX01BVEhNTCAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVk
KEVOQUJMRV9NRURJQV9DQVBUVVJFKQotI2RlZmluZSBFTkFCTEVfTUVESUFfQ0FQVFVSRSAwCi0j
ZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9NRURJQV9DT05UUk9MU19TQ1JJUFQpCi0jZGVm
aW5lIEVOQUJMRV9NRURJQV9DT05UUk9MU19TQ1JJUFQgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5l
ZChFTkFCTEVfTUVESUFfU09VUkNFKQotI2RlZmluZSBFTkFCTEVfTUVESUFfU09VUkNFIDAKLSNl
bmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpCi0jZGVmaW5lIEVO
QUJMRV9NRURJQV9TVEFUSVNUSUNTIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX01F
RElBX1NUUkVBTSkKLSNkZWZpbmUgRU5BQkxFX01FRElBX1NUUkVBTSAwCi0jZW5kaWYKLQotI2lm
ICFkZWZpbmVkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKQotI2RlZmluZSBFTkFCTEVfTUVURVJfRUxF
TUVOVCAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9NSFRNTCkKLSNkZWZpbmUgRU5B
QkxFX01IVE1MIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX01PVVNFX0NVUlNPUl9T
Q0FMRSkKLSNkZWZpbmUgRU5BQkxFX01PVVNFX0NVUlNPUl9TQ0FMRSAwCi0jZW5kaWYKLQotI2lm
ICFkZWZpbmVkKEVOQUJMRV9NT1VTRV9GT1JDRV9FVkVOVFMpCi0jZGVmaW5lIEVOQUJMRV9NT1VT
RV9GT1JDRV9FVkVOVFMgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfTkVUU0NBUEVf
UExVR0lOX0FQSSkKLSNkZWZpbmUgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkgMQotI2VuZGlm
Ci0KLSNpZiAhZGVmaW5lZChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQot
I2RlZmluZSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFIDAKLSNlbmRpZgot
Ci0jaWYgIWRlZmluZWQoRU5BQkxFX05PVElGSUNBVElPTlMpCi0jZGVmaW5lIEVOQUJMRV9OT1RJ
RklDQVRJT05TIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX09GRlNDUkVFTl9DQU5W
QVMpCi0jZGVmaW5lIEVOQUJMRV9PRkZTQ1JFRU5fQ0FOVkFTIDAKLSNlbmRpZgotCi0jaWYgIWRl
ZmluZWQoRU5BQkxFX09QRU5UWVBFX1ZFUlRJQ0FMKQotI2RlZmluZSBFTkFCTEVfT1BFTlRZUEVf
VkVSVElDQUwgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfT1JJRU5UQVRJT05fRVZF
TlRTKQotI2RlZmluZSBFTkFCTEVfT1JJRU5UQVRJT05fRVZFTlRTIDAKLSNlbmRpZgotCi0jaWYg
T1MoV0lORE9XUykKLSNpZiAhZGVmaW5lZChFTkFCTEVfUEFOX1NDUk9MTElORykKLSNkZWZpbmUg
RU5BQkxFX1BBTl9TQ1JPTExJTkcgMQotI2VuZGlmCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVO
QUJMRV9QT0lOVEVSX0xPQ0spCi0jZGVmaW5lIEVOQUJMRV9QT0lOVEVSX0xPQ0sgMQotI2VuZGlm
Ci0KLSNpZiAhZGVmaW5lZChFTkFCTEVfUFJPWElNSVRZX0VWRU5UUykKLSNkZWZpbmUgRU5BQkxF
X1BST1hJTUlUWV9FVkVOVFMgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfUVVPVEEp
Ci0jZGVmaW5lIEVOQUJMRV9RVU9UQSAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9S
RU1PVEVfSU5TUEVDVE9SKQotI2RlZmluZSBFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUiAwCi0jZW5k
aWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9SRVFVRVNUX0FVVE9DT01QTEVURSkKLSNkZWZpbmUg
RU5BQkxFX1JFUVVFU1RfQVVUT0NPTVBMRVRFIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5B
QkxFX1JVQkJFUl9CQU5ESU5HKQotI2RlZmluZSBFTkFCTEVfUlVCQkVSX0JBTkRJTkcgMAotI2Vu
ZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfU01PT1RIX1NDUk9MTElORykKLSNkZWZpbmUgRU5B
QkxFX1NNT09USF9TQ1JPTExJTkcgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfU1BF
RUNIX1NZTlRIRVNJUykKLSNkZWZpbmUgRU5BQkxFX1NQRUVDSF9TWU5USEVTSVMgMAotI2VuZGlm
Ci0KLSNpZiAhZGVmaW5lZChFTkFCTEVfU1BFTExDSEVDSykKLSNkZWZpbmUgRU5BQkxFX1NQRUxM
Q0hFQ0sgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfU1RSRUFNU19BUEkpCi0jZGVm
aW5lIEVOQUJMRV9TVFJFQU1TX0FQSSAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9T
VkdfRk9OVFMpCi0jZGVmaW5lIEVOQUJMRV9TVkdfRk9OVFMgMQotI2VuZGlmCi0KLSNpZiAhZGVm
aW5lZChFTkFCTEVfVEVYVF9DQVJFVCkKLSNkZWZpbmUgRU5BQkxFX1RFWFRfQ0FSRVQgMQotI2Vu
ZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfVEVYVF9TRUxFQ1RJT04pCi0jZGVmaW5lIEVOQUJM
RV9URVhUX1NFTEVDVElPTiAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9BU1lOQ19T
Q1JPTExJTkcpCi0jZGVmaW5lIEVOQUJMRV9BU1lOQ19TQ1JPTExJTkcgMAotI2VuZGlmCi0KLSNp
ZiAhZGVmaW5lZChFTkFCTEVfVE9VQ0hfRVZFTlRTKQotI2RlZmluZSBFTkFCTEVfVE9VQ0hfRVZF
TlRTIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORykK
LSNkZWZpbmUgRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORyAwCi0jZW5kaWYKLQotI2lmICFkZWZp
bmVkKEVOQUJMRV9WSURFTykKLSNkZWZpbmUgRU5BQkxFX1ZJREVPIDAKLSNlbmRpZgotCi0jaWYg
IWRlZmluZWQoRU5BQkxFX1ZJREVPX1RSQUNLKQotI2RlZmluZSBFTkFCTEVfVklERU9fVFJBQ0sg
MAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfREFUQUNVRV9WQUxVRSkKLSNkZWZpbmUg
RU5BQkxFX0RBVEFDVUVfVkFMVUUgMAotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfVklF
V19NT0RFX0NTU19NRURJQSkKLSNkZWZpbmUgRU5BQkxFX1ZJRVdfTU9ERV9DU1NfTUVESUEgMQot
I2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfV0VCR0wpCi0jZGVmaW5lIEVOQUJMRV9XRUJH
TCAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9HUkFQSElDU19DT05URVhUX0dMKQot
I2RlZmluZSBFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF9HTCBFTkFCTEVfV0VCR0wKLSNlbmRpZgot
Ci0jaWYgIWRlZmluZWQoRU5BQkxFX1dFQl9BTklNQVRJT05TKQotI2RlZmluZSBFTkFCTEVfV0VC
X0FOSU1BVElPTlMgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfV0VCX0FSQ0hJVkUp
Ci0jZGVmaW5lIEVOQUJMRV9XRUJfQVJDSElWRSAwCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVO
QUJMRV9XRUJfQVVESU8pCi0jZGVmaW5lIEVOQUJMRV9XRUJfQVVESU8gMAotI2VuZGlmCi0KLSNp
ZiAhZGVmaW5lZChFTkFCTEVfV0VCX1NPQ0tFVFMpCi0jZGVmaW5lIEVOQUJMRV9XRUJfU09DS0VU
UyAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9YU0xUKQotI2RlZmluZSBFTkFCTEVf
WFNMVCAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9LRVlCT0FSRF9LRVlfQVRUUklC
VVRFKQotI2RlZmluZSBFTkFCTEVfS0VZQk9BUkRfS0VZX0FUVFJJQlVURSAwCi0jZW5kaWYKLQot
I2lmICFkZWZpbmVkKEVOQUJMRV9LRVlCT0FSRF9DT0RFX0FUVFJJQlVURSkKLSNkZWZpbmUgRU5B
QkxFX0tFWUJPQVJEX0NPREVfQVRUUklCVVRFIDAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoRU5B
QkxFX0RBVEFfSU5URVJBQ1RJT04pCi0jZGVmaW5lIEVOQUJMRV9EQVRBX0lOVEVSQUNUSU9OIDAK
LSNlbmRpZgotCi0vKiBBc3NlcnRzLCBpbnZhcmlhbnRzIGZvciBtYWNybyBkZWZpbml0aW9ucyAq
LwotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKSAmJiAhRU5BQkxFKFZJREVPKQotI2Vycm9yICJF
TkFCTEUoVklERU9fVFJBQ0spIHJlcXVpcmVzIEVOQUJMRShWSURFTykiCi0jZW5kaWYKLQotI2lm
IEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpICYmICFFTkFCTEUoVklERU8pCi0jZXJyb3Ig
IkVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpIHJlcXVpcmVzIEVOQUJMRShWSURFTykiCi0j
ZW5kaWYKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKSAmJiAh
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0jZXJyb3IgIkVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKSByZXF1aXJlcyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikiCi0jZW5k
aWYKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKSAmJiAhRU5BQkxFKFRPVUNIX0VWRU5U
UykKLSNlcnJvciAiRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpIHJlcXVpcmVzIEVOQUJMRShUT1VD
SF9FVkVOVFMpIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoV0VCR0wpICYmICFFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF9HTCkKLSNlcnJvciAiRU5BQkxFKFdFQkdMKSByZXF1aXJlcyBFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF9HTCkiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShXRUJHTDIpICYmICFFTkFC
TEUoV0VCR0wpCi0jZXJyb3IgIkVOQUJMRShXRUJHTDIpIHJlcXVpcmVzIEVOQUJMRShXRUJHTCki
Ci0jZW5kaWYKLQotI2VuZGlmIC8qIFdURl9GZWF0dXJlRGVmaW5lc19oICovCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRmlsZVByaW50U3RyZWFtLmNwcCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9GaWxlUHJpbnRTdHJlYW0uY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODcxNGVjYjZmZDg2ZTNlYmYwODE1YWNlNTJm
YjNhNzg5MTMxNWU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9GaWxlUHJpbnRTdHJlYW0uY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmls
ZVByaW50U3RyZWFtLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotCi1GaWxlUHJpbnRTdHJlYW06OkZp
bGVQcmludFN0cmVhbShGSUxFKiBmaWxlLCBBZG9wdGlvbk1vZGUgYWRvcHRpb25Nb2RlKQotICAg
IDogbV9maWxlKGZpbGUpCi0gICAgLCBtX2Fkb3B0aW9uTW9kZShhZG9wdGlvbk1vZGUpCi17Ci19
Ci0KLUZpbGVQcmludFN0cmVhbTo6fkZpbGVQcmludFN0cmVhbSgpCi17Ci0gICAgaWYgKG1fYWRv
cHRpb25Nb2RlID09IEJvcnJvdykKLSAgICAgICAgcmV0dXJuOwotICAgIGZjbG9zZShtX2ZpbGUp
OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8RmlsZVByaW50U3RyZWFtPiBGaWxlUHJpbnRTdHJlYW06
Om9wZW4oY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IGNoYXIqIG1vZGUpCi17Ci0gICAgRklM
RSogZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCBtb2RlKTsKLSAgICBpZiAoIWZpbGUpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RmlsZVByaW50
U3RyZWFtPihmaWxlKTsKLX0KLQotdm9pZCBGaWxlUHJpbnRTdHJlYW06OnZwcmludGYoY29uc3Qg
Y2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ0xpc3QpCi17Ci0gICAgdmZwcmludGYobV9maWxlLCBm
b3JtYXQsIGFyZ0xpc3QpOwotfQotCi12b2lkIEZpbGVQcmludFN0cmVhbTo6Zmx1c2goKQotewot
ICAgIGZmbHVzaChtX2ZpbGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0ZpbGVQcmludFN0cmVhbS5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0ZpbGVQcmludFN0cmVhbS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjgyMjIxNzI3YjE4ZGFkYTNmMTk3Yzk4ZGM3ZTRh
ZDc4ZjViNmMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9GaWxlUHJpbnRTdHJlYW0uaAorKysg
L2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBGaWxlUHJpbnRTdHJlYW1faAotI2RlZmluZSBGaWxl
UHJpbnRTdHJlYW1faAotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEZpbGVQcmludFN0cmVhbSA6IHB1
YmxpYyBQcmludFN0cmVhbSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBBZG9wdGlvbk1vZGUgewotICAg
ICAgICBBZG9wdCwKLSAgICAgICAgQm9ycm93Ci0gICAgfTsKLSAgICAKLSAgICBGaWxlUHJpbnRT
dHJlYW0oRklMRSosIEFkb3B0aW9uTW9kZSA9IEFkb3B0KTsKLSAgICB2aXJ0dWFsIH5GaWxlUHJp
bnRTdHJlYW0oKTsKLSAgICAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxGaWxlUHJpbnRTdHJlYW0+IG9wZW4oY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0
IGNoYXIqIG1vZGUpOwotICAgIAotICAgIEZJTEUqIGZpbGUoKSB7IHJldHVybiBtX2ZpbGU7IH0K
LSAgICAKLSAgICB2b2lkIHZwcmludGYoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0KSBvdmVy
cmlkZSBXVEZfQVRUUklCVVRFX1BSSU5URigyLCAwKTsKLSAgICB2b2lkIGZsdXNoKCkgb3ZlcnJp
ZGU7Ci0KLXByaXZhdGU6Ci0gICAgRklMRSogbV9maWxlOwotICAgIEFkb3B0aW9uTW9kZSBtX2Fk
b3B0aW9uTW9kZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OkZpbGVQ
cmludFN0cmVhbTsKLQotI2VuZGlmIC8vIEZpbGVQcmludFN0cmVhbV9oCi0KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Gb3J3YXJkLmggYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRm9yd2FyZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2ZmJjYmVlYzcxMjAzYmRkMTZjMThhMjBjNjhhYzhlYTIwNTY2MjVmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi9Gb3J3YXJkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSwgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
PHN0ZGRlZi5oPgotCi1uYW1lc3BhY2Ugc3RkIHsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNz
IG9wdGlvbmFsOwotfQotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y2xhc3MgRnVuY3Rpb247Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBMYXp5TmV2ZXJEZXN0
cm95ZWQ7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBOZXZlckRlc3Ryb3llZDsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNsYXNzIE9wdGlvblNldDsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNs
YXNzIFJlZjsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFJlZlB0cjsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNsYXNzIFN0cmluZ0J1ZmZlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4g
Y2xhc3MgVmFyaWFudDsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+IGNsYXNzIFZl
Y3RvcjsKLQotY2xhc3MgQXRvbWljU3RyaW5nOwotY2xhc3MgQXRvbWljU3RyaW5nSW1wbDsKLWNs
YXNzIEJpbmFyeVNlbWFwaG9yZTsKLWNsYXNzIENTdHJpbmc7Ci1jbGFzcyBGdW5jdGlvbkRpc3Bh
dGNoZXI7Ci1jbGFzcyBPcmRpbmFsTnVtYmVyOwotY2xhc3MgUHJpbnRTdHJlYW07Ci1jbGFzcyBT
dHJpbmc7Ci1jbGFzcyBTdHJpbmdCdWlsZGVyOwotY2xhc3MgU3RyaW5nSW1wbDsKLWNsYXNzIFN0
cmluZ1ZpZXc7Ci1jbGFzcyBUZXh0UG9zaXRpb247Ci0KLX0KLQotdXNpbmcgV1RGOjpBdG9taWNT
dHJpbmc7Ci11c2luZyBXVEY6OkF0b21pY1N0cmluZ0ltcGw7Ci11c2luZyBXVEY6OkJpbmFyeVNl
bWFwaG9yZTsKLXVzaW5nIFdURjo6Q1N0cmluZzsKLXVzaW5nIFdURjo6RnVuY3Rpb247Ci11c2lu
ZyBXVEY6OkZ1bmN0aW9uRGlzcGF0Y2hlcjsKLXVzaW5nIFdURjo6TGF6eU5ldmVyRGVzdHJveWVk
OwotdXNpbmcgV1RGOjpOZXZlckRlc3Ryb3llZDsKLXVzaW5nIFdURjo6T3B0aW9uU2V0OwotdXNp
bmcgV1RGOjpPcmRpbmFsTnVtYmVyOwotdXNpbmcgV1RGOjpQcmludFN0cmVhbTsKLXVzaW5nIFdU
Rjo6UmVmOwotdXNpbmcgV1RGOjpSZWZQdHI7Ci11c2luZyBXVEY6OlN0cmluZzsKLXVzaW5nIFdU
Rjo6U3RyaW5nQnVmZmVyOwotdXNpbmcgV1RGOjpTdHJpbmdCdWlsZGVyOwotdXNpbmcgV1RGOjpT
dHJpbmdJbXBsOwotdXNpbmcgV1RGOjpTdHJpbmdWaWV3OwotdXNpbmcgV1RGOjpUZXh0UG9zaXRp
b247Ci11c2luZyBXVEY6OlZhcmlhbnQ7Ci11c2luZyBXVEY6OlZlY3RvcjsKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9GdW5jdGlvbi5oIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0Z1bmN0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGJkNWIwNWM0YTdlMjliMzUyODlmYWNiYzU3YTg4MDFkMGI0MGU5ZDQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL0Z1bmN0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0
eXBlbmFtZT4gY2xhc3MgRnVuY3Rpb247Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPdXQsIHR5cGVu
YW1lLi4uIEluPgotY2xhc3MgRnVuY3Rpb248T3V0KEluLi4uKT4gewotcHVibGljOgotICAgIEZ1
bmN0aW9uKCkgPSBkZWZhdWx0OwotICAgIEZ1bmN0aW9uKHN0ZDo6bnVsbHB0cl90KSB7IH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENhbGxhYmxlVHlwZSwgY2xhc3MgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjwhKHN0ZDo6aXNfcG9pbnRlcjxDYWxsYWJsZVR5cGU+Ojp2YWx1ZSAmJiBzdGQ6
OmlzX2Z1bmN0aW9uPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8Q2FsbGFibGVUeXBlPjo6
dHlwZT46OnZhbHVlKSAmJiBzdGQ6OmlzX3J2YWx1ZV9yZWZlcmVuY2U8Q2FsbGFibGVUeXBlJiY+
Ojp2YWx1ZT46OnR5cGU+Ci0gICAgRnVuY3Rpb24oQ2FsbGFibGVUeXBlJiYgY2FsbGFibGUpCi0g
ICAgICAgIDogbV9jYWxsYWJsZVdyYXBwZXIoc3RkOjptYWtlX3VuaXF1ZTxDYWxsYWJsZVdyYXBw
ZXI8Q2FsbGFibGVUeXBlPj4oV1RGTW92ZShjYWxsYWJsZSkpKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIGNsYXNzID0gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c3RkOjppc19wb2ludGVyPEZ1bmN0aW9uVHlwZT46OnZhbHVlICYmIHN0ZDo6aXNf
ZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGdW5jdGlvblR5cGU+Ojp0eXBl
Pjo6dmFsdWU+Ojp0eXBlPgotICAgIEZ1bmN0aW9uKEZ1bmN0aW9uVHlwZSBmKQotICAgICAgICA6
IG1fY2FsbGFibGVXcmFwcGVyKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbGFibGVXcmFwcGVyPEZ1bmN0
aW9uVHlwZT4+KFdURk1vdmUoZikpKQotICAgIHsKLSAgICB9Ci0KLSAgICBPdXQgb3BlcmF0b3Io
KShJbi4uLiBpbikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX2NhbGxhYmxlV3JhcHBlcikK
LSAgICAgICAgICAgIHJldHVybiBtX2NhbGxhYmxlV3JhcHBlci0+Y2FsbChzdGQ6OmZvcndhcmQ8
SW4+KGluKS4uLik7Ci0gICAgICAgIHJldHVybiBPdXQoKTsKLSAgICB9Ci0KLSAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2NhbGxhYmxlV3JhcHBlcjsgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGFibGVUeXBlLCBjbGFzcyA9IHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPCEoc3RkOjppc19wb2ludGVyPENhbGxhYmxlVHlwZT46OnZhbHVlICYmIHN0
ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxDYWxsYWJsZVR5cGU+
Ojp0eXBlPjo6dmFsdWUpICYmIHN0ZDo6aXNfcnZhbHVlX3JlZmVyZW5jZTxDYWxsYWJsZVR5cGUm
Jj46OnZhbHVlPjo6dHlwZT4KLSAgICBGdW5jdGlvbiYgb3BlcmF0b3I9KENhbGxhYmxlVHlwZSYm
IGNhbGxhYmxlKQotICAgIHsKLSAgICAgICAgbV9jYWxsYWJsZVdyYXBwZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENhbGxhYmxlV3JhcHBlcjxDYWxsYWJsZVR5cGU+PihXVEZNb3ZlKGNhbGxhYmxlKSk7
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdGlvblR5cGUsIGNsYXNzID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19wb2lu
dGVyPEZ1bmN0aW9uVHlwZT46OnZhbHVlICYmIHN0ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3Rk
OjpyZW1vdmVfcG9pbnRlcjxGdW5jdGlvblR5cGU+Ojp0eXBlPjo6dmFsdWU+Ojp0eXBlPgotICAg
IEZ1bmN0aW9uJiBvcGVyYXRvcj0oRnVuY3Rpb25UeXBlIGYpCi0gICAgewotICAgICAgICBtX2Nh
bGxhYmxlV3JhcHBlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbGFibGVXcmFwcGVyPEZ1bmN0aW9u
VHlwZT4+KFdURk1vdmUoZikpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAg
RnVuY3Rpb24mIG9wZXJhdG9yPShzdGQ6Om51bGxwdHJfdCkKLSAgICB7Ci0gICAgICAgIG1fY2Fs
bGFibGVXcmFwcGVyID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBjbGFzcyBDYWxsYWJsZVdyYXBwZXJCYXNlIHsKLSAgICAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5DYWxsYWJs
ZVdyYXBwZXJCYXNlKCkgeyB9Ci0KLSAgICAgICAgdmlydHVhbCBPdXQgY2FsbChJbi4uLikgPSAw
OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYWJsZVR5cGU+Ci0gICAgY2xh
c3MgQ2FsbGFibGVXcmFwcGVyIDogcHVibGljIENhbGxhYmxlV3JhcHBlckJhc2UgewotICAgIHB1
YmxpYzoKLSAgICAgICAgZXhwbGljaXQgQ2FsbGFibGVXcmFwcGVyKENhbGxhYmxlVHlwZSYmIGNh
bGxhYmxlKQotICAgICAgICAgICAgOiBtX2NhbGxhYmxlKFdURk1vdmUoY2FsbGFibGUpKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBDYWxsYWJsZVdyYXBwZXIoY29uc3QgQ2FsbGFi
bGVXcmFwcGVyJikgPSBkZWxldGU7Ci0gICAgICAgIENhbGxhYmxlV3JhcHBlciYgb3BlcmF0b3I9
KGNvbnN0IENhbGxhYmxlV3JhcHBlciYpID0gZGVsZXRlOwotCi0gICAgICAgIE91dCBjYWxsKElu
Li4uIGluKSBmaW5hbCB7IHJldHVybiBtX2NhbGxhYmxlKHN0ZDo6Zm9yd2FyZDxJbj4oaW4pLi4u
KTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQ2FsbGFibGVUeXBlIG1fY2FsbGFibGU7Ci0g
ICAgfTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsYWJsZVdyYXBwZXJCYXNlPiBtX2NhbGxh
YmxlV3JhcHBlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OkZ1bmN0
aW9uOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0Z1bmN0
aW9uRGlzcGF0Y2hlci5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRnVu
Y3Rpb25EaXNwYXRjaGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUwYTFk
ZWMzY2ZmOTE4MWE0ZmJmOTE1NTI3MWMxM2M1Y2ExZmU5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93
dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnVuY3Rpb25EaXNw
YXRjaGVyLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotCi1GdW5jdGlvbkRpc3BhdGNoZXI6OkZ1bmN0
aW9uRGlzcGF0Y2hlcigpCi17Ci19Ci0KLUZ1bmN0aW9uRGlzcGF0Y2hlcjo6fkZ1bmN0aW9uRGlz
cGF0Y2hlcigpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTBjN2JjZmYwODE3N2RiMTFjYmRlMmY2OTQyYWMyNGVj
ZDI0YTUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9GdW5jdGlvbkRpc3BhdGNoZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZ1bmN0aW9u
RGlzcGF0Y2hlcl9oCi0jZGVmaW5lIEZ1bmN0aW9uRGlzcGF0Y2hlcl9oCi0KLSNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQot
bmFtZXNwYWNlIFdURiB7Ci0KLS8vIEZ1bmN0aW9uRGlzcGF0Y2hlciBpcyBhbiBhYnN0cmFjdCBy
ZXByZXNlbnRhdGlvbiBvZiBzb21ldGhpbmcgdGhhdCBmdW5jdGlvbnMgY2FuIGJlCi0vLyBkaXNw
YXRjaGVkIHRvLiBUaGlzIGNhbiBmb3IgZXhhbXBsZSBiZSBhIHJ1biBsb29wIG9yIGEgd29yayBx
dWV1ZS4KLQotY2xhc3MgRnVuY3Rpb25EaXNwYXRjaGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEZ1bmN0aW9uRGlzcGF0Y2hlcj4gewotcHVibGljOgotICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2aXJ0dWFsIH5GdW5jdGlvbkRpc3BhdGNoZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaChGdW5jdGlvbjx2b2lkICgpPiYmKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgRnVuY3Rpb25EaXNwYXRjaGVyKCk7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXVEYKLQotdXNpbmcgV1RGOjpGdW5jdGlvbkRpc3BhdGNoZXI7Ci0KLSNlbmRpZiAvLyBGdW5j
dGlvbkRpc3BhdGNoZXJfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL0dldFB0ci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0dldFB0
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODEwN2NiZTUyOWZmZmZmMWYxOGNk
YTA1ZDM0ZTg2YzFiZTU3ZTU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9HZXRQdHIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgV1RGX0dldFB0cl9oCi0jZGVmaW5lIFdU
Rl9HZXRQdHJfaAotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi1uYW1lc3BhY2UgV1RGIHsKLQotZW51
bSBIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlIHsgSGFzaFRhYmxlRGVsZXRlZFZhbHVlIH07Ci1l
bnVtIEhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlIHsgSGFzaFRhYmxlRW1wdHlWYWx1ZSB9OwotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0cihUKiBwKSB7IHJldHVybiBwOyB9
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgSXNTbWFydFB0ciB7Ci0gICAgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBi
b29sIGlzU21hcnRQdHI+Ci1zdHJ1Y3QgR2V0UHRySGVscGVyQmFzZTsKLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci1zdHJ1Y3QgR2V0UHRySGVscGVyQmFzZTxULCBmYWxzZSAvKiBpc1NtYXJ0UHRy
ICovPiB7Ci0gICAgdHlwZWRlZiBUKiBQdHJUeXBlOwotICAgIHN0YXRpYyBUKiBnZXRQdHIoVCYg
cCkgeyByZXR1cm4gc3RkOjphZGRyZXNzb2YocCk7IH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotc3RydWN0IEdldFB0ckhlbHBlckJhc2U8VCwgdHJ1ZSAvKiBpc1NtYXJ0UHRyICovPiB7
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBUOjpQdHJUeXBlIFB0clR5cGU7Ci0gICAgc3RhdGljIFB0
clR5cGUgZ2V0UHRyKGNvbnN0IFQmIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLX07Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IEdldFB0ckhlbHBlciA6IEdldFB0ckhlbHBlckJhc2U8
VCwgSXNTbWFydFB0cjxUPjo6dmFsdWU+IHsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
aW5saW5lIHR5cGVuYW1lIEdldFB0ckhlbHBlcjxUPjo6UHRyVHlwZSBnZXRQdHIoVCYgcCkKLXsK
LSAgICByZXR1cm4gR2V0UHRySGVscGVyPFQ+OjpnZXRQdHIocCk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotaW5saW5lIHR5cGVuYW1lIEdldFB0ckhlbHBlcjxUPjo6UHRyVHlwZSBnZXRQ
dHIoY29uc3QgVCYgcCkKLXsKLSAgICByZXR1cm4gR2V0UHRySGVscGVyPFQ+OjpnZXRQdHIocCk7
Ci19Ci0KLS8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBDKysgc3RhbmRhcmQgbGlicmFy
eSB0eXBlcy4KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIERlbGV0ZXI+IHN0cnVj
dCBJc1NtYXJ0UHRyPHN0ZDo6dW5pcXVlX3B0cjxULCBEZWxldGVyPj4gewotICAgIHN0YXRpYyBj
b25zdCBib29sIHZhbHVlID0gdHJ1ZTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBEZWxldGVyPgotc3RydWN0IEdldFB0ckhlbHBlcjxzdGQ6OnVuaXF1ZV9wdHI8VCwgRGVs
ZXRlcj4+IHsKLSAgICB0eXBlZGVmIFQqIFB0clR5cGU7Ci0gICAgc3RhdGljIFQqIGdldFB0cihj
b25zdCBzdGQ6OnVuaXF1ZV9wdHI8VCwgRGVsZXRlcj4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0K
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gV1RGX0dldFB0cl9oCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvSGFzaEZ1bmN0aW9ucy5o
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0hhc2hGdW5jdGlvbnMuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYwYTUxZjg5Nzg5N2VhOWNmM2ExZDI4NzNmZTQx
ZTkxZjIzZjkxOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvSGFzaEZ1bmN0aW9ucy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMjc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBXVEZf
SGFzaEZ1bmN0aW9uc19oCi0jZGVmaW5lIFdURl9IYXNoRnVuY3Rpb25zX2gKLQotI2luY2x1ZGUg
PHN0ZGludC5oPgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0gICAgdGVtcGxhdGU8c2l6ZV90IHNpemU+IHN0cnVj
dCBJbnRUeXBlczsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJbnRUeXBlczwxPiB7IHR5cGVkZWYg
aW50OF90IFNpZ25lZFR5cGU7IHR5cGVkZWYgdWludDhfdCBVbnNpZ25lZFR5cGU7IH07Ci0gICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgSW50VHlwZXM8Mj4geyB0eXBlZGVmIGludDE2X3QgU2lnbmVkVHlw
ZTsgdHlwZWRlZiB1aW50MTZfdCBVbnNpZ25lZFR5cGU7IH07Ci0gICAgdGVtcGxhdGU8PiBzdHJ1
Y3QgSW50VHlwZXM8ND4geyB0eXBlZGVmIGludDMyX3QgU2lnbmVkVHlwZTsgdHlwZWRlZiB1aW50
MzJfdCBVbnNpZ25lZFR5cGU7IH07Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSW50VHlwZXM8OD4g
eyB0eXBlZGVmIGludDY0X3QgU2lnbmVkVHlwZTsgdHlwZWRlZiB1aW50NjRfdCBVbnNpZ25lZFR5
cGU7IH07Ci0KLSAgICAvLyBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24KLQotICAgIC8vIFRob21hcyBX
YW5nJ3MgMzIgQml0IE1peCBGdW5jdGlvbjogaHR0cDovL3d3dy5jcmlzLmNvbS9+VHR3YW5nL3Rl
Y2gvaW50aGFzaC5odG0KLSAgICBpbmxpbmUgdW5zaWduZWQgaW50SGFzaCh1aW50OF90IGtleTgp
Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBrZXkgPSBrZXk4OwotICAgICAgICBrZXkgKz0gfihr
ZXkgPDwgMTUpOwotICAgICAgICBrZXkgXj0gKGtleSA+PiAxMCk7Ci0gICAgICAgIGtleSArPSAo
a2V5IDw8IDMpOwotICAgICAgICBrZXkgXj0gKGtleSA+PiA2KTsKLSAgICAgICAga2V5ICs9IH4o
a2V5IDw8IDExKTsKLSAgICAgICAga2V5IF49IChrZXkgPj4gMTYpOwotICAgICAgICByZXR1cm4g
a2V5OwotICAgIH0KLQotICAgIC8vIFRob21hcyBXYW5nJ3MgMzIgQml0IE1peCBGdW5jdGlvbjog
aHR0cDovL3d3dy5jcmlzLmNvbS9+VHR3YW5nL3RlY2gvaW50aGFzaC5odG0KLSAgICBpbmxpbmUg
dW5zaWduZWQgaW50SGFzaCh1aW50MTZfdCBrZXkxNikKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVk
IGtleSA9IGtleTE2OwotICAgICAgICBrZXkgKz0gfihrZXkgPDwgMTUpOwotICAgICAgICBrZXkg
Xj0gKGtleSA+PiAxMCk7Ci0gICAgICAgIGtleSArPSAoa2V5IDw8IDMpOwotICAgICAgICBrZXkg
Xj0gKGtleSA+PiA2KTsKLSAgICAgICAga2V5ICs9IH4oa2V5IDw8IDExKTsKLSAgICAgICAga2V5
IF49IChrZXkgPj4gMTYpOwotICAgICAgICByZXR1cm4ga2V5OwotICAgIH0KLQotICAgIC8vIFRo
b21hcyBXYW5nJ3MgMzIgQml0IE1peCBGdW5jdGlvbjogaHR0cDovL3d3dy5jcmlzLmNvbS9+VHR3
YW5nL3RlY2gvaW50aGFzaC5odG0KLSAgICBpbmxpbmUgdW5zaWduZWQgaW50SGFzaCh1aW50MzJf
dCBrZXkpIAotICAgIHsKLSAgICAgICAga2V5ICs9IH4oa2V5IDw8IDE1KTsKLSAgICAgICAga2V5
IF49IChrZXkgPj4gMTApOwotICAgICAgICBrZXkgKz0gKGtleSA8PCAzKTsKLSAgICAgICAga2V5
IF49IChrZXkgPj4gNik7Ci0gICAgICAgIGtleSArPSB+KGtleSA8PCAxMSk7Ci0gICAgICAgIGtl
eSBePSAoa2V5ID4+IDE2KTsKLSAgICAgICAgcmV0dXJuIGtleTsKLSAgICB9Ci0gICAgCi0gICAg
Ly8gVGhvbWFzIFdhbmcncyA2NCBiaXQgTWl4IEZ1bmN0aW9uOiBodHRwOi8vd3d3LmNyaXMuY29t
L35UdHdhbmcvdGVjaC9pbnRoYXNoLmh0bQotICAgIGlubGluZSB1bnNpZ25lZCBpbnRIYXNoKHVp
bnQ2NF90IGtleSkKLSAgICB7Ci0gICAgICAgIGtleSArPSB+KGtleSA8PCAzMik7Ci0gICAgICAg
IGtleSBePSAoa2V5ID4+IDIyKTsKLSAgICAgICAga2V5ICs9IH4oa2V5IDw8IDEzKTsKLSAgICAg
ICAga2V5IF49IChrZXkgPj4gOCk7Ci0gICAgICAgIGtleSArPSAoa2V5IDw8IDMpOwotICAgICAg
ICBrZXkgXj0gKGtleSA+PiAxNSk7Ci0gICAgICAgIGtleSArPSB+KGtleSA8PCAyNyk7Ci0gICAg
ICAgIGtleSBePSAoa2V5ID4+IDMxKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihrZXkpOwotICAgIH0KLQotICAgIC8vIENvbXBvdW5kIGludGVnZXIgaGFzaCBtZXRob2Q6
IGh0dHA6Ly9vcGVuZGF0YXN0cnVjdHVyZXMub3JnL3ZlcnNpb25zL2VkaXRpb24tMC4xZC9vZHMt
amF2YS9ub2RlMzMuaHRtbCNTRUNUSU9OMDA4MzIwMDAwMDAwMDAwMDAwMDAKLSAgICBpbmxpbmUg
dW5zaWduZWQgcGFpckludEhhc2godW5zaWduZWQga2V5MSwgdW5zaWduZWQga2V5MikKLSAgICB7
Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0UmFuZG9tMSA9IDI3Nzk1MTIyNTsgLy8gQSByYW5kb20g
MzItYml0IHZhbHVlLgotICAgICAgICB1bnNpZ25lZCBzaG9ydFJhbmRvbTIgPSA5NTE4Nzk2Njsg
Ly8gQSByYW5kb20gMzItYml0IHZhbHVlLgotICAgICAgICB1aW50NjRfdCBsb25nUmFuZG9tID0g
MTkyNDg2NTgxNjU5NTI2MjJMTDsgLy8gQSByYW5kb20gNjQtYml0IHZhbHVlLgotCi0gICAgICAg
IHVpbnQ2NF90IHByb2R1Y3QgPSBsb25nUmFuZG9tICogKHNob3J0UmFuZG9tMSAqIGtleTEgKyBz
aG9ydFJhbmRvbTIgKiBrZXkyKTsKLSAgICAgICAgdW5zaWduZWQgaGlnaEJpdHMgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocHJvZHVjdCA+PiAoc2l6ZW9mKHVpbnQ2NF90KSAtIHNpemVvZih1bnNp
Z25lZCkpKTsKLSAgICAgICAgcmV0dXJuIGhpZ2hCaXRzOwotICAgIH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBJbnRIYXNoIHsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goVCBrZXkpIHsgcmV0dXJuIGludEhhc2goc3RhdGljX2Nhc3Q8dHlwZW5hbWUgSW50VHlwZXM8
c2l6ZW9mKFQpPjo6VW5zaWduZWRUeXBlPihrZXkpKTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBl
cXVhbChUIGEsIFQgYikgeyByZXR1cm4gYSA9PSBiOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZsb2F0SGFzaCB7Ci0gICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgSW50VHlwZXM8c2l6ZW9mKFQpPjo6VW5zaWduZWRUeXBlIEJpdHM7Ci0gICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKFQga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gaW50SGFzaChiaXR3aXNlX2Nhc3Q8Qml0cz4oa2V5KSk7Ci0gICAgICAgIH0KLSAgICAgICAg
c3RhdGljIGJvb2wgZXF1YWwoVCBhLCBUIGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8Qml0cz4oYSkgPT0gYml0d2lzZV9jYXN0PEJpdHM+KGIpOwotICAgICAg
ICB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gdHJ1ZTsKLSAgICB9OwotCi0gICAgLy8gcG9pbnRlciBpZGVudGl0eSBoYXNoIGZ1bmN0
aW9uCi0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIGlzU21hcnRQb2ludGVyPiAKLSAg
ICBzdHJ1Y3QgUHRySGFzaEJhc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBz
dHJ1Y3QgUHRySGFzaEJhc2U8VCwgZmFsc2UgLyogaXNTbWFydFB0ciAqLz4gewotICAgICAgICB0
eXBlZGVmIFQgUHRyVHlwZTsgCi0KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goUHRyVHlw
ZSBrZXkpIHsgcmV0dXJuIEludEhhc2g8dWludHB0cl90Pjo6aGFzaChyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oa2V5KSk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoUHRyVHlwZSBh
LCBQdHJUeXBlIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQotICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBQdHJIYXNoQmFzZTxULCB0cnVlIC8qIGlz
U21hcnRQdHIgKi8+IHsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZXRQdHJIZWxwZXI8VD46
OlB0clR5cGUgUHRyVHlwZTsgCi0KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goUHRyVHlw
ZSBrZXkpIHsgcmV0dXJuIEludEhhc2g8dWludHB0cl90Pjo6aGFzaChyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oa2V5KSk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoUHRyVHlwZSBh
LCBQdHJUeXBlIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQotICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Ci0KLSAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgVCYga2V5KSB7IHJldHVybiBoYXNoKGdldFB0cihrZXkpKTsg
fQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBUJiBiKSB7IHJl
dHVybiBnZXRQdHIoYSkgPT0gZ2V0UHRyKGIpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFs
KFB0clR5cGUgYSwgY29uc3QgVCYgYikgeyByZXR1cm4gYSA9PSBnZXRQdHIoYik7IH0KLSAgICAg
ICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVCYgYSwgUHRyVHlwZSBiKSB7IHJldHVybiBnZXRQ
dHIoYSkgPT0gYjsgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
UHRySGFzaCA6IFB0ckhhc2hCYXNlPFQsIElzU21hcnRQdHI8VD46OnZhbHVlPiB7Ci0gICAgfTsK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBQdHJIYXNoPFJlZjxQPj4gOiBQdHJI
YXNoQmFzZTxSZWY8UD4sIElzU21hcnRQdHI8UmVmPFA+Pjo6dmFsdWU+IHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKLSAg
ICB9OwotCi0gICAgLy8gZGVmYXVsdCBoYXNoIGZ1bmN0aW9uIGZvciBlYWNoIHR5cGUKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCBQYWlySGFzaCB7Ci0gICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IHN0ZDo6cGFpcjxULCBVPiYgcCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIHBhaXJJbnRIYXNoKERlZmF1bHRIYXNoPFQ+OjpIYXNoOjpoYXNoKHAu
Zmlyc3QpLCBEZWZhdWx0SGFzaDxVPjo6SGFzaDo6aGFzaChwLnNlY29uZCkpOwotICAgICAgICB9
Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IHN0ZDo6cGFpcjxULCBVPiYgYSwgY29u
c3Qgc3RkOjpwYWlyPFQsIFU+JiBiKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRGVm
YXVsdEhhc2g8VD46Okhhc2g6OmVxdWFsKGEuZmlyc3QsIGIuZmlyc3QpICYmIERlZmF1bHRIYXNo
PFU+OjpIYXNoOjplcXVhbChhLnNlY29uZCwgYi5zZWNvbmQpOwotICAgICAgICB9Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gRGVmYXVs
dEhhc2g8VD46Okhhc2g6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkICYmIERlZmF1bHRI
YXNoPFU+OjpIYXNoOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZDsKLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RydWN0IEludFBhaXJIYXNoIHsK
LSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qgc3RkOjpwYWlyPFQsIFU+JiBwKSB7
IHJldHVybiBwYWlySW50SGFzaChwLmZpcnN0LCBwLnNlY29uZCk7IH0KLSAgICAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3Qgc3RkOjpwYWlyPFQsIFU+JiBhLCBjb25zdCBzdGQ6OnBhaXI8VCwg
VT4mIGIpIHsgcmV0dXJuIFBhaXJIYXNoPFQsIFQ+OjplcXVhbChhLCBiKTsgfQotICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IFBhaXJIYXNo
PFQsIFU+OjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZDsKLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+Ci0gICAgc3RydWN0IFR1cGxlSGFzaCB7Ci0gICAgICAg
IHRlbXBsYXRlPHNpemVfdCBJID0gMD4KLSAgICAgICAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPEkgPCBzaXplb2YuLi4oVHlwZXMpIC0gMSwgdW5zaWduZWQ+Ojp0eXBlIGhhc2goY29u
c3Qgc3RkOjp0dXBsZTxUeXBlcy4uLj4mIHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVzaW5n
IEl0aFR1cGxlRWxlbWVudFR5cGUgPSB0eXBlbmFtZSBzdGQ6OnR1cGxlX2VsZW1lbnQ8SSwgdHlw
ZW5hbWUgc3RkOjp0dXBsZTxUeXBlcy4uLj4+Ojp0eXBlOwotICAgICAgICAgICAgcmV0dXJuIHBh
aXJJbnRIYXNoKERlZmF1bHRIYXNoPEl0aFR1cGxlRWxlbWVudFR5cGU+OjpIYXNoOjpoYXNoKHN0
ZDo6Z2V0PEk+KHQpKSwgaGFzaDxJICsgMT4odCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVt
cGxhdGU8c2l6ZV90IEkgPSAwPgotICAgICAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8SSA9PSBzaXplb2YuLi4oVHlwZXMpIC0gMSwgdW5zaWduZWQ+Ojp0eXBlIGhhc2goY29uc3Qg
c3RkOjp0dXBsZTxUeXBlcy4uLj4mIHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVzaW5nIEl0
aFR1cGxlRWxlbWVudFR5cGUgPSB0eXBlbmFtZSBzdGQ6OnR1cGxlX2VsZW1lbnQ8SSwgdHlwZW5h
bWUgc3RkOjp0dXBsZTxUeXBlcy4uLj4+Ojp0eXBlOwotICAgICAgICAgICAgcmV0dXJuIERlZmF1
bHRIYXNoPEl0aFR1cGxlRWxlbWVudFR5cGU+OjpIYXNoOjpoYXNoKHN0ZDo6Z2V0PEk+KHQpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPHNpemVfdCBJID0gMD4KLSAgICAgICAgc3Rh
dGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPEkgPCBzaXplb2YuLi4oVHlwZXMpIC0gMSwgYm9v
bD46OnR5cGUgZXF1YWwoY29uc3Qgc3RkOjp0dXBsZTxUeXBlcy4uLj4mIGEsIGNvbnN0IHN0ZDo6
dHVwbGU8VHlwZXMuLi4+JiBiKQotICAgICAgICB7Ci0gICAgICAgICAgICB1c2luZyBJdGhUdXBs
ZUVsZW1lbnRUeXBlID0gdHlwZW5hbWUgc3RkOjp0dXBsZV9lbGVtZW50PEksIHR5cGVuYW1lIHN0
ZDo6dHVwbGU8VHlwZXMuLi4+Pjo6dHlwZTsKLSAgICAgICAgICAgIHJldHVybiBEZWZhdWx0SGFz
aDxJdGhUdXBsZUVsZW1lbnRUeXBlPjo6SGFzaDo6ZXF1YWwoc3RkOjpnZXQ8ST4oYSksIHN0ZDo6
Z2V0PEk+KGIpKSAmJiBlcXVhbDxJICsgMT4oYSwgYik7Ci0gICAgICAgIH0KLQotICAgICAgICB0
ZW1wbGF0ZTxzaXplX3QgSSA9IDA+Ci0gICAgICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxJID09IHNpemVvZi4uLihUeXBlcykgLSAxLCBib29sPjo6dHlwZSBlcXVhbChjb25zdCBz
dGQ6OnR1cGxlPFR5cGVzLi4uPiYgYSwgY29uc3Qgc3RkOjp0dXBsZTxUeXBlcy4uLj4mIGIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHVzaW5nIEl0aFR1cGxlRWxlbWVudFR5cGUgPSB0eXBlbmFt
ZSBzdGQ6OnR1cGxlX2VsZW1lbnQ8SSwgdHlwZW5hbWUgc3RkOjp0dXBsZTxUeXBlcy4uLj4+Ojp0
eXBlOwotICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRIYXNoPEl0aFR1cGxlRWxlbWVudFR5cGU+
OjpIYXNoOjplcXVhbChzdGQ6OmdldDxJPihhKSwgc3RkOjpnZXQ8ST4oYikpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gV2Ugc2hvdWxkIHVzZSBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IERlZmF1bHRIYXNoPFR5cGVzPjo6SGFzaDo6c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgJiYuLi4gd2hlbmV2ZXIKLSAgICAgICAgLy8gd2Ugc3dpdGNoIHRvIEMrKzE3LiBXZSBjYW4n
dCBkbyBhbnl0aGluZyBiZXR0ZXIgaGVyZSByaWdodCBub3cgYmVjYXVzZSBHQ0MgY2FuJ3QgZG8g
QysrLgotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCb29sVHlwZT4KLSAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGFsbFRydWUoQm9vbFR5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJvb2xUeXBlLCB0eXBlbmFtZS4uLiBCb29sVHlw
ZXM+Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBhbGxUcnVlKEJvb2xUeXBlIHZhbHVl
LCBCb29sVHlwZXMuLi4gdmFsdWVzKSB7IHJldHVybiB2YWx1ZSAmJiBhbGxUcnVlKHZhbHVlcy4u
Lik7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSBhbGxUcnVlKERlZmF1bHRIYXNoPFR5cGVzPjo6SGFzaDo6c2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQuLi4pOwotICAgIH07Ci0KLSAgICAvLyBtYWtlIEludEhhc2ggdGhlIGRl
ZmF1bHQgaGFzaCBmdW5jdGlvbiBmb3IgbWFueSBpbnRlZ2VyIHR5cGVzCi0KLSAgICB0ZW1wbGF0
ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxib29sPiB7IHR5cGVkZWYgSW50SGFzaDx1aW50OF90PiBI
YXNoOyB9OwotICAgIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPHNob3J0PiB7IHR5cGVk
ZWYgSW50SGFzaDx1bnNpZ25lZD4gSGFzaDsgfTsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDx1bnNpZ25lZCBzaG9ydD4geyB0eXBlZGVmIEludEhhc2g8dW5zaWduZWQ+IEhhc2g7
IH07Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8aW50PiB7IHR5cGVkZWYgSW50
SGFzaDx1bnNpZ25lZD4gSGFzaDsgfTsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFz
aDx1bnNpZ25lZD4geyB0eXBlZGVmIEludEhhc2g8dW5zaWduZWQ+IEhhc2g7IH07Ci0gICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8bG9uZz4geyB0eXBlZGVmIEludEhhc2g8dW5zaWdu
ZWQgbG9uZz4gSGFzaDsgfTsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDx1bnNp
Z25lZCBsb25nPiB7IHR5cGVkZWYgSW50SGFzaDx1bnNpZ25lZCBsb25nPiBIYXNoOyB9OwotICAg
IHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPGxvbmcgbG9uZz4geyB0eXBlZGVmIEludEhh
c2g8dW5zaWduZWQgbG9uZyBsb25nPiBIYXNoOyB9OwotICAgIHRlbXBsYXRlPD4gc3RydWN0IERl
ZmF1bHRIYXNoPHVuc2lnbmVkIGxvbmcgbG9uZz4geyB0eXBlZGVmIEludEhhc2g8dW5zaWduZWQg
bG9uZyBsb25nPiBIYXNoOyB9OwotCi0jaWYgZGVmaW5lZChfTkFUSVZFX1dDSEFSX1RfREVGSU5F
RCkKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDx3Y2hhcl90PiB7IHR5cGVkZWYg
SW50SGFzaDx3Y2hhcl90PiBIYXNoOyB9OwotI2VuZGlmCi0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBEZWZhdWx0SGFzaDxmbG9hdD4geyB0eXBlZGVmIEZsb2F0SGFzaDxmbG9hdD4gSGFzaDsgfTsK
LSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxkb3VibGU+IHsgdHlwZWRlZiBGbG9h
dEhhc2g8ZG91YmxlPiBIYXNoOyB9OwotCi0gICAgLy8gbWFrZSBQdHJIYXNoIHRoZSBkZWZhdWx0
IGhhc2ggZnVuY3Rpb24gZm9yIHBvaW50ZXIgdHlwZXMgdGhhdCBkb24ndCBzcGVjaWFsaXplCi0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgRGVmYXVsdEhhc2g8UCo+IHsgdHlwZWRl
ZiBQdHJIYXNoPFAqPiBIYXNoOyB9OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBE
ZWZhdWx0SGFzaDxSZWZQdHI8UD4+IHsgdHlwZWRlZiBQdHJIYXNoPFJlZlB0cjxQPj4gSGFzaDsg
fTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgRGVmYXVsdEhhc2g8UmVmPFA+PiB7
IHR5cGVkZWYgUHRySGFzaDxSZWY8UD4+IEhhc2g7IH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBQLCB0eXBlbmFtZSBEZWxldGVyPiBzdHJ1Y3QgRGVmYXVsdEhhc2g8c3RkOjp1bmlxdWVfcHRy
PFAsIERlbGV0ZXI+PiB7IHR5cGVkZWYgUHRySGFzaDxzdGQ6OnVuaXF1ZV9wdHI8UCwgRGVsZXRl
cj4+IEhhc2g7IH07Ci0KLSAgICAvLyBtYWtlIEludFBhaXJIYXNoIHRoZSBkZWZhdWx0IGhhc2gg
ZnVuY3Rpb24gZm9yIHBhaXJzIG9mIChhdCBtb3N0KSAzMi1iaXQgaW50ZWdlcnMuCi0KLSAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8c2hvcnQsIHNob3J0Pj4geyB0
eXBlZGVmIEludFBhaXJIYXNoPHNob3J0LCBzaG9ydD4gSGFzaDsgfTsKLSAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8c2hvcnQsIHVuc2lnbmVkIHNob3J0Pj4geyB0
eXBlZGVmIEludFBhaXJIYXNoPHNob3J0LCB1bnNpZ25lZCBzaG9ydD4gSGFzaDsgfTsKLSAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8c2hvcnQsIGludD4+IHsgdHlw
ZWRlZiBJbnRQYWlySGFzaDxzaG9ydCwgaW50PiBIYXNoOyB9OwotICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IERlZmF1bHRIYXNoPHN0ZDo6cGFpcjxzaG9ydCwgdW5zaWduZWQ+PiB7IHR5cGVkZWYgSW50
UGFpckhhc2g8c2hvcnQsIHVuc2lnbmVkPiBIYXNoOyB9OwotICAgIHRlbXBsYXRlPD4gc3RydWN0
IERlZmF1bHRIYXNoPHN0ZDo6cGFpcjx1bnNpZ25lZCBzaG9ydCwgc2hvcnQ+PiB7IHR5cGVkZWYg
SW50UGFpckhhc2g8dW5zaWduZWQgc2hvcnQsIHNob3J0PiBIYXNoOyB9OwotICAgIHRlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPHN0ZDo6cGFpcjx1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQg
c2hvcnQ+PiB7IHR5cGVkZWYgSW50UGFpckhhc2g8dW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNo
b3J0PiBIYXNoOyB9OwotICAgIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPHN0ZDo6cGFp
cjx1bnNpZ25lZCBzaG9ydCwgaW50Pj4geyB0eXBlZGVmIEludFBhaXJIYXNoPHVuc2lnbmVkIHNo
b3J0LCBpbnQ+IEhhc2g7IH07Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8c3Rk
OjpwYWlyPHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZD4+IHsgdHlwZWRlZiBJbnRQYWlySGFzaDx1
bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQ+IEhhc2g7IH07Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g8c3RkOjpwYWlyPGludCwgc2hvcnQ+PiB7IHR5cGVkZWYgSW50UGFpckhhc2g8
aW50LCBzaG9ydD4gSGFzaDsgfTsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxz
dGQ6OnBhaXI8aW50LCB1bnNpZ25lZCBzaG9ydD4+IHsgdHlwZWRlZiBJbnRQYWlySGFzaDxpbnQs
IHVuc2lnbmVkIHNob3J0PiBIYXNoOyB9OwotICAgIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRI
YXNoPHN0ZDo6cGFpcjxpbnQsIGludD4+IHsgdHlwZWRlZiBJbnRQYWlySGFzaDxpbnQsIGludD4g
SGFzaDsgfTsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8aW50
LCB1bnNpZ25lZD4+IHsgdHlwZWRlZiBJbnRQYWlySGFzaDx1bnNpZ25lZCwgdW5zaWduZWQ+IEhh
c2g7IH07Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8c3RkOjpwYWlyPHVuc2ln
bmVkLCBzaG9ydD4+IHsgdHlwZWRlZiBJbnRQYWlySGFzaDx1bnNpZ25lZCwgc2hvcnQ+IEhhc2g7
IH07Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8c3RkOjpwYWlyPHVuc2lnbmVk
LCB1bnNpZ25lZCBzaG9ydD4+IHsgdHlwZWRlZiBJbnRQYWlySGFzaDx1bnNpZ25lZCwgdW5zaWdu
ZWQgc2hvcnQ+IEhhc2g7IH07Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8c3Rk
OjpwYWlyPHVuc2lnbmVkLCBpbnQ+PiB7IHR5cGVkZWYgSW50UGFpckhhc2g8dW5zaWduZWQsIGlu
dD4gSGFzaDsgfTsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8
dW5zaWduZWQsIHVuc2lnbmVkPj4geyB0eXBlZGVmIEludFBhaXJIYXNoPHVuc2lnbmVkLCB1bnNp
Z25lZD4gSGFzaDsgfTsKLQotICAgIC8vIG1ha2UgUGFpckhhc2ggdGhlIGRlZmF1bHQgaGFzaCBm
dW5jdGlvbiBmb3IgcGFpcnMgb2YgYXJiaXRyYXJ5IHZhbHVlcy4KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCBEZWZhdWx0SGFzaDxzdGQ6OnBhaXI8VCwgVT4+
IHsgdHlwZWRlZiBQYWlySGFzaDxULCBVPiBIYXNoOyB9OwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIFR5cGVzPiBzdHJ1Y3QgRGVmYXVsdEhhc2g8c3RkOjp0dXBsZTxUeXBlcy4uLj4+IHsgdHlw
ZWRlZiBUdXBsZUhhc2g8VHlwZXMuLi4+IEhhc2g7IH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgot
Ci11c2luZyBXVEY6OkRlZmF1bHRIYXNoOwotdXNpbmcgV1RGOjpJbnRIYXNoOwotdXNpbmcgV1RG
OjpQdHJIYXNoOwotCi0jZW5kaWYgLy8gV1RGX0hhc2hGdW5jdGlvbnNfaApkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0hhc2hJdGVyYXRvcnMuaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9IYXNoSXRlcmF0b3JzLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDMxOGE4NDk2YzY2MDVlZDBkN2Q4YWQ5MjQxY2U4ZWIxN2Y3ZGM2
YjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0hhc2hJdGVyYXRvcnMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDIxNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGl0ZXJhdG9yPgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1l
IEtleVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBIYXNoVGFibGVDb25zdEtleXNJ
dGVyYXRvcjsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBL
ZXlUeXBlLCB0eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlQ29uc3RWYWx1ZXNJ
dGVyYXRvcjsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFtZSBL
ZXlUeXBlLCB0eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlS2V5c0l0ZXJhdG9y
OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleVR5cGUs
IHR5cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBIYXNoVGFibGVWYWx1ZXNJdGVyYXRvcjsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5
cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxI
YXNoVGFibGVUeXBlLCBLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4+IDogcHVibGlj
IHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgS2V5VmFsdWVQYWlyPEtl
eVR5cGUsIE1hcHBlZFR5cGU+LCBzdGQ6OnB0cmRpZmZfdCwgY29uc3QgS2V5VmFsdWVQYWlyPEtl
eVR5cGUsIE1hcHBlZFR5cGU+KiwgY29uc3QgS2V5VmFsdWVQYWlyPEtleVR5cGUsIE1hcHBlZFR5
cGU+Jj4gewotICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgS2V5VmFsdWVQYWlyPEtleVR5
cGUsIE1hcHBlZFR5cGU+IFZhbHVlVHlwZTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYg
SGFzaFRhYmxlQ29uc3RLZXlzSXRlcmF0b3I8SGFzaFRhYmxlVHlwZSwgS2V5VHlwZSwgTWFwcGVk
VHlwZT4gS2V5czsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdFZhbHVlc0l0ZXJhdG9y
PEhhc2hUYWJsZVR5cGUsIEtleVR5cGUsIE1hcHBlZFR5cGU+IFZhbHVlczsKLQotICAgICAgICBI
YXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcigpIHt9Ci0gICAgICAgIEhhc2hUYWJsZUNvbnN0
SXRlcmF0b3JBZGFwdGVyKGNvbnN0IHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJh
dG9yJiBpbXBsKSA6IG1faW1wbChpbXBsKSB7fQotCi0gICAgICAgIGNvbnN0IFZhbHVlVHlwZSog
Z2V0KCkgY29uc3QgeyByZXR1cm4gKGNvbnN0IFZhbHVlVHlwZSopbV9pbXBsLmdldCgpOyB9Ci0g
ICAgICAgIGNvbnN0IFZhbHVlVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgp
OyB9Ci0gICAgICAgIGNvbnN0IFZhbHVlVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
IGdldCgpOyB9Ci0KLSAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXImIG9wZXJh
dG9yKysoKSB7ICsrbV9pbXBsOyByZXR1cm4gKnRoaXM7IH0KLSAgICAgICAgLy8gcG9zdGZpeCAr
KyBpbnRlbnRpb25hbGx5IG9taXR0ZWQKLQotICAgICAgICBLZXlzIGtleXMoKSB7IHJldHVybiBL
ZXlzKCp0aGlzKTsgfQotICAgICAgICBWYWx1ZXMgdmFsdWVzKCkgeyByZXR1cm4gVmFsdWVzKCp0
aGlzKTsgfQotCi0gICAgICAgIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9y
IG1faW1wbDsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwg
dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hUYWJsZUl0
ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgTWFwcGVk
VHlwZT4+IDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywg
S2V5VmFsdWVQYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+LCBzdGQ6OnB0cmRpZmZfdCwgS2V5VmFs
dWVQYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+KiwgS2V5VmFsdWVQYWlyPEtleVR5cGUsIE1hcHBl
ZFR5cGU+Jj4gewotICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgS2V5VmFsdWVQYWlyPEtl
eVR5cGUsIE1hcHBlZFR5cGU+IFZhbHVlVHlwZTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVk
ZWYgSGFzaFRhYmxlS2V5c0l0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleVR5cGUsIE1hcHBlZFR5
cGU+IEtleXM7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlVmFsdWVzSXRlcmF0b3I8SGFzaFRh
YmxlVHlwZSwgS2V5VHlwZSwgTWFwcGVkVHlwZT4gVmFsdWVzOwotCi0gICAgICAgIEhhc2hUYWJs
ZUl0ZXJhdG9yQWRhcHRlcigpIHt9Ci0gICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yQWRhcHRlcihj
b25zdCB0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjppdGVyYXRvciYgaW1wbCkgOiBtX2ltcGwoaW1w
bCkge30KLQotICAgICAgICBWYWx1ZVR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuIChWYWx1ZVR5
cGUqKW1faW1wbC5nZXQoKTsgfQotICAgICAgICBWYWx1ZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuICpnZXQoKTsgfQotICAgICAgICBWYWx1ZVR5cGUqIG9wZXJhdG9yLT4oKSBjb25z
dCB7IHJldHVybiBnZXQoKTsgfQotCi0gICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yQWRhcHRlciYg
b3BlcmF0b3IrKygpIHsgKyttX2ltcGw7IHJldHVybiAqdGhpczsgfQotICAgICAgICAvLyBwb3N0
Zml4ICsrIGludGVudGlvbmFsbHkgb21pdHRlZAotCi0gICAgICAgIG9wZXJhdG9yIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIFZhbHVlVHlwZT4oKSB7Ci0gICAg
ICAgICAgICB0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpjb25zdF9pdGVyYXRvciBpID0gbV9pbXBs
OwotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLQotICAgICAgICBLZXlzIGtleXMo
KSB7IHJldHVybiBLZXlzKCp0aGlzKTsgfQotICAgICAgICBWYWx1ZXMgdmFsdWVzKCkgeyByZXR1
cm4gVmFsdWVzKCp0aGlzKTsgfQotCi0gICAgICAgIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6Oml0
ZXJhdG9yIG1faW1wbDsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxl
VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgTWFwcGVkVHlwZT4gc3RydWN0IEhhc2hU
YWJsZUNvbnN0S2V5c0l0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJk
X2l0ZXJhdG9yX3RhZywgS2V5VHlwZSwgc3RkOjpwdHJkaWZmX3QsIGNvbnN0IEtleVR5cGUqLCBj
b25zdCBLZXlUeXBlJj4gewotICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxl
Q29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgS2V5VmFsdWVQYWlyPEtleVR5cGUs
IE1hcHBlZFR5cGU+PiBDb25zdEl0ZXJhdG9yOwotCi0gICAgcHVibGljOgotICAgICAgICBIYXNo
VGFibGVDb25zdEtleXNJdGVyYXRvcihjb25zdCBDb25zdEl0ZXJhdG9yJiBpbXBsKSA6IG1faW1w
bChpbXBsKSB7fQotICAgICAgICAKLSAgICAgICAgY29uc3QgS2V5VHlwZSogZ2V0KCkgY29uc3Qg
eyByZXR1cm4gJihtX2ltcGwuZ2V0KCktPmtleSk7IH0KLSAgICAgICAgY29uc3QgS2V5VHlwZSYg
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9Ci0gICAgICAgIGNvbnN0IEtleVR5
cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQotCi0gICAgICAgIEhhc2hU
YWJsZUNvbnN0S2V5c0l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyArK21faW1wbDsgcmV0dXJuICp0
aGlzOyB9Ci0gICAgICAgIC8vIHBvc3RmaXggKysgaW50ZW50aW9uYWxseSBvbWl0dGVkCi0KLSAg
ICAgICAgQ29uc3RJdGVyYXRvciBtX2ltcGw7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUYWJsZVR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+
IHN0cnVjdCBIYXNoVGFibGVDb25zdFZhbHVlc0l0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0
b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgTWFwcGVkVHlwZSwgc3RkOjpwdHJkaWZmX3Qs
IGNvbnN0IE1hcHBlZFR5cGUqLCBjb25zdCBNYXBwZWRUeXBlJj4gewotICAgIHByaXZhdGU6Ci0g
ICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlw
ZSwgS2V5VmFsdWVQYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+PiBDb25zdEl0ZXJhdG9yOwotCi0g
ICAgcHVibGljOgotICAgICAgICBIYXNoVGFibGVDb25zdFZhbHVlc0l0ZXJhdG9yKGNvbnN0IENv
bnN0SXRlcmF0b3ImIGltcGwpIDogbV9pbXBsKGltcGwpIHt9Ci0gICAgICAgIAotICAgICAgICBj
b25zdCBNYXBwZWRUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAmKG1faW1wbC5nZXQoKS0+dmFs
dWUpOyB9Ci0gICAgICAgIGNvbnN0IE1hcHBlZFR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuICpnZXQoKTsgfQotICAgICAgICBjb25zdCBNYXBwZWRUeXBlKiBvcGVyYXRvci0+KCkgY29u
c3QgeyByZXR1cm4gZ2V0KCk7IH0KLQotICAgICAgICBIYXNoVGFibGVDb25zdFZhbHVlc0l0ZXJh
dG9yJiBvcGVyYXRvcisrKCkgeyArK21faW1wbDsgcmV0dXJuICp0aGlzOyB9Ci0gICAgICAgIC8v
IHBvc3RmaXggKysgaW50ZW50aW9uYWxseSBvbWl0dGVkCi0KLSAgICAgICAgQ29uc3RJdGVyYXRv
ciBtX2ltcGw7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZVR5cGUs
IHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIE1hcHBlZFR5cGU+IHN0cnVjdCBIYXNoVGFibGVL
ZXlzSXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3Jf
dGFnLCBLZXlUeXBlLCBzdGQ6OnB0cmRpZmZfdCwgS2V5VHlwZSosIEtleVR5cGUmPiB7Ci0gICAg
cHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvckFkYXB0ZXI8SGFzaFRh
YmxlVHlwZSwgS2V5VmFsdWVQYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+PiBJdGVyYXRvcjsKLSAg
ICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBl
LCBLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4+IENvbnN0SXRlcmF0b3I7Ci0KLSAg
ICBwdWJsaWM6Ci0gICAgICAgIEhhc2hUYWJsZUtleXNJdGVyYXRvcihjb25zdCBJdGVyYXRvciYg
aW1wbCkgOiBtX2ltcGwoaW1wbCkge30KLSAgICAgICAgCi0gICAgICAgIEtleVR5cGUqIGdldCgp
IGNvbnN0IHsgcmV0dXJuICYobV9pbXBsLmdldCgpLT5rZXkpOyB9Ci0gICAgICAgIEtleVR5cGUm
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQotICAgICAgICBLZXlUeXBlKiBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KLQotICAgICAgICBIYXNoVGFibGVL
ZXlzSXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7ICsrbV9pbXBsOyByZXR1cm4gKnRoaXM7IH0KLSAg
ICAgICAgLy8gcG9zdGZpeCArKyBpbnRlbnRpb25hbGx5IG9taXR0ZWQKLQotICAgICAgICBvcGVy
YXRvciBIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXlUeXBlLCBN
YXBwZWRUeXBlPigpIHsKLSAgICAgICAgICAgIENvbnN0SXRlcmF0b3IgaSA9IG1faW1wbDsKLSAg
ICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0KLSAgICAgICAgSXRlcmF0b3IgbV9pbXBs
OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlLCB0eXBlbmFt
ZSBLZXlUeXBlLCB0eXBlbmFtZSBNYXBwZWRUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWVzSXRl
cmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBN
YXBwZWRUeXBlLCBzdGQ6OnB0cmRpZmZfdCwgTWFwcGVkVHlwZSosIE1hcHBlZFR5cGUmPiB7Ci0g
ICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvckFkYXB0ZXI8SGFz
aFRhYmxlVHlwZSwgS2V5VmFsdWVQYWlyPEtleVR5cGUsIE1hcHBlZFR5cGU+PiBJdGVyYXRvcjsK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVU
eXBlLCBLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgTWFwcGVkVHlwZT4+IENvbnN0SXRlcmF0b3I7Ci0K
LSAgICBwdWJsaWM6Ci0gICAgICAgIEhhc2hUYWJsZVZhbHVlc0l0ZXJhdG9yKGNvbnN0IEl0ZXJh
dG9yJiBpbXBsKSA6IG1faW1wbChpbXBsKSB7fQotICAgICAgICAKLSAgICAgICAgTWFwcGVkVHlw
ZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gc3RkOjphZGRyZXNzb2YobV9pbXBsLmdldCgpLT52YWx1
ZSk7IH0KLSAgICAgICAgTWFwcGVkVHlwZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdl
dCgpOyB9Ci0gICAgICAgIE1hcHBlZFR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBn
ZXQoKTsgfQotCi0gICAgICAgIEhhc2hUYWJsZVZhbHVlc0l0ZXJhdG9yJiBvcGVyYXRvcisrKCkg
eyArK21faW1wbDsgcmV0dXJuICp0aGlzOyB9Ci0gICAgICAgIC8vIHBvc3RmaXggKysgaW50ZW50
aW9uYWxseSBvbWl0dGVkCi0KLSAgICAgICAgb3BlcmF0b3IgSGFzaFRhYmxlQ29uc3RWYWx1ZXNJ
dGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXlUeXBlLCBNYXBwZWRUeXBlPigpIHsKLSAgICAgICAg
ICAgIENvbnN0SXRlcmF0b3IgaSA9IG1faW1wbDsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgSXRlcmF0b3IgbV9pbXBsOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgICAgICBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEhhc2hUYWJsZUNvbnN0S2V5c0l0ZXJhdG9yPFQsIFUsIFY+JiBh
LCBjb25zdCBIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcjxULCBVLCBWPiYgYikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhLm1faW1wbCA9PSBiLm1faW1wbDsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgICAgICBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEhhc2hUYWJsZUNvbnN0S2V5c0l0ZXJhdG9yPFQsIFUsIFY+JiBh
LCBjb25zdCBIYXNoVGFibGVDb25zdEtleXNJdGVyYXRvcjxULCBVLCBWPiYgYikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhLm1faW1wbCAhPSBiLm1faW1wbDsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgICAgICBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3I8VCwgVSwgVj4m
IGEsIGNvbnN0IEhhc2hUYWJsZUNvbnN0VmFsdWVzSXRlcmF0b3I8VCwgVSwgVj4mIGIpCi0gICAg
ewotICAgICAgICByZXR1cm4gYS5tX2ltcGwgPT0gYi5tX2ltcGw7Ci0gICAgfQotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICAgICAgaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoVGFibGVDb25zdFZhbHVlc0l0ZXJhdG9yPFQsIFUs
IFY+JiBhLCBjb25zdCBIYXNoVGFibGVDb25zdFZhbHVlc0l0ZXJhdG9yPFQsIFUsIFY+JiBiKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGEubV9pbXBsICE9IGIubV9pbXBsOwotICAgIH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0gICAgICAgIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaFRhYmxlS2V5c0l0ZXJhdG9yPFQsIFUsIFY+
JiBhLCBjb25zdCBIYXNoVGFibGVLZXlzSXRlcmF0b3I8VCwgVSwgVj4mIGIpCi0gICAgewotICAg
ICAgICByZXR1cm4gYS5tX2ltcGwgPT0gYi5tX2ltcGw7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICAgICAgaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBIYXNoVGFibGVLZXlzSXRlcmF0b3I8VCwgVSwgVj4mIGEsIGNvbnN0
IEhhc2hUYWJsZUtleXNJdGVyYXRvcjxULCBVLCBWPiYgYikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhLm1faW1wbCAhPSBiLm1faW1wbDsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEhhc2hUYWJsZVZhbHVlc0l0ZXJhdG9yPFQsIFUsIFY+JiBhLCBjb25zdCBIYXNoVGFi
bGVWYWx1ZXNJdGVyYXRvcjxULCBVLCBWPiYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhLm1f
aW1wbCA9PSBiLm1faW1wbDsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgotICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEhhc2hUYWJsZVZhbHVlc0l0ZXJhdG9yPFQsIFUsIFY+JiBhLCBjb25zdCBIYXNoVGFibGVWYWx1
ZXNJdGVyYXRvcjxULCBVLCBWPiYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhLm1faW1wbCAh
PSBiLm1faW1wbDsKLSAgICB9Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0hhc2hNYXAuaCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9IYXNoTWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGZjNzcxYjlhMWIwOGY1Y2FjMDA0NjY2NzRkZGUxMDlmNTMwNTE1ZTcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL0hhc2hNYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwNiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDgsIDIwMTEsIDIwMTMsIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBXVEZfSGFzaE1hcF9oCi0jZGVmaW5l
IFdURl9IYXNoTWFwX2gKLQotI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hUYWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9JdGVyYXRvclJhbmdlLmg+Ci0KLW5hbWVz
cGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyS2V5
RXh0cmFjdG9yIHsKLSAgICBzdGF0aWMgY29uc3QgdHlwZW5hbWUgVDo6S2V5VHlwZSYgZXh0cmFj
dChjb25zdCBUJiBwKSB7IHJldHVybiBwLmtleTsgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
S2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBE
ZWZhdWx0SGFzaDxLZXlBcmc+OjpIYXNoLAotICAgIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhh
c2hUcmFpdHM8S2V5QXJnPiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnID0gSGFzaFRyYWl0czxN
YXBwZWRBcmc+PgotY2xhc3MgSGFzaE1hcCBmaW5hbCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wcml2YXRlOgotICAgIHR5cGVkZWYgS2V5VHJhaXRzQXJnIEtleVRyYWl0czsKLSAg
ICB0eXBlZGVmIE1hcHBlZFRyYWl0c0FyZyBNYXBwZWRUcmFpdHM7Ci0KLSAgICBzdHJ1Y3QgS2V5
VmFsdWVQYWlyVHJhaXRzIDogS2V5VmFsdWVQYWlySGFzaFRyYWl0czxLZXlUcmFpdHMsIE1hcHBl
ZFRyYWl0cz4gewotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJc0VtcHR5VmFsdWVGdW5j
dGlvbiA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCB0eXBl
bmFtZSBLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzPEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPjo6VHJh
aXRUeXBlJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlzSGFzaFRyYWl0
c0VtcHR5VmFsdWU8S2V5VHJhaXRzPih2YWx1ZS5rZXkpOwotICAgICAgICB9Ci0gICAgfTsKLQot
cHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgS2V5VHJhaXRzOjpUcmFpdFR5cGUgS2V5VHlw
ZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIE1hcHBlZFRyYWl0czo6VHJhaXRUeXBlIE1hcHBlZFR5
cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBLZXlWYWx1ZVBhaXJUcmFpdHM6OlRyYWl0VHlwZSBL
ZXlWYWx1ZVBhaXJUeXBlOwotCi1wcml2YXRlOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzOjpQZWVrVHlwZSBNYXBwZWRQZWVrVHlwZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIE1h
cHBlZFRyYWl0czo6VGFrZVR5cGUgTWFwcGVkVGFrZVR5cGU7Ci0KLSAgICB0eXBlZGVmIEhhc2hB
cmcgSGFzaEZ1bmN0aW9uczsKLQotICAgIHR5cGVkZWYgSGFzaFRhYmxlPEtleVR5cGUsIEtleVZh
bHVlUGFpclR5cGUsIEtleVZhbHVlUGFpcktleUV4dHJhY3RvcjxLZXlWYWx1ZVBhaXJUeXBlPiwK
LSAgICAgICAgSGFzaEZ1bmN0aW9ucywgS2V5VmFsdWVQYWlyVHJhaXRzLCBLZXlUcmFpdHM+IEhh
c2hUYWJsZVR5cGU7Ci0KLSAgICBjbGFzcyBIYXNoTWFwS2V5c1Byb3h5OwotICAgIGNsYXNzIEhh
c2hNYXBWYWx1ZXNQcm94eTsKLQotICAgIHVzaW5nIElkZW50aXR5VHJhbnNsYXRvclR5cGUgPSB0
eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpJZGVudGl0eVRyYW5zbGF0b3JUeXBlOwotCi1wdWJsaWM6
Ci0gICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgS2V5
VmFsdWVQYWlyVHlwZT4gaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJh
dG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBLZXlWYWx1ZVBhaXJUeXBlPiBjb25zdF9pdGVyYXRv
cjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OkFkZFJlc3VsdCBBZGRSZXN1
bHQ7Ci0KLXB1YmxpYzoKLSAgICBIYXNoTWFwKCkKLSAgICB7Ci0gICAgfQotCi0gICAgSGFzaE1h
cChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8S2V5VmFsdWVQYWlyVHlwZT4gaW5pdGlhbGl6ZXJMaXN0
KQotICAgIHsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBpbml0aWFs
aXplckxpc3QpCi0gICAgICAgICAgICBhZGQoa2V5VmFsdWVQYWlyLmtleSwga2V5VmFsdWVQYWly
LnZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzd2FwKEhhc2hNYXAmKTsKLQotICAgIHVu
c2lnbmVkIHNpemUoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0OwotICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotCi0gICAgLy8gaXRlcmF0b3JzIGl0ZXJhdGUgb3ZlciBw
YWlycyBvZiBrZXlzIGFuZCB2YWx1ZXMKLSAgICBpdGVyYXRvciBiZWdpbigpOwotICAgIGl0ZXJh
dG9yIGVuZCgpOwotICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7Ci0gICAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3Q7Ci0KLSAgICBJdGVyYXRvclJhbmdlPHR5cGVuYW1lIGl0ZXJh
dG9yOjpLZXlzPiBrZXlzKCkgeyByZXR1cm4gbWFrZUl0ZXJhdG9yUmFuZ2UoYmVnaW4oKS5rZXlz
KCksIGVuZCgpLmtleXMoKSk7IH0KLSAgICBjb25zdCBJdGVyYXRvclJhbmdlPHR5cGVuYW1lIGNv
bnN0X2l0ZXJhdG9yOjpLZXlzPiBrZXlzKCkgY29uc3QgeyByZXR1cm4gbWFrZUl0ZXJhdG9yUmFu
Z2UoYmVnaW4oKS5rZXlzKCksIGVuZCgpLmtleXMoKSk7IH0KLQotICAgIEl0ZXJhdG9yUmFuZ2U8
dHlwZW5hbWUgaXRlcmF0b3I6OlZhbHVlcz4gdmFsdWVzKCkgeyByZXR1cm4gbWFrZUl0ZXJhdG9y
UmFuZ2UoYmVnaW4oKS52YWx1ZXMoKSwgZW5kKCkudmFsdWVzKCkpOyB9Ci0gICAgY29uc3QgSXRl
cmF0b3JSYW5nZTx0eXBlbmFtZSBjb25zdF9pdGVyYXRvcjo6VmFsdWVzPiB2YWx1ZXMoKSBjb25z
dCB7IHJldHVybiBtYWtlSXRlcmF0b3JSYW5nZShiZWdpbigpLnZhbHVlcygpLCBlbmQoKS52YWx1
ZXMoKSk7IH0KLQotICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYpOwotICAgIGNvbnN0
X2l0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYpIGNvbnN0OwotICAgIGJvb2wgY29udGFpbnMo
Y29uc3QgS2V5VHlwZSYpIGNvbnN0OwotICAgIE1hcHBlZFBlZWtUeXBlIGdldChjb25zdCBLZXlU
eXBlJikgY29uc3Q7Ci0KLSAgICAvLyBTYW1lIGFzIGdldCgpLCBidXQgYWdncmVzc2l2ZWx5IGlu
bGluZWQuCi0gICAgTWFwcGVkUGVla1R5cGUgZmFzdEdldChjb25zdCBLZXlUeXBlJikgY29uc3Q7
Ci0KLSAgICAvLyBSZXBsYWNlcyB0aGUgdmFsdWUgYnV0IG5vdCB0aGUga2V5IGlmIHRoZSBrZXkg
aXMgYWxyZWFkeSBwcmVzZW50LgotICAgIC8vIFJldHVybiB2YWx1ZSBpbmNsdWRlcyBib3RoIGFu
IGl0ZXJhdG9yIHRvIHRoZSBrZXkgbG9jYXRpb24sCi0gICAgLy8gYW5kIGFuIGlzTmV3RW50cnkg
Ym9vbGVhbiB0aGF0J3MgdHJ1ZSBpZiBhIG5ldyBlbnRyeSB3YXMgYWRkZWQuCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVj4gQWRkUmVzdWx0IHNldChjb25zdCBLZXlUeXBlJiwgViYmKTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWPiBBZGRSZXN1bHQgc2V0KEtleVR5cGUmJiwgViYmKTsKLQotICAg
IC8vIERvZXMgbm90aGluZyBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudC4KLSAgICAvLyBS
ZXR1cm4gdmFsdWUgaW5jbHVkZXMgYm90aCBhbiBpdGVyYXRvciB0byB0aGUga2V5IGxvY2F0aW9u
LAotICAgIC8vIGFuZCBhbiBpc05ld0VudHJ5IGJvb2xlYW4gdGhhdCdzIHRydWUgaWYgYSBuZXcg
ZW50cnkgd2FzIGFkZGVkLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+IEFkZFJlc3VsdCBhZGQo
Y29uc3QgS2V5VHlwZSYsIFYmJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVj4gQWRkUmVzdWx0
IGFkZChLZXlUeXBlJiYsIFYmJik7Ci0KLSAgICAvLyBTYW1lIGFzIGFkZCgpLCBidXQgYWdncmVz
c2l2ZWx5IGlubGluZWQuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVj4gQWRkUmVzdWx0IGZhc3RB
ZGQoY29uc3QgS2V5VHlwZSYsIFYmJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVj4gQWRkUmVz
dWx0IGZhc3RBZGQoS2V5VHlwZSYmLCBWJiYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gQWRkUmVzdWx0IGVuc3VyZShjb25zdCBLZXlUeXBlJiwgRnVuY3RvciYmKTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBBZGRSZXN1bHQgZW5zdXJlKEtleVR5cGUmJiwgRnVu
Y3RvciYmKTsKLQotICAgIGJvb2wgcmVtb3ZlKGNvbnN0IEtleVR5cGUmKTsKLSAgICBib29sIHJl
bW92ZShpdGVyYXRvcik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lk
IHJlbW92ZUlmKEZ1bmN0b3ImJik7Ci0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgTWFwcGVkVGFr
ZVR5cGUgdGFrZShjb25zdCBLZXlUeXBlJik7IC8vIGVmZmljaWVudCBjb21iaW5hdGlvbiBvZiBn
ZXQgd2l0aCByZW1vdmUKLQotICAgIC8vIEFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIGZpbmQoKSB0
aGF0IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCi0gICAgLy8gd2l0
aCBzb21lIG90aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbi4g
SGFzaFRyYW5zbGF0b3IKLSAgICAvLyBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBt
ZW1iZXJzOgotICAgIC8vICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYpOwotICAgIC8v
ICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVmFsdWVUeXBlJiwgY29uc3QgVCYpOwotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5k
KGNvbnN0IFQmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5h
bWUgVD4gY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBUJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMoY29uc3Qg
VCYpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBUPiBNYXBwZWRQZWVrVHlwZSBnZXQoY29uc3QgVCYpIGNvbnN0OwotCi0gICAgLy8gQW4gYWx0
ZXJuYXRlIHZlcnNpb24gb2YgYWRkKCkgdGhhdCBmaW5kcyB0aGUgb2JqZWN0IGJ5IGhhc2hpbmcg
YW5kIGNvbXBhcmluZwotICAgIC8vIHdpdGggc29tZSBvdGhlciB0eXBlLCB0byBhdm9pZCB0aGUg
Y29zdCBvZiB0eXBlIGNvbnZlcnNpb24gaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5Ci0gICAgLy8g
aW4gdGhlIHRhYmxlLiBIYXNoVHJhbnNsYXRvciBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBmdW5j
dGlvbiBtZW1iZXJzOgotICAgIC8vICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYpOwot
ICAgIC8vICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVmFsdWVUeXBlJiwgY29uc3QgVCYpOwot
ICAgIC8vICAgc3RhdGljIHRyYW5zbGF0ZShWYWx1ZVR5cGUmLCBjb25zdCBUJiwgdW5zaWduZWQg
aGFzaENvZGUpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBLLCB0eXBlbmFtZSBWPiBBZGRSZXN1bHQgYWRkKEsmJiwgViYmKTsKLQotICAgIC8vIE92ZXJs
b2FkcyBmb3Igc21hcnQgcG9pbnRlciBrZXlzIHRoYXQgdGFrZSB0aGUgcmF3IHBvaW50ZXIgdHlw
ZSBhcyB0aGUgcGFyYW1ldGVyLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEsgPSBLZXlUeXBlPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0
eXBlIGZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlKTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLID0gS2V5VHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0
cjxLPjo6dmFsdWUsIGNvbnN0X2l0ZXJhdG9yPjo6dHlwZSBmaW5kKHR5cGVuYW1lIEdldFB0ckhl
bHBlcjxLPjo6UHRyVHlwZSkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSyA9IEtleVR5
cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Sz46OnZhbHVlLCBib29sPjo6
dHlwZSBjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEsgPSBLZXlUeXBlPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlIGlubGluZUdldCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEsgPSBLZXlUeXBlPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+
Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlIGdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8
Sz46OlB0clR5cGUpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEsgPSBLZXlUeXBlPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgYm9vbD46OnR5cGUg
cmVtb3ZlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxLPjo6UHRyVHlwZSk7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSyA9IEtleVR5cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8
Sz46OnZhbHVlLCBNYXBwZWRUYWtlVHlwZT46OnR5cGUgdGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxw
ZXI8Sz46OlB0clR5cGUpOwotCi0gICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3Q7Ci0K
LSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmKTsKLQotcHJpdmF0ZToK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgotICAgIEFkZFJlc3VsdCBpbmxp
bmVTZXQoSyYmLCBWJiYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4K
LSAgICBBZGRSZXN1bHQgaW5saW5lQWRkKEsmJiwgViYmKTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEssIHR5cGVuYW1lIEY+Ci0gICAgQWRkUmVzdWx0IGlubGluZUVuc3VyZShLJiYsIEYmJik7
Ci0KLSAgICBIYXNoVGFibGVUeXBlIG1faW1wbDsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHJhaXRzLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zPgotc3RydWN0IEhhc2hNYXBUcmFuc2xh
dG9yIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBUJiBrZXkpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6Omhhc2goa2V5KTsgfQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFQmIGEs
IGNvbnN0IFUmIGIpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEsIGIpOyB9Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3RhdGljIHZvaWQg
dHJhbnNsYXRlKFQmIGxvY2F0aW9uLCBVJiYga2V5LCBWJiYgbWFwcGVkKQotICAgIHsKLSAgICAg
ICAgVmFsdWVUcmFpdHM6OktleVRyYWl0czo6YXNzaWduVG9FbXB0eShsb2NhdGlvbi5rZXksIHN0
ZDo6Zm9yd2FyZDxVPihrZXkpKTsKLSAgICAgICAgVmFsdWVUcmFpdHM6OlZhbHVlVHJhaXRzOjph
c3NpZ25Ub0VtcHR5KGxvY2F0aW9uLnZhbHVlLCBzdGQ6OmZvcndhcmQ8Vj4obWFwcGVkKSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUcmFpdHMsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnM+Ci1zdHJ1Y3QgSGFzaE1hcEVuc3VyZVRyYW5zbGF0b3IgewotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmIGtleSkgeyByZXR1cm4g
SGFzaEZ1bmN0aW9uczo6aGFzaChrZXkpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyByZXR1
cm4gSGFzaEZ1bmN0aW9uczo6ZXF1YWwoYSwgYik7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jdG9yPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYg
bG9jYXRpb24sIFUmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgVmFs
dWVUcmFpdHM6OktleVRyYWl0czo6YXNzaWduVG9FbXB0eShsb2NhdGlvbi5rZXksIHN0ZDo6Zm9y
d2FyZDxVPihrZXkpKTsKLSAgICAgICAgVmFsdWVUcmFpdHM6OlZhbHVlVHJhaXRzOjphc3NpZ25U
b0VtcHR5KGxvY2F0aW9uLnZhbHVlLCBmdW5jdG9yKCkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlVHJhaXRzLCB0eXBlbmFtZSBUcmFuc2xhdG9yPgotc3RydWN0IEhhc2hN
YXBUcmFuc2xhdG9yQWRhcHRlciB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgVCYga2V5KSB7IHJldHVybiBUcmFuc2xhdG9yOjpoYXNoKGtleSk7
IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBUcmFuc2xhdG9yOjplcXVhbChhLCBi
KTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0
YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlvbiwgVSYmIGtleSwgViYmIG1hcHBlZCwgdW5z
aWduZWQgaGFzaENvZGUpCi0gICAgewotICAgICAgICBUcmFuc2xhdG9yOjp0cmFuc2xhdGUobG9j
YXRpb24ua2V5LCBrZXksIGhhc2hDb2RlKTsKLSAgICAgICAgbG9jYXRpb24udmFsdWUgPSBzdGQ6
OmZvcndhcmQ8Vj4obWFwcGVkKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHZv
aWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6c3dhcChIYXNoTWFwJiBvdGhlcikKLXsKLSAgICBt
X2ltcGwuc3dhcChvdGhlci5tX2ltcGwpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHVuc2ln
bmVkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnNpemUoKSBjb25zdAotewotICAgIHJldHVybiBt
X2ltcGwuc2l6ZSgpOyAKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSB1bnNpZ25lZCBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjpjYXBhY2l0eSgpIGNvbnN0Ci17IAotICAgIHJldHVybiBtX2ltcGwu
Y2FwYWNpdHkoKTsgCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUs
IFYsIFcsIFg+Ojppc0VtcHR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbXBsLmlzRW1wdHko
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmJlZ2luKCkgLT4gaXRlcmF0b3IKLXsKLSAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjplbmQoKSAt
PiBpdGVyYXRvcgotewotICAgIHJldHVybiBtX2ltcGwuZW5kKCk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpiZWdpbigpIGNvbnN0IC0+IGNv
bnN0X2l0ZXJhdG9yCi17Ci0gICAgcmV0dXJuIG1faW1wbC5iZWdpbigpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZW5kKCkgY29uc3QgLT4g
Y29uc3RfaXRlcmF0b3IKLXsKLSAgICByZXR1cm4gbV9pbXBsLmVuZCgpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZChjb25zdCBLZXlU
eXBlJiBrZXkpIC0+IGl0ZXJhdG9yCi17Ci0gICAgcmV0dXJuIG1faW1wbC5maW5kKGtleSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpmaW5k
KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKLXsKLSAgICByZXR1
cm4gbV9pbXBsLmZpbmQoa2V5KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OmNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9pbXBsLmNvbnRhaW5zKGtleSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGluZSB0eXBl
bmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppdGVyYXRvcgotSGFzaE1hcDxULCBVLCBWLCBX
LCBYPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gbV9pbXBsLnRlbXBs
YXRlIGZpbmQ8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFpclRyYWl0cywgSGFz
aFRyYW5zbGF0b3I+Pih2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVFlQRT4KLWlubGluZSB0eXBlbmFtZSBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9pdGVyYXRvciAKLUhhc2hNYXA8VCwgVSwgViwgVywgWD46
OmZpbmQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhh
c2hUcmFuc2xhdG9yPj4odmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFRZUEU+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46OmdldChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKLXsK
LSAgICBhdXRvKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVt
cGxhdGUgbG9va3VwPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxLZXlWYWx1ZVBhaXJUcmFpdHMs
IEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwotICAgIGlmICghZW50cnkpCi0gICAgICAgIHJldHVy
biBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgIHJl
dHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnktPnZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
LXRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUWVBFPgotaW5saW5l
IGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29udGFpbnMoY29uc3QgVFlQRSYgdmFsdWUp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoTWFwVHJh
bnNsYXRvckFkYXB0ZXI8S2V5VmFsdWVQYWlyVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHZhbHVl
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJh
aXRzQXJnPgotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLWF1dG8gSGFzaE1hcDxL
ZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+
OjppbmxpbmVTZXQoSyYmIGtleSwgViYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKLXsKLSAgICBBZGRS
ZXN1bHQgcmVzdWx0ID0gaW5saW5lQWRkKHN0ZDo6Zm9yd2FyZDxLPihrZXkpLCBzdGQ6OmZvcndh
cmQ8Vj4odmFsdWUpKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIC8v
IFRoZSBpbmxpbmVBZGQgY2FsbCBhYm92ZSBmb3VuZCBhbiBleGlzdGluZyBoYXNoIHRhYmxlIGVu
dHJ5OyB3ZSBuZWVkIHRvIHNldCB0aGUgbWFwcGVkIHZhbHVlLgotICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gc3RkOjpmb3J3YXJkPFY+KHZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRB
cmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFw
cGVkVHJhaXRzQXJnPgotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLUFMV0FZU19J
TkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNB
cmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZUFkZChLJiYga2V5LCBWJiYgdmFsdWUpIC0+IEFk
ZFJlc3VsdAotewotICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEhhc2hNYXBUcmFuc2xh
dG9yPEtleVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHN0ZDo6Zm9yd2FyZDxLPihr
ZXkpLCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgotdGVtcGxhdGU8dHlwZW5hbWUgSywg
dHlwZW5hbWUgRj4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmlubGluZUVuc3VyZShL
JiYga2V5LCBGJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0Ci17Ci0gICAgcmV0dXJuIG1faW1wbC50
ZW1wbGF0ZSBhZGQ8SGFzaE1hcEVuc3VyZVRyYW5zbGF0b3I8S2V5VmFsdWVQYWlyVHJhaXRzLCBI
YXNoRnVuY3Rpb25zPj4oc3RkOjpmb3J3YXJkPEs+KGtleSksIHN0ZDo6Zm9yd2FyZDxGPihmdW5j
dG9yKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0c0FyZz4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBN
YXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6c2V0KGNv
bnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0Ci17Ci0gICAgcmV0dXJu
IGlubGluZVNldChrZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5
cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjpzZXQoS2V5VHlwZSYmIGtleSwgVCYmIG1hcHBl
ZCkgLT4gQWRkUmVzdWx0Ci17Ci0gICAgcmV0dXJuIGlubGluZVNldChXVEZNb3ZlKGtleSksIHN0
ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0
eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0Fy
ZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgotdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Ci1hdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBw
ZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6YWRkKEsmJiBr
ZXksIFYmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0Ci17Ci0gICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0
ZSBhZGRQYXNzaW5nSGFzaENvZGU8SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPEtleVZhbHVlUGFp
clRyYWl0cywgSGFzaFRyYW5zbGF0b3I+PihzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3RkOjpmb3J3
YXJkPFY+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
TWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVu
YW1lIE1hcHBlZFRyYWl0c0FyZz4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1hdXRvIEhhc2hNYXA8
S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJn
Pjo6YWRkKGNvbnN0IEtleVR5cGUmIGtleSwgVCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0Ci17Ci0g
ICAgcmV0dXJuIGlubGluZUFkZChrZXksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhh
c2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFz
aEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjphZGQoS2V5VHlwZSYmIGtleSwg
VCYmIG1hcHBlZCkgLT4gQWRkUmVzdWx0Ci17Ci0gICAgcmV0dXJuIGlubGluZUFkZChXVEZNb3Zl
KGtleSksIHN0ZDo6Zm9yd2FyZDxUPihtYXBwZWQpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
S2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtl
eVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLUFMV0FZU19JTkxJTkUgYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJn
LCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz46OmZhc3RBZGQoY29uc3QgS2V5VHlwZSYg
a2V5LCBUJiYgbWFwcGVkKSAtPiBBZGRSZXN1bHQKLXsKLSAgICByZXR1cm4gaW5saW5lQWRkKGtl
eSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
QUxXQVlTX0lOTElORSBhdXRvIEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtl
eVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPjo6ZmFzdEFkZChLZXlUeXBlJiYga2V5LCBUJiYg
bWFwcGVkKSAtPiBBZGRSZXN1bHQKLXsKLSAgICByZXR1cm4gaW5saW5lQWRkKFdURk1vdmUoa2V5
KSwgc3RkOjpmb3J3YXJkPFQ+KG1hcHBlZCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgotYXV0byBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNB
cmcsIE1hcHBlZFRyYWl0c0FyZz46OmVuc3VyZShjb25zdCBLZXlUeXBlJiBrZXksIEZ1bmN0b3Im
JiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKLXsKLSAgICByZXR1cm4gaW5saW5lRW5zdXJlKGtleSwg
c3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
S2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtl
eVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPgotdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KLWF1dG8gSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJh
aXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+OjplbnN1cmUoS2V5VHlwZSYmIGtleSwgRnVuY3RvciYm
IGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAotewotICAgIHJldHVybiBpbmxpbmVFbnN1cmUoc3RkOjpm
b3J3YXJkPEtleVR5cGU+KGtleSksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7Ci19
Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1pbmxpbmUgYXV0byBIYXNoTWFwPFQsIFUs
IFYsIFcsIE1hcHBlZFRyYWl0cz46OmdldChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IC0+IE1h
cHBlZFBlZWtUeXBlCi17Ci0gICAgcmV0dXJuIGdldDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihr
ZXkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0
eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1BTFdBWVNfSU5MSU5FIGF1dG8gSGFz
aE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpmYXN0R2V0KGNvbnN0IEtleVR5cGUmIGtl
eSkgY29uc3QgLT4gTWFwcGVkUGVla1R5cGUKLXsKLSAgICBLZXlWYWx1ZVBhaXJUeXBlKiBlbnRy
eSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkudGVtcGxhdGUgaW5saW5lTG9v
a3VwPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7Ci0gICAgaWYgKCFlbnRyeSkKLSAgICAg
ICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7
Ci0gICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+dmFsdWUpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotaW5saW5lIGJvb2wgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6cmVtb3ZlKGl0ZXJh
dG9yIGl0KQotewotICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9pbXBsLmludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7
Ci0gICAgbV9pbXBsLnJlbW92ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soaXQubV9pbXBs
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLXRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpyZW1vdmVJZihG
dW5jdG9yJiYgZnVuY3RvcikKLXsKLSAgICBtX2ltcGwucmVtb3ZlSWYoc3RkOjpmb3J3YXJkPEZ1
bmN0b3I+KGZ1bmN0b3IpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlubGluZSBib29sIEhhc2hNYXA8
VCwgVSwgViwgVywgWD46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCi17Ci0gICAgcmV0dXJu
IHJlbW92ZShmaW5kKGtleSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIHZvaWQgSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6Y2xlYXIoKQotewotICAgIG1faW1wbC5jbGVhcigpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1hdXRvIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJh
aXRzPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpIC0+IE1hcHBlZFRha2VUeXBlCi17Ci0gICAg
aXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7Ci0gICAgaWYgKGl0ID09IGVuZCgpKQotICAgICAgICBy
ZXR1cm4gTWFwcGVkVHJhaXRzOjp0YWtlKE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAg
ICBhdXRvIHZhbHVlID0gTWFwcGVkVHJhaXRzOjp0YWtlKFdURk1vdmUoaXQtPnZhbHVlKSk7Ci0g
ICAgcmVtb3ZlKGl0KTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Zmlu
ZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCi17Ci0gICAg
cmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtleVZhbHVlUGFp
clRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6ZmluZCh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0b3I+Ojp0eXBl
Ci17Ci0gICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yPEtl
eVZhbHVlUGFpclRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KGtleSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPEs+OjpQdHJUeXBlIGtleSkgY29uc3Qg
LT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxLPjo6dmFsdWUsIGJvb2w+Ojp0
eXBlCi17Ci0gICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoTWFwVHJhbnNs
YXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBYPgotdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBhdXRvIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OmlubGluZUdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUga2V5
KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwg
TWFwcGVkUGVla1R5cGU+Ojp0eXBlCi17Ci0gICAgS2V5VmFsdWVQYWlyVHlwZSogZW50cnkgPSBj
b25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGlubGluZUxvb2t1cDxI
YXNoTWFwVHJhbnNsYXRvcjxLZXlWYWx1ZVBhaXJUcmFpdHMsIEhhc2hGdW5jdGlvbnM+PihrZXkp
OwotICAgIGlmICghZW50cnkpCi0gICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoTWFw
cGVkVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWso
ZW50cnktPnZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLXRlbXBsYXRlPHR5cGVuYW1lIEs+Ci1h
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmdldCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46
OlB0clR5cGUga2V5KSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRy
PEs+Ojp2YWx1ZSwgTWFwcGVkUGVla1R5cGU+Ojp0eXBlCi17Ci0gICAgcmV0dXJuIGlubGluZUdl
dChrZXkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotdGVtcGxhdGU8dHlwZW5hbWUgSz4KLWlubGluZSBh
dXRvIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8
Sz46OlB0clR5cGUga2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+
Ojp2YWx1ZSwgYm9vbD46OnR5cGUKLXsKLSAgICByZXR1cm4gcmVtb3ZlKGZpbmQoa2V5KSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIFg+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBLPgotaW5saW5lIGF1dG8gSGFzaE1h
cDxULCBVLCBWLCBXLCBYPjo6dGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Sz46OlB0clR5cGUg
a2V5KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPEs+Ojp2YWx1ZSwgTWFw
cGVkVGFrZVR5cGU+Ojp0eXBlCi17Ci0gICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7Ci0gICAg
aWYgKGl0ID09IGVuZCgpKQotICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjp0YWtlKE1hcHBl
ZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLSAgICBhdXRvIHZhbHVlID0gTWFwcGVkVHJhaXRzOjp0
YWtlKFdURk1vdmUoaXQtPnZhbHVlKSk7Ci0gICAgcmVtb3ZlKGl0KTsKLSAgICByZXR1cm4gdmFs
dWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5
cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgdm9pZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKLXsKLSAgICBtX2ltcGwuY2hlY2tUYWJsZUNvbnNp
c3RlbmN5KCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1pbmxpbmUgYm9vbCBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+Ojppc1ZhbGlkS2V5KGNvbnN0IEtleVR5cGUmIGtleSkKLXsKLSAgICBpZiAoS2V5VHJh
aXRzOjppc0RlbGV0ZWRWYWx1ZShrZXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQpIHsKLSAgICAg
ICAgaWYgKGtleSA9PSBLZXlUcmFpdHM6OmVtcHR5VmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoaXNIYXNoVHJhaXRzRW1wdHlWYWx1
ZTxLZXlUcmFpdHM+KGtleSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+Ci1ib29sIG9wZXJhdG9yPT0oY29uc3Qg
SGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgYSwgY29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYg
YikKLXsKLSAgICBpZiAoYS5zaXplKCkgIT0gYi5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3Rf
aXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBhLmVu
ZCgpOwotICAgIGNvbnN0X2l0ZXJhdG9yIG5vdEZvdW5kID0gYi5lbmQoKTsKLSAgICBmb3IgKGNv
bnN0X2l0ZXJhdG9yIGl0ID0gYS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
Y29uc3RfaXRlcmF0b3IgYlBvcyA9IGIuZmluZChpdC0+a2V5KTsKLSAgICAgICAgaWYgKGJQb3Mg
PT0gbm90Rm91bmQgfHwgaXQtPnZhbHVlICE9IGJQb3MtPnZhbHVlKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBhLCBj
b25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+Ci1pbmxpbmUgdm9pZCBjb3B5VG9WZWN0b3Io
Y29uc3QgSGFzaE1hcDxULCBVLCBWLCBXLCBYPiYgY29sbGVjdGlvbiwgWSYgdmVjdG9yKQotewot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0
b3IgaXRlcmF0b3I7Ci0KLSAgICB2ZWN0b3IucmVzaXplKGNvbGxlY3Rpb24uc2l6ZSgpKTsKLQot
ICAgIGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdpbigpOwotICAgIGl0ZXJhdG9yIGVuZCA9
IGNvbGxlY3Rpb24uZW5kKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaXQgIT0gZW5kOyAr
K2l0LCArK2kpCi0gICAgICAgIHZlY3RvcltpXSA9IHsgKCppdCkua2V5LCAoKml0KS52YWx1ZSB9
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBl
bmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgotaW5saW5lIHZvaWQgY29weUtleXNUb1Zl
Y3Rvcihjb25zdCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9uLCBZJiB2ZWN0b3Ip
Ci17Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpjb25zdF9p
dGVyYXRvcjo6S2V5cyBpdGVyYXRvcjsKLSAgICAKLSAgICB2ZWN0b3IucmVzaXplKGNvbGxlY3Rp
b24uc2l6ZSgpKTsKLSAgICAKLSAgICBpdGVyYXRvciBpdCA9IGNvbGxlY3Rpb24uYmVnaW4oKS5r
ZXlzKCk7Ci0gICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5lbmQoKS5rZXlzKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaXQgIT0gZW5kOyArK2l0LCArK2kpCi0gICAgICAgIHZlY3Rv
cltpXSA9ICppdDsKLX0gIAotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgotaW5saW5lIHZvaWQg
Y29weVZhbHVlc1RvVmVjdG9yKGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGNvbGxlY3Rp
b24sIFkmIHZlY3RvcikKLXsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46OmNvbnN0X2l0ZXJhdG9yOjpWYWx1ZXMgaXRlcmF0b3I7Ci0gICAgCi0gICAgdmVjdG9y
LnJlc2l6ZShjb2xsZWN0aW9uLnNpemUoKSk7Ci0gICAgCi0gICAgaXRlcmF0b3IgaXQgPSBjb2xs
ZWN0aW9uLmJlZ2luKCkudmFsdWVzKCk7Ci0gICAgaXRlcmF0b3IgZW5kID0gY29sbGVjdGlvbi5l
bmQoKS52YWx1ZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpdCAhPSBlbmQ7ICsraXQs
ICsraSkKLSAgICAgICAgdmVjdG9yW2ldID0gKml0OwotfSAgIAotCi19IC8vIG5hbWVzcGFjZSBX
VEYKLQotdXNpbmcgV1RGOjpIYXNoTWFwOwotCi0jZW5kaWYgLyogV1RGX0hhc2hNYXBfaCAqLwpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0hhc2hTZXQuaCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9IYXNoU2V0LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGU2MTQxZjUxNzY1OTgzOTc1ZDAxM2IxZDhhMGQ5NGJkMTRkM2Iy
MGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0hhc2hTZXQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDM5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDExLCAyMDEzLCAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNp
Zm5kZWYgV1RGX0hhc2hTZXRfaAotI2RlZmluZSBXVEZfSGFzaFNldF9oCi0KLSNpbmNsdWRlIDxp
bml0aWFsaXplcl9saXN0PgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaFRhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0gICAgc3RydWN0IElkZW50aXR5RXh0
cmFjdG9yOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIEhhc2hTZXQ7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IHR5cGVuYW1lIERlZmF1bHRI
YXNoPFZhbHVlQXJnPjo6SGFzaCwKLSAgICAgICAgdHlwZW5hbWUgVHJhaXRzQXJnID0gSGFzaFRy
YWl0czxWYWx1ZUFyZz4+IGNsYXNzIEhhc2hTZXQgZmluYWwgewotICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLSAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hBcmcgSGFz
aEZ1bmN0aW9uczsKLSAgICAgICAgdHlwZWRlZiBUcmFpdHNBcmcgVmFsdWVUcmFpdHM7Ci0gICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRha2VUeXBlIFRha2VUeXBlOwotCi0g
ICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5
cGUgVmFsdWVUeXBlOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8
VmFsdWVUeXBlLCBWYWx1ZVR5cGUsIElkZW50aXR5RXh0cmFjdG9yLAotICAgICAgICAgICAgSGFz
aEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPiBIYXNoVGFibGVUeXBlOwotCi0g
ICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVy
PEhhc2hUYWJsZVR5cGUsIFZhbHVlVHlwZT4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgSGFz
aFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgVmFsdWVUeXBlPiBjb25z
dF9pdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpBZGRS
ZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgICAgIEhhc2hTZXQoKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICBIYXNoU2V0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxWYWx1ZUFyZz4gaW5p
dGlhbGl6ZXJMaXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZh
bHVlIDogaW5pdGlhbGl6ZXJMaXN0KQotICAgICAgICAgICAgICAgIGFkZCh2YWx1ZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIHN3YXAoSGFzaFNldCYpOwotCi0gICAgICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7Ci0KLSAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25z
dDsKLSAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3Q7Ci0KLSAgICAgICAgaXRlcmF0b3IgZmlu
ZChjb25zdCBWYWx1ZVR5cGUmKSBjb25zdDsKLSAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBW
YWx1ZVR5cGUmKSBjb25zdDsKLQotICAgICAgICAvLyBBbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiBm
aW5kKCkgdGhhdCBmaW5kcyB0aGUgb2JqZWN0IGJ5IGhhc2hpbmcgYW5kIGNvbXBhcmluZwotICAg
ICAgICAvLyB3aXRoIHNvbWUgb3RoZXIgdHlwZSwgdG8gYXZvaWQgdGhlIGNvc3Qgb2YgdHlwZSBj
b252ZXJzaW9uLiBIYXNoVHJhbnNsYXRvcgotICAgICAgICAvLyBtdXN0IGhhdmUgdGhlIGZvbGxv
d2luZyBmdW5jdGlvbiBtZW1iZXJzOgotICAgICAgICAvLyAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IFQmKTsKLSAgICAgICAgLy8gICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBWYWx1ZVR5
cGUmLCBjb25zdCBUJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9y
LCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKSBjb25zdDsKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMo
Y29uc3QgVCYpIGNvbnN0OwotCi0gICAgICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaW5jbHVkZXMg
Ym90aCBhbiBpdGVyYXRvciB0byB0aGUgYWRkZWQgdmFsdWUncyBsb2NhdGlvbiwKLSAgICAgICAg
Ly8gYW5kIGFuIGlzTmV3RW50cnkgYm9vbCB0aGF0IGluZGljYXRlcyBpZiBpdCBpcyBhIG5ldyBv
ciBleGlzdGluZyBlbnRyeSBpbiB0aGUgc2V0LgotICAgICAgICBBZGRSZXN1bHQgYWRkKGNvbnN0
IFZhbHVlVHlwZSYpOwotICAgICAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmKTsKLSAgICAg
ICAgdm9pZCBhZGQoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
Y29uc3QgVmFsdWVUeXBlPj4pOwotCi0gICAgICAgIHZvaWQgYWRkVm9pZChjb25zdCBWYWx1ZVR5
cGUmKTsKLSAgICAgICAgdm9pZCBhZGRWb2lkKFZhbHVlVHlwZSYmKTsKLQotICAgICAgICAvLyBB
biBhbHRlcm5hdGUgdmVyc2lvbiBvZiBhZGQoKSB0aGF0IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFz
aGluZyBhbmQgY29tcGFyaW5nCi0gICAgICAgIC8vIHdpdGggc29tZSBvdGhlciB0eXBlLCB0byBh
dm9pZCB0aGUgY29zdCBvZiB0eXBlIGNvbnZlcnNpb24gaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5
Ci0gICAgICAgIC8vIGluIHRoZSB0YWJsZS4gSGFzaFRyYW5zbGF0b3IgbXVzdCBoYXZlIHRoZSBm
b2xsb3dpbmcgZnVuY3Rpb24gbWVtYmVyczoKLSAgICAgICAgLy8gICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBUJik7Ci0gICAgICAgIC8vICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVmFs
dWVUeXBlJiwgY29uc3QgVCYpOwotICAgICAgICAvLyAgIHN0YXRpYyB0cmFuc2xhdGUoVmFsdWVU
eXBlJiwgY29uc3QgVCYsIHVuc2lnbmVkIGhhc2hDb2RlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IEFkZFJlc3VsdCBhZGQoY29uc3QgVCYp
OwotICAgICAgICAKLSAgICAgICAgLy8gQXR0ZW1wdHMgdG8gYWRkIGEgbGlzdCBvZiB0aGluZ3Mg
dG8gdGhlIHNldC4gUmV0dXJucyB0cnVlIGlmIGFueSBvZgotICAgICAgICAvLyB0aGVtIGFyZSBu
ZXcgdG8gdGhlIHNldC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgc2V0IGlzIHVuY2hhbmdlZC4KLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgotICAgICAgICBib29sIGFkZChJ
dGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpOwotCi0gICAgICAgIGJvb2wgcmVt
b3ZlKGNvbnN0IFZhbHVlVHlwZSYpOwotICAgICAgICBib29sIHJlbW92ZShpdGVyYXRvcik7Ci0g
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgICAgIHZvaWQgcmVtb3ZlSWYo
Y29uc3QgRnVuY3RvciYpOwotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICAgICAgVGFrZVR5
cGUgdGFrZShjb25zdCBWYWx1ZVR5cGUmKTsKLSAgICAgICAgVGFrZVR5cGUgdGFrZShpdGVyYXRv
cik7Ci0gICAgICAgIFRha2VUeXBlIHRha2VBbnkoKTsKLQotICAgICAgICAvLyBPdmVybG9hZHMg
Zm9yIHNtYXJ0IHBvaW50ZXIgdmFsdWVzIHRoYXQgdGFrZSB0aGUgcmF3IHBvaW50ZXIgdHlwZSBh
cyB0aGUgcGFyYW1ldGVyLgotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWID0gVmFsdWVUeXBl
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+
Ojp0eXBlIGZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlKSBjb25zdDsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIGNvbnRhaW5zKHR5cGVuYW1l
IEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSkgY29uc3Q7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFYgPSBWYWx1ZVR5cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46
OnZhbHVlLCBib29sPjo6dHlwZSByZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJU
eXBlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIFRha2VUeXBlPjo6dHlwZSB0YWtl
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSk7Ci0KLSAgICAgICAgc3RhdGljIGJv
b2wgaXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYpOwotCi0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE90
aGVyQ29sbGVjdGlvbiYpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3RoZXJDb2xsZWN0aW9uPgotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgT3RoZXJD
b2xsZWN0aW9uJikgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBIYXNoVGFibGVUeXBl
IG1faW1wbDsKLSAgICB9OwotCi0gICAgc3RydWN0IElkZW50aXR5RXh0cmFjdG9yIHsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGNvbnN0IFQmIGV4dHJhY3QoY29uc3QgVCYg
dCkgeyByZXR1cm4gdDsgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVRy
YWl0cywgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucz4KLSAgICBzdHJ1Y3QgSGFzaFNldFRyYW5zbGF0
b3IgewotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBUJiBrZXkpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6Omhhc2goa2V5KTsgfQotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBIYXNoRnVuY3Rpb25zOjplcXVhbChhLCBiKTsg
fQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBz
dGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24sIFUmJiwgViYmIHZhbHVlKQotICAgICAg
ICB7IAotICAgICAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkobG9jYXRpb24sIHN0
ZDo6Zm9yd2FyZDxWPih2YWx1ZSkpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFRyYW5zbGF0b3I+Ci0gICAgc3RydWN0IEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRl
ciB7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IFQmIGtleSkgeyByZXR1cm4gVHJhbnNsYXRvcjo6aGFzaChrZXkpOyB9Ci0gICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFQm
IGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIFRyYW5zbGF0b3I6OmVxdWFsKGEsIGIpOyB9Ci0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyB2b2lkIHRyYW5zbGF0
ZShUJiBsb2NhdGlvbiwgY29uc3QgVSYga2V5LCBjb25zdCBVJiwgdW5zaWduZWQgaGFzaENvZGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRyYW5zbGF0b3I6OnRyYW5zbGF0ZShsb2NhdGlvbiwg
a2V5LCBoYXNoQ29kZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICBpbmxpbmUgdm9pZCBIYXNoU2V0PFQs
IFUsIFY+Ojpzd2FwKEhhc2hTZXQmIG90aGVyKQotICAgIHsKLSAgICAgICAgbV9pbXBsLnN3YXAo
b3RoZXIubV9pbXBsKTsgCi0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KLSAgICBpbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6
c2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbXBsLnNpemUoKTsgCi0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAg
ICBpbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIGlubGluZSBib29s
IEhhc2hTZXQ8VCwgVSwgVj46OmlzRW1wdHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1faW1wbC5pc0VtcHR5KCk7IAotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0gICAgaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6
YmVnaW4oKSBjb25zdCAtPiBpdGVyYXRvcgotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW1wbC5i
ZWdpbigpOyAKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgotICAgIGlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmVuZCgpIGNvbnN0
IC0+IGl0ZXJhdG9yCi0gICAgewotICAgICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOyAKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAg
IGlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1
ZSkgY29uc3QgLT4gaXRlcmF0b3IKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ltcGwuZmluZCh2
YWx1ZSk7IAotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+Ci0gICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6Y29udGFpbnMoY29u
c3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ltcGwu
Y29udGFpbnModmFsdWUpOyAKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotICAgIGlubGluZSBhdXRvIEhhc2hT
ZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQoY29uc3QgVCYgdmFsdWUpIGNv
bnN0IC0+IGl0ZXJhdG9yCi0gICAgewotICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZp
bmQ8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwotICAg
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRl
cjxIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIGlubGluZSBhdXRvIEhhc2hTZXQ8VCwg
VSwgVj46OmFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2ltcGwuYWRkKHZhbHVlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIGlubGluZSBhdXRvIEhhc2hT
ZXQ8VCwgVSwgVj46OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9pbXBsLmFkZChXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICBpbmxpbmUg
dm9pZCBIYXNoU2V0PFQsIFUsIFY+OjphZGRWb2lkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCi0g
ICAgewotICAgICAgICBtX2ltcGwuYWRkKHZhbHVlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIGlubGluZSB2b2lkIEhhc2hT
ZXQ8VCwgVSwgVj46OmFkZFZvaWQoVmFsdWVUeXBlJiYgdmFsdWUpCi0gICAgewotICAgICAgICBt
X2ltcGwuYWRkKFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotICAgIGlubGluZSBh
dXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmFkZChjb25zdCBUJiB2
YWx1ZSkgLT4gQWRkUmVzdWx0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRl
IGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0
b3I+Pih2YWx1ZSwgdmFsdWUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBl
PgotICAgIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChJdGVyYXRvclR5cGUgYmVn
aW4sIEl0ZXJhdG9yVHlwZSBlbmQpCi0gICAgewotICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxz
ZTsKLSAgICAgICAgZm9yIChJdGVyYXRvclR5cGUgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsg
KytpdGVyKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBhZGQoKml0ZXIpLmlzTmV3RW50cnk7Ci0g
ICAgICAgIHJldHVybiBjaGFuZ2VkOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0gICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBW
Pjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQotICAgIHsKLSAgICAgICAgaWYgKGl0Lm1faW1wbCA9PSBt
X2ltcGwuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1faW1wbC5p
bnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwotICAgICAgICBtX2ltcGwucmVtb3ZlV2l0
aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdC5tX2ltcGwpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPgotICAgIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShjb25zdCBWYWx1
ZVR5cGUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIGlubGluZSB2b2lkIEhhc2hT
ZXQ8VCwgVSwgVj46OnJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAg
ICAgICBtX2ltcGwucmVtb3ZlSWYoZnVuY3Rvcik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICBpbmxpbmUgdm9pZCBIYXNoU2V0
PFQsIFUsIFY+OjpjbGVhcigpCi0gICAgewotICAgICAgICBtX2ltcGwuY2xlYXIoKTsgCi0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAg
ICBpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGl0ZXJhdG9yIGl0KSAtPiBUYWtl
VHlwZQotICAgIHsKLSAgICAgICAgaWYgKGl0ID09IGVuZCgpKQotICAgICAgICAgICAgcmV0dXJu
IFZhbHVlVHJhaXRzOjp0YWtlKFZhbHVlVHJhaXRzOjplbXB0eVZhbHVlKCkpOwotCi0gICAgICAg
IGF1dG8gcmVzdWx0ID0gVmFsdWVUcmFpdHM6OnRha2UoV1RGTW92ZShjb25zdF9jYXN0PFZhbHVl
VHlwZSY+KCppdCkpKTsKLSAgICAgICAgcmVtb3ZlKGl0KTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWPgotICAgIGlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2UoY29uc3QgVmFsdWVU
eXBlJiB2YWx1ZSkgLT4gVGFrZVR5cGUKLSAgICB7Ci0gICAgICAgIHJldHVybiB0YWtlKGZpbmQo
dmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgotICAgIGlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OnRha2VBbnkoKSAt
PiBUYWtlVHlwZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRha2UoYmVnaW4oKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cz4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotICAgIGlubGluZSBhdXRv
IEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQodHlwZW5hbWUgR2V0
UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8SGFzaFNldFRyYW5zbGF0b3I8VHJhaXRzLCBI
YXNoRnVuY3Rpb25zPj4odmFsdWUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVj4KLSAgICBpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+Ojpjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUg
dmFsdWUpIGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZh
bHVlLCBib29sPjo6dHlwZQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBj
b250YWluczxIYXNoU2V0VHJhbnNsYXRvcjxUcmFpdHMsIEhhc2hGdW5jdGlvbnM+Pih2YWx1ZSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotICAgIGlu
bGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnJlbW92ZSh0
eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotICAgIGlubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhh
c2hGdW5jdGlvbnMsIFRyYWl0cz46OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJU
eXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1
ZSwgVGFrZVR5cGU+Ojp0eXBlCi0gICAgewotICAgICAgICByZXR1cm4gdGFrZShmaW5kKHZhbHVl
KSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgVj4KLSAgICBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojppc1ZhbGlkVmFsdWUoY29u
c3QgVmFsdWVUeXBlJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChWYWx1ZVRyYWl0czo6aXNE
ZWxldGVkVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IGlmIChIYXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCkgewotICAg
ICAgICAgICAgaWYgKHZhbHVlID09IFZhbHVlVHJhaXRzOjplbXB0eVZhbHVlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYg
KGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8VmFsdWVUcmFpdHM+KHZhbHVlKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBXPgotICAgIGlubGluZSB2
b2lkIGNvcHlUb1ZlY3Rvcihjb25zdCBDJiBjb2xsZWN0aW9uLCBXJiB2ZWN0b3IpCi0gICAgewot
ICAgICAgICB2ZWN0b3IucmVzaXplKGNvbGxlY3Rpb24uc2l6ZSgpKTsKLSAgICAgICAgc3RkOjpj
b3B5KGNvbGxlY3Rpb24uYmVnaW4oKSwgY29sbGVjdGlvbi5lbmQoKSwgdmVjdG9yLmJlZ2luKCkp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgotICAgIGlubGluZSBi
b29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBv
dGhlckNvbGxlY3Rpb24pIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoc2l6ZSgpICE9IG90aGVy
Q29sbGVjdGlvbi5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGZv
ciAoY29uc3QgYXV0byYgb3RoZXIgOiBvdGhlckNvbGxlY3Rpb24pIHsKLSAgICAgICAgICAgIGlm
ICghY29udGFpbnMob3RoZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
dGhlckNvbGxlY3Rpb24+Ci0gICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0
b3IhPShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyQ29sbGVjdGlvbik7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICB2b2lk
IEhhc2hTZXQ8VCwgVSwgVj46OmFkZChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxjb25zdCBWYWx1ZVR5cGU+PiBsaXN0KQotICAgIHsKLSAgICAgICAgZm9yIChh
dXRvJiB2YWx1ZSA6IGxpc3QpCi0gICAgICAgICAgICBhZGQodmFsdWUpOwotICAgIH0KLQotfSAv
LyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6SGFzaFNldDsKLQotI2VuZGlmIC8qIFdURl9I
YXNoU2V0X2ggKi8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9IYXNoVGFibGUuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9IYXNoVGFi
bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJmZDlhMTRjM2M0MjZmNWZkOThl
MjczMTIzN2RkMDZmMTM5YzgyOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvSGFzaFRhYmxlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxNTM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIExldmluIDxsZXZpbkBj
aHJvbWl1bS5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGF0b21pYz4KLSNpbmNs
dWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDxtdXRleD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNp
bmNsdWRlIDx0eXBlX3RyYWl0cz4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaFRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1Zh
bHVlQ2hlY2suaD4KLQotI2RlZmluZSBEVU1QX0hBU0hUQUJMRV9TVEFUUyAwCi0jZGVmaW5lIERV
TVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRSAwCi0KLSNpZiBEVU1QX0hBU0hUQUJMRV9TVEFU
U19QRVJfVEFCTEUKLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXVEYgewotCi0vLyBFbmFibGVzIGludGVybmFsIFdURiBjb25zaXN0ZW5jeSBjaGVja3MgdGhh
dCBhcmUgaW52b2tlZCBhdXRvbWF0aWNhbGx5LiBOb24tV1RGIGNhbGxlcnMgY2FuIGNhbGwgY2hl
Y2tUYWJsZUNvbnNpc3RlbmN5KCkgZXZlbiBpZiBpbnRlcm5hbCBjaGVja3MgYXJlIGRpc2FibGVk
LgotI2RlZmluZSBDSEVDS19IQVNIVEFCTEVfQ09OU0lTVEVOQ1kgMAotCi0jaWZkZWYgTkRFQlVH
Ci0jZGVmaW5lIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMgMAotI2RlZmluZSBDSEVDS19IQVNI
VEFCTEVfVVNFX0FGVEVSX0RFU1RSVUNUSU9OIDAKLSNlbHNlCi0jZGVmaW5lIENIRUNLX0hBU0hU
QUJMRV9JVEVSQVRPUlMgMQotI2RlZmluZSBDSEVDS19IQVNIVEFCTEVfVVNFX0FGVEVSX0RFU1RS
VUNUSU9OIDEKLSNlbmRpZgotCi0jaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKLQotICAgIHN0cnVj
dCBIYXNoVGFibGVTdGF0cyB7Ci0gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFy
ZSBhbGwgYXRvbWljYWxseSBpbmNyZW1lbnRlZCB3aGVuIG1vZGlmaWVkLgotICAgICAgICBXVEZf
RVhQT1JUREFUQSBzdGF0aWMgc3RkOjphdG9taWM8dW5zaWduZWQ+IG51bUFjY2Vzc2VzOwotICAg
ICAgICBXVEZfRVhQT1JUREFUQSBzdGF0aWMgc3RkOjphdG9taWM8dW5zaWduZWQ+IG51bVJlaGFz
aGVzOwotICAgICAgICBXVEZfRVhQT1JUREFUQSBzdGF0aWMgc3RkOjphdG9taWM8dW5zaWduZWQ+
IG51bVJlbW92ZXM7Ci0gICAgICAgIFdURl9FWFBPUlREQVRBIHN0YXRpYyBzdGQ6OmF0b21pYzx1
bnNpZ25lZD4gbnVtUmVpbnNlcnRzOwotCi0gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgdmFyaWFi
bGVzIGFyZSBvbmx5IG1vZGlmaWVkIGluIHRoZSByZWNvcmRDb2xsaXNpb25BdENvdW50IG1ldGhv
ZCB3aXRoaW4gYSBtdXRleC4KLSAgICAgICAgV1RGX0VYUE9SVERBVEEgc3RhdGljIHVuc2lnbmVk
IG1heENvbGxpc2lvbnM7Ci0gICAgICAgIFdURl9FWFBPUlREQVRBIHN0YXRpYyB1bnNpZ25lZCBu
dW1Db2xsaXNpb25zOwotICAgICAgICBXVEZfRVhQT1JUREFUQSBzdGF0aWMgdW5zaWduZWQgY29s
bGlzaW9uR3JhcGhbNDA5Nl07Ci0KLSAgICAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHJlY29yZENvbGxpc2lvbkF0Q291bnQodW5zaWduZWQgY291bnQpOwotICAgICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZHVtcFN0YXRzKCk7Ci0gICAgfTsKLQotI2VuZGlm
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBF
eHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgotICAgIGNsYXNzIEhhc2hUYWJsZTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGNsYXNz
IEhhc2hUYWJsZUl0ZXJhdG9yOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgY2xhc3MgSGFzaFRhYmxlQ29uc3RJ
dGVyYXRvcjsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBhZGRJdGVyYXRvcihjb25zdCBIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz4qLAotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Kik7Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAg
IHZvaWQgcmVtb3ZlSXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopOwotCi0jaWYgIUNI
RUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgaW5saW5lIHZvaWQgYWRk
SXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+KiwKLSAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRv
cjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
PiopIHsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICBpbmxpbmUgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNo
VGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+KikgeyB9Ci0KLSNlbmRpZgotCi0gICAgdHlwZWRlZiBlbnVtIHsg
SGFzaEl0ZW1Lbm93bkdvb2QgfSBIYXNoSXRlbUtub3duR29vZFRhZzsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0g
ICAgY2xhc3MgSGFzaFRhYmxlQ29uc3RJdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0
ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFZhbHVlLCBzdGQ6OnB0cmRpZmZfdCwgY29uc3QgVmFs
dWUqLCBjb25zdCBWYWx1ZSY+IHsKLSAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPiBIYXNoVGFibGVUeXBlOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEtl
eSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0
ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRl
cmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgVmFsdWUgVmFsdWVUeXBlOwotICAgICAgICB0eXBlZGVm
IGNvbnN0IFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBjb25zdCBW
YWx1ZVR5cGUqIFBvaW50ZXJUeXBlOwotCi0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47
Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjsKLQotICAgICAgICB2b2lk
IHNraXBFbXB0eUJ1Y2tldHMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB3aGlsZSAobV9wb3Np
dGlvbiAhPSBtX2VuZFBvc2l0aW9uICYmIEhhc2hUYWJsZVR5cGU6OmlzRW1wdHlPckRlbGV0ZWRC
dWNrZXQoKm1fcG9zaXRpb24pKQotICAgICAgICAgICAgICAgICsrbV9wb3NpdGlvbjsKLSAgICAg
ICAgfQotCi0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlw
ZSogdGFibGUsIFBvaW50ZXJUeXBlIHBvc2l0aW9uLCBQb2ludGVyVHlwZSBlbmRQb3NpdGlvbikK
LSAgICAgICAgICAgIDogbV9wb3NpdGlvbihwb3NpdGlvbiksIG1fZW5kUG9zaXRpb24oZW5kUG9z
aXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZEl0ZXJhdG9yKHRhYmxlLCB0aGlzKTsK
LSAgICAgICAgICAgIHNraXBFbXB0eUJ1Y2tldHMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEhh
c2hUYWJsZUNvbnN0SXRlcmF0b3IoY29uc3QgSGFzaFRhYmxlVHlwZSogdGFibGUsIFBvaW50ZXJU
eXBlIHBvc2l0aW9uLCBQb2ludGVyVHlwZSBlbmRQb3NpdGlvbiwgSGFzaEl0ZW1Lbm93bkdvb2RU
YWcpCi0gICAgICAgICAgICA6IG1fcG9zaXRpb24ocG9zaXRpb24pLCBtX2VuZFBvc2l0aW9uKGVu
ZFBvc2l0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBhZGRJdGVyYXRvcih0YWJsZSwgdGhp
cyk7Ci0gICAgICAgIH0KLQotICAgIHB1YmxpYzoKLSAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVy
YXRvcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZEl0ZXJhdG9yKHN0YXRpY19jYXN0PGNv
bnN0IEhhc2hUYWJsZVR5cGUqPigwKSwgdGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBk
ZWZhdWx0IGNvcHksIGFzc2lnbm1lbnQgYW5kIGRlc3RydWN0b3IgYXJlIE9LIGlmIENIRUNLX0hB
U0hUQUJMRV9JVEVSQVRPUlMgaXMgMAotCi0jaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwot
ICAgICAgICB+SGFzaFRhYmxlQ29uc3RJdGVyYXRvcigpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJlbW92ZUl0ZXJhdG9yKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvcihjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpCi0gICAgICAgICAgICA6IG1f
cG9zaXRpb24ob3RoZXIubV9wb3NpdGlvbiksIG1fZW5kUG9zaXRpb24ob3RoZXIubV9lbmRQb3Np
dGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgYWRkSXRlcmF0b3Iob3RoZXIubV90YWJsZSwg
dGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3I9KGNv
bnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgbV9wb3Np
dGlvbiA9IG90aGVyLm1fcG9zaXRpb247Ci0gICAgICAgICAgICBtX2VuZFBvc2l0aW9uID0gb3Ro
ZXIubV9lbmRQb3NpdGlvbjsKLQotICAgICAgICAgICAgcmVtb3ZlSXRlcmF0b3IodGhpcyk7Ci0g
ICAgICAgICAgICBhZGRJdGVyYXRvcihvdGhlci5tX3RhYmxlLCB0aGlzKTsKLQotICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBQb2ludGVyVHlw
ZSBnZXQoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja1ZhbGlkaXR5KCk7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9wb3NpdGlvbjsKLSAgICAgICAgfQotICAgICAgICBSZWZlcmVu
Y2VUeXBlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQotICAgICAgICBQb2lu
dGVyVHlwZSBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KLQotICAgICAgICBj
b25zdF9pdGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNr
VmFsaWRpdHkoKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3Bvc2l0aW9uICE9IG1fZW5kUG9zaXRp
b24pOwotICAgICAgICAgICAgKyttX3Bvc2l0aW9uOwotICAgICAgICAgICAgc2tpcEVtcHR5QnVj
a2V0cygpOwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gcG9zdGZpeCArKyBpbnRlbnRpb25hbGx5IG9taXR0ZWQKLQotICAgICAgICAvLyBDb21wYXJp
c29uLgotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVy
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja1ZhbGlkaXR5KG90aGVyKTsKLSAg
ICAgICAgICAgIHJldHVybiBtX3Bvc2l0aW9uID09IG90aGVyLm1fcG9zaXRpb247Ci0gICAgICAg
IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tWYWxpZGl0eShvdGhlcik7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9wb3NpdGlvbiAhPSBvdGhlci5tX3Bvc2l0aW9uOwotICAgICAgICB9
Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqdGhpcyA9PSBzdGF0aWNfY2FzdDxjb25zdF9p
dGVyYXRvcj4ob3RoZXIpOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAq
dGhpcyAhPSBzdGF0aWNfY2FzdDxjb25zdF9pdGVyYXRvcj4ob3RoZXIpOwotICAgICAgICB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGNoZWNrVmFsaWRpdHkoKSBjb25zdAotICAgICAg
ICB7Ci0jaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwotICAgICAgICAgICAgQVNTRVJUKG1f
dGFibGUpOwotI2VuZGlmCi0gICAgICAgIH0KLQotCi0jaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJB
VE9SUwotICAgICAgICB2b2lkIGNoZWNrVmFsaWRpdHkoY29uc3QgY29uc3RfaXRlcmF0b3ImIG90
aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV90YWJsZSk7Ci0gICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKG90aGVyLCBvdGhlci5tX3RhYmxlKTsKLSAgICAgICAgICAg
IEFTU0VSVChtX3RhYmxlID09IG90aGVyLm1fdGFibGUpOwotICAgICAgICB9Ci0jZWxzZQotICAg
ICAgICB2b2lkIGNoZWNrVmFsaWRpdHkoY29uc3QgY29uc3RfaXRlcmF0b3ImKSBjb25zdCB7IH0K
LSNlbmRpZgotCi0gICAgICAgIFBvaW50ZXJUeXBlIG1fcG9zaXRpb24geyBudWxscHRyIH07Ci0g
ICAgICAgIFBvaW50ZXJUeXBlIG1fZW5kUG9zaXRpb24geyBudWxscHRyIH07Ci0KLSNpZiBDSEVD
S19IQVNIVEFCTEVfSVRFUkFUT1JTCi0gICAgcHVibGljOgotICAgICAgICAvLyBBbnkgbW9kaWZp
Y2F0aW9ucyBvZiB0aGUgbV9uZXh0IG9yIG1fcHJldmlvdXMgb2YgYW4gaXRlcmF0b3IgdGhhdCBp
cyBpbiBhIGxpbmtlZCBsaXN0IG9mIGEgSGFzaFRhYmxlOjptX2l0ZXJhdG9yLAotICAgICAgICAv
LyBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIG1fdGFibGUtPm1fbXV0ZXguCi0gICAgICAgIG11dGFi
bGUgY29uc3QgSGFzaFRhYmxlVHlwZSogbV90YWJsZTsKLSAgICAgICAgbXV0YWJsZSBjb25zdF9p
dGVyYXRvciogbV9uZXh0OwotICAgICAgICBtdXRhYmxlIGNvbnN0X2l0ZXJhdG9yKiBtX3ByZXZp
b3VzOwotI2VuZGlmCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgY2xhc3MgSGFzaFRhYmxlSXRl
cmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBW
YWx1ZSwgc3RkOjpwdHJkaWZmX3QsIFZhbHVlKiwgVmFsdWUmPiB7Ci0gICAgcHJpdmF0ZToKLSAg
ICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBI
YXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25z
dEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+IGNvbnN0X2l0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlw
ZTsKLSAgICAgICAgdHlwZWRlZiBWYWx1ZVR5cGUmIFJlZmVyZW5jZVR5cGU7Ci0gICAgICAgIHR5
cGVkZWYgVmFsdWVUeXBlKiBQb2ludGVyVHlwZTsKLQotICAgICAgICBmcmllbmQgY2xhc3MgSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+OwotCi0gICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5cGUqIHRhYmxl
LCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCkgOiBtX2l0ZXJhdG9yKHRhYmxlLCBw
b3MsIGVuZCkgeyB9Ci0gICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJsZVR5cGUqIHRh
YmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCwgSGFzaEl0ZW1Lbm93bkdvb2RU
YWcgdGFnKSA6IG1faXRlcmF0b3IodGFibGUsIHBvcywgZW5kLCB0YWcpIHsgfQotCi0gICAgcHVi
bGljOgotICAgICAgICBIYXNoVGFibGVJdGVyYXRvcigpIHsgfQotCi0gICAgICAgIC8vIGRlZmF1
bHQgY29weSwgYXNzaWdubWVudCBhbmQgZGVzdHJ1Y3RvciBhcmUgT0sKLQotICAgICAgICBQb2lu
dGVyVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PFBvaW50ZXJUeXBlPihtX2l0
ZXJhdG9yLmdldCgpKTsgfQotICAgICAgICBSZWZlcmVuY2VUeXBlIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuICpnZXQoKTsgfQotICAgICAgICBQb2ludGVyVHlwZSBvcGVyYXRvci0+KCkgY29u
c3QgeyByZXR1cm4gZ2V0KCk7IH0KLQotICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsg
KyttX2l0ZXJhdG9yOyByZXR1cm4gKnRoaXM7IH0KLQotICAgICAgICAvLyBwb3N0Zml4ICsrIGlu
dGVudGlvbmFsbHkgb21pdHRlZAotCi0gICAgICAgIC8vIENvbXBhcmlzb24uCi0gICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faXRl
cmF0b3IgPT0gb3RoZXIubV9pdGVyYXRvcjsgfQotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yICE9IG90aGVyLm1f
aXRlcmF0b3I7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9y
JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvciA9PSBvdGhlcjsgfQotICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVy
biBtX2l0ZXJhdG9yICE9IG90aGVyOyB9Ci0KLSAgICAgICAgb3BlcmF0b3IgY29uc3RfaXRlcmF0
b3IoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICBjb25zdF9pdGVyYXRvciBtX2l0ZXJhdG9yOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZVRyYWl0cywgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucz4gY2xhc3MgSWRlbnRpdHlI
YXNoVHJhbnNsYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUJiBrZXkpIHsgcmV0dXJuIEhhc2hGdW5jdGlv
bnM6Omhhc2goa2V5KTsgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBIYXNo
RnVuY3Rpb25zOjplcXVhbChhLCBiKTsgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24s
IGNvbnN0IFUmLCBWJiYgdmFsdWUpCi0gICAgICAgIHsgCi0gICAgICAgICAgICBWYWx1ZVRyYWl0
czo6YXNzaWduVG9FbXB0eShsb2NhdGlvbiwgc3RkOjpmb3J3YXJkPFY+KHZhbHVlKSk7IAotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4gc3Ry
dWN0IEhhc2hUYWJsZUFkZFJlc3VsdCB7Ci0gICAgICAgIEhhc2hUYWJsZUFkZFJlc3VsdCgpIDog
aXNOZXdFbnRyeShmYWxzZSkgeyB9Ci0gICAgICAgIEhhc2hUYWJsZUFkZFJlc3VsdChJdGVyYXRv
clR5cGUgaXRlciwgYm9vbCBpc05ld0VudHJ5KSA6IGl0ZXJhdG9yKGl0ZXIpLCBpc05ld0VudHJ5
KGlzTmV3RW50cnkpIHsgfQotICAgICAgICBJdGVyYXRvclR5cGUgaXRlcmF0b3I7Ci0gICAgICAg
IGJvb2wgaXNOZXdFbnRyeTsKLQotICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gaXNOZXdFbnRyeTsgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGNsYXNz
IEhhc2hUYWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJh
dG9yPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gY29u
c3RfaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgVHJhaXRzIFZhbHVlVHJhaXRzOwotICAgICAg
ICB0eXBlZGVmIEtleSBLZXlUeXBlOwotICAgICAgICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsK
LSAgICAgICAgdHlwZWRlZiBJZGVudGl0eUhhc2hUcmFuc2xhdG9yPFZhbHVlVHJhaXRzLCBIYXNo
RnVuY3Rpb25zPiBJZGVudGl0eVRyYW5zbGF0b3JUeXBlOwotICAgICAgICB0eXBlZGVmIEhhc2hU
YWJsZUFkZFJlc3VsdDxpdGVyYXRvcj4gQWRkUmVzdWx0OwotCi0jaWYgRFVNUF9IQVNIVEFCTEVf
U1RBVFNfUEVSX1RBQkxFCi0gICAgICAgIHN0cnVjdCBTdGF0cyB7Ci0gICAgICAgICAgICBTdGF0
cygpCi0gICAgICAgICAgICAgICAgOiBudW1BY2Nlc3NlcygwKQotICAgICAgICAgICAgICAgICwg
bnVtUmVoYXNoZXMoMCkKLSAgICAgICAgICAgICAgICAsIG51bVJlbW92ZXMoMCkKLSAgICAgICAg
ICAgICAgICAsIG51bVJlaW5zZXJ0cygwKQotICAgICAgICAgICAgICAgICwgbWF4Q29sbGlzaW9u
cygwKQotICAgICAgICAgICAgICAgICwgbnVtQ29sbGlzaW9ucygwKQotICAgICAgICAgICAgICAg
ICwgY29sbGlzaW9uR3JhcGgoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB1bnNpZ25lZCBudW1BY2Nlc3NlczsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bVJl
aGFzaGVzOwotICAgICAgICAgICAgdW5zaWduZWQgbnVtUmVtb3ZlczsKLSAgICAgICAgICAgIHVu
c2lnbmVkIG51bVJlaW5zZXJ0czsKLQotICAgICAgICAgICAgdW5zaWduZWQgbWF4Q29sbGlzaW9u
czsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bUNvbGxpc2lvbnM7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBjb2xsaXNpb25HcmFwaFs0MDk2XTsKLQotICAgICAgICAgICAgdm9pZCByZWNvcmRDb2xs
aXNpb25BdENvdW50KHVuc2lnbmVkIGNvdW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGlmIChjb3VudCA+IG1heENvbGxpc2lvbnMpCi0gICAgICAgICAgICAgICAgICAgIG1heENv
bGxpc2lvbnMgPSBjb3VudDsKLSAgICAgICAgICAgICAgICBudW1Db2xsaXNpb25zKys7Ci0gICAg
ICAgICAgICAgICAgY29sbGlzaW9uR3JhcGhbY291bnRdKys7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHZvaWQgZHVtcFN0YXRzKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nRigiXG5XVEY6Okhhc2hUYWJsZTo6U3RhdHMgZHVtcFxuXG4iKTsKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiJWQgYWNjZXNzZXNcbiIsIG51bUFjY2Vzc2VzKTsKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiJWQgdG90YWwgY29sbGlzaW9ucywgYXZlcmFnZSAlLjJmIHByb2Jl
cyBwZXIgYWNjZXNzXG4iLCBudW1Db2xsaXNpb25zLCAxLjAgKiAobnVtQWNjZXNzZXMgKyBudW1D
b2xsaXNpb25zKSAvIG51bUFjY2Vzc2VzKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigibG9u
Z2VzdCBjb2xsaXNpb24gY2hhaW46ICVkXG4iLCBtYXhDb2xsaXNpb25zKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG1heENvbGxpc2lvbnM7IGkrKykgewotICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAlZCBsb29rdXBzIHdpdGggZXhhY3RseSAlZCBj
b2xsaXNpb25zICglLjJmJSUgLCAlLjJmJSUgd2l0aCB0aGlzIG1hbnkgb3IgbW9yZSlcbiIsIGNv
bGxpc2lvbkdyYXBoW2ldLCBpLCAxMDAuMCAqIChjb2xsaXNpb25HcmFwaFtpXSAtIGNvbGxpc2lv
bkdyYXBoW2krMV0pIC8gbnVtQWNjZXNzZXMsIDEwMC4wICogY29sbGlzaW9uR3JhcGhbaV0gLyBu
dW1BY2Nlc3Nlcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIlZCByZWhhc2hlc1xuIiwgbnVtUmVoYXNoZXMpOwotICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIlZCByZWluc2VydHNcbiIsIG51bVJlaW5zZXJ0cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH07Ci0jZW5kaWYKLQotICAgICAgICBIYXNoVGFibGUoKTsKLSAgICAgICAgfkhhc2hUYWJsZSgp
IAotICAgICAgICB7Ci0gICAgICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7IAotICAgICAg
ICAgICAgaWYgKG1fdGFibGUpCi0gICAgICAgICAgICAgICAgZGVhbGxvY2F0ZVRhYmxlKG1fdGFi
bGUsIG1fdGFibGVTaXplKTsKLSNpZiBDSEVDS19IQVNIVEFCTEVfVVNFX0FGVEVSX0RFU1RSVUNU
SU9OCi0gICAgICAgICAgICBtX3RhYmxlID0gKFZhbHVlVHlwZSopKHVpbnRwdHJfdCkweGJiYWRi
ZWVmOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBIYXNoVGFibGUoY29uc3QgSGFzaFRh
YmxlJik7Ci0gICAgICAgIHZvaWQgc3dhcChIYXNoVGFibGUmKTsKLSAgICAgICAgSGFzaFRhYmxl
JiBvcGVyYXRvcj0oY29uc3QgSGFzaFRhYmxlJik7Ci0KLSAgICAgICAgSGFzaFRhYmxlKEhhc2hU
YWJsZSYmKTsKLSAgICAgICAgSGFzaFRhYmxlJiBvcGVyYXRvcj0oSGFzaFRhYmxlJiYpOwotCi0g
ICAgICAgIC8vIFdoZW4gdGhlIGhhc2ggdGFibGUgaXMgZW1wdHksIGp1c3QgcmV0dXJuIHRoZSBz
YW1lIGl0ZXJhdG9yIGZvciBlbmQgYXMgZm9yIGJlZ2luLgotICAgICAgICAvLyBUaGlzIGlzIG1v
cmUgZWZmaWNpZW50IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0byBza2lwIGFsbCB0aGUgZW1wdHkg
YW5kIGRlbGV0ZWQKLSAgICAgICAgLy8gYnVja2V0cywgYW5kIGl0ZXJhdGluZyBhbiBlbXB0eSB0
YWJsZSBpcyBhIGNvbW1vbiBjYXNlIHRoYXQncyB3b3J0aCBvcHRpbWl6aW5nLgotICAgICAgICBp
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGlzRW1wdHkoKSA/IGVuZCgpIDogbWFrZUl0ZXJhdG9y
KG1fdGFibGUpOyB9Ci0gICAgICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1ha2VLbm93bkdv
b2RJdGVyYXRvcihtX3RhYmxlICsgbV90YWJsZVNpemUpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXNFbXB0eSgpID8gZW5kKCkgOiBtYWtlQ29uc3RJ
dGVyYXRvcihtX3RhYmxlKTsgfQotICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRvcihtX3RhYmxlICsgbV90YWJsZVNpemUp
OyB9Ci0KLSAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5Q291bnQ7
IH0KLSAgICAgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlU2l6
ZTsgfQotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9rZXlDb3VudDsg
fQotCi0gICAgICAgIEFkZFJlc3VsdCBhZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1
cm4gYWRkPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSks
IHZhbHVlKTsgfQotICAgICAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmIHZhbHVlKSB7IHJl
dHVybiBhZGQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVl
KSwgV1RGTW92ZSh2YWx1ZSkpOyB9Ci0KLSAgICAgICAgLy8gQSBzcGVjaWFsIHZlcnNpb24gb2Yg
YWRkKCkgdGhhdCBmaW5kcyB0aGUgb2JqZWN0IGJ5IGhhc2hpbmcgYW5kIGNvbXBhcmluZwotICAg
ICAgICAvLyB3aXRoIHNvbWUgb3RoZXIgdHlwZSwgdG8gYXZvaWQgdGhlIGNvc3Qgb2YgdHlwZSBj
b252ZXJzaW9uIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQotICAgICAgICAvLyBpbiB0aGUgdGFi
bGUuCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeHRyYT4gQWRkUmVzdWx0IGFkZChUJiYga2V5LCBFeHRyYSYmKTsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEV4dHJhPiBBZGRSZXN1bHQgYWRkUGFzc2luZ0hhc2hDb2RlKFQmJiBrZXksIEV4dHJhJiYpOwot
Ci0gICAgICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYga2V5KSB7IHJldHVybiBmaW5k
PElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0KLSAgICAgICAgY29uc3RfaXRlcmF0b3Ig
ZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0IHsgcmV0dXJuIGZpbmQ8SWRlbnRpdHlUcmFu
c2xhdG9yVHlwZT4oa2V5KTsgfQotICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEtleVR5cGUm
IGtleSkgY29uc3QgeyByZXR1cm4gY29udGFpbnM8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5
KTsgfQotCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgVCYp
IGNvbnN0OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5h
bWUgVD4gYm9vbCBjb250YWlucyhjb25zdCBUJikgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCByZW1v
dmUoY29uc3QgS2V5VHlwZSYpOwotICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvcik7Ci0gICAg
ICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhpdGVyYXRvcik7Ci0g
ICAgICAgIHZvaWQgcmVtb3ZlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhjb25zdF9pdGVy
YXRvcik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgICAgIHZvaWQg
cmVtb3ZlSWYoY29uc3QgRnVuY3RvciYpOwotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICAg
ICAgc3RhdGljIGJvb2wgaXNFbXB0eUJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJl
dHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4oRXh0cmFjdG9yOjpleHRyYWN0
KHZhbHVlKSk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkQnVja2V0KGNvbnN0IFZh
bHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIEtleVRyYWl0czo6aXNEZWxldGVkVmFsdWUoRXh0cmFj
dG9yOjpleHRyYWN0KHZhbHVlKSk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgaXNFbXB0eU9yRGVs
ZXRlZEJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpc0VtcHR5QnVja2V0
KHZhbHVlKSB8fCBpc0RlbGV0ZWRCdWNrZXQodmFsdWUpOyB9Ci0KLSAgICAgICAgVmFsdWVUeXBl
KiBsb29rdXAoY29uc3QgS2V5JiBrZXkpIHsgcmV0dXJuIGxvb2t1cDxJZGVudGl0eVRyYW5zbGF0
b3JUeXBlPihrZXkpOyB9Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9y
LCB0eXBlbmFtZSBUPiBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBUJik7Ci0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBWYWx1ZVR5cGUqIGlubGlu
ZUxvb2t1cChjb25zdCBUJik7Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICB2b2lkIGNo
ZWNrVGFibGVDb25zaXN0ZW5jeSgpIGNvbnN0OwotI2Vsc2UKLSAgICAgICAgc3RhdGljIHZvaWQg
Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgeyB9Ci0jZW5kaWYKLSNpZiBDSEVDS19IQVNIVEFCTEVf
Q09OU0lTVEVOQ1kKLSAgICAgICAgdm9pZCBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgp
IGNvbnN0IHsgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7IH0KLSAgICAgICAgdm9pZCBpbnRlcm5h
bENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSBjb25zdCB7IGNoZWNrVGFibGVDb25z
aXN0ZW5jeUV4Y2VwdFNpemUoKTsgfQotI2Vsc2UKLSAgICAgICAgc3RhdGljIHZvaWQgaW50ZXJu
YWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXplKCkgeyB9Ci0gICAgICAgIHN0YXRpYyB2
b2lkIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgeyB9Ci0jZW5kaWYKLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIHN0YXRpYyBWYWx1ZVR5cGUqIGFsbG9jYXRlVGFibGUodW5zaWduZWQg
c2l6ZSk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGVUYWJsZShWYWx1ZVR5cGUqIHRh
YmxlLCB1bnNpZ25lZCBzaXplKTsKLQotICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxWYWx1ZVR5
cGUqLCBib29sPiBMb29rdXBUeXBlOwotICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxMb29rdXBU
eXBlLCB1bnNpZ25lZD4gRnVsbExvb2t1cFR5cGU7Ci0KLSAgICAgICAgTG9va3VwVHlwZSBsb29r
dXBGb3JXcml0aW5nKGNvbnN0IEtleSYga2V5KSB7IHJldHVybiBsb29rdXBGb3JXcml0aW5nPElk
ZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH07Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBGdWxsTG9va3VwVHlwZSBmdWxsTG9va3VwRm9y
V3JpdGluZyhjb25zdCBUJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBUPiBMb29rdXBUeXBlIGxvb2t1cEZvcldyaXRpbmcoY29uc3QgVCYpOwot
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0
eXBlbmFtZSBFeHRyYT4gdm9pZCBhZGRVbmlxdWVGb3JJbml0aWFsaXphdGlvbihUJiYga2V5LCBF
eHRyYSYmKTsKLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlw
ZW5hbWUgVD4gdm9pZCBjaGVja0tleShjb25zdCBUJik7Ci0KLSAgICAgICAgdm9pZCByZW1vdmVB
bmRJbnZhbGlkYXRlV2l0aG91dEVudHJ5Q29uc2lzdGVuY3lDaGVjayhWYWx1ZVR5cGUqKTsKLSAg
ICAgICAgdm9pZCByZW1vdmVBbmRJbnZhbGlkYXRlKFZhbHVlVHlwZSopOwotICAgICAgICB2b2lk
IHJlbW92ZShWYWx1ZVR5cGUqKTsKLQotICAgICAgICBib29sIHNob3VsZEV4cGFuZCgpIGNvbnN0
IHsgcmV0dXJuIChtX2tleUNvdW50ICsgbV9kZWxldGVkQ291bnQpICogbV9tYXhMb2FkID49IG1f
dGFibGVTaXplOyB9Ci0gICAgICAgIGJvb2wgbXVzdFJlaGFzaEluUGxhY2UoKSBjb25zdCB7IHJl
dHVybiBtX2tleUNvdW50ICogbV9taW5Mb2FkIDwgbV90YWJsZVNpemUgKiAyOyB9Ci0gICAgICAg
IGJvb2wgc2hvdWxkU2hyaW5rKCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudCAqIG1fbWluTG9h
ZCA8IG1fdGFibGVTaXplICYmIG1fdGFibGVTaXplID4gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVT
aXplOyB9Ci0gICAgICAgIFZhbHVlVHlwZSogZXhwYW5kKFZhbHVlVHlwZSogZW50cnkgPSBudWxs
cHRyKTsKLSAgICAgICAgdm9pZCBzaHJpbmsoKSB7IHJlaGFzaChtX3RhYmxlU2l6ZSAvIDIsIG51
bGxwdHIpOyB9Ci0KLSAgICAgICAgVmFsdWVUeXBlKiByZWhhc2godW5zaWduZWQgbmV3VGFibGVT
aXplLCBWYWx1ZVR5cGUqIGVudHJ5KTsKLSAgICAgICAgVmFsdWVUeXBlKiByZWluc2VydChWYWx1
ZVR5cGUmJik7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUJ1Y2tldChWYWx1ZVR5
cGUmIGJ1Y2tldCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUJ1Y2tldChWYWx1ZVR5cGUm
IGJ1Y2tldCkgeyBoYXNoVHJhaXRzRGVsZXRlQnVja2V0PFRyYWl0cz4oYnVja2V0KTsgfQotCi0g
ICAgICAgIEZ1bGxMb29rdXBUeXBlIG1ha2VMb29rdXBSZXN1bHQoVmFsdWVUeXBlKiBwb3NpdGlv
biwgYm9vbCBmb3VuZCwgdW5zaWduZWQgaGFzaCkKLSAgICAgICAgICAgIHsgcmV0dXJuIEZ1bGxM
b29rdXBUeXBlKExvb2t1cFR5cGUocG9zaXRpb24sIGZvdW5kKSwgaGFzaCk7IH0KLQotICAgICAg
ICBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9y
KHRoaXMsIHBvcywgbV90YWJsZSArIG1fdGFibGVTaXplKTsgfQotICAgICAgICBjb25zdF9pdGVy
YXRvciBtYWtlQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4gY29u
c3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgbV90YWJsZVNpemUpOyB9Ci0gICAgICAg
IGl0ZXJhdG9yIG1ha2VLbm93bkdvb2RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgeyByZXR1cm4g
aXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgbV90YWJsZVNpemUsIEhhc2hJdGVtS25vd25H
b29kKTsgfQotICAgICAgICBjb25zdF9pdGVyYXRvciBtYWtlS25vd25Hb29kQ29uc3RJdGVyYXRv
cihWYWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgcG9z
LCBtX3RhYmxlICsgbV90YWJsZVNpemUsIEhhc2hJdGVtS25vd25Hb29kKTsgfQotCi0jaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICAgICAgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRTaXpl
KCkgY29uc3Q7Ci0jZWxzZQotICAgICAgICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVu
Y3lFeGNlcHRTaXplKCkgeyB9Ci0jZW5kaWYKLQotI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRP
UlMKLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0jZWxzZQotICAgICAgICBz
dGF0aWMgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9Ci0jZW5kaWYKLQotICAgICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbV9tYXhMb2FkID0gMjsKLSAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1fbWluTG9hZCA9IDY7Ci0KLSAgICAgICAgVmFsdWVUeXBlKiBtX3RhYmxlOwot
ICAgICAgICB1bnNpZ25lZCBtX3RhYmxlU2l6ZTsKLSAgICAgICAgdW5zaWduZWQgbV90YWJsZVNp
emVNYXNrOwotICAgICAgICB1bnNpZ25lZCBtX2tleUNvdW50OwotICAgICAgICB1bnNpZ25lZCBt
X2RlbGV0ZWRDb3VudDsKLQotI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKLSAgICBwdWJs
aWM6Ci0gICAgICAgIC8vIEFsbCBhY2Nlc3MgdG8gbV9pdGVyYXRvcnMgc2hvdWxkIGJlIGd1YXJk
ZWQgd2l0aCBtX211dGV4LgotICAgICAgICBtdXRhYmxlIGNvbnN0X2l0ZXJhdG9yKiBtX2l0ZXJh
dG9yczsKLSAgICAgICAgLy8gVXNlIHN0ZDo6dW5pcXVlX3B0ciBzbyBIYXNoVGFibGUgY2FuIHN0
aWxsIGJlIG1lbW1vdmUnZCBvciBtZW1jcHknZWQuCi0gICAgICAgIG11dGFibGUgc3RkOjp1bmlx
dWVfcHRyPExvY2s+IG1fbXV0ZXg7Ci0jZW5kaWYKLQotI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRT
X1BFUl9UQUJMRQotICAgIHB1YmxpYzoKLSAgICAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
U3RhdHM+IG1fc3RhdHM7Ci0jZW5kaWYKLSAgICB9OwotCi0gICAgLy8gU2V0IGFsbCB0aGUgYml0
cyB0byBvbmUgYWZ0ZXIgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0OiAwMDExMDEwMTAxMCAtPiAw
MDExMTExMTExMS4KLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBzdHJ1Y3QgT25laWZ5TG93
Qml0czsKLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IE9uZWlmeUxvd0JpdHM8MD4gewotICAg
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAwOwotICAgIH07Ci0gICAgdGVtcGxh
dGU8dW5zaWduZWQgbnVtYmVyPgotICAgIHN0cnVjdCBPbmVpZnlMb3dCaXRzIHsKLSAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gbnVtYmVyIHwgT25laWZ5TG93Qml0czwobnVt
YmVyID4+IDEpPjo6dmFsdWU7Ci0gICAgfTsKLSAgICAvLyBDb21wdXRlIHRoZSBmaXJzdCBwb3dl
ciBvZiB0d28gaW50ZWdlciB0aGF0IGlzIGFuIHVwcGVyIGJvdW5kIG9mIHRoZSBwYXJhbWV0ZXIg
J251bWJlcicuCi0gICAgdGVtcGxhdGU8dW5zaWduZWQgbnVtYmVyPgotICAgIHN0cnVjdCBVcHBl
clBvd2VyT2ZUd29Cb3VuZCB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9
IChPbmVpZnlMb3dCaXRzPG51bWJlciAtIDE+Ojp2YWx1ZSArIDEpICogMjsKLSAgICB9OwotCi0g
ICAgLy8gQmVjYXVzZSBwb3dlciBvZiB0d28gbnVtYmVycyBhcmUgdGhlIGxpbWl0IG9mIG1heExv
YWQsIHRoZWlyIGNhcGFjaXR5IGlzIHR3aWNlIHRoZQotICAgIC8vIFVwcGVyUG93ZXJPZlR3b0Jv
dW5kLCBvciA0IHRpbWVzIHRoZWlyIHZhbHVlcy4KLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBzaXpl
LCBib29sIGlzUG93ZXJPZlR3bz4gc3RydWN0IEhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZVNwbGl0
dGVyOwotICAgIHRlbXBsYXRlPHVuc2lnbmVkIHNpemU+Ci0gICAgc3RydWN0IEhhc2hUYWJsZUNh
cGFjaXR5Rm9yU2l6ZVNwbGl0dGVyPHNpemUsIHRydWU+IHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHZhbHVlID0gc2l6ZSAqIDQ7Ci0gICAgfTsKLSAgICB0ZW1wbGF0ZTx1bnNpZ25l
ZCBzaXplPgotICAgIHN0cnVjdCBIYXNoVGFibGVDYXBhY2l0eUZvclNpemVTcGxpdHRlcjxzaXpl
LCBmYWxzZT4gewotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSBVcHBlclBv
d2VyT2ZUd29Cb3VuZDxzaXplPjo6dmFsdWU7Ci0gICAgfTsKLQotICAgIC8vIEhhc2hUYWJsZUNh
cGFjaXR5Rm9yU2l6ZSBjb21wdXRlcyB0aGUgdXBwZXIgcG93ZXIgb2YgdHdvIGNhcGFjaXR5IHRv
IGhvbGQgdGhlIHNpemUgcGFyYW1ldGVyLgotICAgIC8vIFRoaXMgaXMgZG9uZSBhdCBjb21waWxl
IHRpbWUgdG8gaW5pdGlhbGl6ZSB0aGUgSGFzaFRyYWl0cy4KLSAgICB0ZW1wbGF0ZTx1bnNpZ25l
ZCBzaXplPgotICAgIHN0cnVjdCBIYXNoVGFibGVDYXBhY2l0eUZvclNpemUgewotICAgICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSBIYXNoVGFibGVDYXBhY2l0eUZvclNpemVTcGxp
dHRlcjxzaXplLCAhKHNpemUgJiAoc2l6ZSAtIDEpKT46OnZhbHVlOwotICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplID4gMCwgSGFzaFRhYmxlTm9uWmVyb01pbmltdW1DYXBhY2l0eSk7Ci0gICAg
ICAgIENPTVBJTEVfQVNTRVJUKCFzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUgPj4gMzEpLCBI
YXNoVGFibGVOb0NhcGFjaXR5T3ZlcmZsb3cpOwotICAgICAgICBDT01QSUxFX0FTU0VSVCh2YWx1
ZSA+ICgyICogc2l6ZSksIEhhc2hUYWJsZUNhcGFjaXR5SG9sZHNDb250ZW50U2l6ZSk7Ci0gICAg
fTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBl
bmFtZSBLZXlUcmFpdHM+Ci0gICAgaW5saW5lIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6SGFzaFRhYmxlKCkKLSAgICAg
ICAgOiBtX3RhYmxlKDApCi0gICAgICAgICwgbV90YWJsZVNpemUoMCkKLSAgICAgICAgLCBtX3Rh
YmxlU2l6ZU1hc2soMCkKLSAgICAgICAgLCBtX2tleUNvdW50KDApCi0gICAgICAgICwgbV9kZWxl
dGVkQ291bnQoMCkKLSNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCi0gICAgICAgICwgbV9p
dGVyYXRvcnMoMCkKLSAgICAgICAgLCBtX211dGV4KHN0ZDo6bWFrZV91bmlxdWU8TG9jaz4oKSkK
LSNlbmRpZgotI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQotICAgICAgICAsIG1f
c3RhdHMoc3RkOjptYWtlX3VuaXF1ZTxTdGF0cz4oKSkKLSNlbmRpZgotICAgIHsKLSAgICB9Ci0K
LSAgICBpbmxpbmUgdW5zaWduZWQgZG91YmxlSGFzaCh1bnNpZ25lZCBrZXkpCi0gICAgewotICAg
ICAgICBrZXkgPSB+a2V5ICsgKGtleSA+PiAyMyk7Ci0gICAgICAgIGtleSBePSAoa2V5IDw8IDEy
KTsKLSAgICAgICAga2V5IF49IChrZXkgPj4gNyk7Ci0gICAgICAgIGtleSBePSAoa2V5IDw8IDIp
OwotICAgICAgICBrZXkgXj0gKGtleSA+PiAyMCk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAg
fQotCi0jaWYgIUFTU0VSVF9FTkFCTEVECi0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotICAgIGlubGluZSB2b2lkIEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
Pjo6Y2hlY2tLZXkoY29uc3QgVCYpCi0gICAgewotICAgIH0KLQotI2Vsc2UKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+Ci0gICAg
dm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz46OmNoZWNrS2V5KGNvbnN0IFQmIGtleSkKLSAgICB7Ci0gICAgICAgIGlm
ICghSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCghSGFzaFRyYW5zbGF0b3I6OmVxdWFsKEtleVRy
YWl0czo6ZW1wdHlWYWx1ZSgpLCBrZXkpKTsKLSAgICAgICAgdHlwZW5hbWUgc3RkOjphbGlnbmVk
X3N0b3JhZ2U8c2l6ZW9mKFZhbHVlVHlwZSksIHN0ZDo6YWxpZ25tZW50X29mPFZhbHVlVHlwZT46
OnZhbHVlPjo6dHlwZSBkZWxldGVkVmFsdWVCdWZmZXI7Ci0gICAgICAgIFZhbHVlVHlwZSogZGVs
ZXRlZFZhbHVlUHRyID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8VmFsdWVUeXBlKj4oJmRlbGV0ZWRW
YWx1ZUJ1ZmZlcik7Ci0gICAgICAgIFZhbHVlVHlwZSYgZGVsZXRlZFZhbHVlID0gKmRlbGV0ZWRW
YWx1ZVB0cjsKLSAgICAgICAgVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUoZGVsZXRlZFZh
bHVlKTsKLSAgICAgICAgQVNTRVJUKCFIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpl
eHRyYWN0KGRlbGV0ZWRWYWx1ZSksIGtleSkpOwotICAgIH0KLQotI2VuZGlmCi0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotICAg
IGlubGluZSBhdXRvIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6bG9va3VwKGNvbnN0IFQmIGtleSkgLT4gVmFsdWVUeXBl
KgotICAgIHsKLSAgICAgICAgcmV0dXJuIGlubGluZUxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBUPgotICAgIEFMV0FZU19JTkxJTkUgYXV0byBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmlubGlu
ZUxvb2t1cChjb25zdCBUJiBrZXkpIC0+IFZhbHVlVHlwZSoKLSAgICB7Ci0gICAgICAgIGNoZWNr
S2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOwotCi0gICAgICAgIHVuc2lnbmVkIGsgPSAwOwotICAg
ICAgICB1bnNpZ25lZCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKLSAgICAgICAgVmFsdWVU
eXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRv
cjo6aGFzaChrZXkpOwotICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwotCi0gICAg
ICAgIGlmICghdGFibGUpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotI2lmIERVTVBfSEFTSFRB
QkxFX1NUQVRTCi0gICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOwotICAgICAg
ICB1bnNpZ25lZCBwcm9iZUNvdW50ID0gMDsKLSNlbmRpZgotCi0jaWYgRFVNUF9IQVNIVEFCTEVf
U1RBVFNfUEVSX1RBQkxFCi0gICAgICAgICsrbV9zdGF0cy0+bnVtQWNjZXNzZXM7Ci0jZW5kaWYK
LQotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IHRh
YmxlICsgaTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIHdlIGNvdW50IG9uIHRo
ZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFuY2gKLSAgICAgICAgICAgIGlmIChI
YXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCkgewotICAgICAgICAg
ICAgICAgIGlmIChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRy
eSksIGtleSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzRW1wdHlCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFpc0RlbGV0ZWRC
dWNrZXQoKmVudHJ5KSAmJiBIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0
KCplbnRyeSksIGtleSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKLSAgICAg
ICAgICAgIH0KLSNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwotICAgICAgICAgICAgKytwcm9iZUNv
dW50OwotICAgICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQo
cHJvYmVDb3VudCk7Ci0jZW5kaWYKLQotI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJM
RQotICAgICAgICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50
KTsKLSNlbmRpZgotCi0gICAgICAgICAgICBpZiAoayA9PSAwKQotICAgICAgICAgICAgICAgIGsg
PSAxIHwgZG91YmxlSGFzaChoKTsKLSAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgotICAgIGlubGluZSBhdXRvIEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6bG9v
a3VwRm9yV3JpdGluZyhjb25zdCBUJiBrZXkpIC0+IExvb2t1cFR5cGUKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX3RhYmxlKTsKLSAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7
Ci0KLSAgICAgICAgdW5zaWduZWQgayA9IDA7Ci0gICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBt
X3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKLSAg
ICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIHVu
c2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7Ci0KLSNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwotICAg
ICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKLSAgICAgICAgdW5zaWduZWQgcHJv
YmVDb3VudCA9IDA7Ci0jZW5kaWYKLQotI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJM
RQotICAgICAgICArK21fc3RhdHMtPm51bUFjY2Vzc2VzOwotI2VuZGlmCi0KLSAgICAgICAgVmFs
dWVUeXBlKiBkZWxldGVkRW50cnkgPSAwOwotCi0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAg
ICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gdGFibGUgKyBpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyB3ZSBjb3VudCBvbiB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgb3V0IHRoaXMgYnJh
bmNoCi0gICAgICAgICAgICBpZiAoSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRvRW1wdHlP
ckRlbGV0ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTG9va3VwVHlwZShkZWxldGVkRW50cnkgPyBkZWxl
dGVkRW50cnkgOiBlbnRyeSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmIChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSks
IGtleSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBMb29rdXBUeXBlKGVudHJ5LCB0cnVl
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0
KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50
cnkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTG9va3VwVHlwZShkZWxldGVkRW50cnkg
PyBkZWxldGVkRW50cnkgOiBlbnRyeSwgZmFsc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKQotICAgICAgICAgICAgICAgICAgICBk
ZWxldGVkRW50cnkgPSBlbnRyeTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChIYXNoVHJhbnNs
YXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0KCplbnRyeSksIGtleSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBMb29rdXBUeXBlKGVudHJ5LCB0cnVlKTsKLSAgICAgICAgICAgIH0K
LSNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwotICAgICAgICAgICAgKytwcm9iZUNvdW50OwotICAg
ICAgICAgICAgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3Vu
dCk7Ci0jZW5kaWYKLQotI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQotICAgICAg
ICAgICAgbV9zdGF0cy0+cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKLSNlbmRp
ZgotCi0gICAgICAgICAgICBpZiAoayA9PSAwKQotICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91
YmxlSGFzaChoKTsKLSAgICAgICAgICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBUPgotICAgIGlubGluZSBhdXRvIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBF
eHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6ZnVsbExvb2t1cEZv
cldyaXRpbmcoY29uc3QgVCYga2V5KSAtPiBGdWxsTG9va3VwVHlwZQotICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fdGFibGUpOwotICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsK
LQotICAgICAgICB1bnNpZ25lZCBrID0gMDsKLSAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1f
dGFibGU7Ci0gICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNrOwotICAg
ICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgdW5z
aWduZWQgaSA9IGggJiBzaXplTWFzazsKLQotI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCi0gICAg
ICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOwotICAgICAgICB1bnNpZ25lZCBwcm9i
ZUNvdW50ID0gMDsKLSNlbmRpZgotCi0jaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxF
Ci0gICAgICAgICsrbV9zdGF0cy0+bnVtQWNjZXNzZXM7Ci0jZW5kaWYKLQotICAgICAgICBWYWx1
ZVR5cGUqIGRlbGV0ZWRFbnRyeSA9IDA7Ci0KLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAg
ICAgIFZhbHVlVHlwZSogZW50cnkgPSB0YWJsZSArIGk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIHdlIGNvdW50IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQgdGhpcyBicmFu
Y2gKLSAgICAgICAgICAgIGlmIChIYXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCkgewotICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlTG9va3VwUmVzdWx0KGRlbGV0ZWRFbnRyeSA/
IGRlbGV0ZWRFbnRyeSA6IGVudHJ5LCBmYWxzZSwgaCk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3Qo
KmVudHJ5KSwga2V5KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMb29rdXBSZXN1
bHQoZW50cnksIHRydWUsIGgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
IChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEVu
dHJ5ID0gZW50cnk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChp
c0VtcHR5QnVja2V0KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlTG9v
a3VwUmVzdWx0KGRlbGV0ZWRFbnRyeSA/IGRlbGV0ZWRFbnRyeSA6IGVudHJ5LCBmYWxzZSwgaCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRy
eSkpCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRFbnRyeSA9IGVudHJ5OwotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKEhhc2hUcmFuc2xhdG9yOjplcXVhbChFeHRyYWN0b3I6OmV4dHJhY3Qo
KmVudHJ5KSwga2V5KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VMb29rdXBSZXN1
bHQoZW50cnksIHRydWUsIGgpOwotICAgICAgICAgICAgfQotI2lmIERVTVBfSEFTSFRBQkxFX1NU
QVRTCi0gICAgICAgICAgICArK3Byb2JlQ291bnQ7Ci0gICAgICAgICAgICBIYXNoVGFibGVTdGF0
czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50KTsKLSNlbmRpZgotCi0jaWYgRFVN
UF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCi0gICAgICAgICAgICBtX3N0YXRzLT5yZWNvcmRD
b2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIGlmIChr
ID09IDApCi0gICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKGgpOwotICAgICAgICAg
ICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEV4dHJhPgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmFkZFVuaXF1ZUZv
ckluaXRpYWxpemF0aW9uKFQmJiBrZXksIEV4dHJhJiYgZXh0cmEpCi0gICAgewotICAgICAgICBB
U1NFUlQobV90YWJsZSk7Ci0KLSAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7
Ci0KLSAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwotCi0gICAgICAgIGludGVybmFsQ2hl
Y2tUYWJsZUNvbnNpc3RlbmN5KCk7Ci0KLSAgICAgICAgdW5zaWduZWQgayA9IDA7Ci0gICAgICAg
IFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9
IG1fdGFibGVTaXplTWFzazsKLSAgICAgICAgdW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpo
YXNoKGtleSk7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7Ci0KLSNpZiBEVU1Q
X0hBU0hUQUJMRV9TVEFUUwotICAgICAgICArK0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsK
LSAgICAgICAgdW5zaWduZWQgcHJvYmVDb3VudCA9IDA7Ci0jZW5kaWYKLQotI2lmIERVTVBfSEFT
SFRBQkxFX1NUQVRTX1BFUl9UQUJMRQotICAgICAgICArK21fc3RhdHMtPm51bUFjY2Vzc2VzOwot
I2VuZGlmCi0KLSAgICAgICAgVmFsdWVUeXBlKiBlbnRyeTsKLSAgICAgICAgd2hpbGUgKDEpIHsK
LSAgICAgICAgICAgIGVudHJ5ID0gdGFibGUgKyBpOwotCi0gICAgICAgICAgICBpZiAoaXNFbXB0
eUJ1Y2tldCgqZW50cnkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgRFVNUF9IQVNI
VEFCTEVfU1RBVFMKLSAgICAgICAgICAgICsrcHJvYmVDb3VudDsKLSAgICAgICAgICAgIEhhc2hU
YWJsZVN0YXRzOjpyZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwotI2VuZGlmCi0K
LSNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKLSAgICAgICAgICAgIG1fc3RhdHMt
PnJlY29yZENvbGxpc2lvbkF0Q291bnQocHJvYmVDb3VudCk7Ci0jZW5kaWYKLQotICAgICAgICAg
ICAgaWYgKGsgPT0gMCkKLSAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goaCk7Ci0g
ICAgICAgICAgICBpID0gKGkgKyBrKSAmIHNpemVNYXNrOwotICAgICAgICB9Ci0KLSAgICAgICAg
SGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBz
dGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSk7Ci0KLSAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxl
Q29uc2lzdGVuY3koKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxib29sIGVtcHR5VmFsdWVJc1pl
cm8+IHN0cnVjdCBIYXNoVGFibGVCdWNrZXRJbml0aWFsaXplcjsKLQotICAgIHRlbXBsYXRlPD4g
c3RydWN0IEhhc2hUYWJsZUJ1Y2tldEluaXRpYWxpemVyPGZhbHNlPiB7Ci0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVmFsdWU+IHN0YXRpYyB2b2lkIGluaXRpYWxp
emUoVmFsdWUmIGJ1Y2tldCkKLSAgICAgICAgewotICAgICAgICAgICAgbmV3IChOb3ROdWxsLCBz
dGQ6OmFkZHJlc3NvZihidWNrZXQpKSBWYWx1ZShUcmFpdHM6OmVtcHR5VmFsdWUoKSk7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRhYmxlQnVja2V0SW5p
dGlhbGl6ZXI8dHJ1ZT4gewotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIFZhbHVlPiBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFZhbHVlJiBidWNrZXQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIGJ1Y2tldCB3aXRob3V0IGNv
cHlpbmcgdGhlIGVtcHR5IHZhbHVlLgotICAgICAgICAgICAgLy8gVGhhdCBtYWtlcyBpdCBwb3Nz
aWJsZSB0byB1c2UgdGhpcyB3aXRoIHR5cGVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBjb3B5aW5nLgot
ICAgICAgICAgICAgLy8gVGhlIG1lbXNldCB0byAwIGxvb2tzIGxpa2UgYSBzbG93IG9wZXJhdGlv
biBidXQgaXMgb3B0aW1pemVkIGJ5IHRoZSBjb21waWxlcnMuCi0gICAgICAgICAgICBtZW1zZXQo
c3RkOjphZGRyZXNzb2YoYnVja2V0KSwgMCwgc2l6ZW9mKGJ1Y2tldCkpOwotICAgICAgICB9Ci0g
ICAgfTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGlubGluZSB2b2lkIEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6aW5pdGlh
bGl6ZUJ1Y2tldChWYWx1ZVR5cGUmIGJ1Y2tldCkKLSAgICB7Ci0gICAgICAgIEhhc2hUYWJsZUJ1
Y2tldEluaXRpYWxpemVyPFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybz46OnRlbXBsYXRlIGluaXRp
YWxpemU8VHJhaXRzPihidWNrZXQpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0
aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPgotICAg
IEFMV0FZU19JTkxJTkUgYXV0byBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmFkZChUJiYga2V5LCBFeHRyYSYmIGV4dHJh
KSAtPiBBZGRSZXN1bHQKLSAgICB7Ci0gICAgICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihr
ZXkpOwotCi0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKLQotICAgICAgICBpZiAoIW1f
dGFibGUpCi0gICAgICAgICAgICBleHBhbmQobnVsbHB0cik7Ci0KLSAgICAgICAgaW50ZXJuYWxD
aGVja1RhYmxlQ29uc2lzdGVuY3koKTsKLQotICAgICAgICBBU1NFUlQobV90YWJsZSk7Ci0KLSAg
ICAgICAgdW5zaWduZWQgayA9IDA7Ci0gICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxl
OwotICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKLSAgICAgICAg
dW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIHVuc2lnbmVk
IGkgPSBoICYgc2l6ZU1hc2s7Ci0KLSNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwotICAgICAgICAr
K0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKLSAgICAgICAgdW5zaWduZWQgcHJvYmVDb3Vu
dCA9IDA7Ci0jZW5kaWYKLQotI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQotICAg
ICAgICArK21fc3RhdHMtPm51bUFjY2Vzc2VzOwotI2VuZGlmCi0KLSAgICAgICAgVmFsdWVUeXBl
KiBkZWxldGVkRW50cnkgPSAwOwotICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5OwotICAgICAgICB3
aGlsZSAoMSkgewotICAgICAgICAgICAgZW50cnkgPSB0YWJsZSArIGk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIHdlIGNvdW50IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBvdXQg
dGhpcyBicmFuY2gKLSAgICAgICAgICAgIGlmIChIYXNoRnVuY3Rpb25zOjpzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCkgewotICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCpl
bnRyeSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpleHRyYWN0
KCplbnRyeSksIGtleSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1bHQobWFr
ZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkKLSAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tl
dCgqZW50cnkpKQotICAgICAgICAgICAgICAgICAgICBkZWxldGVkRW50cnkgPSBlbnRyeTsKLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChIYXNoVHJhbnNsYXRvcjo6ZXF1YWwoRXh0cmFjdG9yOjpl
eHRyYWN0KCplbnRyeSksIGtleSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZGRSZXN1
bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2UpOwotICAgICAgICAgICAgfQot
I2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCi0gICAgICAgICAgICArK3Byb2JlQ291bnQ7Ci0gICAg
ICAgICAgICBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudChwcm9iZUNvdW50
KTsKLSNlbmRpZgotCi0jaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCi0gICAgICAg
ICAgICBtX3N0YXRzLT5yZWNvcmRDb2xsaXNpb25BdENvdW50KHByb2JlQ291bnQpOwotI2VuZGlm
Ci0KLSAgICAgICAgICAgIGlmIChrID09IDApCi0gICAgICAgICAgICAgICAgayA9IDEgfCBkb3Vi
bGVIYXNoKGgpOwotICAgICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChkZWxldGVkRW50cnkpIHsKLSAgICAgICAgICAgIGluaXRpYWxpemVC
dWNrZXQoKmRlbGV0ZWRFbnRyeSk7Ci0gICAgICAgICAgICBlbnRyeSA9IGRlbGV0ZWRFbnRyeTsK
LSAgICAgICAgICAgIC0tbV9kZWxldGVkQ291bnQ7IAotICAgICAgICB9Ci0KLSAgICAgICAgSGFz
aFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgqZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6
OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSk7Ci0gICAgICAgICsrbV9rZXlDb3VudDsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChzaG91bGRFeHBhbmQoKSkKLSAgICAgICAgICAgIGVudHJ5ID0gZXhwYW5k
KGVudHJ5KTsKLQotICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50
cnkpLCB0cnVlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4KLSAgICBpbmxpbmUgYXV0
byBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZShUJiYga2V5LCBFeHRyYSYmIGV4dHJhKSAt
PiBBZGRSZXN1bHQKLSAgICB7Ci0gICAgICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkp
OwotCi0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKLQotICAgICAgICBpZiAoIW1fdGFi
bGUpCi0gICAgICAgICAgICBleHBhbmQoKTsKLQotICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVD
b25zaXN0ZW5jeSgpOwotCi0gICAgICAgIEZ1bGxMb29rdXBUeXBlIGxvb2t1cFJlc3VsdCA9IGZ1
bGxMb29rdXBGb3JXcml0aW5nPEhhc2hUcmFuc2xhdG9yPihrZXkpOwotCi0gICAgICAgIFZhbHVl
VHlwZSogZW50cnkgPSBsb29rdXBSZXN1bHQuZmlyc3QuZmlyc3Q7Ci0gICAgICAgIGJvb2wgZm91
bmQgPSBsb29rdXBSZXN1bHQuZmlyc3Quc2Vjb25kOwotICAgICAgICB1bnNpZ25lZCBoID0gbG9v
a3VwUmVzdWx0LnNlY29uZDsKLSAgICAgICAgCi0gICAgICAgIGlmIChmb3VuZCkKLSAgICAgICAg
ICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUtub3duR29vZEl0ZXJhdG9yKGVudHJ5KSwgZmFsc2Up
OwotICAgICAgICAKLSAgICAgICAgaWYgKGlzRGVsZXRlZEJ1Y2tldCgqZW50cnkpKSB7Ci0gICAg
ICAgICAgICBpbml0aWFsaXplQnVja2V0KCplbnRyeSk7Ci0gICAgICAgICAgICAtLW1fZGVsZXRl
ZENvdW50OwotICAgICAgICB9Ci0KLSAgICAgICAgSGFzaFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSgq
ZW50cnksIHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RXh0cmE+KGV4dHJhKSwg
aCk7Ci0gICAgICAgICsrbV9rZXlDb3VudDsKLQotICAgICAgICBpZiAoc2hvdWxkRXhwYW5kKCkp
Ci0gICAgICAgICAgICBlbnRyeSA9IGV4cGFuZChlbnRyeSk7Ci0KLSAgICAgICAgaW50ZXJuYWxD
aGVja1RhYmxlQ29uc2lzdGVuY3koKTsKLQotICAgICAgICByZXR1cm4gQWRkUmVzdWx0KG1ha2VL
bm93bkdvb2RJdGVyYXRvcihlbnRyeSksIHRydWUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAg
aW5saW5lIGF1dG8gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZWluc2VydChWYWx1ZVR5cGUmJiBlbnRyeSkgLT4gVmFs
dWVUeXBlKgotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdGFibGUpOwotICAgICAgICBBU1NFUlQo
IWxvb2t1cEZvcldyaXRpbmcoRXh0cmFjdG9yOjpleHRyYWN0KGVudHJ5KSkuc2Vjb25kKTsKLSAg
ICAgICAgQVNTRVJUKCFpc0RlbGV0ZWRCdWNrZXQoKihsb29rdXBGb3JXcml0aW5nKEV4dHJhY3Rv
cjo6ZXh0cmFjdChlbnRyeSkpLmZpcnN0KSkpOwotI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCi0g
ICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bVJlaW5zZXJ0czsKLSNlbmRpZgotI2lmIERVTVBf
SEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQotICAgICAgICArK21fc3RhdHMtPm51bVJlaW5zZXJ0
czsKLSNlbmRpZgotCi0gICAgICAgIFZhbHVlKiBuZXdFbnRyeSA9IGxvb2t1cEZvcldyaXRpbmco
RXh0cmFjdG9yOjpleHRyYWN0KGVudHJ5KSkuZmlyc3Q7Ci0gICAgICAgIG5ld0VudHJ5LT5+VmFs
dWUoKTsKLSAgICAgICAgbmV3IChOb3ROdWxsLCBuZXdFbnRyeSkgVmFsdWVUeXBlKFdURk1vdmUo
ZW50cnkpKTsKLQotICAgICAgICByZXR1cm4gbmV3RW50cnk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IAotICAg
IGF1dG8gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIGtleSkgLT4gaXRlcmF0b3IKLSAgICB7Ci0g
ICAgICAgIGlmICghbV90YWJsZSkKLSAgICAgICAgICAgIHJldHVybiBlbmQoKTsKLQotICAgICAg
ICBWYWx1ZVR5cGUqIGVudHJ5ID0gbG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOwotICAgICAg
ICBpZiAoIWVudHJ5KQotICAgICAgICAgICAgcmV0dXJuIGVuZCgpOwotCi0gICAgICAgIHJldHVy
biBtYWtlS25vd25Hb29kSXRlcmF0b3IoZW50cnkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiAKLSAgICBhdXRv
IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPjo6ZmluZChjb25zdCBUJiBrZXkpIGNvbnN0IC0+IGNvbnN0X2l0ZXJhdG9yCi0g
ICAgewotICAgICAgICBpZiAoIW1fdGFibGUpCi0gICAgICAgICAgICByZXR1cm4gZW5kKCk7Ci0K
LSAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4odGhpcykt
Pmxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKLSAgICAgICAgaWYgKCFlbnRyeSkKLSAgICAg
ICAgICAgIHJldHVybiBlbmQoKTsKLQotICAgICAgICByZXR1cm4gbWFrZUtub3duR29vZENvbnN0
SXRlcmF0b3IoZW50cnkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiAKLSAgICBib29sIEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y29u
dGFpbnMoY29uc3QgVCYga2V5KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3RhYmxlKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PEhh
c2hUYWJsZSo+KHRoaXMpLT5sb29rdXA8SGFzaFRyYW5zbGF0b3I+KGtleSk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KLSAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRF
bnRyeUNvbnNpc3RlbmN5Q2hlY2soVmFsdWVUeXBlKiBwb3MpCi0gICAgewotICAgICAgICBpbnZh
bGlkYXRlSXRlcmF0b3JzKCk7Ci0gICAgICAgIHJlbW92ZShwb3MpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3Rvciwg
dHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFp
dHM+Ci0gICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZUFuZEludmFsaWRhdGUoVmFsdWVUeXBlKiBw
b3MpCi0gICAgewotICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0gICAgICAgIGludGVy
bmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Ci0gICAgICAgIHJlbW92ZShwb3MpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZShWYWx1ZVR5cGUqIHBvcykK
LSAgICB7Ci0jaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKLSAgICAgICAgKytIYXNoVGFibGVTdGF0
czo6bnVtUmVtb3ZlczsKLSNlbmRpZgotI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJM
RQotICAgICAgICArK21fc3RhdHMtPm51bVJlbW92ZXM7Ci0jZW5kaWYKLQotICAgICAgICBkZWxl
dGVCdWNrZXQoKnBvcyk7Ci0gICAgICAgICsrbV9kZWxldGVkQ291bnQ7Ci0gICAgICAgIC0tbV9r
ZXlDb3VudDsKLQotICAgICAgICBpZiAoc2hvdWxkU2hyaW5rKCkpCi0gICAgICAgICAgICBzaHJp
bmsoKTsKLQotICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+Ci0gICAgaW5saW5lIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmUoaXRlcmF0b3Ig
aXQpCi0gICAgewotICAgICAgICBpZiAoaXQgPT0gZW5kKCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgcmVtb3ZlQW5kSW52YWxpZGF0ZShjb25zdF9jYXN0PFZhbHVlVHlwZSo+KGl0
Lm1faXRlcmF0b3IubV9wb3NpdGlvbikpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgaW5saW5l
IHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+OjpyZW1vdmVXaXRob3V0RW50cnlDb25zaXN0ZW5jeUNoZWNrKGl0ZXJh
dG9yIGl0KQotICAgIHsKLSAgICAgICAgaWYgKGl0ID09IGVuZCgpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlDb25zaXN0ZW5j
eUNoZWNrKGNvbnN0X2Nhc3Q8VmFsdWVUeXBlKj4oaXQubV9pdGVyYXRvci5tX3Bvc2l0aW9uKSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICBpbmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZVdp
dGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfaXRlcmF0b3IgaXQpCi0gICAgewotICAg
ICAgICBpZiAoaXQgPT0gZW5kKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgcmVt
b3ZlQW5kSW52YWxpZGF0ZVdpdGhvdXRFbnRyeUNvbnNpc3RlbmN5Q2hlY2soY29uc3RfY2FzdDxW
YWx1ZVR5cGUqPihpdC5tX3Bvc2l0aW9uKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICBpbmxp
bmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz46OnJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCi0gICAgewotICAg
ICAgICByZW1vdmUoZmluZChrZXkpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgaW5saW5lIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmVJZihj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgLy8gV2UgbXVzdCB1c2UgbG9j
YWwgY29waWVzIGluIGNhc2UgImZ1bmN0b3IiIG9yICJkZWxldGVCdWNrZXQiCi0gICAgICAgIC8v
IG1ha2UgYSBmdW5jdGlvbiBjYWxsLCB3aGljaCBwcmV2ZW50cyB0aGUgY29tcGlsZXIgZnJvbSBr
ZWVwaW5nCi0gICAgICAgIC8vIHRoZSB2YWx1ZXMgaW4gcmVnaXN0ZXIuCi0gICAgICAgIHVuc2ln
bmVkIHJlbW92ZWRCdWNrZXRDb3VudCA9IDA7Ci0gICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBt
X3RhYmxlOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdGFibGVTaXplOyBpLS07KSB7
Ci0gICAgICAgICAgICBWYWx1ZVR5cGUmIGJ1Y2tldCA9IHRhYmxlW2ldOwotICAgICAgICAgICAg
aWYgKGlzRW1wdHlPckRlbGV0ZWRCdWNrZXQoYnVja2V0KSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFmdW5jdG9yKGJ1Y2tldCkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGRlbGV0
ZUJ1Y2tldChidWNrZXQpOwotICAgICAgICAgICAgKytyZW1vdmVkQnVja2V0Q291bnQ7Ci0gICAg
ICAgIH0KLSAgICAgICAgbV9kZWxldGVkQ291bnQgKz0gcmVtb3ZlZEJ1Y2tldENvdW50OwotICAg
ICAgICBtX2tleUNvdW50IC09IHJlbW92ZWRCdWNrZXRDb3VudDsKLQotICAgICAgICBpZiAoc2hv
dWxkU2hyaW5rKCkpCi0gICAgICAgICAgICBzaHJpbmsoKTsKLSAgICAgICAgCi0gICAgICAgIGlu
dGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICBh
dXRvIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cywgS2V5VHJhaXRzPjo6YWxsb2NhdGVUYWJsZSh1bnNpZ25lZCBzaXplKSAtPiBWYWx1ZVR5cGUq
Ci0gICAgewotICAgICAgICAvLyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVuY3Rpb24g
d2l0aCBleHBsaWNpdCBzcGVjaWFsaXphdGlvbnMgaGVyZSwgYnV0Ci0gICAgICAgIC8vIGdjYyBk
b2Vzbid0IGFwcGVhciB0byBzdXBwb3J0IHRoYXQKLSAgICAgICAgaWYgKFRyYWl0czo6ZW1wdHlW
YWx1ZUlzWmVybykKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZVR5cGUqPihm
YXN0WmVyb2VkTWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpOwotICAgICAgICBWYWx1
ZVR5cGUqIHJlc3VsdCA9IHN0YXRpY19jYXN0PFZhbHVlVHlwZSo+KGZhc3RNYWxsb2Moc2l6ZSAq
IHNpemVvZihWYWx1ZVR5cGUpKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyBpKyspCi0gICAgICAgICAgICBpbml0aWFsaXplQnVja2V0KHJlc3VsdFtpXSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
Pjo6ZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpCi0gICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICBpZiAoIWlzRGVsZXRlZEJ1Y2tldCh0YWJsZVtpXSkpCi0gICAgICAgICAgICAgICAgdGFi
bGVbaV0uflZhbHVlVHlwZSgpOwotICAgICAgICB9Ci0gICAgICAgIGZhc3RGcmVlKHRhYmxlKTsK
LSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGF1dG8gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpleHBhbmQoVmFsdWVUeXBl
KiBlbnRyeSkgLT4gVmFsdWVUeXBlKgotICAgIHsKLSAgICAgICAgdW5zaWduZWQgbmV3U2l6ZTsK
LSAgICAgICAgaWYgKG1fdGFibGVTaXplID09IDApCi0gICAgICAgICAgICBuZXdTaXplID0gS2V5
VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwotICAgICAgICBlbHNlIGlmIChtdXN0UmVoYXNoSW5Q
bGFjZSgpKQotICAgICAgICAgICAgbmV3U2l6ZSA9IG1fdGFibGVTaXplOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBuZXdTaXplID0gbV90YWJsZVNpemUgKiAyOwotCi0gICAgICAgIHJldHVy
biByZWhhc2gobmV3U2l6ZSwgZW50cnkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgYXV0byBI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz46OnJlaGFzaCh1bnNpZ25lZCBuZXdUYWJsZVNpemUsIFZhbHVlVHlwZSogZW50cnkp
IC0+IFZhbHVlVHlwZSoKLSAgICB7Ci0gICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3Rl
bmN5RXhjZXB0U2l6ZSgpOwotCi0gICAgICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9IG1fdGFi
bGVTaXplOwotICAgICAgICBWYWx1ZVR5cGUqIG9sZFRhYmxlID0gbV90YWJsZTsKLQotI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTCi0gICAgICAgIGlmIChvbGRUYWJsZVNpemUgIT0gMCkKLSAgICAg
ICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bVJlaGFzaGVzOwotI2VuZGlmCi0KLSNpZiBEVU1Q
X0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKLSAgICAgICAgaWYgKG9sZFRhYmxlU2l6ZSAhPSAw
KQotICAgICAgICAgICAgKyttX3N0YXRzLT5udW1SZWhhc2hlczsKLSNlbmRpZgotCi0gICAgICAg
IG1fdGFibGVTaXplID0gbmV3VGFibGVTaXplOwotICAgICAgICBtX3RhYmxlU2l6ZU1hc2sgPSBu
ZXdUYWJsZVNpemUgLSAxOwotICAgICAgICBtX3RhYmxlID0gYWxsb2NhdGVUYWJsZShuZXdUYWJs
ZVNpemUpOwotCi0gICAgICAgIFZhbHVlKiBuZXdFbnRyeSA9IG51bGxwdHI7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgIT0gb2xkVGFibGVTaXplOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChpc0RlbGV0ZWRCdWNrZXQob2xkVGFibGVbaV0pKSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHN0ZDo6YWRkcmVzc29mKG9sZFRhYmxlW2ldKSAhPSBlbnRyeSk7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpc0VtcHR5QnVj
a2V0KG9sZFRhYmxlW2ldKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChzdGQ6OmFkZHJlc3Nv
ZihvbGRUYWJsZVtpXSkgIT0gZW50cnkpOwotICAgICAgICAgICAgICAgIG9sZFRhYmxlW2ldLn5W
YWx1ZVR5cGUoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgVmFsdWUqIHJlaW5zZXJ0ZWRFbnRyeSA9IHJlaW5zZXJ0KFdURk1vdmUob2xk
VGFibGVbaV0pKTsKLSAgICAgICAgICAgIG9sZFRhYmxlW2ldLn5WYWx1ZVR5cGUoKTsKLSAgICAg
ICAgICAgIGlmIChzdGQ6OmFkZHJlc3NvZihvbGRUYWJsZVtpXSkgPT0gZW50cnkpIHsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoIW5ld0VudHJ5KTsKLSAgICAgICAgICAgICAgICBuZXdFbnRyeSA9
IHJlaW5zZXJ0ZWRFbnRyeTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1f
ZGVsZXRlZENvdW50ID0gMDsKLQotICAgICAgICBmYXN0RnJlZShvbGRUYWJsZSk7Ci0KLSAgICAg
ICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuIG5ld0Vu
dHJ5OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmNsZWFyKCkKLSAg
ICB7Ci0gICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKLSAgICAgICAgaWYgKCFtX3RhYmxl
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGRlYWxsb2NhdGVUYWJsZShtX3RhYmxl
LCBtX3RhYmxlU2l6ZSk7Ci0gICAgICAgIG1fdGFibGUgPSAwOwotICAgICAgICBtX3RhYmxlU2l6
ZSA9IDA7Ci0gICAgICAgIG1fdGFibGVTaXplTWFzayA9IDA7Ci0gICAgICAgIG1fa2V5Q291bnQg
PSAwOwotICAgICAgICBtX2RlbGV0ZWRDb3VudCA9IDA7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAg
ICBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz46Okhhc2hUYWJsZShjb25zdCBIYXNoVGFibGUmIG90aGVyKQotICAgICAgICA6
IG1fdGFibGUobnVsbHB0cikKLSAgICAgICAgLCBtX3RhYmxlU2l6ZSgwKQotICAgICAgICAsIG1f
dGFibGVTaXplTWFzaygwKQotICAgICAgICAsIG1fa2V5Q291bnQoMCkKLSAgICAgICAgLCBtX2Rl
bGV0ZWRDb3VudCgwKQotI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKLSAgICAgICAgLCBt
X2l0ZXJhdG9ycyhudWxscHRyKQotICAgICAgICAsIG1fbXV0ZXgoc3RkOjptYWtlX3VuaXF1ZTxM
b2NrPigpKQotI2VuZGlmCi0jaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCi0gICAg
ICAgICwgbV9zdGF0cyhzdGQ6Om1ha2VfdW5pcXVlPFN0YXRzPigqb3RoZXIubV9zdGF0cykpCi0j
ZW5kaWYKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIG90aGVyS2V5Q291bnQgPSBvdGhlci5zaXpl
KCk7Ci0gICAgICAgIGlmICghb3RoZXJLZXlDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICB1bnNpZ25lZCBiZXN0VGFibGVTaXplID0gV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdv
KG90aGVyS2V5Q291bnQpICogMjsKLQotICAgICAgICAvLyBXaXRoIG1heExvYWQgYXQgMS8yIGFu
ZCBtaW5Mb2FkIGF0IDEvNiwgb3VyIGF2ZXJhZ2UgbG9hZCBpcyAyLzYuCi0gICAgICAgIC8vIElm
IHdlIGFyZSBnZXR0aW5nIGhhbGZ3YXkgYmV0d2VlbiAyLzYgYW5kIDEvMiAocGFzdCA1LzEyKSwg
d2UgZG91YmxlIHRoZSBzaXplIHRvIGF2b2lkIGJlaW5nIHRvbyBjbG9zZSB0bwotICAgICAgICAv
LyBsb2FkTWF4IGFuZCBicmluZyB0aGUgcmF0aW8gY2xvc2UgdG8gMi82LiBUaGlzIGdpdmUgdXMg
YSBsb2FkIGluIHRoZSBib3VuZHMgWzMvMTIsIDUvMTIpLgotICAgICAgICBib29sIGFib3ZlVGhy
ZWVRdWFydGVyTG9hZCA9IG90aGVyS2V5Q291bnQgKiAxMiA+PSBiZXN0VGFibGVTaXplICogNTsK
LSAgICAgICAgaWYgKGFib3ZlVGhyZWVRdWFydGVyTG9hZCkKLSAgICAgICAgICAgIGJlc3RUYWJs
ZVNpemUgKj0gMjsKLQotICAgICAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJh
aXRzOjptaW5pbXVtVGFibGVTaXplOwotICAgICAgICBtX3RhYmxlU2l6ZSA9IHN0ZDo6bWF4PHVu
c2lnbmVkPihiZXN0VGFibGVTaXplLCBtaW5pbXVtVGFibGVTaXplKTsKLSAgICAgICAgbV90YWJs
ZVNpemVNYXNrID0gbV90YWJsZVNpemUgLSAxOwotICAgICAgICBtX2tleUNvdW50ID0gb3RoZXJL
ZXlDb3VudDsKLSAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUobV90YWJsZVNpemUpOwot
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgb3RoZXJWYWx1ZSA6IG90aGVyKQotICAgICAgICAg
ICAgYWRkVW5pcXVlRm9ySW5pdGlhbGl6YXRpb248SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oRXh0
cmFjdG9yOjpleHRyYWN0KG90aGVyVmFsdWUpLCBvdGhlclZhbHVlKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgotICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpzd2FwKEhhc2hUYWJsZSYgb3RoZXIpCi0gICAgewot
ICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7Ci0gICAgICAgIG90aGVyLmludmFsaWRhdGVJ
dGVyYXRvcnMoKTsKLQotICAgICAgICBzdGQ6OnN3YXAobV90YWJsZSwgb3RoZXIubV90YWJsZSk7
Ci0gICAgICAgIHN0ZDo6c3dhcChtX3RhYmxlU2l6ZSwgb3RoZXIubV90YWJsZVNpemUpOwotICAg
ICAgICBzdGQ6OnN3YXAobV90YWJsZVNpemVNYXNrLCBvdGhlci5tX3RhYmxlU2l6ZU1hc2spOwot
ICAgICAgICBzdGQ6OnN3YXAobV9rZXlDb3VudCwgb3RoZXIubV9rZXlDb3VudCk7Ci0gICAgICAg
IHN0ZDo6c3dhcChtX2RlbGV0ZWRDb3VudCwgb3RoZXIubV9kZWxldGVkQ291bnQpOwotCi0jaWYg
RFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCi0gICAgICAgIG1fc3RhdHMuc3dhcChvdGhl
ci5tX3N0YXRzKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgYXV0byBIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz46Om9wZXJhdG9yPShjb25zdCBIYXNoVGFibGUmIG90aGVyKSAtPiBIYXNoVGFibGUmCi0gICAg
ewotICAgICAgICBIYXNoVGFibGUgdG1wKG90aGVyKTsKLSAgICAgICAgc3dhcCh0bXApOwotICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICBpbmxpbmUgSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+OjpIYXNoVGFibGUoSGFzaFRhYmxlJiYgb3RoZXIpCi0jaWYgQ0hFQ0tfSEFTSFRBQkxFX0lU
RVJBVE9SUwotICAgICAgICA6IG1faXRlcmF0b3JzKG51bGxwdHIpCi0gICAgICAgICwgbV9tdXRl
eChzdGQ6Om1ha2VfdW5pcXVlPExvY2s+KCkpCi0jZW5kaWYKLSAgICB7Ci0gICAgICAgIG90aGVy
LmludmFsaWRhdGVJdGVyYXRvcnMoKTsKLQotICAgICAgICBtX3RhYmxlID0gb3RoZXIubV90YWJs
ZTsKLSAgICAgICAgbV90YWJsZVNpemUgPSBvdGhlci5tX3RhYmxlU2l6ZTsKLSAgICAgICAgbV90
YWJsZVNpemVNYXNrID0gb3RoZXIubV90YWJsZVNpemVNYXNrOwotICAgICAgICBtX2tleUNvdW50
ID0gb3RoZXIubV9rZXlDb3VudDsKLSAgICAgICAgbV9kZWxldGVkQ291bnQgPSBvdGhlci5tX2Rl
bGV0ZWRDb3VudDsKLQotICAgICAgICBvdGhlci5tX3RhYmxlID0gbnVsbHB0cjsKLSAgICAgICAg
b3RoZXIubV90YWJsZVNpemUgPSAwOwotICAgICAgICBvdGhlci5tX3RhYmxlU2l6ZU1hc2sgPSAw
OwotICAgICAgICBvdGhlci5tX2tleUNvdW50ID0gMDsKLSAgICAgICAgb3RoZXIubV9kZWxldGVk
Q291bnQgPSAwOwotCi0jaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFNfUEVSX1RBQkxFCi0gICAgICAg
IG1fc3RhdHMgPSBXVEZNb3ZlKG90aGVyLm1fc3RhdHMpOwotICAgICAgICBvdGhlci5tX3N0YXRz
ID0gbnVsbHB0cjsKLSNlbmRpZgotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgaW5saW5lIGF1dG8g
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OjpvcGVyYXRvcj0oSGFzaFRhYmxlJiYgb3RoZXIpIC0+IEhhc2hUYWJsZSYKLSAg
ICB7Ci0gICAgICAgIEhhc2hUYWJsZSB0ZW1wID0gV1RGTW92ZShvdGhlcik7Ci0gICAgICAgIHN3
YXAodGVtcCk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSNpZiBBU1NFUlRfRU5B
QkxFRAotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KLSAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y2hlY2tUYWJsZUNvbnNpc3Rl
bmN5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNp
emUoKTsKLSAgICAgICAgQVNTRVJUKCFtX3RhYmxlIHx8ICFzaG91bGRFeHBhbmQoKSk7Ci0gICAg
ICAgIEFTU0VSVCghc2hvdWxkU2hyaW5rKCkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9p
ZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz46OmNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgaWYgKCFtX3RhYmxlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAgICAgdW5zaWduZWQgZGVsZXRlZENvdW50ID0gMDsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fdGFibGVTaXplOyArK2opIHsKLSAg
ICAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBtX3RhYmxlICsgajsKLSAgICAgICAgICAgIGlm
IChpc0VtcHR5QnVja2V0KCplbnRyeSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgIGlmIChpc0RlbGV0ZWRCdWNrZXQoKmVudHJ5KSkgewotICAgICAgICAgICAgICAg
ICsrZGVsZXRlZENvdW50OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBjb25zdF9pdGVyYXRvciBpdCA9IGZpbmQoRXh0cmFjdG9yOjpleHRy
YWN0KCplbnRyeSkpOwotICAgICAgICAgICAgQVNTRVJUKGVudHJ5ID09IGl0Lm1fcG9zaXRpb24p
OwotICAgICAgICAgICAgKytjb3VudDsKLQotICAgICAgICAgICAgVmFsdWVDaGVjazxLZXk+Ojpj
aGVja0NvbnNpc3RlbmN5KGl0LT5rZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKGNv
dW50ID09IG1fa2V5Q291bnQpOwotICAgICAgICBBU1NFUlQoZGVsZXRlZENvdW50ID09IG1fZGVs
ZXRlZENvdW50KTsKLSAgICAgICAgQVNTRVJUKG1fdGFibGVTaXplID49IEtleVRyYWl0czo6bWlu
aW11bVRhYmxlU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX3RhYmxlU2l6ZU1hc2spOwotICAgICAg
ICBBU1NFUlQobV90YWJsZVNpemUgPT0gbV90YWJsZVNpemVNYXNrICsgMSk7Ci0gICAgfQotCi0j
ZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLQotI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmludmFsaWRhdGVJdGVyYXRvcnMoKQot
ICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2soKm1fbXV0ZXgpOwotICAg
ICAgICBjb25zdF9pdGVyYXRvciogbmV4dDsKLSAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciog
cCA9IG1faXRlcmF0b3JzOyBwOyBwID0gbmV4dCkgewotICAgICAgICAgICAgbmV4dCA9IHAtPm1f
bmV4dDsKLSAgICAgICAgICAgIHAtPm1fdGFibGUgPSAwOwotICAgICAgICAgICAgcC0+bV9uZXh0
ID0gMDsKLSAgICAgICAgICAgIHAtPm1fcHJldmlvdXMgPSAwOwotICAgICAgICB9Ci0gICAgICAg
IG1faXRlcmF0b3JzID0gMDsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHZvaWQgYWRkSXRlcmF0
b3IoY29uc3QgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzLCBLZXlUcmFpdHM+KiB0YWJsZSwKLSAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRv
cjxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
PiogaXQpCi0gICAgewotICAgICAgICBpdC0+bV90YWJsZSA9IHRhYmxlOwotICAgICAgICBpdC0+
bV9wcmV2aW91cyA9IDA7Ci0KLSAgICAgICAgLy8gSW5zZXJ0IGl0ZXJhdG9yIGF0IGhlYWQgb2Yg
ZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGl0ZXJhdG9ycy4KLSAgICAgICAgaWYgKCF0YWJsZSkgewot
ICAgICAgICAgICAgaXQtPm1fbmV4dCA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jaygqdGFibGUtPm1fbXV0ZXgpOwotICAgICAgICAg
ICAgQVNTRVJUKHRhYmxlLT5tX2l0ZXJhdG9ycyAhPSBpdCk7Ci0gICAgICAgICAgICBpdC0+bV9u
ZXh0ID0gdGFibGUtPm1faXRlcmF0b3JzOwotICAgICAgICAgICAgdGFibGUtPm1faXRlcmF0b3Jz
ID0gaXQ7Ci0gICAgICAgICAgICBpZiAoaXQtPm1fbmV4dCkgewotICAgICAgICAgICAgICAgIEFT
U0VSVCghaXQtPm1fbmV4dC0+bV9wcmV2aW91cyk7Ci0gICAgICAgICAgICAgICAgaXQtPm1fbmV4
dC0+bV9wcmV2aW91cyA9IGl0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KLSAgICB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4q
IGl0KQotICAgIHsKLSAgICAgICAgLy8gRGVsZXRlIGl0ZXJhdG9yIGZyb20gZG91Ymx5LWxpbmtl
ZCBsaXN0IG9mIGl0ZXJhdG9ycy4KLSAgICAgICAgaWYgKCFpdC0+bV90YWJsZSkgewotICAgICAg
ICAgICAgQVNTRVJUKCFpdC0+bV9uZXh0KTsKLSAgICAgICAgICAgIEFTU0VSVCghaXQtPm1fcHJl
dmlvdXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExv
Y2s+IGxvY2soKml0LT5tX3RhYmxlLT5tX211dGV4KTsKLSAgICAgICAgICAgIGlmIChpdC0+bV9u
ZXh0KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGl0LT5tX25leHQtPm1fcHJldmlvdXMgPT0g
aXQpOwotICAgICAgICAgICAgICAgIGl0LT5tX25leHQtPm1fcHJldmlvdXMgPSBpdC0+bV9wcmV2
aW91czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpdC0+bV9wcmV2aW91cykgewot
ICAgICAgICAgICAgICAgIEFTU0VSVChpdC0+bV90YWJsZS0+bV9pdGVyYXRvcnMgIT0gaXQpOwot
ICAgICAgICAgICAgICAgIEFTU0VSVChpdC0+bV9wcmV2aW91cy0+bV9uZXh0ID09IGl0KTsKLSAg
ICAgICAgICAgICAgICBpdC0+bV9wcmV2aW91cy0+bV9uZXh0ID0gaXQtPm1fbmV4dDsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGl0LT5tX3RhYmxlLT5tX2l0
ZXJhdG9ycyA9PSBpdCk7Ci0gICAgICAgICAgICAgICAgaXQtPm1fdGFibGUtPm1faXRlcmF0b3Jz
ID0gaXQtPm1fbmV4dDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGl0LT5t
X3RhYmxlID0gMDsKLSAgICAgICAgaXQtPm1fbmV4dCA9IDA7Ci0gICAgICAgIGl0LT5tX3ByZXZp
b3VzID0gMDsKLSAgICB9Ci0KLSNlbmRpZiAvLyBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCi0K
LSAgICAvLyBpdGVyYXRvciBhZGFwdGVycwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRh
YmxlVHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBzdHJ1Y3QgSGFzaFRhYmxlQ29uc3RJdGVyYXRv
ckFkYXB0ZXIgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFn
LCBWYWx1ZVR5cGUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBWYWx1ZVR5cGUqLCBjb25zdCBWYWx1
ZVR5cGUmPiB7Ci0gICAgICAgIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyKCkge30KLSAg
ICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXIoY29uc3QgdHlwZW5hbWUgSGFzaFRh
YmxlVHlwZTo6Y29uc3RfaXRlcmF0b3ImIGltcGwpIDogbV9pbXBsKGltcGwpIHt9Ci0KLSAgICAg
ICAgY29uc3QgVmFsdWVUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAoY29uc3QgVmFsdWVUeXBl
KiltX2ltcGwuZ2V0KCk7IH0KLSAgICAgICAgY29uc3QgVmFsdWVUeXBlJiBvcGVyYXRvciooKSBj
b25zdCB7IHJldHVybiAqZ2V0KCk7IH0KLSAgICAgICAgY29uc3QgVmFsdWVUeXBlKiBvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KLQotICAgICAgICBIYXNoVGFibGVDb25zdEl0
ZXJhdG9yQWRhcHRlciYgb3BlcmF0b3IrKygpIHsgKyttX2ltcGw7IHJldHVybiAqdGhpczsgfQot
ICAgICAgICAvLyBwb3N0Zml4ICsrIGludGVudGlvbmFsbHkgb21pdHRlZAotCi0gICAgICAgIHR5
cGVuYW1lIEhhc2hUYWJsZVR5cGU6OmNvbnN0X2l0ZXJhdG9yIG1faW1wbDsKLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlPiBz
dHJ1Y3QgSGFzaFRhYmxlSXRlcmF0b3JBZGFwdGVyIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3Rk
Ojpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWVUeXBlLCBzdGQ6OnB0cmRpZmZfdCwgVmFsdWVU
eXBlKiwgVmFsdWVUeXBlJj4gewotICAgICAgICBIYXNoVGFibGVJdGVyYXRvckFkYXB0ZXIoKSB7
fQotICAgICAgICBIYXNoVGFibGVJdGVyYXRvckFkYXB0ZXIoY29uc3QgdHlwZW5hbWUgSGFzaFRh
YmxlVHlwZTo6aXRlcmF0b3ImIGltcGwpIDogbV9pbXBsKGltcGwpIHt9Ci0KLSAgICAgICAgVmFs
dWVUeXBlKiBnZXQoKSBjb25zdCB7IHJldHVybiAoVmFsdWVUeXBlKiltX2ltcGwuZ2V0KCk7IH0K
LSAgICAgICAgVmFsdWVUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0K
LSAgICAgICAgVmFsdWVUeXBlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0K
LQotICAgICAgICBIYXNoVGFibGVJdGVyYXRvckFkYXB0ZXImIG9wZXJhdG9yKysoKSB7ICsrbV9p
bXBsOyByZXR1cm4gKnRoaXM7IH0KLSAgICAgICAgLy8gcG9zdGZpeCArKyBpbnRlbnRpb25hbGx5
IG9taXR0ZWQKLQotICAgICAgICBvcGVyYXRvciBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRl
cjxIYXNoVGFibGVUeXBlLCBWYWx1ZVR5cGU+KCkgewotICAgICAgICAgICAgdHlwZW5hbWUgSGFz
aFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgaSA9IG1faW1wbDsKLSAgICAgICAgICAgIHJldHVy
biBpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6aXRlcmF0
b3IgbV9pbXBsOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PgotICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaFRhYmxlQ29uc3RJdGVyYXRv
ckFkYXB0ZXI8VCwgVT4mIGEsIGNvbnN0IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPFQs
IFU+JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEubV9pbXBsID09IGIubV9pbXBsOwotICAg
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci0gICAgaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxULCBVPiYg
YSwgY29uc3QgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8VCwgVT4mIGIpCi0gICAgewot
ICAgICAgICByZXR1cm4gYS5tX2ltcGwgIT0gYi5tX2ltcGw7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEhhc2hUYWJsZUl0ZXJhdG9yQWRhcHRlcjxULCBVPiYgYSwgY29uc3QgSGFzaFRhYmxlSXRl
cmF0b3JBZGFwdGVyPFQsIFU+JiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEubV9pbXBsID09
IGIubV9pbXBsOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
Ci0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoVGFibGVJdGVyYXRvckFkYXB0
ZXI8VCwgVT4mIGEsIGNvbnN0IEhhc2hUYWJsZUl0ZXJhdG9yQWRhcHRlcjxULCBVPiYgYikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhLm1faW1wbCAhPSBiLm1faW1wbDsKLSAgICB9Ci0KLSAgICAv
LyBBbGwgNCBjb21iaW5hdGlvbnMgb2YgPT0sICE9IGFuZCBDb25zdCxub24gY29uc3QuCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPFQsIFU+JiBhLCBjb25zdCBI
YXNoVGFibGVJdGVyYXRvckFkYXB0ZXI8VCwgVT4mIGIpCi0gICAgewotICAgICAgICByZXR1cm4g
YS5tX2ltcGwgPT0gYi5tX2ltcGw7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhhc2hUYWJsZUNv
bnN0SXRlcmF0b3JBZGFwdGVyPFQsIFU+JiBhLCBjb25zdCBIYXNoVGFibGVJdGVyYXRvckFkYXB0
ZXI8VCwgVT4mIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYS5tX2ltcGwgIT0gYi5tX2ltcGw7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLSAgICBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hUYWJsZUl0ZXJhdG9yQWRhcHRlcjxULCBVPiYg
YSwgY29uc3QgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8VCwgVT4mIGIpCi0gICAgewot
ICAgICAgICByZXR1cm4gYS5tX2ltcGwgPT0gYi5tX2ltcGw7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEhhc2hUYWJsZUl0ZXJhdG9yQWRhcHRlcjxULCBVPiYgYSwgY29uc3QgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvckFkYXB0ZXI8VCwgVT4mIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYS5tX2lt
cGwgIT0gYi5tX2ltcGw7Ci0gICAgfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2luY2x1ZGUg
PHd0Zi9IYXNoSXRlcmF0b3JzLmg+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvSGFzaFRyYWl0cy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL0hhc2hUcmFpdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZiYTVmN2Vm
YzNiOTMxOTRhNjUzNTdiMTA3ZjVhMTlhMWQxNTE5MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
SGFzaFRyYWl0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzc5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBXVEZfSGFzaFRyYWl0c19oCi0jZGVmaW5l
IFdURl9IYXNoVHJhaXRzX2gKLQotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDx1dGlsaXR5
PgotI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQot
Y2xhc3MgU3RyaW5nOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
LQotdGVtcGxhdGU8Ym9vbCBpc0ludGVnZXIsIHR5cGVuYW1lIFQ+IHN0cnVjdCBHZW5lcmljSGFz
aFRyYWl0c0Jhc2U7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBHZW5lcmljSGFzaFRy
YWl0c0Jhc2U8ZmFsc2UsIFQ+IHsKLSAgICAvLyBUaGUgZW1wdHlWYWx1ZUlzWmVybyBmbGFnIGlz
IHVzZWQgdG8gb3B0aW1pemUgYWxsb2NhdGlvbiBvZiBlbXB0eSBoYXNoIHRhYmxlcyB3aXRoIHpl
cm9lZCBtZW1vcnkuCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZh
bHNlOwotICAgIAotICAgIC8vIFRoZSBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiBmbGFnIGFsbG93
cyB0aGUgaGFzaCB0YWJsZSB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGNvZGUgdG8gY2hlY2sK
LSAgICAvLyBmb3IgdGhlIGVtcHR5IHZhbHVlIHdoZW4gaXQgY2FuIGJlIGRvbmUgd2l0aCB0aGUg
ZXF1YWxpdHkgb3BlcmF0b3IsIGJ1dCBhbGxvd3MgY3VzdG9tIGZ1bmN0aW9ucwotICAgIC8vIGZv
ciBjYXNlcyBsaWtlIFN0cmluZyB0aGF0IG5lZWQgdGhlbS4KLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IGZhbHNlOwotCi0gICAgLy8gVGhlIHN0YXJ0aW5n
IHRhYmxlIHNpemUuIENhbiBiZSBvdmVycmlkZGVuIHdoZW4gd2Uga25vdyBiZWZvcmVoYW5kIHRo
YXQKLSAgICAvLyBhIGhhc2ggdGFibGUgd2lsbCBoYXZlIGF0IGxlYXN0IE4gZW50cmllcy4KLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IDg7Ci19OwotCi0vLyBE
ZWZhdWx0IGludGVnZXIgdHJhaXRzIGRpc2FsbG93IGJvdGggMCBhbmQgLTEgYXMga2V5cyAobWF4
IHZhbHVlIGluc3RlYWQgb2YgLTEgZm9yIHVuc2lnbmVkKS4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBHZW5lcmljSGFzaFRyYWl0c0Jhc2U8dHJ1ZSwgVD4gOiBHZW5lcmljSGFzaFRyYWl0
c0Jhc2U8ZmFsc2UsIFQ+IHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJv
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVCYgc2xvdCkg
eyBzbG90ID0gc3RhdGljX2Nhc3Q8VD4oLTEpOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVk
VmFsdWUoVCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gc3RhdGljX2Nhc3Q8VD4oLTEpOyB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgR2VuZXJpY0hhc2hUcmFpdHMgOiBHZW5l
cmljSGFzaFRyYWl0c0Jhc2U8c3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsIFQ+IHsKLSAgICB0
eXBlZGVmIFQgVHJhaXRUeXBlOwotICAgIHR5cGVkZWYgVCBFbXB0eVZhbHVlVHlwZTsKLQotICAg
IHN0YXRpYyBUIGVtcHR5VmFsdWUoKSB7IHJldHVybiBUKCk7IH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+IAotICAgIHN0YXRpYyB2b2lkIGFzc2lnblRvRW1wdHkoVSYg
ZW1wdHlWYWx1ZSwgViYmIHZhbHVlKQotICAgIHsgCi0gICAgICAgIGVtcHR5VmFsdWUgPSBzdGQ6
OmZvcndhcmQ8Vj4odmFsdWUpOwotICAgIH0KLQotICAgIC8vIFR5cGUgZm9yIHJldHVybiB2YWx1
ZSBvZiBmdW5jdGlvbnMgdGhhdCBkbyBub3QgdHJhbnNmZXIgb3duZXJzaGlwLCBzdWNoIGFzIGdl
dC4KLSAgICB0eXBlZGVmIFQgUGVla1R5cGU7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIFUmJiBwZWVrKFUmJiB2YWx1ZSkgeyByZXR1cm4gc3RkOjpmb3J3YXJkPFU+KHZhbHVlKTsg
fQotCi0gICAgdHlwZWRlZiBUIFRha2VUeXBlOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0
YXRpYyBUYWtlVHlwZSB0YWtlKFUmJiB2YWx1ZSkgeyByZXR1cm4gc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKTsgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHMgOiBH
ZW5lcmljSGFzaFRyYWl0czxUPiB7IH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBG
bG9hdEhhc2hUcmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0czxUPiB7Ci0gICAgc3RhdGljIFQgZW1w
dHlWYWx1ZSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmluZmluaXR5KCk7IH0K
LSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVCYgc2xvdCkgeyBzbG90ID0g
LXN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmluZmluaXR5KCk7IH0KLSAgICBzdGF0aWMgYm9vbCBp
c0RlbGV0ZWRWYWx1ZShUIHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSAtc3RkOjpudW1lcmljX2xp
bWl0czxUPjo6aW5maW5pdHkoKTsgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxmbG9hdD4gOiBGbG9hdEhhc2hUcmFpdHM8ZmxvYXQ+IHsgfTsKLXRlbXBsYXRlPD4gc3RydWN0
IEhhc2hUcmFpdHM8ZG91YmxlPiA6IEZsb2F0SGFzaFRyYWl0czxkb3VibGU+IHsgfTsKLQotLy8g
RGVmYXVsdCB1bnNpZ25lZCB0cmFpdHMgZGlzYWxsb3cgYm90aCAwIGFuZCBtYXggYXMga2V5cyAt
LSB1c2UgdGhlc2UgdHJhaXRzIHRvIGFsbG93IHplcm8gYW5kIGRpc2FsbG93IG1heCAtIDEuCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgVW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHMg
OiBHZW5lcmljSGFzaFRyYWl0czxUPiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1
ZUlzWmVybyA9IGZhbHNlOwotICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsgfQotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERl
bGV0ZWRWYWx1ZShUJiBzbG90KSB7IHNsb3QgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgo
KSAtIDE7IH0KLSAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShUIHZhbHVlKSB7IHJldHVy
biB2YWx1ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSAtIDE7IH0KLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHMgOiBH
ZW5lcmljSGFzaFRyYWl0czxUPiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlz
WmVybyA9IGZhbHNlOwotICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPFQ+OjptaW4oKTsgfQotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0
ZWRWYWx1ZShUJiBzbG90KSB7IHNsb3QgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsg
fQotICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKFQgdmFsdWUpIHsgcmV0dXJuIHZhbHVl
ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOyB9Ci19OwotCi0vLyBDYW4gYmUgdXNl
ZCB3aXRoIHN0cm9uZyBlbnVtcywgYWxsb3dzIHplcm8gYXMga2V5LgotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IFN0cm9uZ0VudW1IYXNoVHJhaXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8VD4g
ewotICAgIHVzaW5nIFVuZGVybHlpbmdUeXBlID0gdHlwZW5hbWUgc3RkOjp1bmRlcmx5aW5nX3R5
cGU8VD46OnR5cGU7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZh
bHNlOwotICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUPihz
dGQ6Om51bWVyaWNfbGltaXRzPFVuZGVybHlpbmdUeXBlPjo6bWF4KCkpOyB9Ci0gICAgc3RhdGlj
IHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFQmIHNsb3QpIHsgc2xvdCA9IHN0YXRpY19jYXN0
PFQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8VW5kZXJseWluZ1R5cGU+OjptYXgoKSAtIDEpOyB9Ci0g
ICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoVCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0g
c3RhdGljX2Nhc3Q8VD4oc3RkOjpudW1lcmljX2xpbWl0czxVbmRlcmx5aW5nVHlwZT46Om1heCgp
IC0gMSk7IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBIYXNoVHJhaXRzPFAq
PiA6IEdlbmVyaWNIYXNoVHJhaXRzPFAqPiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlW
YWx1ZUlzWmVybyA9IHRydWU7Ci0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVl
KFAqJiBzbG90KSB7IHNsb3QgPSByZWludGVycHJldF9jYXN0PFAqPigtMSk7IH0KLSAgICBzdGF0
aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShQKiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gcmVpbnRl
cnByZXRfY2FzdDxQKj4oLTEpOyB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
U2ltcGxlQ2xhc3NIYXNoVHJhaXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8VD4gewotICAgIHN0YXRp
YyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwotICAgIHN0YXRpYyB2b2lkIGNv
bnN0cnVjdERlbGV0ZWRWYWx1ZShUJiBzbG90KSB7IG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNz
b2Yoc2xvdCkpIFQoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQotICAgIHN0YXRpYyBib29sIGlz
RGVsZXRlZFZhbHVlKGNvbnN0IFQmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpOyB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBEZWxl
dGVyPiBzdHJ1Y3QgSGFzaFRyYWl0czxzdGQ6OnVuaXF1ZV9wdHI8VCwgRGVsZXRlcj4+IDogU2lt
cGxlQ2xhc3NIYXNoVHJhaXRzPHN0ZDo6dW5pcXVlX3B0cjxULCBEZWxldGVyPj4gewotICAgIHR5
cGVkZWYgc3RkOjpudWxscHRyX3QgRW1wdHlWYWx1ZVR5cGU7Ci0gICAgc3RhdGljIEVtcHR5VmFs
dWVUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBudWxscHRyOyB9Ci0KLSAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoc3RkOjp1bmlxdWVfcHRyPFQsIERlbGV0ZXI+JiBzbG90
KSB7IG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2Yoc2xvdCkpIHN0ZDo6dW5pcXVlX3B0cjxU
LCBEZWxldGVyPiB7IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KC0xKSB9OyB9Ci0gICAgc3RhdGljIGJv
b2wgaXNEZWxldGVkVmFsdWUoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFQsIERlbGV0ZXI+JiB2YWx1
ZSkgeyByZXR1cm4gdmFsdWUuZ2V0KCkgPT0gcmVpbnRlcnByZXRfY2FzdDxUKj4oLTEpOyB9Ci0K
LSAgICB0eXBlZGVmIFQqIFBlZWtUeXBlOwotICAgIHN0YXRpYyBUKiBwZWVrKGNvbnN0IHN0ZDo6
dW5pcXVlX3B0cjxULCBEZWxldGVyPiYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmdldCgpOyB9Ci0g
ICAgc3RhdGljIFQqIHBlZWsoc3RkOjpudWxscHRyX3QpIHsgcmV0dXJuIG51bGxwdHI7IH0KLQot
ICAgIHN0YXRpYyB2b2lkIGN1c3RvbURlbGV0ZUJ1Y2tldChzdGQ6OnVuaXF1ZV9wdHI8VCwgRGVs
ZXRlcj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgLy8gVGhlIGN1c3RvbSBkZWxldGUgZnVuY3Rp
b24gZXhpc3RzIHRvIGF2b2lkIGEgZGVhZCBzdG9yZSBiZWZvcmUgdGhlIHZhbHVlIGlzIGRlc3Ry
dWN0ZWQuCi0gICAgICAgIC8vIFRoZSBub3JtYWwgZGVzdHJ1Y3Rpb24gc2VxdWVuY2Ugb2YgYSBi
dWNrZXQgd291bGQgYmU6Ci0gICAgICAgIC8vIDEpIENhbGwgdGhlIGRlc3RydWN0b3Igb2YgdW5p
cXVlX3B0ci4KLSAgICAgICAgLy8gMikgdW5pcXVlX3B0ciBzdG9yZSBhIHplcm8gZm9yIGl0cyBp
bnRlcm5hbCBwb2ludGVyLgotICAgICAgICAvLyAzKSB1bmlxdWVfcHRyIGRlc3Ryb3lzIGl0cyB2
YWx1ZS4KLSAgICAgICAgLy8gNCkgQ2FsbCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoKSB0byBzZXQg
dGhlIGJ1Y2tldCBhcyBkZXN0cnVjdGVkLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgcHJv
YmxlbSBpcyB0aGUgY2FsbCBpbiAoMykgcHJldmVudHMgdGhlIGNvbXBpbGUgZnJvbSBlbGltaW5h
dGluZyB0aGUgZGVhZCBzdG9yZSBpbiAoMikKLSAgICAgICAgLy8gYmVjYXNlIGEgc2lkZSBlZmZl
Y3Qgb2YgZnJlZSgpIGNvdWxkIGJlIG9ic2VydmluZyB0aGUgdmFsdWUuCi0gICAgICAgIC8vCi0g
ICAgICAgIC8vIFRoaXMgdmVyc2lvbiBvZiBkZWxldGVCdWNrZXQoKSBlbnN1cmVzIHRoZSBkZWFk
IDIgc3RvcmVzIGNoYW5naW5nICJ2YWx1ZSIKLSAgICAgICAgLy8gYXJlIG9uIHRoZSBzYW1lIHNp
ZGUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCi0gICAgICAgIEFTU0VSVCghaXNEZWxldGVkVmFsdWUo
dmFsdWUpKTsKLSAgICAgICAgVCogcG9pbnRlciA9IHZhbHVlLnJlbGVhc2UoKTsKLSAgICAgICAg
Y29uc3RydWN0RGVsZXRlZFZhbHVlKHZhbHVlKTsKLQotICAgICAgICAvLyBUaGUgbnVsbCBjYXNl
IGhhcHBlbnMgaWYgYSBjYWxsZXIgdXNlcyBzdGQ6Om1vdmUoKSB0byByZW1vdmUgdGhlIHBvaW50
ZXIgYmVmb3JlIGNhbGxpbmcgcmVtb3ZlKCkKLSAgICAgICAgLy8gd2l0aCBhbiBpdGVyYXRvci4g
VGhpcyBpcyB2ZXJ5IHVuY29tbW9uLgotICAgICAgICBpZiAoTElLRUxZKHBvaW50ZXIpKQotICAg
ICAgICAgICAgRGVsZXRlcigpKHBvaW50ZXIpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFA+IHN0cnVjdCBIYXNoVHJhaXRzPFJlZlB0cjxQPj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFp
dHM8UmVmUHRyPFA+PiB7Ci0gICAgc3RhdGljIFAqIGVtcHR5VmFsdWUoKSB7IHJldHVybiBudWxs
cHRyOyB9Ci0KLSAgICB0eXBlZGVmIFAqIFBlZWtUeXBlOwotICAgIHN0YXRpYyBQZWVrVHlwZSBw
ZWVrKGNvbnN0IFJlZlB0cjxQPiYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmdldCgpOyB9Ci0gICAg
c3RhdGljIFBlZWtUeXBlIHBlZWsoUCogdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Ci0KLSAgICBz
dGF0aWMgdm9pZCBjdXN0b21EZWxldGVCdWNrZXQoUmVmUHRyPFA+JiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIC8vIFNlZSB1bmlxdWVfcHRyJ3MgY3VzdG9tRGVsZXRlQnVja2V0KCkgZm9yIGFuIGV4
cGxhbmF0aW9uLgotICAgICAgICBBU1NFUlQoIVNpbXBsZUNsYXNzSGFzaFRyYWl0czxSZWZQdHI8
UD4+Ojppc0RlbGV0ZWRWYWx1ZSh2YWx1ZSkpOwotICAgICAgICBhdXRvIHZhbHVlVG9CZURlc3Ry
b3llZCA9IFdURk1vdmUodmFsdWUpOwotICAgICAgICBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8UmVm
UHRyPFA+Pjo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgSGFzaFRyYWl0czxSZWY8UD4+IDogU2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPFJlZjxQPj4gewotICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1pl
cm8gPSB0cnVlOwotICAgIHN0YXRpYyBSZWY8UD4gZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIEhhc2hU
YWJsZUVtcHR5VmFsdWU7IH0KLQotICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0lzRW1wdHlWYWx1
ZUZ1bmN0aW9uID0gdHJ1ZTsKLSAgICBzdGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUoY29uc3QgUmVm
PFA+JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVFbXB0eVZhbHVlKCk7IH0KLQot
ICAgIHN0YXRpYyB2b2lkIGFzc2lnblRvRW1wdHkoUmVmPFA+JiBlbXB0eVZhbHVlLCBSZWY8UD4m
JiBuZXdWYWx1ZSkgeyBBU1NFUlQoaXNFbXB0eVZhbHVlKGVtcHR5VmFsdWUpKTsgZW1wdHlWYWx1
ZS5hc3NpZ25Ub0hhc2hUYWJsZUVtcHR5VmFsdWUoV1RGTW92ZShuZXdWYWx1ZSkpOyB9Ci0KLSAg
ICB0eXBlZGVmIFAqIFBlZWtUeXBlOwotICAgIHN0YXRpYyBQZWVrVHlwZSBwZWVrKGNvbnN0IFJl
ZjxQPiYgdmFsdWUpIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8UGVla1R5cGU+KHZhbHVlLnB0ckFsbG93
aW5nSGFzaFRhYmxlRW1wdHlWYWx1ZSgpKTsgfQotICAgIHN0YXRpYyBQZWVrVHlwZSBwZWVrKFAq
IHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfQotCi0gICAgdHlwZWRlZiBzdGQ6Om9wdGlvbmFsPFJl
ZjxQPj4gVGFrZVR5cGU7Ci0gICAgc3RhdGljIFRha2VUeXBlIHRha2UoUmVmPFA+JiYgdmFsdWUp
IHsgcmV0dXJuIGlzRW1wdHlWYWx1ZSh2YWx1ZSkgPyBzdGQ6Om51bGxvcHQgOiBzdGQ6Om9wdGlv
bmFsPFJlZjxQPj4oV1RGTW92ZSh2YWx1ZSkpOyB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBI
YXNoVHJhaXRzPFN0cmluZz4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8U3RyaW5nPiB7Ci0gICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOwotICAgIHN0
YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCBTdHJpbmcmKTsKLQotICAgIHN0YXRpYyB2b2lk
IGN1c3RvbURlbGV0ZUJ1Y2tldChTdHJpbmcmKTsKLX07Ci0KLS8vIFRoaXMgc3RydWN0IHRlbXBs
YXRlIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiB0aGUgaXNIYXNoVHJhaXRzRW1wdHlW
YWx1ZSBmdW5jdGlvbiwKLS8vIHdoaWNoIHNlbGVjdHMgZWl0aGVyIHRoZSBlbXB0eVZhbHVlIGZ1
bmN0aW9uIG9yIHRoZSBpc0VtcHR5VmFsdWUgZnVuY3Rpb24gdG8gY2hlY2sgZm9yIGVtcHR5IHZh
bHVlcy4KLXRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cywgYm9vbCBoYXNFbXB0eVZhbHVlRnVuY3Rp
b24+IHN0cnVjdCBIYXNoVHJhaXRzRW1wdHlWYWx1ZUNoZWNrZXI7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBUcmFpdHM+IHN0cnVjdCBIYXNoVHJhaXRzRW1wdHlWYWx1ZUNoZWNrZXI8VHJhaXRzLCB0cnVl
PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNv
bnN0IFQmIHZhbHVlKSB7IHJldHVybiBUcmFpdHM6OmlzRW1wdHlWYWx1ZSh2YWx1ZSk7IH0KLX07
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHM+IHN0cnVjdCBIYXNoVHJhaXRzRW1wdHlWYWx1ZUNo
ZWNrZXI8VHJhaXRzLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBi
b29sIGlzRW1wdHlWYWx1ZShjb25zdCBUJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gVHJhaXRz
OjplbXB0eVZhbHVlKCk7IH0KLX07Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IFQ+IGlubGluZSBib29sIGlzSGFzaFRyYWl0c0VtcHR5VmFsdWUoY29uc3QgVCYgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIEhhc2hUcmFpdHNFbXB0eVZhbHVlQ2hlY2tlcjxUcmFpdHMsIFRyYWl0czo6
aGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24+Ojppc0VtcHR5VmFsdWUodmFsdWUpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSGFzaFRyYWl0SGFzQ3Vz
dG9tRGVsZXRlIHsKLSAgICBzdGF0aWMgVCYgYnVja2V0QXJnOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFg+IHN0YXRpYyBzdGQ6OnRydWVfdHlwZSBUZXN0SGFzQ3VzdG9tRGVsZXRlKFgqLCBkZWNs
dHlwZShYOjpjdXN0b21EZWxldGVCdWNrZXQoYnVja2V0QXJnKSkqID0gbnVsbHB0cik7Ci0gICAg
c3RhdGljIHN0ZDo6ZmFsc2VfdHlwZSBUZXN0SGFzQ3VzdG9tRGVsZXRlKC4uLik7Ci0gICAgdHlw
ZWRlZiBkZWNsdHlwZShUZXN0SGFzQ3VzdG9tRGVsZXRlKHN0YXRpY19jYXN0PFRyYWl0cyo+KG51
bGxwdHIpKSkgUmVzdWx0VHlwZTsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IFJlc3Vs
dFR5cGU6OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBU
PgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SGFzaFRyYWl0SGFzQ3VzdG9tRGVsZXRlPFRyYWl0
cywgVD46OnZhbHVlPjo6dHlwZQotaGFzaFRyYWl0c0RlbGV0ZUJ1Y2tldChUJiB2YWx1ZSkKLXsK
LSAgICBUcmFpdHM6OmN1c3RvbURlbGV0ZUJ1Y2tldCh2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgVD4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFIYXNo
VHJhaXRIYXNDdXN0b21EZWxldGU8VHJhaXRzLCBUPjo6dmFsdWU+Ojp0eXBlCi1oYXNoVHJhaXRz
RGVsZXRlQnVja2V0KFQmIHZhbHVlKQotewotICAgIHZhbHVlLn5UKCk7Ci0gICAgVHJhaXRzOjpj
b25zdHJ1Y3REZWxldGVkVmFsdWUodmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGaXJz
dFRyYWl0c0FyZywgdHlwZW5hbWUgU2Vjb25kVHJhaXRzQXJnPgotc3RydWN0IFBhaXJIYXNoVHJh
aXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8c3RkOjpwYWlyPHR5cGVuYW1lIEZpcnN0VHJhaXRzQXJn
OjpUcmFpdFR5cGUsIHR5cGVuYW1lIFNlY29uZFRyYWl0c0FyZzo6VHJhaXRUeXBlPj4gewotICAg
IHR5cGVkZWYgRmlyc3RUcmFpdHNBcmcgRmlyc3RUcmFpdHM7Ci0gICAgdHlwZWRlZiBTZWNvbmRU
cmFpdHNBcmcgU2Vjb25kVHJhaXRzOwotICAgIHR5cGVkZWYgc3RkOjpwYWlyPHR5cGVuYW1lIEZp
cnN0VHJhaXRzOjpUcmFpdFR5cGUsIHR5cGVuYW1lIFNlY29uZFRyYWl0czo6VHJhaXRUeXBlPiBU
cmFpdFR5cGU7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8dHlwZW5hbWUgRmlyc3RUcmFpdHM6OkVt
cHR5VmFsdWVUeXBlLCB0eXBlbmFtZSBTZWNvbmRUcmFpdHM6OkVtcHR5VmFsdWVUeXBlPiBFbXB0
eVZhbHVlVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBG
aXJzdFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybyAmJiBTZWNvbmRUcmFpdHM6OmVtcHR5VmFsdWVJ
c1plcm87Ci0gICAgc3RhdGljIEVtcHR5VmFsdWVUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBz
dGQ6Om1ha2VfcGFpcihGaXJzdFRyYWl0czo6ZW1wdHlWYWx1ZSgpLCBTZWNvbmRUcmFpdHM6OmVt
cHR5VmFsdWUoKSk7IH0KLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtVGFibGVT
aXplID0gRmlyc3RUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7Ci0KLSAgICBzdGF0aWMgdm9pZCBj
b25zdHJ1Y3REZWxldGVkVmFsdWUoVHJhaXRUeXBlJiBzbG90KSB7IEZpcnN0VHJhaXRzOjpjb25z
dHJ1Y3REZWxldGVkVmFsdWUoc2xvdC5maXJzdCk7IH0KLSAgICBzdGF0aWMgYm9vbCBpc0RlbGV0
ZWRWYWx1ZShjb25zdCBUcmFpdFR5cGUmIHZhbHVlKSB7IHJldHVybiBGaXJzdFRyYWl0czo6aXNE
ZWxldGVkVmFsdWUodmFsdWUuZmlyc3QpOyB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGaXJz
dCwgdHlwZW5hbWUgU2Vjb25kPgotc3RydWN0IEhhc2hUcmFpdHM8c3RkOjpwYWlyPEZpcnN0LCBT
ZWNvbmQ+PiA6IHB1YmxpYyBQYWlySGFzaFRyYWl0czxIYXNoVHJhaXRzPEZpcnN0PiwgSGFzaFRy
YWl0czxTZWNvbmQ+PiB7IH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZpcnN0VHJhaXQsIHR5cGVu
YW1lLi4uIFRyYWl0cz4KLXN0cnVjdCBUdXBsZUhhc2hUcmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0
czxzdGQ6OnR1cGxlPHR5cGVuYW1lIEZpcnN0VHJhaXQ6OlRyYWl0VHlwZSwgdHlwZW5hbWUgVHJh
aXRzOjpUcmFpdFR5cGUuLi4+PiB7Ci0gICAgdHlwZWRlZiBzdGQ6OnR1cGxlPHR5cGVuYW1lIEZp
cnN0VHJhaXQ6OlRyYWl0VHlwZSwgdHlwZW5hbWUgVHJhaXRzOjpUcmFpdFR5cGUuLi4+IFRyYWl0
VHlwZTsKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8dHlwZW5hbWUgRmlyc3RUcmFpdDo6RW1wdHlW
YWx1ZVR5cGUsIHR5cGVuYW1lIFRyYWl0czo6RW1wdHlWYWx1ZVR5cGUuLi4+IEVtcHR5VmFsdWVU
eXBlOwotCi0gICAgLy8gV2Ugc2hvdWxkIHVzZSBlbXB0eVZhbHVlSXNaZXJvID0gVHJhaXRzOjpl
bXB0eVZhbHVlSXNaZXJvICYmLi4uIHdoZW5ldmVyIHdlIHN3aXRjaCB0byBDKysxNy4gV2UgY2Fu
J3QgZG8gYW55dGhpbmcKLSAgICAvLyBiZXR0ZXIgaGVyZSByaWdodCBub3cgYmVjYXVzZSBHQ0Mg
Y2FuJ3QgZG8gQysrLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJvb2xUeXBlPgotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBhbGxUcnVlKEJvb2xUeXBlIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsg
fQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJvb2xUeXBlLCB0eXBlbmFtZS4uLiBCb29sVHlwZXM+
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGFsbFRydWUoQm9vbFR5cGUgdmFsdWUsIEJvb2xU
eXBlcy4uLiB2YWx1ZXMpIHsgcmV0dXJuIHZhbHVlICYmIGFsbFRydWUodmFsdWVzLi4uKTsgfQot
ICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBhbGxUcnVlKEZpcnN0VHJh
aXQ6OmVtcHR5VmFsdWVJc1plcm8sIFRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVyby4uLik7Ci0gICAg
c3RhdGljIEVtcHR5VmFsdWVUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6Om1ha2VfdHVw
bGUoRmlyc3RUcmFpdDo6ZW1wdHlWYWx1ZSgpLCBUcmFpdHM6OmVtcHR5VmFsdWUoKS4uLik7IH0K
LQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXplID0gRmlyc3RUcmFp
dDo6bWluaW11bVRhYmxlU2l6ZTsKLQotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShUcmFpdFR5cGUmIHNsb3QpIHsgRmlyc3RUcmFpdDo6Y29uc3RydWN0RGVsZXRlZFZhbHVl
KHN0ZDo6Z2V0PDA+KHNsb3QpKTsgfQotICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNv
bnN0IFRyYWl0VHlwZSYgdmFsdWUpIHsgcmV0dXJuIEZpcnN0VHJhaXQ6OmlzRGVsZXRlZFZhbHVl
KHN0ZDo6Z2V0PDA+KHZhbHVlKSk7IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFRyYWl0
cz4KLXN0cnVjdCBIYXNoVHJhaXRzPHN0ZDo6dHVwbGU8VHJhaXRzLi4uPj4gOiBwdWJsaWMgVHVw
bGVIYXNoVHJhaXRzPEhhc2hUcmFpdHM8VHJhaXRzPi4uLj4geyB9OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlUeXBlQXJnLCB0eXBlbmFtZSBWYWx1ZVR5cGVBcmc+Ci1zdHJ1Y3QgS2V5VmFsdWVQ
YWlyIHsKLSAgICB0eXBlZGVmIEtleVR5cGVBcmcgS2V5VHlwZTsKLQotICAgIEtleVZhbHVlUGFp
cigpCi0gICAgewotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+
Ci0gICAgS2V5VmFsdWVQYWlyKEsmJiBrZXksIFYmJiB2YWx1ZSkKLSAgICAgICAgOiBrZXkoc3Rk
Ojpmb3J3YXJkPEs+KGtleSkpCi0gICAgICAgICwgdmFsdWUoc3RkOjpmb3J3YXJkPFY+KHZhbHVl
KSkKLSAgICB7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIE90aGVyS2V5VHlwZSwg
dHlwZW5hbWUgT3RoZXJWYWx1ZVR5cGU+Ci0gICAgS2V5VmFsdWVQYWlyKEtleVZhbHVlUGFpcjxP
dGhlcktleVR5cGUsIE90aGVyVmFsdWVUeXBlPiYmIG90aGVyKQotICAgICAgICA6IGtleShzdGQ6
OmZvcndhcmQ8T3RoZXJLZXlUeXBlPihvdGhlci5rZXkpKQotICAgICAgICAsIHZhbHVlKHN0ZDo6
Zm9yd2FyZDxPdGhlclZhbHVlVHlwZT4ob3RoZXIudmFsdWUpKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBLZXlUeXBlQXJnIGtleTsKLSAgICBWYWx1ZVR5cGVBcmcgdmFsdWUgeyB9OwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBWYWx1ZVRyYWl0c0FyZz4KLXN0
cnVjdCBLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8S2V5VmFsdWVQ
YWlyPHR5cGVuYW1lIEtleVRyYWl0c0FyZzo6VHJhaXRUeXBlLCB0eXBlbmFtZSBWYWx1ZVRyYWl0
c0FyZzo6VHJhaXRUeXBlPj4gewotICAgIHR5cGVkZWYgS2V5VHJhaXRzQXJnIEtleVRyYWl0czsK
LSAgICB0eXBlZGVmIFZhbHVlVHJhaXRzQXJnIFZhbHVlVHJhaXRzOwotICAgIHR5cGVkZWYgS2V5
VmFsdWVQYWlyPHR5cGVuYW1lIEtleVRyYWl0czo6VHJhaXRUeXBlLCB0eXBlbmFtZSBWYWx1ZVRy
YWl0czo6VHJhaXRUeXBlPiBUcmFpdFR5cGU7Ci0gICAgdHlwZWRlZiBLZXlWYWx1ZVBhaXI8dHlw
ZW5hbWUgS2V5VHJhaXRzOjpFbXB0eVZhbHVlVHlwZSwgdHlwZW5hbWUgVmFsdWVUcmFpdHM6OkVt
cHR5VmFsdWVUeXBlPiBFbXB0eVZhbHVlVHlwZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVl
VHJhaXRzQXJnOjpUcmFpdFR5cGUgVmFsdWVUeXBlOwotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wg
ZW1wdHlWYWx1ZUlzWmVybyA9IEtleVRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybyAmJiBWYWx1ZVRy
YWl0czo6ZW1wdHlWYWx1ZUlzWmVybzsKLSAgICBzdGF0aWMgRW1wdHlWYWx1ZVR5cGUgZW1wdHlW
YWx1ZSgpIHsgcmV0dXJuIEtleVZhbHVlUGFpcjx0eXBlbmFtZSBLZXlUcmFpdHM6OkVtcHR5VmFs
dWVUeXBlLCB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6RW1wdHlWYWx1ZVR5cGU+KEtleVRyYWl0czo6
ZW1wdHlWYWx1ZSgpLCBWYWx1ZVRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsgfQotCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJs
ZVNpemU7Ci0KLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVHJhaXRUeXBl
JiBzbG90KSB7IEtleVRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKHNsb3Qua2V5KTsgfQot
ICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFRyYWl0VHlwZSYgdmFsdWUpIHsg
cmV0dXJuIEtleVRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUua2V5KTsgfQotCi0gICAgc3Rh
dGljIHZvaWQgY3VzdG9tRGVsZXRlQnVja2V0KFRyYWl0VHlwZSYgdmFsdWUpCi0gICAgewotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxLZXlWYWx1
ZVBhaXI8aW50LCBpbnQ+Pjo6dmFsdWUsCi0gICAgICAgICAgICAiVGhlIHdyYXBwZXIgaXRzZWxm
IGhhcyB0byBiZSB0cml2aWFsbHkgZGVzdHJ1Y3RpYmxlIGZvciBjdXN0b21EZWxldGVCdWNrZXQo
KSB0byBtYWtlIHNlbnNlLCBzaW5jZSB3ZSBkbyBub3QgZGVzdHJ1Y3QgdGhlIHdyYXBwZXIgaXRz
ZWxmLiIpOwotCi0gICAgICAgIGhhc2hUcmFpdHNEZWxldGVCdWNrZXQ8S2V5VHJhaXRzPih2YWx1
ZS5rZXkpOwotICAgICAgICB2YWx1ZS52YWx1ZS5+VmFsdWVUeXBlKCk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZT4KLXN0cnVjdCBIYXNoVHJhaXRz
PEtleVZhbHVlUGFpcjxLZXksIFZhbHVlPj4gOiBwdWJsaWMgS2V5VmFsdWVQYWlySGFzaFRyYWl0
czxIYXNoVHJhaXRzPEtleT4sIEhhc2hUcmFpdHM8VmFsdWU+PiB7IH07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1zdHJ1Y3QgTnVsbGFibGVIYXNoVHJhaXRzIDogcHVibGljIEhhc2hUcmFpdHM8
VD4gewotICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKLSAg
ICBzdGF0aWMgVCBlbXB0eVZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUPigxKTsg
fQotfTsKLQotLy8gVXNlZnVsIGZvciBjbGFzc2VzIHRoYXQgd2FudCBjb21wbGV0ZSBjb250cm9s
IG92ZXIgd2hhdCBpcyBlbXB0eSBhbmQgd2hhdCBpcyBkZWxldGVkLAotLy8gYW5kIGhvdyB0byBj
b25zdHJ1Y3QgYm90aC4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ3VzdG9tSGFzaFRy
YWl0cyA6IHB1YmxpYyBHZW5lcmljSGFzaFRyYWl0czxUPiB7Ci0gICAgc3RhdGljIGNvbnN0IGJv
b2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0lz
RW1wdHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1
Y3REZWxldGVkVmFsdWUoVCYgc2xvdCkKLSAgICB7Ci0gICAgICAgIG5ldyAoTm90TnVsbCwgc3Rk
OjphZGRyZXNzb2Yoc2xvdCkpIFQoVDo6RGVsZXRlZFZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVCYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdmFsdWUuaXNEZWxldGVkVmFsdWUoKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGlj
IFQgZW1wdHlWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gVChUOjpFbXB0eVZhbHVlKTsK
LSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IFQmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzRW1wdHlWYWx1ZSgpOwotICAgIH0KLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6Okhhc2hUcmFpdHM7Ci11c2luZyBX
VEY6OktleVZhbHVlUGFpcjsKLXVzaW5nIFdURjo6UGFpckhhc2hUcmFpdHM7Ci11c2luZyBXVEY6
Ok51bGxhYmxlSGFzaFRyYWl0czsKLXVzaW5nIFdURjo6U2ltcGxlQ2xhc3NIYXNoVHJhaXRzOwot
Ci0jZW5kaWYgLy8gV1RGX0hhc2hUcmFpdHNfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL0hhc2hlci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL0hhc2hlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWJhMjlmMTQz
M2IwYWJhMDFkMjA1NjQyNmQ0YzE1MWEwMmY5NzhiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9I
YXNoZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA1LTIwMDYsIDIwMDgsIDIwMTAsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxw
YXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgV1RGX0hhc2hlcl9oCi0jZGVmaW5lIFdURl9I
YXNoZXJfaAotCi0jaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9MQ2hhci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gUGF1bCBIc2llaCdzIFN1cGVyRmFz
dEhhc2gKLS8vIGh0dHA6Ly93d3cuYXppbGxpb25tb25rZXlzLmNvbS9xZWQvaGFzaC5odG1sCi0K
LS8vIExDaGFyIGRhdGEgaXMgaW50ZXJwcmV0ZWQgYXMgTGF0aW4tMS1lbmNvZGVkICh6ZXJvIGV4
dGVuZGVkIHRvIDE2IGJpdHMpLgotCi0vLyBOT1RFOiBUaGUgaGFzaCBjb21wdXRhdGlvbiBoZXJl
IG11c3Qgc3RheSBpbiBzeW5jIHdpdGggdGhlIGNyZWF0ZV9oYXNoX3RhYmxlIHNjcmlwdCBpbgot
Ly8gSmF2YVNjcmlwdENvcmUgYW5kIHRoZSBDb2RlR2VuZXJhdG9ySlMucG0gc2NyaXB0IGluIFdl
YkNvcmUuCi0KLS8vIEdvbGRlbiByYXRpby4gQXJiaXRyYXJ5IHN0YXJ0IHZhbHVlIHRvIGF2b2lk
IG1hcHBpbmcgYWxsIHplcm9zIHRvIGEgaGFzaCB2YWx1ZSBvZiB6ZXJvLgotc3RhdGljIGNvbnN0
ZXhwciBjb25zdCB1bnNpZ25lZCBzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZSA9IDB4OUUzNzc5QjlV
OwotCi1jbGFzcyBTdHJpbmdIYXNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIg
Y29uc3QgdW5zaWduZWQgZmxhZ0NvdW50ID0gODsgLy8gU2F2ZSA4IGJpdHMgZm9yIFN0cmluZ0lt
cGwgdG8gdXNlIGFzIGZsYWdzLgotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQg
bWFza0hhc2ggPSAoMVUgPDwgKHNpemVvZih1bnNpZ25lZCkgKiA4IC0gZmxhZ0NvdW50KSkgLSAx
OwotCi0gICAgU3RyaW5nSGFzaGVyKCkKLSAgICAgICAgOiBtX2hhc2goc3RyaW5nSGFzaGluZ1N0
YXJ0VmFsdWUpCi0gICAgICAgICwgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyKGZhbHNlKQotICAgICAg
ICAsIG1fcGVuZGluZ0NoYXJhY3RlcigwKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBUaGUgaGFz
aGVyIGhhc2hlcyB0d28gY2hhcmFjdGVycyBhdCBhIHRpbWUsIGFuZCB0aHVzIGFuICJhbGlnbmVk
IiBoYXNoZXIgaXMgb25lCi0gICAgLy8gd2hlcmUgYW4gZXZlbiBudW1iZXIgb2YgY2hhcmFjdGVy
cyBoYXZlIGJlZW4gYWRkZWQuIENhbGxlcnMgdGhhdCBhbHdheXMgYWRkCi0gICAgLy8gY2hhcmFj
dGVycyB0d28gYXQgYSB0aW1lIGNhbiB1c2UgdGhlICJhc3N1bWluZyBhbGlnbmVkIiBmdW5jdGlv
bnMuCi0gICAgdm9pZCBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKFVDaGFyIGEsIFVDaGFy
IGIpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1faGFzUGVuZGluZ0NoYXJhY3Rlcik7Ci0gICAg
ICAgIG1faGFzaCArPSBhOwotICAgICAgICBtX2hhc2ggPSAobV9oYXNoIDw8IDE2KSBeICgoYiA8
PCAxMSkgXiBtX2hhc2gpOwotICAgICAgICBtX2hhc2ggKz0gbV9oYXNoID4+IDExOwotICAgIH0K
LQotICAgIHZvaWQgYWRkQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlcikKLSAgICB7Ci0gICAgICAg
IGlmIChtX2hhc1BlbmRpbmdDaGFyYWN0ZXIpIHsKLSAgICAgICAgICAgIG1faGFzUGVuZGluZ0No
YXJhY3RlciA9IGZhbHNlOwotICAgICAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25l
ZChtX3BlbmRpbmdDaGFyYWN0ZXIsIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBtX3BlbmRpbmdDaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7Ci0gICAg
ICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRD
aGFyYWN0ZXJzKFVDaGFyIGEsIFVDaGFyIGIpCi0gICAgewotICAgICAgICBpZiAobV9oYXNQZW5k
aW5nQ2hhcmFjdGVyKSB7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgICAgIG1faGFzUGVu
ZGluZ0NoYXJhY3RlciA9IGZhbHNlOwotI2VuZGlmCi0gICAgICAgICAgICBhZGRDaGFyYWN0ZXJz
QXNzdW1pbmdBbGlnbmVkKG1fcGVuZGluZ0NoYXJhY3RlciwgYSk7Ci0gICAgICAgICAgICBtX3Bl
bmRpbmdDaGFyYWN0ZXIgPSBiOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgICAgICAgICBtX2hh
c1BlbmRpbmdDaGFyYWN0ZXIgPSB0cnVlOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKGEsIGIpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gdm9p
ZCBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxl
bmd0aCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9oYXNQZW5kaW5nQ2hhcmFjdGVyKTsKLQot
ICAgICAgICBib29sIHJlbWFpbmRlciA9IGxlbmd0aCAmIDE7Ci0gICAgICAgIGxlbmd0aCA+Pj0g
MTsKLQotICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKLSAgICAgICAgICAgIGFkZENoYXJhY3Rl
cnNBc3N1bWluZ0FsaWduZWQoQ29udmVydGVyKGRhdGFbMF0pLCBDb252ZXJ0ZXIoZGF0YVsxXSkp
OwotICAgICAgICAgICAgZGF0YSArPSAyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlbWFp
bmRlcikKLSAgICAgICAgICAgIGFkZENoYXJhY3RlcihDb252ZXJ0ZXIoKmRhdGEpKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZENoYXJhY3RlcnNBc3N1bWluZ0Fs
aWduZWQoY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgYWRk
Q2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhLCBsZW5n
dGgpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihU
KT4gdm9pZCBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkKGNvbnN0IFQqIGRhdGEpCi0gICAg
ewotICAgICAgICBBU1NFUlQoIW1faGFzUGVuZGluZ0NoYXJhY3Rlcik7Ci0KLSAgICAgICAgd2hp
bGUgKFQgYSA9ICpkYXRhKyspIHsKLSAgICAgICAgICAgIFQgYiA9ICpkYXRhKys7Ci0gICAgICAg
ICAgICBpZiAoIWIpIHsKLSAgICAgICAgICAgICAgICBhZGRDaGFyYWN0ZXIoQ29udmVydGVyKGEp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFk
ZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoQ29udmVydGVyKGEpLCBDb252ZXJ0ZXIoYikpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGRDaGFy
YWN0ZXJzQXNzdW1pbmdBbGlnbmVkKGNvbnN0IFQqIGRhdGEpCi0gICAgewotICAgICAgICBhZGRD
aGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEpOwotICAg
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gdm9pZCBh
ZGRDaGFyYWN0ZXJzKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAg
ICAgIGlmICghbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAobV9oYXNQ
ZW5kaW5nQ2hhcmFjdGVyKSB7Ci0gICAgICAgICAgICBtX2hhc1BlbmRpbmdDaGFyYWN0ZXIgPSBm
YWxzZTsKLSAgICAgICAgICAgIGFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQobV9wZW5kaW5n
Q2hhcmFjdGVyLCBDb252ZXJ0ZXIoKmRhdGErKykpOwotICAgICAgICAgICAgLS1sZW5ndGg7Ci0g
ICAgICAgIH0KLSAgICAgICAgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBDb252ZXJ0
ZXI+KGRhdGEsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9p
ZCBhZGRDaGFyYWN0ZXJzKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0g
ICAgICAgIGFkZENoYXJhY3RlcnM8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsK
LSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHZv
aWQgYWRkQ2hhcmFjdGVycyhjb25zdCBUKiBkYXRhKQotICAgIHsKLSAgICAgICAgaWYgKG1faGFz
UGVuZGluZ0NoYXJhY3RlciAmJiAqZGF0YSkgewotICAgICAgICAgICAgbV9oYXNQZW5kaW5nQ2hh
cmFjdGVyID0gZmFsc2U7Ci0gICAgICAgICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVk
KG1fcGVuZGluZ0NoYXJhY3RlciwgQ29udmVydGVyKCpkYXRhKyspKTsKLSAgICAgICAgfQotICAg
ICAgICBhZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGRDaGFyYWN0ZXJzKGNvbnN0
IFQqIGRhdGEpCi0gICAgewotICAgICAgICBhZGRDaGFyYWN0ZXJzPFQsIGRlZmF1bHRDb252ZXJ0
ZXI+KGRhdGEpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGhhc2hXaXRoVG9wOEJpdHNNYXNrZWQo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpbmFsaXplQW5kTWFza1RvcDhCaXRzKHBy
b2Nlc3NQZW5kaW5nQ2hhcmFjdGVyKCkpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpbmFsaXplKHByb2Nlc3NQZW5kaW5nQ2hhcmFj
dGVyKCkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRl
cihUKT4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGNvbnN0IFQq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0hhc2hlciBoYXNo
ZXI7Ci0gICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZl
cnRlcj4oZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoV2l0aFRvcDhC
aXRzTWFza2VkKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29u
dmVydGVyKFQpPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29u
c3QgVCogZGF0YSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7Ci0gICAgICAg
IGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSk7
Ci0gICAgICAgIHJldHVybiBoYXNoZXIuaGFzaFdpdGhUb3A4Qml0c01hc2tlZCgpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaEFu
ZE1hc2tUb3A4Qml0cyhjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAg
ICAgICByZXR1cm4gY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHM8VCwgZGVmYXVsdENvbnZlcnRl
cj4oZGF0YSwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0
aWMgdW5zaWduZWQgY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCogZGF0YSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0czxULCBkZWZhdWx0
Q29udmVydGVyPihkYXRhKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hh
ciBDb252ZXJ0ZXIoVCk+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBUKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBTdHJpbmdIYXNoZXIgaGFzaGVyOwot
ICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBDb252ZXJ0ZXI+
KGRhdGEsIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gc3RhdGljIHVuc2ln
bmVkIGNvbXB1dGVIYXNoKGNvbnN0IFQqIGRhdGEpCi0gICAgewotICAgICAgICBTdHJpbmdIYXNo
ZXIgaGFzaGVyOwotICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxU
LCBDb252ZXJ0ZXI+KGRhdGEpOwotICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2go
Y29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNv
bXB1dGVIYXNoPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0
IFQqIGRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2g8VCwgZGVmYXVsdENv
bnZlcnRlcj4oZGF0YSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2hNZW1vcnko
Y29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgc2l6ZV90
IGxlbmd0aEluVUNoYXIgPSBsZW5ndGggLyBzaXplb2YoVUNoYXIpOwotICAgICAgICBTdHJpbmdI
YXNoZXIgaGFzaGVyOwotICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25l
ZChzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KGRhdGEpLCBsZW5ndGhJblVDaGFyKTsKLQotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aCAlIHNpemVvZihVQ2hhcik7ICsraSkK
LSAgICAgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXIoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGRhdGEpW2xlbmd0aEluVUNoYXIgKiBzaXplb2YoVUNoYXIpICsgaV0pOwotCi0gICAgICAgIHJl
dHVybiBoYXNoZXIuaGFzaCgpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+
IHN0YXRpYyB1bnNpZ25lZCBoYXNoTWVtb3J5KGNvbnN0IHZvaWQqIGRhdGEpCi0gICAgewotICAg
ICAgICByZXR1cm4gaGFzaE1lbW9yeShkYXRhLCBsZW5ndGgpOwotICAgIH0KLQotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgZmluYWxpemUodW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhdm9pZFplcm8oYXZhbGFuY2hlQml0cyhoYXNoKSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBmaW5hbGl6ZUFuZE1hc2tUb3A4Qml0cyh1bnNpZ25l
ZCBoYXNoKQotICAgIHsKLSAgICAgICAgLy8gUmVzZXJ2aW5nIHNwYWNlIGZyb20gdGhlIGhpZ2gg
Yml0cyBmb3IgZmxhZ3MgcHJlc2VydmVzIG1vc3Qgb2YgdGhlIGhhc2gncwotICAgICAgICAvLyB2
YWx1ZSwgc2luY2UgaGFzaCBsb29rdXAgdHlwaWNhbGx5IG1hc2tzIG91dCB0aGUgaGlnaCBiaXRz
IGFueXdheS4KLSAgICAgICAgcmV0dXJuIGF2b2lkWmVybyhhdmFsYW5jaGVCaXRzKGhhc2gpICYg
U3RyaW5nSGFzaGVyOjptYXNrSGFzaCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBjb21wdXRlTGl0ZXJhbEhhc2goY29uc3QgVCAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlckNvdW50
XSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmZpbmFsaXplKGNvbXB1dGVM
aXRlcmFsSGFzaEltcGwoc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUsIDAsIGNoYXJhY3RlcnMsIGNo
YXJhY3RlckNvdW50IC0gMSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVu
c2lnbmVkIGNoYXJhY3RlckNvdW50PgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29t
cHV0ZUxpdGVyYWxIYXNoQW5kTWFza1RvcDhCaXRzKGNvbnN0IFQgKCZjaGFyYWN0ZXJzKVtjaGFy
YWN0ZXJDb3VudF0pCi0gICAgewotICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpmaW5hbGl6
ZUFuZE1hc2tUb3A4Qml0cyhjb21wdXRlTGl0ZXJhbEhhc2hJbXBsKHN0cmluZ0hhc2hpbmdTdGFy
dFZhbHVlLCAwLCBjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJDb3VudCAtIDEpKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgc3RhdGljIFVDaGFyIGRlZmF1bHRDb252ZXJ0ZXIoVUNoYXIgY2hhcmFjdGVy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
VUNoYXIgZGVmYXVsdENvbnZlcnRlcihMQ2hhciBjaGFyYWN0ZXIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gY2hhcmFjdGVyOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzMyh1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGhhc2ggXiAoaGFzaCA8PCAxMCk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElO
RSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHMyKHVuc2lnbmVkIGhhc2gp
Ci0gICAgewotICAgICAgICByZXR1cm4gYXZhbGFuY2hlQml0czMoaGFzaCArIChoYXNoID4+IDE1
KSk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGF2YWxhbmNoZUJpdHMxKHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICByZXR1cm4gYXZh
bGFuY2hlQml0czIoaGFzaCBeIChoYXNoIDw8IDIpKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5M
SU5FIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czAodW5zaWduZWQgaGFz
aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdmFsYW5jaGVCaXRzMShoYXNoICsgKGhhc2ggPj4g
NSkpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBhdmFsYW5jaGVCaXRzKHVuc2lnbmVkIGhhc2gpCi0gICAgewotICAgICAgICByZXR1cm4gYXZh
bGFuY2hlQml0czAoaGFzaCBeIChoYXNoIDw8IDMpKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGF2
b2lkcyBldmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5jZSB0aGF0IGlzIHVzZWQg
dG8KLSAgICAvLyBzaWduYWwgImhhc2ggbm90IGNvbXB1dGVkIHlldCIuIFNldHRpbmcgdGhlIGhp
Z2ggYml0IG1haW50YWlucwotICAgIC8vIHJlYXNvbmFibGUgZmlkZWxpdHkgdG8gYSBoYXNoIGNv
ZGUgb2YgMCBiZWNhdXNlIGl0IGlzIGxpa2VseSB0byB5aWVsZAotICAgIC8vIGV4YWN0bHkgMCB3
aGVuIGhhc2ggbG9va3VwIG1hc2tzIG91dCB0aGUgaGlnaCBiaXRzLgotICAgIEFMV0FZU19JTkxJ
TkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdm9pZFplcm8odW5zaWduZWQgaGFzaCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBoYXNoID8gaGFzaCA6ICgweDgwMDAwMDAwID4+IFN0cmluZ0hh
c2hlcjo6ZmxhZ0NvdW50KTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBwcm9jZXNzUGVuZGluZ0No
YXJhY3RlcigpIGNvbnN0Ci0gICAgewotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2hhc2g7
Ci0KLSAgICAgICAgLy8gSGFuZGxlIGVuZCBjYXNlLgotICAgICAgICBpZiAobV9oYXNQZW5kaW5n
Q2hhcmFjdGVyKSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gbV9wZW5kaW5nQ2hhcmFjdGVyOwot
ICAgICAgICAgICAgcmVzdWx0IF49IHJlc3VsdCA8PCAxMTsKLSAgICAgICAgICAgIHJlc3VsdCAr
PSByZXN1bHQgPj4gMTc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0KLQotICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgbGltaXRzIGl0c2VsZiB0byB0aGUgb2xkZXIs
IG1vcmUgbGltaXRlZCBDKysxMSBjb25zdGV4cHIgY2FwYWJpbGl0aWVzLCB1c2luZwotICAgIC8v
IHJlY3Vyc2lvbiBpbnN0ZWFkIG9mIGxvb3BpbmcsIGZvciBleGFtcGxlLiBXb3VsZCBiZSBuaWNl
IHRvIHJld3JpdGUgdGhpcyBpbiBhIHNpbXBsZXIgd2F5Ci0gICAgLy8gb25jZSB3ZSBubyBsb25n
ZXIgbmVlZCB0byBzdXBwb3J0IGNvbXBpbGVycyBsaWtlIEdDQyA0LjkgdGhhdCBkbyBub3QgeWV0
IHN1cHBvcnQgaXQuCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGVXaXRo
UmVtYWluaW5nTGFzdENoYXJhY3RlcjEodW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBoYXNoICsgKGhhc2ggPj4gMTcpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIwKHVuc2lnbmVkIGhh
c2gpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFy
YWN0ZXIxKChoYXNoIDw8IDExKSBeIGhhc2gpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIodW5zaWduZWQg
aGFzaCwgdW5zaWduZWQgY2hhcmFjdGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGN1bGF0
ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyMChoYXNoICsgY2hhcmFjdGVyKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGN1bGF0ZTEodW5zaWduZWQgaGFzaCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBoYXNoICsgKGhhc2ggPj4gMTEpOwotICAgIH0KLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlMCh1bnNpZ25lZCBoYXNoLCB1bnNp
Z25lZCBzZWNvbmRDaGFyYWN0ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsY3VsYXRlMSgo
aGFzaCA8PCAxNikgXiAoKHNlY29uZENoYXJhY3RlciA8PCAxMSkgXiBoYXNoKSk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGUodW5zaWduZWQgaGFzaCwg
dW5zaWduZWQgZmlyc3RDaGFyYWN0ZXIsIHVuc2lnbmVkIHNlY29uZENoYXJhY3RlcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBjYWxjdWxhdGUwKGhhc2ggKyBmaXJzdENoYXJhY3Rlciwgc2Vjb25k
Q2hhcmFjdGVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNvbXB1
dGVMaXRlcmFsSGFzaEltcGwodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IGNo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAo
aW5kZXggPT0gbGVuZ3RoKQotICAgICAgICAgICAgPyBoYXNoIDogKChpbmRleCArIDEpID09IGxl
bmd0aCkKLSAgICAgICAgICAgID8gY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIo
aGFzaCwgY2hhcmFjdGVyc1tpbmRleF0pCi0gICAgICAgICAgICA6IGNvbXB1dGVMaXRlcmFsSGFz
aEltcGwoY2FsY3VsYXRlKGhhc2gsIGNoYXJhY3RlcnNbaW5kZXhdLCBjaGFyYWN0ZXJzW2luZGV4
ICsgMV0pLCBpbmRleCArIDIsIGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgdW5z
aWduZWQgbV9oYXNoOwotICAgIGJvb2wgbV9oYXNQZW5kaW5nQ2hhcmFjdGVyOwotICAgIFVDaGFy
IG1fcGVuZGluZ0NoYXJhY3RlcjsKLX07Ci0KLWNsYXNzIEludGVnZXJIYXNoZXIgewotcHVibGlj
OgotICAgIHZvaWQgYWRkKHVuc2lnbmVkIGludGVnZXIpCi0gICAgewotICAgICAgICBtX3VuZGVy
bHlpbmdIYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChpbnRlZ2VyLCBpbnRlZ2Vy
ID4+IDE2KTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3VuZGVybHlpbmdIYXNoZXIuaGFzaCgpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBTdHJpbmdIYXNoZXIgbV91bmRlcmx5aW5nSGFzaGVyOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV1RGCi0KLXVzaW5nIFdURjo6SW50ZWdlckhhc2hlcjsKLXVzaW5nIFdURjo6U3RyaW5nSGFz
aGVyOwotCi0jZW5kaWYgLy8gV1RGX0hhc2hlcl9oCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvSGV4TnVtYmVyLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvSGV4TnVtYmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2
N2I3MWVkYzA5YzliZTZkZTY1NzY3MGI3MTQzNDRmMjBkODkxNzAuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL0hleE51bWJlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNh
dGVuYXRlLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1lbnVtIEhleENvbnZlcnNpb25Nb2RlIHsg
TG93ZXJjYXNlLCBVcHBlcmNhc2UgfTsKLQotbmFtZXNwYWNlIEludGVybmFsIHsKLQotaW5saW5l
IGNvbnN0IExDaGFyKiBoZXhEaWdpdHNGb3JNb2RlKEhleENvbnZlcnNpb25Nb2RlIG1vZGUpCi17
Ci0gICAgc3RhdGljIGNvbnN0IExDaGFyIGxvd2VyY2FzZUhleERpZ2l0c1sxN10gPSAiMDEyMzQ1
Njc4OWFiY2RlZiI7Ci0gICAgc3RhdGljIGNvbnN0IExDaGFyIHVwcGVyY2FzZUhleERpZ2l0c1sx
N10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7Ci0gICAgcmV0dXJuIG1vZGUgPT0gTG93ZXJjYXNlID8g
bG93ZXJjYXNlSGV4RGlnaXRzIDogdXBwZXJjYXNlSGV4RGlnaXRzOwotfQotCi19IC8vIG5hbWVz
cGFjZSBJbnRlcm5hbAotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgYXBwZW5k
Qnl0ZUFzSGV4KHVuc2lnbmVkIGNoYXIgYnl0ZSwgVCYgZGVzdGluYXRpb24sIEhleENvbnZlcnNp
b25Nb2RlIG1vZGUgPSBVcHBlcmNhc2UpCi17Ci0gICAgYXV0byogaGV4RGlnaXRzID0gSW50ZXJu
YWw6OmhleERpZ2l0c0Zvck1vZGUobW9kZSk7Ci0gICAgZGVzdGluYXRpb24uYXBwZW5kKGhleERp
Z2l0c1tieXRlID4+IDRdKTsKLSAgICBkZXN0aW5hdGlvbi5hcHBlbmQoaGV4RGlnaXRzW2J5dGUg
JiAweEZdKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSB2b2lkIHBsYWNlQnl0
ZUFzSGV4Q29tcHJlc3NJZlBvc3NpYmxlKHVuc2lnbmVkIGNoYXIgYnl0ZSwgVCYgZGVzdGluYXRp
b24sIHVuc2lnbmVkJiBpbmRleCwgSGV4Q29udmVyc2lvbk1vZGUgbW9kZSA9IFVwcGVyY2FzZSkK
LXsKLSAgICBhdXRvKiBoZXhEaWdpdHMgPSBJbnRlcm5hbDo6aGV4RGlnaXRzRm9yTW9kZShtb2Rl
KTsKLSAgICBpZiAoYnl0ZSA+PSAweDEwKQotICAgICAgICBkZXN0aW5hdGlvbltpbmRleCsrXSA9
IGhleERpZ2l0c1tieXRlID4+IDRdOwotICAgIGRlc3RpbmF0aW9uW2luZGV4KytdID0gaGV4RGln
aXRzW2J5dGUgJiAweEZdOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQg
cGxhY2VCeXRlQXNIZXgodW5zaWduZWQgY2hhciBieXRlLCBUJiBkZXN0aW5hdGlvbiwgSGV4Q29u
dmVyc2lvbk1vZGUgbW9kZSA9IFVwcGVyY2FzZSkKLXsKLSAgICBhdXRvKiBoZXhEaWdpdHMgPSBJ
bnRlcm5hbDo6aGV4RGlnaXRzRm9yTW9kZShtb2RlKTsKLSAgICAqZGVzdGluYXRpb24rKyA9IGhl
eERpZ2l0c1tieXRlID4+IDRdOwotICAgICpkZXN0aW5hdGlvbisrID0gaGV4RGlnaXRzW2J5dGUg
JiAweEZdOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgYXBwZW5kVW5z
aWduZWRBc0hleCh1bnNpZ25lZCBudW1iZXIsIFQmIGRlc3RpbmF0aW9uLCBIZXhDb252ZXJzaW9u
TW9kZSBtb2RlID0gVXBwZXJjYXNlKQotewotICAgIGF1dG8qIGhleERpZ2l0cyA9IEludGVybmFs
OjpoZXhEaWdpdHNGb3JNb2RlKG1vZGUpOwotICAgIFZlY3RvcjxMQ2hhciwgOD4gcmVzdWx0Owot
ICAgIGRvIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChoZXhEaWdpdHNbbnVtYmVyICUgMTZdKTsK
LSAgICAgICAgbnVtYmVyID4+PSA0OwotICAgIH0gd2hpbGUgKG51bWJlciA+IDApOwotCi0gICAg
cmVzdWx0LnJldmVyc2UoKTsKLSAgICBkZXN0aW5hdGlvbi5hcHBlbmQocmVzdWx0LmRhdGEoKSwg
cmVzdWx0LnNpemUoKSk7Ci19Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZv
aWQgYXBwZW5kVW5zaWduZWQ2NEFzSGV4KHVpbnQ2NF90IG51bWJlciwgVCYgZGVzdGluYXRpb24s
IEhleENvbnZlcnNpb25Nb2RlIG1vZGUgPSBVcHBlcmNhc2UpCi17Ci0gICAgYXV0byogaGV4RGln
aXRzID0gSW50ZXJuYWw6OmhleERpZ2l0c0Zvck1vZGUobW9kZSk7Ci0gICAgVmVjdG9yPExDaGFy
LCA4PiByZXN1bHQ7Ci0gICAgZG8gewotICAgICAgICByZXN1bHQuYXBwZW5kKGhleERpZ2l0c1tu
dW1iZXIgJSAxNl0pOwotICAgICAgICBudW1iZXIgPj49IDQ7Ci0gICAgfSB3aGlsZSAobnVtYmVy
ID4gMCk7Ci0gICAgCi0gICAgcmVzdWx0LnJldmVyc2UoKTsKLSAgICBkZXN0aW5hdGlvbi5hcHBl
bmQocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7Ci19Ci0KLS8vIFNhbWUgYXMgYXBwZW5k
VW5zaWduZWRBc0hleCwgYnV0IHVzaW5nIGV4YWN0bHkgJ2Rlc2lyZWREaWdpdHMnIGZvciB0aGUg
Y29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdm9pZCBhcHBlbmRVbnNp
Z25lZEFzSGV4Rml4ZWRTaXplKHVuc2lnbmVkIG51bWJlciwgVCYgZGVzdGluYXRpb24sIHVuc2ln
bmVkIGRlc2lyZWREaWdpdHMsIEhleENvbnZlcnNpb25Nb2RlIG1vZGUgPSBVcHBlcmNhc2UpCi17
Ci0gICAgQVNTRVJUKGRlc2lyZWREaWdpdHMpOwotCi0gICAgYXV0byogaGV4RGlnaXRzID0gSW50
ZXJuYWw6OmhleERpZ2l0c0Zvck1vZGUobW9kZSk7Ci0gICAgVmVjdG9yPExDaGFyLCA4PiByZXN1
bHQ7Ci0gICAgZG8gewotICAgICAgICByZXN1bHQuYXBwZW5kKGhleERpZ2l0c1tudW1iZXIgJSAx
Nl0pOwotICAgICAgICBudW1iZXIgPj49IDQ7Ci0gICAgfSB3aGlsZSAocmVzdWx0LnNpemUoKSA8
IGRlc2lyZWREaWdpdHMpOwotCi0gICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPT0gZGVzaXJlZERp
Z2l0cyk7Ci0gICAgcmVzdWx0LnJldmVyc2UoKTsKLSAgICBkZXN0aW5hdGlvbi5hcHBlbmQocmVz
dWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11
c2luZyBXVEY6OmFwcGVuZEJ5dGVBc0hleDsKLXVzaW5nIFdURjo6YXBwZW5kVW5zaWduZWRBc0hl
eDsKLXVzaW5nIFdURjo6YXBwZW5kVW5zaWduZWRBc0hleEZpeGVkU2l6ZTsKLXVzaW5nIFdURjo6
cGxhY2VCeXRlQXNIZXg7Ci11c2luZyBXVEY6OnBsYWNlQnl0ZUFzSGV4Q29tcHJlc3NJZlBvc3Np
YmxlOwotdXNpbmcgV1RGOjpMb3dlcmNhc2U7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci93dGYvSXRlcmF0b3JSYW5nZS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL0l0ZXJhdG9yUmFuZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODRkZjc3ZTA5MmRjOTQwNGQzYzViZjI4ZDFmYjJmNWVlOTFjMTg5ZC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvSXRlcmF0b3JSYW5nZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgV1RGX0l0ZXJhdG9yUmFuZ2VfaAotI2RlZmluZSBXVEZf
SXRlcmF0b3JSYW5nZV9oCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJ
dGVyYXRvcj4KLWNsYXNzIEl0ZXJhdG9yUmFuZ2UgewotcHVibGljOgotICAgIEl0ZXJhdG9yUmFu
Z2UoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkKLSAgICAgICAgOiBtX2JlZ2luKFdURk1v
dmUoYmVnaW4pKQotICAgICAgICAsIG1fZW5kKFdURk1vdmUoZW5kKSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9Ci0gICAgSXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KLQotcHJpdmF0ZToKLSAgICBJdGVy
YXRvciBtX2JlZ2luOwotICAgIEl0ZXJhdG9yIG1fZW5kOwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgSXRlcmF0b3I+Ci1JdGVyYXRvclJhbmdlPEl0ZXJhdG9yPiBtYWtlSXRlcmF0b3JSYW5nZShJ
dGVyYXRvciYmIGJlZ2luLCBJdGVyYXRvciYmIGVuZCkKLXsKLSAgICByZXR1cm4gSXRlcmF0b3JS
YW5nZTxJdGVyYXRvcj4oc3RkOjpmb3J3YXJkPEl0ZXJhdG9yPihiZWdpbiksIHN0ZDo6Zm9yd2Fy
ZDxJdGVyYXRvcj4oZW5kKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8g
V1RGX0l0ZXJhdG9yUmFuZ2VfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL0xpc3RIYXNoU2V0LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93
dGYvTGlzdEhhc2hTZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc4NjA1MjE1
Mzk2MzJkN2Y3NTM0NTFiMTY0NTc3ZWUxZDg4ZWY4YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
TGlzdEhhc2hTZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxNCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDExLCAyMDEyLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgQmVuamFt
aW4gUG91bGFpbiA8aWtpcG91QGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIExpc3RIYXNoU2V0OiBK
dXN0IGxpa2UgSGFzaFNldCwgdGhpcyBjbGFzcyBwcm92aWRlcyBhIFNldAotLy8gaW50ZXJmYWNl
IC0gYSBjb2xsZWN0aW9uIG9mIHVuaXF1ZSBvYmplY3RzIHdpdGggTygxKSBpbnNlcnRpb24sCi0v
LyByZW1vdmFsIGFuZCB0ZXN0IGZvciBjb250YWluZXJzaGlwLiBIb3dldmVyLCBpdCBhbHNvIGhh
cyBhbgotLy8gb3JkZXIgLSBpdGVyYXRpbmcgaXQgd2lsbCBhbHdheXMgZ2l2ZSBiYWNrIHZhbHVl
cyBpbiB0aGUgb3JkZXIKLS8vIGluIHdoaWNoIHRoZXkgYXJlIGFkZGVkLgotCi0vLyBVbmxpa2Ug
aXRlcmF0aW9uIG9mIG1vc3QgV1RGIEhhc2ggZGF0YSBzdHJ1Y3R1cmVzLCBpdGVyYXRpb24gaXMK
LS8vIGd1YXJhbnRlZWQgc2FmZSBhZ2FpbnN0IG11dGF0aW9uIG9mIHRoZSBMaXN0SGFzaFNldCwg
ZXhjZXB0IGZvcgotLy8gcmVtb3ZhbCBvZiB0aGUgaXRlbSBjdXJyZW50bHkgcG9pbnRlZCB0byBi
eSBhIGdpdmVuIGl0ZXJhdG9yLgotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucz4gY2xhc3MgTGlzdEhhc2hTZXQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnPiBjbGFzcyBMaXN0SGFzaFNldEl0ZXJhdG9yOwotdGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmc+IGNsYXNzIExpc3RIYXNo
U2V0Q29uc3RJdGVyYXRvcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmc+IHN0cnVjdCBM
aXN0SGFzaFNldE5vZGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEhhc2hBcmc+IHN0cnVjdCBMaXN0
SGFzaFNldE5vZGVIYXNoRnVuY3Rpb25zOwotdGVtcGxhdGU8dHlwZW5hbWUgSGFzaEFyZz4gc3Ry
dWN0IExpc3RIYXNoU2V0VHJhbnNsYXRvcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcs
IHR5cGVuYW1lIEhhc2hBcmcgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxWYWx1ZUFyZz46Okhhc2g+
IGNsYXNzIExpc3RIYXNoU2V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXByaXZh
dGU6Ci0gICAgdHlwZWRlZiBMaXN0SGFzaFNldE5vZGU8VmFsdWVBcmc+IE5vZGU7Ci0KLSAgICB0
eXBlZGVmIEhhc2hUcmFpdHM8Tm9kZSo+IE5vZGVUcmFpdHM7Ci0gICAgdHlwZWRlZiBMaXN0SGFz
aFNldE5vZGVIYXNoRnVuY3Rpb25zPEhhc2hBcmc+IE5vZGVIYXNoOwotICAgIHR5cGVkZWYgTGlz
dEhhc2hTZXRUcmFuc2xhdG9yPEhhc2hBcmc+IEJhc2VUcmFuc2xhdG9yOwotCi0gICAgdHlwZWRl
ZiBIYXNoQXJnIEhhc2hGdW5jdGlvbnM7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIFZhbHVlQXJn
IFZhbHVlVHlwZTsKLQotICAgIHR5cGVkZWYgTGlzdEhhc2hTZXRJdGVyYXRvcjxWYWx1ZVR5cGUs
IEhhc2hBcmc+IGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgTGlzdEhhc2hTZXRDb25zdEl0ZXJhdG9y
PFZhbHVlVHlwZSwgSGFzaEFyZz4gY29uc3RfaXRlcmF0b3I7Ci0gICAgZnJpZW5kIGNsYXNzIExp
c3RIYXNoU2V0Q29uc3RJdGVyYXRvcjxWYWx1ZVR5cGUsIEhhc2hBcmc+OwotCi0gICAgdHlwZWRl
ZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Ci0gICAg
dHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVy
c2VfaXRlcmF0b3I7Ci0KLSAgICB0eXBlZGVmIEhhc2hUYWJsZUFkZFJlc3VsdDxpdGVyYXRvcj4g
QWRkUmVzdWx0OwotCi0gICAgTGlzdEhhc2hTZXQoKSA9IGRlZmF1bHQ7Ci0gICAgTGlzdEhhc2hT
ZXQoY29uc3QgTGlzdEhhc2hTZXQmKTsKLSAgICBMaXN0SGFzaFNldChMaXN0SGFzaFNldCYmKTsK
LSAgICBMaXN0SGFzaFNldCYgb3BlcmF0b3I9KGNvbnN0IExpc3RIYXNoU2V0Jik7Ci0gICAgTGlz
dEhhc2hTZXQmIG9wZXJhdG9yPShMaXN0SGFzaFNldCYmKTsKLSAgICB+TGlzdEhhc2hTZXQoKTsK
LQotICAgIHZvaWQgc3dhcChMaXN0SGFzaFNldCYpOwotCi0gICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0OwotICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3Q7Ci0KLSAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1ha2VJdGVyYXRvcihtX2hl
YWQpOyB9Ci0gICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbWFrZUl0ZXJhdG9yKG51bGxwdHIp
OyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtYWtlQ29uc3RJ
dGVyYXRvcihtX2hlYWQpOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbWFrZUNvbnN0SXRlcmF0b3IobnVsbHB0cik7IH0KLQotICAgIHJldmVyc2VfaXRlcmF0b3Ig
cmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KLSAgICByZXZlcnNl
X2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9Ci0g
ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQotICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KLQot
ICAgIFZhbHVlVHlwZSYgZmlyc3QoKTsKLSAgICBjb25zdCBWYWx1ZVR5cGUmIGZpcnN0KCkgY29u
c3Q7Ci0gICAgdm9pZCByZW1vdmVGaXJzdCgpOwotICAgIFZhbHVlVHlwZSB0YWtlRmlyc3QoKTsK
LQotICAgIFZhbHVlVHlwZSYgbGFzdCgpOwotICAgIGNvbnN0IFZhbHVlVHlwZSYgbGFzdCgpIGNv
bnN0OwotICAgIHZvaWQgcmVtb3ZlTGFzdCgpOwotICAgIFZhbHVlVHlwZSB0YWtlTGFzdCgpOwot
Ci0gICAgaXRlcmF0b3IgZmluZChjb25zdCBWYWx1ZVR5cGUmKTsKLSAgICBjb25zdF9pdGVyYXRv
ciBmaW5kKGNvbnN0IFZhbHVlVHlwZSYpIGNvbnN0OwotICAgIGJvb2wgY29udGFpbnMoY29uc3Qg
VmFsdWVUeXBlJikgY29uc3Q7Ci0KLSAgICAvLyBBbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiBmaW5k
KCkgdGhhdCBmaW5kcyB0aGUgb2JqZWN0IGJ5IGhhc2hpbmcgYW5kIGNvbXBhcmluZwotICAgIC8v
IHdpdGggc29tZSBvdGhlciB0eXBlLCB0byBhdm9pZCB0aGUgY29zdCBvZiB0eXBlIGNvbnZlcnNp
b24uCi0gICAgLy8gVGhlIEhhc2hUcmFuc2xhdG9yIGludGVyZmFjZSBpcyBkZWZpbmVkIGluIEhh
c2hTZXQuCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUg
dGVtcGxhdGUgYXJndW1lbnRzIHNvIHRoYXQgY2FsbGVycwotICAgIC8vIGNhbiBqdXN0IHBhc3Mg
dGhlIHRyYW5zbGF0b3IgbGV0IHRoZSBjb21waWxlciBkZWR1Y2UgVC4KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4gaXRlcmF0b3IgZmluZChjb25zdCBU
Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IGNv
bnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgVCYpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPiBib29sIGNvbnRhaW5zKGNvbnN0IFQmKSBjb25z
dDsKLQotICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgb2YgYWRkIGlzIGEgcGFpciBvZiBhbiBpdGVy
YXRvciB0byB0aGUgbmV3IHZhbHVlJ3MgbG9jYXRpb24sIAotICAgIC8vIGFuZCBhIGJvb2wgdGhh
dCBpcyB0cnVlIGlmIGFuIG5ldyBlbnRyeSB3YXMgYWRkZWQuCi0gICAgQWRkUmVzdWx0IGFkZChj
b25zdCBWYWx1ZVR5cGUmKTsKLSAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmKTsKLQotICAg
IC8vIEFkZCB0aGUgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi4gSWYgdGhlIHZh
bHVlIHdhcyBhbHJlYWR5IGluCi0gICAgLy8gdGhlIGxpc3QsIGl0IGlzIG1vdmVkIHRvIHRoZSBl
bmQuCi0gICAgQWRkUmVzdWx0IGFwcGVuZE9yTW92ZVRvTGFzdChjb25zdCBWYWx1ZVR5cGUmKTsK
LSAgICBBZGRSZXN1bHQgYXBwZW5kT3JNb3ZlVG9MYXN0KFZhbHVlVHlwZSYmKTsKLQotICAgIC8v
IEFkZCB0aGUgdmFsdWUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY29sbGVjdGlvbi4gSWYgdGhl
IHZhbHVlIHdhcyBhbHJlYWR5IGluCi0gICAgLy8gdGhlIGxpc3QsIGl0IGlzIG1vdmVkIHRvIHRo
ZSBiZWdpbm5pbmcuCi0gICAgQWRkUmVzdWx0IHByZXBlbmRPck1vdmVUb0ZpcnN0KGNvbnN0IFZh
bHVlVHlwZSYpOwotICAgIEFkZFJlc3VsdCBwcmVwZW5kT3JNb3ZlVG9GaXJzdChWYWx1ZVR5cGUm
Jik7Ci0KLSAgICBBZGRSZXN1bHQgaW5zZXJ0QmVmb3JlKGNvbnN0IFZhbHVlVHlwZSYgYmVmb3Jl
VmFsdWUsIGNvbnN0IFZhbHVlVHlwZSYgbmV3VmFsdWUpOwotICAgIEFkZFJlc3VsdCBpbnNlcnRC
ZWZvcmUoY29uc3QgVmFsdWVUeXBlJiBiZWZvcmVWYWx1ZSwgVmFsdWVUeXBlJiYgbmV3VmFsdWUp
OwotICAgIEFkZFJlc3VsdCBpbnNlcnRCZWZvcmUoaXRlcmF0b3IsIGNvbnN0IFZhbHVlVHlwZSYp
OwotICAgIEFkZFJlc3VsdCBpbnNlcnRCZWZvcmUoaXRlcmF0b3IsIFZhbHVlVHlwZSYmKTsKLQot
ICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYpOwotICAgIGJvb2wgcmVtb3ZlKGl0ZXJh
dG9yKTsKLSAgICB2b2lkIGNsZWFyKCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1bmxpbmsoTm9k
ZSopOwotICAgIHZvaWQgdW5saW5rQW5kRGVsZXRlKE5vZGUqKTsKLSAgICB2b2lkIGFwcGVuZE5v
ZGUoTm9kZSopOwotICAgIHZvaWQgcHJlcGVuZE5vZGUoTm9kZSopOwotICAgIHZvaWQgaW5zZXJ0
Tm9kZUJlZm9yZShOb2RlKiBiZWZvcmVOb2RlLCBOb2RlKiBuZXdOb2RlKTsKLSAgICB2b2lkIGRl
bGV0ZUFsbE5vZGVzKCk7Ci0gICAgCi0gICAgaXRlcmF0b3IgbWFrZUl0ZXJhdG9yKE5vZGUqKTsK
LSAgICBjb25zdF9pdGVyYXRvciBtYWtlQ29uc3RJdGVyYXRvcihOb2RlKikgY29uc3Q7Ci0KLSAg
ICBIYXNoVGFibGU8Tm9kZSosIE5vZGUqLCBJZGVudGl0eUV4dHJhY3RvciwgTm9kZUhhc2gsIE5v
ZGVUcmFpdHMsIE5vZGVUcmFpdHM+IG1faW1wbDsKLSAgICBOb2RlKiBtX2hlYWQgeyBudWxscHRy
IH07Ci0gICAgTm9kZSogbV90YWlsIHsgbnVsbHB0ciB9OwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVBcmc+IHN0cnVjdCBMaXN0SGFzaFNldE5vZGUgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgTGlzdEhh
c2hTZXROb2RlKFQmJiB2YWx1ZSkKLSAgICAgICAgOiBtX3ZhbHVlKHN0ZDo6Zm9yd2FyZDxUPih2
YWx1ZSkpCi0gICAgewotICAgIH0KLQotICAgIFZhbHVlQXJnIG1fdmFsdWU7Ci0gICAgTGlzdEhh
c2hTZXROb2RlKiBtX3ByZXYgeyBudWxscHRyIH07Ci0gICAgTGlzdEhhc2hTZXROb2RlKiBtX25l
eHQgeyBudWxscHRyIH07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoQXJnPiBzdHJ1Y3Qg
TGlzdEhhc2hTZXROb2RlSGFzaEZ1bmN0aW9ucyB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYga2V5KSB7IHJldHVybiBIYXNoQXJnOjpoYXNo
KGtleS0+bV92YWx1ZSk7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBUJiBhLCBjb25zdCBUJiBiKSB7IHJldHVybiBIYXNoQXJnOjplcXVhbChhLT5t
X3ZhbHVlLCBiLT5tX3ZhbHVlKTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZUFyZywgdHlwZW5hbWUgSGFzaEFyZz4gY2xhc3MgTGlzdEhhc2hTZXRJdGVyYXRvciB7Ci1wcml2
YXRlOgotICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8VmFsdWVBcmcsIEhhc2hBcmc+IExpc3RIYXNo
U2V0VHlwZTsKLSAgICB0eXBlZGVmIExpc3RIYXNoU2V0SXRlcmF0b3I8VmFsdWVBcmcsIEhhc2hB
cmc+IGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgTGlzdEhhc2hTZXRDb25zdEl0ZXJhdG9yPFZhbHVl
QXJnLCBIYXNoQXJnPiBjb25zdF9pdGVyYXRvcjsKLSAgICB0eXBlZGVmIExpc3RIYXNoU2V0Tm9k
ZTxWYWx1ZUFyZz4gTm9kZTsKLSAgICB0eXBlZGVmIFZhbHVlQXJnIFZhbHVlVHlwZTsKLQotICAg
IGZyaWVuZCBjbGFzcyBMaXN0SGFzaFNldDxWYWx1ZUFyZywgSGFzaEFyZz47Ci0KLSAgICBMaXN0
SGFzaFNldEl0ZXJhdG9yKGNvbnN0IExpc3RIYXNoU2V0VHlwZSogc2V0LCBOb2RlKiBwb3NpdGlv
bikgOiBtX2l0ZXJhdG9yKHNldCwgcG9zaXRpb24pIHsgfQotCi1wdWJsaWM6Ci0gICAgdHlwZWRl
ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwotICAgIHR5cGVkZWYgVmFsdWVUeXBlIHZhbHVl
X3R5cGU7Ci0gICAgdHlwZWRlZiBWYWx1ZVR5cGUqIHBvaW50ZXI7Ci0gICAgdHlwZWRlZiBWYWx1
ZVR5cGUmIHJlZmVyZW5jZTsKLSAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7Ci0KLSAgICBMaXN0SGFzaFNldEl0ZXJhdG9yKCkgeyB9
Ci0KLSAgICAvLyBkZWZhdWx0IGNvcHksIGFzc2lnbm1lbnQgYW5kIGRlc3RydWN0b3IgYXJlIE9L
Ci0KLSAgICBWYWx1ZVR5cGUqIGdldCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWVU
eXBlKj4obV9pdGVyYXRvci5nZXQoKSk7IH0KLSAgICBWYWx1ZVR5cGUmIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuICpnZXQoKTsgfQotICAgIFZhbHVlVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIGdldCgpOyB9Ci0KLSAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgKyttX2l0
ZXJhdG9yOyByZXR1cm4gKnRoaXM7IH0KLQotICAgIC8vIHBvc3RmaXggKysgaW50ZW50aW9uYWxs
eSBvbWl0dGVkCi0KLSAgICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsgLS1tX2l0ZXJhdG9yOyBy
ZXR1cm4gKnRoaXM7IH0KLQotICAgIC8vIHBvc3RmaXggLS0gaW50ZW50aW9uYWxseSBvbWl0dGVk
Ci0KLSAgICAvLyBDb21wYXJpc29uLgotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3IgPT0gb3RoZXIubV9pdGVyYXRvcjsg
fQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIG1faXRlcmF0b3IgIT0gb3RoZXIubV9pdGVyYXRvcjsgfQotCi0gICAgb3BlcmF0b3IgY29u
c3RfaXRlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgTm9kZSogbm9kZSgpIHsgcmV0dXJuIG1faXRlcmF0b3Iubm9kZSgpOyB9Ci0KLSAgICBjb25z
dF9pdGVyYXRvciBtX2l0ZXJhdG9yOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcs
IHR5cGVuYW1lIEhhc2hBcmc+IGNsYXNzIExpc3RIYXNoU2V0Q29uc3RJdGVyYXRvciB7Ci1wcml2
YXRlOgotICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8VmFsdWVBcmcsIEhhc2hBcmc+IExpc3RIYXNo
U2V0VHlwZTsKLSAgICB0eXBlZGVmIExpc3RIYXNoU2V0SXRlcmF0b3I8VmFsdWVBcmcsIEhhc2hB
cmc+IGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgTGlzdEhhc2hTZXRDb25zdEl0ZXJhdG9yPFZhbHVl
QXJnLCBIYXNoQXJnPiBjb25zdF9pdGVyYXRvcjsKLSAgICB0eXBlZGVmIExpc3RIYXNoU2V0Tm9k
ZTxWYWx1ZUFyZz4gTm9kZTsKLSAgICB0eXBlZGVmIFZhbHVlQXJnIFZhbHVlVHlwZTsKLQotICAg
IGZyaWVuZCBjbGFzcyBMaXN0SGFzaFNldDxWYWx1ZUFyZywgSGFzaEFyZz47Ci0gICAgZnJpZW5k
IGNsYXNzIExpc3RIYXNoU2V0SXRlcmF0b3I8VmFsdWVBcmcsIEhhc2hBcmc+OwotCi0gICAgTGlz
dEhhc2hTZXRDb25zdEl0ZXJhdG9yKGNvbnN0IExpc3RIYXNoU2V0VHlwZSogc2V0LCBOb2RlKiBw
b3NpdGlvbikKLSAgICAgICAgOiBtX3NldChzZXQpCi0gICAgICAgICwgbV9wb3NpdGlvbihwb3Np
dGlvbikKLSAgICB7Ci0gICAgfQotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm
ZmVyZW5jZV90eXBlOwotICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlIHZhbHVlX3R5cGU7Ci0g
ICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUqIHBvaW50ZXI7Ci0gICAgdHlwZWRlZiBjb25zdCBW
YWx1ZVR5cGUmIHJlZmVyZW5jZTsKLSAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7Ci0KLSAgICBMaXN0SGFzaFNldENvbnN0SXRlcmF0
b3IoKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBWYWx1ZVR5cGUqIGdldCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gc3RkOjphZGRyZXNzb2YobV9wb3NpdGlvbi0+bV92YWx1ZSk7
Ci0gICAgfQotCi0gICAgY29uc3QgVmFsdWVUeXBlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy
biAqZ2V0KCk7IH0KLSAgICBjb25zdCBWYWx1ZVR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiBnZXQoKTsgfQotCi0gICAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fcG9zaXRpb24pOwotICAgICAgICBtX3Bvc2l0aW9uID0gbV9wb3Np
dGlvbi0+bV9uZXh0OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgLy8gcG9z
dGZpeCArKyBpbnRlbnRpb25hbGx5IG9taXR0ZWQKLQotICAgIGNvbnN0X2l0ZXJhdG9yJiBvcGVy
YXRvci0tKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3Bvc2l0aW9uICE9IG1fc2V0LT5tX2hl
YWQpOwotICAgICAgICBpZiAoIW1fcG9zaXRpb24pCi0gICAgICAgICAgICBtX3Bvc2l0aW9uID0g
bV9zZXQtPm1fdGFpbDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wb3NpdGlvbiA9IG1f
cG9zaXRpb24tPm1fcHJldjsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIC8v
IHBvc3RmaXggLS0gaW50ZW50aW9uYWxseSBvbWl0dGVkCi0KLSAgICAvLyBDb21wYXJpc29uLgot
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9wb3NpdGlvbiA9PSBvdGhlci5tX3Bvc2l0aW9uOwotICAg
IH0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcG9zaXRpb24gIT0gb3RoZXIubV9wb3NpdGlvbjsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTm9kZSogbm9kZSgpIHsgcmV0dXJuIG1fcG9zaXRpb247
IH0KLQotICAgIGNvbnN0IExpc3RIYXNoU2V0VHlwZSogbV9zZXQ7Ci0gICAgTm9kZSogbV9wb3Np
dGlvbjsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEhhc2hGdW5jdGlvbnM+Ci1zdHJ1Y3QgTGlz
dEhhc2hTZXRUcmFuc2xhdG9yIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBUJiBrZXkpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6Omhhc2goa2V5
KTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFs
KGEtPm1fdmFsdWUsIGIpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgVj4gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFQqJiBsb2NhdGlvbiwgVSYmIGtleSwg
ViYmKQotICAgIHsKLSAgICAgICAgbG9jYXRpb24gPSBuZXcgVChzdGQ6OmZvcndhcmQ8VT4oa2V5
KSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWlubGlu
ZSBMaXN0SGFzaFNldDxULCBVPjo6TGlzdEhhc2hTZXQoY29uc3QgTGlzdEhhc2hTZXQmIG90aGVy
KQotewotICAgIGZvciAoYXV0byBpdCA9IG90aGVyLmJlZ2luKCksIGVuZCA9IG90aGVyLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGFkZCgqaXQpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPgotaW5saW5lIExpc3RIYXNoU2V0PFQsIFU+JiBMaXN0SGFzaFNl
dDxULCBVPjo6b3BlcmF0b3I9KGNvbnN0IExpc3RIYXNoU2V0JiBvdGhlcikKLXsKLSAgICBMaXN0
SGFzaFNldCB0bXAob3RoZXIpOwotICAgIHN3YXAodG1wKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1pbmxpbmUgTGlzdEhhc2hTZXQ8
VCwgVT46Okxpc3RIYXNoU2V0KExpc3RIYXNoU2V0JiYgb3RoZXIpCi0gICAgOiBtX2ltcGwoV1RG
TW92ZShvdGhlci5tX2ltcGwpKQotICAgICwgbV9oZWFkKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9o
ZWFkLCBudWxscHRyKSkKLSAgICAsIG1fdGFpbChzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fdGFpbCwg
bnVsbHB0cikpCi17Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1pbmxp
bmUgTGlzdEhhc2hTZXQ8VCwgVT4mIExpc3RIYXNoU2V0PFQsIFU+OjpvcGVyYXRvcj0oTGlzdEhh
c2hTZXQmJiBvdGhlcikKLXsKLSAgICBtX2ltcGwgPSBXVEZNb3ZlKG90aGVyLm1faW1wbCk7Ci0g
ICAgbV9oZWFkID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2hlYWQsIG51bGxwdHIpOwotICAgIG1f
dGFpbCA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV90YWlsLCBudWxscHRyKTsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1pbmxpbmUgdm9p
ZCBMaXN0SGFzaFNldDxULCBVPjo6c3dhcChMaXN0SGFzaFNldCYgb3RoZXIpCi17Ci0gICAgbV9p
bXBsLnN3YXAob3RoZXIubV9pbXBsKTsKLSAgICBzdGQ6OnN3YXAobV9oZWFkLCBvdGhlci5tX2hl
YWQpOwotICAgIHN0ZDo6c3dhcChtX3RhaWwsIG90aGVyLm1fdGFpbCk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1pbmxpbmUgTGlzdEhhc2hTZXQ8VCwgVT46On5MaXN0
SGFzaFNldCgpCi17Ci0gICAgZGVsZXRlQWxsTm9kZXMoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4KLWlubGluZSB1bnNpZ25lZCBMaXN0SGFzaFNldDxULCBVPjo6c2l6
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotaW5saW5lIHVuc2lnbmVkIExpc3RIYXNoU2V0PFQsIFU+
OjpjYXBhY2l0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWlubGluZSBib29sIExpc3RIYXNo
U2V0PFQsIFU+Ojppc0VtcHR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbXBsLmlzRW1wdHko
KTsgCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1pbmxpbmUgVCYgTGlz
dEhhc2hTZXQ8VCwgVT46OmZpcnN0KCkKLXsKLSAgICBBU1NFUlQoIWlzRW1wdHkoKSk7Ci0gICAg
cmV0dXJuIG1faGVhZC0+bV92YWx1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4KLWlubGluZSB2b2lkIExpc3RIYXNoU2V0PFQsIFU+OjpyZW1vdmVGaXJzdCgpCi17Ci0g
ICAgdGFrZUZpcnN0KCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1p
bmxpbmUgVCBMaXN0SGFzaFNldDxULCBVPjo6dGFrZUZpcnN0KCkKLXsKLSAgICBBU1NFUlQoIWlz
RW1wdHkoKSk7Ci0gICAgYXV0byBpdCA9IG1faW1wbC5maW5kKG1faGVhZCk7Ci0KLSAgICBUIHJl
c3VsdCA9IFdURk1vdmUoKCppdCktPm1fdmFsdWUpOwotICAgIG1faW1wbC5yZW1vdmUoaXQpOwot
ICAgIHVubGlua0FuZERlbGV0ZShtX2hlYWQpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWlubGluZSBjb25zdCBUJiBMaXN0SGFz
aFNldDxULCBVPjo6Zmlyc3QoKSBjb25zdAotewotICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKLSAg
ICByZXR1cm4gbV9oZWFkLT5tX3ZhbHVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPgotaW5saW5lIFQmIExpc3RIYXNoU2V0PFQsIFU+OjpsYXN0KCkKLXsKLSAgICBBU1NF
UlQoIWlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIG1fdGFpbC0+bV92YWx1ZTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWlubGluZSBjb25zdCBUJiBMaXN0SGFzaFNldDxU
LCBVPjo6bGFzdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc0VtcHR5KCkpOwotICAgIHJldHVy
biBtX3RhaWwtPm1fdmFsdWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
Ci1pbmxpbmUgdm9pZCBMaXN0SGFzaFNldDxULCBVPjo6cmVtb3ZlTGFzdCgpCi17Ci0gICAgdGFr
ZUxhc3QoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWlubGluZSBU
IExpc3RIYXNoU2V0PFQsIFU+Ojp0YWtlTGFzdCgpCi17Ci0gICAgQVNTRVJUKCFpc0VtcHR5KCkp
OwotICAgIGF1dG8gaXQgPSBtX2ltcGwuZmluZChtX3RhaWwpOwotCi0gICAgVCByZXN1bHQgPSBX
VEZNb3ZlKCgqaXQpLT5tX3ZhbHVlKTsKLSAgICBtX2ltcGwucmVtb3ZlKGl0KTsKLSAgICB1bmxp
bmtBbmREZWxldGUobV90YWlsKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1pbmxpbmUgYXV0byBMaXN0SGFzaFNldDxULCBVPjo6
ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBpdGVyYXRvcgotewotICAgIGF1dG8gaXQg
PSBtX2ltcGwudGVtcGxhdGUgZmluZDxCYXNlVHJhbnNsYXRvcj4odmFsdWUpOwotICAgIGlmIChp
dCA9PSBtX2ltcGwuZW5kKCkpCi0gICAgICAgIHJldHVybiBlbmQoKTsKLSAgICByZXR1cm4gbWFr
ZUl0ZXJhdG9yKCppdCk7IAotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgot
aW5saW5lIGF1dG8gTGlzdEhhc2hTZXQ8VCwgVT46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1
ZSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKLXsKLSAgICBhdXRvIGl0ID0gbV9pbXBsLnRlbXBs
YXRlIGZpbmQ8QmFzZVRyYW5zbGF0b3I+KHZhbHVlKTsKLSAgICBpZiAoaXQgPT0gbV9pbXBsLmVu
ZCgpKQotICAgICAgICByZXR1cm4gZW5kKCk7Ci0gICAgcmV0dXJuIG1ha2VDb25zdEl0ZXJhdG9y
KCppdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFRyYW5zbGF0b3I+Ci1zdHJ1Y3QgTGlzdEhh
c2hTZXRUcmFuc2xhdG9yQWRhcHRlciB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgVCYga2V5KSB7IHJldHVybiBUcmFuc2xhdG9yOjpoYXNoKGtl
eSk7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBUcmFuc2xhdG9yOjplcXVhbChh
LT5tX3ZhbHVlLCBiKTsgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBl
bmFtZSBVPgotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+Ci1p
bmxpbmUgYXV0byBMaXN0SGFzaFNldDxWYWx1ZVR5cGUsIFU+OjpmaW5kKGNvbnN0IFQmIHZhbHVl
KSAtPiBpdGVyYXRvcgotewotICAgIGF1dG8gaXQgPSBtX2ltcGwudGVtcGxhdGUgZmluZDxMaXN0
SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwotICAgIGlm
IChpdCA9PSBtX2ltcGwuZW5kKCkpCi0gICAgICAgIHJldHVybiBlbmQoKTsKLSAgICByZXR1cm4g
bWFrZUl0ZXJhdG9yKCppdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUgVT4KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgot
aW5saW5lIGF1dG8gTGlzdEhhc2hTZXQ8VmFsdWVUeXBlLCBVPjo6ZmluZChjb25zdCBUJiB2YWx1
ZSkgY29uc3QgLT4gY29uc3RfaXRlcmF0b3IKLXsKLSAgICBhdXRvIGl0ID0gbV9pbXBsLnRlbXBs
YXRlIGZpbmQ8TGlzdEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+KHZh
bHVlKTsKLSAgICBpZiAoaXQgPT0gbV9pbXBsLmVuZCgpKQotICAgICAgICByZXR1cm4gZW5kKCk7
Ci0gICAgcmV0dXJuIG1ha2VDb25zdEl0ZXJhdG9yKCppdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgVT4KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEhhc2hUcmFuc2xhdG9yPgotaW5saW5lIGJvb2wgTGlzdEhhc2hTZXQ8VmFsdWVUeXBlLCBVPjo6
Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBjb250YWluczxMaXN0SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9y
Pj4odmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotaW5saW5l
IGJvb2wgTGlzdEhhc2hTZXQ8VCwgVT46OmNvbnRhaW5zKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxCYXNlVHJhbnNs
YXRvcj4odmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotYXV0
byBMaXN0SGFzaFNldDxULCBVPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IEFkZFJl
c3VsdAotewotICAgIGF1dG8gcmVzdWx0ID0gbV9pbXBsLnRlbXBsYXRlIGFkZDxCYXNlVHJhbnNs
YXRvcj4odmFsdWUsIG51bGxwdHIpOwotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgYXBwZW5kTm9kZSgqcmVzdWx0Lml0ZXJhdG9yKTsKLSAgICByZXR1cm4gQWRkUmVzdWx0KG1h
a2VJdGVyYXRvcigqcmVzdWx0Lml0ZXJhdG9yKSwgcmVzdWx0LmlzTmV3RW50cnkpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotYXV0byBMaXN0SGFzaFNldDxULCBVPjo6
YWRkKFZhbHVlVHlwZSYmIHZhbHVlKSAtPiBBZGRSZXN1bHQKLXsKLSAgICBhdXRvIHJlc3VsdCA9
IG1faW1wbC50ZW1wbGF0ZSBhZGQ8QmFzZVRyYW5zbGF0b3I+KFdURk1vdmUodmFsdWUpLCBudWxs
cHRyKTsKLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFwcGVuZE5vZGUoKnJl
c3VsdC5pdGVyYXRvcik7Ci0gICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlSXRlcmF0b3IoKnJlc3Vs
dC5pdGVyYXRvciksIHJlc3VsdC5pc05ld0VudHJ5KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4KLWF1dG8gTGlzdEhhc2hTZXQ8VCwgVT46OmFwcGVuZE9yTW92ZVRvTGFz
dChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKLXsKLSAgICBhdXRvIHJlc3Vs
dCA9IG1faW1wbC50ZW1wbGF0ZSBhZGQ8QmFzZVRyYW5zbGF0b3I+KHZhbHVlLCBudWxscHRyKTsK
LSAgICBOb2RlKiBub2RlID0gKnJlc3VsdC5pdGVyYXRvcjsKLSAgICBpZiAoIXJlc3VsdC5pc05l
d0VudHJ5KQotICAgICAgICB1bmxpbmsobm9kZSk7Ci0gICAgYXBwZW5kTm9kZShub2RlKTsKLQot
ICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUl0ZXJhdG9yKCpyZXN1bHQuaXRlcmF0b3IpLCByZXN1
bHQuaXNOZXdFbnRyeSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1h
dXRvIExpc3RIYXNoU2V0PFQsIFU+OjphcHBlbmRPck1vdmVUb0xhc3QoVmFsdWVUeXBlJiYgdmFs
dWUpIC0+IEFkZFJlc3VsdAotewotICAgIGF1dG8gcmVzdWx0ID0gbV9pbXBsLnRlbXBsYXRlIGFk
ZDxCYXNlVHJhbnNsYXRvcj4oV1RGTW92ZSh2YWx1ZSksIG51bGxwdHIpOwotICAgIE5vZGUqIG5v
ZGUgPSAqcmVzdWx0Lml0ZXJhdG9yOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAg
ICAgIHVubGluayhub2RlKTsKLSAgICBhcHBlbmROb2RlKG5vZGUpOwotCi0gICAgcmV0dXJuIEFk
ZFJlc3VsdChtYWtlSXRlcmF0b3IoKnJlc3VsdC5pdGVyYXRvciksIHJlc3VsdC5pc05ld0VudHJ5
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWF1dG8gTGlzdEhhc2hT
ZXQ8VCwgVT46OnByZXBlbmRPck1vdmVUb0ZpcnN0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+
IEFkZFJlc3VsdAotewotICAgIGF1dG8gcmVzdWx0ID0gbV9pbXBsLnRlbXBsYXRlIGFkZDxCYXNl
VHJhbnNsYXRvcj4odmFsdWUsIG51bGxwdHIpOwotICAgIE5vZGUqIG5vZGUgPSAqcmVzdWx0Lml0
ZXJhdG9yOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHVubGluayhub2Rl
KTsKLSAgICBwcmVwZW5kTm9kZShub2RlKTsKLQotICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUl0
ZXJhdG9yKCpyZXN1bHQuaXRlcmF0b3IpLCByZXN1bHQuaXNOZXdFbnRyeSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1hdXRvIExpc3RIYXNoU2V0PFQsIFU+OjpwcmVw
ZW5kT3JNb3ZlVG9GaXJzdChWYWx1ZVR5cGUmJiB2YWx1ZSkgLT4gQWRkUmVzdWx0Ci17Ci0gICAg
YXV0byByZXN1bHQgPSBtX2ltcGwudGVtcGxhdGUgYWRkPEJhc2VUcmFuc2xhdG9yPihXVEZNb3Zl
KHZhbHVlKSwgbnVsbHB0cik7Ci0gICAgTm9kZSogbm9kZSA9ICpyZXN1bHQuaXRlcmF0b3I7Ci0g
ICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgdW5saW5rKG5vZGUpOwotICAgIHBy
ZXBlbmROb2RlKG5vZGUpOwotCi0gICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlSXRlcmF0b3IoKnJl
c3VsdC5pdGVyYXRvciksIHJlc3VsdC5pc05ld0VudHJ5KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4KLWF1dG8gTGlzdEhhc2hTZXQ8VCwgVT46Omluc2VydEJlZm9yZShj
b25zdCBWYWx1ZVR5cGUmIGJlZm9yZVZhbHVlLCBjb25zdCBWYWx1ZVR5cGUmIG5ld1ZhbHVlKSAt
PiBBZGRSZXN1bHQKLXsKLSAgICByZXR1cm4gaW5zZXJ0QmVmb3JlKGZpbmQoYmVmb3JlVmFsdWUp
LCBuZXdWYWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1hdXRv
IExpc3RIYXNoU2V0PFQsIFU+OjppbnNlcnRCZWZvcmUoY29uc3QgVmFsdWVUeXBlJiBiZWZvcmVW
YWx1ZSwgVmFsdWVUeXBlJiYgbmV3VmFsdWUpIC0+IEFkZFJlc3VsdAotewotICAgIHJldHVybiBp
bnNlcnRCZWZvcmUoZmluZChiZWZvcmVWYWx1ZSksIFdURk1vdmUobmV3VmFsdWUpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWF1dG8gTGlzdEhhc2hTZXQ8VCwgVT46
Omluc2VydEJlZm9yZShpdGVyYXRvciBpdCwgY29uc3QgVmFsdWVUeXBlJiBuZXdWYWx1ZSkgLT4g
QWRkUmVzdWx0Ci17Ci0gICAgYXV0byByZXN1bHQgPSBtX2ltcGwudGVtcGxhdGUgYWRkPEJhc2VU
cmFuc2xhdG9yPihuZXdWYWx1ZSwgbnVsbHB0cik7Ci0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGl0Lm5vZGUoKSwgKnJlc3VsdC5pdGVyYXRvcik7
Ci0gICAgcmV0dXJuIEFkZFJlc3VsdChtYWtlSXRlcmF0b3IoKnJlc3VsdC5pdGVyYXRvciksIHJl
c3VsdC5pc05ld0VudHJ5KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4K
LWF1dG8gTGlzdEhhc2hTZXQ8VCwgVT46Omluc2VydEJlZm9yZShpdGVyYXRvciBpdCwgVmFsdWVU
eXBlJiYgbmV3VmFsdWUpIC0+IEFkZFJlc3VsdAotewotICAgIGF1dG8gcmVzdWx0ID0gbV9pbXBs
LnRlbXBsYXRlIGFkZDxCYXNlVHJhbnNsYXRvcj4oV1RGTW92ZShuZXdWYWx1ZSksIG51bGxwdHIp
OwotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShp
dC5ub2RlKCksICpyZXN1bHQuaXRlcmF0b3IpOwotICAgIHJldHVybiBBZGRSZXN1bHQobWFrZUl0
ZXJhdG9yKCpyZXN1bHQuaXRlcmF0b3IpLCByZXN1bHQuaXNOZXdFbnRyeSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1pbmxpbmUgYm9vbCBMaXN0SGFzaFNldDxULCBV
Pjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQotewotICAgIGlmIChpdCA9PSBlbmQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIG1faW1wbC5yZW1vdmUoaXQubm9kZSgpKTsKLSAgICB1bmxpbmtB
bmREZWxldGUoaXQubm9kZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWlubGluZSBib29sIExpc3RIYXNoU2V0PFQsIFU+OjpyZW1v
dmUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gcmVtb3ZlKGZpbmQodmFs
dWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWlubGluZSB2b2lk
IExpc3RIYXNoU2V0PFQsIFU+OjpjbGVhcigpCi17Ci0gICAgZGVsZXRlQWxsTm9kZXMoKTsKLSAg
ICBtX2ltcGwuY2xlYXIoKTsgCi0gICAgbV9oZWFkID0gbnVsbHB0cjsKLSAgICBtX3RhaWwgPSBu
dWxscHRyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotdm9pZCBMaXN0
SGFzaFNldDxULCBVPjo6dW5saW5rKE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlLT5tX3By
ZXYpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUgPT0gbV9oZWFkKTsKLSAgICAgICAgbV9oZWFkID0g
bm9kZS0+bV9uZXh0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChub2RlICE9IG1faGVh
ZCk7Ci0gICAgICAgIG5vZGUtPm1fcHJldi0+bV9uZXh0ID0gbm9kZS0+bV9uZXh0OwotICAgIH0K
LQotICAgIGlmICghbm9kZS0+bV9uZXh0KSB7Ci0gICAgICAgIEFTU0VSVChub2RlID09IG1fdGFp
bCk7Ci0gICAgICAgIG1fdGFpbCA9IG5vZGUtPm1fcHJldjsKLSAgICB9IGVsc2UgewotICAgICAg
ICBBU1NFUlQobm9kZSAhPSBtX3RhaWwpOwotICAgICAgICBub2RlLT5tX25leHQtPm1fcHJldiA9
IG5vZGUtPm1fcHJldjsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+Ci12b2lkIExpc3RIYXNoU2V0PFQsIFU+Ojp1bmxpbmtBbmREZWxldGUoTm9kZSogbm9kZSkK
LXsKLSAgICB1bmxpbmsobm9kZSk7Ci0gICAgZGVsZXRlIG5vZGU7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci12b2lkIExpc3RIYXNoU2V0PFQsIFU+OjphcHBlbmROb2Rl
KE5vZGUqIG5vZGUpCi17Ci0gICAgbm9kZS0+bV9wcmV2ID0gbV90YWlsOwotICAgIG5vZGUtPm1f
bmV4dCA9IG51bGxwdHI7Ci0KLSAgICBpZiAobV90YWlsKSB7Ci0gICAgICAgIEFTU0VSVChtX2hl
YWQpOwotICAgICAgICBtX3RhaWwtPm1fbmV4dCA9IG5vZGU7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgQVNTRVJUKCFtX2hlYWQpOwotICAgICAgICBtX2hlYWQgPSBub2RlOwotICAgIH0KLQotICAg
IG1fdGFpbCA9IG5vZGU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci12
b2lkIExpc3RIYXNoU2V0PFQsIFU+OjpwcmVwZW5kTm9kZShOb2RlKiBub2RlKQotewotICAgIG5v
ZGUtPm1fcHJldiA9IG51bGxwdHI7Ci0gICAgbm9kZS0+bV9uZXh0ID0gbV9oZWFkOwotCi0gICAg
aWYgKG1faGVhZCkKLSAgICAgICAgbV9oZWFkLT5tX3ByZXYgPSBub2RlOwotICAgIGVsc2UKLSAg
ICAgICAgbV90YWlsID0gbm9kZTsKLQotICAgIG1faGVhZCA9IG5vZGU7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci12b2lkIExpc3RIYXNoU2V0PFQsIFU+OjppbnNlcnRO
b2RlQmVmb3JlKE5vZGUqIGJlZm9yZU5vZGUsIE5vZGUqIG5ld05vZGUpCi17Ci0gICAgaWYgKCFi
ZWZvcmVOb2RlKQotICAgICAgICByZXR1cm4gYXBwZW5kTm9kZShuZXdOb2RlKTsKLSAgICAKLSAg
ICBuZXdOb2RlLT5tX25leHQgPSBiZWZvcmVOb2RlOwotICAgIG5ld05vZGUtPm1fcHJldiA9IGJl
Zm9yZU5vZGUtPm1fcHJldjsKLSAgICBpZiAoYmVmb3JlTm9kZS0+bV9wcmV2KQotICAgICAgICBi
ZWZvcmVOb2RlLT5tX3ByZXYtPm1fbmV4dCA9IG5ld05vZGU7Ci0gICAgYmVmb3JlTm9kZS0+bV9w
cmV2ID0gbmV3Tm9kZTsKLQotICAgIGlmICghbmV3Tm9kZS0+bV9wcmV2KQotICAgICAgICBtX2hl
YWQgPSBuZXdOb2RlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotdm9p
ZCBMaXN0SGFzaFNldDxULCBVPjo6ZGVsZXRlQWxsTm9kZXMoKQotewotICAgIGlmICghbV9oZWFk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2hlYWQsICpuZXh0
ID0gbV9oZWFkLT5tX25leHQ7IG5vZGU7IG5vZGUgPSBuZXh0LCBuZXh0ID0gbm9kZSA/IG5vZGUt
Pm1fbmV4dCA6IG51bGxwdHIpCi0gICAgICAgIGRlbGV0ZSBub2RlOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotaW5saW5lIGF1dG8gTGlzdEhhc2hTZXQ8VCwgVT46Om1h
a2VJdGVyYXRvcihOb2RlKiBwb3NpdGlvbikgLT4gaXRlcmF0b3IKLXsKLSAgICByZXR1cm4gaXRl
cmF0b3IodGhpcywgcG9zaXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPgotaW5saW5lIGF1dG8gTGlzdEhhc2hTZXQ8VCwgVT46Om1ha2VDb25zdEl0ZXJhdG9yKE5v
ZGUqIHBvc2l0aW9uKSBjb25zdCAtPiBjb25zdF9pdGVyYXRvcgoteyAKLSAgICByZXR1cm4gY29u
c3RfaXRlcmF0b3IodGhpcywgcG9zaXRpb24pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQot
dXNpbmcgV1RGOjpMaXN0SGFzaFNldDsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi9Mb2NrLmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9Mb2NrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE4NjllOWFiNzdkZmUx
ZGJkMmEyODZjOWFkMjJjMDZiOTVhMWU2NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTG9jay5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkxvY2suaCIKLQotI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtSW5saW5lcy5oPgotCi1u
YW1lc3BhY2UgV1RGIHsKLQotdm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQotewotICAgIERlZmF1
bHRMb2NrQWxnb3JpdGhtOjpsb2NrU2xvdyhtX2J5dGUpOwotfQotCi12b2lkIExvY2tCYXNlOjp1
bmxvY2tTbG93KCkKLXsKLSAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2NrU2xvdyhtX2J5
dGUsIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpVbmZhaXIpOwotfQotCi12b2lkIExvY2tCYXNlOjp1
bmxvY2tGYWlybHlTbG93KCkKLXsKLSAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2NrU2xv
dyhtX2J5dGUsIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpGYWlyKTsKLX0KLQotdm9pZCBMb2NrQmFz
ZTo6c2FmZXBvaW50U2xvdygpCi17Ci0gICAgRGVmYXVsdExvY2tBbGdvcml0aG06OnNhZmVwb2lu
dFNsb3cobV9ieXRlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Mb2NrLmggYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci93dGYvTG9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
ZGVjODRjMWYwMGE3NWM5ZDczNWJiMjgxYmMxMWRiYmMzNThmNzQxLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL3d0Zi9Mb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgV1RGX0xv
Y2tfaAotI2RlZmluZSBXVEZfTG9ja19oCi0KLSNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRobS5o
PgotI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
LQotbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewotc3RydWN0IExvY2tJbnNwZWN0b3I7Ci19Owot
Ci1uYW1lc3BhY2UgV1RGIHsKLQotdHlwZWRlZiBMb2NrQWxnb3JpdGhtPHVpbnQ4X3QsIDEsIDI+
IERlZmF1bHRMb2NrQWxnb3JpdGhtOwotCi0vLyBUaGlzIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0
ZXggdGhhdCBvbmx5IHJlcXVpcmVzIDEgYnl0ZSBvZiBzdG9yYWdlLiBJdCBoYXMgZmFzdCBwYXRo
cyB0aGF0IGFyZQotLy8gY29tcGV0ZXRpdmUgdG8gYSBzcGlubG9jayAodW5jb250ZW5kZWQgbG9j
a2luZyBpcyBpbmxpbmVkIGFuZCBpcyBqdXN0IGEgQ0FTLCBtaWNyb2NvbnRlbnRpb24gaXMKLS8v
IGhhbmRsZWQgYnkgc3Bpbm5pbmcgYW5kIHlpZWxkaW5nKSwgYW5kIGEgc2xvdyBwYXRoIHRoYXQg
aXMgY29tcGV0ZXRpdmUgdG8gc3RkOjptdXRleCAoaWYgYSBsb2NrCi0vLyBjYW5ub3QgYmUgYWNx
dWlyZWQgaW4gYSBzaG9ydCBwZXJpb2Qgb2YgdGltZSwgdGhlIHRocmVhZCBpcyBwdXQgdG8gc2xl
ZXAgdW50aWwgdGhlIGxvY2sgaXMKLS8vIGF2YWlsYWJsZSBhZ2FpbikuIEl0IHVzZXMgbGVzcyBt
ZW1vcnkgdGhhbiBhIHN0ZDo6bXV0ZXguIFRoaXMgbG9jayBndWFyYW50ZWVzIGV2ZW50dWFsIHN0
b2NoYXN0aWMKLS8vIGZhaXJuZXNzLCBldmVuIGluIHByb2dyYW1zIHRoYXQgcmVsb2NrIHRoZSBs
b2NrIGltbWVkaWF0ZWx5IGFmdGVyIHVubG9ja2luZyBpdC4gRXhjZXB0IHdoZW4gdGhlcmUKLS8v
IGFyZSBjb2xsaXNpb25zIGJldHdlZW4gdGhpcyBsb2NrIGFuZCBvdGhlciBsb2NrcyBpbiB0aGUg
UGFya2luZ0xvdCwgdGhpcyBsb2NrIHdpbGwgZ3VhcmFudGVlIHRoYXQKLS8vIGF0IHdvcnN0IG9u
ZSBjYWxsIHRvIHVubG9jaygpIHBlciBtaWxsaXNlY29uZCB3aWxsIGRvIGEgZGlyZWN0IGhhbmQt
b2ZmIHRvIHRoZSB0aHJlYWQgdGhhdCBpcyBhdAotLy8gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLiBX
aGVuIHRoZXJlIGFyZSBjb2xsaXNpb25zLCBlYWNoIGNvbGxpc2lvbiBpbmNyZWFzZXMgdGhlIGZh
aXIgdW5sb2NrIGRlbGF5Ci0vLyBieSBvbmUgbWlsbGlzZWNvbmQgaW4gdGhlIHdvcnN0IGNhc2Uu
Ci0KLS8vIFRoaXMgaXMgYSBzdHJ1Y3Qgd2l0aG91dCBhIGNvbnN0cnVjdG9yIG9yIGRlc3RydWN0
b3Igc28gdGhhdCBpdCBjYW4gYmUgc3RhdGljYWxseSBpbml0aWFsaXplZC4KLS8vIFVzZSBMb2Nr
IGluIGluc3RhbmNlIHZhcmlhYmxlcy4KLXN0cnVjdCBMb2NrQmFzZSB7Ci0gICAgdm9pZCBsb2Nr
KCkKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06Omxv
Y2tGYXN0QXNzdW1pbmdaZXJvKG1fYnl0ZSkpKQotICAgICAgICAgICAgbG9ja1Nsb3coKTsKLSAg
ICB9Ci0KLSAgICBib29sIHRyeUxvY2soKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERlZmF1bHRM
b2NrQWxnb3JpdGhtOjp0cnlMb2NrKG1fYnl0ZSk7Ci0gICAgfQotCi0gICAgLy8gTmVlZCB0aGlz
IHZlcnNpb24gZm9yIHN0ZDo6dW5pcXVlX2xvY2suCi0gICAgYm9vbCB0cnlfbG9jaygpCi0gICAg
ewotICAgICAgICByZXR1cm4gdHJ5TG9jaygpOwotICAgIH0KLQotICAgIC8vIFJlbGlucXVpc2gg
dGhlIGxvY2suIEVpdGhlciBvbmUgb2YgdGhlIHRocmVhZHMgdGhhdCB3ZXJlIHdhaXRpbmcgZm9y
IHRoZSBsb2NrLCBvciBzb21lIG90aGVyCi0gICAgLy8gdGhyZWFkIHRoYXQgaGFwcGVucyB0byBi
ZSBydW5uaW5nLCB3aWxsIGJlIGFibGUgdG8gZ3JhYiB0aGUgbG9jay4gVGhpcyBiaXQgb2YgdW5m
YWlybmVzcyBpcwotICAgIC8vIGNhbGxlZCBiYXJnaW5nLCBhbmQgd2UgYWxsb3cgaXQgYmVjYXVz
ZSBpdCBtYXhpbWl6ZXMgdGhyb3VnaHB1dC4gSG93ZXZlciwgd2UgYm91bmQgaG93IHVuZmFpcgot
ICAgIC8vIGJhcmdpbmcgY2FuIGdldCBieSBlbnN1cmluZyB0aGF0IGV2ZXJ5IG9uY2UgaW4gYSB3
aGlsZSwgd2hlbiB0aGVyZSBpcyBhIHRocmVhZCB3YWl0aW5nIG9uIHRoZQotICAgIC8vIGxvY2ss
IHdlIGhhbmQgdGhlIGxvY2sgdG8gdGhhdCB0aHJlYWQgZGlyZWN0bHkuIEV2ZXJ5IHRpbWUgdW5s
b2NrKCkgZmluZHMgYSB0aHJlYWQgd2FpdGluZywKLSAgICAvLyB3ZSBjaGVjayBpZiB0aGUgbGFz
dCB0aW1lIHRoYXQgd2UgZGlkIGEgZmFpciB1bmxvY2sgd2FzIG1vcmUgdGhhbiByb3VnaGx5IDFt
cyBhZ287IGlmIHNvLCB3ZQotICAgIC8vIHVubG9jayBmYWlybHkuIEZhaXJuZXNzIG1hdHRlcnMg
bW9zdCBmb3IgbG9uZyBjcml0aWNhbCBzZWN0aW9ucywgYW5kIHRoaXMgdmlydHVhbGx5Ci0gICAg
Ly8gZ3VhcmFudGVlcyB0aGF0IGxvbmcgY3JpdGljYWwgc2VjdGlvbnMgYWx3YXlzIGdldCBhIGZh
aXIgbG9jay4KLSAgICB2b2lkIHVubG9jaygpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFko
IURlZmF1bHRMb2NrQWxnb3JpdGhtOjp1bmxvY2tGYXN0QXNzdW1pbmdaZXJvKG1fYnl0ZSkpKQot
ICAgICAgICAgICAgdW5sb2NrU2xvdygpOwotICAgIH0KLQotICAgIC8vIFRoaXMgaXMgbGlrZSB1
bmxvY2soKSBidXQgaXQgZ3VhcmFudGVlcyB0aGF0IHdlIHVubG9jayB0aGUgbG9jayBmYWlybHku
IEZvciBzaG9ydCBjcml0aWNhbAotICAgIC8vIHNlY3Rpb25zLCB0aGlzIGlzIG11Y2ggc2xvd2Vy
IHRoYW4gdW5sb2NrKCkuIEZvciBsb25nIGNyaXRpY2FsIHNlY3Rpb25zLCB1bmxvY2soKSB3aWxs
IGxlYXJuCi0gICAgLy8gdG8gYmUgZmFpciBhbnl3YXkuIEhvd2V2ZXIsIGlmIHlvdSBwbGFuIHRv
IHJlbG9jayB0aGUgbG9jayByaWdodCBhZnRlciB1bmxvY2tpbmcgYW5kIHlvdSB3YW50Ci0gICAg
Ly8gdG8gZW5zdXJlIHRoYXQgc29tZSBvdGhlciB0aHJlYWQgcnVucyBpbiB0aGUgbWVhbnRpbWUs
IHRoaXMgaXMgcHJvYmFibHkgdGhlIGZ1bmN0aW9uIHlvdQotICAgIC8vIHdhbnQuCi0gICAgdm9p
ZCB1bmxvY2tGYWlybHkoKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9j
a0FsZ29yaXRobTo6dW5sb2NrRmFzdEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKLSAgICAgICAgICAg
IHVubG9ja0ZhaXJseVNsb3coKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzYWZlcG9pbnQoKQot
ICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6c2FmZXBv
aW50RmFzdChtX2J5dGUpKSkKLSAgICAgICAgICAgIHNhZmVwb2ludFNsb3coKTsKLSAgICB9Ci0K
LSAgICBib29sIGlzSGVsZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gRGVmYXVsdExv
Y2tBbGdvcml0aG06OmlzTG9ja2VkKG1fYnl0ZSk7Ci0gICAgfQotCi0gICAgYm9vbCBpc0xvY2tl
ZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNIZWxkKCk7Ci0gICAgfQotCi1wcm90
ZWN0ZWQ6Ci0gICAgZnJpZW5kIHN0cnVjdCBUZXN0V2ViS2l0QVBJOjpMb2NrSW5zcGVjdG9yOwot
ICAgIAotICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGlzSGVsZEJpdCA9IDE7Ci0gICAgc3RhdGlj
IGNvbnN0IHVpbnQ4X3QgaGFzUGFya2VkQml0ID0gMjsKLSAgICAKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBsb2NrU2xvdygpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9j
a1Nsb3coKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tGYWlybHlTbG93KCk7
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2FmZXBvaW50U2xvdygpOwotCi0gICAgLy8g
TWV0aG9kIHVzZWQgZm9yIHRlc3Rpbmcgb25seS4KLSAgICBib29sIGlzRnVsbHlSZXNldCgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gIW1fYnl0ZS5sb2FkKCk7Ci0gICAgfQotCi0gICAg
QXRvbWljPHVpbnQ4X3Q+IG1fYnl0ZTsKLX07Ci0KLWNsYXNzIExvY2sgOiBwdWJsaWMgTG9ja0Jh
c2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2spOwotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIExvY2soKQotICAgIHsKLSAgICAgICAgbV9ieXRlLnN0
b3JlKDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAgIH0KLX07Ci0KLXR5cGVkZWYg
TG9ja0Jhc2UgU3RhdGljTG9jazsKLXR5cGVkZWYgTG9ja2VyPExvY2tCYXNlPiBMb2NrSG9sZGVy
OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpMb2NrOwotdXNpbmcgV1RGOjpM
b2NrSG9sZGVyOwotdXNpbmcgV1RGOjpTdGF0aWNMb2NrOwotCi0jZW5kaWYgLy8gV1RGX0xvY2tf
aAotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTG9ja0Fs
Z29yaXRobS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0xvY2tBbGdvcml0
aG0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUxNDg1NDc3YWNmNjU2NGI4Mjg3
N2QzZTY1OWU5MDI3OGM4OTUxZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTG9ja0FsZ29yaXRo
bS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFdURl9Mb2NrQWxnb3JpdGht
X2gKLSNkZWZpbmUgV1RGX0xvY2tBbGdvcml0aG1faAotCi0jaW5jbHVkZSA8d3RmL0F0b21pY3Mu
aD4KLSNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0vLyBUaGlzIGlzIHRoZSBhbGdvcml0aG0gdXNlZCBieSBX
VEY6OkxvY2suIFlvdSBjYW4gdXNlIGl0IHRvIHByb2plY3Qgb25lIGxvY2sgb250byBhbnkgYXRv
bWljCi0vLyBmaWVsZC4gVGhlIGxpbWl0IG9mIG9uZSBsb2NrIGlzIGR1ZSB0byB0aGUgdXNlIG9m
IHRoZSBmaWVsZCdzIGFkZHJlc3MgYXMgYSBrZXkgdG8gZmluZCB0aGUgbG9jaydzCi0vLyBxdWV1
ZS4KLQotdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJpdCwgTG9j
a1R5cGUgaGFzUGFya2VkQml0PgotY2xhc3MgTG9ja0FsZ29yaXRobSB7Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdCBMb2NrVHlwZSBtYXNr
ID0gaXNIZWxkQml0IHwgaGFzUGFya2VkQml0OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wg
bG9ja0Zhc3RBc3N1bWluZ1plcm8oQXRvbWljPExvY2tUeXBlPiYgbG9jaykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoMCwgaXNIZWxkQml0LCBzdGQ6Om1l
bW9yeV9vcmRlcl9hY3F1aXJlKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgbG9ja0Zh
c3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKLSAgICB7Ci0gICAgICAgIHJldHVybiBsb2NrLnRy
YW5zYWN0aW9uKAotICAgICAgICAgICAgWyZdIChMb2NrVHlwZSYgdmFsdWUpIC0+IGJvb2wgewot
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIGlzSGVsZEJpdCkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHZhbHVlIHw9IGlzSGVsZEJpdDsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBz
dGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQg
bG9jayhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KCFsb2NrRmFzdChsb2NrKSkpCi0gICAgICAgICAgICBsb2NrU2xvdyhsb2NrKTsKLSAgICB9Ci0g
ICAgCi0gICAgc3RhdGljIGJvb2wgdHJ5TG9jayhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQotICAg
IHsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZh
bHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAgICAgICAgICAg
aWYgKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgaWYgKGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50
Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRl
cl9hY3F1aXJlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHN0YXRpYyBib29sIHVubG9ja0Zhc3RBc3N1bWluZ1plcm8oQXRvbWljPExvY2tU
eXBlPiYgbG9jaykKLSAgICB7Ci0gICAgICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdl
YWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAgICB9Ci0gICAg
Ci0gICAgc3RhdGljIGJvb2wgdW5sb2NrRmFzdChBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGxvY2sudHJhbnNhY3Rpb24oCi0gICAgICAgICAgICBbJl0gKExv
Y2tUeXBlJiB2YWx1ZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIG1h
c2spICE9IGlzSGVsZEJpdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIHZhbHVlICY9IH5pc0hlbGRCaXQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgc3RkOjptZW1vcnlfb3JkZXJfcmVs
YXhlZCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIHVubG9jayhBdG9taWM8TG9ja1R5
cGU+JiBsb2NrKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCF1bmxvY2tGYXN0KGxvY2sp
KSkKLSAgICAgICAgICAgIHVubG9ja1Nsb3cobG9jaywgVW5mYWlyKTsKLSAgICB9Ci0gICAgCi0g
ICAgc3RhdGljIHZvaWQgdW5sb2NrRmFpcmx5KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCi0gICAg
ewotICAgICAgICBpZiAoVU5MSUtFTFkoIXVubG9ja0Zhc3QobG9jaykpKQotICAgICAgICAgICAg
dW5sb2NrU2xvdyhsb2NrLCBGYWlyKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgc2Fm
ZXBvaW50RmFzdChjb25zdCBBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQotICAgIHsKLSAgICAgICAg
V1RGOjpjb21waWxlckZlbmNlKCk7Ci0gICAgICAgIHJldHVybiAhKGxvY2subG9hZChzdGQ6Om1l
bW9yeV9vcmRlcl9yZWxheGVkKSAmIGhhc1BhcmtlZEJpdCk7Ci0gICAgfQotICAgIAotICAgIHN0
YXRpYyB2b2lkIHNhZmVwb2ludChBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQotICAgIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCFzYWZlcG9pbnRGYXN0KGxvY2spKSkKLSAgICAgICAgICAgIHNhZmVw
b2ludFNsb3cobG9jayk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBib29sIGlzTG9ja2VkKGNv
bnN0IEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCi0gICAgewotICAgICAgICByZXR1cm4gbG9jay5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OwotICAgIH0KLSAgICAK
LSAgICBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgbG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYg
bG9jayk7Ci0gICAgCi0gICAgZW51bSBGYWlybmVzcyB7Ci0gICAgICAgIFVuZmFpciwKLSAgICAg
ICAgRmFpcgotICAgIH07Ci0gICAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIHVubG9ja1Nsb3co
QXRvbWljPExvY2tUeXBlPiYgbG9jaywgRmFpcm5lc3MgZmFpcm5lc3MgPSBVbmZhaXIpOwotICAg
IAotICAgIE5FVkVSX0lOTElORSBzdGF0aWMgdm9pZCBzYWZlcG9pbnRTbG93KEF0b21pYzxMb2Nr
VHlwZT4mIGxvY2tXb3JkKQotICAgIHsKLSAgICAgICAgdW5sb2NrRmFpcmx5KGxvY2tXb3JkKTsK
LSAgICAgICAgbG9jayhsb2NrV29yZCk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBlbnVt
IFRva2VuIHsKLSAgICAgICAgQmFyZ2luZ09wcG9ydHVuaXR5LAotICAgICAgICBEaXJlY3RIYW5k
b2ZmCi0gICAgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OkxvY2tB
bGdvcml0aG07Ci0KLSNlbmRpZiAvLyBXVEZfTG9ja0FsZ29yaXRobV9oCi0KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Mb2NrQWxnb3JpdGhtSW5saW5lcy5o
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0xvY2tBbGdvcml0aG1JbmxpbmVz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MzhkMmU5MmFhZDMxZWZkNDU5OTgz
YjljNTJjMDlhMDY5ZmQwZGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0xvY2tBbGdvcml0aG1J
bmxpbmVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8d3RmL0xvY2tBbGdvcml0aG0uaD4KLSNpbmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgot
Ci0vLyBJdCdzIGEgZ29vZCBpZGVhIHRvIGF2b2lkIGluY2x1ZGluZyB0aGlzIGhlYWRlciBpbiB0
b28gbWFueSBwbGFjZXMsIHNvIHRoYXQgaXQncyBwb3NzaWJsZSB0byBjaGFuZ2UKLS8vIHRoZSBs
b2NrIGFsZ29yaXRobSBzbG93IHBhdGggd2l0aG91dCByZWNvbXBpbGluZyB0aGUgd29ybGQuIFJp
Z2h0IG5vdyB0aGlzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0d28KLS8vIHBsYWNlcyAoTG9jay5j
cHAgYW5kIEpTQ2VsbC5jcHApLgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJpdCwgTG9ja1R5cGUgaGFzUGFya2VkQml0Pgot
dm9pZCBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBpc0hlbGRCaXQsIGhhc1BhcmtlZEJpdD46Omxv
Y2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCi17Ci0gICAgLy8gVGhpcyBtYWdpYyBudW1i
ZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24gcGFzdCBKaWtlc1JWTSBleHBlcmlt
ZW50cy4KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7Ci0gICAgCi0g
ICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKLSAgICAKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAg
IHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOwotICAgICAgICAKLSAgICAg
ICAgLy8gV2UgYWxsb3cgb3Vyc2VsdmVzIHRvIGJhcmdlIGluLgotICAgICAgICBpZiAoIShjdXJy
ZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQotICAgICAgICAgICAgJiYgbG9jay5jb21wYXJlRXhj
aGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBw
YXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNw
aW4gYXJvdW5kLgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0
KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKLSAgICAgICAgICAgIHNwaW5Db3VudCsrOwot
ICAgICAgICAgICAgVGhyZWFkOjp5aWVsZCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMgYnkgc2V0dGluZyB0
aGUgcGFya2VkIGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3BpbiBhcm91bmQKLSAg
ICAgICAgLy8gaWYgdGhlIHBhcmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFpbGVkIGF0IHNl
dHRpbmcgaXQuCi0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQp
Ci0gICAgICAgICAgICAmJiAhbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFs
dWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgLy8gV2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhh
c1BhcmtlZC4gU28gbG9uZyBhcyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgotICAgICAg
ICBQYXJraW5nTG90OjpQYXJrUmVzdWx0IHBhcmtSZXN1bHQgPQotICAgICAgICAgICAgUGFya2lu
Z0xvdDo6Y29tcGFyZUFuZFBhcmsoJmxvY2ssIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQg
fCBoYXNQYXJrZWRCaXQpOwotICAgICAgICBpZiAocGFya1Jlc3VsdC53YXNVbnBhcmtlZCkgewot
ICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxUb2tlbj4ocGFya1Jlc3VsdC50b2tlbikp
IHsKLSAgICAgICAgICAgIGNhc2UgRGlyZWN0SGFuZG9mZjoKLSAgICAgICAgICAgICAgICAvLyBU
aGUgbG9jayB3YXMgbmV2ZXIgcmVsZWFzZWQuIEl0IHdhcyBoYW5kZWQgdG8gdXMgZGlyZWN0bHkg
YnkgdGhlIHRocmVhZCB0aGF0IGRpZAotICAgICAgICAgICAgICAgIC8vIHVubG9jaygpLiBUaGlz
IG1lYW5zIHdlJ3JlIGRvbmUhCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNMb2Nr
ZWQobG9jaykpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNhc2UgQmFy
Z2luZ09wcG9ydHVuaXR5OgotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNvbW1vbiBj
YXNlLiBUaGUgdGhyZWFkIHRoYXQgY2FsbGVkIHVubG9jaygpIGhhcyByZWxlYXNlZCB0aGUgbG9j
aywKLSAgICAgICAgICAgICAgICAvLyBhbmQgd2UgaGF2ZSBiZWVuIHdva2VuIHVwIHNvIHRoYXQg
d2UgbWF5IGdldCBhbiBvcHBvcnR1bml0eSB0byBncmFiIHRoZSBsb2NrLiBCdXQKLSAgICAgICAg
ICAgICAgICAvLyBvdGhlciB0aHJlYWRzIG1heSBiYXJnZSwgc28gdGhlIGJlc3QgdGhhdCB3ZSBj
YW4gZG8gaXMgbG9vcCBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGhhdmUgYXdva2Vu
LCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFuZ2VkLiBFaXRo
ZXIgd2F5LCB3ZSBsb29wCi0gICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgotICAgIH0K
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJpdCwgTG9j
a1R5cGUgaGFzUGFya2VkQml0Pgotdm9pZCBMb2NrQWxnb3JpdGhtPExvY2tUeXBlLCBpc0hlbGRC
aXQsIGhhc1BhcmtlZEJpdD46OnVubG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYgbG9jaywgRmFp
cm5lc3MgZmFpcm5lc3MpCi17Ci0gICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVjYXVzZSB0aGUg
d2VhayBDQVMgaW4gdW5sb2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1c2UgdGhlcmUg
aXMKLSAgICAvLyBzb21lb25lIHBhcmtlZC4gU28sIHdlIG5lZWQgYSBDQVMgbG9vcDogZXZlbiBp
ZiByaWdodCBub3cgdGhlIGxvY2sgaXMganVzdCBoZWxkLCBpdCBjb3VsZAotICAgIC8vIGJlIGhl
bGQgYW5kIHBhcmtlZCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIGxvY2sganVzdCBhcyB3ZSBhcmUg
dW5sb2NraW5nLgotICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhfdCBvbGRCeXRlVmFsdWUg
PSBsb2NrLmxvYWQoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoCi0gICAgICAgICAgICAob2xk
Qnl0ZVZhbHVlICYgbWFzaykgPT0gaXNIZWxkQml0Ci0gICAgICAgICAgICB8fCAob2xkQnl0ZVZh
bHVlICYgbWFzaykgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9PSBpc0hlbGRCaXQpIHsKLSAgICAgICAg
ICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkQnl0ZVZhbHVlLCBvbGRCeXRlVmFs
dWUgJiB+aXNIZWxkQml0KSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNvbWVvbmUgaXMgcGFya2VkLiBVbnBh
cmsgZXhhY3RseSBvbmUgdGhyZWFkLiBXZSBtYXkgaGFuZCB0aGUgbG9jayB0byB0aGF0IHRocmVh
ZAotICAgICAgICAvLyBkaXJlY3RseSwgb3Igd2Ugd2lsbCB1bmxvY2sgdGhlIGxvY2sgYXQgdGhl
IHNhbWUgdGltZSBhcyB3ZSB1bnBhcmsgdG8gYWxsb3cgZm9yIGJhcmdpbmcuCi0gICAgICAgIC8v
IFdoZW4gd2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhlIHBhcmtlZCBiaXQgc2V0IGlmIHRoZXJl
IGlzIGEgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxsCi0gICAgICAgIC8vIG90aGVyIHRocmVh
ZHMgcGFya2VkLgotICAgICAgICBBU1NFUlQoKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hl
bGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrT25lKAot
ICAgICAgICAgICAgJmxvY2ssCi0gICAgICAgICAgICBbJl0gKFBhcmtpbmdMb3Q6OlVucGFya1Jl
c3VsdCByZXN1bHQpIC0+IGludHB0cl90IHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgdGhl
IG9ubHkgb25lcyB0aGF0IGNhbiBjbGVhciBlaXRoZXIgdGhlIGlzSGVsZEJpdCBvciB0aGUgaGFz
UGFya2VkQml0LAotICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBzdGlsbCBzZWUgYm90
aCBiaXRzIHNldCByaWdodCBub3cuCi0gICAgICAgICAgICAgICAgQVNTRVJUKChsb2NrLmxvYWQo
KSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRpZFVucGFya1RocmVhZCAmJiAoZmFpcm5l
c3MgPT0gRmFpciB8fCByZXN1bHQudGltZVRvQmVGYWlyKSkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBkb24ndCB1bmxvY2sgYW55dGhpbmcuIEluc3RlYWQsIHdlIGhhbmQgdGhlIGxvY2sg
dG8gdGhlIHRocmVhZCB0aGF0IHdhcwotICAgICAgICAgICAgICAgICAgICAvLyB3YWl0aW5nLgot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGlyZWN0SGFuZG9mZjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbG9jay50cmFuc2FjdGlvbigK
LSAgICAgICAgICAgICAgICAgICAgWyZdIChMb2NrVHlwZSYgdmFsdWUpIC0+IGJvb2wgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgJj0gfm1hc2s7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0Lm1heUhhdmVNb3JlVGhyZWFkcykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSB8PSBoYXNQYXJrZWRCaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIEJhcmdpbmdPcHBvcnR1bml0eTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0xvY2tlZFByaW50U3RyZWFtLmNwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Mb2NrZWRQcmludFN0cmVhbS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNjlkMzE4ZWM1NzdmNTc2ODUzM2Q5Nzk1Mzg4YzMwMzJk
NzgwYjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0xvY2tlZFByaW50U3RyZWFtLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxvY2tlZFBy
aW50U3RyZWFtLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotCi1Mb2NrZWRQcmludFN0cmVhbTo6TG9j
a2VkUHJpbnRTdHJlYW0oc3RkOjp1bmlxdWVfcHRyPFByaW50U3RyZWFtPiB0YXJnZXQpCi0gICAg
OiBtX3RhcmdldChXVEZNb3ZlKHRhcmdldCkpCi17Ci19Ci0KLUxvY2tlZFByaW50U3RyZWFtOjp+
TG9ja2VkUHJpbnRTdHJlYW0oKQotewotfQotCi12b2lkIExvY2tlZFByaW50U3RyZWFtOjp2cHJp
bnRmKGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcmdzKQotewotICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICBtX3RhcmdldC0+dnByaW50Zihmb3JtYXQsIGFyZ3Mp
OwotfQotCi12b2lkIExvY2tlZFByaW50U3RyZWFtOjpmbHVzaCgpCi17Ci0gICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgIG1fdGFyZ2V0LT5mbHVzaCgpOwotfQotCi1Qcmlu
dFN0cmVhbSYgTG9ja2VkUHJpbnRTdHJlYW06OmJlZ2luKCkKLXsKLSAgICBtX2xvY2subG9jaygp
OwotICAgIHJldHVybiAqbV90YXJnZXQ7Ci19Ci0KLXZvaWQgTG9ja2VkUHJpbnRTdHJlYW06OmVu
ZCgpCi17Ci0gICAgbV9sb2NrLnVubG9jaygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0xvY2tlZFByaW50
U3RyZWFtLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTG9ja2VkUHJpbnRT
dHJlYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmViOTBhYWU4MDhlN2YyYjlm
NDRkNDJlNTZlM2E5NDM1NzQ2OWM1Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTG9ja2VkUHJp
bnRTdHJlYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIE1h
a2VzIGV2ZXJ5IGNhbGwgdG8gcHJpbnQoKSBhdG9taWMuCi1jbGFzcyBMb2NrZWRQcmludFN0cmVh
bSA6IHB1YmxpYyBQcmludFN0cmVhbSB7Ci1wdWJsaWM6Ci0gICAgTG9ja2VkUHJpbnRTdHJlYW0o
c3RkOjp1bmlxdWVfcHRyPFByaW50U3RyZWFtPiB0YXJnZXQpOwotICAgIHZpcnR1YWwgfkxvY2tl
ZFByaW50U3RyZWFtKCk7Ci0gICAgCi0gICAgdm9pZCB2cHJpbnRmKGNvbnN0IGNoYXIqIGZvcm1h
dCwgdmFfbGlzdCkgb3ZlcnJpZGUgV1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMCk7Ci0gICAgdm9p
ZCBmbHVzaCgpIG92ZXJyaWRlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgUHJpbnRTdHJlYW0mIGJlZ2lu
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmQoKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICAv
LyBUaGlzIG5lZWRzIHRvIGJlIGEgcmVjdXJzaXZlIGxvY2sgYmVjYXVzZSBhIHByaW50SW50ZXJu
YWwgb3IgZHVtcCBtZXRob2QgY291bGQgYXNzZXJ0LAotICAgIC8vIGFuZCB0aGF0IGFzc2VydCBt
aWdodCB3YW50IHRvIGxvZy4gQmV0dGVyIHRvIGxldCBpdC4gVGhpcyBuZWVkcyB0byBiZSBhIFdv
cmRMb2NrIHNvIHRoYXQKLSAgICAvLyBMb2NrZWRQcmludFN0cmVhbSAoaS5lLiBjYXRhTG9nKSBj
YW4gYmUgdXNlZCB0byBkZWJ1ZyBQYXJraW5nTG90IGFuZCBMb2NrLgotICAgIFJlY3Vyc2l2ZUxv
Y2tBZGFwdGVyPFdvcmRMb2NrPiBtX2xvY2s7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFByaW50U3Ry
ZWFtPiBtX3RhcmdldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6Okxv
Y2tlZFByaW50U3RyZWFtOwotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvTG9ja2VyLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTG9j
a2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNDFmMzAyOGYxYjY5NWUzMDU0
NTk3ZTRmOGY0YzZlMGU3Zjg2OWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0xvY2tlci5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTG9ja2VyX2gKLSNkZWZpbmUg
TG9ja2VyX2gKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1lbnVtIE5vTG9ja2luZ05lY2Vzc2Fy
eVRhZyB7IE5vTG9ja2luZ05lY2Vzc2FyeSB9OwotCi1jbGFzcyBBYnN0cmFjdExvY2tlciB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWJzdHJhY3RMb2NrZXIpOwotcHVibGljOgotICAgIEFi
c3RyYWN0TG9ja2VyKE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKLSAgICB7Ci0gICAgfQotICAgIAot
cHJvdGVjdGVkOgotICAgIEFic3RyYWN0TG9ja2VyKCkKLSAgICB7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIExvY2tlciA6IHB1YmxpYyBBYnN0cmFjdExvY2tlciB7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgTG9ja2VyKFQmIGxvY2thYmxlKSA6IG1fbG9ja2FibGUo
JmxvY2thYmxlKSB7IGxvY2soKTsgfQotICAgIGV4cGxpY2l0IExvY2tlcihUKiBsb2NrYWJsZSkg
OiBtX2xvY2thYmxlKGxvY2thYmxlKSB7IGxvY2soKTsgfQotCi0gICAgLy8gWW91IHNob3VsZCBi
ZSB3YXJ5IG9mIHVzaW5nIHRoaXMgY29uc3RydWN0b3IuIEl0J3Mgb25seSBhcHBsaWNhYmxlCi0g
ICAgLy8gaW4gcGxhY2VzIHdoZXJlIHRoZXJlIGlzIGEgbG9ja2luZyBwcm90b2NvbCBmb3IgYSBw
YXJ0aWN1bGFyIG9iamVjdAotICAgIC8vIGJ1dCBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gZW5nYWdl
IGluIHRoYXQgcHJvdG9jb2wgeWV0LiBGb3IgZXhhbXBsZSwKLSAgICAvLyB0aGlzIG9mdGVuIGhh
cHBlbnMgd2hlbiBhbiBvYmplY3QgaXMgbmV3bHkgYWxsb2NhdGVkIGFuZCBpdCBjYW4gbm90Ci0g
ICAgLy8gYmUgYWNjZXNzZWQgY29uY3VycmVudGx5LgotICAgIExvY2tlcihOb0xvY2tpbmdOZWNl
c3NhcnlUYWcpIDogbV9sb2NrYWJsZShudWxscHRyKSB7IH0KLSAgICAKLSAgICBMb2NrZXIoaW50
KSA9IGRlbGV0ZTsKLQotICAgIH5Mb2NrZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fbG9ja2Fi
bGUpCi0gICAgICAgICAgICBtX2xvY2thYmxlLT51bmxvY2soKTsKLSAgICB9Ci0gICAgCi0gICAg
c3RhdGljIExvY2tlciB0cnlMb2NrKFQmIGxvY2thYmxlKQotICAgIHsKLSAgICAgICAgTG9ja2Vy
IHJlc3VsdChOb0xvY2tpbmdOZWNlc3NhcnkpOwotICAgICAgICBpZiAobG9ja2FibGUudHJ5TG9j
aygpKSB7Ci0gICAgICAgICAgICByZXN1bHQubV9sb2NrYWJsZSA9ICZsb2NrYWJsZTsKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9sb2NrYWJsZTsgfQotICAgIAotICAgIHZvaWQgdW5sb2NrRWFybHkoKQotICAgIHsKLSAg
ICAgICAgbV9sb2NrYWJsZS0+dW5sb2NrKCk7Ci0gICAgICAgIG1fbG9ja2FibGUgPSAwOwotICAg
IH0KLSAgICAKLSAgICAvLyBJdCdzIGdyZWF0IHRvIGJlIGFibGUgdG8gcGFzcyBsb2NrZXJzIGFy
b3VuZC4gSXQgZW5hYmxlcyBjdXN0b20gbG9ja2luZyBhZGFwdG9ycyBsaWtlCi0gICAgLy8gSlND
OjpMb2NrRHVyaW5nTWFya2luZy4KLSAgICBMb2NrZXIoTG9ja2VyJiYgb3RoZXIpCi0gICAgICAg
IDogbV9sb2NrYWJsZShvdGhlci5tX2xvY2thYmxlKQotICAgIHsKLSAgICAgICAgb3RoZXIubV9s
b2NrYWJsZSA9IG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIExvY2tlciYgb3BlcmF0b3I9KExv
Y2tlciYmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKG1fbG9ja2FibGUpCi0gICAgICAgICAg
ICBtX2xvY2thYmxlLT51bmxvY2soKTsKLSAgICAgICAgbV9sb2NrYWJsZSA9IG90aGVyLm1fbG9j
a2FibGU7Ci0gICAgICAgIG90aGVyLm1fbG9ja2FibGUgPSBudWxscHRyOwotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICB2b2lkIGxvY2soKQotICAgIHsK
LSAgICAgICAgaWYgKG1fbG9ja2FibGUpCi0gICAgICAgICAgICBtX2xvY2thYmxlLT5sb2NrKCk7
Ci0gICAgfQotICAgIAotICAgIFQqIG1fbG9ja2FibGU7Ci19OwotCi0vLyBVc2UgdGhpcyBsb2Nr
IHNjb3BlIGxpa2Ugc286Ci0vLyBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGxvY2spOwotdGVtcGxh
dGU8dHlwZW5hbWUgTG9ja1R5cGU+Ci1Mb2NrZXI8TG9ja1R5cGU+IGhvbGRMb2NrKExvY2tUeXBl
JiBsb2NrKQotewotICAgIHJldHVybiBMb2NrZXI8TG9ja1R5cGU+KGxvY2spOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KLUxvY2tlcjxMb2NrVHlwZT4gdHJ5SG9sZExvY2soTG9j
a1R5cGUmIGxvY2spCi17Ci0gICAgcmV0dXJuIExvY2tlcjxMb2NrVHlwZT46OnRyeUxvY2sobG9j
ayk7Ci19Ci0KLX0KLQotdXNpbmcgV1RGOjpBYnN0cmFjdExvY2tlcjsKLXVzaW5nIFdURjo6TG9j
a2VyOwotdXNpbmcgV1RGOjpOb0xvY2tpbmdOZWNlc3NhcnlUYWc7Ci11c2luZyBXVEY6Ok5vTG9j
a2luZ05lY2Vzc2FyeTsKLXVzaW5nIFdURjo6aG9sZExvY2s7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0xvZ2dpbmdBY2N1bXVsYXRvci5o
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0xvZ2dpbmdBY2N1bXVsYXRvci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGUyMzIwNmRiZjhkMGUzNmIyNDRhNjQ1
NmUzOGQ4ZmQyYjNhMmQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Mb2dnaW5nQWNjdW11bGF0
b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLVdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlc2V0QWNjdW11bGF0ZWRMb2dzKCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5n
IGdldEFuZFJlc2V0QWNjdW11bGF0ZWRMb2dzKCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11
c2luZyBXVEY6OnJlc2V0QWNjdW11bGF0ZWRMb2dzOwotdXNpbmcgV1RGOjpnZXRBbmRSZXNldEFj
Y3VtdWxhdGVkTG9nczsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L3d0Zi9NYWluVGhyZWFkLmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9N
YWluVGhyZWFkLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ2ODgzZjk5MTJi
ZTVlMmU2MDcyNzNjNzM4MGUzMzQzMjk2YjI4YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTWFp
blRocmVhZC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJNYWluVGhyZWFkLmgiCi0KLSNpbmNsdWRlICJDdXJyZW50VGltZS5oIgot
I2luY2x1ZGUgIkRlcXVlLmgiCi0jaW5jbHVkZSAiTW9ub3RvbmljVGltZS5oIgotI2luY2x1ZGUg
IlN0ZExpYkV4dHJhcy5oIgotI2luY2x1ZGUgIlRocmVhZGluZy5oIgotI2luY2x1ZGUgPG11dGV4
PgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1z
dGF0aWMgYm9vbCBjYWxsYmFja3NQYXVzZWQ7IC8vIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIG9u
bHkgYWNjZXNzZWQgZnJvbSBtYWluIHRocmVhZC4KLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIG1h
aW5UaHJlYWRJZGVudGlmaWVyOwotCi1zdGF0aWMgU3RhdGljTG9jayBtYWluVGhyZWFkRnVuY3Rp
b25RdWV1ZU11dGV4OwotCi1zdGF0aWMgRGVxdWU8RnVuY3Rpb248dm9pZCAoKT4+JiBmdW5jdGlv
blF1ZXVlKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGVxdWU8RnVuY3Rpb248dm9p
ZCAoKT4+PiBmdW5jdGlvblF1ZXVlOwotICAgIHJldHVybiBmdW5jdGlvblF1ZXVlOwotfQotCi0v
LyBTaGFyZSB0aGlzIGluaXRpYWxpemVLZXkgd2l0aCBpbml0aWFsaXplTWFpblRocmVhZCBhbmQg
aW5pdGlhbGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkLgotc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIGluaXRpYWxpemVLZXk7Ci12b2lkIGluaXRpYWxpemVNYWluVGhyZWFkKCkKLXsKLSAg
ICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplS2V5LCBbXSB7Ci0gICAgICAgIGluaXRpYWxpemVU
aHJlYWRpbmcoKTsKLSAgICAgICAgbWFpblRocmVhZElkZW50aWZpZXIgPSBjdXJyZW50VGhyZWFk
KCk7Ci0gICAgICAgIGluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKTsKLSAgICAgICAgaW5p
dGlhbGl6ZUdDVGhyZWFkcygpOwotICAgIH0pOwotfQotCi1ib29sIGlzTWFpblRocmVhZCgpCi17
Ci0gICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBtYWluVGhyZWFkSWRlbnRpZmllcjsKLX0K
LQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2lmICFVU0UoV0VCX1RIUkVBRCkKLXZvaWQgaW5pdGlh
bGl6ZU1haW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkKCkKLXsKLSAgICBzdGQ6OmNhbGxfb25j
ZShpbml0aWFsaXplS2V5LCBbXSB7Ci0gICAgICAgIGluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAg
ICAgICAgLy9pbml0aWFsaXplTWFpblRocmVhZFRvUHJvY2Vzc01haW5UaHJlYWRQbGF0Zm9ybSgp
OwotICAgICAgICBpbml0aWFsaXplR0NUaHJlYWRzKCk7Ci0gICAgfSk7Ci19Ci0jZWxzZQotdm9p
ZCBpbml0aWFsaXplV2ViVGhyZWFkKCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5p
dGlhbGl6ZUtleTsKLSAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplS2V5LCBbXSB7Ci0gICAg
ICAgIGluaXRpYWxpemVXZWJUaHJlYWRQbGF0Zm9ybSgpOwotICAgIH0pOwotfQotI2VuZGlmIC8v
ICFVU0UoV0VCX1RIUkVBRCkKLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKLQotI2lmICFVU0Uo
V0VCX1RIUkVBRCkKLWJvb2wgY2FuQWNjZXNzVGhyZWFkTG9jYWxEYXRhRm9yVGhyZWFkKFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSWQpCi17Ci0gICAgcmV0dXJuIHRocmVhZElkID09IGN1cnJlbnRU
aHJlYWQoKTsKLX0KLSNlbmRpZgotCi0vLyAwLjEgc2VjIGRlbGF5cyBpbiBVSSBpcyBhcHByb3hp
bWF0ZSB0aHJlc2hvbGQgd2hlbiB0aGV5IGJlY29tZSBub3RpY2VhYmxlLiBIYXZlIGEgbGltaXQg
dGhhdCdzIGhhbGYgb2YgdGhhdC4KLXN0YXRpYyBjb25zdCBhdXRvIG1heFJ1bkxvb3BTdXNwZW5z
aW9uVGltZSA9IDUwX21zOwotCi12b2lkIGRpc3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQo
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoY2FsbGJhY2tzUGF1
c2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHN0YXJ0VGltZSA9IE1vbm90b25pY1Rp
bWU6Om5vdygpOwotCi0gICAgRnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb247Ci0KLSAgICB3aGls
ZSAodHJ1ZSkgewotICAgICAgICB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TG9jaz4gbG9jayhtYWluVGhyZWFkRnVuY3Rpb25RdWV1ZU11dGV4KTsKLSAgICAgICAgICAgIGlm
ICghZnVuY3Rpb25RdWV1ZSgpLnNpemUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgZnVuY3Rpb24gPSBmdW5jdGlvblF1ZXVlKCkudGFrZUZpcnN0KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBmdW5jdGlvbigpOwotCi0gICAgICAgIC8vIENsZWFyaW5nIHRoZSBmdW5j
dGlvbiBjYW4gaGF2ZSBzaWRlIGVmZmVjdHMsIHNvIGRvIHNvIG91dHNpZGUgb2YgdGhlIGxvY2sg
YWJvdmUuCi0gICAgICAgIGZ1bmN0aW9uID0gbnVsbHB0cjsKLQotICAgICAgICAvLyBJZiB3ZSBh
cmUgcnVubmluZyBhY2N1bXVsYXRlZCBmdW5jdGlvbnMgZm9yIHRvbyBsb25nIHNvIFVJIG1heSBi
ZWNvbWUgdW5yZXNwb25zaXZlLCB3ZSBuZWVkIHRvCi0gICAgICAgIC8vIHlpZWxkIHNvIHRoZSB1
c2VyIGlucHV0IGNhbiBiZSBwcm9jZXNzZWQuIE90aGVyd2lzZSB1c2VyIG1heSBub3QgYmUgYWJs
ZSB0byBldmVuIGNsb3NlIHRoZSB3aW5kb3cuCi0gICAgICAgIC8vIFRoaXMgY29kZSBoYXMgZWZm
ZWN0IG9ubHkgaW4gY2FzZSB0aGUgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVh
ZCgpIGlzIGltcGxlbWVudGVkIGluIGEgd2F5IHRoYXQKLSAgICAgICAgLy8gYWxsb3dzIGlucHV0
IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQgYmVmb3JlIHdlIGFyZSBiYWNrIGhlcmUuCi0gICAgICAg
IGlmIChNb25vdG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0VGltZSA+IG1heFJ1bkxvb3BTdXNwZW5z
aW9uVGltZSkgewotICAgICAgICAgICAgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRo
cmVhZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
Y2FsbE9uTWFpblRocmVhZChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQotewotICAgIEFT
U0VSVChmdW5jdGlvbik7Ci0KLSAgICBib29sIG5lZWRUb1NjaGVkdWxlID0gZmFsc2U7Ci0KLSAg
ICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKG1haW5UaHJlYWRG
dW5jdGlvblF1ZXVlTXV0ZXgpOwotICAgICAgICBuZWVkVG9TY2hlZHVsZSA9IGZ1bmN0aW9uUXVl
dWUoKS5zaXplKCkgPT0gMDsKLSAgICAgICAgZnVuY3Rpb25RdWV1ZSgpLmFwcGVuZChXVEZNb3Zl
KGZ1bmN0aW9uKSk7Ci0gICAgfQotCi0gICAgaWYgKG5lZWRUb1NjaGVkdWxlKQotICAgICAgICBz
Y2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCk7Ci19Ci0KLXZvaWQgc2V0TWFp
blRocmVhZENhbGxiYWNrc1BhdXNlZChib29sIHBhdXNlZCkKLXsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgaWYgKGNhbGxiYWNrc1BhdXNlZCA9PSBwYXVzZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNhbGxiYWNrc1BhdXNlZCA9IHBhdXNlZDsKLQotICAgIGlmICghY2Fs
bGJhY2tzUGF1c2VkKQotICAgICAgICBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhy
ZWFkKCk7Ci19Ci0KLXN0YXRpYyBUaHJlYWRTcGVjaWZpYzxzdGQ6Om9wdGlvbmFsPEdDVGhyZWFk
VHlwZT4sIENhbkJlR0NUaHJlYWQ6OlRydWU+KiBpc0dDVGhyZWFkOwotCi12b2lkIGluaXRpYWxp
emVHQ1RocmVhZHMoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBmbGFnOwotICAgIHN0
ZDo6Y2FsbF9vbmNlKAotICAgICAgICBmbGFnLAotICAgICAgICBbXSB7Ci0gICAgICAgICAgICBp
c0dDVGhyZWFkID0gbmV3IFRocmVhZFNwZWNpZmljPHN0ZDo6b3B0aW9uYWw8R0NUaHJlYWRUeXBl
PiwgQ2FuQmVHQ1RocmVhZDo6VHJ1ZT4oKTsKLSAgICAgICAgfSk7Ci19Ci0KLXZvaWQgcmVnaXN0
ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGUgdHlwZSkKLXsKLSAgICBpZiAoIWlzR0NUaHJlYWQpIHsK
LSAgICAgICAgLy8gVGhpcyBoYXBwZW5zIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBwcm9jZXNzIHRo
YXQgZG9lc24ndCBjYXJlIGFib3V0Ci0gICAgICAgIC8vIE1haW5UaHJlYWQuCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAqKmlzR0NUaHJlYWQgPSB0eXBlOwotfQotCi1ib29sIGlzTWFp
blRocmVhZE9yR0NUaHJlYWQoKQotewotICAgIGlmIChtYXlCZUdDVGhyZWFkKCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGlzTWFpblRocmVhZCgpOwotfQotCi1zdGQ6Om9w
dGlvbmFsPEdDVGhyZWFkVHlwZT4gbWF5QmVHQ1RocmVhZCgpCi17Ci0gICAgaWYgKCFpc0dDVGhy
ZWFkKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIGlmICghaXNHQ1RocmVhZC0+
aXNTZXQoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gKippc0dD
VGhyZWFkOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9NYWluVGhyZWFkLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvTWFpblRocmVhZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxNGIzNDY3M2EwYmQ4NTc3YzEyN2ZjZjI2OWI3MzI5ZWI2YjAwN2Y4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9NYWluVGhyZWFkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2Qg
KGpoYXlnb29kQHJlYWt0aXguY29tKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNYWluVGhyZWFkX2gKLSNkZWZpbmUgTWFpblRocmVhZF9o
Ci0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXVEYgewotCi1jbGFzcyBQcmludFN0cmVhbTsKLQotLy8gTXVzdCBiZSBjYWxsZWQgZnJv
bSB0aGUgbWFpbiB0aHJlYWQuCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplTWFp
blRocmVhZCgpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjYWxsT25NYWluVGhyZWFkKEZ1
bmN0aW9uPHZvaWQgKCk+JiYpOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi1XVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBjYWxsT25XZWJUaHJlYWRPckRpc3BhdGNoQXN5bmNPbk1haW5UaHJlYWQodm9p
ZCAoXmJsb2NrKSgpKTsKLSNlbmRpZgotCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRNYWlu
VGhyZWFkQ2FsbGJhY2tzUGF1c2VkKGJvb2wgcGF1c2VkKTsKLQotV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgaXNNYWluVGhyZWFkKCk7Ci0KLVdURl9FWFBPUlRfUFJJVkFURSBib29sIGNhbkFjY2Vz
c1RocmVhZExvY2FsRGF0YUZvclRocmVhZChUaHJlYWRJZGVudGlmaWVyKTsKLQotI2lmIFVTRShX
RUJfVEhSRUFEKQotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNXZWJUaHJlYWQoKTsKLVdURl9F
WFBPUlRfUFJJVkFURSBib29sIGlzVUlUaHJlYWQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGluaXRpYWxpemVXZWJUaHJlYWQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxp
emVBcHBsaWNhdGlvblVJVGhyZWFkSWRlbnRpZmllcigpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgaW5pdGlhbGl6ZVdlYlRocmVhZElkZW50aWZpZXIoKTsKLXZvaWQgaW5pdGlhbGl6ZVdlYlRo
cmVhZFBsYXRmb3JtKCk7Ci0jZWxzZQotaW5saW5lIGJvb2wgaXNXZWJUaHJlYWQoKSB7IHJldHVy
biBpc01haW5UaHJlYWQoKTsgfQotaW5saW5lIGJvb2wgaXNVSVRocmVhZCgpIHsgcmV0dXJuIGlz
TWFpblRocmVhZCgpOyB9Ci0jZW5kaWYgLy8gVVNFKFdFQl9USFJFQUQpCi0KLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGluaXRpYWxpemVHQ1RocmVhZHMoKTsKLQotZW51bSBjbGFzcyBHQ1RocmVh
ZFR5cGUgewotICAgIE1haW4sCi0gICAgSGVscGVyCi19OwotCi12b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mLCBHQ1RocmVhZFR5cGUpOwotCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBy
ZWdpc3RlckdDVGhyZWFkKEdDVGhyZWFkVHlwZSk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpv
cHRpb25hbDxHQ1RocmVhZFR5cGU+IG1heUJlR0NUaHJlYWQoKTsKLVdURl9FWFBPUlRfUFJJVkFU
RSBib29sIGlzTWFpblRocmVhZE9yR0NUaHJlYWQoKTsKLQotLy8gTk9URTogdGhlc2UgZnVuY3Rp
b25zIGFyZSBpbnRlcm5hbCB0byB0aGUgY2FsbE9uTWFpblRocmVhZCBpbXBsZW1lbnRhdGlvbi4K
LXZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpOwotdm9pZCBzY2hlZHVsZURpc3Bh
dGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCk7Ci12b2lkIGRpc3BhdGNoRnVuY3Rpb25zRnJvbU1h
aW5UaHJlYWQoKTsKLQotI2lmIE9TKERBUldJTikgJiYgIVVTRShHTElCKQotI2lmICFVU0UoV0VC
X1RIUkVBRCkKLS8vIFRoaXMgdmVyc2lvbiBvZiBpbml0aWFsaXplTWFpblRocmVhZCBzZXRzIHVw
IHRoZSBtYWluIHRocmVhZCBhcyBjb3JyZXNwb25kaW5nCi0vLyB0byB0aGUgcHJvY2VzcydzIG1h
aW4gdGhyZWFkLCBhbmQgbm90IG5lY2Vzc2FyaWx5IHRoZSB0aHJlYWQgdGhhdCBjYWxscyB0aGlz
Ci0vLyBmdW5jdGlvbi4gSXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBhIGxlZ2FjeSBhaWQgZm9y
IE1hYyBXZWJLaXQuCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplTWFpblRocmVh
ZFRvUHJvY2Vzc01haW5UaHJlYWQoKTsKLSNlbmRpZiAvLyAhVVNFKFdFQl9USFJFQUQpCi12b2lk
IGluaXRpYWxpemVNYWluVGhyZWFkVG9Qcm9jZXNzTWFpblRocmVhZFBsYXRmb3JtKCk7Ci0jZW5k
aWYKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6R0NUaHJlYWRUeXBlOwotdXNp
bmcgV1RGOjpjYWxsT25NYWluVGhyZWFkOwotdXNpbmcgV1RGOjpjYW5BY2Nlc3NUaHJlYWRMb2Nh
bERhdGFGb3JUaHJlYWQ7Ci11c2luZyBXVEY6OmlzTWFpblRocmVhZDsKLXVzaW5nIFdURjo6aXNN
YWluVGhyZWFkT3JHQ1RocmVhZDsKLXVzaW5nIFdURjo6aXNVSVRocmVhZDsKLXVzaW5nIFdURjo6
aXNXZWJUaHJlYWQ7Ci11c2luZyBXVEY6Om1heUJlR0NUaHJlYWQ7Ci11c2luZyBXVEY6OnNldE1h
aW5UaHJlYWRDYWxsYmFja3NQYXVzZWQ7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi11c2luZyBXVEY6
OmNhbGxPbldlYlRocmVhZE9yRGlzcGF0Y2hBc3luY09uTWFpblRocmVhZDsKLSNlbmRpZgotI2lm
IFVTRShXRUJfVEhSRUFEKQotdXNpbmcgV1RGOjppbml0aWFsaXplV2ViVGhyZWFkOwotdXNpbmcg
V1RGOjppbml0aWFsaXplQXBwbGljYXRpb25VSVRocmVhZElkZW50aWZpZXI7Ci11c2luZyBXVEY6
OmluaXRpYWxpemVXZWJUaHJlYWRJZGVudGlmaWVyOwotI2VuZGlmCi0KLSNlbmRpZiAvLyBNYWlu
VGhyZWFkX2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9N
YWxsb2NQdHIuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9NYWxsb2NQdHIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYxOGJhMmE1NTNhZDJhNWM0OWM0YmUz
MzZlZDdhYTk0ZGIwMDVkYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTWFsbG9jUHRyLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTWFsbG9j
UHRyX2gKLSNkZWZpbmUgTWFsbG9jUHRyX2gKLQotLy8gTWFsbG9jUHRyIGlzIGEgc21hcnQgcG9p
bnRlciBjbGFzcyB0aGF0IGNhbGxzIGZhc3RGcmVlIGluIGl0cyBkZXN0cnVjdG9yLgotLy8gSXQg
aXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgcG9pbnRlcnMgd2hlcmUgdGhlIEMrKyBsaWZldGlt
ZSBzZW1hbnRpY3MKLS8vIChjYWxsaW5nIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMpIGlz
IG5vdCBkZXNpcmVkLiAKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNsYXNzIE1hbGxvY1B0ciB7Ci1wdWJsaWM6Ci0gICAgTWFsbG9jUHRyKCkKLSAgICAgICAgOiBt
X3B0cihudWxscHRyKQotICAgIHsKLSAgICB9Ci0KLSAgICBNYWxsb2NQdHIoc3RkOjpudWxscHRy
X3QpCi0gICAgICAgIDogbV9wdHIobnVsbHB0cikKLSAgICB7Ci0gICAgfQotCi0gICAgTWFsbG9j
UHRyKE1hbGxvY1B0ciYmIG90aGVyKQotICAgICAgICA6IG1fcHRyKG90aGVyLmxlYWtQdHIoKSkK
LSAgICB7Ci0gICAgfQotCi0gICAgfk1hbGxvY1B0cigpCi0gICAgewotICAgICAgICBmYXN0RnJl
ZShtX3B0cik7Ci0gICAgfQotCi0gICAgVCogZ2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3B0cjsKLSAgICB9Ci0KLSAgICBUICpsZWFrUHRyKCkgV0FSTl9VTlVTRURfUkVUVVJO
Ci0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3B0ciwgbnVsbHB0cik7Ci0g
ICAgfQotCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
ICFtX3B0cjsKLSAgICB9Ci0KLSAgICBUJiBvcGVyYXRvciooKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fcHRyKTsKLSAgICAgICAgcmV0dXJuICptX3B0cjsKLSAgICB9Ci0KLSAgICBU
KiBvcGVyYXRvci0+KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3B0cjsKLSAgICB9
Ci0KLSAgICBNYWxsb2NQdHImIG9wZXJhdG9yPShNYWxsb2NQdHImJiBvdGhlcikKLSAgICB7Ci0g
ICAgICAgIE1hbGxvY1B0ciBwdHIgPSBXVEZNb3ZlKG90aGVyKTsKLSAgICAgICAgc3dhcChwdHIp
OwotCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICB2b2lkIHN3YXAoTWFsbG9j
UHRyJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHN0ZDo6c3dhcChtX3B0ciwgb3RoZXIubV9wdHIp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGZyaWVuZCBNYWxsb2NQdHI8VT4g
YWRvcHRNYWxsb2NQdHIoVSopOwotCi0gICAgc3RhdGljIE1hbGxvY1B0ciBtYWxsb2Moc2l6ZV90
IHNpemUpCi0gICAgewotICAgICAgICBNYWxsb2NQdHIgbWFsbG9jUHRyOwotICAgICAgICBtYWxs
b2NQdHIubV9wdHIgPSBzdGF0aWNfY2FzdDxUKj4oZmFzdE1hbGxvYyhzaXplKSk7Ci0KLSAgICAg
ICAgcmV0dXJuIG1hbGxvY1B0cjsKLSAgICB9Ci0KLSAgICB2b2lkIHJlYWxsb2Moc2l6ZV90IG5l
d1NpemUpCi0gICAgewotICAgICAgICBtX3B0ciA9IHN0YXRpY19jYXN0PFQqPihmYXN0UmVhbGxv
YyhtX3B0ciwgbmV3U2l6ZSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBNYWxs
b2NQdHIoVCogcHRyKQotICAgICAgICA6IG1fcHRyKHB0cikKLSAgICB7Ci0gICAgfQotCi0gICAg
VCogbV9wdHI7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVPiBNYWxsb2NQdHI8VT4gYWRvcHRN
YWxsb2NQdHIoVSogcHRyKQotewotICAgIHJldHVybiBNYWxsb2NQdHI8VT4ocHRyKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6TWFsbG9jUHRyOwotdXNpbmcgV1RGOjph
ZG9wdE1hbGxvY1B0cjsKLQotI2VuZGlmIC8vIE1hbGxvY1B0cl9oCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTWF0aEV4dHJhcy5oIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL01hdGhFeHRyYXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZGNlZjM5NDhhYjE2NjMwODJlNzg2ZTM1NWE1ZTM4OTA5NTcwMWYwMC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci93dGYvTWF0aEV4dHJhcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAs
IDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBXVEZfTWF0aEV4dHJhc19o
Ci0jZGVmaW5lIFdURl9NYXRoRXh0cmFzX2gKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNs
dWRlIDxjbWF0aD4KLSNpbmNsdWRlIDxmbG9hdC5oPgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNs
dWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+Ci0KLSNpZiBPUyhTT0xBUklTKQotI2luY2x1ZGUgPGllZWVmcC5oPgotI2VuZGlm
Ci0KLSNpZiBPUyhPUEVOQlNEKQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPG1h
Y2hpbmUvaWVlZS5oPgotI2VuZGlmCi0KLSNpZm5kZWYgTV9QSQotY29uc3QgZG91YmxlIHBpRG91
YmxlID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKLWNvbnN0IGZsb2F0IHBpRmxvYXQgPSAzLjE0
MTU5MjY1MzU4OTc5MzIzODQ2ZjsKLSNlbHNlCi1jb25zdCBkb3VibGUgcGlEb3VibGUgPSBNX1BJ
OwotY29uc3QgZmxvYXQgcGlGbG9hdCA9IHN0YXRpY19jYXN0PGZsb2F0PihNX1BJKTsKLSNlbmRp
ZgotCi0jaWZuZGVmIE1fUElfMgotY29uc3QgZG91YmxlIHBpT3ZlclR3b0RvdWJsZSA9IDEuNTcw
Nzk2MzI2Nzk0ODk2NjE5MjM7Ci1jb25zdCBmbG9hdCBwaU92ZXJUd29GbG9hdCA9IDEuNTcwNzk2
MzI2Nzk0ODk2NjE5MjNmOwotI2Vsc2UKLWNvbnN0IGRvdWJsZSBwaU92ZXJUd29Eb3VibGUgPSBN
X1BJXzI7Ci1jb25zdCBmbG9hdCBwaU92ZXJUd29GbG9hdCA9IHN0YXRpY19jYXN0PGZsb2F0PihN
X1BJXzIpOwotI2VuZGlmCi0KLSNpZm5kZWYgTV9QSV80Ci1jb25zdCBkb3VibGUgcGlPdmVyRm91
ckRvdWJsZSA9IDAuNzg1Mzk4MTYzMzk3NDQ4MzA5NjE2OwotY29uc3QgZmxvYXQgcGlPdmVyRm91
ckZsb2F0ID0gMC43ODUzOTgxNjMzOTc0NDgzMDk2MTZmOwotI2Vsc2UKLWNvbnN0IGRvdWJsZSBw
aU92ZXJGb3VyRG91YmxlID0gTV9QSV80OwotY29uc3QgZmxvYXQgcGlPdmVyRm91ckZsb2F0ID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KE1fUElfNCk7Ci0jZW5kaWYKLQotI2lmbmRlZiBNX1NRUlQyCi1j
b25zdCBkb3VibGUgc3FydE9mVHdvRG91YmxlID0gMS40MTQyMTM1NjIzNzMwOTUwNDg4MDsKLWNv
bnN0IGZsb2F0IHNxcnRPZlR3b0Zsb2F0ID0gMS40MTQyMTM1NjIzNzMwOTUwNDg4MGY7Ci0jZWxz
ZQotY29uc3QgZG91YmxlIHNxcnRPZlR3b0RvdWJsZSA9IE1fU1FSVDI7Ci1jb25zdCBmbG9hdCBz
cXJ0T2ZUd29GbG9hdCA9IHN0YXRpY19jYXN0PGZsb2F0PihNX1NRUlQyKTsKLSNlbmRpZgotCi0j
aWYgT1MoU09MQVJJUykKLQotbmFtZXNwYWNlIHN0ZCB7Ci0KLSNpZm5kZWYgaXNmaW5pdGUKLWlu
bGluZSBib29sIGlzZmluaXRlKGRvdWJsZSB4KSB7IHJldHVybiBmaW5pdGUoeCkgJiYgIWlzbmFu
ZCh4KTsgfQotI2VuZGlmCi0jaWZuZGVmIHNpZ25iaXQKLWlubGluZSBib29sIHNpZ25iaXQoZG91
YmxlIHgpIHsgcmV0dXJuIGNvcHlzaWduKDEuMCwgeCkgPCAwOyB9Ci0jZW5kaWYKLSNpZm5kZWYg
aXNpbmYKLWlubGluZSBib29sIGlzaW5mKGRvdWJsZSB4KSB7IHJldHVybiAhZmluaXRlKHgpICYm
ICFpc25hbmQoeCk7IH0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBzdGQKLQotI2VuZGlmCi0K
LSNpZiBDT01QSUxFUihNU1ZDKQotCi0vLyBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBXaW4sIHdoZXJl
IGF0YW4yKCstaW5maW5pdHksICstaW5maW5pdHkpIHlpZWxkcyBOYU4gaW5zdGVhZCBvZiBzcGVj
aWZpYyB2YWx1ZXMuCi1leHRlcm4gIkMiIGlubGluZSBkb3VibGUgd3RmX2F0YW4yKGRvdWJsZSB4
LCBkb3VibGUgeSkKLXsKLSAgICBkb3VibGUgcG9zSW5mID0gc3RkOjpudW1lcmljX2xpbWl0czxk
b3VibGU+OjppbmZpbml0eSgpOwotICAgIGRvdWJsZSBuZWdJbmYgPSAtc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpOwotICAgIGRvdWJsZSBuYW4gPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotCi0gICAgZG91YmxlIHJlc3VsdCA9IG5hbjsK
LQotICAgIGlmICh4ID09IHBvc0luZiAmJiB5ID09IHBvc0luZikKLSAgICAgICAgcmVzdWx0ID0g
cGlPdmVyRm91ckRvdWJsZTsKLSAgICBlbHNlIGlmICh4ID09IHBvc0luZiAmJiB5ID09IG5lZ0lu
ZikKLSAgICAgICAgcmVzdWx0ID0gMyAqIHBpT3ZlckZvdXJEb3VibGU7Ci0gICAgZWxzZSBpZiAo
eCA9PSBuZWdJbmYgJiYgeSA9PSBwb3NJbmYpCi0gICAgICAgIHJlc3VsdCA9IC1waU92ZXJGb3Vy
RG91YmxlOwotICAgIGVsc2UgaWYgKHggPT0gbmVnSW5mICYmIHkgPT0gbmVnSW5mKQotICAgICAg
ICByZXN1bHQgPSAtMyAqIHBpT3ZlckZvdXJEb3VibGU7Ci0gICAgZWxzZQotICAgICAgICByZXN1
bHQgPSA6OmF0YW4yKHgsIHkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotI2RlZmluZSBh
dGFuMih4LCB5KSB3dGZfYXRhbjIoeCwgeSkKLQotI2VuZGlmIC8vIENPTVBJTEVSKE1TVkMpCi0K
LWlubGluZSBkb3VibGUgZGVnMnJhZChkb3VibGUgZCkgIHsgcmV0dXJuIGQgKiBwaURvdWJsZSAv
IDE4MC4wOyB9Ci1pbmxpbmUgZG91YmxlIHJhZDJkZWcoZG91YmxlIHIpICB7IHJldHVybiByICog
MTgwLjAgLyBwaURvdWJsZTsgfQotaW5saW5lIGRvdWJsZSBkZWcyZ3JhZChkb3VibGUgZCkgeyBy
ZXR1cm4gZCAqIDQwMC4wIC8gMzYwLjA7IH0KLWlubGluZSBkb3VibGUgZ3JhZDJkZWcoZG91Ymxl
IGcpIHsgcmV0dXJuIGcgKiAzNjAuMCAvIDQwMC4wOyB9Ci1pbmxpbmUgZG91YmxlIHR1cm4yZGVn
KGRvdWJsZSB0KSB7IHJldHVybiB0ICogMzYwLjA7IH0KLWlubGluZSBkb3VibGUgZGVnMnR1cm4o
ZG91YmxlIGQpIHsgcmV0dXJuIGQgLyAzNjAuMDsgfQotaW5saW5lIGRvdWJsZSByYWQyZ3JhZChk
b3VibGUgcikgeyByZXR1cm4gciAqIDIwMC4wIC8gcGlEb3VibGU7IH0KLWlubGluZSBkb3VibGUg
Z3JhZDJyYWQoZG91YmxlIGcpIHsgcmV0dXJuIGcgKiBwaURvdWJsZSAvIDIwMC4wOyB9Ci0KLWlu
bGluZSBmbG9hdCBkZWcycmFkKGZsb2F0IGQpICB7IHJldHVybiBkICogcGlGbG9hdCAvIDE4MC4w
ZjsgfQotaW5saW5lIGZsb2F0IHJhZDJkZWcoZmxvYXQgcikgIHsgcmV0dXJuIHIgKiAxODAuMGYg
LyBwaUZsb2F0OyB9Ci1pbmxpbmUgZmxvYXQgZGVnMmdyYWQoZmxvYXQgZCkgeyByZXR1cm4gZCAq
IDQwMC4wZiAvIDM2MC4wZjsgfQotaW5saW5lIGZsb2F0IGdyYWQyZGVnKGZsb2F0IGcpIHsgcmV0
dXJuIGcgKiAzNjAuMGYgLyA0MDAuMGY7IH0KLWlubGluZSBmbG9hdCB0dXJuMmRlZyhmbG9hdCB0
KSB7IHJldHVybiB0ICogMzYwLjBmOyB9Ci1pbmxpbmUgZmxvYXQgZGVnMnR1cm4oZmxvYXQgZCkg
eyByZXR1cm4gZCAvIDM2MC4wZjsgfQotaW5saW5lIGZsb2F0IHJhZDJncmFkKGZsb2F0IHIpIHsg
cmV0dXJuIHIgKiAyMDAuMGYgLyBwaUZsb2F0OyB9Ci1pbmxpbmUgZmxvYXQgZ3JhZDJyYWQoZmxv
YXQgZykgeyByZXR1cm4gZyAqIHBpRmxvYXQgLyAyMDAuMGY7IH0KLQotLy8gc3RkOjpudW1lcmlj
X2xpbWl0czxUPjo6bWluKCkgcmV0dXJucyB0aGUgc21hbGxlc3QgcG9zaXRpdmUgdmFsdWUgZm9y
IGZsb2F0aW5nIHBvaW50IHR5cGVzCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgaW5s
aW5lIFQgZGVmYXVsdE1pbmltdW1Gb3JDbGFtcCgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8VD46Om1pbigpOyB9Ci10ZW1wbGF0ZTw+IGNvbnN0ZXhwciBpbmxpbmUgZmxvYXQgZGVmYXVs
dE1pbmltdW1Gb3JDbGFtcCgpIHsgcmV0dXJuIC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
bWF4KCk7IH0KLXRlbXBsYXRlPD4gY29uc3RleHByIGlubGluZSBkb3VibGUgZGVmYXVsdE1pbmlt
dW1Gb3JDbGFtcCgpIHsgcmV0dXJuIC1zdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgp
OyB9Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgaW5saW5lIFQgZGVmYXVsdE1heGlt
dW1Gb3JDbGFtcCgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOyB9Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGNsYW1wVG8oZG91YmxlIHZhbHVlLCBUIG1p
biA9IGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXA8VD4oKSwgVCBtYXggPSBkZWZhdWx0TWF4aW11bUZv
ckNsYW1wPFQ+KCkpCi17Ci0gICAgaWYgKHZhbHVlID49IHN0YXRpY19jYXN0PGRvdWJsZT4obWF4
KSkKLSAgICAgICAgcmV0dXJuIG1heDsKLSAgICBpZiAodmFsdWUgPD0gc3RhdGljX2Nhc3Q8ZG91
YmxlPihtaW4pKQotICAgICAgICByZXR1cm4gbWluOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
Pih2YWx1ZSk7Ci19Ci10ZW1wbGF0ZTw+IGlubGluZSBsb25nIGxvbmcgaW50IGNsYW1wVG8oZG91
YmxlLCBsb25nIGxvbmcgaW50LCBsb25nIGxvbmcgaW50KTsgLy8gY2xhbXBUbyBkb2VzIG5vdCBz
dXBwb3J0IGxvbmcgbG9uZyBpbnRzLgotCi1pbmxpbmUgaW50IGNsYW1wVG9JbnRlZ2VyKGRvdWJs
ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHZhbHVlKTsKLX0KLQotaW5saW5l
IHVuc2lnbmVkIGNsYW1wVG9VbnNpZ25lZChkb3VibGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGNs
YW1wVG88dW5zaWduZWQ+KHZhbHVlKTsKLX0KLQotaW5saW5lIGZsb2F0IGNsYW1wVG9GbG9hdChk
b3VibGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHZhbHVlKTsKLX0KLQot
aW5saW5lIGludCBjbGFtcFRvUG9zaXRpdmVJbnRlZ2VyKGRvdWJsZSB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gY2xhbXBUbzxpbnQ+KHZhbHVlLCAwKTsKLX0KLQotaW5saW5lIGludCBjbGFtcFRvSW50
ZWdlcihmbG9hdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHZhbHVlKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBpbnQgY2xhbXBUb0ludGVnZXIoVCB4KQot
ewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNfaW50ZWdlciwg
IlQgbXVzdCBiZSBhbiBpbnRlZ2VyLiIpOwotCi0gICAgY29uc3QgVCBpbnRNYXggPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0KLSAgICBp
ZiAoeCA+PSBpbnRNYXgpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHgpOwotfQotCi0vLyBFeHBsaWNp
dGx5IGFjY2VwdCA2NGJpdCByZXN1bHQgd2hlbiBjbGFtcGluZyBkb3VibGUgdmFsdWUuCi0vLyBL
ZWVwIGluIG1pbmQgdGhhdCBkb3VibGUgY2FuIG9ubHkgcmVwcmVzZW50IDUzYml0IGludGVnZXIg
cHJlY2lzZWx5LgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGlubGluZSBUIGNsYW1w
VG9BY2NlcHRpbmc2NChkb3VibGUgdmFsdWUsIFQgbWluID0gZGVmYXVsdE1pbmltdW1Gb3JDbGFt
cDxUPigpLCBUIG1heCA9IGRlZmF1bHRNYXhpbXVtRm9yQ2xhbXA8VD4oKSkKLXsKLSAgICByZXR1
cm4gKHZhbHVlID49IHN0YXRpY19jYXN0PGRvdWJsZT4obWF4KSkgPyBtYXggOiAoKHZhbHVlIDw9
IHN0YXRpY19jYXN0PGRvdWJsZT4obWluKSkgPyBtaW4gOiBzdGF0aWNfY2FzdDxUPih2YWx1ZSkp
OwotfQotCi1pbmxpbmUgYm9vbCBpc1dpdGhpbkludFJhbmdlKGZsb2F0IHgpCi17Ci0gICAgcmV0
dXJuIHggPiBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4o
KSkgJiYgeCA8IHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKTsKLX0KLQotaW5saW5lIGZsb2F0IG5vcm1hbGl6ZWRGbG9hdChmbG9hdCB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPiAwICYmIHZhbHVlIDwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
Om1pbigpKQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigp
OwotICAgIGlmICh2YWx1ZSA8IDAgJiYgdmFsdWUgPiAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46Om1pbigpKQotICAgICAgICByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpt
aW4oKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBib29sIGhhc09uZUJpdFNldChUIHZhbHVlKQotewotICAgIHJldHVybiAhKCh2YWx1ZSAtIDEp
ICYgdmFsdWUpICYmIHZhbHVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9v
bCBoYXNaZXJvT3JPbmVCaXRzU2V0KFQgdmFsdWUpCi17Ci0gICAgcmV0dXJuICEoKHZhbHVlIC0g
MSkgJiB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIGhhc1R3
b09yTW9yZUJpdHNTZXQoVCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gIWhhc1plcm9Pck9uZUJpdHNT
ZXQodmFsdWUpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHVuc2lnbmVkIGdl
dExTQlNldChUIHZhbHVlKQotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2ln
bmVkPFQ+Ojp0eXBlIFVuc2lnbmVkVDsKLSAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwotCi0gICAg
VW5zaWduZWRUIHVuc2lnbmVkVmFsdWUgPSBzdGF0aWNfY2FzdDxVbnNpZ25lZFQ+KHZhbHVlKTsK
LSAgICB3aGlsZSAodW5zaWduZWRWYWx1ZSA+Pj0gMSkKLSAgICAgICAgKytyZXN1bHQ7Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCBkaXZp
ZGVSb3VuZGVkVXAoVCBhLCBUIGIpCi17Ci0gICAgcmV0dXJuIChhICsgYiAtIDEpIC8gYjsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgdGltZXNUaHJlZVBsdXNPbmVEaXZpZGVk
QnlUd28oVCB2YWx1ZSkKLXsKLSAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgot
ICAgIC8vICAgKHZhbHVlICogMyArIDEpIC8gMjsKLSAgICAvLyBvcjoKLSAgICAvLyAgICh1bnNp
Z25lZCljZWlsKHZhbHVlICogMS41KSk7Ci0gICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0
byBpbnRlcm5hbCBvdmVyZmxvdy4KLSAgICByZXR1cm4gdmFsdWUgKyAodmFsdWUgPj4gMSkgKyAo
dmFsdWUgJiAxKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgaXNOb3Ra
ZXJvQW5kT3JkZXJlZChUIHZhbHVlKQotewotICAgIHJldHVybiB2YWx1ZSA+IDAuMCB8fCB2YWx1
ZSA8IDAuMDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgaXNaZXJvT3JV
bm9yZGVyZWQoVCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gIWlzTm90WmVyb0FuZE9yZGVyZWQodmFs
dWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBpc0dyZWF0ZXJUaGFu
Tm9uWmVyb1Bvd2VyT2ZUd28oVCB2YWx1ZSwgdW5zaWduZWQgcG93ZXIpCi17Ci0gICAgLy8gVGhl
IGNyYXp5IHdheSBvZiB0ZXN0aW5nIG9mIGluZGV4ID49IDIgKiogcG93ZXIKLSAgICAvLyAod2hl
cmUgSSB1c2UgKiogdG8gZGVub3RlIHBvdygpKS4KLSAgICByZXR1cm4gISEoKHZhbHVlID4+IDEp
ID4+IChwb3dlciAtIDEpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGlu
bGluZSBib29sIGlzTGVzc1RoYW4oY29uc3QgVCYgYSwgY29uc3QgVCYgYikgeyByZXR1cm4gYSA8
IGI7IH0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbmxpbmUgYm9vbCBpc0xlc3NU
aGFuRXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVCYgYikgeyByZXR1cm4gYSA8PSBiOyB9Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgaW5saW5lIGJvb2wgaXNHcmVhdGVyVGhhbihjb25z
dCBUJiBhLCBjb25zdCBUJiBiKSB7IHJldHVybiBhID4gYjsgfQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gY29uc3RleHByIGlubGluZSBib29sIGlzR3JlYXRlclRoYW5FcXVhbChjb25zdCBUJiBhLCBj
b25zdCBUJiBiKSB7IHJldHVybiBhID49IGI7IH0KLQotI2lmbmRlZiBVSU5UNjRfQwotI2lmIENP
TVBJTEVSKE1TVkMpCi0jZGVmaW5lIFVJTlQ2NF9DKGMpIGMgIyMgdWk2NAotI2Vsc2UKLSNkZWZp
bmUgVUlOVDY0X0MoYykgYyAjIyB1bGwKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBDT01QSUxFUihN
SU5HVzY0KSAmJiAoIWRlZmluZWQoX19NSU5HVzY0X1ZFUlNJT05fUkMpIHx8IF9fTUlOR1c2NF9W
RVJTSU9OX1JDIDwgMSkKLWlubGluZSBkb3VibGUgd3RmX3Bvdyhkb3VibGUgeCwgZG91YmxlIHkp
Ci17Ci0gICAgLy8gTWluR1ctdzY0IGhhcyBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBmb3IgcG93
LgotICAgIC8vIFRoaXMgaGFuZGxlcyBjZXJ0YWluIHNwZWNpYWwgY2FzZXMgdGhhdCBhcmUgZGlm
ZmVyZW50LgotICAgIGlmICgoeCA9PSAwLjAgfHwgc3RkOjppc2luZih4KSkgJiYgc3RkOjppc2Zp
bml0ZSh5KSkgewotICAgICAgICBkb3VibGUgZjsKLSAgICAgICAgaWYgKG1vZGYoeSwgJmYpICE9
IDAuMCkKLSAgICAgICAgICAgIHJldHVybiAoKHggPT0gMC4wKSBeICh5ID4gMC4wKSkgPyBzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkgOiAwLjA7Ci0gICAgfQotCi0gICAg
aWYgKHggPT0gMi4wKSB7Ci0gICAgICAgIGludCB5SW50ID0gc3RhdGljX2Nhc3Q8aW50Pih5KTsK
LSAgICAgICAgaWYgKHkgPT0geUludCkKLSAgICAgICAgICAgIHJldHVybiBsZGV4cCgxLjAsIHlJ
bnQpOwotICAgIH0KLQotICAgIHJldHVybiBwb3coeCwgeSk7Ci19Ci0jZGVmaW5lIHBvdyh4LCB5
KSB3dGZfcG93KHgsIHkpCi0jZW5kaWYgLy8gQ09NUElMRVIoTUlOR1c2NCkgJiYgKCFkZWZpbmVk
KF9fTUlOR1c2NF9WRVJTSU9OX1JDKSB8fCBfX01JTkdXNjRfVkVSU0lPTl9SQyA8IDEpCi0KLQot
Ly8gZGVjb21wb3NlICdudW1iZXInIHRvIGl0cyBzaWduLCBleHBvbmVudCwgYW5kIG1hbnRpc3Nh
IGNvbXBvbmVudHMuCi0vLyBUaGUgcmVzdWx0IGlzIGludGVycHJldGVkIGFzOgotLy8gICAgIChz
aWduID8gLTEgOiAxKSAqIHBvdygyLCBleHBvbmVudCkgKiAobWFudGlzc2EgLyAoMSA8PCA1Mikp
Ci1pbmxpbmUgdm9pZCBkZWNvbXBvc2VEb3VibGUoZG91YmxlIG51bWJlciwgYm9vbCYgc2lnbiwg
aW50MzJfdCYgZXhwb25lbnQsIHVpbnQ2NF90JiBtYW50aXNzYSkKLXsKLSAgICBBU1NFUlQoc3Rk
Ojppc2Zpbml0ZShudW1iZXIpKTsKLQotICAgIHNpZ24gPSBzdGQ6OnNpZ25iaXQobnVtYmVyKTsK
LQotICAgIHVpbnQ2NF90IGJpdHMgPSBXVEY6OmJpdHdpc2VfY2FzdDx1aW50NjRfdD4obnVtYmVy
KTsKLSAgICBleHBvbmVudCA9IChzdGF0aWNfY2FzdDxpbnQzMl90PihiaXRzID4+IDUyKSAmIDB4
N2ZmKSAtIDB4M2ZmOwotICAgIG1hbnRpc3NhID0gYml0cyAmIDB4RkZGRkZGRkZGRkZGRnVsbDsK
LQotICAgIC8vIENoZWNrIGZvciB6ZXJvL2Rlbm9ybWFsIHZhbHVlczsgaWYgc28sIGFkanVzdCB0
aGUgZXhwb25lbnQsCi0gICAgLy8gaWYgbm90IGluc2VydCB0aGUgaW1wbGljaXQsIG9taXR0ZWQg
bGVhZGluZyAxIGJpdC4KLSAgICBpZiAoZXhwb25lbnQgPT0gLTB4M2ZmKQotICAgICAgICBleHBv
bmVudCA9IG1hbnRpc3NhID8gLTB4M2ZlIDogMDsKLSAgICBlbHNlCi0gICAgICAgIG1hbnRpc3Nh
IHw9IDB4MTAwMDAwMDAwMDAwMDB1bGw7Ci19Ci0KLS8vIENhbGN1bGF0ZSBkICUgMl57NjR9Lgot
aW5saW5lIHZvaWQgZG91YmxlVG9JbnRlZ2VyKGRvdWJsZSBkLCB1bnNpZ25lZCBsb25nIGxvbmcm
IHZhbHVlKQotewotICAgIGlmIChzdGQ6OmlzbmFuKGQpIHx8IHN0ZDo6aXNpbmYoZCkpCi0gICAg
ICAgIHZhbHVlID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gLTJeezY0fSA8IGZtb2RWYWx1
ZSA8IDJeezY0fS4KLSAgICAgICAgZG91YmxlIGZtb2RWYWx1ZSA9IGZtb2QodHJ1bmMoZCksIHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPjo6bWF4KCkgKyAxLjApOwotICAg
ICAgICBpZiAoZm1vZFZhbHVlID49IDApIHsKLSAgICAgICAgICAgIC8vIDAgPD0gZm1vZFZhbHVl
IDwgMl57NjR9LgotICAgICAgICAgICAgLy8gMCA8PSB2YWx1ZSA8IDJeezY0fS4gVGhpcyBjYXN0
IGNhdXNlcyBubyBsb3NzLgotICAgICAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nIGxvbmc+KGZtb2RWYWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyAtMl57NjR9IDwgZm1vZFZhbHVlIDwgMC4KLSAgICAgICAgICAgIC8vIDAgPCBmbW9kVmFsdWVJ
blVuc2lnbmVkTG9uZ0xvbmcgPCAyXns2NH0uIFRoaXMgY2FzdCBjYXVzZXMgbm8gbG9zcy4KLSAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBmbW9kVmFsdWVJblVuc2lnbmVkTG9uZ0xvbmcg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KC1mbW9kVmFsdWUpOwotICAgICAgICAg
ICAgLy8gLTEgPCAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nIGxvbmc+OjptYXgo
KSAtIGZtb2RWYWx1ZUluVW5zaWduZWRMb25nTG9uZykgPCAyXns2NH0gLSAxLgotICAgICAgICAg
ICAgLy8gMCA8IHZhbHVlIDwgMl57NjR9LgotICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz46Om1heCgpIC0gZm1vZFZhbHVlSW5VbnNpZ25l
ZExvbmdMb25nICsgMTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotbmFtZXNwYWNlIFdURiB7Ci0K
LS8vIEZyb20gaHR0cDovL2dyYXBoaWNzLnN0YW5mb3JkLmVkdS9+c2VhbmRlci9iaXRoYWNrcy5o
dG1sI1JvdW5kVXBQb3dlck9mMgotaW5saW5lIHVpbnQzMl90IHJvdW5kVXBUb1Bvd2VyT2ZUd28o
dWludDMyX3QgdikKLXsKLSAgICB2LS07Ci0gICAgdiB8PSB2ID4+IDE7Ci0gICAgdiB8PSB2ID4+
IDI7Ci0gICAgdiB8PSB2ID4+IDQ7Ci0gICAgdiB8PSB2ID4+IDg7Ci0gICAgdiB8PSB2ID4+IDE2
OwotICAgIHYrKzsKLSAgICByZXR1cm4gdjsKLX0KLQotaW5saW5lIHVuc2lnbmVkIGZhc3RMb2cy
KHVuc2lnbmVkIGkpCi17Ci0gICAgdW5zaWduZWQgbG9nMiA9IDA7Ci0gICAgaWYgKGkgJiAoaSAt
IDEpKQotICAgICAgICBsb2cyICs9IDE7Ci0gICAgaWYgKGkgPj4gMTYpCi0gICAgICAgIGxvZzIg
Kz0gMTYsIGkgPj49IDE2OwotICAgIGlmIChpID4+IDgpCi0gICAgICAgIGxvZzIgKz0gOCwgaSA+
Pj0gODsKLSAgICBpZiAoaSA+PiA0KQotICAgICAgICBsb2cyICs9IDQsIGkgPj49IDQ7Ci0gICAg
aWYgKGkgPj4gMikKLSAgICAgICAgbG9nMiArPSAyLCBpID4+PSAyOwotICAgIGlmIChpID4+IDEp
Ci0gICAgICAgIGxvZzIgKz0gMTsKLSAgICByZXR1cm4gbG9nMjsKLX0KLQotaW5saW5lIHVuc2ln
bmVkIGZhc3RMb2cyKHVpbnQ2NF90IHZhbHVlKQotewotICAgIHVuc2lnbmVkIGhpZ2ggPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUgPj4gMzIpOwotICAgIGlmIChoaWdoKQotICAgICAgICBy
ZXR1cm4gZmFzdExvZzIoaGlnaCkgKyAzMjsKLSAgICByZXR1cm4gZmFzdExvZzIoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotaW5saW5l
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVl
LCBUPjo6dHlwZSBzYWZlRlBEaXZpc2lvbihUIHUsIFQgdikKLXsKLSAgICAvLyBQcm90ZWN0IGFn
YWluc3Qgb3ZlcmZsb3cgLyB1bmRlcmZsb3cuCi0gICAgaWYgKHYgPCAxICYmIHUgPiB2ICogc3Rk
OjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPFQ+OjptYXgoKTsKLSAgICBpZiAodiA+IDEgJiYgdSA8IHYgKiBzdGQ6Om51bWVyaWNf
bGltaXRzPFQ+OjptaW4oKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHUgLyB2Owot
fQotCi0vLyBGbG9hdGluZyBwb2ludCBudW1iZXJzIGNvbXBhcmlzb246Ci0vLyB1IGlzICJlc3Nl
bnRpYWxseSBlcXVhbCIgWzFdWzJdIHRvIHYgaWY6IHwgdSAtIHYgfCAvIHx1fCA8PSBlIGFuZCB8
IHUgLSB2IHwgLyB8dnwgPD0gZQotLy8KLS8vIFsxXSBLbnV0aCwgRC4gRS4gIkFjY3VyYWN5IG9m
IEZsb2F0aW5nIFBvaW50IEFyaXRobWV0aWMuIiBUaGUgQXJ0IG9mIENvbXB1dGVyIFByb2dyYW1t
aW5nLiAzcmQgZWQuIFZvbC4gMi4KLS8vICAgICBCb3N0b246IEFkZGlzb24tV2VzbGV5LCAxOTk4
LiAyMjktNDUuCi0vLyBbMl0gaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvMV8zNF8wL2xp
YnMvdGVzdC9kb2MvY29tcG9uZW50cy90ZXN0X3Rvb2xzL2Zsb2F0aW5nX3BvaW50X2NvbXBhcmlz
b24uaHRtbAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIGFyZUVz
c2VudGlhbGx5RXF1YWwoVCB1LCBUIHYsIFQgZXBzaWxvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
VD46OmVwc2lsb24oKSkKLXsKLSAgICBpZiAodSA9PSB2KQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGNvbnN0IFQgZGVsdGEgPSBzdGQ6OmFicyh1IC0gdik7Ci0gICAgcmV0dXJuIHNhZmVG
UERpdmlzaW9uKGRlbHRhLCBzdGQ6OmFicyh1KSkgPD0gZXBzaWxvbiAmJiBzYWZlRlBEaXZpc2lv
bihkZWx0YSwgc3RkOjphYnModikpIDw9IGVwc2lsb247Ci19Ci0KLS8vIE1hdGNoIGJlaGF2aW9y
IG9mIE1hdGgubWluLCB3aGVyZSBOYU4gaXMgcmV0dXJuZWQgaWYgZWl0aGVyIGFyZ3VtZW50IGlz
IE5hTi4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotaW5saW5lIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVlLCBUPjo6dHlwZSBuYW5Qcm9wYWdh
dGluZ01pbihUIGEsIFQgYikKLXsKLSAgICByZXR1cm4gc3RkOjppc25hbihhKSB8fCBzdGQ6Omlz
bmFuKGIpID8gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6cXVpZXRfTmFOKCkgOiBzdGQ6Om1pbihh
LCBiKTsKLX0KLQotLy8gTWF0Y2ggYmVoYXZpb3Igb2YgTWF0aC5tYXgsIHdoZXJlIE5hTiBpcyBy
ZXR1cm5lZCBpZiBlaXRoZXIgYXJndW1lbnQgaXMgTmFOLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci1pbmxpbmUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19mbG9hdGluZ19wb2ludDxU
Pjo6dmFsdWUsIFQ+Ojp0eXBlIG5hblByb3BhZ2F0aW5nTWF4KFQgYSwgVCBiKQotewotICAgIHJl
dHVybiBzdGQ6OmlzbmFuKGEpIHx8IHN0ZDo6aXNuYW4oYikgPyBzdGQ6Om51bWVyaWNfbGltaXRz
PFQ+OjpxdWlldF9OYU4oKSA6IHN0ZDo6bWF4KGEsIGIpOwotfQotCi1pbmxpbmUgYm9vbCBpc0lu
dGVncmFsKGZsb2F0IHZhbHVlKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVl
KSA9PSB2YWx1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSB2b2lkIGluY3Jl
bWVudFdpdGhTYXR1cmF0aW9uKFQmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSAhPSBzdGQ6Om51
bWVyaWNfbGltaXRzPFQ+OjptYXgoKSkKLSAgICAgICAgdmFsdWUrKzsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLWlubGluZSBUIGxlZnRTaGlmdFdpdGhTYXR1cmF0aW9uKFQgdmFsdWUsIHVu
c2lnbmVkIHNoaWZ0QW1vdW50LCBUIG1heCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgp
KQotewotICAgIFQgcmVzdWx0ID0gdmFsdWUgPDwgc2hpZnRBbW91bnQ7Ci0gICAgLy8gV2Ugd2ls
bCBoYXZlIHNhdHVyYXRlZCBpZiBzaGlmdGluZyByaWdodCBkb2Vzbid0IHJlY292ZXIgdGhlIG9y
aWdpbmFsIHZhbHVlLgotICAgIGlmIChyZXN1bHQgPj4gc2hpZnRBbW91bnQgIT0gdmFsdWUpCi0g
ICAgICAgIHJldHVybiBtYXg7Ci0gICAgaWYgKHJlc3VsdCA+IG1heCkKLSAgICAgICAgcmV0dXJu
IG1heDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBDaGVjayBpZiB0d28gcmFuZ2VzIG92
ZXJsYXAgYXNzdW1pbmcgdGhhdCBuZWl0aGVyIHJhbmdlIGlzIGVtcHR5LgotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLWlubGluZSBib29sIG5vbkVtcHR5UmFuZ2VzT3ZlcmxhcChUIGxlZnRNaW4sIFQg
bGVmdE1heCwgVCByaWdodE1pbiwgVCByaWdodE1heCkKLXsKLSAgICBBU1NFUlQobGVmdE1pbiA8
IGxlZnRNYXgpOwotICAgIEFTU0VSVChyaWdodE1pbiA8IHJpZ2h0TWF4KTsKLQotICAgIHJldHVy
biBsZWZ0TWF4ID4gcmlnaHRNaW4gJiYgcmlnaHRNYXggPiBsZWZ0TWluOwotfQotCi0vLyBQYXNz
IHJhbmdlcyB3aXRoIHRoZSBtaW4gYmVpbmcgaW5jbHVzaXZlIGFuZCB0aGUgbWF4IGJlaW5nIGV4
Y2x1c2l2ZS4gRm9yIGV4YW1wbGUsIHRoaXMgc2hvdWxkCi0vLyByZXR1cm4gZmFsc2U6Ci0vLwot
Ly8gICAgIHJhbmdlc092ZXJsYXAoMCwgOCwgOCwgMTYpCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
aW5saW5lIGJvb2wgcmFuZ2VzT3ZlcmxhcChUIGxlZnRNaW4sIFQgbGVmdE1heCwgVCByaWdodE1p
biwgVCByaWdodE1heCkKLXsKLSAgICBBU1NFUlQobGVmdE1pbiA8PSBsZWZ0TWF4KTsKLSAgICBB
U1NFUlQocmlnaHRNaW4gPD0gcmlnaHRNYXgpOwotICAgIAotICAgIC8vIEVtcHR5IHJhbmdlcyBp
bnRlcmZlcmUgd2l0aCBub3RoaW5nLgotICAgIGlmIChsZWZ0TWluID09IGxlZnRNYXgpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAocmlnaHRNaW4gPT0gcmlnaHRNYXgpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBub25FbXB0eVJhbmdlc092ZXJsYXAobGVmdE1p
biwgbGVmdE1heCwgcmlnaHRNaW4sIHJpZ2h0TWF4KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RG
Ci0KLSNlbmRpZiAvLyAjaWZuZGVmIFdURl9NYXRoRXh0cmFzX2gKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Nb25vdG9uaWNUaW1lLmNwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Nb25vdG9uaWNUaW1lLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjVkM2YwZTc0M2YyNjhmY2U0NTUwNGZkMjZjMGNlY2NjODM0NjQw
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTW9ub3RvbmljVGltZS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNb25vdG9uaWNUaW1lLmgi
Ci0KLSNpbmNsdWRlICJDdXJyZW50VGltZS5oIgotI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCi0j
aW5jbHVkZSAiVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgiCi0jaW5jbHVkZSAiV2FsbFRpbWUu
aCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLU1vbm90b25pY1RpbWUgTW9ub3RvbmljVGltZTo6bm93
KCkKLXsKLSAgICByZXR1cm4gZnJvbVJhd1NlY29uZHMobW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCkpOwotfQotCi1XYWxsVGltZSBNb25vdG9uaWNUaW1lOjphcHByb3hpbWF0ZVdhbGxUaW1l
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKnRoaXMgLSBub3coKSArIFdhbGxUaW1lOjpub3coKTsK
LX0KLQotdm9pZCBNb25vdG9uaWNUaW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17
Ci0gICAgb3V0LnByaW50KCJNb25vdG9uaWMoIiwgbV92YWx1ZSwgIiBzZWMpIik7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdURgotCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9Nb25vdG9uaWNUaW1lLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvTW9ub3RvbmljVGltZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGM0
N2VkMmMyNjA2OGY3MzMxOTQ2OTIxYmZhODIwMDY1ZDFjYjVhLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L3d0Zi9Nb25vdG9uaWNUaW1lLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFdURl9N
b25vdG9uaWNUaW1lX2gKLSNkZWZpbmUgV1RGX01vbm90b25pY1RpbWVfaAotCi0jaW5jbHVkZSA8
d3RmL0Nsb2NrVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+Ci0KLW5hbWVzcGFjZSBX
VEYgewotCi1jbGFzcyBXYWxsVGltZTsKLWNsYXNzIFByaW50U3RyZWFtOwotCi0vLyBUaGUgY3Vy
cmVudCB0aW1lIGFjY29yZGluZyB0byBhIG1vbm90b25pYyBjbG9jay4gTW9ub3RvbmljIGNsb2Nr
cyBkb24ndCBnbyBiYWNrd2FyZHMgYW5kCi0vLyBwb3NzaWJseSBkb24ndCBjb3VudCBkb3dudGlt
ZS4gVGhpcyB1c2VzIGZsb2F0aW5nIHBvaW50IGludGVybmFsbHkgc28gdGhhdCB5b3UgY2FuIHJl
YXNvbiBhYm91dAotLy8gaW5maW5pdHkgYW5kIG90aGVyIHRoaW5ncyB0aGF0IGFyaXNlIGluIG1h
dGguIEl0J3MgYWNjZXB0YWJsZSB0byB1c2UgdGhpcyB0byB3cmFwIE5hTiB0aW1lcywKLS8vIG5l
Z2F0aXZlIHRpbWVzLCBhbmQgaW5maW5pdGUgdGltZXMsIHNvIGxvbmcgYXMgdGhleSBhcmUgYWxs
IHJlbGF0aXZlIHRvIHRoZSBzYW1lIGNsb2NrLgotLy8gU3BlY2lmaWNhbGx5LCBNb25vdG9uaWNU
aW1lIHNob3VsZCBiZSB1c2VkIGluIGFncmVlbWVudCB3aXRoIHRoZSBwcmluY2lwbGUgdGhhdAot
Ly8gTW9ub3RvbmljVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIGlzIHRo
ZSBzYW1lIGFzCi0vLyBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLgotY2xhc3Mg
TW9ub3RvbmljVGltZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IENsb2NrVHlwZSBjbG9j
a1R5cGUgPSBDbG9ja1R5cGU6Ok1vbm90b25pYzsKLSAgICAKLSAgICAvLyBUaGlzIGlzIHRoZSBl
cG9jaC4gU28sIHguc2Vjb25kc1NpbmNlRXBvY2goKSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgeCAt
IE1vbm90b25pY1RpbWUoKS4KLSAgICBjb25zdGV4cHIgTW9ub3RvbmljVGltZSgpIHsgfQotICAg
IAotICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyBmb3Igc3VyZSB0aGF0IHRoZSBkb3VibGUg
cmVwcmVzZW50cyB0aW1lIGFjY29yZGluZyB0bwotICAgIC8vIFdURjo6bW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCkuIEl0IG11c3QgYmUgaW4gc2Vjb25kcyBhbmQgaXQgbXVzdCBiZSBmcm9t
IHRoZSBzYW1lIHRpbWUKLSAgICAvLyBzb3VyY2UuCi0gICAgc3RhdGljIGNvbnN0ZXhwciBNb25v
dG9uaWNUaW1lIGZyb21SYXdTZWNvbmRzKGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBNb25vdG9uaWNUaW1lKHZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBNb25vdG9uaWNUaW1lIG5vdygpOwotICAgIAotICAgIHN0YXRpYyBjb25z
dGV4cHIgTW9ub3RvbmljVGltZSBpbmZpbml0eSgpIHsgcmV0dXJuIGZyb21SYXdTZWNvbmRzKHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSk7IH0KLSAgICBzdGF0aWMgY29u
c3RleHByIE1vbm90b25pY1RpbWUgbmFuKCkgeyByZXR1cm4gZnJvbVJhd1NlY29uZHMoc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSk7IH0KLQotICAgIGNvbnN0ZXhwciBT
ZWNvbmRzIHNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QgeyByZXR1cm4gU2Vjb25kcyhtX3ZhbHVl
KTsgfQotICAgIAotICAgIE1vbm90b25pY1RpbWUgYXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkg
Y29uc3QgeyByZXR1cm4gKnRoaXM7IH0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgV2FsbFRpbWUg
YXBwcm94aW1hdGVXYWxsVGltZSgpIGNvbnN0OwotICAgIAotICAgIGV4cGxpY2l0IGNvbnN0ZXhw
ciBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9Ci0gICAgCi0gICAg
Y29uc3RleHByIE1vbm90b25pY1RpbWUgb3BlcmF0b3IrKFNlY29uZHMgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gZnJvbVJhd1NlY29uZHMobV92YWx1ZSArIG90aGVyLnZhbHVl
KCkpOwotICAgIH0KLSAgICAKLSAgICBjb25zdGV4cHIgTW9ub3RvbmljVGltZSBvcGVyYXRvci0o
U2Vjb25kcyBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBmcm9tUmF3U2Vjb25k
cyhtX3ZhbHVlIC0gb3RoZXIudmFsdWUoKSk7Ci0gICAgfQotCi0gICAgU2Vjb25kcyBvcGVyYXRv
ciUoU2Vjb25kcyBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBTZWNvbmRzIHsg
Zm1vZChtX3ZhbHVlLCBvdGhlci52YWx1ZSgpKSB9OwotICAgIH0KLSAgICAKLSAgICAvLyBUaW1l
IGlzIGEgc2NhbGFyIGFuZCBzY2FsYXJzIGNhbiBiZSBuZWdhdGVkIGFzIHRoaXMgY291bGQgYXJp
c2UgZnJvbSBhbGdlYnJhaWMKLSAgICAvLyB0cmFuc2Zvcm1hdGlvbnMuIFNvLCB3ZSBhbGxvdyBp
dC4KLSAgICBjb25zdGV4cHIgTW9ub3RvbmljVGltZSBvcGVyYXRvci0oKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZyb21SYXdTZWNvbmRzKC1tX3ZhbHVlKTsKLSAgICB9Ci0gICAgCi0g
ICAgTW9ub3RvbmljVGltZSBvcGVyYXRvcis9KFNlY29uZHMgb3RoZXIpCi0gICAgewotICAgICAg
ICByZXR1cm4gKnRoaXMgPSAqdGhpcyArIG90aGVyOwotICAgIH0KLSAgICAKLSAgICBNb25vdG9u
aWNUaW1lIG9wZXJhdG9yLT0oU2Vjb25kcyBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiAq
dGhpcyA9ICp0aGlzIC0gb3RoZXI7Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBTZWNvbmRz
IG9wZXJhdG9yLShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIFNlY29uZHMobV92YWx1ZSAtIG90aGVyLm1fdmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOwotICAgIH0KLSAgICAK
LSAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KE1vbm90b25pY1RpbWUgb3RoZXIpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOwotICAgIH0K
LSAgICAKLSAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoTW9ub3RvbmljVGltZSBvdGhlcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlIDwgb3RoZXIubV92YWx1ZTsKLSAg
ICB9Ci0gICAgCi0gICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KE1vbm90b25pY1RpbWUgb3Ro
ZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7
Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oTW9ub3RvbmljVGlt
ZSBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlIDw9IG90aGVyLm1f
dmFsdWU7Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oTW9ub3Rv
bmljVGltZSBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlID49IG90
aGVyLm1fdmFsdWU7Ci0gICAgfQotICAgIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBjb25zdGV4cHIgTW9ub3Rv
bmljVGltZShkb3VibGUgcmF3VmFsdWUpCi0gICAgICAgIDogbV92YWx1ZShyYXdWYWx1ZSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgZG91YmxlIG1fdmFsdWUgeyAwIH07Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXVEYKLQotbmFtZXNwYWNlIHN0ZCB7Ci0KLWlubGluZSBib29sIGlzbmFuKFdURjo6TW9u
b3RvbmljVGltZSB0aW1lKQotewotICAgIHJldHVybiBzdGQ6OmlzbmFuKHRpbWUuc2Vjb25kc1Np
bmNlRXBvY2goKS52YWx1ZSgpKTsKLX0KLQotaW5saW5lIGJvb2wgaXNpbmYoV1RGOjpNb25vdG9u
aWNUaW1lIHRpbWUpCi17Ci0gICAgcmV0dXJuIHN0ZDo6aXNpbmYodGltZS5zZWNvbmRzU2luY2VF
cG9jaCgpLnZhbHVlKCkpOwotfQotCi1pbmxpbmUgYm9vbCBpc2Zpbml0ZShXVEY6Ok1vbm90b25p
Y1RpbWUgdGltZSkKLXsKLSAgICByZXR1cm4gc3RkOjppc2Zpbml0ZSh0aW1lLnNlY29uZHNTaW5j
ZUVwb2NoKCkudmFsdWUoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIHN0ZAotCi11c2luZyBXVEY6
Ok1vbm90b25pY1RpbWU7Ci0KLSNlbmRpZiAvLyBXVEZfTW9ub3RvbmljVGltZV9oCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTmV2ZXJEZXN0cm95ZWQuaCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9OZXZlckRlc3Ryb3llZC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjAyZDcyZTgwNWMwNDM3NDJhMGJjOGRmNTljMWI2
ZTY0NDZlYjU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9OZXZlckRlc3Ryb3llZC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotCi0vLyBOZXZlckRlc3Ryb3llZCBpcyBhIHNtYXJ0LXBvaW50
ZXItbGlrZSBjbGFzcyB0aGF0IGVuc3VyZXMgdGhhdCB0aGUgZGVzdHJ1Y3RvcgotLy8gZm9yIHRo
ZSBnaXZlbiBvYmplY3QgaXMgbmV2ZXIgY2FsbGVkLCBidXQgZG9lc24ndCB1c2UgdGhlIGhlYXAg
dG8gYWxsb2NhdGUgaXQuCi0vLyBJdCdzIHVzZWZ1bCBmb3Igc3RhdGljIGxvY2FsIHZhcmlhYmxl
cywgYW5kIGNhbiBiZSB1c2VkIGxpa2Ugc286Ci0vLwotLy8gTXlTaGFyZWRHbG9iYWwmIG15U2hh
cmVkR2xvYmFsKCkKLS8vIHsKLS8vICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE15U2hhcmVkR2xv
YmFsPiBteUdsb2JhbCgiSGVsbG8iLCA0Mik7Ci0vLyAgIHJldHVybiBteUdsb2JhbDsKLS8vIH0K
LQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIE5ldmVyRGVz
dHJveWVkIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOZXZlckRlc3Ryb3llZCk7Ci0KLXB1
YmxpYzoKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiBOZXZlckRlc3Ryb3llZChBcmdz
JiYuLi4gYXJncykKLSAgICB7Ci0gICAgICAgIE1heWJlUmVsYXg8VD4obmV3IChzdG9yYWdlUG9p
bnRlcigpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOwotICAgIH0KLQotICAgIG9w
ZXJhdG9yIFQmKCkgeyByZXR1cm4gKnN0b3JhZ2VQb2ludGVyKCk7IH0KLSAgICBUJiBnZXQoKSB7
IHJldHVybiAqc3RvcmFnZVBvaW50ZXIoKTsgfQotCi0gICAgb3BlcmF0b3IgY29uc3QgVCYoKSBj
b25zdCB7IHJldHVybiAqc3RvcmFnZVBvaW50ZXIoKTsgfQotICAgIGNvbnN0IFQmIGdldCgpIGNv
bnN0IHsgcmV0dXJuICpzdG9yYWdlUG9pbnRlcigpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdXNpbmcg
UG9pbnRlclR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZSo7Ci0KLSAg
ICBQb2ludGVyVHlwZSBzdG9yYWdlUG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
UG9pbnRlclR5cGU+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KCZtX3N0b3JhZ2UpKTsgfQot
Ci0gICAgLy8gRklYTUU6IEludmVzdGlnYXRlIHdoZXRoZXIgd2Ugc2hvdWxkIGFsbG9jYXRlIGEg
aHVuayBvZiB2aXJ0dWFsIG1lbW9yeQotICAgIC8vIGFuZCBoYW5kIG91dCBjaHVua3Mgb2YgaXQg
dG8gTmV2ZXJEZXN0cm95ZWQgaW5zdGVhZCwgdG8gcmVkdWNlIGZyYWdtZW50YXRpb24uCi0gICAg
dHlwZW5hbWUgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKFQpLCBzdGQ6OmFsaWdubWVudF9v
ZjxUPjo6dmFsdWU+Ojp0eXBlIG1fc3RvcmFnZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFB0
clR5cGUsIGJvb2wgU2hvdWxkUmVsYXggPSBzdGQ6OmlzX2Jhc2Vfb2Y8UmVmQ291bnRlZEJhc2Us
IFB0clR5cGU+Ojp2YWx1ZT4gc3RydWN0IE1heWJlUmVsYXggewotICAgICAgICBleHBsaWNpdCBN
YXliZVJlbGF4KFB0clR5cGUqKSB7IH0KLSAgICB9OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFB0
clR5cGU+IHN0cnVjdCBNYXliZVJlbGF4PFB0clR5cGUsIHRydWU+IHsKLSAgICAgICAgZXhwbGlj
aXQgTWF5YmVSZWxheChQdHJUeXBlKiBwdHIpIHsgcHRyLT5yZWxheEFkb3B0aW9uUmVxdWlyZW1l
bnQoKTsgfQotICAgIH07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBOZXZlckRlc3Ryb3ll
ZDxUPiBtYWtlTmV2ZXJEZXN0cm95ZWQoVCYmKTsKLQotLy8gRklYTUU6IEl0J3MgbWVzc3kgdG8g
aGF2ZSB0byByZXBlYXQgdGhlIHdob2xlIGNsYXNzIGp1c3QgdG8gbWFrZSB0aGlzICJsYXp5IiB2
ZXJzaW9uLgotLy8gU2hvdWxkIHJldmlzaXQgY2xpZW50cyB0byBzZWUgaWYgd2UgcmVhbGx5IG5l
ZWQgdGhpcywgYW5kIHBlcmhhcHMgdXNlIHRlbXBsYXRlcyB0bwotLy8gc2hhcmUgbW9yZSBvZiB0
aGUgY29kZSB3aXRoIHRoZSBtYWluIE5ldmVyRGVzdHJveWVkIGFib3ZlLgotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY2xhc3MgTGF6eU5ldmVyRGVzdHJveWVkIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShMYXp5TmV2ZXJEZXN0cm95ZWQpOwotCi1wdWJsaWM6Ci0gICAgTGF6eU5ldmVyRGVzdHJv
eWVkKCkgPSBkZWZhdWx0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLSAgICB2
b2lkIGNvbnN0cnVjdChBcmdzJiYuLi4gYXJncykKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9p
c0NvbnN0cnVjdGVkKTsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgICAgIG1faXNDb25zdHJ1
Y3RlZCA9IHRydWU7Ci0jZW5kaWYKLQotICAgICAgICBNYXliZVJlbGF4PFQ+KG5ldyAoc3RvcmFn
ZVBvaW50ZXIoKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsKLSAgICB9Ci0KLSAg
ICBvcGVyYXRvciBUJigpIHsgcmV0dXJuICpzdG9yYWdlUG9pbnRlcigpOyB9Ci0gICAgVCYgZ2V0
KCkgeyByZXR1cm4gKnN0b3JhZ2VQb2ludGVyKCk7IH0KLQotICAgIFQqIG9wZXJhdG9yLT4oKSB7
IHJldHVybiBzdG9yYWdlUG9pbnRlcigpOyB9Ci0KLSAgICBvcGVyYXRvciBjb25zdCBUJigpIGNv
bnN0IHsgcmV0dXJuICpzdG9yYWdlUG9pbnRlcigpOyB9Ci0gICAgY29uc3QgVCYgZ2V0KCkgY29u
c3QgeyByZXR1cm4gKnN0b3JhZ2VQb2ludGVyKCk7IH0KLQotICAgIGNvbnN0IFQqIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiBzdG9yYWdlUG9pbnRlcigpOyB9Ci0KLXByaXZhdGU6Ci0gICAg
dXNpbmcgUG9pbnRlclR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZSo7
Ci0KLSAgICBQb2ludGVyVHlwZSBzdG9yYWdlUG9pbnRlcigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQobV9pc0NvbnN0cnVjdGVkKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UG9p
bnRlclR5cGU+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KCZtX3N0b3JhZ2UpKTsKLSAgICB9
Ci0KLSAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgd2hldGhlciB3ZSBzaG91bGQgYWxsb2NhdGUg
YSBodW5rIG9mIHZpcnR1YWwgbWVtb3J5Ci0gICAgLy8gYW5kIGhhbmQgb3V0IGNodW5rcyBvZiBp
dCB0byBOZXZlckRlc3Ryb3llZCBpbnN0ZWFkLCB0byByZWR1Y2UgZnJhZ21lbnRhdGlvbi4KLSAg
ICB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2YoVCksIHN0ZDo6YWxpZ25tZW50
X29mPFQ+Ojp2YWx1ZT46OnR5cGUgbV9zdG9yYWdlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
UHRyVHlwZSwgYm9vbCBTaG91bGRSZWxheCA9IHN0ZDo6aXNfYmFzZV9vZjxSZWZDb3VudGVkQmFz
ZSwgUHRyVHlwZT46OnZhbHVlPiBzdHJ1Y3QgTWF5YmVSZWxheCB7Ci0gICAgICAgIGV4cGxpY2l0
IE1heWJlUmVsYXgoUHRyVHlwZSopIHsgfQotICAgIH07Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
UHRyVHlwZT4gc3RydWN0IE1heWJlUmVsYXg8UHRyVHlwZSwgdHJ1ZT4gewotICAgICAgICBleHBs
aWNpdCBNYXliZVJlbGF4KFB0clR5cGUqIHB0cikgeyBwdHItPnJlbGF4QWRvcHRpb25SZXF1aXJl
bWVudCgpOyB9Ci0gICAgfTsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgLy8gTGF6eU5ldmVy
RGVzdHJveWVkIG9iamVjdHMgYXJlIGFsd2F5cyBzdGF0aWMsIHNvIHRoaXMgdmFyaWFibGUgaXMg
aW5pdGlhbGl6ZWQgdG8gZmFsc2UuCi0gICAgLy8gSXQgbXVzdCBub3QgYmUgaW5pdGlhbGl6ZWQg
ZHluYW1pY2FsbHk7IHRoYXQgd291bGQgbm90IGJlIHRocmVhZCBzYWZlLgotICAgIGJvb2wgbV9p
c0NvbnN0cnVjdGVkOwotI2VuZGlmCi19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
TmV2ZXJEZXN0cm95ZWQ8VD4gbWFrZU5ldmVyRGVzdHJveWVkKFQmJiBhcmd1bWVudCkKLXsKLSAg
ICByZXR1cm4gV1RGTW92ZShhcmd1bWVudCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURjsKLQot
dXNpbmcgV1RGOjpMYXp5TmV2ZXJEZXN0cm95ZWQ7Ci11c2luZyBXVEY6Ok5ldmVyRGVzdHJveWVk
OwotdXNpbmcgV1RGOjptYWtlTmV2ZXJEZXN0cm95ZWQ7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTm9uY29weWFibGUuaCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi9Ob25jb3B5YWJsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyMzdiNTNiY2IxNjlhYTRiNTRlNjNhMTRmMzc0YjIxMjMxZmFmZmE5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi9Ob25jb3B5YWJsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBXVEZfTm9uY29weWFibGVfaAotI2Rl
ZmluZSBXVEZfTm9uY29weWFibGVfaAotCi0jZGVmaW5lIFdURl9NQUtFX05PTkNPUFlBQkxFKENs
YXNzTmFtZSkgXAotICAgIHByaXZhdGU6IFwKLSAgICAgICAgQ2xhc3NOYW1lKGNvbnN0IENsYXNz
TmFtZSYpID0gZGVsZXRlOyBcCi0gICAgICAgIENsYXNzTmFtZSYgb3BlcmF0b3I9KGNvbnN0IENs
YXNzTmFtZSYpID0gZGVsZXRlOyBcCi0KLSNlbmRpZiAvLyBXVEZfTm9uY29weWFibGVfaApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL05vdEZvdW5kLmggYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTm90Rm91bmQuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTA0YmNiYTkzNGQ4ZDZkYmI1Yjg5NTAzMDE4N2ViZGUyMDk1Njlm
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvTm90Rm91bmQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIFdURiB7
Ci0KLWNvbnN0ZXhwciBzaXplX3Qgbm90Rm91bmQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKTsK
LQotfQotCi11c2luZyBXVEY6Om5vdEZvdW5kOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL09wdGlvbmFsLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvT3B0aW9uYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAyNmUx
ZmZiMDM0YTkzYjczMTdiMzc0YjY0MjMwMDI2NTgwOGViZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93
dGYvT3B0aW9uYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMTggKzAsMCBAQAotLy8gQ29weXJp
Z2h0IChDKSAyMDExIC0gMjAxMiBBbmRyemVqIEtyemVtaWVuc2tpLgotLy8KLS8vIFVzZSwgbW9k
aWZpY2F0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3
YXJlCi0vLyBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNF
TlNFXzFfMC50eHQgb3IgY29weSBhdAotLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8x
XzAudHh0KQotLy8KLS8vIFRoZSBpZGVhIGFuZCBpbnRlcmZhY2UgaXMgYmFzZWQgb24gQm9vc3Qu
T3B0aW9uYWwgbGlicmFyeQotLy8gYXV0aG9yZWQgYnkgRmVybmFuZG8gTHVpcyBDYWNjaW9sYSBD
YXJiYWxsYWwKLS8vCi0vLyBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBB
dWd1c3QgMTd0aCwgMjAwMwotLy8KLS8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy
ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgotLy8gb2J0YWluaW5n
IGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNv
dmVyZWQgYnkKLS8vIHRoaXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9k
dWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAotLy8gZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBT
b2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKLS8vIFNvZnR3
YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMg
ZnVybmlzaGVkIHRvCi0vLyBkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKLS8v
Ci0vLyBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGly
ZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwotLy8gdGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMg
cmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKLS8vIG11c3QgYmUgaW5j
bHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQs
IGFuZAotLy8gYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3Vj
aCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQotLy8gd29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBv
ZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5Ci0vLyBhIHNvdXJj
ZSBsYW5ndWFnZSBwcm9jZXNzb3IuCi0vLwotLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB
UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLS8vIElNUExJ
RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZLAotLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFO
RCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAotLy8gU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFIEJFIExJQUJMRQotLy8g
Rk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
VE9SVCBPUiBPVEhFUldJU0UsCi0vLyBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU
SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKLS8vIERFQUxJTkdTIElO
IFRIRSBTT0ZUV0FSRS4KLQotLy8gQ29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Frcnpl
bWkxL09wdGlvbmFsICg4NDU2YzM5MjM3NzZiMzNiNGFlODUyNzM0MjczZmU5MzRjM2U0ZTYxKQot
Ci0vLyBNb2RpZmllZCB0byBtYWtlIGl0IGNvbXBpbGUgd2l0aCBleGNlcHRpb25zIGRpc2FibGVk
LgotCi0jcHJhZ21hIG9uY2UKLQotIyBpbmNsdWRlIDx1dGlsaXR5PgotIyBpbmNsdWRlIDx0eXBl
X3RyYWl0cz4KLSMgaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KLSMgaW5jbHVkZSA8Y2Fzc2Vy
dD4KLSMgaW5jbHVkZSA8c3RyaW5nPgotIyBpbmNsdWRlIDxzdGRleGNlcHQ+Ci0jIGluY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0jIGluY2x1ZGUgPHd0Zi9Db21waWxlci5oPgotIyBpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLSMgZGVmaW5lIFRSMl9PUFRJT05BTF9SRVFVSVJFUygu
Li4pIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPF9fVkFfQVJHU19fOjp2YWx1ZSwgYm9vbD46OnR5
cGUgPSBmYWxzZQotCi0jIGlmIGRlZmluZWQgX19HTlVDX18gLy8gTk9URTogR05VQyBpcyBhbHNv
IGRlZmluZWQgZm9yIENsYW5nCi0jICAgaWYgKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlO
T1JfXyA+PSA4KQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84X0FORF9ISUdIRVJf
X18KLSMgICBlbGlmIChfX0dOVUNfXyA+IDQpCi0jICAgICBkZWZpbmUgVFIyX09QVElPTkFMX0dD
Q180XzhfQU5EX0hJR0hFUl9fXwotIyAgIGVuZGlmCi0jCi0jICAgaWYgKF9fR05VQ19fID09IDQp
ICYmIChfX0dOVUNfTUlOT1JfXyA+PSA3KQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0Nf
NF83X0FORF9ISUdIRVJfX18KLSMgICBlbGlmIChfX0dOVUNfXyA+IDQpCi0jICAgICBkZWZpbmUg
VFIyX09QVElPTkFMX0dDQ180XzdfQU5EX0hJR0hFUl9fXwotIyAgIGVuZGlmCi0jCi0jICAgaWYg
KF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA9PSA4KSAmJiAoX19HTlVDX1BBVENI
TEVWRUxfXyA+PSAxKQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJ
R0hFUl9fXwotIyAgIGVsaWYgKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSA5
KQotIyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJR0hFUl9fXwotIyAg
IGVsaWYgKF9fR05VQ19fID4gNCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfR0NDXzRfOF8x
X0FORF9ISUdIRVJfX18KLSMgICBlbmRpZgotIyBlbmRpZgotIwotIyBpZiBkZWZpbmVkIF9fY2xh
bmdfbWFqb3JfXwotIyAgIGlmIChfX2NsYW5nX21ham9yX18gPT0gMyAmJiBfX2NsYW5nX21pbm9y
X18gPj0gNSkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfQ0xBTkdfM181X0FORF9ISUdIVEVS
XwotIyAgIGVsaWYgKF9fY2xhbmdfbWFqb3JfXyA+IDMpCi0jICAgICBkZWZpbmUgVFIyX09QVElP
TkFMX0NMQU5HXzNfNV9BTkRfSElHSFRFUl8KLSMgICBlbmRpZgotIyAgIGlmIGRlZmluZWQgVFIy
X09QVElPTkFMX0NMQU5HXzNfNV9BTkRfSElHSFRFUl8KLSMgICAgIGRlZmluZSBUUjJfT1BUSU9O
QUxfQ0xBTkdfM180XzJfQU5EX0hJR0hFUl8KLSMgICBlbGlmIChfX2NsYW5nX21ham9yX18gPT0g
MyAmJiBfX2NsYW5nX21pbm9yX18gPT0gNCAmJiBfX2NsYW5nX3BhdGNobGV2ZWxfXyA+PSAyKQot
IyAgICAgZGVmaW5lIFRSMl9PUFRJT05BTF9DTEFOR18zXzRfMl9BTkRfSElHSEVSXwotIyAgIGVu
ZGlmCi0jIGVuZGlmCi0jCi0jIGlmIGRlZmluZWQgX01TQ19WRVIKLSMgICBpZiAoX01TQ19WRVIg
Pj0gMTkwMCkKLSMgICAgIGRlZmluZSBUUjJfT1BUSU9OQUxfTVNWQ18yMDE1X0FORF9ISUdIRVJf
X18KLSMgICBlbmRpZgotIyBlbmRpZgotCi0jIGlmIGRlZmluZWQgX19jbGFuZ19fCi0jICAgaWYg
KF9fY2xhbmdfbWFqb3JfXyA+IDIpIHx8IChfX2NsYW5nX21ham9yX18gPT0gMikgJiYgKF9fY2xh
bmdfbWlub3JfXyA+PSA5KQotIyAgICAgZGVmaW5lIE9QVElPTkFMX0hBU19USElTX1JWQUxVRV9S
RUZTIDEKLSMgICBlbHNlCi0jICAgICBkZWZpbmUgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVFX1JF
RlMgMAotIyAgIGVuZGlmCi0jIGVsaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxfR0NDXzRfOF8xX0FO
RF9ISUdIRVJfX18KLSMgICBkZWZpbmUgT1BUSU9OQUxfSEFTX1RISVNfUlZBTFVFX1JFRlMgMQot
IyBlbGlmIGRlZmluZWQgVFIyX09QVElPTkFMX01TVkNfMjAxNV9BTkRfSElHSEVSX19fCi0jICAg
ZGVmaW5lIE9QVElPTkFMX0hBU19USElTX1JWQUxVRV9SRUZTIDEKLSMgZWxzZQotIyAgIGRlZmlu
ZSBPUFRJT05BTF9IQVNfVEhJU19SVkFMVUVfUkVGUyAwCi0jIGVuZGlmCi0KLQotIyBpZiBkZWZp
bmVkIFRSMl9PUFRJT05BTF9HQ0NfNF84XzFfQU5EX0hJR0hFUl9fXwotIyAgIGRlZmluZSBPUFRJ
T05BTF9IQVNfQ09OU1RFWFBSX0lOSVRfTElTVCAxCi0jICAgZGVmaW5lIE9QVElPTkFMX0NPTlNU
RVhQUl9JTklUX0xJU1QgY29uc3RleHByCi0jIGVsc2UKLSMgICBkZWZpbmUgT1BUSU9OQUxfSEFT
X0NPTlNURVhQUl9JTklUX0xJU1QgMAotIyAgIGRlZmluZSBPUFRJT05BTF9DT05TVEVYUFJfSU5J
VF9MSVNUCi0jIGVuZGlmCi0KLS8vIEZJWE1FOiBUbyBtYWtlIHRoZSByZXN1bHQgb2YgdmFsdWUo
KSB0eXBlIGNvbnNpc3RlbnQgYW1vbmcgdGhlIGNvbXBpbGVycywgd2Ugbm93IGludGVudGlvbmFs
bHkgZGlzYWJsZXMgbW92ZSBhY2Nlc3NvcnMuCi0jICAgZGVmaW5lIE9QVElPTkFMX0hBU19NT1ZF
X0FDQ0VTU09SUyAwCi0vLyAjIGlmIGRlZmluZWQgVFIyX09QVElPTkFMX0NMQU5HXzNfNV9BTkRf
SElHSFRFUl8gJiYgKGRlZmluZWQgX19jcGx1c3BsdXMpICYmIChfX2NwbHVzcGx1cyAhPSAyMDEx
MDNMKQotLy8gIyAgIGRlZmluZSBPUFRJT05BTF9IQVNfTU9WRV9BQ0NFU1NPUlMgMQotLy8gIyBl
bHNlCi0vLyAjICAgZGVmaW5lIE9QVElPTkFMX0hBU19NT1ZFX0FDQ0VTU09SUyAwCi0vLyAjIGVu
ZGlmCi0KLSMgLy8gSW4gQysrMTEgY29uc3RleHByIGltcGxpZXMgY29uc3QsIHNvIHdlIG5lZWQg
dG8gbWFrZSBub24tY29uc3QgbWVtYmVycyBhbHNvIG5vbi1jb25zdGV4cHIKLSMgaWYgKGRlZmlu
ZWQgX19jcGx1c3BsdXMpICYmIChfX2NwbHVzcGx1cyA9PSAyMDExMDNMKQotIyAgIGRlZmluZSBP
UFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUgotIyBlbHNlCi0jICAgZGVmaW5lIE9QVElPTkFMX01V
VEFCTEVfQ09OU1RFWFBSIGNvbnN0ZXhwcgotIyBlbmRpZgotCi0jaWYgQ09NUElMRVJfU1VQUE9S
VFMoRVhDRVBUSU9OUykKLSNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIHRo
cm93IF9fZXhjZXB0aW9uOwotI2RlZmluZSBfX05PRVhDRVBUIG5vZXhjZXB0Ci0jZGVmaW5lIF9f
Tk9FWENFUFRfKF9fZXhjZXB0aW9uKSBub2V4Y2VwdChfX2V4Y2VwdGlvbikKLSNlbHNlCi0jZGVm
aW5lIF9fVEhST1dfRVhDRVBUSU9OKF9fZXhjZXB0aW9uKSBkbyB7ICh2b2lkKV9fZXhjZXB0aW9u
OyBDUkFTSCgpOyB9IHdoaWxlICgwKTsKLSNkZWZpbmUgX19OT0VYQ0VQVAotI2RlZmluZSBfX05P
RVhDRVBUXyguLi4pCi0jZW5kaWYKLQotbmFtZXNwYWNlIHN0ZCB7Ci1uYW1lc3BhY2UgZGV0YWls
XyB7Ci0KLS8vIE5PVEU6IEFsbCBvdXIgdGFyZ2V0IGNvbXBpbGVycyBzdXBwb3J0IGlzX3RyaXZp
YWxseV9kZXN0cnVjdGlibGUuCi0vLyAvLyBCRUdJTiB3b3JrYXJvdW5kIGZvciBtaXNzaW5nIGlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGUKLS8vICMgaWYgZGVmaW5lZCBUUjJfT1BUSU9OQUxfR0ND
XzRfOF9BTkRfSElHSEVSX19fCi0vLyAgICAgLy8gbGVhdmUgaXQ6IGl0IGlzIGFscmVhZHkgdGhl
cmUKLS8vICMgZWxpZiBkZWZpbmVkIFRSMl9PUFRJT05BTF9DTEFOR18zXzRfMl9BTkRfSElHSEVS
XwotLy8gICAgIC8vIGxlYXZlIGl0OiBpdCBpcyBhbHJlYWR5IHRoZXJlCi0vLyAjIGVsaWYgZGVm
aW5lZCBUUjJfT1BUSU9OQUxfTVNWQ18yMDE1X0FORF9ISUdIRVJfX18KLS8vICAgICAvLyBsZWF2
ZSBpdDogaXQgaXMgYWxyZWFkeSB0aGVyZQotLy8gIyBlbGlmIGRlZmluZWQgVFIyX09QVElPTkFM
X0RJU0FCTEVfRU1VTEFUSU9OX09GX1RZUEVfVFJBSVRTCi0vLyAgICAgLy8gbGVhdmUgaXQ6IHRo
ZSB1c2VyIGRvZXNuJ3Qgd2FudCBpdAotLy8gIyBlbHNlCi0vLyAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci0vLyAgICAgdXNpbmcgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZSA9IHN0ZDo6aGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjxUPjsKLS8vICMgZW5kaWYKLS8vIC8vIEVORCB3b3JrYXJvdW5k
IGZvciBtaXNzaW5nIGlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGUKLQotI2lmIENPTVBJTEVSX1NV
UFBPUlRTKEVYQ0VQVElPTlMpCi0jIGlmIGRlZmluZWQoVFIyX09QVElPTkFMX0dDQ180XzdfQU5E
X0hJR0hFUl9fXykgfHwgZGVmaW5lZChUUjJfT1BUSU9OQUxfQ0xBTkdfM180XzJfQU5EX0hJR0hF
Ul8pIHx8IGRlZmluZWQoVFIyX09QVElPTkFMX01TVkNfMjAxNV9BTkRfSElHSEVSX19fKQotICAg
IC8vIGxlYXZlIGl0OyBvdXIgbWV0YWZ1bmN0aW9ucyBhcmUgYWxyZWFkeSBkZWZpbmVkLgotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHVzaW5nIGlzX25vdGhyb3dfbW92ZV9jb25zdHJ1
Y3RpYmxlID0gc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxUPjsKLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KLSAgICB1c2luZyBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZSA9
IHN0ZDo6aXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8VD47Ci0jIGVsaWYgZGVmaW5lZCBUUjJf
T1BUSU9OQUxfRElTQUJMRV9FTVVMQVRJT05fT0ZfVFlQRV9UUkFJVFMKLSAgICAvLyBsZWF2ZSBp
dDogdGhlIHVzZXIgZG9lc24ndCB3YW50IGl0Ci0jIGVsc2UKLQotCi0vLyB3b3JrYXJvdW5kIGZv
ciBtaXNzaW5nIHRyYWl0cyBpbiBHQ0MgYW5kIENMQU5HCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0
cnVjdCBpc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZQotewotICBjb25zdGV4cHIgc3RhdGlj
IGJvb2wgdmFsdWUgPSBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxULCBUJiY+Ojp2YWx1
ZTsKLX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+Ci1zdHJ1Y3QgaXNfYXNzaWdu
YWJsZQotewotICB0ZW1wbGF0ZSA8Y2xhc3MgWCwgY2xhc3MgWT4KLSAgY29uc3RleHByIHN0YXRp
YyBib29sIGhhc19hc3NpZ24oLi4uKSB7IHJldHVybiBmYWxzZTsgfQotCi0gIHRlbXBsYXRlIDxj
bGFzcyBYLCBjbGFzcyBZLCBzaXplX3QgUyA9IHNpemVvZigoc3RkOjpkZWNsdmFsPFg+KCkgPSBz
dGQ6OmRlY2x2YWw8WT4oKSwgdHJ1ZSkpID4KLSAgLy8gdGhlIGNvbW1hIG9wZXJhdG9yIGlzIG5l
Y2Vzc2FyeSBmb3IgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9yPSByZXR1cm5zIHZvaWQKLSAgY29u
c3RleHByIHN0YXRpYyBib29sIGhhc19hc3NpZ24oYm9vbCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0g
IGNvbnN0ZXhwciBzdGF0aWMgYm9vbCB2YWx1ZSA9IGhhc19hc3NpZ248VCwgVT4odHJ1ZSk7Ci19
OwotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc3RydWN0IGlzX25vdGhyb3dfbW92ZV9hc3NpZ25h
YmxlCi17Ci0gIHRlbXBsYXRlIDxjbGFzcyBYLCBib29sIGhhc19hbnlfbW92ZV9hc3NpZ24+Ci0g
IHN0cnVjdCBoYXNfbm90aHJvd19tb3ZlX2Fzc2lnbiB7Ci0gICAgY29uc3RleHByIHN0YXRpYyBi
b29sIHZhbHVlID0gZmFsc2U7Ci0gIH07Ci0KLSAgdGVtcGxhdGUgPGNsYXNzIFg+Ci0gIHN0cnVj
dCBoYXNfbm90aHJvd19tb3ZlX2Fzc2lnbjxYLCB0cnVlPiB7Ci0gICAgY29uc3RleHByIHN0YXRp
YyBib29sIHZhbHVlID0gX19OT0VYQ0VQVF8oIHN0ZDo6ZGVjbHZhbDxYJj4oKSA9IHN0ZDo6ZGVj
bHZhbDxYJiY+KCkgKTsKLSAgfTsKLQotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBo
YXNfbm90aHJvd19tb3ZlX2Fzc2lnbjxULCBpc19hc3NpZ25hYmxlPFQmLCBUJiY+Ojp2YWx1ZT46
OnZhbHVlOwotfTsKLS8vIGVuZCB3b3JrYXJvdW5kCi0KLQotIyBlbmRpZgotI2VuZGlmCi0KLX0g
Ly8gbmFtZXNwYWNlIGRldGFpbF8KLQotLy8gMjAuNS40LCBvcHRpb25hbCBmb3Igb2JqZWN0IHR5
cGVzCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3Mgb3B0aW9uYWw7Ci0KLS8vIDIwLjUuNSwgb3B0
aW9uYWwgZm9yIGx2YWx1ZSByZWZlcmVuY2UgdHlwZXMKLXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFz
cyBvcHRpb25hbDxUJj47Ci0KLW5hbWVzcGFjZSBkZXRhaWxfIHsKLQotLy8gd29ya2Fyb3VuZDog
c3RkIHV0aWxpdHkgZnVuY3Rpb25zIGFyZW4ndCBjb25zdGV4cHIgeWV0Ci10ZW1wbGF0ZSA8Y2xh
c3MgVD4gaW5saW5lIGNvbnN0ZXhwciBUJiYgY29uc3RleHByX2ZvcndhcmQodHlwZW5hbWUgc3Rk
OjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlJiB0KSBfX05PRVhDRVBUCi17Ci0gIHJldHVybiBz
dGF0aWNfY2FzdDxUJiY+KHQpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGNvbnN0
ZXhwciBUJiYgY29uc3RleHByX2ZvcndhcmQodHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNl
PFQ+Ojp0eXBlJiYgdCkgX19OT0VYQ0VQVAotewotICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNf
bHZhbHVlX3JlZmVyZW5jZTxUPjo6dmFsdWUsICIhISIpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUJiY+KHQpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGNvbnN0ZXhwciB0eXBl
bmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUmJiBjb25zdGV4cHJfbW92ZShUJiYg
dCkgX19OT0VYQ0VQVAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdGQ6OnJl
bW92ZV9yZWZlcmVuY2U8VD46OnR5cGUmJj4odCk7Ci19Ci0KLSNpZiBkZWZpbmVkIE5ERUJVRwot
IyBkZWZpbmUgVFIyX09QVElPTkFMX0FTU0VSVEVEX0VYUFJFU1NJT04oQ0hFQ0ssIEVYUFIpIChF
WFBSKQotI2Vsc2UKLSMgZGVmaW5lIFRSMl9PUFRJT05BTF9BU1NFUlRFRF9FWFBSRVNTSU9OKENI
RUNLLCBFWFBSKSAoKENIRUNLKSA/IChFWFBSKSA6IChbXXthc3NlcnQoISNDSEVDSyk7fSgpLCAo
RVhQUikpKQotI2VuZGlmCi0KLQotLy8gc3RhdGljX2FkZHJlc3NvZjogYSBjb25zdGV4cHIgdmVy
c2lvbiBvZiBhZGRyZXNzb2YKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IGhhc19vdmVy
bG9hZGVkX2FkZHJlc3NvZgotewotICB0ZW1wbGF0ZSA8Y2xhc3MgWD4KLSAgY29uc3RleHByIHN0
YXRpYyBib29sIGhhc19vdmVybG9hZCguLi4pIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgdGVtcGxh
dGUgPGNsYXNzIFgsIHNpemVfdCBTID0gc2l6ZW9mKHN0ZDo6ZGVjbHZhbDxYJj4oKS5vcGVyYXRv
ciYoKSkgPgotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgaGFzX292ZXJsb2FkKGJvb2wpIHsgcmV0
dXJuIHRydWU7IH0KLQotICBjb25zdGV4cHIgc3RhdGljIGJvb2wgdmFsdWUgPSBoYXNfb3Zlcmxv
YWQ8VD4odHJ1ZSk7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVFIyX09QVElPTkFMX1JF
UVVJUkVTKCFoYXNfb3ZlcmxvYWRlZF9hZGRyZXNzb2Y8VD4pPgotY29uc3RleHByIFQqIHN0YXRp
Y19hZGRyZXNzb2YoVCYgcmVmKQotewotICByZXR1cm4gJnJlZjsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQsIFRSMl9PUFRJT05BTF9SRVFVSVJFUyhoYXNfb3ZlcmxvYWRlZF9hZGRyZXNzb2Y8
VD4pPgotVCogc3RhdGljX2FkZHJlc3NvZihUJiByZWYpCi17Ci0gIHJldHVybiBzdGQ6OmFkZHJl
c3NvZihyZWYpOwotfQotCi0KLS8vIHRoZSBjYWxsIHRvIGNvbnZlcnQ8QT4oYikgaGFzIHJldHVy
biB0eXBlIEEgYW5kIGNvbnZlcnRzIGIgdG8gdHlwZSBBIGlmZiBiIGRlY2x0eXBlKGIpIGlzIGlt
cGxpY2l0bHkgY29udmVydGlibGUgdG8gQQotdGVtcGxhdGUgPGNsYXNzIFU+Ci1jb25zdGV4cHIg
VSBjb252ZXJ0KFUgdikgeyByZXR1cm4gdjsgfQotCi19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQot
Ci1jb25zdGV4cHIgc3RydWN0IHRyaXZpYWxfaW5pdF90e30gdHJpdmlhbF9pbml0e307Ci0KLQot
Ly8gMjAuNS42LCBJbi1wbGFjZSBjb25zdHJ1Y3Rpb24KLWNvbnN0ZXhwciBzdHJ1Y3QgaW5fcGxh
Y2VfdHt9IGluX3BsYWNle307Ci0KLQotLy8gMjAuNS43LCBEaXNlbmdhZ2VkIHN0YXRlIGluZGlj
YXRvcgotc3RydWN0IG51bGxvcHRfdAotewotICBzdHJ1Y3QgaW5pdHt9OwotICBjb25zdGV4cHIg
ZXhwbGljaXQgbnVsbG9wdF90KGluaXQpe30KLX07Ci1jb25zdGV4cHIgbnVsbG9wdF90IG51bGxv
cHR7bnVsbG9wdF90Ojppbml0KCl9OwotCi0KLS8vIDIwLjUuOCwgY2xhc3MgYmFkX29wdGlvbmFs
X2FjY2VzcwotY2xhc3MgYmFkX29wdGlvbmFsX2FjY2VzcyA6IHB1YmxpYyBzdGQ6OmxvZ2ljX2Vy
cm9yIHsKLXB1YmxpYzoKLSAgZXhwbGljaXQgYmFkX29wdGlvbmFsX2FjY2Vzcyhjb25zdCBzdGQ6
OnN0cmluZyYgd2hhdF9hcmcpIDogc3RkOjpsb2dpY19lcnJvcnt3aGF0X2FyZ30ge30KLSAgZXhw
bGljaXQgYmFkX29wdGlvbmFsX2FjY2Vzcyhjb25zdCBjaGFyKiB3aGF0X2FyZykgOiBzdGQ6Omxv
Z2ljX2Vycm9ye3doYXRfYXJnfSB7fQotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXVuaW9u
IHN0b3JhZ2VfdAotewotICB1bnNpZ25lZCBjaGFyIGR1bW15XzsKLSAgVCB2YWx1ZV87Ci0KLSAg
Y29uc3RleHByIHN0b3JhZ2VfdCggdHJpdmlhbF9pbml0X3QgKSBfX05PRVhDRVBUIDogZHVtbXlf
KCkge307Ci0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci0gIGNvbnN0ZXhwciBzdG9yYWdl
X3QoIEFyZ3MmJi4uLiBhcmdzICkgOiB2YWx1ZV8oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8
QXJncz4oYXJncykuLi4pIHt9Ci0KLSAgfnN0b3JhZ2VfdCgpe30KLX07Ci0KLQotdGVtcGxhdGUg
PGNsYXNzIFQ+Ci11bmlvbiBjb25zdGV4cHJfc3RvcmFnZV90Ci17Ci0gICAgdW5zaWduZWQgY2hh
ciBkdW1teV87Ci0gICAgVCB2YWx1ZV87Ci0KLSAgICBjb25zdGV4cHIgY29uc3RleHByX3N0b3Jh
Z2VfdCggdHJpdmlhbF9pbml0X3QgKSBfX05PRVhDRVBUIDogZHVtbXlfKCkge307Ci0KLSAgICB0
ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KLSAgICBjb25zdGV4cHIgY29uc3RleHByX3N0b3JhZ2Vf
dCggQXJncyYmLi4uIGFyZ3MgKSA6IHZhbHVlXyhkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxB
cmdzPihhcmdzKS4uLikge30KLQotICAgIH5jb25zdGV4cHJfc3RvcmFnZV90KCkgPSBkZWZhdWx0
OwotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXN0cnVjdCBvcHRpb25hbF9iYXNlCi17Ci0g
ICAgYm9vbCBpbml0XzsKLSAgICBzdG9yYWdlX3Q8VD4gc3RvcmFnZV87Ci0KLSAgICBjb25zdGV4
cHIgb3B0aW9uYWxfYmFzZSgpIF9fTk9FWENFUFQgOiBpbml0XyhmYWxzZSksIHN0b3JhZ2VfKHRy
aXZpYWxfaW5pdCkge307Ci0KLSAgICBleHBsaWNpdCBjb25zdGV4cHIgb3B0aW9uYWxfYmFzZShj
b25zdCBUJiB2KSA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyh2KSB7fQotCi0gICAgZXhwbGljaXQg
Y29uc3RleHByIG9wdGlvbmFsX2Jhc2UoVCYmIHYpIDogaW5pdF8odHJ1ZSksIHN0b3JhZ2VfKGRl
dGFpbF86OmNvbnN0ZXhwcl9tb3ZlKHYpKSB7fQotCi0gICAgdGVtcGxhdGUgPGNsYXNzLi4uIEFy
Z3M+IGV4cGxpY2l0IG9wdGlvbmFsX2Jhc2UoaW5fcGxhY2VfdCwgQXJncyYmLi4uIGFyZ3MpCi0g
ICAgICAgIDogaW5pdF8odHJ1ZSksIHN0b3JhZ2VfKGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKSB7fQotCi0gICAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzLi4uIEFy
Z3MsIFRSMl9PUFRJT05BTF9SRVFVSVJFUyhzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgc3RkOjpp
bml0aWFsaXplcl9saXN0PFU+Pik+Ci0gICAgZXhwbGljaXQgb3B0aW9uYWxfYmFzZShpbl9wbGFj
ZV90LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWwsIEFyZ3MmJi4uLiBhcmdzKQotICAgICAg
ICA6IGluaXRfKHRydWUpLCBzdG9yYWdlXyhpbCwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KSB7fQotCi0gICAgfm9wdGlvbmFsX2Jhc2UoKSB7IGlmIChpbml0Xykgc3RvcmFnZV8udmFsdWVf
LlQ6On5UKCk7IH0KLX07Ci0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgY29uc3RleHBy
X29wdGlvbmFsX2Jhc2UKLXsKLSAgICBib29sIGluaXRfOwotICAgIGNvbnN0ZXhwcl9zdG9yYWdl
X3Q8VD4gc3RvcmFnZV87Ci0KLSAgICBjb25zdGV4cHIgY29uc3RleHByX29wdGlvbmFsX2Jhc2Uo
KSBfX05PRVhDRVBUIDogaW5pdF8oZmFsc2UpLCBzdG9yYWdlXyh0cml2aWFsX2luaXQpIHt9Owot
Ci0gICAgZXhwbGljaXQgY29uc3RleHByIGNvbnN0ZXhwcl9vcHRpb25hbF9iYXNlKGNvbnN0IFQm
IHYpIDogaW5pdF8odHJ1ZSksIHN0b3JhZ2VfKHYpIHt9Ci0KLSAgICBleHBsaWNpdCBjb25zdGV4
cHIgY29uc3RleHByX29wdGlvbmFsX2Jhc2UoVCYmIHYpIDogaW5pdF8odHJ1ZSksIHN0b3JhZ2Vf
KGRldGFpbF86OmNvbnN0ZXhwcl9tb3ZlKHYpKSB7fQotCi0gICAgdGVtcGxhdGUgPGNsYXNzLi4u
IEFyZ3M+IGV4cGxpY2l0IGNvbnN0ZXhwciBjb25zdGV4cHJfb3B0aW9uYWxfYmFzZShpbl9wbGFj
ZV90LCBBcmdzJiYuLi4gYXJncykKLSAgICAgIDogaW5pdF8odHJ1ZSksIHN0b3JhZ2VfKGRldGFp
bF86OmNvbnN0ZXhwcl9mb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQotCi0gICAgdGVtcGxhdGUg
PGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3MsIFRSMl9PUFRJT05BTF9SRVFVSVJFUyhzdGQ6OmlzX2Nv
bnN0cnVjdGlibGU8VCwgc3RkOjppbml0aWFsaXplcl9saXN0PFU+Pik+Ci0gICAgT1BUSU9OQUxf
Q09OU1RFWFBSX0lOSVRfTElTVCBleHBsaWNpdCBjb25zdGV4cHJfb3B0aW9uYWxfYmFzZShpbl9w
bGFjZV90LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWwsIEFyZ3MmJi4uLiBhcmdzKQotICAg
ICAgOiBpbml0Xyh0cnVlKSwgc3RvcmFnZV8oaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
Likge30KLQotICAgIH5jb25zdGV4cHJfb3B0aW9uYWxfYmFzZSgpID0gZGVmYXVsdDsKLX07Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPgotdXNpbmcgT3B0aW9uYWxCYXNlID0gdHlwZW5hbWUgc3RkOjpj
b25kaXRpb25hbDwKLSAgICBzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVl
LCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgcG9zc2libGUKLSAgICBjb25zdGV4cHJf
b3B0aW9uYWxfYmFzZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZT4sIC8vIHVz
ZSBiYXNlIHdpdGggdHJpdmlhbCBkZXN0cnVjdG9yCi0gICAgb3B0aW9uYWxfYmFzZTx0eXBlbmFt
ZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZT4KLT46OnR5cGU7Ci0KLQotCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4KLWNsYXNzIG9wdGlvbmFsIDogcHJpdmF0ZSBPcHRpb25hbEJhc2U8VD4KLXsKLSAg
c3RhdGljX2Fzc2VydCggIXN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBl
LCBudWxsb3B0X3Q+Ojp2YWx1ZSwgImJhZCBUIiApOwotICBzdGF0aWNfYXNzZXJ0KCAhc3RkOjpp
c19zYW1lPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGUsIGluX3BsYWNlX3Q+Ojp2YWx1ZSwg
ImJhZCBUIiApOwotCi0KLSAgY29uc3RleHByIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCBfX05P
RVhDRVBUIHsgcmV0dXJuIE9wdGlvbmFsQmFzZTxUPjo6aW5pdF87IH0KLSAgdHlwZW5hbWUgc3Rk
OjpyZW1vdmVfY29uc3Q8VD46OnR5cGUqIGRhdGFwdHIoKSB7ICByZXR1cm4gc3RkOjphZGRyZXNz
b2YoT3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV8pOyB9Ci0gIGNvbnN0ZXhwciBjb25z
dCBUKiBkYXRhcHRyKCkgY29uc3QgeyByZXR1cm4gZGV0YWlsXzo6c3RhdGljX2FkZHJlc3NvZihP
cHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfLnZhbHVlXyk7IH0KLQotIyBpZiBPUFRJT05BTF9IQVNf
VEhJU19SVkFMVUVfUkVGUyA9PSAxCi0gIGNvbnN0ZXhwciBjb25zdCBUJiBjb250YWluZWRfdmFs
KCkgY29uc3QmIHsgcmV0dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8udmFsdWVfOyB9Ci0j
ICAgaWYgT1BUSU9OQUxfSEFTX01PVkVfQUNDRVNTT1JTID09IDEKLSAgT1BUSU9OQUxfTVVUQUJM
RV9DT05TVEVYUFIgVCYmIGNvbnRhaW5lZF92YWwoKSAmJiB7IHJldHVybiBzdGQ6Om1vdmUoT3B0
aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV8pOyB9Ci0gIE9QVElPTkFMX01VVEFCTEVfQ09O
U1RFWFBSIFQmIGNvbnRhaW5lZF92YWwoKSAmIHsgcmV0dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3Rv
cmFnZV8udmFsdWVfOyB9Ci0jICAgZWxzZQotICBUJiBjb250YWluZWRfdmFsKCkgJiB7IHJldHVy
biBPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfLnZhbHVlXzsgfQotICBUJiYgY29udGFpbmVkX3Zh
bCgpICYmIHsgcmV0dXJuIHN0ZDo6bW92ZShPcHRpb25hbEJhc2U8VD46OnN0b3JhZ2VfLnZhbHVl
Xyk7IH0KLSMgICBlbmRpZgotIyBlbHNlCi0gIGNvbnN0ZXhwciBjb25zdCBUJiBjb250YWluZWRf
dmFsKCkgY29uc3QgeyByZXR1cm4gT3B0aW9uYWxCYXNlPFQ+OjpzdG9yYWdlXy52YWx1ZV87IH0K
LSAgVCYgY29udGFpbmVkX3ZhbCgpIHsgcmV0dXJuIE9wdGlvbmFsQmFzZTxUPjo6c3RvcmFnZV8u
dmFsdWVfOyB9Ci0jIGVuZGlmCi0KLSAgdm9pZCBjbGVhcigpIF9fTk9FWENFUFQgewotICAgIGlm
IChpbml0aWFsaXplZCgpKSBkYXRhcHRyKCktPlQ6On5UKCk7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+
Ojppbml0XyA9IGZhbHNlOwotICB9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci0gIHZv
aWQgaW5pdGlhbGl6ZShBcmdzJiYuLi4gYXJncykgX19OT0VYQ0VQVF8oX19OT0VYQ0VQVF8oVChz
dGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKSkKLSAgewotICAgIEFTU0VSVCghT3B0aW9uYWxC
YXNlPFQ+Ojppbml0Xyk7Ci0gICAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihkYXRhcHRyKCkp
KSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+Ojpp
bml0XyA9IHRydWU7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4K
LSAgdm9pZCBpbml0aWFsaXplKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPiBpbCwgQXJncyYmLi4u
IGFyZ3MpIF9fTk9FWENFUFRfKF9fTk9FWENFUFRfKFQoaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLikpKQotICB7Ci0gICAgQVNTRVJUKCFPcHRpb25hbEJhc2U8VD46OmluaXRfKTsKLSAg
ICA6Om5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGRhdGFwdHIoKSkpIFQoaWwsIHN0ZDo6Zm9yd2Fy
ZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgT3B0aW9uYWxCYXNlPFQ+Ojppbml0XyA9IHRydWU7Ci0g
IH0KLQotcHVibGljOgotICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKLQotICAvLyAyMC41LjUuMSwg
Y29uc3RydWN0b3JzCi0gIGNvbnN0ZXhwciBvcHRpb25hbCgpIF9fTk9FWENFUFQgOiBPcHRpb25h
bEJhc2U8VD4oKSAge307Ci0gIGNvbnN0ZXhwciBvcHRpb25hbChudWxsb3B0X3QpIF9fTk9FWENF
UFQgOiBPcHRpb25hbEJhc2U8VD4oKSB7fTsKLQotICBvcHRpb25hbChjb25zdCBvcHRpb25hbCYg
cmhzKQotICA6IE9wdGlvbmFsQmFzZTxUPigpCi0gIHsKLSAgICBpZiAocmhzLmluaXRpYWxpemVk
KCkpIHsKLSAgICAgICAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihkYXRhcHRyKCkpKSBUKCpy
aHMpOwotICAgICAgICBPcHRpb25hbEJhc2U8VD46OmluaXRfID0gdHJ1ZTsKLSAgICB9Ci0gIH0K
LQotICBvcHRpb25hbChvcHRpb25hbCYmIHJocykgX19OT0VYQ0VQVF8oZGV0YWlsXzo6aXNfbm90
aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZhbHVlKQotICA6IE9wdGlvbmFsQmFzZTxUPigp
Ci0gIHsKLSAgICBpZiAocmhzLmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgOjpuZXcgKHN0YXRp
Y19jYXN0PHZvaWQqPihkYXRhcHRyKCkpKSBUKHN0ZDo6bW92ZSgqcmhzKSk7Ci0gICAgICAgIE9w
dGlvbmFsQmFzZTxUPjo6aW5pdF8gPSB0cnVlOwotICAgIH0KLSAgfQotCi0gIGNvbnN0ZXhwciBv
cHRpb25hbChjb25zdCBUJiB2KSA6IE9wdGlvbmFsQmFzZTxUPih2KSB7fQotCi0gIGNvbnN0ZXhw
ciBvcHRpb25hbChUJiYgdikgOiBPcHRpb25hbEJhc2U8VD4oZGV0YWlsXzo6Y29uc3RleHByX21v
dmUodikpIHt9Ci0KLSAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+Ci0gIGV4cGxpY2l0IGNvbnN0
ZXhwciBvcHRpb25hbChpbl9wbGFjZV90LCBBcmdzJiYuLi4gYXJncykKLSAgOiBPcHRpb25hbEJh
c2U8VD4oaW5fcGxhY2VfdHt9LCBkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxBcmdzPihhcmdz
KS4uLikge30KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncywgVFIyX09QVElP
TkFMX1JFUVVJUkVTKHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULCBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8VT4+KT4KLSAgT1BUSU9OQUxfQ09OU1RFWFBSX0lOSVRfTElTVCBleHBsaWNpdCBvcHRpb25h
bChpbl9wbGFjZV90LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VT4gaWwsIEFyZ3MmJi4uLiBhcmdz
KQotICA6IE9wdGlvbmFsQmFzZTxUPihpbl9wbGFjZV90e30sIGlsLCBkZXRhaWxfOjpjb25zdGV4
cHJfZm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KLQotICAvLyAyMC41LjQuMiwgRGVzdHJ1Y3Rv
cgotICB+b3B0aW9uYWwoKSA9IGRlZmF1bHQ7Ci0KLSAgLy8gMjAuNS40LjMsIGFzc2lnbm1lbnQK
LSAgb3B0aW9uYWwmIG9wZXJhdG9yPShudWxsb3B0X3QpIF9fTk9FWENFUFQKLSAgewotICAgIGNs
ZWFyKCk7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgb3B0aW9uYWwmIG9wZXJhdG9yPShj
b25zdCBvcHRpb25hbCYgcmhzKQotICB7Ci0gICAgaWYgICAgICAoaW5pdGlhbGl6ZWQoKSA9PSB0
cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSkgY2xlYXIoKTsKLSAgICBlbHNlIGlm
IChpbml0aWFsaXplZCgpID09IGZhbHNlICYmIHJocy5pbml0aWFsaXplZCgpID09IHRydWUpICBp
bml0aWFsaXplKCpyaHMpOwotICAgIGVsc2UgaWYgKGluaXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYg
cmhzLmluaXRpYWxpemVkKCkgPT0gdHJ1ZSkgIGNvbnRhaW5lZF92YWwoKSA9ICpyaHM7Ci0gICAg
cmV0dXJuICp0aGlzOwotICB9Ci0KLSAgb3B0aW9uYWwmIG9wZXJhdG9yPShvcHRpb25hbCYmIHJo
cykKLSAgX19OT0VYQ0VQVF8oZGV0YWlsXzo6aXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8VD46
OnZhbHVlICYmIGRldGFpbF86OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPFQ+Ojp2YWx1
ZSkKLSAgewotICAgIGlmICAgICAgKGluaXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYgcmhzLmluaXRp
YWxpemVkKCkgPT0gZmFsc2UpIGNsZWFyKCk7Ci0gICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9
PSBmYWxzZSAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9PSB0cnVlKSAgaW5pdGlhbGl6ZShzdGQ6Om1v
dmUoKnJocykpOwotICAgIGVsc2UgaWYgKGluaXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYgcmhzLmlu
aXRpYWxpemVkKCkgPT0gdHJ1ZSkgIGNvbnRhaW5lZF92YWwoKSA9IHN0ZDo6bW92ZSgqcmhzKTsK
LSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVT4KLSAgYXV0byBv
cGVyYXRvcj0oVSYmIHYpCi0gIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmCi0gIDwKLSAgICBz
dGQ6OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpkZWNheTxVPjo6dHlwZSwgVD46OnZhbHVlLAotICAg
IG9wdGlvbmFsJgotICA+Ojp0eXBlCi0gIHsKLSAgICBpZiAoaW5pdGlhbGl6ZWQoKSkgeyBjb250
YWluZWRfdmFsKCkgPSBzdGQ6OmZvcndhcmQ8VT4odik7IH0KLSAgICBlbHNlICAgICAgICAgICAg
ICAgeyBpbml0aWFsaXplKHN0ZDo6Zm9yd2FyZDxVPih2KSk7ICB9Ci0gICAgcmV0dXJuICp0aGlz
OwotICB9Ci0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KLSAgdm9pZCBlbXBsYWNlKEFy
Z3MmJi4uLiBhcmdzKQotICB7Ci0gICAgY2xlYXIoKTsKLSAgICBpbml0aWFsaXplKHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVSwgY2xhc3Mu
Li4gQXJncz4KLSAgdm9pZCBlbXBsYWNlKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVPiBpbCwgQXJn
cyYmLi4uIGFyZ3MpCi0gIHsKLSAgICBjbGVhcigpOwotICAgIGluaXRpYWxpemU8VSwgQXJncy4u
Lj4oaWwsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gIH0KLQotICAvLyAyMC41LjQu
NCwgU3dhcAotICB2b2lkIHN3YXAob3B0aW9uYWw8VD4mIHJocykgX19OT0VYQ0VQVF8oZGV0YWls
Xzo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZhbHVlICYmIF9fTk9FWENFUFRf
KHN3YXAoc3RkOjpkZWNsdmFsPFQmPigpLCBzdGQ6OmRlY2x2YWw8VCY+KCkpKSkKLSAgewotICAg
IGlmICAgICAgKGluaXRpYWxpemVkKCkgPT0gdHJ1ZSAgJiYgcmhzLmluaXRpYWxpemVkKCkgPT0g
ZmFsc2UpIHsgcmhzLmluaXRpYWxpemUoc3RkOjptb3ZlKCoqdGhpcykpOyBjbGVhcigpOyB9Ci0g
ICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSBmYWxzZSAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9
PSB0cnVlKSAgeyBpbml0aWFsaXplKHN0ZDo6bW92ZSgqcmhzKSk7IHJocy5jbGVhcigpOyB9Ci0g
ICAgZWxzZSBpZiAoaW5pdGlhbGl6ZWQoKSA9PSB0cnVlICAmJiByaHMuaW5pdGlhbGl6ZWQoKSA9
PSB0cnVlKSAgeyB1c2luZyBzdGQ6OnN3YXA7IHN3YXAoKip0aGlzLCAqcmhzKTsgfQotICB9Ci0K
LSAgLy8gMjAuNS40LjUsIE9ic2VydmVycwotCi0gIGV4cGxpY2l0IGNvbnN0ZXhwciBvcGVyYXRv
ciBib29sKCkgY29uc3QgX19OT0VYQ0VQVCB7IHJldHVybiBpbml0aWFsaXplZCgpOyB9Ci0gIGNv
bnN0ZXhwciBib29sIGhhc192YWx1ZSgpIGNvbnN0IF9fTk9FWENFUFQgeyByZXR1cm4gaW5pdGlh
bGl6ZWQoKTsgfQotCi0gIGNvbnN0ZXhwciBUIGNvbnN0KiBvcGVyYXRvciAtPigpIGNvbnN0IHsK
LSAgICByZXR1cm4gVFIyX09QVElPTkFMX0FTU0VSVEVEX0VYUFJFU1NJT04oaW5pdGlhbGl6ZWQo
KSwgZGF0YXB0cigpKTsKLSAgfQotCi0jIGlmIE9QVElPTkFMX0hBU19NT1ZFX0FDQ0VTU09SUyA9
PSAxCi0KLSAgT1BUSU9OQUxfTVVUQUJMRV9DT05TVEVYUFIgVCogb3BlcmF0b3IgLT4oKSB7Ci0g
ICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gb2ZmZXIgc3BlY2lhbCBhc3NlcnQgZnVuY3Rpb24gdGhh
dCBjYW4gYmUgdXNlZCB1bmRlciB0aGUgY29udGV4cHIgY29udGV4dC4KLSAgICAvLyBDT05TVEVY
UFJfQVNTRVJUKGluaXRpYWxpemVkKCkpOwotICAgIHJldHVybiBkYXRhcHRyKCk7Ci0gIH0KLQot
ICBjb25zdGV4cHIgVCBjb25zdCYgb3BlcmF0b3IgKigpIGNvbnN0JiB7Ci0gICAgcmV0dXJuIFRS
Ml9PUFRJT05BTF9BU1NFUlRFRF9FWFBSRVNTSU9OKGluaXRpYWxpemVkKCksIGNvbnRhaW5lZF92
YWwoKSk7Ci0gIH0KLQotICBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBUJiBvcGVyYXRvciAq
KCkgJiB7Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gb2ZmZXIgc3BlY2lhbCBhc3NlcnQgZnVu
Y3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB1bmRlciB0aGUgY29udGV4cHIgY29udGV4dC4KLSAgICAv
LyBDT05TVEVYUFJfQVNTRVJUKGluaXRpYWxpemVkKCkpOwotICAgIHJldHVybiBjb250YWluZWRf
dmFsKCk7Ci0gIH0KLQotICBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBUJiYgb3BlcmF0b3Ig
KigpICYmIHsKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBvZmZlciBzcGVjaWFsIGFzc2VydCBm
dW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHVuZGVyIHRoZSBjb250ZXhwciBjb250ZXh0LgotICAg
IC8vIENPTlNURVhQUl9BU1NFUlQoaW5pdGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIGRldGFpbF86
OmNvbnN0ZXhwcl9tb3ZlKGNvbnRhaW5lZF92YWwoKSk7Ci0gIH0KLQotICBjb25zdGV4cHIgVCBj
b25zdCYgdmFsdWUoKSBjb25zdCYgewotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIG9mZmVyIHNw
ZWNpYWwgYXNzZXJ0IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdW5kZXIgdGhlIGNvbnRleHBy
IGNvbnRleHQuCi0gICAgLy8gcmV0dXJuIGluaXRpYWxpemVkKCkgPyBjb250YWluZWRfdmFsKCkg
OiAodGhyb3cgYmFkX29wdGlvbmFsX2FjY2VzcygiYmFkIG9wdGlvbmFsIGFjY2VzcyIpLCBjb250
YWluZWRfdmFsKCkpOwotICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7Ci0gIH0KLQotICBPUFRJ
T05BTF9NVVRBQkxFX0NPTlNURVhQUiBUJiB2YWx1ZSgpICYgewotICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIG9mZmVyIHNwZWNpYWwgYXNzZXJ0IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdW5k
ZXIgdGhlIGNvbnRleHByIGNvbnRleHQuCi0gICAgLy8gcmV0dXJuIGluaXRpYWxpemVkKCkgPyBj
b250YWluZWRfdmFsKCkgOiAodGhyb3cgYmFkX29wdGlvbmFsX2FjY2VzcygiYmFkIG9wdGlvbmFs
IGFjY2VzcyIpLCBjb250YWluZWRfdmFsKCkpOwotICAgIHJldHVybiBjb250YWluZWRfdmFsKCk7
Ci0gIH0KLQotICBPUFRJT05BTF9NVVRBQkxFX0NPTlNURVhQUiBUJiYgdmFsdWUoKSAmJiB7Ci0g
ICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gb2ZmZXIgc3BlY2lhbCBhc3NlcnQgZnVuY3Rpb24gdGhh
dCBjYW4gYmUgdXNlZCB1bmRlciB0aGUgY29udGV4cHIgY29udGV4dC4KLSAgICAvLyBpZiAoIWlu
aXRpYWxpemVkKCkpIF9fVEhST1dfRVhDRVBUSU9OKGJhZF9vcHRpb25hbF9hY2Nlc3MoImJhZCBv
cHRpb25hbCBhY2Nlc3MiKSk7Ci0gICAgcmV0dXJuIHN0ZDo6bW92ZShjb250YWluZWRfdmFsKCkp
OwotICB9Ci0KLSMgZWxzZQotCi0gIFQqIG9wZXJhdG9yIC0+KCkgewotICAgIGFzc2VydCAoaW5p
dGlhbGl6ZWQoKSk7Ci0gICAgcmV0dXJuIGRhdGFwdHIoKTsKLSAgfQotCi0gIGNvbnN0ZXhwciBU
IGNvbnN0JiBvcGVyYXRvciAqKCkgY29uc3QgewotICAgIHJldHVybiBUUjJfT1BUSU9OQUxfQVNT
RVJURURfRVhQUkVTU0lPTihpbml0aWFsaXplZCgpLCBjb250YWluZWRfdmFsKCkpOwotICB9Ci0K
LSAgVCYgb3BlcmF0b3IgKigpIHsKLSAgICBhc3NlcnQgKGluaXRpYWxpemVkKCkpOwotICAgIHJl
dHVybiBjb250YWluZWRfdmFsKCk7Ci0gIH0KLQotICBjb25zdGV4cHIgVCBjb25zdCYgdmFsdWUo
KSBjb25zdCB7Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gb2ZmZXIgc3BlY2lhbCBhc3NlcnQg
ZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB1bmRlciB0aGUgY29udGV4cHIgY29udGV4dC4KLSAg
ICAvLyByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IGNvbnRhaW5lZF92YWwoKSA6ICh0aHJvdyBiYWRf
b3B0aW9uYWxfYWNjZXNzKCJiYWQgb3B0aW9uYWwgYWNjZXNzIiksIGNvbnRhaW5lZF92YWwoKSk7
Ci0gICAgcmV0dXJuIGNvbnRhaW5lZF92YWwoKTsKLSAgfQotCi0gIFQmIHZhbHVlKCkgewotICAg
IC8vIEZJWE1FOiBXZSBuZWVkIHRvIG9mZmVyIHNwZWNpYWwgYXNzZXJ0IGZ1bmN0aW9uIHRoYXQg
Y2FuIGJlIHVzZWQgdW5kZXIgdGhlIGNvbnRleHByIGNvbnRleHQuCi0gICAgLy8gcmV0dXJuIGlu
aXRpYWxpemVkKCkgPyBjb250YWluZWRfdmFsKCkgOiAodGhyb3cgYmFkX29wdGlvbmFsX2FjY2Vz
cygiYmFkIG9wdGlvbmFsIGFjY2VzcyIpLCBjb250YWluZWRfdmFsKCkpOwotICAgIHJldHVybiBj
b250YWluZWRfdmFsKCk7Ci0gIH0KLQotIyBlbmRpZgotCi0jIGlmIE9QVElPTkFMX0hBU19USElT
X1JWQUxVRV9SRUZTID09IDEKLQotICB0ZW1wbGF0ZSA8Y2xhc3MgVj4KLSAgY29uc3RleHByIFQg
dmFsdWVfb3IoViYmIHYpIGNvbnN0JgotICB7Ci0gICAgcmV0dXJuICp0aGlzID8gKip0aGlzIDog
ZGV0YWlsXzo6Y29udmVydDxUPihkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxWPih2KSk7Ci0g
IH0KLQotIyAgIGlmIE9QVElPTkFMX0hBU19NT1ZFX0FDQ0VTU09SUyA9PSAxCi0KLSAgdGVtcGxh
dGUgPGNsYXNzIFY+Ci0gIE9QVElPTkFMX01VVEFCTEVfQ09OU1RFWFBSIFQgdmFsdWVfb3IoViYm
IHYpICYmCi0gIHsKLSAgICByZXR1cm4gKnRoaXMgPyBkZXRhaWxfOjpjb25zdGV4cHJfbW92ZShj
b25zdF9jYXN0PG9wdGlvbmFsPFQ+Jj4oKnRoaXMpLmNvbnRhaW5lZF92YWwoKSkgOiBkZXRhaWxf
Ojpjb252ZXJ0PFQ+KGRldGFpbF86OmNvbnN0ZXhwcl9mb3J3YXJkPFY+KHYpKTsKLSAgfQotCi0j
ICAgZWxzZQotCi0gIHRlbXBsYXRlIDxjbGFzcyBWPgotICBUIHZhbHVlX29yKFYmJiB2KSAmJgot
ICB7Ci0gICAgcmV0dXJuICp0aGlzID8gZGV0YWlsXzo6Y29uc3RleHByX21vdmUoY29uc3RfY2Fz
dDxvcHRpb25hbDxUPiY+KCp0aGlzKS5jb250YWluZWRfdmFsKCkpIDogZGV0YWlsXzo6Y29udmVy
dDxUPihkZXRhaWxfOjpjb25zdGV4cHJfZm9yd2FyZDxWPih2KSk7Ci0gIH0KLQotIyAgIGVuZGlm
Ci0KLSMgZWxzZQotCi0gIHRlbXBsYXRlIDxjbGFzcyBWPgotICBjb25zdGV4cHIgVCB2YWx1ZV9v
cihWJiYgdikgY29uc3QKLSAgewotICAgIHJldHVybiAqdGhpcyA/ICoqdGhpcyA6IGRldGFpbF86
OmNvbnZlcnQ8VD4oZGV0YWlsXzo6Y29uc3RleHByX2ZvcndhcmQ8Vj4odikpOwotICB9Ci0KLSMg
ZW5kaWYKLQotICAvLyAyMC42LjMuNiwgbW9kaWZpZXJzCi0gIHZvaWQgcmVzZXQoKSBfX05PRVhD
RVBUIHsgY2xlYXIoKTsgfQotfTsKLQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWNsYXNzIG9wdGlv
bmFsPFQmPgotewotICBzdGF0aWNfYXNzZXJ0KCAhc3RkOjppc19zYW1lPFQsIG51bGxvcHRfdD46
OnZhbHVlLCAiYmFkIFQiICk7Ci0gIHN0YXRpY19hc3NlcnQoICFzdGQ6OmlzX3NhbWU8VCwgaW5f
cGxhY2VfdD46OnZhbHVlLCAiYmFkIFQiICk7Ci0gIFQqIHJlZjsKLQotcHVibGljOgotCi0gIC8v
IDIwLjUuNS4xLCBjb25zdHJ1Y3Rpb24vZGVzdHJ1Y3Rpb24KLSAgY29uc3RleHByIG9wdGlvbmFs
KCkgX19OT0VYQ0VQVCA6IHJlZihudWxscHRyKSB7fQotCi0gIGNvbnN0ZXhwciBvcHRpb25hbChu
dWxsb3B0X3QpIF9fTk9FWENFUFQgOiByZWYobnVsbHB0cikge30KLQotICBjb25zdGV4cHIgb3B0
aW9uYWwoVCYgdikgX19OT0VYQ0VQVCA6IHJlZihkZXRhaWxfOjpzdGF0aWNfYWRkcmVzc29mKHYp
KSB7fQotCi0gIG9wdGlvbmFsKFQmJikgPSBkZWxldGU7Ci0KLSAgY29uc3RleHByIG9wdGlvbmFs
KGNvbnN0IG9wdGlvbmFsJiByaHMpIF9fTk9FWENFUFQgOiByZWYocmhzLnJlZikge30KLQotICBl
eHBsaWNpdCBjb25zdGV4cHIgb3B0aW9uYWwoaW5fcGxhY2VfdCwgVCYgdikgX19OT0VYQ0VQVCA6
IHJlZihkZXRhaWxfOjpzdGF0aWNfYWRkcmVzc29mKHYpKSB7fQotCi0gIGV4cGxpY2l0IG9wdGlv
bmFsKGluX3BsYWNlX3QsIFQmJikgPSBkZWxldGU7Ci0KLSAgfm9wdGlvbmFsKCkgPSBkZWZhdWx0
OwotCi0gIC8vIDIwLjUuNS4yLCBtdXRhdGlvbgotICBvcHRpb25hbCYgb3BlcmF0b3I9KG51bGxv
cHRfdCkgX19OT0VYQ0VQVCB7Ci0gICAgcmVmID0gbnVsbHB0cjsKLSAgICByZXR1cm4gKnRoaXM7
Ci0gIH0KLQotICAvLyBvcHRpb25hbCYgb3BlcmF0b3I9KGNvbnN0IG9wdGlvbmFsJiByaHMpIF9f
Tk9FWENFUFQgewotICAgIC8vIHJlZiA9IHJocy5yZWY7Ci0gICAgLy8gcmV0dXJuICp0aGlzOwot
ICAvLyB9Ci0KLSAgLy8gb3B0aW9uYWwmIG9wZXJhdG9yPShvcHRpb25hbCYmIHJocykgX19OT0VY
Q0VQVCB7Ci0gICAgLy8gcmVmID0gcmhzLnJlZjsKLSAgICAvLyByZXR1cm4gKnRoaXM7Ci0gIC8v
IH0KLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgYXV0byBvcGVyYXRvcj0oVSYmIHJocykg
X19OT0VYQ0VQVAotICAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZgotICA8Ci0gICAgc3RkOjpp
c19zYW1lPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VT46OnR5cGUsIG9wdGlvbmFsPFQmPj46OnZhbHVl
LAotICAgIG9wdGlvbmFsJgotICA+Ojp0eXBlCi0gIHsKLSAgICByZWYgPSByaHMucmVmOwotICAg
IHJldHVybiAqdGhpczsKLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICBhdXRvIG9w
ZXJhdG9yPShVJiYgcmhzKSBfX05PRVhDRVBUCi0gIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
Ci0gIDwKLSAgICAhc3RkOjppc19zYW1lPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VT46OnR5cGUsIG9w
dGlvbmFsPFQmPj46OnZhbHVlLAotICAgIG9wdGlvbmFsJgotICA+Ojp0eXBlCi0gID0gZGVsZXRl
OwotCi0gIHZvaWQgZW1wbGFjZShUJiB2KSBfX05PRVhDRVBUIHsKLSAgICByZWYgPSBkZXRhaWxf
OjpzdGF0aWNfYWRkcmVzc29mKHYpOwotICB9Ci0KLSAgdm9pZCBlbXBsYWNlKFQmJikgPSBkZWxl
dGU7Ci0KLQotICB2b2lkIHN3YXAob3B0aW9uYWw8VCY+JiByaHMpIF9fTk9FWENFUFQKLSAgewot
ICAgIHN0ZDo6c3dhcChyZWYsIHJocy5yZWYpOwotICB9Ci0KLSAgLy8gMjAuNS41LjMsIG9ic2Vy
dmVycwotICBjb25zdGV4cHIgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsKLSAgICByZXR1cm4gVFIy
X09QVElPTkFMX0FTU0VSVEVEX0VYUFJFU1NJT04ocmVmLCByZWYpOwotICB9Ci0KLSAgY29uc3Rl
eHByIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsKLSAgICByZXR1cm4gVFIyX09QVElPTkFMX0FTU0VS
VEVEX0VYUFJFU1NJT04ocmVmLCAqcmVmKTsKLSAgfQotCi0gIGNvbnN0ZXhwciBUJiB2YWx1ZSgp
IGNvbnN0IHsKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBvZmZlciBzcGVjaWFsIGFzc2VydCBm
dW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHVuZGVyIHRoZSBjb250ZXhwciBjb250ZXh0LgotICAg
IC8vIHJldHVybiByZWYgPyAqcmVmIDogKHRocm93IGJhZF9vcHRpb25hbF9hY2Nlc3MoImJhZCBv
cHRpb25hbCBhY2Nlc3MiKSwgKnJlZik7Ci0gICAgcmV0dXJuICpyZWY7Ci0gIH0KLQotICBleHBs
aWNpdCBjb25zdGV4cHIgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IF9fTk9FWENFUFQgewotICAgIHJl
dHVybiByZWYgIT0gbnVsbHB0cjsKLSAgfQotCi0gIGNvbnN0ZXhwciBib29sIGhhc192YWx1ZSgp
IGNvbnN0IF9fTk9FWENFUFQgewotICAgIHJldHVybiByZWYgIT0gbnVsbHB0cjsKLSAgfQotCi0g
IHRlbXBsYXRlIDxjbGFzcyBWPgotICBjb25zdGV4cHIgdHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6
dHlwZSB2YWx1ZV9vcihWJiYgdikgY29uc3QKLSAgewotICAgIHJldHVybiAqdGhpcyA/ICoqdGhp
cyA6IGRldGFpbF86OmNvbnZlcnQ8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZT4oZGV0YWls
Xzo6Y29uc3RleHByX2ZvcndhcmQ8Vj4odikpOwotICB9Ci0KLSAgLy8geC54LngueCwgbW9kaWZp
ZXJzCi0gIHZvaWQgcmVzZXQoKSBfX05PRVhDRVBUIHsgcmVmID0gbnVsbHB0cjsgfQotfTsKLQot
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4KLWNsYXNzIG9wdGlvbmFsPFQmJj4KLXsKLSAgc3RhdGljX2Fz
c2VydCggc2l6ZW9mKFQpID09IDAsICJvcHRpb25hbCBydmFsdWUgcmVmZXJlbmNlcyBkaXNhbGxv
d2VkIiApOwotfTsKLQotCi0vLyAyMC41LjgsIFJlbGF0aW9uYWwgb3BlcmF0b3JzCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBvcHRpb25hbDxUPiYg
eCwgY29uc3Qgb3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVybiBib29sKHgpICE9IGJvb2woeSkg
PyBmYWxzZSA6IGJvb2woeCkgPT0gZmFsc2UgPyB0cnVlIDogKnggPT0gKnk7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG9wdGlvbmFsPFQ+
JiB4LCBjb25zdCBvcHRpb25hbDxUPiYgeSkKLXsKLSAgcmV0dXJuICEoeCA9PSB5KTsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBvcHRpb25h
bDxUPiYgeCwgY29uc3Qgb3B0aW9uYWw8VD4mIHkpCi17Ci0gIHJldHVybiAoIXkpID8gZmFsc2Ug
OiAoIXgpID8gdHJ1ZSA6ICp4IDwgKnk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj4oY29uc3Qgb3B0aW9uYWw8VD4mIHgsIGNvbnN0IG9wdGlvbmFsPFQ+
JiB5KQotewotICByZXR1cm4gKHkgPCB4KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3Qgb3B0aW9uYWw8VD4mIHgsIGNvbnN0IG9wdGlvbmFs
PFQ+JiB5KQotewotICByZXR1cm4gISh5IDwgeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25zdCBvcHRp
b25hbDxUPiYgeSkKLXsKLSAgcmV0dXJuICEoeCA8IHkpOwotfQotCi0KLS8vIDIwLjUuOSwgQ29t
cGFyaXNvbiB3aXRoIG51bGxvcHQKLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9FWENFUFQKLXsK
LSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj09KG51bGxvcHRfdCwgY29uc3Qgb3B0aW9uYWw8VD4mIHgpIF9fTk9FWENFUFQKLXsK
LSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9FWENFUFQKLXsK
LSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvciE9KG51bGxvcHRfdCwgY29uc3Qgb3B0aW9uYWw8VD4mIHgpIF9fTk9FWENFUFQK
LXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcjwoY29uc3Qgb3B0aW9uYWw8VD4mLCBudWxsb3B0X3QpIF9fTk9FWENFUFQK
LXsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3I8KG51bGxvcHRfdCwgY29uc3Qgb3B0aW9uYWw8VD4mIHgpIF9fTk9FWENFUFQK
LXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcjw9KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9FWENF
UFQKLXsKLSAgcmV0dXJuICgheCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcjw9KG51bGxvcHRfdCwgY29uc3Qgb3B0aW9uYWw8VD4mKSBfX05PRVhDRVBU
Ci17Ci0gIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3I+KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBudWxsb3B0X3QpIF9fTk9FWENFUFQK
LXsKLSAgcmV0dXJuIGJvb2woeCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj4obnVsbG9wdF90LCBjb25zdCBvcHRpb25hbDxUPiYpIF9fTk9FWENFUFQK
LXsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3I+PShjb25zdCBvcHRpb25hbDxUPiYsIG51bGxvcHRfdCkgX19OT0VYQ0VQVAot
ewotICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPj0obnVsbG9wdF90LCBjb25zdCBvcHRpb25hbDxUPiYgeCkgX19OT0VYQ0VQVAot
ewotICByZXR1cm4gKCF4KTsKLX0KLQotCi0KLS8vIDIwLjUuMTAsIENvbXBhcmlzb24gd2l0aCBU
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBvcHRp
b25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA9PSB2IDog
ZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPFQ+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/
IHYgPT0gKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yIT0oY29uc3Qgb3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJldHVy
biBib29sKHgpID8gKnggIT0gdiA6IHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPFQ+JiB4KQot
ewotICByZXR1cm4gYm9vbCh4KSA/IHYgIT0gKnggOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25z
dCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDwgdiA6IHRydWU7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3QgVCYgdiwgY29uc3Qg
b3B0aW9uYWw8VD4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA+ICp4IDogdHJ1ZTsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCBvcHRp
b25hbDxUPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+IHYgOiBm
YWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChj
b25zdCBUJiB2LCBjb25zdCBvcHRpb25hbDxUPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2
IDwgKnggOiBmYWxzZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPj0oY29uc3Qgb3B0aW9uYWw8VD4mIHgsIGNvbnN0IFQmIHYpCi17Ci0gIHJldHVybiBi
b29sKHgpID8gKnggPj0gdiA6IGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCBUJiB2LCBjb25zdCBvcHRpb25hbDxUPiYgeCkKLXsK
LSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG9wdGlvbmFsPFQ+JiB4LCBjb25z
dCBUJiB2KQotewotICByZXR1cm4gYm9vbCh4KSA/ICp4IDw9IHYgOiB0cnVlOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBUJiB2LCBjb25z
dCBvcHRpb25hbDxUPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID49ICp4IDogdHJ1ZTsK
LX0KLQotCi0vLyBDb21wYXJpc29uIG9mIG9wdGlvbmFsPFQmPiB3aXRoIFQKLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG9wdGlvbmFsPFQmPiYgeCwg
Y29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA9PSB2IDogZmFsc2U7Ci19Ci0K
LXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFQmIHYs
IGNvbnN0IG9wdGlvbmFsPFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID09ICp4IDog
ZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IG9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkg
PyAqeCAhPSB2IDogdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yIT0oY29uc3QgVCYgdiwgY29uc3Qgb3B0aW9uYWw8VCY+JiB4KQotewotICByZXR1
cm4gYm9vbCh4KSA/IHYgIT0gKnggOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikK
LXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFs
PFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2ID4gKnggOiB0cnVlOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG9wdGlvbmFsPFQm
PiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+IHYgOiBmYWxzZTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBU
JiB2LCBjb25zdCBvcHRpb25hbDxUJj4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA8ICp4
IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj49KGNvbnN0IG9wdGlvbmFsPFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2wo
eCkgPyAqeCA+PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPFQmPiYgeCkKLXsKLSAg
cmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG9wdGlvbmFsPFQmPiYgeCwgY29uc3Qg
VCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8PSB2IDogdHJ1ZTsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3QgVCYgdiwgY29uc3Qg
b3B0aW9uYWw8VCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgPj0gKnggOiB0cnVlOwot
fQotCi0vLyBDb21wYXJpc29uIG9mIG9wdGlvbmFsPFQgY29uc3QmPiB3aXRoIFQKLXRlbXBsYXRl
IDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG9wdGlvbmFsPGNvbnN0
IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA9PSB2IDogZmFs
c2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPGNvbnN0IFQmPiYgeCkKLXsKLSAgcmV0dXJuIGJvb2wo
eCkgPyB2ID09ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IG9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikK
LXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCAhPSB2IDogdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNs
YXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgVCYgdiwgY29uc3Qgb3B0aW9u
YWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/IHYgIT0gKnggOiB0cnVlOwot
fQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG9w
dGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAq
eCA8IHYgOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPGNvbnN0IFQmPiYgeCkKLXsKLSAgcmV0
dXJuIGJvb2woeCkgPyB2ID4gKnggOiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3Qg
VCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA+IHYgOiBmYWxzZTsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBUJiB2LCBjb25zdCBv
cHRpb25hbDxjb25zdCBUJj4mIHgpCi17Ci0gIHJldHVybiBib29sKHgpID8gdiA8ICp4IDogZmFs
c2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNv
bnN0IG9wdGlvbmFsPGNvbnN0IFQmPiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2wo
eCkgPyAqeCA+PSB2IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcjw9KGNvbnN0IFQmIHYsIGNvbnN0IG9wdGlvbmFsPGNvbnN0IFQmPiYgeCkK
LXsKLSAgcmV0dXJuIGJvb2woeCkgPyB2IDw9ICp4IDogZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG9wdGlvbmFsPGNvbnN0IFQm
PiYgeCwgY29uc3QgVCYgdikKLXsKLSAgcmV0dXJuIGJvb2woeCkgPyAqeCA8PSB2IDogdHJ1ZTsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oY29uc3Qg
VCYgdiwgY29uc3Qgb3B0aW9uYWw8Y29uc3QgVCY+JiB4KQotewotICByZXR1cm4gYm9vbCh4KSA/
IHYgPj0gKnggOiB0cnVlOwotfQotCi0KLS8vIDIwLjUuMTIsIFNwZWNpYWxpemVkIGFsZ29yaXRo
bXMKLXRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBzd2FwKG9wdGlvbmFsPFQ+JiB4LCBvcHRpb25h
bDxUPiYgeSkgX19OT0VYQ0VQVF8oX19OT0VYQ0VQVF8oeC5zd2FwKHkpKSkKLXsKLSAgeC5zd2Fw
KHkpOwotfQotCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotY29uc3RleHByIG9wdGlvbmFsPHR5cGVu
YW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+IG1ha2Vfb3B0aW9uYWwoVCYmIHYpCi17Ci0gIHJldHVy
biBvcHRpb25hbDx0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPihkZXRhaWxfOjpjb25zdGV4
cHJfZm9yd2FyZDxUPih2KSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBYPgotY29uc3RleHByIG9w
dGlvbmFsPFgmPiBtYWtlX29wdGlvbmFsKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8WD4gdikKLXsK
LSAgcmV0dXJuIG9wdGlvbmFsPFgmPih2LmdldCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ugc3Rk
Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0vLyAtLSBXZWJLaXQgQWRkaXRpb25zIC0tCi10ZW1wbGF0
ZSA8Y2xhc3MgT3B0aW9uYWxUeXBlLCBjbGFzcyBDYWxsYmFjaz4KLUFMV0FZU19JTkxJTkUKLWF1
dG8gdmFsdWVPckNvbXB1dGUoT3B0aW9uYWxUeXBlIG9wdGlvbmFsLCBDYWxsYmFjayBjYWxsYmFj
aykgLT4gdHlwZW5hbWUgT3B0aW9uYWxUeXBlOjp2YWx1ZV90eXBlCi17Ci0gICAgaWYgKG9wdGlv
bmFsKQotICAgICAgICByZXR1cm4gKm9wdGlvbmFsOwotICAgIHJldHVybiBjYWxsYmFjaygpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotbmFtZXNwYWNlIHN0ZAotewotICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KLSAgc3RydWN0IGhhc2g8c3RkOjpvcHRpb25hbDxUPj4KLSAgewotICAgIHR5
cGVkZWYgdHlwZW5hbWUgaGFzaDxUPjo6cmVzdWx0X3R5cGUgcmVzdWx0X3R5cGU7Ci0gICAgdHlw
ZWRlZiBzdGQ6Om9wdGlvbmFsPFQ+IGFyZ3VtZW50X3R5cGU7Ci0KLSAgICBjb25zdGV4cHIgcmVz
dWx0X3R5cGUgb3BlcmF0b3IoKShhcmd1bWVudF90eXBlIGNvbnN0JiBhcmcpIGNvbnN0IHsKLSAg
ICAgIHJldHVybiBhcmcgPyBzdGQ6Omhhc2g8VD57fSgqYXJnKSA6IHJlc3VsdF90eXBle307Ci0g
ICAgfQotICB9OwotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBzdHJ1Y3QgaGFzaDxzdGQ6
Om9wdGlvbmFsPFQmPj4KLSAgewotICAgIHR5cGVkZWYgdHlwZW5hbWUgaGFzaDxUPjo6cmVzdWx0
X3R5cGUgcmVzdWx0X3R5cGU7Ci0gICAgdHlwZWRlZiBzdGQ6Om9wdGlvbmFsPFQmPiBhcmd1bWVu
dF90eXBlOwotCi0gICAgY29uc3RleHByIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoYXJndW1lbnRf
dHlwZSBjb25zdCYgYXJnKSBjb25zdCB7Ci0gICAgICByZXR1cm4gYXJnID8gc3RkOjpoYXNoPFQ+
e30oKmFyZykgOiByZXN1bHRfdHlwZXt9OwotICAgIH0KLSAgfTsKLX0KLQotIyB1bmRlZiBUUjJf
T1BUSU9OQUxfUkVRVUlSRVMKLSMgdW5kZWYgVFIyX09QVElPTkFMX0FTU0VSVEVEX0VYUFJFU1NJ
T04KLQotdXNpbmcgV1RGOjp2YWx1ZU9yQ29tcHV0ZTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9QYXJraW5nTG90LmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi9QYXJraW5nTG90LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggY2MxYTIxYjllYTVjY2NjNmYxYWNlNGM5NzQ5ODk5YmJkYTVkN2UxMC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvUGFya2luZ0xvdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MTMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYXJraW5nTG90LmgiCi0KLSNpbmNsdWRl
ICJDdXJyZW50VGltZS5oIgotI2luY2x1ZGUgIkRhdGFMb2cuaCIKLSNpbmNsdWRlICJIYXNoRnVu
Y3Rpb25zLmgiCi0jaW5jbHVkZSAiU3RyaW5nUHJpbnRTdHJlYW0uaCIKLSNpbmNsdWRlICJUaHJl
YWRTcGVjaWZpYy5oIgotI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKLSNpbmNsdWRl
ICJWZWN0b3IuaCIKLSNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCi0jaW5jbHVkZSAiV29yZExvY2su
aCIKLSNpbmNsdWRlIDxjb25kaXRpb25fdmFyaWFibGU+Ci0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5j
bHVkZSA8dGhyZWFkPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotbmFtZXNwYWNlIHsKLQotY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KLXN0cnVjdCBUaHJlYWREYXRhIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFRocmVhZERhdGE+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICAKLSAgICBUaHJlYWREYXRhKCk7Ci0gICAgflRocmVhZERhdGEoKTsK
LQotICAgIFJlZjxUaHJlYWQ+IHRocmVhZDsKLSAgICAKLSAgICBNdXRleCBwYXJraW5nTG9jazsK
LSAgICBUaHJlYWRDb25kaXRpb24gcGFya2luZ0NvbmRpdGlvbjsKLQotICAgIGNvbnN0IHZvaWQq
IGFkZHJlc3MgeyBudWxscHRyIH07Ci0gICAgCi0gICAgVGhyZWFkRGF0YSogbmV4dEluUXVldWUg
eyBudWxscHRyIH07Ci0gICAgCi0gICAgaW50cHRyX3QgdG9rZW4geyAwIH07Ci19OwotCi1lbnVt
IGNsYXNzIERlcXVldWVSZXN1bHQgewotICAgIElnbm9yZSwKLSAgICBSZW1vdmVBbmRDb250aW51
ZSwKLSAgICBSZW1vdmVBbmRTdG9wCi19OwotCi1zdHJ1Y3QgQnVja2V0IHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBCdWNrZXQoKQotICAgICAgICA6IHJhbmRv
bShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0d2lzZV9jYXN0PGludHB0cl90Pih0aGlzKSkpIC8v
IENhbm5vdCB1c2UgZGVmYXVsdCBzZWVkIHNpbmNlIHRoYXQgcmVjdXJzZXMgaW50byBMb2NrLgot
ICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBlbnF1ZXVlKFRocmVhZERhdGEqIGRhdGEpCi0g
ICAgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmco
Y3VycmVudFRocmVhZCgpLCAiOiBlbnF1ZXVlaW5nICIsIFJhd1BvaW50ZXIoZGF0YSksICIgd2l0
aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcihkYXRhLT5hZGRyZXNzKSwgIiBvbnRvICIsIFJhd1Bv
aW50ZXIodGhpcyksICJcbiIpKTsKLSAgICAgICAgQVNTRVJUKGRhdGEtPmFkZHJlc3MpOwotICAg
ICAgICBBU1NFUlQoIWRhdGEtPm5leHRJblF1ZXVlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChx
dWV1ZVRhaWwpIHsKLSAgICAgICAgICAgIHF1ZXVlVGFpbC0+bmV4dEluUXVldWUgPSBkYXRhOwot
ICAgICAgICAgICAgcXVldWVUYWlsID0gZGF0YTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIHF1ZXVlSGVhZCA9IGRhdGE7Ci0gICAgICAgIHF1ZXVlVGFpbCA9IGRh
dGE7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGdl
bmVyaWNEZXF1ZXVlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAi
OiBkZXF1ZXVlaW5nIGZyb20gYnVja2V0IGF0ICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghcXVldWVIZWFkKSB7Ci0gICAgICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwg
IjogZW1wdHkuXG4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBUaGlzIGxvb3AgaXMgYSB2ZXJ5IGNsZXZlciBhYm9taW5hdGlvbi4gVGhlIGluZHVjdGlv
biB2YXJpYWJsZXMgYXJlIHRoZSBwb2ludGVyIHRvIHRoZQotICAgICAgICAvLyBwb2ludGVyIHRv
IHRoZSBjdXJyZW50IG5vZGUsIGFuZCB0aGUgcG9pbnRlciB0byB0aGUgcHJldmlvdXMgbm9kZS4g
VGhpcyBnaXZlcyB1cyBldmVyeXRoaW5nCi0gICAgICAgIC8vIHdlIG5lZWQgdG8gYm90aCBwcm9j
ZWVkIGZvcndhcmQgdG8gdGhlIG5leHQgbm9kZSwgYW5kIHRvIHJlbW92ZSBub2RlcyB3aGlsZSBt
YWludGFpbmluZyB0aGUKLSAgICAgICAgLy8gcXVldWVIZWFkL3F1ZXVlVGFpbCBhbmQgYWxsIG9m
IHRoZSBuZXh0SW5RdWV1ZSBsaW5rcy4gRm9yIGV4YW1wbGUsIHdoZW4gd2UgYXJlIGF0IHRoZSBo
ZWFkCi0gICAgICAgIC8vIGVsZW1lbnQsIHRoZW4gcmVtb3ZhbCBtZWFucyByZXdpcmluZyBxdWV1
ZUhlYWQsIGFuZCBpZiBpdCB3YXMgYWxzbyBlcXVhbCB0byBxdWV1ZVRhaWwsIHRoZW4KLSAgICAg
ICAgLy8gd2UnZCB3YW50IHF1ZXVlVGFpbCB0byBiZSBzZXQgdG8gbnVsbHB0ci4gVGhpcyB3b3Jr
cyBiZWNhdXNlOgotICAgICAgICAvLwotICAgICAgICAvLyAgICAgY3VycmVudFB0ciA9PSAmcXVl
dWVIZWFkCi0gICAgICAgIC8vICAgICBwcmV2aW91cyA9PSBudWxscHRyCi0gICAgICAgIC8vCi0g
ICAgICAgIC8vIFdlIHJlbW92ZSBieSBzZXR0aW5nICpjdXJyZW50UHRyID0gKCpjdXJyZW50UHRy
KS0+bmV4dEluUXVldWUsIGkuZS4gY2hhbmdpbmcgdGhlIHBvaW50ZXIKLSAgICAgICAgLy8gdGhh
dCB1c2VkIHRvIHBvaW50IHRvIHRoaXMgbm9kZSB0byBpbnN0ZWFkIHBvaW50IHRvIHRoaXMgbm9k
ZSdzIHN1Y2Nlc3Nvci4gQW5vdGhlciBleGFtcGxlOgotICAgICAgICAvLyBpZiB3ZSB3ZXJlIGF0
IHRoZSBzZWNvbmQgbm9kZSBpbiB0aGUgcXVldWUsIHRoZW4gd2UnZCBoYXZlOgotICAgICAgICAv
LwotICAgICAgICAvLyAgICAgY3VycmVudFB0ciA9PSAmcXVldWVIZWFkLT5uZXh0SW5RdWV1ZQot
ICAgICAgICAvLyAgICAgcHJldmlvdXMgPT0gcXVldWVIZWFkCi0gICAgICAgIC8vCi0gICAgICAg
IC8vIElmIHRoaXMgbm9kZSBpcyBub3QgZXF1YWwgdG8gcXVldWVUYWlsLCB0aGVuIHJlbW92aW5n
IGl0IHNpbXBseSBtZWFucyBtYWtpbmcKLSAgICAgICAgLy8gcXVldWVIZWFkLT5uZXh0SW5RdWV1
ZSBwb2ludCB0byBxdWV1ZUhlYWQtPm5leHRJblF1ZXVlLT5uZXh0SW5RdWV1ZSAod2hpY2ggdGhl
IGFsZ29yaXRobQotICAgICAgICAvLyBhY2hpZXZlcyBieSBtdXRhdGluZyAqY3VycmVudFB0ciku
IElmIHRoaXMgbm9kZSBpcyBlcXVhbCB0byBxdWV1ZVRhaWwsIHRoZW4gd2Ugd2FudCB0byBzZXQK
LSAgICAgICAgLy8gcXVldWVUYWlsIHRvIHByZXZpb3VzLCB3aGljaCBpbiB0aGlzIGNhc2UgaXMg
cXVldWVIZWFkIC0gdGh1cyBtYWtpbmcgdGhlIHF1ZXVlIGxvb2sgbGlrZSBhCi0gICAgICAgIC8v
IHByb3BlciBvbmUtZWxlbWVudCBxdWV1ZSB3aXRoIHF1ZXVlSGVhZCA9PSBxdWV1ZVRhaWwuCi0g
ICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwotICAgICAgICBUaHJlYWREYXRhKiog
Y3VycmVudFB0ciA9ICZxdWV1ZUhlYWQ7Ci0gICAgICAgIFRocmVhZERhdGEqIHByZXZpb3VzID0g
bnVsbHB0cjsKLQotICAgICAgICBkb3VibGUgdGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZU1TKCk7Ci0gICAgICAgIGJvb2wgdGltZVRvQmVGYWlyID0gZmFsc2U7Ci0gICAgICAgIGlm
ICh0aW1lID4gbmV4dEZhaXJUaW1lKQotICAgICAgICAgICAgdGltZVRvQmVGYWlyID0gdHJ1ZTsK
LSAgICAgICAgCi0gICAgICAgIGJvb2wgZGlkRGVxdWV1ZSA9IGZhbHNlOwotICAgICAgICAKLSAg
ICAgICAgd2hpbGUgKHNob3VsZENvbnRpbnVlKSB7Ci0gICAgICAgICAgICBUaHJlYWREYXRhKiBj
dXJyZW50ID0gKmN1cnJlbnRQdHI7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZ290IHRocmVhZCAi
LCBSYXdQb2ludGVyKGN1cnJlbnQpLCAiXG4iKSk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnQp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBEZXF1ZXVlUmVzdWx0IHJlc3Vs
dCA9IGZ1bmN0b3IoY3VycmVudCwgdGltZVRvQmVGYWlyKTsKLSAgICAgICAgICAgIHN3aXRjaCAo
cmVzdWx0KSB7Ci0gICAgICAgICAgICBjYXNlIERlcXVldWVSZXN1bHQ6Oklnbm9yZToKLSAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0
cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGN1cnJlbnRQdHIgPSAiLCBSYXdQb2ludGVyKGN1cnJl
bnRQdHIpLCAiLCAqY3VycmVudFB0ciA9ICIsIFJhd1BvaW50ZXIoKmN1cnJlbnRQdHIpLCAiXG4i
KSk7Ci0gICAgICAgICAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50OwotICAgICAgICAgICAgICAg
IGN1cnJlbnRQdHIgPSAmKCpjdXJyZW50UHRyKS0+bmV4dEluUXVldWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZFN0b3A6
Ci0gICAgICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICBGQUxMVEhST1VHSDsKLSAgICAgICAgICAgIGNhc2UgRGVxdWV1ZVJlc3VsdDo6UmVtb3ZlQW5k
Q29udGludWU6Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBkZXF1ZXVlaW5nICIsIFJh
d1BvaW50ZXIoY3VycmVudCksICIgZnJvbSAiLCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gcXVldWVUYWlsKQotICAgICAgICAgICAgICAg
ICAgICBxdWV1ZVRhaWwgPSBwcmV2aW91czsKLSAgICAgICAgICAgICAgICBkaWREZXF1ZXVlID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAqY3VycmVudFB0ciA9IGN1cnJlbnQtPm5leHRJblF1ZXVl
OwotICAgICAgICAgICAgICAgIGN1cnJlbnQtPm5leHRJblF1ZXVlID0gbnVsbHB0cjsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKHRpbWVUb0JlRmFpciAmJiBkaWREZXF1ZXVlKQotICAgICAgICAgICAgbmV4dEZh
aXJUaW1lID0gdGltZSArIHJhbmRvbS5nZXQoKTsKLQotICAgICAgICBBU1NFUlQoISFxdWV1ZUhl
YWQgPT0gISFxdWV1ZVRhaWwpOwotICAgIH0KLSAgICAKLSAgICBUaHJlYWREYXRhKiBkZXF1ZXVl
KCkKLSAgICB7Ci0gICAgICAgIFRocmVhZERhdGEqIHJlc3VsdCA9IG51bGxwdHI7Ci0gICAgICAg
IGdlbmVyaWNEZXF1ZXVlKAotICAgICAgICAgICAgWyZdIChUaHJlYWREYXRhKiBlbGVtZW50LCBi
b29sKSAtPiBEZXF1ZXVlUmVzdWx0IHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBlbGVtZW50
OwotICAgICAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9wOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgVGhy
ZWFkRGF0YSogcXVldWVIZWFkIHsgbnVsbHB0ciB9OwotICAgIFRocmVhZERhdGEqIHF1ZXVlVGFp
bCB7IG51bGxwdHIgfTsKLQotICAgIC8vIFRoaXMgbG9jayBwcm90ZWN0cyB0aGUgZW50aXJlIGJ1
Y2tldC4gVGhvdSBzaGFsbCBub3QgbWFrZSBjaGFuZ2VzIHRvIEJ1Y2tldCB3aXRob3V0IGhvbGRp
bmcKLSAgICAvLyB0aGlzIGxvY2suCi0gICAgV29yZExvY2sgbG9jazsKLSAgICAKLSAgICBkb3Vi
bGUgbmV4dEZhaXJUaW1lIHsgMCB9OwotICAgIAotICAgIFdlYWtSYW5kb20gcmFuZG9tOwotCi0g
ICAgLy8gUHV0IHNvbWUgZGlzdGFuZSBiZXR3ZWVuIGJ1Y2tldHMgaW4gbWVtb3J5LiBUaGlzIGlz
IG9uZSBvZiBzZXZlcmFsIG1pdGlnYXRpb25zIGFnYWluc3QgZmFsc2UKLSAgICAvLyBzaGFyaW5n
LgotICAgIGNoYXIgcGFkZGluZ1s2NF07Ci19OwotCi1zdHJ1Y3QgSGFzaHRhYmxlOwotCi0vLyBX
ZSB0cmFjayBhbGwgYWxsb2NhdGVkIGhhc2h0YWJsZXMgc28gdGhhdCBoYXNodGFibGUgcmVzaXpp
bmcgZG9lc24ndCBhbmdlciBsZWFrIGRldGVjdG9ycy4KLVZlY3RvcjxIYXNodGFibGUqPiogaGFz
aHRhYmxlczsKLVN0YXRpY1dvcmRMb2NrIGhhc2h0YWJsZXNMb2NrOwotCi1zdHJ1Y3QgSGFzaHRh
YmxlIHsKLSAgICB1bnNpZ25lZCBzaXplOwotICAgIEF0b21pYzxCdWNrZXQqPiBkYXRhWzFdOwot
Ci0gICAgc3RhdGljIEhhc2h0YWJsZSogY3JlYXRlKHVuc2lnbmVkIHNpemUpCi0gICAgewotICAg
ICAgICBBU1NFUlQoc2l6ZSA+PSAxKTsKLSAgICAgICAgCi0gICAgICAgIEhhc2h0YWJsZSogcmVz
dWx0ID0gc3RhdGljX2Nhc3Q8SGFzaHRhYmxlKj4oCi0gICAgICAgICAgICBmYXN0WmVyb2VkTWFs
bG9jKHNpemVvZihIYXNodGFibGUpICsgc2l6ZW9mKEF0b21pYzxCdWNrZXQqPikgKiAoc2l6ZSAt
IDEpKSk7Ci0gICAgICAgIHJlc3VsdC0+c2l6ZSA9IHNpemU7Ci0KLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gVGhpcyBpcyBub3QgZmFzdCBhbmQgaXQncyBub3QgZGF0YS1hY2Nlc3MgcGFyYWxs
ZWwsIGJ1dCB0aGF0J3MgZmluZSwgYmVjYXVzZQotICAgICAgICAgICAgLy8gaGFzaHRhYmxlIHJl
c2l6aW5nIGlzIGd1YXJhbnRlZWQgdG8gYmUgcmFyZSBhbmQgaXQgd2lsbCBuZXZlciBoYXBwZW4g
aW4gc3RlYWR5Ci0gICAgICAgICAgICAvLyBzdGF0ZS4KLSAgICAgICAgICAgIFdvcmRMb2NrSG9s
ZGVyIGxvY2tlcihoYXNodGFibGVzTG9jayk7Ci0gICAgICAgICAgICBpZiAoIWhhc2h0YWJsZXMp
Ci0gICAgICAgICAgICAgICAgaGFzaHRhYmxlcyA9IG5ldyBWZWN0b3I8SGFzaHRhYmxlKj4oKTsK
LSAgICAgICAgICAgIGhhc2h0YWJsZXMtPmFwcGVuZChyZXN1bHQpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSGFzaHRhYmxlKiBoYXNodGFibGUpCi0gICAgewotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBUaGlzIGlzIG5vdCBmYXN0LCBidXQgdGhhdCdzIE9LLiBTZWUgY29tbWVudCBpbiBjcmVh
dGUoKS4KLSAgICAgICAgICAgIFdvcmRMb2NrSG9sZGVyIGxvY2tlcihoYXNodGFibGVzTG9jayk7
Ci0gICAgICAgICAgICBoYXNodGFibGVzLT5yZW1vdmVGaXJzdChoYXNodGFibGUpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBmYXN0RnJlZShoYXNodGFibGUpOwotICAgIH0KLX07Ci0K
LUF0b21pYzxIYXNodGFibGUqPiBoYXNodGFibGU7Ci1BdG9taWM8dW5zaWduZWQ+IG51bVRocmVh
ZHM7Ci0KLS8vIFdpdGggNjQgYnl0ZXMgb2YgcGFkZGluZyBwZXIgYnVja2V0LCBhc3N1bWluZyBh
IGhhc2h0YWJsZSBpcyBmdWxseSBwb3B1bGF0ZWQgd2l0aCBidWNrZXRzLCB0aGUKLS8vIG1lbW9y
eSB1c2FnZSBwZXIgdGhyZWFkIHdpbGwgc3RpbGwgYmUgbGVzcyB0aGFuIDFLQi4KLWNvbnN0IHVu
c2lnbmVkIG1heExvYWRGYWN0b3IgPSAzOwotCi1jb25zdCB1bnNpZ25lZCBncm93dGhGYWN0b3Ig
PSAyOwotCi11bnNpZ25lZCBoYXNoQWRkcmVzcyhjb25zdCB2b2lkKiBhZGRyZXNzKQotewotICAg
IHJldHVybiBXVEY6OlB0ckhhc2g8Y29uc3Qgdm9pZCo+OjpoYXNoKGFkZHJlc3MpOwotfQotCi1I
YXNodGFibGUqIGVuc3VyZUhhc2h0YWJsZSgpCi17Ci0gICAgZm9yICg7OykgewotICAgICAgICBI
YXNodGFibGUqIGN1cnJlbnRIYXNodGFibGUgPSBoYXNodGFibGUubG9hZCgpOwotCi0gICAgICAg
IGlmIChjdXJyZW50SGFzaHRhYmxlKQotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRIYXNodGFi
bGU7Ci0KLSAgICAgICAgaWYgKCFjdXJyZW50SGFzaHRhYmxlKSB7Ci0gICAgICAgICAgICBjdXJy
ZW50SGFzaHRhYmxlID0gSGFzaHRhYmxlOjpjcmVhdGUobWF4TG9hZEZhY3Rvcik7Ci0gICAgICAg
ICAgICBpZiAoaGFzaHRhYmxlLmNvbXBhcmVFeGNoYW5nZVdlYWsobnVsbHB0ciwgY3VycmVudEhh
c2h0YWJsZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGNyZWF0ZWQgaW5pdGlh
bCBoYXNodGFibGUgIiwgUmF3UG9pbnRlcihjdXJyZW50SGFzaHRhYmxlKSwgIlxuIikpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBjdXJyZW50SGFzaHRhYmxlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBIYXNodGFibGU6OmRlc3Ryb3koY3VycmVudEhhc2h0YWJsZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLS8vIExvY2tzIHRoZSBoYXNodGFibGUuIFRoaXMgcmVsb29wcyBpbiBj
YXNlIG9mIHJlaGFzaGluZywgc28gdGhlIGN1cnJlbnQgaGFzaHRhYmxlIG1heSBiZSBkaWZmZXJl
bnQKLS8vIGFmdGVyIHRoaXMgcmV0dXJucyB0aGFuIHdoZW4geW91IGNhbGxlZCBpdC4gR3VhcmFu
dGVlcyB0aGF0IHRoZXJlIGlzIGEgaGFzaHRhYmxlLiBUaGlzIGlzIHByZXR0eQotLy8gc2xvdyBh
bmQgbm90IHNjYWxhYmxlLCBzbyBpdCdzIG9ubHkgdXNlZCBkdXJpbmcgdGhyZWFkIGNyZWF0aW9u
IGFuZCBmb3IgZGVidWdnaW5nL3Rlc3RpbmcuCi1WZWN0b3I8QnVja2V0Kj4gbG9ja0hhc2h0YWJs
ZSgpCi17Ci0gICAgZm9yICg7OykgewotICAgICAgICBIYXNodGFibGUqIGN1cnJlbnRIYXNodGFi
bGUgPSBlbnN1cmVIYXNodGFibGUoKTsKLQotICAgICAgICBBU1NFUlQoY3VycmVudEhhc2h0YWJs
ZSk7Ci0KLSAgICAgICAgLy8gTm93IGZpbmQgYWxsIG9mIHRoZSBidWNrZXRzLiBUaGlzIG1ha2Vz
IHN1cmUgdGhhdCB0aGUgaGFzaHRhYmxlIGlzIGZ1bGwgb2YgYnVja2V0cyBzbyB0aGF0Ci0gICAg
ICAgIC8vIHdlIGNhbiBsb2NrIGFsbCBvZiB0aGUgYnVja2V0cywgbm90IGp1c3QgdGhlIG9uZXMg
dGhhdCBhcmUgbWF0ZXJpYWxpemVkLgotICAgICAgICBWZWN0b3I8QnVja2V0Kj4gYnVja2V0czsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVudEhhc2h0YWJsZS0+c2l6ZTsgaS0tOykg
ewotICAgICAgICAgICAgQXRvbWljPEJ1Y2tldCo+JiBidWNrZXRQb2ludGVyID0gY3VycmVudEhh
c2h0YWJsZS0+ZGF0YVtpXTsKLQotICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAg
ICAgIEJ1Y2tldCogYnVja2V0ID0gYnVja2V0UG9pbnRlci5sb2FkKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIWJ1Y2tldCkgewotICAgICAgICAgICAgICAgICAgICBidWNrZXQgPSBuZXcgQnVj
a2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYnVja2V0UG9pbnRlci5jb21wYXJlRXhj
aGFuZ2VXZWFrKG51bGxwdHIsIGJ1Y2tldCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBidWNrZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJ1Y2tl
dHMuYXBwZW5kKGJ1Y2tldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBOb3cgbG9jayB0aGUgYnVja2V0cyBpbiB0aGUgcmln
aHQgb3JkZXIuCi0gICAgICAgIHN0ZDo6c29ydChidWNrZXRzLmJlZ2luKCksIGJ1Y2tldHMuZW5k
KCkpOwotICAgICAgICBmb3IgKEJ1Y2tldCogYnVja2V0IDogYnVja2V0cykKLSAgICAgICAgICAg
IGJ1Y2tldC0+bG9jay5sb2NrKCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGhhc2h0YWJsZSBkaWRu
J3QgY2hhbmdlICh3YXNuJ3QgcmVoYXNoZWQpIHdoaWxlIHdlIHdlcmUgbG9ja2luZyBpdCwgdGhl
biB3ZSBvd24gaXQKLSAgICAgICAgLy8gbm93LgotICAgICAgICBpZiAoaGFzaHRhYmxlLmxvYWQo
KSA9PSBjdXJyZW50SGFzaHRhYmxlKQotICAgICAgICAgICAgcmV0dXJuIGJ1Y2tldHM7Ci0KLSAg
ICAgICAgLy8gVGhlIGhhc2h0YWJsZSByZWhhc2hlZC4gVW5sb2NrIGV2ZXJ5dGhpbmcgYW5kIHRy
eSBhZ2Fpbi4KLSAgICAgICAgZm9yIChCdWNrZXQqIGJ1Y2tldCA6IGJ1Y2tldHMpCi0gICAgICAg
ICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7Ci0gICAgfQotfQotCi12b2lkIHVubG9ja0hhc2h0
YWJsZShjb25zdCBWZWN0b3I8QnVja2V0Kj4mIGJ1Y2tldHMpCi17Ci0gICAgZm9yIChCdWNrZXQq
IGJ1Y2tldCA6IGJ1Y2tldHMpCi0gICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKLX0KLQot
Ly8gUmVoYXNoIHRoZSBoYXNodGFibGUgdG8gaGFuZGxlIG51bVRocmVhZHMgdGhyZWFkcy4KLXZv
aWQgZW5zdXJlSGFzaHRhYmxlU2l6ZSh1bnNpZ25lZCBudW1UaHJlYWRzKQotewotICAgIC8vIFdl
IHRyeSB0byBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgaGFzaHRhYmxlIHVzZWQgZm9yIHRo
cmVhZCBxdWV1ZXMgaXMgYWx3YXlzIGxhcmdlIGVub3VnaAotICAgIC8vIHRvIGF2b2lkIGNvbGxp
c2lvbnMuIFNvLCBzaW5jZSB3ZSBzdGFydGVkIGEgbmV3IHRocmVhZCwgd2UgbWF5IG5lZWQgdG8g
aW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlCi0gICAgLy8gaGFzaHRhYmxlLiBUaGlzIGRvZXMganVz
dCB0aGF0LiBOb3RlIHRoYXQgd2UgbmV2ZXIgZnJlZSB0aGUgb2xkIHNwaW5lLCBzaW5jZSB3ZSBu
ZXZlciBsb2NrCi0gICAgLy8gYXJvdW5kIHNwaW5lIGFjY2Vzc2VzIChpLmUuIHRoZSAiaGFzaHRh
YmxlIiBnbG9iYWwgdmFyaWFibGUpLgotCi0gICAgLy8gRmlyc3QgZG8gYSBmYXN0IGNoZWNrIHRv
IHNlZSBpZiByZWhhc2hpbmcgaXMgbmVlZGVkLgotICAgIEhhc2h0YWJsZSogb2xkSGFzaHRhYmxl
ID0gaGFzaHRhYmxlLmxvYWQoKTsKLSAgICBpZiAob2xkSGFzaHRhYmxlICYmIHN0YXRpY19jYXN0
PGRvdWJsZT4ob2xkSGFzaHRhYmxlLT5zaXplKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4obnVtVGhy
ZWFkcykgPj0gbWF4TG9hZEZhY3RvcikgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBubyBuZWVkIHRvIHJlaGFz
aCBiZWNhdXNlICIsIG9sZEhhc2h0YWJsZS0+c2l6ZSwgIiAvICIsIG51bVRocmVhZHMsICIgPj0g
IiwgbWF4TG9hZEZhY3RvciwgIlxuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gU2VlbXMgbGlrZSB3ZSAqbWlnaHQqIGhhdmUgdG8gcmVoYXNoLCBzbyBsb2NrIHRoZSBoYXNo
dGFibGUgYW5kIHRyeSBhZ2Fpbi4KLSAgICBWZWN0b3I8QnVja2V0Kj4gYnVja2V0c1RvVW5sb2Nr
ID0gbG9ja0hhc2h0YWJsZSgpOwotCi0gICAgLy8gQ2hlY2sgYWdhaW4sIHNpbmNlIHRoZSBoYXNo
dGFibGUgY291bGQgaGF2ZSByZWhhc2hlZCB3aGlsZSB3ZSB3ZXJlIGxvY2tpbmcgaXQuIEFsc28s
Ci0gICAgLy8gbG9ja0hhc2h0YWJsZSgpIGNyZWF0ZXMgYW4gaW5pdGlhbCBoYXNodGFibGUgZm9y
IHVzLgotICAgIG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7Ci0gICAgaWYgKG9sZEhh
c2h0YWJsZSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KG9sZEhhc2h0YWJsZS0+c2l6ZSkgLyBzdGF0
aWNfY2FzdDxkb3VibGU+KG51bVRocmVhZHMpID49IG1heExvYWRGYWN0b3IpIHsKLSAgICAgICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQo
KSwgIjogYWZ0ZXIgbG9ja2luZywgbm8gbmVlZCB0byByZWhhc2ggYmVjYXVzZSAiLCBvbGRIYXNo
dGFibGUtPnNpemUsICIgLyAiLCBudW1UaHJlYWRzLCAiID49ICIsIG1heExvYWRGYWN0b3IsICJc
biIpKTsKLSAgICAgICAgdW5sb2NrSGFzaHRhYmxlKGJ1Y2tldHNUb1VubG9jayk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8QnVja2V0Kj4gcmV1c2FibGVCdWNrZXRzID0g
YnVja2V0c1RvVW5sb2NrOwotCi0gICAgLy8gT0ssIG5vdyB3ZSByZXNpemUuIEZpcnN0IHdlIGdh
dGhlciBhbGwgdGhyZWFkIGRhdGFzIGZyb20gdGhlIG9sZCBoYXNodGFibGUuIFRoZXNlIHRocmVh
ZCBkYXRhcwotICAgIC8vIGFyZSBwbGFjZWQgaW50byB0aGUgdmVjdG9yIGluIHF1ZXVlIG9yZGVy
LgotICAgIFZlY3RvcjxUaHJlYWREYXRhKj4gdGhyZWFkRGF0YXM7Ci0gICAgZm9yIChCdWNrZXQq
IGJ1Y2tldCA6IHJldXNhYmxlQnVja2V0cykgewotICAgICAgICB3aGlsZSAoVGhyZWFkRGF0YSog
dGhyZWFkRGF0YSA9IGJ1Y2tldC0+ZGVxdWV1ZSgpKQotICAgICAgICAgICAgdGhyZWFkRGF0YXMu
YXBwZW5kKHRocmVhZERhdGEpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG5ld1NpemUgPSBudW1U
aHJlYWRzICogZ3Jvd3RoRmFjdG9yICogbWF4TG9hZEZhY3RvcjsKLSAgICBSRUxFQVNFX0FTU0VS
VChuZXdTaXplID4gb2xkSGFzaHRhYmxlLT5zaXplKTsKLSAgICAKLSAgICBIYXNodGFibGUqIG5l
d0hhc2h0YWJsZSA9IEhhc2h0YWJsZTo6Y3JlYXRlKG5ld1NpemUpOwotICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogY3JlYXRlZCBu
ZXcgaGFzaHRhYmxlOiAiLCBSYXdQb2ludGVyKG5ld0hhc2h0YWJsZSksICJcbiIpKTsKLSAgICBm
b3IgKFRocmVhZERhdGEqIHRocmVhZERhdGEgOiB0aHJlYWREYXRhcykgewotICAgICAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAi
OiByZWhhc2hpbmcgdGhyZWFkIGRhdGEgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhKSwgIiB3aXRo
IGFkZHJlc3MgPSAiLCBSYXdQb2ludGVyKHRocmVhZERhdGEtPmFkZHJlc3MpLCAiXG4iKSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRkcmVzcyh0aHJlYWREYXRhLT5hZGRyZXNzKTsK
LSAgICAgICAgdW5zaWduZWQgaW5kZXggPSBoYXNoICUgbmV3SGFzaHRhYmxlLT5zaXplOwotICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRo
cmVhZCgpLCAiOiBpbmRleCA9ICIsIGluZGV4LCAiXG4iKSk7Ci0gICAgICAgIEJ1Y2tldCogYnVj
a2V0ID0gbmV3SGFzaHRhYmxlLT5kYXRhW2luZGV4XS5sb2FkKCk7Ci0gICAgICAgIGlmICghYnVj
a2V0KSB7Ci0gICAgICAgICAgICBpZiAocmV1c2FibGVCdWNrZXRzLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICBidWNrZXQgPSBuZXcgQnVja2V0KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgYnVja2V0ID0gcmV1c2FibGVCdWNrZXRzLnRha2VMYXN0KCk7Ci0gICAgICAg
ICAgICBuZXdIYXNodGFibGUtPmRhdGFbaW5kZXhdLnN0b3JlKGJ1Y2tldCk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGJ1Y2tldC0+ZW5xdWV1ZSh0aHJlYWREYXRhKTsKLSAgICB9Ci0g
ICAgCi0gICAgLy8gQXQgdGhpcyBwb2ludCB0aGVyZSBtYXkgYmUgc29tZSBidWNrZXRzIGxlZnQg
dW5yZXVzZWQuIFRoaXMgY291bGQgZWFzaWx5IGhhcHBlbiBpZiB0aGUKLSAgICAvLyBudW1iZXIg
b2YgZW5xdWV1ZWQgdGhyZWFkcyByaWdodCBub3cgaXMgbG93IGJ1dCB0aGUgaGlnaCB3YXRlcm1h
cmsgb2YgdGhlIG51bWJlciBvZiB0aHJlYWRzCi0gICAgLy8gZW5xdWV1ZWQgd2FzIGhpZ2guIFdl
IHBsYWNlIHRoZXNlIGJ1Y2tldHMgaW50byB0aGUgaGFzaHRhYmxlIGJhc2ljYWxseSBhdCByYW5k
b20sIGp1c3QgdG8KLSAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3QgbGVhayB0aGVtLgotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdIYXNodGFibGUtPnNpemUgJiYgIXJldXNhYmxlQnVj
a2V0cy5pc0VtcHR5KCk7ICsraSkgewotICAgICAgICBBdG9taWM8QnVja2V0Kj4mIGJ1Y2tldFB0
ciA9IG5ld0hhc2h0YWJsZS0+ZGF0YVtpXTsKLSAgICAgICAgaWYgKGJ1Y2tldFB0ci5sb2FkKCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYnVja2V0UHRyLnN0b3JlKHJldXNhYmxl
QnVja2V0cy50YWtlTGFzdCgpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gU2luY2Ugd2UgaW5jcmVh
c2VkIHRoZSBzaXplIG9mIHRoZSBoYXNodGFibGUsIHdlIHNob3VsZCBoYXZlIGV4aGF1c3RlZCBv
dXIgcHJlYWxsb2NhdGVkCi0gICAgLy8gYnVja2V0cyBieSBub3cuCi0gICAgQVNTRVJUKHJldXNh
YmxlQnVja2V0cy5pc0VtcHR5KCkpOwotICAgIAotICAgIC8vIE9LLCByaWdodCBub3cgdGhlIG9s
ZCBoYXNodGFibGUgaXMgbG9ja2VkIHVwIGFuZCB0aGUgbmV3IGhhc2h0YWJsZSBpcyByZWFkeSB0
byByb2NrIGFuZAotICAgIC8vIHJvbGwuIEFmdGVyIHdlIGluc3RhbGwgdGhlIG5ldyBoYXNodGFi
bGUsIHdlIGNhbiByZWxlYXNlIGFsbCBidWNrZXQgbG9ja3MuCi0gICAgCi0gICAgYm9vbCByZXN1
bHQgPSBoYXNodGFibGUuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKG9sZEhhc2h0YWJsZSwgbmV3SGFz
aHRhYmxlKSA9PSBvbGRIYXNodGFibGU7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKLQot
ICAgIHVubG9ja0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2spOwotfQotCi1UaHJlYWREYXRhOjpU
aHJlYWREYXRhKCkKLSAgICA6IHRocmVhZChUaHJlYWQ6OmN1cnJlbnQoKSkKLXsKLSAgICB1bnNp
Z25lZCBjdXJyZW50TnVtVGhyZWFkczsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVuc2lnbmVk
IG9sZE51bVRocmVhZHMgPSBudW1UaHJlYWRzLmxvYWQoKTsKLSAgICAgICAgY3VycmVudE51bVRo
cmVhZHMgPSBvbGROdW1UaHJlYWRzICsgMTsKLSAgICAgICAgaWYgKG51bVRocmVhZHMuY29tcGFy
ZUV4Y2hhbmdlV2VhayhvbGROdW1UaHJlYWRzLCBjdXJyZW50TnVtVGhyZWFkcykpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBlbnN1cmVIYXNodGFibGVTaXplKGN1cnJlbnROdW1U
aHJlYWRzKTsKLX0KLQotVGhyZWFkRGF0YTo6flRocmVhZERhdGEoKQotewotICAgIGZvciAoOzsp
IHsKLSAgICAgICAgdW5zaWduZWQgb2xkTnVtVGhyZWFkcyA9IG51bVRocmVhZHMubG9hZCgpOwot
ICAgICAgICBpZiAobnVtVGhyZWFkcy5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZE51bVRocmVhZHMs
IG9sZE51bVRocmVhZHMgLSAxKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotVGhy
ZWFkRGF0YSogbXlUaHJlYWREYXRhKCkKLXsKLSAgICBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8UmVm
UHRyPFRocmVhZERhdGE+LCBDYW5CZUdDVGhyZWFkOjpUcnVlPiogdGhyZWFkRGF0YTsKLSAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7Ci0gICAgc3RkOjpjYWxsX29uY2Uo
Ci0gICAgICAgIGluaXRpYWxpemVPbmNlLAotICAgICAgICBbXSB7Ci0gICAgICAgICAgICB0aHJl
YWREYXRhID0gbmV3IFRocmVhZFNwZWNpZmljPFJlZlB0cjxUaHJlYWREYXRhPiwgQ2FuQmVHQ1Ro
cmVhZDo6VHJ1ZT4oKTsKLSAgICAgICAgfSk7Ci0gICAgCi0gICAgUmVmUHRyPFRocmVhZERhdGE+
JiByZXN1bHQgPSAqKnRocmVhZERhdGE7Ci0gICAgCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAg
IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBUaHJlYWREYXRhKCkpOwotICAgIAotICAgIHJldHVybiBy
ZXN1bHQuZ2V0KCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1ib29sIGVucXVl
dWUoY29uc3Qgdm9pZCogYWRkcmVzcywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKLXsKLSAgICB1
bnNpZ25lZCBoYXNoID0gaGFzaEFkZHJlc3MoYWRkcmVzcyk7Ci0KLSAgICBmb3IgKDs7KSB7Ci0g
ICAgICAgIEhhc2h0YWJsZSogbXlIYXNodGFibGUgPSBlbnN1cmVIYXNodGFibGUoKTsKLSAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBoYXNoICUgbXlIYXNodGFibGUtPnNpemU7Ci0gICAgICAgIEF0
b21pYzxCdWNrZXQqPiYgYnVja2V0UG9pbnRlciA9IG15SGFzaHRhYmxlLT5kYXRhW2luZGV4XTsK
LSAgICAgICAgQnVja2V0KiBidWNrZXQ7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAg
IGJ1Y2tldCA9IGJ1Y2tldFBvaW50ZXIubG9hZCgpOwotICAgICAgICAgICAgaWYgKCFidWNrZXQp
IHsKLSAgICAgICAgICAgICAgICBidWNrZXQgPSBuZXcgQnVja2V0KCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFidWNrZXRQb2ludGVyLmNvbXBhcmVFeGNoYW5nZVdlYWsobnVsbHB0ciwgYnVja2V0
KSkgewotICAgICAgICAgICAgICAgICAgICBkZWxldGUgYnVja2V0OwotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAg
IGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBlbnF1ZXVlaW5nIG9udG8gYnVj
a2V0ICIsIFJhd1BvaW50ZXIoYnVja2V0KSwgIiB3aXRoIGluZGV4ICIsIGluZGV4LCAiIGZvciBh
ZGRyZXNzICIsIFJhd1BvaW50ZXIoYWRkcmVzcyksICIgd2l0aCBoYXNoICIsIGhhc2gsICJcbiIp
KTsKLSAgICAgICAgYnVja2V0LT5sb2NrLmxvY2soKTsKLQotICAgICAgICAvLyBBdCB0aGlzIHBv
aW50IHRoZSBoYXNodGFibGUgY291bGQgaGF2ZSByZWhhc2hlZCB1bmRlciB1cy4KLSAgICAgICAg
aWYgKGhhc2h0YWJsZS5sb2FkKCkgIT0gbXlIYXNodGFibGUpIHsKLSAgICAgICAgICAgIGJ1Y2tl
dC0+bG9jay51bmxvY2soKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9IGZ1bmN0b3IoKTsKLSAgICAgICAgYm9vbCBy
ZXN1bHQ7Ci0gICAgICAgIGlmICh0aHJlYWREYXRhKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
cHJvY2VlZGluZyB0byBlbnF1ZXVlICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YSksICJcbiIpKTsK
LSAgICAgICAgICAgIGJ1Y2tldC0+ZW5xdWV1ZSh0aHJlYWREYXRhKTsKLSAgICAgICAgICAgIHJl
c3VsdCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7
Ci0gICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci19Ci0KLWVudW0gY2xhc3MgQnVja2V0TW9kZSB7Ci0gICAgRW5zdXJlTm9uRW1wdHks
Ci0gICAgSWdub3JlRW1wdHkKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERlcXVldWVGdW5jdG9y
LCB0eXBlbmFtZSBGaW5pc2hGdW5jdG9yPgotYm9vbCBkZXF1ZXVlKAotICAgIGNvbnN0IHZvaWQq
IGFkZHJlc3MsIEJ1Y2tldE1vZGUgYnVja2V0TW9kZSwgY29uc3QgRGVxdWV1ZUZ1bmN0b3ImIGRl
cXVldWVGdW5jdG9yLAotICAgIGNvbnN0IEZpbmlzaEZ1bmN0b3ImIGZpbmlzaEZ1bmN0b3IpCi17
Ci0gICAgdW5zaWduZWQgaGFzaCA9IGhhc2hBZGRyZXNzKGFkZHJlc3MpOwotCi0gICAgZm9yICg7
OykgewotICAgICAgICBIYXNodGFibGUqIG15SGFzaHRhYmxlID0gZW5zdXJlSGFzaHRhYmxlKCk7
Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaGFzaCAlIG15SGFzaHRhYmxlLT5zaXplOwotICAg
ICAgICBBdG9taWM8QnVja2V0Kj4mIGJ1Y2tldFBvaW50ZXIgPSBteUhhc2h0YWJsZS0+ZGF0YVtp
bmRleF07Ci0gICAgICAgIEJ1Y2tldCogYnVja2V0ID0gYnVja2V0UG9pbnRlci5sb2FkKCk7Ci0g
ICAgICAgIGlmICghYnVja2V0KSB7Ci0gICAgICAgICAgICBpZiAoYnVja2V0TW9kZSA9PSBCdWNr
ZXRNb2RlOjpJZ25vcmVFbXB0eSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBidWNrZXQgPSBidWNrZXRQb2lu
dGVyLmxvYWQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWJ1Y2tldCkgewotICAgICAgICAgICAg
ICAgICAgICBidWNrZXQgPSBuZXcgQnVja2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
YnVja2V0UG9pbnRlci5jb21wYXJlRXhjaGFuZ2VXZWFrKG51bGxwdHIsIGJ1Y2tldCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBidWNrZXQ7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7Ci0KLSAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUg
aGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNoZWQgdW5kZXIgdXMuCi0gICAgICAgIGlmIChoYXNo
dGFibGUubG9hZCgpICE9IG15SGFzaHRhYmxlKSB7Ci0gICAgICAgICAgICBidWNrZXQtPmxvY2su
dW5sb2NrKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJ1
Y2tldC0+Z2VuZXJpY0RlcXVldWUoZGVxdWV1ZUZ1bmN0b3IpOwotICAgICAgICBib29sIHJlc3Vs
dCA9ICEhYnVja2V0LT5xdWV1ZUhlYWQ7Ci0gICAgICAgIGZpbmlzaEZ1bmN0b3IocmVzdWx0KTsK
LSAgICAgICAgYnVja2V0LT5sb2NrLnVubG9jaygpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLU5FVkVSX0lOTElORSBQYXJr
aW5nTG90OjpQYXJrUmVzdWx0IFBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25hbGx5SW1wbCgKLSAg
ICBjb25zdCB2b2lkKiBhZGRyZXNzLAotICAgIGNvbnN0IFNjb3BlZExhbWJkYTxib29sKCk+JiB2
YWxpZGF0aW9uLAotICAgIGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKCk+JiBiZWZvcmVTbGVlcCwK
LSAgICBjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQpCi17Ci0gICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBw
YXJraW5nLlxuIikpOwotICAgIAotICAgIFRocmVhZERhdGEqIG1lID0gbXlUaHJlYWREYXRhKCk7
Ci0gICAgbWUtPnRva2VuID0gMDsKLQotICAgIC8vIEd1YXJkIGFnYWluc3Qgc29tZW9uZSBjYWxs
aW5nIHBhcmtDb25kaXRpb25hbGx5KCkgcmVjdXJzaXZlbHkgZnJvbSBiZWZvcmVTbGVlcCgpLgot
ICAgIFJFTEVBU0VfQVNTRVJUKCFtZS0+YWRkcmVzcyk7Ci0KLSAgICBib29sIGVucXVldWVSZXN1
bHQgPSBlbnF1ZXVlKAotICAgICAgICBhZGRyZXNzLAotICAgICAgICBbJl0gKCkgLT4gVGhyZWFk
RGF0YSogewotICAgICAgICAgICAgaWYgKCF2YWxpZGF0aW9uKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgICAgIG1lLT5hZGRyZXNzID0gYWRkcmVzczsKLSAg
ICAgICAgICAgIHJldHVybiBtZTsKLSAgICAgICAgfSk7Ci0KLSAgICBpZiAoIWVucXVldWVSZXN1
bHQpCi0gICAgICAgIHJldHVybiBQYXJrUmVzdWx0KCk7Ci0KLSAgICBiZWZvcmVTbGVlcCgpOwot
ICAgIAotICAgIGJvb2wgZGlkR2V0RGVxdWV1ZWQ7Ci0gICAgewotICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKLSAgICAgICAgd2hpbGUgKG1lLT5hZGRyZXNzICYm
IHRpbWVvdXQubm93V2l0aFNhbWVDbG9jaygpIDwgdGltZW91dCkgewotICAgICAgICAgICAgbWUt
PnBhcmtpbmdDb25kaXRpb24udGltZWRXYWl0KAotICAgICAgICAgICAgICAgIG1lLT5wYXJraW5n
TG9jaywgdGltZW91dC5hcHByb3hpbWF0ZVdhbGxUaW1lKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52
YWx1ZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSBmb3Ig
dGhlIE9TIHRvIGRlY2lkZSBub3QgdG8gd2FpdC4gSWYgaXQgZG9lcyB0aGF0IHRoZW4gaXQgd2ls
bCBhbHNvCi0gICAgICAgICAgICAvLyBkZWNpZGUgbm90IHRvIHJlbGVhc2UgdGhlIGxvY2suIElm
IHRoZXJlJ3MgYSBidWcgaW4gdGhlIHRpbWUgbWF0aCwgdGhlbiB0aGlzIGNvdWxkCi0gICAgICAg
ICAgICAvLyByZXN1bHQgaW4gYSBkZWFkbG9jay4gRmxhc2hpbmcgdGhlIGxvY2sgbWVhbnMgdGhh
dCBhdCB3b3JzdCBpdCdzIGp1c3QgYSBDUFUtZWF0aW5nCi0gICAgICAgICAgICAvLyBzcGluLgot
ICAgICAgICAgICAgbWUtPnBhcmtpbmdMb2NrLnVubG9jaygpOwotICAgICAgICAgICAgbWUtPnBh
cmtpbmdMb2NrLmxvY2soKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoIW1lLT5hZGRyZXNz
IHx8IG1lLT5hZGRyZXNzID09IGFkZHJlc3MpOwotICAgICAgICBkaWRHZXREZXF1ZXVlZCA9ICFt
ZS0+YWRkcmVzczsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGRpZEdldERlcXVldWVkKSB7Ci0gICAg
ICAgIC8vIEdyZWF0ISBXZSBhY3R1YWxseSBnb3QgZGVxdWV1ZWQgcmF0aGVyIHRoYW4gdGhlIHRp
bWVvdXQgZXhwaXJpbmcuCi0gICAgICAgIFBhcmtSZXN1bHQgcmVzdWx0OwotICAgICAgICByZXN1
bHQud2FzVW5wYXJrZWQgPSB0cnVlOwotICAgICAgICByZXN1bHQudG9rZW4gPSBtZS0+dG9rZW47
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLy8gSGF2ZSB0byByZW1vdmUg
b3Vyc2VsdmVzIGZyb20gdGhlIHF1ZXVlIHNpbmNlIHdlIHRpbWVkIG91dCBhbmQgbm9ib2R5IGhh
cyBkZXF1ZXVlZCB1cyB5ZXQuCi0KLSAgICBib29sIGRpZERlcXVldWUgPSBmYWxzZTsKLSAgICBk
ZXF1ZXVlKAotICAgICAgICBhZGRyZXNzLCBCdWNrZXRNb2RlOjpJZ25vcmVFbXB0eSwKLSAgICAg
ICAgWyZdIChUaHJlYWREYXRhKiBlbGVtZW50LCBib29sKSB7Ci0gICAgICAgICAgICBpZiAoZWxl
bWVudCA9PSBtZSkgewotICAgICAgICAgICAgICAgIGRpZERlcXVldWUgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9wOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6Oklnbm9yZTsKLSAgICAgICAg
fSwKLSAgICAgICAgW10gKGJvb2wpIHsgfSk7Ci0gICAgCi0gICAgLy8gSWYgZGlkRGVxdWV1ZSBp
cyB0cnVlLCB0aGVuIHdlIGRlcXVldWVkIG91cnNlbHZlcy4gVGhpcyBtZWFucyB0aGF0IHdlIHdl
cmUgbm90IHVucGFya2VkLgotICAgIC8vIElmIGRpZERlcXVldWUgaXMgZmFsc2UsIHRoZW4gc29t
ZW9uZSB1bnBhcmtlZCB1cy4KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghbWUtPm5leHRJblF1
ZXVlKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG5vIG1hdHRlciB3aGF0LCBtZS0+YWRkcmVz
cyBpcyBudWxsIGFmdGVyIHRoaXMgcG9pbnQuCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKLSAgICAgICAgaWYgKCFkaWREZXF1ZXVlKSB7Ci0gICAg
ICAgICAgICAvLyBJZiB3ZSBkaWQgbm90IGRlcXVldWUgb3Vyc2VsdmVzLCB0aGVuIHNvbWVvbmUg
ZWxzZSBkaWQuIFRoZXkgd2lsbCBzZXQgb3VyIGFkZHJlc3MgdG8KLSAgICAgICAgICAgIC8vIG51
bGwuIFdlIGRvbid0IHdhbnQgdG8gcHJvY2VlZCB1bnRpbCB0aGV5IGRvIHRoaXMsIGJlY2F1c2Ug
b3RoZXJ3aXNlLCB0aGV5IG1heSBzZXQKLSAgICAgICAgICAgIC8vIG91ciBhZGRyZXNzIHRvIG51
bGwgaW4gc29tZSBkaXN0YW50IGZ1dHVyZSB3aGVuIHdlJ3JlIGFscmVhZHkgdHJ5aW5nIHRvIHdh
aXQgZm9yCi0gICAgICAgICAgICAvLyBvdGhlciB0aGluZ3MuCi0gICAgICAgICAgICB3aGlsZSAo
bWUtPmFkZHJlc3MpCi0gICAgICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdCht
ZS0+cGFya2luZ0xvY2spOwotICAgICAgICB9Ci0gICAgICAgIG1lLT5hZGRyZXNzID0gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBQYXJrUmVzdWx0IHJlc3VsdDsKLSAgICByZXN1bHQud2FzVW5wYXJr
ZWQgPSAhZGlkRGVxdWV1ZTsKLSAgICBpZiAoIWRpZERlcXVldWUpIHsKLSAgICAgICAgLy8gSWYg
d2Ugd2VyZSB1bnBhcmtlZCB0aGVuIHRoZXJlIHNob3VsZCBiZSBhIHRva2VuLgotICAgICAgICBy
ZXN1bHQudG9rZW4gPSBtZS0+dG9rZW47Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LU5FVkVSX0lOTElORSBQYXJraW5nTG90OjpVbnBhcmtSZXN1bHQgUGFya2luZ0xvdDo6dW5wYXJr
T25lKGNvbnN0IHZvaWQqIGFkZHJlc3MpCi17Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgb25lLlxuIikpOwot
ICAgIAotICAgIFVucGFya1Jlc3VsdCByZXN1bHQ7Ci0KLSAgICBSZWZQdHI8VGhyZWFkRGF0YT4g
dGhyZWFkRGF0YTsKLSAgICByZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzID0gZGVxdWV1ZSgKLSAg
ICAgICAgYWRkcmVzcywKLSAgICAgICAgLy8gV2h5IGlzIHRoaXMgaGVyZT8KLSAgICAgICAgLy8g
RklYTUU6IEl0IHNlZW1zIGxpa2UgdGhpcyBjb3VsZCBiZSBJZ25vcmVFbXB0eSwgYnV0IEkgc3dp
dGNoZWQgdGhpcyB0byBFbnN1cmVOb25FbXB0eQotICAgICAgICAvLyB3aXRob3V0IGV4cGxhbmF0
aW9uIGluIHIxOTk3NjAuIFdlIG5lZWQgaXQgdG8gdXNlIEVuc3VyZU5vbkVtcHR5IGlmIHdlIG5l
ZWQgdG8gcGVyZm9ybQotICAgICAgICAvLyBzb21lIG9wZXJhdGlvbiB3aGlsZSBob2xkaW5nIHRo
ZSBidWNrZXQgbG9jaywgd2hpY2ggdXN1YWxseSBnb2VzIGludG8gdGhlIGZpbmlzaCBmdW5jLgot
ICAgICAgICAvLyBCdXQgaWYgdGhhdCBvcGVyYXRpb24gaXMgYSBuby1vcCwgdGhlbiBpdCdzIG5v
dCBjbGVhciB3aHkgd2UgbmVlZCB0aGlzLgotICAgICAgICBCdWNrZXRNb2RlOjpFbnN1cmVOb25F
bXB0eSwKLSAgICAgICAgWyZdIChUaHJlYWREYXRhKiBlbGVtZW50LCBib29sKSB7Ci0gICAgICAg
ICAgICBpZiAoZWxlbWVudC0+YWRkcmVzcyAhPSBhZGRyZXNzKQotICAgICAgICAgICAgICAgIHJl
dHVybiBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU7Ci0gICAgICAgICAgICB0aHJlYWREYXRhID0gZWxl
bWVudDsKLSAgICAgICAgICAgIHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgPSB0cnVlOwotICAgICAg
ICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZFN0b3A7Ci0gICAgICAgIH0sCi0g
ICAgICAgIFtdIChib29sKSB7IH0pOwotCi0gICAgaWYgKCF0aHJlYWREYXRhKSB7Ci0gICAgICAg
IEFTU0VSVCghcmVzdWx0LmRpZFVucGFya1RocmVhZCk7Ci0gICAgICAgIHJlc3VsdC5tYXlIYXZl
TW9yZVRocmVhZHMgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAg
Ci0gICAgQVNTRVJUKHRocmVhZERhdGEtPmFkZHJlc3MpOwotICAgIAotICAgIHsKLSAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKLSAgICAgICAgdGhy
ZWFkRGF0YS0+YWRkcmVzcyA9IG51bGxwdHI7Ci0gICAgICAgIHRocmVhZERhdGEtPnRva2VuID0g
MDsKLSAgICB9Ci0gICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlvbi5zaWduYWwoKTsKLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU5FVkVSX0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OnVu
cGFya09uZUltcGwoCi0gICAgY29uc3Qgdm9pZCogYWRkcmVzcywKLSAgICBjb25zdCBTY29wZWRM
YW1iZGE8aW50cHRyX3QoUGFya2luZ0xvdDo6VW5wYXJrUmVzdWx0KT4mIGNhbGxiYWNrKQotewot
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQo
KSwgIjogdW5wYXJraW5nIG9uZSB0aGUgaGFyZCB3YXkuXG4iKSk7Ci0gICAgCi0gICAgUmVmUHRy
PFRocmVhZERhdGE+IHRocmVhZERhdGE7Ci0gICAgYm9vbCB0aW1lVG9CZUZhaXIgPSBmYWxzZTsK
LSAgICBkZXF1ZXVlKAotICAgICAgICBhZGRyZXNzLAotICAgICAgICBCdWNrZXRNb2RlOjpFbnN1
cmVOb25FbXB0eSwKLSAgICAgICAgWyZdIChUaHJlYWREYXRhKiBlbGVtZW50LCBib29sIHBhc3Nl
ZFRpbWVUb0JlRmFpcikgewotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmFkZHJlc3MgIT0gYWRk
cmVzcykKLSAgICAgICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJlc3VsdDo6SWdub3JlOwotICAg
ICAgICAgICAgdGhyZWFkRGF0YSA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICB0aW1lVG9CZUZhaXIg
PSBwYXNzZWRUaW1lVG9CZUZhaXI7Ci0gICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJlc3VsdDo6
UmVtb3ZlQW5kU3RvcDsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdIChib29sIG1heUhhdmVNb3Jl
VGhyZWFkcykgewotICAgICAgICAgICAgVW5wYXJrUmVzdWx0IHJlc3VsdDsKLSAgICAgICAgICAg
IHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgPSAhIXRocmVhZERhdGE7Ci0gICAgICAgICAgICByZXN1
bHQubWF5SGF2ZU1vcmVUaHJlYWRzID0gcmVzdWx0LmRpZFVucGFya1RocmVhZCAmJiBtYXlIYXZl
TW9yZVRocmVhZHM7Ci0gICAgICAgICAgICBpZiAodGltZVRvQmVGYWlyKQotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRocmVhZERhdGEpOwotICAgICAgICAgICAgcmVzdWx0LnRpbWVU
b0JlRmFpciA9IHRpbWVUb0JlRmFpcjsKLSAgICAgICAgICAgIGludHB0cl90IHRva2VuID0gY2Fs
bGJhY2socmVzdWx0KTsKLSAgICAgICAgICAgIGlmICh0aHJlYWREYXRhKQotICAgICAgICAgICAg
ICAgIHRocmVhZERhdGEtPnRva2VuID0gdG9rZW47Ci0gICAgICAgIH0pOwotCi0gICAgaWYgKCF0
aHJlYWREYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQodGhyZWFkRGF0YS0+YWRk
cmVzcyk7Ci0gICAgCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkRGF0
YS0+cGFya2luZ0xvY2spOwotICAgICAgICB0aHJlYWREYXRhLT5hZGRyZXNzID0gbnVsbHB0cjsK
LSAgICB9Ci0gICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIHRocmVhZERhdGEgbWF5IGRpZS4gR29v
ZCB0aGluZyB3ZSBoYXZlIGEgUmVmUHRyPD4gb24gaXQuCi0gICAgdGhyZWFkRGF0YS0+cGFya2lu
Z0NvbmRpdGlvbi5zaWduYWwoKTsKLX0KLQotTkVWRVJfSU5MSU5FIHVuc2lnbmVkIFBhcmtpbmdM
b3Q6OnVucGFya0NvdW50KGNvbnN0IHZvaWQqIGFkZHJlc3MsIHVuc2lnbmVkIGNvdW50KQotewot
ICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJraW5n
IGNvdW50ID0gIiwgY291bnQsICIgZnJvbSAiLCBSYXdQb2ludGVyKGFkZHJlc3MpLCAiLlxuIikp
OwotICAgIAotICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFkRGF0YT4sIDg+IHRocmVhZERhdGFzOwot
ICAgIGRlcXVldWUoCi0gICAgICAgIGFkZHJlc3MsCi0gICAgICAgIC8vIEZJWE1FOiBJdCBzZWVt
cyBsaWtlIHRoaXMgb3VnaHQgdG8gYmUgRW5zdXJlTm9uRW1wdHkgaWYgd2UgZm9sbG93IHdoYXQg
dW5wYXJrT25lKCkgZG9lcywKLSAgICAgICAgLy8gYnV0IHRoYXQgc2VlbXMgd3JvbmcuCi0gICAg
ICAgIEJ1Y2tldE1vZGU6Oklnbm9yZUVtcHR5LAotICAgICAgICBbJl0gKFRocmVhZERhdGEqIGVs
ZW1lbnQsIGJvb2wpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAg
IGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBPYnNlcnZpbmcgZWxlbWVudCB3
aXRoIGFkZHJlc3MgPSAiLCBSYXdQb2ludGVyKGVsZW1lbnQtPmFkZHJlc3MpLCAiXG4iKSk7Ci0g
ICAgICAgICAgICBpZiAoZWxlbWVudC0+YWRkcmVzcyAhPSBhZGRyZXNzKQotICAgICAgICAgICAg
ICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU7Ci0gICAgICAgICAgICB0aHJlYWREYXRh
cy5hcHBlbmQoZWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAodGhyZWFkRGF0YXMuc2l6ZSgpID09
IGNvdW50KQotICAgICAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRT
dG9wOwotICAgICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVl
OwotICAgICAgICB9LAotICAgICAgICBbXSAoYm9vbCkgeyB9KTsKLQotICAgIGZvciAoUmVmUHRy
PFRocmVhZERhdGE+JiB0aHJlYWREYXRhIDogdGhyZWFkRGF0YXMpIHsKLSAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
dW5wYXJraW5nICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS5nZXQoKSksICIgd2l0aCBhZGRyZXNz
ICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS0+YWRkcmVzcyksICJcbiIpKTsKLSAgICAgICAgQVNT
RVJUKHRocmVhZERhdGEtPmFkZHJlc3MpOwotICAgICAgICB7Ci0gICAgICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIodGhyZWFkRGF0YS0+cGFya2luZ0xvY2spOwotICAgICAgICAgICAgdGhyZWFk
RGF0YS0+YWRkcmVzcyA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyZWFkRGF0YS0+
cGFya2luZ0NvbmRpdGlvbi5zaWduYWwoKTsKLSAgICB9Ci0KLSAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGRvbmUgdW5wYXJraW5n
LlxuIikpOwotICAgIAotICAgIHJldHVybiB0aHJlYWREYXRhcy5zaXplKCk7Ci19Ci0KLU5FVkVS
X0lOTElORSB2b2lkIFBhcmtpbmdMb3Q6OnVucGFya0FsbChjb25zdCB2b2lkKiBhZGRyZXNzKQot
ewotICAgIHVucGFya0NvdW50KGFkZHJlc3MsIFVJTlRfTUFYKTsKLX0KLQotTkVWRVJfSU5MSU5F
IHZvaWQgUGFya2luZ0xvdDo6Zm9yRWFjaEltcGwoY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoVGhy
ZWFkJiwgY29uc3Qgdm9pZCopPiYgY2FsbGJhY2spCi17Ci0gICAgVmVjdG9yPEJ1Y2tldCo+IGJ1
Y2tldHNUb1VubG9jayA9IGxvY2tIYXNodGFibGUoKTsKLQotICAgIEhhc2h0YWJsZSogY3VycmVu
dEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gY3Vy
cmVudEhhc2h0YWJsZS0+c2l6ZTsgaS0tOykgewotICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IGN1
cnJlbnRIYXNodGFibGUtPmRhdGFbaV0ubG9hZCgpOwotICAgICAgICBpZiAoIWJ1Y2tldCkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKFRocmVhZERhdGEqIGN1cnJlbnRUaHJl
YWREYXRhID0gYnVja2V0LT5xdWV1ZUhlYWQ7IGN1cnJlbnRUaHJlYWREYXRhOyBjdXJyZW50VGhy
ZWFkRGF0YSA9IGN1cnJlbnRUaHJlYWREYXRhLT5uZXh0SW5RdWV1ZSkKLSAgICAgICAgICAgIGNh
bGxiYWNrKGN1cnJlbnRUaHJlYWREYXRhLT50aHJlYWQuZ2V0KCksIGN1cnJlbnRUaHJlYWREYXRh
LT5hZGRyZXNzKTsKLSAgICB9Ci0gICAgCi0gICAgdW5sb2NrSGFzaHRhYmxlKGJ1Y2tldHNUb1Vu
bG9jayk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvUGFya2luZ0xvdC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL1BhcmtpbmdMb3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODQ4N2FhYTE5ZGUxZDA2MDQ5ZTMwNzRiOGU4YWE1ZjdiNGQ1YzU5ZC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvUGFya2luZ0xvdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIFdURl9QYXJraW5nTG90X2gKLSNkZWZpbmUgV1RGX1BhcmtpbmdMb3RfaAotCi0jaW5jbHVk
ZSA8d3RmL0F0b21pY3MuaD4KLSNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+Ci0jaW5jbHVk
ZSA8d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQot
Y2xhc3MgVGhyZWFkOwotCi1jbGFzcyBQYXJraW5nTG90IHsKLSAgICBQYXJraW5nTG90KCkgPSBk
ZWxldGU7Ci0gICAgUGFya2luZ0xvdChjb25zdCBQYXJraW5nTG90JikgPSBkZWxldGU7Ci0KLXB1
YmxpYzoKLSAgICAvLyBQYXJraW5nTG90IHdpbGwgYWNjZXB0IGFueSBraW5kIG9mIHRpbWUgYW5k
IGNvbnZlcnQgaXQgaW50ZXJuYWxseSwgYnV0IHRoaXMgdHlwZWRlZiB0ZWxscwotICAgIC8vIHlv
dSB3aGF0IGtpbmQgb2YgdGltZSBQYXJraW5nTG90IHdvdWxkIGJlIGFibGUgdG8gdXNlIHdpdGhv
dXQgY29udmVyc2lvbnMuIEl0J3Mgc2FkIHRoYXQKLSAgICAvLyB0aGlzIGlzIFdhbGxUaW1lIG5v
dCBNb25vdG9uaWNUaW1lLCBidXQgdGhhdCdzIGp1c3QgaG93IE9TIHdhaXQgZnVuY3Rpb25zIHdv
cmsuIEhvd2V2ZXIsCi0gICAgLy8gYmVjYXVzZSBQYXJraW5nTG90IGV2YWx1YXRlcyB3aGV0aGVy
IGl0IHNob3VsZCB3YWl0IGJ5IGNoZWNraW5nIGlmIHlvdXIgdGltZSBoYXMgcGFzc2VkCi0gICAg
Ly8gdXNpbmcgd2hhdGV2ZXIgY2xvY2sgeW91IHVzZWQsIHNwZWNpZnlpbmcgdGltZW91dHMgaW4g
TW9ub3RvbmljVGltZSBpcyBzZW1hbnRpY2FsbHkgYmV0dGVyLgotICAgIC8vIEZvciBleGFtcGxl
LCBpZiB0aGUgdXNlciBzZXRzIGhpcyBjb21wdXRlcidzIGNsb2NrIGJhY2sgZHVyaW5nIHRoZSB0
aW1lIHRoYXQgeW91IHdhbnRlZCB0bwotICAgIC8vIHdhaXQgZm9yIG9uZSBzZWNvbmQsIGFuZCB5
b3Ugc3BlY2lmaWVkIHRoZSB0aW1lb3V0IHVzaW5nIHRoZSBNb25vdG9uaWNUaW1lLCB0aGVuIFBh
cmtpbmdMb3QKLSAgICAvLyB3aWxsIGJlIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgeW91ciBv
bmUgc2Vjb25kIGhhcyBlbGFwc2VkLgotICAgIHR5cGVkZWYgV2FsbFRpbWUgVGltZTsKLSAgICAK
LSAgICAvLyBQYXJrcyB0aGUgdGhyZWFkIGluIGEgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBn
aXZlbiBhZGRyZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVsbC4gVGhlCi0gICAgLy8gcGFya2luZyBv
bmx5IHN1Y2NlZWRzIGlmIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGls
ZSB0aGUgcXVldWUgbG9jayBpcyBoZWxkLgotICAgIC8vCi0gICAgLy8gSWYgdmFsaWRhdGlvbiBy
ZXR1cm5zIGZhbHNlLCBpdCB3aWxsIHVubG9jayB0aGUgaW50ZXJuYWwgcGFya2luZyBxdWV1ZSBh
bmQgdGhlbiBpdCB3aWxsCi0gICAgLy8gcmV0dXJuIGEgbnVsbCBQYXJrUmVzdWx0ICh3YXNVbnBh
cmtlZCA9IGZhbHNlLCB0b2tlbiA9IDApIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcgZWxzZS4KLSAg
ICAvLwotICAgIC8vIElmIHZhbGlkYXRpb24gcmV0dXJucyB0cnVlLCBpdCB3aWxsIGVucXVldWUg
dGhlIHRocmVhZCwgdW5sb2NrIHRoZSBwYXJraW5nIHF1ZXVlIGxvY2ssIGNhbGwKLSAgICAvLyB0
aGUgYmVmb3JlU2xlZXAgZnVuY3Rpb24sIGFuZCB0aGVuIGl0IHdpbGwgc2xlZXAgc28gbG9uZyBh
cyB0aGUgdGhyZWFkIGNvbnRpbnVlcyB0byBiZSBvbiB0aGUKLSAgICAvLyBxdWV1ZSBhbmQgdGhl
IHRpbWVvdXQgaGFzbid0IGZpcmVkLiBGaW5hbGx5LCB0aGlzIHJldHVybnMgd2FzVW5wYXJrZWQg
PSB0cnVlIGlmIHdlIGFjdHVhbGx5Ci0gICAgLy8gZ290IHVucGFya2VkIG9yIHdhc1VucGFya2Vk
ID0gZmFsc2UgaWYgdGhlIHRpbWVvdXQgd2FzIGhpdC4gV2hlbiB3YXNVbnBhcmtlZCA9IHRydWUs
IHRoZQotICAgIC8vIHRva2VuIHdpbGwgY29udGFpbiB3aGF0ZXZlciB0b2tlbiB3YXMgcmV0dXJu
ZWQgZnJvbSB0aGUgY2FsbGJhY2sgdG8gdW5wYXJrT25lKCksIG9yIDAgaWYgdGhlCi0gICAgLy8g
dGhyZWFkIHdhcyB1bnBhcmtlZCB1c2luZyB1bnBhcmtBbGwoKSBvciB0aGUgZm9ybSBvZiB1bnBh
cmtPbmUoKSB0aGF0IGRvZXNuJ3QgdGFrZSBhCi0gICAgLy8gY2FsbGJhY2suCi0gICAgLy8KLSAg
ICAvLyBOb3RlIHRoYXQgYmVmb3JlU2xlZXAgaXMgY2FsbGVkIHdpdGggbm8gbG9ja3MgaGVsZCwg
c28gaXQncyBPSyB0byBkbyBwcmV0dHkgbXVjaCBhbnl0aGluZyBzbwotICAgIC8vIGxvbmcgYXMg
eW91IGRvbid0IHJlY3Vyc2l2ZWx5IGNhbGwgcGFya0NvbmRpdGlvbmFsbHkoKS4gWW91IGNhbiBj
YWxsIHVucGFya09uZSgpL3VucGFya0FsbCgpCi0gICAgLy8gdGhvdWdoLiBJdCdzIHVzZWZ1bCB0
byB1c2UgYmVmb3JlU2xlZXAoKSB0byB1bmxvY2sgc29tZSBtdXRleCBpbiB0aGUgaW1wbGVtZW50
YXRpb24gb2YKLSAgICAvLyBDb25kaXRpb246OndhaXQoKS4KLSAgICBzdHJ1Y3QgUGFya1Jlc3Vs
dCB7Ci0gICAgICAgIGJvb2wgd2FzVW5wYXJrZWQgeyBmYWxzZSB9OwotICAgICAgICBpbnRwdHJf
dCB0b2tlbiB7IDAgfTsKLSAgICB9OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbGlkYXRpb25G
dW5jdG9yLCB0eXBlbmFtZSBCZWZvcmVTbGVlcEZ1bmN0b3I+Ci0gICAgc3RhdGljIFBhcmtSZXN1
bHQgcGFya0NvbmRpdGlvbmFsbHkoCi0gICAgICAgIGNvbnN0IHZvaWQqIGFkZHJlc3MsCi0gICAg
ICAgIGNvbnN0IFZhbGlkYXRpb25GdW5jdG9yJiB2YWxpZGF0aW9uLAotICAgICAgICBjb25zdCBC
ZWZvcmVTbGVlcEZ1bmN0b3ImIGJlZm9yZVNsZWVwLAotICAgICAgICBjb25zdCBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQpCi0gICAgewotICAgICAgICByZXR1cm4gcGFya0NvbmRp
dGlvbmFsbHlJbXBsKAotICAgICAgICAgICAgYWRkcmVzcywKLSAgICAgICAgICAgIHNjb3BlZExh
bWJkYVJlZjxib29sKCk+KHZhbGlkYXRpb24pLAotICAgICAgICAgICAgc2NvcGVkTGFtYmRhUmVm
PHZvaWQoKT4oYmVmb3JlU2xlZXApLAotICAgICAgICAgICAgdGltZW91dCk7Ci0gICAgfQotCi0g
ICAgLy8gU2ltcGxlIHZlcnNpb24gb2YgcGFya0NvbmRpdGlvbmFsbHkoKSB0aGF0IGNvdmVycyB0
aGUgbW9zdCBjb21tb24gY2FzZTogeW91IHdhbnQgdG8gcGFyawotICAgIC8vIGluZGVmaW5pdGVs
eSBzbyBsb25nIGFzIHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gYWRkcmVzcyBoYXNuJ3QgY2hhbmdl
ZC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBQYXJr
UmVzdWx0IGNvbXBhcmVBbmRQYXJrKGNvbnN0IEF0b21pYzxUPiogYWRkcmVzcywgVSBleHBlY3Rl
ZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwYXJrQ29uZGl0aW9uYWxseSgKLSAgICAgICAgICAg
IGFkZHJlc3MsCi0gICAgICAgICAgICBbYWRkcmVzcywgZXhwZWN0ZWRdICgpIC0+IGJvb2wgewot
ICAgICAgICAgICAgICAgIFUgdmFsdWUgPSBhZGRyZXNzLT5sb2FkKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlID09IGV4cGVjdGVkOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
IFtdICgpIHsgfSwKLSAgICAgICAgICAgIFRpbWU6OmluZmluaXR5KCkpOwotICAgIH0KLQotICAg
IC8vIFVucGFya2luZyBzdGF0dXMgZ2l2ZW4gdG8geW91IGFueXRpbWUgeW91IHVucGFya09uZSgp
LgotICAgIHN0cnVjdCBVbnBhcmtSZXN1bHQgewotICAgICAgICAvLyBUcnVlIGlmIHNvbWUgdGhy
ZWFkIHdhcyB1bnBhcmtlZC4KLSAgICAgICAgYm9vbCBkaWRVbnBhcmtUaHJlYWQgeyBmYWxzZSB9
OwotICAgICAgICAvLyBUcnVlIGlmIHRoZXJlIG1heSBiZSBtb3JlIHRocmVhZHMgb24gdGhpcyBh
ZGRyZXNzLiBUaGlzIG1heSBiZSBjb25zZXJ2YXRpdmVseSB0cnVlLgotICAgICAgICBib29sIG1h
eUhhdmVNb3JlVGhyZWFkcyB7IGZhbHNlIH07Ci0gICAgICAgIC8vIFRoaXMgYml0IGlzIHJhbmRv
bWx5IHNldCB0byB0cnVlIGluZGljYXRpbmcgdGhhdCBpdCBtYXkgYmUgcHJvZml0YWJsZSB0byB1
bmxvY2sgdGhlIGxvY2sKLSAgICAgICAgLy8gdXNpbmcgYSBmYWlyIHVubG9ja2luZyBwcm90b2Nv
bC4gVGhpcyBpcyBtb3N0IHVzZWZ1bCB3aGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAotICAg
ICAgICAvLyB1bnBhcmtPbmUoYWRkcmVzcywgY2FsbGJhY2spLgotICAgICAgICBib29sIHRpbWVU
b0JlRmFpciB7IGZhbHNlIH07Ci0gICAgfTsKLQotICAgIC8vIFVucGFya3Mgb25lIHRocmVhZCBm
cm9tIHRoZSBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNh
bm5vdCBiZSBudWxsLgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBtYXkgc3RpbGwgYmUg
b3RoZXIgdGhyZWFkcyBvbiB0aGF0IHF1ZXVlLCBvciBmYWxzZSBpZiB0aGVyZSBkZWZpbml0ZWx5
Ci0gICAgLy8gYXJlIG5vIG1vcmUgdGhyZWFkcyBvbiB0aGUgcXVldWUuCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBVbnBhcmtSZXN1bHQgdW5wYXJrT25lKGNvbnN0IHZvaWQqIGFkZHJl
c3MpOwotCi0gICAgLy8gVGhpcyBpcyBhbiBleHBlcnQtbW9kZSB2ZXJzaW9uIG9mIHVucGFya09u
ZSgpIHRoYXQgYWxsb3dzIGZvciByZWFsbHkgZ29vZCB0aHVuZGVyaW5nIGhlcmQKLSAgICAvLyBh
dm9pZGFuY2UgYW5kIGV2ZW50dWFsIHN0b2NoYXN0aWMgZmFpcm5lc3MgaW4gYWRhcHRpdmUgbXV0
ZXhlcy4KLSAgICAvLwotICAgIC8vIFVucGFya3Mgb25lIHRocmVhZCBmcm9tIHRoZSBxdWV1ZSBh
c3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGFkZHJlc3MsIGFuZCBjYWxscyB0aGUgZ2l2ZW4KLSAg
ICAvLyBjYWxsYmFjayB3aGlsZSB0aGUgYWRkcmVzcyBpcyBsb2NrZWQuIFJlcG9ydHMgdG8gdGhl
IGNhbGxiYWNrIHdoZXRoZXIgYW55IHRocmVhZCBnb3QKLSAgICAvLyB1bnBhcmtlZCwgd2hldGhl
ciB0aGVyZSBtYXkgYmUgYW55IG90aGVyIHRocmVhZHMgc3RpbGwgb24gdGhlIHF1ZXVlLCBhbmQg
d2hldGhlciB0aGlzIG1heSBiZQotICAgIC8vIGEgZ29vZCB0aW1lIHRvIGRvIGZhaXIgdW5sb2Nr
aW5nLiBUaGUgY2FsbGJhY2sgcmV0dXJucyBhbiBpbnRwdHJfdCB0b2tlbiwgd2hpY2ggaXMgcmV0
dXJuZWQKLSAgICAvLyB0byB0aGUgdW5wYXJrZWQgdGhyZWFkIHZpYSBQYXJrUmVzdWx0Ojp0b2tl
bi4KLSAgICAvLwotICAgIC8vIFdURjo6TG9jayBhbmQgV1RGOjpDb25kaXRpb24gYm90aCB1c2Ug
dGhpcyBmb3JtIG9mIHVucGFya09uZSgpIGJlY2F1c2UgaXQgYWxsb3dzIHRoZW0gdG8gdXNlCi0g
ICAgLy8gdGhlIFBhcmtpbmdMb3QncyBpbnRlcm5hbCBxdWV1ZSBsb2NrIHRvIHNlcmlhbGl6ZSBz
b21lIGRlY2lzaW9uLW1ha2luZy4gRm9yIGV4YW1wbGUsIGlmCi0gICAgLy8gVW5wYXJrUmVzdWx0
OjptYXlIYXZlTW9yZVRocmVhZHMgaXMgZmFsc2UgaW5zaWRlIHRoZSBjYWxsYmFjaywgdGhlbiB3
ZSBrbm93IHRoYXQgYXQgdGhhdAotICAgIC8vIG1vbWVudCBub2JvZHkgY2FuIGFkZCBhbnkgdGhy
ZWFkcyB0byB0aGUgcXVldWUgYmVjYXVzZSB0aGUgcXVldWUgbG9jayBpcyBzdGlsbCBoZWxkLiBB
bHNvLAotICAgIC8vIFdURjo6TG9jayB1c2VzIHRoZSB0aW1lVG9CZUZhaXIgYW5kIHRva2VuIG1l
Y2hhbmlzbSB0byBpbXBsZW1lbnQgZXZlbnR1YWwgZmFpcm5lc3MuCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2FsbGJhY2s+Ci0gICAgc3RhdGljIHZvaWQgdW5wYXJrT25lKGNvbnN0IHZvaWQqIGFk
ZHJlc3MsIGNvbnN0IENhbGxiYWNrJiBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHVucGFya09u
ZUltcGwoYWRkcmVzcywgc2NvcGVkTGFtYmRhUmVmPGludHB0cl90KFVucGFya1Jlc3VsdCk+KGNh
bGxiYWNrKSk7Ci0gICAgfQotICAgIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdW5z
aWduZWQgdW5wYXJrQ291bnQoY29uc3Qgdm9pZCogYWRkcmVzcywgdW5zaWduZWQgY291bnQpOwot
Ci0gICAgLy8gVW5wYXJrcyBldmVyeSB0aHJlYWQgZnJvbSB0aGUgcXVldWUgYXNzb2NpYXRlZCB3
aXRoIHRoZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVsbC4KLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJrQWxsKGNvbnN0IHZvaWQqIGFkZHJlc3MpOwot
Ci0gICAgLy8gTG9ja3MgdGhlIHBhcmtpbmcgbG90IGFuZCB3YWxrcyBhbGwgb2YgdGhlIHBhcmtl
ZCB0aHJlYWRzIGFuZCB0aGUgYWRkcmVzc2VzIHRoZXkgYXJlIHdhaXRpbmcKLSAgICAvLyBvbi4g
VGhyZWFkcyB0aGF0IGFyZSBvbiB0aGUgc2FtZSBxdWV1ZSBhcmUgZ3VhcmFudGVlZCB0byBiZSB3
YWxrZWQgZnJvbSBmaXJzdCB0byBsYXN0LCBidXQgdGhlCi0gICAgLy8gcXVldWVzIG1heSBiZSBy
YW5kb21seSBpbnRlcmxlYXZlZC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBxdWV1ZSBmb3IgYWRkcmVz
cyBBMSBoYXMgVDEgYW5kIFQyIGFuZAotICAgIC8vIHRoZSBxdWV1ZSBmb3IgYWRkcmVzcyBBMiBo
YXMgVDMgYW5kIFQ0LCB0aGVuIHlvdSBtaWdodCBzZWUgaXRlcmF0aW9uIG9yZGVycyBsaWtlOgot
ICAgIC8vCi0gICAgLy8gQTEsVDEgQTEsVDIgQTIsVDMgQTIsVDQKLSAgICAvLyBBMixUMyBBMixU
NCBBMSxUMSBBMSxUMgotICAgIC8vIEExLFQxIEEyLFQzIEExLFQyIEEyLFQ0Ci0gICAgLy8gQTEs
VDEgQTIsVDMgQTIsVDQgQTEsVDIKLSAgICAvLwotICAgIC8vIEFzIHdlbGwgYXMgbWFueSBvdGhl
ciBwb3NzaWJsZSBpbnRlcmxlYXZpbmdzIHRoYXQgYWxsIGhhdmUgVDEgYmVmb3JlIFQyIGFuZCBU
MyBiZWZvcmUgVDQgYnV0IGFyZQotICAgIC8vIG90aGVyd2lzZSB1bmNvbnN0cmFpbmVkLiBUaGlz
IG1ldGhvZCBpcyB1c2VmdWwgcHJpbWFyaWx5IGZvciBkZWJ1Z2dpbmcuIEl0J3MgYWxzbyB1c2Vk
IGJ5IHVuaXQKLSAgICAvLyB0ZXN0cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAg
IHN0YXRpYyB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYgZnVuYykKLSAgICB7Ci0gICAgICAgIGZv
ckVhY2hJbXBsKHNjb3BlZExhbWJkYVJlZjx2b2lkKFRocmVhZCYsIGNvbnN0IHZvaWQqKT4oZnVu
YykpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFBh
cmtSZXN1bHQgcGFya0NvbmRpdGlvbmFsbHlJbXBsKAotICAgICAgICBjb25zdCB2b2lkKiBhZGRy
ZXNzLAotICAgICAgICBjb25zdCBTY29wZWRMYW1iZGE8Ym9vbCgpPiYgdmFsaWRhdGlvbiwKLSAg
ICAgICAgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoKT4mIGJlZm9yZVNsZWVwLAotICAgICAgICBj
b25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWVvdXQpOwotICAgIAotICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1bnBhcmtPbmVJbXBsKAotICAgICAgICBjb25zdCB2
b2lkKiBhZGRyZXNzLCBjb25zdCBTY29wZWRMYW1iZGE8aW50cHRyX3QoVW5wYXJrUmVzdWx0KT4m
IGNhbGxiYWNrKTsKLQotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBmb3JFYWNo
SW1wbChjb25zdCBTY29wZWRMYW1iZGE8dm9pZChUaHJlYWQmLCBjb25zdCB2b2lkKik+Jik7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpQYXJraW5nTG90OwotCi0jZW5k
aWYgLy8gV1RGX1BhcmtpbmdMb3RfaAotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvUGxhdGZvcm0uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L3d0Zi9QbGF0Zm9ybS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjJlZDc3OTkx
OTU3ZDA5ZmZmN2FlNTdkNzc2YTFjNjA0YmMyYzBjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Q
bGF0Zm9ybS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
V1RGX1BsYXRmb3JtX2gKLSNkZWZpbmUgV1RGX1BsYXRmb3JtX2gKLQotLyogSW5jbHVkZSBjb21w
aWxlciBzcGVjaWZpYyBtYWNyb3MgKi8KLSNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KLQotLyog
PT09PSBQTEFURk9STSBoYW5kbGVzIE9TLCBvcGVyYXRpbmcgZW52aXJvbm1lbnQsIGdyYXBoaWNz
IEFQSSwgYW5kCi0gICBDUFUuIFRoaXMgbWFjcm8gd2lsbCBiZSBwaGFzZWQgb3V0IGluIGZhdm9y
IG9mIHBsYXRmb3JtIGFkYXB0YXRpb24KLSAgIG1hY3JvcywgcG9saWN5IGRlY2lzaW9uIG1hY3Jv
cywgYW5kIHRvcC1sZXZlbCBwb3J0IGRlZmluaXRpb25zLiA9PT09ICovCi0jZGVmaW5lIFBMQVRG
T1JNKFdURl9GRUFUVVJFKSAoZGVmaW5lZCBXVEZfUExBVEZPUk1fIyNXVEZfRkVBVFVSRSAgJiYg
V1RGX1BMQVRGT1JNXyMjV1RGX0ZFQVRVUkUpCi0KLQotLyogPT09PSBQbGF0Zm9ybSBhZGFwdGF0
aW9uIG1hY3JvczogdGhlc2UgZGVzY3JpYmUgcHJvcGVydGllcyBvZiB0aGUgdGFyZ2V0IGVudmly
b25tZW50LiA9PT09ICovCi0KLS8qIENQVSgpIC0gdGhlIHRhcmdldCBDUFUgYXJjaGl0ZWN0dXJl
ICovCi0jZGVmaW5lIENQVShXVEZfRkVBVFVSRSkgKGRlZmluZWQgV1RGX0NQVV8jI1dURl9GRUFU
VVJFICAmJiBXVEZfQ1BVXyMjV1RGX0ZFQVRVUkUpCi0vKiBIQVZFKCkgLSBzcGVjaWZpYyBzeXN0
ZW0gZmVhdHVyZXMgKGhlYWRlcnMsIGZ1bmN0aW9ucyBvciBzaW1pbGFyKSB0aGF0IGFyZSBwcmVz
ZW50IG9yIG5vdCAqLwotI2RlZmluZSBIQVZFKFdURl9GRUFUVVJFKSAoZGVmaW5lZCBIQVZFXyMj
V1RGX0ZFQVRVUkUgICYmIEhBVkVfIyNXVEZfRkVBVFVSRSkKLS8qIE9TKCkgLSB1bmRlcmx5aW5n
IG9wZXJhdGluZyBzeXN0ZW07IG9ubHkgdG8gYmUgdXNlZCBmb3IgbWFuZGF0ZWQgbG93LWxldmVs
IHNlcnZpY2VzIGxpa2UgCi0gICB2aXJ0dWFsIG1lbW9yeSwgbm90IHRvIGNob29zZSBhIEdVSSB0
b29sa2l0ICovCi0jZGVmaW5lIE9TKFdURl9GRUFUVVJFKSAoZGVmaW5lZCBXVEZfT1NfIyNXVEZf
RkVBVFVSRSAgJiYgV1RGX09TXyMjV1RGX0ZFQVRVUkUpCi0KLQotLyogPT09PSBQb2xpY3kgZGVj
aXNpb24gbWFjcm9zOiB0aGVzZSBkZWZpbmUgcG9saWN5IGNob2ljZXMgZm9yIGEgcGFydGljdWxh
ciBwb3J0LiA9PT09ICovCi0KLS8qIFVTRSgpIC0gdXNlIGEgcGFydGljdWxhciB0aGlyZC1wYXJ0
eSBsaWJyYXJ5IG9yIG9wdGlvbmFsIE9TIHNlcnZpY2UgKi8KLSNkZWZpbmUgVVNFKFdURl9GRUFU
VVJFKSAoZGVmaW5lZCBVU0VfIyNXVEZfRkVBVFVSRSAgJiYgVVNFXyMjV1RGX0ZFQVRVUkUpCi0v
KiBFTkFCTEUoKSAtIHR1cm4gb24gYSBzcGVjaWZpYyBmZWF0dXJlIG9mIFdlYktpdCAqLwotI2Rl
ZmluZSBFTkFCTEUoV1RGX0ZFQVRVUkUpIChkZWZpbmVkIEVOQUJMRV8jI1dURl9GRUFUVVJFICAm
JiBFTkFCTEVfIyNXVEZfRkVBVFVSRSkKLQotCi0vKiA9PT09IENQVSgpIC0gdGhlIHRhcmdldCBD
UFUgYXJjaGl0ZWN0dXJlID09PT0gKi8KLQotLyogVGhpcyBhbHNvIGRlZmluZXMgQ1BVKEJJR19F
TkRJQU4pIG9yIENQVShNSURETEVfRU5ESUFOKSBvciBuZWl0aGVyLCBhcyBhcHByb3ByaWF0ZS4g
Ki8KLQotLyogQ1BVKEFMUEhBKSAtIERFQyBBbHBoYSAqLwotI2lmIGRlZmluZWQoX19hbHBoYV9f
KQotI2RlZmluZSBXVEZfQ1BVX0FMUEhBIDEKLSNlbmRpZgotCi0vKiBDUFUoSFBQQSkgLSBIUCBQ
QS1SSVNDICovCi0jaWYgZGVmaW5lZChfX2hwcGFfXykgfHwgZGVmaW5lZChfX2hwcGE2NF9fKQot
I2RlZmluZSBXVEZfQ1BVX0hQUEEgMQotI2RlZmluZSBXVEZfQ1BVX0JJR19FTkRJQU4gMQotI2Vu
ZGlmCi0KLS8qIENQVShJQTY0KSAtIEl0YW5pdW0gLyBJQS02NCAqLwotI2lmIGRlZmluZWQoX19p
YTY0X18pCi0jZGVmaW5lIFdURl9DUFVfSUE2NCAxCi0vKiAzMi1iaXQgbW9kZSBvbiBJdGFuaXVt
ICovCi0jaWYgIWRlZmluZWQoX19MUDY0X18pCi0jZGVmaW5lIFdURl9DUFVfSUE2NF8zMiAxCi0j
ZW5kaWYKLSNlbmRpZgotCi0vKiBDUFUoTUlQUykgLSBNSVBTIDMyLWJpdCBhbmQgNjQtYml0ICov
Ci0jaWYgKGRlZmluZWQobWlwcykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChNSVBT
KSB8fCBkZWZpbmVkKF9NSVBTXykgfHwgZGVmaW5lZChfX21pcHM2NCkpCi0jaWYgZGVmaW5lZChf
QUJJNjQpICYmIChfTUlQU19TSU0gPT0gX0FCSTY0KQotI2RlZmluZSBXVEZfQ1BVX01JUFM2NCAx
Ci0jZGVmaW5lIFdURl9NSVBTX0FSQ0ggX19taXBzNjQKLSNlbHNlCi0jZGVmaW5lIFdURl9DUFVf
TUlQUyAxCi0jZGVmaW5lIFdURl9NSVBTX0FSQ0ggX19taXBzCi0jZW5kaWYKLSNpZiBkZWZpbmVk
KF9fTUlQU0VCX18pCi0jZGVmaW5lIFdURl9DUFVfQklHX0VORElBTiAxCi0jZW5kaWYKLSNkZWZp
bmUgV1RGX01JUFNfUElDIChkZWZpbmVkIF9fUElDX18pCi0jZGVmaW5lIFdURl9NSVBTX0lTQSh2
KSAoZGVmaW5lZCBXVEZfTUlQU19BUkNIICYmIFdURl9NSVBTX0FSQ0ggPT0gdikKLSNkZWZpbmUg
V1RGX01JUFNfSVNBX0FUX0xFQVNUKHYpIChkZWZpbmVkIFdURl9NSVBTX0FSQ0ggJiYgV1RGX01J
UFNfQVJDSCA+PSB2KQotI2RlZmluZSBXVEZfTUlQU19BUkNIX1JFViBfX21pcHNfaXNhX3Jldgot
I2RlZmluZSBXVEZfTUlQU19JU0FfUkVWKHYpIChkZWZpbmVkIFdURl9NSVBTX0FSQ0hfUkVWICYm
IFdURl9NSVBTX0FSQ0hfUkVWID09IHYpCi0jZGVmaW5lIFdURl9NSVBTX0RPVUJMRV9GTE9BVCAo
ZGVmaW5lZCBfX21pcHNfaGFyZF9mbG9hdCAmJiAhZGVmaW5lZCBfX21pcHNfc2luZ2xlX2Zsb2F0
KQotI2RlZmluZSBXVEZfTUlQU19GUDY0IChkZWZpbmVkIF9fbWlwc19mcHIgJiYgX19taXBzX2Zw
ciA9PSA2NCkKLS8qIE1JUFMgcmVxdWlyZXMgYWxsb2NhdG9ycyB0byB1c2UgYWxpZ25lZCBtZW1v
cnkgKi8KLSNkZWZpbmUgVVNFX0FSRU5BX0FMTE9DX0FMSUdOTUVOVF9JTlRFR0VSIDEKLSNlbmRp
ZiAvKiBNSVBTICovCi0KLS8qIENQVShQUEM2NCkgLSBQb3dlclBDIDY0LWJpdCBCaWcgRW5kaWFu
ICovCi0jaWYgKCAgZGVmaW5lZChfX3BwYzY0X18pICAgICAgXAotICAgIHx8IGRlZmluZWQoX19Q
UEM2NF9fKSkgICAgIFwKLSAgICAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSBcCi0gICAgJiYg
KF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfQklHX0VORElBTl9fKQotI2RlZmluZSBXVEZfQ1BV
X1BQQzY0IDEKLSNkZWZpbmUgV1RGX0NQVV9CSUdfRU5ESUFOIDEKLSNlbmRpZgotCi0vKiBDUFUo
UFBDNjQpIC0gUG93ZXJQQyA2NC1iaXQgTGl0dGxlIEVuZGlhbiAqLwotI2lmICggICBkZWZpbmVk
KF9fcHBjNjRfXykgICAgIFwKLSAgICB8fCBkZWZpbmVkKF9fUFBDNjRfXykgICAgICBcCi0gICAg
fHwgZGVmaW5lZChfX3BwYzY0bGVfXykgICAgXAotICAgIHx8IGRlZmluZWQoX19QUEM2NExFX18p
KSAgIFwKLSAgICAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSBcCi0gICAgJiYgKF9fQllURV9P
UkRFUl9fID09IF9fT1JERVJfTElUVExFX0VORElBTl9fKQotI2RlZmluZSBXVEZfQ1BVX1BQQzY0
TEUgMQotI2VuZGlmCi0KLS8qIENQVShQUEMpIC0gUG93ZXJQQyAzMi1iaXQgKi8KLSNpZiAoICBk
ZWZpbmVkKF9fcHBjX18pICAgICAgICBcCi0gICAgfHwgZGVmaW5lZChfX1BQQ19fKSAgICAgICAg
XAotICAgIHx8IGRlZmluZWQoX19wb3dlcnBjX18pICAgIFwKLSAgICB8fCBkZWZpbmVkKF9fcG93
ZXJwYykgICAgICBcCi0gICAgfHwgZGVmaW5lZChfX1BPV0VSUENfXykgICAgXAotICAgIHx8IGRl
ZmluZWQoX01fUFBDKSAgICAgICAgIFwKLSAgICB8fCBkZWZpbmVkKF9fUFBDKSkgICAgICAgICBc
Ci0gICAgJiYgIUNQVShQUEM2NCkgICAgICAgICAgICAgXAotICAgICYmIGRlZmluZWQoX19CWVRF
X09SREVSX18pIFwKLSAgICAmJiAoX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFO
X18pCi0jZGVmaW5lIFdURl9DUFVfUFBDIDEKLSNkZWZpbmUgV1RGX0NQVV9CSUdfRU5ESUFOIDEK
LSNlbmRpZgotCi0vKiBDUFUoU0g0KSAtIFN1cGVySCBTSC00ICovCi0jaWYgZGVmaW5lZChfX1NI
NF9fKQotI2RlZmluZSBXVEZfQ1BVX1NINCAxCi0jZW5kaWYKLQotLyogQ1BVKFMzOTBYKSAtIFMz
OTAgNjQtYml0ICovCi0jaWYgZGVmaW5lZChfX3MzOTB4X18pCi0jZGVmaW5lIFdURl9DUFVfUzM5
MFggMQotI2RlZmluZSBXVEZfQ1BVX0JJR19FTkRJQU4gMQotI2VuZGlmCi0KLS8qIENQVShTMzkw
KSAtIFMzOTAgMzItYml0ICovCi0jaWYgKCAgZGVmaW5lZChfX3MzOTBfXykgICAgICAgIFwKLSAg
ICAmJiAhQ1BVKFMzOTBYKSkKLSNkZWZpbmUgV1RGX0NQVV9TMzkwIDEKLSNkZWZpbmUgV1RGX0NQ
VV9CSUdfRU5ESUFOIDEKLSNlbmRpZgotCi0vKiBDUFUoWDg2KSAtIGkzODYgLyB4ODYgMzItYml0
ICovCi0jaWYgICBkZWZpbmVkKF9faTM4Nl9fKSBcCi0gICAgfHwgZGVmaW5lZChpMzg2KSAgICAg
XAotICAgIHx8IGRlZmluZWQoX01fSVg4NikgIFwKLSAgICB8fCBkZWZpbmVkKF9YODZfKSAgICBc
Ci0gICAgfHwgZGVmaW5lZChfX1RIV19JTlRFTCkKLSNkZWZpbmUgV1RGX0NQVV9YODYgMQotCi0j
aWYgZGVmaW5lZChfX1NTRTJfXykgfHwgKGRlZmluZWQoX01fSVg4Nl9GUCkgJiYgX01fSVg4Nl9G
UCA+PSAyKQotI2RlZmluZSBXVEZfQ1BVX1g4Nl9TU0UyIDEKLSNlbmRpZgotCi0jZW5kaWYKLQot
LyogQ1BVKFg4Nl82NCkgLSBBTUQ2NCAvIEludGVsNjQgLyB4ODZfNjQgNjQtYml0ICovCi0jaWYg
ICBkZWZpbmVkKF9feDg2XzY0X18pIFwKLSAgICB8fCBkZWZpbmVkKF9NX1g2NCkKLSNkZWZpbmUg
V1RGX0NQVV9YODZfNjQgMQotI2RlZmluZSBXVEZfQ1BVX1g4Nl9TU0UyIDEKLSNlbmRpZgotCi0v
KiBDUFUoQVJNNjQpIC0gQXBwbGUgKi8KLSNpZiAoZGVmaW5lZChfX2FybTY0X18pICYmIGRlZmlu
ZWQoX19BUFBMRV9fKSkgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKLSNkZWZpbmUgV1RGX0NQVV9B
Uk02NCAxCi0KLSNpZiBkZWZpbmVkKF9fYXJtNjRlX18pCi0jZGVmaW5lIFdURl9DUFVfQVJNNjRF
IDEKLSNlbmRpZgotI2VuZGlmCi0KLS8qIENQVShBUk0pIC0gQVJNLCBhbnkgdmVyc2lvbiovCi0j
ZGVmaW5lIFdURl9BUk1fQVJDSF9BVF9MRUFTVChOKSAoQ1BVKEFSTSkgJiYgV1RGX0FSTV9BUkNI
X1ZFUlNJT04gPj0gTikKLQotI2lmICAgZGVmaW5lZChhcm0pIFwKLSAgICB8fCBkZWZpbmVkKF9f
YXJtX18pIFwKLSAgICB8fCBkZWZpbmVkKEFSTSkgXAotICAgIHx8IGRlZmluZWQoX0FSTV8pCi0j
ZGVmaW5lIFdURl9DUFVfQVJNIDEKLQotI2lmIGRlZmluZWQoX19BUk1fUENTX1ZGUCkKLSNkZWZp
bmUgV1RGX0NQVV9BUk1fSEFSREZQIDEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FSTUVCX18p
Ci0jZGVmaW5lIFdURl9DUFVfQklHX0VORElBTiAxCi0KLSNlbGlmICFkZWZpbmVkKF9fQVJNX0VB
QklfXykgXAotICAgICYmICFkZWZpbmVkKF9fRUFCSV9fKSBcCi0gICAgJiYgIWRlZmluZWQoX19W
RlBfRlBfXykgXAotICAgICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpCi0jZGVmaW5lIFdURl9DUFVf
TUlERExFX0VORElBTiAxCi0KLSNlbmRpZgotCi0vKiBTZXQgV1RGX0FSTV9BUkNIX1ZFUlNJT04g
Ki8KLSNpZiAgIGRlZmluZWQoX19BUk1fQVJDSF80X18pIFwKLSAgICB8fCBkZWZpbmVkKF9fQVJN
X0FSQ0hfNFRfXykgXAotICAgIHx8IGRlZmluZWQoX19NQVJNX0FSTVY0X18pCi0jZGVmaW5lIFdU
Rl9BUk1fQVJDSF9WRVJTSU9OIDQKLQotI2VsaWYgZGVmaW5lZChfX0FSTV9BUkNIXzVfXykgXAot
ICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF81VF9fKSBcCi0gICAgfHwgZGVmaW5lZChfX01BUk1f
QVJNVjVfXykKLSNkZWZpbmUgV1RGX0FSTV9BUkNIX1ZFUlNJT04gNQotCi0jZWxpZiBkZWZpbmVk
KF9fQVJNX0FSQ0hfNUVfXykgXAotICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF81VEVfXykgXAot
ICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF81VEVKX18pCi0jZGVmaW5lIFdURl9BUk1fQVJDSF9W
RVJTSU9OIDUKLS8qQVJNdjVURSByZXF1aXJlcyBhbGxvY2F0b3JzIHRvIHVzZSBhbGlnbmVkIG1l
bW9yeSovCi0jZGVmaW5lIFVTRV9BUkVOQV9BTExPQ19BTElHTk1FTlRfSU5URUdFUiAxCi0KLSNl
bGlmIGRlZmluZWQoX19BUk1fQVJDSF82X18pIFwKLSAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hf
NkpfXykgXAotICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF82S19fKSBcCi0gICAgfHwgZGVmaW5l
ZChfX0FSTV9BUkNIXzZaX18pIFwKLSAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNlpLX18pIFwK
LSAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNlQyX18pIFwKLSAgICB8fCBkZWZpbmVkKF9fQVJN
VjZfXykKLSNkZWZpbmUgV1RGX0FSTV9BUkNIX1ZFUlNJT04gNgotCi0jZWxpZiBkZWZpbmVkKF9f
QVJNX0FSQ0hfN0FfXykgXAotICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF83S19fKSBcCi0gICAg
fHwgZGVmaW5lZChfX0FSTV9BUkNIXzdSX18pIFwKLSAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hf
N1NfXykKLSNkZWZpbmUgV1RGX0FSTV9BUkNIX1ZFUlNJT04gNwotCi0jZWxpZiBkZWZpbmVkKF9f
QVJNX0FSQ0hfOF9fKSBcCi0gICAgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzhBX18pCi0jZGVmaW5l
IFdURl9BUk1fQVJDSF9WRVJTSU9OIDgKLQotLyogTVNWQyBzZXRzIF9NX0FSTSAqLwotI2VsaWYg
ZGVmaW5lZChfTV9BUk0pCi0jZGVmaW5lIFdURl9BUk1fQVJDSF9WRVJTSU9OIF9NX0FSTQotCi0v
KiBSVkNUIHNldHMgX1RBUkdFVF9BUkNIX0FSTSAqLwotI2VsaWYgZGVmaW5lZChfX1RBUkdFVF9B
UkNIX0FSTSkKLSNkZWZpbmUgV1RGX0FSTV9BUkNIX1ZFUlNJT04gX19UQVJHRVRfQVJDSF9BUk0K
LQotI2lmIGRlZmluZWQoX19UQVJHRVRfQVJDSF81RSkgXAotICAgIHx8IGRlZmluZWQoX19UQVJH
RVRfQVJDSF81VEUpIFwKLSAgICB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfNVRFSikKLS8qQVJN
djVURSByZXF1aXJlcyBhbGxvY2F0b3JzIHRvIHVzZSBhbGlnbmVkIG1lbW9yeSovCi0jZGVmaW5l
IFVTRV9BUkVOQV9BTExPQ19BTElHTk1FTlRfSU5URUdFUiAxCi0jZW5kaWYKLQotI2Vsc2UKLSNk
ZWZpbmUgV1RGX0FSTV9BUkNIX1ZFUlNJT04gMAotCi0jZW5kaWYKLQotLyogU2V0IFdURl9USFVN
Ql9BUkNIX1ZFUlNJT04gKi8KLSNpZiAgIGRlZmluZWQoX19BUk1fQVJDSF80VF9fKQotI2RlZmlu
ZSBXVEZfVEhVTUJfQVJDSF9WRVJTSU9OIDEKLQotI2VsaWYgZGVmaW5lZChfX0FSTV9BUkNIXzVU
X18pIFwKLSAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNVRFX18pIFwKLSAgICB8fCBkZWZpbmVk
KF9fQVJNX0FSQ0hfNVRFSl9fKQotI2RlZmluZSBXVEZfVEhVTUJfQVJDSF9WRVJTSU9OIDIKLQot
I2VsaWYgZGVmaW5lZChfX0FSTV9BUkNIXzZKX18pIFwKLSAgICB8fCBkZWZpbmVkKF9fQVJNX0FS
Q0hfNktfXykgXAotICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF82Wl9fKSBcCi0gICAgfHwgZGVm
aW5lZChfX0FSTV9BUkNIXzZaS19fKSBcCi0gICAgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzZNX18p
Ci0jZGVmaW5lIFdURl9USFVNQl9BUkNIX1ZFUlNJT04gMwotCi0jZWxpZiBkZWZpbmVkKF9fQVJN
X0FSQ0hfNlQyX18pIFwKLSAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN19fKSBcCi0gICAgfHwg
ZGVmaW5lZChfX0FSTV9BUkNIXzdBX18pIFwKLSAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN0tf
XykgXAotICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF83TV9fKSBcCi0gICAgfHwgZGVmaW5lZChf
X0FSTV9BUkNIXzdSX18pIFwKLSAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN1NfXykKLSNkZWZp
bmUgV1RGX1RIVU1CX0FSQ0hfVkVSU0lPTiA0Ci0KLS8qIFJWQ1Qgc2V0cyBfX1RBUkdFVF9BUkNI
X1RIVU1CICovCi0jZWxpZiBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfVEhVTUIpCi0jZGVmaW5lIFdU
Rl9USFVNQl9BUkNIX1ZFUlNJT04gX19UQVJHRVRfQVJDSF9USFVNQgotCi0jZWxzZQotI2RlZmlu
ZSBXVEZfVEhVTUJfQVJDSF9WRVJTSU9OIDAKLSNlbmRpZgotCi0KLS8qIENQVShBUk1WNV9PUl9M
T1dFUikgLSBBUk0gaW5zdHJ1Y3Rpb24gc2V0IHY1IG9yIGVhcmxpZXIgKi8KLS8qIE9uIEFSTXY1
IGFuZCBiZWxvdyB0aGUgbmF0dXJhbCBhbGlnbm1lbnQgaXMgcmVxdWlyZWQuIAotICAgQW5kIHRo
ZXJlIGFyZSBzb21lIG90aGVyIGRpZmZlcmVuY2VzIGZvciB2NSBvciBlYXJsaWVyLiAqLwotI2lm
ICFkZWZpbmVkKEFSTVY1X09SX0xPV0VSKSAmJiAhV1RGX0FSTV9BUkNIX0FUX0xFQVNUKDYpCi0j
ZGVmaW5lIFdURl9DUFVfQVJNVjVfT1JfTE9XRVIgMQotI2VuZGlmCi0KLQotLyogQ1BVKEFSTV9U
UkFESVRJT05BTCkgLSBUaHVtYjIgaXMgbm90IGF2YWlsYWJsZSwgb25seSB0cmFkaXRpb25hbCBB
Uk0gKHY0IG9yIGdyZWF0ZXIpICovCi0vKiBDUFUoQVJNX1RIVU1CMikgLSBUaHVtYjIgaW5zdHJ1
Y3Rpb24gc2V0IGlzIGF2YWlsYWJsZSAqLwotLyogT25seSBvbmUgb2YgdGhlc2Ugd2lsbCBiZSBk
ZWZpbmVkLiAqLwotI2lmICFkZWZpbmVkKFdURl9DUFVfQVJNX1RSQURJVElPTkFMKSAmJiAhZGVm
aW5lZChXVEZfQ1BVX0FSTV9USFVNQjIpCi0jICBpZiBkZWZpbmVkKHRodW1iMikgfHwgZGVmaW5l
ZChfX3RodW1iMl9fKSBcCi0gICAgfHwgKChkZWZpbmVkKF9fdGh1bWIpIHx8IGRlZmluZWQoX190
aHVtYl9fKSkgJiYgV1RGX1RIVU1CX0FSQ0hfVkVSU0lPTiA9PSA0KQotIyAgICBkZWZpbmUgV1RG
X0NQVV9BUk1fVFJBRElUSU9OQUwgMAotIyAgICBkZWZpbmUgV1RGX0NQVV9BUk1fVEhVTUIyIDEK
LSMgIGVsaWYgV1RGX0FSTV9BUkNIX0FUX0xFQVNUKDQpCi0jICAgIGRlZmluZSBXVEZfQ1BVX0FS
TV9UUkFESVRJT05BTCAxCi0jICAgIGRlZmluZSBXVEZfQ1BVX0FSTV9USFVNQjIgMAotIyAgZWxz
ZQotIyAgICBlcnJvciAiTm90IHN1cHBvcnRlZCBBUk0gYXJjaGl0ZWN0dXJlIgotIyAgZW5kaWYK
LSNlbGlmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENQVShBUk1fVEhVTUIyKSAvKiBTYW5pdHkg
Q2hlY2sgKi8KLSMgIGVycm9yICJDYW5ub3QgdXNlIGJvdGggb2YgV1RGX0NQVV9BUk1fVFJBRElU
SU9OQUwgYW5kIFdURl9DUFVfQVJNX1RIVU1CMiBwbGF0Zm9ybXMiCi0jZW5kaWYgLyogIWRlZmlu
ZWQoV1RGX0NQVV9BUk1fVFJBRElUSU9OQUwpICYmICFkZWZpbmVkKFdURl9DUFVfQVJNX1RIVU1C
MikgKi8KLQotI2lmIGRlZmluZWQoX19BUk1fTkVPTl9fKSAmJiAhZGVmaW5lZChXVEZfQ1BVX0FS
TV9ORU9OKQotI2RlZmluZSBXVEZfQ1BVX0FSTV9ORU9OIDEKLSNlbmRpZgotCi0jaWYgQ1BVKEFS
TV9ORU9OKQotLyogQWxsIE5FT04gaW50cmluc2ljcyB1c2FnZSBjYW4gYmUgZGlzYWJsZWQgYnkg
dGhpcyBtYWNyby4gKi8KLSNkZWZpbmUgSEFWRV9BUk1fTkVPTl9JTlRSSU5TSUNTIDEKLSNlbmRp
ZgotCi0jaWYgKGRlZmluZWQoX19WRlBfRlBfXykgJiYgIWRlZmluZWQoX19TT0ZURlBfXykpCi0j
ZGVmaW5lIFdURl9DUFVfQVJNX1ZGUCAxCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19BUk1fQVJD
SF83S19fKQotI2RlZmluZSBXVEZfQ1BVX0FQUExFX0FSTVY3SyAxCi0jZW5kaWYKLQotI2lmIGRl
ZmluZWQoX19BUk1fQVJDSF83U19fKQotI2RlZmluZSBXVEZfQ1BVX0FQUExFX0FSTVY3UyAxCi0j
ZW5kaWYKLQotI2lmIGRlZmluZWQoX19BUk1fQVJDSF9FWFRfSURJVl9fKSB8fCBDUFUoQVBQTEVf
QVJNVjdTKQotI2RlZmluZSBIQVZFX0FSTV9JRElWX0lOU1RSVUNUSU9OUyAxCi0jZW5kaWYKLQot
I2VuZGlmIC8qIEFSTSAqLwotCi0jaWYgQ1BVKEFSTSkgfHwgQ1BVKE1JUFMpIHx8IENQVShTSDQp
Ci0jZGVmaW5lIFdURl9DUFVfTkVFRFNfQUxJR05FRF9BQ0NFU1MgMQotI2VuZGlmCi0KLS8qID09
PT0gT1MoKSAtIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbTsgb25seSB0byBiZSB1c2VkIGZv
ciBtYW5kYXRlZCBsb3ctbGV2ZWwgc2VydmljZXMgbGlrZSAKLSAgIHZpcnR1YWwgbWVtb3J5LCBu
b3QgdG8gY2hvb3NlIGEgR1VJIHRvb2xraXQgPT09PSAqLwotCi0vKiBPUyhBSVgpIC0gQUlYICov
Ci0jaWZkZWYgX0FJWAotI2RlZmluZSBXVEZfT1NfQUlYIDEKLSNlbmRpZgotCi0vKiBPUyhEQVJX
SU4pIC0gQW55IERhcndpbi1iYXNlZCBPUywgaW5jbHVkaW5nIE1hYyBPUyBYIGFuZCBpUGhvbmUg
T1MgKi8KLSNpZmRlZiBfX0FQUExFX18KLSNkZWZpbmUgV1RGX09TX0RBUldJTiAxCi0KLSNpbmNs
dWRlIDxBdmFpbGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxBdmFpbGFiaWxpdHlNYWNyb3MuaD4KLSNp
bmNsdWRlIDxUYXJnZXRDb25kaXRpb25hbHMuaD4KLSNlbmRpZgotCi0vKiBPUyhJT1MpIC0gaU9T
ICovCi0vKiBPUyhNQUNfT1NfWCkgLSBNYWMgT1MgWCAobm90IGluY2x1ZGluZyBpT1MpICovCi0j
aWYgT1MoREFSV0lOKSAmJiAoKGRlZmluZWQoVEFSR0VUX09TX0VNQkVEREVEKSAmJiBUQVJHRVRf
T1NfRU1CRURERUQpIFwKLSAgICB8fCAoZGVmaW5lZChUQVJHRVRfT1NfSVBIT05FKSAmJiBUQVJH
RVRfT1NfSVBIT05FKSAgICAgICAgICAgICAgICAgXAotICAgIHx8IChkZWZpbmVkKFRBUkdFVF9P
U19TSU1VTEFUT1IpICYmIFRBUkdFVF9PU19TSU1VTEFUT1IpKQotI2RlZmluZSBXVEZfT1NfSU9T
IDEKLSNlbGlmIE9TKERBUldJTikgJiYgZGVmaW5lZChUQVJHRVRfT1NfTUFDKSAmJiBUQVJHRVRf
T1NfTUFDCi0jZGVmaW5lIFdURl9PU19NQUNfT1NfWCAxCi0jZW5kaWYKLQotLyogT1MoRlJFRUJT
RCkgLSBGcmVlQlNEICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0Ry
YWdvbkZseV9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9rZXJuZWxfXykKLSNkZWZpbmUgV1RGX09T
X0ZSRUVCU0QgMQotI2VuZGlmCi0KLS8qIE9TKEhVUkQpIC0gR05VL0h1cmQgKi8KLSNpZmRlZiBf
X0dOVV9fCi0jZGVmaW5lIFdURl9PU19IVVJEIDEKLSNlbmRpZgotCi0vKiBPUyhMSU5VWCkgLSBM
aW51eCAqLwotI2lmZGVmIF9fbGludXhfXwotI2RlZmluZSBXVEZfT1NfTElOVVggMQotI2VuZGlm
Ci0KLS8qIE9TKE5FVEJTRCkgLSBOZXRCU0QgKi8KLSNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCi0j
ZGVmaW5lIFdURl9PU19ORVRCU0QgMQotI2VuZGlmCi0KLS8qIE9TKE9QRU5CU0QpIC0gT3BlbkJT
RCAqLwotI2lmZGVmIF9fT3BlbkJTRF9fCi0jZGVmaW5lIFdURl9PU19PUEVOQlNEIDEKLSNlbmRp
ZgotCi0vKiBPUyhTT0xBUklTKSAtIFNvbGFyaXMgKi8KLSNpZiBkZWZpbmVkKHN1bikgfHwgZGVm
aW5lZChfX3N1bikKLSNkZWZpbmUgV1RGX09TX1NPTEFSSVMgMQotI2VuZGlmCi0KLS8qIE9TKFdJ
TkRPV1MpIC0gQW55IHZlcnNpb24gb2YgV2luZG93cyAqLwotI2lmIGRlZmluZWQoV0lOMzIpIHx8
IGRlZmluZWQoX1dJTjMyKQotI2RlZmluZSBXVEZfT1NfV0lORE9XUyAxCi0jZW5kaWYKLQotI2Rl
ZmluZSBXVEZfT1NfV0lOIEVSUk9SICJVU0UgV0lORE9XUyBXSVRIIE9TIE5PVCBXSU4iCi0jZGVm
aW5lIFdURl9PU19NQUMgRVJST1IgIlVTRSBNQUNfT1NfWCBXSVRIIE9TIE5PVCBNQUMiCi0KLS8q
IE9TKFVOSVgpIC0gQW55IFVuaXgtbGlrZSBzeXN0ZW0gKi8KLSNpZiAgICBPUyhBSVgpICAgICAg
ICAgICAgICBcCi0gICAgfHwgT1MoREFSV0lOKSAgICAgICAgICAgXAotICAgIHx8IE9TKEZSRUVC
U0QpICAgICAgICAgIFwKLSAgICB8fCBPUyhIVVJEKSAgICAgICAgICAgICBcCi0gICAgfHwgT1Mo
TElOVVgpICAgICAgICAgICAgXAotICAgIHx8IE9TKE5FVEJTRCkgICAgICAgICAgIFwKLSAgICB8
fCBPUyhPUEVOQlNEKSAgICAgICAgICBcCi0gICAgfHwgT1MoU09MQVJJUykgICAgICAgICAgXAot
ICAgIHx8IGRlZmluZWQodW5peCkgICAgICAgIFwKLSAgICB8fCBkZWZpbmVkKF9fdW5peCkgICAg
ICBcCi0gICAgfHwgZGVmaW5lZChfX3VuaXhfXykKLSNkZWZpbmUgV1RGX09TX1VOSVggMQotI2Vu
ZGlmCi0KLS8qIE9wZXJhdGluZyBlbnZpcm9ubWVudHMgKi8KLQotLyogRXhwb3J0IG1hY3JvIHN1
cHBvcnQuIERldGVjdHMgdGhlIGF0dHJpYnV0ZXMgYXZhaWxhYmxlIGZvciBzaGFyZWQgbGlicmFy
eSBzeW1ib2wgZXhwb3J0Ci0gICBkZWNvcmF0aW9ucy4gKi8KLSNpZiBPUyhXSU5ET1dTKSB8fCAo
Q09NUElMRVJfSEFTX0NMQU5HX0RFQ0xTUEVDKGRsbGltcG9ydCkgJiYgQ09NUElMRVJfSEFTX0NM
QU5HX0RFQ0xTUEVDKGRsbGV4cG9ydCkpCi0jZGVmaW5lIFVTRV9ERUNMU1BFQ19BVFRSSUJVVEUg
MQotI2RlZmluZSBVU0VfVklTSUJJTElUWV9BVFRSSUJVVEUgMAotI2VsaWYgZGVmaW5lZChfX0dO
VUNfXykKLSNkZWZpbmUgVVNFX0RFQ0xTUEVDX0FUVFJJQlVURSAwCi0jZGVmaW5lIFVTRV9WSVNJ
QklMSVRZX0FUVFJJQlVURSAxCi0jZWxzZQotI2RlZmluZSBVU0VfREVDTFNQRUNfQVRUUklCVVRF
IDAKLSNkZWZpbmUgVVNFX1ZJU0lCSUxJVFlfQVRUUklCVVRFIDAKLSNlbmRpZgotCi0vKiBTdGFu
ZGFyZCBsaWJyYXJpZXMgKi8KLSNpZiBkZWZpbmVkKEhBVkVfRkVBVFVSRVNfSCkgJiYgSEFWRV9G
RUFUVVJFU19ICi0vKiBJZiB0aGUgaW5jbHVkZWQgZmVhdHVyZXMuaCBpcyBnbGliYydzIG9uZSwg
X19HTElCQ19fIGlzIGRlZmluZWQuICovCi0jaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSNlbmRpZgot
Ci0vKiBGSVhNRTogdGhlc2UgYXJlIGFsbCBtaXhlcyBvZiBPUywgb3BlcmF0aW5nIGVudmlyb25t
ZW50IGFuZCBwb2xpY3kgY2hvaWNlcy4gKi8KLS8qIFBMQVRGT1JNKEdUSykgKi8KLS8qIFBMQVRG
T1JNKE1BQykgKi8KLS8qIFBMQVRGT1JNKElPUykgKi8KLS8qIFBMQVRGT1JNKElPU19TSU1VTEFU
T1IpICovCi0vKiBQTEFURk9STShXSU4pICovCi0jaWYgZGVmaW5lZChCVUlMRElOR19HVEtfXykK
LSNkZWZpbmUgV1RGX1BMQVRGT1JNX0dUSyAxCi0jZWxpZiBkZWZpbmVkKEJVSUxESU5HX1dQRV9f
KQotI2RlZmluZSBXVEZfUExBVEZPUk1fV1BFIDEKLSNlbGlmIGRlZmluZWQoQlVJTERJTkdfSlND
T05MWV9fKQotLyogSlNDT25seSBkb2VzIG5vdCBwcm92aWRlIFBMQVRGT1JNKCkgbWFjcm8gKi8K
LSNlbGlmIE9TKE1BQ19PU19YKQotI2RlZmluZSBXVEZfUExBVEZPUk1fTUFDIDEKLSNlbGlmIE9T
KElPUykKLSNkZWZpbmUgV1RGX1BMQVRGT1JNX0lPUyAxCi0jaWYgZGVmaW5lZChUQVJHRVRfT1Nf
U0lNVUxBVE9SKSAmJiBUQVJHRVRfT1NfU0lNVUxBVE9SCi0jZGVmaW5lIFdURl9QTEFURk9STV9J
T1NfU0lNVUxBVE9SIDEKLSNlbmRpZgotI2VsaWYgT1MoV0lORE9XUykKLSNkZWZpbmUgV1RGX1BM
QVRGT1JNX1dJTiAxCi0jZW5kaWYKLQotLyogUExBVEZPUk0oQ09DT0EpICovCi0jaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShJT1MpCi0jZGVmaW5lIFdURl9QTEFURk9STV9DT0NPQSAxCi0j
ZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2lmIGRlZmluZWQgX19oYXNfaW5jbHVkZSAm
JiBfX2hhc19pbmNsdWRlKDxDb3JlRm91bmRhdGlvbi9DRlByaXYuaD4pCi0jZGVmaW5lIFVTRV9B
UFBMRV9JTlRFUk5BTF9TREsgMQotI2VuZGlmCi0jZW5kaWYKLQotLyogUExBVEZPUk0oQVBQTEVU
VikgKi8KLSNpZiBkZWZpbmVkKFRBUkdFVF9PU19UVikgJiYgVEFSR0VUX09TX1RWCi0jZGVmaW5l
IFdURl9QTEFURk9STV9BUFBMRVRWIDEKLSNlbmRpZgotCi0vKiBQTEFURk9STShXQVRDSE9TKSAq
LwotI2lmIGRlZmluZWQoVEFSR0VUX09TX1dBVENIKSAmJiBUQVJHRVRfT1NfV0FUQ0gKLSNkZWZp
bmUgV1RGX1BMQVRGT1JNX1dBVENIT1MgMQotI2VuZGlmCi0KLS8qIEdyYXBoaWNzIGVuZ2luZXMg
Ki8KLQotLyogVVNFKENHKSBhbmQgUExBVEZPUk0oQ0kpICovCi0jaWYgUExBVEZPUk0oQ09DT0Ep
IHx8IChQTEFURk9STShXSU4pICYmICFVU0UoV0lOR0RJKSAmJiAhUExBVEZPUk0oV0lOX0NBSVJP
KSAmJiAhVVNFKERJUkVDVDJEKSkKLSNkZWZpbmUgVVNFX0NHIDEKLSNlbmRpZgotI2lmIFBMQVRG
T1JNKENPQ09BKSB8fCAoUExBVEZPUk0oV0lOKSAmJiBVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQp
KQotI2RlZmluZSBVU0VfQ0EgMQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKFdQRSkKLSNkZWZpbmUgVVNFX0NBSVJPIDEKLSNkZWZpbmUgVVNFX0dMSUIgMQotI2RlZmlu
ZSBVU0VfRlJFRVRZUEUgMQotI2RlZmluZSBVU0VfSEFSRkJVWlogMQotI2RlZmluZSBVU0VfU09V
UCAxCi0jZGVmaW5lIFVTRV9XRUJQIDEKLSNkZWZpbmUgVVNFX0ZJTEVfTE9DSyAxCi0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKEdUSykKLSNkZWZpbmUgR0xJQl9WRVJTSU9OX01JTl9SRVFVSVJFRCBH
TElCX1ZFUlNJT05fMl8zNgotI2RlZmluZSBHREtfVkVSU0lPTl9NSU5fUkVRVUlSRUQgR0RLX1ZF
UlNJT05fM182Ci0jZW5kaWYKLQotI2lmIFVTRShTT1VQKQotI2RlZmluZSBTT1VQX1ZFUlNJT05f
TUlOX1JFUVVJUkVEIFNPVVBfVkVSU0lPTl8yXzQyCi0jZW5kaWYKLQotLyogT24gV2luZG93cywg
dXNlIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyIGJ5IGRlZmF1bHQgKi8KLSNpZiBPUyhXSU5ET1dT
KQotI2RlZmluZSBVU0VfUVVFUllfUEVSRk9STUFOQ0VfQ09VTlRFUiAgMQotI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShDT0NPQSkKLQotI2RlZmluZSBVU0VfQ0YgMQotI2RlZmluZSBVU0VfRk9VTkRB
VElPTiAxCi0jZGVmaW5lIFVTRV9ORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSyAxCi0jZGVm
aW5lIEVOQUJMRV9VU0VSX01FU1NBR0VfSEFORExFUlMgMQotI2RlZmluZSBIQVZFX09VVF9PRl9Q
Uk9DRVNTX0xBWUVSX0hPU1RJTkcgMQotI2RlZmluZSBIQVZFX0RUUkFDRSAwCi0jZGVmaW5lIFVT
RV9GSUxFX0xPQ0sgMQotCi0jaWYgIVBMQVRGT1JNKFdBVENIT1MpICYmICFQTEFURk9STShBUFBM
RVRWKQotI2RlZmluZSBFTkFCTEVfREFUQV9ERVRFQ1RJT04gMQotI2RlZmluZSBIQVZFX0FWS0lU
IDEKLSNkZWZpbmUgSEFWRV9QQVJFTlRBTF9DT05UUk9MUyAxCi0jZW5kaWYKLQotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShNQUMpCi0KLSNkZWZpbmUgVVNFX1FUS0lUIDAKLQotI2RlZmluZSBVU0Vf
QVBQS0lUIDEKLSNkZWZpbmUgSEFWRV9SVU5MT09QX1RJTUVSIDEKLSNkZWZpbmUgSEFWRV9TRUNf
SURFTlRJVFkgMQotI2RlZmluZSBIQVZFX1NFQ19LRVlDSEFJTiAxCi0KLSNpZiBDUFUoWDg2XzY0
KQotI2RlZmluZSBIQVZFX05FVFdPUktfRVhURU5TSU9OIDEKLSNkZWZpbmUgVVNFX1BMVUdJTl9I
T1NUX1BST0NFU1MgMQotI2VuZGlmCi0KLS8qIE9TIFggZGVmaW5lcyBhIHNlcmllcyBvZiBwbGF0
Zm9ybSBtYWNyb3MgZm9yIGRlYnVnZ2luZy4gKi8KLS8qIFNvbWUgb2YgdGhlbSBhcmUgcmVhbGx5
IGFubm95aW5nIGJlY2F1c2UgdGhleSB1c2UgY29tbW9uIG5hbWVzIChlLmcuIGNoZWNrKCkpLiAq
LwotLyogRGlzYWJsZSB0aG9zZSBtYWNyb3Mgc28gdGhhdCB3ZSBhcmUgbm90IGxpbWl0ZWQgaW4g
aG93IHdlIG5hbWUgbWV0aG9kcyBhbmQgZnVuY3Rpb25zLiAqLwotI3VuZGVmIF9fQVNTRVJUX01B
Q1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUwotI2RlZmluZSBfX0FTU0VS
VF9NQUNST1NfREVGSU5FX1ZFUlNJT05TX1dJVEhPVVRfVU5ERVJTQ09SRVMgMAotCi0jZW5kaWYg
LyogUExBVEZPUk0oTUFDKSAqLwotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jZGVmaW5lIEhBVkVf
TkVUV09SS19FWFRFTlNJT04gMQotI2RlZmluZSBIQVZFX1JFQURMSU5FIDEKLSNkZWZpbmUgVVNF
X1VJS0lUX0VESVRJTkcgMQotI2RlZmluZSBVU0VfV0VCX1RIUkVBRCAxCi0KLSNpZiAhUExBVEZP
Uk0oV0FUQ0hPUykgJiYgIVBMQVRGT1JNKEFQUExFVFYpCi0jZGVmaW5lIFVTRV9RVUlDS19MT09L
IDEKLSNlbmRpZgotCi0jaWYgVEFSR0VUX09TX0lPUwotI2RlZmluZSBIQVZFX0FQUF9MSU5LUyAx
Ci0jZW5kaWYKLQotI2lmIENQVShBUk02NCkKLSNkZWZpbmUgRU5BQkxFX0pJVF9DT05TVEFOVF9C
TElORElORyAwCi0jZW5kaWYKLQotI2lmIENQVShBUk1fTkVPTikKLSN1bmRlZiBIQVZFX0FSTV9O
RU9OX0lOVFJJTlNJQ1MKLSNkZWZpbmUgSEFWRV9BUk1fTkVPTl9JTlRSSU5TSUNTIDAKLSNlbmRp
ZgotCi0jZW5kaWYgLyogUExBVEZPUk0oSU9TKSAqLwotCi0jaWYgUExBVEZPUk0oV0lOKSAmJiAh
VVNFKFdJTkdESSkKLSNkZWZpbmUgVVNFX0NGIDEKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lO
KSAmJiAhVVNFKFdJTkdESSkgJiYgIVBMQVRGT1JNKFdJTl9DQUlSTykKLSNkZWZpbmUgVVNFX0NG
VVJMQ09OTkVDVElPTiAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEhBVkVfQUNDRVNTSUJJTElU
WSkKLSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKFdQRSkKLSNkZWZpbmUgSEFWRV9BQ0NFU1NJQklMSVRZIDEKLSNlbmRpZgot
I2VuZGlmIC8qICFkZWZpbmVkKEhBVkVfQUNDRVNTSUJJTElUWSkgKi8KLQotLyogRklYTUU6IFJl
bW92ZSBhZnRlciBDTWFrZSBidWlsZCBlbmFibGVkIG9uIERhcndpbiAqLwotI2lmIE9TKERBUldJ
TikKLSNkZWZpbmUgSEFWRV9FUlJOT19IIDEKLSNkZWZpbmUgSEFWRV9MQU5HSU5GT19IIDEKLSNk
ZWZpbmUgSEFWRV9MT0NBTFRJTUVfUiAxCi0jZGVmaW5lIEhBVkVfTU1BUCAxCi0jZGVmaW5lIEhB
VkVfUkVHRVhfSCAxCi0jZGVmaW5lIEhBVkVfU0lHTkFMX0ggMQotI2RlZmluZSBIQVZFX1NUQVRf
QklSVEhUSU1FIDEKLSNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQotI2RlZmluZSBIQVZFX1NUUk5T
VFIgMQotI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKLSNkZWZpbmUgSEFWRV9TWVNfVElNRV9I
IDEgCi0jZGVmaW5lIEhBVkVfVE1fR01UT0ZGIDEKLSNkZWZpbmUgSEFWRV9UTV9aT05FIDEKLSNk
ZWZpbmUgSEFWRV9USU1FR00gMQotCi0jaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQotI2Rl
ZmluZSBIQVZFX0lOVDEyOF9UIDEKLSNlbmRpZgotI2VuZGlmIC8qIE9TKERBUldJTikgKi8KLQot
I2lmIE9TKFVOSVgpCi0jZGVmaW5lIFVTRV9QVEhSRUFEUyAxCi0jZW5kaWYgLyogT1MoVU5JWCkg
Ki8KLQotI2lmIE9TKERBUldJTikKLSNkZWZpbmUgSEFWRV9ESVNQQVRDSF9IIDEKLSNkZWZpbmUg
SEFWRV9NQURWX0ZSRUUgMQotI2RlZmluZSBIQVZFX01BRFZfRlJFRV9SRVVTRSAxCi0jZGVmaW5l
IEhBVkVfTUFEVl9ET05UTkVFRCAxCi0jZGVmaW5lIEhBVkVfTUVSR0VTT1JUIDEKLSNkZWZpbmUg
SEFWRV9QVEhSRUFEX1NFVE5BTUVfTlAgMQotI2RlZmluZSBIQVZFX1JFQURMSU5FIDEKLSNkZWZp
bmUgSEFWRV9TWVNfVElNRUJfSCAxCi0KLSNpZiBfX2hhc19pbmNsdWRlKDxtYWNoL21hY2hfZXhj
LmRlZnM+KSAmJiAhKFBMQVRGT1JNKFdBVENIT1MpIHx8IFBMQVRGT1JNKEFQUExFVFYpKQotI2Rl
ZmluZSBIQVZFX01BQ0hfRVhDRVBUSU9OUyAxCi0jZW5kaWYKLQotI2lmICFQTEFURk9STShHVEsp
Ci0jZGVmaW5lIFVTRV9BQ0NFTEVSQVRFIDEKLSNlbmRpZgotI2lmICFQTEFURk9STShJT1MpCi0j
ZGVmaW5lIEhBVkVfSE9TVEVEX0NPUkVfQU5JTUFUSU9OIDEKLSNlbmRpZgotCi0jZW5kaWYgLyog
T1MoREFSV0lOKSAqLwotCi0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCi0jZGVm
aW5lIEhBVkVfQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HIDEKLSNlbmRpZgotCi0jaWYg
T1MoREFSV0lOKSB8fCAoKE9TKEZSRUVCU0QpIHx8IGRlZmluZWQoX19HTElCQ19fKSkgJiYgKENQ
VShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk0pIHx8IENQVShBUk02NCkgfHwgQ1BVKE1J
UFMpKSkKLSNkZWZpbmUgSEFWRV9NQUNISU5FX0NPTlRFWFQgMQotI2VuZGlmCi0KLSNpZiBPUyhE
QVJXSU4pIHx8IChPUyhMSU5VWCkgJiYgZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9f
VUNMSUJDX18pKQotI2RlZmluZSBIQVZFX0JBQ0tUUkFDRSAxCi0jZW5kaWYKLQotI2lmIE9TKERB
UldJTikgfHwgT1MoTElOVVgpCi0jaWYgUExBVEZPUk0oR1RLKQotI2lmIGRlZmluZWQoX19HTElC
Q19fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQotI2RlZmluZSBIQVZFX0JBQ0tUUkFDRV9TWU1C
T0xTIDEKLSNlbmRpZgotI2VuZGlmIC8qIFBMQVRGT1JNKEdUSykgKi8KLSNkZWZpbmUgSEFWRV9E
TEFERFIgMQotI2VuZGlmIC8qIE9TKERBUldJTikgfHwgT1MoTElOVVgpICovCi0KLQotLyogRU5B
QkxFIG1hY3JvIGRlZmF1bHRzICovCi0KLS8qIEZJWE1FOiBtb3ZlIG91dCBhbGwgRU5BQkxFKCkg
ZGVmaW5lcyBmcm9tIGhlcmUgdG8gRmVhdHVyZURlZmluZXMuaCAqLwotCi0vKiBJbmNsdWRlIGZl
YXR1cmUgbWFjcm9zICovCi0jaW5jbHVkZSA8d3RmL0ZlYXR1cmVEZWZpbmVzLmg+Ci0KLSNpZiBP
UyhXSU5ET1dTKQotI2RlZmluZSBVU0VfU1lTVEVNX01BTExPQyAxCi0jZW5kaWYKLQotI2lmICFk
ZWZpbmVkKFVTRV9KU1ZBTFVFNjQpICYmICFkZWZpbmVkKFVTRV9KU1ZBTFVFMzJfNjQpCi0jaWYg
KENQVShYODZfNjQpICYmICFkZWZpbmVkKF9fSUxQMzJfXykgJiYgKE9TKFVOSVgpIHx8IE9TKFdJ
TkRPV1MpKSkgXAotICAgIHx8IChDUFUoSUE2NCkgJiYgIUNQVShJQTY0XzMyKSkgXAotICAgIHx8
IENQVShBTFBIQSkgXAotICAgIHx8IENQVShBUk02NCkgXAotICAgIHx8IENQVShTMzkwWCkgXAot
ICAgIHx8IENQVShNSVBTNjQpIFwKLSAgICB8fCBDUFUoUFBDNjQpIFwKLSAgICB8fCBDUFUoUFBD
NjRMRSkKLSNkZWZpbmUgVVNFX0pTVkFMVUU2NCAxCi0jZWxzZQotI2RlZmluZSBVU0VfSlNWQUxV
RTMyXzY0IDEKLSNlbmRpZgotI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9KU1ZBTFVFNjQpICYmICFk
ZWZpbmVkKFVTRV9KU1ZBTFVFMzJfNjQpICovCi0KLS8qIFRoZSBKSVQgaXMgZW5hYmxlZCBieSBk
ZWZhdWx0IG9uIGFsbCB4ODYsIHg4Ni02NCwgQVJNICYgTUlQUyBwbGF0Zm9ybXMgZXhjZXB0IEFS
TXY3ay4gKi8KLSNpZiAhZGVmaW5lZChFTkFCTEVfSklUKSBcCi0gICAgJiYgKENQVShYODYpIHx8
IENQVShYODZfNjQpIHx8IENQVShBUk0pIHx8IENQVShBUk02NCkgfHwgQ1BVKE1JUFMpKSBcCi0g
ICAgJiYgIUNQVShBUFBMRV9BUk1WN0spIFwKLSAgICAmJiAhQ1BVKEFSTTY0RSkKLSNkZWZpbmUg
RU5BQkxFX0pJVCAxCi0jZW5kaWYKLQotLyogVGhlIEZUTCAqZG9lcyBub3QqIHdvcmsgb24gMzIt
Yml0IHBsYXRmb3Jtcy4gRGlzYWJsZSBpdCBldmVuIGlmIHNvbWVvbmUgYXNrZWQgdXMgdG8gZW5h
YmxlIGl0LiAqLwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0jdW5kZWYgRU5BQkxFX0ZUTF9KSVQK
LSNkZWZpbmUgRU5BQkxFX0ZUTF9KSVQgMAotI2VuZGlmCi0KLS8qIFRoZSBGVEwgaXMgZGlzYWJs
ZWQgb24gdGhlIGlPUyBzaW11bGF0b3IsIG1vc3RseSBmb3Igc2ltcGxpY2l0eS4gKi8KLSNpZiBQ
TEFURk9STShJT1NfU0lNVUxBVE9SKQotI3VuZGVmIEVOQUJMRV9GVExfSklUCi0jZGVmaW5lIEVO
QUJMRV9GVExfSklUIDAKLSNlbmRpZgotCi0vKiBJZiBwb3NzaWJsZSwgdHJ5IHRvIGVuYWJsZSBh
IGRpc2Fzc2VtYmxlci4gVGhpcyBpcyBvcHRpb25hbC4gV2UgcHJvY2VlZCBpbiB0d28KLSAgIHN0
ZXBzOiBmaXJzdCB3ZSB0cnkgdG8gZmluZCBzb21lIGRpc2Fzc2VtYmxlciB0aGF0IHdlIGNhbiB1
c2UsIGFuZCB0aGVuIHdlCi0gICBkZWNpZGUgaWYgdGhlIGhpZ2gtbGV2ZWwgZGlzYXNzZW1ibGVy
IEFQSSBjYW4gYmUgZW5hYmxlZC4gKi8KLSNpZiAhZGVmaW5lZChVU0VfVURJUzg2KSAmJiBFTkFC
TEUoSklUKSAmJiAoKE9TKERBUldJTikgJiYgIVBMQVRGT1JNKEdUSykpIHx8IChPUyhMSU5VWCkg
JiYgUExBVEZPUk0oR1RLKSkpIFwKLSAgICAmJiAoQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkpCi0j
ZGVmaW5lIFVTRV9VRElTODYgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfRElTQVNT
RU1CTEVSKSAmJiBVU0UoVURJUzg2KQotI2RlZmluZSBFTkFCTEVfRElTQVNTRU1CTEVSIDEKLSNl
bmRpZgotCi0jaWYgIWRlZmluZWQoVVNFX0FSTTY0X0RJU0FTU0VNQkxFUikgJiYgRU5BQkxFKEpJ
VCkgJiYgQ1BVKEFSTTY0KQotI2RlZmluZSBVU0VfQVJNNjRfRElTQVNTRU1CTEVSIDEKLSNlbmRp
ZgotCi0jaWYgIWRlZmluZWQoVVNFX0FSTVY3X0RJU0FTU0VNQkxFUikgJiYgRU5BQkxFKEpJVCkg
JiYgQ1BVKEFSTV9USFVNQjIpCi0jZGVmaW5lIFVTRV9BUk1WN19ESVNBU1NFTUJMRVIgMQotI2Vu
ZGlmCi0KLSNpZiAhZGVmaW5lZChVU0VfQVJNX0xMVk1fRElTQVNTRU1CTEVSKSAmJiBFTkFCTEUo
SklUKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBIQVZFKExMVk0pCi0jZGVmaW5lIFVTRV9B
Uk1fTExWTV9ESVNBU1NFTUJMRVIgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfRElT
QVNTRU1CTEVSKSAmJiAoVVNFKFVESVM4NikgfHwgVVNFKEFSTVY3X0RJU0FTU0VNQkxFUikgfHwg
VVNFKEFSTTY0X0RJU0FTU0VNQkxFUikgfHwgVVNFKEFSTV9MTFZNX0RJU0FTU0VNQkxFUikpCi0j
ZGVmaW5lIEVOQUJMRV9ESVNBU1NFTUJMRVIgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFC
TEVfREZHX0pJVCkgJiYgRU5BQkxFKEpJVCkKLS8qIEVuYWJsZSB0aGUgREZHIEpJVCBvbiBYODYg
YW5kIFg4Nl82NC4gKi8KLSNpZiAoQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkpICYmIChPUyhEQVJX
SU4pIHx8IE9TKExJTlVYKSB8fCBPUyhGUkVFQlNEKSB8fCBPUyhXSU5ET1dTKSB8fCBPUyhIVVJE
KSkKLSNkZWZpbmUgRU5BQkxFX0RGR19KSVQgMQotI2VuZGlmCi0vKiBFbmFibGUgdGhlIERGRyBK
SVQgb24gQVJNdjcuICBPbmx5IHRlc3RlZCBvbiBpT1MgYW5kIFF0L0dUSysgTGludXguICovCi0j
aWYgKENQVShBUk1fVEhVTUIyKSB8fCBDUFUoQVJNNjQpKSAmJiAoUExBVEZPUk0oSU9TKSB8fCBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkpCi0jZGVmaW5lIEVOQUJMRV9ERkdfSklUIDEK
LSNlbmRpZgotLyogRW5hYmxlIHRoZSBERkcgSklUIG9uIEFSTSBhbmQgTUlQUy4gKi8KLSNpZiBD
UFUoQVJNX1RSQURJVElPTkFMKSB8fCBDUFUoTUlQUykKLSNkZWZpbmUgRU5BQkxFX0RGR19KSVQg
MQotI2VuZGlmCi0jZW5kaWYKLQotLyogQ29uY3VycmVudCBKUyBvbmx5IHdvcmtzIG9uIDY0LWJp
dCBwbGF0Zm9ybXMgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGF0Ci0gICB2YWx1ZXMgZ2V0IHN0b3Jl
ZCB0byBhdG9taWNhbGx5LiBUaGlzIGlzIHRyaXZpYWxseSB0cnVlIG9uIDY0LWJpdCBwbGF0Zm9y
bXMsCi0gICBidXQgbm90IHRydWUgYXQgYWxsIG9uIDMyLWJpdCBwbGF0Zm9ybXMgd2hlcmUgdmFs
dWVzIGFyZSBjb21wb3NlZCBvZiB0d28KLSAgIHNlcGFyYXRlIHN1Yi12YWx1ZXMuICovCi0jaWYg
RU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVFNjQpCi0jZGVmaW5lIEVOQUJMRV9DT05DVVJS
RU5UX0pTIDEKLSNlbmRpZgotCi0jaWYgX19oYXNfaW5jbHVkZSg8U3lzdGVtL3B0aHJlYWRfbWFj
aGRlcC5oPikKLSNkZWZpbmUgSEFWRV9GQVNUX1RMUyAxCi0jZW5kaWYKLQotI2lmIChDUFUoWDg2
XzY0KSB8fCBDUFUoQVJNNjQpKSAmJiBIQVZFKEZBU1RfVExTKQotI2RlZmluZSBFTkFCTEVfRkFT
VF9UTFNfSklUIDEKLSNlbmRpZgotCi0vKiBUaGlzIGNvbnRyb2xzIHdoZXRoZXIgQjMgaXMgYnVp
bHQuIEIzIGlzIG5lZWRlZCBmb3IgRlRMIEpJVCBhbmQgV2ViQXNzZW1ibHkgKi8KLSNpZiBFTkFC
TEUoRlRMX0pJVCkgfHwgRU5BQkxFKFdFQkFTU0VNQkxZKQotI2RlZmluZSBFTkFCTEVfQjNfSklU
IDEKLSNlbmRpZgotCi0vKiBJZiB0aGUgYmFzZWxpbmUgaml0IGlzIG5vdCBhdmFpbGFibGUsIHRo
ZW4gZGlzYWJsZSB1cHBlciB0aWVycyBhcyB3ZWxsOiAqLwotI2lmICFFTkFCTEUoSklUKQotI3Vu
ZGVmIEVOQUJMRV9ERkdfSklUCi0jdW5kZWYgRU5BQkxFX0ZUTF9KSVQKLSN1bmRlZiBFTkFCTEVf
QjNfSklUCi0jZGVmaW5lIEVOQUJMRV9ERkdfSklUIDAKLSNkZWZpbmUgRU5BQkxFX0ZUTF9KSVQg
MAotI2RlZmluZSBFTkFCTEVfQjNfSklUIDAKLSNlbmRpZgotCi0vKiBUaGUgU2FtcGxpbmdQcm9m
aWxlciBpcyB0aGUgcHJvYmFiaWxpc3RpYyBhbmQgbG93LW92ZXJoZWFkIHByb2ZpbGVyIHVzZWQg
YnkKLSAqIEpTQyB0byBtZWFzdXJlIHdoZXJlIHRpbWUgaXMgc3BlbnQgaW5zaWRlIGEgSmF2YVNj
cmlwdCBwcm9ncmFtLgotICogSW4gY29uZmlndXJhdGlvbnMgb3RoZXIgdGhhbiBXaW5kb3dzIGFu
ZCBEYXJ3aW4sIGJlY2F1c2UgbGF5b3V0IG9mIG1jb250ZXh0X3QgZGVwZW5kcyBvbiBzdGFuZGFy
ZCBsaWJyYXJpZXMgKGxpa2UgZ2xpYmMpLAotICogc2FtcGxpbmcgcHJvZmlsZXIgaXMgZW5hYmxl
ZCBpZiBXZWJLaXQgdXNlcyBwdGhyZWFkcyBhbmQgZ2xpYmMuICovCi0jaWYgIWRlZmluZWQoRU5B
QkxFX1NBTVBMSU5HX1BST0ZJTEVSKQotI2lmIEVOQUJMRShKSVQpICYmIChPUyhXSU5ET1dTKSB8
fCBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkpCi0jZGVmaW5lIEVOQUJMRV9TQU1QTElOR19QUk9GSUxF
UiAxCi0jZWxzZQotI2RlZmluZSBFTkFCTEVfU0FNUExJTkdfUFJPRklMRVIgMAotI2VuZGlmCi0j
ZW5kaWYKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkgJiYgSEFWRShNQUNISU5FX0NPTlRFWFQp
Ci0jZGVmaW5lIEVOQUJMRV9XRUJBU1NFTUJMWV9GQVNUX01FTU9SWSAxCi0jZW5kaWYKLQotLyog
Q291bnRzIHVzZXMgb2Ygd3JpdGUgYmFycmllcnMgdXNpbmcgc2FtcGxpbmcgY291bnRlcnMuIEJl
IHN1cmUgdG8gYWxzbwotICAgc2V0IEVOQUJMRV9TQU1QTElOR19DT1VOVEVSUyB0byAxLiAqLwot
I2lmICFkZWZpbmVkKEVOQUJMRV9XUklURV9CQVJSSUVSX1BST0ZJTElORykKLSNkZWZpbmUgRU5B
QkxFX1dSSVRFX0JBUlJJRVJfUFJPRklMSU5HIDAKLSNlbmRpZgotCi0vKiBMb2dzIGFsbCBhbGxv
Y2F0aW9uLXJlbGF0ZWQgYWN0aXZpdHkgdGhhdCBnb2VzIHRocm91Z2ggZmFzdE1hbGxvYyBvciB0
aGUKLSAgIEpTQyBHQyAoYm90aCBjZWxscyBhbmQgYnV0dGVyZmxpZXMpLiBBbHNvIGxvZ3MgbWFy
a2luZy4gTm90ZSB0aGF0IHRoaXMKLSAgIGlzbid0IGEgY29tcGxldGVseSBhY2N1cmF0ZSB2aWV3
IG9mIHRoZSBoZWFwIHNpbmNlIGl0IGRvZXNuJ3QgaW5jbHVkZSBhbGwKLSAgIGJ1dHRlcmZseSBy
ZXNpemUgb3BlcmF0aW9ucywgZG9lc24ndCB0ZWxsIHlvdSB3aGF0IGlzIGdvaW5nIG9uIHdpdGgg
d2VhawotICAgcmVmZXJlbmNlcyAob3RoZXIgdGhhbiB0byB0ZWxsIHlvdSB3aGVuIHRoZXkncmUg
bWFya2VkKSwgYW5kIGRvZXNuJ3QKLSAgIHRyYWNrIGRpcmVjdCBtbWFwKCkgYWxsb2NhdGlvbnMg
b3IgdGhpbmdzIGxpa2UgSklUIGFsbG9jYXRpb24uICovCi0jaWYgIWRlZmluZWQoRU5BQkxFX0FM
TE9DQVRJT05fTE9HR0lORykKLSNkZWZpbmUgRU5BQkxFX0FMTE9DQVRJT05fTE9HR0lORyAwCi0j
ZW5kaWYKLQotLyogRW5hYmxlIHZlcmlmaWNhdGlvbiB0aGF0IHRoYXQgcmVnaXN0ZXIgYWxsb2Nh
dGlvbnMgYXJlIG5vdCBtYWRlIHdpdGhpbiBnZW5lcmF0ZWQgY29udHJvbCBmbG93LgotICAgVHVy
bmVkIG9uIGZvciBkZWJ1ZyBidWlsZHMuICovCi0jaWYgIWRlZmluZWQoRU5BQkxFX0RGR19SRUdJ
U1RFUl9BTExPQ0FUSU9OX1ZBTElEQVRJT04pICYmIEVOQUJMRShERkdfSklUKQotI2lmICFkZWZp
bmVkKE5ERUJVRykKLSNkZWZpbmUgRU5BQkxFX0RGR19SRUdJU1RFUl9BTExPQ0FUSU9OX1ZBTElE
QVRJT04gMQotI2Vsc2UKLSNkZWZpbmUgRU5BQkxFX0RGR19SRUdJU1RFUl9BTExPQ0FUSU9OX1ZB
TElEQVRJT04gMAotI2VuZGlmCi0jZW5kaWYKLQotLyogQ29uZmlndXJlIHRoZSBKSVQgKi8KLSNp
ZiBDUFUoWDg2KSAmJiBDT01QSUxFUihNU1ZDKQotI2RlZmluZSBKU0NfSE9TVF9DQUxMIF9fZmFz
dGNhbGwKLSNlbGlmIENQVShYODYpICYmIENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSNkZWZpbmUg
SlNDX0hPU1RfQ0FMTCBfX2F0dHJpYnV0ZV9fICgoZmFzdGNhbGwpKQotI2Vsc2UKLSNkZWZpbmUg
SlNDX0hPU1RfQ0FMTAotI2VuZGlmCi0KLSNpZiBDUFUoWDg2KSAmJiBPUyhXSU5ET1dTKQotI2Rl
ZmluZSBDQUxMSU5HX0NPTlZFTlRJT05fSVNfU1REQ0FMTCAxCi0jaWZuZGVmIENERUNMCi0jaWYg
Q09NUElMRVIoTVNWQykKLSNkZWZpbmUgQ0RFQ0wgX19jZGVjbAotI2Vsc2UKLSNkZWZpbmUgQ0RF
Q0wgX19hdHRyaWJ1dGVfXyAoKF9fY2RlY2wpKQotI2VuZGlmCi0jZW5kaWYKLSNlbHNlCi0jZGVm
aW5lIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMIDAKLSNlbmRpZgotCi0jaWYgQ1BVKFg4
NikKLSNkZWZpbmUgV1RGX0NPTVBJTEVSX1NVUFBPUlRTX0ZBU1RDQUxMX0NBTExJTkdfQ09OVkVO
VElPTiAxCi0jaWZuZGVmIEZBU1RDQUxMCi0jaWYgQ09NUElMRVIoTVNWQykKLSNkZWZpbmUgRkFT
VENBTEwgX19mYXN0Y2FsbAotI2Vsc2UKLSNkZWZpbmUgRkFTVENBTEwgIF9fYXR0cmlidXRlX18g
KChmYXN0Y2FsbCkpCi0jZW5kaWYKLSNlbmRpZgotI2Vsc2UKLSNkZWZpbmUgV1RGX0NPTVBJTEVS
X1NVUFBPUlRTX0ZBU1RDQUxMX0NBTExJTkdfQ09OVkVOVElPTiAwCi0jZW5kaWYKLQotI2lmIEVO
QUJMRShKSVQpICYmIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMCi0jZGVmaW5lIEpJVF9P
UEVSQVRJT04gQ0RFQ0wKLSNlbHNlCi0jZGVmaW5lIEpJVF9PUEVSQVRJT04KLSNlbmRpZgotCi0v
KiBDb25maWd1cmUgdGhlIGludGVycHJldGVyICovCi0jaWYgQ09NUElMRVIoR0NDX09SX0NMQU5H
KQotI2RlZmluZSBIQVZFX0NPTVBVVEVEX0dPVE8gMQotI2VuZGlmCi0KLS8qIERldGVybWluZSBp
ZiB3ZSBuZWVkIHRvIGVuYWJsZSBDb21wdXRlZCBHb3RvIE9wY29kZXMgb3Igbm90OiAqLwotI2lm
IEhBVkUoQ09NUFVURURfR09UTykgfHwgRU5BQkxFKEpJVCkKLSNkZWZpbmUgRU5BQkxFX0NPTVBV
VEVEX0dPVE9fT1BDT0RFUyAxCi0jZW5kaWYKLQotI2lmIEVOQUJMRShKSVQpICYmICFDT01QSUxF
UihNU1ZDKSAmJiBcCi0gICAgKENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02NCkg
fHwgKENQVShBUk1fVEhVTUIyKSAmJiBPUyhEQVJXSU4pKSkKLS8qIFRoaXMgZmVhdHVyZSB3b3Jr
cyBieSBlbWJlZGRpbmcgdGhlIE9wY29kZUlEIGluIHRoZSAzMiBiaXQganVzdCBiZWZvcmUgdGhl
IGdlbmVyYXRlZCBMTGludCBjb2RlCi0gICB0aGF0IGV4ZWN1dGVzIGVhY2ggb3Bjb2RlLiBJdCBj
YW5ub3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSBDTG9vcCBzaW5jZSB0aGVyZSdzIG5vIHdheSB0byBl
bWJlZCB0aGUKLSAgIE9wY29kZUlEIHdvcmQgaW4gdGhlIENMb29wJ3Mgc3dpdGNoIHN0YXRlbWVu
dCBjYXNlcy4gSXQgaXMgYWxzbyBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkIGZvciBNU1ZDLgot
Ki8KLSNkZWZpbmUgVVNFX0xMSU5UX0VNQkVEREVEX09QQ09ERV9JRCAxCi0jZW5kaWYKLQotLyog
UmVndWxhciBFeHByZXNzaW9uIFRyYWNpbmcgLSBTZXQgdG8gMSB0byB0cmFjZSBSZWdFeHAncyBp
biBqc2MuICBSZXN1bHRzIGR1bXBlZCBhdCBleGl0ICovCi0jZGVmaW5lIEVOQUJMRV9SRUdFWFBf
VFJBQ0lORyAwCi0KLS8qIFlldCBBbm90aGVyIFJlZ2V4IFJ1bnRpbWUgLSB0dXJuZWQgb24gYnkg
ZGVmYXVsdCBmb3IgSklUIGVuYWJsZWQgcG9ydHMuICovCi0jaWYgIWRlZmluZWQoRU5BQkxFX1lB
UlJfSklUKSAmJiBFTkFCTEUoSklUKQotI2RlZmluZSBFTkFCTEVfWUFSUl9KSVQgMQotCi0vKiBT
ZXR0aW5nIHRoaXMgZmxhZyBjb21wYXJlcyBKSVQgcmVzdWx0cyB3aXRoIGludGVycHJldGVyIHJl
c3VsdHMuICovCi0jZGVmaW5lIEVOQUJMRV9ZQVJSX0pJVF9ERUJVRyAwCi0jZW5kaWYKLQotLyog
SWYgZWl0aGVyIHRoZSBKSVQgb3IgdGhlIFJlZ0V4cCBKSVQgaXMgZW5hYmxlZCwgdGhlbiB0aGUg
QXNzZW1ibGVyIG11c3QgYmUKLSAgIGVuYWJsZWQgYXMgd2VsbDogKi8KLSNpZiBFTkFCTEUoSklU
KSB8fCBFTkFCTEUoWUFSUl9KSVQpCi0jaWYgZGVmaW5lZChFTkFCTEVfQVNTRU1CTEVSKSAmJiAh
RU5BQkxFX0FTU0VNQkxFUgotI2Vycm9yICJDYW5ub3QgZW5hYmxlIHRoZSBKSVQgb3IgUmVnRXhw
IEpJVCB3aXRob3V0IGVuYWJsaW5nIHRoZSBBc3NlbWJsZXIiCi0jZWxzZQotI3VuZGVmIEVOQUJM
RV9BU1NFTUJMRVIKLSNkZWZpbmUgRU5BQkxFX0FTU0VNQkxFUiAxCi0jZW5kaWYKLSNlbmRpZgot
Ci0vKiBJZiB0aGUgRGlzYXNzZW1ibGVyIGlzIGVuYWJsZWQsIHRoZW4gdGhlIEFzc2VtYmxlciBt
dXN0IGJlIGVuYWJsZWQgYXMgd2VsbDogKi8KLSNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQotI2lm
IGRlZmluZWQoRU5BQkxFX0FTU0VNQkxFUikgJiYgIUVOQUJMRV9BU1NFTUJMRVIKLSNlcnJvciAi
Q2Fubm90IGVuYWJsZSB0aGUgRGlzYXNzZW1ibGVyIHdpdGhvdXQgZW5hYmxpbmcgdGhlIEFzc2Vt
YmxlciIKLSNlbHNlCi0jdW5kZWYgRU5BQkxFX0FTU0VNQkxFUgotI2RlZmluZSBFTkFCTEVfQVNT
RU1CTEVSIDEKLSNlbmRpZgotI2VuZGlmCi0KLS8qIEVuYWJsZSB0aGUgZm9sbG93aW5nIGlmIHlv
dSB3YW50IHRvIHVzZSB0aGUgTWFjcm9Bc3NlbWJsZXI6OnByb2JlKCkgZmFjaWxpdHkKLSAgIHRv
IGRvIEpJVCBkZWJ1Z2dpbmcuICovCi0jaWYgKENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQ
VShBUk02NCkgfHwgKENQVShBUk1fVEhVTUIyKSAmJiBQTEFURk9STShJT1MpKSkgJiYgRU5BQkxF
KEpJVCkgJiYgT1MoREFSV0lOKQotI2RlZmluZSBFTkFCTEVfTUFTTV9QUk9CRSAxCi0jZWxzZQot
I2RlZmluZSBFTkFCTEVfTUFTTV9QUk9CRSAwCi0jZW5kaWYKLQotI2lmbmRlZiBFTkFCTEVfRVhD
RVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTgotI2lmZGVmIE5ERUJVRwotI2RlZmluZSBFTkFCTEVf
RVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTiAwCi0jZWxzZQotI2RlZmluZSBFTkFCTEVfRVhD
RVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTiAxCi0jZW5kaWYKLSNlbmRpZgotCi0jaWYgRU5BQkxF
KEpJVCkgJiYgSEFWRShNQUNISU5FX0NPTlRFWFQpICYmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KSB8fCBDUFUoQVJNNjQpKQotI2RlZmluZSBFTkFCTEVfU0lHTkFMX0JBU0VEX1ZNX1RSQVBTIDEK
LSNlbmRpZgotCi0vKiBDU1MgU2VsZWN0b3IgSklUIENvbXBpbGVyICovCi0jaWYgIWRlZmluZWQo
RU5BQkxFX0NTU19TRUxFQ1RPUl9KSVQpCi0jaWYgKENQVShYODZfNjQpIHx8IENQVShBUk02NCkg
fHwgKENQVShBUk1fVEhVTUIyKSAmJiBQTEFURk9STShJT1MpKSkgJiYgRU5BQkxFKEpJVCkgJiYg
KE9TKERBUldJTikgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpKQotI2RlZmluZSBF
TkFCTEVfQ1NTX1NFTEVDVE9SX0pJVCAxCi0jZWxzZQotI2RlZmluZSBFTkFCTEVfQ1NTX1NFTEVD
VE9SX0pJVCAwCi0jZW5kaWYKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFdFQkdMKSAmJiBQTEFURk9S
TShXSU4pCi0jZGVmaW5lIFVTRV9PUEVOR0wgMQotI2RlZmluZSBVU0VfT1BFTkdMX0VTIDEKLSNk
ZWZpbmUgVVNFX0VHTCAxCi0jZW5kaWYKLQotI2lmIEVOQUJMRShWSURFTykgJiYgUExBVEZPUk0o
V0lOX0NBSVJPKQotI2lmIEVOQUJMRShHU1RSRUFNRVJfV0lOQ0FJUk8pCi0jZGVmaW5lIFVTRV9N
RURJQV9GT1VOREFUSU9OIDAKLSNkZWZpbmUgVVNFX0dMSUIgMQotI2RlZmluZSBVU0VfR1NUUkVB
TUVSIDEKLSNlbHNlCi0jZGVmaW5lIFVTRV9NRURJQV9GT1VOREFUSU9OIDEKLSNlbmRpZgotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShXSU5fQ0FJUk8pCi0jZGVmaW5lIFVTRV9URVhUVVJFX01BUFBF
UiAxCi0jZW5kaWYKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgRU5BQkxFKEdSQVBISUNT
X0NPTlRFWFRfR0wpICYmICFkZWZpbmVkKFVTRV9URVhUVVJFX01BUFBFUl9HTCkKLSNkZWZpbmUg
VVNFX1RFWFRVUkVfTUFQUEVSX0dMIDEKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0j
ZGVmaW5lIFVTRV9QUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0sgMQotI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShDT0NPQSkgJiYgSEFWRShBQ0NFU1NJQklMSVRZKQotI2RlZmluZSBVU0VfQUND
RVNTSUJJTElUWV9DT05URVhUX01FTlVTIDEKLSNlbmRpZgotCi0jaWYgQ1BVKEFSTV9USFVNQjIp
IHx8IENQVShBUk02NCkKLSNkZWZpbmUgRU5BQkxFX0JSQU5DSF9DT01QQUNUSU9OIDEKLSNlbmRp
ZgotCi0jaWYgIWRlZmluZWQoRU5BQkxFX1RIUkVBRElOR19MSUJESVNQQVRDSCkgJiYgSEFWRShE
SVNQQVRDSF9IKQotI2RlZmluZSBFTkFCTEVfVEhSRUFESU5HX0xJQkRJU1BBVENIIDEKLSNlbGlm
ICFkZWZpbmVkKEVOQUJMRV9USFJFQURJTkdfT1BFTk1QKSAmJiBkZWZpbmVkKF9PUEVOTVApCi0j
ZGVmaW5lIEVOQUJMRV9USFJFQURJTkdfT1BFTk1QIDEKLSNlbGlmICFkZWZpbmVkKFRIUkVBRElO
R19HRU5FUklDKQotI2RlZmluZSBFTkFCTEVfVEhSRUFESU5HX0dFTkVSSUMgMQotI2VuZGlmCi0K
LSNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDx3dGYvZ2xpYi9HVHlwZWRlZnMuaD4KLSNlbmRpZgot
Ci0vKiBGSVhNRTogVGhpcyBkZWZpbmUgd29uJ3QgYmUgbmVlZGVkIG9uY2UgIzI3NTUxIGlzIGZ1
bGx5IGxhbmRlZC4gSG93ZXZlciwKLSAgIHNpbmNlIG1vc3QgcG9ydHMgdHJ5IHRvIHN1cHBvcnQg
c3ViLXByb2plY3QgaW5kZXBlbmRlbmNlLCBhZGRpbmcgbmV3IGhlYWRlcnMKLSAgIHRvIFdURiBj
YXVzZXMgbWFueSBwb3J0cyB0byBicmVhaywgYW5kIHNvIHRoaXMgd2F5IHdlIGNhbiBhZGRyZXNz
IHRoZSBidWlsZAotICAgYnJlYWthZ2VzIG9uZSBwb3J0IGF0IGEgdGltZS4gKi8KLSNpZiAhZGVm
aW5lZChVU0VfRVhQT1JUX01BQ1JPUykgJiYgKFBMQVRGT1JNKENPQ09BKSB8fCBPUyhXSU5ET1dT
KSkKLSNkZWZpbmUgVVNFX0VYUE9SVF9NQUNST1MgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChV
U0VfRVhQT1JUX01BQ1JPU19GT1JfVEVTVElORykgJiYgKFBMQVRGT1JNKEdUSykgfHwgT1MoV0lO
RE9XUykpCi0jZGVmaW5lIFVTRV9FWFBPUlRfTUFDUk9TX0ZPUl9URVNUSU5HIDEKLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCi0jZGVmaW5lIFVTRV9VTklYX0RP
TUFJTl9TT0NLRVRTIDEKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoVVNFX0lNTEFOR19GT05UX0xJ
TksyKQotI2RlZmluZSBVU0VfSU1MQU5HX0ZPTlRfTElOSzIgMQotI2VuZGlmCi0KLSNpZiAhZGVm
aW5lZChFTkFCTEVfR0NfVkFMSURBVElPTikgJiYgIWRlZmluZWQoTkRFQlVHKQotI2RlZmluZSBF
TkFCTEVfR0NfVkFMSURBVElPTiAxCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEVOQUJMRV9CSU5E
SU5HX0lOVEVHUklUWSkgJiYgIU9TKFdJTkRPV1MpCi0jZGVmaW5lIEVOQUJMRV9CSU5ESU5HX0lO
VEVHUklUWSAxCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2RlZmluZSBVU0VfQVZG
T1VOREFUSU9OIDEKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKFdJTkdESSkK
LSNpbmNsdWRlIDx3dGYvQVZGb3VuZGF0aW9uSGVhZGVyRGV0ZWN0aW9uLmg+Ci0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENHKSAmJiBIQVZFKEFWQ0YpCi0jZGVmaW5lIFVTRV9B
VkZPVU5EQVRJT04gMQotCi0jaWYgSEFWRShBVkNGX0xFR0lCTEVfT1VUUFVUKQotI2RlZmluZSBI
QVZFX0FWRk9VTkRBVElPTl9NRURJQV9TRUxFQ1RJT05fR1JPVVAgMQotI2RlZmluZSBIQVZFX0FW
Rk9VTkRBVElPTl9MRUdJQkxFX09VVFBVVF9TVVBQT1JUIDEKLSNkZWZpbmUgSEFWRV9NRURJQV9B
Q0NFU1NJQklMSVRZX0ZSQU1FV09SSyAxCi0jZW5kaWYKLQotI2VuZGlmCi0KLSNpZiAhZGVmaW5l
ZChFTkFCTEVfVFJFRV9ERUJVR0dJTkcpCi0jaWYgIWRlZmluZWQoTkRFQlVHKQotI2RlZmluZSBF
TkFCTEVfVFJFRV9ERUJVR0dJTkcgMQotI2Vsc2UKLSNkZWZpbmUgRU5BQkxFX1RSRUVfREVCVUdH
SU5HIDAKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKE1B
QykKLSNkZWZpbmUgVVNFX0NPUkVNRURJQSAxCi0jZGVmaW5lIEhBVkVfQVZGT1VOREFUSU9OX1ZJ
REVPX09VVFBVVCAxCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFD
KSB8fCAoT1MoV0lORE9XUykgJiYgVVNFKENHKSkKLSNkZWZpbmUgSEFWRV9BVkZPVU5EQVRJT05f
TUVESUFfU0VMRUNUSU9OX0dST1VQIDEKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9TKSB8fCBQ
TEFURk9STShNQUMpIHx8IChPUyhXSU5ET1dTKSAmJiBVU0UoQ0cpKQotI2RlZmluZSBIQVZFX0FW
Rk9VTkRBVElPTl9MRUdJQkxFX09VVFBVVF9TVVBQT1JUIDEKLSNkZWZpbmUgSEFWRV9NRURJQV9B
Q0NFU1NJQklMSVRZX0ZSQU1FV09SSyAxCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKElPUykgfHwg
UExBVEZPUk0oTUFDKQotI2RlZmluZSBIQVZFX0FWRk9VTkRBVElPTl9MT0FERVJfREVMRUdBVEUg
MQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShJT1MpICYmIEVOQUJM
RShXRUJfUlRDKSkKLSNkZWZpbmUgVVNFX1ZJREVPVE9PTEJPWCAxCi0jZW5kaWYKLQotI2lmICFQ
TEFURk9STShXSU4pCi0jZGVmaW5lIFVTRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZ
X01PTklUT1IgMQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0jZGVmaW5lIFVTRV9DT1JF
QVVESU8gMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChVU0VfWkxJQikKLSNkZWZpbmUgVVNFX1pM
SUIgMQotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9RT1NfQ0xBU1NFUwotI2lmIFBMQVRGT1JNKENP
Q09BKQotI2RlZmluZSBIQVZFX1FPU19DTEFTU0VTIDEKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5k
ZWYgSEFWRV9WT1VDSEVSUwotI2lmIFBMQVRGT1JNKENPQ09BKQotI2RlZmluZSBIQVZFX1ZPVUNI
RVJTIDEKLSNlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgVVNFX0dSQU1NQVJfQ0hFQ0tJTkcgMQot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKLSNkZWZpbmUgVVNFX1VOSUZJ
RURfVEVYVF9DSEVDS0lORyAxCi0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0jZGVmaW5lIFVT
RV9BVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCAxCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1B
QykKLS8qIFNvbWUgcGxhdGZvcm1zIHByb3ZpZGUgVUkgZm9yIHN1Z2dlc3RpbmcgYXV0b2NvcnJl
Y3Rpb24uICovCi0jZGVmaW5lIFVTRV9BVVRPQ09SUkVDVElPTl9QQU5FTCAxCi0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKENPQ09BKQotLyogU29tZSBwbGF0Zm9ybXMgdXNlIHNwZWxsaW5nIGFuZCBh
dXRvY29ycmVjdGlvbiBtYXJrZXJzIHRvIHByb3ZpZGUgdmlzdWFsIGN1ZS4gT24gc3VjaCBwbGF0
Zm9ybSwgaWYgd29yZCB3aXRoIG1hcmtlciBpcyBlZGl0ZWQsIHdlIG5lZWQgdG8gcmVtb3ZlIHRo
ZSBtYXJrZXIuICovCi0jZGVmaW5lIFVTRV9NQVJLRVJfUkVNT1ZBTF9VUE9OX0VESVRJTkcgMQot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0jZGVmaW5lIFVTRV9JTlNFUlRJT05fVU5ET19H
Uk9VUElORyAxCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2RlZmluZSBIQVZFX1RJ
TUlOR0RBVEFPUFRJT05TIDEKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jZGVmaW5l
IFVTRV9BVURJT19TRVNTSU9OIDEKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpICYmICFQ
TEFURk9STShJT1NfU0lNVUxBVE9SKQotI2RlZmluZSBVU0VfSU9TVVJGQUNFIDEKLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0jZGVmaW5lIEVOQUJMRV9SRVNPVVJDRV9VU0FHRSAxCi0j
ZW5kaWYKLQotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQotI3VuZGVmIEVOQUJM
RV9PUEVOVFlQRV9WRVJUSUNBTAotI2RlZmluZSBFTkFCTEVfT1BFTlRZUEVfVkVSVElDQUwgMQot
I2RlZmluZSBFTkFCTEVfQ1NTM19URVhUX0RFQ09SQVRJT05fU0tJUF9JTksgMQotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShHVEspCi0jZGVmaW5lIFVTRV9XT0ZGMiAxCi0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKENPQ09BKQotI2RlZmluZSBFTkFCTEVfQ1NTM19URVhUX0RFQ09SQVRJT05fU0tJUF9J
TksgMQotI2VuZGlmCi0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3VuZGVmIF9fU1REQ19GT1JNQVRf
TUFDUk9TCi0jZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TCi0jdW5kZWYgX19TVERDX0xJTUlU
X01BQ1JPUwotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TCi0jZW5kaWYKLQotI2lmIFBMQVRG
T1JNKE1BQykKLSNkZWZpbmUgSEFWRV9OU19BQ1RJVklUWSAxCi0jZW5kaWYKLQotI2lmIChPUyhE
QVJXSU4pICYmIFVTRShDRykpIHx8IChVU0UoRlJFRVRZUEUpICYmICFQTEFURk9STShHVEspKSB8
fCAoUExBVEZPUk0oV0lOKSAmJiAoVVNFKENHKSB8fCBVU0UoQ0FJUk8pKSkKLSN1bmRlZiBFTkFC
TEVfT1BFTlRZUEVfTUFUSAotI2RlZmluZSBFTkFCTEVfT1BFTlRZUEVfTUFUSCAxCi0jZW5kaWYK
LQotLyogU2V0IFRBUkdFVF9PU19JUEhPTkUgdG8gMCBieSBkZWZhdWx0IHRvIGFsbG93IHVzaW5n
IGl0IGFzIGEgZ3VhcmQgCi0gKiBpbiBjcm9zcy1wbGF0Zm9ybSB0aGUgc2FtZSB3YXkgYXMgaXQg
aXMgdXNlZCBpbiBPUyhEQVJXSU4pIGNvZGUuICovIAotI2lmICFkZWZpbmVkKFRBUkdFVF9PU19J
UEhPTkUpICYmICFPUyhEQVJXSU4pCi0jZGVmaW5lIFRBUkdFVF9PU19JUEhPTkUgMAotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNkZWZpbmUgVVNFX01FRElBVE9PTEJPWCAxCi0jZW5k
aWYKLQotLyogRklYTUU6IEVuYWJsZSBVU0VfT1NfTE9HIHdoZW4gYnVpbGRpbmcgd2l0aCB0aGUg
cHVibGljIGlPUyAxMCBTREsgb25jZSB3ZSBmaXggPHJkYXI6Ly9wcm9ibGVtLzI3NzU4MzQzPi4g
Ki8KLSNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShJT1MpICYmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspKQotI2RlZmluZSBVU0VfT1NfTE9HIDEKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxf
U0RLKQotI2RlZmluZSBVU0VfT1NfU1RBVEUgMQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQotI2RlZmluZSBIQVZFX1NFQ19UUlVTVF9TRVJJQUxJ
WkFUSU9OIDEKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoV1RGX0RFRkFVTFRfRVZFTlRfTE9PUCkK
LSNkZWZpbmUgV1RGX0RFRkFVTFRfRVZFTlRfTE9PUCAxCi0jZW5kaWYKLQotI2lmIFdURl9ERUZB
VUxUX0VWRU5UX0xPT1AKLSNpZiBVU0UoR0xJQikKLS8qIFVzZSBHTGliJ3MgZXZlbnQgbG9vcCBh
YnN0cmFjdGlvbi4gUHJpbWFyaWx5IEdUSyBwb3J0IHVzZXMgaXQuICovCi0jZGVmaW5lIFVTRV9H
TElCX0VWRU5UX0xPT1AgMQotI2VsaWYgT1MoV0lORE9XUykKLS8qIFVzZSBXaW5kb3dzIG1lc3Nh
Z2UgcHVtcCBhYnN0cmFjdGlvbi4KLSAqIEV2ZW4gaWYgdGhlIHBvcnQgaXMgQXBwbGVXaW4sIHdl
IHVzZSB0aGUgV2luZG93cyBtZXNzYWdlIHB1bXAgc3lzdGVtIGZvciB0aGUgZXZlbnQgbG9vcCwK
LSAqIHNvIHRoYXQgVVNFKFdJTkRPV1NfRVZFTlRfTE9PUCkgJiYgVVNFKENGKSBjYW4gYmUgdHJ1
ZS4KLSAqIEFuZCBQTEFURk9STShXSU4pIGFuZCBQTEFURk9STShHVEspIGFyZSBleGNsdXNpdmUu
IElmIHRoZSBwb3J0IGlzIEdUSywKLSAqIFBMQVRGT1JNKFdJTikgc2hvdWxkIGJlIGZhbHNlLiBB
bmQgaW4gdGhhdCBjYXNlLCBHTGliJ3MgZXZlbnQgbG9vcCBpcyB1c2VkLgotICovCi0jZGVmaW5l
IFVTRV9XSU5ET1dTX0VWRU5UX0xPT1AgMQotI2VsaWYgUExBVEZPUk0oQ09DT0EpCi0vKiBPUyBY
IGFuZCBJT1MuIFVzZSBDb3JlRm91bmRhdGlvbiAmIEdDRCBhYnN0cmFjdGlvbi4gKi8KLSNkZWZp
bmUgVVNFX0NPQ09BX0VWRU5UX0xPT1AgMQotI2Vsc2UKLSNkZWZpbmUgVVNFX0dFTkVSSUNfRVZF
TlRfTE9PUCAxCi0jZW5kaWYKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2RlZmluZSBV
U0VfTUVESUFSRU1PVEUgMQotI2VuZGlmCi0KLSNpZiBDT01QSUxFUihNU1ZDKQotLyogRW5hYmxl
IHN0cmljdCBydW50aW1lIHN0YWNrIGJ1ZmZlciBjaGVja3MuICovCi0jcHJhZ21hIHN0cmljdF9n
c19jaGVjayhvbikKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2RlZmluZSBIQVZFX1RP
VUNIX0JBUiAxCi0jZGVmaW5lIEhBVkVfQURWQU5DRURfU1BFTExfQ0hFQ0tJTkcgMQotCi0jaWYg
ZGVmaW5lZChfX0xQNjRfXykKLSNkZWZpbmUgRU5BQkxFX1dFQl9QTEFZQkFDS19DT05UUk9MU19N
QU5BR0VSIDEKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxF
KFdFQl9SVEMpCi0jZGVmaW5lIFVTRV9MSUJXRUJSVEMgMQotI2VuZGlmCi0KLSNpZiBQTEFURk9S
TShNQUMpIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDExMDAwMCkgfHwgVVNFKEdDUllQVCkKLSNkZWZpbmUgSEFWRV9SU0FfUFNTIDEKLSNl
bmRpZgotCi0jaWYgIU9TKFdJTkRPV1MpICYmICFPUyhTT0xBUklTKQotI2RlZmluZSBIQVZFX1NU
QUNLX0JPVU5EU19GT1JfTkVXX1RIUkVBRCAxCi0jZW5kaWYKLQotI2VuZGlmIC8qIFdURl9QbGF0
Zm9ybV9oICovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
UGxhdGZvcm1SZWdpc3RlcnMuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Q
bGF0Zm9ybVJlZ2lzdGVycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmNkNzg5
YjBhZTQwMTU2N2JjMjdjZTRiMDhkNWY1MDIyNjg3YzMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+Ci0KLSNpZiBPUyhEQVJXSU4pCi0jaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+
Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZWxpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgPHdpbmRv
d3MuaD4KLSNlbHNlCi0jaW5jbHVkZSA8dWNvbnRleHQuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotI2lmIE9TKERBUldJTikKLQotI2lmIENQVShYODYpCi10eXBlZGVmIGkzODZfdGhy
ZWFkX3N0YXRlX3QgUGxhdGZvcm1SZWdpc3RlcnM7Ci0jZWxpZiBDUFUoWDg2XzY0KQotdHlwZWRl
ZiB4ODZfdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKLSNlbGlmIENQVShQUEMp
Ci10eXBlZGVmIHBwY190aHJlYWRfc3RhdGVfdCBQbGF0Zm9ybVJlZ2lzdGVyczsKLSNlbGlmIENQ
VShQUEM2NCkKLXR5cGVkZWYgcHBjX3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1SZWdpc3RlcnM7
Ci0jZWxpZiBDUFUoQVJNKQotdHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRlX3QgUGxhdGZvcm1SZWdp
c3RlcnM7Ci0jZWxpZiBDUFUoQVJNNjQpCi10eXBlZGVmIGFybV90aHJlYWRfc3RhdGU2NF90IFBs
YXRmb3JtUmVnaXN0ZXJzOwotI2Vsc2UKLSNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQotI2Vu
ZGlmCi0KLWlubGluZSBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzRnJvbVVDb250ZXh0KHVj
b250ZXh0X3QqIHVjb250ZXh0KQotewotICAgIHJldHVybiB1Y29udGV4dC0+dWNfbWNvbnRleHQt
Pl9fc3M7Ci19Ci0KLSNlbGlmIE9TKFdJTkRPV1MpCi0KLXVzaW5nIFBsYXRmb3JtUmVnaXN0ZXJz
ID0gQ09OVEVYVDsKLQotI2VsaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi0KLXN0cnVjdCBQbGF0
Zm9ybVJlZ2lzdGVycyB7Ci0gICAgbWNvbnRleHRfdCBtYWNoaW5lQ29udGV4dDsKLX07Ci0KLWlu
bGluZSBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzRnJvbVVDb250ZXh0KHVjb250ZXh0X3Qq
IHVjb250ZXh0KQotewotI2lmIENQVShQUEMpCi0gICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8UGxh
dGZvcm1SZWdpc3RlcnMqPih1Y29udGV4dC0+dWNfbWNvbnRleHQudWNfcmVncyk7Ci0jZWxzZQot
ICAgIHJldHVybiAqYml0d2lzZV9jYXN0PFBsYXRmb3JtUmVnaXN0ZXJzKj4oJnVjb250ZXh0LT51
Y19tY29udGV4dCk7Ci0jZW5kaWYKLX0KLQotI2Vsc2UKLQotc3RydWN0IFBsYXRmb3JtUmVnaXN0
ZXJzIHsKLSAgICB2b2lkKiBzdGFja1BvaW50ZXI7Ci19OwotCi0jZW5kaWYKLQotfSAvLyBuYW1l
c3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6UGxhdGZvcm1SZWdpc3RlcnM7CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvUHJpbnRTdHJlYW0uY3BwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1ByaW50U3RyZWFtLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWUxMWM5OTM0YjViNTE4ZmNhNjVjOTEzZGVhZTRiNWMzZjQyMmNi
Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvUHJpbnRTdHJlYW0uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCi0K
LSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotUHJpbnRTdHJlYW06OlByaW50U3RyZWFt
KCkgeyB9Ci1QcmludFN0cmVhbTo6flByaW50U3RyZWFtKCkgeyB9IC8vIEZvcmNlIHRoZSB2dGFi
bGUgdG8gYmUgaW4gdGhpcyBtb2R1bGUKLQotdm9pZCBQcmludFN0cmVhbTo6cHJpbnRmKGNvbnN0
IGNoYXIqIGZvcm1hdCwgLi4uKQotewotICAgIHZhX2xpc3QgYXJnTGlzdDsKLSAgICB2YV9zdGFy
dChhcmdMaXN0LCBmb3JtYXQpOwotICAgIHZwcmludGYoZm9ybWF0LCBhcmdMaXN0KTsKLSAgICB2
YV9lbmQoYXJnTGlzdCk7Ci19Ci0KLXZvaWQgUHJpbnRTdHJlYW06OnByaW50ZlZhcmlhYmxlRm9y
bWF0KGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQotewotI2lmIENPTVBJTEVSKENMQU5HKQotI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25v
cmVkICItV2Zvcm1hdC1ub25saXRlcmFsIgotI2VsaWYgQ09NUElMRVIoR0NDKQotI3ByYWdtYSBH
Q0MgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc3Vn
Z2VzdC1hdHRyaWJ1dGU9Zm9ybWF0IgotI2VuZGlmCi0gICAgdmFfbGlzdCBhcmdMaXN0OwotICAg
IHZhX3N0YXJ0KGFyZ0xpc3QsIGZvcm1hdCk7Ci0gICAgdnByaW50Zihmb3JtYXQsIGFyZ0xpc3Qp
OwotICAgIHZhX2VuZChhcmdMaXN0KTsKLSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwb3AKLSNlbGlmIENPTVBJTEVSKEdDQykKLSNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgcG9wCi0jZW5kaWYKLX0KLQotdm9pZCBQcmludFN0cmVhbTo6Zmx1c2goKQotewotfQot
Ci1QcmludFN0cmVhbSYgUHJpbnRTdHJlYW06OmJlZ2luKCkKLXsKLSAgICByZXR1cm4gKnRoaXM7
Ci19Ci0KLXZvaWQgUHJpbnRTdHJlYW06OmVuZCgpCi17Ci19Ci0KLXZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBzdHJpbmcpCi17Ci0gICAgb3V0LnByaW50
ZigiJXMiLCBzdHJpbmcpOwotfQotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQotewotICAgIG91dC5wcmludChzdHJpbmcudXRm
OCgpKTsKLX0KLQotdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IENT
dHJpbmcmIHN0cmluZykKLXsKLSAgICBvdXQucHJpbnQoc3RyaW5nLmRhdGEoKSk7Ci19Ci0KLXZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBTdHJpbmcmIHN0cmluZykK
LXsKLSAgICBvdXQucHJpbnQoc3RyaW5nLnV0ZjgoKSk7Ci19Ci0KLXZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmcpCi17Ci0gICAgaWYg
KCFzdHJpbmcpIHsKLSAgICAgICAgb3V0LnByaW50KCIobnVsbCBTdHJpbmdJbXBsKikiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBvdXQucHJpbnQoc3RyaW5nLT51dGY4KCkpOwotfQot
Ci12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgYm9vbCB2YWx1ZSkKLXsKLSAg
ICBvdXQucHJpbnQoYm9vbEZvclByaW50aW5nKHZhbHVlKSk7Ci19Ci0KLXZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBpbnQgdmFsdWUpCi17Ci0gICAgb3V0LnByaW50ZigiJWQi
LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCB1bnNp
Z25lZCB2YWx1ZSkKLXsKLSAgICBvdXQucHJpbnRmKCIldSIsIHZhbHVlKTsKLX0KLQotdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIHNpZ25lZCBjaGFyIHZhbHVlKQotewotICAg
IG91dC5wcmludGYoIiVkIiwgc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpOwotfQotCi12b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgdW5zaWduZWQgY2hhciB2YWx1ZSkKLXsKLSAg
ICBvdXQucHJpbnRmKCIldSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSkpOwotfQotCi12
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgc2hvcnQgdmFsdWUpCi17Ci0gICAg
b3V0LnByaW50ZigiJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSk7Ci19Ci0KLXZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKLXsKLSAg
ICBvdXQucHJpbnRmKCIldSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSkpOwotfQotCi12
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgbG9uZyB2YWx1ZSkKLXsKLSAgICBv
dXQucHJpbnRmKCIlbGQiLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCB1bnNpZ25lZCBsb25nIHZhbHVlKQotewotICAgIG91dC5wcmludGYoIiVsdSIs
IHZhbHVlKTsKLX0KLQotdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGxvbmcg
bG9uZyB2YWx1ZSkKLXsKLSAgICBvdXQucHJpbnRmKCIlbGxkIiwgdmFsdWUpOwotfQotCi12b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVl
KQotewotICAgIG91dC5wcmludGYoIiVsbHUiLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBvdXQucHJpbnQoc3Rh
dGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOwotfQotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgZG91YmxlIHZhbHVlKQotewotICAgIG91dC5wcmludGYoIiVsZiIsIHZhbHVl
KTsKLX0KLQotdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFJhd1BvaW50ZXIg
dmFsdWUpCi17Ci0gICAgb3V0LnByaW50ZigiJXAiLCB2YWx1ZS52YWx1ZSgpKTsKLX0KLQotdm9p
ZCBkdW1wQ2hhcmFjdGVyKFByaW50U3RyZWFtJiBvdXQsIGNoYXIgdmFsdWUpCi17Ci0gICAgb3V0
LnByaW50ZigiJWMiLCB2YWx1ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvUHJpbnRTdHJlYW0uaCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9QcmludFN0cmVhbS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1YjM5MTNjNmRhNTU0OWZiYWU4ZWZiMDFhZTkyOWZmNTM4NzE2
NzVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9QcmludFN0cmVhbS5oCisrKyAvZGV2L251bGwK
QEAgLTEsMzU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFByaW50U3RyZWFtX2gKLSNkZWZpbmUgUHJpbnRT
dHJlYW1faAotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL1Jhd1BvaW50ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLQotY2xhc3MgQXRvbWljU3RyaW5nSW1wbDsKLWNsYXNzIENTdHJpbmc7Ci1j
bGFzcyBTdHJpbmc7Ci1jbGFzcyBTdHJpbmdJbXBsOwotY2xhc3MgU3RyaW5nVmlldzsKLWNsYXNz
IFVuaXF1ZWRTdHJpbmdJbXBsOwotCi1pbmxpbmUgY29uc3QgY2hhciogYm9vbEZvclByaW50aW5n
KGJvb2wgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlID8gInRydWUiIDogImZhbHNlIjsKLX0K
LQotY2xhc3MgUHJpbnRTdHJlYW0gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOyBXVEZf
TUFLRV9OT05DT1BZQUJMRShQcmludFN0cmVhbSk7Ci1wdWJsaWM6Ci0gICAgUHJpbnRTdHJlYW0o
KTsKLSAgICB2aXJ0dWFsIH5QcmludFN0cmVhbSgpOwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJpbnRmKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBXVEZfQVRUUklCVVRFX1BSSU5U
RigyLCAzKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludGZWYXJpYWJsZUZvcm1h
dChjb25zdCBjaGFyKiBmb3JtYXQsIC4uLik7Ci0gICAgdmlydHVhbCB2b2lkIHZwcmludGYoY29u
c3QgY2hhciogZm9ybWF0LCB2YV9saXN0KSBXVEZfQVRUUklCVVRFX1BSSU5URigyLCAwKSA9IDA7
Ci0KLSAgICAvLyBUeXBpY2FsbHkgYSBuby1vcCBmb3IgbWFueSBzdWJjbGFzc2VzIG9mIFByaW50
U3RyZWFtLCB0aGlzIGlzIGEgaGludCB0aGF0Ci0gICAgLy8gdGhlIGltcGxlbWVudGF0aW9uIHNo
b3VsZCBmbHVzaCBpdHMgYnVmZmVycyBpZiBpdCBoYWQgbm90IGRvbmUgc28gYWxyZWFkeS4KLSAg
ICB2aXJ0dWFsIHZvaWQgZmx1c2goKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgotICAgIHZvaWQgYXRvbWljYWxseShjb25zdCBGdW5jJiBmdW5jKQotICAgIHsKLSAgICAgICAg
ZnVuYyhiZWdpbigpKTsKLSAgICAgICAgZW5kKCk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIFR5cGVzPgotICAgIHZvaWQgcHJpbnQoY29uc3QgVHlwZXMmLi4uIHZhbHVl
cykKLSAgICB7Ci0gICAgICAgIGF0b21pY2FsbHkoCi0gICAgICAgICAgICBbJl0gKFByaW50U3Ry
ZWFtJiBvdXQpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRJbXBsKHZhbHVlcy4uLik7Ci0g
ICAgICAgICAgICB9KTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlw
ZXM+Ci0gICAgdm9pZCBwcmludGxuKGNvbnN0IFR5cGVzJi4uLiB2YWx1ZXMpCi0gICAgewotICAg
ICAgICBwcmludCh2YWx1ZXMuLi4sICJcbiIpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZv
aWQgcHJpbnRJbXBsKCkgeyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4u
LiBUeXBlcz4KLSAgICB2b2lkIHByaW50SW1wbChjb25zdCBUJiB2YWx1ZSwgY29uc3QgVHlwZXMm
Li4uIHJlbWFpbmluZ1ZhbHVlcykKLSAgICB7Ci0gICAgICAgIHByaW50SW50ZXJuYWwoKnRoaXMs
IHZhbHVlKTsKLSAgICAgICAgcHJpbnRJbXBsKHJlbWFpbmluZ1ZhbHVlcy4uLik7Ci0gICAgfQot
ICAgIAotICAgIHZpcnR1YWwgUHJpbnRTdHJlYW0mIGJlZ2luKCk7Ci0gICAgdmlydHVhbCB2b2lk
IGVuZCgpOwotfTsKLQotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIGNvbnN0IGNoYXIqKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBjb25zdCBTdHJpbmdWaWV3Jik7Ci1XVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgY29uc3QgQ1N0cmluZyYpOwotV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGNvbnN0IFN0
cmluZyYpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIGNvbnN0IFN0cmluZ0ltcGwqKTsKLWlubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgY29uc3QgQXRvbWljU3RyaW5nSW1wbCogdmFsdWUpIHsgcHJpbnRJbnRlcm5h
bChvdXQsIGJpdHdpc2VfY2FzdDxjb25zdCBTdHJpbmdJbXBsKj4odmFsdWUpKTsgfQotaW5saW5l
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBVbmlxdWVkU3RyaW5n
SW1wbCogdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsIGJpdHdpc2VfY2FzdDxjb25zdCBTdHJp
bmdJbXBsKj4odmFsdWUpKTsgfQotaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCYgdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChv
dXQsICZ2YWx1ZSk7IH0KLWlubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgY2hhciogdmFsdWUpIHsgcHJpbnRJbnRlcm5hbChvdXQsIHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPih2YWx1ZSkpOyB9Ci1pbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIENTdHJpbmcmIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25z
dCBDU3RyaW5nJj4odmFsdWUpKTsgfQotaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBTdHJpbmcmIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2Fz
dDxjb25zdCBTdHJpbmcmPih2YWx1ZSkpOyB9Ci1pbmxpbmUgdm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIFN0cmluZ0ltcGwqIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBz
dGF0aWNfY2FzdDxjb25zdCBTdHJpbmdJbXBsKj4odmFsdWUpKTsgfQotaW5saW5lIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSkgeyBw
cmludEludGVybmFsKG91dCwgc3RhdGljX2Nhc3Q8Y29uc3QgQXRvbWljU3RyaW5nSW1wbCo+KHZh
bHVlKSk7IH0KLWlubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVW5p
cXVlZFN0cmluZ0ltcGwqIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxj
b25zdCBVbmlxdWVkU3RyaW5nSW1wbCo+KHZhbHVlKSk7IH0KLWlubGluZSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVW5pcXVlZFN0cmluZ0ltcGwmIHZhbHVlKSB7IHByaW50
SW50ZXJuYWwob3V0LCAmdmFsdWUpOyB9Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgYm9vbCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgc2lnbmVkIGNoYXIpOyAvLyBOT1RFOiB0aGlzIHByaW50
cyBhcyBhIG51bWJlciwgbm90IGFzIGEgY2hhcmFjdGVyOyB1c2UgQ2hhcmFjdGVyRHVtcCBpZiB5
b3Ugd2FudCB0aGUgY2hhcmFjdGVyCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiwgdW5zaWduZWQgY2hhcik7IC8vIE5PVEU6IHNlZSBhYm92ZS4KLVdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBzaG9ydCk7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgdW5z
aWduZWQgc2hvcnQpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIGludCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiwgdW5zaWduZWQpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIGxvbmcpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYsIHVuc2lnbmVkIGxvbmcpOwotV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGxvbmcgbG9uZyk7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgdW5zaWduZWQgbG9uZyBs
b25nKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
LCBmbG9hdCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgZG91YmxlKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBSYXdQb2ludGVyKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICB2YWx1
ZS5kdW1wKG91dCk7Ci19Ci0KLSNkZWZpbmUgTUFLRV9QUklOVF9BREFQVE9SKE5hbWUsIFR5cGUs
IGZ1bmN0aW9uKSBcCi0gICAgY2xhc3MgTmFtZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgTmFtZShjb25zdCBUeXBlJiB2YWx1ZSkgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICA6IG1fdmFsdWUodmFsdWUpICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdCAgICAgICAgXAotICAgICAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZ1bmN0aW9uKG91dCwg
bV92YWx1ZSk7ICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIHByaXZhdGU6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgVHlwZSBtX3ZhbHVlOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgfQotCi0jZGVmaW5lIE1BS0VfUFJJTlRfTUVUSE9EX0FEQVBUT1IoTmFt
ZSwgVHlwZSwgbWV0aG9kKSBcCi0gICAgY2xhc3MgTmFtZSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgTmFtZShjb25zdCBUeXBlJiB2YWx1ZSkgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICA6IG1fdmFsdWUodmFsdWUpICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdCAgICAgICAgXAotICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIG1fdmFsdWUu
bWV0aG9kKG91dCk7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHByaXZhdGU6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgVHlwZSYgbV92YWx1ZTsgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgfQotCi0jZGVmaW5lIE1BS0VfUFJJTlRfTUVUSE9EKFR5cGUs
IGR1bXBNZXRob2QsIG1ldGhvZCkgXAotICAgIE1BS0VfUFJJTlRfTUVUSE9EX0FEQVBUT1IoRHVt
cGVyRm9yXyMjbWV0aG9kLCBUeXBlLCBkdW1wTWV0aG9kKTsgICAgXAotICAgIER1bXBlckZvcl8j
I21ldGhvZCBtZXRob2QoKSBjb25zdCB7IHJldHVybiBEdW1wZXJGb3JfIyNtZXRob2QoKnRoaXMp
OyB9Ci0KLS8vIFVzZSBhbiBhZGFwdG9yLWJhc2VkIGR1bXBlciBmb3IgY2hhcmFjdGVycyB0byBh
dm9pZCBzaXR1YXRpb25zIHdoZXJlCi0vLyB5b3UndmUgImNvbXByZXNzZWQiIGFuIGludGVnZXIg
dG8gYSBjaGFyYWN0ZXIgYW5kIGl0IGVuZHMgdXAgcHJpbnRpbmcKLS8vIGFzIEFTQ0lJIHdoZW4g
eW91IHdhbnRlZCBpdCB0byBwcmludCBhcyBhIG51bWJlci4KLVdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIGR1bXBDaGFyYWN0ZXIoUHJpbnRTdHJlYW0mLCBjaGFyKTsKLU1BS0VfUFJJTlRfQURBUFRP
UihDaGFyYWN0ZXJEdW1wLCBjaGFyLCBkdW1wQ2hhcmFjdGVyKTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLWNsYXNzIFBvaW50ZXJEdW1wIHsKLXB1YmxpYzoKLSAgICBQb2ludGVyRHVtcChjb25z
dCBUKiBwdHIpCi0gICAgICAgIDogbV9wdHIocHRyKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9w
dHIpCi0gICAgICAgICAgICBwcmludEludGVybmFsKG91dCwgKm1fcHRyKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgb3V0LnByaW50KCIobnVsbCkiKTsKLSAgICB9Ci1wcml2YXRlOgotICAg
IGNvbnN0IFQqIG1fcHRyOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVBvaW50ZXJEdW1w
PFQ+IHBvaW50ZXJEdW1wKGNvbnN0IFQqIHB0cikgeyByZXR1cm4gUG9pbnRlckR1bXA8VD4ocHRy
KTsgfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxUPiYgdmFsdWUpCi17Ci0gICAgb3V0LnBy
aW50KHBvaW50ZXJEdW1wKHZhbHVlLmdldCgpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgUmVmUHRyPFQ+JiB2
YWx1ZSkKLXsKLSAgICBvdXQucHJpbnQocG9pbnRlckR1bXAodmFsdWUuZ2V0KCkpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWNsYXNzIFZhbHVlSW5Db250ZXh0IHsK
LXB1YmxpYzoKLSAgICBWYWx1ZUluQ29udGV4dChjb25zdCBUJiB2YWx1ZSwgVSogY29udGV4dCkK
LSAgICAgICAgOiBtX3ZhbHVlKCZ2YWx1ZSkKLSAgICAgICAgLCBtX2NvbnRleHQoY29udGV4dCkK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAotICAgIHsKLSAgICAgICAgbV92YWx1ZS0+ZHVtcEluQ29udGV4dChvdXQsIG1fY29udGV4dCk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFQqIG1fdmFsdWU7Ci0gICAgVSogbV9jb250
ZXh0OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLVZhbHVlSW5Db250
ZXh0PFQsIFU+IGluQ29udGV4dChjb25zdCBUJiB2YWx1ZSwgVSogY29udGV4dCkKLXsKLSAgICBy
ZXR1cm4gVmFsdWVJbkNvbnRleHQ8VCwgVT4odmFsdWUsIGNvbnRleHQpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotY2xhc3MgUG9pbnRlckR1bXBJbkNvbnRleHQgewot
cHVibGljOgotICAgIFBvaW50ZXJEdW1wSW5Db250ZXh0KGNvbnN0IFQqIHB0ciwgVSogY29udGV4
dCkKLSAgICAgICAgOiBtX3B0cihwdHIpCi0gICAgICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0g
ICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIGlmIChtX3B0cikKLSAgICAgICAgICAgIG1fcHRyLT5kdW1wSW5Db250
ZXh0KG91dCwgbV9jb250ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0LnByaW50
KCIobnVsbCkiKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgVCogbV9wdHI7Ci0gICAg
VSogbV9jb250ZXh0OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLVBv
aW50ZXJEdW1wSW5Db250ZXh0PFQsIFU+IHBvaW50ZXJEdW1wSW5Db250ZXh0KGNvbnN0IFQqIHB0
ciwgVSogY29udGV4dCkKLXsKLSAgICByZXR1cm4gUG9pbnRlckR1bXBJbkNvbnRleHQ8VCwgVT4o
cHRyLCBjb250ZXh0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWNs
YXNzIFZhbHVlSWdub3JpbmdDb250ZXh0IHsKLXB1YmxpYzoKLSAgICBWYWx1ZUlnbm9yaW5nQ29u
dGV4dChjb25zdCBVJiB2YWx1ZSkKLSAgICAgICAgOiBtX3ZhbHVlKCZ2YWx1ZSkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotICAgIHsK
LSAgICAgICAgVCBjb250ZXh0OwotICAgICAgICBtX3ZhbHVlLT5kdW1wSW5Db250ZXh0KG91dCwg
JmNvbnRleHQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBVKiBtX3ZhbHVlOwotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLVZhbHVlSWdub3JpbmdDb250ZXh0
PFQsIFU+IGlnbm9yaW5nQ29udGV4dChjb25zdCBVJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gVmFs
dWVJZ25vcmluZ0NvbnRleHQ8VCwgVT4odmFsdWUpOwotfQotCi10ZW1wbGF0ZTx1bnNpZ25lZCBp
bmRleCwgdHlwZW5hbWUuLi4gVHlwZXM+Ci1zdHJ1Y3QgRm9ybWF0SW1wbFVucGFja2VyIHsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgotICAgIHN0YXRpYyB2b2lkIHVucGFjayhQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBzdGQ6OnR1cGxlPFR5cGVzLi4uPiYgdHVwbGUsIGNvbnN0IEFy
Z3MmLi4uIHZhbHVlcyk7Ci19OwotICAgIAotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+Ci1z
dHJ1Y3QgRm9ybWF0SW1wbFVucGFja2VyPDAsIFR5cGVzLi4uPiB7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJncz4KLSAgICBzdGF0aWMgdm9pZCB1bnBhY2soUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3Qgc3RkOjp0dXBsZTxUeXBlcy4uLj4mIHR1cGxlLCBjb25zdCBBcmdzJi4uLiB2YWx1ZXMp
Ci0gICAgewotICAgICAgICBvdXQucHJpbnRmVmFyaWFibGVGb3JtYXQoc3RkOjpnZXQ8MD4odHVw
bGUpLCB2YWx1ZXMuLi4pOwotICAgIH0KLX07Ci0gICAgCi10ZW1wbGF0ZTx1bnNpZ25lZCBpbmRl
eCwgdHlwZW5hbWUuLi4gVHlwZXM+Ci10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgotdm9pZCBG
b3JtYXRJbXBsVW5wYWNrZXI8aW5kZXgsIFR5cGVzLi4uPjo6dW5wYWNrKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IHN0ZDo6dHVwbGU8VHlwZXMuLi4+JiB0dXBsZSwgY29uc3QgQXJncyYuLi4gdmFs
dWVzKQotewotICAgIEZvcm1hdEltcGxVbnBhY2tlcjxpbmRleCAtIDEsIFR5cGVzLi4uPjo6dW5w
YWNrKG91dCwgdHVwbGUsIHN0ZDo6Z2V0PGluZGV4Pih0dXBsZSksIHZhbHVlcy4uLik7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPgotY2xhc3MgRm9ybWF0SW1wbCB7Ci1wdWJsaWM6
Ci0gICAgRm9ybWF0SW1wbChUeXBlcy4uLiB2YWx1ZXMpCi0gICAgICAgIDogbV92YWx1ZXModmFs
dWVzLi4uKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Ci0gICAgewotICAgICAgICBGb3JtYXRJbXBsVW5wYWNrZXI8c2l6ZW9mLi4uKFR5
cGVzKSAtIDEsIFR5cGVzLi4uPjo6dW5wYWNrKG91dCwgbV92YWx1ZXMpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBzdGQ6OnR1cGxlPFR5cGVzLi4uPiBtX3ZhbHVlczsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lLi4uIFR5cGVzPgotRm9ybWF0SW1wbDxUeXBlcy4uLj4gZm9ybWF0KFR5cGVzLi4u
IHZhbHVlcykKLXsKLSAgICByZXR1cm4gRm9ybWF0SW1wbDxUeXBlcy4uLj4odmFsdWVzLi4uKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFQ+JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUp
Ci0gICAgICAgIG91dC5wcmludCgqdmFsdWUpOwotICAgIGVsc2UKLSAgICAgICAgb3V0LnByaW50
KCI8bnVsbG9wdD4iKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6Ym9v
bEZvclByaW50aW5nOwotdXNpbmcgV1RGOjpDaGFyYWN0ZXJEdW1wOwotdXNpbmcgV1RGOjpQb2lu
dGVyRHVtcDsKLXVzaW5nIFdURjo6UHJpbnRTdHJlYW07Ci11c2luZyBXVEY6OmZvcm1hdDsKLXVz
aW5nIFdURjo6aWdub3JpbmdDb250ZXh0OwotdXNpbmcgV1RGOjppbkNvbnRleHQ7Ci11c2luZyBX
VEY6OnBvaW50ZXJEdW1wOwotdXNpbmcgV1RGOjpwb2ludGVyRHVtcEluQ29udGV4dDsKLQotI2Vu
ZGlmIC8vIFByaW50U3RyZWFtX2gKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL1Byb2Nlc3NJRC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL1Byb2Nlc3NJRC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODQ3MTZlOGQ5
M2Q1ZWY0MTU5NDQ1NjQyZTI0MmM2NmE3MDRlZmYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Q
cm9jZXNzSUQuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQcm9jZXNzSURfaAotI2Rl
ZmluZSBQcm9jZXNzSURfaAotCi0jaWYgT1MoVU5JWCkKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNl
bmRpZgotCi0jaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZW5kaWYKLQot
bmFtZXNwYWNlIFdURiB7Ci0KLWlubGluZSBpbnQgZ2V0Q3VycmVudFByb2Nlc3NJRCgpCi17Ci0j
aWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gR2V0Q3VycmVudFByb2Nlc3NJZCgpOwotI2Vsc2UK
LSAgICByZXR1cm4gZ2V0cGlkKCk7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0K
LXVzaW5nIFdURjo6Z2V0Q3VycmVudFByb2Nlc3NJRDsKLQotI2VuZGlmIC8vIFByb2Nlc3NJRF9o
Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9SYW5kb21O
dW1iZXJTZWVkLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvUmFuZG9tTnVt
YmVyU2VlZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzRkM2JlNjE4ZTU1NmNj
MDE4MmM3OGExMzAyMzY3MmU5NWVjNDQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9SYW5kb21O
dW1iZXJTZWVkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIFdURl9SYW5kb21OdW1iZXJTZWVkX2gKLSNkZWZpbmUgV1RG
X1JhbmRvbU51bWJlclNlZWRfaAotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dGlt
ZS5oPgotI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgotCi0j
aWYgSEFWRShTWVNfVElNRV9IKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLQotI2lm
IE9TKFVOSVgpCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLWlubGluZSB2b2lkIGluaXRpYWxpemVSYW5kb21O
dW1iZXJHZW5lcmF0b3IoKQotewotI2lmIE9TKERBUldJTikKLSAgICAvLyBPbiBEYXJ3aW4gd2Ug
dXNlIGFyYzRyYW5kb20gd2hpY2ggaW5pdGlhbGlzZXMgaXRzZWxmLgotI2VsaWYgQ09NUElMRVIo
TVNWQykgJiYgZGVmaW5lZChfQ1JUX1JBTkRfUykKLSAgICAvLyBPbiBXaW5kb3dzIHdlIHVzZSBy
YW5kX3Mgd2hpY2ggaW5pdGlhbGlzZXMgaXRzZWxmCi0jZWxpZiBPUyhVTklYKQotICAgIHNyYW5k
b20oY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSk7Ci0jZWxzZQotICAgIHNyYW5kKGNy
eXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpOwotI2VuZGlmCi0KLX0KLQotfQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9SYXdQb2lu
dGVyLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvUmF3UG9pbnRlci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGM3MjkyZmI0MmQyYmUwMDAzNzFkMzIxZjU4
YWEwYWQ1MmZlZjQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9SYXdQb2ludGVyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZm5kZWYgUmF3UG9pbnRlcl9oCi0jZGVmaW5lIFJhd1BvaW50ZXJf
aAotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgUmF3UG9pbnRlciB7Ci1wdWJsaWM6Ci0gICAg
UmF3UG9pbnRlcigpCi0gICAgICAgIDogbV92YWx1ZSgwKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgZXhwbGljaXQgUmF3UG9pbnRlcih2b2lkKiB2YWx1ZSkKLSAgICAgICAgOiBtX3ZhbHVlKHZh
bHVlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgUmF3UG9pbnRlcihjb25zdCB2
b2lkKiB2YWx1ZSkKLSAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgY29uc3Qgdm9pZCogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIGNvbnN0IHZvaWQqIG1fdmFsdWU7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXVEYKLQotdXNpbmcgV1RGOjpSYXdQb2ludGVyOwotCi0jZW5kaWYgLy8gUmF3UG9pbnRlcl9o
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvUmVjdXJzaXZl
TG9ja0FkYXB0ZXIuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9SZWN1cnNp
dmVMb2NrQWRhcHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2EyNDNiOTBi
Y2FjMDBiMmQ3ZWVjZGYyN2UwNDI1ZmM1MmQ2N2E3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9S
ZWN1cnNpdmVMb2NrQWRhcHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KLWNsYXNzIFJlY3Vyc2l2ZUxvY2tBZGFwdGVyIHsKLXB1
YmxpYzoKLSAgICBSZWN1cnNpdmVMb2NrQWRhcHRlcigpCi0gICAgewotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGxvY2soKQotICAgIHsKLSAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtZSA9IGN1cnJl
bnRUaHJlYWQoKTsKLSAgICAgICAgaWYgKG1lID09IG1fb3duZXIpIHsKLSAgICAgICAgICAgIG1f
cmVjdXJzaW9uQ291bnQrKzsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgbV9sb2NrLmxvY2soKTsKLSAgICAgICAgQVNTRVJUKCFtX293bmVyKTsKLSAg
ICAgICAgQVNTRVJUKCFtX3JlY3Vyc2lvbkNvdW50KTsKLSAgICAgICAgbV9vd25lciA9IG1lOwot
ICAgICAgICBtX3JlY3Vyc2lvbkNvdW50ID0gMTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCB1bmxv
Y2soKQotICAgIHsKLSAgICAgICAgaWYgKC0tbV9yZWN1cnNpb25Db3VudCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbV9vd25lciA9IDA7Ci0gICAgICAgIG1fbG9jay51bmxvY2soKTsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCB0cnlMb2NrKCkKLSAgICB7Ci0gICAgICAgIFRocmVhZElk
ZW50aWZpZXIgbWUgPSBjdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgIGlmIChtZSA9PSBtX293bmVy
KSB7Ci0gICAgICAgICAgICBtX3JlY3Vyc2lvbkNvdW50Kys7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFtX2xvY2sudHJ5TG9jaygp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFt
X293bmVyKTsKLSAgICAgICAgQVNTRVJUKCFtX3JlY3Vyc2lvbkNvdW50KTsKLSAgICAgICAgbV9v
d25lciA9IG1lOwotICAgICAgICBtX3JlY3Vyc2lvbkNvdW50ID0gMTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fbG9jay5pc0xvY2tlZCgpOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0g
ICAgVGhyZWFkSWRlbnRpZmllciBtX293bmVyIHsgMCB9OwotICAgIHVuc2lnbmVkIG1fcmVjdXJz
aW9uQ291bnQgeyAwIH07Ci0gICAgTG9ja1R5cGUgbV9sb2NrOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV1RGCi0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3Rm
L1JlZi5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1JlZi5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzBiZDVjYzZhMTE5MzQ5MmZlZjBiNzQ5YzUwOWNmOWU0
OTU0MjgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9SZWYuaAorKysgL2Rldi9udWxsCkBAIC0x
LDI0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdURl9SZWZfaAotI2RlZmlu
ZSBXVEZfUmVmX2gKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYv
VHlwZUNhc3RzLmg+Ci0KLSNpZiBBU0FOX0VOQUJMRUQKLWV4dGVybiAiQyIgdm9pZCBfX2FzYW5f
cG9pc29uX21lbW9yeV9yZWdpb24odm9pZCBjb25zdCB2b2xhdGlsZSAqYWRkciwgc2l6ZV90IHNp
emUpOwotZXh0ZXJuICJDIiB2b2lkIF9fYXNhbl91bnBvaXNvbl9tZW1vcnlfcmVnaW9uKHZvaWQg
Y29uc3Qgdm9sYXRpbGUgKmFkZHIsIHNpemVfdCBzaXplKTsKLWV4dGVybiAiQyIgaW50IF9fYXNh
bl9hZGRyZXNzX2lzX3BvaXNvbmVkKHZvaWQgY29uc3Qgdm9sYXRpbGUgKmFkZHIpOwotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1pbmxpbmUgdm9pZCBhZG9wdGVkKGNvbnN0IHZvaWQqKSB7
IH0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmOwotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gUmVmPFQ+IGFkb3B0UmVmKFQmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVm
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNSZWYgPSB0cnVlOwotCi0g
ICAgflJlZigpCi0gICAgewotI2lmIEFTQU5fRU5BQkxFRAotICAgICAgICBpZiAoX19hc2FuX2Fk
ZHJlc3NfaXNfcG9pc29uZWQodGhpcykpCi0gICAgICAgICAgICBfX2FzYW5fdW5wb2lzb25fbWVt
b3J5X3JlZ2lvbih0aGlzLCBzaXplb2YoKnRoaXMpKTsKLSNlbmRpZgotICAgICAgICBpZiAobV9w
dHIpCi0gICAgICAgICAgICBtX3B0ci0+ZGVyZWYoKTsKLSAgICB9Ci0KLSAgICBSZWYoVCYgb2Jq
ZWN0KQotICAgICAgICA6IG1fcHRyKCZvYmplY3QpCi0gICAgewotICAgICAgICBtX3B0ci0+cmVm
KCk7Ci0gICAgfQotCi0gICAgLy8gVXNlIGNvcHlSZWYoKSBpbnN0ZWFkLgotICAgIFJlZihjb25z
dCBSZWYmIG90aGVyKSA9IGRlbGV0ZTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBSZWYoY29u
c3QgUmVmPFU+JiBvdGhlcikgPSBkZWxldGU7Ci0KLSAgICBSZWYoUmVmJiYgb3RoZXIpCi0gICAg
ICAgIDogbV9wdHIoJm90aGVyLmxlYWtSZWYoKSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3B0
cik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBSZWYoUmVmPFU+JiYg
b3RoZXIpCi0gICAgICAgIDogbV9wdHIoJm90aGVyLmxlYWtSZWYoKSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX3B0cik7Ci0gICAgfQotCi0gICAgUmVmJiBvcGVyYXRvcj0oVCYpOwotICAgIFJl
ZiYgb3BlcmF0b3I9KFJlZiYmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBSZWYmIG9wZXJh
dG9yPShSZWY8VT4mJik7Ci0KLSAgICAvLyBVc2UgY29weVJlZigpIGFuZCB0aGUgbW92ZSBhc3Np
Z25tZW50IG9wZXJhdG9ycyBpbnN0ZWFkLgotICAgIFJlZiYgb3BlcmF0b3I9KGNvbnN0IFJlZiYp
ID0gZGVsZXRlOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZiYgb3BlcmF0b3I9KGNvbnN0
IFJlZjxVPiYpID0gZGVsZXRlOwotCi0gICAgdm9pZCBzd2FwKFJlZiYpOwotCi0gICAgLy8gSGFz
aCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5l
dmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCi0gICAgUmVmKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpIDogbV9wdHIoaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpIHsgfQotICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBoYXNoVGFibGVEZWxl
dGVkVmFsdWUoKTsgfQotICAgIHN0YXRpYyBUKiBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PFQqPigtMSk7IH0KLQotICAgIFJlZihIYXNoVGFibGVFbXB0
eVZhbHVlVHlwZSkgOiBtX3B0cihoYXNoVGFibGVFbXB0eVZhbHVlKCkpIHsgfQotICAgIGJvb2wg
aXNIYXNoVGFibGVFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPT0gaGFzaFRhYmxl
RW1wdHlWYWx1ZSgpOyB9Ci0gICAgc3RhdGljIFQqIGhhc2hUYWJsZUVtcHR5VmFsdWUoKSB7IHJl
dHVybiBudWxscHRyOyB9Ci0KLSAgICBjb25zdCBUKiBwdHJBbGxvd2luZ0hhc2hUYWJsZUVtcHR5
VmFsdWUoKSBjb25zdCB7IEFTU0VSVChtX3B0ciB8fCBpc0hhc2hUYWJsZUVtcHR5VmFsdWUoKSk7
IHJldHVybiBtX3B0cjsgfQotICAgIFQqIHB0ckFsbG93aW5nSGFzaFRhYmxlRW1wdHlWYWx1ZSgp
IHsgQVNTRVJUKG1fcHRyIHx8IGlzSGFzaFRhYmxlRW1wdHlWYWx1ZSgpKTsgcmV0dXJuIG1fcHRy
OyB9Ci0KLSAgICB2b2lkIGFzc2lnblRvSGFzaFRhYmxlRW1wdHlWYWx1ZShSZWYmJiByZWZlcmVu
Y2UpCi0gICAgewotICAgICAgICBBU1NFUlQobV9wdHIgPT0gaGFzaFRhYmxlRW1wdHlWYWx1ZSgp
KTsKLSAgICAgICAgbV9wdHIgPSAmcmVmZXJlbmNlLmxlYWtSZWYoKTsKLSAgICAgICAgQVNTRVJU
KG1fcHRyKTsKLSAgICB9Ci0KLSAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyBBU1NFUlQobV9w
dHIpOyByZXR1cm4gbV9wdHI7IH0KLSAgICBUKiBwdHIoKSBjb25zdCBSRVRVUk5TX05PTk5VTEwg
eyBBU1NFUlQobV9wdHIpOyByZXR1cm4gbV9wdHI7IH0KLSAgICBUJiBnZXQoKSBjb25zdCB7IEFT
U0VSVChtX3B0cik7IHJldHVybiAqbV9wdHI7IH0KLSAgICBvcGVyYXRvciBUJigpIGNvbnN0IHsg
QVNTRVJUKG1fcHRyKTsgcmV0dXJuICptX3B0cjsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyBBU1NFUlQobV9wdHIpOyByZXR1cm4gISptX3B0cjsgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gUmVmPFQ+IHJlcGxhY2UoUmVmPFU+JiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQot
I2lmIENPTVBJTEVSX1NVUFBPUlRTKENYWF9SRUZFUkVOQ0VfUVVBTElGSUVEX0ZVTkNUSU9OUykK
LSAgICBSZWYgY29weVJlZigpICYmID0gZGVsZXRlOwotICAgIFJlZiBjb3B5UmVmKCkgY29uc3Qg
JiBXQVJOX1VOVVNFRF9SRVRVUk4geyByZXR1cm4gUmVmKCptX3B0cik7IH0KLSNlbHNlCi0gICAg
UmVmIGNvcHlSZWYoKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk4geyByZXR1cm4gUmVmKCptX3B0
cik7IH0KLSNlbmRpZgotCi0gICAgVCYgbGVha1JlZigpIFdBUk5fVU5VU0VEX1JFVFVSTgotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fcHRyKTsKLQotICAgICAgICBUJiByZXN1bHQgPSAqc3RkOjpl
eGNoYW5nZShtX3B0ciwgbnVsbHB0cik7Ci0jaWYgQVNBTl9FTkFCTEVECi0gICAgICAgIF9fYXNh
bl9wb2lzb25fbWVtb3J5X3JlZ2lvbih0aGlzLCBzaXplb2YoKnRoaXMpKTsKLSNlbmRpZgotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBmcmllbmQgUmVmIGFk
b3B0UmVmPFQ+KFQmKTsKLQotICAgIGVudW0gQWRvcHRUYWcgeyBBZG9wdCB9OwotICAgIFJlZihU
JiBvYmplY3QsIEFkb3B0VGFnKQotICAgICAgICA6IG1fcHRyKCZvYmplY3QpCi0gICAgewotICAg
IH0KLQotICAgIFQqIG1fcHRyOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzd2Fw
KFJlZjxUPiYsIFJlZjxUPiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gUmVmPFQ+IGFkb3B0UmVm
KFQmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFJlZjxUPiBtYWtlUmVmKFQmKTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIFJlZjxUPiYgUmVmPFQ+OjpvcGVyYXRvcj0oVCYgcmVmZXJl
bmNlKQotewotICAgIFJlZiBjb3BpZWRSZWZlcmVuY2UgPSByZWZlcmVuY2U7Ci0gICAgc3dhcChj
b3BpZWRSZWZlcmVuY2UpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIFJlZjxUPiYgUmVmPFQ+OjpvcGVyYXRvcj0oUmVmJiYgcmVmZXJlbmNlKQot
ewotICAgIFJlZiBtb3ZlZFJlZmVyZW5jZSA9IFdURk1vdmUocmVmZXJlbmNlKTsKLSAgICBzd2Fw
KG1vdmVkUmVmZXJlbmNlKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGlubGluZSBSZWY8VD4mIFJlZjxUPjo6b3BlcmF0
b3I9KFJlZjxVPiYmIHJlZmVyZW5jZSkKLXsKLSAgICBSZWYgbW92ZWRSZWZlcmVuY2UgPSBXVEZN
b3ZlKHJlZmVyZW5jZSk7Ci0gICAgc3dhcChtb3ZlZFJlZmVyZW5jZSk7Ci0gICAgcmV0dXJuICp0
aGlzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBSZWY8VD46OnN3YXAo
UmVmJiBvdGhlcikKLXsKLSAgICBzdGQ6OnN3YXAobV9wdHIsIG90aGVyLm1fcHRyKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgc3dhcChSZWY8VD4mIGEsIFJlZjxUPiYg
YikKLXsKLSAgICBhLnN3YXAoYik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRl
PHR5cGVuYW1lIFU+IGlubGluZSBSZWY8VD4gUmVmPFQ+OjpyZXBsYWNlKFJlZjxVPiYmIHJlZmVy
ZW5jZSkKLXsKLSAgICBhdXRvIG9sZFJlZmVyZW5jZSA9IGFkb3B0UmVmKCptX3B0cik7Ci0gICAg
bV9wdHIgPSAmcmVmZXJlbmNlLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gb2xkUmVmZXJlbmNlOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgUmVmPFQ+IHN0YXRp
Y19yZWZlcmVuY2VfY2FzdChSZWY8VT4mIHJlZmVyZW5jZSkKLXsKLSAgICByZXR1cm4gUmVmPFQ+
KHN0YXRpY19jYXN0PFQmPihyZWZlcmVuY2UuZ2V0KCkpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIFJlZjxUPiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3QoUmVm
PFU+JiYgcmVmZXJlbmNlKQotewotICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxUJj4o
cmVmZXJlbmNlLmxlYWtSZWYoKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgUmVmPFQ+IHN0YXRpY19yZWZlcmVuY2VfY2FzdChjb25zdCBSZWY8VT4mIHJl
ZmVyZW5jZSkKLXsKLSAgICByZXR1cm4gUmVmPFQ+KHN0YXRpY19jYXN0PFQmPihyZWZlcmVuY2Uu
Y29weVJlZigpLmdldCgpKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IEdl
dFB0ckhlbHBlcjxSZWY8VD4+IHsKLSAgICB0eXBlZGVmIFQqIFB0clR5cGU7Ci0gICAgc3RhdGlj
IFQqIGdldFB0cihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHAucHRy
KCkpOyB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gCi1zdHJ1Y3QgSXNTbWFydFB0cjxS
ZWY8VD4+IHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFJlZjxUPiBhZG9wdFJlZihUJiByZWZlcmVuY2UpCi17
Ci0gICAgYWRvcHRlZCgmcmVmZXJlbmNlKTsKLSAgICByZXR1cm4gUmVmPFQ+KHJlZmVyZW5jZSwg
UmVmPFQ+OjpBZG9wdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgUmVmPFQ+
IG1ha2VSZWYoVCYgcmVmZXJlbmNlKQotewotICAgIHJldHVybiBSZWY8VD4ocmVmZXJlbmNlKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRXhwZWN0ZWRUeXBlLCB0eXBlbmFtZSBBcmdUeXBlPiBp
bmxpbmUgYm9vbCBpcyhSZWY8QXJnVHlwZT4mIHNvdXJjZSkKLXsKLSAgICByZXR1cm4gaXM8RXhw
ZWN0ZWRUeXBlPihzb3VyY2UuZ2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFeHBlY3Rl
ZFR5cGUsIHR5cGVuYW1lIEFyZ1R5cGU+IGlubGluZSBib29sIGlzKGNvbnN0IFJlZjxBcmdUeXBl
PiYgc291cmNlKQotewotICAgIHJldHVybiBpczxFeHBlY3RlZFR5cGU+KHNvdXJjZS5nZXQoKSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OlJlZjsKLXVzaW5nIFdURjo6
YWRvcHRSZWY7Ci11c2luZyBXVEY6Om1ha2VSZWY7Ci11c2luZyBXVEY6OnN0YXRpY19yZWZlcmVu
Y2VfY2FzdDsKLQotI2VuZGlmIC8vIFdURl9SZWZfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1JlZkNvdW50ZWQuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi9SZWZDb3VudGVkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDEzNzYyZTA3YWVmNDM4ODU2OTUwMmJlMjM2NDkwODcwODViZjZhYzYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL1JlZkNvdW50ZWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotI2lmIGRlZmluZWQo
TkRFQlVHKSAmJiAhRU5BQkxFKFNFQ1VSSVRZX0FTU0VSVElPTlMpCi0jZGVmaW5lIENIRUNLX1JF
Rl9DT1VOVEVEX0xJRkVDWUNMRSAwCi0jZWxzZQotI2RlZmluZSBDSEVDS19SRUZfQ09VTlRFRF9M
SUZFQ1lDTEUgMQotI2VuZGlmCi0KLS8vIFRoaXMgYmFzZSBjbGFzcyBob2xkcyB0aGUgbm9uLXRl
bXBsYXRlIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMuCi0vLyBUaGUgUmVmQ291bnRlZCBjbGFzcyBp
bmhlcml0cyBmcm9tIGl0IHJlZHVjaW5nIHRoZSB0ZW1wbGF0ZSBibG9hdAotLy8gZ2VuZXJhdGVk
IGJ5IHRoZSBjb21waWxlciAodGVjaG5pcXVlIGNhbGxlZCB0ZW1wbGF0ZSBob2lzdGluZykuCi1j
bGFzcyBSZWZDb3VudGVkQmFzZSB7Ci1wdWJsaWM6Ci0gICAgdm9pZCByZWYoKSBjb25zdAotICAg
IHsKLSNpZiBDSEVDS19SRUZfQ09VTlRFRF9MSUZFQ1lDTEUKLSAgICAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oIW1fZGVsZXRpb25IYXNCZWd1bik7Ci0gICAgICAgIEFTU0VS
VCghbV9hZG9wdGlvbklzUmVxdWlyZWQpOwotI2VuZGlmCi0gICAgICAgICsrbV9yZWZDb3VudDsK
LSAgICB9Ci0KLSAgICBib29sIGhhc09uZVJlZigpIGNvbnN0Ci0gICAgewotI2lmIENIRUNLX1JF
Rl9DT1VOVEVEX0xJRkVDWUNMRQotICAgICAgICBBU1NFUlQoIW1fZGVsZXRpb25IYXNCZWd1bik7
Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQgPT0gMTsKLSAgICB9Ci0KLSAgICB1
bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yZWZDb3Vu
dDsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpCi0gICAgewot
I2lmIENIRUNLX1JFRl9DT1VOVEVEX0xJRkVDWUNMRQotICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTighbV9kZWxldGlvbkhhc0JlZ3VuKTsKLSAgICAgICAgQVNTRVJUKG1f
YWRvcHRpb25Jc1JlcXVpcmVkKTsKLSAgICAgICAgbV9hZG9wdGlvbklzUmVxdWlyZWQgPSBmYWxz
ZTsKLSNlbmRpZgotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFJlZkNvdW50ZWRCYXNlKCkKLSAg
ICAgICAgOiBtX3JlZkNvdW50KDEpCi0jaWYgQ0hFQ0tfUkVGX0NPVU5URURfTElGRUNZQ0xFCi0g
ICAgICAgICwgbV9kZWxldGlvbkhhc0JlZ3VuKGZhbHNlKQotICAgICAgICAsIG1fYWRvcHRpb25J
c1JlcXVpcmVkKHRydWUpCi0jZW5kaWYKLSAgICB7Ci0gICAgfQotCi0gICAgflJlZkNvdW50ZWRC
YXNlKCkKLSAgICB7Ci0jaWYgQ0hFQ0tfUkVGX0NPVU5URURfTElGRUNZQ0xFCi0gICAgICAgIEFT
U0VSVChtX2RlbGV0aW9uSGFzQmVndW4pOwotICAgICAgICBBU1NFUlQoIW1fYWRvcHRpb25Jc1Jl
cXVpcmVkKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgcG9p
bnRlciBzaG91bGQgYmUgZnJlZWQgb3Igbm90LgotICAgIGJvb2wgZGVyZWZCYXNlKCkgY29uc3QK
LSAgICB7Ci0jaWYgQ0hFQ0tfUkVGX0NPVU5URURfTElGRUNZQ0xFCi0gICAgICAgIEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFtX2RlbGV0aW9uSGFzQmVndW4pOwotICAgICAgICBB
U1NFUlQoIW1fYWRvcHRpb25Jc1JlcXVpcmVkKTsKLSNlbmRpZgotCi0gICAgICAgIEFTU0VSVCht
X3JlZkNvdW50KTsKLSAgICAgICAgdW5zaWduZWQgdGVtcFJlZkNvdW50ID0gbV9yZWZDb3VudCAt
IDE7Ci0gICAgICAgIGlmICghdGVtcFJlZkNvdW50KSB7Ci0jaWYgQ0hFQ0tfUkVGX0NPVU5URURf
TElGRUNZQ0xFCi0gICAgICAgICAgICBtX2RlbGV0aW9uSGFzQmVndW4gPSB0cnVlOwotI2VuZGlm
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBtX3JlZkNvdW50
ID0gdGVtcFJlZkNvdW50OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0jaWYgQ0hF
Q0tfUkVGX0NPVU5URURfTElGRUNZQ0xFCi0gICAgYm9vbCBkZWxldGlvbkhhc0JlZ3VuKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RlbGV0aW9uSGFzQmVndW47Ci0gICAgfQotI2Vu
ZGlmCi0KLXByaXZhdGU6Ci0KLSNpZiBDSEVDS19SRUZfQ09VTlRFRF9MSUZFQ1lDTEUKLSAgICBm
cmllbmQgdm9pZCBhZG9wdGVkKFJlZkNvdW50ZWRCYXNlKik7Ci0jZW5kaWYKLQotICAgIG11dGFi
bGUgdW5zaWduZWQgbV9yZWZDb3VudDsKLSNpZiBDSEVDS19SRUZfQ09VTlRFRF9MSUZFQ1lDTEUK
LSAgICBtdXRhYmxlIGJvb2wgbV9kZWxldGlvbkhhc0JlZ3VuOwotICAgIG11dGFibGUgYm9vbCBt
X2Fkb3B0aW9uSXNSZXF1aXJlZDsKLSNlbmRpZgotfTsKLQotI2lmIENIRUNLX1JFRl9DT1VOVEVE
X0xJRkVDWUNMRQotaW5saW5lIHZvaWQgYWRvcHRlZChSZWZDb3VudGVkQmFzZSogb2JqZWN0KQot
ewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oIW9iamVjdC0+bV9kZWxldGlvbkhhc0JlZ3VuKTsKLSAgICBvYmpl
Y3QtPm1fYWRvcHRpb25Jc1JlcXVpcmVkID0gZmFsc2U7Ci19Ci0jZW5kaWYKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gY2xhc3MgUmVmQ291bnRlZCA6IHB1YmxpYyBSZWZDb3VudGVkQmFzZSB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVmQ291bnRlZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIHZvaWQgZGVyZWYoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYg
KGRlcmVmQmFzZSgpKQotICAgICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PGNvbnN0IFQqPih0
aGlzKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZDb3VudGVkKCkgeyB9Ci0gICAgflJl
ZkNvdW50ZWQoKQotICAgIHsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNp
bmcgV1RGOjpSZWZDb3VudGVkOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL1JlZlB0ci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1Jl
ZlB0ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2FmMzVmNDg0ZjFmZDQwMmZk
YmY5ZDY1MjQ1Y2FiZmZjNTZlMmQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9SZWZQdHIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAw
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLS8v
IFJlZlB0ciBpcyBkb2N1bWVudGVkIGF0IGh0dHA6Ly93ZWJraXQub3JnL2NvZGluZy9SZWZQdHIu
aHRtbAotCi0jaWZuZGVmIFdURl9SZWZQdHJfaAotI2RlZmluZSBXVEZfUmVmUHRyX2gKLQotI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gUmVm
UHRyPFQ+IGFkb3B0UmVmKFQqKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gQUxXQVlTX0lOTElO
RSB2b2lkIHJlZklmTm90TnVsbChUKiBwdHIpCi17Ci0gICAgaWYgKExJS0VMWShwdHIgIT0gbnVs
bHB0cikpCi0gICAgICAgIHB0ci0+cmVmKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEFM
V0FZU19JTkxJTkUgdm9pZCBkZXJlZklmTm90TnVsbChUKiBwdHIpCi17Ci0gICAgaWYgKExJS0VM
WShwdHIgIT0gbnVsbHB0cikpCi0gICAgICAgIHB0ci0+ZGVyZWYoKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwotICAgIHR5cGVkZWYgVmFsdWVUeXBl
KiBQdHJUeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzUmVmUHRyID0gdHJ1ZTsK
LQotICAgIEFMV0FZU19JTkxJTkUgY29uc3RleHByIFJlZlB0cigpIDogbV9wdHIobnVsbHB0cikg
eyB9Ci0gICAgQUxXQVlTX0lOTElORSBSZWZQdHIoVCogcHRyKSA6IG1fcHRyKHB0cikgeyByZWZJ
Zk5vdE51bGwocHRyKTsgfQotICAgIEFMV0FZU19JTkxJTkUgUmVmUHRyKGNvbnN0IFJlZlB0ciYg
bykgOiBtX3B0cihvLm1fcHRyKSB7IHJlZklmTm90TnVsbChtX3B0cik7IH0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBSZWZQdHIoY29uc3QgUmVmUHRyPFU+JiBvKSA6IG1fcHRyKG8uZ2V0KCkp
IHsgcmVmSWZOb3ROdWxsKG1fcHRyKTsgfQotCi0gICAgQUxXQVlTX0lOTElORSBSZWZQdHIoUmVm
UHRyJiYgbykgOiBtX3B0cihvLmxlYWtSZWYoKSkgeyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gUmVmUHRyKFJlZlB0cjxVPiYmIG8pIDogbV9wdHIoby5sZWFrUmVmKCkpIHsgfQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IFJlZlB0cihSZWY8VT4mJik7Ci0KLSAgICAvLyBIYXNoIHRhYmxl
IGRlbGV0ZWQgdmFsdWVzLCB3aGljaCBhcmUgb25seSBjb25zdHJ1Y3RlZCBhbmQgbmV2ZXIgY29w
aWVkIG9yIGRlc3Ryb3llZC4KLSAgICBSZWZQdHIoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkg
OiBtX3B0cihoYXNoVGFibGVEZWxldGVkVmFsdWUoKSkgeyB9Ci0gICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID09IGhhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpOyB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIH5SZWZQdHIoKSB7IGRlcmVmSWZOb3ROdWxs
KHN0ZDo6ZXhjaGFuZ2UobV9wdHIsIG51bGxwdHIpKTsgfQotCi0gICAgVCogZ2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9wdHI7IH0KLQotICAgIFJlZjxUPiByZWxlYXNlTm9uTnVsbCgpIHsgQVNTRVJU
KG1fcHRyKTsgUmVmPFQ+IHRtcChhZG9wdFJlZigqbV9wdHIpKTsgbV9wdHIgPSBudWxscHRyOyBy
ZXR1cm4gdG1wOyB9Ci0gICAgUmVmPGNvbnN0IFQ+IHJlbGVhc2VDb25zdE5vbk51bGwoKSB7IEFT
U0VSVChtX3B0cik7IFJlZjxjb25zdCBUPiB0bXAoYWRvcHRSZWYoKm1fcHRyKSk7IG1fcHRyID0g
bnVsbHB0cjsgcmV0dXJuIHRtcDsgfQotCi0gICAgVCogbGVha1JlZigpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKLQotICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKG1fcHRyKTsgcmV0dXJu
ICptX3B0cjsgfQotICAgIEFMV0FZU19JTkxJTkUgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuIG1fcHRyOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3B0
cjsgfQotCi0gICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBj
b252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgotICAgIHR5
cGVkZWYgVCogKFJlZlB0cjo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOwotICAgIG9wZXJhdG9yIFVu
c3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3B0ciA/ICZSZWZQdHI6Om1fcHRy
IDogbnVsbHB0cjsgfQotICAgIAotICAgIFJlZlB0ciYgb3BlcmF0b3I9KGNvbnN0IFJlZlB0ciYp
OwotICAgIFJlZlB0ciYgb3BlcmF0b3I9KFQqKTsKLSAgICBSZWZQdHImIG9wZXJhdG9yPShzdGQ6
Om51bGxwdHJfdCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gUmVmUHRyJiBvcGVyYXRvcj0o
Y29uc3QgUmVmUHRyPFU+Jik7Ci0gICAgUmVmUHRyJiBvcGVyYXRvcj0oUmVmUHRyJiYpOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZlB0ciYgb3BlcmF0b3I9KFJlZlB0cjxVPiYmKTsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBSZWZQdHImIG9wZXJhdG9yPShSZWY8VT4mJik7Ci0KLSAg
ICB2b2lkIHN3YXAoUmVmUHRyJik7Ci0KLSAgICBzdGF0aWMgVCogaGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oLTEpOyB9Ci0KLSNpZiBDT01QSUxF
Ul9TVVBQT1JUUyhDWFhfUkVGRVJFTkNFX1FVQUxJRklFRF9GVU5DVElPTlMpCi0gICAgUmVmUHRy
IGNvcHlSZWYoKSAmJiA9IGRlbGV0ZTsKLSAgICBSZWZQdHIgY29weVJlZigpIGNvbnN0ICYgV0FS
Tl9VTlVTRURfUkVUVVJOIHsgcmV0dXJuIFJlZlB0cihtX3B0cik7IH0KLSNlbHNlCi0gICAgUmVm
UHRyIGNvcHlSZWYoKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk4geyByZXR1cm4gUmVmUHRyKG1f
cHRyKTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIFJlZlB0ciBhZG9wdFJlZjxU
PihUKik7Ci0KLSAgICBlbnVtIEFkb3B0VGFnIHsgQWRvcHQgfTsKLSAgICBSZWZQdHIoVCogcHRy
LCBBZG9wdFRhZykgOiBtX3B0cihwdHIpIHsgfQotCi0gICAgVCogbV9wdHI7Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBpbmxpbmUgUmVmUHRyPFQ+OjpS
ZWZQdHIoUmVmPFU+JiYgcmVmZXJlbmNlKQotICAgIDogbV9wdHIoJnJlZmVyZW5jZS5sZWFrUmVm
KCkpCi17Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCogUmVmUHRyPFQ+Ojps
ZWFrUmVmKCkKLXsKLSAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3B0ciwgbnVsbHB0cik7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBSZWZQdHI8VD4mIFJlZlB0cjxUPjo6b3Bl
cmF0b3I9KGNvbnN0IFJlZlB0ciYgbykKLXsKLSAgICBSZWZQdHIgcHRyID0gbzsKLSAgICBzd2Fw
KHB0cik7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBpbmxpbmUgUmVmUHRyPFQ+JiBSZWZQdHI8VD46Om9wZXJhdG9yPShj
b25zdCBSZWZQdHI8VT4mIG8pCi17Ci0gICAgUmVmUHRyIHB0ciA9IG87Ci0gICAgc3dhcChwdHIp
OwotICAgIHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFJl
ZlB0cjxUPiYgUmVmUHRyPFQ+OjpvcGVyYXRvcj0oVCogb3B0cikKLXsKLSAgICBSZWZQdHIgcHRy
ID0gb3B0cjsKLSAgICBzd2FwKHB0cik7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUmVmUHRyPFQ+JiBSZWZQdHI8VD46Om9wZXJhdG9yPShzdGQ6
Om51bGxwdHJfdCkKLXsKLSAgICBkZXJlZklmTm90TnVsbChzdGQ6OmV4Y2hhbmdlKG1fcHRyLCBu
dWxscHRyKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgUmVmUHRyPFQ+JiBSZWZQdHI8VD46Om9wZXJhdG9yPShSZWZQdHImJiBvKQotewotICAg
IFJlZlB0ciBwdHIgPSBXVEZNb3ZlKG8pOwotICAgIHN3YXAocHRyKTsKLSAgICByZXR1cm4gKnRo
aXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGlubGlu
ZSBSZWZQdHI8VD4mIFJlZlB0cjxUPjo6b3BlcmF0b3I9KFJlZlB0cjxVPiYmIG8pCi17Ci0gICAg
UmVmUHRyIHB0ciA9IFdURk1vdmUobyk7Ci0gICAgc3dhcChwdHIpOwotICAgIHJldHVybiAqdGhp
czsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4gaW5saW5l
IFJlZlB0cjxUPiYgUmVmUHRyPFQ+OjpvcGVyYXRvcj0oUmVmPFU+JiYgcmVmZXJlbmNlKQotewot
ICAgIFJlZlB0ciBwdHIgPSBXVEZNb3ZlKHJlZmVyZW5jZSk7Ci0gICAgc3dhcChwdHIpOwotICAg
IHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHZvaWQgUmVmUHRy
PFQ+Ojpzd2FwKFJlZlB0ciYgbykKLXsKLSAgICBzdGQ6OnN3YXAobV9wdHIsIG8ubV9wdHIpOwot
fQotCi10ZW1wbGF0ZTxjbGFzcyBUPiBpbmxpbmUgdm9pZCBzd2FwKFJlZlB0cjxUPiYgYSwgUmVm
UHRyPFQ+JiBiKQotewotICAgIGEuc3dhcChiKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWZQdHI8VD4mIGEsIGNv
bnN0IFJlZlB0cjxVPiYgYikKLXsgCi0gICAgcmV0dXJuIGEuZ2V0KCkgPT0gYi5nZXQoKTsgCi19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgUmVmUHRyPFQ+JiBhLCBVKiBiKQoteyAKLSAgICByZXR1cm4gYS5nZXQoKSA9PSBi
OyAKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShUKiBhLCBjb25zdCBSZWZQdHI8VT4mIGIpIAotewotICAgIHJldHVybiBhID09IGIu
Z2V0KCk7IAotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFJlZlB0cjxUPiYgYSwgY29uc3QgUmVmUHRyPFU+JiBiKQoteyAK
LSAgICByZXR1cm4gYS5nZXQoKSAhPSBiLmdldCgpOyAKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZWZQdHI8VD4mIGEs
IFUqIGIpCi17Ci0gICAgcmV0dXJuIGEuZ2V0KCkgIT0gYjsgCi19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oVCogYSwgY29uc3QgUmVm
UHRyPFU+JiBiKQoteyAKLSAgICByZXR1cm4gYSAhPSBiLmdldCgpOyAKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIFJlZlB0cjxUPiBzdGF0aWNfcG9pbnRlcl9j
YXN0KGNvbnN0IFJlZlB0cjxVPiYgcCkKLXsgCi0gICAgcmV0dXJuIFJlZlB0cjxUPihzdGF0aWNf
Y2FzdDxUKj4ocC5nZXQoKSkpOyAKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBJ
c1NtYXJ0UHRyPFJlZlB0cjxUPj4gewotICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1
ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBSZWZQdHI8VD4gYWRvcHRSZWYo
VCogcCkKLXsKLSAgICBhZG9wdGVkKHApOwotICAgIHJldHVybiBSZWZQdHI8VD4ocCwgUmVmUHRy
PFQ+OjpBZG9wdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBSZWZQdHI8VD4g
bWFrZVJlZlB0cihUKiBwb2ludGVyKQotewotICAgIHJldHVybiBwb2ludGVyOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUmVmUHRyPFQ+IG1ha2VSZWZQdHIoVCYgcmVmZXJlbmNl
KQotewotICAgIHJldHVybiAmcmVmZXJlbmNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQot
dXNpbmcgV1RGOjpSZWZQdHI7Ci11c2luZyBXVEY6OmFkb3B0UmVmOwotdXNpbmcgV1RGOjptYWtl
UmVmUHRyOwotdXNpbmcgV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0OwotCi0jZW5kaWYgLy8gV1RG
X1JlZlB0cl9oCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
UmV0YWluUHRyLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvUmV0YWluUHRy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NWVlYzMxY2ZiMzkxNTMxNzQ5YWIz
OTI1NjhjODdlYTQ2ZGJjYWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1JldGFpblB0ci5oCisr
KyAvZGV2L251bGwKQEAgLTEsMzQxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgUmV0YWluUHRyX2gKLSNkZWZpbmUg
UmV0YWluUHRyX2gKLQotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgVVNFKENGKSB8
fCBkZWZpbmVkKF9fT0JKQ19fKQotCi0jaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KLSNpbmNs
dWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLQotI2lmIFVTRShDRikKLSNpbmNs
dWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgotI2VuZGlmCi0KLSNpZmRlZiBf
X09CSkNfXwotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0jZW5kaWYKLQotI2lm
bmRlZiBDRl9SRUxFQVNFU19BUkdVTUVOVAotI2RlZmluZSBDRl9SRUxFQVNFU19BUkdVTUVOVAot
I2VuZGlmCi0KLSNpZm5kZWYgTlNfUkVMRUFTRVNfQVJHVU1FTlQKLSNkZWZpbmUgTlNfUkVMRUFT
RVNfQVJHVU1FTlQKLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gVW5saWtlIG1vc3Qg
bW9zdCBvZiBvdXIgc21hcnQgcG9pbnRlcnMsIFJldGFpblB0ciBjYW4gdGFrZSBlaXRoZXIgdGhl
IHBvaW50ZXIgdHlwZSBvciB0aGUgcG9pbnRlZC10byB0eXBlLAotLy8gc28gYm90aCBSZXRhaW5Q
dHI8TlNEaWN0aW9uYXJ5PiBhbmQgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gd2lsbCB3b3Jr
LgotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZXRhaW5QdHI7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFJldGFpblB0cjxUPiBhZG9wdENGKFQgQ0ZfUkVMRUFTRVNfQVJHVU1FTlQpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFJldGFpblB0cjxUPiBhZG9w
dE5TKFQgTlNfUkVMRUFTRVNfQVJHVU1FTlQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY2xhc3MgUmV0YWluUHRyIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8VD46OnR5cGUgVmFsdWVUeXBlOwotICAgIHR5cGVk
ZWYgVmFsdWVUeXBlKiBQdHJUeXBlOwotICAgIHR5cGVkZWYgQ0ZUeXBlUmVmIFN0b3JhZ2VUeXBl
OwotCi0gICAgUmV0YWluUHRyKCkgOiBtX3B0cihudWxscHRyKSB7IH0KLSAgICBSZXRhaW5QdHIo
UHRyVHlwZSBwdHIpIDogbV9wdHIodG9TdG9yYWdlVHlwZShwdHIpKSB7IGlmIChtX3B0cikgQ0ZS
ZXRhaW4obV9wdHIpOyB9Ci0KLSAgICBSZXRhaW5QdHIoY29uc3QgUmV0YWluUHRyJiBvKSA6IG1f
cHRyKG8ubV9wdHIpIHsgaWYgKFN0b3JhZ2VUeXBlIHB0ciA9IG1fcHRyKSBDRlJldGFpbihwdHIp
OyB9Ci0KLSAgICBSZXRhaW5QdHIoUmV0YWluUHRyJiYgbykgOiBtX3B0cih0b1N0b3JhZ2VUeXBl
KG8ubGVha1JlZigpKSkgeyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gUmV0YWluUHRyKFJl
dGFpblB0cjxVPiYmIG8pIDogbV9wdHIodG9TdG9yYWdlVHlwZShvLmxlYWtSZWYoKSkpIHsgfQot
Ci0gICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9ubHkgY29uc3Ry
dWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCi0gICAgUmV0YWluUHRyKEhhc2hU
YWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9wdHIoaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpIHsg
fQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3B0
ciA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQotICAgIAotICAgIH5SZXRhaW5QdHIoKTsK
LSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBSZXRhaW5QdHIoY29uc3QgUmV0YWluUHRy
PFU+Jik7Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgUHRyVHlwZSBsZWFrUmVmKCkgV0FSTl9V
TlVTRURfUkVUVVJOOwotICAgIFB0clR5cGUgYXV0b3JlbGVhc2UoKTsKLQotICAgIFB0clR5cGUg
Z2V0KCkgY29uc3QgeyByZXR1cm4gZnJvbVN0b3JhZ2VUeXBlKG1fcHRyKTsgfQotICAgIFB0clR5
cGUgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGZyb21TdG9yYWdlVHlwZShtX3B0cik7IH0K
LSAgICBleHBsaWNpdCBvcGVyYXRvciBQdHJUeXBlKCkgY29uc3QgeyByZXR1cm4gZnJvbVN0b3Jh
Z2VUeXBlKG1fcHRyKTsgfQotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiBtX3B0cjsgfQotCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9w
dHI7IH0KLQotICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQg
Y29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KLSAgICB0
eXBlZGVmIFN0b3JhZ2VUeXBlIFJldGFpblB0cjo6KlVuc3BlY2lmaWVkQm9vbFR5cGU7Ci0gICAg
b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID8gJlJl
dGFpblB0cjo6bV9wdHIgOiBudWxscHRyOyB9Ci0gICAgCi0gICAgUmV0YWluUHRyJiBvcGVyYXRv
cj0oY29uc3QgUmV0YWluUHRyJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gUmV0YWluUHRy
JiBvcGVyYXRvcj0oY29uc3QgUmV0YWluUHRyPFU+Jik7Ci0gICAgUmV0YWluUHRyJiBvcGVyYXRv
cj0oUHRyVHlwZSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gUmV0YWluUHRyJiBvcGVyYXRv
cj0oVSopOwotCi0gICAgUmV0YWluUHRyJiBvcGVyYXRvcj0oUmV0YWluUHRyJiYpOwotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IFJldGFpblB0ciYgb3BlcmF0b3I9KFJldGFpblB0cjxVPiYmKTsK
LQotICAgIHZvaWQgc3dhcChSZXRhaW5QdHImKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
IGZyaWVuZCBSZXRhaW5QdHI8VT4gYWRvcHRDRihVIENGX1JFTEVBU0VTX0FSR1VNRU5UKSBXQVJO
X1VOVVNFRF9SRVRVUk47Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gZnJpZW5kIFJldGFpblB0
cjxVPiBhZG9wdE5TKFUgTlNfUkVMRUFTRVNfQVJHVU1FTlQpIFdBUk5fVU5VU0VEX1JFVFVSTjsK
LQotcHJpdmF0ZToKLSAgICBlbnVtIEFkb3B0VGFnIHsgQWRvcHQgfTsKLSAgICBSZXRhaW5QdHIo
UHRyVHlwZSBwdHIsIEFkb3B0VGFnKSA6IG1fcHRyKHRvU3RvcmFnZVR5cGUocHRyKSkgeyB9Ci0K
LSAgICBzdGF0aWMgUHRyVHlwZSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PFB0clR5cGU+KC0xKTsgfQotCi0jaWYgZGVmaW5lZCAoX19PQkpDX18pICYm
IF9faGFzX2ZlYXR1cmUob2JqY19hcmMpCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnZlcnRpYmxlPFUsIGlkPjo6dmFsdWUs
IFB0clR5cGU+Ojp0eXBlCi0gICAgZnJvbVN0b3JhZ2VUeXBlSGVscGVyKFN0b3JhZ2VUeXBlIHB0
cikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAoX19icmlkZ2UgUHRyVHlwZSlwdHI7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjwhc3RkOjppc19jb252ZXJ0aWJsZTxVLCBpZD46OnZhbHVlLCBQdHJUeXBlPjo6dHlwZQot
ICAgIGZyb21TdG9yYWdlVHlwZUhlbHBlcihTdG9yYWdlVHlwZSBwdHIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gKFB0clR5cGUpcHRyOwotICAgIH0KLQotICAgIFB0clR5cGUgZnJvbVN0
b3JhZ2VUeXBlKFN0b3JhZ2VUeXBlIHB0cikgY29uc3QgeyByZXR1cm4gZnJvbVN0b3JhZ2VUeXBl
SGVscGVyPFB0clR5cGU+KHB0cik7IH0KLSAgICBTdG9yYWdlVHlwZSB0b1N0b3JhZ2VUeXBlKGlk
IHB0cikgY29uc3QgeyByZXR1cm4gKF9fYnJpZGdlIFN0b3JhZ2VUeXBlKXB0cjsgfQotICAgIFN0
b3JhZ2VUeXBlIHRvU3RvcmFnZVR5cGUoQ0ZUeXBlUmVmIHB0cikgY29uc3QgeyByZXR1cm4gKFN0
b3JhZ2VUeXBlKXB0cjsgfQotI2Vsc2UKLSAgICBQdHJUeXBlIGZyb21TdG9yYWdlVHlwZShTdG9y
YWdlVHlwZSBwdHIpIGNvbnN0IHsgcmV0dXJuIChQdHJUeXBlKXB0cjsgfQotICAgIFN0b3JhZ2VU
eXBlIHRvU3RvcmFnZVR5cGUoUHRyVHlwZSBwdHIpIGNvbnN0IHsgcmV0dXJuIChTdG9yYWdlVHlw
ZSlwdHI7IH0KLSNlbmRpZgotCi0gICAgU3RvcmFnZVR5cGUgbV9wdHI7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUmV0YWluUHRyPFQ+Ojp+UmV0YWluUHRyKCkKLXsKLSAgICBp
ZiAoU3RvcmFnZVR5cGUgcHRyID0gc3RkOjpleGNoYW5nZShtX3B0ciwgbnVsbHB0cikpCi0gICAg
ICAgIENGUmVsZWFzZShwdHIpOwotfQotCi0vLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGNyZWF0aW5n
IGEgUmV0YWluUHRyIHVzaW5nIHRlbXBsYXRlIGFyZ3VtZW50IGRlZHVjdGlvbi4KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBSZXRhaW5QdHI8VD4gcmV0YWluUHRyKFQpIFdBUk5fVU5VU0VE
X1JFVFVSTjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4gaW5s
aW5lIFJldGFpblB0cjxUPjo6UmV0YWluUHRyKGNvbnN0IFJldGFpblB0cjxVPiYgbykKLSAgICA6
IG1fcHRyKHRvU3RvcmFnZVR5cGUoby5nZXQoKSkpCi17Ci0gICAgaWYgKFN0b3JhZ2VUeXBlIHB0
ciA9IG1fcHRyKQotICAgICAgICBDRlJldGFpbihwdHIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdm9pZCBSZXRhaW5QdHI8VD46OmNsZWFyKCkKLXsKLSAgICBpZiAoU3RvcmFn
ZVR5cGUgcHRyID0gc3RkOjpleGNoYW5nZShtX3B0ciwgbnVsbHB0cikpCi0gICAgICAgIENGUmVs
ZWFzZShwdHIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgUmV0
YWluUHRyPFQ+OjpQdHJUeXBlIFJldGFpblB0cjxUPjo6bGVha1JlZigpCi17Ci0gICAgcmV0dXJu
IGZyb21TdG9yYWdlVHlwZShzdGQ6OmV4Y2hhbmdlKG1fcHRyLCBudWxscHRyKSk7Ci19Ci0KLSNp
ZmRlZiBfX09CSkNfXwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGF1dG8gUmV0YWluUHRy
PFQ+OjphdXRvcmVsZWFzZSgpIC0+IFB0clR5cGUKLXsKLSAgICByZXR1cm4gKF9fYnJpZGdlIFB0
clR5cGUpQ0ZCcmlkZ2luZ1JlbGVhc2UobGVha1JlZigpKTsKLX0KLSNlbmRpZgotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUmV0YWluUHRyPFQ+JiBSZXRhaW5QdHI8VD46Om9wZXJhdG9y
PShjb25zdCBSZXRhaW5QdHImIG8pCi17Ci0gICAgUmV0YWluUHRyIHB0ciA9IG87Ci0gICAgc3dh
cChwdHIpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVt
cGxhdGU8dHlwZW5hbWUgVT4gaW5saW5lIFJldGFpblB0cjxUPiYgUmV0YWluUHRyPFQ+OjpvcGVy
YXRvcj0oY29uc3QgUmV0YWluUHRyPFU+JiBvKQotewotICAgIFJldGFpblB0ciBwdHIgPSBvOwot
ICAgIHN3YXAocHRyKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBSZXRhaW5QdHI8VD4mIFJldGFpblB0cjxUPjo6b3BlcmF0b3I9KFB0clR5cGUg
b3B0cikKLXsKLSAgICBSZXRhaW5QdHIgcHRyID0gb3B0cjsKLSAgICBzd2FwKHB0cik7Ci0gICAg
cmV0dXJuICp0aGlzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBpbmxpbmUgUmV0YWluUHRyPFQ+JiBSZXRhaW5QdHI8VD46Om9wZXJhdG9yPShVKiBvcHRy
KQotewotICAgIFJldGFpblB0ciBwdHIgPSBvcHRyOwotICAgIHN3YXAocHRyKTsKLSAgICByZXR1
cm4gKnRoaXM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBSZXRhaW5QdHI8VD4m
IFJldGFpblB0cjxUPjo6b3BlcmF0b3I9KFJldGFpblB0ciYmIG8pCi17Ci0gICAgUmV0YWluUHRy
IHB0ciA9IFdURk1vdmUobyk7Ci0gICAgc3dhcChwdHIpOwotICAgIHJldHVybiAqdGhpczsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4gaW5saW5lIFJldGFp
blB0cjxUPiYgUmV0YWluUHRyPFQ+OjpvcGVyYXRvcj0oUmV0YWluUHRyPFU+JiYgbykKLXsKLSAg
ICBSZXRhaW5QdHIgcHRyID0gV1RGTW92ZShvKTsKLSAgICBzd2FwKHB0cik7Ci0gICAgcmV0dXJu
ICp0aGlzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBSZXRhaW5QdHI8
VD46OnN3YXAoUmV0YWluUHRyJiBvKQotewotICAgIHN0ZDo6c3dhcChtX3B0ciwgby5tX3B0cik7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIHN3YXAoUmV0YWluUHRyPFQ+
JiBhLCBSZXRhaW5QdHI8VD4mIGIpCi17Ci0gICAgYS5zd2FwKGIpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJldGFp
blB0cjxUPiYgYSwgY29uc3QgUmV0YWluUHRyPFU+JiBiKQoteyAKLSAgICByZXR1cm4gYS5nZXQo
KSA9PSBiLmdldCgpOyAKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZXRhaW5QdHI8VD4mIGEsIFUqIGIpCi17Ci0gICAg
cmV0dXJuIGEuZ2V0KCkgPT0gYjsgCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oVCogYSwgY29uc3QgUmV0YWluUHRyPFU+JiBiKSAK
LXsKLSAgICByZXR1cm4gYSA9PSBiLmdldCgpOyAKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZXRhaW5QdHI8VD4mIGEs
IGNvbnN0IFJldGFpblB0cjxVPiYgYikKLXsgCi0gICAgcmV0dXJuIGEuZ2V0KCkgIT0gYi5nZXQo
KTsgCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgUmV0YWluUHRyPFQ+JiBhLCBVKiBiKQotewotICAgIHJldHVybiBhLmdl
dCgpICE9IGI7IAotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KFQqIGEsIGNvbnN0IFJldGFpblB0cjxVPiYgYikKLXsgCi0gICAgcmV0
dXJuIGEgIT0gYi5nZXQoKTsgCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBSZXRh
aW5QdHI8VD4gYWRvcHRDRihUIENGX1JFTEVBU0VTX0FSR1VNRU5UIHB0cikKLXsKLSNpZmRlZiBf
X09CSkNfXwotICAgIHN0YXRpY19hc3NlcnQoKCFzdGQ6OmlzX2NvbnZlcnRpYmxlPFQsIGlkPjo6
dmFsdWUpLCAiRG9uJ3QgdXNlIGFkb3B0Q0Ygd2l0aCBPYmplY3RpdmUtQyBwb2ludGVyIHR5cGVz
LCB1c2UgYWRvcHROUy4iKTsKLSNlbmRpZgotICAgIHJldHVybiBSZXRhaW5QdHI8VD4ocHRyLCBS
ZXRhaW5QdHI8VD46OkFkb3B0KTsKLX0KLQotI2lmZGVmIF9fT0JKQ19fCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgUmV0YWluUHRyPFQ+IGFkb3B0TlMoVCBOU19SRUxFQVNFU19BUkdVTUVO
VCBwdHIpCi17Ci0jaWYgX19oYXNfZmVhdHVyZShvYmpjX2FyYykKLSAgICByZXR1cm4gcHRyOwot
I2VsaWYgZGVmaW5lZChPQkpDX05PX0dDKQotICAgIHJldHVybiBSZXRhaW5QdHI8VD4ocHRyLCBS
ZXRhaW5QdHI8VD46OkFkb3B0KTsKLSNlbHNlCi0gICAgUmV0YWluUHRyPFQ+IHJlc3VsdCA9IHB0
cjsKLSAgICBbcHRyIHJlbGVhc2VdOwotICAgIHJldHVybiByZXN1bHQ7Ci0jZW5kaWYKLX0KLSNl
bmRpZgotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgUmV0YWluUHRyPFQ+IHJldGFpblB0
cihUIHB0cikKLXsKLSAgICByZXR1cm4gcHRyOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
c3RydWN0IElzU21hcnRQdHI8UmV0YWluUHRyPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
dmFsdWUgPSB0cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0IEhhc2hUcmFp
dHM8UmV0YWluUHRyPFA+PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxSZXRhaW5QdHI8UD4+IHsK
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBEZWZhdWx0SGFzaDxSZXRhaW5QdHI8
UD4+IHsKLSAgICB0eXBlZGVmIFB0ckhhc2g8UmV0YWluUHRyPFA+PiBIYXNoOwotfTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFA+Ci1zdHJ1Y3QgUmV0YWluUHRyT2JqZWN0SGFzaFRyYWl0cyA6IFNp
bXBsZUNsYXNzSGFzaFRyYWl0czxSZXRhaW5QdHI8UD4+IHsKLSAgICBzdGF0aWMgY29uc3QgUmV0
YWluUHRyPFA+JiBlbXB0eVZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBSZXRhaW5QdHI8
UD4mIG51bGwgPSAqKG5ldyBSZXRhaW5QdHI8UD4pOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgUD4KLXN0cnVjdCBSZXRhaW5QdHJPYmplY3RI
YXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZXRhaW5QdHI8UD4mIG8pCi0g
ICAgewotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG8uZ2V0KCksICJhdHRlbXB0IHRvIHVz
ZSBudWxsIFJldGFpblB0ciBpbiBIYXNoVGFibGUiKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihDRkhhc2goby5nZXQoKSkpOwotICAgIH0KLSAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBSZXRhaW5QdHI8UD4mIGEsIGNvbnN0IFJldGFpblB0cjxQPiYgYikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBDRkVxdWFsKGEuZ2V0KCksIGIuZ2V0KCkpOwotICAgIH0KLSAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwot
fTsKLQotI2lmZGVmIF9fT0JKQ19fCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBkeW5hbWljX29i
amNfY2FzdChpZCBvYmplY3QpCi17Ci0gICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbVCBj
bGFzc11dKQotICAgICAgICByZXR1cm4gKFQgKilvYmplY3Q7Ci0KLSAgICByZXR1cm4gbmlsOwot
fQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OlJldGFpblB0cjsK
LXVzaW5nIFdURjo6YWRvcHRDRjsKLXVzaW5nIFdURjo6YWRvcHROUzsKLXVzaW5nIFdURjo6cmV0
YWluUHRyOwotCi0jaWZkZWYgX19PQkpDX18KLXVzaW5nIFdURjo6ZHluYW1pY19vYmpjX2Nhc3Q7
Ci0jZW5kaWYKLQotI2VuZGlmIC8vIFVTRShDRikgfHwgZGVmaW5lZChfX09CSkNfXykKLQotI2Vu
ZGlmIC8vIFdURl9SZXRhaW5QdHJfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL1J1bkxvb3AuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL1J1bkxvb3AuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjU5M2IwNGU0
YzRjMzZmZDk1Mzg4YTZlN2RlYmQ3NzMwY2QxM2Y2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9S
dW5Mb29wLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJ1bkxvb3AuaCIKLQotI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNs
dWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXN0YXRpYyBS
dW5Mb29wKiBzX21haW5SdW5Mb29wOwotCi0vLyBIZWxwZXIgY2xhc3MgZm9yIFRocmVhZFNwZWNp
ZmljRGF0YS4KLWNsYXNzIFJ1bkxvb3A6OkhvbGRlciB7Ci1wdWJsaWM6Ci0gICAgSG9sZGVyKCkK
LSAgICAgICAgOiBtX3J1bkxvb3AoYWRvcHRSZWYoKm5ldyBSdW5Mb29wKSkKLSAgICB7Ci0gICAg
fQotCi0gICAgUnVuTG9vcCYgcnVuTG9vcCgpIHsgcmV0dXJuIG1fcnVuTG9vcDsgfQotCi1wcml2
YXRlOgotICAgIFJlZjxSdW5Mb29wPiBtX3J1bkxvb3A7Ci19OwotCi12b2lkIFJ1bkxvb3A6Omlu
aXRpYWxpemVNYWluUnVuTG9vcCgpCi17Ci0gICAgaWYgKHNfbWFpblJ1bkxvb3ApCi0gICAgICAg
IHJldHVybjsKLSAgICBpbml0aWFsaXplTWFpblRocmVhZCgpOwotICAgIHNfbWFpblJ1bkxvb3Ag
PSAmUnVuTG9vcDo6Y3VycmVudCgpOwotfQotCi1SdW5Mb29wJiBSdW5Mb29wOjpjdXJyZW50KCkK
LXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGhyZWFkU3BlY2lmaWM8SG9sZGVyPj4gcnVu
TG9vcEhvbGRlcjsKLSAgICByZXR1cm4gcnVuTG9vcEhvbGRlci5nZXQoKS0+cnVuTG9vcCgpOwot
fQotCi1SdW5Mb29wJiBSdW5Mb29wOjptYWluKCkKLXsKLSAgICBBU1NFUlQoc19tYWluUnVuTG9v
cCk7Ci0gICAgcmV0dXJuICpzX21haW5SdW5Mb29wOwotfQotCi1ib29sIFJ1bkxvb3A6OmlzTWFp
bigpCi17Ci0gICAgQVNTRVJUKHNfbWFpblJ1bkxvb3ApOwotICAgIHJldHVybiBzX21haW5SdW5M
b29wID09ICZSdW5Mb29wOjpjdXJyZW50KCk7Ci19Ci0KLXZvaWQgUnVuTG9vcDo6cGVyZm9ybVdv
cmsoKQotewotICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byBoYW5kbGUgdGhlIGZ1bmN0aW9ucyBp
biB0aGUgcXVldWUgb25lIGF0IGEgdGltZSBiZWNhdXNlIHdoaWxlIGluc2lkZSBvbmUgb2YgdGhl
c2UKLSAgICAvLyBmdW5jdGlvbnMgd2UgbWlnaHQgcmUtZW50ZXIgUnVuTG9vcDo6cGVyZm9ybVdv
cmsoKSBhbmQgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHBpY2sgdXAgd2hlcmUgd2UgbGVmdCBvZmYu
Ci0gICAgLy8gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvODk1OTAgZm9yIG1vcmUgZGlzY3Vzc2lv
bi4KLQotICAgIC8vIE9uZSBwb3NzaWJsZSBzY2VuYXJpbyB3aGVuIGhhbmRsaW5nIHRoZSBmdW5j
dGlvbiBxdWV1ZSBpcyBhcyBmb2xsb3dzOgotICAgIC8vIC0gUnVuTG9vcDo6cGVyZm9ybVdvcmso
KSBpcyBpbnZva2VkIHdpdGggMSBmdW5jdGlvbiBvbiB0aGUgcXVldWUKLSAgICAvLyAtIEhhbmRs
aW5nIHRoYXQgZnVuY3Rpb24gcmVzdWx0cyBpbiAxIG1vcmUgZnVuY3Rpb24gYmVpbmcgZW5xdWV1
ZWQKLSAgICAvLyAtIEhhbmRsaW5nIHRoYXQgb25lIHJlc3VsdHMgaW4geWV0IGFub3RoZXIgYmVp
bmcgZW5xdWV1ZWQKLSAgICAvLyAtIEFuZCBzbyBvbgotICAgIC8vCi0gICAgLy8gSW4gdGhpcyBz
aXR1YXRpb24gb25lIGludm9jYXRpb24gb2YgcGVyZm9ybVdvcmsoKSBuZXZlciByZXR1cm5zIHNv
IGFsbCBvdGhlciBldmVudCBzb3VyY2VzIGFyZSBibG9ja2VkLgotICAgIC8vIEJ5IG9ubHkgaGFu
ZGxpbmcgdXAgdG8gdGhlIG51bWJlciBvZiBmdW5jdGlvbnMgdGhhdCB3ZXJlIGluIHRoZSBxdWV1
ZSB3aGVuIHBlcmZvcm1Xb3JrKCkgaXMgY2FsbGVkCi0gICAgLy8gd2UgZ3VhcmFudGVlIHRvIG9j
Y2FzaW9uYWxseSByZXR1cm4gZnJvbSB0aGUgcnVuIGxvb3Agc28gb3RoZXIgZXZlbnQgc291cmNl
cyB3aWxsIGJlIGFsbG93ZWQgdG8gc3Bpbi4KLQotICAgIHNpemVfdCBmdW5jdGlvbnNUb0hhbmRs
ZSA9IDA7Ci0gICAgewotICAgICAgICBGdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbjsKLSAgICAg
ICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnVuY3Rpb25RdWV1ZUxvY2sp
OwotICAgICAgICAgICAgZnVuY3Rpb25zVG9IYW5kbGUgPSBtX2Z1bmN0aW9uUXVldWUuc2l6ZSgp
OwotCi0gICAgICAgICAgICBpZiAobV9mdW5jdGlvblF1ZXVlLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uID0gbV9mdW5jdGlvblF1ZXVl
LnRha2VGaXJzdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24oKTsKLSAgICB9Ci0K
LSAgICBmb3IgKHNpemVfdCBmdW5jdGlvbnNIYW5kbGVkID0gMTsgZnVuY3Rpb25zSGFuZGxlZCA8
IGZ1bmN0aW9uc1RvSGFuZGxlOyArK2Z1bmN0aW9uc0hhbmRsZWQpIHsKLSAgICAgICAgRnVuY3Rp
b248dm9pZCAoKT4gZnVuY3Rpb247Ci0gICAgICAgIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX2Z1bmN0aW9uUXVldWVMb2NrKTsKLQotICAgICAgICAgICAgLy8gRXZlbiBpZiB3
ZSBzdGFydCBvZmYgd2l0aCBOIGZ1bmN0aW9ucyB0byBoYW5kbGUgYW5kIHdlJ3ZlIG9ubHkgaGFu
ZGxlZCBsZXNzIHRoYW4gTiBmdW5jdGlvbnMsIHRoZSBxdWV1ZQotICAgICAgICAgICAgLy8gc3Rp
bGwgbWlnaHQgYmUgZW1wdHkgYmVjYXVzZSB0aG9zZSBmdW5jdGlvbnMgbWlnaHQgaGF2ZSBiZWVu
IGhhbmRsZWQgaW4gYW4gaW5uZXIgUnVuTG9vcDo6cGVyZm9ybVdvcmsoKS4KLSAgICAgICAgICAg
IC8vIEluIHRoYXQgY2FzZSB3ZSBzaG91bGQgYmFpbCBoZXJlLgotICAgICAgICAgICAgaWYgKG1f
ZnVuY3Rpb25RdWV1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGZ1bmN0aW9uID0gbV9mdW5jdGlvblF1ZXVlLnRha2VGaXJzdCgpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBmdW5jdGlvbigpOwotICAgIH0KLX0KLQotdm9pZCBSdW5Mb29w
OjpkaXNwYXRjaChGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQotewotICAgIHsKLSAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnVuY3Rpb25RdWV1ZUxvY2spOwotICAgICAgICBtX2Z1
bmN0aW9uUXVldWUuYXBwZW5kKFdURk1vdmUoZnVuY3Rpb24pKTsKLSAgICB9Ci0KLSAgICB3YWtl
VXAoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvUnVuTG9vcC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL1J1bkxvb3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIxMDM4
OThjY2NhYjkxNmFlNjhhZmJlMjAwOWE2ZDA4YWE1MTVkZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93
dGYvUnVuTG9vcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFJ1bkxvb3BfaAotI2Rl
ZmluZSBSdW5Mb29wX2gKLQotI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KLSNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9GdW5j
dGlvbkRpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmdQcmltaXRpdmVzLmg+Ci0KLSNpZiBVU0UoR0xJQl9FVkVOVF9MT09QKQotI2luY2x1
ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xh
c3MgUnVuTG9vcCA6IHB1YmxpYyBGdW5jdGlvbkRpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFJ1bkxvb3ApOwotcHVibGljOgotICAgIC8vIE11c3QgYmUgY2FsbGVkIGZyb20g
dGhlIG1haW4gdGhyZWFkIChleGNlcHQgZm9yIHRoZSBNYWMgcGxhdGZvcm0sIHdoZXJlIGl0Ci0g
ICAgLy8gY2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQpLgotICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBpbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKLQotICAgIFdURl9FWFBP
UlRfUFJJVkFURSBzdGF0aWMgUnVuTG9vcCYgY3VycmVudCgpOwotICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgUnVuTG9vcCYgbWFpbigpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBpc01haW4oKTsKLSAgICB+UnVuTG9vcCgpOwotCi0gICAgdm9pZCBkaXNwYXRjaChG
dW5jdGlvbjx2b2lkKCk+JiYpIG92ZXJyaWRlOwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHJ1bigpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHN0b3AoKTsKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB3YWtlVXAoKTsKLQotI2lmIFVTRShDT0NPQV9FVkVO
VF9MT09QKQotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJ1bkZvckR1cmF0aW9uKGRvdWJs
ZSBkdXJhdGlvbik7Ci0jZW5kaWYKLQotI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCi0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIEdNYWluQ29udGV4dCogbWFpbkNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBtX21haW5Db250ZXh0LmdldCgpOyB9Ci0jZW5kaWYKLQotI2lmIFVTRShHRU5FUklDX0VWRU5U
X0xPT1ApCi0gICAgLy8gUnVuIHRoZSBzaW5nbGUgaXRlcmF0aW9uIG9mIHRoZSBSdW5Mb29wLiBJ
dCBjb25zdW1lcyB0aGUgcGVuZGluZyB0YXNrcyBhbmQgZXhwaXJlZCB0aW1lcnMsIGJ1dCBpdCB3
b24ndCBiZSBibG9ja2VkLgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBpdGVy
YXRlKCk7Ci0jZW5kaWYKLQotI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApIHx8IFVTRShHRU5FUklD
X0VWRU5UX0xPT1ApCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzcGF0Y2hBZnRlcihT
ZWNvbmRzLCBGdW5jdGlvbjx2b2lkKCk+JiYpOwotI2VuZGlmCi0KLSAgICBjbGFzcyBUaW1lckJh
c2UgewotICAgICAgICBmcmllbmQgY2xhc3MgUnVuTG9vcDsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IFdURl9FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBUaW1lckJhc2UoUnVuTG9vcCYpOwotICAgICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+VGltZXJCYXNlKCk7Ci0KLSAgICAgICAgdm9p
ZCBzdGFydFJlcGVhdGluZyhkb3VibGUgcmVwZWF0SW50ZXJ2YWwpIHsgc3RhcnRJbnRlcm5hbChy
ZXBlYXRJbnRlcnZhbCwgdHJ1ZSk7IH0KLSAgICAgICAgdm9pZCBzdGFydFJlcGVhdGluZyhzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzIHJlcGVhdEludGVydmFsKSB7IHN0YXJ0UmVwZWF0aW5nKHJl
cGVhdEludGVydmFsLmNvdW50KCkgKiAwLjAwMSk7IH0KLSAgICAgICAgdm9pZCBzdGFydFJlcGVh
dGluZyhTZWNvbmRzIHJlcGVhdEludGVydmFsKSB7IHN0YXJ0UmVwZWF0aW5nKHJlcGVhdEludGVy
dmFsLnZhbHVlKCkpOyB9Ci0gICAgICAgIHZvaWQgc3RhcnRPbmVTaG90KGRvdWJsZSBpbnRlcnZh
bCkgeyBzdGFydEludGVybmFsKGludGVydmFsLCBmYWxzZSk7IH0KLSAgICAgICAgdm9pZCBzdGFy
dE9uZVNob3Qoc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBpbnRlcnZhbCkgeyBzdGFydE9uZVNo
b3QoaW50ZXJ2YWwuY291bnQoKSAqIDAuMDAxKTsgfQotICAgICAgICB2b2lkIHN0YXJ0T25lU2hv
dChTZWNvbmRzIGludGVydmFsKSB7IHN0YXJ0T25lU2hvdChpbnRlcnZhbC52YWx1ZSgpKTsgfQot
Ci0gICAgICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHN0b3AoKTsKLSAgICAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIFNlY29uZHMgc2Vjb25kc1VudGlsRmlyZSgpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBmaXJlZCgpID0gMDsKLQotI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCi0gICAgICAg
IHZvaWQgc2V0TmFtZShjb25zdCBjaGFyKik7Ci0gICAgICAgIHZvaWQgc2V0UHJpb3JpdHkoaW50
KTsKLSNlbmRpZgotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBzdGFydEludGVybmFsKGRv
dWJsZSBuZXh0RmlyZUludGVydmFsLCBib29sIHJlcGVhdCkKLSAgICAgICAgewotICAgICAgICAg
ICAgc3RhcnQoc3RkOjptYXgobmV4dEZpcmVJbnRlcnZhbCwgMC4wKSwgcmVwZWF0KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0KGRvdWJsZSBuZXh0
RmlyZUludGVydmFsLCBib29sIHJlcGVhdCk7Ci0KLSAgICAgICAgUmVmPFJ1bkxvb3A+IG1fcnVu
TG9vcDsKLQotI2lmIFVTRShXSU5ET1dTX0VWRU5UX0xPT1ApCi0gICAgICAgIGJvb2wgaXNBY3Rp
dmUoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdDsKLSAgICAgICAgc3RhdGljIHZvaWQgdGlt
ZXJGaXJlZChSdW5Mb29wKiwgdWludDY0X3QgSUQpOwotICAgICAgICB1aW50NjRfdCBtX0lEOwot
ICAgICAgICBNb25vdG9uaWNUaW1lIG1fbmV4dEZpcmVEYXRlOwotICAgICAgICBTZWNvbmRzIG1f
aW50ZXJ2YWw7Ci0gICAgICAgIGJvb2wgbV9pc1JlcGVhdGluZzsKLSNlbGlmIFVTRShDT0NPQV9F
VkVOVF9MT09QKQotICAgICAgICBzdGF0aWMgdm9pZCB0aW1lckZpcmVkKENGUnVuTG9vcFRpbWVy
UmVmLCB2b2lkKik7Ci0gICAgICAgIFJldGFpblB0cjxDRlJ1bkxvb3BUaW1lclJlZj4gbV90aW1l
cjsKLSNlbGlmIFVTRShHTElCX0VWRU5UX0xPT1ApCi0gICAgICAgIHZvaWQgdXBkYXRlUmVhZHlU
aW1lKCk7Ci0gICAgICAgIEdSZWZQdHI8R1NvdXJjZT4gbV9zb3VyY2U7Ci0gICAgICAgIGJvb2wg
bV9pc1JlcGVhdGluZyB7IGZhbHNlIH07Ci0gICAgICAgIFNlY29uZHMgbV9maXJlSW50ZXJ2YWwg
eyAwIH07Ci0jZWxpZiBVU0UoR0VORVJJQ19FVkVOVF9MT09QKQotICAgICAgICBib29sIGlzQWN0
aXZlKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgc3RvcChjb25z
dCBBYnN0cmFjdExvY2tlciYpOwotCi0gICAgICAgIGNsYXNzIFNjaGVkdWxlZFRhc2s7Ci0gICAg
ICAgIFJlZlB0cjxTY2hlZHVsZWRUYXNrPiBtX3NjaGVkdWxlZFRhc2s7Ci0jZW5kaWYKLSAgICB9
OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRpbWVyRmlyZWRDbGFzcz4KLSAgICBjbGFzcyBU
aW1lciA6IHB1YmxpYyBUaW1lckJhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiB2
b2lkIChUaW1lckZpcmVkQ2xhc3M6OipUaW1lckZpcmVkRnVuY3Rpb24pKCk7Ci0KLSAgICAgICAg
VGltZXIoUnVuTG9vcCYgcnVuTG9vcCwgVGltZXJGaXJlZENsYXNzKiBvLCBUaW1lckZpcmVkRnVu
Y3Rpb24gZikKLSAgICAgICAgICAgIDogVGltZXJCYXNlKHJ1bkxvb3ApCi0gICAgICAgICAgICAs
IG1fb2JqZWN0KG8pCi0gICAgICAgICAgICAsIG1fZnVuY3Rpb24oZikKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGZpcmVkKCkgb3ZlcnJpZGUgeyAo
bV9vYmplY3QtPiptX2Z1bmN0aW9uKSgpOyB9Ci0KLSAgICAgICAgVGltZXJGaXJlZENsYXNzKiBt
X29iamVjdDsKLSAgICAgICAgVGltZXJGaXJlZEZ1bmN0aW9uIG1fZnVuY3Rpb247Ci0gICAgfTsK
LQotICAgIGNsYXNzIEhvbGRlcjsKLQotcHJpdmF0ZToKLSAgICBSdW5Mb29wKCk7Ci0KLSAgICB2
b2lkIHBlcmZvcm1Xb3JrKCk7Ci0KLSAgICBNdXRleCBtX2Z1bmN0aW9uUXVldWVMb2NrOwotICAg
IERlcXVlPEZ1bmN0aW9uPHZvaWQoKT4+IG1fZnVuY3Rpb25RdWV1ZTsKLQotI2lmIFVTRShXSU5E
T1dTX0VWRU5UX0xPT1ApCi0gICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJSdW5Mb29wTWVzc2FnZVdp
bmRvd0NsYXNzKCk7Ci0gICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgUnVuTG9vcFduZFByb2Mo
SFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotICAgIExSRVNVTFQgd25kUHJvYyhIV05EIGhX
bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7Ci0gICAgSFdO
RCBtX3J1bkxvb3BNZXNzYWdlV2luZG93OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90
LCBUaW1lckJhc2UqPiBUaW1lck1hcDsKLSAgICBMb2NrIG1fYWN0aXZlVGltZXJzTG9jazsKLSAg
ICBUaW1lck1hcCBtX2FjdGl2ZVRpbWVyczsKLSNlbGlmIFVTRShDT0NPQV9FVkVOVF9MT09QKQot
ICAgIHN0YXRpYyB2b2lkIHBlcmZvcm1Xb3JrKHZvaWQqKTsKLSAgICBSZXRhaW5QdHI8Q0ZSdW5M
b29wUmVmPiBtX3J1bkxvb3A7Ci0gICAgUmV0YWluUHRyPENGUnVuTG9vcFNvdXJjZVJlZj4gbV9y
dW5Mb29wU291cmNlOwotI2VsaWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkKLSAgICBHUmVmUHRyPEdN
YWluQ29udGV4dD4gbV9tYWluQ29udGV4dDsKLSAgICBWZWN0b3I8R1JlZlB0cjxHTWFpbkxvb3A+
PiBtX21haW5Mb29wczsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IG1fc291cmNlOwotI2VsaWYgVVNF
KEdFTkVSSUNfRVZFTlRfTE9PUCkKLSAgICB2b2lkIHNjaGVkdWxlKFJlZjxUaW1lckJhc2U6OlNj
aGVkdWxlZFRhc2s+JiYpOwotICAgIHZvaWQgc2NoZWR1bGUoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBSZWY8VGltZXJCYXNlOjpTY2hlZHVsZWRUYXNrPiYmKTsKLSAgICB2b2lkIHdha2VVcChjb25z
dCBBYnN0cmFjdExvY2tlciYpOwotICAgIHZvaWQgc2NoZWR1bGVBbmRXYWtlVXAoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBSZWY8VGltZXJCYXNlOjpTY2hlZHVsZWRUYXNrPiYmKTsKLQotICAgIGVu
dW0gY2xhc3MgUnVuTW9kZSB7Ci0gICAgICAgIEl0ZXJhdGUsCi0gICAgICAgIERyYWluCi0gICAg
fTsKLQotICAgIGVudW0gY2xhc3MgU3RhdHVzIHsKLSAgICAgICAgQ2xlYXIsCi0gICAgICAgIFN0
b3BwaW5nLAotICAgIH07Ci0gICAgdm9pZCBydW5JbXBsKFJ1bk1vZGUpOwotICAgIGJvb2wgcG9w
dWxhdGVUYXNrcyhSdW5Nb2RlLCBTdGF0dXMmLCBEZXF1ZTxSZWZQdHI8VGltZXJCYXNlOjpTY2hl
ZHVsZWRUYXNrPj4mKTsKLQotICAgIGZyaWVuZCBjbGFzcyBUaW1lckJhc2U7Ci0KLSAgICBMb2Nr
IG1fbG9vcExvY2s7Ci0gICAgQ29uZGl0aW9uIG1fcmVhZHlUb1J1bjsKLSAgICBDb25kaXRpb24g
bV9zdG9wQ29uZGl0aW9uOwotICAgIFZlY3RvcjxSZWZQdHI8VGltZXJCYXNlOjpTY2hlZHVsZWRU
YXNrPj4gbV9zY2hlZHVsZXM7Ci0gICAgVmVjdG9yPFN0YXR1cyo+IG1fbWFpbkxvb3BzOwotICAg
IGJvb2wgbV9zaHV0ZG93biB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3BlbmRpbmdUYXNrcyB7IGZh
bHNlIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OlJ1
bkxvb3A7Ci0KLSNlbmRpZiAvLyBSdW5Mb29wX2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9TY29wZWRMYW1iZGEuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi9TY29wZWRMYW1iZGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGI0YWIzODYwMzEzMWY4NTZkZWJhNDU0ZWIxZjAyZmU0NjVhYWY1My4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvU2NvcGVkTGFtYmRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgU2NvcGVkTGFtYmRhX2gKLSNkZWZpbmUgU2NvcGVkTGFtYmRhX2gKLQotbmFtZXNwYWNl
IFdURiB7Ci0KLS8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZpY2llbnRseSBwYXNz
IGxhbWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJpbmcKLS8vIHRlbXBs
YXRlIHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUgc2hvdWxkIGJlIGRl
Y2xhcmVkIGFzOgotLy8KLS8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJkYTxNeVRoaW5ncyog
KGludCwgU3R1ZmYmKT4mKTsKLS8vCi0vLyBUaGUgY2FsbGVyIGp1c3QgZG9lczoKLS8vCi0vLyB2
b2lkIGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+KFsmXSAoaW50IHgs
IFN0dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKLS8vCi0vLyBOb3RlIHRoYXQgdGhp
cyByZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRoZSBsYW1iZGEgaXMg
b25seSB2YWxpZCB3aGlsZSBmb28oKSBpcwotLy8gb24gdGhlIHN0YWNrIC0gaGVuY2UgdGhlIG5h
bWUgU2NvcGVkTGFtYmRhLgotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNz
IFNjb3BlZExhbWJkYTsKLXRlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3VtZW50VHlwZXM+Ci1jbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRU
eXBlcy4uLik+IHsKLXB1YmxpYzoKLSAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlwZSAoKmltcGwp
KHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcy4uLikgPSBudWxscHRyLCB2b2lkKiBhcmcgPSBudWxs
cHRyKQotICAgICAgICA6IG1faW1wbChpbXBsKQotICAgICAgICAsIG1fYXJnKGFyZykKLSAgICB7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gUGFzc2VkQXJndW1lbnRUeXBlcz4K
LSAgICBSZXN1bHRUeXBlIG9wZXJhdG9yKCkoUGFzc2VkQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3Vt
ZW50cykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ltcGwobV9hcmcsIHN0ZDo6Zm9y
d2FyZDxQYXNzZWRBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgUmVzdWx0VHlwZSAoKm1faW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzLi4u
KTsKLSAgICB2b2lkICptX2FyZzsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlw
ZSwgdHlwZW5hbWUgRnVuY3Rvcj4gY2xhc3MgU2NvcGVkTGFtYmRhRnVuY3RvcjsKLXRlbXBsYXRl
PHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5cGVuYW1l
IEZ1bmN0b3I+Ci1jbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yPFJlc3VsdFR5cGUgKEFyZ3VtZW50
VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJn
dW1lbnRUeXBlcy4uLik+IHsKLXB1YmxpYzoKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXNzZWRG
dW5jdG9yPgotICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoUGFzc2VkRnVuY3RvciYmIGZ1bmN0b3Ip
Ci0gICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPihp
bXBsRnVuY3Rpb24sIHRoaXMpCi0gICAgICAgICwgbV9mdW5jdG9yKHN0ZDo6Zm9yd2FyZDxQYXNz
ZWRGdW5jdG9yPihmdW5jdG9yKSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIC8vIFdlIG5lZWQg
dG8gbWFrZSBzdXJlIHRoYXQgY29weWluZyBhbmQgbW92aW5nIFNjb3BlZExhbWJkYUZ1bmN0b3Ig
cmVzdWx0cyBpbiBhIFNjb3BlZExhbWJkYUZ1bmN0b3IKLSAgICAvLyB3aG9zZSBTY29wZWRMYW1i
ZGEgc3VwZXJ0eXBlIHN0aWxsIHBvaW50cyB0byB0aGlzIHJhdGhlciB0aGFuIG90aGVyLgotICAg
IFNjb3BlZExhbWJkYUZ1bmN0b3IoY29uc3QgU2NvcGVkTGFtYmRhRnVuY3RvciYgb3RoZXIpCi0g
ICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPihpbXBs
RnVuY3Rpb24sIHRoaXMpCi0gICAgICAgICwgbV9mdW5jdG9yKG90aGVyLm1fZnVuY3RvcikKLSAg
ICB7Ci0gICAgfQotCi0gICAgU2NvcGVkTGFtYmRhRnVuY3RvcihTY29wZWRMYW1iZGFGdW5jdG9y
JiYgb3RoZXIpCi0gICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlw
ZXMuLi4pPihpbXBsRnVuY3Rpb24sIHRoaXMpCi0gICAgICAgICwgbV9mdW5jdG9yKFdURk1vdmUo
b3RoZXIubV9mdW5jdG9yKSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFNjb3BlZExhbWJkYUZ1
bmN0b3ImIG9wZXJhdG9yPShjb25zdCBTY29wZWRMYW1iZGFGdW5jdG9yJiBvdGhlcikKLSAgICB7
Ci0gICAgICAgIG1fZnVuY3RvciA9IG90aGVyLm1fZnVuY3RvcjsKLSAgICAgICAgcmV0dXJuICp0
aGlzOwotICAgIH0KLSAgICAKLSAgICBTY29wZWRMYW1iZGFGdW5jdG9yJiBvcGVyYXRvcj0oU2Nv
cGVkTGFtYmRhRnVuY3RvciYmIG90aGVyKQotICAgIHsKLSAgICAgICAgbV9mdW5jdG9yID0gV1RG
TW92ZShvdGhlci5tX2Z1bmN0b3IpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIHN0YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVu
dCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCi0gICAgewotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFyZ3VtZW50KS0+bV9mdW5jdG9yKGFyZ3Vt
ZW50cy4uLik7Ci0gICAgfQotCi0gICAgRnVuY3RvciBtX2Z1bmN0b3I7Ci19OwotCi0vLyBDYW4n
dCBzaW1wbHkgcmVseSBvbiBwZXJmZWN0IGZvcndhcmRpbmcgYmVjYXVzZSB0aGVuIHRoZSBTY29w
ZWRMYW1iZGFGdW5jdG9yIHdvdWxkIHBvaW50IHRvIHRoZSBmdW5jdG9yCi0vLyBieSBjb25zdCBy
ZWZlcmVuY2UuIFRoaXMgd291bGQgYmUgc3VycHJpc2luZyBpbiBzaXR1YXRpb25zIGxpa2U6Ci0v
LwotLy8gYXV0byBzY29wZWRMYW1iZGEgPSBzY29wZWRMYW1iZGE8Rm9vKEJhcik+KFsmXSAoQmFy
KSAtPiBGb28geyAuLi4gfSk7Ci0vLwotLy8gV2UgZXhwZWN0ZWQgc2NvcGVkTGFtYmRhIHRvIGJl
IHZhbGlkIGZvciBpdHMgZW50aXJlIGxpZmV0aW1lLCBidXQgaWYgaXQgY29tcHV0ZWQgdGhlIGxh
bWJkYSBieSByZWZlcmVuY2UKLS8vIHRoZW4gaXQgd291bGQgYmUgaW1tZWRpYXRlbHkgaW52YWxp
ZC4KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KLVNj
b3BlZExhbWJkYUZ1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPiBzY29wZWRMYW1iZGEoY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKLXsKLSAgICByZXR1cm4gU2NvcGVkTGFtYmRhRnVuY3RvcjxG
dW5jdGlvblR5cGUsIEZ1bmN0b3I+KGZ1bmN0b3IpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+Ci1TY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0
aW9uVHlwZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhKEZ1bmN0b3ImJiBmdW5jdG9yKQotewotICAg
IHJldHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oV1RGTW92
ZShmdW5jdG9yKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5h
bWUgRnVuY3Rvcj4gY2xhc3MgU2NvcGVkTGFtYmRhUmVmRnVuY3RvcjsKLXRlbXBsYXRlPHR5cGVu
YW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0
b3I+Ci1jbGFzcyBTY29wZWRMYW1iZGFSZWZGdW5jdG9yPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlw
ZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1l
bnRUeXBlcy4uLik+IHsKLXB1YmxpYzoKLSAgICBTY29wZWRMYW1iZGFSZWZGdW5jdG9yKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFy
Z3VtZW50VHlwZXMuLi4pPihpbXBsRnVuY3Rpb24sIHRoaXMpCi0gICAgICAgICwgbV9mdW5jdG9y
KCZmdW5jdG9yKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1
cmUgdGhhdCBjb3B5aW5nIGFuZCBtb3ZpbmcgU2NvcGVkTGFtYmRhUmVmRnVuY3RvciByZXN1bHRz
IGluIGEKLSAgICAvLyBTY29wZWRMYW1iZGFSZWZGdW5jdG9yIHdob3NlIFNjb3BlZExhbWJkYSBz
dXBlcnR5cGUgc3RpbGwgcG9pbnRzIHRvIHRoaXMgcmF0aGVyIHRoYW4KLSAgICAvLyBvdGhlci4K
LSAgICBTY29wZWRMYW1iZGFSZWZGdW5jdG9yKGNvbnN0IFNjb3BlZExhbWJkYVJlZkZ1bmN0b3Im
IG90aGVyKQotICAgICAgICA6IFNjb3BlZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVz
Li4uKT4oaW1wbEZ1bmN0aW9uLCB0aGlzKQotICAgICAgICAsIG1fZnVuY3RvcihvdGhlci5tX2Z1
bmN0b3IpCi0gICAgewotICAgIH0KLQotICAgIFNjb3BlZExhbWJkYVJlZkZ1bmN0b3IoU2NvcGVk
TGFtYmRhUmVmRnVuY3RvciYmIG90aGVyKQotICAgICAgICA6IFNjb3BlZExhbWJkYTxSZXN1bHRU
eXBlIChBcmd1bWVudFR5cGVzLi4uKT4oaW1wbEZ1bmN0aW9uLCB0aGlzKQotICAgICAgICAsIG1f
ZnVuY3RvcihvdGhlci5tX2Z1bmN0b3IpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBTY29wZWRM
YW1iZGFSZWZGdW5jdG9yJiBvcGVyYXRvcj0oY29uc3QgU2NvcGVkTGFtYmRhUmVmRnVuY3RvciYg
b3RoZXIpCi0gICAgewotICAgICAgICBtX2Z1bmN0b3IgPSBvdGhlci5tX2Z1bmN0b3I7Ci0gICAg
ICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgCi0gICAgU2NvcGVkTGFtYmRhUmVmRnVuY3Rv
ciYgb3BlcmF0b3I9KFNjb3BlZExhbWJkYVJlZkZ1bmN0b3ImJiBvdGhlcikKLSAgICB7Ci0gICAg
ICAgIG1fZnVuY3RvciA9IG90aGVyLm1fZnVuY3RvcjsKLSAgICAgICAgcmV0dXJuICp0aGlzOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVzdWx0VHlwZSBpbXBsRnVuY3Rpb24odm9p
ZCogYXJndW1lbnQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICgqc3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRhUmVmRnVuY3Rvcio+KGFyZ3VtZW50KS0+
bV9mdW5jdG9yKShhcmd1bWVudHMuLi4pOwotICAgIH0KLQotICAgIGNvbnN0IEZ1bmN0b3IqIG1f
ZnVuY3RvcjsKLX07Ci0KLS8vIFRoaXMgaXMgZm9yIHdoZW4geW91IGFscmVhZHkgcmVmZXIgdG8g
YSBmdW5jdG9yIGJ5IHJlZmVyZW5jZSwgYW5kIHlvdSBrbm93IGl0cyBsaWZldGltZSBpcwotLy8g
Z29vZC4gVGhpcyBqdXN0IGNyZWF0ZXMgYSBTY29wZWRMYW1iZGEgdGhhdCBwb2ludHMgdG8geW91
ciBmdW5jdG9yLgotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5j
dG9yPgotU2NvcGVkTGFtYmRhUmVmRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3Bl
ZExhbWJkYVJlZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQotewotICAgIHJldHVybiBTY29wZWRM
YW1iZGFSZWZGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oZnVuY3Rvcik7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OlNjb3BlZExhbWJkYTsKLXVzaW5nIFdURjo6
c2NvcGVkTGFtYmRhOwotdXNpbmcgV1RGOjpzY29wZWRMYW1iZGFSZWY7Ci0KLSNlbmRpZiAvLyBT
Y29wZWRMYW1iZGFfaAotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvU2Vjb25kcy5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvU2Vj
b25kcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZDMwMDMyOGY3MmRmMGE5
MGI5YTdiMTIwZGYyZDc0ZTEwOGMwYTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1NlY29uZHMu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
U2Vjb25kcy5oIgotCi0jaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKLSNpbmNsdWRlICJNb25vdG9u
aWNUaW1lLmgiCi0jaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKLSNpbmNsdWRlICJUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUuaCIKLSNpbmNsdWRlICJXYWxsVGltZS5oIgotCi1uYW1lc3BhY2UgV1RG
IHsKLQotV2FsbFRpbWUgU2Vjb25kczo6b3BlcmF0b3IrKFdhbGxUaW1lIG90aGVyKSBjb25zdAot
ewotICAgIHJldHVybiBvdGhlciArICp0aGlzOwotfQotCi1Nb25vdG9uaWNUaW1lIFNlY29uZHM6
Om9wZXJhdG9yKyhNb25vdG9uaWNUaW1lIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBvdGhl
ciArICp0aGlzOwotfQotCi1UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgU2Vjb25kczo6b3BlcmF0
b3IrKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG90aGVyICsgKnRoaXM7Ci19Ci0KLVdhbGxUaW1lIFNlY29uZHM6Om9wZXJhdG9yLShX
YWxsVGltZSBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gV2FsbFRpbWU6OmZyb21SYXdTZWNv
bmRzKHZhbHVlKCkgLSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOwotfQotCi1N
b25vdG9uaWNUaW1lIFNlY29uZHM6Om9wZXJhdG9yLShNb25vdG9uaWNUaW1lIG90aGVyKSBjb25z
dAotewotICAgIHJldHVybiBNb25vdG9uaWNUaW1lOjpmcm9tUmF3U2Vjb25kcyh2YWx1ZSgpIC0g
b3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKLX0KLQotVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlIFNlY29uZHM6Om9wZXJhdG9yLShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUmIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBvdGhlci53aXRoU2FtZUNsb2NrQW5kUmF3
U2Vjb25kcyh2YWx1ZSgpIC0gb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKLX0K
LQotdm9pZCBTZWNvbmRzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0
LnByaW50KG1fdmFsdWUsICIgc2VjIik7Ci19Ci0KLXZvaWQgc2xlZXAoU2Vjb25kcyB2YWx1ZSkK
LXsKLSAgICBzbGVlcCh2YWx1ZS52YWx1ZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9TZWNvbmRzLmgg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvU2Vjb25kcy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0ODQ4M2YyMWNkN2QyOGE4NjQ0NzhhNmM0ODdkMDlmYTVjMWEy
MGU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9TZWNvbmRzLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIFdURl9TZWNvbmRzX2gKLSNkZWZpbmUgV1RGX1NlY29uZHNfaAotCi0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIE1vbm90
b25pY1RpbWU7Ci1jbGFzcyBQcmludFN0cmVhbTsKLWNsYXNzIFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZTsKLWNsYXNzIFdhbGxUaW1lOwotCi1jbGFzcyBTZWNvbmRzIHsKLXB1YmxpYzoKLSAgICBj
b25zdGV4cHIgU2Vjb25kcygpIHsgfQotICAgIAotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBTZWNv
bmRzKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgY29uc3RleHByIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWU7IH0KLSAgICAKLSAgICBjb25zdGV4cHIgZG91YmxlIG1pbnV0ZXMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlIC8gNjA7IH0KLSAgICBjb25zdGV4cHIgZG91YmxlIHNlY29uZHMoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgY29uc3RleHByIGRvdWJsZSBtaWxsaXNlY29uZHMoKSBj
b25zdCB7IHJldHVybiBzZWNvbmRzKCkgKiAxMDAwOyB9Ci0gICAgY29uc3RleHByIGRvdWJsZSBt
aWNyb3NlY29uZHMoKSBjb25zdCB7IHJldHVybiBtaWxsaXNlY29uZHMoKSAqIDEwMDA7IH0KLSAg
ICBjb25zdGV4cHIgZG91YmxlIG5hbm9zZWNvbmRzKCkgY29uc3QgeyByZXR1cm4gbWljcm9zZWNv
bmRzKCkgKiAxMDAwOyB9Ci0KLSAgICAvLyBLZWVwIGluIG1pbmQgdGhhdCBTZWNvbmRzIGlzIGhl
bGQgaW4gZG91YmxlLiBJZiB0aGUgdmFsdWUgaXMgbm90IGluIHJhbmdlIG9mIDUzYml0IGludGVn
ZXIsIHRoZSByZXN1bHQgbWF5IG5vdCBiZSBwcmVjaXNlLgotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFQgbWludXRlc0FzKCkgY29uc3QgeyBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8
VD46OnZhbHVlLCAiIik7IHJldHVybiBjbGFtcFRvQWNjZXB0aW5nNjQ8VD4obWludXRlcygpKTsg
fQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgc2Vjb25kc0FzKCkgY29uc3QgeyBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiIik7IHJldHVybiBjbGFtcFRvQWNj
ZXB0aW5nNjQ8VD4oc2Vjb25kcygpKTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgbWls
bGlzZWNvbmRzQXMoKSBjb25zdCB7IHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRlZ3JhbDxUPjo6
dmFsdWUsICIiKTsgcmV0dXJuIGNsYW1wVG9BY2NlcHRpbmc2NDxUPihtaWxsaXNlY29uZHMoKSk7
IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIG1pY3Jvc2Vjb25kc0FzKCkgY29uc3QgeyBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiIik7IHJldHVybiBjbGFt
cFRvQWNjZXB0aW5nNjQ8VD4obWljcm9zZWNvbmRzKCkpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gVCBuYW5vc2Vjb25kc0FzKCkgY29uc3QgeyBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50
ZWdyYWw8VD46OnZhbHVlLCAiIik7IHJldHVybiBjbGFtcFRvQWNjZXB0aW5nNjQ8VD4obmFub3Nl
Y29uZHMoKSk7IH0KLSAgICAKLSAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgZnJvbU1pbnV0
ZXMoZG91YmxlIG1pbnV0ZXMpCi0gICAgewotICAgICAgICByZXR1cm4gU2Vjb25kcyhtaW51dGVz
ICogNjApOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBmcm9tSG91cnMo
ZG91YmxlIGhvdXJzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFNlY29uZHMoaG91cnMgKiAzNjAw
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMgZnJvbU1pbGxpc2Vjb25k
cyhkb3VibGUgbWlsbGlzZWNvbmRzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFNlY29uZHMobWls
bGlzZWNvbmRzIC8gMTAwMCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vj
b25kcyBmcm9tTWljcm9zZWNvbmRzKGRvdWJsZSBtaWNyb3NlY29uZHMpCi0gICAgewotICAgICAg
ICByZXR1cm4gZnJvbU1pbGxpc2Vjb25kcyhtaWNyb3NlY29uZHMgLyAxMDAwKTsKLSAgICB9Ci0g
ICAgCi0gICAgc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIGZyb21OYW5vc2Vjb25kcyhkb3VibGUg
bmFub3NlY29uZHMpCi0gICAgewotICAgICAgICByZXR1cm4gZnJvbU1pY3Jvc2Vjb25kcyhuYW5v
c2Vjb25kcyAvIDEwMDApOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgY29uc3RleHByIFNlY29u
ZHMgaW5maW5pdHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFNlY29uZHMoc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQg
Y29uc3RleHByIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KLSAg
ICAKLSAgICBjb25zdGV4cHIgU2Vjb25kcyBvcGVyYXRvcisoU2Vjb25kcyBvdGhlcikgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBTZWNvbmRzKHZhbHVlKCkgKyBvdGhlci52YWx1ZSgpKTsK
LSAgICB9Ci0gICAgCi0gICAgY29uc3RleHByIFNlY29uZHMgb3BlcmF0b3ItKFNlY29uZHMgb3Ro
ZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gU2Vjb25kcyh2YWx1ZSgpIC0gb3RoZXIu
dmFsdWUoKSk7Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBTZWNvbmRzIG9wZXJhdG9yLSgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gU2Vjb25kcygtdmFsdWUoKSk7Ci0gICAgfQot
ICAgIAotICAgIC8vIEl0IG1ha2VzIHNlbnNlIHRvIGNvbnNpZGVyIHNjYWxpbmcgYSBkdXJhdGlv
biwgbGlrZSwgIkkgd2FudCB0byB3YWl0IDUgdGltZXMgYXMgbG9uZyBhcwotICAgIC8vIGxhc3Qg
dGltZSEiLgotICAgIGNvbnN0ZXhwciBTZWNvbmRzIG9wZXJhdG9yKihkb3VibGUgc2NhbGFyKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFNlY29uZHModmFsdWUoKSAqIHNjYWxhcik7Ci0g
ICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBTZWNvbmRzIG9wZXJhdG9yLyhkb3VibGUgc2NhbGFy
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFNlY29uZHModmFsdWUoKSAvIHNjYWxhcik7
Ci0gICAgfQotICAgIAotICAgIC8vIEl0J3MgcmVhc29uYWJsZSB0byB0aGluayBhYm91dCByYXRp
b3MgYmV0d2VlbiBTZWNvbmRzLgotICAgIGNvbnN0ZXhwciBkb3VibGUgb3BlcmF0b3IvKFNlY29u
ZHMgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUoKSAvIG90aGVyLnZh
bHVlKCk7Ci0gICAgfQotICAgIAotICAgIFNlY29uZHMgb3BlcmF0b3IlKGRvdWJsZSBzY2FsYXIp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gU2Vjb25kcyhmbW9kKHZhbHVlKCksIHNjYWxh
cikpOwotICAgIH0KLSAgICAKLSAgICAvLyBUaGlzIHNvbHZlcyBmb3Igciwgd2hlcmU6Ci0gICAg
Ly8KLSAgICAvLyAgICAgZmxvb3IodGhpcyAvIG90aGVyKSArIHIgLyBvdGhlciA9IHRoaXMgLyBv
dGhlcgotICAgIC8vCi0gICAgLy8gVGhlcmVmb3JlLCBpZiB0aGlzIGlzIFNlY29uZHMgdGhlbiBy
IGlzIFNlY29uZHMuCi0gICAgU2Vjb25kcyBvcGVyYXRvciUoU2Vjb25kcyBvdGhlcikgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBTZWNvbmRzKGZtb2QodmFsdWUoKSwgb3RoZXIudmFsdWUo
KSkpOwotICAgIH0KLSAgICAKLSAgICBTZWNvbmRzJiBvcGVyYXRvcis9KFNlY29uZHMgb3RoZXIp
Ci0gICAgewotICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyArIG90aGVyOwotICAgIH0KLSAg
ICAKLSAgICBTZWNvbmRzJiBvcGVyYXRvci09KFNlY29uZHMgb3RoZXIpCi0gICAgewotICAgICAg
ICByZXR1cm4gKnRoaXMgPSAqdGhpcyAtIG90aGVyOwotICAgIH0KLSAgICAKLSAgICBTZWNvbmRz
JiBvcGVyYXRvcio9KGRvdWJsZSBzY2FsYXIpCi0gICAgewotICAgICAgICByZXR1cm4gKnRoaXMg
PSAqdGhpcyAqIHNjYWxhcjsKLSAgICB9Ci0gICAgCi0gICAgU2Vjb25kcyYgb3BlcmF0b3IvPShk
b3VibGUgc2NhbGFyKQotICAgIHsKLSAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLyBzY2Fs
YXI7Ci0gICAgfQotICAgIAotICAgIFNlY29uZHMmIG9wZXJhdG9yJT0oZG91YmxlIHNjYWxhcikK
LSAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICUgc2NhbGFyOwotICAgIH0KLSAg
ICAKLSAgICBTZWNvbmRzJiBvcGVyYXRvciU9KFNlY29uZHMgb3RoZXIpCi0gICAgewotICAgICAg
ICByZXR1cm4gKnRoaXMgPSAqdGhpcyAlIG90aGVyOwotICAgIH0KLSAgICAKLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgV2FsbFRpbWUgb3BlcmF0b3IrKFdhbGxUaW1lKSBjb25zdDsKLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgTW9ub3RvbmljVGltZSBvcGVyYXRvcisoTW9ub3RvbmljVGltZSkgY29u
c3Q7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVy
YXRvcisoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7Ci0gICAgCi0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIFdhbGxUaW1lIG9wZXJhdG9yLShXYWxsVGltZSkgY29uc3Q7Ci0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIE1vbm90b25pY1RpbWUgb3BlcmF0b3ItKE1vbm90b25pY1Rp
bWUpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUgb3BlcmF0b3ItKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpIGNvbnN0OwotICAg
IAotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oU2Vjb25kcyBvdGhlcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7Ci0gICAgfQotICAg
IAotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oU2Vjb25kcyBvdGhlcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7Ci0gICAgfQotICAg
IAotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChTZWNvbmRzIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUgPCBvdGhlci5tX3ZhbHVlOwotICAgIH0KLSAgICAK
LSAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oU2Vjb25kcyBvdGhlcikgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlID4gb3RoZXIubV92YWx1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShTZWNvbmRzIG90aGVyKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fdmFsdWUgPD0gb3RoZXIubV92YWx1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShTZWNvbmRzIG90aGVyKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fdmFsdWUgPj0gb3RoZXIubV92YWx1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAg
IAotcHJpdmF0ZToKLSAgICBkb3VibGUgbV92YWx1ZSB7IDAgfTsKLX07Ci0KLWlubGluZSBuYW1l
c3BhY2Ugc2Vjb25kc19saXRlcmFscyB7Ci0KLWNvbnN0ZXhwciBTZWNvbmRzIG9wZXJhdG9yIiIg
X21pbihsb25nIGRvdWJsZSBtaW51dGVzKQotewotICAgIHJldHVybiBTZWNvbmRzOjpmcm9tTWlu
dXRlcyhtaW51dGVzKTsKLX0KLQotY29uc3RleHByIFNlY29uZHMgb3BlcmF0b3IiIiBfaChsb25n
IGRvdWJsZSBob3VycykKLXsKLSAgICByZXR1cm4gU2Vjb25kczo6ZnJvbUhvdXJzKGhvdXJzKTsK
LX0KLQotY29uc3RleHByIFNlY29uZHMgb3BlcmF0b3IiIiBfcyhsb25nIGRvdWJsZSBzZWNvbmRz
KQotewotICAgIHJldHVybiBTZWNvbmRzKHNlY29uZHMpOwotfQotCi1jb25zdGV4cHIgU2Vjb25k
cyBvcGVyYXRvciIiIF9tcyhsb25nIGRvdWJsZSBtaWxsaXNlY29uZHMpCi17Ci0gICAgcmV0dXJu
IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMobWlsbGlzZWNvbmRzKTsKLX0KLQotY29uc3RleHBy
IFNlY29uZHMgb3BlcmF0b3IiIiBfdXMobG9uZyBkb3VibGUgbWljcm9zZWNvbmRzKQotewotICAg
IHJldHVybiBTZWNvbmRzOjpmcm9tTWljcm9zZWNvbmRzKG1pY3Jvc2Vjb25kcyk7Ci19Ci0KLWNv
bnN0ZXhwciBTZWNvbmRzIG9wZXJhdG9yIiIgX25zKGxvbmcgZG91YmxlIG5hbm9zZWNvbmRzKQot
ewotICAgIHJldHVybiBTZWNvbmRzOjpmcm9tTmFub3NlY29uZHMobmFub3NlY29uZHMpOwotfQot
Ci1jb25zdGV4cHIgU2Vjb25kcyBvcGVyYXRvciIiIF9taW4odW5zaWduZWQgbG9uZyBsb25nIG1p
bnV0ZXMpCi17Ci0gICAgcmV0dXJuIFNlY29uZHM6OmZyb21NaW51dGVzKG1pbnV0ZXMpOwotfQot
Ci1jb25zdGV4cHIgU2Vjb25kcyBvcGVyYXRvciIiIF9oKHVuc2lnbmVkIGxvbmcgbG9uZyBob3Vy
cykKLXsKLSAgICByZXR1cm4gU2Vjb25kczo6ZnJvbUhvdXJzKGhvdXJzKTsKLX0KLQotY29uc3Rl
eHByIFNlY29uZHMgb3BlcmF0b3IiIiBfcyh1bnNpZ25lZCBsb25nIGxvbmcgc2Vjb25kcykKLXsK
LSAgICByZXR1cm4gU2Vjb25kcyhzZWNvbmRzKTsKLX0KLQotY29uc3RleHByIFNlY29uZHMgb3Bl
cmF0b3IiIiBfbXModW5zaWduZWQgbG9uZyBsb25nIG1pbGxpc2Vjb25kcykKLXsKLSAgICByZXR1
cm4gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMpOwotfQotCi1jb25zdGV4
cHIgU2Vjb25kcyBvcGVyYXRvciIiIF91cyh1bnNpZ25lZCBsb25nIGxvbmcgbWljcm9zZWNvbmRz
KQotewotICAgIHJldHVybiBTZWNvbmRzOjpmcm9tTWljcm9zZWNvbmRzKG1pY3Jvc2Vjb25kcyk7
Ci19Ci0KLWNvbnN0ZXhwciBTZWNvbmRzIG9wZXJhdG9yIiIgX25zKHVuc2lnbmVkIGxvbmcgbG9u
ZyBuYW5vc2Vjb25kcykKLXsKLSAgICByZXR1cm4gU2Vjb25kczo6ZnJvbU5hbm9zZWNvbmRzKG5h
bm9zZWNvbmRzKTsKLX0KLQotfSAvLyBpbmxpbmUgc2Vjb25kc19saXRlcmFscwotCi1XVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBzbGVlcChTZWNvbmRzKTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0K
LW5hbWVzcGFjZSBzdGQgewotCi1pbmxpbmUgYm9vbCBpc25hbihXVEY6OlNlY29uZHMgc2Vjb25k
cykKLXsKLSAgICByZXR1cm4gc3RkOjppc25hbihzZWNvbmRzLnZhbHVlKCkpOwotfQotCi1pbmxp
bmUgYm9vbCBpc2luZihXVEY6OlNlY29uZHMgc2Vjb25kcykKLXsKLSAgICByZXR1cm4gc3RkOjpp
c2luZihzZWNvbmRzLnZhbHVlKCkpOwotfQotCi1pbmxpbmUgYm9vbCBpc2Zpbml0ZShXVEY6OlNl
Y29uZHMgc2Vjb25kcykKLXsKLSAgICByZXR1cm4gc3RkOjppc2Zpbml0ZShzZWNvbmRzLnZhbHVl
KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBzdGQKLQotdXNpbmcgbmFtZXNwYWNlIFdURjo6c2Vj
b25kc19saXRlcmFsczsKLXVzaW5nIFdURjo6U2Vjb25kczsKLQotI2VuZGlmIC8vIFdURl9TZWNv
bmRzX2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9TdGFj
a0JvdW5kcy5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvU3RhY2tCb3Vu
ZHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzYwMjkyMGViZWQzMWQ1YTc0
ZGYzMDc1YzA4NDBlYWYwMjZhNjJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9TdGFja0JvdW5k
cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTdGFja0JvdW5kcy5oIgotCi0jaWYgT1MoREFS
V0lOKQotCi0jaW5jbHVkZSA8bWFjaC90YXNrLmg+Ci0jaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0
Lmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotCi0jZWxpZiBPUyhXSU5ET1dTKQotCi0jaW5jbHVk
ZSA8d2luZG93cy5oPgotCi0jZWxpZiBPUyhTT0xBUklTKQotCi0jaW5jbHVkZSA8dGhyZWFkLmg+
Ci0KLSNlbGlmIE9TKFVOSVgpCi0KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaWYgSEFWRShQVEhS
RUFEX05QX0gpCi0jaW5jbHVkZSA8cHRocmVhZF9ucC5oPgotI2VuZGlmCi0KLSNlbmRpZgotCi1u
YW1lc3BhY2UgV1RGIHsKLQotI2lmIE9TKERBUldJTikKLQotU3RhY2tCb3VuZHMgU3RhY2tCb3Vu
ZHM6Om5ld1RocmVhZFN0YWNrQm91bmRzKFBsYXRmb3JtVGhyZWFkSGFuZGxlIHRocmVhZCkKLXsK
LSAgICB2b2lkKiBvcmlnaW4gPSBwdGhyZWFkX2dldF9zdGFja2FkZHJfbnAodGhyZWFkKTsKLSAg
ICBybGltX3Qgc2l6ZSA9IHB0aHJlYWRfZ2V0X3N0YWNrc2l6ZV9ucCh0aHJlYWQpOwotICAgIHZv
aWQqIGJvdW5kID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9yaWdpbikgLSBzaXplOwotICAgIHJldHVy
biBTdGFja0JvdW5kcyB7IG9yaWdpbiwgYm91bmQgfTsKLX0KLQotU3RhY2tCb3VuZHMgU3RhY2tC
b3VuZHM6OmN1cnJlbnRUaHJlYWRTdGFja0JvdW5kc0ludGVybmFsKCkKLXsKLSAgICBpZiAocHRo
cmVhZF9tYWluX25wKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8xMzc0
MTIwND4KLSAgICAgICAgLy8gcHRocmVhZF9nZXRfc2l6ZSBsaWVzIHRvIHVzIHdoZW4gd2UncmUg
dGhlIG1haW4gdGhyZWFkLCB1c2UgZ2V0X3JsaW1pdCBpbnN0ZWFkCi0gICAgICAgIHZvaWQqIG9y
aWdpbiA9IHB0aHJlYWRfZ2V0X3N0YWNrYWRkcl9ucChwdGhyZWFkX3NlbGYoKSk7Ci0gICAgICAg
IHJsaW1pdCBsaW1pdDsKLSAgICAgICAgZ2V0cmxpbWl0KFJMSU1JVF9TVEFDSywgJmxpbWl0KTsK
LSAgICAgICAgcmxpbV90IHNpemUgPSBsaW1pdC5ybGltX2N1cjsKLSAgICAgICAgdm9pZCogYm91
bmQgPSBzdGF0aWNfY2FzdDxjaGFyKj4ob3JpZ2luKSAtIHNpemU7Ci0gICAgICAgIHJldHVybiBT
dGFja0JvdW5kcyB7IG9yaWdpbiwgYm91bmQgfTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ld1RocmVh
ZFN0YWNrQm91bmRzKHB0aHJlYWRfc2VsZigpKTsKLX0KLQotI2VsaWYgT1MoU09MQVJJUykKLQot
U3RhY2tCb3VuZHMgU3RhY2tCb3VuZHM6OmN1cnJlbnRUaHJlYWRTdGFja0JvdW5kc0ludGVybmFs
KCkKLXsKLSAgICBzdGFja190IHM7Ci0gICAgdGhyX3N0a3NlZ21lbnQoJnMpOwotICAgIHZvaWQq
IG9yaWdpbiA9IHMuc3Nfc3A7Ci0gICAgdm9pZCogYm91bmQgPSBzdGF0aWNfY2FzdDxjaGFyKj4o
b3JpZ2luKSAtIHMuc3Nfc2l6ZTsKLSAgICByZXR1cm4gU3RhY2tCb3VuZHMgeyBvcmlnaW4sIGJv
dW5kIH07Ci19Ci0KLSNlbGlmIE9TKFVOSVgpCi0KLSNpZiBPUyhPUEVOQlNEKQotCi1TdGFja0Jv
dW5kcyBTdGFja0JvdW5kczo6bmV3VGhyZWFkU3RhY2tCb3VuZHMoUGxhdGZvcm1UaHJlYWRIYW5k
bGUgdGhyZWFkKQotewotICAgIHN0YWNrX3Qgc3RhY2s7Ci0gICAgcHRocmVhZF9zdGFja3NlZ19u
cCh0aHJlYWQsICZzdGFjayk7Ci0gICAgdm9pZCogb3JpZ2luID0gc3RhY2suc3Nfc3A7Ci0jaWYg
Q1BVKEhQUEEpCi0gICAgdm9pZCogYm91bmQgPSBzdGF0aWNfY2FzdDxjaGFyKj4ob3JpZ2luKSAr
IHN0YWNrLnNzX3NpemU7Ci0jZWxzZQotICAgIHZvaWQqIGJvdW5kID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KG9yaWdpbikgLSBzdGFjay5zc19zaXplOwotI2VuZGlmCi0gICAgcmV0dXJuIFN0YWNrQm91
bmRzIHsgb3JpZ2luLCBib3VuZCB9OwotfQotCi0jZWxzZSAvLyAhT1MoT1BFTkJTRCkKLQotU3Rh
Y2tCb3VuZHMgU3RhY2tCb3VuZHM6Om5ld1RocmVhZFN0YWNrQm91bmRzKFBsYXRmb3JtVGhyZWFk
SGFuZGxlIHRocmVhZCkKLXsKLSAgICB2b2lkKiBib3VuZCA9IG51bGxwdHI7Ci0gICAgc2l6ZV90
IHN0YWNrU2l6ZSA9IDA7Ci0KLSAgICBwdGhyZWFkX2F0dHJfdCBzYXR0cjsKLSAgICBwdGhyZWFk
X2F0dHJfaW5pdCgmc2F0dHIpOwotI2lmIEhBVkUoUFRIUkVBRF9OUF9IKSB8fCBPUyhORVRCU0Qp
Ci0gICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUuNCwgbmV1bmRvcmZAa2RlLm9yZwotICAgIHB0aHJl
YWRfYXR0cl9nZXRfbnAodGhyZWFkLCAmc2F0dHIpOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogdGhp
cyBmdW5jdGlvbiBpcyBub24tcG9ydGFibGU7IG90aGVyIFBPU0lYIHN5c3RlbXMgbWF5IGhhdmUg
ZGlmZmVyZW50IG5wIGFsdGVybmF0aXZlcwotICAgIHB0aHJlYWRfZ2V0YXR0cl9ucCh0aHJlYWQs
ICZzYXR0cik7Ci0jZW5kaWYKLSAgICBpbnQgcmMgPSBwdGhyZWFkX2F0dHJfZ2V0c3RhY2soJnNh
dHRyLCAmYm91bmQsICZzdGFja1NpemUpOwotICAgIFVOVVNFRF9QQVJBTShyYyk7Ci0gICAgQVNT
RVJUKGJvdW5kKTsKLSAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmc2F0dHIpOwotICAgIHZvaWQq
IG9yaWdpbiA9IHN0YXRpY19jYXN0PGNoYXIqPihib3VuZCkgKyBzdGFja1NpemU7Ci0gICAgcmV0
dXJuIFN0YWNrQm91bmRzIHsgb3JpZ2luLCBib3VuZCB9OwotfQotCi0jZW5kaWYgLy8gT1MoT1BF
TkJTRCkKLQotU3RhY2tCb3VuZHMgU3RhY2tCb3VuZHM6OmN1cnJlbnRUaHJlYWRTdGFja0JvdW5k
c0ludGVybmFsKCkKLXsKLSAgICByZXR1cm4gbmV3VGhyZWFkU3RhY2tCb3VuZHMocHRocmVhZF9z
ZWxmKCkpOwotfQotCi0jZWxpZiBPUyhXSU5ET1dTKQotCi1TdGFja0JvdW5kcyBTdGFja0JvdW5k
czo6Y3VycmVudFRocmVhZFN0YWNrQm91bmRzSW50ZXJuYWwoKQotewotICAgIE1FTU9SWV9CQVNJ
Q19JTkZPUk1BVElPTiBzdGFja09yaWdpbiA9IHsgMCB9OwotICAgIFZpcnR1YWxRdWVyeSgmc3Rh
Y2tPcmlnaW4sICZzdGFja09yaWdpbiwgc2l6ZW9mKHN0YWNrT3JpZ2luKSk7Ci0gICAgLy8gc3Rh
Y2tPcmlnaW4uQWxsb2NhdGlvbkJhc2UgcG9pbnRzIHRvIHRoZSByZXNlcnZlZCBzdGFjayBtZW1v
cnkgYmFzZSBhZGRyZXNzLgotCi0gICAgdm9pZCogb3JpZ2luID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KHN0YWNrT3JpZ2luLkJhc2VBZGRyZXNzKSArIHN0YWNrT3JpZ2luLlJlZ2lvblNpemU7Ci0gICAg
Ly8gVGhlIHN0YWNrIG9uIFdpbmRvd3MgY29uc2lzdHMgb3V0IG9mIHRocmVlIHBhcnRzICh1bmNv
bW1pdHRlZCBtZW1vcnksIGEgZ3VhcmQgcGFnZSBhbmQgcHJlc2VudAotICAgIC8vIGNvbW1pdHRl
ZCBtZW1vcnkpLiBUaGUgMyByZWdpb25zIGhhdmUgZGlmZmVyZW50IEJhc2VBZGRyZXNzZXMgYnV0
IGFsbCBoYXZlIHRoZSBzYW1lIEFsbG9jYXRpb25CYXNlCi0gICAgLy8gc2luY2UgdGhleSBhcmUg
YWxsIGZyb20gdGhlIHNhbWUgVmlydHVhbEFsbG9jLiBUaGUgMyByZWdpb25zIGFyZSBsYWlkIG91
dCBpbiBtZW1vcnkgKGZyb20gaGlnaCB0bwotICAgIC8vIGxvdykgYXMgZm9sbG93czoKLSAgICAv
LwotICAgIC8vICAgIEhpZ2ggfC0tLS0tLS0tLS0tLS0tLS0tLS18ICAtLS0tLQotICAgIC8vICAg
ICAgICAgfCBjb21taXR0ZWRNZW1vcnkgICB8ICAgIF4KLSAgICAvLyAgICAgICAgIHwtLS0tLS0t
LS0tLS0tLS0tLS0tfCAgICB8Ci0gICAgLy8gICAgICAgICB8IGd1YXJkUGFnZSAgICAgICAgIHwg
cmVzZXJ2ZWQgbWVtb3J5IGZvciB0aGUgc3RhY2sKLSAgICAvLyAgICAgICAgIHwtLS0tLS0tLS0t
LS0tLS0tLS0tfCAgICB8Ci0gICAgLy8gICAgICAgICB8IHVuY29tbWl0dGVkTWVtb3J5IHwgICAg
dgotICAgIC8vICAgIExvdyAgfC0tLS0tLS0tLS0tLS0tLS0tLS18ICAtLS0tLSA8LS0tIHN0YWNr
T3JpZ2luLkFsbG9jYXRpb25CYXNlCi0gICAgLy8KLSAgICAvLyBTZWUgaHR0cDovL21zZG4ubWlj
cm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNjg2Nzc0JTI4VlMuODUlMjkuYXNweCBmb3IgbW9y
ZSBpbmZvcm1hdGlvbi4KLQotICAgIE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiB1bmNvbW1pdHRl
ZE1lbW9yeTsKLSAgICBWaXJ0dWFsUXVlcnkoc3RhY2tPcmlnaW4uQWxsb2NhdGlvbkJhc2UsICZ1
bmNvbW1pdHRlZE1lbW9yeSwgc2l6ZW9mKHVuY29tbWl0dGVkTWVtb3J5KSk7Ci0gICAgQVNTRVJU
KHVuY29tbWl0dGVkTWVtb3J5LlN0YXRlID09IE1FTV9SRVNFUlZFKTsKLQotICAgIE1FTU9SWV9C
QVNJQ19JTkZPUk1BVElPTiBndWFyZFBhZ2U7Ci0gICAgVmlydHVhbFF1ZXJ5KHN0YXRpY19jYXN0
PGNoYXIqPih1bmNvbW1pdHRlZE1lbW9yeS5CYXNlQWRkcmVzcykgKyB1bmNvbW1pdHRlZE1lbW9y
eS5SZWdpb25TaXplLCAmZ3VhcmRQYWdlLCBzaXplb2YoZ3VhcmRQYWdlKSk7Ci0gICAgQVNTRVJU
KGd1YXJkUGFnZS5Qcm90ZWN0ICYgUEFHRV9HVUFSRCk7Ci0KLSAgICB2b2lkKiBlbmRPZlN0YWNr
ID0gc3RhY2tPcmlnaW4uQWxsb2NhdGlvbkJhc2U7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgTUVN
T1JZX0JBU0lDX0lORk9STUFUSU9OIGNvbW1pdHRlZE1lbW9yeTsKLSAgICBWaXJ0dWFsUXVlcnko
c3RhdGljX2Nhc3Q8Y2hhcio+KGd1YXJkUGFnZS5CYXNlQWRkcmVzcykgKyBndWFyZFBhZ2UuUmVn
aW9uU2l6ZSwgJmNvbW1pdHRlZE1lbW9yeSwgc2l6ZW9mKGNvbW1pdHRlZE1lbW9yeSkpOwotICAg
IEFTU0VSVChjb21taXR0ZWRNZW1vcnkuU3RhdGUgPT0gTUVNX0NPTU1JVCk7Ci0KLSAgICB2b2lk
KiBjb21wdXRlZEVuZCA9IHN0YXRpY19jYXN0PGNoYXIqPihvcmlnaW4pIC0gKHVuY29tbWl0dGVk
TWVtb3J5LlJlZ2lvblNpemUgKyBndWFyZFBhZ2UuUmVnaW9uU2l6ZSArIGNvbW1pdHRlZE1lbW9y
eS5SZWdpb25TaXplKTsKLQotICAgIEFTU0VSVChzdGFja09yaWdpbi5BbGxvY2F0aW9uQmFzZSA9
PSB1bmNvbW1pdHRlZE1lbW9yeS5BbGxvY2F0aW9uQmFzZSk7Ci0gICAgQVNTRVJUKHN0YWNrT3Jp
Z2luLkFsbG9jYXRpb25CYXNlID09IGd1YXJkUGFnZS5BbGxvY2F0aW9uQmFzZSk7Ci0gICAgQVNT
RVJUKHN0YWNrT3JpZ2luLkFsbG9jYXRpb25CYXNlID09IGNvbW1pdHRlZE1lbW9yeS5BbGxvY2F0
aW9uQmFzZSk7Ci0gICAgQVNTRVJUKHN0YWNrT3JpZ2luLkFsbG9jYXRpb25CYXNlID09IHVuY29t
bWl0dGVkTWVtb3J5LkJhc2VBZGRyZXNzKTsKLSAgICBBU1NFUlQoZW5kT2ZTdGFjayA9PSBjb21w
dXRlZEVuZCk7Ci0jZW5kaWYgLy8gTkRFQlVHCi0gICAgdm9pZCogYm91bmQgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4oZW5kT2ZTdGFjaykgKyBndWFyZFBhZ2UuUmVnaW9uU2l6ZTsKLSAgICByZXR1cm4g
U3RhY2tCb3VuZHMgeyBvcmlnaW4sIGJvdW5kIH07Ci19Ci0KLSNlbHNlCi0jZXJyb3IgTmVlZCBh
IHdheSB0byBnZXQgdGhlIHN0YWNrIGJvdW5kcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLQot
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvU3RhY2tCb3VuZHMuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9TdGFja0JvdW5kcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2NkYjM5MTZi
MTAyODgzM2RlMzhkZWZhM2IzYzU0YmQ5ZjE1ZDU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9T
dGFja0JvdW5kcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0gKi8KLQotI2lmbmRlZiBTdGFj
a0JvdW5kc19oCi0jZGVmaW5lIFN0YWNrQm91bmRzX2gKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4K
LSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgotCi1uYW1lc3BhY2UgV1RGIHsK
LQotY2xhc3MgU3RhY2tCb3VuZHMgewotICAgIC8vIFRoaXMgNjRrIG51bWJlciB3YXMgcGlja2Vk
IGJlY2F1c2UgYSBzYW1wbGluZyBvZiBzdGFjayB1c2FnZSBkaWZmZXJlbmNlcwotICAgIC8vIGJl
dHdlZW4gY29uc2VjdXRpdmUgZW50cmllcyBpbnRvIG9uZSBvZiB0aGUgSW50ZXJwcmV0ZXI6OmV4
ZWN1dGUuLi4oKQotICAgIC8vIGZ1bmN0aW9ucyB3YXMgc2VlbiB0byBiZSBhcyBoaWdoIGFzIDI3
ay4gSGVuY2UsIDY0ayBpcyBjaG9zZW4gYXMgYQotICAgIC8vIGNvbnNlcnZhdGl2ZSBhdmFpbGFi
aWxpdHkgdmFsdWUgdGhhdCBpcyBub3QgdG9vIGxhcmdlIGJ1dCBjb21mb3J0YWJseQotICAgIC8v
IGV4Y2VlZHMgMjdrIHdpdGggc29tZSBidWZmZXIgZm9yIGVycm9yLgotICAgIGNvbnN0IHN0YXRp
YyBzaXplX3Qgc19kZWZhdWx0QXZhaWxhYmlsaXR5RGVsdGEgPSA2NCAqIDEwMjQ7Ci0KLXB1Ymxp
YzoKLSAgICBzdGF0aWMgY29uc3RleHByIFN0YWNrQm91bmRzIGVtcHR5Qm91bmRzKCkgeyByZXR1
cm4gU3RhY2tCb3VuZHMoKTsgfQotCi0jaWYgSEFWRShTVEFDS19CT1VORFNfRk9SX05FV19USFJF
QUQpCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGVmZmVjdGl2ZSBmb3IgbmV3bHkgY3Jl
YXRlZCB0aHJlYWRzLiBJbiBzb21lIHBsYXRmb3JtLCBpdCByZXR1cm5zIGEgYm9ndXMgdmFsdWUg
Zm9yIHRoZSBtYWluIHRocmVhZC4KLSAgICBzdGF0aWMgU3RhY2tCb3VuZHMgbmV3VGhyZWFkU3Rh
Y2tCb3VuZHMoUGxhdGZvcm1UaHJlYWRIYW5kbGUpOwotI2VuZGlmCi0gICAgc3RhdGljIFN0YWNr
Qm91bmRzIGN1cnJlbnRUaHJlYWRTdGFja0JvdW5kcygpCi0gICAgewotICAgICAgICBhdXRvIHJl
c3VsdCA9IGN1cnJlbnRUaHJlYWRTdGFja0JvdW5kc0ludGVybmFsKCk7Ci0gICAgICAgIHJlc3Vs
dC5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgdm9pZCogb3JpZ2luKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX29yaWdpbik7
Ci0gICAgICAgIHJldHVybiBtX29yaWdpbjsKLSAgICB9Ci0KLSAgICB2b2lkKiBlbmQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fYm91bmQpOwotICAgICAgICByZXR1cm4gbV9ib3Vu
ZDsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IHNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKGlzR3Jvd2luZ0Rvd253YXJkKCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y2hhcio+KG1fb3JpZ2luKSAtIHN0YXRpY19jYXN0PGNoYXIqPihtX2JvdW5kKTsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihtX2JvdW5kKSAtIHN0YXRpY19jYXN0PGNoYXIqPiht
X29yaWdpbik7Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1f
b3JpZ2luOyB9Ci0KLSAgICBib29sIGNvbnRhaW5zKHZvaWQqIHApIGNvbnN0Ci0gICAgewotICAg
ICAgICBpZiAoaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoaXNHcm93aW5nRG93bndhcmQoKSkKLSAgICAgICAgICAgIHJldHVybiAobV9vcmlnaW4gPj0g
cCkgJiYgKHAgPiBtX2JvdW5kKTsKLSAgICAgICAgcmV0dXJuIChtX2JvdW5kID4gcCkgJiYgKHAg
Pj0gbV9vcmlnaW4pOwotICAgIH0KLQotICAgIHZvaWQqIHJlY3Vyc2lvbkxpbWl0KHNpemVfdCBt
aW5BdmFpbGFibGVEZWx0YSA9IHNfZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhKSBjb25zdAotICAg
IHsKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBpZiAoaXNHcm93aW5nRG93
bndhcmQoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkg
KyBtaW5BdmFpbGFibGVEZWx0YTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPiht
X2JvdW5kKSAtIG1pbkF2YWlsYWJsZURlbHRhOwotICAgIH0KLQotICAgIHZvaWQqIHJlY3Vyc2lv
bkxpbWl0KGNoYXIqIHN0YXJ0T2ZVc2VyU3RhY2ssIHNpemVfdCBtYXhVc2VyU3RhY2ssIHNpemVf
dCByZXNlcnZlZFpvbmVTaXplKSBjb25zdAotICAgIHsKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwotICAgICAgICBpZiAobWF4VXNlclN0YWNrIDwgcmVzZXJ2ZWRab25lU2l6ZSkKLSAgICAg
ICAgICAgIHJlc2VydmVkWm9uZVNpemUgPSBtYXhVc2VyU3RhY2s7Ci0gICAgICAgIHNpemVfdCBt
YXhVc2VyU3RhY2tXaXRoUmVzZXJ2ZWRab25lID0gbWF4VXNlclN0YWNrIC0gcmVzZXJ2ZWRab25l
U2l6ZTsKLQotICAgICAgICBpZiAoaXNHcm93aW5nRG93bndhcmQoKSkgewotICAgICAgICAgICAg
Y2hhciogZW5kT2ZTdGFja1dpdGhSZXNlcnZlZFpvbmUgPSByZWludGVycHJldF9jYXN0PGNoYXIq
PihtX2JvdW5kKSArIHJlc2VydmVkWm9uZVNpemU7Ci0gICAgICAgICAgICBpZiAoc3RhcnRPZlVz
ZXJTdGFjayA8IGVuZE9mU3RhY2tXaXRoUmVzZXJ2ZWRab25lKQotICAgICAgICAgICAgICAgIHJl
dHVybiBlbmRPZlN0YWNrV2l0aFJlc2VydmVkWm9uZTsKLSAgICAgICAgICAgIHNpemVfdCBhdmFp
bGFibGVVc2VyU3RhY2sgPSBzdGFydE9mVXNlclN0YWNrIC0gZW5kT2ZTdGFja1dpdGhSZXNlcnZl
ZFpvbmU7Ci0gICAgICAgICAgICBpZiAobWF4VXNlclN0YWNrV2l0aFJlc2VydmVkWm9uZSA+IGF2
YWlsYWJsZVVzZXJTdGFjaykKLSAgICAgICAgICAgICAgICBtYXhVc2VyU3RhY2tXaXRoUmVzZXJ2
ZWRab25lID0gYXZhaWxhYmxlVXNlclN0YWNrOwotICAgICAgICAgICAgcmV0dXJuIHN0YXJ0T2ZV
c2VyU3RhY2sgLSBtYXhVc2VyU3RhY2tXaXRoUmVzZXJ2ZWRab25lOwotICAgICAgICB9Ci0KLSAg
ICAgICAgY2hhciogZW5kT2ZTdGFja1dpdGhSZXNlcnZlZFpvbmUgPSByZWludGVycHJldF9jYXN0
PGNoYXIqPihtX2JvdW5kKSAtIHJlc2VydmVkWm9uZVNpemU7Ci0gICAgICAgIGlmIChzdGFydE9m
VXNlclN0YWNrID4gZW5kT2ZTdGFja1dpdGhSZXNlcnZlZFpvbmUpCi0gICAgICAgICAgICByZXR1
cm4gZW5kT2ZTdGFja1dpdGhSZXNlcnZlZFpvbmU7Ci0gICAgICAgIHNpemVfdCBhdmFpbGFibGVV
c2VyU3RhY2sgPSBlbmRPZlN0YWNrV2l0aFJlc2VydmVkWm9uZSAtIHN0YXJ0T2ZVc2VyU3RhY2s7
Ci0gICAgICAgIGlmIChtYXhVc2VyU3RhY2tXaXRoUmVzZXJ2ZWRab25lID4gYXZhaWxhYmxlVXNl
clN0YWNrKQotICAgICAgICAgICAgbWF4VXNlclN0YWNrV2l0aFJlc2VydmVkWm9uZSA9IGF2YWls
YWJsZVVzZXJTdGFjazsKLSAgICAgICAgcmV0dXJuIHN0YXJ0T2ZVc2VyU3RhY2sgKyBtYXhVc2Vy
U3RhY2tXaXRoUmVzZXJ2ZWRab25lOwotICAgIH0KLQotICAgIGJvb2wgaXNHcm93aW5nRG93bndh
cmQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fb3JpZ2luICYmIG1fYm91bmQpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU3RhY2tCb3VuZHMo
dm9pZCogb3JpZ2luLCB2b2lkKiBlbmQpCi0gICAgICAgIDogbV9vcmlnaW4ob3JpZ2luKQotICAg
ICAgICAsIG1fYm91bmQoZW5kKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgU3RhY2tC
b3VuZHMoKQotICAgICAgICA6IG1fb3JpZ2luKG51bGxwdHIpCi0gICAgICAgICwgbV9ib3VuZChu
dWxscHRyKQotICAgIHsKLSAgICB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0
YWNrQm91bmRzIGN1cnJlbnRUaHJlYWRTdGFja0JvdW5kc0ludGVybmFsKCk7Ci0KLSAgICB2b2lk
IGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAotICAgIHsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
ICAgICB2b2lkKiBjdXJyZW50UG9zaXRpb24gPSAmY3VycmVudFBvc2l0aW9uOwotICAgICAgICBB
U1NFUlQobV9vcmlnaW4gIT0gbV9ib3VuZCk7Ci0gICAgICAgIEFTU0VSVChpc0dyb3dpbmdEb3du
d2FyZCgpCi0gICAgICAgICAgICA/IChjdXJyZW50UG9zaXRpb24gPCBtX29yaWdpbiAmJiBjdXJy
ZW50UG9zaXRpb24gPiBtX2JvdW5kKQotICAgICAgICAgICAgOiAoY3VycmVudFBvc2l0aW9uID4g
bV9vcmlnaW4gJiYgY3VycmVudFBvc2l0aW9uIDwgbV9ib3VuZCkpOwotI2VuZGlmCi0gICAgfQot
Ci0gICAgdm9pZCogbV9vcmlnaW47Ci0gICAgdm9pZCogbV9ib3VuZDsKLQotICAgIGZyaWVuZCBj
bGFzcyBTdGFja1N0YXRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6
U3RhY2tCb3VuZHM7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL1N0YWNrU3RhdHMuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L3d0Zi9TdGFja1N0YXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NjRiNGY2
MDZhYzVmNzcxYzczYmM4NTZhYmJlMzU4ZGQ2N2EwMzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3Rm
L1N0YWNrU3RhdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU3RhY2tTdGF0c19o
Ci0jZGVmaW5lIFN0YWNrU3RhdHNfaAotCi0jaW5jbHVkZSAiRXhwb3J0TWFjcm9zLmgiCi0jaW5j
bHVkZSA8bXV0ZXg+Ci0KLQotLy8gRGVmaW5lIHRoaXMgZmxhZyB0byBlbmFibGUgU3RhY2sgc3Rh
dHMgY29sbGVjdGlvbi4gVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bAotLy8gZm9yIGdldHRpbmcgYSBz
YW1wbGUgb2YgbmF0aXZlIHN0YWNrIHVzYWdlIHNpemVzLgotLy8KLS8vIEVuYWJsaW5nIHRoaXMg
d2lsbCBjYXVzZSBzdGF0cyB0byBiZSBjb2xsZWN0ZWQgYW5kIHdyaXR0ZW4gdG8gYSBsb2cgZmls
ZSBhdAotLy8gdmFyaW91cyAgaW5zdHJ1bWVudGVkIHBvaW50cyBpbiB0aGUgY29kZS4gSXQgd2ls
bCByZXN1bHQgaW4gbm90aWNlYWJsZQotLy8gcGVyZm9ybWFuY2UgbG9zcy4gSGVuY2UsIHRoaXMg
c2hvdWxkIG9ubHkgYmUgZW5hYmxlIHdoZW4geW91IHdhbnQgdG8gZG8KLS8vIHNvbWUgc3RhdHMg
bG9jYXRpb24gaW4geW91ciBsb2NhbCBidWlsZC4gVGhpcyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUg
YXMgYQotLy8gY29udmVuaWVuY2UgZm9yIGNvbGxlY3RpbmcgdGhhdCBkYXRhLiBJdCBpcyBub3Qg
bWVhbnQgdG8gYmUgZW5hYmxlZCBieQotLy8gZGVmYXVsdCBvbiByZWxlYXNlIG9yIGRlYnVnIGJ1
aWxkcy4KLQotI2RlZmluZSBFTkFCTEVfU1RBQ0tfU1RBVFMgMAotCi0KLW5hbWVzcGFjZSBXVEYg
ewotCi0jaWYgIUVOQUJMRShTVEFDS19TVEFUUykgCi0KLWNsYXNzIFN0YWNrU3RhdHMgewotcHVi
bGljOgotICAgIC8vIFRoZSBDaGVja1BvaW50IGNsYXNzIGlzIGZvciBtYXJraW5nIGNoZWNrIHBv
aW50cyBjb3JyZXNwb25kaW5nCi0gICAgLy8gZWFjaCBsb2NhdGlvbiBpbiBjb2RlIHdoZXJlIGEg
c3RhY2sgcmVjdXJzaW9uIGNoZWNrIGlzIGJlaW5nIGRvbmUuCi0KLSAgICBjbGFzcyBDaGVja1Bv
aW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENoZWNrUG9pbnQoKSB7IH0KLSAgICB9OwotCi0g
ICAgY2xhc3MgUGVyVGhyZWFkU3RhdHMgewotICAgIHB1YmxpYzoKLSAgICAgICAgUGVyVGhyZWFk
U3RhdHMoKSB7IH0KLSAgICB9OwotCi0gICAgY2xhc3MgTGF5b3V0Q2hlY2tQb2ludCB7Ci0gICAg
cHVibGljOgotICAgICAgICBMYXlvdXRDaGVja1BvaW50KCkgeyB9Ci0gICAgfTsKLQotICAgIHN0
YXRpYyB2b2lkIHByb2JlKCkgeyB9Ci19OwotCi0jZWxzZSAvLyBFTkFCTEUoU1RBQ0tfU1RBVFMp
Ci0KLWNsYXNzIFN0YWNrU3RhdHMgewotcHVibGljOgotICAgIC8vIFRoZSBDaGVja1BvaW50IGNs
YXNzIGlzIGZvciBtYXJraW5nIGNoZWNrIHBvaW50cyBjb3JyZXNwb25kaW5nCi0gICAgLy8gZWFj
aCBsb2NhdGlvbiBpbiBjb2RlIHdoZXJlIGEgc3RhY2sgcmVjdXJzaW9uIGNoZWNrIGlzIGJlaW5n
IGRvbmUuCi0KLSAgICBjbGFzcyBDaGVja1BvaW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENo
ZWNrUG9pbnQoKTsKLSAgICAgICAgfkNoZWNrUG9pbnQoKTsKLSAgICBwcml2YXRlOgotICAgICAg
ICBDaGVja1BvaW50KiBtX3ByZXY7Ci0gICAgfTsKLQotICAgIGNsYXNzIFBlclRocmVhZFN0YXRz
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBlclRocmVhZFN0YXRzKCk7Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBpbnQgbV9yZWVudHJ5RGVwdGg7Ci0gICAgICAgIGNoYXIqIG1fc3RhY2tTdGFy
dDsKLSAgICAgICAgQ2hlY2tQb2ludCogbV9jdXJyZW50Q2hlY2tQb2ludDsKLQotICAgICAgICBm
cmllbmQgY2xhc3MgQ2hlY2tQb2ludDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIFN0YWNrU3RhdHM7
Ci0gICAgfTsKLQotICAgIGNsYXNzIExheW91dENoZWNrUG9pbnQgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgV1RGX0VYUE9SVF9QUklWQVRFIExheW91dENoZWNrUG9pbnQoKTsKLSAgICAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIH5MYXlvdXRDaGVja1BvaW50KCk7Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBMYXlvdXRDaGVja1BvaW50KiBtX3ByZXY7Ci0gICAgICAgIGludCBtX2RlcHRoOwotICAg
IH07Ci0KLSAgICAvLyBVc2VkIGZvciBwcm9iaW5nIHRoZSBzdGFjayBhdCBwbGFjZXMgd2hlcmUg
d2Ugc3VzcGVjdCB0byBiZSBoaWdoCi0gICAgLy8gcG9pbnRzIG9mIHN0YWNrIHVzYWdlIGJ1dCBh
cmUgTk9UIGNoZWNrIHBvaW50cyB3aGVyZSBzdGFjayByZWN1cnNpb24KLSAgICAvLyBpcyBjaGVj
a2VkLgotICAgIC8vCi0gICAgLy8gVGhlIG1vcmUgcGxhY2VzIHdoZXJlIHdlIGFkZCB0aGlzIHBy
b2JlLCB0aGUgbW9yZSBhY2N1cmF0ZSBvdXIKLSAgICAvLyBzdGF0cyBkYXRhIHdpbGwgYmUuIEhv
d2V2ZXIsIGFkZGluZyB0b28gbWFueSBwcm9iZXMgd2lsbCBhbHNvCi0gICAgLy8gcmVzdWx0IGlu
IHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIGxvc3MuIFNvLCBvbmx5IGFkZCB0aGVzZSBwcm9iZXMK
LSAgICAvLyBqdWRpY2lvdXNseSB3aGVyZSBhcHByb3ByaWF0ZS4KLSAgICBzdGF0aWMgdm9pZCBw
cm9iZSgpOwotCi1wcml2YXRlOgotICAgIC8vIENoZWNrUG9pbnQgbWFuYWdlbWVudDoKLSAgICBz
dGF0aWMgU3RhdGljTG9jayBzX3NoYXJlZE11dGV4OwotICAgIHN0YXRpYyBDaGVja1BvaW50KiBz
X3RvcENoZWNrUG9pbnQ7Ci0gICAgc3RhdGljIExheW91dENoZWNrUG9pbnQqIHNfZmlyc3RMYXlv
dXRDaGVja1BvaW50OwotICAgIHN0YXRpYyBMYXlvdXRDaGVja1BvaW50KiBzX3RvcExheW91dENo
ZWNrUG9pbnQ7Ci0KLSAgICAvLyBIaWdoIHdhdGVybWFyayBzdGF0czoKLSAgICBzdGF0aWMgaW50
IHNfbWF4Q2hlY2tQb2ludERpZmY7Ci0gICAgc3RhdGljIGludCBzX21heFN0YWNrSGVpZ2h0Owot
ICAgIHN0YXRpYyBpbnQgc19tYXhSZWVudHJ5RGVwdGg7Ci0KLSAgICBzdGF0aWMgaW50IHNfbWF4
TGF5b3V0Q2hlY2tQb2ludERpZmY7Ci0gICAgc3RhdGljIGludCBzX21heFRvdGFsTGF5b3V0Q2hl
Y2tQb2ludERpZmY7Ci0gICAgc3RhdGljIGludCBzX21heExheW91dFJlZW50cnlEZXB0aDsKLQot
ICAgIGZyaWVuZCBjbGFzcyBDaGVja1BvaW50OwotICAgIGZyaWVuZCBjbGFzcyBMYXlvdXRDaGVj
a1BvaW50OwotfTsKLQotI2VuZGlmIC8vIEVOQUJMRShTVEFDS19TVEFUUykgCi0KLX0gLy8gbmFt
ZXNwYWNlIFdURgotCi11c2luZyBXVEY6OlN0YWNrU3RhdHM7Ci0KLSNlbmRpZiAvLyBTdGFja1N0
YXRzX2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9TdGFj
a1RyYWNlLmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9TdGFja1RyYWNl
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRiMTgxYmQ3M2ExMGRiYjliZWRm
MzRiMGMxM2NkNDM3ZWI0YTZkMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvU3RhY2tUcmFjZS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Ci0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJTdGFja1RyYWNlLmgiCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgotCi12b2lkIFdURkdldEJhY2t0cmFjZSh2b2lkKiosIGludCog
c2l6ZSkKLXsKLSAgICAqc2l6ZSA9IDA7Ci19Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1BTFdBWVNf
SU5MSU5FIHNpemVfdCBTdGFja1RyYWNlOjppbnN0YW5jZVNpemUoaW50IGNhcGFjaXR5KQotewot
ICAgIEFTU0VSVChjYXBhY2l0eSA+PSAxKTsKLSAgICByZXR1cm4gc2l6ZW9mKFN0YWNrVHJhY2Up
ICsgKGNhcGFjaXR5IC0gMSkgKiBzaXplb2Yodm9pZCopOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8
U3RhY2tUcmFjZT4gU3RhY2tUcmFjZTo6Y2FwdHVyZVN0YWNrVHJhY2UoaW50IG1heEZyYW1lcywg
aW50IGZyYW1lc1RvU2tpcCkKLXsKLSAgICBtYXhGcmFtZXMgPSBzdGQ6Om1heCgxLCBtYXhGcmFt
ZXMpOwotICAgIHNpemVfdCBzaXplVG9BbGxvY2F0ZSA9IGluc3RhbmNlU2l6ZShtYXhGcmFtZXMp
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1RyYWNlPiB0cmFjZShuZXcgKE5vdE51bGwsIGZh
c3RNYWxsb2Moc2l6ZVRvQWxsb2NhdGUpKSBTdGFja1RyYWNlKCkpOwotCi0gICAgLy8gU2tpcCAy
IGFkZGl0aW9uYWwgZnJhbWVzIGkuZS4gU3RhY2tUcmFjZTo6Y2FwdHVyZVN0YWNrVHJhY2UgYW5k
IFdURkdldEJhY2t0cmFjZS4KLSAgICBmcmFtZXNUb1NraXAgKz0gMjsKLSAgICBpbnQgbnVtYmVy
T2ZGcmFtZXMgPSBtYXhGcmFtZXMgKyBmcmFtZXNUb1NraXA7Ci0KLSAgICBXVEZHZXRCYWNrdHJh
Y2UoJnRyYWNlLT5tX3NraXBwZWRGcmFtZTAsICZudW1iZXJPZkZyYW1lcyk7Ci0gICAgaWYgKG51
bWJlck9mRnJhbWVzKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mRnJhbWVzID49
IGZyYW1lc1RvU2tpcCk7Ci0gICAgICAgIHRyYWNlLT5tX3NpemUgPSBudW1iZXJPZkZyYW1lcyAt
IGZyYW1lc1RvU2tpcDsKLSAgICB9IGVsc2UKLSAgICAgICAgdHJhY2UtPm1fc2l6ZSA9IDA7Ci0K
LSAgICB0cmFjZS0+bV9jYXBhY2l0eSA9IG1heEZyYW1lczsKLQotICAgIHJldHVybiB0cmFjZTsK
LX0KLQotYXV0byBTdGFja1RyYWNlOjpkZW1hbmdsZSh2b2lkKikgLT4gc3RkOjpvcHRpb25hbDxE
ZW1hbmdsZUVudHJ5PgotewotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgU3Rh
Y2tUcmFjZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBpbmRlbnRTdHJpbmcp
IGNvbnN0Ci17Ci0gICAgY29uc3QgYXV0byogc3RhY2sgPSB0aGlzLT5zdGFjaygpOwotCi0gICAg
aWYgKCFpbmRlbnRTdHJpbmcpCi0gICAgICAgIGluZGVudFN0cmluZyA9ICIiOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgY2hhciogbWFuZ2xl
ZE5hbWUgPSBudWxscHRyOwotICAgICAgICBjb25zdCBjaGFyKiBjeGFEZW1hbmdsZWQgPSBudWxs
cHRyOwotICAgICAgICBjb25zdCBpbnQgZnJhbWVOdW1iZXIgPSBpICsgMTsKLSAgICAgICAgaWYg
KG1hbmdsZWROYW1lIHx8IGN4YURlbWFuZ2xlZCkKLSAgICAgICAgICAgIG91dC5wcmludGYoIiVz
JS0zZCAlcCAlc1xuIiwgaW5kZW50U3RyaW5nLCBmcmFtZU51bWJlciwgc3RhY2tbaV0sIGN4YURl
bWFuZ2xlZCA/IGN4YURlbWFuZ2xlZCA6IG1hbmdsZWROYW1lKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMlLTNkICVwXG4iLCBpbmRlbnRTdHJpbmcsIGZyYW1lTnVt
YmVyLCBzdGFja1tpXSk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9TdGFja1RyYWNlLmggYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvU3RhY2tUcmFjZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkMTVkNzUzNzljYzhiNWM4MDNmMWQ5NTE4OTU1ZGYyNGRkYWI0NTc3
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9TdGFja1RyYWNlLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi9TeXN0ZW1GcmVlLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBQcmludFN0
cmVhbTsKLQotY2xhc3MgU3RhY2tUcmFjZSB7Ci1wdWJsaWM6Ci0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tUcmFjZT4gY2FwdHVyZVN0YWNrVHJhY2Uo
aW50IG1heEZyYW1lcywgaW50IGZyYW1lc1RvU2tpcCA9IDApOwotCi0gICAgLy8gQm9ycm93ZWQg
c3RhY2sgdHJhY2UuCi0gICAgU3RhY2tUcmFjZSh2b2lkKiogc3RhY2ssIGludCBzaXplKQotICAg
ICAgICA6IG1fc2l6ZShzaXplKQotICAgICAgICAsIG1fY2FwYWNpdHkoMCkKLSAgICAgICAgLCBt
X2JvcnJvd2VkU3RhY2soc3RhY2spCi0gICAgeyB9Ci0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQotICAgIHZvaWQqIGNvbnN0ICogc3RhY2soKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKCFtX2NhcGFjaXR5KQotICAgICAgICAgICAgcmV0dXJuIG1fYm9ycm93ZWRT
dGFjazsKLSAgICAgICAgcmV0dXJuIG1fc3RhY2s7Ci0gICAgfQotCi0gICAgY2xhc3MgRGVtYW5n
bGVFbnRyeSB7Ci0gICAgcHVibGljOgotICAgICAgICBmcmllbmQgY2xhc3MgU3RhY2tUcmFjZTsK
LSAgICAgICAgY29uc3QgY2hhciogbWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX21hbmds
ZWROYW1lOyB9Ci0gICAgICAgIGNvbnN0IGNoYXIqIGRlbWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX2RlbWFuZ2xlZE5hbWUuZ2V0KCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIERl
bWFuZ2xlRW50cnkoY29uc3QgY2hhciogbWFuZ2xlZE5hbWUsIGNvbnN0IGNoYXIqIGRlbWFuZ2xl
ZE5hbWUpCi0gICAgICAgICAgICA6IG1fbWFuZ2xlZE5hbWUobWFuZ2xlZE5hbWUpCi0gICAgICAg
ICAgICAsIG1fZGVtYW5nbGVkTmFtZShkZW1hbmdsZWROYW1lKQotICAgICAgICB7IH0KLQotICAg
ICAgICBjb25zdCBjaGFyKiBtX21hbmdsZWROYW1lIHsgbnVsbHB0ciB9OwotICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Y29uc3QgY2hhcltdLCBTeXN0ZW1GcmVlPGNvbnN0IGNoYXJbXT4+IG1fZGVt
YW5nbGVkTmFtZTsKLSAgICB9OwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPERlbWFuZ2xlRW50cnk+IGRlbWFuZ2xlKHZvaWQqKTsKLQotICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBpbmRlbnRTdHJp
bmcgPSBudWxscHRyKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgc3RhdGljIHNpemVf
dCBpbnN0YW5jZVNpemUoaW50IGNhcGFjaXR5KTsKLQotICAgIFN0YWNrVHJhY2UoKQotICAgICAg
ICA6IG1fc2l6ZSgwKQotICAgIHsgfQotCi0gICAgLy8gV2Ugc3RydWN0dXJlIHRoZSB0b3AgZmll
bGRzIHRoaXMgd2F5IGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgc3RhY2sgY2FwdHVyZQotICAgIC8v
IGZhY2lsaXR5IHdpbGwgY2FwdHVyZSBmcm9tIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBhbmQgd2Un
bGwgbmVlZCB0byBza2lwIHRoZQotICAgIC8vIHRvcCAyIGZyYW1lIHdoaWNoIGlzIG9mIG5vIGlu
dGVyZXN0LiBTZXR0aW5nIHVwIHRoZSBmaWVsZHMgbGF5b3V0IHRoaXMgd2F5Ci0gICAgLy8gYWxs
b3dzIHVzIHRvIGNhcHR1cmUgdGhlIHN0YWNrIGluIHBsYWNlIGFuZCBtaW5pbWl6ZSBzcGFjZSB3
YXN0YWdlLgotICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIGludCBt
X3NpemU7Ci0gICAgICAgICAgICBpbnQgbV9jYXBhY2l0eTsKLSAgICAgICAgfTsKLSAgICAgICAg
c3RydWN0IHsKLSAgICAgICAgICAgIHZvaWQqIG1fc2tpcHBlZEZyYW1lMDsKLSAgICAgICAgICAg
IHZvaWQqIG1fc2tpcHBlZEZyYW1lMTsKLSAgICAgICAgfTsKLSAgICB9OwotICAgIHVuaW9uIHsK
LSAgICAgICAgdm9pZCoqIG1fYm9ycm93ZWRTdGFjazsKLSAgICAgICAgdm9pZCogbV9zdGFja1sx
XTsKLSAgICB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6U3RhY2tU
cmFjZTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9TdGRM
aWJFeHRyYXMuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9TdGRMaWJFeHRy
YXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNiMDNlNTM2NjRkN2NlZDQ2ZDc0
MGM5MDdmYThlY2UzMmFmMWU2Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvU3RkTGliRXh0cmFz
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBXVEZfU3RkTGliRXh0
cmFzX2gKLSNkZWZpbmUgV1RGX1N0ZExpYkV4dHJhc19oCi0KLSNpbmNsdWRlIDxjc3RyaW5nPgot
I2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1
ZGUgPHd0Zi9Db21waWxlci5oPgotCi0vLyBUaGlzIHdhcyB1c2VkIHRvIGRlY2xhcmUgYW5kIGRl
ZmluZSBhIHN0YXRpYyBsb2NhbCB2YXJpYWJsZSAoc3RhdGljIFQ7KSBzbyB0aGF0Ci0vLyAgaXQg
d2FzIGxlYWtlZCBzbyB0aGF0IGl0cyBkZXN0cnVjdG9ycyB3ZXJlIG5vdCBjYWxsZWQgYXQgZXhp
dC4KLS8vIE5ld2x5IHdyaXR0ZW4gY29kZSBzaG91bGQgdXNlIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxUPiBpbnN0ZWFkLgotI2lmbmRlZiBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwKLSNk
ZWZpbmUgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKHR5cGUsIG5hbWUsIGFyZ3VtZW50
cykgXAotICAgIHN0YXRpYyB0eXBlJiBuYW1lID0gKm5ldyB0eXBlIGFyZ3VtZW50cwotI2VuZGlm
Ci0KLS8vIFVzZSB0aGlzIG1hY3JvIHRvIGRlY2xhcmUgYW5kIGRlZmluZSBhIGRlYnVnLW9ubHkg
Z2xvYmFsIHZhcmlhYmxlIHRoYXQgbWF5IGhhdmUgYQotLy8gbm9uLXRyaXZpYWwgY29uc3RydWN0
b3IgYW5kIGRlc3RydWN0b3IuIFdoZW4gYnVpbGRpbmcgd2l0aCBjbGFuZywgdGhpcyB3aWxsIHN1
cHByZXNzCi0vLyB3YXJuaW5ncyBhYm91dCBnbG9iYWwgY29uc3RydWN0b3JzIGFuZCBleGl0LXRp
bWUgZGVzdHJ1Y3RvcnMuCi0jZGVmaW5lIERFRklORV9HTE9CQUxfRk9SX0xPR0dJTkcodHlwZSwg
bmFtZSwgYXJndW1lbnRzKSBcCi0gICAgX1ByYWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBwdXNoIikg
XAotICAgIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XZ2xvYmFsLWNvbnN0
cnVjdG9yc1wiIikgXAotICAgIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1X
ZXhpdC10aW1lLWRlc3RydWN0b3JzXCIiKSBcCi0gICAgc3RhdGljIHR5cGUgbmFtZSBhcmd1bWVu
dHM7IFwKLSAgICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIHBvcCIpCi0KLSNpZm5kZWYgTkRF
QlVHCi0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jZGVmaW5lIERFRklORV9ERUJVR19PTkxZX0dMT0JB
TCh0eXBlLCBuYW1lLCBhcmd1bWVudHMpIERFRklORV9HTE9CQUxfRk9SX0xPR0dJTkcodHlwZSwg
bmFtZSwgYXJndW1lbnRzKQotI2Vsc2UKLSNkZWZpbmUgREVGSU5FX0RFQlVHX09OTFlfR0xPQkFM
KHR5cGUsIG5hbWUsIGFyZ3VtZW50cykgXAotICAgIHN0YXRpYyB0eXBlIG5hbWUgYXJndW1lbnRz
OwotI2VuZGlmIC8vIENPTVBJTEVSKENMQU5HKQotI2Vsc2UKLSNkZWZpbmUgREVGSU5FX0RFQlVH
X09OTFlfR0xPQkFMKHR5cGUsIG5hbWUsIGFyZ3VtZW50cykKLSNlbmRpZiAvLyBOREVCVUcKLQot
Ly8gT0JKRUNUX09GRlNFVE9GOiBMaWtlIHRoZSBDKysgb2Zmc2V0b2YgbWFjcm8sIGJ1dCB5b3Ug
Y2FuIHVzZSBpdCB3aXRoIGNsYXNzZXMuCi0vLyBUaGUgbWFnaWMgbnVtYmVyIDB4NDAwMCBpcyBp
bnNpZ25pZmljYW50LiBXZSB1c2UgaXQgdG8gYXZvaWQgdXNpbmcgTlVMTCwgc2luY2UKLS8vIE5V
TEwgY2FuIGNhdXNlIGNvbXBpbGVyIHByb2JsZW1zLCBlc3BlY2lhbGx5IGluIGNhc2VzIG9mIG11
bHRpcGxlIGluaGVyaXRhbmNlLgotI2RlZmluZSBPQkpFQ1RfT0ZGU0VUT0YoY2xhc3MsIGZpZWxk
KSAocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KCYocmVpbnRlcnByZXRfY2FzdDxjbGFzcyo+
KDB4NDAwMCktPmZpZWxkKSkgLSAweDQwMDApCi0KLSNkZWZpbmUgQ0FTVF9PRkZTRVQoZnJvbSwg
dG8pIChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhdGljX2Nhc3Q8dG8+KChyZWludGVy
cHJldF9jYXN0PGZyb20+KDB4NDAwMCkpKSkgLSAweDQwMDApCi0KLS8vIFNUUklOR0laRTogQ2Fu
IGNvbnZlcnQgYW55IHZhbHVlIHRvIHF1b3RlZCBzdHJpbmcsIGV2ZW4gZXhwYW5kYWJsZSBtYWNy
b3MKLSNkZWZpbmUgU1RSSU5HSVpFKGV4cCkgI2V4cAotI2RlZmluZSBTVFJJTkdJWkVfVkFMVUVf
T0YoZXhwKSBTVFJJTkdJWkUoZXhwKQotCi0vLyBXVEZfQ09OQ0FUOiBjb25jYXRlbmF0ZSB0d28g
c3ltYm9scyBpbnRvIG9uZSwgZXZlbiBleHBhbmRhYmxlIG1hY3JvcwotI2RlZmluZSBXVEZfQ09O
Q0FUX0lOVEVSTkFMX0RPTlRfVVNFKGEsIGIpIGEgIyMgYgotI2RlZmluZSBXVEZfQ09OQ0FUKGEs
IGIpIFdURl9DT05DQVRfSU5URVJOQUxfRE9OVF9VU0UoYSwgYikKLQotCi0vKgotICogVGhlIHJl
aW50ZXJwcmV0X2Nhc3Q8VHlwZTEqPihbcG9pbnRlciB0byBUeXBlMl0pIGV4cHJlc3Npb25zIC0g
d2hlcmUKLSAqIHNpemVvZihUeXBlMSkgPiBzaXplb2YoVHlwZTIpIC0gY2F1c2UgdGhlIGZvbGxv
d2luZyB3YXJuaW5nIG9uIEFSTSB3aXRoIEdDQzoKLSAqIGluY3JlYXNlcyByZXF1aXJlZCBhbGln
bm1lbnQgb2YgdGFyZ2V0IHR5cGUuCi0gKgotICogQW4gaW1wbGljaXQgb3IgYW4gZXh0cmEgc3Rh
dGljX2Nhc3Q8dm9pZCo+IGJ5cGFzc2VzIHRoZSB3YXJuaW5nLgotICogRm9yIG1vcmUgaW5mbyBz
ZWUgdGhlIGZvbGxvd2luZyBidWd6aWxsYSBlbnRyaWVzOgotICogLSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzgwNDUKLSAqIC0gaHR0cDovL2djYy5nbnUub3JnL2J1
Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzk3NgotICovCi0jaWYgKENQVShBUk0pIHx8IENQVShN
SVBTKSkgJiYgQ09NUElMRVIoR0NDX09SX0NMQU5HKQotdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
LWlubGluZSBib29sIGlzUG9pbnRlclR5cGVBbGlnbm1lbnRPa2F5KFR5cGUqIHB0cikKLXsKLSAg
ICByZXR1cm4gIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihwdHIpICUgX19hbGlnbm9mX18o
VHlwZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlUHRyPgotaW5saW5lIFR5cGVQdHIg
cmVpbnRlcnByZXRfY2FzdF9wdHIodm9pZCogcHRyKQotewotICAgIEFTU0VSVChpc1BvaW50ZXJU
eXBlQWxpZ25tZW50T2theShyZWludGVycHJldF9jYXN0PFR5cGVQdHI+KHB0cikpKTsKLSAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUeXBlUHRyPihwdHIpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUeXBlUHRyPgotaW5saW5lIFR5cGVQdHIgcmVpbnRlcnByZXRfY2FzdF9wdHIoY29uc3Qg
dm9pZCogcHRyKQotewotICAgIEFTU0VSVChpc1BvaW50ZXJUeXBlQWxpZ25tZW50T2theShyZWlu
dGVycHJldF9jYXN0PFR5cGVQdHI+KHB0cikpKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxUeXBlUHRyPihwdHIpOwotfQotI2Vsc2UKLXRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci1pbmxp
bmUgYm9vbCBpc1BvaW50ZXJUeXBlQWxpZ25tZW50T2theShUeXBlKikKLXsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLSNkZWZpbmUgcmVpbnRlcnByZXRfY2FzdF9wdHIgcmVpbnRlcnByZXRfY2FzdAot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXVEYgewotCi1lbnVtIENoZWNrTW92ZVBhcmFtZXRlclRhZyB7
IENoZWNrTW92ZVBhcmFtZXRlciB9OwotCi1zdGF0aWMgY29uc3Qgc2l6ZV90IEtCID0gMTAyNDsK
LXN0YXRpYyBjb25zdCBzaXplX3QgTUIgPSAxMDI0ICogMTAyNDsKLXN0YXRpYyBjb25zdCBzaXpl
X3QgR0IgPSAxMDI0ICogMTAyNCAqIDEwMjQ7Ci0KLWlubGluZSBib29sIGlzUG9pbnRlckFsaWdu
ZWQodm9pZCogcCkKLXsKLSAgICByZXR1cm4gISgoaW50cHRyX3QpKHApICYgKHNpemVvZihjaGFy
KikgLSAxKSk7Ci19Ci0KLWlubGluZSBib29sIGlzOEJ5dGVBbGlnbmVkKHZvaWQqIHApCi17Ci0g
ICAgcmV0dXJuICEoKHVpbnRwdHJfdCkocCkgJiAoc2l6ZW9mKGRvdWJsZSkgLSAxKSk7Ci19Ci0K
LS8qCi0gKiBDKysncyBpZGVhIG9mIGEgcmVpbnRlcnByZXRfY2FzdCBsYWNrcyBzdWZmaWNpZW50
IGNvam9uZXMuCi0gKi8KLXRlbXBsYXRlPHR5cGVuYW1lIFRvVHlwZSwgdHlwZW5hbWUgRnJvbVR5
cGU+Ci1pbmxpbmUgVG9UeXBlIGJpdHdpc2VfY2FzdChGcm9tVHlwZSBmcm9tKQotewotICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKEZyb21UeXBlKSA9PSBzaXplb2YoVG9UeXBlKSwgImJpdHdpc2Vf
Y2FzdCBzaXplIG9mIEZyb21UeXBlIGFuZCBUb1R5cGUgbXVzdCBiZSBlcXVhbCEiKTsKLSNpZiBD
T01QSUxFUl9TVVBQT1JUUyhCVUlMVElOX0lTX1RSSVZJQUxMWV9DT1BZQUJMRSkKLSAgICAvLyBO
b3QgYWxsIHJlY2VudCBTVEwgaW1wbGVtZW50YXRpb25zIHN1cHBvcnQgdGhlIHN0ZDo6aXNfdHJp
dmlhbGx5X2NvcHlhYmxlIHR5cGUgdHJhaXQuIFdvcmsgYXJvdW5kIHRoaXMgYnkgb25seSBjaGVj
a2luZyBvbiB0b29sY2hhaW5zIHdoaWNoIGhhdmUgdGhlIGVxdWl2YWxlbnQgY29tcGlsZXIgaW50
cmluc2ljLgotICAgIHN0YXRpY19hc3NlcnQoX19pc190cml2aWFsbHlfY29weWFibGUoVG9UeXBl
KSwgImJpdHdpc2VfY2FzdCBvZiBub24tdHJpdmlhbGx5LWNvcHlhYmxlIHR5cGUhIik7Ci0gICAg
c3RhdGljX2Fzc2VydChfX2lzX3RyaXZpYWxseV9jb3B5YWJsZShGcm9tVHlwZSksICJiaXR3aXNl
X2Nhc3Qgb2Ygbm9uLXRyaXZpYWxseS1jb3B5YWJsZSB0eXBlISIpOwotI2VuZGlmCi0gICAgdHlw
ZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VG9UeXBlPjo6dHlwZSB0byB7IH07Ci0gICAgc3RkOjpt
ZW1jcHkoJnRvLCAmZnJvbSwgc2l6ZW9mKHRvKSk7Ci0gICAgcmV0dXJuIHRvOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUb1R5cGUsIHR5cGVuYW1lIEZyb21UeXBlPgotaW5saW5lIFRvVHlwZSBz
YWZlQ2FzdChGcm9tVHlwZSB2YWx1ZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChpc0luQm91bmRz
PFRvVHlwZT4odmFsdWUpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG9UeXBlPih2YWx1ZSk7
Ci19Ci0KLS8vIFJldHVybnMgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0IGluICdi
aXRzJy4KLWlubGluZSBzaXplX3QgYml0Q291bnQodW5zaWduZWQgYml0cykKLXsKLSAgICBiaXRz
ID0gYml0cyAtICgoYml0cyA+PiAxKSAmIDB4NTU1NTU1NTUpOwotICAgIGJpdHMgPSAoYml0cyAm
IDB4MzMzMzMzMzMpICsgKChiaXRzID4+IDIpICYgMHgzMzMzMzMzMyk7Ci0gICAgcmV0dXJuICgo
KGJpdHMgKyAoYml0cyA+PiA0KSkgJiAweEYwRjBGMEYpICogMHgxMDEwMTAxKSA+PiAyNDsKLX0K
LQotaW5saW5lIHNpemVfdCBiaXRDb3VudCh1aW50NjRfdCBiaXRzKQotewotICAgIHJldHVybiBi
aXRDb3VudChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYml0cykpICsgYml0Q291bnQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGJpdHMgPj4gMzIpKTsKLX0KLQotLy8gTWFjcm8gdGhhdCByZXR1cm5zIGEg
Y29tcGlsZSB0aW1lIGNvbnN0YW50IHdpdGggdGhlIGxlbmd0aCBvZiBhbiBhcnJheSwgYnV0IGdp
dmVzIGFuIGVycm9yIGlmIHBhc3NlZCBhIG5vbi1hcnJheS4KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBTaXplPiBjaGFyICgmQXJyYXlMZW5ndGhIZWxwZXJGdW5jdGlvbihUICgmKVtTaXpl
XSkpW1NpemVdOwotLy8gR0NDIG5lZWRzIHNvbWUgaGVscCB0byBkZWR1Y2UgYSAwIGxlbmd0aCBh
cnJheS4KLSNpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
aGFyICgmQXJyYXlMZW5ndGhIZWxwZXJGdW5jdGlvbihUICgmKVswXSkpWzBdOwotI2VuZGlmCi0j
ZGVmaW5lIFdURl9BUlJBWV9MRU5HVEgoYXJyYXkpIHNpemVvZig6OldURjo6QXJyYXlMZW5ndGhI
ZWxwZXJGdW5jdGlvbihhcnJheSkpCi0KLUFMV0FZU19JTkxJTkUgY29uc3RleHByIHNpemVfdCBy
b3VuZFVwVG9NdWx0aXBsZU9mSW1wbDAoc2l6ZV90IHJlbWFpbmRlck1hc2ssIHNpemVfdCB4KQot
ewotICAgIHJldHVybiAoeCArIHJlbWFpbmRlck1hc2spICYgfnJlbWFpbmRlck1hc2s7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgY29uc3RleHByIHNpemVfdCByb3VuZFVwVG9NdWx0aXBsZU9mSW1wbChz
aXplX3QgZGl2aXNvciwgc2l6ZV90IHgpCi17Ci0gICAgcmV0dXJuIHJvdW5kVXBUb011bHRpcGxl
T2ZJbXBsMChkaXZpc29yIC0gMSwgeCk7Ci19Ci0KLS8vIEVmZmljaWVudCBpbXBsZW1lbnRhdGlv
biB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiBwb3dlcnMgb2YgdHdvLgotaW5saW5lIHNpemVfdCBy
b3VuZFVwVG9NdWx0aXBsZU9mKHNpemVfdCBkaXZpc29yLCBzaXplX3QgeCkKLXsKLSAgICBBU1NF
UlQoZGl2aXNvciAmJiAhKGRpdmlzb3IgJiAoZGl2aXNvciAtIDEpKSk7Ci0gICAgcmV0dXJuIHJv
dW5kVXBUb011bHRpcGxlT2ZJbXBsKGRpdmlzb3IsIHgpOwotfQotCi10ZW1wbGF0ZTxzaXplX3Qg
ZGl2aXNvcj4gaW5saW5lIGNvbnN0ZXhwciBzaXplX3Qgcm91bmRVcFRvTXVsdGlwbGVPZihzaXpl
X3QgeCkKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KGRpdmlzb3IgJiYgIShkaXZpc29yICYgKGRpdmlz
b3IgLSAxKSksICJkaXZpc29yIG11c3QgYmUgYSBwb3dlciBvZiB0d28hIik7Ci0gICAgcmV0dXJu
IHJvdW5kVXBUb011bHRpcGxlT2ZJbXBsKGRpdmlzb3IsIHgpOwotfQotCi1lbnVtIEJpbmFyeVNl
YXJjaE1vZGUgewotICAgIEtleU11c3RCZVByZXNlbnRJbkFycmF5LAotICAgIEtleU1pZ2h0Tm90
QmVQcmVzZW50SW5BcnJheSwKLSAgICBSZXR1cm5BZGphY2VudEVsZW1lbnRJZktleUlzTm90UHJl
c2VudAotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUg
S2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5LCBCaW5hcnlT
ZWFyY2hNb2RlIG1vZGU+Ci1pbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoSW1w
bChBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4dHJh
Y3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCi17Ci0gICAgc2l6ZV90IG9mZnNldCA9
IDA7Ci0gICAgd2hpbGUgKHNpemUgPiAxKSB7Ci0gICAgICAgIHNpemVfdCBwb3MgPSAoc2l6ZSAt
IDEpID4+IDE7Ci0gICAgICAgIEtleVR5cGUgdmFsID0gZXh0cmFjdEtleSgmYXJyYXlbb2Zmc2V0
ICsgcG9zXSk7Ci0gICAgICAgIAotICAgICAgICBpZiAodmFsID09IGtleSkKLSAgICAgICAgICAg
IHJldHVybiAmYXJyYXlbb2Zmc2V0ICsgcG9zXTsKLSAgICAgICAgLy8gVGhlIGl0ZW0gd2UgYXJl
IGxvb2tpbmcgZm9yIGlzIHNtYWxsZXIgdGhhbiB0aGUgaXRlbSBiZWluZyBjaGVjazsgcmVkdWNl
IHRoZSB2YWx1ZSBvZiAnc2l6ZScsCi0gICAgICAgIC8vIGNob3BwaW5nIG9mZiB0aGUgcmlnaHQg
aGFuZCBoYWxmIG9mIHRoZSBhcnJheS4KLSAgICAgICAgaWYgKGtleSA8IHZhbCkKLSAgICAgICAg
ICAgIHNpemUgPSBwb3M7Ci0gICAgICAgIC8vIERpc2NhcmQgYWxsIHZhbHVlcyBpbiB0aGUgbGVm
dCBoYW5kIGhhbGYgb2YgdGhlIGFycmF5LCB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBpdGVtIGF0
IHBvcy4KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzaXplIC09IChwb3MgKyAxKTsKLSAg
ICAgICAgICAgIG9mZnNldCArPSAocG9zICsgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NF
UlQobW9kZSAhPSBLZXlNdXN0QmVQcmVzZW50SW5BcnJheSB8fCBzaXplKTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKG1vZGUgPT0gS2V5TWlnaHROb3RCZVByZXNlbnRJbkFycmF5ICYmICFzaXplKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBBcnJheUVsZW1lbnRUeXBlKiByZXN1bHQgPSAm
YXJyYXlbb2Zmc2V0XTsKLQotICAgIGlmIChtb2RlID09IEtleU1pZ2h0Tm90QmVQcmVzZW50SW5B
cnJheSAmJiBrZXkgIT0gZXh0cmFjdEtleShyZXN1bHQpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIGlmIChtb2RlID09IEtleU11c3RCZVByZXNlbnRJbkFycmF5KSB7Ci0gICAgICAgIEFTU0VS
VChzaXplID09IDEpOwotICAgICAgICBBU1NFUlQoa2V5ID09IGV4dHJhY3RLZXkocmVzdWx0KSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gSWYgdGhlIGVsZW1lbnQgaXMg
bm90IGZvdW5kLCBjcmFzaCBpZiBhc3NlcnRzIGFyZSBlbmFibGVkLCBhbmQgYmVoYXZlIGxpa2Ug
YXBwcm94aW1hdGVCaW5hcnlTZWFyY2ggaW4gcmVsZWFzZSBidWlsZHMuCi10ZW1wbGF0ZTx0eXBl
bmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBBcnJheVR5
cGUsIHR5cGVuYW1lIEV4dHJhY3RLZXk+Ci1pbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYmluYXJ5
U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgRXh0cmFj
dEtleSBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQotewotICAgIHJldHVybiBiaW5hcnlTZWFy
Y2hJbXBsPEFycmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwg
S2V5TXVzdEJlUHJlc2VudEluQXJyYXk+KGFycmF5LCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOwot
fQotCi0vLyBSZXR1cm4gemVybyBpZiB0aGUgZWxlbWVudCBpcyBub3QgZm91bmQuCi10ZW1wbGF0
ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBB
cnJheVR5cGUsIHR5cGVuYW1lIEV4dHJhY3RLZXk+Ci1pbmxpbmUgQXJyYXlFbGVtZW50VHlwZSog
dHJ5QmluYXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtl
eSwgRXh0cmFjdEtleSBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQotewotICAgIHJldHVybiBi
aW5hcnlTZWFyY2hJbXBsPEFycmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0
cmFjdEtleSwgS2V5TWlnaHROb3RCZVByZXNlbnRJbkFycmF5PihhcnJheSwgc2l6ZSwga2V5LCBl
eHRyYWN0S2V5KTsKLX0KLQotLy8gUmV0dXJuIHRoZSBlbGVtZW50IHRoYXQgaXMgZWl0aGVyIHRv
IHRoZSBsZWZ0LCBvciB0aGUgcmlnaHQsIG9mIHdoZXJlIHRoZSBlbGVtZW50IHdvdWxkIGhhdmUg
YmVlbiBmb3VuZC4KLXRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1l
IEtleVR5cGUsIHR5cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4KLWlubGlu
ZSBBcnJheUVsZW1lbnRUeXBlKiBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaChBcnJheVR5cGUmIGFy
cmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEV4dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4
dHJhY3RLZXkoKSkKLXsKLSAgICByZXR1cm4gYmluYXJ5U2VhcmNoSW1wbDxBcnJheUVsZW1lbnRU
eXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXksIFJldHVybkFkamFjZW50RWxlbWVu
dElmS2V5SXNOb3RQcmVzZW50PihhcnJheSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5KTsKLX0KLQot
Ly8gVmFyaWFudHMgb2YgdGhlIGFib3ZlIHRoYXQgdXNlIGNvbnN0LgotdGVtcGxhdGU8dHlwZW5h
bWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBl
LCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGJpbmFyeVNl
YXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEV4
dHJhY3RLZXkgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKLXsKLSAgICByZXR1cm4gYmluYXJ5
U2VhcmNoSW1wbDxBcnJheUVsZW1lbnRUeXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RL
ZXksIEtleU11c3RCZVByZXNlbnRJbkFycmF5Pihjb25zdF9jYXN0PEFycmF5VHlwZSY+KGFycmF5
KSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5KTsKLX0KLXRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxl
bWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUg
RXh0cmFjdEtleT4KLWlubGluZSBBcnJheUVsZW1lbnRUeXBlKiB0cnlCaW5hcnlTZWFyY2goY29u
c3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBFeHRyYWN0S2V5
IGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCi17Ci0gICAgcmV0dXJuIGJpbmFyeVNlYXJjaElt
cGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBLZXlN
aWdodE5vdEJlUHJlc2VudEluQXJyYXk+KGNvbnN0X2Nhc3Q8QXJyYXlUeXBlJj4oYXJyYXkpLCBz
aXplLCBrZXksIGV4dHJhY3RLZXkpOwotfQotdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50
VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRy
YWN0S2V5PgotaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGFwcHJveGltYXRlQmluYXJ5U2VhcmNo
KGNvbnN0IEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgRXh0cmFj
dEtleSBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQotewotICAgIHJldHVybiBiaW5hcnlTZWFy
Y2hJbXBsPEFycmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwg
UmV0dXJuQWRqYWNlbnRFbGVtZW50SWZLZXlJc05vdFByZXNlbnQ+KGNvbnN0X2Nhc3Q8QXJyYXlU
eXBlJj4oYXJyYXkpLCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBWZWN0b3JUeXBlLCB0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSB2b2lkIGluc2Vy
dEludG9Cb3VuZGVkVmVjdG9yKFZlY3RvclR5cGUmIHZlY3Rvciwgc2l6ZV90IHNpemUsIGNvbnN0
IEVsZW1lbnRUeXBlJiBlbGVtZW50LCBzaXplX3QgaW5kZXgpCi17Ci0gICAgZm9yIChzaXplX3Qg
aSA9IHNpemU7IGktLSA+IGluZGV4ICsgMTspCi0gICAgICAgIHZlY3RvcltpXSA9IHZlY3Rvcltp
IC0gMV07Ci0gICAgdmVjdG9yW2luZGV4XSA9IGVsZW1lbnQ7Ci19Ci0KLS8vIFRoaXMgaXMgaGVy
ZSBpbnN0ZWFkIG9mIENvbXBpbGF0aW9uVGhyZWFkLmggdG8gcHJldmVudCB0aGF0IGhlYWRlciBm
cm9tIGJlaW5nIGluY2x1ZGVkCi0vLyBldmVyeXdoZXJlLiBUaGUgZmFjdCB0aGF0IHRoaXMgbWV0
aG9kLCBhbmQgdGhhdCBoZWFkZXIsIGV4aXN0IG91dHNpZGUgb2YgSlNDIGlzIGEgYnVnLgotLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTgxNQotV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgaXNDb21waWxhdGlvblRocmVhZCgpOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgotYm9vbCBpc1N0YXRlbGVzc0xhbWJkYSgpCi17Ci0gICAgcmV0dXJuIHN0ZDo6aXNf
ZW1wdHk8RnVuYz46OnZhbHVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0
eXBlbmFtZSBGdW5jLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgotUmVzdWx0VHlwZSBjYWxs
U3RhdGVsZXNzTGFtYmRhKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpCi17Ci0gICAgdWlu
dDY0X3QgZGF0YVsoc2l6ZW9mKEZ1bmMpICsgc2l6ZW9mKHVpbnQ2NF90KSAtIDEpIC8gc2l6ZW9m
KHVpbnQ2NF90KV07Ci0gICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7Ci0gICAgcmV0
dXJuICgqYml0d2lzZV9jYXN0PEZ1bmMqPihkYXRhKSkoc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlw
ZXM+KGFyZ3VtZW50cykuLi4pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PgotYm9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQotewotICAgIGlmIChsZWZ0ID09
IHJpZ2h0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbGVmdCA9IHJpZ2h0OwotICAgIHJl
dHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYm9vbCBmaW5kQml0SW5Xb3Jk
KFQgd29yZCwgc2l6ZV90JiBpbmRleCwgc2l6ZV90IGVuZEluZGV4LCBib29sIHZhbHVlKQotewot
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUsICJUeXBlIHVzZWQg
aW4gZmluZEJpdEluV29yZCBtdXN0IGJlIHVuc2lnbmVkIik7Ci0gICAgCi0gICAgd29yZCA+Pj0g
aW5kZXg7Ci0gICAgCi0gICAgd2hpbGUgKGluZGV4IDwgZW5kSW5kZXgpIHsKLSAgICAgICAgaWYg
KCh3b3JkICYgMSkgPT0gc3RhdGljX2Nhc3Q8VD4odmFsdWUpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGluZGV4Kys7Ci0gICAgICAgIHdvcmQgPj49IDE7Ci0gICAgfQotICAg
IAotICAgIGluZGV4ID0gZW5kSW5kZXg7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBWaXNp
dG9yIGFkYXB0ZWQgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI1MzM4
Nzk1L2lzLXRoZXJlLWEtbmFtZS1mb3ItdGhpcy10dXBsZS1jcmVhdGlvbi1pZGlvbQotCi10ZW1w
bGF0ZSA8Y2xhc3MgQSwgY2xhc3MuLi4gQj4KLXN0cnVjdCBWaXNpdG9yIDogVmlzaXRvcjxBPiwg
VmlzaXRvcjxCLi4uPiB7Ci0gICAgVmlzaXRvcihBIGEsIEIuLi4gYikKLSAgICAgICAgOiBWaXNp
dG9yPEE+KGEpCi0gICAgICAgICwgVmlzaXRvcjxCLi4uPihiLi4uKQotICAgIHsKLSAgICB9Ci0K
LSAgICB1c2luZyBWaXNpdG9yPEE+OjpvcGVyYXRvciAoKTsKLSAgICB1c2luZyBWaXNpdG9yPEIu
Li4+OjpvcGVyYXRvciAoKTsKLX07Ci0gIAotdGVtcGxhdGUgPGNsYXNzIEE+Ci1zdHJ1Y3QgVmlz
aXRvcjxBPiA6IEEgewotICAgIFZpc2l0b3IoQSBhKQotICAgICAgICA6IEEoYSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgdXNpbmcgQTo6b3BlcmF0b3IoKTsKLX07Ci0gCi10ZW1wbGF0ZSA8Y2xhc3Mu
Li4gRj4KLVZpc2l0b3I8Ri4uLj4gbWFrZVZpc2l0b3IoRi4uLiBmKQotewotICAgIHJldHVybiBW
aXNpdG9yPEYuLi4+KGYuLi4pOwotfQotCi1uYW1lc3BhY2UgRGV0YWlsCi17Ci0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lLCB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IGNsYXNzPgotICAgIHN0cnVjdCBJ
c1RlbXBsYXRlXyA6IHN0ZDo6ZmFsc2VfdHlwZQotICAgIHsKLSAgICB9OwotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lLi4uIFRzLCB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IGNsYXNzIEM+Ci0gICAg
c3RydWN0IElzVGVtcGxhdGVfPEM8VHMuLi4+LCBDPiA6IHN0ZDo6dHJ1ZV90eXBlCi0gICAgewot
ICAgIH07Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+
IGNsYXNzIFRlbXBsYXRlPgotc3RydWN0IElzVGVtcGxhdGUgOiBwdWJsaWMgc3RkOjppbnRlZ3Jh
bF9jb25zdGFudDxib29sLCBEZXRhaWw6OklzVGVtcGxhdGVfPFQsIFRlbXBsYXRlPjo6dmFsdWU+
IHt9OwotCi1uYW1lc3BhY2UgRGV0YWlsCi17Ci0gICAgdGVtcGxhdGUgPHRlbXBsYXRlIDx0eXBl
bmFtZS4uLj4gY2xhc3MgQmFzZSwgdHlwZW5hbWUgRGVyaXZlZD4KLSAgICBzdHJ1Y3QgSXNCYXNl
T2ZUZW1wbGF0ZUltcGwKLSAgICB7Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdz
PgotICAgICAgICBzdGF0aWMgc3RkOjp0cnVlX3R5cGUgdGVzdChCYXNlPEFyZ3MuLi4+Kik7Ci0g
ICAgICAgIHN0YXRpYyBzdGQ6OmZhbHNlX3R5cGUgdGVzdCh2b2lkKik7Ci0KLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBjb25zdCBib29sIHZhbHVlID0gZGVjbHR5cGUodGVzdChzdGQ6OmRlY2x2
YWw8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY3Y8RGVyaXZlZD46OnR5cGUqPigpKSk6OnZhbHVlOwot
ICAgIH07Ci19Ci0KLXRlbXBsYXRlIDx0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IGNsYXNzIEJhc2Us
IHR5cGVuYW1lIERlcml2ZWQ+Ci1zdHJ1Y3QgSXNCYXNlT2ZUZW1wbGF0ZSA6IHB1YmxpYyBzdGQ6
OmludGVncmFsX2NvbnN0YW50PGJvb2wsIERldGFpbDo6SXNCYXNlT2ZUZW1wbGF0ZUltcGw8QmFz
ZSwgRGVyaXZlZD46OnZhbHVlPiB7fTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdHJ1Y3QgUmVt
b3ZlQ1ZBbmRSZWZlcmVuY2UgIHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2N2
PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZT46OnR5cGUgdHlwZTsKLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZUxlZnQsIHR5cGVuYW1lIEl0ZXJhdG9y
VHlwZVJpZ2h0LCB0eXBlbmFtZSBJdGVyYXRvclR5cGVEc3Q+Ci1JdGVyYXRvclR5cGVEc3QgbWVy
Z2VEZWR1cGxpY2F0ZWRTb3J0ZWQoSXRlcmF0b3JUeXBlTGVmdCBsZWZ0QmVnaW4sIEl0ZXJhdG9y
VHlwZUxlZnQgbGVmdEVuZCwgSXRlcmF0b3JUeXBlUmlnaHQgcmlnaHRCZWdpbiwgSXRlcmF0b3JU
eXBlUmlnaHQgcmlnaHRFbmQsIEl0ZXJhdG9yVHlwZURzdCBkc3RCZWdpbikKLXsKLSAgICBJdGVy
YXRvclR5cGVMZWZ0IGxlZnRJdGVyID0gbGVmdEJlZ2luOwotICAgIEl0ZXJhdG9yVHlwZVJpZ2h0
IHJpZ2h0SXRlciA9IHJpZ2h0QmVnaW47Ci0gICAgSXRlcmF0b3JUeXBlRHN0IGRzdEl0ZXIgPSBk
c3RCZWdpbjsKLSAgICAKLSAgICBpZiAobGVmdEl0ZXIgPCBsZWZ0RW5kICYmIHJpZ2h0SXRlciA8
IHJpZ2h0RW5kKSB7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIGF1dG8gbGVmdCA9
ICpsZWZ0SXRlcjsKLSAgICAgICAgICAgIGF1dG8gcmlnaHQgPSAqcmlnaHRJdGVyOwotICAgICAg
ICAgICAgaWYgKGxlZnQgPCByaWdodCkgewotICAgICAgICAgICAgICAgICpkc3RJdGVyKysgPSBs
ZWZ0OwotICAgICAgICAgICAgICAgIGxlZnRJdGVyKys7Ci0gICAgICAgICAgICAgICAgaWYgKGxl
ZnRJdGVyID49IGxlZnRFbmQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChsZWZ0ID09IHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgKmRzdEl0ZXIr
KyA9IGxlZnQ7Ci0gICAgICAgICAgICAgICAgbGVmdEl0ZXIrKzsKLSAgICAgICAgICAgICAgICBy
aWdodEl0ZXIrKzsKLSAgICAgICAgICAgICAgICBpZiAobGVmdEl0ZXIgPj0gbGVmdEVuZCB8fCBy
aWdodEl0ZXIgPj0gcmlnaHRFbmQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAqZHN0SXRlcisrID0gcmlnaHQ7Ci0gICAg
ICAgICAgICAgICAgcmlnaHRJdGVyKys7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0SXRlciA+
PSByaWdodEVuZCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgd2hpbGUgKGxlZnRJdGVyIDwgbGVmdEVuZCkKLSAg
ICAgICAgKmRzdEl0ZXIrKyA9ICpsZWZ0SXRlcisrOwotICAgIHdoaWxlIChyaWdodEl0ZXIgPCBy
aWdodEVuZCkKLSAgICAgICAgKmRzdEl0ZXIrKyA9ICpyaWdodEl0ZXIrKzsKLSAgICAKLSAgICBy
ZXR1cm4gZHN0SXRlcjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLS8vIFRoaXMgdmVyc2lv
biBvZiBwbGFjZW1lbnQgbmV3IG9taXRzIGEgMCBjaGVjay4KLWVudW0gTm90TnVsbFRhZyB7IE5v
dE51bGwgfTsKLWlubGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBOb3ROdWxsVGFnLCB2
b2lkKiBsb2NhdGlvbikKLXsKLSAgICBBU1NFUlQobG9jYXRpb24pOwotICAgIHJldHVybiBsb2Nh
dGlvbjsKLX0KLQotLy8gVGhpcyBhZGRzIHZhcmlvdXMgQysrMTQgZmVhdHVyZXMgZm9yIHZlcnNp
b25zIG9mIHRoZSBTVEwgdGhhdCBtYXkgbm90IHlldCBoYXZlIHRoZW0uCi1uYW1lc3BhY2Ugc3Rk
IHsKLSNpZiBDT01QSUxFUihDTEFORykgJiYgX19jcGx1c3BsdXMgPCAyMDE0MDBMCi10ZW1wbGF0
ZTxjbGFzcyBUPiBzdHJ1Y3QgX1VuaXF1ZV9pZiB7Ci0gICAgdHlwZWRlZiB1bmlxdWVfcHRyPFQ+
IF9TaW5nbGVfb2JqZWN0OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgVD4gc3RydWN0IF9VbmlxdWVf
aWY8VFtdPiB7Ci0gICAgdHlwZWRlZiB1bmlxdWVfcHRyPFRbXT4gX1Vua25vd25fYm91bmQ7Ci19
OwotCi10ZW1wbGF0ZTxjbGFzcyBULCBzaXplX3QgTj4gc3RydWN0IF9VbmlxdWVfaWY8VFtOXT4g
ewotICAgIHR5cGVkZWYgdm9pZCBfS25vd25fYm91bmQ7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBU
LCBjbGFzcy4uLiBBcmdzPiBpbmxpbmUgdHlwZW5hbWUgX1VuaXF1ZV9pZjxUPjo6X1NpbmdsZV9v
YmplY3QKLW1ha2VfdW5pcXVlKEFyZ3MmJi4uLiBhcmdzKQotewotICAgIHJldHVybiB1bmlxdWVf
cHRyPFQ+KG5ldyBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOwotfQotCi10ZW1wbGF0
ZTxjbGFzcyBUPiBpbmxpbmUgdHlwZW5hbWUgX1VuaXF1ZV9pZjxUPjo6X1Vua25vd25fYm91bmQK
LW1ha2VfdW5pcXVlKHNpemVfdCBuKQotewotICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2V4
dGVudDxUPjo6dHlwZSBVOwotICAgIHJldHVybiB1bmlxdWVfcHRyPFQ+KG5ldyBVW25dKCkpOwot
fQotCi10ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcy4uLiBBcmdzPiB0eXBlbmFtZSBfVW5pcXVlX2lm
PFQ+OjpfS25vd25fYm91bmQKLW1ha2VfdW5pcXVlKEFyZ3MmJi4uLikgPSBkZWxldGU7Ci0KLS8v
IHN0ZDo6ZXhjaGFuZ2UKLXRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFUgPSBUPgotVCBleGNoYW5n
ZShUJiB0LCBVJiYgbmV3VmFsdWUpCi17Ci0gICAgVCBvbGRWYWx1ZSA9IHN0ZDo6bW92ZSh0KTsK
LSAgICB0ID0gc3RkOjpmb3J3YXJkPFU+KG5ld1ZhbHVlKTsKLQotICAgIHJldHVybiBvbGRWYWx1
ZTsKLX0KLSNlbmRpZgotCi10ZW1wbGF0ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlclRhZywgdHlw
ZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgY29uc3RleHByIHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVu
Y2U8VD46OnR5cGUmJiBtb3ZlKFQmJiB2YWx1ZSkKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KGlzX2x2
YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlLCAiVCBpcyBub3QgYW4gbHZhbHVlIHJlZmVyZW5jZTsg
bW92ZSgpIGlzIHVubmVjZXNzYXJ5LiIpOwotCi0gICAgdXNpbmcgTm9uUmVmUXVhbGlmaWVkVHlw
ZSA9IHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGU7Ci0gICAgc3RhdGljX2Fzc2Vy
dCghaXNfY29uc3Q8Tm9uUmVmUXVhbGlmaWVkVHlwZT46OnZhbHVlLCAiVCBpcyBjb25zdCBxdWFs
aWZpZWQuIik7Ci0KLSAgICByZXR1cm4gbW92ZShmb3J3YXJkPFQ+KHZhbHVlKSk7Ci19Ci0KLSNp
ZiBfX2NwbHVzcGx1cyA8IDIwMTcwM0wgJiYgKCFkZWZpbmVkKF9NU0NfRlVMTF9WRVIpIHx8IF9N
U0NfRlVMTF9WRVIgPCAxOTAwMjM5MTgpCi10ZW1wbGF0ZTxjbGFzcy4uLj4gc3RydWN0IHd0Zl9j
b25qdW5jdGlvbl9pbXBsOwotdGVtcGxhdGU8PiBzdHJ1Y3Qgd3RmX2Nvbmp1bmN0aW9uX2ltcGw8
PiA6IHRydWVfdHlwZSB7IH07Ci10ZW1wbGF0ZTxjbGFzcyBCMD4gc3RydWN0IHd0Zl9jb25qdW5j
dGlvbl9pbXBsPEIwPiA6IEIwIHsgfTsKLXRlbXBsYXRlPGNsYXNzIEIwLCBjbGFzcyBCMT4gc3Ry
dWN0IHd0Zl9jb25qdW5jdGlvbl9pbXBsPEIwLCBCMT4gOiBjb25kaXRpb25hbDxCMDo6dmFsdWUs
IEIxLCBCMD46OnR5cGUgeyB9OwotdGVtcGxhdGU8Y2xhc3MgQjAsIGNsYXNzIEIxLCBjbGFzcyBC
MiwgY2xhc3MuLi4gQm4+IHN0cnVjdCB3dGZfY29uanVuY3Rpb25faW1wbDxCMCwgQjEsIEIyLCBC
bi4uLj4gOiBjb25kaXRpb25hbDxCMDo6dmFsdWUsIHd0Zl9jb25qdW5jdGlvbl9pbXBsPEIxLCBC
MiwgQm4uLi4+LCBCMD46OnR5cGUgeyB9OwotdGVtcGxhdGU8Y2xhc3MuLi4gX0FyZ3M+IHN0cnVj
dCBjb25qdW5jdGlvbiA6IHd0Zl9jb25qdW5jdGlvbl9pbXBsPF9BcmdzLi4uPiB7IH07Ci0jZW5k
aWYKLQotfSAvLyBuYW1lc3BhY2Ugc3RkCi0KLSNkZWZpbmUgV1RGTW92ZSh2YWx1ZSkgc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPih2YWx1ZSkKLQotdXNpbmcgV1RGOjpLQjsKLXVz
aW5nIFdURjo6TUI7Ci11c2luZyBXVEY6OkdCOwotdXNpbmcgV1RGOjphcHByb3hpbWF0ZUJpbmFy
eVNlYXJjaDsKLXVzaW5nIFdURjo6YmluYXJ5U2VhcmNoOwotdXNpbmcgV1RGOjpiaXR3aXNlX2Nh
c3Q7Ci11c2luZyBXVEY6OmNhbGxTdGF0ZWxlc3NMYW1iZGE7Ci11c2luZyBXVEY6OmNoZWNrQW5k
U2V0OwotdXNpbmcgV1RGOjpmaW5kQml0SW5Xb3JkOwotdXNpbmcgV1RGOjppbnNlcnRJbnRvQm91
bmRlZFZlY3RvcjsKLXVzaW5nIFdURjo6aXNDb21waWxhdGlvblRocmVhZDsKLXVzaW5nIFdURjo6
aXNQb2ludGVyQWxpZ25lZDsKLXVzaW5nIFdURjo6aXNTdGF0ZWxlc3NMYW1iZGE7Ci11c2luZyBX
VEY6OmlzOEJ5dGVBbGlnbmVkOwotdXNpbmcgV1RGOjptZXJnZURlZHVwbGljYXRlZFNvcnRlZDsK
LXVzaW5nIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjsKLXVzaW5nIFdURjo6c2FmZUNhc3Q7Ci11
c2luZyBXVEY6OnRyeUJpbmFyeVNlYXJjaDsKLQotI2VuZGlmIC8vIFdURl9TdGRMaWJFeHRyYXNf
aApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1N0cmluZ0V4
dHJhcy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1N0cmluZ0V4dHJhcy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzk3ZDJjZTExYWQxYjhhNTRhODc5N2Uw
MTQyZWEzOTM2MDk3MDFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9TdHJpbmdFeHRyYXMuaAor
KysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEVsZWN0cm9uaWMgQXJ0cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBXVEZfU3RyaW5nRXh0
cmFzX2gKLSNkZWZpbmUgV1RGX1N0cmluZ0V4dHJhc19oCi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4K
LSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWYgSEFWRShTVFJJ
TkdTX0gpIAotI2luY2x1ZGUgPHN0cmluZ3MuaD4gCi0jZW5kaWYgCi0KLSNpZiBDT01QSUxFUihN
U1ZDKQotCi0vLyBGSVhNRTogV2Ugc2hvdWxkIHN0b3AgdXNpbmcgdGhlc2UgZW50aXJlbHkgYW5k
IHVzZSBzdWl0YWJsZSB2ZXJzaW9ucyBvZiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlIGluc3RlYWQu
Ci0KLWlubGluZSBpbnQgc3RybmNhc2VjbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMy
LCBzaXplX3QgbGVuKQotewotICAgIHJldHVybiBfc3RybmljbXAoczEsIHMyLCBsZW4pOwotfQot
Ci1pbmxpbmUgaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyKQot
ewotICAgIHJldHVybiBfc3RyaWNtcChzMSwgczIpOwotfQotCi0jZW5kaWYKLQotI2lmICFIQVZF
KFNUUk5TVFIpCi0KLWlubGluZSBjaGFyKiBzdHJuc3RyKGNvbnN0IGNoYXIqIGJ1ZmZlciwgY29u
c3QgY2hhciogdGFyZ2V0LCBzaXplX3QgYnVmZmVyTGVuZ3RoKQotewotICAgIHNpemVfdCB0YXJn
ZXRMZW5ndGggPSBzdHJsZW4odGFyZ2V0KTsKLSAgICBpZiAodGFyZ2V0TGVuZ3RoID09IDApCi0g
ICAgICAgIHJldHVybiBjb25zdF9jYXN0PGNoYXIqPihidWZmZXIpOwotICAgIGZvciAoY29uc3Qg
Y2hhciogc3RhcnQgPSBidWZmZXI7ICpzdGFydCAmJiBzdGFydCArIHRhcmdldExlbmd0aCA8PSBi
dWZmZXIgKyBidWZmZXJMZW5ndGg7IHN0YXJ0KyspIHsKLSAgICAgICAgaWYgKCpzdGFydCA9PSAq
dGFyZ2V0ICYmIHN0cm5jbXAoc3RhcnQgKyAxLCB0YXJnZXQgKyAxLCB0YXJnZXRMZW5ndGggLSAx
KSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y2hhcio+KHN0YXJ0KTsKLSAg
ICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYgLy8gV1RGX1N0cmluZ0V4
dHJhc19oCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvU3Ry
aW5nUHJpbnRTdHJlYW0uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9TdHJp
bmdQcmludFN0cmVhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWRlNzM2MmNh
MDBiNDMwZjI4M2Q1MTMxYjMxMzQ1MGU4MGRjNDgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9T
dHJpbmdQcmludFN0cmVhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFN0
cmluZ1ByaW50U3RyZWFtX2gKLSNkZWZpbmUgU3RyaW5nUHJpbnRTdHJlYW1faAotCi0jaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3Mg
U3RyaW5nUHJpbnRTdHJlYW0gOiBwdWJsaWMgUHJpbnRTdHJlYW0gewotcHVibGljOgotICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBTdHJpbmdQcmludFN0cmVhbSgpOwotICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2aXJ0dWFsIH5TdHJpbmdQcmludFN0cmVhbSgpOwotICAgIAotICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIHZwcmludGYoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0KSBvdmVycmlk
ZSBXVEZfQVRUUklCVVRFX1BSSU5URigyLCAwKTsKLQotICAgIHNpemVfdCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX25leHQ7IH0KLSAgICAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmlu
ZyB0b0NTdHJpbmcoKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHRvU3RyaW5nKCk7
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyB0b1N0cmluZ1dpdGhMYXRpbjFGYWxsYmFj
aygpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJlc2V0KCk7Ci0gICAgCi1wcml2YXRl
OgotICAgIHZvaWQgaW5jcmVhc2VTaXplKHNpemVfdCk7Ci0gICAgCi0gICAgY2hhciogbV9idWZm
ZXI7Ci0gICAgc2l6ZV90IG1fbmV4dDsKLSAgICBzaXplX3QgbV9zaXplOwotICAgIGNoYXIgbV9p
bmxpbmVCdWZmZXJbMTI4XTsKLX07Ci0KLS8vIFN0cmluZ2lmeSBhbnkgdHlwZSBUIHRoYXQgaGFz
IGEgV1RGOjpwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgY29uc3QgVCYpCi0KLXRlbXBsYXRl
PHR5cGVuYW1lLi4uIFR5cGVzPgotQ1N0cmluZyB0b0NTdHJpbmcoY29uc3QgVHlwZXMmLi4uIHZh
bHVlcykKLXsKLSAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtLnByaW50
KHZhbHVlcy4uLik7Ci0gICAgcmV0dXJuIHN0cmVhbS50b0NTdHJpbmcoKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUuLi4gVHlwZXM+Ci1TdHJpbmcgdG9TdHJpbmcoY29uc3QgVHlwZXMmLi4uIHZh
bHVlcykKLXsKLSAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtLnByaW50
KHZhbHVlcy4uLik7Ci0gICAgcmV0dXJuIHN0cmVhbS50b1N0cmluZygpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpTdHJpbmdQcmludFN0cmVhbTsKLXVzaW5nIFdURjo6
dG9DU3RyaW5nOwotdXNpbmcgV1RGOjp0b1N0cmluZzsKLQotI2VuZGlmIC8vIFN0cmluZ1ByaW50
U3RyZWFtX2gKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3Rm
L1N5c3RlbUZyZWUuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9TeXN0ZW1G
cmVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlZjc1NjI4MmNmMjBkNDBkOGM2
MTg1NDc5NDZkMDRmNWJhZWNlZjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1N5c3RlbUZyZWUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHR5
cGVfdHJhaXRzPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0
cnVjdCBTeXN0ZW1GcmVlIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoVCogcG9pbnRlcikgY29uc3QK
LSAgICB7Ci0gICAgICAgIGZyZWUoY29uc3RfY2FzdDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jdjxU
Pjo6dHlwZSo+KHBvaW50ZXIpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
c3RydWN0IFN5c3RlbUZyZWU8VFtdPiB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKFQqIHBvaW50ZXIp
IGNvbnN0Ci0gICAgewotICAgICAgICBmcmVlKGNvbnN0X2Nhc3Q8dHlwZW5hbWUgc3RkOjpyZW1v
dmVfY3Y8VD46OnR5cGUqPihwb2ludGVyKSk7Ci0gICAgfQotCi19OwotCi19IC8vIG5hbWVzcGFj
ZSBXVEYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9UaHJl
YWRHcm91cC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1RocmVhZEdyb3Vw
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMDg1MjMxYWI0ZDNkM2E1NTA5Mzk3
YTA3OWY1Nzk2YmJlYzA1M2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1RocmVhZEdyb3VwLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8bWVt
b3J5PgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotZW51bSBj
bGFzcyBUaHJlYWRHcm91cEFkZFJlc3VsdCB7IE5ld2x5QWRkZWQsIEFscmVhZHlBZGRlZCwgTm90
QWRkZWQgfTsKLQotY2xhc3MgVGhyZWFkR3JvdXAgOiBwdWJsaWMgc3RkOjplbmFibGVfc2hhcmVk
X2Zyb21fdGhpczxUaHJlYWRHcm91cD4gewotcHVibGljOgotICAgIGZyaWVuZCBjbGFzcyBUaHJl
YWQ7Ci0KLSAgICBzdGF0aWMgc3RkOjpzaGFyZWRfcHRyPFRocmVhZEdyb3VwPiBjcmVhdGUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFyZWQ8VGhyZWFkR3JvdXA+KCk7Ci0g
ICAgfQotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFRocmVhZEdyb3VwQWRkUmVzdWx0IGFkZChU
aHJlYWQmKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgVGhyZWFkR3JvdXBBZGRSZXN1bHQgYWRk
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGhyZWFkJik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IFRocmVhZEdyb3VwQWRkUmVzdWx0IGFkZEN1cnJlbnRUaHJlYWQoKTsKLQotICAgIGNvbnN0IExp
c3RIYXNoU2V0PFJlZjxUaHJlYWQ+PiYgdGhyZWFkcyhjb25zdCBBYnN0cmFjdExvY2tlciYpIGNv
bnN0IHsgcmV0dXJuIG1fdGhyZWFkczsgfQotCi0gICAgc3RkOjptdXRleCYgZ2V0TG9jaygpIHsg
cmV0dXJuIG1fbG9jazsgfQotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIH5UaHJlYWRHcm91cCgp
OwotCi0gICAgVGhyZWFkR3JvdXAoKSA9IGRlZmF1bHQ7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp3
ZWFrX3B0cjxUaHJlYWRHcm91cD4gd2Vha0Zyb21UaGlzKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBzaGFyZWRfZnJvbV90aGlzKCk7Ci0gICAgfQotCi0gICAgLy8gV2UgdXNlIHN0ZDo6bXV0ZXgg
c2luY2UgaXQgY2FuIGJlIHVzZWQgd2hlbiBkZWFsbG9jYXRpbmcgVExTLgotICAgIHN0ZDo6bXV0
ZXggbV9sb2NrOwotICAgIExpc3RIYXNoU2V0PFJlZjxUaHJlYWQ+PiBtX3RocmVhZHM7Ci19Owot
Ci19Ci0KLXVzaW5nIFdURjo6VGhyZWFkR3JvdXA7Ci11c2luZyBXVEY6OlRocmVhZEdyb3VwQWRk
UmVzdWx0OwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1Ro
cmVhZEhvbGRlci5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvVGhyZWFk
SG9sZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJhMzFiZTk5NzhhOWRl
NDJlYmZhMzNiMDcwNmE1MjQzM2JkNzJjYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvVGhyZWFk
SG9sZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Lgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUaHJlYWRIb2xkZXIuaCIKLQotI2luY2x1ZGUgIlRo
cmVhZGluZy5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLQotVGhyZWFkU3BlY2lmaWNLZXkgVGhyZWFk
SG9sZGVyOjptX2tleSA9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleTsKLQotVGhyZWFkSG9sZGVy
Ojp+VGhyZWFkSG9sZGVyKCkKLXsKLSAgICBtX3RocmVhZC0+ZGlkRXhpdCgpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L3d0Zi9UaHJlYWRIb2xkZXIuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9U
aHJlYWRIb2xkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJmOGRlNjg4NTBj
NmFmZGM3OWVmZGFkYTA5YmU2ZGVmYjE4MjZhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvVGhy
ZWFkSG9sZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIEhvbGRzIFRocmVhZCBpbiB0aGUgdGhy
ZWFkLXNwZWNpZmljIHN0b3JhZ2UuIFRoZSBkZXN0cnVjdG9yIG9mIHRoaXMgaG9sZGVyIHJlbGlh
Ymx5IGRlc3Ryb3kgVGhyZWFkLgotLy8gRm9yIHB0aHJlYWQsIGl0IGVtcGxveXMgcHRocmVhZHMt
c3BlY2lmaWMgMi1wYXNzIGRlc3RydWN0aW9uIHRvIHJlbGlhYmx5IHJlbW92ZSBUaHJlYWQuCi0v
LyBGb3IgV2luZG93cywgd2UgdXNlIHRocmVhZF9sb2NhbCB0byBkZWZlciB0aHJlYWQgaG9sZGVy
IGRlc3RydWN0aW9uLiBJdCBhc3N1bWVzIHJlZ3VsYXIgVGhyZWFkU3BlY2lmaWMKLS8vIHR5cGVz
IGRvbid0IHVzZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgotY2xhc3MgVGhyZWFkSG9sZGVy
IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRIb2xkZXIpOwotcHVibGljOgotICAg
IH5UaHJlYWRIb2xkZXIoKTsKLQotICAgIC8vIE9uZSB0aW1lIGluaXRpYWxpemF0aW9uIGZvciB0
aGlzIGNsYXNzIGFzIGEgd2hvbGUuCi0gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQg
YmVmb3JlIGluaXRpYWxpemUoKSBhbmQgaXQgaXMgbm90IHRocmVhZC1zYWZlLgotICAgIHN0YXRp
YyB2b2lkIGluaXRpYWxpemVPbmNlKCk7Ci0KLSAgICAvLyBDcmVhdGVzIGFuZCBwdXRzIGFuIGlu
c3RhbmNlIG9mIFRocmVhZEhvbGRlciBpbnRvIHRocmVhZC1zcGVjaWZpYyBzdG9yYWdlLgotICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVGhyZWFkJik7Ci0KLSAgICAvLyBSZXR1cm5zIDAgaWYg
dGhyZWFkLXNwZWNpZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KLSAgICBzdGF0aWMg
VGhyZWFkSG9sZGVyKiBjdXJyZW50KCk7Ci0KLSAgICBUaHJlYWQmIHRocmVhZCgpIHsgcmV0dXJu
IG1fdGhyZWFkLmdldCgpOyB9Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIHN0YXRpYyBSZWZQdHI8
VGhyZWFkPiBnZXQoVGhyZWFkSWRlbnRpZmllcik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBU
aHJlYWRIb2xkZXIoVGhyZWFkJiB0aHJlYWQpCi0gICAgICAgIDogbV90aHJlYWQodGhyZWFkKQot
ICAgICAgICAsIG1faXNEZXN0cm95ZWRPbmNlKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICAv
LyBUaGlzIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9yIGlzIGNhbGxlZCAyIHRpbWVzIHdoZW4g
dGhyZWFkIHRlcm1pbmF0ZXM6Ci0gICAgLy8gLSBmaXJzdCwgd2hlbiBhbGwgdGhlIG90aGVyIHRo
cmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyBhcmUgY2FsbGVkLCBpdCBzaW1wbHkgcmVtZW1iZXJz
IGl0IHdhcyAnZGVzdHJveWVkIG9uY2UnCi0gICAgLy8gYW5kICgxKSByZS1zZXRzIGl0c2VsZiBp
bnRvIHRoZSB0aHJlYWQtc3BlY2lmaWMgc2xvdCBvciAoMikgY29uc3RydWN0cyB0aHJlYWQgbG9j
YWwgdmFsdWUgdG8gY2FsbCBpdCBhZ2FpbiBsYXRlci4KLSAgICAvLyAtIHNlY29uZCwgYWZ0ZXIg
YWxsIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGludm9rZWQsIGl0IGdldHMgY2Fs
bGVkIGFnYWluIC0gdGhpcyB0aW1lLCB3ZSByZW1vdmUgdGhlCi0gICAgLy8gVGhyZWFkIGZyb20g
dGhlIHRocmVhZE1hcCwgY29tcGxldGluZyB0aGUgY2xlYW51cC4KLSAgICBzdGF0aWMgdm9pZCBU
SFJFQURfU1BFQ0lGSUNfQ0FMTCBkZXN0cnVjdCh2b2lkKiBkYXRhKTsKLQotICAgIFJlZjxUaHJl
YWQ+IG1fdGhyZWFkOwotICAgIGJvb2wgbV9pc0Rlc3Ryb3llZE9uY2U7Ci0gICAgc3RhdGljIFRo
cmVhZFNwZWNpZmljS2V5IG1fa2V5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvVGhyZWFkSG9sZGVyUHRocmVh
ZHMuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1RocmVhZEhvbGRlclB0
aHJlYWRzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBlNWU4OGY3NmRhYzJm
NzYwNzMzNGE4ZWIzYWFlYWNkYWQ1Zjk2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvVGhyZWFk
SG9sZGVyUHRocmVhZHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRocmVhZEhvbGRlci5oIgotCi0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdm9pZCBUaHJlYWRI
b2xkZXI6OmluaXRpYWxpemVPbmNlKCkKLXsKLSAgICB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZSgm
bV9rZXksIGRlc3RydWN0KTsKLX0KLQotVGhyZWFkSG9sZGVyKiBUaHJlYWRIb2xkZXI6OmN1cnJl
bnQoKQotewotICAgIEFTU0VSVChtX2tleSAhPSBJbnZhbGlkVGhyZWFkU3BlY2lmaWNLZXkpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWRIb2xkZXIqPih0aHJlYWRTcGVjaWZpY0dldCht
X2tleSkpOwotfQotCi12b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZShUaHJlYWQmIHRocmVh
ZCkKLXsKLSAgICBpZiAoIWN1cnJlbnQoKSkgewotICAgICAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2
ZSB0aGlzIGFzIGEgcmVsZWFzZSBhc3NlcnQgZXZlcnl3aGVyZSwgYnV0IHRoYXQgd291bGQgaHVy
dCBwZXJmb3JtYW5jZS4KLSAgICAgICAgLy8gSGF2aW5nIHRoaXMgcmVsZWFzZSBhc3NlcnQgaGVy
ZSBtZWFucyB0aGF0IHdlIHdpbGwgY2F0Y2ggImRpZG4ndCBjYWxsCi0gICAgICAgIC8vIFdURjo6
aW5pdGlhbGl6ZVRocmVhZGluZygpIHNvb24gZW5vdWdoIiBidWdzIGluIHJlbGVhc2UgbW9kZS4K
LSAgICAgICAgQVNTRVJUKG1fa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7Ci0gICAg
ICAgIHRocmVhZFNwZWNpZmljU2V0KG1fa2V5LCBuZXcgVGhyZWFkSG9sZGVyKHRocmVhZCkpOwot
ICAgIH0KLX0KLQotdm9pZCBUaHJlYWRIb2xkZXI6OmRlc3RydWN0KHZvaWQqIGRhdGEpCi17Ci0g
ICAgVGhyZWFkSG9sZGVyKiB0aHJlYWRJZGVudGlmaWVyRGF0YSA9IHN0YXRpY19jYXN0PFRocmVh
ZEhvbGRlcio+KGRhdGEpOwotICAgIEFTU0VSVCh0aHJlYWRJZGVudGlmaWVyRGF0YSk7Ci0KLSAg
ICBpZiAodGhyZWFkSWRlbnRpZmllckRhdGEtPm1faXNEZXN0cm95ZWRPbmNlKSB7Ci0gICAgICAg
IGRlbGV0ZSB0aHJlYWRJZGVudGlmaWVyRGF0YTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIHRocmVhZElkZW50aWZpZXJEYXRhLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7Ci0gICAg
Ly8gUmUtc2V0dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0cnVjdCgp
IGNhbGwgYWZ0ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGNh
bGxlZC4KLSAgICB0aHJlYWRTcGVjaWZpY1NldChtX2tleSwgdGhyZWFkSWRlbnRpZmllckRhdGEp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi9UaHJlYWRNZXNzYWdlLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvVGhyZWFkTWVzc2FnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiZmU2YzhiODVhOTM5N2ZhMjlmMjNlYjRjYTIxOGExMTQ0ZmY2OGI1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9UaHJlYWRNZXNzYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdXNpbmcgVGhyZWFkTWVzc2FnZSA9IFNjb3Bl
ZExhbWJkYTx2b2lkKFBsYXRmb3JtUmVnaXN0ZXJzJik+OwotCi1lbnVtIGNsYXNzIE1lc3NhZ2VT
dGF0dXMgewotICAgIE1lc3NhZ2VSYW4sCi0gICAgVGhyZWFkRXhpdGVkLAotfTsKLQotLy8gVGhp
cyBtZXRob2QgYWxsb3dzIHVzIHRvIHNlbmQgYSBtZXNzYWdlIHdoaWNoIHdpbGwgYmUgcnVuIGlu
IGEgc2lnbmFsIGhhbmRsZXIgb24gdGhlIGRlc2lyZWQgdGhyZWFkLgotLy8gVGhlcmUgYXJlIHNl
dmVyYWwgY2F2ZWF0ZXMgdG8gdGhpcyBtZXRob2QgaG93ZXZlciwgVGhpcyBmdW5jdGlvbiB1c2Vz
IHNpZ25hbHMgc28geW91ciBtZXNzYWdlIHNob3VsZAotLy8gYmUgc3luYyBzaWduYWwgc2FmZS4K
LVdURl9FWFBPUlRfUFJJVkFURSBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVh
ZCYsIGNvbnN0IFRocmVhZE1lc3NhZ2UmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
LU1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2UoVGhyZWFkJiB0YXJnZXRUaHJlYWQsIGNvbnN0IEZ1
bmN0b3ImIGZ1bmMpCi17Ci0gICAgYXV0byBsYW1iZGEgPSBzY29wZWRMYW1iZGFSZWY8dm9pZChQ
bGF0Zm9ybVJlZ2lzdGVycyYpPihmdW5jKTsKLSAgICByZXR1cm4gc2VuZE1lc3NhZ2VTY29wZWQo
dGFyZ2V0VGhyZWFkLCBsYW1iZGEpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcg
V1RGOjpzZW5kTWVzc2FnZTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL3d0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDg5MmEwNThhOTUzZGQzZGIxZTVlYWIwMjVhZjJkYTQ2MjJkYjcyYjAuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEwLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwNyBKdXN0aW4gSGF5Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGF0b21pYz4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQot
Y2xhc3MgVGhyZWFkU2FmZVJlZkNvdW50ZWRCYXNlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShUaHJlYWRTYWZlUmVmQ291bnRlZEJhc2UpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIFRocmVhZFNhZmVSZWZDb3VudGVkQmFzZSgpID0gZGVmYXVsdDsKLQot
ICAgIHZvaWQgcmVmKCkgY29uc3QKLSAgICB7Ci0gICAgICAgICsrbV9yZWZDb3VudDsKLSAgICB9
Ci0KLSAgICBib29sIGhhc09uZVJlZigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gcmVm
Q291bnQoKSA9PSAxOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHJlZkNvdW50KCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3JlZkNvdW50OwotICAgIH0KLQotcHJvdGVjdGVkOgotICAg
IC8vIFJldHVybnMgd2hldGhlciB0aGUgcG9pbnRlciBzaG91bGQgYmUgZnJlZWQgb3Igbm90Lgot
ICAgIGJvb2wgZGVyZWZCYXNlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhLS1tX3Jl
ZkNvdW50OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBtdXRhYmxlIHN0ZDo6YXRvbWljPHVuc2ln
bmVkPiBtX3JlZkNvdW50IHsgMSB9OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWRCYXNlIHsKLXB1
YmxpYzoKLSAgICB2b2lkIGRlcmVmKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChkZXJlZkJh
c2UoKSkKLSAgICAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxjb25zdCBUKj4odGhpcyk7Ci0g
ICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVGhyZWFkU2FmZVJlZkNvdW50ZWQoKSA9IGRlZmF1bHQ7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpUaHJlYWRTYWZlUmVmQ291
bnRlZDsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9UaHJl
YWRTcGVjaWZpYy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1RocmVhZFNw
ZWNpZmljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmOTgzNjNlOTM0MTM0YzQx
NDMzMzZjOGI4MmY4YWZjNDM4MTVlMjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1RocmVhZFNw
ZWNpZmljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgSmlhbiBMaSA8amlhbmxpQGNocm9taXVtLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKiBUaHJlYWQgbG9jYWwg
c3RvcmFnZSBpcyBpbXBsZW1lbnRlZCBieSB1c2luZyBlaXRoZXIgcHRocmVhZCBBUEkgb3IgV2lu
ZG93cwotICogbmF0aXZlIEFQSS4gVGhlcmUgaXMgc3VidGxlIHNlbWFudGljIGRpc2NyZXBhbmN5
IGZvciB0aGUgY2xlYW51cCBmdW5jdGlvbgotICogaW1wbGVtZW50YXRpb24gYXMgbm90ZWQgYmVs
b3c6Ci0gKiAgIEAgSW4gcHRocmVhZCBpbXBsZW1lbnRhdGlvbiwgdGhlIGRlc3RydWN0b3IgZnVu
Y3Rpb24gd2lsbCBiZSBjYWxsZWQKLSAqICAgICByZXBlYXRlZGx5IGlmIHRoZXJlIGlzIHN0aWxs
IG5vbi1OVUxMIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZnVuY3Rpb24uCi0gKiAgIEAgSW4g
V2luZG93cyBuYXRpdmUgaW1wbGVtZW50YXRpb24sIHRoZSBkZXN0cnVjdG9yIGZ1bmN0aW9uIHdp
bGwgYmUgY2FsbGVkCi0gKiAgICAgb25seSBvbmNlLgotICogVGhpcyBzZW1hbnRpYyBkaXNjcmVw
YW5jeSBkb2VzIG5vdCBpbXBvc2UgYW55IHByb2JsZW0gYmVjYXVzZSBub3doZXJlIGluCi0gKiBX
ZWJLaXQgdGhlIHJlcGVhdGVkIGNhbGwgYmFoYXZpb3IgaXMgdXRpbGl6ZWQuCi0gKi8KLQotI2lm
bmRlZiBXVEZfVGhyZWFkU3BlY2lmaWNfaAotI2RlZmluZSBXVEZfVGhyZWFkU3BlY2lmaWNfaAot
Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLSNpZiBVU0UoUFRIUkVBRFMpCi0j
aW5jbHVkZSA8cHRocmVhZC5oPgotCi0jaWYgT1MoSFVSRCkKLS8vIFBUSFJFQURfS0VZU19NQVgg
aXMgbm90IGRlZmluZWQgaW4gYmlvbmljIG5vciBpbiBIdXJkLCBzbyBleHBsaWNpdGx5IGRlZmlu
ZSBpdCBoZXJlLgotI2RlZmluZSBQVEhSRUFEX0tFWVNfTUFYIDEwMjQKLSNlbHNlCi0jaW5jbHVk
ZSA8bGltaXRzLmg+Ci0jZW5kaWYKLQotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlIDx3aW5k
b3dzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLSNpZiBPUyhXSU5ET1dTKSAmJiBD
UFUoWDg2KQotI2RlZmluZSBUSFJFQURfU1BFQ0lGSUNfQ0FMTCBfX3N0ZGNhbGwKLSNlbHNlCi0j
ZGVmaW5lIFRIUkVBRF9TUEVDSUZJQ19DQUxMCi0jZW5kaWYKLQotZW51bSBjbGFzcyBDYW5CZUdD
VGhyZWFkIHsKLSAgICBGYWxzZSwKLSAgICBUcnVlCi19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBDYW5CZUdDVGhyZWFkIGNhbkJlR0NUaHJlYWQgPSBDYW5CZUdDVGhyZWFkOjpGYWxzZT4gY2xh
c3MgVGhyZWFkU3BlY2lmaWMgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZFNwZWNp
ZmljKTsKLXB1YmxpYzoKLSAgICBUaHJlYWRTcGVjaWZpYygpOwotICAgIGJvb2wgaXNTZXQoKTsg
Ly8gVXNlZnVsIGFzIGEgZmFzdCBjaGVjayB0byBzZWUgaWYgdGhpcyB0aHJlYWQgaGFzIHNldCB0
aGlzIHZhbHVlLgotICAgIFQqIG9wZXJhdG9yLT4oKTsKLSAgICBvcGVyYXRvciBUKigpOwotICAg
IFQmIG9wZXJhdG9yKigpOwotCi0jaWYgVVNFKFdFQl9USFJFQUQpCi0gICAgdm9pZCByZXBsYWNl
KFQqKTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4gSXQncyB0
ZWNobmljYWxseSBwb3NzaWJsZSB0byBkZXN0cm95IGEgdGhyZWFkIHNwZWNpZmljIGtleSwgYnV0
IG9uZSB3b3VsZCBuZWVkCi0gICAgLy8gdG8gbWFrZSBzdXJlIHRoYXQgYWxsIHZhbHVlcyBoYXZl
IGJlZW4gZGVzdHJveWVkIGFscmVhZHkgKHVzdWFsbHksIHRoYXQgYWxsIHRocmVhZHMgdGhhdCB1
c2VkIGl0Ci0gICAgLy8gaGF2ZSBleGl0ZWQpLiBJdCdzIHVubGlrZWx5IHRoYXQgYW55IHVzZXIg
b2YgdGhpcyBjYWxsIHdpbGwgYmUgaW4gdGhhdCBzaXR1YXRpb24gLSBhbmQgaGF2aW5nCi0gICAg
Ly8gYSBkZXN0cnVjdG9yIGRlZmluZWQgY2FuIGJlIGNvbmZ1c2luZywgZ2l2ZW4gdGhhdCBpdCBo
YXMgc3VjaCBzdHJvbmcgcHJlLXJlcXVpc2l0ZXMgdG8gd29yayBjb3JyZWN0bHkuCi0gICAgflRo
cmVhZFNwZWNpZmljKCk7Ci0KLSAgICBUKiBnZXQoKTsKLSAgICB2b2lkIHNldChUKik7Ci0gICAg
dm9pZCBzdGF0aWMgVEhSRUFEX1NQRUNJRklDX0NBTEwgZGVzdHJveSh2b2lkKiBwdHIpOwotCi0g
ICAgc3RydWN0IERhdGEgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRhKTsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIERhdGEoVCogdmFsdWUsIFRocmVhZFNwZWNpZmljPFQsIGNhbkJl
R0NUaHJlYWQ+KiBvd25lcikgOiB2YWx1ZSh2YWx1ZSksIG93bmVyKG93bmVyKSB7fQotCi0gICAg
ICAgIFQqIHZhbHVlOwotICAgICAgICBUaHJlYWRTcGVjaWZpYzxULCBjYW5CZUdDVGhyZWFkPiog
b3duZXI7Ci0gICAgfTsKLQotI2lmIFVTRShQVEhSRUFEUykKLSAgICBwdGhyZWFkX2tleV90IG1f
a2V5OwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBpbnQgbV9pbmRleDsKLSNlbmRpZgotfTsKLQot
I2lmIFVTRShQVEhSRUFEUykKLQotdHlwZWRlZiBwdGhyZWFkX2tleV90IFRocmVhZFNwZWNpZmlj
S2V5OwotCi1zdGF0aWMgY29uc3QgY29uc3RleHByIFRocmVhZFNwZWNpZmljS2V5IEludmFsaWRU
aHJlYWRTcGVjaWZpY0tleSA9IFBUSFJFQURfS0VZU19NQVg7Ci0KLWlubGluZSB2b2lkIHRocmVh
ZFNwZWNpZmljS2V5Q3JlYXRlKFRocmVhZFNwZWNpZmljS2V5KiBrZXksIHZvaWQgKCpkZXN0cnVj
dG9yKSh2b2lkICopKQotewotICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2NyZWF0ZShrZXks
IGRlc3RydWN0b3IpOwotICAgIGlmIChlcnJvcikKLSAgICAgICAgQ1JBU0goKTsKLX0KLQotaW5s
aW5lIHZvaWQgdGhyZWFkU3BlY2lmaWNLZXlEZWxldGUoVGhyZWFkU3BlY2lmaWNLZXkga2V5KQot
ewotICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpOwotICAgIGlmIChlcnJv
cikKLSAgICAgICAgQ1JBU0goKTsKLX0KLQotaW5saW5lIHZvaWQgdGhyZWFkU3BlY2lmaWNTZXQo
VGhyZWFkU3BlY2lmaWNLZXkga2V5LCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBwdGhyZWFkX3NldHNw
ZWNpZmljKGtleSwgdmFsdWUpOwotfQotCi1pbmxpbmUgdm9pZCogdGhyZWFkU3BlY2lmaWNHZXQo
VGhyZWFkU3BlY2lmaWNLZXkga2V5KQotewotICAgIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmlj
KGtleSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIENhbkJlR0NUaHJlYWQgY2FuQmVHQ1Ro
cmVhZD4KLWlubGluZSBUaHJlYWRTcGVjaWZpYzxULCBjYW5CZUdDVGhyZWFkPjo6VGhyZWFkU3Bl
Y2lmaWMoKQotewotICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2NyZWF0ZSgmbV9rZXksIGRl
c3Ryb3kpOwotICAgIGlmIChlcnJvcikKLSAgICAgICAgQ1JBU0goKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgQ2FuQmVHQ1RocmVhZCBjYW5CZUdDVGhyZWFkPgotaW5saW5lIFQqIFRocmVh
ZFNwZWNpZmljPFQsIGNhbkJlR0NUaHJlYWQ+OjpnZXQoKQotewotICAgIERhdGEqIGRhdGEgPSBz
dGF0aWNfY2FzdDxEYXRhKj4ocHRocmVhZF9nZXRzcGVjaWZpYyhtX2tleSkpOwotICAgIGlmIChk
YXRhKQotICAgICAgICByZXR1cm4gZGF0YS0+dmFsdWU7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2Fu
QmVHQ1RocmVhZCA9PSBDYW5CZUdDVGhyZWFkOjpUcnVlIHx8ICFtYXlCZUdDVGhyZWFkKCkpOwot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBDYW5CZUdDVGhy
ZWFkIGNhbkJlR0NUaHJlYWQ+Ci1pbmxpbmUgdm9pZCBUaHJlYWRTcGVjaWZpYzxULCBjYW5CZUdD
VGhyZWFkPjo6c2V0KFQqIHB0cikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChjYW5CZUdDVGhyZWFk
ID09IENhbkJlR0NUaHJlYWQ6OlRydWUgfHwgIW1heUJlR0NUaHJlYWQoKSk7Ci0gICAgQVNTRVJU
KCFnZXQoKSk7Ci0gICAgcHRocmVhZF9zZXRzcGVjaWZpYyhtX2tleSwgbmV3IERhdGEocHRyLCB0
aGlzKSk7Ci19Ci0KLSNlbGlmIE9TKFdJTkRPV1MpCi0KLS8vIFRoZSBtYXhpbXVtIG51bWJlciBv
ZiBGTFMga2V5cyB0aGF0IGNhbiBiZSBjcmVhdGVkLiBGb3Igc2ltcGxpZmljYXRpb24sIHdlIGFz
c3VtZSB0aGF0OgotLy8gMSkgT25jZSB0aGUgaW5zdGFuY2Ugb2YgVGhyZWFkU3BlY2lmaWM8PiBp
cyBjcmVhdGVkLCBpdCB3aWxsIG5vdCBiZSBkZXN0cnVjdGVkIHVudGlsIHRoZSBwcm9ncmFtIGRp
ZXMuCi0vLyAyKSBXZSBkbyBub3QgbmVlZCB0byBob2xkIG1hbnkgaW5zdGFuY2VzIG9mIFRocmVh
ZFNwZWNpZmljPD4gZGF0YS4gVGhpcyBmaXhlZCBudW1iZXIgc2hvdWxkIGJlIGZhciBlbm91Z2gu
Ci1jb25zdCBpbnQga01heEZsc0tleVNpemUgPSAxMjg7Ci0KLVdURl9FWFBPUlRfUFJJVkFURSBs
b25nJiBmbHNLZXlDb3VudCgpOwotV1RGX0VYUE9SVF9QUklWQVRFIERXT1JEKiBmbHNLZXlzKCk7
Ci0KLXR5cGVkZWYgRFdPUkQgVGhyZWFkU3BlY2lmaWNLZXk7Ci0KLXN0YXRpYyBjb25zdCBjb25z
dGV4cHIgVGhyZWFkU3BlY2lmaWNLZXkgSW52YWxpZFRocmVhZFNwZWNpZmljS2V5ID0gRkxTX09V
VF9PRl9JTkRFWEVTOwotCi1pbmxpbmUgdm9pZCB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZShUaHJl
YWRTcGVjaWZpY0tleSoga2V5LCB2b2lkIChUSFJFQURfU1BFQ0lGSUNfQ0FMTCAqZGVzdHJ1Y3Rv
cikodm9pZCAqKSkKLXsKLSAgICBEV09SRCBmbHNLZXkgPSBGbHNBbGxvYyhkZXN0cnVjdG9yKTsK
LSAgICBpZiAoZmxzS2V5ID09IEZMU19PVVRfT0ZfSU5ERVhFUykKLSAgICAgICAgQ1JBU0goKTsK
LQotICAgICprZXkgPSBmbHNLZXk7Ci19Ci0KLWlubGluZSB2b2lkIHRocmVhZFNwZWNpZmljS2V5
RGVsZXRlKFRocmVhZFNwZWNpZmljS2V5IGtleSkKLXsKLSAgICBGbHNGcmVlKGtleSk7Ci19Ci0K
LWlubGluZSB2b2lkIHRocmVhZFNwZWNpZmljU2V0KFRocmVhZFNwZWNpZmljS2V5IGtleSwgdm9p
ZCogZGF0YSkKLXsKLSAgICBGbHNTZXRWYWx1ZShrZXksIGRhdGEpOwotfQotCi1pbmxpbmUgdm9p
ZCogdGhyZWFkU3BlY2lmaWNHZXQoVGhyZWFkU3BlY2lmaWNLZXkga2V5KQotewotICAgIHJldHVy
biBGbHNHZXRWYWx1ZShrZXkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBDYW5CZUdDVGhy
ZWFkIGNhbkJlR0NUaHJlYWQ+Ci1pbmxpbmUgVGhyZWFkU3BlY2lmaWM8VCwgY2FuQmVHQ1RocmVh
ZD46OlRocmVhZFNwZWNpZmljKCkKLSAgICA6IG1faW5kZXgoLTEpCi17Ci0gICAgRFdPUkQgZmxz
S2V5ID0gRmxzQWxsb2MoZGVzdHJveSk7Ci0gICAgaWYgKGZsc0tleSA9PSBGTFNfT1VUX09GX0lO
REVYRVMpCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICBtX2luZGV4ID0gSW50ZXJsb2NrZWRJbmNy
ZW1lbnQoJmZsc0tleUNvdW50KCkpIC0gMTsKLSAgICBpZiAobV9pbmRleCA+PSBrTWF4RmxzS2V5
U2l6ZSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBmbHNLZXlzKClbbV9pbmRleF0gPSBmbHNLZXk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIENhbkJlR0NUaHJlYWQgY2FuQmVHQ1RocmVhZD4K
LWlubGluZSBUaHJlYWRTcGVjaWZpYzxULCBjYW5CZUdDVGhyZWFkPjo6flRocmVhZFNwZWNpZmlj
KCkKLXsKLSAgICBGbHNGcmVlKGZsc0tleXMoKVttX2luZGV4XSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIENhbkJlR0NUaHJlYWQgY2FuQmVHQ1RocmVhZD4KLWlubGluZSBUKiBUaHJlYWRT
cGVjaWZpYzxULCBjYW5CZUdDVGhyZWFkPjo6Z2V0KCkKLXsKLSAgICBEYXRhKiBkYXRhID0gc3Rh
dGljX2Nhc3Q8RGF0YSo+KEZsc0dldFZhbHVlKGZsc0tleXMoKVttX2luZGV4XSkpOwotICAgIGlm
IChkYXRhKQotICAgICAgICByZXR1cm4gZGF0YS0+dmFsdWU7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
Y2FuQmVHQ1RocmVhZCA9PSBDYW5CZUdDVGhyZWFkOjpUcnVlIHx8ICFtYXlCZUdDVGhyZWFkKCkp
OwotICAgIHJldHVybiBudWxscHRyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBDYW5CZUdD
VGhyZWFkIGNhbkJlR0NUaHJlYWQ+Ci1pbmxpbmUgdm9pZCBUaHJlYWRTcGVjaWZpYzxULCBjYW5C
ZUdDVGhyZWFkPjo6c2V0KFQqIHB0cikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChjYW5CZUdDVGhy
ZWFkID09IENhbkJlR0NUaHJlYWQ6OlRydWUgfHwgIW1heUJlR0NUaHJlYWQoKSk7Ci0gICAgQVNT
RVJUKCFnZXQoKSk7Ci0gICAgRGF0YSogZGF0YSA9IG5ldyBEYXRhKHB0ciwgdGhpcyk7Ci0gICAg
RmxzU2V0VmFsdWUoZmxzS2V5cygpW21faW5kZXhdLCBkYXRhKTsKLX0KLQotI2Vsc2UKLSNlcnJv
ciBUaHJlYWRTcGVjaWZpYyBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0uCi0j
ZW5kaWYKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgQ2FuQmVHQ1RocmVhZCBjYW5CZUdDVGhyZWFk
PgotaW5saW5lIHZvaWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgVGhyZWFkU3BlY2lmaWM8VCwgY2Fu
QmVHQ1RocmVhZD46OmRlc3Ryb3kodm9pZCogcHRyKQotewotICAgIERhdGEqIGRhdGEgPSBzdGF0
aWNfY2FzdDxEYXRhKj4ocHRyKTsKLQotI2lmIFVTRShQVEhSRUFEUykKLSAgICAvLyBXZSB3YW50
IGdldCgpIHRvIGtlZXAgd29ya2luZyB3aGlsZSBkYXRhIGRlc3RydWN0b3Igd29ya3MsIGJlY2F1
c2UgaXQgY2FuIGJlIGNhbGxlZCBpbmRpcmVjdGx5IGJ5IHRoZSBkZXN0cnVjdG9yLgotICAgIC8v
IFNvbWUgcHRocmVhZHMgaW1wbGVtZW50YXRpb25zIHplcm8gb3V0IHRoZSBwb2ludGVyIGJlZm9y
ZSBjYWxsaW5nIGRlc3Ryb3koKSwgc28gd2UgdGVtcG9yYXJpbHkgcmVzZXQgaXQuCi0gICAgcHRo
cmVhZF9zZXRzcGVjaWZpYyhkYXRhLT5vd25lci0+bV9rZXksIHB0cik7Ci0jZW5kaWYKLQotICAg
IGRhdGEtPnZhbHVlLT5+VCgpOwotICAgIGZhc3RGcmVlKGRhdGEtPnZhbHVlKTsKLQotI2lmIFVT
RShQVEhSRUFEUykKLSAgICBwdGhyZWFkX3NldHNwZWNpZmljKGRhdGEtPm93bmVyLT5tX2tleSwg
MCk7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAgIEZsc1NldFZhbHVlKGZsc0tleXMoKVtkYXRhLT5v
d25lci0+bV9pbmRleF0sIDApOwotI2Vsc2UKLSNlcnJvciBUaHJlYWRTcGVjaWZpYyBpcyBub3Qg
aW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0uCi0jZW5kaWYKLQotICAgIGRlbGV0ZSBkYXRh
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBDYW5CZUdDVGhyZWFkIGNhbkJlR0NUaHJlYWQ+
Ci1pbmxpbmUgYm9vbCBUaHJlYWRTcGVjaWZpYzxULCBjYW5CZUdDVGhyZWFkPjo6aXNTZXQoKQot
ewotICAgIHJldHVybiAhIWdldCgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBDYW5CZUdD
VGhyZWFkIGNhbkJlR0NUaHJlYWQ+Ci1pbmxpbmUgVGhyZWFkU3BlY2lmaWM8VCwgY2FuQmVHQ1Ro
cmVhZD46Om9wZXJhdG9yIFQqKCkKLXsKLSAgICBUKiBwdHIgPSBzdGF0aWNfY2FzdDxUKj4oZ2V0
KCkpOwotICAgIGlmICghcHRyKSB7Ci0gICAgICAgIC8vIFNldCB1cCB0aHJlYWQtc3BlY2lmaWMg
dmFsdWUncyBtZW1vcnkgcG9pbnRlciBiZWZvcmUgaW52b2tpbmcgY29uc3RydWN0b3IsIGluIGNh
c2UgYW55IGZ1bmN0aW9uIGl0IGNhbGxzCi0gICAgICAgIC8vIG5lZWRzIHRvIGFjY2VzcyB0aGUg
dmFsdWUsIHRvIGF2b2lkIHJlY3Vyc2lvbi4KLSAgICAgICAgcHRyID0gc3RhdGljX2Nhc3Q8VCo+
KGZhc3RaZXJvZWRNYWxsb2Moc2l6ZW9mKFQpKSk7Ci0gICAgICAgIHNldChwdHIpOwotICAgICAg
ICBuZXcgKE5vdE51bGwsIHB0cikgVDsKLSAgICB9Ci0gICAgcmV0dXJuIHB0cjsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgQ2FuQmVHQ1RocmVhZCBjYW5CZUdDVGhyZWFkPgotaW5saW5lIFQq
IFRocmVhZFNwZWNpZmljPFQsIGNhbkJlR0NUaHJlYWQ+OjpvcGVyYXRvci0+KCkKLXsKLSAgICBy
ZXR1cm4gb3BlcmF0b3IgVCooKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgQ2FuQmVHQ1Ro
cmVhZCBjYW5CZUdDVGhyZWFkPgotaW5saW5lIFQmIFRocmVhZFNwZWNpZmljPFQsIGNhbkJlR0NU
aHJlYWQ+OjpvcGVyYXRvciooKQotewotICAgIHJldHVybiAqb3BlcmF0b3IgVCooKTsKLX0KLQot
I2lmIFVTRShXRUJfVEhSRUFEKQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgQ2FuQmVHQ1RocmVhZCBj
YW5CZUdDVGhyZWFkPgotaW5saW5lIHZvaWQgVGhyZWFkU3BlY2lmaWM8VCwgY2FuQmVHQ1RocmVh
ZD46OnJlcGxhY2UoVCogbmV3UHRyKQotewotICAgIEFTU0VSVChuZXdQdHIpOwotICAgIERhdGEq
IGRhdGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4ocHRocmVhZF9nZXRzcGVjaWZpYyhtX2tleSkpOwot
ICAgIEFTU0VSVChkYXRhKTsKLSAgICBkYXRhLT52YWx1ZS0+flQoKTsKLSAgICBmYXN0RnJlZShk
YXRhLT52YWx1ZSk7Ci0gICAgZGF0YS0+dmFsdWUgPSBuZXdQdHI7Ci19Ci0jZW5kaWYKLQotfSAv
LyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBXVEZfVGhyZWFkU3BlY2lmaWNfaApkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1RocmVhZGluZy5jcHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvVGhyZWFkaW5nLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYjNmZmE3Y2Y3MTkzYTYwOTgwZGU3MmUxMDBlMGE0MDc4MjYw
ZDY0Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvVGhyZWFkaW5nLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRocmVhZGluZy5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNt
YXRoPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8dGhyZWFkPgotI2luY2x1ZGUgPHd0
Zi9EYXRlTWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0
Zi9SYW5kb21OdW1iZXJTZWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZEdyb3VwLmg+Ci0jaW5j
bHVkZSA8d3RmL1RocmVhZEhvbGRlci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+
Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KLSNpbmNsdWRlIDx3dGYvV1RG
VGhyZWFkRGF0YS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KLQotI2lmIEhB
VkUoUU9TX0NMQVNTRVMpCi0jaW5jbHVkZSA8Ym1hbGxvYy9ibWFsbG9jLmg+Ci0jZW5kaWYKLQot
bmFtZXNwYWNlIFdURiB7Ci0KLXN0cnVjdCBUaHJlYWQ6Ok5ld1RocmVhZENvbnRleHQgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TmV3VGhyZWFkQ29udGV4dD4gewotcHVibGljOgotICAg
IE5ld1RocmVhZENvbnRleHQoY29uc3QgY2hhciogbmFtZSwgRnVuY3Rpb248dm9pZCgpPiYmIGVu
dHJ5UG9pbnQsIFJlZjxUaHJlYWQ+JiYgdGhyZWFkKQotICAgICAgICA6IG5hbWUobmFtZSkKLSAg
ICAgICAgLCBlbnRyeVBvaW50KFdURk1vdmUoZW50cnlQb2ludCkpCi0gICAgICAgICwgdGhyZWFk
KFdURk1vdmUodGhyZWFkKSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogbmFtZTsK
LSAgICBGdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQ7Ci0gICAgUmVmPFRocmVhZD4gdGhyZWFk
OwotICAgIE11dGV4IG11dGV4OwotICAgIGVudW0gY2xhc3MgU3RhZ2UgeyBTdGFydCwgRXN0YWJs
aXNoZWRIYW5kbGUsIEluaXRpYWxpemVkIH07Ci0gICAgU3RhZ2Ugc3RhZ2UgeyBTdGFnZTo6U3Rh
cnQgfTsKLQotI2lmICFIQVZFKFNUQUNLX0JPVU5EU19GT1JfTkVXX1RIUkVBRCkKLSAgICBUaHJl
YWRDb25kaXRpb24gY29uZGl0aW9uOwotI2VuZGlmCi19OwotCi1jb25zdCBjaGFyKiBUaHJlYWQ6
Om5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKLXsKLSNpZiBIQVZF
KFBUSFJFQURfU0VUTkFNRV9OUCkKLSAgICByZXR1cm4gdGhyZWFkTmFtZTsKLSNlbHNlCi0gICAg
Ly8gVGhpcyBuYW1lIGNhbiBiZSBjb20uYXBwbGUuV2ViS2l0LlByb2Nlc3NMYXVuY2hlciBvciBj
b20uYXBwbGUuQ29yZUlQQy5SZWNlaXZlUXVldWUuCi0gICAgLy8gV2UgYXJlIHVzaW5nIHRob3Nl
IG5hbWVzIGZvciB0aGUgdGhyZWFkIG5hbWUsIGJ1dCBib3RoIGFyZSBsb25nZXIgdGhhbiB0aGUg
bGltaXQgb2YKLSAgICAvLyB0aGUgcGxhdGZvcm0gdGhyZWFkIG5hbWUgbGVuZ3RoLCAzMiBmb3Ig
V2luZG93cyBhbmQgMTYgZm9yIExpbnV4LgotICAgIFN0cmluZ1ZpZXcgcmVzdWx0KHRocmVhZE5h
bWUpOwotICAgIHNpemVfdCBzaXplID0gcmVzdWx0LnJldmVyc2VGaW5kKCcuJyk7Ci0gICAgaWYg
KHNpemUgIT0gbm90Rm91bmQpCi0gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoc2l6
ZSArIDEpOwotCi0jaWYgT1MoV0lORE9XUykKLSAgICBjb25zdGV4cHIgY29uc3Qgc2l6ZV90IGtW
aXN1YWxTdHVkaW9UaHJlYWROYW1lTGltaXQgPSAzMiAtIDE7Ci0gICAgaWYgKHJlc3VsdC5sZW5n
dGgoKSA+IGtWaXN1YWxTdHVkaW9UaHJlYWROYW1lTGltaXQpCi0gICAgICAgIHJlc3VsdCA9IHJl
c3VsdC5yaWdodChrVmlzdWFsU3R1ZGlvVGhyZWFkTmFtZUxpbWl0KTsKLSNlbGlmIE9TKExJTlVY
KQotICAgIGNvbnN0ZXhwciBjb25zdCBzaXplX3Qga0xpbnV4VGhyZWFkTmFtZUxpbWl0ID0gMTYg
LSAxOwotICAgIGlmIChyZXN1bHQubGVuZ3RoKCkgPiBrTGludXhUaHJlYWROYW1lTGltaXQpCi0g
ICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yaWdodChrTGludXhUaHJlYWROYW1lTGltaXQpOwotI2Vu
ZGlmCi0gICAgQVNTRVJUKHJlc3VsdC5jaGFyYWN0ZXJzOCgpW3Jlc3VsdC5sZW5ndGgoKV0gPT0g
J1wwJyk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHJlc3VsdC5j
aGFyYWN0ZXJzOCgpKTsKLSNlbmRpZgotfQotCi12b2lkIFRocmVhZDo6ZW50cnlQb2ludChOZXdU
aHJlYWRDb250ZXh0KiBuZXdUaHJlYWRDb250ZXh0KQotewotICAgIEZ1bmN0aW9uPHZvaWQoKT4g
ZnVuY3Rpb247Ci0gICAgewotICAgICAgICAvLyBSZWYgaXMgYWxyZWFkeSBpbmNyZW1lbnRlZCBi
eSBUaHJlYWQ6OmNyZWF0ZS4KLSAgICAgICAgUmVmPE5ld1RocmVhZENvbnRleHQ+IGNvbnRleHQg
PSBhZG9wdFJlZigqbmV3VGhyZWFkQ29udGV4dCk7Ci0gICAgICAgIC8vIEJsb2NrIHVudGlsIG91
ciBjcmVhdGluZyB0aHJlYWQgaGFzIGNvbXBsZXRlZCBhbnkgZXh0cmEgc2V0dXAgd29yaywgaW5j
bHVkaW5nIGVzdGFibGlzaGluZyBUaHJlYWRJZGVudGlmaWVyLgotICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIoY29udGV4dC0+bXV0ZXgpOwotICAgICAgICBBU1NFUlQoY29udGV4dC0+c3RhZ2Ug
PT0gTmV3VGhyZWFkQ29udGV4dDo6U3RhZ2U6OkVzdGFibGlzaGVkSGFuZGxlKTsKLQotICAgICAg
ICAvLyBJbml0aWFsaXplIHRocmVhZCBob2xkZXIgd2l0aCBlc3RhYmxpc2hlZCBJRC4KLSAgICAg
ICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKGNvbnRleHQtPnRocmVhZC5nZXQoKSk7Ci0KLSAg
ICAgICAgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnRleHQtPm5h
bWUpOwotICAgICAgICBmdW5jdGlvbiA9IFdURk1vdmUoY29udGV4dC0+ZW50cnlQb2ludCk7Ci0K
LSNpZiAhSEFWRShTVEFDS19CT1VORFNfRk9SX05FV19USFJFQUQpCi0gICAgICAgIGNvbnRleHQt
PnRocmVhZC0+bV9zdGFjayA9IFN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tCb3VuZHMo
KTsKLSAgICAgICAgLy8gQWNrIGNvbXBsZXRpb24gb2YgaW5pdGlhbGl6YXRpb24gdG8gdGhlIGNy
ZWF0aW5nIHRocmVhZC4KLSAgICAgICAgY29udGV4dC0+c3RhZ2UgPSBOZXdUaHJlYWRDb250ZXh0
OjpTdGFnZTo6SW5pdGlhbGl6ZWQ7Ci0gICAgICAgIGNvbnRleHQtPmNvbmRpdGlvbi5zaWduYWwo
KTsKLSNlbmRpZgotICAgIH0KLQotICAgIEFTU0VSVCghVGhyZWFkOjpjdXJyZW50KCkuc3RhY2so
KS5pc0VtcHR5KCkpOwotICAgIGZ1bmN0aW9uKCk7Ci19Ci0KLVJlZlB0cjxUaHJlYWQ+IFRocmVh
ZDo6Y3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBlbnRyeVBvaW50
KQotewotICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcgVGhyZWFkKCkpOwot
ICAgIFJlZjxOZXdUaHJlYWRDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRSZWYoKm5ldyBOZXdUaHJl
YWRDb250ZXh0IHsgbmFtZSwgV1RGTW92ZShlbnRyeVBvaW50KSwgdGhyZWFkLmNvcHlSZWYoKSB9
KTsKLSAgICAvLyBJbmNyZW1lbnQgdGhlIGNvbnRleHQgcmVmIG9uIGJlaGFsZiBvZiB0aGUgY3Jl
YXRlZCB0aHJlYWQuIFdlIGRvIG5vdCBqdXN0IHVzZSBhIHVuaXF1ZV9wdHIgYW5kIGxlYWsgaXQg
dG8gdGhlIGNyZWF0ZWQgdGhyZWFkIGJlY2F1c2UgYm90aCB0aGUgY3JlYXRvciBhbmQgY3JlYXRl
ZCB0aHJlYWQgaGFzIGEgbmVlZCB0byBrZWVwIHRoZSBjb250ZXh0IGFsaXZlOgotICAgIC8vIDEu
IHRoZSBjcmVhdGVkIHRocmVhZCBuZWVkcyB0byBrZWVwIGl0IGFsaXZlIGJlY2F1c2UgVGhyZWFk
OjpjcmVhdGUoKSBjYW4gZXhpdCBiZWZvcmUgdGhlIGNyZWF0ZWQgdGhyZWFkIGhhcyBhIGNoYW5j
ZSB0byB1c2UgdGhlIGNvbnRleHQuCi0gICAgLy8gMi4gdGhlIGNyZWF0b3IgdGhyZWFkIChpZiBI
QVZFKFNUQUNLX0JPVU5EU19GT1JfTkVXX1RIUkVBRCkgaXMgZmFsc2UpIG5lZWRzIHRvIGtlZXAg
aXQgYWxpdmUgYmVjYXVzZSB0aGUgY3JlYXRlZCB0aHJlYWQgbWF5IGV4aXQgYmVmb3JlIHRoZSBj
cmVhdG9yIGhhcyBhIGNoYW5jZSB0byB3YWtlIHVwIGZyb20gd2FpdGluZyBmb3IgdGhlIGNvbXBs
ZXRpb24gb2YgdGhlIGNyZWF0ZWQgdGhyZWFkJ3MgaW5pdGlhbGl6YXRpb24uIFRoaXMgd2FpdGlu
ZyB1c2VzIGEgY29uZGl0aW9uIHZhcmlhYmxlIGluIHRoZSBjb250ZXh0LgotICAgIC8vIEhlbmNl
LCBhIGpvaW50IG93bmVyc2hpcCBtb2RlbCBpcyBuZWVkZWQgaWYgSEFWRShTVEFDS19CT1VORFNf
Rk9SX05FV19USFJFQUQpIGlzIGZhbHNlLiBUbyBzaW1wbGlmeSB0aGUgY29kZSwgd2UganVzdCBn
byB3aXRoIGpvaW50IG93bmVyc2hpcCBieSBib3RoIHRoZSBjcmVhdG9yIGFuZCBjcmVhdGVkIHRo
cmVhZHMsCi0gICAgLy8gYW5kIG1ha2UgdGhlIGNvbnRleHQgVGhyZWFkU2FmZVJlZkNvdW50ZWQu
Ci0gICAgY29udGV4dC0+cmVmKCk7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
Y29udGV4dC0+bXV0ZXgpOwotICAgICAgICBpZiAoIXRocmVhZC0+ZXN0YWJsaXNoSGFuZGxlKGNv
bnRleHQucHRyKCkpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5kZXJlZigpOwotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGV4dC0+c3RhZ2UgPSBO
ZXdUaHJlYWRDb250ZXh0OjpTdGFnZTo6RXN0YWJsaXNoZWRIYW5kbGU7Ci0KLSNpZiBIQVZFKFNU
QUNLX0JPVU5EU19GT1JfTkVXX1RIUkVBRCkKLSAgICAgICAgdGhyZWFkLT5tX3N0YWNrID0gU3Rh
Y2tCb3VuZHM6Om5ld1RocmVhZFN0YWNrQm91bmRzKHRocmVhZC0+bV9oYW5kbGUpOwotI2Vsc2UK
LSAgICAgICAgLy8gSW4gcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFN0YWNrQm91bmRz
OjpuZXdUaHJlYWRTdGFja0JvdW5kcygpLCB3ZSBkbyBub3QgaGF2ZSBhIHdheSB0byBnZXQgc3Rh
Y2sKLSAgICAgICAgLy8gYm91bmRzIG91dHNpZGUgdGhlIHRhcmdldCB0aHJlYWQgaXRzZWxmLiBU
aHVzLCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgdGhyZWFkIGluZm9ybWF0aW9uIGluIHRoZSB0YXJn
ZXQgdGhyZWFkCi0gICAgICAgIC8vIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uIG9mIGluaXRpYWxp
emF0aW9uIGluIHRoZSBjYWxsZXIgc2lkZS4KLSAgICAgICAgd2hpbGUgKGNvbnRleHQtPnN0YWdl
ICE9IE5ld1RocmVhZENvbnRleHQ6OlN0YWdlOjpJbml0aWFsaXplZCkKLSAgICAgICAgICAgIGNv
bnRleHQtPmNvbmRpdGlvbi53YWl0KGNvbnRleHQtPm11dGV4KTsKLSNlbmRpZgotICAgIH0KLQot
ICAgIEFTU0VSVCghdGhyZWFkLT5zdGFjaygpLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIFdURk1v
dmUodGhyZWFkKTsKLX0KLQotVGhyZWFkKiBUaHJlYWQ6OmN1cnJlbnRNYXlCZU51bGwoKQotewot
ICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOwotICAgIGlm
IChkYXRhKQotICAgICAgICByZXR1cm4gJmRhdGEtPnRocmVhZCgpOwotICAgIHJldHVybiBudWxs
cHRyOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRSZW1vdmVUaHJlYWRGcm9tVGhyZWFkR3JvdXAo
KQotewotI2lmIE9TKFdJTkRPV1MpCi0gICAgLy8gT24gV2luZG93cyB0aGUgdGhyZWFkIHNwZWNp
ZmljIGRlc3RydWN0b3IgaXMgYWxzbyBjYWxsZWQgd2hlbiB0aGUKLSAgICAvLyBtYWluIHRocmVh
ZCBpcyBleGl0aW5nLiBUaGlzIG1heSBsZWFkIHRvIHRoZSBtYWluIHRocmVhZCB3YWl0aW5nCi0g
ICAgLy8gZm9yZXZlciBmb3IgdGhlIHRocmVhZCBncm91cCBsb2NrIHdoZW4gZXhpdGluZywgaWYg
dGhlIHNhbXBsaW5nCi0gICAgLy8gcHJvZmlsZXIgdGhyZWFkIHdhcyB0ZXJtaW5hdGVkIGJ5IHRo
ZSBzeXN0ZW0gd2hpbGUgaG9sZGluZyB0aGUKLSAgICAvLyB0aHJlYWQgZ3JvdXAgbG9jay4KLSAg
ICBpZiAoV1RGOjppc01haW5UaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVGhyZWFkOjpkaWRFeGl0KCkKLXsKLSAgICBp
ZiAoc2hvdWxkUmVtb3ZlVGhyZWFkRnJvbVRocmVhZEdyb3VwKCkpIHsKLSAgICAgICAgVmVjdG9y
PHN0ZDo6c2hhcmVkX3B0cjxUaHJlYWRHcm91cD4+IHRocmVhZEdyb3VwczsKLSAgICAgICAgewot
ICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgdGhyZWFkR3JvdXAgOiBtX3RocmVhZEdyb3Vwcykgewot
ICAgICAgICAgICAgICAgIC8vIElmIFRocmVhZEdyb3VwIGlzIGp1c3QgYmVpbmcgZGVzdHJveWVk
LAotICAgICAgICAgICAgICAgIC8vIHdlIGRvIG5vdCBuZWVkIHRvIHBlcmZvcm0gdW5yZWdpc3Rl
cmluZy4KLSAgICAgICAgICAgICAgICBpZiAoYXV0byByZXRhaW5lZCA9IHRocmVhZEdyb3VwLmxv
Y2soKSkKLSAgICAgICAgICAgICAgICAgICAgdGhyZWFkR3JvdXBzLmFwcGVuZChXVEZNb3ZlKHJl
dGFpbmVkKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2lzU2h1dHRpbmdEb3duID0g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIHRocmVhZEdyb3VwIDogdGhyZWFk
R3JvdXBzKSB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gdGhyZWFk
R3JvdXBMb2NrZXIodGhyZWFkR3JvdXAtPmdldExvY2soKSk7Ci0gICAgICAgICAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOwotICAgICAgICAgICAgdGhyZWFk
R3JvdXAtPm1fdGhyZWFkcy5yZW1vdmUoKnRoaXMpOwotICAgICAgICB9Ci0gICAgfQotICAgIC8v
IFdlIHdvdWxkIGxpa2UgdG8gc2F5ICJ0aHJlYWQgaXMgZXhpdGVkIiBhZnRlciB1bnJlZ2lzdGVy
aW5nIHRocmVhZHMgZnJvbSB0aHJlYWQgZ3JvdXBzLgotICAgIC8vIFNvIHdlIG5lZWQgdG8gc2Vw
YXJhdGUgbV9pc1NodXR0aW5nRG93biBmcm9tIG1fZGlkRXhpdC4KLSAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOwotICAgIG1fZGlkRXhpdCA9IHRydWU7Ci19
Ci0KLVRocmVhZEdyb3VwQWRkUmVzdWx0IFRocmVhZDo6YWRkVG9UaHJlYWRHcm91cChjb25zdCBB
YnN0cmFjdExvY2tlciYgdGhyZWFkR3JvdXBMb2NrZXIsIFRocmVhZEdyb3VwJiB0aHJlYWRHcm91
cCkKLXsKLSAgICBVTlVTRURfUEFSQU0odGhyZWFkR3JvdXBMb2NrZXIpOwotICAgIHN0ZDo6bG9j
a19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7Ci0gICAgaWYgKG1faXNTaHV0dGlu
Z0Rvd24pCi0gICAgICAgIHJldHVybiBUaHJlYWRHcm91cEFkZFJlc3VsdDo6Tm90QWRkZWQ7Ci0g
ICAgaWYgKHRocmVhZEdyb3VwLm1fdGhyZWFkcy5hZGQoKnRoaXMpLmlzTmV3RW50cnkpIHsKLSAg
ICAgICAgbV90aHJlYWRHcm91cHMuYXBwZW5kKHRocmVhZEdyb3VwLndlYWtGcm9tVGhpcygpKTsK
LSAgICAgICAgcmV0dXJuIFRocmVhZEdyb3VwQWRkUmVzdWx0OjpOZXdseUFkZGVkOwotICAgIH0K
LSAgICByZXR1cm4gVGhyZWFkR3JvdXBBZGRSZXN1bHQ6OkFscmVhZHlBZGRlZDsKLX0KLQotdm9p
ZCBUaHJlYWQ6OnJlbW92ZUZyb21UaHJlYWRHcm91cChjb25zdCBBYnN0cmFjdExvY2tlciYgdGhy
ZWFkR3JvdXBMb2NrZXIsIFRocmVhZEdyb3VwJiB0aHJlYWRHcm91cCkKLXsKLSAgICBVTlVTRURf
UEFSQU0odGhyZWFkR3JvdXBMb2NrZXIpOwotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4
PiBsb2NrZXIobV9tdXRleCk7Ci0gICAgaWYgKG1faXNTaHV0dGluZ0Rvd24pCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX3RocmVhZEdyb3Vwcy5yZW1vdmVGaXJzdE1hdGNoaW5nKFsmXSAoYXV0byB3
ZWFrUHRyKSB7Ci0gICAgICAgIGlmIChhdXRvIHNoYXJlZFB0ciA9IHdlYWtQdHIubG9jaygpKQot
ICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFB0ci5nZXQoKSA9PSAmdGhyZWFkR3JvdXA7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9KTsKLX0KLQotdm9pZCBUaHJlYWQ6OnNldEN1cnJlbnRU
aHJlYWRJc1VzZXJJbnRlcmFjdGl2ZShpbnQgcmVsYXRpdmVQcmlvcml0eSkKLXsKLSNpZiBIQVZF
KFFPU19DTEFTU0VTKQotICAgIEFTU0VSVChyZWxhdGl2ZVByaW9yaXR5IDw9IDApOwotICAgIEFT
U0VSVChyZWxhdGl2ZVByaW9yaXR5ID49IFFPU19NSU5fUkVMQVRJVkVfUFJJT1JJVFkpOwotICAg
IHB0aHJlYWRfc2V0X3Fvc19jbGFzc19zZWxmX25wKGFkanVzdGVkUU9TQ2xhc3MoUU9TX0NMQVNT
X1VTRVJfSU5URVJBQ1RJVkUpLCByZWxhdGl2ZVByaW9yaXR5KTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHJlbGF0aXZlUHJpb3JpdHkpOwotI2VuZGlmCi19Ci0KLXZvaWQgVGhyZWFkOjpzZXRD
dXJyZW50VGhyZWFkSXNVc2VySW5pdGlhdGVkKGludCByZWxhdGl2ZVByaW9yaXR5KQotewotI2lm
IEhBVkUoUU9TX0NMQVNTRVMpCi0gICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkgPD0gMCk7Ci0g
ICAgQVNTRVJUKHJlbGF0aXZlUHJpb3JpdHkgPj0gUU9TX01JTl9SRUxBVElWRV9QUklPUklUWSk7
Ci0gICAgcHRocmVhZF9zZXRfcW9zX2NsYXNzX3NlbGZfbnAoYWRqdXN0ZWRRT1NDbGFzcyhRT1Nf
Q0xBU1NfVVNFUl9JTklUSUFURUQpLCByZWxhdGl2ZVByaW9yaXR5KTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHJlbGF0aXZlUHJpb3JpdHkpOwotI2VuZGlmCi19Ci0KLSNpZiBIQVZFKFFPU19D
TEFTU0VTKQotc3RhdGljIHFvc19jbGFzc190IGdsb2JhbE1heFFPU2NsYXNzIHsgUU9TX0NMQVNT
X1VOU1BFQ0lGSUVEIH07Ci0KLXZvaWQgVGhyZWFkOjpzZXRHbG9iYWxNYXhRT1NDbGFzcyhxb3Nf
Y2xhc3NfdCBtYXhDbGFzcykKLXsKLSAgICBibWFsbG9jOjphcGk6OnNldFNjYXZlbmdlclRocmVh
ZFFPU0NsYXNzKG1heENsYXNzKTsKLSAgICBnbG9iYWxNYXhRT1NjbGFzcyA9IG1heENsYXNzOwot
fQotCi1xb3NfY2xhc3NfdCBUaHJlYWQ6OmFkanVzdGVkUU9TQ2xhc3MocW9zX2NsYXNzX3Qgb3Jp
Z2luYWxDbGFzcykKLXsKLSAgICBpZiAoZ2xvYmFsTWF4UU9TY2xhc3MgIT0gUU9TX0NMQVNTX1VO
U1BFQ0lGSUVEKQotICAgICAgICByZXR1cm4gc3RkOjptaW4ob3JpZ2luYWxDbGFzcywgZ2xvYmFs
TWF4UU9TY2xhc3MpOwotICAgIHJldHVybiBvcmlnaW5hbENsYXNzOwotfQotI2VuZGlmCi0KLXZv
aWQgVGhyZWFkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50
KG1faWQpOwotfQotCi12b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQotewotICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplS2V5OwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxp
emVLZXksIFtdIHsKLSAgICAgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25jZSgpOwotICAg
ICAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7Ci0gICAgICAgIHd0ZlRocmVh
ZERhdGEoKTsKLSAgICAgICAgaW5pdGlhbGl6ZURhdGVzKCk7Ci0gICAgICAgIFRocmVhZDo6aW5p
dGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKCk7Ci0gICAgfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1RocmVh
ZGluZy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1RocmVhZGluZy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjUwYmZhODliNzY4YmMwODE4YzYzOTg5ZDJm
ZjNmNWUyYzQxOTI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9UaHJlYWRpbmcuaAorKysgL2Rl
di9udWxsCkBAIC0xLDI0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEp1
c3RpbiBIYXlnb29kIDxqaGF5Z29vZEByZWFrdGl4LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAx
NyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Ci0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRocmVhZGluZ19oCi0jZGVm
aW5lIFRocmVhZGluZ19oCi0KLSNpbmNsdWRlIDxtdXRleD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4K
LSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3RhY2tCb3VuZHMuaD4K
LSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLSNpZiBVU0UoUFRIUkVBRFMpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c2Vt
YXBob3JlLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7
Ci0KLWNsYXNzIEFic3RyYWN0TG9ja2VyOwotY2xhc3MgVGhyZWFkTWVzc2FnZURhdGE7Ci0KLWVu
dW0gY2xhc3MgVGhyZWFkR3JvdXBBZGRSZXN1bHQ7Ci0KLXVzaW5nIFRocmVhZElkZW50aWZpZXIg
PSB1aW50MzJfdDsKLXR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBhcmd1bWVu
dCk7Ci0KLWNsYXNzIFRocmVhZEdyb3VwOwotY2xhc3MgVGhyZWFkSG9sZGVyOwotY2xhc3MgUHJp
bnRTdHJlYW07Ci0KLWNsYXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxU
aHJlYWQ+IHsKLXB1YmxpYzoKLSAgICBmcmllbmQgY2xhc3MgVGhyZWFkR3JvdXA7Ci0gICAgZnJp
ZW5kIGNsYXNzIFRocmVhZEhvbGRlcjsKLQotICAgIFdURl9FWFBPUlRfUFJJVkFURSB+VGhyZWFk
KCk7Ci0KLSAgICAvLyBSZXR1cm5zIG51bGxwdHIgaWYgdGhyZWFkIGNyZWF0aW9uIGZhaWxlZC4K
LSAgICAvLyBUaGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBhIGxpdGVyYWwgc2luY2Ugb24gc29tZSBw
bGF0Zm9ybXMgaXQncyBwYXNzZWQgaW4gdG8gdGhlIHRocmVhZC4KLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFJlZlB0cjxUaHJlYWQ+IGNyZWF0ZShjb25zdCBjaGFyKiB0aHJlYWROYW1l
LCBGdW5jdGlvbjx2b2lkKCk+JiYpOwotCi0gICAgLy8gUmV0dXJucyBUaHJlYWQgb2JqZWN0Lgot
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkJiBjdXJyZW50KCk7Ci0gICAgc3Rh
dGljIFRocmVhZCogY3VycmVudE1heUJlTnVsbCgpOwotCi0gICAgLy8gUmV0dXJucyBUaHJlYWRJ
ZGVudGlmaWVyIGRpcmVjdGx5LiBJdCBpcyB1c2VmdWwgaWYgdGhlIHVzZXIgb25seSBjYXJlcyBh
Ym91dCBpZGVudGl0eQotICAgIC8vIG9mIHRocmVhZHMuIEF0IHRoYXQgdGltZSwgdXNlcnMgc2hv
dWxkIGtub3cgdGhhdCBob2xkaW5nIHRoaXMgVGhyZWFkSWRlbnRpZmllciBkb2VzIG5vdCBlbnN1
cmUKLSAgICAvLyB0aGF0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gaXMgYWxpdmUuIFdoaWxlIFRo
cmVhZDo6Y3VycmVudCgpIGlzIG5vdCBzYWZlIGlmIGl0IGlzIGNhbGxlZAotICAgIC8vIGZyb20g
dGhlIGRlc3RydWN0b3Igb2YgdGhlIG90aGVyIFRMUyBkYXRhLCBjdXJyZW50SUQoKSBhbHdheXMg
cmV0dXJucyBtZWFuaW5nZnVsIHRocmVhZCBJRC4KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFRocmVhZElkZW50aWZpZXIgY3VycmVudElEKCk7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBjaGFuZ2VQcmlvcml0eShpbnQpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBpbnQg
d2FpdEZvckNvbXBsZXRpb24oKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXRhY2go
KTsKLQotI2lmIE9TKERBUldJTikKLSAgICB1c2luZyBQbGF0Zm9ybVN1c3BlbmRFcnJvciA9IGtl
cm5fcmV0dXJuX3Q7Ci0jZWxpZiBVU0UoUFRIUkVBRFMpCi0gICAgdXNpbmcgUGxhdGZvcm1TdXNw
ZW5kRXJyb3IgPSBpbnQ7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAgIHVzaW5nIFBsYXRmb3JtU3Vz
cGVuZEVycm9yID0gRFdPUkQ7Ci0jZW5kaWYKLQotICAgIFdURl9FWFBPUlRfUFJJVkFURSBFeHBl
Y3RlZDx2b2lkLCBQbGF0Zm9ybVN1c3BlbmRFcnJvcj4gc3VzcGVuZCgpOwotICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIHJlc3VtZSgpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3Qg
Z2V0UmVnaXN0ZXJzKFBsYXRmb3JtUmVnaXN0ZXJzJik7Ci0KLSNpZiBVU0UoUFRIUkVBRFMpCi0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgc2lnbmFsKGludCBzaWduYWxOdW1iZXIpOwotI2Vu
ZGlmCi0KLSAgICAvLyBNYXJrIHRoZSBjdXJyZW50IHRocmVhZCBhcyByZXF1aXJpbmcgVUkgcmVz
cG9uc2l2ZW5lc3MuCi0gICAgLy8gcmVsYXRpdmVQcmlvcml0eSBpcyBhIHZhbHVlIGluIHRoZSBy
YW5nZSBbLTE1LCAwXSB3aGVyZSBhIGxvd2VyIHZhbHVlIGluZGljYXRlcyBhIGxvd2VyIHByaW9y
aXR5LgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRDdXJyZW50VGhyZWFk
SXNVc2VySW50ZXJhY3RpdmUoaW50IHJlbGF0aXZlUHJpb3JpdHkgPSAwKTsKLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0Q3VycmVudFRocmVhZElzVXNlckluaXRpYXRlZChp
bnQgcmVsYXRpdmVQcmlvcml0eSA9IDApOwotCi0jaWYgSEFWRShRT1NfQ0xBU1NFUykKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0R2xvYmFsTWF4UU9TQ2xhc3MocW9zX2Ns
YXNzX3QpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgcW9zX2NsYXNzX3QgYWRqdXN0
ZWRRT1NDbGFzcyhxb3NfY2xhc3NfdCk7Ci0jZW5kaWYKLQotICAgIC8vIENhbGxlZCBpbiB0aGUg
dGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KLSAgICAvLyBIZWxwZnVsIGZvciBwbGF0Zm9y
bXMgd2hlcmUgdGhlIHRocmVhZCBuYW1lIG11c3QgYmUgc2V0IGZyb20gd2l0aGluIHRoZSB0aHJl
YWQuCi0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25z
dCBjaGFyKiB0aHJlYWROYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVudFRo
cmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKLSAgICAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvY2tTcGluTGltaXQ7Ci0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIHlpZWxkKCk7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaHJl
YWQmIHRocmVhZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpZCgpID09IHRocmVhZC5pZCgpOwot
ICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUaHJlYWQmIHRocmVhZCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBpZCgpICE9IHRocmVhZC5pZCgpOwotICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIGluaXRpYWxpemVQbGF0Zm9ybVRocmVhZGluZygpOwotCi0gICAgY29uc3QgU3RhY2tC
b3VuZHMmIHN0YWNrKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0YWNrOwotICAg
IH0KLQotI2lmIE9TKERBUldJTikKLSAgICBtYWNoX3BvcnRfdCBtYWNoVGhyZWFkKCkgeyByZXR1
cm4gbV9wbGF0Zm9ybVRocmVhZDsgfQotI2VuZGlmCi0KLSAgICBzdHJ1Y3QgTmV3VGhyZWFkQ29u
dGV4dDsKLSAgICBzdGF0aWMgdm9pZCBlbnRyeVBvaW50KE5ld1RocmVhZENvbnRleHQqKTsKLXBy
b3RlY3RlZDoKLSAgICBUaHJlYWQoKTsKLQotICAgIC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNp
ZmljIFRocmVhZCBlc3RhYmxpc2htZW50IGltcGxlbWVudGF0aW9uLgotICAgIGJvb2wgZXN0YWJs
aXNoSGFuZGxlKE5ld1RocmVhZENvbnRleHQqKTsKLQotI2lmIFVTRShQVEhSRUFEUykKLSAgICB2
b2lkIGVzdGFibGlzaFBsYXRmb3JtU3BlY2lmaWNIYW5kbGUocHRocmVhZF90KTsKLSNlbHNlCi0g
ICAgdm9pZCBlc3RhYmxpc2hQbGF0Zm9ybVNwZWNpZmljSGFuZGxlKEhBTkRMRSwgVGhyZWFkSWRl
bnRpZmllcik7Ci0jZW5kaWYKLQotI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKLSAg
ICBzdGF0aWMgdm9pZCBzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZShpbnQsIHNpZ2luZm9fdCos
IHZvaWQqIHVjb250ZXh0KTsKLSNlbmRpZgotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIG5vcm1h
bGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7Ci0KLSAgICBlbnVtIEpvaW5h
YmxlU3RhdGUgewotICAgICAgICAvLyBUaGUgZGVmYXVsdCB0aHJlYWQgc3RhdGUuIFRoZSB0aHJl
YWQgY2FuIGJlIGpvaW5lZCBvbi4KLSAgICAgICAgSm9pbmFibGUsCi0KLSAgICAgICAgLy8gU29t
ZWJvZHkgd2FpdGVkIG9uIHRoaXMgdGhyZWFkIHRvIGV4aXQgYW5kIHRoaXMgdGhyZWFkIGZpbmFs
bHkgZXhpdGVkLiBUaGlzIHN0YXRlIGlzIGhlcmUgYmVjYXVzZSB0aGVyZSBjYW4gYmUgYQotICAg
ICAgICAvLyBwZXJpb2Qgb2YgdGltZSBiZXR3ZWVuIHdoZW4gdGhlIHRocmVhZCBleGl0cyAod2hp
Y2ggY2F1c2VzIHB0aHJlYWRfam9pbiB0byByZXR1cm4gYW5kIHRoZSByZW1haW5kZXIgb2Ygd2Fp
dE9uVGhyZWFkQ29tcGxldGlvbiB0byBydW4pCi0gICAgICAgIC8vIGFuZCB3aGVuIHRocmVhZERp
ZEV4aXQgaXMgY2FsbGVkLiBXZSBuZWVkIHRocmVhZERpZEV4aXQgdG8gdGFrZSBjaGFyZ2UgYW5k
IGRlbGV0ZSB0aGUgdGhyZWFkIGRhdGEgc2luY2UgdGhlcmUncwotICAgICAgICAvLyBub2JvZHkg
ZWxzZSB0byBwaWNrIHVwIHRoZSBzbGFjayBpbiB0aGlzIGNhc2UgKHNpbmNlIHdhaXRPblRocmVh
ZENvbXBsZXRpb24gaGFzIGFscmVhZHkgcmV0dXJuZWQpLgotICAgICAgICBKb2luZWQsCi0KLSAg
ICAgICAgLy8gVGhlIHRocmVhZCBoYXMgYmVlbiBkZXRhY2hlZCBhbmQgY2FuIG5vIGxvbmdlciBi
ZSBqb2luZWQgb24uIEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWQgbXVzdCB0YWtlIGNhcmUgb2Yg
Y2xlYW5pbmcgdXAgYWZ0ZXIgaXRzZWxmLgotICAgICAgICBEZXRhY2hlZCwKLSAgICB9OwotCi0g
ICAgSm9pbmFibGVTdGF0ZSBqb2luYWJsZVN0YXRlKCkgeyByZXR1cm4gbV9qb2luYWJsZVN0YXRl
OyB9Ci0gICAgdm9pZCBkaWRCZWNvbWVEZXRhY2hlZCgpIHsgbV9qb2luYWJsZVN0YXRlID0gRGV0
YWNoZWQ7IH0KLSAgICB2b2lkIGRpZEV4aXQoKTsKLSAgICB2b2lkIGRpZEpvaW4oKSB7IG1fam9p
bmFibGVTdGF0ZSA9IEpvaW5lZDsgfQotICAgIGJvb2wgaGFzRXhpdGVkKCkgeyByZXR1cm4gbV9k
aWRFeGl0OyB9Ci0KLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIGZyb20g
VGhyZWFkR3JvdXAuCi0gICAgVGhyZWFkR3JvdXBBZGRSZXN1bHQgYWRkVG9UaHJlYWRHcm91cChj
b25zdCBBYnN0cmFjdExvY2tlciYgdGhyZWFkR3JvdXBMb2NrZXIsIFRocmVhZEdyb3VwJik7Ci0g
ICAgdm9pZCByZW1vdmVGcm9tVGhyZWFkR3JvdXAoY29uc3QgQWJzdHJhY3RMb2NrZXImIHRocmVh
ZEdyb3VwTG9ja2VyLCBUaHJlYWRHcm91cCYpOwotCi0gICAgLy8gV29yZExvY2sgJiBMb2NrIHJl
bHkgb24gVGhyZWFkU3BlY2lmaWMuIEJ1dCBUaHJlYWQgb2JqZWN0IGNhbiBiZSBkZXN0cm95ZWQg
ZXZlbiBhZnRlciBUaHJlYWRTcGVjaWZpYyB0aGluZ3MgYXJlIGRlc3Ryb3llZC4KLSAgICBzdGQ6
Om11dGV4IG1fbXV0ZXg7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX2lkIHsgMCB9OwotICAgIEpv
aW5hYmxlU3RhdGUgbV9qb2luYWJsZVN0YXRlIHsgSm9pbmFibGUgfTsKLSAgICBTdGFja0JvdW5k
cyBtX3N0YWNrIHsgU3RhY2tCb3VuZHM6OmVtcHR5Qm91bmRzKCkgfTsKLSAgICBWZWN0b3I8c3Rk
Ojp3ZWFrX3B0cjxUaHJlYWRHcm91cD4+IG1fdGhyZWFkR3JvdXBzOwotICAgIGJvb2wgbV9pc1No
dXR0aW5nRG93biB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2RpZEV4aXQgeyBmYWxzZSB9OwotI2lm
IFVTRShQVEhSRUFEUykKLSAgICBwdGhyZWFkX3QgbV9oYW5kbGU7Ci0KLSNpZiBPUyhEQVJXSU4p
Ci0gICAgbWFjaF9wb3J0X3QgbV9wbGF0Zm9ybVRocmVhZDsKLSNlbHNlCi0gICAgc2VtX3QgbV9z
ZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lOwotICAgIFBsYXRmb3JtUmVnaXN0ZXJzIG1fcGxhdGZv
cm1SZWdpc3RlcnM7Ci0gICAgdW5zaWduZWQgbV9zdXNwZW5kQ291bnQgeyAwIH07Ci0gICAgc3Rk
OjphdG9taWM8Ym9vbD4gbV9zdXNwZW5kZWQgeyBmYWxzZSB9OwotI2VuZGlmCi0jZWxpZiBPUyhX
SU5ET1dTKQotICAgIEhBTkRMRSBtX2hhbmRsZSB7IElOVkFMSURfSEFORExFX1ZBTFVFIH07Ci0j
ZWxzZQotI2Vycm9yIFVua25vd24gU3lzdGVtCi0jZW5kaWYKLX07Ci0KLS8vIFRoaXMgZnVuY3Rp
b24gY2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWRzLgotV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgaW5pdGlhbGl6ZVRocmVhZGluZygpOwotCi1pbmxpbmUgVGhyZWFkSWRlbnRpZmllciBjdXJy
ZW50VGhyZWFkKCkKLXsKLSAgICByZXR1cm4gVGhyZWFkOjpjdXJyZW50SUQoKTsKLX0KLQotCi0v
LyBGSVhNRTogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcmVtYWluIGJlY2F1c2UgdGhleSBhcmUg
dXNlZCBmcm9tIFdlYktpdCBXaW5kb3dzIHN1cHBvcnQgbGlicmFyeSwKLS8vIFdlYktpdFF1YXJ0
ekNvcmVBZGRpdGlvbnMuZGxsLiBXaGVuIHVwZGF0aW5nIHRoZSBzdXBwb3J0IGxpYnJhcnksIHdl
IHNob3VsZCB1c2UgbmV3IEFQSSBpbnN0ZWFkCi0vLyBhbmQgdGhlIGZvbGxvd2luZyB3b3JrYW91
bmQgc2hvdWxkIGJlIHJlbW92ZWQuIEFuZCBuZXcgY29kZSBzaG91bGQgbm90IHVzZSB0aGUgZm9s
bG93aW5nIEFQSXMuCi0vLyBSZW1vdmUgdGhpcyB3b3JrYXJvdW5kIGNvZGUgd2hlbiA8cmRhcjov
L3Byb2JsZW0vMzE3OTMyMTM+IGlzIGZpeGVkLgotI2lmIE9TKFdJTkRPV1MpCi1XVEZfRVhQT1JU
X1BSSVZBVEUgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24sIHZv
aWQqLCBjb25zdCBjaGFyKiB0aHJlYWROYW1lKTsKLVdURl9FWFBPUlRfUFJJVkFURSBpbnQgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllcik7Ci0jZW5kaWYKLQotfSAvLyBu
YW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6VGhyZWFkSWRlbnRpZmllcjsKLXVzaW5nIFdURjo6
VGhyZWFkOwotdXNpbmcgV1RGOjpjdXJyZW50VGhyZWFkOwotCi0jaWYgT1MoV0lORE9XUykKLXVz
aW5nIFdURjo6Y3JlYXRlVGhyZWFkOwotdXNpbmcgV1RGOjp3YWl0Rm9yVGhyZWFkQ29tcGxldGlv
bjsKLSNlbmRpZgotCi0jZW5kaWYgLy8gVGhyZWFkaW5nX2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmggYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGM0OTlmZGE5Y2FlMWY2ZGY2NGMxZDRlYWE2Y2I1YjZm
OTgxNzcyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLSNpZm5kZWYgVGhyZWFk
aW5nUHJpbWl0aXZlc19oCi0jZGVmaW5lIFRocmVhZGluZ1ByaW1pdGl2ZXNfaAotCi0jaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+Ci0jaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+Ci0KLSNpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KLSNlbmRpZgotCi0jaWYgVVNFKFBUSFJFQURTKQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNl
bmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotI2lmIFVTRShQVEhSRUFEUykKLXVzaW5nIFBsYXRm
b3JtVGhyZWFkSGFuZGxlID0gcHRocmVhZF90OwotdXNpbmcgUGxhdGZvcm1NdXRleCA9IHB0aHJl
YWRfbXV0ZXhfdDsKLXVzaW5nIFBsYXRmb3JtQ29uZGl0aW9uID0gcHRocmVhZF9jb25kX3Q7Ci0j
ZWxpZiBPUyhXSU5ET1dTKQotdXNpbmcgUGxhdGZvcm1UaHJlYWRIYW5kbGUgPSBIQU5ETEU7Ci1z
dHJ1Y3QgUGxhdGZvcm1NdXRleCB7Ci0gICAgQ1JJVElDQUxfU0VDVElPTiBtX2ludGVybmFsTXV0
ZXg7Ci0gICAgc2l6ZV90IG1fcmVjdXJzaW9uQ291bnQ7Ci19Owotc3RydWN0IFBsYXRmb3JtQ29u
ZGl0aW9uIHsKLSAgICBzaXplX3QgbV93YWl0ZXJzR29uZTsKLSAgICBzaXplX3QgbV93YWl0ZXJz
QmxvY2tlZDsKLSAgICBzaXplX3QgbV93YWl0ZXJzVG9VbmJsb2NrOyAKLSAgICBIQU5ETEUgbV9i
bG9ja0xvY2s7Ci0gICAgSEFORExFIG1fYmxvY2tRdWV1ZTsKLSAgICBIQU5ETEUgbV91bmJsb2Nr
TG9jazsKLQotICAgIGJvb2wgdGltZWRXYWl0KFBsYXRmb3JtTXV0ZXgmLCBEV09SRCBkdXJhdGlv
bk1pbGxpc2Vjb25kcyk7Ci0gICAgdm9pZCBzaWduYWwoYm9vbCB1bmJsb2NrQWxsKTsKLX07Ci0j
ZWxzZQotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybU11dGV4OwotdHlwZWRlZiB2b2lkKiBQbGF0Zm9y
bUNvbmRpdGlvbjsKLSNlbmRpZgotICAgIAotY2xhc3MgTXV0ZXggewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKE11dGV4KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIE11dGV4KCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NdXRl
eCgpOwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9jaygpOwotICAgIFdURl9FWFBP
UlRfUFJJVkFURSBib29sIHRyeUxvY2soKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1
bmxvY2soKTsKLQotcHVibGljOgotICAgIFBsYXRmb3JtTXV0ZXgmIGltcGwoKSB7IHJldHVybiBt
X211dGV4OyB9Ci1wcml2YXRlOgotICAgIFBsYXRmb3JtTXV0ZXggbV9tdXRleDsKLX07Ci0KLXR5
cGVkZWYgTG9ja2VyPE11dGV4PiBNdXRleExvY2tlcjsKLQotY2xhc3MgVGhyZWFkQ29uZGl0aW9u
IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRDb25kaXRpb24pOwotcHVibGljOgot
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBUaHJlYWRDb25kaXRpb24oKTsKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgflRocmVhZENvbmRpdGlvbigpOwotICAgIAotICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHdhaXQoTXV0ZXgmIG11dGV4KTsKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNv
bmRpdGlvbiB3YXMgc2lnbmFsZWQgYmVmb3JlIGFic29sdXRlVGltZSwgZmFsc2UgaWYgdGhlIGFi
c29sdXRlVGltZSB3YXMgcmVhY2hlZCBvciBpcyBpbiB0aGUgcGFzdC4KLSAgICAvLyBUaGUgYWJz
b2x1dGVUaW1lIGlzIGluIHNlY29uZHMsIHN0YXJ0aW5nIG9uIEphbnVhcnkgMSwgMTk3MC4gVGhl
IHRpbWUgaXMgYXNzdW1lZCB0byB1c2UgdGhlIHNhbWUgdGltZSB6b25lIGFzIFdURjo6Y3VycmVu
dFRpbWUoKS4KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0aW1lZFdhaXQoTXV0ZXgmLCBk
b3VibGUgYWJzb2x1dGVUaW1lKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzaWduYWwo
KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBicm9hZGNhc3QoKTsKLSAgICAKLXByaXZh
dGU6Ci0gICAgUGxhdGZvcm1Db25kaXRpb24gbV9jb25kaXRpb247Ci19OwotCi0jaWYgT1MoV0lO
RE9XUykKLS8vIFRoZSBhYnNvbHV0ZVRpbWUgaXMgaW4gc2Vjb25kcywgc3RhcnRpbmcgb24gSmFu
dWFyeSAxLCAxOTcwLiBUaGUgdGltZSBpcyBhc3N1bWVkIHRvIHVzZSB0aGUgc2FtZSB0aW1lIHpv
bmUgYXMgV1RGOjpjdXJyZW50VGltZSgpLgotLy8gUmV0dXJucyBhbiBpbnRlcnZhbCBpbiBtaWxs
aXNlY29uZHMgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gb25lIG9mIHRoZSBXaW4zMiB3YWl0IGZ1
bmN0aW9ucyAoZS5nLiwgOjpXYWl0Rm9yU2luZ2xlT2JqZWN0KS4KLVdURl9FWFBPUlRfUFJJVkFU
RSBEV09SRCBhYnNvbHV0ZVRpbWVUb1dhaXRUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIGFic29sdXRl
VGltZSk7Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6TXV0ZXg7
Ci11c2luZyBXVEY6Ok11dGV4TG9ja2VyOwotdXNpbmcgV1RGOjpUaHJlYWRDb25kaXRpb247Ci0K
LSNpZiBPUyhXSU5ET1dTKQotdXNpbmcgV1RGOjphYnNvbHV0ZVRpbWVUb1dhaXRUaW1lb3V0SW50
ZXJ2YWw7Ci0jZW5kaWYKLQotI2VuZGlmIC8vIFRocmVhZGluZ1ByaW1pdGl2ZXNfaApkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1RocmVhZGluZ1B0aHJlYWRz
LmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9UaHJlYWRpbmdQdGhyZWFk
cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZDdjNzEzODYxOTJlOGY0NTU3
ZTMzZjI5YjM1MjE5ODc2NWU3OGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1RocmVhZGluZ1B0
aHJlYWRzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU0MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCA8amhheWdvb2RAcmVha3RpeC5j
b20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRocmVhZGluZy5o
IgotCi0jaWYgVVNFKFBUSFJFQURTKQotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotI2luY2x1ZGUgPHd0
Zi9SYXdQb2ludGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRHcm91cC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRIb2xkZXIuaD4KLSNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5o
PgotCi0jaWYgT1MoTElOVVgpCi0jaW5jbHVkZSA8c3lzL3ByY3RsLmg+Ci0jZW5kaWYKLQotI2lm
ICFDT01QSUxFUihNU1ZDKQotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHNjaGVkLmg+
Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCi0jaWYgIU9TKERBUldJTikgJiYgT1Mo
VU5JWCkKLQotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNp
ZiBPUyhTT0xBUklTKQotI2luY2x1ZGUgPHRocmVhZC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxwdGhy
ZWFkLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkUoUFRIUkVBRF9OUF9IKQotI2luY2x1ZGUgPHB0aHJl
YWRfbnAuaD4KLSNlbmRpZgotCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXN0YXRpYyBT
dGF0aWNMb2NrIGdsb2JhbFN1c3BlbmRMb2NrOwotCi1UaHJlYWQ6OlRocmVhZCgpCi17Ci0jaWYg
IU9TKERBUldJTikKLSAgICBzZW1faW5pdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lLCAv
KiBPbmx5IGF2YWlsYWJsZSBpbiB0aGlzIHByb2Nlc3MuICovIDAsIC8qIEluaXRpYWwgdmFsdWUg
Zm9yIHRoZSBzZW1hcGhvcmUuICovIDApOwotI2VuZGlmCi19Ci0KLVRocmVhZDo6flRocmVhZCgp
Ci17Ci0jaWYgIU9TKERBUldJTikKLSAgICBzZW1fZGVzdHJveSgmbV9zZW1hcGhvcmVGb3JTdXNw
ZW5kUmVzdW1lKTsKLSNlbmRpZgotfQotCi0jaWYgIU9TKERBUldJTikKLQotLy8gV2UgdXNlIFNJ
R1VTUjEgdG8gc3VzcGVuZCBhbmQgcmVzdW1lIG1hY2hpbmUgdGhyZWFkcyBpbiBKYXZhU2NyaXB0
Q29yZS4KLXN0YXRpYyBjb25zdGV4cHIgY29uc3QgaW50IFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUg
PSBTSUdVU1IxOwotc3RhdGljIHN0ZDo6YXRvbWljPFRocmVhZCo+IHRhcmdldFRocmVhZCB7IG51
bGxwdHIgfTsKLQotI2lmIENPTVBJTEVSKEdDQykKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVz
aAotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3JldHVybi1sb2NhbC1hZGRyIgot
I2VuZGlmIC8vIENPTVBJTEVSKEdDQykKLQotI2lmIENPTVBJTEVSKENMQU5HKQotI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V3JldHVybi1zdGFjay1hZGRyZXNzIgotI2VuZGlmIC8vIENPTVBJTEVSKENMQU5HKQotCi1zdGF0
aWMgVU5VU0VEX0ZVTkNUSU9OIE5FVkVSX0lOTElORSB2b2lkKiBnZXRBcHByb3hpbWF0ZVN0YWNr
UG9pbnRlcigpCi17Ci0gICAgdm9sYXRpbGUgdm9pZCogc3RhY2tMb2NhdGlvbiA9IG51bGxwdHI7
Ci0gICAgcmV0dXJuICZzdGFja0xvY2F0aW9uOwotfQotCi0jaWYgQ09NUElMRVIoR0NDKQotI3By
YWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZiAvLyBDT01QSUxFUihHQ0MpCi0KLSNpZiBD
T01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZiAvLyBD
T01QSUxFUihDTEFORykKLQotc3RhdGljIFVOVVNFRF9GVU5DVElPTiBib29sIGlzT25BbHRlcm5h
dGl2ZVNpZ25hbFN0YWNrKCkKLXsKLSAgICBzdGFja190IHN0YWNrIHsgfTsKLSAgICBpbnQgcmV0
ID0gc2lnYWx0c3RhY2sobnVsbHB0ciwgJnN0YWNrKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghcmV0
KTsKLSAgICByZXR1cm4gc3RhY2suc3NfZmxhZ3MgPT0gU1NfT05TVEFDSzsKLX0KLQotdm9pZCBU
aHJlYWQ6OnNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190Kiwgdm9pZCog
dWNvbnRleHQpCi17Ci0gICAgLy8gVG91Y2hpbmcgdGhyZWFkIGxvY2FsIGF0b21pYyB0eXBlcyBm
cm9tIHNpZ25hbCBoYW5kbGVycyBpcyBhbGxvd2VkLgotICAgIFRocmVhZCogdGhyZWFkID0gdGFy
Z2V0VGhyZWFkLmxvYWQoKTsKLQotICAgIGlmICh0aHJlYWQtPm1fc3VzcGVuZGVkLmxvYWQoc3Rk
OjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpIHsKLSAgICAgICAgLy8gVGhpcyBpcyBzaWduYWwgaGFu
ZGxlciBpbnZvY2F0aW9uIHRoYXQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZXN1bWUgc2ln
c3VzcGVuZC4KLSAgICAgICAgLy8gU28gdGhpcyBoYW5kbGVyIGludm9jYXRpb24gaXRzZWxmIHNo
b3VsZCBub3QgcHJvY2Vzcy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gV2hlbiBzaWduYWwgY29t
ZXMsIGZpcnN0LCB0aGUgc3lzdGVtIGNhbGxzIHNpZ25hbCBoYW5kbGVyLiBBbmQgbGF0ZXIsIHNp
Z3N1c3BlbmQgd2lsbCBiZSByZXN1bWVkLiBTaWduYWwgaGFuZGxlciBpbnZvY2F0aW9uIGFsd2F5
cyBwcmVjZWRlcy4KLSAgICAgICAgLy8gU28sIHRoZSBwcm9ibGVtIG5ldmVyIGhhcHBlbnMgdGhh
dCBzdXNwZW5kZWQuc3RvcmUodHJ1ZSwgLi4uKSB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUg
aGFuZGxlciBpcyBjYWxsZWQuCi0gICAgICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcv
b25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3NpZ3N1c3BlbmQuaHRtbAotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgdWNvbnRleHRfdCogdXNlckNvbnRleHQgPSBzdGF0aWNfY2Fz
dDx1Y29udGV4dF90Kj4odWNvbnRleHQpOwotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWlzT25B
bHRlcm5hdGl2ZVNpZ25hbFN0YWNrKCksICJVc2luZyBhbiBhbHRlcm5hdGl2ZSBzaWduYWwgc3Rh
Y2sgaXMgbm90IHN1cHBvcnRlZC4gQ29uc2lkZXIgZGlzYWJsaW5nIHRoZSBjb25jdXJyZW50IEdD
LiIpOwotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi0gICAgdGhyZWFkLT5tX3BsYXRmb3Jt
UmVnaXN0ZXJzID0gcmVnaXN0ZXJzRnJvbVVDb250ZXh0KHVzZXJDb250ZXh0KTsKLSNlbHNlCi0g
ICAgdGhyZWFkLT5tX3BsYXRmb3JtUmVnaXN0ZXJzID0gUGxhdGZvcm1SZWdpc3RlcnMgeyBnZXRB
cHByb3hpbWF0ZVN0YWNrUG9pbnRlcigpIH07Ci0jZW5kaWYKLQotICAgIC8vIEFsbG93IHN1c3Bl
bmQgY2FsbGVyIHRvIHNlZSB0aGF0IHRoaXMgdGhyZWFkIGlzIHN1c3BlbmRlZC4KLSAgICAvLyBz
ZW1fcG9zdCBpcyBhc3luYy1zaWduYWwtc2FmZSBmdW5jdGlvbi4gSXQgbWVhbnMgdGhhdCB3ZSBj
YW4gY2FsbCB0aGlzIGZyb20gYSBzaWduYWwgaGFuZGxlci4KLSAgICAvLyBodHRwOi8vcHVicy5v
cGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy94c2hfY2hhcDAyXzA0
Lmh0bWwjdGFnXzAyXzA0XzAzCi0gICAgLy8KLSAgICAvLyBBbmQgc2VtX3Bvc3QgZW1pdHMgbWVt
b3J5IGJhcnJpZXIgdGhhdCBlbnN1cmVzIHRoYXQgc3VzcGVuZGVkTWFjaGluZUNvbnRleHQgaXMg
Y29ycmVjdGx5IHNhdmVkLgotICAgIC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5l
cHVicy85Njk5OTE5Nzk5L2Jhc2VkZWZzL1YxX2NoYXAwNC5odG1sI3RhZ18wNF8xMQotICAgIHNl
bV9wb3N0KCZ0aHJlYWQtPm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7Ci0KLSAgICAvLyBS
ZWFjaGluZyBoZXJlLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGlzIGJsb2NrZWQgaW4gdGhpcyBo
YW5kbGVyICh0aGlzIGlzIGNvbmZpZ3VyZWQgYnkgc2lnYWN0aW9uJ3Mgc2FfbWFzaykuCi0gICAg
Ly8gU28gYmVmb3JlIGNhbGxpbmcgc2lnc3VzcGVuZCwgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSB0
byB0aGlzIHRocmVhZCBpcyBkZWZlcnJlZC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGhhbmRsZXIg
aXMgbm90IGV4ZWN1dGVkIHJlY3Vyc2l2ZWx5LgotICAgIHNpZ3NldF90IGJsb2NrZWRTaWduYWxT
ZXQ7Ci0gICAgc2lnZmlsbHNldCgmYmxvY2tlZFNpZ25hbFNldCk7Ci0gICAgc2lnZGVsc2V0KCZi
bG9ja2VkU2lnbmFsU2V0LCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLSAgICBzaWdzdXNwZW5k
KCZibG9ja2VkU2lnbmFsU2V0KTsKLQotICAgIC8vIEFsbG93IHJlc3VtZSBjYWxsZXIgdG8gc2Vl
IHRoYXQgdGhpcyB0aHJlYWQgaXMgcmVzdW1lZC4KLSAgICBzZW1fcG9zdCgmdGhyZWFkLT5tX3Nl
bWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwotfQotCi0jZW5kaWYgLy8gIU9TKERBUldJTikKLQot
dm9pZCBUaHJlYWQ6OmluaXRpYWxpemVQbGF0Zm9ybVRocmVhZGluZygpCi17Ci0jaWYgIU9TKERB
UldJTikKLSAgICAvLyBTaWduYWwgaGFuZGxlcnMgYXJlIHByb2Nlc3MgZ2xvYmFsIGNvbmZpZ3Vy
YXRpb24uCi0gICAgLy8gSW50ZW50aW9uYWxseSBibG9jayBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
IGluIHRoZSBoYW5kbGVyLgotICAgIC8vIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUgd2lsbCBiZSBh
bGxvd2VkIGluIHRoZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCi0gICAgc3RydWN0IHNpZ2FjdGlv
biBhY3Rpb247Ci0gICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICBzaWdhZGRz
ZXQoJmFjdGlvbi5zYV9tYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLQotICAgIGFjdGlv
bi5zYV9zaWdhY3Rpb24gPSAmc2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWU7Ci0gICAgYWN0aW9u
LnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX1NJR0lORk87Ci0gICAgc2lnYWN0aW9uKFNpZ1Ro
cmVhZFN1c3BlbmRSZXN1bWUsICZhY3Rpb24sIDApOwotI2VuZGlmCi19Ci0KLXZvaWQgVGhyZWFk
Ojppbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKQotewotI2lmICFP
UyhEQVJXSU4pCi0gICAgc2lnc2V0X3QgbWFzazsKLSAgICBzaWdlbXB0eXNldCgmbWFzayk7Ci0g
ICAgc2lnYWRkc2V0KCZtYXNrLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lKTsKLSAgICBwdGhyZWFk
X3NpZ21hc2soU0lHX1VOQkxPQ0ssICZtYXNrLCAwKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9p
ZCogd3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKiBjb250ZXh0KQotewotICAgIFRocmVhZDo6ZW50
cnlQb2ludChyZWludGVycHJldF9jYXN0PFRocmVhZDo6TmV3VGhyZWFkQ29udGV4dCo+KGNvbnRl
eHQpKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotYm9vbCBUaHJlYWQ6OmVzdGFibGlzaEhh
bmRsZShOZXdUaHJlYWRDb250ZXh0KiBjb250ZXh0KQotewotICAgIHB0aHJlYWRfdCB0aHJlYWRI
YW5kbGU7Ci0gICAgcHRocmVhZF9hdHRyX3QgYXR0cjsKLSAgICBwdGhyZWFkX2F0dHJfaW5pdCgm
YXR0cik7Ci0jaWYgSEFWRShRT1NfQ0xBU1NFUykKLSAgICBwdGhyZWFkX2F0dHJfc2V0X3Fvc19j
bGFzc19ucCgmYXR0ciwgYWRqdXN0ZWRRT1NDbGFzcyhRT1NfQ0xBU1NfVVNFUl9JTklUSUFURUQp
LCAwKTsKLSNlbmRpZgotICAgIGludCBlcnJvciA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRIYW5k
bGUsICZhdHRyLCB3dGZUaHJlYWRFbnRyeVBvaW50LCBjb250ZXh0KTsKLSAgICBwdGhyZWFkX2F0
dHJfZGVzdHJveSgmYXR0cik7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGNyZWF0ZSBwdGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggY29udGV4dCAl
cCIsIHd0ZlRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIGVzdGFibGlzaFBsYXRmb3JtU3BlY2lmaWNIYW5kbGUodGhyZWFkSGFuZGxl
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50
VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKLXsKLSNpZiBIQVZFKFBUSFJF
QURfU0VUTkFNRV9OUCkKLSAgICBwdGhyZWFkX3NldG5hbWVfbnAobm9ybWFsaXplVGhyZWFkTmFt
ZSh0aHJlYWROYW1lKSk7Ci0jZWxpZiBPUyhMSU5VWCkKLSAgICBwcmN0bChQUl9TRVRfTkFNRSwg
bm9ybWFsaXplVGhyZWFkTmFtZSh0aHJlYWROYW1lKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TSh0aHJlYWROYW1lKTsKLSNlbmRpZgotICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklm
Tm9uV1RGQ3JlYXRlZCgpOwotfQotCi12b2lkIFRocmVhZDo6Y2hhbmdlUHJpb3JpdHkoaW50IGRl
bHRhKQotewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7
Ci0KLSAgICBpbnQgcG9saWN5OwotICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKLQotICAg
IGlmIChwdGhyZWFkX2dldHNjaGVkcGFyYW0obV9oYW5kbGUsICZwb2xpY3ksICZwYXJhbSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ICs9IGRlbHRhOwotCi0g
ICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtKG1faGFuZGxlLCBwb2xpY3ksICZwYXJhbSk7Ci19Ci0K
LWludCBUaHJlYWQ6OndhaXRGb3JDb21wbGV0aW9uKCkKLXsKLSAgICBwdGhyZWFkX3QgaGFuZGxl
OwotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211
dGV4KTsKLSAgICAgICAgaGFuZGxlID0gbV9oYW5kbGU7Ci0gICAgfQotCi0gICAgaW50IGpvaW5S
ZXN1bHQgPSBwdGhyZWFkX2pvaW4oaGFuZGxlLCAwKTsKLQotICAgIGlmIChqb2luUmVzdWx0ID09
IEVERUFETEspCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMgZm91
bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIsIG1faWQpOwotICAgIGVsc2UgaWYg
KGpvaW5SZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmllciAldSB3YXMg
dW5hYmxlIHRvIGJlIGpvaW5lZC5cbiIsIG1faWQpOwotCi0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKLSAgICBBU1NFUlQoam9pbmFibGVTdGF0ZSgpID09
IEpvaW5hYmxlKTsKLQotICAgIC8vIElmIHRoZSB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVkLCB0
aGVuIGRvIG5vdGhpbmcuIElmIHRoZSB0aHJlYWQgaGFzbid0IGV4aXRlZCB5ZXQsIHRoZW4ganVz
dCBzaWduYWwgdGhhdCB3ZSd2ZSBhbHJlYWR5IGpvaW5lZCBvbiBpdC4KLSAgICAvLyBJbiBib3Ro
IGNhc2VzLCBUaHJlYWRIb2xkZXI6OmRlc3RydWN0KCkgd2lsbCB0YWtlIGNhcmUgb2YgZGVzdHJv
eWluZyBUaHJlYWQuCi0gICAgaWYgKCFoYXNFeGl0ZWQoKSkKLSAgICAgICAgZGlkSm9pbigpOwot
Ci0gICAgcmV0dXJuIGpvaW5SZXN1bHQ7Ci19Ci0KLXZvaWQgVGhyZWFkOjpkZXRhY2goKQotewot
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIobV9tdXRleCk7Ci0gICAgaW50
IGRldGFjaFJlc3VsdCA9IHB0aHJlYWRfZGV0YWNoKG1faGFuZGxlKTsKLSAgICBpZiAoZGV0YWNo
UmVzdWx0KQotICAgICAgICBMT0dfRVJST1IoIlRocmVhZElkZW50aWZpZXIgJXUgd2FzIHVuYWJs
ZSB0byBiZSBkZXRhY2hlZFxuIiwgbV9pZCk7Ci0KLSAgICBpZiAoIWhhc0V4aXRlZCgpKQotICAg
ICAgICBkaWRCZWNvbWVEZXRhY2hlZCgpOwotfQotCi1UaHJlYWQmIFRocmVhZDo6Y3VycmVudCgp
Ci17Ci0gICAgaWYgKFRocmVhZCogY3VycmVudCA9IGN1cnJlbnRNYXlCZU51bGwoKSkKLSAgICAg
ICAgcmV0dXJuICpjdXJyZW50OwotCi0gICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBU
aHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCi0gICAgUmVmPFRocmVhZD4g
dGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7Ci0gICAgdGhyZWFkLT5lc3RhYmxpc2hQ
bGF0Zm9ybVNwZWNpZmljSGFuZGxlKHB0aHJlYWRfc2VsZigpKTsKLSAgICB0aHJlYWQtPm1fc3Rh
Y2sgPSBTdGFja0JvdW5kczo6Y3VycmVudFRocmVhZFN0YWNrQm91bmRzKCk7Ci0gICAgVGhyZWFk
SG9sZGVyOjppbml0aWFsaXplKHRocmVhZC5nZXQoKSk7Ci0gICAgaW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7Ci0gICAgcmV0dXJuIHRocmVhZC5nZXQoKTsKLX0K
LQotVGhyZWFkSWRlbnRpZmllciBUaHJlYWQ6OmN1cnJlbnRJRCgpCi17Ci0gICAgcmV0dXJuIGN1
cnJlbnQoKS5pZCgpOwotfQotCi1ib29sIFRocmVhZDo6c2lnbmFsKGludCBzaWduYWxOdW1iZXIp
Ci17Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcihtX211dGV4KTsKLSAg
ICBpZiAoaGFzRXhpdGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQgZXJyTm8g
PSBwdGhyZWFkX2tpbGwobV9oYW5kbGUsIHNpZ25hbE51bWJlcik7Ci0gICAgcmV0dXJuICFlcnJO
bzsgLy8gQSAwIGVyck5vIG1lYW5zIHN1Y2Nlc3MuCi19Ci0KLWF1dG8gVGhyZWFkOjpzdXNwZW5k
KCkgLT4gRXhwZWN0ZWQ8dm9pZCwgUGxhdGZvcm1TdXNwZW5kRXJyb3I+Ci17Ci0gICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9NRVNTQUdFKGlkKCkgIT0gY3VycmVudFRocmVhZCgpLCAiV2UgZG8gbm90
IHN1cHBvcnQgc3VzcGVuZGluZyB0aGUgY3VycmVudCB0aHJlYWQgaXRzZWxmLiIpOwotICAgIC8v
IER1cmluZyBzdXNwZW5kLCBzdXNwZW5kIG9yIHJlc3VtZSBzaG91bGQgbm90IGJlIGV4ZWN1dGVk
IGZyb20gdGhlIG90aGVyIHRocmVhZHMuCi0gICAgLy8gV2UgdXNlIGdsb2JhbCBsb2NrIGluc3Rl
YWQgb2YgcGVyIHRocmVhZCBsb2NrLgotICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2Fz
ZSwgdGhlcmUgYXJlIHRocmVhZHMgQSBhbmQgQi4KLSAgICAvLyBBbmQgQSBhdHRlbXB0IHRvIHN1
c3BlbmQgQiBhbmQgQiBhdHRlbXB0IHRvIHN1c3BlbmQgQS4KLSAgICAvLyBBIGFuZCBCIHNlbmQg
c2lnbmFscy4gQW5kIGxhdGVyLCBzaWduYWxzIGFyZSBkZWxpdmVyZWQgdG8gQSBhbmQgQi4KLSAg
ICAvLyBJbiB0aGF0IGNhc2UsIGJvdGggd2lsbCBiZSBzdXNwZW5kZWQuCi0gICAgLy8KLSAgICAv
LyBBbmQgaXQgaXMgaW1wb3J0YW50IHRvIHVzZSBhIGdsb2JhbCBsb2NrIHRvIHN1c3BlbmQgYW5k
IHJlc3VtZS4gTGV0J3MgY29uc2lkZXIgdXNpbmcgcGVyLXRocmVhZCBsb2NrLgotICAgIC8vIFlv
dXIgaXNzdWluZyB0aHJlYWQgKEEpIGF0dGVtcHRzIHRvIHN1c3BlbmQgdGhlIHRhcmdldCB0aHJl
YWQgKEIpLiBUaGVuLCB5b3Ugd2lsbCBzdXNwZW5kIHRoZSB0aHJlYWQgKEMpIGFkZGl0aW9uYWxs
eS4KLSAgICAvLyBUaGlzIGNhc2UgZnJlcXVlbnRseSBoYXBwZW5zIGlmIHlvdSBzdG9wIHRocmVh
ZHMgdG8gcGVyZm9ybSBzdGFjayBzY2FubmluZy4gQnV0IHRocmVhZCAoQikgbWF5IGhvbGQgdGhl
IGxvY2sgb2YgdGhyZWFkIChDKS4KLSAgICAvLyBJbiB0aGF0IGNhc2UsIGRlYWQgbG9jayBoYXBw
ZW5zLiBVc2luZyBnbG9iYWwgbG9jayBoZXJlIGF2b2lkcyB0aGlzIGRlYWQgbG9jay4KLSAgICBM
b2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTdXNwZW5kTG9jayk7Ci0jaWYgT1MoREFSV0lOKQotICAg
IGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX3N1c3BlbmQobV9wbGF0Zm9ybVRocmVhZCk7
Ci0gICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChyZXN1bHQpOwotICAgIHJldHVybiB7IH07Ci0jZWxzZQotICAgIGlmICghbV9zdXNw
ZW5kQ291bnQpIHsKLSAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGQgbGlrZSB0byB1c2UgcHRo
cmVhZF9zaWdxdWV1ZS4gSXQgYWxsb3dzIHVzIHRvIHBhc3MgdGhlIGFyZ3VtZW50IHRvIHRoZSBz
aWduYWwgaGFuZGxlci4KLSAgICAgICAgLy8gQnV0IGl0IGNhbiBiZSB1c2VkIGluIGEgZmV3IHBs
YXRmb3JtcywgbGlrZSBMaW51eC4KLSAgICAgICAgLy8gSW5zdGVhZCwgd2UgdXNlIFRocmVhZCog
c3RvcmVkIGluIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSB0byBwYXNzIGl0IHRvIHRoZSBzaWdu
YWwgaGFuZGxlci4KLSAgICAgICAgdGFyZ2V0VGhyZWFkLnN0b3JlKHRoaXMpOwotICAgICAgICBp
bnQgcmVzdWx0ID0gcHRocmVhZF9raWxsKG1faGFuZGxlLCBTaWdUaHJlYWRTdXNwZW5kUmVzdW1l
KTsKLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChyZXN1bHQpOwotICAgICAgICBzZW1fd2FpdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1l
KTsKLSAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlv
biBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRv
bmUuCi0gICAgICAgIG1fc3VzcGVuZGVkLnN0b3JlKHRydWUsIHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGVhc2UpOwotICAgIH0KLSAgICArK21fc3VzcGVuZENvdW50OwotICAgIHJldHVybiB7IH07Ci0j
ZW5kaWYKLX0KLQotdm9pZCBUaHJlYWQ6OnJlc3VtZSgpCi17Ci0gICAgLy8gRHVyaW5nIHJlc3Vt
ZSwgc3VzcGVuZCBvciByZXN1bWUgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBmcm9tIHRoZSBvdGhl
ciB0aHJlYWRzLgotICAgIExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRMb2NrKTsKLSNp
ZiBPUyhEQVJXSU4pCi0gICAgdGhyZWFkX3Jlc3VtZShtX3BsYXRmb3JtVGhyZWFkKTsKLSNlbHNl
Ci0gICAgaWYgKG1fc3VzcGVuZENvdW50ID09IDEpIHsKLSAgICAgICAgLy8gV2hlbiBhbGxvd2lu
ZyBTaWdUaHJlYWRTdXNwZW5kUmVzdW1lIGludGVycnVwdCBpbiB0aGUgc2lnbmFsIGhhbmRsZXIg
Ynkgc2lnc3VzcGVuZCBhbmQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSBpcyBhY3R1YWxseSBpc3N1
ZWQsCi0gICAgICAgIC8vIHRoZSBzaWduYWwgaGFuZGxlciBpdHNlbGYgd2lsbCBiZSBjYWxsZWQg
b25jZSBhZ2Fpbi4KLSAgICAgICAgLy8gVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBkaXN0aW5n
dWlzaCB0aGUgaGFuZGxlciBpbnZvY2F0aW9uIGZvciBzdXNwZW5kIGFuZCByZXN1bWUuCi0gICAg
ICAgIC8vIDEuIFVzZSBkaWZmZXJlbnQgc2lnbmFsIG51bWJlcnMuIEFuZCBjaGVjayB0aGUgc2ln
bmFsIG51bWJlciBpbiB0aGUgaGFuZGxlci4KLSAgICAgICAgLy8gMi4gVXNlIHNvbWUgYXJndW1l
bnRzIHRvIGRpc3Rpbmd1aXNoIHN1c3BlbmQgYW5kIHJlc3VtZSBpbiB0aGUgaGFuZGxlci4gSWYg
cHRocmVhZF9zaWdxdWV1ZSBjYW4gYmUgdXNlZCwgd2UgY2FuIHRha2UgdGhpcy4KLSAgICAgICAg
Ly8gMy4gVXNlIHRocmVhZCBsb2NhbCBzdG9yYWdlIHdpdGggYXRvbWljIHZhcmlhYmxlcyBpbiB0
aGUgc2lnbmFsIGhhbmRsZXIuCi0gICAgICAgIC8vIEluIHRoaXMgaW1wbGVtZW50YWl0b24sIHdl
IHRha2UgKDMpLiBzdXNwZW5kZWQgZmxhZyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGl0LgotICAg
ICAgICB0YXJnZXRUaHJlYWQuc3RvcmUodGhpcyk7Ci0gICAgICAgIGlmIChwdGhyZWFkX2tpbGwo
bV9oYW5kbGUsIFNpZ1RocmVhZFN1c3BlbmRSZXN1bWUpID09IEVTUkNIKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBzZW1fd2FpdCgmbV9zZW1hcGhvcmVGb3JTdXNwZW5kUmVzdW1lKTsK
LSAgICAgICAgLy8gUmVsZWFzZSBiYXJyaWVyIGVuc3VyZXMgdGhhdCB0aGlzIG9wZXJhdGlvbiBp
cyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBhYm92ZSBwcm9jZXNzaW5nIGlzIGRvbmUu
Ci0gICAgICAgIG1fc3VzcGVuZGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxl
YXNlKTsKLSAgICB9Ci0gICAgLS1tX3N1c3BlbmRDb3VudDsKLSNlbmRpZgotfQotCi0jaWYgT1Mo
REFSV0lOKQotc3RydWN0IFRocmVhZFN0YXRlTWV0YWRhdGEgewotICAgIHVuc2lnbmVkIHVzZXJD
b3VudDsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yOwotfTsKLQotc3RhdGljIFRo
cmVhZFN0YXRlTWV0YWRhdGEgdGhyZWFkU3RhdGVNZXRhZGF0YSgpCi17Ci0jaWYgQ1BVKFg4NikK
LSAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXplb2YoUGxhdGZvcm1SZWdpc3RlcnMpIC8gc2l6
ZW9mKGludCk7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFE
X1NUQVRFOwotI2VsaWYgQ1BVKFg4Nl82NCkKLSAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSB4ODZf
VEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9
IHg4Nl9USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShQUEMpCi0gICAgdW5zaWduZWQgdXNlckNv
dW50ID0gUFBDX1RIUkVBRF9TVEFURV9DT1VOVDsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3Qg
Zmxhdm9yID0gUFBDX1RIUkVBRF9TVEFURTsKLSNlbGlmIENQVShQUEM2NCkKLSAgICB1bnNpZ25l
ZCB1c2VyQ291bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRl
X2ZsYXZvcl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShBUk0pCi0g
ICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsKLSAgICB0aHJl
YWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKLSNlbGlmIENQVShB
Uk02NCkKLSAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7
Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsK
LSNlbHNlCi0jZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKLSNlbmRpZgotICAgIHJldHVybiBU
aHJlYWRTdGF0ZU1ldGFkYXRhIHsgdXNlckNvdW50LCBmbGF2b3IgfTsKLX0KLSNlbmRpZiAvLyBP
UyhEQVJXSU4pCi0KLXNpemVfdCBUaHJlYWQ6OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVy
cyYgcmVnaXN0ZXJzKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFN1c3BlbmRMb2Nr
KTsKLSNpZiBPUyhEQVJXSU4pCi0gICAgYXV0byBtZXRhZGF0YSA9IHRocmVhZFN0YXRlTWV0YWRh
dGEoKTsKLSAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9nZXRfc3RhdGUobV9wbGF0
Zm9ybVRocmVhZCwgbWV0YWRhdGEuZmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ2lzdGVycywg
Jm1ldGFkYXRhLnVzZXJDb3VudCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpIHsK
LSAgICAgICAgV1RGUmVwb3J0RmF0YWxFcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVU
VFlfRlVOQ1RJT04sICJKYXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBmYWlsZWQgYmVjYXVz
ZSB0aHJlYWRfZ2V0X3N0YXRlIHJldHVybmVkIGFuIGVycm9yICglZCkuIFRoaXMgaXMgcHJvYmFi
bHkgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGluc2lkZSBSb3NldHRhLCB3aGljaCBpcyBub3Qgc3Vw
cG9ydGVkLiIsIHJlc3VsdCk7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIHJldHVybiBt
ZXRhZGF0YS51c2VyQ291bnQgKiBzaXplb2YodWludHB0cl90KTsKLSNlbHNlCi0gICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShtX3N1c3BlbmRDb3VudCwgIldlIGNhbiBnZXQgcmVnaXN0ZXJzIG9ubHkg
aWYgdGhlIHRocmVhZCBpcyBzdXNwZW5kZWQuIik7Ci0gICAgcmVnaXN0ZXJzID0gbV9wbGF0Zm9y
bVJlZ2lzdGVyczsKLSAgICByZXR1cm4gc2l6ZW9mKFBsYXRmb3JtUmVnaXN0ZXJzKTsKLSNlbmRp
ZgotfQotCi12b2lkIFRocmVhZDo6ZXN0YWJsaXNoUGxhdGZvcm1TcGVjaWZpY0hhbmRsZShwdGhy
ZWFkX3QgaGFuZGxlKQotewotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIo
bV9tdXRleCk7Ci0gICAgbV9oYW5kbGUgPSBoYW5kbGU7Ci0gICAgaWYgKCFtX2lkKSB7Ci0gICAg
ICAgIHN0YXRpYyBzdGQ6OmF0b21pYzxUaHJlYWRJZGVudGlmaWVyPiBwcm92aWRlciB7IDAgfTsK
LSAgICAgICAgbV9pZCA9ICsrcHJvdmlkZXI7Ci0jaWYgT1MoREFSV0lOKQotICAgICAgICBtX3Bs
YXRmb3JtVGhyZWFkID0gcHRocmVhZF9tYWNoX3RocmVhZF9ucChoYW5kbGUpOwotI2VuZGlmCi0g
ICAgfQotfQotCi1NdXRleDo6TXV0ZXgoKQotewotICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgYXR0
cjsKLSAgICBwdGhyZWFkX211dGV4YXR0cl9pbml0KCZhdHRyKTsKLSAgICBwdGhyZWFkX211dGV4
YXR0cl9zZXR0eXBlKCZhdHRyLCBQVEhSRUFEX01VVEVYX05PUk1BTCk7Ci0KLSAgICBpbnQgcmVz
dWx0ID0gcHRocmVhZF9tdXRleF9pbml0KCZtX211dGV4LCAmYXR0cik7Ci0gICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsICFyZXN1bHQpOwotCi0gICAgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgm
YXR0cik7Ci19Ci0KLU11dGV4Ojp+TXV0ZXgoKQotewotICAgIGludCByZXN1bHQgPSBwdGhyZWFk
X211dGV4X2Rlc3Ryb3koJm1fbXV0ZXgpOwotICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCAhcmVz
dWx0KTsKLX0KLQotdm9pZCBNdXRleDo6bG9jaygpCi17Ci0gICAgaW50IHJlc3VsdCA9IHB0aHJl
YWRfbXV0ZXhfbG9jaygmbV9tdXRleCk7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFyZXN1
bHQpOwotfQotCi1ib29sIE11dGV4Ojp0cnlMb2NrKCkKLXsKLSAgICBpbnQgcmVzdWx0ID0gcHRo
cmVhZF9tdXRleF90cnlsb2NrKCZtX211dGV4KTsKLQotICAgIGlmIChyZXN1bHQgPT0gMCkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHJlc3VsdCA9PSBFQlVTWSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIE11dGV4Ojp1bmxvY2soKQotewotICAgIGludCByZXN1bHQgPSBwdGhyZWFk
X211dGV4X3VubG9jaygmbV9tdXRleCk7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFyZXN1
bHQpOwotfQotCi1UaHJlYWRDb25kaXRpb246OlRocmVhZENvbmRpdGlvbigpCi17IAotICAgIHB0
aHJlYWRfY29uZF9pbml0KCZtX2NvbmRpdGlvbiwgTlVMTCk7Ci19Ci0KLVRocmVhZENvbmRpdGlv
bjo6flRocmVhZENvbmRpdGlvbigpCi17Ci0gICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJm1fY29u
ZGl0aW9uKTsKLX0KLSAgICAKLXZvaWQgVGhyZWFkQ29uZGl0aW9uOjp3YWl0KE11dGV4JiBtdXRl
eCkKLXsKLSAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9jb25kX3dhaXQoJm1fY29uZGl0aW9uLCAm
bXV0ZXguaW1wbCgpKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7Ci19Ci0K
LWJvb2wgVGhyZWFkQ29uZGl0aW9uOjp0aW1lZFdhaXQoTXV0ZXgmIG11dGV4LCBkb3VibGUgYWJz
b2x1dGVUaW1lKQotewotICAgIGlmIChhYnNvbHV0ZVRpbWUgPCBjdXJyZW50VGltZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYWJzb2x1dGVUaW1lID4gSU5UX01BWCkgewot
ICAgICAgICB3YWl0KG11dGV4KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
aW50IHRpbWVTZWNvbmRzID0gc3RhdGljX2Nhc3Q8aW50PihhYnNvbHV0ZVRpbWUpOwotICAgIGlu
dCB0aW1lTmFub3NlY29uZHMgPSBzdGF0aWNfY2FzdDxpbnQ+KChhYnNvbHV0ZVRpbWUgLSB0aW1l
U2Vjb25kcykgKiAxRTkpOwotCi0gICAgdGltZXNwZWMgdGFyZ2V0VGltZTsKLSAgICB0YXJnZXRU
aW1lLnR2X3NlYyA9IHRpbWVTZWNvbmRzOwotICAgIHRhcmdldFRpbWUudHZfbnNlYyA9IHRpbWVO
YW5vc2Vjb25kczsKLQotICAgIHJldHVybiBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KCZtX2NvbmRp
dGlvbiwgJm11dGV4LmltcGwoKSwgJnRhcmdldFRpbWUpID09IDA7Ci19Ci0KLXZvaWQgVGhyZWFk
Q29uZGl0aW9uOjpzaWduYWwoKQotewotICAgIGludCByZXN1bHQgPSBwdGhyZWFkX2NvbmRfc2ln
bmFsKCZtX2NvbmRpdGlvbik7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFyZXN1bHQpOwot
fQotCi12b2lkIFRocmVhZENvbmRpdGlvbjo6YnJvYWRjYXN0KCkKLXsKLSAgICBpbnQgcmVzdWx0
ID0gcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmbV9jb25kaXRpb24pOwotICAgIEFTU0VSVF9VTlVT
RUQocmVzdWx0LCAhcmVzdWx0KTsKLX0KLQotdm9pZCBUaHJlYWQ6OnlpZWxkKCkKLXsKLSAgICBz
Y2hlZF95aWVsZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShQ
VEhSRUFEUykKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDc4OTA5OWY2NzBiMWViYWE5ZjZjZDFjZTY4ZTgwMGFhNGIxODZjODMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlLmgiCi0KLSNpbmNsdWRlICJDb25kaXRpb24uaCIKLSNpbmNsdWRlICJMb2Nr
LmgiCi0jaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKLSNpbmNsdWRlIDxjZmxvYXQ+Ci0jaW5jbHVk
ZSA8Y21hdGg+Ci0jaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0K
LVRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om5vdyhD
bG9ja1R5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIENsb2NrVHlw
ZTo6V2FsbDoKLSAgICAgICAgcmV0dXJuIFdhbGxUaW1lOjpub3coKTsKLSAgICBjYXNlIENsb2Nr
VHlwZTo6TW9ub3RvbmljOgotICAgICAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0g
ICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZSgpOwotfQotCi1UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpub3dXaXRoU2FtZUNsb2NrKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbm93KGNsb2NrVHlwZSgpKTsKLX0KLQotV2FsbFRpbWUgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlOjp3YWxsVGltZSgpIGNvbnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09
IENsb2NrVHlwZTo6V2FsbCk7Ci0gICAgcmV0dXJuIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyht
X3ZhbHVlKTsKLX0KLQotTW9ub3RvbmljVGltZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om1v
bm90b25pY1RpbWUoKSBjb25zdAotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fdHlwZSA9PSBDbG9j
a1R5cGU6Ok1vbm90b25pYyk7Ci0gICAgcmV0dXJuIE1vbm90b25pY1RpbWU6OmZyb21SYXdTZWNv
bmRzKG1fdmFsdWUpOwotfQotCi1XYWxsVGltZSBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6OmFw
cHJveGltYXRlV2FsbFRpbWUoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAg
Y2FzZSBDbG9ja1R5cGU6OldhbGw6Ci0gICAgICAgIHJldHVybiB3YWxsVGltZSgpOwotICAgIGNh
c2UgQ2xvY2tUeXBlOjpNb25vdG9uaWM6Ci0gICAgICAgIHJldHVybiBtb25vdG9uaWNUaW1lKCku
YXBwcm94aW1hdGVXYWxsVGltZSgpOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBXYWxsVGltZSgpOwotfQotCi1Nb25vdG9uaWNUaW1lIFRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZTo6YXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3QKLXsK
LSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgQ2xvY2tUeXBlOjpXYWxsOgotICAgICAg
ICByZXR1cm4gd2FsbFRpbWUoKS5hcHByb3hpbWF0ZU1vbm90b25pY1RpbWUoKTsKLSAgICBjYXNl
IENsb2NrVHlwZTo6TW9ub3RvbmljOgotICAgICAgICByZXR1cm4gbW9ub3RvbmljVGltZSgpOwot
ICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBNb25v
dG9uaWNUaW1lKCk7Ci19Ci0KLVNlY29uZHMgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVy
YXRvci0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKLXsKLSAg
ICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsKLSAgICByZXR1cm4gU2Vj
b25kcyhtX3ZhbHVlIC0gb3RoZXIubV92YWx1ZSk7Ci19Ci0KLWJvb2wgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlOjpvcGVyYXRvcjwoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhl
cikgY29uc3QKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90eXBlKTsK
LSAgICByZXR1cm4gbV92YWx1ZSA8IG90aGVyLm1fdmFsdWU7Ci19Ci0KLWJvb2wgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcj4oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
JiBvdGhlcikgY29uc3QKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3R5cGUgPT0gb3RoZXIubV90
eXBlKTsKLSAgICByZXR1cm4gbV92YWx1ZSA+IG90aGVyLm1fdmFsdWU7Ci19Ci0KLWJvb2wgVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlOjpvcGVyYXRvcjw9KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV90eXBlID09IG90
aGVyLm1fdHlwZSk7Ci0gICAgcmV0dXJuIG1fdmFsdWUgPD0gb3RoZXIubV92YWx1ZTsKLX0KLQot
Ym9vbCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU6Om9wZXJhdG9yPj0oY29uc3QgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3R5
cGUgPT0gb3RoZXIubV90eXBlKTsKLSAgICByZXR1cm4gbV92YWx1ZSA+PSBvdGhlci5tX3ZhbHVl
OwotfQotCi12b2lkIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAotewotICAgIG91dC5wcmludChtX3R5cGUsICIoIiwgbV92YWx1ZSwgIiBzZWMp
Iik7Ci19Ci0KLXZvaWQgc2xlZXAoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1l
KQotewotICAgIExvY2sgZmFrZUxvY2s7Ci0gICAgQ29uZGl0aW9uIGZha2VDb25kaXRpb247Ci0g
ICAgTG9ja0hvbGRlciBmYWtlTG9ja2VyKGZha2VMb2NrKTsKLSAgICBmYWtlQ29uZGl0aW9uLndh
aXRVbnRpbChmYWtlTG9jaywgdGltZSk7Ci19Ci0KLWJvb2wgaGFzRWxhcHNlZChjb25zdCBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWUpCi17Ci0gICAgLy8gQXZvaWQgZG9pbmcgbm93KCku
Ci0gICAgaWYgKCEodGltZSA+IHRpbWUud2l0aFNhbWVDbG9ja0FuZFJhd1NlY29uZHMoMCkpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoc3RkOjppc2luZih0aW1lLnNlY29uZHNTaW5j
ZUVwb2NoKCkudmFsdWUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1
cm4gdGltZSA8PSB0aW1lLm5vd1dpdGhTYW1lQ2xvY2soKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V1RGCi0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0MzhlZmNiZmY5OGQxYjE0ZjhhODAzYTE3MTZhZTE4MGI4YzhiOWY1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDE2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgV1RGX1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZV9oCi0jZGVmaW5lIFdU
Rl9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGVfaAotCi0jaW5jbHVkZSA8d3RmL0Nsb2NrVHlwZS5o
PgotI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1dhbGxUaW1l
Lmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBQcmludFN0cmVhbTsKLQotY2xhc3MgVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlIHsKLXB1YmxpYzoKLSAgICBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUoKSB7IH0KLSAgICAKLSAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUoV2FsbFRpbWUg
dGltZSkKLSAgICAgICAgOiBtX3ZhbHVlKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgp
KQotICAgICAgICAsIG1fdHlwZShDbG9ja1R5cGU6OldhbGwpCi0gICAgewotICAgIH0KLSAgICAK
LSAgICBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUoTW9ub3RvbmljVGltZSB0aW1lKQotICAgICAg
ICA6IG1fdmFsdWUodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpCi0gICAgICAgICwg
bV90eXBlKENsb2NrVHlwZTo6TW9ub3RvbmljKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3Rh
dGljIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBmcm9tUmF3U2Vjb25kcyhkb3VibGUgdmFsdWUs
IENsb2NrVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgcmVzdWx0
Lm1fdHlwZSA9IHR5cGU7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAg
IFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdCB7IHJldHVybiBTZWNvbmRzKG1fdmFs
dWUpOyB9Ci0gICAgQ2xvY2tUeXBlIGNsb2NrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQotICAgIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlIG5vdyhDbG9ja1R5cGUpOwotICAgIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUgbm93V2l0aFNhbWVDbG9jaygpIGNvbnN0OwotICAgIAotICAg
IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSB3aXRoU2FtZUNsb2NrQW5kUmF3U2Vjb25kcyhkb3Vi
bGUgdmFsdWUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlOjpmcm9tUmF3U2Vjb25kcyh2YWx1ZSwgY2xvY2tUeXBlKCkpOwotICAgIH0KLSAgICAK
LSAgICAvLyBBc3NlcnRzIHRoYXQgdGhlIHRpbWUgaXMgb2YgdGhlIHR5cGUgeW91IHdhbnQuCi0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIFdhbGxUaW1lIHdhbGxUaW1lKCkgY29uc3Q7Ci0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIE1vbm90b25pY1RpbWUgbW9ub3RvbmljVGltZSgpIGNvbnN0OwotICAg
IAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBXYWxsVGltZSBhcHByb3hpbWF0ZVdhbGxUaW1lKCkg
Y29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIE1vbm90b25pY1RpbWUgYXBwcm94aW1hdGVN
b25vdG9uaWNUaW1lKCkgY29uc3Q7Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQotICAgIAotICAgIFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZSBvcGVyYXRvcisoU2Vjb25kcyBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB3aXRoU2FtZUNsb2NrQW5kUmF3U2Vjb25kcyhtX3ZhbHVlICsgb3RoZXIudmFsdWUoKSk7
Ci0gICAgfQotICAgIAotICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvci0oU2Vj
b25kcyBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB3aXRoU2FtZUNsb2NrQW5k
UmF3U2Vjb25kcyhtX3ZhbHVlIC0gb3RoZXIudmFsdWUoKSk7Ci0gICAgfQotICAgIAotICAgIC8v
IFRpbWUgaXMgYSBzY2FsYXIgYW5kIHNjYWxhcnMgY2FuIGJlIG5lZ2F0ZWQgYXMgdGhpcyBjb3Vs
ZCBhcmlzZSBmcm9tIGFsZ2VicmFpYwotICAgIC8vIHRyYW5zZm9ybWF0aW9ucy4gU28sIHdlIGFs
bG93IGl0LgotICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvci0oKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHdpdGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKC1tX3ZhbHVl
KTsKLSAgICB9Ci0gICAgCi0gICAgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIG9wZXJhdG9yKz0o
U2Vjb25kcyBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3Ro
ZXI7Ci0gICAgfQotICAgIAotICAgIFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBvcGVyYXRvci09
KFNlY29uZHMgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gKnRoaXMgPSAqdGhpcyAtIG90
aGVyOwotICAgIH0KLSAgICAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU2Vjb25kcyBvcGVyYXRv
ci0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7Ci0gICAgCi0gICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgb3RoZXIpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlCi0gICAgICAg
ICAgICAmJiBtX3R5cGUgPT0gb3RoZXIubV90eXBlOwotICAgIH0KLSAgICAKLSAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiBvdGhlcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICB9Ci0gICAgCi0gICAg
Ly8gVG8gZG8gcmVsYXRpdmUgY29tcGFyaXNvbnMsIHlvdSBtdXN0IGJlIHVzaW5nIHRpbWVzIHdp
dGggdGhlIHNhbWUgY2xvY2sgdHlwZS4KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBvcGVy
YXRvcjwoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7Ci0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZSYpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG9wZXJhdG9yPD0oY29uc3Qg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJikgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgb3BlcmF0b3I+PShjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKSBjb25zdDsK
LSAgICAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIGRvdWJsZSBtX3ZhbHVlIHsgMCB9OwotICAgIENsb2Nr
VHlwZSBtX3R5cGUgeyBDbG9ja1R5cGU6OldhbGwgfTsKLX07Ci0KLVdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpOwotCi1XVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBoYXNFbGFwc2VkKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZSYpOwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotbmFtZXNwYWNlIHN0ZCB7Ci0KLWlubGluZSBi
b29sIGlzbmFuKFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIHRpbWUpCi17Ci0gICAgcmV0
dXJuIHN0ZDo6aXNuYW4odGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOwotfQotCi1p
bmxpbmUgYm9vbCBpc2luZihXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSB0aW1lKQotewot
ICAgIHJldHVybiBzdGQ6OmlzaW5mKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsK
LX0KLQotaW5saW5lIGJvb2wgaXNmaW5pdGUoV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUg
dGltZSkKLXsKLSAgICByZXR1cm4gc3RkOjppc2Zpbml0ZSh0aW1lLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIHN0ZAotCi11c2luZyBXVEY6OlRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZTsKLXVzaW5nIFdURjo6aGFzRWxhcHNlZDsKLXVzaW5nIFdURjo6
c2xlZXA7Ci0KLSNlbmRpZiAvLyBXVEZfVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlX2gKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9UeXBlQ2FzdHMuaCBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9UeXBlQ2FzdHMuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMThiOTQwYzQ5ZGE1YzY5OGMxYzBlMjFjMTc3ZmY5MjhlZjI1Njg5
NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvVHlwZUNhc3RzLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVHlwZUNhc3RzX2gKLSNkZWZpbmUg
VHlwZUNhc3RzX2gKLQotI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgotCi1uYW1lc3BhY2UgV1RGIHsK
LQotdGVtcGxhdGUgPHR5cGVuYW1lIEV4cGVjdGVkVHlwZSwgdHlwZW5hbWUgQXJnVHlwZSwgYm9v
bCBpc0Jhc2VUeXBlID0gc3RkOjppc19iYXNlX29mPEV4cGVjdGVkVHlwZSwgQXJnVHlwZT46OnZh
bHVlPgotc3RydWN0IFR5cGVDYXN0VHJhaXRzIHsKLSAgICBzdGF0aWMgYm9vbCBpc09mVHlwZShB
cmdUeXBlJikKLSAgICB7Ci0gICAgICAgIC8vIElmIHlvdSdyZSBoaXR0aW5nIHRoaXMgYXNzZXJ0
aW9uLCBpdCBpcyBsaWtlbHkgYmVjYXVzZSB5b3UgdXNlZAotICAgICAgICAvLyBpczw+KCkgb3Ig
ZG93bmNhc3Q8PigpIHdpdGggYSB0eXBlIHRoYXQgZG9lc24ndCBoYXZlIHRoZSBuZWVkZWQKLSAg
ICAgICAgLy8gVHlwZUNhc3RUcmFpdHMgc3BlY2lhbGl6YXRpb24uIFBsZWFzZSB1c2UgdGhlIGZv
bGxvd2luZyBtYWNybwotICAgICAgICAvLyB0byBhZGQgdGhhdCBzcGVjaWFsaXphdGlvbjoKLSAg
ICAgICAgLy8gU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTigpIC8gU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdm9pZDxFeHBlY3Rl
ZFR5cGU+Ojp2YWx1ZSwgIk1pc3NpbmcgVHlwZUNhc3RUcmFpdHMgc3BlY2lhbGl6YXRpb24iKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX07Ci0KLS8vIFRlbXBsYXRlIHNwZWNpYWxp
emF0aW9uIGZvciB0aGUgY2FzZSB3aGVyZSBFeHBlY3RlZFR5cGUgaXMgYSBiYXNlIG9mIEFyZ1R5
cGUsCi0vLyBzbyB3ZSBjYW4gcmV0dXJuIHJldHVybiB0cnVlIHVuY29uZGl0aW9uYWxseS4KLXRl
bXBsYXRlIDx0eXBlbmFtZSBFeHBlY3RlZFR5cGUsIHR5cGVuYW1lIEFyZ1R5cGU+Ci1zdHJ1Y3Qg
VHlwZUNhc3RUcmFpdHM8RXhwZWN0ZWRUeXBlLCBBcmdUeXBlLCB0cnVlIC8qIGlzQmFzZVR5cGUg
Ki8+IHsKLSAgICBzdGF0aWMgYm9vbCBpc09mVHlwZShBcmdUeXBlJikgeyByZXR1cm4gdHJ1ZTsg
fQotfTsKLQotLy8gVHlwZSBjaGVja2luZyBmdW5jdGlvbiwgdG8gdXNlIGJlZm9yZSBjYXN0aW5n
IHdpdGggZG93bmNhc3Q8PigpLgotdGVtcGxhdGUgPHR5cGVuYW1lIEV4cGVjdGVkVHlwZSwgdHlw
ZW5hbWUgQXJnVHlwZT4KLWlubGluZSBib29sIGlzKEFyZ1R5cGUmIHNvdXJjZSkKLXsKLSAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxBcmdUeXBlLCBFeHBlY3RlZFR5cGU+Ojp2YWx1
ZSwgIlVubmVjZXNzYXJ5IHR5cGUgY2hlY2siKTsKLSAgICByZXR1cm4gVHlwZUNhc3RUcmFpdHM8
Y29uc3QgRXhwZWN0ZWRUeXBlLCBjb25zdCBBcmdUeXBlPjo6aXNPZlR5cGUoc291cmNlKTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIEV4cGVjdGVkVHlwZSwgdHlwZW5hbWUgQXJnVHlwZT4KLWlu
bGluZSBib29sIGlzKEFyZ1R5cGUqIHNvdXJjZSkKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYmFzZV9vZjxBcmdUeXBlLCBFeHBlY3RlZFR5cGU+Ojp2YWx1ZSwgIlVubmVjZXNzYXJ5IHR5
cGUgY2hlY2siKTsKLSAgICByZXR1cm4gc291cmNlICYmIFR5cGVDYXN0VHJhaXRzPGNvbnN0IEV4
cGVjdGVkVHlwZSwgY29uc3QgQXJnVHlwZT46OmlzT2ZUeXBlKCpzb3VyY2UpOwotfQotCi0vLyBV
cGRhdGUgVCdzIGNvbnN0bmVzcyB0byBtYXRjaCBSZWZlcmVuY2Uncy4KLXRlbXBsYXRlIDx0eXBl
bmFtZSBSZWZlcmVuY2UsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgbWF0Y2hfY29uc3RuZXNzIHsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19jb25zdDxSZWZlcmVu
Y2U+Ojp2YWx1ZSwgdHlwZW5hbWUgc3RkOjphZGRfY29uc3Q8VD46OnR5cGUsIHR5cGVuYW1lIHN0
ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlPjo6dHlwZSB0eXBlOwotfTsKLQotLy8gU2FmZSBkb3du
Y2FzdGluZyBmdW5jdGlvbnMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNv
dXJjZT4KLWlubGluZSB0eXBlbmFtZSBtYXRjaF9jb25zdG5lc3M8U291cmNlLCBUYXJnZXQ+Ojp0
eXBlJiBkb3duY2FzdChTb3VyY2UmIHNvdXJjZSkKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6
OmlzX3NhbWU8U291cmNlLCBUYXJnZXQ+Ojp2YWx1ZSwgIlVubmVjZXNzYXJ5IGNhc3QgdG8gc2Ft
ZSB0eXBlIik7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Y8U291cmNlLCBUYXJn
ZXQ+Ojp2YWx1ZSwgIlNob3VsZCBiZSBhIGRvd25jYXN0Iik7Ci0gICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oaXM8VGFyZ2V0Pihzb3VyY2UpKTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dHlwZW5hbWUgbWF0Y2hfY29uc3RuZXNzPFNvdXJjZSwgVGFyZ2V0Pjo6dHlwZSY+KHNv
dXJjZSk7Ci19Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4KLWlu
bGluZSB0eXBlbmFtZSBtYXRjaF9jb25zdG5lc3M8U291cmNlLCBUYXJnZXQ+Ojp0eXBlKiBkb3du
Y2FzdChTb3VyY2UqIHNvdXJjZSkKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX3NhbWU8
U291cmNlLCBUYXJnZXQ+Ojp2YWx1ZSwgIlVubmVjZXNzYXJ5IGNhc3QgdG8gc2FtZSB0eXBlIik7
Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Y8U291cmNlLCBUYXJnZXQ+Ojp2YWx1
ZSwgIlNob3VsZCBiZSBhIGRvd25jYXN0Iik7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oIXNvdXJjZSB8fCBpczxUYXJnZXQ+KCpzb3VyY2UpKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dHlwZW5hbWUgbWF0Y2hfY29uc3RuZXNzPFNvdXJjZSwgVGFyZ2V0Pjo6dHlwZSo+
KHNvdXJjZSk7Ci19Ci0KLS8vIEFkZCBzdXBwb3J0IGZvciB0eXBlIGNoZWNraW5nIC8gY2FzdGlu
ZyB1c2luZyBpczw+KCkgLyBkb3duY2FzdDw+KCkgaGVscGVycyBmb3IgYSBzcGVjaWZpYyBjbGFz
cy4KLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihDbGFzc05hbWUpIFwKLW5h
bWVzcGFjZSBXVEYgeyBcCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnVHlwZT4gXAotY2xhc3MgVHlw
ZUNhc3RUcmFpdHM8Y29uc3QgQ2xhc3NOYW1lLCBBcmdUeXBlLCBmYWxzZSAvKiBpc0Jhc2VUeXBl
ICovPiB7IFwKLXB1YmxpYzogXAotICAgIHN0YXRpYyBib29sIGlzT2ZUeXBlKEFyZ1R5cGUmIHNv
dXJjZSkgeyByZXR1cm4gaXNUeXBlKHNvdXJjZSk7IH0gXAotcHJpdmF0ZToKLQotI2RlZmluZSBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpIFwKLX07IFwKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V1RGCi0KLXVzaW5nIFdURjo6VHlwZUNhc3RUcmFpdHM7Ci11c2luZyBXVEY6OmlzOwotdXNpbmcg
V1RGOjpkb3duY2FzdDsKLQotI2VuZGlmIC8vIFR5cGVDYXN0c19oCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvVmFsdWVDaGVjay5oIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1ZhbHVlQ2hlY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWUzZjQwYzliYmJiNTVkZGQ5Y2M1MDIwN2E5MDkzOTA2YzAxMWY4NC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci93dGYvVmFsdWVDaGVjay5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIFZhbHVlQ2hlY2tfaAotI2RlZmluZSBWYWx1ZUNoZWNrX2gKLQotI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgVmFsdWVDaGVjayB7Ci0gICAgdHlwZWRlZiBUIFRyYWl0VHlwZTsKLSAgICBzdGF0aWMg
dm9pZCBjaGVja0NvbnNpc3RlbmN5KGNvbnN0IFQmKSB7IH0KLX07Ci0KLSNpZiBBU1NFUlRfRU5B
QkxFRAotdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0IFZhbHVlQ2hlY2s8UCo+IHsKLSAgICB0
eXBlZGVmIFAqIFRyYWl0VHlwZTsKLSAgICBzdGF0aWMgdm9pZCBjaGVja0NvbnNpc3RlbmN5KGNv
bnN0IFAqIHApCi0gICAgewotICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIEFTU0VSVChmYXN0TWFsbG9jU2l6ZShwKSk7Ci0gICAgICAgIFZhbHVlQ2hlY2s8UD46
OmNoZWNrQ29uc2lzdGVuY3koKnApOwotICAgIH0KLX07Ci0jZW5kaWYKLQotfQotCi0jZW5kaWYg
Ly8gVmFsdWVDaGVja19oCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvVmFyaWFudC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL1Zhcmlh
bnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY0MDVhYTE4OGQxZWFmNjBjMWU1
NTRmYjViMmZlMDljOTM2ODA5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvVmFyaWFudC5oCisr
KyAvZGV2L251bGwKQEAgLTEsMjA3OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTUsIEp1
c3QgU29mdHdhcmUgU29sdXRpb25zIEx0ZAotLy8gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0v
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yCi0vLyB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZQotLy8gZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLS8vCi0vLyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0vLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8g
ZGlzY2xhaW1lci4KLS8vCi0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0vLyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0vLwotLy8gMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhv
bGRlciBub3IgdGhlIG5hbWVzIG9mCi0vLyBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotLy8gZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCi0vLyBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAot
Ly8gQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywKLS8vIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GCi0vLyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotLy8gRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0vLyBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLS8vIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0vLyBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLS8vIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgot
Ly8gT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwKLS8vIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLS8vIENvcGllZCBmcm9tIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9hbnRob255dy92
YXJpYW50L3NyYyAoNWJjZTQ3ZmE3ODg2NDhmNzllNWVhMWQ3N2IwZWVmMmU4ZjBiMjk5OSkKLQot
Ly8gTW9kaWZpZWQgdG8gbWFrZSBpdCBjb21waWxlIHdpdGggZXhjZXB0aW9ucyBkaXNhYmxlZC4K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPGxpbWl0
cy5oPgotI2luY2x1ZGUgPG5ldz4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRl
eGNlcHQ+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgotI2luY2x1
ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgotCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwdXNo
KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI0NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OjQ1MjEpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIyKQotI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6NDgxNCkKLSNlbmRpZgotCi0jaWYgIUNPTVBJTEVSKENMQU5HKSB8fCBXVEZfQ1BQX1NU
RF9WRVIgPj0gMTQKLQotbmFtZXNwYWNlIFdURiB7Ci0KLSNpZiBDT01QSUxFUl9TVVBQT1JUUyhF
WENFUFRJT05TKQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTihfX2V4Y2VwdGlvbikgdGhyb3cg
X19leGNlcHRpb247Ci0jZGVmaW5lIF9fTk9FWENFUFQgbm9leGNlcHQKLSNkZWZpbmUgX19OT0VY
Q0VQVF8oX19leGNlcHRpb24pIG5vZXhjZXB0KF9fZXhjZXB0aW9uKQotI2Vsc2UKLSNkZWZpbmUg
X19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIGRvIHsgKHZvaWQpX19leGNlcHRpb247IENS
QVNIKCk7IH0gd2hpbGUgKDApOwotI2RlZmluZSBfX05PRVhDRVBUCi0jZGVmaW5lIF9fTk9FWENF
UFRfKC4uLikKLSNlbmRpZgotCi1zdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewotICAgIHRlbXBs
YXRlPHR5cGVuYW1lPgotICAgIHN0cnVjdCBfX3R5cGVfaG9sZGVyOwotCi0gICAgdGVtcGxhdGU8
c2l6ZV90PgotICAgIHN0cnVjdCBfX3ZhbHVlX2hvbGRlcjsKLX07Ci0KLQotc3RydWN0IGluX3Bs
YWNlX3RhZyB7Ci0gICAgaW5fcGxhY2VfdGFnKCkgPSBkZWxldGU7Ci19OwotCi11c2luZyBpbl9w
bGFjZV90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2VfcHJpdmF0ZSYpOwotCi10ZW1wbGF0
ZSA8Y2xhc3MgX1R5cGU+Ci11c2luZyBpbl9wbGFjZV90eXBlX3QgPSBpbl9wbGFjZV90YWcoJiko
X19pbl9wbGFjZV9wcml2YXRlOjpfX3R5cGVfaG9sZGVyPF9UeXBlPiYpOwotCi10ZW1wbGF0ZSA8
c2l6ZV90IF9JbmRleD4KLXVzaW5nIGluX3BsYWNlX2luZGV4X3QgPSBpbl9wbGFjZV90YWcoJiko
X19pbl9wbGFjZV9wcml2YXRlOjpfX3ZhbHVlX2hvbGRlcjxfSW5kZXg+Jik7Ci0KLWluX3BsYWNl
X3RhZyBpbl9wbGFjZShfX2luX3BsYWNlX3ByaXZhdGUmKTsKLQotdGVtcGxhdGUgPGNsYXNzIF9U
eXBlPgotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5fcGxhY2VfcHJpdmF0ZTo6X190eXBlX2hv
bGRlcjxfVHlwZT4gJikgewotICAgIF9fVEhST1dfRVhDRVBUSU9OKF9faW5fcGxhY2VfcHJpdmF0
ZSgpKTsKLX0KLQotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXg+Ci1pbl9wbGFjZV90YWcgaW5fcGxh
Y2UoX19pbl9wbGFjZV9wcml2YXRlOjpfX3ZhbHVlX2hvbGRlcjxfSW5kZXg+ICYpIHsKLSAgICBf
X1RIUk9XX0VYQ0VQVElPTihfX2luX3BsYWNlX3ByaXZhdGUoKSk7Ci19Ci0KLWNsYXNzIGJhZF92
YXJpYW50X2FjY2VzczogcHVibGljIHN0ZDo6bG9naWNfZXJyb3J7Ci1wdWJsaWM6Ci0gICAgZXhw
bGljaXQgYmFkX3ZhcmlhbnRfYWNjZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiB3aGF0X2FyZyk6Ci0g
ICAgICAgIHN0ZDo6bG9naWNfZXJyb3Iod2hhdF9hcmcpCi0gICAge30KLSAgICBleHBsaWNpdCBi
YWRfdmFyaWFudF9hY2Nlc3MoY29uc3QgY2hhciogd2hhdF9hcmcpOgotICAgICAgICBzdGQ6Omxv
Z2ljX2Vycm9yKHdoYXRfYXJnKQotICAgIHt9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCBpbmxpbmUgVCBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vz
cyhjb25zdCBjaGFyKiB3aGF0X2FyZyl7Ci0gICAgX19USFJPV19FWENFUFRJT04oYmFkX3Zhcmlh
bnRfYWNjZXNzKHdoYXRfYXJnKSkKLX0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlw
ZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kZXhfaGVs
cGVyOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfVHlwZSx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX190eXBlX2luZGV4X2hlbHBlcjxf
T2Zmc2V0LF9UeXBlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRp
ZmZfdCBfX3ZhbHVlPQotICAgICAgICBfX3R5cGVfaW5kZXhfaGVscGVyPF9PZmZzZXQrMSxfVHlw
ZSxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0
eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX190eXBlX2luZGV4X2hl
bHBlcjxfT2Zmc2V0LF9UeXBlLF9UeXBlLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHB0cmRpZmZfdCBfX3ZhbHVlPV9PZmZzZXQ7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlw
ZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRleHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPQotICAgICAgICBfX3R5cGVfaW5kZXhfaGVscGVy
PDAsX1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBf
SW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2luZGV4ZWRfdHlwZTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9faW5kZXhl
ZF90eXBlPDAsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgX0hlYWQgX190eXBlOwotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9f
aW5kZXhlZF90eXBlPC0xLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHZvaWQgX190eXBl
OwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSBfSGVhZCx0eXBlbmFt
ZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU8X0luZGV4LF9IZWFkLF9SZXN0Li4u
PnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleC0xLF9SZXN0Li4u
Pjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5h
bWUgLi4uX1R5cGVzPgotc3RydWN0IF9fbmV4dF9pbmRleHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHB0cmRpZmZfdCBfX3ZhbHVlPQotICAgICAgICAoX0luZGV4Pj1wdHJkaWZmX3Qoc2l6ZW9mLi4u
KF9UeXBlcyktMSkpPy0xOl9JbmRleCsxOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9U
eXBlcz4KLWNsYXNzIFZhcmlhbnQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lPgotc3RydWN0IHZhcmlh
bnRfc2l6ZTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfc2l6
ZTxjb25zdCBfVHlwZT4gOiB2YXJpYW50X3NpemU8X1R5cGU+IHt9OwotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPHZvbGF0aWxlIF9UeXBlPiA6IHZhcmlh
bnRfc2l6ZTxfVHlwZT4ge307Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2
YXJpYW50X3NpemU8Y29uc3Qgdm9sYXRpbGUgX1R5cGU+IDogdmFyaWFudF9zaXplPF9UeXBlPiB7
fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lLi4uIF9UeXBlcz4KLXN0cnVjdCB2YXJpYW50X3NpemU8
VmFyaWFudDxfVHlwZXMuLi4+PgotICAgIDogc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzaXplX3Qs
IHNpemVvZi4uLihfVHlwZXMpPiB7fTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFt
ZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlOwotCi10ZW1wbGF0ZTxzaXplX3Qg
X0luZGV4LHR5cGVuYW1lIF9UeXBlPgotdXNpbmcgdmFyaWFudF9hbHRlcm5hdGl2ZV90PXR5cGVu
YW1lIHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LF9UeXBlPjo6dHlwZTsKLQotdGVtcGxhdGUg
PHNpemVfdCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRp
dmU8X0luZGV4LCBjb25zdCBfVHlwZT57Ci0gICAgdXNpbmcgdHlwZT1zdGQ6OmFkZF9jb25zdF90
PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxfSW5kZXgsX1R5cGU+PjsKLX07Ci0KLXRlbXBsYXRlIDxz
aXplX3QgX0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZl
PF9JbmRleCwgdm9sYXRpbGUgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRfdm9sYXRp
bGVfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47Ci19OwotCi10ZW1wbGF0
ZSA8c2l6ZV90IF9JbmRleCwgdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5h
dGl2ZTxfSW5kZXgsIHZvbGF0aWxlIGNvbnN0IF9UeXBlPnsKLSAgICB1c2luZyB0eXBlPXN0ZDo6
YWRkX3ZvbGF0aWxlX3Q8c3RkOjphZGRfY29uc3RfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8X0lu
ZGV4LF9UeXBlPj4+OwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LFZhcmlhbnQ8X1R5cGVz
Li4uPj57Ci0gICAgdXNpbmcgdHlwZT10eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5
cGVzLi4uPjo6X190eXBlOwotfTsKLQotY29uc3RleHByIHNpemVfdCB2YXJpYW50X25wb3M9LTE7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4
cHIgX1R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSBjb25zdCYgZ2V0KFZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4u
PiYmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNv
bnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJik7Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiBnZXQo
VmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgs
X1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmKTsKLQotdGVtcGxh
dGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVu
YW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldCgK
LSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGUgPHB0cmRpZmZfdCBf
SW5kZXgsIHR5cGVuYW1lLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBfX2lu
ZGV4ZWRfdHlwZTxfSW5kZXgsIF9UeXBlcy4uLj46Ol9fdHlwZSAmJgotZ2V0KFZhcmlhbnQ8X1R5
cGVzLi4uPiBjb25zdCAmJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlPiBnZXRfaWYoVmFy
aWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlIGNvbnN0PiBnZXRf
aWYoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5k
ZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZT4gZ2V0X2lmKFZh
cmlhbnQ8X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5k
ZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3Q+IGdldF9pZigKLSAgICBW
YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcjsKLQotdGVtcGxh
dGU8c2l6ZV90IF9fY291bnQsCi0gICAgICAgICBib29sIF9fbGFyZ2VyX3RoYW5fY2hhcj0oX19j
b3VudD5TQ0hBUl9NQVgpLAotICAgIGJvb2wgX19sYXJnZXJfdGhhbl9zaG9ydD0oX19jb3VudD5T
SFJUX01BWCksCi0gICAgYm9vbCBfX2xhcmdlcl90aGFuX2ludD0oX19jb3VudD5JTlRfTUFYKT4K
LXN0cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlwZXsKLSAgICB0eXBlZGVmIHNpZ25lZCBjaGFyIF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3RydWN0IF9fZGlzY3JpbWlu
YXRvcl90eXBlPF9fY291bnQsdHJ1ZSxmYWxzZSxmYWxzZT57Ci0gICAgdHlwZWRlZiBzaWduZWQg
c2hvcnQgX190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3QgX19k
aXNjcmltaW5hdG9yX3R5cGU8X19jb3VudCx0cnVlLHRydWUsZmFsc2U+ewotICAgIHR5cGVkZWYg
aW50IF9fdHlwZTsKLX07Ci10ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KLXN0cnVjdCBfX2Rpc2Ny
aW1pbmF0b3JfdHlwZTxfX2NvdW50LHRydWUsdHJ1ZSx0cnVlPnsKLSAgICB0eXBlZGVmIHNpZ25l
ZCBsb25nIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9f
c3RvcmVkX3R5cGV7Ci0gICAgdHlwZWRlZiBfVHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JlZF90eXBlPF9UeXBlJj57Ci0gICAgdHlwZWRl
ZiBfVHlwZSogX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlOwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
X19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgX192YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3Qg
X19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxfVHlwZT4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
dHlwZW5hbWUgX19zdG9yZWRfdHlwZTxfVHlwZT46Ol9fdHlwZT46OnZhbHVlOwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxf
SGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxf
UmVzdC4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVGFyZ2V0LHR5cGVu
YW1lIC4uLiBfQXJncz4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19jb25zdHJ1Y3RpYmxlewot
ICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIHN0ZDo6aXNfbm90aHJvd19j
b25zdHJ1Y3RpYmxlPF9UYXJnZXQsIF9BcmdzLi4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3Ry
dWN0aWJsZTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1ZT10cnVlOwot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3df
bW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9f
dmFsdWU9Ci0gICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Ci0gICAg
ICAgIHR5cGVuYW1lIF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+Ojp2YWx1ZTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3N0
b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3df
bW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6X192YWx1ZSAmJgotICAgICAgICBfX3N0b3JhZ2Vf
bm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVt
cGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fb3Ro
ZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Ro
cm93X21vdmVfY29uc3RydWN0aWJsZTwwLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29u
c3QgYm9vbCBfX3ZhbHVlPV9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfUmVz
dC4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAu
Li4gX1Jlc3Q+Ci1zdHJ1Y3QgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3Rp
YmxlPC0xLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQot
ICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3Qu
Li4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSBf
SGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19vdGhlcl9zdG9yYWdlX25vdGhyb3df
bW92ZV9jb25zdHJ1Y3RpYmxlPF9JbmRleCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1
Y3RpYmxlPF9IZWFkPjo6X192YWx1ZSAmJgotICAgICAgICBfX290aGVyX3N0b3JhZ2Vfbm90aHJv
d19tb3ZlX2NvbnN0cnVjdGlibGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9f
YmFja3VwX3N0b3JhZ2VfcmVxdWlyZWR7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0K
LSAgICAgICAgIV9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwKLSAgICAgICAg
dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZT46Ol9fdmFs
dWUgJiYKLSAgICAgICAgIV9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJs
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBf
SW5kZXgscHRyZGlmZl90IF9Db3VudCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYW55
X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkX2ltcGx7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192
YWx1ZT0KLSAgICAgICAgX19iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZDxfSW5kZXgsX1R5cGVzLi4u
Pjo6X192YWx1ZSB8fAotICAgICAgICBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBs
PF9JbmRleCsxLF9Db3VudC0xLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxw
dHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbnlfYmFja3Vw
X3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDxfSW5kZXgsMCxfVHlwZXMuLi4+ewotICAgIHN0YXRpYyBj
b25zdCBib29sIF9fdmFsdWU9ZmFsc2U7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFu
dD4KLXN0cnVjdCBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZDsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZDxW
YXJpYW50PF9UeXBlcy4uLj4gPnsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAg
ICAgICBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBsPDAsc2l6ZW9mLi4uKF9UeXBl
cyksX1R5cGVzLi4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9v
bD1zdGQ6OmlzX2xpdGVyYWxfdHlwZTxfVHlwZT46OnZhbHVlPgotc3RydWN0IF9fdmFyaWFudF9z
dG9yYWdlewotICAgIHR5cGVkZWYgX1R5cGUgX190eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBfVHlwZSYgX19nZXQoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBfX3ZhbDsKLSAg
ICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlJiBfX3Zh
bCl7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1vdmUoX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMg
Y29uc3RleHByIGNvbnN0IF9UeXBlJiBfX2dldChfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAg
ICAgcmV0dXJuIF9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9UeXBl
JiYgX19nZXRfcnJlZihfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZShfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveShfX3R5cGUmKXt9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JhZ2Vfd3JhcHBl
cnsKLSAgICB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2YoX1R5cGUpLGFsaWdu
b2YoX1R5cGUpPjo6dHlwZSBfX3N0b3JhZ2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X0FyZ3M+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB2b2lkIF9fY29uc3RydWN0KHZvaWQqIF9fcCxf
QXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBuZXcgKF9fcCkgX1R5cGUoc3RkOjpmb3J3YXJk
PF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0R1
bW15ID0gX1R5cGU+Ci0gICAgX19zdG9yYWdlX3dyYXBwZXIoCi0gICAgICAgIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPF9EdW1teT46OnZhbHVl
LAotICAgICAgICB2b2lkIChfX3N0b3JhZ2Vfd3JhcHBlcjo6KikoKT46OnR5cGUgPSBudWxscHRy
KSB7Ci0gICAgICBfX2NvbnN0cnVjdCgmX19zdG9yYWdlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgX0R1bW15ID0gX1R5cGU+Ci0gICAgX19zdG9yYWdlX3dyYXBwZXIoCi0gICAg
ICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2RlZmF1bHRfY29uc3RydWN0aWJs
ZTxfRHVtbXk+Ojp2YWx1ZSwKLSAgICAgICAgdm9pZCAoX19zdG9yYWdlX3dyYXBwZXI6OiopKCk+
Ojp0eXBlID0gbnVsbHB0cikgewotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rmlyc3QsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIF9fc3RvcmFnZV93cmFwcGVyKF9GaXJzdCYm
IF9fZmlyc3QsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19jb25zdHJ1Y3QoJl9fc3Rv
cmFnZSxzdGQ6OmZvcndhcmQ8X0ZpcnN0PihfX2ZpcnN0KSxzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9f
YXJncykuLi4pOwotICAgIH0KLQotICAgIF9UeXBlJiBfX2dldCgpewotICAgICAgICByZXR1cm4g
KnN0YXRpY19jYXN0PF9UeXBlKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KCZfX3N0b3JhZ2UpKTsKLSAg
ICB9Ci0gICAgY29uc3RleHByIF9UeXBlIGNvbnN0JiBfX2dldCgpIGNvbnN0ewotICAgICAgICBy
ZXR1cm4gKnN0YXRpY19jYXN0PF9UeXBlIGNvbnN0Kj4oc3RhdGljX2Nhc3Q8dm9pZCBjb25zdCo+
KCZfX3N0b3JhZ2UpKTsKLSAgICB9Ci0gICAgdm9pZCBfX2Rlc3Ryb3koKXsKLSAgICAgICAgX19n
ZXQoKS5+X1R5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0
cnVjdCBfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlwZSY+ewotICAgIF9UeXBlKiBfX3N0b3JhZ2U7Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnPgotICAgIGNvbnN0ZXhwciBfX3N0b3JhZ2Vfd3Jh
cHBlcihfQXJnJiBfX2FyZyk6Ci0gICAgICAgIF9fc3RvcmFnZSgmX19hcmcpe30KLQotICAgIF9U
eXBlJiBfX2dldCgpewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsKLSAgICB9Ci0gICAgY29u
c3RleHByIF9UeXBlIGNvbnN0JiBfX2dldCgpIGNvbnN0ewotICAgICAgICByZXR1cm4gKl9fc3Rv
cmFnZTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3Zh
cmlhbnRfc3RvcmFnZTxfVHlwZSxmYWxzZT57Ci0gICAgdHlwZWRlZiBfX3N0b3JhZ2Vfd3JhcHBl
cjxfVHlwZT4gX190eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXQoX190
eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBfX3ZhbC5fX2dldCgpOwotICAgIH0KLSAgICBz
dGF0aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZShfX3ZhbC5fX2dldCgpKTsKLSAgICB9Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAg
IHJldHVybiBfX3ZhbC5fX2dldCgpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0
IF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZShfX3ZhbC5fX2dldCgpKTsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0
cm95KF9fdHlwZSYgX192YWwpewotICAgICAgICBfX3ZhbC5fX2Rlc3Ryb3koKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSxib29sIF9fYj4KLXN0cnVjdCBfX3ZhcmlhbnRf
c3RvcmFnZTxfVHlwZSYsX19iPnsKLSAgICB0eXBlZGVmIF9UeXBlKiBfX3R5cGU7Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0
dXJuICpfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJl
ZihfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAg
IHJldHVybiAqX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0
X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAg
fQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveShfX3R5cGUmKXt9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVHlwZSxib29sIF9fYj4KLXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYm
LF9fYj57Ci0gICAgdHlwZWRlZiBfVHlwZSogX190eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBfVHlwZSYmIF9fZ2V0KF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYm
IF9fZ2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxf
VHlwZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiYgX19n
ZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHlw
ZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXRf
cnJlZihfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PF9U
eXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveShfX3R5cGUm
KXt9Ci19OwotCi10ZW1wbGF0ZTw+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTw+ewotICAgIGNvbnN0
ZXhwciBfX3ZhcmlhbnRfZGF0YSgpe30KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgot
dW5pb24gX192YXJpYW50X2RhdGE8X1R5cGU+ewotICAgIHR5cGVuYW1lIF9fdmFyaWFudF9zdG9y
YWdlPF9UeXBlPjo6X190eXBlIF9fdmFsOwotICAgIHN0cnVjdCBfX2R1bW15X3R5cGV7fSBfX2R1
bW15OwotCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCk6X19kdW1teSgpe30KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2Rh
dGEoaW5fcGxhY2VfaW5kZXhfdDwwPixfQXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3Zh
bChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KLQotICAgIF9UeXBlJiBfX2dldChp
bl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9U
eXBlPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICAvKmNvbnN0ZXhwciovIF9UeXBlJiYgX19n
ZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9z
dG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBj
b25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJl
dHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAg
Y29uc3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBj
b25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJl
ZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8MD4p
ewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZGVzdHJveShfX3ZhbCk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0
YTxfVHlwZSY+ewotICAgIHR5cGVuYW1lIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fdHlw
ZSBfX3ZhbDsKLSAgICBzdHJ1Y3QgX19kdW1teV90eXBle30gX19kdW1teTsKLQotICAgIGNvbnN0
ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSAuLi4gX0FyZ3M+Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4
X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAgICAgICAgX192YWwoJnN0ZDo6Zm9yd2FyZDxf
QXJncz4oX19hcmdzKS4uLil7fQotCi0gICAgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8
MD4pewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXQoX192
YWwpOwotICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8
MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19n
ZXQoX192YWwpOwotICAgIH0KLQotICAgIF9UeXBlJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4
X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXRf
cnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihpbl9w
bGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlJj46Ol9fZ2V0X3JyZWYoX192YWwpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIF9fZGVz
dHJveShpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5
cGUmPjo6X19kZXN0cm95KF9fdmFsKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZT4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlJiY+ewotICAgIHR5cGVuYW1lIF9fdmFy
aWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX3R5cGUgX192YWw7Ci0gICAgc3RydWN0IF9fZHVtbXlf
dHlwZXt9IF9fZHVtbXk7Ci0KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoKTpfX2R1bW15
KCl7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KLSAgICBfX3ZhcmlhbnRfZGF0YShp
bl9wbGFjZV9pbmRleF90PDA+LF9BcmcmJiBfX2FyZyk6Ci0gICAgICAgIF9fdmFsKCZfX2FyZyl7
fQotCi0gICAgX1R5cGUmJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0
dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX2dldChfX3ZhbCk7Ci0gICAgfQotICAg
IGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAg
ICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0KF9fdmFsKTsKLSAg
ICB9Ci0gICAgX1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAg
ICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0X3JyZWYoX192YWwpOwot
ICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8
MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9f
Z2V0X3JyZWYoX192YWwpOwotICAgIH0KLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRl
eF90PDA+KXsKLSAgICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZGVzdHJveShf
X3ZhbCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4u
IF9SZXN0PgotdW5pb24gX192YXJpYW50X2RhdGE8X0hlYWQsX1Jlc3QuLi4+ewotICAgIF9fdmFy
aWFudF9kYXRhPF9IZWFkPiBfX2hlYWQ7Ci0gICAgX192YXJpYW50X2RhdGE8X1Jlc3QuLi4+IF9f
cmVzdDsKLQotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOgotICAgICAgICBfX2hlYWQo
KXt9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgY29uc3RleHByIF9f
dmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAg
ICAgICAgX19oZWFkKGluX3BsYWNlPDA+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7
fQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGNv
bnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PF9JbmRleD4sX0FyZ3MmJiAu
Li4gX19hcmdzKToKLSAgICAgICAgX19yZXN0KGluX3BsYWNlPF9JbmRleC0xPixzdGQ6OmZvcndh
cmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KLQotICAgIF9IZWFkJiBfX2dldChpbl9wbGFjZV9pbmRl
eF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldChpbl9wbGFjZTwwPik7Ci0gICAg
fQotCi0gICAgLypjb25zdGV4cHIqLyBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhf
dDwwPil7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFjZTwwPik7Ci0g
ICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYgX19nZXQoaW5fcGxhY2VfaW5k
ZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5fcGxhY2U8MD4p
OwotICAgIH0KLQotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxh
Y2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihp
bl9wbGFjZTwwPik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0g
ICAgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmIF9f
Z2V0KAotICAgICAgICBpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pewotICAgICAgICByZXR1cm4g
X19yZXN0Ll9fZ2V0KGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
c2l6ZV90IF9JbmRleD4KLSAgICAvKmNvbnN0ZXhwciovIHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBlJiYgX19nZXRfcnJlZigKLSAgICAgICAgaW5fcGxh
Y2VfaW5kZXhfdDxfSW5kZXg+KXsKLSAgICAgICAgcmV0dXJuIF9fcmVzdC5fX2dldF9ycmVmKGlu
X3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5k
ZXg+Ci0gICAgY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleC0x
LF9SZXN0Li4uPjo6X190eXBlJiBfX2dldCgKLSAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxfSW5k
ZXg+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fcmVzdC5fX2dldChpbl9wbGFjZTxfSW5kZXgt
MT4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgY29uc3RleHBy
IGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBl
JiYgX19nZXRfcnJlZigKLSAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+KSBjb25zdHsK
LSAgICAgICAgcmV0dXJuIF9fcmVzdC5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleC0xPik7Ci0g
ICAgfQotICAgIAotICAgIAotICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8MD4p
ewotICAgICAgICBfX2hlYWQuX19kZXN0cm95KGluX3BsYWNlPDA+KTsKLSAgICB9Ci0gICAgdGVt
cGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90
PF9JbmRleD4pewotICAgICAgICBfX3Jlc3QuX19kZXN0cm95KGluX3BsYWNlPF9JbmRleC0xPik7
Ci0gICAgfQotfTsKLQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QuLi4gX0luZGljZXM+Ci1zdHJ1Y3Qg
X19pbmRleF9zZXF1ZW5jZXsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMu
Li4sc2l6ZW9mLi4uKF9JbmRpY2VzKT4gX19uZXh0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IF9fbGVuZ3RoPXNpemVvZi4uLihfSW5kaWNlcyk7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRpY2VzOwotCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgX190eXBlX2luZGljZXM8PnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8PiBfX3R5
cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3R5cGVfaW5kaWNl
czxfVHlwZT57Ci0gICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPDA+IF9fdHlwZTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3R5
cGVfaW5kaWNlczxfVHlwZSxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf
aW5kaWNlczxfUmVzdC4uLj46Ol9fdHlwZTo6X19uZXh0IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF9pbmRpY2VzOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF9pbmRpY2VzPFZhcmlhbnQ8
X1R5cGVzLi4uPj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfaW5kaWNlczxfVHlwZXMu
Li4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0g
ICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFy
aWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9f
bW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCos
X1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0
YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xo
cyxfVmFyaWFudCYgX19yaHMpewotICAgICAgICBfX2xocy0+dGVtcGxhdGUgX19lbXBsYWNlX2Nv
bnN0cnVjdDxfSW5kZXg+KAotICAgICAgICAgICAgc3RkOjptb3ZlKGdldDxfSW5kZXg+KF9fcmhz
KSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVv
Zi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlm
Zl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFi
bGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBl
Ci1fX21vdmVfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAg
ICZfX21vdmVfY29uc3RydWN0X2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBf
X3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX21vdmVfYXNzaWdu
X29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotc3RydWN0IF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190
eXBlKShfVmFyaWFudCosX1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3Qg
X0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9hc3NpZ25fZnVuYygKLSAgICAgICAgX1Zh
cmlhbnQgKiBfX2xocyxfVmFyaWFudCYgX19yaHMpewotICAgICAgICBnZXQ8X0luZGV4PigqX19s
aHMpPXN0ZDo6bW92ZShnZXQ8X0luZGV4PihfX3JocykpOwotICAgIH0KLQotICAgIHN0YXRpYyBj
b25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5
cGVuYW1lIF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxf
SW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1fX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2Yu
Li4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX21vdmVfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4u
Ci0gICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFt
ZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4K
LXN0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fY29weV9jb25zdHJ1Y3Rf
b3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5
cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQgY29uc3Qm
KTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lk
IF9fY29weV9jb25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFu
dCBjb25zdCYgX19yaHMpewotICAgICAgICBfX2xocy0+dGVtcGxhdGUgX19lbXBsYWNlX2NvbnN0
cnVjdDxfSW5kZXg+KAotICAgICAgICAgICAgZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMp
XTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGlj
ZXM+Ci1jb25zdCB0eXBlbmFtZSBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9f
aW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19jb3B5X2NvbnN0
cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9f
YXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19jb3B5X2NvbnN0
cnVjdF9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGlj
ZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19jb3B5X2Fzc2lnbl9vcF90YWJsZTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVj
dCBfX2NvcHlfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGlj
ZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQq
LF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4K
LSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICog
X19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgZ2V0PF9JbmRleD4oKl9fbGhz
KT1nZXQ8X0luZGV4PihfX3Jocyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190
eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19jb3B5
X2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46
OgotX19mdW5jX3R5cGUKLV9fY29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyld
PXsKLSAgICAgICAgJl9fY29weV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5
cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fZGVz
dHJveV9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLXN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190
eXBlKShfVmFyaWFudCopOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0g
ICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19zZWxm
KXsKLSAgICAgICAgaWYoX19zZWxmLT5fX2luZGV4Pj0wKXsKLSAgICAgICAgICAgIF9fc2VsZi0+
X19zdG9yYWdlLl9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNl
cyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5k
aWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fZGVzdHJveV9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fZGVzdHJveV9vcF90YWJs
ZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAg
c2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19kZXN0cm95X2Z1bmM8X0luZGljZXM+
Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBl
bmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlw
ZT4KLXN0cnVjdCBfX3N3YXBfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50
LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19zd2FwX29wX3RhYmxlPF9WYXJpYW50
LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25z
dCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQmLF9WYXJpYW50Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8
cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX3N3YXBfZnVuYygKLSAgICAgICAg
X1ZhcmlhbnQgJiBfX2xocyxfVmFyaWFudCAmIF9fcmhzKXsKLSAgICAgICAgc3dhcChnZXQ8X0lu
ZGV4PihfX2xocyksZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29u
c3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBl
bmFtZSBfX3N3YXBfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+OjoKLV9fZnVuY190eXBlCi1fX3N3YXBfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsK
LSAgICAgICAgJl9fc3dhcF9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192
YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19lcXVhbGl0eV9vcF90
YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KLXN0cnVjdCBfX2VxdWFsaXR5X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIGJvb2woKiBjb25zdCBfX2NvbXBhcmVfZnVuY190
eXBlKShfVmFyaWFudCBjb25zdCYsX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX2VxdWFsaXR5
X2NvbXBhcmVfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhzLF9WYXJpYW50IGNv
bnN0JiBfX3Jocyl7Ci0gICAgICAgIHJldHVybiBnZXQ8X0luZGV4PihfX2xocyk9PWdldDxfSW5k
ZXg+KF9fcmhzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fY29tcGFyZV9mdW5j
X3R5cGUgX19lcXVhbGl0eV9jb21wYXJlW3NpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fZXF1YWxpdHlfY29tcGFyZV9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3RleHBy
IHR5cGVuYW1lIF9fZXF1YWxpdHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxf
SW5kaWNlcy4uLj4+OjoKLV9fY29tcGFyZV9mdW5jX3R5cGUKLV9fZXF1YWxpdHlfb3BfdGFibGU8
X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2VxdWFsaXR5X2NvbXBh
cmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGlj
ZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3Qg
X19sZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+ewotICAgIHR5cGVkZWYgYm9vbCgqIGNvbnN0IF9fY29tcGFyZV9mdW5jX3R5cGUpKF9WYXJp
YW50IGNvbnN0JixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZf
dCBfSW5kZXg+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fbGVzc190aGFuX2NvbXBhcmVf
ZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBfX3Jo
cyl7Ci0gICAgICAgIHJldHVybiBnZXQ8X0luZGV4PihfX2xocyk8Z2V0PF9JbmRleD4oX19yaHMp
OwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgX19jb21wYXJlX2Z1bmNfdHlwZSBfX2xl
c3NfdGhhbl9jb21wYXJlW3NpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fbGVzc190
aGFuX2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0ZXhwciB0eXBlbmFt
ZSBfX2xlc3NfdGhhbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2Vz
Li4uPj46OgotX19jb21wYXJlX2Z1bmNfdHlwZQotX19sZXNzX3RoYW5fb3BfdGFibGU8X1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2xlc3NfdGhhbl9jb21wYXJlWwot
ICAgIHNpemVvZi4uLihfSW5kaWNlcyldOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4K
LXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZV90eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfRGVy
aXZlZCxib29sIF9fdHJpdmlhbF9kZXN0cnVjdG9yPgotc3RydWN0IF9fdmFyaWFudF9iYXNlCi17
Ci0gICAgfl9fdmFyaWFudF9iYXNlKCl7Ci0gICAgICAgIHN0YXRpY19jYXN0PF9EZXJpdmVkKj4o
dGhpcyktPl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X0Rlcml2ZWQ+Ci1zdHJ1Y3QgX192YXJpYW50X2Jhc2U8X0Rlcml2ZWQsdHJ1ZT57Ci19OwotCi0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9DdXJyZW50U2VxdWVuY2UsCi0g
ICAgICAgICB0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxs
X2luZGljZXNfaGVscGVyOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCxwdHJkaWZmX3Qg
Li4uIF9JbmRpY2VzLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0
Pgotc3RydWN0IF9fYWxsX2luZGljZXNfaGVscGVyPAotICAgIF9PZmZzZXQsX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlcy4uLj4sCi0gICAgX1R5cGUsX1R5cGUsX1Jlc3QuLi4+ewotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlc19oZWxwZXI8Ci0gICAgICAgIF9PZmZzZXQrMSxfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uLF9PZmZzZXQ+LF9UeXBlLF9SZXN0Li4uPjo6X190eXBl
Ci0gICAgICAgIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVu
YW1lIF9DdXJyZW50U2VxdWVuY2UsCi0gICAgICAgICB0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSBf
SGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI8X09m
ZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIF9fYWxsX2luZGljZXNfaGVscGVyPAotICAgICAgICBfT2Zmc2V0KzEsX0N1cnJl
bnRTZXF1ZW5jZSxfVHlwZSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLHR5cGVuYW1lIF9U
eXBlPgotc3RydWN0IF9fYWxsX2luZGljZXNfaGVscGVyPF9PZmZzZXQsX0N1cnJlbnRTZXF1ZW5j
ZSxfVHlwZT57Ci0gICAgdHlwZWRlZiBfQ3VycmVudFNlcXVlbmNlIF9fdHlwZTsKLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxf
aW5kaWNlc3sKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXNfaGVscGVyPAotICAg
ICAgICAwLF9faW5kZXhfc2VxdWVuY2U8PixfVHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9TZXF1ZW5jZXM+Ci1zdHJ1Y3QgX19jb21i
aW5lX3NlcXVlbmNlczsKLQotdGVtcGxhdGU8cHRyZGlmZl90IC4uLiBfSW5kaWNlczEscHRyZGlm
Zl90IC4uLiBfSW5kaWNlczI+Ci1zdHJ1Y3QgX19jb21iaW5lX3NlcXVlbmNlczwKLSAgICBfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzMS4uLj4sX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlczIuLi4+
PnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMxLi4uLF9JbmRpY2VzMi4u
Lj4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1NlcXVlbmNlLHR5cGVuYW1lIC4u
LiBfUmVzdD4KLXN0cnVjdCBfX2NvbWJpbmVfc2VxdWVuY2VzPF9TZXF1ZW5jZSxfUmVzdC4uLj57
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbWJpbmVfc2VxdWVuY2VzPAotICAgICAgICBfU2Vx
dWVuY2UsCi0gICAgICAgIHR5cGVuYW1lIF9fY29tYmluZV9zZXF1ZW5jZXM8X1Jlc3QuLi4+Ojpf
X3R5cGU+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0luZGljZXM+
Ci1zdHJ1Y3QgX19maXJzdF9pbmRleDsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9GaXJzdEluZGV4
LHB0cmRpZmZfdCAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19maXJzdF9pbmRleDxfX2luZGV4X3NlcXVl
bmNlPF9GaXJzdEluZGV4LF9SZXN0Li4uPj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZm
X3QgX192YWx1ZT1fRmlyc3RJbmRleDsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0
LHR5cGVuYW1lIF9DdXJyZW50U2VxdWVuY2UsCi0gICAgICAgICB0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBlcjsK
LQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1NlcXVlbmNlLHR5cGVuYW1l
IF9UeXBlPgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBlcjwKLSAgICBfT2Zm
c2V0LF9TZXF1ZW5jZSxfVHlwZT57Ci0gICAgdHlwZWRlZiBfU2VxdWVuY2UgX190eXBlOwotfTsK
LQotdGVtcGxhdGU8Ym9vbCBfQWNjZXB0LHB0cmRpZmZfdCBfRW50cnk+Ci1zdHJ1Y3QgX19zZXF1
ZW5jZV9vcl9lbXB0eXsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8PiBfX3R5cGU7Ci19
OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0VudHJ5Pgotc3RydWN0IF9fc2VxdWVuY2Vfb3JfZW1w
dHk8dHJ1ZSxfRW50cnk+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTxfRW50cnk+IF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9DdXJyZW50
U2VxdWVuY2UsCi0gICAgICAgICB0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSBfSGVhZCx0eXBlbmFt
ZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAg
IF9PZmZzZXQsX0N1cnJlbnRTZXF1ZW5jZSxfVHlwZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlw
ZWRlZgotICAgIHR5cGVuYW1lIF9fY29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBlcjwKLSAgICAg
ICAgX09mZnNldCsxLAotICAgICAgICB0eXBlbmFtZSBfX2NvbWJpbmVfc2VxdWVuY2VzPAotICAg
ICAgICAgICAgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgICAgIHR5cGVuYW1lIF9fc2VxdWVu
Y2Vfb3JfZW1wdHk8Ci0gICAgICAgICAgICAgICAgc3RkOjppc19jb25zdHJ1Y3RpYmxlPF9IZWFk
LF9UeXBlPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgX09mZnNldD46Ol9fdHlwZT46Ol9fdHlw
ZSwKLSAgICAgICAgX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2NvbnN0cnVj
dGlibGVfbWF0Y2hlc3sKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29uc3RydWN0aWJsZV9tYXRj
aGVzX2hlbHBlcjwKLSAgICAgICAgMCxfX2luZGV4X3NlcXVlbmNlPD4sX1R5cGUsX1R5cGVzLi4u
Pjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdHsKLSAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXM8X1R5cGUsX1R5cGVzLi4uPjo6X190eXBlIF9fZGly
ZWN0X21hdGNoZXM7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzPAotICAgICAg
ICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDwKLSAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6
cmVtb3ZlX3JlZmVyZW5jZTxfVHlwZT46OnR5cGUKLSAgICAgICAgICAgID46OnR5cGUsX1R5cGVz
Li4uPjo6X190eXBlIF9fdmFsdWVfbWF0Y2hlczsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fYWxs
X2luZGljZXM8Ci0gICAgICAgIF9UeXBlLAotICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9j
b25zdDwKLSAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxfVHlwZXM+
Ojp0eXBlCi0gICAgICAgICAgICA+Ojp0eXBlLi4uPjo6X190eXBlIF9fcnJlZl9tYXRjaGVzOwot
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlczxfVHlwZSxfVHlw
ZXMuLi4+OjpfX3R5cGUKLSAgICBfX2NvbnN0cnVjdGlibGVzOwotCi0gICAgc3RhdGljX2Fzc2Vy
dCgKLSAgICAgICAgKF9fZGlyZWN0X21hdGNoZXM6Ol9fbGVuZ3RoPjApIHx8Ci0gICAgICAgIChf
X3ZhbHVlX21hdGNoZXM6Ol9fbGVuZ3RoPjApIHx8Ci0gICAgICAgIChfX3JyZWZfbWF0Y2hlczo6
X19sZW5ndGg+MCkgfHwKLSAgICAgICAgKF9fY29uc3RydWN0aWJsZXM6Ol9fbGVuZ3RoPT0xKSwK
LSAgICAgICAgIkZvciBjb252ZXJzaW9uIGNvbnN0cnVjdGlvbiBvZiB2YXJpYW50cywgZXhhY3Rs
eSBvbmUgdHlwZSBtdXN0IGJlIGNvbnN0cnVjdGlibGUiKTsKLSAgICAKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgICAgIF9fZGlyZWN0X21hdGNoZXMsX192
YWx1ZV9tYXRjaGVzLF9fcnJlZl9tYXRjaGVzLAotICAgICAgICBfX2NvbnN0cnVjdGlibGVzPjo6
X190eXBlIF9fYWxsX21hdGNoZXM7Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZm
X3QgX192YWx1ZT1fX2ZpcnN0X2luZGV4PF9fYWxsX21hdGNoZXM+OjpfX3ZhbHVlOwotfTsKLQot
c3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyewotICAgIHRlbXBsYXRlPAotICAgICAg
ICBwdHJkaWZmX3QgX0luZGV4LAotICAgICAgICBib29sIF9fY29uc3RydWN0X2RpcmVjdGx5LAot
ICAgICAgICBib29sIF9faW5kZXhlZF90eXBlX2hhc19ub3Rocm93X21vdmUsCi0gICAgICAgIGJv
b2wgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT4KLSAgICBzdHJ1Y3QgX19oZWxwZXI7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgICAgICB0eXBlbmFt
ZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4K
LSAgICBzdHJ1Y3QgX19vcF90YWJsZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBf
SW5kZXgsCi0gICAgYm9vbCBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19tb3ZlPgotc3RydWN0
IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKLSAgICBfSW5kZXgsZmFsc2Us
dHJ1ZSxfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19tb3ZlPnsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9WYXJpYW50LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBzdGF0aWMgdm9pZCBfX3Ry
YW1wb2xpbmUoX1ZhcmlhbnQmIF9fdixfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX3Yu
dGVtcGxhdGUgX190d29fc3RhZ2VfcmVwbGFjZTxfSW5kZXg+KF9fYXJncy4uLik7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICBib29sIF9faW5kZXhl
ZF90eXBlX2hhc19ub3Rocm93X21vdmUsCi0gICAgYm9vbCBfX290aGVyX3R5cGVzX2hhdmVfbm90
aHJvd19tb3ZlPgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwK
LSAgICBfSW5kZXgsdHJ1ZSxfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3ZlLAotICAgIF9f
b3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
X1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGlu
ZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0
ZSBfX2RpcmVjdF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4u
KTsKLSAgICB9Ci19OwotCi0KLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXg+Ci1zdHJ1
Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxz
ZSxmYWxzZSx0cnVlPnsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHR5cGVuYW1l
IC4uLiBfQXJncz4KLSAgICBzdGF0aWMgdm9pZCBfX3RyYW1wb2xpbmUoX1ZhcmlhbnQmIF9fdixf
QXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX3YudGVtcGxhdGUgX19sb2NhbF9iYWNrdXBf
cmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleD4KLXN0cnVjdCBfX3JlcGxhY2Vf
Y29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8Ci0gICAgX0luZGV4LGZhbHNlLGZhbHNlLGZhbHNl
PnsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHR5cGVuYW1lIC4uLiBfQXJncz4K
LSAgICBzdGF0aWMgdm9pZCBfX3RyYW1wb2xpbmUoX1ZhcmlhbnQmIF9fdixfQXJncyYmIC4uLiBf
X2FyZ3MpewotICAgICAgICBfX3YudGVtcGxhdGUgX19kaXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0
ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3JlcGxhY2Vf
Y29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSko
X1ZhcmlhbnQqLF9WYXJpYW50Jik7Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19jb3B5X2Z1
bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8
cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0g
ICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgX19saHMt
PnRlbXBsYXRlIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6Om1vdmUoZ2V0PF9JbmRl
eD4oX19yaHMpKSk7Ci0gICAgICAgIF9fcmhzLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfYXNz
aWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhz
KXsKLSAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4Pihn
ZXQ8X0luZGV4PihfX3JocykpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgY29uc3QgX19tb3Zl
X2Z1bmNfdHlwZSBfX21vdmVfYXNzaWduW3NpemVvZi4uLihfSW5kaWNlcyldOwotICAgIHN0YXRp
YyBjb25zdCBfX2NvcHlfZnVuY190eXBlIF9fY29weV9hc3NpZ25bc2l6ZW9mLi4uKF9JbmRpY2Vz
KV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRp
Y2VzPgotY29uc3QgdHlwZW5hbWUgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFi
bGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21vdmVf
ZnVuY190eXBlCi1fX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwKLSAgICBf
VmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fbW92ZV9hc3NpZ25bCi0g
ICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19tb3ZlX2Fzc2lnbl9mdW5jPF9J
bmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZf
dCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBl
cjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4u
Pj46Ol9fY29weV9mdW5jX3R5cGUKLV9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3Rh
YmxlPAotICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19jb3B5
X2Fzc2lnblsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2NvcHlfYXNz
aWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eCxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZT4KLXN0cnVjdCBfX2JhY2t1
cF9zdG9yYWdlX29wc3sKLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoCi0g
ICAgICAgIF9TdG9yYWdlICogX19kZXN0LF9TdG9yYWdlJiBfX3NvdXJjZSl7Ci0gICAgICAgIG5l
dyhfX2Rlc3QpIF9TdG9yYWdlKAotICAgICAgICAgICAgaW5fcGxhY2U8X0luZGV4PiwKLSAgICAg
ICAgICAgIHN0ZDo6bW92ZShfX3NvdXJjZS5fX2dldChpbl9wbGFjZTxfSW5kZXg+KSkpOwotICAg
IH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAqIF9fb2JqKXsKLSAg
ICAgICAgX19vYmotPl9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9OwotfTsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSBfU3RvcmFnZT4KLXN0cnVjdCBfX2Jh
Y2t1cF9zdG9yYWdlX29wczxfSW5kZXgsX0luZGV4LF9TdG9yYWdlPnsKLSAgICBzdGF0aWMgdm9p
ZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoX1N0b3JhZ2UgKixfU3RvcmFnZSYpewotICAgICAgICBf
X1RIUk9XX0VYQ0VQVElPTihzdGQ6OmJhZF9hbGxvYygpKTsKLSAgICB9OwotICAgIHN0YXRpYyB2
b2lkIF9fZGVzdHJveV9mdW5jKF9TdG9yYWdlICopewotICAgICAgICBfX1RIUk9XX0VYQ0VQVElP
TihzdGQ6OmJhZF9hbGxvYygpKTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9N
YXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2UsdHlwZW5hbWUgX0luZGljZXM+Ci1zdHJ1Y3QgX19i
YWNrdXBfc3RvcmFnZV9vcF90YWJsZTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5kZXgs
dHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2JhY2t1
cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlcy4uLj4gPgotewotICAgIHR5cGVkZWYgdm9pZCAoKl9fbW92ZV9mdW5jX3R5
cGUpKF9TdG9yYWdlICogX19kZXN0LF9TdG9yYWdlJiBfX3NvdXJjZSk7Ci0gICAgdHlwZWRlZiB2
b2lkICgqX19kZXN0cm95X2Z1bmNfdHlwZSkoX1N0b3JhZ2UgKiBfX29iaik7Ci0gICAgCi0gICAg
dGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICBzdHJ1Y3QgX19oZWxwZXJ7Ci0gICAgICAgIHR5
cGVkZWYgX19iYWNrdXBfc3RvcmFnZV9vcHM8X0luZGV4LF9NYXNrSW5kZXgsX1N0b3JhZ2U+IF9f
b3BzOwotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSBfX21vdmVf
b3BzW3NpemVvZi4uLihfSW5kaWNlcyldOwotICAgIHN0YXRpYyBjb25zdCBfX2Rlc3Ryb3lfZnVu
Y190eXBlIF9fZGVzdHJveV9vcHNbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBf
TWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fbW92
ZV9mdW5jX3R5cGUKLV9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRleCxf
U3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX21vdmVfb3BzWwotICAg
ICAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2hlbHBlcjxfSW5kaWNlcz46
Ol9fb3BzOjpfX21vdmVfY29uc3RydWN0X2Z1bmMuLi4KLSAgICB9OwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxwdHJkaWZmX3QgLi4uIF9JbmRpY2Vz
PgotY29uc3QgdHlwZW5hbWUgX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0lu
ZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fZGVzdHJveV9m
dW5jX3R5cGUKLV9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRleCxfU3Rv
cmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX2Rlc3Ryb3lfb3BzWwotICAg
IHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9faGVscGVyPF9JbmRpY2VzPjo6X19v
cHM6Ol9fZGVzdHJveV9mdW5jLi4uCi0gICAgfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2V7Ci0gICAgdHlw
ZWRlZiBfX3ZhcmlhbnRfZGF0YTxfVHlwZXMuLi4+IF9fc3RvcmFnZV90eXBlOwotCi0gICAgdHlw
ZWRlZiBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgICAgICBfSW5kZXgsX19zdG9yYWdl
X3R5cGUsdHlwZW5hbWUgX190eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6X190eXBlPgotICAgIF9f
b3BfdGFibGVfdHlwZTsKLQotICAgIHB0cmRpZmZfdCBfX2JhY2t1cF9pbmRleDsKLSAgICBfX3N0
b3JhZ2VfdHlwZSYgX19saXZlX3N0b3JhZ2U7Ci0gICAgX19zdG9yYWdlX3R5cGUgX19iYWNrdXA7
Ci0KLSAgICBfX2JhY2t1cF9zdG9yYWdlKHB0cmRpZmZfdCBfX2xpdmVfaW5kZXhfLF9fc3RvcmFn
ZV90eXBlJiBfX2xpdmVfc3RvcmFnZV8pOgotICAgICAgICBfX2JhY2t1cF9pbmRleChfX2xpdmVf
aW5kZXhfKSxfX2xpdmVfc3RvcmFnZShfX2xpdmVfc3RvcmFnZV8pewotICAgICAgICBpZihfX2Jh
Y2t1cF9pbmRleD49MCl7Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNb
X19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAgICAgICZfX2JhY2t1cCxfX2xpdmVfc3RvcmFn
ZSk7Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBf
aW5kZXhdKAotICAgICAgICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgdm9pZCBfX2Rlc3Ryb3koKXsKLSAgICAgICAgaWYoX19iYWNrdXBfaW5kZXg+PTAp
Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5k
ZXhdKAotICAgICAgICAgICAgICAgICZfX2JhY2t1cCk7Ci0gICAgICAgIF9fYmFja3VwX2luZGV4
PS0xOwotICAgIH0KLSAgICAKLSAgICB+X19iYWNrdXBfc3RvcmFnZSgpewotICAgICAgICBpZihf
X2JhY2t1cF9pbmRleD49MCl7Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9v
cHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSxfX2Jh
Y2t1cCk7Ci0gICAgICAgICAgICBfX2Rlc3Ryb3koKTsKLSAgICAgICAgfQotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9jb25zdHJ1
Y3RpYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1z
dHJ1Y3QgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxfSGVh
ZD46OnZhbHVlICYmIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfUmVzdC4uLj46OnZhbHVlOwot
fTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTw+OgotICAg
IHN0ZDo6dHJ1ZV90eXBle307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1
Y3QgX19hbGxfbW92ZV9hc3NpZ25hYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBl
bmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9IZWFkLF9SZXN0
Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX21vdmVfYXNz
aWduYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX21vdmVfYXNzaWduYWJsZTxfUmVzdC4uLj46
OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX21vdmVfYXNzaWduYWJsZTw+
OgotICAgIHN0ZDo6dHJ1ZV90eXBle307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVh
ZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlPF9IZWFk
LF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX2Nv
cHlfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfUmVz
dC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX2NvcHlfYXNzaWdu
YWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307Ci0KLW5hbWVzcGFjZSBfX3N3YXBfdGVzdF9k
ZXRhaWx7Ci11c2luZyBzdGQ6OnN3YXA7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9PdGhlcj4KLXN0
cnVjdCBfX3N3YXBfcmVzdWx0e307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lPgotc3RhdGljIGNoYXIg
X190ZXN0KC4uLik7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgX090aGVyPgotc3RhdGljIHN0ZDo6cGFp
cjxjaGFyLCBzdGQ6OnBhaXI8Y2hhciwgX19zd2FwX3Jlc3VsdDxkZWNsdHlwZSgKLSAgICBzd2Fw
KHN0ZDo6ZGVjbHZhbDxfT3RoZXIgJj4oKSxzdGQ6OmRlY2x2YWw8X090aGVyICY+KCkpKT4+Pgot
X190ZXN0KF9PdGhlciAqKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9UeXBlPiBzdHJ1Y3Qg
X19pc19zd2FwcGFibGUgewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9Ci0gICAg
ICAgIHNpemVvZihfX3N3YXBfdGVzdF9kZXRhaWw6Ol9fdGVzdDxfVHlwZT4oMCkpICE9IDE7Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxsX3N3YXBwYWJs
ZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0
IF9fYWxsX3N3YXBwYWJsZTxfSGVhZCxfUmVzdC4uLj4KLXsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmFsdWU9X19pc19zd2FwcGFibGU8X0hlYWQ+Ojp2YWx1ZSAmJiBfX2FsbF9zd2FwcGFi
bGU8X1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9zd2Fw
cGFibGU8PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi10ZW1wbGF0ZTxib29sIF9Nb3ZlQ29u
c3RydWN0aWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFu
dF9tb3ZlX2NvbnN0cnVjdF9pbXBse307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVu
YW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3Rf
aW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFs
dWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFsPF9IZWFkJiY+KCkpKSAmJiBfX25vZXhjZXB0
X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2lt
cGw8dHJ1ZT57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9t
b3ZlX2NvbnN0cnVjdDoKLV9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPF9f
YWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17fTsK
LQotdGVtcGxhdGU8Ym9vbCBfTW92ZUFzc2lnbmFibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbHt9OwotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFy
aWFudF9tb3ZlX2Fzc2lnbl9pbXBsPHRydWUsIF9IZWFkLCBfUmVzdC4uLj4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9Ci0gICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2Fz
c2lnbmFibGU8X0hlYWQ+Ojp2YWx1ZSAmJgotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9j
b25zdHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYKLSAgICAgICAgX19ub2V4Y2VwdF92YXJpYW50
X21vdmVfYXNzaWduX2ltcGw8dHJ1ZSwgX1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRl
PD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbDx0cnVlPnsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZS4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduCi0g
ICAgOiBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbDwKLSAgICAgICAgICBfX2Fs
bF9tb3ZlX2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19h
bGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgIF9UeXBl
cy4uLj4ge307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxf
Y29weV9jb25zdHJ1Y3RpYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAu
Li4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4u
PgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX2NvcHlfY29uc3Ry
dWN0aWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfUmVzdC4u
Lj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX2NvcHlfY29uc3RydWN0
aWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307Ci0KLXRlbXBsYXRlPGJvb2wgX0NvcHlDb25z
dHJ1Y3RpYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50
X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGx7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQs
dHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5
X2NvbnN0cnVjdF9pbXBsPHRydWUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2YWx1ZT1ub2V4Y2VwdChfSGVhZChzdGQ6OmRlY2x2YWw8X0hlYWQgY29uc3QmPigp
KSkgJiYgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxf
UmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFy
aWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3Q6Ci1fX25vZXhj
ZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDxfX2FsbF9jb3B5X2NvbnN0cnVj
dGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0KLXRlbXBsYXRlPGJvb2wg
X0NvcHlOb25fQ29uc3RydWN0aWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9l
eGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbHt9OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92
YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWUsX0hlYWQsX1Jlc3QuLi4+
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1ub2V4Y2VwdChfSGVhZChzdGQ6OmRl
Y2x2YWw8X0hlYWQmPigpKSkgJiYgX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2Nv
bnN0cnVjdF9pbXBsPHRydWUsX1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0
cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1
ZT57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29u
c3RfY29weV9jb25zdHJ1Y3Q6Ci1fX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29u
c3RydWN0X2ltcGw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLF9U
eXBlcy4uLj4KLXt9OwotCi10ZW1wbGF0ZTxib29sIF9Td2FwcGFibGUsdHlwZW5hbWUgLi4uIF9U
eXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBse307Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBfSGVhZCwgdHlwZW5hbWUuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92
YXJpYW50X3N3YXBfaW1wbDx0cnVlLCBfSGVhZCwgX1Jlc3QuLi4+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmFsdWUgPQotICAgICAgICBub2V4Y2VwdChzd2FwKHN0ZDo6ZGVjbHZhbDxf
SGVhZCY+KCksc3RkOjpkZWNsdmFsPF9IZWFkJj4oKSkpICYmCi0gICAgICAgIF9fbm9leGNlcHRf
dmFyaWFudF9zd2FwX2ltcGw8dHJ1ZSwgX1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRl
PD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPHRydWU+ewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4u
IF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcDoKLV9fbm9leGNlcHRfdmFy
aWFudF9zd2FwX2ltcGw8X19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4u
Lj4KLXt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY2xhc3MgVmFyaWFudDoK
LSAgICAgICAgcHJpdmF0ZSBfX3ZhcmlhbnRfYmFzZTwKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4s
X19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxfVHlwZXMuLi4+OjpfX3ZhbHVlPgotewotICAg
IHR5cGVkZWYgX192YXJpYW50X2Jhc2U8VmFyaWFudDxfVHlwZXMuLi4+LF9fYWxsX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8X1R5cGVzLi4uPjo6X192YWx1ZT4gX19iYXNlX3R5cGU7Ci0gICAgZnJp
ZW5kIF9fYmFzZV90eXBlOwotICAgIGZyaWVuZCBzdHJ1Y3QgX19jb3B5X2NvbnN0cnVjdF9vcF90
YWJsZTxWYXJpYW50PjsKLSAgICBmcmllbmQgc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU8
VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlPFZh
cmlhbnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTxWYXJpYW50
PjsKLSAgICBmcmllbmQgc3RydWN0IF9fZGVzdHJveV9vcF90YWJsZTxWYXJpYW50PjsKLSAgICAK
LSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXMyPgotICAg
IGZyaWVuZCBzdHJ1Y3QgX192YXJpYW50X2FjY2Vzc29yOwotCi0gICAgZnJpZW5kIHN0cnVjdCBf
X3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjsKLQotICAgIHR5cGVkZWYgX192YXJpYW50X2RhdGE8
X1R5cGVzLi4uPiBfX3N0b3JhZ2VfdHlwZTsKLSAgICBfX3N0b3JhZ2VfdHlwZSBfX3N0b3JhZ2U7
Ci0gICAgdHlwZW5hbWUgX19kaXNjcmltaW5hdG9yX3R5cGU8c2l6ZW9mIC4uLiAoX1R5cGVzKT46
Ol9fdHlwZSBfX2luZGV4OwotCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX0FyZ3M+Ci0gICAgc2l6ZV90IF9fZW1wbGFjZV9jb25zdHJ1Y3QoX0FyZ3MmJiAuLi4gX19h
cmdzKXsKLSAgICAgICAgbmV3KCZfX3N0b3JhZ2UpIF9fc3RvcmFnZV90eXBlKAotICAgICAgICAg
ICAgaW5fcGxhY2U8X0luZGV4PixzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAg
ICAgICByZXR1cm4gIF9JbmRleDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBfX2Rlc3Ryb3lfc2Vs
ZigpewotICAgICAgICBpZih2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIF9fZGVzdHJveV9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtpbmRl
eCgpXSh0aGlzKTsKLSAgICAgICAgX19pbmRleD0tMTsKLSAgICB9Ci0gICAgCi0gICAgcHRyZGlm
Zl90IF9fbW92ZV9jb25zdHJ1Y3QoVmFyaWFudCYgX19vdGhlcil7Ci0gICAgICAgIHB0cmRpZmZf
dCBjb25zdCBfX290aGVyX2luZGV4PV9fb3RoZXIuaW5kZXgoKTsKLSAgICAgICAgaWYoX19vdGhl
cl9pbmRleD09LTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIF9fbW92ZV9jb25z
dHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbX19vdGhlcl9pbmRleF0odGhpcyxfX290
aGVyKTsKLSAgICAgICAgX19vdGhlci5fX2Rlc3Ryb3lfc2VsZigpOwotICAgICAgICByZXR1cm4g
X19vdGhlcl9pbmRleDsKLSAgICB9Ci0KLSAgICBwdHJkaWZmX3QgX19jb3B5X2NvbnN0cnVjdChW
YXJpYW50IGNvbnN0JiBfX290aGVyKXsKLSAgICAgICAgcHRyZGlmZl90IGNvbnN0IF9fb3RoZXJf
aW5kZXg9X19vdGhlci5pbmRleCgpOwotICAgICAgICBpZihfX290aGVyX2luZGV4PT0tMSkKLSAg
ICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxW
YXJpYW50Pjo6X19hcHBseVtfX290aGVyX2luZGV4XSh0aGlzLF9fb3RoZXIpOwotICAgICAgICBy
ZXR1cm4gX19vdGhlcl9pbmRleDsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIF9fcmVwbGFjZV9jb25zdHJ1Y3QoX0FyZ3Mm
JiAuLi4gX19hcmdzKXsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxf
SW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIF9fdGhpc190eXBlOwotICAgICAgICBfX3JlcGxhY2Vf
Y29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8Ci0gICAgICAgICAgICBfSW5kZXgsCi0gICAgICAg
ICAgICBfX3N0b3JhZ2Vfbm90aHJvd19jb25zdHJ1Y3RpYmxlPF9fdGhpc190eXBlLF9BcmdzLi4u
Pjo6X192YWx1ZSB8fAotICAgICAgICAgICAgKHNpemVvZi4uLihfVHlwZXMpPT0xKSwKLSAgICAg
ICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfX3RoaXNfdHlwZT46
Ol9fdmFsdWUsCi0gICAgICAgICAgICBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8Ci0gICAgICAgICAgICAgICAgX0luZGV4LF9UeXBlcy4uLj46Ol9fdmFsdWUKLSAg
ICAgICAgICAgID46Ol9fdHJhbXBvbGluZSgqdGhpcyxzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJn
cykuLi4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4u
IF9BcmdzPgotICAgIHZvaWQgX190d29fc3RhZ2VfcmVwbGFjZShfQXJncyYmIC4uLiBfX2FyZ3Mp
ewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMu
Li4+OjpfX3R5cGUgX190eXBlOwotICAgICAgICBfX3ZhcmlhbnRfZGF0YTxfX3R5cGU+IF9fbG9j
YWwoCi0gICAgICAgICAgICBpbl9wbGFjZTwwPixzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncyku
Li4pOwotICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAgICAgICBfX2VtcGxhY2VfY29uc3Ry
dWN0PF9JbmRleD4oCi0gICAgICAgICAgICBzdGQ6Om1vdmUoX19sb2NhbC5fX2dldChpbl9wbGFj
ZTwwPikpKTsKLSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0gICAgICAgIF9fbG9jYWwuX19kZXN0
cm95KGluX3BsYWNlPDA+KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIF9fbG9jYWxfYmFja3VwX3JlcGxhY2UoX0FyZ3Mm
JiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19iYWNrdXBfc3RvcmFnZTxfSW5kZXgsX1R5cGVzLi4u
PiBfX2JhY2t1cChfX2luZGV4LF9fc3RvcmFnZSk7Ci0gICAgICAgIF9fZW1wbGFjZV9jb25zdHJ1
Y3Q8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2lu
ZGV4PV9JbmRleDsKLSAgICAgICAgX19iYWNrdXAuX19kZXN0cm95KCk7Ci0gICAgfQotICAgIAot
ICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQg
X19kaXJlY3RfcmVwbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpIHsKLSAgICAgICAgX19kZXN0cm95
X3NlbGYoKTsKLSAgICAgICAgX19lbXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KHN0ZDo6Zm9yd2Fy
ZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgICAgIF9faW5kZXg9X0luZGV4OwotICAgIH0KLQot
ICAgIHN0cnVjdCBfX3ByaXZhdGVfdHlwZXt9OwotCi1wdWJsaWM6Ci0gICAgY29uc3RleHByIFZh
cmlhbnQoKQotICAgICAgICBfX05PRVhDRVBUXyhub2V4Y2VwdCh0eXBlbmFtZSBfX2luZGV4ZWRf
dHlwZTwwLF9UeXBlcy4uLj46Ol9fdHlwZSgpKSk6Ci0gICAgICAgIF9fc3RvcmFnZShpbl9wbGFj
ZTwwPiksCi0gICAgICAgIF9faW5kZXgoMCkKLSAgICB7fQotCi0gICAgY29uc3RleHByIFZhcmlh
bnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5
cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKQot
ICAgIF9fTk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdDxfVHlwZXMu
Li4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgoX19tb3ZlX2NvbnN0cnVjdChfX290aGVyKSkK
LSAgICB7fQotCi0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25h
bDwhX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19w
cml2YXRlX3R5cGU+Ojp0eXBlJiYgX19vdGhlcik9ZGVsZXRlOwotICAgIAotICAgIGNvbnN0ZXhw
ciBWYXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19hbGxfY29weV9jb25zdHJ1Y3Rp
YmxlPF9UeXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290
aGVyKQotICAgIF9fTk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9j
b25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAgICAgICBfX2luZGV4KF9fY29weV9jb25z
dHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5cGVuYW1l
IHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2
YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYgX19vdGhlcik9ZGVsZXRlOwotCi0g
ICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5
X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46
OnR5cGUgY29uc3QmIF9fb3RoZXIpCi0gICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50
X2NvbnN0X2NvcHlfY29uc3RydWN0PF9UeXBlcy4uLj46OnZhbHVlKToKLSAgICAgICAgX19pbmRl
eChfX2NvcHlfY29uc3RydWN0KF9fb3RoZXIpKQotICAgIHt9Ci0KLSAgICBjb25zdGV4cHIgVmFy
aWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8
X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QmIF9f
b3RoZXIpPWRlbGV0ZTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFt
ZSAuLi4gX0FyZ3M+Ci0gICAgZXhwbGljaXQgY29uc3RleHByIFZhcmlhbnQoaW5fcGxhY2VfdHlw
ZV90PF9UeXBlPixfQXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3N0b3JhZ2UoCi0gICAg
ICAgICAgICBpbl9wbGFjZTxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4s
Ci0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAotICAgICAgICBf
X2luZGV4KF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlKQotICAgIHsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0cnVjdGlibGU8X1R5cGUsX0FyZ3MuLi4+
Ojp2YWx1ZSwiVHlwZSBtdXN0IGJlIGNvbnN0cnVjdGlibGUgZnJvbSBhcmdzIik7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgZXhw
bGljaXQgY29uc3RleHByIFZhcmlhbnQoaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+LF9BcmdzJiYg
Li4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3RvcmFnZShpbl9wbGFjZTxfSW5kZXg+LHN0ZDo6Zm9y
d2FyZDxfQXJncz4oX19hcmdzKS4uLiksCi0gICAgICAgIF9faW5kZXgoX0luZGV4KQotICAgIHsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0cnVjdGlibGU8dHlwZW5hbWUgX19p
bmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSxfQXJncy4uLj46OnZhbHVlLCJU
eXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3MiKTsKLSAgICB9Ci0gICAgCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgY29uc3RleHByIFZhcmlhbnQoX1R5cGUmJiBf
X3gpOgotICAgICAgICBfX3N0b3JhZ2UoCi0gICAgICAgICAgICBpbl9wbGFjZTwKLSAgICAgICAg
ICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4s
Ci0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X1R5cGU+KF9feCkpLAotICAgICAgICBfX2luZGV4
KF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSkKLSAg
ICB7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsCi0gICAgICAgICAgICAgdHlwZW5h
bWUgX0VuYWJsZT0KLSAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAg
ICAgICAgICAgICAgKF9fY29uc3RydWN0aWJsZV9tYXRjaGVzPHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxfVHlwZT4sX1R5cGVzLi4uPjo6X190eXBlOjpfX2xlbmd0aD4wKQotICAgICAgICAgICAgID46
OnR5cGU+Ci0gICAgY29uc3RleHByIFZhcmlhbnQoc3RkOjppbml0aWFsaXplcl9saXN0PF9UeXBl
PiBfX3gpOgotICAgICAgICBfX3N0b3JhZ2UoCi0gICAgICAgICAgICBpbl9wbGFjZTwKLSAgICAg
ICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8c3RkOjppbml0aWFsaXplcl9saXN0PF9U
eXBlPixfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAgICAgICAgICAgIF9feCksCi0gICAgICAgIF9f
aW5kZXgoX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1R5
cGU+LF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAge30KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHlwZT4KLSAgICBWYXJpYW50JiBvcGVyYXRvcj0oX1R5cGUmJiBfX3gpewotICAgICAg
ICBjb25zdGV4cHIgc2l6ZV90IF9JbmRleD0KLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19j
b25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZTsKLSAgICAgICAgaWYoX0luZGV4PT1f
X2luZGV4KXsKLSAgICAgICAgICAgIGdldDxfSW5kZXg+KCp0aGlzKT1zdGQ6OmZvcndhcmQ8X1R5
cGU+KF9feCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFj
ZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6OmZvcndhcmQ8X1R5cGU+KF9feCkpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0o
Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAhKF9fYWxs
X2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAg
ICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAg
IFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCAmX19vdGhlcikgPSBkZWxldGU7
Ci0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0
aW9uYWw8Ci0gICAgICAgICAgICBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVz
Li4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5
cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5
cGUgY29uc3QgJl9fb3RoZXIpIHsKLSAgICAgICAgaWYgKF9fb3RoZXIudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaWYoX19vdGhlci5pbmRleCgpPT1pbmRleCgpKXsKLSAgICAgICAgICAgIF9f
Y29weV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhpcyxfX290
aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAgX19yZXBsYWNlX2Nv
bnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8VmFyaWFudD46Ol9fY29weV9hc3NpZ25bCi0gICAg
ICAgICAgICAgICAgX19vdGhlci5pbmRleCgpXSh0aGlzLF9fb3RoZXIpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAg
ICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgIShfX2FsbF9jb3B5
X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxf
bW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9f
YWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSksCi0gICAgICAgICAgICBWYXJp
YW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9fb3RoZXIpID0gZGVsZXRlOwotCi0gICAgVmFy
aWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAg
ICAgICAgICAgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0g
ICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
ICYmCi0gICAgICAgICAgICAgICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZh
bHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlICZfX290aGVy
KSB7Ci0gICAgICAgIGlmKF9fb3RoZXIudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKXsKLSAgICAg
ICAgICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihfX290
aGVyLmluZGV4KCk9PWluZGV4KCkpewotICAgICAgICAgICAgX19jb3B5X2Fzc2lnbl9vcF90YWJs
ZTxWYXJpYW50Pjo6X19hcHBseVtpbmRleCgpXSh0aGlzLF9fb3RoZXIpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2V7Ci0gICAgICAgICAgICBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19v
cF90YWJsZTxWYXJpYW50Pjo6X19jb3B5X2Fzc2lnblsKLSAgICAgICAgICAgICAgICBfX290aGVy
LmluZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICp0aGlz
OwotICAgIH0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6
Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAhKF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlw
ZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU8X1R5
cGVzLi4uPjo6dmFsdWUpLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0
eXBlICYmX19vdGhlcikgPSBkZWxldGU7Ci0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAg
ICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fYWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJiYKLSAg
ICAgICAgICAgIF9fb3RoZXIpIF9fTk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fz
c2lnbjxfVHlwZXMuLi4+Ojp2YWx1ZSkgewotICAgICAgICBpZiAoX19vdGhlci52YWx1ZWxlc3Nf
YnlfZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZihfX290aGVyLmluZGV4KCk9PWluZGV4KCkpewotICAgICAgICAg
ICAgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtpbmRleCgpXSh0aGlz
LF9fb3RoZXIpOwotICAgICAgICAgICAgX19vdGhlci5fX2Rlc3Ryb3lfc2VsZigpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgICBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBl
cjo6X19vcF90YWJsZTxWYXJpYW50Pjo6X19tb3ZlX2Fzc2lnblsKLSAgICAgICAgICAgICAgICBf
X290aGVyLmluZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfQXJncz4KLSAgICB2b2lkIGVtcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAg
X19kaXJlY3RfcmVwbGFjZTxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4o
Ci0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLSAg
ICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2
b2lkIGVtcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFj
ZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotICAgIAot
ICAgIGNvbnN0ZXhwciBib29sIHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBfX05PRVhD
RVBUewotICAgICAgICByZXR1cm4gX19pbmRleD09LTE7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBw
dHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhDRVBUewotICAgICAgICByZXR1cm4gX19pbmRl
eDsKLSAgICB9Ci0KLSAgICB2b2lkIHN3YXAoCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0
aW9uYWw8Ci0gICAgICAgICAgICBfX2FsbF9zd2FwcGFibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYK
LSAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFs
dWUsCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUKLSAgICAgICAg
ICAgICZfX290aGVyKSBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcDxfVHlwZXMu
Li4+Ojp2YWx1ZSkgewotICAgICAgICBpZiAoX19vdGhlci5pbmRleCgpID09IGluZGV4KCkpIHsK
LSAgICAgICAgICAgIGlmKCF2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAg
ICAgX19zd2FwX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKCp0aGlzLF9fb3Ro
ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgICBWYXJpYW50IF9fdGVt
cChzdGQ6Om1vdmUoX19vdGhlcikpOwotICAgICAgICAgICAgX19vdGhlci5fX2luZGV4PV9fb3Ro
ZXIuX19tb3ZlX2NvbnN0cnVjdCgqdGhpcyk7Ci0gICAgICAgICAgICBfX2luZGV4PV9fbW92ZV9j
b25zdHJ1Y3QoX190ZW1wKTsKLSAgICAgICAgfQotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4KLWNs
YXNzIFZhcmlhbnQ8PnsKLXB1YmxpYzoKLSAgICBWYXJpYW50KCk9ZGVsZXRlOwotICAgIAotICAg
IGNvbnN0ZXhwciBib29sIHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBfX05PRVhDRVBU
ewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY29uc3RleHByIHB0cmRpZmZfdCBp
bmRleCgpIGNvbnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHN3YXAoVmFyaWFudCYpe30KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlw
ZXM+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxfX2FsbF9zd2FwcGFibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVj
dGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkPjo6
dHlwZQotc3dhcChWYXJpYW50PF9UeXBlcy4uLj4gJl9fbGhzLCBWYXJpYW50PF9UeXBlcy4uLj4g
Jl9fcmhzKSBfX05PRVhDRVBUXygKLSAgICBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcDxfVHlwZXMu
Li4+Ojp2YWx1ZSkgewotICAgIF9fbGhzLnN3YXAoX19yaHMpOwotfQotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192YXJpYW50X2FjY2Vz
c29yewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZSBfX3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIGdldChWYXJp
YW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0
KGluX3BsYWNlPF9JbmRleD4pOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSBj
b25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICAgICAgcmV0dXJu
IF9fdi5fX3N0b3JhZ2UuX19nZXQoaW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgfQotICAgIHN0YXRp
YyBjb25zdGV4cHIgX190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAg
ICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0X3JyZWYoaW5fcGxhY2U8X0luZGV4Pik7Ci0g
ICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5
cGVzLi4uPiBjb25zdCYmIF9fdil7Ci0gICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0
X3JyZWYoaW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYgZ2V0KFZhcmlhbnQ8
X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlw
ZXMuLi4+OjpfX3ZhbHVlPihfX3YpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4u
PiYmIF9fdil7Ci0gICAgcmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6
X192YWx1ZT4oc3RkOjptb3ZlKF9fdikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlIGNvbnN0JiBnZXQoVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBl
LF9UeXBlcy4uLj46Ol9fdmFsdWU+KF9fdik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBl
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQoVmFyaWFu
dDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxf
VHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7Ci19Ci0KLQotdGVtcGxh
dGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVu
YW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldChW
YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJuICooCi0gICAgICAgIChf
SW5kZXghPV9fdi5pbmRleCgpKQotICAgICAgICAgICAgPyBzdGQ6OmFkZHJlc3NvZihfX3Rocm93
X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVz
Li4uPjo6X190eXBlIGNvbnN0Jj4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIpKQotICAgICAg
ICAgICAgOiBzdGQ6OmFkZHJlc3NvZihfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4u
Lj46OmdldChfX3YpKQotICAgICk7Ci19Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5k
ZXgsX1R5cGVzLi4uPjo6X190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAg
IHJldHVybiAqKAotICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKLSAgICAgICAgICAgID8g
c3RkOjphZGRyZXNzb2YoX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSY+KCJCYWQgVmFyaWFudCBpbmRleCBp
biBnZXQiKSkKLSAgICAgICAgICAgIDogc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29y
PF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSkKLSAgICApOwotfQotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19p
bmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBl
cy4uLj4mJiBfX3YpewotICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBl
cy4uLj46OmdldCgKLSAgICAgICAgKCgoX0luZGV4IT1fX3YuaW5kZXgoKSkgPyBfX3Rocm93X2Jh
ZF92YXJpYW50X2FjY2VzczxpbnQ+KCJCYWQgVmFyaWFudCBpbmRleCBpbiBnZXQiKSA6IDApLCBz
dGQ6Om1vdmUoX192KSkKLSAgICApOwotfQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5
cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmJiBfX3YpewotICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4u
Lj46OmdldCgKLSAgICAgICAgKCgoX0luZGV4IT1fX3YuaW5kZXgoKSkgPyBfX3Rocm93X2JhZF92
YXJpYW50X2FjY2VzczxpbnQ+KCJCYWQgVmFyaWFudCBpbmRleCBpbiBnZXQiKSA6IDApLCBzdGQ6
Om1vdmUoX192KSkKLSAgICApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZT4gZ2V0X2lm
KFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1cm4gKF9fdHlwZV9pbmRleDxfVHlw
ZSxfVHlwZXMuLi4+OjpfX3ZhbHVlIT1fX3YuaW5kZXgoKSk/bnVsbHB0cjpzdGQ6OmFkZHJlc3Nv
ZihnZXQ8X1R5cGU+KF9fdikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25zdD4g
Z2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICByZXR1cm4gKF9fdHlw
ZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlIT1fX3YuaW5kZXgoKSk/bnVsbHB0cjpz
dGQ6OmFkZHJlc3NvZihnZXQ8X1R5cGU+KF9fdikpOwotfQotCi10ZW1wbGF0ZTxwdHJkaWZmX3Qg
X0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90
PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+IGdldF9p
ZihWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJuICgoX0luZGV4IT1fX3YuaW5k
ZXgoKSk/bnVsbHB0cjoKLSAgICAgICAgc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29y
PF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSkpOwotfQotCi10ZW1wbGF0ZTxwdHJkaWZmX3Qg
X0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90
PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3Q+
IGdldF9pZigKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJu
ICgoX0luZGV4IT1fX3YuaW5kZXgoKSk/bnVsbHB0cjoKLSAgICAgICAgc3RkOjphZGRyZXNzb2Yo
X192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSkpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJv
b2wgaG9sZHNfYWx0ZXJuYXRpdmUoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpIF9fTk9F
WENFUFR7Ci0gICAgcmV0dXJuIF9fdi5pbmRleCgpPT1fX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVz
Li4uPjo6X192YWx1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9WaXNpdG9yPgotc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcj57
Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3ImPigpKCkpIF9fdHlw
ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIF9IZWFkLHR5cGVu
YW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX0hl
YWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9WaXNpdG9y
Jj4oKShzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3Zpc2l0b3JfdGFi
bGV7Ci0gICAgdHlwZWRlZiBWYXJpYW50PF9UeXBlcy4uLj4gX192YXJpYW50X3R5cGU7Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4u
Pjo6X190eXBlIF9fcmV0dXJuX3R5cGU7Ci0gICAgdHlwZWRlZiBfX3JldHVybl90eXBlICgqX19m
dW5jX3R5cGUpKF9WaXNpdG9yJixfX3ZhcmlhbnRfdHlwZSYpOwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1R5cGU+Ci0gICAgc3RhdGljIF9fcmV0dXJuX3R5cGUgX190cmFtcG9saW5lX2Z1bmMo
X1Zpc2l0b3ImIF9fdmlzaXRvcixfX3ZhcmlhbnRfdHlwZSYgX192KXsKLSAgICAgICAgcmV0dXJu
IF9fdmlzaXRvcihnZXQ8X1R5cGU+KF9fdikpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBf
X2Z1bmNfdHlwZSBfX3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0IHR5cGVuYW1l
IF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX2Z1bmNfdHlwZSBfX3Zpc2l0
b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190cmFtcG9saW5lW3NpemVvZi4uLihfVHlw
ZXMpXT17Ci0gICAgICAgICZfX3RyYW1wb2xpbmVfZnVuYzxfVHlwZXM+Li4uCi0gICAgfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190
eXBlCi12aXNpdChfVmlzaXRvciYmIF9fdmlzaXRvcixWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7
Ci0gICAgcmV0dXJuIChfX3YudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQotICAgICAgICA/IF9f
dGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxf
VmlzaXRvcixfVHlwZXMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSBWYXJpYW50IikK
LSAgICAgICAgOiBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190cmFtcG9s
aW5lW19fdi5pbmRleCgpXShfX3Zpc2l0b3IsX192KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLXN0cnVjdCBfX211bHRpX3Zpc2l0b3Jf
cmV0dXJuX3R5cGV7Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3Im
PigpKGdldDwwPihzdGQ6OmRlY2x2YWw8X1ZhcmlhbnRzPigpKS4uLikpCi0gICAgX190eXBlOwot
fTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgsdHlwZW5hbWUgX0luZGljZXM+Ci1z
dHJ1Y3QgX192aXNpdF9oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCAuLi4gX0luZGljZXM+
Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI8MCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4K
LSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlw
ZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBf
X3Zpc2l0b3IsX1ZhcmlhbnRzJiAuLi4gX192KXsKLSAgICAgICAgcmV0dXJuIF9fdmlzaXRvcihn
ZXQ8X0luZGljZXM+KF9fdikuLi4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5k
ZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotc3RydWN0IF9fYXJnX3NlbGVjdG9yX3Q7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FyZ19zZWxl
Y3Rvcl90PDAsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgX0hlYWQgX190eXBlOwotCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJiBfX2hlYWQsX1Jlc3Qm
IC4uLil7Ci0gICAgICAgIHJldHVybiBfX2hlYWQ7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8c2l6
ZV90IF9JbmRleCx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19h
cmdfc2VsZWN0b3JfdDxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5h
bWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJixfUmVzdCYgLi4uIF9f
cmVzdCl7Ci0gICAgICAgIHJldHVybiBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleC0xLF9SZXN0Li4u
Pjo6X19zZWxlY3QoX19yZXN0Li4uKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX0lu
ZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2FyZ19zZWxlY3Rv
cl90PF9JbmRleCxfQXJncy4uLj46Ol9fdHlwZSYmIF9fYXJnX3NlbGVjdG9yKF9BcmdzJiYgLi4u
IF9fYXJncyl7Ci0gICAgcmV0dXJuIHN0ZDo6Zm9yd2FyZDx0eXBlbmFtZSBfX2FyZ19zZWxlY3Rv
cl90PF9JbmRleCxfQXJncy4uLj46Ol9fdHlwZT4oCi0gICAgICAgIF9fYXJnX3NlbGVjdG9yX3Q8
X0luZGV4LF9BcmdzLi4uPjo6X19zZWxlY3QoX19hcmdzLi4uKSk7Ci19Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsc2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjJ7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0
b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1l
IF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5
cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYgLi4uIF9fdil7
Ci0gICAgICAgIHJldHVybiAoX19hcmdfc2VsZWN0b3I8X1ZhcmlhbnRJbmRleC0xPihfX3YuLi4p
LmluZGV4KCk9PV9JbmRleCkKLSAgICAgICAgICAgID8gX192aXNpdF9oZWxwZXI8X1ZhcmlhbnRJ
bmRleC0xLF9faW5kZXhfc2VxdWVuY2U8X0luZGV4LF9JbmRpY2VzLi4uPj46Ol9fdmlzaXQoX192
aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pCi0gICAgICAgICAgICA6IF9f
dmlzaXRfaGVscGVyMjxfSW5kZXgtMSxfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4uPjo6X192aXNp
dChfX3Zpc2l0b3Isc3RkOjpmb3J3YXJkPF9WYXJpYW50cz4oX192KS4uLik7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4K
LXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjI8LTEsX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj57Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLSAg
ICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxf
VmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJixfVmFy
aWFudHMmJiAuLi4pewotICAgICAgICByZXR1cm4gX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8
dHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4u
Lj46Ol9fdHlwZT4oIlZpc2l0aW5nIG9mIGVtcHR5IFZhcmlhbnQiKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9jb3VudDsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9j
b3VudDxWYXJpYW50PF9UeXBlcy4uLj4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9f
dmFsdWU9c2l6ZW9mLi4uKF9UeXBlcyk7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFu
dD4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudCY+ewotICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IF9fdmFsdWU9X192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQ+Ojpf
X3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJp
YW50X3R5cGVfY291bnQ8X1ZhcmlhbnQgY29uc3QmPnsKLSAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBfX3ZhbHVlPV9fdmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50Pjo6X192YWx1ZTsKLX07
Ci0KLXRlbXBsYXRlPHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+
Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI8X1ZhcmlhbnRJbmRleCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAu
Li4gX1ZhcmlhbnRzPgotICAgIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNp
dG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlz
aXQoX1Zpc2l0b3ImIF9fdmlzaXRvcixfVmFyaWFudHMmJiAuLi4gX192KXsKLSAgICAgICAgcmV0
dXJuIF9fdmlzaXRfaGVscGVyMjwKLSAgICAgICAgICAgIF9fdmFyaWFudF90eXBlX2NvdW50PAot
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9fYXJnX3NlbGVjdG9yX3Q8Ci0gICAgICAgICAgICAg
ICAgICAgIF9WYXJpYW50SW5kZXgtMSxfVmFyaWFudHMuLi4+OjpfX3R5cGU+OjpfX3ZhbHVlLTEs
Ci0gICAgICAgICAgICBfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4uPjo6X192aXNpdCgKLSAgICAg
ICAgICAgICAgICBfX3Zpc2l0b3Isc3RkOjpmb3J3YXJkPF9WYXJpYW50cyYmPihfX3YpLi4uKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1Zh
cmlhbnRzPgotY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxf
VmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLXZpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9y
LF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgIHJldHVybiBfX3Zpc2l0X2hlbHBlcjxzaXplb2Yu
Li4oX1ZhcmlhbnRzKSxfX2luZGV4X3NlcXVlbmNlPD4+OjpfX3Zpc2l0KAotICAgICAgICBfX3Zp
c2l0b3Isc3RkOjpmb3J3YXJkPF9WYXJpYW50cz4oX192KS4uLik7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KFZhcmlhbnQ8X1R5
cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0g
ICAgcmV0dXJuIChfX2xocy5pbmRleCgpPT1fX3Jocy5pbmRleCgpKSAmJgotICAgICAgICAoKF9f
bGhzLmluZGV4KCk9PS0xKSB8fAotICAgICAgICAgX19lcXVhbGl0eV9vcF90YWJsZTxWYXJpYW50
PF9UeXBlcy4uLj4+OjpfX2VxdWFsaXR5X2NvbXBhcmVbX19saHMuaW5kZXgoKV0oCi0gICAgICAg
ICAgICAgX19saHMsX19yaHMpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4K
LWNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xo
cyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gIShfX2xocz09
X19yaHMpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJv
b2wgb3BlcmF0b3I8KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlw
ZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuIChfX2xocy5pbmRleCgpPF9fcmhzLmlu
ZGV4KCkpIHx8Ci0gICAgICAgICgoX19saHMuaW5kZXgoKT09X19yaHMuaW5kZXgoKSkgJiYKLSAg
ICAgICAgICgoX19saHMuaW5kZXgoKSE9LTEpICYmCi0gICAgICAgICAgX19sZXNzX3RoYW5fb3Bf
dGFibGU8VmFyaWFudDxfVHlwZXMuLi4+Pjo6Ci0gICAgICAgICAgX19sZXNzX3RoYW5fY29tcGFy
ZVtfX2xocy5pbmRleCgpXShfX2xocyxfX3JocykpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVy
biBfX3JoczxfX2xoczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPj0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJp
YW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gIShfX2xoczxfX3Jocyk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVy
YXRvcjw9KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+
IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuICEoX19saHM+X19yaHMpOwotfQotCi1zdHJ1Y3Qg
TW9ub3N0YXRle307Ci0KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KE1vbm9zdGF0
ZSBjb25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KE1vbm9zdGF0ZSBjb25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJl
dHVybiBmYWxzZTt9Ci1jb25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I+PShNb25vc3RhdGUg
Y29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gdHJ1ZTt9Ci1jb25zdGV4cHIgaW5saW5l
IGJvb2wgb3BlcmF0b3I8PShNb25vc3RhdGUgY29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1
cm4gdHJ1ZTt9Ci1jb25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I+KE1vbm9zdGF0ZSBjb25z
dCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiBmYWxzZTt9Ci1jb25zdGV4cHIgaW5saW5lIGJv
b2wgb3BlcmF0b3I8KE1vbm9zdGF0ZSBjb25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiBm
YWxzZTt9Ci0KLXN0cnVjdCBfX2hhc2hfdmlzaXRvcnsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZT4KLSAgICBzaXplX3Qgb3BlcmF0b3IoKShfVHlwZSBjb25zdCYgX194KXsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6aGFzaDxfVHlwZT4oKShfX3gpOwotICAgIH0KLX07Ci0KLS8vIC0tIFdlYktp
dCBBZGRpdGlvbnMgLS0KLQotdGVtcGxhdGU8Y2xhc3MgViwgY2xhc3MuLi4gRj4KLWF1dG8gc3dp
dGNoT24oViYmIHYsIEYmJi4uLiBmKSAtPiBkZWNsdHlwZSh2aXNpdChtYWtlVmlzaXRvcihzdGQ6
OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpKQotewotICAgIHJldHVybiB2
aXNpdChtYWtlVmlzaXRvcihzdGQ6OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4o
dikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotbmFtZXNwYWNlIHN0ZCB7Ci0KLXRlbXBs
YXRlPD4KLXN0cnVjdCBoYXNoPFdURjo6TW9ub3N0YXRlPnsKLSAgICBzaXplX3Qgb3BlcmF0b3Io
KShXVEY6Ok1vbm9zdGF0ZSkgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIDQyOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgaGFzaDxXVEY6OlZh
cmlhbnQ8X1R5cGVzLi4uPj57Ci0gICAgc2l6ZV90IG9wZXJhdG9yKCkoV1RGOjpWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QgJnYpIF9fTk9FWENFUFQgewotICAgICAgICByZXR1cm4gc3RkOjpoYXNo
PHB0cmRpZmZfdD4oKSh2LmluZGV4KCkpIF4gV1RGOjp2aXNpdChXVEY6Ol9faGFzaF92aXNpdG9y
KCksIHYpOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHN0ZAotCi11c2luZyBXVEY6Ok1v
bm9zdGF0ZTsKLXVzaW5nIFdURjo6VmFyaWFudDsKLQotI2VuZGlmIC8vICFDT01QSUxFUihDTEFO
RykgfHwgV1RGX0NQUF9TVERfVkVSID49IDE0Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdt
YSB3YXJuaW5nKHBvcCkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL1ZlY3Rvci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3Rm
L1ZlY3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTJkZjkyNjJkNzAyNTAz
YmJhMmVlNzU2NjllYTg2NDBmYjNmNGFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9WZWN0b3Iu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE1NTUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBXVEZfVmVjdG9yX2gKLSNkZWZpbmUgV1RGX1Zl
Y3Rvcl9oCi0KLSNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgotI2luY2x1ZGUgPGxpbWl0cz4K
LSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSNpbmNsdWRlIDx1
dGlsaXR5PgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgotI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5oPgotI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmFsdWVDaGVjay5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3JUcmFpdHMuaD4KLQotI2lmIEFTQU5fRU5BQkxFRAotZXh0ZXJuICJDIiB2b2lk
IF9fc2FuaXRpemVyX2Fubm90YXRlX2NvbnRpZ3VvdXNfY29udGFpbmVyKGNvbnN0IHZvaWQqIGJl
Z2luLCBjb25zdCB2b2lkKiBlbmQsIGNvbnN0IHZvaWQqIG9sZF9taWQsIGNvbnN0IHZvaWQqIG5l
d19taWQpOwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8Ym9vbCBuZWVk
c0Rlc3RydWN0aW9uLCB0eXBlbmFtZSBUPgotc3RydWN0IFZlY3RvckRlc3RydWN0b3I7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgVmVjdG9yRGVzdHJ1Y3RvcjxmYWxzZSwgVD4KLXsK
LSAgICBzdGF0aWMgdm9pZCBkZXN0cnVjdChUKiwgVCopIHt9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotc3RydWN0IFZlY3RvckRlc3RydWN0b3I8dHJ1ZSwgVD4KLXsKLSAgICBzdGF0aWMg
dm9pZCBkZXN0cnVjdChUKiBiZWdpbiwgVCogZW5kKSAKLSAgICB7Ci0gICAgICAgIGZvciAoVCog
Y3VyID0gYmVnaW47IGN1ciAhPSBlbmQ7ICsrY3VyKQotICAgICAgICAgICAgY3VyLT5+VCgpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlIDxib29sIG5lZWRzSW5pdGlhbGl6YXRpb24sIGJvb2wgY2Fu
SW5pdGlhbGl6ZVdpdGhNZW1zZXQsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgVmVjdG9ySW5pdGlhbGl6
ZXI7Ci0KLXRlbXBsYXRlPGJvb2wgaWdub3JlLCB0eXBlbmFtZSBUPgotc3RydWN0IFZlY3Rvcklu
aXRpYWxpemVyPGZhbHNlLCBpZ25vcmUsIFQ+Ci17Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZShUKiwgVCopIHt9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IFZlY3Rvcklu
aXRpYWxpemVyPHRydWUsIGZhbHNlLCBUPgotewotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUo
VCogYmVnaW4sIFQqIGVuZCkgCi0gICAgewotICAgICAgICBmb3IgKFQqIGN1ciA9IGJlZ2luOyBj
dXIgIT0gZW5kOyArK2N1cikKLSAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgY3VyKSBUOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgVmVjdG9ySW5pdGlhbGl6ZXI8
dHJ1ZSwgdHJ1ZSwgVD4KLXsKLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFQqIGJlZ2luLCBU
KiBlbmQpIAotICAgIHsKLSAgICAgICAgbWVtc2V0KGJlZ2luLCAwLCByZWludGVycHJldF9jYXN0
PGNoYXIqPihlbmQpIC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmVnaW4pKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZSA8Ym9vbCBjYW5Nb3ZlV2l0aE1lbWNweSwgdHlwZW5hbWUgVD4KLXN0cnVj
dCBWZWN0b3JNb3ZlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBWZWN0b3JNb3Zl
cjxmYWxzZSwgVD4KLXsKLSAgICBzdGF0aWMgdm9pZCBtb3ZlKFQqIHNyYywgVCogc3JjRW5kLCBU
KiBkc3QpCi0gICAgewotICAgICAgICB3aGlsZSAoc3JjICE9IHNyY0VuZCkgewotICAgICAgICAg
ICAgbmV3IChOb3ROdWxsLCBkc3QpIFQoV1RGTW92ZSgqc3JjKSk7Ci0gICAgICAgICAgICBzcmMt
Pn5UKCk7Ci0gICAgICAgICAgICArK2RzdDsKLSAgICAgICAgICAgICsrc3JjOwotICAgICAgICB9
Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIG1vdmVPdmVybGFwcGluZyhUKiBzcmMsIFQqIHNyY0Vu
ZCwgVCogZHN0KQotICAgIHsKLSAgICAgICAgaWYgKHNyYyA+IGRzdCkKLSAgICAgICAgICAgIG1v
dmUoc3JjLCBzcmNFbmQsIGRzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgVCogZHN0
RW5kID0gZHN0ICsgKHNyY0VuZCAtIHNyYyk7Ci0gICAgICAgICAgICB3aGlsZSAoc3JjICE9IHNy
Y0VuZCkgewotICAgICAgICAgICAgICAgIC0tc3JjRW5kOwotICAgICAgICAgICAgICAgIC0tZHN0
RW5kOwotICAgICAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgZHN0RW5kKSBUKFdURk1vdmUoKnNy
Y0VuZCkpOwotICAgICAgICAgICAgICAgIHNyY0VuZC0+flQoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgVmVjdG9y
TW92ZXI8dHJ1ZSwgVD4KLXsKLSAgICBzdGF0aWMgdm9pZCBtb3ZlKGNvbnN0IFQqIHNyYywgY29u
c3QgVCogc3JjRW5kLCBUKiBkc3QpIAotICAgIHsKLSAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzcmNFbmQpIC0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oc3JjKSk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIG1vdmVPdmVybGFwcGlu
Zyhjb25zdCBUKiBzcmMsIGNvbnN0IFQqIHNyY0VuZCwgVCogZHN0KSAKLSAgICB7Ci0gICAgICAg
IG1lbW1vdmUoZHN0LCBzcmMsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHNyY0VuZCkg
LSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzcmMpKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZSA8Ym9vbCBjYW5Db3B5V2l0aE1lbWNweSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBWZWN0b3JD
b3BpZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgVmVjdG9yQ29waWVyPGZhbHNl
LCBUPgotewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIHZvaWQgdW5pbml0
aWFsaXplZENvcHkoY29uc3QgVCogc3JjLCBjb25zdCBUKiBzcmNFbmQsIFUqIGRzdCkKLSAgICB7
Ci0gICAgICAgIHdoaWxlIChzcmMgIT0gc3JjRW5kKSB7Ci0gICAgICAgICAgICBuZXcgKE5vdE51
bGwsIGRzdCkgVSgqc3JjKTsKLSAgICAgICAgICAgICsrZHN0OwotICAgICAgICAgICAgKytzcmM7
Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IFZl
Y3RvckNvcGllcjx0cnVlLCBUPgotewotICAgIHN0YXRpYyB2b2lkIHVuaW5pdGlhbGl6ZWRDb3B5
KGNvbnN0IFQqIHNyYywgY29uc3QgVCogc3JjRW5kLCBUKiBkc3QpCi0gICAgewotICAgICAgICBt
ZW1jcHkoZHN0LCBzcmMsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHNyY0VuZCkgLSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzcmMpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgdm9pZCB1bmluaXRpYWxpemVkQ29weShjb25zdCBUKiBz
cmMsIGNvbnN0IFQqIHNyY0VuZCwgVSogZHN0KQotICAgIHsKLSAgICAgICAgVmVjdG9yQ29waWVy
PGZhbHNlLCBUPjo6dW5pbml0aWFsaXplZENvcHkoc3JjLCBzcmNFbmQsIGRzdCk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGUgPGJvb2wgY2FuRmlsbFdpdGhNZW1zZXQsIHR5cGVuYW1lIFQ+Ci1zdHJ1
Y3QgVmVjdG9yRmlsbGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IFZlY3RvckZp
bGxlcjxmYWxzZSwgVD4KLXsKLSAgICBzdGF0aWMgdm9pZCB1bmluaXRpYWxpemVkRmlsbChUKiBk
c3QsIFQqIGRzdEVuZCwgY29uc3QgVCYgdmFsKSAKLSAgICB7Ci0gICAgICAgIHdoaWxlIChkc3Qg
IT0gZHN0RW5kKSB7Ci0gICAgICAgICAgICBuZXcgKE5vdE51bGwsIGRzdCkgVCh2YWwpOwotICAg
ICAgICAgICAgKytkc3Q7Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotc3RydWN0IFZlY3RvckZpbGxlcjx0cnVlLCBUPgotewotICAgIHN0YXRpYyB2b2lkIHVu
aW5pdGlhbGl6ZWRGaWxsKFQqIGRzdCwgVCogZHN0RW5kLCBjb25zdCBUJiB2YWwpIAotICAgIHsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPT0gMSwgIlNpemUgb2YgdHlwZSBUIHNo
b3VsZCBiZSBlcXVhbCB0byBvbmUhIik7Ci0jaWYgQ09NUElMRVIoR0NDX09SX0NMQU5HKSAmJiBk
ZWZpbmVkKF9GT1JUSUZZX1NPVVJDRSkKLSAgICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRf
cChkc3RFbmQgLSBkc3QpIHx8ICghKGRzdEVuZCAtIGRzdCkpKQotI2VuZGlmCi0gICAgICAgICAg
ICBtZW1zZXQoZHN0LCB2YWwsIGRzdEVuZCAtIGRzdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
Ym9vbCBjYW5Db21wYXJlV2l0aE1lbWNtcCwgdHlwZW5hbWUgVD4KLXN0cnVjdCBWZWN0b3JDb21w
YXJlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBWZWN0b3JDb21wYXJlcjxmYWxz
ZSwgVD4KLXsKLSAgICBzdGF0aWMgYm9vbCBjb21wYXJlKGNvbnN0IFQqIGEsIGNvbnN0IFQqIGIs
IHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpCi0gICAgICAgICAgICBpZiAoIShhW2ldID09IGJbaV0pKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBWZWN0b3JDb21wYXJlcjx0cnVlLCBUPgotewotICAgIHN0
YXRpYyBib29sIGNvbXBhcmUoY29uc3QgVCogYSwgY29uc3QgVCogYiwgc2l6ZV90IHNpemUpCi0g
ICAgewotICAgICAgICByZXR1cm4gbWVtY21wKGEsIGIsIHNpemVvZihUKSAqIHNpemUpID09IDA7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBWZWN0b3JUeXBlT3Bl
cmF0aW9ucwotewotICAgIHN0YXRpYyB2b2lkIGRlc3RydWN0KFQqIGJlZ2luLCBUKiBlbmQpCi0g
ICAgewotICAgICAgICBWZWN0b3JEZXN0cnVjdG9yPCFzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8VD46OnZhbHVlLCBUPjo6ZGVzdHJ1Y3QoYmVnaW4sIGVuZCk7Ci0gICAgfQotCi0gICAg
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZShUKiBiZWdpbiwgVCogZW5kKQotICAgIHsKLSAgICAgICAg
VmVjdG9ySW5pdGlhbGl6ZXI8VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uLCBW
ZWN0b3JUcmFpdHM8VD46OmNhbkluaXRpYWxpemVXaXRoTWVtc2V0LCBUPjo6aW5pdGlhbGl6ZShi
ZWdpbiwgZW5kKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBtb3ZlKFQqIHNyYywgVCogc3Jj
RW5kLCBUKiBkc3QpCi0gICAgewotICAgICAgICBWZWN0b3JNb3ZlcjxWZWN0b3JUcmFpdHM8VD46
OmNhbk1vdmVXaXRoTWVtY3B5LCBUPjo6bW92ZShzcmMsIHNyY0VuZCwgZHN0KTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgdm9pZCBtb3ZlT3ZlcmxhcHBpbmcoVCogc3JjLCBUKiBzcmNFbmQsIFQqIGRz
dCkKLSAgICB7Ci0gICAgICAgIFZlY3Rvck1vdmVyPFZlY3RvclRyYWl0czxUPjo6Y2FuTW92ZVdp
dGhNZW1jcHksIFQ+Ojptb3ZlT3ZlcmxhcHBpbmcoc3JjLCBzcmNFbmQsIGRzdCk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIHZvaWQgdW5pbml0aWFsaXplZENvcHkoY29uc3QgVCogc3JjLCBjb25zdCBU
KiBzcmNFbmQsIFQqIGRzdCkKLSAgICB7Ci0gICAgICAgIFZlY3RvckNvcGllcjxWZWN0b3JUcmFp
dHM8VD46OmNhbkNvcHlXaXRoTWVtY3B5LCBUPjo6dW5pbml0aWFsaXplZENvcHkoc3JjLCBzcmNF
bmQsIGRzdCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgdW5pbml0aWFsaXplZEZpbGwoVCog
ZHN0LCBUKiBkc3RFbmQsIGNvbnN0IFQmIHZhbCkKLSAgICB7Ci0gICAgICAgIFZlY3RvckZpbGxl
cjxWZWN0b3JUcmFpdHM8VD46OmNhbkZpbGxXaXRoTWVtc2V0LCBUPjo6dW5pbml0aWFsaXplZEZp
bGwoZHN0LCBkc3RFbmQsIHZhbCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBib29sIGNvbXBh
cmUoY29uc3QgVCogYSwgY29uc3QgVCogYiwgc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gVmVjdG9yQ29tcGFyZXI8VmVjdG9yVHJhaXRzPFQ+OjpjYW5Db21wYXJlV2l0aE1lbWNt
cCwgVD46OmNvbXBhcmUoYSwgYiwgc2l6ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLWNsYXNzIFZlY3RvckJ1ZmZlckJhc2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFZlY3RvckJ1ZmZlckJhc2UpOwotcHVibGljOgotICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoc2l6
ZV90IG5ld0NhcGFjaXR5KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG5ld0NhcGFjaXR5KTsKLSAg
ICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpIC8gc2l6ZW9mKFQpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgc2l6ZV90IHNp
emVUb0FsbG9jYXRlID0gbmV3Q2FwYWNpdHkgKiBzaXplb2YoVCk7Ci0gICAgICAgIG1fY2FwYWNp
dHkgPSBzaXplVG9BbGxvY2F0ZSAvIHNpemVvZihUKTsKLSAgICAgICAgbV9idWZmZXIgPSBzdGF0
aWNfY2FzdDxUKj4oZmFzdE1hbGxvYyhzaXplVG9BbGxvY2F0ZSkpOwotICAgIH0KLQotICAgIGJv
b2wgdHJ5QWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KQotICAgIHsKLSAgICAgICAg
QVNTRVJUKG5ld0NhcGFjaXR5KTsKLSAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gc2l6ZW9mKFQpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIHNpemVfdCBzaXplVG9BbGxvY2F0ZSA9IG5ld0NhcGFjaXR5
ICogc2l6ZW9mKFQpOwotICAgICAgICBUKiBuZXdCdWZmZXI7Ci0gICAgICAgIGlmICh0cnlGYXN0
TWFsbG9jKHNpemVUb0FsbG9jYXRlKS5nZXRWYWx1ZShuZXdCdWZmZXIpKSB7Ci0gICAgICAgICAg
ICBtX2NhcGFjaXR5ID0gc2l6ZVRvQWxsb2NhdGUgLyBzaXplb2YoVCk7Ci0gICAgICAgICAgICBt
X2J1ZmZlciA9IG5ld0J1ZmZlcjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZFJlYWxsb2Nh
dGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IFZlY3RvclRyYWl0czxUPjo6Y2FuTW92ZVdpdGhNZW1jcHkgJiYgbV9jYXBhY2l0eSAmJiBuZXdD
YXBhY2l0eTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlYWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0Nh
cGFjaXR5KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNob3VsZFJlYWxsb2NhdGVCdWZmZXIobmV3
Q2FwYWNpdHkpKTsKLSAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gc3RkOjpudW1lcmljX2xpbWl0
czxzaXplX3Q+OjptYXgoKSAvIHNpemVvZihUKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAg
ICAgIHNpemVfdCBzaXplVG9BbGxvY2F0ZSA9IG5ld0NhcGFjaXR5ICogc2l6ZW9mKFQpOwotICAg
ICAgICBtX2NhcGFjaXR5ID0gc2l6ZVRvQWxsb2NhdGUgLyBzaXplb2YoVCk7Ci0gICAgICAgIG1f
YnVmZmVyID0gc3RhdGljX2Nhc3Q8VCo+KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBzaXplVG9BbGxv
Y2F0ZSkpOwotICAgIH0KLQotICAgIHZvaWQgZGVhbGxvY2F0ZUJ1ZmZlcihUKiBidWZmZXJUb0Rl
YWxsb2NhdGUpCi0gICAgewotICAgICAgICBpZiAoIWJ1ZmZlclRvRGVhbGxvY2F0ZSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2J1ZmZlciA9PSBidWZmZXJU
b0RlYWxsb2NhdGUpIHsKLSAgICAgICAgICAgIG1fYnVmZmVyID0gMDsKLSAgICAgICAgICAgIG1f
Y2FwYWNpdHkgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgZmFzdEZyZWUoYnVmZmVyVG9EZWFs
bG9jYXRlKTsKLSAgICB9Ci0KLSAgICBUKiBidWZmZXIoKSB7IHJldHVybiBtX2J1ZmZlcjsgfQot
ICAgIGNvbnN0IFQqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9Ci0gICAgc3Rh
dGljIHB0cmRpZmZfdCBidWZmZXJNZW1vcnlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoVmVjdG9yQnVmZmVyQmFzZSwgbV9idWZmZXIpOyB9Ci0gICAgc2l6ZV90IGNhcGFjaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV9jYXBhY2l0eTsgfQotCi0gICAgTWFsbG9jUHRyPFQ+IHJlbGVhc2VC
dWZmZXIoKQotICAgIHsKLSAgICAgICAgVCogYnVmZmVyID0gbV9idWZmZXI7Ci0gICAgICAgIG1f
YnVmZmVyID0gMDsKLSAgICAgICAgbV9jYXBhY2l0eSA9IDA7Ci0gICAgICAgIHJldHVybiBhZG9w
dE1hbGxvY1B0cihidWZmZXIpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFZlY3RvckJ1ZmZl
ckJhc2UoKQotICAgICAgICA6IG1fYnVmZmVyKDApCi0gICAgICAgICwgbV9jYXBhY2l0eSgwKQot
ICAgICAgICAsIG1fc2l6ZSgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBWZWN0b3JCdWZmZXJCYXNl
KFQqIGJ1ZmZlciwgc2l6ZV90IGNhcGFjaXR5LCBzaXplX3Qgc2l6ZSkKLSAgICAgICAgOiBtX2J1
ZmZlcihidWZmZXIpCi0gICAgICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKLSAgICAgICAgLCBt
X3NpemUoc2l6ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgflZlY3RvckJ1ZmZlckJhc2UoKQotICAg
IHsKLSAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gZmluZCBhIHdheSB0byBB
U1NFUlQgdGhhdCBtX2J1ZmZlciBoYXNuJ3QgbGVha2VkIGhlcmUuCi0gICAgfQotCi0gICAgVCog
bV9idWZmZXI7Ci0gICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKLSAgICB1bnNpZ25lZCBtX3NpemU7
IC8vIE9ubHkgdXNlZCBieSB0aGUgVmVjdG9yIHN1YmNsYXNzLCBidXQgcGxhY2VkIGhlcmUgdG8g
YXZvaWQgcGFkZGluZyB0aGUgc3RydWN0LgotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PgotY2xhc3MgVmVjdG9yQnVmZmVyOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotY2xhc3MgVmVjdG9yQnVmZmVyPFQsIDA+IDogcHJpdmF0ZSBWZWN0b3JCdWZmZXJC
YXNlPFQ+IHsKLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBWZWN0b3JCdWZmZXJCYXNlPFQ+IEJhc2U7
Ci1wdWJsaWM6Ci0gICAgVmVjdG9yQnVmZmVyKCkKLSAgICB7Ci0gICAgfQotCi0gICAgVmVjdG9y
QnVmZmVyKHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IHNpemUgPSAwKQotICAgIHsKLSAgICAgICAg
bV9zaXplID0gc2l6ZTsKLSAgICAgICAgLy8gQ2FsbGluZyBtYWxsb2MoMCkgbWlnaHQgdGFrZSBh
IGxvY2sgYW5kIG1heSBhY3R1YWxseSBkbyBhbgotICAgICAgICAvLyBhbGxvY2F0aW9uIG9uIHNv
bWUgc3lzdGVtcy4KLSAgICAgICAgaWYgKGNhcGFjaXR5KQotICAgICAgICAgICAgYWxsb2NhdGVC
dWZmZXIoY2FwYWNpdHkpOwotICAgIH0KLQotICAgIH5WZWN0b3JCdWZmZXIoKQotICAgIHsKLSAg
ICAgICAgZGVhbGxvY2F0ZUJ1ZmZlcihidWZmZXIoKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
c3dhcChWZWN0b3JCdWZmZXI8VCwgMD4mIG90aGVyLCBzaXplX3QsIHNpemVfdCkKLSAgICB7Ci0g
ICAgICAgIHN0ZDo6c3dhcChtX2J1ZmZlciwgb3RoZXIubV9idWZmZXIpOwotICAgICAgICBzdGQ6
OnN3YXAobV9jYXBhY2l0eSwgb3RoZXIubV9jYXBhY2l0eSk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgcmVzdG9yZUlubGluZUJ1ZmZlcklmTmVlZGVkKCkgeyB9Ci0KLSNpZiBBU0FOX0VOQUJMRUQK
LSAgICB2b2lkKiBlbmRPZkJ1ZmZlcigpCi0gICAgewotICAgICAgICByZXR1cm4gYnVmZmVyKCkg
KyBjYXBhY2l0eSgpOwotICAgIH0KLSNlbmRpZgotCi0gICAgdXNpbmcgQmFzZTo6YWxsb2NhdGVC
dWZmZXI7Ci0gICAgdXNpbmcgQmFzZTo6dHJ5QWxsb2NhdGVCdWZmZXI7Ci0gICAgdXNpbmcgQmFz
ZTo6c2hvdWxkUmVhbGxvY2F0ZUJ1ZmZlcjsKLSAgICB1c2luZyBCYXNlOjpyZWFsbG9jYXRlQnVm
ZmVyOwotICAgIHVzaW5nIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXI7Ci0KLSAgICB1c2luZyBCYXNl
OjpidWZmZXI7Ci0gICAgdXNpbmcgQmFzZTo6Y2FwYWNpdHk7Ci0gICAgdXNpbmcgQmFzZTo6YnVm
ZmVyTWVtb3J5T2Zmc2V0OwotCi0gICAgdXNpbmcgQmFzZTo6cmVsZWFzZUJ1ZmZlcjsKLQotcHJv
dGVjdGVkOgotICAgIHVzaW5nIEJhc2U6Om1fc2l6ZTsKLQotcHJpdmF0ZToKLSAgICB1c2luZyBC
YXNlOjptX2J1ZmZlcjsKLSAgICB1c2luZyBCYXNlOjptX2NhcGFjaXR5OwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotY2xhc3MgVmVjdG9yQnVmZmVy
IDogcHJpdmF0ZSBWZWN0b3JCdWZmZXJCYXNlPFQ+IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShWZWN0b3JCdWZmZXIpOwotcHJpdmF0ZToKLSAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlckJhc2U8
VD4gQmFzZTsKLXB1YmxpYzoKLSAgICBWZWN0b3JCdWZmZXIoKQotICAgICAgICA6IEJhc2UoaW5s
aW5lQnVmZmVyKCksIGlubGluZUNhcGFjaXR5LCAwKQotICAgIHsKLSAgICB9Ci0KLSAgICBWZWN0
b3JCdWZmZXIoc2l6ZV90IGNhcGFjaXR5LCBzaXplX3Qgc2l6ZSA9IDApCi0gICAgICAgIDogQmFz
ZShpbmxpbmVCdWZmZXIoKSwgaW5saW5lQ2FwYWNpdHksIHNpemUpCi0gICAgewotICAgICAgICBp
ZiAoY2FwYWNpdHkgPiBpbmxpbmVDYXBhY2l0eSkKLSAgICAgICAgICAgIEJhc2U6OmFsbG9jYXRl
QnVmZmVyKGNhcGFjaXR5KTsKLSAgICB9Ci0KLSAgICB+VmVjdG9yQnVmZmVyKCkKLSAgICB7Ci0g
ICAgICAgIGRlYWxsb2NhdGVCdWZmZXIoYnVmZmVyKCkpOwotICAgIH0KLQotICAgIHZvaWQgYWxs
b2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIEFTU0VSVCghbV9idWZmZXIpIHRvIGNhdGNoIG1pc3VzZS9sZWFrcy4KLSAg
ICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gaW5saW5lQ2FwYWNpdHkpCi0gICAgICAgICAgICBCYXNl
OjphbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgbV9idWZmZXIgPSBpbmxpbmVCdWZmZXIoKTsKLSAgICAgICAgICAgIG1fY2FwYWNpdHkgPSBp
bmxpbmVDYXBhY2l0eTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgdHJ5QWxsb2NhdGVC
dWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KQotICAgIHsKLSAgICAgICAgaWYgKG5ld0NhcGFjaXR5
ID4gaW5saW5lQ2FwYWNpdHkpCi0gICAgICAgICAgICByZXR1cm4gQmFzZTo6dHJ5QWxsb2NhdGVC
dWZmZXIobmV3Q2FwYWNpdHkpOwotICAgICAgICBtX2J1ZmZlciA9IGlubGluZUJ1ZmZlcigpOwot
ICAgICAgICBtX2NhcGFjaXR5ID0gaW5saW5lQ2FwYWNpdHk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHZvaWQgZGVhbGxvY2F0ZUJ1ZmZlcihUKiBidWZmZXJUb0RlYWxsb2Nh
dGUpCi0gICAgewotICAgICAgICBpZiAoYnVmZmVyVG9EZWFsbG9jYXRlID09IGlubGluZUJ1ZmZl
cigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVy
KGJ1ZmZlclRvRGVhbGxvY2F0ZSk7Ci0gICAgfQotCi0gICAgYm9vbCBzaG91bGRSZWFsbG9jYXRl
QnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFdlIGNh
bm5vdCByZWFsbG9jYXRlIHRoZSBpbmxpbmUgYnVmZmVyLgotICAgICAgICByZXR1cm4gQmFzZTo6
c2hvdWxkUmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSkgJiYgc3RkOjptaW4oc3RhdGljX2Nh
c3Q8c2l6ZV90PihtX2NhcGFjaXR5KSwgbmV3Q2FwYWNpdHkpID4gaW5saW5lQ2FwYWNpdHk7Ci0g
ICAgfQotCi0gICAgdm9pZCByZWFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChzaG91bGRSZWFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KSk7
Ci0gICAgICAgIEJhc2U6OnJlYWxsb2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwotICAgIH0KLQot
ICAgIHZvaWQgc3dhcChWZWN0b3JCdWZmZXImIG90aGVyLCBzaXplX3QgbXlTaXplLCBzaXplX3Qg
b3RoZXJTaXplKQotICAgIHsKLSAgICAgICAgaWYgKGJ1ZmZlcigpID09IGlubGluZUJ1ZmZlcigp
ICYmIG90aGVyLmJ1ZmZlcigpID09IG90aGVyLmlubGluZUJ1ZmZlcigpKSB7Ci0gICAgICAgICAg
ICBzd2FwSW5saW5lQnVmZmVyKG90aGVyLCBteVNpemUsIG90aGVyU2l6ZSk7Ci0gICAgICAgICAg
ICBzdGQ6OnN3YXAobV9jYXBhY2l0eSwgb3RoZXIubV9jYXBhY2l0eSk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoYnVmZmVyKCkgPT0gaW5saW5lQnVmZmVyKCkpIHsKLSAgICAgICAgICAgIG1fYnVmZmVy
ID0gb3RoZXIubV9idWZmZXI7Ci0gICAgICAgICAgICBvdGhlci5tX2J1ZmZlciA9IG90aGVyLmlu
bGluZUJ1ZmZlcigpOwotICAgICAgICAgICAgc3dhcElubGluZUJ1ZmZlcihvdGhlciwgbXlTaXpl
LCAwKTsKLSAgICAgICAgICAgIHN0ZDo6c3dhcChtX2NhcGFjaXR5LCBvdGhlci5tX2NhcGFjaXR5
KTsKLSAgICAgICAgfSBlbHNlIGlmIChvdGhlci5idWZmZXIoKSA9PSBvdGhlci5pbmxpbmVCdWZm
ZXIoKSkgewotICAgICAgICAgICAgb3RoZXIubV9idWZmZXIgPSBtX2J1ZmZlcjsKLSAgICAgICAg
ICAgIG1fYnVmZmVyID0gaW5saW5lQnVmZmVyKCk7Ci0gICAgICAgICAgICBzd2FwSW5saW5lQnVm
ZmVyKG90aGVyLCAwLCBvdGhlclNpemUpOwotICAgICAgICAgICAgc3RkOjpzd2FwKG1fY2FwYWNp
dHksIG90aGVyLm1fY2FwYWNpdHkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3Rk
Ojpzd2FwKG1fYnVmZmVyLCBvdGhlci5tX2J1ZmZlcik7Ci0gICAgICAgICAgICBzdGQ6OnN3YXAo
bV9jYXBhY2l0eSwgb3RoZXIubV9jYXBhY2l0eSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
b2lkIHJlc3RvcmVJbmxpbmVCdWZmZXJJZk5lZWRlZCgpCi0gICAgewotICAgICAgICBpZiAobV9i
dWZmZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fYnVmZmVyID0gaW5saW5lQnVm
ZmVyKCk7Ci0gICAgICAgIG1fY2FwYWNpdHkgPSBpbmxpbmVDYXBhY2l0eTsKLSAgICB9Ci0KLSNp
ZiBBU0FOX0VOQUJMRUQKLSAgICB2b2lkKiBlbmRPZkJ1ZmZlcigpCi0gICAgewotICAgICAgICBB
U1NFUlQoYnVmZmVyKCkpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KChvZmZzZXRvZihWZWN0b3JC
dWZmZXIsIG1faW5saW5lQnVmZmVyKSArIHNpemVvZihtX2lubGluZUJ1ZmZlcikpICUgOCA9PSAw
LCAiSW5saW5lIGJ1ZmZlciBlbmQgbmVlZHMgdG8gYmUgb24gOCBieXRlIGJvdW5kYXJ5IGZvciBB
U2FuIGFubm90YXRpb25zIHRvIHdvcmsuIik7Ci0KLSAgICAgICAgaWYgKGJ1ZmZlcigpID09IGlu
bGluZUJ1ZmZlcigpKQotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KG1faW5saW5lQnVmZmVyKSArIHNpemVvZihtX2lubGluZUJ1ZmZlcik7Ci0KLSAgICAgICAgcmV0
dXJuIGJ1ZmZlcigpICsgY2FwYWNpdHkoKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHVzaW5nIEJh
c2U6OmJ1ZmZlcjsKLSAgICB1c2luZyBCYXNlOjpjYXBhY2l0eTsKLSAgICB1c2luZyBCYXNlOjpi
dWZmZXJNZW1vcnlPZmZzZXQ7Ci0KLSAgICBNYWxsb2NQdHI8VD4gcmVsZWFzZUJ1ZmZlcigpCi0g
ICAgewotICAgICAgICBpZiAoYnVmZmVyKCkgPT0gaW5saW5lQnVmZmVyKCkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIEJhc2U6OnJlbGVhc2VCdWZmZXIoKTsK
LSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB1c2luZyBCYXNlOjptX3NpemU7Ci0KLXByaXZhdGU6
Ci0gICAgdXNpbmcgQmFzZTo6bV9idWZmZXI7Ci0gICAgdXNpbmcgQmFzZTo6bV9jYXBhY2l0eTsK
LSAgICAKLSAgICB2b2lkIHN3YXBJbmxpbmVCdWZmZXIoVmVjdG9yQnVmZmVyJiBvdGhlciwgc2l6
ZV90IG15U2l6ZSwgc2l6ZV90IG90aGVyU2l6ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBX
ZSBjb3VsZCBtYWtlIHN3YXAgcGFydCBvZiBWZWN0b3JUeXBlT3BlcmF0aW9ucwotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4ODYzCi0gICAgICAg
IHN3YXBJbmxpbmVCdWZmZXJzKGlubGluZUJ1ZmZlcigpLCBvdGhlci5pbmxpbmVCdWZmZXIoKSwg
bXlTaXplLCBvdGhlclNpemUpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBzd2FwSW5s
aW5lQnVmZmVycyhUKiBsZWZ0LCBUKiByaWdodCwgc2l6ZV90IGxlZnRTaXplLCBzaXplX3Qgcmln
aHRTaXplKQotICAgIHsKLSAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQobGVmdFNpemUgPD0gaW5saW5lQ2FwYWNp
dHkpOwotICAgICAgICBBU1NFUlQocmlnaHRTaXplIDw9IGlubGluZUNhcGFjaXR5KTsKLSAgICAg
ICAgCi0gICAgICAgIHNpemVfdCBzd2FwQm91bmQgPSBzdGQ6Om1pbihsZWZ0U2l6ZSwgcmlnaHRT
aXplKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN3YXBCb3VuZDsgKytpKQot
ICAgICAgICAgICAgc3RkOjpzd2FwKGxlZnRbaV0sIHJpZ2h0W2ldKTsKLSAgICAgICAgVmVjdG9y
VHlwZU9wZXJhdGlvbnM8VD46Om1vdmUobGVmdCArIHN3YXBCb3VuZCwgbGVmdCArIGxlZnRTaXpl
LCByaWdodCArIHN3YXBCb3VuZCk7Ci0gICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+Ojpt
b3ZlKHJpZ2h0ICsgc3dhcEJvdW5kLCByaWdodCArIHJpZ2h0U2l6ZSwgbGVmdCArIHN3YXBCb3Vu
ZCk7Ci0gICAgfQotCi0gICAgVCogaW5saW5lQnVmZmVyKCkgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8VCo+KG1faW5saW5lQnVmZmVyKTsgfQotICAgIGNvbnN0IFQqIGlubGluZUJ1ZmZl
cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IFQqPihtX2lubGlu
ZUJ1ZmZlcik7IH0KLQotI2lmIEFTQU5fRU5BQkxFRAotICAgIC8vIEFTYW4gbmVlZHMgdGhlIGJ1
ZmZlciB0byBiZWdpbiBhbmQgZW5kIG9uIDgtYnl0ZSBib3VuZGFyaWVzIGZvciBhbm5vdGF0aW9u
cyB0byB3b3JrLgotICAgIC8vIEZJWE1FOiBBZGQgYSByZWR6b25lIGJlZm9yZSB0aGUgYnVmZmVy
IHRvIGNhdGNoIG9mZiBieSBvbmUgYWNjZXNzZXMuIFdlIGRvbid0IG5lZWQgYSBndWFyZCBhZnRl
ciwgYmVjYXVzZSB0aGUgYnVmZmVyIGlzIHRoZSBsYXN0IG1lbWJlciB2YXJpYWJsZS4KLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGFzYW5JbmxpbmVCdWZmZXJBbGlnbm1lbnQgPSBzdGQ6OmFsaWdu
bWVudF9vZjxUPjo6dmFsdWUgPj0gOCA/IHN0ZDo6YWxpZ25tZW50X29mPFQ+Ojp2YWx1ZSA6IDg7
Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBhc2FuQWRqdXN0ZWRJbmxpbmVDYXBhY2l0eSA9ICgo
c2l6ZW9mKFQpICogaW5saW5lQ2FwYWNpdHkgKyA3KSAmIH43KSAvIHNpemVvZihUKTsKLSAgICB0
eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2YoVCksIGFzYW5JbmxpbmVCdWZmZXJB
bGlnbm1lbnQ+Ojp0eXBlIG1faW5saW5lQnVmZmVyW2FzYW5BZGp1c3RlZElubGluZUNhcGFjaXR5
XTsKLSNlbHNlCi0gICAgdHlwZW5hbWUgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKFQpLCBz
dGQ6OmFsaWdubWVudF9vZjxUPjo6dmFsdWU+Ojp0eXBlIG1faW5saW5lQnVmZmVyW2lubGluZUNh
cGFjaXR5XTsKLSNlbmRpZgotfTsKLQotc3RydWN0IFVuc2FmZVZlY3Rvck92ZXJmbG93IHsKLSAg
ICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBvdmVyZmxvd2VkKCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDAsIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciA9IENyYXNoT25PdmVyZmxvdywgc2l6ZV90IG1pbkNhcGFjaXR5ID0gMTY+Ci1jbGFzcyBW
ZWN0b3IgOiBwcml2YXRlIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHJpdmF0ZToKLSAgICB0eXBlZGVmIFZlY3RvckJ1ZmZl
cjxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKLSAgICB0eXBlZGVmIFZlY3RvclR5cGVPcGVyYXRp
b25zPFQ+IFR5cGVPcGVyYXRpb25zOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBUIFZhbHVlVHlw
ZTsKLQotICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBjb25zdCBUKiBjb25z
dF9pdGVyYXRvcjsKLSAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4g
cmV2ZXJzZV9pdGVyYXRvcjsKLSAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25z
dF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKLQotICAgIFZlY3RvcigpCi0gICAg
ewotICAgIH0KLQotICAgIC8vIFVubGlrZSBpbiBzdGQ6OnZlY3RvciwgdGhpcyBjb25zdHJ1Y3Rv
ciBkb2VzIG5vdCBpbml0aWFsaXplIFBPRCB0eXBlcy4KLSAgICBleHBsaWNpdCBWZWN0b3Ioc2l6
ZV90IHNpemUpCi0gICAgICAgIDogQmFzZShzaXplLCBzaXplKQotICAgIHsKLSAgICAgICAgYXNh
blNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZSk7Ci0KLSAgICAgICAgaWYgKGJlZ2luKCkpCi0g
ICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShiZWdpbigpLCBlbmQoKSk7Ci0g
ICAgfQotCi0gICAgVmVjdG9yKHNpemVfdCBzaXplLCBjb25zdCBUJiB2YWwpCi0gICAgICAgIDog
QmFzZShzaXplLCBzaXplKQotICAgIHsKLSAgICAgICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXpl
VG8oc2l6ZSk7Ci0KLSAgICAgICAgaWYgKGJlZ2luKCkpCi0gICAgICAgICAgICBUeXBlT3BlcmF0
aW9uczo6dW5pbml0aWFsaXplZEZpbGwoYmVnaW4oKSwgZW5kKCksIHZhbCk7Ci0gICAgfQotCi0g
ICAgVmVjdG9yKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiBpbml0aWFsaXplckxpc3QpCi0gICAg
ewotICAgICAgICByZXNlcnZlSW5pdGlhbENhcGFjaXR5KGluaXRpYWxpemVyTGlzdC5zaXplKCkp
OwotCi0gICAgICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKGluaXRpYWxpemVyTGlzdC5z
aXplKCkpOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6IGluaXRpYWxpemVy
TGlzdCkKLSAgICAgICAgICAgIHVuY2hlY2tlZEFwcGVuZChlbGVtZW50KTsKLSAgICB9Ci0KLSAg
ICB+VmVjdG9yKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NpemUpCi0gICAgICAgICAgICBUeXBl
T3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW4oKSwgZW5kKCkpOwotCi0gICAgICAgIGFzYW5TZXRC
dWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkoMCk7Ci0gICAgfQotCi0gICAgVmVjdG9yKGNvbnN0IFZl
Y3RvciYpOwotICAgIHRlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhl
ck92ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3RoZXJNaW5pbXVtQ2FwYWNpdHk+Ci0gICAgZXhw
bGljaXQgVmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5LCBvdGhlck92ZXJmbG93
QmVoYXZpb3VyLCBvdGhlck1pbmltdW1DYXBhY2l0eT4mKTsKLQotICAgIFZlY3RvciYgb3BlcmF0
b3I9KGNvbnN0IFZlY3RvciYpOwotICAgIHRlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5LCB0
eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3RoZXJNaW5pbXVtQ2FwYWNp
dHk+Ci0gICAgVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHks
IG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5PiYpOwotCi0gICAg
VmVjdG9yKFZlY3RvciYmKTsKLSAgICBWZWN0b3ImIG9wZXJhdG9yPShWZWN0b3ImJik7Ci0KLSAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHN0YXRpYyBwdHJk
aWZmX3Qgc2l6ZU1lbW9yeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWZWN0b3Is
IG1fc2l6ZSk7IH0KLSAgICBzaXplX3QgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBCYXNlOjpj
YXBhY2l0eSgpOyB9Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsg
fQotCi0gICAgVCYgYXQoc2l6ZV90IGkpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoaSA+
PSBzaXplKCkpKQotICAgICAgICAgICAgT3ZlcmZsb3dIYW5kbGVyOjpvdmVyZmxvd2VkKCk7Ci0g
ICAgICAgIHJldHVybiBCYXNlOjpidWZmZXIoKVtpXTsKLSAgICB9Ci0gICAgY29uc3QgVCYgYXQo
c2l6ZV90IGkpIGNvbnN0IAotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKGkgPj0gc2l6ZSgp
KSkKLSAgICAgICAgICAgIE92ZXJmbG93SGFuZGxlcjo6b3ZlcmZsb3dlZCgpOwotICAgICAgICBy
ZXR1cm4gQmFzZTo6YnVmZmVyKClbaV07Ci0gICAgfQotICAgIFQmIGF0KENoZWNrZWQ8c2l6ZV90
PiBpKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSA8IHNpemUoKSk7Ci0gICAgICAg
IHJldHVybiBCYXNlOjpidWZmZXIoKVtpXTsKLSAgICB9Ci0gICAgY29uc3QgVCYgYXQoQ2hlY2tl
ZDxzaXplX3Q+IGkpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChpIDwgc2l6
ZSgpKTsKLSAgICAgICAgcmV0dXJuIEJhc2U6OmJ1ZmZlcigpW2ldOwotICAgIH0KLQotICAgIFQm
IG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIGF0KGkpOyB9Ci0gICAgY29uc3QgVCYgb3Bl
cmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KLSAgICBUJiBvcGVyYXRv
cltdKENoZWNrZWQ8c2l6ZV90PiBpKSB7IHJldHVybiBhdChpKTsgfQotICAgIGNvbnN0IFQmIG9w
ZXJhdG9yW10oQ2hlY2tlZDxzaXplX3Q+IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9Ci0KLSAg
ICBUKiBkYXRhKCkgeyByZXR1cm4gQmFzZTo6YnVmZmVyKCk7IH0KLSAgICBjb25zdCBUKiBkYXRh
KCkgY29uc3QgeyByZXR1cm4gQmFzZTo6YnVmZmVyKCk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90
IGRhdGFNZW1vcnlPZmZzZXQoKSB7IHJldHVybiBCYXNlOjpidWZmZXJNZW1vcnlPZmZzZXQoKTsg
fQotCi0gICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBkYXRhKCk7IH0KLSAgICBpdGVyYXRv
ciBlbmQoKSB7IHJldHVybiBiZWdpbigpICsgbV9zaXplOyB9Ci0gICAgY29uc3RfaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiBiZWdpbigpICsgbV9zaXplOyB9Ci0KLSAgICByZXZlcnNlX2l0ZXJh
dG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9Ci0gICAgcmV2
ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsg
fQotICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29u
c3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KLSAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
IHJlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9
Ci0KLSAgICBUJiBmaXJzdCgpIHsgcmV0dXJuIGF0KDApOyB9Ci0gICAgY29uc3QgVCYgZmlyc3Qo
KSBjb25zdCB7IHJldHVybiBhdCgwKTsgfQotICAgIFQmIGxhc3QoKSB7IHJldHVybiBhdChzaXpl
KCkgLSAxKTsgfQotICAgIGNvbnN0IFQmIGxhc3QoKSBjb25zdCB7IHJldHVybiBhdChzaXplKCkg
LSAxKTsgfQotICAgIAotICAgIFQgdGFrZUxhc3QoKQotICAgIHsKLSAgICAgICAgVCByZXN1bHQg
PSBXVEZNb3ZlKGxhc3QoKSk7Ci0gICAgICAgIHJlbW92ZUxhc3QoKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBjb250
YWlucyhjb25zdCBVJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc2l6ZV90IGZp
bmQoY29uc3QgVSYpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hdGNoRnVuY3Rpb24+
IHNpemVfdCBmaW5kTWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHNpemVfdCByZXZlcnNlRmluZChjb25zdCBVJikgY29uc3Q7Ci0g
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBhcHBlbmRJZk5vdENvbnRhaW5zKGNv
bnN0IFUmKTsKLQotICAgIHZvaWQgc2hyaW5rKHNpemVfdCBzaXplKTsKLSAgICB2b2lkIGdyb3co
c2l6ZV90IHNpemUpOwotICAgIHZvaWQgcmVzaXplKHNpemVfdCBzaXplKTsKLSAgICB2b2lkIHJl
c2l6ZVRvRml0KHNpemVfdCBzaXplKTsKLSAgICB2b2lkIHJlc2VydmVDYXBhY2l0eShzaXplX3Qg
bmV3Q2FwYWNpdHkpOwotICAgIGJvb2wgdHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBh
Y2l0eSk7Ci0gICAgdm9pZCByZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemVfdCBpbml0aWFsQ2Fw
YWNpdHkpOwotICAgIHZvaWQgc2hyaW5rQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsKLSAg
ICB2b2lkIHNocmlua1RvRml0KCkgeyBzaHJpbmtDYXBhY2l0eShzaXplKCkpOyB9Ci0KLSAgICB2
b2lkIGNsZWFyKCkgeyBzaHJpbmtDYXBhY2l0eSgwKTsgfQotCi0gICAgdm9pZCBhcHBlbmQoVmFs
dWVUeXBlJiYgdmFsdWUpIHsgYXBwZW5kPFZhbHVlVHlwZT4oc3RkOjpmb3J3YXJkPFZhbHVlVHlw
ZT4odmFsdWUpKTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKFUmJik7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4gdm9pZCBjb25zdHJ1Y3RBbmRBcHBlbmQo
QXJncyYmLi4uKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiBib29sIHRyeUNvbnN0
cnVjdEFuZEFwcGVuZChBcmdzJiYuLi4pOwotCi0gICAgdm9pZCB1bmNoZWNrZWRBcHBlbmQoVmFs
dWVUeXBlJiYgdmFsdWUpIHsgdW5jaGVja2VkQXBwZW5kPFZhbHVlVHlwZT4oc3RkOjpmb3J3YXJk
PFZhbHVlVHlwZT4odmFsdWUpKTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgdW5j
aGVja2VkQXBwZW5kKFUmJik7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVu
ZChjb25zdCBVKiwgc2l6ZV90KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3Qgb3Ro
ZXJDYXBhY2l0eT4gdm9pZCBhcHBlbmRWZWN0b3IoY29uc3QgVmVjdG9yPFUsIG90aGVyQ2FwYWNp
dHk+Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCB0cnlBcHBlbmQoY29uc3QgVSos
IHNpemVfdCk7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGluc2VydChzaXplX3Qg
cG9zaXRpb24sIGNvbnN0IFUqLCBzaXplX3QpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZv
aWQgaW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwgVSYmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
LCBzaXplX3QgYz4gdm9pZCBpbnNlcnRWZWN0b3Ioc2l6ZV90IHBvc2l0aW9uLCBjb25zdCBWZWN0
b3I8VSwgYz4mKTsKLQotICAgIHZvaWQgcmVtb3ZlKHNpemVfdCBwb3NpdGlvbik7Ci0gICAgdm9p
ZCByZW1vdmUoc2l6ZV90IHBvc2l0aW9uLCBzaXplX3QgbGVuZ3RoKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPiBib29sIHJlbW92ZUZpcnN0KGNvbnN0IFUmKTsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNYXRjaEZ1bmN0aW9uPiBib29sIHJlbW92ZUZpcnN0TWF0Y2hpbmcoY29uc3QgTWF0Y2hG
dW5jdGlvbiYsIHNpemVfdCBzdGFydEluZGV4ID0gMCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gdW5zaWduZWQgcmVtb3ZlQWxsKGNvbnN0IFUmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
YXRjaEZ1bmN0aW9uPiB1bnNpZ25lZCByZW1vdmVBbGxNYXRjaGluZyhjb25zdCBNYXRjaEZ1bmN0
aW9uJiwgc2l6ZV90IHN0YXJ0SW5kZXggPSAwKTsKLQotICAgIHZvaWQgcmVtb3ZlTGFzdCgpIAot
ICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKGlzRW1wdHkoKSkpCi0gICAgICAgICAgICBPdmVy
Zmxvd0hhbmRsZXI6Om92ZXJmbG93ZWQoKTsKLSAgICAgICAgc2hyaW5rKHNpemUoKSAtIDEpOyAK
LSAgICB9Ci0KLSAgICB2b2lkIGZpbGwoY29uc3QgVCYsIHNpemVfdCk7Ci0gICAgdm9pZCBmaWxs
KGNvbnN0IFQmIHZhbCkgeyBmaWxsKHZhbCwgc2l6ZSgpKTsgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kUmFuZ2UoSXRlcmF0b3Igc3RhcnQsIEl0ZXJhdG9y
IGVuZCk7Ci0KLSAgICBNYWxsb2NQdHI8VD4gcmVsZWFzZUJ1ZmZlcigpOwotCi0gICAgdm9pZCBz
d2FwKFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT4mIG90aGVyKQotICAgIHsKLSNpZiBBU0FOX0VOQUJMRUQKLSAgICAgICAgaWYgKHRoaXMgPT0g
c3RkOjphZGRyZXNzb2Yob3RoZXIpKSAvLyBBU2FuIHdpbGwgY3Jhc2ggaWYgd2UgdHJ5IHRvIHJl
c3RyaWN0IGFjY2VzcyB0byB0aGUgc2FtZSBidWZmZXIgdHdpY2UuCi0gICAgICAgICAgICByZXR1
cm47Ci0jZW5kaWYKLQotICAgICAgICAvLyBNYWtlIGl0IHBvc3NpYmxlIHRvIGNvcHkgaW5saW5l
IGJ1ZmZlcnMuCi0gICAgICAgIGFzYW5TZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkoKTsKLSAg
ICAgICAgb3RoZXIuYXNhblNldEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eSgpOwotCi0gICAgICAg
IEJhc2U6OnN3YXAob3RoZXIsIG1fc2l6ZSwgb3RoZXIubV9zaXplKTsKLSAgICAgICAgc3RkOjpz
d2FwKG1fc2l6ZSwgb3RoZXIubV9zaXplKTsKLQotICAgICAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZl
clNpemVUbyhtX3NpemUpOwotICAgICAgICBvdGhlci5hc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVU
byhvdGhlci5tX3NpemUpOwotICAgIH0KLQotICAgIHZvaWQgcmV2ZXJzZSgpOwotCi0gICAgdm9p
ZCBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBGdW5jdGlv
biwgdHlwZW5hbWUgUiA9IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPE1hcEZ1bmN0aW9uKGNvbnN0
IFQmKT46OnR5cGU+IFZlY3RvcjxSPiBtYXAoTWFwRnVuY3Rpb24pIGNvbnN0OwotCi1wcml2YXRl
OgotICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KTsKLSAgICBU
KiBleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIFQqKTsKLSAgICBib29sIHRy
eUV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSk7Ci0gICAgY29uc3QgVCogdHJ5
RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5LCBjb25zdCBUKik7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gVSogZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5
LCBVKik7IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kU2xvd0Nhc2UoVSYm
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiB2b2lkIGNvbnN0cnVjdEFuZEFwcGVu
ZFNsb3dDYXNlKEFyZ3MmJi4uLik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4gYm9v
bCB0cnlDb25zdHJ1Y3RBbmRBcHBlbmRTbG93Q2FzZShBcmdzJiYuLi4pOwotCi0gICAgdm9pZCBh
c2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhzaXplX3QpOwotICAgIHZvaWQgYXNhblNldEJ1ZmZl
clNpemVUb0Z1bGxDYXBhY2l0eShzaXplX3QpOwotICAgIHZvaWQgYXNhblNldEJ1ZmZlclNpemVU
b0Z1bGxDYXBhY2l0eSgpIHsgYXNhblNldEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eShzaXplKCkp
OyB9Ci0KLSAgICB2b2lkIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKHNpemVfdCk7Ci0KLSAg
ICB1c2luZyBCYXNlOjptX3NpemU7Ci0gICAgdXNpbmcgQmFzZTo6YnVmZmVyOwotICAgIHVzaW5n
IEJhc2U6OmNhcGFjaXR5OwotICAgIHVzaW5nIEJhc2U6OnN3YXA7Ci0gICAgdXNpbmcgQmFzZTo6
YWxsb2NhdGVCdWZmZXI7Ci0gICAgdXNpbmcgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcjsKLSAgICB1
c2luZyBCYXNlOjp0cnlBbGxvY2F0ZUJ1ZmZlcjsKLSAgICB1c2luZyBCYXNlOjpzaG91bGRSZWFs
bG9jYXRlQnVmZmVyOwotICAgIHVzaW5nIEJhc2U6OnJlYWxsb2NhdGVCdWZmZXI7Ci0gICAgdXNp
bmcgQmFzZTo6cmVzdG9yZUlubGluZUJ1ZmZlcklmTmVlZGVkOwotICAgIHVzaW5nIEJhc2U6OnJl
bGVhc2VCdWZmZXI7Ci0jaWYgQVNBTl9FTkFCTEVECi0gICAgdXNpbmcgQmFzZTo6ZW5kT2ZCdWZm
ZXI7Ci0jZW5kaWYKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci1WZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpWZWN0
b3IoY29uc3QgVmVjdG9yJiBvdGhlcikKLSAgICA6IEJhc2Uob3RoZXIuY2FwYWNpdHkoKSwgb3Ro
ZXIuc2l6ZSgpKQotewotICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKG90aGVyLnNpemUo
KSk7Ci0KLSAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlh
bGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KLXRlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFj
aXR5LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3RoZXJNaW5pbXVt
Q2FwYWNpdHk+Ci1WZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+OjpWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3Zl
cmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5PiYgb3RoZXIpCi0gICAgOiBCYXNl
KG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNpemUoKSkKLXsKLSAgICBhc2FuU2V0SW5pdGlhbEJ1
ZmZlclNpemVUbyhvdGhlci5zaXplKCkpOwotCi0gICAgaWYgKGJlZ2luKCkpCi0gICAgICAgIFR5
cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQo
KSwgYmVnaW4oKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci1WZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpvcGVy
YXRvcj0oY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5PiYgb3RoZXIpCi17Ci0gICAgaWYgKCZvdGhlciA9PSB0aGlzKQotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgCi0gICAgaWYgKHNpemUoKSA+IG90aGVyLnNpemUoKSkKLSAgICAg
ICAgc2hyaW5rKG90aGVyLnNpemUoKSk7Ci0gICAgZWxzZSBpZiAob3RoZXIuc2l6ZSgpID4gY2Fw
YWNpdHkoKSkgewotICAgICAgICBjbGVhcigpOwotICAgICAgICByZXNlcnZlQ2FwYWNpdHkob3Ro
ZXIuc2l6ZSgpKTsKLSAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwotICAgIH0KLQotICAgIGFzYW5C
dWZmZXJTaXplV2lsbENoYW5nZVRvKG90aGVyLnNpemUoKSk7Ci0KLSAgICBzdGQ6OmNvcHkob3Ro
ZXIuYmVnaW4oKSwgb3RoZXIuYmVnaW4oKSArIHNpemUoKSwgYmVnaW4oKSk7Ci0gICAgVHlwZU9w
ZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVy
LmVuZCgpLCBlbmQoKSk7Ci0gICAgbV9zaXplID0gb3RoZXIuc2l6ZSgpOwotCi0gICAgcmV0dXJu
ICp0aGlzOwotfQotCi1pbmxpbmUgYm9vbCB0eXBlbGVzc1BvaW50ZXJzQXJlRXF1YWwoY29uc3Qg
dm9pZCogYSwgY29uc3Qgdm9pZCogYikgeyByZXR1cm4gYSA9PSBiOyB9Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHk+Ci10ZW1wbGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eSwgdHlw
ZW5hbWUgb3RoZXJPdmVyZmxvd0JlaGF2aW91ciwgc2l6ZV90IG90aGVyTWluaW11bUNhcGFjaXR5
PgotVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
PiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
Pjo6b3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5LCBvdGhlck92ZXJmbG93
QmVoYXZpb3VyLCBvdGhlck1pbmltdW1DYXBhY2l0eT4mIG90aGVyKQotewotICAgIC8vIElmIHRo
ZSBpbmxpbmUgY2FwYWNpdGllcyBtYXRjaCwgd2Ugc2hvdWxkIGNhbGwgdGhlIG1vcmUgc3BlY2lm
aWMKLSAgICAvLyB0ZW1wbGF0ZS4gIElmIHRoZSBpbmxpbmUgY2FwYWNpdGllcyBkb24ndCBtYXRj
aCwgdGhlIHR3byBvYmplY3RzCi0gICAgLy8gc2hvdWxkbid0IGJlIGFsbG9jYXRlZCB0aGUgc2Ft
ZSBhZGRyZXNzLgotICAgIEFTU0VSVCghdHlwZWxlc3NQb2ludGVyc0FyZUVxdWFsKCZvdGhlciwg
dGhpcykpOwotCi0gICAgaWYgKHNpemUoKSA+IG90aGVyLnNpemUoKSkKLSAgICAgICAgc2hyaW5r
KG90aGVyLnNpemUoKSk7Ci0gICAgZWxzZSBpZiAob3RoZXIuc2l6ZSgpID4gY2FwYWNpdHkoKSkg
ewotICAgICAgICBjbGVhcigpOwotICAgICAgICByZXNlcnZlQ2FwYWNpdHkob3RoZXIuc2l6ZSgp
KTsKLSAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwotICAgIH0KLSAgICAKLSAgICBhc2FuQnVmZmVy
U2l6ZVdpbGxDaGFuZ2VUbyhvdGhlci5zaXplKCkpOwotCi0gICAgc3RkOjpjb3B5KG90aGVyLmJl
Z2luKCksIG90aGVyLmJlZ2luKCkgKyBzaXplKCksIGJlZ2luKCkpOwotICAgIFR5cGVPcGVyYXRp
b25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBvdGhlci5lbmQo
KSwgZW5kKCkpOwotICAgIG1fc2l6ZSA9IG90aGVyLnNpemUoKTsKLQotICAgIHJldHVybiAqdGhp
czsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KLWlubGluZSBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpWZWN0b3Io
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYm
IG90aGVyKQotewotICAgIHN3YXAob3RoZXIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1p
bkNhcGFjaXR5PgotaW5saW5lIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eT4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eT46Om9wZXJhdG9yPShWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiYgb3RoZXIpCi17Ci0gICAgc3dhcChvdGhlcik7
Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
PgotdGVtcGxhdGU8dHlwZW5hbWUgVT4KLWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6Y29udGFpbnMoY29uc3QgVSYgdmFsdWUpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGZpbmQodmFsdWUpICE9IG5vdEZvdW5kOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgotdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlv
bj4KLXNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+OjpmaW5kTWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykgY29u
c3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChtYXRjaGVzKGF0KGkpKSkKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgIH0KLSAgICBy
ZXR1cm4gbm90Rm91bmQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmZpbmQoY29uc3QgVSYgdmFsdWUpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGZpbmRNYXRjaGluZyhbJl0oYXV0byYgaXRlbSkgewotICAgICAgICByZXR1
cm4gaXRlbSA9PSB2YWx1ZTsKLSAgICB9KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eT4KLXRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1zaXplX3QgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmV2ZXJzZUZpbmQoY29uc3Qg
VSYgdmFsdWUpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPD0gc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IGluZGV4ID0gc2l6ZSgpIC0gaTsKLSAgICAgICAg
aWYgKGF0KGluZGV4KSA9PSB2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9
Ci0gICAgcmV0dXJuIG5vdEZvdW5kOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5PgotdGVtcGxhdGU8dHlwZW5hbWUgVT4KLWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXBwZW5kSWZOb3RDb250YWlucyhjb25z
dCBVJiB2YWx1ZSkKLXsKLSAgICBpZiAoY29udGFpbnModmFsdWUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgYXBwZW5kKHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6ZmlsbChjb25zdCBUJiB2YWwsIHNpemVf
dCBuZXdTaXplKQotewotICAgIGlmIChzaXplKCkgPiBuZXdTaXplKQotICAgICAgICBzaHJpbmso
bmV3U2l6ZSk7Ci0gICAgZWxzZSBpZiAobmV3U2l6ZSA+IGNhcGFjaXR5KCkpIHsKLSAgICAgICAg
Y2xlYXIoKTsKLSAgICAgICAgcmVzZXJ2ZUNhcGFjaXR5KG5ld1NpemUpOwotICAgICAgICBBU1NF
UlQoYmVnaW4oKSk7Ci0gICAgfQotCi0gICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obmV3
U2l6ZSk7Ci0KLSAgICBzdGQ6OmZpbGwoYmVnaW4oKSwgZW5kKCksIHZhbCk7Ci0gICAgVHlwZU9w
ZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRGaWxsKGVuZCgpLCBiZWdpbigpICsgbmV3U2l6ZSwgdmFs
KTsKLSAgICBtX3NpemUgPSBuZXdTaXplOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNh
cGFjaXR5PgotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+Ci12b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmFwcGVuZFJhbmdlKEl0
ZXJhdG9yIHN0YXJ0LCBJdGVyYXRvciBlbmQpCi17Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IHN0
YXJ0OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGFwcGVuZCgqaXQpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgotdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3
TWluQ2FwYWNpdHkpCi17Ci0gICAgcmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6bWF4KG5ld01pbkNhcGFj
aXR5LCBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KG1pbkNhcGFjaXR5KSwgY2FwYWNpdHko
KSArIGNhcGFjaXR5KCkgLyA0ICsgMSkpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eT4KLVQqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT46OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgVCogcHRy
KQotewotICAgIGlmIChwdHIgPCBiZWdpbigpIHx8IHB0ciA+PSBlbmQoKSkgewotICAgICAgICBl
eHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAg
fQotICAgIHNpemVfdCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7Ci0gICAgZXhwYW5kQ2FwYWNpdHko
bmV3TWluQ2FwYWNpdHkpOwotICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci1ib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnRyeUV4cGFuZENhcGFjaXR5KHNpemVf
dCBuZXdNaW5DYXBhY2l0eSkKLXsKLSAgICByZXR1cm4gdHJ5UmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6
bWF4KG5ld01pbkNhcGFjaXR5LCBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KG1pbkNhcGFj
aXR5KSwgY2FwYWNpdHkoKSArIGNhcGFjaXR5KCkgLyA0ICsgMSkpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KLWNvbnN0IFQqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnRyeUV4cGFuZENhcGFjaXR5KHNpemVf
dCBuZXdNaW5DYXBhY2l0eSwgY29uc3QgVCogcHRyKQotewotICAgIGlmIChwdHIgPCBiZWdpbigp
IHx8IHB0ciA+PSBlbmQoKSkgewotICAgICAgICBpZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01p
bkNhcGFjaXR5KSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gcHRyOwot
ICAgIH0KLSAgICBzaXplX3QgaW5kZXggPSBwdHIgLSBiZWdpbigpOwotICAgIGlmICghdHJ5RXhw
YW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gYmVnaW4oKSArIGluZGV4OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotaW5saW5lIFUqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmV4cGFuZENhcGFjaXR5KHNpemVfdCBu
ZXdNaW5DYXBhY2l0eSwgVSogcHRyKQotewotICAgIGV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFj
aXR5KTsKLSAgICByZXR1cm4gcHRyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5PgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5Pjo6cmVzaXplKHNpemVfdCBzaXplKQotewotICAgIGlmIChzaXplIDw9
IG1fc2l6ZSkgewotICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW4oKSArIHNp
emUsIGVuZCgpKTsKLSAgICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8oc2l6ZSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHNpemUgPiBjYXBhY2l0eSgpKQotICAgICAgICAgICAg
ZXhwYW5kQ2FwYWNpdHkoc2l6ZSk7Ci0gICAgICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRv
KHNpemUpOwotICAgICAgICBpZiAoYmVnaW4oKSkKLSAgICAgICAgICAgIFR5cGVPcGVyYXRpb25z
Ojppbml0aWFsaXplKGVuZCgpLCBiZWdpbigpICsgc2l6ZSk7Ci0gICAgfQotICAgIAotICAgIG1f
c2l6ZSA9IHNpemU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci12b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46
OnJlc2l6ZVRvRml0KHNpemVfdCBzaXplKQotewotICAgIHJlc2VydmVDYXBhY2l0eShzaXplKTsK
LSAgICByZXNpemUoc2l6ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+
Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT46OnNocmluayhzaXplX3Qgc2l6ZSkKLXsKLSAgICBBU1NFUlQoc2l6ZSA8PSBtX3NpemUp
OwotICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChiZWdpbigpICsgc2l6ZSwgZW5kKCkpOwot
ICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKHNpemUpOwotICAgIG1fc2l6ZSA9IHNpemU7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci12b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Omdyb3coc2l6ZV90
IHNpemUpCi17Ci0gICAgQVNTRVJUKHNpemUgPj0gbV9zaXplKTsKLSAgICBpZiAoc2l6ZSA+IGNh
cGFjaXR5KCkpCi0gICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUpOwotICAgIGFzYW5CdWZmZXJT
aXplV2lsbENoYW5nZVRvKHNpemUpOwotICAgIGlmIChiZWdpbigpKQotICAgICAgICBUeXBlT3Bl
cmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOwotICAgIG1fc2l6ZSA9
IHNpemU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci1pbmxpbmUgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
Ojphc2FuU2V0SW5pdGlhbEJ1ZmZlclNpemVUbyhzaXplX3Qgc2l6ZSkKLXsKLSNpZiBBU0FOX0VO
QUJMRUQKLSAgICBpZiAoIWJ1ZmZlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGlz
IGZ1bmN0aW9uIHJlc3RpY3RzIGJ1ZmZlciBhY2Nlc3MgdG8gb25seSBlbGVtZW50cyBpbiBbYmVn
aW4oKSwgZW5kKCkpIHJhbmdlLCBtYWtpbmcgQVNhbiBkZXRlY3QgYW4gZXJyb3IKLSAgICAvLyB3
aGVuIGFjY2Vzc2luZyBlbGVtZW50cyBpbiBbZW5kKCksIGVuZE9mQnVmZmVyKCkpIHJhbmdlLgot
ICAgIC8vIEEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBjYW4gYmUgYWNjZXNzZWQgd2l0aG91dCBy
ZXN0cmljdGlvbnMsIHNvICJvbGRfbWlkIiBhcmd1bWVudCBlcXVhbHMgImVuZCIgYXJndW1lbnQu
Ci0gICAgX19zYW5pdGl6ZXJfYW5ub3RhdGVfY29udGlndW91c19jb250YWluZXIoYnVmZmVyKCks
IGVuZE9mQnVmZmVyKCksIGVuZE9mQnVmZmVyKCksIGJ1ZmZlcigpICsgc2l6ZSk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSNlbmRpZgotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5PgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXNhblNldEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0
eShzaXplX3Qgc2l6ZSkKLXsKLSNpZiBBU0FOX0VOQUJMRUQKLSAgICBpZiAoIWJ1ZmZlcigpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBBU2FuIHJlcXVpcmVzIHRoYXQgdGhlIGFubm90YXRp
b24gaXMgcmV0dXJuZWQgdG8gaXRzIGluaXRpYWwgc3RhdGUgYmVmb3JlIGRlYWxsb2NhdGlvbi4K
LSAgICBfX3Nhbml0aXplcl9hbm5vdGF0ZV9jb250aWd1b3VzX2NvbnRhaW5lcihidWZmZXIoKSwg
ZW5kT2ZCdWZmZXIoKSwgYnVmZmVyKCkgKyBzaXplLCBlbmRPZkJ1ZmZlcigpKTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHNpemUpOwotI2VuZGlmCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3Qg
bWluQ2FwYWNpdHk+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojphc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhzaXpl
X3QgbmV3U2l6ZSkKLXsKLSNpZiBBU0FOX0VOQUJMRUQKLSAgICBpZiAoIWJ1ZmZlcigpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBDaGFuZ2UgYWxsb3dlZCByYW5nZS4KLSAgICBfX3Nhbml0
aXplcl9hbm5vdGF0ZV9jb250aWd1b3VzX2NvbnRhaW5lcihidWZmZXIoKSwgZW5kT2ZCdWZmZXIo
KSwgYnVmZmVyKCkgKyBzaXplKCksIGJ1ZmZlcigpICsgbmV3U2l6ZSk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShuZXdTaXplKTsKLSNlbmRpZgotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1p
bkNhcGFjaXR5Pgotdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHk+OjpyZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KQotewot
ICAgIGlmIChuZXdDYXBhY2l0eSA8PSBjYXBhY2l0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
VCogb2xkQnVmZmVyID0gYmVnaW4oKTsKLSAgICBUKiBvbGRFbmQgPSBlbmQoKTsKLQotICAgIGFz
YW5TZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkoKTsKLQotICAgIEJhc2U6OmFsbG9jYXRlQnVm
ZmVyKG5ld0NhcGFjaXR5KTsKLSAgICBBU1NFUlQoYmVnaW4oKSk7Ci0KLSAgICBhc2FuU2V0SW5p
dGlhbEJ1ZmZlclNpemVUbyhzaXplKCkpOwotCi0gICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xk
QnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOwotICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xk
QnVmZmVyKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KLWJvb2wgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dHJ5
UmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkKLXsKLSAgICBpZiAobmV3Q2FwYWNp
dHkgPD0gY2FwYWNpdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgVCogb2xkQnVmZmVy
ID0gYmVnaW4oKTsKLSAgICBUKiBvbGRFbmQgPSBlbmQoKTsKLQotICAgIGFzYW5TZXRCdWZmZXJT
aXplVG9GdWxsQ2FwYWNpdHkoKTsKLQotICAgIGlmICghQmFzZTo6dHJ5QWxsb2NhdGVCdWZmZXIo
bmV3Q2FwYWNpdHkpKSB7Ci0gICAgICAgIGFzYW5TZXRJbml0aWFsQnVmZmVyU2l6ZVRvKHNpemUo
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgQVNTRVJUKGJlZ2luKCkpOwot
Ci0gICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZSgpKTsKLQotICAgIFR5cGVPcGVy
YXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKLSAgICBCYXNlOjpkZWFs
bG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkpCi17Ci0gICAgQVNTRVJUKCFtX3NpemUpOwotICAg
IEFTU0VSVChjYXBhY2l0eSgpID09IGlubGluZUNhcGFjaXR5KTsKLSAgICBpZiAoaW5pdGlhbENh
cGFjaXR5ID4gaW5saW5lQ2FwYWNpdHkpCi0gICAgICAgIEJhc2U6OmFsbG9jYXRlQnVmZmVyKGlu
aXRpYWxDYXBhY2l0eSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci12
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0
eT46OnNocmlua0NhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkKLXsKLSAgICBpZiAobmV3Q2Fw
YWNpdHkgPj0gY2FwYWNpdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG5ld0NhcGFj
aXR5IDwgc2l6ZSgpKSAKLSAgICAgICAgc2hyaW5rKG5ld0NhcGFjaXR5KTsKLQotICAgIGFzYW5T
ZXRCdWZmZXJTaXplVG9GdWxsQ2FwYWNpdHkoKTsKLQotICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2lu
KCk7Ci0gICAgaWYgKG5ld0NhcGFjaXR5ID4gMCkgewotICAgICAgICBpZiAoQmFzZTo6c2hvdWxk
UmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSkpIHsKLSAgICAgICAgICAgIEJhc2U6OnJlYWxs
b2NhdGVCdWZmZXIobmV3Q2FwYWNpdHkpOwotICAgICAgICAgICAgYXNhblNldEluaXRpYWxCdWZm
ZXJTaXplVG8oc2l6ZSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIFQqIG9sZEVuZCA9IGVuZCgpOwotICAgICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihuZXdD
YXBhY2l0eSk7Ci0gICAgICAgIGlmIChiZWdpbigpICE9IG9sZEJ1ZmZlcikKLSAgICAgICAgICAg
IFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKLSAgICB9
Ci0KLSAgICBCYXNlOjpkZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7Ci0gICAgQmFzZTo6cmVz
dG9yZUlubGluZUJ1ZmZlcklmTmVlZGVkKCk7Ci0KLSAgICBhc2FuU2V0SW5pdGlhbEJ1ZmZlclNp
emVUbyhzaXplKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgotdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHk+OjphcHBlbmQoY29uc3QgVSogZGF0YSwgc2l6ZV90IGRhdGFT
aXplKQotewotICAgIHNpemVfdCBuZXdTaXplID0gbV9zaXplICsgZGF0YVNpemU7Ci0gICAgaWYg
KG5ld1NpemUgPiBjYXBhY2l0eSgpKSB7Ci0gICAgICAgIGRhdGEgPSBleHBhbmRDYXBhY2l0eShu
ZXdTaXplLCBkYXRhKTsKLSAgICAgICAgQVNTRVJUKGJlZ2luKCkpOwotICAgIH0KLSAgICBpZiAo
bmV3U2l6ZSA8IG1fc2l6ZSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBhc2FuQnVmZmVyU2l6ZVdp
bGxDaGFuZ2VUbyhuZXdTaXplKTsKLSAgICBUKiBkZXN0ID0gZW5kKCk7Ci0gICAgVmVjdG9yQ29w
aWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRh
LCBzdGQ6OmFkZHJlc3NvZihkYXRhW2RhdGFTaXplXSksIGRlc3QpOwotICAgIG1fc2l6ZSA9IG5l
d1NpemU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+IHRlbXBsYXRlPHR5
cGVuYW1lIFU+Ci1ib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eT46OnRyeUFwcGVuZChjb25zdCBVKiBkYXRhLCBzaXplX3QgZGF0YVNpemUp
Ci17Ci0gICAgc2l6ZV90IG5ld1NpemUgPSBtX3NpemUgKyBkYXRhU2l6ZTsKLSAgICBpZiAobmV3
U2l6ZSA+IGNhcGFjaXR5KCkpIHsKLSAgICAgICAgZGF0YSA9IHRyeUV4cGFuZENhcGFjaXR5KG5l
d1NpemUsIGRhdGEpOwotICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIEFTU0VSVChiZWdpbigpKTsKLSAgICB9Ci0gICAgaWYgKG5ld1NpemUgPCBt
X3NpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFu
Z2VUbyhuZXdTaXplKTsKLSAgICBUKiBkZXN0ID0gZW5kKCk7Ci0gICAgVmVjdG9yQ29waWVyPHN0
ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCBzdGQ6
OmFkZHJlc3NvZihkYXRhW2RhdGFTaXplXSksIGRlc3QpOwotICAgIG1fc2l6ZSA9IG5ld1NpemU7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+
IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXBwZW5kKFUmJiB2YWx1
ZSkKLXsKLSAgICBpZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsKLSAgICAgICAgYXNhbkJ1ZmZl
clNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsgMSk7Ci0gICAgICAgIG5ldyAoTm90TnVsbCwgZW5k
KCkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgICAgICsrbV9zaXplOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXBwZW5kU2xvd0Nhc2Uoc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwg
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+IHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3M+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6Y29uc3RydWN0QW5kQXBwZW5kKEFy
Z3MmJi4uLiBhcmdzKQotewotICAgIGlmIChzaXplKCkgIT0gY2FwYWNpdHkoKSkgewotICAgICAg
ICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgKyAxKTsKLSAgICAgICAgbmV3IChO
b3ROdWxsLCBlbmQoKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAgICAgICAr
K21fc2l6ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0cnVjdEFuZEFwcGVu
ZFNsb3dDYXNlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVy
LCBzaXplX3QgbWluQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci1BTFdBWVNf
SU5MSU5FIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5Pjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQotewotICAg
IGlmIChzaXplKCkgIT0gY2FwYWNpdHkoKSkgewotICAgICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxD
aGFuZ2VUbyhtX3NpemUgKyAxKTsKLSAgICAgICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVChzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAgICAgICArK21fc2l6ZTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnlDb25zdHJ1Y3RBbmRBcHBlbmRT
bG93Q2FzZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotdm9pZCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjphcHBlbmRTbG93
Q2FzZShVJiYgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0eSgpKTsKLQot
ICAgIGF1dG8gcHRyID0gY29uc3RfY2FzdDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDx0eXBl
bmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8VT46OnR5cGU+Ojp0eXBlKj4oc3RkOjphZGRyZXNz
b2YodmFsdWUpKTsKLSAgICBwdHIgPSBleHBhbmRDYXBhY2l0eShzaXplKCkgKyAxLCBwdHIpOwot
ICAgIEFTU0VSVChiZWdpbigpKTsKLQotICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1f
c2l6ZSArIDEpOwotICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPFU+KCpw
dHIpKTsKLSAgICArK21fc2l6ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0
eT4gdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6Y29uc3RydWN0QW5kQXBwZW5kU2xv
d0Nhc2UoQXJncyYmLi4uIGFyZ3MpCi17Ci0gICAgQVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0eSgp
KTsKLQotICAgIGV4cGFuZENhcGFjaXR5KHNpemUoKSArIDEpOwotICAgIEFTU0VSVChiZWdpbigp
KTsKLQotICAgIGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSArIDEpOwotICAgIG5l
dyAoTm90TnVsbCwgZW5kKCkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAr
K21fc2l6ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4gdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJncz4KLWJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6dHJ5Q29uc3RydWN0QW5kQXBwZW5kU2xvd0Nhc2UoQXJn
cyYmLi4uIGFyZ3MpCi17Ci0gICAgQVNTRVJUKHNpemUoKSA9PSBjYXBhY2l0eSgpKTsKLSAgICAK
LSAgICBpZiAoVU5MSUtFTFkoIXRyeUV4cGFuZENhcGFjaXR5KHNpemUoKSArIDEpKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChiZWdpbigpKTsKLSAgICAKLSAgICBhc2FuQnVm
ZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgKyAxKTsKLSAgICBuZXcgKE5vdE51bGwsIGVuZCgp
KSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgKyttX3NpemU7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLS8vIFRoaXMgdmVyc2lvbiBvZiBhcHBlbmQgc2F2ZXMgYSBicmFuY2gg
aW4gdGhlIGNhc2Ugd2hlcmUgeW91IGtub3cgdGhhdCB0aGUKLS8vIHZlY3RvcidzIGNhcGFjaXR5
IGlzIGxhcmdlIGVub3VnaCBmb3IgdGhlIGFwcGVuZCB0byBzdWNjZWVkLgotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
ciwgc2l6ZV90IG1pbkNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotQUxXQVlTX0lOTElO
RSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT46OnVuY2hlY2tlZEFwcGVuZChVJiYgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNpemUoKSA8
IGNhcGFjaXR5KCkpOwotCi0gICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXplICsg
MSk7Ci0KLSAgICBhdXRvIHB0ciA9IHN0ZDo6YWRkcmVzc29mKHZhbHVlKTsKLSAgICBuZXcgKE5v
dE51bGwsIGVuZCgpKSBUKHN0ZDo6Zm9yd2FyZDxVPigqcHRyKSk7Ci0gICAgKyttX3NpemU7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFUs
IHNpemVfdCBvdGhlckNhcGFjaXR5PgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXBwZW5kVmVjdG9yKGNvbnN0IFZl
Y3RvcjxVLCBvdGhlckNhcGFjaXR5PiYgdmFsKQotewotICAgIGFwcGVuZCh2YWwuYmVnaW4oKSwg
dmFsLnNpemUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+IHRlbXBs
YXRlPHR5cGVuYW1lIFU+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eT46Omluc2VydChzaXplX3QgcG9zaXRpb24sIGNvbnN0IFUqIGRh
dGEsIHNpemVfdCBkYXRhU2l6ZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihwb3NpdGlvbiA8PSBzaXplKCkpOwotICAgIHNpemVfdCBuZXdTaXplID0gbV9zaXplICsg
ZGF0YVNpemU7Ci0gICAgaWYgKG5ld1NpemUgPiBjYXBhY2l0eSgpKSB7Ci0gICAgICAgIGRhdGEg
PSBleHBhbmRDYXBhY2l0eShuZXdTaXplLCBkYXRhKTsKLSAgICAgICAgQVNTRVJUKGJlZ2luKCkp
OwotICAgIH0KLSAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKLSAgICAgICAgQ1JBU0goKTsKLSAg
ICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhuZXdTaXplKTsKLSAgICBUKiBzcG90ID0gYmVn
aW4oKSArIHBvc2l0aW9uOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3Bv
dCwgZW5kKCksIHNwb3QgKyBkYXRhU2l6ZSk7Ci0gICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJp
dmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCBzdGQ6OmFkZHJlc3Nv
ZihkYXRhW2RhdGFTaXplXSksIHNwb3QpOwotICAgIG1fc2l6ZSA9IG5ld1NpemU7Ci19Ci0gCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotaW5s
aW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5Pjo6aW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwgVSYmIHZhbHVlKQotewotICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDw9IHNpemUoKSk7Ci0KLSAgICBh
dXRvIHB0ciA9IGNvbnN0X2Nhc3Q8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8dHlwZW5hbWUg
c3RkOjpyZW1vdmVfcmVmZXJlbmNlPFU+Ojp0eXBlPjo6dHlwZSo+KHN0ZDo6YWRkcmVzc29mKHZh
bHVlKSk7Ci0gICAgaWYgKHNpemUoKSA9PSBjYXBhY2l0eSgpKSB7Ci0gICAgICAgIHB0ciA9IGV4
cGFuZENhcGFjaXR5KHNpemUoKSArIDEsIHB0cik7Ci0gICAgICAgIEFTU0VSVChiZWdpbigpKTsK
LSAgICB9Ci0KLSAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgKyAxKTsKLQot
ICAgIFQqIHNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247Ci0gICAgVHlwZU9wZXJhdGlvbnM6Om1v
dmVPdmVybGFwcGluZyhzcG90LCBlbmQoKSwgc3BvdCArIDEpOwotICAgIG5ldyAoTm90TnVsbCwg
c3BvdCkgVChzdGQ6OmZvcndhcmQ8VT4oKnB0cikpOwotICAgICsrbV9zaXplOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3Qg
Yz4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVy
LCBtaW5DYXBhY2l0eT46Omluc2VydFZlY3RvcihzaXplX3QgcG9zaXRpb24sIGNvbnN0IFZlY3Rv
cjxVLCBjPiYgdmFsKQotewotICAgIGluc2VydChwb3NpdGlvbiwgdmFsLmJlZ2luKCksIHZhbC5z
aXplKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHks
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgotaW5saW5lIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5
Pjo6cmVtb3ZlKHNpemVfdCBwb3NpdGlvbikKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihwb3NpdGlvbiA8IHNpemUoKSk7Ci0gICAgVCogc3BvdCA9IGJlZ2luKCkgKyBw
b3NpdGlvbjsKLSAgICBzcG90LT5+VCgpOwotICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3Zlcmxh
cHBpbmcoc3BvdCArIDEsIGVuZCgpLCBzcG90KTsKLSAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFu
Z2VUbyhtX3NpemUgLSAxKTsKLSAgICAtLW1fc2l6ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW5DYXBhY2l0eT4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlbW92ZShzaXplX3QgcG9zaXRpb24sIHNpemVf
dCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRp
b24gPD0gc2l6ZSgpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3Np
dGlvbiArIGxlbmd0aCA8PSBzaXplKCkpOwotICAgIFQqIGJlZ2luU3BvdCA9IGJlZ2luKCkgKyBw
b3NpdGlvbjsKLSAgICBUKiBlbmRTcG90ID0gYmVnaW5TcG90ICsgbGVuZ3RoOwotICAgIFR5cGVP
cGVyYXRpb25zOjpkZXN0cnVjdChiZWdpblNwb3QsIGVuZFNwb3QpOyAKLSAgICBUeXBlT3BlcmF0
aW9uczo6bW92ZU92ZXJsYXBwaW5nKGVuZFNwb3QsIGVuZCgpLCBiZWdpblNwb3QpOwotICAgIGFz
YW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG1fc2l6ZSAtIGxlbmd0aCk7Ci0gICAgbV9zaXplIC09
IGxlbmd0aDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KLXRlbXBsYXRl
PHR5cGVuYW1lIFU+Ci1pbmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1vdmVGaXJzdChjb25zdCBVJiB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gcmVtb3ZlRmlyc3RNYXRjaGluZyhbJnZhbHVlXSAoY29uc3QgVCYgY3VycmVu
dCkgewotICAgICAgICByZXR1cm4gY3VycmVudCA9PSB2YWx1ZTsKLSAgICB9KTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KLXRlbXBsYXRlPHR5cGVuYW1lIE1hdGNoRnVu
Y3Rpb24+Ci1pbmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1vdmVGaXJzdE1hdGNoaW5nKGNvbnN0IE1hdGNoRnVuY3Rp
b24mIG1hdGNoZXMsIHNpemVfdCBzdGFydEluZGV4KQotewotICAgIGZvciAoc2l6ZV90IGkgPSBz
dGFydEluZGV4OyBpIDwgc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1hdGNoZXMoYXQoaSkp
KSB7Ci0gICAgICAgICAgICByZW1vdmUoaSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHk+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVPgotaW5saW5lIHVuc2lnbmVkIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJl
bW92ZUFsbChjb25zdCBVJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gcmVtb3ZlQWxsTWF0Y2hpbmco
WyZ2YWx1ZV0gKGNvbnN0IFQmIGN1cnJlbnQpIHsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQgPT0g
dmFsdWU7Ci0gICAgfSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPgotaW5saW5lIHVuc2lnbmVkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlbW92ZUFs
bE1hdGNoaW5nKGNvbnN0IE1hdGNoRnVuY3Rpb24mIG1hdGNoZXMsIHNpemVfdCBzdGFydEluZGV4
KQotewotICAgIGl0ZXJhdG9yIGhvbGVCZWdpbiA9IGVuZCgpOwotICAgIGl0ZXJhdG9yIGhvbGVF
bmQgPSBlbmQoKTsKLSAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMDsKLSAgICBmb3IgKGF1dG8g
aXQgPSBiZWdpbigpICsgc3RhcnRJbmRleCwgaXRFbmQgPSBlbmQoKTsgaXQgPCBpdEVuZDsgKytp
dCkgewotICAgICAgICBpZiAobWF0Y2hlcygqaXQpKSB7Ci0gICAgICAgICAgICBpZiAoaG9sZUJl
Z2luID09IGVuZCgpKQotICAgICAgICAgICAgICAgIGhvbGVCZWdpbiA9IGl0OwotICAgICAgICAg
ICAgZWxzZSBpZiAoaG9sZUVuZCAhPSBpdCkgewotICAgICAgICAgICAgICAgIFR5cGVPcGVyYXRp
b25zOjptb3ZlT3ZlcmxhcHBpbmcoaG9sZUVuZCwgaXQsIGhvbGVCZWdpbik7Ci0gICAgICAgICAg
ICAgICAgaG9sZUJlZ2luICs9IGl0IC0gaG9sZUVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGhvbGVFbmQgPSBpdCArIDE7Ci0gICAgICAgICAgICBpdC0+flQoKTsKLSAgICAgICAgICAg
ICsrbWF0Y2hDb3VudDsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaG9sZUVuZCAhPSBlbmQo
KSkKLSAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhob2xlRW5kLCBlbmQo
KSwgaG9sZUJlZ2luKTsKLSAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhtX3NpemUgLSBt
YXRjaENvdW50KTsKLSAgICBtX3NpemUgLT0gbWF0Y2hDb3VudDsKLSAgICByZXR1cm4gbWF0Y2hD
b3VudDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KLWlubGluZSB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46
OnJldmVyc2UoKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplIC8gMjsgKytp
KQotICAgICAgICBzdGQ6OnN3YXAoYXQoaSksIGF0KG1fc2l6ZSAtIDEgLSBpKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIE1hcEZ1bmN0
aW9uLCB0eXBlbmFtZSBSPgotaW5saW5lIFZlY3RvcjxSPiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjptYXAoTWFwRnVuY3Rpb24gbWFwRnVu
Y3Rpb24pIGNvbnN0Ci17Ci0gICAgVmVjdG9yPFI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShzaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQobWFwRnVuY3Rpb24oYXQo
aSkpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNh
cGFjaXR5PgotaW5saW5lIE1hbGxvY1B0cjxUPiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZWxlYXNlQnVmZmVyKCkKLXsKLSAgICAvLyBG
SVhNRTogRmluZCBhIHdheSB0byBwcmVzZXJ2ZSBhbm5vdGF0aW9ucyBvbiB0aGUgcmV0dXJuZWQg
YnVmZmVyLgotICAgIC8vIEFTYW4gcmVxdWlyZXMgdGhhdCBhbGwgYW5ub3RhdGlvbnMgYXJlIHJl
bW92ZWQgYmVmb3JlIGRlYWxsb2NhdGlvbiwKLSAgICAvLyBhbmQgTWFsbG9jUHRyIGRvZXNuJ3Qg
aW1wbGVtZW50IHRoYXQuCi0gICAgYXNhblNldEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eSgpOwot
Ci0gICAgYXV0byBidWZmZXIgPSBCYXNlOjpyZWxlYXNlQnVmZmVyKCk7Ci0gICAgaWYgKGlubGlu
ZUNhcGFjaXR5ICYmICFidWZmZXIgJiYgbV9zaXplKSB7Ci0gICAgICAgIC8vIElmIHRoZSB2ZWN0
b3IgaGFkIHNvbWUgZGF0YSwgYnV0IG5vIGJ1ZmZlciB0byByZWxlYXNlLAotICAgICAgICAvLyB0
aGF0IG1lYW5zIGl0IHdhcyB1c2luZyB0aGUgaW5saW5lIGJ1ZmZlci4gSW4gdGhhdCBjYXNlLAot
ICAgICAgICAvLyB3ZSBjcmVhdGUgYSBicmFuZCBuZXcgYnVmZmVyIHNvIHRoZSBjYWxsZXIgYWx3
YXlzIGdldHMgb25lLgotICAgICAgICBzaXplX3QgYnl0ZXMgPSBtX3NpemUgKiBzaXplb2YoVCk7
Ci0gICAgICAgIGJ1ZmZlciA9IGFkb3B0TWFsbG9jUHRyKHN0YXRpY19jYXN0PFQqPihmYXN0TWFs
bG9jKGJ5dGVzKSkpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLmdldCgpLCBkYXRhKCksIGJ5dGVz
KTsKLSAgICB9Ci0gICAgbV9zaXplID0gMDsKLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNhbGwg
QmFzZTo6cmVzdG9yZUlubGluZUJ1ZmZlcklmTmVlZGVkKCkgaGVyZT8KLSAgICByZXR1cm4gYnVm
ZmVyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgotaW5saW5lIHZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6
Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQotICAgICAgICBWYWx1ZUNoZWNrPFQ+OjpjaGVja0Nv
bnNpc3RlbmN5KGF0KGkpKTsKLSNlbmRpZgotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNh
cGFjaXR5PgotaW5saW5lIHZvaWQgc3dhcChWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBhLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBiKQotewotICAgIGEuc3dhcChiKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBh
LCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2Fw
YWNpdHk+JiBiKQotewotICAgIGlmIChhLnNpemUoKSAhPSBiLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+Ojpjb21wYXJl
KGEuZGF0YSgpLCBiLmRhdGEoKSwgYS5zaXplKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5PgotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBhLCBjb25zdCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBiKQot
ewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IFZhbHVlQ2hlY2s8VmVjdG9yPFQ+PiB7Ci0gICAgdHlwZWRl
ZiBWZWN0b3I8VD4gVHJhaXRUeXBlOwotICAgIHN0YXRpYyB2b2lkIGNoZWNrQ29uc2lzdGVuY3ko
Y29uc3QgVmVjdG9yPFQ+JiB2KQotICAgIHsKLSAgICAgICAgdi5jaGVja0NvbnNpc3RlbmN5KCk7
Ci0gICAgfQotfTsKLSNlbmRpZgotCi10ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBl
bmFtZSBGdW5jPgotc2l6ZV90IHJlbW92ZVJlcGVhdGVkRWxlbWVudHMoVmVjdG9yVHlwZSYgdmVj
dG9yLCBjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGF1dG8gZW5kID0gc3RkOjp1bmlxdWUodmVj
dG9yLmJlZ2luKCksIHZlY3Rvci5lbmQoKSwgZnVuYyk7Ci0gICAgc2l6ZV90IG5ld1NpemUgPSBl
bmQgLSB2ZWN0b3IuYmVnaW4oKTsKLSAgICB2ZWN0b3Iuc2hyaW5rKG5ld1NpemUpOwotICAgIHJl
dHVybiBuZXdTaXplOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgotc2l6
ZV90IHJlbW92ZVJlcGVhdGVkRWxlbWVudHMoVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5PiYgdmVjdG9yKQotewotICAgIHJldHVybiByZW1vdmVS
ZXBlYXRlZEVsZW1lbnRzKHZlY3RvciwgW10gKFQmIGEsIFQmIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OlZlY3RvcjsKLXVzaW5n
IFdURjo6VW5zYWZlVmVjdG9yT3ZlcmZsb3c7Ci11c2luZyBXVEY6OnJlbW92ZVJlcGVhdGVkRWxl
bWVudHM7Ci0KLSNlbmRpZiAvLyBXVEZfVmVjdG9yX2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9WZWN0b3JUcmFpdHMuaCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi9WZWN0b3JUcmFpdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYjNmYjA3N2JiZmY3M2Y1NjMzZTE1YmUzMzIwMmE0MjIxYThlNzYwNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvVmVjdG9yVHJhaXRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgV1RGX1ZlY3RvclRyYWl0c19oCi0j
ZGVmaW5lIFdURl9WZWN0b3JUcmFpdHNfaAotCi0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPG1lbW9yeT4K
LSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLSAgICBjbGFzcyBB
dG9taWNTdHJpbmc7Ci0KLSAgICB0ZW1wbGF0ZTxib29sIGlzUG9kLCB0eXBlbmFtZSBUPgotICAg
IHN0cnVjdCBWZWN0b3JUcmFpdHNCYXNlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAg
ICBzdHJ1Y3QgVmVjdG9yVHJhaXRzQmFzZTxmYWxzZSwgVD4KLSAgICB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBib29sIG5lZWRzSW5pdGlhbGl6YXRpb24gPSB0cnVlOwotICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IGZhbHNlOwotICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBjYW5Nb3ZlV2l0aE1lbWNweSA9IGZhbHNlOwotICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBjYW5Db3B5V2l0aE1lbWNweSA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBjYW5GaWxsV2l0aE1lbXNldCA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBjYW5Db21wYXJlV2l0aE1lbWNtcCA9IGZhbHNlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBWZWN0b3JUcmFpdHNCYXNlPHRydWUsIFQ+Ci0gICAg
ewotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0luaXRpYWxpemF0aW9uID0gZmFsc2U7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gZmFs
c2U7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbk1vdmVXaXRoTWVtY3B5ID0gdHJ1ZTsK
LSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuQ29weVdpdGhNZW1jcHkgPSB0cnVlOwotICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5GaWxsV2l0aE1lbXNldCA9IHNpemVvZihUKSA9PSBz
aXplb2YoY2hhcikgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWU7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGNhbkNvbXBhcmVXaXRoTWVtY21wID0gdHJ1ZTsKLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgVmVjdG9yVHJhaXRzIDogVmVjdG9yVHJh
aXRzQmFzZTxzdGQ6OmlzX3BvZDxUPjo6dmFsdWUsIFQ+IHsgfTsKLQotICAgIHN0cnVjdCBTaW1w
bGVDbGFzc1ZlY3RvclRyYWl0cyA6IFZlY3RvclRyYWl0c0Jhc2U8ZmFsc2UsIHZvaWQ+Ci0gICAg
ewotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IHRy
dWU7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbk1vdmVXaXRoTWVtY3B5ID0gdHJ1ZTsK
LSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuQ29tcGFyZVdpdGhNZW1jbXAgPSB0cnVlOwot
ICAgIH07Ci0KLSAgICAvLyBXZSBrbm93IHNtYXJ0IHBvaW50ZXJzIGFyZSBzaW1wbGUgZW5vdWdo
IHRoYXQgaW5pdGlhbGl6aW5nIHRvIDAgYW5kIG1vdmluZyB3aXRoIG1lbWNweQotICAgIC8vIChh
bmQgdGhlbiBub3QgZGVzdHJ1Y3RpbmcgdGhlIG9yaWdpbmFsKSB3aWxsIHdvcmsuCi0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPFJlZlB0cjxQPj4gOiBTaW1w
bGVDbGFzc1ZlY3RvclRyYWl0cyB7IH07Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0
IFZlY3RvclRyYWl0czxzdGQ6OnVuaXF1ZV9wdHI8UD4+IDogU2ltcGxlQ2xhc3NWZWN0b3JUcmFp
dHMgeyB9OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBWZWN0b3JUcmFpdHM8UmVm
PFA+PiA6IFNpbXBsZUNsYXNzVmVjdG9yVHJhaXRzIHsgfTsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBWZWN0b3JUcmFpdHM8QXRvbWljU3RyaW5nPiA6IFNpbXBsZUNsYXNzVmVjdG9yVHJhaXRzIHsg
fTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpcnN0LCB0eXBlbmFtZSBTZWNvbmQ+Ci0gICAg
c3RydWN0IFZlY3RvclRyYWl0czxzdGQ6OnBhaXI8Rmlyc3QsIFNlY29uZD4+Ci0gICAgewotICAg
ICAgICB0eXBlZGVmIFZlY3RvclRyYWl0czxGaXJzdD4gRmlyc3RUcmFpdHM7Ci0gICAgICAgIHR5
cGVkZWYgVmVjdG9yVHJhaXRzPFNlY29uZD4gU2Vjb25kVHJhaXRzOwotCi0gICAgICAgIHN0YXRp
YyBjb25zdCBib29sIG5lZWRzSW5pdGlhbGl6YXRpb24gPSBGaXJzdFRyYWl0czo6bmVlZHNJbml0
aWFsaXphdGlvbiB8fCBTZWNvbmRUcmFpdHM6Om5lZWRzSW5pdGlhbGl6YXRpb247Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gRmlyc3RUcmFpdHM6
OmNhbkluaXRpYWxpemVXaXRoTWVtc2V0ICYmIFNlY29uZFRyYWl0czo6Y2FuSW5pdGlhbGl6ZVdp
dGhNZW1zZXQ7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbk1vdmVXaXRoTWVtY3B5ID0g
Rmlyc3RUcmFpdHM6OmNhbk1vdmVXaXRoTWVtY3B5ICYmIFNlY29uZFRyYWl0czo6Y2FuTW92ZVdp
dGhNZW1jcHk7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkNvcHlXaXRoTWVtY3B5ID0g
Rmlyc3RUcmFpdHM6OmNhbkNvcHlXaXRoTWVtY3B5ICYmIFNlY29uZFRyYWl0czo6Y2FuQ29weVdp
dGhNZW1jcHk7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkZpbGxXaXRoTWVtc2V0ID0g
ZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkNvbXBhcmVXaXRoTWVtY21wID0g
Rmlyc3RUcmFpdHM6OmNhbkNvbXBhcmVXaXRoTWVtY21wICYmIFNlY29uZFRyYWl0czo6Y2FuQ29t
cGFyZVdpdGhNZW1jbXA7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdU
Rjo6VmVjdG9yVHJhaXRzOwotdXNpbmcgV1RGOjpTaW1wbGVDbGFzc1ZlY3RvclRyYWl0czsKLQot
I2VuZGlmIC8vIFdURl9WZWN0b3JUcmFpdHNfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL1dURlRocmVhZERhdGEuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL1dURlRocmVhZERhdGEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3M2U3N2QyNTg1ZjhhNjE0NDRmOTc0ZTdjM2I4YWQxM2ExY2I2NjkzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
KgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXVEZUaHJlYWREYXRhLmgi
Ci0KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdUYWJsZS5oPgotCi0jaWYgVVNFKFdF
Ql9USFJFQUQpCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLQotI2lmICFIQVZFKEZBU1RfVExTKQotVGhyZWFkU3BlY2lmaWM8V1RGVGhyZWFk
RGF0YT4qIFdURlRocmVhZERhdGE6OnN0YXRpY0RhdGE7Ci0jZW5kaWYKLQotV1RGVGhyZWFkRGF0
YTo6V1RGVGhyZWFkRGF0YSgpCi0gICAgOiBtX3N0YWNrQm91bmRzKFN0YWNrQm91bmRzOjpjdXJy
ZW50VGhyZWFkU3RhY2tCb3VuZHMoKSkKLSAgICAsIG1fc2F2ZWRMYXN0U3RhY2tUb3Aoc3RhY2so
KS5vcmlnaW4oKSkKLXsKLSAgICBBdG9taWNTdHJpbmdUYWJsZTo6Y3JlYXRlKCp0aGlzKTsKLSAg
ICBtX2N1cnJlbnRBdG9taWNTdHJpbmdUYWJsZSA9IG1fZGVmYXVsdEF0b21pY1N0cmluZ1RhYmxl
OwotfQotCi1XVEZUaHJlYWREYXRhOjp+V1RGVGhyZWFkRGF0YSgpCi17Ci0gICAgaWYgKG1fYXRv
bWljU3RyaW5nVGFibGVEZXN0cnVjdG9yKQotICAgICAgICBtX2F0b21pY1N0cmluZ1RhYmxlRGVz
dHJ1Y3RvcihtX2RlZmF1bHRBdG9taWNTdHJpbmdUYWJsZSk7Ci19Ci0KLSNpZiBIQVZFKEZBU1Rf
VExTKQotV1RGVGhyZWFkRGF0YSYgV1RGVGhyZWFkRGF0YTo6Y3JlYXRlQW5kUmVnaXN0ZXJGb3JH
ZXRzcGVjaWZpY0RpcmVjdCgpCi17Ci0gICAgV1RGVGhyZWFkRGF0YSogZGF0YSA9IG5ldyBXVEZU
aHJlYWREYXRhOwotICAgIF9wdGhyZWFkX3NldHNwZWNpZmljX2RpcmVjdChXVEZfVEhSRUFEX0RB
VEFfS0VZLCBkYXRhKTsKLSAgICBwdGhyZWFkX2tleV9pbml0X25wKFdURl9USFJFQURfREFUQV9L
RVksIFtdKHZvaWQqIGRhdGEpewotICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8V1RGVGhyZWFk
RGF0YSo+KGRhdGEpOwotICAgIH0pOwotICAgIHJldHVybiAqZGF0YTsKLX0KLSNlbmRpZgotCi19
IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL3d0Zi9XVEZUaHJlYWREYXRhLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93
dGYvV1RGVGhyZWFkRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTVmZjgx
NzY2ZDgzYzU2ZGJjYWNiNjNiYWU2ZTI2MDhhNjJjMzAyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9XVEZUaHJlYWREYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICoKLSAqLwotCi0jaWZuZGVm
IFdURlRocmVhZERhdGFfaAotI2RlZmluZSBXVEZUaHJlYWREYXRhX2gKLQotI2luY2x1ZGUgPHd0
Zi9GYXN0VExTLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3Rm
L1N0YWNrQm91bmRzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KLSNpbmNsdWRlIDx3
dGYvVGhyZWFkU3BlY2lmaWMuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEF0b21pY1N0
cmluZ1RhYmxlOwotCi10eXBlZGVmIHZvaWQgKCpBdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3Ip
KEF0b21pY1N0cmluZ1RhYmxlKik7Ci0KLWNsYXNzIFdURlRocmVhZERhdGEgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFdURlRocmVhZERhdGEpOwotcHVibGljOgotICAgIFdURl9FWFBPUlRf
UFJJVkFURSBXVEZUaHJlYWREYXRhKCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIH5XVEZUaHJl
YWREYXRhKCk7Ci0KLSAgICBBdG9taWNTdHJpbmdUYWJsZSogYXRvbWljU3RyaW5nVGFibGUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEF0b21pY1N0cmluZ1RhYmxlOwotICAgIH0K
LQotICAgIEF0b21pY1N0cmluZ1RhYmxlKiBzZXRDdXJyZW50QXRvbWljU3RyaW5nVGFibGUoQXRv
bWljU3RyaW5nVGFibGUqIGF0b21pY1N0cmluZ1RhYmxlKQotICAgIHsKLSAgICAgICAgQXRvbWlj
U3RyaW5nVGFibGUqIG9sZEF0b21pY1N0cmluZ1RhYmxlID0gbV9jdXJyZW50QXRvbWljU3RyaW5n
VGFibGU7Ci0gICAgICAgIG1fY3VycmVudEF0b21pY1N0cmluZ1RhYmxlID0gYXRvbWljU3RyaW5n
VGFibGU7Ci0gICAgICAgIHJldHVybiBvbGRBdG9taWNTdHJpbmdUYWJsZTsKLSAgICB9Ci0KLSAg
ICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2soKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3Rh
Y2tCb3VuZHM7Ci0gICAgfQotCi0jaWYgRU5BQkxFKFNUQUNLX1NUQVRTKQotICAgIFN0YWNrU3Rh
dHM6OlBlclRocmVhZFN0YXRzJiBzdGFja1N0YXRzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X3N0YWNrU3RhdHM7Ci0gICAgfQotI2VuZGlmCi0KLSAgICB2b2lkKiBzYXZlZFN0YWNrUG9pbnRl
ckF0Vk1FbnRyeSgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zYXZlZFN0YWNrUG9pbnRlckF0
Vk1FbnRyeTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFNhdmVkU3RhY2tQb2ludGVyQXRWTUVudHJ5
KHZvaWQqIHN0YWNrUG9pbnRlckF0Vk1FbnRyeSkKLSAgICB7Ci0gICAgICAgIG1fc2F2ZWRTdGFj
a1BvaW50ZXJBdFZNRW50cnkgPSBzdGFja1BvaW50ZXJBdFZNRW50cnk7Ci0gICAgfQotCi0gICAg
dm9pZCogc2F2ZWRMYXN0U3RhY2tUb3AoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2F2ZWRM
YXN0U3RhY2tUb3A7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTYXZlZExhc3RTdGFja1RvcCh2b2lk
KiBsYXN0U3RhY2tUb3ApCi0gICAgewotICAgICAgICBtX3NhdmVkTGFzdFN0YWNrVG9wID0gbGFz
dFN0YWNrVG9wOwotICAgIH0KLQotICAgIHZvaWQqIG1fYXBpRGF0YSB7IG51bGxwdHIgfTsKLQot
cHJpdmF0ZToKLSAgICBBdG9taWNTdHJpbmdUYWJsZSogbV9jdXJyZW50QXRvbWljU3RyaW5nVGFi
bGUgeyBudWxscHRyIH07Ci0gICAgQXRvbWljU3RyaW5nVGFibGUqIG1fZGVmYXVsdEF0b21pY1N0
cmluZ1RhYmxlIHsgbnVsbHB0ciB9OwotICAgIEF0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvciBt
X2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvciB7IG51bGxwdHIgfTsKLQotICAgIFN0YWNrQm91
bmRzIG1fc3RhY2tCb3VuZHM7Ci0jaWYgRU5BQkxFKFNUQUNLX1NUQVRTKQotICAgIFN0YWNrU3Rh
dHM6OlBlclRocmVhZFN0YXRzIG1fc3RhY2tTdGF0czsKLSNlbmRpZgotICAgIHZvaWQqIG1fc2F2
ZWRTdGFja1BvaW50ZXJBdFZNRW50cnkgeyBudWxscHRyIH07Ci0gICAgdm9pZCogbV9zYXZlZExh
c3RTdGFja1RvcDsKLQotI2lmIEhBVkUoRkFTVF9UTFMpCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBXVEZUaHJlYWREYXRhJiBjcmVhdGVBbmRSZWdpc3RlckZvckdldHNwZWNpZmljRGly
ZWN0KCk7Ci0jZWxzZQotICAgIHN0YXRpYyBXVEZfRVhQT1JUREFUQSBUaHJlYWRTcGVjaWZpYzxX
VEZUaHJlYWREYXRhPiogc3RhdGljRGF0YTsKLSNlbmRpZgotCi0gICAgZnJpZW5kIFdURlRocmVh
ZERhdGEmIHd0ZlRocmVhZERhdGEoKTsKLSAgICBmcmllbmQgY2xhc3MgQXRvbWljU3RyaW5nVGFi
bGU7Ci19OwotCi1pbmxpbmUgV1RGVGhyZWFkRGF0YSYgd3RmVGhyZWFkRGF0YSgpCi17Ci0gICAg
Ly8gV1JUIFdlYkNvcmU6Ci0gICAgLy8gICAgV1RGVGhyZWFkRGF0YSBpcyB1c2VkIG9uIG1haW4g
dGhyZWFkIGJlZm9yZSBpdCBjb3VsZCBwb3NzaWJseSBiZSB1c2VkCi0gICAgLy8gICAgb24gc2Vj
b25kYXJ5IG9uZXMsIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHN5bmNocm9uaXphdGlvbiBoZXJl
LgotICAgIC8vIFdSVCBKYXZhU2NyaXB0Q29yZToKLSAgICAvLyAgICB3dGZUaHJlYWREYXRhKCkg
aXMgaW5pdGlhbGx5IGNhbGxlZCBmcm9tIGluaXRpYWxpemVUaHJlYWRpbmcoKSwgZW5zdXJpbmcK
LSAgICAvLyAgICB0aGlzIGlzIGluaXRpYWxseSBjYWxsZWQgaW4gYSBwdGhyZWFkX29uY2UgbG9j
a2VkIGNvbnRleHQuCi0jaWYgIUhBVkUoRkFTVF9UTFMpCi0gICAgaWYgKCFXVEZUaHJlYWREYXRh
OjpzdGF0aWNEYXRhKQotICAgICAgICBXVEZUaHJlYWREYXRhOjpzdGF0aWNEYXRhID0gbmV3IFRo
cmVhZFNwZWNpZmljPFdURlRocmVhZERhdGE+OwotICAgIHJldHVybiAqKldURlRocmVhZERhdGE6
OnN0YXRpY0RhdGE7Ci0jZWxzZQotICAgIGlmIChXVEZUaHJlYWREYXRhKiBkYXRhID0gc3RhdGlj
X2Nhc3Q8V1RGVGhyZWFkRGF0YSo+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVjdChXVEZfVEhS
RUFEX0RBVEFfS0VZKSkpCi0gICAgICAgIHJldHVybiAqZGF0YTsKLSAgICByZXR1cm4gV1RGVGhy
ZWFkRGF0YTo6Y3JlYXRlQW5kUmVnaXN0ZXJGb3JHZXRzcGVjaWZpY0RpcmVjdCgpOwotI2VuZGlm
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OldURlRocmVhZERhdGE7Ci11
c2luZyBXVEY6Ond0ZlRocmVhZERhdGE7Ci11c2luZyBXVEY6OkF0b21pY1N0cmluZ1RhYmxlOwot
Ci0jZW5kaWYgLy8gV1RGVGhyZWFkRGF0YV9oCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci93dGYvV2FsbFRpbWUuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL1dhbGxUaW1lLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYy
MmFiM2M2YzIzZGZlMGIzY2RhZmIyYmQ3YjZjMjRlOTllM2U3ZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvV2FsbFRpbWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV2FsbFRpbWUuaCIKLQotI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCi0j
aW5jbHVkZSAiTW9ub3RvbmljVGltZS5oIgotI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCi0jaW5j
bHVkZSAiVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotCi1X
YWxsVGltZSBXYWxsVGltZTo6bm93KCkKLXsKLSAgICByZXR1cm4gZnJvbVJhd1NlY29uZHMoY3Vy
cmVudFRpbWUoKSk7Ci19Ci0KLU1vbm90b25pY1RpbWUgV2FsbFRpbWU6OmFwcHJveGltYXRlTW9u
b3RvbmljVGltZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICp0aGlzIC0gbm93KCkgKyBNb25vdG9u
aWNUaW1lOjpub3coKTsKLX0KLQotdm9pZCBXYWxsVGltZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAotewotICAgIG91dC5wcmludCgiV2FsbCgiLCBtX3ZhbHVlLCAiIHNlYykiKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL1dhbGxUaW1lLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvV2FsbFRpbWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU4OWZjZjg2
ZjI2YWE3YTE0ZTJhNGRmMzMyZjMzMWNkNTg1Y2JlMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
V2FsbFRpbWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgV1RGX1dhbGxUaW1lX2gK
LSNkZWZpbmUgV1RGX1dhbGxUaW1lX2gKLQotI2luY2x1ZGUgPHd0Zi9DbG9ja1R5cGUuaD4KLSNp
bmNsdWRlIDx3dGYvU2Vjb25kcy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgTW9ub3Rv
bmljVGltZTsKLWNsYXNzIFByaW50U3RyZWFtOwotCi0vLyBUaGUgY3VycmVudCB0aW1lIGFjY29y
ZGluZyB0byBhIHdhbGwgY2xvY2sgKGFrYSByZWFsIHRpbWUgY2xvY2spLiBUaGlzIHVzZXMgZmxv
YXRpbmcgcG9pbnQKLS8vIGludGVybmFsbHkgc28gdGhhdCB5b3UgY2FuIHJlYXNvbiBhYm91dCBp
bmZpbml0eSBhbmQgb3RoZXIgdGhpbmdzIHRoYXQgYXJpc2UgaW4gbWF0aC4gSXQncwotLy8gYWNj
ZXB0YWJsZSB0byB1c2UgdGhpcyB0byB3cmFwIE5hTiB0aW1lcywgbmVnYXRpdmUgdGltZXMsIGFu
ZCBpbmZpbml0ZSB0aW1lcywgc28gbG9uZyBhcyB0aGV5Ci0vLyBhcmUgcmVsYXRpdmUgdG8gdGhl
IHNhbWUgY2xvY2suIFNwZWNpZmljYWxseSwgV2FsbFRpbWUgc2hvdWxkIGJlIHVzZWQgaW4gYWdy
ZWVtZW50IHdpdGggdGhlCi0vLyBwcmluY2lwbGUgdGhhdCBXYWxsVGltZTo6bm93KCkuc2Vjb25k
c1NpbmNlRXBvY2goKS52YWx1ZSgpIGlzIHRoZSBzYW1lIGFzIFdURjo6Y3VycmVudFRpbWUoKS4K
LWNsYXNzIFdhbGxUaW1lIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgQ2xvY2tUeXBlIGNs
b2NrVHlwZSA9IENsb2NrVHlwZTo6V2FsbDsKLSAgICAKLSAgICAvLyBUaGlzIGlzIHRoZSBlcG9j
aC4gU28sIHguc2Vjb25kc1NpbmNlRXBvY2goKSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgeCAtIFdh
bGxUaW1lKCkuCi0gICAgV2FsbFRpbWUoKSB7IH0KLSAgICAKLSAgICAvLyBDYWxsIHRoaXMgaWYg
eW91IGtub3cgZm9yIHN1cmUgdGhhdCB0aGUgZG91YmxlIHJlcHJlc2VudHMgdGltZSBhY2NvcmRp
bmcgdG8KLSAgICAvLyBXVEY6OmN1cnJlbnRUaW1lKCkuIEl0IG11c3QgYmUgaW4gc2Vjb25kcyBh
bmQgaXQgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIHRpbWUgc291cmNlLgotICAgIHN0YXRpYyBXYWxs
VGltZSBmcm9tUmF3U2Vjb25kcyhkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBXYWxsVGlt
ZSByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2Fs
bFRpbWUgbm93KCk7Ci0gICAgCi0gICAgc3RhdGljIFdhbGxUaW1lIGluZmluaXR5KCkgeyByZXR1
cm4gZnJvbVJhd1NlY29uZHMoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgp
KTsgfQotICAgIAotICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdCB7IHJldHVy
biBTZWNvbmRzKG1fdmFsdWUpOyB9Ci0gICAgCi0gICAgV2FsbFRpbWUgYXBwcm94aW1hdGVXYWxs
VGltZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIE1v
bm90b25pY1RpbWUgYXBwcm94aW1hdGVNb25vdG9uaWNUaW1lKCkgY29uc3Q7Ci0gICAgCi0gICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQotICAg
IAotICAgIFdhbGxUaW1lIG9wZXJhdG9yKyhTZWNvbmRzIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZyb21SYXdTZWNvbmRzKG1fdmFsdWUgKyBvdGhlci52YWx1ZSgpKTsKLSAg
ICB9Ci0gICAgCi0gICAgV2FsbFRpbWUgb3BlcmF0b3ItKFNlY29uZHMgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gZnJvbVJhd1NlY29uZHMobV92YWx1ZSAtIG90aGVyLnZhbHVl
KCkpOwotICAgIH0KLSAgICAKLSAgICAvLyBUaW1lIGlzIGEgc2NhbGFyIGFuZCBzY2FsYXJzIGNh
biBiZSBuZWdhdGVkIGFzIHRoaXMgY291bGQgYXJpc2UgZnJvbSBhbGdlYnJhaWMKLSAgICAvLyB0
cmFuc2Zvcm1hdGlvbnMuIFNvLCB3ZSBhbGxvdyBpdC4KLSAgICBXYWxsVGltZSBvcGVyYXRvci0o
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZyb21SYXdTZWNvbmRzKC1tX3ZhbHVlKTsK
LSAgICB9Ci0gICAgCi0gICAgV2FsbFRpbWUmIG9wZXJhdG9yKz0oU2Vjb25kcyBvdGhlcikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgb3RoZXI7Ci0gICAgfQotICAgIAot
ICAgIFdhbGxUaW1lJiBvcGVyYXRvci09KFNlY29uZHMgb3RoZXIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gKnRoaXMgPSAqdGhpcyAtIG90aGVyOwotICAgIH0KLSAgICAKLSAgICBTZWNvbmRzIG9w
ZXJhdG9yLShXYWxsVGltZSBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBTZWNv
bmRzKG1fdmFsdWUgLSBvdGhlci5tX3ZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVy
YXRvcj09KFdhbGxUaW1lIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFs
dWUgPT0gb3RoZXIubV92YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvciE9KFdh
bGxUaW1lIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUgIT0gb3Ro
ZXIubV92YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcjwoV2FsbFRpbWUgb3Ro
ZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZSA8IG90aGVyLm1fdmFsdWU7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I+KFdhbGxUaW1lIG90aGVyKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUgPiBvdGhlci5tX3ZhbHVlOwotICAgIH0KLSAg
ICAKLSAgICBib29sIG9wZXJhdG9yPD0oV2FsbFRpbWUgb3RoZXIpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV92YWx1ZSA8PSBvdGhlci5tX3ZhbHVlOwotICAgIH0KLSAgICAKLSAgICBi
b29sIG9wZXJhdG9yPj0oV2FsbFRpbWUgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV92YWx1ZSA+PSBvdGhlci5tX3ZhbHVlOwotICAgIH0KLSAgICAKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgot
ICAgIGRvdWJsZSBtX3ZhbHVlIHsgMCB9OwotfTsKLQotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2xlZXAoV2FsbFRpbWUpOwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotbmFtZXNwYWNlIHN0ZCB7
Ci0KLWlubGluZSBib29sIGlzbmFuKFdURjo6V2FsbFRpbWUgdGltZSkKLXsKLSAgICByZXR1cm4g
c3RkOjppc25hbih0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7Ci19Ci0KLWlubGlu
ZSBib29sIGlzaW5mKFdURjo6V2FsbFRpbWUgdGltZSkKLXsKLSAgICByZXR1cm4gc3RkOjppc2lu
Zih0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7Ci19Ci0KLWlubGluZSBib29sIGlz
ZmluaXRlKFdURjo6V2FsbFRpbWUgdGltZSkKLXsKLSAgICByZXR1cm4gc3RkOjppc2Zpbml0ZSh0
aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIHN0
ZAotCi11c2luZyBXVEY6OldhbGxUaW1lOwotCi0jZW5kaWYgLy8gV1RGX1dhbGxUaW1lX2gKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9XZWFrUmFuZG9tLmgg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvV2Vha1JhbmRvbS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDU5ZTQ0YzA2ZTFlYjA1ZjI4ODRhNmRlYjI4MTIyOTA4
ZDUxMjY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9XZWFrUmFuZG9tLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqCi0gKiBWaWduYSwgU2ViYXN0aWFubyAoMjAxNCkuICJGdXJ0aGVyIHNjcmFt
YmxpbmdzIG9mIE1hcnNhZ2xpYSdzIHhvcnNoaWZ0Ci0gKiBnZW5lcmF0b3JzIi4gYXJYaXY6MTQw
NC4wMzkwIChodHRwOi8vYXJ4aXYub3JnL2Ficy8xNDA0LjAzOTApCi0gKgotICogU2VlIGFsc28g
aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWG9yc2hpZnQuCi0gKi8KLQotI2lmbmRlZiBX
ZWFrUmFuZG9tX2gKLSNkZWZpbmUgV2Vha1JhbmRvbV9oCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4K
LSNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KLSNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0vLyBUaGUgY29kZSB1
c2VkIHRvIGdlbmVyYXRlIHJhbmRvbSBudW1iZXJzIGFyZSBpbmxpbmVkIG1hbnVhbGx5IGluIEpJ
VCBjb2RlLgotLy8gU28gaXQgbmVlZHMgdG8gc3RheSBpbiBzeW5jIHdpdGggdGhlIEpJVCBvbmUu
Ci1jbGFzcyBXZWFrUmFuZG9tIHsKLXB1YmxpYzoKLSAgICBXZWFrUmFuZG9tKHVuc2lnbmVkIHNl
ZWQgPSBjcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlcigpKQotICAgIHsKLSAgICAgICAgc2V0
U2VlZChzZWVkKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFNlZWQodW5zaWduZWQgc2VlZCkKLSAg
ICB7Ci0gICAgICAgIG1fc2VlZCA9IHNlZWQ7Ci0KLSAgICAgICAgLy8gQSB6ZXJvIHNlZWQgd291
bGQgY2F1c2UgYW4gaW5maW5pdGUgc2VyaWVzIG9mIHplcm9lcy4KLSAgICAgICAgaWYgKCFzZWVk
KQotICAgICAgICAgICAgc2VlZCA9IDE7Ci0KLSAgICAgICAgbV9sb3cgPSBzZWVkOwotICAgICAg
ICBtX2hpZ2ggPSBzZWVkOwotICAgICAgICBhZHZhbmNlKCk7Ci0gICAgfQotCi0gICAgdW5zaWdu
ZWQgc2VlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VlZDsgfQotCi0gICAgZG91YmxlIGdldCgpCi0g
ICAgewotICAgICAgICB1aW50NjRfdCB2YWx1ZSA9IGFkdmFuY2UoKSAmICgoMVVMTCA8PCA1Mykg
LSAxKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlICogKDEuMCAvICgxVUxMIDw8IDUzKSk7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgZ2V0VWludDMyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYWR2YW5jZSgpKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBnZXRV
aW50MzIodW5zaWduZWQgbGltaXQpCi0gICAgewotICAgICAgICBpZiAobGltaXQgPD0gMSkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB1aW50NjRfdCBjdXRvZmYgPSAoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkgKyAxKSAv
IGxpbWl0ICogbGltaXQ7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHVpbnQ2NF90
IHZhbHVlID0gZ2V0VWludDMyKCk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgPj0gY3V0b2ZmKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmV0dXJuIHZhbHVlICUgbGlt
aXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgbG93T2Zmc2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYWtSYW5kb20sIG1fbG93KTsgfQotICAgIHN0YXRp
YyB1bnNpZ25lZCBoaWdoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYWtSYW5k
b20sIG1faGlnaCk7IH0KLQotcHJpdmF0ZToKLSAgICB1aW50NjRfdCBhZHZhbmNlKCkKLSAgICB7
Ci0gICAgICAgIHVpbnQ2NF90IHggPSBtX2xvdzsKLSAgICAgICAgdWludDY0X3QgeSA9IG1faGln
aDsKLSAgICAgICAgbV9sb3cgPSB5OwotICAgICAgICB4IF49IHggPDwgMjM7Ci0gICAgICAgIHgg
Xj0geCA+PiAxNzsKLSAgICAgICAgeCBePSB5IF4gKHkgPj4gMjYpOwotICAgICAgICBtX2hpZ2gg
PSB4OwotICAgICAgICByZXR1cm4geCArIHk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbV9zZWVk
OwotICAgIHVpbnQ2NF90IG1fbG93OwotICAgIHVpbnQ2NF90IG1faGlnaDsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OldlYWtSYW5kb207Ci0KLSNlbmRpZiAvLyBXZWFr
UmFuZG9tX2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9X
b3JkTG9jay5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvV29yZExvY2su
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZThmYjliZmYwNWY2ZTZiZWFmODkw
YjZkZDE5ZDFjMjlhMDg0NWYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Xb3JkTG9jay5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJXb3JkTG9jay5oIgotCi0jaW5jbHVkZSAiVGhyZWFkU3BlY2lmaWMuaCIKLSNpbmNsdWRlICJU
aHJlYWRpbmcuaCIKLSNpbmNsdWRlICJUaHJlYWRpbmdQcmltaXRpdmVzLmgiCi0jaW5jbHVkZSA8
Y29uZGl0aW9uX3ZhcmlhYmxlPgotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHRocmVhZD4K
LQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFRoaXMgZGF0YSBzdHJ1Y3R1
cmUgc2VydmVzIHRocmVlIHB1cnBvc2VzOgotLy8KLS8vIDEpIEEgcGFya2luZyBtZWNoYW5pc20g
Zm9yIHRocmVhZHMgdGhhdCBnbyB0byBzbGVlcC4gVGhhdCBpbnZvbHZlcyBqdXN0IGEgc3lzdGVt
IG11dGV4IGFuZAotLy8gICAgY29uZGl0aW9uIHZhcmlhYmxlLgotLy8KLS8vIDIpIEEgcXVldWUg
bm9kZSBmb3Igd2hlbiBhIHRocmVhZCBpcyBvbiBzb21lIFdvcmRMb2NrJ3MgcXVldWUuCi0vLwot
Ly8gMykgVGhlIHF1ZXVlIGhlYWQuIFRoaXMgaXMga2luZCBvZiBmdW5reS4gV2hlbiBhIHRocmVh
ZCBpcyB0aGUgaGVhZCBvZiBhIHF1ZXVlLCBpdCBhbHNvIHNlcnZlcyBhcwotLy8gICAgdGhlIGJh
c2ljIHF1ZXVlIGJvb2trZWVwaW5nIGRhdGEgc3RydWN0dXJlLiBXaGVuIGEgdGhyZWFkIGlzIGRl
cXVldWVkLCB0aGUgbmV4dCB0aHJlYWQgaW4gdGhlCi0vLyAgICBxdWV1ZSB0YWtlcyBvbiB0aGUg
cXVldWUgaGVhZCBkdXRpZXMuCi1zdHJ1Y3QgVGhyZWFkRGF0YSB7Ci0gICAgLy8gVGhlIHBhcmtp
bmcgbWVjaGFuaXNtLgotICAgIGJvb2wgc2hvdWxkUGFyayB7IGZhbHNlIH07Ci0gICAgc3RkOjpt
dXRleCBwYXJraW5nTG9jazsKLSAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBwYXJraW5nQ29u
ZGl0aW9uOwotCi0gICAgLy8gVGhlIHF1ZXVlIG5vZGUuCi0gICAgVGhyZWFkRGF0YSogbmV4dElu
UXVldWUgeyBudWxscHRyIH07Ci0KLSAgICAvLyBUaGUgcXVldWUgaXRzZWxmLgotICAgIFRocmVh
ZERhdGEqIHF1ZXVlVGFpbCB7IG51bGxwdHIgfTsKLX07Ci0KLVRocmVhZFNwZWNpZmljPFRocmVh
ZERhdGEsIENhbkJlR0NUaHJlYWQ6OlRydWU+KiB0aHJlYWREYXRhOwotCi1UaHJlYWREYXRhKiBt
eVRocmVhZERhdGEoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25j
ZTsKLSAgICBzdGQ6OmNhbGxfb25jZSgKLSAgICAgICAgaW5pdGlhbGl6ZU9uY2UsCi0gICAgICAg
IFtdIHsKLSAgICAgICAgICAgIHRocmVhZERhdGEgPSBuZXcgVGhyZWFkU3BlY2lmaWM8VGhyZWFk
RGF0YSwgQ2FuQmVHQ1RocmVhZDo6VHJ1ZT4oKTsKLSAgICAgICAgfSk7Ci0KLSAgICByZXR1cm4g
KnRocmVhZERhdGE7Ci19Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1ORVZFUl9JTkxJ
TkUgdm9pZCBXb3JkTG9ja0Jhc2U6OmxvY2tTbG93KCkKLXsKLSAgICB1bnNpZ25lZCBzcGluQ291
bnQgPSAwOwotCi0gICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGlt
YWwgYmFzZWQgb24gcGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KLSAgICBjb25zdCB1bnNpZ25l
ZCBzcGluTGltaXQgPSA0MDsKLSAgICAKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVpbnRwdHJf
dCBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICghKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCkpIHsKLSAgICAgICAgICAgIC8vIEl0
J3Mgbm90IHBvc3NpYmxlIGZvciBzb21lb25lIHRvIGhvbGQgdGhlIHF1ZXVlIGxvY2sgd2hpbGUg
dGhlIGxvY2sgaXRzZWxmIGlzIG5vIGxvbmdlcgotICAgICAgICAgICAgLy8gaGVsZCwgc2luY2Ug
d2Ugd2lsbCBvbmx5IGF0dGVtcHQgdG8gYWNxdWlyZSB0aGUgcXVldWUgbG9jayB3aGVuIHRoZSBs
b2NrIGlzIGhlbGQgYW5kCi0gICAgICAgICAgICAvLyB0aGUgcXVldWUgbG9jayBwcmV2ZW50cyB1
bmxvY2suCi0gICAgICAgICAgICBBU1NFUlQoIShjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxv
Y2tlZEJpdCkpOwotICAgICAgICAgICAgaWYgKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1
cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRXb3JkVmFsdWUgfCBpc0xvY2tlZEJpdCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBTdWNjZXNzISBXZSBhY3F1aXJlZCB0aGUgbG9jay4KLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0
aGVyZSBpcyBubyBxdWV1ZSBhbmQgd2UgaGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4ganVz
dCB0cnkgdG8gc3BpbiBhcm91bmQgYWdhaW4uCi0gICAgICAgIGlmICghKGN1cnJlbnRXb3JkVmFs
dWUgJiB+cXVldWVIZWFkTWFzaykgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7Ci0gICAgICAg
ICAgICBzcGluQ291bnQrKzsKLSAgICAgICAgICAgIFRocmVhZDo6eWllbGQoKTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTmVlZCB0byBwdXQgb3Vyc2Vs
dmVzIG9uIHRoZSBxdWV1ZS4gQ3JlYXRlIHRoZSBxdWV1ZSBpZiBvbmUgZG9lcyBub3QgZXhpc3Qu
IFRoaXMgcmVxdXJpZXMKLSAgICAgICAgLy8gb3duaW5nIHRoZSBxdWV1ZSBmb3IgYSBsaXR0bGUg
Yml0LiBUaGUgbG9jayB0aGF0IGNvbnRyb2xzIHRoZSBxdWV1ZSBpcyBpdHNlbGYgYSBzcGlubG9j
ay4KLSAgICAgICAgLy8gQnV0IGJlZm9yZSB3ZSBhY3F1aXJlIHRoZSBxdWV1ZSBzcGlubG9jaywg
d2UgbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIFRocmVhZERhdGEgZm9yIHRoaXMKLSAgICAgICAg
Ly8gdGhyZWFkLgotICAgICAgICBUaHJlYWREYXRhKiBtZSA9IG15VGhyZWFkRGF0YSgpOwotICAg
ICAgICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKLSAgICAgICAgQVNTRVJUKCFtZS0+bmV4dElu
UXVldWUpOwotICAgICAgICBBU1NFUlQoIW1lLT5xdWV1ZVRhaWwpOwotCi0gICAgICAgIC8vIFJl
bG9hZCB0aGUgY3VycmVudCB3b3JkIHZhbHVlLCBzaW5jZSBzb21lIHRpbWUgbWF5IGhhdmUgcGFz
c2VkLgotICAgICAgICBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKLQotICAgICAg
ICAvLyBXZSBwcm9jZWVkIG9ubHkgaWYgdGhlIHF1ZXVlIGxvY2sgaXMgbm90IGhlbGQsIHRoZSBX
b3JkTG9jayBpcyBoZWxkLCBhbmQgd2Ugc3VjY2VlZCBpbgotICAgICAgICAvLyBhY3F1aXJpbmcg
dGhlIHF1ZXVlIGxvY2suCi0gICAgICAgIGlmICgoY3VycmVudFdvcmRWYWx1ZSAmIGlzUXVldWVM
b2NrZWRCaXQpCi0gICAgICAgICAgICB8fCAhKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJp
dCkKLSAgICAgICAgICAgIHx8ICFtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50V29y
ZFZhbHVlLCBjdXJyZW50V29yZFZhbHVlIHwgaXNRdWV1ZUxvY2tlZEJpdCkpIHsKLSAgICAgICAg
ICAgIFRocmVhZDo6eWllbGQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBtZS0+c2hvdWxkUGFyayA9IHRydWU7Ci0KLSAgICAgICAgLy8gV2Ug
b3duIHRoZSBxdWV1ZS4gTm9ib2R5IGNhbiBlbnF1ZXVlIG9yIGRlcXVldWUgdW50aWwgd2UncmUg
ZG9uZS4gQWxzbywgaXQncyBub3QgcG9zc2libGUKLSAgICAgICAgLy8gdG8gcmVsZWFzZSB0aGUg
V29yZExvY2sgd2hpbGUgd2UgaG9sZCB0aGUgcXVldWUgbG9jay4KLSAgICAgICAgVGhyZWFkRGF0
YSogcXVldWVIZWFkID0gYml0d2lzZV9jYXN0PFRocmVhZERhdGEqPihjdXJyZW50V29yZFZhbHVl
ICYgfnF1ZXVlSGVhZE1hc2spOwotICAgICAgICBpZiAocXVldWVIZWFkKSB7Ci0gICAgICAgICAg
ICAvLyBQdXQgdGhpcyB0aHJlYWQgYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUuCi0gICAgICAgICAg
ICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbC0+bmV4dEluUXVldWUgPSBtZTsKLSAgICAgICAgICAgIHF1
ZXVlSGVhZC0+cXVldWVUYWlsID0gbWU7Ci0KLSAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIHF1
ZXVlIGxvY2suCi0gICAgICAgICAgICBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsK
LSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgfnF1ZXVlSGVhZE1hc2spOwot
ICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc1F1ZXVlTG9ja2VkQml0KTsK
LSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpOwotICAg
ICAgICAgICAgbV93b3JkLnN0b3JlKGN1cnJlbnRXb3JkVmFsdWUgJiB+aXNRdWV1ZUxvY2tlZEJp
dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBNYWtlIHRoaXMgdGhyZWFkIGJl
IHRoZSBxdWV1ZS1oZWFkLgotICAgICAgICAgICAgcXVldWVIZWFkID0gbWU7Ci0gICAgICAgICAg
ICBtZS0+cXVldWVUYWlsID0gbWU7Ci0KLSAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIHF1ZXVl
IGxvY2sgYW5kIGluc3RhbGwgb3Vyc2VsdmVzIGFzIHRoZSBoZWFkLiBObyBuZWVkIGZvciBhIENB
UyBsb29wLCBzaW5jZQotICAgICAgICAgICAgLy8gd2Ugb3duIHRoZSBxdWV1ZSBsb2NrLgotICAg
ICAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Ci0gICAgICAgICAgICBB
U1NFUlQofihjdXJyZW50V29yZFZhbHVlICYgfnF1ZXVlSGVhZE1hc2spKTsKLSAgICAgICAgICAg
IEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7Ci0gICAgICAgICAg
ICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KTsKLSAgICAgICAgICAgIHVp
bnRwdHJfdCBuZXdXb3JkVmFsdWUgPSBjdXJyZW50V29yZFZhbHVlOwotICAgICAgICAgICAgbmV3
V29yZFZhbHVlIHw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHF1ZXVlSGVhZCk7Ci0gICAgICAg
ICAgICBuZXdXb3JkVmFsdWUgJj0gfmlzUXVldWVMb2NrZWRCaXQ7Ci0gICAgICAgICAgICBtX3dv
cmQuc3RvcmUobmV3V29yZFZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEF0IHRoaXMg
cG9pbnQgZXZlcnlvbmUgd2hvIGFjcXVpcmVzIHRoZSBxdWV1ZSBsb2NrIHdpbGwgc2VlIG1lIG9u
IHRoZSBxdWV1ZSwgYW5kIGFueW9uZSB3aG8KLSAgICAgICAgLy8gYWNxdWlyZXMgbWUncyBsb2Nr
IHdpbGwgc2VlIHRoYXQgbWUgd2FudHMgdG8gcGFyay4gTm90ZSB0aGF0IHNob3VsZFBhcmsgbWF5
IGhhdmUgYmVlbgotICAgICAgICAvLyBjbGVhcmVkIGFzIHNvb24gYXMgdGhlIHF1ZXVlIGxvY2sg
d2FzIHJlbGVhc2VkIGFib3ZlLCBidXQgaXQgd2lsbCBoYXBwZW4gd2hpbGUgdGhlCi0gICAgICAg
IC8vIHJlbGVhc2luZyB0aHJlYWQgaG9sZHMgbWUncyBwYXJraW5nTG9jay4KLQotICAgICAgICB7
Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtZS0+cGFy
a2luZ0xvY2spOwotICAgICAgICAgICAgd2hpbGUgKG1lLT5zaG91bGRQYXJrKQotICAgICAgICAg
ICAgICAgIG1lLT5wYXJraW5nQ29uZGl0aW9uLndhaXQobG9ja2VyKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEFTU0VSVCghbWUtPnNob3VsZFBhcmspOwotICAgICAgICBBU1NFUlQoIW1lLT5uZXh0
SW5RdWV1ZSk7Ci0gICAgICAgIEFTU0VSVCghbWUtPnF1ZXVlVGFpbCk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBOb3cgd2UgY2FuIGxvb3AgYXJvdW5kIGFuZCB0cnkgdG8gYWNxdWlyZSB0aGUgbG9j
ayBhZ2Fpbi4KLSAgICB9Ci19Ci0KLU5FVkVSX0lOTElORSB2b2lkIFdvcmRMb2NrQmFzZTo6dW5s
b2NrU2xvdygpCi17Ci0gICAgLy8gVGhlIGZhc3QgcGF0aCBjYW4gZmFpbCBlaXRoZXIgYmVjYXVz
ZSBvZiBzcHVyaW91cyB3ZWFrIENBUyBmYWlsdXJlLCBvciBiZWNhdXNlIHNvbWVvbmUgcHV0IGEK
LSAgICAvLyB0aHJlYWQgb24gdGhlIHF1ZXVlLCBvciB0aGUgcXVldWUgbG9jayBpcyBoZWxkLiBJ
ZiB0aGUgcXVldWUgbG9jayBpcyBoZWxkLCBpdCBjYW4gb25seSBiZQotICAgIC8vIGJlY2F1c2Ug
c29tZW9uZSAqd2lsbCogZW5xdWV1ZSBhIHRocmVhZCBvbnRvIHRoZSBxdWV1ZS4KLQotICAgIC8v
IEFjcXVpcmUgdGhlIHF1ZXVlIGxvY2ssIG9yIHJlbGVhc2UgdGhlIGxvY2suIFRoaXMgbG9vcCBo
YW5kbGVzIGJvdGggbG9jayByZWxlYXNlIGluIGNhc2UgdGhlCi0gICAgLy8gZmFzdCBwYXRoJ3Mg
d2VhayBDQVMgc3B1cmlvdXNseSBmYWlsZWQgYW5kIGl0IGhhbmRsZXMgcXVldWUgbG9jayBhY3F1
aXNpdGlvbiBpZiB0aGVyZSBpcwotICAgIC8vIGFjdHVhbGx5IHNvbWV0aGluZyBpbnRlcmVzdGlu
ZyBvbiB0aGUgcXVldWUuCi0gICAgZm9yICg7OykgewotICAgICAgICB1aW50cHRyX3QgY3VycmVu
dFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Ci0KLSAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3Jk
VmFsdWUgJiBpc0xvY2tlZEJpdCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY3VycmVudFdvcmRW
YWx1ZSA9PSBpc0xvY2tlZEJpdCkgewotICAgICAgICAgICAgaWYgKG1fd29yZC5jb21wYXJlRXhj
aGFuZ2VXZWFrKGlzTG9ja2VkQml0LCAwKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBmYXN0
IHBhdGgncyB3ZWFrIENBUyBoYWQgc3B1cmlvdXNseSBmYWlsZWQsIGFuZCBub3cgd2Ugc3VjY2Vl
ZGVkLiBUaGUgbG9jayBpcwotICAgICAgICAgICAgICAgIC8vIHVubG9ja2VkIGFuZCB3ZSdyZSBk
b25lIQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IC8vIExvb3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICBUaHJlYWQ6OnlpZWxk
KCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKGN1cnJlbnRXb3JkVmFsdWUgJiBpc1F1ZXVlTG9ja2VkQml0KSB7Ci0gICAgICAgICAgICBU
aHJlYWQ6OnlpZWxkKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIElmIGl0IHdhc24ndCBqdXN0IGEgc3B1cmlvdXMgd2VhayBDQVMgZmFpbHVyZSBhbmQg
aWYgdGhlIHF1ZXVlIGxvY2sgaXMgbm90IGhlbGQsIHRoZW4gdGhlcmUKLSAgICAgICAgLy8gbXVz
dCBiZSBhbiBlbnRyeSBvbiB0aGUgcXVldWUuCi0gICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZh
bHVlICYgfnF1ZXVlSGVhZE1hc2spOwotCi0gICAgICAgIGlmIChtX3dvcmQuY29tcGFyZUV4Y2hh
bmdlV2VhayhjdXJyZW50V29yZFZhbHVlLCBjdXJyZW50V29yZFZhbHVlIHwgaXNRdWV1ZUxvY2tl
ZEJpdCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICB1aW50cHRyX3QgY3VycmVu
dFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Ci0gICAgICAgIAotICAgIC8vIEFmdGVyIHdlIGFj
cXVpcmUgdGhlIHF1ZXVlIGxvY2ssIHRoZSBXb3JkTG9jayBtdXN0IHN0aWxsIGJlIGhlbGQgYW5k
IHRoZSBxdWV1ZSBtdXN0IGJlCi0gICAgLy8gbm9uLWVtcHR5LiBUaGUgcXVldWUgbXVzdCBiZSBu
b24tZW1wdHkgc2luY2Ugb25seSB0aGUgbG9ja1Nsb3coKSBtZXRob2QgY291bGQgaGF2ZSBoZWxk
IHRoZQotICAgIC8vIHF1ZXVlIGxvY2sgYW5kIGlmIGl0IGRpZCB0aGVuIGl0IG9ubHkgcmVsZWFz
ZXMgaXQgYWZ0ZXIgcHV0dGluZyBzb21ldGhpbmcgb24gdGhlIHF1ZXVlLgotICAgIEFTU0VSVChj
dXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpOwotICAgIEFTU0VSVChjdXJyZW50V29yZFZh
bHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7Ci0gICAgVGhyZWFkRGF0YSogcXVldWVIZWFkID0gYml0
d2lzZV9jYXN0PFRocmVhZERhdGEqPihjdXJyZW50V29yZFZhbHVlICYgfnF1ZXVlSGVhZE1hc2sp
OwotICAgIEFTU0VSVChxdWV1ZUhlYWQpOwotCi0gICAgVGhyZWFkRGF0YSogbmV3UXVldWVIZWFk
ID0gcXVldWVIZWFkLT5uZXh0SW5RdWV1ZTsKLSAgICAvLyBFaXRoZXIgdGhpcyB3YXMgdGhlIG9u
bHkgdGhyZWFkIG9uIHRoZSBxdWV1ZSwgaW4gd2hpY2ggY2FzZSB3ZSBkZWxldGUgdGhlIHF1ZXVl
LCBvciB0aGVyZQotICAgIC8vIGFyZSBzdGlsbCBtb3JlIHRocmVhZHMgb24gdGhlIHF1ZXVlLCBp
biB3aGljaCBjYXNlIHdlIGNyZWF0ZSBhIG5ldyBxdWV1ZSBoZWFkLgotICAgIGlmIChuZXdRdWV1
ZUhlYWQpCi0gICAgICAgIG5ld1F1ZXVlSGVhZC0+cXVldWVUYWlsID0gcXVldWVIZWFkLT5xdWV1
ZVRhaWw7Ci0KLSAgICAvLyBDaGFuZ2UgdGhlIHF1ZXVlIGhlYWQsIHBvc3NpYmx5IHJlbW92aW5n
IGl0IGlmIG5ld1F1ZXVlSGVhZCBpcyBudWxsLiBObyBuZWVkIGZvciBhIENBUyBsb29wLAotICAg
IC8vIHNpbmNlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2sgYW5kIHRoZSBsb2NrIGl0c2VsZiBzbyBu
b3RoaW5nIGFib3V0IHRoZSBsb2NrIGNhbiBjaGFuZ2UgcmlnaHQKLSAgICAvLyBub3cuCi0gICAg
Y3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Ci0gICAgQVNTRVJUKGN1cnJlbnRXb3Jk
VmFsdWUgJiBpc0xvY2tlZEJpdCk7Ci0gICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc1F1
ZXVlTG9ja2VkQml0KTsKLSAgICBBU1NFUlQoKGN1cnJlbnRXb3JkVmFsdWUgJiB+cXVldWVIZWFk
TWFzaykgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocXVldWVIZWFkKSk7Ci0gICAgdWludHB0
cl90IG5ld1dvcmRWYWx1ZSA9IGN1cnJlbnRXb3JkVmFsdWU7Ci0gICAgbmV3V29yZFZhbHVlICY9
IH5pc0xvY2tlZEJpdDsgLy8gUmVsZWFzZSB0aGUgV29yZExvY2suCi0gICAgbmV3V29yZFZhbHVl
ICY9IH5pc1F1ZXVlTG9ja2VkQml0OyAvLyBSZWxlYXNlIHRoZSBxdWV1ZSBsb2NrLgotICAgIG5l
d1dvcmRWYWx1ZSAmPSBxdWV1ZUhlYWRNYXNrOyAvLyBDbGVhciBvdXQgdGhlIG9sZCBxdWV1ZSBo
ZWFkLgotICAgIG5ld1dvcmRWYWx1ZSB8PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXdRdWV1
ZUhlYWQpOyAvLyBJbnN0YWxsIG5ldyBxdWV1ZSBoZWFkLgotICAgIG1fd29yZC5zdG9yZShuZXdX
b3JkVmFsdWUpOwotCi0gICAgLy8gTm93IHRoZSBsb2NrIGlzIGF2YWlsYWJsZSBmb3IgYWNxdWlz
aXRpb24uIEJ1dCB3ZSBqdXN0IGhhdmUgdG8gd2FrZSB1cCB0aGUgb2xkIHF1ZXVlIGhlYWQuCi0g
ICAgLy8gQWZ0ZXIgdGhhdCwgd2UncmUgZG9uZSEKLQotICAgIHF1ZXVlSGVhZC0+bmV4dEluUXVl
dWUgPSBudWxscHRyOwotICAgIHF1ZXVlSGVhZC0+cXVldWVUYWlsID0gbnVsbHB0cjsKLQotICAg
IC8vIFdlIGRvIHRoaXMgY2FyZWZ1bGx5IGJlY2F1c2UgdGhpcyBtYXkgcnVuIGVpdGhlciBiZWZv
cmUgb3IgZHVyaW5nIHRoZSBwYXJraW5nTG9jayBjcml0aWNhbAotICAgIC8vIHNlY3Rpb24gaW4g
bG9ja1Nsb3coKS4KLSAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrZXIocXVldWVIZWFkLT5wYXJraW5nTG9jayk7Ci0gICAgICAgIHF1ZXVlSGVhZC0+c2hvdWxk
UGFyayA9IGZhbHNlOwotICAgIH0KLSAgICAvLyBEb2Vzbid0IG1hdHRlciBpZiB3ZSBub3RpZnlf
YWxsKCkgb3Igbm90aWZ5X29uZSgpIGhlcmUgc2luY2UgdGhlIG9ubHkgdGhyZWFkIHRoYXQgY291
bGQgYmUKLSAgICAvLyB3YWl0aW5nIGlzIHF1ZXVlSGVhZC4KLSAgICBxdWV1ZUhlYWQtPnBhcmtp
bmdDb25kaXRpb24ubm90aWZ5X29uZSgpOwotCi0gICAgLy8gVGhlIG9sZCBxdWV1ZSBoZWFkIGNh
biBub3cgY29udGVuZCBmb3IgdGhlIGxvY2sgYWdhaW4uIFdlJ3JlIGRvbmUhCi19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdURgotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvV29yZExvY2suaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Xb3Jk
TG9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjE5MWVlMDFkOTQ3ZmUzYzRm
MDhlMzU1ZmRhYThhZDU3MjdhNzNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9Xb3JkTG9jay5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFdURl9Xb3JkTG9ja19oCi0jZGVm
aW5lIFdURl9Xb3JkTG9ja19oCi0KLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1ZGUg
PHd0Zi9Db21waWxlci5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KLSNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewotc3RydWN0IExvY2tJ
bnNwZWN0b3I7Ci19OwotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gQSBXb3JkTG9jayBpcyBhIGZ1
bGx5IGFkYXB0aXZlIG11dGV4IHRoYXQgdXNlcyBzaXplb2Yodm9pZCopIHN0b3JhZ2UuIEl0IGhh
cyBhIGZhc3QgcGF0aCB0aGF0IGlzCi0vLyBzaW1pbGFyIHRvIGEgc3BpbmxvY2ssIGFuZCBhIHNs
b3cgcGF0aCB0aGF0IGlzIHNpbWlsYXIgdG8gc3RkOjptdXRleC4gSW4gbW9zdCBjYXNlcywgeW91
IHNob3VsZCB1c2UKLS8vIExvY2sgaW5zdGVhZC4gV29yZExvY2sgc2l0cyBsb3dlciBpbiB0aGUg
c3RhY2sgYW5kIGlzIHVzZWQgdG8gaW1wbGVtZW50IExvY2ssIHNvIExvY2sgaXMgdGhlIG1haW4K
LS8vIGNsaWVudCBvZiBXb3JkTG9jay4KLQotLy8gTk9URTogVGhpcyBpcyBhbHNvIGEgZ3JlYXQg
bG9jayB0byB1c2UgaWYgeW91IGFyZSB2ZXJ5IGxvdyBpbiB0aGUgc3RhY2suIEZvciBleGFtcGxl
LAotLy8gUHJpbnRTdHJlYW0gdXNlcyB0aGlzIHNvIHRoYXQgUGFya2luZ0xvdCBhbmQgTG9jayBj
YW4gdXNlIFByaW50U3RyZWFtLiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91Ci0vLyB0cnkgdG8gdXNl
IGRhdGFMb2cgdG8gZGVidWcgdGhpcyBjb2RlLCB5b3Ugd2lsbCBoYXZlIGEgYmFkIHRpbWUuCi0K
LXN0cnVjdCBXb3JkTG9ja0Jhc2UgewotICAgIHZvaWQgbG9jaygpCi0gICAgewotICAgICAgICBp
ZiAoTElLRUxZKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzTG9ja2VkQml0LCBzdGQ6
Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpIHsKLSAgICAgICAgICAgIC8vIFdvcmRMb2NrIGFjcXVp
cmVkIQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9ja1Nsb3co
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHVubG9jaygpCi0gICAgewotICAgICAgICBpZiAoTElLRUxZ
KG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzTG9ja2VkQml0LCAwLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxlYXNlKSkpIHsKLSAgICAgICAgICAgIC8vIFdvcmRMb2NrIHJlbGVhc2VkLCBhbmQg
bm9ib2R5IHdhcyB3YWl0aW5nIQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdW5sb2NrU2xvdygpOwotICAgIH0KLQotICAgIGJvb2wgaXNIZWxkKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3dvcmQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJl
KSAmIGlzTG9ja2VkQml0OwotICAgIH0KLQotICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGlzSGVsZCgpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIGZy
aWVuZCBzdHJ1Y3QgVGVzdFdlYktpdEFQSTo6TG9ja0luc3BlY3RvcjsKLSAgICAKLSAgICBzdGF0
aWMgY29uc3QgdWludHB0cl90IGlzTG9ja2VkQml0ID0gMTsKLSAgICBzdGF0aWMgY29uc3QgdWlu
dHB0cl90IGlzUXVldWVMb2NrZWRCaXQgPSAyOwotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3Qg
cXVldWVIZWFkTWFzayA9IDM7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrU2xv
dygpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Nsb3coKTsKLQotICAgIC8v
IE1ldGhvZCB1c2VkIGZvciB0ZXN0aW5nIG9ubHkuCi0gICAgYm9vbCBpc0Z1bGx5UmVzZXQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3dvcmQubG9hZCgpOwotICAgIH0KLQotICAg
IEF0b21pYzx1aW50cHRyX3Q+IG1fd29yZDsKLX07Ci0KLWNsYXNzIFdvcmRMb2NrIDogcHVibGlj
IFdvcmRMb2NrQmFzZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV29yZExvY2spOwotcHVi
bGljOgotICAgIFdvcmRMb2NrKCkKLSAgICB7Ci0gICAgICAgIG1fd29yZC5zdG9yZSgwLCBzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICB9Ci19OwotCi10eXBlZGVmIFdvcmRMb2NrQmFz
ZSBTdGF0aWNXb3JkTG9jazsKLXR5cGVkZWYgTG9ja2VyPFdvcmRMb2NrQmFzZT4gV29yZExvY2tI
b2xkZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OldvcmRMb2NrOwotdXNp
bmcgV1RGOjpXb3JkTG9ja0hvbGRlcjsKLXVzaW5nIFdURjo6U3RhdGljV29yZExvY2s7Ci0KLSNl
bmRpZiAvLyBXVEZfV29yZExvY2tfaAotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvYmVuY2htYXJrcy9Db25kaXRpb25TcGVlZFRlc3QuY3BwIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2JlbmNobWFya3MvQ29uZGl0aW9uU3BlZWRUZXN0
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmExM2NmMDkxMDJiNDI1NWM1MzMx
MGQ1MTk3ZDlhN2NjYThmZmJmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvYmVuY2htYXJrcy9D
b25kaXRpb25TcGVlZFRlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0vLyBPbiBN
YWMsIHlvdSBjYW4gYnVpbGQgdGhpcyBsaWtlIHNvOgotLy8geGNydW4gY2xhbmcrKyAtbyBDb25k
aXRpb25TcGVlZFRlc3QgU291cmNlL1dURi9iZW5jaG1hcmtzL0NvbmRpdGlvblNwZWVkVGVzdC5j
cHAgLU8zIC1XIC1JU291cmNlL1dURiAtSVNvdXJjZS9XVEYvaWN1IC1MV2ViS2l0QnVpbGQvUmVs
ZWFzZSAtbFdURiAtZnJhbWV3b3JrIEZvdW5kYXRpb24gLWxpY3Vjb3JlIC1zdGQ9YysrMTQgLWZ2
aXNpYmlsaXR5PWhpZGRlbgotCi0jaW5jbHVkZSAiVG95TG9ja3MuaCIKLSNpbmNsdWRlIDxjb25k
aXRpb25fdmFyaWFibGU+Ci0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8dGhyZWFkPgotI2lu
Y2x1ZGUgPHR5cGVfdHJhaXRzPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHd0Zi9D
b25kaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYv
RGF0YUxvZy5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nUHJpbWl0aXZlcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IHsKLQotY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KLXVuc2lnbmVkIG51bVByb2R1Y2Vy
czsKLXVuc2lnbmVkIG51bUNvbnN1bWVyczsKLXVuc2lnbmVkIG1heFF1ZXVlU2l6ZTsKLXVuc2ln
bmVkIG51bU1lc3NhZ2VzUGVyUHJvZHVjZXI7Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yLCB0eXBlbmFtZSBDb25kaXRpb25UeXBlLCB0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxDb25kaXRpb25UeXBlLCBzdGQ6OmNvbmRpdGlv
bl92YXJpYWJsZT46OnZhbHVlPjo6dHlwZSogPSBudWxscHRyPgotdm9pZCB3YWl0KENvbmRpdGlv
blR5cGUmIGNvbmRpdGlvbiwgTG9ja1R5cGUmIGxvY2ssIHN0ZDo6dW5pcXVlX2xvY2s8TG9ja1R5
cGU+JiwgY29uc3QgRnVuY3RvciYgcHJlZGljYXRlKQotewotICAgIHdoaWxlICghcHJlZGljYXRl
KCkpCi0gICAgICAgIGNvbmRpdGlvbi53YWl0KGxvY2spOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yLCB0eXBlbmFtZSBDb25kaXRpb25UeXBlLCB0eXBlbmFtZSBMb2NrVHlwZSwgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPENvbmRpdGlvblR5cGUsIHN0ZDo6Y29u
ZGl0aW9uX3ZhcmlhYmxlPjo6dmFsdWU+Ojp0eXBlKiA9IG51bGxwdHI+Ci12b2lkIHdhaXQoQ29u
ZGl0aW9uVHlwZSYgY29uZGl0aW9uLCBMb2NrVHlwZSYsIHN0ZDo6dW5pcXVlX2xvY2s8TG9ja1R5
cGU+JiBsb2NrZXIsIGNvbnN0IEZ1bmN0b3ImIHByZWRpY2F0ZSkKLXsKLSAgICB3aGlsZSAoIXBy
ZWRpY2F0ZSgpKQotICAgICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgQ29uZGl0aW9uVHlwZSwgdHlwZW5hbWUgTm90
aWZ5RnVuY3RvciwgdHlwZW5hbWUgTm90aWZ5QWxsRnVuY3Rvcj4KLXZvaWQgcnVuVGVzdCgKLSAg
ICB1bnNpZ25lZCBudW1Qcm9kdWNlcnMsCi0gICAgdW5zaWduZWQgbnVtQ29uc3VtZXJzLAotICAg
IHVuc2lnbmVkIG1heFF1ZXVlU2l6ZSwKLSAgICB1bnNpZ25lZCBudW1NZXNzYWdlc1BlclByb2R1
Y2VyLAotICAgIGNvbnN0IE5vdGlmeUZ1bmN0b3ImIG5vdGlmeSwKLSAgICBjb25zdCBOb3RpZnlB
bGxGdW5jdG9yJiBub3RpZnlBbGwpCi17Ci0gICAgRGVxdWU8dW5zaWduZWQ+IHF1ZXVlOwotICAg
IGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOwotICAgIExvY2tUeXBlIGxvY2s7Ci0gICAgQ29u
ZGl0aW9uVHlwZSBlbXB0eUNvbmRpdGlvbjsKLSAgICBDb25kaXRpb25UeXBlIGZ1bGxDb25kaXRp
b247Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IGNvbnN1bWVyVGhyZWFkczsKLSAgICBW
ZWN0b3I8UmVmUHRyPFRocmVhZD4+IHByb2R1Y2VyVGhyZWFkczsKLQotICAgIFZlY3Rvcjx1bnNp
Z25lZD4gcmVjZWl2ZWQ7Ci0gICAgTG9ja1R5cGUgcmVjZWl2ZWRMb2NrOwotICAgIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bUNvbnN1bWVyczsgaS0tOykgewotICAgICAgICBSZWZQdHI8VGhy
ZWFkPiB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgKLSAgICAgICAgICAgICJDb25zdW1lciB0aHJl
YWQiLAotICAgICAgICAgICAgWyZdICgpIHsKLSAgICAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbXVzdE5vdGlmeSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2tUeXBlPiBsb2NrZXIobG9j
ayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YWl0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVtcHR5Q29uZGl0aW9uLCBsb2NrLCBsb2NrZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWyZdICgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3Ry
aW5nKFRocmVhZDo6Y3VycmVudCgpLCAiOiBDaGVja2luZyBjb25zdW1wdGlvbiBwcmVkaWNhdGUg
d2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRpbnVlLCAiLCBxdWV1ZS5zaXplKCkg
PT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAhc2hvdWxkQ29udGludWUgfHwgIXF1ZXVlLmlzRW1wdHkoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hv
dWxkQ29udGludWUgJiYgcXVldWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG11c3ROb3RpZnkgPSBxdWV1ZS5z
aXplKCkgPT0gbWF4UXVldWVTaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
cXVldWUudGFrZUZpcnN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgbm90aWZ5KGZ1bGxDb25kaXRpb24sIG11c3ROb3RpZnkpOwotCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrVHlw
ZT4gbG9ja2VyKHJlY2VpdmVkTG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZl
ZC5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICBjb25zdW1lclRocmVhZHMuYXBwZW5kKHRocmVh
ZCk7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUHJvZHVjZXJzOyBpLS07KSB7
Ci0gICAgICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKAotICAgICAg
ICAgICAgIlByb2R1Y2VyIFRocmVhZCIsCi0gICAgICAgICAgICBbJl0gKCkgewotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1NZXNzYWdlc1BlclByb2R1Y2VyOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBtdXN0Tm90aWZ5ID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xv
Y2s8TG9ja1R5cGU+IGxvY2tlcihsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbENvbmRpdGlvbiwgbG9jaywgbG9ja2Vy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhUaHJlYWQ6OmN1cnJlbnQoKSwgIjogQ2hlY2tpbmcg
cHJvZHVjdGlvbiBwcmVkaWNhdGUgd2l0aCBzaG91bGRDb250aW51ZSA9ICIsIHNob3VsZENvbnRp
bnVlLCAiLCBxdWV1ZS5zaXplKCkgPT0gIiwgcXVldWUuc2l6ZSgpLCAiXG4iKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBxdWV1ZS5zaXplKCkgPCBtYXhRdWV1ZVNp
emU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtdXN0Tm90aWZ5ID0gcXVldWUuaXNFbXB0eSgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcXVldWUuYXBwZW5kKGkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIG5vdGlmeShlbXB0eUNvbmRpdGlvbiwgbXVzdE5vdGlmeSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIHByb2R1Y2VyVGhyZWFkcy5hcHBlbmQodGhy
ZWFkKTsKLSAgICB9Ci0KLSAgICBmb3IgKFJlZlB0cjxUaHJlYWQ+JiB0aHJlYWQgOiBwcm9kdWNl
clRocmVhZHMpCi0gICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKLQotICAgIHsK
LSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2tUeXBlPiBsb2NrZXIobG9jayk7Ci0gICAgICAg
IHNob3VsZENvbnRpbnVlID0gZmFsc2U7Ci0gICAgfQotICAgIG5vdGlmeUFsbChlbXB0eUNvbmRp
dGlvbik7Ci0KLSAgICBmb3IgKGF1dG8mIHRocmVhZElkZW50aWZpZXIgOiBjb25zdW1lclRocmVh
ZHMpCi0gICAgICAgIHRocmVhZElkZW50aWZpZXItPndhaXRGb3JDb21wbGV0aW9uKCk7Ci0KLSAg
ICBSRUxFQVNFX0FTU0VSVChudW1Qcm9kdWNlcnMgKiBudW1NZXNzYWdlc1BlclByb2R1Y2VyID09
IHJlY2VpdmVkLnNpemUoKSk7Ci0gICAgc3RkOjpzb3J0KHJlY2VpdmVkLmJlZ2luKCksIHJlY2Vp
dmVkLmVuZCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIG1lc3NhZ2VJbmRleCA9IDA7IG1lc3NhZ2VJ
bmRleCA8IG51bU1lc3NhZ2VzUGVyUHJvZHVjZXI7ICsrbWVzc2FnZUluZGV4KSB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgcHJvZHVjZXJJbmRleCA9IDA7IHByb2R1Y2VySW5kZXggPCBudW1Qcm9k
dWNlcnM7ICsrcHJvZHVjZXJJbmRleCkKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1lc3Nh
Z2VJbmRleCA9PSByZWNlaXZlZFttZXNzYWdlSW5kZXggKiBudW1Qcm9kdWNlcnMgKyBwcm9kdWNl
ckluZGV4XSk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5h
bWUgQ29uZGl0aW9uVHlwZSwgdHlwZW5hbWUgTm90aWZ5RnVuY3RvciwgdHlwZW5hbWUgTm90aWZ5
QWxsRnVuY3Rvcj4KLXZvaWQgcnVuQmVuY2htYXJrKAotICAgIGNvbnN0IGNoYXIqIG5hbWUsCi0g
ICAgY29uc3QgTm90aWZ5RnVuY3RvciYgbm90aWZ5LAotICAgIGNvbnN0IE5vdGlmeUFsbEZ1bmN0
b3ImIG5vdGlmeUFsbCkKLXsKLSAgICBkb3VibGUgYmVmb3JlID0gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lTVMoKTsKLSAgICAKLSAgICBydW5UZXN0PExvY2tUeXBlLCBDb25kaXRpb25UeXBl
PigKLSAgICAgICAgbnVtUHJvZHVjZXJzLAotICAgICAgICBudW1Db25zdW1lcnMsCi0gICAgICAg
IG1heFF1ZXVlU2l6ZSwKLSAgICAgICAgbnVtTWVzc2FnZXNQZXJQcm9kdWNlciwKLSAgICAgICAg
bm90aWZ5LAotICAgICAgICBub3RpZnlBbGwpOwotCi0gICAgZG91YmxlIGFmdGVyID0gbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKLQotICAgIHByaW50ZigiICUxMnM6ICU5LjNsZiBt
cyIsIG5hbWUsIGFmdGVyIC0gYmVmb3JlKTsKLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
Ci0KLWludCBtYWluKCkKLXsKLSAgICBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgc3RydWN0IHsKLSAgICAgICAgdW5zaWduZWQgcHJvZHVjZXJzLCBj
b25zdW1lcnMsIHF1ZXVlU2l6ZSwgbWVzc2FnZXNQZXJQcm9kdWNlcjsKLSAgICB9IG1heGltdW1z
W10gPSB7Ci0gICAgICAgIHsgMSwgMSwgMTAwMCwgMTAwMDAwMCB9LAotICAgICAgICB7IDIsIDIs
IDEwMDAsIDEwMDAwMDAgfSwKLSAgICAgICAgeyA0LCA0LCAxMDAwLCAxMDAwMDAwIH0sCi0gICAg
ICAgIHsgOCwgOCwgMTAwMCwgMTAwMDAwMCB9LAotICAgICAgICB7IDEsIDEsICAxMDAsIDEwMDAw
MDAgfSwKLSAgICAgICAgeyAyLCAyLCAgMTAwLCAxMDAwMDAwIH0sCi0gICAgICAgIHsgNCwgNCwg
IDEwMCwgMTAwMDAwMCB9LAotICAgICAgICB7IDgsIDgsICAxMDAsIDEwMDAwMDAgfSwKLSAgICAg
ICAgeyAxLCAyLCAxMDAwLCAxMDAwMDAwIH0sCi0gICAgICAgIHsgMiwgNCwgMTAwMCwgMTAwMDAw
MCB9LAotICAgICAgICB7IDIsIDgsIDEwMDAsIDEwMDAwMDAgfSwKLSAgICAgICAgeyA0LCA4LCAx
MDAwLCAxMDAwMDAwIH0sCi0gICAgICAgIHsgMiwgMSwgMTAwMCwgMTAwMDAwMCB9LAotICAgICAg
ICB7IDQsIDIsIDEwMDAsIDEwMDAwMDAgfSwKLSAgICAgICAgeyA4LCAyLCAxMDAwLCAxMDAwMDAw
IH0sCi0gICAgICAgIHsgOCwgNCwgMTAwMCwgMTAwMDAwMCB9LAotICAgIH07Ci0KLSAgICBmb3Ig
KGF1dG8mJiBtIDogbWF4aW11bXMpIHsKLSAgICAgICAgbnVtUHJvZHVjZXJzID0gbS5wcm9kdWNl
cnM7Ci0gICAgICAgIG51bUNvbnN1bWVycyA9IG0uY29uc3VtZXJzOwotICAgICAgICBtYXhRdWV1
ZVNpemUgPSBtLnF1ZXVlU2l6ZTsKLSAgICAgICAgbnVtTWVzc2FnZXNQZXJQcm9kdWNlciA9IG0u
bWVzc2FnZXNQZXJQcm9kdWNlcjsKLQotICAgICAgICBwcmludGYoIlJ1bm5pbmcgd2l0aCAlM3Ug
cHJvZHVjZXJzLCAlM3UgY29uc3VtZXJzLCBxdWV1ZSBvZiAlNHUsICUxMHUgbWVzc2FnZXM6ICIs
Ci0gICAgICAgICAgICAgICBtLnByb2R1Y2VycywgbS5jb25zdW1lcnMsIG0ucXVldWVTaXplLCBt
Lm1lc3NhZ2VzUGVyUHJvZHVjZXIpOwotICAgICAgCi0gICAgICAgIHJ1bkJlbmNobWFyazxMb2Nr
LCBDb25kaXRpb24+KAotICAgICAgICAgICAgIldURiBMb2NrIE5vdGlmeU9uZSIsCi0gICAgICAg
ICAgICBbJl0gKENvbmRpdGlvbiYgY29uZGl0aW9uLCBib29sKSB7Ci0gICAgICAgICAgICAgICAg
Y29uZGl0aW9uLm5vdGlmeU9uZSgpOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIFsmXSAo
Q29uZGl0aW9uJiBjb25kaXRpb24pIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb24ubm90aWZ5
QWxsKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgcnVuQmVuY2htYXJrPExvY2ssIENvbmRp
dGlvbj4oCi0gICAgICAgICAgICAiV1RGIExvY2sgTm90aWZ5QWxsIiwKLSAgICAgICAgICAgIFsm
XSAoQ29uZGl0aW9uJiBjb25kaXRpb24sIGJvb2wgbXVzdE5vdGlmeSkgewotICAgICAgICAgICAg
ICAgIGlmIChtdXN0Tm90aWZ5KQotICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24ubm90aWZ5
QWxsKCk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgWyZdIChDb25kaXRpb24mIGNvbmRp
dGlvbikgewotICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICAvKiBGSVhNRSB0aGUgbmF0aXZlIG11dGV4IGlzIHJlYWxseSB3YXkg
dG9vIHNsb3cuCi0gICAgICAgIHJ1bkJlbmNobWFyazxzdGQ6Om11dGV4LCBzdGQ6OmNvbmRpdGlv
bl92YXJpYWJsZT4oCi0gICAgICAgICAgICAic3RkOjptdXRleCBOb3RpZnlPbmUiLAotICAgICAg
ICAgICAgWyZdIChzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSYgY29uZGl0aW9uLCBib29sKSB7Ci0g
ICAgICAgICAgICAgICAgY29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKLSAgICAgICAgICAgIH0sCi0g
ICAgICAgICAgICBbJl0gKHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlJiBjb25kaXRpb24pIHsKLSAg
ICAgICAgICAgICAgICBjb25kaXRpb24ubm90aWZ5X2FsbCgpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIHJ1bkJlbmNobWFyazxzdGQ6Om11dGV4LCBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZT4o
Ci0gICAgICAgICAgICAic3RkOjptdXRleCBOb3RpZnlBbGwiLAotICAgICAgICAgICAgWyZdIChz
dGQ6OmNvbmRpdGlvbl92YXJpYWJsZSYgY29uZGl0aW9uLCBib29sIG11c3ROb3RpZnkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAobXVzdE5vdGlmeSkKLSAgICAgICAgICAgICAgICAgICAgY29uZGl0
aW9uLm5vdGlmeV9hbGwoKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBbJl0gKHN0ZDo6
Y29uZGl0aW9uX3ZhcmlhYmxlJiBjb25kaXRpb24pIHsKLSAgICAgICAgICAgICAgICBjb25kaXRp
b24ubm90aWZ5X2FsbCgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICovCi0KLSAgICAgICAg
cHJpbnRmKCJcbiIpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvYmVuY2htYXJrcy9Mb2NrRmFpcm5lc3NU
ZXN0LmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9iZW5jaG1hcmtzL0xv
Y2tGYWlybmVzc1Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTQ3YzVi
NDg1NTMxYjg4MzlhYzA1M2I3ZDU0NjhmZDliZDM4MDlmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9iZW5jaG1hcmtzL0xvY2tGYWlybmVzc1Rlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0vLyBPbiBNYWMsIHlvdSBjYW4gYnVpbGQgdGhpcyBsaWtlIHNvOgotLy8geGNydW4gY2xh
bmcrKyAtbyBMb2NrRmFpcm5lc3NUZXN0IFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrRmFpcm5l
c3NUZXN0LmNwcCAtTzMgLVcgLUlTb3VyY2UvV1RGIC1JU291cmNlL1dURi9pY3UgLUlTb3VyY2Uv
V1RGL2JlbmNobWFya3MgLUxXZWJLaXRCdWlsZC9SZWxlYXNlIC1sV1RGIC1mcmFtZXdvcmsgRm91
bmRhdGlvbiAtbGljdWNvcmUgLXN0ZD1jKysxNCAtZnZpc2liaWxpdHk9aGlkZGVuCi0KLSNpbmNs
dWRlICJUb3lMb2Nrcy5oIgotI2luY2x1ZGUgPHRocmVhZD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4K
LSNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVk
ZSA8d3RmL1BhcmtpbmdMb3QuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIHsKLQotdW5zaWduZWQg
bnVtVGhyZWFkczsKLWRvdWJsZSBzZWNvbmRzUGVyVGVzdDsKLXVuc2lnbmVkIG1pY3Jvc2Vjb25k
c0luQ3JpdGljYWxTZWN0aW9uOwotCi1zdHJ1Y3QgQmVuY2htYXJrIHsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBMb2NrVHlwZT4KLSAgICBzdGF0aWMgdm9pZCBydW4oY29uc3QgY2hhciogbmFtZSkK
LSAgICB7Ci0gICAgICAgIExvY2tUeXBlIGxvY2s7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx1
bnNpZ25lZFtdPiBjb3VudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkW10+KG51bVRocmVh
ZHMpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVmUHRyPFRocmVhZD5bXT4gdGhyZWFkcyA9
IHN0ZDo6bWFrZV91bmlxdWU8UmVmUHRyPFRocmVhZD5bXT4obnVtVGhyZWFkcyk7Ci0gICAgCi0g
ICAgICAgIHZvbGF0aWxlIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsKLSAgICAKLSAgICAgICAgbG9j
ay5sb2NrKCk7Ci0gICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1U
aHJlYWRzOyB0aHJlYWRJbmRleC0tOykgewotICAgICAgICAgICAgY291bnRzW3RocmVhZEluZGV4
XSA9IDA7Ci0gICAgICAgICAgICB0aHJlYWRzW3RocmVhZEluZGV4XSA9IFRocmVhZDo6Y3JlYXRl
KAotICAgICAgICAgICAgICAgICJCZW5jaG1hcmsgVGhyZWFkIiwKLSAgICAgICAgICAgICAgICBb
JiwgdGhyZWFkSW5kZXhdICgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtaWNyb3NlY29u
ZHNJbkNyaXRpY2FsU2VjdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGtl
ZXBHb2luZykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2subG9jaygpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50c1t0aHJlYWRJbmRleF0rKzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NrLnVubG9jaygpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoa2Vl
cEdvaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2NrLmxvY2soKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvdW50c1t0aHJlYWRJbmRleF0rKzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHVzbGVlcChtaWNyb3NlY29uZHNJbkNyaXRpY2FsU2VjdGlvbik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBsb2NrLnVubG9jaygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgc2xlZXBNUygxMDApOwot
ICAgICAgICBsb2NrLnVubG9jaygpOwotICAgIAotICAgICAgICBzbGVlcChzZWNvbmRzUGVyVGVz
dCk7Ci0gICAgCi0gICAgICAgIGtlZXBHb2luZyA9IGZhbHNlOwotICAgICAgICBsb2NrLmxvY2so
KTsKLSAgICAKLSAgICAgICAgcHJpbnRmKCIlMjBzICIsIG5hbWUpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspCi0gICAgICAg
ICAgcHJpbnRmKCIlcyU2dSIsIHRocmVhZEluZGV4ICE9IG51bVRocmVhZHMgLSAxID8gIiwgIiA6
ICIiLCBjb3VudHNbdGhyZWFkSW5kZXhdKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgIAot
ICAgICAgICBsb2NrLnVubG9jaygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4
ID0gbnVtVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspCi0gICAgICAgICAgICB0aHJlYWRzW3RocmVh
ZEluZGV4XS0+d2FpdEZvckNvbXBsZXRpb24oKTsKLSAgICB9Ci19OwotCi19IC8vIGFub255bW91
cyBuYW1lc3BhY2UKLQotaW50IG1haW4oKQotewotICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGlu
ZygpOwotICAgIAotICAgIHN0YXRpYyBjb25zdGV4cHIgc3RydWN0IHsKLSAgICAgICAgdW5zaWdu
ZWQgdGhyZWFkczsKLSAgICAgICAgZG91YmxlIHNlY29uZHM7Ci0gICAgICAgIHVuc2lnbmVkIGNy
aXRpY2FsU2VjdGlvbjsKLSAgICB9IHRlc3RzW10gPSB7Ci0gICAgICAgIHsgIDEsIDAuNSwgMTAw
IH0sCi0gICAgICAgIHsgIDIsIDAuNSwgMTAwIH0sCi0gICAgICAgIHsgIDQsIDAuNSwgMTAwIH0s
Ci0gICAgICAgIHsgIDgsIDAuNSwgMTAwIH0sCi0gICAgICAgIHsgMTYsIDAuNSwgMTAwIH0sCi0g
ICAgfTsKLQotICAgIGZvciAoYXV0byYmIHQgOiB0ZXN0cykgewotICAgICAgICBudW1UaHJlYWRz
ID0gdC50aHJlYWRzOwotICAgICAgICBzZWNvbmRzUGVyVGVzdCA9IHQuc2Vjb25kczsKLSAgICAg
ICAgbWljcm9zZWNvbmRzSW5Dcml0aWNhbFNlY3Rpb24gPSB0LmNyaXRpY2FsU2VjdGlvbjsKLSAg
ICAgICAgcHJpbnRmKCIlMnUgdGhyZWFkcywgJTMuMWYgc2Vjb25kcyBvZiB0ZXN0aW5nLCAlM3Ug
dXMgaW4gY3JpdGljYWwgc2VjdGlvbjpcbiIsCi0gICAgICAgICAgICAgICBudW1UaHJlYWRzLCBz
ZWNvbmRzUGVyVGVzdCwgbWljcm9zZWNvbmRzSW5Dcml0aWNhbFNlY3Rpb24pOwotICAgICAgICBy
dW5FdmVyeXRoaW5nPEJlbmNobWFyaz4oKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci19
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvYmVuY2htYXJr
cy9Mb2NrU3BlZWRUZXN0LmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9i
ZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1ZTYzNzliNDAzMzcwOWZjODJhN2MwMWQ2ZTgwNjBlZDRkZTc3ZjI0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0vLyBPbiBNYWMsIHlvdSBjYW4gYnVpbGQgdGhpcyBsaWtlIHNvOgotLy8geGNy
dW4gY2xhbmcrKyAtbyBMb2NrU3BlZWRUZXN0IFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3Bl
ZWRUZXN0LmNwcCAtTzMgLVcgLUlTb3VyY2UvV1RGIC1JU291cmNlL1dURi9pY3UgLUlTb3VyY2Uv
V1RGL2JlbmNobWFya3MgLUxXZWJLaXRCdWlsZC9SZWxlYXNlIC1sV1RGIC1mcmFtZXdvcmsgRm91
bmRhdGlvbiAtbGljdWNvcmUgLXN0ZD1jKysxNCAtZnZpc2liaWxpdHk9aGlkZGVuCi0KLSNpbmNs
dWRlICJUb3lMb2Nrcy5oIgotI2luY2x1ZGUgPHRocmVhZD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4K
LSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1BhcmtpbmdMb3QuaD4KLSNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIHsKLQotdW5zaWduZWQgbnVtVGhyZWFkR3JvdXBzOwotdW5zaWduZWQg
bnVtVGhyZWFkc1Blckdyb3VwOwotdW5zaWduZWQgd29ya1BlckNyaXRpY2FsU2VjdGlvbjsKLXVu
c2lnbmVkIHdvcmtCZXR3ZWVuQ3JpdGljYWxTZWN0aW9uczsKLWRvdWJsZSBzZWNvbmRzUGVyVGVz
dDsKLSAgICAKLXRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci1zdHJ1Y3QgV2l0aFBhZGRpbmcgewot
ICAgIFR5cGUgdmFsdWU7Ci0gICAgY2hhciBidWZbMzAwXTsgLy8gSXQncyBiZXN0IGlmIHRoaXMg
aXNuJ3QgcGVyZmVjdCB0byBhdm9pZCBmYWxzZSBzaGFyaW5nLgotfTsKLQotSGFzaE1hcDxDU3Ry
aW5nLCBWZWN0b3I8ZG91YmxlPj4gcmVzdWx0czsKLQotdm9pZCByZXBvcnRSZXN1bHQoY29uc3Qg
Y2hhciogbmFtZSwgZG91YmxlIHZhbHVlKQotewotICAgIHByaW50ZigiJTIwczogJTkuM2YgS0h6
XG4iLCBuYW1lLCB2YWx1ZSk7Ci0gICAgcmVzdWx0cy5hZGQobmFtZSwgVmVjdG9yPGRvdWJsZT4o
KSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh2YWx1ZSk7Ci19Ci0KLXN0cnVjdCBCZW5jaG1hcmsg
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgotICAgIHN0YXRpYyB2b2lkIHJ1bihj
b25zdCBjaGFyKiBuYW1lKQotICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdpdGhQYWRk
aW5nPExvY2tUeXBlPltdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8V2l0aFBhZGRpbmc8TG9j
a1R5cGU+W10+KG51bVRocmVhZEdyb3Vwcyk7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXaXRo
UGFkZGluZzxkb3VibGU+W10+IHdvcmRzID0gc3RkOjptYWtlX3VuaXF1ZTxXaXRoUGFkZGluZzxk
b3VibGU+W10+KG51bVRocmVhZEdyb3Vwcyk7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWZQ
dHI8VGhyZWFkPltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWZQdHI8VGhyZWFkPltd
PihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOwotCi0gICAgICAgIHZvbGF0
aWxlIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsKLQotICAgICAgICBkb3VibGUgYmVmb3JlID0gbW9u
b3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0gICAgCi0gICAgICAgIExvY2sgbnVtSXRlcmF0
aW9uc0xvY2s7Ci0gICAgICAgIHVpbnQ2NF90IG51bUl0ZXJhdGlvbnMgPSAwOwotICAgIAotICAg
ICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEdyb3VwSW5kZXggPSBudW1UaHJlYWRHcm91cHM7IHRo
cmVhZEdyb3VwSW5kZXgtLTspIHsKLSAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhd
LnZhbHVlID0gMDsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51
bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICB0aHJl
YWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0g
PSBUaHJlYWQ6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgIkJlbmNobWFyayB0aHJlYWQi
LAotICAgICAgICAgICAgICAgICAgICBbdGhyZWFkR3JvdXBJbmRleCwgJmxvY2tzLCAmd29yZHMs
ICZrZWVwR29pbmcsICZudW1JdGVyYXRpb25zTG9jaywgJm51bUl0ZXJhdGlvbnNdICgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBsb2NhbFdvcmQgPSAwOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG15TnVtSXRlcmF0aW9ucyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoa2VlcEdvaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja3NbdGhyZWFk
R3JvdXBJbmRleF0udmFsdWUubG9jaygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IHdvcmtQZXJDcml0aWNhbFNlY3Rpb247IGotLTspIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0udmFsdWUgKz0g
dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gd29yZHNbdGhy
ZWFkR3JvdXBJbmRleF0udmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tzW3RocmVhZEdyb3VwSW5kZXhdLnZhbHVlLnVu
bG9jaygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHdv
cmtCZXR3ZWVuQ3JpdGljYWxTZWN0aW9uczsgai0tOykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhbFdvcmQgKz0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gbG9jYWxXb3JkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBteU51bUl0ZXJhdGlvbnMrKzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKG51bUl0ZXJhdGlvbnNMb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bUl0ZXJh
dGlvbnMgKz0gbXlOdW1JdGVyYXRpb25zOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHNsZWVwKHNlY29uZHNQZXJUZXN0KTsKLSAg
ICAgICAga2VlcEdvaW5nID0gZmFsc2U7Ci0gICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgdGhy
ZWFkSW5kZXggPSBudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZElu
ZGV4LS07KQotICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRJbmRleF0tPndhaXRGb3JDb21wbGV0
aW9uKCk7Ci0KLSAgICAgICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCk7Ci0gICAgCi0gICAgICAgIHJlcG9ydFJlc3VsdChuYW1lLCBudW1JdGVyYXRpb25zIC8g
KGFmdGVyIC0gYmVmb3JlKSAvIDEwMDApOwotICAgIH0KLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQotCi1pbnQgbWFpbigpCi17Ci0gICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHN0cnVjdCB7Ci0gICAgICAgIHVuc2lnbmVkIHRocmVh
ZEdyb3VwcywgdGhyZWFkc1Blckdyb3VwLCBwZXJDcml0aWNhbFNlY3Rpb24sIGJldHdlZW5Dcml0
aWNhbFNlY3Rpb25zOwotICAgICAgICBkb3VibGUgc2Vjb25kczsKLSAgICB9IHRlc3RzW10gPSB7
Ci0gICAgICAgIHsgMSwgIDIsIDUwMCwgMzAwLCAwLjUgfSwKLSAgICAgICAgeyAyLCAgNCwgNTAw
LCAzMDAsIDAuNSB9LAotICAgICAgICB7IDIsICA4LCA1MDAsIDMwMCwgMC41IH0sCi0gICAgICAg
IHsgMiwgMTYsIDUwMCwgMzAwLCAwLjUgfSwKLSAgICAgICAgeyA0LCAxNiwgNTAwLCAzMDAsIDAu
NSB9LAotICAgIH07Ci0KLSAgICBmb3IgKGF1dG8mJiB0IDogdGVzdHMpIHsKLSAgICAgICAgbnVt
VGhyZWFkR3JvdXBzID0gdC50aHJlYWRHcm91cHM7Ci0gICAgICAgIG51bVRocmVhZHNQZXJHcm91
cCA9IHQudGhyZWFkc1Blckdyb3VwOwotICAgICAgICB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uID0g
dC5wZXJDcml0aWNhbFNlY3Rpb247Ci0gICAgICAgIHdvcmtCZXR3ZWVuQ3JpdGljYWxTZWN0aW9u
cyA9IHQuYmV0d2VlbkNyaXRpY2FsU2VjdGlvbnM7Ci0gICAgICAgIHNlY29uZHNQZXJUZXN0ID0g
dC5zZWNvbmRzOwotCi0gICAgICAgIHByaW50ZigiJTJ1IGdyb3VwcywgJTJ1IHRocmVhZHMgcGVy
IGdyb3VwLCAlNXUgd29yayBwZXIgY3JpdGljYWwgc2VjdGlvbiwgJTV1IHdvcmsgYmV0d2VlbiBj
cml0aWNhbCBzZWN0aW9ucywgJTYuM2Ygc2Vjb25kcyBwZXIgdGVzdFxuIiwKLSAgICAgICAgICAg
ICAgIG51bVRocmVhZEdyb3VwcywgbnVtVGhyZWFkc1Blckdyb3VwLCB3b3JrUGVyQ3JpdGljYWxT
ZWN0aW9uLCB3b3JrQmV0d2VlbkNyaXRpY2FsU2VjdGlvbnMsIHNlY29uZHNQZXJUZXN0KTsKLQot
ICAgICAgICBydW5FdmVyeXRoaW5nPEJlbmNobWFyaz4oKTsKLQotICAgICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogcmVzdWx0cykgewotICAgICAgICAgICAgcHJpbnRmKCIlMjBzID0geyAiLCBlbnRy
eS5rZXkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgICAgICAg
ICAgZm9yIChkb3VibGUgdmFsdWUgOiBlbnRyeS52YWx1ZSkgewotICAgICAgICAgICAgICAgIGlm
IChmaXJzdCkKLSAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiLCAiKTsKLSAgICAgICAgICAg
ICAgICBwcmludGYoIiU5LjNmIiwgdmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cHJpbnRmKCIgfTtcbiIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvYmVuY2htYXJrcy9U
b3lMb2Nrcy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2JlbmNobWFya3Mv
VG95TG9ja3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM5ZDEzZWNlMzA4MTVk
NzNlMGUwYzdjMWNkMjIwMWFlYTUzNGI4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvYmVuY2ht
YXJrcy9Ub3lMb2Nrcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTE4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFRveUxv
Y2tzX2gKLSNkZWZpbmUgVG95TG9ja3NfaAotCi0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8
dGhyZWFkPgotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2suaD4K
LSNpbmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgot
Ci0jaWYgX19oYXNfaW5jbHVkZSg8b3MvbG9jay5oPikKLSNpbmNsdWRlIDxvcy9sb2NrLmg+Ci0j
ZGVmaW5lIEhBU19VTkZBSVJfTE9DSwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEVYVFJBX0xPQ0tT
KSAmJiBFWFRSQV9MT0NLUwotI2luY2x1ZGUgPHN5bmNocm9uaWM+Ci0jZW5kaWYKLQotbmFtZXNw
YWNlIHsKLQotdW5zaWduZWQgdG95TG9ja1NwaW5MaW1pdCA9IDQwOwotCi0vLyBUaGlzIGlzIHRo
ZSBvbGQgV1RGOjpTcGluTG9jayBjbGFzcywgaW5jbHVkZWQgaGVyZSBzbyB0aGF0IHdlIGNhbiBz
dGlsbCBjb21wYXJlIG91ciBuZXcgbG9ja3MgdG8gYQotLy8gc3BpbmxvY2sgYmFzZWxpbmUuCi1j
bGFzcyBZaWVsZFNwaW5Mb2NrIHsKLXB1YmxpYzoKLSAgICBZaWVsZFNwaW5Mb2NrKCkKLSAgICB7
Ci0gICAgICAgIG1fbG9jay5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGxvY2soKQotICAgIHsKLSAgICAgICAgd2hpbGUgKCFtX2xvY2suY29t
cGFyZUV4Y2hhbmdlV2VhaygwLCAxLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkKLSAgICAg
ICAgICAgIFRocmVhZDo6eWllbGQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHVubG9jaygpCi0gICAg
ewotICAgICAgICBtX2xvY2suc3RvcmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0g
ICAgfQotCi0gICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9sb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIEF0b21pYzx1bnNpZ25lZD4gbV9sb2NrOwotfTsKLQotY2xhc3MgUGF1c2VTcGluTG9j
ayB7Ci1wdWJsaWM6Ci0gICAgUGF1c2VTcGluTG9jaygpCi0gICAgewotICAgICAgICBtX2xvY2su
c3RvcmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAgfQotCi0gICAgdm9pZCBs
b2NrKCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICghbV9sb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWso
MCwgMSwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpCi0gICAgICAgICAgICBhc20gdm9sYXRp
bGUgKCJwYXVzZSIpOwotICAgIH0KLQotICAgIHZvaWQgdW5sb2NrKCkKLSAgICB7Ci0gICAgICAg
IG1fbG9jay5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAgICB9Ci0KLSAg
ICBib29sIGlzTG9ja2VkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xvY2subG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXRv
bWljPHVuc2lnbmVkPiBtX2xvY2s7Ci19OwotCi0jaWYgZGVmaW5lZChFWFRSQV9MT0NLUykgJiYg
RVhUUkFfTE9DS1MKLWNsYXNzIFRyYW5zYWN0aW9uYWxTcGluTG9jayB7Ci1wdWJsaWM6Ci0gICAg
VHJhbnNhY3Rpb25hbFNwaW5Mb2NrKCkKLSAgICB7Ci0gICAgICAgIG1fbG9jayA9IDA7Ci0gICAg
fQotCi0gICAgdm9pZCBsb2NrKCkKLSAgICB7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0OwotICAgICAgICAgICAgdW5zaWduZWQgZXhwZWN0ZWQg
PSAwOwotICAgICAgICAgICAgdW5zaWduZWQgZGVzaXJlZCA9IDE7Ci0gICAgICAgICAgICBhc20g
dm9sYXRpbGUgKAotICAgICAgICAgICAgICAgICJ4YWNxdWlyZTsgbG9jazsgY21weGNoZ2wgJTMs
ICUyXG5cdCIKLSAgICAgICAgICAgICAgICAic2V0ZSAlMSIKLSAgICAgICAgICAgICAgICA6ICIr
YSIoZXhwZWN0ZWQpLCAiPXEiKHJlc3VsdCksICIrbSIobV9sb2NrKQotICAgICAgICAgICAgICAg
IDogInIiKGRlc2lyZWQpCi0gICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFRocmVh
ZDo6eWllbGQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgdW5sb2NrKCkKLSAgICB7
Ci0gICAgICAgIGFzbSB2b2xhdGlsZSAoCi0gICAgICAgICAgICAieHJlbGVhc2U7IG1vdmwgJDAs
ICUwIgotICAgICAgICAgICAgOgotICAgICAgICAgICAgOiAibSIobV9sb2NrKQotICAgICAgICAg
ICAgOiAibWVtb3J5Iik7Ci0gICAgfQotCi0gICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9sb2NrOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1bnNpZ25l
ZCBtX2xvY2s7Ci19OwotCi1jbGFzcyBTeW5jaHJvbmljTG9jayB7Ci1wdWJsaWM6Ci0gICAgU3lu
Y2hyb25pY0xvY2soKQotICAgICAgICA6IG1fbG9ja2VkKDApCi0gICAgewotICAgIH0KLSAgICAK
LSAgICB2b2lkIGxvY2soKQotICAgIHsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAg
aW50IHN0YXRlID0gMDsKLSAgICAgICAgICAgIGlmIChtX2xvY2tlZC5jb21wYXJlX2V4Y2hhbmdl
X3dlYWsoc3RhdGUsIDEsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fc3luYy53YWl0X2Zvcl9jaGFuZ2UobV9sb2NrZWQs
IHN0YXRlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICB2b2lkIHVubG9jaygpCi0gICAgewotICAgICAgICBtX3N5bmMubm90aWZ5X29uZSht
X2xvY2tlZCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci0gICAgfQotICAgIAotICAg
IGJvb2wgaXNMb2NrZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbG9ja2VkLmxvYWQoKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjphdG9taWM8aW50PiBtX2xvY2tlZDsKLSAgICBz
dGQ6OmV4cGVyaW1lbnRhbDo6c3luY2hyb25pYzxpbnQ+IG1fc3luYzsKLX07Ci0jZW5kaWYKLQot
dGVtcGxhdGU8dHlwZW5hbWUgU3RhdGVUeXBlPgotY2xhc3MgQmFyZ2luZ0xvY2sgewotcHVibGlj
OgotICAgIEJhcmdpbmdMb2NrKCkKLSAgICB7Ci0gICAgICAgIG1fc3RhdGUuc3RvcmUoMCk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgbG9jaygpCi0gICAgewotICAgICAgICBpZiAoTElLRUxZKG1f
c3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0xvY2tlZEJpdCwgc3RkOjptZW1vcnlfb3Jk
ZXJfYWNxdWlyZSkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgbG9j
a1Nsb3coKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCB1bmxvY2soKQotICAgIHsKLSAgICAgICAg
aWYgKExJS0VMWShtX3N0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNMb2NrZWRCaXQsIDAsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgICAgIHVubG9ja1Nsb3coKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0xvY2tlZCgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zdGF0ZS5sb2FkKHN0ZDo6bWVtb3J5X29y
ZGVyX2FjcXVpcmUpICYgaXNMb2NrZWRCaXQ7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBO
RVZFUl9JTkxJTkUgdm9pZCBsb2NrU2xvdygpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSB0b3lMb2NrU3BpbkxpbWl0OyBpLS07KSB7Ci0gICAgICAgICAgICBTdGF0ZVR5cGUgY3Vy
cmVudFN0YXRlID0gbV9zdGF0ZS5sb2FkKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICghKGN1cnJlbnRTdGF0ZSAmIGlzTG9ja2VkQml0KQotICAgICAgICAgICAgICAgICYmIG1fc3Rh
dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50U3RhdGUsIGN1cnJlbnRTdGF0ZSB8IGlzTG9j
a2VkQml0KSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChjdXJyZW50U3RhdGUgJiBoYXNQYXJrZWRCaXQpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFRocmVhZDo6eWllbGQoKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgU3RhdGVUeXBlIGN1
cnJlbnRTdGF0ZSA9IG1fc3RhdGUubG9hZCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIShjdXJyZW50U3RhdGUgJiBpc0xvY2tlZEJpdCkKLSAgICAgICAgICAgICAgICAmJiBtX3N0
YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudFN0YXRlLCBjdXJyZW50U3RhdGUgfCBpc0xv
Y2tlZEJpdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX3N0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNMb2NrZWRCaXQsIGlzTG9ja2VkQml0
IHwgaGFzUGFya2VkQml0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUGFya2luZ0xvdDo6
Y29tcGFyZUFuZFBhcmsoJm1fc3RhdGUsIGlzTG9ja2VkQml0IHwgaGFzUGFya2VkQml0KTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICBORVZFUl9JTkxJTkUgdm9pZCB1bmxvY2tTbG93KCkK
LSAgICB7Ci0gICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya09uZSgKLSAgICAgICAgICAgICZtX3N0
YXRlLAotICAgICAgICAgICAgW3RoaXNdIChQYXJraW5nTG90OjpVbnBhcmtSZXN1bHQgcmVzdWx0
KSAtPiBpbnRwdHJfdCB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRo
cmVhZHMpCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RvcmUoaGFzUGFya2VkQml0KTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RvcmUo
MCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0g
ICAgCi0gICAgc3RhdGljIGNvbnN0IFN0YXRlVHlwZSBpc0xvY2tlZEJpdCA9IDE7Ci0gICAgc3Rh
dGljIGNvbnN0IFN0YXRlVHlwZSBoYXNQYXJrZWRCaXQgPSAyOwotICAgIAotICAgIEF0b21pYzxT
dGF0ZVR5cGU+IG1fc3RhdGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdGF0ZVR5cGU+Ci1j
bGFzcyBUaHVuZGVyTG9jayB7Ci1wdWJsaWM6Ci0gICAgVGh1bmRlckxvY2soKQotICAgIHsKLSAg
ICAgICAgbV9zdGF0ZS5zdG9yZShVbmxvY2tlZCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgbG9j
aygpCi0gICAgewotICAgICAgICBpZiAoTElLRUxZKG1fc3RhdGUuY29tcGFyZUV4Y2hhbmdlV2Vh
ayhVbmxvY2tlZCwgTG9ja2VkLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBsb2NrU2xvdygpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHVubG9jaygpCi0gICAgewotICAgICAgICBpZiAoTElLRUxZKG1fc3RhdGUuY29t
cGFyZUV4Y2hhbmdlV2VhayhMb2NrZWQsIFVubG9ja2VkLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxl
YXNlKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICB1bmxvY2tTbG93
KCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fc3RhdGUubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAhPSBVbmxv
Y2tlZDsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIE5FVkVSX0lOTElORSB2b2lkIGxvY2tT
bG93KCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRveUxvY2tTcGluTGltaXQ7
IGktLTspIHsKLSAgICAgICAgICAgIFN0YXRlIGN1cnJlbnRTdGF0ZSA9IG1fc3RhdGUubG9hZCgp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IFVubG9ja2Vk
Ci0gICAgICAgICAgICAgICAgJiYgbV9zdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKFVubG9ja2Vk
LCBMb2NrZWQpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBMb2NrZWRBbmRQYXJrZWQpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFRocmVhZDo6eWllbGQoKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgaWYgKG1f
c3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhayhVbmxvY2tlZCwgTG9ja2VkKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fc3RhdGUuY29tcGFyZUV4
Y2hhbmdlV2VhayhMb2NrZWQsIExvY2tlZEFuZFBhcmtlZCk7Ci0gICAgICAgICAgICBQYXJraW5n
TG90Ojpjb21wYXJlQW5kUGFyaygmbV9zdGF0ZSwgTG9ja2VkQW5kUGFya2VkKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBORVZFUl9JTkxJTkUgdm9pZCB1bmxvY2tTbG93KCkKLSAgICB7
Ci0gICAgICAgIGlmIChtX3N0YXRlLmV4Y2hhbmdlKFVubG9ja2VkKSA9PSBMb2NrZWRBbmRQYXJr
ZWQpCi0gICAgICAgICAgICBQYXJraW5nTG90Ojp1bnBhcmtBbGwoJm1fc3RhdGUpOwotICAgIH0K
LSAgICAKLSAgICBlbnVtIFN0YXRlIDogU3RhdGVUeXBlIHsKLSAgICAgICAgVW5sb2NrZWQsCi0g
ICAgICAgIExvY2tlZCwKLSAgICAgICAgTG9ja2VkQW5kUGFya2VkCi0gICAgfTsKLSAgICAKLSAg
ICBBdG9taWM8U3RhdGU+IG1fc3RhdGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdGF0ZVR5
cGU+Ci1jbGFzcyBDYXNjYWRlTG9jayB7Ci1wdWJsaWM6Ci0gICAgQ2FzY2FkZUxvY2soKQotICAg
IHsKLSAgICAgICAgbV9zdGF0ZS5zdG9yZShVbmxvY2tlZCk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgbG9jaygpCi0gICAgewotICAgICAgICBpZiAoTElLRUxZKG1fc3RhdGUuY29tcGFyZUV4Y2hh
bmdlV2VhayhVbmxvY2tlZCwgTG9ja2VkLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBsb2NrU2xvdygpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIHVubG9jaygpCi0gICAgewotICAgICAgICBpZiAoTElLRUxZKG1fc3Rh
dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhMb2NrZWQsIFVubG9ja2VkLCBzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxlYXNlKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICB1bmxv
Y2tTbG93KCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fc3RhdGUubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAh
PSBVbmxvY2tlZDsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIE5FVkVSX0lOTElORSB2b2lk
IGxvY2tTbG93KCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRveUxvY2tTcGlu
TGltaXQ7IGktLTspIHsKLSAgICAgICAgICAgIFN0YXRlIGN1cnJlbnRTdGF0ZSA9IG1fc3RhdGUu
bG9hZCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IFVu
bG9ja2VkCi0gICAgICAgICAgICAgICAgJiYgbV9zdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKFVu
bG9ja2VkLCBMb2NrZWQpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBMb2NrZWRBbmRQYXJrZWQpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFRocmVhZDo6eWllbGQo
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RhdGUgZGVzaXJlZFN0YXRlID0gTG9j
a2VkOwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5jb21wYXJl
RXhjaGFuZ2VXZWFrKFVubG9ja2VkLCBkZXNpcmVkU3RhdGUpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZGVzaXJlZFN0YXRlID0gTG9ja2VkQW5k
UGFya2VkOwotICAgICAgICAgICAgbV9zdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKExvY2tlZCwg
TG9ja2VkQW5kUGFya2VkKTsKLSAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJr
KCZtX3N0YXRlLCBMb2NrZWRBbmRQYXJrZWQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IE5FVkVSX0lOTElORSB2b2lkIHVubG9ja1Nsb3coKQotICAgIHsKLSAgICAgICAgaWYgKG1fc3Rh
dGUuZXhjaGFuZ2UoVW5sb2NrZWQpID09IExvY2tlZEFuZFBhcmtlZCkKLSAgICAgICAgICAgIFBh
cmtpbmdMb3Q6OnVucGFya09uZSgmbV9zdGF0ZSk7Ci0gICAgfQotICAgIAotICAgIGVudW0gU3Rh
dGUgOiBTdGF0ZVR5cGUgewotICAgICAgICBVbmxvY2tlZCwKLSAgICAgICAgTG9ja2VkLAotICAg
ICAgICBMb2NrZWRBbmRQYXJrZWQKLSAgICB9OwotICAgIAotICAgIEF0b21pYzxTdGF0ZT4gbV9z
dGF0ZTsKLX07Ci0KLWNsYXNzIEhhbmRvZmZMb2NrIHsKLXB1YmxpYzoKLSAgICBIYW5kb2ZmTG9j
aygpCi0gICAgewotICAgICAgICBtX3N0YXRlLnN0b3JlKDApOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGxvY2soKQotICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShtX3N0YXRlLmNvbXBhcmVFeGNo
YW5nZVdlYWsoMCwgaXNMb2NrZWRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBsb2NrU2xvdygpOwotICAgIH0KLQotICAgIHZv
aWQgdW5sb2NrKCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9zdGF0ZS5jb21wYXJlRXhj
aGFuZ2VXZWFrKGlzTG9ja2VkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdW5sb2NrU2xvdygpOwotICAgIH0KLQotICAg
IGJvb2wgaXNMb2NrZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RhdGUubG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlzTG9ja2VkQml0OwotICAgIH0KLSAgICAK
LXByaXZhdGU6Ci0gICAgTkVWRVJfSU5MSU5FIHZvaWQgbG9ja1Nsb3coKQotICAgIHsKLSAgICAg
ICAgZm9yICg7OykgewotICAgICAgICAgICAgdW5zaWduZWQgc3RhdGUgPSBtX3N0YXRlLmxvYWQo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCEoc3RhdGUgJiBpc0xvY2tlZEJpdCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKHN0YXRl
LCBzdGF0ZSB8IGlzTG9ja2VkQml0KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAobV9zdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKHN0YXRlLCBzdGF0ZSArIHBh
cmtlZENvdW50VW5pdCkpIHsKLSAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IFBhcmtpbmdM
b3Q6OmNvbXBhcmVBbmRQYXJrKCZtX3N0YXRlLCBzdGF0ZSArIHBhcmtlZENvdW50VW5pdCkud2Fz
VW5wYXJrZWQ7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5leGNoYW5nZUFkZCgtcGFya2VkQ291
bnRVbml0KTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgTkVW
RVJfSU5MSU5FIHZvaWQgdW5sb2NrU2xvdygpCi0gICAgewotICAgICAgICBmb3IgKDs7KSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBzdGF0ZSA9IG1fc3RhdGUubG9hZCgpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoIShzdGF0ZSA+PiBwYXJrZWRDb3VudFNoaWZ0KSkgewotICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlID09IGlzTG9ja2VkQml0KTsKLSAgICAgICAg
ICAgICAgICBpZiAobV9zdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzTG9ja2VkQml0LCAwKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoUGFya2luZ0xvdDo6
dW5wYXJrT25lKCZtX3N0YXRlKS5kaWRVbnBhcmtUaHJlYWQpIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSB1bnBhcmtlZCBzb21lb25lLiBUaGVyZSBhcmUgbm93IHJ1bm5pbmcgYW5kIHRoZXkgaG9s
ZCB0aGUgbG9jay4KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIE5vYm9keSB1bnBhcmtlZC4gTWF5YmUgdGhlcmUgaXNu
J3QgYW55b25lIHdhaXRpbmcuIEp1c3QgdHJ5IGFnYWluLgotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpc0xvY2tlZEJpdCA9IDE7Ci0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHBhcmtlZENvdW50U2hpZnQgPSAxOwotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBwYXJrZWRDb3VudFVuaXQgPSAxIDw8IHBhcmtlZENvdW50U2hpZnQ7Ci0gICAgCi0g
ICAgQXRvbWljPHVuc2lnbmVkPiBtX3N0YXRlOwotfTsKLQotI2lmZGVmIEhBU19VTkZBSVJfTE9D
SwotY2xhc3MgVW5mYWlyTG9jayB7Ci0gICAgb3NfdW5mYWlyX2xvY2sgbCA9IE9TX1VORkFJUl9M
T0NLX0lOSVQ7Ci1wdWJsaWM6Ci0gICAgdm9pZCBsb2NrKCkKLSAgICB7Ci0gICAgICAgIG9zX3Vu
ZmFpcl9sb2NrX2xvY2soJmwpOwotICAgIH0KLSAgICB2b2lkIHVubG9jaygpCi0gICAgewotICAg
ICAgICBvc191bmZhaXJfbG9ja191bmxvY2soJmwpOwotICAgIH0KLX07Ci0jZW5kaWYKLQotdGVt
cGxhdGU8dHlwZW5hbWUgQmVuY2htYXJrPgotdm9pZCBydW5FdmVyeXRoaW5nKCkKLXsKLSAgICBC
ZW5jaG1hcms6OnRlbXBsYXRlIHJ1bjxZaWVsZFNwaW5Mb2NrPigiWWllbGRTcGluTG9jayIpOwot
ICAgIEJlbmNobWFyazo6dGVtcGxhdGUgcnVuPFBhdXNlU3BpbkxvY2s+KCJQYXVzZVNwaW5Mb2Nr
Iik7Ci0jaWYgZGVmaW5lZChFWFRSQV9MT0NLUykgJiYgRVhUUkFfTE9DS1MKLSAgICBCZW5jaG1h
cms6OnRlbXBsYXRlIHJ1bjxUcmFuc2FjdGlvbmFsU3BpbkxvY2s+KCJUcmFuc2FjdGlvbmFsU3Bp
bkxvY2siKTsKLSAgICBCZW5jaG1hcms6OnRlbXBsYXRlIHJ1bjxTeW5jaHJvbmljTG9jaz4oIlN5
bmNocm9uaWNMb2NrIik7Ci0jZW5kaWYKLSAgICBCZW5jaG1hcms6OnRlbXBsYXRlIHJ1bjxXb3Jk
TG9jaz4oIldURldvcmRMb2NrIik7Ci0gICAgQmVuY2htYXJrOjp0ZW1wbGF0ZSBydW48TG9jaz4o
IldURkxvY2siKTsKLSAgICBCZW5jaG1hcms6OnRlbXBsYXRlIHJ1bjxCYXJnaW5nTG9jazx1aW50
OF90Pj4oIkJ5dGVCYXJnaW5nTG9jayIpOwotICAgIEJlbmNobWFyazo6dGVtcGxhdGUgcnVuPEJh
cmdpbmdMb2NrPHVpbnQzMl90Pj4oIldvcmRCYXJnaW5nTG9jayIpOwotICAgIEJlbmNobWFyazo6
dGVtcGxhdGUgcnVuPFRodW5kZXJMb2NrPHVpbnQ4X3Q+PigiQnl0ZVRodW5kZXJMb2NrIik7Ci0g
ICAgQmVuY2htYXJrOjp0ZW1wbGF0ZSBydW48VGh1bmRlckxvY2s8dWludDMyX3Q+PigiV29yZFRo
dW5kZXJMb2NrIik7Ci0gICAgQmVuY2htYXJrOjp0ZW1wbGF0ZSBydW48Q2FzY2FkZUxvY2s8dWlu
dDhfdD4+KCJCeXRlQ2FzY2FkZUxvY2siKTsKLSAgICBCZW5jaG1hcms6OnRlbXBsYXRlIHJ1bjxD
YXNjYWRlTG9jazx1aW50MzJfdD4+KCJXb3JkQ2FzY2FkZUxvY2siKTsKLSAgICBCZW5jaG1hcms6
OnRlbXBsYXRlIHJ1bjxIYW5kb2ZmTG9jaz4oIkhhbmRvZmZMb2NrIik7Ci0jaWZkZWYgSEFTX1VO
RkFJUl9MT0NLCi0gICAgQmVuY2htYXJrOjp0ZW1wbGF0ZSBydW48VW5mYWlyTG9jaz4oIlVuZmFp
ckxvY2siKTsKLSNlbmRpZgotICAgIEJlbmNobWFyazo6dGVtcGxhdGUgcnVuPHN0ZDo6bXV0ZXg+
KCJzdGQ6Om11dGV4Iik7Ci19Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi0jZW5kaWYg
Ly8gVG95TG9ja3NfaAotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvQWxnb3JpdGhtLmggYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvQWxnb3JpdGhtLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YmUyMDRiZjRkYTgwYWQyZjVhNGE3OTJlZWRkNDQw
MjI0NTdiZGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0Fs
Z29yaXRobS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBbGdvcml0aG1faAotI2Rl
ZmluZSBBbGdvcml0aG1faAotCi0jaW5jbHVkZSAiQkFzc2VydC5oIgotI2luY2x1ZGUgPGFsZ29y
aXRobT4KLSNpbmNsdWRlIDxjc3RkaW50PgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8
bGltaXRzPgotI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgotI2luY2x1ZGUgPGNocm9ubz4KLQotbmFt
ZXNwYWNlIGJtYWxsb2MgewotCi0vLyBWZXJzaW9ucyBvZiBtaW4gYW5kIG1heCB0aGF0IGFyZSBj
b21wYXRpYmxlIHdpdGggY29tcGlsZS10aW1lIGNvbnN0YW50cy4KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBjb25zdGV4cHIgVCBtYXgoVCBhLCBUIGIpCi17Ci0gICAgcmV0dXJuIGEgPiBi
ID8gYSA6IGI7Ci19Ci0gICAgCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHBy
IFQgbWluKFQgYSwgVCBiKQotewotICAgIHJldHVybiBhIDwgYiA/IGEgOiBiOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIFQgbWFzayhUIHZhbHVlLCB1aW50cHRy
X3QgbWFzaykKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA9PSBzaXplb2YodWludHB0
cl90KSwgInNpemVvZihUKSBtdXN0IGJlIGVxdWFsIHRvIHNpemVvZih1aW50cHRyX3QpLiIpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSAm
IG1hc2spOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogbWFzayhUKiB2YWx1
ZSwgdWludHB0cl90IG1hc2spCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkgJiBtYXNrKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBib29sIHRlc3QoVCB2YWx1ZSwgdWludHB0cl90
IG1hc2spCi17Ci0gICAgcmV0dXJuICEhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2YWx1
ZSkgJiBtYXNrKTsKLX0KLQotaW5saW5lIGNvbnN0ZXhwciBib29sIGlzUG93ZXJPZlR3byhzaXpl
X3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gc2l6ZSAmJiAhKHNpemUgJiAoc2l6ZSAtIDEpKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgcm91bmRVcFRvTXVsdGlwbGVPZihzaXpl
X3QgZGl2aXNvciwgVCB4KQotewotICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGRpdmlzb3IpKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKSA9PSBzaXplb2YodWludHB0cl90KSwgInNpemVv
ZihUKSBtdXN0IGJlIGVxdWFsIHRvIHNpemVvZih1aW50cHRyX3QpLiIpOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPigoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih4KSArIChkaXZpc29yIC0gMSkp
ICYgfihkaXZpc29yIC0gMSkpOwotfQotCi10ZW1wbGF0ZTxzaXplX3QgZGl2aXNvciwgdHlwZW5h
bWUgVD4gaW5saW5lIFQgcm91bmRVcFRvTXVsdGlwbGVPZihUIHgpCi17Ci0gICAgc3RhdGljX2Fz
c2VydChpc1Bvd2VyT2ZUd28oZGl2aXNvciksICInZGl2aXNvcicgbXVzdCBiZSBhIHBvd2VyIG9m
IHR3by4iKTsKLSAgICByZXR1cm4gcm91bmRVcFRvTXVsdGlwbGVPZihkaXZpc29yLCB4KTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIHJvdW5kVXBUb011bHRpcGxlT2Yoc2l6
ZV90IGRpdmlzb3IsIFQqIHgpCi17Ci0gICAgQkFTU0VSVChpc1Bvd2VyT2ZUd28oZGl2aXNvcikp
OwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPigocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KHgpICsgKGRpdmlzb3IgLSAxKSkgJiB+KGRpdmlzb3IgLSAxKSk7Ci19Ci0KLXRlbXBs
YXRlPHNpemVfdCBkaXZpc29yLCB0eXBlbmFtZSBUPiBpbmxpbmUgVCogcm91bmRVcFRvTXVsdGlw
bGVPZihUKiB4KQotewotICAgIHN0YXRpY19hc3NlcnQoaXNQb3dlck9mVHdvKGRpdmlzb3IpLCAi
J2Rpdmlzb3InIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7Ci0gICAgcmV0dXJuIHJvdW5kVXBU
b011bHRpcGxlT2YoZGl2aXNvciwgeCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBUIHJvdW5kRG93blRvTXVsdGlwbGVPZihzaXplX3QgZGl2aXNvciwgVCB4KQotewotICAgIEJB
U1NFUlQoaXNQb3dlck9mVHdvKGRpdmlzb3IpKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxUPihtYXNrKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih4KSwgfihkaXZpc29yIC0gMXVs
KSkpOwotfQotCi10ZW1wbGF0ZTxzaXplX3QgZGl2aXNvciwgdHlwZW5hbWUgVD4gaW5saW5lIGNv
bnN0ZXhwciBUIHJvdW5kRG93blRvTXVsdGlwbGVPZihUIHgpCi17Ci0gICAgc3RhdGljX2Fzc2Vy
dChpc1Bvd2VyT2ZUd28oZGl2aXNvciksICInZGl2aXNvcicgbXVzdCBiZSBhIHBvd2VyIG9mIHR3
by4iKTsKLSAgICByZXR1cm4gcm91bmREb3duVG9NdWx0aXBsZU9mKGRpdmlzb3IsIHgpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBkaXZpZGVSb3VuZGluZ1VwKFQgbnVt
ZXJhdG9yLCBUIGRlbm9taW5hdG9yLCBUJiBxdW90aWVudCwgVCYgcmVtYWluZGVyKQotewotICAg
IC8vIFdlIGV4cGVjdCB0aGUgY29tcGlsZXIgdG8gZW1pdCBhIHNpbmdsZSBkaXZpZGUgaW5zdHJ1
Y3Rpb24gdG8gZXh0cmFjdCBib3RoIHRoZSBxdW90aWVudCBhbmQgdGhlIHJlbWFpbmRlci4KLSAg
ICBxdW90aWVudCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yOwotICAgIHJlbWFpbmRlciA9IG51
bWVyYXRvciAlIGRlbm9taW5hdG9yOwotICAgIGlmIChyZW1haW5kZXIpCi0gICAgICAgIHF1b3Rp
ZW50ICs9IDE7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGRpdmlkZVJvdW5k
aW5nVXAoVCBudW1lcmF0b3IsIFQgZGVub21pbmF0b3IpCi17Ci0gICAgcmV0dXJuIChudW1lcmF0
b3IgKyBkZW5vbWluYXRvciAtIDEpIC8gZGVub21pbmF0b3I7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBUIHJvdW5kVXBUb011bHRpcGxlT2ZOb25Qb3dlck9mVHdvKHNpemVfdCBk
aXZpc29yLCBUIHgpCi17Ci0gICAgcmV0dXJuIGRpdmlkZVJvdW5kaW5nVXAoeCwgZGl2aXNvcikg
KiBkaXZpc29yOwotfQotCi0vLyBWZXJzaW9uIG9mIHNpemVvZiB0aGF0IHJldHVybnMgMCBmb3Ig
ZW1wdHkgY2xhc3Nlcy4KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBz
aXplX3Qgc2l6ZU9mKCkKLXsKLSAgICByZXR1cm4gc3RkOjppc19lbXB0eTxUPjo6dmFsdWUgPyAw
IDogc2l6ZW9mKFQpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHBy
IHNpemVfdCBiaXRDb3VudCgpCi17Ci0gICAgcmV0dXJuIHNpemVvZihUKSAqIDg7Ci19Ci0KLSNp
ZiBCT1MoV0lORE9XUykKLXRlbXBsYXRlPGludCBkZXB0aD4gX19mb3JjZWlubGluZSBjb25zdGV4
cHIgdW5zaWduZWQgbG9uZyBjbHpsKHVuc2lnbmVkIGxvbmcgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IHZhbHVlICYgKDFVTCA8PCAoYml0Q291bnQ8dW5zaWduZWQgbG9uZz4oKSAtIDEpKSA/IDAgOiAx
ICsgY2x6bDxkZXB0aCAtIDE+KHZhbHVlIDw8IDEpOwotfQotCi10ZW1wbGF0ZTw+IF9fZm9yY2Vp
bmxpbmUgY29uc3RleHByIHVuc2lnbmVkIGxvbmcgY2x6bDwxPih1bnNpZ25lZCBsb25nIHZhbHVl
KQotewotICAgIHJldHVybiAwOwotfQotCi1fX2ZvcmNlaW5saW5lIGNvbnN0ZXhwciB1bnNpZ25l
ZCBsb25nIF9fYnVpbHRpbl9jbHpsKHVuc2lnbmVkIGxvbmcgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IHZhbHVlID09IDAgPyAzMiA6IGNsemw8Yml0Q291bnQ8dW5zaWduZWQgbG9uZz4oKT4odmFsdWUp
OwotfQotI2VuZGlmCi0KLWlubGluZSBjb25zdGV4cHIgdW5zaWduZWQgbG9uZyBsb2cyKHVuc2ln
bmVkIGxvbmcgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGJpdENvdW50PHVuc2lnbmVkIGxvbmc+KCkg
LSAxIC0gX19idWlsdGluX2NsemwodmFsdWUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9j
Ci0KLSNlbmRpZiAvLyBBbGdvcml0aG1faApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0FsbG9jYXRpb25LaW5kLmggYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvQWxs
b2NhdGlvbktpbmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA0YzRhMjdhODRl
NjIzYjQ2Yjg5YTQ0N2I0NzgyMmRjYTdlZTZlYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVw
ZW5kZW5jaWVzL2JtYWxsb2MvQWxsb2NhdGlvbktpbmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotZW51bSBjbGFzcyBBbGxvY2F0
aW9uS2luZCB7Ci0gICAgUGh5c2ljYWwsCi0gICAgVmlydHVhbAotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgYm1hbGxvYwotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93
dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvQWxsb2NhdG9yLmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjE1MjUxYjY0MTJmMTU1ZjRmNGM4ZWY3NjkyOGEz
ZWJlYzRhM2U2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9B
bGxvY2F0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiQWxsb2Nh
dG9yLmgiCi0jaW5jbHVkZSAiQkFzc2VydC5oIgotI2luY2x1ZGUgIkNodW5rLmgiCi0jaW5jbHVk
ZSAiRGVhbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIKLSNpbmNsdWRlICJIZWFw
LmgiCi0jaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgotI2luY2x1ZGUgIlNpemVzLmgiCi0jaW5jbHVk
ZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7
Ci0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotQWxsb2NhdG9yOjpBbGxvY2F0b3IoSGVhcCYgaGVh
cCwgRGVhbGxvY2F0b3ImIGRlYWxsb2NhdG9yKQotICAgIDogbV9oZWFwKGhlYXApCi0gICAgLCBt
X2RlYnVnSGVhcChoZWFwLmRlYnVnSGVhcCgpKQotICAgICwgbV9kZWFsbG9jYXRvcihkZWFsbG9j
YXRvcikKLXsKLSAgICBmb3IgKHNpemVfdCBzaXplQ2xhc3MgPSAwOyBzaXplQ2xhc3MgPCBzaXpl
Q2xhc3NDb3VudDsgKytzaXplQ2xhc3MpCi0gICAgICAgIG1fYnVtcEFsbG9jYXRvcnNbc2l6ZUNs
YXNzXS5pbml0KG9iamVjdFNpemUoc2l6ZUNsYXNzKSk7Ci19Ci0KLUFsbG9jYXRvcjo6fkFsbG9j
YXRvcigpCi17Ci0gICAgc2NhdmVuZ2UoKTsKLX0KLQotdm9pZCogQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZShzaXplX3Qgc2l6ZSkKLXsKLSAgICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJldHVy
biBtX2RlYnVnSGVhcC0+bWFsbG9jKHNpemUpOwotCi0gICAgaWYgKHNpemUgPD0gc21hbGxNYXgp
Ci0gICAgICAgIHJldHVybiBhbGxvY2F0ZShzaXplKTsKLQotICAgIHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4gbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICByZXR1cm4gbV9oZWFwLnRyeUFs
bG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKLX0KLQotdm9pZCogQWxsb2NhdG9y
OjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBib29sIGNy
YXNoT25GYWlsdXJlID0gdHJ1ZTsKLSAgICByZXR1cm4gYWxsb2NhdGVJbXBsKGFsaWdubWVudCwg
c2l6ZSwgY3Jhc2hPbkZhaWx1cmUpOwotfQotCi12b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9jYXRl
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQotewotICAgIGJvb2wgY3Jhc2hPbkZhaWx1
cmUgPSBmYWxzZTsKLSAgICByZXR1cm4gYWxsb2NhdGVJbXBsKGFsaWdubWVudCwgc2l6ZSwgY3Jh
c2hPbkZhaWx1cmUpOwotfQotCi12b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlSW1wbChzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgYm9vbCBjcmFzaE9uRmFpbHVyZSkKLXsKLSAgICBCQVNT
RVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKLQotICAgIGlmIChtX2RlYnVnSGVhcCkKLSAg
ICAgICAgcmV0dXJuIG1fZGVidWdIZWFwLT5tZW1hbGlnbihhbGlnbm1lbnQsIHNpemUsIGNyYXNo
T25GYWlsdXJlKTsKLQotICAgIGlmICghc2l6ZSkKLSAgICAgICAgc2l6ZSA9IGFsaWdubWVudDsK
LQotICAgIGlmIChzaXplIDw9IHNtYWxsTWF4ICYmIGFsaWdubWVudCA8PSBzbWFsbE1heCkKLSAg
ICAgICAgcmV0dXJuIGFsbG9jYXRlKHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBzaXpl
KSk7Ci0KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soSGVhcDo6bXV0ZXgo
KSk7Ci0gICAgaWYgKGNyYXNoT25GYWlsdXJlKQotICAgICAgICByZXR1cm4gbV9oZWFwLmFsbG9j
YXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKLSAgICByZXR1cm4gbV9oZWFwLnRyeUFs
bG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKLX0KLQotdm9pZCogQWxsb2NhdG9y
OjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCi17Ci0gICAgaWYgKG1f
ZGVidWdIZWFwKQotICAgICAgICByZXR1cm4gbV9kZWJ1Z0hlYXAtPnJlYWxsb2Mob2JqZWN0LCBu
ZXdTaXplKTsKLQotICAgIHNpemVfdCBvbGRTaXplID0gMDsKLSAgICBzd2l0Y2ggKG9iamVjdFR5
cGUobV9oZWFwLmtpbmQoKSwgb2JqZWN0KSkgewotICAgIGNhc2UgT2JqZWN0VHlwZTo6U21hbGw6
IHsKLSAgICAgICAgQkFTU0VSVChvYmplY3RUeXBlKG1faGVhcC5raW5kKCksIG51bGxwdHIpID09
IE9iamVjdFR5cGU6OlNtYWxsKTsKLSAgICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBzaXplX3Qgc2l6ZUNsYXNzID0gT2JqZWN0KG9iamVjdCkucGFnZSgp
LT5zaXplQ2xhc3MoKTsKLSAgICAgICAgb2xkU2l6ZSA9IG9iamVjdFNpemUoc2l6ZUNsYXNzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgT2JqZWN0VHlwZTo6TGFyZ2U6IHsKLSAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkpOwot
ICAgICAgICBvbGRTaXplID0gbV9oZWFwLmxhcmdlU2l6ZShsb2NrLCBvYmplY3QpOwotCi0gICAg
ICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdTaXplID4gc21hbGxNYXgpIHsKLSAgICAg
ICAgICAgIG1faGVhcC5zaHJpbmtMYXJnZShsb2NrLCBSYW5nZShvYmplY3QsIG9sZFNpemUpLCBu
ZXdTaXplKTsKLSAgICAgICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIH0KLQotICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRlKG5ld1Np
emUpOwotICAgIHNpemVfdCBjb3B5U2l6ZSA9IHN0ZDo6bWluKG9sZFNpemUsIG5ld1NpemUpOwot
ICAgIG1lbWNweShyZXN1bHQsIG9iamVjdCwgY29weVNpemUpOwotICAgIG1fZGVhbGxvY2F0b3Iu
ZGVhbGxvY2F0ZShvYmplY3QpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgQWxsb2Nh
dG9yOjpzY2F2ZW5nZSgpCi17Ci0gICAgZm9yIChzaXplX3Qgc2l6ZUNsYXNzID0gMDsgc2l6ZUNs
YXNzIDwgc2l6ZUNsYXNzQ291bnQ7ICsrc2l6ZUNsYXNzKSB7Ci0gICAgICAgIEJ1bXBBbGxvY2F0
b3ImIGFsbG9jYXRvciA9IG1fYnVtcEFsbG9jYXRvcnNbc2l6ZUNsYXNzXTsKLSAgICAgICAgQnVt
cFJhbmdlQ2FjaGUmIGJ1bXBSYW5nZUNhY2hlID0gbV9idW1wUmFuZ2VDYWNoZXNbc2l6ZUNsYXNz
XTsKLQotICAgICAgICB3aGlsZSAoYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkpCi0gICAgICAgICAg
ICBtX2RlYWxsb2NhdG9yLmRlYWxsb2NhdGUoYWxsb2NhdG9yLmFsbG9jYXRlKCkpOwotCi0gICAg
ICAgIHdoaWxlIChidW1wUmFuZ2VDYWNoZS5zaXplKCkpIHsKLSAgICAgICAgICAgIGFsbG9jYXRv
ci5yZWZpbGwoYnVtcFJhbmdlQ2FjaGUucG9wKCkpOwotICAgICAgICAgICAgd2hpbGUgKGFsbG9j
YXRvci5jYW5BbGxvY2F0ZSgpKQotICAgICAgICAgICAgICAgIG1fZGVhbGxvY2F0b3IuZGVhbGxv
Y2F0ZShhbGxvY2F0b3IuYWxsb2NhdGUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBhbGxvY2F0
b3IuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLU5PX0lOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxs
QWxsb2NhdG9yU2xvd0Nhc2UoQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBzaXplX3Qgc2l6ZUNs
YXNzKQotewotICAgIEJ1bXBSYW5nZUNhY2hlJiBidW1wUmFuZ2VDYWNoZSA9IG1fYnVtcFJhbmdl
Q2FjaGVzW3NpemVDbGFzc107Ci0KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxv
Y2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgbV9kZWFsbG9jYXRvci5wcm9jZXNzT2JqZWN0TG9nKGxv
Y2spOwotICAgIG1faGVhcC5hbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhsb2NrLCBzaXplQ2xhc3Ms
IGFsbG9jYXRvciwgYnVtcFJhbmdlQ2FjaGUsIG1fZGVhbGxvY2F0b3IubGluZUNhY2hlKGxvY2sp
KTsKLX0KLQotSU5MSU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3IoQnVtcEFsbG9j
YXRvciYgYWxsb2NhdG9yLCBzaXplX3Qgc2l6ZUNsYXNzKQotewotICAgIEJ1bXBSYW5nZUNhY2hl
JiBidW1wUmFuZ2VDYWNoZSA9IG1fYnVtcFJhbmdlQ2FjaGVzW3NpemVDbGFzc107Ci0gICAgaWYg
KCFidW1wUmFuZ2VDYWNoZS5zaXplKCkpCi0gICAgICAgIHJldHVybiByZWZpbGxBbGxvY2F0b3JT
bG93Q2FzZShhbGxvY2F0b3IsIHNpemVDbGFzcyk7Ci0gICAgcmV0dXJuIGFsbG9jYXRvci5yZWZp
bGwoYnVtcFJhbmdlQ2FjaGUucG9wKCkpOwotfQotCi1OT19JTkxJTkUgdm9pZCogQWxsb2NhdG9y
OjphbGxvY2F0ZUxhcmdlKHNpemVfdCBzaXplKQotewotICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4gbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICByZXR1cm4gbV9oZWFwLmFsbG9jYXRl
TGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKLX0KLQotTk9fSU5MSU5FIHZvaWQqIEFsbG9j
YXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3Moc2l6ZV90IHNpemUpCi17Ci0gICAgc2l6ZV90IHNp
emVDbGFzcyA9IGJtYWxsb2M6OnNpemVDbGFzcyhzaXplKTsKLSAgICBCdW1wQWxsb2NhdG9yJiBh
bGxvY2F0b3IgPSBtX2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzc107Ci0gICAgaWYgKCFhbGxvY2F0
b3IuY2FuQWxsb2NhdGUoKSkKLSAgICAgICAgcmVmaWxsQWxsb2NhdG9yKGFsbG9jYXRvciwgc2l6
ZUNsYXNzKTsKLSAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci19Ci0KLXZvaWQqIEFs
bG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3Qgc2l6ZSkKLXsKLSAgICBpZiAobV9kZWJ1
Z0hlYXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVhcC0+bWFsbG9jKHNpemUpOwotCi0gICAg
aWYgKHNpemUgPD0gbWFza1NpemVDbGFzc01heCkgewotICAgICAgICBzaXplX3Qgc2l6ZUNsYXNz
ID0gYm1hbGxvYzo6bWFza1NpemVDbGFzcyhzaXplKTsKLSAgICAgICAgQnVtcEFsbG9jYXRvciYg
YWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3NdOwotICAgICAgICByZWZpbGxB
bGxvY2F0b3IoYWxsb2NhdG9yLCBzaXplQ2xhc3MpOwotICAgICAgICByZXR1cm4gYWxsb2NhdG9y
LmFsbG9jYXRlKCk7Ci0gICAgfQotCi0gICAgaWYgKHNpemUgPD0gc21hbGxNYXgpCi0gICAgICAg
IHJldHVybiBhbGxvY2F0ZUxvZ1NpemVDbGFzcyhzaXplKTsKLQotICAgIHJldHVybiBhbGxvY2F0
ZUxhcmdlKHNpemUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvQWxs
b2NhdG9yLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVz
L2JtYWxsb2MvQWxsb2NhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMzUx
MzJjMTY3NTVmODAwZTFiNzMzMjA5OTA2YTU4YTNjNDdhMWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0FsbG9jYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEs
OTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIEFsbG9jYXRvcl9oCi0jZGVmaW5lIEFsbG9jYXRvcl9oCi0KLSNpbmNs
dWRlICJCRXhwb3J0LmgiCi0jaW5jbHVkZSAiQnVtcEFsbG9jYXRvci5oIgotI2luY2x1ZGUgPGFy
cmF5PgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLWNsYXNzIERlYWxsb2NhdG9yOwotY2xhc3Mg
RGVidWdIZWFwOwotY2xhc3MgSGVhcDsKLQotLy8gUGVyLWNhY2hlIG9iamVjdCBhbGxvY2F0b3Iu
Ci0KLWNsYXNzIEFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgQWxsb2NhdG9yKEhlYXAmLCBEZWFs
bG9jYXRvciYpOwotICAgIH5BbGxvY2F0b3IoKTsKLQotICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNp
emVfdCk7Ci0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0
ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCk7Ci0gICAgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90KTsK
LQotICAgIHZvaWQgc2NhdmVuZ2UoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkKiBhbGxvY2F0ZUlt
cGwoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBib29sIGNyYXNoT25GYWlsdXJlKTsKLSAgICAK
LSAgICBib29sIGFsbG9jYXRlRmFzdENhc2Uoc2l6ZV90LCB2b2lkKiYpOwotICAgIEJFWFBPUlQg
dm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwotICAgIAotICAgIHZvaWQqIGFsbG9jYXRl
TG9nU2l6ZUNsYXNzKHNpemVfdCk7Ci0gICAgdm9pZCogYWxsb2NhdGVMYXJnZShzaXplX3QpOwot
ICAgIAotICAgIHZvaWQgcmVmaWxsQWxsb2NhdG9yKEJ1bXBBbGxvY2F0b3ImLCBzaXplX3Qgc2l6
ZUNsYXNzKTsKLSAgICB2b2lkIHJlZmlsbEFsbG9jYXRvclNsb3dDYXNlKEJ1bXBBbGxvY2F0b3Im
LCBzaXplX3Qgc2l6ZUNsYXNzKTsKLSAgICAKLSAgICBzdGQ6OmFycmF5PEJ1bXBBbGxvY2F0b3Is
IHNpemVDbGFzc0NvdW50PiBtX2J1bXBBbGxvY2F0b3JzOwotICAgIHN0ZDo6YXJyYXk8QnVtcFJh
bmdlQ2FjaGUsIHNpemVDbGFzc0NvdW50PiBtX2J1bXBSYW5nZUNhY2hlczsKLQotICAgIEhlYXAm
IG1faGVhcDsKLSAgICBEZWJ1Z0hlYXAqIG1fZGVidWdIZWFwOwotICAgIERlYWxsb2NhdG9yJiBt
X2RlYWxsb2NhdG9yOwotfTsKLQotaW5saW5lIGJvb2wgQWxsb2NhdG9yOjphbGxvY2F0ZUZhc3RD
YXNlKHNpemVfdCBzaXplLCB2b2lkKiYgb2JqZWN0KQotewotICAgIGlmIChzaXplID4gbWFza1Np
emVDbGFzc01heCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQnVtcEFsbG9jYXRvciYg
YWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9yc1ttYXNrU2l6ZUNsYXNzKHNpemUpXTsKLSAgICBp
ZiAoIWFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBvYmplY3QgPSBhbGxvY2F0b3IuYWxsb2NhdGUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
aW5saW5lIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemUpCi17Ci0gICAgdm9p
ZCogb2JqZWN0OwotICAgIGlmICghYWxsb2NhdGVGYXN0Q2FzZShzaXplLCBvYmplY3QpKQotICAg
ICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShzaXplKTsKLSAgICByZXR1cm4gb2JqZWN0Owot
fQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBBbGxvY2F0b3JfaApkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9i
bWFsbG9jL0FzeW5jVGFzay5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2Rl
cGVuZGVuY2llcy9ibWFsbG9jL0FzeW5jVGFzay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmODNmNTFiODUxMmI5YzUyMjY4YTM3M2Y3MjZlMWJjZDZjODQ2MWVlLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9Bc3luY1Rhc2suaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQXN5bmNUYXNrX2gKLSNkZWZpbmUgQXN5bmNUYXNr
X2gKLQotI2luY2x1ZGUgIkJBc3NlcnQuaCIKLSNpbmNsdWRlICJJbmxpbmUuaCIKLSNpbmNsdWRl
ICJNdXRleC5oIgotI2luY2x1ZGUgIlNpemVzLmgiCi0jaW5jbHVkZSA8YXRvbWljPgotI2luY2x1
ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KLSNpbmNsdWRlIDx0aHJlYWQ+Ci0KLW5hbWVzcGFjZSBi
bWFsbG9jIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqZWN0LCB0eXBlbmFtZSBGdW5jdGlvbj4K
LWNsYXNzIEFzeW5jVGFzayB7Ci1wdWJsaWM6Ci0gICAgQXN5bmNUYXNrKE9iamVjdCYsIGNvbnN0
IEZ1bmN0aW9uJik7Ci0gICAgfkFzeW5jVGFzaygpOwotICAgIAotICAgIGJvb2wgd2lsbFJ1bigp
IHsgcmV0dXJuIG1fc3RhdGUgPT0gU3RhdGU6OlJ1bjsgfQotICAgIHZvaWQgcnVuKCk7Ci0gICAg
Ci0gICAgYm9vbCB3aWxsUnVuU29vbigpIHsgcmV0dXJuIG1fc3RhdGUgPiBTdGF0ZTo6U2xlZXA7
IH0KLSAgICB2b2lkIHJ1blNvb24oKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgZW51bSBjbGFzcyBT
dGF0ZSB7IFNsZWVwLCBSdW4sIFJ1blNvb24gfTsKLSAgICAKLSAgICB2b2lkIHJ1blNsb3dDYXNl
KCk7Ci0gICAgdm9pZCBydW5Tb29uU2xvd0Nhc2UoKTsKLSAgICAKLSAgICBzdGF0aWMgdm9pZCB0
aHJlYWRFbnRyeVBvaW50KEFzeW5jVGFzayopOwotICAgIHZvaWQgdGhyZWFkUnVuTG9vcCgpOwot
Ci0gICAgc3RkOjphdG9taWM8U3RhdGU+IG1fc3RhdGU7Ci0KLSAgICBNdXRleCBtX2NvbmRpdGlv
bk11dGV4OwotICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlX2FueSBtX2NvbmRpdGlvbjsKLQot
ICAgIHN0ZDo6dGhyZWFkIG1fdGhyZWFkOwotCi0gICAgT2JqZWN0JiBtX29iamVjdDsKLSAgICBG
dW5jdGlvbiBtX2Z1bmN0aW9uOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqZWN0LCB0eXBl
bmFtZSBGdW5jdGlvbj4KLUFzeW5jVGFzazxPYmplY3QsIEZ1bmN0aW9uPjo6QXN5bmNUYXNrKE9i
amVjdCYgb2JqZWN0LCBjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCi0gICAgOiBtX3N0YXRlKFN0
YXRlOjpTbGVlcCkKLSAgICAsIG1fY29uZGl0aW9uKCkKLSAgICAsIG1fdGhyZWFkKHN0ZDo6dGhy
ZWFkKCZBc3luY1Rhc2s6OnRocmVhZEVudHJ5UG9pbnQsIHRoaXMpKQotICAgICwgbV9vYmplY3Qo
b2JqZWN0KQotICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLXsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgT2JqZWN0LCB0eXBlbmFtZSBGdW5jdGlvbj4KLUFzeW5jVGFzazxPYmplY3QsIEZ1bmN0
aW9uPjo6fkFzeW5jVGFzaygpCi17Ci0gICAgLy8gV2UnZCBsaWtlIHRvIG1hcmsgb3VyIGRlc3Ry
dWN0b3IgZGVsZXRlZCBidXQgQysrIHdvbid0IGFsbG93IGl0IGJlY2F1c2UKLSAgICAvLyB3ZSBh
cmUgYW4gYXV0b21hdGljIG1lbWJlciBvZiBIZWFwLgotICAgIFJFTEVBU0VfQkFTU0VSVCgwKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqZWN0LCB0eXBlbmFtZSBGdW5jdGlvbj4KLXZvaWQg
QXN5bmNUYXNrPE9iamVjdCwgRnVuY3Rpb24+OjpydW4oKQotewotICAgIG1fc3RhdGUgPSBTdGF0
ZTo6UnVuOwotICAgIAotICAgIHN0ZDo6bG9ja19ndWFyZDxNdXRleD4gbG9jayhtX2NvbmRpdGlv
bk11dGV4KTsKLSAgICBtX2NvbmRpdGlvbi5ub3RpZnlfYWxsKCk7Ci19Ci0gICAgCi10ZW1wbGF0
ZTx0eXBlbmFtZSBPYmplY3QsIHR5cGVuYW1lIEZ1bmN0aW9uPgotdm9pZCBBc3luY1Rhc2s8T2Jq
ZWN0LCBGdW5jdGlvbj46OnJ1blNvb24oKQotewotICAgIG1fc3RhdGUgPSBTdGF0ZTo6UnVuU29v
bjsKLSAgICAKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+IGxvY2sobV9jb25kaXRpb25NdXRl
eCk7Ci0gICAgbV9jb25kaXRpb24ubm90aWZ5X2FsbCgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmplY3QsIHR5cGVuYW1lIEZ1bmN0aW9uPgotdm9pZCBBc3luY1Rhc2s8T2JqZWN0LCBGdW5j
dGlvbj46OnRocmVhZEVudHJ5UG9pbnQoQXN5bmNUYXNrKiBhc3luY1Rhc2spCi17Ci0jaWYgQk9T
KERBUldJTikKLSAgICBwdGhyZWFkX3NldF9xb3NfY2xhc3Nfc2VsZl9ucChRT1NfQ0xBU1NfVVNF
Ul9JTlRFUkFDVElWRSwgMCk7Ci0jZW5kaWYKLQotICAgIGFzeW5jVGFzay0+dGhyZWFkUnVuTG9v
cCgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmplY3QsIHR5cGVuYW1lIEZ1bmN0aW9uPgot
dm9pZCBBc3luY1Rhc2s8T2JqZWN0LCBGdW5jdGlvbj46OnRocmVhZFJ1bkxvb3AoKQotewotICAg
IC8vIFRoaXMgbG9vcCByYXRjaGV0cyBkb3dud2FyZCBmcm9tIG1vc3QgYWN0aXZlIHRvIGxlYXN0
IGFjdGl2ZSBzdGF0ZS4gV2hpbGUKLSAgICAvLyB3ZSByYXRjaGV0IGRvd253YXJkLCBhbnkgb3Ro
ZXIgdGhyZWFkIG1heSByZXNldCBvdXIgc3RhdGUuCi0gICAgCi0gICAgLy8gV2UgcmVxdWlyZSBh
bnkgc3RhdGUgY2hhbmdlIHdoaWxlIHdlIGFyZSBzbGVlcGluZyB0byBzaWduYWwgdG8gb3VyCi0g
ICAgLy8gY29uZGl0aW9uIHZhcmlhYmxlIGFuZCB3YWtlIHVzIHVwLgotICAgIAotICAgIHdoaWxl
ICgxKSB7Ci0gICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpTbGVlcCkgewotICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfbG9jazxNdXRleD4gbG9jayhtX2NvbmRpdGlvbk11dGV4KTsKLSAgICAg
ICAgICAgIG1fY29uZGl0aW9uLndhaXQobG9jaywgWyZdKCkgeyByZXR1cm4gbV9zdGF0ZSAhPSBT
dGF0ZTo6U2xlZXA7IH0pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9zdGF0
ZSA9PSBTdGF0ZTo6UnVuU29vbikgewotICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxNdXRl
eD4gbG9jayhtX2NvbmRpdGlvbk11dGV4KTsKLSAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXRf
Zm9yKGxvY2ssIGFzeW5jVGFza1NsZWVwRHVyYXRpb24sIFsmXSgpIHsgcmV0dXJuIG1fc3RhdGUg
IT0gU3RhdGU6OlJ1blNvb247IH0pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX3N0
YXRlID0gU3RhdGU6OlNsZWVwOwotICAgICAgICAobV9vYmplY3QuKm1fZnVuY3Rpb24pKCk7Ci0g
ICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBBc3luY1Rhc2tf
aApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVu
Y2llcy9ibWFsbG9jL0F2YWlsYWJsZU1lbW9yeS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0F2YWlsYWJsZU1lbW9yeS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDQ1YzhlYjQ2ZmY3NTAzN2Y4NDc5Y2ZlNzA2ZGJiZDg2
ZGFhMTNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9BdmFp
bGFibGVNZW1vcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQlBsYXRmb3JtLmgiCi0jaW5jbHVkZSAi
U2l6ZXMuaCIKLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi1zaXplX3QgYXZhaWxhYmxlTWVtb3J5
KCk7Ci0KLSNpZiBCUExBVEZPUk0oSU9TKQotc3RydWN0IE1lbW9yeVN0YXR1cyB7Ci0gICAgTWVt
b3J5U3RhdHVzKHNpemVfdCBtZW1vcnlGb290cHJpbnQsIGRvdWJsZSBwZXJjZW50QXZhaWxhYmxl
TWVtb3J5SW5Vc2UpCi0gICAgICAgIDogbWVtb3J5Rm9vdHByaW50KG1lbW9yeUZvb3RwcmludCkK
LSAgICAgICAgLCBwZXJjZW50QXZhaWxhYmxlTWVtb3J5SW5Vc2UocGVyY2VudEF2YWlsYWJsZU1l
bW9yeUluVXNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBzaXplX3QgbWVtb3J5Rm9vdHByaW50Owot
ICAgIGRvdWJsZSBwZXJjZW50QXZhaWxhYmxlTWVtb3J5SW5Vc2U7Ci19OwotCi1NZW1vcnlTdGF0
dXMgbWVtb3J5U3RhdHVzKCk7Ci0KLWlubGluZSBzaXplX3QgbWVtb3J5Rm9vdHByaW50KCkKLXsK
LSAgICBhdXRvIG1lbW9yeVVzZSA9IG1lbW9yeVN0YXR1cygpOwotICAgIHJldHVybiBtZW1vcnlV
c2UubWVtb3J5Rm9vdHByaW50OwotfQotCi1pbmxpbmUgZG91YmxlIHBlcmNlbnRBdmFpbGFibGVN
ZW1vcnlJblVzZSgpCi17Ci0gICAgYXV0byBtZW1vcnlVc2UgPSBtZW1vcnlTdGF0dXMoKTsKLSAg
ICByZXR1cm4gbWVtb3J5VXNlLnBlcmNlbnRBdmFpbGFibGVNZW1vcnlJblVzZTsKLX0KLSNlbmRp
ZgotCi1pbmxpbmUgYm9vbCBpc1VuZGVyTWVtb3J5UHJlc3N1cmUoKQotewotI2lmIEJQTEFURk9S
TShJT1MpCi0gICAgcmV0dXJuIHBlcmNlbnRBdmFpbGFibGVNZW1vcnlJblVzZSgpID4gbWVtb3J5
UHJlc3N1cmVUaHJlc2hvbGQ7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQot
ICAgIAotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0JBc3NlcnQuaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9CQXNzZXJ0
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNjJhYzRhZTgxNWJlY2RiN2VlYTg1
ZTlkZTVjOTlhYTk3YjY3OWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9i
bWFsbG9jL0JBc3NlcnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIkJQbGF0Zm9ybS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotI2lmIEJV
U0UoT1NfTE9HKQotI2luY2x1ZGUgPG9zL2xvZy5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKE5E
RUJVRykgJiYgQk9TKERBUldJTikKLQotI2lmIEJDUFUoWDg2XzY0KSB8fCBCQ1BVKFg4NikKLSNk
ZWZpbmUgQkJyZWFrcG9pbnRUcmFwKCkgIF9fYXNtX18gdm9sYXRpbGUgKCJpbnQzIikKLSNlbGlm
IEJDUFUoQVJNX1RIVU1CMikKLSNkZWZpbmUgQkJyZWFrcG9pbnRUcmFwKCkgIF9fYXNtX18gdm9s
YXRpbGUgKCJia3B0ICMwIikKLSNlbGlmIEJDUFUoQVJNNjQpCi0jZGVmaW5lIEJCcmVha3BvaW50
VHJhcCgpICBfX2FzbV9fIHZvbGF0aWxlICgiYnJrICMwIikKLSNlbHNlCi0jZXJyb3IgIlVuc3Vw
cG9ydGVkIENQVSIuCi0jZW5kaWYKLQotLy8gQ3Jhc2ggd2l0aCBhIFNJR1RSQVAgaS5lIEVYQ19C
UkVBS1BPSU5ULgotLy8gV2UgYXJlIG5vdCB1c2luZyBfX2J1aWx0aW5fdHJhcCBiZWNhdXNlIGl0
IGlzIG9ubHkgZ3VhcmFudGVlZCB0byBhYm9ydCwgYnV0IG5vdCBuZWNlc3NhcmlseQotLy8gdHJp
Z2dlciBhIFNJR1RSQVAuIEluc3RlYWQsIHdlIHVzZSBpbmxpbmUgYXNtIHRvIGVuc3VyZSB0aGF0
IHdlIHRyaWdnZXIgdGhlIFNJR1RSQVAuCi0jZGVmaW5lIEJDUkFTSCgpIGRvIHsgXAotICAgICAg
ICBCQnJlYWtwb2ludFRyYXAoKTsgXAotICAgICAgICBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsg
XAotICAgIH0gd2hpbGUgKGZhbHNlKQotCi0jZWxzZSAvLyBub3QgZGVmaW5lZChOREVCVUcpICYm
IEJPUyhEQVJXSU4pCi0KLSNkZWZpbmUgQkNSQVNIKCkgZG8geyBcCi0gICAgKihpbnQqKTB4YmJh
ZGJlZWYgPSAwOyBcCi19IHdoaWxlICgwKTsKLQotI2VuZGlmIC8vIGRlZmluZWQoTkRFQlVHKSAm
JiBCT1MoREFSV0lOKQotCi0jZGVmaW5lIEJBU1NFUlRfSU1QTCh4KSBkbyB7IFwKLSAgICBpZiAo
ISh4KSkgXAotICAgICAgICBCQ1JBU0goKTsgXAotfSB3aGlsZSAoMCk7Ci0KLSNkZWZpbmUgUkVM
RUFTRV9CQVNTRVJUKHgpIEJBU1NFUlRfSU1QTCh4KQotCi0jaWYgQlVTRShPU19MT0cpCi0jZGVm
aW5lIEJNQUxMT0NfTE9HR0lOR19QUkVGSVggImJtYWxsb2M6ICIKLSNkZWZpbmUgQkxPR19FUlJP
Uihmb3JtYXQsIC4uLikgb3NfbG9nX2Vycm9yKE9TX0xPR19ERUZBVUxULCBCTUFMTE9DX0xPR0dJ
TkdfUFJFRklYIGZvcm1hdCwgX19WQV9BUkdTX18pCi0jZWxzZQotI2RlZmluZSBCTE9HX0VSUk9S
KGZvcm1hdCwgLi4uKSBibWFsbG9jOjpyZXBvcnRBc3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2Uo
X19GSUxFX18sIF9fTElORV9fLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBmb3JtYXQsIF9fVkFfQVJH
U19fKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKE5ERUJVRykKLSNkZWZpbmUgUkVMRUFTRV9CQVNT
RVJUX1dJVEhfTUVTU0FHRSh4LCBmb3JtYXQsIC4uLikgQkFTU0VSVF9JTVBMKHgpCi0jZWxzZQot
I2RlZmluZSBSRUxFQVNFX0JBU1NFUlRfV0lUSF9NRVNTQUdFKHgsIGZvcm1hdCwgLi4uKSBkbyB7
IFwKLSAgICBpZiAoISh4KSkgeyBcCi0gICAgICAgIEJMT0dfRVJST1IoIkFTU0VSVElPTiBGQUlM
RUQ6ICIgI3ggIiA6OiAiIGZvcm1hdCwgIyNfX1ZBX0FSR1NfXyk7IFwKLSAgICAgICAgQkNSQVNI
KCk7IFwKLSAgICB9IFwKLX0gd2hpbGUgKDApOwotI2VuZGlmCi0KLSNkZWZpbmUgVU5VU0VEKHgp
ICgodm9pZCl4KQotCi0vLyA9PT09PSBSZWxlYXNlIGJ1aWxkID09PT09Ci0KLSNpZiBkZWZpbmVk
KE5ERUJVRykKLQotI2RlZmluZSBCQVNTRVJUKHgpCi0KLSNkZWZpbmUgSUZfREVCVUcoeCkKLQot
I2VuZGlmIC8vIGRlZmluZWQoTkRFQlVHKQotCi0KLS8vID09PT09IERlYnVnIGJ1aWxkID09PT09
Ci0KLSNpZiAhZGVmaW5lZChOREVCVUcpCi0KLSNkZWZpbmUgQkFTU0VSVCh4KSBCQVNTRVJUX0lN
UEwoeCkKLQotI2RlZmluZSBJRl9ERUJVRyh4KSAoeCkKLQotI2VuZGlmIC8vICFkZWZpbmVkKE5E
RUJVRykKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBl
bmRlbmNpZXMvYm1hbGxvYy9CRXhwb3J0LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvQkV4cG9ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzOGUyYjNiZWZhMzZiMzBkNGQ4Y2IyNGM5M2UxODg0YTM1NDAxZDU3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9CRXhwb3J0LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jZGVmaW5lIEJFWFBPUlQgX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0JQbGF0Zm9ybS5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0JQ
bGF0Zm9ybS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmQ3MGJjYjJlMjFhN2Ez
YTEzNmUyYjkzZjhkOWM0OWNlMzMyYTI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRl
bmNpZXMvYm1hbGxvYy9CUGxhdGZvcm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaWZkZWYgX19BUFBMRV9fCi0jaW5jbHVkZSA8QXZhaWxhYmlsaXR5Lmg+Ci0jaW5j
bHVkZSA8QXZhaWxhYmlsaXR5TWFjcm9zLmg+Ci0jaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxz
Lmg+Ci0jZW5kaWYKLQotI2RlZmluZSBCUExBVEZPUk0oUExBVEZPUk0pIChkZWZpbmVkIEJQTEFU
Rk9STV8jI1BMQVRGT1JNICYmIEJQTEFURk9STV8jI1BMQVRGT1JNKQotI2RlZmluZSBCT1MoT1Mp
IChkZWZpbmVkIEJPU18jI09TICYmIEJPU18jI09TKQotCi0jaWZkZWYgX19BUFBMRV9fCi0jZGVm
aW5lIEJPU19EQVJXSU4gMQotI2VuZGlmCi0KLSNpZmRlZiBfX3VuaXgKLSNkZWZpbmUgQk9TX1VO
SVggMQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikKLSNk
ZWZpbmUgQk9TX1dJTkRPV1MgMQotI2VuZGlmCi0KLSNpZiBCT1MoREFSV0lOKSAmJiAoKGRlZmlu
ZWQoVEFSR0VUX09TX0VNQkVEREVEKSAmJiBUQVJHRVRfT1NfRU1CRURERUQpIFwKLSAgICB8fCAo
ZGVmaW5lZChUQVJHRVRfT1NfSVBIT05FKSAmJiBUQVJHRVRfT1NfSVBIT05FKSBcCi0gICAgfHwg
KGRlZmluZWQoVEFSR0VUX09TX1NJTVVMQVRPUikgJiYgVEFSR0VUX09TX1NJTVVMQVRPUikpCi0j
ZGVmaW5lIEJQTEFURk9STV9JT1MgMQotI2lmIChkZWZpbmVkKFRBUkdFVF9PU19TSU1VTEFUT1Ip
ICYmIFRBUkdFVF9PU19TSU1VTEFUT1IpCi0jZGVmaW5lIEJQTEFURk9STV9JT1NfU0lNVUxBVE9S
IDEKLSNlbmRpZgotI2VsaWYgQk9TKERBUldJTikgJiYgZGVmaW5lZChUQVJHRVRfT1NfTUFDKSAm
JiBUQVJHRVRfT1NfTUFDCi0jZGVmaW5lIEJQTEFURk9STV9NQUMgMQotI2VuZGlmCi0KLS8qID09
PT0gUG9saWN5IGRlY2lzaW9uIG1hY3JvczogdGhlc2UgZGVmaW5lIHBvbGljeSBjaG9pY2VzIGZv
ciBhIHBhcnRpY3VsYXIgcG9ydC4gPT09PSAqLwotCi0vKiBCVVNFKCkgLSB1c2UgYSBwYXJ0aWN1
bGFyIHRoaXJkLXBhcnR5IGxpYnJhcnkgb3Igb3B0aW9uYWwgT1Mgc2VydmljZSAqLwotI2RlZmlu
ZSBCVVNFKEZFQVRVUkUpIChkZWZpbmVkIEJVU0VfIyNGRUFUVVJFICYmIEJVU0VfIyNGRUFUVVJF
KQotCi0vKiA9PT09IFBsYXRmb3JtIGFkYXB0YXRpb24gbWFjcm9zOiB0aGVzZSBkZXNjcmliZSBw
cm9wZXJ0aWVzIG9mIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQuID09PT0gKi8KLQotLyogQkNQVSgp
IC0gdGhlIHRhcmdldCBDUFUgYXJjaGl0ZWN0dXJlICovCi0jZGVmaW5lIEJDUFUoX0ZFQVRVUkUp
IChkZWZpbmVkIEJDUFVfIyNfRkVBVFVSRSAgJiYgQkNQVV8jI19GRUFUVVJFKQotCi0vKiBCQ1BV
KFg4NikgLSBpMzg2IC8geDg2IDMyLWJpdCAqLwotI2lmIGRlZmluZWQoX19pMzg2X18pIFwKLXx8
IGRlZmluZWQoaTM4NikgICAgIFwKLXx8IGRlZmluZWQoX01fSVg4NikgIFwKLXx8IGRlZmluZWQo
X1g4Nl8pICAgIFwKLXx8IGRlZmluZWQoX19USFdfSU5URUwpCi0jZGVmaW5lIEJDUFVfWDg2IDEK
LSNlbmRpZgotCi0vKiBCQ1BVKFg4Nl82NCkgLSBBTUQ2NCAvIEludGVsNjQgLyB4ODZfNjQgNjQt
Yml0ICovCi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKSBcCi18fCBkZWZpbmVkKF9NX1g2NCkKLSNk
ZWZpbmUgQkNQVV9YODZfNjQgMQotI2VuZGlmCi0KLS8qIEJDUFUoQVJNNjQpIC0gQXBwbGUgKi8K
LSNpZiAoZGVmaW5lZChfX2FybTY0X18pICYmIGRlZmluZWQoX19BUFBMRV9fKSkgfHwgZGVmaW5l
ZChfX2FhcmNoNjRfXykKLSNkZWZpbmUgQkNQVV9BUk02NCAxCi0jZW5kaWYKLQotLyogQkNQVShB
Uk0pIC0gQVJNLCBhbnkgdmVyc2lvbiovCi0jZGVmaW5lIEJBUk1fQVJDSF9BVF9MRUFTVChOKSAo
QkNQVShBUk0pICYmIEJBUk1fQVJDSF9WRVJTSU9OID49IE4pCi0KLSNpZiAgIGRlZmluZWQoYXJt
KSBcCi18fCBkZWZpbmVkKF9fYXJtX18pIFwKLXx8IGRlZmluZWQoQVJNKSBcCi18fCBkZWZpbmVk
KF9BUk1fKQotI2RlZmluZSBCQ1BVX0FSTSAxCi0KLS8qIFNldCBCQVJNX0FSQ0hfVkVSU0lPTiAq
LwotI2lmICAgZGVmaW5lZChfX0FSTV9BUkNIXzRfXykgXAotfHwgZGVmaW5lZChfX0FSTV9BUkNI
XzRUX18pIFwKLXx8IGRlZmluZWQoX19NQVJNX0FSTVY0X18pCi0jZGVmaW5lIEJBUk1fQVJDSF9W
RVJTSU9OIDQKLQotI2VsaWYgZGVmaW5lZChfX0FSTV9BUkNIXzVfXykgXAotfHwgZGVmaW5lZChf
X0FSTV9BUkNIXzVUX18pIFwKLXx8IGRlZmluZWQoX19NQVJNX0FSTVY1X18pCi0jZGVmaW5lIEJB
Uk1fQVJDSF9WRVJTSU9OIDUKLQotI2VsaWYgZGVmaW5lZChfX0FSTV9BUkNIXzVFX18pIFwKLXx8
IGRlZmluZWQoX19BUk1fQVJDSF81VEVfXykgXAotfHwgZGVmaW5lZChfX0FSTV9BUkNIXzVURUpf
XykKLSNkZWZpbmUgQkFSTV9BUkNIX1ZFUlNJT04gNQotCi0jZWxpZiBkZWZpbmVkKF9fQVJNX0FS
Q0hfNl9fKSBcCi18fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNkpfXykgXAotfHwgZGVmaW5lZChfX0FS
TV9BUkNIXzZLX18pIFwKLXx8IGRlZmluZWQoX19BUk1fQVJDSF82Wl9fKSBcCi18fCBkZWZpbmVk
KF9fQVJNX0FSQ0hfNlpLX18pIFwKLXx8IGRlZmluZWQoX19BUk1fQVJDSF82VDJfXykgXAotfHwg
ZGVmaW5lZChfX0FSTVY2X18pCi0jZGVmaW5lIEJBUk1fQVJDSF9WRVJTSU9OIDYKLQotI2VsaWYg
ZGVmaW5lZChfX0FSTV9BUkNIXzdBX18pIFwKLXx8IGRlZmluZWQoX19BUk1fQVJDSF83S19fKSBc
Ci18fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN1JfXykgXAotfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdT
X18pCi0jZGVmaW5lIEJBUk1fQVJDSF9WRVJTSU9OIDcKLQotI2VsaWYgZGVmaW5lZChfX0FSTV9B
UkNIXzhfXykgXAotfHwgZGVmaW5lZChfX0FSTV9BUkNIXzhBX18pCi0jZGVmaW5lIEJBUk1fQVJD
SF9WRVJTSU9OIDgKLQotLyogTVNWQyBzZXRzIF9NX0FSTSAqLwotI2VsaWYgZGVmaW5lZChfTV9B
Uk0pCi0jZGVmaW5lIEJBUk1fQVJDSF9WRVJTSU9OIF9NX0FSTQotCi0vKiBSVkNUIHNldHMgX1RB
UkdFVF9BUkNIX0FSTSAqLwotI2VsaWYgZGVmaW5lZChfX1RBUkdFVF9BUkNIX0FSTSkKLSNkZWZp
bmUgQkFSTV9BUkNIX1ZFUlNJT04gX19UQVJHRVRfQVJDSF9BUk0KLQotI2Vsc2UKLSNkZWZpbmUg
V1RGX0FSTV9BUkNIX1ZFUlNJT04gMAotCi0jZW5kaWYKLQotLyogU2V0IEJUSFVNQl9BUkNIX1ZF
UlNJT04gKi8KLSNpZiAgIGRlZmluZWQoX19BUk1fQVJDSF80VF9fKQotI2RlZmluZSBCVEhVTUJf
QVJDSF9WRVJTSU9OIDEKLQotI2VsaWYgZGVmaW5lZChfX0FSTV9BUkNIXzVUX18pIFwKLXx8IGRl
ZmluZWQoX19BUk1fQVJDSF81VEVfXykgXAotfHwgZGVmaW5lZChfX0FSTV9BUkNIXzVURUpfXykK
LSNkZWZpbmUgQlRIVU1CX0FSQ0hfVkVSU0lPTiAyCi0KLSNlbGlmIGRlZmluZWQoX19BUk1fQVJD
SF82Sl9fKSBcCi18fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNktfXykgXAotfHwgZGVmaW5lZChfX0FS
TV9BUkNIXzZaX18pIFwKLXx8IGRlZmluZWQoX19BUk1fQVJDSF82WktfXykgXAotfHwgZGVmaW5l
ZChfX0FSTV9BUkNIXzZNX18pCi0jZGVmaW5lIEJUSFVNQl9BUkNIX1ZFUlNJT04gMwotCi0jZWxp
ZiBkZWZpbmVkKF9fQVJNX0FSQ0hfNlQyX18pIFwKLXx8IGRlZmluZWQoX19BUk1fQVJDSF83X18p
IFwKLXx8IGRlZmluZWQoX19BUk1fQVJDSF83QV9fKSBcCi18fCBkZWZpbmVkKF9fQVJNX0FSQ0hf
N0tfXykgXAotfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdNX18pIFwKLXx8IGRlZmluZWQoX19BUk1f
QVJDSF83Ul9fKSBcCi18fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN1NfXykKLSNkZWZpbmUgQlRIVU1C
X0FSQ0hfVkVSU0lPTiA0Ci0KLS8qIFJWQ1Qgc2V0cyBfX1RBUkdFVF9BUkNIX1RIVU1CICovCi0j
ZWxpZiBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfVEhVTUIpCi0jZGVmaW5lIEJUSFVNQl9BUkNIX1ZF
UlNJT04gX19UQVJHRVRfQVJDSF9USFVNQgotCi0jZWxzZQotI2RlZmluZSBCVEhVTUJfQVJDSF9W
RVJTSU9OIDAKLSNlbmRpZgotCi0vKiBCQ1BVKEFSTV9UUkFESVRJT05BTCkgLSBUaHVtYjIgaXMg
bm90IGF2YWlsYWJsZSwgb25seSB0cmFkaXRpb25hbCBBUk0gKHY0IG9yIGdyZWF0ZXIpICovCi0v
KiBCQ1BVKEFSTV9USFVNQjIpIC0gVGh1bWIyIGluc3RydWN0aW9uIHNldCBpcyBhdmFpbGFibGUg
Ki8KLS8qIE9ubHkgb25lIG9mIHRoZXNlIHdpbGwgYmUgZGVmaW5lZC4gKi8KLSNpZiAhZGVmaW5l
ZChCQ1BVX0FSTV9UUkFESVRJT05BTCkgJiYgIWRlZmluZWQoQkNQVV9BUk1fVEhVTUIyKQotIyAg
aWYgZGVmaW5lZCh0aHVtYjIpIHx8IGRlZmluZWQoX190aHVtYjJfXykgXAotfHwgKChkZWZpbmVk
KF9fdGh1bWIpIHx8IGRlZmluZWQoX190aHVtYl9fKSkgJiYgQlRIVU1CX0FSQ0hfVkVSU0lPTiA9
PSA0KQotIyAgICBkZWZpbmUgQkNQVV9BUk1fVFJBRElUSU9OQUwgMAotIyAgICBkZWZpbmUgQkNQ
VV9BUk1fVEhVTUIyIDEKLSMgIGVsaWYgQkFSTV9BUkNIX0FUX0xFQVNUKDQpCi0jICAgIGRlZmlu
ZSBCQ1BVX0FSTV9UUkFESVRJT05BTCAxCi0jICAgIGRlZmluZSBCQ1BVX0FSTV9USFVNQjIgMAot
IyAgZWxzZQotIyAgICBlcnJvciAiTm90IHN1cHBvcnRlZCBBUk0gYXJjaGl0ZWN0dXJlIgotIyAg
ZW5kaWYKLSNlbGlmIEJDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBCQ1BVKEFSTV9USFVNQjIpIC8q
IFNhbml0eSBDaGVjayAqLwotIyAgZXJyb3IgIkNhbm5vdCB1c2UgYm90aCBvZiBCQ1BVX0FSTV9U
UkFESVRJT05BTCBhbmQgQkNQVV9BUk1fVEhVTUIyIHBsYXRmb3JtcyIKLSNlbmRpZiAvKiAhZGVm
aW5lZChCQ1BVX0FSTV9UUkFESVRJT05BTCkgJiYgIWRlZmluZWQoQkNQVV9BUk1fVEhVTUIyKSAq
LwotCi0jZW5kaWYgLyogQVJNICovCi0KLSNkZWZpbmUgQkFUVFJJQlVURV9QUklOVEYoZm9ybWF0
U3RyaW5nQXJndW1lbnQsIGV4dHJhQXJndW1lbnRzKSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9f
KHByaW50ZiwgZm9ybWF0U3RyaW5nQXJndW1lbnQsIGV4dHJhQXJndW1lbnRzKSkpCi0KLSNpZiBC
UExBVEZPUk0oTUFDKSB8fCBCUExBVEZPUk0oSU9TKQotI2RlZmluZSBCVVNFX09TX0xPRyAxCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBl
bmRlbmNpZXMvYm1hbGxvYy9CdW1wQWxsb2NhdG9yLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvQnVtcEFsbG9jYXRvci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjcwOTE3MzY4YTVmN2I2NzIwMDU3OGFiMDQwMTJkNmJj
ODM2YTk1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9CdW1w
QWxsb2NhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQnVtcEFsbG9jYXRvcl9o
Ci0jZGVmaW5lIEJ1bXBBbGxvY2F0b3JfaAotCi0jaW5jbHVkZSAiQkFzc2VydC5oIgotI2luY2x1
ZGUgIkJ1bXBSYW5nZS5oIgotI2luY2x1ZGUgIk9iamVjdFR5cGUuaCIKLQotbmFtZXNwYWNlIGJt
YWxsb2MgewotCi0vLyBIZWxwZXIgb2JqZWN0IGZvciBhbGxvY2F0aW5nIHNtYWxsIG9iamVjdHMu
Ci0KLWNsYXNzIEJ1bXBBbGxvY2F0b3IgewotcHVibGljOgotICAgIEJ1bXBBbGxvY2F0b3IoKTsK
LSAgICB2b2lkIGluaXQoc2l6ZV90KTsKLSAgICAKLSAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJu
IG1fc2l6ZTsgfQotICAgIAotICAgIGJvb2wgaXNOdWxsKCkgeyByZXR1cm4gIW1fcHRyOyB9Ci0g
ICAgdm9pZCBjbGVhcigpOwotCi0gICAgYm9vbCBjYW5BbGxvY2F0ZSgpIHsgcmV0dXJuICEhbV9y
ZW1haW5pbmc7IH0KLSAgICB2b2lkKiBhbGxvY2F0ZSgpOwotCi0gICAgdm9pZCByZWZpbGwoY29u
c3QgQnVtcFJhbmdlJik7Ci0KLXByaXZhdGU6Ci0gICAgY2hhciogbV9wdHI7Ci0gICAgdW5zaWdu
ZWQgbV9zaXplOwotICAgIHVuc2lnbmVkIG1fcmVtYWluaW5nOwotfTsKLQotaW5saW5lIEJ1bXBB
bGxvY2F0b3I6OkJ1bXBBbGxvY2F0b3IoKQotICAgIDogbV9wdHIoKQotICAgICwgbV9zaXplKCkK
LSAgICAsIG1fcmVtYWluaW5nKCkKLXsKLX0KLQotaW5saW5lIHZvaWQgQnVtcEFsbG9jYXRvcjo6
aW5pdChzaXplX3Qgc2l6ZSkKLXsKLSAgICBtX3B0ciA9IG51bGxwdHI7Ci0gICAgbV9zaXplID0g
c2l6ZTsKLSAgICBtX3JlbWFpbmluZyA9IDA7Ci19Ci0KLWlubGluZSB2b2lkKiBCdW1wQWxsb2Nh
dG9yOjphbGxvY2F0ZSgpCi17Ci0gICAgQkFTU0VSVChtX3JlbWFpbmluZyk7Ci0KLSAgICAtLW1f
cmVtYWluaW5nOwotICAgIGNoYXIqIHJlc3VsdCA9IG1fcHRyOwotICAgIG1fcHRyICs9IG1fc2l6
ZTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBCdW1wQWxsb2NhdG9yOjpy
ZWZpbGwoY29uc3QgQnVtcFJhbmdlJiBidW1wUmFuZ2UpCi17Ci0gICAgQkFTU0VSVCghY2FuQWxs
b2NhdGUoKSk7Ci0gICAgbV9wdHIgPSBidW1wUmFuZ2UuYmVnaW47Ci0gICAgbV9yZW1haW5pbmcg
PSBidW1wUmFuZ2Uub2JqZWN0Q291bnQ7Ci0gICAgQkFTU0VSVChjYW5BbGxvY2F0ZSgpKTsKLX0K
LQotaW5saW5lIHZvaWQgQnVtcEFsbG9jYXRvcjo6Y2xlYXIoKQotewotICAgIG1fcHRyID0gbnVs
bHB0cjsKLSAgICBtX3JlbWFpbmluZyA9IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MK
LQotI2VuZGlmIC8vIEJ1bXBBbGxvY2F0b3JfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0J1bXBSYW5nZS5oIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0J1bXBS
YW5nZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmEwOTA5MTIwMDBlYzFmNmFj
ZjQxYTgzNDA1Zjk5NzNhZDg3NzQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNp
ZXMvYm1hbGxvYy9CdW1wUmFuZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBCdW1w
UmFuZ2VfaAotI2RlZmluZSBCdW1wUmFuZ2VfaAotCi0jaW5jbHVkZSAiRml4ZWRWZWN0b3IuaCIK
LSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlNpemVzLmgiCi0KLW5hbWVzcGFjZSBibWFs
bG9jIHsKLQotc3RydWN0IEJ1bXBSYW5nZSB7Ci0gICAgY2hhciogYmVnaW47Ci0gICAgdW5zaWdu
ZWQgc2hvcnQgb2JqZWN0Q291bnQ7Ci19OwotCi10eXBlZGVmIEZpeGVkVmVjdG9yPEJ1bXBSYW5n
ZSwgYnVtcFJhbmdlQ2FjaGVDYXBhY2l0eT4gQnVtcFJhbmdlQ2FjaGU7Ci0KLX0gLy8gbmFtZXNw
YWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIEJ1bXBSYW5nZV9oCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvQ2FjaGUuY3Bw
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9j
L0NhY2hlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNjNWJmOTA0MTFjMTYy
ODdmM2IwZDY1ZjhjOGU1ZDBiMjNmMzY5NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5k
ZW5jaWVzL2JtYWxsb2MvQ2FjaGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJDYWNoZS5oIgotI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJJbmxpbmUuaCIKLSNp
bmNsdWRlICJQZXJQcm9jZXNzLmgiCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotdm9pZCBDYWNo
ZTo6c2NhdmVuZ2UoSGVhcEtpbmQgaGVhcEtpbmQpCi17Ci0gICAgUGVySGVhcEtpbmQ8Q2FjaGU+
KiBjYWNoZXMgPSBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0RmFzdENhc2UoKTsK
LSAgICBpZiAoIWNhY2hlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FjaGVzLT5hdChoZWFw
S2luZCkuYWxsb2NhdG9yKCkuc2NhdmVuZ2UoKTsKLSAgICBjYWNoZXMtPmF0KGhlYXBLaW5kKS5k
ZWFsbG9jYXRvcigpLnNjYXZlbmdlKCk7Ci19Ci0KLUNhY2hlOjpDYWNoZShIZWFwS2luZCBoZWFw
S2luZCkKLSAgICA6IG1fZGVhbGxvY2F0b3IoUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46
OmdldCgpLT5hdChoZWFwS2luZCkpCi0gICAgLCBtX2FsbG9jYXRvcihQZXJQcm9jZXNzPFBlckhl
YXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGhlYXBLaW5kKSwgbV9kZWFsbG9jYXRvcikKLXsKLX0K
LQotTk9fSU5MSU5FIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhl
YXBLaW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gUGVyVGhyZWFkPFBl
ckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNlKCktPmF0KGhlYXBLaW5kKS5hbGxvY2F0b3Io
KS50cnlBbGxvY2F0ZShzaXplKTsKLX0KLQotTk9fSU5MSU5FIHZvaWQqIENhY2hlOjphbGxvY2F0
ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKLXsKLSAg
ICByZXR1cm4gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNlKCktPmF0
KGhlYXBLaW5kKS5hbGxvY2F0b3IoKS5hbGxvY2F0ZShzaXplKTsKLX0KLQotTk9fSU5MSU5FIHZv
aWQqIENhY2hlOjphbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCBz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gUGVyVGhyZWFkPFBl
ckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNlKCktPmF0KGhlYXBLaW5kKS5hbGxvY2F0b3Io
KS5hbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOwotfQotCi1OT19JTkxJTkUgdm9pZCBDYWNoZTo6
ZGVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCB2b2lkKiBvYmpl
Y3QpCi17Ci0gICAgUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNlKCkt
PmF0KGhlYXBLaW5kKS5kZWFsbG9jYXRvcigpLmRlYWxsb2NhdGUob2JqZWN0KTsKLX0KLQotTk9f
SU5MSU5FIHZvaWQqIENhY2hlOjpyZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQg
aGVhcEtpbmQsIHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCi17Ci0gICAgcmV0dXJuIFBl
clRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRTbG93Q2FzZSgpLT5hdChoZWFwS2luZCku
YWxsb2NhdG9yKCkucmVhbGxvY2F0ZShvYmplY3QsIG5ld1NpemUpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93
dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvQ2FjaGUuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9DYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmMjdjMDRkZjg5NGM3YmQ3MDViOTU5NGUzMzJkOTgxNjA1NGNkMTE5Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9DYWNoZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENhY2hlX2gKLSNkZWZpbmUgQ2FjaGVfaAot
Ci0jaW5jbHVkZSAiQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiQkV4cG9ydC5oIgotI2luY2x1ZGUg
IkRlYWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiSGVhcEtpbmQuaCIKLSNpbmNsdWRlICJQZXJUaHJl
YWQuaCIKLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi0vLyBQZXItdGhyZWFkIGFsbG9jYXRpb24g
LyBkZWFsbG9jYXRpb24gY2FjaGUsIGJhY2tlZCBieSBhIHBlci1wcm9jZXNzIEhlYXAuCi0KLWNs
YXNzIENhY2hlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGUoSGVhcEtp
bmQsIHNpemVfdCk7Ci0gICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKEhlYXBLaW5kLCBzaXplX3Qp
OwotICAgIHN0YXRpYyB2b2lkKiB0cnlBbGxvY2F0ZShIZWFwS2luZCwgc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90KTsKLSAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoSGVhcEtpbmQsIHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCk7Ci0gICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShIZWFwS2luZCwg
dm9pZCopOwotICAgIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKEhlYXBLaW5kLCB2b2lkKiwgc2l6
ZV90KTsKLQotICAgIHN0YXRpYyB2b2lkIHNjYXZlbmdlKEhlYXBLaW5kKTsKLQotICAgIENhY2hl
KEhlYXBLaW5kKTsKLQotICAgIEFsbG9jYXRvciYgYWxsb2NhdG9yKCkgeyByZXR1cm4gbV9hbGxv
Y2F0b3I7IH0KLSAgICBEZWFsbG9jYXRvciYgZGVhbGxvY2F0b3IoKSB7IHJldHVybiBtX2RlYWxs
b2NhdG9yOyB9Ci0KLXByaXZhdGU6Ci0gICAgQkVYUE9SVCBzdGF0aWMgdm9pZCogdHJ5QWxsb2Nh
dGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCwgc2l6ZV90KTsKLSAgICBCRVhQT1JUIHN0YXRp
YyB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kLCBzaXplX3QpOwotICAg
IEJFWFBPUlQgc3RhdGljIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQs
IHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7Ci0gICAgQkVYUE9SVCBzdGF0aWMgdm9pZCBkZWFs
bG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQsIHZvaWQqKTsKLSAgICBCRVhQT1JUIHN0
YXRpYyB2b2lkKiByZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQsIHZvaWQqLCBz
aXplX3QpOwotCi0gICAgRGVhbGxvY2F0b3IgbV9kZWFsbG9jYXRvcjsKLSAgICBBbGxvY2F0b3Ig
bV9hbGxvY2F0b3I7Ci19OwotCi1pbmxpbmUgdm9pZCogQ2FjaGU6OnRyeUFsbG9jYXRlKEhlYXBL
aW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBQZXJIZWFwS2luZDxDYWNoZT4qIGNh
Y2hlcyA9IFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRGYXN0Q2FzZSgpOwotICAg
IGlmICghY2FjaGVzKQotICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZU51bGxDYWNo
ZShoZWFwS2luZCwgc2l6ZSk7Ci0gICAgcmV0dXJuIGNhY2hlcy0+YXQoaGVhcEtpbmQpLmFsbG9j
YXRvcigpLnRyeUFsbG9jYXRlKHNpemUpOwotfQotCi1pbmxpbmUgdm9pZCogQ2FjaGU6OmFsbG9j
YXRlKEhlYXBLaW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBQZXJIZWFwS2luZDxD
YWNoZT4qIGNhY2hlcyA9IFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRGYXN0Q2Fz
ZSgpOwotICAgIGlmICghY2FjaGVzKQotICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZU51
bGxDYWNoZShoZWFwS2luZCwgc2l6ZSk7Ci0gICAgcmV0dXJuIGNhY2hlcy0+YXQoaGVhcEtpbmQp
LmFsbG9jYXRvcigpLmFsbG9jYXRlKHNpemUpOwotfQotCi1pbmxpbmUgdm9pZCogQ2FjaGU6OnRy
eUFsbG9jYXRlKEhlYXBLaW5kIGhlYXBLaW5kLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSkKLXsKLSAgICBQZXJIZWFwS2luZDxDYWNoZT4qIGNhY2hlcyA9IFBlclRocmVhZDxQZXJIZWFw
S2luZDxDYWNoZT4+OjpnZXRGYXN0Q2FzZSgpOwotICAgIGlmICghY2FjaGVzKQotICAgICAgICBy
ZXR1cm4gYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShoZWFwS2luZCwgYWxpZ25tZW50LCBzaXpl
KTsKLSAgICByZXR1cm4gY2FjaGVzLT5hdChoZWFwS2luZCkuYWxsb2NhdG9yKCkudHJ5QWxsb2Nh
dGUoYWxpZ25tZW50LCBzaXplKTsKLX0KLQotaW5saW5lIHZvaWQqIENhY2hlOjphbGxvY2F0ZShI
ZWFwS2luZCBoZWFwS2luZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCi17Ci0gICAg
UGVySGVhcEtpbmQ8Q2FjaGU+KiBjYWNoZXMgPSBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+
Pjo6Z2V0RmFzdENhc2UoKTsKLSAgICBpZiAoIWNhY2hlcykKLSAgICAgICAgcmV0dXJuIGFsbG9j
YXRlU2xvd0Nhc2VOdWxsQ2FjaGUoaGVhcEtpbmQsIGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgcmV0
dXJuIGNhY2hlcy0+YXQoaGVhcEtpbmQpLmFsbG9jYXRvcigpLmFsbG9jYXRlKGFsaWdubWVudCwg
c2l6ZSk7Ci19Ci0KLWlubGluZSB2b2lkIENhY2hlOjpkZWFsbG9jYXRlKEhlYXBLaW5kIGhlYXBL
aW5kLCB2b2lkKiBvYmplY3QpCi17Ci0gICAgUGVySGVhcEtpbmQ8Q2FjaGU+KiBjYWNoZXMgPSBQ
ZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0RmFzdENhc2UoKTsKLSAgICBpZiAoIWNh
Y2hlcykKLSAgICAgICAgcmV0dXJuIGRlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShoZWFwS2lu
ZCwgb2JqZWN0KTsKLSAgICByZXR1cm4gY2FjaGVzLT5hdChoZWFwS2luZCkuZGVhbGxvY2F0b3Io
KS5kZWFsbG9jYXRlKG9iamVjdCk7Ci19Ci0KLWlubGluZSB2b2lkKiBDYWNoZTo6cmVhbGxvY2F0
ZShIZWFwS2luZCBoZWFwS2luZCwgdm9pZCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKLXsKLSAg
ICBQZXJIZWFwS2luZDxDYWNoZT4qIGNhY2hlcyA9IFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNo
ZT4+OjpnZXRGYXN0Q2FzZSgpOwotICAgIGlmICghY2FjaGVzKQotICAgICAgICByZXR1cm4gcmVh
bGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKGhlYXBLaW5kLCBvYmplY3QsIG5ld1NpemUpOwotICAg
IHJldHVybiBjYWNoZXMtPmF0KGhlYXBLaW5kKS5hbGxvY2F0b3IoKS5yZWFsbG9jYXRlKG9iamVj
dCwgbmV3U2l6ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIENh
Y2hlX2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBl
bmRlbmNpZXMvYm1hbGxvYy9DaHVuay5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0NodW5rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDMxZGI2ZjJkN2JmOGI5ZWJlMTMwNTdmMjYxNGEwZmI4ZWY1NDI2MzkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0NodW5rLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIENodW5rX2gKLSNkZWZpbmUgQ2h1bmtfaAotCi0jaW5jbHVkZSAi
T2JqZWN0LmgiCi0jaW5jbHVkZSAiU2l6ZXMuaCIKLSNpbmNsdWRlICJTbWFsbExpbmUuaCIKLSNp
bmNsdWRlICJTbWFsbFBhZ2UuaCIKLSNpbmNsdWRlICJWTUFsbG9jYXRlLmgiCi0jaW5jbHVkZSA8
YXJyYXk+Ci0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotY2xhc3MgQ2h1bmsgOiBwdWJsaWMgTGlz
dE5vZGU8Q2h1bms+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgQ2h1bmsqIGdldCh2b2lkKik7Ci0K
LSAgICBDaHVuayhzaXplX3QgcGFnZVNpemUpOwotICAgIAotICAgIHZvaWQgcmVmKCkgeyArK21f
cmVmQ291bnQ7IH0KLSAgICB2b2lkIGRlcmVmKCkgeyBCQVNTRVJUKG1fcmVmQ291bnQpOyAtLW1f
cmVmQ291bnQ7IH0KLSAgICB1bnNpZ25lZCByZWZDb3VudCgpIHsgcmV0dXJuIG1fcmVmQ291bnQ7
IH0KLQotICAgIHNpemVfdCBvZmZzZXQodm9pZCopOwotCi0gICAgY2hhciogYWRkcmVzcyhzaXpl
X3Qgb2Zmc2V0KTsKLSAgICBTbWFsbFBhZ2UqIHBhZ2Uoc2l6ZV90IG9mZnNldCk7Ci0gICAgU21h
bGxMaW5lKiBsaW5lKHNpemVfdCBvZmZzZXQpOwotCi0gICAgY2hhciogYnl0ZXMoKSB7IHJldHVy
biByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsgfQotICAgIFNtYWxsTGluZSogbGluZXMo
KSB7IHJldHVybiAmbV9saW5lc1swXTsgfQotICAgIFNtYWxsUGFnZSogcGFnZXMoKSB7IHJldHVy
biAmbV9wYWdlc1swXTsgfQotICAgIAotICAgIExpc3Q8U21hbGxQYWdlPiYgZnJlZVBhZ2VzKCkg
eyByZXR1cm4gbV9mcmVlUGFnZXM7IH0KLQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9yZWZDb3Vu
dCB7IH07Ci0gICAgTGlzdDxTbWFsbFBhZ2U+IG1fZnJlZVBhZ2VzIHsgfTsKLQotICAgIHN0ZDo6
YXJyYXk8U21hbGxMaW5lLCBjaHVua1NpemUgLyBzbWFsbExpbmVTaXplPiBtX2xpbmVzIHsgfTsK
LSAgICBzdGQ6OmFycmF5PFNtYWxsUGFnZSwgY2h1bmtTaXplIC8gc21hbGxQYWdlU2l6ZT4gbV9w
YWdlcyB7IH07Ci19OwotCi1zdHJ1Y3QgQ2h1bmtIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChDaHVuayoga2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPigKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihrZXkpIC8gY2h1
bmtTaXplKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4gdm9pZCBm
b3JFYWNoUGFnZShDaHVuayogY2h1bmssIHNpemVfdCBwYWdlU2l6ZSwgRnVuY3Rpb24gZnVuY3Rp
b24pCi17Ci0gICAgLy8gV2UgYWxpZ24gdG8gYXQgbGVhc3QgdGhlIHBhZ2Ugc2l6ZSBzbyB3ZSBj
YW4gc2VydmljZSBhbGlnbmVkIGFsbG9jYXRpb25zCi0gICAgLy8gYXQgZXF1YWwgYW5kIHNtYWxs
ZXIgcG93ZXJzIG9mIHR3bywgYW5kIGFsc28gc28gd2UgY2FuIHZtRGVhbGxvY2F0ZVBoeXNpY2Fs
UGFnZXMoKS4KLSAgICBzaXplX3QgbWV0YWRhdGFTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZk5v
blBvd2VyT2ZUd28ocGFnZVNpemUsIHNpemVvZihDaHVuaykpOwotCi0gICAgT2JqZWN0IGJlZ2lu
KGNodW5rLCBtZXRhZGF0YVNpemUpOwotICAgIE9iamVjdCBlbmQoY2h1bmssIGNodW5rU2l6ZSk7
Ci0KLSAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgaXQgKyBwYWdlU2l6ZSA8PSBlbmQ7IGl0ID0g
aXQgKyBwYWdlU2l6ZSkKLSAgICAgICAgZnVuY3Rpb24oaXQucGFnZSgpKTsKLX0KLQotaW5saW5l
IENodW5rOjpDaHVuayhzaXplX3QgcGFnZVNpemUpCi17Ci0gICAgc2l6ZV90IHNtYWxsUGFnZUNv
dW50ID0gcGFnZVNpemUgLyBzbWFsbFBhZ2VTaXplOwotICAgIGZvckVhY2hQYWdlKHRoaXMsIHBh
Z2VTaXplLCBbJl0oU21hbGxQYWdlKiBwYWdlKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc21hbGxQYWdlQ291bnQ7ICsraSkKLSAgICAgICAgICAgIHBhZ2VbaV0uc2V0U2xpZGUo
aSk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBDaHVuayogQ2h1bms6OmdldCh2b2lkKiBhZGRyZXNz
KQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDaHVuayo+KG1hc2soYWRkcmVzcywgY2h1bmtN
YXNrKSk7Ci19Ci0KLWlubGluZSBzaXplX3QgQ2h1bms6Om9mZnNldCh2b2lkKiBhZGRyZXNzKQot
ewotICAgIEJBU1NFUlQoYWRkcmVzcyA+PSB0aGlzKTsKLSAgICBCQVNTRVJUKGFkZHJlc3MgPCBi
eXRlcygpICsgY2h1bmtTaXplKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGFkZHJl
c3MpIC0gYnl0ZXMoKTsKLX0KLQotaW5saW5lIGNoYXIqIENodW5rOjphZGRyZXNzKHNpemVfdCBv
ZmZzZXQpCi17Ci0gICAgcmV0dXJuIGJ5dGVzKCkgKyBvZmZzZXQ7Ci19Ci0KLWlubGluZSBTbWFs
bFBhZ2UqIENodW5rOjpwYWdlKHNpemVfdCBvZmZzZXQpCi17Ci0gICAgc2l6ZV90IHBhZ2VOdW1i
ZXIgPSBvZmZzZXQgLyBzbWFsbFBhZ2VTaXplOwotICAgIFNtYWxsUGFnZSogcGFnZSA9ICZtX3Bh
Z2VzW3BhZ2VOdW1iZXJdOwotICAgIHJldHVybiBwYWdlIC0gcGFnZS0+c2xpZGUoKTsKLX0KLQot
aW5saW5lIFNtYWxsTGluZSogQ2h1bms6OmxpbmUoc2l6ZV90IG9mZnNldCkKLXsKLSAgICBzaXpl
X3QgbGluZU51bWJlciA9IG9mZnNldCAvIHNtYWxsTGluZVNpemU7Ci0gICAgcmV0dXJuICZtX2xp
bmVzW2xpbmVOdW1iZXJdOwotfQotCi1pbmxpbmUgY2hhciogU21hbGxMaW5lOjpiZWdpbigpCi17
Ci0gICAgQ2h1bmsqIGNodW5rID0gQ2h1bms6OmdldCh0aGlzKTsKLSAgICBzaXplX3QgbGluZU51
bWJlciA9IHRoaXMgLSBjaHVuay0+bGluZXMoKTsKLSAgICBzaXplX3Qgb2Zmc2V0ID0gbGluZU51
bWJlciAqIHNtYWxsTGluZVNpemU7Ci0gICAgcmV0dXJuICZyZWludGVycHJldF9jYXN0PGNoYXIq
PihjaHVuaylbb2Zmc2V0XTsKLX0KLQotaW5saW5lIGNoYXIqIFNtYWxsTGluZTo6ZW5kKCkKLXsK
LSAgICByZXR1cm4gYmVnaW4oKSArIHNtYWxsTGluZVNpemU7Ci19Ci0KLWlubGluZSBTbWFsbExp
bmUqIFNtYWxsUGFnZTo6YmVnaW4oKQotewotICAgIEJBU1NFUlQoIW1fc2xpZGUpOwotICAgIENo
dW5rKiBjaHVuayA9IENodW5rOjpnZXQodGhpcyk7Ci0gICAgc2l6ZV90IHBhZ2VOdW1iZXIgPSB0
aGlzIC0gY2h1bmstPnBhZ2VzKCk7Ci0gICAgc2l6ZV90IGxpbmVOdW1iZXIgPSBwYWdlTnVtYmVy
ICogc21hbGxQYWdlTGluZUNvdW50OwotICAgIHJldHVybiAmY2h1bmstPmxpbmVzKClbbGluZU51
bWJlcl07Ci19Ci0KLWlubGluZSBPYmplY3Q6Ok9iamVjdCh2b2lkKiBvYmplY3QpCi0gICAgOiBt
X2NodW5rKENodW5rOjpnZXQob2JqZWN0KSkKLSAgICAsIG1fb2Zmc2V0KG1fY2h1bmstPm9mZnNl
dChvYmplY3QpKQotewotfQotCi1pbmxpbmUgT2JqZWN0OjpPYmplY3QoQ2h1bmsqIGNodW5rLCB2
b2lkKiBvYmplY3QpCi0gICAgOiBtX2NodW5rKGNodW5rKQotICAgICwgbV9vZmZzZXQobV9jaHVu
ay0+b2Zmc2V0KG9iamVjdCkpCi17Ci0gICAgQkFTU0VSVChjaHVuayA9PSBDaHVuazo6Z2V0KG9i
amVjdCkpOwotfQotCi1pbmxpbmUgY2hhciogT2JqZWN0OjphZGRyZXNzKCkKLXsKLSAgICByZXR1
cm4gbV9jaHVuay0+YWRkcmVzcyhtX29mZnNldCk7Ci19Ci0KLWlubGluZSBTbWFsbExpbmUqIE9i
amVjdDo6bGluZSgpCi17Ci0gICAgcmV0dXJuIG1fY2h1bmstPmxpbmUobV9vZmZzZXQpOwotfQot
Ci1pbmxpbmUgU21hbGxQYWdlKiBPYmplY3Q6OnBhZ2UoKQotewotICAgIHJldHVybiBtX2NodW5r
LT5wYWdlKG1fb2Zmc2V0KTsKLX0KLQotfTsgLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlm
IC8vIENodW5rCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
ZGVwZW5kZW5jaWVzL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThiN2IyOWM3OTEwOWI4ODUyNmZjMWQ1MTk3MjBh
M2M2MjMyNDJhMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2Mv
RGVhbGxvY2F0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiQkFzc2VydC5o
IgotI2luY2x1ZGUgIkNodW5rLmgiCi0jaW5jbHVkZSAiRGVhbGxvY2F0b3IuaCIKLSNpbmNsdWRl
ICJEZWJ1Z0hlYXAuaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiSW5saW5lLmgiCi0j
aW5jbHVkZSAiT2JqZWN0LmgiCi0jaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgotI2luY2x1ZGUgPGFs
Z29yaXRobT4KLSNpbmNsdWRlIDxjc3RkbGliPgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotRGVhbGxvY2F0b3I6
OkRlYWxsb2NhdG9yKEhlYXAmIGhlYXApCi0gICAgOiBtX2hlYXAoaGVhcCkKLSAgICAsIG1fZGVi
dWdIZWFwKGhlYXAuZGVidWdIZWFwKCkpCi17Ci0gICAgaWYgKG1fZGVidWdIZWFwKSB7Ci0gICAg
ICAgIC8vIEZpbGwgdGhlIG9iamVjdCBsb2cgaW4gb3JkZXIgdG8gZGlzYWJsZSB0aGUgZmFzdCBw
YXRoLgotICAgICAgICB3aGlsZSAobV9vYmplY3RMb2cuc2l6ZSgpICE9IG1fb2JqZWN0TG9nLmNh
cGFjaXR5KCkpCi0gICAgICAgICAgICBtX29iamVjdExvZy5wdXNoKG51bGxwdHIpOwotICAgIH0K
LX0KLQotRGVhbGxvY2F0b3I6On5EZWFsbG9jYXRvcigpCi17Ci0gICAgc2NhdmVuZ2UoKTsKLX0K
LSAgICAKLXZvaWQgRGVhbGxvY2F0b3I6OnNjYXZlbmdlKCkKLXsKLSAgICBpZiAobV9kZWJ1Z0hl
YXApCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4g
bG9jayhIZWFwOjptdXRleCgpKTsKLQotICAgIHByb2Nlc3NPYmplY3RMb2cobG9jayk7Ci0gICAg
bV9oZWFwLmRlYWxsb2NhdGVMaW5lQ2FjaGUobG9jaywgbGluZUNhY2hlKGxvY2spKTsKLX0KLQot
dm9pZCBEZWFsbG9jYXRvcjo6cHJvY2Vzc09iamVjdExvZyhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+JiBsb2NrKQotewotICAgIGZvciAoT2JqZWN0IG9iamVjdCA6IG1fb2JqZWN0TG9nKQot
ICAgICAgICBtX2hlYXAuZGVyZWZTbWFsbExpbmUobG9jaywgb2JqZWN0LCBsaW5lQ2FjaGUobG9j
aykpOwotICAgIG1fb2JqZWN0TG9nLmNsZWFyKCk7Ci19Ci0KLXZvaWQgRGVhbGxvY2F0b3I6OmRl
YWxsb2NhdGVTbG93Q2FzZSh2b2lkKiBvYmplY3QpCi17Ci0gICAgaWYgKG1fZGVidWdIZWFwKQot
ICAgICAgICByZXR1cm4gbV9kZWJ1Z0hlYXAtPmZyZWUob2JqZWN0KTsKLQotICAgIGlmICghb2Jq
ZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
IGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgaWYgKG1faGVhcC5pc0xhcmdlKGxvY2ssIG9iamVj
dCkpIHsKLSAgICAgICAgbV9oZWFwLmRlYWxsb2NhdGVMYXJnZShsb2NrLCBvYmplY3QpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fb2JqZWN0TG9nLnNpemUoKSA9PSBtX29i
amVjdExvZy5jYXBhY2l0eSgpKQotICAgICAgICBwcm9jZXNzT2JqZWN0TG9nKGxvY2spOwotCi0g
ICAgbV9vYmplY3RMb2cucHVzaChvYmplY3QpOwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9j
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5j
aWVzL2JtYWxsb2MvRGVhbGxvY2F0b3IuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9EZWFsbG9jYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzODNhOTk5NjM5MDAwMDgzYTM5ZmQxYWU5ZmIyNWQ4N2JjNzk5M2NlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9EZWFsbG9jYXRvci5o
CisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERlYWxsb2NhdG9yX2gKLSNkZWZpbmUgRGVh
bGxvY2F0b3JfaAotCi0jaW5jbHVkZSAiQkV4cG9ydC5oIgotI2luY2x1ZGUgIkZpeGVkVmVjdG9y
LmgiCi0jaW5jbHVkZSAiU21hbGxQYWdlLmgiCi0jaW5jbHVkZSA8bXV0ZXg+Ci0KLW5hbWVzcGFj
ZSBibWFsbG9jIHsKLQotY2xhc3MgRGVidWdIZWFwOwotY2xhc3MgSGVhcDsKLWNsYXNzIFN0YXRp
Y011dGV4OwotCi0vLyBQZXItY2FjaGUgb2JqZWN0IGRlYWxsb2NhdG9yLgotCi1jbGFzcyBEZWFs
bG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgRGVhbGxvY2F0b3IoSGVhcCYpOwotICAgIH5EZWFsbG9j
YXRvcigpOwotCi0gICAgdm9pZCBkZWFsbG9jYXRlKHZvaWQqKTsKLSAgICB2b2lkIHNjYXZlbmdl
KCk7Ci0gICAgCi0gICAgdm9pZCBwcm9jZXNzT2JqZWN0TG9nKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mKTsKLSAgICAKLSAgICBMaW5lQ2FjaGUmIGxpbmVDYWNoZShzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+JikgeyByZXR1cm4gbV9saW5lQ2FjaGU7IH0KLQotcHJpdmF0ZToKLSAg
ICBib29sIGRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKik7Ci0gICAgQkVYUE9SVCB2b2lkIGRlYWxs
b2NhdGVTbG93Q2FzZSh2b2lkKik7Ci0KLSAgICBIZWFwJiBtX2hlYXA7Ci0gICAgRml4ZWRWZWN0
b3I8dm9pZCosIGRlYWxsb2NhdG9yTG9nQ2FwYWNpdHk+IG1fb2JqZWN0TG9nOwotICAgIExpbmVD
YWNoZSBtX2xpbmVDYWNoZTsgLy8gVGhlIEhlYXAgcmVtb3ZlcyBpdGVtcyBmcm9tIHRoaXMgY2Fj
aGUuCi0gICAgRGVidWdIZWFwKiBtX2RlYnVnSGVhcDsKLX07Ci0KLWlubGluZSBib29sIERlYWxs
b2NhdG9yOjpkZWFsbG9jYXRlRmFzdENhc2Uodm9pZCogb2JqZWN0KQotewotICAgIEJBU1NFUlQo
bWlnaHRCZUxhcmdlKG51bGxwdHIpKTsKLSAgICBpZiAobWlnaHRCZUxhcmdlKG9iamVjdCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX29iamVjdExvZy5zaXplKCkgPT0gbV9v
YmplY3RMb2cuY2FwYWNpdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9vYmpl
Y3RMb2cucHVzaChvYmplY3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCBE
ZWFsbG9jYXRvcjo6ZGVhbGxvY2F0ZSh2b2lkKiBvYmplY3QpCi17Ci0gICAgaWYgKCFkZWFsbG9j
YXRlRmFzdENhc2Uob2JqZWN0KSkKLSAgICAgICAgZGVhbGxvY2F0ZVNsb3dDYXNlKG9iamVjdCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIERlYWxsb2NhdG9yX2gK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNp
ZXMvYm1hbGxvYy9EZWJ1Z0hlYXAuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0RlYnVnSGVhcC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDZhMGYwN2NmMTViMzQ2M2RhY2FlYTAxOWQ5NmIwOWFiNjJiMWI5ZTUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0RlYnVnSGVhcC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiRGVidWdIZWFwLmgiCi0jaW5jbHVkZSAi
QkFzc2VydC5oIgotI2luY2x1ZGUgIkJQbGF0Zm9ybS5oIgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0j
aW5jbHVkZSA8dGhyZWFkPgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0gICAgCi0jaWYgQk9TKERB
UldJTikKLQotRGVidWdIZWFwOjpEZWJ1Z0hlYXAoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYpCi0gICAgOiBtX3pvbmUobWFsbG9jX2NyZWF0ZV96b25lKDAsIDApKQotewotICAgIG1hbGxv
Y19zZXRfem9uZV9uYW1lKG1fem9uZSwgIldlYktpdCBVc2luZyBTeXN0ZW0gTWFsbG9jIik7Ci19
Ci0KLXZvaWQqIERlYnVnSGVhcDo6bWFsbG9jKHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJl
c3VsdCA9IG1hbGxvY196b25lX21hbGxvYyhtX3pvbmUsIHNpemUpOwotICAgIGlmICghcmVzdWx0
KQotICAgICAgICBCQ1JBU0goKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBEZWJ1
Z0hlYXA6Om1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBib29sIGNyYXNo
T25GYWlsdXJlKQotewotICAgIHZvaWQqIHJlc3VsdCA9IG1hbGxvY196b25lX21lbWFsaWduKG1f
em9uZSwgYWxpZ25tZW50LCBzaXplKTsKLSAgICBpZiAoIXJlc3VsdCAmJiBjcmFzaE9uRmFpbHVy
ZSkKLSAgICAgICAgQkNSQVNIKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogRGVi
dWdIZWFwOjpyZWFsbG9jKHZvaWQqIG9iamVjdCwgc2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCog
cmVzdWx0ID0gbWFsbG9jX3pvbmVfcmVhbGxvYyhtX3pvbmUsIG9iamVjdCwgc2l6ZSk7Ci0gICAg
aWYgKCFyZXN1bHQpCi0gICAgICAgIEJDUkFTSCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgRGVidWdIZWFwOjpmcmVlKHZvaWQqIG9iamVjdCkKLXsKLSAgICBtYWxsb2Nfem9uZV9m
cmVlKG1fem9uZSwgb2JqZWN0KTsKLX0KLQotI2Vsc2UKLQotRGVidWdIZWFwOjpEZWJ1Z0hlYXAo
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpCi17Ci19Ci0KLXZvaWQqIERlYnVnSGVhcDo6
bWFsbG9jKHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdCA9IDo6bWFsbG9jKHNpemUp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBCQ1JBU0goKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkKiBEZWJ1Z0hlYXA6Om1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplLCBib29sIGNyYXNoT25GYWlsdXJlKQotewotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBp
ZiAocG9zaXhfbWVtYWxpZ24oJnJlc3VsdCwgYWxpZ25tZW50LCBzaXplKSkgewotICAgICAgICBp
ZiAoY3Jhc2hPbkZhaWx1cmUpCi0gICAgICAgICAgICBCQ1JBU0goKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIERlYnVnSGVh
cDo6cmVhbGxvYyh2b2lkKiBvYmplY3QsIHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3Vs
dCA9IDo6cmVhbGxvYyhvYmplY3QsIHNpemUpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBC
Q1JBU0goKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIERlYnVnSGVhcDo6ZnJlZSh2
b2lkKiBvYmplY3QpCi17Ci0gICAgOjpmcmVlKG9iamVjdCk7Ci19Ci0gICAgCi0jZW5kaWYKLQot
fSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0RlYnVnSGVhcC5oIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0RlYnVnSGVhcC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGE5NmQwNzY3YTM5YjYxM2Q2M2VjNWMz
YWE4YWIyYWI0ZWJmZmNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1h
bGxvYy9EZWJ1Z0hlYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJTdGF0aWNNdXRleC5oIgotI2luY2x1ZGUgPG11dGV4PgotI2lmIEJPUyhEQVJXSU4p
Ci0jaW5jbHVkZSA8bWFsbG9jL21hbGxvYy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBibWFsbG9j
IHsKLSAgICAKLWNsYXNzIERlYnVnSGVhcCB7Ci1wdWJsaWM6Ci0gICAgRGVidWdIZWFwKHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKLSAgICAKLSAgICB2b2lkKiBtYWxsb2Moc2l6ZV90
KTsKLSAgICB2b2lkKiBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QsIGJvb2wgY3Jh
c2hPbkZhaWx1cmUpOwotICAgIHZvaWQqIHJlYWxsb2Modm9pZCosIHNpemVfdCk7Ci0gICAgdm9p
ZCBmcmVlKHZvaWQqKTsKLQotcHJpdmF0ZToKLSNpZiBCT1MoREFSV0lOKQotICAgIG1hbGxvY196
b25lX3QqIG1fem9uZTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9i
bWFsbG9jL0Vudmlyb25tZW50LmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGM3ODA4OWY0OThiNDBiOTc4NmRjNjJkYTk0ZTIyNWQ2M2NkNzcxMTguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0Vudmlyb25tZW50LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJCUGxhdGZvcm0uaCIKLSNpbmNsdWRl
ICJFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8Y3N0cmluZz4K
LSNpZiBCT1MoREFSV0lOKQotI2luY2x1ZGUgPG1hY2gtby9keWxkLmg+Ci0jZWxpZiBCT1MoVU5J
WCkKLSNpbmNsdWRlIDxkbGZjbi5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQot
c3RhdGljIGJvb2wgaXNNYWxsb2NFbnZpcm9ubWVudFZhcmlhYmxlU2V0KCkKLXsKLSAgICBjb25z
dCBjaGFyKiBsaXN0W10gPSB7Ci0gICAgICAgICJNYWxsb2MiLAotICAgICAgICAiTWFsbG9jTG9n
RmlsZSIsCi0gICAgICAgICJNYWxsb2NHdWFyZEVkZ2VzIiwKLSAgICAgICAgIk1hbGxvY0RvTm90
UHJvdGVjdFByZWx1ZGUiLAotICAgICAgICAiTWFsbG9jRG9Ob3RQcm90ZWN0UG9zdGx1ZGUiLAot
ICAgICAgICAiTWFsbG9jU3RhY2tMb2dnaW5nIiwKLSAgICAgICAgIk1hbGxvY1N0YWNrTG9nZ2lu
Z05vQ29tcGFjdCIsCi0gICAgICAgICJNYWxsb2NTdGFja0xvZ2dpbmdEaXJlY3RvcnkiLAotICAg
ICAgICAiTWFsbG9jU2NyaWJibGUiLAotICAgICAgICAiTWFsbG9jQ2hlY2tIZWFwU3RhcnQiLAot
ICAgICAgICAiTWFsbG9jQ2hlY2tIZWFwRWFjaCIsCi0gICAgICAgICJNYWxsb2NDaGVja0hlYXBT
bGVlcCIsCi0gICAgICAgICJNYWxsb2NDaGVja0hlYXBBYm9ydCIsCi0gICAgICAgICJNYWxsb2NF
cnJvckFib3J0IiwKLSAgICAgICAgIk1hbGxvY0NvcnJ1cHRpb25BYm9ydCIsCi0gICAgICAgICJN
YWxsb2NIZWxwIgotICAgIH07Ci0gICAgc2l6ZV90IHNpemUgPSBzaXplb2YobGlzdCkgLyBzaXpl
b2YoY29uc3QgY2hhciopOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIGlmIChnZXRlbnYobGlzdFtpXSkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGlzTGli
Z21hbGxvY0VuYWJsZWQoKQotewotICAgIGNoYXIqIHZhcmlhYmxlID0gZ2V0ZW52KCJEWUxEX0lO
U0VSVF9MSUJSQVJJRVMiKTsKLSAgICBpZiAoIXZhcmlhYmxlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFzdHJzdHIodmFyaWFibGUsICJsaWJnbWFsbG9jIikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgaXNTYW5pdGl6
ZXJFbmFibGVkKCkKLXsKLSNpZiBCT1MoREFSV0lOKQotICAgIHN0YXRpYyBjb25zdCBjaGFyIHNh
bml0aXplclByZWZpeFtdID0gIi9saWJjbGFuZ19ydC4iOwotICAgIHN0YXRpYyBjb25zdCBjaGFy
IGFzYW5OYW1lW10gPSAiYXNhbl8iOwotICAgIHN0YXRpYyBjb25zdCBjaGFyIHRzYW5OYW1lW10g
PSAidHNhbl8iOwotICAgIHVpbnQzMl90IGltYWdlQ291bnQgPSBfZHlsZF9pbWFnZV9jb3VudCgp
OwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBpbWFnZUNvdW50OyArK2kpIHsKLSAgICAg
ICAgY29uc3QgY2hhciogaW1hZ2VOYW1lID0gX2R5bGRfZ2V0X2ltYWdlX25hbWUoaSk7Ci0gICAg
ICAgIGlmICghaW1hZ2VOYW1lKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChj
b25zdCBjaGFyKiBzID0gc3Ryc3RyKGltYWdlTmFtZSwgc2FuaXRpemVyUHJlZml4KSkgewotICAg
ICAgICAgICAgY29uc3QgY2hhciogc2FuaXRpemVyTmFtZSA9IHMgKyBzaXplb2Yoc2FuaXRpemVy
UHJlZml4KSAtIDE7Ci0gICAgICAgICAgICBpZiAoIXN0cm5jbXAoc2FuaXRpemVyTmFtZSwgYXNh
bk5hbWUsIHNpemVvZihhc2FuTmFtZSkgLSAxKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIGlmICghc3RybmNtcChzYW5pdGl6ZXJOYW1lLCB0c2FuTmFtZSwgc2l6
ZW9mKHRzYW5OYW1lKSAtIDEpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSNlbGlmIEJPUyhVTklYKQotICAgIHZvaWQq
IGhhbmRsZSA9IGRsb3BlbihudWxscHRyLCBSVExEX05PVyk7Ci0gICAgaWYgKCFoYW5kbGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIHJlc3VsdCA9ICEhZGxzeW0oaGFuZGxlLCAi
X19hc2FuX2luaXQiKSB8fCAhIWRsc3ltKGhhbmRsZSwgIl9fdHNhbl9pbml0Iik7Ci0gICAgZGxj
bG9zZShoYW5kbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZQotICAgIHJldHVybiBmYWxz
ZTsKLSNlbmRpZgotfQotCi1FbnZpcm9ubWVudDo6RW52aXJvbm1lbnQoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYpCi0gICAgOiBtX2lzRGVidWdIZWFwRW5hYmxlZChjb21wdXRlSXNEZWJ1
Z0hlYXBFbmFibGVkKCkpCi17Ci19Ci0KLWJvb2wgRW52aXJvbm1lbnQ6OmNvbXB1dGVJc0RlYnVn
SGVhcEVuYWJsZWQoKQotewotICAgIGlmIChpc01hbGxvY0Vudmlyb25tZW50VmFyaWFibGVTZXQo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGlzTGliZ21hbGxvY0VuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGlzU2FuaXRpemVyRW5hYmxlZCgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IGJtYWxsb2MKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9k
ZXBlbmRlbmNpZXMvYm1hbGxvYy9FbnZpcm9ubWVudC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0Vudmlyb25tZW50LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YjI2Y2Q5ZDdmZjk3OGQ3NmNjYjE4ODI2NTk1ZWU3MWQx
NDNkZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0Vudmly
b25tZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRW52aXJvbm1lbnRfaAotI2Rl
ZmluZSBFbnZpcm9ubWVudF9oCi0KLSNpbmNsdWRlICJTdGF0aWNNdXRleC5oIgotCi1uYW1lc3Bh
Y2UgYm1hbGxvYyB7Ci0KLWNsYXNzIEVudmlyb25tZW50IHsKLXB1YmxpYzoKLSAgICBFbnZpcm9u
bWVudChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7Ci0gICAgCi0gICAgYm9vbCBpc0Rl
YnVnSGVhcEVuYWJsZWQoKSB7IHJldHVybiBtX2lzRGVidWdIZWFwRW5hYmxlZDsgfQotCi1wcml2
YXRlOgotICAgIGJvb2wgY29tcHV0ZUlzRGVidWdIZWFwRW5hYmxlZCgpOwotCi0gICAgYm9vbCBt
X2lzRGVidWdIZWFwRW5hYmxlZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2Vu
ZGlmIC8vIEVudmlyb25tZW50X2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9GaXhlZFZlY3Rvci5oIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0ZpeGVkVmVjdG9y
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZTBhNzIwMWJkZjk1NDk0NzcyODFl
OGE1NjRiYWJhNzA2NjBiOWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9i
bWFsbG9jL0ZpeGVkVmVjdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZpeGVk
VmVjdG9yX2gKLSNkZWZpbmUgRml4ZWRWZWN0b3JfaAotCi0jaW5jbHVkZSAiQkFzc2VydC5oIgot
I2luY2x1ZGUgPGFycmF5PgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8dHlwZV90cmFp
dHM+Ci0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotLy8gQSByZXBsYWNlbWVudCBmb3Igc3RkOjp2
ZWN0b3IgdGhhdCB1c2VzIGEgZml4ZWQtc2l6ZWQgaW5saW5lIGJhY2tpbmcgc3RvcmUuCi0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBDYXBhY2l0eT4KLWNsYXNzIEZpeGVkVmVjdG9yIHsK
LSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFs
dWUsICJGaXhlZFZlY3RvciBtdXN0IGhhdmUgYSB0cml2aWFsIGRlc3RydWN0b3IuIik7Ci1wdWJs
aWM6Ci0gICAgRml4ZWRWZWN0b3IoY29uc3QgRml4ZWRWZWN0b3ImKSA9IGRlbGV0ZTsKLSAgICBG
aXhlZFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IEZpeGVkVmVjdG9yJikgPSBkZWxldGU7Ci0KLSAg
ICBGaXhlZFZlY3RvcigpOwotCi0gICAgY29uc3QgVCogYmVnaW4oKSBjb25zdCB7IHJldHVybiAm
bV9idWZmZXJbMF07IH0KLSAgICBjb25zdCBUKiBlbmQoKSBjb25zdCB7IHJldHVybiBiZWdpbigp
ICsgc2l6ZSgpOyB9Ci0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQotICAgIHNpemVfdCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIENhcGFjaXR5OyB9Ci0gICAg
Ci0gICAgVCYgb3BlcmF0b3JbXShzaXplX3QpOwotCi0gICAgdm9pZCBwdXNoKGNvbnN0IFQmKTsK
LSAgICB2b2lkIHB1c2goY29uc3QgVCosIGNvbnN0IFQqKTsKLSAgICBUIHBvcCgpOwotCi0gICAg
dm9pZCBzaHJpbmsoVCopOwotICAgIHZvaWQgc2hyaW5rKHNpemVfdCk7Ci0KLSAgICB2b2lkIGNs
ZWFyKCkgeyBzaHJpbmsoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSk7IH0KLSAgICBib29sIGlzRW1w
dHkoKSB7IHJldHVybiAhbV9zaXplOyB9Ci0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1fc2l6ZTsK
LSAgICBzdGQ6OmFycmF5PFQsIENhcGFjaXR5PiBtX2J1ZmZlcjsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBDYXBhY2l0eT4KLWlubGluZSBGaXhlZFZlY3RvcjxULCBDYXBhY2l0
eT46OkZpeGVkVmVjdG9yKCkKLSAgICA6IG1fc2l6ZSgwKQotewotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgQ2FwYWNpdHk+Ci1pbmxpbmUgVCYgRml4ZWRWZWN0b3I8VCwgQ2FwYWNp
dHk+OjpvcGVyYXRvcltdKHNpemVfdCBpKQotewotICAgIEJBU1NFUlQoaSA8IG1fc2l6ZSk7Ci0g
ICAgcmV0dXJuIG1fYnVmZmVyW2ldOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
Q2FwYWNpdHk+Ci1pbmxpbmUgdm9pZCBGaXhlZFZlY3RvcjxULCBDYXBhY2l0eT46OnB1c2goY29u
c3QgVCYgdmFsdWUpCi17Ci0gICAgQkFTU0VSVChtX3NpemUgPCBDYXBhY2l0eSk7Ci0gICAgbV9i
dWZmZXJbbV9zaXplKytdID0gdmFsdWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBDYXBhY2l0eT4KLWlubGluZSB2b2lkIEZpeGVkVmVjdG9yPFQsIENhcGFjaXR5Pjo6cHVzaChj
b25zdCBUKiBiZWdpbiwgY29uc3QgVCogZW5kKQotewotICAgIGZvciAoY29uc3QgVCogaXQgPSBi
ZWdpbjsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBwdXNoKCppdCk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBDYXBhY2l0eT4KLWlubGluZSBUIEZpeGVkVmVjdG9yPFQsIENh
cGFjaXR5Pjo6cG9wKCkKLXsKLSAgICBCQVNTRVJUKG1fc2l6ZSk7Ci0gICAgcmV0dXJuIG1fYnVm
ZmVyWy0tbV9zaXplXTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IENhcGFjaXR5
PgotaW5saW5lIHZvaWQgRml4ZWRWZWN0b3I8VCwgQ2FwYWNpdHk+OjpzaHJpbmsoc2l6ZV90IHNp
emUpCi17Ci0gICAgQkFTU0VSVChzaXplIDw9IG1fc2l6ZSk7Ci0gICAgbV9zaXplID0gc2l6ZTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IENhcGFjaXR5PgotaW5saW5lIHZvaWQg
Rml4ZWRWZWN0b3I8VCwgQ2FwYWNpdHk+OjpzaHJpbmsoVCogZW5kKQotewotICAgIHNocmluayhl
bmQgLSBiZWdpbigpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8g
Rml4ZWRWZWN0b3JfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0dpZ2FjYWdlLmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9HaWdhY2FnZS5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMWI5ZWVmN2QyZTZiZjdhOTA2Y2ZiNzhhY2RmYzNi
OTA3OTRjZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0dp
Z2FjYWdlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJHaWdhY2FnZS5oIgot
Ci0jaW5jbHVkZSAiRW52aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCi0jaW5j
bHVkZSAiVk1BbGxvY2F0ZS5oIgotI2luY2x1ZGUgIlZlY3Rvci5oIgotI2luY2x1ZGUgImJtYWxs
b2MuaCIKLSNpbmNsdWRlIDxtdXRleD4KLQotLy8gRklYTUU6IEFzayBkeWxkIHRvIHB1dCB0aGlz
IGluIGl0cyBvd24gcGFnZSwgYW5kIG1wcm90ZWN0IHRoZSBwYWdlIGFmdGVyIHdlIGVuc3VyZSB0
aGUgZ2lnYWNhZ2UuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc0OTcyCi12b2lkKiBnX2dpZ2FjYWdlQmFzZVB0cjsKLQotdXNpbmcgbmFtZXNwYWNlIGJtYWxs
b2M7Ci0KLW5hbWVzcGFjZSBHaWdhY2FnZSB7Ci0KLXN0cnVjdCBDYWxsYmFjayB7Ci0gICAgQ2Fs
bGJhY2soKSB7IH0KLSAgICAKLSAgICBDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSwg
dm9pZCAqYXJndW1lbnQpCi0gICAgICAgIDogZnVuY3Rpb24oZnVuY3Rpb24pCi0gICAgICAgICwg
YXJndW1lbnQoYXJndW1lbnQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkICgqZnVuY3Rp
b24pKHZvaWQqKSB7IG51bGxwdHIgfTsKLSAgICB2b2lkKiBhcmd1bWVudCB7IG51bGxwdHIgfTsK
LX07Ci0KLXN0cnVjdCBDYWxsYmFja3MgewotICAgIENhbGxiYWNrcyhzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTXV0ZXg+JikgeyB9Ci0gICAgCi0gICAgVmVjdG9yPENhbGxiYWNrPiBjYWxsYmFja3M7
Ci19OwotCi12b2lkIGVuc3VyZUdpZ2FjYWdlKCkKLXsKLSNpZiBHSUdBQ0FHRV9FTkFCTEVECi0g
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKAot
ICAgICAgICBvbmNlRmxhZywKLSAgICAgICAgW10gewotICAgICAgICAgICAgaWYgKCFzaG91bGRC
ZUVuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHZvaWQqIGJhc2VQdHIgPSB0cnlWTUFsbG9jYXRlKEdJR0FDQUdFX1NJWkUsIEdJR0FD
QUdFX1NJWkUgKyBHSUdBQ0FHRV9SVU5XQVkpOwotICAgICAgICAgICAgaWYgKCFiYXNlUHRyKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdm1EZWFs
bG9jYXRlUGh5c2ljYWxQYWdlcyhiYXNlUHRyLCBHSUdBQ0FHRV9TSVpFICsgR0lHQUNBR0VfUlVO
V0FZKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZ19naWdhY2FnZUJhc2VQdHIgPSBiYXNl
UHRyOwotICAgICAgICB9KTsKLSNlbmRpZiAvLyBHSUdBQ0FHRV9FTkFCTEVECi19Ci0KLXZvaWQg
ZGlzYWJsZUdpZ2FjYWdlKCkKLXsKLSAgICBlbnN1cmVHaWdhY2FnZSgpOwotICAgIGlmICghZ19n
aWdhY2FnZUJhc2VQdHIpIHsKLSAgICAgICAgLy8gSXQgd2FzIG5ldmVyIGVuYWJsZWQuIFRoYXQg
bWVhbnMgdGhhdCB3ZSBuZXZlciBldmVuIHNhdmVkIGFueSBjYWxsYmFja3MuIE9yLCB3ZSBoYWQg
YWxyZWFkeSBkaXNhYmxlZAotICAgICAgICAvLyBpdCBiZWZvcmUsIGFuZCBhbHJlYWR5IGNhbGxl
ZCB0aGUgY2FsbGJhY2tzLgotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIENhbGxi
YWNrcyYgY2FsbGJhY2tzID0gKlBlclByb2Nlc3M8Q2FsbGJhY2tzPjo6Z2V0KCk7Ci0gICAgc3Rk
Ojp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPENhbGxiYWNrcz46Om11
dGV4KCkpOwotICAgIGZvciAoQ2FsbGJhY2smIGNhbGxiYWNrIDogY2FsbGJhY2tzLmNhbGxiYWNr
cykKLSAgICAgICAgY2FsbGJhY2suZnVuY3Rpb24oY2FsbGJhY2suYXJndW1lbnQpOwotICAgIGNh
bGxiYWNrcy5jYWxsYmFja3Muc2hyaW5rKDApOwotICAgIGdfZ2lnYWNhZ2VCYXNlUHRyID0gbnVs
bHB0cjsKLX0KLQotdm9pZCBhZGREaXNhYmxlQ2FsbGJhY2sodm9pZCAoKmZ1bmN0aW9uKSh2b2lk
KiksIHZvaWQqIGFyZ3VtZW50KQotewotICAgIGVuc3VyZUdpZ2FjYWdlKCk7Ci0gICAgaWYgKCFn
X2dpZ2FjYWdlQmFzZVB0cikgewotICAgICAgICAvLyBJdCB3YXMgYWxyZWFkeSBkaXNhYmxlZCBv
ciB3ZSB3ZXJlIG5ldmVyIGFibGUgdG8gZW5hYmxlIGl0LgotICAgICAgICBmdW5jdGlvbihhcmd1
bWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQ2FsbGJhY2tzJiBjYWxs
YmFja3MgPSAqUGVyUHJvY2VzczxDYWxsYmFja3M+OjpnZXQoKTsKLSAgICBzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8Q2FsbGJhY2tzPjo6bXV0ZXgoKSk7Ci0g
ICAgY2FsbGJhY2tzLmNhbGxiYWNrcy5wdXNoKENhbGxiYWNrKGZ1bmN0aW9uLCBhcmd1bWVudCkp
OwotfQotCi12b2lkIHJlbW92ZURpc2FibGVDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQq
KSwgdm9pZCogYXJndW1lbnQpCi17Ci0gICAgQ2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUGVyUHJv
Y2VzczxDYWxsYmFja3M+OjpnZXQoKTsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4
PiBsb2NrKFBlclByb2Nlc3M8Q2FsbGJhY2tzPjo6bXV0ZXgoKSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjYWxsYmFja3MuY2FsbGJhY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChjYWxsYmFja3MuY2FsbGJhY2tzW2ldLmZ1bmN0aW9uID09IGZ1bmN0aW9uCi0gICAgICAgICAg
ICAmJiBjYWxsYmFja3MuY2FsbGJhY2tzW2ldLmFyZ3VtZW50ID09IGFyZ3VtZW50KSB7Ci0gICAg
ICAgICAgICBjYWxsYmFja3MuY2FsbGJhY2tzW2ldID0gY2FsbGJhY2tzLmNhbGxiYWNrcy5sYXN0
KCk7Ci0gICAgICAgICAgICBjYWxsYmFja3MuY2FsbGJhY2tzLnBvcCgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIHNob3VsZEJlRW5hYmxlZCgpCi17
Ci0gICAgcmV0dXJuIEdJR0FDQUdFX0VOQUJMRUQgJiYgIVBlclByb2Nlc3M8RW52aXJvbm1lbnQ+
OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEdpZ2Fj
YWdlCi0KLQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
ZGVwZW5kZW5jaWVzL2JtYWxsb2MvR2lnYWNhZ2UuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9HaWdhY2FnZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4Mzk5OGY5NjY5ZmUwMTgxMGQxZGQ0Yjc4M2UwMTFlMmE3M2VlYWU1
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9HaWdhY2FnZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkJFeHBvcnQu
aCIKLSNpbmNsdWRlICJCUGxhdGZvcm0uaCIKLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotCi0vLyBU
aGUgR2lnYWNhZ2UgaXMgNjRHQi4KLSNkZWZpbmUgR0lHQUNBR0VfTUFTSyAweGZmZmZmZmZmZmxs
dQotI2RlZmluZSBHSUdBQ0FHRV9TSVpFIChHSUdBQ0FHRV9NQVNLICsgMSkKLQotLy8gRklYTUU6
IENvbnNpZGVyIG1ha2luZyB0aGlzIDMyR0IsIGluIGNhc2UgdW5zaWduZWQgMzItYml0IGluZGlj
ZXMgZmluZCB0aGVpciB3YXkgaW50byBpbmRleGVkIGFjY2Vzc2VzLgotLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTA2MgotI2RlZmluZSBHSUdBQ0FHRV9SVU5X
QVkgKDE2bGx1ICogMTAyNCAqIDEwMjQgKiAxMDI0KQotCi0jaWYgQk9TKERBUldJTikgJiYgQkNQ
VShYODZfNjQpCi0jZGVmaW5lIEdJR0FDQUdFX0VOQUJMRUQgMQotI2Vsc2UKLSNkZWZpbmUgR0lH
QUNBR0VfRU5BQkxFRCAwCi0jZW5kaWYKLQotZXh0ZXJuICJDIiBCRVhQT1JUIHZvaWQqIGdfZ2ln
YWNhZ2VCYXNlUHRyOwotCi1uYW1lc3BhY2UgR2lnYWNhZ2UgewotCi1CRVhQT1JUIHZvaWQgZW5z
dXJlR2lnYWNhZ2UoKTsKLQotQkVYUE9SVCB2b2lkIGRpc2FibGVHaWdhY2FnZSgpOwotCi0vLyBU
aGlzIHdpbGwgY2FsbCB0aGUgZGlzYWJsZSBjYWxsYmFjayBpbW1lZGlhdGVseSBpZiB0aGUgR2ln
YWNhZ2UgaXMgY3VycmVudGx5IGRpc2FibGVkLgotQkVYUE9SVCB2b2lkIGFkZERpc2FibGVDYWxs
YmFjayh2b2lkICgqKSh2b2lkKiksIHZvaWQqKTsKLUJFWFBPUlQgdm9pZCByZW1vdmVEaXNhYmxl
Q2FsbGJhY2sodm9pZCAoKikodm9pZCopLCB2b2lkKik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1UKiBjYWdlZChUKiBwdHIpCi17Ci0gICAgdm9pZCogZ2lnYWNhZ2VCYXNlUHRyID0gZ19naWdh
Y2FnZUJhc2VQdHI7Ci0gICAgaWYgKCFnaWdhY2FnZUJhc2VQdHIpCi0gICAgICAgIHJldHVybiBw
dHI7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KAotICAgICAgICByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oZ2lnYWNhZ2VCYXNlUHRyKSArICgKLSAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpICYgc3RhdGljX2Nhc3Q8dWludHB0cl90PihHSUdB
Q0FHRV9NQVNLKSkpOwotfQotCi1pbmxpbmUgYm9vbCBpc0NhZ2VkKGNvbnN0IHZvaWQqIHB0cikK
LXsKLSAgICByZXR1cm4gY2FnZWQocHRyKSA9PSBwdHI7Ci19Ci0KLUJFWFBPUlQgYm9vbCBzaG91
bGRCZUVuYWJsZWQoKTsKLQotfSAvLyBuYW1lc3BhY2UgR2lnYWNhZ2UKLQotCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2Mv
SGVhcC5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVz
L2JtYWxsb2MvSGVhcC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNTA1OGFj
MTQyZjI0Yzc1N2FlNDM5ZGJjMjljNTE2MjMzNmVkZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3Rm
L2RlcGVuZGVuY2llcy9ibWFsbG9jL0hlYXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTY3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiSGVhcC5oIgotCi0jaW5jbHVkZSAiQXZhaWxhYmxlTWVtb3J5LmgiCi0jaW5j
bHVkZSAiQnVtcEFsbG9jYXRvci5oIgotI2luY2x1ZGUgIkNodW5rLmgiCi0jaW5jbHVkZSAiRW52
aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJHaWdhY2FnZS5oIgotI2luY2x1ZGUgIkRlYnVnSGVhcC5o
IgotI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKLSNpbmNsdWRlICJTY2F2ZW5nZXIuaCIKLSNpbmNs
dWRlICJTbWFsbExpbmUuaCIKLSNpbmNsdWRlICJTbWFsbFBhZ2UuaCIKLSNpbmNsdWRlICJWTUhl
YXAuaCIKLSNpbmNsdWRlICJibWFsbG9jLmgiCi0jaW5jbHVkZSA8dGhyZWFkPgotCi1uYW1lc3Bh
Y2UgYm1hbGxvYyB7Ci0KLUhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwgc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYpCi0gICAgOiBtX2tpbmQoa2luZCkKLSAgICAsIG1fdm1QYWdlU2l6ZVBo
eXNpY2FsKHZtUGFnZVNpemVQaHlzaWNhbCgpKQotICAgICwgbV9zY2F2ZW5nZXIoKnRoaXMsICZI
ZWFwOjpjb25jdXJyZW50U2NhdmVuZ2UpCi0gICAgLCBtX2RlYnVnSGVhcChudWxscHRyKQotewot
ICAgIFJFTEVBU0VfQkFTU0VSVCh2bVBhZ2VTaXplUGh5c2ljYWwoKSA+PSBzbWFsbFBhZ2VTaXpl
KTsKLSAgICBSRUxFQVNFX0JBU1NFUlQodm1QYWdlU2l6ZSgpID49IHZtUGFnZVNpemVQaHlzaWNh
bCgpKTsKLQotICAgIGluaXRpYWxpemVMaW5lTWV0YWRhdGEoKTsKLSAgICBpbml0aWFsaXplUGFn
ZU1ldGFkYXRhKCk7Ci0gICAgCi0gICAgaWYgKFBlclByb2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQo
KS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpCi0gICAgICAgIG1fZGVidWdIZWFwID0gUGVyUHJvY2Vz
czxEZWJ1Z0hlYXA+OjpnZXQoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgR2lnYWNhZ2U6OmVuc3Vy
ZUdpZ2FjYWdlKCk7Ci0jaWYgR0lHQUNBR0VfRU5BQkxFRAotICAgICAgICBpZiAodXNpbmdHaWdh
Y2FnZSgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0JBU1NFUlQoZ19naWdhY2FnZUJhc2VQdHIp
OwotICAgICAgICAgICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2UoZ19naWdhY2FnZUJhc2VQ
dHIsIEdJR0FDQUdFX1NJWkUsIDApKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAot
ICAgIFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCk7Ci19Ci0KLWJvb2wgSGVhcDo6dXNpbmdH
aWdhY2FnZSgpCi17Ci0gICAgcmV0dXJuIG1fa2luZCA9PSBIZWFwS2luZDo6R2lnYWNhZ2UgJiYg
Z19naWdhY2FnZUJhc2VQdHI7Ci19Ci0KLXZvaWQgSGVhcDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0
YSgpCi17Ci0gICAgc2l6ZV90IHNpemVDbGFzc0NvdW50ID0gYm1hbGxvYzo6c2l6ZUNsYXNzKHNt
YWxsTGluZVNpemUpOwotICAgIHNpemVfdCBzbWFsbExpbmVDb3VudCA9IG1fdm1QYWdlU2l6ZVBo
eXNpY2FsIC8gc21hbGxMaW5lU2l6ZTsKLSAgICBtX3NtYWxsTGluZU1ldGFkYXRhLmdyb3coc2l6
ZUNsYXNzQ291bnQgKiBzbWFsbExpbmVDb3VudCk7Ci0KLSAgICBmb3IgKHNpemVfdCBzaXplQ2xh
c3MgPSAwOyBzaXplQ2xhc3MgPCBzaXplQ2xhc3NDb3VudDsgKytzaXplQ2xhc3MpIHsKLSAgICAg
ICAgc2l6ZV90IHNpemUgPSBvYmplY3RTaXplKHNpemVDbGFzcyk7Ci0gICAgICAgIExpbmVNZXRh
ZGF0YSogcGFnZU1ldGFkYXRhID0gJm1fc21hbGxMaW5lTWV0YWRhdGFbc2l6ZUNsYXNzICogc21h
bGxMaW5lQ291bnRdOwotCi0gICAgICAgIHNpemVfdCBvYmplY3QgPSAwOwotICAgICAgICBzaXpl
X3QgbGluZSA9IDA7Ci0gICAgICAgIHdoaWxlIChvYmplY3QgPCBtX3ZtUGFnZVNpemVQaHlzaWNh
bCkgewotICAgICAgICAgICAgbGluZSA9IG9iamVjdCAvIHNtYWxsTGluZVNpemU7Ci0gICAgICAg
ICAgICBzaXplX3QgbGVmdG92ZXIgPSBvYmplY3QgJSBzbWFsbExpbmVTaXplOwotCi0gICAgICAg
ICAgICBzaXplX3Qgb2JqZWN0Q291bnQ7Ci0gICAgICAgICAgICBzaXplX3QgcmVtYWluZGVyOwot
ICAgICAgICAgICAgZGl2aWRlUm91bmRpbmdVcChzbWFsbExpbmVTaXplIC0gbGVmdG92ZXIsIHNp
emUsIG9iamVjdENvdW50LCByZW1haW5kZXIpOwotCi0gICAgICAgICAgICBwYWdlTWV0YWRhdGFb
bGluZV0gPSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGxlZnRvdmVyKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4ob2JqZWN0Q291bnQpIH07Ci0KLSAgICAgICAgICAgIG9iamVjdCAr
PSBvYmplY3RDb3VudCAqIHNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEb24ndCBhbGxv
dyB0aGUgbGFzdCBvYmplY3QgaW4gYSBwYWdlIHRvIGVzY2FwZSB0aGUgcGFnZS4KLSAgICAgICAg
aWYgKG9iamVjdCA+IG1fdm1QYWdlU2l6ZVBoeXNpY2FsKSB7Ci0gICAgICAgICAgICBCQVNTRVJU
KHBhZ2VNZXRhZGF0YVtsaW5lXS5vYmplY3RDb3VudCk7Ci0gICAgICAgICAgICAtLXBhZ2VNZXRh
ZGF0YVtsaW5lXS5vYmplY3RDb3VudDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBIZWFw
Ojppbml0aWFsaXplUGFnZU1ldGFkYXRhKCkKLXsKLSAgICBhdXRvIGNvbXB1dGVQYWdlU2l6ZSA9
IFsmXShzaXplX3Qgc2l6ZUNsYXNzKSB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gb2JqZWN0U2l6
ZShzaXplQ2xhc3MpOwotICAgICAgICBpZiAoc2l6ZUNsYXNzIDwgYm1hbGxvYzo6c2l6ZUNsYXNz
KHNtYWxsTGluZVNpemUpKQotICAgICAgICAgICAgcmV0dXJuIG1fdm1QYWdlU2l6ZVBoeXNpY2Fs
OwotCi0gICAgICAgIGZvciAoc2l6ZV90IHBhZ2VTaXplID0gbV92bVBhZ2VTaXplUGh5c2ljYWw7
Ci0gICAgICAgICAgICBwYWdlU2l6ZSA8IHBhZ2VTaXplTWF4OwotICAgICAgICAgICAgcGFnZVNp
emUgKz0gbV92bVBhZ2VTaXplUGh5c2ljYWwpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQkFTU0VS
VChwYWdlU2l6ZSA8PSBjaHVua1NpemUgLyAyKTsKLSAgICAgICAgICAgIHNpemVfdCB3YXN0ZSA9
IHBhZ2VTaXplICUgc2l6ZTsKLSAgICAgICAgICAgIGlmICh3YXN0ZSA8PSBwYWdlU2l6ZSAvIHBh
Z2VTaXplV2FzdGVGYWN0b3IpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2VTaXplOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gcGFnZVNpemVNYXg7Ci0gICAgfTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZUNsYXNzQ291bnQ7ICsraSkKLSAgICAgICAg
bV9wYWdlQ2xhc3Nlc1tpXSA9IChjb21wdXRlUGFnZVNpemUoaSkgLSAxKSAvIHNtYWxsUGFnZVNp
emU7Ci19Ci0KLXZvaWQgSGVhcDo6Y29uY3VycmVudFNjYXZlbmdlKCkKLXsKLSAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2sobXV0ZXgoKSk7Ci0KLSNpZiBCT1MoREFSV0lOKQot
ICAgIHB0aHJlYWRfc2V0X3Fvc19jbGFzc19zZWxmX25wKFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6
Z2V0RmFzdENhc2UoKS0+cmVxdWVzdGVkU2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MoKSwgMCk7Ci0j
ZW5kaWYKLQotICAgIGlmIChtX2lzR3Jvd2luZyAmJiAhaXNVbmRlck1lbW9yeVByZXNzdXJlKCkp
IHsKLSAgICAgICAgbV9pc0dyb3dpbmcgPSBmYWxzZTsKLSAgICAgICAgbV9zY2F2ZW5nZXIucnVu
U29vbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHNjYXZlbmdlKGxvY2sp
OwotfQotCi12b2lkIEhlYXA6OnNjYXZlbmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
KQotewotICAgIGZvciAoYXV0byYgbGlzdCA6IG1fZnJlZVBhZ2VzKSB7Ci0gICAgICAgIGZvciAo
YXV0byogY2h1bmsgOiBsaXN0KSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8qIHBhZ2UgOiBjaHVu
ay0+ZnJlZVBhZ2VzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhZ2UtPmhhc1BoeXNpY2Fs
UGFnZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAg
ICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCks
IHBhZ2VTaXplKCZsaXN0IC0gJm1fZnJlZVBhZ2VzWzBdKSk7Ci0KLSAgICAgICAgICAgICAgICBw
YWdlLT5zZXRIYXNQaHlzaWNhbFBhZ2VzKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBmb3IgKGF1dG8mIGxpc3QgOiBtX2NodW5rQ2FjaGUpIHsKLSAg
ICAgICAgd2hpbGUgKCFsaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGRlYWxsb2NhdGVTbWFs
bENodW5rKGxpc3QucG9wKCksICZsaXN0IC0gJm1fY2h1bmtDYWNoZVswXSk7Ci0gICAgfQotCi0g
ICAgZm9yIChhdXRvJiByYW5nZSA6IG1fbGFyZ2VGcmVlKSB7Ci0gICAgICAgIHZtRGVhbGxvY2F0
ZVBoeXNpY2FsUGFnZXNTbG9wcHkocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgpKTsKLQotICAg
ICAgICByYW5nZS5zZXRQaHlzaWNhbFNpemUoMCk7Ci0gICAgfQotfQotCi12b2lkIEhlYXA6OnNj
aGVkdWxlU2NhdmVuZ2VySWZVbmRlck1lbW9yeVByZXNzdXJlKHNpemVfdCBieXRlcykKLXsKLSAg
ICBtX3NjYXZlbmdlckJ5dGVzICs9IGJ5dGVzOwotICAgIGlmIChtX3NjYXZlbmdlckJ5dGVzIDwg
c2NhdmVuZ2VyQnl0ZXNQZXJNZW1vcnlQcmVzc3VyZUNoZWNrKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3NjYXZlbmdlckJ5dGVzID0gMDsKLQotICAgIGlmIChtX3NjYXZlbmdlci53aWxsUnVu
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghaXNVbmRlck1lbW9yeVByZXNzdXJlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNHcm93aW5nID0gZmFsc2U7Ci0gICAgbV9zY2F2
ZW5nZXIucnVuKCk7Ci19Ci0KLXZvaWQgSGVhcDo6c2NoZWR1bGVTY2F2ZW5nZXIoc2l6ZV90IGJ5
dGVzKQotewotICAgIHNjaGVkdWxlU2NhdmVuZ2VySWZVbmRlck1lbW9yeVByZXNzdXJlKGJ5dGVz
KTsKLQotICAgIGlmIChtX3NjYXZlbmdlci53aWxsUnVuU29vbigpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2lzR3Jvd2luZyA9IGZhbHNlOwotICAgIG1fc2NhdmVuZ2VyLnJ1blNvb24oKTsK
LX0KLQotdm9pZCBIZWFwOjpkZWFsbG9jYXRlTGluZUNhY2hlKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mLCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSkKLXsKLSAgICBmb3IgKGF1dG8mIGxpc3Qg
OiBsaW5lQ2FjaGUpIHsKLSAgICAgICAgd2hpbGUgKCFsaXN0LmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgc2l6ZV90IHNpemVDbGFzcyA9ICZsaXN0IC0gJmxpbmVDYWNoZVswXTsKLSAgICAgICAg
ICAgIG1fbGluZUNhY2hlW3NpemVDbGFzc10ucHVzaChsaXN0LnBvcEZyb250KCkpOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayhzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgcGFnZUNsYXNzKQotewotICAgIHNpemVf
dCBwYWdlU2l6ZSA9IGJtYWxsb2M6OnBhZ2VTaXplKHBhZ2VDbGFzcyk7Ci0KLSAgICBDaHVuayog
Y2h1bmsgPSBbJl0oKSB7Ci0gICAgICAgIGlmICghbV9jaHVua0NhY2hlW3BhZ2VDbGFzc10uaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fY2h1bmtDYWNoZVtwYWdlQ2xhc3NdLnBvcCgp
OwotCi0gICAgICAgIHZvaWQqIG1lbW9yeSA9IGFsbG9jYXRlTGFyZ2UobG9jaywgY2h1bmtTaXpl
LCBjaHVua1NpemUpOwotCi0gICAgICAgIENodW5rKiBjaHVuayA9IG5ldyAobWVtb3J5KSBDaHVu
ayhwYWdlU2l6ZSk7Ci0KLSAgICAgICAgbV9vYmplY3RUeXBlcy5zZXQoY2h1bmssIE9iamVjdFR5
cGU6OlNtYWxsKTsKLQotICAgICAgICBmb3JFYWNoUGFnZShjaHVuaywgcGFnZVNpemUsIFsmXShT
bWFsbFBhZ2UqIHBhZ2UpIHsKLSAgICAgICAgICAgIHBhZ2UtPnNldEhhc1BoeXNpY2FsUGFnZXMo
dHJ1ZSk7Ci0gICAgICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7Ci0g
ICAgICAgICAgICBjaHVuay0+ZnJlZVBhZ2VzKCkucHVzaChwYWdlKTsKLSAgICAgICAgfSk7Ci0g
ICAgICAgIAotICAgICAgICBzY2hlZHVsZVNjYXZlbmdlcigwKTsKLQotICAgICAgICByZXR1cm4g
Y2h1bms7Ci0gICAgfSgpOwotICAgIAotICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10ucHVzaChj
aHVuayk7Ci19Ci0KLXZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoQ2h1bmsqIGNodW5r
LCBzaXplX3QgcGFnZUNsYXNzKQotewotICAgIG1fb2JqZWN0VHlwZXMuc2V0KGNodW5rLCBPYmpl
Y3RUeXBlOjpMYXJnZSk7Ci0gICAgCi0gICAgc2l6ZV90IHNpemUgPSBtX2xhcmdlQWxsb2NhdGVk
LnJlbW92ZShjaHVuayk7Ci0KLSAgICBib29sIGhhc1BoeXNpY2FsUGFnZXMgPSB0cnVlOwotICAg
IGZvckVhY2hQYWdlKGNodW5rLCBwYWdlU2l6ZShwYWdlQ2xhc3MpLCBbJl0oU21hbGxQYWdlKiBw
YWdlKSB7Ci0gICAgICAgIGlmICghcGFnZS0+aGFzUGh5c2ljYWxQYWdlcygpKQotICAgICAgICAg
ICAgaGFzUGh5c2ljYWxQYWdlcyA9IGZhbHNlOwotICAgIH0pOwotICAgIHNpemVfdCBwaHlzaWNh
bFNpemUgPSBoYXNQaHlzaWNhbFBhZ2VzID8gc2l6ZSA6IDA7Ci0KLSAgICBtX2xhcmdlRnJlZS5h
ZGQoTGFyZ2VSYW5nZShjaHVuaywgc2l6ZSwgcGh5c2ljYWxTaXplKSk7Ci19Ci0KLVNtYWxsUGFn
ZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYg
bG9jaywgc2l6ZV90IHNpemVDbGFzcywgTGluZUNhY2hlJiBsaW5lQ2FjaGUpCi17Ci0gICAgaWYg
KCFsaW5lQ2FjaGVbc2l6ZUNsYXNzXS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBsaW5lQ2Fj
aGVbc2l6ZUNsYXNzXS5wb3BGcm9udCgpOwotCi0gICAgaWYgKCFtX2xpbmVDYWNoZVtzaXplQ2xh
c3NdLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fbGluZUNhY2hlW3NpemVDbGFzc10ucG9w
RnJvbnQoKTsKLQotICAgIG1faXNHcm93aW5nID0gdHJ1ZTsKLSAgICAKLSAgICBTbWFsbFBhZ2Uq
IHBhZ2UgPSBbJl0oKSB7Ci0gICAgICAgIHNpemVfdCBwYWdlQ2xhc3MgPSBtX3BhZ2VDbGFzc2Vz
W3NpemVDbGFzc107Ci0gICAgICAgIAotICAgICAgICBpZiAobV9mcmVlUGFnZXNbcGFnZUNsYXNz
XS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhbGxvY2F0ZVNtYWxsQ2h1bmsobG9jaywgcGFnZUNs
YXNzKTsKLQotICAgICAgICBDaHVuayogY2h1bmsgPSBtX2ZyZWVQYWdlc1twYWdlQ2xhc3NdLnRh
aWwoKTsKLQotICAgICAgICBjaHVuay0+cmVmKCk7Ci0KLSAgICAgICAgU21hbGxQYWdlKiBwYWdl
ID0gY2h1bmstPmZyZWVQYWdlcygpLnBvcCgpOwotICAgICAgICBpZiAoY2h1bmstPmZyZWVQYWdl
cygpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fZnJlZVBhZ2VzW3BhZ2VDbGFzc10ucmVtb3Zl
KGNodW5rKTsKLQotICAgICAgICBpZiAoIXBhZ2UtPmhhc1BoeXNpY2FsUGFnZXMoKSkgewotICAg
ICAgICAgICAgc2NoZWR1bGVTY2F2ZW5nZXJJZlVuZGVyTWVtb3J5UHJlc3N1cmUocGFnZVNpemUo
cGFnZUNsYXNzKSk7Ci0KLSAgICAgICAgICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5
KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKHBhZ2VDbGFzcykpOwotICAgICAgICAg
ICAgcGFnZS0+c2V0SGFzUGh5c2ljYWxQYWdlcyh0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBwYWdlOwotICAgIH0oKTsKLQotICAgIHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xh
c3MpOwotICAgIHJldHVybiBwYWdlOwotfQotCi12b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExp
bmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgT2JqZWN0IG9iamVjdCwgTGlu
ZUNhY2hlJiBsaW5lQ2FjaGUpCi17Ci0gICAgQkFTU0VSVCghb2JqZWN0LmxpbmUoKS0+cmVmQ291
bnQobG9jaykpOwotICAgIFNtYWxsUGFnZSogcGFnZSA9IG9iamVjdC5wYWdlKCk7Ci0gICAgcGFn
ZS0+ZGVyZWYobG9jayk7Ci0KLSAgICBpZiAoIXBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSkgewot
ICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7Ci0gICAgICAgIGxpbmVD
YWNoZVtwYWdlLT5zaXplQ2xhc3MoKV0ucHVzaChwYWdlKTsKLSAgICB9Ci0KLSAgICBpZiAocGFn
ZS0+cmVmQ291bnQobG9jaykpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBzaXplQ2xh
c3MgPSBwYWdlLT5zaXplQ2xhc3MoKTsKLSAgICBzaXplX3QgcGFnZUNsYXNzID0gbV9wYWdlQ2xh
c3Nlc1tzaXplQ2xhc3NdOwotCi0gICAgTGlzdDxTbWFsbFBhZ2U+OjpyZW1vdmUocGFnZSk7IC8v
ICdwYWdlJyBtYXkgYmUgaW4gYW55IHRocmVhZCdzIGxpbmUgY2FjaGUuCi0gICAgCi0gICAgQ2h1
bmsqIGNodW5rID0gQ2h1bms6OmdldChwYWdlKTsKLSAgICBpZiAoY2h1bmstPmZyZWVQYWdlcygp
LmlzRW1wdHkoKSkKLSAgICAgICAgbV9mcmVlUGFnZXNbcGFnZUNsYXNzXS5wdXNoKGNodW5rKTsK
LSAgICBjaHVuay0+ZnJlZVBhZ2VzKCkucHVzaChwYWdlKTsKLQotICAgIGNodW5rLT5kZXJlZigp
OwotCi0gICAgaWYgKCFjaHVuay0+cmVmQ291bnQoKSkgewotICAgICAgICBtX2ZyZWVQYWdlc1tw
YWdlQ2xhc3NdLnJlbW92ZShjaHVuayk7Ci0KLSAgICAgICAgaWYgKCFtX2NodW5rQ2FjaGVbcGFn
ZUNsYXNzXS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBkZWFsbG9jYXRlU21hbGxDaHVuayhtX2No
dW5rQ2FjaGVbcGFnZUNsYXNzXS5wb3AoKSwgcGFnZUNsYXNzKTsKLQotICAgICAgICBtX2NodW5r
Q2FjaGVbcGFnZUNsYXNzXS5wdXNoKGNodW5rKTsKLSAgICB9Ci0gICAgCi0gICAgc2NoZWR1bGVT
Y2F2ZW5nZXIocGFnZVNpemUocGFnZUNsYXNzKSk7Ci19Ci0KLXZvaWQgSGVhcDo6YWxsb2NhdGVT
bWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKAotICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mIGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsCi0gICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9y
LCBCdW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSwKLSAgICBMaW5lQ2FjaGUmIGxpbmVDYWNoZSkK
LXsKLSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBhbGxvY2F0ZVNtYWxsUGFnZShsb2NrLCBzaXplQ2xh
c3MsIGxpbmVDYWNoZSk7Ci0gICAgU21hbGxMaW5lKiBsaW5lcyA9IHBhZ2UtPmJlZ2luKCk7Ci0g
ICAgQkFTU0VSVChwYWdlLT5oYXNGcmVlTGluZXMobG9jaykpOwotICAgIHNpemVfdCBzbWFsbExp
bmVDb3VudCA9IG1fdm1QYWdlU2l6ZVBoeXNpY2FsIC8gc21hbGxMaW5lU2l6ZTsKLSAgICBMaW5l
TWV0YWRhdGEqIHBhZ2VNZXRhZGF0YSA9ICZtX3NtYWxsTGluZU1ldGFkYXRhW3NpemVDbGFzcyAq
IHNtYWxsTGluZUNvdW50XTsKLSAgICAKLSAgICBhdXRvIGZpbmRTbWFsbEJ1bXBSYW5nZSA9IFsm
XShzaXplX3QmIGxpbmVOdW1iZXIpIHsKLSAgICAgICAgZm9yICggOyBsaW5lTnVtYmVyIDwgc21h
bGxMaW5lQ291bnQ7ICsrbGluZU51bWJlcikgewotICAgICAgICAgICAgaWYgKCFsaW5lc1tsaW5l
TnVtYmVyXS5yZWZDb3VudChsb2NrKSkgewotICAgICAgICAgICAgICAgIGlmIChwYWdlTWV0YWRh
dGFbbGluZU51bWJlcl0ub2JqZWN0Q291bnQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9OwotCi0gICAgYXV0byBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlID0gWyZdKHNpemVfdCYgbGlu
ZU51bWJlcikgLT4gQnVtcFJhbmdlIHsKLSAgICAgICAgY2hhciogYmVnaW4gPSBsaW5lc1tsaW5l
TnVtYmVyXS5iZWdpbigpICsgcGFnZU1ldGFkYXRhW2xpbmVOdW1iZXJdLnN0YXJ0T2Zmc2V0Owot
ICAgICAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudCA9IDA7Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKCA7IGxpbmVOdW1iZXIgPCBzbWFsbExpbmVDb3VudDsgKytsaW5lTnVtYmVyKSB7Ci0g
ICAgICAgICAgICBpZiAobGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQobG9jaykpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICghcGFnZU1ldGFkYXRhW2xpbmVOdW1i
ZXJdLm9iamVjdENvdW50KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICBvYmplY3RDb3VudCArPSBwYWdlTWV0YWRhdGFbbGluZU51bWJlcl0ub2JqZWN0Q291bnQ7Ci0g
ICAgICAgICAgICBsaW5lc1tsaW5lTnVtYmVyXS5yZWYobG9jaywgcGFnZU1ldGFkYXRhW2xpbmVO
dW1iZXJdLm9iamVjdENvdW50KTsKLSAgICAgICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4geyBiZWdpbiwgb2JqZWN0Q291bnQgfTsKLSAgICB9OwotCi0g
ICAgc2l6ZV90IGxpbmVOdW1iZXIgPSAwOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKCFm
aW5kU21hbGxCdW1wUmFuZ2UobGluZU51bWJlcikpIHsKLSAgICAgICAgICAgIHBhZ2UtPnNldEhh
c0ZyZWVMaW5lcyhsb2NrLCBmYWxzZSk7Ci0gICAgICAgICAgICBCQVNTRVJUKGFsbG9jYXRvci5j
YW5BbGxvY2F0ZSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIEluIGEgZnJhZ21lbnRlZCBwYWdlLCBzb21lIGZyZWUgcmFuZ2VzIG1pZ2h0IG5vdCBmaXQg
aW4gdGhlIGNhY2hlLgotICAgICAgICBpZiAocmFuZ2VDYWNoZS5zaXplKCkgPT0gcmFuZ2VDYWNo
ZS5jYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBsaW5lQ2FjaGVbc2l6ZUNsYXNzXS5wdXNoKHBh
Z2UpOwotICAgICAgICAgICAgQkFTU0VSVChhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBCdW1wUmFuZ2UgYnVtcFJhbmdl
ID0gYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZShsaW5lTnVtYmVyKTsKLSAgICAgICAgaWYgKGFsbG9j
YXRvci5jYW5BbGxvY2F0ZSgpKQotICAgICAgICAgICAgcmFuZ2VDYWNoZS5wdXNoKGJ1bXBSYW5n
ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFsbG9jYXRvci5yZWZpbGwoYnVtcFJhbmdl
KTsKLSAgICB9Ci19Ci0KLXZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamVj
dCgKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qgc2l6ZUNs
YXNzLAotICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgQnVtcFJhbmdlQ2FjaGUmIHJhbmdl
Q2FjaGUsCi0gICAgTGluZUNhY2hlJiBsaW5lQ2FjaGUpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBh
bGxvY2F0b3Iuc2l6ZSgpOwotICAgIFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRlU21hbGxQYWdl
KGxvY2ssIHNpemVDbGFzcywgbGluZUNhY2hlKTsKLSAgICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVM
aW5lcyhsb2NrKSk7Ci0KLSAgICBhdXRvIGZpbmRTbWFsbEJ1bXBSYW5nZSA9IFsmXShPYmplY3Qm
IGl0LCBPYmplY3QmIGVuZCkgewotICAgICAgICBmb3IgKCA7IGl0ICsgc2l6ZSA8PSBlbmQ7IGl0
ID0gaXQgKyBzaXplKSB7Ci0gICAgICAgICAgICBpZiAoIWl0LmxpbmUoKS0+cmVmQ291bnQobG9j
aykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH07Ci0KLSAgICBhdXRvIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2UgPSBb
Jl0oT2JqZWN0JiBpdCwgT2JqZWN0JiBlbmQpIC0+IEJ1bXBSYW5nZSB7Ci0gICAgICAgIGNoYXIq
IGJlZ2luID0gaXQuYWRkcmVzcygpOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RDb3Vu
dCA9IDA7Ci0gICAgICAgIGZvciAoIDsgaXQgKyBzaXplIDw9IGVuZDsgaXQgPSBpdCArIHNpemUp
IHsKLSAgICAgICAgICAgIGlmIChpdC5saW5lKCktPnJlZkNvdW50KGxvY2spKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICArK29iamVjdENvdW50OwotICAgICAgICAgICAg
aXQubGluZSgpLT5yZWYobG9jayk7Ci0gICAgICAgICAgICBpdC5wYWdlKCktPnJlZihsb2NrKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4geyBiZWdpbiwgb2JqZWN0Q291bnQgfTsKLSAgICB9
OwotCi0gICAgT2JqZWN0IGl0KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCkpOwotICAgIE9iamVjdCBl
bmQoaXQgKyBwYWdlU2l6ZShtX3BhZ2VDbGFzc2VzW3NpemVDbGFzc10pKTsKLSAgICBmb3IgKDs7
KSB7Ci0gICAgICAgIGlmICghZmluZFNtYWxsQnVtcFJhbmdlKGl0LCBlbmQpKSB7Ci0gICAgICAg
ICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgZmFsc2UpOwotICAgICAgICAgICAgQkFT
U0VSVChhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBJbiBhIGZyYWdtZW50ZWQgcGFnZSwgc29tZSBmcmVlIHJhbmdl
cyBtaWdodCBub3QgZml0IGluIHRoZSBjYWNoZS4KLSAgICAgICAgaWYgKHJhbmdlQ2FjaGUuc2l6
ZSgpID09IHJhbmdlQ2FjaGUuY2FwYWNpdHkoKSkgewotICAgICAgICAgICAgbGluZUNhY2hlW3Np
emVDbGFzc10ucHVzaChwYWdlKTsKLSAgICAgICAgICAgIEJBU1NFUlQoYWxsb2NhdG9yLmNhbkFs
bG9jYXRlKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVt
cFJhbmdlIGJ1bXBSYW5nZSA9IGFsbG9jYXRlU21hbGxCdW1wUmFuZ2UoaXQsIGVuZCk7Ci0gICAg
ICAgIGlmIChhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSkKLSAgICAgICAgICAgIHJhbmdlQ2FjaGUu
cHVzaChidW1wUmFuZ2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhbGxvY2F0b3IucmVm
aWxsKGJ1bXBSYW5nZSk7Ci0gICAgfQotfQotCi1MYXJnZVJhbmdlIEhlYXA6OnNwbGl0QW5kQWxs
b2NhdGUoTGFyZ2VSYW5nZSYgcmFuZ2UsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBB
bGxvY2F0aW9uS2luZCBhbGxvY2F0aW9uS2luZCkKLXsKLSAgICBMYXJnZVJhbmdlIHByZXY7Ci0g
ICAgTGFyZ2VSYW5nZSBuZXh0OwotCi0gICAgc2l6ZV90IGFsaWdubWVudE1hc2sgPSBhbGlnbm1l
bnQgLSAxOwotICAgIGlmICh0ZXN0KHJhbmdlLmJlZ2luKCksIGFsaWdubWVudE1hc2spKSB7Ci0g
ICAgICAgIHNpemVfdCBwcmVmaXhTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1lbnQs
IHJhbmdlLmJlZ2luKCkpIC0gcmFuZ2UuYmVnaW4oKTsKLSAgICAgICAgc3RkOjpwYWlyPExhcmdl
UmFuZ2UsIExhcmdlUmFuZ2U+IHBhaXIgPSByYW5nZS5zcGxpdChwcmVmaXhTaXplKTsKLSAgICAg
ICAgcHJldiA9IHBhaXIuZmlyc3Q7Ci0gICAgICAgIHJhbmdlID0gcGFpci5zZWNvbmQ7Ci0gICAg
fQotCi0gICAgaWYgKHJhbmdlLnNpemUoKSAtIHNpemUgPiBzaXplIC8gcGFnZVNpemVXYXN0ZUZh
Y3RvcikgewotICAgICAgICBzdGQ6OnBhaXI8TGFyZ2VSYW5nZSwgTGFyZ2VSYW5nZT4gcGFpciA9
IHJhbmdlLnNwbGl0KHNpemUpOwotICAgICAgICByYW5nZSA9IHBhaXIuZmlyc3Q7Ci0gICAgICAg
IG5leHQgPSBwYWlyLnNlY29uZDsKLSAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChhbGxvY2F0aW9u
S2luZCkgewotICAgIGNhc2UgQWxsb2NhdGlvbktpbmQ6OlZpcnR1YWw6Ci0gICAgICAgIGlmIChy
YW5nZS5waHlzaWNhbFNpemUoKSkKLSAgICAgICAgICAgIHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFn
ZXNTbG9wcHkocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIAotICAgIGNhc2UgQWxsb2NhdGlvbktpbmQ6OlBoeXNpY2FsOgotICAgICAgICBpZiAo
cmFuZ2UucGh5c2ljYWxTaXplKCkgPCByYW5nZS5zaXplKCkpIHsKLSAgICAgICAgICAgIHNjaGVk
dWxlU2NhdmVuZ2VySWZVbmRlck1lbW9yeVByZXNzdXJlKHJhbmdlLnNpemUoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHJhbmdlLmJl
Z2luKCkgKyByYW5nZS5waHlzaWNhbFNpemUoKSwgcmFuZ2Uuc2l6ZSgpIC0gcmFuZ2UucGh5c2lj
YWxTaXplKCkpOwotICAgICAgICAgICAgcmFuZ2Uuc2V0UGh5c2ljYWxTaXplKHJhbmdlLnNpemUo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIGlmIChwcmV2
KQotICAgICAgICBtX2xhcmdlRnJlZS5hZGQocHJldik7Ci0KLSAgICBpZiAobmV4dCkKLSAgICAg
ICAgbV9sYXJnZUZyZWUuYWRkKG5leHQpOwotCi0gICAgbV9vYmplY3RUeXBlcy5zZXQoQ2h1bms6
OmdldChyYW5nZS5iZWdpbigpKSwgT2JqZWN0VHlwZTo6TGFyZ2UpOwotCi0gICAgbV9sYXJnZUFs
bG9jYXRlZC5zZXQocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgpKTsKLSAgICByZXR1cm4gcmFu
Z2U7Ci19Ci0KLXZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBBbGxvY2F0aW9uS2lu
ZCBhbGxvY2F0aW9uS2luZCkKLXsKLSAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQp
KTsKLQotICAgIG1faXNHcm93aW5nID0gdHJ1ZTsKLSAgICAKLSAgICBzaXplX3Qgcm91bmRlZFNp
emUgPSBzaXplID8gcm91bmRVcFRvTXVsdGlwbGVPZihsYXJnZUFsaWdubWVudCwgc2l6ZSkgOiBs
YXJnZUFsaWdubWVudDsKLSAgICBpZiAocm91bmRlZFNpemUgPCBzaXplKSAvLyBDaGVjayBmb3Ig
b3ZlcmZsb3cKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgc2l6ZSA9IHJvdW5kZWRTaXpl
OwotCi0gICAgc2l6ZV90IHJvdW5kZWRBbGlnbm1lbnQgPSByb3VuZFVwVG9NdWx0aXBsZU9mPGxh
cmdlQWxpZ25tZW50PihhbGlnbm1lbnQpOwotICAgIGlmIChyb3VuZGVkQWxpZ25tZW50IDwgYWxp
Z25tZW50KSAvLyBDaGVjayBmb3Igb3ZlcmZsb3cKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgYWxpZ25tZW50ID0gcm91bmRlZEFsaWdubWVudDsKLQotICAgIExhcmdlUmFuZ2UgcmFuZ2Ug
PSBtX2xhcmdlRnJlZS5yZW1vdmUoYWxpZ25tZW50LCBzaXplKTsKLSAgICBpZiAoIXJhbmdlKSB7
Ci0gICAgICAgIGlmICh1c2luZ0dpZ2FjYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICByYW5nZSA9IFBlclByb2Nlc3M8Vk1IZWFwPjo6Z2V0KCktPnRyeUFsbG9j
YXRlTGFyZ2VDaHVuayhhbGlnbm1lbnQsIHNpemUsIGFsbG9jYXRpb25LaW5kKTsKLSAgICAgICAg
aWYgKCFyYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAKLSAgICAg
ICAgbV9sYXJnZUZyZWUuYWRkKHJhbmdlKTsKLQotICAgICAgICByYW5nZSA9IG1fbGFyZ2VGcmVl
LnJlbW92ZShhbGlnbm1lbnQsIHNpemUpOwotICAgIH0KLQotICAgIHJldHVybiBzcGxpdEFuZEFs
bG9jYXRlKHJhbmdlLCBhbGlnbm1lbnQsIHNpemUsIGFsbG9jYXRpb25LaW5kKS5iZWdpbigpOwot
fQotCi12b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mIGxvY2ssIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBBbGxvY2F0aW9uS2luZCBh
bGxvY2F0aW9uS2luZCkKLXsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUxhcmdlKGxv
Y2ssIGFsaWdubWVudCwgc2l6ZSwgYWxsb2NhdGlvbktpbmQpOwotICAgIFJFTEVBU0VfQkFTU0VS
VChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgSGVhcDo6aXNMYXJnZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgdm9pZCogb2JqZWN0KQotewotICAgIHJldHVy
biBtX29iamVjdFR5cGVzLmdldChPYmplY3Qob2JqZWN0KS5jaHVuaygpKSA9PSBPYmplY3RUeXBl
OjpMYXJnZTsKLX0KLQotc2l6ZV90IEhlYXA6OmxhcmdlU2l6ZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+Jiwgdm9pZCogb2JqZWN0KQotewotICAgIHJldHVybiBtX2xhcmdlQWxsb2NhdGVk
LmdldChvYmplY3QpOwotfQotCi12b2lkIEhlYXA6OnNocmlua0xhcmdlKHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4mLCBjb25zdCBSYW5nZSYgb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKLXsK
LSAgICBCQVNTRVJUKG9iamVjdC5zaXplKCkgPiBuZXdTaXplKTsKLQotICAgIHNpemVfdCBzaXpl
ID0gbV9sYXJnZUFsbG9jYXRlZC5yZW1vdmUob2JqZWN0LmJlZ2luKCkpOwotICAgIExhcmdlUmFu
Z2UgcmFuZ2UgPSBMYXJnZVJhbmdlKG9iamVjdCwgc2l6ZSk7Ci0gICAgc3BsaXRBbmRBbGxvY2F0
ZShyYW5nZSwgYWxpZ25tZW50LCBuZXdTaXplLCBBbGxvY2F0aW9uS2luZDo6UGh5c2ljYWwpOwot
Ci0gICAgc2NoZWR1bGVTY2F2ZW5nZXIoc2l6ZSk7Ci19Ci0KLXZvaWQgSGVhcDo6ZGVhbGxvY2F0
ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKiBvYmplY3QsIEFsbG9j
YXRpb25LaW5kIGFsbG9jYXRpb25LaW5kKQotewotICAgIHNpemVfdCBzaXplID0gbV9sYXJnZUFs
bG9jYXRlZC5yZW1vdmUob2JqZWN0KTsKLSAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShv
YmplY3QsIHNpemUsIGFsbG9jYXRpb25LaW5kID09IEFsbG9jYXRpb25LaW5kOjpQaHlzaWNhbCA/
IHNpemUgOiAwKSk7Ci0gICAgc2NoZWR1bGVTY2F2ZW5nZXIoc2l6ZSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9IZWFwLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvSGVhcC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhYWU5YzMxYjBiZDZhNWJiOWFlMzYwNTA1MzdhOGFiZWIxZTQ2Mjc4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9IZWFwLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSGVhcF9oCi0jZGVmaW5lIEhlYXBfaAotCi0j
aW5jbHVkZSAiQWxsb2NhdGlvbktpbmQuaCIKLSNpbmNsdWRlICJBc3luY1Rhc2suaCIKLSNpbmNs
dWRlICJCdW1wUmFuZ2UuaCIKLSNpbmNsdWRlICJDaHVuay5oIgotI2luY2x1ZGUgIkhlYXBLaW5k
LmgiCi0jaW5jbHVkZSAiTGFyZ2VNYXAuaCIKLSNpbmNsdWRlICJMaW5lTWV0YWRhdGEuaCIKLSNp
bmNsdWRlICJMaXN0LmgiCi0jaW5jbHVkZSAiTWFwLmgiCi0jaW5jbHVkZSAiTXV0ZXguaCIKLSNp
bmNsdWRlICJPYmplY3QuaCIKLSNpbmNsdWRlICJQZXJIZWFwS2luZC5oIgotI2luY2x1ZGUgIlBl
clByb2Nlc3MuaCIKLSNpbmNsdWRlICJTbWFsbExpbmUuaCIKLSNpbmNsdWRlICJTbWFsbFBhZ2Uu
aCIKLSNpbmNsdWRlICJWZWN0b3IuaCIKLSNpbmNsdWRlIDxhcnJheT4KLSNpbmNsdWRlIDxtdXRl
eD4KLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi1jbGFzcyBCZWdpblRhZzsKLWNsYXNzIEJ1bXBB
bGxvY2F0b3I7Ci1jbGFzcyBEZWJ1Z0hlYXA7Ci1jbGFzcyBFbmRUYWc7Ci0KLWNsYXNzIEhlYXAg
ewotcHVibGljOgotICAgIEhlYXAoSGVhcEtpbmQsIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mKTsKLSAgICAKLSAgICBzdGF0aWMgU3RhdGljTXV0ZXgmIG11dGV4KCkgeyByZXR1cm4gUGVy
UHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46Om11dGV4KCk7IH0KLSAgICAKLSAgICBIZWFwS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgCi0gICAgRGVidWdIZWFwKiBk
ZWJ1Z0hlYXAoKSB7IHJldHVybiBtX2RlYnVnSGVhcDsgfQotCi0gICAgdm9pZCBhbGxvY2F0ZVNt
YWxsQnVtcFJhbmdlcyhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemVD
bGFzcywKLSAgICAgICAgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNhY2hlJiwgTGluZUNhY2hl
Jik7Ci0gICAgdm9pZCBkZXJlZlNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
JiwgT2JqZWN0LCBMaW5lQ2FjaGUmKTsKLSAgICB2b2lkIGRlYWxsb2NhdGVMaW5lQ2FjaGUoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIExpbmVDYWNoZSYpOwotCi0gICAgdm9pZCogYWxs
b2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90LCBBbGxvY2F0aW9uS2luZCA9IEFsbG9jYXRpb25LaW5kOjpQaHlzaWNhbCk7Ci0g
ICAgdm9pZCogdHJ5QWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwg
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBBbGxvY2F0aW9uS2luZCA9IEFsbG9jYXRpb25LaW5k
OjpQaHlzaWNhbCk7Ci0gICAgdm9pZCBkZWFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYsIHZvaWQqLCBBbGxvY2F0aW9uS2luZCA9IEFsbG9jYXRpb25LaW5kOjpQaHlz
aWNhbCk7Ci0KLSAgICBib29sIGlzTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYs
IHZvaWQqKTsKLSAgICBzaXplX3QgbGFyZ2VTaXplKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mLCB2b2lkKik7Ci0gICAgdm9pZCBzaHJpbmtMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+JiwgY29uc3QgUmFuZ2UmLCBzaXplX3QpOwotCi0gICAgdm9pZCBzY2F2ZW5nZShzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IExhcmdl
T2JqZWN0SGFzaCB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKHZvaWQqIGtleSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPigKLSAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oa2V5KSAvIHNtYWxsTWF4KTsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICB+SGVhcCgpID0gZGVsZXRlOwotICAgIAotICAgIGJv
b2wgdXNpbmdHaWdhY2FnZSgpOwotICAgIAotICAgIHZvaWQgaW5pdGlhbGl6ZUxpbmVNZXRhZGF0
YSgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZVBhZ2VNZXRhZGF0YSgpOwotCi0gICAgdm9pZCBhbGxv
Y2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRhdGEoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYsCi0gICAgICAgIHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VD
YWNoZSYsIExpbmVDYWNoZSYpOwotICAgIHZvaWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9i
amVjdChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwKLSAgICAgICAgc2l6ZV90IHNpemVD
bGFzcywgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNhY2hlJiwgTGluZUNhY2hlJik7Ci0KLSAg
ICBTbWFsbFBhZ2UqIGFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mLCBzaXplX3Qgc2l6ZUNsYXNzLCBMaW5lQ2FjaGUmKTsKLSAgICB2b2lkIGRlYWxsb2NhdGVT
bWFsbExpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIE9iamVjdCwgTGluZUNhY2hl
Jik7Ci0KLSAgICB2b2lkIGFsbG9jYXRlU21hbGxDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+Jiwgc2l6ZV90IHBhZ2VDbGFzcyk7Ci0gICAgdm9pZCBkZWFsbG9jYXRlU21hbGxDaHVu
ayhDaHVuayosIHNpemVfdCBwYWdlQ2xhc3MpOwotCi0gICAgdm9pZCBtZXJnZUxhcmdlKEJlZ2lu
VGFnKiYsIEVuZFRhZyomLCBSYW5nZSYpOwotICAgIHZvaWQgbWVyZ2VMYXJnZUxlZnQoRW5kVGFn
KiYsIEJlZ2luVGFnKiYsIFJhbmdlJiwgYm9vbCYgaW5WTUhlYXApOwotICAgIHZvaWQgbWVyZ2VM
YXJnZVJpZ2h0KEVuZFRhZyomLCBCZWdpblRhZyomLCBSYW5nZSYsIGJvb2wmIGluVk1IZWFwKTsK
LQotICAgIExhcmdlUmFuZ2Ugc3BsaXRBbmRBbGxvY2F0ZShMYXJnZVJhbmdlJiwgc2l6ZV90IGFs
aWdubWVudCwgc2l6ZV90LCBBbGxvY2F0aW9uS2luZCk7Ci0KLSAgICB2b2lkIHNjaGVkdWxlU2Nh
dmVuZ2VyKHNpemVfdCk7Ci0gICAgdm9pZCBzY2hlZHVsZVNjYXZlbmdlcklmVW5kZXJNZW1vcnlQ
cmVzc3VyZShzaXplX3QpOwotICAgIAotICAgIHZvaWQgY29uY3VycmVudFNjYXZlbmdlKCk7Ci0g
ICAgCi0gICAgSGVhcEtpbmQgbV9raW5kOwotICAgIAotICAgIHNpemVfdCBtX3ZtUGFnZVNpemVQ
aHlzaWNhbDsKLSAgICBWZWN0b3I8TGluZU1ldGFkYXRhPiBtX3NtYWxsTGluZU1ldGFkYXRhOwot
ICAgIHN0ZDo6YXJyYXk8c2l6ZV90LCBzaXplQ2xhc3NDb3VudD4gbV9wYWdlQ2xhc3NlczsKLQot
ICAgIExpbmVDYWNoZSBtX2xpbmVDYWNoZTsKLSAgICBzdGQ6OmFycmF5PExpc3Q8Q2h1bms+LCBw
YWdlQ2xhc3NDb3VudD4gbV9mcmVlUGFnZXM7Ci0gICAgc3RkOjphcnJheTxMaXN0PENodW5rPiwg
cGFnZUNsYXNzQ291bnQ+IG1fY2h1bmtDYWNoZTsKLQotICAgIE1hcDx2b2lkKiwgc2l6ZV90LCBM
YXJnZU9iamVjdEhhc2g+IG1fbGFyZ2VBbGxvY2F0ZWQ7Ci0gICAgTGFyZ2VNYXAgbV9sYXJnZUZy
ZWU7Ci0KLSAgICBNYXA8Q2h1bmsqLCBPYmplY3RUeXBlLCBDaHVua0hhc2g+IG1fb2JqZWN0VHlw
ZXM7Ci0KLSAgICBzaXplX3QgbV9zY2F2ZW5nZXJCeXRlcyB7IDAgfTsKLSAgICBib29sIG1faXNH
cm93aW5nIHsgZmFsc2UgfTsKLSAgICAKLSAgICBBc3luY1Rhc2s8SGVhcCwgZGVjbHR5cGUoJkhl
YXA6OmNvbmN1cnJlbnRTY2F2ZW5nZSk+IG1fc2NhdmVuZ2VyOwotCi0gICAgRGVidWdIZWFwKiBt
X2RlYnVnSGVhcDsKLX07Ci0KLWlubGluZSB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFu
Z2VzKAotICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXpl
Q2xhc3MsCi0gICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBCdW1wUmFuZ2VDYWNoZSYgcmFu
Z2VDYWNoZSwKLSAgICBMaW5lQ2FjaGUmIGxpbmVDYWNoZSkKLXsKLSAgICBpZiAoc2l6ZUNsYXNz
IDwgYm1hbGxvYzo6c2l6ZUNsYXNzKHNtYWxsTGluZVNpemUpKQotICAgICAgICByZXR1cm4gYWxs
b2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFkYXRhKGxvY2ssIHNpemVDbGFzcywgYWxsb2NhdG9y
LCByYW5nZUNhY2hlLCBsaW5lQ2FjaGUpOwotICAgIHJldHVybiBhbGxvY2F0ZVNtYWxsQnVtcFJh
bmdlc0J5T2JqZWN0KGxvY2ssIHNpemVDbGFzcywgYWxsb2NhdG9yLCByYW5nZUNhY2hlLCBsaW5l
Q2FjaGUpOwotfQotCi1pbmxpbmUgdm9pZCBIZWFwOjpkZXJlZlNtYWxsTGluZShzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBPYmplY3Qgb2JqZWN0LCBMaW5lQ2FjaGUmIGxpbmVD
YWNoZSkKLXsKLSAgICBpZiAoIW9iamVjdC5saW5lKCktPmRlcmVmKGxvY2spKQotICAgICAgICBy
ZXR1cm47Ci0gICAgZGVhbGxvY2F0ZVNtYWxsTGluZShsb2NrLCBvYmplY3QsIGxpbmVDYWNoZSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIEhlYXBfaApkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFs
bG9jL0hlYXBLaW5kLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5k
ZW5jaWVzL2JtYWxsb2MvSGVhcEtpbmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NGIzZjMyNjQ0ZDg3MWU5MWZiYmYwZDI4NzVhNDU5M2U2NjRlYmFmMi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvSGVhcEtpbmQuaAorKysgL2Rldi9udWxsCkBA
IC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotZW51bSBjbGFzcyBI
ZWFwS2luZCB7Ci0gICAgUHJpbWFyeSwKLSAgICBHaWdhY2FnZQotfTsKLQotc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBudW1IZWFwcyA9IDI7Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2ll
cy9ibWFsbG9jL0lubGluZS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2Rl
cGVuZGVuY2llcy9ibWFsbG9jL0lubGluZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjMDA1NDE3YTZlZDEzZDkwYTFmYzFkNjllODhkMzRjYWVmMjRiZDQ0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9JbmxpbmUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2lmbmRlZiBJbmxpbmVfaAotI2RlZmluZSBJbmxpbmVfaAotCi0jZGVmaW5lIElOTElO
RSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW5saW5lCi0KLSNkZWZpbmUgTk9fSU5M
SU5FIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKLQotI2VuZGlmIC8vIElubGluZV9oCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2Jt
YWxsb2MvTGFyZ2VNYXAuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2Rl
cGVuZGVuY2llcy9ibWFsbG9jL0xhcmdlTWFwLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNDQzYWQ5MTI1NzBhYWVmZDg3NjUzMWJiNTljOGYyNzNhMTZlZWRlMi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvTGFyZ2VNYXAuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiTGFyZ2VNYXAuaCIKLSNpbmNsdWRlIDx1dGlsaXR5Pgot
Ci1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLUxhcmdlUmFuZ2UgTGFyZ2VNYXA6OnJlbW92ZShzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBzaXplX3QgYWxpZ25tZW50TWFzayA9
IGFsaWdubWVudCAtIDE7Ci0KLSAgICBMYXJnZVJhbmdlKiBjYW5kaWRhdGUgPSBtX2ZyZWUuZW5k
KCk7Ci0gICAgZm9yIChMYXJnZVJhbmdlKiBpdCA9IG1fZnJlZS5iZWdpbigpOyBpdCAhPSBtX2Zy
ZWUuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zaXplKCkgPCBzaXplKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGNhbmRpZGF0ZSAhPSBtX2ZyZWUuZW5kKCkg
JiYgY2FuZGlkYXRlLT5iZWdpbigpIDwgaXQtPmJlZ2luKCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBpZiAodGVzdChpdC0+YmVnaW4oKSwgYWxpZ25tZW50TWFzaykpIHsKLSAg
ICAgICAgICAgIGNoYXIqIGFsaWduZWQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwg
aXQtPmJlZ2luKCkpOwotICAgICAgICAgICAgaWYgKGFsaWduZWQgPCBpdC0+YmVnaW4oKSkgLy8g
Q2hlY2sgZm9yIG92ZXJmbG93LgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICBjaGFyKiBhbGlnbmVkRW5kID0gYWxpZ25lZCArIHNpemU7Ci0gICAgICAgICAgICBpZiAo
YWxpZ25lZEVuZCA8IGFsaWduZWQpIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGFsaWduZWRFbmQgPiBpdC0+ZW5kKCkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBjYW5kaWRh
dGUgPSBpdDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGNhbmRpZGF0ZSA9PSBtX2ZyZWUuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBMYXJnZVJhbmdlKCk7Ci0KLSAgICByZXR1cm4gbV9mcmVlLnBvcChj
YW5kaWRhdGUpOwotfQotCi12b2lkIExhcmdlTWFwOjphZGQoY29uc3QgTGFyZ2VSYW5nZSYgcmFu
Z2UpCi17Ci0gICAgTGFyZ2VSYW5nZSBtZXJnZWQgPSByYW5nZTsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9mcmVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghY2FuTWVyZ2Uo
bWVyZ2VkLCBtX2ZyZWVbaV0pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbWVy
Z2VkID0gbWVyZ2UobWVyZ2VkLCBtX2ZyZWUucG9wKGktLSkpOwotICAgIH0KLSAgICAKLSAgICBt
X2ZyZWUucHVzaChtZXJnZWQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxs
b2MvTGFyZ2VNYXAuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRl
bmNpZXMvYm1hbGxvYy9MYXJnZU1hcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
ZTRmMmM2ZjQ0NTRiMGEzOTI1NDYwMzIzZjYxNzNjN2JjNzBlMTQ4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9MYXJnZU1hcC5oCisrKyAvZGV2L251bGwKQEAg
LTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIExhcmdlTWFwX2gKLSNkZWZpbmUgTGFyZ2VNYXBfaAotCi0jaW5jbHVkZSAi
TGFyZ2VSYW5nZS5oIgotI2luY2x1ZGUgIlZlY3Rvci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4K
LQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi1jbGFzcyBMYXJnZU1hcCB7Ci1wdWJsaWM6Ci0gICAg
TGFyZ2VSYW5nZSogYmVnaW4oKSB7IHJldHVybiBtX2ZyZWUuYmVnaW4oKTsgfQotICAgIExhcmdl
UmFuZ2UqIGVuZCgpIHsgcmV0dXJuIG1fZnJlZS5lbmQoKTsgfQotCi0gICAgdm9pZCBhZGQoY29u
c3QgTGFyZ2VSYW5nZSYpOwotICAgIExhcmdlUmFuZ2UgcmVtb3ZlKHNpemVfdCBhbGlnbm1lbnQs
IHNpemVfdCk7Ci0gICAgVmVjdG9yPExhcmdlUmFuZ2U+JiByYW5nZXMoKSB7IHJldHVybiBtX2Zy
ZWU7IH0KLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8TGFyZ2VSYW5nZT4gbV9mcmVlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gTGFyZ2VNYXBfaApkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9j
L0xhcmdlUmFuZ2UuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRl
bmNpZXMvYm1hbGxvYy9MYXJnZVJhbmdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDIzMTU0NmZhZWI2ZjM1N2IwYTAwM2Q4YzQ5NTZmOTJkZWQ5MWU1MGUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0xhcmdlUmFuZ2UuaAorKysgL2Rldi9udWxs
CkBAIC0xLDExMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpZm5kZWYgTGFyZ2VSYW5nZV9oCi0jZGVmaW5lIExhcmdlUmFuZ2VfaAotCi0j
aW5jbHVkZSAiQkFzc2VydC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCi0KLW5hbWVzcGFjZSBibWFs
bG9jIHsKLQotY2xhc3MgTGFyZ2VSYW5nZSA6IHB1YmxpYyBSYW5nZSB7Ci1wdWJsaWM6Ci0gICAg
TGFyZ2VSYW5nZSgpCi0gICAgICAgIDogUmFuZ2UoKQotICAgICAgICAsIG1fcGh5c2ljYWxTaXpl
KDApCi0gICAgewotICAgIH0KLQotICAgIExhcmdlUmFuZ2UoY29uc3QgUmFuZ2UmIG90aGVyLCBz
aXplX3QgcGh5c2ljYWxTaXplKQotICAgICAgICA6IFJhbmdlKG90aGVyKQotICAgICAgICAsIG1f
cGh5c2ljYWxTaXplKHBoeXNpY2FsU2l6ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgTGFyZ2VSYW5n
ZSh2b2lkKiBiZWdpbiwgc2l6ZV90IHNpemUsIHNpemVfdCBwaHlzaWNhbFNpemUpCi0gICAgICAg
IDogUmFuZ2UoYmVnaW4sIHNpemUpCi0gICAgICAgICwgbV9waHlzaWNhbFNpemUocGh5c2ljYWxT
aXplKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm5zIGEgbG93ZXIgYm91bmQgb24gcGh5
c2ljYWwgc2l6ZS4gUmFuZ2VzIHRoYXQgc3BhbiBub24tcGh5c2ljYWwKLSAgICAvLyBmcmFnbWVu
dHMgb25seSByZW1lbWJlciB0aGUgcGh5c2ljYWwgc2l6ZSBvZiB0aGUgZmlyc3QgZnJhZ21lbnQu
Ci0gICAgc2l6ZV90IHBoeXNpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGh5c2ljYWxTaXpl
OyB9Ci0gICAgdm9pZCBzZXRQaHlzaWNhbFNpemUoc2l6ZV90IHBoeXNpY2FsU2l6ZSkgeyBtX3Bo
eXNpY2FsU2l6ZSA9IHBoeXNpY2FsU2l6ZTsgfQotCi0gICAgc3RkOjpwYWlyPExhcmdlUmFuZ2Us
IExhcmdlUmFuZ2U+IHNwbGl0KHNpemVfdCkgY29uc3Q7Ci0KLSAgICBib29sIG9wZXJhdG9yPChj
b25zdCB2b2lkKiBvdGhlcikgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA8IG90aGVyOyB9Ci0gICAg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgTGFyZ2VSYW5nZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIGJl
Z2luKCkgPCBvdGhlci5iZWdpbigpOyB9Ci0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1fcGh5c2lj
YWxTaXplOwotfTsKLQotaW5saW5lIGJvb2wgY2FuTWVyZ2UoY29uc3QgTGFyZ2VSYW5nZSYgYSwg
Y29uc3QgTGFyZ2VSYW5nZSYgYikKLXsKLSAgICBpZiAoYS5lbmQoKSA9PSBiLmJlZ2luKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlmIChiLmVuZCgpID09IGEuYmVnaW4oKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbmxp
bmUgTGFyZ2VSYW5nZSBtZXJnZShjb25zdCBMYXJnZVJhbmdlJiBhLCBjb25zdCBMYXJnZVJhbmdl
JiBiKQotewotICAgIGNvbnN0IExhcmdlUmFuZ2UmIGxlZnQgPSBzdGQ6Om1pbihhLCBiKTsKLSAg
ICBpZiAobGVmdC5zaXplKCkgPT0gbGVmdC5waHlzaWNhbFNpemUoKSkgewotICAgICAgICByZXR1
cm4gTGFyZ2VSYW5nZSgKLSAgICAgICAgICAgIGxlZnQuYmVnaW4oKSwKLSAgICAgICAgICAgIGEu
c2l6ZSgpICsgYi5zaXplKCksCi0gICAgICAgICAgICBhLnBoeXNpY2FsU2l6ZSgpICsgYi5waHlz
aWNhbFNpemUoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIExhcmdlUmFuZ2UoCi0gICAgICAgIGxl
ZnQuYmVnaW4oKSwKLSAgICAgICAgYS5zaXplKCkgKyBiLnNpemUoKSwKLSAgICAgICAgbGVmdC5w
aHlzaWNhbFNpemUoKSk7Ci19Ci0KLWlubGluZSBzdGQ6OnBhaXI8TGFyZ2VSYW5nZSwgTGFyZ2VS
YW5nZT4gTGFyZ2VSYW5nZTo6c3BsaXQoc2l6ZV90IHNpemUpIGNvbnN0Ci17Ci0gICAgQkFTU0VS
VChzaXplIDw9IHRoaXMtPnNpemUoKSk7Ci0gICAgCi0gICAgaWYgKHNpemUgPD0gcGh5c2ljYWxT
aXplKCkpIHsKLSAgICAgICAgTGFyZ2VSYW5nZSBsZWZ0KGJlZ2luKCksIHNpemUsIHNpemUpOwot
ICAgICAgICBMYXJnZVJhbmdlIHJpZ2h0KGxlZnQuZW5kKCksIHRoaXMtPnNpemUoKSAtIHNpemUs
IHBoeXNpY2FsU2l6ZSgpIC0gc2l6ZSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihs
ZWZ0LCByaWdodCk7Ci0gICAgfQotCi0gICAgTGFyZ2VSYW5nZSBsZWZ0KGJlZ2luKCksIHNpemUs
IHBoeXNpY2FsU2l6ZSgpKTsKLSAgICBMYXJnZVJhbmdlIHJpZ2h0KGxlZnQuZW5kKCksIHRoaXMt
PnNpemUoKSAtIHNpemUsIDApOwotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsZWZ0LCByaWdo
dCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIExhcmdlUmFuZ2Vf
aApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVu
Y2llcy9ibWFsbG9jL0xpbmVNZXRhZGF0YS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL0xpbmVNZXRhZGF0YS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4MGIzMzgxMTE5OWE2ZjE2NTJhNzg5YmI5YjE3Njg1ZmMwNWJhYWI4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9MaW5lTWV0YWRh
dGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMaW5lTWV0YWRhdGFfaAotI2RlZmlu
ZSBMaW5lTWV0YWRhdGFfaAotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLXN0cnVjdCBMaW5lTWV0
YWRhdGEgewotICAgIHVuc2lnbmVkIGNoYXIgc3RhcnRPZmZzZXQ7Ci0gICAgdW5zaWduZWQgY2hh
ciBvYmplY3RDb3VudDsKLX07Ci0KLXN0YXRpY19hc3NlcnQoCi0gICAgc21hbGxMaW5lU2l6ZSAt
IGFsaWdubWVudCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+OjptYXgoKSwK
LSAgICAibWF4aW11bSBvYmplY3Qgb2Zmc2V0IG11c3QgZml0IGluIExpbmVNZXRhZGF0YTo6c3Rh
cnRPZmZzZXQiKTsKLQotc3RhdGljX2Fzc2VydCgKLSAgICBzbWFsbExpbmVTaXplIC8gYWxpZ25t
ZW50IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj46Om1heCgpLAotICAgICJt
YXhpbXVtIG9iamVjdCBjb3VudCBtdXN0IGZpdCBpbiBMaW5lTWV0YWRhdGE6Om9iamVjdENvdW50
Iik7Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIExpbmVNZXRhZGF0YV9o
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5j
aWVzL2JtYWxsb2MvTGlzdC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2Rl
cGVuZGVuY2llcy9ibWFsbG9jL0xpc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OGRlN2U0N2QzMjkwMjZlMjk5YmJlYjM3MGQwMjFjMzgyZjM0N2FhZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvTGlzdC5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBMaXN0X2gKLSNkZWZpbmUgTGlzdF9oCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBMaXN0Tm9kZSB7Ci0gICAgTGlzdE5vZGUo
KSA9IGRlZmF1bHQ7Ci0gICAgTGlzdE5vZGUoTGlzdE5vZGU8VD4qIHByZXYsIExpc3ROb2RlPFQ+
KiBuZXh0KQotICAgICAgICA6IHByZXYocHJldikKLSAgICAgICAgLCBuZXh0KG5leHQpCi0gICAg
ewotICAgIH0KLQotICAgIExpc3ROb2RlPFQ+KiBwcmV2IHsgbnVsbHB0ciB9OwotICAgIExpc3RO
b2RlPFQ+KiBuZXh0IHsgbnVsbHB0ciB9OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNs
YXNzIExpc3QgewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPFQ+Ojp2YWx1ZSwgIkxpc3QgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLiIpOwot
Ci0gICAgc3RydWN0IGl0ZXJhdG9yIHsKLSAgICAgICAgaXRlcmF0b3IoKSA9IGRlZmF1bHQ7Ci0g
ICAgICAgIGl0ZXJhdG9yKExpc3ROb2RlPFQ+KiBub2RlKQotICAgICAgICAgICAgOiBtX25vZGUo
bm9kZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgVCogb3BlcmF0b3IqKCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fbm9kZSk7IH0KLSAgICAgICAgVCogb3BlcmF0b3ItPigp
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihtX25vZGUpOyB9Ci0KLSAgICAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gbV9ub2RlICE9IG90aGVyLm1f
bm9kZTsgfQotCi0gICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbV9ub2RlID0gbV9ub2RlLT5uZXh0OwotICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMaXN0Tm9kZTxUPiogbV9ub2RlIHsgfTsK
LSAgICB9OwotCi1wdWJsaWM6Ci0gICAgTGlzdCgpIHsgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkg
eyByZXR1cm4gbV9yb290Lm5leHQgPT0gJm1fcm9vdDsgfQotCi0gICAgVCogaGVhZCgpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PFQqPihtX3Jvb3QubmV4dCk7IH0KLSAgICBUKiB0YWlsKCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8VCo+KG1fcm9vdC5wcmV2KTsgfQotICAgIAotICAgIGl0ZXJhdG9yIGJl
Z2luKCkgeyByZXR1cm4gaXRlcmF0b3IgeyBtX3Jvb3QubmV4dCB9OyB9Ci0gICAgaXRlcmF0b3Ig
ZW5kKCkgeyByZXR1cm4gaXRlcmF0b3IgeyAmbV9yb290IH07IH0KLQotICAgIHZvaWQgcHVzaChU
KiBub2RlKQotICAgIHsKLSAgICAgICAgTGlzdE5vZGU8VD4qIGl0ID0gdGFpbCgpOwotICAgICAg
ICBpbnNlcnRBZnRlcihpdCwgbm9kZSk7Ci0gICAgfQotCi0gICAgdm9pZCBwdXNoRnJvbnQoVCog
bm9kZSkKLSAgICB7Ci0gICAgICAgIExpc3ROb2RlPFQ+KiBpdCA9ICZtX3Jvb3Q7Ci0gICAgICAg
IGluc2VydEFmdGVyKGl0LCBub2RlKTsKLSAgICB9Ci0KLSAgICBUKiBwb3AoKQotICAgIHsKLSAg
ICAgICAgTGlzdE5vZGU8VD4qIHJlc3VsdCA9IHRhaWwoKTsKLSAgICAgICAgcmVtb3ZlKHJlc3Vs
dCk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocmVzdWx0KTsKLSAgICB9Ci0KLSAg
ICBUKiBwb3BGcm9udCgpCi0gICAgewotICAgICAgICBMaXN0Tm9kZTxUPiogcmVzdWx0ID0gaGVh
ZCgpOwotICAgICAgICByZW1vdmUocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQqPihyZXN1bHQpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGluc2VydEFmdGVyKExpc3RO
b2RlPFQ+KiBpdCwgTGlzdE5vZGU8VD4qIG5vZGUpCi0gICAgewotICAgICAgICBMaXN0Tm9kZTxU
PiogcHJldiA9IGl0OwotICAgICAgICBMaXN0Tm9kZTxUPiogbmV4dCA9IGl0LT5uZXh0OwotCi0g
ICAgICAgIG5vZGUtPm5leHQgPSBuZXh0OwotICAgICAgICBuZXh0LT5wcmV2ID0gbm9kZTsKLQot
ICAgICAgICBub2RlLT5wcmV2ID0gcHJldjsKLSAgICAgICAgcHJldi0+bmV4dCA9IG5vZGU7Ci0g
ICAgfQotCi0gICAgc3RhdGljIHZvaWQgcmVtb3ZlKExpc3ROb2RlPFQ+KiBub2RlKQotICAgIHsK
LSAgICAgICAgTGlzdE5vZGU8VD4qIG5leHQgPSBub2RlLT5uZXh0OwotICAgICAgICBMaXN0Tm9k
ZTxUPiogcHJldiA9IG5vZGUtPnByZXY7Ci0KLSAgICAgICAgbmV4dC0+cHJldiA9IHByZXY7Ci0g
ICAgICAgIHByZXYtPm5leHQgPSBuZXh0OwotICAgICAgICAKLSAgICAgICAgbm9kZS0+cHJldiA9
IG51bGxwdHI7Ci0gICAgICAgIG5vZGUtPm5leHQgPSBudWxscHRyOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBMaXN0Tm9kZTxUPiBtX3Jvb3QgeyAmbV9yb290LCAmbV9yb290IH07Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBMaXN0X2gKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9Mb2dn
aW5nLmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMv
Ym1hbGxvYy9Mb2dnaW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFmYjYw
Y2I4MTZkNDUwZDJlZDNjOTFlOTgyYmVjMDJkYjAzMjBiNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93
dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvTG9nZ2luZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJCUGxhdGZvcm0uaCIKLQotI2lmICFCVVNF
KE9TX0xPRykKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2VuZGlm
Ci0KLSNpZiBCUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgPG1hY2gvZXhjZXB0aW9uX3R5cGVzLmg+
Ci0jaW5jbHVkZSA8b2JqYy9vYmpjLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRl
ICJCU29mdExpbmtpbmcuaCIKLUJTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoQ3Jhc2hSZXBv
cnRlclN1cHBvcnQpOwotQlNPRlRfTElOS19GVU5DVElPTihDcmFzaFJlcG9ydGVyU3VwcG9ydCwg
U2ltdWxhdGVDcmFzaCwgQk9PTCwgKHBpZF90IHBpZCwgbWFjaF9leGNlcHRpb25fZGF0YV90eXBl
X3QgZXhjZXB0aW9uQ29kZSwgaWQgZGVzY3JpcHRpb24pLCAocGlkLCBleGNlcHRpb25Db2RlLCBk
ZXNjcmlwdGlvbikpOwotI2VuZGlmCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotdm9pZCBsb2dW
TUZhaWx1cmUoKQotewotI2lmIEJQTEFURk9STShJT1MpCi0gICAgY29uc3QgbWFjaF9leGNlcHRp
b25fZGF0YV90eXBlX3Qga0V4Y2VwdGlvbkNvZGUgPSAweGMxMDVjYTExOwotICAgIFNpbXVsYXRl
Q3Jhc2goZ2V0cGlkKCksIGtFeGNlcHRpb25Db2RlLCBudWxscHRyKTsKLSNlbmRpZgotfQotCi0j
aWYgIUJVU0UoT1NfTE9HKQotdm9pZCByZXBvcnRBc3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2Uo
Y29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBj
aGFyKiBmb3JtYXQsIC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3M7Ci0gICAgdmFfc3RhcnQoYXJn
cywgZm9ybWF0KTsKLSAgICB2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7Ci0gICAgdmFf
ZW5kKGFyZ3MpOwotICAgIGZwcmludGYoc3RkZXJyLCAiJXMoJWQpIDogJXNcbiIsIGZpbGUsIGxp
bmUsIGZ1bmN0aW9uKTsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2Jt
YWxsb2MvTG9nZ2luZy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVu
ZGVuY2llcy9ibWFsbG9jL0xvZ2dpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDkyMDY3YmMwNzg5MzJkMTQ3OGVjOTQ3Njk4NTZmN2E2YWUzY2ViZS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvTG9nZ2luZy5oCisrKyAvZGV2L251bGwKQEAg
LTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQlBsYXRmb3JtLmgiCi0KLW5hbWVzcGFjZSBi
bWFsbG9jIHsKLQotdm9pZCBsb2dWTUZhaWx1cmUoKTsKLQotI2lmICFCVVNFKE9TX0xPRykKLXZv
aWQgcmVwb3J0QXNzZXJ0aW9uRmFpbHVyZVdpdGhNZXNzYWdlKGNvbnN0IGNoYXIqIGZpbGUsIGlu
dCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIEJB
VFRSSUJVVEVfUFJJTlRGKDQsIDUpOwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNp
ZXMvYm1hbGxvYy9NYXAuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBl
bmRlbmNpZXMvYm1hbGxvYy9NYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRl
ZDhjYTA0OWY4OTM4ZjEzMGMyMzAwOWZjNWRkOWY1ZGM5MmQ3Yy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvTWFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIE1hcF9oCi0jZGVmaW5lIE1hcF9oCi0KLSNpbmNsdWRlICJJbmxpbmUuaCIKLSNpbmNs
dWRlICJTaXplcy5oIgotI2luY2x1ZGUgIlZlY3Rvci5oIgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7
Ci0KLWNsYXNzIFNtYWxsUGFnZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgSGFzaD4gY2xhc3MgTWFwIHsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxLZXk+Ojp2YWx1ZSwgIk1hcCBtdXN0IGhhdmUgYSB0
cml2aWFsIGRlc3RydWN0b3IuIik7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8VmFsdWU+Ojp2YWx1ZSwgIk1hcCBtdXN0IGhhdmUgYSB0cml2aWFsIGRl
c3RydWN0b3IuIik7Ci1wdWJsaWM6Ci0gICAgc3RydWN0IEJ1Y2tldCB7Ci0gICAgICAgIEtleSBr
ZXk7Ci0gICAgICAgIFZhbHVlIHZhbHVlOwotICAgIH07Ci0gICAgCi0gICAgc2l6ZV90IHNpemUo
KSB7IHJldHVybiBtX2tleUNvdW50OyB9Ci0gICAgc2l6ZV90IGNhcGFjaXR5KCkgeyByZXR1cm4g
bV90YWJsZS5zaXplKCk7IH0KLQotICAgIC8vIGtleSBtdXN0IGJlIGluIHRoZSBtYXAuCi0gICAg
VmFsdWUmIGdldChjb25zdCBLZXkmIGtleSkKLSAgICB7Ci0gICAgICAgIGF1dG8mIGJ1Y2tldCA9
IGZpbmQoa2V5LCBbJl0oY29uc3QgQnVja2V0JiBidWNrZXQpIHsgcmV0dXJuIGJ1Y2tldC5rZXkg
PT0ga2V5OyB9KTsKLSAgICAgICAgcmV0dXJuIGJ1Y2tldC52YWx1ZTsKLSAgICB9Ci0KLSAgICB2
b2lkIHNldChjb25zdCBLZXkmIGtleSwgY29uc3QgVmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgaWYgKHNob3VsZEdyb3coKSkKLSAgICAgICAgICAgIHJlaGFzaCgpOwotCi0gICAgICAgIGF1
dG8mIGJ1Y2tldCA9IGZpbmQoa2V5LCBbJl0oY29uc3QgQnVja2V0JiBidWNrZXQpIHsgcmV0dXJu
ICFidWNrZXQua2V5IHx8IGJ1Y2tldC5rZXkgPT0ga2V5OyB9KTsKLSAgICAgICAgaWYgKCFidWNr
ZXQua2V5KSB7Ci0gICAgICAgICAgICBidWNrZXQua2V5ID0ga2V5OwotICAgICAgICAgICAgKytt
X2tleUNvdW50OwotICAgICAgICB9Ci0gICAgICAgIGJ1Y2tldC52YWx1ZSA9IHZhbHVlOwotICAg
IH0KLQotICAgIC8vIGtleSBtdXN0IGJlIGluIHRoZSBtYXAuCi0gICAgVmFsdWUgcmVtb3ZlKGNv
bnN0IEtleSYga2V5KQotICAgIHsKLSAgICAgICAgaWYgKHNob3VsZFNocmluaygpKQotICAgICAg
ICAgICAgcmVoYXNoKCk7Ci0KLSAgICAgICAgYXV0byYgYnVja2V0ID0gZmluZChrZXksIFsmXShj
b25zdCBCdWNrZXQmIGJ1Y2tldCkgeyByZXR1cm4gYnVja2V0LmtleSA9PSBrZXk7IH0pOwotICAg
ICAgICBWYWx1ZSB2YWx1ZSA9IGJ1Y2tldC52YWx1ZTsKLSAgICAgICAgYnVja2V0LmtleSA9IEtl
eSgpOwotICAgICAgICAtLW1fa2V5Q291bnQ7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkNhcGFjaXR5ID0gMTY7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heExvYWQgPSAyOwotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCByZWhhc2hMb2FkID0gNDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWlu
TG9hZCA9IDg7Ci0KLSAgICBib29sIHNob3VsZEdyb3coKSB7IHJldHVybiBtX2tleUNvdW50ICog
bWF4TG9hZCA+PSBjYXBhY2l0eSgpOyB9Ci0gICAgYm9vbCBzaG91bGRTaHJpbmsoKSB7IHJldHVy
biBtX2tleUNvdW50ICogbWluTG9hZCA8PSBjYXBhY2l0eSgpICYmIGNhcGFjaXR5KCkgPiBtaW5D
YXBhY2l0eTsgfQotCi0gICAgdm9pZCByZWhhc2goKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFByZWRpY2F0ZT4KLSAgICBCdWNrZXQmIGZpbmQoY29uc3QgS2V5JiBrZXksIGNvbnN0IFByZWRp
Y2F0ZSYgcHJlZGljYXRlKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBoID0gSGFzaDo6
aGFzaChrZXkpOyA7ICsraCkgewotICAgICAgICAgICAgdW5zaWduZWQgaSA9IGggJiBtX3RhYmxl
TWFzazsKLQotICAgICAgICAgICAgQnVja2V0JiBidWNrZXQgPSBtX3RhYmxlW2ldOwotICAgICAg
ICAgICAgaWYgKHByZWRpY2F0ZShidWNrZXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBidWNr
ZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBtX2tleUNvdW50OwotICAgIHVu
c2lnbmVkIG1fdGFibGVNYXNrOwotICAgIFZlY3RvcjxCdWNrZXQ+IG1fdGFibGU7Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoPgotdm9p
ZCBNYXA8S2V5LCBWYWx1ZSwgSGFzaD46OnJlaGFzaCgpCi17Ci0gICAgYXV0byBvbGRUYWJsZSA9
IHN0ZDo6bW92ZShtX3RhYmxlKTsKLQotICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IHN0ZDo6bWF4
KG1pbkNhcGFjaXR5LCBtX2tleUNvdW50ICogcmVoYXNoTG9hZCk7Ci0gICAgbV90YWJsZS5ncm93
KG5ld0NhcGFjaXR5KTsKLQotICAgIG1fa2V5Q291bnQgPSAwOwotICAgIG1fdGFibGVNYXNrID0g
bmV3Q2FwYWNpdHkgLSAxOwotCi0gICAgZm9yIChhdXRvJiBidWNrZXQgOiBvbGRUYWJsZSkgewot
ICAgICAgICBpZiAoIWJ1Y2tldC5rZXkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBCQVNTRVJUKCFzaG91bGRHcm93KCkpOwotICAgICAgICBzZXQoYnVja2V0LmtleSwgYnVja2V0
LnZhbHVlKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEhhc2g+IGNvbnN0IHVuc2lnbmVkIE1hcDxLZXksIFZhbHVlLCBIYXNoPjo6
bWluQ2FwYWNpdHk7Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIE1hcF9o
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5j
aWVzL2JtYWxsb2MvTXV0ZXguaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9k
ZXBlbmRlbmNpZXMvYm1hbGxvYy9NdXRleC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmMGU1OTk4MmJkMjlhZDRjOWRmZWFhMzg5NzM3MjIwNjczNmU4YWNjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9NdXRleC5oCisrKyAvZGV2L251bGwKQEAg
LTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIE11dGV4X2gKLSNkZWZpbmUgTXV0ZXhfaAotCi0jaW5jbHVkZSAiU3RhdGlj
TXV0ZXguaCIKLQotLy8gQSBmYXN0IHJlcGxhY2VtZW50IGZvciBzdGQ6Om11dGV4LCBmb3IgdXNl
IGluIHN0YW5kYXJkIHN0b3JhZ2UuCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotY2xhc3MgTXV0
ZXggOiBwdWJsaWMgU3RhdGljTXV0ZXggewotcHVibGljOgotICAgIE11dGV4KCk7Ci19OwotCi1p
bmxpbmUgTXV0ZXg6Ok11dGV4KCkKLXsKLSAgICAvLyBTdGF0aWNNdXRleCByZXF1aXJlcyBleHBs
aWNpdCBpbml0aWFsaXphdGlvbiB3aGVuIHVzZWQgaW4gbm9uLXN0YXRpYyBzdG9yYWdlLgotICAg
IGluaXQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gTXV0ZXhf
aApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVu
Y2llcy9ibWFsbG9jL09iamVjdC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3Rm
L2RlcGVuZGVuY2llcy9ibWFsbG9jL09iamVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3MGE0NzUxZmU3Yzc0ZGY5YWE5ZWM0MWM4ODE3MjViNTBhZjc4YWZhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9PYmplY3QuaAorKysgL2Rldi9udWxs
CkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBPYmplY3RfaAotI2RlZmluZSBPYmplY3RfaAotCi0jaW5jbHVkZSA8
Y3N0ZGRlZj4KLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi1jbGFzcyBDaHVuazsKLWNsYXNzIFNt
YWxsTGluZTsKLWNsYXNzIFNtYWxsUGFnZTsKLQotY2xhc3MgT2JqZWN0IHsKLXB1YmxpYzoKLSAg
ICBPYmplY3Qodm9pZCopOwotICAgIE9iamVjdChDaHVuayosIHZvaWQqKTsKLSAgICBPYmplY3Qo
Q2h1bmsqIGNodW5rLCBzaXplX3Qgb2Zmc2V0KQotICAgICAgICA6IG1fY2h1bmsoY2h1bmspCi0g
ICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ2h1bmsq
IGNodW5rKCkgeyByZXR1cm4gbV9jaHVuazsgfQotICAgIHNpemVfdCBvZmZzZXQoKSB7IHJldHVy
biBtX29mZnNldDsgfQotICAgIGNoYXIqIGFkZHJlc3MoKTsKLQotICAgIFNtYWxsTGluZSogbGlu
ZSgpOwotICAgIFNtYWxsUGFnZSogcGFnZSgpOwotICAgIAotICAgIE9iamVjdCBvcGVyYXRvciso
c2l6ZV90KTsKLSAgICBPYmplY3Qgb3BlcmF0b3ItKHNpemVfdCk7Ci0gICAgYm9vbCBvcGVyYXRv
cjw9KGNvbnN0IE9iamVjdCYpOwotCi1wcml2YXRlOgotICAgIENodW5rKiBtX2NodW5rOwotICAg
IHNpemVfdCBtX29mZnNldDsKLX07Ci0KLWlubGluZSBPYmplY3QgT2JqZWN0OjpvcGVyYXRvciso
c2l6ZV90IG9mZnNldCkKLXsKLSAgICByZXR1cm4gT2JqZWN0KG1fY2h1bmssIG1fb2Zmc2V0ICsg
b2Zmc2V0KTsKLX0KLQotaW5saW5lIE9iamVjdCBPYmplY3Q6Om9wZXJhdG9yLShzaXplX3Qgb2Zm
c2V0KQotewotICAgIHJldHVybiBPYmplY3QobV9jaHVuaywgbV9vZmZzZXQgLSBvZmZzZXQpOwot
fQotCi1pbmxpbmUgYm9vbCBPYmplY3Q6Om9wZXJhdG9yPD0oY29uc3QgT2JqZWN0JiBvdGhlcikK
LXsKLSAgICBCQVNTRVJUKG1fY2h1bmsgPT0gb3RoZXIubV9jaHVuayk7Ci0gICAgcmV0dXJuIG1f
b2Zmc2V0IDw9IG90aGVyLm1fb2Zmc2V0OwotfQotCi19OyAvLyBuYW1lc3BhY2UgYm1hbGxvYwot
Ci0jZW5kaWYgLy8gT2JqZWN0X2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9PYmplY3RUeXBlLmNwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9PYmplY3RUeXBl
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFlYWIwMDIyM2VlMjUxZDUxODg4
MjJjMWE4YTBmZjg4NDBkNzJmZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVz
L2JtYWxsb2MvT2JqZWN0VHlwZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgIk9iamVjdFR5cGUuaCIKLQotI2luY2x1ZGUgIkNodW5rLmgiCi0jaW5jbHVkZSAiSGVhcC5o
IgotI2luY2x1ZGUgIk9iamVjdC5oIgotI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKLQotbmFtZXNw
YWNlIGJtYWxsb2MgewotCi1PYmplY3RUeXBlIG9iamVjdFR5cGUoSGVhcEtpbmQga2luZCwgdm9p
ZCogb2JqZWN0KQotewotICAgIGlmIChtaWdodEJlTGFyZ2Uob2JqZWN0KSkgewotICAgICAgICBp
ZiAoIW9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiBPYmplY3RUeXBlOjpTbWFsbDsKLQotICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0g
ICAgICAgIGlmIChQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0RmFzdENhc2UoKS0+
YXQoa2luZCkuaXNMYXJnZShsb2NrLCBvYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIE9iamVj
dFR5cGU6OkxhcmdlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gT2JqZWN0VHlwZTo6U21hbGw7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9PYmplY3RUeXBlLmggYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvT2Jq
ZWN0VHlwZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTdmOTg3MmU1NGYyYjQw
OWExOWZjM2Y2Y2EwM2Y3YWVlOTI5ODQ2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRl
bmNpZXMvYm1hbGxvYy9PYmplY3RUeXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBPYmplY3RUeXBlX2gKLSNkZWZpbmUgT2JqZWN0VHlwZV9oCi0KLSNpbmNsdWRlICJCQXNz
ZXJ0LmgiCi0jaW5jbHVkZSAiSGVhcEtpbmQuaCIKLSNpbmNsdWRlICJTaXplcy5oIgotCi1uYW1l
c3BhY2UgYm1hbGxvYyB7Ci0KLWVudW0gY2xhc3MgT2JqZWN0VHlwZSA6IHVuc2lnbmVkIGNoYXIg
eyBTbWFsbCwgTGFyZ2UgfTsKLQotT2JqZWN0VHlwZSBvYmplY3RUeXBlKEhlYXBLaW5kLCB2b2lk
Kik7Ci0KLWlubGluZSBib29sIG1pZ2h0QmVMYXJnZSh2b2lkKiBvYmplY3QpCi17Ci0gICAgcmV0
dXJuICF0ZXN0KG9iamVjdCwgbGFyZ2VBbGlnbm1lbnRNYXNrKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gT2JqZWN0VHlwZV9oCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvUGVySGVhcEtp
bmQuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1h
bGxvYy9QZXJIZWFwS2luZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2FjMWEz
MDFkMzgxNDRmZTUyNjMwNjY3N2U5MDRlMzk4MmRkNmFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9QZXJIZWFwS2luZC5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJIZWFwS2luZC5oIgotCi1uYW1lc3BhY2UgYm1h
bGxvYyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1jbGFzcyBQZXJIZWFwS2luZEJhc2Ugewot
cHVibGljOgotICAgIFBlckhlYXBLaW5kQmFzZShjb25zdCBQZXJIZWFwS2luZEJhc2UmKSA9IGRl
bGV0ZTsKLSAgICBQZXJIZWFwS2luZEJhc2UmIG9wZXJhdG9yPShjb25zdCBQZXJIZWFwS2luZEJh
c2UmKSA9IGRlbGV0ZTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
Ci0gICAgUGVySGVhcEtpbmRCYXNlKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKLSAgICB7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUhlYXBzOyBpLS07KQotICAgICAgICAgICAgbmV3
ICgmYXQoaSkpIFQoc3RhdGljX2Nhc3Q8SGVhcEtpbmQ+KGkpLCBzdGQ6OmZvcndhcmQ8QXJndW1l
bnRzPihhcmd1bWVudHMpLi4uKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHNpemVfdCBzaXpl
KCkgeyByZXR1cm4gbnVtSGVhcHM7IH0KLSAgICAKLSAgICBUJiBhdChzaXplX3QgaSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxUKj4oJm1fbWVtb3J5W2ldKTsKLSAg
ICB9Ci0gICAgCi0gICAgY29uc3QgVCYgYXQoc2l6ZV90IGkpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8VCo+KCZtX21lbW9yeVtpXSk7Ci0gICAgfQotICAg
IAotICAgIFQmIGF0KEhlYXBLaW5kIGhlYXBLaW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGF0
KHN0YXRpY19jYXN0PHNpemVfdD4oaGVhcEtpbmQpKTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3Qg
VCYgYXQoSGVhcEtpbmQgaGVhcEtpbmQpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXQo
c3RhdGljX2Nhc3Q8c2l6ZV90PihoZWFwS2luZCkpOwotICAgIH0KLSAgICAKLSAgICBUJiBvcGVy
YXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsgfQotICAgIGNvbnN0IFQmIG9wZXJhdG9y
W10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9Ci0gICAgVCYgb3BlcmF0b3JbXShI
ZWFwS2luZCBoZWFwS2luZCkgeyByZXR1cm4gYXQoaGVhcEtpbmQpOyB9Ci0gICAgY29uc3QgVCYg
b3BlcmF0b3JbXShIZWFwS2luZCBoZWFwS2luZCkgY29uc3QgeyByZXR1cm4gYXQoaGVhcEtpbmQp
OyB9Ci0KLXByaXZhdGU6Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmFycmF5PHR5cGVuYW1l
IHN0ZDo6YWxpZ25lZF9zdG9yYWdlPHNpemVvZihUKSwgc3RkOjphbGlnbm1lbnRfb2Y8VD46OnZh
bHVlPjo6dHlwZSwgbnVtSGVhcHM+IE1lbW9yeTsKLSAgICBNZW1vcnkgbV9tZW1vcnk7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotY2xhc3MgU3RhdGljUGVySGVhcEtpbmQgOiBwdWJsaWMg
UGVySGVhcEtpbmRCYXNlPFQ+IHsKLXB1YmxpYzoKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+Ci0gICAgU3RhdGljUGVySGVhcEtpbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRz
KQotICAgICAgICA6IFBlckhlYXBLaW5kQmFzZTxUPihzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihh
cmd1bWVudHMpLi4uKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgflN0YXRpY1BlckhlYXBLaW5k
KCkgPSBkZWxldGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotY2xhc3MgUGVySGVhcEtp
bmQgOiBwdWJsaWMgUGVySGVhcEtpbmRCYXNlPFQ+IHsKLXB1YmxpYzoKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgUGVySGVhcEtpbmQoQXJndW1lbnRzJiYuLi4gYXJn
dW1lbnRzKQotICAgICAgICA6IFBlckhlYXBLaW5kQmFzZTxUPihzdGQ6OmZvcndhcmQ8QXJndW1l
bnRzPihhcmd1bWVudHMpLi4uKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgflBlckhlYXBLaW5k
KCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUhlYXBzOyBpLS07KQotICAg
ICAgICAgICAgdGhpcy0+YXQoaSkuflQoKTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBi
bWFsbG9jCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9k
ZXBlbmRlbmNpZXMvYm1hbGxvYy9QZXJQcm9jZXNzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvUGVyUHJvY2Vzcy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiMWZiNmI0YTk0ZWFmMmJlOGM2NmVmMDIxMWMzMjAxNDA4ZDgy
NzM4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9QZXJQcm9j
ZXNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBlclByb2Nlc3NfaAotI2RlZmlu
ZSBQZXJQcm9jZXNzX2gKLQotI2luY2x1ZGUgIklubGluZS5oIgotI2luY2x1ZGUgIlNpemVzLmgi
Ci0jaW5jbHVkZSAiU3RhdGljTXV0ZXguaCIKLSNpbmNsdWRlIDxtdXRleD4KLQotbmFtZXNwYWNl
IGJtYWxsb2MgewotCi0vLyBVc2FnZToKLS8vICAgICBPYmplY3QqIG9iamVjdCA9IFBlclByb2Nl
c3M8T2JqZWN0Pjo6Z2V0KCk7Ci0vLyAgICAgeCA9IG9iamVjdC0+ZmllbGQtPmZpZWxkOwotLy8K
LS8vIE9iamVjdCB3aWxsIGJlIGluc3RhbnRpYXRlZCBvbmx5IG9uY2UsIGV2ZW4gaW4gdGhlIGZh
Y2Ugb2YgY29uY3VycmVuY3kuCi0vLwotLy8gTk9URTogSWYgeW91IG9ic2VydmUgZ2xvYmFsIHNp
ZGUtZWZmZWN0cyBvZiB0aGUgT2JqZWN0IGNvbnN0cnVjdG9yLCBiZQotLy8gc3VyZSB0byBsb2Nr
IHRoZSBPYmplY3QgbXV0ZXguIEZvciBleGFtcGxlOgotLy8KLS8vIE9iamVjdCgpIDogbV9maWVs
ZCguLi4pIHsgZ2xvYmFsRmxhZyA9IHRydWUgfQotLy8KLS8vIE9iamVjdCogb2JqZWN0ID0gUGVy
UHJvY2VzczxPYmplY3Q+OjpnZXQoKTsKLS8vIHggPSBvYmplY3QtPm1fZmllbGQ7IC8vIE9LCi0v
LyBpZiAoZ2xvYmFsRmxhZykgeyAuLi4gfSAvLyBVbmRlZmluZWQgYmVoYXZpb3IuCi0vLwotLy8g
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8T2JqZWN0Pjo6bXV0
ZXgoKSk7Ci0vLyBPYmplY3QqIG9iamVjdCA9IFBlclByb2Nlc3M8T2JqZWN0Pjo6Z2V0KGxvY2sp
OwotLy8gaWYgKGdsb2JhbEZsYWcpIHsgLi4uIH0gLy8gT0suCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1jbGFzcyBQZXJQcm9jZXNzIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgVCogZ2V0KCk7Ci0g
ICAgc3RhdGljIFQqIGdldEZhc3RDYXNlKCk7Ci0gICAgCi0gICAgc3RhdGljIFN0YXRpY011dGV4
JiBtdXRleCgpIHsgcmV0dXJuIHNfbXV0ZXg7IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgVCog
Z2V0U2xvd0Nhc2UoKTsKLQotICAgIHN0YXRpYyBzdGQ6OmF0b21pYzxUKj4gc19vYmplY3Q7Ci0g
ICAgc3RhdGljIFN0YXRpY011dGV4IHNfbXV0ZXg7Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIHN0
ZDo6YWxpZ25lZF9zdG9yYWdlPHNpemVvZihUKSwgc3RkOjphbGlnbm1lbnRfb2Y8VD46OnZhbHVl
Pjo6dHlwZSBNZW1vcnk7Ci0gICAgc3RhdGljIE1lbW9yeSBzX21lbW9yeTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1JTkxJTkUgVCogUGVyUHJvY2VzczxUPjo6Z2V0RmFzdENhc2UoKQot
ewotICAgIHJldHVybiBzX29iamVjdC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSU5MSU5FIFQqIFBlclByb2Nlc3M8VD46OmdldCgp
Ci17Ci0gICAgVCogb2JqZWN0ID0gZ2V0RmFzdENhc2UoKTsKLSAgICBpZiAoIW9iamVjdCkKLSAg
ICAgICAgcmV0dXJuIGdldFNsb3dDYXNlKCk7Ci0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLU5PX0lOTElORSBUKiBQZXJQcm9jZXNzPFQ+OjpnZXRTbG93Q2Fz
ZSgpCi17Ci0gICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKHNfbXV0ZXgpOwot
ICAgIGlmICghc19vYmplY3QubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lKSkgewotICAg
ICAgICBUKiB0ID0gbmV3ICgmc19tZW1vcnkpIFQobG9jayk7Ci0gICAgICAgIHNfb2JqZWN0LnN0
b3JlKHQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwotICAgIH0KLSAgICByZXR1cm4gc19v
YmplY3QubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLXN0ZDo6YXRvbWljPFQqPiBQZXJQcm9jZXNzPFQ+OjpzX29iamVjdDsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLVN0YXRpY011dGV4IFBlclByb2Nlc3M8VD46OnNfbXV0ZXg7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci10eXBlbmFtZSBQZXJQcm9jZXNzPFQ+OjpNZW1vcnkgUGVy
UHJvY2VzczxUPjo6c19tZW1vcnk7Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlm
IC8vIFBlclByb2Nlc3NfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL1BlclRocmVhZC5oIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL1BlclRocmVhZC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDBhY2EwMjkzODM1MzhmZTA1MmY5MDMxOWJjYzEw
ZTFkMmY4OWVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9Q
ZXJUaHJlYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQZXJUaHJlYWRf
aAotI2RlZmluZSBQZXJUaHJlYWRfaAotCi0jaW5jbHVkZSAiQlBsYXRmb3JtLmgiCi0jaW5jbHVk
ZSAiSW5saW5lLmgiCi0jaW5jbHVkZSAiUGVySGVhcEtpbmQuaCIKLSNpbmNsdWRlICJWTUFsbG9j
YXRlLmgiCi0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotCi0jaWYgZGVm
aW5lZChfX2hhc19pbmNsdWRlKQotI2lmIF9faGFzX2luY2x1ZGUoPFN5c3RlbS9wdGhyZWFkX21h
Y2hkZXAuaD4pCi0jaW5jbHVkZSA8U3lzdGVtL3B0aHJlYWRfbWFjaGRlcC5oPgotI2RlZmluZSBI
QVZFX1BUSFJFQURfTUFDSERFUF9IIDEKLSNlbHNlCi0jZGVmaW5lIEhBVkVfUFRIUkVBRF9NQUNI
REVQX0ggMAotI2VuZGlmCi0jZWxzZQotI2RlZmluZSBIQVZFX1BUSFJFQURfTUFDSERFUF9IIDAK
LSNlbmRpZgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLS8vIFVzYWdlOgotLy8gICAgIE9iamVj
dCogb2JqZWN0ID0gUGVyVGhyZWFkPE9iamVjdD46OmdldCgpOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotY2xhc3MgUGVyVGhyZWFkIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgVCogZ2V0KCk7Ci0g
ICAgc3RhdGljIFQqIGdldEZhc3RDYXNlKCk7Ci0gICAgc3RhdGljIFQqIGdldFNsb3dDYXNlKCk7
Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJ1Y3Rvcih2b2lkKik7Ci19OwotCi0j
aWYgSEFWRV9QVEhSRUFEX01BQ0hERVBfSAotCi1jbGFzcyBDYWNoZTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBQZXJUaHJlYWRTdG9yYWdlOwotCi0vLyBGb3Igbm93LCB3ZSBvbmx5IHN1
cHBvcnQgUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj4uIFdlIGNhbiBleHBhbmQgdG8gb3Ro
ZXIgdHlwZXMgYnkKLS8vIHVzaW5nIG1vcmUga2V5cy4KLXRlbXBsYXRlPD4gc3RydWN0IFBlclRo
cmVhZFN0b3JhZ2U8UGVySGVhcEtpbmQ8Q2FjaGU+PiB7Ci0gICAgc3RhdGljIGNvbnN0IHB0aHJl
YWRfa2V5X3Qga2V5ID0gX19QVEtfRlJBTUVXT1JLX0pBVkFTQ1JJUFRDT1JFX0tFWTA7Ci0KLSAg
ICBzdGF0aWMgdm9pZCogZ2V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfcHRocmVhZF9nZXRz
cGVjaWZpY19kaXJlY3Qoa2V5KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBpbml0KHZvaWQq
IG9iamVjdCwgdm9pZCAoKmRlc3RydWN0b3IpKHZvaWQqKSkKLSAgICB7Ci0gICAgICAgIF9wdGhy
ZWFkX3NldHNwZWNpZmljX2RpcmVjdChrZXksIG9iamVjdCk7Ci0gICAgICAgIHB0aHJlYWRfa2V5
X2luaXRfbnAoa2V5LCBkZXN0cnVjdG9yKTsKLSAgICB9Ci19OwotCi0jZWxzZQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgUGVyVGhyZWFkU3RvcmFnZSB7Ci0gICAgc3RhdGljIGJvb2wg
c19kaWRJbml0aWFsaXplOwotICAgIHN0YXRpYyBwdGhyZWFkX2tleV90IHNfa2V5OwotICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBzX29uY2VGbGFnOwotICAgIAotICAgIHN0YXRpYyB2b2lkKiBn
ZXQoKQotICAgIHsKLSAgICAgICAgaWYgKCFzX2RpZEluaXRpYWxpemUpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMoc19rZXkp
OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBpbml0KHZvaWQqIG9iamVjdCwgdm9pZCAo
KmRlc3RydWN0b3IpKHZvaWQqKSkKLSAgICB7Ci0gICAgICAgIHN0ZDo6Y2FsbF9vbmNlKHNfb25j
ZUZsYWcsIFtkZXN0cnVjdG9yXSgpIHsKLSAgICAgICAgICAgIGludCBlcnJvciA9IHB0aHJlYWRf
a2V5X2NyZWF0ZSgmc19rZXksIGRlc3RydWN0b3IpOwotICAgICAgICAgICAgaWYgKGVycm9yKQot
ICAgICAgICAgICAgICAgIEJDUkFTSCgpOwotICAgICAgICAgICAgc19kaWRJbml0aWFsaXplID0g
dHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoc19rZXksIG9i
amVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBQZXJUaHJlYWRT
dG9yYWdlPFQ+OjpzX2RpZEluaXRpYWxpemU7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBwdGhyZWFk
X2tleV90IFBlclRocmVhZFN0b3JhZ2U8VD46OnNfa2V5OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RkOjpvbmNlX2ZsYWcgUGVyVGhyZWFkU3RvcmFnZTxUPjo6c19vbmNlRmxhZzsKLQotI2VuZGlm
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1JTkxJTkUgVCogUGVyVGhyZWFkPFQ+OjpnZXRGYXN0
Q2FzZSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihQZXJUaHJlYWRTdG9yYWdlPFQ+
OjpnZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCogUGVyVGhyZWFk
PFQ+OjpnZXQoKQotewotICAgIFQqIHQgPSBnZXRGYXN0Q2FzZSgpOwotICAgIGlmICghdCkKLSAg
ICAgICAgcmV0dXJuIGdldFNsb3dDYXNlKCk7Ci0gICAgcmV0dXJuIHQ7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci12b2lkIFBlclRocmVhZDxUPjo6ZGVzdHJ1Y3Rvcih2b2lkKiBwKQotewot
ICAgIFQqIHQgPSBzdGF0aWNfY2FzdDxUKj4ocCk7Ci0gICAgdC0+flQoKTsKLSAgICB2bURlYWxs
b2NhdGUodCwgdm1TaXplKHNpemVvZihUKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
VCogUGVyVGhyZWFkPFQ+OjpnZXRTbG93Q2FzZSgpCi17Ci0gICAgQkFTU0VSVCghZ2V0RmFzdENh
c2UoKSk7Ci0gICAgVCogdCA9IHN0YXRpY19jYXN0PFQqPih2bUFsbG9jYXRlKHZtU2l6ZShzaXpl
b2YoVCkpKSk7Ci0gICAgbmV3ICh0KSBUKCk7Ci0gICAgUGVyVGhyZWFkU3RvcmFnZTxUPjo6aW5p
dCh0LCBkZXN0cnVjdG9yKTsKLSAgICByZXR1cm4gdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYm1h
bGxvYwotCi0jZW5kaWYgLy8gUGVyVGhyZWFkX2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9SYW5nZS5oIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL1JhbmdlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNDQ2ZjdlZTVlOWUyY2JmNzZlMmI3NDMy
MTQzMmVjNzA5ZDVlNzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFs
bG9jL1JhbmdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUmFuZ2VfaAotI2RlZmlu
ZSBSYW5nZV9oCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLQot
bmFtZXNwYWNlIGJtYWxsb2MgewotCi1jbGFzcyBSYW5nZSB7Ci1wdWJsaWM6Ci0gICAgUmFuZ2Uo
KQotICAgICAgICA6IG1fYmVnaW4oMCkKLSAgICAgICAgLCBtX3NpemUoMCkKLSAgICB7Ci0gICAg
fQotCi0gICAgUmFuZ2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplKQotICAgICAgICA6IG1fYmVn
aW4oc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YXJ0KSkKLSAgICAgICAgLCBtX3NpemUoc2l6ZSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgY2hhciogYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9
Ci0gICAgY2hhciogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbiArIG1fc2l6ZTsgfQotICAg
IHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgCi0gICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9zaXplOyB9Ci0gICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXM7IH0KLSAgICBib29sIG9wZXJhdG9yPChj
b25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW4gPCBvdGhlci5tX2JlZ2lu
OyB9Ci0KLXByaXZhdGU6Ci0gICAgY2hhciogbV9iZWdpbjsKLSAgICBzaXplX3QgbV9zaXplOwot
fTsKLQotaW5saW5lIGJvb2wgY2FuTWVyZ2UoY29uc3QgUmFuZ2UmIGEsIGNvbnN0IFJhbmdlJiBi
KQotewotICAgIHJldHVybiBhLmJlZ2luKCkgPT0gYi5lbmQoKSB8fCBhLmVuZCgpID09IGIuYmVn
aW4oKTsKLX0KLQotaW5saW5lIFJhbmdlIG1lcmdlKGNvbnN0IFJhbmdlJiBhLCBjb25zdCBSYW5n
ZSYgYikKLXsKLSAgICByZXR1cm4gUmFuZ2Uoc3RkOjptaW4oYS5iZWdpbigpLCBiLmJlZ2luKCkp
LCBhLnNpemUoKSArIGIuc2l6ZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0j
ZW5kaWYgLy8gUmFuZ2VfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL1NjYXZlbmdlci5jcHAgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvU2NhdmVuZ2VyLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI2NGMyNzE2NjVmMTc0ZjZlMTJiMzBkN2Q0
YjhmOGZmZTI4ODY4Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxs
b2MvU2NhdmVuZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgIlNjYXZlbmdl
ci5oIgotCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgPHRocmVhZD4KLQotbmFtZXNwYWNl
IGJtYWxsb2MgewotCi1TY2F2ZW5nZXI6OlNjYXZlbmdlcihzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+JikKLXsKLSNpZiBCT1MoREFSV0lOKQotICAgIGF1dG8gcXVldWUgPSBkaXNwYXRjaF9x
dWV1ZV9jcmVhdGUoIldlYktpdCBNYWxsb2MgTWVtb3J5IFByZXNzdXJlIEhhbmRsZXIiLCBESVNQ
QVRDSF9RVUVVRV9TRVJJQUwpOwotICAgIG1fcHJlc3N1cmVIYW5kbGVyRGlzcGF0Y2hTb3VyY2Ug
PSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX01FTU9SWVBSRVNT
VVJFLCAwLCBESVNQQVRDSF9NRU1PUllQUkVTU1VSRV9DUklUSUNBTCwgcXVldWUpOwotICAgIGRp
c3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihtX3ByZXNzdXJlSGFuZGxlckRpc3BhdGNo
U291cmNlLCBeewotICAgICAgICBzY2F2ZW5nZSgpOwotICAgIH0pOwotICAgIGRpc3BhdGNoX3Jl
c3VtZShtX3ByZXNzdXJlSGFuZGxlckRpc3BhdGNoU291cmNlKTsKLSAgICBkaXNwYXRjaF9yZWxl
YXNlKHF1ZXVlKTsKLSNlbmRpZgotfQotCi12b2lkIFNjYXZlbmdlcjo6c2NhdmVuZ2UoKQotewot
ICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhIZWFwOjptdXRleCgpKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1IZWFwczsgaS0tOykKLSAgICAgICAgUGVyUHJvY2VzczxQ
ZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKS5zY2F2ZW5nZShsb2NrKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgYm1hbGxvYwotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvU2NhdmVuZ2VyLmggYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvU2NhdmVuZ2VyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NzMxZGNiZTVmZjBiOTZmMDY1N2MzMTA2
ZjY4ZjlkZWE1M2U4N2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFs
bG9jL1NjYXZlbmdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIkJQbGF0Zm9ybS5oIgotI2luY2x1ZGUgIlN0YXRpY011dGV4LmgiCi0jaW5jbHVkZSA8
bXV0ZXg+Ci0KLSNpZiBCT1MoREFSV0lOKQotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi0vLyBGSVhNRTogVGhpcyBjbGFzcyBz
aG91bGQgYmVjb21lIGEgY29tbW9uIHNjYXZlbmdlciBtZWNoYW5pc20gZm9yIGFsbCBoZWFwcy4K
LS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ5NzMKLQotY2xh
c3MgU2NhdmVuZ2VyIHsKLXB1YmxpYzoKLSAgICBTY2F2ZW5nZXIoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYpOwotICAgIAotICAgIH5TY2F2ZW5nZXIoKSA9IGRlbGV0ZTsKLSAgICAKLSAg
ICB2b2lkIHNjYXZlbmdlKCk7Ci0gICAgCi0jaWYgQk9TKERBUldJTikKLSAgICB2b2lkIHNldFNj
YXZlbmdlclRocmVhZFFPU0NsYXNzKHFvc19jbGFzc190IG92ZXJyaWRlQ2xhc3MpIHsgbV9yZXF1
ZXN0ZWRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyA9IG92ZXJyaWRlQ2xhc3M7IH0KLSAgICBxb3Nf
Y2xhc3NfdCByZXF1ZXN0ZWRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcygpIGNvbnN0IHsgcmV0dXJu
IG1fcmVxdWVzdGVkU2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3M7IH0KLSNlbmRpZgotCi1wcml2YXRl
OgotI2lmIEJPUyhEQVJXSU4pCi0gICAgZGlzcGF0Y2hfc291cmNlX3QgbV9wcmVzc3VyZUhhbmRs
ZXJEaXNwYXRjaFNvdXJjZTsKLSAgICBxb3NfY2xhc3NfdCBtX3JlcXVlc3RlZFNjYXZlbmdlclRo
cmVhZFFPU0NsYXNzIHsgUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEIH07Ci0jZW5kaWYKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvU2NvcGVFeGl0LmggYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvU2NvcGVF
eGl0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMTFjMGMyYWJhZGVhNDVjMjBh
NzhmOGNhMzdhYWMwMjMzZjdiMmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2ll
cy9ibWFsbG9jL1Njb3BlRXhpdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSA8dHlw
ZV90cmFpdHM+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBFeGl0RnVuY3Rpb24+Ci1jbGFzcyBTY29wZUV4aXQgewotcHVibGlj
OgotICAgIGV4cGxpY2l0IFNjb3BlRXhpdChFeGl0RnVuY3Rpb24mJiBleGl0RnVuY3Rpb24pCi0g
ICAgICAgIDogbV9leGl0RnVuY3Rpb24oZXhpdEZ1bmN0aW9uKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB+U2NvcGVFeGl0KCkKLSAgICB7Ci0gICAgICAgIG1fZXhpdEZ1bmN0aW9uKCk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIEV4aXRGdW5jdGlvbiBtX2V4aXRGdW5jdGlvbjsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIEV4aXRGdW5jdGlvbj4KLVNjb3BlRXhpdDxFeGl0RnVuY3Rpb24+IG1ha2VT
Y29wZUV4aXQoRXhpdEZ1bmN0aW9uJiYgZXhpdEZ1bmN0aW9uKQotewotICAgIHJldHVybiBTY29w
ZUV4aXQ8RXhpdEZ1bmN0aW9uPihzdGQ6OmZvcndhcmQ8RXhpdEZ1bmN0aW9uPihleGl0RnVuY3Rp
b24pKTsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9TaXplcy5o
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9j
L1NpemVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNDg5MzU4ZDc0MzlkMWUw
ZWYwZjNjOTUxZjU2NTdhZTgzODBjM2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVu
Y2llcy9ibWFsbG9jL1NpemVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNpemVz
X2gKLSNkZWZpbmUgU2l6ZXNfaAotCi0jaW5jbHVkZSAiQWxnb3JpdGhtLmgiCi0jaW5jbHVkZSAi
QlBsYXRmb3JtLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNzdGRpbnQ+Ci0j
aW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8dHlwZV90cmFp
dHM+Ci0jaW5jbHVkZSA8Y2hyb25vPgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLS8vIFJlcG9z
aXRvcnkgZm9yIG1hbGxvYyBzaXppbmcgY29uc3RhbnRzIGFuZCBjYWxjdWxhdGlvbnMuCi0KLW5h
bWVzcGFjZSBTaXplcyB7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBrQiA9IDEwMjQ7Ci0gICAg
c3RhdGljIGNvbnN0IHNpemVfdCBNQiA9IGtCICoga0I7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGFsaWdubWVudCA9IDg7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBhbGlnbm1lbnRNYXNr
ID0gYWxpZ25tZW50IC0gMXVsOwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjaHVua1NpemUg
PSAxICogTUI7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjaHVua01hc2sgPSB+KGNodW5rU2l6
ZSAtIDF1bCk7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsTGluZVNpemUgPSAyNTY7
Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbFBhZ2VTaXplID0gNCAqIGtCOwotICAgIHN0
YXRpYyBjb25zdCBzaXplX3Qgc21hbGxQYWdlTGluZUNvdW50ID0gc21hbGxQYWdlU2l6ZSAvIHNt
YWxsTGluZVNpemU7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1hc2tTaXplQ2xhc3NNYXgg
PSA1MTI7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbE1heCA9IDMyICoga0I7Ci0KLSAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHBhZ2VTaXplTWF4ID0gc21hbGxNYXggKiAyOwotICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgcGFnZUNsYXNzQ291bnQgPSBwYWdlU2l6ZU1heCAvIHNtYWxsUGFn
ZVNpemU7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHBhZ2VTaXplV2FzdGVGYWN0b3IgPSA4
OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbG9nV2FzdGVGYWN0b3IgPSA4OwotCi0gICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBsYXJnZUFsaWdubWVudCA9IHNtYWxsTWF4IC8gcGFnZVNpemVXYXN0
ZUZhY3RvcjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlQWxpZ25tZW50TWFzayA9IGxh
cmdlQWxpZ25tZW50IC0gMTsKLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZGVhbGxvY2F0b3JM
b2dDYXBhY2l0eSA9IDUxMjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJ1bXBSYW5nZUNhY2hl
Q2FwYWNpdHkgPSAzOwotICAgIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2NhdmVuZ2VyQnl0
ZXNQZXJNZW1vcnlQcmVzc3VyZUNoZWNrID0gMTYgKiBNQjsKLSAgICBzdGF0aWMgY29uc3QgZG91
YmxlIG1lbW9yeVByZXNzdXJlVGhyZXNob2xkID0gMC43NTsKLSAgICAKLSAgICBzdGF0aWMgY29u
c3Qgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBhc3luY1Rhc2tTbGVlcER1cmF0aW9uID0gc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcygyMDAwKTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IG1hc2tTaXplQ2xhc3NDb3VudCA9IG1hc2tTaXplQ2xhc3NNYXggLyBhbGlnbm1lbnQ7Ci0K
LSAgICBpbmxpbmUgY29uc3RleHByIHNpemVfdCBtYXNrU2l6ZUNsYXNzKHNpemVfdCBzaXplKQot
ICAgIHsKLSAgICAgICAgLy8gV2UgbWFzayB0byBhY2NvbW1vZGF0ZSB6ZXJvLgotICAgICAgICBy
ZXR1cm4gbWFzaygoc2l6ZSAtIDEpIC8gYWxpZ25tZW50LCBtYXNrU2l6ZUNsYXNzQ291bnQgLSAx
KTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgc2l6ZV90IG1hc2tPYmplY3RTaXplKHNpemVfdCBtYXNr
U2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChtYXNrU2l6ZUNsYXNzICsgMSkgKiBh
bGlnbm1lbnQ7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBsb2dBbGlnbm1lbnRN
aW4gPSBtYXNrU2l6ZUNsYXNzTWF4IC8gbG9nV2FzdGVGYWN0b3I7Ci0KLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGxvZ1NpemVDbGFzc0NvdW50ID0gKGxvZzIoc21hbGxNYXgpIC0gbG9nMihtYXNr
U2l6ZUNsYXNzTWF4KSkgKiBsb2dXYXN0ZUZhY3RvcjsKLQotICAgIGlubGluZSBzaXplX3QgbG9n
U2l6ZUNsYXNzKHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgc2l6ZV90IGJhc2UgPSBsb2cy
KHNpemUgLSAxKSAtIGxvZzIobWFza1NpemVDbGFzc01heCk7Ci0gICAgICAgIHNpemVfdCBvZmZz
ZXQgPSAoc2l6ZSAtIDEgLSAobWFza1NpemVDbGFzc01heCA8PCBiYXNlKSk7Ci0gICAgICAgIHJl
dHVybiBiYXNlICogbG9nV2FzdGVGYWN0b3IgKyBvZmZzZXQgLyAobG9nQWxpZ25tZW50TWluIDw8
IGJhc2UpOwotICAgIH0KLQotICAgIGlubGluZSBzaXplX3QgbG9nT2JqZWN0U2l6ZShzaXplX3Qg
bG9nU2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgc2l6ZV90IGJhc2UgPSBsb2dTaXplQ2xhc3Mg
LyBsb2dXYXN0ZUZhY3RvcjsKLSAgICAgICAgc2l6ZV90IG9mZnNldCA9IGxvZ1NpemVDbGFzcyAl
IGxvZ1dhc3RlRmFjdG9yOwotICAgICAgICByZXR1cm4gKG1hc2tTaXplQ2xhc3NNYXggPDwgYmFz
ZSkgKyAob2Zmc2V0ICsgMSkgKiAobG9nQWxpZ25tZW50TWluIDw8IGJhc2UpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZUNsYXNzQ291bnQgPSBtYXNrU2l6ZUNsYXNzQ291
bnQgKyBsb2dTaXplQ2xhc3NDb3VudDsKLQotICAgIGlubGluZSBzaXplX3Qgc2l6ZUNsYXNzKHNp
emVfdCBzaXplKQotICAgIHsKLSAgICAgICAgaWYgKHNpemUgPD0gbWFza1NpemVDbGFzc01heCkK
LSAgICAgICAgICAgIHJldHVybiBtYXNrU2l6ZUNsYXNzKHNpemUpOwotICAgICAgICByZXR1cm4g
bWFza1NpemVDbGFzc0NvdW50ICsgbG9nU2l6ZUNsYXNzKHNpemUpOwotICAgIH0KLQotICAgIGlu
bGluZSBzaXplX3Qgb2JqZWN0U2l6ZShzaXplX3Qgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAg
aWYgKHNpemVDbGFzcyA8IG1hc2tTaXplQ2xhc3NDb3VudCkKLSAgICAgICAgICAgIHJldHVybiBt
YXNrT2JqZWN0U2l6ZShzaXplQ2xhc3MpOwotICAgICAgICByZXR1cm4gbG9nT2JqZWN0U2l6ZShz
aXplQ2xhc3MgLSBtYXNrU2l6ZUNsYXNzQ291bnQpOwotICAgIH0KLSAgICAKLSAgICBpbmxpbmUg
c2l6ZV90IHBhZ2VTaXplKHNpemVfdCBwYWdlQ2xhc3MpCi0gICAgewotICAgICAgICByZXR1cm4g
KHBhZ2VDbGFzcyArIDEpICogc21hbGxQYWdlU2l6ZTsKLSAgICB9Ci19Ci0KLXVzaW5nIG5hbWVz
cGFjZSBTaXplczsKLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gU2l6ZXNf
aApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVu
Y2llcy9ibWFsbG9jL1NtYWxsTGluZS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL1NtYWxsTGluZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxODg5MzBlZGNhZDM4ZWRlNzdlZGIxNWE5ZGRmODIxZDhlZTE1OWJmLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9TbWFsbExpbmUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNtYWxsTGluZV9oCi0jZGVmaW5lIFNtYWxs
TGluZV9oCi0KLSNpbmNsdWRlICJCQXNzZXJ0LmgiCi0jaW5jbHVkZSAiTXV0ZXguaCIKLSNpbmNs
dWRlICJPYmplY3RUeXBlLmgiCi0jaW5jbHVkZSA8bXV0ZXg+Ci0KLW5hbWVzcGFjZSBibWFsbG9j
IHsKLQotY2xhc3MgU21hbGxMaW5lIHsKLXB1YmxpYzoKLSAgICB2b2lkIHJlZihzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JiwgdW5zaWduZWQgY2hhciA9IDEpOwotICAgIGJvb2wgZGVyZWYo
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwotICAgIHVuc2lnbmVkIHJlZkNvdW50KHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKSB7IHJldHVybiBtX3JlZkNvdW50OyB9Ci0gICAg
Ci0gICAgY2hhciogYmVnaW4oKTsKLSAgICBjaGFyKiBlbmQoKTsKLQotcHJpdmF0ZToKLSAgICB1
bnNpZ25lZCBjaGFyIG1fcmVmQ291bnQ7Ci0KLXN0YXRpY19hc3NlcnQoCi0gICAgc21hbGxMaW5l
U2l6ZSAvIGFsaWdubWVudCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRlY2x0eXBlKG1fcmVmQ291
bnQpPjo6bWF4KCksCi0gICAgIm1heGltdW0gb2JqZWN0IGNvdW50IG11c3QgZml0IGluIFNtYWxs
TGluZTo6bV9yZWZDb3VudCIpOwotCi19OwotCi1pbmxpbmUgdm9pZCBTbWFsbExpbmU6OnJlZihz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgdW5zaWduZWQgY2hhciByZWZDb3VudCkKLXsK
LSAgICBCQVNTRVJUKCFtX3JlZkNvdW50KTsKLSAgICBtX3JlZkNvdW50ID0gcmVmQ291bnQ7Ci19
Ci0KLWlubGluZSBib29sIFNtYWxsTGluZTo6ZGVyZWYoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYpCi17Ci0gICAgQkFTU0VSVChtX3JlZkNvdW50KTsKLSAgICAtLW1fcmVmQ291bnQ7Ci0g
ICAgcmV0dXJuICFtX3JlZkNvdW50OwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNl
bmRpZiAvLyBTbWFsbExpbmVfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL1NtYWxsUGFnZS5oIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL1NtYWxsUGFnZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmMyOWRlODhjMDVjZGQ1N2UzYWY5YjcyMmZh
MzcwYTQwZjY3MzVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxv
Yy9TbWFsbFBhZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNtYWxsUGFn
ZV9oCi0jZGVmaW5lIFNtYWxsUGFnZV9oCi0KLSNpbmNsdWRlICJCQXNzZXJ0LmgiCi0jaW5jbHVk
ZSAiTGlzdC5oIgotI2luY2x1ZGUgIk11dGV4LmgiCi0jaW5jbHVkZSAiVk1BbGxvY2F0ZS5oIgot
I2luY2x1ZGUgPG11dGV4PgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLWNsYXNzIFNtYWxsTGlu
ZTsKLQotY2xhc3MgU21hbGxQYWdlIDogcHVibGljIExpc3ROb2RlPFNtYWxsUGFnZT4gewotcHVi
bGljOgotICAgIHZvaWQgcmVmKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKLSAgICBi
b29sIGRlcmVmKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKLSAgICB1bnNpZ25lZCBy
ZWZDb3VudChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikgeyByZXR1cm4gbV9yZWZDb3Vu
dDsgfQotICAgIAotICAgIHNpemVfdCBzaXplQ2xhc3MoKSB7IHJldHVybiBtX3NpemVDbGFzczsg
fQotICAgIHZvaWQgc2V0U2l6ZUNsYXNzKHNpemVfdCBzaXplQ2xhc3MpIHsgbV9zaXplQ2xhc3Mg
PSBzaXplQ2xhc3M7IH0KLSAgICAKLSAgICBib29sIGhhc0ZyZWVMaW5lcyhzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+JikgY29uc3QgeyByZXR1cm4gbV9oYXNGcmVlTGluZXM7IH0KLSAgICB2
b2lkIHNldEhhc0ZyZWVMaW5lcyhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgYm9vbCBo
YXNGcmVlTGluZXMpIHsgbV9oYXNGcmVlTGluZXMgPSBoYXNGcmVlTGluZXM7IH0KLSAgICAKLSAg
ICBib29sIGhhc1BoeXNpY2FsUGFnZXMoKSB7IHJldHVybiBtX2hhc1BoeXNpY2FsUGFnZXM7IH0K
LSAgICB2b2lkIHNldEhhc1BoeXNpY2FsUGFnZXMoYm9vbCBoYXNQaHlzaWNhbFBhZ2VzKSB7IG1f
aGFzUGh5c2ljYWxQYWdlcyA9IGhhc1BoeXNpY2FsUGFnZXM7IH0KLSAgICAKLSAgICBTbWFsbExp
bmUqIGJlZ2luKCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyIHNsaWRlKCkgY29uc3QgeyByZXR1cm4g
bV9zbGlkZTsgfQotICAgIHZvaWQgc2V0U2xpZGUodW5zaWduZWQgY2hhciBzbGlkZSkgeyBtX3Ns
aWRlID0gc2xpZGU7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgdW5zaWduZWQgY2hhciBtX2hhc0Zy
ZWVMaW5lczogMTsKLSAgICB1bnNpZ25lZCBjaGFyIG1faGFzUGh5c2ljYWxQYWdlczogMTsKLSAg
ICB1bnNpZ25lZCBjaGFyIG1fcmVmQ291bnQ6IDc7Ci0gICAgdW5zaWduZWQgY2hhciBtX3NpemVD
bGFzczsKLSAgICB1bnNpZ25lZCBjaGFyIG1fc2xpZGU7Ci0KLXN0YXRpY19hc3NlcnQoCi0gICAg
c2l6ZUNsYXNzQ291bnQgPD0gc3RkOjpudW1lcmljX2xpbWl0czxkZWNsdHlwZShtX3NpemVDbGFz
cyk+OjptYXgoKSwKLSAgICAiTGFyZ2VzdCBzaXplIGNsYXNzIG11c3QgZml0IGluIFNtYWxsUGFn
ZSBtZXRhZGF0YSIpOwotfTsKLQotdXNpbmcgTGluZUNhY2hlID0gc3RkOjphcnJheTxMaXN0PFNt
YWxsUGFnZT4sIHNpemVDbGFzc0NvdW50PjsKLQotaW5saW5lIHZvaWQgU21hbGxQYWdlOjpyZWYo
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpCi17Ci0gICAgQkFTU0VSVCghbV9zbGlkZSk7
Ci0gICAgKyttX3JlZkNvdW50OwotICAgIEJBU1NFUlQobV9yZWZDb3VudCk7Ci19Ci0KLWlubGlu
ZSBib29sIFNtYWxsUGFnZTo6ZGVyZWYoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpCi17
Ci0gICAgQkFTU0VSVCghbV9zbGlkZSk7Ci0gICAgQkFTU0VSVChtX3JlZkNvdW50KTsKLSAgICAt
LW1fcmVmQ291bnQ7Ci0gICAgcmV0dXJuICFtX3JlZkNvdW50OwotfQotCi19IC8vIG5hbWVzcGFj
ZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBTbWFsbFBhZ2VfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL1N0YXRpY011dGV4
LmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1h
bGxvYy9TdGF0aWNNdXRleC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMmUx
YzNjMGMwODRlMzNjMmVhMzFhYWE4NTUxZWIwMzI2ZGQ0NTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL1N0YXRpY011dGV4LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgIlNjb3BlRXhpdC5oIgotI2luY2x1ZGUgIlN0YXRpY011dGV4LmgiCi0j
aW5jbHVkZSA8dGhyZWFkPgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLXZvaWQgU3RhdGljTXV0
ZXg6OmxvY2tTbG93Q2FzZSgpCi17Ci0gICAgLy8gVGhlIGxvbmdlc3QgY3JpdGljYWwgc2VjdGlv
biBpbiBibWFsbG9jIGlzIG11Y2ggc2hvcnRlciB0aGFuIHRoZQotICAgIC8vIHRpbWUgaXQgdGFr
ZXMgdG8gbWFrZSBhIHN5c3RlbSBjYWxsIHRvIHlpZWxkIHRvIHRoZSBPUyBzY2hlZHVsZXIuCi0g
ICAgLy8gU28sIHdlIHRyeSBhZ2FpbiBhIGxvdCBiZWZvcmUgd2UgeWllbGQuCi0gICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBhTG90ID0gMjU2OwotICAgIAotICAgIGlmICghbV9pc1NwaW5uaW5nLnRl
c3RfYW5kX3NldCgpKSB7Ci0gICAgICAgIGF1dG8gY2xlYXIgPSBtYWtlU2NvcGVFeGl0KFsmXSB7
IG1faXNTcGlubmluZy5jbGVhcigpOyB9KTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFMb3Q7ICsraSkgewotICAgICAgICAgICAgaWYgKHRyeV9sb2NrKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQXZvaWQgc3Bpbm5pbmcg
cGF0aG9sb2dpY2FsbHkuCi0gICAgd2hpbGUgKCF0cnlfbG9jaygpKQotICAgICAgICBzY2hlZF95
aWVsZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvU3RhdGljTXV0
ZXguaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1h
bGxvYy9TdGF0aWNNdXRleC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTEzNjE3
NDlkOTU4NzU2OGM2ZDhhZDEyYzI5MzkxN2FlY2VjYzljLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9TdGF0aWNNdXRleC5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBTdGF0aWNNdXRleF9oCi0jZGVmaW5lIFN0YXRpY011dGV4X2gKLQotI2luY2x1
ZGUgIkJBc3NlcnQuaCIKLSNpbmNsdWRlIDxhdG9taWM+Ci0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5j
bHVkZSA8dGhyZWFkPgotCi0vLyBBIGZhc3QgcmVwbGFjZW1lbnQgZm9yIHN0ZDo6bXV0ZXgsIGZv
ciB1c2UgaW4gc3RhdGljIHN0b3JhZ2UuCi0KLS8vIFVzZSBTdGF0aWNNdXRleCBpbiBzdGF0aWMg
c3RvcmFnZSwgd2hlcmUgZ2xvYmFsIGNvbnN0cnVjdG9ycyBhbmQgZXhpdC10aW1lCi0vLyBkZXN0
cnVjdG9ycyBhcmUgcHJvaGliaXRlZCwgYnV0IGFsbCBtZW1vcnkgaXMgemVyby1pbml0aWFsaXpl
ZCBhdXRvbWF0aWNhbGx5LgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLWNsYXNzIFN0YXRpY011
dGV4IHsKLXByb3RlY3RlZDoKLSAgICAvLyBTdWJjbGFzc2VzIHRoYXQgc3VwcG9ydCBub24tc3Rh
dGljIHN0b3JhZ2UgbXVzdCB1c2UgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24uCi0gICAgdm9pZCBp
bml0KCk7Ci0KLXB1YmxpYzoKLSAgICB2b2lkIGxvY2soKTsKLSAgICBib29sIHRyeV9sb2NrKCk7
Ci0gICAgdm9pZCB1bmxvY2soKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGxvY2tTbG93Q2FzZSgp
OwotCi0gICAgc3RkOjphdG9taWNfZmxhZyBtX2ZsYWc7Ci0gICAgc3RkOjphdG9taWNfZmxhZyBt
X2lzU3Bpbm5pbmc7Ci19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xlZXAoCi0gICAgc3RkOjp1
bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mIGxvY2ssIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
ZHVyYXRpb24pCi17Ci0gICAgaWYgKGR1cmF0aW9uID09IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMoMCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBsb2NrLnVubG9jaygpOwotICAgIHN0
ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2ZvcihkdXJhdGlvbik7Ci0gICAgbG9jay5sb2NrKCk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3YWl0VW50aWxGYWxzZSgKLSAgICBzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY011dGV4PiYgbG9jaywgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzbGVlcER1
cmF0aW9uLAotICAgIGJvb2wmIGNvbmRpdGlvbikKLXsKLSAgICB3aGlsZSAoY29uZGl0aW9uKSB7
Ci0gICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlOwotICAgICAgICBzbGVlcChsb2NrLCBzbGVlcER1
cmF0aW9uKTsKLSAgICB9Ci19Ci0KLWlubGluZSB2b2lkIFN0YXRpY011dGV4Ojppbml0KCkKLXsK
LSAgICBtX2ZsYWcuY2xlYXIoKTsKLSAgICBtX2lzU3Bpbm5pbmcuY2xlYXIoKTsKLX0KLQotaW5s
aW5lIGJvb2wgU3RhdGljTXV0ZXg6OnRyeV9sb2NrKCkKLXsKLSAgICByZXR1cm4gIW1fZmxhZy50
ZXN0X2FuZF9zZXQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7Ci19Ci0KLWlubGluZSB2b2lk
IFN0YXRpY011dGV4Ojpsb2NrKCkKLXsKLSAgICBpZiAoIXRyeV9sb2NrKCkpCi0gICAgICAgIGxv
Y2tTbG93Q2FzZSgpOwotfQotCi1pbmxpbmUgdm9pZCBTdGF0aWNNdXRleDo6dW5sb2NrKCkKLXsK
LSAgICBtX2ZsYWcuY2xlYXIoc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIFN0YXRpY011dGV4X2gKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9T
eXNjYWxsLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVz
L2JtYWxsb2MvU3lzY2FsbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTc0OGRi
YzJmOGQ2ZDk4NWE1MGZlODAxMWE3OWUzOTlmZGQ0MjNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9TeXNjYWxsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgU3lzY2FsbF9oCi0jZGVmaW5lIFN5c2NhbGxfaAotCi0jaW5jbHVkZSA8ZXJy
bm8uaD4KLQotI2RlZmluZSBTWVNDQUxMKHgpIGRvIHsgXAotICAgIHdoaWxlICgoeCkgPT0gLTEg
JiYgZXJybm8gPT0gRUFHQUlOKSB7IH0gXAotfSB3aGlsZSAoMCk7Ci0KLSNlbmRpZiAvLyBTeXNj
YWxsX2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBl
bmRlbmNpZXMvYm1hbGxvYy9WTUFsbG9jYXRlLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvVk1BbGxvY2F0ZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4MTlkYzk1ZGQ1YjRiYWM5MDJhMmU5YmE0NjZhYWFmZDg3ZWQ1ZDY0
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9WTUFsbG9jYXRl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVk1BbGxvY2F0ZV9oCi0jZGVm
aW5lIFZNQWxsb2NhdGVfaAotCi0jaW5jbHVkZSAiQkFzc2VydC5oIgotI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlNpemVzLmgiCi0jaW5jbHVkZSAi
U3lzY2FsbC5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgot
I2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaWYgQk9TKERBUldJTikKLSNpbmNsdWRlIDxtYWNoL3Zt
X3BhZ2Vfc2l6ZS5oPgotI2luY2x1ZGUgPG1hY2gvdm1fc3RhdGlzdGljcy5oPgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBibWFsbG9jIHsKLQotI2lmIEJPUyhEQVJXSU4pCi0jZGVmaW5lIEJNQUxMT0Nf
Vk1fVEFHIFZNX01BS0VfVEFHKFZNX01FTU9SWV9UQ01BTExPQykKLSNlbHNlCi0jZGVmaW5lIEJN
QUxMT0NfVk1fVEFHIC0xCi0jZW5kaWYKLQotaW5saW5lIHNpemVfdCB2bVBhZ2VTaXplKCkKLXsK
LSAgICBzdGF0aWMgc2l6ZV90IGNhY2hlZDsKLSAgICBpZiAoIWNhY2hlZCkKLSAgICAgICAgY2Fj
aGVkID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOwotICAgIHJldHVybiBjYWNoZWQ7Ci19Ci0KLWlu
bGluZSBzaXplX3Qgdm1QYWdlU2hpZnQoKQotewotICAgIHN0YXRpYyBzaXplX3QgY2FjaGVkOwot
ICAgIGlmICghY2FjaGVkKQotICAgICAgICBjYWNoZWQgPSBsb2cyKHZtUGFnZVNpemUoKSk7Ci0g
ICAgcmV0dXJuIGNhY2hlZDsKLX0KLQotaW5saW5lIHNpemVfdCB2bVNpemUoc2l6ZV90IHNpemUp
Ci17Ci0gICAgcmV0dXJuIHJvdW5kVXBUb011bHRpcGxlT2Yodm1QYWdlU2l6ZSgpLCBzaXplKTsK
LX0KLQotaW5saW5lIHZvaWQgdm1WYWxpZGF0ZShzaXplX3Qgdm1TaXplKQotewotICAgIFVOVVNF
RCh2bVNpemUpOwotICAgIEJBU1NFUlQodm1TaXplKTsKLSAgICBCQVNTRVJUKHZtU2l6ZSA9PSBy
b3VuZFVwVG9NdWx0aXBsZU9mKHZtUGFnZVNpemUoKSwgdm1TaXplKSk7Ci19Ci0KLWlubGluZSB2
b2lkIHZtVmFsaWRhdGUodm9pZCogcCwgc2l6ZV90IHZtU2l6ZSkKLXsKLSAgICB2bVZhbGlkYXRl
KHZtU2l6ZSk7Ci0gICAgCi0gICAgVU5VU0VEKHApOwotICAgIEJBU1NFUlQocCk7Ci0gICAgQkFT
U0VSVChwID09IG1hc2socCwgfih2bVBhZ2VTaXplKCkgLSAxKSkpOwotfQotCi1pbmxpbmUgc2l6
ZV90IHZtUGFnZVNpemVQaHlzaWNhbCgpCi17Ci0jaWYgQlBMQVRGT1JNKElPUykKLSAgICByZXR1
cm4gdm1fa2VybmVsX3BhZ2Vfc2l6ZTsKLSNlbHNlCi0gICAgc3RhdGljIHNpemVfdCBjYWNoZWQ7
Ci0gICAgaWYgKCFjYWNoZWQpCi0gICAgICAgIGNhY2hlZCA9IHN5c2NvbmYoX1NDX1BBR0VTSVpF
KTsKLSAgICByZXR1cm4gY2FjaGVkOwotI2VuZGlmCi19Ci0KLWlubGluZSB2b2lkIHZtVmFsaWRh
dGVQaHlzaWNhbChzaXplX3Qgdm1TaXplKQotewotICAgIFVOVVNFRCh2bVNpemUpOwotICAgIEJB
U1NFUlQodm1TaXplKTsKLSAgICBCQVNTRVJUKHZtU2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBsZU9m
KHZtUGFnZVNpemVQaHlzaWNhbCgpLCB2bVNpemUpKTsKLX0KLQotaW5saW5lIHZvaWQgdm1WYWxp
ZGF0ZVBoeXNpY2FsKHZvaWQqIHAsIHNpemVfdCB2bVNpemUpCi17Ci0gICAgdm1WYWxpZGF0ZVBo
eXNpY2FsKHZtU2l6ZSk7Ci0gICAgCi0gICAgVU5VU0VEKHApOwotICAgIEJBU1NFUlQocCk7Ci0g
ICAgQkFTU0VSVChwID09IG1hc2socCwgfih2bVBhZ2VTaXplUGh5c2ljYWwoKSAtIDEpKSk7Ci19
Ci0KLWlubGluZSB2b2lkKiB0cnlWTUFsbG9jYXRlKHNpemVfdCB2bVNpemUpCi17Ci0gICAgdm1W
YWxpZGF0ZSh2bVNpemUpOwotICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAoMCwgdm1TaXplLCBQUk9U
X1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCBCTUFMTE9DX1ZNX1RB
RywgMCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIGxvZ1ZNRmFp
bHVyZSgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotaW5saW5lIHZvaWQqIHZtQWxsb2NhdGUoc2l6ZV90IHZtU2l6ZSkKLXsKLSAgICB2
b2lkKiByZXN1bHQgPSB0cnlWTUFsbG9jYXRlKHZtU2l6ZSk7Ci0gICAgUkVMRUFTRV9CQVNTRVJU
KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIHZvaWQgdm1EZWFsbG9j
YXRlKHZvaWQqIHAsIHNpemVfdCB2bVNpemUpCi17Ci0gICAgdm1WYWxpZGF0ZShwLCB2bVNpemUp
OwotICAgIG11bm1hcChwLCB2bVNpemUpOwotfQotCi1pbmxpbmUgdm9pZCB2bVJldm9rZVBlcm1p
c3Npb25zKHZvaWQqIHAsIHNpemVfdCB2bVNpemUpCi17Ci0gICAgdm1WYWxpZGF0ZShwLCB2bVNp
emUpOwotICAgIG1wcm90ZWN0KHAsIHZtU2l6ZSwgUFJPVF9OT05FKTsKLX0KLQotLy8gQWxsb2Nh
dGVzIHZtU2l6ZSBieXRlcyBhdCBhIHNwZWNpZmllZCBwb3dlci1vZi10d28gYWxpZ25tZW50Lgot
Ly8gVXNlIHRoaXMgZnVuY3Rpb24gdG8gY3JlYXRlIG1hc2thYmxlIG1lbW9yeSByZWdpb25zLgot
Ci1pbmxpbmUgdm9pZCogdHJ5Vk1BbGxvY2F0ZShzaXplX3Qgdm1BbGlnbm1lbnQsIHNpemVfdCB2
bVNpemUpCi17Ci0gICAgdm1WYWxpZGF0ZSh2bVNpemUpOwotICAgIHZtVmFsaWRhdGUodm1BbGln
bm1lbnQpOwotCi0gICAgc2l6ZV90IG1hcHBlZFNpemUgPSB2bUFsaWdubWVudCArIHZtU2l6ZTsK
LSAgICBpZiAobWFwcGVkU2l6ZSA8IHZtQWxpZ25tZW50IHx8IG1hcHBlZFNpemUgPCB2bVNpemUp
IC8vIENoZWNrIGZvciBvdmVyZmxvdwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGNo
YXIqIG1hcHBlZCA9IHN0YXRpY19jYXN0PGNoYXIqPih0cnlWTUFsbG9jYXRlKG1hcHBlZFNpemUp
KTsKLSAgICBpZiAoIW1hcHBlZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY2hhciog
bWFwcGVkRW5kID0gbWFwcGVkICsgbWFwcGVkU2l6ZTsKLQotICAgIGNoYXIqIGFsaWduZWQgPSBy
b3VuZFVwVG9NdWx0aXBsZU9mKHZtQWxpZ25tZW50LCBtYXBwZWQpOwotICAgIGNoYXIqIGFsaWdu
ZWRFbmQgPSBhbGlnbmVkICsgdm1TaXplOwotICAgIAotICAgIFJFTEVBU0VfQkFTU0VSVChhbGln
bmVkRW5kIDw9IG1hcHBlZEVuZCk7Ci0gICAgCi0gICAgaWYgKHNpemVfdCBsZWZ0RXh0cmEgPSBh
bGlnbmVkIC0gbWFwcGVkKQotICAgICAgICB2bURlYWxsb2NhdGUobWFwcGVkLCBsZWZ0RXh0cmEp
OwotICAgIAotICAgIGlmIChzaXplX3QgcmlnaHRFeHRyYSA9IG1hcHBlZEVuZCAtIGFsaWduZWRF
bmQpCi0gICAgICAgIHZtRGVhbGxvY2F0ZShhbGlnbmVkRW5kLCByaWdodEV4dHJhKTsKLQotICAg
IHJldHVybiBhbGlnbmVkOwotfQotCi1pbmxpbmUgdm9pZCogdm1BbGxvY2F0ZShzaXplX3Qgdm1B
bGlnbm1lbnQsIHNpemVfdCB2bVNpemUpCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5Vk1BbGxv
Y2F0ZSh2bUFsaWdubWVudCwgdm1TaXplKTsKLSAgICBSRUxFQVNFX0JBU1NFUlQocmVzdWx0KTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCB2bURlYWxsb2NhdGVQaHlzaWNh
bFBhZ2VzKHZvaWQqIHAsIHNpemVfdCB2bVNpemUpCi17Ci0gICAgdm1WYWxpZGF0ZVBoeXNpY2Fs
KHAsIHZtU2l6ZSk7Ci0jaWYgQk9TKERBUldJTikKLSAgICBTWVNDQUxMKG1hZHZpc2UocCwgdm1T
aXplLCBNQURWX0ZSRUVfUkVVU0FCTEUpKTsKLSNlbHNlCi0gICAgU1lTQ0FMTChtYWR2aXNlKHAs
IHZtU2l6ZSwgTUFEVl9ET05UTkVFRCkpOwotI2VuZGlmCi19Ci0KLWlubGluZSB2b2lkIHZtQWxs
b2NhdGVQaHlzaWNhbFBhZ2VzKHZvaWQqIHAsIHNpemVfdCB2bVNpemUpCi17Ci0gICAgdm1WYWxp
ZGF0ZVBoeXNpY2FsKHAsIHZtU2l6ZSk7Ci0jaWYgQk9TKERBUldJTikKLSAgICBTWVNDQUxMKG1h
ZHZpc2UocCwgdm1TaXplLCBNQURWX0ZSRUVfUkVVU0UpKTsKLSNlbHNlCi0gICAgU1lTQ0FMTCht
YWR2aXNlKHAsIHZtU2l6ZSwgTUFEVl9OT1JNQUwpKTsKLSNlbmRpZgotfQotCi0vLyBUcmltcyBy
ZXF1ZXN0cyB0aGF0IGFyZSB1bi1wYWdlLWFsaWduZWQuCi1pbmxpbmUgdm9pZCB2bURlYWxsb2Nh
dGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHZvaWQqIHAsIHNpemVfdCBzaXplKQotewotICAgIGNoYXIq
IGJlZ2luID0gcm91bmRVcFRvTXVsdGlwbGVPZih2bVBhZ2VTaXplUGh5c2ljYWwoKSwgc3RhdGlj
X2Nhc3Q8Y2hhcio+KHApKTsKLSAgICBjaGFyKiBlbmQgPSByb3VuZERvd25Ub011bHRpcGxlT2Yo
dm1QYWdlU2l6ZVBoeXNpY2FsKCksIHN0YXRpY19jYXN0PGNoYXIqPihwKSArIHNpemUpOwotCi0g
ICAgaWYgKGJlZ2luID49IGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdm1EZWFsbG9jYXRl
UGh5c2ljYWxQYWdlcyhiZWdpbiwgZW5kIC0gYmVnaW4pOwotfQotCi0vLyBFeHBhbmRzIHJlcXVl
c3RzIHRoYXQgYXJlIHVuLXBhZ2UtYWxpZ25lZC4KLWlubGluZSB2b2lkIHZtQWxsb2NhdGVQaHlz
aWNhbFBhZ2VzU2xvcHB5KHZvaWQqIHAsIHNpemVfdCBzaXplKQotewotICAgIGNoYXIqIGJlZ2lu
ID0gcm91bmREb3duVG9NdWx0aXBsZU9mKHZtUGFnZVNpemVQaHlzaWNhbCgpLCBzdGF0aWNfY2Fz
dDxjaGFyKj4ocCkpOwotICAgIGNoYXIqIGVuZCA9IHJvdW5kVXBUb011bHRpcGxlT2Yodm1QYWdl
U2l6ZVBoeXNpY2FsKCksIHN0YXRpY19jYXN0PGNoYXIqPihwKSArIHNpemUpOwotCi0gICAgaWYg
KGJlZ2luID49IGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdm1BbGxvY2F0ZVBoeXNpY2Fs
UGFnZXMoYmVnaW4sIGVuZCAtIGJlZ2luKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwot
Ci0jZW5kaWYgLy8gVk1BbGxvY2F0ZV9oCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvVk1IZWFwLmNwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9WTUhlYXAuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDg5ZDI4Mjc4YmNlODBhOGE3MTZlZGQz
Yzc4OGJmYWRjM2Q0NmY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1h
bGxvYy9WTUhlYXAuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJQZXJQ
cm9jZXNzLmgiCi0jaW5jbHVkZSAiVk1IZWFwLmgiCi0jaW5jbHVkZSA8dGhyZWFkPgotCi1uYW1l
c3BhY2UgYm1hbGxvYyB7Ci0KLVZNSGVhcDo6Vk1IZWFwKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mKQotewotfQotCi1MYXJnZVJhbmdlIFZNSGVhcDo6dHJ5QWxsb2NhdGVMYXJnZUNodW5r
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBBbGxvY2F0aW9uS2luZCBhbGxvY2F0aW9u
S2luZCkKLXsKLSAgICAvLyBXZSBhbGxvY2F0ZSBWTSBpbiBhbGlnbmVkIG11bHRpcGxlcyB0byBp
bmNyZWFzZSB0aGUgY2hhbmNlcyB0aGF0Ci0gICAgLy8gdGhlIE9TIHdpbGwgcHJvdmlkZSBjb250
aWd1b3VzIHJhbmdlcyB0aGF0IHdlIGNhbiBtZXJnZS4KLSAgICBzaXplX3Qgcm91bmRlZEFsaWdu
bWVudCA9IHJvdW5kVXBUb011bHRpcGxlT2Y8Y2h1bmtTaXplPihhbGlnbm1lbnQpOwotICAgIGlm
IChyb3VuZGVkQWxpZ25tZW50IDwgYWxpZ25tZW50KSAvLyBDaGVjayBmb3Igb3ZlcmZsb3cKLSAg
ICAgICAgcmV0dXJuIExhcmdlUmFuZ2UoKTsKLSAgICBhbGlnbm1lbnQgPSByb3VuZGVkQWxpZ25t
ZW50OwotCi0gICAgc2l6ZV90IHJvdW5kZWRTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjxjaHVu
a1NpemU+KHNpemUpOwotICAgIGlmIChyb3VuZGVkU2l6ZSA8IHNpemUpIC8vIENoZWNrIGZvciBv
dmVyZmxvdwotICAgICAgICByZXR1cm4gTGFyZ2VSYW5nZSgpOwotICAgIHNpemUgPSByb3VuZGVk
U2l6ZTsKLQotICAgIHZvaWQqIG1lbW9yeSA9IHRyeVZNQWxsb2NhdGUoYWxpZ25tZW50LCBzaXpl
KTsKLSAgICBpZiAoIW1lbW9yeSkKLSAgICAgICAgcmV0dXJuIExhcmdlUmFuZ2UoKTsKLSAgICAK
LSAgICBpZiAoYWxsb2NhdGlvbktpbmQgPT0gQWxsb2NhdGlvbktpbmQ6OlZpcnR1YWwpCi0gICAg
ICAgIHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkobWVtb3J5LCBzaXplKTsKLQotICAg
IENodW5rKiBjaHVuayA9IHN0YXRpY19jYXN0PENodW5rKj4obWVtb3J5KTsKLSAgICAKLSNpZiBC
T1MoREFSV0lOKQotICAgIFBlclByb2Nlc3M8Wm9uZT46OmdldCgpLT5hZGRSYW5nZShSYW5nZShj
aHVuay0+Ynl0ZXMoKSwgc2l6ZSkpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gTGFyZ2VSYW5nZShj
aHVuay0+Ynl0ZXMoKSwgc2l6ZSwgMCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMv
Ym1hbGxvYy9WTUhlYXAuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBl
bmRlbmNpZXMvYm1hbGxvYy9WTUhlYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MTM2MWI5NGZjMGI4N2YyMDUxMTQxNjc0ZDk3MDdlOTRmODhmMTNhNy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvVk1IZWFwLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBWTUhlYXBfaAotI2RlZmluZSBWTUhlYXBfaAotCi0jaW5jbHVkZSAi
QWxsb2NhdGlvbktpbmQuaCIKLSNpbmNsdWRlICJDaHVuay5oIgotI2luY2x1ZGUgIkZpeGVkVmVj
dG9yLmgiCi0jaW5jbHVkZSAiSGVhcEtpbmQuaCIKLSNpbmNsdWRlICJMYXJnZVJhbmdlLmgiCi0j
aW5jbHVkZSAiTWFwLmgiCi0jaW5jbHVkZSAiVmVjdG9yLmgiCi0jaWYgQk9TKERBUldJTikKLSNp
bmNsdWRlICJab25lLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi1jbGFzcyBC
ZWdpblRhZzsKLWNsYXNzIEVuZFRhZzsKLWNsYXNzIEhlYXA7Ci0KLXR5cGVkZWYgZW51bSB7IFN5
bmMsIEFzeW5jIH0gU2NhdmVuZ2VNb2RlOwotCi1jbGFzcyBWTUhlYXAgewotcHVibGljOgotICAg
IFZNSGVhcChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7Ci0gICAgCi0gICAgTGFyZ2VS
YW5nZSB0cnlBbGxvY2F0ZUxhcmdlQ2h1bmsoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBBbGxv
Y2F0aW9uS2luZCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBW
TUhlYXBfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2Rl
cGVuZGVuY2llcy9ibWFsbG9jL1ZlY3Rvci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL1ZlY3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyOGJiZTEzMzI5MzNlMTI4Y2QzMjk5NWE2NTk0MzU5YTcyNGJlOTEzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9WZWN0b3IuaAorKysgL2Rl
di9udWxsCkBAIC0xLDIzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZm5kZWYgVmVjdG9yX2gKLSNkZWZpbmUgVmVjdG9yX2gKLQotI2lu
Y2x1ZGUgIklubGluZS5oIgotI2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIKLSNpbmNsdWRlIDxjc3Rk
ZGVmPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotLy8gQSBy
ZXBsYWNlbWVudCBmb3Igc3RkOjp2ZWN0b3IgdGhhdCBhbGxvY2F0ZXMgdXNpbmcgdm1BbGxvY2F0
ZSBpbnN0ZWFkIG9mCi0vLyBtYWxsb2MsIHNocmlua3MgYXV0b21hdGljYWxseSwgYW5kIHN1cHBv
cnRzICJwb3BwaW5nIiBmcm9tIHRoZSBtaWRkbGUuCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1j
bGFzcyBWZWN0b3IgewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPFQ+Ojp2YWx1ZSwgIlZlY3RvciBtdXN0IGhhdmUgYSB0cml2aWFsIGRlc3RydWN0b3Iu
Iik7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBUKiBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIGNvbnN0
IFQqIGNvbnN0X2l0ZXJhdG9yOwotCi0gICAgVmVjdG9yKCk7Ci0gICAgVmVjdG9yKFZlY3RvciYm
KTsKLSAgICB+VmVjdG9yKCk7Ci0KLSAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fYnVm
ZmVyOyB9Ci0gICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9idWZmZXIgKyBtX3NpemU7IH0K
LQotICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgc2l6ZV90IGNhcGFj
aXR5KCkgeyByZXR1cm4gbV9jYXBhY2l0eTsgfQotICAgIAotICAgIFQmIG9wZXJhdG9yW10oc2l6
ZV90KTsKLSAgICBUJiBsYXN0KCkgeyByZXR1cm4gbV9idWZmZXJbbV9zaXplIC0gMV07IH0KLQot
ICAgIHZvaWQgcHVzaChjb25zdCBUJik7Ci0KLSAgICBUIHBvcCgpOwotICAgIFQgcG9wKHNpemVf
dCk7Ci0gICAgVCBwb3AoY29uc3RfaXRlcmF0b3IgaXQpIHsgcmV0dXJuIHBvcChpdCAtIGJlZ2lu
KCkpOyB9Ci0gICAgCi0gICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IsIGNvbnN0IFQmKTsKLSAgICBU
IHJlbW92ZShpdGVyYXRvcik7Ci0KLSAgICB2b2lkIGdyb3coc2l6ZV90KTsKLSAgICB2b2lkIHNo
cmluayhzaXplX3QpOwotICAgIHZvaWQgcmVzaXplKHNpemVfdCk7Ci0KLSAgICB2b2lkIHNocmlu
a1RvRml0KCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBncm93RmFjdG9y
ID0gMjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNocmlua0ZhY3RvciA9IDQ7Ci0gICAgc3Rh
dGljIHNpemVfdCBpbml0aWFsQ2FwYWNpdHkoKSB7IHJldHVybiB2bVBhZ2VTaXplKCkgLyBzaXpl
b2YoVCk7IH0KLQotICAgIHZvaWQgZ3Jvd0NhcGFjaXR5KCk7Ci0gICAgdm9pZCBzaHJpbmtDYXBh
Y2l0eSgpOwotICAgIHZvaWQgcmVhbGxvY2F0ZUJ1ZmZlcihzaXplX3QpOwotCi0gICAgVCogbV9i
dWZmZXI7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICBzaXplX3QgbV9jYXBhY2l0eTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVmVjdG9yPFQ+OjpWZWN0b3IoKQotICAgIDog
bV9idWZmZXIobnVsbHB0cikKLSAgICAsIG1fc2l6ZSgwKQotICAgICwgbV9jYXBhY2l0eSgwKQot
ewotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFZlY3RvcjxUPjo6VmVjdG9yKFZl
Y3RvciYmIG90aGVyKQotICAgIDogbV9idWZmZXIob3RoZXIubV9idWZmZXIpCi0gICAgLCBtX3Np
emUob3RoZXIubV9zaXplKQotICAgICwgbV9jYXBhY2l0eShvdGhlci5tX2NhcGFjaXR5KQotewot
ICAgIG90aGVyLm1fYnVmZmVyID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX3NpemUgPSAwOwotICAg
IG90aGVyLm1fY2FwYWNpdHkgPSAwOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVmVjdG9y
PFQ+Ojp+VmVjdG9yKCkKLXsKLSAgICBpZiAobV9idWZmZXIpCi0gICAgICAgIHZtRGVhbGxvY2F0
ZShtX2J1ZmZlciwgdm1TaXplKG1fY2FwYWNpdHkgKiBzaXplb2YoVCkpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLWlubGluZSBUJiBWZWN0b3I8VD46Om9wZXJhdG9yW10oc2l6ZV90IGkp
Ci17Ci0gICAgQkFTU0VSVChpIDwgbV9zaXplKTsKLSAgICByZXR1cm4gbV9idWZmZXJbaV07Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1JTkxJTkUgdm9pZCBWZWN0b3I8VD46OnB1c2goY29u
c3QgVCYgdmFsdWUpCi17Ci0gICAgaWYgKG1fc2l6ZSA9PSBtX2NhcGFjaXR5KQotICAgICAgICBn
cm93Q2FwYWNpdHkoKTsKLSAgICBtX2J1ZmZlclttX3NpemUrK10gPSB2YWx1ZTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUIFZlY3RvcjxUPjo6cG9wKCkKLXsKLSAgICBCQVNT
RVJUKG1fc2l6ZSk7Ci0gICAgVCB2YWx1ZSA9IG1fYnVmZmVyW21fc2l6ZSAtIDFdOwotICAgIHNo
cmluayhtX3NpemUgLSAxKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1pbmxpbmUgVCBWZWN0b3I8VD46OnBvcChzaXplX3QgaSkKLXsKLSAgICBCQVNTRVJU
KGkgPCBtX3NpemUpOwotICAgIHN0ZDo6c3dhcChtX2J1ZmZlcltpXSwgbGFzdCgpKTsKLSAgICBy
ZXR1cm4gcG9wKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFZlY3RvcjxUPjo6
aW5zZXJ0KGl0ZXJhdG9yIGl0LCBjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICBzaXplX3QgaW5kZXgg
PSBpdCAtIGJlZ2luKCk7Ci0gICAgc2l6ZV90IG1vdmVDb3VudCA9IGVuZCgpIC0gaXQ7Ci0KLSAg
ICBncm93KG1fc2l6ZSArIDEpOwotICAgIHN0ZDo6bWVtbW92ZSgmbV9idWZmZXJbaW5kZXggKyAx
XSwgJm1fYnVmZmVyW2luZGV4XSwgbW92ZUNvdW50ICogc2l6ZW9mKFQpKTsKLQotICAgIG1fYnVm
ZmVyW2luZGV4XSA9IHZhbHVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCBWZWN0b3I8
VD46OnJlbW92ZShpdGVyYXRvciBpdCkKLXsKLSAgICBzaXplX3QgaW5kZXggPSBpdCAtIGJlZ2lu
KCk7Ci0gICAgc2l6ZV90IG1vdmVDb3VudCA9IGVuZCgpIC0gaXQgLSAxOwotCi0gICAgVCByZXN1
bHQgPSAqaXQ7Ci0KLSAgICBzdGQ6Om1lbW1vdmUoJm1fYnVmZmVyW2luZGV4XSwgJm1fYnVmZmVy
W2luZGV4ICsgMV0sIG1vdmVDb3VudCAqIHNpemVvZihUKSk7Ci0gICAgc2hyaW5rKG1fc2l6ZSAt
IDEpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VD46Omdyb3coc2l6ZV90IHNpemUpCi17Ci0gICAgQkFTU0VS
VChzaXplID49IG1fc2l6ZSk7Ci0gICAgd2hpbGUgKG1fc2l6ZSA8IHNpemUpCi0gICAgICAgIHB1
c2goVCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSB2b2lkIFZlY3RvcjxU
Pjo6c2hyaW5rKHNpemVfdCBzaXplKQotewotICAgIEJBU1NFUlQoc2l6ZSA8PSBtX3NpemUpOwot
ICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgaWYgKG1fc2l6ZSA8IG1fY2FwYWNpdHkgLyBzaHJpbmtG
YWN0b3IgJiYgbV9jYXBhY2l0eSA+IGluaXRpYWxDYXBhY2l0eSgpKQotICAgICAgICBzaHJpbmtD
YXBhY2l0eSgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgVmVjdG9y
PFQ+OjpyZXNpemUoc2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKHNpemUgPD0gbV9zaXplKQotICAg
ICAgICBzaHJpbmsoc2l6ZSk7Ci0gICAgZWxzZQotICAgICAgICBncm93KHNpemUpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBWZWN0b3I8VD46OnJlYWxsb2NhdGVCdWZmZXIoc2l6
ZV90IG5ld0NhcGFjaXR5KQotewotICAgIFJFTEVBU0VfQkFTU0VSVChuZXdDYXBhY2l0eSA8IHN0
ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkpOwotCi0gICAgc2l6
ZV90IHZtU2l6ZSA9IGJtYWxsb2M6OnZtU2l6ZShuZXdDYXBhY2l0eSAqIHNpemVvZihUKSk7Ci0g
ICAgVCogbmV3QnVmZmVyID0gdm1TaXplID8gc3RhdGljX2Nhc3Q8VCo+KHZtQWxsb2NhdGUodm1T
aXplKSkgOiBudWxscHRyOwotICAgIGlmIChtX2J1ZmZlcikgewotICAgICAgICBzdGQ6Om1lbWNw
eShuZXdCdWZmZXIsIG1fYnVmZmVyLCBtX3NpemUgKiBzaXplb2YoVCkpOwotICAgICAgICB2bURl
YWxsb2NhdGUobV9idWZmZXIsIGJtYWxsb2M6OnZtU2l6ZShtX2NhcGFjaXR5ICogc2l6ZW9mKFQp
KSk7Ci0gICAgfQotCi0gICAgbV9idWZmZXIgPSBuZXdCdWZmZXI7Ci0gICAgbV9jYXBhY2l0eSA9
IHZtU2l6ZSAvIHNpemVvZihUKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5PX0lOTElO
RSB2b2lkIFZlY3RvcjxUPjo6c2hyaW5rQ2FwYWNpdHkoKQotewotICAgIHNpemVfdCBuZXdDYXBh
Y2l0eSA9IG1heChpbml0aWFsQ2FwYWNpdHkoKSwgbV9jYXBhY2l0eSAvIHNocmlua0ZhY3Rvcik7
Ci0gICAgcmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1OT19JTkxJTkUgdm9pZCBWZWN0b3I8VD46Omdyb3dDYXBhY2l0eSgpCi17Ci0gICAg
c2l6ZV90IG5ld0NhcGFjaXR5ID0gbWF4KGluaXRpYWxDYXBhY2l0eSgpLCBtX3NpemUgKiBncm93
RmFjdG9yKTsKLSAgICByZWFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXZvaWQgVmVjdG9yPFQ+OjpzaHJpbmtUb0ZpdCgpCi17Ci0gICAgaWYg
KG1fc2l6ZSA8IG1fY2FwYWNpdHkpCi0gICAgICAgIHJlYWxsb2NhdGVCdWZmZXIobV9zaXplKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gVmVjdG9yX2gKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1h
bGxvYy9ab25lLmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRl
bmNpZXMvYm1hbGxvYy9ab25lLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Iz
NWIwZmNjMTY1N2E5NGUxNmM4N2Y1ZmEzMzc2YzlmYzg0MDJhYy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvZGVwZW5kZW5jaWVzL2JtYWxsb2MvWm9uZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiU2l6ZXMuaCIKLSNpbmNsdWRlICJab25lLmgiCi0KLW5hbWVzcGFj
ZSBibWFsbG9jIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgcmVtb3RlUmVh
ZCh0YXNrX3QgdGFzaywgbWVtb3J5X3JlYWRlcl90IHJlYWRlciwgdm1fYWRkcmVzc190IHJlbW90
ZVBvaW50ZXIsIFQmIHJlc3VsdCkKLXsKLSAgICB2b2lkKiB0bXAgPSBudWxscHRyOwotICAgIGtl
cm5fcmV0dXJuX3QgZXJyb3IgPSByZWFkZXIodGFzaywgcmVtb3RlUG9pbnRlciwgc2l6ZW9mKFQp
LCAmdG1wKTsKLQotICAgIC8vIFRoaXMgcmVhZCBzb21ldGltZXMgZmFpbHMgZm9yIHVua25vd24g
cmVhc29ucyAoPHJkYXI6Ly9wcm9ibGVtLzE0MDkzNzU3PikuCi0gICAgLy8gQXZvaWQgYSBjcmFz
aCBieSBza2lwcGluZyB0aGUgbWVtY3B5IHdoZW4gdGhpcyBoYXBwZW5zLgotICAgIGlmIChlcnJv
ciB8fCAhdG1wKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiYm1hbGxvYzogZXJyb3IgcmVh
ZGluZyByZW1vdGUgcHJvY2VzczogMHgleFxuIiwgZXJyb3IpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbWVtY3B5KCZyZXN1bHQsIHRtcCwgc2l6ZW9mKFQpKTsKLX0KLQotLy8gVGhl
c2UgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIGludm9rZWQgdW5jb25kaXRpb25hbGx5IG9uIGFsbCB6
b25lcyBieSB2YXJpb3VzCi0vLyBzeXN0ZW0gdG9vbHMuIFdlIGRvbid0IHN1cHBvcnQgYW55IG9m
IHRoZXNlIGZlYXR1cmVzLCBidXQgd2UgcHJvdmlkZQotLy8ganVzdCBlbm91Z2ggZnVuY3Rpb25h
bGl0eSBub3QgdG8gY3Jhc2guCi0KLXN0YXRpYyBzaXplX3QgZ29vZF9zaXplKG1hbGxvY196b25l
X3QqLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotc3RhdGljIGJvb2xl
YW5fdCBjaGVjayhtYWxsb2Nfem9uZV90KikKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3Rh
dGljIHZvaWQgcHJpbnQobWFsbG9jX3pvbmVfdCosIGJvb2xlYW5fdCkKLXsKLX0KLQotc3RhdGlj
IHZvaWQgbG9nKG1hbGxvY196b25lX3QqLCB2b2lkKikKLXsKLX0KLQotc3RhdGljIHZvaWQgZm9y
Y2VfbG9jayhtYWxsb2Nfem9uZV90KikKLXsKLX0KLQotc3RhdGljIHZvaWQgZm9yY2VfdW5sb2Nr
KG1hbGxvY196b25lX3QqKQotewotfQotCi1zdGF0aWMgdm9pZCBzdGF0aXN0aWNzKG1hbGxvY196
b25lX3QqLCBtYWxsb2Nfc3RhdGlzdGljc190KiBzdGF0aXN0aWNzKQotewotICAgIG1lbXNldChz
dGF0aXN0aWNzLCAwLCBzaXplb2YobWFsbG9jX3N0YXRpc3RpY3NfdCkpOwotfQotCi1zdGF0aWMg
c2l6ZV90IHpvbmVTaXplKG1hbGxvY196b25lX3QqLCBjb25zdCB2b2lkKikKLXsKLSAgICAvLyBP
dXIgem9uZSBpcyBub3QgcHVibGljIEFQSSwgc28gbm8gcG9pbnRlciBjYW4gYmVsb25nIHRvIHVz
LgotICAgIHJldHVybiAwOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIHJ1bnMgaW5zaWRlIHRoZSBs
ZWFrcyBwcm9jZXNzLgotc3RhdGljIGtlcm5fcmV0dXJuX3QgZW51bWVyYXRvcih0YXNrX3QgdGFz
aywgdm9pZCogY29udGV4dCwgdW5zaWduZWQgdHlwZV9tYXNrLCB2bV9hZGRyZXNzX3Qgem9uZV9h
ZGRyZXNzLCBtZW1vcnlfcmVhZGVyX3QgcmVhZGVyLCB2bV9yYW5nZV9yZWNvcmRlcl90IHJlY29y
ZGVyKQotewotICAgIFpvbmUgcmVtb3RlWm9uZSh0YXNrLCByZWFkZXIsIHpvbmVfYWRkcmVzcyk7
Ci0gICAgZm9yIChhdXRvJiByYW5nZSA6IHJlbW90ZVpvbmUucmFuZ2VzKCkpIHsKLSAgICAgICAg
dm1fcmFuZ2VfdCB2bVJhbmdlID0geyByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4ocmFu
Z2UuYmVnaW4oKSksIHJhbmdlLnNpemUoKSB9OwotCi0gICAgICAgIGlmICgodHlwZV9tYXNrICYg
TUFMTE9DX1BUUl9SRUdJT05fUkFOR0VfVFlQRSkpCi0gICAgICAgICAgICAoKnJlY29yZGVyKSh0
YXNrLCBjb250ZXh0LCBNQUxMT0NfUFRSX1JFR0lPTl9SQU5HRV9UWVBFLCAmdm1SYW5nZSwgMSk7
Ci0KLSAgICAgICAgaWYgKCh0eXBlX21hc2sgJiBNQUxMT0NfUFRSX0lOX1VTRV9SQU5HRV9UWVBF
KSkKLSAgICAgICAgICAgICgqcmVjb3JkZXIpKHRhc2ssIGNvbnRleHQsIE1BTExPQ19QVFJfSU5f
VVNFX1JBTkdFX1RZUEUsICZ2bVJhbmdlLCAxKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K
LQotLy8gVGhlIG1lbW9yeSBhbmFseXNpcyBBUEkgcmVxdWlyZXMgdGhlIGNvbnRlbnRzIG9mIHRo
aXMgc3RydWN0IHRvIGJlIGEgc3RhdGljCi0vLyBjb25zdGFudCBpbiB0aGUgcHJvZ3JhbSBiaW5h
cnkuIFRoZSBsZWFrcyBwcm9jZXNzIHdpbGwgbG9hZCB0aGlzIHN0cnVjdAotLy8gb3V0IG9mIHRo
ZSBwcm9ncmFtIGJpbmFyeSAoYW5kIG5vdCBvdXQgb2YgdGhlIHJ1bm5pbmcgcHJvY2VzcykuCi1z
dGF0aWMgY29uc3QgbWFsbG9jX2ludHJvc3BlY3Rpb25fdCB6b25lSW50cm9zcGVjdCA9IHsKLSAg
ICAuZW51bWVyYXRvciA9IGJtYWxsb2M6OmVudW1lcmF0b3IsCi0gICAgLmdvb2Rfc2l6ZSA9IGJt
YWxsb2M6Omdvb2Rfc2l6ZSwKLSAgICAuY2hlY2sgPSBibWFsbG9jOjpjaGVjaywKLSAgICAucHJp
bnQgPSBibWFsbG9jOjpwcmludCwKLSAgICAubG9nID0gYm1hbGxvYzo6bG9nLAotICAgIC5mb3Jj
ZV9sb2NrID0gYm1hbGxvYzo6Zm9yY2VfbG9jaywKLSAgICAuZm9yY2VfdW5sb2NrID0gYm1hbGxv
Yzo6Zm9yY2VfdW5sb2NrLAotICAgIC5zdGF0aXN0aWNzID0gYm1hbGxvYzo6c3RhdGlzdGljcwot
fTsKLQotWm9uZTo6Wm9uZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikKLXsKLSAgICBt
YWxsb2Nfem9uZV90OjpzaXplID0gJmJtYWxsb2M6OnpvbmVTaXplOwotICAgIG1hbGxvY196b25l
X3Q6OnpvbmVfbmFtZSA9ICJXZWJLaXQgTWFsbG9jIjsKLSAgICBtYWxsb2Nfem9uZV90OjppbnRy
b3NwZWN0ID0gY29uc3RfY2FzdDxtYWxsb2NfaW50cm9zcGVjdGlvbl90Kj4oJmJtYWxsb2M6Onpv
bmVJbnRyb3NwZWN0KTsKLSAgICBtYWxsb2Nfem9uZV90Ojp2ZXJzaW9uID0gNDsKLSAgICBtYWxs
b2Nfem9uZV9yZWdpc3Rlcih0aGlzKTsKLX0KLQotWm9uZTo6Wm9uZSh0YXNrX3QgdGFzaywgbWVt
b3J5X3JlYWRlcl90IHJlYWRlciwgdm1fYWRkcmVzc190IHJlbW90ZVBvaW50ZXIpCi17Ci0gICAg
cmVtb3RlUmVhZCh0YXNrLCByZWFkZXIsIHJlbW90ZVBvaW50ZXIsICp0aGlzKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgYm1hbGxvYwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL1pvbmUuaCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9ab25lLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDdhMDBkMTc1NDQ0NGU4MzcwNDVkYTA4ZTMzMWQ1MzU5MzUxYjJk
OGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL1pvbmUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBab25lX2gKLSNkZWZpbmUgWm9uZV9o
Ci0KLSNpbmNsdWRlICJGaXhlZFZlY3Rvci5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVk
ZSAiU3RhdGljTXV0ZXguaCIKLSNpbmNsdWRlIDxtYWxsb2MvbWFsbG9jLmg+Ci0jaW5jbHVkZSA8
bXV0ZXg+Ci0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotY2xhc3MgQ2h1bms7Ci0KLWNsYXNzIFpv
bmUgOiBwdWJsaWMgbWFsbG9jX3pvbmVfdCB7Ci1wdWJsaWM6Ci0gICAgLy8gRW5vdWdoIGNhcGFj
aXR5IHRvIHRyYWNrIGEgNjRHQiBoZWFwLCBzbyBwcm9iYWJseSBlbm91Z2ggZm9yIGFueXRoaW5n
LgotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY2FwYWNpdHkgPSAyMDQ4OwotCi0gICAgWm9uZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7Ci0gICAgWm9uZSh0YXNrX3QsIG1lbW9yeV9y
ZWFkZXJfdCwgdm1fYWRkcmVzc190KTsKLQotICAgIHZvaWQgYWRkUmFuZ2UoUmFuZ2UpOwotICAg
IEZpeGVkVmVjdG9yPFJhbmdlLCBjYXBhY2l0eT4mIHJhbmdlcygpIHsgcmV0dXJuIG1fcmFuZ2Vz
OyB9Ci0gICAgCi1wcml2YXRlOgotICAgIC8vIFRoaXMgdmVjdG9yIGhhcyB0d28gcHVycG9zZXM6
Ci0gICAgLy8gICAgICgxKSBJdCBzdG9yZXMgdGhlIGxpc3Qgb2YgQ2h1bmtzIHNvIHRoYXQgd2Ug
Y2FuIGVudW1lcmF0ZQotICAgIC8vICAgICAgICAgZWFjaCBDaHVuayBhbmQgcmVxdWVzdCB0aGF0
IGl0IGJlIHNjYW5uZWQgaWYgcmVhY2hhYmxlLgotICAgIC8vICAgICAoMikgSXQgcm9vdHMgYSBw
b2ludGVyIHRvIGVhY2ggQ2h1bmsgaW4gYSBnbG9iYWwgbm9uLW1hbGxvYwotICAgIC8vICAgICAg
ICAgVk0gcmVnaW9uLCBtYWtpbmcgZWFjaCBDaHVuayBhcHBlYXIgcmVhY2hhYmxlLCBhbmQgdGhl
cmVmb3JlCi0gICAgLy8gICAgICAgICBlbnN1cmluZyB0aGF0IHRoZSBsZWFrcyB0b29sIHdpbGwg
c2NhbiBpdC4gKFRoZSBsZWFrcyB0b29sCi0gICAgLy8gICAgICAgICBjb25zZXJ2YXRpdmVseSBz
Y2FucyBhbGwgd3JpdGVhYmxlIFZNIHJlZ2lvbnMgdGhhdCBhcmUgbm90IG1hbGxvYwotICAgIC8v
ICAgICAgICAgcmVnaW9ucywgYW5kIHRoZW4gc2NhbnMgbWFsbG9jIHJlZ2lvbnMgdXNpbmcgdGhl
IGludHJvc3BlY3Rpb24gQVBJLikKLSAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSBsZWFrcyB0b29s
IGZyb20gcmVwb3J0aW5nIGZhbHNlIHBvc2l0aXZlIGxlYWtzIGZvcgotICAgIC8vIG9iamVjdHMg
cG9pbnRlZCB0byBmcm9tIGJtYWxsb2MgbWVtb3J5IC0tIHRob3VnaCBpdCBhbHNvIHByZXZlbnRz
IHRoZQotICAgIC8vIGxlYWtzIHRvb2wgZnJvbSBmaW5kaW5nIGFueSBsZWFrcyBpbiBibWFsbG9j
IG1lbW9yeS4KLSAgICBGaXhlZFZlY3RvcjxSYW5nZSwgY2FwYWNpdHk+IG1fcmFuZ2VzOwotfTsK
LQotaW5saW5lIHZvaWQgWm9uZTo6YWRkUmFuZ2UoUmFuZ2UgcmFuZ2UpCi17Ci0gICAgaWYgKG1f
cmFuZ2VzLnNpemUoKSA9PSBtX3Jhbmdlcy5jYXBhY2l0eSgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgbV9yYW5nZXMucHVzaChyYW5nZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxs
b2MKLQotI2VuZGlmIC8vIFpvbmVfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9jL2JtYWxsb2MuaCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvYm1hbGxvYy9ibWFsbG9jLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNmRkMjE4YzAyZDNiNGNmMTQxZjlmYjk5NDk4
NjBkZDNiNTRlNzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9ibWFsbG9j
L2JtYWxsb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgIkF2YWlsYWJs
ZU1lbW9yeS5oIgotI2luY2x1ZGUgIkNhY2hlLmgiCi0jaW5jbHVkZSAiR2lnYWNhZ2UuaCIKLSNp
bmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiUGVySGVhcEtpbmQuaCIKLSNpbmNsdWRlICJQZXJQ
cm9jZXNzLmgiCi0jaW5jbHVkZSAiU2NhdmVuZ2VyLmgiCi0jaW5jbHVkZSAiU3RhdGljTXV0ZXgu
aCIKLQotbmFtZXNwYWNlIGJtYWxsb2MgewotbmFtZXNwYWNlIGFwaSB7Ci0KLS8vIFJldHVybnMg
bnVsbCBvbiBmYWlsdXJlLgotaW5saW5lIHZvaWQqIHRyeU1hbGxvYyhzaXplX3Qgc2l6ZSwgSGVh
cEtpbmQga2luZCA9IEhlYXBLaW5kOjpQcmltYXJ5KQotewotICAgIHJldHVybiBDYWNoZTo6dHJ5
QWxsb2NhdGUoa2luZCwgc2l6ZSk7Ci19Ci0KLS8vIENyYXNoZXMgb24gZmFpbHVyZS4KLWlubGlu
ZSB2b2lkKiBtYWxsb2Moc2l6ZV90IHNpemUsIEhlYXBLaW5kIGtpbmQgPSBIZWFwS2luZDo6UHJp
bWFyeSkKLXsKLSAgICByZXR1cm4gQ2FjaGU6OmFsbG9jYXRlKGtpbmQsIHNpemUpOwotfQotCi0v
LyBSZXR1cm5zIG51bGwgb24gZmFpbHVyZS4KLWlubGluZSB2b2lkKiB0cnlNZW1hbGlnbihzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgSGVhcEtpbmQga2luZCA9IEhlYXBLaW5kOjpQcmlt
YXJ5KQotewotICAgIHJldHVybiBDYWNoZTo6dHJ5QWxsb2NhdGUoa2luZCwgYWxpZ25tZW50LCBz
aXplKTsKLX0KLQotLy8gQ3Jhc2hlcyBvbiBmYWlsdXJlLgotaW5saW5lIHZvaWQqIG1lbWFsaWdu
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBIZWFwS2luZCBraW5kID0gSGVhcEtpbmQ6
OlByaW1hcnkpCi17Ci0gICAgcmV0dXJuIENhY2hlOjphbGxvY2F0ZShraW5kLCBhbGlnbm1lbnQs
IHNpemUpOwotfQotCi0vLyBDcmFzaGVzIG9uIGZhaWx1cmUuCi1pbmxpbmUgdm9pZCogcmVhbGxv
Yyh2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXplLCBIZWFwS2luZCBraW5kID0gSGVhcEtpbmQ6
OlByaW1hcnkpCi17Ci0gICAgcmV0dXJuIENhY2hlOjpyZWFsbG9jYXRlKGtpbmQsIG9iamVjdCwg
bmV3U2l6ZSk7Ci19Ci0KLS8vIFJldHVybnMgbnVsbCBmb3IgZmFpbHVyZQotaW5saW5lIHZvaWQq
IHRyeUxhcmdlTWVtYWxpZ25WaXJ0dWFsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBI
ZWFwS2luZCBraW5kID0gSGVhcEtpbmQ6OlByaW1hcnkpCi17Ci0gICAgSGVhcCYgaGVhcCA9IFBl
clByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoa2luZCk7Ci0gICAgc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgIHJldHVybiBo
ZWFwLmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplLCBBbGxvY2F0aW9uS2luZDo6
VmlydHVhbCk7Ci19Ci0KLWlubGluZSB2b2lkIGZyZWUodm9pZCogb2JqZWN0LCBIZWFwS2luZCBr
aW5kID0gSGVhcEtpbmQ6OlByaW1hcnkpCi17Ci0gICAgQ2FjaGU6OmRlYWxsb2NhdGUoa2luZCwg
b2JqZWN0KTsKLX0KLQotaW5saW5lIHZvaWQgZnJlZUxhcmdlVmlydHVhbCh2b2lkKiBvYmplY3Qs
IEhlYXBLaW5kIGtpbmQgPSBIZWFwS2luZDo6UHJpbWFyeSkKLXsKLSAgICBIZWFwJiBoZWFwID0g
UGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChraW5kKTsKLSAgICBzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgaGVhcC5k
ZWFsbG9jYXRlTGFyZ2UobG9jaywgb2JqZWN0LCBBbGxvY2F0aW9uS2luZDo6VmlydHVhbCk7Ci19
Ci0KLWlubGluZSB2b2lkIHNjYXZlbmdlVGhpc1RocmVhZCgpCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gbnVtSGVhcHM7IGktLTspCi0gICAgICAgIENhY2hlOjpzY2F2ZW5nZShzdGF0aWNfY2Fz
dDxIZWFwS2luZD4oaSkpOwotfQotCi1pbmxpbmUgdm9pZCBzY2F2ZW5nZSgpCi17Ci0gICAgc2Nh
dmVuZ2VUaGlzVGhyZWFkKCk7Ci0KLSAgICBQZXJQcm9jZXNzPFNjYXZlbmdlcj46OmdldCgpLT5z
Y2F2ZW5nZSgpOwotfQotCi1pbmxpbmUgYm9vbCBpc0VuYWJsZWQoSGVhcEtpbmQga2luZCA9IEhl
YXBLaW5kOjpQcmltYXJ5KQotewotICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxv
Y2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgcmV0dXJuICFQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhl
YXA+Pjo6Z2V0RmFzdENhc2UoKS0+YXQoa2luZCkuZGVidWdIZWFwKCk7Ci19Ci0gICAgCi1pbmxp
bmUgc2l6ZV90IGF2YWlsYWJsZU1lbW9yeSgpCi17Ci0gICAgcmV0dXJuIGJtYWxsb2M6OmF2YWls
YWJsZU1lbW9yeSgpOwotfQotICAgIAotI2lmIEJQTEFURk9STShJT1MpCi1pbmxpbmUgc2l6ZV90
IG1lbW9yeUZvb3RwcmludCgpCi17Ci0gICAgcmV0dXJuIGJtYWxsb2M6Om1lbW9yeUZvb3Rwcmlu
dCgpOwotfQotCi1pbmxpbmUgZG91YmxlIHBlcmNlbnRBdmFpbGFibGVNZW1vcnlJblVzZSgpCi17
Ci0gICAgcmV0dXJuIGJtYWxsb2M6OnBlcmNlbnRBdmFpbGFibGVNZW1vcnlJblVzZSgpOwotfQot
I2VuZGlmCi0KLSNpZiBCT1MoREFSV0lOKQotaW5saW5lIHZvaWQgc2V0U2NhdmVuZ2VyVGhyZWFk
UU9TQ2xhc3MocW9zX2NsYXNzX3Qgb3ZlcnJpZGVDbGFzcykKLXsKLSAgICBzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY011dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgIFBlclByb2Nlc3M8U2Nh
dmVuZ2VyPjo6Z2V0KCktPnNldFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKG92ZXJyaWRlQ2xhc3Mp
OwotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIGFwaQotfSAvLyBuYW1lc3BhY2UgYm1hbGxv
YwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVu
Y2llcy9jb25maWcuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRl
bmNpZXMvY29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YjhmMzdkMzcw
OGUzZWE4NmYxY2ExZjA3MTVjNjg1NGZmZDdlYjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2Rl
cGVuZGVuY2llcy9jb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRl
IDx3dGYvRXhwb3J0TWFjcm9zLmg+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL2J5dGVzdHJlYW0uaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvYnl0
ZXN0cmVhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzRhYTM4YWZjZTA3MDIw
MTRhYmE4OGU1MjkzN2VmZTRhYmVjMTI1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRl
bmNpZXMvaWN1L3VuaWNvZGUvYnl0ZXN0cmVhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjU3ICsw
LDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNz
IE1hY2hpbmVzCi0vLyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotLy8KLS8vIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0vLyBBdXRob3I6IHNhbmpheUBnb29nbGUuY29tIChTYW5qYXkgR2hlbWF3YXQpCi0vLwotLy8g
QWJzdHJhY3QgaW50ZXJmYWNlIHRoYXQgY29uc3VtZXMgYSBzZXF1ZW5jZSBvZiBieXRlcyAoQnl0
ZVNpbmspLgotLy8KLS8vIFVzZWQgc28gdGhhdCB3ZSBjYW4gd3JpdGUgYSBzaW5nbGUgcGllY2Ug
b2YgY29kZSB0aGF0IGNhbiBvcGVyYXRlCi0vLyBvbiBhIHZhcmlldHkgb2Ygb3V0cHV0IHN0cmlu
ZyB0eXBlcy4KLS8vCi0vLyBWYXJpb3VzIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGludGVyZmFj
ZSBhcmUgcHJvdmlkZWQ6Ci0vLyAgIEJ5dGVTaW5rOgotLy8gICAgICBDaGVja2VkQXJyYXlCeXRl
U2luayAgICBXcml0ZSB0byBhIGZsYXQgYXJyYXksIHdpdGggYm91bmRzIGNoZWNraW5nCi0vLyAg
ICAgIFN0cmluZ0J5dGVTaW5rICAgICAgICAgIFdyaXRlIHRvIGFuIFNUTCBzdHJpbmcKLQotLy8g
VGhpcyBjb2RlIGlzIGEgY29udHJpYnV0aW9uIG9mIEdvb2dsZSBjb2RlLCBhbmQgdGhlIHN0eWxl
IHVzZWQgaGVyZSBpcwotLy8gYSBjb21wcm9taXNlIGJldHdlZW4gdGhlIG9yaWdpbmFsIEdvb2ds
ZSBjb2RlIGFuZCB0aGUgSUNVIGNvZGluZyBndWlkZWxpbmVzLgotLy8gRm9yIGV4YW1wbGUsIGRh
dGEgdHlwZXMgYXJlIElDVS1pZmllZCAoc2l6ZV90LGludC0+aW50MzJfdCksCi0vLyBhbmQgQVBJ
IGNvbW1lbnRzIGRveHlnZW4taWZpZWQsIGJ1dCBmdW5jdGlvbiBuYW1lcyBhbmQgYmVoYXZpb3Ig
YXJlCi0vLyBhcyBpbiB0aGUgb3JpZ2luYWwsIGlmIHBvc3NpYmxlLgotLy8gQXNzZXJ0aW9uLXN0
eWxlIGVycm9yIGhhbmRsaW5nLCBub3QgYXZhaWxhYmxlIGluIElDVSwgd2FzIGNoYW5nZWQgdG8K
LS8vIHBhcmFtZXRlciAicGlubmluZyIgc2ltaWxhciB0byBVbmljb2RlU3RyaW5nLgotLy8KLS8v
IEluIGFkZGl0aW9uLCB0aGlzIGlzIG9ubHkgYSBwYXJ0aWFsIHBvcnQgb2YgdGhlIG9yaWdpbmFs
IEdvb2dsZSBjb2RlLAotLy8gbGltaXRlZCB0byB3aGF0IHdhcyBuZWVkZWQgc28gZmFyLiBUaGUg
KG5lYXJseSkgY29tcGxldGUgb3JpZ2luYWwgY29kZQotLy8gaXMgaW4gdGhlIElDVSBzdm4gcmVw
b3NpdG9yeSBhdCBpY3VodG1sL3RydW5rL2Rlc2lnbi9zdHJpbmdzL2NvbnRyaWIKLS8vIChzZWUg
SUNVIHRpY2tldCA2NzY1LCByMjU1MTcpLgotCi0jaWZuZGVmIF9fQllURVNUUkVBTV9IX18KLSNk
ZWZpbmUgX19CWVRFU1RSRUFNX0hfXwotCi0vKioKLSAqIFxmaWxlCi0gKiBcYnJpZWYgQysrIEFQ
STogSW50ZXJmYWNlIGZvciB3cml0aW5nIGJ5dGVzLCBhbmQgaW1wbGVtZW50YXRpb24gY2xhc3Nl
cy4KLSAqLwotCi0jaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKLSNpbmNsdWRlICJ1bmljb2Rl
L3VvYmplY3QuaCIKLSNpbmNsdWRlICJ1bmljb2RlL3N0ZF9zdHJpbmcuaCIKLQotVV9OQU1FU1BB
Q0VfQkVHSU4KLQotLyoqCi0gKiBBIEJ5dGVTaW5rIGNhbiBiZSBmaWxsZWQgd2l0aCBieXRlcy4K
LSAqIEBzdGFibGUgSUNVIDQuMgotICovCi1jbGFzcyBVX0NPTU1PTl9BUEkgQnl0ZVNpbmsgOiBw
dWJsaWMgVU1lbW9yeSB7Ci1wdWJsaWM6Ci0gIC8qKgotICAgKiBEZWZhdWx0IGNvbnN0cnVjdG9y
LgotICAgKiBAc3RhYmxlIElDVSA0LjIKLSAgICovCi0gIEJ5dGVTaW5rKCkgeyB9Ci0gIC8qKgot
ICAgKiBWaXJ0dWFsIGRlc3RydWN0b3IuCi0gICAqIEBzdGFibGUgSUNVIDQuMgotICAgKi8KLSAg
dmlydHVhbCB+Qnl0ZVNpbmsoKTsKLQotICAvKioKLSAgICogQXBwZW5kICJieXRlc1swLG4tMV0i
IHRvIHRoaXMuCi0gICAqIEBwYXJhbSBieXRlcyB0aGUgcG9pbnRlciB0byB0aGUgYnl0ZXMKLSAg
ICogQHBhcmFtIG4gdGhlIG51bWJlciBvZiBieXRlczsgbXVzdCBiZSBub24tbmVnYXRpdmUKLSAg
ICogQHN0YWJsZSBJQ1UgNC4yCi0gICAqLwotICB2aXJ0dWFsIHZvaWQgQXBwZW5kKGNvbnN0IGNo
YXIqIGJ5dGVzLCBpbnQzMl90IG4pID0gMDsKLQotICAvKioKLSAgICogUmV0dXJucyBhIHdyaXRh
YmxlIGJ1ZmZlciBmb3IgYXBwZW5kaW5nIGFuZCB3cml0ZXMgdGhlIGJ1ZmZlcidzIGNhcGFjaXR5
IHRvCi0gICAqICpyZXN1bHRfY2FwYWNpdHkuIEd1YXJhbnRlZXMgKnJlc3VsdF9jYXBhY2l0eT49
bWluX2NhcGFjaXR5LgotICAgKiBNYXkgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2FsbGVyLW93
bmVkIHNjcmF0Y2ggYnVmZmVyIHdoaWNoIG11c3QgaGF2ZQotICAgKiBzY3JhdGNoX2NhcGFjaXR5
Pj1taW5fY2FwYWNpdHkuCi0gICAqIFRoZSByZXR1cm5lZCBidWZmZXIgaXMgb25seSB2YWxpZCB1
bnRpbCB0aGUgbmV4dCBvcGVyYXRpb24KLSAgICogb24gdGhpcyBCeXRlU2luay4KLSAgICoKLSAg
ICogQWZ0ZXIgd3JpdGluZyBhdCBtb3N0ICpyZXN1bHRfY2FwYWNpdHkgYnl0ZXMsIGNhbGwgQXBw
ZW5kKCkgd2l0aCB0aGUKLSAgICogcG9pbnRlciByZXR1cm5lZCBmcm9tIHRoaXMgZnVuY3Rpb24g
YW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KLSAgICogTWFueSBBcHBlbmQoKSBpbXBs
ZW1lbnRhdGlvbnMgd2lsbCBhdm9pZCBjb3B5aW5nIGJ5dGVzIGlmIHRoaXMgZnVuY3Rpb24KLSAg
ICogcmV0dXJuZWQgYW4gaW50ZXJuYWwgYnVmZmVyLgotICAgKgotICAgKiBQYXJ0aWFsIHVzYWdl
IGV4YW1wbGU6Ci0gICAqICBpbnQzMl90IGNhcGFjaXR5OwotICAgKiAgY2hhciogYnVmZmVyID0g
c2luay0+R2V0QXBwZW5kQnVmZmVyKC4uLiwgJmNhcGFjaXR5KTsKLSAgICogIC4uLiBXcml0ZSBu
IGJ5dGVzIGludG8gYnVmZmVyLCB3aXRoIG4gPD0gY2FwYWNpdHkuCi0gICAqICBzaW5rLT5BcHBl
bmQoYnVmZmVyLCBuKTsKLSAgICogSW4gbWFueSBpbXBsZW1lbnRhdGlvbnMsIHRoYXQgY2FsbCB0
byBBcHBlbmQgd2lsbCBhdm9pZCBjb3B5aW5nIGJ5dGVzLgotICAgKgotICAgKiBJZiB0aGUgQnl0
ZVNpbmsgYWxsb2NhdGVzIG9yIHJlYWxsb2NhdGVzIGFuIGludGVybmFsIGJ1ZmZlciwgaXQgc2hv
dWxkIHVzZQotICAgKiB0aGUgZGVzaXJlZF9jYXBhY2l0eV9oaW50IGlmIGFwcHJvcHJpYXRlLgot
ICAgKiBJZiBhIGNhbGxlciBjYW5ub3QgcHJvdmlkZSBhIHJlYXNvbmFibGUgZ3Vlc3MgYXQgdGhl
IGRlc2lyZWQgY2FwYWNpdHksCi0gICAqIGl0IHNob3VsZCBwYXNzIGRlc2lyZWRfY2FwYWNpdHlf
aGludD0wLgotICAgKgotICAgKiBJZiBhIG5vbi1zY3JhdGNoIGJ1ZmZlciBpcyByZXR1cm5lZCwg
dGhlIGNhbGxlciBtYXkgb25seSBwYXNzCi0gICAqIGEgcHJlZml4IHRvIGl0IHRvIEFwcGVuZCgp
LgotICAgKiBUaGF0IGlzLCBpdCBpcyBub3QgY29ycmVjdCB0byBwYXNzIGFuIGludGVyaW9yIHBv
aW50ZXIgdG8gQXBwZW5kKCkuCi0gICAqCi0gICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9u
IGFsd2F5cyByZXR1cm5zIHRoZSBzY3JhdGNoIGJ1ZmZlci4KLSAgICoKLSAgICogQHBhcmFtIG1p
bl9jYXBhY2l0eSByZXF1aXJlZCBtaW5pbXVtIGNhcGFjaXR5IG9mIHRoZSByZXR1cm5lZCBidWZm
ZXI7Ci0gICAqICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSBub24tbmVnYXRpdmUKLSAgICog
QHBhcmFtIGRlc2lyZWRfY2FwYWNpdHlfaGludCBkZXNpcmVkIGNhcGFjaXR5IG9mIHRoZSByZXR1
cm5lZCBidWZmZXI7Ci0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSBu
b24tbmVnYXRpdmUKLSAgICogQHBhcmFtIHNjcmF0Y2ggZGVmYXVsdCBjYWxsZXItb3duZWQgYnVm
ZmVyCi0gICAqIEBwYXJhbSBzY3JhdGNoX2NhcGFjaXR5IGNhcGFjaXR5IG9mIHRoZSBzY3JhdGNo
IGJ1ZmZlcgotICAgKiBAcGFyYW0gcmVzdWx0X2NhcGFjaXR5IHBvaW50ZXIgdG8gYW4gaW50ZWdl
ciB3aGljaCB3aWxsIGJlIHNldCB0byB0aGUKLSAgICogICAgICAgICAgICAgICAgICAgICAgICBj
YXBhY2l0eSBvZiB0aGUgcmV0dXJuZWQgYnVmZmVyCi0gICAqIEByZXR1cm4gYSBidWZmZXIgd2l0
aCAqcmVzdWx0X2NhcGFjaXR5Pj1taW5fY2FwYWNpdHkKLSAgICogQHN0YWJsZSBJQ1UgNC4yCi0g
ICAqLwotICB2aXJ0dWFsIGNoYXIqIEdldEFwcGVuZEJ1ZmZlcihpbnQzMl90IG1pbl9jYXBhY2l0
eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBkZXNpcmVkX2NhcGFj
aXR5X2hpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIHNjcmF0Y2gs
IGludDMyX3Qgc2NyYXRjaF9jYXBhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50MzJfdCogcmVzdWx0X2NhcGFjaXR5KTsKLQotICAvKioKLSAgICogRmx1c2ggaW50ZXJu
YWwgYnVmZmVycy4KLSAgICogU29tZSBieXRlIHNpbmtzIHVzZSBpbnRlcm5hbCBidWZmZXJzIG9y
IHByb3ZpZGUgYnVmZmVyaW5nCi0gICAqIGFuZCByZXF1aXJlIGNhbGxpbmcgRmx1c2goKSBhdCB0
aGUgZW5kIG9mIHRoZSBzdHJlYW0uCi0gICAqIFRoZSBCeXRlU2luayBzaG91bGQgYmUgcmVhZHkg
Zm9yIGZ1cnRoZXIgQXBwZW5kKCkgY2FsbHMgYWZ0ZXIgRmx1c2goKS4KLSAgICogVGhlIGRlZmF1
bHQgaW1wbGVtZW50YXRpb24gb2YgRmx1c2goKSBkb2VzIG5vdGhpbmcuCi0gICAqIEBzdGFibGUg
SUNVIDQuMgotICAgKi8KLSAgdmlydHVhbCB2b2lkIEZsdXNoKCk7Ci0KLXByaXZhdGU6Ci0gIEJ5
dGVTaW5rKGNvbnN0IEJ5dGVTaW5rICYpOyAvLyBjb3B5IGNvbnN0cnVjdG9yIG5vdCBpbXBsZW1l
bnRlZAotICBCeXRlU2luayAmb3BlcmF0b3I9KGNvbnN0IEJ5dGVTaW5rICYpOyAvLyBhc3NpZ25t
ZW50IG9wZXJhdG9yIG5vdCBpbXBsZW1lbnRlZAotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU29tZSBzdGFu
ZGFyZCBpbXBsZW1lbnRhdGlvbnMKLQotLyoqIAotICogSW1wbGVtZW50YXRpb24gb2YgQnl0ZVNp
bmsgdGhhdCB3cml0ZXMgdG8gYSBmbGF0IGJ5dGUgYXJyYXksCi0gKiB3aXRoIGJvdW5kcy1jaGVj
a2luZzoKLSAqIFRoaXMgc2luayB3aWxsIG5vdCB3cml0ZSBtb3JlIHRoYW4gY2FwYWNpdHkgYnl0
ZXMgdG8gb3V0YnVmLgotICogSWYgbW9yZSB0aGFuIGNhcGFjaXR5IGJ5dGVzIGFyZSBBcHBlbmQo
KWVkLCB0aGVuIGV4Y2VzcyBieXRlcyBhcmUgaWdub3JlZCwKLSAqIGFuZCBPdmVyZmxvd2VkKCkg
d2lsbCByZXR1cm4gdHJ1ZS4KLSAqIE92ZXJmbG93IGRvZXMgbm90IGNhdXNlIGEgcnVudGltZSBl
cnJvci4KLSAqIEBzdGFibGUgSUNVIDQuMgotICovCi1jbGFzcyBVX0NPTU1PTl9BUEkgQ2hlY2tl
ZEFycmF5Qnl0ZVNpbmsgOiBwdWJsaWMgQnl0ZVNpbmsgewotcHVibGljOgotICAvKioKLSAgICog
Q29uc3RydWN0cyBhIEJ5dGVTaW5rIHRoYXQgd2lsbCB3cml0ZSB0byBvdXRidWZbMC4uY2FwYWNp
dHktMV0uCi0gICAqIEBwYXJhbSBvdXRidWYgYnVmZmVyIHRvIHdyaXRlIHRvCi0gICAqIEBwYXJh
bSBjYXBhY2l0eSBzaXplIG9mIHRoZSBidWZmZXIKLSAgICogQHN0YWJsZSBJQ1UgNC4yCi0gICAq
LwotICBDaGVja2VkQXJyYXlCeXRlU2luayhjaGFyKiBvdXRidWYsIGludDMyX3QgY2FwYWNpdHkp
OwotICAvKioKLSAgICogRGVzdHJ1Y3Rvci4KLSAgICogQHN0YWJsZSBJQ1UgNC4yCi0gICAqLwot
ICB2aXJ0dWFsIH5DaGVja2VkQXJyYXlCeXRlU2luaygpOwotICAvKioKLSAgICogUmV0dXJucyB0
aGUgc2luayB0byBpdHMgb3JpZ2luYWwgc3RhdGUsIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBidWZm
ZXIuCi0gICAqIFVzZWZ1bCBmb3IgcmV1c2luZyBib3RoIHRoZSBidWZmZXIgYW5kIHRoZSBzaW5r
IGZvciBtdWx0aXBsZSBzdHJlYW1zLgotICAgKiBSZXNldHMgdGhlIHN0YXRlIHRvIE51bWJlck9m
Qnl0ZXNXcml0dGVuKCk9TnVtYmVyT2ZCeXRlc0FwcGVuZGVkKCk9MAotICAgKiBhbmQgT3ZlcmZs
b3dlZCgpPUZBTFNFLgotICAgKiBAcmV0dXJuICp0aGlzCi0gICAqIEBzdGFibGUgSUNVIDQuNgot
ICAgKi8KLSAgdmlydHVhbCBDaGVja2VkQXJyYXlCeXRlU2luayYgUmVzZXQoKTsKLSAgLyoqCi0g
ICAqIEFwcGVuZCAiYnl0ZXNbMCxuLTFdIiB0byB0aGlzLgotICAgKiBAcGFyYW0gYnl0ZXMgdGhl
IHBvaW50ZXIgdG8gdGhlIGJ5dGVzCi0gICAqIEBwYXJhbSBuIHRoZSBudW1iZXIgb2YgYnl0ZXM7
IG11c3QgYmUgbm9uLW5lZ2F0aXZlCi0gICAqIEBzdGFibGUgSUNVIDQuMgotICAgKi8KLSAgdmly
dHVhbCB2b2lkIEFwcGVuZChjb25zdCBjaGFyKiBieXRlcywgaW50MzJfdCBuKTsKLSAgLyoqCi0g
ICAqIFJldHVybnMgYSB3cml0YWJsZSBidWZmZXIgZm9yIGFwcGVuZGluZyBhbmQgd3JpdGVzIHRo
ZSBidWZmZXIncyBjYXBhY2l0eSB0bwotICAgKiAqcmVzdWx0X2NhcGFjaXR5LiBGb3IgZGV0YWls
cyBzZWUgdGhlIGJhc2UgY2xhc3MgZG9jdW1lbnRhdGlvbi4KLSAgICogQHBhcmFtIG1pbl9jYXBh
Y2l0eSByZXF1aXJlZCBtaW5pbXVtIGNhcGFjaXR5IG9mIHRoZSByZXR1cm5lZCBidWZmZXI7Ci0g
ICAqICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSBub24tbmVnYXRpdmUKLSAgICogQHBhcmFt
IGRlc2lyZWRfY2FwYWNpdHlfaGludCBkZXNpcmVkIGNhcGFjaXR5IG9mIHRoZSByZXR1cm5lZCBi
dWZmZXI7Ci0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSBub24tbmVn
YXRpdmUKLSAgICogQHBhcmFtIHNjcmF0Y2ggZGVmYXVsdCBjYWxsZXItb3duZWQgYnVmZmVyCi0g
ICAqIEBwYXJhbSBzY3JhdGNoX2NhcGFjaXR5IGNhcGFjaXR5IG9mIHRoZSBzY3JhdGNoIGJ1ZmZl
cgotICAgKiBAcGFyYW0gcmVzdWx0X2NhcGFjaXR5IHBvaW50ZXIgdG8gYW4gaW50ZWdlciB3aGlj
aCB3aWxsIGJlIHNldCB0byB0aGUKLSAgICogICAgICAgICAgICAgICAgICAgICAgICBjYXBhY2l0
eSBvZiB0aGUgcmV0dXJuZWQgYnVmZmVyCi0gICAqIEByZXR1cm4gYSBidWZmZXIgd2l0aCAqcmVz
dWx0X2NhcGFjaXR5Pj1taW5fY2FwYWNpdHkKLSAgICogQHN0YWJsZSBJQ1UgNC4yCi0gICAqLwot
ICB2aXJ0dWFsIGNoYXIqIEdldEFwcGVuZEJ1ZmZlcihpbnQzMl90IG1pbl9jYXBhY2l0eSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBkZXNpcmVkX2NhcGFjaXR5X2hp
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIHNjcmF0Y2gsIGludDMy
X3Qgc2NyYXRjaF9jYXBhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCogcmVzdWx0X2NhcGFjaXR5KTsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG51bWJlciBv
ZiBieXRlcyBhY3R1YWxseSB3cml0dGVuIHRvIHRoZSBzaW5rLgotICAgKiBAcmV0dXJuIG51bWJl
ciBvZiBieXRlcyB3cml0dGVuIHRvIHRoZSBidWZmZXIKLSAgICogQHN0YWJsZSBJQ1UgNC4yCi0g
ICAqLwotICBpbnQzMl90IE51bWJlck9mQnl0ZXNXcml0dGVuKCkgY29uc3QgeyByZXR1cm4gc2l6
ZV87IH0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgYnl0ZXMgd2VyZSBkaXNjYXJk
ZWQsIGkuZS4sIGlmIHRoZXJlIHdhcyBhbgotICAgKiBhdHRlbXB0IHRvIHdyaXRlIG1vcmUgdGhh
biAnY2FwYWNpdHknIGJ5dGVzLgotICAgKiBAcmV0dXJuIFRSVUUgaWYgbW9yZSB0aGFuICdjYXBh
Y2l0eScgYnl0ZXMgd2VyZSBBcHBlbmQoKWVkCi0gICAqIEBzdGFibGUgSUNVIDQuMgotICAgKi8K
LSAgVUJvb2wgT3ZlcmZsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG92ZXJmbG93ZWRfOyB9Ci0gIC8q
KgotICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXBwZW5kZWQgdG8gdGhlIHNpbmsu
Ci0gICAqIElmIE92ZXJmbG93ZWQoKSB0aGVuIE51bWJlck9mQnl0ZXNBcHBlbmRlZCgpPk51bWJl
ck9mQnl0ZXNXcml0dGVuKCkKLSAgICogZWxzZSB0aGV5IHJldHVybiB0aGUgc2FtZSBudW1iZXIu
Ci0gICAqIEByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlcgotICAg
KiBAc3RhYmxlIElDVSA0LjYKLSAgICovCi0gIGludDMyX3QgTnVtYmVyT2ZCeXRlc0FwcGVuZGVk
KCkgY29uc3QgeyByZXR1cm4gYXBwZW5kZWRfOyB9Ci1wcml2YXRlOgotICBjaGFyKiBvdXRidWZf
OwotICBjb25zdCBpbnQzMl90IGNhcGFjaXR5XzsKLSAgaW50MzJfdCBzaXplXzsKLSAgaW50MzJf
dCBhcHBlbmRlZF87Ci0gIFVCb29sIG92ZXJmbG93ZWRfOwotICBDaGVja2VkQXJyYXlCeXRlU2lu
aygpOyAvLy88IGRlZmF1bHQgY29uc3RydWN0b3Igbm90IGltcGxlbWVudGVkIAotICBDaGVja2Vk
QXJyYXlCeXRlU2luayhjb25zdCBDaGVja2VkQXJyYXlCeXRlU2luayAmKTsgLy8vPCBjb3B5IGNv
bnN0cnVjdG9yIG5vdCBpbXBsZW1lbnRlZAotICBDaGVja2VkQXJyYXlCeXRlU2luayAmb3BlcmF0
b3I9KGNvbnN0IENoZWNrZWRBcnJheUJ5dGVTaW5rICYpOyAvLy88IGFzc2lnbm1lbnQgb3BlcmF0
b3Igbm90IGltcGxlbWVudGVkCi19OwotCi0jaWYgVV9IQVZFX1NURF9TVFJJTkcKLQotLyoqIAot
ICogSW1wbGVtZW50YXRpb24gb2YgQnl0ZVNpbmsgdGhhdCB3cml0ZXMgdG8gYSAic3RyaW5nIi4K
LSAqIFRoZSBTdHJpbmdDbGFzcyBpcyB1c3VhbGx5IGluc3RhbnRpYXRlZCB3aXRoIGEgc3RkOjpz
dHJpbmcuCi0gKiBAc3RhYmxlIElDVSA0LjIKLSAqLwotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5n
Q2xhc3M+Ci1jbGFzcyBTdHJpbmdCeXRlU2luayA6IHB1YmxpYyBCeXRlU2luayB7Ci0gcHVibGlj
OgotICAvKioKLSAgICogQ29uc3RydWN0cyBhIEJ5dGVTaW5rIHRoYXQgd2lsbCBhcHBlbmQgYnl0
ZXMgdG8gdGhlIGRlc3Qgc3RyaW5nLgotICAgKiBAcGFyYW0gZGVzdCBwb2ludGVyIHRvIHN0cmlu
ZyBvYmplY3QgdG8gYXBwZW5kIHRvCi0gICAqIEBzdGFibGUgSUNVIDQuMgotICAgKi8KLSAgU3Ry
aW5nQnl0ZVNpbmsoU3RyaW5nQ2xhc3MqIGRlc3QpIDogZGVzdF8oZGVzdCkgeyB9Ci0gIC8qKgot
ICAgKiBBcHBlbmQgImJ5dGVzWzAsbi0xXSIgdG8gdGhpcy4KLSAgICogQHBhcmFtIGRhdGEgdGhl
IHBvaW50ZXIgdG8gdGhlIGJ5dGVzCi0gICAqIEBwYXJhbSBuIHRoZSBudW1iZXIgb2YgYnl0ZXM7
IG11c3QgYmUgbm9uLW5lZ2F0aXZlCi0gICAqIEBzdGFibGUgSUNVIDQuMgotICAgKi8KLSAgdmly
dHVhbCB2b2lkIEFwcGVuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQzMl90IG4pIHsgZGVzdF8tPmFw
cGVuZChkYXRhLCBuKTsgfQotIHByaXZhdGU6Ci0gIFN0cmluZ0NsYXNzKiBkZXN0XzsKLSAgU3Ry
aW5nQnl0ZVNpbmsoKTsgLy8vPCBkZWZhdWx0IGNvbnN0cnVjdG9yIG5vdCBpbXBsZW1lbnRlZCAK
LSAgU3RyaW5nQnl0ZVNpbmsoY29uc3QgU3RyaW5nQnl0ZVNpbmsgJik7IC8vLzwgY29weSBjb25z
dHJ1Y3RvciBub3QgaW1wbGVtZW50ZWQKLSAgU3RyaW5nQnl0ZVNpbmsgJm9wZXJhdG9yPShjb25z
dCBTdHJpbmdCeXRlU2luayAmKTsgLy8vPCBhc3NpZ25tZW50IG9wZXJhdG9yIG5vdCBpbXBsZW1l
bnRlZAotfTsKLQotI2VuZGlmCi0KLVVfTkFNRVNQQUNFX0VORAotCi0jZW5kaWYgIC8vIF9fQllU
RVNUUkVBTV9IX18KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvY2hhcml0ZXIuaCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvY2hhcml0ZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkNjUwOTBhNDBhNjA4NTk1MWM3MzMwN2Y3NGFj
ZjgzYmExYmJjOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmlj
b2RlL2NoYXJpdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MjIgKzAsMCBAQAotLyoKLSoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCi0qCi0qICAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMTEsIEludGVybmF0aW9uYWwgQnVz
aW5lc3MgTWFjaGluZXMKLSogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqCi0qLwotCi0jaWZuZGVmIENIQVJJVEVSX0gKLSNkZWZp
bmUgQ0hBUklURVJfSAotCi0jaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKLSNpbmNsdWRlICJ1
bmljb2RlL3VvYmplY3QuaCIKLSNpbmNsdWRlICJ1bmljb2RlL3VuaXN0ci5oIgotLyoqCi0gKiBc
ZmlsZQotICogXGJyaWVmIEMrKyBBUEk6IENoYXJhY3RlciBJdGVyYXRvcgotICovCi0gCi1VX05B
TUVTUEFDRV9CRUdJTgotLyoqCi0gKiBBYnN0cmFjdCBjbGFzcyB0aGF0IGRlZmluZXMgYW4gQVBJ
IGZvciBmb3J3YXJkLW9ubHkgaXRlcmF0aW9uCi0gKiBvbiB0ZXh0IG9iamVjdHMuCi0gKiBUaGlz
IGlzIGEgbWluaW1hbCBpbnRlcmZhY2UgZm9yIGl0ZXJhdGlvbiB3aXRob3V0IHJhbmRvbSBhY2Nl
c3MKLSAqIG9yIGJhY2t3YXJkcyBpdGVyYXRpb24uIEl0IGlzIGVzcGVjaWFsbHkgdXNlZnVsIGZv
ciB3cmFwcGluZwotICogc3RyZWFtcyB3aXRoIGNvbnZlcnRlcnMgaW50byBhbiBvYmplY3QgZm9y
IGNvbGxhdGlvbiBvcgotICogbm9ybWFsaXphdGlvbi4KLSAqCi0gKiA8cD5DaGFyYWN0ZXJzIGNh
biBiZSBhY2Nlc3NlZCBpbiB0d28gd2F5czogYXMgY29kZSB1bml0cyBvciBhcwotICogY29kZSBw
b2ludHMuCi0gKiBVbmljb2RlIGNvZGUgcG9pbnRzIGFyZSAyMS1iaXQgaW50ZWdlcnMgYW5kIGFy
ZSB0aGUgc2NhbGFyIHZhbHVlcwotICogb2YgVW5pY29kZSBjaGFyYWN0ZXJzLiBJQ1UgdXNlcyB0
aGUgdHlwZSBVQ2hhcjMyIGZvciB0aGVtLgotICogVW5pY29kZSBjb2RlIHVuaXRzIGFyZSB0aGUg
c3RvcmFnZSB1bml0cyBvZiBhIGdpdmVuCi0gKiBVbmljb2RlL1VDUyBUcmFuc2Zvcm1hdGlvbiBG
b3JtYXQgKGEgY2hhcmFjdGVyIGVuY29kaW5nIHNjaGVtZSkuCi0gKiBXaXRoIFVURi0xNiwgYWxs
IGNvZGUgcG9pbnRzIGNhbiBiZSByZXByZXNlbnRlZCB3aXRoIGVpdGhlciBvbmUKLSAqIG9yIHR3
byBjb2RlIHVuaXRzICgic3Vycm9nYXRlcyIpLgotICogU3RyaW5nIHN0b3JhZ2UgaXMgdHlwaWNh
bGx5IGJhc2VkIG9uIGNvZGUgdW5pdHMsIHdoaWxlIHByb3BlcnRpZXMKLSAqIG9mIGNoYXJhY3Rl
cnMgYXJlIHR5cGljYWxseSBkZXRlcm1pbmVkIHVzaW5nIGNvZGUgcG9pbnQgdmFsdWVzLgotICog
U29tZSBwcm9jZXNzZXMgbWF5IGJlIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBzZXF1ZW5jZXMgb2Yg
Y29kZSB1bml0cywKLSAqIG9yIGl0IG1heSBiZSBrbm93biB0aGF0IGFsbCBjaGFyYWN0ZXJzIHRo
YXQgYXJlIGltcG9ydGFudCB0byBhbgotICogYWxnb3JpdGhtIGNhbiBiZSByZXByZXNlbnRlZCB3
aXRoIHNpbmdsZSBjb2RlIHVuaXRzLgotICogT3RoZXIgcHJvY2Vzc2VzIHdpbGwgbmVlZCB0byB1
c2UgdGhlIGNvZGUgcG9pbnQgYWNjZXNzIGZ1bmN0aW9ucy48L3A+Ci0gKgotICogPHA+Rm9yd2Fy
ZENoYXJhY3Rlckl0ZXJhdG9yIHByb3ZpZGVzIG5leHRQb3N0SW5jKCkgdG8gYWNjZXNzCi0gKiBh
IGNvZGUgdW5pdCBhbmQgYWR2YW5jZSBhbiBpbnRlcm5hbCBwb3NpdGlvbiBpbnRvIHRoZSB0ZXh0
IG9iamVjdCwKLSAqIHNpbWlsYXIgdG8gYSA8Y29kZT5yZXR1cm4gdGV4dFtwb3NpdGlvbisrXTwv
Y29kZT4uPGJyPgotICogSXQgcHJvdmlkZXMgbmV4dDMyUG9zdEluYygpIHRvIGFjY2VzcyBhIGNv
ZGUgcG9pbnQgYW5kIGFkdmFuY2UgYW4gaW50ZXJuYWwKLSAqIHBvc2l0aW9uLjwvcD4KLSAqCi0g
KiA8cD5uZXh0MzJQb3N0SW5jKCkgYXNzdW1lcyB0aGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIGlz
IHRoYXQgb2YKLSAqIHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIHBvaW50LCBpLmUuLCBvZiBpdHMg
Zmlyc3QgY29kZSB1bml0LgotICogQWZ0ZXIgbmV4dDMyUG9zdEluYygpLCB0aGlzIHdpbGwgYmUg
dHJ1ZSBhZ2Fpbi4KLSAqIEluIGdlbmVyYWwsIGFjY2VzcyB0byBjb2RlIHVuaXRzIGFuZCBjb2Rl
IHBvaW50cyBpbiB0aGUgc2FtZQotICogaXRlcmF0aW9uIGxvb3Agc2hvdWxkIG5vdCBiZSBtaXhl
ZC4gSW4gVVRGLTE2LCBpZiB0aGUgY3VycmVudCBwb3NpdGlvbgotICogaXMgb24gYSBzZWNvbmQg
Y29kZSB1bml0IChMb3cgU3Vycm9nYXRlKSwgdGhlbiBvbmx5IHRoYXQgY29kZSB1bml0Ci0gKiBp
cyByZXR1cm5lZCBldmVuIGJ5IG5leHQzMlBvc3RJbmMoKS48L3A+Ci0gKgotICogPHA+Rm9yIGl0
ZXJhdGlvbiB3aXRoIGVpdGhlciBmdW5jdGlvbiwgdGhlcmUgYXJlIHR3byB3YXlzIHRvCi0gKiBj
aGVjayBmb3IgdGhlIGVuZCBvZiB0aGUgaXRlcmF0aW9uLiBXaGVuIHRoZXJlIGFyZSBubyBtb3Jl
Ci0gKiBjaGFyYWN0ZXJzIGluIHRoZSB0ZXh0IG9iamVjdDoKLSAqIDx1bD4KLSAqIDxsaT5UaGUg
aGFzTmV4dCgpIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UuPC9saT4KLSAqIDxsaT5uZXh0UG9zdElu
YygpIGFuZCBuZXh0MzJQb3N0SW5jKCkgcmV0dXJuIERPTkUKLSAqICAgICB3aGVuIG9uZSBhdHRl
bXB0cyB0byByZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB0ZXh0IG9iamVjdC48L2xpPgotICog
PC91bD4KLSAqCi0gKiBFeGFtcGxlOgotICogXGNvZGUgCi0gKiB2b2lkIGZ1bmN0aW9uMShGb3J3
YXJkQ2hhcmFjdGVySXRlcmF0b3IgJml0KSB7Ci0gKiAgICAgVUNoYXIzMiBjOwotICogICAgIHdo
aWxlKGl0Lmhhc05leHQoKSkgewotICogICAgICAgICBjPWl0Lm5leHQzMlBvc3RJbmMoKTsKLSAq
ICAgICAgICAgLy8gdXNlIGMKLSAqICAgICB9Ci0gKiB9Ci0gKgotICogdm9pZCBmdW5jdGlvbjEo
Rm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yICZpdCkgewotICogICAgIFVDaGFyIGM7Ci0gKiAgICAg
d2hpbGUoKGM9aXQubmV4dFBvc3RJbmMoKSkhPUZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvcjo6RE9O
RSkgewotICogICAgICAgICAvLyB1c2UgYwotICogICAgICB9Ci0gKiAgfQotICogXGVuZGNvZGUK
LSAqIDwvcD4KLSAqCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotY2xhc3MgVV9DT01NT05fQVBJ
IEZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvciA6IHB1YmxpYyBVT2JqZWN0IHsKLXB1YmxpYzoKLSAg
ICAvKioKLSAgICAgKiBWYWx1ZSByZXR1cm5lZCBieSBtb3N0IG9mIEZvcndhcmRDaGFyYWN0ZXJJ
dGVyYXRvcidzIGZ1bmN0aW9ucwotICAgICAqIHdoZW4gdGhlIGl0ZXJhdG9yIGhhcyByZWFjaGVk
IHRoZSBsaW1pdHMgb2YgaXRzIGl0ZXJhdGlvbi4KLSAgICAgKiBAc3RhYmxlIElDVSAyLjAKLSAg
ICAgKi8KLSAgICBlbnVtIHsgRE9ORSA9IDB4ZmZmZiB9OwotICAgIAotICAgIC8qKgotICAgICAq
IERlc3RydWN0b3IuICAKLSAgICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICAgKi8KLSAgICB2aXJ0
dWFsIH5Gb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3IoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBS
ZXR1cm5zIHRydWUgd2hlbiBib3RoIGl0ZXJhdG9ycyByZWZlciB0byB0aGUgc2FtZQotICAgICAq
IGNoYXJhY3RlciBpbiB0aGUgc2FtZSBjaGFyYWN0ZXItc3RvcmFnZSBvYmplY3QuICAKLSAgICAg
KiBAcGFyYW0gdGhhdCBUaGUgRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yIHRvIGJlIGNvbXBhcmVk
IGZvciBlcXVhbGl0eQotICAgICAqIEByZXR1cm4gdHJ1ZSB3aGVuIGJvdGggaXRlcmF0b3JzIHJl
ZmVyIHRvIHRoZSBzYW1lCi0gICAgICogY2hhcmFjdGVyIGluIHRoZSBzYW1lIGNoYXJhY3Rlci1z
dG9yYWdlIG9iamVjdAotICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAgICAqLwotICAgIHZpcnR1
YWwgVUJvb2wgb3BlcmF0b3I9PShjb25zdCBGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3ImIHRoYXQp
IGNvbnN0ID0gMDsKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUg
aXRlcmF0b3JzIHJlZmVyIHRvIGRpZmZlcmVudAotICAgICAqIHRleHQtc3RvcmFnZSBvYmplY3Rz
LCBvciB0byBkaWZmZXJlbnQgY2hhcmFjdGVycyBpbiB0aGUKLSAgICAgKiBzYW1lIHRleHQtc3Rv
cmFnZSBvYmplY3QuICAKLSAgICAgKiBAcGFyYW0gdGhhdCBUaGUgRm9yd2FyZENoYXJhY3Rlckl0
ZXJhdG9yIHRvIGJlIGNvbXBhcmVkIGZvciBpbmVxdWFsaXR5Ci0gICAgICogQHJldHVybiB0cnVl
IHdoZW4gdGhlIGl0ZXJhdG9ycyByZWZlciB0byBkaWZmZXJlbnQKLSAgICAgKiB0ZXh0LXN0b3Jh
Z2Ugb2JqZWN0cywgb3IgdG8gZGlmZmVyZW50IGNoYXJhY3RlcnMgaW4gdGhlCi0gICAgICogc2Ft
ZSB0ZXh0LXN0b3JhZ2Ugb2JqZWN0Ci0gICAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAgICovCi0g
ICAgaW5saW5lIFVCb29sIG9wZXJhdG9yIT0oY29uc3QgRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9y
JiB0aGF0KSBjb25zdDsKLSAgICAKLSAgICAvKioKLSAgICAgKiBHZW5lcmF0ZXMgYSBoYXNoIGNv
ZGUgZm9yIHRoaXMgaXRlcmF0b3IuICAKLSAgICAgKiBAcmV0dXJuIHRoZSBoYXNoIGNvZGUuCi0g
ICAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAgICovCi0gICAgdmlydHVhbCBpbnQzMl90IGhhc2hD
b2RlKHZvaWQpIGNvbnN0ID0gMDsKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgVUNs
YXNzSUQgZm9yIHRoaXMgRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yICgicG9vciBtYW4ncwotICAg
ICAqIFJUVEkiKS48UD4gRGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcHVi
bGljLAotICAgICAqIERPIE5PVCBDT05TSURFUiBJVCBQQVJUIE9GIENIQVJBQ1RFUklURVJBVE9S
J1MgQVBJISAKLSAgICAgKiBAcmV0dXJuIGEgVUNsYXNzSUQgZm9yIHRoaXMgRm9yd2FyZENoYXJh
Y3Rlckl0ZXJhdG9yIAotICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAgICAqLwotICAgIHZpcnR1
YWwgVUNsYXNzSUQgZ2V0RHluYW1pY0NsYXNzSUQodm9pZCkgY29uc3QgPSAwOwotICAgIAotICAg
IC8qKgotICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY29kZSB1bml0IGZvciByZXR1cm5pbmcgYW5k
IGFkdmFuY2VzIHRvIHRoZSBuZXh0IGNvZGUgdW5pdAotICAgICAqIGluIHRoZSBpdGVyYXRpb24g
cmFuZ2UKLSAgICAgKiAodG93YXJkIGVuZEluZGV4KCkpLiAgSWYgdGhlcmUgYXJlCi0gICAgICog
bm8gbW9yZSBjb2RlIHVuaXRzIHRvIHJldHVybiwgcmV0dXJucyBET05FLgotICAgICAqIEByZXR1
cm4gdGhlIGN1cnJlbnQgY29kZSB1bml0LgotICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAgICAq
LwotICAgIHZpcnR1YWwgVUNoYXIgICAgICAgICBuZXh0UG9zdEluYyh2b2lkKSA9IDA7Ci0gICAg
Ci0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgY3VycmVudCBjb2RlIHBvaW50IGZvciByZXR1cm5p
bmcgYW5kIGFkdmFuY2VzIHRvIHRoZSBuZXh0IGNvZGUgcG9pbnQKLSAgICAgKiBpbiB0aGUgaXRl
cmF0aW9uIHJhbmdlCi0gICAgICogKHRvd2FyZCBlbmRJbmRleCgpKS4gIElmIHRoZXJlIGFyZQot
ICAgICAqIG5vIG1vcmUgY29kZSBwb2ludHMgdG8gcmV0dXJuLCByZXR1cm5zIERPTkUuCi0gICAg
ICogQHJldHVybiB0aGUgY3VycmVudCBjb2RlIHBvaW50LgotICAgICAqIEBzdGFibGUgSUNVIDIu
MAotICAgICAqLwotICAgIHZpcnR1YWwgVUNoYXIzMiAgICAgICBuZXh0MzJQb3N0SW5jKHZvaWQp
ID0gMDsKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIEZBTFNFIGlmIHRoZXJlIGFyZSBu
byBtb3JlIGNvZGUgdW5pdHMgb3IgY29kZSBwb2ludHMKLSAgICAgKiBhdCBvciBhZnRlciB0aGUg
Y3VycmVudCBwb3NpdGlvbiBpbiB0aGUgaXRlcmF0aW9uIHJhbmdlLgotICAgICAqIFRoaXMgaXMg
dXNlZCB3aXRoIG5leHRQb3N0SW5jKCkgb3IgbmV4dDMyUG9zdEluYygpIGluIGZvcndhcmQKLSAg
ICAgKiBpdGVyYXRpb24uCi0gICAgICogQHJldHVybnMgRkFMU0UgaWYgdGhlcmUgYXJlIG5vIG1v
cmUgY29kZSB1bml0cyBvciBjb2RlIHBvaW50cwotICAgICAqIGF0IG9yIGFmdGVyIHRoZSBjdXJy
ZW50IHBvc2l0aW9uIGluIHRoZSBpdGVyYXRpb24gcmFuZ2UuCi0gICAgICogQHN0YWJsZSBJQ1Ug
Mi4wCi0gICAgICovCi0gICAgdmlydHVhbCBVQm9vbCAgICAgICAgaGFzTmV4dCgpID0gMDsKLSAg
ICAKLXByb3RlY3RlZDoKLSAgICAvKiogRGVmYXVsdCBjb25zdHJ1Y3RvciB0byBiZSBvdmVycmlk
ZGVuIGluIHRoZSBpbXBsZW1lbnRpbmcgY2xhc3MuIEBzdGFibGUgSUNVIDIuMCovCi0gICAgRm9y
d2FyZENoYXJhY3Rlckl0ZXJhdG9yKCk7Ci0gICAgCi0gICAgLyoqIENvcHkgY29uc3RydWN0b3Ig
dG8gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgaW1wbGVtZW50aW5nIGNsYXNzLiBAc3RhYmxlIElDVSAy
LjAqLwotICAgIEZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvcihjb25zdCBGb3J3YXJkQ2hhcmFjdGVy
SXRlcmF0b3IgJm90aGVyKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBBc3NpZ25tZW50IG9wZXJh
dG9yIHRvIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGltcGxlbWVudGluZyBjbGFzcy4KLSAgICAgKiBA
c3RhYmxlIElDVSAyLjAKLSAgICAgKi8KLSAgICBGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3IgJm9w
ZXJhdG9yPShjb25zdCBGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3ImKSB7IHJldHVybiAqdGhpczsg
fQotfTsKLQotLyoqCi0gKiBBYnN0cmFjdCBjbGFzcyB0aGF0IGRlZmluZXMgYW4gQVBJIGZvciBp
dGVyYXRpb24KLSAqIG9uIHRleHQgb2JqZWN0cy4KLSAqIFRoaXMgaXMgYW4gaW50ZXJmYWNlIGZv
ciBmb3J3YXJkIGFuZCBiYWNrd2FyZCBpdGVyYXRpb24KLSAqIGFuZCByYW5kb20gYWNjZXNzIGlu
dG8gYSB0ZXh0IG9iamVjdC4KLSAqCi0gKiA8cD5UaGUgQVBJIHByb3ZpZGVzIGJhY2t3YXJkIGNv
bXBhdGliaWxpdHkgdG8gdGhlIEphdmEgYW5kIG9sZGVyIElDVQotICogQ2hhcmFjdGVySXRlcmF0
b3IgY2xhc3NlcyBidXQgZXh0ZW5kcyB0aGVtIHNpZ25pZmljYW50bHk6Ci0gKiA8b2w+Ci0gKiA8
bGk+Q2hhcmFjdGVySXRlcmF0b3IgaXMgbm93IGEgc3ViY2xhc3Mgb2YgRm9yd2FyZENoYXJhY3Rl
ckl0ZXJhdG9yLjwvbGk+Ci0gKiA8bGk+V2hpbGUgdGhlIG9sZCBBUEkgZnVuY3Rpb25zIHByb3Zp
ZGVkIGZvcndhcmQgaXRlcmF0aW9uIHdpdGgKLSAqICAgICAicHJlLWluY3JlbWVudCIgc2VtYW50
aWNzLCB0aGUgbmV3IG9uZSBhbHNvIHByb3ZpZGVzIGZ1bmN0aW9ucwotICogICAgIHdpdGggInBv
c3QtaW5jcmVtZW50IiBzZW1hbnRpY3MuIFRoZXkgYXJlIG1vcmUgZWZmaWNpZW50IGFuZCBzaG91
bGQKLSAqICAgICBiZSB0aGUgcHJlZmVycmVkIGl0ZXJhdG9yIGZ1bmN0aW9ucyBmb3IgbmV3IGlt
cGxlbWVudGF0aW9ucy4KLSAqICAgICBUaGUgYmFja3dhcmQgaXRlcmF0aW9uIGFsd2F5cyBoYWQg
InByZS1kZWNyZW1lbnQiIHNlbWFudGljcywgd2hpY2gKLSAqICAgICBhcmUgZWZmaWNpZW50Ljwv
bGk+Ci0gKiA8bGk+SnVzdCBsaWtlIEZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvciwgaXQgcHJvdmlk
ZXMgYWNjZXNzIHRvCi0gKiAgICAgYm90aCBjb2RlIHVuaXRzIGFuZCBjb2RlIHBvaW50cy4gQ29k
ZSBwb2ludCBhY2Nlc3MgdmVyc2lvbnMgYXJlIGF2YWlsYWJsZQotICogICAgIGZvciB0aGUgb2xk
IGFuZCB0aGUgbmV3IGl0ZXJhdGlvbiBzZW1hbnRpY3MuPC9saT4KLSAqIDxsaT5UaGVyZSBhcmUg
bmV3IGZ1bmN0aW9ucyBmb3Igc2V0dGluZyBhbmQgbW92aW5nIHRoZSBjdXJyZW50IHBvc2l0aW9u
Ci0gKiAgICAgd2l0aG91dCByZXR1cm5pbmcgYSBjaGFyYWN0ZXIsIGZvciBlZmZpY2llbmN5Ljwv
bGk+Ci0gKiA8L29sPgotICoKLSAqIFNlZSBGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3IgZm9yIGV4
YW1wbGVzIGZvciB1c2luZyB0aGUgbmV3IGZvcndhcmQgaXRlcmF0aW9uCi0gKiBmdW5jdGlvbnMu
IEZvciBiYWNrd2FyZCBpdGVyYXRpb24sIHRoZXJlIGlzIGFsc28gYSBoYXNQcmV2aW91cygpIGZ1
bmN0aW9uCi0gKiB0aGF0IGNhbiBiZSB1c2VkIGFuYWxvZ291c2x5IHRvIGhhc05leHQoKS4KLSAq
IFRoZSBvbGQgZnVuY3Rpb25zIHdvcmsgYXMgYmVmb3JlIGFuZCBhcmUgc2hvd24gYmVsb3cuPC9w
PgotICoKLSAqIDxwPkV4YW1wbGVzIGZvciBzb21lIG9mIHRoZSBuZXcgZnVuY3Rpb25zOjwvcD4K
LSAqCi0gKiBGb3J3YXJkIGl0ZXJhdGlvbiB3aXRoIGhhc05leHQoKToKLSAqIFxjb2RlCi0gKiB2
b2lkIGZvcndhcmQxKENoYXJhY3Rlckl0ZXJhdG9yICZpdCkgewotICogICAgIFVDaGFyMzIgYzsK
LSAqICAgICBmb3IoaXQuc2V0VG9TdGFydCgpOyBpdC5oYXNOZXh0KCk7KSB7Ci0gKiAgICAgICAg
IGM9aXQubmV4dDMyUG9zdEluYygpOwotICogICAgICAgICAvLyB1c2UgYwotICogICAgIH0KLSAq
ICB9Ci0gKiBcZW5kY29kZQotICogRm9yd2FyZCBpdGVyYXRpb24gbW9yZSBzaW1pbGFyIHRvIGxv
b3BzIHdpdGggdGhlIG9sZCBmb3J3YXJkIGl0ZXJhdGlvbiwKLSAqIHNob3dpbmcgYSB3YXkgdG8g
Y29udmVydCBzaW1wbGUgZm9yKCkgbG9vcHM6Ci0gKiBcY29kZQotICogdm9pZCBmb3J3YXJkMihD
aGFyYWN0ZXJJdGVyYXRvciAmaXQpIHsKLSAqICAgICBVQ2hhciBjOwotICogICAgIGZvcihjPWl0
LmZpcnN0UG9zdEluYygpOyBjIT1DaGFyYWN0ZXJJdGVyYXRvcjo6RE9ORTsgYz1pdC5uZXh0UG9z
dEluYygpKSB7Ci0gKiAgICAgICAgICAvLyB1c2UgYwotICogICAgICB9Ci0gKiB9Ci0gKiBcZW5k
Y29kZQotICogQmFja3dhcmQgaXRlcmF0aW9uIHdpdGggc2V0VG9FbmQoKSBhbmQgaGFzUHJldmlv
dXMoKToKLSAqIFxjb2RlCi0gKiAgdm9pZCBiYWNrd2FyZDEoQ2hhcmFjdGVySXRlcmF0b3IgJml0
KSB7Ci0gKiAgICAgIFVDaGFyMzIgYzsKLSAqICAgICAgZm9yKGl0LnNldFRvRW5kKCk7IGl0Lmhh
c1ByZXZpb3VzKCk7KSB7Ci0gKiAgICAgICAgIGM9aXQucHJldmlvdXMzMigpOwotICogICAgICAg
ICAgLy8gdXNlIGMKLSAqICAgICAgfQotICogIH0KLSAqIFxlbmRjb2RlCi0gKiBCYWNrd2FyZCBp
dGVyYXRpb24gd2l0aCBhIG1vcmUgdHJhZGl0aW9uYWwgZm9yKCkgbG9vcDoKLSAqIFxjb2RlCi0g
KiB2b2lkIGJhY2t3YXJkMihDaGFyYWN0ZXJJdGVyYXRvciAmaXQpIHsKLSAqICAgICBVQ2hhciBj
OwotICogICAgIGZvcihjPWl0Lmxhc3QoKTsgYyE9Q2hhcmFjdGVySXRlcmF0b3I6OkRPTkU7IGM9
aXQucHJldmlvdXMoKSkgewotICogICAgICAgICAvLyB1c2UgYwotICogICAgICB9Ci0gKiAgfQot
ICogXGVuZGNvZGUKLSAqCi0gKiBFeGFtcGxlIGZvciByYW5kb20gYWNjZXNzOgotICogXGNvZGUK
LSAqICB2b2lkIHJhbmRvbShDaGFyYWN0ZXJJdGVyYXRvciAmaXQpIHsKLSAqICAgICAgLy8gc2V0
IHRvIHRoZSB0aGlyZCBjb2RlIHBvaW50IGZyb20gdGhlIGJlZ2lubmluZwotICogICAgICBpdC5t
b3ZlMzIoMywgQ2hhcmFjdGVySXRlcmF0b3I6OmtTdGFydCk7Ci0gKiAgICAgIC8vIGdldCBhIGNv
ZGUgcG9pbnQgZnJvbSBoZXJlIHdpdGhvdXQgbW92aW5nIHRoZSBwb3NpdGlvbgotICogICAgICBV
Q2hhcjMyIGM9aXQuY3VycmVudDMyKCk7Ci0gKiAgICAgIC8vIGdldCB0aGUgcG9zaXRpb24KLSAq
ICAgICAgaW50MzJfdCBwb3M9aXQuZ2V0SW5kZXgoKTsKLSAqICAgICAgLy8gZ2V0IHRoZSBwcmV2
aW91cyBjb2RlIHVuaXQKLSAqICAgICAgVUNoYXIgdT1pdC5wcmV2aW91cygpOwotICogICAgICAv
LyBtb3ZlIGJhY2sgb25lIG1vcmUgY29kZSB1bml0Ci0gKiAgICAgIGl0Lm1vdmUoLTEsIENoYXJh
Y3Rlckl0ZXJhdG9yOjprQ3VycmVudCk7Ci0gKiAgICAgIC8vIHNldCB0aGUgcG9zaXRpb24gYmFj
ayB0byB3aGVyZSBpdCB3YXMKLSAqICAgICAgLy8gYW5kIHJlYWQgdGhlIHNhbWUgY29kZSBwb2lu
dCBjIGFuZCBtb3ZlIGJleW9uZCBpdAotICogICAgICBpdC5zZXRJbmRleChwb3MpOwotICogICAg
ICBpZihjIT1pdC5uZXh0MzJQb3N0SW5jKCkpIHsKLSAqICAgICAgICAgIGV4aXQoMSk7IC8vIENo
YXJhY3Rlckl0ZXJhdG9yIGluY29uc2lzdGVudAotICogICAgICB9Ci0gKiAgfQotICogXGVuZGNv
ZGUKLSAqCi0gKiA8cD5FeGFtcGxlcywgZXNwZWNpYWxseSBmb3IgdGhlIG9sZCBBUEk6PC9wPgot
ICoKLSAqIEZ1bmN0aW9uIHByb2Nlc3NpbmcgY2hhcmFjdGVycywgaW4gdGhpcyBleGFtcGxlIHNp
bXBsZSBvdXRwdXQKLSAqIDxwcmU+Ci0gKiBcY29kZQotICogIHZvaWQgcHJvY2Vzc0NoYXIoIFVD
aGFyIGMgKQotICogIHsKLSAqICAgICAgY291dCA8PCAiICIgPDwgYzsKLSAqICB9Ci0gKiBcZW5k
Y29kZQotICogPC9wcmU+Ci0gKiBUcmF2ZXJzZSB0aGUgdGV4dCBmcm9tIHN0YXJ0IHRvIGZpbmlz
aAotICogPHByZT4gCi0gKiBcY29kZQotICogIHZvaWQgdHJhdmVyc2VGb3J3YXJkKENoYXJhY3Rl
ckl0ZXJhdG9yJiBpdGVyKQotICogIHsKLSAqICAgICAgZm9yKFVDaGFyIGMgPSBpdGVyLmZpcnN0
KCk7IGMgIT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORTsgYyA9IGl0ZXIubmV4dCgpKSB7Ci0gKiAg
ICAgICAgICBwcm9jZXNzQ2hhcihjKTsKLSAqICAgICAgfQotICogIH0KLSAqIFxlbmRjb2RlCi0g
KiA8L3ByZT4KLSAqIFRyYXZlcnNlIHRoZSB0ZXh0IGJhY2t3YXJkcywgZnJvbSBlbmQgdG8gc3Rh
cnQKLSAqIDxwcmU+Ci0gKiBcY29kZQotICogIHZvaWQgdHJhdmVyc2VCYWNrd2FyZChDaGFyYWN0
ZXJJdGVyYXRvciYgaXRlcikKLSAqICB7Ci0gKiAgICAgIGZvcihVQ2hhciBjID0gaXRlci5sYXN0
KCk7IGMgIT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORTsgYyA9IGl0ZXIucHJldmlvdXMoKSkgewot
ICogICAgICAgICAgcHJvY2Vzc0NoYXIoYyk7Ci0gKiAgICAgIH0KLSAqICB9Ci0gKiBcZW5kY29k
ZQotICogPC9wcmU+Ci0gKiBUcmF2ZXJzZSBib3RoIGZvcndhcmQgYW5kIGJhY2t3YXJkIGZyb20g
YSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgdGV4dC4gCi0gKiBDYWxscyB0byBub3RCb3VuZGFyeSgp
IGluIHRoaXMgZXhhbXBsZSByZXByZXNlbnRzIHNvbWUgYWRkaXRpb25hbCBzdG9wcGluZyBjcml0
ZXJpYS4KLSAqIDxwcmU+Ci0gKiBcY29kZQotICogdm9pZCB0cmF2ZXJzZU91dChDaGFyYWN0ZXJJ
dGVyYXRvciYgaXRlciwgaW50MzJfdCBwb3MpCi0gKiB7Ci0gKiAgICAgIFVDaGFyIGM7Ci0gKiAg
ICAgIGZvciAoYyA9IGl0ZXIuc2V0SW5kZXgocG9zKTsKLSAqICAgICAgYyAhPSBDaGFyYWN0ZXJJ
dGVyYXRvci5ET05FICYmIChVbmljb2RlOjppc0xldHRlcihjKSB8fCBVbmljb2RlOjppc0RpZ2l0
KGMpKTsKLSAqICAgICAgICAgIGMgPSBpdGVyLm5leHQoKSkge30KLSAqICAgICAgaW50MzJfdCBl
bmQgPSBpdGVyLmdldEluZGV4KCk7Ci0gKiAgICAgIGZvciAoYyA9IGl0ZXIuc2V0SW5kZXgocG9z
KTsKLSAqICAgICAgICAgIGMgIT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSAmJiAoVW5pY29kZTo6
aXNMZXR0ZXIoYykgfHwgVW5pY29kZTo6aXNEaWdpdChjKSk7Ci0gKiAgICAgICAgICBjID0gaXRl
ci5wcmV2aW91cygpKSB7fQotICogICAgICBpbnQzMl90IHN0YXJ0ID0gaXRlci5nZXRJbmRleCgp
ICsgMTsKLSAqICAKLSAqICAgICAgY291dCA8PCAic3RhcnQ6ICIgPDwgc3RhcnQgPDwgIiBlbmQ6
ICIgPDwgZW5kIDw8IGVuZGw7Ci0gKiAgICAgIGZvciAoYyA9IGl0ZXIuc2V0SW5kZXgoc3RhcnQp
OyBpdGVyLmdldEluZGV4KCkgPCBlbmQ7IGMgPSBpdGVyLm5leHQoKSApIHsKLSAqICAgICAgICAg
IHByb2Nlc3NDaGFyKGMpOwotICogICAgIH0KLSAqICB9Ci0gKiBcZW5kY29kZQotICogPC9wcmU+
Ci0gKiBDcmVhdGluZyBhIFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIGFuZCBjYWxsaW5nIHRoZSB0
ZXN0IGZ1bmN0aW9ucwotICogPHByZT4KLSAqIFxjb2RlCi0gKiAgdm9pZCBDaGFyYWN0ZXJJdGVy
YXRvcl9FeGFtcGxlKCB2b2lkICkKLSAqICAgewotICogICAgICAgY291dCA8PCBlbmRsIDw8ICI9
PT09PSBDaGFyYWN0ZXJJdGVyYXRvcl9FeGFtcGxlOiA9PT09PSIgPDwgZW5kbDsKLSAqICAgICAg
IFVuaWNvZGVTdHJpbmcgdGV4dCgiRWluIGtsZWluZXIgU2F0ei4iKTsKLSAqICAgICAgIFN0cmlu
Z0NoYXJhY3Rlckl0ZXJhdG9yIGl0ZXJhdG9yKHRleHQpOwotICogICAgICAgY291dCA8PCAiLS0t
LS0gdHJhdmVyc2VGb3J3YXJkOiAtLS0tLS0tLS0tLSIgPDwgZW5kbDsKLSAqICAgICAgIHRyYXZl
cnNlRm9yd2FyZCggaXRlcmF0b3IgKTsKLSAqICAgICAgIGNvdXQgPDwgZW5kbCA8PCBlbmRsIDw8
ICItLS0tLSB0cmF2ZXJzZUJhY2t3YXJkOiAtLS0tLS0tLS0tIiA8PCBlbmRsOwotICogICAgICAg
dHJhdmVyc2VCYWNrd2FyZCggaXRlcmF0b3IgKTsKLSAqICAgICAgIGNvdXQgPDwgZW5kbCA8PCBl
bmRsIDw8ICItLS0tLSB0cmF2ZXJzZU91dDogLS0tLS0tLS0tLS0tLS0tIiA8PCBlbmRsOwotICog
ICAgICAgdHJhdmVyc2VPdXQoIGl0ZXJhdG9yLCA3ICk7Ci0gKiAgICAgICBjb3V0IDw8IGVuZGwg
PDwgZW5kbCA8PCAiLS0tLS0iIDw8IGVuZGw7Ci0gKiAgIH0KLSAqIFxlbmRjb2RlCi0gKiA8L3By
ZT4KLSAqCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotY2xhc3MgVV9DT01NT05fQVBJIENoYXJh
Y3Rlckl0ZXJhdG9yIDogcHVibGljIEZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvciB7Ci1wdWJsaWM6
Ci0gICAgLyoqCi0gICAgICogT3JpZ2luIGVudW1lcmF0aW9uIGZvciB0aGUgbW92ZSgpIGFuZCBt
b3ZlMzIoKSBmdW5jdGlvbnMuCi0gICAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAgICovCi0gICAg
ZW51bSBFT3JpZ2luIHsga1N0YXJ0LCBrQ3VycmVudCwga0VuZCB9OwotCi0gICAgLyoqCi0gICAg
ICogRGVzdHJ1Y3Rvci4KLSAgICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICAgKi8KLSAgICB2aXJ0
dWFsIH5DaGFyYWN0ZXJJdGVyYXRvcigpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHBv
aW50ZXIgdG8gYSBuZXcgQ2hhcmFjdGVySXRlcmF0b3Igb2YgdGhlIHNhbWUKLSAgICAgKiBjb25j
cmV0ZSBjbGFzcyBhcyB0aGlzIG9uZSwgYW5kIHJlZmVycmluZyB0byB0aGUgc2FtZQotICAgICAq
IGNoYXJhY3RlciBpbiB0aGUgc2FtZSB0ZXh0LXN0b3JhZ2Ugb2JqZWN0IGFzIHRoaXMgb25lLiAg
VGhlCi0gICAgICogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZWxldGluZyB0aGUgbmV3IGNs
b25lLiAgCi0gICAgICogQHJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXcgQ2hhcmFjdGVySXRlcmF0
b3IKLSAgICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICAgKi8KLSAgICB2aXJ0dWFsIENoYXJhY3Rl
ckl0ZXJhdG9yKiBjbG9uZSh2b2lkKSBjb25zdCA9IDA7Ci0KLSAgICAvKioKLSAgICAgKiBTZXRz
IHRoZSBpdGVyYXRvciB0byByZWZlciB0byB0aGUgZmlyc3QgY29kZSB1bml0IGluIGl0cwotICAg
ICAqIGl0ZXJhdGlvbiByYW5nZSwgYW5kIHJldHVybnMgdGhhdCBjb2RlIHVuaXQuCi0gICAgICog
VGhpcyBjYW4gYmUgdXNlZCB0byBiZWdpbiBhbiBpdGVyYXRpb24gd2l0aCBuZXh0KCkuCi0gICAg
ICogQHJldHVybiB0aGUgZmlyc3QgY29kZSB1bml0IGluIGl0cyBpdGVyYXRpb24gcmFuZ2UuCi0g
ICAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAgICovCi0gICAgdmlydHVhbCBVQ2hhciAgICAgICAg
IGZpcnN0KHZvaWQpID0gMDsKLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIGl0ZXJhdG9yIHRv
IHJlZmVyIHRvIHRoZSBmaXJzdCBjb2RlIHVuaXQgaW4gaXRzCi0gICAgICogaXRlcmF0aW9uIHJh
bmdlLCByZXR1cm5zIHRoYXQgY29kZSB1bml0LCBhbmQgbW92ZXMgdGhlIHBvc2l0aW9uCi0gICAg
ICogdG8gdGhlIHNlY29uZCBjb2RlIHVuaXQuIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gc2V0
VG9TdGFydCgpCi0gICAgICogZm9yIGZvcndhcmQgaXRlcmF0aW9uIHdpdGggbmV4dFBvc3RJbmMo
KS4KLSAgICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBjb2RlIHVuaXQgaW4gaXRzIGl0ZXJhdGlvbiBy
YW5nZS4KLSAgICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICAgKi8KLSAgICB2aXJ0dWFsIFVDaGFy
ICAgICAgICAgZmlyc3RQb3N0SW5jKHZvaWQpOwotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUg
aXRlcmF0b3IgdG8gcmVmZXIgdG8gdGhlIGZpcnN0IGNvZGUgcG9pbnQgaW4gaXRzCi0gICAgICog
aXRlcmF0aW9uIHJhbmdlLCBhbmQgcmV0dXJucyB0aGF0IGNvZGUgdW5pdCwKLSAgICAgKiBUaGlz
IGNhbiBiZSB1c2VkIHRvIGJlZ2luIGFuIGl0ZXJhdGlvbiB3aXRoIG5leHQzMigpLgotICAgICAq
IE5vdGUgdGhhdCBhbiBpdGVyYXRpb24gd2l0aCBuZXh0MzJQb3N0SW5jKCksIGJlZ2lubmluZyB3
aXRoLAotICAgICAqIGUuZy4sIHNldFRvU3RhcnQoKSBvciBmaXJzdFBvc3RJbmMoKSwgaXMgbW9y
ZSBlZmZpY2llbnQuCi0gICAgICogQHJldHVybiB0aGUgZmlyc3QgY29kZSBwb2ludCBpbiBpdHMg
aXRlcmF0aW9uIHJhbmdlLgotICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAgICAqLwotICAgIHZp
cnR1YWwgVUNoYXIzMiAgICAgICBmaXJzdDMyKHZvaWQpID0gMDsKLQotICAgIC8qKgotICAgICAq
IFNldHMgdGhlIGl0ZXJhdG9yIHRvIHJlZmVyIHRvIHRoZSBmaXJzdCBjb2RlIHBvaW50IGluIGl0
cwotICAgICAqIGl0ZXJhdGlvbiByYW5nZSwgcmV0dXJucyB0aGF0IGNvZGUgcG9pbnQsIGFuZCBt
b3ZlcyB0aGUgcG9zaXRpb24KLSAgICAgKiB0byB0aGUgc2Vjb25kIGNvZGUgcG9pbnQuIFRoaXMg
aXMgYW4gYWx0ZXJuYXRpdmUgdG8gc2V0VG9TdGFydCgpCi0gICAgICogZm9yIGZvcndhcmQgaXRl
cmF0aW9uIHdpdGggbmV4dDMyUG9zdEluYygpLgotICAgICAqIEByZXR1cm4gdGhlIGZpcnN0IGNv
ZGUgcG9pbnQgaW4gaXRzIGl0ZXJhdGlvbiByYW5nZS4KLSAgICAgKiBAc3RhYmxlIElDVSAyLjAK
LSAgICAgKi8KLSAgICB2aXJ0dWFsIFVDaGFyMzIgICAgICAgZmlyc3QzMlBvc3RJbmModm9pZCk7
Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBpdGVyYXRvciB0byByZWZlciB0byB0aGUgZmly
c3QgY29kZSB1bml0IG9yIGNvZGUgcG9pbnQgaW4gaXRzCi0gICAgICogaXRlcmF0aW9uIHJhbmdl
LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGJlZ2luIGEgZm9yd2FyZAotICAgICAqIGl0ZXJhdGlvbiB3
aXRoIG5leHRQb3N0SW5jKCkgb3IgbmV4dDMyUG9zdEluYygpLgotICAgICAqIEByZXR1cm4gdGhl
IHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBpdGVyYXRpb24gcmFuZ2UKLSAgICAgKiBAc3RhYmxlIElD
VSAyLjAKLSAgICAgKi8KLSAgICBpbmxpbmUgaW50MzJfdCAgICBzZXRUb1N0YXJ0KCk7Ci0KLSAg
ICAvKioKLSAgICAgKiBTZXRzIHRoZSBpdGVyYXRvciB0byByZWZlciB0byB0aGUgbGFzdCBjb2Rl
IHVuaXQgaW4gaXRzCi0gICAgICogaXRlcmF0aW9uIHJhbmdlLCBhbmQgcmV0dXJucyB0aGF0IGNv
ZGUgdW5pdC4KLSAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGJlZ2luIGFuIGl0ZXJhdGlvbiB3
aXRoIHByZXZpb3VzKCkuCi0gICAgICogQHJldHVybiB0aGUgbGFzdCBjb2RlIHVuaXQuCi0gICAg
ICogQHN0YWJsZSBJQ1UgMi4wCi0gICAgICovCi0gICAgdmlydHVhbCBVQ2hhciAgICAgICAgIGxh
c3Qodm9pZCkgPSAwOwotICAgICAgICAKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBpdGVyYXRv
ciB0byByZWZlciB0byB0aGUgbGFzdCBjb2RlIHBvaW50IGluIGl0cwotICAgICAqIGl0ZXJhdGlv
biByYW5nZSwgYW5kIHJldHVybnMgdGhhdCBjb2RlIHVuaXQuCi0gICAgICogVGhpcyBjYW4gYmUg
dXNlZCB0byBiZWdpbiBhbiBpdGVyYXRpb24gd2l0aCBwcmV2aW91czMyKCkuCi0gICAgICogQHJl
dHVybiB0aGUgbGFzdCBjb2RlIHBvaW50LgotICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAgICAq
LwotICAgIHZpcnR1YWwgVUNoYXIzMiAgICAgICBsYXN0MzIodm9pZCkgPSAwOwotCi0gICAgLyoq
Ci0gICAgICogU2V0cyB0aGUgaXRlcmF0b3IgdG8gdGhlIGVuZCBvZiBpdHMgaXRlcmF0aW9uIHJh
bmdlLCBqdXN0IGJlaGluZAotICAgICAqIHRoZSBsYXN0IGNvZGUgdW5pdCBvciBjb2RlIHBvaW50
LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGJlZ2luIGEgYmFja3dhcmQKLSAgICAgKiBpdGVyYXRpb24g
d2l0aCBwcmV2aW91cygpIG9yIHByZXZpb3VzMzIoKS4KLSAgICAgKiBAcmV0dXJuIHRoZSBlbmQg
cG9zaXRpb24gb2YgdGhlIGl0ZXJhdGlvbiByYW5nZQotICAgICAqIEBzdGFibGUgSUNVIDIuMAot
ICAgICAqLwotICAgIGlubGluZSBpbnQzMl90ICAgIHNldFRvRW5kKCk7Ci0KLSAgICAvKioKLSAg
ICAgKiBTZXRzIHRoZSBpdGVyYXRvciB0byByZWZlciB0byB0aGUgInBvc2l0aW9uIi10aCBjb2Rl
IHVuaXQKLSAgICAgKiBpbiB0aGUgdGV4dC1zdG9yYWdlIG9iamVjdCB0aGUgaXRlcmF0b3IgcmVm
ZXJzIHRvLCBhbmQKLSAgICAgKiByZXR1cm5zIHRoYXQgY29kZSB1bml0LiAgCi0gICAgICogQHBh
cmFtIHBvc2l0aW9uIHRoZSAicG9zaXRpb24iLXRoIGNvZGUgdW5pdCBpbiB0aGUgdGV4dC1zdG9y
YWdlIG9iamVjdAotICAgICAqIEByZXR1cm4gdGhlICJwb3NpdGlvbiItdGggY29kZSB1bml0Lgot
ICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAgICAqLwotICAgIHZpcnR1YWwgVUNoYXIgICAgICAg
ICBzZXRJbmRleChpbnQzMl90IHBvc2l0aW9uKSA9IDA7Ci0KLSAgICAvKioKLSAgICAgKiBTZXRz
IHRoZSBpdGVyYXRvciB0byByZWZlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb2RlIHBvaW50
Ci0gICAgICogdGhhdCBjb250YWlucyB0aGUgInBvc2l0aW9uIi10aCBjb2RlIHVuaXQKLSAgICAg
KiBpbiB0aGUgdGV4dC1zdG9yYWdlIG9iamVjdCB0aGUgaXRlcmF0b3IgcmVmZXJzIHRvLCBhbmQK
LSAgICAgKiByZXR1cm5zIHRoYXQgY29kZSBwb2ludC4KLSAgICAgKiBUaGUgY3VycmVudCBwb3Np
dGlvbiBpcyBhZGp1c3RlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb2RlIHBvaW50Ci0gICAg
ICogKGl0cyBmaXJzdCBjb2RlIHVuaXQpLgotICAgICAqIEBwYXJhbSBwb3NpdGlvbiB0aGUgInBv
c2l0aW9uIi10aCBjb2RlIHVuaXQgaW4gdGhlIHRleHQtc3RvcmFnZSBvYmplY3QKLSAgICAgKiBA
cmV0dXJuIHRoZSAicG9zaXRpb24iLXRoIGNvZGUgcG9pbnQuCi0gICAgICogQHN0YWJsZSBJQ1Ug
Mi4wCi0gICAgICovCi0gICAgdmlydHVhbCBVQ2hhcjMyICAgICAgIHNldEluZGV4MzIoaW50MzJf
dCBwb3NpdGlvbikgPSAwOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY29kZSB1bml0
IHRoZSBpdGVyYXRvciBjdXJyZW50bHkgcmVmZXJzIHRvLiAKLSAgICAgKiBAcmV0dXJuIHRoZSBj
dXJyZW50IGNvZGUgdW5pdC4gCi0gICAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAgICovCi0gICAg
dmlydHVhbCBVQ2hhciAgICAgICAgIGN1cnJlbnQodm9pZCkgY29uc3QgPSAwOwotICAgICAgICAK
LSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjb2RlIHBvaW50IHRoZSBpdGVyYXRvciBjdXJy
ZW50bHkgcmVmZXJzIHRvLiAgCi0gICAgICogQHJldHVybiB0aGUgY3VycmVudCBjb2RlIHBvaW50
LgotICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAgICAqLwotICAgIHZpcnR1YWwgVUNoYXIzMiAg
ICAgICBjdXJyZW50MzIodm9pZCkgY29uc3QgPSAwOwotICAgICAgICAKLSAgICAvKioKLSAgICAg
KiBBZHZhbmNlcyB0byB0aGUgbmV4dCBjb2RlIHVuaXQgaW4gdGhlIGl0ZXJhdGlvbiByYW5nZQot
ICAgICAqICh0b3dhcmQgZW5kSW5kZXgoKSksIGFuZCByZXR1cm5zIHRoYXQgY29kZSB1bml0LiAg
SWYgdGhlcmUgYXJlCi0gICAgICogbm8gbW9yZSBjb2RlIHVuaXRzIHRvIHJldHVybiwgcmV0dXJu
cyBET05FLgotICAgICAqIEByZXR1cm4gdGhlIG5leHQgY29kZSB1bml0LgotICAgICAqIEBzdGFi
bGUgSUNVIDIuMAotICAgICAqLwotICAgIHZpcnR1YWwgVUNoYXIgICAgICAgICBuZXh0KHZvaWQp
ID0gMDsKLSAgICAgICAgCi0gICAgLyoqCi0gICAgICogQWR2YW5jZXMgdG8gdGhlIG5leHQgY29k
ZSBwb2ludCBpbiB0aGUgaXRlcmF0aW9uIHJhbmdlCi0gICAgICogKHRvd2FyZCBlbmRJbmRleCgp
KSwgYW5kIHJldHVybnMgdGhhdCBjb2RlIHBvaW50LiAgSWYgdGhlcmUgYXJlCi0gICAgICogbm8g
bW9yZSBjb2RlIHBvaW50cyB0byByZXR1cm4sIHJldHVybnMgRE9ORS4KLSAgICAgKiBOb3RlIHRo
YXQgaXRlcmF0aW9uIHdpdGggInByZS1pbmNyZW1lbnQiIHNlbWFudGljcyBpcyBsZXNzCi0gICAg
ICogZWZmaWNpZW50IHRoYW4gaXRlcmF0aW9uIHdpdGggInBvc3QtaW5jcmVtZW50IiBzZW1hbnRp
Y3MKLSAgICAgKiB0aGF0IGlzIHByb3ZpZGVkIGJ5IG5leHQzMlBvc3RJbmMoKS4KLSAgICAgKiBA
cmV0dXJuIHRoZSBuZXh0IGNvZGUgcG9pbnQuCi0gICAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAg
ICovCi0gICAgdmlydHVhbCBVQ2hhcjMyICAgICAgIG5leHQzMih2b2lkKSA9IDA7Ci0gICAgICAg
IAotICAgIC8qKgotICAgICAqIEFkdmFuY2VzIHRvIHRoZSBwcmV2aW91cyBjb2RlIHVuaXQgaW4g
dGhlIGl0ZXJhdGlvbiByYW5nZQotICAgICAqICh0b3dhcmQgc3RhcnRJbmRleCgpKSwgYW5kIHJl
dHVybnMgdGhhdCBjb2RlIHVuaXQuICBJZiB0aGVyZSBhcmUKLSAgICAgKiBubyBtb3JlIGNvZGUg
dW5pdHMgdG8gcmV0dXJuLCByZXR1cm5zIERPTkUuICAKLSAgICAgKiBAcmV0dXJuIHRoZSBwcmV2
aW91cyBjb2RlIHVuaXQuCi0gICAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAgICovCi0gICAgdmly
dHVhbCBVQ2hhciAgICAgICAgIHByZXZpb3VzKHZvaWQpID0gMDsKLQotICAgIC8qKgotICAgICAq
IEFkdmFuY2VzIHRvIHRoZSBwcmV2aW91cyBjb2RlIHBvaW50IGluIHRoZSBpdGVyYXRpb24gcmFu
Z2UKLSAgICAgKiAodG93YXJkIHN0YXJ0SW5kZXgoKSksIGFuZCByZXR1cm5zIHRoYXQgY29kZSBw
b2ludC4gIElmIHRoZXJlIGFyZQotICAgICAqIG5vIG1vcmUgY29kZSBwb2ludHMgdG8gcmV0dXJu
LCByZXR1cm5zIERPTkUuIAotICAgICAqIEByZXR1cm4gdGhlIHByZXZpb3VzIGNvZGUgcG9pbnQu
IAotICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAgICAqLwotICAgIHZpcnR1YWwgVUNoYXIzMiAg
ICAgICBwcmV2aW91czMyKHZvaWQpID0gMDsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgRkFM
U0UgaWYgdGhlcmUgYXJlIG5vIG1vcmUgY29kZSB1bml0cyBvciBjb2RlIHBvaW50cwotICAgICAq
IGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgaXRlcmF0aW9uIHJhbmdlLgotICAg
ICAqIFRoaXMgaXMgdXNlZCB3aXRoIHByZXZpb3VzKCkgb3IgcHJldmlvdXMzMigpIGluIGJhY2t3
YXJkCi0gICAgICogaXRlcmF0aW9uLgotICAgICAqIEByZXR1cm4gRkFMU0UgaWYgdGhlcmUgYXJl
IG5vIG1vcmUgY29kZSB1bml0cyBvciBjb2RlIHBvaW50cwotICAgICAqIGJlZm9yZSB0aGUgY3Vy
cmVudCBwb3NpdGlvbiBpbiB0aGUgaXRlcmF0aW9uIHJhbmdlLCByZXR1cm4gVFJVRSBvdGhlcndp
c2UuCi0gICAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAgICovCi0gICAgdmlydHVhbCBVQm9vbCAg
ICAgICAgaGFzUHJldmlvdXMoKSA9IDA7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBu
dW1lcmljIGluZGV4IGluIHRoZSB1bmRlcmx5aW5nIHRleHQtc3RvcmFnZQotICAgICAqIG9iamVj
dCBvZiB0aGUgY2hhcmFjdGVyIHJldHVybmVkIGJ5IGZpcnN0KCkuICBTaW5jZSBpdCdzCi0gICAg
ICogcG9zc2libGUgdG8gY3JlYXRlIGFuIGl0ZXJhdG9yIHRoYXQgaXRlcmF0ZXMgYWNyb3NzIG9u
bHkKLSAgICAgKiBwYXJ0IG9mIGEgdGV4dC1zdG9yYWdlIG9iamVjdCwgdGhpcyBudW1iZXIgaXNu
J3QKLSAgICAgKiBuZWNlc3NhcmlseSAwLiAgCi0gICAgICogQHJldHVybnMgdGhlIG51bWVyaWMg
aW5kZXggaW4gdGhlIHVuZGVybHlpbmcgdGV4dC1zdG9yYWdlCi0gICAgICogb2JqZWN0IG9mIHRo
ZSBjaGFyYWN0ZXIgcmV0dXJuZWQgYnkgZmlyc3QoKS4KLSAgICAgKiBAc3RhYmxlIElDVSAyLjAK
LSAgICAgKi8KLSAgICBpbmxpbmUgaW50MzJfdCAgICAgICBzdGFydEluZGV4KHZvaWQpIGNvbnN0
OwotICAgICAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBudW1lcmljIGluZGV4IGlu
IHRoZSB1bmRlcmx5aW5nIHRleHQtc3RvcmFnZQotICAgICAqIG9iamVjdCBvZiB0aGUgcG9zaXRp
b24gaW1tZWRpYXRlbHkgQkVZT05EIHRoZSBjaGFyYWN0ZXIKLSAgICAgKiByZXR1cm5lZCBieSBs
YXN0KCkuICAKLSAgICAgKiBAcmV0dXJuIHRoZSBudW1lcmljIGluZGV4IGluIHRoZSB1bmRlcmx5
aW5nIHRleHQtc3RvcmFnZQotICAgICAqIG9iamVjdCBvZiB0aGUgcG9zaXRpb24gaW1tZWRpYXRl
bHkgQkVZT05EIHRoZSBjaGFyYWN0ZXIKLSAgICAgKiByZXR1cm5lZCBieSBsYXN0KCkuCi0gICAg
ICogQHN0YWJsZSBJQ1UgMi4wCi0gICAgICovCi0gICAgaW5saW5lIGludDMyX3QgICAgICAgZW5k
SW5kZXgodm9pZCkgY29uc3Q7Ci0gICAgICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhl
IG51bWVyaWMgaW5kZXggaW4gdGhlIHVuZGVybHlpbmcgdGV4dC1zdG9yYWdlCi0gICAgICogb2Jq
ZWN0IG9mIHRoZSBjaGFyYWN0ZXIgdGhlIGl0ZXJhdG9yIGN1cnJlbnRseSByZWZlcnMgdG8KLSAg
ICAgKiAoaS5lLiwgdGhlIGNoYXJhY3RlciByZXR1cm5lZCBieSBjdXJyZW50KCkpLiAgCi0gICAg
ICogQHJldHVybiB0aGUgbnVtYmVyaWMgaW5kZXggaW4gdGhlIHRleHQtc3RvcmFnZSBvYmplY3Qg
b2YgCi0gICAgICogdGhlIGNoYXJhY3RlciB0aGUgaXRlcmF0b3IgY3VycmVudGx5IHJlZmVycyB0
bwotICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAgICAqLwotICAgIGlubGluZSBpbnQzMl90ICAg
ICAgIGdldEluZGV4KHZvaWQpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUg
bGVuZ3RoIG9mIHRoZSBlbnRpcmUgdGV4dCBpbiB0aGUgdW5kZXJseWluZwotICAgICAqIHRleHQt
c3RvcmFnZSBvYmplY3QuCi0gICAgICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBlbnRpcmUg
dGV4dCBpbiB0aGUgdGV4dC1zdG9yYWdlIG9iamVjdAotICAgICAqIEBzdGFibGUgSUNVIDIuMAot
ICAgICAqLwotICAgIGlubGluZSBpbnQzMl90ICAgICAgICAgICBnZXRMZW5ndGgoKSBjb25zdDsK
LQotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBjdXJyZW50IHBvc2l0aW9uIHJlbGF0aXZlIHRv
IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlCi0gICAgICogaXRlcmF0aW9uIHJhbmdlLCBvciByZWxh
dGl2ZSB0byB0aGUgY3VycmVudCBwb3NpdGlvbiBpdHNlbGYuCi0gICAgICogVGhlIG1vdmVtZW50
IGlzIGV4cHJlc3NlZCBpbiBudW1iZXJzIG9mIGNvZGUgdW5pdHMgZm9yd2FyZAotICAgICAqIG9y
IGJhY2t3YXJkIGJ5IHNwZWNpZnlpbmcgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBkZWx0YS4KLSAg
ICAgKiBAcGFyYW0gZGVsdGEgdGhlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIG9yaWdpbi4gQSBwb3Np
dGl2ZSBkZWx0YSBtZWFucyBmb3J3YXJkOwotICAgICAqIGEgbmVnYXRpdmUgZGVsdGEgbWVhbnMg
YmFja3dhcmQuCi0gICAgICogQHBhcmFtIG9yaWdpbiBPcmlnaW4gZW51bWVyYXRpb24ge2tTdGFy
dCwga0N1cnJlbnQsIGtFbmR9Ci0gICAgICogQHJldHVybiB0aGUgbmV3IHBvc2l0aW9uCi0gICAg
ICogQHN0YWJsZSBJQ1UgMi4wCi0gICAgICovCi0gICAgdmlydHVhbCBpbnQzMl90ICAgICAgbW92
ZShpbnQzMl90IGRlbHRhLCBFT3JpZ2luIG9yaWdpbikgPSAwOwotCi0gICAgLyoqCi0gICAgICog
TW92ZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9yIGVuZCBv
ZiB0aGUKLSAgICAgKiBpdGVyYXRpb24gcmFuZ2UsIG9yIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50
IHBvc2l0aW9uIGl0c2VsZi4KLSAgICAgKiBUaGUgbW92ZW1lbnQgaXMgZXhwcmVzc2VkIGluIG51
bWJlcnMgb2YgY29kZSBwb2ludHMgZm9yd2FyZAotICAgICAqIG9yIGJhY2t3YXJkIGJ5IHNwZWNp
ZnlpbmcgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBkZWx0YS4KLSAgICAgKiBAcGFyYW0gZGVsdGEg
dGhlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIG9yaWdpbi4gQSBwb3NpdGl2ZSBkZWx0YSBtZWFucyBm
b3J3YXJkOwotICAgICAqIGEgbmVnYXRpdmUgZGVsdGEgbWVhbnMgYmFja3dhcmQuCi0gICAgICog
QHBhcmFtIG9yaWdpbiBPcmlnaW4gZW51bWVyYXRpb24ge2tTdGFydCwga0N1cnJlbnQsIGtFbmR9
Ci0gICAgICogQHJldHVybiB0aGUgbmV3IHBvc2l0aW9uCi0gICAgICogQHN0YWJsZSBJQ1UgMi4w
Ci0gICAgICovCi0gICAgdmlydHVhbCBpbnQzMl90ICAgICAgbW92ZTMyKGludDMyX3QgZGVsdGEs
IEVPcmlnaW4gb3JpZ2luKSA9IDA7Ci0KLSAgICAvKioKLSAgICAgKiBDb3BpZXMgdGhlIHRleHQg
dW5kZXIgaXRlcmF0aW9uIGludG8gdGhlIFVuaWNvZGVTdHJpbmcKLSAgICAgKiByZWZlcnJlZCB0
byBieSAicmVzdWx0Ii4gIAotICAgICAqIEBwYXJhbSByZXN1bHQgUmVjZWl2ZXMgYSBjb3B5IG9m
IHRoZSB0ZXh0IHVuZGVyIGl0ZXJhdGlvbi4gIAotICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAg
ICAqLwotICAgIHZpcnR1YWwgdm9pZCAgICAgICAgICAgIGdldFRleHQoVW5pY29kZVN0cmluZyYg
IHJlc3VsdCkgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgLyoqCi0gICAgICogRW1wdHkgY29uc3Ry
dWN0b3IuCi0gICAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAgICovCi0gICAgQ2hhcmFjdGVySXRl
cmF0b3IoKTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdG9yLCBqdXN0IHNldHRpbmcgdGhl
IGxlbmd0aCBmaWVsZCBpbiB0aGlzIGJhc2UgY2xhc3MuCi0gICAgICogQHN0YWJsZSBJQ1UgMi4w
Ci0gICAgICovCi0gICAgQ2hhcmFjdGVySXRlcmF0b3IoaW50MzJfdCBsZW5ndGgpOwotCi0gICAg
LyoqCi0gICAgICogQ29uc3RydWN0b3IsIGp1c3Qgc2V0dGluZyB0aGUgbGVuZ3RoIGFuZCBwb3Np
dGlvbiBmaWVsZHMgaW4gdGhpcyBiYXNlIGNsYXNzLgotICAgICAqIEBzdGFibGUgSUNVIDIuMAot
ICAgICAqLwotICAgIENoYXJhY3Rlckl0ZXJhdG9yKGludDMyX3QgbGVuZ3RoLCBpbnQzMl90IHBv
c2l0aW9uKTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdG9yLCBqdXN0IHNldHRpbmcgdGhl
IGxlbmd0aCwgc3RhcnQsIGVuZCwgYW5kIHBvc2l0aW9uIGZpZWxkcyBpbiB0aGlzIGJhc2UgY2xh
c3MuCi0gICAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAgICovCi0gICAgQ2hhcmFjdGVySXRlcmF0
b3IoaW50MzJfdCBsZW5ndGgsIGludDMyX3QgdGV4dEJlZ2luLCBpbnQzMl90IHRleHRFbmQsIGlu
dDMyX3QgcG9zaXRpb24pOwotICAKLSAgICAvKioKLSAgICAgKiBDb3B5IGNvbnN0cnVjdG9yLgot
ICAgICAqCi0gICAgICogQHBhcmFtIHRoYXQgVGhlIENoYXJhY3Rlckl0ZXJhdG9yIHRvIGJlIGNv
cGllZAotICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAgICAqLwotICAgIENoYXJhY3Rlckl0ZXJh
dG9yKGNvbnN0IENoYXJhY3Rlckl0ZXJhdG9yICZ0aGF0KTsKLQotICAgIC8qKgotICAgICAqIEFz
c2lnbm1lbnQgb3BlcmF0b3IuICBTZXRzIHRoaXMgQ2hhcmFjdGVySXRlcmF0b3IgdG8gaGF2ZSB0
aGUgc2FtZSBiZWhhdmlvciwKLSAgICAgKiBhcyB0aGUgb25lIHBhc3NlZCBpbi4KLSAgICAgKiBA
cGFyYW0gdGhhdCBUaGUgQ2hhcmFjdGVySXRlcmF0b3IgcGFzc2VkIGluLgotICAgICAqIEByZXR1
cm4gdGhlIG5ld2x5IHNldCBDaGFyYWN0ZXJJdGVyYXRvci4KLSAgICAgKiBAc3RhYmxlIElDVSAy
LjAKLSAgICAgKi8KLSAgICBDaGFyYWN0ZXJJdGVyYXRvciAmb3BlcmF0b3I9KGNvbnN0IENoYXJh
Y3Rlckl0ZXJhdG9yICZ0aGF0KTsKLQotICAgIC8qKgotICAgICAqIEJhc2UgY2xhc3MgdGV4dCBs
ZW5ndGggZmllbGQuCi0gICAgICogTmVjZXNzYXJ5IHRoaXMgZm9yIGNvcnJlY3QgZ2V0VGV4dCgp
IGFuZCBoYXNoQ29kZSgpLgotICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAgICAqLwotICAgIGlu
dDMyX3QgdGV4dExlbmd0aDsKLQotICAgIC8qKgotICAgICAqIEJhc2UgY2xhc3MgZmllbGQgZm9y
IHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAgICAqLwot
ICAgIGludDMyX3QgIHBvczsKLQotICAgIC8qKgotICAgICAqIEJhc2UgY2xhc3MgZmllbGQgZm9y
IHRoZSBzdGFydCBvZiB0aGUgaXRlcmF0aW9uIHJhbmdlLgotICAgICAqIEBzdGFibGUgSUNVIDIu
MAotICAgICAqLwotICAgIGludDMyX3QgIGJlZ2luOwotCi0gICAgLyoqCi0gICAgICogQmFzZSBj
bGFzcyBmaWVsZCBmb3IgdGhlIGVuZCBvZiB0aGUgaXRlcmF0aW9uIHJhbmdlLgotICAgICAqIEBz
dGFibGUgSUNVIDIuMAotICAgICAqLwotICAgIGludDMyX3QgIGVuZDsKLX07Ci0KLWlubGluZSBV
Qm9vbAotRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEZvcndhcmRD
aGFyYWN0ZXJJdGVyYXRvciYgdGhhdCkgY29uc3QgewotICAgIHJldHVybiAhb3BlcmF0b3I9PSh0
aGF0KTsKLX0KLQotaW5saW5lIGludDMyX3QKLUNoYXJhY3Rlckl0ZXJhdG9yOjpzZXRUb1N0YXJ0
KCkgewotICAgIHJldHVybiBtb3ZlKDAsIGtTdGFydCk7Ci19Ci0KLWlubGluZSBpbnQzMl90Ci1D
aGFyYWN0ZXJJdGVyYXRvcjo6c2V0VG9FbmQoKSB7Ci0gICAgcmV0dXJuIG1vdmUoMCwga0VuZCk7
Ci19Ci0KLWlubGluZSBpbnQzMl90Ci1DaGFyYWN0ZXJJdGVyYXRvcjo6c3RhcnRJbmRleCh2b2lk
KSBjb25zdCB7Ci0gICAgcmV0dXJuIGJlZ2luOwotfQotCi1pbmxpbmUgaW50MzJfdAotQ2hhcmFj
dGVySXRlcmF0b3I6OmVuZEluZGV4KHZvaWQpIGNvbnN0IHsKLSAgICByZXR1cm4gZW5kOwotfQot
Ci1pbmxpbmUgaW50MzJfdAotQ2hhcmFjdGVySXRlcmF0b3I6OmdldEluZGV4KHZvaWQpIGNvbnN0
IHsKLSAgICByZXR1cm4gcG9zOwotfQotCi1pbmxpbmUgaW50MzJfdAotQ2hhcmFjdGVySXRlcmF0
b3I6OmdldExlbmd0aCh2b2lkKSBjb25zdCB7Ci0gICAgcmV0dXJuIHRleHRMZW5ndGg7Ci19Ci0K
LVVfTkFNRVNQQUNFX0VORAotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL2xvY2FscG9pbnRlci5oIGIv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29k
ZS9sb2NhbHBvaW50ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNhYWJmNjVj
MzgwNzA2ZmEwODg1MzY5NzQ4N2M3MjdhYjlhYmFlYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
ZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL2xvY2FscG9pbnRlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsMzUyICswLDAgQEAKLS8qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qICAgQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKLSogICBD
b3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoKLSoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKLSogICBmaWxlIG5hbWU6ICBsb2NhbHBvaW50ZXIuaAotKiAgIGVuY29k
aW5nOiAgIFVTLUFTQ0lJCi0qICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCi0qICAgaW5kZW50
YXRpb246NAotKgotKiAgIGNyZWF0ZWQgb246IDIwMDlub3YxMwotKiAgIGNyZWF0ZWQgYnk6IE1h
cmt1cyBXLiBTY2hlcmVyCi0qLwotCi0jaWZuZGVmIF9fTE9DQUxQT0lOVEVSX0hfXwotI2RlZmlu
ZSBfX0xPQ0FMUE9JTlRFUl9IX18KLQotLyoqCi0gKiBcZmlsZSAKLSAqIFxicmllZiBDKysgQVBJ
OiAiU21hcnQgcG9pbnRlcnMiIGZvciB1c2Ugd2l0aCBhbmQgaW4gSUNVNEMgQysrIGNvZGUuCi0g
KgotICogVGhlc2UgY2xhc3NlcyBhcmUgaW5zcGlyZWQgYnkKLSAqIC0gc3RkOjphdXRvX3B0cgot
ICogLSBib29zdDo6c2NvcGVkX3B0ciAmIGJvb3N0OjpzY29wZWRfYXJyYXkKLSAqIC0gVGFsaWdl
bnQgU2FmZSBQb2ludGVycyAoVE9ubHlQb2ludGVyVG8pCi0gKgotICogYnV0IG5vbmUgb2YgdGhv
c2UgcHJvdmlkZSBmb3IgYWxsIG9mIHRoZSBnb2FscyBmb3IgSUNVIHNtYXJ0IHBvaW50ZXJzOgot
ICogLSBTbWFydCBwb2ludGVyIG93bnMgdGhlIG9iamVjdCBhbmQgcmVsZWFzZXMgaXQgd2hlbiBp
dCBnb2VzIG91dCBvZiBzY29wZS4KLSAqIC0gTm8gdHJhbnNmZXIgb2Ygb3duZXJzaGlwIHZpYSBj
b3B5L2Fzc2lnbm1lbnQgdG8gcmVkdWNlIG1pc3VzZS4gU2ltcGxlciAmIG1vcmUgcm9idXN0Lgot
ICogLSBJQ1UtY29tcGF0aWJsZTogTm8gZXhjZXB0aW9ucy4KLSAqIC0gTmVlZCB0byBiZSBhYmxl
IHRvIG9ycGhhbi9yZWxlYXNlIHRoZSBwb2ludGVyIGFuZCBpdHMgb3duZXJzaGlwLgotICogLSBO
ZWVkIHZhcmlhbnRzIGZvciBub3JtYWwgQysrIG9iamVjdCBwb2ludGVycywgQysrIGFycmF5cywg
YW5kIElDVSBDIHNlcnZpY2Ugb2JqZWN0cy4KLSAqCi0gKiBGb3IgZGV0YWlscyBzZWUgaHR0cDov
L3NpdGUuaWN1LXByb2plY3Qub3JnL2Rlc2lnbi9jcHAvc2NvcGVkX3B0cgotICovCi0KLSNpbmNs
dWRlICJ1bmljb2RlL3V0eXBlcy5oIgotCi0jaWYgVV9TSE9XX0NQTFVTUExVU19BUEkKLQotVV9O
QU1FU1BBQ0VfQkVHSU4KLQotLyoqCi0gKiAiU21hcnQgcG9pbnRlciIgYmFzZSBjbGFzczsgZG8g
bm90IHVzZSBkaXJlY3RseTogdXNlIExvY2FsUG9pbnRlciBldGMuCi0gKgotICogQmFzZSBjbGFz
cyBmb3Igc21hcnQgcG9pbnRlciBjbGFzc2VzIHRoYXQgZG8gbm90IHRocm93IGV4Y2VwdGlvbnMu
Ci0gKgotICogRG8gbm90IHVzZSB0aGlzIGJhc2UgY2xhc3MgZGlyZWN0bHksIHNpbmNlIGl0IGRv
ZXMgbm90IGRlbGV0ZSBpdHMgcG9pbnRlci4KLSAqIEEgc3ViY2xhc3MgbXVzdCBpbXBsZW1lbnQg
bWV0aG9kcyB0aGF0IGRlbGV0ZSB0aGUgcG9pbnRlcjoKLSAqIERlc3RydWN0b3IgYW5kIGFkb3B0
SW5zdGVhZCgpLgotICoKLSAqIFRoZXJlIGlzIG5vIG9wZXJhdG9yIFQgKigpIHByb3ZpZGVkIGJl
Y2F1c2UgdGhlIHByb2dyYW1tZXIgbXVzdCBkZWNpZGUKLSAqIHdoZXRoZXIgdG8gdXNlIGdldEFs
aWFzKCkgKHdpdGhvdXQgdHJhbnNmZXIgb2Ygb3duZXJzaGlwKSBvciBvcnBhbigpCi0gKiAod2l0
aCB0cmFuc2ZlciBvZiBvd25lcnNoaXAgYW5kIE5VTExpbmcgb2YgdGhlIHBvaW50ZXIpLgotICoK
LSAqIEBzZWUgTG9jYWxQb2ludGVyCi0gKiBAc2VlIExvY2FsQXJyYXkKLSAqIEBzZWUgVV9ERUZJ
TkVfTE9DQUxfT1BFTl9QT0lOVEVSCi0gKiBAc3RhYmxlIElDVSA0LjQKLSAqLwotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLWNsYXNzIExvY2FsUG9pbnRlckJhc2UgewotcHVibGljOgotICAgIC8qKgot
ICAgICAqIENvbnN0cnVjdG9yIHRha2VzIG93bmVyc2hpcC4KLSAgICAgKiBAcGFyYW0gcCBzaW1w
bGUgcG9pbnRlciB0byBhbiBvYmplY3QgdGhhdCBpcyBhZG9wdGVkCi0gICAgICogQHN0YWJsZSBJ
Q1UgNC40Ci0gICAgICovCi0gICAgZXhwbGljaXQgTG9jYWxQb2ludGVyQmFzZShUICpwPU5VTEwp
IDogcHRyKHApIHt9Ci0gICAgLyoqCi0gICAgICogRGVzdHJ1Y3RvciBkZWxldGVzIHRoZSBvYmpl
Y3QgaXQgb3ducy4KLSAgICAgKiBTdWJjbGFzcyBtdXN0IG92ZXJyaWRlOiBCYXNlIGNsYXNzIGRv
ZXMgbm90aGluZy4KLSAgICAgKiBAc3RhYmxlIElDVSA0LjQKLSAgICAgKi8KLSAgICB+TG9jYWxQ
b2ludGVyQmFzZSgpIHsgLyogZGVsZXRlIHB0cjsgKi8gfQotICAgIC8qKgotICAgICAqIE5VTEwg
Y2hlY2suCi0gICAgICogQHJldHVybiBUUlVFIGlmID09TlVMTAotICAgICAqIEBzdGFibGUgSUNV
IDQuNAotICAgICAqLwotICAgIFVCb29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHB0cj09TlVM
TDsgfQotICAgIC8qKgotICAgICAqIE5VTEwgY2hlY2suCi0gICAgICogQHJldHVybiBUUlVFIGlm
ICE9TlVMTAotICAgICAqIEBzdGFibGUgSUNVIDQuNAotICAgICAqLwotICAgIFVCb29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiBwdHIhPU5VTEw7IH0KLSAgICAvKioKLSAgICAgKiBDb21wYXJp
c29uIHdpdGggYSBzaW1wbGUgcG9pbnRlciwgc28gdGhhdCBleGlzdGluZyBjb2RlCi0gICAgICog
d2l0aCA9PU5VTEwgbmVlZCBub3QgYmUgY2hhbmdlZC4KLSAgICAgKiBAcGFyYW0gb3RoZXIgc2lt
cGxlIHBvaW50ZXIgZm9yIGNvbXBhcmlzb24KLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBw
b2ludGVyIHZhbHVlIGVxdWFscyBvdGhlcgotICAgICAqIEBzdGFibGUgSUNVIDQuNAotICAgICAq
LwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUICpvdGhlcikgY29uc3QgeyByZXR1cm4gcHRy
PT1vdGhlcjsgfQotICAgIC8qKgotICAgICAqIENvbXBhcmlzb24gd2l0aCBhIHNpbXBsZSBwb2lu
dGVyLCBzbyB0aGF0IGV4aXN0aW5nIGNvZGUKLSAgICAgKiB3aXRoICE9TlVMTCBuZWVkIG5vdCBi
ZSBjaGFuZ2VkLgotICAgICAqIEBwYXJhbSBvdGhlciBzaW1wbGUgcG9pbnRlciBmb3IgY29tcGFy
aXNvbgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHBvaW50ZXIgdmFsdWUgZGlmZmVycyBm
cm9tIG90aGVyCi0gICAgICogQHN0YWJsZSBJQ1UgNC40Ci0gICAgICovCi0gICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFQgKm90aGVyKSBjb25zdCB7IHJldHVybiBwdHIhPW90aGVyOyB9Ci0gICAg
LyoqCi0gICAgICogQWNjZXNzIHdpdGhvdXQgb3duZXJzaGlwIGNoYW5nZS4KLSAgICAgKiBAcmV0
dXJuIHRoZSBwb2ludGVyIHZhbHVlCi0gICAgICogQHN0YWJsZSBJQ1UgNC40Ci0gICAgICovCi0g
ICAgVCAqZ2V0QWxpYXMoKSBjb25zdCB7IHJldHVybiBwdHI7IH0KLSAgICAvKioKLSAgICAgKiBB
Y2Nlc3Mgd2l0aG91dCBvd25lcnNoaXAgY2hhbmdlLgotICAgICAqIEByZXR1cm4gdGhlIHBvaW50
ZXIgdmFsdWUgYXMgYSByZWZlcmVuY2UKLSAgICAgKiBAc3RhYmxlIElDVSA0LjQKLSAgICAgKi8K
LSAgICBUICZvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqcHRyOyB9Ci0gICAgLyoqCi0gICAg
ICogQWNjZXNzIHdpdGhvdXQgb3duZXJzaGlwIGNoYW5nZS4KLSAgICAgKiBAcmV0dXJuIHRoZSBw
b2ludGVyIHZhbHVlCi0gICAgICogQHN0YWJsZSBJQ1UgNC40Ci0gICAgICovCi0gICAgVCAqb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIHB0cjsgfQotICAgIC8qKgotICAgICAqIEdpdmVzIHVw
IG93bmVyc2hpcDsgdGhlIGludGVybmFsIHBvaW50ZXIgYmVjb21lcyBOVUxMLgotICAgICAqIEBy
ZXR1cm4gdGhlIHBvaW50ZXIgdmFsdWU7Ci0gICAgICogICAgICAgICBjYWxsZXIgYmVjb21lcyBy
ZXNwb25zaWJsZSBmb3IgZGVsZXRpbmcgdGhlIG9iamVjdAotICAgICAqIEBzdGFibGUgSUNVIDQu
NAotICAgICAqLwotICAgIFQgKm9ycGhhbigpIHsKLSAgICAgICAgVCAqcD1wdHI7Ci0gICAgICAg
IHB0cj1OVUxMOwotICAgICAgICByZXR1cm4gcDsKLSAgICB9Ci0gICAgLyoqCi0gICAgICogRGVs
ZXRlcyB0aGUgb2JqZWN0IGl0IG93bnMsCi0gICAgICogYW5kIGFkb3B0cyAodGFrZXMgb3duZXJz
aGlwIG9mKSB0aGUgb25lIHBhc3NlZCBpbi4KLSAgICAgKiBTdWJjbGFzcyBtdXN0IG92ZXJyaWRl
OiBCYXNlIGNsYXNzIGRvZXMgbm90IGRlbGV0ZSB0aGUgb2JqZWN0LgotICAgICAqIEBwYXJhbSBw
IHNpbXBsZSBwb2ludGVyIHRvIGFuIG9iamVjdCB0aGF0IGlzIGFkb3B0ZWQKLSAgICAgKiBAc3Rh
YmxlIElDVSA0LjQKLSAgICAgKi8KLSAgICB2b2lkIGFkb3B0SW5zdGVhZChUICpwKSB7Ci0gICAg
ICAgIC8vIGRlbGV0ZSBwdHI7Ci0gICAgICAgIHB0cj1wOwotICAgIH0KLXByb3RlY3RlZDoKLSAg
ICAvKioKLSAgICAgKiBBY3R1YWwgcG9pbnRlci4KLSAgICAgKiBAaW50ZXJuYWwKLSAgICAgKi8K
LSAgICBUICpwdHI7Ci1wcml2YXRlOgotICAgIC8vIE5vIGNvbXBhcmlzb24gb3BlcmF0b3JzIHdp
dGggb3RoZXIgTG9jYWxQb2ludGVyQmFzZXMuCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExv
Y2FsUG9pbnRlckJhc2UgJm90aGVyKTsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgTG9jYWxQ
b2ludGVyQmFzZSAmb3RoZXIpOwotICAgIC8vIE5vIG93bmVyc2hpcCB0cmFuc2ZlcjogTm8gY29w
eSBjb25zdHJ1Y3Rvciwgbm8gYXNzaWdubWVudCBvcGVyYXRvci4KLSAgICBMb2NhbFBvaW50ZXJC
YXNlKGNvbnN0IExvY2FsUG9pbnRlckJhc2UgJm90aGVyKTsKLSAgICB2b2lkIG9wZXJhdG9yPShj
b25zdCBMb2NhbFBvaW50ZXJCYXNlICZvdGhlcik7Ci0gICAgLy8gTm8gaGVhcCBhbGxvY2F0aW9u
LiBVc2Ugb25seSBvbiB0aGUgc3RhY2suCi0gICAgc3RhdGljIHZvaWQgKiBVX0VYUE9SVDIgb3Bl
cmF0b3IgbmV3KHNpemVfdCBzaXplKTsKLSAgICBzdGF0aWMgdm9pZCAqIFVfRVhQT1JUMiBvcGVy
YXRvciBuZXdbXShzaXplX3Qgc2l6ZSk7Ci0jaWYgVV9IQVZFX1BMQUNFTUVOVF9ORVcKLSAgICBz
dGF0aWMgdm9pZCAqIFVfRVhQT1JUMiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkICpwdHIpOwot
I2VuZGlmCi19OwotCi0vKioKLSAqICJTbWFydCBwb2ludGVyIiBjbGFzcywgZGVsZXRlcyBvYmpl
Y3RzIHZpYSB0aGUgc3RhbmRhcmQgQysrIGRlbGV0ZSBvcGVyYXRvci4KLSAqIEZvciBtb3N0IG1l
dGhvZHMgc2VlIHRoZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2UgY2xhc3MuCi0gKgotICogVXNhZ2Ug
ZXhhbXBsZToKLSAqIFxjb2RlCi0gKiBMb2NhbFBvaW50ZXI8VW5pY29kZVN0cmluZz4gcyhuZXcg
VW5pY29kZVN0cmluZygoVUNoYXIzMikweDUwMDA1KSk7Ci0gKiBpbnQzMl90IGxlbmd0aD1zLT5s
ZW5ndGgoKTsgIC8vIDIKLSAqIFVDaGFyIGxlYWQ9cy0+Y2hhckF0KDApOyAgLy8gMHhkOTAwCi0g
KiBpZihzb21lIGNvbmRpdGlvbikgeyByZXR1cm47IH0gIC8vIG5vIG5lZWQgdG8gZXhwbGljaXRs
eSBkZWxldGUgdGhlIHBvaW50ZXIKLSAqIHMuYWRvcHRJbnN0ZWFkKG5ldyBVbmljb2RlU3RyaW5n
KChVQ2hhcikweGZmZmMpKTsKLSAqIGxlbmd0aD1zLT5sZW5ndGgoKTsgIC8vIDEKLSAqIC8vIG5v
IG5lZWQgdG8gZXhwbGljaXRseSBkZWxldGUgdGhlIHBvaW50ZXIKLSAqIFxlbmRjb2RlCi0gKgot
ICogQHNlZSBMb2NhbFBvaW50ZXJCYXNlCi0gKiBAc3RhYmxlIElDVSA0LjQKLSAqLwotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLWNsYXNzIExvY2FsUG9pbnRlciA6IHB1YmxpYyBMb2NhbFBvaW50ZXJC
YXNlPFQ+IHsKLXB1YmxpYzoKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RvciB0YWtlcyBvd25l
cnNoaXAuCi0gICAgICogQHBhcmFtIHAgc2ltcGxlIHBvaW50ZXIgdG8gYW4gb2JqZWN0IHRoYXQg
aXMgYWRvcHRlZAotICAgICAqIEBzdGFibGUgSUNVIDQuNAotICAgICAqLwotICAgIGV4cGxpY2l0
IExvY2FsUG9pbnRlcihUICpwPU5VTEwpIDogTG9jYWxQb2ludGVyQmFzZTxUPihwKSB7fQotI2lm
bmRlZiBVX0hJREVfRFJBRlRfQVBJCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0b3IgdGFrZXMg
b3duZXJzaGlwIGFuZCByZXBvcnRzIGFuIGVycm9yIGlmIE5VTEwuCi0gICAgICoKLSAgICAgKiBU
aGlzIGNvbnN0cnVjdG9yIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBvdGhlci1jbGFzcyBj
b25zdHJ1Y3RvcnMKLSAgICAgKiB0aGF0IG1heSByZXBvcnQgYSBmYWlsdXJlIFVFcnJvckNvZGUs
Ci0gICAgICogc28gdGhhdCBjYWxsZXJzIG5lZWQgdG8gY2hlY2sgb25seSBmb3IgVV9GQUlMVVJF
KGVycm9yQ29kZSkKLSAgICAgKiBhbmQgbm90IGFsc28gc2VwYXJhdGVseSBmb3IgaXNOdWxsKCku
Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gcCBzaW1wbGUgcG9pbnRlciB0byBhbiBvYmplY3QgdGhh
dCBpcyBhZG9wdGVkCi0gICAgICogQHBhcmFtIGVycm9yQ29kZSBpbi9vdXQgVUVycm9yQ29kZSwg
c2V0IHRvIFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1IKLSAgICAgKiAgICAgaWYgcD09TlVMTCBh
bmQgbm8gb3RoZXIgZmFpbHVyZSBjb2RlIGhhZCBiZWVuIHNldAotICAgICAqIEBkcmFmdCBJQ1Ug
NTUKLSAgICAgKi8KLSAgICBMb2NhbFBvaW50ZXIoVCAqcCwgVUVycm9yQ29kZSAmZXJyb3JDb2Rl
KSA6IExvY2FsUG9pbnRlckJhc2U8VD4ocCkgewotICAgICAgICBpZihwPT1OVUxMICYmIFVfU1VD
Q0VTUyhlcnJvckNvZGUpKSB7Ci0gICAgICAgICAgICBlcnJvckNvZGU9VV9NRU1PUllfQUxMT0NB
VElPTl9FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQ
SSAqLwotICAgIC8qKgotICAgICAqIERlc3RydWN0b3IgZGVsZXRlcyB0aGUgb2JqZWN0IGl0IG93
bnMuCi0gICAgICogQHN0YWJsZSBJQ1UgNC40Ci0gICAgICovCi0gICAgfkxvY2FsUG9pbnRlcigp
IHsKLSAgICAgICAgZGVsZXRlIExvY2FsUG9pbnRlckJhc2U8VD46OnB0cjsKLSAgICB9Ci0gICAg
LyoqCi0gICAgICogRGVsZXRlcyB0aGUgb2JqZWN0IGl0IG93bnMsCi0gICAgICogYW5kIGFkb3B0
cyAodGFrZXMgb3duZXJzaGlwIG9mKSB0aGUgb25lIHBhc3NlZCBpbi4KLSAgICAgKiBAcGFyYW0g
cCBzaW1wbGUgcG9pbnRlciB0byBhbiBvYmplY3QgdGhhdCBpcyBhZG9wdGVkCi0gICAgICogQHN0
YWJsZSBJQ1UgNC40Ci0gICAgICovCi0gICAgdm9pZCBhZG9wdEluc3RlYWQoVCAqcCkgewotICAg
ICAgICBkZWxldGUgTG9jYWxQb2ludGVyQmFzZTxUPjo6cHRyOwotICAgICAgICBMb2NhbFBvaW50
ZXJCYXNlPFQ+OjpwdHI9cDsKLSAgICB9Ci0jaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKLSAgICAv
KioKLSAgICAgKiBEZWxldGVzIHRoZSBvYmplY3QgaXQgb3ducywKLSAgICAgKiBhbmQgYWRvcHRz
ICh0YWtlcyBvd25lcnNoaXAgb2YpIHRoZSBvbmUgcGFzc2VkIGluLgotICAgICAqCi0gICAgICog
SWYgVV9GQUlMVVJFKGVycm9yQ29kZSksIHRoZW4gdGhlIGN1cnJlbnQgb2JqZWN0IGlzIHJldGFp
bmVkIGFuZCB0aGUgbmV3IG9uZSBkZWxldGVkLgotICAgICAqCi0gICAgICogSWYgVV9TVUNDRVNT
KGVycm9yQ29kZSkgYnV0IHRoZSBpbnB1dCBwb2ludGVyIGlzIE5VTEwsCi0gICAgICogdGhlbiBV
X01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SIGlzIHNldCwKLSAgICAgKiB0aGUgY3VycmVudCBvYmpl
Y3QgaXMgZGVsZXRlZCwgYW5kIE5VTEwgaXMgc2V0LgotICAgICAqCi0gICAgICogQHBhcmFtIHAg
c2ltcGxlIHBvaW50ZXIgdG8gYW4gb2JqZWN0IHRoYXQgaXMgYWRvcHRlZAotICAgICAqIEBwYXJh
bSBlcnJvckNvZGUgaW4vb3V0IFVFcnJvckNvZGUsIHNldCB0byBVX01FTU9SWV9BTExPQ0FUSU9O
X0VSUk9SCi0gICAgICogICAgIGlmIHA9PU5VTEwgYW5kIG5vIG90aGVyIGZhaWx1cmUgY29kZSBo
YWQgYmVlbiBzZXQKLSAgICAgKiBAZHJhZnQgSUNVIDU1Ci0gICAgICovCi0gICAgdm9pZCBhZG9w
dEluc3RlYWRBbmRDaGVja0Vycm9yQ29kZShUICpwLCBVRXJyb3JDb2RlICZlcnJvckNvZGUpIHsK
LSAgICAgICAgaWYoVV9TVUNDRVNTKGVycm9yQ29kZSkpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBM
b2NhbFBvaW50ZXJCYXNlPFQ+OjpwdHI7Ci0gICAgICAgICAgICBMb2NhbFBvaW50ZXJCYXNlPFQ+
OjpwdHI9cDsKLSAgICAgICAgICAgIGlmKHA9PU5VTEwpIHsKLSAgICAgICAgICAgICAgICBlcnJv
ckNvZGU9VV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGRlbGV0ZSBwOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlm
ICAvKiBVX0hJREVfRFJBRlRfQVBJICovCi19OwotCi0vKioKLSAqICJTbWFydCBwb2ludGVyIiBj
bGFzcywgZGVsZXRlcyBvYmplY3RzIHZpYSB0aGUgQysrIGFycmF5IGRlbGV0ZVtdIG9wZXJhdG9y
LgotICogRm9yIG1vc3QgbWV0aG9kcyBzZWUgdGhlIExvY2FsUG9pbnRlckJhc2UgYmFzZSBjbGFz
cy4KLSAqIEFkZHMgb3BlcmF0b3JbXSBmb3IgYXJyYXkgaXRlbSBhY2Nlc3MuCi0gKgotICogVXNh
Z2UgZXhhbXBsZToKLSAqIFxjb2RlCi0gKiBMb2NhbEFycmF5PFVuaWNvZGVTdHJpbmc+IGEobmV3
IFVuaWNvZGVTdHJpbmdbMl0pOwotICogYVswXS5hcHBlbmQoKFVDaGFyKTB4NjEpOwotICogaWYo
c29tZSBjb25kaXRpb24pIHsgcmV0dXJuOyB9ICAvLyBubyBuZWVkIHRvIGV4cGxpY2l0bHkgZGVs
ZXRlIHRoZSBhcnJheQotICogYS5hZG9wdEluc3RlYWQobmV3IFVuaWNvZGVTdHJpbmdbNF0pOwot
ICogYVszXS5hcHBlbmQoKFVDaGFyKTB4NjIpLmFwcGVuZCgoVUNoYXIpMHg2MykucmV2ZXJzZSgp
OwotICogLy8gbm8gbmVlZCB0byBleHBsaWNpdGx5IGRlbGV0ZSB0aGUgYXJyYXkKLSAqIFxlbmRj
b2RlCi0gKgotICogQHNlZSBMb2NhbFBvaW50ZXJCYXNlCi0gKiBAc3RhYmxlIElDVSA0LjQKLSAq
LwotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIExvY2FsQXJyYXkgOiBwdWJsaWMgTG9jYWxQ
b2ludGVyQmFzZTxUPiB7Ci1wdWJsaWM6Ci0gICAgLyoqCi0gICAgICogQ29uc3RydWN0b3IgdGFr
ZXMgb3duZXJzaGlwLgotICAgICAqIEBwYXJhbSBwIHNpbXBsZSBwb2ludGVyIHRvIGFuIGFycmF5
IG9mIFQgb2JqZWN0cyB0aGF0IGlzIGFkb3B0ZWQKLSAgICAgKiBAc3RhYmxlIElDVSA0LjQKLSAg
ICAgKi8KLSAgICBleHBsaWNpdCBMb2NhbEFycmF5KFQgKnA9TlVMTCkgOiBMb2NhbFBvaW50ZXJC
YXNlPFQ+KHApIHt9Ci0gICAgLyoqCi0gICAgICogRGVzdHJ1Y3RvciBkZWxldGVzIHRoZSBhcnJh
eSBpdCBvd25zLgotICAgICAqIEBzdGFibGUgSUNVIDQuNAotICAgICAqLwotICAgIH5Mb2NhbEFy
cmF5KCkgewotICAgICAgICBkZWxldGVbXSBMb2NhbFBvaW50ZXJCYXNlPFQ+OjpwdHI7Ci0gICAg
fQotICAgIC8qKgotICAgICAqIERlbGV0ZXMgdGhlIGFycmF5IGl0IG93bnMsCi0gICAgICogYW5k
IGFkb3B0cyAodGFrZXMgb3duZXJzaGlwIG9mKSB0aGUgb25lIHBhc3NlZCBpbi4KLSAgICAgKiBA
cGFyYW0gcCBzaW1wbGUgcG9pbnRlciB0byBhbiBhcnJheSBvZiBUIG9iamVjdHMgdGhhdCBpcyBh
ZG9wdGVkCi0gICAgICogQHN0YWJsZSBJQ1UgNC40Ci0gICAgICovCi0gICAgdm9pZCBhZG9wdElu
c3RlYWQoVCAqcCkgewotICAgICAgICBkZWxldGVbXSBMb2NhbFBvaW50ZXJCYXNlPFQ+OjpwdHI7
Ci0gICAgICAgIExvY2FsUG9pbnRlckJhc2U8VD46OnB0cj1wOwotICAgIH0KLSAgICAvKioKLSAg
ICAgKiBBcnJheSBpdGVtIGFjY2VzcyAod3JpdGFibGUpLgotICAgICAqIE5vIGluZGV4IGJvdW5k
cyBjaGVjay4KLSAgICAgKiBAcGFyYW0gaSBhcnJheSBpbmRleAotICAgICAqIEByZXR1cm4gcmVm
ZXJlbmNlIHRvIHRoZSBhcnJheSBpdGVtCi0gICAgICogQHN0YWJsZSBJQ1UgNC40Ci0gICAgICov
Ci0gICAgVCAmb3BlcmF0b3JbXShwdHJkaWZmX3QgaSkgY29uc3QgeyByZXR1cm4gTG9jYWxQb2lu
dGVyQmFzZTxUPjo6cHRyW2ldOyB9Ci19OwotCi0vKioKLSAqIFxkZWYgVV9ERUZJTkVfTE9DQUxf
T1BFTl9QT0lOVEVSCi0gKiAiU21hcnQgcG9pbnRlciIgZGVmaW5pdGlvbiBtYWNybywgZGVsZXRl
cyBvYmplY3RzIHZpYSB0aGUgY2xvc2VGdW5jdGlvbi4KLSAqIERlZmluZXMgYSBzdWJjbGFzcyBv
ZiBMb2NhbFBvaW50ZXJCYXNlIHdoaWNoIHdvcmtzIGp1c3QKLSAqIGxpa2UgTG9jYWxQb2ludGVy
PFR5cGU+IGV4Y2VwdCB0aGF0IHRoaXMgc3ViY2xhc3Mgd2lsbCB1c2UgdGhlIGNsb3NlRnVuY3Rp
b24KLSAqIHJhdGhlciB0aGFuIHRoZSBDKysgZGVsZXRlIG9wZXJhdG9yLgotICoKLSAqIFJlcXVp
cmVtZW50OiBUaGUgY2xvc2VGdW5jdGlvbiBtdXN0IHRvbGVyYXRlIGEgTlVMTCBwb2ludGVyLgot
ICogKFdlIGNvdWxkIGFkZCBhIE5VTEwgY2hlY2sgaGVyZSBidXQgaXQgaXMgbm9ybWFsbHkgcmVk
dW5kYW50LikKLSAqCi0gKiBVc2FnZSBleGFtcGxlOgotICogXGNvZGUKLSAqIExvY2FsVUNhc2VN
YXBQb2ludGVyIGNzbSh1Y2FzZW1hcF9vcGVuKGxvY2FsZUlELCBvcHRpb25zLCAmZXJyb3JDb2Rl
KSk7Ci0gKiB1dGY4T3V0TGVuZ3RoPXVjYXNlbWFwX3V0ZjhUb0xvd2VyKGNzbS5nZXRBbGlhcygp
LAotICogICAgIHV0ZjhPdXQsIChpbnQzMl90KXNpemVvZih1dGY4T3V0KSwKLSAqICAgICB1dGY4
SW4sIHV0ZjhJbkxlbmd0aCwgJmVycm9yQ29kZSk7Ci0gKiBpZihVX0ZBSUxVUkUoZXJyb3JDb2Rl
KSkgeyByZXR1cm47IH0gIC8vIG5vIG5lZWQgdG8gZXhwbGljaXRseSBkZWxldGUgdGhlIFVDYXNl
TWFwCi0gKiBcZW5kY29kZQotICoKLSAqIEBzZWUgTG9jYWxQb2ludGVyQmFzZQotICogQHNlZSBM
b2NhbFBvaW50ZXIKLSAqIEBzdGFibGUgSUNVIDQuNAotICovCi0jZGVmaW5lIFVfREVGSU5FX0xP
Q0FMX09QRU5fUE9JTlRFUihMb2NhbFBvaW50ZXJDbGFzc05hbWUsIFR5cGUsIGNsb3NlRnVuY3Rp
b24pIFwKLSAgICBjbGFzcyBMb2NhbFBvaW50ZXJDbGFzc05hbWUgOiBwdWJsaWMgTG9jYWxQb2lu
dGVyQmFzZTxUeXBlPiB7IFwKLSAgICBwdWJsaWM6IFwKLSAgICAgICAgZXhwbGljaXQgTG9jYWxQ
b2ludGVyQ2xhc3NOYW1lKFR5cGUgKnA9TlVMTCkgOiBMb2NhbFBvaW50ZXJCYXNlPFR5cGU+KHAp
IHt9IFwKLSAgICAgICAgfkxvY2FsUG9pbnRlckNsYXNzTmFtZSgpIHsgY2xvc2VGdW5jdGlvbihw
dHIpOyB9IFwKLSAgICAgICAgdm9pZCBhZG9wdEluc3RlYWQoVHlwZSAqcCkgeyBcCi0gICAgICAg
ICAgICBjbG9zZUZ1bmN0aW9uKHB0cik7IFwKLSAgICAgICAgICAgIHB0cj1wOyBcCi0gICAgICAg
IH0gXAotICAgIH0KLQotVV9OQU1FU1BBQ0VfRU5ECi0KLSNlbmRpZiAgLyogVV9TSE9XX0NQTFVT
UExVU19BUEkgKi8KLSNlbmRpZiAgLyogX19MT0NBTFBPSU5URVJfSF9fICovCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmlj
b2RlL3BhcnNlZXJyLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5k
ZW5jaWVzL2ljdS91bmljb2RlL3BhcnNlZXJyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQ0ZmYwMDgxMWRlN2JjNTliMzJlZDQ2NzcwNTBmYjdlMWI0ZjExM2IuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS9wYXJzZWVyci5oCisrKyAvZGV2
L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwNSwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcwotKiAgIENvcnBv
cmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgot
KiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCi0qICAgMDMvMTQvMDAgICAg
YWxpdSAgICAgICAgQ3JlYXRpb24uCi0qICAgMDYvMjcvMDAgICAgYWxpdSAgICAgICAgQ2hhbmdl
IGZyb20gQysrIGNsYXNzIHRvIEMgc3RydWN0Ci0qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qLwotI2lmbmRlZiBQ
QVJTRUVSUl9ICi0jZGVmaW5lIFBBUlNFRVJSX0gKLQotI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVz
LmgiCi0KLQotLyoqCi0gKiBcZmlsZQotICogXGJyaWVmIEMgQVBJOiBQYXJzZSBFcnJvciBJbmZv
cm1hdGlvbgotICovCi0vKioKLSAqIFRoZSBjYXBhY2l0eSBvZiB0aGUgY29udGV4dCBzdHJpbmdz
IGluIFVQYXJzZUVycm9yLgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8gCi1lbnVtIHsgVV9QQVJT
RV9DT05URVhUX0xFTiA9IDE2IH07Ci0KLS8qKgotICogQSBVUGFyc2VFcnJvciBzdHJ1Y3QgaXMg
dXNlZCB0byByZXR1cm5lZCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dAotICogcGFyc2luZyBl
cnJvcnMuICBJdCBpcyB1c2VkIGJ5IElDVSBwYXJzaW5nIGVuZ2luZXMgdGhhdCBwYXJzZSBsb25n
Ci0gKiBydWxlcywgcGF0dGVybnMsIG9yIHByb2dyYW1zLCB3aGVyZSB0aGUgdGV4dCBiZWluZyBw
YXJzZWQgaXMgbG9uZwotICogZW5vdWdoIHRoYXQgbW9yZSBpbmZvcm1hdGlvbiB0aGFuIGEgVUVy
cm9yQ29kZSBpcyBuZWVkZWQgdG8KLSAqIGxvY2FsaXplIHRoZSBlcnJvci4KLSAqCi0gKiA8cD5U
aGUgbGluZSwgb2Zmc2V0LCBhbmQgY29udGV4dCBmaWVsZHMgYXJlIG9wdGlvbmFsOyBwYXJzaW5n
Ci0gKiBlbmdpbmVzIG1heSBjaG9vc2Ugbm90IHRvIHVzZSB0byB1c2UgdGhlbS4KLSAqCi0gKiA8
cD5UaGUgcHJlQ29udGV4dCBhbmQgcG9zdENvbnRleHQgc3RyaW5ncyBpbmNsdWRlIHNvbWUgcGFy
dCBvZiB0aGUKLSAqIGNvbnRleHQgc3Vycm91bmRpbmcgdGhlIGVycm9yLiAgSWYgdGhlIHNvdXJj
ZSB0ZXh0IGlzICJsZXQgZm9yPTciCi0gKiBhbmQgImZvciIgaXMgdGhlIGVycm9yIChlLmcuLCBi
ZWNhdXNlIGl0IGlzIGEgcmVzZXJ2ZWQgd29yZCksIHRoZW4KLSAqIHNvbWUgZXhhbXBsZXMgb2Yg
d2hhdCBhIHBhcnNlciBtaWdodCBwcm9kdWNlIGFyZSB0aGUgZm9sbG93aW5nOgotICoKLSAqIDxw
cmU+Ci0gKiBwcmVDb250ZXh0ICAgcG9zdENvbnRleHQKLSAqICIiICAgICAgICAgICAiIiAgICAg
ICAgICAgIFRoZSBwYXJzZXIgZG9lcyBub3Qgc3VwcG9ydCBjb250ZXh0Ci0gKiAibGV0ICIgICAg
ICAgIj03IiAgICAgICAgICBQcmUtIGFuZCBwb3N0LWNvbnRleHQgb25seQotICogImxldCAiICAg
ICAgICJmb3I9NyIgICAgICAgUHJlLSBhbmQgcG9zdC1jb250ZXh0IGFuZCBlcnJvciB0ZXh0Ci0g
KiAiIiAgICAgICAgICAgImZvciIgICAgICAgICBFcnJvciB0ZXh0IG9ubHkKLSAqIDwvcHJlPgot
ICoKLSAqIDxwPkV4YW1wbGVzIG9mIGVuZ2luZXMgd2hpY2ggdXNlIFVQYXJzZUVycm9yIChvciBt
YXkgdXNlIGl0IGluIHRoZQotICogZnV0dXJlKSBhcmUgVHJhbnNsaXRlcmF0b3IsIFJ1bGVCYXNl
ZEJyZWFrSXRlcmF0b3IsIGFuZAotICogUmVnZXhQYXR0ZXJuLgotICogCi0gKiBAc3RhYmxlIElD
VSAyLjAKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgVVBhcnNlRXJyb3IgewotCi0gICAgLyoqCi0gICAg
ICogVGhlIGxpbmUgb24gd2hpY2ggdGhlIGVycm9yIG9jY3VyZWQuICBJZiB0aGUgcGFyc2VyIHVz
ZXMgdGhpcwotICAgICAqIGZpZWxkLCBpdCBzZXRzIGl0IHRvIHRoZSBsaW5lIG51bWJlciBvZiB0
aGUgc291cmNlIHRleHQgbGluZSBvbgotICAgICAqIHdoaWNoIHRoZSBlcnJvciBhcHBlYXJzLCB3
aGljaCB3aWxsIGJlIGJlIGEgdmFsdWUgPj0gMS4gIElmIHRoZQotICAgICAqIHBhcnNlIGRvZXMg
bm90IHN1cHBvcnQgbGluZSBudW1iZXJzLCB0aGUgdmFsdWUgd2lsbCBiZSA8PSAwLgotICAgICAq
IEBzdGFibGUgSUNVIDIuMAotICAgICAqLwotICAgIGludDMyX3QgICAgICAgIGxpbmU7Ci0KLSAg
ICAvKioKLSAgICAgKiBUaGUgY2hhcmFjdGVyIG9mZnNldCB0byB0aGUgZXJyb3IuICBJZiB0aGUg
bGluZSBmaWVsZCBpcyA+PSAxLAotICAgICAqIHRoZW4gdGhpcyBpcyB0aGUgb2Zmc2V0IGZyb20g
dGhlIHN0YXJ0IG9mIHRoZSBsaW5lLiAgT3RoZXJ3aXNlLAotICAgICAqIHRoaXMgaXMgdGhlIG9m
ZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgdGV4dC4gIElmIHRoZSBwYXJzZXIKLSAgICAgKiBk
b2VzIG5vdCBzdXBwb3J0IHRoaXMgZmllbGQsIGl0IHdpbGwgaGF2ZSBhIHZhbHVlIDwgMC4KLSAg
ICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICAgKi8KLSAgICBpbnQzMl90ICAgICAgICBvZmZzZXQ7
Ci0KLSAgICAvKioKLSAgICAgKiBUZXh0dWFsIGNvbnRleHQgYmVmb3JlIHRoZSBlcnJvci4gIE51
bGwtdGVybWluYXRlZC4gIFRoZSBlbXB0eQotICAgICAqIHN0cmluZyBpZiBub3Qgc3VwcG9ydGVk
IGJ5IHBhcnNlci4KLSAgICAgKiBAc3RhYmxlIElDVSAyLjAgICAKLSAgICAgKi8KLSAgICBVQ2hh
ciAgICAgICAgICBwcmVDb250ZXh0W1VfUEFSU0VfQ09OVEVYVF9MRU5dOwotCi0gICAgLyoqCi0g
ICAgICogVGhlIGVycm9yIGl0c2VsZiBhbmQvb3IgdGV4dHVhbCBjb250ZXh0IGFmdGVyIHRoZSBl
cnJvci4KLSAgICAgKiBOdWxsLXRlcm1pbmF0ZWQuICBUaGUgZW1wdHkgc3RyaW5nIGlmIG5vdCBz
dXBwb3J0ZWQgYnkgcGFyc2VyLgotICAgICAqIEBzdGFibGUgSUNVIDIuMCAgIAotICAgICAqLwot
ICAgIFVDaGFyICAgICAgICAgIHBvc3RDb250ZXh0W1VfUEFSU0VfQ09OVEVYVF9MRU5dOwotCi19
IFVQYXJzZUVycm9yOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvcGxhdGZvcm0uaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvcGxh
dGZvcm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgyOTAwMDY5ZDEwY2E4NzI2
OTNlYTgxOWM1ZTQzNGVmNGNlZWQyYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5j
aWVzL2ljdS91bmljb2RlL3BsYXRmb3JtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NjEgKzAsMCBA
QAotLyoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiAgIENvcHlyaWdodCAoQykgMTk5Ny0y
MDE1LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCi0qICAgQ29ycG9yYXRpb24gYW5k
IG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qCi0qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
LSoKLSogIEZJTEUgTkFNRSA6IHBsYXRmb3JtLmgKLSoKLSogICBEYXRlICAgICAgICBOYW1lICAg
ICAgICBEZXNjcmlwdGlvbgotKiAgIDA1LzEzLzk4ICAgIG5vcyAgICAgICAgIENyZWF0aW9uIChj
b250ZW50IG1vdmVkIGhlcmUgZnJvbSBwdHlwZXMuaCkuCi0qICAgMDMvMDIvOTkgICAgc3RlcGhl
biAgICAgQWRkZWQgQVM0MDAgc3VwcG9ydC4KLSogICAwMy8zMC85OSAgICBzdGVwaGVuICAgICBB
ZGRlZCBMaW51eCBzdXBwb3J0LgotKiAgIDA0LzEzLzk5ICAgIHN0ZXBoZW4gICAgIFJld29ya2Vk
IGZvciBhdXRvY29uZi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKi8KLQotI2lmbmRlZiBfUExB
VEZPUk1fSAotI2RlZmluZSBfUExBVEZPUk1fSAotCi0jaW5jbHVkZSAidW5pY29kZS91Y29uZmln
LmgiCi0jaW5jbHVkZSAidW5pY29kZS91dmVybnVtLmgiCi0KLS8qKgotICogXGZpbGUKLSAqIFxi
cmllZiBCYXNpYyB0eXBlcyBmb3IgdGhlIHBsYXRmb3JtLgotICoKLSAqIFRoaXMgZmlsZSB1c2Vk
IHRvIGJlIGdlbmVyYXRlZCBieSBhdXRvY29uZi9jb25maWd1cmUuCi0gKiBTdGFydGluZyB3aXRo
IElDVSA0OSwgcGxhdGZvcm0uaCBpcyBhIG5vcm1hbCBzb3VyY2UgZmlsZSwKLSAqIHRvIHNpbXBs
aWZ5IGNyb3NzLWNvbXBpbGluZyBhbmQgd29ya2luZyB3aXRoIG5vbi1hdXRvY29uZi9tYWtlIGJ1
aWxkIHN5c3RlbXMuCi0gKgotICogV2hlbiBhIHZhbHVlIGluIHRoaXMgZmlsZSBkb2VzIG5vdCB3
b3JrIG9uIGEgcGxhdGZvcm0sIHRoZW4gcGxlYXNlCi0gKiB0cnkgdG8gZGVyaXZlIGl0IGZyb20g
dGhlIFVfUExBVEZPUk0gdmFsdWUKLSAqIChmb3Igd2hpY2ggd2UgbWlnaHQgbmVlZCBhIG5ldyB2
YWx1ZSBjb25zdGFudCBpbiByYXJlIGNhc2VzKQotICogYW5kL29yIGZyb20gb3RoZXIgbWFjcm9z
IHRoYXQgYXJlIHByZWRlZmluZWQgYnkgdGhlIGNvbXBpbGVyCi0gKiBvciBkZWZpbmVkIGluIHN0
YW5kYXJkIChQT1NJWCBvciBwbGF0Zm9ybSBvciBjb21waWxlcikgaGVhZGVycy4KLSAqCi0gKiBB
cyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLCB5b3UgY2FuIGFkZCBhbiBleHBsaWNpdCA8Y29kZT4j
ZGVmaW5lPC9jb2RlPiBmb3Igc29tZSBtYWNyb3MKLSAqIGJlZm9yZSBpdCBpcyBmaXJzdCB0ZXN0
ZWQsIG9yIGFkZCBhbiBlcXVpdmFsZW50IC1EIG1hY3JvIGRlZmluaXRpb24KLSAqIHRvIHRoZSBj
b21waWxlcidzIGNvbW1hbmQgbGluZS4KLSAqCi0gKiBOb3RlOiBTb21lIGNvbXBpbGVycyBwcm92
aWRlIHdheXMgdG8gc2hvdyB0aGUgcHJlZGVmaW5lZCBtYWNyb3MuCi0gKiBGb3IgZXhhbXBsZSwg
d2l0aCBnY2MgeW91IGNhbiBjb21waWxlIGFuIGVtcHR5IC5jIGZpbGUgYW5kIGhhdmUgdGhlIGNv
bXBpbGVyCi0gKiBwcmludCB0aGUgcHJlZGVmaW5lZCBtYWNyb3Mgd2l0aAotICogXGNvZGUKLSAq
IGdjYyAtRSAtZE0gLXggYyAvZGV2L251bGwgfCBzb3J0Ci0gKiBcZW5kY29kZQotICogKFlvdSBj
YW4gcHJvdmlkZSBhbiBhY3R1YWwgZW1wdHkgLmMgZmlsZSByYXRoZXIgdGhhbiAvZGV2L251bGwu
Ci0gKiA8Y29kZT4teCBjKys8L2NvZGU+IGlzIGZvciBDKysuKQotICovCi0KLS8qKgotICogRGVm
aW5lIHNvbWUgdGhpbmdzIHNvIHRoYXQgdGhleSBjYW4gYmUgZG9jdW1lbnRlZC4KLSAqIEBpbnRl
cm5hbAotICovCi0jaWZkZWYgVV9JTl9ET1hZR0VOCi0vKgotICogUHJvYmxlbTogInBsYXRmb3Jt
Lmg6MzM1OiB3YXJuaW5nOiBkb2N1bWVudGF0aW9uIGZvciB1bmtub3duIGRlZmluZSBVX0hBVkVf
U1REX1NUUklORyBmb3VuZC4iIG1lYW5zIHRoYXQgVV9IQVZFX1NURF9TVFJJTkcgaXMgbm90IGRv
Y3VtZW50ZWQuCi0gKiBTb2x1dGlvbjogI2RlZmluZSBhbnkgZGVmaW5lcyBmb3Igbm9uIEBpbnRl
cm5hbCBBUEkgaGVyZSwgc28gdGhhdCB0aGV5IGFyZSB2aXNpYmxlIGluIHRoZSBkb2NzLiAgSWYg
eW91IGp1c3Qgc2V0IFBSRURFRklORUQgaW4gRG94eWZpbGUuaW4sICB0aGV5IHdvbid0IGJlIGRv
Y3VtZW50ZWQuCi0gKi8KLQotLyogTm9uZSBmb3Igbm93LiAqLwotI2VuZGlmCi0KLS8qKgotICog
XGRlZiBVX1BMQVRGT1JNCi0gKiBUaGUgVV9QTEFURk9STSBtYWNybyBkZWZpbmVzIHRoZSBwbGF0
Zm9ybSB3ZSdyZSBvbi4KLSAqCi0gKiBXZSB1c2VkIHRvIGRlZmluZSBvbmUgZGlmZmVyZW50LCB2
YWx1ZS1sZXNzIG1hY3JvIHBlciBwbGF0Zm9ybS4KLSAqIFRoYXQgbWFkZSBpdCBoYXJkIHRvIGtu
b3cgdGhlIHNldCBvZiByZWxldmFudCBwbGF0Zm9ybXMgYW5kIG1hY3JvcywKLSAqIGFuZCBoYXJk
IHRvIGRlYWwgd2l0aCB2YXJpYW50cyBvZiBwbGF0Zm9ybXMuCi0gKgotICogU3RhcnRpbmcgd2l0
aCBJQ1UgNDksIHdlIGRlZmluZSBwbGF0Zm9ybXMgYXMgbnVtZXJpYyBtYWNyb3MsCi0gKiB3aXRo
IHJhbmdlcyBvZiB2YWx1ZXMgZm9yIHJlbGF0ZWQgcGxhdGZvcm1zIGFuZCB0aGVpciB2YXJpYW50
cy4KLSAqIFRoZSBVX1BMQVRGT1JNIG1hY3JvIGlzIHNldCB0byBvbmUgb2YgdGhlc2UgdmFsdWVz
LgotICoKLSAqIEhpc3RvcmljYWwgbm90ZSBmcm9tIHRoZSBTb2xhcmlzIFdpa2lwZWRpYSBhcnRp
Y2xlOgotICogQVQmVCBhbmQgU3VuIGNvbGxhYm9yYXRlZCBvbiBhIHByb2plY3QgdG8gbWVyZ2Ug
dGhlIG1vc3QgcG9wdWxhciBVbml4IHZhcmlhbnRzCi0gKiBvbiB0aGUgbWFya2V0IGF0IHRoYXQg
dGltZTogQlNELCBTeXN0ZW0gViwgYW5kIFhlbml4LgotICogVGhpcyBiZWNhbWUgVW5peCBTeXN0
ZW0gViBSZWxlYXNlIDQgKFNWUjQpLgotICoKLSAqIEBpbnRlcm5hbAotICovCi0KLS8qKiBVbmtu
b3duIHBsYXRmb3JtLiBAaW50ZXJuYWwgKi8KLSNkZWZpbmUgVV9QRl9VTktOT1dOIDAKLS8qKiBX
aW5kb3dzIEBpbnRlcm5hbCAqLwotI2RlZmluZSBVX1BGX1dJTkRPV1MgMTAwMAotLyoqIE1pbkdX
LiBXaW5kb3dzLCBjYWxscyB0byBXaW4zMiBBUEksIGJ1dCB1c2luZyBHTlUgZ2NjIGFuZCBiaW51
dGlscy4gQGludGVybmFsICovCi0jZGVmaW5lIFVfUEZfTUlOR1cgMTgwMAotLyoqCi0gKiBDeWd3
aW4uIFdpbmRvd3MsIGNhbGxzIHRvIGN5Z3dpbjEuZGxsIGZvciBQb3NpeCBmdW5jdGlvbnMsCi0g
KiB1c2luZyBNU1ZDIG9yIEdOVSBnY2MgYW5kIGJpbnV0aWxzLgotICogQGludGVybmFsCi0gKi8K
LSNkZWZpbmUgVV9QRl9DWUdXSU4gMTkwMAotLyogUmVzZXJ2ZSAyMDAwIGZvciBVX1BGX1VOSVg/
ICovCi0vKiogSFAtVVggaXMgYmFzZWQgb24gVU5JWCBTeXN0ZW0gVi4gQGludGVybmFsICovCi0j
ZGVmaW5lIFVfUEZfSFBVWCAyMTAwCi0vKiogU29sYXJpcyBpcyBhIFVuaXggb3BlcmF0aW5nIHN5
c3RlbSBiYXNlZCBvbiBTVlI0LiBAaW50ZXJuYWwgKi8KLSNkZWZpbmUgVV9QRl9TT0xBUklTIDI2
MDAKLS8qKiBCU0QgaXMgYSBVTklYIG9wZXJhdGluZyBzeXN0ZW0gZGVyaXZhdGl2ZS4gQGludGVy
bmFsICovCi0jZGVmaW5lIFVfUEZfQlNEIDMwMDAKLS8qKiBBSVggaXMgYmFzZWQgb24gVU5JWCBT
eXN0ZW0gViBSZWxlYXNlcyBhbmQgNC4zIEJTRC4gQGludGVybmFsICovCi0jZGVmaW5lIFVfUEZf
QUlYIDMxMDAKLS8qKiBJUklYIGlzIGJhc2VkIG9uIFVOSVggU3lzdGVtIFYgd2l0aCBCU0QgZXh0
ZW5zaW9ucy4gQGludGVybmFsICovCi0jZGVmaW5lIFVfUEZfSVJJWCAzMjAwCi0vKioKLSAqIERh
cndpbiBpcyBhIFBPU0lYLWNvbXBsaWFudCBvcGVyYXRpbmcgc3lzdGVtLCBjb21wb3NlZCBvZiBj
b2RlIGRldmVsb3BlZCBieSBBcHBsZSwKLSAqIGFzIHdlbGwgYXMgY29kZSBkZXJpdmVkIGZyb20g
TmVYVFNURVAsIEJTRCwgYW5kIG90aGVyIHByb2plY3RzLAotICogYnVpbHQgYXJvdW5kIHRoZSBN
YWNoIGtlcm5lbC4KLSAqIERhcndpbiBmb3JtcyB0aGUgY29yZSBzZXQgb2YgY29tcG9uZW50cyB1
cG9uIHdoaWNoIE1hYyBPUyBYLCBBcHBsZSBUViwgYW5kIGlPUyBhcmUgYmFzZWQuCi0gKiAoT3Jp
Z2luYWwgZGVzY3JpcHRpb24gbW9kaWZpZWQgZnJvbSBXaWtpUGVkaWEuKQotICogQGludGVybmFs
Ci0gKi8KLSNkZWZpbmUgVV9QRl9EQVJXSU4gMzUwMAotLyoqIGlQaG9uZSBPUyAoaU9TKSBpcyBh
IGRlcml2YXRpdmUgb2YgTWFjIE9TIFguIEBpbnRlcm5hbCAqLwotI2RlZmluZSBVX1BGX0lQSE9O
RSAzNTUwCi0vKiogUU5YIGlzIGEgY29tbWVyY2lhbCBVbml4LWxpa2UgcmVhbC10aW1lIG9wZXJh
dGluZyBzeXN0ZW0gcmVsYXRlZCB0byBCU0QuIEBpbnRlcm5hbCAqLwotI2RlZmluZSBVX1BGX1FO
WCAzNzAwCi0vKiogTGludXggaXMgYSBVbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbS4gQGludGVy
bmFsICovCi0jZGVmaW5lIFVfUEZfTElOVVggNDAwMAotLyoqCi0gKiBOYXRpdmUgQ2xpZW50IGlz
IHByZXR0eSBjbG9zZSB0byBMaW51eC4KLSAqIFNlZSBodHRwczovL2RldmVsb3Blci5jaHJvbWUu
Y29tL25hdGl2ZS1jbGllbnQgYW5kCi0gKiAgaHR0cDovL3d3dy5jaHJvbWl1bS5vcmcvbmF0aXZl
Y2xpZW50Ci0gKiAgQGludGVybmFsCi0gKi8KLSNkZWZpbmUgVV9QRl9CUk9XU0VSX05BVElWRV9D
TElFTlQgNDAyMAotLyoqIEFuZHJvaWQgaXMgYmFzZWQgb24gTGludXguIEBpbnRlcm5hbCAqLwot
I2RlZmluZSBVX1BGX0FORFJPSUQgNDA1MAotLyogTWF4aW11bSB2YWx1ZSBmb3IgTGludXgtYmFz
ZWQgcGxhdGZvcm0gaXMgNDQ5OSAqLwotLyoqIHovT1MgaXMgdGhlIHN1Y2Nlc3NvciB0byBPUy8z
OTAgd2hpY2ggd2FzIHRoZSBzdWNjZXNzb3IgdG8gTVZTLiBAaW50ZXJuYWwgKi8KLSNkZWZpbmUg
VV9QRl9PUzM5MCA5MDAwCi0vKiogIklCTSBpIiBpcyB0aGUgY3VycmVudCBuYW1lIG9mIHdoYXQg
dXNlZCB0byBiZSBpNS9PUyBhbmQgZWFybGllciBPUy80MDAuIEBpbnRlcm5hbCAqLwotI2RlZmlu
ZSBVX1BGX09TNDAwIDk0MDAKLQotI2lmZGVmIFVfUExBVEZPUk0KLSAgICAvKiBVc2UgdGhlIHBy
ZWRlZmluZWQgdmFsdWUuICovCi0jZWxpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQotIyAgIGRlZmlu
ZSBVX1BMQVRGT1JNIFVfUEZfTUlOR1cKLSNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKLSMgICBk
ZWZpbmUgVV9QTEFURk9STSBVX1BGX0NZR1dJTgotI2VsaWYgZGVmaW5lZChXSU4zMikgfHwgZGVm
aW5lZChfV0lOMzIpIHx8IGRlZmluZWQoV0lONjQpIHx8IGRlZmluZWQoX1dJTjY0KQotIyAgIGRl
ZmluZSBVX1BMQVRGT1JNIFVfUEZfV0lORE9XUwotI2VsaWYgZGVmaW5lZChfX0FORFJPSURfXykK
LSMgICBkZWZpbmUgVV9QTEFURk9STSBVX1BGX0FORFJPSUQKLSAgICAvKiBBbmRyb2lkIHdjaGFy
X3Qgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZSBBUEkgbGV2ZWwuICovCi0jICAgaW5jbHVkZSA8YW5k
cm9pZC9hcGktbGV2ZWwuaD4KLSNlbGlmIGRlZmluZWQoX19uYXRpdmVfY2xpZW50X18pCi0jICAg
ZGVmaW5lIFVfUExBVEZPUk0gVV9QRl9CUk9XU0VSX05BVElWRV9DTElFTlQKLSNlbGlmIGRlZmlu
ZWQobGludXgpIHx8IGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fbGludXgpCi0jICAg
ZGVmaW5lIFVfUExBVEZPUk0gVV9QRl9MSU5VWAotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pICYm
IGRlZmluZWQoX19NQUNIX18pCi0jICAgaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+Ci0j
ICAgaWYgZGVmaW5lZChUQVJHRVRfT1NfSVBIT05FKSAmJiBUQVJHRVRfT1NfSVBIT05FICAvKiB2
YXJpYW50IG9mIFRBUkdFVF9PU19NQUMgKi8KLSMgICAgICAgZGVmaW5lIFVfUExBVEZPUk0gVV9Q
Rl9JUEhPTkUKLSMgICBlbHNlCi0jICAgICAgIGRlZmluZSBVX1BMQVRGT1JNIFVfUEZfREFSV0lO
Ci0jICAgZW5kaWYKLSNlbGlmIGRlZmluZWQoQlNEKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8
fCBkZWZpbmVkKF9fRnJlZUJTRF9rZXJuZWxfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBk
ZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fTWlyQlNEX18pCi0jICAgZGVmaW5lIFVf
UExBVEZPUk0gVV9QRl9CU0QKLSNlbGlmIGRlZmluZWQoc3VuKSB8fCBkZWZpbmVkKF9fc3VuKQot
ICAgIC8qIENoZWNrIGRlZmluZWQoX19TVlI0KSB8fCBkZWZpbmVkKF9fc3ZyNF9fKSB0byBkaXN0
aW5ndWlzaCBTb2xhcmlzIGZyb20gU3VuT1M/ICovCi0jICAgZGVmaW5lIFVfUExBVEZPUk0gVV9Q
Rl9TT0xBUklTCi0jICAgaWYgZGVmaW5lZChfX0dOVUNfXykKLSAgICAgICAgLyogU29sYXJpcy9H
Q0MgbmVlZHMgdGhpcyBoZWFkZXIgZmlsZSB0byBnZXQgdGhlIHByb3BlciBlbmRpYW5uZXNzLiBO
b3JtYWxseSwgdGhpcwotICAgICAgICAgKiBoZWFkZXIgZmlsZSBpcyBpbmNsdWRlZCB3aXRoIHN0
ZGRlZi5oIGJ1dCBvbiBTb2xhaXJzL0dDQywgdGhlIEdDQyB2ZXJzaW9uIG9mIHN0ZGRlZi5oCi0g
ICAgICAgICAqICBpcyBpbmNsdWRlZCB3aGljaCBkb2VzIG5vdCBpbmNsdWRlIHRoaXMgaGVhZGVy
IGZpbGUuCi0gICAgICAgICAqLwotIyAgICAgICBpbmNsdWRlIDxzeXMvaXNhX2RlZnMuaD4KLSMg
ICBlbmRpZgotI2VsaWYgZGVmaW5lZChfQUlYKSB8fCBkZWZpbmVkKF9fVE9TX0FJWF9fKQotIyAg
IGRlZmluZSBVX1BMQVRGT1JNIFVfUEZfQUlYCi0jZWxpZiBkZWZpbmVkKF9ocHV4KSB8fCBkZWZp
bmVkKGhwdXgpIHx8IGRlZmluZWQoX19ocHV4KQotIyAgIGRlZmluZSBVX1BMQVRGT1JNIFVfUEZf
SFBVWAotI2VsaWYgZGVmaW5lZChzZ2kpIHx8IGRlZmluZWQoX19zZ2kpCi0jICAgZGVmaW5lIFVf
UExBVEZPUk0gVV9QRl9JUklYCi0jZWxpZiBkZWZpbmVkKF9fUU5YX18pIHx8IGRlZmluZWQoX19R
TlhOVE9fXykKLSMgICBkZWZpbmUgVV9QTEFURk9STSBVX1BGX1FOWAotI2VsaWYgZGVmaW5lZChf
X1RPU19NVlNfXykKLSMgICBkZWZpbmUgVV9QTEFURk9STSBVX1BGX09TMzkwCi0jZWxpZiBkZWZp
bmVkKF9fT1M0MDBfXykgfHwgZGVmaW5lZChfX1RPU19PUzQwMF9fKQotIyAgIGRlZmluZSBVX1BM
QVRGT1JNIFVfUEZfT1M0MDAKLSNlbHNlCi0jICAgZGVmaW5lIFVfUExBVEZPUk0gVV9QRl9VTktO
T1dOCi0jZW5kaWYKLQotLyoqCi0gKiBcZGVmIENZR1dJTk1TVkMKLSAqIERlZmluZWQgaWYgdGhp
cyBpcyBXaW5kb3dzIHdpdGggQ3lnd2luLCBidXQgdXNpbmcgTVNWQyByYXRoZXIgdGhhbiBnY2Mu
Ci0gKiBPdGhlcndpc2UgdW5kZWZpbmVkLgotICogQGludGVybmFsCi0gKi8KLS8qIENvbW1lbnRl
ZCBvdXQgYmVjYXVzZSB0aGlzIGlzIGFscmVhZHkgc2V0IGluIG1oLWN5Z3dpbi1tc3ZjCi0jaWYg
VV9QTEFURk9STSA9PSBVX1BGX0NZR1dJTiAmJiBkZWZpbmVkKF9NU0NfVkVSKQotIyAgIGRlZmlu
ZSBDWUdXSU5NU1ZDCi0jZW5kaWYKLSovCi0KLS8qKgotICogXGRlZiBVX1BMQVRGT1JNX1VTRVNf
T05MWV9XSU4zMl9BUEkKLSAqIERlZmluZXMgd2hldGhlciB0aGUgcGxhdGZvcm0gdXNlcyBvbmx5
IHRoZSBXaW4zMiBBUEkuCi0gKiBTZXQgdG8gMSBmb3IgV2luZG93cy9NU1ZDIGFuZCBNaW5HVyBi
dXQgbm90IEN5Z3dpbi4KLSAqIEBpbnRlcm5hbAotICovCi0jaWZkZWYgVV9QTEFURk9STV9VU0VT
X09OTFlfV0lOMzJfQVBJCi0gICAgLyogVXNlIHRoZSBwcmVkZWZpbmVkIHZhbHVlLiAqLwotI2Vs
aWYgKFVfUEZfV0lORE9XUyA8PSBVX1BMQVRGT1JNICYmIFVfUExBVEZPUk0gPD0gVV9QRl9NSU5H
VykgfHwgZGVmaW5lZChDWUdXSU5NU1ZDKQotIyAgIGRlZmluZSBVX1BMQVRGT1JNX1VTRVNfT05M
WV9XSU4zMl9BUEkgMQotI2Vsc2UKLSAgICAvKiBDeWd3aW4gaW1wbGVtZW50cyBQT1NJWC4gKi8K
LSMgICBkZWZpbmUgVV9QTEFURk9STV9VU0VTX09OTFlfV0lOMzJfQVBJIDAKLSNlbmRpZgotCi0v
KioKLSAqIFxkZWYgVV9QTEFURk9STV9IQVNfV0lOMzJfQVBJCi0gKiBEZWZpbmVzIHdoZXRoZXIg
dGhlIFdpbjMyIEFQSSBpcyBhdmFpbGFibGUgb24gdGhlIHBsYXRmb3JtLgotICogU2V0IHRvIDEg
Zm9yIFdpbmRvd3MvTVNWQywgTWluR1cgYW5kIEN5Z3dpbi4KLSAqIEBpbnRlcm5hbAotICovCi0j
aWZkZWYgVV9QTEFURk9STV9IQVNfV0lOMzJfQVBJCi0gICAgLyogVXNlIHRoZSBwcmVkZWZpbmVk
IHZhbHVlLiAqLwotI2VsaWYgVV9QRl9XSU5ET1dTIDw9IFVfUExBVEZPUk0gJiYgVV9QTEFURk9S
TSA8PSBVX1BGX0NZR1dJTgotIyAgIGRlZmluZSBVX1BMQVRGT1JNX0hBU19XSU4zMl9BUEkgMQot
I2Vsc2UKLSMgICBkZWZpbmUgVV9QTEFURk9STV9IQVNfV0lOMzJfQVBJIDAKLSNlbmRpZgotCi0v
KioKLSAqIFxkZWYgVV9QTEFURk9STV9JTVBMRU1FTlRTX1BPU0lYCi0gKiBEZWZpbmVzIHdoZXRo
ZXIgdGhlIHBsYXRmb3JtIGltcGxlbWVudHMgKG1vc3Qgb2YpIHRoZSBQT1NJWCBBUEkuCi0gKiBT
ZXQgdG8gMSBmb3IgQ3lnd2luIGFuZCBtb3N0IG90aGVyIHBsYXRmb3Jtcy4KLSAqIEBpbnRlcm5h
bAotICovCi0jaWZkZWYgVV9QTEFURk9STV9JTVBMRU1FTlRTX1BPU0lYCi0gICAgLyogVXNlIHRo
ZSBwcmVkZWZpbmVkIHZhbHVlLiAqLwotI2VsaWYgVV9QTEFURk9STV9VU0VTX09OTFlfV0lOMzJf
QVBJCi0jICAgZGVmaW5lIFVfUExBVEZPUk1fSU1QTEVNRU5UU19QT1NJWCAwCi0jZWxzZQotIyAg
IGRlZmluZSBVX1BMQVRGT1JNX0lNUExFTUVOVFNfUE9TSVggMQotI2VuZGlmCi0KLS8qKgotICog
XGRlZiBVX1BMQVRGT1JNX0lTX0xJTlVYX0JBU0VECi0gKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHBs
YXRmb3JtIGlzIExpbnV4IG9yIG9uZSBvZiBpdHMgZGVyaXZhdGl2ZXMuCi0gKiBAaW50ZXJuYWwK
LSAqLwotI2lmZGVmIFVfUExBVEZPUk1fSVNfTElOVVhfQkFTRUQKLSAgICAvKiBVc2UgdGhlIHBy
ZWRlZmluZWQgdmFsdWUuICovCi0jZWxpZiBVX1BGX0xJTlVYIDw9IFVfUExBVEZPUk0gJiYgVV9Q
TEFURk9STSA8PSA0NDk5Ci0jICAgZGVmaW5lIFVfUExBVEZPUk1fSVNfTElOVVhfQkFTRUQgMQot
I2Vsc2UKLSMgICBkZWZpbmUgVV9QTEFURk9STV9JU19MSU5VWF9CQVNFRCAwCi0jZW5kaWYKLQot
LyoqCi0gKiBcZGVmIFVfUExBVEZPUk1fSVNfREFSV0lOX0JBU0VECi0gKiBEZWZpbmVzIHdoZXRo
ZXIgdGhlIHBsYXRmb3JtIGlzIERhcndpbiBvciBvbmUgb2YgaXRzIGRlcml2YXRpdmVzLgotICog
QGludGVybmFsCi0gKi8KLSNpZmRlZiBVX1BMQVRGT1JNX0lTX0RBUldJTl9CQVNFRAotICAgIC8q
IFVzZSB0aGUgcHJlZGVmaW5lZCB2YWx1ZS4gKi8KLSNlbGlmIFVfUEZfREFSV0lOIDw9IFVfUExB
VEZPUk0gJiYgVV9QTEFURk9STSA8PSBVX1BGX0lQSE9ORQotIyAgIGRlZmluZSBVX1BMQVRGT1JN
X0lTX0RBUldJTl9CQVNFRCAxCi0jZWxzZQotIyAgIGRlZmluZSBVX1BMQVRGT1JNX0lTX0RBUldJ
Tl9CQVNFRCAwCi0jZW5kaWYKLQotLyoqCi0gKiBcZGVmIFVfSEFWRV9TVERJTlRfSAotICogRGVm
aW5lcyB3aGV0aGVyIHN0ZGludC5oIGlzIGF2YWlsYWJsZS4gSXQgaXMgYSBDOTkgc3RhbmRhcmQg
aGVhZGVyLgotICogV2UgdXNlZCB0byBpbmNsdWRlIGludHR5cGVzLmggd2hpY2ggaW5jbHVkZXMg
c3RkaW50LmggYnV0IHdlIHVzdWFsbHkgZG8gbm90IG5lZWQKLSAqIHRoZSBhZGRpdGlvbmFsIGRl
ZmluaXRpb25zIGZyb20gaW50dHlwZXMuaC4KLSAqIEBpbnRlcm5hbAotICovCi0jaWZkZWYgVV9I
QVZFX1NURElOVF9ICi0gICAgLyogVXNlIHRoZSBwcmVkZWZpbmVkIHZhbHVlLiAqLwotI2VsaWYg
VV9QTEFURk9STV9VU0VTX09OTFlfV0lOMzJfQVBJCi0jICAgaWYgZGVmaW5lZChfX0JPUkxBTkRD
X18pIHx8IFVfUExBVEZPUk0gPT0gVV9QRl9NSU5HVyB8fCAoZGVmaW5lZChfTVNDX1ZFUikgJiYg
X01TQ19WRVI+PTE2MDApCi0gICAgICAgIC8qIFdpbmRvd3MgVmlzdWFsIFN0dWRpbyA5IGFuZCBi
ZWxvdyBkbyBub3QgaGF2ZSBzdGRpbnQuaCAmIGludHR5cGVzLmgsIGJ1dCBWUyAyMDEwIGFkZHMg
dGhlbS4gKi8KLSMgICAgICAgZGVmaW5lIFVfSEFWRV9TVERJTlRfSCAxCi0jICAgZWxzZQotIyAg
ICAgICBkZWZpbmUgVV9IQVZFX1NURElOVF9IIDAKLSMgICBlbmRpZgotI2VsaWYgVV9QTEFURk9S
TSA9PSBVX1BGX1NPTEFSSVMKLSAgICAvKiBTb2xhcmlzIGhhcyBpbnR0eXBlcy5oIGJ1dCBub3Qg
c3RkaW50LmguICovCi0jICAgZGVmaW5lIFVfSEFWRV9TVERJTlRfSCAwCi0jZWxpZiBVX1BMQVRG
T1JNID09IFVfUEZfQUlYICYmICFkZWZpbmVkKF9BSVg1MSkgJiYgZGVmaW5lZChfUE9XRVIpCi0g
ICAgLyogUFBDIEFJWCA8PSA0LjMgaGFzIGludHR5cGVzLmggYnV0IG5vdCBzdGRpbnQuaC4gKi8K
LSMgICBkZWZpbmUgVV9IQVZFX1NURElOVF9IIDAKLSNlbHNlCi0jICAgZGVmaW5lIFVfSEFWRV9T
VERJTlRfSCAxCi0jZW5kaWYKLQotLyoqCi0gKiBcZGVmIFVfSEFWRV9JTlRUWVBFU19ICi0gKiBE
ZWZpbmVzIHdoZXRoZXIgaW50dHlwZXMuaCBpcyBhdmFpbGFibGUuIEl0IGlzIGEgQzk5IHN0YW5k
YXJkIGhlYWRlci4KLSAqIFdlIGluY2x1ZGUgaW50dHlwZXMuaCB3aGVyZSBpdCBpcyBhdmFpbGFi
bGUgYnV0IHN0ZGludC5oIGlzIG5vdC4KLSAqIEBpbnRlcm5hbAotICovCi0jaWZkZWYgVV9IQVZF
X0lOVFRZUEVTX0gKLSAgICAvKiBVc2UgdGhlIHByZWRlZmluZWQgdmFsdWUuICovCi0jZWxpZiBV
X1BMQVRGT1JNID09IFVfUEZfU09MQVJJUwotICAgIC8qIFNvbGFyaXMgaGFzIGludHR5cGVzLmgg
YnV0IG5vdCBzdGRpbnQuaC4gKi8KLSMgICBkZWZpbmUgVV9IQVZFX0lOVFRZUEVTX0ggMQotI2Vs
aWYgVV9QTEFURk9STSA9PSBVX1BGX0FJWCAmJiAhZGVmaW5lZChfQUlYNTEpICYmIGRlZmluZWQo
X1BPV0VSKQotICAgIC8qIFBQQyBBSVggPD0gNC4zIGhhcyBpbnR0eXBlcy5oIGJ1dCBub3Qgc3Rk
aW50LmguICovCi0jICAgZGVmaW5lIFVfSEFWRV9JTlRUWVBFU19IIDEKLSNlbHNlCi0gICAgLyog
TW9zdCBwbGF0Zm9ybXMgaGF2ZSBib3RoIGludHR5cGVzLmggYW5kIHN0ZGludC5oLCBvciBuZWl0
aGVyLiAqLwotIyAgIGRlZmluZSBVX0hBVkVfSU5UVFlQRVNfSCBVX0hBVkVfU1RESU5UX0gKLSNl
bmRpZgotCi0vKioKLSAqIFxkZWYgVV9JT1NUUkVBTV9TT1VSQ0UKLSAqIERlZmluZXMgd2hhdCBz
dXBwb3J0IGZvciBDKysgc3RyZWFtcyBpcyBhdmFpbGFibGUuCi0gKgotICogSWYgVV9JT1NUUkVB
TV9TT1VSQ0UgaXMgc2V0IHRvIDE5OTcxMSwgdGhlbiAmbHQ7aW9zdHJlYW0mZ3Q7IGlzIGF2YWls
YWJsZQotICogKHRoZSBJU08vSUVDIEMrKyBGRElTIHdhcyBwdWJsaXNoZWQgaW4gTm92ZW1iZXIg
MTk5NyksIGFuZCB0aGVuCi0gKiBvbmUgc2hvdWxkIHF1YWxpZnkgc3RyZWFtcyB1c2luZyB0aGUg
c3RkIG5hbWVzcGFjZSBpbiBJQ1UgaGVhZGVyCi0gKiBmaWxlcy4KLSAqIFN0YXJ0aW5nIHdpdGgg
SUNVIDQ5LCB0aGlzIGlzIHRoZSBvbmx5IHN1cHBvcnRlZCB2ZXJzaW9uLgotICoKLSAqIElmIFVf
SU9TVFJFQU1fU09VUkNFIGlzIHNldCB0byAxOTg1MDYsIHRoZW4gJmx0O2lvc3RyZWFtLmgmZ3Q7
IGlzCi0gKiBhdmFpbGFibGUgaW5zdGVhZCAoaW4gSnVuZSAxOTg1IFN0cm91c3RydXAgcHVibGlz
aGVkCi0gKiAiQW4gRXh0ZW5zaWJsZSBJL08gRmFjaWxpdHkgZm9yIEMrKyIgYXQgdGhlIHN1bW1l
ciBVU0VOSVggY29uZmVyZW5jZSkuCi0gKiBTdGFydGluZyB3aXRoIElDVSA0OSwgdGhpcyB2ZXJz
aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYW55IG1vcmUuCi0gKgotICogSWYgVV9JT1NUUkVBTV9TT1VS
Q0UgaXMgMCAob3IgYW55IHZhbHVlIGxlc3MgdGhhbiAxOTk3MTEpLAotICogdGhlbiBDKysgc3Ry
ZWFtcyBhcmUgbm90IGF2YWlsYWJsZSBhbmQKLSAqIHN1cHBvcnQgZm9yIHRoZW0gd2lsbCBiZSBz
aWxlbnRseSBzdXBwcmVzc2VkIGluIElDVS4KLSAqCi0gKiBAaW50ZXJuYWwKLSAqLwotI2lmbmRl
ZiBVX0lPU1RSRUFNX1NPVVJDRQotI2RlZmluZSBVX0lPU1RSRUFNX1NPVVJDRSAxOTk3MTEKLSNl
bmRpZgotCi0vKioKLSAqIFxkZWYgVV9IQVZFX1NURF9TVFJJTkcKLSAqIERlZmluZXMgd2hldGhl
ciB0aGUgc3RhbmRhcmQgQysrIChTVEwpICZsdDtzdHJpbmcmZ3Q7IGhlYWRlciBpcyBhdmFpbGFi
bGUuCi0gKiBAaW50ZXJuYWwKLSAqLwotI2lmZGVmIFVfSEFWRV9TVERfU1RSSU5HCi0gICAgLyog
VXNlIHRoZSBwcmVkZWZpbmVkIHZhbHVlLiAqLwotI2Vsc2UKLSMgICBkZWZpbmUgVV9IQVZFX1NU
RF9TVFJJTkcgMQotI2VuZGlmCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qKiBAeyBDb21w
aWxlciBhbmQgZW52aXJvbm1lbnQgZmVhdHVyZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotLyoqCi0gKiBcZGVmIFVfR0ND
X01BSk9SX01JTk9SCi0gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29tcGlsZXIgaXMgZ2NjICh0
ZXN0IGZvciAhPSAwKSwKLSAqIGFuZCBpZiBzbywgY29udGFpbnMgaXRzIG1ham9yICh0aW1lcyAx
MDApIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMuCi0gKiBJZiB0aGUgY29tcGlsZXIgaXMgbm90
IGdjYywgdGhlbiBVX0dDQ19NQUpPUl9NSU5PUiA9PSAwLgotICoKLSAqIEZvciBleGFtcGxlLCBm
b3IgdGVzdGluZyBmb3Igd2hldGhlciB3ZSBoYXZlIGdjYywgYW5kIHdoZXRoZXIgaXQncyA0LjYg
b3IgaGlnaGVyLAotICogdXNlICIjaWYgVV9HQ0NfTUFKT1JfTUlOT1IgPj0gNDA2Ii4KLSAqIEBp
bnRlcm5hbAotICovCi0jaWZkZWYgX19HTlVDX18KLSMgICBkZWZpbmUgVV9HQ0NfTUFKT1JfTUlO
T1IgKF9fR05VQ19fICogMTAwICsgX19HTlVDX01JTk9SX18pCi0jZWxzZQotIyAgIGRlZmluZSBV
X0dDQ19NQUpPUl9NSU5PUiAwCi0jZW5kaWYKLQotLyoqCi0gKiBcZGVmIFVfSVNfQklHX0VORElB
TgotICogRGV0ZXJtaW5lcyB0aGUgZW5kaWFubmVzcyBvZiB0aGUgcGxhdGZvcm0uCi0gKiBAaW50
ZXJuYWwKLSAqLwotI2lmZGVmIFVfSVNfQklHX0VORElBTgotICAgIC8qIFVzZSB0aGUgcHJlZGVm
aW5lZCB2YWx1ZS4gKi8KLSNlbGlmIGRlZmluZWQoQllURV9PUkRFUikgJiYgZGVmaW5lZChCSUdf
RU5ESUFOKQotIyAgIGRlZmluZSBVX0lTX0JJR19FTkRJQU4gKEJZVEVfT1JERVIgPT0gQklHX0VO
RElBTikKLSNlbGlmIGRlZmluZWQoX19CWVRFX09SREVSX18pICYmIGRlZmluZWQoX19PUkRFUl9C
SUdfRU5ESUFOX18pCi0gICAgLyogZ2NjICovCi0jICAgZGVmaW5lIFVfSVNfQklHX0VORElBTiAo
X19CWVRFX09SREVSX18gPT0gX19PUkRFUl9CSUdfRU5ESUFOX18pCi0jZWxpZiBkZWZpbmVkKF9f
QklHX0VORElBTl9fKSB8fCBkZWZpbmVkKF9CSUdfRU5ESUFOKQotIyAgIGRlZmluZSBVX0lTX0JJ
R19FTkRJQU4gMQotI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykgfHwgZGVmaW5lZChf
TElUVExFX0VORElBTikKLSMgICBkZWZpbmUgVV9JU19CSUdfRU5ESUFOIDAKLSNlbGlmIFVfUExB
VEZPUk0gPT0gVV9QRl9PUzM5MCB8fCBVX1BMQVRGT1JNID09IFVfUEZfT1M0MDAgfHwgZGVmaW5l
ZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pCi0gICAgLyogVGhlc2UgcGxhdGZvcm1z
IGRvIG5vdCBhcHBlYXIgdG8gcHJlZGVmaW5lIGFueSBlbmRpYW5uZXNzIG1hY3Jvcy4gKi8KLSMg
ICBkZWZpbmUgVV9JU19CSUdfRU5ESUFOIDEKLSNlbGlmIGRlZmluZWQoX1BBX1JJU0MxXzApIHx8
IGRlZmluZWQoX1BBX1JJU0MxXzEpIHx8IGRlZmluZWQoX1BBX1JJU0MyXzApCi0gICAgLyogSFBQ
QSBkbyBub3QgYXBwZWFyIHRvIHByZWRlZmluZSBhbnkgZW5kaWFubmVzcyBtYWNyb3MuICovCi0j
ICAgZGVmaW5lIFVfSVNfQklHX0VORElBTiAxCi0jZWxpZiBkZWZpbmVkKHNwYXJjKSB8fCBkZWZp
bmVkKF9fc3BhcmMpIHx8IGRlZmluZWQoX19zcGFyY19fKQotICAgIC8qIFNvbWUgc3BhcmMgYmFz
ZWQgc3lzdGVtcyAoZS5nLiBMaW51eCkgZG8gbm90IHByZWRlZmluZSBhbnkgZW5kaWFubmVzcyBt
YWNyb3MuICovCi0jICAgZGVmaW5lIFVfSVNfQklHX0VORElBTiAxCi0jZWxzZQotIyAgIGRlZmlu
ZSBVX0lTX0JJR19FTkRJQU4gMAotI2VuZGlmCi0KLS8qKgotICogXGRlZiBVX0hBVkVfUExBQ0VN
RU5UX05FVwotICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIG92ZXJyaWRlIHBsYWNlbWVudCBuZXcg
YW5kIGRlbGV0ZSBmb3IgU1RMLgotICogQHN0YWJsZSBJQ1UgMi42Ci0gKi8KLSNpZmRlZiBVX0hB
VkVfUExBQ0VNRU5UX05FVwotICAgIC8qIFVzZSB0aGUgcHJlZGVmaW5lZCB2YWx1ZS4gKi8KLSNl
bGlmIGRlZmluZWQoX19CT1JMQU5EQ19fKQotIyAgIGRlZmluZSBVX0hBVkVfUExBQ0VNRU5UX05F
VyAwCi0jZWxzZQotIyAgIGRlZmluZSBVX0hBVkVfUExBQ0VNRU5UX05FVyAxCi0jZW5kaWYKLQot
LyoqCi0gKiBcZGVmIFVfSEFWRV9ERUJVR19MT0NBVElPTl9ORVcgCi0gKiBEZWZpbmUgdGhpcyB0
byBkZWZpbmUgdGhlIE1GQyBkZWJ1ZyB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRvciBuZXcuCi0gKgot
ICogQHN0YWJsZSBJQ1UgMy40Ci0gKi8KLSNpZmRlZiBVX0hBVkVfREVCVUdfTE9DQVRJT05fTkVX
Ci0gICAgLyogVXNlIHRoZSBwcmVkZWZpbmVkIHZhbHVlLiAqLwotI2VsaWYgZGVmaW5lZChfTVND
X1ZFUikKLSMgICBkZWZpbmUgVV9IQVZFX0RFQlVHX0xPQ0FUSU9OX05FVyAxCi0jZWxzZQotIyAg
IGRlZmluZSBVX0hBVkVfREVCVUdfTE9DQVRJT05fTkVXIDAKLSNlbmRpZgotCi0vKiBDb21wYXRp
YmlsaXR5IHdpdGggbm9uIGNsYW5nIGNvbXBpbGVycyAqLwotI2lmbmRlZiBfX2hhc19hdHRyaWJ1
dGUKLSMgICAgZGVmaW5lIF9faGFzX2F0dHJpYnV0ZSh4KSAwCi0jZW5kaWYKLQotLyoqCi0gKiBc
ZGVmIFVfTUFMTE9DX0FUVFIKLSAqIEF0dHJpYnV0ZSB0byBtYXJrIGZ1bmN0aW9ucyBhcyBtYWxs
b2MtbGlrZQotICogQGludGVybmFsCi0gKi8KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dO
VUNfXz49MwotIyAgICBkZWZpbmUgVV9NQUxMT0NfQVRUUiBfX2F0dHJpYnV0ZV9fICgoX19tYWxs
b2NfXykpCi0jZWxzZQotIyAgICBkZWZpbmUgVV9NQUxMT0NfQVRUUgotI2VuZGlmCi0KLS8qKgot
ICogXGRlZiBVX0FMTE9DX1NJWkVfQVRUUgotICogQXR0cmlidXRlIHRvIHNwZWNpZnkgdGhlIHNp
emUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIgZm9yIG1hbGxvYy1saWtlIGZ1bmN0aW9ucwotICog
QGludGVybmFsCi0gKi8KLSNpZiAoZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID4gNCB8
fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSkpIHx8IF9faGFzX2F0dHJp
YnV0ZShhbGxvY19zaXplKQotIyAgIGRlZmluZSBVX0FMTE9DX1NJWkVfQVRUUihYKSBfX2F0dHJp
YnV0ZV9fICgoYWxsb2Nfc2l6ZShYKSkpCi0jICAgZGVmaW5lIFVfQUxMT0NfU0laRV9BVFRSMihY
LFkpIF9fYXR0cmlidXRlX18gKChhbGxvY19zaXplKFgsWSkpKQotI2Vsc2UKLSMgICBkZWZpbmUg
VV9BTExPQ19TSVpFX0FUVFIoWCkKLSMgICBkZWZpbmUgVV9BTExPQ19TSVpFX0FUVFIyKFgsWSkK
LSNlbmRpZgotCi0vKiogQH0gKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyoqIEB7IENo
YXJhY3RlciBkYXRhIHR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKioKLSAqIFVfQ0hBUlNF
VF9GQU1JTFkgaXMgZXF1YWwgdG8gdGhpcyB2YWx1ZSB3aGVuIHRoZSBwbGF0Zm9ybSBpcyBhbiBB
U0NJSSBiYXNlZCBwbGF0Zm9ybS4KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi0jZGVmaW5lIFVf
QVNDSUlfRkFNSUxZIDAKLQotLyoqCi0gKiBVX0NIQVJTRVRfRkFNSUxZIGlzIGVxdWFsIHRvIHRo
aXMgdmFsdWUgd2hlbiB0aGUgcGxhdGZvcm0gaXMgYW4gRUJDRElDIGJhc2VkIHBsYXRmb3JtLgot
ICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLSNkZWZpbmUgVV9FQkNESUNfRkFNSUxZIDEKLQotLyoq
Ci0gKiBcZGVmIFVfQ0hBUlNFVF9GQU1JTFkKLSAqCi0gKiA8cD5UaGVzZSBkZWZpbml0aW9ucyBh
bGxvdyB0byBzcGVjaWZ5IHRoZSBlbmNvZGluZyBvZiB0ZXh0Ci0gKiBpbiB0aGUgY2hhciBkYXRh
IHR5cGUgYXMgZGVmaW5lZCBieSB0aGUgcGxhdGZvcm0gYW5kIHRoZSBjb21waWxlci4KLSAqIEl0
IGlzIGVub3VnaCB0byBkZXRlcm1pbmUgdGhlIGNvZGUgcG9pbnQgdmFsdWVzIG9mICJpbnZhcmlh
bnQgY2hhcmFjdGVycyIsCi0gKiB3aGljaCBhcmUgdGhlIG9uZXMgc2hhcmVkIGJ5IGFsbCBlbmNv
ZGluZ3MgdGhhdCBhcmUgaW4gdXNlCi0gKiBvbiBhIGdpdmVuIHBsYXRmb3JtLjwvcD4KLSAqCi0g
KiA8cD5UaG9zZSAiaW52YXJpYW50IGNoYXJhY3RlcnMiIHNob3VsZCBiZSBhbGwgdGhlIHVwcGVy
Y2FzZSBhbmQgbG93ZXJjYXNlCi0gKiBsYXRpbiBsZXR0ZXJzLCB0aGUgZGlnaXRzLCB0aGUgc3Bh
Y2UsIGFuZCAiYmFzaWMgcHVuY3R1YXRpb24iLgotICogQWxzbywgJ1xcbicsICdcXHInLCAnXFx0
JyBzaG91bGQgYmUgYXZhaWxhYmxlLjwvcD4KLSAqCi0gKiA8cD5UaGUgbGlzdCBvZiAiaW52YXJp
YW50IGNoYXJhY3RlcnMiIGlzOjxicj4KLSAqIFxjb2RlCi0gKiAgICBBLVogIGEteiAgMC05ICBT
UEFDRSAgIiAgJSAgJmFtcDsgICcgICggICkgICogICsgICwgIC0gIC4gIC8gIDogIDsgIDwgID0g
ID4gID8gIF8KLSAqIFxlbmRjb2RlCi0gKiA8YnI+Ci0gKiAoNTIgbGV0dGVycyArIDEwIG51bWJl
cnMgKyAyMCBwdW5jL3N5bS9zcGFjZSA9IDgyIHRvdGFsKTwvcD4KLSAqCi0gKiA8cD5UaGlzIG1h
dGNoZXMgdGhlIElCTSBTeW50YWN0aWMgQ2hhcmFjdGVyIFNldCAoQ1MgNjQwKS48L3A+Ci0gKgot
ICogPHA+SW4gb3RoZXIgd29yZHMsIGFsbCB0aGUgZ3JhcGhpYyBjaGFyYWN0ZXJzIGluIDctYml0
IEFTQ0lJIHNob3VsZAotICogYmUgc2FmZWx5IGFjY2Vzc2libGUgZXhjZXB0IHRoZSBmb2xsb3dp
bmc6PC9wPgotICoKLSAqIFxjb2RlCi0gKiAgICAnXCcgPGJhY2tzbGFzaD4KLSAqICAgICdbJyA8
bGVmdCBicmFja2V0PgotICogICAgJ10nIDxyaWdodCBicmFja2V0PgotICogICAgJ3snIDxsZWZ0
IGJyYWNlPgotICogICAgJ30nIDxyaWdodCBicmFjZT4KLSAqICAgICdeJyA8Y2lyY3VtZmxleD4K
LSAqICAgICd+JyA8dGlsZGU+Ci0gKiAgICAnIScgPGV4Y2xhbWF0aW9uIG1hcms+Ci0gKiAgICAn
IycgPG51bWJlciBzaWduPgotICogICAgJ3wnIDx2ZXJ0aWNhbCBsaW5lPgotICogICAgJyQnIDxk
b2xsYXIgc2lnbj4KLSAqICAgICdAJyA8Y29tbWVyY2lhbCBhdD4KLSAqICAgICdgJyA8Z3JhdmUg
YWNjZW50PgotICogXGVuZGNvZGUKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi0jaWZkZWYgVV9D
SEFSU0VUX0ZBTUlMWQotICAgIC8qIFVzZSB0aGUgcHJlZGVmaW5lZCB2YWx1ZS4gKi8KLSNlbGlm
IFVfUExBVEZPUk0gPT0gVV9QRl9PUzM5MCAmJiAoIWRlZmluZWQoX19DSEFSU0VUX0xJQikgfHwg
IV9fQ0hBUlNFVF9MSUIpCi0jICAgZGVmaW5lIFVfQ0hBUlNFVF9GQU1JTFkgVV9FQkNESUNfRkFN
SUxZCi0jZWxpZiBVX1BMQVRGT1JNID09IFVfUEZfT1M0MDAgJiYgIWRlZmluZWQoX19VVEYzMl9f
KQotIyAgIGRlZmluZSBVX0NIQVJTRVRfRkFNSUxZIFVfRUJDRElDX0ZBTUlMWQotI2Vsc2UKLSMg
ICBkZWZpbmUgVV9DSEFSU0VUX0ZBTUlMWSBVX0FTQ0lJX0ZBTUlMWQotI2VuZGlmCi0KLS8qKgot
ICogXGRlZiBVX0NIQVJTRVRfSVNfVVRGOAotICoKLSAqIEhhcmRjb2RlIHRoZSBkZWZhdWx0IGNo
YXJzZXQgdG8gVVRGLTguCi0gKgotICogSWYgdGhpcyBpcyBzZXQgdG8gMSwgdGhlbgotICogLSBJ
Q1Ugd2lsbCBhc3N1bWUgdGhhdCBhbGwgbm9uLWludmFyaWFudCBjaGFyKiwgU3RyaW5nUGllY2Us
IHN0ZDo6c3RyaW5nIGV0Yy4KLSAqICAgY29udGFpbiBVVEYtOCB0ZXh0LCByZWdhcmRsZXNzIG9m
IHdoYXQgdGhlIHN5c3RlbSBBUEkgdXNlcwotICogLSBzb21lIElDVSBjb2RlIHdpbGwgdXNlIGZh
c3QgZnVuY3Rpb25zIGxpa2UgdV9zdHJGcm9tVVRGOCgpCi0gKiAgIHJhdGhlciB0aGFuIHRoZSBt
b3JlIGdlbmVyYWwgYW5kIG1vcmUgaGVhdnktd2VpZ2h0IGNvbnZlcnNpb24gQVBJICh1Y252Lmgp
Ci0gKiAtIHVjbnZfZ2V0RGVmYXVsdE5hbWUoKSBhbHdheXMgcmV0dXJucyAiVVRGLTgiCi0gKiAt
IHVjbnZfc2V0RGVmYXVsdE5hbWUoKSBpcyBkaXNhYmxlZCBhbmQgd2lsbCBub3QgY2hhbmdlIHRo
ZSBkZWZhdWx0IGNoYXJzZXQKLSAqIC0gc3RhdGljIGJ1aWxkcyBvZiBJQ1UgYXJlIHNtYWxsZXIK
LSAqIC0gbW9yZSBmdW5jdGlvbmFsaXR5IGlzIGF2YWlsYWJsZSB3aXRoIHRoZSBVQ09ORklHX05P
X0NPTlZFUlNJT04gYnVpbGQtdGltZQotICogICBjb25maWd1cmF0aW9uIG9wdGlvbiAoc2VlIHVu
aWNvZGUvdWNvbmZpZy5oKQotICogLSB0aGUgVUNPTkZJR19OT19DT05WRVJTSU9OIGJ1aWxkIG9w
dGlvbiBpbiB1Y29uZmlnLmggaXMgbW9yZSB1c2FibGUKLSAqCi0gKiBAc3RhYmxlIElDVSA0LjIK
LSAqIEBzZWUgVUNPTkZJR19OT19DT05WRVJTSU9OCi0gKi8KLSNpZmRlZiBVX0NIQVJTRVRfSVNf
VVRGOAotICAgIC8qIFVzZSB0aGUgcHJlZGVmaW5lZCB2YWx1ZS4gKi8KLSNlbGlmIFVfUExBVEZP
Uk0gPT0gVV9QRl9BTkRST0lEIHx8IFVfUExBVEZPUk1fSVNfREFSV0lOX0JBU0VECi0jICAgZGVm
aW5lIFVfQ0hBUlNFVF9JU19VVEY4IDEKLSNlbHNlCi0jICAgZGVmaW5lIFVfQ0hBUlNFVF9JU19V
VEY4IDAKLSNlbmRpZgotCi0vKiogQH0gKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyoq
IEB7IEluZm9ybWF0aW9uIGFib3V0IHdjaGFyIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKioKLSAqIFxk
ZWYgVV9IQVZFX1dDSEFSX0gKLSAqIEluZGljYXRlcyB3aGV0aGVyIDx3Y2hhci5oPiBpcyBhdmFp
bGFibGUgKDEpIG9yIG5vdCAoMCkuIFNldCB0byAxIGJ5IGRlZmF1bHQuCi0gKgotICogQHN0YWJs
ZSBJQ1UgMi4wCi0gKi8KLSNpZmRlZiBVX0hBVkVfV0NIQVJfSAotICAgIC8qIFVzZSB0aGUgcHJl
ZGVmaW5lZCB2YWx1ZS4gKi8KLSNlbGlmIFVfUExBVEZPUk0gPT0gVV9QRl9BTkRST0lEICYmIF9f
QU5EUk9JRF9BUElfXyA8IDkKLSAgICAvKgotICAgICAqIEFuZHJvaWQgYmVmb3JlIEdpbmdlcmJy
ZWFkIChBbmRyb2lkIDIuMywgQVBJIGxldmVsIDkpIGRpZCBub3Qgc3VwcG9ydCB3Y2hhcl90Lgot
ICAgICAqIFRoZSB0eXBlIGFuZCBoZWFkZXIgZXhpc3RlZCwgYnV0IHRoZSBsaWJyYXJ5IGZ1bmN0
aW9ucyBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuCi0gICAgICogVGhlIHNpemUgb2Ygd2NoYXJf
dCB3YXMgMSBidXQgTCJ4eXoiIHN0cmluZyBsaXRlcmFscyBoYWQgMzItYml0IHVuaXRzIGFueXdh
eS4KLSAgICAgKi8KLSMgICBkZWZpbmUgVV9IQVZFX1dDSEFSX0ggMAotI2Vsc2UKLSMgICBkZWZp
bmUgVV9IQVZFX1dDSEFSX0ggMQotI2VuZGlmCi0KLS8qKgotICogXGRlZiBVX1NJWkVPRl9XQ0hB
Ul9UCi0gKiBVX1NJWkVPRl9XQ0hBUl9UPT1zaXplb2Yod2NoYXJfdCkKLSAqCi0gKiBAc3RhYmxl
IElDVSAyLjAKLSAqLwotI2lmZGVmIFVfU0laRU9GX1dDSEFSX1QKLSAgICAvKiBVc2UgdGhlIHBy
ZWRlZmluZWQgdmFsdWUuICovCi0jZWxpZiAoVV9QTEFURk9STSA9PSBVX1BGX0FORFJPSUQgJiYg
X19BTkRST0lEX0FQSV9fIDwgOSkKLSAgICAvKgotICAgICAqIENsYXNzaWMgTWFjIE9TIGFuZCBN
YWMgT1MgWCBiZWZvcmUgMTAuMyAoUGFudGhlcikgZGlkIG5vdCBzdXBwb3J0IHdjaGFyX3Qgb3Ig
d3N0cmluZy4KLSAgICAgKiBOZXdlciBNYWMgT1MgWCBoYXMgc2l6ZSA0LgotICAgICAqLwotIyAg
IGRlZmluZSBVX1NJWkVPRl9XQ0hBUl9UIDEKLSNlbGlmIFVfUExBVEZPUk1fSEFTX1dJTjMyX0FQ
SSB8fCBVX1BMQVRGT1JNID09IFVfUEZfQ1lHV0lOCi0jICAgZGVmaW5lIFVfU0laRU9GX1dDSEFS
X1QgMgotI2VsaWYgVV9QTEFURk9STSA9PSBVX1BGX0FJWAotICAgIC8qCi0gICAgICogQUlYIDYu
MSBpbmZvcm1hdGlvbiwgc2VjdGlvbiAiV2lkZSBjaGFyYWN0ZXIgZGF0YSByZXByZXNlbnRhdGlv
biI6Ci0gICAgICogIi4uLiB0aGUgd2NoYXJfdCBkYXRhdHlwZSBpcyAzMi1iaXQgaW4gdGhlIDY0
LWJpdCBlbnZpcm9ubWVudCBhbmQKLSAgICAgKiAxNi1iaXQgaW4gdGhlIDMyLWJpdCBlbnZpcm9u
bWVudC4iCi0gICAgICogYW5kCi0gICAgICogIkFsbCBsb2NhbGVzIHVzZSBVbmljb2RlIGZvciB0
aGVpciB3aWRlIGNoYXJhY3RlciBjb2RlIHZhbHVlcyAocHJvY2VzcyBjb2RlKSwKLSAgICAgKiBl
eGNlcHQgdGhlIElCTS1ldWNUVyBjb2Rlc2V0LiIKLSAgICAgKi8KLSMgICBpZmRlZiBfXzY0QklU
X18KLSMgICAgICAgZGVmaW5lIFVfU0laRU9GX1dDSEFSX1QgNAotIyAgIGVsc2UKLSMgICAgICAg
ZGVmaW5lIFVfU0laRU9GX1dDSEFSX1QgMgotIyAgIGVuZGlmCi0jZWxpZiBVX1BMQVRGT1JNID09
IFVfUEZfT1MzOTAKLSAgICAvKgotICAgICAqIHovT1MgVjFSMTEgaW5mb3JtYXRpb24gY2VudGVy
LCBzZWN0aW9uICJMUDY0IHwgSUxQMzIiOgotICAgICAqICJJbiAzMS1iaXQgbW9kZSwgdGhlIHNp
emUgb2YgbG9uZyBhbmQgcG9pbnRlcnMgaXMgNCBieXRlcyBhbmQgdGhlIHNpemUgb2Ygd2NoYXJf
dCBpcyAyIGJ5dGVzLgotICAgICAqIFVuZGVyIExQNjQsIHRoZSBzaXplIG9mIGxvbmcgYW5kIHBv
aW50ZXIgaXMgOCBieXRlcyBhbmQgdGhlIHNpemUgb2Ygd2NoYXJfdCBpcyA0IGJ5dGVzLiIKLSAg
ICAgKi8KLSMgICBpZmRlZiBfTFA2NAotIyAgICAgICBkZWZpbmUgVV9TSVpFT0ZfV0NIQVJfVCA0
Ci0jICAgZWxzZQotIyAgICAgICBkZWZpbmUgVV9TSVpFT0ZfV0NIQVJfVCAyCi0jICAgZW5kaWYK
LSNlbGlmIFVfUExBVEZPUk0gPT0gVV9QRl9PUzQwMAotIyAgIGlmIGRlZmluZWQoX19VVEYzMl9f
KQotICAgICAgICAvKgotICAgICAgICAgKiBMT0NBTEVUWVBFKCpMT0NBTEVVVEYpIGlzIHNwZWNp
ZmllZC4KLSAgICAgICAgICogV2lkZS1jaGFyYWN0ZXIgc3RyaW5ncyBhcmUgaW4gVVRGLTMyLAot
ICAgICAgICAgKiBuYXJyb3ctY2hhcmFjdGVyIHN0cmluZ3MgYXJlIGluIFVURi04LgotICAgICAg
ICAgKi8KLSMgICAgICAgZGVmaW5lIFVfU0laRU9GX1dDSEFSX1QgNAotIyAgIGVsaWYgZGVmaW5l
ZChfX1VDUzJfXykKLSAgICAgICAgLyoKLSAgICAgICAgICogTE9DQUxFVFlQRSgqTE9DQUxFVUNT
MikgaXMgc3BlY2lmaWVkLgotICAgICAgICAgKiBXaWRlLWNoYXJhY3RlciBzdHJpbmdzIGFyZSBp
biBVQ1MtMiwKLSAgICAgICAgICogbmFycm93LWNoYXJhY3RlciBzdHJpbmdzIGFyZSBpbiBFQkNE
SUMuCi0gICAgICAgICAqLwotIyAgICAgICBkZWZpbmUgVV9TSVpFT0ZfV0NIQVJfVCAyCi0jZWxz
ZQotICAgICAgICAvKgotICAgICAgICAgKiBMT0NBTEVUWVBFKCpDTEQpIG9yIExPQ0FMRVRZUEUo
KkxPQ0FMRSkgaXMgc3BlY2lmaWVkLgotICAgICAgICAgKiBXaWRlLWNoYXJhY3RlciBzdHJpbmdz
IGFyZSBpbiAxNi1iaXQgRUJDRElDLAotICAgICAgICAgKiBuYXJyb3ctY2hhcmFjdGVyIHN0cmlu
Z3MgYXJlIGluIEVCQ0RJQy4KLSAgICAgICAgICovCi0jICAgICAgIGRlZmluZSBVX1NJWkVPRl9X
Q0hBUl9UIDIKLSMgICBlbmRpZgotI2Vsc2UKLSMgICBkZWZpbmUgVV9TSVpFT0ZfV0NIQVJfVCA0
Ci0jZW5kaWYKLQotI2lmbmRlZiBVX0hBVkVfV0NTQ1BZCi0jZGVmaW5lIFVfSEFWRV9XQ1NDUFkg
VV9IQVZFX1dDSEFSX0gKLSNlbmRpZgotCi0vKiogQH0gKi8KLQotLyoqCi0gKiBcZGVmIFVfSEFW
RV9DSEFSMTZfVAotICogRGVmaW5lcyB3aGV0aGVyIHRoZSBjaGFyMTZfdCB0eXBlIGlzIGF2YWls
YWJsZSBmb3IgVVRGLTE2Ci0gKiBhbmQgdSJhYmMiIFVURi0xNiBzdHJpbmcgbGl0ZXJhbHMgYXJl
IHN1cHBvcnRlZC4KLSAqIFRoaXMgaXMgYSBuZXcgc3RhbmRhcmQgdHlwZSBhbmQgc3RhbmRhcmQg
c3RyaW5nIGxpdGVyYWwgc3ludGF4IGluIEMrKzB4Ci0gKiBidXQgaGFzIGJlZW4gYXZhaWxhYmxl
IGluIHNvbWUgY29tcGlsZXJzIGJlZm9yZS4KLSAqIEBpbnRlcm5hbAotICovCi0jaWZkZWYgVV9I
QVZFX0NIQVIxNl9UCi0gICAgLyogVXNlIHRoZSBwcmVkZWZpbmVkIHZhbHVlLiAqLwotI2Vsc2UK
LSAgICAvKgotICAgICAqIE5vdGVzOgotICAgICAqIFZpc3VhbCBTdHVkaW8gMTAgKF9NU0NfVkVS
Pj0xNjAwKSBkZWZpbmVzIGNoYXIxNl90IGJ1dAotICAgICAqIGRvZXMgbm90IHN1cHBvcnQgdSJh
YmMiIHN0cmluZyBsaXRlcmFscy4KLSAgICAgKiBnY2MgNC40IGRlZmluZXMgdGhlIF9fQ0hBUjE2
X1RZUEVfXyBtYWNybyB0byBhIHVzYWJsZSB0eXBlIGJ1dAotICAgICAqIGRvZXMgbm90IHN1cHBv
cnQgdSJhYmMiIHN0cmluZyBsaXRlcmFscy4KLSAgICAgKiBDKysxMSBhbmQgQzExIHJlcXVpcmUg
c3VwcG9ydCBmb3IgVVRGLTE2IGxpdGVyYWxzCi0gICAgICovCi0jICAgaWYgKGRlZmluZWQoX19j
cGx1c3BsdXMpICYmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wpIHx8IChkZWZpbmVkKF9fU1REQ19W
RVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMjAxMTEyTCkKLSMgICAgICAgZGVmaW5l
IFVfSEFWRV9DSEFSMTZfVCAxCi0jICAgZWxzZQotIyAgICAgICBkZWZpbmUgVV9IQVZFX0NIQVIx
Nl9UIDAKLSMgICBlbmRpZgotI2VuZGlmCi0KLS8qKgotICogQHsKLSAqIFxkZWYgVV9ERUNMQVJF
X1VURjE2Ci0gKiBEbyBub3QgdXNlIHRoaXMgbWFjcm8gYmVjYXVzZSBpdCBpcyBub3QgZGVmaW5l
ZCBvbiBhbGwgcGxhdGZvcm1zLgotICogVXNlIHRoZSBVTklDT0RFX1NUUklORyBvciBVX1NUUklO
R19ERUNMIG1hY3JvcyBpbnN0ZWFkLgotICogQGludGVybmFsCi0gKi8KLSNpZmRlZiBVX0RFQ0xB
UkVfVVRGMTYKLSAgICAvKiBVc2UgdGhlIHByZWRlZmluZWQgdmFsdWUuICovCi0jZWxpZiBVX0hB
VkVfQ0hBUjE2X1QgXAotICAgIHx8IChkZWZpbmVkKF9feGxDX18pICYmIGRlZmluZWQoX19JQk1f
VVRGX0xJVEVSQUwpICYmIFVfU0laRU9GX1dDSEFSX1QgIT0gMikgXAotICAgIHx8IChkZWZpbmVk
KF9fSFBfYUNDKSAmJiBfX0hQX2FDQyA+PSAwMzUwMDApIFwKLSAgICB8fCAoZGVmaW5lZChfX0hQ
X2NjKSAmJiBfX0hQX2NjID49IDExMTEwNikKLSMgICBkZWZpbmUgVV9ERUNMQVJFX1VURjE2KHN0
cmluZykgdSAjIyBzdHJpbmcKLSNlbGlmIFVfU0laRU9GX1dDSEFSX1QgPT0gMiBcCi0gICAgJiYg
KFVfQ0hBUlNFVF9GQU1JTFkgPT0gMCB8fCAoVV9QRl9PUzM5MCA8PSBVX1BMQVRGT1JNICYmIFVf
UExBVEZPUk0gPD0gVV9QRl9PUzQwMCAmJiBkZWZpbmVkKF9fVUNTMl9fKSkpCi0jICAgZGVmaW5l
IFVfREVDTEFSRV9VVEYxNihzdHJpbmcpIEwgIyMgc3RyaW5nCi0jZWxzZQotICAgIC8qIExlYXZl
IFVfREVDTEFSRV9VVEYxNiB1bmRlZmluZWQuIFNlZSB1bmlzdHIuaC4gKi8KLSNlbmRpZgotCi0v
KiogQH0gKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyoqIEB7IFN5bWJvbCBpbXBvcnQt
ZXhwb3J0IGNvbnRyb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
LwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0jaWZkZWYgVV9FWFBPUlQKLSAgICAvKiBVc2Ug
dGhlIHByZWRlZmluZWQgdmFsdWUuICovCi0jZWxpZiBkZWZpbmVkKFVfU1RBVElDX0lNUExFTUVO
VEFUSU9OKQotIyAgIGRlZmluZSBVX0VYUE9SVAotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykKLSMg
ICBkZWZpbmUgVV9FWFBPUlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkK
LSNlbGlmIChkZWZpbmVkKF9fU1VOUFJPX0NDKSAmJiBfX1NVTlBST19DQyA+PSAweDU1MCkgXAot
ICAgfHwgKGRlZmluZWQoX19TVU5QUk9fQykgJiYgX19TVU5QUk9fQyA+PSAweDU1MCkgCi0jICAg
ZGVmaW5lIFVfRVhQT1JUIF9fZ2xvYmFsCi0vKiNlbGlmIGRlZmluZWQoX19IUF9hQ0MpIHx8IGRl
ZmluZWQoX19IUF9jYykKLSMgICBkZWZpbmUgVV9FWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQp
Ki8KLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi0jICAgZGVmaW5lIFVfRVhQT1JUIF9fZGVjbHNw
ZWMoZGxsZXhwb3J0KQotI2Vsc2UKLSMgICBkZWZpbmUgVV9FWFBPUlQKLSNlbmRpZgotCi0vKiBV
X0NBTExDT05WIGlzIHJlbGVhdGVkIHRvIFVfRVhQT1JUMiAqLwotI2lmZGVmIFVfRVhQT1JUMgot
ICAgIC8qIFVzZSB0aGUgcHJlZGVmaW5lZCB2YWx1ZS4gKi8KLSNlbGlmIGRlZmluZWQoX01TQ19W
RVIpCi0jICAgZGVmaW5lIFVfRVhQT1JUMiBfX2NkZWNsCi0jZWxzZQotIyAgIGRlZmluZSBVX0VY
UE9SVDIKLSNlbmRpZgotCi0jaWZkZWYgVV9JTVBPUlQKLSAgICAvKiBVc2UgdGhlIHByZWRlZmlu
ZWQgdmFsdWUuICovCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotICAgIC8qIFdpbmRvd3MgbmVl
ZHMgdG8gZXhwb3J0L2ltcG9ydCBkYXRhLiAqLwotIyAgIGRlZmluZSBVX0lNUE9SVCBfX2RlY2xz
cGVjKGRsbGltcG9ydCkKLSNlbHNlCi0jICAgZGVmaW5lIFVfSU1QT1JUIAotI2VuZGlmCi0KLS8q
KgotICogXGRlZiBVX0NBTExDT05WCi0gKiBTaW1pbGFyIHRvIFVfQ0RFQ0xfQkVHSU4vVV9DREVD
TF9FTkQsIHRoaXMgcXVhbGlmaWVyIGlzIG5lY2Vzc2FyeQotICogaW4gY2FsbGJhY2sgZnVuY3Rp
b24gdHlwZWRlZnMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNhbGxpbmcgY29udmVudGlvbgotICog
aXMgY29tcGF0aWJsZS4KLSAqCi0gKiBUaGlzIGlzIG9ubHkgdXNlZCBmb3Igbm9uLUlDVS1BUEkg
ZnVuY3Rpb25zLgotICogV2hlbiBhIGZ1bmN0aW9uIGlzIGEgcHVibGljIElDVSBBUEksCi0gKiB5
b3UgbXVzdCB1c2UgdGhlIFVfQ0FQSSBhbmQgVV9FWFBPUlQyIHF1YWxpZmllcnMuCi0gKiBAc3Rh
YmxlIElDVSAyLjAKLSAqLwotI2lmIFVfUExBVEZPUk0gPT0gVV9QRl9PUzM5MCAmJiBkZWZpbmVk
KF9fY3BsdXNwbHVzKQotIyAgICBkZWZpbmUgVV9DQUxMQ09OViBfX2NkZWNsCi0jZWxzZQotIyAg
ICBkZWZpbmUgVV9DQUxMQ09OViBVX0VYUE9SVDIKLSNlbmRpZgotCi0vKiBAfSAqLwotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRl
bmNpZXMvaWN1L3VuaWNvZGUvcHR5cGVzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3B0eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiN2Y3MTE2MDMyODJjMzZjNzMyMjIwZTdhOTZjOTEzM2RkMDI1MGZlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvcHR5cGVzLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgotKgotKiAgIENvcHlyaWdodCAoQykgMTk5Ny0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNz
IE1hY2hpbmVzCi0qICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSogIEZJTEUgTkFNRSA6IHB0eXBlcy5o
Ci0qCi0qICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KLSogICAwNS8xMy85
OCAgICBub3MgICAgICAgICBDcmVhdGlvbiAoY29udGVudCBtb3ZlZCBoZXJlIGZyb20gcHR5cGVz
LmgpLgotKiAgIDAzLzAyLzk5ICAgIHN0ZXBoZW4gICAgIEFkZGVkIEFTNDAwIHN1cHBvcnQuCi0q
ICAgMDMvMzAvOTkgICAgc3RlcGhlbiAgICAgQWRkZWQgTGludXggc3VwcG9ydC4KLSogICAwNC8x
My85OSAgICBzdGVwaGVuICAgICBSZXdvcmtlZCBmb3IgYXV0b2NvbmYuCi0qICAgMDkvMTgvMDgg
ICAgc3JsICAgICAgICAgTW92ZWQgYmFzaWMgdHlwZXMgYmFjayB0byBwdHlwZXMuaCBmcm9tIHBs
YXRmb3JtLmgKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKi8KLQotLyoqCi0gKiBcZmlsZQotICog
XGJyaWVmIEMgQVBJOiBEZWZpbml0aW9ucyBvZiBpbnRlZ2VyIHR5cGVzIG9mIHZhcmlvdXMgd2lk
dGhzCi0gKi8KLQotI2lmbmRlZiBfUFRZUEVTX0gKLSNkZWZpbmUgX1BUWVBFU19ICi0KLS8qKgot
ICogXGRlZiBfX1NURENfTElNSVRfTUFDUk9TCi0gKiBBY2NvcmRpbmcgdG8gdGhlIExpbnV4IHN0
ZGludC5oLCB0aGUgSVNPIEM5OSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCBpbiBDKysgaW1wbGVt
ZW50YXRpb25zCi0gKiBtYWNyb3MgbGlrZSBJTlQzMl9NSU4gYW5kIFVJTlRQVFJfTUFYIHNob3Vs
ZCBvbmx5IGJlIGRlZmluZWQgaWYgZXhwbGljaXRseSByZXF1ZXN0ZWQuCi0gKiBXZSBuZWVkIHRv
IGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50LmggaW4g
QysrIGNvZGUKLSAqIHRoYXQgdXNlcyBzdWNoIGxpbWl0IG1hY3Jvcy4KLSAqIEBpbnRlcm5hbAot
ICovCi0jaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKLSNkZWZpbmUgX19TVERDX0xJTUlUX01B
Q1JPUwotI2VuZGlmCi0KLS8qIE5VTEwsIHNpemVfdCwgd2NoYXJfdCAqLwotI2luY2x1ZGUgPHN0
ZGRlZi5oPgotCi0vKgotICogSWYgYWxsIGNvbXBpbGVycyBwcm92aWRlZCBhbGwgb2YgdGhlIEM5
OSBoZWFkZXJzIGFuZCB0eXBlcywKLSAqIHdlIHdvdWxkIGp1c3QgdW5jb25kaXRpb25hbGx5ICNp
bmNsdWRlIDxzdGRpbnQuaD4gaGVyZQotICogYW5kIG5vdCBuZWVkIGFueSBvZiB0aGUgc3R1ZmYg
YWZ0ZXIgaW5jbHVkaW5nIHBsYXRmb3JtLmguCi0gKi8KLQotLyogRmluZCBvdXQgaWYgd2UgaGF2
ZSBzdGRpbnQuaCBldGMuICovCi0jaW5jbHVkZSAidW5pY29kZS9wbGF0Zm9ybS5oIgotCi0vKj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PSovCi0vKiBHZW5lcmljIGRhdGEgdHlwZXMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PSovCi0KLS8qIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3QgaGF2ZSB0aGUgPHN0ZGlu
dC5oPiBoZWFkZXIsIHlvdSBtYXkKLSAgIG5lZWQgdG8gZWRpdCB0aGUgdHlwZWRlZnMgaW4gdGhl
ICNlbHNlIHNlY3Rpb24gYmVsb3cuCi0gICBVc2UgI2lmLi4uI2Vsc2UuLi4jZW5kaWYgd2l0aCBw
cmVkZWZpbmVkIGNvbXBpbGVyIG1hY3JvcyBpZiBwb3NzaWJsZS4gKi8KLSNpZiBVX0hBVkVfU1RE
SU5UX0gKLQotLyoKLSAqIFdlIG1vc3RseSBuZWVkIDxzdGRpbnQuaD4gKHdoaWNoIGRlZmluZXMg
dGhlIHN0YW5kYXJkIGludGVnZXIgdHlwZXMpIGJ1dCBub3QgPGludHR5cGVzLmg+LgotICogPGlu
dHR5cGVzLmg+IGluY2x1ZGVzIDxzdGRpbnQuaD4gYW5kIGFkZHMgdGhlIHByaW50Zi9zY2FuZiBo
ZWxwZXJzIFBSSWQzMiwgU0NOeDE2IGV0Yy4KLSAqIHdoaWNoIHdlIGFsbW9zdCBuZXZlciB1c2Us
IHBsdXMgc3R1ZmYgbGlrZSBpbWF4YWJzKCkgd2hpY2ggd2UgbmV2ZXIgdXNlLgotICovCi0jaW5j
bHVkZSA8c3RkaW50Lmg+Ci0KLSNpZiBVX1BMQVRGT1JNID09IFVfUEZfT1MzOTAKLS8qIFRoZSBm
ZWF0dXJlcyBoZWFkZXIgaXMgbmVlZGVkIHRvIGdldCAodSlpbnQ2NF90IHNvbWV0aW1lcy4gKi8K
LSNpbmNsdWRlIDxmZWF0dXJlcy5oPgotLyogei9PUyBoYXMgPHN0ZGludC5oPiwgYnV0IHNvbWUg
dmVyc2lvbnMgYXJlIG1pc3NpbmcgdWludDhfdCAoQVBBUiBQSzYyMjQ4KS4gKi8KLSNpZiAhZGVm
aW5lZChfX3VpbnQ4X3QpCi0jZGVmaW5lIF9fdWludDhfdCAxCi10eXBlZGVmIHVuc2lnbmVkIGNo
YXIgdWludDhfdDsKLSNlbmRpZgotI2VuZGlmIC8qIFVfUExBVEZPUk0gPT0gVV9QRl9PUzM5MCAq
LwotCi0jZWxpZiBVX0hBVkVfSU5UVFlQRVNfSAotCi0jICAgaW5jbHVkZSA8aW50dHlwZXMuaD4K
LQotI2Vsc2UgLyogbmVpdGhlciBVX0hBVkVfU1RESU5UX0ggbm9yIFVfSEFWRV9JTlRUWVBFU19I
ICovCi0KLSNpZiAhIFVfSEFWRV9JTlQ4X1QKLXR5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90Owot
I2VuZGlmCi0KLSNpZiAhIFVfSEFWRV9VSU5UOF9UCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWlu
dDhfdDsKLSNlbmRpZgotCi0jaWYgISBVX0hBVkVfSU5UMTZfVAotdHlwZWRlZiBzaWduZWQgc2hv
cnQgaW50MTZfdDsKLSNlbmRpZgotCi0jaWYgISBVX0hBVkVfVUlOVDE2X1QKLXR5cGVkZWYgdW5z
aWduZWQgc2hvcnQgdWludDE2X3Q7Ci0jZW5kaWYKLQotI2lmICEgVV9IQVZFX0lOVDMyX1QKLXR5
cGVkZWYgc2lnbmVkIGludCBpbnQzMl90OwotI2VuZGlmCi0KLSNpZiAhIFVfSEFWRV9VSU5UMzJf
VAotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7Ci0jZW5kaWYKLQotI2lmICEgVV9IQVZF
X0lOVDY0X1QKLSNpZmRlZiBfTVNDX1ZFUgotICAgIHR5cGVkZWYgc2lnbmVkIF9faW50NjQgaW50
NjRfdDsKLSNlbHNlCi0gICAgdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludDY0X3Q7Ci0jZW5k
aWYKLSNlbmRpZgotCi0jaWYgISBVX0hBVkVfVUlOVDY0X1QKLSNpZmRlZiBfTVNDX1ZFUgotICAg
IHR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKLSNlbHNlCi0gICAgdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7Ci0jZW5kaWYKLSNlbmRpZgotCi0jZW5kaWYgLyog
VV9IQVZFX1NURElOVF9IIC8gVV9IQVZFX0lOVFRZUEVTX0ggKi8KLQotI2VuZGlmIC8qIF9QVFlQ
RVNfSCAqLwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2Rl
cGVuZGVuY2llcy9pY3UvdW5pY29kZS9wdXRpbC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS9wdXRpbC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkZjFiMTdiYWQwZjY1MzUxMGZkZjE4ZGQ0Yzc4ZWFkOTRhOGEyMjgz
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvcHV0aWwu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKgotKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCi0qCi0qICAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMTQsIEludGVybmF0aW9uYWwgQnVzaW5l
c3MgTWFjaGluZXMKLSogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiAgRklMRSBOQU1FIDogcHV0aWwu
aAotKgotKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCi0qICAgMDUvMTQv
OTggICAgbm9zICAgICAgICAgQ3JlYXRpb24gKGNvbnRlbnQgbW92ZWQgaGVyZSBmcm9tIHV0eXBl
cy5oKS4KLSogICAwNi8xNy85OSAgICBlcm0gICAgICAgICBBZGRlZCBJRUVFXzc1NAotKiAgIDA3
LzIyLzk4ICAgIHN0ZXBoZW4gICAgIEFkZGVkIElFRUVyZW1haW5kZXIsIG1heCwgbWluLCB0cnVu
YwotKiAgIDA4LzEzLzk4ICAgIHN0ZXBoZW4gICAgIEFkZGVkIGlzTmVnYXRpdmVJbmZpbml0eSwg
aXNQb3NpdGl2ZUluZmluaXR5Ci0qICAgMDgvMjQvOTggICAgc3RlcGhlbiAgICAgQWRkZWQgbG9u
Z0JpdHNGcm9tRG91YmxlCi0qICAgMDMvMDIvOTkgICAgc3RlcGhlbiAgICAgUmVtb3ZlZCBvcGVu
RmlsZSgpLiAgQWRkZWQgQVM0MDAgc3VwcG9ydC4KLSogICAwNC8xNS85OSAgICBzdGVwaGVuICAg
ICBDb252ZXJ0ZWQgdG8gQwotKiAgIDExLzE1Lzk5ICAgIGhlbGVuYSAgICAgIEludGVncmF0ZWQg
Uy8zOTAgY2hhbmdlcyBmb3IgSUVFRSBzdXBwb3J0LgotKiAgIDAxLzExLzAwICAgIGhlbGVuYSAg
ICAgIEFkZGVkIHVfZ2V0VmVyc2lvbi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKi8KLQotI2lm
bmRlZiBQVVRJTF9ICi0jZGVmaW5lIFBVVElMX0gKLQotI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVz
LmgiCi0gLyoqCi0gICogXGZpbGUKLSAgKiBcYnJpZWYgQyBBUEk6IFBsYXRmb3JtIFV0aWxpdGll
cwotICAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFBsYXRmb3JtIHV0aWxpdGllcyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwot
Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PSovCi0KLS8qKgotICogUGxhdGZvcm0gdXRpbGl0aWVzIGlzb2xh
dGVzIHRoZSBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMgb2YgdGhlCi0gKiBsaWJhcmFyeS4gIEZvciBl
YWNoIHBsYXRmb3JtIHdoaWNoIHRoaXMgY29kZSBpcyBwb3J0ZWQgdG8sIHRoZXNlCi0gKiBmdW5j
dGlvbnMgbWF5IGhhdmUgdG8gYmUgcmUtaW1wbGVtZW50ZWQuCi0gKi8KLQotLyoqCi0gKiBSZXR1
cm4gdGhlIElDVSBkYXRhIGRpcmVjdG9yeS4gCi0gKiBUaGUgZGF0YSBkaXJlY3RvcnkgaXMgd2hl
cmUgY29tbW9uIGZvcm1hdCBJQ1UgZGF0YSBmaWxlcyAoLmRhdCBmaWxlcykKLSAqICAgYXJlIGxv
YWRlZCBmcm9tLiAgTm90ZSB0aGF0IG5vcm1hbCB1c2Ugb2YgdGhlIGJ1aWx0LWluIElDVQotICog
ICBmYWNpbGl0aWVzIGRvZXMgbm90IHJlcXVpcmUgbG9hZGluZyBvZiBhbiBleHRlcm5hbCBkYXRh
IGZpbGU7Ci0gKiAgIHVubGVzcyB5b3UgYXJlIGFkZGluZyBjdXN0b20gZGF0YSB0byBJQ1UsIHRo
ZSBkYXRhIGRpcmVjdG9yeQotICogICBkb2VzIG5vdCBuZWVkIHRvIGJlIHNldC4KLSAqCi0gKiBU
aGUgZGF0YSBkaXJlY3RvcnkgaXMgZGV0ZXJtaW5lZCBhcyBmb2xsb3dzOgotICogICAgSWYgdV9z
ZXREYXRhRGlyZWN0b3J5KCkgaGFzIGJlZW4gY2FsbGVkLCB0aGF0IGlzIGl0LCBvdGhlcndpc2UK
LSAqICAgIGlmIHRoZSBJQ1VfREFUQSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIHVzZSB0
aGF0LCBvdGhlcndpc2UKLSAqICAgIElmIGEgZGF0YSBkaXJlY3Rvcnkgd2FzIHNwZWNpZmVkIGF0
IElDVSBidWlsZCB0aW1lCi0gKiAgICAgIDxjb2RlPgotICogXGNvZGUKLSAqICAgICAgICAjZGVm
aW5lIElDVV9EQVRBX0RJUiAicGF0aCIgCi0gKiBcZW5kY29kZQotICogPC9jb2RlPiB1c2UgdGhh
dCwKLSAqICAgIG90aGVyd2lzZSBubyBkYXRhIGRpcmVjdG9yeSBpcyBhdmFpbGFibGUuCi0gKgot
ICogQHJldHVybiB0aGUgZGF0YSBkaXJlY3RvcnksIG9yIGFuIGVtcHR5IHN0cmluZyAoIiIpIGlm
IG5vIGRhdGEgZGlyZWN0b3J5IGhhcwotICogICAgICAgICBiZWVuIHNwZWNpZmllZC4KLSAqICAg
Ci0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQy
IHVfZ2V0RGF0YURpcmVjdG9yeSh2b2lkKTsKLQotCi0vKiogCi0gKiBTZXQgdGhlIElDVSBkYXRh
IGRpcmVjdG9yeS4gCi0gKiBUaGUgZGF0YSBkaXJlY3RvcnkgaXMgd2hlcmUgY29tbW9uIGZvcm1h
dCBJQ1UgZGF0YSBmaWxlcyAoLmRhdCBmaWxlcykKLSAqICAgYXJlIGxvYWRlZCBmcm9tLiAgTm90
ZSB0aGF0IG5vcm1hbCB1c2Ugb2YgdGhlIGJ1aWx0LWluIElDVQotICogICBmYWNpbGl0aWVzIGRv
ZXMgbm90IHJlcXVpcmUgbG9hZGluZyBvZiBhbiBleHRlcm5hbCBkYXRhIGZpbGU7Ci0gKiAgIHVu
bGVzcyB5b3UgYXJlIGFkZGluZyBjdXN0b20gZGF0YSB0byBJQ1UsIHRoZSBkYXRhIGRpcmVjdG9y
eQotICogICBkb2VzIG5vdCBuZWVkIHRvIGJlIHNldC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNo
b3VsZCBiZSBjYWxsZWQgYXQgbW9zdCBvbmNlIGluIGEgcHJvY2VzcywgYmVmb3JlIHRoZQotICog
Zmlyc3QgSUNVIG9wZXJhdGlvbiAoZS5nLiwgdV9pbml0KCkpIHRoYXQgd2lsbCByZXF1aXJlIHRo
ZSBsb2FkaW5nIG9mIGFuCi0gKiBJQ1UgZGF0YSBmaWxlLgotICogVGhpcyBmdW5jdGlvbiBpcyBu
b3QgdGhyZWFkLXNhZmUuIFVzZSBpdCBiZWZvcmUgY2FsbGluZyBJQ1UgQVBJcyBmcm9tCi0gKiBt
dWx0aXBsZSB0aHJlYWRzLgotICoKLSAqIEBwYXJhbSBkaXJlY3RvcnkgVGhlIGRpcmVjdG9yeSB0
byBiZSBzZXQuCi0gKgotICogQHNlZSB1X2luaXQKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1V
X1NUQUJMRSB2b2lkIFVfRVhQT1JUMiB1X3NldERhdGFEaXJlY3RvcnkoY29uc3QgY2hhciAqZGly
ZWN0b3J5KTsKLQotI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJCi0vKioKLSAgKiBSZXR1cm4g
dGhlIHRpbWUgem9uZSBmaWxlcyBvdmVycmlkZSBkaXJlY3RvcnksIG9yIGFuIGVtcHR5IHN0cmlu
ZyBpZgotICAqIG5vIGRpcmVjdG9yeSB3YXMgc3BlY2lmaWVkLiBDZXJ0YWluIHRpbWUgem9uZSBy
ZXNvdXJjZXMgd2lsbCBiZSBwcmVmZXJyZW50aWFsbHkKLSAgKiBsb2FkZWQgZnJvbSBpbmRpdmlk
dWFsIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LgotICAqCi0gICogQHJldHVybiB0aGUgdGltZSB6
b25lIGRhdGEgb3ZlcnJpZGUgZGlyZWN0b3J5LgotICAqIEBpbnRlcm5hbAotICAqLyAKLVVfSU5U
RVJOQUwgY29uc3QgY2hhciAqIFVfRVhQT1JUMiB1X2dldFRpbWVab25lRmlsZXNEaXJlY3Rvcnko
VUVycm9yQ29kZSAqc3RhdHVzKTsKLQotLyoqCi0gICogU2V0IHRoZSB0aW1lIHpvbmUgZmlsZXMg
b3ZlcnJpZGUgZGlyZWN0b3J5LgotICAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IHRocmVhZCBzYWZl
OyBpdCBtdXN0IG5vdCBiZSBjYWxsZWQgY29uY3VycmVudGx5IHdpdGgKLSAgKiAgIHVfZ2V0VGlt
ZVpvbmVGaWxlc0RpcmVjdG9yeSgpIG9yIGFueSBvdGhlciB1c2Ugb2YgSUNVIHRpbWUgem9uZSBm
dW5jdGlvbnMuCi0gICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3Jl
IHVzaW5nIGFueSBJQ1Ugc2VydmljZSB0aGF0Ci0gICogICB3aWxsIGFjY2VzcyB0aGUgdGltZSB6
b25lIGRhdGEuCi0gICogQGludGVybmFsCi0gICovCi1VX0lOVEVSTkFMIHZvaWQgVV9FWFBPUlQy
IHVfc2V0VGltZVpvbmVGaWxlc0RpcmVjdG9yeShjb25zdCBjaGFyICpwYXRoLCBVRXJyb3JDb2Rl
ICpzdGF0dXMpOwotI2VuZGlmICAvKiBVX0hJREVfSU5URVJOQUxfQVBJICovCi0KLQotLyoqCi0g
KiBAewotICogRmlsZXN5c3RlbSBmaWxlIGFuZCBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzLgot
ICogRXhhbXBsZTogJy8nIGFuZCAnOicgb24gVW5peCwgJ1xcJyBhbmQgJzsnIG9uIFdpbmRvd3Mu
Ci0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotI2lmIFVfUExBVEZPUk1fVVNFU19PTkxZX1dJTjMy
X0FQSQotIyAgIGRlZmluZSBVX0ZJTEVfU0VQX0NIQVIgJ1xcJwotIyAgIGRlZmluZSBVX0ZJTEVf
QUxUX1NFUF9DSEFSICcvJwotIyAgIGRlZmluZSBVX1BBVEhfU0VQX0NIQVIgJzsnCi0jICAgZGVm
aW5lIFVfRklMRV9TRVBfU1RSSU5HICJcXCIKLSMgICBkZWZpbmUgVV9GSUxFX0FMVF9TRVBfU1RS
SU5HICIvIgotIyAgIGRlZmluZSBVX1BBVEhfU0VQX1NUUklORyAiOyIKLSNlbHNlCi0jICAgZGVm
aW5lIFVfRklMRV9TRVBfQ0hBUiAnLycKLSMgICBkZWZpbmUgVV9GSUxFX0FMVF9TRVBfQ0hBUiAn
LycKLSMgICBkZWZpbmUgVV9QQVRIX1NFUF9DSEFSICc6JwotIyAgIGRlZmluZSBVX0ZJTEVfU0VQ
X1NUUklORyAiLyIKLSMgICBkZWZpbmUgVV9GSUxFX0FMVF9TRVBfU1RSSU5HICIvIgotIyAgIGRl
ZmluZSBVX1BBVEhfU0VQX1NUUklORyAiOiIKLSNlbmRpZgotCi0vKiogQH0gKi8KLQotLyoqCi0g
KiBDb252ZXJ0IGNoYXIgY2hhcmFjdGVycyB0byBVQ2hhciBjaGFyYWN0ZXJzLgotICogVGhpcyB1
dGlsaXR5IGZ1bmN0aW9uIGlzIHVzZWZ1bCBvbmx5IGZvciAiaW52YXJpYW50IGNoYXJhY3RlcnMi
Ci0gKiB0aGF0IGFyZSBlbmNvZGVkIGluIHRoZSBwbGF0Zm9ybSBkZWZhdWx0IGVuY29kaW5nLgot
ICogVGhleSBhcmUgYSBzbWFsbCwgY29uc3RhbnQgc3Vic2V0IG9mIHRoZSBlbmNvZGluZyBhbmQg
aW5jbHVkZQotICoganVzdCB0aGUgbGF0aW4gbGV0dGVycywgZGlnaXRzLCBhbmQgc29tZSBwdW5j
dHVhdGlvbi4KLSAqIEZvciBkZXRhaWxzLCBzZWUgVV9DSEFSU0VUX0ZBTUlMWS4KLSAqCi0gKiBA
cGFyYW0gY3MgSW5wdXQgc3RyaW5nLCBwb2ludHMgdG8gPGNvZGU+bGVuZ3RoPC9jb2RlPgotICog
ICAgICAgICAgIGNoYXJhY3RlciBieXRlcyBmcm9tIGEgc3Vic2V0IG9mIHRoZSBwbGF0Zm9ybSBl
bmNvZGluZy4KLSAqIEBwYXJhbSB1cyBPdXRwdXQgc3RyaW5nLCBwb2ludHMgdG8gbWVtb3J5IGZv
ciA8Y29kZT5sZW5ndGg8L2NvZGU+Ci0gKiAgICAgICAgICAgVW5pY29kZSBjaGFyYWN0ZXJzLgot
ICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gY29udmVydDsgdGhp
cyBtYXkKLSAqICAgICAgICAgICAgICAgaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgPGNvZGU+TlVM
PC9jb2RlPi4KLSAqCi0gKiBAc2VlIFVfQ0hBUlNFVF9GQU1JTFkKLSAqIEBzdGFibGUgSUNVIDIu
MAotICovCi1VX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgotdV9jaGFyc1RvVUNoYXJzKGNvbnN0IGNo
YXIgKmNzLCBVQ2hhciAqdXMsIGludDMyX3QgbGVuZ3RoKTsKLQotLyoqCi0gKiBDb252ZXJ0IFVD
aGFyIGNoYXJhY3RlcnMgdG8gY2hhciBjaGFyYWN0ZXJzLgotICogVGhpcyB1dGlsaXR5IGZ1bmN0
aW9uIGlzIHVzZWZ1bCBvbmx5IGZvciAiaW52YXJpYW50IGNoYXJhY3RlcnMiCi0gKiB0aGF0IGNh
biBiZSBlbmNvZGVkIGluIHRoZSBwbGF0Zm9ybSBkZWZhdWx0IGVuY29kaW5nLgotICogVGhleSBh
cmUgYSBzbWFsbCwgY29uc3RhbnQgc3Vic2V0IG9mIHRoZSBlbmNvZGluZyBhbmQgaW5jbHVkZQot
ICoganVzdCB0aGUgbGF0aW4gbGV0dGVycywgZGlnaXRzLCBhbmQgc29tZSBwdW5jdHVhdGlvbi4K
LSAqIEZvciBkZXRhaWxzLCBzZWUgVV9DSEFSU0VUX0ZBTUlMWS4KLSAqCi0gKiBAcGFyYW0gdXMg
SW5wdXQgc3RyaW5nLCBwb2ludHMgdG8gPGNvZGU+bGVuZ3RoPC9jb2RlPgotICogICAgICAgICAg
IFVuaWNvZGUgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSBlbmNvZGVkIHdpdGggdGhlCi0gKiAgICAg
ICAgICAgY29kZXBhZ2UtaW52YXJpYW50IHN1YnNldCBvZiB0aGUgcGxhdGZvcm0gZW5jb2Rpbmcu
Ci0gKiBAcGFyYW0gY3MgT3V0cHV0IHN0cmluZywgcG9pbnRzIHRvIG1lbW9yeSBmb3IgPGNvZGU+
bGVuZ3RoPC9jb2RlPgotICogICAgICAgICAgIGNoYXJhY3RlciBieXRlcy4KLSAqIEBwYXJhbSBs
ZW5ndGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvbnZlcnQ7IHRoaXMgbWF5Ci0gKiAg
ICAgICAgICAgICAgIGluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nIDxjb2RlPk5VTDwvY29kZT4uCi0g
KgotICogQHNlZSBVX0NIQVJTRVRfRkFNSUxZCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9T
VEFCTEUgdm9pZCBVX0VYUE9SVDIKLXVfVUNoYXJzVG9DaGFycyhjb25zdCBVQ2hhciAqdXMsIGNo
YXIgKmNzLCBpbnQzMl90IGxlbmd0aCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS9yZXAuaCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNv
ZGUvcmVwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjN2VhZTE0MDFkY2Q2Yzk1
NDIxNTdkYmZhMGYyZmUzZWE4ZGM0ZWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVu
Y2llcy9pY3UvdW5pY29kZS9yZXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2MSArMCwwIEBACi0v
KgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKLSogQ29weXJpZ2h0IChDKSAxOTk5LTIwMTIsIEludGVybmF0
aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCi0qIG90aGVycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICAgRGF0ZSAgICAgICAgTmFtZSAg
ICAgICAgRGVzY3JpcHRpb24KLSogICAxMS8xNy85OSAgICBhbGl1ICAgICAgICBDcmVhdGlvbi4g
IFBvcnRlZCBmcm9tIGphdmEuICBNb2RpZmllZCB0bwotKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdGNoIGN1cnJlbnQgVW5pY29kZVN0cmluZyBBUEkuICBGb3JjZWQKLSogICAgICAgICAg
ICAgICAgICAgICAgICAgICB0byB1c2UgbmFtZSAiaGFuZGxlUmVwbGFjZUJldHdlZW4iIGJlY2F1
c2UKLSogICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBleGlzdGluZyBtZXRob2RzIGluIFVu
aWNvZGVTdHJpbmcuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKi8KLQotI2lmbmRlZiBSRVBfSAotI2Rl
ZmluZSBSRVBfSAotCi0jaW5jbHVkZSAidW5pY29kZS91b2JqZWN0LmgiCi0KLS8qKgotICogXGZp
bGUgCi0gKiBcYnJpZWYgQysrIEFQSTogUmVwbGFjZWFibGUgU3RyaW5nCi0gKi8KLSAKLVVfTkFN
RVNQQUNFX0JFR0lOCi0KLWNsYXNzIFVuaWNvZGVTdHJpbmc7Ci0KLS8qKgotICogPGNvZGU+UmVw
bGFjZWFibGU8L2NvZGU+IGlzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgcmVwcmVzZW50aW5nIGEK
LSAqIHN0cmluZyBvZiBjaGFyYWN0ZXJzIHRoYXQgc3VwcG9ydHMgdGhlIHJlcGxhY2VtZW50IG9m
IGEgcmFuZ2Ugb2YKLSAqIGl0c2VsZiB3aXRoIGEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzLiAg
SXQgaXMgdXNlZCBieSBBUElzIHRoYXQKLSAqIGNoYW5nZSBhIHBpZWNlIG9mIHRleHQgd2hpbGUg
cmV0YWluaW5nIG1ldGFkYXRhLiAgTWV0YWRhdGEgaXMgZGF0YQotICogb3RoZXIgdGhhbiB0aGUg
VW5pY29kZSBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IGNoYXIzMkF0KCkuICBPbmUKLSAqIGV4YW1w
bGUgb2YgbWV0YWRhdGEgaXMgc3R5bGUgYXR0cmlidXRlczsgYW5vdGhlciBpcyBhbiBlZGl0Ci0g
KiBoaXN0b3J5LCBtYXJraW5nIGVhY2ggY2hhcmFjdGVyIHdpdGggYW4gYXV0aG9yIGFuZCByZXZp
c2lvbiBudW1iZXIuCi0gKgotICogPHA+QW4gaW1wbGljaXQgYXNwZWN0IG9mIHRoZSA8Y29kZT5S
ZXBsYWNlYWJsZTwvY29kZT4gQVBJIGlzIHRoYXQKLSAqIGR1cmluZyBhIHJlcGxhY2Ugb3BlcmF0
aW9uLCBuZXcgY2hhcmFjdGVycyB0YWtlIG9uIHRoZSBtZXRhZGF0YSBvZgotICogdGhlIG9sZCBj
aGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBzdHJpbmcgInRoZSA8Yj5ib2xkPC9iPgot
ICogZm9udCIgaGFzIHJhbmdlICg0LCA4KSByZXBsYWNlZCB3aXRoICJzdHJvbmciLCB0aGVuIGl0
IGJlY29tZXMgInRoZQotICogPGI+c3Ryb25nPC9iPiBmb250Ii4KLSAqCi0gKiA8cD48Y29kZT5S
ZXBsYWNlYWJsZTwvY29kZT4gc3BlY2lmaWVzIHJhbmdlcyB1c2luZyBhIHN0YXJ0Ci0gKiBvZmZz
ZXQgYW5kIGEgbGltaXQgb2Zmc2V0LiAgVGhlIHJhbmdlIG9mIGNoYXJhY3RlcnMgdGh1cyBzcGVj
aWZpZWQKLSAqIGluY2x1ZGVzIHRoZSBjaGFyYWN0ZXJzIGF0IG9mZnNldCBzdGFydC4ubGltaXQt
MS4gIFRoYXQgaXMsIHRoZQotICogc3RhcnQgb2Zmc2V0IGlzIGluY2x1c2l2ZSwgYW5kIHRoZSBs
aW1pdCBvZmZzZXQgaXMgZXhjbHVzaXZlLgotICoKLSAqIDxwPjxjb2RlPlJlcGxhY2VhYmxlPC9j
b2RlPiBhbHNvIGluY2x1ZGVzIEFQSSB0byBhY2Nlc3MgY2hhcmFjdGVycwotICogaW4gdGhlIHN0
cmluZzogPGNvZGU+bGVuZ3RoKCk8L2NvZGU+LCA8Y29kZT5jaGFyQXQoKTwvY29kZT4sCi0gKiA8
Y29kZT5jaGFyMzJBdCgpPC9jb2RlPiwgYW5kIDxjb2RlPmV4dHJhY3RCZXR3ZWVuKCk8L2NvZGU+
LgotICoKLSAqIDxwPkZvciBhIHN1YmNsYXNzIHRvIHN1cHBvcnQgbWV0YWRhdGEsIHR5cGljYWwg
YmVoYXZpb3Igb2YKLSAqIDxjb2RlPnJlcGxhY2UoKTwvY29kZT4gaXMgdGhlIGZvbGxvd2luZzoK
LSAqIDx1bD4KLSAqICAgPGxpPlNldCB0aGUgbWV0YWRhdGEgb2YgdGhlIG5ldyB0ZXh0IHRvIHRo
ZSBtZXRhZGF0YSBvZiB0aGUgZmlyc3QKLSAqICAgY2hhcmFjdGVyIHJlcGxhY2VkPC9saT4KLSAq
ICAgPGxpPklmIG5vIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkLCB1c2UgdGhlIG1ldGFkYXRhIG9m
IHRoZQotICogICBwcmV2aW91cyBjaGFyYWN0ZXI8L2xpPgotICogICA8bGk+SWYgdGhlcmUgaXMg
bm8gcHJldmlvdXMgY2hhcmFjdGVyIChpLmUuIHN0YXJ0ID09IDApLCB1c2UgdGhlCi0gKiAgIGZv
bGxvd2luZyBjaGFyYWN0ZXI8L2xpPgotICogICA8bGk+SWYgdGhlcmUgaXMgbm8gZm9sbG93aW5n
IGNoYXJhY3RlciAoaS5lLiB0aGUgcmVwbGFjZWFibGUgd2FzCi0gKiAgIGVtcHR5KSwgdXNlIGRl
ZmF1bHQgbWV0YWRhdGEuPGJyPgotICogICA8bGk+SWYgdGhlIGNvZGUgcG9pbnQgVStGRkZGIGlz
IHNlZW4sIGl0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcwotICogICBhIHNwZWNpYWwgbWFya2Vy
IGhhdmluZyBubyBtZXRhZGF0YTxsaT4KLSAqICAgPC9saT4KLSAqIDwvdWw+Ci0gKiBJZiB0aGlz
IGlzIG5vdCB0aGUgYmVoYXZpb3IsIHRoZSBzdWJjbGFzcyBzaG91bGQgZG9jdW1lbnQgYW55IGRp
ZmZlcmVuY2VzLgotICogQGF1dGhvciBBbGFuIExpdQotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8K
LWNsYXNzIFVfQ09NTU9OX0FQSSBSZXBsYWNlYWJsZSA6IHB1YmxpYyBVT2JqZWN0IHsKLQotcHVi
bGljOgotICAgIC8qKgotICAgICAqIERlc3RydWN0b3IuCi0gICAgICogQHN0YWJsZSBJQ1UgMi4w
Ci0gICAgICovCi0gICAgdmlydHVhbCB+UmVwbGFjZWFibGUoKTsKLQotICAgIC8qKgotICAgICAq
IFJldHVybnMgdGhlIG51bWJlciBvZiAxNi1iaXQgY29kZSB1bml0cyBpbiB0aGUgdGV4dC4KLSAg
ICAgKiBAcmV0dXJuIG51bWJlciBvZiAxNi1iaXQgY29kZSB1bml0cyBpbiB0ZXh0Ci0gICAgICog
QHN0YWJsZSBJQ1UgMS44Ci0gICAgICovIAotICAgIGlubGluZSBpbnQzMl90IGxlbmd0aCgpIGNv
bnN0OwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgMTYtYml0IGNvZGUgdW5pdCBhdCB0
aGUgZ2l2ZW4gb2Zmc2V0IGludG8gdGhlIHRleHQuCi0gICAgICogQHBhcmFtIG9mZnNldCBhbiBp
bnRlZ2VyIGJldHdlZW4gMCBhbmQgPGNvZGU+bGVuZ3RoKCk8L2NvZGU+LTEKLSAgICAgKiBpbmNs
dXNpdmUKLSAgICAgKiBAcmV0dXJuIDE2LWJpdCBjb2RlIHVuaXQgb2YgdGV4dCBhdCBnaXZlbiBv
ZmZzZXQKLSAgICAgKiBAc3RhYmxlIElDVSAxLjgKLSAgICAgKi8KLSAgICBpbmxpbmUgVUNoYXIg
Y2hhckF0KGludDMyX3Qgb2Zmc2V0KSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMg
dGhlIDMyLWJpdCBjb2RlIHBvaW50IGF0IHRoZSBnaXZlbiAxNi1iaXQgb2Zmc2V0IGludG8KLSAg
ICAgKiB0aGUgdGV4dC4gIFRoaXMgYXNzdW1lcyB0aGUgdGV4dCBpcyBzdG9yZWQgYXMgMTYtYml0
IGNvZGUgdW5pdHMKLSAgICAgKiB3aXRoIHN1cnJvZ2F0ZSBwYWlycyBpbnRlcm1peGVkLiAgSWYg
dGhlIG9mZnNldCBvZiBhIGxlYWRpbmcgb3IKLSAgICAgKiB0cmFpbGluZyBjb2RlIHVuaXQgb2Yg
YSBzdXJyb2dhdGUgcGFpciBpcyBnaXZlbiwgcmV0dXJuIHRoZQotICAgICAqIGNvZGUgcG9pbnQg
b2YgdGhlIHN1cnJvZ2F0ZSBwYWlyLgotICAgICAqCi0gICAgICogQHBhcmFtIG9mZnNldCBhbiBp
bnRlZ2VyIGJldHdlZW4gMCBhbmQgPGNvZGU+bGVuZ3RoKCk8L2NvZGU+LTEKLSAgICAgKiBpbmNs
dXNpdmUKLSAgICAgKiBAcmV0dXJuIDMyLWJpdCBjb2RlIHBvaW50IG9mIHRleHQgYXQgZ2l2ZW4g
b2Zmc2V0Ci0gICAgICogQHN0YWJsZSBJQ1UgMS44Ci0gICAgICovCi0gICAgaW5saW5lIFVDaGFy
MzIgY2hhcjMyQXQoaW50MzJfdCBvZmZzZXQpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogQ29w
aWVzIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFs8dHQ+c3RhcnQ8L3R0PiwgPHR0PmxpbWl0PC90
dD4pIAotICAgICAqIGludG8gdGhlIFVuaWNvZGVTdHJpbmcgPHR0PnRhcmdldDwvdHQ+LgotICAg
ICAqIEBwYXJhbSBzdGFydCBvZmZzZXQgb2YgZmlyc3QgY2hhcmFjdGVyIHdoaWNoIHdpbGwgYmUg
Y29waWVkCi0gICAgICogQHBhcmFtIGxpbWl0IG9mZnNldCBpbW1lZGlhdGVseSBmb2xsb3dpbmcg
dGhlIGxhc3QgY2hhcmFjdGVyIHRvCi0gICAgICogYmUgY29waWVkCi0gICAgICogQHBhcmFtIHRh
cmdldCBVbmljb2RlU3RyaW5nIGludG8gd2hpY2ggdG8gY29weSBjaGFyYWN0ZXJzLgotICAgICAq
IEByZXR1cm4gQSByZWZlcmVuY2UgdG8gPFRUPnRhcmdldDwvVFQ+Ci0gICAgICogQHN0YWJsZSBJ
Q1UgMi4xCi0gICAgICovCi0gICAgdmlydHVhbCB2b2lkIGV4dHJhY3RCZXR3ZWVuKGludDMyX3Qg
c3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGltaXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVTdHJpbmcmIHRhcmdldCkgY29u
c3QgPSAwOwotCi0gICAgLyoqCi0gICAgICogUmVwbGFjZXMgYSBzdWJzdHJpbmcgb2YgdGhpcyBv
YmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdGV4dC4gIElmIHRoZQotICAgICAqIGNoYXJhY3RlcnMgYmVp
bmcgcmVwbGFjZWQgaGF2ZSBtZXRhZGF0YSwgdGhlIG5ldyBjaGFyYWN0ZXJzCi0gICAgICogdGhh
dCByZXBsYWNlIHRoZW0gc2hvdWxkIGJlIGdpdmVuIHRoZSBzYW1lIG1ldGFkYXRhLgotICAgICAq
Ci0gICAgICogPHA+U3ViY2xhc3NlcyBtdXN0IGVuc3VyZSB0aGF0IGlmIHRoZSB0ZXh0IGJldHdl
ZW4gc3RhcnQgYW5kCi0gICAgICogbGltaXQgaXMgZXF1YWwgdG8gdGhlIHJlcGxhY2VtZW50IHRl
eHQsIHRoYXQgcmVwbGFjZSBoYXMgbm8KLSAgICAgKiBlZmZlY3QuIFRoYXQgaXMsIGFueSBtZXRh
ZGF0YQotICAgICAqIHNob3VsZCBiZSB1bmFmZmVjdGVkLiBJbiBhZGRpdGlvbiwgc3ViY2xhc3Nl
cyBhcmUgZW5jb3VyYWdlZCB0bwotICAgICAqIGNoZWNrIGZvciBpbml0aWFsIGFuZCB0cmFpbGlu
ZyBpZGVudGljYWwgY2hhcmFjdGVycywgYW5kIG1ha2UgYQotICAgICAqIHNtYWxsZXIgcmVwbGFj
ZW1lbnQgaWYgcG9zc2libGUuIFRoaXMgd2lsbCBwcmVzZXJ2ZSBhcyBtdWNoCi0gICAgICogbWV0
YWRhdGEgYXMgcG9zc2libGUuCi0gICAgICogQHBhcmFtIHN0YXJ0IHRoZSBiZWdpbm5pbmcgaW5k
ZXgsIGluY2x1c2l2ZTsgPGNvZGU+MCA8PSBzdGFydAotICAgICAqIDw9IGxpbWl0PC9jb2RlPi4K
LSAgICAgKiBAcGFyYW0gbGltaXQgdGhlIGVuZGluZyBpbmRleCwgZXhjbHVzaXZlOyA8Y29kZT5z
dGFydCA8PSBsaW1pdAotICAgICAqIDw9IGxlbmd0aCgpPC9jb2RlPi4KLSAgICAgKiBAcGFyYW0g
dGV4dCB0aGUgdGV4dCB0byByZXBsYWNlIGNoYXJhY3RlcnMgPGNvZGU+c3RhcnQ8L2NvZGU+Ci0g
ICAgICogdG8gPGNvZGU+bGltaXQgLSAxPC9jb2RlPiAKLSAgICAgKiBAc3RhYmxlIElDVSAyLjAK
LSAgICAgKi8KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUmVwbGFjZUJldHdlZW4oaW50MzJfdCBz
dGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsaW1p
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0
cmluZyYgdGV4dCkgPSAwOwotICAgIC8vIE5vdGU6IEFsbCBvdGhlciBtZXRob2RzIGluIHRoaXMg
Y2xhc3MgdGFrZSB0aGUgbmFtZXMgb2YKLSAgICAvLyBleGlzdGluZyBVbmljb2RlU3RyaW5nIG1l
dGhvZHMuICBUaGlzIG1ldGhvZCBpcyB0aGUgZXhjZXB0aW9uLgotICAgIC8vIEl0IGlzIG5hbWVk
IGRpZmZlcmVudGx5IGJlY2F1c2UgYWxsIHJlcGxhY2UgbWV0aG9kcyBvZgotICAgIC8vIFVuaWNv
ZGVTdHJpbmcgcmV0dXJuIGEgVW5pY29kZVN0cmluZyYuICBUaGUgJ2JldHdlZW4nIGlzCi0gICAg
Ly8gcmVxdWlyZWQgaW4gb3JkZXIgdG8gY29uZm9ybSB0byB0aGUgVW5pY29kZVN0cmluZyBuYW1p
bmcKLSAgICAvLyBjb252ZW50aW9uOyBBUEkgdGFraW5nIHN0YXJ0L2xlbmd0aCBhcmUgbmFtZWQg
PG9wZXJhdGlvbj4sIGFuZAotICAgIC8vIHRob3NlIHRha2luZyBzdGFydC9saW1pdCBhcmUgbmFt
ZWQgPG9wZXJhdGlvbkJldHdlZW4+LiAgVGhlCi0gICAgLy8gJ2hhbmRsZScgaXMgYWRkZWQgYmVj
YXVzZSAncmVwbGFjZUJldHdlZW4nIGFuZAotICAgIC8vICdkb1JlcGxhY2VCZXR3ZWVuJyBhcmUg
YWxyZWFkeSB0YWtlbi4KLQotICAgIC8qKgotICAgICAqIENvcGllcyBhIHN1YnN0cmluZyBvZiB0
aGlzIG9iamVjdCwgcmV0YWluaW5nIG1ldGFkYXRhLgotICAgICAqIFRoaXMgbWV0aG9kIGlzIHVz
ZWQgdG8gZHVwbGljYXRlIG9yIHJlb3JkZXIgc3Vic3RyaW5ncy4KLSAgICAgKiBUaGUgZGVzdGlu
YXRpb24gaW5kZXggbXVzdCBub3Qgb3ZlcmxhcCB0aGUgc291cmNlIHJhbmdlLgotICAgICAqIAot
ICAgICAqIEBwYXJhbSBzdGFydCB0aGUgYmVnaW5uaW5nIGluZGV4LCBpbmNsdXNpdmU7IDxjb2Rl
PjAgPD0gc3RhcnQgPD0KLSAgICAgKiBsaW1pdDwvY29kZT4uCi0gICAgICogQHBhcmFtIGxpbWl0
IHRoZSBlbmRpbmcgaW5kZXgsIGV4Y2x1c2l2ZTsgPGNvZGU+c3RhcnQgPD0gbGltaXQgPD0KLSAg
ICAgKiBsZW5ndGgoKTwvY29kZT4uCi0gICAgICogQHBhcmFtIGRlc3QgdGhlIGRlc3RpbmF0aW9u
IGluZGV4LiAgVGhlIGNoYXJhY3RlcnMgZnJvbQotICAgICAqIDxjb2RlPnN0YXJ0Li5saW1pdC0x
PC9jb2RlPiB3aWxsIGJlIGNvcGllZCB0byA8Y29kZT5kZXN0PC9jb2RlPi4KLSAgICAgKiBJbXBs
ZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRob2QgbWF5IGFzc3VtZSB0aGF0IDxjb2RlPmRlc3QgPD0g
c3RhcnQgfHwKLSAgICAgKiBkZXN0ID49IGxpbWl0PC9jb2RlPi4KLSAgICAgKiBAc3RhYmxlIElD
VSAyLjAKLSAgICAgKi8KLSAgICB2aXJ0dWFsIHZvaWQgY29weShpbnQzMl90IHN0YXJ0LCBpbnQz
Ml90IGxpbWl0LCBpbnQzMl90IGRlc3QpID0gMDsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMg
dHJ1ZSBpZiB0aGlzIG9iamVjdCBjb250YWlucyBtZXRhZGF0YS4gIElmIGEKLSAgICAgKiBSZXBs
YWNlYWJsZSBvYmplY3QgaGFzIG1ldGFkYXRhLCBjYWxscyB0byB0aGUgUmVwbGFjZWFibGUgQVBJ
Ci0gICAgICogbXVzdCBiZSBtYWRlIHNvIGFzIHRvIHByZXNlcnZlIG1ldGFkYXRhLiAgSWYgaXQg
ZG9lcyBub3QsIGNhbGxzCi0gICAgICogdG8gdGhlIFJlcGxhY2VhYmxlIEFQSSBtYXkgYmUgb3B0
aW1pemVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCi0gICAgICogVGhlIGRlZmF1bHQgaW1wbGVt
ZW50YXRpb24gcmV0dXJucyB0cnVlLgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIG9iamVj
dCBjb250YWlucyBtZXRhZGF0YQotICAgICAqIEBzdGFibGUgSUNVIDIuMgotICAgICAqLwotICAg
IHZpcnR1YWwgVUJvb2wgaGFzTWV0YURhdGEoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIENs
b25lIHRoaXMgb2JqZWN0LCBhbiBpbnN0YW5jZSBvZiBhIHN1YmNsYXNzIG9mIFJlcGxhY2VhYmxl
LgotICAgICAqIENsb25lcyBjYW4gYmUgdXNlZCBjb25jdXJyZW50bHkgaW4gbXVsdGlwbGUgdGhy
ZWFkcy4KLSAgICAgKiBJZiBhIHN1YmNsYXNzIGRvZXMgbm90IGltcGxlbWVudCBjbG9uZSgpLCBv
ciBpZiBhbiBlcnJvciBvY2N1cnMsCi0gICAgICogdGhlbiBOVUxMIGlzIHJldHVybmVkLgotICAg
ICAqIFRoZSBjbG9uZSBmdW5jdGlvbnMgaW4gYWxsIHN1YmNsYXNzZXMgcmV0dXJuIGEgcG9pbnRl
ciB0byBhIFJlcGxhY2VhYmxlCi0gICAgICogYmVjYXVzZSBzb21lIGNvbXBpbGVycyBkbyBub3Qg
c3VwcG9ydCBjb3ZhcmlhbnQgKHNhbWUtYXMtdGhpcykKLSAgICAgKiByZXR1cm4gdHlwZXM7IGNh
c3QgdG8gdGhlIGFwcHJvcHJpYXRlIHN1YmNsYXNzIGlmIG5lY2Vzc2FyeS4KLSAgICAgKiBUaGUg
Y2FsbGVyIG11c3QgZGVsZXRlIHRoZSBjbG9uZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gYSBj
bG9uZSBvZiB0aGlzIG9iamVjdAotICAgICAqCi0gICAgICogQHNlZSBnZXREeW5hbWljQ2xhc3NJ
RAotICAgICAqIEBzdGFibGUgSUNVIDIuNgotICAgICAqLwotICAgIHZpcnR1YWwgUmVwbGFjZWFi
bGUgKmNsb25lKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLQotICAgIC8qKgotICAgICAqIERlZmF1
bHQgY29uc3RydWN0b3IuCi0gICAgICogQHN0YWJsZSBJQ1UgMi40Ci0gICAgICovCi0gICAgaW5s
aW5lIFJlcGxhY2VhYmxlKCk7Ci0KLSAgICAvKgotICAgICAqIEFzc2lnbm1lbnQgb3BlcmF0b3Ig
bm90IGRlY2xhcmVkLiBUaGUgY29tcGlsZXIgd2lsbCBwcm92aWRlIG9uZQotICAgICAqIHdoaWNo
IGRvZXMgbm90aGluZyBzaW5jZSB0aGlzIGNsYXNzIGRvZXMgbm90IGNvbnRhaW4gYW55IGRhdGEg
bWVtYmVycy4KLSAgICAgKiBBUEkvY29kZSBjb3ZlcmFnZSBtYXkgc2hvdyB0aGUgYXNzaWdubWVu
dCBvcGVyYXRvciBhcyBwcmVzZW50IGFuZAotICAgICAqIHVudGVzdGVkIC0gaWdub3JlLgotICAg
ICAqIFN1YmNsYXNzZXMgbmVlZCB0aGlzIGFzc2lnbm1lbnQgb3BlcmF0b3IgaWYgdGhleSB1c2Ug
Y29tcGlsZXItcHJvdmlkZWQKLSAgICAgKiBhc3NpZ25tZW50IG9wZXJhdG9ycyBvZiB0aGVpciBv
d24uIEFuIGFsdGVybmF0aXZlIHRvIG5vdCBkZWNsYXJpbmcgb25lCi0gICAgICogaGVyZSB3b3Vs
ZCBiZSB0byBkZWNsYXJlIGFuZCBlbXB0eS1pbXBsZW1lbnQgYSBwcm90ZWN0ZWQgb3IgcHVibGlj
IG9uZS4KLSAgICBSZXBsYWNlYWJsZSAmUmVwbGFjZWFibGU6Om9wZXJhdG9yPShjb25zdCBSZXBs
YWNlYWJsZSAmKTsKLSAgICAgKi8KLQotICAgIC8qKgotICAgICAqIFZpcnR1YWwgdmVyc2lvbiBv
ZiBsZW5ndGgoKS4KLSAgICAgKiBAc3RhYmxlIElDVSAyLjQKLSAgICAgKi8gCi0gICAgdmlydHVh
bCBpbnQzMl90IGdldExlbmd0aCgpIGNvbnN0ID0gMDsKLQotICAgIC8qKgotICAgICAqIFZpcnR1
YWwgdmVyc2lvbiBvZiBjaGFyQXQoKS4KLSAgICAgKiBAc3RhYmxlIElDVSAyLjQKLSAgICAgKi8K
LSAgICB2aXJ0dWFsIFVDaGFyIGdldENoYXJBdChpbnQzMl90IG9mZnNldCkgY29uc3QgPSAwOwot
Ci0gICAgLyoqCi0gICAgICogVmlydHVhbCB2ZXJzaW9uIG9mIGNoYXIzMkF0KCkuCi0gICAgICog
QHN0YWJsZSBJQ1UgMi40Ci0gICAgICovCi0gICAgdmlydHVhbCBVQ2hhcjMyIGdldENoYXIzMkF0
KGludDMyX3Qgb2Zmc2V0KSBjb25zdCA9IDA7Ci19OwotCi1pbmxpbmUgUmVwbGFjZWFibGU6OlJl
cGxhY2VhYmxlKCkge30KLQotaW5saW5lIGludDMyX3QKLVJlcGxhY2VhYmxlOjpsZW5ndGgoKSBj
b25zdCB7Ci0gICAgcmV0dXJuIGdldExlbmd0aCgpOwotfQotCi1pbmxpbmUgVUNoYXIKLVJlcGxh
Y2VhYmxlOjpjaGFyQXQoaW50MzJfdCBvZmZzZXQpIGNvbnN0IHsKLSAgICByZXR1cm4gZ2V0Q2hh
ckF0KG9mZnNldCk7Ci19Ci0KLWlubGluZSBVQ2hhcjMyCi1SZXBsYWNlYWJsZTo6Y2hhcjMyQXQo
aW50MzJfdCBvZmZzZXQpIGNvbnN0IHsKLSAgICByZXR1cm4gZ2V0Q2hhcjMyQXQob2Zmc2V0KTsK
LX0KLQotLy8gVGhlcmUgaXMgbm8gcmVwLmNwcCwgc2VlIHVuaXN0ci5jcHAgZm9yIFJlcGxhY2Vh
YmxlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucy4KLQotVV9OQU1FU1BBQ0VfRU5ECi0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVu
Y2llcy9pY3UvdW5pY29kZS9zdGRfc3RyaW5nLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3N0ZF9zdHJpbmcuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDU5NTVjNWQxZTcyN2Y4ZTM1YmNhZWI3ZDk1Zjg1YTcwZDYz
MGNhMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3N0
ZF9zdHJpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCi0qCi0qICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTQsIEludGVybmF0aW9u
YWwgQnVzaW5lc3MgTWFjaGluZXMKLSogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICBmaWxlIG5hbWU6
ICBzdGRfc3RyaW5nLmgKLSogICBlbmNvZGluZzogICBVUy1BU0NJSQotKiAgIHRhYiBzaXplOiAg
IDggKG5vdCB1c2VkKQotKiAgIGluZGVudGF0aW9uOjQKLSoKLSogICBjcmVhdGVkIG9uOiAyMDA5
ZmViMTkKLSogICBjcmVhdGVkIGJ5OiBNYXJrdXMgVy4gU2NoZXJlcgotKi8KLQotI2lmbmRlZiBf
X1NURF9TVFJJTkdfSF9fCi0jZGVmaW5lIF9fU1REX1NUUklOR19IX18KLQotLyoqCi0gKiBcZmls
ZQotICogXGJyaWVmIEMrKyBBUEk6IENlbnRyYWwgSUNVIGhlYWRlciBmb3IgaW5jbHVkaW5nIHRo
ZSBDKysgc3RhbmRhcmQgJmx0O3N0cmluZyZndDsKLSAqICAgICAgICAgICAgICAgICBoZWFkZXIg
YW5kIGZvciByZWxhdGVkIGRlZmluaXRpb25zLgotICovCi0KLSNpbmNsdWRlICJ1bmljb2RlL3V0
eXBlcy5oIgotCi0jaWYgVV9IQVZFX1NURF9TVFJJTkcKLQotI2lmICFkZWZpbmVkKF9NU0NfVkVS
KQotbmFtZXNwYWNlIHN0ZCB7IGNsYXNzIHR5cGVfaW5mbzsgfSAvLyBXT1JLQVJPVU5EOiBodHRw
Oi8vbGx2bS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNjQKLSNlbmRpZgotI2luY2x1ZGUg
PHN0cmluZz4KLQotI2VuZGlmICAvLyBVX0hBVkVfU1REX1NUUklORwotCi0jZW5kaWYgIC8vIF9f
U1REX1NUUklOR19IX18KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvc3RyZW51bS5oIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS9zdHJlbnVtLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkYmUyMWM2YjJkZGRmYjg2OTM4N2Q0OGVmZDYy
NDNkYjM5MTViMzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5p
Y29kZS9zdHJlbnVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoKLSoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKLSoKLSogICBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMiwgSW50ZXJu
YXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcwotKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBB
bGwgUmlnaHRzIFJlc2VydmVkLgotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKi8KLQotI2lm
bmRlZiBTVFJFTlVNX0gKLSNkZWZpbmUgU1RSRU5VTV9ICi0KLSNpbmNsdWRlICJ1bmljb2RlL3Vv
YmplY3QuaCIKLSNpbmNsdWRlICJ1bmljb2RlL3VuaXN0ci5oIgotCi0vKioKLSAqIFxmaWxlIAot
ICogXGJyaWVmIEMrKyBBUEk6IFN0cmluZyBFbnVtZXJhdGlvbgotICovCi0gCi1VX05BTUVTUEFD
RV9CRUdJTgotCi0vKioKLSAqIEJhc2UgY2xhc3MgZm9yICdwdXJlJyBDKysgaW1wbGVtZW50YXRp
b25zIG9mIHVlbnVtIGFwaS4gIEFkZHMgYQotICogbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgbmV4
dCBVbmljb2RlU3RyaW5nIHNpbmNlIGluIEMrKyB0aGlzIGNhbgotICogYmUgYSBjb21tb24gc3Rv
cmFnZSBmb3JtYXQgZm9yIHN0cmluZ3MuCi0gKgotICogPHA+VGhlIG1vZGVsIGlzIHRoYXQgdGhl
IGVudW1lcmF0aW9uIGlzIG92ZXIgc3RyaW5ncyBtYWludGFpbmVkIGJ5Ci0gKiBhICdzZXJ2aWNl
LicgIEF0IGFueSBwb2ludCwgdGhlIHNlcnZpY2UgbWlnaHQgY2hhbmdlLCBpbnZhbGlkYXRpbmcK
LSAqIHRoZSBlbnVtZXJhdG9yICh0aG91Z2ggdGhpcyBpcyBleHBlY3RlZCB0byBiZSByYXJlKS4g
IFRoZSBpdGVyYXRvcgotICogcmV0dXJucyBhbiBlcnJvciBpZiB0aGlzIGhhcyBvY2N1cnJlZC4g
IExhY2sgb2YgdGhlIGVycm9yIGlzIG5vCi0gKiBndWFyYW50ZWUgdGhhdCB0aGUgc2VydmljZSBk
aWRuJ3QgY2hhbmdlIGltbWVkaWF0ZWx5IGFmdGVyIHRoZQotICogY2FsbCwgc28gdGhlIHJldHVy
bmVkIHN0cmluZyBzdGlsbCBtaWdodCBub3QgYmUgJ3ZhbGlkJyBvbgotICogc3Vic2VxdWVudCB1
c2UuPC9wPgotICoKLSAqIDxwPlN0cmluZ3MgbWF5IHRha2UgdGhlIGZvcm0gb2YgY29uc3QgY2hh
ciosIGNvbnN0IFVDaGFyKiwgb3IgY29uc3QKLSAqIFVuaWNvZGVTdHJpbmcqLiAgVGhlIHR5cGUg
eW91IGdldCBpcyBkZXRlcm1pbmUgYnkgdGhlIHZhcmlhbnQgb2YKLSAqICduZXh0JyB0aGF0IHlv
dSBjYWxsLiAgSW4gZ2VuZXJhbCB0aGUgU3RyaW5nRW51bWVyYXRpb24gaXMKLSAqIG9wdGltaXpl
ZCBmb3Igb25lIG9mIHRoZXNlIHR5cGVzLCBidXQgYWxsIFN0cmluZ0VudW1lcmF0aW9ucyBjYW4K
LSAqIHJldHVybiBhbGwgdHlwZXMuICBSZXR1cm5lZCBzdHJpbmdzIGFyZSBlYWNoIHRlcm1pbmF0
ZWQgd2l0aCBhIE5VTC4KLSAqIERlcGVuZGluZyBvbiB0aGUgc2VydmljZSBkYXRhLCB0aGV5IG1p
Z2h0IGFsc28gaW5jbHVkZSBlbWJlZGRlZCBOVUwKLSAqIGNoYXJhY3RlcnMsIHNvIEFQSSBpcyBw
cm92aWRlZCB0byBvcHRpb25hbGx5IHJldHVybiB0aGUgdHJ1ZQotICogbGVuZ3RoLCBjb3VudGlu
ZyB0aGUgZW1iZWRkZWQgTlVMcyBidXQgbm90IGNvdW50aW5nIHRoZSB0ZXJtaW5hdGluZwotICog
TlVMLjwvcD4KLSAqCi0gKiA8cD5UaGUgcG9pbnRlcnMgcmV0dXJuZWQgYnkgbmV4dCwgdW5leHQs
IGFuZCBzbmV4dCBiZWNvbWUgaW52YWxpZAotICogdXBvbiBhbnkgc3Vic2VxdWVudCBjYWxsIHRv
IHRoZSBlbnVtZXJhdGlvbidzIGRlc3RydWN0b3IsIG5leHQsCi0gKiB1bmV4dCwgc25leHQsIG9y
IHJlc2V0LjwvcD4KLSAqCi0gKiBJQ1UgMi44IGFkZHMgc29tZSBkZWZhdWx0IGltcGxlbWVudGF0
aW9ucyBhbmQgaGVscGVyIGZ1bmN0aW9ucwotICogZm9yIHN1YmNsYXNzZXMuCi0gKgotICogQHN0
YWJsZSBJQ1UgMi40IAotICovCi1jbGFzcyBVX0NPTU1PTl9BUEkgU3RyaW5nRW51bWVyYXRpb24g
OiBwdWJsaWMgVU9iamVjdCB7IAotcHVibGljOgotICAgIC8qKgotICAgICAqIERlc3RydWN0b3Iu
Ci0gICAgICogQHN0YWJsZSBJQ1UgMi40Ci0gICAgICovCi0gICAgdmlydHVhbCB+U3RyaW5nRW51
bWVyYXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIENsb25lIHRoaXMgb2JqZWN0LCBhbiBpbnN0
YW5jZSBvZiBhIHN1YmNsYXNzIG9mIFN0cmluZ0VudW1lcmF0aW9uLgotICAgICAqIENsb25lcyBj
YW4gYmUgdXNlZCBjb25jdXJyZW50bHkgaW4gbXVsdGlwbGUgdGhyZWFkcy4KLSAgICAgKiBJZiBh
IHN1YmNsYXNzIGRvZXMgbm90IGltcGxlbWVudCBjbG9uZSgpLCBvciBpZiBhbiBlcnJvciBvY2N1
cnMsCi0gICAgICogdGhlbiBOVUxMIGlzIHJldHVybmVkLgotICAgICAqIFRoZSBjbG9uZSBmdW5j
dGlvbnMgaW4gYWxsIHN1YmNsYXNzZXMgcmV0dXJuIGEgYmFzZSBjbGFzcyBwb2ludGVyCi0gICAg
ICogYmVjYXVzZSBzb21lIGNvbXBpbGVycyBkbyBub3Qgc3VwcG9ydCBjb3ZhcmlhbnQgKHNhbWUt
YXMtdGhpcykKLSAgICAgKiByZXR1cm4gdHlwZXM7IGNhc3QgdG8gdGhlIGFwcHJvcHJpYXRlIHN1
YmNsYXNzIGlmIG5lY2Vzc2FyeS4KLSAgICAgKiBUaGUgY2FsbGVyIG11c3QgZGVsZXRlIHRoZSBj
bG9uZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gYSBjbG9uZSBvZiB0aGlzIG9iamVjdAotICAg
ICAqCi0gICAgICogQHNlZSBnZXREeW5hbWljQ2xhc3NJRAotICAgICAqIEBzdGFibGUgSUNVIDIu
OAotICAgICAqLwotICAgIHZpcnR1YWwgU3RyaW5nRW51bWVyYXRpb24gKmNsb25lKCkgY29uc3Q7
Ci0KLSAgICAvKioKLSAgICAgKiA8cD5SZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyB0aGF0
IHRoZSBpdGVyYXRvciB0cmF2ZXJzZXMuICBJZgotICAgICAqIHRoZSBpdGVyYXRvciBpcyBvdXQg
b2Ygc3luYyB3aXRoIGl0cyBzZXJ2aWNlLCBzdGF0dXMgaXMgc2V0IHRvCi0gICAgICogVV9FTlVN
X09VVF9PRl9TWU5DX0VSUk9SLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLjwvcD4KLSAg
ICAgKgotICAgICAqIDxwPlRoZSByZXR1cm4gdmFsdWUgd2lsbCBub3QgY2hhbmdlIGV4Y2VwdCBw
b3NzaWJseSBhcyBhIHJlc3VsdCBvZgotICAgICAqIGEgc3Vic2VxdWVudCBjYWxsIHRvIHJlc2V0
LCBvciBpZiB0aGUgaXRlcmF0b3IgYmVjb21lcyBvdXQgb2Ygc3luYy48L3A+Ci0gICAgICoKLSAg
ICAgKiA8cD5UaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24uIEl0IGNhbiBlbmQgdXAgYmVp
bmcgdmVyeQotICAgICAqIGV4cGVuc2l2ZSBhcyBhbGwgdGhlIGl0ZW1zIG1pZ2h0IGhhdmUgdG8g
YmUgcHJlLWZldGNoZWQKLSAgICAgKiAoZGVwZW5kaW5nIG9uIHRoZSBzdG9yYWdlIGZvcm1hdCBv
ZiB0aGUgZGF0YSBiZWluZwotICAgICAqIHRyYXZlcnNlZCkuPC9wPgotICAgICAqCi0gICAgICog
QHBhcmFtIHN0YXR1cyB0aGUgZXJyb3IgY29kZS4KLSAgICAgKiBAcmV0dXJuIG51bWJlciBvZiBl
bGVtZW50cyBpbiB0aGUgaXRlcmF0b3IuCi0gICAgICoKLSAgICAgKiBAc3RhYmxlIElDVSAyLjQg
Ki8KLSAgICB2aXJ0dWFsIGludDMyX3QgY291bnQoVUVycm9yQ29kZSYgc3RhdHVzKSBjb25zdCA9
IDA7Ci0KLSAgICAvKioKLSAgICAgKiA8cD5SZXR1cm5zIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBO
VUwtdGVybWluYXRlZCBjaGFyKi4gIElmIHRoZXJlCi0gICAgICogYXJlIG5vIG1vcmUgZWxlbWVu
dHMsIHJldHVybnMgTlVMTC4gIElmIHRoZSByZXN1bHRMZW5ndGggcG9pbnRlcgotICAgICAqIGlz
IG5vdCBOVUxMLCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgKG5vdCBjb3VudGluZyB0aGUKLSAg
ICAgKiB0ZXJtaW5hdGluZyBOVUwpIGlzIHJldHVybmVkIGF0IHRoYXQgYWRkcmVzcy4gIElmIGFu
IGVycm9yCi0gICAgICogc3RhdHVzIGlzIHJldHVybmVkLCB0aGUgdmFsdWUgYXQgcmVzdWx0TGVu
Z3RoIGlzIHVuZGVmaW5lZC48L3A+Ci0gICAgICoKLSAgICAgKiA8cD5UaGUgcmV0dXJuZWQgcG9p
bnRlciBpcyBvd25lZCBieSB0aGlzIGl0ZXJhdG9yIGFuZCBtdXN0IG5vdCBiZQotICAgICAqIGRl
bGV0ZWQgYnkgdGhlIGNhbGxlci4gIFRoZSBwb2ludGVyIGlzIHZhbGlkIHVudGlsIHRoZSBuZXh0
IGNhbGwKLSAgICAgKiB0byBuZXh0LCB1bmV4dCwgc25leHQsIHJlc2V0LCBvciB0aGUgZW51bWVy
YXRvcidzIGRlc3RydWN0b3IuPC9wPgotICAgICAqCi0gICAgICogPHA+SWYgdGhlIGl0ZXJhdG9y
IGlzIG91dCBvZiBzeW5jIHdpdGggaXRzIHNlcnZpY2UsIHN0YXR1cyBpcyBzZXQKLSAgICAgKiB0
byBVX0VOVU1fT1VUX09GX1NZTkNfRVJST1IgYW5kIE5VTEwgaXMgcmV0dXJuZWQuPC9wPgotICAg
ICAqCi0gICAgICogPHA+SWYgdGhlIG5hdGl2ZSBzZXJ2aWNlIHN0cmluZyBpcyBhIFVDaGFyKiBz
dHJpbmcsIGl0IGlzCi0gICAgICogY29udmVydGVkIHRvIGNoYXIqIHdpdGggdGhlIGludmFyaWFu
dCBjb252ZXJ0ZXIuICBJZiB0aGUKLSAgICAgKiBjb252ZXJzaW9uIGZhaWxzIChiZWNhdXNlIGEg
Y2hhcmFjdGVyIGNhbm5vdCBiZSBjb252ZXJ0ZWQpIHRoZW4KLSAgICAgKiBzdGF0dXMgaXMgc2V0
IHRvIFVfSU5WQVJJQU5UX0NPTlZFUlNJT05fRVJST1IgYW5kIHRoZSByZXR1cm4KLSAgICAgKiB2
YWx1ZSBpcyB1bmRlZmluZWQgKHRob3VnaCBub3QgTlVMTCkuPC9wPgotICAgICAqCi0gICAgICog
U3RhcnRpbmcgd2l0aCBJQ1UgMi44LCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjYWxscyBz
bmV4dCgpCi0gICAgICogYW5kIGhhbmRsZXMgdGhlIGNvbnZlcnNpb24uCi0gICAgICogRWl0aGVy
IG5leHQoKSBvciBzbmV4dCgpIG11c3QgYmUgaW1wbGVtZW50ZWQgZGlmZmVyZW50bHkgYnkgYSBz
dWJjbGFzcy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzdGF0dXMgdGhlIGVycm9yIGNvZGUuCi0g
ICAgICogQHBhcmFtIHJlc3VsdExlbmd0aCBhIHBvaW50ZXIgdG8gcmVjZWl2ZSB0aGUgbGVuZ3Ro
LCBjYW4gYmUgTlVMTC4KLSAgICAgKiBAcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RyaW5nLCBv
ciBOVUxMLgotICAgICAqCi0gICAgICogQHN0YWJsZSBJQ1UgMi40IAotICAgICAqLwotICAgIHZp
cnR1YWwgY29uc3QgY2hhciogbmV4dChpbnQzMl90ICpyZXN1bHRMZW5ndGgsIFVFcnJvckNvZGUm
IHN0YXR1cyk7Ci0KLSAgICAvKioKLSAgICAgKiA8cD5SZXR1cm5zIHRoZSBuZXh0IGVsZW1lbnQg
YXMgYSBOVUwtdGVybWluYXRlZCBVQ2hhciouICBJZiB0aGVyZQotICAgICAqIGFyZSBubyBtb3Jl
IGVsZW1lbnRzLCByZXR1cm5zIE5VTEwuICBJZiB0aGUgcmVzdWx0TGVuZ3RoIHBvaW50ZXIKLSAg
ICAgKiBpcyBub3QgTlVMTCwgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIChub3QgY291bnRpbmcg
dGhlCi0gICAgICogdGVybWluYXRpbmcgTlVMKSBpcyByZXR1cm5lZCBhdCB0aGF0IGFkZHJlc3Mu
ICBJZiBhbiBlcnJvcgotICAgICAqIHN0YXR1cyBpcyByZXR1cm5lZCwgdGhlIHZhbHVlIGF0IHJl
c3VsdExlbmd0aCBpcyB1bmRlZmluZWQuPC9wPgotICAgICAqCi0gICAgICogPHA+VGhlIHJldHVy
bmVkIHBvaW50ZXIgaXMgb3duZWQgYnkgdGhpcyBpdGVyYXRvciBhbmQgbXVzdCBub3QgYmUKLSAg
ICAgKiBkZWxldGVkIGJ5IHRoZSBjYWxsZXIuICBUaGUgcG9pbnRlciBpcyB2YWxpZCB1bnRpbCB0
aGUgbmV4dCBjYWxsCi0gICAgICogdG8gbmV4dCwgdW5leHQsIHNuZXh0LCByZXNldCwgb3IgdGhl
IGVudW1lcmF0b3IncyBkZXN0cnVjdG9yLjwvcD4KLSAgICAgKgotICAgICAqIDxwPklmIHRoZSBp
dGVyYXRvciBpcyBvdXQgb2Ygc3luYyB3aXRoIGl0cyBzZXJ2aWNlLCBzdGF0dXMgaXMgc2V0Ci0g
ICAgICogdG8gVV9FTlVNX09VVF9PRl9TWU5DX0VSUk9SIGFuZCBOVUxMIGlzIHJldHVybmVkLjwv
cD4KLSAgICAgKgotICAgICAqIFN0YXJ0aW5nIHdpdGggSUNVIDIuOCwgdGhlIGRlZmF1bHQgaW1w
bGVtZW50YXRpb24gY2FsbHMgc25leHQoKQotICAgICAqIGFuZCBoYW5kbGVzIHRoZSBjb252ZXJz
aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIHN0YXR1cyB0aGUgZXJyb3IgY29kZS4KLSAgICAg
KiBAcGFyYW0gcmVzdWx0TGVuZ3RoIGEgcG9udGVyIHRvIHJlY2VpdmUgdGhlIGxlbmd0aCwgY2Fu
IGJlIE5VTEwuCi0gICAgICogQHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHN0cmluZywgb3IgTlVM
TC4KLSAgICAgKgotICAgICAqIEBzdGFibGUgSUNVIDIuNCAKLSAgICAgKi8KLSAgICB2aXJ0dWFs
IGNvbnN0IFVDaGFyKiB1bmV4dChpbnQzMl90ICpyZXN1bHRMZW5ndGgsIFVFcnJvckNvZGUmIHN0
YXR1cyk7Ci0KLSAgICAvKioKLSAgICAgKiA8cD5SZXR1cm5zIHRoZSBuZXh0IGVsZW1lbnQgYSBV
bmljb2RlU3RyaW5nKi4gIElmIHRoZXJlIGFyZSBubwotICAgICAqIG1vcmUgZWxlbWVudHMsIHJl
dHVybnMgTlVMTC48L3A+Ci0gICAgICoKLSAgICAgKiA8cD5UaGUgcmV0dXJuZWQgcG9pbnRlciBp
cyBvd25lZCBieSB0aGlzIGl0ZXJhdG9yIGFuZCBtdXN0IG5vdCBiZQotICAgICAqIGRlbGV0ZWQg
YnkgdGhlIGNhbGxlci4gIFRoZSBwb2ludGVyIGlzIHZhbGlkIHVudGlsIHRoZSBuZXh0IGNhbGwK
LSAgICAgKiB0byBuZXh0LCB1bmV4dCwgc25leHQsIHJlc2V0LCBvciB0aGUgZW51bWVyYXRvcidz
IGRlc3RydWN0b3IuPC9wPgotICAgICAqCi0gICAgICogPHA+SWYgdGhlIGl0ZXJhdG9yIGlzIG91
dCBvZiBzeW5jIHdpdGggaXRzIHNlcnZpY2UsIHN0YXR1cyBpcyBzZXQKLSAgICAgKiB0byBVX0VO
VU1fT1VUX09GX1NZTkNfRVJST1IgYW5kIE5VTEwgaXMgcmV0dXJuZWQuPC9wPgotICAgICAqCi0g
ICAgICogU3RhcnRpbmcgd2l0aCBJQ1UgMi44LCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBj
YWxscyBuZXh0KCkKLSAgICAgKiBhbmQgaGFuZGxlcyB0aGUgY29udmVyc2lvbi4KLSAgICAgKiBF
aXRoZXIgbmV4dCgpIG9yIHNuZXh0KCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseSBi
eSBhIHN1YmNsYXNzLgotICAgICAqCi0gICAgICogQHBhcmFtIHN0YXR1cyB0aGUgZXJyb3IgY29k
ZS4KLSAgICAgKiBAcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RyaW5nLCBvciBOVUxMLgotICAg
ICAqCi0gICAgICogQHN0YWJsZSBJQ1UgMi40IAotICAgICAqLwotICAgIHZpcnR1YWwgY29uc3Qg
VW5pY29kZVN0cmluZyogc25leHQoVUVycm9yQ29kZSYgc3RhdHVzKTsKLQotICAgIC8qKgotICAg
ICAqIDxwPlJlc2V0cyB0aGUgaXRlcmF0b3IuICBUaGlzIHJlLWVzdGFibGlzaGVzIHN5bmMgd2l0
aCB0aGUKLSAgICAgKiBzZXJ2aWNlIGFuZCByZXdpbmRzIHRoZSBpdGVyYXRvciB0byBzdGFydCBh
dCB0aGUgZmlyc3QKLSAgICAgKiBlbGVtZW50LjwvcD4KLSAgICAgKgotICAgICAqIDxwPlByZXZp
b3VzIHBvaW50ZXJzIHJldHVybmVkIGJ5IG5leHQsIHVuZXh0LCBvciBzbmV4dCBiZWNvbWUKLSAg
ICAgKiBpbnZhbGlkLCBhbmQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNvdW50IG1pZ2h0IGNoYW5n
ZS48L3A+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gc3RhdHVzIHRoZSBlcnJvciBjb2RlLgotICAg
ICAqCi0gICAgICogQHN0YWJsZSBJQ1UgMi40IAotICAgICAqLwotICAgIHZpcnR1YWwgdm9pZCBy
ZXNldChVRXJyb3JDb2RlJiBzdGF0dXMpID0gMDsKLQotICAgIC8qKgotICAgICAqIENvbXBhcmVz
IHRoaXMgZW51bWVyYXRpb24gdG8gb3RoZXIgdG8gY2hlY2sgaWYgYm90aCBhcmUgZXF1YWwKLSAg
ICAgKgotICAgICAqIEBwYXJhbSB0aGF0IFRoZSBvdGhlciBzdHJpbmcgZW51bWVyYXRpb24gdG8g
Y29tcGFyZSB0aGlzIG9iamVjdCB0bwotICAgICAqIEByZXR1cm4gVFJVRSBpZiB0aGUgZW51bWVy
YXRpb25zIGFyZSBlcXVhbC4gRkFMU0UgaWYgbm90LgotICAgICAqIEBzdGFibGUgSUNVIDMuNiAK
LSAgICAgKi8KLSAgICB2aXJ0dWFsIFVCb29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nRW51bWVy
YXRpb24mIHRoYXQpY29uc3Q7Ci0gICAgLyoqCi0gICAgICogQ29tcGFyZXMgdGhpcyBlbnVtZXJh
dGlvbiB0byBvdGhlciB0byBjaGVjayBpZiBib3RoIGFyZSBub3QgZXF1YWwKLSAgICAgKgotICAg
ICAqIEBwYXJhbSB0aGF0IFRoZSBvdGhlciBzdHJpbmcgZW51bWVyYXRpb24gdG8gY29tcGFyZSB0
aGlzIG9iamVjdCB0bwotICAgICAqIEByZXR1cm4gVFJVRSBpZiB0aGUgZW51bWVyYXRpb25zIGFy
ZSBlcXVhbC4gRkFMU0UgaWYgbm90LgotICAgICAqIEBzdGFibGUgSUNVIDMuNiAKLSAgICAgKi8K
LSAgICB2aXJ0dWFsIFVCb29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nRW51bWVyYXRpb24mIHRo
YXQpY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICAvKioKLSAgICAgKiBVbmljb2RlU3RyaW5nIGZp
ZWxkIGZvciB1c2Ugd2l0aCBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBhbmQgc3ViY2xhc3Nlcy4K
LSAgICAgKiBAc3RhYmxlIElDVSAyLjgKLSAgICAgKi8KLSAgICBVbmljb2RlU3RyaW5nIHVuaXN0
cjsKLSAgICAvKioKLSAgICAgKiBjaGFyICogZGVmYXVsdCBidWZmZXIgZm9yIHVzZSB3aXRoIGRl
ZmF1bHQgaW1wbGVtZW50YXRpb25zIGFuZCBzdWJjbGFzc2VzLgotICAgICAqIEBzdGFibGUgSUNV
IDIuOAotICAgICAqLwotICAgIGNoYXIgY2hhcnNCdWZmZXJbMzJdOwotICAgIC8qKgotICAgICAq
IGNoYXIgKiBidWZmZXIgZm9yIHVzZSB3aXRoIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIGFuZCBz
dWJjbGFzc2VzLgotICAgICAqIEFsbG9jYXRlZCBpbiBjb25zdHJ1Y3RvciBhbmQgaW4gZW5zdXJl
Q2hhcnNDYXBhY2l0eSgpLgotICAgICAqIEBzdGFibGUgSUNVIDIuOAotICAgICAqLwotICAgIGNo
YXIgKmNoYXJzOwotICAgIC8qKgotICAgICAqIENhcGFjaXR5IG9mIGNoYXJzLCBmb3IgdXNlIHdp
dGggZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgYW5kIHN1YmNsYXNzZXMuCi0gICAgICogQHN0YWJs
ZSBJQ1UgMi44Ci0gICAgICovCi0gICAgaW50MzJfdCBjaGFyc0NhcGFjaXR5OwotCi0gICAgLyoq
Ci0gICAgICogRGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgdXNlIHdpdGggZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbnMgYW5kIHN1YmNsYXNzZXMuCi0gICAgICogQHN0YWJsZSBJQ1UgMi44Ci0gICAgICov
Ci0gICAgU3RyaW5nRW51bWVyYXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIEVuc3VyZXMgdGhh
dCBjaGFycyBpcyBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgcmVxdWVzdGVkIGNhcGFjaXR5Lgot
ICAgICAqIEZvciB1c2Ugd2l0aCBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBhbmQgc3ViY2xhc3Nl
cy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjYXBhY2l0eSBSZXF1ZXN0ZWQgY2FwYWNpdHkuCi0g
ICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgaW4vb3V0IGVycm9yIGNvZGUuCi0gICAgICogQHN0YWJs
ZSBJQ1UgMi44Ci0gICAgICovCi0gICAgdm9pZCBlbnN1cmVDaGFyc0NhcGFjaXR5KGludDMyX3Qg
Y2FwYWNpdHksIFVFcnJvckNvZGUgJnN0YXR1cyk7Ci0KLSAgICAvKioKLSAgICAgKiBDb252ZXJ0
cyBzIHRvIFVuaWNvZGUgYW5kIHNldHMgdW5pc3RyIHRvIHRoZSByZXN1bHQuCi0gICAgICogRm9y
IHVzZSB3aXRoIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIGFuZCBzdWJjbGFzc2VzLAotICAgICAq
IGVzcGVjaWFsbHkgZm9yIGltcGxlbWVudGF0aW9ucyBvZiBzbmV4dCgpIGluIHRlcm1zIG9mIG5l
eHQoKS4KLSAgICAgKiBUaGlzIGlzIHByb3ZpZGVkIHdpdGggYSBoZWxwZXIgZnVuY3Rpb24gaW5z
dGVhZCBvZiBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KLSAgICAgKiBvZiBzbmV4dCgpIHRvIGF2
b2lkIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wcyBiZXR3ZWVuIG5leHQoKSBhbmQgc25leHQoKS4K
LSAgICAgKgotICAgICAqIEZvciBleGFtcGxlOgotICAgICAqIFxjb2RlCi0gICAgICogY29uc3Qg
VW5pY29kZVN0cmluZyogc25leHQoVUVycm9yQ29kZSYgc3RhdHVzKSB7Ci0gICAgICogICBpbnQz
Ml90IHJlc3VsdExlbmd0aD0wOwotICAgICAqICAgY29uc3QgY2hhciAqcz1uZXh0KCZyZXN1bHRM
ZW5ndGgsIHN0YXR1cyk7Ci0gICAgICogICByZXR1cm4gc2V0Q2hhcnMocywgcmVzdWx0TGVuZ3Ro
LCBzdGF0dXMpOwotICAgICAqIH0KLSAgICAgKiBcZW5kY29kZQotICAgICAqCi0gICAgICogQHBh
cmFtIHMgU3RyaW5nIHRvIGJlIGNvbnZlcnRlZCB0byBVbmljb2RlLgotICAgICAqIEBwYXJhbSBs
ZW5ndGggTGVuZ3RoIG9mIHRoZSBzdHJpbmcuCi0gICAgICogQHBhcmFtIHN0YXR1cyBJQ1UgaW4v
b3V0IGVycm9yIGNvZGUuCi0gICAgICogQHJldHVybiBBIHBvaW50ZXIgdG8gdW5pc3RyLgotICAg
ICAqIEBzdGFibGUgSUNVIDIuOAotICAgICAqLwotICAgIFVuaWNvZGVTdHJpbmcgKnNldENoYXJz
KGNvbnN0IGNoYXIgKnMsIGludDMyX3QgbGVuZ3RoLCBVRXJyb3JDb2RlICZzdGF0dXMpOwotfTsK
LQotVV9OQU1FU1BBQ0VfRU5ECi0KLS8qIFNUUkVOVU1fSCAqLwotI2VuZGlmCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmlj
b2RlL3N0cmluZ3BpZWNlLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVw
ZW5kZW5jaWVzL2ljdS91bmljb2RlL3N0cmluZ3BpZWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGIyOTU3MWQ0YWRiYmRkOWQ2ZDgzMmFhZWIwZjk3NjhiMjQxNjFhNTYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS9zdHJpbmdwaWVjZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAwOS0y
MDEzLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCi0vLyBDb3Jwb3JhdGlvbiBhbmQg
b3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIENvcHlyaWdodCAyMDAxIGFuZCBv
bndhcmRzIEdvb2dsZSBJbmMuCi0vLyBBdXRob3I6IFNhbmpheSBHaGVtYXdhdAotCi0vLyBUaGlz
IGNvZGUgaXMgYSBjb250cmlidXRpb24gb2YgR29vZ2xlIGNvZGUsIGFuZCB0aGUgc3R5bGUgdXNl
ZCBoZXJlIGlzCi0vLyBhIGNvbXByb21pc2UgYmV0d2VlbiB0aGUgb3JpZ2luYWwgR29vZ2xlIGNv
ZGUgYW5kIHRoZSBJQ1UgY29kaW5nIGd1aWRlbGluZXMuCi0vLyBGb3IgZXhhbXBsZSwgZGF0YSB0
eXBlcyBhcmUgSUNVLWlmaWVkIChzaXplX3QsaW50LT5pbnQzMl90KSwKLS8vIGFuZCBBUEkgY29t
bWVudHMgZG94eWdlbi1pZmllZCwgYnV0IGZ1bmN0aW9uIG5hbWVzIGFuZCBiZWhhdmlvciBhcmUK
LS8vIGFzIGluIHRoZSBvcmlnaW5hbCwgaWYgcG9zc2libGUuCi0vLyBBc3NlcnRpb24tc3R5bGUg
ZXJyb3IgaGFuZGxpbmcsIG5vdCBhdmFpbGFibGUgaW4gSUNVLCB3YXMgY2hhbmdlZCB0bwotLy8g
cGFyYW1ldGVyICJwaW5uaW5nIiBzaW1pbGFyIHRvIFVuaWNvZGVTdHJpbmcuCi0vLwotLy8gSW4g
YWRkaXRpb24sIHRoaXMgaXMgb25seSBhIHBhcnRpYWwgcG9ydCBvZiB0aGUgb3JpZ2luYWwgR29v
Z2xlIGNvZGUsCi0vLyBsaW1pdGVkIHRvIHdoYXQgd2FzIG5lZWRlZCBzbyBmYXIuIFRoZSAobmVh
cmx5KSBjb21wbGV0ZSBvcmlnaW5hbCBjb2RlCi0vLyBpcyBpbiB0aGUgSUNVIHN2biByZXBvc2l0
b3J5IGF0IGljdWh0bWwvdHJ1bmsvZGVzaWduL3N0cmluZ3MvY29udHJpYgotLy8gKHNlZSBJQ1Ug
dGlja2V0IDY3NjUsIHIyNTUxNykuCi0KLSNpZm5kZWYgX19TVFJJTkdQSUVDRV9IX18KLSNkZWZp
bmUgX19TVFJJTkdQSUVDRV9IX18KLQotLyoqCi0gKiBcZmlsZSAKLSAqIFxicmllZiBDKysgQVBJ
OiBTdHJpbmdQaWVjZTogUmVhZC1vbmx5IGJ5dGUgc3RyaW5nIHdyYXBwZXIgY2xhc3MuCi0gKi8K
LQotI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCi0jaW5jbHVkZSAidW5pY29kZS91b2JqZWN0
LmgiCi0jaW5jbHVkZSAidW5pY29kZS9zdGRfc3RyaW5nLmgiCi0KLS8vIEFyZ2hoISAgSSB3aXNo
IEMrKyBsaXRlcmFscyB3ZXJlICJzdHJpbmciLgotCi1VX05BTUVTUEFDRV9CRUdJTgotCi0vKioK
LSAqIEEgc3RyaW5nLWxpa2Ugb2JqZWN0IHRoYXQgcG9pbnRzIHRvIGEgc2l6ZWQgcGllY2Ugb2Yg
bWVtb3J5LgotICoKLSAqIFdlIHByb3ZpZGUgbm9uLWV4cGxpY2l0IHNpbmdsZXRvbiBjb25zdHJ1
Y3RvcnMgc28gdXNlcnMgY2FuIHBhc3MKLSAqIGluIGEgImNvbnN0IGNoYXIqIiBvciBhICJzdHJp
bmciIHdoZXJldmVyIGEgIlN0cmluZ1BpZWNlIiBpcwotICogZXhwZWN0ZWQuCi0gKgotICogRnVu
Y3Rpb25zIG9yIG1ldGhvZHMgbWF5IHVzZSBjb25zdCBTdHJpbmdQaWVjZSYgcGFyYW1ldGVycyB0
byBhY2NlcHQgZWl0aGVyCi0gKiBhICJjb25zdCBjaGFyKiIgb3IgYSAic3RyaW5nIiB2YWx1ZSB0
aGF0IHdpbGwgYmUgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8KLSAqIGEgU3RyaW5nUGllY2UuCi0g
KgotICogU3lzdGVtYXRpYyB1c2FnZSBvZiBTdHJpbmdQaWVjZSBpcyBlbmNvdXJhZ2VkIGFzIGl0
IHdpbGwgcmVkdWNlIHVubmVjZXNzYXJ5Ci0gKiBjb252ZXJzaW9ucyBmcm9tICJjb25zdCBjaGFy
KiIgdG8gInN0cmluZyIgYW5kIGJhY2sgYWdhaW4uCi0gKgotICogQHN0YWJsZSBJQ1UgNC4yCi0g
Ki8KLWNsYXNzIFVfQ09NTU9OX0FQSSBTdHJpbmdQaWVjZSA6IHB1YmxpYyBVTWVtb3J5IHsKLSBw
cml2YXRlOgotICBjb25zdCBjaGFyKiAgIHB0cl87Ci0gIGludDMyX3QgICAgICAgbGVuZ3RoXzsK
LQotIHB1YmxpYzoKLSAgLyoqCi0gICAqIERlZmF1bHQgY29uc3RydWN0b3IsIGNyZWF0ZXMgYW4g
ZW1wdHkgU3RyaW5nUGllY2UuCi0gICAqIEBzdGFibGUgSUNVIDQuMgotICAgKi8KLSAgU3RyaW5n
UGllY2UoKSA6IHB0cl8oTlVMTCksIGxlbmd0aF8oMCkgeyB9Ci0gIC8qKgotICAgKiBDb25zdHJ1
Y3RzIGZyb20gYSBOVUwtdGVybWluYXRlZCBjb25zdCBjaGFyICogcG9pbnRlci4KLSAgICogQHBh
cmFtIHN0ciBhIE5VTC10ZXJtaW5hdGVkIGNvbnN0IGNoYXIgKiBwb2ludGVyCi0gICAqIEBzdGFi
bGUgSUNVIDQuMgotICAgKi8KLSAgU3RyaW5nUGllY2UoY29uc3QgY2hhciogc3RyKTsKLSNpZiBV
X0hBVkVfU1REX1NUUklORwotICAvKioKLSAgICogQ29uc3RydWN0cyBmcm9tIGEgc3RkOjpzdHJp
bmcuCi0gICAqIEBzdGFibGUgSUNVIDQuMgotICAgKi8KLSAgU3RyaW5nUGllY2UoY29uc3Qgc3Rk
OjpzdHJpbmcmIHN0cikKLSAgICA6IHB0cl8oc3RyLmRhdGEoKSksIGxlbmd0aF8oc3RhdGljX2Nh
c3Q8aW50MzJfdD4oc3RyLnNpemUoKSkpIHsgfQotI2VuZGlmCi0gIC8qKgotICAgKiBDb25zdHJ1
Y3RzIGZyb20gYSBjb25zdCBjaGFyICogcG9pbnRlciBhbmQgYSBzcGVjaWZpZWQgbGVuZ3RoLgot
ICAgKiBAcGFyYW0gb2Zmc2V0IGEgY29uc3QgY2hhciAqIHBvaW50ZXIgKG5lZWQgbm90IGJlIHRl
cm1pbmF0ZWQpCi0gICAqIEBwYXJhbSBsZW4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nOyBtdXN0
IGJlIG5vbi1uZWdhdGl2ZQotICAgKiBAc3RhYmxlIElDVSA0LjIKLSAgICovCi0gIFN0cmluZ1Bp
ZWNlKGNvbnN0IGNoYXIqIG9mZnNldCwgaW50MzJfdCBsZW4pIDogcHRyXyhvZmZzZXQpLCBsZW5n
dGhfKGxlbikgeyB9Ci0gIC8qKgotICAgKiBTdWJzdHJpbmcgb2YgYW5vdGhlciBTdHJpbmdQaWVj
ZS4KLSAgICogQHBhcmFtIHggdGhlIG90aGVyIFN0cmluZ1BpZWNlCi0gICAqIEBwYXJhbSBwb3Mg
c3RhcnQgcG9zaXRpb24gaW4geDsgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIDw9IHgubGVuZ3Ro
KCkuCi0gICAqIEBzdGFibGUgSUNVIDQuMgotICAgKi8KLSAgU3RyaW5nUGllY2UoY29uc3QgU3Ry
aW5nUGllY2UmIHgsIGludDMyX3QgcG9zKTsKLSAgLyoqCi0gICAqIFN1YnN0cmluZyBvZiBhbm90
aGVyIFN0cmluZ1BpZWNlLgotICAgKiBAcGFyYW0geCB0aGUgb3RoZXIgU3RyaW5nUGllY2UKLSAg
ICogQHBhcmFtIHBvcyBzdGFydCBwb3NpdGlvbiBpbiB4OyBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBh
bmQgPD0geC5sZW5ndGgoKS4KLSAgICogQHBhcmFtIGxlbiBsZW5ndGggb2YgdGhlIHN1YnN0cmlu
ZzsKLSAgICogICAgICAgICAgICBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgd2lsbCBiZSBwaW5u
ZWQgdG8gYXQgbW9zdCB4Lmxlbmd0aCgpIC0gcG9zLgotICAgKiBAc3RhYmxlIElDVSA0LjIKLSAg
ICovCi0gIFN0cmluZ1BpZWNlKGNvbnN0IFN0cmluZ1BpZWNlJiB4LCBpbnQzMl90IHBvcywgaW50
MzJfdCBsZW4pOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgcG9pbnRlci4gTWF5
IGJlIE5VTEwgaWYgaXQgaXMgZW1wdHkuCi0gICAqCi0gICAqIGRhdGEoKSBtYXkgcmV0dXJuIGEg
cG9pbnRlciB0byBhIGJ1ZmZlciB3aXRoIGVtYmVkZGVkIE5VTHMsIGFuZCB0aGUKLSAgICogcmV0
dXJuZWQgYnVmZmVyIG1heSBvciBtYXkgbm90IGJlIG51bGwgdGVybWluYXRlZC4gIFRoZXJlZm9y
ZSBpdCBpcwotICAgKiB0eXBpY2FsbHkgYSBtaXN0YWtlIHRvIHBhc3MgZGF0YSgpIHRvIGEgcm91
dGluZSB0aGF0IGV4cGVjdHMgYSBOVUwKLSAgICogdGVybWluYXRlZCBzdHJpbmcuCi0gICAqIEBy
ZXR1cm4gdGhlIHN0cmluZyBwb2ludGVyCi0gICAqIEBzdGFibGUgSUNVIDQuMgotICAgKi8KLSAg
Y29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHB0cl87IH0KLSAgLyoqCi0gICAqIFJl
dHVybnMgdGhlIHN0cmluZyBsZW5ndGguIFNhbWUgYXMgbGVuZ3RoKCkuCi0gICAqIEByZXR1cm4g
dGhlIHN0cmluZyBsZW5ndGgKLSAgICogQHN0YWJsZSBJQ1UgNC4yCi0gICAqLwotICBpbnQzMl90
IHNpemUoKSBjb25zdCB7IHJldHVybiBsZW5ndGhfOyB9Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRo
ZSBzdHJpbmcgbGVuZ3RoLiBTYW1lIGFzIHNpemUoKS4KLSAgICogQHJldHVybiB0aGUgc3RyaW5n
IGxlbmd0aAotICAgKiBAc3RhYmxlIElDVSA0LjIKLSAgICovCi0gIGludDMyX3QgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbGVuZ3RoXzsgfQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHRo
ZSBzdHJpbmcgaXMgZW1wdHkuCi0gICAqIEByZXR1cm4gVFJVRSBpZiB0aGUgc3RyaW5nIGlzIGVt
cHR5Ci0gICAqIEBzdGFibGUgSUNVIDQuMgotICAgKi8KLSAgVUJvb2wgZW1wdHkoKSBjb25zdCB7
IHJldHVybiBsZW5ndGhfID09IDA7IH0KLQotICAvKioKLSAgICogU2V0cyB0byBhbiBlbXB0eSBz
dHJpbmcuCi0gICAqIEBzdGFibGUgSUNVIDQuMgotICAgKi8KLSAgdm9pZCBjbGVhcigpIHsgcHRy
XyA9IE5VTEw7IGxlbmd0aF8gPSAwOyB9Ci0KLSAgLyoqCi0gICAqIFJlc2V0IHRoZSBzdHJpbmdw
aWVjZSB0byByZWZlciB0byBuZXcgZGF0YS4KLSAgICogQHBhcmFtIHhkYXRhIHBvaW50ZXIgdGhl
IG5ldyBzdHJpbmcgZGF0YS4gIE5lZWQgbm90IGJlIG51bCB0ZXJtaW5hdGVkLgotICAgKiBAcGFy
YW0gbGVuIHRoZSBsZW5ndGggb2YgdGhlIG5ldyBkYXRhCi0gICAqIEBzdGFibGUgSUNVIDQuOAot
ICAgKi8KLSAgdm9pZCBzZXQoY29uc3QgY2hhciogeGRhdGEsIGludDMyX3QgbGVuKSB7IHB0cl8g
PSB4ZGF0YTsgbGVuZ3RoXyA9IGxlbjsgfQotCi0gIC8qKgotICAgKiBSZXNldCB0aGUgc3RyaW5n
cGllY2UgdG8gcmVmZXIgdG8gbmV3IGRhdGEuCi0gICAqIEBwYXJhbSBzdHIgYSBwb2ludGVyIHRv
IGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nLiAKLSAgICogQHN0YWJsZSBJQ1UgNC44Ci0gICAqLwot
ICB2b2lkIHNldChjb25zdCBjaGFyKiBzdHIpOwotCi0gIC8qKgotICAgKiBSZW1vdmVzIHRoZSBm
aXJzdCBuIHN0cmluZyB1bml0cy4KLSAgICogQHBhcmFtIG4gcHJlZml4IGxlbmd0aCwgbXVzdCBi
ZSBub24tbmVnYXRpdmUgYW5kIDw9bGVuZ3RoKCkKLSAgICogQHN0YWJsZSBJQ1UgNC4yCi0gICAq
LwotICB2b2lkIHJlbW92ZV9wcmVmaXgoaW50MzJfdCBuKSB7Ci0gICAgaWYgKG4gPj0gMCkgewot
ICAgICAgaWYgKG4gPiBsZW5ndGhfKSB7Ci0gICAgICAgIG4gPSBsZW5ndGhfOwotICAgICAgfQot
ICAgICAgcHRyXyArPSBuOwotICAgICAgbGVuZ3RoXyAtPSBuOwotICAgIH0KLSAgfQotCi0gIC8q
KgotICAgKiBSZW1vdmVzIHRoZSBsYXN0IG4gc3RyaW5nIHVuaXRzLgotICAgKiBAcGFyYW0gbiBz
dWZmaXggbGVuZ3RoLCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgPD1sZW5ndGgoKQotICAgKiBA
c3RhYmxlIElDVSA0LjIKLSAgICovCi0gIHZvaWQgcmVtb3ZlX3N1ZmZpeChpbnQzMl90IG4pIHsK
LSAgICBpZiAobiA+PSAwKSB7Ci0gICAgICBpZiAobiA8PSBsZW5ndGhfKSB7Ci0gICAgICAgIGxl
bmd0aF8gLT0gbjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGxlbmd0aF8gPSAwOwotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNYXhpbXVtIGludGVnZXIsIHVzZWQgYXMgYSBk
ZWZhdWx0IHZhbHVlIGZvciBzdWJzdHJpbmcgbWV0aG9kcy4KLSAgICogQHN0YWJsZSBJQ1UgNC4y
Ci0gICAqLwotICBzdGF0aWMgY29uc3QgaW50MzJfdCBucG9zOyAvLyA9IDB4N2ZmZmZmZmY7Ci0K
LSAgLyoqCi0gICAqIFJldHVybnMgYSBzdWJzdHJpbmcgb2YgdGhpcyBTdHJpbmdQaWVjZS4KLSAg
ICogQHBhcmFtIHBvcyBzdGFydCBwb3NpdGlvbjsgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIDw9
IGxlbmd0aCgpLgotICAgKiBAcGFyYW0gbGVuIGxlbmd0aCBvZiB0aGUgc3Vic3RyaW5nOwotICAg
KiAgICAgICAgICAgIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCB3aWxsIGJlIHBpbm5lZCB0byBh
dCBtb3N0IGxlbmd0aCgpIC0gcG9zLgotICAgKiBAcmV0dXJuIHRoZSBzdWJzdHJpbmcgU3RyaW5n
UGllY2UKLSAgICogQHN0YWJsZSBJQ1UgNC4yCi0gICAqLwotICBTdHJpbmdQaWVjZSBzdWJzdHIo
aW50MzJfdCBwb3MsIGludDMyX3QgbGVuID0gbnBvcykgY29uc3QgewotICAgIHJldHVybiBTdHJp
bmdQaWVjZSgqdGhpcywgcG9zLCBsZW4pOwotICB9Ci19OwotCi0vKioKLSAqIEdsb2JhbCBvcGVy
YXRvciA9PSBmb3IgU3RyaW5nUGllY2UKLSAqIEBwYXJhbSB4IFRoZSBmaXJzdCBTdHJpbmdQaWVj
ZSB0byBjb21wYXJlLgotICogQHBhcmFtIHkgVGhlIHNlY29uZCBTdHJpbmdQaWVjZSB0byBjb21w
YXJlLgotICogQHJldHVybiBUUlVFIGlmIHRoZSBzdHJpbmcgZGF0YSBpcyBlcXVhbAotICogQHN0
YWJsZSBJQ1UgNC44Ci0gKi8KLVVfRVhQT1JUIFVCb29sIFVfRVhQT1JUMiAKLW9wZXJhdG9yPT0o
Y29uc3QgU3RyaW5nUGllY2UmIHgsIGNvbnN0IFN0cmluZ1BpZWNlJiB5KTsKLQotLyoqCi0gKiBH
bG9iYWwgb3BlcmF0b3IgIT0gZm9yIFN0cmluZ1BpZWNlCi0gKiBAcGFyYW0geCBUaGUgZmlyc3Qg
U3RyaW5nUGllY2UgdG8gY29tcGFyZS4KLSAqIEBwYXJhbSB5IFRoZSBzZWNvbmQgU3RyaW5nUGll
Y2UgdG8gY29tcGFyZS4KLSAqIEByZXR1cm4gVFJVRSBpZiB0aGUgc3RyaW5nIGRhdGEgaXMgbm90
IGVxdWFsCi0gKiBAc3RhYmxlIElDVSA0LjgKLSAqLwotaW5saW5lIFVCb29sIG9wZXJhdG9yIT0o
Y29uc3QgU3RyaW5nUGllY2UmIHgsIGNvbnN0IFN0cmluZ1BpZWNlJiB5KSB7Ci0gIHJldHVybiAh
KHggPT0geSk7Ci19Ci0KLVVfTkFNRVNQQUNFX0VORAotCi0jZW5kaWYgIC8vIF9fU1RSSU5HUElF
Q0VfSF9fCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVw
ZW5kZW5jaWVzL2ljdS91bmljb2RlL3VicmsuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvdWJyay5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5YmRiNGQ1ZDlkZTMxODhlM2ZlZDcyZTM5ZWZlYjc1MmI1ZGE1YjA0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvdWJyay5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTQwICswLDAgQEAKLS8qCi0qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
LSogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGlu
ZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgotKi8KLQotI2lmbmRlZiBVQlJLX0gKLSNkZWZpbmUgVUJSS19ICi0K
LSNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgotI2luY2x1ZGUgInVuaWNvZGUvdWxvYy5oIgot
I2luY2x1ZGUgInVuaWNvZGUvdXRleHQuaCIKLSNpbmNsdWRlICJ1bmljb2RlL2xvY2FscG9pbnRl
ci5oIgotCi0vKioKLSAqIEEgdGV4dC1icmVhayBpdGVyYXRvci4KLSAqICBGb3IgdXNhZ2UgaW4g
QyBwcm9ncmFtcy4KLSAqLwotI2lmbmRlZiBVQlJLX1RZUEVERUZfVUJSRUFLX0lURVJBVE9SCi0j
ICAgZGVmaW5lIFVCUktfVFlQRURFRl9VQlJFQUtfSVRFUkFUT1IKLSAgICAvKioKLSAgICAgKiAg
T3BhcXVlIHR5cGUgcmVwcmVzZW50aW5nIGFuIElDVSBCcmVhayBpdGVyYXRvciBvYmplY3QuCi0g
ICAgICogIEBzdGFibGUgSUNVIDIuMAotICAgICAqLwotICAgIHR5cGVkZWYgc3RydWN0IFVCcmVh
a0l0ZXJhdG9yIFVCcmVha0l0ZXJhdG9yOwotI2VuZGlmCi0KLSNpZiAhVUNPTkZJR19OT19CUkVB
S19JVEVSQVRJT04KLQotI2luY2x1ZGUgInVuaWNvZGUvcGFyc2VlcnIuaCIKLQotLyoqCi0gKiBc
ZmlsZQotICogXGJyaWVmIEMgQVBJOiBCcmVha0l0ZXJhdG9yCi0gKgotICogPGgyPiBCcmVha0l0
ZXJhdG9yIEMgQVBJIDwvaDI+Ci0gKgotICogVGhlIEJyZWFrSXRlcmF0b3IgQyBBUEkgZGVmaW5l
cyAgbWV0aG9kcyBmb3IgZmluZGluZyB0aGUgbG9jYXRpb24KLSAqIG9mIGJvdW5kYXJpZXMgaW4g
dGV4dC4gUG9pbnRlciB0byBhIFVCcmVha0l0ZXJhdG9yIG1haW50YWluIGEKLSAqIGN1cnJlbnQg
cG9zaXRpb24gYW5kIHNjYW4gb3ZlciB0ZXh0IHJldHVybmluZyB0aGUgaW5kZXggb2YgY2hhcmFj
dGVycwotICogd2hlcmUgYm91bmRhcmllcyBvY2N1ci4KLSAqIDxwPgotICogTGluZSBib3VuZGFy
eSBhbmFseXNpcyBkZXRlcm1pbmVzIHdoZXJlIGEgdGV4dCBzdHJpbmcgY2FuIGJlIGJyb2tlbgot
ICogd2hlbiBsaW5lLXdyYXBwaW5nLiBUaGUgbWVjaGFuaXNtIGNvcnJlY3RseSBoYW5kbGVzIHB1
bmN0dWF0aW9uIGFuZAotICogaHlwaGVuYXRlZCB3b3Jkcy4KLSAqIDxwPgotICogU2VudGVuY2Ug
Ym91bmRhcnkgYW5hbHlzaXMgYWxsb3dzIHNlbGVjdGlvbiB3aXRoIGNvcnJlY3QKLSAqIGludGVy
cHJldGF0aW9uIG9mIHBlcmlvZHMgd2l0aGluIG51bWJlcnMgYW5kIGFiYnJldmlhdGlvbnMsIGFu
ZAotICogdHJhaWxpbmcgcHVuY3R1YXRpb24gbWFya3Mgc3VjaCBhcyBxdW90YXRpb24gbWFya3Mg
YW5kIHBhcmVudGhlc2VzLgotICogPHA+Ci0gKiBXb3JkIGJvdW5kYXJ5IGFuYWx5c2lzIGlzIHVz
ZWQgYnkgc2VhcmNoIGFuZCByZXBsYWNlIGZ1bmN0aW9ucywgYXMKLSAqIHdlbGwgYXMgd2l0aGlu
IHRleHQgZWRpdGluZyBhcHBsaWNhdGlvbnMgdGhhdCBhbGxvdyB0aGUgdXNlciB0bwotICogc2Vs
ZWN0IHdvcmRzIHdpdGggYSBkb3VibGUgY2xpY2suIFdvcmQgc2VsZWN0aW9uIHByb3ZpZGVzIGNv
cnJlY3QKLSAqIGludGVycHJldGF0aW9uIG9mIHB1bmN0dWF0aW9uIG1hcmtzIHdpdGhpbiBhbmQg
Zm9sbG93aW5nCi0gKiB3b3Jkcy4gQ2hhcmFjdGVycyB0aGF0IGFyZSBub3QgcGFydCBvZiBhIHdv
cmQsIHN1Y2ggYXMgc3ltYm9scyBvcgotICogcHVuY3R1YXRpb24gbWFya3MsIGhhdmUgd29yZC1i
cmVha3Mgb24gYm90aCBzaWRlcy4KLSAqIDxwPgotICogQ2hhcmFjdGVyIGJvdW5kYXJ5IGFuYWx5
c2lzIGlkZW50aWZpZXMgdGhlIGJvdW5kYXJpZXMgb2YKLSAqICJFeHRlbmRlZCBHcmFwaGVtZSBD
bHVzdGVycyIsIHdoaWNoIGFyZSBncm91cGluZ3Mgb2YgY29kZXBvaW50cwotICogdGhhdCBzaG91
bGQgYmUgdHJlYXRlZCBhcyBjaGFyYWN0ZXItbGlrZSB1bml0cyBmb3IgbWFueSB0ZXh0IG9wZXJh
dGlvbnMuCi0gKiBQbGVhc2Ugc2VlIFVuaWNvZGUgU3RhbmRhcmQgQW5uZXggIzI5LCBVbmljb2Rl
IFRleHQgU2VnbWVudGF0aW9uLAotICogaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3Ry
MjkvIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIAotICogb24gZ3JhcGhlbWUgY2x1c3RlcnMg
YW5kIGd1aWRlbGluZXMgb24gdGhlaXIgdXNlLgotICogPHA+Ci0gKiBUaXRsZSBib3VuZGFyeSBh
bmFseXNpcyBsb2NhdGVzIGFsbCBwb3NpdGlvbnMsCi0gKiB0eXBpY2FsbHkgc3RhcnRzIG9mIHdv
cmRzLCB0aGF0IHNob3VsZCBiZSBzZXQgdG8gVGl0bGUgQ2FzZQotICogd2hlbiB0aXRsZSBjYXNp
bmcgdGhlIHRleHQuCi0gKiA8cD4KLSAqIFRoZSB0ZXh0IGJvdW5kYXJ5IHBvc2l0aW9ucyBhcmUg
Zm91bmQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcwotICogZGVzY3JpYmVkIGluIFVuaWNvZGUgU3Rh
bmRhcmQgQW5uZXggIzI5LCBUZXh0IEJvdW5kYXJpZXMsIGFuZAotICogVW5pY29kZSBTdGFuZGFy
ZCBBbm5leCAjMTQsIExpbmUgQnJlYWtpbmcgUHJvcGVydGllcy4gIFRoZXNlCi0gKiBhcmUgYXZh
aWxhYmxlIGF0IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjE0LyBhbmQKLSAqIGh0
dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjI5Ly4KLSAqIDxwPgotICogSW4gYWRkaXRp
b24gdG8gdGhlIHBsYWluIEMgQVBJIGRlZmluZWQgaW4gdGhpcyBoZWFkZXIgZmlsZSwgYW4KLSAq
IG9iamVjdCBvcmllbnRlZCBDKysgQVBJIHdpdGggZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5IGlz
IGRlZmluZWQgaW4gdGhlCi0gKiBmaWxlIGJya2l0ZXIuaC4KLSAqIDxwPgotICogQ29kZSBzbmlw
cGV0cyBpbGx1c3RyYXRpbmcgdGhlIHVzZSBvZiB0aGUgQnJlYWsgSXRlcmF0b3IgQVBJcwotICog
YXJlIGF2YWlsYWJsZSBpbiB0aGUgSUNVIFVzZXIgR3VpZGUsCi0gKiBodHRwOi8vaWN1LXByb2pl
Y3Qub3JnL3VzZXJndWlkZS9ib3VuZGFyeUFuYWx5c2lzLmh0bWwKLSAqIGFuZCBpbiB0aGUgc2Ft
cGxlIHByb2dyYW0gaWN1L3NvdXJjZS9zYW1wbGVzL2JyZWFrL2JyZWFrLmNwcAotICovCi0KLS8q
KiBUaGUgcG9zc2libGUgdHlwZXMgb2YgdGV4dCBib3VuZGFyaWVzLiAgQHN0YWJsZSBJQ1UgMi4w
ICovCi10eXBlZGVmIGVudW0gVUJyZWFrSXRlcmF0b3JUeXBlIHsKLSAgLyoqIENoYXJhY3RlciBi
cmVha3MgIEBzdGFibGUgSUNVIDIuMCAqLwotICBVQlJLX0NIQVJBQ1RFUiA9IDAsCi0gIC8qKiBX
b3JkIGJyZWFrcyBAc3RhYmxlIElDVSAyLjAgKi8KLSAgVUJSS19XT1JEID0gMSwKLSAgLyoqIExp
bmUgYnJlYWtzIEBzdGFibGUgSUNVIDIuMCAqLwotICBVQlJLX0xJTkUgPSAyLAotICAvKiogU2Vu
dGVuY2UgYnJlYWtzIEBzdGFibGUgSUNVIDIuMCAqLwotICBVQlJLX1NFTlRFTkNFID0gMywKLQot
I2lmbmRlZiBVX0hJREVfREVQUkVDQVRFRF9BUEkKLSAgLyoqCi0gICAqIFRpdGxlIENhc2UgYnJl
YWtzCi0gICAqIFRoZSBpdGVyYXRvciBjcmVhdGVkIHVzaW5nIHRoaXMgdHlwZSBsb2NhdGVzIHRp
dGxlIGJvdW5kYXJpZXMgYXMgZGVzY3JpYmVkIGZvcgotICAgKiBVbmljb2RlIDMuMiBvbmx5LiBG
b3IgVW5pY29kZSA0LjAgYW5kIGFib3ZlIHRpdGxlIGJvdW5kYXJ5IGl0ZXJhdGlvbiwKLSAgICog
cGxlYXNlIHVzZSBXb3JkIEJvdW5kYXJ5IGl0ZXJhdG9yLgotICAgKgotICAgKiBAZGVwcmVjYXRl
ZCBJQ1UgMi44IFVzZSB0aGUgd29yZCBicmVhayBpdGVyYXRvciBmb3IgdGl0bGVjYXNpbmcgZm9y
IFVuaWNvZGUgNCBhbmQgbGF0ZXIuCi0gICAqLwotICBVQlJLX1RJVExFID0gNCwKLSNlbmRpZiAv
KiBVX0hJREVfREVQUkVDQVRFRF9BUEkgKi8KLSAgVUJSS19DT1VOVCA9IDUKLX0gVUJyZWFrSXRl
cmF0b3JUeXBlOwotCi0vKiogVmFsdWUgaW5kaWNhdGluZyBhbGwgdGV4dCBib3VuZGFyaWVzIGhh
dmUgYmVlbiByZXR1cm5lZC4KLSAqICBAc3RhYmxlIElDVSAyLjAKLSAqLwotI2RlZmluZSBVQlJL
X0RPTkUgKChpbnQzMl90KSAtMSkKLQotCi0vKioKLSAqICBFbnVtIGNvbnN0YW50cyBmb3IgdGhl
IHdvcmQgYnJlYWsgdGFncyByZXR1cm5lZCBieQotICogIGdldFJ1bGVTdGF0dXMoKS4gIEEgcmFu
Z2Ugb2YgdmFsdWVzIGlzIGRlZmluZWQgZm9yIGVhY2ggY2F0ZWdvcnkgb2YKLSAqICB3b3JkLCB0
byBhbGxvdyBmb3IgZnVydGhlciBzdWJkaXZpc2lvbnMgb2YgYSBjYXRlZ29yeSBpbiBmdXR1cmUg
cmVsZWFzZXMuCi0gKiAgQXBwbGljYXRpb25zIHNob3VsZCBjaGVjayBmb3IgdGFnIHZhbHVlcyBm
YWxsaW5nIHdpdGhpbiB0aGUgcmFuZ2UsIHJhdGhlcgotICogIHRoYW4gZm9yIHNpbmdsZSBpbmRp
dmlkdWFsIHZhbHVlcy4KLSAqICBAc3RhYmxlIElDVSAyLjIKLSovCi10eXBlZGVmIGVudW0gVVdv
cmRCcmVhayB7Ci0gICAgLyoqIFRhZyB2YWx1ZSBmb3IgIndvcmRzIiB0aGF0IGRvIG5vdCBmaXQg
aW50byBhbnkgb2Ygb3RoZXIgY2F0ZWdvcmllcy4KLSAgICAgKiAgSW5jbHVkZXMgc3BhY2VzIGFu
ZCBtb3N0IHB1bmN0dWF0aW9uLiAqLwotICAgIFVCUktfV09SRF9OT05FICAgICAgICAgICA9IDAs
Ci0gICAgLyoqIFVwcGVyIGJvdW5kIGZvciB0YWdzIGZvciB1bmNhdGVnb3JpemVkIHdvcmRzLiAq
LwotICAgIFVCUktfV09SRF9OT05FX0xJTUlUICAgICA9IDEwMCwKLSAgICAvKiogVGFnIHZhbHVl
IGZvciB3b3JkcyB0aGF0IGFwcGVhciB0byBiZSBudW1iZXJzLCBsb3dlciBsaW1pdC4gICAgKi8K
LSAgICBVQlJLX1dPUkRfTlVNQkVSICAgICAgICAgPSAxMDAsCi0gICAgLyoqIFRhZyB2YWx1ZSBm
b3Igd29yZHMgdGhhdCBhcHBlYXIgdG8gYmUgbnVtYmVycywgdXBwZXIgbGltaXQuICAgICovCi0g
ICAgVUJSS19XT1JEX05VTUJFUl9MSU1JVCAgID0gMjAwLAotICAgIC8qKiBUYWcgdmFsdWUgZm9y
IHdvcmRzIHRoYXQgY29udGFpbiBsZXR0ZXJzLCBleGNsdWRpbmcKLSAgICAgKiAgaGlyYWdhbmEs
IGthdGFrYW5hIG9yIGlkZW9ncmFwaGljIGNoYXJhY3RlcnMsIGxvd2VyIGxpbWl0LiAgICAqLwot
ICAgIFVCUktfV09SRF9MRVRURVIgICAgICAgICA9IDIwMCwKLSAgICAvKiogVGFnIHZhbHVlIGZv
ciB3b3JkcyBjb250YWluaW5nIGxldHRlcnMsIHVwcGVyIGxpbWl0ICAqLwotICAgIFVCUktfV09S
RF9MRVRURVJfTElNSVQgICA9IDMwMCwKLSAgICAvKiogVGFnIHZhbHVlIGZvciB3b3JkcyBjb250
YWluaW5nIGthbmEgY2hhcmFjdGVycywgbG93ZXIgbGltaXQgKi8KLSAgICBVQlJLX1dPUkRfS0FO
QSAgICAgICAgICAgPSAzMDAsCi0gICAgLyoqIFRhZyB2YWx1ZSBmb3Igd29yZHMgY29udGFpbmlu
ZyBrYW5hIGNoYXJhY3RlcnMsIHVwcGVyIGxpbWl0ICovCi0gICAgVUJSS19XT1JEX0tBTkFfTElN
SVQgICAgID0gNDAwLAotICAgIC8qKiBUYWcgdmFsdWUgZm9yIHdvcmRzIGNvbnRhaW5pbmcgaWRl
b2dyYXBoaWMgY2hhcmFjdGVycywgbG93ZXIgbGltaXQgKi8KLSAgICBVQlJLX1dPUkRfSURFTyAg
ICAgICAgICAgPSA0MDAsCi0gICAgLyoqIFRhZyB2YWx1ZSBmb3Igd29yZHMgY29udGFpbmluZyBp
ZGVvZ3JhcGhpYyBjaGFyYWN0ZXJzLCB1cHBlciBsaW1pdCAqLwotICAgIFVCUktfV09SRF9JREVP
X0xJTUlUICAgICA9IDUwMAotfSBVV29yZEJyZWFrOwotCi0vKioKLSAqICBFbnVtIGNvbnN0YW50
cyBmb3IgdGhlIGxpbmUgYnJlYWsgdGFncyByZXR1cm5lZCBieSBnZXRSdWxlU3RhdHVzKCkuCi0g
KiAgQSByYW5nZSBvZiB2YWx1ZXMgaXMgZGVmaW5lZCBmb3IgZWFjaCBjYXRlZ29yeSBvZgotICog
IHdvcmQsIHRvIGFsbG93IGZvciBmdXJ0aGVyIHN1YmRpdmlzaW9ucyBvZiBhIGNhdGVnb3J5IGlu
IGZ1dHVyZSByZWxlYXNlcy4KLSAqICBBcHBsaWNhdGlvbnMgc2hvdWxkIGNoZWNrIGZvciB0YWcg
dmFsdWVzIGZhbGxpbmcgd2l0aGluIHRoZSByYW5nZSwgcmF0aGVyCi0gKiAgdGhhbiBmb3Igc2lu
Z2xlIGluZGl2aWR1YWwgdmFsdWVzLgotICogIEBzdGFibGUgSUNVIDIuOAotKi8KLXR5cGVkZWYg
ZW51bSBVTGluZUJyZWFrVGFnIHsKLSAgICAvKiogVGFnIHZhbHVlIGZvciBzb2Z0IGxpbmUgYnJl
YWtzLCBwb3NpdGlvbnMgYXQgd2hpY2ggYSBsaW5lIGJyZWFrCi0gICAgICAqICBpcyBhY2NlcHRh
YmxlIGJ1dCBub3QgcmVxdWlyZWQgICAgICAgICAgICAgICAgKi8KLSAgICBVQlJLX0xJTkVfU09G
VCAgICAgICAgICAgID0gMCwKLSAgICAvKiogVXBwZXIgYm91bmQgZm9yIHNvZnQgbGluZSBicmVh
a3MuICAgICAgICAgICAgICAqLwotICAgIFVCUktfTElORV9TT0ZUX0xJTUlUICAgICAgPSAxMDAs
Ci0gICAgLyoqIFRhZyB2YWx1ZSBmb3IgYSBoYXJkLCBvciBtYW5kYXRvcnkgbGluZSBicmVhayAg
Ki8KLSAgICBVQlJLX0xJTkVfSEFSRCAgICAgICAgICAgID0gMTAwLAotICAgIC8qKiBVcHBlciBi
b3VuZCBmb3IgaGFyZCBsaW5lIGJyZWFrcy4gICAgICAgICAgICAgICovCi0gICAgVUJSS19MSU5F
X0hBUkRfTElNSVQgICAgICA9IDIwMAotfSBVTGluZUJyZWFrVGFnOwotCi0KLQotLyoqCi0gKiAg
RW51bSBjb25zdGFudHMgZm9yIHRoZSBzZW50ZW5jZSBicmVhayB0YWdzIHJldHVybmVkIGJ5IGdl
dFJ1bGVTdGF0dXMoKS4KLSAqICBBIHJhbmdlIG9mIHZhbHVlcyBpcyBkZWZpbmVkIGZvciBlYWNo
IGNhdGVnb3J5IG9mCi0gKiAgc2VudGVuY2UsIHRvIGFsbG93IGZvciBmdXJ0aGVyIHN1YmRpdmlz
aW9ucyBvZiBhIGNhdGVnb3J5IGluIGZ1dHVyZSByZWxlYXNlcy4KLSAqICBBcHBsaWNhdGlvbnMg
c2hvdWxkIGNoZWNrIGZvciB0YWcgdmFsdWVzIGZhbGxpbmcgd2l0aGluIHRoZSByYW5nZSwgcmF0
aGVyCi0gKiAgdGhhbiBmb3Igc2luZ2xlIGluZGl2aWR1YWwgdmFsdWVzLgotICogIEBzdGFibGUg
SUNVIDIuOAotKi8KLXR5cGVkZWYgZW51bSBVU2VudGVuY2VCcmVha1RhZyB7Ci0gICAgLyoqIFRh
ZyB2YWx1ZSBmb3IgZm9yIHNlbnRlbmNlcyAgZW5kaW5nIHdpdGggYSBzZW50ZW5jZSB0ZXJtaW5h
dG9yCi0gICAgICAqICgnLicsICc/JywgJyEnLCBldGMuKSBjaGFyYWN0ZXIsIHBvc3NpYmx5IGZv
bGxvd2VkIGJ5IGEKLSAgICAgICogaGFyZCBzZXBhcmF0b3IgKENSLCBMRiwgUFMsIGV0Yy4pCi0g
ICAgICAqLwotICAgIFVCUktfU0VOVEVOQ0VfVEVSTSAgICAgICA9IDAsCi0gICAgLyoqIFVwcGVy
IGJvdW5kIGZvciB0YWdzIGZvciBzZW50ZW5jZXMgZW5kZWQgYnkgc2VudGVuY2UgdGVybWluYXRv
cnMuICAgICovCi0gICAgVUJSS19TRU5URU5DRV9URVJNX0xJTUlUID0gMTAwLAotICAgIC8qKiBU
YWcgdmFsdWUgZm9yIGZvciBzZW50ZW5jZXMgdGhhdCBkbyBub3QgY29udGFpbiBhbiBlbmRpbmcK
LSAgICAgICogc2VudGVuY2UgdGVybWluYXRvciAoJy4nLCAnPycsICchJywgZXRjLikgY2hhcmFj
dGVyLCBidXQKLSAgICAgICogYXJlIGVuZGVkIG9ubHkgYnkgYSBoYXJkIHNlcGFyYXRvciAoQ1Is
IExGLCBQUywgZXRjLikgb3IgZW5kIG9mIGlucHV0LgotICAgICAgKi8KLSAgICBVQlJLX1NFTlRF
TkNFX1NFUCAgICAgICAgPSAxMDAsCi0gICAgLyoqIFVwcGVyIGJvdW5kIGZvciB0YWdzIGZvciBz
ZW50ZW5jZXMgZW5kZWQgYnkgYSBzZXBhcmF0b3IuICAgICAgICAgICAgICAqLwotICAgIFVCUktf
U0VOVEVOQ0VfU0VQX0xJTUlUICA9IDIwMAotICAgIC8qKiBUYWcgdmFsdWUgZm9yIGEgaGFyZCwg
b3IgbWFuZGF0b3J5IGxpbmUgYnJlYWsgICovCi19IFVTZW50ZW5jZUJyZWFrVGFnOwotCi0KLS8q
KgotICogT3BlbiBhIG5ldyBVQnJlYWtJdGVyYXRvciBmb3IgbG9jYXRpbmcgdGV4dCBib3VuZGFy
aWVzIGZvciBhIHNwZWNpZmllZCBsb2NhbGUuCi0gKiBBIFVCcmVha0l0ZXJhdG9yIG1heSBiZSB1
c2VkIGZvciBkZXRlY3RpbmcgY2hhcmFjdGVyLCBsaW5lLCB3b3JkLAotICogYW5kIHNlbnRlbmNl
IGJyZWFrcyBpbiB0ZXh0LgotICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgVUJyZWFrSXRlcmF0
b3IgdG8gb3Blbjogb25lIG9mIFVCUktfQ0hBUkFDVEVSLCBVQlJLX1dPUkQsCi0gKiBVQlJLX0xJ
TkUsIFVCUktfU0VOVEVOQ0UKLSAqIEBwYXJhbSBsb2NhbGUgVGhlIGxvY2FsZSBzcGVjaWZ5aW5n
IHRoZSB0ZXh0LWJyZWFraW5nIGNvbnZlbnRpb25zLgotICogQHBhcmFtIHRleHQgVGhlIHRleHQg
dG8gYmUgaXRlcmF0ZWQgb3Zlci4KLSAqIEBwYXJhbSB0ZXh0TGVuZ3RoIFRoZSBudW1iZXIgb2Yg
Y2hhcmFjdGVycyBpbiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCi0gKiBAcGFyYW0g
c3RhdHVzIEEgVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuCi0gKiBAcmV0dXJuIEEg
VUJyZWFrSXRlcmF0b3IgZm9yIHRoZSBzcGVjaWZpZWQgbG9jYWxlLgotICogQHNlZSB1YnJrX29w
ZW5SdWxlcwotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxFIFVCcmVha0l0ZXJhdG9y
KiBVX0VYUE9SVDIKLXVicmtfb3BlbihVQnJlYWtJdGVyYXRvclR5cGUgdHlwZSwKLSAgICAgIGNv
bnN0IGNoYXIgKmxvY2FsZSwKLSAgICAgIGNvbnN0IFVDaGFyICp0ZXh0LAotICAgICAgaW50MzJf
dCB0ZXh0TGVuZ3RoLAotICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsKLQotLyoqCi0gKiBPcGVu
IGEgbmV3IFVCcmVha0l0ZXJhdG9yIGZvciBsb2NhdGluZyB0ZXh0IGJvdW5kYXJpZXMgdXNpbmcg
c3BlY2lmaWVkIGJyZWFraW5nIHJ1bGVzLgotICogVGhlIHJ1bGUgc3ludGF4IGlzIC4uLiAoVEJE
KQotICogQHBhcmFtIHJ1bGVzIEEgc2V0IG9mIHJ1bGVzIHNwZWNpZnlpbmcgdGhlIHRleHQgYnJl
YWtpbmcgY29udmVudGlvbnMuCi0gKiBAcGFyYW0gcnVsZXNMZW5ndGggVGhlIG51bWJlciBvZiBj
aGFyYWN0ZXJzIGluIHJ1bGVzLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCi0gKiBAcGFyYW0g
dGV4dCBUaGUgdGV4dCB0byBiZSBpdGVyYXRlZCBvdmVyLiAgTWF5IGJlIG51bGwsIGluIHdoaWNo
IGNhc2UgdWJya19zZXRUZXh0KCkgaXMKLSAqICAgICAgICB1c2VkIHRvIHNwZWNpZnkgdGhlIHRl
eHQgdG8gYmUgaXRlcmF0ZWQuCi0gKiBAcGFyYW0gdGV4dExlbmd0aCBUaGUgbnVtYmVyIG9mIGNo
YXJhY3RlcnMgaW4gdGV4dCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgotICogQHBhcmFtIHBh
cnNlRXJyICAgUmVjZWl2ZXMgcG9zaXRpb24gYW5kIGNvbnRleHQgaW5mb3JtYXRpb24gZm9yIGFu
eSBzeW50YXggZXJyb3JzCi0gKiAgICAgICAgICAgICAgICAgICBkZXRlY3RlZCB3aGlsZSBwYXJz
aW5nIHRoZSBydWxlcy4KLSAqIEBwYXJhbSBzdGF0dXMgQSBVRXJyb3JDb2RlIHRvIHJlY2VpdmUg
YW55IGVycm9ycy4KLSAqIEByZXR1cm4gQSBVQnJlYWtJdGVyYXRvciBmb3IgdGhlIHNwZWNpZmll
ZCBydWxlcy4KLSAqIEBzZWUgdWJya19vcGVuCi0gKiBAc3RhYmxlIElDVSAyLjIKLSAqLwotVV9T
VEFCTEUgVUJyZWFrSXRlcmF0b3IqIFVfRVhQT1JUMgotdWJya19vcGVuUnVsZXMoY29uc3QgVUNo
YXIgICAgICpydWxlcywKLSAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICBydWxlc0xlbmd0
aCwKLSAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAqdGV4dCwKLSAgICAgICAgICAgICAg
IGludDMyX3QgICAgICAgICAgdGV4dExlbmd0aCwKLSAgICAgICAgICAgICAgIFVQYXJzZUVycm9y
ICAgICAqcGFyc2VFcnIsCi0gICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgKnN0YXR1cyk7
Ci0KLS8qKgotICogVGhyZWFkIHNhZmUgY2xvbmluZyBvcGVyYXRpb24KLSAqIEBwYXJhbSBiaSBp
dGVyYXRvciB0byBiZSBjbG9uZWQKLSAqIEBwYXJhbSBzdGFja0J1ZmZlciA8ZW0+RGVwcmVjYXRl
ZCBmdW5jdGlvbmFsaXR5IGFzIG9mIElDVSA1MiwgdXNlIE5VTEwuPC9lbT48YnI+Ci0gKiAgdXNl
ciBhbGxvY2F0ZWQgc3BhY2UgZm9yIHRoZSBuZXcgY2xvbmUuIElmIE5VTEwgbmV3IG1lbW9yeSB3
aWxsIGJlIGFsbG9jYXRlZC4KLSAqICBJZiBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCwgbmV3
IG1lbW9yeSB3aWxsIGJlIGFsbG9jYXRlZC4KLSAqICBDbGllbnRzIGNhbiB1c2UgdGhlIFVfQlJL
X1NBRkVDTE9ORV9CVUZGRVJTSVpFLgotICogQHBhcmFtIHBCdWZmZXJTaXplIDxlbT5EZXByZWNh
dGVkIGZ1bmN0aW9uYWxpdHkgYXMgb2YgSUNVIDUyLCB1c2UgTlVMTCBvciAxLjwvZW0+PGJyPgot
ICogIHBvaW50ZXIgdG8gc2l6ZSBvZiBhbGxvY2F0ZWQgc3BhY2UuCi0gKiAgSWYgKnBCdWZmZXJT
aXplID09IDAsIGEgc3VmZmljaWVudCBzaXplIGZvciB1c2UgaW4gY2xvbmluZyB3aWxsCi0gKiAg
YmUgcmV0dXJuZWQgKCdwcmUtZmxpZ2h0aW5nJykKLSAqICBJZiAqcEJ1ZmZlclNpemUgaXMgbm90
IGVub3VnaCBmb3IgYSBzdGFjay1iYXNlZCBzYWZlIGNsb25lLAotICogIG5ldyBtZW1vcnkgd2ls
bCBiZSBhbGxvY2F0ZWQuCi0gKiBAcGFyYW0gc3RhdHVzIHRvIGluZGljYXRlIHdoZXRoZXIgdGhl
IG9wZXJhdGlvbiB3ZW50IG9uIHNtb290aGx5IG9yIHRoZXJlIHdlcmUgZXJyb3JzCi0gKiAgQW4g
aW5mb3JtYXRpb25hbCBzdGF0dXMgdmFsdWUsIFVfU0FGRUNMT05FX0FMTE9DQVRFRF9FUlJPUiwg
aXMgdXNlZCBpZiBhbnkgYWxsb2NhdGlvbnMgd2VyZSBuZWNlc3NhcnkuCi0gKiBAcmV0dXJuIHBv
aW50ZXIgdG8gdGhlIG5ldyBjbG9uZQotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxF
IFVCcmVha0l0ZXJhdG9yICogVV9FWFBPUlQyCi11YnJrX3NhZmVDbG9uZSgKLSAgICAgICAgICBj
b25zdCBVQnJlYWtJdGVyYXRvciAqYmksCi0gICAgICAgICAgdm9pZCAqc3RhY2tCdWZmZXIsCi0g
ICAgICAgICAgaW50MzJfdCAqcEJ1ZmZlclNpemUsCi0gICAgICAgICAgVUVycm9yQ29kZSAqc3Rh
dHVzKTsKLQotI2lmbmRlZiBVX0hJREVfREVQUkVDQVRFRF9BUEkKLQotLyoqCi0gICogQSByZWNv
bW1lbmRlZCBzaXplIChpbiBieXRlcykgZm9yIHRoZSBtZW1vcnkgYnVmZmVyIHRvIGJlIHBhc3Nl
ZCB0byB1YnJrX3NhdmVDbG9uZSgpLgotICAqIEBkZXByZWNhdGVkIElDVSA1Mi4gRG8gbm90IHJl
bHkgb24gdWJya19zYWZlQ2xvbmUoKSBjbG9uaW5nIGludG8gYW55IHByb3ZpZGVkIGJ1ZmZlci4K
LSAgKi8KLSNkZWZpbmUgVV9CUktfU0FGRUNMT05FX0JVRkZFUlNJWkUgMQotCi0jZW5kaWYgLyog
VV9ISURFX0RFUFJFQ0FURURfQVBJICovCi0KLS8qKgotKiBDbG9zZSBhIFVCcmVha0l0ZXJhdG9y
LgotKiBPbmNlIGNsb3NlZCwgYSBVQnJlYWtJdGVyYXRvciBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQu
Ci0qIEBwYXJhbSBiaSBUaGUgYnJlYWsgaXRlcmF0b3IgdG8gY2xvc2UuCi0gKiBAc3RhYmxlIElD
VSAyLjAKLSovCi1VX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgotdWJya19jbG9zZShVQnJlYWtJdGVy
YXRvciAqYmkpOwotCi0jaWYgVV9TSE9XX0NQTFVTUExVU19BUEkKLQotVV9OQU1FU1BBQ0VfQkVH
SU4KLQotLyoqCi0gKiBcY2xhc3MgTG9jYWxVQnJlYWtJdGVyYXRvclBvaW50ZXIKLSAqICJTbWFy
dCBwb2ludGVyIiBjbGFzcywgY2xvc2VzIGEgVUJyZWFrSXRlcmF0b3IgdmlhIHVicmtfY2xvc2Uo
KS4KLSAqIEZvciBtb3N0IG1ldGhvZHMgc2VlIHRoZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2UgY2xh
c3MuCi0gKgotICogQHNlZSBMb2NhbFBvaW50ZXJCYXNlCi0gKiBAc2VlIExvY2FsUG9pbnRlcgot
ICogQHN0YWJsZSBJQ1UgNC40Ci0gKi8KLVVfREVGSU5FX0xPQ0FMX09QRU5fUE9JTlRFUihMb2Nh
bFVCcmVha0l0ZXJhdG9yUG9pbnRlciwgVUJyZWFrSXRlcmF0b3IsIHVicmtfY2xvc2UpOwotCi1V
X05BTUVTUEFDRV9FTkQKLQotI2VuZGlmCi0KLS8qKgotICogU2V0cyBhbiBleGlzdGluZyBpdGVy
YXRvciB0byBwb2ludCB0byBhIG5ldyBwaWVjZSBvZiB0ZXh0Ci0gKiBAcGFyYW0gYmkgVGhlIGl0
ZXJhdG9yIHRvIHVzZQotICogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gYmUgc2V0Ci0gKiBAcGFy
YW0gdGV4dExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSB0ZXh0Ci0gKiBAcGFyYW0gc3RhdHVzIFRo
ZSBlcnJvciBjb2RlCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgdm9pZCBVX0VY
UE9SVDIKLXVicmtfc2V0VGV4dChVQnJlYWtJdGVyYXRvciogYmksCi0gICAgICAgICAgICAgY29u
c3QgVUNoYXIqICAgIHRleHQsCi0gICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIHRleHRMZW5n
dGgsCi0gICAgICAgICAgICAgVUVycm9yQ29kZSogICAgIHN0YXR1cyk7Ci0KLQotLyoqCi0gKiBT
ZXRzIGFuIGV4aXN0aW5nIGl0ZXJhdG9yIHRvIHBvaW50IHRvIGEgbmV3IHBpZWNlIG9mIHRleHQu
Ci0gKgotICogQWxsIGluZGV4IHBvc2l0aW9ucyByZXR1cm5lZCBieSBicmVhayBpdGVyYXRvciBm
dW5jdGlvbnMgYXJlCi0gKiBuYXRpdmUgaW5kaWNlcyBmcm9tIHRoZSBVVGV4dC4gRm9yIGV4YW1w
bGUsIHdoZW4gYnJlYWtpbmcgVVRGLTgKLSAqIGVuY29kZWQgdGV4dCwgdGhlIGJyZWFrIHBvc2l0
aW9ucyByZXR1cm5lZCBieSBccmVmIHVicmtfbmV4dCwgXHJlZiB1YnJrX3ByZXZpb3VzLCBldGMu
Ci0gKiB3aWxsIGJlIFVURi04IHN0cmluZyBpbmRpY2VzLCBub3QgVVRGLTE2IHBvc2l0aW9ucy4K
LSAqCi0gKiBAcGFyYW0gYmkgVGhlIGl0ZXJhdG9yIHRvIHVzZQotICogQHBhcmFtIHRleHQgVGhl
IHRleHQgdG8gYmUgc2V0LgotICogICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBtYWtlcyBhIHNo
YWxsb3cgY2xvbmUgb2YgdGhlIHN1cHBsaWVkIFVUZXh0LiAgVGhpcyBtZWFucwotICogICAgICAg
ICAgICAgdGhhdCB0aGUgY2FsbGVyIGlzIGZyZWUgdG8gaW1tZWRpYXRlbHkgY2xvc2Ugb3Igb3Ro
ZXJ3aXNlIHJldXNlIHRoZQotICogICAgICAgICAgICAgVVRleHQgdGhhdCB3YXMgcGFzc2VkIGFz
IGEgcGFyYW1ldGVyLCBidXQgdGhhdCB0aGUgdW5kZXJseWluZyB0ZXh0IGl0c2VsZgotICogICAg
ICAgICAgICAgbXVzdCBub3QgYmUgYWx0ZXJlZCB3aGlsZSBiZWluZyByZWZlcmVuY2VkIGJ5IHRo
ZSBicmVhayBpdGVyYXRvci4KLSAqIEBwYXJhbSBzdGF0dXMgVGhlIGVycm9yIGNvZGUKLSAqIEBz
dGFibGUgSUNVIDMuNAotICovCi1VX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgotdWJya19zZXRVVGV4
dChVQnJlYWtJdGVyYXRvciogYmksCi0gICAgICAgICAgICAgVVRleHQqICAgICAgICAgIHRleHQs
Ci0gICAgICAgICAgICAgVUVycm9yQ29kZSogICAgIHN0YXR1cyk7Ci0KLQotCi0vKioKLSAqIERl
dGVybWluZSB0aGUgbW9zdCByZWNlbnRseS1yZXR1cm5lZCB0ZXh0IGJvdW5kYXJ5LgotICoKLSAq
IEBwYXJhbSBiaSBUaGUgYnJlYWsgaXRlcmF0b3IgdG8gdXNlLgotICogQHJldHVybiBUaGUgY2hh
cmFjdGVyIGluZGV4IG1vc3QgcmVjZW50bHkgcmV0dXJuZWQgYnkgXHJlZiB1YnJrX25leHQsIFxy
ZWYgdWJya19wcmV2aW91cywKLSAqIFxyZWYgdWJya19maXJzdCwgb3IgXHJlZiB1YnJrX2xhc3Qu
Ci0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKLXVi
cmtfY3VycmVudChjb25zdCBVQnJlYWtJdGVyYXRvciAqYmkpOwotCi0vKioKLSAqIEFkdmFuY2Ug
dGhlIGl0ZXJhdG9yIHRvIHRoZSBib3VuZGFyeSBmb2xsb3dpbmcgdGhlIGN1cnJlbnQgYm91bmRh
cnkuCi0gKgotICogQHBhcmFtIGJpIFRoZSBicmVhayBpdGVyYXRvciB0byB1c2UuCi0gKiBAcmV0
dXJuIFRoZSBjaGFyYWN0ZXIgaW5kZXggb2YgdGhlIG5leHQgdGV4dCBib3VuZGFyeSwgb3IgVUJS
S19ET05FCi0gKiBpZiBhbGwgdGV4dCBib3VuZGFyaWVzIGhhdmUgYmVlbiByZXR1cm5lZC4KLSAq
IEBzZWUgdWJya19wcmV2aW91cwotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxFIGlu
dDMyX3QgVV9FWFBPUlQyCi11YnJrX25leHQoVUJyZWFrSXRlcmF0b3IgKmJpKTsKLQotLyoqCi0g
KiBTZXQgdGhlIGl0ZXJhdG9yIHBvc2l0aW9uIHRvIHRoZSBib3VuZGFyeSBwcmVjZWRpbmcgdGhl
IGN1cnJlbnQgYm91bmRhcnkuCi0gKgotICogQHBhcmFtIGJpIFRoZSBicmVhayBpdGVyYXRvciB0
byB1c2UuCi0gKiBAcmV0dXJuIFRoZSBjaGFyYWN0ZXIgaW5kZXggb2YgdGhlIHByZWNlZGluZyB0
ZXh0IGJvdW5kYXJ5LCBvciBVQlJLX0RPTkUKLSAqIGlmIGFsbCB0ZXh0IGJvdW5kYXJpZXMgaGF2
ZSBiZWVuIHJldHVybmVkLgotICogQHNlZSB1YnJrX25leHQKLSAqIEBzdGFibGUgSUNVIDIuMAot
ICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgotdWJya19wcmV2aW91cyhVQnJlYWtJdGVy
YXRvciAqYmkpOwotCi0vKioKLSAqIFNldCB0aGUgaXRlcmF0b3IgcG9zaXRpb24gdG8gemVybywg
dGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IGJlaW5nIHNjYW5uZWQuCi0gKiBAcGFyYW0gYmkgVGhlIGJy
ZWFrIGl0ZXJhdG9yIHRvIHVzZS4KLSAqIEByZXR1cm4gVGhlIG5ldyBpdGVyYXRvciBwb3NpdGlv
biAoemVybykuCi0gKiBAc2VlIHVicmtfbGFzdAotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVf
U1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCi11YnJrX2ZpcnN0KFVCcmVha0l0ZXJhdG9yICpiaSk7
Ci0KLS8qKgotICogU2V0IHRoZSBpdGVyYXRvciBwb3NpdGlvbiB0byB0aGUgaW5kZXggaW1tZWRp
YXRlbHkgPEVNPmJleW9uZDwvRU0+IHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgdGV4dCBiZWlu
ZyBzY2FubmVkLgotICogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGxhc3QgY2hhcmFjdGVy
LgotICogQHBhcmFtIGJpIFRoZSBicmVhayBpdGVyYXRvciB0byB1c2UuCi0gKiBAcmV0dXJuIFRo
ZSBjaGFyYWN0ZXIgb2Zmc2V0IGltbWVkaWF0ZWx5IDxFTT5iZXlvbmQ8L0VNPiB0aGUgbGFzdCBj
aGFyYWN0ZXIgaW4gdGhlCi0gKiB0ZXh0IGJlaW5nIHNjYW5uZWQuCi0gKiBAc2VlIHVicmtfZmly
c3QKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgot
dWJya19sYXN0KFVCcmVha0l0ZXJhdG9yICpiaSk7Ci0KLS8qKgotICogU2V0IHRoZSBpdGVyYXRv
ciBwb3NpdGlvbiB0byB0aGUgZmlyc3QgYm91bmRhcnkgcHJlY2VkaW5nIHRoZSBzcGVjaWZpZWQg
b2Zmc2V0LgotICogVGhlIG5ldyBwb3NpdGlvbiBpcyBhbHdheXMgc21hbGxlciB0aGFuIG9mZnNl
dCwgb3IgVUJSS19ET05FLgotICogQHBhcmFtIGJpIFRoZSBicmVhayBpdGVyYXRvciB0byB1c2Uu
Ci0gKiBAcGFyYW0gb2Zmc2V0IFRoZSBvZmZzZXQgdG8gYmVnaW4gc2Nhbm5pbmcuCi0gKiBAcmV0
dXJuIFRoZSB0ZXh0IGJvdW5kYXJ5IHByZWNlZGluZyBvZmZzZXQsIG9yIFVCUktfRE9ORS4KLSAq
IEBzZWUgdWJya19mb2xsb3dpbmcKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBp
bnQzMl90IFVfRVhQT1JUMgotdWJya19wcmVjZWRpbmcoVUJyZWFrSXRlcmF0b3IgKmJpLAotICAg
ICAgICAgICBpbnQzMl90IG9mZnNldCk7Ci0KLS8qKgotICogQWR2YW5jZSB0aGUgaXRlcmF0b3Ig
dG8gdGhlIGZpcnN0IGJvdW5kYXJ5IGZvbGxvd2luZyB0aGUgc3BlY2lmaWVkIG9mZnNldC4KLSAq
IFRoZSB2YWx1ZSByZXR1cm5lZCBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIG9mZnNldCwgb3IgVUJS
S19ET05FLgotICogQHBhcmFtIGJpIFRoZSBicmVhayBpdGVyYXRvciB0byB1c2UuCi0gKiBAcGFy
YW0gb2Zmc2V0IFRoZSBvZmZzZXQgdG8gYmVnaW4gc2Nhbm5pbmcuCi0gKiBAcmV0dXJuIFRoZSB0
ZXh0IGJvdW5kYXJ5IGZvbGxvd2luZyBvZmZzZXQsIG9yIFVCUktfRE9ORS4KLSAqIEBzZWUgdWJy
a19wcmVjZWRpbmcKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBpbnQzMl90IFVf
RVhQT1JUMgotdWJya19mb2xsb3dpbmcoVUJyZWFrSXRlcmF0b3IgKmJpLAotICAgICAgICAgICBp
bnQzMl90IG9mZnNldCk7Ci0KLS8qKgotKiBHZXQgYSBsb2NhbGUgZm9yIHdoaWNoIHRleHQgYnJl
YWtpbmcgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgotKiBBIFVCcmVha0l0ZXJhdG9yIGluIGEg
bG9jYWxlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gd2lsbCBwZXJmb3JtIHRoZSBjb3JyZWN0
Ci0qIHRleHQgYnJlYWtpbmcgZm9yIHRoZSBsb2NhbGUuCi0qIEBwYXJhbSBpbmRleCBUaGUgaW5k
ZXggb2YgdGhlIGRlc2lyZWQgbG9jYWxlLgotKiBAcmV0dXJuIEEgbG9jYWxlIGZvciB3aGljaCBu
dW1iZXIgdGV4dCBicmVha2luZyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUsIG9yIDAgaWYgbm9u
ZS4KLSogQHNlZSB1YnJrX2NvdW50QXZhaWxhYmxlCi0qIEBzdGFibGUgSUNVIDIuMAotKi8KLVVf
U1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQT1JUMgotdWJya19nZXRBdmFpbGFibGUoaW50MzJfdCBp
bmRleCk7Ci0KLS8qKgotKiBEZXRlcm1pbmUgaG93IG1hbnkgbG9jYWxlcyBoYXZlIHRleHQgYnJl
YWtpbmcgaW5mb3JtYXRpb24gYXZhaWxhYmxlLgotKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3QgdXNl
ZnVsIGFzIGRldGVybWluaW5nIHRoZSBsb29wIGVuZGluZyBjb25kaXRpb24gZm9yCi0qIGNhbGxz
IHRvIFxyZWYgdWJya19nZXRBdmFpbGFibGUuCi0qIEByZXR1cm4gVGhlIG51bWJlciBvZiBsb2Nh
bGVzIGZvciB3aGljaCB0ZXh0IGJyZWFraW5nIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KLSog
QHNlZSB1YnJrX2dldEF2YWlsYWJsZQotKiBAc3RhYmxlIElDVSAyLjAKLSovCi1VX1NUQUJMRSBp
bnQzMl90IFVfRVhQT1JUMgotdWJya19jb3VudEF2YWlsYWJsZSh2b2lkKTsKLQotCi0vKioKLSog
UmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjZmllZCBwb3NpdGlvbiBpcyBhIGJvdW5kYXJ5IHBvc2l0
aW9uLiAgQXMgYSBzaWRlCi0qIGVmZmVjdCwgbGVhdmVzIHRoZSBpdGVyYXRvciBwb2ludGluZyB0
byB0aGUgZmlyc3QgYm91bmRhcnkgcG9zaXRpb24gYXQKLSogb3IgYWZ0ZXIgIm9mZnNldCIuCi0q
IEBwYXJhbSBiaSBUaGUgYnJlYWsgaXRlcmF0b3IgdG8gdXNlLgotKiBAcGFyYW0gb2Zmc2V0IHRo
ZSBvZmZzZXQgdG8gY2hlY2suCi0qIEByZXR1cm4gVHJ1ZSBpZiAib2Zmc2V0IiBpcyBhIGJvdW5k
YXJ5IHBvc2l0aW9uLgotKiBAc3RhYmxlIElDVSAyLjAKLSovCi1VX1NUQUJMRSAgVUJvb2wgVV9F
WFBPUlQyCi11YnJrX2lzQm91bmRhcnkoVUJyZWFrSXRlcmF0b3IgKmJpLCBpbnQzMl90IG9mZnNl
dCk7Ci0KLS8qKgotICogUmV0dXJuIHRoZSBzdGF0dXMgZnJvbSB0aGUgYnJlYWsgcnVsZSB0aGF0
IGRldGVybWluZWQgdGhlIG1vc3QgcmVjZW50bHkKLSAqIHJldHVybmVkIGJyZWFrIHBvc2l0aW9u
LiAgVGhlIHZhbHVlcyBhcHBlYXIgaW4gdGhlIHJ1bGUgc291cmNlCi0gKiB3aXRoaW4gYnJhY2tl
dHMsIHsxMjN9LCBmb3IgZXhhbXBsZS4gIEZvciBydWxlcyB0aGF0IGRvIG5vdCBzcGVjaWZ5IGEK
LSAqIHN0YXR1cywgYSBkZWZhdWx0IHZhbHVlIG9mIDAgaXMgcmV0dXJuZWQuCi0gKiA8cD4KLSAq
IEZvciB3b3JkIGJyZWFrIGl0ZXJhdG9ycywgdGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUgZGVmaW5l
ZCBpbiBlbnVtIFVXb3JkQnJlYWsuCi0gKiBAc3RhYmxlIElDVSAyLjIKLSAqLwotVV9TVEFCTEUg
IGludDMyX3QgVV9FWFBPUlQyCi11YnJrX2dldFJ1bGVTdGF0dXMoVUJyZWFrSXRlcmF0b3IgKmJp
KTsKLQotLyoqCi0gKiBHZXQgdGhlIHN0YXR1c2VzIGZyb20gdGhlIGJyZWFrIHJ1bGVzIHRoYXQg
ZGV0ZXJtaW5lZCB0aGUgbW9zdCByZWNlbnRseQotICogcmV0dXJuZWQgYnJlYWsgcG9zaXRpb24u
ICBUaGUgdmFsdWVzIGFwcGVhciBpbiB0aGUgcnVsZSBzb3VyY2UKLSAqIHdpdGhpbiBicmFja2V0
cywgezEyM30sIGZvciBleGFtcGxlLiAgVGhlIGRlZmF1bHQgc3RhdHVzIHZhbHVlIGZvciBydWxl
cwotICogdGhhdCBkbyBub3QgZXhwbGljaXRseSBwcm92aWRlIG9uZSBpcyB6ZXJvLgotICogPHA+
Ci0gKiBGb3Igd29yZCBicmVhayBpdGVyYXRvcnMsIHRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlIGRl
ZmluZWQgaW4gZW51bSBVV29yZEJyZWFrLgotICogQHBhcmFtIGJpICAgICAgICBUaGUgYnJlYWsg
aXRlcmF0b3IgdG8gdXNlCi0gKiBAcGFyYW0gZmlsbEluVmVjIGFuIGFycmF5IHRvIGJlIGZpbGxl
ZCBpbiB3aXRoIHRoZSBzdGF0dXMgdmFsdWVzLgotICogQHBhcmFtIGNhcGFjaXR5ICB0aGUgbGVu
Z3RoIG9mIHRoZSBzdXBwbGllZCB2ZWN0b3IuICBBIGxlbmd0aCBvZiB6ZXJvIGNhdXNlcwotICog
ICAgICAgICAgICAgICAgICB0aGUgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3Rh
dHVzIHZhbHVlcywgaW4gdGhlCi0gKiAgICAgICAgICAgICAgICAgIG5vcm1hbCB3YXksIHdpdGhv
dXQgYXR0ZW10cGluZyB0byBzdG9yZSBhbnkgdmFsdWVzLgotICogQHBhcmFtIHN0YXR1cyAgICBy
ZWNlaXZlcyBlcnJvciBjb2Rlcy4KLSAqIEByZXR1cm4gICAgICAgICAgVGhlIG51bWJlciBvZiBy
dWxlIHN0YXR1cyB2YWx1ZXMgZnJvbSBydWxlcyB0aGF0IGRldGVybWluZWQKLSAqICAgICAgICAg
ICAgICAgICAgdGhlIG1vc3QgcmVjZW50IGJvdW5kYXJ5IHJldHVybmVkIGJ5IHRoZSBicmVhayBp
dGVyYXRvci4KLSAqIEBzdGFibGUgSUNVIDMuMAotICovCi1VX1NUQUJMRSAgaW50MzJfdCBVX0VY
UE9SVDIKLXVicmtfZ2V0UnVsZVN0YXR1c1ZlYyhVQnJlYWtJdGVyYXRvciAqYmksIGludDMyX3Qg
KmZpbGxJblZlYywgaW50MzJfdCBjYXBhY2l0eSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKLQotLyoq
Ci0gKiBSZXR1cm4gdGhlIGxvY2FsZSBvZiB0aGUgYnJlYWsgaXRlcmF0b3IuIFlvdSBjYW4gY2hv
b3NlIGJldHdlZW4gdGhlIHZhbGlkIGFuZAotICogdGhlIGFjdHVhbCBsb2NhbGUuCi0gKiBAcGFy
YW0gYmkgYnJlYWsgaXRlcmF0b3IKLSAqIEBwYXJhbSB0eXBlIGxvY2FsZSB0eXBlICh2YWxpZCBv
ciBhY3R1YWwpCi0gKiBAcGFyYW0gc3RhdHVzIGVycm9yIGNvZGUKLSAqIEByZXR1cm4gbG9jYWxl
IHN0cmluZwotICogQHN0YWJsZSBJQ1UgMi44Ci0gKi8KLVVfU1RBQkxFIGNvbnN0IGNoYXIqIFVf
RVhQT1JUMgotdWJya19nZXRMb2NhbGVCeVR5cGUoY29uc3QgVUJyZWFrSXRlcmF0b3IgKmJpLCBV
TG9jRGF0YUxvY2FsZVR5cGUgdHlwZSwgVUVycm9yQ29kZSogc3RhdHVzKTsKLQotLyoqCi0gICog
IFNldCB0aGUgc3ViamVjdCB0ZXh0IHN0cmluZyB1cG9uIHdoaWNoIHRoZSBicmVhayBpdGVyYXRv
ciBpcyBvcGVyYXRpbmcKLSAgKiAgd2l0aG91dCBjaGFuZ2luZyBhbnkgb3RoZXIgYXNwZWN0IG9m
IHRoZSBzdGF0ZS4KLSAgKiAgVGhlIG5ldyBhbmQgcHJldmlvdXMgdGV4dCBzdHJpbmdzIG11c3Qg
aGF2ZSB0aGUgc2FtZSBjb250ZW50LgotICAqCi0gICogIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5k
ZWQgZm9yIHVzZSBpbiBlbnZpcm9ubWVudHMgd2hlcmUgSUNVIGlzIG9wZXJhdGluZyBvbgotICAq
ICBzdHJpbmdzIHRoYXQgbWF5IG1vdmUgYXJvdW5kIGluIG1lbW9yeS4gIEl0IHByb3ZpZGVzIGEg
bWVjaGFuaXNtIGZvciBub3RpZnlpbmcKLSAgKiAgSUNVIHRoYXQgdGhlIHN0cmluZyBoYXMgYmVl
biByZWxvY2F0ZWQsIGFuZCBwcm92aWRpbmcgYSBuZXcgVVRleHQgdG8gYWNjZXNzIHRoZQotICAq
ICBzdHJpbmcgaW4gaXRzIG5ldyBwb3NpdGlvbi4KLSAgKgotICAqICBOb3RlIHRoYXQgdGhlIGJy
ZWFrIGl0ZXJhdG9yIG5ldmVyIGNvcGllcyB0aGUgdW5kZXJseWluZyB0ZXh0Ci0gICogIG9mIGEg
c3RyaW5nIGJlaW5nIHByb2Nlc3NlZCwgYnV0IGFsd2F5cyBvcGVyYXRlcyBkaXJlY3RseSBvbiB0
aGUgb3JpZ2luYWwgdGV4dAotICAqICBwcm92aWRlZCBieSB0aGUgdXNlci4gUmVmcmVzaGluZyBz
aW1wbHkgZHJvcHMgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCB0ZXh0Ci0gICogIGFuZCByZXBs
YWNlcyB0aGVtIHdpdGggcmVmZXJlbmNlcyB0byB0aGUgbmV3LgotICAqCi0gICogIENhdXRpb246
ICB0aGlzIGZ1bmN0aW9uIGlzIG5vcm1hbGx5IHVzZWQgb25seSBieSB2ZXJ5IHNwZWNpYWxpemVk
Ci0gICogICAgICAgICAgICBzeXN0ZW0tbGV2ZWwgY29kZS4gICBPbmUgZXhhbXBsZSB1c2UgY2Fz
ZSBpcyB3aXRoIGdhcmJhZ2UgY29sbGVjdGlvbgotICAqICAgICAgICAgICAgdGhhdCBtb3ZlcyB0
aGUgdGV4dCBpbiBtZW1vcnkuCi0gICoKLSAgKiBAcGFyYW0gYmkgICAgICAgICBUaGUgYnJlYWsg
aXRlcmF0b3IuCi0gICogQHBhcmFtIHRleHQgICAgICAgVGhlIG5ldyAobW92ZWQpIHRleHQgc3Ry
aW5nLgotICAqIEBwYXJhbSBzdGF0dXMgICAgIFJlY2VpdmVzIGVycm9ycyBkZXRlY3RlZCBieSB0
aGlzIGZ1bmN0aW9uLgotICAqCi0gICogQHN0YWJsZSBJQ1UgNDkKLSAgKi8KLVVfU1RBQkxFIHZv
aWQgVV9FWFBPUlQyCi11YnJrX3JlZnJlc2hVVGV4dChVQnJlYWtJdGVyYXRvciAqYmksCi0gICAg
ICAgICAgICAgICAgICAgICAgIFVUZXh0ICAgICAgICAgICp0ZXh0LAotICAgICAgICAgICAgICAg
ICAgICAgICBVRXJyb3JDb2RlICAgICAqc3RhdHVzKTsKLQotI2VuZGlmIC8qICNpZiAhVUNPTkZJ
R19OT19CUkVBS19JVEVSQVRJT04gKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3VjYXNlbWFw
LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91
bmljb2RlL3VjYXNlbWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzN2UxNjU4
ODY5N2YxYTkzMDE5MWVlM2RmODE2YzYzYjdiZDM4YzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3Rm
L2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS91Y2FzZW1hcC5oCisrKyAvZGV2L251bGwKQEAgLTEs
NDIzICswLDAgQEAKLS8qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qICAgQ29weXJpZ2h0
IChDKSAyMDA1LTIwMTIsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKLSogICBDb3Jw
b3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoKLSoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKLSogICBmaWxlIG5hbWU6ICB1Y2FzZW1hcC5oCi0qICAgZW5jb2Rpbmc6ICAg
VVMtQVNDSUkKLSogICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkKLSogICBpbmRlbnRhdGlvbjo0
Ci0qCi0qICAgY3JlYXRlZCBvbjogMjAwNW1heTA2Ci0qICAgY3JlYXRlZCBieTogTWFya3VzIFcu
IFNjaGVyZXIKLSoKLSogICBDYXNlIG1hcHBpbmcgc2VydmljZSBvYmplY3QgYW5kIGZ1bmN0aW9u
cyB1c2luZyBpdC4KLSovCi0KLSNpZm5kZWYgX19VQ0FTRU1BUF9IX18KLSNkZWZpbmUgX19VQ0FT
RU1BUF9IX18KLQotI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCi0jaW5jbHVkZSAidW5pY29k
ZS91c3RyaW5nLmgiCi0jaW5jbHVkZSAidW5pY29kZS9sb2NhbHBvaW50ZXIuaCIKLQotLyoqCi0g
KiBcZmlsZQotICogXGJyaWVmIEMgQVBJOiBVbmljb2RlIGNhc2UgbWFwcGluZyBmdW5jdGlvbnMg
dXNpbmcgYSBVQ2FzZU1hcCBzZXJ2aWNlIG9iamVjdC4KLSAqCi0gKiBUaGUgc2VydmljZSBvYmpl
Y3QgdGFrZXMgY2FyZSBvZiBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgbG9hZGluZywgYW5kIHNl
dHVwCi0gKiBmb3IgdGhlIGF0dHJpYnV0ZXMsIGFzIHVzdWFsLgotICoKLSAqIEN1cnJlbnRseSwg
dGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgaGVyZSBkb2VzIG5vdCBvdmVybGFwIHdpdGggdWNo
YXIuaAotICogYW5kIHVzdHJpbmcuaCwgZXhjZXB0IGZvciB1Y2FzZW1hcF90b1RpdGxlKCkuCi0g
KgotICogdWNhc2VtYXBfdXRmOFhZWigpIGZ1bmN0aW9ucyBvcGVyYXRlIGRpcmVjdGx5IG9uIFVU
Ri04IHN0cmluZ3MuCi0gKi8KLQotLyoqCi0gKiBVQ2FzZU1hcCBpcyBhbiBvcGFxdWUgc2Vydmlj
ZSBvYmplY3QgZm9yIG5ld2VyIElDVSBjYXNlIG1hcHBpbmcgZnVuY3Rpb25zLgotICogT2xkZXIg
ZnVuY3Rpb25zIGRpZCBub3QgdXNlIGEgc2VydmljZSBvYmplY3QuCi0gKiBAc3RhYmxlIElDVSAz
LjQKLSAqLwotc3RydWN0IFVDYXNlTWFwOwotdHlwZWRlZiBzdHJ1Y3QgVUNhc2VNYXAgVUNhc2VN
YXA7IC8qKjwgQyB0eXBlZGVmIGZvciBzdHJ1Y3QgVUNhc2VNYXAuIEBzdGFibGUgSUNVIDMuNCAq
LwotCi0vKioKLSAqIE9wZW4gYSBVQ2FzZU1hcCBzZXJ2aWNlIG9iamVjdCBmb3IgYSBsb2NhbGUg
YW5kIGEgc2V0IG9mIG9wdGlvbnMuCi0gKiBUaGUgbG9jYWxlIElEIGFuZCBvcHRpb25zIGFyZSBw
cmVwcm9jZXNzZWQgc28gdGhhdCBmdW5jdGlvbnMgdXNpbmcgdGhlCi0gKiBzZXJ2aWNlIG9iamVj
dCBuZWVkIG5vdCBwcm9jZXNzIHRoZW0gaW4gZWFjaCBjYWxsLgotICoKLSAqIEBwYXJhbSBsb2Nh
bGUgSUNVIGxvY2FsZSBJRCwgdXNlZCBmb3IgbGFuZ3VhZ2UtZGVwZW5kZW50Ci0gKiAgICAgICAg
ICAgICAgIHVwcGVyLS9sb3dlci0vdGl0bGUtY2FzaW5nIGFjY29yZGluZyB0byB0aGUgVW5pY29k
ZSBzdGFuZGFyZC4KLSAqICAgICAgICAgICAgICAgVXN1YWwgc2VtYW50aWNzOiAiIj1yb290LCBO
VUxMPWRlZmF1bHQgbG9jYWxlLCBldGMuCi0gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGJpdCBz
ZXQsIHVzZWQgZm9yIGNhc2UgZm9sZGluZyBhbmQgc3RyaW5nIGNvbXBhcmlzb25zLgotICogICAg
ICAgICAgICAgICAgU2FtZSBmbGFncyBhcyBmb3IgdV9mb2xkQ2FzZSgpLCB1X3N0ckZvbGRDYXNl
KCksCi0gKiAgICAgICAgICAgICAgICB1X3N0ckNhc2VDb21wYXJlKCksIGV0Yy4KLSAqICAgICAg
ICAgICAgICAgIFVzZSAwIG9yIFVfRk9MRF9DQVNFX0RFRkFVTFQgZm9yIGRlZmF1bHQgYmVoYXZp
b3IuCi0gKiBAcGFyYW0gcEVycm9yQ29kZSBNdXN0IGJlIGEgdmFsaWQgcG9pbnRlciB0byBhbiBl
cnJvciBjb2RlIHZhbHVlLAotICogICAgICAgICAgICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5k
aWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC4KLSAqIEByZXR1cm4gUG9p
bnRlciB0byBhIFVDYXNlTWFwIHNlcnZpY2Ugb2JqZWN0LCBpZiBzdWNjZXNzZnVsLgotICoKLSAq
IEBzZWUgVV9GT0xEX0NBU0VfREVGQVVMVAotICogQHNlZSBVX0ZPTERfQ0FTRV9FWENMVURFX1NQ
RUNJQUxfSQotICogQHNlZSBVX1RJVExFQ0FTRV9OT19MT1dFUkNBU0UKLSAqIEBzZWUgVV9USVRM
RUNBU0VfTk9fQlJFQUtfQURKVVNUTUVOVAotICogQHN0YWJsZSBJQ1UgMy40Ci0gKi8KLVVfU1RB
QkxFIFVDYXNlTWFwICogVV9FWFBPUlQyCi11Y2FzZW1hcF9vcGVuKGNvbnN0IGNoYXIgKmxvY2Fs
ZSwgdWludDMyX3Qgb3B0aW9ucywgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7Ci0KLS8qKgotICog
Q2xvc2UgYSBVQ2FzZU1hcCBzZXJ2aWNlIG9iamVjdC4KLSAqIEBwYXJhbSBjc20gT2JqZWN0IHRv
IGJlIGNsb3NlZC4KLSAqIEBzdGFibGUgSUNVIDMuNAotICovCi1VX1NUQUJMRSB2b2lkIFVfRVhQ
T1JUMgotdWNhc2VtYXBfY2xvc2UoVUNhc2VNYXAgKmNzbSk7Ci0KLSNpZiBVX1NIT1dfQ1BMVVNQ
TFVTX0FQSQotCi1VX05BTUVTUEFDRV9CRUdJTgotCi0vKioKLSAqIFxjbGFzcyBMb2NhbFVDYXNl
TWFwUG9pbnRlcgotICogIlNtYXJ0IHBvaW50ZXIiIGNsYXNzLCBjbG9zZXMgYSBVQ2FzZU1hcCB2
aWEgdWNhc2VtYXBfY2xvc2UoKS4KLSAqIEZvciBtb3N0IG1ldGhvZHMgc2VlIHRoZSBMb2NhbFBv
aW50ZXJCYXNlIGJhc2UgY2xhc3MuCi0gKgotICogQHNlZSBMb2NhbFBvaW50ZXJCYXNlCi0gKiBA
c2VlIExvY2FsUG9pbnRlcgotICogQHN0YWJsZSBJQ1UgNC40Ci0gKi8KLVVfREVGSU5FX0xPQ0FM
X09QRU5fUE9JTlRFUihMb2NhbFVDYXNlTWFwUG9pbnRlciwgVUNhc2VNYXAsIHVjYXNlbWFwX2Ns
b3NlKTsKLQotVV9OQU1FU1BBQ0VfRU5ECi0KLSNlbmRpZgotCi0vKioKLSAqIEdldCB0aGUgbG9j
YWxlIElEIHRoYXQgaXMgdXNlZCBmb3IgbGFuZ3VhZ2UtZGVwZW5kZW50IGNhc2UgbWFwcGluZ3Mu
Ci0gKiBAcGFyYW0gY3NtIFVDYXNlTWFwIHNlcnZpY2Ugb2JqZWN0LgotICogQHJldHVybiBsb2Nh
bGUgSUQKLSAqIEBzdGFibGUgSUNVIDMuNAotICovCi1VX1NUQUJMRSBjb25zdCBjaGFyICogVV9F
WFBPUlQyCi11Y2FzZW1hcF9nZXRMb2NhbGUoY29uc3QgVUNhc2VNYXAgKmNzbSk7Ci0KLS8qKgot
ICogR2V0IHRoZSBvcHRpb25zIGJpdCBzZXQgdGhhdCBpcyB1c2VkIGZvciBjYXNlIGZvbGRpbmcg
YW5kIHN0cmluZyBjb21wYXJpc29ucy4KLSAqIEBwYXJhbSBjc20gVUNhc2VNYXAgc2VydmljZSBv
YmplY3QuCi0gKiBAcmV0dXJuIG9wdGlvbnMgYml0IHNldAotICogQHN0YWJsZSBJQ1UgMy40Ci0g
Ki8KLVVfU1RBQkxFIHVpbnQzMl90IFVfRVhQT1JUMgotdWNhc2VtYXBfZ2V0T3B0aW9ucyhjb25z
dCBVQ2FzZU1hcCAqY3NtKTsKLQotLyoqCi0gKiBTZXQgdGhlIGxvY2FsZSBJRCB0aGF0IGlzIHVz
ZWQgZm9yIGxhbmd1YWdlLWRlcGVuZGVudCBjYXNlIG1hcHBpbmdzLgotICoKLSAqIEBwYXJhbSBj
c20gVUNhc2VNYXAgc2VydmljZSBvYmplY3QuCi0gKiBAcGFyYW0gbG9jYWxlIExvY2FsZSBJRCwg
c2VlIHVjYXNlbWFwX29wZW4oKS4KLSAqIEBwYXJhbSBwRXJyb3JDb2RlIE11c3QgYmUgYSB2YWxp
ZCBwb2ludGVyIHRvIGFuIGVycm9yIGNvZGUgdmFsdWUsCi0gKiAgICAgICAgICAgICAgICAgICB3
aGljaCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxs
LgotICoKLSAqIEBzZWUgdWNhc2VtYXBfb3BlbgotICogQHN0YWJsZSBJQ1UgMy40Ci0gKi8KLVVf
U1RBQkxFIHZvaWQgVV9FWFBPUlQyCi11Y2FzZW1hcF9zZXRMb2NhbGUoVUNhc2VNYXAgKmNzbSwg
Y29uc3QgY2hhciAqbG9jYWxlLCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKLQotLyoqCi0gKiBT
ZXQgdGhlIG9wdGlvbnMgYml0IHNldCB0aGF0IGlzIHVzZWQgZm9yIGNhc2UgZm9sZGluZyBhbmQg
c3RyaW5nIGNvbXBhcmlzb25zLgotICoKLSAqIEBwYXJhbSBjc20gVUNhc2VNYXAgc2VydmljZSBv
YmplY3QuCi0gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGJpdCBzZXQsIHNlZSB1Y2FzZW1hcF9v
cGVuKCkuCi0gKiBAcGFyYW0gcEVycm9yQ29kZSBNdXN0IGJlIGEgdmFsaWQgcG9pbnRlciB0byBh
biBlcnJvciBjb2RlIHZhbHVlLAotICogICAgICAgICAgICAgICAgICAgd2hpY2ggbXVzdCBub3Qg
aW5kaWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC4KLSAqCi0gKiBAc2Vl
IHVjYXNlbWFwX29wZW4KLSAqIEBzdGFibGUgSUNVIDMuNAotICovCi1VX1NUQUJMRSB2b2lkIFVf
RVhQT1JUMgotdWNhc2VtYXBfc2V0T3B0aW9ucyhVQ2FzZU1hcCAqY3NtLCB1aW50MzJfdCBvcHRp
b25zLCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKLQotLyoqCi0gKiBEbyBub3QgbG93ZXJjYXNl
IG5vbi1pbml0aWFsIHBhcnRzIG9mIHdvcmRzIHdoZW4gdGl0bGVjYXNpbmcuCi0gKiBPcHRpb24g
Yml0IGZvciB0aXRsZWNhc2luZyBBUElzIHRoYXQgdGFrZSBhbiBvcHRpb25zIGJpdCBzZXQuCi0g
KgotICogQnkgZGVmYXVsdCwgdGl0bGVjYXNpbmcgd2lsbCB0aXRsZWNhc2UgdGhlIGZpcnN0IGNh
c2VkIGNoYXJhY3RlcgotICogb2YgYSB3b3JkIGFuZCBsb3dlcmNhc2UgYWxsIG90aGVyIGNoYXJh
Y3RlcnMuCi0gKiBXaXRoIHRoaXMgb3B0aW9uLCB0aGUgb3RoZXIgY2hhcmFjdGVycyB3aWxsIG5v
dCBiZSBtb2RpZmllZC4KLSAqCi0gKiBAc2VlIHVjYXNlbWFwX3NldE9wdGlvbnMKLSAqIEBzZWUg
dWNhc2VtYXBfdG9UaXRsZQotICogQHNlZSB1Y2FzZW1hcF91dGY4VG9UaXRsZQotICogQHNlZSBV
bmljb2RlU3RyaW5nOjp0b1RpdGxlCi0gKiBAc3RhYmxlIElDVSAzLjgKLSAqLwotI2RlZmluZSBV
X1RJVExFQ0FTRV9OT19MT1dFUkNBU0UgMHgxMDAKLQotLyoqCi0gKiBEbyBub3QgYWRqdXN0IHRo
ZSB0aXRsZWNhc2luZyBpbmRleGVzIGZyb20gQnJlYWtJdGVyYXRvcjo6bmV4dCgpIGluZGV4ZXM7
Ci0gKiB0aXRsZWNhc2UgZXhhY3RseSB0aGUgY2hhcmFjdGVycyBhdCBicmVha3MgZnJvbSB0aGUg
aXRlcmF0b3IuCi0gKiBPcHRpb24gYml0IGZvciB0aXRsZWNhc2luZyBBUElzIHRoYXQgdGFrZSBh
biBvcHRpb25zIGJpdCBzZXQuCi0gKgotICogQnkgZGVmYXVsdCwgdGl0bGVjYXNpbmcgd2lsbCB0
YWtlIGVhY2ggYnJlYWsgaXRlcmF0b3IgaW5kZXgsCi0gKiBhZGp1c3QgaXQgYnkgbG9va2luZyBm
b3IgdGhlIG5leHQgY2FzZWQgY2hhcmFjdGVyLCBhbmQgdGl0bGVjYXNlIHRoYXQgb25lLgotICog
T3RoZXIgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlZC4KLSAqCi0gKiBUaGlzIGZvbGxvd3MgVW5p
Y29kZSA0ICYgNSBzZWN0aW9uIDMuMTMgRGVmYXVsdCBDYXNlIE9wZXJhdGlvbnM6Ci0gKgotICog
UjMgIHRvVGl0bGVjYXNlKFgpOiBGaW5kIHRoZSB3b3JkIGJvdW5kYXJpZXMgYmFzZWQgb24gVW5p
Y29kZSBTdGFuZGFyZCBBbm5leAotICogIzI5LCAiVGV4dCBCb3VuZGFyaWVzLiIgQmV0d2VlbiBl
YWNoIHBhaXIgb2Ygd29yZCBib3VuZGFyaWVzLCBmaW5kIHRoZSBmaXJzdAotICogY2FzZWQgY2hh
cmFjdGVyIEYuIElmIEYgZXhpc3RzLCBtYXAgRiB0byBkZWZhdWx0X3RpdGxlKEYpOyB0aGVuIG1h
cCBlYWNoCi0gKiBzdWJzZXF1ZW50IGNoYXJhY3RlciBDIHRvIGRlZmF1bHRfbG93ZXIoQykuCi0g
KgotICogQHNlZSB1Y2FzZW1hcF9zZXRPcHRpb25zCi0gKiBAc2VlIHVjYXNlbWFwX3RvVGl0bGUK
LSAqIEBzZWUgdWNhc2VtYXBfdXRmOFRvVGl0bGUKLSAqIEBzZWUgVW5pY29kZVN0cmluZzo6dG9U
aXRsZQotICogQHNlZSBVX1RJVExFQ0FTRV9OT19MT1dFUkNBU0UKLSAqIEBzdGFibGUgSUNVIDMu
OAotICovCi0jZGVmaW5lIFVfVElUTEVDQVNFX05PX0JSRUFLX0FESlVTVE1FTlQgMHgyMDAKLQot
I2lmICFVQ09ORklHX05PX0JSRUFLX0lURVJBVElPTgotCi0vKioKLSAqIEdldCB0aGUgYnJlYWsg
aXRlcmF0b3IgdGhhdCBpcyB1c2VkIGZvciB0aXRsZWNhc2luZy4KLSAqIERvIG5vdCBtb2RpZnkg
dGhlIHJldHVybmVkIGJyZWFrIGl0ZXJhdG9yLgotICogQHBhcmFtIGNzbSBVQ2FzZU1hcCBzZXJ2
aWNlIG9iamVjdC4KLSAqIEByZXR1cm4gdGl0bGVjYXNpbmcgYnJlYWsgaXRlcmF0b3IKLSAqIEBz
dGFibGUgSUNVIDMuOAotICovCi1VX1NUQUJMRSBjb25zdCBVQnJlYWtJdGVyYXRvciAqIFVfRVhQ
T1JUMgotdWNhc2VtYXBfZ2V0QnJlYWtJdGVyYXRvcihjb25zdCBVQ2FzZU1hcCAqY3NtKTsKLQot
LyoqCi0gKiBTZXQgdGhlIGJyZWFrIGl0ZXJhdG9yIHRoYXQgaXMgdXNlZCBmb3IgdGl0bGVjYXNp
bmcuCi0gKiBUaGUgVUNhc2VNYXAgc2VydmljZSBvYmplY3QgcmVsZWFzZXMgYSBwcmV2aW91c2x5
IHNldCBicmVhayBpdGVyYXRvcgotICogYW5kICJhZG9wdHMiIHRoaXMgbmV3IG9uZSwgdGFraW5n
IG93bmVyc2hpcCBvZiBpdC4KLSAqIEl0IHdpbGwgYmUgcmVsZWFzZWQgaW4gYSBzdWJzZXF1ZW50
IGNhbGwgdG8gdWNhc2VtYXBfc2V0QnJlYWtJdGVyYXRvcigpCi0gKiBvciB1Y2FzZW1hcF9jbG9z
ZSgpLgotICoKLSAqIEJyZWFrIGl0ZXJhdG9yIG9wZXJhdGlvbnMgYXJlIG5vdCB0aHJlYWQtc2Fm
ZS4gVGhlcmVmb3JlLCB0aXRsZWNhc2luZwotICogZnVuY3Rpb25zIHVzZSBub24tY29uc3QgVUNh
c2VNYXAgb2JqZWN0cy4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIHRpdGxlY2FzZQotICogc3RyaW5n
cyBjb25jdXJyZW50bHkgdXNpbmcgdGhlIHNhbWUgVUNhc2VNYXAuCi0gKgotICogQHBhcmFtIGNz
bSBVQ2FzZU1hcCBzZXJ2aWNlIG9iamVjdC4KLSAqIEBwYXJhbSBpdGVyVG9BZG9wdCBCcmVhayBp
dGVyYXRvciB0byBiZSBhZG9wdGVkIGZvciB0aXRsZWNhc2luZy4KLSAqIEBwYXJhbSBwRXJyb3JD
b2RlIE11c3QgYmUgYSB2YWxpZCBwb2ludGVyIHRvIGFuIGVycm9yIGNvZGUgdmFsdWUsCi0gKiAg
ICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3Jl
IHRoZSBmdW5jdGlvbiBjYWxsLgotICoKLSAqIEBzZWUgdWNhc2VtYXBfdG9UaXRsZQotICogQHNl
ZSB1Y2FzZW1hcF91dGY4VG9UaXRsZQotICogQHN0YWJsZSBJQ1UgMy44Ci0gKi8KLVVfU1RBQkxF
IHZvaWQgVV9FWFBPUlQyCi11Y2FzZW1hcF9zZXRCcmVha0l0ZXJhdG9yKFVDYXNlTWFwICpjc20s
IFVCcmVha0l0ZXJhdG9yICppdGVyVG9BZG9wdCwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7Ci0K
LS8qKgotICogVGl0bGVjYXNlIGEgVVRGLTE2IHN0cmluZy4gVGhpcyBmdW5jdGlvbiBpcyBhbG1v
c3QgYSBkdXBsaWNhdGUgb2YgdV9zdHJUb1RpdGxlKCksCi0gKiBleGNlcHQgdGhhdCBpdCB0YWtl
cyB1Y2FzZW1hcF9zZXRPcHRpb25zKCkgaW50byBhY2NvdW50IGFuZCBoYXMgcGVyZm9ybWFuY2UK
LSAqIGFkdmFudGFnZXMgZnJvbSBiZWluZyBhYmxlIHRvIHVzZSBhIFVDYXNlTWFwIG9iamVjdCBm
b3IgbXVsdGlwbGUgY2FzZSBtYXBwaW5nCi0gKiBvcGVyYXRpb25zLCBzYXZpbmcgc2V0dXAgdGlt
ZS4KLSAqCi0gKiBDYXNpbmcgaXMgbG9jYWxlLWRlcGVuZGVudCBhbmQgY29udGV4dC1zZW5zaXRp
dmUuCi0gKiBUaXRsZWNhc2luZyB1c2VzIGEgYnJlYWsgaXRlcmF0b3IgdG8gZmluZCB0aGUgZmly
c3QgY2hhcmFjdGVycyBvZiB3b3JkcwotICogdGhhdCBhcmUgdG8gYmUgdGl0bGVjYXNlZC4gSXQg
dGl0bGVjYXNlcyB0aG9zZSBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2VzCi0gKiBhbGwgb3RoZXJz
LiAoVGhpcyBjYW4gYmUgbW9kaWZpZWQgd2l0aCB1Y2FzZW1hcF9zZXRPcHRpb25zKCkuKQotICoK
LSAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBub24tY29uc3QgVUNhc2VNYXAgcG9pbnRl
ciBiZWNhdXNlIGl0IHdpbGwKLSAqIG9wZW4gYSBkZWZhdWx0IGJyZWFrIGl0ZXJhdG9yIGlmIG5v
IGJyZWFrIGl0ZXJhdG9yIHdhcyBzZXQgeWV0LAotICogYW5kIGVmZmVjdGl2ZWx5IGNhbGwgdWNh
c2VtYXBfc2V0QnJlYWtJdGVyYXRvcigpOwotICogYWxzbyBiZWNhdXNlIHRoZSBicmVhayBpdGVy
YXRvciBpcyBzdGF0ZWZ1bCBhbmQgd2lsbCBiZSBtb2RpZmllZCBkdXJpbmcKLSAqIHRoZSBpdGVy
YXRpb24uCi0gKgotICogVGhlIHRpdGxlY2FzZSBicmVhayBpdGVyYXRvciBjYW4gYmUgcHJvdmlk
ZWQgdG8gY3VzdG9taXplIGZvciBhcmJpdHJhcnkKLSAqIHN0eWxlcywgdXNpbmcgcnVsZXMgYW5k
IGRpY3Rpb25hcmllcyBiZXlvbmQgdGhlIHN0YW5kYXJkIGl0ZXJhdG9ycy4KLSAqIFRoZSBzdGFu
ZGFyZCB0aXRsZWNhc2UgaXRlcmF0b3IgZm9yIHRoZSByb290IGxvY2FsZSBpbXBsZW1lbnRzIHRo
ZQotICogYWxnb3JpdGhtIG9mIFVuaWNvZGUgVFIgMjEuCi0gKgotICogVGhpcyBmdW5jdGlvbiB1
c2VzIG9ubHkgdGhlIHNldFVUZXh0KCksIGZpcnN0KCksIG5leHQoKSBhbmQgY2xvc2UoKSBtZXRo
b2RzIG9mIHRoZQotICogcHJvdmlkZWQgYnJlYWsgaXRlcmF0b3IuCi0gKgotICogVGhlIHJlc3Vs
dCBtYXkgYmUgbG9uZ2VyIG9yIHNob3J0ZXIgdGhhbiB0aGUgb3JpZ2luYWwuCi0gKiBUaGUgc291
cmNlIHN0cmluZyBhbmQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBtdXN0IG5vdCBvdmVybGFwLgot
ICoKLSAqIEBwYXJhbSBjc20gICAgICAgVUNhc2VNYXAgc2VydmljZSBvYmplY3QuIFRoaXMgcG9p
bnRlciBpcyBub24tY29uc3QhCi0gKiAgICAgICAgICAgICAgICAgIFNlZSB0aGUgbm90ZSBhYm92
ZSBmb3IgZGV0YWlscy4KLSAqIEBwYXJhbSBkZXN0ICAgICAgQSBidWZmZXIgZm9yIHRoZSByZXN1
bHQgc3RyaW5nLiBUaGUgcmVzdWx0IHdpbGwgYmUgTlVMLXRlcm1pbmF0ZWQgaWYKLSAqICAgICAg
ICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guCi0gKiAgICAgICAgICAgICAg
ICAgIFRoZSBjb250ZW50cyBpcyB1bmRlZmluZWQgaW4gY2FzZSBvZiBmYWlsdXJlLgotICogQHBh
cmFtIGRlc3RDYXBhY2l0eSBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChudW1iZXIgb2YgYnl0ZXMp
LiBJZiBpdCBpcyAwLCB0aGVuCi0gKiAgICAgICAgICAgICAgICAgIGRlc3QgbWF5IGJlIE5VTEwg
YW5kIHRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHJlc3Vs
dAotICogICAgICAgICAgICAgICAgICB3aXRob3V0IHdyaXRpbmcgYW55IG9mIHRoZSByZXN1bHQg
c3RyaW5nLgotICogQHBhcmFtIHNyYyAgICAgICBUaGUgb3JpZ2luYWwgc3RyaW5nLgotICogQHBh
cmFtIHNyY0xlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0xLCB0
aGVuIHNyYyBtdXN0IGJlIE5VTC10ZXJtaW5hdGVkLgotICogQHBhcmFtIHBFcnJvckNvZGUgTXVz
dCBiZSBhIHZhbGlkIHBvaW50ZXIgdG8gYW4gZXJyb3IgY29kZSB2YWx1ZSwKLSAqICAgICAgICAg
ICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5kaWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUgZnVu
Y3Rpb24gY2FsbC4KLSAqIEByZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmluZywg
aWYgc3VjY2Vzc2Z1bCAtIG9yIGluIGNhc2Ugb2YgYSBidWZmZXIgb3ZlcmZsb3csCi0gKiAgICAg
ICAgIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSBncmVhdGVyIHRoYW4gZGVzdENhcGFjaXR5Lgot
ICoKLSAqIEBzZWUgdV9zdHJUb1RpdGxlCi0gKiBAc3RhYmxlIElDVSAzLjgKLSAqLwotVV9TVEFC
TEUgaW50MzJfdCBVX0VYUE9SVDIKLXVjYXNlbWFwX3RvVGl0bGUoVUNhc2VNYXAgKmNzbSwKLSAg
ICAgICAgICAgICAgICAgVUNoYXIgKmRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5LAotICAgICAg
ICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKLSAgICAgICAg
ICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7Ci0KLSNlbmRpZgotCi0vKioKLSAqIExv
d2VyY2FzZSB0aGUgY2hhcmFjdGVycyBpbiBhIFVURi04IHN0cmluZy4KLSAqIENhc2luZyBpcyBs
b2NhbGUtZGVwZW5kZW50IGFuZCBjb250ZXh0LXNlbnNpdGl2ZS4KLSAqIFRoZSByZXN1bHQgbWF5
IGJlIGxvbmdlciBvciBzaG9ydGVyIHRoYW4gdGhlIG9yaWdpbmFsLgotICogVGhlIHNvdXJjZSBz
dHJpbmcgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgbXVzdCBub3Qgb3ZlcmxhcC4KLSAqCi0g
KiBAcGFyYW0gY3NtICAgICAgIFVDYXNlTWFwIHNlcnZpY2Ugb2JqZWN0LgotICogQHBhcmFtIGRl
c3QgICAgICBBIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdCBzdHJpbmcuIFRoZSByZXN1bHQgd2lsbCBi
ZSBOVUwtdGVybWluYXRlZCBpZgotICogICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyIGlzIGxh
cmdlIGVub3VnaC4KLSAqICAgICAgICAgICAgICAgICAgVGhlIGNvbnRlbnRzIGlzIHVuZGVmaW5l
ZCBpbiBjYXNlIG9mIGZhaWx1cmUuCi0gKiBAcGFyYW0gZGVzdENhcGFjaXR5IFRoZSBzaXplIG9m
IHRoZSBidWZmZXIgKG51bWJlciBvZiBieXRlcykuIElmIGl0IGlzIDAsIHRoZW4KLSAqICAgICAg
ICAgICAgICAgICAgZGVzdCBtYXkgYmUgTlVMTCBhbmQgdGhlIGZ1bmN0aW9uIHdpbGwgb25seSBy
ZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0Ci0gKiAgICAgICAgICAgICAgICAgIHdpdGhv
dXQgd3JpdGluZyBhbnkgb2YgdGhlIHJlc3VsdCBzdHJpbmcuCi0gKiBAcGFyYW0gc3JjICAgICAg
IFRoZSBvcmlnaW5hbCBzdHJpbmcuCi0gKiBAcGFyYW0gc3JjTGVuZ3RoIFRoZSBsZW5ndGggb2Yg
dGhlIG9yaWdpbmFsIHN0cmluZy4gSWYgLTEsIHRoZW4gc3JjIG11c3QgYmUgTlVMLXRlcm1pbmF0
ZWQuCi0gKiBAcGFyYW0gcEVycm9yQ29kZSBNdXN0IGJlIGEgdmFsaWQgcG9pbnRlciB0byBhbiBl
cnJvciBjb2RlIHZhbHVlLAotICogICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IG5vdCBpbmRp
Y2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsLgotICogQHJldHVybiBUaGUg
bGVuZ3RoIG9mIHRoZSByZXN1bHQgc3RyaW5nLCBpZiBzdWNjZXNzZnVsIC0gb3IgaW4gY2FzZSBv
ZiBhIGJ1ZmZlciBvdmVyZmxvdywKLSAqICAgICAgICAgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJl
IGdyZWF0ZXIgdGhhbiBkZXN0Q2FwYWNpdHkuCi0gKgotICogQHNlZSB1X3N0clRvTG93ZXIKLSAq
IEBzdGFibGUgSUNVIDMuNAotICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgotdWNhc2Vt
YXBfdXRmOFRvTG93ZXIoY29uc3QgVUNhc2VNYXAgKmNzbSwKLSAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKmRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5LAotICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAg
IFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwotCi0vKioKLSAqIFVwcGVyY2FzZSB0aGUgY2hhcmFj
dGVycyBpbiBhIFVURi04IHN0cmluZy4KLSAqIENhc2luZyBpcyBsb2NhbGUtZGVwZW5kZW50IGFu
ZCBjb250ZXh0LXNlbnNpdGl2ZS4KLSAqIFRoZSByZXN1bHQgbWF5IGJlIGxvbmdlciBvciBzaG9y
dGVyIHRoYW4gdGhlIG9yaWdpbmFsLgotICogVGhlIHNvdXJjZSBzdHJpbmcgYW5kIHRoZSBkZXN0
aW5hdGlvbiBidWZmZXIgbXVzdCBub3Qgb3ZlcmxhcC4KLSAqCi0gKiBAcGFyYW0gY3NtICAgICAg
IFVDYXNlTWFwIHNlcnZpY2Ugb2JqZWN0LgotICogQHBhcmFtIGRlc3QgICAgICBBIGJ1ZmZlciBm
b3IgdGhlIHJlc3VsdCBzdHJpbmcuIFRoZSByZXN1bHQgd2lsbCBiZSBOVUwtdGVybWluYXRlZCBp
ZgotICogICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KLSAqICAg
ICAgICAgICAgICAgICAgVGhlIGNvbnRlbnRzIGlzIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGZhaWx1
cmUuCi0gKiBAcGFyYW0gZGVzdENhcGFjaXR5IFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG51bWJl
ciBvZiBieXRlcykuIElmIGl0IGlzIDAsIHRoZW4KLSAqICAgICAgICAgICAgICAgICAgZGVzdCBt
YXkgYmUgTlVMTCBhbmQgdGhlIGZ1bmN0aW9uIHdpbGwgb25seSByZXR1cm4gdGhlIGxlbmd0aCBv
ZiB0aGUgcmVzdWx0Ci0gKiAgICAgICAgICAgICAgICAgIHdpdGhvdXQgd3JpdGluZyBhbnkgb2Yg
dGhlIHJlc3VsdCBzdHJpbmcuCi0gKiBAcGFyYW0gc3JjICAgICAgIFRoZSBvcmlnaW5hbCBzdHJp
bmcuCi0gKiBAcGFyYW0gc3JjTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIHN0cmlu
Zy4gSWYgLTEsIHRoZW4gc3JjIG11c3QgYmUgTlVMLXRlcm1pbmF0ZWQuCi0gKiBAcGFyYW0gcEVy
cm9yQ29kZSBNdXN0IGJlIGEgdmFsaWQgcG9pbnRlciB0byBhbiBlcnJvciBjb2RlIHZhbHVlLAot
ICogICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVm
b3JlIHRoZSBmdW5jdGlvbiBjYWxsLgotICogQHJldHVybiBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1
bHQgc3RyaW5nLCBpZiBzdWNjZXNzZnVsIC0gb3IgaW4gY2FzZSBvZiBhIGJ1ZmZlciBvdmVyZmxv
dywKLSAqICAgICAgICAgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBkZXN0
Q2FwYWNpdHkuCi0gKgotICogQHNlZSB1X3N0clRvVXBwZXIKLSAqIEBzdGFibGUgSUNVIDMuNAot
ICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgotdWNhc2VtYXBfdXRmOFRvVXBwZXIoY29u
c3QgVUNhc2VNYXAgKmNzbSwKLSAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRlc3QsIGludDMy
X3QgZGVzdENhcGFjaXR5LAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3JjLCBp
bnQzMl90IHNyY0xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJv
ckNvZGUpOwotCi0jaWYgIVVDT05GSUdfTk9fQlJFQUtfSVRFUkFUSU9OCi0KLS8qKgotICogVGl0
bGVjYXNlIGEgVVRGLTggc3RyaW5nLgotICogQ2FzaW5nIGlzIGxvY2FsZS1kZXBlbmRlbnQgYW5k
IGNvbnRleHQtc2Vuc2l0aXZlLgotICogVGl0bGVjYXNpbmcgdXNlcyBhIGJyZWFrIGl0ZXJhdG9y
IHRvIGZpbmQgdGhlIGZpcnN0IGNoYXJhY3RlcnMgb2Ygd29yZHMKLSAqIHRoYXQgYXJlIHRvIGJl
IHRpdGxlY2FzZWQuIEl0IHRpdGxlY2FzZXMgdGhvc2UgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNl
cwotICogYWxsIG90aGVycy4gKFRoaXMgY2FuIGJlIG1vZGlmaWVkIHdpdGggdWNhc2VtYXBfc2V0
T3B0aW9ucygpLikKLSAqCi0gKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgbm9uLWNvbnN0
IFVDYXNlTWFwIHBvaW50ZXIgYmVjYXVzZSBpdCB3aWxsCi0gKiBvcGVuIGEgZGVmYXVsdCBicmVh
ayBpdGVyYXRvciBpZiBubyBicmVhayBpdGVyYXRvciB3YXMgc2V0IHlldCwKLSAqIGFuZCBlZmZl
Y3RpdmVseSBjYWxsIHVjYXNlbWFwX3NldEJyZWFrSXRlcmF0b3IoKTsKLSAqIGFsc28gYmVjYXVz
ZSB0aGUgYnJlYWsgaXRlcmF0b3IgaXMgc3RhdGVmdWwgYW5kIHdpbGwgYmUgbW9kaWZpZWQgZHVy
aW5nCi0gKiB0aGUgaXRlcmF0aW9uLgotICoKLSAqIFRoZSB0aXRsZWNhc2UgYnJlYWsgaXRlcmF0
b3IgY2FuIGJlIHByb3ZpZGVkIHRvIGN1c3RvbWl6ZSBmb3IgYXJiaXRyYXJ5Ci0gKiBzdHlsZXMs
IHVzaW5nIHJ1bGVzIGFuZCBkaWN0aW9uYXJpZXMgYmV5b25kIHRoZSBzdGFuZGFyZCBpdGVyYXRv
cnMuCi0gKiBUaGUgc3RhbmRhcmQgdGl0bGVjYXNlIGl0ZXJhdG9yIGZvciB0aGUgcm9vdCBsb2Nh
bGUgaW1wbGVtZW50cyB0aGUKLSAqIGFsZ29yaXRobSBvZiBVbmljb2RlIFRSIDIxLgotICoKLSAq
IFRoaXMgZnVuY3Rpb24gdXNlcyBvbmx5IHRoZSBzZXRVVGV4dCgpLCBmaXJzdCgpLCBuZXh0KCkg
YW5kIGNsb3NlKCkgbWV0aG9kcyBvZiB0aGUKLSAqIHByb3ZpZGVkIGJyZWFrIGl0ZXJhdG9yLgot
ICoKLSAqIFRoZSByZXN1bHQgbWF5IGJlIGxvbmdlciBvciBzaG9ydGVyIHRoYW4gdGhlIG9yaWdp
bmFsLgotICogVGhlIHNvdXJjZSBzdHJpbmcgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgbXVz
dCBub3Qgb3ZlcmxhcC4KLSAqCi0gKiBAcGFyYW0gY3NtICAgICAgIFVDYXNlTWFwIHNlcnZpY2Ug
b2JqZWN0LiBUaGlzIHBvaW50ZXIgaXMgbm9uLWNvbnN0IQotICogICAgICAgICAgICAgICAgICBT
ZWUgdGhlIG5vdGUgYWJvdmUgZm9yIGRldGFpbHMuCi0gKiBAcGFyYW0gZGVzdCAgICAgIEEgYnVm
ZmVyIGZvciB0aGUgcmVzdWx0IHN0cmluZy4gVGhlIHJlc3VsdCB3aWxsIGJlIE5VTC10ZXJtaW5h
dGVkIGlmCi0gKiAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLgot
ICogICAgICAgICAgICAgICAgICBUaGUgY29udGVudHMgaXMgdW5kZWZpbmVkIGluIGNhc2Ugb2Yg
ZmFpbHVyZS4KLSAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAo
bnVtYmVyIG9mIGJ5dGVzKS4gSWYgaXQgaXMgMCwgdGhlbgotICogICAgICAgICAgICAgICAgICBk
ZXN0IG1heSBiZSBOVUxMIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBvbmx5IHJldHVybiB0aGUgbGVu
Z3RoIG9mIHRoZSByZXN1bHQKLSAqICAgICAgICAgICAgICAgICAgd2l0aG91dCB3cml0aW5nIGFu
eSBvZiB0aGUgcmVzdWx0IHN0cmluZy4KLSAqIEBwYXJhbSBzcmMgICAgICAgVGhlIG9yaWdpbmFs
IHN0cmluZy4KLSAqIEBwYXJhbSBzcmNMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwg
c3RyaW5nLiBJZiAtMSwgdGhlbiBzcmMgbXVzdCBiZSBOVUwtdGVybWluYXRlZC4KLSAqIEBwYXJh
bSBwRXJyb3JDb2RlIE11c3QgYmUgYSB2YWxpZCBwb2ludGVyIHRvIGFuIGVycm9yIGNvZGUgdmFs
dWUsCi0gKiAgICAgICAgICAgICAgICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFpbHVy
ZSBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuCi0gKiBAcmV0dXJuIFRoZSBsZW5ndGggb2YgdGhl
IHJlc3VsdCBzdHJpbmcsIGlmIHN1Y2Nlc3NmdWwgLSBvciBpbiBjYXNlIG9mIGEgYnVmZmVyIG92
ZXJmbG93LAotICogICAgICAgICBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgZ3JlYXRlciB0aGFu
IGRlc3RDYXBhY2l0eS4KLSAqCi0gKiBAc2VlIHVfc3RyVG9UaXRsZQotICogQHNlZSBVX1RJVExF
Q0FTRV9OT19MT1dFUkNBU0UKLSAqIEBzZWUgVV9USVRMRUNBU0VfTk9fQlJFQUtfQURKVVNUTUVO
VAotICogQHN0YWJsZSBJQ1UgMy44Ci0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCi11
Y2FzZW1hcF91dGY4VG9UaXRsZShVQ2FzZU1hcCAqY3NtLAotICAgICAgICAgICAgICAgICAgICBj
aGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgVUVy
cm9yQ29kZSAqcEVycm9yQ29kZSk7Ci0KLSNlbmRpZgotCi0vKioKLSAqIENhc2UtZm9sZHMgdGhl
IGNoYXJhY3RlcnMgaW4gYSBVVEYtOCBzdHJpbmcuCi0gKgotICogQ2FzZS1mb2xkaW5nIGlzIGxv
Y2FsZS1pbmRlcGVuZGVudCBhbmQgbm90IGNvbnRleHQtc2Vuc2l0aXZlLAotICogYnV0IHRoZXJl
IGlzIGFuIG9wdGlvbiBmb3Igd2hldGhlciB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgbWFwcGluZ3Mg
Zm9yIGRvdHRlZCBJCi0gKiBhbmQgZG90bGVzcyBpIHRoYXQgYXJlIG1hcmtlZCB3aXRoICdUJyBp
biBDYXNlRm9sZGluZy50eHQuCi0gKgotICogVGhlIHJlc3VsdCBtYXkgYmUgbG9uZ2VyIG9yIHNo
b3J0ZXIgdGhhbiB0aGUgb3JpZ2luYWwuCi0gKiBUaGUgc291cmNlIHN0cmluZyBhbmQgdGhlIGRl
c3RpbmF0aW9uIGJ1ZmZlciBtdXN0IG5vdCBvdmVybGFwLgotICoKLSAqIEBwYXJhbSBjc20gICAg
ICAgVUNhc2VNYXAgc2VydmljZSBvYmplY3QuCi0gKiBAcGFyYW0gZGVzdCAgICAgIEEgYnVmZmVy
IGZvciB0aGUgcmVzdWx0IHN0cmluZy4gVGhlIHJlc3VsdCB3aWxsIGJlIE5VTC10ZXJtaW5hdGVk
IGlmCi0gKiAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLgotICog
ICAgICAgICAgICAgICAgICBUaGUgY29udGVudHMgaXMgdW5kZWZpbmVkIGluIGNhc2Ugb2YgZmFp
bHVyZS4KLSAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAobnVt
YmVyIG9mIGJ5dGVzKS4gSWYgaXQgaXMgMCwgdGhlbgotICogICAgICAgICAgICAgICAgICBkZXN0
IG1heSBiZSBOVUxMIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBvbmx5IHJldHVybiB0aGUgbGVuZ3Ro
IG9mIHRoZSByZXN1bHQKLSAqICAgICAgICAgICAgICAgICAgd2l0aG91dCB3cml0aW5nIGFueSBv
ZiB0aGUgcmVzdWx0IHN0cmluZy4KLSAqIEBwYXJhbSBzcmMgICAgICAgVGhlIG9yaWdpbmFsIHN0
cmluZy4KLSAqIEBwYXJhbSBzcmNMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgc3Ry
aW5nLiBJZiAtMSwgdGhlbiBzcmMgbXVzdCBiZSBOVUwtdGVybWluYXRlZC4KLSAqIEBwYXJhbSBw
RXJyb3JDb2RlIE11c3QgYmUgYSB2YWxpZCBwb2ludGVyIHRvIGFuIGVycm9yIGNvZGUgdmFsdWUs
Ci0gKiAgICAgICAgICAgICAgICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFpbHVyZSBi
ZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuCi0gKiBAcmV0dXJuIFRoZSBsZW5ndGggb2YgdGhlIHJl
c3VsdCBzdHJpbmcsIGlmIHN1Y2Nlc3NmdWwgLSBvciBpbiBjYXNlIG9mIGEgYnVmZmVyIG92ZXJm
bG93LAotICogICAgICAgICBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgZ3JlYXRlciB0aGFuIGRl
c3RDYXBhY2l0eS4KLSAqCi0gKiBAc2VlIHVfc3RyRm9sZENhc2UKLSAqIEBzZWUgdWNhc2VtYXBf
c2V0T3B0aW9ucwotICogQHNlZSBVX0ZPTERfQ0FTRV9ERUZBVUxUCi0gKiBAc2VlIFVfRk9MRF9D
QVNFX0VYQ0xVREVfU1BFQ0lBTF9JCi0gKiBAc3RhYmxlIElDVSAzLjgKLSAqLwotVV9TVEFCTEUg
aW50MzJfdCBVX0VYUE9SVDIKLXVjYXNlbWFwX3V0ZjhGb2xkQ2FzZShjb25zdCBVQ2FzZU1hcCAq
Y3NtLAotICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRlc3QsIGludDMyX3QgZGVzdENhcGFj
aXR5LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNyYywgaW50MzJfdCBzcmNM
ZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2Rl
cGVuZGVuY2llcy9pY3UvdW5pY29kZS91Y2hhci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS91Y2hhci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxZDNhZTBkZDQzZjQzNWZiZjAxZWMyZGVlMGU1MTYzOTIxZDZlNTUx
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvdWNoYXIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDM0MjYgKzAsMCBAQAotLyoKLSoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSog
ICBDb3B5cmlnaHQgKEMpIDE5OTctMjAxNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5l
cwotKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKgotKgotKiBGaWxlIFVDSEFSLkgKLSoKLSogTW9kaWZpY2F0aW9uIEhpc3Rvcnk6
Ci0qCi0qICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KLSogICAwNC8wMi85
NyAgICBhbGl1ICAgICAgICBDcmVhdGlvbi4KLSogICAwMy8yOS85OSAgICBoZWxlbmEgICAgICBV
cGRhdGVkIGZvciBDIEFQSXMuCi0qICAgNC8xNS85OSAgICAgTWFkaHUgICAgICAgVXBkYXRlZCBm
b3IgQyBJbXBsZW1lbnRhdGlvbiBhbmQgSmF2YWRvYwotKiAgIDUvMjAvOTkgICAgIE1hZGh1ICAg
ICAgIEFkZGVkIHRoZSBmdW5jdGlvbiB1X2dldFZlcnNpb24oKQotKiAgIDgvMTkvMTk5OSAgIHNy
bCAgICAgICAgIFVwZ3JhZGVkIHNjcmlwdHMgdG8gVW5pY29kZSAzLjAKLSogICA4LzI3LzE5OTkg
ICBzY2hlcmVybSAgICBVQ2hhckRpcmVjdGlvbiBjb25zdGFudHM6IFVfLi4uCi0qICAgMTEvMTEv
MTk5OSAgd2VpdiAgICAgICAgYWRkZWQgdV9pc2FsbnVtKCksIGNsZWFuZWQgY29tbWVudHMKLSog
ICAwMS8xMS8yMDAwICBoZWxlbmEgICAgICBSZW5hbWVkIHVfZ2V0VmVyc2lvbiB0byB1X2dldFVu
aWNvZGVWZXJzaW9uKCkuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSovCi0KLSNpZm5kZWYgVUNI
QVJfSAotI2RlZmluZSBVQ0hBUl9ICi0KLSNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgotCi1V
X0NERUNMX0JFR0lOCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogVW5pY29kZSB2ZXJzaW9u
IG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qKgotICogVW5pY29kZSB2ZXJzaW9uIG51bWJl
ciwgZGVmYXVsdCBmb3IgdGhlIGN1cnJlbnQgSUNVIHZlcnNpb24uCi0gKiBUaGUgYWN0dWFsIFVu
aWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIChVQ0QpIGRhdGEgaXMgc3RvcmVkIGluIHVwcm9wcy5k
YXQKLSAqIGFuZCBtYXkgYmUgZ2VuZXJhdGVkIGZyb20gVUNEIGZpbGVzIGZyb20gYSBkaWZmZXJl
bnQgVW5pY29kZSB2ZXJzaW9uLgotICogQ2FsbCB1X2dldFVuaWNvZGVWZXJzaW9uIHRvIGdldCB0
aGUgYWN0dWFsIFVuaWNvZGUgdmVyc2lvbiBvZiB0aGUgZGF0YS4KLSAqCi0gKiBAc2VlIHVfZ2V0
VW5pY29kZVZlcnNpb24KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi0jZGVmaW5lIFVfVU5JQ09E
RV9WRVJTSU9OICI3LjAiCi0KLS8qKgotICogXGZpbGUKLSAqIFxicmllZiBDIEFQSTogVW5pY29k
ZSBQcm9wZXJ0aWVzCi0gKgotICogVGhpcyBDIEFQSSBwcm92aWRlcyBsb3ctbGV2ZWwgYWNjZXNz
IHRvIHRoZSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZS4KLSAqIEluIGFkZGl0aW9uIHRvIHJh
dyBwcm9wZXJ0eSB2YWx1ZXMsIHNvbWUgY29udmVuaWVuY2UgZnVuY3Rpb25zIGNhbGN1bGF0ZQot
ICogZGVyaXZlZCBwcm9wZXJ0aWVzLCBmb3IgZXhhbXBsZSBmb3IgSmF2YS1zdHlsZSBwcm9ncmFt
bWluZy4KLSAqCi0gKiBVbmljb2RlIGFzc2lnbnMgZWFjaCBjb2RlIHBvaW50IChub3QganVzdCBh
c3NpZ25lZCBjaGFyYWN0ZXIpIHZhbHVlcyBmb3IKLSAqIG1hbnkgcHJvcGVydGllcy4KLSAqIE1v
c3Qgb2YgdGhlbSBhcmUgc2ltcGxlIGJvb2xlYW4gZmxhZ3MsIG9yIGNvbnN0YW50cyBmcm9tIGEg
c21hbGwgZW51bWVyYXRlZCBsaXN0LgotICogRm9yIHNvbWUgcHJvcGVydGllcywgdmFsdWVzIGFy
ZSBzdHJpbmdzIG9yIG90aGVyIHJlbGF0aXZlbHkgbW9yZSBjb21wbGV4IHR5cGVzLgotICoKLSAq
IEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZQotICogIkFib3V0IHRoZSBVbmljb2RlIENoYXJhY3Rl
ciBEYXRhYmFzZSIgKGh0dHA6Ly93d3cudW5pY29kZS5vcmcvdWNkLykKLSAqIGFuZCB0aGUgSUNV
IFVzZXIgR3VpZGUgY2hhcHRlciBvbiBQcm9wZXJ0aWVzIChodHRwOi8vaWN1LXByb2plY3Qub3Jn
L3VzZXJndWlkZS9wcm9wZXJ0aWVzLmh0bWwpLgotICoKLSAqIE1hbnkgZnVuY3Rpb25zIGFyZSBk
ZXNpZ25lZCB0byBtYXRjaCBqYXZhLmxhbmcuQ2hhcmFjdGVyIGZ1bmN0aW9ucy4KLSAqIFNlZSB0
aGUgaW5kaXZpZHVhbCBmdW5jdGlvbiBkb2N1bWVudGF0aW9uLAotICogYW5kIHNlZSB0aGUgSkRL
IDEuNCBqYXZhLmxhbmcuQ2hhcmFjdGVyIGRvY3VtZW50YXRpb24KLSAqIGF0IGh0dHA6Ly9qYXZh
LnN1bi5jb20vajJzZS8xLjQvZG9jcy9hcGkvamF2YS9sYW5nL0NoYXJhY3Rlci5odG1sCi0gKgot
ICogVGhlcmUgYXJlIGFsc28gZnVuY3Rpb25zIHRoYXQgcHJvdmlkZSBlYXN5IG1pZ3JhdGlvbiBm
cm9tIEMvUE9TSVggZnVuY3Rpb25zCi0gKiBsaWtlIGlzYmxhbmsoKS4gVGhlaXIgdXNlIGlzIGdl
bmVyYWxseSBkaXNjb3VyYWdlZCBiZWNhdXNlIHRoZSBDL1BPU0lYCi0gKiBzdGFuZGFyZHMgZG8g
bm90IGRlZmluZSB0aGVpciBzZW1hbnRpY3MgYmV5b25kIHRoZSBBU0NJSSByYW5nZSwgd2hpY2gg
bWVhbnMKLSAqIHRoYXQgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBleGhpYml0IHZlcnkgZGlm
ZmVyZW50IGJlaGF2aW9yLgotICogSW5zdGVhZCwgVW5pY29kZSBwcm9wZXJ0aWVzIHNob3VsZCBi
ZSB1c2VkIGRpcmVjdGx5LgotICoKLSAqIFRoZXJlIGFyZSBhbHNvIG9ubHkgYSBmZXcsIGJyb2Fk
IEMvUE9TSVggY2hhcmFjdGVyIGNsYXNzZXMsIGFuZCB0aGV5IHRlbmQKLSAqIHRvIGJlIHVzZWQg
Zm9yIGNvbmZsaWN0aW5nIHB1cnBvc2VzLiBGb3IgZXhhbXBsZSwgdGhlICJpc2FscGhhKCkiIGNs
YXNzCi0gKiBpcyBzb21ldGltZXMgdXNlZCB0byBkZXRlcm1pbmUgd29yZCBib3VuZGFyaWVzLCB3
aGlsZSBhIG1vcmUgc29waGlzdGljYXRlZAotICogYXBwcm9hY2ggd291bGQgYXQgbGVhc3QgZGlz
dGluZ3Vpc2ggaW5pdGlhbCBsZXR0ZXJzIGZyb20gY29udGludWF0aW9uCi0gKiBjaGFyYWN0ZXJz
ICh0aGUgbGF0dGVyIGluY2x1ZGluZyBjb21iaW5pbmcgbWFya3MpLgotICogKEluIElDVSwgQnJl
YWtJdGVyYXRvciBpcyB0aGUgbW9zdCBzb3BoaXN0aWNhdGVkIEFQSSBmb3Igd29yZCBib3VuZGFy
aWVzLikKLSAqIEFub3RoZXIgZXhhbXBsZTogVGhlcmUgaXMgbm8gImlzdGl0bGUoKSIgY2xhc3Mg
Zm9yIHRpdGxlY2FzZSBjaGFyYWN0ZXJzLgotICoKLSAqIElDVSAzLjQgYW5kIGxhdGVyIHByb3Zp
ZGVzIEFQSSBhY2Nlc3MgZm9yIGFsbCB0d2VsdmUgQy9QT1NJWCBjaGFyYWN0ZXIgY2xhc3Nlcy4K
LSAqIElDVSBpbXBsZW1lbnRzIHRoZW0gYWNjb3JkaW5nIHRvIHRoZSBTdGFuZGFyZCBSZWNvbW1l
bmRhdGlvbnMgaW4KLSAqIEFubmV4IEM6IENvbXBhdGliaWxpdHkgUHJvcGVydGllcyBvZiBVVFMg
IzE4IFVuaWNvZGUgUmVndWxhciBFeHByZXNzaW9ucwotICogKGh0dHA6Ly93d3cudW5pY29kZS5v
cmcvcmVwb3J0cy90cjE4LyNDb21wYXRpYmlsaXR5X1Byb3BlcnRpZXMpLgotICoKLSAqIEFQSSBh
Y2Nlc3MgZm9yIEMvUE9TSVggY2hhcmFjdGVyIGNsYXNzZXMgaXMgYXMgZm9sbG93czoKLSAqIC0g
YWxwaGE6ICAgICB1X2lzVUFscGhhYmV0aWMoYykgb3IgdV9oYXNCaW5hcnlQcm9wZXJ0eShjLCBV
Q0hBUl9BTFBIQUJFVElDKQotICogLSBsb3dlcjogICAgIHVfaXNVTG93ZXJjYXNlKGMpIG9yIHVf
aGFzQmluYXJ5UHJvcGVydHkoYywgVUNIQVJfTE9XRVJDQVNFKQotICogLSB1cHBlcjogICAgIHVf
aXNVVXBwZXJjYXNlKGMpIG9yIHVfaGFzQmluYXJ5UHJvcGVydHkoYywgVUNIQVJfVVBQRVJDQVNF
KQotICogLSBwdW5jdDogICAgIHVfaXNwdW5jdChjKQotICogLSBkaWdpdDogICAgIHVfaXNkaWdp
dChjKSBvciB1X2NoYXJUeXBlKGMpPT1VX0RFQ0lNQUxfRElHSVRfTlVNQkVSCi0gKiAtIHhkaWdp
dDogICAgdV9pc3hkaWdpdChjKSBvciB1X2hhc0JpbmFyeVByb3BlcnR5KGMsIFVDSEFSX1BPU0lY
X1hESUdJVCkKLSAqIC0gYWxudW06ICAgICB1X2hhc0JpbmFyeVByb3BlcnR5KGMsIFVDSEFSX1BP
U0lYX0FMTlVNKQotICogLSBzcGFjZTogICAgIHVfaXNVV2hpdGVTcGFjZShjKSBvciB1X2hhc0Jp
bmFyeVByb3BlcnR5KGMsIFVDSEFSX1dISVRFX1NQQUNFKQotICogLSBibGFuazogICAgIHVfaXNi
bGFuayhjKSBvciB1X2hhc0JpbmFyeVByb3BlcnR5KGMsIFVDSEFSX1BPU0lYX0JMQU5LKQotICog
LSBjbnRybDogICAgIHVfY2hhclR5cGUoYyk9PVVfQ09OVFJPTF9DSEFSCi0gKiAtIGdyYXBoOiAg
ICAgdV9oYXNCaW5hcnlQcm9wZXJ0eShjLCBVQ0hBUl9QT1NJWF9HUkFQSCkKLSAqIC0gcHJpbnQ6
ICAgICB1X2hhc0JpbmFyeVByb3BlcnR5KGMsIFVDSEFSX1BPU0lYX1BSSU5UKQotICoKLSAqIE5v
dGU6IFNvbWUgb2YgdGhlIHVfaXN4eXooKSBmdW5jdGlvbnMgaW4gdWNoYXIuaCBwcmVkYXRlLCBh
bmQgZG8gbm90IG1hdGNoLAotICogdGhlIFN0YW5kYXJkIFJlY29tbWVuZGF0aW9ucyBpbiBVVFMg
IzE4LiBJbnN0ZWFkLCB0aGV5IG1hdGNoIEphdmEKLSAqIGZ1bmN0aW9ucyBhY2NvcmRpbmcgdG8g
dGhlaXIgQVBJIGRvY3VtZW50YXRpb24uCi0gKgotICogXGh0bWxvbmx5Ci0gKiBUaGUgQy9QT1NJ
WCBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUgYWxzbyBhdmFpbGFibGUgaW4gVW5pY29kZVNldCBwYXR0
ZXJucywKLSAqIHVzaW5nIHBhdHRlcm5zIGxpa2UgWzpncmFwaDpdIG9yIFxwe2dyYXBofS4KLSAq
IFxlbmRodG1sb25seQotICoKLSAqIE5vdGU6IFRoZXJlIGFyZSBzZXZlcmFsIElDVSB3aGl0ZXNw
YWNlIGZ1bmN0aW9ucy4KLSAqIENvbXBhcmlzb246Ci0gKiAtIHVfaXNVV2hpdGVTcGFjZT1VQ0hB
Ul9XSElURV9TUEFDRTogVW5pY29kZSBXaGl0ZV9TcGFjZSBwcm9wZXJ0eTsKLSAqICAgICAgIG1v
c3Qgb2YgZ2VuZXJhbCBjYXRlZ29yaWVzICJaIiAoc2VwYXJhdG9ycykgKyBtb3N0IHdoaXRlc3Bh
Y2UgSVNPIGNvbnRyb2xzCi0gKiAgICAgICAoaW5jbHVkaW5nIG5vLWJyZWFrIHNwYWNlcywgYnV0
IGV4Y2x1ZGluZyBJUzEuLklTNCBhbmQgWldTUCkKLSAqIC0gdV9pc1doaXRlc3BhY2U6IEphdmEg
aXNXaGl0ZXNwYWNlOyBaICsgd2hpdGVzcGFjZSBJU08gY29udHJvbHMgYnV0IGV4Y2x1ZGluZyBu
by1icmVhayBzcGFjZXMKLSAqIC0gdV9pc0phdmFTcGFjZUNoYXI6IEphdmEgaXNTcGFjZUNoYXI7
IGp1c3QgWiAoaW5jbHVkaW5nIG5vLWJyZWFrIHNwYWNlcykKLSAqIC0gdV9pc3NwYWNlOiBaICsg
d2hpdGVzcGFjZSBJU08gY29udHJvbHMgKGluY2x1ZGluZyBuby1icmVhayBzcGFjZXMpCi0gKiAt
IHVfaXNibGFuazogImhvcml6b250YWwgc3BhY2VzIiA9IFRBQiArIFpzIC0gWldTUAotICovCi0K
LS8qKgotICogQ29uc3RhbnRzLgotICovCi0KLS8qKiBUaGUgbG93ZXN0IFVuaWNvZGUgY29kZSBw
b2ludCB2YWx1ZS4gQ29kZSBwb2ludHMgYXJlIG5vbi1uZWdhdGl2ZS4gQHN0YWJsZSBJQ1UgMi4w
ICovCi0jZGVmaW5lIFVDSEFSX01JTl9WQUxVRSAwCi0KLS8qKgotICogVGhlIGhpZ2hlc3QgVW5p
Y29kZSBjb2RlIHBvaW50IHZhbHVlIChzY2FsYXIgdmFsdWUpIGFjY29yZGluZyB0bwotICogVGhl
IFVuaWNvZGUgU3RhbmRhcmQuIFRoaXMgaXMgYSAyMS1iaXQgdmFsdWUgKDIwLjEgYml0cywgcm91
bmRlZCB1cCkuCi0gKiBGb3IgYSBzaW5nbGUgY2hhcmFjdGVyLCBVQ2hhcjMyIGlzIGEgc2ltcGxl
IHR5cGUgdGhhdCBjYW4gaG9sZCBhbnkgY29kZSBwb2ludCB2YWx1ZS4KLSAqCi0gKiBAc2VlIFVD
aGFyMzIKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi0jZGVmaW5lIFVDSEFSX01BWF9WQUxVRSAw
eDEwZmZmZgotCi0vKioKLSAqIEdldCBhIHNpbmdsZS1iaXQgYml0IHNldCAoYSBmbGFnKSBmcm9t
IGEgYml0IG51bWJlciAwLi4zMS4KLSAqIEBzdGFibGUgSUNVIDIuMQotICovCi0jZGVmaW5lIFVf
TUFTSyh4KSAoKHVpbnQzMl90KTE8PCh4KSkKLQotLyoqCi0gKiBTZWxlY3Rpb24gY29uc3RhbnRz
IGZvciBVbmljb2RlIHByb3BlcnRpZXMuCi0gKiBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgaW4g
ZnVuY3Rpb25zIGxpa2UgdV9oYXNCaW5hcnlQcm9wZXJ0eSB0byBzZWxlY3QKLSAqIG9uZSBvZiB0
aGUgVW5pY29kZSBwcm9wZXJ0aWVzLgotICoKLSAqIFRoZSBwcm9wZXJ0aWVzIEFQSXMgYXJlIGlu
dGVuZGVkIHRvIHJlZmxlY3QgVW5pY29kZSBwcm9wZXJ0aWVzIGFzIGRlZmluZWQKLSAqIGluIHRo
ZSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSAoVUNEKSBhbmQgVW5pY29kZSBUZWNobmljYWwg
UmVwb3J0cyAoVVRSKS4KLSAqIEZvciBkZXRhaWxzIGFib3V0IHRoZSBwcm9wZXJ0aWVzIHNlZSBo
dHRwOi8vd3d3LnVuaWNvZGUub3JnL3VjZC8gLgotICogRm9yIG5hbWVzIG9mIFVuaWNvZGUgcHJv
cGVydGllcyBzZWUgdGhlIFVDRCBmaWxlIFByb3BlcnR5QWxpYXNlcy50eHQuCi0gKgotICogSW1w
b3J0YW50OiBJZiBJQ1UgaXMgYnVpbHQgd2l0aCBVQ0QgZmlsZXMgZnJvbSBVbmljb2RlIHZlcnNp
b25zIGJlbG93LCBlLmcuLCAzLjIsCi0gKiB0aGVuIHByb3BlcnRpZXMgbWFya2VkIHdpdGggIm5l
dyBpbiBVbmljb2RlIDMuMiIgYXJlIG5vdCBvciBub3QgZnVsbHkgYXZhaWxhYmxlLgotICogQ2hl
Y2sgdV9nZXRVbmljb2RlVmVyc2lvbiB0byBiZSBzdXJlLgotICoKLSAqIEBzZWUgdV9oYXNCaW5h
cnlQcm9wZXJ0eQotICogQHNlZSB1X2dldEludFByb3BlcnR5VmFsdWUKLSAqIEBzZWUgdV9nZXRV
bmljb2RlVmVyc2lvbgotICogQHN0YWJsZSBJQ1UgMi4xCi0gKi8KLXR5cGVkZWYgZW51bSBVUHJv
cGVydHkgewotICAgIC8qCi0gICAgICogTm90ZTogVVByb3BlcnR5IGNvbnN0YW50cyBhcmUgcGFy
c2VkIGJ5IHByZXBhcnNldWNkLnB5LgotICAgICAqIEl0IG1hdGNoZXMgbGluZXMgbGlrZQotICAg
ICAqICAgICBVQ0hBUl88VW5pY29kZSBwcm9wZXJ0eSBuYW1lPj08aW50ZWdlcj4sCi0gICAgICov
Ci0KLSAgICAvKiAgTm90ZTogUGxhY2UgVUNIQVJfQUxQSEFCRVRJQyBiZWZvcmUgVUNIQVJfQklO
QVJZX1NUQVJUIHNvIHRoYXQKLSAgICBkZWJ1Z2dlcnMgZGlzcGxheSBVQ0hBUl9BTFBIQUJFVElD
IGFzIHRoZSBzeW1ib2xpYyBuYW1lIGZvciAwLAotICAgIHJhdGhlciB0aGFuIFVDSEFSX0JJTkFS
WV9TVEFSVC4gIExpa2V3aXNlIGZvciBvdGhlciAqX1NUQVJUCi0gICAgaWRlbnRpZmllcnMuICov
Ci0KLSAgICAvKiogQmluYXJ5IHByb3BlcnR5IEFscGhhYmV0aWMuIFNhbWUgYXMgdV9pc1VBbHBo
YWJldGljLCBkaWZmZXJlbnQgZnJvbSB1X2lzYWxwaGEuCi0gICAgICAgIEx1K0xsK0x0K0xtK0xv
K05sK090aGVyX0FscGhhYmV0aWMgQHN0YWJsZSBJQ1UgMi4xICovCi0gICAgVUNIQVJfQUxQSEFC
RVRJQz0wLAotICAgIC8qKiBGaXJzdCBjb25zdGFudCBmb3IgYmluYXJ5IFVuaWNvZGUgcHJvcGVy
dGllcy4gQHN0YWJsZSBJQ1UgMi4xICovCi0gICAgVUNIQVJfQklOQVJZX1NUQVJUPVVDSEFSX0FM
UEhBQkVUSUMsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBBU0NJSV9IZXhfRGlnaXQuIDAtOSBB
LUYgYS1mIEBzdGFibGUgSUNVIDIuMSAqLwotICAgIFVDSEFSX0FTQ0lJX0hFWF9ESUdJVD0xLAot
ICAgIC8qKiBCaW5hcnkgcHJvcGVydHkgQmlkaV9Db250cm9sLgotICAgICAgICBGb3JtYXQgY29u
dHJvbHMgd2hpY2ggaGF2ZSBzcGVjaWZpYyBmdW5jdGlvbnMKLSAgICAgICAgaW4gdGhlIEJpZGkg
QWxnb3JpdGhtLiBAc3RhYmxlIElDVSAyLjEgKi8KLSAgICBVQ0hBUl9CSURJX0NPTlRST0w9MiwK
LSAgICAvKiogQmluYXJ5IHByb3BlcnR5IEJpZGlfTWlycm9yZWQuCi0gICAgICAgIENoYXJhY3Rl
cnMgdGhhdCBtYXkgY2hhbmdlIGRpc3BsYXkgaW4gUlRMIHRleHQuCi0gICAgICAgIFNhbWUgYXMg
dV9pc01pcnJvcmVkLgotICAgICAgICBTZWUgQmlkaSBBbGdvcml0aG0sIFVUUiA5LiBAc3RhYmxl
IElDVSAyLjEgKi8KLSAgICBVQ0hBUl9CSURJX01JUlJPUkVEPTMsCi0gICAgLyoqIEJpbmFyeSBw
cm9wZXJ0eSBEYXNoLiBWYXJpYXRpb25zIG9mIGRhc2hlcy4gQHN0YWJsZSBJQ1UgMi4xICovCi0g
ICAgVUNIQVJfREFTSD00LAotICAgIC8qKiBCaW5hcnkgcHJvcGVydHkgRGVmYXVsdF9JZ25vcmFi
bGVfQ29kZV9Qb2ludCAobmV3IGluIFVuaWNvZGUgMy4yKS4KLSAgICAgICAgSWdub3JhYmxlIGlu
IG1vc3QgcHJvY2Vzc2luZy4KLSAgICAgICAgPDIwNjAuLjIwNkYsIEZGRjAuLkZGRkIsIEUwMDAw
Li5FMEZGRj4rT3RoZXJfRGVmYXVsdF9JZ25vcmFibGVfQ29kZV9Qb2ludCsoQ2YrQ2MrQ3MtV2hp
dGVfU3BhY2UpIEBzdGFibGUgSUNVIDIuMSAqLwotICAgIFVDSEFSX0RFRkFVTFRfSUdOT1JBQkxF
X0NPREVfUE9JTlQ9NSwKLSAgICAvKiogQmluYXJ5IHByb3BlcnR5IERlcHJlY2F0ZWQgKG5ldyBp
biBVbmljb2RlIDMuMikuCi0gICAgICAgIFRoZSB1c2FnZSBvZiBkZXByZWNhdGVkIGNoYXJhY3Rl
cnMgaXMgc3Ryb25nbHkgZGlzY291cmFnZWQuIEBzdGFibGUgSUNVIDIuMSAqLwotICAgIFVDSEFS
X0RFUFJFQ0FURUQ9NiwKLSAgICAvKiogQmluYXJ5IHByb3BlcnR5IERpYWNyaXRpYy4gQ2hhcmFj
dGVycyB0aGF0IGxpbmd1aXN0aWNhbGx5IG1vZGlmeQotICAgICAgICB0aGUgbWVhbmluZyBvZiBh
bm90aGVyIGNoYXJhY3RlciB0byB3aGljaCB0aGV5IGFwcGx5LiBAc3RhYmxlIElDVSAyLjEgKi8K
LSAgICBVQ0hBUl9ESUFDUklUSUM9NywKLSAgICAvKiogQmluYXJ5IHByb3BlcnR5IEV4dGVuZGVy
LgotICAgICAgICBFeHRlbmQgdGhlIHZhbHVlIG9yIHNoYXBlIG9mIGEgcHJlY2VkaW5nIGFscGhh
YmV0aWMgY2hhcmFjdGVyLAotICAgICAgICBlLmcuLCBsZW5ndGggYW5kIGl0ZXJhdGlvbiBtYXJr
cy4gQHN0YWJsZSBJQ1UgMi4xICovCi0gICAgVUNIQVJfRVhURU5ERVI9OCwKLSAgICAvKiogQmlu
YXJ5IHByb3BlcnR5IEZ1bGxfQ29tcG9zaXRpb25fRXhjbHVzaW9uLgotICAgICAgICBDb21wb3Np
dGlvbkV4Y2x1c2lvbnMudHh0K1NpbmdsZXRvbiBEZWNvbXBvc2l0aW9ucysKLSAgICAgICAgTm9u
LVN0YXJ0ZXIgRGVjb21wb3NpdGlvbnMuIEBzdGFibGUgSUNVIDIuMSAqLwotICAgIFVDSEFSX0ZV
TExfQ09NUE9TSVRJT05fRVhDTFVTSU9OPTksCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBHcmFw
aGVtZV9CYXNlIChuZXcgaW4gVW5pY29kZSAzLjIpLgotICAgICAgICBGb3IgcHJvZ3JhbW1hdGlj
IGRldGVybWluYXRpb24gb2YgZ3JhcGhlbWUgY2x1c3RlciBib3VuZGFyaWVzLgotICAgICAgICBb
MC4uMTBGRkZGXS1DYy1DZi1Dcy1Dby1Dbi1abC1acC1HcmFwaGVtZV9MaW5rLUdyYXBoZW1lX0V4
dGVuZC1DR0ogQHN0YWJsZSBJQ1UgMi4xICovCi0gICAgVUNIQVJfR1JBUEhFTUVfQkFTRT0xMCwK
LSAgICAvKiogQmluYXJ5IHByb3BlcnR5IEdyYXBoZW1lX0V4dGVuZCAobmV3IGluIFVuaWNvZGUg
My4yKS4KLSAgICAgICAgRm9yIHByb2dyYW1tYXRpYyBkZXRlcm1pbmF0aW9uIG9mIGdyYXBoZW1l
IGNsdXN0ZXIgYm91bmRhcmllcy4KLSAgICAgICAgTWUrTW4rTWMrT3RoZXJfR3JhcGhlbWVfRXh0
ZW5kLUdyYXBoZW1lX0xpbmstQ0dKIEBzdGFibGUgSUNVIDIuMSAqLwotICAgIFVDSEFSX0dSQVBI
RU1FX0VYVEVORD0xMSwKLSAgICAvKiogQmluYXJ5IHByb3BlcnR5IEdyYXBoZW1lX0xpbmsgKG5l
dyBpbiBVbmljb2RlIDMuMikuCi0gICAgICAgIEZvciBwcm9ncmFtbWF0aWMgZGV0ZXJtaW5hdGlv
biBvZiBncmFwaGVtZSBjbHVzdGVyIGJvdW5kYXJpZXMuIEBzdGFibGUgSUNVIDIuMSAqLwotICAg
IFVDSEFSX0dSQVBIRU1FX0xJTks9MTIsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBIZXhfRGln
aXQuCi0gICAgICAgIENoYXJhY3RlcnMgY29tbW9ubHkgdXNlZCBmb3IgaGV4YWRlY2ltYWwgbnVt
YmVycy4gQHN0YWJsZSBJQ1UgMi4xICovCi0gICAgVUNIQVJfSEVYX0RJR0lUPTEzLAotICAgIC8q
KiBCaW5hcnkgcHJvcGVydHkgSHlwaGVuLiBEYXNoZXMgdXNlZCB0byBtYXJrIGNvbm5lY3Rpb25z
Ci0gICAgICAgIGJldHdlZW4gcGllY2VzIG9mIHdvcmRzLCBwbHVzIHRoZSBLYXRha2FuYSBtaWRk
bGUgZG90LiBAc3RhYmxlIElDVSAyLjEgKi8KLSAgICBVQ0hBUl9IWVBIRU49MTQsCi0gICAgLyoq
IEJpbmFyeSBwcm9wZXJ0eSBJRF9Db250aW51ZS4KLSAgICAgICAgQ2hhcmFjdGVycyB0aGF0IGNh
biBjb250aW51ZSBhbiBpZGVudGlmaWVyLgotICAgICAgICBEZXJpdmVkQ29yZVByb3BlcnRpZXMu
dHh0IGFsc28gc2F5cyAiTk9URTogQ2YgY2hhcmFjdGVycyBzaG91bGQgYmUgZmlsdGVyZWQgb3V0
LiIKLSAgICAgICAgSURfU3RhcnQrTW4rTWMrTmQrUGMgQHN0YWJsZSBJQ1UgMi4xICovCi0gICAg
VUNIQVJfSURfQ09OVElOVUU9MTUsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBJRF9TdGFydC4K
LSAgICAgICAgQ2hhcmFjdGVycyB0aGF0IGNhbiBzdGFydCBhbiBpZGVudGlmaWVyLgotICAgICAg
ICBMdStMbCtMdCtMbStMbytObCBAc3RhYmxlIElDVSAyLjEgKi8KLSAgICBVQ0hBUl9JRF9TVEFS
VD0xNiwKLSAgICAvKiogQmluYXJ5IHByb3BlcnR5IElkZW9ncmFwaGljLgotICAgICAgICBDSktW
IGlkZW9ncmFwaHMuIEBzdGFibGUgSUNVIDIuMSAqLwotICAgIFVDSEFSX0lERU9HUkFQSElDPTE3
LAotICAgIC8qKiBCaW5hcnkgcHJvcGVydHkgSURTX0JpbmFyeV9PcGVyYXRvciAobmV3IGluIFVu
aWNvZGUgMy4yKS4KLSAgICAgICAgRm9yIHByb2dyYW1tYXRpYyBkZXRlcm1pbmF0aW9uIG9mCi0g
ICAgICAgIElkZW9ncmFwaGljIERlc2NyaXB0aW9uIFNlcXVlbmNlcy4gQHN0YWJsZSBJQ1UgMi4x
ICovCi0gICAgVUNIQVJfSURTX0JJTkFSWV9PUEVSQVRPUj0xOCwKLSAgICAvKiogQmluYXJ5IHBy
b3BlcnR5IElEU19UcmluYXJ5X09wZXJhdG9yIChuZXcgaW4gVW5pY29kZSAzLjIpLgotICAgICAg
ICBGb3IgcHJvZ3JhbW1hdGljIGRldGVybWluYXRpb24gb2YKLSAgICAgICAgSWRlb2dyYXBoaWMg
RGVzY3JpcHRpb24gU2VxdWVuY2VzLiBAc3RhYmxlIElDVSAyLjEgKi8KLSAgICBVQ0hBUl9JRFNf
VFJJTkFSWV9PUEVSQVRPUj0xOSwKLSAgICAvKiogQmluYXJ5IHByb3BlcnR5IEpvaW5fQ29udHJv
bC4KLSAgICAgICAgRm9ybWF0IGNvbnRyb2xzIGZvciBjdXJzaXZlIGpvaW5pbmcgYW5kIGxpZ2F0
aW9uLiBAc3RhYmxlIElDVSAyLjEgKi8KLSAgICBVQ0hBUl9KT0lOX0NPTlRST0w9MjAsCi0gICAg
LyoqIEJpbmFyeSBwcm9wZXJ0eSBMb2dpY2FsX09yZGVyX0V4Y2VwdGlvbiAobmV3IGluIFVuaWNv
ZGUgMy4yKS4KLSAgICAgICAgQ2hhcmFjdGVycyB0aGF0IGRvIG5vdCB1c2UgbG9naWNhbCBvcmRl
ciBhbmQKLSAgICAgICAgcmVxdWlyZSBzcGVjaWFsIGhhbmRsaW5nIGluIG1vc3QgcHJvY2Vzc2lu
Zy4gQHN0YWJsZSBJQ1UgMi4xICovCi0gICAgVUNIQVJfTE9HSUNBTF9PUkRFUl9FWENFUFRJT049
MjEsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBMb3dlcmNhc2UuIFNhbWUgYXMgdV9pc1VMb3dl
cmNhc2UsIGRpZmZlcmVudCBmcm9tIHVfaXNsb3dlci4KLSAgICAgICAgTGwrT3RoZXJfTG93ZXJj
YXNlIEBzdGFibGUgSUNVIDIuMSAqLwotICAgIFVDSEFSX0xPV0VSQ0FTRT0yMiwKLSAgICAvKiog
QmluYXJ5IHByb3BlcnR5IE1hdGguIFNtK090aGVyX01hdGggQHN0YWJsZSBJQ1UgMi4xICovCi0g
ICAgVUNIQVJfTUFUSD0yMywKLSAgICAvKiogQmluYXJ5IHByb3BlcnR5IE5vbmNoYXJhY3Rlcl9D
b2RlX1BvaW50LgotICAgICAgICBDb2RlIHBvaW50cyB0aGF0IGFyZSBleHBsaWNpdGx5IGRlZmlu
ZWQgYXMgaWxsZWdhbAotICAgICAgICBmb3IgdGhlIGVuY29kaW5nIG9mIGNoYXJhY3RlcnMuIEBz
dGFibGUgSUNVIDIuMSAqLwotICAgIFVDSEFSX05PTkNIQVJBQ1RFUl9DT0RFX1BPSU5UPTI0LAot
ICAgIC8qKiBCaW5hcnkgcHJvcGVydHkgUXVvdGF0aW9uX01hcmsuIEBzdGFibGUgSUNVIDIuMSAq
LwotICAgIFVDSEFSX1FVT1RBVElPTl9NQVJLPTI1LAotICAgIC8qKiBCaW5hcnkgcHJvcGVydHkg
UmFkaWNhbCAobmV3IGluIFVuaWNvZGUgMy4yKS4KLSAgICAgICAgRm9yIHByb2dyYW1tYXRpYyBk
ZXRlcm1pbmF0aW9uIG9mCi0gICAgICAgIElkZW9ncmFwaGljIERlc2NyaXB0aW9uIFNlcXVlbmNl
cy4gQHN0YWJsZSBJQ1UgMi4xICovCi0gICAgVUNIQVJfUkFESUNBTD0yNiwKLSAgICAvKiogQmlu
YXJ5IHByb3BlcnR5IFNvZnRfRG90dGVkIChuZXcgaW4gVW5pY29kZSAzLjIpLgotICAgICAgICBD
aGFyYWN0ZXJzIHdpdGggYSAic29mdCBkb3QiLCBsaWtlIGkgb3Igai4KLSAgICAgICAgQW4gYWNj
ZW50IHBsYWNlZCBvbiB0aGVzZSBjaGFyYWN0ZXJzIGNhdXNlcwotICAgICAgICB0aGUgZG90IHRv
IGRpc2FwcGVhci4gQHN0YWJsZSBJQ1UgMi4xICovCi0gICAgVUNIQVJfU09GVF9ET1RURUQ9Mjcs
Ci0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBUZXJtaW5hbF9QdW5jdHVhdGlvbi4KLSAgICAgICAg
UHVuY3R1YXRpb24gY2hhcmFjdGVycyB0aGF0IGdlbmVyYWxseSBtYXJrCi0gICAgICAgIHRoZSBl
bmQgb2YgdGV4dHVhbCB1bml0cy4gQHN0YWJsZSBJQ1UgMi4xICovCi0gICAgVUNIQVJfVEVSTUlO
QUxfUFVOQ1RVQVRJT049MjgsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBVbmlmaWVkX0lkZW9n
cmFwaCAobmV3IGluIFVuaWNvZGUgMy4yKS4KLSAgICAgICAgRm9yIHByb2dyYW1tYXRpYyBkZXRl
cm1pbmF0aW9uIG9mCi0gICAgICAgIElkZW9ncmFwaGljIERlc2NyaXB0aW9uIFNlcXVlbmNlcy4g
QHN0YWJsZSBJQ1UgMi4xICovCi0gICAgVUNIQVJfVU5JRklFRF9JREVPR1JBUEg9MjksCi0gICAg
LyoqIEJpbmFyeSBwcm9wZXJ0eSBVcHBlcmNhc2UuIFNhbWUgYXMgdV9pc1VVcHBlcmNhc2UsIGRp
ZmZlcmVudCBmcm9tIHVfaXN1cHBlci4KLSAgICAgICAgTHUrT3RoZXJfVXBwZXJjYXNlIEBzdGFi
bGUgSUNVIDIuMSAqLwotICAgIFVDSEFSX1VQUEVSQ0FTRT0zMCwKLSAgICAvKiogQmluYXJ5IHBy
b3BlcnR5IFdoaXRlX1NwYWNlLgotICAgICAgICBTYW1lIGFzIHVfaXNVV2hpdGVTcGFjZSwgZGlm
ZmVyZW50IGZyb20gdV9pc3NwYWNlIGFuZCB1X2lzV2hpdGVzcGFjZS4KLSAgICAgICAgU3BhY2Ug
Y2hhcmFjdGVycytUQUIrQ1IrTEYtWldTUC1aV05CU1AgQHN0YWJsZSBJQ1UgMi4xICovCi0gICAg
VUNIQVJfV0hJVEVfU1BBQ0U9MzEsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBYSURfQ29udGlu
dWUuCi0gICAgICAgIElEX0NvbnRpbnVlIG1vZGlmaWVkIHRvIGFsbG93IGNsb3N1cmUgdW5kZXIK
LSAgICAgICAgbm9ybWFsaXphdGlvbiBmb3JtcyBORktDIGFuZCBORktELiBAc3RhYmxlIElDVSAy
LjEgKi8KLSAgICBVQ0hBUl9YSURfQ09OVElOVUU9MzIsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0
eSBYSURfU3RhcnQuIElEX1N0YXJ0IG1vZGlmaWVkIHRvIGFsbG93Ci0gICAgICAgIGNsb3N1cmUg
dW5kZXIgbm9ybWFsaXphdGlvbiBmb3JtcyBORktDIGFuZCBORktELiBAc3RhYmxlIElDVSAyLjEg
Ki8KLSAgICBVQ0hBUl9YSURfU1RBUlQ9MzMsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBDYXNl
X1NlbnNpdGl2ZS4gRWl0aGVyIHRoZSBzb3VyY2Ugb2YgYSBjYXNlCi0gICAgICAgIG1hcHBpbmcg
b3IgX2luXyB0aGUgdGFyZ2V0IG9mIGEgY2FzZSBtYXBwaW5nLiBOb3QgdGhlIHNhbWUgYXMKLSAg
ICAgICAgdGhlIGdlbmVyYWwgY2F0ZWdvcnkgQ2FzZWRfTGV0dGVyLiBAc3RhYmxlIElDVSAyLjYg
Ki8KLSAgIFVDSEFSX0NBU0VfU0VOU0lUSVZFPTM0LAotICAgIC8qKiBCaW5hcnkgcHJvcGVydHkg
U1Rlcm0gKG5ldyBpbiBVbmljb2RlIDQuMC4xKS4KLSAgICAgICAgU2VudGVuY2UgVGVybWluYWwu
IFVzZWQgaW4gVUFYICMyOTogVGV4dCBCb3VuZGFyaWVzCi0gICAgICAgIChodHRwOi8vd3d3LnVu
aWNvZGUub3JnL3JlcG9ydHMvdHIyOS8pCi0gICAgICAgIEBzdGFibGUgSUNVIDMuMCAqLwotICAg
IFVDSEFSX1NfVEVSTT0zNSwKLSAgICAvKiogQmluYXJ5IHByb3BlcnR5IFZhcmlhdGlvbl9TZWxl
Y3RvciAobmV3IGluIFVuaWNvZGUgNC4wLjEpLgotICAgICAgICBJbmRpY2F0ZXMgYWxsIHRob3Nl
IGNoYXJhY3RlcnMgdGhhdCBxdWFsaWZ5IGFzIFZhcmlhdGlvbiBTZWxlY3RvcnMuCi0gICAgICAg
IEZvciBkZXRhaWxzIG9uIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBjaGFyYWN0ZXJzLAotICAgICAg
ICBzZWUgU3RhbmRhcmRpemVkVmFyaWFudHMuaHRtbCBhbmQgMTUuNiBWYXJpYXRpb24gU2VsZWN0
b3JzLgotICAgICAgICBAc3RhYmxlIElDVSAzLjAgKi8KLSAgICBVQ0hBUl9WQVJJQVRJT05fU0VM
RUNUT1I9MzYsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBORkRfSW5lcnQuCi0gICAgICAgIElD
VS1zcGVjaWZpYyBwcm9wZXJ0eSBmb3IgY2hhcmFjdGVycyB0aGF0IGFyZSBpbmVydCB1bmRlciBO
RkQsCi0gICAgICAgIGkuZS4sIHRoZXkgZG8gbm90IGludGVyYWN0IHdpdGggYWRqYWNlbnQgY2hh
cmFjdGVycy4KLSAgICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgTm9ybWFsaXpl
cjIgY2xhc3MgYW5kIHRoZQotICAgICAgICBOb3JtYWxpemVyMjo6aXNJbmVydCgpIG1ldGhvZC4K
LSAgICAgICAgQHN0YWJsZSBJQ1UgMy4wICovCi0gICAgVUNIQVJfTkZEX0lORVJUPTM3LAotICAg
IC8qKiBCaW5hcnkgcHJvcGVydHkgTkZLRF9JbmVydC4KLSAgICAgICAgSUNVLXNwZWNpZmljIHBy
b3BlcnR5IGZvciBjaGFyYWN0ZXJzIHRoYXQgYXJlIGluZXJ0IHVuZGVyIE5GS0QsCi0gICAgICAg
IGkuZS4sIHRoZXkgZG8gbm90IGludGVyYWN0IHdpdGggYWRqYWNlbnQgY2hhcmFjdGVycy4KLSAg
ICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgTm9ybWFsaXplcjIgY2xhc3MgYW5k
IHRoZQotICAgICAgICBOb3JtYWxpemVyMjo6aXNJbmVydCgpIG1ldGhvZC4KLSAgICAgICAgQHN0
YWJsZSBJQ1UgMy4wICovCi0gICAgVUNIQVJfTkZLRF9JTkVSVD0zOCwKLSAgICAvKiogQmluYXJ5
IHByb3BlcnR5IE5GQ19JbmVydC4KLSAgICAgICAgSUNVLXNwZWNpZmljIHByb3BlcnR5IGZvciBj
aGFyYWN0ZXJzIHRoYXQgYXJlIGluZXJ0IHVuZGVyIE5GQywKLSAgICAgICAgaS5lLiwgdGhleSBk
byBub3QgaW50ZXJhY3Qgd2l0aCBhZGphY2VudCBjaGFyYWN0ZXJzLgotICAgICAgICBTZWUgdGhl
IGRvY3VtZW50YXRpb24gZm9yIHRoZSBOb3JtYWxpemVyMiBjbGFzcyBhbmQgdGhlCi0gICAgICAg
IE5vcm1hbGl6ZXIyOjppc0luZXJ0KCkgbWV0aG9kLgotICAgICAgICBAc3RhYmxlIElDVSAzLjAg
Ki8KLSAgICBVQ0hBUl9ORkNfSU5FUlQ9MzksCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBORktD
X0luZXJ0LgotICAgICAgICBJQ1Utc3BlY2lmaWMgcHJvcGVydHkgZm9yIGNoYXJhY3RlcnMgdGhh
dCBhcmUgaW5lcnQgdW5kZXIgTkZLQywKLSAgICAgICAgaS5lLiwgdGhleSBkbyBub3QgaW50ZXJh
Y3Qgd2l0aCBhZGphY2VudCBjaGFyYWN0ZXJzLgotICAgICAgICBTZWUgdGhlIGRvY3VtZW50YXRp
b24gZm9yIHRoZSBOb3JtYWxpemVyMiBjbGFzcyBhbmQgdGhlCi0gICAgICAgIE5vcm1hbGl6ZXIy
Ojppc0luZXJ0KCkgbWV0aG9kLgotICAgICAgICBAc3RhYmxlIElDVSAzLjAgKi8KLSAgICBVQ0hB
Ul9ORktDX0lORVJUPTQwLAotICAgIC8qKiBCaW5hcnkgUHJvcGVydHkgU2VnbWVudF9TdGFydGVy
LgotICAgICAgICBJQ1Utc3BlY2lmaWMgcHJvcGVydHkgZm9yIGNoYXJhY3RlcnMgdGhhdCBhcmUg
c3RhcnRlcnMgaW4gdGVybXMgb2YKLSAgICAgICAgVW5pY29kZSBub3JtYWxpemF0aW9uIGFuZCBj
b21iaW5pbmcgY2hhcmFjdGVyIHNlcXVlbmNlcy4KLSAgICAgICAgVGhleSBoYXZlIGNjYz0wIGFu
ZCBkbyBub3Qgb2NjdXIgaW4gbm9uLWluaXRpYWwgcG9zaXRpb24gb2YgdGhlCi0gICAgICAgIGNh
bm9uaWNhbCBkZWNvbXBvc2l0aW9uIG9mIGFueSBjaGFyYWN0ZXIKLSAgICAgICAgKGxpa2UgYS11
bWxhdXQgaW4gTkZEIGFuZCBhIEphbW8gVCBpbiBhbiBORkQoSGFuZ3VsIExWVCkpLgotICAgICAg
ICBJQ1UgdXNlcyB0aGlzIHByb3BlcnR5IGZvciBzZWdtZW50aW5nIGEgc3RyaW5nIGZvciBnZW5l
cmF0aW5nIGEgc2V0IG9mCi0gICAgICAgIGNhbm9uaWNhbGx5IGVxdWl2YWxlbnQgc3RyaW5ncywg
ZS5nLiBmb3IgY2Fub25pY2FsIGNsb3N1cmUgd2hpbGUKLSAgICAgICAgcHJvY2Vzc2luZyBjb2xs
YXRpb24gdGFpbG9yaW5nIHJ1bGVzLgotICAgICAgICBAc3RhYmxlIElDVSAzLjAgKi8KLSAgICBV
Q0hBUl9TRUdNRU5UX1NUQVJURVI9NDEsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBQYXR0ZXJu
X1N5bnRheCAobmV3IGluIFVuaWNvZGUgNC4xKS4KLSAgICAgICAgU2VlIFVBWCAjMzEgSWRlbnRp
ZmllciBhbmQgUGF0dGVybiBTeW50YXgKLSAgICAgICAgKGh0dHA6Ly93d3cudW5pY29kZS5vcmcv
cmVwb3J0cy90cjMxLykKLSAgICAgICAgQHN0YWJsZSBJQ1UgMy40ICovCi0gICAgVUNIQVJfUEFU
VEVSTl9TWU5UQVg9NDIsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBQYXR0ZXJuX1doaXRlX1Nw
YWNlIChuZXcgaW4gVW5pY29kZSA0LjEpLgotICAgICAgICBTZWUgVUFYICMzMSBJZGVudGlmaWVy
IGFuZCBQYXR0ZXJuIFN5bnRheAotICAgICAgICAoaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBv
cnRzL3RyMzEvKQotICAgICAgICBAc3RhYmxlIElDVSAzLjQgKi8KLSAgICBVQ0hBUl9QQVRURVJO
X1dISVRFX1NQQUNFPTQzLAotICAgIC8qKiBCaW5hcnkgcHJvcGVydHkgYWxudW0gKGEgQy9QT1NJ
WCBjaGFyYWN0ZXIgY2xhc3MpLgotICAgICAgICBJbXBsZW1lbnRlZCBhY2NvcmRpbmcgdG8gdGhl
IFVUUyAjMTggQW5uZXggQyBTdGFuZGFyZCBSZWNvbW1lbmRhdGlvbi4KLSAgICAgICAgU2VlIHRo
ZSB1Y2hhci5oIGZpbGUgZG9jdW1lbnRhdGlvbi4KLSAgICAgICAgQHN0YWJsZSBJQ1UgMy40ICov
Ci0gICAgVUNIQVJfUE9TSVhfQUxOVU09NDQsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBibGFu
ayAoYSBDL1BPU0lYIGNoYXJhY3RlciBjbGFzcykuCi0gICAgICAgIEltcGxlbWVudGVkIGFjY29y
ZGluZyB0byB0aGUgVVRTICMxOCBBbm5leCBDIFN0YW5kYXJkIFJlY29tbWVuZGF0aW9uLgotICAg
ICAgICBTZWUgdGhlIHVjaGFyLmggZmlsZSBkb2N1bWVudGF0aW9uLgotICAgICAgICBAc3RhYmxl
IElDVSAzLjQgKi8KLSAgICBVQ0hBUl9QT1NJWF9CTEFOSz00NSwKLSAgICAvKiogQmluYXJ5IHBy
b3BlcnR5IGdyYXBoIChhIEMvUE9TSVggY2hhcmFjdGVyIGNsYXNzKS4KLSAgICAgICAgSW1wbGVt
ZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBVVFMgIzE4IEFubmV4IEMgU3RhbmRhcmQgUmVjb21tZW5k
YXRpb24uCi0gICAgICAgIFNlZSB0aGUgdWNoYXIuaCBmaWxlIGRvY3VtZW50YXRpb24uCi0gICAg
ICAgIEBzdGFibGUgSUNVIDMuNCAqLwotICAgIFVDSEFSX1BPU0lYX0dSQVBIPTQ2LAotICAgIC8q
KiBCaW5hcnkgcHJvcGVydHkgcHJpbnQgKGEgQy9QT1NJWCBjaGFyYWN0ZXIgY2xhc3MpLgotICAg
ICAgICBJbXBsZW1lbnRlZCBhY2NvcmRpbmcgdG8gdGhlIFVUUyAjMTggQW5uZXggQyBTdGFuZGFy
ZCBSZWNvbW1lbmRhdGlvbi4KLSAgICAgICAgU2VlIHRoZSB1Y2hhci5oIGZpbGUgZG9jdW1lbnRh
dGlvbi4KLSAgICAgICAgQHN0YWJsZSBJQ1UgMy40ICovCi0gICAgVUNIQVJfUE9TSVhfUFJJTlQ9
NDcsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSB4ZGlnaXQgKGEgQy9QT1NJWCBjaGFyYWN0ZXIg
Y2xhc3MpLgotICAgICAgICBJbXBsZW1lbnRlZCBhY2NvcmRpbmcgdG8gdGhlIFVUUyAjMTggQW5u
ZXggQyBTdGFuZGFyZCBSZWNvbW1lbmRhdGlvbi4KLSAgICAgICAgU2VlIHRoZSB1Y2hhci5oIGZp
bGUgZG9jdW1lbnRhdGlvbi4KLSAgICAgICAgQHN0YWJsZSBJQ1UgMy40ICovCi0gICAgVUNIQVJf
UE9TSVhfWERJR0lUPTQ4LAotICAgIC8qKiBCaW5hcnkgcHJvcGVydHkgQ2FzZWQuIEZvciBMb3dl
cmNhc2UsIFVwcGVyY2FzZSBhbmQgVGl0bGVjYXNlIGNoYXJhY3RlcnMuIEBzdGFibGUgSUNVIDQu
NCAqLwotICAgIFVDSEFSX0NBU0VEPTQ5LAotICAgIC8qKiBCaW5hcnkgcHJvcGVydHkgQ2FzZV9J
Z25vcmFibGUuIFVzZWQgaW4gY29udGV4dC1zZW5zaXRpdmUgY2FzZSBtYXBwaW5ncy4gQHN0YWJs
ZSBJQ1UgNC40ICovCi0gICAgVUNIQVJfQ0FTRV9JR05PUkFCTEU9NTAsCi0gICAgLyoqIEJpbmFy
eSBwcm9wZXJ0eSBDaGFuZ2VzX1doZW5fTG93ZXJjYXNlZC4gQHN0YWJsZSBJQ1UgNC40ICovCi0g
ICAgVUNIQVJfQ0hBTkdFU19XSEVOX0xPV0VSQ0FTRUQ9NTEsCi0gICAgLyoqIEJpbmFyeSBwcm9w
ZXJ0eSBDaGFuZ2VzX1doZW5fVXBwZXJjYXNlZC4gQHN0YWJsZSBJQ1UgNC40ICovCi0gICAgVUNI
QVJfQ0hBTkdFU19XSEVOX1VQUEVSQ0FTRUQ9NTIsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBD
aGFuZ2VzX1doZW5fVGl0bGVjYXNlZC4gQHN0YWJsZSBJQ1UgNC40ICovCi0gICAgVUNIQVJfQ0hB
TkdFU19XSEVOX1RJVExFQ0FTRUQ9NTMsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBDaGFuZ2Vz
X1doZW5fQ2FzZWZvbGRlZC4gQHN0YWJsZSBJQ1UgNC40ICovCi0gICAgVUNIQVJfQ0hBTkdFU19X
SEVOX0NBU0VGT0xERUQ9NTQsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBDaGFuZ2VzX1doZW5f
Q2FzZW1hcHBlZC4gQHN0YWJsZSBJQ1UgNC40ICovCi0gICAgVUNIQVJfQ0hBTkdFU19XSEVOX0NB
U0VNQVBQRUQ9NTUsCi0gICAgLyoqIEJpbmFyeSBwcm9wZXJ0eSBDaGFuZ2VzX1doZW5fTkZLQ19D
YXNlZm9sZGVkLiBAc3RhYmxlIElDVSA0LjQgKi8KLSAgICBVQ0hBUl9DSEFOR0VTX1dIRU5fTkZL
Q19DQVNFRk9MREVEPTU2LAotICAgIC8qKiBPbmUgbW9yZSB0aGFuIHRoZSBsYXN0IGNvbnN0YW50
IGZvciBiaW5hcnkgVW5pY29kZSBwcm9wZXJ0aWVzLiBAc3RhYmxlIElDVSAyLjEgKi8KLSAgICBV
Q0hBUl9CSU5BUllfTElNSVQ9NTcsCi0KLSAgICAvKiogRW51bWVyYXRlZCBwcm9wZXJ0eSBCaWRp
X0NsYXNzLgotICAgICAgICBTYW1lIGFzIHVfY2hhckRpcmVjdGlvbiwgcmV0dXJucyBVQ2hhckRp
cmVjdGlvbiB2YWx1ZXMuIEBzdGFibGUgSUNVIDIuMiAqLwotICAgIFVDSEFSX0JJRElfQ0xBU1M9
MHgxMDAwLAotICAgIC8qKiBGaXJzdCBjb25zdGFudCBmb3IgZW51bWVyYXRlZC9pbnRlZ2VyIFVu
aWNvZGUgcHJvcGVydGllcy4gQHN0YWJsZSBJQ1UgMi4yICovCi0gICAgVUNIQVJfSU5UX1NUQVJU
PVVDSEFSX0JJRElfQ0xBU1MsCi0gICAgLyoqIEVudW1lcmF0ZWQgcHJvcGVydHkgQmxvY2suCi0g
ICAgICAgIFNhbWUgYXMgdWJsb2NrX2dldENvZGUsIHJldHVybnMgVUJsb2NrQ29kZSB2YWx1ZXMu
IEBzdGFibGUgSUNVIDIuMiAqLwotICAgIFVDSEFSX0JMT0NLPTB4MTAwMSwKLSAgICAvKiogRW51
bWVyYXRlZCBwcm9wZXJ0eSBDYW5vbmljYWxfQ29tYmluaW5nX0NsYXNzLgotICAgICAgICBTYW1l
IGFzIHVfZ2V0Q29tYmluaW5nQ2xhc3MsIHJldHVybnMgOC1iaXQgbnVtZXJpYyB2YWx1ZXMuIEBz
dGFibGUgSUNVIDIuMiAqLwotICAgIFVDSEFSX0NBTk9OSUNBTF9DT01CSU5JTkdfQ0xBU1M9MHgx
MDAyLAotICAgIC8qKiBFbnVtZXJhdGVkIHByb3BlcnR5IERlY29tcG9zaXRpb25fVHlwZS4KLSAg
ICAgICAgUmV0dXJucyBVRGVjb21wb3NpdGlvblR5cGUgdmFsdWVzLiBAc3RhYmxlIElDVSAyLjIg
Ki8KLSAgICBVQ0hBUl9ERUNPTVBPU0lUSU9OX1RZUEU9MHgxMDAzLAotICAgIC8qKiBFbnVtZXJh
dGVkIHByb3BlcnR5IEVhc3RfQXNpYW5fV2lkdGguCi0gICAgICAgIFNlZSBodHRwOi8vd3d3LnVu
aWNvZGUub3JnL3JlcG9ydHMvdHIxMS8KLSAgICAgICAgUmV0dXJucyBVRWFzdEFzaWFuV2lkdGgg
dmFsdWVzLiBAc3RhYmxlIElDVSAyLjIgKi8KLSAgICBVQ0hBUl9FQVNUX0FTSUFOX1dJRFRIPTB4
MTAwNCwKLSAgICAvKiogRW51bWVyYXRlZCBwcm9wZXJ0eSBHZW5lcmFsX0NhdGVnb3J5LgotICAg
ICAgICBTYW1lIGFzIHVfY2hhclR5cGUsIHJldHVybnMgVUNoYXJDYXRlZ29yeSB2YWx1ZXMuIEBz
dGFibGUgSUNVIDIuMiAqLwotICAgIFVDSEFSX0dFTkVSQUxfQ0FURUdPUlk9MHgxMDA1LAotICAg
IC8qKiBFbnVtZXJhdGVkIHByb3BlcnR5IEpvaW5pbmdfR3JvdXAuCi0gICAgICAgIFJldHVybnMg
VUpvaW5pbmdHcm91cCB2YWx1ZXMuIEBzdGFibGUgSUNVIDIuMiAqLwotICAgIFVDSEFSX0pPSU5J
TkdfR1JPVVA9MHgxMDA2LAotICAgIC8qKiBFbnVtZXJhdGVkIHByb3BlcnR5IEpvaW5pbmdfVHlw
ZS4KLSAgICAgICAgUmV0dXJucyBVSm9pbmluZ1R5cGUgdmFsdWVzLiBAc3RhYmxlIElDVSAyLjIg
Ki8KLSAgICBVQ0hBUl9KT0lOSU5HX1RZUEU9MHgxMDA3LAotICAgIC8qKiBFbnVtZXJhdGVkIHBy
b3BlcnR5IExpbmVfQnJlYWsuCi0gICAgICAgIFJldHVybnMgVUxpbmVCcmVhayB2YWx1ZXMuIEBz
dGFibGUgSUNVIDIuMiAqLwotICAgIFVDSEFSX0xJTkVfQlJFQUs9MHgxMDA4LAotICAgIC8qKiBF
bnVtZXJhdGVkIHByb3BlcnR5IE51bWVyaWNfVHlwZS4KLSAgICAgICAgUmV0dXJucyBVTnVtZXJp
Y1R5cGUgdmFsdWVzLiBAc3RhYmxlIElDVSAyLjIgKi8KLSAgICBVQ0hBUl9OVU1FUklDX1RZUEU9
MHgxMDA5LAotICAgIC8qKiBFbnVtZXJhdGVkIHByb3BlcnR5IFNjcmlwdC4KLSAgICAgICAgU2Ft
ZSBhcyB1c2NyaXB0X2dldFNjcmlwdCwgcmV0dXJucyBVU2NyaXB0Q29kZSB2YWx1ZXMuIEBzdGFi
bGUgSUNVIDIuMiAqLwotICAgIFVDSEFSX1NDUklQVD0weDEwMEEsCi0gICAgLyoqIEVudW1lcmF0
ZWQgcHJvcGVydHkgSGFuZ3VsX1N5bGxhYmxlX1R5cGUsIG5ldyBpbiBVbmljb2RlIDQuCi0gICAg
ICAgIFJldHVybnMgVUhhbmd1bFN5bGxhYmxlVHlwZSB2YWx1ZXMuIEBzdGFibGUgSUNVIDIuNiAq
LwotICAgIFVDSEFSX0hBTkdVTF9TWUxMQUJMRV9UWVBFPTB4MTAwQiwKLSAgICAvKiogRW51bWVy
YXRlZCBwcm9wZXJ0eSBORkRfUXVpY2tfQ2hlY2suCi0gICAgICAgIFJldHVybnMgVU5vcm1hbGl6
YXRpb25DaGVja1Jlc3VsdCB2YWx1ZXMuIEBzdGFibGUgSUNVIDMuMCAqLwotICAgIFVDSEFSX05G
RF9RVUlDS19DSEVDSz0weDEwMEMsCi0gICAgLyoqIEVudW1lcmF0ZWQgcHJvcGVydHkgTkZLRF9R
dWlja19DaGVjay4KLSAgICAgICAgUmV0dXJucyBVTm9ybWFsaXphdGlvbkNoZWNrUmVzdWx0IHZh
bHVlcy4gQHN0YWJsZSBJQ1UgMy4wICovCi0gICAgVUNIQVJfTkZLRF9RVUlDS19DSEVDSz0weDEw
MEQsCi0gICAgLyoqIEVudW1lcmF0ZWQgcHJvcGVydHkgTkZDX1F1aWNrX0NoZWNrLgotICAgICAg
ICBSZXR1cm5zIFVOb3JtYWxpemF0aW9uQ2hlY2tSZXN1bHQgdmFsdWVzLiBAc3RhYmxlIElDVSAz
LjAgKi8KLSAgICBVQ0hBUl9ORkNfUVVJQ0tfQ0hFQ0s9MHgxMDBFLAotICAgIC8qKiBFbnVtZXJh
dGVkIHByb3BlcnR5IE5GS0NfUXVpY2tfQ2hlY2suCi0gICAgICAgIFJldHVybnMgVU5vcm1hbGl6
YXRpb25DaGVja1Jlc3VsdCB2YWx1ZXMuIEBzdGFibGUgSUNVIDMuMCAqLwotICAgIFVDSEFSX05G
S0NfUVVJQ0tfQ0hFQ0s9MHgxMDBGLAotICAgIC8qKiBFbnVtZXJhdGVkIHByb3BlcnR5IExlYWRf
Q2Fub25pY2FsX0NvbWJpbmluZ19DbGFzcy4KLSAgICAgICAgSUNVLXNwZWNpZmljIHByb3BlcnR5
IGZvciB0aGUgY2NjIG9mIHRoZSBmaXJzdCBjb2RlIHBvaW50Ci0gICAgICAgIG9mIHRoZSBkZWNv
bXBvc2l0aW9uLCBvciBsY2NjKGMpPWNjYyhORkQoYylbMF0pLgotICAgICAgICBVc2VmdWwgZm9y
IGNoZWNraW5nIGZvciBjYW5vbmljYWxseSBvcmRlcmVkIHRleHQ7Ci0gICAgICAgIHNlZSBVTk9S
TV9GQ0QgYW5kIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvbm90ZXMvdG41LyNGQ0QgLgotICAgICAg
ICBSZXR1cm5zIDgtYml0IG51bWVyaWMgdmFsdWVzIGxpa2UgVUNIQVJfQ0FOT05JQ0FMX0NPTUJJ
TklOR19DTEFTUy4gQHN0YWJsZSBJQ1UgMy4wICovCi0gICAgVUNIQVJfTEVBRF9DQU5PTklDQUxf
Q09NQklOSU5HX0NMQVNTPTB4MTAxMCwKLSAgICAvKiogRW51bWVyYXRlZCBwcm9wZXJ0eSBUcmFp
bF9DYW5vbmljYWxfQ29tYmluaW5nX0NsYXNzLgotICAgICAgICBJQ1Utc3BlY2lmaWMgcHJvcGVy
dHkgZm9yIHRoZSBjY2Mgb2YgdGhlIGxhc3QgY29kZSBwb2ludAotICAgICAgICBvZiB0aGUgZGVj
b21wb3NpdGlvbiwgb3IgdGNjYyhjKT1jY2MoTkZEKGMpW2xhc3RdKS4KLSAgICAgICAgVXNlZnVs
IGZvciBjaGVja2luZyBmb3IgY2Fub25pY2FsbHkgb3JkZXJlZCB0ZXh0OwotICAgICAgICBzZWUg
VU5PUk1fRkNEIGFuZCBodHRwOi8vd3d3LnVuaWNvZGUub3JnL25vdGVzL3RuNS8jRkNEIC4KLSAg
ICAgICAgUmV0dXJucyA4LWJpdCBudW1lcmljIHZhbHVlcyBsaWtlIFVDSEFSX0NBTk9OSUNBTF9D
T01CSU5JTkdfQ0xBU1MuIEBzdGFibGUgSUNVIDMuMCAqLwotICAgIFVDSEFSX1RSQUlMX0NBTk9O
SUNBTF9DT01CSU5JTkdfQ0xBU1M9MHgxMDExLAotICAgIC8qKiBFbnVtZXJhdGVkIHByb3BlcnR5
IEdyYXBoZW1lX0NsdXN0ZXJfQnJlYWsgKG5ldyBpbiBVbmljb2RlIDQuMSkuCi0gICAgICAgIFVz
ZWQgaW4gVUFYICMyOTogVGV4dCBCb3VuZGFyaWVzCi0gICAgICAgIChodHRwOi8vd3d3LnVuaWNv
ZGUub3JnL3JlcG9ydHMvdHIyOS8pCi0gICAgICAgIFJldHVybnMgVUdyYXBoZW1lQ2x1c3RlckJy
ZWFrIHZhbHVlcy4gQHN0YWJsZSBJQ1UgMy40ICovCi0gICAgVUNIQVJfR1JBUEhFTUVfQ0xVU1RF
Ul9CUkVBSz0weDEwMTIsCi0gICAgLyoqIEVudW1lcmF0ZWQgcHJvcGVydHkgU2VudGVuY2VfQnJl
YWsgKG5ldyBpbiBVbmljb2RlIDQuMSkuCi0gICAgICAgIFVzZWQgaW4gVUFYICMyOTogVGV4dCBC
b3VuZGFyaWVzCi0gICAgICAgIChodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIyOS8p
Ci0gICAgICAgIFJldHVybnMgVVNlbnRlbmNlQnJlYWsgdmFsdWVzLiBAc3RhYmxlIElDVSAzLjQg
Ki8KLSAgICBVQ0hBUl9TRU5URU5DRV9CUkVBSz0weDEwMTMsCi0gICAgLyoqIEVudW1lcmF0ZWQg
cHJvcGVydHkgV29yZF9CcmVhayAobmV3IGluIFVuaWNvZGUgNC4xKS4KLSAgICAgICAgVXNlZCBp
biBVQVggIzI5OiBUZXh0IEJvdW5kYXJpZXMKLSAgICAgICAgKGh0dHA6Ly93d3cudW5pY29kZS5v
cmcvcmVwb3J0cy90cjI5LykKLSAgICAgICAgUmV0dXJucyBVV29yZEJyZWFrVmFsdWVzIHZhbHVl
cy4gQHN0YWJsZSBJQ1UgMy40ICovCi0gICAgVUNIQVJfV09SRF9CUkVBSz0weDEwMTQsCi0gICAg
LyoqIEVudW1lcmF0ZWQgcHJvcGVydHkgQmlkaV9QYWlyZWRfQnJhY2tldF9UeXBlIChuZXcgaW4g
VW5pY29kZSA2LjMpLgotICAgICAgICBVc2VkIGluIFVBWCAjOTogVW5pY29kZSBCaWRpcmVjdGlv
bmFsIEFsZ29yaXRobQotICAgICAgICAoaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3Ry
OS8pCi0gICAgICAgIFJldHVybnMgVUJpZGlQYWlyZWRCcmFja2V0VHlwZSB2YWx1ZXMuIEBzdGFi
bGUgSUNVIDUyICovCi0gICAgVUNIQVJfQklESV9QQUlSRURfQlJBQ0tFVF9UWVBFPTB4MTAxNSwK
LSAgICAvKiogT25lIG1vcmUgdGhhbiB0aGUgbGFzdCBjb25zdGFudCBmb3IgZW51bWVyYXRlZC9p
bnRlZ2VyIFVuaWNvZGUgcHJvcGVydGllcy4gQHN0YWJsZSBJQ1UgMi4yICovCi0gICAgVUNIQVJf
SU5UX0xJTUlUPTB4MTAxNiwKLQotICAgIC8qKiBCaXRtYXNrIHByb3BlcnR5IEdlbmVyYWxfQ2F0
ZWdvcnlfTWFzay4KLSAgICAgICAgVGhpcyBpcyB0aGUgR2VuZXJhbF9DYXRlZ29yeSBwcm9wZXJ0
eSByZXR1cm5lZCBhcyBhIGJpdCBtYXNrLgotICAgICAgICBXaGVuIHVzZWQgaW4gdV9nZXRJbnRQ
cm9wZXJ0eVZhbHVlKGMpLCBzYW1lIGFzIFVfTUFTSyh1X2NoYXJUeXBlKGMpKSwKLSAgICAgICAg
cmV0dXJucyBiaXQgbWFza3MgZm9yIFVDaGFyQ2F0ZWdvcnkgdmFsdWVzIHdoZXJlIGV4YWN0bHkg
b25lIGJpdCBpcyBzZXQuCi0gICAgICAgIFdoZW4gdXNlZCB3aXRoIHVfZ2V0UHJvcGVydHlWYWx1
ZU5hbWUoKSBhbmQgdV9nZXRQcm9wZXJ0eVZhbHVlRW51bSgpLAotICAgICAgICBhIG11bHRpLWJp
dCBtYXNrIGlzIHVzZWQgZm9yIHNldHMgb2YgY2F0ZWdvcmllcyBsaWtlICJMZXR0ZXJzIi4KLSAg
ICAgICAgTWFzayB2YWx1ZXMgc2hvdWxkIGJlIGNhc3QgdG8gdWludDMyX3QuCi0gICAgICAgIEBz
dGFibGUgSUNVIDIuNCAqLwotICAgIFVDSEFSX0dFTkVSQUxfQ0FURUdPUllfTUFTSz0weDIwMDAs
Ci0gICAgLyoqIEZpcnN0IGNvbnN0YW50IGZvciBiaXQtbWFzayBVbmljb2RlIHByb3BlcnRpZXMu
IEBzdGFibGUgSUNVIDIuNCAqLwotICAgIFVDSEFSX01BU0tfU1RBUlQ9VUNIQVJfR0VORVJBTF9D
QVRFR09SWV9NQVNLLAotICAgIC8qKiBPbmUgbW9yZSB0aGFuIHRoZSBsYXN0IGNvbnN0YW50IGZv
ciBiaXQtbWFzayBVbmljb2RlIHByb3BlcnRpZXMuIEBzdGFibGUgSUNVIDIuNCAqLwotICAgIFVD
SEFSX01BU0tfTElNSVQ9MHgyMDAxLAotCi0gICAgLyoqIERvdWJsZSBwcm9wZXJ0eSBOdW1lcmlj
X1ZhbHVlLgotICAgICAgICBDb3JyZXNwb25kcyB0byB1X2dldE51bWVyaWNWYWx1ZS4gQHN0YWJs
ZSBJQ1UgMi40ICovCi0gICAgVUNIQVJfTlVNRVJJQ19WQUxVRT0weDMwMDAsCi0gICAgLyoqIEZp
cnN0IGNvbnN0YW50IGZvciBkb3VibGUgVW5pY29kZSBwcm9wZXJ0aWVzLiBAc3RhYmxlIElDVSAy
LjQgKi8KLSAgICBVQ0hBUl9ET1VCTEVfU1RBUlQ9VUNIQVJfTlVNRVJJQ19WQUxVRSwKLSAgICAv
KiogT25lIG1vcmUgdGhhbiB0aGUgbGFzdCBjb25zdGFudCBmb3IgZG91YmxlIFVuaWNvZGUgcHJv
cGVydGllcy4gQHN0YWJsZSBJQ1UgMi40ICovCi0gICAgVUNIQVJfRE9VQkxFX0xJTUlUPTB4MzAw
MSwKLQotICAgIC8qKiBTdHJpbmcgcHJvcGVydHkgQWdlLgotICAgICAgICBDb3JyZXNwb25kcyB0
byB1X2NoYXJBZ2UuIEBzdGFibGUgSUNVIDIuNCAqLwotICAgIFVDSEFSX0FHRT0weDQwMDAsCi0g
ICAgLyoqIEZpcnN0IGNvbnN0YW50IGZvciBzdHJpbmcgVW5pY29kZSBwcm9wZXJ0aWVzLiBAc3Rh
YmxlIElDVSAyLjQgKi8KLSAgICBVQ0hBUl9TVFJJTkdfU1RBUlQ9VUNIQVJfQUdFLAotICAgIC8q
KiBTdHJpbmcgcHJvcGVydHkgQmlkaV9NaXJyb3JpbmdfR2x5cGguCi0gICAgICAgIENvcnJlc3Bv
bmRzIHRvIHVfY2hhck1pcnJvci4gQHN0YWJsZSBJQ1UgMi40ICovCi0gICAgVUNIQVJfQklESV9N
SVJST1JJTkdfR0xZUEg9MHg0MDAxLAotICAgIC8qKiBTdHJpbmcgcHJvcGVydHkgQ2FzZV9Gb2xk
aW5nLgotICAgICAgICBDb3JyZXNwb25kcyB0byB1X3N0ckZvbGRDYXNlIGluIHVzdHJpbmcuaC4g
QHN0YWJsZSBJQ1UgMi40ICovCi0gICAgVUNIQVJfQ0FTRV9GT0xESU5HPTB4NDAwMiwKLSNpZm5k
ZWYgVV9ISURFX0RFUFJFQ0FURURfQVBJCi0gICAgLyoqIERlcHJlY2F0ZWQgc3RyaW5nIHByb3Bl
cnR5IElTT19Db21tZW50LgotICAgICAgICBDb3JyZXNwb25kcyB0byB1X2dldElTT0NvbW1lbnQu
IEBkZXByZWNhdGVkIElDVSA0OSAqLwotICAgIFVDSEFSX0lTT19DT01NRU5UPTB4NDAwMywKLSNl
bmRpZiAgLyogVV9ISURFX0RFUFJFQ0FURURfQVBJICovCi0gICAgLyoqIFN0cmluZyBwcm9wZXJ0
eSBMb3dlcmNhc2VfTWFwcGluZy4KLSAgICAgICAgQ29ycmVzcG9uZHMgdG8gdV9zdHJUb0xvd2Vy
IGluIHVzdHJpbmcuaC4gQHN0YWJsZSBJQ1UgMi40ICovCi0gICAgVUNIQVJfTE9XRVJDQVNFX01B
UFBJTkc9MHg0MDA0LAotICAgIC8qKiBTdHJpbmcgcHJvcGVydHkgTmFtZS4KLSAgICAgICAgQ29y
cmVzcG9uZHMgdG8gdV9jaGFyTmFtZS4gQHN0YWJsZSBJQ1UgMi40ICovCi0gICAgVUNIQVJfTkFN
RT0weDQwMDUsCi0gICAgLyoqIFN0cmluZyBwcm9wZXJ0eSBTaW1wbGVfQ2FzZV9Gb2xkaW5nLgot
ICAgICAgICBDb3JyZXNwb25kcyB0byB1X2ZvbGRDYXNlLiBAc3RhYmxlIElDVSAyLjQgKi8KLSAg
ICBVQ0hBUl9TSU1QTEVfQ0FTRV9GT0xESU5HPTB4NDAwNiwKLSAgICAvKiogU3RyaW5nIHByb3Bl
cnR5IFNpbXBsZV9Mb3dlcmNhc2VfTWFwcGluZy4KLSAgICAgICAgQ29ycmVzcG9uZHMgdG8gdV90
b2xvd2VyLiBAc3RhYmxlIElDVSAyLjQgKi8KLSAgICBVQ0hBUl9TSU1QTEVfTE9XRVJDQVNFX01B
UFBJTkc9MHg0MDA3LAotICAgIC8qKiBTdHJpbmcgcHJvcGVydHkgU2ltcGxlX1RpdGxlY2FzZV9N
YXBwaW5nLgotICAgICAgICBDb3JyZXNwb25kcyB0byB1X3RvdGl0bGUuIEBzdGFibGUgSUNVIDIu
NCAqLwotICAgIFVDSEFSX1NJTVBMRV9USVRMRUNBU0VfTUFQUElORz0weDQwMDgsCi0gICAgLyoq
IFN0cmluZyBwcm9wZXJ0eSBTaW1wbGVfVXBwZXJjYXNlX01hcHBpbmcuCi0gICAgICAgIENvcnJl
c3BvbmRzIHRvIHVfdG91cHBlci4gQHN0YWJsZSBJQ1UgMi40ICovCi0gICAgVUNIQVJfU0lNUExF
X1VQUEVSQ0FTRV9NQVBQSU5HPTB4NDAwOSwKLSAgICAvKiogU3RyaW5nIHByb3BlcnR5IFRpdGxl
Y2FzZV9NYXBwaW5nLgotICAgICAgICBDb3JyZXNwb25kcyB0byB1X3N0clRvVGl0bGUgaW4gdXN0
cmluZy5oLiBAc3RhYmxlIElDVSAyLjQgKi8KLSAgICBVQ0hBUl9USVRMRUNBU0VfTUFQUElORz0w
eDQwMEEsCi0jaWZuZGVmIFVfSElERV9ERVBSRUNBVEVEX0FQSQotICAgIC8qKiBTdHJpbmcgcHJv
cGVydHkgVW5pY29kZV8xX05hbWUuCi0gICAgICAgIFRoaXMgcHJvcGVydHkgaXMgb2YgbGl0dGxl
IHByYWN0aWNhbCB2YWx1ZS4KLSAgICAgICAgQmVnaW5uaW5nIHdpdGggSUNVIDQ5LCBJQ1UgQVBJ
cyByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGZvciB0aGlzIHByb3BlcnR5LgotICAgICAgICBDb3Jy
ZXNwb25kcyB0byB1X2NoYXJOYW1lKFVfVU5JQ09ERV8xMF9DSEFSX05BTUUpLiBAZGVwcmVjYXRl
ZCBJQ1UgNDkgKi8KLSAgICBVQ0hBUl9VTklDT0RFXzFfTkFNRT0weDQwMEIsCi0jZW5kaWYgIC8q
IFVfSElERV9ERVBSRUNBVEVEX0FQSSAqLwotICAgIC8qKiBTdHJpbmcgcHJvcGVydHkgVXBwZXJj
YXNlX01hcHBpbmcuCi0gICAgICAgIENvcnJlc3BvbmRzIHRvIHVfc3RyVG9VcHBlciBpbiB1c3Ry
aW5nLmguIEBzdGFibGUgSUNVIDIuNCAqLwotICAgIFVDSEFSX1VQUEVSQ0FTRV9NQVBQSU5HPTB4
NDAwQywKLSAgICAvKiogU3RyaW5nIHByb3BlcnR5IEJpZGlfUGFpcmVkX0JyYWNrZXQgKG5ldyBp
biBVbmljb2RlIDYuMykuCi0gICAgICAgIENvcnJlc3BvbmRzIHRvIHVfZ2V0QmlkaVBhaXJlZEJy
YWNrZXQuIEBzdGFibGUgSUNVIDUyICovCi0gICAgVUNIQVJfQklESV9QQUlSRURfQlJBQ0tFVD0w
eDQwMEQsCi0gICAgLyoqIE9uZSBtb3JlIHRoYW4gdGhlIGxhc3QgY29uc3RhbnQgZm9yIHN0cmlu
ZyBVbmljb2RlIHByb3BlcnRpZXMuIEBzdGFibGUgSUNVIDIuNCAqLwotICAgIFVDSEFSX1NUUklO
R19MSU1JVD0weDQwMEUsCi0KLSAgICAvKiogTWlzY2VsbGFuZW91cyBwcm9wZXJ0eSBTY3JpcHRf
RXh0ZW5zaW9ucyAobmV3IGluIFVuaWNvZGUgNi4wKS4KLSAgICAgICAgU29tZSBjaGFyYWN0ZXJz
IGFyZSBjb21tb25seSB1c2VkIGluIG11bHRpcGxlIHNjcmlwdHMuCi0gICAgICAgIEZvciBtb3Jl
IGluZm9ybWF0aW9uLCBzZWUgVUFYICMyNDogaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRz
L3RyMjQvLgotICAgICAgICBDb3JyZXNwb25kcyB0byB1c2NyaXB0X2hhc1NjcmlwdCBhbmQgdXNj
cmlwdF9nZXRTY3JpcHRFeHRlbnNpb25zIGluIHVzY3JpcHQuaC4KLSAgICAgICAgQHN0YWJsZSBJ
Q1UgNC42ICovCi0gICAgVUNIQVJfU0NSSVBUX0VYVEVOU0lPTlM9MHg3MDAwLAotICAgIC8qKiBG
aXJzdCBjb25zdGFudCBmb3IgVW5pY29kZSBwcm9wZXJ0aWVzIHdpdGggdW51c3VhbCB2YWx1ZSB0
eXBlcy4gQHN0YWJsZSBJQ1UgNC42ICovCi0gICAgVUNIQVJfT1RIRVJfUFJPUEVSVFlfU1RBUlQ9
VUNIQVJfU0NSSVBUX0VYVEVOU0lPTlMsCi0gICAgLyoqIE9uZSBtb3JlIHRoYW4gdGhlIGxhc3Qg
Y29uc3RhbnQgZm9yIFVuaWNvZGUgcHJvcGVydGllcyB3aXRoIHVudXN1YWwgdmFsdWUgdHlwZXMu
Ci0gICAgICogQHN0YWJsZSBJQ1UgNC42ICovCi0gICAgVUNIQVJfT1RIRVJfUFJPUEVSVFlfTElN
SVQ9MHg3MDAxLAotICAgIC8qKiBSZXByZXNlbnRzIGEgbm9uZXhpc3RlbnQgb3IgaW52YWxpZCBw
cm9wZXJ0eSBvciBwcm9wZXJ0eSB2YWx1ZS4gQHN0YWJsZSBJQ1UgMi40ICovCi0gICAgVUNIQVJf
SU5WQUxJRF9DT0RFID0gLTEKLX0gVVByb3BlcnR5OwotCi0vKioKLSAqIERhdGEgZm9yIGVudW1l
cmF0ZWQgVW5pY29kZSBnZW5lcmFsIGNhdGVnb3J5IHR5cGVzLgotICogU2VlIGh0dHA6Ly93d3cu
dW5pY29kZS5vcmcvUHVibGljL1VOSURBVEEvVW5pY29kZURhdGEuaHRtbCAuCi0gKiBAc3RhYmxl
IElDVSAyLjAKLSAqLwotdHlwZWRlZiBlbnVtIFVDaGFyQ2F0ZWdvcnkKLXsKLSAgICAvKgotICAg
ICAqIE5vdGU6IFVDaGFyQ2F0ZWdvcnkgY29uc3RhbnRzIGFuZCB0aGVpciBBUEkgY29tbWVudHMg
YXJlIHBhcnNlZCBieSBwcmVwYXJzZXVjZC5weS4KLSAgICAgKiBJdCBtYXRjaGVzIHBhaXJzIG9m
IGxpbmVzIGxpa2UKLSAgICAgKiAgICAgLyAqKiA8VW5pY29kZSAyLWxldHRlciBHZW5lcmFsX0Nh
dGVnb3J5IHZhbHVlPiBjb21tZW50Li4uICogLwotICAgICAqICAgICBVXzxbQS1aX10rPiA9IDxp
bnRlZ2VyPiwKLSAgICAgKi8KLQotICAgIC8qKiBOb24tY2F0ZWdvcnkgZm9yIHVuYXNzaWduZWQg
YW5kIG5vbi1jaGFyYWN0ZXIgY29kZSBwb2ludHMuIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVf
VU5BU1NJR05FRCAgICAgICAgICAgICAgPSAwLAotICAgIC8qKiBDbiAiT3RoZXIsIE5vdCBBc3Np
Z25lZCAobm8gY2hhcmFjdGVycyBpbiBbVW5pY29kZURhdGEudHh0XSBoYXZlIHRoaXMgcHJvcGVy
dHkpIiAoc2FtZSBhcyBVX1VOQVNTSUdORUQhKSBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVX0dF
TkVSQUxfT1RIRVJfVFlQRVMgICAgID0gMCwKLSAgICAvKiogTHUgQHN0YWJsZSBJQ1UgMi4wICov
Ci0gICAgVV9VUFBFUkNBU0VfTEVUVEVSICAgICAgICA9IDEsCi0gICAgLyoqIExsIEBzdGFibGUg
SUNVIDIuMCAqLwotICAgIFVfTE9XRVJDQVNFX0xFVFRFUiAgICAgICAgPSAyLAotICAgIC8qKiBM
dCBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVX1RJVExFQ0FTRV9MRVRURVIgICAgICAgID0gMywK
LSAgICAvKiogTG0gQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVV9NT0RJRklFUl9MRVRURVIgICAg
ICAgICA9IDQsCi0gICAgLyoqIExvIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVfT1RIRVJfTEVU
VEVSICAgICAgICAgICAgPSA1LAotICAgIC8qKiBNbiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBV
X05PTl9TUEFDSU5HX01BUksgICAgICAgID0gNiwKLSAgICAvKiogTWUgQHN0YWJsZSBJQ1UgMi4w
ICovCi0gICAgVV9FTkNMT1NJTkdfTUFSSyAgICAgICAgICA9IDcsCi0gICAgLyoqIE1jIEBzdGFi
bGUgSUNVIDIuMCAqLwotICAgIFVfQ09NQklOSU5HX1NQQUNJTkdfTUFSSyAgPSA4LAotICAgIC8q
KiBOZCBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVX0RFQ0lNQUxfRElHSVRfTlVNQkVSICAgID0g
OSwKLSAgICAvKiogTmwgQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVV9MRVRURVJfTlVNQkVSICAg
ICAgICAgICA9IDEwLAotICAgIC8qKiBObyBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVX09USEVS
X05VTUJFUiAgICAgICAgICAgID0gMTEsCi0gICAgLyoqIFpzIEBzdGFibGUgSUNVIDIuMCAqLwot
ICAgIFVfU1BBQ0VfU0VQQVJBVE9SICAgICAgICAgPSAxMiwKLSAgICAvKiogWmwgQHN0YWJsZSBJ
Q1UgMi4wICovCi0gICAgVV9MSU5FX1NFUEFSQVRPUiAgICAgICAgICA9IDEzLAotICAgIC8qKiBa
cCBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVX1BBUkFHUkFQSF9TRVBBUkFUT1IgICAgID0gMTQs
Ci0gICAgLyoqIENjIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVfQ09OVFJPTF9DSEFSICAgICAg
ICAgICAgPSAxNSwKLSAgICAvKiogQ2YgQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVV9GT1JNQVRf
Q0hBUiAgICAgICAgICAgICA9IDE2LAotICAgIC8qKiBDbyBAc3RhYmxlIElDVSAyLjAgKi8KLSAg
ICBVX1BSSVZBVEVfVVNFX0NIQVIgICAgICAgID0gMTcsCi0gICAgLyoqIENzIEBzdGFibGUgSUNV
IDIuMCAqLwotICAgIFVfU1VSUk9HQVRFICAgICAgICAgICAgICAgPSAxOCwKLSAgICAvKiogUGQg
QHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVV9EQVNIX1BVTkNUVUFUSU9OICAgICAgICA9IDE5LAot
ICAgIC8qKiBQcyBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVX1NUQVJUX1BVTkNUVUFUSU9OICAg
ICAgID0gMjAsCi0gICAgLyoqIFBlIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVfRU5EX1BVTkNU
VUFUSU9OICAgICAgICAgPSAyMSwKLSAgICAvKiogUGMgQHN0YWJsZSBJQ1UgMi4wICovCi0gICAg
VV9DT05ORUNUT1JfUFVOQ1RVQVRJT04gICA9IDIyLAotICAgIC8qKiBQbyBAc3RhYmxlIElDVSAy
LjAgKi8KLSAgICBVX09USEVSX1BVTkNUVUFUSU9OICAgICAgID0gMjMsCi0gICAgLyoqIFNtIEBz
dGFibGUgSUNVIDIuMCAqLwotICAgIFVfTUFUSF9TWU1CT0wgICAgICAgICAgICAgPSAyNCwKLSAg
ICAvKiogU2MgQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVV9DVVJSRU5DWV9TWU1CT0wgICAgICAg
ICA9IDI1LAotICAgIC8qKiBTayBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVX01PRElGSUVSX1NZ
TUJPTCAgICAgICAgID0gMjYsCi0gICAgLyoqIFNvIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVf
T1RIRVJfU1lNQk9MICAgICAgICAgICAgPSAyNywKLSAgICAvKiogUGkgQHN0YWJsZSBJQ1UgMi4w
ICovCi0gICAgVV9JTklUSUFMX1BVTkNUVUFUSU9OICAgICA9IDI4LAotICAgIC8qKiBQZiBAc3Rh
YmxlIElDVSAyLjAgKi8KLSAgICBVX0ZJTkFMX1BVTkNUVUFUSU9OICAgICAgID0gMjksCi0gICAg
LyoqIE9uZSBoaWdoZXIgdGhhbiB0aGUgbGFzdCBlbnVtIFVDaGFyQ2F0ZWdvcnkgY29uc3RhbnQu
IEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVfQ0hBUl9DQVRFR09SWV9DT1VOVAotfSBVQ2hhckNh
dGVnb3J5OwotCi0vKioKLSAqIFVfR0NfWFhfTUFTSyBjb25zdGFudHMgYXJlIGJpdCBmbGFncyBj
b3JyZXNwb25kaW5nIHRvIFVuaWNvZGUKLSAqIGdlbmVyYWwgY2F0ZWdvcnkgdmFsdWVzLgotICog
Rm9yIGVhY2ggY2F0ZWdvcnksIHRoZSBudGggYml0IGlzIHNldCBpZiB0aGUgbnVtZXJpYyB2YWx1
ZSBvZiB0aGUKLSAqIGNvcnJlc3BvbmRpbmcgVUNoYXJDYXRlZ29yeSBjb25zdGFudCBpcyBuLgot
ICoKLSAqIFRoZXJlIGFyZSBhbHNvIHNvbWUgVV9HQ19ZX01BU0sgY29uc3RhbnRzIGZvciBncm91
cHMgb2YgZ2VuZXJhbCBjYXRlZ29yaWVzCi0gKiBsaWtlIEwgZm9yIGFsbCBsZXR0ZXIgY2F0ZWdv
cmllcy4KLSAqCi0gKiBAc2VlIHVfY2hhclR5cGUKLSAqIEBzZWUgVV9HRVRfR0NfTUFTSwotICog
QHNlZSBVQ2hhckNhdGVnb3J5Ci0gKiBAc3RhYmxlIElDVSAyLjEKLSAqLwotI2RlZmluZSBVX0dD
X0NOX01BU0sgICAgVV9NQVNLKFVfR0VORVJBTF9PVEhFUl9UWVBFUykKLQotLyoqIE1hc2sgY29u
c3RhbnQgZm9yIGEgVUNoYXJDYXRlZ29yeS4gQHN0YWJsZSBJQ1UgMi4xICovCi0jZGVmaW5lIFVf
R0NfTFVfTUFTSyAgICBVX01BU0soVV9VUFBFUkNBU0VfTEVUVEVSKQotLyoqIE1hc2sgY29uc3Rh
bnQgZm9yIGEgVUNoYXJDYXRlZ29yeS4gQHN0YWJsZSBJQ1UgMi4xICovCi0jZGVmaW5lIFVfR0Nf
TExfTUFTSyAgICBVX01BU0soVV9MT1dFUkNBU0VfTEVUVEVSKQotLyoqIE1hc2sgY29uc3RhbnQg
Zm9yIGEgVUNoYXJDYXRlZ29yeS4gQHN0YWJsZSBJQ1UgMi4xICovCi0jZGVmaW5lIFVfR0NfTFRf
TUFTSyAgICBVX01BU0soVV9USVRMRUNBU0VfTEVUVEVSKQotLyoqIE1hc2sgY29uc3RhbnQgZm9y
IGEgVUNoYXJDYXRlZ29yeS4gQHN0YWJsZSBJQ1UgMi4xICovCi0jZGVmaW5lIFVfR0NfTE1fTUFT
SyAgICBVX01BU0soVV9NT0RJRklFUl9MRVRURVIpCi0vKiogTWFzayBjb25zdGFudCBmb3IgYSBV
Q2hhckNhdGVnb3J5LiBAc3RhYmxlIElDVSAyLjEgKi8KLSNkZWZpbmUgVV9HQ19MT19NQVNLICAg
IFVfTUFTSyhVX09USEVSX0xFVFRFUikKLQotLyoqIE1hc2sgY29uc3RhbnQgZm9yIGEgVUNoYXJD
YXRlZ29yeS4gQHN0YWJsZSBJQ1UgMi4xICovCi0jZGVmaW5lIFVfR0NfTU5fTUFTSyAgICBVX01B
U0soVV9OT05fU1BBQ0lOR19NQVJLKQotLyoqIE1hc2sgY29uc3RhbnQgZm9yIGEgVUNoYXJDYXRl
Z29yeS4gQHN0YWJsZSBJQ1UgMi4xICovCi0jZGVmaW5lIFVfR0NfTUVfTUFTSyAgICBVX01BU0so
VV9FTkNMT1NJTkdfTUFSSykKLS8qKiBNYXNrIGNvbnN0YW50IGZvciBhIFVDaGFyQ2F0ZWdvcnku
IEBzdGFibGUgSUNVIDIuMSAqLwotI2RlZmluZSBVX0dDX01DX01BU0sgICAgVV9NQVNLKFVfQ09N
QklOSU5HX1NQQUNJTkdfTUFSSykKLQotLyoqIE1hc2sgY29uc3RhbnQgZm9yIGEgVUNoYXJDYXRl
Z29yeS4gQHN0YWJsZSBJQ1UgMi4xICovCi0jZGVmaW5lIFVfR0NfTkRfTUFTSyAgICBVX01BU0so
VV9ERUNJTUFMX0RJR0lUX05VTUJFUikKLS8qKiBNYXNrIGNvbnN0YW50IGZvciBhIFVDaGFyQ2F0
ZWdvcnkuIEBzdGFibGUgSUNVIDIuMSAqLwotI2RlZmluZSBVX0dDX05MX01BU0sgICAgVV9NQVNL
KFVfTEVUVEVSX05VTUJFUikKLS8qKiBNYXNrIGNvbnN0YW50IGZvciBhIFVDaGFyQ2F0ZWdvcnku
IEBzdGFibGUgSUNVIDIuMSAqLwotI2RlZmluZSBVX0dDX05PX01BU0sgICAgVV9NQVNLKFVfT1RI
RVJfTlVNQkVSKQotCi0vKiogTWFzayBjb25zdGFudCBmb3IgYSBVQ2hhckNhdGVnb3J5LiBAc3Rh
YmxlIElDVSAyLjEgKi8KLSNkZWZpbmUgVV9HQ19aU19NQVNLICAgIFVfTUFTSyhVX1NQQUNFX1NF
UEFSQVRPUikKLS8qKiBNYXNrIGNvbnN0YW50IGZvciBhIFVDaGFyQ2F0ZWdvcnkuIEBzdGFibGUg
SUNVIDIuMSAqLwotI2RlZmluZSBVX0dDX1pMX01BU0sgICAgVV9NQVNLKFVfTElORV9TRVBBUkFU
T1IpCi0vKiogTWFzayBjb25zdGFudCBmb3IgYSBVQ2hhckNhdGVnb3J5LiBAc3RhYmxlIElDVSAy
LjEgKi8KLSNkZWZpbmUgVV9HQ19aUF9NQVNLICAgIFVfTUFTSyhVX1BBUkFHUkFQSF9TRVBBUkFU
T1IpCi0KLS8qKiBNYXNrIGNvbnN0YW50IGZvciBhIFVDaGFyQ2F0ZWdvcnkuIEBzdGFibGUgSUNV
IDIuMSAqLwotI2RlZmluZSBVX0dDX0NDX01BU0sgICAgVV9NQVNLKFVfQ09OVFJPTF9DSEFSKQot
LyoqIE1hc2sgY29uc3RhbnQgZm9yIGEgVUNoYXJDYXRlZ29yeS4gQHN0YWJsZSBJQ1UgMi4xICov
Ci0jZGVmaW5lIFVfR0NfQ0ZfTUFTSyAgICBVX01BU0soVV9GT1JNQVRfQ0hBUikKLS8qKiBNYXNr
IGNvbnN0YW50IGZvciBhIFVDaGFyQ2F0ZWdvcnkuIEBzdGFibGUgSUNVIDIuMSAqLwotI2RlZmlu
ZSBVX0dDX0NPX01BU0sgICAgVV9NQVNLKFVfUFJJVkFURV9VU0VfQ0hBUikKLS8qKiBNYXNrIGNv
bnN0YW50IGZvciBhIFVDaGFyQ2F0ZWdvcnkuIEBzdGFibGUgSUNVIDIuMSAqLwotI2RlZmluZSBV
X0dDX0NTX01BU0sgICAgVV9NQVNLKFVfU1VSUk9HQVRFKQotCi0vKiogTWFzayBjb25zdGFudCBm
b3IgYSBVQ2hhckNhdGVnb3J5LiBAc3RhYmxlIElDVSAyLjEgKi8KLSNkZWZpbmUgVV9HQ19QRF9N
QVNLICAgIFVfTUFTSyhVX0RBU0hfUFVOQ1RVQVRJT04pCi0vKiogTWFzayBjb25zdGFudCBmb3Ig
YSBVQ2hhckNhdGVnb3J5LiBAc3RhYmxlIElDVSAyLjEgKi8KLSNkZWZpbmUgVV9HQ19QU19NQVNL
ICAgIFVfTUFTSyhVX1NUQVJUX1BVTkNUVUFUSU9OKQotLyoqIE1hc2sgY29uc3RhbnQgZm9yIGEg
VUNoYXJDYXRlZ29yeS4gQHN0YWJsZSBJQ1UgMi4xICovCi0jZGVmaW5lIFVfR0NfUEVfTUFTSyAg
ICBVX01BU0soVV9FTkRfUFVOQ1RVQVRJT04pCi0vKiogTWFzayBjb25zdGFudCBmb3IgYSBVQ2hh
ckNhdGVnb3J5LiBAc3RhYmxlIElDVSAyLjEgKi8KLSNkZWZpbmUgVV9HQ19QQ19NQVNLICAgIFVf
TUFTSyhVX0NPTk5FQ1RPUl9QVU5DVFVBVElPTikKLS8qKiBNYXNrIGNvbnN0YW50IGZvciBhIFVD
aGFyQ2F0ZWdvcnkuIEBzdGFibGUgSUNVIDIuMSAqLwotI2RlZmluZSBVX0dDX1BPX01BU0sgICAg
VV9NQVNLKFVfT1RIRVJfUFVOQ1RVQVRJT04pCi0KLS8qKiBNYXNrIGNvbnN0YW50IGZvciBhIFVD
aGFyQ2F0ZWdvcnkuIEBzdGFibGUgSUNVIDIuMSAqLwotI2RlZmluZSBVX0dDX1NNX01BU0sgICAg
VV9NQVNLKFVfTUFUSF9TWU1CT0wpCi0vKiogTWFzayBjb25zdGFudCBmb3IgYSBVQ2hhckNhdGVn
b3J5LiBAc3RhYmxlIElDVSAyLjEgKi8KLSNkZWZpbmUgVV9HQ19TQ19NQVNLICAgIFVfTUFTSyhV
X0NVUlJFTkNZX1NZTUJPTCkKLS8qKiBNYXNrIGNvbnN0YW50IGZvciBhIFVDaGFyQ2F0ZWdvcnku
IEBzdGFibGUgSUNVIDIuMSAqLwotI2RlZmluZSBVX0dDX1NLX01BU0sgICAgVV9NQVNLKFVfTU9E
SUZJRVJfU1lNQk9MKQotLyoqIE1hc2sgY29uc3RhbnQgZm9yIGEgVUNoYXJDYXRlZ29yeS4gQHN0
YWJsZSBJQ1UgMi4xICovCi0jZGVmaW5lIFVfR0NfU09fTUFTSyAgICBVX01BU0soVV9PVEhFUl9T
WU1CT0wpCi0KLS8qKiBNYXNrIGNvbnN0YW50IGZvciBhIFVDaGFyQ2F0ZWdvcnkuIEBzdGFibGUg
SUNVIDIuMSAqLwotI2RlZmluZSBVX0dDX1BJX01BU0sgICAgVV9NQVNLKFVfSU5JVElBTF9QVU5D
VFVBVElPTikKLS8qKiBNYXNrIGNvbnN0YW50IGZvciBhIFVDaGFyQ2F0ZWdvcnkuIEBzdGFibGUg
SUNVIDIuMSAqLwotI2RlZmluZSBVX0dDX1BGX01BU0sgICAgVV9NQVNLKFVfRklOQUxfUFVOQ1RV
QVRJT04pCi0KLQotLyoqIE1hc2sgY29uc3RhbnQgZm9yIG11bHRpcGxlIFVDaGFyQ2F0ZWdvcnkg
Yml0cyAoTCBMZXR0ZXJzKS4gQHN0YWJsZSBJQ1UgMi4xICovCi0jZGVmaW5lIFVfR0NfTF9NQVNL
IFwKLSAgICAgICAgICAgIChVX0dDX0xVX01BU0t8VV9HQ19MTF9NQVNLfFVfR0NfTFRfTUFTS3xV
X0dDX0xNX01BU0t8VV9HQ19MT19NQVNLKQotCi0vKiogTWFzayBjb25zdGFudCBmb3IgbXVsdGlw
bGUgVUNoYXJDYXRlZ29yeSBiaXRzIChMQyBDYXNlZCBMZXR0ZXJzKS4gQHN0YWJsZSBJQ1UgMi4x
ICovCi0jZGVmaW5lIFVfR0NfTENfTUFTSyBcCi0gICAgICAgICAgICAoVV9HQ19MVV9NQVNLfFVf
R0NfTExfTUFTS3xVX0dDX0xUX01BU0spCi0KLS8qKiBNYXNrIGNvbnN0YW50IGZvciBtdWx0aXBs
ZSBVQ2hhckNhdGVnb3J5IGJpdHMgKE0gTWFya3MpLiBAc3RhYmxlIElDVSAyLjEgKi8KLSNkZWZp
bmUgVV9HQ19NX01BU0sgKFVfR0NfTU5fTUFTS3xVX0dDX01FX01BU0t8VV9HQ19NQ19NQVNLKQot
Ci0vKiogTWFzayBjb25zdGFudCBmb3IgbXVsdGlwbGUgVUNoYXJDYXRlZ29yeSBiaXRzIChOIE51
bWJlcnMpLiBAc3RhYmxlIElDVSAyLjEgKi8KLSNkZWZpbmUgVV9HQ19OX01BU0sgKFVfR0NfTkRf
TUFTS3xVX0dDX05MX01BU0t8VV9HQ19OT19NQVNLKQotCi0vKiogTWFzayBjb25zdGFudCBmb3Ig
bXVsdGlwbGUgVUNoYXJDYXRlZ29yeSBiaXRzIChaIFNlcGFyYXRvcnMpLiBAc3RhYmxlIElDVSAy
LjEgKi8KLSNkZWZpbmUgVV9HQ19aX01BU0sgKFVfR0NfWlNfTUFTS3xVX0dDX1pMX01BU0t8VV9H
Q19aUF9NQVNLKQotCi0vKiogTWFzayBjb25zdGFudCBmb3IgbXVsdGlwbGUgVUNoYXJDYXRlZ29y
eSBiaXRzIChDIE90aGVycykuIEBzdGFibGUgSUNVIDIuMSAqLwotI2RlZmluZSBVX0dDX0NfTUFT
SyBcCi0gICAgICAgICAgICAoVV9HQ19DTl9NQVNLfFVfR0NfQ0NfTUFTS3xVX0dDX0NGX01BU0t8
VV9HQ19DT19NQVNLfFVfR0NfQ1NfTUFTSykKLQotLyoqIE1hc2sgY29uc3RhbnQgZm9yIG11bHRp
cGxlIFVDaGFyQ2F0ZWdvcnkgYml0cyAoUCBQdW5jdHVhdGlvbikuIEBzdGFibGUgSUNVIDIuMSAq
LwotI2RlZmluZSBVX0dDX1BfTUFTSyBcCi0gICAgICAgICAgICAoVV9HQ19QRF9NQVNLfFVfR0Nf
UFNfTUFTS3xVX0dDX1BFX01BU0t8VV9HQ19QQ19NQVNLfFVfR0NfUE9fTUFTS3wgXAotICAgICAg
ICAgICAgIFVfR0NfUElfTUFTS3xVX0dDX1BGX01BU0spCi0KLS8qKiBNYXNrIGNvbnN0YW50IGZv
ciBtdWx0aXBsZSBVQ2hhckNhdGVnb3J5IGJpdHMgKFMgU3ltYm9scykuIEBzdGFibGUgSUNVIDIu
MSAqLwotI2RlZmluZSBVX0dDX1NfTUFTSyAoVV9HQ19TTV9NQVNLfFVfR0NfU0NfTUFTS3xVX0dD
X1NLX01BU0t8VV9HQ19TT19NQVNLKQotCi0vKioKLSAqIFRoaXMgc3BlY2lmaWVzIHRoZSBsYW5n
dWFnZSBkaXJlY3Rpb25hbCBwcm9wZXJ0eSBvZiBhIGNoYXJhY3RlciBzZXQuCi0gKiBAc3RhYmxl
IElDVSAyLjAKLSAqLwotdHlwZWRlZiBlbnVtIFVDaGFyRGlyZWN0aW9uIHsKLSAgICAvKgotICAg
ICAqIE5vdGU6IFVDaGFyRGlyZWN0aW9uIGNvbnN0YW50cyBhbmQgdGhlaXIgQVBJIGNvbW1lbnRz
IGFyZSBwYXJzZWQgYnkgcHJlcGFyc2V1Y2QucHkuCi0gICAgICogSXQgbWF0Y2hlcyBwYWlycyBv
ZiBsaW5lcyBsaWtlCi0gICAgICogICAgIC8gKiogPFVuaWNvZGUgMS4uMy1sZXR0ZXIgQmlkaV9D
bGFzcyB2YWx1ZT4gY29tbWVudC4uLiAqIC8KLSAgICAgKiAgICAgVV88W0EtWl9dKz4gPSA8aW50
ZWdlcj4sCi0gICAgICovCi0KLSAgICAvKiogTCBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVX0xF
RlRfVE9fUklHSFQgICAgICAgICAgICAgICA9IDAsCi0gICAgLyoqIFIgQHN0YWJsZSBJQ1UgMi4w
ICovCi0gICAgVV9SSUdIVF9UT19MRUZUICAgICAgICAgICAgICAgPSAxLAotICAgIC8qKiBFTiBA
c3RhYmxlIElDVSAyLjAgKi8KLSAgICBVX0VVUk9QRUFOX05VTUJFUiAgICAgICAgICAgICA9IDIs
Ci0gICAgLyoqIEVTIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVfRVVST1BFQU5fTlVNQkVSX1NF
UEFSQVRPUiAgID0gMywKLSAgICAvKiogRVQgQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVV9FVVJP
UEVBTl9OVU1CRVJfVEVSTUlOQVRPUiAgPSA0LAotICAgIC8qKiBBTiBAc3RhYmxlIElDVSAyLjAg
Ki8KLSAgICBVX0FSQUJJQ19OVU1CRVIgICAgICAgICAgICAgICA9IDUsCi0gICAgLyoqIENTIEBz
dGFibGUgSUNVIDIuMCAqLwotICAgIFVfQ09NTU9OX05VTUJFUl9TRVBBUkFUT1IgICAgID0gNiwK
LSAgICAvKiogQiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVX0JMT0NLX1NFUEFSQVRPUiAgICAg
ICAgICAgICA9IDcsCi0gICAgLyoqIFMgQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVV9TRUdNRU5U
X1NFUEFSQVRPUiAgICAgICAgICAgPSA4LAotICAgIC8qKiBXUyBAc3RhYmxlIElDVSAyLjAgKi8K
LSAgICBVX1dISVRFX1NQQUNFX05FVVRSQUwgICAgICAgICA9IDksCi0gICAgLyoqIE9OIEBzdGFi
bGUgSUNVIDIuMCAqLwotICAgIFVfT1RIRVJfTkVVVFJBTCAgICAgICAgICAgICAgID0gMTAsCi0g
ICAgLyoqIExSRSBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVX0xFRlRfVE9fUklHSFRfRU1CRURE
SU5HICAgICA9IDExLAotICAgIC8qKiBMUk8gQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVV9MRUZU
X1RPX1JJR0hUX09WRVJSSURFICAgICAgPSAxMiwKLSAgICAvKiogQUwgQHN0YWJsZSBJQ1UgMi4w
ICovCi0gICAgVV9SSUdIVF9UT19MRUZUX0FSQUJJQyAgICAgICAgPSAxMywKLSAgICAvKiogUkxF
IEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcgICAgID0g
MTQsCi0gICAgLyoqIFJMTyBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVX1JJR0hUX1RPX0xFRlRf
T1ZFUlJJREUgICAgICA9IDE1LAotICAgIC8qKiBQREYgQHN0YWJsZSBJQ1UgMi4wICovCi0gICAg
VV9QT1BfRElSRUNUSU9OQUxfRk9STUFUICAgICAgPSAxNiwKLSAgICAvKiogTlNNIEBzdGFibGUg
SUNVIDIuMCAqLwotICAgIFVfRElSX05PTl9TUEFDSU5HX01BUksgICAgICAgID0gMTcsCi0gICAg
LyoqIEJOIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVfQk9VTkRBUllfTkVVVFJBTCAgICAgICAg
ICAgID0gMTgsCi0gICAgLyoqIEZTSSBAc3RhYmxlIElDVSA1MiAqLwotICAgIFVfRklSU1RfU1RS
T05HX0lTT0xBVEUgICAgICAgID0gMTksCi0gICAgLyoqIExSSSBAc3RhYmxlIElDVSA1MiAqLwot
ICAgIFVfTEVGVF9UT19SSUdIVF9JU09MQVRFICAgICAgID0gMjAsCi0gICAgLyoqIFJMSSBAc3Rh
YmxlIElDVSA1MiAqLwotICAgIFVfUklHSFRfVE9fTEVGVF9JU09MQVRFICAgICAgID0gMjEsCi0g
ICAgLyoqIFBESSBAc3RhYmxlIElDVSA1MiAqLwotICAgIFVfUE9QX0RJUkVDVElPTkFMX0lTT0xB
VEUgICAgID0gMjIsCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVfQ0hBUl9ESVJF
Q1RJT05fQ09VTlQKLX0gVUNoYXJEaXJlY3Rpb247Ci0KLS8qKgotICogQmlkaSBQYWlyZWQgQnJh
Y2tldCBUeXBlIGNvbnN0YW50cy4KLSAqCi0gKiBAc2VlIFVDSEFSX0JJRElfUEFJUkVEX0JSQUNL
RVRfVFlQRQotICogQHN0YWJsZSBJQ1UgNTIKLSAqLwotdHlwZWRlZiBlbnVtIFVCaWRpUGFpcmVk
QnJhY2tldFR5cGUgewotICAgIC8qCi0gICAgICogTm90ZTogVUJpZGlQYWlyZWRCcmFja2V0VHlw
ZSBjb25zdGFudHMgYXJlIHBhcnNlZCBieSBwcmVwYXJzZXVjZC5weS4KLSAgICAgKiBJdCBtYXRj
aGVzIGxpbmVzIGxpa2UKLSAgICAgKiAgICAgVV9CUFRfPFVuaWNvZGUgQmlkaV9QYWlyZWRfQnJh
Y2tldF9UeXBlIHZhbHVlIG5hbWU+Ci0gICAgICovCi0KLSAgICAvKiogTm90IGEgcGFpcmVkIGJy
YWNrZXQuIEBzdGFibGUgSUNVIDUyICovCi0gICAgVV9CUFRfTk9ORSwKLSAgICAvKiogT3BlbiBw
YWlyZWQgYnJhY2tldC4gQHN0YWJsZSBJQ1UgNTIgKi8KLSAgICBVX0JQVF9PUEVOLAotICAgIC8q
KiBDbG9zZSBwYWlyZWQgYnJhY2tldC4gQHN0YWJsZSBJQ1UgNTIgKi8KLSAgICBVX0JQVF9DTE9T
RSwKLSAgICAvKiogQHN0YWJsZSBJQ1UgNTIgKi8KLSAgICBVX0JQVF9DT1VOVCAvKiAzICovCi19
IFVCaWRpUGFpcmVkQnJhY2tldFR5cGU7Ci0KLS8qKgotICogQ29uc3RhbnRzIGZvciBVbmljb2Rl
IGJsb2Nrcywgc2VlIHRoZSBVbmljb2RlIERhdGEgZmlsZSBCbG9ja3MudHh0Ci0gKiBAc3RhYmxl
IElDVSAyLjAKLSAqLwotZW51bSBVQmxvY2tDb2RlIHsKLSAgICAvKgotICAgICAqIE5vdGU6IFVC
bG9ja0NvZGUgY29uc3RhbnRzIGFyZSBwYXJzZWQgYnkgcHJlcGFyc2V1Y2QucHkuCi0gICAgICog
SXQgbWF0Y2hlcyBsaW5lcyBsaWtlCi0gICAgICogICAgIFVCTE9DS188VW5pY29kZSBCbG9jayB2
YWx1ZSBuYW1lPiA9IDxpbnRlZ2VyPiwKLSAgICAgKi8KLQotICAgIC8qKiBOZXcgTm9fQmxvY2sg
dmFsdWUgaW4gVW5pY29kZSA0LiBAc3RhYmxlIElDVSAyLjYgKi8KLSAgICBVQkxPQ0tfTk9fQkxP
Q0sgPSAwLCAvKltub25lXSovIC8qIFNwZWNpYWwgcmFuZ2UgaW5kaWNhdGluZyBOb19CbG9jayAq
LwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19CQVNJQ19MQVRJTiA9
IDEsIC8qWzAwMDBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVQkxPQ0tf
TEFUSU5fMV9TVVBQTEVNRU5UPTIsIC8qWzAwODBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAy
LjAgKi8KLSAgICBVQkxPQ0tfTEFUSU5fRVhURU5ERURfQSA9MywgLypbMDEwMF0qLwotCi0gICAg
LyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19MQVRJTl9FWFRFTkRFRF9CID00LCAv
KlswMTgwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0lQQV9F
WFRFTlNJT05TID01LCAvKlswMjUwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0g
ICAgVUJMT0NLX1NQQUNJTkdfTU9ESUZJRVJfTEVUVEVSUyA9NiwgLypbMDJCMF0qLwotCi0gICAg
LyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19DT01CSU5JTkdfRElBQ1JJVElDQUxf
TUFSS1MgPTcsIC8qWzAzMDBdKi8KLQotICAgIC8qKgotICAgICAqIFVuaWNvZGUgMy4yIHJlbmFt
ZXMgdGhpcyBibG9jayB0byAiR3JlZWsgYW5kIENvcHRpYyIuCi0gICAgICogQHN0YWJsZSBJQ1Ug
Mi4wCi0gICAgICovCi0gICAgVUJMT0NLX0dSRUVLID04LCAvKlswMzcwXSovCi0KLSAgICAvKiog
QHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0NZUklMTElDID05LCAvKlswNDAwXSovCi0K
LSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0FSTUVOSUFOID0xMCwgLypb
MDUzMF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19IRUJSRVcg
PTExLCAvKlswNTkwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NL
X0FSQUJJQyA9MTIsIC8qWzA2MDBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAg
ICBVQkxPQ0tfU1lSSUFDID0xMywgLypbMDcwMF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIu
MCAqLwotICAgIFVCTE9DS19USEFBTkEgPTE0LCAvKlswNzgwXSovCi0KLSAgICAvKiogQHN0YWJs
ZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0RFVkFOQUdBUkkgPTE1LCAvKlswOTAwXSovCi0KLSAg
ICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0JFTkdBTEkgPTE2LCAvKlswOTgw
XSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0dVUk1VS0hJID0x
NywgLypbMEEwMF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19H
VUpBUkFUSSA9MTgsIC8qWzBBODBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAg
ICBVQkxPQ0tfT1JJWUEgPTE5LCAvKlswQjAwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4w
ICovCi0gICAgVUJMT0NLX1RBTUlMID0yMCwgLypbMEI4MF0qLwotCi0gICAgLyoqIEBzdGFibGUg
SUNVIDIuMCAqLwotICAgIFVCTE9DS19URUxVR1UgPTIxLCAvKlswQzAwXSovCi0KLSAgICAvKiog
QHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0tBTk5BREEgPTIyLCAvKlswQzgwXSovCi0K
LSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX01BTEFZQUxBTSA9MjMsIC8q
WzBEMDBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVQkxPQ0tfU0lOSEFM
QSA9MjQsIC8qWzBEODBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVQkxP
Q0tfVEhBSSA9MjUsIC8qWzBFMDBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAg
ICBVQkxPQ0tfTEFPID0yNiwgLypbMEU4MF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAq
LwotICAgIFVCTE9DS19USUJFVEFOID0yNywgLypbMEYwMF0qLwotCi0gICAgLyoqIEBzdGFibGUg
SUNVIDIuMCAqLwotICAgIFVCTE9DS19NWUFOTUFSID0yOCwgLypbMTAwMF0qLwotCi0gICAgLyoq
IEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19HRU9SR0lBTiA9MjksIC8qWzEwQTBdKi8K
LQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVQkxPQ0tfSEFOR1VMX0pBTU8gPTMw
LCAvKlsxMTAwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0VU
SElPUElDID0zMSwgLypbMTIwMF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAg
IFVCTE9DS19DSEVST0tFRSA9MzIsIC8qWzEzQTBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAy
LjAgKi8KLSAgICBVQkxPQ0tfVU5JRklFRF9DQU5BRElBTl9BQk9SSUdJTkFMX1NZTExBQklDUyA9
MzMsIC8qWzE0MDBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVQkxPQ0tf
T0dIQU0gPTM0LCAvKlsxNjgwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAg
VUJMT0NLX1JVTklDID0zNSwgLypbMTZBMF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAq
LwotICAgIFVCTE9DS19LSE1FUiA9MzYsIC8qWzE3ODBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElD
VSAyLjAgKi8KLSAgICBVQkxPQ0tfTU9OR09MSUFOID0zNywgLypbMTgwMF0qLwotCi0gICAgLyoq
IEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19MQVRJTl9FWFRFTkRFRF9BRERJVElPTkFM
ID0zOCwgLypbMUUwMF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9D
S19HUkVFS19FWFRFTkRFRCA9MzksIC8qWzFGMDBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAy
LjAgKi8KLSAgICBVQkxPQ0tfR0VORVJBTF9QVU5DVFVBVElPTiA9NDAsIC8qWzIwMDBdKi8KLQot
ICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVQkxPQ0tfU1VQRVJTQ1JJUFRTX0FORF9T
VUJTQ1JJUFRTID00MSwgLypbMjA3MF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwot
ICAgIFVCTE9DS19DVVJSRU5DWV9TWU1CT0xTID00MiwgLypbMjBBMF0qLwotCi0gICAgLyoqCi0g
ICAgICogVW5pY29kZSAzLjIgcmVuYW1lcyB0aGlzIGJsb2NrIHRvICJDb21iaW5pbmcgRGlhY3Jp
dGljYWwgTWFya3MgZm9yIFN5bWJvbHMiLgotICAgICAqIEBzdGFibGUgSUNVIDIuMAotICAgICAq
LwotICAgIFVCTE9DS19DT01CSU5JTkdfTUFSS1NfRk9SX1NZTUJPTFMgPTQzLCAvKlsyMEQwXSov
Ci0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0xFVFRFUkxJS0VfU1lN
Qk9MUyA9NDQsIC8qWzIxMDBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBV
QkxPQ0tfTlVNQkVSX0ZPUk1TID00NSwgLypbMjE1MF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNV
IDIuMCAqLwotICAgIFVCTE9DS19BUlJPV1MgPTQ2LCAvKlsyMTkwXSovCi0KLSAgICAvKiogQHN0
YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX01BVEhFTUFUSUNBTF9PUEVSQVRPUlMgPTQ3LCAv
KlsyMjAwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX01JU0NF
TExBTkVPVVNfVEVDSE5JQ0FMID00OCwgLypbMjMwMF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNV
IDIuMCAqLwotICAgIFVCTE9DS19DT05UUk9MX1BJQ1RVUkVTID00OSwgLypbMjQwMF0qLwotCi0g
ICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19PUFRJQ0FMX0NIQVJBQ1RFUl9S
RUNPR05JVElPTiA9NTAsIC8qWzI0NDBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8K
LSAgICBVQkxPQ0tfRU5DTE9TRURfQUxQSEFOVU1FUklDUyA9NTEsIC8qWzI0NjBdKi8KLQotICAg
IC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVQkxPQ0tfQk9YX0RSQVdJTkcgPTUyLCAvKlsy
NTAwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0JMT0NLX0VM
RU1FTlRTID01MywgLypbMjU4MF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAg
IFVCTE9DS19HRU9NRVRSSUNfU0hBUEVTID01NCwgLypbMjVBMF0qLwotCi0gICAgLyoqIEBzdGFi
bGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19NSVNDRUxMQU5FT1VTX1NZTUJPTFMgPTU1LCAvKlsy
NjAwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0RJTkdCQVRT
ID01NiwgLypbMjcwMF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9D
S19CUkFJTExFX1BBVFRFUk5TID01NywgLypbMjgwMF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNV
IDIuMCAqLwotICAgIFVCTE9DS19DSktfUkFESUNBTFNfU1VQUExFTUVOVCA9NTgsIC8qWzJFODBd
Ki8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVQkxPQ0tfS0FOR1hJX1JBRElD
QUxTID01OSwgLypbMkYwMF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVC
TE9DS19JREVPR1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTID02MCwgLypbMkZGMF0qLwot
Ci0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19DSktfU1lNQk9MU19BTkRf
UFVOQ1RVQVRJT04gPTYxLCAvKlszMDAwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICov
Ci0gICAgVUJMT0NLX0hJUkFHQU5BID02MiwgLypbMzA0MF0qLwotCi0gICAgLyoqIEBzdGFibGUg
SUNVIDIuMCAqLwotICAgIFVCTE9DS19LQVRBS0FOQSA9NjMsIC8qWzMwQTBdKi8KLQotICAgIC8q
KiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVQkxPQ0tfQk9QT01PRk8gPTY0LCAvKlszMTAwXSov
Ci0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0hBTkdVTF9DT01QQVRJ
QklMSVRZX0pBTU8gPTY1LCAvKlszMTMwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICov
Ci0gICAgVUJMT0NLX0tBTkJVTiA9NjYsIC8qWzMxOTBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElD
VSAyLjAgKi8KLSAgICBVQkxPQ0tfQk9QT01PRk9fRVhURU5ERUQgPTY3LCAvKlszMUEwXSovCi0K
LSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0VOQ0xPU0VEX0NKS19MRVRU
RVJTX0FORF9NT05USFMgPTY4LCAvKlszMjAwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4w
ICovCi0gICAgVUJMT0NLX0NKS19DT01QQVRJQklMSVRZID02OSwgLypbMzMwMF0qLwotCi0gICAg
LyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhT
X0VYVEVOU0lPTl9BID03MCwgLypbMzQwMF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAq
LwotICAgIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTID03MSwgLypbNEUwMF0qLwotCi0g
ICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19ZSV9TWUxMQUJMRVMgPTcyLCAv
KltBMDAwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX1lJX1JB
RElDQUxTID03MywgLypbQTQ5MF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAg
IFVCTE9DS19IQU5HVUxfU1lMTEFCTEVTID03NCwgLypbQUMwMF0qLwotCi0gICAgLyoqIEBzdGFi
bGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19ISUdIX1NVUlJPR0FURVMgPTc1LCAvKltEODAwXSov
Ci0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0hJR0hfUFJJVkFURV9V
U0VfU1VSUk9HQVRFUyA9NzYsIC8qW0RCODBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAg
Ki8KLSAgICBVQkxPQ0tfTE9XX1NVUlJPR0FURVMgPTc3LCAvKltEQzAwXSovCi0KLSAgICAvKioK
LSAgICAgKiBTYW1lIGFzIFVCTE9DS19QUklWQVRFX1VTRS4KLSAgICAgKiBVbnRpbCBVbmljb2Rl
IDMuMS4xLCB0aGUgY29ycmVzcG9uZGluZyBibG9jayBuYW1lIHdhcyAiUHJpdmF0ZSBVc2UiLAot
ICAgICAqIGFuZCBtdWx0aXBsZSBjb2RlIHBvaW50IHJhbmdlcyBoYWQgdGhpcyBibG9jay4KLSAg
ICAgKiBVbmljb2RlIDMuMiByZW5hbWVzIHRoZSBibG9jayBmb3IgdGhlIEJNUCBQVUEgdG8gIlBy
aXZhdGUgVXNlIEFyZWEiIGFuZAotICAgICAqIGFkZHMgc2VwYXJhdGUgYmxvY2tzIGZvciB0aGUg
c3VwcGxlbWVudGFyeSBQVUFzLgotICAgICAqCi0gICAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAg
ICovCi0gICAgVUJMT0NLX1BSSVZBVEVfVVNFX0FSRUEgPTc4LCAvKltFMDAwXSovCi0gICAgLyoq
Ci0gICAgICogU2FtZSBhcyBVQkxPQ0tfUFJJVkFURV9VU0VfQVJFQS4KLSAgICAgKiBVbnRpbCBV
bmljb2RlIDMuMS4xLCB0aGUgY29ycmVzcG9uZGluZyBibG9jayBuYW1lIHdhcyAiUHJpdmF0ZSBV
c2UiLAotICAgICAqIGFuZCBtdWx0aXBsZSBjb2RlIHBvaW50IHJhbmdlcyBoYWQgdGhpcyBibG9j
ay4KLSAgICAgKiBVbmljb2RlIDMuMiByZW5hbWVzIHRoZSBibG9jayBmb3IgdGhlIEJNUCBQVUEg
dG8gIlByaXZhdGUgVXNlIEFyZWEiIGFuZAotICAgICAqIGFkZHMgc2VwYXJhdGUgYmxvY2tzIGZv
ciB0aGUgc3VwcGxlbWVudGFyeSBQVUFzLgotICAgICAqCi0gICAgICogQHN0YWJsZSBJQ1UgMi4w
Ci0gICAgICovCi0gICAgVUJMT0NLX1BSSVZBVEVfVVNFID0gVUJMT0NLX1BSSVZBVEVfVVNFX0FS
RUEsCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0NKS19DT01QQVRJ
QklMSVRZX0lERU9HUkFQSFMgPTc5LCAvKltGOTAwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1Ug
Mi4wICovCi0gICAgVUJMT0NLX0FMUEhBQkVUSUNfUFJFU0VOVEFUSU9OX0ZPUk1TID04MCwgLypb
RkIwMF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19BUkFCSUNf
UFJFU0VOVEFUSU9OX0ZPUk1TX0EgPTgxLCAvKltGQjUwXSovCi0KLSAgICAvKiogQHN0YWJsZSBJ
Q1UgMi4wICovCi0gICAgVUJMT0NLX0NPTUJJTklOR19IQUxGX01BUktTID04MiwgLypbRkUyMF0q
LwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19DSktfQ09NUEFUSUJJ
TElUWV9GT1JNUyA9ODMsIC8qW0ZFMzBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8K
LSAgICBVQkxPQ0tfU01BTExfRk9STV9WQVJJQU5UUyA9ODQsIC8qW0ZFNTBdKi8KLQotICAgIC8q
KiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVQkxPQ0tfQVJBQklDX1BSRVNFTlRBVElPTl9GT1JN
U19CID04NSwgLypbRkU3MF0qLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVC
TE9DS19TUEVDSUFMUyA9ODYsIC8qW0ZGRjBdKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAg
Ki8KLSAgICBVQkxPQ0tfSEFMRldJRFRIX0FORF9GVUxMV0lEVEhfRk9STVMgPTg3LCAvKltGRjAw
XSovCi0KLSAgICAvKiBOZXcgYmxvY2tzIGluIFVuaWNvZGUgMy4xICovCi0KLSAgICAvKiogQHN0
YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX09MRF9JVEFMSUMgPSA4OCwgLypbMTAzMDBdKi8K
LSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0dPVEhJQyA9IDg5LCAvKlsx
MDMzMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVQkxPQ0tfREVTRVJFVCA9
IDkwLCAvKlsxMDQwMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVQkxPQ0tf
QllaQU5USU5FX01VU0lDQUxfU1lNQk9MUyA9IDkxLCAvKlsxRDAwMF0qLwotICAgIC8qKiBAc3Rh
YmxlIElDVSAyLjAgKi8KLSAgICBVQkxPQ0tfTVVTSUNBTF9TWU1CT0xTID0gOTIsIC8qWzFEMTAw
XSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9DS19NQVRIRU1BVElDQUxf
QUxQSEFOVU1FUklDX1NZTUJPTFMgPSA5MywgLypbMUQ0MDBdKi8KLSAgICAvKiogQHN0YWJsZSBJ
Q1UgMi4wICovCi0gICAgVUJMT0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0Ig
ID0gOTQsIC8qWzIwMDAwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVCTE9D
S19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlQgPSA5NSwgLypbMkY4MDBd
Ki8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX1RBR1MgPSA5NiwgLypb
RTAwMDBdKi8KLQotICAgIC8qIE5ldyBibG9ja3MgaW4gVW5pY29kZSAzLjIgKi8KLQotICAgIC8q
KiBAc3RhYmxlIElDVSAzLjAgICovCi0gICAgVUJMT0NLX0NZUklMTElDX1NVUFBMRU1FTlQgPSA5
NywgLypbMDUwMF0qLwotICAgIC8qKgotICAgICAqIFVuaWNvZGUgNC4wLjEgcmVuYW1lcyB0aGUg
IkN5cmlsbGljIFN1cHBsZW1lbnRhcnkiIGJsb2NrIHRvICJDeXJpbGxpYyBTdXBwbGVtZW50Ii4K
LSAgICAgKiBAc3RhYmxlIElDVSAyLjIKLSAgICAgKi8KLSAgICBVQkxPQ0tfQ1lSSUxMSUNfU1VQ
UExFTUVOVEFSWSA9IFVCTE9DS19DWVJJTExJQ19TVVBQTEVNRU5ULCAKLSAgICAvKiogQHN0YWJs
ZSBJQ1UgMi4yICovCi0gICAgVUJMT0NLX1RBR0FMT0cgPSA5OCwgLypbMTcwMF0qLwotICAgIC8q
KiBAc3RhYmxlIElDVSAyLjIgKi8KLSAgICBVQkxPQ0tfSEFOVU5PTyA9IDk5LCAvKlsxNzIwXSov
Ci0gICAgLyoqIEBzdGFibGUgSUNVIDIuMiAqLwotICAgIFVCTE9DS19CVUhJRCA9IDEwMCwgLypb
MTc0MF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSAyLjIgKi8KLSAgICBVQkxPQ0tfVEFHQkFOV0Eg
PSAxMDEsIC8qWzE3NjBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4yICovCi0gICAgVUJMT0NL
X01JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJPTFNfQSA9IDEwMiwgLypbMjdDMF0qLwot
ICAgIC8qKiBAc3RhYmxlIElDVSAyLjIgKi8KLSAgICBVQkxPQ0tfU1VQUExFTUVOVEFMX0FSUk9X
U19BID0gMTAzLCAvKlsyN0YwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuMiAqLwotICAgIFVC
TE9DS19TVVBQTEVNRU5UQUxfQVJST1dTX0IgPSAxMDQsIC8qWzI5MDBdKi8KLSAgICAvKiogQHN0
YWJsZSBJQ1UgMi4yICovCi0gICAgVUJMT0NLX01JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZ
TUJPTFNfQiA9IDEwNSwgLypbMjk4MF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSAyLjIgKi8KLSAg
ICBVQkxPQ0tfU1VQUExFTUVOVEFMX01BVEhFTUFUSUNBTF9PUEVSQVRPUlMgPSAxMDYsIC8qWzJB
MDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi4yICovCi0gICAgVUJMT0NLX0tBVEFLQU5BX1BI
T05FVElDX0VYVEVOU0lPTlMgPSAxMDcsIC8qWzMxRjBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1Ug
Mi4yICovCi0gICAgVUJMT0NLX1ZBUklBVElPTl9TRUxFQ1RPUlMgPSAxMDgsIC8qW0ZFMDBdKi8K
LSAgICAvKiogQHN0YWJsZSBJQ1UgMi4yICovCi0gICAgVUJMT0NLX1NVUFBMRU1FTlRBUllfUFJJ
VkFURV9VU0VfQVJFQV9BID0gMTA5LCAvKltGMDAwMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSAy
LjIgKi8KLSAgICBVQkxPQ0tfU1VQUExFTUVOVEFSWV9QUklWQVRFX1VTRV9BUkVBX0IgPSAxMTAs
IC8qWzEwMDAwMF0qLwotCi0gICAgLyogTmV3IGJsb2NrcyBpbiBVbmljb2RlIDQgKi8KLQotICAg
IC8qKiBAc3RhYmxlIElDVSAyLjYgKi8KLSAgICBVQkxPQ0tfTElNQlUgPSAxMTEsIC8qWzE5MDBd
Ki8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi42ICovCi0gICAgVUJMT0NLX1RBSV9MRSA9IDExMiwg
LypbMTk1MF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSAyLjYgKi8KLSAgICBVQkxPQ0tfS0hNRVJf
U1lNQk9MUyA9IDExMywgLypbMTlFMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSAyLjYgKi8KLSAg
ICBVQkxPQ0tfUEhPTkVUSUNfRVhURU5TSU9OUyA9IDExNCwgLypbMUQwMF0qLwotICAgIC8qKiBA
c3RhYmxlIElDVSAyLjYgKi8KLSAgICBVQkxPQ0tfTUlTQ0VMTEFORU9VU19TWU1CT0xTX0FORF9B
UlJPV1MgPSAxMTUsIC8qWzJCMDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi42ICovCi0gICAg
VUJMT0NLX1lJSklOR19IRVhBR1JBTV9TWU1CT0xTID0gMTE2LCAvKls0REMwXSovCi0gICAgLyoq
IEBzdGFibGUgSUNVIDIuNiAqLwotICAgIFVCTE9DS19MSU5FQVJfQl9TWUxMQUJBUlkgPSAxMTcs
IC8qWzEwMDAwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuNiAqLwotICAgIFVCTE9DS19MSU5F
QVJfQl9JREVPR1JBTVMgPSAxMTgsIC8qWzEwMDgwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDIu
NiAqLwotICAgIFVCTE9DS19BRUdFQU5fTlVNQkVSUyA9IDExOSwgLypbMTAxMDBdKi8KLSAgICAv
KiogQHN0YWJsZSBJQ1UgMi42ICovCi0gICAgVUJMT0NLX1VHQVJJVElDID0gMTIwLCAvKlsxMDM4
MF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSAyLjYgKi8KLSAgICBVQkxPQ0tfU0hBVklBTiA9IDEy
MSwgLypbMTA0NTBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi42ICovCi0gICAgVUJMT0NLX09T
TUFOWUEgPSAxMjIsIC8qWzEwNDgwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDIuNiAqLwotICAg
IFVCTE9DS19DWVBSSU9UX1NZTExBQkFSWSA9IDEyMywgLypbMTA4MDBdKi8KLSAgICAvKiogQHN0
YWJsZSBJQ1UgMi42ICovCi0gICAgVUJMT0NLX1RBSV9YVUFOX0pJTkdfU1lNQk9MUyA9IDEyNCwg
LypbMUQzMDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMi42ICovCi0gICAgVUJMT0NLX1ZBUklB
VElPTl9TRUxFQ1RPUlNfU1VQUExFTUVOVCA9IDEyNSwgLypbRTAxMDBdKi8KLQotICAgIC8qIE5l
dyBibG9ja3MgaW4gVW5pY29kZSA0LjEgKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSAzLjQgKi8K
LSAgICBVQkxPQ0tfQU5DSUVOVF9HUkVFS19NVVNJQ0FMX05PVEFUSU9OID0gMTI2LCAvKlsxRDIw
MF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSAzLjQgKi8KLSAgICBVQkxPQ0tfQU5DSUVOVF9HUkVF
S19OVU1CRVJTID0gMTI3LCAvKlsxMDE0MF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSAzLjQgKi8K
LSAgICBVQkxPQ0tfQVJBQklDX1NVUFBMRU1FTlQgPSAxMjgsIC8qWzA3NTBdKi8KLSAgICAvKiog
QHN0YWJsZSBJQ1UgMy40ICovCi0gICAgVUJMT0NLX0JVR0lORVNFID0gMTI5LCAvKlsxQTAwXSov
Ci0gICAgLyoqIEBzdGFibGUgSUNVIDMuNCAqLwotICAgIFVCTE9DS19DSktfU1RST0tFUyA9IDEz
MCwgLypbMzFDMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSAzLjQgKi8KLSAgICBVQkxPQ0tfQ09N
QklOSU5HX0RJQUNSSVRJQ0FMX01BUktTX1NVUFBMRU1FTlQgPSAxMzEsIC8qWzFEQzBdKi8KLSAg
ICAvKiogQHN0YWJsZSBJQ1UgMy40ICovCi0gICAgVUJMT0NLX0NPUFRJQyA9IDEzMiwgLypbMkM4
MF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSAzLjQgKi8KLSAgICBVQkxPQ0tfRVRISU9QSUNfRVhU
RU5ERUQgPSAxMzMsIC8qWzJEODBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMy40ICovCi0gICAg
VUJMT0NLX0VUSElPUElDX1NVUFBMRU1FTlQgPSAxMzQsIC8qWzEzODBdKi8KLSAgICAvKiogQHN0
YWJsZSBJQ1UgMy40ICovCi0gICAgVUJMT0NLX0dFT1JHSUFOX1NVUFBMRU1FTlQgPSAxMzUsIC8q
WzJEMDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMy40ICovCi0gICAgVUJMT0NLX0dMQUdPTElU
SUMgPSAxMzYsIC8qWzJDMDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMy40ICovCi0gICAgVUJM
T0NLX0tIQVJPU0hUSEkgPSAxMzcsIC8qWzEwQTAwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDMu
NCAqLwotICAgIFVCTE9DS19NT0RJRklFUl9UT05FX0xFVFRFUlMgPSAxMzgsIC8qW0E3MDBdKi8K
LSAgICAvKiogQHN0YWJsZSBJQ1UgMy40ICovCi0gICAgVUJMT0NLX05FV19UQUlfTFVFID0gMTM5
LCAvKlsxOTgwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDMuNCAqLwotICAgIFVCTE9DS19PTERf
UEVSU0lBTiA9IDE0MCwgLypbMTAzQTBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMy40ICovCi0g
ICAgVUJMT0NLX1BIT05FVElDX0VYVEVOU0lPTlNfU1VQUExFTUVOVCA9IDE0MSwgLypbMUQ4MF0q
LwotICAgIC8qKiBAc3RhYmxlIElDVSAzLjQgKi8KLSAgICBVQkxPQ0tfU1VQUExFTUVOVEFMX1BV
TkNUVUFUSU9OID0gMTQyLCAvKlsyRTAwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDMuNCAqLwot
ICAgIFVCTE9DS19TWUxPVElfTkFHUkkgPSAxNDMsIC8qW0E4MDBdKi8KLSAgICAvKiogQHN0YWJs
ZSBJQ1UgMy40ICovCi0gICAgVUJMT0NLX1RJRklOQUdIID0gMTQ0LCAvKlsyRDMwXSovCi0gICAg
LyoqIEBzdGFibGUgSUNVIDMuNCAqLwotICAgIFVCTE9DS19WRVJUSUNBTF9GT1JNUyA9IDE0NSwg
LypbRkUxMF0qLwotCi0gICAgLyogTmV3IGJsb2NrcyBpbiBVbmljb2RlIDUuMCAqLwotCi0gICAg
LyoqIEBzdGFibGUgSUNVIDMuNiAqLwotICAgIFVCTE9DS19OS08gPSAxNDYsIC8qWzA3QzBdKi8K
LSAgICAvKiogQHN0YWJsZSBJQ1UgMy42ICovCi0gICAgVUJMT0NLX0JBTElORVNFID0gMTQ3LCAv
KlsxQjAwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDMuNiAqLwotICAgIFVCTE9DS19MQVRJTl9F
WFRFTkRFRF9DID0gMTQ4LCAvKlsyQzYwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDMuNiAqLwot
ICAgIFVCTE9DS19MQVRJTl9FWFRFTkRFRF9EID0gMTQ5LCAvKltBNzIwXSovCi0gICAgLyoqIEBz
dGFibGUgSUNVIDMuNiAqLwotICAgIFVCTE9DS19QSEFHU19QQSA9IDE1MCwgLypbQTg0MF0qLwot
ICAgIC8qKiBAc3RhYmxlIElDVSAzLjYgKi8KLSAgICBVQkxPQ0tfUEhPRU5JQ0lBTiA9IDE1MSwg
LypbMTA5MDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMy42ICovCi0gICAgVUJMT0NLX0NVTkVJ
Rk9STSA9IDE1MiwgLypbMTIwMDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMy42ICovCi0gICAg
VUJMT0NLX0NVTkVJRk9STV9OVU1CRVJTX0FORF9QVU5DVFVBVElPTiA9IDE1MywgLypbMTI0MDBd
Ki8KLSAgICAvKiogQHN0YWJsZSBJQ1UgMy42ICovCi0gICAgVUJMT0NLX0NPVU5USU5HX1JPRF9O
VU1FUkFMUyA9IDE1NCwgLypbMUQzNjBdKi8KLQotICAgIC8qIE5ldyBibG9ja3MgaW4gVW5pY29k
ZSA1LjEgKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSA0LjAgKi8KLSAgICBVQkxPQ0tfU1VOREFO
RVNFID0gMTU1LCAvKlsxQjgwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDQuMCAqLwotICAgIFVC
TE9DS19MRVBDSEEgPSAxNTYsIC8qWzFDMDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNC4wICov
Ci0gICAgVUJMT0NLX09MX0NISUtJID0gMTU3LCAvKlsxQzUwXSovCi0gICAgLyoqIEBzdGFibGUg
SUNVIDQuMCAqLwotICAgIFVCTE9DS19DWVJJTExJQ19FWFRFTkRFRF9BID0gMTU4LCAvKlsyREUw
XSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDQuMCAqLwotICAgIFVCTE9DS19WQUkgPSAxNTksIC8q
W0E1MDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNC4wICovCi0gICAgVUJMT0NLX0NZUklMTElD
X0VYVEVOREVEX0IgPSAxNjAsIC8qW0E2NDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNC4wICov
Ci0gICAgVUJMT0NLX1NBVVJBU0hUUkEgPSAxNjEsIC8qW0E4ODBdKi8KLSAgICAvKiogQHN0YWJs
ZSBJQ1UgNC4wICovCi0gICAgVUJMT0NLX0tBWUFIX0xJID0gMTYyLCAvKltBOTAwXSovCi0gICAg
LyoqIEBzdGFibGUgSUNVIDQuMCAqLwotICAgIFVCTE9DS19SRUpBTkcgPSAxNjMsIC8qW0E5MzBd
Ki8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNC4wICovCi0gICAgVUJMT0NLX0NIQU0gPSAxNjQsIC8q
W0FBMDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNC4wICovCi0gICAgVUJMT0NLX0FOQ0lFTlRf
U1lNQk9MUyA9IDE2NSwgLypbMTAxOTBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNC4wICovCi0g
ICAgVUJMT0NLX1BIQUlTVE9TX0RJU0MgPSAxNjYsIC8qWzEwMUQwXSovCi0gICAgLyoqIEBzdGFi
bGUgSUNVIDQuMCAqLwotICAgIFVCTE9DS19MWUNJQU4gPSAxNjcsIC8qWzEwMjgwXSovCi0gICAg
LyoqIEBzdGFibGUgSUNVIDQuMCAqLwotICAgIFVCTE9DS19DQVJJQU4gPSAxNjgsIC8qWzEwMkEw
XSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDQuMCAqLwotICAgIFVCTE9DS19MWURJQU4gPSAxNjks
IC8qWzEwOTIwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDQuMCAqLwotICAgIFVCTE9DS19NQUhK
T05HX1RJTEVTID0gMTcwLCAvKlsxRjAwMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA0LjAgKi8K
LSAgICBVQkxPQ0tfRE9NSU5PX1RJTEVTID0gMTcxLCAvKlsxRjAzMF0qLwotCi0gICAgLyogTmV3
IGJsb2NrcyBpbiBVbmljb2RlIDUuMiAqLwotCi0gICAgLyoqIEBzdGFibGUgSUNVIDQuNCAqLwot
ICAgIFVCTE9DS19TQU1BUklUQU4gPSAxNzIsIC8qWzA4MDBdKi8KLSAgICAvKiogQHN0YWJsZSBJ
Q1UgNC40ICovCi0gICAgVUJMT0NLX1VOSUZJRURfQ0FOQURJQU5fQUJPUklHSU5BTF9TWUxMQUJJ
Q1NfRVhURU5ERUQgPSAxNzMsIC8qWzE4QjBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNC40ICov
Ci0gICAgVUJMT0NLX1RBSV9USEFNID0gMTc0LCAvKlsxQTIwXSovCi0gICAgLyoqIEBzdGFibGUg
SUNVIDQuNCAqLwotICAgIFVCTE9DS19WRURJQ19FWFRFTlNJT05TID0gMTc1LCAvKlsxQ0QwXSov
Ci0gICAgLyoqIEBzdGFibGUgSUNVIDQuNCAqLwotICAgIFVCTE9DS19MSVNVID0gMTc2LCAvKltB
NEQwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDQuNCAqLwotICAgIFVCTE9DS19CQU1VTSA9IDE3
NywgLypbQTZBMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA0LjQgKi8KLSAgICBVQkxPQ0tfQ09N
TU9OX0lORElDX05VTUJFUl9GT1JNUyA9IDE3OCwgLypbQTgzMF0qLwotICAgIC8qKiBAc3RhYmxl
IElDVSA0LjQgKi8KLSAgICBVQkxPQ0tfREVWQU5BR0FSSV9FWFRFTkRFRCA9IDE3OSwgLypbQThF
MF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA0LjQgKi8KLSAgICBVQkxPQ0tfSEFOR1VMX0pBTU9f
RVhURU5ERURfQSA9IDE4MCwgLypbQTk2MF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA0LjQgKi8K
LSAgICBVQkxPQ0tfSkFWQU5FU0UgPSAxODEsIC8qW0E5ODBdKi8KLSAgICAvKiogQHN0YWJsZSBJ
Q1UgNC40ICovCi0gICAgVUJMT0NLX01ZQU5NQVJfRVhURU5ERURfQSA9IDE4MiwgLypbQUE2MF0q
LwotICAgIC8qKiBAc3RhYmxlIElDVSA0LjQgKi8KLSAgICBVQkxPQ0tfVEFJX1ZJRVQgPSAxODMs
IC8qW0FBODBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNC40ICovCi0gICAgVUJMT0NLX01FRVRF
SV9NQVlFSyA9IDE4NCwgLypbQUJDMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA0LjQgKi8KLSAg
ICBVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURfQiA9IDE4NSwgLypbRDdCMF0qLwotICAgIC8q
KiBAc3RhYmxlIElDVSA0LjQgKi8KLSAgICBVQkxPQ0tfSU1QRVJJQUxfQVJBTUFJQyA9IDE4Niwg
LypbMTA4NDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNC40ICovCi0gICAgVUJMT0NLX09MRF9T
T1VUSF9BUkFCSUFOID0gMTg3LCAvKlsxMEE2MF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA0LjQg
Ki8KLSAgICBVQkxPQ0tfQVZFU1RBTiA9IDE4OCwgLypbMTBCMDBdKi8KLSAgICAvKiogQHN0YWJs
ZSBJQ1UgNC40ICovCi0gICAgVUJMT0NLX0lOU0NSSVBUSU9OQUxfUEFSVEhJQU4gPSAxODksIC8q
WzEwQjQwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDQuNCAqLwotICAgIFVCTE9DS19JTlNDUklQ
VElPTkFMX1BBSExBVkkgPSAxOTAsIC8qWzEwQjYwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDQu
NCAqLwotICAgIFVCTE9DS19PTERfVFVSS0lDID0gMTkxLCAvKlsxMEMwMF0qLwotICAgIC8qKiBA
c3RhYmxlIElDVSA0LjQgKi8KLSAgICBVQkxPQ0tfUlVNSV9OVU1FUkFMX1NZTUJPTFMgPSAxOTIs
IC8qWzEwRTYwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDQuNCAqLwotICAgIFVCTE9DS19LQUlU
SEkgPSAxOTMsIC8qWzExMDgwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDQuNCAqLwotICAgIFVC
TE9DS19FR1lQVElBTl9ISUVST0dMWVBIUyA9IDE5NCwgLypbMTMwMDBdKi8KLSAgICAvKiogQHN0
YWJsZSBJQ1UgNC40ICovCi0gICAgVUJMT0NLX0VOQ0xPU0VEX0FMUEhBTlVNRVJJQ19TVVBQTEVN
RU5UID0gMTk1LCAvKlsxRjEwMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA0LjQgKi8KLSAgICBV
QkxPQ0tfRU5DTE9TRURfSURFT0dSQVBISUNfU1VQUExFTUVOVCA9IDE5NiwgLypbMUYyMDBdKi8K
LSAgICAvKiogQHN0YWJsZSBJQ1UgNC40ICovCi0gICAgVUJMT0NLX0NKS19VTklGSUVEX0lERU9H
UkFQSFNfRVhURU5TSU9OX0MgPSAxOTcsIC8qWzJBNzAwXSovCi0KLSAgICAvKiBOZXcgYmxvY2tz
IGluIFVuaWNvZGUgNi4wICovCi0KLSAgICAvKiogQHN0YWJsZSBJQ1UgNC42ICovCi0gICAgVUJM
T0NLX01BTkRBSUMgPSAxOTgsIC8qWzA4NDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNC42ICov
Ci0gICAgVUJMT0NLX0JBVEFLID0gMTk5LCAvKlsxQkMwXSovCi0gICAgLyoqIEBzdGFibGUgSUNV
IDQuNiAqLwotICAgIFVCTE9DS19FVEhJT1BJQ19FWFRFTkRFRF9BID0gMjAwLCAvKltBQjAwXSov
Ci0gICAgLyoqIEBzdGFibGUgSUNVIDQuNiAqLwotICAgIFVCTE9DS19CUkFITUkgPSAyMDEsIC8q
WzExMDAwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDQuNiAqLwotICAgIFVCTE9DS19CQU1VTV9T
VVBQTEVNRU5UID0gMjAyLCAvKlsxNjgwMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA0LjYgKi8K
LSAgICBVQkxPQ0tfS0FOQV9TVVBQTEVNRU5UID0gMjAzLCAvKlsxQjAwMF0qLwotICAgIC8qKiBA
c3RhYmxlIElDVSA0LjYgKi8KLSAgICBVQkxPQ0tfUExBWUlOR19DQVJEUyA9IDIwNCwgLypbMUYw
QTBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNC42ICovCi0gICAgVUJMT0NLX01JU0NFTExBTkVP
VVNfU1lNQk9MU19BTkRfUElDVE9HUkFQSFMgPSAyMDUsIC8qWzFGMzAwXSovCi0gICAgLyoqIEBz
dGFibGUgSUNVIDQuNiAqLwotICAgIFVCTE9DS19FTU9USUNPTlMgPSAyMDYsIC8qWzFGNjAwXSov
Ci0gICAgLyoqIEBzdGFibGUgSUNVIDQuNiAqLwotICAgIFVCTE9DS19UUkFOU1BPUlRfQU5EX01B
UF9TWU1CT0xTID0gMjA3LCAvKlsxRjY4MF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA0LjYgKi8K
LSAgICBVQkxPQ0tfQUxDSEVNSUNBTF9TWU1CT0xTID0gMjA4LCAvKlsxRjcwMF0qLwotICAgIC8q
KiBAc3RhYmxlIElDVSA0LjYgKi8KLSAgICBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19F
WFRFTlNJT05fRCA9IDIwOSwgLypbMkI3NDBdKi8KLQotICAgIC8qIE5ldyBibG9ja3MgaW4gVW5p
Y29kZSA2LjEgKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSA0OSAqLwotICAgIFVCTE9DS19BUkFC
SUNfRVhURU5ERURfQSA9IDIxMCwgLypbMDhBMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA0OSAq
LwotICAgIFVCTE9DS19BUkFCSUNfTUFUSEVNQVRJQ0FMX0FMUEhBQkVUSUNfU1lNQk9MUyA9IDIx
MSwgLypbMUVFMDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNDkgKi8KLSAgICBVQkxPQ0tfQ0hB
S01BID0gMjEyLCAvKlsxMTEwMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA0OSAqLwotICAgIFVC
TE9DS19NRUVURUlfTUFZRUtfRVhURU5TSU9OUyA9IDIxMywgLypbQUFFMF0qLwotICAgIC8qKiBA
c3RhYmxlIElDVSA0OSAqLwotICAgIFVCTE9DS19NRVJPSVRJQ19DVVJTSVZFID0gMjE0LCAvKlsx
MDlBMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA0OSAqLwotICAgIFVCTE9DS19NRVJPSVRJQ19I
SUVST0dMWVBIUyA9IDIxNSwgLypbMTA5ODBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNDkgKi8K
LSAgICBVQkxPQ0tfTUlBTyA9IDIxNiwgLypbMTZGMDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1Ug
NDkgKi8KLSAgICBVQkxPQ0tfU0hBUkFEQSA9IDIxNywgLypbMTExODBdKi8KLSAgICAvKiogQHN0
YWJsZSBJQ1UgNDkgKi8KLSAgICBVQkxPQ0tfU09SQV9TT01QRU5HID0gMjE4LCAvKlsxMTBEMF0q
LwotICAgIC8qKiBAc3RhYmxlIElDVSA0OSAqLwotICAgIFVCTE9DS19TVU5EQU5FU0VfU1VQUExF
TUVOVCA9IDIxOSwgLypbMUNDMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA0OSAqLwotICAgIFVC
TE9DS19UQUtSSSA9IDIyMCwgLypbMTE2ODBdKi8KLQotICAgIC8qIE5ldyBibG9ja3MgaW4gVW5p
Y29kZSA3LjAgKi8KLQotICAgIC8qKiBAc3RhYmxlIElDVSA1NCAqLwotICAgIFVCTE9DS19CQVNT
QV9WQUggPSAyMjEsIC8qWzE2QUQwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDU0ICovCi0gICAg
VUJMT0NLX0NBVUNBU0lBTl9BTEJBTklBTiA9IDIyMiwgLypbMTA1MzBdKi8KLSAgICAvKiogQHN0
YWJsZSBJQ1UgNTQgKi8KLSAgICBVQkxPQ0tfQ09QVElDX0VQQUNUX05VTUJFUlMgPSAyMjMsIC8q
WzEwMkUwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDU0ICovCi0gICAgVUJMT0NLX0NPTUJJTklO
R19ESUFDUklUSUNBTF9NQVJLU19FWFRFTkRFRCA9IDIyNCwgLypbMUFCMF0qLwotICAgIC8qKiBA
c3RhYmxlIElDVSA1NCAqLwotICAgIFVCTE9DS19EVVBMT1lBTiA9IDIyNSwgLypbMUJDMDBdKi8K
LSAgICAvKiogQHN0YWJsZSBJQ1UgNTQgKi8KLSAgICBVQkxPQ0tfRUxCQVNBTiA9IDIyNiwgLypb
MTA1MDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNTQgKi8KLSAgICBVQkxPQ0tfR0VPTUVUUklD
X1NIQVBFU19FWFRFTkRFRCA9IDIyNywgLypbMUY3ODBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1Ug
NTQgKi8KLSAgICBVQkxPQ0tfR1JBTlRIQSA9IDIyOCwgLypbMTEzMDBdKi8KLSAgICAvKiogQHN0
YWJsZSBJQ1UgNTQgKi8KLSAgICBVQkxPQ0tfS0hPSktJID0gMjI5LCAvKlsxMTIwMF0qLwotICAg
IC8qKiBAc3RhYmxlIElDVSA1NCAqLwotICAgIFVCTE9DS19LSFVEQVdBREkgPSAyMzAsIC8qWzEx
MkIwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDU0ICovCi0gICAgVUJMT0NLX0xBVElOX0VYVEVO
REVEX0UgPSAyMzEsIC8qW0FCMzBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNTQgKi8KLSAgICBV
QkxPQ0tfTElORUFSX0EgPSAyMzIsIC8qWzEwNjAwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDU0
ICovCi0gICAgVUJMT0NLX01BSEFKQU5JID0gMjMzLCAvKlsxMTE1MF0qLwotICAgIC8qKiBAc3Rh
YmxlIElDVSA1NCAqLwotICAgIFVCTE9DS19NQU5JQ0hBRUFOID0gMjM0LCAvKlsxMEFDMF0qLwot
ICAgIC8qKiBAc3RhYmxlIElDVSA1NCAqLwotICAgIFVCTE9DS19NRU5ERV9LSUtBS1VJID0gMjM1
LCAvKlsxRTgwMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA1NCAqLwotICAgIFVCTE9DS19NT0RJ
ID0gMjM2LCAvKlsxMTYwMF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA1NCAqLwotICAgIFVCTE9D
S19NUk8gPSAyMzcsIC8qWzE2QTQwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDU0ICovCi0gICAg
VUJMT0NLX01ZQU5NQVJfRVhURU5ERURfQiA9IDIzOCwgLypbQTlFMF0qLwotICAgIC8qKiBAc3Rh
YmxlIElDVSA1NCAqLwotICAgIFVCTE9DS19OQUJBVEFFQU4gPSAyMzksIC8qWzEwODgwXSovCi0g
ICAgLyoqIEBzdGFibGUgSUNVIDU0ICovCi0gICAgVUJMT0NLX09MRF9OT1JUSF9BUkFCSUFOID0g
MjQwLCAvKlsxMEE4MF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA1NCAqLwotICAgIFVCTE9DS19P
TERfUEVSTUlDID0gMjQxLCAvKlsxMDM1MF0qLwotICAgIC8qKiBAc3RhYmxlIElDVSA1NCAqLwot
ICAgIFVCTE9DS19PUk5BTUVOVEFMX0RJTkdCQVRTID0gMjQyLCAvKlsxRjY1MF0qLwotICAgIC8q
KiBAc3RhYmxlIElDVSA1NCAqLwotICAgIFVCTE9DS19QQUhBV0hfSE1PTkcgPSAyNDMsIC8qWzE2
QjAwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDU0ICovCi0gICAgVUJMT0NLX1BBTE1ZUkVORSA9
IDI0NCwgLypbMTA4NjBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNTQgKi8KLSAgICBVQkxPQ0tf
UEFVX0NJTl9IQVUgPSAyNDUsIC8qWzExQUMwXSovCi0gICAgLyoqIEBzdGFibGUgSUNVIDU0ICov
Ci0gICAgVUJMT0NLX1BTQUxURVJfUEFITEFWSSA9IDI0NiwgLypbMTBCODBdKi8KLSAgICAvKiog
QHN0YWJsZSBJQ1UgNTQgKi8KLSAgICBVQkxPQ0tfU0hPUlRIQU5EX0ZPUk1BVF9DT05UUk9MUyA9
IDI0NywgLypbMUJDQTBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNTQgKi8KLSAgICBVQkxPQ0tf
U0lEREhBTSA9IDI0OCwgLypbMTE1ODBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNTQgKi8KLSAg
ICBVQkxPQ0tfU0lOSEFMQV9BUkNIQUlDX05VTUJFUlMgPSAyNDksIC8qWzExMUUwXSovCi0gICAg
LyoqIEBzdGFibGUgSUNVIDU0ICovCi0gICAgVUJMT0NLX1NVUFBMRU1FTlRBTF9BUlJPV1NfQyA9
IDI1MCwgLypbMUY4MDBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNTQgKi8KLSAgICBVQkxPQ0tf
VElSSFVUQSA9IDI1MSwgLypbMTE0ODBdKi8KLSAgICAvKiogQHN0YWJsZSBJQ1UgNTQgKi8KLSAg
ICBVQkxPQ0tfV0FSQU5HX0NJVEkgPSAyNTIsIC8qWzExOEEwXSovCi0KLSAgICAvKiogQHN0YWJs
ZSBJQ1UgMi4wICovCi0gICAgVUJMT0NLX0NPVU5UID0gMjUzLAotCi0gICAgLyoqIEBzdGFibGUg
SUNVIDIuMCAqLwotICAgIFVCTE9DS19JTlZBTElEX0NPREU9LTEKLX07Ci0KLS8qKiBAc3RhYmxl
IElDVSAyLjAgKi8KLXR5cGVkZWYgZW51bSBVQmxvY2tDb2RlIFVCbG9ja0NvZGU7Ci0KLS8qKgot
ICogRWFzdCBBc2lhbiBXaWR0aCBjb25zdGFudHMuCi0gKgotICogQHNlZSBVQ0hBUl9FQVNUX0FT
SUFOX1dJRFRICi0gKiBAc2VlIHVfZ2V0SW50UHJvcGVydHlWYWx1ZQotICogQHN0YWJsZSBJQ1Ug
Mi4yCi0gKi8KLXR5cGVkZWYgZW51bSBVRWFzdEFzaWFuV2lkdGggewotICAgIC8qCi0gICAgICog
Tm90ZTogVUVhc3RBc2lhbldpZHRoIGNvbnN0YW50cyBhcmUgcGFyc2VkIGJ5IHByZXBhcnNldWNk
LnB5LgotICAgICAqIEl0IG1hdGNoZXMgbGluZXMgbGlrZQotICAgICAqICAgICBVX0VBXzxVbmlj
b2RlIEVhc3RfQXNpYW5fV2lkdGggdmFsdWUgbmFtZT4KLSAgICAgKi8KLQotICAgIFVfRUFfTkVV
VFJBTCwgICAvKltOXSovCi0gICAgVV9FQV9BTUJJR1VPVVMsIC8qW0FdKi8KLSAgICBVX0VBX0hB
TEZXSURUSCwgLypbSF0qLwotICAgIFVfRUFfRlVMTFdJRFRILCAvKltGXSovCi0gICAgVV9FQV9O
QVJST1csICAgIC8qW05hXSovCi0gICAgVV9FQV9XSURFLCAgICAgIC8qW1ddKi8KLSAgICBVX0VB
X0NPVU5UCi19IFVFYXN0QXNpYW5XaWR0aDsKLQotLyoqCi0gKiBTZWxlY3RvciBjb25zdGFudHMg
Zm9yIHVfY2hhck5hbWUoKS4KLSAqIHVfY2hhck5hbWUoKSByZXR1cm5zIHRoZSAibW9kZXJuIiBu
YW1lIG9mIGEKLSAqIFVuaWNvZGUgY2hhcmFjdGVyOyBvciB0aGUgbmFtZSB0aGF0IHdhcyBkZWZp
bmVkIGluCi0gKiBVbmljb2RlIHZlcnNpb24gMS4wLCBiZWZvcmUgdGhlIFVuaWNvZGUgc3RhbmRh
cmQgbWVyZ2VkCi0gKiB3aXRoIElTTy0xMDY0Njsgb3IgYW4gImV4dGVuZGVkIiBuYW1lIHRoYXQg
Z2l2ZXMgZWFjaAotICogVW5pY29kZSBjb2RlIHBvaW50IGEgdW5pcXVlIG5hbWUuCi0gKgotICog
QHNlZSB1X2NoYXJOYW1lCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotdHlwZWRlZiBlbnVtIFVD
aGFyTmFtZUNob2ljZSB7Ci0gICAgLyoqIFVuaWNvZGUgY2hhcmFjdGVyIG5hbWUgKE5hbWUgcHJv
cGVydHkpLiBAc3RhYmxlIElDVSAyLjAgKi8KLSAgICBVX1VOSUNPREVfQ0hBUl9OQU1FLAotI2lm
bmRlZiBVX0hJREVfREVQUkVDQVRFRF9BUEkgCi0gICAgLyoqCi0gICAgICogVGhlIFVuaWNvZGVf
MV9OYW1lIHByb3BlcnR5IHZhbHVlIHdoaWNoIGlzIG9mIGxpdHRsZSBwcmFjdGljYWwgdmFsdWUu
Ci0gICAgICogQmVnaW5uaW5nIHdpdGggSUNVIDQ5LCBJQ1UgQVBJcyByZXR1cm4gYW4gZW1wdHkg
c3RyaW5nIGZvciB0aGlzIG5hbWUgY2hvaWNlLgotICAgICAqIEBkZXByZWNhdGVkIElDVSA0OQot
ICAgICAqLwotICAgIFVfVU5JQ09ERV8xMF9DSEFSX05BTUUsCi0jZW5kaWYgIC8qIFVfSElERV9E
RVBSRUNBVEVEX0FQSSAqLwotICAgIC8qKiBTdGFuZGFyZCBvciBzeW50aGV0aWMgY2hhcmFjdGVy
IG5hbWUuIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVfRVhURU5ERURfQ0hBUl9OQU1FID0gVV9V
TklDT0RFX0NIQVJfTkFNRSsyLAotICAgIC8qKiBDb3JyZWN0ZWQgbmFtZSBmcm9tIE5hbWVBbGlh
c2VzLnR4dC4gQHN0YWJsZSBJQ1UgNC40ICovCi0gICAgVV9DSEFSX05BTUVfQUxJQVMsCi0gICAg
LyoqIEBzdGFibGUgSUNVIDIuMCAqLwotICAgIFVfQ0hBUl9OQU1FX0NIT0lDRV9DT1VOVAotfSBV
Q2hhck5hbWVDaG9pY2U7Ci0KLS8qKgotICogU2VsZWN0b3IgY29uc3RhbnRzIGZvciB1X2dldFBy
b3BlcnR5TmFtZSgpIGFuZAotICogdV9nZXRQcm9wZXJ0eVZhbHVlTmFtZSgpLiAgVGhlc2Ugc2Vs
ZWN0b3JzIGFyZSB1c2VkIHRvIGNob29zZSB3aGljaAotICogbmFtZSBpcyByZXR1cm5lZCBmb3Ig
YSBnaXZlbiBwcm9wZXJ0eSBvciB2YWx1ZS4gIEFsbCBwcm9wZXJ0aWVzIGFuZAotICogdmFsdWVz
IGhhdmUgYSBsb25nIG5hbWUuICBNb3N0IGhhdmUgYSBzaG9ydCBuYW1lLCBidXQgc29tZSBkbyBu
b3QuCi0gKiBVbmljb2RlIGFsbG93cyBmb3IgYWRkaXRpb25hbCBuYW1lcywgYmV5b25kIHRoZSBs
b25nIGFuZCBzaG9ydAotICogbmFtZSwgd2hpY2ggd291bGQgYmUgaW5kaWNhdGVkIGJ5IFVfTE9O
R19QUk9QRVJUWV9OQU1FICsgaSwgd2hlcmUKLSAqIGk9MSwgMiwuLi4KLSAqCi0gKiBAc2VlIHVf
Z2V0UHJvcGVydHlOYW1lKCkKLSAqIEBzZWUgdV9nZXRQcm9wZXJ0eVZhbHVlTmFtZSgpCi0gKiBA
c3RhYmxlIElDVSAyLjQKLSAqLwotdHlwZWRlZiBlbnVtIFVQcm9wZXJ0eU5hbWVDaG9pY2Ugewot
ICAgIFVfU0hPUlRfUFJPUEVSVFlfTkFNRSwKLSAgICBVX0xPTkdfUFJPUEVSVFlfTkFNRSwKLSAg
ICBVX1BST1BFUlRZX05BTUVfQ0hPSUNFX0NPVU5UCi19IFVQcm9wZXJ0eU5hbWVDaG9pY2U7Ci0K
LS8qKgotICogRGVjb21wb3NpdGlvbiBUeXBlIGNvbnN0YW50cy4KLSAqCi0gKiBAc2VlIFVDSEFS
X0RFQ09NUE9TSVRJT05fVFlQRQotICogQHN0YWJsZSBJQ1UgMi4yCi0gKi8KLXR5cGVkZWYgZW51
bSBVRGVjb21wb3NpdGlvblR5cGUgewotICAgIC8qCi0gICAgICogTm90ZTogVURlY29tcG9zaXRp
b25UeXBlIGNvbnN0YW50cyBhcmUgcGFyc2VkIGJ5IHByZXBhcnNldWNkLnB5LgotICAgICAqIEl0
IG1hdGNoZXMgbGluZXMgbGlrZQotICAgICAqICAgICBVX0RUXzxVbmljb2RlIERlY29tcG9zaXRp
b25fVHlwZSB2YWx1ZSBuYW1lPgotICAgICAqLwotCi0gICAgVV9EVF9OT05FLCAgICAgICAgICAg
ICAgLypbbm9uZV0qLwotICAgIFVfRFRfQ0FOT05JQ0FMLCAgICAgICAgIC8qW2Nhbl0qLwotICAg
IFVfRFRfQ09NUEFULCAgICAgICAgICAgIC8qW2NvbV0qLwotICAgIFVfRFRfQ0lSQ0xFLCAgICAg
ICAgICAgIC8qW2VuY10qLwotICAgIFVfRFRfRklOQUwsICAgICAgICAgICAgIC8qW2Zpbl0qLwot
ICAgIFVfRFRfRk9OVCwgICAgICAgICAgICAgIC8qW2ZvbnRdKi8KLSAgICBVX0RUX0ZSQUNUSU9O
LCAgICAgICAgICAvKltmcmFdKi8KLSAgICBVX0RUX0lOSVRJQUwsICAgICAgICAgICAvKltpbml0
XSovCi0gICAgVV9EVF9JU09MQVRFRCwgICAgICAgICAgLypbaXNvXSovCi0gICAgVV9EVF9NRURJ
QUwsICAgICAgICAgICAgLypbbWVkXSovCi0gICAgVV9EVF9OQVJST1csICAgICAgICAgICAgLypb
bmFyXSovCi0gICAgVV9EVF9OT0JSRUFLLCAgICAgICAgICAgLypbbmJdKi8KLSAgICBVX0RUX1NN
QUxMLCAgICAgICAgICAgICAvKltzbWxdKi8KLSAgICBVX0RUX1NRVUFSRSwgICAgICAgICAgICAv
KltzcXJdKi8KLSAgICBVX0RUX1NVQiwgICAgICAgICAgICAgICAvKltzdWJdKi8KLSAgICBVX0RU
X1NVUEVSLCAgICAgICAgICAgICAvKltzdXBdKi8KLSAgICBVX0RUX1ZFUlRJQ0FMLCAgICAgICAg
ICAvKlt2ZXJ0XSovCi0gICAgVV9EVF9XSURFLCAgICAgICAgICAgICAgLypbd2lkZV0qLwotICAg
IFVfRFRfQ09VTlQgLyogMTggKi8KLX0gVURlY29tcG9zaXRpb25UeXBlOwotCi0vKioKLSAqIEpv
aW5pbmcgVHlwZSBjb25zdGFudHMuCi0gKgotICogQHNlZSBVQ0hBUl9KT0lOSU5HX1RZUEUKLSAq
IEBzdGFibGUgSUNVIDIuMgotICovCi10eXBlZGVmIGVudW0gVUpvaW5pbmdUeXBlIHsKLSAgICAv
KgotICAgICAqIE5vdGU6IFVKb2luaW5nVHlwZSBjb25zdGFudHMgYXJlIHBhcnNlZCBieSBwcmVw
YXJzZXVjZC5weS4KLSAgICAgKiBJdCBtYXRjaGVzIGxpbmVzIGxpa2UKLSAgICAgKiAgICAgVV9K
VF88VW5pY29kZSBKb2luaW5nX1R5cGUgdmFsdWUgbmFtZT4KLSAgICAgKi8KLQotICAgIFVfSlRf
Tk9OX0pPSU5JTkcsICAgICAgIC8qW1VdKi8KLSAgICBVX0pUX0pPSU5fQ0FVU0lORywgICAgICAv
KltDXSovCi0gICAgVV9KVF9EVUFMX0pPSU5JTkcsICAgICAgLypbRF0qLwotICAgIFVfSlRfTEVG
VF9KT0lOSU5HLCAgICAgIC8qW0xdKi8KLSAgICBVX0pUX1JJR0hUX0pPSU5JTkcsICAgICAvKltS
XSovCi0gICAgVV9KVF9UUkFOU1BBUkVOVCwgICAgICAgLypbVF0qLwotICAgIFVfSlRfQ09VTlQg
LyogNiAqLwotfSBVSm9pbmluZ1R5cGU7Ci0KLS8qKgotICogSm9pbmluZyBHcm91cCBjb25zdGFu
dHMuCi0gKgotICogQHNlZSBVQ0hBUl9KT0lOSU5HX0dST1VQCi0gKiBAc3RhYmxlIElDVSAyLjIK
LSAqLwotdHlwZWRlZiBlbnVtIFVKb2luaW5nR3JvdXAgewotICAgIC8qCi0gICAgICogTm90ZTog
VUpvaW5pbmdHcm91cCBjb25zdGFudHMgYXJlIHBhcnNlZCBieSBwcmVwYXJzZXVjZC5weS4KLSAg
ICAgKiBJdCBtYXRjaGVzIGxpbmVzIGxpa2UKLSAgICAgKiAgICAgVV9KR188VW5pY29kZSBKb2lu
aW5nX0dyb3VwIHZhbHVlIG5hbWU+Ci0gICAgICovCi0KLSAgICBVX0pHX05PX0pPSU5JTkdfR1JP
VVAsCi0gICAgVV9KR19BSU4sCi0gICAgVV9KR19BTEFQSCwKLSAgICBVX0pHX0FMRUYsCi0gICAg
VV9KR19CRUgsCi0gICAgVV9KR19CRVRILAotICAgIFVfSkdfREFMLAotICAgIFVfSkdfREFMQVRI
X1JJU0gsCi0gICAgVV9KR19FLAotICAgIFVfSkdfRkVILAotICAgIFVfSkdfRklOQUxfU0VNS0FU
SCwKLSAgICBVX0pHX0dBRiwKLSAgICBVX0pHX0dBTUFMLAotICAgIFVfSkdfSEFILAotICAgIFVf
SkdfVEVIX01BUkJVVEFfR09BTCwgIC8qKjwgQHN0YWJsZSBJQ1UgNC42ICovCi0gICAgVV9KR19I
QU1aQV9PTl9IRUhfR09BTD1VX0pHX1RFSF9NQVJCVVRBX0dPQUwsCi0gICAgVV9KR19IRSwKLSAg
ICBVX0pHX0hFSCwKLSAgICBVX0pHX0hFSF9HT0FMLAotICAgIFVfSkdfSEVUSCwKLSAgICBVX0pH
X0tBRiwKLSAgICBVX0pHX0tBUEgsCi0gICAgVV9KR19LTk9UVEVEX0hFSCwKLSAgICBVX0pHX0xB
TSwKLSAgICBVX0pHX0xBTUFESCwKLSAgICBVX0pHX01FRU0sCi0gICAgVV9KR19NSU0sCi0gICAg
VV9KR19OT09OLAotICAgIFVfSkdfTlVOLAotICAgIFVfSkdfUEUsCi0gICAgVV9KR19RQUYsCi0g
ICAgVV9KR19RQVBILAotICAgIFVfSkdfUkVILAotICAgIFVfSkdfUkVWRVJTRURfUEUsCi0gICAg
VV9KR19TQUQsCi0gICAgVV9KR19TQURIRSwKLSAgICBVX0pHX1NFRU4sCi0gICAgVV9KR19TRU1L
QVRILAotICAgIFVfSkdfU0hJTiwKLSAgICBVX0pHX1NXQVNIX0tBRiwKLSAgICBVX0pHX1NZUklB
Q19XQVcsCi0gICAgVV9KR19UQUgsCi0gICAgVV9KR19UQVcsCi0gICAgVV9KR19URUhfTUFSQlVU
QSwKLSAgICBVX0pHX1RFVEgsCi0gICAgVV9KR19XQVcsCi0gICAgVV9KR19ZRUgsCi0gICAgVV9K
R19ZRUhfQkFSUkVFLAotICAgIFVfSkdfWUVIX1dJVEhfVEFJTCwKLSAgICBVX0pHX1lVREgsCi0g
ICAgVV9KR19ZVURIX0hFLAotICAgIFVfSkdfWkFJTiwKLSAgICBVX0pHX0ZFLCAgICAgICAgLyoq
PCBAc3RhYmxlIElDVSAyLjYgKi8KLSAgICBVX0pHX0tIQVBILCAgICAgLyoqPCBAc3RhYmxlIElD
VSAyLjYgKi8KLSAgICBVX0pHX1pIQUlOLCAgICAgLyoqPCBAc3RhYmxlIElDVSAyLjYgKi8KLSAg
ICBVX0pHX0JVUlVTSEFTS0lfWUVIX0JBUlJFRSwgLyoqPCBAc3RhYmxlIElDVSA0LjAgKi8KLSAg
ICBVX0pHX0ZBUlNJX1lFSCwgLyoqPCBAc3RhYmxlIElDVSA0LjQgKi8KLSAgICBVX0pHX05ZQSwg
ICAgICAgLyoqPCBAc3RhYmxlIElDVSA0LjQgKi8KLSAgICBVX0pHX1JPSElOR1lBX1lFSCwgIC8q
KjwgQHN0YWJsZSBJQ1UgNDkgKi8KLSAgICBVX0pHX01BTklDSEFFQU5fQUxFUEgsICAvKio8IEBz
dGFibGUgSUNVIDU0ICovCi0gICAgVV9KR19NQU5JQ0hBRUFOX0FZSU4sICAvKio8IEBzdGFibGUg
SUNVIDU0ICovCi0gICAgVV9KR19NQU5JQ0hBRUFOX0JFVEgsICAvKio8IEBzdGFibGUgSUNVIDU0
ICovCi0gICAgVV9KR19NQU5JQ0hBRUFOX0RBTEVUSCwgIC8qKjwgQHN0YWJsZSBJQ1UgNTQgKi8K
LSAgICBVX0pHX01BTklDSEFFQU5fREhBTUVESCwgIC8qKjwgQHN0YWJsZSBJQ1UgNTQgKi8KLSAg
ICBVX0pHX01BTklDSEFFQU5fRklWRSwgIC8qKjwgQHN0YWJsZSBJQ1UgNTQgKi8KLSAgICBVX0pH
X01BTklDSEFFQU5fR0lNRUwsICAvKio8IEBzdGFibGUgSUNVIDU0ICovCi0gICAgVV9KR19NQU5J
Q0hBRUFOX0hFVEgsICAvKio8IEBzdGFibGUgSUNVIDU0ICovCi0gICAgVV9KR19NQU5JQ0hBRUFO
X0hVTkRSRUQsICAvKio8IEBzdGFibGUgSUNVIDU0ICovCi0gICAgVV9KR19NQU5JQ0hBRUFOX0tB
UEgsICAvKio8IEBzdGFibGUgSUNVIDU0ICovCi0gICAgVV9KR19NQU5JQ0hBRUFOX0xBTUVESCwg
IC8qKjwgQHN0YWJsZSBJQ1UgNTQgKi8KLSAgICBVX0pHX01BTklDSEFFQU5fTUVNLCAgLyoqPCBA
c3RhYmxlIElDVSA1NCAqLwotICAgIFVfSkdfTUFOSUNIQUVBTl9OVU4sICAvKio8IEBzdGFibGUg
SUNVIDU0ICovCi0gICAgVV9KR19NQU5JQ0hBRUFOX09ORSwgIC8qKjwgQHN0YWJsZSBJQ1UgNTQg
Ki8KLSAgICBVX0pHX01BTklDSEFFQU5fUEUsICAvKio8IEBzdGFibGUgSUNVIDU0ICovCi0gICAg
VV9KR19NQU5JQ0hBRUFOX1FPUEgsICAvKio8IEBzdGFibGUgSUNVIDU0ICovCi0gICAgVV9KR19N
QU5JQ0hBRUFOX1JFU0gsICAvKio8IEBzdGFibGUgSUNVIDU0ICovCi0gICAgVV9KR19NQU5JQ0hB
RUFOX1NBREhFLCAgLyoqPCBAc3RhYmxlIElDVSA1NCAqLwotICAgIFVfSkdfTUFOSUNIQUVBTl9T
QU1FS0gsICAvKio8IEBzdGFibGUgSUNVIDU0ICovCi0gICAgVV9KR19NQU5JQ0hBRUFOX1RBVywg
IC8qKjwgQHN0YWJsZSBJQ1UgNTQgKi8KLSAgICBVX0pHX01BTklDSEFFQU5fVEVOLCAgLyoqPCBA
c3RhYmxlIElDVSA1NCAqLwotICAgIFVfSkdfTUFOSUNIQUVBTl9URVRILCAgLyoqPCBAc3RhYmxl
IElDVSA1NCAqLwotICAgIFVfSkdfTUFOSUNIQUVBTl9USEFNRURILCAgLyoqPCBAc3RhYmxlIElD
VSA1NCAqLwotICAgIFVfSkdfTUFOSUNIQUVBTl9UV0VOVFksICAvKio8IEBzdGFibGUgSUNVIDU0
ICovCi0gICAgVV9KR19NQU5JQ0hBRUFOX1dBVywgIC8qKjwgQHN0YWJsZSBJQ1UgNTQgKi8KLSAg
ICBVX0pHX01BTklDSEFFQU5fWU9ESCwgIC8qKjwgQHN0YWJsZSBJQ1UgNTQgKi8KLSAgICBVX0pH
X01BTklDSEFFQU5fWkFZSU4sICAvKio8IEBzdGFibGUgSUNVIDU0ICovCi0gICAgVV9KR19TVFJB
SUdIVF9XQVcsICAvKio8IEBzdGFibGUgSUNVIDU0ICovCi0gICAgVV9KR19DT1VOVAotfSBVSm9p
bmluZ0dyb3VwOwotCi0vKioKLSAqIEdyYXBoZW1lIENsdXN0ZXIgQnJlYWsgY29uc3RhbnRzLgot
ICoKLSAqIEBzZWUgVUNIQVJfR1JBUEhFTUVfQ0xVU1RFUl9CUkVBSwotICogQHN0YWJsZSBJQ1Ug
My40Ci0gKi8KLXR5cGVkZWYgZW51bSBVR3JhcGhlbWVDbHVzdGVyQnJlYWsgewotICAgIC8qCi0g
ICAgICogTm90ZTogVUdyYXBoZW1lQ2x1c3RlckJyZWFrIGNvbnN0YW50cyBhcmUgcGFyc2VkIGJ5
IHByZXBhcnNldWNkLnB5LgotICAgICAqIEl0IG1hdGNoZXMgbGluZXMgbGlrZQotICAgICAqICAg
ICBVX0dDQl88VW5pY29kZSBHcmFwaGVtZV9DbHVzdGVyX0JyZWFrIHZhbHVlIG5hbWU+Ci0gICAg
ICovCi0KLSAgICBVX0dDQl9PVEhFUiA9IDAsICAgICAgICAgICAgLypbWFhdKi8KLSAgICBVX0dD
Ql9DT05UUk9MID0gMSwgICAgICAgICAgLypbQ05dKi8KLSAgICBVX0dDQl9DUiA9IDIsICAgICAg
ICAgICAgICAgLypbQ1JdKi8KLSAgICBVX0dDQl9FWFRFTkQgPSAzLCAgICAgICAgICAgLypbRVhd
Ki8KLSAgICBVX0dDQl9MID0gNCwgICAgICAgICAgICAgICAgLypbTF0qLwotICAgIFVfR0NCX0xG
ID0gNSwgICAgICAgICAgICAgICAvKltMRl0qLwotICAgIFVfR0NCX0xWID0gNiwgICAgICAgICAg
ICAgICAvKltMVl0qLwotICAgIFVfR0NCX0xWVCA9IDcsICAgICAgICAgICAgICAvKltMVlRdKi8K
LSAgICBVX0dDQl9UID0gOCwgICAgICAgICAgICAgICAgLypbVF0qLwotICAgIFVfR0NCX1YgPSA5
LCAgICAgICAgICAgICAgICAvKltWXSovCi0gICAgVV9HQ0JfU1BBQ0lOR19NQVJLID0gMTAsICAg
IC8qW1NNXSovIC8qIGZyb20gaGVyZSBvbjogbmV3IGluIFVuaWNvZGUgNS4xL0lDVSA0LjAgKi8K
LSAgICBVX0dDQl9QUkVQRU5EID0gMTEsICAgICAgICAgLypbUFBdKi8KLSAgICBVX0dDQl9SRUdJ
T05BTF9JTkRJQ0FUT1IgPSAxMiwgIC8qW1JJXSovIC8qIG5ldyBpbiBVbmljb2RlIDYuMi9JQ1Ug
NTAgKi8KLSAgICBVX0dDQl9DT1VOVCA9IDEzCi19IFVHcmFwaGVtZUNsdXN0ZXJCcmVhazsKLQot
LyoqCi0gKiBXb3JkIEJyZWFrIGNvbnN0YW50cy4KLSAqIChVV29yZEJyZWFrIGlzIGEgcHJlLWV4
aXN0aW5nIGVudW0gdHlwZSBpbiB1YnJrLmggZm9yIHdvcmQgYnJlYWsgc3RhdHVzIHRhZ3MuKQot
ICoKLSAqIEBzZWUgVUNIQVJfV09SRF9CUkVBSwotICogQHN0YWJsZSBJQ1UgMy40Ci0gKi8KLXR5
cGVkZWYgZW51bSBVV29yZEJyZWFrVmFsdWVzIHsKLSAgICAvKgotICAgICAqIE5vdGU6IFVXb3Jk
QnJlYWtWYWx1ZXMgY29uc3RhbnRzIGFyZSBwYXJzZWQgYnkgcHJlcGFyc2V1Y2QucHkuCi0gICAg
ICogSXQgbWF0Y2hlcyBsaW5lcyBsaWtlCi0gICAgICogICAgIFVfV0JfPFVuaWNvZGUgV29yZF9C
cmVhayB2YWx1ZSBuYW1lPgotICAgICAqLwotCi0gICAgVV9XQl9PVEhFUiA9IDAsICAgICAgICAg
ICAgIC8qW1hYXSovCi0gICAgVV9XQl9BTEVUVEVSID0gMSwgICAgICAgICAgIC8qW0xFXSovCi0g
ICAgVV9XQl9GT1JNQVQgPSAyLCAgICAgICAgICAgIC8qW0ZPXSovCi0gICAgVV9XQl9LQVRBS0FO
QSA9IDMsICAgICAgICAgIC8qW0tBXSovCi0gICAgVV9XQl9NSURMRVRURVIgPSA0LCAgICAgICAg
IC8qW01MXSovCi0gICAgVV9XQl9NSUROVU0gPSA1LCAgICAgICAgICAgIC8qW01OXSovCi0gICAg
VV9XQl9OVU1FUklDID0gNiwgICAgICAgICAgIC8qW05VXSovCi0gICAgVV9XQl9FWFRFTkROVU1M
RVQgPSA3LCAgICAgIC8qW0VYXSovCi0gICAgVV9XQl9DUiA9IDgsICAgICAgICAgICAgICAgIC8q
W0NSXSovIC8qIGZyb20gaGVyZSBvbjogbmV3IGluIFVuaWNvZGUgNS4xL0lDVSA0LjAgKi8KLSAg
ICBVX1dCX0VYVEVORCA9IDksICAgICAgICAgICAgLypbRXh0ZW5kXSovCi0gICAgVV9XQl9MRiA9
IDEwLCAgICAgICAgICAgICAgIC8qW0xGXSovCi0gICAgVV9XQl9NSUROVU1MRVQgPTExLCAgICAg
ICAgIC8qW01CXSovCi0gICAgVV9XQl9ORVdMSU5FID0xMiwgICAgICAgICAgIC8qW05MXSovCi0g
ICAgVV9XQl9SRUdJT05BTF9JTkRJQ0FUT1IgPSAxMywgICAvKltSSV0qLyAvKiBuZXcgaW4gVW5p
Y29kZSA2LjIvSUNVIDUwICovCi0gICAgVV9XQl9IRUJSRVdfTEVUVEVSID0gMTQsICAgIC8qW0hM
XSovIC8qIGZyb20gaGVyZSBvbjogbmV3IGluIFVuaWNvZGUgNi4zL0lDVSA1MiAqLwotICAgIFVf
V0JfU0lOR0xFX1FVT1RFID0gMTUsICAgICAvKltTUV0qLwotICAgIFVfV0JfRE9VQkxFX1FVT1RF
ID0gMTYsICAgICAvKltEUV0qLwotICAgIFVfV0JfQ09VTlQgPSAxNwotfSBVV29yZEJyZWFrVmFs
dWVzOwotCi0vKioKLSAqIFNlbnRlbmNlIEJyZWFrIGNvbnN0YW50cy4KLSAqCi0gKiBAc2VlIFVD
SEFSX1NFTlRFTkNFX0JSRUFLCi0gKiBAc3RhYmxlIElDVSAzLjQKLSAqLwotdHlwZWRlZiBlbnVt
IFVTZW50ZW5jZUJyZWFrIHsKLSAgICAvKgotICAgICAqIE5vdGU6IFVTZW50ZW5jZUJyZWFrIGNv
bnN0YW50cyBhcmUgcGFyc2VkIGJ5IHByZXBhcnNldWNkLnB5LgotICAgICAqIEl0IG1hdGNoZXMg
bGluZXMgbGlrZQotICAgICAqICAgICBVX1NCXzxVbmljb2RlIFNlbnRlbmNlX0JyZWFrIHZhbHVl
IG5hbWU+Ci0gICAgICovCi0KLSAgICBVX1NCX09USEVSID0gMCwgICAgICAgICAgICAgLypbWFhd
Ki8KLSAgICBVX1NCX0FURVJNID0gMSwgICAgICAgICAgICAgLypbQVRdKi8KLSAgICBVX1NCX0NM
T1NFID0gMiwgICAgICAgICAgICAgLypbQ0xdKi8KLSAgICBVX1NCX0ZPUk1BVCA9IDMsICAgICAg
ICAgICAgLypbRk9dKi8KLSAgICBVX1NCX0xPV0VSID0gNCwgICAgICAgICAgICAgLypbTE9dKi8K
LSAgICBVX1NCX05VTUVSSUMgPSA1LCAgICAgICAgICAgLypbTlVdKi8KLSAgICBVX1NCX09MRVRU
RVIgPSA2LCAgICAgICAgICAgLypbTEVdKi8KLSAgICBVX1NCX1NFUCA9IDcsICAgICAgICAgICAg
ICAgLypbU0VdKi8KLSAgICBVX1NCX1NQID0gOCwgICAgICAgICAgICAgICAgLypbU1BdKi8KLSAg
ICBVX1NCX1NURVJNID0gOSwgICAgICAgICAgICAgLypbU1RdKi8KLSAgICBVX1NCX1VQUEVSID0g
MTAsICAgICAgICAgICAgLypbVVBdKi8KLSAgICBVX1NCX0NSID0gMTEsICAgICAgICAgICAgICAg
LypbQ1JdKi8gLyogZnJvbSBoZXJlIG9uOiBuZXcgaW4gVW5pY29kZSA1LjEvSUNVIDQuMCAqLwot
ICAgIFVfU0JfRVhURU5EID0gMTIsICAgICAgICAgICAvKltFWF0qLwotICAgIFVfU0JfTEYgPSAx
MywgICAgICAgICAgICAgICAvKltMRl0qLwotICAgIFVfU0JfU0NPTlRJTlVFID0gMTQsICAgICAg
ICAvKltTQ10qLwotICAgIFVfU0JfQ09VTlQgPSAxNQotfSBVU2VudGVuY2VCcmVhazsKLQotLyoq
Ci0gKiBMaW5lIEJyZWFrIGNvbnN0YW50cy4KLSAqCi0gKiBAc2VlIFVDSEFSX0xJTkVfQlJFQUsK
LSAqIEBzdGFibGUgSUNVIDIuMgotICovCi10eXBlZGVmIGVudW0gVUxpbmVCcmVhayB7Ci0gICAg
LyoKLSAgICAgKiBOb3RlOiBVTGluZUJyZWFrIGNvbnN0YW50cyBhcmUgcGFyc2VkIGJ5IHByZXBh
cnNldWNkLnB5LgotICAgICAqIEl0IG1hdGNoZXMgbGluZXMgbGlrZQotICAgICAqICAgICBVX0xC
XzxVbmljb2RlIExpbmVfQnJlYWsgdmFsdWUgbmFtZT4KLSAgICAgKi8KLQotICAgIFVfTEJfVU5L
Tk9XTiA9IDAsICAgICAgICAgICAvKltYWF0qLwotICAgIFVfTEJfQU1CSUdVT1VTID0gMSwgICAg
ICAgICAvKltBSV0qLwotICAgIFVfTEJfQUxQSEFCRVRJQyA9IDIsICAgICAgICAvKltBTF0qLwot
ICAgIFVfTEJfQlJFQUtfQk9USCA9IDMsICAgICAgICAvKltCMl0qLwotICAgIFVfTEJfQlJFQUtf
QUZURVIgPSA0LCAgICAgICAvKltCQV0qLwotICAgIFVfTEJfQlJFQUtfQkVGT1JFID0gNSwgICAg
ICAvKltCQl0qLwotICAgIFVfTEJfTUFOREFUT1JZX0JSRUFLID0gNiwgICAvKltCS10qLwotICAg
IFVfTEJfQ09OVElOR0VOVF9CUkVBSyA9IDcsICAvKltDQl0qLwotICAgIFVfTEJfQ0xPU0VfUFVO
Q1RVQVRJT04gPSA4LCAvKltDTF0qLwotICAgIFVfTEJfQ09NQklOSU5HX01BUksgPSA5LCAgICAv
KltDTV0qLwotICAgIFVfTEJfQ0FSUklBR0VfUkVUVVJOID0gMTAsICAgLypbQ1JdKi8KLSAgICBV
X0xCX0VYQ0xBTUFUSU9OID0gMTEsICAgICAgIC8qW0VYXSovCi0gICAgVV9MQl9HTFVFID0gMTIs
ICAgICAgICAgICAgICAvKltHTF0qLwotICAgIFVfTEJfSFlQSEVOID0gMTMsICAgICAgICAgICAg
LypbSFldKi8KLSAgICBVX0xCX0lERU9HUkFQSElDID0gMTQsICAgICAgIC8qW0lEXSovCi0gICAg
LyoqIFJlbmFtZWQgZnJvbSB0aGUgbWlzc3BlbGxlZCAiaW5zZXBlcmFibGUiIGluIFVuaWNvZGUg
NC4wLjEvSUNVIDMuMCBAc3RhYmxlIElDVSAzLjAgKi8KLSAgICBVX0xCX0lOU0VQQVJBQkxFID0g
MTUsICAgICAgIC8qW0lOXSovCi0gICAgVV9MQl9JTlNFUEVSQUJMRSA9IFVfTEJfSU5TRVBBUkFC
TEUsCi0gICAgVV9MQl9JTkZJWF9OVU1FUklDID0gMTYsICAgICAvKltJU10qLwotICAgIFVfTEJf
TElORV9GRUVEID0gMTcsICAgICAgICAgLypbTEZdKi8KLSAgICBVX0xCX05PTlNUQVJURVIgPSAx
OCwgICAgICAgIC8qW05TXSovCi0gICAgVV9MQl9OVU1FUklDID0gMTksICAgICAgICAgICAvKltO
VV0qLwotICAgIFVfTEJfT1BFTl9QVU5DVFVBVElPTiA9IDIwLCAgLypbT1BdKi8KLSAgICBVX0xC
X1BPU1RGSVhfTlVNRVJJQyA9IDIxLCAgIC8qW1BPXSovCi0gICAgVV9MQl9QUkVGSVhfTlVNRVJJ
QyA9IDIyLCAgICAvKltQUl0qLwotICAgIFVfTEJfUVVPVEFUSU9OID0gMjMsICAgICAgICAgLypb
UVVdKi8KLSAgICBVX0xCX0NPTVBMRVhfQ09OVEVYVCA9IDI0LCAgIC8qW1NBXSovCi0gICAgVV9M
Ql9TVVJST0dBVEUgPSAyNSwgICAgICAgICAvKltTR10qLwotICAgIFVfTEJfU1BBQ0UgPSAyNiwg
ICAgICAgICAgICAgLypbU1BdKi8KLSAgICBVX0xCX0JSRUFLX1NZTUJPTFMgPSAyNywgICAgIC8q
W1NZXSovCi0gICAgVV9MQl9aV1NQQUNFID0gMjgsICAgICAgICAgICAvKltaV10qLwotICAgIFVf
TEJfTkVYVF9MSU5FID0gMjksICAgICAgICAgLypbTkxdKi8gLyogZnJvbSBoZXJlIG9uOiBuZXcg
aW4gVW5pY29kZSA0L0lDVSAyLjYgKi8KLSAgICBVX0xCX1dPUkRfSk9JTkVSID0gMzAsICAgICAg
IC8qW1dKXSovCi0gICAgVV9MQl9IMiA9IDMxLCAgICAgICAgICAgICAgICAvKltIMl0qLyAvKiBm
cm9tIGhlcmUgb246IG5ldyBpbiBVbmljb2RlIDQuMS9JQ1UgMy40ICovCi0gICAgVV9MQl9IMyA9
IDMyLCAgICAgICAgICAgICAgICAvKltIM10qLwotICAgIFVfTEJfSkwgPSAzMywgICAgICAgICAg
ICAgICAgLypbSkxdKi8KLSAgICBVX0xCX0pUID0gMzQsICAgICAgICAgICAgICAgIC8qW0pUXSov
Ci0gICAgVV9MQl9KViA9IDM1LCAgICAgICAgICAgICAgICAvKltKVl0qLwotICAgIFVfTEJfQ0xP
U0VfUEFSRU5USEVTSVMgPSAzNiwgLypbQ1BdKi8gLyogbmV3IGluIFVuaWNvZGUgNS4yL0lDVSA0
LjQgKi8KLSAgICBVX0xCX0NPTkRJVElPTkFMX0pBUEFORVNFX1NUQVJURVIgPSAzNywvKltDSl0q
LyAvKiBuZXcgaW4gVW5pY29kZSA2LjEvSUNVIDQ5ICovCi0gICAgVV9MQl9IRUJSRVdfTEVUVEVS
ID0gMzgsICAgICAvKltITF0qLyAvKiBuZXcgaW4gVW5pY29kZSA2LjEvSUNVIDQ5ICovCi0gICAg
VV9MQl9SRUdJT05BTF9JTkRJQ0FUT1IgPSAzOSwvKltSSV0qLyAvKiBuZXcgaW4gVW5pY29kZSA2
LjIvSUNVIDUwICovCi0gICAgVV9MQl9DT1VOVCA9IDQwCi19IFVMaW5lQnJlYWs7Ci0KLS8qKgot
ICogTnVtZXJpYyBUeXBlIGNvbnN0YW50cy4KLSAqCi0gKiBAc2VlIFVDSEFSX05VTUVSSUNfVFlQ
RQotICogQHN0YWJsZSBJQ1UgMi4yCi0gKi8KLXR5cGVkZWYgZW51bSBVTnVtZXJpY1R5cGUgewot
ICAgIC8qCi0gICAgICogTm90ZTogVU51bWVyaWNUeXBlIGNvbnN0YW50cyBhcmUgcGFyc2VkIGJ5
IHByZXBhcnNldWNkLnB5LgotICAgICAqIEl0IG1hdGNoZXMgbGluZXMgbGlrZQotICAgICAqICAg
ICBVX05UXzxVbmljb2RlIE51bWVyaWNfVHlwZSB2YWx1ZSBuYW1lPgotICAgICAqLwotCi0gICAg
VV9OVF9OT05FLCAgICAgICAgICAgICAgLypbTm9uZV0qLwotICAgIFVfTlRfREVDSU1BTCwgICAg
ICAgICAgIC8qW2RlXSovCi0gICAgVV9OVF9ESUdJVCwgICAgICAgICAgICAgLypbZGldKi8KLSAg
ICBVX05UX05VTUVSSUMsICAgICAgICAgICAvKltudV0qLwotICAgIFVfTlRfQ09VTlQKLX0gVU51
bWVyaWNUeXBlOwotCi0vKioKLSAqIEhhbmd1bCBTeWxsYWJsZSBUeXBlIGNvbnN0YW50cy4KLSAq
Ci0gKiBAc2VlIFVDSEFSX0hBTkdVTF9TWUxMQUJMRV9UWVBFCi0gKiBAc3RhYmxlIElDVSAyLjYK
LSAqLwotdHlwZWRlZiBlbnVtIFVIYW5ndWxTeWxsYWJsZVR5cGUgewotICAgIC8qCi0gICAgICog
Tm90ZTogVUhhbmd1bFN5bGxhYmxlVHlwZSBjb25zdGFudHMgYXJlIHBhcnNlZCBieSBwcmVwYXJz
ZXVjZC5weS4KLSAgICAgKiBJdCBtYXRjaGVzIGxpbmVzIGxpa2UKLSAgICAgKiAgICAgVV9IU1Rf
PFVuaWNvZGUgSGFuZ3VsX1N5bGxhYmxlX1R5cGUgdmFsdWUgbmFtZT4KLSAgICAgKi8KLQotICAg
IFVfSFNUX05PVF9BUFBMSUNBQkxFLCAgIC8qW05BXSovCi0gICAgVV9IU1RfTEVBRElOR19KQU1P
LCAgICAgLypbTF0qLwotICAgIFVfSFNUX1ZPV0VMX0pBTU8sICAgICAgIC8qW1ZdKi8KLSAgICBV
X0hTVF9UUkFJTElOR19KQU1PLCAgICAvKltUXSovCi0gICAgVV9IU1RfTFZfU1lMTEFCTEUsICAg
ICAgLypbTFZdKi8KLSAgICBVX0hTVF9MVlRfU1lMTEFCTEUsICAgICAvKltMVlRdKi8KLSAgICBV
X0hTVF9DT1VOVAotfSBVSGFuZ3VsU3lsbGFibGVUeXBlOwotCi0vKioKLSAqIENoZWNrIGEgYmlu
YXJ5IFVuaWNvZGUgcHJvcGVydHkgZm9yIGEgY29kZSBwb2ludC4KLSAqCi0gKiBVbmljb2RlLCBl
c3BlY2lhbGx5IGluIHZlcnNpb24gMy4yLCBkZWZpbmVzIG1hbnkgbW9yZSBwcm9wZXJ0aWVzIHRo
YW4gdGhlCi0gKiBvcmlnaW5hbCBzZXQgaW4gVW5pY29kZURhdGEudHh0LgotICoKLSAqIFRoZSBw
cm9wZXJ0aWVzIEFQSXMgYXJlIGludGVuZGVkIHRvIHJlZmxlY3QgVW5pY29kZSBwcm9wZXJ0aWVz
IGFzIGRlZmluZWQKLSAqIGluIHRoZSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSAoVUNEKSBh
bmQgVW5pY29kZSBUZWNobmljYWwgUmVwb3J0cyAoVVRSKS4KLSAqIEZvciBkZXRhaWxzIGFib3V0
IHRoZSBwcm9wZXJ0aWVzIHNlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3VjZC8gLgotICogRm9y
IG5hbWVzIG9mIFVuaWNvZGUgcHJvcGVydGllcyBzZWUgdGhlIFVDRCBmaWxlIFByb3BlcnR5QWxp
YXNlcy50eHQuCi0gKgotICogSW1wb3J0YW50OiBJZiBJQ1UgaXMgYnVpbHQgd2l0aCBVQ0QgZmls
ZXMgZnJvbSBVbmljb2RlIHZlcnNpb25zIGJlbG93IDMuMiwKLSAqIHRoZW4gcHJvcGVydGllcyBt
YXJrZWQgd2l0aCAibmV3IGluIFVuaWNvZGUgMy4yIiBhcmUgbm90IG9yIG5vdCBmdWxseSBhdmFp
bGFibGUuCi0gKgotICogQHBhcmFtIGMgQ29kZSBwb2ludCB0byB0ZXN0LgotICogQHBhcmFtIHdo
aWNoIFVQcm9wZXJ0eSBzZWxlY3RvciBjb25zdGFudCwgaWRlbnRpZmllcyB3aGljaCBiaW5hcnkg
cHJvcGVydHkgdG8gY2hlY2suCi0gKiAgICAgICAgTXVzdCBiZSBVQ0hBUl9CSU5BUllfU1RBUlQ8
PXdoaWNoPFVDSEFSX0JJTkFSWV9MSU1JVC4KLSAqIEByZXR1cm4gVFJVRSBvciBGQUxTRSBhY2Nv
cmRpbmcgdG8gdGhlIGJpbmFyeSBVbmljb2RlIHByb3BlcnR5IHZhbHVlIGZvciBjLgotICogICAg
ICAgICBBbHNvIEZBTFNFIGlmICd3aGljaCcgaXMgb3V0IG9mIGJvdW5kcyBvciBpZiB0aGUgVW5p
Y29kZSB2ZXJzaW9uCi0gKiAgICAgICAgIGRvZXMgbm90IGhhdmUgZGF0YSBmb3IgdGhlIHByb3Bl
cnR5IGF0IGFsbCwgb3Igbm90IGZvciB0aGlzIGNvZGUgcG9pbnQuCi0gKgotICogQHNlZSBVUHJv
cGVydHkKLSAqIEBzZWUgdV9nZXRJbnRQcm9wZXJ0eVZhbHVlCi0gKiBAc2VlIHVfZ2V0VW5pY29k
ZVZlcnNpb24KLSAqIEBzdGFibGUgSUNVIDIuMQotICovCi1VX1NUQUJMRSBVQm9vbCBVX0VYUE9S
VDIKLXVfaGFzQmluYXJ5UHJvcGVydHkoVUNoYXIzMiBjLCBVUHJvcGVydHkgd2hpY2gpOwotCi0v
KioKLSAqIENoZWNrIGlmIGEgY29kZSBwb2ludCBoYXMgdGhlIEFscGhhYmV0aWMgVW5pY29kZSBw
cm9wZXJ0eS4KLSAqIFNhbWUgYXMgdV9oYXNCaW5hcnlQcm9wZXJ0eShjLCBVQ0hBUl9BTFBIQUJF
VElDKS4KLSAqIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdV9pc2FscGhhIQotICogQHBhcmFtIGMg
Q29kZSBwb2ludCB0byB0ZXN0Ci0gKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvZGUgcG9pbnQgaGFz
IHRoZSBBbHBoYWJldGljIFVuaWNvZGUgcHJvcGVydHksIGZhbHNlIG90aGVyd2lzZQotICoKLSAq
IEBzZWUgVUNIQVJfQUxQSEFCRVRJQwotICogQHNlZSB1X2lzYWxwaGEKLSAqIEBzZWUgdV9oYXNC
aW5hcnlQcm9wZXJ0eQotICogQHN0YWJsZSBJQ1UgMi4xCi0gKi8KLVVfU1RBQkxFIFVCb29sIFVf
RVhQT1JUMgotdV9pc1VBbHBoYWJldGljKFVDaGFyMzIgYyk7Ci0KLS8qKgotICogQ2hlY2sgaWYg
YSBjb2RlIHBvaW50IGhhcyB0aGUgTG93ZXJjYXNlIFVuaWNvZGUgcHJvcGVydHkuCi0gKiBTYW1l
IGFzIHVfaGFzQmluYXJ5UHJvcGVydHkoYywgVUNIQVJfTE9XRVJDQVNFKS4KLSAqIFRoaXMgaXMg
ZGlmZmVyZW50IGZyb20gdV9pc2xvd2VyIQotICogQHBhcmFtIGMgQ29kZSBwb2ludCB0byB0ZXN0
Ci0gKiBAcmV0dXJuIHRydWUgaWYgdGhlIGNvZGUgcG9pbnQgaGFzIHRoZSBMb3dlcmNhc2UgVW5p
Y29kZSBwcm9wZXJ0eSwgZmFsc2Ugb3RoZXJ3aXNlCi0gKgotICogQHNlZSBVQ0hBUl9MT1dFUkNB
U0UKLSAqIEBzZWUgdV9pc2xvd2VyCi0gKiBAc2VlIHVfaGFzQmluYXJ5UHJvcGVydHkKLSAqIEBz
dGFibGUgSUNVIDIuMQotICovCi1VX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIKLXVfaXNVTG93ZXJj
YXNlKFVDaGFyMzIgYyk7Ci0KLS8qKgotICogQ2hlY2sgaWYgYSBjb2RlIHBvaW50IGhhcyB0aGUg
VXBwZXJjYXNlIFVuaWNvZGUgcHJvcGVydHkuCi0gKiBTYW1lIGFzIHVfaGFzQmluYXJ5UHJvcGVy
dHkoYywgVUNIQVJfVVBQRVJDQVNFKS4KLSAqIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdV9pc3Vw
cGVyIQotICogQHBhcmFtIGMgQ29kZSBwb2ludCB0byB0ZXN0Ci0gKiBAcmV0dXJuIHRydWUgaWYg
dGhlIGNvZGUgcG9pbnQgaGFzIHRoZSBVcHBlcmNhc2UgVW5pY29kZSBwcm9wZXJ0eSwgZmFsc2Ug
b3RoZXJ3aXNlCi0gKgotICogQHNlZSBVQ0hBUl9VUFBFUkNBU0UKLSAqIEBzZWUgdV9pc3VwcGVy
Ci0gKiBAc2VlIHVfaGFzQmluYXJ5UHJvcGVydHkKLSAqIEBzdGFibGUgSUNVIDIuMQotICovCi1V
X1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIKLXVfaXNVVXBwZXJjYXNlKFVDaGFyMzIgYyk7Ci0KLS8q
KgotICogQ2hlY2sgaWYgYSBjb2RlIHBvaW50IGhhcyB0aGUgV2hpdGVfU3BhY2UgVW5pY29kZSBw
cm9wZXJ0eS4KLSAqIFNhbWUgYXMgdV9oYXNCaW5hcnlQcm9wZXJ0eShjLCBVQ0hBUl9XSElURV9T
UEFDRSkuCi0gKiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGJvdGggdV9pc3NwYWNlIGFuZCB1X2lz
V2hpdGVzcGFjZSEKLSAqCi0gKiBOb3RlOiBUaGVyZSBhcmUgc2V2ZXJhbCBJQ1Ugd2hpdGVzcGFj
ZSBmdW5jdGlvbnM7IHBsZWFzZSBzZWUgdGhlIHVjaGFyLmgKLSAqIGZpbGUgZG9jdW1lbnRhdGlv
biBmb3IgYSBkZXRhaWxlZCBjb21wYXJpc29uLgotICoKLSAqIEBwYXJhbSBjIENvZGUgcG9pbnQg
dG8gdGVzdAotICogQHJldHVybiB0cnVlIGlmIHRoZSBjb2RlIHBvaW50IGhhcyB0aGUgV2hpdGVf
U3BhY2UgVW5pY29kZSBwcm9wZXJ0eSwgZmFsc2Ugb3RoZXJ3aXNlLgotICoKLSAqIEBzZWUgVUNI
QVJfV0hJVEVfU1BBQ0UKLSAqIEBzZWUgdV9pc1doaXRlc3BhY2UKLSAqIEBzZWUgdV9pc3NwYWNl
Ci0gKiBAc2VlIHVfaXNKYXZhU3BhY2VDaGFyCi0gKiBAc2VlIHVfaGFzQmluYXJ5UHJvcGVydHkK
LSAqIEBzdGFibGUgSUNVIDIuMQotICovCi1VX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIKLXVfaXNV
V2hpdGVTcGFjZShVQ2hhcjMyIGMpOwotCi0vKioKLSAqIEdldCB0aGUgcHJvcGVydHkgdmFsdWUg
Zm9yIGFuIGVudW1lcmF0ZWQgb3IgaW50ZWdlciBVbmljb2RlIHByb3BlcnR5IGZvciBhIGNvZGUg
cG9pbnQuCi0gKiBBbHNvIHJldHVybnMgYmluYXJ5IGFuZCBtYXNrIHByb3BlcnR5IHZhbHVlcy4K
LSAqCi0gKiBVbmljb2RlLCBlc3BlY2lhbGx5IGluIHZlcnNpb24gMy4yLCBkZWZpbmVzIG1hbnkg
bW9yZSBwcm9wZXJ0aWVzIHRoYW4gdGhlCi0gKiBvcmlnaW5hbCBzZXQgaW4gVW5pY29kZURhdGEu
dHh0LgotICoKLSAqIFRoZSBwcm9wZXJ0aWVzIEFQSXMgYXJlIGludGVuZGVkIHRvIHJlZmxlY3Qg
VW5pY29kZSBwcm9wZXJ0aWVzIGFzIGRlZmluZWQKLSAqIGluIHRoZSBVbmljb2RlIENoYXJhY3Rl
ciBEYXRhYmFzZSAoVUNEKSBhbmQgVW5pY29kZSBUZWNobmljYWwgUmVwb3J0cyAoVVRSKS4KLSAq
IEZvciBkZXRhaWxzIGFib3V0IHRoZSBwcm9wZXJ0aWVzIHNlZSBodHRwOi8vd3d3LnVuaWNvZGUu
b3JnLyAuCi0gKiBGb3IgbmFtZXMgb2YgVW5pY29kZSBwcm9wZXJ0aWVzIHNlZSB0aGUgVUNEIGZp
bGUgUHJvcGVydHlBbGlhc2VzLnR4dC4KLSAqCi0gKiBTYW1wbGUgdXNhZ2U6Ci0gKiBVRWFzdEFz
aWFuV2lkdGggZWE9KFVFYXN0QXNpYW5XaWR0aCl1X2dldEludFByb3BlcnR5VmFsdWUoYywgVUNI
QVJfRUFTVF9BU0lBTl9XSURUSCk7Ci0gKiBVQm9vbCBiPShVQm9vbCl1X2dldEludFByb3BlcnR5
VmFsdWUoYywgVUNIQVJfSURFT0dSQVBISUMpOwotICoKLSAqIEBwYXJhbSBjIENvZGUgcG9pbnQg
dG8gdGVzdC4KLSAqIEBwYXJhbSB3aGljaCBVUHJvcGVydHkgc2VsZWN0b3IgY29uc3RhbnQsIGlk
ZW50aWZpZXMgd2hpY2ggcHJvcGVydHkgdG8gY2hlY2suCi0gKiAgICAgICAgTXVzdCBiZSBVQ0hB
Ul9CSU5BUllfU1RBUlQ8PXdoaWNoPFVDSEFSX0JJTkFSWV9MSU1JVAotICogICAgICAgIG9yIFVD
SEFSX0lOVF9TVEFSVDw9d2hpY2g8VUNIQVJfSU5UX0xJTUlUCi0gKiAgICAgICAgb3IgVUNIQVJf
TUFTS19TVEFSVDw9d2hpY2g8VUNIQVJfTUFTS19MSU1JVC4KLSAqIEByZXR1cm4gTnVtZXJpYyB2
YWx1ZSB0aGF0IGlzIGRpcmVjdGx5IHRoZSBwcm9wZXJ0eSB2YWx1ZSBvciwKLSAqICAgICAgICAg
Zm9yIGVudW1lcmF0ZWQgcHJvcGVydGllcywgY29ycmVzcG9uZHMgdG8gdGhlIG51bWVyaWMgdmFs
dWUgb2YgdGhlIGVudW1lcmF0ZWQKLSAqICAgICAgICAgY29uc3RhbnQgb2YgdGhlIHJlc3BlY3Rp
dmUgcHJvcGVydHkgdmFsdWUgZW51bWVyYXRpb24gdHlwZQotICogICAgICAgICAoY2FzdCB0byBl
bnVtIHR5cGUgaWYgbmVjZXNzYXJ5KS4KLSAqICAgICAgICAgUmV0dXJucyAwIG9yIDEgKGZvciBG
QUxTRS9UUlVFKSBmb3IgYmluYXJ5IFVuaWNvZGUgcHJvcGVydGllcy4KLSAqICAgICAgICAgUmV0
dXJucyBhIGJpdC1tYXNrIGZvciBtYXNrIHByb3BlcnRpZXMuCi0gKiAgICAgICAgIFJldHVybnMg
MCBpZiAnd2hpY2gnIGlzIG91dCBvZiBib3VuZHMgb3IgaWYgdGhlIFVuaWNvZGUgdmVyc2lvbgot
ICogICAgICAgICBkb2VzIG5vdCBoYXZlIGRhdGEgZm9yIHRoZSBwcm9wZXJ0eSBhdCBhbGwsIG9y
IG5vdCBmb3IgdGhpcyBjb2RlIHBvaW50LgotICoKLSAqIEBzZWUgVVByb3BlcnR5Ci0gKiBAc2Vl
IHVfaGFzQmluYXJ5UHJvcGVydHkKLSAqIEBzZWUgdV9nZXRJbnRQcm9wZXJ0eU1pblZhbHVlCi0g
KiBAc2VlIHVfZ2V0SW50UHJvcGVydHlNYXhWYWx1ZQotICogQHNlZSB1X2dldFVuaWNvZGVWZXJz
aW9uCi0gKiBAc3RhYmxlIElDVSAyLjIKLSAqLwotVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIK
LXVfZ2V0SW50UHJvcGVydHlWYWx1ZShVQ2hhcjMyIGMsIFVQcm9wZXJ0eSB3aGljaCk7Ci0KLS8q
KgotICogR2V0IHRoZSBtaW5pbXVtIHZhbHVlIGZvciBhbiBlbnVtZXJhdGVkL2ludGVnZXIvYmlu
YXJ5IFVuaWNvZGUgcHJvcGVydHkuCi0gKiBDYW4gYmUgdXNlZCB0b2dldGhlciB3aXRoIHVfZ2V0
SW50UHJvcGVydHlNYXhWYWx1ZQotICogdG8gYWxsb2NhdGUgYXJyYXlzIG9mIFVuaWNvZGVTZXQg
b3Igc2ltaWxhci4KLSAqCi0gKiBAcGFyYW0gd2hpY2ggVVByb3BlcnR5IHNlbGVjdG9yIGNvbnN0
YW50LCBpZGVudGlmaWVzIHdoaWNoIGJpbmFyeSBwcm9wZXJ0eSB0byBjaGVjay4KLSAqICAgICAg
ICBNdXN0IGJlIFVDSEFSX0JJTkFSWV9TVEFSVDw9d2hpY2g8VUNIQVJfQklOQVJZX0xJTUlUCi0g
KiAgICAgICAgb3IgVUNIQVJfSU5UX1NUQVJUPD13aGljaDxVQ0hBUl9JTlRfTElNSVQuCi0gKiBA
cmV0dXJuIE1pbmltdW0gdmFsdWUgcmV0dXJuZWQgYnkgdV9nZXRJbnRQcm9wZXJ0eVZhbHVlIGZv
ciBhIFVuaWNvZGUgcHJvcGVydHkuCi0gKiAgICAgICAgIDAgaWYgdGhlIHByb3BlcnR5IHNlbGVj
dG9yIGlzIG91dCBvZiByYW5nZS4KLSAqCi0gKiBAc2VlIFVQcm9wZXJ0eQotICogQHNlZSB1X2hh
c0JpbmFyeVByb3BlcnR5Ci0gKiBAc2VlIHVfZ2V0VW5pY29kZVZlcnNpb24KLSAqIEBzZWUgdV9n
ZXRJbnRQcm9wZXJ0eU1heFZhbHVlCi0gKiBAc2VlIHVfZ2V0SW50UHJvcGVydHlWYWx1ZQotICog
QHN0YWJsZSBJQ1UgMi4yCi0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCi11X2dldElu
dFByb3BlcnR5TWluVmFsdWUoVVByb3BlcnR5IHdoaWNoKTsKLQotLyoqCi0gKiBHZXQgdGhlIG1h
eGltdW0gdmFsdWUgZm9yIGFuIGVudW1lcmF0ZWQvaW50ZWdlci9iaW5hcnkgVW5pY29kZSBwcm9w
ZXJ0eS4KLSAqIENhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdV9nZXRJbnRQcm9wZXJ0eU1pblZh
bHVlCi0gKiB0byBhbGxvY2F0ZSBhcnJheXMgb2YgVW5pY29kZVNldCBvciBzaW1pbGFyLgotICoK
LSAqIEV4YW1wbGVzIGZvciBtaW4vbWF4IHZhbHVlcyAoZm9yIFVuaWNvZGUgMy4yKToKLSAqCi0g
KiAtIFVDSEFSX0JJRElfQ0xBU1M6ICAgIDAvMTggKFVfTEVGVF9UT19SSUdIVC9VX0JPVU5EQVJZ
X05FVVRSQUwpCi0gKiAtIFVDSEFSX1NDUklQVDogICAgICAgIDAvNDUgKFVTQ1JJUFRfQ09NTU9O
L1VTQ1JJUFRfVEFHQkFOV0EpCi0gKiAtIFVDSEFSX0lERU9HUkFQSElDOiAgIDAvMSAgKEZBTFNF
L1RSVUUpCi0gKgotICogRm9yIHVuZGVmaW5lZCBVUHJvcGVydHkgY29uc3RhbnQgdmFsdWVzLCBt
aW4vbWF4IHZhbHVlcyB3aWxsIGJlIDAvLTEuCi0gKgotICogQHBhcmFtIHdoaWNoIFVQcm9wZXJ0
eSBzZWxlY3RvciBjb25zdGFudCwgaWRlbnRpZmllcyB3aGljaCBiaW5hcnkgcHJvcGVydHkgdG8g
Y2hlY2suCi0gKiAgICAgICAgTXVzdCBiZSBVQ0hBUl9CSU5BUllfU1RBUlQ8PXdoaWNoPFVDSEFS
X0JJTkFSWV9MSU1JVAotICogICAgICAgIG9yIFVDSEFSX0lOVF9TVEFSVDw9d2hpY2g8VUNIQVJf
SU5UX0xJTUlULgotICogQHJldHVybiBNYXhpbXVtIHZhbHVlIHJldHVybmVkIGJ5IHVfZ2V0SW50
UHJvcGVydHlWYWx1ZSBmb3IgYSBVbmljb2RlIHByb3BlcnR5LgotICogICAgICAgICA8PTAgaWYg
dGhlIHByb3BlcnR5IHNlbGVjdG9yIGlzIG91dCBvZiByYW5nZS4KLSAqCi0gKiBAc2VlIFVQcm9w
ZXJ0eQotICogQHNlZSB1X2hhc0JpbmFyeVByb3BlcnR5Ci0gKiBAc2VlIHVfZ2V0VW5pY29kZVZl
cnNpb24KLSAqIEBzZWUgdV9nZXRJbnRQcm9wZXJ0eU1heFZhbHVlCi0gKiBAc2VlIHVfZ2V0SW50
UHJvcGVydHlWYWx1ZQotICogQHN0YWJsZSBJQ1UgMi4yCi0gKi8KLVVfU1RBQkxFIGludDMyX3Qg
VV9FWFBPUlQyCi11X2dldEludFByb3BlcnR5TWF4VmFsdWUoVVByb3BlcnR5IHdoaWNoKTsKLQot
LyoqCi0gKiBHZXQgdGhlIG51bWVyaWMgdmFsdWUgZm9yIGEgVW5pY29kZSBjb2RlIHBvaW50IGFz
IGRlZmluZWQgaW4gdGhlCi0gKiBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZS4KLSAqCi0gKiBB
ICJkb3VibGUiIHJldHVybiB0eXBlIGlzIG5lY2Vzc2FyeSBiZWNhdXNlCi0gKiBzb21lIG51bWVy
aWMgdmFsdWVzIGFyZSBmcmFjdGlvbnMsIG5lZ2F0aXZlLCBvciB0b28gbGFyZ2UgZm9yIGludDMy
X3QuCi0gKgotICogRm9yIGNoYXJhY3RlcnMgd2l0aG91dCBhbnkgbnVtZXJpYyB2YWx1ZXMgaW4g
dGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlLAotICogdGhpcyBmdW5jdGlvbiB3aWxsIHJl
dHVybiBVX05PX05VTUVSSUNfVkFMVUUuCi0gKiBOb3RlOiBUaGlzIGlzIGRpZmZlcmVudCBmcm9t
IHRoZSBVbmljb2RlIFN0YW5kYXJkIHdoaWNoIHNwZWNpZmllcyBOYU4gYXMgdGhlIGRlZmF1bHQg
dmFsdWUuCi0gKiAoTmFOIGlzIG5vdCBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtcy4pCi0gKgot
ICogU2ltaWxhciB0byBqYXZhLmxhbmcuQ2hhcmFjdGVyLmdldE51bWVyaWNWYWx1ZSgpLCBidXQg
dV9nZXROdW1lcmljVmFsdWUoKQotICogYWxzbyBzdXBwb3J0cyBuZWdhdGl2ZSB2YWx1ZXMsIGxh
cmdlIHZhbHVlcywgYW5kIGZyYWN0aW9ucywKLSAqIHdoaWxlIEphdmEncyBnZXROdW1lcmljVmFs
dWUoKSByZXR1cm5zIHZhbHVlcyAxMC4uMzUgZm9yIEFTQ0lJIGxldHRlcnMuCi0gKgotICogQHBh
cmFtIGMgQ29kZSBwb2ludCB0byBnZXQgdGhlIG51bWVyaWMgdmFsdWUgZm9yLgotICogQHJldHVy
biBOdW1lcmljIHZhbHVlIG9mIGMsIG9yIFVfTk9fTlVNRVJJQ19WQUxVRSBpZiBub25lIGlzIGRl
ZmluZWQuCi0gKgotICogQHNlZSBVX05PX05VTUVSSUNfVkFMVUUKLSAqIEBzdGFibGUgSUNVIDIu
MgotICovCi1VX1NUQUJMRSBkb3VibGUgVV9FWFBPUlQyCi11X2dldE51bWVyaWNWYWx1ZShVQ2hh
cjMyIGMpOwotCi0vKioKLSAqIFNwZWNpYWwgdmFsdWUgdGhhdCBpcyByZXR1cm5lZCBieSB1X2dl
dE51bWVyaWNWYWx1ZSB3aGVuCi0gKiBubyBudW1lcmljIHZhbHVlIGlzIGRlZmluZWQgZm9yIGEg
Y29kZSBwb2ludC4KLSAqCi0gKiBAc2VlIHVfZ2V0TnVtZXJpY1ZhbHVlCi0gKiBAc3RhYmxlIElD
VSAyLjIKLSAqLwotI2RlZmluZSBVX05PX05VTUVSSUNfVkFMVUUgKChkb3VibGUpLTEyMzQ1Njc4
OS4pCi0KLS8qKgotICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY29kZSBwb2lu
dCBoYXMgdGhlIGdlbmVyYWwgY2F0ZWdvcnkgIkxsIgotICogKGxvd2VyY2FzZSBsZXR0ZXIpLgot
ICoKLSAqIFNhbWUgYXMgamF2YS5sYW5nLkNoYXJhY3Rlci5pc0xvd2VyQ2FzZSgpLgotICoKLSAq
IFRoaXMgbWlzc2VzIHNvbWUgY2hhcmFjdGVycyB0aGF0IGFyZSBhbHNvIGxvd2VyY2FzZSBidXQK
LSAqIGhhdmUgYSBkaWZmZXJlbnQgZ2VuZXJhbCBjYXRlZ29yeSB2YWx1ZS4KLSAqIEluIG9yZGVy
IHRvIGluY2x1ZGUgdGhvc2UsIHVzZSBVQ0hBUl9MT1dFUkNBU0UuCi0gKgotICogSW4gYWRkaXRp
b24gdG8gYmVpbmcgZXF1aXZhbGVudCB0byBhIEphdmEgZnVuY3Rpb24sIHRoaXMgYWxzbyBzZXJ2
ZXMKLSAqIGFzIGEgQy9QT1NJWCBtaWdyYXRpb24gZnVuY3Rpb24uCi0gKiBTZWUgdGhlIGNvbW1l
bnRzIGFib3V0IEMvUE9TSVggY2hhcmFjdGVyIGNsYXNzaWZpY2F0aW9uIGZ1bmN0aW9ucyBpbiB0
aGUKLSAqIGRvY3VtZW50YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGhlYWRlciBmaWxlLgotICoK
LSAqIEBwYXJhbSBjIHRoZSBjb2RlIHBvaW50IHRvIGJlIHRlc3RlZAotICogQHJldHVybiBUUlVF
IGlmIHRoZSBjb2RlIHBvaW50IGlzIGFuIExsIGxvd2VyY2FzZSBsZXR0ZXIKLSAqCi0gKiBAc2Vl
IFVDSEFSX0xPV0VSQ0FTRQotICogQHNlZSB1X2lzdXBwZXIKLSAqIEBzZWUgdV9pc3RpdGxlCi0g
KiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyCi11X2lzbG93
ZXIoVUNoYXIzMiBjKTsKLQotLyoqCi0gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmll
ZCBjb2RlIHBvaW50IGhhcyB0aGUgZ2VuZXJhbCBjYXRlZ29yeSAiTHUiCi0gKiAodXBwZXJjYXNl
IGxldHRlcikuCi0gKgotICogU2FtZSBhcyBqYXZhLmxhbmcuQ2hhcmFjdGVyLmlzVXBwZXJDYXNl
KCkuCi0gKgotICogVGhpcyBtaXNzZXMgc29tZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIGFsc28gdXBw
ZXJjYXNlIGJ1dAotICogaGF2ZSBhIGRpZmZlcmVudCBnZW5lcmFsIGNhdGVnb3J5IHZhbHVlLgot
ICogSW4gb3JkZXIgdG8gaW5jbHVkZSB0aG9zZSwgdXNlIFVDSEFSX1VQUEVSQ0FTRS4KLSAqCi0g
KiBJbiBhZGRpdGlvbiB0byBiZWluZyBlcXVpdmFsZW50IHRvIGEgSmF2YSBmdW5jdGlvbiwgdGhp
cyBhbHNvIHNlcnZlcwotICogYXMgYSBDL1BPU0lYIG1pZ3JhdGlvbiBmdW5jdGlvbi4KLSAqIFNl
ZSB0aGUgY29tbWVudHMgYWJvdXQgQy9QT1NJWCBjaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24gZnVu
Y3Rpb25zIGluIHRoZQotICogZG9jdW1lbnRhdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgaGVhZGVy
IGZpbGUuCi0gKgotICogQHBhcmFtIGMgdGhlIGNvZGUgcG9pbnQgdG8gYmUgdGVzdGVkCi0gKiBA
cmV0dXJuIFRSVUUgaWYgdGhlIGNvZGUgcG9pbnQgaXMgYW4gTHUgdXBwZXJjYXNlIGxldHRlcgot
ICoKLSAqIEBzZWUgVUNIQVJfVVBQRVJDQVNFCi0gKiBAc2VlIHVfaXNsb3dlcgotICogQHNlZSB1
X2lzdGl0bGUKLSAqIEBzZWUgdV90b2xvd2VyCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9T
VEFCTEUgVUJvb2wgVV9FWFBPUlQyCi11X2lzdXBwZXIoVUNoYXIzMiBjKTsKLQotLyoqCi0gKiBE
ZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjb2RlIHBvaW50IGlzIGEgdGl0bGVjYXNl
IGxldHRlci4KLSAqIFRydWUgZm9yIGdlbmVyYWwgY2F0ZWdvcnkgIkx0IiAodGl0bGVjYXNlIGxl
dHRlcikuCi0gKgotICogU2FtZSBhcyBqYXZhLmxhbmcuQ2hhcmFjdGVyLmlzVGl0bGVDYXNlKCku
Ci0gKgotICogQHBhcmFtIGMgdGhlIGNvZGUgcG9pbnQgdG8gYmUgdGVzdGVkCi0gKiBAcmV0dXJu
IFRSVUUgaWYgdGhlIGNvZGUgcG9pbnQgaXMgYW4gTHQgdGl0bGVjYXNlIGxldHRlcgotICoKLSAq
IEBzZWUgdV9pc3VwcGVyCi0gKiBAc2VlIHVfaXNsb3dlcgotICogQHNlZSB1X3RvdGl0bGUKLSAq
IEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIKLXVfaXN0aXRs
ZShVQ2hhcjMyIGMpOwotCi0vKioKLSAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVk
IGNvZGUgcG9pbnQgaXMgYSBkaWdpdCBjaGFyYWN0ZXIgYWNjb3JkaW5nIHRvIEphdmEuCi0gKiBU
cnVlIGZvciBjaGFyYWN0ZXJzIHdpdGggZ2VuZXJhbCBjYXRlZ29yeSAiTmQiIChkZWNpbWFsIGRp
Z2l0IG51bWJlcnMpLgotICogQmVnaW5uaW5nIHdpdGggVW5pY29kZSA0LCB0aGlzIGlzIHRoZSBz
YW1lIGFzCi0gKiB0ZXN0aW5nIGZvciB0aGUgTnVtZXJpY19UeXBlIG9mIERlY2ltYWwuCi0gKgot
ICogU2FtZSBhcyBqYXZhLmxhbmcuQ2hhcmFjdGVyLmlzRGlnaXQoKS4KLSAqCi0gKiBJbiBhZGRp
dGlvbiB0byBiZWluZyBlcXVpdmFsZW50IHRvIGEgSmF2YSBmdW5jdGlvbiwgdGhpcyBhbHNvIHNl
cnZlcwotICogYXMgYSBDL1BPU0lYIG1pZ3JhdGlvbiBmdW5jdGlvbi4KLSAqIFNlZSB0aGUgY29t
bWVudHMgYWJvdXQgQy9QT1NJWCBjaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24gZnVuY3Rpb25zIGlu
IHRoZQotICogZG9jdW1lbnRhdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgaGVhZGVyIGZpbGUuCi0g
KgotICogQHBhcmFtIGMgdGhlIGNvZGUgcG9pbnQgdG8gYmUgdGVzdGVkCi0gKiBAcmV0dXJuIFRS
VUUgaWYgdGhlIGNvZGUgcG9pbnQgaXMgYSBkaWdpdCBjaGFyYWN0ZXIgYWNjb3JkaW5nIHRvIENo
YXJhY3Rlci5pc0RpZ2l0KCkKLSAqCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUg
VUJvb2wgVV9FWFBPUlQyCi11X2lzZGlnaXQoVUNoYXIzMiBjKTsKLQotLyoqCi0gKiBEZXRlcm1p
bmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjb2RlIHBvaW50IGlzIGEgbGV0dGVyIGNoYXJhY3Rl
ci4KLSAqIFRydWUgZm9yIGdlbmVyYWwgY2F0ZWdvcmllcyAiTCIgKGxldHRlcnMpLgotICoKLSAq
IFNhbWUgYXMgamF2YS5sYW5nLkNoYXJhY3Rlci5pc0xldHRlcigpLgotICoKLSAqIEluIGFkZGl0
aW9uIHRvIGJlaW5nIGVxdWl2YWxlbnQgdG8gYSBKYXZhIGZ1bmN0aW9uLCB0aGlzIGFsc28gc2Vy
dmVzCi0gKiBhcyBhIEMvUE9TSVggbWlncmF0aW9uIGZ1bmN0aW9uLgotICogU2VlIHRoZSBjb21t
ZW50cyBhYm91dCBDL1BPU0lYIGNoYXJhY3RlciBjbGFzc2lmaWNhdGlvbiBmdW5jdGlvbnMgaW4g
dGhlCi0gKiBkb2N1bWVudGF0aW9uIGF0IHRoZSB0b3Agb2YgdGhpcyBoZWFkZXIgZmlsZS4KLSAq
Ci0gKiBAcGFyYW0gYyB0aGUgY29kZSBwb2ludCB0byBiZSB0ZXN0ZWQKLSAqIEByZXR1cm4gVFJV
RSBpZiB0aGUgY29kZSBwb2ludCBpcyBhIGxldHRlciBjaGFyYWN0ZXIKLSAqCi0gKiBAc2VlIHVf
aXNkaWdpdAotICogQHNlZSB1X2lzYWxudW0KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NU
QUJMRSBVQm9vbCBVX0VYUE9SVDIKLXVfaXNhbHBoYShVQ2hhcjMyIGMpOwotCi0vKioKLSAqIERl
dGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIGNvZGUgcG9pbnQgaXMgYW4gYWxwaGFudW1l
cmljIGNoYXJhY3RlcgotICogKGxldHRlciBvciBkaWdpdCkgYWNjb3JkaW5nIHRvIEphdmEuCi0g
KiBUcnVlIGZvciBjaGFyYWN0ZXJzIHdpdGggZ2VuZXJhbCBjYXRlZ29yaWVzCi0gKiAiTCIgKGxl
dHRlcnMpIGFuZCAiTmQiIChkZWNpbWFsIGRpZ2l0IG51bWJlcnMpLgotICoKLSAqIFNhbWUgYXMg
amF2YS5sYW5nLkNoYXJhY3Rlci5pc0xldHRlck9yRGlnaXQoKS4KLSAqCi0gKiBJbiBhZGRpdGlv
biB0byBiZWluZyBlcXVpdmFsZW50IHRvIGEgSmF2YSBmdW5jdGlvbiwgdGhpcyBhbHNvIHNlcnZl
cwotICogYXMgYSBDL1BPU0lYIG1pZ3JhdGlvbiBmdW5jdGlvbi4KLSAqIFNlZSB0aGUgY29tbWVu
dHMgYWJvdXQgQy9QT1NJWCBjaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24gZnVuY3Rpb25zIGluIHRo
ZQotICogZG9jdW1lbnRhdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgaGVhZGVyIGZpbGUuCi0gKgot
ICogQHBhcmFtIGMgdGhlIGNvZGUgcG9pbnQgdG8gYmUgdGVzdGVkCi0gKiBAcmV0dXJuIFRSVUUg
aWYgdGhlIGNvZGUgcG9pbnQgaXMgYW4gYWxwaGFudW1lcmljIGNoYXJhY3RlciBhY2NvcmRpbmcg
dG8gQ2hhcmFjdGVyLmlzTGV0dGVyT3JEaWdpdCgpCi0gKgotICogQHN0YWJsZSBJQ1UgMi4wCi0g
Ki8KLVVfU1RBQkxFIFVCb29sIFVfRVhQT1JUMgotdV9pc2FsbnVtKFVDaGFyMzIgYyk7Ci0KLS8q
KgotICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY29kZSBwb2ludCBpcyBhIGhl
eGFkZWNpbWFsIGRpZ2l0LgotICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHVfZGlnaXQoYywgMTYp
Pj0wLgotICogVHJ1ZSBmb3IgY2hhcmFjdGVycyB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgIk5kIiAo
ZGVjaW1hbCBkaWdpdCBudW1iZXJzKQotICogYXMgd2VsbCBhcyBMYXRpbiBsZXR0ZXJzIGEtZiBh
bmQgQS1GIGluIGJvdGggQVNDSUkgYW5kIEZ1bGx3aWR0aCBBU0NJSS4KLSAqIChUaGF0IGlzLCBm
b3IgbGV0dGVycyB3aXRoIGNvZGUgcG9pbnRzCi0gKiAwMDQxLi4wMDQ2LCAwMDYxLi4wMDY2LCBG
RjIxLi5GRjI2LCBGRjQxLi5GRjQ2LikKLSAqCi0gKiBJbiBvcmRlciB0byBuYXJyb3cgdGhlIGRl
ZmluaXRpb24gb2YgaGV4YWRlY2ltYWwgZGlnaXRzIHRvIG9ubHkgQVNDSUkKLSAqIGNoYXJhY3Rl
cnMsIHVzZSAoYzw9MHg3ZiAmJiB1X2lzeGRpZ2l0KGMpKS4KLSAqCi0gKiBUaGlzIGlzIGEgQy9Q
T1NJWCBtaWdyYXRpb24gZnVuY3Rpb24uCi0gKiBTZWUgdGhlIGNvbW1lbnRzIGFib3V0IEMvUE9T
SVggY2hhcmFjdGVyIGNsYXNzaWZpY2F0aW9uIGZ1bmN0aW9ucyBpbiB0aGUKLSAqIGRvY3VtZW50
YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGhlYWRlciBmaWxlLgotICoKLSAqIEBwYXJhbSBjIHRo
ZSBjb2RlIHBvaW50IHRvIGJlIHRlc3RlZAotICogQHJldHVybiBUUlVFIGlmIHRoZSBjb2RlIHBv
aW50IGlzIGEgaGV4YWRlY2ltYWwgZGlnaXQKLSAqCi0gKiBAc3RhYmxlIElDVSAyLjYKLSAqLwot
VV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyCi11X2lzeGRpZ2l0KFVDaGFyMzIgYyk7Ci0KLS8qKgot
ICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY29kZSBwb2ludCBpcyBhIHB1bmN0
dWF0aW9uIGNoYXJhY3Rlci4KLSAqIFRydWUgZm9yIGNoYXJhY3RlcnMgd2l0aCBnZW5lcmFsIGNh
dGVnb3JpZXMgIlAiIChwdW5jdHVhdGlvbikuCi0gKgotICogVGhpcyBpcyBhIEMvUE9TSVggbWln
cmF0aW9uIGZ1bmN0aW9uLgotICogU2VlIHRoZSBjb21tZW50cyBhYm91dCBDL1BPU0lYIGNoYXJh
Y3RlciBjbGFzc2lmaWNhdGlvbiBmdW5jdGlvbnMgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGF0
IHRoZSB0b3Agb2YgdGhpcyBoZWFkZXIgZmlsZS4KLSAqCi0gKiBAcGFyYW0gYyB0aGUgY29kZSBw
b2ludCB0byBiZSB0ZXN0ZWQKLSAqIEByZXR1cm4gVFJVRSBpZiB0aGUgY29kZSBwb2ludCBpcyBh
IHB1bmN0dWF0aW9uIGNoYXJhY3RlcgotICoKLSAqIEBzdGFibGUgSUNVIDIuNgotICovCi1VX1NU
QUJMRSBVQm9vbCBVX0VYUE9SVDIKLXVfaXNwdW5jdChVQ2hhcjMyIGMpOwotCi0vKioKLSAqIERl
dGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIGNvZGUgcG9pbnQgaXMgYSAiZ3JhcGhpYyIg
Y2hhcmFjdGVyCi0gKiAocHJpbnRhYmxlLCBleGNsdWRpbmcgc3BhY2VzKS4KLSAqIFRSVUUgZm9y
IGFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcmllcwotICog
IkNjIiAoY29udHJvbCBjb2RlcyksICJDZiIgKGZvcm1hdCBjb250cm9scyksICJDcyIgKHN1cnJv
Z2F0ZXMpLAotICogIkNuIiAodW5hc3NpZ25lZCksIGFuZCAiWiIgKHNlcGFyYXRvcnMpLgotICoK
LSAqIFRoaXMgaXMgYSBDL1BPU0lYIG1pZ3JhdGlvbiBmdW5jdGlvbi4KLSAqIFNlZSB0aGUgY29t
bWVudHMgYWJvdXQgQy9QT1NJWCBjaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24gZnVuY3Rpb25zIGlu
IHRoZQotICogZG9jdW1lbnRhdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgaGVhZGVyIGZpbGUuCi0g
KgotICogQHBhcmFtIGMgdGhlIGNvZGUgcG9pbnQgdG8gYmUgdGVzdGVkCi0gKiBAcmV0dXJuIFRS
VUUgaWYgdGhlIGNvZGUgcG9pbnQgaXMgYSAiZ3JhcGhpYyIgY2hhcmFjdGVyCi0gKgotICogQHN0
YWJsZSBJQ1UgMi42Ci0gKi8KLVVfU1RBQkxFIFVCb29sIFVfRVhQT1JUMgotdV9pc2dyYXBoKFVD
aGFyMzIgYyk7Ci0KLS8qKgotICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY29k
ZSBwb2ludCBpcyBhICJibGFuayIgb3IgImhvcml6b250YWwgc3BhY2UiLAotICogYSBjaGFyYWN0
ZXIgdGhhdCB2aXNpYmx5IHNlcGFyYXRlcyB3b3JkcyBvbiBhIGxpbmUuCi0gKiBUaGUgZm9sbG93
aW5nIGFyZSBlcXVpdmFsZW50IGRlZmluaXRpb25zOgotICoKLSAqIFRSVUUgZm9yIFVuaWNvZGUg
V2hpdGVfU3BhY2UgY2hhcmFjdGVycyBleGNlcHQgZm9yICJ2ZXJ0aWNhbCBzcGFjZSBjb250cm9s
cyIKLSAqIHdoZXJlICJ2ZXJ0aWNhbCBzcGFjZSBjb250cm9scyIgYXJlIHRoZSBmb2xsb3dpbmcg
Y2hhcmFjdGVyczoKLSAqIFUrMDAwQSAoTEYpIFUrMDAwQiAoVlQpIFUrMDAwQyAoRkYpIFUrMDAw
RCAoQ1IpIFUrMDA4NSAoTkVMKSBVKzIwMjggKExTKSBVKzIwMjkgKFBTKQotICoKLSAqIHNhbWUg
YXMKLSAqCi0gKiBUUlVFIGZvciBVKzAwMDkgKFRBQikgYW5kIGNoYXJhY3RlcnMgd2l0aCBnZW5l
cmFsIGNhdGVnb3J5ICJacyIgKHNwYWNlIHNlcGFyYXRvcnMpCi0gKiBleGNlcHQgWmVybyBXaWR0
aCBTcGFjZSAoWldTUCwgVSsyMDBCKS4KLSAqCi0gKiBOb3RlOiBUaGVyZSBhcmUgc2V2ZXJhbCBJ
Q1Ugd2hpdGVzcGFjZSBmdW5jdGlvbnM7IHBsZWFzZSBzZWUgdGhlIHVjaGFyLmgKLSAqIGZpbGUg
ZG9jdW1lbnRhdGlvbiBmb3IgYSBkZXRhaWxlZCBjb21wYXJpc29uLgotICoKLSAqIFRoaXMgaXMg
YSBDL1BPU0lYIG1pZ3JhdGlvbiBmdW5jdGlvbi4KLSAqIFNlZSB0aGUgY29tbWVudHMgYWJvdXQg
Qy9QT1NJWCBjaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24gZnVuY3Rpb25zIGluIHRoZQotICogZG9j
dW1lbnRhdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgaGVhZGVyIGZpbGUuCi0gKgotICogQHBhcmFt
IGMgdGhlIGNvZGUgcG9pbnQgdG8gYmUgdGVzdGVkCi0gKiBAcmV0dXJuIFRSVUUgaWYgdGhlIGNv
ZGUgcG9pbnQgaXMgYSAiYmxhbmsiCi0gKgotICogQHN0YWJsZSBJQ1UgMi42Ci0gKi8KLVVfU1RB
QkxFIFVCb29sIFVfRVhQT1JUMgotdV9pc2JsYW5rKFVDaGFyMzIgYyk7Ci0KLS8qKgotICogRGV0
ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY29kZSBwb2ludCBpcyAiZGVmaW5lZCIsCi0g
KiB3aGljaCB1c3VhbGx5IG1lYW5zIHRoYXQgaXQgaXMgYXNzaWduZWQgYSBjaGFyYWN0ZXIuCi0g
KiBUcnVlIGZvciBnZW5lcmFsIGNhdGVnb3JpZXMgb3RoZXIgdGhhbiAiQ24iIChvdGhlciwgbm90
IGFzc2lnbmVkKSwKLSAqIGkuZS4sIHRydWUgZm9yIGFsbCBjb2RlIHBvaW50cyBtZW50aW9uZWQg
aW4gVW5pY29kZURhdGEudHh0LgotICoKLSAqIE5vdGUgdGhhdCBub24tY2hhcmFjdGVyIGNvZGUg
cG9pbnRzIChlLmcuLCBVK0ZERDApIGFyZSBub3QgImRlZmluZWQiCi0gKiAodGhleSBhcmUgQ24p
LCBidXQgc3Vycm9nYXRlIGNvZGUgcG9pbnRzIGFyZSAiZGVmaW5lZCIgKENzKS4KLSAqCi0gKiBT
YW1lIGFzIGphdmEubGFuZy5DaGFyYWN0ZXIuaXNEZWZpbmVkKCkuCi0gKgotICogQHBhcmFtIGMg
dGhlIGNvZGUgcG9pbnQgdG8gYmUgdGVzdGVkCi0gKiBAcmV0dXJuIFRSVUUgaWYgdGhlIGNvZGUg
cG9pbnQgaXMgYXNzaWduZWQgYSBjaGFyYWN0ZXIKLSAqCi0gKiBAc2VlIHVfaXNkaWdpdAotICog
QHNlZSB1X2lzYWxwaGEKLSAqIEBzZWUgdV9pc2FsbnVtCi0gKiBAc2VlIHVfaXN1cHBlcgotICog
QHNlZSB1X2lzbG93ZXIKLSAqIEBzZWUgdV9pc3RpdGxlCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAq
LwotVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyCi11X2lzZGVmaW5lZChVQ2hhcjMyIGMpOwotCi0v
KioKLSAqIERldGVybWluZXMgaWYgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgaXMgYSBzcGFjZSBj
aGFyYWN0ZXIgb3Igbm90LgotICoKLSAqIE5vdGU6IFRoZXJlIGFyZSBzZXZlcmFsIElDVSB3aGl0
ZXNwYWNlIGZ1bmN0aW9uczsgcGxlYXNlIHNlZSB0aGUgdWNoYXIuaAotICogZmlsZSBkb2N1bWVu
dGF0aW9uIGZvciBhIGRldGFpbGVkIGNvbXBhcmlzb24uCi0gKgotICogVGhpcyBpcyBhIEMvUE9T
SVggbWlncmF0aW9uIGZ1bmN0aW9uLgotICogU2VlIHRoZSBjb21tZW50cyBhYm91dCBDL1BPU0lY
IGNoYXJhY3RlciBjbGFzc2lmaWNhdGlvbiBmdW5jdGlvbnMgaW4gdGhlCi0gKiBkb2N1bWVudGF0
aW9uIGF0IHRoZSB0b3Agb2YgdGhpcyBoZWFkZXIgZmlsZS4KLSAqCi0gKiBAcGFyYW0gYyAgICB0
aGUgY2hhcmFjdGVyIHRvIGJlIHRlc3RlZAotICogQHJldHVybiAgdHJ1ZSBpZiB0aGUgY2hhcmFj
dGVyIGlzIGEgc3BhY2UgY2hhcmFjdGVyOyBmYWxzZSBvdGhlcndpc2UuCi0gKgotICogQHNlZSB1
X2lzSmF2YVNwYWNlQ2hhcgotICogQHNlZSB1X2lzV2hpdGVzcGFjZQotICogQHNlZSB1X2lzVVdo
aXRlU3BhY2UKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBVQm9vbCBVX0VYUE9S
VDIKLXVfaXNzcGFjZShVQ2hhcjMyIGMpOwotCi0vKioKLSAqIERldGVybWluZSBpZiB0aGUgc3Bl
Y2lmaWVkIGNvZGUgcG9pbnQgaXMgYSBzcGFjZSBjaGFyYWN0ZXIgYWNjb3JkaW5nIHRvIEphdmEu
Ci0gKiBUcnVlIGZvciBjaGFyYWN0ZXJzIHdpdGggZ2VuZXJhbCBjYXRlZ29yaWVzICJaIiAoc2Vw
YXJhdG9ycyksCi0gKiB3aGljaCBkb2VzIG5vdCBpbmNsdWRlIGNvbnRyb2wgY29kZXMgKGUuZy4s
IFRBQiBvciBMaW5lIEZlZWQpLgotICoKLSAqIFNhbWUgYXMgamF2YS5sYW5nLkNoYXJhY3Rlci5p
c1NwYWNlQ2hhcigpLgotICoKLSAqIE5vdGU6IFRoZXJlIGFyZSBzZXZlcmFsIElDVSB3aGl0ZXNw
YWNlIGZ1bmN0aW9uczsgcGxlYXNlIHNlZSB0aGUgdWNoYXIuaAotICogZmlsZSBkb2N1bWVudGF0
aW9uIGZvciBhIGRldGFpbGVkIGNvbXBhcmlzb24uCi0gKgotICogQHBhcmFtIGMgdGhlIGNvZGUg
cG9pbnQgdG8gYmUgdGVzdGVkCi0gKiBAcmV0dXJuIFRSVUUgaWYgdGhlIGNvZGUgcG9pbnQgaXMg
YSBzcGFjZSBjaGFyYWN0ZXIgYWNjb3JkaW5nIHRvIENoYXJhY3Rlci5pc1NwYWNlQ2hhcigpCi0g
KgotICogQHNlZSB1X2lzc3BhY2UKLSAqIEBzZWUgdV9pc1doaXRlc3BhY2UKLSAqIEBzZWUgdV9p
c1VXaGl0ZVNwYWNlCi0gKiBAc3RhYmxlIElDVSAyLjYKLSAqLwotVV9TVEFCTEUgVUJvb2wgVV9F
WFBPUlQyCi11X2lzSmF2YVNwYWNlQ2hhcihVQ2hhcjMyIGMpOwotCi0vKioKLSAqIERldGVybWlu
ZXMgaWYgdGhlIHNwZWNpZmllZCBjb2RlIHBvaW50IGlzIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIg
YWNjb3JkaW5nIHRvIEphdmEvSUNVLgotICogQSBjaGFyYWN0ZXIgaXMgY29uc2lkZXJlZCB0byBi
ZSBhIEphdmEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaWYgYW5kIG9ubHkKLSAqIGlmIGl0IHNhdGlz
ZmllcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBjcml0ZXJpYToKLSAqCi0gKiAtIEl0IGlzIGEgVW5p
Y29kZSBTZXBhcmF0b3IgY2hhcmFjdGVyIChjYXRlZ29yaWVzICJaIiA9ICJacyIgb3IgIlpsIiBv
ciAiWnAiKSwgYnV0IGlzIG5vdAotICogICAgICBhbHNvIGEgbm9uLWJyZWFraW5nIHNwYWNlIChV
KzAwQTAgTkJTUCBvciBVKzIwMDcgRmlndXJlIFNwYWNlIG9yIFUrMjAyRiBOYXJyb3cgTkJTUCku
Ci0gKiAtIEl0IGlzIFUrMDAwOSBIT1JJWk9OVEFMIFRBQlVMQVRJT04uCi0gKiAtIEl0IGlzIFUr
MDAwQSBMSU5FIEZFRUQuCi0gKiAtIEl0IGlzIFUrMDAwQiBWRVJUSUNBTCBUQUJVTEFUSU9OLgot
ICogLSBJdCBpcyBVKzAwMEMgRk9STSBGRUVELgotICogLSBJdCBpcyBVKzAwMEQgQ0FSUklBR0Ug
UkVUVVJOLgotICogLSBJdCBpcyBVKzAwMUMgRklMRSBTRVBBUkFUT1IuCi0gKiAtIEl0IGlzIFUr
MDAxRCBHUk9VUCBTRVBBUkFUT1IuCi0gKiAtIEl0IGlzIFUrMDAxRSBSRUNPUkQgU0VQQVJBVE9S
LgotICogLSBJdCBpcyBVKzAwMUYgVU5JVCBTRVBBUkFUT1IuCi0gKgotICogVGhpcyBBUEkgdHJp
ZXMgdG8gc3luYyB3aXRoIHRoZSBzZW1hbnRpY3Mgb2YgSmF2YSdzCi0gKiBqYXZhLmxhbmcuQ2hh
cmFjdGVyLmlzV2hpdGVzcGFjZSgpLCBidXQgaXQgbWF5IG5vdCByZXR1cm4KLSAqIHRoZSBleGFj
dCBzYW1lIHJlc3VsdHMgYmVjYXVzZSBvZiB0aGUgVW5pY29kZSB2ZXJzaW9uCi0gKiBkaWZmZXJl
bmNlLgotICoKLSAqIE5vdGU6IFVuaWNvZGUgNC4wLjEgY2hhbmdlZCBVKzIwMEIgWkVSTyBXSURU
SCBTUEFDRSBmcm9tIGEgU3BhY2UgU2VwYXJhdG9yIChacykKLSAqIHRvIGEgRm9ybWF0IENvbnRy
b2wgKENmKS4gU2luY2UgdGhlbiwgaXNXaGl0ZXNwYWNlKDB4MjAwYikgcmV0dXJucyBmYWxzZS4K
LSAqIFNlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3ZlcnNpb25zL1VuaWNvZGU0LjAuMS8KLSAq
Ci0gKiBOb3RlOiBUaGVyZSBhcmUgc2V2ZXJhbCBJQ1Ugd2hpdGVzcGFjZSBmdW5jdGlvbnM7IHBs
ZWFzZSBzZWUgdGhlIHVjaGFyLmgKLSAqIGZpbGUgZG9jdW1lbnRhdGlvbiBmb3IgYSBkZXRhaWxl
ZCBjb21wYXJpc29uLgotICoKLSAqIEBwYXJhbSBjIHRoZSBjb2RlIHBvaW50IHRvIGJlIHRlc3Rl
ZAotICogQHJldHVybiBUUlVFIGlmIHRoZSBjb2RlIHBvaW50IGlzIGEgd2hpdGVzcGFjZSBjaGFy
YWN0ZXIgYWNjb3JkaW5nIHRvIEphdmEvSUNVCi0gKgotICogQHNlZSB1X2lzc3BhY2UKLSAqIEBz
ZWUgdV9pc0phdmFTcGFjZUNoYXIKLSAqIEBzZWUgdV9pc1VXaGl0ZVNwYWNlCi0gKiBAc3RhYmxl
IElDVSAyLjAKLSAqLwotVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyCi11X2lzV2hpdGVzcGFjZShV
Q2hhcjMyIGMpOwotCi0vKioKLSAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIGNv
ZGUgcG9pbnQgaXMgYSBjb250cm9sIGNoYXJhY3RlcgotICogKGFzIGRlZmluZWQgYnkgdGhpcyBm
dW5jdGlvbikuCi0gKiBBIGNvbnRyb2wgY2hhcmFjdGVyIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5n
OgotICogLSBJU08gOC1iaXQgY29udHJvbCBjaGFyYWN0ZXIgKFUrMDAwMC4uVSswMDFmIGFuZCBV
KzAwN2YuLlUrMDA5ZikKLSAqIC0gVV9DT05UUk9MX0NIQVIgKENjKQotICogLSBVX0ZPUk1BVF9D
SEFSIChDZikKLSAqIC0gVV9MSU5FX1NFUEFSQVRPUiAoWmwpCi0gKiAtIFVfUEFSQUdSQVBIX1NF
UEFSQVRPUiAoWnApCi0gKgotICogVGhpcyBpcyBhIEMvUE9TSVggbWlncmF0aW9uIGZ1bmN0aW9u
LgotICogU2VlIHRoZSBjb21tZW50cyBhYm91dCBDL1BPU0lYIGNoYXJhY3RlciBjbGFzc2lmaWNh
dGlvbiBmdW5jdGlvbnMgaW4gdGhlCi0gKiBkb2N1bWVudGF0aW9uIGF0IHRoZSB0b3Agb2YgdGhp
cyBoZWFkZXIgZmlsZS4KLSAqCi0gKiBAcGFyYW0gYyB0aGUgY29kZSBwb2ludCB0byBiZSB0ZXN0
ZWQKLSAqIEByZXR1cm4gVFJVRSBpZiB0aGUgY29kZSBwb2ludCBpcyBhIGNvbnRyb2wgY2hhcmFj
dGVyCi0gKgotICogQHNlZSBVQ0hBUl9ERUZBVUxUX0lHTk9SQUJMRV9DT0RFX1BPSU5UCi0gKiBA
c2VlIHVfaXNwcmludAotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxFIFVCb29sIFVf
RVhQT1JUMgotdV9pc2NudHJsKFVDaGFyMzIgYyk7Ci0KLS8qKgotICogRGV0ZXJtaW5lcyB3aGV0
aGVyIHRoZSBzcGVjaWZpZWQgY29kZSBwb2ludCBpcyBhbiBJU08gY29udHJvbCBjb2RlLgotICog
VHJ1ZSBmb3IgVSswMDAwLi5VKzAwMWYgYW5kIFUrMDA3Zi4uVSswMDlmIChnZW5lcmFsIGNhdGVn
b3J5ICJDYyIpLgotICoKLSAqIFNhbWUgYXMgamF2YS5sYW5nLkNoYXJhY3Rlci5pc0lTT0NvbnRy
b2woKS4KLSAqCi0gKiBAcGFyYW0gYyB0aGUgY29kZSBwb2ludCB0byBiZSB0ZXN0ZWQKLSAqIEBy
ZXR1cm4gVFJVRSBpZiB0aGUgY29kZSBwb2ludCBpcyBhbiBJU08gY29udHJvbCBjb2RlCi0gKgot
ICogQHNlZSB1X2lzY250cmwKLSAqIEBzdGFibGUgSUNVIDIuNgotICovCi1VX1NUQUJMRSBVQm9v
bCBVX0VYUE9SVDIKLXVfaXNJU09Db250cm9sKFVDaGFyMzIgYyk7Ci0KLS8qKgotICogRGV0ZXJt
aW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY29kZSBwb2ludCBpcyBhIHByaW50YWJsZSBjaGFy
YWN0ZXIuCi0gKiBUcnVlIGZvciBnZW5lcmFsIGNhdGVnb3JpZXMgPGVtPm90aGVyPC9lbT4gdGhh
biAiQyIgKGNvbnRyb2xzKS4KLSAqCi0gKiBUaGlzIGlzIGEgQy9QT1NJWCBtaWdyYXRpb24gZnVu
Y3Rpb24uCi0gKiBTZWUgdGhlIGNvbW1lbnRzIGFib3V0IEMvUE9TSVggY2hhcmFjdGVyIGNsYXNz
aWZpY2F0aW9uIGZ1bmN0aW9ucyBpbiB0aGUKLSAqIGRvY3VtZW50YXRpb24gYXQgdGhlIHRvcCBv
ZiB0aGlzIGhlYWRlciBmaWxlLgotICoKLSAqIEBwYXJhbSBjIHRoZSBjb2RlIHBvaW50IHRvIGJl
IHRlc3RlZAotICogQHJldHVybiBUUlVFIGlmIHRoZSBjb2RlIHBvaW50IGlzIGEgcHJpbnRhYmxl
IGNoYXJhY3RlcgotICoKLSAqIEBzZWUgVUNIQVJfREVGQVVMVF9JR05PUkFCTEVfQ09ERV9QT0lO
VAotICogQHNlZSB1X2lzY250cmwKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBV
Qm9vbCBVX0VYUE9SVDIKLXVfaXNwcmludChVQ2hhcjMyIGMpOwotCi0vKioKLSAqIERldGVybWlu
ZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIGNvZGUgcG9pbnQgaXMgYSBiYXNlIGNoYXJhY3Rlci4K
LSAqIFRydWUgZm9yIGdlbmVyYWwgY2F0ZWdvcmllcyAiTCIgKGxldHRlcnMpLCAiTiIgKG51bWJl
cnMpLAotICogIk1jIiAoc3BhY2luZyBjb21iaW5pbmcgbWFya3MpLCBhbmQgIk1lIiAoZW5jbG9z
aW5nIG1hcmtzKS4KLSAqCi0gKiBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUg
VW5pY29kZSBkZWZpbml0aW9uIGluCi0gKiBjaGFwdGVyIDMuNSwgY29uZm9ybWFuY2UgY2xhdXNl
IEQxMywKLSAqIHdoaWNoIGRlZmluZXMgYmFzZSBjaGFyYWN0ZXJzIHRvIGJlIGFsbCBjaGFyYWN0
ZXJzIChub3QgQ24pCi0gKiB0aGF0IGRvIG5vdCBncmFwaGljYWxseSBjb21iaW5lIHdpdGggcHJl
Y2VkaW5nIGNoYXJhY3RlcnMgKE0pCi0gKiBhbmQgdGhhdCBhcmUgbmVpdGhlciBjb250cm9sIChD
Yykgb3IgZm9ybWF0IChDZikgY2hhcmFjdGVycy4KLSAqCi0gKiBAcGFyYW0gYyB0aGUgY29kZSBw
b2ludCB0byBiZSB0ZXN0ZWQKLSAqIEByZXR1cm4gVFJVRSBpZiB0aGUgY29kZSBwb2ludCBpcyBh
IGJhc2UgY2hhcmFjdGVyIGFjY29yZGluZyB0byB0aGlzIGZ1bmN0aW9uCi0gKgotICogQHNlZSB1
X2lzYWxwaGEKLSAqIEBzZWUgdV9pc2RpZ2l0Ci0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9T
VEFCTEUgVUJvb2wgVV9FWFBPUlQyCi11X2lzYmFzZShVQ2hhcjMyIGMpOwotCi0vKioKLSAqIFJl
dHVybnMgdGhlIGJpZGlyZWN0aW9uYWwgY2F0ZWdvcnkgdmFsdWUgZm9yIHRoZSBjb2RlIHBvaW50
LAotICogd2hpY2ggaXMgdXNlZCBpbiB0aGUgVW5pY29kZSBiaWRpcmVjdGlvbmFsIGFsZ29yaXRo
bQotICogKFVBWCAjOSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHI5LykuCi0gKiBO
b3RlIHRoYXQgc29tZSA8ZW0+dW5hc3NpZ25lZDwvZW0+IGNvZGUgcG9pbnRzIGhhdmUgYmlkaSB2
YWx1ZXMKLSAqIG9mIFIgb3IgQUwgYmVjYXVzZSB0aGV5IGFyZSBpbiBibG9ja3MgdGhhdCBhcmUg
cmVzZXJ2ZWQKLSAqIGZvciBSaWdodC1Uby1MZWZ0IHNjcmlwdHMuCi0gKgotICogU2FtZSBhcyBq
YXZhLmxhbmcuQ2hhcmFjdGVyLmdldERpcmVjdGlvbmFsaXR5KCkKLSAqCi0gKiBAcGFyYW0gYyB0
aGUgY29kZSBwb2ludCB0byBiZSB0ZXN0ZWQKLSAqIEByZXR1cm4gdGhlIGJpZGlyZWN0aW9uYWwg
Y2F0ZWdvcnkgKFVDaGFyRGlyZWN0aW9uKSB2YWx1ZQotICoKLSAqIEBzZWUgVUNoYXJEaXJlY3Rp
b24KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBVQ2hhckRpcmVjdGlvbiBVX0VY
UE9SVDIKLXVfY2hhckRpcmVjdGlvbihVQ2hhcjMyIGMpOwotCi0vKioKLSAqIERldGVybWluZXMg
d2hldGhlciB0aGUgY29kZSBwb2ludCBoYXMgdGhlIEJpZGlfTWlycm9yZWQgcHJvcGVydHkuCi0g
KiBUaGlzIHByb3BlcnR5IGlzIHNldCBmb3IgY2hhcmFjdGVycyB0aGF0IGFyZSBjb21tb25seSB1
c2VkIGluCi0gKiBSaWdodC1Uby1MZWZ0IGNvbnRleHRzIGFuZCBuZWVkIHRvIGJlIGRpc3BsYXll
ZCB3aXRoIGEgIm1pcnJvcmVkIgotICogZ2x5cGguCi0gKgotICogU2FtZSBhcyBqYXZhLmxhbmcu
Q2hhcmFjdGVyLmlzTWlycm9yZWQoKS4KLSAqIFNhbWUgYXMgVUNIQVJfQklESV9NSVJST1JFRAot
ICoKLSAqIEBwYXJhbSBjIHRoZSBjb2RlIHBvaW50IHRvIGJlIHRlc3RlZAotICogQHJldHVybiBU
UlVFIGlmIHRoZSBjaGFyYWN0ZXIgaGFzIHRoZSBCaWRpX01pcnJvcmVkIHByb3BlcnR5Ci0gKgot
ICogQHNlZSBVQ0hBUl9CSURJX01JUlJPUkVECi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9T
VEFCTEUgVUJvb2wgVV9FWFBPUlQyCi11X2lzTWlycm9yZWQoVUNoYXIzMiBjKTsKLQotLyoqCi0g
KiBNYXBzIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIHRvIGEgIm1pcnJvci1pbWFnZSIgY2hhcmFj
dGVyLgotICogRm9yIGNoYXJhY3RlcnMgd2l0aCB0aGUgQmlkaV9NaXJyb3JlZCBwcm9wZXJ0eSwg
aW1wbGVtZW50YXRpb25zCi0gKiBzb21ldGltZXMgbmVlZCBhICJwb29yIG1hbidzIiBtYXBwaW5n
IHRvIGFub3RoZXIgVW5pY29kZQotICogY2hhcmFjdGVyIChjb2RlIHBvaW50KSBzdWNoIHRoYXQg
dGhlIGRlZmF1bHQgZ2x5cGggbWF5IHNlcnZlCi0gKiBhcyB0aGUgbWlycm9yLWltYWdlIG9mIHRo
ZSBkZWZhdWx0IGdseXBoIG9mIHRoZSBzcGVjaWZpZWQKLSAqIGNoYXJhY3Rlci4gVGhpcyBpcyB1
c2VmdWwgZm9yIHRleHQgY29udmVyc2lvbiB0byBhbmQgZnJvbQotICogY29kZXBhZ2VzIHdpdGgg
dmlzdWFsIG9yZGVyLCBhbmQgZm9yIGRpc3BsYXlzIHdpdGhvdXQgZ2x5cGgKLSAqIHNlbGVjdGlv
biBjYXBhYmlsaXRpZXMuCi0gKgotICogQHBhcmFtIGMgdGhlIGNvZGUgcG9pbnQgdG8gYmUgbWFw
cGVkCi0gKiBAcmV0dXJuIGFub3RoZXIgVW5pY29kZSBjb2RlIHBvaW50IHRoYXQgbWF5IHNlcnZl
IGFzIGEgbWlycm9yLWltYWdlCi0gKiAgICAgICAgIHN1YnN0aXR1dGUsIG9yIGMgaXRzZWxmIGlm
IHRoZXJlIGlzIG5vIHN1Y2ggbWFwcGluZyBvciBjCi0gKiAgICAgICAgIGRvZXMgbm90IGhhdmUg
dGhlIEJpZGlfTWlycm9yZWQgcHJvcGVydHkKLSAqCi0gKiBAc2VlIFVDSEFSX0JJRElfTUlSUk9S
RUQKLSAqIEBzZWUgdV9pc01pcnJvcmVkCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFC
TEUgVUNoYXIzMiBVX0VYUE9SVDIKLXVfY2hhck1pcnJvcihVQ2hhcjMyIGMpOwotCi0vKioKLSAq
IE1hcHMgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgdG8gaXRzIHBhaXJlZCBicmFja2V0IGNoYXJh
Y3Rlci4KLSAqIEZvciBCaWRpX1BhaXJlZF9CcmFja2V0X1R5cGUhPU5vbmUsIHRoaXMgaXMgdGhl
IHNhbWUgYXMgdV9jaGFyTWlycm9yKCkuCi0gKiBPdGhlcndpc2UgYyBpdHNlbGYgaXMgcmV0dXJu
ZWQuCi0gKiBTZWUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyOS8KLSAqCi0gKiBA
cGFyYW0gYyB0aGUgY29kZSBwb2ludCB0byBiZSBtYXBwZWQKLSAqIEByZXR1cm4gdGhlIHBhaXJl
ZCBicmFja2V0IGNvZGUgcG9pbnQsCi0gKiAgICAgICAgIG9yIGMgaXRzZWxmIGlmIHRoZXJlIGlz
IG5vIHN1Y2ggbWFwcGluZwotICogICAgICAgICAoQmlkaV9QYWlyZWRfQnJhY2tldF9UeXBlPU5v
bmUpCi0gKgotICogQHNlZSBVQ0hBUl9CSURJX1BBSVJFRF9CUkFDS0VUCi0gKiBAc2VlIFVDSEFS
X0JJRElfUEFJUkVEX0JSQUNLRVRfVFlQRQotICogQHNlZSB1X2NoYXJNaXJyb3IKLSAqIEBzdGFi
bGUgSUNVIDUyCi0gKi8KLVVfU1RBQkxFIFVDaGFyMzIgVV9FWFBPUlQyCi11X2dldEJpZGlQYWly
ZWRCcmFja2V0KFVDaGFyMzIgYyk7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgZ2VuZXJhbCBjYXRl
Z29yeSB2YWx1ZSBmb3IgdGhlIGNvZGUgcG9pbnQuCi0gKgotICogU2FtZSBhcyBqYXZhLmxhbmcu
Q2hhcmFjdGVyLmdldFR5cGUoKS4KLSAqCi0gKiBAcGFyYW0gYyB0aGUgY29kZSBwb2ludCB0byBi
ZSB0ZXN0ZWQKLSAqIEByZXR1cm4gdGhlIGdlbmVyYWwgY2F0ZWdvcnkgKFVDaGFyQ2F0ZWdvcnkp
IHZhbHVlCi0gKgotICogQHNlZSBVQ2hhckNhdGVnb3J5Ci0gKiBAc3RhYmxlIElDVSAyLjAKLSAq
LwotVV9TVEFCTEUgaW50OF90IFVfRVhQT1JUMgotdV9jaGFyVHlwZShVQ2hhcjMyIGMpOwotCi0v
KioKLSAqIEdldCBhIHNpbmdsZS1iaXQgYml0IHNldCBmb3IgdGhlIGdlbmVyYWwgY2F0ZWdvcnkg
b2YgYSBjaGFyYWN0ZXIuCi0gKiBUaGlzIGJpdCBzZXQgY2FuIGJlIGNvbXBhcmVkIGJpdHdpc2Ug
d2l0aCBVX0dDX1NNX01BU0ssIFVfR0NfTF9NQVNLLCBldGMuCi0gKiBTYW1lIGFzIFVfTUFTSyh1
X2NoYXJUeXBlKGMpKS4KLSAqCi0gKiBAcGFyYW0gYyB0aGUgY29kZSBwb2ludCB0byBiZSB0ZXN0
ZWQKLSAqIEByZXR1cm4gYSBzaW5nbGUtYml0IG1hc2sgY29ycmVzcG9uZGluZyB0byB0aGUgZ2Vu
ZXJhbCBjYXRlZ29yeSAoVUNoYXJDYXRlZ29yeSkgdmFsdWUKLSAqCi0gKiBAc2VlIHVfY2hhclR5
cGUKLSAqIEBzZWUgVUNoYXJDYXRlZ29yeQotICogQHNlZSBVX0dDX0NOX01BU0sKLSAqIEBzdGFi
bGUgSUNVIDIuMQotICovCi0jZGVmaW5lIFVfR0VUX0dDX01BU0soYykgVV9NQVNLKHVfY2hhclR5
cGUoYykpCi0KLS8qKgotICogQ2FsbGJhY2sgZnJvbSB1X2VudW1DaGFyVHlwZXMoKSwgaXMgY2Fs
bGVkIGZvciBlYWNoIGNvbnRpZ3VvdXMgcmFuZ2UKLSAqIG9mIGNvZGUgcG9pbnRzIGMgKHdoZXJl
IHN0YXJ0PD1jPGxpbWl0KQotICogd2l0aCB0aGUgc2FtZSBVbmljb2RlIGdlbmVyYWwgY2F0ZWdv
cnkgKCJjaGFyYWN0ZXIgdHlwZSIpLgotICoKLSAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBjYW4g
c3RvcCB0aGUgZW51bWVyYXRpb24gYnkgcmV0dXJuaW5nIEZBTFNFLgotICoKLSAqIEBwYXJhbSBj
b250ZXh0IGFuIG9wYXF1ZSBwb2ludGVyLCBhcyBwYXNzZWQgaW50byB1dHJpZV9lbnVtKCkKLSAq
IEBwYXJhbSBzdGFydCB0aGUgZmlyc3QgY29kZSBwb2ludCBpbiBhIGNvbnRpZ3VvdXMgcmFuZ2Ug
d2l0aCB2YWx1ZQotICogQHBhcmFtIGxpbWl0IG9uZSBwYXN0IHRoZSBsYXN0IGNvZGUgcG9pbnQg
aW4gYSBjb250aWd1b3VzIHJhbmdlIHdpdGggdmFsdWUKLSAqIEBwYXJhbSB0eXBlIHRoZSBnZW5l
cmFsIGNhdGVnb3J5IGZvciBhbGwgY29kZSBwb2ludHMgaW4gW3N0YXJ0Li5saW1pdFsKLSAqIEBy
ZXR1cm4gRkFMU0UgdG8gc3RvcCB0aGUgZW51bWVyYXRpb24KLSAqCi0gKiBAc3RhYmxlIElDVSAy
LjEKLSAqIEBzZWUgVUNoYXJDYXRlZ29yeQotICogQHNlZSB1X2VudW1DaGFyVHlwZXMKLSAqLwot
dHlwZWRlZiBVQm9vbCBVX0NBTExDT05WCi1VQ2hhckVudW1UeXBlUmFuZ2UoY29uc3Qgdm9pZCAq
Y29udGV4dCwgVUNoYXIzMiBzdGFydCwgVUNoYXIzMiBsaW1pdCwgVUNoYXJDYXRlZ29yeSB0eXBl
KTsKLQotLyoqCi0gKiBFbnVtZXJhdGUgZWZmaWNpZW50bHkgYWxsIGNvZGUgcG9pbnRzIHdpdGgg
dGhlaXIgVW5pY29kZSBnZW5lcmFsIGNhdGVnb3JpZXMuCi0gKgotICogVGhpcyBpcyB1c2VmdWwg
Zm9yIGJ1aWxkaW5nIGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgVW5pY29kZVNldCdzKSwKLSAqIGZv
ciBlbnVtZXJhdGluZyBhbGwgYXNzaWduZWQgY29kZSBwb2ludHMgKHR5cGUhPVVfVU5BU1NJR05F
RCksIGV0Yy4KLSAqCi0gKiBGb3IgZWFjaCBjb250aWd1b3VzIHJhbmdlIG9mIGNvZGUgcG9pbnRz
IHdpdGggYSBnaXZlbiBnZW5lcmFsIGNhdGVnb3J5ICgiY2hhcmFjdGVyIHR5cGUiKSwKLSAqIHRo
ZSBVQ2hhckVudW1UeXBlUmFuZ2UgZnVuY3Rpb24gaXMgY2FsbGVkLgotICogQWRqYWNlbnQgcmFu
Z2VzIGhhdmUgZGlmZmVyZW50IHR5cGVzLgotICogVGhlIFVuaWNvZGUgU3RhbmRhcmQgZ3VhcmFu
dGVlcyB0aGF0IHRoZSBudW1lcmljIHZhbHVlIG9mIHRoZSB0eXBlIGlzIDAuLjMxLgotICoKLSAq
IEBwYXJhbSBlbnVtUmFuZ2UgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQg
Zm9yIGVhY2ggY29udGlndW91cyByYW5nZQotICogICAgICAgICAgICAgICAgICBvZiBjb2RlIHBv
aW50cyB3aXRoIHRoZSBzYW1lIGdlbmVyYWwgY2F0ZWdvcnkKLSAqIEBwYXJhbSBjb250ZXh0IGFu
IG9wYXF1ZSBwb2ludGVyIHRoYXQgaXMgcGFzc2VkIG9uIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlv
bgotICoKLSAqIEBzdGFibGUgSUNVIDIuMQotICogQHNlZSBVQ2hhckNhdGVnb3J5Ci0gKiBAc2Vl
IFVDaGFyRW51bVR5cGVSYW5nZQotICovCi1VX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgotdV9lbnVt
Q2hhclR5cGVzKFVDaGFyRW51bVR5cGVSYW5nZSAqZW51bVJhbmdlLCBjb25zdCB2b2lkICpjb250
ZXh0KTsKLQotI2lmICFVQ09ORklHX05PX05PUk1BTElaQVRJT04KLQotLyoqCi0gKiBSZXR1cm5z
IHRoZSBjb21iaW5pbmcgY2xhc3Mgb2YgdGhlIGNvZGUgcG9pbnQgYXMgc3BlY2lmaWVkIGluIFVu
aWNvZGVEYXRhLnR4dC4KLSAqCi0gKiBAcGFyYW0gYyB0aGUgY29kZSBwb2ludCBvZiB0aGUgY2hh
cmFjdGVyCi0gKiBAcmV0dXJuIHRoZSBjb21iaW5pbmcgY2xhc3Mgb2YgdGhlIGNoYXJhY3Rlcgot
ICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxFIHVpbnQ4X3QgVV9FWFBPUlQyCi11X2dl
dENvbWJpbmluZ0NsYXNzKFVDaGFyMzIgYyk7Ci0KLSNlbmRpZgotCi0vKioKLSAqIFJldHVybnMg
dGhlIGRlY2ltYWwgZGlnaXQgdmFsdWUgb2YgYSBkZWNpbWFsIGRpZ2l0IGNoYXJhY3Rlci4KLSAq
IFN1Y2ggY2hhcmFjdGVycyBoYXZlIHRoZSBnZW5lcmFsIGNhdGVnb3J5ICJOZCIgKGRlY2ltYWwg
ZGlnaXQgbnVtYmVycykKLSAqIGFuZCBhIE51bWVyaWNfVHlwZSBvZiBEZWNpbWFsLgotICoKLSAq
IFVubGlrZSBJQ1UgcmVsZWFzZXMgYmVmb3JlIDIuNiwgbm8gZGlnaXQgdmFsdWVzIGFyZSByZXR1
cm5lZCBmb3IgYW55Ci0gKiBIYW4gY2hhcmFjdGVycyBiZWNhdXNlIEhhbiBudW1iZXIgY2hhcmFj
dGVycyBhcmUgb2Z0ZW4gdXNlZCB3aXRoIGEgc3BlY2lhbAotICogQ2hpbmVzZS1zdHlsZSBudW1i
ZXIgZm9ybWF0ICh3aXRoIGNoYXJhY3RlcnMgZm9yIHBvd2VycyBvZiAxMCBpbiBiZXR3ZWVuKQot
ICogaW5zdGVhZCBvZiBpbiBkZWNpbWFsLXBvc2l0aW9uYWwgbm90YXRpb24uCi0gKiBVbmljb2Rl
IDQgZXhwbGljaXRseSBhc3NpZ25zIEhhbiBudW1iZXIgY2hhcmFjdGVycyB0aGUgTnVtZXJpY19U
eXBlCi0gKiBOdW1lcmljIGluc3RlYWQgb2YgRGVjaW1hbC4KLSAqIFNlZSBKaXR0ZXJidWcgMTQ4
MyBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFVzZSB1X2dldEludFByb3BlcnR5VmFsdWUoYywg
VUNIQVJfTlVNRVJJQ19UWVBFKSBhbmQgdV9nZXROdW1lcmljVmFsdWUoKQotICogZm9yIGNvbXBs
ZXRlIG51bWVyaWMgVW5pY29kZSBwcm9wZXJ0aWVzLgotICoKLSAqIEBwYXJhbSBjIHRoZSBjb2Rl
IHBvaW50IGZvciB3aGljaCB0byBnZXQgdGhlIGRlY2ltYWwgZGlnaXQgdmFsdWUKLSAqIEByZXR1
cm4gdGhlIGRlY2ltYWwgZGlnaXQgdmFsdWUgb2YgYywKLSAqICAgICAgICAgb3IgLTEgaWYgYyBp
cyBub3QgYSBkZWNpbWFsIGRpZ2l0IGNoYXJhY3RlcgotICoKLSAqIEBzZWUgdV9nZXROdW1lcmlj
VmFsdWUKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JU
MgotdV9jaGFyRGlnaXRWYWx1ZShVQ2hhcjMyIGMpOwotCi0vKioKLSAqIFJldHVybnMgdGhlIFVu
aWNvZGUgYWxsb2NhdGlvbiBibG9jayB0aGF0IGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXIuCi0gKgot
ICogQHBhcmFtIGMgdGhlIGNvZGUgcG9pbnQgdG8gYmUgdGVzdGVkCi0gKiBAcmV0dXJuIHRoZSBi
bG9jayB2YWx1ZSAoVUJsb2NrQ29kZSkgZm9yIGMKLSAqCi0gKiBAc2VlIFVCbG9ja0NvZGUKLSAq
IEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBVQmxvY2tDb2RlIFVfRVhQT1JUMgotdWJs
b2NrX2dldENvZGUoVUNoYXIzMiBjKTsKLQotLyoqCi0gKiBSZXRyaWV2ZSB0aGUgbmFtZSBvZiBh
IFVuaWNvZGUgY2hhcmFjdGVyLgotICogRGVwZW5kaW5nIG9uIDxjb2RlPm5hbWVDaG9pY2U8L2Nv
ZGU+LCB0aGUgY2hhcmFjdGVyIG5hbWUgd3JpdHRlbgotICogaW50byB0aGUgYnVmZmVyIGlzIHRo
ZSAibW9kZXJuIiBuYW1lIG9yIHRoZSBuYW1lIHRoYXQgd2FzIGRlZmluZWQKLSAqIGluIFVuaWNv
ZGUgdmVyc2lvbiAxLjAuCi0gKiBUaGUgbmFtZSBjb250YWlucyBvbmx5ICJpbnZhcmlhbnQiIGNo
YXJhY3RlcnMKLSAqIGxpa2UgQS1aLCAwLTksIHNwYWNlLCBhbmQgJy0nLgotICogVW5pY29kZSAx
LjAgbmFtZXMgYXJlIG9ubHkgcmV0cmlldmVkIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIHRo
ZSBtb2Rlcm4KLSAqIG5hbWVzIGFuZCBpZiB0aGUgZGF0YSBmaWxlIGNvbnRhaW5zIHRoZSBkYXRh
IGZvciB0aGVtLiBnZW5uYW1lcyBtYXkgb3IgbWF5Ci0gKiBub3QgYmUgY2FsbGVkIHdpdGggYSBj
b21tYW5kIGxpbmUgb3B0aW9uIHRvIGluY2x1ZGUgMS4wIG5hbWVzIGluIHVuYW1lcy5kYXQuCi0g
KgotICogQHBhcmFtIGNvZGUgVGhlIGNoYXJhY3RlciAoY29kZSBwb2ludCkgZm9yIHdoaWNoIHRv
IGdldCB0aGUgbmFtZS4KLSAqICAgICAgICAgICAgIEl0IG11c3QgYmUgPGNvZGU+MDw9Y29kZTw9
MHgxMGZmZmY8L2NvZGU+LgotICogQHBhcmFtIG5hbWVDaG9pY2UgU2VsZWN0b3IgZm9yIHdoaWNo
IG5hbWUgdG8gZ2V0LgotICogQHBhcmFtIGJ1ZmZlciBEZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBj
b3B5aW5nIHRoZSBuYW1lLgotICogICAgICAgICAgICAgICBUaGUgbmFtZSB3aWxsIGFsd2F5cyBi
ZSB6ZXJvLXRlcm1pbmF0ZWQuCi0gKiAgICAgICAgICAgICAgIElmIHRoZXJlIGlzIG5vIG5hbWUs
IHRoZW4gdGhlIGJ1ZmZlciB3aWxsIGJlIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nLgotICogQHBh
cmFtIGJ1ZmZlckxlbmd0aCA8Y29kZT49PXNpemVvZihidWZmZXIpPC9jb2RlPgotICogQHBhcmFt
IHBFcnJvckNvZGUgUG9pbnRlciB0byBhIFVFcnJvckNvZGUgdmFyaWFibGU7Ci0gKiAgICAgICAg
Y2hlY2sgZm9yIDxjb2RlPlVfU1VDQ0VTUygpPC9jb2RlPiBhZnRlciA8Y29kZT51X2NoYXJOYW1l
KCk8L2NvZGU+Ci0gKiAgICAgICAgcmV0dXJucy4KLSAqIEByZXR1cm4gVGhlIGxlbmd0aCBvZiB0
aGUgbmFtZSwgb3IgMCBpZiB0aGVyZSBpcyBubyBuYW1lIGZvciB0aGlzIGNoYXJhY3Rlci4KLSAq
ICAgICAgICAgSWYgdGhlIGJ1ZmZlckxlbmd0aCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhl
IGxlbmd0aCwgdGhlbiB0aGUgYnVmZmVyCi0gKiAgICAgICAgIGNvbnRhaW5zIHRoZSB0cnVuY2F0
ZWQgbmFtZSBhbmQgdGhlIHJldHVybmVkIGxlbmd0aCBpbmRpY2F0ZXMgdGhlIGZ1bGwKLSAqICAg
ICAgICAgbGVuZ3RoIG9mIHRoZSBuYW1lLgotICogICAgICAgICBUaGUgbGVuZ3RoIGRvZXMgbm90
IGluY2x1ZGUgdGhlIHplcm8tdGVybWluYXRpb24uCi0gKgotICogQHNlZSBVQ2hhck5hbWVDaG9p
Y2UKLSAqIEBzZWUgdV9jaGFyRnJvbU5hbWUKLSAqIEBzZWUgdV9lbnVtQ2hhck5hbWVzCi0gKiBA
c3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKLXVfY2hhck5h
bWUoVUNoYXIzMiBjb2RlLCBVQ2hhck5hbWVDaG9pY2UgbmFtZUNob2ljZSwKLSAgICAgICAgICAg
Y2hhciAqYnVmZmVyLCBpbnQzMl90IGJ1ZmZlckxlbmd0aCwKLSAgICAgICAgICAgVUVycm9yQ29k
ZSAqcEVycm9yQ29kZSk7Ci0KLSNpZm5kZWYgVV9ISURFX0RFUFJFQ0FURURfQVBJIAotLyoqCi0g
KiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KLSAqIFVzZWQgdG8gcmV0dXJuIHRoZSBJU08gMTA2
NDYgY29tbWVudCBmb3IgYSBjaGFyYWN0ZXIuCi0gKiBUaGUgVW5pY29kZSBJU09fQ29tbWVudCBw
cm9wZXJ0eSBpcyBkZXByZWNhdGVkIGFuZCBoYXMgbm8gdmFsdWVzLgotICoKLSAqIEBwYXJhbSBj
IFRoZSBjaGFyYWN0ZXIgKGNvZGUgcG9pbnQpIGZvciB3aGljaCB0byBnZXQgdGhlIElTTyBjb21t
ZW50LgotICogICAgICAgICAgICAgSXQgbXVzdCBiZSA8Y29kZT4wPD1jPD0weDEwZmZmZjwvY29k
ZT4uCi0gKiBAcGFyYW0gZGVzdCBEZXN0aW5hdGlvbiBhZGRyZXNzIGZvciBjb3B5aW5nIHRoZSBj
b21tZW50LgotICogICAgICAgICAgICAgVGhlIGNvbW1lbnQgd2lsbCBiZSB6ZXJvLXRlcm1pbmF0
ZWQgaWYgcG9zc2libGUuCi0gKiAgICAgICAgICAgICBJZiB0aGVyZSBpcyBubyBjb21tZW50LCB0
aGVuIHRoZSBidWZmZXIgd2lsbCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZy4KLSAqIEBwYXJh
bSBkZXN0Q2FwYWNpdHkgPGNvZGU+PT1zaXplb2YoZGVzdCk8L2NvZGU+Ci0gKiBAcGFyYW0gcEVy
cm9yQ29kZSBQb2ludGVyIHRvIGEgVUVycm9yQ29kZSB2YXJpYWJsZTsKLSAqICAgICAgICBjaGVj
ayBmb3IgPGNvZGU+VV9TVUNDRVNTKCk8L2NvZGU+IGFmdGVyIDxjb2RlPnVfZ2V0SVNPQ29tbWVu
dCgpPC9jb2RlPgotICogICAgICAgIHJldHVybnMuCi0gKiBAcmV0dXJuIDAKLSAqCi0gKiBAZGVw
cmVjYXRlZCBJQ1UgNDkKLSAqLwotVV9ERVBSRUNBVEVEIGludDMyX3QgVV9FWFBPUlQyCi11X2dl
dElTT0NvbW1lbnQoVUNoYXIzMiBjLAotICAgICAgICAgICAgICAgIGNoYXIgKmRlc3QsIGludDMy
X3QgZGVzdENhcGFjaXR5LAotICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUp
OwotI2VuZGlmICAvKiBVX0hJREVfREVQUkVDQVRFRF9BUEkgKi8KLQotLyoqCi0gKiBGaW5kIGEg
VW5pY29kZSBjaGFyYWN0ZXIgYnkgaXRzIG5hbWUgYW5kIHJldHVybiBpdHMgY29kZSBwb2ludCB2
YWx1ZS4KLSAqIFRoZSBuYW1lIGlzIG1hdGNoZWQgZXhhY3RseSBhbmQgY29tcGxldGVseS4KLSAq
IElmIHRoZSBuYW1lIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBjb2RlIHBvaW50LCA8aT5wRXJy
b3JDb2RlPC9pPgotICogaXMgc2V0IHRvIDxjb2RlPlVfSU5WQUxJRF9DSEFSX0ZPVU5EPC9jb2Rl
Pi4KLSAqIEEgVW5pY29kZSAxLjAgbmFtZSBpcyBtYXRjaGVkIG9ubHkgaWYgaXQgZGlmZmVycyBm
cm9tIHRoZSBtb2Rlcm4gbmFtZS4KLSAqIFVuaWNvZGUgbmFtZXMgYXJlIGFsbCB1cHBlcmNhc2Uu
IEV4dGVuZGVkIG5hbWVzIGFyZSBsb3dlcmNhc2UgZm9sbG93ZWQKLSAqIGJ5IGFuIHVwcGVyY2Fz
ZSBoZXhhZGVjaW1hbCBudW1iZXIsIGFuZCB3aXRoaW4gYW5nbGUgYnJhY2tldHMuCi0gKgotICog
QHBhcmFtIG5hbWVDaG9pY2UgU2VsZWN0b3IgZm9yIHdoaWNoIG5hbWUgdG8gbWF0Y2guCi0gKiBA
cGFyYW0gbmFtZSBUaGUgbmFtZSB0byBtYXRjaC4KLSAqIEBwYXJhbSBwRXJyb3JDb2RlIFBvaW50
ZXIgdG8gYSBVRXJyb3JDb2RlIHZhcmlhYmxlCi0gKiBAcmV0dXJuIFRoZSBVbmljb2RlIHZhbHVl
IG9mIHRoZSBjb2RlIHBvaW50IHdpdGggdGhlIGdpdmVuIG5hbWUsCi0gKiAgICAgICAgIG9yIGFu
IHVuZGVmaW5lZCB2YWx1ZSBpZiB0aGVyZSBpcyBubyBzdWNoIGNvZGUgcG9pbnQuCi0gKgotICog
QHNlZSBVQ2hhck5hbWVDaG9pY2UKLSAqIEBzZWUgdV9jaGFyTmFtZQotICogQHNlZSB1X2VudW1D
aGFyTmFtZXMKLSAqIEBzdGFibGUgSUNVIDEuNwotICovCi1VX1NUQUJMRSBVQ2hhcjMyIFVfRVhQ
T1JUMgotdV9jaGFyRnJvbU5hbWUoVUNoYXJOYW1lQ2hvaWNlIG5hbWVDaG9pY2UsCi0gICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVy
cm9yQ29kZSk7Ci0KLS8qKgotICogVHlwZSBvZiBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB1X2Vu
dW1DaGFyTmFtZXMoKSB0aGF0IGdldHMgY2FsbGVkCi0gKiBmb3IgZWFjaCBVbmljb2RlIGNoYXJh
Y3RlciB3aXRoIHRoZSBjb2RlIHBvaW50IHZhbHVlIGFuZAotICogdGhlIGNoYXJhY3RlciBuYW1l
LgotICogSWYgc3VjaCBhIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UsIHRoZW4gdGhlIGVudW1lcmF0
aW9uIGlzIHN0b3BwZWQuCi0gKgotICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgcG9pbnRl
ciB0aGF0IHdhcyBwYXNzZWQgdG8gdV9lbnVtQ2hhck5hbWVzKCkuCi0gKiBAcGFyYW0gY29kZSBU
aGUgVW5pY29kZSBjb2RlIHBvaW50IGZvciB0aGUgY2hhcmFjdGVyIHdpdGggdGhpcyBuYW1lLgot
ICogQHBhcmFtIG5hbWVDaG9pY2UgU2VsZWN0b3IgZm9yIHdoaWNoIGtpbmQgb2YgbmFtZXMgaXMg
ZW51bWVyYXRlZC4KLSAqIEBwYXJhbSBuYW1lIFRoZSBjaGFyYWN0ZXIncyBuYW1lLCB6ZXJvLXRl
cm1pbmF0ZWQuCi0gKiBAcGFyYW0gbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIG5hbWUuCi0gKiBA
cmV0dXJuIFRSVUUgaWYgdGhlIGVudW1lcmF0aW9uIHNob3VsZCBjb250aW51ZSwgRkFMU0UgdG8g
c3RvcCBpdC4KLSAqCi0gKiBAc2VlIFVDaGFyTmFtZUNob2ljZQotICogQHNlZSB1X2VudW1DaGFy
TmFtZXMKLSAqIEBzdGFibGUgSUNVIDEuNwotICovCi10eXBlZGVmIFVCb29sIFVfQ0FMTENPTlYg
VUVudW1DaGFyTmFtZXNGbih2b2lkICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVDaGFyMzIgY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hh
ck5hbWVDaG9pY2UgbmFtZUNob2ljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
bGVuZ3RoKTsKLQotLyoqCi0gKiBFbnVtZXJhdGUgYWxsIGFzc2lnbmVkIFVuaWNvZGUgY2hhcmFj
dGVycyBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgbGltaXQKLSAqIGNvZGUgcG9pbnRzIChzdGFydCBp
bmNsdXNpdmUsIGxpbWl0IGV4Y2x1c2l2ZSkgYW5kIGNhbGwgYSBmdW5jdGlvbgotICogZm9yIGVh
Y2gsIHBhc3NpbmcgdGhlIGNvZGUgcG9pbnQgdmFsdWUgYW5kIHRoZSBjaGFyYWN0ZXIgbmFtZS4K
LSAqIEZvciBVbmljb2RlIDEuMCBuYW1lcywgb25seSB0aG9zZSBhcmUgZW51bWVyYXRlZCB0aGF0
IGRpZmZlciBmcm9tIHRoZQotICogbW9kZXJuIG5hbWVzLgotICoKLSAqIEBwYXJhbSBzdGFydCBU
aGUgZmlyc3QgY29kZSBwb2ludCBpbiB0aGUgZW51bWVyYXRpb24gcmFuZ2UuCi0gKiBAcGFyYW0g
bGltaXQgT25lIG1vcmUgdGhhbiB0aGUgbGFzdCBjb2RlIHBvaW50IGluIHRoZSBlbnVtZXJhdGlv
biByYW5nZQotICogICAgICAgICAgICAgICh0aGUgZmlyc3Qgb25lIGFmdGVyIHRoZSByYW5nZSku
Ci0gKiBAcGFyYW0gZm4gVGhlIGZ1bmN0aW9uIHRoYXQgaXMgdG8gYmUgY2FsbGVkIGZvciBlYWNo
IGNoYXJhY3RlciBuYW1lLgotICogQHBhcmFtIGNvbnRleHQgQW4gYXJiaXRyYXJ5IHBvaW50ZXIg
dGhhdCBpcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgotICogQHBhcmFtIG5hbWVDaG9pY2UgU2Vs
ZWN0b3IgZm9yIHdoaWNoIGtpbmQgb2YgbmFtZXMgdG8gZW51bWVyYXRlLgotICogQHBhcmFtIHBF
cnJvckNvZGUgUG9pbnRlciB0byBhIFVFcnJvckNvZGUgdmFyaWFibGUKLSAqCi0gKiBAc2VlIFVD
aGFyTmFtZUNob2ljZQotICogQHNlZSBVRW51bUNoYXJOYW1lc0ZuCi0gKiBAc2VlIHVfY2hhck5h
bWUKLSAqIEBzZWUgdV9jaGFyRnJvbU5hbWUKLSAqIEBzdGFibGUgSUNVIDEuNwotICovCi1VX1NU
QUJMRSB2b2lkIFVfRVhQT1JUMgotdV9lbnVtQ2hhck5hbWVzKFVDaGFyMzIgc3RhcnQsIFVDaGFy
MzIgbGltaXQsCi0gICAgICAgICAgICAgICAgVUVudW1DaGFyTmFtZXNGbiAqZm4sCi0gICAgICAg
ICAgICAgICAgdm9pZCAqY29udGV4dCwKLSAgICAgICAgICAgICAgICBVQ2hhck5hbWVDaG9pY2Ug
bmFtZUNob2ljZSwKLSAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKLQot
LyoqCi0gKiBSZXR1cm4gdGhlIFVuaWNvZGUgbmFtZSBmb3IgYSBnaXZlbiBwcm9wZXJ0eSwgYXMg
Z2l2ZW4gaW4gdGhlCi0gKiBVbmljb2RlIGRhdGFiYXNlIGZpbGUgUHJvcGVydHlBbGlhc2VzLnR4
dC4KLSAqCi0gKiBJbiBhZGRpdGlvbiwgdGhpcyBmdW5jdGlvbiBtYXBzIHRoZSBwcm9wZXJ0eQot
ICogVUNIQVJfR0VORVJBTF9DQVRFR09SWV9NQVNLIHRvIHRoZSBzeW50aGV0aWMgbmFtZXMgImdj
bSIgLwotICogIkdlbmVyYWxfQ2F0ZWdvcnlfTWFzayIuICBUaGVzZSBuYW1lcyBhcmUgbm90IGlu
Ci0gKiBQcm9wZXJ0eUFsaWFzZXMudHh0LgotICoKLSAqIEBwYXJhbSBwcm9wZXJ0eSBVUHJvcGVy
dHkgc2VsZWN0b3Igb3RoZXIgdGhhbiBVQ0hBUl9JTlZBTElEX0NPREUuCi0gKiAgICAgICAgIElm
IG91dCBvZiByYW5nZSwgTlVMTCBpcyByZXR1cm5lZC4KLSAqCi0gKiBAcGFyYW0gbmFtZUNob2lj
ZSBzZWxlY3RvciBmb3Igd2hpY2ggbmFtZSB0byBnZXQuICBJZiBvdXQgb2YgcmFuZ2UsCi0gKiAg
ICAgICAgIE5VTEwgaXMgcmV0dXJuZWQuICBBbGwgcHJvcGVydGllcyBoYXZlIGEgbG9uZyBuYW1l
LiAgTW9zdAotICogICAgICAgICBoYXZlIGEgc2hvcnQgbmFtZSwgYnV0IHNvbWUgZG8gbm90LiAg
VW5pY29kZSBhbGxvd3MgZm9yCi0gKiAgICAgICAgIGFkZGl0aW9uYWwgbmFtZXM7IGlmIHByZXNl
bnQgdGhlc2Ugd2lsbCBiZSByZXR1cm5lZCBieQotICogICAgICAgICBVX0xPTkdfUFJPUEVSVFlf
TkFNRSArIGksIHdoZXJlIGk9MSwgMiwuLi4KLSAqCi0gKiBAcmV0dXJuIGEgcG9pbnRlciB0byB0
aGUgbmFtZSwgb3IgTlVMTCBpZiBlaXRoZXIgdGhlCi0gKiAgICAgICAgIHByb3BlcnR5IG9yIHRo
ZSBuYW1lQ2hvaWNlIGlzIG91dCBvZiByYW5nZS4gIElmIGEgZ2l2ZW4KLSAqICAgICAgICAgbmFt
ZUNob2ljZSByZXR1cm5zIE5VTEwsIHRoZW4gYWxsIGxhcmdlciB2YWx1ZXMgb2YKLSAqICAgICAg
ICAgbmFtZUNob2ljZSB3aWxsIHJldHVybiBOVUxMLCB3aXRoIG9uZSBleGNlcHRpb246IGlmIE5V
TEwgaXMKLSAqICAgICAgICAgcmV0dXJuZWQgZm9yIFVfU0hPUlRfUFJPUEVSVFlfTkFNRSwgdGhl
bgotICogICAgICAgICBVX0xPTkdfUFJPUEVSVFlfTkFNRSAoYW5kIGhpZ2hlcikgbWF5IHN0aWxs
IHJldHVybiBhCi0gKiAgICAgICAgIG5vbi1OVUxMIHZhbHVlLiAgVGhlIHJldHVybmVkIHBvaW50
ZXIgaXMgdmFsaWQgdW50aWwKLSAqICAgICAgICAgdV9jbGVhbnVwKCkgaXMgY2FsbGVkLgotICoK
LSAqIEBzZWUgVVByb3BlcnR5Ci0gKiBAc2VlIFVQcm9wZXJ0eU5hbWVDaG9pY2UKLSAqIEBzdGFi
bGUgSUNVIDIuNAotICovCi1VX1NUQUJMRSBjb25zdCBjaGFyKiBVX0VYUE9SVDIKLXVfZ2V0UHJv
cGVydHlOYW1lKFVQcm9wZXJ0eSBwcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICAgIFVQcm9wZXJ0
eU5hbWVDaG9pY2UgbmFtZUNob2ljZSk7Ci0KLS8qKgotICogUmV0dXJuIHRoZSBVUHJvcGVydHkg
ZW51bSBmb3IgYSBnaXZlbiBwcm9wZXJ0eSBuYW1lLCBhcyBzcGVjaWZpZWQKLSAqIGluIHRoZSBV
bmljb2RlIGRhdGFiYXNlIGZpbGUgUHJvcGVydHlBbGlhc2VzLnR4dC4gIFNob3J0LCBsb25nLCBh
bmQKLSAqIGFueSBvdGhlciB2YXJpYW50cyBhcmUgcmVjb2duaXplZC4KLSAqCi0gKiBJbiBhZGRp
dGlvbiwgdGhpcyBmdW5jdGlvbiBtYXBzIHRoZSBzeW50aGV0aWMgbmFtZXMgImdjbSIgLwotICog
IkdlbmVyYWxfQ2F0ZWdvcnlfTWFzayIgdG8gdGhlIHByb3BlcnR5Ci0gKiBVQ0hBUl9HRU5FUkFM
X0NBVEVHT1JZX01BU0suICBUaGVzZSBuYW1lcyBhcmUgbm90IGluCi0gKiBQcm9wZXJ0eUFsaWFz
ZXMudHh0LgotICoKLSAqIEBwYXJhbSBhbGlhcyB0aGUgcHJvcGVydHkgbmFtZSB0byBiZSBtYXRj
aGVkLiAgVGhlIG5hbWUgaXMgY29tcGFyZWQKLSAqICAgICAgICAgdXNpbmcgImxvb3NlIG1hdGNo
aW5nIiBhcyBkZXNjcmliZWQgaW4gUHJvcGVydHlBbGlhc2VzLnR4dC4KLSAqCi0gKiBAcmV0dXJu
IGEgVVByb3BlcnR5IGVudW0sIG9yIFVDSEFSX0lOVkFMSURfQ09ERSBpZiB0aGUgZ2l2ZW4gbmFt
ZQotICogICAgICAgICBkb2VzIG5vdCBtYXRjaCBhbnkgcHJvcGVydHkuCi0gKgotICogQHNlZSBV
UHJvcGVydHkKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi1VX1NUQUJMRSBVUHJvcGVydHkgVV9F
WFBPUlQyCi11X2dldFByb3BlcnR5RW51bShjb25zdCBjaGFyKiBhbGlhcyk7Ci0KLS8qKgotICog
UmV0dXJuIHRoZSBVbmljb2RlIG5hbWUgZm9yIGEgZ2l2ZW4gcHJvcGVydHkgdmFsdWUsIGFzIGdp
dmVuIGluIHRoZQotICogVW5pY29kZSBkYXRhYmFzZSBmaWxlIFByb3BlcnR5VmFsdWVBbGlhc2Vz
LnR4dC4KLSAqCi0gKiBOb3RlOiBTb21lIG9mIHRoZSBuYW1lcyBpbiBQcm9wZXJ0eVZhbHVlQWxp
YXNlcy50eHQgY2FuIG9ubHkgYmUKLSAqIHJldHJpZXZlZCB1c2luZyBVQ0hBUl9HRU5FUkFMX0NB
VEVHT1JZX01BU0ssIG5vdAotICogVUNIQVJfR0VORVJBTF9DQVRFR09SWS4gIFRoZXNlIGluY2x1
ZGU6ICJDIiAvICJPdGhlciIsICJMIiAvCi0gKiAiTGV0dGVyIiwgIkxDIiAvICJDYXNlZF9MZXR0
ZXIiLCAiTSIgLyAiTWFyayIsICJOIiAvICJOdW1iZXIiLCAiUCIKLSAqIC8gIlB1bmN0dWF0aW9u
IiwgIlMiIC8gIlN5bWJvbCIsIGFuZCAiWiIgLyAiU2VwYXJhdG9yIi4KLSAqCi0gKiBAcGFyYW0g
cHJvcGVydHkgVVByb3BlcnR5IHNlbGVjdG9yIGNvbnN0YW50LgotICogICAgICAgIE11c3QgYmUg
VUNIQVJfQklOQVJZX1NUQVJUPD13aGljaDxVQ0hBUl9CSU5BUllfTElNSVQKLSAqICAgICAgICBv
ciBVQ0hBUl9JTlRfU1RBUlQ8PXdoaWNoPFVDSEFSX0lOVF9MSU1JVAotICogICAgICAgIG9yIFVD
SEFSX01BU0tfU1RBUlQ8PXdoaWNoPFVDSEFSX01BU0tfTElNSVQuCi0gKiAgICAgICAgSWYgb3V0
IG9mIHJhbmdlLCBOVUxMIGlzIHJldHVybmVkLgotICoKLSAqIEBwYXJhbSB2YWx1ZSBzZWxlY3Rv
ciBmb3IgYSB2YWx1ZSBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LiAgSWYgb3V0Ci0gKiAgICAgICAg
IG9mIHJhbmdlLCBOVUxMIGlzIHJldHVybmVkLiAgSW4gZ2VuZXJhbCwgdmFsaWQgdmFsdWVzIHJh
bmdlCi0gKiAgICAgICAgIGZyb20gMCB1cCB0byBzb21lIG1heGltdW0uICBUaGVyZSBhcmUgYSBm
ZXcgZXhjZXB0aW9uczoKLSAqICAgICAgICAgKDEuKSBVQ0hBUl9CTE9DSyB2YWx1ZXMgYmVnaW4g
YXQgdGhlIG5vbi16ZXJvIHZhbHVlCi0gKiAgICAgICAgIFVCTE9DS19CQVNJQ19MQVRJTi4gICgy
LikgIFVDSEFSX0NBTk9OSUNBTF9DT01CSU5JTkdfQ0xBU1MKLSAqICAgICAgICAgdmFsdWVzIGFy
ZSBub3QgY29udGlndW91cyBhbmQgcmFuZ2UgZnJvbSAwLi4yNDAuICAoMy4pCi0gKiAgICAgICAg
IFVDSEFSX0dFTkVSQUxfQ0FURUdPUllfTUFTSyB2YWx1ZXMgYXJlIG5vdCB2YWx1ZXMgb2YKLSAq
ICAgICAgICAgVUNoYXJDYXRlZ29yeSwgYnV0IHJhdGhlciBtYXNrIHZhbHVlcyBwcm9kdWNlZCBi
eQotICogICAgICAgICBVX0dFVF9HQ19NQVNLKCkuICBUaGlzIGFsbG93cyBncm91cGVkIGNhdGVn
b3JpZXMgc3VjaCBhcwotICogICAgICAgICBbOkw6XSB0byBiZSByZXByZXNlbnRlZC4gIE1hc2sg
dmFsdWVzIHJhbmdlCi0gKiAgICAgICAgIG5vbi1jb250aWd1b3VzbHkgZnJvbSAxLi5VX0dDX1Bf
TUFTSy4KLSAqCi0gKiBAcGFyYW0gbmFtZUNob2ljZSBzZWxlY3RvciBmb3Igd2hpY2ggbmFtZSB0
byBnZXQuICBJZiBvdXQgb2YgcmFuZ2UsCi0gKiAgICAgICAgIE5VTEwgaXMgcmV0dXJuZWQuICBB
bGwgdmFsdWVzIGhhdmUgYSBsb25nIG5hbWUuICBNb3N0IGhhdmUKLSAqICAgICAgICAgYSBzaG9y
dCBuYW1lLCBidXQgc29tZSBkbyBub3QuICBVbmljb2RlIGFsbG93cyBmb3IKLSAqICAgICAgICAg
YWRkaXRpb25hbCBuYW1lczsgaWYgcHJlc2VudCB0aGVzZSB3aWxsIGJlIHJldHVybmVkIGJ5Ci0g
KiAgICAgICAgIFVfTE9OR19QUk9QRVJUWV9OQU1FICsgaSwgd2hlcmUgaT0xLCAyLC4uLgotCi0g
KiBAcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmFtZSwgb3IgTlVMTCBpZiBlaXRoZXIgdGhlCi0g
KiAgICAgICAgIHByb3BlcnR5IG9yIHRoZSBuYW1lQ2hvaWNlIGlzIG91dCBvZiByYW5nZS4gIElm
IGEgZ2l2ZW4KLSAqICAgICAgICAgbmFtZUNob2ljZSByZXR1cm5zIE5VTEwsIHRoZW4gYWxsIGxh
cmdlciB2YWx1ZXMgb2YKLSAqICAgICAgICAgbmFtZUNob2ljZSB3aWxsIHJldHVybiBOVUxMLCB3
aXRoIG9uZSBleGNlcHRpb246IGlmIE5VTEwgaXMKLSAqICAgICAgICAgcmV0dXJuZWQgZm9yIFVf
U0hPUlRfUFJPUEVSVFlfTkFNRSwgdGhlbgotICogICAgICAgICBVX0xPTkdfUFJPUEVSVFlfTkFN
RSAoYW5kIGhpZ2hlcikgbWF5IHN0aWxsIHJldHVybiBhCi0gKiAgICAgICAgIG5vbi1OVUxMIHZh
bHVlLiAgVGhlIHJldHVybmVkIHBvaW50ZXIgaXMgdmFsaWQgdW50aWwKLSAqICAgICAgICAgdV9j
bGVhbnVwKCkgaXMgY2FsbGVkLgotICoKLSAqIEBzZWUgVVByb3BlcnR5Ci0gKiBAc2VlIFVQcm9w
ZXJ0eU5hbWVDaG9pY2UKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi1VX1NUQUJMRSBjb25zdCBj
aGFyKiBVX0VYUE9SVDIKLXVfZ2V0UHJvcGVydHlWYWx1ZU5hbWUoVVByb3BlcnR5IHByb3BlcnR5
LAotICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHZhbHVlLAotICAgICAgICAgICAgICAg
ICAgICAgICBVUHJvcGVydHlOYW1lQ2hvaWNlIG5hbWVDaG9pY2UpOwotCi0vKioKLSAqIFJldHVy
biB0aGUgcHJvcGVydHkgdmFsdWUgaW50ZWdlciBmb3IgYSBnaXZlbiB2YWx1ZSBuYW1lLCBhcwot
ICogc3BlY2lmaWVkIGluIHRoZSBVbmljb2RlIGRhdGFiYXNlIGZpbGUgUHJvcGVydHlWYWx1ZUFs
aWFzZXMudHh0LgotICogU2hvcnQsIGxvbmcsIGFuZCBhbnkgb3RoZXIgdmFyaWFudHMgYXJlIHJl
Y29nbml6ZWQuCi0gKgotICogTm90ZTogU29tZSBvZiB0aGUgbmFtZXMgaW4gUHJvcGVydHlWYWx1
ZUFsaWFzZXMudHh0IHdpbGwgb25seSBiZQotICogcmVjb2duaXplZCB3aXRoIFVDSEFSX0dFTkVS
QUxfQ0FURUdPUllfTUFTSywgbm90Ci0gKiBVQ0hBUl9HRU5FUkFMX0NBVEVHT1JZLiAgVGhlc2Ug
aW5jbHVkZTogIkMiIC8gIk90aGVyIiwgIkwiIC8KLSAqICJMZXR0ZXIiLCAiTEMiIC8gIkNhc2Vk
X0xldHRlciIsICJNIiAvICJNYXJrIiwgIk4iIC8gIk51bWJlciIsICJQIgotICogLyAiUHVuY3R1
YXRpb24iLCAiUyIgLyAiU3ltYm9sIiwgYW5kICJaIiAvICJTZXBhcmF0b3IiLgotICoKLSAqIEBw
YXJhbSBwcm9wZXJ0eSBVUHJvcGVydHkgc2VsZWN0b3IgY29uc3RhbnQuCi0gKiAgICAgICAgTXVz
dCBiZSBVQ0hBUl9CSU5BUllfU1RBUlQ8PXdoaWNoPFVDSEFSX0JJTkFSWV9MSU1JVAotICogICAg
ICAgIG9yIFVDSEFSX0lOVF9TVEFSVDw9d2hpY2g8VUNIQVJfSU5UX0xJTUlUCi0gKiAgICAgICAg
b3IgVUNIQVJfTUFTS19TVEFSVDw9d2hpY2g8VUNIQVJfTUFTS19MSU1JVC4KLSAqICAgICAgICBJ
ZiBvdXQgb2YgcmFuZ2UsIFVDSEFSX0lOVkFMSURfQ09ERSBpcyByZXR1cm5lZC4KLSAqCi0gKiBA
cGFyYW0gYWxpYXMgdGhlIHZhbHVlIG5hbWUgdG8gYmUgbWF0Y2hlZC4gIFRoZSBuYW1lIGlzIGNv
bXBhcmVkCi0gKiAgICAgICAgIHVzaW5nICJsb29zZSBtYXRjaGluZyIgYXMgZGVzY3JpYmVkIGlu
Ci0gKiAgICAgICAgIFByb3BlcnR5VmFsdWVBbGlhc2VzLnR4dC4KLSAqCi0gKiBAcmV0dXJuIGEg
dmFsdWUgaW50ZWdlciBvciBVQ0hBUl9JTlZBTElEX0NPREUgaWYgdGhlIGdpdmVuIG5hbWUKLSAq
ICAgICAgICAgZG9lcyBub3QgbWF0Y2ggYW55IHZhbHVlIG9mIHRoZSBnaXZlbiBwcm9wZXJ0eSwg
b3IgaWYgdGhlCi0gKiAgICAgICAgIHByb3BlcnR5IGlzIGludmFsaWQuICBOb3RlOiBVQ0hBUl9H
RU5FUkFMX0NBVEVHT1JZX01BU0sgdmFsdWVzCi0gKiAgICAgICAgIGFyZSBub3QgdmFsdWVzIG9m
IFVDaGFyQ2F0ZWdvcnksIGJ1dCByYXRoZXIgbWFzayB2YWx1ZXMKLSAqICAgICAgICAgcHJvZHVj
ZWQgYnkgVV9HRVRfR0NfTUFTSygpLiAgVGhpcyBhbGxvd3MgZ3JvdXBlZAotICogICAgICAgICBj
YXRlZ29yaWVzIHN1Y2ggYXMgWzpMOl0gdG8gYmUgcmVwcmVzZW50ZWQuCi0gKgotICogQHNlZSBV
UHJvcGVydHkKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQ
T1JUMgotdV9nZXRQcm9wZXJ0eVZhbHVlRW51bShVUHJvcGVydHkgcHJvcGVydHksCi0gICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFsaWFzKTsKLQotLyoqCi0gKiBEZXRlcm1pbmVz
IGlmIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGlzIHBlcm1pc3NpYmxlIGFzIHRoZQotICogZmly
c3QgY2hhcmFjdGVyIGluIGFuIGlkZW50aWZpZXIgYWNjb3JkaW5nIHRvIFVuaWNvZGUKLSAqIChU
aGUgVW5pY29kZSBTdGFuZGFyZCwgVmVyc2lvbiAzLjAsIGNoYXB0ZXIgNS4xNiBJZGVudGlmaWVy
cykuCi0gKiBUcnVlIGZvciBjaGFyYWN0ZXJzIHdpdGggZ2VuZXJhbCBjYXRlZ29yaWVzICJMIiAo
bGV0dGVycykgYW5kICJObCIgKGxldHRlciBudW1iZXJzKS4KLSAqCi0gKiBTYW1lIGFzIGphdmEu
bGFuZy5DaGFyYWN0ZXIuaXNVbmljb2RlSWRlbnRpZmllclN0YXJ0KCkuCi0gKiBTYW1lIGFzIFVD
SEFSX0lEX1NUQVJUCi0gKgotICogQHBhcmFtIGMgdGhlIGNvZGUgcG9pbnQgdG8gYmUgdGVzdGVk
Ci0gKiBAcmV0dXJuIFRSVUUgaWYgdGhlIGNvZGUgcG9pbnQgbWF5IHN0YXJ0IGFuIGlkZW50aWZp
ZXIKLSAqCi0gKiBAc2VlIFVDSEFSX0lEX1NUQVJUCi0gKiBAc2VlIHVfaXNhbHBoYQotICogQHNl
ZSB1X2lzSURQYXJ0Ci0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgVUJvb2wgVV9F
WFBPUlQyCi11X2lzSURTdGFydChVQ2hhcjMyIGMpOwotCi0vKioKLSAqIERldGVybWluZXMgaWYg
dGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgaXMgcGVybWlzc2libGUKLSAqIGluIGFuIGlkZW50aWZp
ZXIgYWNjb3JkaW5nIHRvIEphdmEuCi0gKiBUcnVlIGZvciBjaGFyYWN0ZXJzIHdpdGggZ2VuZXJh
bCBjYXRlZ29yaWVzICJMIiAobGV0dGVycyksCi0gKiAiTmwiIChsZXR0ZXIgbnVtYmVycyksICJO
ZCIgKGRlY2ltYWwgZGlnaXRzKSwKLSAqICJNYyIgYW5kICJNbiIgKGNvbWJpbmluZyBtYXJrcyks
ICJQYyIgKGNvbm5lY3RpbmcgcHVuY3R1YXRpb24pLCBhbmQKLSAqIHVfaXNJRElnbm9yYWJsZShj
KS4KLSAqCi0gKiBTYW1lIGFzIGphdmEubGFuZy5DaGFyYWN0ZXIuaXNVbmljb2RlSWRlbnRpZmll
clBhcnQoKS4KLSAqIEFsbW9zdCB0aGUgc2FtZSBhcyBVbmljb2RlJ3MgSURfQ29udGludWUgKFVD
SEFSX0lEX0NPTlRJTlVFKQotICogZXhjZXB0IHRoYXQgVW5pY29kZSByZWNvbW1lbmRzIHRvIGln
bm9yZSBDZiB3aGljaCBpcyBsZXNzIHRoYW4KLSAqIHVfaXNJRElnbm9yYWJsZShjKS4KLSAqCi0g
KiBAcGFyYW0gYyB0aGUgY29kZSBwb2ludCB0byBiZSB0ZXN0ZWQKLSAqIEByZXR1cm4gVFJVRSBp
ZiB0aGUgY29kZSBwb2ludCBtYXkgb2NjdXIgaW4gYW4gaWRlbnRpZmllciBhY2NvcmRpbmcgdG8g
SmF2YQotICoKLSAqIEBzZWUgVUNIQVJfSURfQ09OVElOVUUKLSAqIEBzZWUgdV9pc0lEU3RhcnQK
LSAqIEBzZWUgdV9pc0lESWdub3JhYmxlCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFC
TEUgVUJvb2wgVV9FWFBPUlQyCi11X2lzSURQYXJ0KFVDaGFyMzIgYyk7Ci0KLS8qKgotICogRGV0
ZXJtaW5lcyBpZiB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBzaG91bGQgYmUgcmVnYXJkZWQKLSAq
IGFzIGFuIGlnbm9yYWJsZSBjaGFyYWN0ZXIgaW4gYW4gaWRlbnRpZmllciwKLSAqIGFjY29yZGlu
ZyB0byBKYXZhLgotICogVHJ1ZSBmb3IgY2hhcmFjdGVycyB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkg
IkNmIiAoZm9ybWF0IGNvbnRyb2xzKSBhcyB3ZWxsIGFzCi0gKiBub24td2hpdGVzcGFjZSBJU08g
Y29udHJvbHMKLSAqIChVKzAwMDAuLlUrMDAwOCwgVSswMDBFLi5VKzAwMUIsIFUrMDA3Ri4uVSsw
MDlGKS4KLSAqCi0gKiBTYW1lIGFzIGphdmEubGFuZy5DaGFyYWN0ZXIuaXNJZGVudGlmaWVySWdu
b3JhYmxlKCkuCi0gKgotICogTm90ZSB0aGF0IFVuaWNvZGUganVzdCByZWNvbW1lbmRzIHRvIGln
bm9yZSBDZiAoZm9ybWF0IGNvbnRyb2xzKS4KLSAqCi0gKiBAcGFyYW0gYyB0aGUgY29kZSBwb2lu
dCB0byBiZSB0ZXN0ZWQKLSAqIEByZXR1cm4gVFJVRSBpZiB0aGUgY29kZSBwb2ludCBpcyBpZ25v
cmFibGUgaW4gaWRlbnRpZmllcnMgYWNjb3JkaW5nIHRvIEphdmEKLSAqCi0gKiBAc2VlIFVDSEFS
X0RFRkFVTFRfSUdOT1JBQkxFX0NPREVfUE9JTlQKLSAqIEBzZWUgdV9pc0lEU3RhcnQKLSAqIEBz
ZWUgdV9pc0lEUGFydAotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxFIFVCb29sIFVf
RVhQT1JUMgotdV9pc0lESWdub3JhYmxlKFVDaGFyMzIgYyk7Ci0KLS8qKgotICogRGV0ZXJtaW5l
cyBpZiB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBpcyBwZXJtaXNzaWJsZSBhcyB0aGUKLSAqIGZp
cnN0IGNoYXJhY3RlciBpbiBhIEphdmEgaWRlbnRpZmllci4KLSAqIEluIGFkZGl0aW9uIHRvIHVf
aXNJRFN0YXJ0KGMpLCB0cnVlIGZvciBjaGFyYWN0ZXJzIHdpdGgKLSAqIGdlbmVyYWwgY2F0ZWdv
cmllcyAiU2MiIChjdXJyZW5jeSBzeW1ib2xzKSBhbmQgIlBjIiAoY29ubmVjdGluZyBwdW5jdHVh
dGlvbikuCi0gKgotICogU2FtZSBhcyBqYXZhLmxhbmcuQ2hhcmFjdGVyLmlzSmF2YUlkZW50aWZp
ZXJTdGFydCgpLgotICoKLSAqIEBwYXJhbSBjIHRoZSBjb2RlIHBvaW50IHRvIGJlIHRlc3RlZAot
ICogQHJldHVybiBUUlVFIGlmIHRoZSBjb2RlIHBvaW50IG1heSBzdGFydCBhIEphdmEgaWRlbnRp
ZmllcgotICoKLSAqIEBzZWUgICAgIHVfaXNKYXZhSURQYXJ0Ci0gKiBAc2VlICAgICB1X2lzYWxw
aGEKLSAqIEBzZWUgICAgIHVfaXNJRFN0YXJ0Ci0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9T
VEFCTEUgVUJvb2wgVV9FWFBPUlQyCi11X2lzSmF2YUlEU3RhcnQoVUNoYXIzMiBjKTsKLQotLyoq
Ci0gKiBEZXRlcm1pbmVzIGlmIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGlzIHBlcm1pc3NpYmxl
Ci0gKiBpbiBhIEphdmEgaWRlbnRpZmllci4KLSAqIEluIGFkZGl0aW9uIHRvIHVfaXNJRFBhcnQo
YyksIHRydWUgZm9yIGNoYXJhY3RlcnMgd2l0aAotICogZ2VuZXJhbCBjYXRlZ29yeSAiU2MiIChj
dXJyZW5jeSBzeW1ib2xzKS4KLSAqCi0gKiBTYW1lIGFzIGphdmEubGFuZy5DaGFyYWN0ZXIuaXNK
YXZhSWRlbnRpZmllclBhcnQoKS4KLSAqCi0gKiBAcGFyYW0gYyB0aGUgY29kZSBwb2ludCB0byBi
ZSB0ZXN0ZWQKLSAqIEByZXR1cm4gVFJVRSBpZiB0aGUgY29kZSBwb2ludCBtYXkgb2NjdXIgaW4g
YSBKYXZhIGlkZW50aWZpZXIKLSAqCi0gKiBAc2VlICAgICB1X2lzSURJZ25vcmFibGUKLSAqIEBz
ZWUgICAgIHVfaXNKYXZhSURTdGFydAotICogQHNlZSAgICAgdV9pc2FscGhhCi0gKiBAc2VlICAg
ICB1X2lzZGlnaXQKLSAqIEBzZWUgICAgIHVfaXNJRFBhcnQKLSAqIEBzdGFibGUgSUNVIDIuMAot
ICovCi1VX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIKLXVfaXNKYXZhSURQYXJ0KFVDaGFyMzIgYyk7
Ci0KLS8qKgotICogVGhlIGdpdmVuIGNoYXJhY3RlciBpcyBtYXBwZWQgdG8gaXRzIGxvd2VyY2Fz
ZSBlcXVpdmFsZW50IGFjY29yZGluZyB0bwotICogVW5pY29kZURhdGEudHh0OyBpZiB0aGUgY2hh
cmFjdGVyIGhhcyBubyBsb3dlcmNhc2UgZXF1aXZhbGVudCwgdGhlIGNoYXJhY3RlcgotICogaXRz
ZWxmIGlzIHJldHVybmVkLgotICoKLSAqIFNhbWUgYXMgamF2YS5sYW5nLkNoYXJhY3Rlci50b0xv
d2VyQ2FzZSgpLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gb25seSByZXR1cm5zIHRoZSBzaW1wbGUs
IHNpbmdsZS1jb2RlIHBvaW50IGNhc2UgbWFwcGluZy4KLSAqIEZ1bGwgY2FzZSBtYXBwaW5ncyBz
aG91bGQgYmUgdXNlZCB3aGVuZXZlciBwb3NzaWJsZSBiZWNhdXNlIHRoZXkgcHJvZHVjZQotICog
YmV0dGVyIHJlc3VsdHMgYnkgd29ya2luZyBvbiB3aG9sZSBzdHJpbmdzLgotICogVGhleSB0YWtl
IGludG8gYWNjb3VudCB0aGUgc3RyaW5nIGNvbnRleHQgYW5kIHRoZSBsYW5ndWFnZSBhbmQgY2Fu
IG1hcAotICogdG8gYSByZXN1bHQgc3RyaW5nIHdpdGggYSBkaWZmZXJlbnQgbGVuZ3RoIGFzIGFw
cHJvcHJpYXRlLgotICogRnVsbCBjYXNlIG1hcHBpbmdzIGFyZSBhcHBsaWVkIGJ5IHRoZSBzdHJp
bmcgY2FzZSBtYXBwaW5nIGZ1bmN0aW9ucywKLSAqIHNlZSB1c3RyaW5nLmggYW5kIHRoZSBVbmlj
b2RlU3RyaW5nIGNsYXNzLgotICogU2VlIGFsc28gdGhlIFVzZXIgR3VpZGUgY2hhcHRlciBvbiBD
L1BPU0lYIG1pZ3JhdGlvbjoKLSAqIGh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvdXNlcmd1aWRlL3Bv
c2l4Lmh0bWwjY2FzZV9tYXBwaW5ncwotICoKLSAqIEBwYXJhbSBjIHRoZSBjb2RlIHBvaW50IHRv
IGJlIG1hcHBlZAotICogQHJldHVybiB0aGUgU2ltcGxlX0xvd2VyY2FzZV9NYXBwaW5nIG9mIHRo
ZSBjb2RlIHBvaW50LCBpZiBhbnk7Ci0gKiAgICAgICAgIG90aGVyd2lzZSB0aGUgY29kZSBwb2lu
dCBpdHNlbGYuCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgVUNoYXIzMiBVX0VY
UE9SVDIKLXVfdG9sb3dlcihVQ2hhcjMyIGMpOwotCi0vKioKLSAqIFRoZSBnaXZlbiBjaGFyYWN0
ZXIgaXMgbWFwcGVkIHRvIGl0cyB1cHBlcmNhc2UgZXF1aXZhbGVudCBhY2NvcmRpbmcgdG8gVW5p
Y29kZURhdGEudHh0OwotICogaWYgdGhlIGNoYXJhY3RlciBoYXMgbm8gdXBwZXJjYXNlIGVxdWl2
YWxlbnQsIHRoZSBjaGFyYWN0ZXIgaXRzZWxmIGlzCi0gKiByZXR1cm5lZC4KLSAqCi0gKiBTYW1l
IGFzIGphdmEubGFuZy5DaGFyYWN0ZXIudG9VcHBlckNhc2UoKS4KLSAqCi0gKiBUaGlzIGZ1bmN0
aW9uIG9ubHkgcmV0dXJucyB0aGUgc2ltcGxlLCBzaW5nbGUtY29kZSBwb2ludCBjYXNlIG1hcHBp
bmcuCi0gKiBGdWxsIGNhc2UgbWFwcGluZ3Mgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgcG9zc2li
bGUgYmVjYXVzZSB0aGV5IHByb2R1Y2UKLSAqIGJldHRlciByZXN1bHRzIGJ5IHdvcmtpbmcgb24g
d2hvbGUgc3RyaW5ncy4KLSAqIFRoZXkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHN0cmluZyBjb250
ZXh0IGFuZCB0aGUgbGFuZ3VhZ2UgYW5kIGNhbiBtYXAKLSAqIHRvIGEgcmVzdWx0IHN0cmluZyB3
aXRoIGEgZGlmZmVyZW50IGxlbmd0aCBhcyBhcHByb3ByaWF0ZS4KLSAqIEZ1bGwgY2FzZSBtYXBw
aW5ncyBhcmUgYXBwbGllZCBieSB0aGUgc3RyaW5nIGNhc2UgbWFwcGluZyBmdW5jdGlvbnMsCi0g
KiBzZWUgdXN0cmluZy5oIGFuZCB0aGUgVW5pY29kZVN0cmluZyBjbGFzcy4KLSAqIFNlZSBhbHNv
IHRoZSBVc2VyIEd1aWRlIGNoYXB0ZXIgb24gQy9QT1NJWCBtaWdyYXRpb246Ci0gKiBodHRwOi8v
aWN1LXByb2plY3Qub3JnL3VzZXJndWlkZS9wb3NpeC5odG1sI2Nhc2VfbWFwcGluZ3MKLSAqCi0g
KiBAcGFyYW0gYyB0aGUgY29kZSBwb2ludCB0byBiZSBtYXBwZWQKLSAqIEByZXR1cm4gdGhlIFNp
bXBsZV9VcHBlcmNhc2VfTWFwcGluZyBvZiB0aGUgY29kZSBwb2ludCwgaWYgYW55OwotICogICAg
ICAgICBvdGhlcndpc2UgdGhlIGNvZGUgcG9pbnQgaXRzZWxmLgotICogQHN0YWJsZSBJQ1UgMi4w
Ci0gKi8KLVVfU1RBQkxFIFVDaGFyMzIgVV9FWFBPUlQyCi11X3RvdXBwZXIoVUNoYXIzMiBjKTsK
LQotLyoqCi0gKiBUaGUgZ2l2ZW4gY2hhcmFjdGVyIGlzIG1hcHBlZCB0byBpdHMgdGl0bGVjYXNl
IGVxdWl2YWxlbnQKLSAqIGFjY29yZGluZyB0byBVbmljb2RlRGF0YS50eHQ7Ci0gKiBpZiBub25l
IGlzIGRlZmluZWQsIHRoZSBjaGFyYWN0ZXIgaXRzZWxmIGlzIHJldHVybmVkLgotICoKLSAqIFNh
bWUgYXMgamF2YS5sYW5nLkNoYXJhY3Rlci50b1RpdGxlQ2FzZSgpLgotICoKLSAqIFRoaXMgZnVu
Y3Rpb24gb25seSByZXR1cm5zIHRoZSBzaW1wbGUsIHNpbmdsZS1jb2RlIHBvaW50IGNhc2UgbWFw
cGluZy4KLSAqIEZ1bGwgY2FzZSBtYXBwaW5ncyBzaG91bGQgYmUgdXNlZCB3aGVuZXZlciBwb3Nz
aWJsZSBiZWNhdXNlIHRoZXkgcHJvZHVjZQotICogYmV0dGVyIHJlc3VsdHMgYnkgd29ya2luZyBv
biB3aG9sZSBzdHJpbmdzLgotICogVGhleSB0YWtlIGludG8gYWNjb3VudCB0aGUgc3RyaW5nIGNv
bnRleHQgYW5kIHRoZSBsYW5ndWFnZSBhbmQgY2FuIG1hcAotICogdG8gYSByZXN1bHQgc3RyaW5n
IHdpdGggYSBkaWZmZXJlbnQgbGVuZ3RoIGFzIGFwcHJvcHJpYXRlLgotICogRnVsbCBjYXNlIG1h
cHBpbmdzIGFyZSBhcHBsaWVkIGJ5IHRoZSBzdHJpbmcgY2FzZSBtYXBwaW5nIGZ1bmN0aW9ucywK
LSAqIHNlZSB1c3RyaW5nLmggYW5kIHRoZSBVbmljb2RlU3RyaW5nIGNsYXNzLgotICogU2VlIGFs
c28gdGhlIFVzZXIgR3VpZGUgY2hhcHRlciBvbiBDL1BPU0lYIG1pZ3JhdGlvbjoKLSAqIGh0dHA6
Ly9pY3UtcHJvamVjdC5vcmcvdXNlcmd1aWRlL3Bvc2l4Lmh0bWwjY2FzZV9tYXBwaW5ncwotICoK
LSAqIEBwYXJhbSBjIHRoZSBjb2RlIHBvaW50IHRvIGJlIG1hcHBlZAotICogQHJldHVybiB0aGUg
U2ltcGxlX1RpdGxlY2FzZV9NYXBwaW5nIG9mIHRoZSBjb2RlIHBvaW50LCBpZiBhbnk7Ci0gKiAg
ICAgICAgIG90aGVyd2lzZSB0aGUgY29kZSBwb2ludCBpdHNlbGYuCi0gKiBAc3RhYmxlIElDVSAy
LjAKLSAqLwotVV9TVEFCTEUgVUNoYXIzMiBVX0VYUE9SVDIKLXVfdG90aXRsZShVQ2hhcjMyIGMp
OwotCi0vKiogT3B0aW9uIHZhbHVlIGZvciBjYXNlIGZvbGRpbmc6IHVzZSBkZWZhdWx0IG1hcHBp
bmdzIGRlZmluZWQgaW4gQ2FzZUZvbGRpbmcudHh0LiBAc3RhYmxlIElDVSAyLjAgKi8KLSNkZWZp
bmUgVV9GT0xEX0NBU0VfREVGQVVMVCAwCi0KLS8qKgotICogT3B0aW9uIHZhbHVlIGZvciBjYXNl
IGZvbGRpbmc6Ci0gKgotICogVXNlIHRoZSBtb2RpZmllZCBzZXQgb2YgbWFwcGluZ3MgcHJvdmlk
ZWQgaW4gQ2FzZUZvbGRpbmcudHh0IHRvIGhhbmRsZSBkb3R0ZWQgSQotICogYW5kIGRvdGxlc3Mg
aSBhcHByb3ByaWF0ZWx5IGZvciBUdXJraWMgbGFuZ3VhZ2VzICh0ciwgYXopLgotICoKLSAqIEJl
Zm9yZSBVbmljb2RlIDMuMiwgQ2FzZUZvbGRpbmcudHh0IGNvbnRhaW5zIG1hcHBpbmdzIG1hcmtl
ZCB3aXRoICdJJyB0aGF0Ci0gKiBhcmUgdG8gYmUgaW5jbHVkZWQgZm9yIGRlZmF1bHQgbWFwcGlu
Z3MgYW5kCi0gKiBleGNsdWRlZCBmb3IgdGhlIFR1cmtpYy1zcGVjaWZpYyBtYXBwaW5ncy4KLSAq
Ci0gKiBVbmljb2RlIDMuMiBDYXNlRm9sZGluZy50eHQgaW5zdGVhZCBjb250YWlucyBtYXBwaW5n
cyBtYXJrZWQgd2l0aCAnVCcgdGhhdAotICogYXJlIHRvIGJlIGV4Y2x1ZGVkIGZvciBkZWZhdWx0
IG1hcHBpbmdzIGFuZAotICogaW5jbHVkZWQgZm9yIHRoZSBUdXJraWMtc3BlY2lmaWMgbWFwcGlu
Z3MuCi0gKgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLSNkZWZpbmUgVV9GT0xEX0NBU0VfRVhD
TFVERV9TUEVDSUFMX0kgMQotCi0vKioKLSAqIFRoZSBnaXZlbiBjaGFyYWN0ZXIgaXMgbWFwcGVk
IHRvIGl0cyBjYXNlIGZvbGRpbmcgZXF1aXZhbGVudCBhY2NvcmRpbmcgdG8KLSAqIFVuaWNvZGVE
YXRhLnR4dCBhbmQgQ2FzZUZvbGRpbmcudHh0OwotICogaWYgdGhlIGNoYXJhY3RlciBoYXMgbm8g
Y2FzZSBmb2xkaW5nIGVxdWl2YWxlbnQsIHRoZSBjaGFyYWN0ZXIKLSAqIGl0c2VsZiBpcyByZXR1
cm5lZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgcmV0dXJucyB0aGUgc2ltcGxlLCBzaW5n
bGUtY29kZSBwb2ludCBjYXNlIG1hcHBpbmcuCi0gKiBGdWxsIGNhc2UgbWFwcGluZ3Mgc2hvdWxk
IGJlIHVzZWQgd2hlbmV2ZXIgcG9zc2libGUgYmVjYXVzZSB0aGV5IHByb2R1Y2UKLSAqIGJldHRl
ciByZXN1bHRzIGJ5IHdvcmtpbmcgb24gd2hvbGUgc3RyaW5ncy4KLSAqIFRoZXkgdGFrZSBpbnRv
IGFjY291bnQgdGhlIHN0cmluZyBjb250ZXh0IGFuZCB0aGUgbGFuZ3VhZ2UgYW5kIGNhbiBtYXAK
LSAqIHRvIGEgcmVzdWx0IHN0cmluZyB3aXRoIGEgZGlmZmVyZW50IGxlbmd0aCBhcyBhcHByb3By
aWF0ZS4KLSAqIEZ1bGwgY2FzZSBtYXBwaW5ncyBhcmUgYXBwbGllZCBieSB0aGUgc3RyaW5nIGNh
c2UgbWFwcGluZyBmdW5jdGlvbnMsCi0gKiBzZWUgdXN0cmluZy5oIGFuZCB0aGUgVW5pY29kZVN0
cmluZyBjbGFzcy4KLSAqIFNlZSBhbHNvIHRoZSBVc2VyIEd1aWRlIGNoYXB0ZXIgb24gQy9QT1NJ
WCBtaWdyYXRpb246Ci0gKiBodHRwOi8vaWN1LXByb2plY3Qub3JnL3VzZXJndWlkZS9wb3NpeC5o
dG1sI2Nhc2VfbWFwcGluZ3MKLSAqCi0gKiBAcGFyYW0gYyB0aGUgY29kZSBwb2ludCB0byBiZSBt
YXBwZWQKLSAqIEBwYXJhbSBvcHRpb25zIEVpdGhlciBVX0ZPTERfQ0FTRV9ERUZBVUxUIG9yIFVf
Rk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lBTF9JCi0gKiBAcmV0dXJuIHRoZSBTaW1wbGVfQ2FzZV9G
b2xkaW5nIG9mIHRoZSBjb2RlIHBvaW50LCBpZiBhbnk7Ci0gKiAgICAgICAgIG90aGVyd2lzZSB0
aGUgY29kZSBwb2ludCBpdHNlbGYuCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUg
VUNoYXIzMiBVX0VYUE9SVDIKLXVfZm9sZENhc2UoVUNoYXIzMiBjLCB1aW50MzJfdCBvcHRpb25z
KTsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBkZWNpbWFsIGRpZ2l0IHZhbHVlIG9mIHRoZSBjb2Rl
IHBvaW50IGluIHRoZQotICogc3BlY2lmaWVkIHJhZGl4LgotICoKLSAqIElmIHRoZSByYWRpeCBp
cyBub3QgaW4gdGhlIHJhbmdlIDxjb2RlPjI8PXJhZGl4PD0zNjwvY29kZT4gb3IgaWYgdGhlCi0g
KiB2YWx1ZSBvZiA8Y29kZT5jPC9jb2RlPiBpcyBub3QgYSB2YWxpZCBkaWdpdCBpbiB0aGUgc3Bl
Y2lmaWVkCi0gKiByYWRpeCwgPGNvZGU+LTE8L2NvZGU+IGlzIHJldHVybmVkLiBBIGNoYXJhY3Rl
ciBpcyBhIHZhbGlkIGRpZ2l0Ci0gKiBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBp
cyB0cnVlOgotICogPHVsPgotICogPGxpPlRoZSBjaGFyYWN0ZXIgaGFzIGEgZGVjaW1hbCBkaWdp
dCB2YWx1ZS4KLSAqICAgICBTdWNoIGNoYXJhY3RlcnMgaGF2ZSB0aGUgZ2VuZXJhbCBjYXRlZ29y
eSAiTmQiIChkZWNpbWFsIGRpZ2l0IG51bWJlcnMpCi0gKiAgICAgYW5kIGEgTnVtZXJpY19UeXBl
IG9mIERlY2ltYWwuCi0gKiAgICAgSW4gdGhpcyBjYXNlIHRoZSB2YWx1ZSBpcyB0aGUgY2hhcmFj
dGVyJ3MgZGVjaW1hbCBkaWdpdCB2YWx1ZS48L2xpPgotICogPGxpPlRoZSBjaGFyYWN0ZXIgaXMg
b25lIG9mIHRoZSB1cHBlcmNhc2UgTGF0aW4gbGV0dGVycwotICogICAgIDxjb2RlPidBJzwvY29k
ZT4gdGhyb3VnaCA8Y29kZT4nWic8L2NvZGU+LgotICogICAgIEluIHRoaXMgY2FzZSB0aGUgdmFs
dWUgaXMgPGNvZGU+Yy0nQScrMTA8L2NvZGU+LjwvbGk+Ci0gKiA8bGk+VGhlIGNoYXJhY3RlciBp
cyBvbmUgb2YgdGhlIGxvd2VyY2FzZSBMYXRpbiBsZXR0ZXJzCi0gKiAgICAgPGNvZGU+J2EnPC9j
b2RlPiB0aHJvdWdoIDxjb2RlPid6JzwvY29kZT4uCi0gKiAgICAgSW4gdGhpcyBjYXNlIHRoZSB2
YWx1ZSBpcyA8Y29kZT5jaC0nYScrMTA8L2NvZGU+LjwvbGk+Ci0gKiA8bGk+TGF0aW4gbGV0dGVy
cyBmcm9tIGJvdGggdGhlIEFTQ0lJIHJhbmdlICgwMDYxLi4wMDdBLCAwMDQxLi4wMDVBKQotICog
ICAgIGFzIHdlbGwgYXMgZnJvbSB0aGUgRnVsbHdpZHRoIEFTQ0lJIHJhbmdlIChGRjQxLi5GRjVB
LCBGRjIxLi5GRjNBKQotICogICAgIGFyZSByZWNvZ25pemVkLjwvbGk+Ci0gKiA8L3VsPgotICoK
LSAqIFNhbWUgYXMgamF2YS5sYW5nLkNoYXJhY3Rlci5kaWdpdCgpLgotICoKLSAqIEBwYXJhbSAg
IGNoICAgICAgdGhlIGNvZGUgcG9pbnQgdG8gYmUgdGVzdGVkLgotICogQHBhcmFtICAgcmFkaXgg
ICB0aGUgcmFkaXguCi0gKiBAcmV0dXJuICB0aGUgbnVtZXJpYyB2YWx1ZSByZXByZXNlbnRlZCBi
eSB0aGUgY2hhcmFjdGVyIGluIHRoZQotICogICAgICAgICAgc3BlY2lmaWVkIHJhZGl4LAotICog
ICAgICAgICAgb3IgLTEgaWYgdGhlcmUgaXMgbm8gdmFsdWUgb3IgaWYgdGhlIHZhbHVlIGV4Y2Vl
ZHMgdGhlIHJhZGl4LgotICoKLSAqIEBzZWUgICAgIFVDSEFSX05VTUVSSUNfVFlQRQotICogQHNl
ZSAgICAgdV9mb3JEaWdpdAotICogQHNlZSAgICAgdV9jaGFyRGlnaXRWYWx1ZQotICogQHNlZSAg
ICAgdV9pc2RpZ2l0Ci0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgaW50MzJfdCBV
X0VYUE9SVDIKLXVfZGlnaXQoVUNoYXIzMiBjaCwgaW50OF90IHJhZGl4KTsKLQotLyoqCi0gKiBE
ZXRlcm1pbmVzIHRoZSBjaGFyYWN0ZXIgcmVwcmVzZW50YXRpb24gZm9yIGEgc3BlY2lmaWMgZGln
aXQgaW4KLSAqIHRoZSBzcGVjaWZpZWQgcmFkaXguIElmIHRoZSB2YWx1ZSBvZiA8Y29kZT5yYWRp
eDwvY29kZT4gaXMgbm90IGEKLSAqIHZhbGlkIHJhZGl4LCBvciB0aGUgdmFsdWUgb2YgPGNvZGU+
ZGlnaXQ8L2NvZGU+IGlzIG5vdCBhIHZhbGlkCi0gKiBkaWdpdCBpbiB0aGUgc3BlY2lmaWVkIHJh
ZGl4LCB0aGUgbnVsbCBjaGFyYWN0ZXIKLSAqICg8Y29kZT5VKzAwMDA8L2NvZGU+KSBpcyByZXR1
cm5lZC4KLSAqIDxwPgotICogVGhlIDxjb2RlPnJhZGl4PC9jb2RlPiBhcmd1bWVudCBpcyB2YWxp
ZCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gb3IKLSAqIGVxdWFsIHRvIDIgYW5kIGxlc3MgdGhhbiBv
ciBlcXVhbCB0byAzNi4KLSAqIFRoZSA8Y29kZT5kaWdpdDwvY29kZT4gYXJndW1lbnQgaXMgdmFs
aWQgaWYKLSAqIDxjb2RlPjAgPD0gZGlnaXQgPCByYWRpeDwvY29kZT4uCi0gKiA8cD4KLSAqIElm
IHRoZSBkaWdpdCBpcyBsZXNzIHRoYW4gMTAsIHRoZW4KLSAqIDxjb2RlPicwJyArIGRpZ2l0PC9j
b2RlPiBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUKLSAqIDxjb2RlPidhJyArIGRp
Z2l0IC0gMTA8L2NvZGU+IGlzIHJldHVybmVkLgotICoKLSAqIFNhbWUgYXMgamF2YS5sYW5nLkNo
YXJhY3Rlci5mb3JEaWdpdCgpLgotICoKLSAqIEBwYXJhbSAgIGRpZ2l0ICAgdGhlIG51bWJlciB0
byBjb252ZXJ0IHRvIGEgY2hhcmFjdGVyLgotICogQHBhcmFtICAgcmFkaXggICB0aGUgcmFkaXgu
Ci0gKiBAcmV0dXJuICB0aGUgPGNvZGU+Y2hhcjwvY29kZT4gcmVwcmVzZW50YXRpb24gb2YgdGhl
IHNwZWNpZmllZCBkaWdpdAotICogICAgICAgICAgaW4gdGhlIHNwZWNpZmllZCByYWRpeC4KLSAq
Ci0gKiBAc2VlICAgICB1X2RpZ2l0Ci0gKiBAc2VlICAgICB1X2NoYXJEaWdpdFZhbHVlCi0gKiBA
c2VlICAgICB1X2lzZGlnaXQKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBVQ2hh
cjMyIFVfRVhQT1JUMgotdV9mb3JEaWdpdChpbnQzMl90IGRpZ2l0LCBpbnQ4X3QgcmFkaXgpOwot
Ci0vKioKLSAqIEdldCB0aGUgImFnZSIgb2YgdGhlIGNvZGUgcG9pbnQuCi0gKiBUaGUgImFnZSIg
aXMgdGhlIFVuaWNvZGUgdmVyc2lvbiB3aGVuIHRoZSBjb2RlIHBvaW50IHdhcyBmaXJzdAotICog
ZGVzaWduYXRlZCAoYXMgYSBub24tY2hhcmFjdGVyIG9yIGZvciBQcml2YXRlIFVzZSkKLSAqIG9y
IGFzc2lnbmVkIGEgY2hhcmFjdGVyLgotICogVGhpcyBjYW4gYmUgdXNlZnVsIHRvIGF2b2lkIGVt
aXR0aW5nIGNvZGUgcG9pbnRzIHRvIHJlY2VpdmluZwotICogcHJvY2Vzc2VzIHRoYXQgZG8gbm90
IGFjY2VwdCBuZXdlciBjaGFyYWN0ZXJzLgotICogVGhlIGRhdGEgaXMgZnJvbSB0aGUgVUNEIGZp
bGUgRGVyaXZlZEFnZS50eHQuCi0gKgotICogQHBhcmFtIGMgVGhlIGNvZGUgcG9pbnQuCi0gKiBA
cGFyYW0gdmVyc2lvbkFycmF5IFRoZSBVbmljb2RlIHZlcnNpb24gbnVtYmVyIGFycmF5LCB0byBi
ZSBmaWxsZWQgaW4uCi0gKgotICogQHN0YWJsZSBJQ1UgMi4xCi0gKi8KLVVfU1RBQkxFIHZvaWQg
VV9FWFBPUlQyCi11X2NoYXJBZ2UoVUNoYXIzMiBjLCBVVmVyc2lvbkluZm8gdmVyc2lvbkFycmF5
KTsKLQotLyoqCi0gKiBHZXRzIHRoZSBVbmljb2RlIHZlcnNpb24gaW5mb3JtYXRpb24uCi0gKiBU
aGUgdmVyc2lvbiBhcnJheSBpcyBmaWxsZWQgaW4gd2l0aCB0aGUgdmVyc2lvbiBpbmZvcm1hdGlv
bgotICogZm9yIHRoZSBVbmljb2RlIHN0YW5kYXJkIHRoYXQgaXMgY3VycmVudGx5IHVzZWQgYnkg
SUNVLgotICogRm9yIGV4YW1wbGUsIFVuaWNvZGUgdmVyc2lvbiAzLjEuMSBpcyByZXByZXNlbnRl
ZCBhcyBhbiBhcnJheSB3aXRoCi0gKiB0aGUgdmFsdWVzIHsgMywgMSwgMSwgMCB9LgotICoKLSAq
IEBwYXJhbSB2ZXJzaW9uQXJyYXkgYW4gb3V0cHV0IGFycmF5IHRoYXQgd2lsbCBiZSBmaWxsZWQg
aW4gd2l0aAotICogICAgICAgICAgICAgICAgICAgICB0aGUgVW5pY29kZSB2ZXJzaW9uIG51bWJl
cgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCi11X2dl
dFVuaWNvZGVWZXJzaW9uKFVWZXJzaW9uSW5mbyB2ZXJzaW9uQXJyYXkpOwotCi0jaWYgIVVDT05G
SUdfTk9fTk9STUFMSVpBVElPTgotLyoqCi0gKiBHZXQgdGhlIEZDX05GS0NfQ2xvc3VyZSBwcm9w
ZXJ0eSBzdHJpbmcgZm9yIGEgY2hhcmFjdGVyLgotICogU2VlIFVuaWNvZGUgU3RhbmRhcmQgQW5u
ZXggIzE1IGZvciBkZXRhaWxzLCBzZWFyY2ggZm9yICJGQ19ORktDX0Nsb3N1cmUiCi0gKiBvciBm
b3IgIkZOQyI6IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjE1LwotICoKLSAqIEBw
YXJhbSBjIFRoZSBjaGFyYWN0ZXIgKGNvZGUgcG9pbnQpIGZvciB3aGljaCB0byBnZXQgdGhlIEZD
X05GS0NfQ2xvc3VyZSBzdHJpbmcuCi0gKiAgICAgICAgICAgICBJdCBtdXN0IGJlIDxjb2RlPjA8
PWM8PTB4MTBmZmZmPC9jb2RlPi4KLSAqIEBwYXJhbSBkZXN0IERlc3RpbmF0aW9uIGFkZHJlc3Mg
Zm9yIGNvcHlpbmcgdGhlIHN0cmluZy4KLSAqICAgICAgICAgICAgIFRoZSBzdHJpbmcgd2lsbCBi
ZSB6ZXJvLXRlcm1pbmF0ZWQgaWYgcG9zc2libGUuCi0gKiAgICAgICAgICAgICBJZiB0aGVyZSBp
cyBubyBGQ19ORktDX0Nsb3N1cmUgc3RyaW5nLAotICogICAgICAgICAgICAgdGhlbiB0aGUgYnVm
ZmVyIHdpbGwgYmUgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcuCi0gKiBAcGFyYW0gZGVzdENhcGFj
aXR5IDxjb2RlPj09c2l6ZW9mKGRlc3QpPC9jb2RlPgotICogQHBhcmFtIHBFcnJvckNvZGUgUG9p
bnRlciB0byBhIFVFcnJvckNvZGUgdmFyaWFibGUuCi0gKiBAcmV0dXJuIFRoZSBsZW5ndGggb2Yg
dGhlIHN0cmluZywgb3IgMCBpZiB0aGVyZSBpcyBubyBGQ19ORktDX0Nsb3N1cmUgc3RyaW5nIGZv
ciB0aGlzIGNoYXJhY3Rlci4KLSAqICAgICAgICAgSWYgdGhlIGRlc3RDYXBhY2l0eSBpcyBsZXNz
IHRoYW4gb3IgZXF1YWwgdG8gdGhlIGxlbmd0aCwgdGhlbiB0aGUgYnVmZmVyCi0gKiAgICAgICAg
IGNvbnRhaW5zIHRoZSB0cnVuY2F0ZWQgbmFtZSBhbmQgdGhlIHJldHVybmVkIGxlbmd0aCBpbmRp
Y2F0ZXMgdGhlIGZ1bGwKLSAqICAgICAgICAgbGVuZ3RoIG9mIHRoZSBuYW1lLgotICogICAgICAg
ICBUaGUgbGVuZ3RoIGRvZXMgbm90IGluY2x1ZGUgdGhlIHplcm8tdGVybWluYXRpb24uCi0gKgot
ICogQHN0YWJsZSBJQ1UgMi4yCi0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCi11X2dl
dEZDX05GS0NfQ2xvc3VyZShVQ2hhcjMyIGMsIFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBh
Y2l0eSwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7Ci0KLSNlbmRpZgotCi0KLVVfQ0RFQ0xfRU5E
Ci0KLSNlbmRpZiAvKl9VQ0hBUiovCi0vKmVvZiovCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3Vjb25maWcuaCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNv
ZGUvdWNvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjIyM2JiOGE4N2I1
YTRiZGM5YjU4M2E4NGI4N2RhNjgzZjQ2YTA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBl
bmRlbmNpZXMvaWN1L3VuaWNvZGUvdWNvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQ1ICsw
LDAgQEAKLS8qICAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICBDb3B5cmlnaHQgKEMpIDIwMDItMjAxNSwg
SW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcwotKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhl
cnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgIGZpbGUgbmFtZTog
IHVjb25maWcuaAotKiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCi0qICAgdGFiIHNpemU6ICAgOCAo
bm90IHVzZWQpCi0qICAgaW5kZW50YXRpb246NAotKgotKiAgIGNyZWF0ZWQgb246IDIwMDJzZXAx
OQotKiAgIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCi0qLwotCi0jaWZuZGVmIF9fVUNP
TkZJR19IX18KLSNkZWZpbmUgX19VQ09ORklHX0hfXwotCi0KLS8qIQotICogXGZpbGUKLSAqIFxi
cmllZiBVc2VyLWNvbmZpZ3VyYWJsZSBzZXR0aW5ncwotICoKLSAqIE1pc2NlbGxhbmVvdXMgc3dp
dGNoZXM6Ci0gKgotICogQSBudW1iZXIgb2YgbWFjcm9zIGFmZmVjdCBhIHZhcmlldHkgb2YgbWlu
b3IgYXNwZWN0cyBvZiBJQ1UuCi0gKiBNb3N0IG9mIHRoZW0gdXNlZCB0byBiZSBkZWZpbmVkIGVs
c2V3aGVyZSAoZS5nLiwgaW4gdXR5cGVzLmggb3IgcGxhdGZvcm0uaCkKLSAqIGFuZCBtb3ZlZCBo
ZXJlIHRvIG1ha2UgdGhlbSBlYXNpZXIgdG8gZmluZC4KLSAqCi0gKiBTd2l0Y2hlcyBmb3IgZXhj
bHVkaW5nIHBhcnRzIG9mIElDVSBsaWJyYXJ5IGNvZGUgbW9kdWxlczoKLSAqCi0gKiBDaGFuZ2lu
ZyB0aGVzZSBtYWNyb3MgYWxsb3dzIGJ1aWxkaW5nIHBhcnRpYWwsIHNtYWxsZXIgbGlicmFyaWVz
IGZvciBzcGVjaWFsIHB1cnBvc2VzLgotICogQnkgZGVmYXVsdCwgYWxsIG1vZHVsZXMgYXJlIGJ1
aWx0LgotICogVGhlIHN3aXRjaGVzIGFyZSBmYWlybHkgY29hcnNlLCBjb250cm9sbGluZyBsYXJn
ZSBtb2R1bGVzLgotICogQmFzaWMgc2VydmljZXMgY2Fubm90IGJlIHR1cm5lZCBvZmYuCi0gKgot
ICogQnVpbGRpbmcgd2l0aCBhbnkgb2YgdGhlc2Ugb3B0aW9ucyBkb2VzIG5vdCBndWFyYW50ZWUg
dGhhdCB0aGUKLSAqIElDVSBidWlsZCBwcm9jZXNzIHdpbGwgY29tcGxldGVseSB3b3JrLiBJdCBp
cyByZWNvbW1lbmRlZCB0aGF0Ci0gKiB0aGUgSUNVIGxpYnJhcmllcyBhbmQgZGF0YSBiZSBidWls
dCB1c2luZyB0aGUgbm9ybWFsIGJ1aWxkLgotICogQXQgdGhhdCB0aW1lIHlvdSBzaG91bGQgcmVt
b3ZlIHRoZSBkYXRhIHVzZWQgYnkgdGhvc2Ugc2VydmljZXMuCi0gKiBBZnRlciBidWlsZGluZyB0
aGUgSUNVIGRhdGEgbGlicmFyeSwgeW91IHNob3VsZCByZWJ1aWxkIHRoZSBJQ1UKLSAqIGxpYnJh
cmllcyB3aXRoIHRoZXNlIHN3aXRjaGVzIGN1c3RvbWl6ZWQgdG8geW91ciBuZWVkcy4KLSAqCi0g
KiBAc3RhYmxlIElDVSAyLjQKLSAqLwotCi0vKioKLSAqIElmIHRoaXMgc3dpdGNoIGlzIGRlZmlu
ZWQsIElDVSB3aWxsIGF0dGVtcHQgdG8gbG9hZCBhIGhlYWRlciBmaWxlIG5hbWVkICJ1Y29uZmln
X2xvY2FsLmgiCi0gKiBwcmlvciB0byBkZXRlcm1pbmluZyBkZWZhdWx0IHNldHRpbmdzIGZvciB1
Y29uZmlnIHZhcmlhYmxlcy4KLSAqCi0gKiBAaW50ZXJuYWwgSUNVIDQuMAotICovCi0jaWYgZGVm
aW5lZChVQ09ORklHX1VTRV9MT0NBTCkKLSNpbmNsdWRlICJ1Y29uZmlnX2xvY2FsLmgiCi0jZW5k
aWYKLQotLyoqCi0gKiBcZGVmIFVfREVCVUcKLSAqIERldGVybWluZXMgd2hldGhlciB0byBpbmNs
dWRlIGRlYnVnZ2luZyBjb2RlLgotICogQXV0b21hdGljYWxseSBzZXQgb24gV2luZG93cywgYnV0
IG1vc3QgY29tcGlsZXJzIGRvIG5vdCBoYXZlCi0gKiByZWxhdGVkIHByZWRlZmluZWQgbWFjcm9z
LgotICogQGludGVybmFsCi0gKi8KLSNpZmRlZiBVX0RFQlVHCi0gICAgLyogVXNlIHRoZSBwcmVk
ZWZpbmVkIHZhbHVlLiAqLwotI2VsaWYgZGVmaW5lZChfREVCVUcpCi0gICAgLyoKLSAgICAgKiBf
REVCVUcgaXMgZGVmaW5lZCBieSBWaXN1YWwgU3R1ZGlvIGRlYnVnIGNvbXBpbGF0aW9uLgotICAg
ICAqIERvICpub3QqIHRlc3QgZm9yIGl0cyBOREVCVUcgbWFjcm86IEl0IGlzIGFuIG9ydGhvZ29u
YWwgbWFjcm8KLSAgICAgKiB3aGljaCBkaXNhYmxlcyBhc3NlcnQoKS4KLSAgICAgKi8KLSMgICBk
ZWZpbmUgVV9ERUJVRyAxCi0jIGVsc2UKLSMgICBkZWZpbmUgVV9ERUJVRyAwCi0jZW5kaWYKLQot
LyoqCi0gKiBEZXRlcm1pbmVzIHdoZXRlciB0byBlbmFibGUgYXV0byBjbGVhbnVwIG9mIGxpYnJh
cmllcy4gCi0gKiBAaW50ZXJuYWwKLSAqLwotI2lmbmRlZiBVQ0xOX05PX0FVVE9fQ0xFQU5VUAot
I2RlZmluZSBVQ0xOX05PX0FVVE9fQ0xFQU5VUCAxCi0jZW5kaWYKLQotLyoqCi0gKiBcZGVmIFVf
RElTQUJMRV9SRU5BTUlORwotICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc2FibGUgcmVuYW1p
bmcgb3Igbm90LgotICogQGludGVybmFsCi0gKi8KLSNpZm5kZWYgVV9ESVNBQkxFX1JFTkFNSU5H
Ci0jZGVmaW5lIFVfRElTQUJMRV9SRU5BTUlORyAwCi0jZW5kaWYKLQotLyoqCi0gKiBcZGVmIFVf
Tk9fREVGQVVMVF9JTkNMVURFX1VURl9IRUFERVJTCi0gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdXR5
cGVzLmggaW5jbHVkZXMgdXRmLmgsIHV0ZjguaCwgdXRmMTYuaCBhbmQgdXRmX29sZC5oLgotICog
dXR5cGVzLmggaW5jbHVkZXMgdGhvc2UgaGVhZGVycyBpZiB0aGlzIG1hY3JvIGlzIGRlZmluZWQg
dG8gMC4KLSAqIE90aGVyd2lzZSwgZWFjaCB0aG9zZSBoZWFkZXJzIG11c3QgYmUgaW5jbHVkZWQg
ZXhwbGljaXRseSB3aGVuIHVzaW5nIG9uZSBvZiB0aGVpciBtYWNyb3MuCi0gKiBEZWZhdWx0cyB0
byAwIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBleGNlcHQgaW5zaWRlIElDVS4KLSAqIEBz
dGFibGUgSUNVIDQ5Ci0gKi8KLSNpZmRlZiBVX05PX0RFRkFVTFRfSU5DTFVERV9VVEZfSEVBREVS
UwotICAgIC8qIFVzZSB0aGUgcHJlZGVmaW5lZCB2YWx1ZS4gKi8KLSNlbGlmIGRlZmluZWQoVV9D
T01CSU5FRF9JTVBMRU1FTlRBVElPTikgfHwgZGVmaW5lZChVX0NPTU1PTl9JTVBMRU1FTlRBVElP
TikgfHwgZGVmaW5lZChVX0kxOE5fSU1QTEVNRU5UQVRJT04pIHx8IFwKLSAgICAgIGRlZmluZWQo
VV9JT19JTVBMRU1FTlRBVElPTikgfHwgZGVmaW5lZChVX0xBWU9VVF9JTVBMRU1FTlRBVElPTikg
fHwgZGVmaW5lZChVX0xBWU9VVEVYX0lNUExFTUVOVEFUSU9OKSB8fCBcCi0gICAgICBkZWZpbmVk
KFVfVE9PTFVUSUxfSU1QTEVNRU5UQVRJT04pCi0jICAgZGVmaW5lIFVfTk9fREVGQVVMVF9JTkNM
VURFX1VURl9IRUFERVJTIDEKLSNlbHNlCi0jICAgZGVmaW5lIFVfTk9fREVGQVVMVF9JTkNMVURF
X1VURl9IRUFERVJTIDAKLSNlbmRpZgotCi0vKioKLSAqIFxkZWYgVV9PVkVSUklERV9DWFhfQUxM
T0NBVElPTgotICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIG92ZXJyaWRlIG5ldyBhbmQgZGVsZXRl
LgotICogSUNVIGlzIG5vcm1hbGx5IGJ1aWx0IHN1Y2ggdGhhdCBhbGwgb2YgaXRzIEMrKyBjbGFz
c2VzLCB2aWEgdGhlaXIgVU1lbW9yeSBiYXNlLAotICogb3ZlcnJpZGUgb3BlcmF0b3JzIG5ldyBh
bmQgZGVsZXRlIHRvIHVzZSBpdHMgaW50ZXJuYWwsIGN1c3RvbWl6YWJsZSwKLSAqIG5vbi1leGNl
cHRpb24tdGhyb3dpbmcgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLiAoRGVmYXVsdCB2YWx1
ZSAxIGZvciB0aGlzIG1hY3JvLikKLSAqCi0gKiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50
IHdoZW4gdGhlIGFwcGxpY2F0aW9uIGFuZCBpdHMgbGlicmFyaWVzIHVzZSBtdWx0aXBsZSBoZWFw
cy4KLSAqIEZvciBleGFtcGxlLCBvbiBXaW5kb3dzLCB0aGlzIGFsbG93cyB0aGUgSUNVIERMTCB0
byBiZSB1c2VkIGJ5Ci0gKiBhcHBsaWNhdGlvbnMgdGhhdCBzdGF0aWNhbGx5IGxpbmsgdGhlIEMg
UnVudGltZSBsaWJyYXJ5LgotICoKLSAqIEBzdGFibGUgSUNVIDIuMgotICovCi0jaWZuZGVmIFVf
T1ZFUlJJREVfQ1hYX0FMTE9DQVRJT04KLSNkZWZpbmUgVV9PVkVSUklERV9DWFhfQUxMT0NBVElP
TiAxCi0jZW5kaWYKLQotLyoqCi0gKiBcZGVmIFVfRU5BQkxFX1RSQUNJTkcKLSAqIERldGVybWlu
ZXMgd2hldGhlciB0byBlbmFibGUgdHJhY2luZy4KLSAqIEBpbnRlcm5hbAotICovCi0jaWZuZGVm
IFVfRU5BQkxFX1RSQUNJTkcKLSNkZWZpbmUgVV9FTkFCTEVfVFJBQ0lORyAwCi0jZW5kaWYKLQot
LyoqCi0gKiBcZGVmIFVfRU5BQkxFX0RZTE9BRAotICogV2hldGhlciB0byBlbmFibGUgRHluYW1p
YyBsb2FkaW5nIGluIElDVS4KLSAqIEBpbnRlcm5hbAotICovCi0jaWZuZGVmIFVfRU5BQkxFX0RZ
TE9BRAotI2RlZmluZSBVX0VOQUJMRV9EWUxPQUQgMQotI2VuZGlmCi0KLS8qKgotICogXGRlZiBV
X0NIRUNLX0RZTE9BRAotICogV2hldGhlciB0byB0ZXN0IER5bmFtaWMgbG9hZGluZyBhcyBhbiBP
UyBjYXBhYmlsaXR5LgotICogQGludGVybmFsCi0gKi8KLSNpZm5kZWYgVV9DSEVDS19EWUxPQUQK
LSNkZWZpbmUgVV9DSEVDS19EWUxPQUQgMQotI2VuZGlmCi0KLQotLyoqCi0gKiBcZGVmIFVfREVG
QVVMVF9TSE9XX0RSQUZUCi0gKiBEbyB3ZSBhbGxvdyBJQ1UgdXNlcnMgdG8gdXNlIHRoZSBkcmFm
dCBBUElzIGJ5IGRlZmF1bHQ/Ci0gKiBAaW50ZXJuYWwKLSAqLwotI2lmbmRlZiBVX0RFRkFVTFRf
U0hPV19EUkFGVAotI2RlZmluZSBVX0RFRkFVTFRfU0hPV19EUkFGVCAxCi0jZW5kaWYKLQotLyo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0qLwotLyogQ3VzdG9tIGljdSBlbnRyeSBwb2ludCByZW5hbWluZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0qLwotCi0vKioKLSAqIFxkZWYgVV9IQVZFX0xJQl9TVUZGSVgKLSAqIDEgaWYgYSBj
dXN0b20gbGlicmFyeSBzdWZmaXggaXMgc2V0LgotICogQGludGVybmFsCi0gKi8KLSNpZmRlZiBV
X0hBVkVfTElCX1NVRkZJWAotICAgIC8qIFVzZSB0aGUgcHJlZGVmaW5lZCB2YWx1ZS4gKi8KLSNl
bGlmIGRlZmluZWQoVV9MSUJfU1VGRklYX0NfTkFNRSkKLSMgICBkZWZpbmUgVV9IQVZFX0xJQl9T
VUZGSVggMQotI2VuZGlmCi0KLS8qKgotICogXGRlZiBVX0xJQl9TVUZGSVhfQ19OQU1FX1NUUklO
RwotICogRGVmaW5lcyB0aGUgbGlicmFyeSBzdWZmaXggYXMgYSBzdHJpbmcgd2l0aCBDIHN5bnRh
eC4KLSAqIEBpbnRlcm5hbAotICovCi0jaWZkZWYgVV9MSUJfU1VGRklYX0NfTkFNRV9TVFJJTkcK
LSAgICAvKiBVc2UgdGhlIHByZWRlZmluZWQgdmFsdWUuICovCi0jZWxpZiBkZWZpbmVkKFVfTElC
X1NVRkZJWF9DX05BTUUpCi0jICAgZGVmaW5lIENPTlZFUlRfVE9fU1RSSU5HKHMpICNzCi0jICAg
ZGVmaW5lIFVfTElCX1NVRkZJWF9DX05BTUVfU1RSSU5HIENPTlZFUlRfVE9fU1RSSU5HKFVfTElC
X1NVRkZJWF9DX05BTUUpCi0jZWxzZQotIyAgIGRlZmluZSBVX0xJQl9TVUZGSVhfQ19OQU1FX1NU
UklORyAiIgotI2VuZGlmCi0KLS8qIGNvbW1vbi9pMThuIGxpYnJhcnkgc3dpdGNoZXMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qKgotICogXGRl
ZiBVQ09ORklHX09OTFlfQ09MTEFUSU9OCi0gKiBUaGlzIHN3aXRjaCB0dXJucyBvZmYgbW9kdWxl
cyB0aGF0IGFyZSBub3QgbmVlZGVkIGZvciBjb2xsYXRpb24uCi0gKgotICogSXQgZG9lcyBub3Qg
dHVybiBvZmYgbGVnYWN5IGNvbnZlcnNpb24gYmVjYXVzZSB0aGF0IGlzIG5lY2Vzc2FyeQotICog
Zm9yIElDVSB0byB3b3JrIG9uIEVCQ0RJQyBwbGF0Zm9ybXMgKGZvciB0aGUgZGVmYXVsdCBjb252
ZXJ0ZXIpLgotICogSWYgeW91IHdhbnQgIm9ubHkgY29sbGF0aW9uIiBhbmQgZG8gbm90IGJ1aWxk
IGZvciBFQkNESUMsCi0gKiB0aGVuIHlvdSBjYW4gZGVmaW5lIFVDT05GSUdfTk9fQ09OVkVSU0lP
TiBvciBVQ09ORklHX05PX0xFR0FDWV9DT05WRVJTSU9OIHRvIDEgYXMgd2VsbC4KLSAqCi0gKiBA
c3RhYmxlIElDVSAyLjQKLSAqLwotI2lmbmRlZiBVQ09ORklHX09OTFlfQ09MTEFUSU9OCi0jICAg
ZGVmaW5lIFVDT05GSUdfT05MWV9DT0xMQVRJT04gMAotI2VuZGlmCi0KLSNpZiBVQ09ORklHX09O
TFlfQ09MTEFUSU9OCi0gICAgLyogY29tbW9uIGxpYnJhcnkgKi8KLSMgICBkZWZpbmUgVUNPTkZJ
R19OT19CUkVBS19JVEVSQVRJT04gMQotIyAgIGRlZmluZSBVQ09ORklHX05PX0lETkEgMQotCi0g
ICAgLyogaTE4biBsaWJyYXJ5ICovCi0jICAgaWYgVUNPTkZJR19OT19DT0xMQVRJT04KLSMgICAg
ICAgZXJyb3IgQ29udHJhZGljdG9yeSBjb2xsYXRpb24gc3dpdGNoZXMgaW4gdWNvbmZpZy5oLgot
IyAgIGVuZGlmCi0jICAgZGVmaW5lIFVDT05GSUdfTk9fRk9STUFUVElORyAxCi0jICAgZGVmaW5l
IFVDT05GSUdfTk9fVFJBTlNMSVRFUkFUSU9OIDEKLSMgICBkZWZpbmUgVUNPTkZJR19OT19SRUdV
TEFSX0VYUFJFU1NJT05TIDEKLSNlbmRpZgotCi0vKiBjb21tb24gbGlicmFyeSBzd2l0Y2hlcyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0v
KioKLSAqIFxkZWYgVUNPTkZJR19OT19GSUxFX0lPCi0gKiBUaGlzIHN3aXRjaCB0dXJucyBvZmYg
YWxsIGZpbGUgYWNjZXNzIGluIHRoZSBjb21tb24gbGlicmFyeQotICogd2hlcmUgZmlsZSBhY2Nl
c3MgaXMgb25seSB1c2VkIGZvciBkYXRhIGxvYWRpbmcuCi0gKiBJQ1UgZGF0YSBtdXN0IHRoZW4g
YmUgcHJvdmlkZWQgaW4gdGhlIGZvcm0gb2YgYSBkYXRhIERMTCAob3Igd2l0aCBhbgotICogZXF1
aXZhbGVudCB3YXkgdG8gbGluayB0byB0aGUgZGF0YSByZXNpZGluZyBpbiBhbiBleGVjdXRhYmxl
LAotICogYXMgaW4gYnVpbGRpbmcgYSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYm90aCB0aGUgY29t
bW9uIGxpYnJhcnkncyBjb2RlIGFuZAotICogdGhlIGRhdGEpLCBvciB2aWEgdWRhdGFfc2V0Q29t
bW9uRGF0YSgpLgotICogQXBwbGljYXRpb24gZGF0YSBtdXN0IGJlIHByb3ZpZGVkIHZpYSB1ZGF0
YV9zZXRBcHBEYXRhKCkgb3IgYnkgdXNpbmcKLSAqICJvcGVuIiBmdW5jdGlvbnMgdGhhdCB0YWtl
IHBvaW50ZXJzIHRvIGRhdGEsIGZvciBleGFtcGxlIHVjb2xfb3BlbkJpbmFyeSgpLgotICoKLSAq
IEZpbGUgYWNjZXNzIGlzIG5vdCB1c2VkIGF0IGFsbCBpbiB0aGUgaTE4biBsaWJyYXJ5LgotICoK
LSAqIEZpbGUgYWNjZXNzIGNhbm5vdCBiZSB0dXJuZWQgb2ZmIGZvciB0aGUgaWN1aW8gbGlicmFy
eSBvciBmb3IgdGhlIElDVQotICogdGVzdCBzdWl0ZXMgYW5kIElDVSB0b29scy4KLSAqCi0gKiBA
c3RhYmxlIElDVSAzLjYKLSAqLwotI2lmbmRlZiBVQ09ORklHX05PX0ZJTEVfSU8KLSMgICBkZWZp
bmUgVUNPTkZJR19OT19GSUxFX0lPIDAKLSNlbmRpZgotCi0jaWYgVUNPTkZJR19OT19GSUxFX0lP
ICYmIGRlZmluZWQoVV9USU1FWk9ORV9GSUxFU19ESVIpIAotIyAgIGVycm9yIENvbnRyYWRpY3Rv
cnkgZmlsZSBpbyBzd2l0Y2hlcyBpbiB1Y29uZmlnLmguCi0jZW5kaWYKLQotLyoqCi0gKiBcZGVm
IFVDT05GSUdfTk9fQ09OVkVSU0lPTgotICogSUNVIHdpbGwgbm90IGNvbXBsZXRlbHkgYnVpbGQg
d2l0aCB0aGlzIHN3aXRjaCB0dXJuZWQgb24uCi0gKiBUaGlzIHN3aXRjaCB0dXJucyBvZmYgYWxs
IGNvbnZlcnRlcnMuCi0gKgotICogWW91IG1heSB3YW50IHRvIHVzZSB0aGlzIHRvZ2V0aGVyIHdp
dGggVV9DSEFSU0VUX0lTX1VURjggZGVmaW5lZCB0byAxCi0gKiBpbiB1dHlwZXMuaCBpZiBjaGFy
KiBzdHJpbmdzIGluIHlvdXIgZW52aXJvbm1lbnQgYXJlIGFsd2F5cyBpbiBVVEYtOC4KLSAqCi0g
KiBAc3RhYmxlIElDVSAzLjIKLSAqIEBzZWUgVV9DSEFSU0VUX0lTX1VURjgKLSAqLwotI2lmbmRl
ZiBVQ09ORklHX05PX0NPTlZFUlNJT04KLSMgICBkZWZpbmUgVUNPTkZJR19OT19DT05WRVJTSU9O
IDAKLSNlbmRpZgotCi0jaWYgVUNPTkZJR19OT19DT05WRVJTSU9OCi0jICAgZGVmaW5lIFVDT05G
SUdfTk9fTEVHQUNZX0NPTlZFUlNJT04gMQotI2VuZGlmCi0KLS8qKgotICogXGRlZiBVQ09ORklH
X09OTFlfSFRNTF9DT05WRVJTSU9OCi0gKiBUaGlzIHN3aXRjaCB0dXJucyBvZmYgYWxsIG9mIHRo
ZSBjb252ZXJ0ZXJzIE5PVCBsaXN0ZWQgaW4KLSAqIHRoZSBIVE1MIGVuY29kaW5nIHN0YW5kYXJk
OgotICogaHR0cDovL3d3dy53My5vcmcvVFIvZW5jb2RpbmcvI25hbWVzLWFuZC1sYWJlbHMKLSAq
Ci0gKiBUaGlzIGlzIG5vdCBwb3NzaWJsZSBvbiBFQkNESUMgcGxhdGZvcm1zCi0gKiBiZWNhdXNl
IHRoZXkgbmVlZCBpYm0tMzcgb3IgaWJtLTEwNDcgZGVmYXVsdCBjb252ZXJ0ZXJzLgotICoKLSAq
IEBkcmFmdCBJQ1UgNTUKLSAqLwotI2lmbmRlZiBVQ09ORklHX09OTFlfSFRNTF9DT05WRVJTSU9O
Ci0jICAgZGVmaW5lIFVDT05GSUdfT05MWV9IVE1MX0NPTlZFUlNJT04gMAotI2VuZGlmCi0KLS8q
KgotICogXGRlZiBVQ09ORklHX05PX0xFR0FDWV9DT05WRVJTSU9OCi0gKiBUaGlzIHN3aXRjaCB0
dXJucyBvZmYgYWxsIGNvbnZlcnRlcnMgZXhjZXB0IGZvcgotICogLSBVbmljb2RlIGNoYXJzZXRz
IChVVEYtNy84LzE2LzMyLCBDRVNVLTgsIFNDU1UsIEJPQ1UtMSkKLSAqIC0gVVMtQVNDSUkKLSAq
IC0gSVNPLTg4NTktMQotICoKLSAqIFR1cm5pbmcgb2ZmIGxlZ2FjeSBjb252ZXJzaW9uIGlzIG5v
dCBwb3NzaWJsZSBvbiBFQkNESUMgcGxhdGZvcm1zCi0gKiBiZWNhdXNlIHRoZXkgbmVlZCBpYm0t
Mzcgb3IgaWJtLTEwNDcgZGVmYXVsdCBjb252ZXJ0ZXJzLgotICoKLSAqIEBzdGFibGUgSUNVIDIu
NAotICovCi0jaWZuZGVmIFVDT05GSUdfTk9fTEVHQUNZX0NPTlZFUlNJT04KLSMgICBkZWZpbmUg
VUNPTkZJR19OT19MRUdBQ1lfQ09OVkVSU0lPTiAwCi0jZW5kaWYKLQotLyoqCi0gKiBcZGVmIFVD
T05GSUdfTk9fTk9STUFMSVpBVElPTgotICogVGhpcyBzd2l0Y2ggdHVybnMgb2ZmIG5vcm1hbGl6
YXRpb24uCi0gKiBJdCBpbXBsaWVzIHR1cm5pbmcgb2ZmIHNldmVyYWwgb3RoZXIgc2VydmljZXMg
YXMgd2VsbCwgZm9yIGV4YW1wbGUKLSAqIGNvbGxhdGlvbiBhbmQgSUROQS4KLSAqCi0gKiBAc3Rh
YmxlIElDVSAyLjYKLSAqLwotI2lmbmRlZiBVQ09ORklHX05PX05PUk1BTElaQVRJT04KLSMgICBk
ZWZpbmUgVUNPTkZJR19OT19OT1JNQUxJWkFUSU9OIDAKLSNlbGlmIFVDT05GSUdfTk9fTk9STUFM
SVpBVElPTgotICAgIC8qIGNvbW1vbiBsaWJyYXJ5ICovCi0gICAgLyogSUNVIDUwIENKSyBkaWN0
aW9uYXJ5IEJyZWFrSXRlcmF0b3IgdXNlcyBub3JtYWxpemF0aW9uICovCi0jICAgZGVmaW5lIFVD
T05GSUdfTk9fQlJFQUtfSVRFUkFUSU9OIDEKLSAgICAvKiBJRE5BIChVVFMgIzQ2KSBpcyBpbXBs
ZW1lbnRlZCB2aWEgbm9ybWFsaXphdGlvbiAqLwotIyAgIGRlZmluZSBVQ09ORklHX05PX0lETkEg
MQotCi0gICAgLyogaTE4biBsaWJyYXJ5ICovCi0jICAgaWYgVUNPTkZJR19PTkxZX0NPTExBVElP
TgotIyAgICAgICBlcnJvciBDb250cmFkaWN0b3J5IGNvbGxhdGlvbiBzd2l0Y2hlcyBpbiB1Y29u
ZmlnLmguCi0jICAgZW5kaWYKLSMgICBkZWZpbmUgVUNPTkZJR19OT19DT0xMQVRJT04gMQotIyAg
IGRlZmluZSBVQ09ORklHX05PX1RSQU5TTElURVJBVElPTiAxCi0jZW5kaWYKLQotLyoqCi0gKiBc
ZGVmIFVDT05GSUdfTk9fQlJFQUtfSVRFUkFUSU9OCi0gKiBUaGlzIHN3aXRjaCB0dXJucyBvZmYg
YnJlYWsgaXRlcmF0aW9uLgotICoKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jaWZuZGVmIFVD
T05GSUdfTk9fQlJFQUtfSVRFUkFUSU9OCi0jICAgZGVmaW5lIFVDT05GSUdfTk9fQlJFQUtfSVRF
UkFUSU9OIDAKLSNlbmRpZgotCi0vKioKLSAqIFxkZWYgVUNPTkZJR19OT19JRE5BCi0gKiBUaGlz
IHN3aXRjaCB0dXJucyBvZmYgSUROQS4KLSAqCi0gKiBAc3RhYmxlIElDVSAyLjYKLSAqLwotI2lm
bmRlZiBVQ09ORklHX05PX0lETkEKLSMgICBkZWZpbmUgVUNPTkZJR19OT19JRE5BIDAKLSNlbmRp
ZgotCi0vKioKLSAqIFxkZWYgVUNPTkZJR19NU0dQQVRfREVGQVVMVF9BUE9TVFJPUEhFX01PREUK
LSAqIERldGVybWluZXMgdGhlIGRlZmF1bHQgVU1lc3NhZ2VQYXR0ZXJuQXBvc3Ryb3BoZU1vZGUu
Ci0gKiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoYXQgZW51bS4KLSAqCi0gKiBAc3RhYmxl
IElDVSA0LjgKLSAqLwotI2lmbmRlZiBVQ09ORklHX01TR1BBVF9ERUZBVUxUX0FQT1NUUk9QSEVf
TU9ERQotIyAgIGRlZmluZSBVQ09ORklHX01TR1BBVF9ERUZBVUxUX0FQT1NUUk9QSEVfTU9ERSBV
TVNHUEFUX0FQT1NfRE9VQkxFX09QVElPTkFMCi0jZW5kaWYKLQotLyogaTE4biBsaWJyYXJ5IHN3
aXRjaGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KLQotLyoqCi0gKiBcZGVmIFVDT05GSUdfTk9fQ09MTEFUSU9OCi0gKiBUaGlzIHN3aXRj
aCB0dXJucyBvZmYgY29sbGF0aW9uIGFuZCBjb2xsYXRpb24tYmFzZWQgc3RyaW5nIHNlYXJjaC4K
LSAqCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2lmbmRlZiBVQ09ORklHX05PX0NPTExBVElP
TgotIyAgIGRlZmluZSBVQ09ORklHX05PX0NPTExBVElPTiAwCi0jZW5kaWYKLQotLyoqCi0gKiBc
ZGVmIFVDT05GSUdfTk9fRk9STUFUVElORwotICogVGhpcyBzd2l0Y2ggdHVybnMgb2ZmIGZvcm1h
dHRpbmcgYW5kIGNhbGVuZGFyL3RpbWV6b25lIHNlcnZpY2VzLgotICoKLSAqIEBzdGFibGUgSUNV
IDIuNAotICovCi0jaWZuZGVmIFVDT05GSUdfTk9fRk9STUFUVElORwotIyAgIGRlZmluZSBVQ09O
RklHX05PX0ZPUk1BVFRJTkcgMAotI2VuZGlmCi0KLS8qKgotICogXGRlZiBVQ09ORklHX05PX1RS
QU5TTElURVJBVElPTgotICogVGhpcyBzd2l0Y2ggdHVybnMgb2ZmIHRyYW5zbGl0ZXJhdGlvbi4K
LSAqCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2lmbmRlZiBVQ09ORklHX05PX1RSQU5TTElU
RVJBVElPTgotIyAgIGRlZmluZSBVQ09ORklHX05PX1RSQU5TTElURVJBVElPTiAwCi0jZW5kaWYK
LQotLyoqCi0gKiBcZGVmIFVDT05GSUdfTk9fUkVHVUxBUl9FWFBSRVNTSU9OUwotICogVGhpcyBz
d2l0Y2ggdHVybnMgb2ZmIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCi0gKgotICogQHN0YWJsZSBJQ1Ug
Mi40Ci0gKi8KLSNpZm5kZWYgVUNPTkZJR19OT19SRUdVTEFSX0VYUFJFU1NJT05TCi0jICAgZGVm
aW5lIFVDT05GSUdfTk9fUkVHVUxBUl9FWFBSRVNTSU9OUyAwCi0jZW5kaWYKLQotLyoqCi0gKiBc
ZGVmIFVDT05GSUdfTk9fU0VSVklDRQotICogVGhpcyBzd2l0Y2ggdHVybnMgb2ZmIHNlcnZpY2Ug
cmVnaXN0cmF0aW9uLgotICoKLSAqIEBzdGFibGUgSUNVIDMuMgotICovCi0jaWZuZGVmIFVDT05G
SUdfTk9fU0VSVklDRQotIyAgIGRlZmluZSBVQ09ORklHX05PX1NFUlZJQ0UgMAotI2VuZGlmCi0K
LS8qKgotICogXGRlZiBVQ09ORklHX0hBVkVfUEFSU0VBTExJTlBVVAotICogVGhpcyBzd2l0Y2gg
dHVybnMgb24gdGhlICJwYXJzZSBhbGwgaW5wdXQiIGF0dHJpYnV0ZS4gQmluYXJ5IGluY29tcGF0
aWJsZS4KLSAqCi0gKiBAaW50ZXJuYWwKLSAqLwotI2lmbmRlZiBVQ09ORklHX0hBVkVfUEFSU0VB
TExJTlBVVAotIyAgIGRlZmluZSBVQ09ORklHX0hBVkVfUEFSU0VBTExJTlBVVCAxCi0jZW5kaWYK
LQotCi0vKioKLSAqIFxkZWYgVUNPTkZJR19GT1JNQVRfRkFTVFBBVEhTXzQ5Ci0gKiBUaGlzIHN3
aXRjaCB0dXJucyBvbiBvdGhlciBmb3JtYXR0aW5nIGZhc3RwYXRocy4gQmluYXJ5IGluY29tcGF0
aWJsZSBpbiBvYmplY3QgRGVjaW1hbEZvcm1hdCBhbmQgRGVjaW1hbEZvcm1hdFN5bWJvbHMKLSAq
Ci0gKiBAaW50ZXJuYWwKLSAqLwotI2lmbmRlZiBVQ09ORklHX0ZPUk1BVF9GQVNUUEFUSFNfNDkK
LSMgICBkZWZpbmUgVUNPTkZJR19GT1JNQVRfRkFTVFBBVEhTXzQ5IDEKLSNlbmRpZgotCi0vKioK
LSAqIFxkZWYgVUNPTkZJR19OT19GSUxURVJFRF9CUkVBS19JVEVSQVRJT04KLSAqIFRoaXMgc3dp
dGNoIHR1cm5zIG9mZiBmaWx0ZXJlZCBicmVhayBpdGVyYXRpb24gY29kZS4KLSAqCi0gKiBAaW50
ZXJuYWwKLSAqLwotI2lmbmRlZiBVQ09ORklHX05PX0ZJTFRFUkVEX0JSRUFLX0lURVJBVElPTgot
IyAgIGRlZmluZSBVQ09ORklHX05PX0ZJTFRFUkVEX0JSRUFLX0lURVJBVElPTiAwCi0KLQotCi0j
ZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3VlbnVtLmggYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3VlbnVtLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MDhlYzVhNjYwNWI3NTQwODU4YjRlZjY3ZTk5OWZl
MjJjNTEyYWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29k
ZS91ZW51bS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCi0qCi0qICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTMsIEludGVybmF0aW9u
YWwgQnVzaW5lc3MgTWFjaGluZXMKLSogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICBmaWxlIG5hbWU6
ICB1ZW51bS5oCi0qICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKLSogICB0YWIgc2l6ZTogICA4IChu
b3QgdXNlZCkKLSogICBpbmRlbnRhdGlvbjoyCi0qCi0qICAgY3JlYXRlZCBvbjogMjAwMmp1bDA4
Ci0qICAgY3JlYXRlZCBieTogVmxhZGltaXIgV2VpbnN0ZWluCi0qLwotCi0jaWZuZGVmIF9fVUVO
VU1fSAotI2RlZmluZSBfX1VFTlVNX0gKLQotI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCi0j
aW5jbHVkZSAidW5pY29kZS9sb2NhbHBvaW50ZXIuaCIKLQotI2lmIFVfU0hPV19DUExVU1BMVVNf
QVBJCi0jaW5jbHVkZSAidW5pY29kZS9zdHJlbnVtLmgiCi0jZW5kaWYKLQotLyoqCi0gKiBcZmls
ZQotICogXGJyaWVmIEMgQVBJOiBTdHJpbmcgRW51bWVyYXRpb24gCi0gKi8KLSAKLS8qKgotICog
QW4gZW51bWVyYXRpb24gb2JqZWN0LgotICogRm9yIHVzYWdlIGluIEMgcHJvZ3JhbXMuCi0gKiBA
c3RhYmxlIElDVSAyLjIKLSAqLwotc3RydWN0IFVFbnVtZXJhdGlvbjsKLS8qKiBzdHJ1Y3R1cmUg
cmVwcmVzZW50aW5nIGFuIGVudW1lcmF0aW9uIG9iamVjdCBpbnN0YW5jZSBAc3RhYmxlIElDVSAy
LjIgKi8KLXR5cGVkZWYgc3RydWN0IFVFbnVtZXJhdGlvbiBVRW51bWVyYXRpb247Ci0KLS8qKgot
ICogRGlzcG9zZXMgb2YgcmVzb3VyY2VzIGluIHVzZSBieSB0aGUgaXRlcmF0b3IuICBJZiBlbiBp
cyBOVUxMLAotICogZG9lcyBub3RoaW5nLiAgQWZ0ZXIgdGhpcyBjYWxsLCBhbnkgY2hhciogb3Ig
VUNoYXIqIHBvaW50ZXIKLSAqIHJldHVybmVkIGJ5IHVlbnVtX3VuZXh0KCkgb3IgdWVudW1fbmV4
dCgpIGlzIGludmFsaWQuCi0gKiBAcGFyYW0gZW4gVUVudW1lcmF0aW9uIHN0cnVjdHVyZSBwb2lu
dGVyCi0gKiBAc3RhYmxlIElDVSAyLjIKLSAqLwotVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKLXVl
bnVtX2Nsb3NlKFVFbnVtZXJhdGlvbiogZW4pOwotCi0jaWYgVV9TSE9XX0NQTFVTUExVU19BUEkK
LQotVV9OQU1FU1BBQ0VfQkVHSU4KLQotLyoqCi0gKiBcY2xhc3MgTG9jYWxVRW51bWVyYXRpb25Q
b2ludGVyCi0gKiAiU21hcnQgcG9pbnRlciIgY2xhc3MsIGNsb3NlcyBhIFVFbnVtZXJhdGlvbiB2
aWEgdWVudW1fY2xvc2UoKS4KLSAqIEZvciBtb3N0IG1ldGhvZHMgc2VlIHRoZSBMb2NhbFBvaW50
ZXJCYXNlIGJhc2UgY2xhc3MuCi0gKgotICogQHNlZSBMb2NhbFBvaW50ZXJCYXNlCi0gKiBAc2Vl
IExvY2FsUG9pbnRlcgotICogQHN0YWJsZSBJQ1UgNC40Ci0gKi8KLVVfREVGSU5FX0xPQ0FMX09Q
RU5fUE9JTlRFUihMb2NhbFVFbnVtZXJhdGlvblBvaW50ZXIsIFVFbnVtZXJhdGlvbiwgdWVudW1f
Y2xvc2UpOwotCi1VX05BTUVTUEFDRV9FTkQKLQotI2VuZGlmCi0KLS8qKgotICogUmV0dXJucyB0
aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgdGhlIGl0ZXJhdG9yIHRyYXZlcnNlcy4gIElmCi0g
KiB0aGUgaXRlcmF0b3IgaXMgb3V0LW9mLXN5bmMgd2l0aCBpdHMgc2VydmljZSwgc3RhdHVzIGlz
IHNldCB0bwotICogVV9FTlVNX09VVF9PRl9TWU5DX0VSUk9SLgotICogVGhpcyBpcyBhIGNvbnZl
bmllbmNlIGZ1bmN0aW9uLiBJdCBjYW4gZW5kIHVwIGJlaW5nIHZlcnkKLSAqIGV4cGVuc2l2ZSBh
cyBhbGwgdGhlIGl0ZW1zIG1pZ2h0IGhhdmUgdG8gYmUgcHJlLWZldGNoZWQgKGRlcGVuZGluZwot
ICogb24gdGhlIHR5cGUgb2YgZGF0YSBiZWluZyB0cmF2ZXJzZWQpLiBVc2Ugd2l0aCBjYXV0aW9u
IGFuZCBvbmx5IAotICogd2hlbiBuZWNlc3NhcnkuCi0gKiBAcGFyYW0gZW4gVUVudW1lcmF0aW9u
IHN0cnVjdHVyZSBwb2ludGVyCi0gKiBAcGFyYW0gc3RhdHVzIGVycm9yIGNvZGUsIGNhbiBiZSBV
X0VOVU1fT1VUX09GX1NZTkNfRVJST1IgaWYgdGhlCi0gKiAgICAgICAgICAgICAgIGl0ZXJhdG9y
IGlzIG91dCBvZiBzeW5jLgotICogQHJldHVybiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGl0
ZXJhdG9yCi0gKiBAc3RhYmxlIElDVSAyLjIKLSAqLwotVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9S
VDIKLXVlbnVtX2NvdW50KFVFbnVtZXJhdGlvbiogZW4sIFVFcnJvckNvZGUqIHN0YXR1cyk7Ci0K
LS8qKgotICogUmV0dXJucyB0aGUgbmV4dCBlbGVtZW50IGluIHRoZSBpdGVyYXRvcidzIGxpc3Qu
ICBJZiB0aGVyZSBhcmUKLSAqIG5vIG1vcmUgZWxlbWVudHMsIHJldHVybnMgTlVMTC4gIElmIHRo
ZSBpdGVyYXRvciBpcyBvdXQtb2Ytc3luYwotICogd2l0aCBpdHMgc2VydmljZSwgc3RhdHVzIGlz
IHNldCB0byBVX0VOVU1fT1VUX09GX1NZTkNfRVJST1IgYW5kCi0gKiBOVUxMIGlzIHJldHVybmVk
LiAgSWYgdGhlIG5hdGl2ZSBzZXJ2aWNlIHN0cmluZyBpcyBhIGNoYXIqIHN0cmluZywKLSAqIGl0
IGlzIGNvbnZlcnRlZCB0byBVQ2hhciogd2l0aCB0aGUgaW52YXJpYW50IGNvbnZlcnRlci4KLSAq
IFRoZSByZXN1bHQgaXMgdGVybWluYXRlZCBieSAoVUNoYXIpMC4KLSAqIEBwYXJhbSBlbiB0aGUg
aXRlcmF0b3Igb2JqZWN0Ci0gKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIHBvaW50ZXIgdG8gcmVjZWl2
ZSB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQKLSAqICAgICAgICAgICAgICAgICAgICAgKG5vdCBp
bmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIFxcMCkuCi0gKiAgICAgICAgICAgICAgICAgICAgIElm
IHRoZSBwb2ludGVyIGlzIE5VTEwgaXQgaXMgaWdub3JlZC4KLSAqIEBwYXJhbSBzdGF0dXMgdGhl
IGVycm9yIGNvZGUsIHNldCB0byBVX0VOVU1fT1VUX09GX1NZTkNfRVJST1IgaWYKLSAqICAgICAg
ICAgICAgICAgdGhlIGl0ZXJhdG9yIGlzIG91dCBvZiBzeW5jIHdpdGggaXRzIHNlcnZpY2UuCi0g
KiBAcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RyaW5nLiAgVGhlIHN0cmluZyB3aWxsIGJlCi0g
KiAgICAgICAgIHplcm8tdGVybWluYXRlZC4gIFRoZSByZXR1cm4gcG9pbnRlciBpcyBvd25lZCBi
eSB0aGlzIGl0ZXJhdG9yCi0gKiAgICAgICAgIGFuZCBtdXN0IG5vdCBiZSBkZWxldGVkIGJ5IHRo
ZSBjYWxsZXIuICBUaGUgcG9pbnRlciBpcyB2YWxpZAotICogICAgICAgICB1bnRpbCB0aGUgbmV4
dCBjYWxsIHRvIGFueSB1ZW51bV8uLi4gbWV0aG9kLCBpbmNsdWRpbmcKLSAqICAgICAgICAgdWVu
dW1fbmV4dCgpIG9yIHVlbnVtX3VuZXh0KCkuICBXaGVuIGFsbCBzdHJpbmdzIGhhdmUgYmVlbgot
ICogICAgICAgICB0cmF2ZXJzZWQsIHJldHVybnMgTlVMTC4KLSAqIEBzdGFibGUgSUNVIDIuMgot
ICovCi1VX1NUQUJMRSBjb25zdCBVQ2hhciogVV9FWFBPUlQyCi11ZW51bV91bmV4dChVRW51bWVy
YXRpb24qIGVuLAotICAgICAgICAgICAgaW50MzJfdCogcmVzdWx0TGVuZ3RoLAotICAgICAgICAg
ICAgVUVycm9yQ29kZSogc3RhdHVzKTsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBuZXh0IGVsZW1l
bnQgaW4gdGhlIGl0ZXJhdG9yJ3MgbGlzdC4gIElmIHRoZXJlIGFyZQotICogbm8gbW9yZSBlbGVt
ZW50cywgcmV0dXJucyBOVUxMLiAgSWYgdGhlIGl0ZXJhdG9yIGlzIG91dC1vZi1zeW5jCi0gKiB3
aXRoIGl0cyBzZXJ2aWNlLCBzdGF0dXMgaXMgc2V0IHRvIFVfRU5VTV9PVVRfT0ZfU1lOQ19FUlJP
UiBhbmQKLSAqIE5VTEwgaXMgcmV0dXJuZWQuICBJZiB0aGUgbmF0aXZlIHNlcnZpY2Ugc3RyaW5n
IGlzIGEgVUNoYXIqCi0gKiBzdHJpbmcsIGl0IGlzIGNvbnZlcnRlZCB0byBjaGFyKiB3aXRoIHRo
ZSBpbnZhcmlhbnQgY29udmVydGVyLgotICogVGhlIHJlc3VsdCBpcyB0ZXJtaW5hdGVkIGJ5IChj
aGFyKTAuICBJZiB0aGUgY29udmVyc2lvbiBmYWlscwotICogKGJlY2F1c2UgYSBjaGFyYWN0ZXIg
Y2Fubm90IGJlIGNvbnZlcnRlZCkgdGhlbiBzdGF0dXMgaXMgc2V0IHRvCi0gKiBVX0lOVkFSSUFO
VF9DT05WRVJTSU9OX0VSUk9SIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZAotICog
KGJ1dCBub24tTlVMTCkuCi0gKiBAcGFyYW0gZW4gdGhlIGl0ZXJhdG9yIG9iamVjdAotICogQHBh
cmFtIHJlc3VsdExlbmd0aCBwb2ludGVyIHRvIHJlY2VpdmUgdGhlIGxlbmd0aCBvZiB0aGUgcmVz
dWx0Ci0gKiAgICAgICAgICAgICAgICAgICAgIChub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGlu
ZyBcXDApLgotICogICAgICAgICAgICAgICAgICAgICBJZiB0aGUgcG9pbnRlciBpcyBOVUxMIGl0
IGlzIGlnbm9yZWQuCi0gKiBAcGFyYW0gc3RhdHVzIHRoZSBlcnJvciBjb2RlLCBzZXQgdG8gVV9F
TlVNX09VVF9PRl9TWU5DX0VSUk9SIGlmCi0gKiAgICAgICAgICAgICAgIHRoZSBpdGVyYXRvciBp
cyBvdXQgb2Ygc3luYyB3aXRoIGl0cyBzZXJ2aWNlLiAgU2V0IHRvCi0gKiAgICAgICAgICAgICAg
IFVfSU5WQVJJQU5UX0NPTlZFUlNJT05fRVJST1IgaWYgdGhlIHVuZGVybHlpbmcgbmF0aXZlIHN0
cmluZyBpcwotICogICAgICAgICAgICAgICBVQ2hhciogYW5kIGNvbnZlcnNpb24gdG8gY2hhciog
d2l0aCB0aGUgaW52YXJpYW50IGNvbnZlcnRlcgotICogICAgICAgICAgICAgICBmYWlscy4gVGhp
cyBlcnJvciBwZXJ0YWlucyBvbmx5IHRvIGN1cnJlbnQgc3RyaW5nLCBzbyBpdGVyYXRpb24KLSAq
ICAgICAgICAgICAgICAgbWlnaHQgYmUgYWJsZSB0byBjb250aW51ZSBzdWNjZXNzZnVsbHkuCi0g
KiBAcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RyaW5nLiAgVGhlIHN0cmluZyB3aWxsIGJlCi0g
KiAgICAgICAgIHplcm8tdGVybWluYXRlZC4gIFRoZSByZXR1cm4gcG9pbnRlciBpcyBvd25lZCBi
eSB0aGlzIGl0ZXJhdG9yCi0gKiAgICAgICAgIGFuZCBtdXN0IG5vdCBiZSBkZWxldGVkIGJ5IHRo
ZSBjYWxsZXIuICBUaGUgcG9pbnRlciBpcyB2YWxpZAotICogICAgICAgICB1bnRpbCB0aGUgbmV4
dCBjYWxsIHRvIGFueSB1ZW51bV8uLi4gbWV0aG9kLCBpbmNsdWRpbmcKLSAqICAgICAgICAgdWVu
dW1fbmV4dCgpIG9yIHVlbnVtX3VuZXh0KCkuICBXaGVuIGFsbCBzdHJpbmdzIGhhdmUgYmVlbgot
ICogICAgICAgICB0cmF2ZXJzZWQsIHJldHVybnMgTlVMTC4KLSAqIEBzdGFibGUgSUNVIDIuMgot
ICovCi1VX1NUQUJMRSBjb25zdCBjaGFyKiBVX0VYUE9SVDIKLXVlbnVtX25leHQoVUVudW1lcmF0
aW9uKiBlbiwKLSAgICAgICAgICAgaW50MzJfdCogcmVzdWx0TGVuZ3RoLAotICAgICAgICAgICBV
RXJyb3JDb2RlKiBzdGF0dXMpOwotCi0vKioKLSAqIFJlc2V0cyB0aGUgaXRlcmF0b3IgdG8gdGhl
IGN1cnJlbnQgbGlzdCBvZiBzZXJ2aWNlIElEcy4gIFRoaXMKLSAqIHJlLWVzdGFibGlzaGVzIHN5
bmMgd2l0aCB0aGUgc2VydmljZSBhbmQgcmV3aW5kcyB0aGUgaXRlcmF0b3IKLSAqIHRvIHN0YXJ0
IGF0IHRoZSBmaXJzdCBlbGVtZW50LgotICogQHBhcmFtIGVuIHRoZSBpdGVyYXRvciBvYmplY3QK
LSAqIEBwYXJhbSBzdGF0dXMgdGhlIGVycm9yIGNvZGUsIHNldCB0byBVX0VOVU1fT1VUX09GX1NZ
TkNfRVJST1IgaWYKLSAqICAgICAgICAgICAgICAgdGhlIGl0ZXJhdG9yIGlzIG91dCBvZiBzeW5j
IHdpdGggaXRzIHNlcnZpY2UuICAKLSAqIEBzdGFibGUgSUNVIDIuMgotICovCi1VX1NUQUJMRSB2
b2lkIFVfRVhQT1JUMgotdWVudW1fcmVzZXQoVUVudW1lcmF0aW9uKiBlbiwgVUVycm9yQ29kZSog
c3RhdHVzKTsKLQotI2lmIFVfU0hPV19DUExVU1BMVVNfQVBJCi0KLS8qKgotICogR2l2ZW4gYSBT
dHJpbmdFbnVtZXJhdGlvbiwgd3JhcCBpdCBpbiBhIFVFbnVtZXJhdGlvbi4gIFRoZQotICogU3Ry
aW5nRW51bWVyYXRpb24gaXMgYWRvcHRlZDsgYWZ0ZXIgdGhpcyBjYWxsLCB0aGUgY2FsbGVyIG11
c3Qgbm90Ci0gKiBkZWxldGUgaXQgKHJlZ2FyZGxlc3Mgb2YgZXJyb3Igc3RhdHVzKS4KLSAqIEBw
YXJhbSBhZG9wdGVkIHRoZSBDKysgU3RyaW5nRW51bWVyYXRpb24gdG8gYmUgd3JhcHBlZCBpbiBh
IFVFbnVtZXJhdGlvbi4KLSAqIEBwYXJhbSBlYyB0aGUgZXJyb3IgY29kZS4KLSAqIEByZXR1cm4g
YSBVRW51bWVyYXRpb24gd3JhcHBpbmcgdGhlIGFkb3B0ZWQgU3RyaW5nRW51bWVyYXRpb24uCi0g
KiBAc3RhYmxlIElDVSA0LjIKLSAqLwotVV9TVEFCTEUgVUVudW1lcmF0aW9uKiBVX0VYUE9SVDIK
LXVlbnVtX29wZW5Gcm9tU3RyaW5nRW51bWVyYXRpb24oaWN1OjpTdHJpbmdFbnVtZXJhdGlvbiog
YWRvcHRlZCwgVUVycm9yQ29kZSogZWMpOwotCi0jZW5kaWYKLQotLyoqCi0gKiBHaXZlbiBhbiBh
cnJheSBvZiBjb25zdCBVQ2hhciogc3RyaW5ncywgcmV0dXJuIGEgVUVudW1lcmF0aW9uLiAgU3Ry
aW5nIHBvaW50ZXJzIGZyb20gMC4uY291bnQtMSBtdXN0IG5vdCBiZSBudWxsLgotICogRG8gbm90
IGZyZWUgb3IgbW9kaWZ5IGVpdGhlciB0aGUgc3RyaW5nIGFycmF5IG9yIHRoZSBjaGFyYWN0ZXJz
IGl0IHBvaW50cyB0byB1bnRpbCB0aGlzIG9iamVjdCBoYXMgYmVlbiBkZXN0cm95ZWQgd2l0aCB1
ZW51bV9jbG9zZS4KLSAqIFxzbmlwcGV0IHRlc3QvY2ludGx0c3QvdWVudW10c3QuYyB1ZW51bV9v
cGVuVUNoYXJTdHJpbmdzRW51bWVyYXRpb24KLSAqIEBwYXJhbSBzdHJpbmdzIGFycmF5IG9mIGNv
bnN0IFVDaGFyKiBzdHJpbmdzIChlYWNoIG51bGwgdGVybWluYXRlZCkuIEFsbCBzdG9yYWdlIGlz
IG93bmVkIGJ5IHRoZSBjYWxsZXIuCi0gKiBAcGFyYW0gY291bnQgbGVuZ3RoIG9mIHRoZSBhcnJh
eQotICogQHBhcmFtIGVjIGVycm9yIGNvZGUKLSAqIEByZXR1cm4gdGhlIG5ldyBVRW51bWVyYXRp
b24gb2JqZWN0LiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgdWVudW1fY2xvc2Ug
dG8gZnJlZSBtZW1vcnkuCi0gKiBAc2VlIHVlbnVtX2Nsb3NlCi0gKiBAc3RhYmxlIElDVSA1MAot
ICovCi1VX1NUQUJMRSBVRW51bWVyYXRpb24qIFVfRVhQT1JUMgotdWVudW1fb3BlblVDaGFyU3Ry
aW5nc0VudW1lcmF0aW9uKGNvbnN0IFVDaGFyKiBjb25zdCBzdHJpbmdzW10sIGludDMyX3QgY291
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBlYyk7Ci0K
LS8qIE5vdGU6ICBuZXh0IGZ1bmN0aW9uIGlzIG5vdCBoaWRkZW4gYXMgZHJhZnQsIGFzIGl0IGlz
IHVzZWQgaW50ZXJuYWxseSAoaXQgd2FzIGZvcm1lcmx5IGFuIGludGVybmFsIGZ1bmN0aW9uKS4g
Ki8KLQotLyoqCi0gKiBHaXZlbiBhbiBhcnJheSBvZiBjb25zdCBjaGFyKiBzdHJpbmdzIChpbnZh
cmlhbnQgY2hhcnMgb25seSksIHJldHVybiBhIFVFbnVtZXJhdGlvbi4gIFN0cmluZyBwb2ludGVy
cyBmcm9tIDAuLmNvdW50LTEgbXVzdCBub3QgYmUgbnVsbC4KLSAqIERvIG5vdCBmcmVlIG9yIG1v
ZGlmeSBlaXRoZXIgdGhlIHN0cmluZyBhcnJheSBvciB0aGUgY2hhcmFjdGVycyBpdCBwb2ludHMg
dG8gdW50aWwgdGhpcyBvYmplY3QgaGFzIGJlZW4gZGVzdHJveWVkIHdpdGggdWVudW1fY2xvc2Uu
Ci0gKiBcc25pcHBldCB0ZXN0L2NpbnRsdHN0L3VlbnVtdHN0LmMgdWVudW1fb3BlbkNoYXJTdHJp
bmdzRW51bWVyYXRpb24KLSAqIEBwYXJhbSBzdHJpbmdzIGFycmF5IG9mIGNoYXIqIHN0cmluZ3Mg
KGVhY2ggbnVsbCB0ZXJtaW5hdGVkKS4gIEFsbCBzdG9yYWdlIGlzIG93bmVkIGJ5IHRoZSBjYWxs
ZXIuCi0gKiBAcGFyYW0gY291bnQgbGVuZ3RoIG9mIHRoZSBhcnJheQotICogQHBhcmFtIGVjIGVy
cm9yIGNvZGUKLSAqIEByZXR1cm4gdGhlIG5ldyBVRW51bWVyYXRpb24gb2JqZWN0LiBDYWxsZXIg
aXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgdWVudW1fY2xvc2UgdG8gZnJlZSBtZW1vcnkKLSAq
IEBzZWUgdWVudW1fY2xvc2UKLSAqIEBzdGFibGUgSUNVIDUwCi0gKi8KLVVfU1RBQkxFIFVFbnVt
ZXJhdGlvbiogVV9FWFBPUlQyCi11ZW51bV9vcGVuQ2hhclN0cmluZ3NFbnVtZXJhdGlvbihjb25z
dCBjaGFyKiBjb25zdCBzdHJpbmdzW10sIGludDMyX3QgY291bnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBlYyk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29k
ZS91aXRlci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2ll
cy9pY3UvdW5pY29kZS91aXRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2Ri
OGZmYmU1YzgxNTRhYzlkOTA4ZjYwNWIwZWIxNmVhNWJiMTk5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvdWl0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDcwNyArMCwwIEBACi0vKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiAgIENvcHlyaWdo
dCAoQykgMjAwMi0yMDExIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKLSogICBDb3Jw
b3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoKLSoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKLSogICBmaWxlIG5hbWU6ICB1aXRlci5oCi0qICAgZW5jb2Rpbmc6ICAgVVMt
QVNDSUkKLSogICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkKLSogICBpbmRlbnRhdGlvbjo0Ci0q
Ci0qICAgY3JlYXRlZCBvbjogMjAwMmphbjE4Ci0qICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNj
aGVyZXIKLSovCi0KLSNpZm5kZWYgX19VSVRFUl9IX18KLSNkZWZpbmUgX19VSVRFUl9IX18KLQot
LyoqCi0gKiBcZmlsZQotICogXGJyaWVmIEMgQVBJOiBVbmljb2RlIENoYXJhY3RlciBJdGVyYXRp
b24KLSAqCi0gKiBAc2VlIFVDaGFySXRlcmF0b3IKLSAqLwotCi0jaW5jbHVkZSAidW5pY29kZS91
dHlwZXMuaCIKLQotI2lmIFVfU0hPV19DUExVU1BMVVNfQVBJCi0gICAgVV9OQU1FU1BBQ0VfQkVH
SU4KLQotICAgIGNsYXNzIENoYXJhY3Rlckl0ZXJhdG9yOwotICAgIGNsYXNzIFJlcGxhY2VhYmxl
OwotCi0gICAgVV9OQU1FU1BBQ0VfRU5ECi0jZW5kaWYKLQotVV9DREVDTF9CRUdJTgotCi1zdHJ1
Y3QgVUNoYXJJdGVyYXRvcjsKLXR5cGVkZWYgc3RydWN0IFVDaGFySXRlcmF0b3IgVUNoYXJJdGVy
YXRvcjsgLyoqPCBDIHR5cGVkZWYgZm9yIHN0cnVjdCBVQ2hhckl0ZXJhdG9yLiBAc3RhYmxlIElD
VSAyLjEgKi8KLQotLyoqCi0gKiBPcmlnaW4gY29uc3RhbnRzIGZvciBVQ2hhckl0ZXJhdG9yLmdl
dEluZGV4KCkgYW5kIFVDaGFySXRlcmF0b3IubW92ZSgpLgotICogQHNlZSBVQ2hhckl0ZXJhdG9y
TW92ZQotICogQHNlZSBVQ2hhckl0ZXJhdG9yCi0gKiBAc3RhYmxlIElDVSAyLjEKLSAqLwotdHlw
ZWRlZiBlbnVtIFVDaGFySXRlcmF0b3JPcmlnaW4gewotICAgIFVJVEVSX1NUQVJULCBVSVRFUl9D
VVJSRU5ULCBVSVRFUl9MSU1JVCwgVUlURVJfWkVSTywgVUlURVJfTEVOR1RICi19IFVDaGFySXRl
cmF0b3JPcmlnaW47Ci0KLS8qKiBDb25zdGFudHMgZm9yIFVDaGFySXRlcmF0b3IuIEBzdGFibGUg
SUNVIDIuNiAqLwotZW51bSB7Ci0gICAgLyoqCi0gICAgICogQ29uc3RhbnQgdmFsdWUgdGhhdCBt
YXkgYmUgcmV0dXJuZWQgYnkgVUNoYXJJdGVyYXRvck1vdmUKLSAgICAgKiBpbmRpY2F0aW5nIHRo
YXQgdGhlIGZpbmFsIFVURi0xNiBpbmRleCBpcyBub3Qga25vd24sIGJ1dCB0aGF0IHRoZSBtb3Zl
IHN1Y2NlZWRlZC4KLSAgICAgKiBUaGlzIGNhbiBvY2N1ciB3aGVuIG1vdmluZyByZWxhdGl2ZSB0
byBsaW1pdCBvciBsZW5ndGgsIG9yCi0gICAgICogd2hlbiBtb3ZpbmcgcmVsYXRpdmUgdG8gdGhl
IGN1cnJlbnQgaW5kZXggYWZ0ZXIgYSBzZXRTdGF0ZSgpCi0gICAgICogd2hlbiB0aGUgY3VycmVu
dCBVVEYtMTYgaW5kZXggaXMgbm90IGtub3duLgotICAgICAqCi0gICAgICogSXQgd291bGQgYmUg
dmVyeSBpbmVmZmljaWVudCB0byBoYXZlIHRvIGNvdW50IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0
aGUgdGV4dAotICAgICAqIGp1c3QgdG8gZ2V0IHRoZSBjdXJyZW50L2xpbWl0L2xlbmd0aCBpbmRl
eCBhZnRlciBtb3ZpbmcgcmVsYXRpdmUgdG8gaXQuCi0gICAgICogVGhlIGFjdHVhbCBpbmRleCBj
YW4gYmUgZGV0ZXJtaW5lZCB3aXRoIGdldEluZGV4KFVJVEVSX0NVUlJFTlQpCi0gICAgICogd2hp
Y2ggd2lsbCBjb3VudCB0aGUgVUNoYXJzIGlmIG5lY2Vzc2FyeS4KLSAgICAgKgotICAgICAqIEBz
dGFibGUgSUNVIDIuNgotICAgICAqLwotICAgIFVJVEVSX1VOS05PV05fSU5ERVg9LTIKLX07Ci0K
LQotLyoqCi0gKiBDb25zdGFudCBmb3IgVUNoYXJJdGVyYXRvciBnZXRTdGF0ZSgpIGluZGljYXRp
bmcgYW4gZXJyb3Igb3IKLSAqIGFuIHVua25vd24gc3RhdGUuCi0gKiBSZXR1cm5lZCBieSB1aXRl
cl9nZXRTdGF0ZSgpL1VDaGFySXRlcmF0b3JHZXRTdGF0ZQotICogd2hlbiBhbiBlcnJvciBvY2N1
cnMuCi0gKiBBbHNvLCBzb21lIFVDaGFySXRlcmF0b3IgaW1wbGVtZW50YXRpb25zIG1heSBub3Qg
YmUgYWJsZSB0byByZXR1cm4KLSAqIGEgdmFsaWQgc3RhdGUgZm9yIGVhY2ggcG9zaXRpb24uIFRo
aXMgd2lsbCBiZSBjbGVhcmx5IGRvY3VtZW50ZWQKLSAqIGZvciBlYWNoIHN1Y2ggaXRlcmF0b3Ig
KG5vbmUgb2YgdGhlIHB1YmxpYyBvbmVzIGhlcmUpLgotICoKLSAqIEBzdGFibGUgSUNVIDIuNgot
ICovCi0jZGVmaW5lIFVJVEVSX05PX1NUQVRFICgodWludDMyX3QpMHhmZmZmZmZmZikKLQotLyoq
Ci0gKiBGdW5jdGlvbiB0eXBlIGRlY2xhcmF0aW9uIGZvciBVQ2hhckl0ZXJhdG9yLmdldEluZGV4
KCkuCi0gKgotICogR2V0cyB0aGUgY3VycmVudCBwb3NpdGlvbiwgb3IgdGhlIHN0YXJ0IG9yIGxp
bWl0IG9mIHRoZQotICogaXRlcmF0aW9uIHJhbmdlLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gbWF5
IHBlcmZvcm0gc2xvd2x5IGZvciBVSVRFUl9DVVJSRU5UIGFmdGVyIHNldFN0YXRlKCkgd2FzIGNh
bGxlZCwKLSAqIG9yIGZvciBVSVRFUl9MRU5HVEgsIGJlY2F1c2UgYW4gaXRlcmF0b3IgaW1wbGVt
ZW50YXRpb24gbWF5IGhhdmUgdG8gY291bnQKLSAqIFVDaGFycyBpZiB0aGUgdW5kZXJseWluZyBz
dG9yYWdlIGlzIG5vdCBVVEYtMTYuCi0gKgotICogQHBhcmFtIGl0ZXIgdGhlIFVDaGFySXRlcmF0
b3Igc3RydWN0dXJlICgidGhpcyBwb2ludGVyIikKLSAqIEBwYXJhbSBvcmlnaW4gZ2V0IHRoZSAw
LCBzdGFydCwgbGltaXQsIGxlbmd0aCwgb3IgY3VycmVudCBpbmRleAotICogQHJldHVybiB0aGUg
cmVxdWVzdGVkIGluZGV4LCBvciBVX1NFTlRJTkVMIGluIGFuIGVycm9yIGNvbmRpdGlvbgotICoK
LSAqIEBzZWUgVUNoYXJJdGVyYXRvck9yaWdpbgotICogQHNlZSBVQ2hhckl0ZXJhdG9yCi0gKiBA
c3RhYmxlIElDVSAyLjEKLSAqLwotdHlwZWRlZiBpbnQzMl90IFVfQ0FMTENPTlYKLVVDaGFySXRl
cmF0b3JHZXRJbmRleChVQ2hhckl0ZXJhdG9yICppdGVyLCBVQ2hhckl0ZXJhdG9yT3JpZ2luIG9y
aWdpbik7Ci0KLS8qKgotICogRnVuY3Rpb24gdHlwZSBkZWNsYXJhdGlvbiBmb3IgVUNoYXJJdGVy
YXRvci5tb3ZlKCkuCi0gKgotICogVXNlIGl0ZXItPm1vdmUoaXRlciwgaW5kZXgsIFVJVEVSX1pF
Uk8pIGxpa2UgQ2hhcmFjdGVySXRlcmF0b3I6OnNldEluZGV4KGluZGV4KS4KLSAqCi0gKiBNb3Zl
cyB0aGUgY3VycmVudCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb3IgbGltaXQgb2Yg
dGhlCi0gKiBpdGVyYXRpb24gcmFuZ2UsIG9yIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvc2l0
aW9uIGl0c2VsZi4KLSAqIFRoZSBtb3ZlbWVudCBpcyBleHByZXNzZWQgaW4gbnVtYmVycyBvZiBj
b2RlIHVuaXRzIGZvcndhcmQKLSAqIG9yIGJhY2t3YXJkIGJ5IHNwZWNpZnlpbmcgYSBwb3NpdGl2
ZSBvciBuZWdhdGl2ZSBkZWx0YS4KLSAqIE91dCBvZiBib3VuZHMgbW92ZW1lbnQgd2lsbCBiZSBw
aW5uZWQgdG8gdGhlIHN0YXJ0IG9yIGxpbWl0LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gbWF5IHBl
cmZvcm0gc2xvd2x5IGZvciBtb3ZpbmcgcmVsYXRpdmUgdG8gVUlURVJfTEVOR1RICi0gKiBiZWNh
dXNlIGFuIGl0ZXJhdG9yIGltcGxlbWVudGF0aW9uIG1heSBoYXZlIHRvIGNvdW50IHRoZSByZXN0
IG9mIHRoZQotICogVUNoYXJzIGlmIHRoZSBuYXRpdmUgc3RvcmFnZSBpcyBub3QgVVRGLTE2Lgot
ICoKLSAqIFdoZW4gbW92aW5nIHJlbGF0aXZlIHRvIHRoZSBsaW1pdCBvciBsZW5ndGgsIG9yCi0g
KiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwb3NpdGlvbiBhZnRlciBzZXRTdGF0ZSgpIHdhcyBj
YWxsZWQsCi0gKiBtb3ZlKCkgbWF5IHJldHVybiBVSVRFUl9VTktOT1dOX0lOREVYICgtMikgdG8g
YXZvaWQgYW4gaW5lZmZpY2llbnQKLSAqIGRldGVybWluYXRpb24gb2YgdGhlIGFjdHVhbCBVVEYt
MTYgaW5kZXguCi0gKiBUaGUgYWN0dWFsIGluZGV4IGNhbiBiZSBkZXRlcm1pbmVkIHdpdGggZ2V0
SW5kZXgoVUlURVJfQ1VSUkVOVCkKLSAqIHdoaWNoIHdpbGwgY291bnQgdGhlIFVDaGFycyBpZiBu
ZWNlc3NhcnkuCi0gKiBTZWUgVUlURVJfVU5LTk9XTl9JTkRFWCBmb3IgZGV0YWlscy4KLSAqCi0g
KiBAcGFyYW0gaXRlciB0aGUgVUNoYXJJdGVyYXRvciBzdHJ1Y3R1cmUgKCJ0aGlzIHBvaW50ZXIi
KQotICogQHBhcmFtIGRlbHRhIGNhbiBiZSBwb3NpdGl2ZSwgemVybywgb3IgbmVnYXRpdmUKLSAq
IEBwYXJhbSBvcmlnaW4gbW92ZSByZWxhdGl2ZSB0byB0aGUgMCwgc3RhcnQsIGxpbWl0LCBsZW5n
dGgsIG9yIGN1cnJlbnQgaW5kZXgKLSAqIEByZXR1cm4gdGhlIG5ldyBpbmRleCwgb3IgVV9TRU5U
SU5FTCBvbiBhbiBlcnJvciBjb25kaXRpb24sCi0gKiAgICAgICAgIG9yIFVJVEVSX1VOS05PV05f
SU5ERVggd2hlbiB0aGUgaW5kZXggaXMgbm90IGtub3duLgotICoKLSAqIEBzZWUgVUNoYXJJdGVy
YXRvck9yaWdpbgotICogQHNlZSBVQ2hhckl0ZXJhdG9yCi0gKiBAc2VlIFVJVEVSX1VOS05PV05f
SU5ERVgKLSAqIEBzdGFibGUgSUNVIDIuMQotICovCi10eXBlZGVmIGludDMyX3QgVV9DQUxMQ09O
VgotVUNoYXJJdGVyYXRvck1vdmUoVUNoYXJJdGVyYXRvciAqaXRlciwgaW50MzJfdCBkZWx0YSwg
VUNoYXJJdGVyYXRvck9yaWdpbiBvcmlnaW4pOwotCi0vKioKLSAqIEZ1bmN0aW9uIHR5cGUgZGVj
bGFyYXRpb24gZm9yIFVDaGFySXRlcmF0b3IuaGFzTmV4dCgpLgotICoKLSAqIENoZWNrIGlmIGN1
cnJlbnQoKSBhbmQgbmV4dCgpIGNhbiBzdGlsbAotICogcmV0dXJuIGFub3RoZXIgY29kZSB1bml0
LgotICoKLSAqIEBwYXJhbSBpdGVyIHRoZSBVQ2hhckl0ZXJhdG9yIHN0cnVjdHVyZSAoInRoaXMg
cG9pbnRlciIpCi0gKiBAcmV0dXJuIGJvb2xlYW4gdmFsdWUgZm9yIHdoZXRoZXIgY3VycmVudCgp
IGFuZCBuZXh0KCkgY2FuIHN0aWxsIHJldHVybiBhbm90aGVyIGNvZGUgdW5pdAotICoKLSAqIEBz
ZWUgVUNoYXJJdGVyYXRvcgotICogQHN0YWJsZSBJQ1UgMi4xCi0gKi8KLXR5cGVkZWYgVUJvb2wg
VV9DQUxMQ09OVgotVUNoYXJJdGVyYXRvckhhc05leHQoVUNoYXJJdGVyYXRvciAqaXRlcik7Ci0K
LS8qKgotICogRnVuY3Rpb24gdHlwZSBkZWNsYXJhdGlvbiBmb3IgVUNoYXJJdGVyYXRvci5oYXNQ
cmV2aW91cygpLgotICoKLSAqIENoZWNrIGlmIHByZXZpb3VzKCkgY2FuIHN0aWxsIHJldHVybiBh
bm90aGVyIGNvZGUgdW5pdC4KLSAqCi0gKiBAcGFyYW0gaXRlciB0aGUgVUNoYXJJdGVyYXRvciBz
dHJ1Y3R1cmUgKCJ0aGlzIHBvaW50ZXIiKQotICogQHJldHVybiBib29sZWFuIHZhbHVlIGZvciB3
aGV0aGVyIHByZXZpb3VzKCkgY2FuIHN0aWxsIHJldHVybiBhbm90aGVyIGNvZGUgdW5pdAotICoK
LSAqIEBzZWUgVUNoYXJJdGVyYXRvcgotICogQHN0YWJsZSBJQ1UgMi4xCi0gKi8KLXR5cGVkZWYg
VUJvb2wgVV9DQUxMQ09OVgotVUNoYXJJdGVyYXRvckhhc1ByZXZpb3VzKFVDaGFySXRlcmF0b3Ig
Kml0ZXIpOwotIAotLyoqCi0gKiBGdW5jdGlvbiB0eXBlIGRlY2xhcmF0aW9uIGZvciBVQ2hhckl0
ZXJhdG9yLmN1cnJlbnQoKS4KLSAqCi0gKiBSZXR1cm4gdGhlIGNvZGUgdW5pdCBhdCB0aGUgY3Vy
cmVudCBwb3NpdGlvbiwKLSAqIG9yIFVfU0VOVElORUwgaWYgdGhlcmUgaXMgbm9uZSAoaW5kZXgg
aXMgYXQgdGhlIGxpbWl0KS4KLSAqCi0gKiBAcGFyYW0gaXRlciB0aGUgVUNoYXJJdGVyYXRvciBz
dHJ1Y3R1cmUgKCJ0aGlzIHBvaW50ZXIiKQotICogQHJldHVybiB0aGUgY3VycmVudCBjb2RlIHVu
aXQKLSAqCi0gKiBAc2VlIFVDaGFySXRlcmF0b3IKLSAqIEBzdGFibGUgSUNVIDIuMQotICovCi10
eXBlZGVmIFVDaGFyMzIgVV9DQUxMQ09OVgotVUNoYXJJdGVyYXRvckN1cnJlbnQoVUNoYXJJdGVy
YXRvciAqaXRlcik7Ci0KLS8qKgotICogRnVuY3Rpb24gdHlwZSBkZWNsYXJhdGlvbiBmb3IgVUNo
YXJJdGVyYXRvci5uZXh0KCkuCi0gKgotICogUmV0dXJuIHRoZSBjb2RlIHVuaXQgYXQgdGhlIGN1
cnJlbnQgaW5kZXggYW5kIGluY3JlbWVudAotICogdGhlIGluZGV4IChwb3N0LWluY3JlbWVudCwg
bGlrZSBzW2krK10pLAotICogb3IgcmV0dXJuIFVfU0VOVElORUwgaWYgdGhlcmUgaXMgbm9uZSAo
aW5kZXggaXMgYXQgdGhlIGxpbWl0KS4KLSAqCi0gKiBAcGFyYW0gaXRlciB0aGUgVUNoYXJJdGVy
YXRvciBzdHJ1Y3R1cmUgKCJ0aGlzIHBvaW50ZXIiKQotICogQHJldHVybiB0aGUgY3VycmVudCBj
b2RlIHVuaXQgKGFuZCBwb3N0LWluY3JlbWVudCB0aGUgY3VycmVudCBpbmRleCkKLSAqCi0gKiBA
c2VlIFVDaGFySXRlcmF0b3IKLSAqIEBzdGFibGUgSUNVIDIuMQotICovCi10eXBlZGVmIFVDaGFy
MzIgVV9DQUxMQ09OVgotVUNoYXJJdGVyYXRvck5leHQoVUNoYXJJdGVyYXRvciAqaXRlcik7Ci0K
LS8qKgotICogRnVuY3Rpb24gdHlwZSBkZWNsYXJhdGlvbiBmb3IgVUNoYXJJdGVyYXRvci5wcmV2
aW91cygpLgotICoKLSAqIERlY3JlbWVudCB0aGUgaW5kZXggYW5kIHJldHVybiB0aGUgY29kZSB1
bml0IGZyb20gdGhlcmUKLSAqIChwcmUtZGVjcmVtZW50LCBsaWtlIHNbLS1pXSksCi0gKiBvciBy
ZXR1cm4gVV9TRU5USU5FTCBpZiB0aGVyZSBpcyBub25lIChpbmRleCBpcyBhdCB0aGUgc3RhcnQp
LgotICoKLSAqIEBwYXJhbSBpdGVyIHRoZSBVQ2hhckl0ZXJhdG9yIHN0cnVjdHVyZSAoInRoaXMg
cG9pbnRlciIpCi0gKiBAcmV0dXJuIHRoZSBwcmV2aW91cyBjb2RlIHVuaXQgKGFmdGVyIHByZS1k
ZWNyZW1lbnRpbmcgdGhlIGN1cnJlbnQgaW5kZXgpCi0gKgotICogQHNlZSBVQ2hhckl0ZXJhdG9y
Ci0gKiBAc3RhYmxlIElDVSAyLjEKLSAqLwotdHlwZWRlZiBVQ2hhcjMyIFVfQ0FMTENPTlYKLVVD
aGFySXRlcmF0b3JQcmV2aW91cyhVQ2hhckl0ZXJhdG9yICppdGVyKTsKLQotLyoqCi0gKiBGdW5j
dGlvbiB0eXBlIGRlY2xhcmF0aW9uIGZvciBVQ2hhckl0ZXJhdG9yLnJlc2VydmVkRm4oKS4KLSAq
IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgotICoKLSAqIEBwYXJhbSBpdGVyIHRoZSBVQ2hhckl0
ZXJhdG9yIHN0cnVjdHVyZSAoInRoaXMgcG9pbnRlciIpCi0gKiBAcGFyYW0gc29tZXRoaW5nIHNv
bWUgaW50ZWdlciBhcmd1bWVudAotICogQHJldHVybiBzb21lIGludGVnZXIKLSAqCi0gKiBAc2Vl
IFVDaGFySXRlcmF0b3IKLSAqIEBzdGFibGUgSUNVIDIuMQotICovCi10eXBlZGVmIGludDMyX3Qg
VV9DQUxMQ09OVgotVUNoYXJJdGVyYXRvclJlc2VydmVkKFVDaGFySXRlcmF0b3IgKml0ZXIsIGlu
dDMyX3Qgc29tZXRoaW5nKTsKLQotLyoqCi0gKiBGdW5jdGlvbiB0eXBlIGRlY2xhcmF0aW9uIGZv
ciBVQ2hhckl0ZXJhdG9yLmdldFN0YXRlKCkuCi0gKgotICogR2V0IHRoZSAic3RhdGUiIG9mIHRo
ZSBpdGVyYXRvciBpbiB0aGUgZm9ybSBvZiBhIHNpbmdsZSAzMi1iaXQgd29yZC4KLSAqIEl0IGlz
IHJlY29tbWVuZGVkIHRoYXQgdGhlIHN0YXRlIHZhbHVlIGJlIGNhbGN1bGF0ZWQgdG8gYmUgYXMg
c21hbGwgYXMKLSAqIGlzIGZlYXNpYmxlLiBGb3Igc3RyaW5ncyB3aXRoIGxpbWl0ZWQgbGVuZ3Ro
cywgZmV3ZXIgdGhhbiAzMiBiaXRzIG1heQotICogYmUgc3VmZmljaWVudC4KLSAqCi0gKiBUaGlz
IGlzIHVzZWQgdG9nZXRoZXIgd2l0aCBzZXRTdGF0ZSgpL1VDaGFySXRlcmF0b3JTZXRTdGF0ZQot
ICogdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgaXRlcmF0b3IgcG9zaXRpb24gbW9yZSBlZmZpY2ll
bnRseSB0aGFuIHdpdGgKLSAqIGdldEluZGV4KCkvbW92ZSgpLgotICoKLSAqIFRoZSBpdGVyYXRv
ciBzdGF0ZSBpcyBkZWZpbmVkIGFzIGEgdWludDMyX3QgdmFsdWUgYmVjYXVzZSBpdCBpcyBkZXNp
Z25lZAotICogZm9yIHVzZSBpbiB1Y29sX25leHRTb3J0S2V5UGFydCgpIHdoaWNoIHByb3ZpZGVz
IDMyIGJpdHMgdG8gc3RvcmUgdGhlIHN0YXRlCi0gKiBvZiB0aGUgY2hhcmFjdGVyIGl0ZXJhdG9y
LgotICoKLSAqIFdpdGggc29tZSBVQ2hhckl0ZXJhdG9yIGltcGxlbWVudGF0aW9ucyAoZS5nLiwg
VVRGLTgpLAotICogZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgVVRGLTE2IGluZGV4IHdpdGggZXhp
c3RpbmcgZnVuY3Rpb25zCi0gKiAoZ2V0SW5kZXgoVUlURVJfQ1VSUkVOVCkgZm9sbG93ZWQgYnkg
bW92ZShwb3MsIFVJVEVSX1pFUk8pKSBpcyBwb3NzaWJsZSBidXQKLSAqIHJlbGF0aXZlbHkgc2xv
dyBiZWNhdXNlIHRoZSBpdGVyYXRvciBoYXMgdG8gIndhbGsiIGZyb20gYSBrbm93biBpbmRleAot
ICogdG8gdGhlIHJlcXVlc3RlZCBvbmUuCi0gKiBUaGlzIHRha2VzIG1vcmUgdGltZSB0aGUgZmFy
dGhlciBpdCBuZWVkcyB0byBnby4KLSAqCi0gKiBBbiBvcGFxdWUgc3RhdGUgdmFsdWUgYWxsb3dz
IGFuIGl0ZXJhdG9yIGltcGxlbWVudGF0aW9uIHRvIHByb3ZpZGUKLSAqIGFuIGludGVybmFsIGlu
ZGV4IChVVEYtODogdGhlIHNvdXJjZSBieXRlIGFycmF5IGluZGV4KSBmb3IKLSAqIGZhc3QsIGNv
bnN0YW50LXRpbWUgcmVzdG9yYXRpb24uCi0gKgotICogQWZ0ZXIgY2FsbGluZyBzZXRTdGF0ZSgp
LCBhIGdldEluZGV4KFVJVEVSX0NVUlJFTlQpIG1heSBiZSBzbG93IGJlY2F1c2UKLSAqIHRoZSBV
VEYtMTYgaW5kZXggbWF5IG5vdCBiZSByZXN0b3JlZCBhcyB3ZWxsLCBidXQgdGhlIGl0ZXJhdG9y
IGNhbiBkZWxpdmVyCi0gKiB0aGUgY29ycmVjdCB0ZXh0IGNvbnRlbnRzIGFuZCBtb3ZlIHJlbGF0
aXZlIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uCi0gKiB3aXRob3V0IHBlcmZvcm1hbmNlIGRlZ3Jh
ZGF0aW9uLgotICoKLSAqIFNvbWUgVUNoYXJJdGVyYXRvciBpbXBsZW1lbnRhdGlvbnMgbWF5IG5v
dCBiZSBhYmxlIHRvIHJldHVybgotICogYSB2YWxpZCBzdGF0ZSBmb3IgZWFjaCBwb3NpdGlvbiwg
aW4gd2hpY2ggY2FzZSB0aGV5IHJldHVybiBVSVRFUl9OT19TVEFURSBpbnN0ZWFkLgotICogVGhp
cyB3aWxsIGJlIGNsZWFybHkgZG9jdW1lbnRlZCBmb3IgZWFjaCBzdWNoIGl0ZXJhdG9yIChub25l
IG9mIHRoZSBwdWJsaWMgb25lcyBoZXJlKS4KLSAqCi0gKiBAcGFyYW0gaXRlciB0aGUgVUNoYXJJ
dGVyYXRvciBzdHJ1Y3R1cmUgKCJ0aGlzIHBvaW50ZXIiKQotICogQHJldHVybiB0aGUgc3RhdGUg
d29yZAotICoKLSAqIEBzZWUgVUNoYXJJdGVyYXRvcgotICogQHNlZSBVQ2hhckl0ZXJhdG9yU2V0
U3RhdGUKLSAqIEBzZWUgVUlURVJfTk9fU1RBVEUKLSAqIEBzdGFibGUgSUNVIDIuNgotICovCi10
eXBlZGVmIHVpbnQzMl90IFVfQ0FMTENPTlYKLVVDaGFySXRlcmF0b3JHZXRTdGF0ZShjb25zdCBV
Q2hhckl0ZXJhdG9yICppdGVyKTsKLQotLyoqCi0gKiBGdW5jdGlvbiB0eXBlIGRlY2xhcmF0aW9u
IGZvciBVQ2hhckl0ZXJhdG9yLnNldFN0YXRlKCkuCi0gKgotICogUmVzdG9yZSB0aGUgInN0YXRl
IiBvZiB0aGUgaXRlcmF0b3IgdXNpbmcgYSBzdGF0ZSB3b3JkIGZyb20gYSBnZXRTdGF0ZSgpIGNh
bGwuCi0gKiBUaGUgaXRlcmF0b3Igb2JqZWN0IG5lZWQgbm90IGJlIHRoZSBzYW1lIG9uZSBhcyBm
b3Igd2hpY2ggZ2V0U3RhdGUoKSB3YXMgY2FsbGVkLAotICogYnV0IGl0IG11c3QgYmUgb2YgdGhl
IHNhbWUgdHlwZSAoc2V0IHVwIHVzaW5nIHRoZSBzYW1lIHVpdGVyX3NldFhZWiBmdW5jdGlvbikK
LSAqIGFuZCBpdCBtdXN0IGl0ZXJhdGUgb3ZlciB0aGUgc2FtZSBzdHJpbmcKLSAqIChiaW5hcnkg
aWRlbnRpY2FsIHJlZ2FyZGxlc3Mgb2YgbWVtb3J5IGFkZHJlc3MpLgotICogRm9yIG1vcmUgYWJv
dXQgdGhlIHN0YXRlIHdvcmQgc2VlIFVDaGFySXRlcmF0b3JHZXRTdGF0ZS4KLSAqCi0gKiBBZnRl
ciBjYWxsaW5nIHNldFN0YXRlKCksIGEgZ2V0SW5kZXgoVUlURVJfQ1VSUkVOVCkgbWF5IGJlIHNs
b3cgYmVjYXVzZQotICogdGhlIFVURi0xNiBpbmRleCBtYXkgbm90IGJlIHJlc3RvcmVkIGFzIHdl
bGwsIGJ1dCB0aGUgaXRlcmF0b3IgY2FuIGRlbGl2ZXIKLSAqIHRoZSBjb3JyZWN0IHRleHQgY29u
dGVudHMgYW5kIG1vdmUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24KLSAqIHdpdGhv
dXQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uCi0gKgotICogQHBhcmFtIGl0ZXIgdGhlIFVDaGFy
SXRlcmF0b3Igc3RydWN0dXJlICgidGhpcyBwb2ludGVyIikKLSAqIEBwYXJhbSBzdGF0ZSB0aGUg
c3RhdGUgd29yZCBmcm9tIGEgZ2V0U3RhdGUoKSBjYWxsCi0gKiAgICAgICAgICAgICAgb24gYSBz
YW1lLXR5cGUsIHNhbWUtc3RyaW5nIGl0ZXJhdG9yCi0gKiBAcGFyYW0gcEVycm9yQ29kZSBNdXN0
IGJlIGEgdmFsaWQgcG9pbnRlciB0byBhbiBlcnJvciBjb2RlIHZhbHVlLAotICogICAgICAgICAg
ICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5kaWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUgZnVu
Y3Rpb24gY2FsbC4KLSAqCi0gKiBAc2VlIFVDaGFySXRlcmF0b3IKLSAqIEBzZWUgVUNoYXJJdGVy
YXRvckdldFN0YXRlCi0gKiBAc3RhYmxlIElDVSAyLjYKLSAqLwotdHlwZWRlZiB2b2lkIFVfQ0FM
TENPTlYKLVVDaGFySXRlcmF0b3JTZXRTdGF0ZShVQ2hhckl0ZXJhdG9yICppdGVyLCB1aW50MzJf
dCBzdGF0ZSwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7Ci0KLQotLyoqCi0gKiBDIEFQSSBmb3Ig
Y29kZSB1bml0IGl0ZXJhdGlvbi4KLSAqIFRoaXMgY2FuIGJlIHVzZWQgYXMgYSBDIHdyYXBwZXIg
YXJvdW5kCi0gKiBDaGFyYWN0ZXJJdGVyYXRvciwgUmVwbGFjZWFibGUsIG9yIGltcGxlbWVudGVk
IHVzaW5nIHNpbXBsZSBzdHJpbmdzLCBldGMuCi0gKgotICogVGhlcmUgYXJlIHR3byByb2xlcyBm
b3IgdXNpbmcgVUNoYXJJdGVyYXRvcjoKLSAqCi0gKiBBICJwcm92aWRlciIgc2V0cyB0aGUgbmVj
ZXNzYXJ5IGZ1bmN0aW9uIHBvaW50ZXJzIGFuZCBjb250cm9scyB0aGUgInByb3RlY3RlZCIKLSAq
IGZpZWxkcyBvZiB0aGUgVUNoYXJJdGVyYXRvciBzdHJ1Y3R1cmUuIEEgInByb3ZpZGVyIiBwYXNz
ZXMgYSBVQ2hhckl0ZXJhdG9yCi0gKiBpbnRvIEMgQVBJcyB0aGF0IG5lZWQgYSBVQ2hhckl0ZXJh
dG9yIGFzIGFuIGFic3RyYWN0LCBmbGV4aWJsZSBzdHJpbmcgaW50ZXJmYWNlLgotICoKLSAqIElt
cGxlbWVudGF0aW9ucyBvZiBzdWNoIEMgQVBJcyBhcmUgImNhbGxlcnMiIG9mIFVDaGFySXRlcmF0
b3IgZnVuY3Rpb25zOwotICogdGhleSBvbmx5IHVzZSB0aGUgInB1YmxpYyIgZnVuY3Rpb24gcG9p
bnRlcnMgYW5kIG5ldmVyIGFjY2VzcyB0aGUgInByb3RlY3RlZCIKLSAqIGZpZWxkcyBkaXJlY3Rs
eS4KLSAqCi0gKiBUaGUgY3VycmVudCgpIGFuZCBuZXh0KCkgZnVuY3Rpb25zIG9ubHkgY2hlY2sg
dGhlIGN1cnJlbnQgaW5kZXggYWdhaW5zdCB0aGUKLSAqIGxpbWl0LCBhbmQgcHJldmlvdXMoKSBv
bmx5IGNoZWNrcyB0aGUgY3VycmVudCBpbmRleCBhZ2FpbnN0IHRoZSBzdGFydCwKLSAqIHRvIHNl
ZSBpZiB0aGUgaXRlcmF0b3IgYWxyZWFkeSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGl0ZXJhdGlv
biByYW5nZS4KLSAqCi0gKiBUaGUgYXNzdW1wdGlvbiAtIGluIGFsbCBpdGVyYXRvcnMgLSBpcyB0
aGF0IHRoZSBpbmRleCBpcyBtb3ZlZCB2aWEgdGhlIEFQSSwKLSAqIHdoaWNoIG1lYW5zIGl0IHdv
bid0IGdvIG91dCBvZiBib3VuZHMsIG9yIHRoZSBpbmRleCBpcyBtb2RpZmllZCBieQotICogdXNl
ciBjb2RlIHRoYXQga25vd3MgZW5vdWdoIGFib3V0IHRoZSBpdGVyYXRvciBpbXBsZW1lbnRhdGlv
biB0byBzZXQgdmFsaWQKLSAqIGluZGV4IHZhbHVlcy4KLSAqCi0gKiBVQ2hhckl0ZXJhdG9yIGZ1
bmN0aW9ucyByZXR1cm4gY29kZSB1bml0IHZhbHVlcyAwLi4weGZmZmYsCi0gKiBvciBVX1NFTlRJ
TkVMIGlmIHRoZSBpdGVyYXRpb24gYm91bmRzIGFyZSByZWFjaGVkLgotICoKLSAqIEBzdGFibGUg
SUNVIDIuMQotICovCi1zdHJ1Y3QgVUNoYXJJdGVyYXRvciB7Ci0gICAgLyoqCi0gICAgICogKHBy
b3RlY3RlZCkgUG9pbnRlciB0byBzdHJpbmcgb3Igd3JhcHBlZCBvYmplY3Qgb3Igc2ltaWxhci4K
LSAgICAgKiBOb3QgdXNlZCBieSBjYWxsZXIuCi0gICAgICogQHN0YWJsZSBJQ1UgMi4xCi0gICAg
ICovCi0gICAgY29uc3Qgdm9pZCAqY29udGV4dDsKLQotICAgIC8qKgotICAgICAqIChwcm90ZWN0
ZWQpIExlbmd0aCBvZiBzdHJpbmcgb3Igc2ltaWxhci4KLSAgICAgKiBOb3QgdXNlZCBieSBjYWxs
ZXIuCi0gICAgICogQHN0YWJsZSBJQ1UgMi4xCi0gICAgICovCi0gICAgaW50MzJfdCBsZW5ndGg7
Ci0KLSAgICAvKioKLSAgICAgKiAocHJvdGVjdGVkKSBTdGFydCBpbmRleCBvciBzaW1pbGFyLgot
ICAgICAqIE5vdCB1c2VkIGJ5IGNhbGxlci4KLSAgICAgKiBAc3RhYmxlIElDVSAyLjEKLSAgICAg
Ki8KLSAgICBpbnQzMl90IHN0YXJ0OwotCi0gICAgLyoqCi0gICAgICogKHByb3RlY3RlZCkgQ3Vy
cmVudCBpbmRleCBvciBzaW1pbGFyLgotICAgICAqIE5vdCB1c2VkIGJ5IGNhbGxlci4KLSAgICAg
KiBAc3RhYmxlIElDVSAyLjEKLSAgICAgKi8KLSAgICBpbnQzMl90IGluZGV4OwotCi0gICAgLyoq
Ci0gICAgICogKHByb3RlY3RlZCkgTGltaXQgaW5kZXggb3Igc2ltaWxhci4KLSAgICAgKiBOb3Qg
dXNlZCBieSBjYWxsZXIuCi0gICAgICogQHN0YWJsZSBJQ1UgMi4xCi0gICAgICovCi0gICAgaW50
MzJfdCBsaW1pdDsKLQotICAgIC8qKgotICAgICAqIChwcm90ZWN0ZWQpIFVzZWQgYnkgVVRGLTgg
aXRlcmF0b3JzIGFuZCBwb3NzaWJseSBvdGhlcnMuCi0gICAgICogQHN0YWJsZSBJQ1UgMi4xCi0g
ICAgICovCi0gICAgaW50MzJfdCByZXNlcnZlZEZpZWxkOwotCi0gICAgLyoqCi0gICAgICogKHB1
YmxpYykgUmV0dXJucyB0aGUgY3VycmVudCBwb3NpdGlvbiBvciB0aGUKLSAgICAgKiBzdGFydCBv
ciBsaW1pdCBpbmRleCBvZiB0aGUgaXRlcmF0aW9uIHJhbmdlLgotICAgICAqCi0gICAgICogQHNl
ZSBVQ2hhckl0ZXJhdG9yR2V0SW5kZXgKLSAgICAgKiBAc3RhYmxlIElDVSAyLjEKLSAgICAgKi8K
LSAgICBVQ2hhckl0ZXJhdG9yR2V0SW5kZXggKmdldEluZGV4OwotCi0gICAgLyoqCi0gICAgICog
KHB1YmxpYykgTW92ZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0
IG9yIGxpbWl0IG9mIHRoZQotICAgICAqIGl0ZXJhdGlvbiByYW5nZSwgb3IgcmVsYXRpdmUgdG8g
dGhlIGN1cnJlbnQgcG9zaXRpb24gaXRzZWxmLgotICAgICAqIFRoZSBtb3ZlbWVudCBpcyBleHBy
ZXNzZWQgaW4gbnVtYmVycyBvZiBjb2RlIHVuaXRzIGZvcndhcmQKLSAgICAgKiBvciBiYWNrd2Fy
ZCBieSBzcGVjaWZ5aW5nIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgZGVsdGEuCi0gICAgICoKLSAg
ICAgKiBAc2VlIFVDaGFySXRlcmF0b3JNb3ZlCi0gICAgICogQHN0YWJsZSBJQ1UgMi4xCi0gICAg
ICovCi0gICAgVUNoYXJJdGVyYXRvck1vdmUgKm1vdmU7Ci0KLSAgICAvKioKLSAgICAgKiAocHVi
bGljKSBDaGVjayBpZiBjdXJyZW50KCkgYW5kIG5leHQoKSBjYW4gc3RpbGwKLSAgICAgKiByZXR1
cm4gYW5vdGhlciBjb2RlIHVuaXQuCi0gICAgICoKLSAgICAgKiBAc2VlIFVDaGFySXRlcmF0b3JI
YXNOZXh0Ci0gICAgICogQHN0YWJsZSBJQ1UgMi4xCi0gICAgICovCi0gICAgVUNoYXJJdGVyYXRv
ckhhc05leHQgKmhhc05leHQ7Ci0KLSAgICAvKioKLSAgICAgKiAocHVibGljKSBDaGVjayBpZiBw
cmV2aW91cygpIGNhbiBzdGlsbCByZXR1cm4gYW5vdGhlciBjb2RlIHVuaXQuCi0gICAgICoKLSAg
ICAgKiBAc2VlIFVDaGFySXRlcmF0b3JIYXNQcmV2aW91cwotICAgICAqIEBzdGFibGUgSUNVIDIu
MQotICAgICAqLwotICAgIFVDaGFySXRlcmF0b3JIYXNQcmV2aW91cyAqaGFzUHJldmlvdXM7Ci0K
LSAgICAvKioKLSAgICAgKiAocHVibGljKSBSZXR1cm4gdGhlIGNvZGUgdW5pdCBhdCB0aGUgY3Vy
cmVudCBwb3NpdGlvbiwKLSAgICAgKiBvciBVX1NFTlRJTkVMIGlmIHRoZXJlIGlzIG5vbmUgKGlu
ZGV4IGlzIGF0IHRoZSBsaW1pdCkuCi0gICAgICoKLSAgICAgKiBAc2VlIFVDaGFySXRlcmF0b3JD
dXJyZW50Ci0gICAgICogQHN0YWJsZSBJQ1UgMi4xCi0gICAgICovCi0gICAgVUNoYXJJdGVyYXRv
ckN1cnJlbnQgKmN1cnJlbnQ7Ci0KLSAgICAvKioKLSAgICAgKiAocHVibGljKSBSZXR1cm4gdGhl
IGNvZGUgdW5pdCBhdCB0aGUgY3VycmVudCBpbmRleCBhbmQgaW5jcmVtZW50Ci0gICAgICogdGhl
IGluZGV4IChwb3N0LWluY3JlbWVudCwgbGlrZSBzW2krK10pLAotICAgICAqIG9yIHJldHVybiBV
X1NFTlRJTkVMIGlmIHRoZXJlIGlzIG5vbmUgKGluZGV4IGlzIGF0IHRoZSBsaW1pdCkuCi0gICAg
ICoKLSAgICAgKiBAc2VlIFVDaGFySXRlcmF0b3JOZXh0Ci0gICAgICogQHN0YWJsZSBJQ1UgMi4x
Ci0gICAgICovCi0gICAgVUNoYXJJdGVyYXRvck5leHQgKm5leHQ7Ci0KLSAgICAvKioKLSAgICAg
KiAocHVibGljKSBEZWNyZW1lbnQgdGhlIGluZGV4IGFuZCByZXR1cm4gdGhlIGNvZGUgdW5pdCBm
cm9tIHRoZXJlCi0gICAgICogKHByZS1kZWNyZW1lbnQsIGxpa2Ugc1stLWldKSwKLSAgICAgKiBv
ciByZXR1cm4gVV9TRU5USU5FTCBpZiB0aGVyZSBpcyBub25lIChpbmRleCBpcyBhdCB0aGUgc3Rh
cnQpLgotICAgICAqCi0gICAgICogQHNlZSBVQ2hhckl0ZXJhdG9yUHJldmlvdXMKLSAgICAgKiBA
c3RhYmxlIElDVSAyLjEKLSAgICAgKi8KLSAgICBVQ2hhckl0ZXJhdG9yUHJldmlvdXMgKnByZXZp
b3VzOwotCi0gICAgLyoqCi0gICAgICogKHB1YmxpYykgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Uu
IEN1cnJlbnRseSBOVUxMLgotICAgICAqCi0gICAgICogQHNlZSBVQ2hhckl0ZXJhdG9yUmVzZXJ2
ZWQKLSAgICAgKiBAc3RhYmxlIElDVSAyLjEKLSAgICAgKi8KLSAgICBVQ2hhckl0ZXJhdG9yUmVz
ZXJ2ZWQgKnJlc2VydmVkRm47Ci0KLSAgICAvKioKLSAgICAgKiAocHVibGljKSBSZXR1cm4gdGhl
IHN0YXRlIG9mIHRoZSBpdGVyYXRvciwgdG8gYmUgcmVzdG9yZWQgbGF0ZXIgd2l0aCBzZXRTdGF0
ZSgpLgotICAgICAqIFRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBOVUxMIGlmIHRoZSBpdGVyYXRv
ciBkb2VzIG5vdCBpbXBsZW1lbnQgaXQuCi0gICAgICoKLSAgICAgKiBAc2VlIFVDaGFySXRlcmF0
b3JHZXQKLSAgICAgKiBAc3RhYmxlIElDVSAyLjYKLSAgICAgKi8KLSAgICBVQ2hhckl0ZXJhdG9y
R2V0U3RhdGUgKmdldFN0YXRlOwotCi0gICAgLyoqCi0gICAgICogKHB1YmxpYykgUmVzdG9yZSB0
aGUgaXRlcmF0b3Igc3RhdGUgZnJvbSB0aGUgc3RhdGUgd29yZCBmcm9tIGEgY2FsbAotICAgICAq
IHRvIGdldFN0YXRlKCkuCi0gICAgICogVGhpcyBmdW5jdGlvbiBwb2ludGVyIGlzIE5VTEwgaWYg
dGhlIGl0ZXJhdG9yIGRvZXMgbm90IGltcGxlbWVudCBpdC4KLSAgICAgKgotICAgICAqIEBzZWUg
VUNoYXJJdGVyYXRvclNldAotICAgICAqIEBzdGFibGUgSUNVIDIuNgotICAgICAqLwotICAgIFVD
aGFySXRlcmF0b3JTZXRTdGF0ZSAqc2V0U3RhdGU7Ci19OwotCi0vKioKLSAqIEhlbHBlciBmdW5j
dGlvbiBmb3IgVUNoYXJJdGVyYXRvciB0byBnZXQgdGhlIGNvZGUgcG9pbnQKLSAqIGF0IHRoZSBj
dXJyZW50IGluZGV4LgotICoKLSAqIFJldHVybiB0aGUgY29kZSBwb2ludCB0aGF0IGluY2x1ZGVz
IHRoZSBjb2RlIHVuaXQgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sCi0gKiBvciBVX1NFTlRJTkVM
IGlmIHRoZXJlIGlzIG5vbmUgKGluZGV4IGlzIGF0IHRoZSBsaW1pdCkuCi0gKiBJZiB0aGUgY3Vy
cmVudCBjb2RlIHVuaXQgaXMgYSBsZWFkIG9yIHRyYWlsIHN1cnJvZ2F0ZSwKLSAqIHRoZW4gdGhl
IGZvbGxvd2luZyBvciBwcmVjZWRpbmcgc3Vycm9nYXRlIGlzIHVzZWQgdG8gZm9ybQotICogdGhl
IGNvZGUgcG9pbnQgdmFsdWUuCi0gKgotICogQHBhcmFtIGl0ZXIgdGhlIFVDaGFySXRlcmF0b3Ig
c3RydWN0dXJlICgidGhpcyBwb2ludGVyIikKLSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgY29kZSBw
b2ludAotICoKLSAqIEBzZWUgVUNoYXJJdGVyYXRvcgotICogQHNlZSBVMTZfR0VUCi0gKiBAc2Vl
IFVuaWNvZGVTdHJpbmc6OmNoYXIzMkF0KCkKLSAqIEBzdGFibGUgSUNVIDIuMQotICovCi1VX1NU
QUJMRSBVQ2hhcjMyIFVfRVhQT1JUMgotdWl0ZXJfY3VycmVudDMyKFVDaGFySXRlcmF0b3IgKml0
ZXIpOwotCi0vKioKLSAqIEhlbHBlciBmdW5jdGlvbiBmb3IgVUNoYXJJdGVyYXRvciB0byBnZXQg
dGhlIG5leHQgY29kZSBwb2ludC4KLSAqCi0gKiBSZXR1cm4gdGhlIGNvZGUgcG9pbnQgYXQgdGhl
IGN1cnJlbnQgaW5kZXggYW5kIGluY3JlbWVudAotICogdGhlIGluZGV4IChwb3N0LWluY3JlbWVu
dCwgbGlrZSBzW2krK10pLAotICogb3IgcmV0dXJuIFVfU0VOVElORUwgaWYgdGhlcmUgaXMgbm9u
ZSAoaW5kZXggaXMgYXQgdGhlIGxpbWl0KS4KLSAqCi0gKiBAcGFyYW0gaXRlciB0aGUgVUNoYXJJ
dGVyYXRvciBzdHJ1Y3R1cmUgKCJ0aGlzIHBvaW50ZXIiKQotICogQHJldHVybiB0aGUgY3VycmVu
dCBjb2RlIHBvaW50IChhbmQgcG9zdC1pbmNyZW1lbnQgdGhlIGN1cnJlbnQgaW5kZXgpCi0gKgot
ICogQHNlZSBVQ2hhckl0ZXJhdG9yCi0gKiBAc2VlIFUxNl9ORVhUCi0gKiBAc3RhYmxlIElDVSAy
LjEKLSAqLwotVV9TVEFCTEUgVUNoYXIzMiBVX0VYUE9SVDIKLXVpdGVyX25leHQzMihVQ2hhckl0
ZXJhdG9yICppdGVyKTsKLQotLyoqCi0gKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFVDaGFySXRlcmF0
b3IgdG8gZ2V0IHRoZSBwcmV2aW91cyBjb2RlIHBvaW50LgotICoKLSAqIERlY3JlbWVudCB0aGUg
aW5kZXggYW5kIHJldHVybiB0aGUgY29kZSBwb2ludCBmcm9tIHRoZXJlCi0gKiAocHJlLWRlY3Jl
bWVudCwgbGlrZSBzWy0taV0pLAotICogb3IgcmV0dXJuIFVfU0VOVElORUwgaWYgdGhlcmUgaXMg
bm9uZSAoaW5kZXggaXMgYXQgdGhlIHN0YXJ0KS4KLSAqCi0gKiBAcGFyYW0gaXRlciB0aGUgVUNo
YXJJdGVyYXRvciBzdHJ1Y3R1cmUgKCJ0aGlzIHBvaW50ZXIiKQotICogQHJldHVybiB0aGUgcHJl
dmlvdXMgY29kZSBwb2ludCAoYWZ0ZXIgcHJlLWRlY3JlbWVudGluZyB0aGUgY3VycmVudCBpbmRl
eCkKLSAqCi0gKiBAc2VlIFVDaGFySXRlcmF0b3IKLSAqIEBzZWUgVTE2X1BSRVYKLSAqIEBzdGFi
bGUgSUNVIDIuMQotICovCi1VX1NUQUJMRSBVQ2hhcjMyIFVfRVhQT1JUMgotdWl0ZXJfcHJldmlv
dXMzMihVQ2hhckl0ZXJhdG9yICppdGVyKTsKLQotLyoqCi0gKiBHZXQgdGhlICJzdGF0ZSIgb2Yg
dGhlIGl0ZXJhdG9yIGluIHRoZSBmb3JtIG9mIGEgc2luZ2xlIDMyLWJpdCB3b3JkLgotICogVGhp
cyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgaXRlci0+Z2V0U3RhdGUoaXRl
cikKLSAqIGlmIGl0ZXItPmdldFN0YXRlIGlzIG5vdCBOVUxMOwotICogaWYgaXQgaXMgTlVMTCBv
ciBhbnkgb3RoZXIgZXJyb3Igb2NjdXJzLCB0aGVuIFVJVEVSX05PX1NUQVRFIGlzIHJldHVybmVk
LgotICoKLSAqIFNvbWUgVUNoYXJJdGVyYXRvciBpbXBsZW1lbnRhdGlvbnMgbWF5IG5vdCBiZSBh
YmxlIHRvIHJldHVybgotICogYSB2YWxpZCBzdGF0ZSBmb3IgZWFjaCBwb3NpdGlvbiwgaW4gd2hp
Y2ggY2FzZSB0aGV5IHJldHVybiBVSVRFUl9OT19TVEFURSBpbnN0ZWFkLgotICogVGhpcyB3aWxs
IGJlIGNsZWFybHkgZG9jdW1lbnRlZCBmb3IgZWFjaCBzdWNoIGl0ZXJhdG9yIChub25lIG9mIHRo
ZSBwdWJsaWMgb25lcyBoZXJlKS4KLSAqCi0gKiBAcGFyYW0gaXRlciB0aGUgVUNoYXJJdGVyYXRv
ciBzdHJ1Y3R1cmUgKCJ0aGlzIHBvaW50ZXIiKQotICogQHJldHVybiB0aGUgc3RhdGUgd29yZAot
ICoKLSAqIEBzZWUgVUNoYXJJdGVyYXRvcgotICogQHNlZSBVQ2hhckl0ZXJhdG9yR2V0U3RhdGUK
LSAqIEBzZWUgVUlURVJfTk9fU1RBVEUKLSAqIEBzdGFibGUgSUNVIDIuNgotICovCi1VX1NUQUJM
RSB1aW50MzJfdCBVX0VYUE9SVDIKLXVpdGVyX2dldFN0YXRlKGNvbnN0IFVDaGFySXRlcmF0b3Ig
Kml0ZXIpOwotCi0vKioKLSAqIFJlc3RvcmUgdGhlICJzdGF0ZSIgb2YgdGhlIGl0ZXJhdG9yIHVz
aW5nIGEgc3RhdGUgd29yZCBmcm9tIGEgZ2V0U3RhdGUoKSBjYWxsLgotICogVGhpcyBpcyBhIGNv
bnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgaXRlci0+c2V0U3RhdGUoaXRlciwgc3RhdGUs
IHBFcnJvckNvZGUpCi0gKiBpZiBpdGVyLT5zZXRTdGF0ZSBpcyBub3QgTlVMTDsgaWYgaXQgaXMg
TlVMTCwgdGhlbiBVX1VOU1VQUE9SVEVEX0VSUk9SIGlzIHNldC4KLSAqCi0gKiBAcGFyYW0gaXRl
ciB0aGUgVUNoYXJJdGVyYXRvciBzdHJ1Y3R1cmUgKCJ0aGlzIHBvaW50ZXIiKQotICogQHBhcmFt
IHN0YXRlIHRoZSBzdGF0ZSB3b3JkIGZyb20gYSBnZXRTdGF0ZSgpIGNhbGwKLSAqICAgICAgICAg
ICAgICBvbiBhIHNhbWUtdHlwZSwgc2FtZS1zdHJpbmcgaXRlcmF0b3IKLSAqIEBwYXJhbSBwRXJy
b3JDb2RlIE11c3QgYmUgYSB2YWxpZCBwb2ludGVyIHRvIGFuIGVycm9yIGNvZGUgdmFsdWUsCi0g
KiAgICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVm
b3JlIHRoZSBmdW5jdGlvbiBjYWxsLgotICoKLSAqIEBzZWUgVUNoYXJJdGVyYXRvcgotICogQHNl
ZSBVQ2hhckl0ZXJhdG9yU2V0U3RhdGUKLSAqIEBzdGFibGUgSUNVIDIuNgotICovCi1VX1NUQUJM
RSB2b2lkIFVfRVhQT1JUMgotdWl0ZXJfc2V0U3RhdGUoVUNoYXJJdGVyYXRvciAqaXRlciwgdWlu
dDMyX3Qgc3RhdGUsIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwotCi0vKioKLSAqIFNldCB1cCBh
IFVDaGFySXRlcmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGEgc3RyaW5nLgotICoKLSAqIFNldHMgdGhl
IFVDaGFySXRlcmF0b3IgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIGl0ZXJhdGlvbiBvdmVyIHRoZSBz
dHJpbmcgcwotICogd2l0aCBpdGVyYXRpb24gYm91bmRhcmllcyBzdGFydD1pbmRleD0wIGFuZCBs
ZW5ndGg9bGltaXQ9c3RyaW5nIGxlbmd0aC4KLSAqIFRoZSAicHJvdmlkZXIiIG1heSBzZXQgdGhl
IHN0YXJ0LCBpbmRleCwgYW5kIGxpbWl0IHZhbHVlcyBhdCBhbnkgdGltZQotICogd2l0aGluIHRo
ZSByYW5nZSAwLi5sZW5ndGguCi0gKiBUaGUgbGVuZ3RoIGZpZWxkIHdpbGwgYmUgaWdub3JlZC4K
LSAqCi0gKiBUaGUgc3RyaW5nIHBvaW50ZXIgcyBpcyBzZXQgaW50byBVQ2hhckl0ZXJhdG9yLmNv
bnRleHQgd2l0aG91dCBjb3B5aW5nCi0gKiBvciByZWFsbG9jYXRpbmcgdGhlIHN0cmluZyBjb250
ZW50cy4KLSAqCi0gKiBnZXRTdGF0ZSgpIHNpbXBseSByZXR1cm5zIHRoZSBjdXJyZW50IGluZGV4
LgotICogbW92ZSgpIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgZmluYWwgaW5kZXguCi0gKgotICog
QHBhcmFtIGl0ZXIgVUNoYXJJdGVyYXRvciBzdHJ1Y3R1cmUgdG8gYmUgc2V0IGZvciBpdGVyYXRp
b24KLSAqIEBwYXJhbSBzIFN0cmluZyB0byBpdGVyYXRlIG92ZXIKLSAqIEBwYXJhbSBsZW5ndGgg
TGVuZ3RoIG9mIHMsIG9yIC0xIGlmIE5VTC10ZXJtaW5hdGVkCi0gKgotICogQHNlZSBVQ2hhckl0
ZXJhdG9yCi0gKiBAc3RhYmxlIElDVSAyLjEKLSAqLwotVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIK
LXVpdGVyX3NldFN0cmluZyhVQ2hhckl0ZXJhdG9yICppdGVyLCBjb25zdCBVQ2hhciAqcywgaW50
MzJfdCBsZW5ndGgpOwotCi0vKioKLSAqIFNldCB1cCBhIFVDaGFySXRlcmF0b3IgdG8gaXRlcmF0
ZSBvdmVyIGEgVVRGLTE2QkUgc3RyaW5nCi0gKiAoYnl0ZSB2ZWN0b3Igd2l0aCBhIGJpZy1lbmRp
YW4gcGFpciBvZiBieXRlcyBwZXIgVUNoYXIpLgotICoKLSAqIEV2ZXJ5dGhpbmcgd29ya3MganVz
dCBsaWtlIHdpdGggYSBub3JtYWwgVUNoYXIgaXRlcmF0b3IgKHVpdGVyX3NldFN0cmluZyksCi0g
KiBleGNlcHQgdGhhdCBVQ2hhcnMgYXJlIGFzc2VtYmxlZCBmcm9tIGJ5dGUgcGFpcnMsCi0gKiBh
bmQgdGhhdCB0aGUgbGVuZ3RoIGFyZ3VtZW50IGhlcmUgaW5kaWNhdGVzIGFuIGV2ZW4gbnVtYmVy
IG9mIGJ5dGVzLgotICoKLSAqIGdldFN0YXRlKCkgc2ltcGx5IHJldHVybnMgdGhlIGN1cnJlbnQg
aW5kZXguCi0gKiBtb3ZlKCkgd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBmaW5hbCBpbmRleC4KLSAq
Ci0gKiBAcGFyYW0gaXRlciBVQ2hhckl0ZXJhdG9yIHN0cnVjdHVyZSB0byBiZSBzZXQgZm9yIGl0
ZXJhdGlvbgotICogQHBhcmFtIHMgVVRGLTE2QkUgc3RyaW5nIHRvIGl0ZXJhdGUgb3ZlcgotICog
QHBhcmFtIGxlbmd0aCBMZW5ndGggb2YgcyBhcyBhbiBldmVuIG51bWJlciBvZiBieXRlcywgb3Ig
LTEgaWYgTlVMLXRlcm1pbmF0ZWQKLSAqICAgICAgICAgICAgICAgKE5VTCBtZWFucyBwYWlyIG9m
IDAgYnl0ZXMgYXQgZXZlbiBpbmRleCBmcm9tIHMpCi0gKgotICogQHNlZSBVQ2hhckl0ZXJhdG9y
Ci0gKiBAc2VlIHVpdGVyX3NldFN0cmluZwotICogQHN0YWJsZSBJQ1UgMi42Ci0gKi8KLVVfU1RB
QkxFIHZvaWQgVV9FWFBPUlQyCi11aXRlcl9zZXRVVEYxNkJFKFVDaGFySXRlcmF0b3IgKml0ZXIs
IGNvbnN0IGNoYXIgKnMsIGludDMyX3QgbGVuZ3RoKTsKLQotLyoqCi0gKiBTZXQgdXAgYSBVQ2hh
ckl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciBhIFVURi04IHN0cmluZy4KLSAqCi0gKiBTZXRzIHRo
ZSBVQ2hhckl0ZXJhdG9yIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBpdGVyYXRpb24gb3ZlciB0aGUg
VVRGLTggc3RyaW5nIHMKLSAqIHdpdGggVVRGLTggaXRlcmF0aW9uIGJvdW5kYXJpZXMgMCBhbmQg
bGVuZ3RoLgotICogVGhlIGltcGxlbWVudGF0aW9uIGNvdW50cyB0aGUgVVRGLTE2IGluZGV4IG9u
IHRoZSBmbHkgYW5kCi0gKiBsYXppbHkgZXZhbHVhdGVzIHRoZSBVVEYtMTYgbGVuZ3RoIG9mIHRo
ZSB0ZXh0LgotICoKLSAqIFRoZSBzdGFydCBmaWVsZCBpcyB1c2VkIGFzIHRoZSBVVEYtOCBvZmZz
ZXQsIHRoZSBsaW1pdCBmaWVsZCBhcyB0aGUgVVRGLTggbGVuZ3RoLgotICogV2hlbiB0aGUgcmVz
ZXJ2ZWRGaWVsZCBpcyBub3QgMCwgdGhlbiBpdCBjb250YWlucyBhIHN1cHBsZW1lbnRhcnkgY29k
ZSBwb2ludAotICogYW5kIHRoZSBVVEYtMTYgaW5kZXggaXMgYmV0d2VlbiB0aGUgdHdvIGNvcnJl
c3BvbmRpbmcgc3Vycm9nYXRlcy4KLSAqIEF0IHRoYXQgcG9pbnQsIHRoZSBVVEYtOCBpbmRleCBp
cyBiZWhpbmQgdGhhdCBjb2RlIHBvaW50LgotICoKLSAqIFRoZSBVVEYtOCBzdHJpbmcgcG9pbnRl
ciBzIGlzIHNldCBpbnRvIFVDaGFySXRlcmF0b3IuY29udGV4dCB3aXRob3V0IGNvcHlpbmcKLSAq
IG9yIHJlYWxsb2NhdGluZyB0aGUgc3RyaW5nIGNvbnRlbnRzLgotICoKLSAqIGdldFN0YXRlKCkg
cmV0dXJucyBhIHN0YXRlIHZhbHVlIGNvbnNpc3Rpbmcgb2YKLSAqIC0gdGhlIGN1cnJlbnQgVVRG
LTggc291cmNlIGJ5dGUgaW5kZXggKGJpdHMgMzEuLjEpCi0gKiAtIGEgZmxhZyAoYml0IDApIHRo
YXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIFVDaGFyIHBvc2l0aW9uIGlzIGluIHRoZSBtaWRkbGUK
LSAqICAgb2YgYSBzdXJyb2dhdGUgcGFpcgotICogICAoZnJvbSBhIDQtYnl0ZSBVVEYtOCBzZXF1
ZW5jZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50KQotICoK
LSAqIGdldFN0YXRlKCkgY2Fubm90IGFsc28gZW5jb2RlIHRoZSBVVEYtMTYgaW5kZXggaW4gdGhl
IHN0YXRlIHZhbHVlLgotICogbW92ZShyZWxhdGl2ZSB0byBsaW1pdCBvciBsZW5ndGgpLCBvcgot
ICogbW92ZShyZWxhdGl2ZSB0byBjdXJyZW50KSBhZnRlciBzZXRTdGF0ZSgpLCBtYXkgcmV0dXJu
IFVJVEVSX1VOS05PV05fSU5ERVguCi0gKgotICogQHBhcmFtIGl0ZXIgVUNoYXJJdGVyYXRvciBz
dHJ1Y3R1cmUgdG8gYmUgc2V0IGZvciBpdGVyYXRpb24KLSAqIEBwYXJhbSBzIFVURi04IHN0cmlu
ZyB0byBpdGVyYXRlIG92ZXIKLSAqIEBwYXJhbSBsZW5ndGggTGVuZ3RoIG9mIHMgaW4gYnl0ZXMs
IG9yIC0xIGlmIE5VTC10ZXJtaW5hdGVkCi0gKgotICogQHNlZSBVQ2hhckl0ZXJhdG9yCi0gKiBA
c3RhYmxlIElDVSAyLjYKLSAqLwotVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKLXVpdGVyX3NldFVU
RjgoVUNoYXJJdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqcywgaW50MzJfdCBsZW5ndGgpOwot
Ci0jaWYgVV9TSE9XX0NQTFVTUExVU19BUEkKLQotLyoqCi0gKiBTZXQgdXAgYSBVQ2hhckl0ZXJh
dG9yIHRvIHdyYXAgYXJvdW5kIGEgQysrIENoYXJhY3Rlckl0ZXJhdG9yLgotICoKLSAqIFNldHMg
dGhlIFVDaGFySXRlcmF0b3IgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIGl0ZXJhdGlvbiB1c2luZyB0
aGUKLSAqIENoYXJhY3Rlckl0ZXJhdG9yIGNoYXJJdGVyLgotICoKLSAqIFRoZSBDaGFyYWN0ZXJJ
dGVyYXRvciBwb2ludGVyIGNoYXJJdGVyIGlzIHNldCBpbnRvIFVDaGFySXRlcmF0b3IuY29udGV4
dAotICogd2l0aG91dCBjb3B5aW5nIG9yIGNsb25pbmcgdGhlIENoYXJhY3Rlckl0ZXJhdG9yIG9i
amVjdC4KLSAqIFRoZSBvdGhlciAicHJvdGVjdGVkIiBVQ2hhckl0ZXJhdG9yIGZpZWxkcyBhcmUg
c2V0IHRvIDAgYW5kIHdpbGwgYmUgaWdub3JlZC4KLSAqIFRoZSBpdGVyYXRpb24gaW5kZXggYW5k
IGJvdW5kYXJpZXMgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIENoYXJhY3Rlckl0ZXJhdG9yLgotICoK
LSAqIGdldFN0YXRlKCkgc2ltcGx5IHJldHVybnMgdGhlIGN1cnJlbnQgaW5kZXguCi0gKiBtb3Zl
KCkgd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBmaW5hbCBpbmRleC4KLSAqCi0gKiBAcGFyYW0gaXRl
ciBVQ2hhckl0ZXJhdG9yIHN0cnVjdHVyZSB0byBiZSBzZXQgZm9yIGl0ZXJhdGlvbgotICogQHBh
cmFtIGNoYXJJdGVyIENoYXJhY3Rlckl0ZXJhdG9yIHRvIHdyYXAKLSAqCi0gKiBAc2VlIFVDaGFy
SXRlcmF0b3IKLSAqIEBzdGFibGUgSUNVIDIuMQotICovCi1VX1NUQUJMRSB2b2lkIFVfRVhQT1JU
MgotdWl0ZXJfc2V0Q2hhcmFjdGVySXRlcmF0b3IoVUNoYXJJdGVyYXRvciAqaXRlciwgaWN1OjpD
aGFyYWN0ZXJJdGVyYXRvciAqY2hhckl0ZXIpOwotCi0vKioKLSAqIFNldCB1cCBhIFVDaGFySXRl
cmF0b3IgdG8gaXRlcmF0ZSBvdmVyIGEgQysrIFJlcGxhY2VhYmxlLgotICoKLSAqIFNldHMgdGhl
IFVDaGFySXRlcmF0b3IgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIGl0ZXJhdGlvbiBvdmVyIHRoZQot
ICogUmVwbGFjZWFibGUgcmVwIHdpdGggaXRlcmF0aW9uIGJvdW5kYXJpZXMgc3RhcnQ9aW5kZXg9
MCBhbmQKLSAqIGxlbmd0aD1saW1pdD1yZXAtPmxlbmd0aCgpLgotICogVGhlICJwcm92aWRlciIg
bWF5IHNldCB0aGUgc3RhcnQsIGluZGV4LCBhbmQgbGltaXQgdmFsdWVzIGF0IGFueSB0aW1lCi0g
KiB3aXRoaW4gdGhlIHJhbmdlIDAuLmxlbmd0aD1yZXAtPmxlbmd0aCgpLgotICogVGhlIGxlbmd0
aCBmaWVsZCB3aWxsIGJlIGlnbm9yZWQuCi0gKgotICogVGhlIFJlcGxhY2VhYmxlIHBvaW50ZXIg
cmVwIGlzIHNldCBpbnRvIFVDaGFySXRlcmF0b3IuY29udGV4dCB3aXRob3V0IGNvcHlpbmcKLSAq
IG9yIGNsb25pbmcvcmVhbGxvY2F0aW5nIHRoZSBSZXBsYWNlYWJsZSBvYmplY3QuCi0gKgotICog
Z2V0U3RhdGUoKSBzaW1wbHkgcmV0dXJucyB0aGUgY3VycmVudCBpbmRleC4KLSAqIG1vdmUoKSB3
aWxsIGFsd2F5cyByZXR1cm4gdGhlIGZpbmFsIGluZGV4LgotICoKLSAqIEBwYXJhbSBpdGVyIFVD
aGFySXRlcmF0b3Igc3RydWN0dXJlIHRvIGJlIHNldCBmb3IgaXRlcmF0aW9uCi0gKiBAcGFyYW0g
cmVwIFJlcGxhY2VhYmxlIHRvIGl0ZXJhdGUgb3ZlcgotICoKLSAqIEBzZWUgVUNoYXJJdGVyYXRv
cgotICogQHN0YWJsZSBJQ1UgMi4xCi0gKi8KLVVfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCi11aXRl
cl9zZXRSZXBsYWNlYWJsZShVQ2hhckl0ZXJhdG9yICppdGVyLCBjb25zdCBpY3U6OlJlcGxhY2Vh
YmxlICpyZXApOwotCi0jZW5kaWYKLQotVV9DREVDTF9FTkQKLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmlj
b2RlL3Vsb2MuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNp
ZXMvaWN1L3VuaWNvZGUvdWxvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzA1
YzhiNzhjOGE4NTNiOTM4ZDY1ZDE2YTFlMTI5NmRiNzczN2JiLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvdWxvYy5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTI1NiArMCwwIEBACi0vKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgIENvcHlyaWdodCAoQykgMTk5Ny0y
MDE0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCi0qICAgQ29ycG9yYXRpb24gYW5k
IG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qIEZpbGUg
VUxPQy5ICi0qCi0qIE1vZGlmaWNhdGlvbiBIaXN0b3J5OgotKgotKiAgIERhdGUgICAgICAgIE5h
bWUgICAgICAgIERlc2NyaXB0aW9uCi0qICAgMDQvMDEvOTcgICAgYWxpdSAgICAgICAgQ3JlYXRp
b24uCi0qICAgMDgvMjIvOTggICAgc3RlcGhlbiAgICAgSkRLIDEuMiBzeW5jLgotKiAgIDEyLzA4
Lzk4ICAgIHJ0ZyAgICAgICAgIE5ldyBDIEFQSSBmb3IgTG9jYWxlCi0qICAgMDMvMzAvOTkgICAg
ZGFtaWJhICAgICAgb3ZlcmhhdWwKLSogICAwMy8zMS85OSAgICBoZWxlbmEgICAgICBKYXZhZG9j
IGZvciB1bG9jIGZ1bmN0aW9ucy4KLSogICAwNC8xNS85OSAgICBNYWRodSAgICAgICBVcGRhdGVk
IEphdmFkb2MKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qLwotCi0jaWZuZGVmIFVMT0NfSAot
I2RlZmluZSBVTE9DX0gKLQotI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCi0jaW5jbHVkZSAi
dW5pY29kZS91ZW51bS5oIgotCi0vKiogICAgCi0gKiBcZmlsZQotICogXGJyaWVmICBDIEFQSTog
TG9jYWxlIAotICoKLSAqIDxoMj4gVUxvYyBDIEFQSSBmb3IgTG9jYWxlIDwvaDI+Ci0gKiBBIDxj
b2RlPkxvY2FsZTwvY29kZT4gcmVwcmVzZW50cyBhIHNwZWNpZmljIGdlb2dyYXBoaWNhbCwgcG9s
aXRpY2FsLAotICogb3IgY3VsdHVyYWwgcmVnaW9uLiBBbiBvcGVyYXRpb24gdGhhdCByZXF1aXJl
cyBhIDxjb2RlPkxvY2FsZTwvY29kZT4gdG8gcGVyZm9ybQotICogaXRzIHRhc2sgaXMgY2FsbGVk
IDxlbT5sb2NhbGUtc2Vuc2l0aXZlPC9lbT4gYW5kIHVzZXMgdGhlIDxjb2RlPkxvY2FsZTwvY29k
ZT4KLSAqIHRvIHRhaWxvciBpbmZvcm1hdGlvbiBmb3IgdGhlIHVzZXIuIEZvciBleGFtcGxlLCBk
aXNwbGF5aW5nIGEgbnVtYmVyCi0gKiBpcyBhIGxvY2FsZS1zZW5zaXRpdmUgb3BlcmF0aW9uLS10
aGUgbnVtYmVyIHNob3VsZCBiZSBmb3JtYXR0ZWQKLSAqIGFjY29yZGluZyB0byB0aGUgY3VzdG9t
cy9jb252ZW50aW9ucyBvZiB0aGUgdXNlcidzIG5hdGl2ZSBjb3VudHJ5LAotICogcmVnaW9uLCBv
ciBjdWx0dXJlLiAgSW4gdGhlIEMgQVBJcywgYSBsb2NhbGVzIGlzIHNpbXBseSBhIGNvbnN0IGNo
YXIgc3RyaW5nLgotICoKLSAqIDxQPgotICogWW91IGNyZWF0ZSBhIDxjb2RlPkxvY2FsZTwvY29k
ZT4gd2l0aCBvbmUgb2YgdGhlIHRocmVlIG9wdGlvbnMgbGlzdGVkIGJlbG93LgotICogRWFjaCBv
ZiB0aGUgY29tcG9uZW50IGlzIHNlcGFyYXRlZCBieSAnXycgaW4gdGhlIGxvY2FsZSBzdHJpbmcu
Ci0gKiBcaHRtbG9ubHk8YmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKLSAqIDxwcmU+Ci0gKiBcY29k
ZQotICogICAgICAgbmV3TGFuZ3VhZ2UKLSAqIAotICogICAgICAgbmV3TGFuZ3VhZ2UgKyBuZXdD
b3VudHJ5Ci0gKiAKLSAqICAgICAgIG5ld0xhbmd1YWdlICsgbmV3Q291bnRyeSArIG5ld1Zhcmlh
bnQKLSAqIFxlbmRjb2RlCi0gKiA8L3ByZT4KLSAqIFxodG1sb25seTwvYmxvY2txdW90ZT5cZW5k
aHRtbG9ubHkKLSAqIFRoZSBmaXJzdCBvcHRpb24gaXMgYSB2YWxpZCA8U1RST05HPklTTwotICog
TGFuZ3VhZ2UgQ29kZS48L1NUUk9ORz4gVGhlc2UgY29kZXMgYXJlIHRoZSBsb3dlci1jYXNlIHR3
by1sZXR0ZXIKLSAqIGNvZGVzIGFzIGRlZmluZWQgYnkgSVNPLTYzOS4KLSAqIFlvdSBjYW4gZmlu
ZCBhIGZ1bGwgbGlzdCBvZiB0aGVzZSBjb2RlcyBhdCBhIG51bWJlciBvZiBzaXRlcywgc3VjaCBh
czoKLSAqIDxCUj48YSBocmVmID0iaHR0cDovL3d3dy5pY3MudWNpLmVkdS9wdWIvaWV0Zi9odHRw
L3JlbGF0ZWQvaXNvNjM5LnR4dCI+Ci0gKiBodHRwOi8vd3d3Lmljcy51Y2kuZWR1L3B1Yi9pZXRm
L2h0dHAvcmVsYXRlZC9pc282MzkudHh0PC9hPgotICoKLSAqIDxQPgotICogVGhlIHNlY29uZCBv
cHRpb24gaW5jbHVkZXMgYW4gYWRkaXRvbmFsIDxTVFJPTkc+SVNPIENvdW50cnkKLSAqIENvZGUu
PC9TVFJPTkc+IFRoZXNlIGNvZGVzIGFyZSB0aGUgdXBwZXItY2FzZSB0d28tbGV0dGVyIGNvZGVz
Ci0gKiBhcyBkZWZpbmVkIGJ5IElTTy0zMTY2LgotICogWW91IGNhbiBmaW5kIGEgZnVsbCBsaXN0
IG9mIHRoZXNlIGNvZGVzIGF0IGEgbnVtYmVyIG9mIHNpdGVzLCBzdWNoIGFzOgotICogPEJSPjxh
IGhyZWY9Imh0dHA6Ly93d3cuY2hlbWllLmZ1LWJlcmxpbi5kZS9kaXZlcnNlL2RvYy9JU09fMzE2
Ni5odG1sIj4KLSAqIGh0dHA6Ly93d3cuY2hlbWllLmZ1LWJlcmxpbi5kZS9kaXZlcnNlL2RvYy9J
U09fMzE2Ni5odG1sPC9hPgotICoKLSAqIDxQPgotICogVGhlIHRoaXJkIG9wdGlvbiByZXF1aXJl
cyBhbm90aGVyIGFkZGl0b25hbCBpbmZvcm1hdGlvbi0tdGhlIAotICogPFNUUk9ORz5WYXJpYW50
LjwvU1RST05HPgotICogVGhlIFZhcmlhbnQgY29kZXMgYXJlIHZlbmRvciBhbmQgYnJvd3Nlci1z
cGVjaWZpYy4KLSAqIEZvciBleGFtcGxlLCB1c2UgV0lOIGZvciBXaW5kb3dzLCBNQUMgZm9yIE1h
Y2ludG9zaCwgYW5kIFBPU0lYIGZvciBQT1NJWC4KLSAqIFdoZXJlIHRoZXJlIGFyZSB0d28gdmFy
aWFudHMsIHNlcGFyYXRlIHRoZW0gd2l0aCBhbiB1bmRlcnNjb3JlLCBhbmQKLSAqIHB1dCB0aGUg
bW9zdCBpbXBvcnRhbnQgb25lIGZpcnN0LiBGb3IKLSAqIGV4YW1wbGUsIGEgVHJhZGl0aW9uYWwg
U3BhbmlzaCBjb2xsYXRpb24gbWlnaHQgYmUgcmVmZXJlbmNlZCwgd2l0aAotICogIkVTIiwgIkVT
IiwgIlRyYWRpdGlvbmFsX1dJTiIuCi0gKgotICogPFA+Ci0gKiBCZWNhdXNlIGEgPGNvZGU+TG9j
YWxlPC9jb2RlPiBpcyBqdXN0IGFuIGlkZW50aWZpZXIgZm9yIGEgcmVnaW9uLAotICogbm8gdmFs
aWRpdHkgY2hlY2sgaXMgcGVyZm9ybWVkIHdoZW4geW91IHNwZWNpZnkgYSA8Y29kZT5Mb2NhbGU8
L2NvZGU+LgotICogSWYgeW91IHdhbnQgdG8gc2VlIHdoZXRoZXIgcGFydGljdWxhciByZXNvdXJj
ZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlCi0gKiA8Y29kZT5Mb2NhbGU8L2NvZGU+IHlvdSBhc2tl
ZCBmb3IsIHlvdSBtdXN0IHF1ZXJ5IHRob3NlIHJlc291cmNlcy4gRm9yCi0gKiBleGFtcGxlLCBh
c2sgdGhlIDxjb2RlPlVOdW1iZXJGb3JtYXQ8L2NvZGU+IGZvciB0aGUgbG9jYWxlcyBpdCBzdXBw
b3J0cwotICogdXNpbmcgaXRzIDxjb2RlPmdldEF2YWlsYWJsZTwvY29kZT4gbWV0aG9kLgotICog
PEJSPjxTVFJPTkc+Tm90ZTo8L1NUUk9ORz4gV2hlbiB5b3UgYXNrIGZvciBhIHJlc291cmNlIGZv
ciBhIHBhcnRpY3VsYXIKLSAqIGxvY2FsZSwgeW91IGdldCBiYWNrIHRoZSBiZXN0IGF2YWlsYWJs
ZSBtYXRjaCwgbm90IG5lY2Vzc2FyaWx5Ci0gKiBwcmVjaXNlbHkgd2hhdCB5b3UgYXNrZWQgZm9y
LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgbG9vayBhdAotICogPGNvZGU+VVJlc291cmNlQnVuZGxl
PC9jb2RlPi4KLSAqCi0gKiA8UD4KLSAqIFRoZSA8Y29kZT5Mb2NhbGU8L2NvZGU+IHByb3ZpZGVz
IGEgbnVtYmVyIG9mIGNvbnZlbmllbnQgY29uc3RhbnRzCi0gKiB0aGF0IHlvdSBjYW4gdXNlIHRv
IHNwZWNpZnkgdGhlIGNvbW1vbmx5IHVzZWQKLSAqIGxvY2FsZXMuIEZvciBleGFtcGxlLCB0aGUg
Zm9sbG93aW5nIHJlZmVycyB0byBhIGxvY2FsZQotICogZm9yIHRoZSBVbml0ZWQgU3RhdGVzOgot
ICogXGh0bWxvbmx5PGJsb2NrcXVvdGU+XGVuZGh0bWxvbmx5Ci0gKiA8cHJlPgotICogXGNvZGUK
LSAqICAgICAgIFVMT0NfVVMKLSAqIFxlbmRjb2RlCi0gKiA8L3ByZT4KLSAqIFxodG1sb25seTwv
YmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKLSAqCi0gKiA8UD4KLSAqIE9uY2UgeW91J3ZlIHNwZWNp
ZmllZCBhIGxvY2FsZSB5b3UgY2FuIHF1ZXJ5IGl0IGZvciBpbmZvcm1hdGlvbiBhYm91dAotICog
aXRzZWxmLiBVc2UgPGNvZGU+dWxvY19nZXRDb3VudHJ5PC9jb2RlPiB0byBnZXQgdGhlIElTTyBD
b3VudHJ5IENvZGUgYW5kCi0gKiA8Y29kZT51bG9jX2dldExhbmd1YWdlPC9jb2RlPiB0byBnZXQg
dGhlIElTTyBMYW5ndWFnZSBDb2RlLiBZb3UgY2FuCi0gKiB1c2UgPGNvZGU+dWxvY19nZXREaXNw
bGF5Q291bnRyeTwvY29kZT4gdG8gZ2V0IHRoZQotICogbmFtZSBvZiB0aGUgY291bnRyeSBzdWl0
YWJsZSBmb3IgZGlzcGxheWluZyB0byB0aGUgdXNlci4gU2ltaWxhcmx5LAotICogeW91IGNhbiB1
c2UgPGNvZGU+dWxvY19nZXREaXNwbGF5TGFuZ3VhZ2U8L2NvZGU+IHRvIGdldCB0aGUgbmFtZSBv
ZgotICogdGhlIGxhbmd1YWdlIHN1aXRhYmxlIGZvciBkaXNwbGF5aW5nIHRvIHRoZSB1c2VyLiBJ
bnRlcmVzdGluZ2x5LAotICogdGhlIDxjb2RlPnVsb2NfZ2V0RGlzcGxheVhYWDwvY29kZT4gbWV0
aG9kcyBhcmUgdGhlbXNlbHZlcyBsb2NhbGUtc2Vuc2l0aXZlCi0gKiBhbmQgaGF2ZSB0d28gdmVy
c2lvbnM6IG9uZSB0aGF0IHVzZXMgdGhlIGRlZmF1bHQgbG9jYWxlIGFuZCBvbmUKLSAqIHRoYXQg
dGFrZXMgYSBsb2NhbGUgYXMgYW4gYXJndW1lbnQgYW5kIGRpc3BsYXlzIHRoZSBuYW1lIG9yIGNv
dW50cnkgaW4KLSAqIGEgbGFuZ3VhZ2UgYXBwcm9wcmlhdGUgdG8gdGhhdCBsb2NhbGUuCi0gKgot
ICogPFA+Ci0gKiBUaGUgSUNVIHByb3ZpZGVzIGEgbnVtYmVyIG9mIHNlcnZpY2VzIHRoYXQgcGVy
Zm9ybSBsb2NhbGUtc2Vuc2l0aXZlCi0gKiBvcGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgdGhlIDxj
b2RlPnVudW1feHh4PC9jb2RlPiBmdW5jdGlvbnMgZm9ybWF0Ci0gKiBudW1iZXJzLCBjdXJyZW5j
eSwgb3IgcGVyY2VudGFnZXMgaW4gYSBsb2NhbGUtc2Vuc2l0aXZlIG1hbm5lci4gCi0gKiA8L1A+
Ci0gKiBcaHRtbG9ubHk8YmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKLSAqIDxwcmU+Ci0gKiBcY29k
ZQotICogICAgIFVFcnJvckNvZGUgc3VjY2VzcyA9IFVfWkVST19FUlJPUjsKLSAqICAgICBVTnVt
YmVyRm9ybWF0ICpuZjsKLSAqICAgICBjb25zdCBjaGFyKiBteUxvY2FsZSA9ICJmcl9GUiI7Ci0g
KiAKLSAqICAgICBuZiA9IHVudW1fb3BlbiggVU5VTV9ERUZBVUxULCBOVUxMLCBzdWNjZXNzICk7
ICAgICAgICAgIAotICogICAgIHVudW1fY2xvc2UobmYpOwotICogICAgIG5mID0gdW51bV9vcGVu
KCBVTlVNX0NVUlJFTkNZLCBOVUxMLCBzdWNjZXNzICk7Ci0gKiAgICAgdW51bV9jbG9zZShuZik7
Ci0gKiAgICAgbmYgPSB1bnVtX29wZW4oIFVOVU1fUEVSQ0VOVCwgTlVMTCwgc3VjY2VzcyApOyAg
IAotICogICAgIHVudW1fY2xvc2UobmYpOwotICogXGVuZGNvZGUKLSAqIDwvcHJlPgotICogXGh0
bWxvbmx5PC9ibG9ja3F1b3RlPlxlbmRodG1sb25seQotICogRWFjaCBvZiB0aGVzZSBtZXRob2Rz
IGhhcyB0d28gdmFyaWFudHM7IG9uZSB3aXRoIGFuIGV4cGxpY2l0IGxvY2FsZQotICogYW5kIG9u
ZSB3aXRob3V0OyB0aGUgbGF0dGVyIHVzaW5nIHRoZSBkZWZhdWx0IGxvY2FsZS4KLSAqIFxodG1s
b25seTxibG9ja3F1b3RlPlxlbmRodG1sb25seQotICogPHByZT4KLSAqIFxjb2RlIAotICogCi0g
KiAgICAgbmYgPSB1bnVtX29wZW4oIFVOVU1fREVGQVVMVCwgbXlMb2NhbGUsIHN1Y2Nlc3MgKTsg
ICAgICAgICAgCi0gKiAgICAgdW51bV9jbG9zZShuZik7Ci0gKiAgICAgbmYgPSB1bnVtX29wZW4o
IFVOVU1fQ1VSUkVOQ1ksIG15TG9jYWxlLCBzdWNjZXNzICk7Ci0gKiAgICAgdW51bV9jbG9zZShu
Zik7Ci0gKiAgICAgbmYgPSB1bnVtX29wZW4oIFVOVU1fUEVSQ0VOVCwgbXlMb2NhbGUsIHN1Y2Nl
c3MgKTsgICAKLSAqICAgICB1bnVtX2Nsb3NlKG5mKTsKLSAqIFxlbmRjb2RlCi0gKiA8L3ByZT4K
LSAqIFxodG1sb25seTwvYmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKLSAqIEEgPGNvZGU+TG9jYWxl
PC9jb2RlPiBpcyB0aGUgbWVjaGFuaXNtIGZvciBpZGVudGlmeWluZyB0aGUga2luZCBvZiBzZXJ2
aWNlcwotICogKDxjb2RlPlVOdW1iZXJGb3JtYXQ8L2NvZGU+KSB0aGF0IHlvdSB3b3VsZCBsaWtl
IHRvIGdldC4gVGhlIGxvY2FsZSBpcwotICogPFNUUk9ORz5qdXN0PC9TVFJPTkc+IGEgbWVjaGFu
aXNtIGZvciBpZGVudGlmeWluZyB0aGVzZSBzZXJ2aWNlcy4KLSAqCi0gKiA8UD4KLSAqIEVhY2gg
aW50ZXJuYXRpb25hbCBzZXJpdmNlIHRoYXQgcGVyZm9ybXMgbG9jYWxlLXNlbnNpdGl2ZSBvcGVy
YXRpb25zIAotICogYWxsb3dzIHlvdQotICogdG8gZ2V0IGFsbCB0aGUgYXZhaWxhYmxlIG9iamVj
dHMgb2YgdGhhdCB0eXBlLiBZb3UgY2FuIHNpZnQKLSAqIHRocm91Z2ggdGhlc2Ugb2JqZWN0cyBi
eSBsYW5ndWFnZSwgY291bnRyeSwgb3IgdmFyaWFudCwKLSAqIGFuZCB1c2UgdGhlIGRpc3BsYXkg
bmFtZXMgdG8gcHJlc2VudCBhIG1lbnUgdG8gdGhlIHVzZXIuCi0gKiBGb3IgZXhhbXBsZSwgeW91
IGNhbiBjcmVhdGUgYSBtZW51IG9mIGFsbCB0aGUgY29sbGF0aW9uIG9iamVjdHMKLSAqIHN1aXRh
YmxlIGZvciBhIGdpdmVuIGxhbmd1YWdlLiBTdWNoIGNsYXNzZXMgaW1wbGVtZW50IHRoZXNlCi0g
KiB0aHJlZSBjbGFzcyBtZXRob2RzOgotICogXGh0bWxvbmx5PGJsb2NrcXVvdGU+XGVuZGh0bWxv
bmx5Ci0gKiA8cHJlPgotICogXGNvZGUKLSAqICAgICAgIGNvbnN0IGNoYXIqIHVsb2NfZ2V0QXZh
aWxhYmxlKGludDMyX3QgaW5kZXgpOwotICogICAgICAgaW50MzJfdCB1bG9jX2NvdW50QXZhaWxh
YmxlKCk7Ci0gKiAgICAgICBpbnQzMl90Ci0gKiAgICAgICB1bG9jX2dldERpc3BsYXlOYW1lKGNv
bnN0IGNoYXIqIGxvY2FsZUlELAotICogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGluTG9j
YWxlSUQsIAotICogICAgICAgICAgICAgICAgIFVDaGFyKiByZXN1bHQsCi0gKiAgICAgICAgICAg
ICAgICAgaW50MzJfdCBtYXhSZXN1bHRTaXplLAotICogICAgICAgICAgICAgICAgICBVRXJyb3JD
b2RlKiBlcnIpOwotICogCi0gKiBcZW5kY29kZQotICogPC9wcmU+Ci0gKiBcaHRtbG9ubHk8L2Js
b2NrcXVvdGU+XGVuZGh0bWxvbmx5Ci0gKiA8UD4KLSAqIENvbmNlcm5pbmcgUE9TSVgvUkZDMTc2
NiBMb2NhbGUgSURzLCAKLSAqICB0aGUgZ2V0TGFuZ3VhZ2UvZ2V0Q291bnRyeS9nZXRWYXJpYW50
L2dldE5hbWUgZnVuY3Rpb25zIGRvIHVuZGVyc3RhbmQKLSAqIHRoZSBQT1NJWCB0eXBlIGZvcm0g
b2YgIGxhbmd1YWdlX0NPVU5UUlkuRU5DT0RJTkdcQFZBUklBTlQKLSAqIGFuZCBpZiB0aGVyZSBp
cyBub3QgYW4gSUNVLXN0eXBlIHZhcmlhbnQsIHVsb2NfZ2V0VmFyaWFudCgpIGZvciBleGFtcGxl
Ci0gKiB3aWxsIHJldHVybiB0aGUgb25lIGxpc3RlZCBhZnRlciB0aGUgXEBhdCBzaWduLiBBcyB3
ZWxsLCB0aGUgaHlwaGVuCi0gKiAiLSIgaXMgcmVjb2duaXplZCBhcyBhIGNvdW50cnkvdmFyaWFu
dCBzZXBhcmF0b3Igc2ltaWxhcmx5IHRvIFJGQzE3NjYuCi0gKiBTbyBmb3IgZXhhbXBsZSwgImVu
LXVzIiB3aWxsIGJlIGludGVycHJldGVkIGFzIGVuX1VTLiAgCi0gKiBBcyBhIHJlc3VsdCwgdWxv
Y19nZXROYW1lKCkgaXMgZmFyIGZyb20gYSBuby1vcCwgYW5kIHdpbGwgaGF2ZSB0aGUKLSAqIGVm
ZmVjdCBvZiBjb252ZXJ0aW5nIFBPU0lYL1JGQzE3NjYgSURzIGludG8gSUNVIGZvcm0sIGFsdGhv
dWdoIGl0IGRvZXMKLSAqIE5PVCBtYXAgYW55IG9mIHRoZSBhY3R1YWwgY29kZXMgKGkuZS4gcnVz
c2lhbi0+cnUpIGluIGFueSB3YXkuCi0gKiBBcHBsaWNhdGlvbnMgc2hvdWxkIGNhbGwgdWxvY19n
ZXROYW1lKCkgYXQgdGhlIHBvaW50IHdoZXJlIGEgbG9jYWxlIElECi0gKiBpcyBjb21pbmcgZnJv
bSBhbiBleHRlcm5hbCBzb3VyY2UgKHVzZXIgZW50cnksIE9TLCB3ZWIgYnJvd3NlcikKLSAqIGFu
ZCBwYXNzIHRoZSByZXN1bHRpbmcgc3RyaW5nIHRvIG90aGVyIElDVSBmdW5jdGlvbnMuICBGb3Ig
ZXhhbXBsZSwKLSAqIGRvbid0IHVzZSBkZS1kZVxARVVSTyBhcyBhbiBhcmd1bWVudCB0byByZXNv
dXJjZWJ1bmRsZS4KLSAqCi0gKiBAc2VlIFVSZXNvdXJjZUJ1bmRsZQotICovCi0KLS8qKiBVc2Vm
dWwgY29uc3RhbnQgZm9yIHRoaXMgbGFuZ3VhZ2UuIEBzdGFibGUgSUNVIDIuMCAqLwotI2RlZmlu
ZSBVTE9DX0NISU5FU0UgICAgICAgICAgICAiemgiCi0vKiogVXNlZnVsIGNvbnN0YW50IGZvciB0
aGlzIGxhbmd1YWdlLiBAc3RhYmxlIElDVSAyLjAgKi8KLSNkZWZpbmUgVUxPQ19FTkdMSVNIICAg
ICAgICAgICAgImVuIgotLyoqIFVzZWZ1bCBjb25zdGFudCBmb3IgdGhpcyBsYW5ndWFnZS4gQHN0
YWJsZSBJQ1UgMi4wICovCi0jZGVmaW5lIFVMT0NfRlJFTkNIICAgICAgICAgICAgICJmciIKLS8q
KiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgbGFuZ3VhZ2UuIEBzdGFibGUgSUNVIDIuMCAqLwot
I2RlZmluZSBVTE9DX0dFUk1BTiAgICAgICAgICAgICAiZGUiCi0vKiogVXNlZnVsIGNvbnN0YW50
IGZvciB0aGlzIGxhbmd1YWdlLiBAc3RhYmxlIElDVSAyLjAgKi8KLSNkZWZpbmUgVUxPQ19JVEFM
SUFOICAgICAgICAgICAgIml0IgotLyoqIFVzZWZ1bCBjb25zdGFudCBmb3IgdGhpcyBsYW5ndWFn
ZS4gQHN0YWJsZSBJQ1UgMi4wICovCi0jZGVmaW5lIFVMT0NfSkFQQU5FU0UgICAgICAgICAgICJq
YSIKLS8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgbGFuZ3VhZ2UuIEBzdGFibGUgSUNVIDIu
MCAqLwotI2RlZmluZSBVTE9DX0tPUkVBTiAgICAgICAgICAgICAia28iCi0vKiogVXNlZnVsIGNv
bnN0YW50IGZvciB0aGlzIGxhbmd1YWdlLiBAc3RhYmxlIElDVSAyLjAgKi8KLSNkZWZpbmUgVUxP
Q19TSU1QTElGSUVEX0NISU5FU0UgInpoX0NOIgotLyoqIFVzZWZ1bCBjb25zdGFudCBmb3IgdGhp
cyBsYW5ndWFnZS4gQHN0YWJsZSBJQ1UgMi4wICovCi0jZGVmaW5lIFVMT0NfVFJBRElUSU9OQUxf
Q0hJTkVTRSAiemhfVFciCi0KLS8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgY291bnRyeS9y
ZWdpb24uIEBzdGFibGUgSUNVIDIuMCAqLwotI2RlZmluZSBVTE9DX0NBTkFEQSAgICAgICAgICJl
bl9DQSIKLS8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgY291bnRyeS9yZWdpb24uIEBzdGFi
bGUgSUNVIDIuMCAqLwotI2RlZmluZSBVTE9DX0NBTkFEQV9GUkVOQ0ggICJmcl9DQSIKLS8qKiBV
c2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgY291bnRyeS9yZWdpb24uIEBzdGFibGUgSUNVIDIuMCAq
LwotI2RlZmluZSBVTE9DX0NISU5BICAgICAgICAgICJ6aF9DTiIKLS8qKiBVc2VmdWwgY29uc3Rh
bnQgZm9yIHRoaXMgY291bnRyeS9yZWdpb24uIEBzdGFibGUgSUNVIDIuMCAqLwotI2RlZmluZSBV
TE9DX1BSQyAgICAgICAgICAgICJ6aF9DTiIKLS8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMg
Y291bnRyeS9yZWdpb24uIEBzdGFibGUgSUNVIDIuMCAqLwotI2RlZmluZSBVTE9DX0ZSQU5DRSAg
ICAgICAgICJmcl9GUiIKLS8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgY291bnRyeS9yZWdp
b24uIEBzdGFibGUgSUNVIDIuMCAqLwotI2RlZmluZSBVTE9DX0dFUk1BTlkgICAgICAgICJkZV9E
RSIKLS8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgY291bnRyeS9yZWdpb24uIEBzdGFibGUg
SUNVIDIuMCAqLwotI2RlZmluZSBVTE9DX0lUQUxZICAgICAgICAgICJpdF9JVCIKLS8qKiBVc2Vm
dWwgY29uc3RhbnQgZm9yIHRoaXMgY291bnRyeS9yZWdpb24uIEBzdGFibGUgSUNVIDIuMCAqLwot
I2RlZmluZSBVTE9DX0pBUEFOICAgICAgICAgICJqYV9KUCIKLS8qKiBVc2VmdWwgY29uc3RhbnQg
Zm9yIHRoaXMgY291bnRyeS9yZWdpb24uIEBzdGFibGUgSUNVIDIuMCAqLwotI2RlZmluZSBVTE9D
X0tPUkVBICAgICAgICAgICJrb19LUiIKLS8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgY291
bnRyeS9yZWdpb24uIEBzdGFibGUgSUNVIDIuMCAqLwotI2RlZmluZSBVTE9DX1RBSVdBTiAgICAg
ICAgICJ6aF9UVyIKLS8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgY291bnRyeS9yZWdpb24u
IEBzdGFibGUgSUNVIDIuMCAqLwotI2RlZmluZSBVTE9DX1VLICAgICAgICAgICAgICJlbl9HQiIK
LS8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgY291bnRyeS9yZWdpb24uIEBzdGFibGUgSUNV
IDIuMCAqLwotI2RlZmluZSBVTE9DX1VTICAgICAgICAgICAgICJlbl9VUyIKLQotLyoqCi0gKiBV
c2VmdWwgY29uc3RhbnQgZm9yIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGxhbmd1YWdlIHBhcnQg
b2YgYSBsb2NhbGUgSUQuCi0gKiAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUxMKS4KLSAq
IEBzdGFibGUgSUNVIDIuMAotICovCi0jZGVmaW5lIFVMT0NfTEFOR19DQVBBQ0lUWSAxMgotCi0v
KioKLSAqIFVzZWZ1bCBjb25zdGFudCBmb3IgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgY291bnRy
eSBwYXJ0IG9mIGEgbG9jYWxlIElECi0gKiAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUxM
KS4KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi0jZGVmaW5lIFVMT0NfQ09VTlRSWV9DQVBBQ0lU
WSA0Ci0vKioKLSAqIFVzZWZ1bCBjb25zdGFudCBmb3IgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUg
d2hvbGUgbG9jYWxlIElECi0gKiAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUxMIGFuZCBh
bGwga2V5d29yZHMpLgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLSNkZWZpbmUgVUxPQ19GVUxM
TkFNRV9DQVBBQ0lUWSAxNTcKLQotLyoqCi0gKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoZSBtYXhp
bXVtIHNpemUgb2YgdGhlIHNjcmlwdCBwYXJ0IG9mIGEgbG9jYWxlIElECi0gKiAoaW5jbHVkaW5n
IHRoZSB0ZXJtaW5hdGluZyBOVUxMKS4KLSAqIEBzdGFibGUgSUNVIDIuOAotICovCi0jZGVmaW5l
IFVMT0NfU0NSSVBUX0NBUEFDSVRZIDYKLQotLyoqCi0gKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRo
ZSBtYXhpbXVtIHNpemUgb2Yga2V5d29yZHMgaW4gYSBsb2NhbGUKLSAqIEBzdGFibGUgSUNVIDIu
OAotICovCi0jZGVmaW5lIFVMT0NfS0VZV09SRFNfQ0FQQUNJVFkgOTYKLQotLyoqCi0gKiBVc2Vm
dWwgY29uc3RhbnQgZm9yIHRoZSBtYXhpbXVtIHRvdGFsIHNpemUgb2Yga2V5d29yZHMgYW5kIHRo
ZWlyIHZhbHVlcyBpbiBhIGxvY2FsZQotICogQHN0YWJsZSBJQ1UgMi44Ci0gKi8KLSNkZWZpbmUg
VUxPQ19LRVlXT1JEX0FORF9WQUxVRVNfQ0FQQUNJVFkgMTAwCi0KLS8qKgotICogSW52YXJpYW50
IGNoYXJhY3RlciBzZXBhcmF0aW5nIGtleXdvcmRzIGZyb20gdGhlIGxvY2FsZSBzdHJpbmcKLSAq
IEBzdGFibGUgSUNVIDIuOAotICovCi0jZGVmaW5lIFVMT0NfS0VZV09SRF9TRVBBUkFUT1IgJ0An
Ci0KLS8qKgotICAqIFVuaWNvZGUgY29kZSBwb2ludCBmb3IgJ0AnIHNlcGFyYXRpbmcga2V5d29y
ZHMgZnJvbSB0aGUgbG9jYWxlIHN0cmluZy4KLSAgKiBAc2VlIFVMT0NfS0VZV09SRF9TRVBBUkFU
T1IKLSAgKiBAc3RhYmxlIElDVSA0LjYKLSAgKi8KLSNkZWZpbmUgVUxPQ19LRVlXT1JEX1NFUEFS
QVRPUl9VTklDT0RFIDB4NDAKLQotLyoqCi0gKiBJbnZhcmlhbnQgY2hhcmFjdGVyIGZvciBhc3Np
Z25pbmcgdmFsdWUgdG8gYSBrZXl3b3JkCi0gKiBAc3RhYmxlIElDVSAyLjgKLSAqLwotI2RlZmlu
ZSBVTE9DX0tFWVdPUkRfQVNTSUdOICc9JwotCi0vKioKLSAgKiBVbmljb2RlIGNvZGUgcG9pbnQg
Zm9yICc9JyBmb3IgYXNzaWduaW5nIHZhbHVlIHRvIGEga2V5d29yZC4KLSAgKiBAc2VlIFVMT0Nf
S0VZV09SRF9BU1NJR04KLSAgKiBAc3RhYmxlIElDVSA0LjYgCi0gICovCi0jZGVmaW5lIFVMT0Nf
S0VZV09SRF9BU1NJR05fVU5JQ09ERSAweDNECi0KLS8qKgotICogSW52YXJpYW50IGNoYXJhY3Rl
ciBzZXBhcmF0aW5nIGtleXdvcmRzCi0gKiBAc3RhYmxlIElDVSAyLjgKLSAqLwotI2RlZmluZSBV
TE9DX0tFWVdPUkRfSVRFTV9TRVBBUkFUT1IgJzsnCi0KLS8qKgotICAqIFVuaWNvZGUgY29kZSBw
b2ludCBmb3IgJzsnIHNlcGFyYXRpbmcga2V5d29yZHMKLSAgKiBAc2VlIFVMT0NfS0VZV09SRF9J
VEVNX1NFUEFSQVRPUgotICAqIEBzdGFibGUgSUNVIDQuNgotICAqLwotI2RlZmluZSBVTE9DX0tF
WVdPUkRfSVRFTV9TRVBBUkFUT1JfVU5JQ09ERSAweDNCCi0KLS8qKgotICogQ29uc3RhbnRzIGZv
ciAqX2dldExvY2FsZSgpCi0gKiBBbGxvdyB1c2VyIHRvIHNlbGVjdCB3aGV0aGVyIHNoZSB3YW50
cyBpbmZvcm1hdGlvbiBvbiAKLSAqIHJlcXVlc3RlZCwgdmFsaWQgb3IgYWN0dWFsIGxvY2FsZS4K
LSAqIEZvciBleGFtcGxlLCBhIGNvbGxhdG9yIGZvciAiZW5fVVNfQ0FMSUZPUk5JQSIgd2FzCi0g
KiByZXF1ZXN0ZWQuIEluIHRoZSBjdXJyZW50IHN0YXRlIG9mIElDVSAoMi4wKSwgCi0gKiB0aGUg
cmVxdWVzdGVkIGxvY2FsZSBpcyAiZW5fVVNfQ0FMSUZPUk5JQSIsCi0gKiB0aGUgdmFsaWQgbG9j
YWxlIGlzICJlbl9VUyIgKG1vc3Qgc3BlY2lmaWMgbG9jYWxlIHN1cHBvcnRlZCBieSBJQ1UpCi0g
KiBhbmQgdGhlIGFjdHVhbCBsb2NhbGUgaXMgInJvb3QiICh0aGUgY29sbGF0aW9uIGRhdGEgY29t
ZXMgdW5tb2RpZmllZCAKLSAqIGZyb20gdGhlIFVDQSkKLSAqIFRoZSBsb2NhbGUgaXMgY29uc2lk
ZXJlZCBzdXBwb3J0ZWQgYnkgSUNVIGlmIHRoZXJlIGlzIGEgY29yZSBJQ1UgYnVuZGxlIAotICog
Zm9yIHRoYXQgbG9jYWxlIChhbHRob3VnaCBpdCBtYXkgYmUgZW1wdHkpLgotICogQHN0YWJsZSBJ
Q1UgMi4xCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIC8qKiBUaGlzIGlzIGxvY2FsZSB0aGUgZGF0
YSBhY3R1YWxseSBjb21lcyBmcm9tIAotICAgKiBAc3RhYmxlIElDVSAyLjEKLSAgICovCi0gIFVM
T0NfQUNUVUFMX0xPQ0FMRSAgICA9IDAsCi0gIC8qKiBUaGlzIGlzIHRoZSBtb3N0IHNwZWNpZmlj
IGxvY2FsZSBzdXBwb3J0ZWQgYnkgSUNVIAotICAgKiBAc3RhYmxlIElDVSAyLjEKLSAgICovCi0g
IFVMT0NfVkFMSURfTE9DQUxFICAgID0gMSwKLQotI2lmbmRlZiBVX0hJREVfREVQUkVDQVRFRF9B
UEkKLSAgLyoqIFRoaXMgaXMgdGhlIHJlcXVlc3RlZCBsb2NhbGUKLSAgICogIEBkZXByZWNhdGVk
IElDVSAyLjggCi0gICAqLwotICBVTE9DX1JFUVVFU1RFRF9MT0NBTEUgPSAyLAotI2VuZGlmIC8q
IFVfSElERV9ERVBSRUNBVEVEX0FQSSAqLwotCi0gIFVMT0NfREFUQV9MT0NBTEVfVFlQRV9MSU1J
VCA9IDMKLX0gVUxvY0RhdGFMb2NhbGVUeXBlIDsKLQotI2lmbmRlZiBVX0hJREVfU1lTVEVNX0FQ
SQotLyoqCi0gKiBHZXRzIElDVSdzIGRlZmF1bHQgbG9jYWxlLiAgCi0gKiBUaGUgcmV0dXJuZWQg
c3RyaW5nIGlzIGEgc25hcHNob3QgaW4gdGltZSwgYW5kIHdpbGwgcmVtYWluIHZhbGlkCi0gKiAg
IGFuZCB1bmNoYW5nZWQgZXZlbiB3aGVuIHVsb2Nfc2V0RGVmYXVsdCgpIGlzIGNhbGxlZC4KLSAq
ICAgVGhlIHJldHVybmVkIHN0b3JhZ2UgaXMgb3duZWQgYnkgSUNVLCBhbmQgbXVzdCBub3QgYmUg
YWx0ZXJlZCBvciBkZWxldGVkCi0gKiAgIGJ5IHRoZSBjYWxsZXIuCi0gKiAgCi0gKiBAcmV0dXJu
IHRoZSBJQ1UgZGVmYXVsdCBsb2NhbGUKLSAqIEBzeXN0ZW0KLSAqIEBzdGFibGUgSUNVIDIuMAot
ICovCi1VX1NUQUJMRSBjb25zdCBjaGFyKiBVX0VYUE9SVDIKLXVsb2NfZ2V0RGVmYXVsdCh2b2lk
KTsKLQotLyoqCi0gKiBTZXRzIElDVSdzIGRlZmF1bHQgbG9jYWxlLiAgCi0gKiAgICBCeSBkZWZh
dWx0ICh3aXRob3V0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiksIElDVSdzIGRlZmF1bHQgbG9jYWxl
IHdpbGwgYmUgYmFzZWQKLSAqICAgIG9uIGluZm9ybWF0aW9uIG9idGFpbmVkIGZyb20gdGhlIHVu
ZGVybHlpbmcgc3lzdGVtIGVudmlyb25tZW50LgotICogICAgPHA+Ci0gKiAgICBDaGFuZ2VzIHRv
IElDVSdzIGRlZmF1bHQgbG9jYWxlIGRvIG5vdCBwcm9wYWdhdGUgYmFjayB0byB0aGUKLSAqICAg
IHN5c3RlbSBlbnZpcm9ubWVudC4KLSAqICAgIDxwPgotICogICAgQ2hhbmdlcyB0byBJQ1UncyBk
ZWZhdWx0IGxvY2FsZSB0byBub3QgYWZmZWN0IGFueSBJQ1Ugc2VydmljZXMgdGhhdAotICogICAg
bWF5IGFscmVhZHkgYmUgb3BlbiBiYXNlZCBvbiB0aGUgcHJldmlvdXMgZGVmYXVsdCBsb2NhbGUg
dmFsdWUuCi0gKgotICogQHBhcmFtIGxvY2FsZUlEIHRoZSBuZXcgSUNVIGRlZmF1bHQgbG9jYWxl
LiBBIHZhbHVlIG9mIE5VTEwgd2lsbCB0cnkgdG8gZ2V0Ci0gKiAgICAgICAgICAgICAgICAgdGhl
IHN5c3RlbSdzIGRlZmF1bHQgbG9jYWxlLgotICogQHBhcmFtIHN0YXR1cyB0aGUgZXJyb3IgaW5m
b3JtYXRpb24gaWYgdGhlIHNldHRpbmcgb2YgZGVmYXVsdCBsb2NhbGUgZmFpbHMKLSAqIEBzeXN0
ZW0KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgotdWxv
Y19zZXREZWZhdWx0KGNvbnN0IGNoYXIqIGxvY2FsZUlELAotICAgICAgICBVRXJyb3JDb2RlKiAg
ICAgICBzdGF0dXMpOwotI2VuZGlmICAvKiBVX0hJREVfU1lTVEVNX0FQSSAqLwotCi0vKioKLSAq
IEdldHMgdGhlIGxhbmd1YWdlIGNvZGUgZm9yIHRoZSBzcGVjaWZpZWQgbG9jYWxlLgotICoKLSAq
IEBwYXJhbSBsb2NhbGVJRCB0aGUgbG9jYWxlIHRvIGdldCB0aGUgSVNPIGxhbmd1YWdlIGNvZGUg
d2l0aAotICogQHBhcmFtIGxhbmd1YWdlIHRoZSBsYW5ndWFnZSBjb2RlIGZvciBsb2NhbGVJRAot
ICogQHBhcmFtIGxhbmd1YWdlQ2FwYWNpdHkgdGhlIHNpemUgb2YgdGhlIGxhbmd1YWdlIGJ1ZmZl
ciB0byBzdG9yZSB0aGUgIAotICogbGFuZ3VhZ2UgY29kZSB3aXRoCi0gKiBAcGFyYW0gZXJyIGVy
cm9yIGluZm9ybWF0aW9uIGlmIHJldHJpZXZpbmcgdGhlIGxhbmd1YWdlIGNvZGUgZmFpbGVkCi0g
KiBAcmV0dXJuIHRoZSBhY3R1YWwgYnVmZmVyIHNpemUgbmVlZGVkIGZvciB0aGUgbGFuZ3VhZ2Ug
Y29kZS4gIElmIGl0J3MgZ3JlYXRlciAKLSAqIHRoYW4gbGFuZ3VhZ2VDYXBhY2l0eSwgdGhlIHJl
dHVybmVkIGxhbmd1YWdlIGNvZGUgd2lsbCBiZSB0cnVuY2F0ZWQuICAKLSAqIEBzdGFibGUgSUNV
IDIuMAotICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgotdWxvY19nZXRMYW5ndWFnZShj
b25zdCBjaGFyKiAgICBsb2NhbGVJRCwKLSAgICAgICAgIGNoYXIqIGxhbmd1YWdlLAotICAgICAg
ICAgaW50MzJfdCBsYW5ndWFnZUNhcGFjaXR5LAotICAgICAgICAgVUVycm9yQ29kZSogZXJyKTsK
LQotLyoqCi0gKiBHZXRzIHRoZSBzY3JpcHQgY29kZSBmb3IgdGhlIHNwZWNpZmllZCBsb2NhbGUu
Ci0gKgotICogQHBhcmFtIGxvY2FsZUlEIHRoZSBsb2NhbGUgdG8gZ2V0IHRoZSBJU08gbGFuZ3Vh
Z2UgY29kZSB3aXRoCi0gKiBAcGFyYW0gc2NyaXB0IHRoZSBsYW5ndWFnZSBjb2RlIGZvciBsb2Nh
bGVJRAotICogQHBhcmFtIHNjcmlwdENhcGFjaXR5IHRoZSBzaXplIG9mIHRoZSBsYW5ndWFnZSBi
dWZmZXIgdG8gc3RvcmUgdGhlICAKLSAqIGxhbmd1YWdlIGNvZGUgd2l0aAotICogQHBhcmFtIGVy
ciBlcnJvciBpbmZvcm1hdGlvbiBpZiByZXRyaWV2aW5nIHRoZSBsYW5ndWFnZSBjb2RlIGZhaWxl
ZAotICogQHJldHVybiB0aGUgYWN0dWFsIGJ1ZmZlciBzaXplIG5lZWRlZCBmb3IgdGhlIGxhbmd1
YWdlIGNvZGUuICBJZiBpdCdzIGdyZWF0ZXIgCi0gKiB0aGFuIHNjcmlwdENhcGFjaXR5LCB0aGUg
cmV0dXJuZWQgbGFuZ3VhZ2UgY29kZSB3aWxsIGJlIHRydW5jYXRlZC4gIAotICogQHN0YWJsZSBJ
Q1UgMi44Ci0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCi11bG9jX2dldFNjcmlwdChj
b25zdCBjaGFyKiAgICBsb2NhbGVJRCwKLSAgICAgICAgIGNoYXIqIHNjcmlwdCwKLSAgICAgICAg
IGludDMyX3Qgc2NyaXB0Q2FwYWNpdHksCi0gICAgICAgICBVRXJyb3JDb2RlKiBlcnIpOwotCi0v
KioKLSAqIEdldHMgdGhlICBjb3VudHJ5IGNvZGUgZm9yIHRoZSBzcGVjaWZpZWQgbG9jYWxlLgot
ICoKLSAqIEBwYXJhbSBsb2NhbGVJRCB0aGUgbG9jYWxlIHRvIGdldCB0aGUgY291bnRyeSBjb2Rl
IHdpdGgKLSAqIEBwYXJhbSBjb3VudHJ5IHRoZSBjb3VudHJ5IGNvZGUgZm9yIGxvY2FsZUlECi0g
KiBAcGFyYW0gY291bnRyeUNhcGFjaXR5IHRoZSBzaXplIG9mIHRoZSBjb3VudHJ5IGJ1ZmZlciB0
byBzdG9yZSB0aGUgIAotICogY291bnRyeSBjb2RlIHdpdGgKLSAqIEBwYXJhbSBlcnIgZXJyb3Ig
aW5mb3JtYXRpb24gaWYgcmV0cmlldmluZyB0aGUgY291bnRyeSBjb2RlIGZhaWxlZAotICogQHJl
dHVybiB0aGUgYWN0dWFsIGJ1ZmZlciBzaXplIG5lZWRlZCBmb3IgdGhlIGNvdW50cnkgY29kZS4g
IElmIGl0J3MgZ3JlYXRlciAKLSAqIHRoYW4gY291bnRyeUNhcGFjaXR5LCB0aGUgcmV0dXJuZWQg
Y291bnRyeSBjb2RlIHdpbGwgYmUgdHJ1bmNhdGVkLiAgCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAq
LwotVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKLXVsb2NfZ2V0Q291bnRyeShjb25zdCBjaGFy
KiAgICBsb2NhbGVJRCwKLSAgICAgICAgY2hhciogY291bnRyeSwKLSAgICAgICAgaW50MzJfdCBj
b3VudHJ5Q2FwYWNpdHksCi0gICAgICAgIFVFcnJvckNvZGUqIGVycik7Ci0KLS8qKgotICogR2V0
cyB0aGUgdmFyaWFudCBjb2RlIGZvciB0aGUgc3BlY2lmaWVkIGxvY2FsZS4KLSAqCi0gKiBAcGFy
YW0gbG9jYWxlSUQgdGhlIGxvY2FsZSB0byBnZXQgdGhlIHZhcmlhbnQgY29kZSB3aXRoCi0gKiBA
cGFyYW0gdmFyaWFudCB0aGUgdmFyaWFudCBjb2RlIGZvciBsb2NhbGVJRAotICogQHBhcmFtIHZh
cmlhbnRDYXBhY2l0eSB0aGUgc2l6ZSBvZiB0aGUgdmFyaWFudCBidWZmZXIgdG8gc3RvcmUgdGhl
IAotICogdmFyaWFudCBjb2RlIHdpdGgKLSAqIEBwYXJhbSBlcnIgZXJyb3IgaW5mb3JtYXRpb24g
aWYgcmV0cmlldmluZyB0aGUgdmFyaWFudCBjb2RlIGZhaWxlZAotICogQHJldHVybiB0aGUgYWN0
dWFsIGJ1ZmZlciBzaXplIG5lZWRlZCBmb3IgdGhlIHZhcmlhbnQgY29kZS4gIElmIGl0J3MgZ3Jl
YXRlciAKLSAqIHRoYW4gdmFyaWFudENhcGFjaXR5LCB0aGUgcmV0dXJuZWQgdmFyaWFudCBjb2Rl
IHdpbGwgYmUgdHJ1bmNhdGVkLiAgCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUg
aW50MzJfdCBVX0VYUE9SVDIKLXVsb2NfZ2V0VmFyaWFudChjb25zdCBjaGFyKiAgICBsb2NhbGVJ
RCwKLSAgICAgICAgY2hhciogdmFyaWFudCwKLSAgICAgICAgaW50MzJfdCB2YXJpYW50Q2FwYWNp
dHksCi0gICAgICAgIFVFcnJvckNvZGUqIGVycik7Ci0KLQotLyoqCi0gKiBHZXRzIHRoZSBmdWxs
IG5hbWUgZm9yIHRoZSBzcGVjaWZpZWQgbG9jYWxlLgotICogTm90ZTogVGhpcyBoYXMgdGhlIGVm
ZmVjdCBvZiAnY2Fub25pY2FsaXppbmcnIHRoZSBJQ1UgbG9jYWxlIElEIHRvCi0gKiBhIGNlcnRh
aW4gZXh0ZW50LiBVcHBlciBhbmQgbG93ZXIgY2FzZSBhcmUgc2V0IGFzIG5lZWRlZC4KLSAqIEl0
IGRvZXMgTk9UIG1hcCBhbGlhc2VkIG5hbWVzIGluIGFueSB3YXkuCi0gKiBTZWUgdGhlIHRvcCBv
ZiB0aGlzIGhlYWRlciBmaWxlLgotICogVGhpcyBBUEkgc3VwcG9ydHMgcHJlZmxpZ2h0aW5nLgot
ICoKLSAqIEBwYXJhbSBsb2NhbGVJRCB0aGUgbG9jYWxlIHRvIGdldCB0aGUgZnVsbCBuYW1lIHdp
dGgKLSAqIEBwYXJhbSBuYW1lIGZpbGwgaW4gYnVmZmVyIGZvciB0aGUgbmFtZSB3aXRob3V0IGtl
eXdvcmRzLgotICogQHBhcmFtIG5hbWVDYXBhY2l0eSBjYXBhY2l0eSBvZiB0aGUgZmlsbCBpbiBi
dWZmZXIuCi0gKiBAcGFyYW0gZXJyIGVycm9yIGluZm9ybWF0aW9uIGlmIHJldHJpZXZpbmcgdGhl
IGZ1bGwgbmFtZSBmYWlsZWQKLSAqIEByZXR1cm4gdGhlIGFjdHVhbCBidWZmZXIgc2l6ZSBuZWVk
ZWQgZm9yIHRoZSBmdWxsIG5hbWUuICBJZiBpdCdzIGdyZWF0ZXIgCi0gKiB0aGFuIG5hbWVDYXBh
Y2l0eSwgdGhlIHJldHVybmVkIGZ1bGwgbmFtZSB3aWxsIGJlIHRydW5jYXRlZC4gIAotICogQHN0
YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCi11bG9jX2dldE5h
bWUoY29uc3QgY2hhciogICAgbG9jYWxlSUQsCi0gICAgICAgICBjaGFyKiBuYW1lLAotICAgICAg
ICAgaW50MzJfdCBuYW1lQ2FwYWNpdHksCi0gICAgICAgICBVRXJyb3JDb2RlKiBlcnIpOwotCi0v
KioKLSAqIEdldHMgdGhlIGZ1bGwgbmFtZSBmb3IgdGhlIHNwZWNpZmllZCBsb2NhbGUuCi0gKiBO
b3RlOiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mICdjYW5vbmljYWxpemluZycgdGhlIHN0cmluZyB0
bwotICogYSBjZXJ0YWluIGV4dGVudC4gVXBwZXIgYW5kIGxvd2VyIGNhc2UgYXJlIHNldCBhcyBu
ZWVkZWQsCi0gKiBhbmQgaWYgdGhlIGNvbXBvbmVudHMgd2VyZSBpbiAnUE9TSVgnIGZvcm1hdCB0
aGV5IGFyZSBjaGFuZ2VkIHRvCi0gKiBJQ1UgZm9ybWF0LiAgSXQgZG9lcyBOT1QgbWFwIGFsaWFz
ZWQgbmFtZXMgaW4gYW55IHdheS4KLSAqIFNlZSB0aGUgdG9wIG9mIHRoaXMgaGVhZGVyIGZpbGUu
Ci0gKgotICogQHBhcmFtIGxvY2FsZUlEIHRoZSBsb2NhbGUgdG8gZ2V0IHRoZSBmdWxsIG5hbWUg
d2l0aAotICogQHBhcmFtIG5hbWUgdGhlIGZ1bGwgbmFtZSBmb3IgbG9jYWxlSUQKLSAqIEBwYXJh
bSBuYW1lQ2FwYWNpdHkgdGhlIHNpemUgb2YgdGhlIG5hbWUgYnVmZmVyIHRvIHN0b3JlIHRoZSAK
LSAqIGZ1bGwgbmFtZSB3aXRoCi0gKiBAcGFyYW0gZXJyIGVycm9yIGluZm9ybWF0aW9uIGlmIHJl
dHJpZXZpbmcgdGhlIGZ1bGwgbmFtZSBmYWlsZWQKLSAqIEByZXR1cm4gdGhlIGFjdHVhbCBidWZm
ZXIgc2l6ZSBuZWVkZWQgZm9yIHRoZSBmdWxsIG5hbWUuICBJZiBpdCdzIGdyZWF0ZXIgCi0gKiB0
aGFuIG5hbWVDYXBhY2l0eSwgdGhlIHJldHVybmVkIGZ1bGwgbmFtZSB3aWxsIGJlIHRydW5jYXRl
ZC4gIAotICogQHN0YWJsZSBJQ1UgMi44Ci0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQy
Ci11bG9jX2Nhbm9uaWNhbGl6ZShjb25zdCBjaGFyKiAgICBsb2NhbGVJRCwKLSAgICAgICAgIGNo
YXIqIG5hbWUsCi0gICAgICAgICBpbnQzMl90IG5hbWVDYXBhY2l0eSwKLSAgICAgICAgIFVFcnJv
ckNvZGUqIGVycik7Ci0KLS8qKgotICogR2V0cyB0aGUgSVNPIGxhbmd1YWdlIGNvZGUgZm9yIHRo
ZSBzcGVjaWZpZWQgbG9jYWxlLgotICoKLSAqIEBwYXJhbSBsb2NhbGVJRCB0aGUgbG9jYWxlIHRv
IGdldCB0aGUgSVNPIGxhbmd1YWdlIGNvZGUgd2l0aAotICogQHJldHVybiBsYW5ndWFnZSB0aGUg
SVNPIGxhbmd1YWdlIGNvZGUgZm9yIGxvY2FsZUlECi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwot
VV9TVEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQyCi11bG9jX2dldElTTzNMYW5ndWFnZShjb25z
dCBjaGFyKiBsb2NhbGVJRCk7Ci0KLQotLyoqCi0gKiBHZXRzIHRoZSBJU08gY291bnRyeSBjb2Rl
IGZvciB0aGUgc3BlY2lmaWVkIGxvY2FsZS4KLSAqCi0gKiBAcGFyYW0gbG9jYWxlSUQgdGhlIGxv
Y2FsZSB0byBnZXQgdGhlIElTTyBjb3VudHJ5IGNvZGUgd2l0aAotICogQHJldHVybiBjb3VudHJ5
IHRoZSBJU08gY291bnRyeSBjb2RlIGZvciBsb2NhbGVJRAotICogQHN0YWJsZSBJQ1UgMi4wCi0g
Ki8KLVVfU1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQT1JUMgotdWxvY19nZXRJU08zQ291bnRyeShj
b25zdCBjaGFyKiBsb2NhbGVJRCk7Ci0KLS8qKgotICogR2V0cyB0aGUgV2luMzIgTENJRCB2YWx1
ZSBmb3IgdGhlIHNwZWNpZmllZCBsb2NhbGUuCi0gKiBJZiB0aGUgSUNVIGxvY2FsZSBpcyBub3Qg
cmVjb2duaXplZCBieSBXaW5kb3dzLCAwIHdpbGwgYmUgcmV0dXJuZWQuCi0gKgotICogQHBhcmFt
IGxvY2FsZUlEIHRoZSBsb2NhbGUgdG8gZ2V0IHRoZSBXaW4zMiBMQ0lEIHZhbHVlIHdpdGgKLSAq
IEByZXR1cm4gY291bnRyeSB0aGUgV2luMzIgTENJRCBmb3IgbG9jYWxlSUQKLSAqIEBzdGFibGUg
SUNVIDIuMAotICovCi1VX1NUQUJMRSB1aW50MzJfdCBVX0VYUE9SVDIKLXVsb2NfZ2V0TENJRChj
b25zdCBjaGFyKiBsb2NhbGVJRCk7Ci0KLS8qKgotICogR2V0cyB0aGUgbGFuZ3VhZ2UgbmFtZSBz
dWl0YWJsZSBmb3IgZGlzcGxheSBmb3IgdGhlIHNwZWNpZmllZCBsb2NhbGUuCi0gKgotICogQHBh
cmFtIGxvY2FsZSB0aGUgbG9jYWxlIHRvIGdldCB0aGUgSVNPIGxhbmd1YWdlIGNvZGUgd2l0aAot
ICogQHBhcmFtIGRpc3BsYXlMb2NhbGUgU3BlY2lmaWVzIHRoZSBsb2NhbGUgdG8gYmUgdXNlZCB0
byBkaXNwbGF5IHRoZSBuYW1lLiAgSW4gb3RoZXIgd29yZHMsCi0gKiAgICAgICAgICAgICAgICAg
aWYgdGhlIGxvY2FsZSdzIGxhbmd1YWdlIGNvZGUgaXMgImVuIiwgcGFzc2luZyBMb2NhbGU6Omdl
dEZyZW5jaCgpIGZvcgotICogICAgICAgICAgICAgICAgIGluTG9jYWxlIHdvdWxkIHJlc3VsdCBp
biAiQW5nbGFpcyIsIHdoaWxlIHBhc3NpbmcgTG9jYWxlOjpnZXRHZXJtYW4oKQotICogICAgICAg
ICAgICAgICAgIGZvciBpbkxvY2FsZSB3b3VsZCByZXN1bHQgaW4gIkVuZ2xpc2NoIi4KLSAqIEBw
YXJhbSBsYW5ndWFnZSB0aGUgZGlzcGxheWFibGUgbGFuZ3VhZ2UgY29kZSBmb3IgbG9jYWxlSUQK
LSAqIEBwYXJhbSBsYW5ndWFnZUNhcGFjaXR5IHRoZSBzaXplIG9mIHRoZSBsYW5ndWFnZSBidWZm
ZXIgdG8gc3RvcmUgdGhlICAKLSAqIGRpc3BsYXlhYmxlIGxhbmd1YWdlIGNvZGUgd2l0aAotICog
QHBhcmFtIHN0YXR1cyBlcnJvciBpbmZvcm1hdGlvbiBpZiByZXRyaWV2aW5nIHRoZSBkaXNwbGF5
YWJsZSBsYW5ndWFnZSBjb2RlIGZhaWxlZAotICogQHJldHVybiB0aGUgYWN0dWFsIGJ1ZmZlciBz
aXplIG5lZWRlZCBmb3IgdGhlIGRpc3BsYXlhYmxlIGxhbmd1YWdlIGNvZGUuICBJZiBpdCdzIGdy
ZWF0ZXIgCi0gKiB0aGFuIGxhbmd1YWdlQ2FwYWNpdHksIHRoZSByZXR1cm5lZCBsYW5ndWFnZSBj
b2RlIHdpbGwgYmUgdHJ1bmNhdGVkLiAgCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFC
TEUgaW50MzJfdCBVX0VYUE9SVDIKLXVsb2NfZ2V0RGlzcGxheUxhbmd1YWdlKGNvbnN0IGNoYXIq
IGxvY2FsZSwKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRpc3BsYXlMb2NhbGUsCi0gICAgICAg
ICAgICBVQ2hhciogbGFuZ3VhZ2UsCi0gICAgICAgICAgICBpbnQzMl90IGxhbmd1YWdlQ2FwYWNp
dHksCi0gICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOwotCi0vKioKLSAqIEdldHMgdGhl
IHNjcmlwdCBuYW1lIHN1aXRhYmxlIGZvciBkaXNwbGF5IGZvciB0aGUgc3BlY2lmaWVkIGxvY2Fs
ZS4KLSAqCi0gKiBAcGFyYW0gbG9jYWxlIHRoZSBsb2NhbGUgdG8gZ2V0IHRoZSBkaXNwbGF5YWJs
ZSBzY3JpcHQgY29kZSB3aXRoLiBOVUxMIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGRlZmF1
bHQuCi0gKiBAcGFyYW0gZGlzcGxheUxvY2FsZSBTcGVjaWZpZXMgdGhlIGxvY2FsZSB0byBiZSB1
c2VkIHRvIGRpc3BsYXkgdGhlIG5hbWUuICBJbiBvdGhlciB3b3JkcywKLSAqICAgICAgICAgICAg
ICAgICBpZiB0aGUgbG9jYWxlJ3MgbGFuZ3VhZ2UgY29kZSBpcyAiZW4iLCBwYXNzaW5nIExvY2Fs
ZTo6Z2V0RnJlbmNoKCkgZm9yCi0gKiAgICAgICAgICAgICAgICAgaW5Mb2NhbGUgd291bGQgcmVz
dWx0IGluICIiLCB3aGlsZSBwYXNzaW5nIExvY2FsZTo6Z2V0R2VybWFuKCkKLSAqICAgICAgICAg
ICAgICAgICBmb3IgaW5Mb2NhbGUgd291bGQgcmVzdWx0IGluICIiLiBOVUxMIG1heSBiZSB1c2Vk
IHRvIHNwZWNpZnkgdGhlIGRlZmF1bHQuCi0gKiBAcGFyYW0gc2NyaXB0IHRoZSBkaXNwbGF5YWJs
ZSBjb3VudHJ5IGNvZGUgZm9yIGxvY2FsZUlECi0gKiBAcGFyYW0gc2NyaXB0Q2FwYWNpdHkgdGhl
IHNpemUgb2YgdGhlIHNjcmlwdCBidWZmZXIgdG8gc3RvcmUgdGhlICAKLSAqIGRpc3BsYXlhYmxl
IHNjcmlwdCBjb2RlIHdpdGgKLSAqIEBwYXJhbSBzdGF0dXMgZXJyb3IgaW5mb3JtYXRpb24gaWYg
cmV0cmlldmluZyB0aGUgZGlzcGxheWFibGUgc2NyaXB0IGNvZGUgZmFpbGVkCi0gKiBAcmV0dXJu
IHRoZSBhY3R1YWwgYnVmZmVyIHNpemUgbmVlZGVkIGZvciB0aGUgZGlzcGxheWFibGUgc2NyaXB0
IGNvZGUuICBJZiBpdCdzIGdyZWF0ZXIgCi0gKiB0aGFuIHNjcmlwdENhcGFjaXR5LCB0aGUgcmV0
dXJuZWQgZGlzcGxheWFibGUgc2NyaXB0IGNvZGUgd2lsbCBiZSB0cnVuY2F0ZWQuICAKLSAqIEBz
dGFibGUgSUNVIDIuOAotICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgotdWxvY19nZXRE
aXNwbGF5U2NyaXB0KGNvbnN0IGNoYXIqIGxvY2FsZSwKLSAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGRpc3BsYXlMb2NhbGUsCi0gICAgICAgICAgICBVQ2hhciogc2NyaXB0LAotICAgICAgICAgICAg
aW50MzJfdCBzY3JpcHRDYXBhY2l0eSwKLSAgICAgICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7
Ci0KLS8qKgotICogR2V0cyB0aGUgY291bnRyeSBuYW1lIHN1aXRhYmxlIGZvciBkaXNwbGF5IGZv
ciB0aGUgc3BlY2lmaWVkIGxvY2FsZS4KLSAqCi0gKiBAcGFyYW0gbG9jYWxlIHRoZSBsb2NhbGUg
dG8gZ2V0IHRoZSBkaXNwbGF5YWJsZSBjb3VudHJ5IGNvZGUgd2l0aC4gTlVMTCBtYXkgYmUgdXNl
ZCB0byBzcGVjaWZ5IHRoZSBkZWZhdWx0LgotICogQHBhcmFtIGRpc3BsYXlMb2NhbGUgU3BlY2lm
aWVzIHRoZSBsb2NhbGUgdG8gYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBuYW1lLiAgSW4gb3RoZXIg
d29yZHMsCi0gKiAgICAgICAgICAgICAgICAgaWYgdGhlIGxvY2FsZSdzIGxhbmd1YWdlIGNvZGUg
aXMgImVuIiwgcGFzc2luZyBMb2NhbGU6OmdldEZyZW5jaCgpIGZvcgotICogICAgICAgICAgICAg
ICAgIGluTG9jYWxlIHdvdWxkIHJlc3VsdCBpbiAiQW5nbGFpcyIsIHdoaWxlIHBhc3NpbmcgTG9j
YWxlOjpnZXRHZXJtYW4oKQotICogICAgICAgICAgICAgICAgIGZvciBpbkxvY2FsZSB3b3VsZCBy
ZXN1bHQgaW4gIkVuZ2xpc2NoIi4gTlVMTCBtYXkgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBkZWZh
dWx0LgotICogQHBhcmFtIGNvdW50cnkgdGhlIGRpc3BsYXlhYmxlIGNvdW50cnkgY29kZSBmb3Ig
bG9jYWxlSUQKLSAqIEBwYXJhbSBjb3VudHJ5Q2FwYWNpdHkgdGhlIHNpemUgb2YgdGhlIGNvdW50
cnkgYnVmZmVyIHRvIHN0b3JlIHRoZSAgCi0gKiBkaXNwbGF5YWJsZSBjb3VudHJ5IGNvZGUgd2l0
aAotICogQHBhcmFtIHN0YXR1cyBlcnJvciBpbmZvcm1hdGlvbiBpZiByZXRyaWV2aW5nIHRoZSBk
aXNwbGF5YWJsZSBjb3VudHJ5IGNvZGUgZmFpbGVkCi0gKiBAcmV0dXJuIHRoZSBhY3R1YWwgYnVm
ZmVyIHNpemUgbmVlZGVkIGZvciB0aGUgZGlzcGxheWFibGUgY291bnRyeSBjb2RlLiAgSWYgaXQn
cyBncmVhdGVyIAotICogdGhhbiBjb3VudHJ5Q2FwYWNpdHksIHRoZSByZXR1cm5lZCBkaXNwbGF5
YWJsZSBjb3VudHJ5IGNvZGUgd2lsbCBiZSB0cnVuY2F0ZWQuICAKLSAqIEBzdGFibGUgSUNVIDIu
MAotICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgotdWxvY19nZXREaXNwbGF5Q291bnRy
eShjb25zdCBjaGFyKiBsb2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGRpc3BsYXlMb2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgIFVDaGFyKiBjb3VudHJ5LAot
ICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGNvdW50cnlDYXBhY2l0eSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgVUVycm9yQ29kZSogc3RhdHVzKTsKLQotCi0vKioKLSAqIEdldHMgdGhl
IHZhcmlhbnQgbmFtZSBzdWl0YWJsZSBmb3IgZGlzcGxheSBmb3IgdGhlIHNwZWNpZmllZCBsb2Nh
bGUuCi0gKgotICogQHBhcmFtIGxvY2FsZSB0aGUgbG9jYWxlIHRvIGdldCB0aGUgZGlzcGxheWFi
bGUgdmFyaWFudCBjb2RlIHdpdGguIE5VTEwgbWF5IGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZGVm
YXVsdC4KLSAqIEBwYXJhbSBkaXNwbGF5TG9jYWxlIFNwZWNpZmllcyB0aGUgbG9jYWxlIHRvIGJl
IHVzZWQgdG8gZGlzcGxheSB0aGUgbmFtZS4gIEluIG90aGVyIHdvcmRzLAotICogICAgICAgICAg
ICAgICAgIGlmIHRoZSBsb2NhbGUncyBsYW5ndWFnZSBjb2RlIGlzICJlbiIsIHBhc3NpbmcgTG9j
YWxlOjpnZXRGcmVuY2goKSBmb3IKLSAqICAgICAgICAgICAgICAgICBpbkxvY2FsZSB3b3VsZCBy
ZXN1bHQgaW4gIkFuZ2xhaXMiLCB3aGlsZSBwYXNzaW5nIExvY2FsZTo6Z2V0R2VybWFuKCkKLSAq
ICAgICAgICAgICAgICAgICBmb3IgaW5Mb2NhbGUgd291bGQgcmVzdWx0IGluICJFbmdsaXNjaCIu
IE5VTEwgbWF5IGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZGVmYXVsdC4KLSAqIEBwYXJhbSB2YXJp
YW50IHRoZSBkaXNwbGF5YWJsZSB2YXJpYW50IGNvZGUgZm9yIGxvY2FsZUlECi0gKiBAcGFyYW0g
dmFyaWFudENhcGFjaXR5IHRoZSBzaXplIG9mIHRoZSB2YXJpYW50IGJ1ZmZlciB0byBzdG9yZSB0
aGUgCi0gKiBkaXNwbGF5YWJsZSB2YXJpYW50IGNvZGUgd2l0aAotICogQHBhcmFtIHN0YXR1cyBl
cnJvciBpbmZvcm1hdGlvbiBpZiByZXRyaWV2aW5nIHRoZSBkaXNwbGF5YWJsZSB2YXJpYW50IGNv
ZGUgZmFpbGVkCi0gKiBAcmV0dXJuIHRoZSBhY3R1YWwgYnVmZmVyIHNpemUgbmVlZGVkIGZvciB0
aGUgZGlzcGxheWFibGUgdmFyaWFudCBjb2RlLiAgSWYgaXQncyBncmVhdGVyIAotICogdGhhbiB2
YXJpYW50Q2FwYWNpdHksIHRoZSByZXR1cm5lZCBkaXNwbGF5YWJsZSB2YXJpYW50IGNvZGUgd2ls
bCBiZSB0cnVuY2F0ZWQuICAKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBpbnQz
Ml90IFVfRVhQT1JUMgotdWxvY19nZXREaXNwbGF5VmFyaWFudChjb25zdCBjaGFyKiBsb2NhbGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRpc3BsYXlMb2NhbGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgIFVDaGFyKiB2YXJpYW50LAotICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90IHZhcmlhbnRDYXBhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgVUVycm9y
Q29kZSogc3RhdHVzKTsKLQotLyoqCi0gKiBHZXRzIHRoZSBrZXl3b3JkIG5hbWUgc3VpdGFibGUg
Zm9yIGRpc3BsYXkgZm9yIHRoZSBzcGVjaWZpZWQgbG9jYWxlLgotICogRS5nOiBmb3IgdGhlIGxv
Y2FsZSBzdHJpbmcgZGVfREVcQGNvbGxhdGlvbj1QSE9ORUJPT0ssIHRoaXMgQVBJIGdldHMgdGhl
IGRpc3BsYXkgCi0gKiBzdHJpbmcgZm9yIHRoZSBrZXl3b3JkIGNvbGxhdGlvbi4gCi0gKiBVc2Fn
ZToKLSAqIDxjb2RlPgotICogICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0g
KiAgICBjb25zdCBjaGFyKiBrZXl3b3JkID1OVUxMOwotICogICAgaW50MzJfdCBrZXl3b3JkTGVu
ID0gMDsKLSAqICAgIGludDMyX3Qga2V5d29yZENvdW50ID0gMDsKLSAqICAgIFVDaGFyIGRpc3Bs
YXlLZXl3b3JkWzI1Nl07Ci0gKiAgICBpbnQzMl90IGRpc3BsYXlLZXl3b3JkTGVuID0gMDsKLSAq
ICAgIFVFbnVtZXJhdGlvbioga2V5d29yZEVudW0gPSB1bG9jX29wZW5LZXl3b3JkcygiZGVfREVA
Y29sbGF0aW9uPVBIT05FQk9PSztjYWxlbmRhcj1UUkFESVRJT05BTCIsICZzdGF0dXMpOwotICog
ICAgZm9yKGtleXdvcmRDb3VudCA9IHVlbnVtX2NvdW50KGtleXdvcmRFbnVtLCAmc3RhdHVzKTsg
a2V5d29yZENvdW50ID4gMCA7IGtleXdvcmRDb3VudC0tKXsKLSAqICAgICAgICAgIGlmKFVfRkFJ
TFVSRShzdGF0dXMpKXsKLSAqICAgICAgICAgICAgICAuLi5zb21ldGhpbmcgd2VudCB3cm9uZyBz
byBoYW5kbGUgdGhlIGVycm9yLi4uCi0gKiAgICAgICAgICAgICAgYnJlYWs7Ci0gKiAgICAgICAg
ICB9Ci0gKiAgICAgICAgICAvLyB0aGUgdWVudW1fbmV4dCByZXR1cm5zIE5VTCB0ZXJtaW5hdGVk
IHN0cmluZwotICogICAgICAgICAga2V5d29yZCA9IHVlbnVtX25leHQoa2V5d29yZEVudW0sICZr
ZXl3b3JkTGVuLCAmc3RhdHVzKTsKLSAqICAgICAgICAgIGRpc3BsYXlLZXl3b3JkTGVuID0gdWxv
Y19nZXREaXNwbGF5S2V5d29yZChrZXl3b3JkLCAiZW5fVVMiLCBkaXNwbGF5S2V5d29yZCwgMjU2
KTsKLSAqICAgICAgICAgIC4uLiBkbyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgLi4uLi4KLSAqICAg
IH0KLSAqICAgIHVlbnVtX2Nsb3NlKGtleXdvcmRFbnVtKTsKLSAqIDwvY29kZT4KLSAqIEBwYXJh
bSBrZXl3b3JkICAgICAgICAgICBUaGUga2V5d29yZCB3aG9zZSBkaXNwbGF5IHN0cmluZyBuZWVk
cyB0byBiZSByZXR1cm5lZC4KLSAqIEBwYXJhbSBkaXNwbGF5TG9jYWxlICAgICBTcGVjaWZpZXMg
dGhlIGxvY2FsZSB0byBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIG5hbWUuICBJbiBvdGhlciB3b3Jk
cywKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgbG9jYWxlJ3MgbGFuZ3VhZ2Ug
Y29kZSBpcyAiZW4iLCBwYXNzaW5nIExvY2FsZTo6Z2V0RnJlbmNoKCkgZm9yCi0gKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5Mb2NhbGUgd291bGQgcmVzdWx0IGluICJBbmdsYWlzIiwgd2hp
bGUgcGFzc2luZyBMb2NhbGU6OmdldEdlcm1hbigpCi0gKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIGluTG9jYWxlIHdvdWxkIHJlc3VsdCBpbiAiRW5nbGlzY2giLiBOVUxMIG1heSBiZSB1
c2VkIHRvIHNwZWNpZnkgdGhlIGRlZmF1bHQuCi0gKiBAcGFyYW0gZGVzdCAgICAgICAgICAgICAg
dGhlIGJ1ZmZlciB0byB3aGljaCB0aGUgZGlzcGxheWFibGUga2V5d29yZCBzaG91bGQgYmUgd3Jp
dHRlbi4KLSAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgICAgICBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVy
IChudW1iZXIgb2YgVUNoYXJzKS4gSWYgaXQgaXMgMCwgdGhlbgotICogICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3QgbWF5IGJlIE5VTEwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0
dXJuIHRoZSBsZW5ndGggb2YgdGhlIAotICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCB3aXRob3V0IHdyaXRpbmcgYW55IG9mIHRoZSByZXN1bHQgc3RyaW5nIChwcmUtZmxpZ2h0aW5n
KS4KLSAqIEBwYXJhbSBzdGF0dXMgICAgICAgICAgICBlcnJvciBpbmZvcm1hdGlvbiBpZiByZXRy
aWV2aW5nIHRoZSBkaXNwbGF5YWJsZSBzdHJpbmcgZmFpbGVkLiAKLSAqICAgICAgICAgICAgICAg
ICAgICAgICAgICBTaG91bGQgbm90IGJlIE5VTEwgYW5kIHNob3VsZCBub3QgaW5kaWNhdGUgZmFp
bHVyZSBvbiBlbnRyeS4KLSAqIEByZXR1cm4gdGhlIGFjdHVhbCBidWZmZXIgc2l6ZSBuZWVkZWQg
Zm9yIHRoZSBkaXNwbGF5YWJsZSB2YXJpYW50IGNvZGUuICAKLSAqIEBzZWUgI3Vsb2Nfb3Blbktl
eXdvcmRzCi0gKiBAc3RhYmxlIElDVSAyLjgKLSAqLwotVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9S
VDIKLXVsb2NfZ2V0RGlzcGxheUtleXdvcmQoY29uc3QgY2hhcioga2V5d29yZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogZGlzcGxheUxvY2FsZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgVUNoYXIqIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgZGVz
dENhcGFjaXR5LAotICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOwot
LyoqCi0gKiBHZXRzIHRoZSB2YWx1ZSBvZiB0aGUga2V5d29yZCBzdWl0YWJsZSBmb3IgZGlzcGxh
eSBmb3IgdGhlIHNwZWNpZmllZCBsb2NhbGUuCi0gKiBFLmc6IGZvciB0aGUgbG9jYWxlIHN0cmlu
ZyBkZV9ERVxAY29sbGF0aW9uPVBIT05FQk9PSywgdGhpcyBBUEkgZ2V0cyB0aGUgZGlzcGxheSAK
LSAqIHN0cmluZyBmb3IgUEhPTkVCT09LLCBpbiB0aGUgZGlzcGxheSBsb2NhbGUsIHdoZW4gImNv
bGxhdGlvbiIgaXMgc3BlY2lmaWVkIGFzIHRoZSBrZXl3b3JkLgotICoKLSAqIEBwYXJhbSBsb2Nh
bGUgICAgICAgICAgICBUaGUgbG9jYWxlIHRvIGdldCB0aGUgZGlzcGxheWFibGUgdmFyaWFudCBj
b2RlIHdpdGguIE5VTEwgbWF5IGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZGVmYXVsdC4KLSAqIEBw
YXJhbSBrZXl3b3JkICAgICAgICAgICBUaGUga2V5d29yZCBmb3Igd2hvc2UgdmFsdWUgc2hvdWxk
IGJlIHVzZWQuCi0gKiBAcGFyYW0gZGlzcGxheUxvY2FsZSAgICAgU3BlY2lmaWVzIHRoZSBsb2Nh
bGUgdG8gYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBuYW1lLiAgSW4gb3RoZXIgd29yZHMsCi0gKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIGxvY2FsZSdzIGxhbmd1YWdlIGNvZGUgaXMg
ImVuIiwgcGFzc2luZyBMb2NhbGU6OmdldEZyZW5jaCgpIGZvcgotICogICAgICAgICAgICAgICAg
ICAgICAgICAgIGluTG9jYWxlIHdvdWxkIHJlc3VsdCBpbiAiQW5nbGFpcyIsIHdoaWxlIHBhc3Np
bmcgTG9jYWxlOjpnZXRHZXJtYW4oKQotICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBp
bkxvY2FsZSB3b3VsZCByZXN1bHQgaW4gIkVuZ2xpc2NoIi4gTlVMTCBtYXkgYmUgdXNlZCB0byBz
cGVjaWZ5IHRoZSBkZWZhdWx0LgotICogQHBhcmFtIGRlc3QgICAgICAgICAgICAgIHRoZSBidWZm
ZXIgdG8gd2hpY2ggdGhlIGRpc3BsYXlhYmxlIGtleXdvcmQgc2hvdWxkIGJlIHdyaXR0ZW4uCi0g
KiBAcGFyYW0gZGVzdENhcGFjaXR5ICAgICAgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAobnVtYmVy
IG9mIFVDaGFycykuIElmIGl0IGlzIDAsIHRoZW4KLSAqICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0IG1heSBiZSBOVUxMIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBvbmx5IHJldHVybiB0aGUg
bGVuZ3RoIG9mIHRoZSAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgd2l0aG91
dCB3cml0aW5nIGFueSBvZiB0aGUgcmVzdWx0IHN0cmluZyAocHJlLWZsaWdodGluZykuCi0gKiBA
cGFyYW0gc3RhdHVzICAgICAgICAgICAgZXJyb3IgaW5mb3JtYXRpb24gaWYgcmV0cmlldmluZyB0
aGUgZGlzcGxheWFibGUgc3RyaW5nIGZhaWxlZC4gCi0gKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgU2hvdWxkIG5vdCBiZSBOVUxMIGFuZCBtdXN0IG5vdCBpbmRpY2F0ZSBmYWlsdXJlIG9uIGVu
dHJ5LgotICogQHJldHVybiB0aGUgYWN0dWFsIGJ1ZmZlciBzaXplIG5lZWRlZCBmb3IgdGhlIGRp
c3BsYXlhYmxlIHZhcmlhbnQgY29kZS4gIAotICogQHN0YWJsZSBJQ1UgMi44Ci0gKi8KLVVfU1RB
QkxFIGludDMyX3QgVV9FWFBPUlQyCi11bG9jX2dldERpc3BsYXlLZXl3b3JkVmFsdWUoICAgY29u
c3QgY2hhciogbG9jYWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGtleXdvcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
ZGlzcGxheUxvY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciogZGVz
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGRlc3RDYXBhY2l0eSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOwotLyoq
Ci0gKiBHZXRzIHRoZSBmdWxsIG5hbWUgc3VpdGFibGUgZm9yIGRpc3BsYXkgZm9yIHRoZSBzcGVj
aWZpZWQgbG9jYWxlLgotICoKLSAqIEBwYXJhbSBsb2NhbGVJRCB0aGUgbG9jYWxlIHRvIGdldCB0
aGUgZGlzcGxheWFibGUgbmFtZSB3aXRoLiBOVUxMIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhl
IGRlZmF1bHQuCi0gKiBAcGFyYW0gaW5Mb2NhbGVJRCBTcGVjaWZpZXMgdGhlIGxvY2FsZSB0byBi
ZSB1c2VkIHRvIGRpc3BsYXkgdGhlIG5hbWUuICBJbiBvdGhlciB3b3JkcywKLSAqICAgICAgICAg
ICAgICAgICAgIGlmIHRoZSBsb2NhbGUncyBsYW5ndWFnZSBjb2RlIGlzICJlbiIsIHBhc3Npbmcg
TG9jYWxlOjpnZXRGcmVuY2goKSBmb3IKLSAqICAgICAgICAgICAgICAgICAgIGluTG9jYWxlIHdv
dWxkIHJlc3VsdCBpbiAiQW5nbGFpcyIsIHdoaWxlIHBhc3NpbmcgTG9jYWxlOjpnZXRHZXJtYW4o
KQotICogICAgICAgICAgICAgICAgICAgZm9yIGluTG9jYWxlIHdvdWxkIHJlc3VsdCBpbiAiRW5n
bGlzY2giLiBOVUxMIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGRlZmF1bHQuCi0gKiBAcGFy
YW0gcmVzdWx0IHRoZSBkaXNwbGF5YWJsZSBuYW1lIGZvciBsb2NhbGVJRAotICogQHBhcmFtIG1h
eFJlc3VsdFNpemUgdGhlIHNpemUgb2YgdGhlIG5hbWUgYnVmZmVyIHRvIHN0b3JlIHRoZSAKLSAq
IGRpc3BsYXlhYmxlIGZ1bGwgbmFtZSB3aXRoCi0gKiBAcGFyYW0gZXJyIGVycm9yIGluZm9ybWF0
aW9uIGlmIHJldHJpZXZpbmcgdGhlIGRpc3BsYXlhYmxlIG5hbWUgZmFpbGVkCi0gKiBAcmV0dXJu
IHRoZSBhY3R1YWwgYnVmZmVyIHNpemUgbmVlZGVkIGZvciB0aGUgZGlzcGxheWFibGUgbmFtZS4g
IElmIGl0J3MgZ3JlYXRlciAKLSAqIHRoYW4gbWF4UmVzdWx0U2l6ZSwgdGhlIHJldHVybmVkIGRp
c3BsYXlhYmxlIG5hbWUgd2lsbCBiZSB0cnVuY2F0ZWQuICAKLSAqIEBzdGFibGUgSUNVIDIuMAot
ICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgotdWxvY19nZXREaXNwbGF5TmFtZShjb25z
dCBjaGFyKiBsb2NhbGVJRCwKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGluTG9jYWxlSUQsCi0g
ICAgICAgICAgICBVQ2hhciogcmVzdWx0LAotICAgICAgICAgICAgaW50MzJfdCBtYXhSZXN1bHRT
aXplLAotICAgICAgICAgICAgVUVycm9yQ29kZSogZXJyKTsKLQotCi0vKioKLSAqIEdldHMgdGhl
IHNwZWNpZmllZCBsb2NhbGUgZnJvbSBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBsb2NhbGVzLiAg
Ci0gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcG9pbnRlciB0byBhbiBpdGVtIG9mIAotICogYSBs
b2NhbGUgbmFtZSBhcnJheS4gIEJvdGggdGhpcyBhcnJheSBhbmQgdGhlIHBvaW50ZXJzCi0gKiBp
dCBjb250YWlucyBhcmUgb3duZWQgYnkgSUNVIGFuZCBzaG91bGQgbm90IGJlIGRlbGV0ZWQgb3Ig
d3JpdHRlbiB0aHJvdWdoCi0gKiBieSB0aGUgY2FsbGVyLiAgVGhlIGxvY2FsZSBuYW1lIGlzIHRl
cm1pbmF0ZWQgYnkgYSBudWxsIHBvaW50ZXIuCi0gKiBAcGFyYW0gbiB0aGUgc3BlY2lmaWMgbG9j
YWxlIG5hbWUgaW5kZXggb2YgdGhlIGF2YWlsYWJsZSBsb2NhbGUgbGlzdAotICogQHJldHVybiBh
IHNwZWNpZmllZCBsb2NhbGUgbmFtZSBvZiBhbGwgYXZhaWxhYmxlIGxvY2FsZXMKLSAqIEBzdGFi
bGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBjb25zdCBjaGFyKiBVX0VYUE9SVDIKLXVsb2NfZ2V0
QXZhaWxhYmxlKGludDMyX3Qgbik7Ci0KLS8qKgotICogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgYWxs
IGF2YWlsYWJsZSBsb2NhbGUgbGlzdC4KLSAqCi0gKiBAcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBs
b2NhbGUgbGlzdAotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9F
WFBPUlQyIHVsb2NfY291bnRBdmFpbGFibGUodm9pZCk7Ci0KLS8qKgotICoKLSAqIEdldHMgYSBs
aXN0IG9mIGFsbCBhdmFpbGFibGUgMi1sZXR0ZXIgbGFuZ3VhZ2UgY29kZXMgZGVmaW5lZCBpbiBJ
U08gNjM5LAotICogcGx1cyBhZGRpdGlvbmFsIDMtbGV0dGVyIGNvZGVzIGRldGVybWluZWQgdG8g
YmUgdXNlZnVsIGZvciBsb2NhbGUgZ2VuZXJhdGlvbiBhcwotICogZGVmaW5lZCBieSBVbmljb2Rl
IENMRFIuIFRoaXMgaXMgYSBwb2ludGVyCi0gKiB0byBhbiBhcnJheSBvZiBwb2ludGVycyB0byBh
cnJheXMgb2YgY2hhci4gIEFsbCBvZiB0aGVzZSBwb2ludGVycyBhcmUgb3duZWQKLSAqIGJ5IElD
VS0tIGRvIG5vdCBkZWxldGUgdGhlbSwgYW5kIGRvIG5vdCB3cml0ZSB0aHJvdWdoIHRoZW0uICBU
aGUgYXJyYXkgaXMKLSAqIHRlcm1pbmF0ZWQgd2l0aCBhIG51bGwgcG9pbnRlci4KLSAqIEByZXR1
cm4gYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgbGFuZ3VhZ2UgY29kZXMKLSAqIEBzdGFibGUgSUNV
IDIuMAotICovCi1VX1NUQUJMRSBjb25zdCBjaGFyKiBjb25zdCogVV9FWFBPUlQyCi11bG9jX2dl
dElTT0xhbmd1YWdlcyh2b2lkKTsKLQotLyoqCi0gKgotICogR2V0cyBhIGxpc3Qgb2YgYWxsIGF2
YWlsYWJsZSAyLWxldHRlciBjb3VudHJ5IGNvZGVzIGRlZmluZWQgaW4gSVNPIDYzOS4gIFRoaXMg
aXMgYQotICogcG9pbnRlciB0byBhbiBhcnJheSBvZiBwb2ludGVycyB0byBhcnJheXMgb2YgY2hh
ci4gIEFsbCBvZiB0aGVzZSBwb2ludGVycyBhcmUKLSAqIG93bmVkIGJ5IElDVS0tIGRvIG5vdCBk
ZWxldGUgdGhlbSwgYW5kIGRvIG5vdCB3cml0ZSB0aHJvdWdoIHRoZW0uICBUaGUgYXJyYXkgaXMK
LSAqIHRlcm1pbmF0ZWQgd2l0aCBhIG51bGwgcG9pbnRlci4KLSAqIEByZXR1cm4gYSBsaXN0IG9m
IGFsbCBhdmFpbGFibGUgY291bnRyeSBjb2RlcwotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVf
U1RBQkxFIGNvbnN0IGNoYXIqIGNvbnN0KiBVX0VYUE9SVDIKLXVsb2NfZ2V0SVNPQ291bnRyaWVz
KHZvaWQpOwotCi0vKioKLSAqIFRydW5jYXRlIHRoZSBsb2NhbGUgSUQgc3RyaW5nIHRvIGdldCB0
aGUgcGFyZW50IGxvY2FsZSBJRC4KLSAqIENvcGllcyB0aGUgcGFydCBvZiB0aGUgc3RyaW5nIGJl
Zm9yZSB0aGUgbGFzdCB1bmRlcnNjb3JlLgotICogVGhlIHBhcmVudCBsb2NhbGUgSUQgd2lsbCBi
ZSBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8KLSAqIHVuZGVyc2NvcmUsIG9yIGlmIHRo
ZXJlIGlzIG9ubHkgb25lIHVuZGVyc2NvcmUgYXQgbG9jYWxlSURbMF0uCi0gKgotICogQHBhcmFt
IGxvY2FsZUlEIElucHV0IGxvY2FsZSBJRCBzdHJpbmcuCi0gKiBAcGFyYW0gcGFyZW50ICAgT3V0
cHV0IHN0cmluZyBidWZmZXIgZm9yIHRoZSBwYXJlbnQgbG9jYWxlIElELgotICogQHBhcmFtIHBh
cmVudENhcGFjaXR5IFNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIuCi0gKiBAcGFyYW0gZXJyIEEg
VUVycm9yQ29kZSB2YWx1ZS4KLSAqIEByZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUgcGFyZW50IGxv
Y2FsZSBJRC4KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQ
T1JUMgotdWxvY19nZXRQYXJlbnQoY29uc3QgY2hhciogICAgbG9jYWxlSUQsCi0gICAgICAgICAg
ICAgICAgIGNoYXIqIHBhcmVudCwKLSAgICAgICAgICAgICAgICAgaW50MzJfdCBwYXJlbnRDYXBh
Y2l0eSwKLSAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogZXJyKTsKLQotCi0KLQotLyoqCi0g
KiBHZXRzIHRoZSBmdWxsIG5hbWUgZm9yIHRoZSBzcGVjaWZpZWQgbG9jYWxlLCBsaWtlIHVsb2Nf
Z2V0TmFtZSgpLAotICogYnV0IHdpdGhvdXQga2V5d29yZHMuCi0gKgotICogTm90ZTogVGhpcyBo
YXMgdGhlIGVmZmVjdCBvZiAnY2Fub25pY2FsaXppbmcnIHRoZSBzdHJpbmcgdG8KLSAqIGEgY2Vy
dGFpbiBleHRlbnQuIFVwcGVyIGFuZCBsb3dlciBjYXNlIGFyZSBzZXQgYXMgbmVlZGVkLAotICog
YW5kIGlmIHRoZSBjb21wb25lbnRzIHdlcmUgaW4gJ1BPU0lYJyBmb3JtYXQgdGhleSBhcmUgY2hh
bmdlZCB0bwotICogSUNVIGZvcm1hdC4gIEl0IGRvZXMgTk9UIG1hcCBhbGlhc2VkIG5hbWVzIGlu
IGFueSB3YXkuCi0gKiBTZWUgdGhlIHRvcCBvZiB0aGlzIGhlYWRlciBmaWxlLgotICoKLSAqIFRo
aXMgQVBJIHN0cmlwcyBvZmYgdGhlIGtleXdvcmQgcGFydCwgc28gImRlX0RFXEBjb2xsYXRpb249
cGhvbmVib29rIiAKLSAqIHdpbGwgYmVjb21lICJkZV9ERSIuIAotICogVGhpcyBBUEkgc3VwcG9y
dHMgcHJlZmxpZ2h0aW5nLgotICoKLSAqIEBwYXJhbSBsb2NhbGVJRCB0aGUgbG9jYWxlIHRvIGdl
dCB0aGUgZnVsbCBuYW1lIHdpdGgKLSAqIEBwYXJhbSBuYW1lIGZpbGwgaW4gYnVmZmVyIGZvciB0
aGUgbmFtZSB3aXRob3V0IGtleXdvcmRzLgotICogQHBhcmFtIG5hbWVDYXBhY2l0eSBjYXBhY2l0
eSBvZiB0aGUgZmlsbCBpbiBidWZmZXIuCi0gKiBAcGFyYW0gZXJyIGVycm9yIGluZm9ybWF0aW9u
IGlmIHJldHJpZXZpbmcgdGhlIGZ1bGwgbmFtZSBmYWlsZWQKLSAqIEByZXR1cm4gdGhlIGFjdHVh
bCBidWZmZXIgc2l6ZSBuZWVkZWQgZm9yIHRoZSBmdWxsIG5hbWUuICBJZiBpdCdzIGdyZWF0ZXIg
Ci0gKiB0aGFuIG5hbWVDYXBhY2l0eSwgdGhlIHJldHVybmVkIGZ1bGwgbmFtZSB3aWxsIGJlIHRy
dW5jYXRlZC4gIAotICogQHN0YWJsZSBJQ1UgMi44Ci0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9F
WFBPUlQyCi11bG9jX2dldEJhc2VOYW1lKGNvbnN0IGNoYXIqICAgIGxvY2FsZUlELAotICAgICAg
ICAgY2hhciogbmFtZSwKLSAgICAgICAgIGludDMyX3QgbmFtZUNhcGFjaXR5LAotICAgICAgICAg
VUVycm9yQ29kZSogZXJyKTsKLQotLyoqCi0gKiBHZXRzIGFuIGVudW1lcmF0aW9uIG9mIGtleXdv
cmRzIGZvciB0aGUgc3BlY2lmaWVkIGxvY2FsZS4gRW51bWVyYXRpb24KLSAqIG11c3QgZ2V0IGRp
c3Bvc2VkIG9mIGJ5IHRoZSBjbGllbnQgdXNpbmcgdWVudW1fY2xvc2UgZnVuY3Rpb24uCi0gKgot
ICogQHBhcmFtIGxvY2FsZUlEIHRoZSBsb2NhbGUgdG8gZ2V0IHRoZSB2YXJpYW50IGNvZGUgd2l0
aAotICogQHBhcmFtIHN0YXR1cyBlcnJvciBpbmZvcm1hdGlvbiBpZiByZXRyaWV2aW5nIHRoZSBr
ZXl3b3JkcyBmYWlsZWQKLSAqIEByZXR1cm4gZW51bWVyYXRpb24gb2Yga2V5d29yZHMgb3IgTlVM
TCBpZiB0aGVyZSBhcmUgbm8ga2V5d29yZHMuCi0gKiBAc3RhYmxlIElDVSAyLjgKLSAqLwotVV9T
VEFCTEUgVUVudW1lcmF0aW9uKiBVX0VYUE9SVDIKLXVsb2Nfb3BlbktleXdvcmRzKGNvbnN0IGNo
YXIqIGxvY2FsZUlELAotICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogc3RhdHVz
KTsKLQotLyoqCi0gKiBHZXQgdGhlIHZhbHVlIGZvciBhIGtleXdvcmQuIExvY2FsZSBuYW1lIGRv
ZXMgbm90IG5lZWQgdG8gYmUgbm9ybWFsaXplZC4KLSAqIAotICogQHBhcmFtIGxvY2FsZUlEIGxv
Y2FsZSBuYW1lIGNvbnRhaW5pbmcgdGhlIGtleXdvcmQgKCJkZV9ERUBjdXJyZW5jeT1FVVJPO2Nv
bGxhdGlvbj1QSE9ORUJPT0siKQotICogQHBhcmFtIGtleXdvcmROYW1lIG5hbWUgb2YgdGhlIGtl
eXdvcmQgZm9yIHdoaWNoIHdlIHdhbnQgdGhlIHZhbHVlLiBDYXNlIGluc2Vuc2l0aXZlLgotICog
QHBhcmFtIGJ1ZmZlciByZWNlaXZpbmcgYnVmZmVyCi0gKiBAcGFyYW0gYnVmZmVyQ2FwYWNpdHkg
Y2FwYWNpdHkgb2YgcmVjZWl2aW5nIGJ1ZmZlcgotICogQHBhcmFtIHN0YXR1cyBjb250YWluaW5n
IGVycm9yIGNvZGUgLSBidWZmZXIgbm90IGJpZyBlbm91Z2guCi0gKiBAcmV0dXJuIHRoZSBsZW5n
dGggb2Yga2V5d29yZCB2YWx1ZQotICogQHN0YWJsZSBJQ1UgMi44Ci0gKi8KLVVfU1RBQkxFIGlu
dDMyX3QgVV9FWFBPUlQyCi11bG9jX2dldEtleXdvcmRWYWx1ZShjb25zdCBjaGFyKiBsb2NhbGVJ
RCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGtleXdvcmROYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgY2hhciogYnVmZmVyLCBpbnQzMl90IGJ1ZmZlckNhcGFjaXR5LAotICAg
ICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogc3RhdHVzKTsKLQotCi0vKioKLSAqIFNldHMg
b3IgcmVtb3ZlcyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBrZXl3b3JkLgotICoKLSAqIEZv
ciByZW1vdmluZyBhbGwga2V5d29yZHMsIHVzZSB1bG9jX2dldEJhc2VOYW1lKCkuCi0gKgotICog
Tk9URTogVW5saWtlIGFsbW9zdCBldmVyeSBvdGhlciBJQ1UgZnVuY3Rpb24gd2hpY2ggdGFrZXMg
YQotICogYnVmZmVyLCB0aGlzIGZ1bmN0aW9uIHdpbGwgTk9UIHRydW5jYXRlIHRoZSBvdXRwdXQg
dGV4dC4gSWYgYQotICogQlVGRkVSX09WRVJGTE9XX0VSUk9SIGlzIHJlY2VpdmVkLCBpdCBtZWFu
cyB0aGF0IHRoZSBvcmlnaW5hbAotICogYnVmZmVyIGlzIHVudG91Y2hlZC4gVGhpcyBpcyBkb25l
IHRvIHByZXZlbnQgaW5jb3JyZWN0IG9yIHBvc3NpYmx5Ci0gKiBldmVuIG1hbGZvcm1lZCBsb2Nh
bGVzIGZyb20gYmVpbmcgZ2VuZXJhdGVkIGFuZCB1c2VkLgotICoKLSAqIEBwYXJhbSBrZXl3b3Jk
TmFtZSBuYW1lIG9mIHRoZSBrZXl3b3JkIHRvIGJlIHNldC4gQ2FzZSBpbnNlbnNpdGl2ZS4KLSAq
IEBwYXJhbSBrZXl3b3JkVmFsdWUgdmFsdWUgb2YgdGhlIGtleXdvcmQgdG8gYmUgc2V0LiBJZiAw
LWxlbmd0aCBvcgotICogIE5VTEwsIHdpbGwgcmVzdWx0IGluIHRoZSBrZXl3b3JkIGJlaW5nIHJl
bW92ZWQuIE5vIGVycm9yIGlzIGdpdmVuIGlmIAotICogIHRoYXQga2V5d29yZCBkb2VzIG5vdCBl
eGlzdC4KLSAqIEBwYXJhbSBidWZmZXIgaW5wdXQgYnVmZmVyIGNvbnRhaW5pbmcgbG9jYWxlIHRv
IGJlIG1vZGlmaWVkLgotICogQHBhcmFtIGJ1ZmZlckNhcGFjaXR5IGNhcGFjaXR5IG9mIHJlY2Vp
dmluZyBidWZmZXIKLSAqIEBwYXJhbSBzdGF0dXMgY29udGFpbmluZyBlcnJvciBjb2RlIC0gYnVm
ZmVyIG5vdCBiaWcgZW5vdWdoLgotICogQHJldHVybiB0aGUgbGVuZ3RoIG5lZWRlZCBmb3IgdGhl
IGJ1ZmZlcgotICogQHNlZSB1bG9jX2dldEtleXdvcmRWYWx1ZQotICogQHN0YWJsZSBJQ1UgMy4y
Ci0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCi11bG9jX3NldEtleXdvcmRWYWx1ZShj
b25zdCBjaGFyKiBrZXl3b3JkTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGtleXdvcmRWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmZlciwgaW50MzJf
dCBidWZmZXJDYXBhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIHN0YXR1
cyk7Ci0KLSNpZm5kZWYgVV9ISURFX0RSQUZUX0FQSQotLyoqCi0gKiBSZXR1cm5zIHdoZXRoZXIg
dGhlIGxvY2FsZSdzIHNjcmlwdCBpcyB3cml0dGVuIHJpZ2h0LXRvLWxlZnQuCi0gKiBJZiB0aGVy
ZSBpcyBubyBzY3JpcHQgc3VidGFnLCB0aGVuIHRoZSBsaWtlbHkgc2NyaXB0IGlzIHVzZWQsIHNl
ZSB1bG9jX2FkZExpa2VseVN1YnRhZ3MoKS4KLSAqIElmIG5vIGxpa2VseSBzY3JpcHQgaXMga25v
d24sIHRoZW4gRkFMU0UgaXMgcmV0dXJuZWQuCi0gKgotICogQSBzY3JpcHQgaXMgcmlnaHQtdG8t
bGVmdCBhY2NvcmRpbmcgdG8gdGhlIENMRFIgc2NyaXB0IG1ldGFkYXRhCi0gKiB3aGljaCBjb3Jy
ZXNwb25kcyB0byB3aGV0aGVyIHRoZSBzY3JpcHQncyBsZXR0ZXJzIGhhdmUgQmlkaV9DbGFzcz1S
IG9yIEFMLgotICoKLSAqIFJldHVybnMgVFJVRSBmb3IgImFyIiBhbmQgImVuLUhlYnIiLCBGQUxT
RSBmb3IgInpoIiBhbmQgImZhLUN5cmwiLgotICoKLSAqIEBwYXJhbSBsb2NhbGUgaW5wdXQgbG9j
YWxlIElECi0gKiBAcmV0dXJuIFRSVUUgaWYgdGhlIGxvY2FsZSdzIHNjcmlwdCBpcyB3cml0dGVu
IHJpZ2h0LXRvLWxlZnQKLSAqIEBkcmFmdCBJQ1UgNTQKLSAqLwotVV9EUkFGVCBVQm9vbCBVX0VY
UE9SVDIKLXVsb2NfaXNSaWdodFRvTGVmdChjb25zdCBjaGFyICpsb2NhbGUpOwotI2VuZGlmICAv
KiBVX0hJREVfRFJBRlRfQVBJICovCi0KLS8qKgotICogZW51bXMgZm9yIHRoZSAgcmV0dXJuIHZh
bHVlIGZvciB0aGUgY2hhcmFjdGVyIGFuZCBsaW5lIG9yaWVudGF0aW9uCi0gKiBmdW5jdGlvbnMu
Ci0gKiBAc3RhYmxlIElDVSA0LjAKLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgVUxPQ19MQVlPVVRf
TFRSICAgPSAwLCAgLyogbGVmdC10by1yaWdodC4gKi8KLSAgVUxPQ19MQVlPVVRfUlRMICAgID0g
MSwgIC8qIHJpZ2h0LXRvLWxlZnQuICovCi0gIFVMT0NfTEFZT1VUX1RUQiAgICA9IDIsICAvKiB0
b3AtdG8tYm90dG9tLiAqLwotICBVTE9DX0xBWU9VVF9CVFQgICAgPSAzLCAgIC8qIGJvdHRvbS10
by10b3AuICovCi0gIFVMT0NfTEFZT1VUX1VOS05PV04KLX0gVUxheW91dFR5cGU7Ci0KLS8qKgot
ICogR2V0IHRoZSBsYXlvdXQgY2hhcmFjdGVyIG9yaWVudGF0aW9uIGZvciB0aGUgc3BlY2lmaWVk
IGxvY2FsZS4KLSAqIAotICogQHBhcmFtIGxvY2FsZUlkIGxvY2FsZSBuYW1lCi0gKiBAcGFyYW0g
c3RhdHVzIEVycm9yIHN0YXR1cwotICogQHJldHVybiBhbiBlbnVtIGluZGljYXRpbmcgdGhlIGxh
eW91dCBvcmllbnRhdGlvbiBmb3IgY2hhcmFjdGVycy4KLSAqIEBzdGFibGUgSUNVIDQuMAotICov
Ci1VX1NUQUJMRSBVTGF5b3V0VHlwZSBVX0VYUE9SVDIKLXVsb2NfZ2V0Q2hhcmFjdGVyT3JpZW50
YXRpb24oY29uc3QgY2hhciogbG9jYWxlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVFcnJvckNvZGUgKnN0YXR1cyk7Ci0KLS8qKgotICogR2V0IHRoZSBsYXlvdXQgbGluZSBvcmll
bnRhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBsb2NhbGUuCi0gKiAKLSAqIEBwYXJhbSBsb2NhbGVJ
ZCBsb2NhbGUgbmFtZQotICogQHBhcmFtIHN0YXR1cyBFcnJvciBzdGF0dXMKLSAqIEByZXR1cm4g
YW4gZW51bSBpbmRpY2F0aW5nIHRoZSBsYXlvdXQgb3JpZW50YXRpb24gZm9yIGxpbmVzLgotICog
QHN0YWJsZSBJQ1UgNC4wCi0gKi8KLVVfU1RBQkxFIFVMYXlvdXRUeXBlIFVfRVhQT1JUMgotdWxv
Y19nZXRMaW5lT3JpZW50YXRpb24oY29uc3QgY2hhciogbG9jYWxlSWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOwotCi0vKioKLSAqIGVudW1zIGZvciB0aGUg
J291dFJlc3VsdCcgcGFyYW1ldGVyIHJldHVybiB2YWx1ZQotICogQHNlZSB1bG9jX2FjY2VwdExh
bmd1YWdlRnJvbUhUVFAKLSAqIEBzZWUgdWxvY19hY2NlcHRMYW5ndWFnZQotICogQHN0YWJsZSBJ
Q1UgMy4yCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIFVMT0NfQUNDRVBUX0ZBSUxFRCAgID0gMCwg
IC8qIE5vIGV4YWN0IG1hdGNoIHdhcyBmb3VuZC4gKi8KLSAgVUxPQ19BQ0NFUFRfVkFMSUQgICAg
PSAxLCAgLyogQW4gZXhhY3QgbWF0Y2ggd2FzIGZvdW5kLiAqLwotICBVTE9DX0FDQ0VQVF9GQUxM
QkFDSyA9IDIgICAvKiBBIGZhbGxiYWNrIHdhcyBmb3VuZCwgZm9yIGV4YW1wbGUsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHQgbGlzdCBjb250YWluZWQgJ2phX0pQJwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBtYXRjaGVkIGF2YWlsYWJsZSBs
b2NhbGUgJ2phJy4gKi8KLX0gVUFjY2VwdFJlc3VsdDsKLQotCi0vKioKLSAqIEJhc2VkIG9uIGEg
SFRUUCBoZWFkZXIgZnJvbSBhIHdlYiBicm93c2VyIGFuZCBhIGxpc3Qgb2YgYXZhaWxhYmxlIGxv
Y2FsZXMsCi0gKiBkZXRlcm1pbmUgYW4gYWNjZXB0YWJsZSBsb2NhbGUgZm9yIHRoZSB1c2VyLgot
ICogQHBhcmFtIHJlc3VsdCAtIGJ1ZmZlciB0byBhY2NlcHQgdGhlIHJlc3VsdCBsb2NhbGUKLSAq
IEBwYXJhbSByZXN1bHRBdmFpbGFibGUgdGhlIHNpemUgb2YgdGhlIHJlc3VsdCBidWZmZXIuCi0g
KiBAcGFyYW0gb3V0UmVzdWx0IC0gQW4gb3V0IHBhcmFtZXRlciB0aGF0IGNvbnRhaW5zIHRoZSBm
YWxsYmFjayBzdGF0dXMKLSAqIEBwYXJhbSBodHRwQWNjZXB0TGFuZ3VhZ2UgLSAiQWNjZXB0LUxh
bmd1YWdlOiIgaGVhZGVyIGFzIHBlciBIVFRQLgotICogQHBhcmFtIGF2YWlsYWJsZUxvY2FsZXMg
LSBsaXN0IG9mIGF2YWlsYWJsZSBsb2NhbGVzIHRvIG1hdGNoCi0gKiBAcGFyYW0gc3RhdHVzIEVy
cm9yIHN0YXR1cywgbWF5IGJlIEJVRkZFUl9PVkVSRkxPV19FUlJPUgotICogQHJldHVybiBsZW5n
dGggbmVlZGVkIGZvciB0aGUgbG9jYWxlLgotICogQHN0YWJsZSBJQ1UgMy4yCi0gKi8KLVVfU1RB
QkxFIGludDMyX3QgVV9FWFBPUlQyCi11bG9jX2FjY2VwdExhbmd1YWdlRnJvbUhUVFAoY2hhciAq
cmVzdWx0LCBpbnQzMl90IHJlc3VsdEF2YWlsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVQWNjZXB0UmVzdWx0ICpvdXRSZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqaHR0cEFjY2VwdExhbmd1YWdlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVFbnVtZXJhdGlvbiogYXZhaWxhYmxlTG9jYWxlcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOwotCi0vKioKLSAqIEJhc2VkIG9uIGEgbGlz
dCBvZiBhdmFpbGFibGUgbG9jYWxlcywKLSAqIGRldGVybWluZSBhbiBhY2NlcHRhYmxlIGxvY2Fs
ZSBmb3IgdGhlIHVzZXIuCi0gKiBAcGFyYW0gcmVzdWx0IC0gYnVmZmVyIHRvIGFjY2VwdCB0aGUg
cmVzdWx0IGxvY2FsZQotICogQHBhcmFtIHJlc3VsdEF2YWlsYWJsZSB0aGUgc2l6ZSBvZiB0aGUg
cmVzdWx0IGJ1ZmZlci4KLSAqIEBwYXJhbSBvdXRSZXN1bHQgLSBBbiBvdXQgcGFyYW1ldGVyIHRo
YXQgY29udGFpbnMgdGhlIGZhbGxiYWNrIHN0YXR1cwotICogQHBhcmFtIGFjY2VwdExpc3QgLSBs
aXN0IG9mIGFjY2VwdGFibGUgbGFuZ3VhZ2VzCi0gKiBAcGFyYW0gYWNjZXB0TGlzdENvdW50IC0g
Y291bnQgb2YgYWNjZXB0TGlzdCBpdGVtcwotICogQHBhcmFtIGF2YWlsYWJsZUxvY2FsZXMgLSBs
aXN0IG9mIGF2YWlsYWJsZSBsb2NhbGVzIHRvIG1hdGNoCi0gKiBAcGFyYW0gc3RhdHVzIEVycm9y
IHN0YXR1cywgbWF5IGJlIEJVRkZFUl9PVkVSRkxPV19FUlJPUgotICogQHJldHVybiBsZW5ndGgg
bmVlZGVkIGZvciB0aGUgbG9jYWxlLgotICogQHN0YWJsZSBJQ1UgMy4yCi0gKi8KLVVfU1RBQkxF
IGludDMyX3QgVV9FWFBPUlQyCi11bG9jX2FjY2VwdExhbmd1YWdlKGNoYXIgKnJlc3VsdCwgaW50
MzJfdCByZXN1bHRBdmFpbGFibGUsIAotICAgICAgICAgICAgICAgICAgICBVQWNjZXB0UmVzdWx0
ICpvdXRSZXN1bHQsIGNvbnN0IGNoYXIgKiphY2NlcHRMaXN0LAotICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90IGFjY2VwdExpc3RDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgVUVudW1lcmF0
aW9uKiBhdmFpbGFibGVMb2NhbGVzLAotICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpz
dGF0dXMpOwotCi0KLS8qKgotICogR2V0cyB0aGUgSUNVIGxvY2FsZSBJRCBmb3IgdGhlIHNwZWNp
ZmllZCBXaW4zMiBMQ0lEIHZhbHVlLgotICoKLSAqIEBwYXJhbSBob3N0SUQgdGhlIFdpbjMyIExD
SUQgdG8gdHJhbnNsYXRlCi0gKiBAcGFyYW0gbG9jYWxlIHRoZSBvdXRwdXQgYnVmZmVyIGZvciB0
aGUgSUNVIGxvY2FsZSBJRCwgd2hpY2ggd2lsbCBiZSBOVUwtdGVybWluYXRlZAotICogIGlmIHRo
ZXJlIGlzIHJvb20uCi0gKiBAcGFyYW0gbG9jYWxlQ2FwYWNpdHkgdGhlIHNpemUgb2YgdGhlIG91
dHB1dCBidWZmZXIKLSAqIEBwYXJhbSBzdGF0dXMgYW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgdGhl
IExDSUQgaXMgdW5yZWNvZ25pemVkIG9yIHRoZSBvdXRwdXQgYnVmZmVyCi0gKiAgaXMgdG9vIHNt
YWxsCi0gKiBAcmV0dXJuIGFjdHVhbCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGxvY2FsZSBJRCwg
bm90IGluY2x1ZGluZyBOVUwtdGVybWluYXRpb24gCi0gKiBAc3RhYmxlIElDVSAzLjgKLSAqLwot
VV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKLXVsb2NfZ2V0TG9jYWxlRm9yTENJRCh1aW50MzJf
dCBob3N0SUQsIGNoYXIgKmxvY2FsZSwgaW50MzJfdCBsb2NhbGVDYXBhY2l0eSwKLSAgICAgICAg
ICAgICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsKLQotCi0vKioKLSAqIEFkZCB0aGUgbGlr
ZWx5IHN1YnRhZ3MgZm9yIGEgcHJvdmlkZWQgbG9jYWxlIElELCBwZXIgdGhlIGFsZ29yaXRobSBk
ZXNjcmliZWQKLSAqIGluIHRoZSBmb2xsb3dpbmcgQ0xEUiB0ZWNobmljYWwgcmVwb3J0OgotICoK
LSAqICAgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvI0xpa2VseV9TdWJ0YWdz
Ci0gKgotICogSWYgbG9jYWxlSUQgaXMgYWxyZWFkeSBpbiB0aGUgbWF4aW1hbCBmb3JtLCBvciB0
aGVyZSBpcyBubyBkYXRhIGF2YWlsYWJsZQotICogZm9yIG1heGltaXphdGlvbiwgaXQgd2lsbCBi
ZSBjb3BpZWQgdG8gdGhlIG91dHB1dCBidWZmZXIuICBGb3IgZXhhbXBsZSwKLSAqICJ1bmQtWnp6
eiIgY2Fubm90IGJlIG1heGltaXplZCwgc2luY2UgdGhlcmUgaXMgbm8gcmVhc29uYWJsZSBtYXhp
bWl6YXRpb24uCi0gKgotICogRXhhbXBsZXM6Ci0gKgotICogImVuIiBtYXhpbWl6ZXMgdG8gImVu
X0xhdG5fVVMiCi0gKgotICogImRlIiBtYXhpbWl6ZXMgdG8gImRlX0xhdG5fVVMiCi0gKgotICog
InNyIiBtYXhpbWl6ZXMgdG8gInNyX0N5cmxfUlMiCi0gKgotICogInNoIiBtYXhpbWl6ZXMgdG8g
InNyX0xhdG5fUlMiIChOb3RlIHRoaXMgd2lsbCBub3QgcmV2ZXJzZS4pCi0gKgotICogInpoX0hh
bmkiIG1heGltaXplcyB0byAiemhfSGFuc19DTiIgKE5vdGUgdGhpcyB3aWxsIG5vdCByZXZlcnNl
LikKLSAqCi0gKiBAcGFyYW0gbG9jYWxlSUQgVGhlIGxvY2FsZSB0byBtYXhpbWl6ZQotICogQHBh
cmFtIG1heGltaXplZExvY2FsZUlEIFRoZSBtYXhpbWl6ZWQgbG9jYWxlCi0gKiBAcGFyYW0gbWF4
aW1pemVkTG9jYWxlSURDYXBhY2l0eSBUaGUgY2FwYWNpdHkgb2YgdGhlIG1heGltaXplZExvY2Fs
ZUlEIGJ1ZmZlcgotICogQHBhcmFtIGVyciBFcnJvciBpbmZvcm1hdGlvbiBpZiBtYXhpbWl6aW5n
IHRoZSBsb2NhbGUgZmFpbGVkLiAgSWYgdGhlIGxlbmd0aAotICogb2YgdGhlIGxvY2FsZUlEIGFu
ZCB0aGUgbnVsbC10ZXJtaW5hdG9yIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBhbGxvd2Vk
IHNpemUsCi0gKiBvciB0aGUgbG9jYWxlSWQgaXMgbm90IHdlbGwtZm9ybWVkLCB0aGUgZXJyb3Ig
Y29kZSBpcyBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1IuCi0gKiBAcmV0dXJuIFRoZSBhY3R1YWwg
YnVmZmVyIHNpemUgbmVlZGVkIGZvciB0aGUgbWF4aW1pemVkIGxvY2FsZS4gIElmIGl0J3MKLSAq
IGdyZWF0ZXIgdGhhbiBtYXhpbWl6ZWRMb2NhbGVJRENhcGFjaXR5LCB0aGUgcmV0dXJuZWQgSUQg
d2lsbCBiZSB0cnVuY2F0ZWQuCi0gKiBPbiBlcnJvciwgdGhlIHJldHVybiB2YWx1ZSBpcyAtMS4K
LSAqIEBzdGFibGUgSUNVIDQuMAotICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgotdWxv
Y19hZGRMaWtlbHlTdWJ0YWdzKGNvbnN0IGNoYXIqICAgIGxvY2FsZUlELAotICAgICAgICAgY2hh
ciogbWF4aW1pemVkTG9jYWxlSUQsCi0gICAgICAgICBpbnQzMl90IG1heGltaXplZExvY2FsZUlE
Q2FwYWNpdHksCi0gICAgICAgICBVRXJyb3JDb2RlKiBlcnIpOwotCi0KLS8qKgotICogTWluaW1p
emUgdGhlIHN1YnRhZ3MgZm9yIGEgcHJvdmlkZWQgbG9jYWxlIElELCBwZXIgdGhlIGFsZ29yaXRo
bSBkZXNjcmliZWQKLSAqIGluIHRoZSBmb2xsb3dpbmcgQ0xEUiB0ZWNobmljYWwgcmVwb3J0Ogot
ICoKLSAqICAgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvI0xpa2VseV9TdWJ0
YWdzCi0gKgotICogSWYgbG9jYWxlSUQgaXMgYWxyZWFkeSBpbiB0aGUgbWluaW1hbCBmb3JtLCBv
ciB0aGVyZSBpcyBubyBkYXRhIGF2YWlsYWJsZQotICogZm9yIG1pbmltaXphdGlvbiwgaXQgd2ls
bCBiZSBjb3BpZWQgdG8gdGhlIG91dHB1dCBidWZmZXIuICBTaW5jZSB0aGUKLSAqIG1pbmltaXph
dGlvbiBhbGdvcml0aG0gcmVsaWVzIG9uIHByb3BlciBtYXhpbWl6YXRpb24sIHNlZSB0aGUgY29t
bWVudHMKLSAqIGZvciB1bG9jX2FkZExpa2VseVN1YnRhZ3MgZm9yIHJlYXNvbnMgd2h5IHRoZXJl
IG1pZ2h0IG5vdCBiZSBhbnkgZGF0YS4KLSAqCi0gKiBFeGFtcGxlczoKLSAqCi0gKiAiZW5fTGF0
bl9VUyIgbWluaW1pemVzIHRvICJlbiIKLSAqCi0gKiAiZGVfTGF0bl9VUyIgbWluaW1pemVzIHRv
ICJkZSIKLSAqCi0gKiAic3JfQ3lybF9SUyIgbWluaW1pemVzIHRvICJzciIKLSAqCi0gKiAiemhf
SGFudF9UVyIgbWluaW1pemVzIHRvICJ6aF9UVyIgKFRoZSByZWdpb24gaXMgcHJlZmVycmVkIHRv
IHRoZQotICogc2NyaXB0LCBhbmQgbWluaW1pemluZyB0byAiemgiIHdvdWxkIGltcGx5ICJ6aF9I
YW5zX0NOIi4pCi0gKgotICogQHBhcmFtIGxvY2FsZUlEIFRoZSBsb2NhbGUgdG8gbWluaW1pemUK
LSAqIEBwYXJhbSBtaW5pbWl6ZWRMb2NhbGVJRCBUaGUgbWluaW1pemVkIGxvY2FsZQotICogQHBh
cmFtIG1pbmltaXplZExvY2FsZUlEQ2FwYWNpdHkgVGhlIGNhcGFjaXR5IG9mIHRoZSBtaW5pbWl6
ZWRMb2NhbGVJRCBidWZmZXIKLSAqIEBwYXJhbSBlcnIgRXJyb3IgaW5mb3JtYXRpb24gaWYgbWlu
aW1pemluZyB0aGUgbG9jYWxlIGZhaWxlZC4gIElmIHRoZSBsZW5ndGgKLSAqIG9mIHRoZSBsb2Nh
bGVJRCBhbmQgdGhlIG51bGwtdGVybWluYXRvciBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0g
YWxsb3dlZCBzaXplLAotICogb3IgdGhlIGxvY2FsZUlkIGlzIG5vdCB3ZWxsLWZvcm1lZCwgdGhl
IGVycm9yIGNvZGUgaXMgVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SLgotICogQHJldHVybiBUaGUg
YWN0dWFsIGJ1ZmZlciBzaXplIG5lZWRlZCBmb3IgdGhlIG1pbmltaXplZCBsb2NhbGUuICBJZiBp
dCdzCi0gKiBncmVhdGVyIHRoYW4gbWluaW1pemVkTG9jYWxlSURDYXBhY2l0eSwgdGhlIHJldHVy
bmVkIElEIHdpbGwgYmUgdHJ1bmNhdGVkLgotICogT24gZXJyb3IsIHRoZSByZXR1cm4gdmFsdWUg
aXMgLTEuCi0gKiBAc3RhYmxlIElDVSA0LjAKLSAqLwotVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9S
VDIKLXVsb2NfbWluaW1pemVTdWJ0YWdzKGNvbnN0IGNoYXIqICAgIGxvY2FsZUlELAotICAgICAg
ICAgY2hhciogbWluaW1pemVkTG9jYWxlSUQsCi0gICAgICAgICBpbnQzMl90IG1pbmltaXplZExv
Y2FsZUlEQ2FwYWNpdHksCi0gICAgICAgICBVRXJyb3JDb2RlKiBlcnIpOwotCi0vKioKLSAqIFJl
dHVybnMgYSBsb2NhbGUgSUQgZm9yIHRoZSBzcGVjaWZpZWQgQkNQNDcgbGFuZ3VhZ2UgdGFnIHN0
cmluZy4KLSAqIElmIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgdGFnIGNvbnRhaW5zIGFueSBpbGwt
Zm9ybWVkIHN1YnRhZ3MsCi0gKiB0aGUgZmlyc3Qgc3VjaCBzdWJ0YWcgYW5kIGFsbCBmb2xsb3dp
bmcgc3VidGFncyBhcmUgaWdub3JlZC4KLSAqIDxwPiAKLSAqIFRoaXMgaW1wbGVtZW50cyB0aGUg
J0xhbmd1YWdlLVRhZycgcHJvZHVjdGlvbiBvZiBCQ1A0NywgYW5kIHNvCi0gKiBzdXBwb3J0cyBn
cmFuZGZhdGhlcmVkIChyZWd1bGFyIGFuZCBpcnJlZ3VsYXIpIGFzIHdlbGwgYXMgcHJpdmF0ZQot
ICogdXNlIGxhbmd1YWdlIHRhZ3MuICBQcml2YXRlIHVzZSB0YWdzIGFyZSByZXByZXNlbnRlZCBh
cyAneC13aGF0ZXZlcicsCi0gKiBhbmQgZ3JhbmRmYXRoZXJlZCB0YWdzIGFyZSBjb252ZXJ0ZWQg
dG8gdGhlaXIgY2Fub25pY2FsIHJlcGxhY2VtZW50cwotICogd2hlcmUgdGhleSBleGlzdC4gIE5v
dGUgdGhhdCBhIGZldyBncmFuZGZhdGhlcmVkIHRhZ3MgaGF2ZSBubyBtb2Rlcm4KLSAqIHJlcGxh
Y2VtZW50LCB0aGVzZSB3aWxsIGJlIGNvbnZlcnRlZCB1c2luZyB0aGUgZmFsbGJhY2sgZGVzY3Jp
YmVkIGluCi0gKiB0aGUgZmlyc3QgcGFyYWdyYXBoLCBzbyBzb21lIGluZm9ybWF0aW9uIG1pZ2h0
IGJlIGxvc3QuCi0gKiBAcGFyYW0gbGFuZ3RhZyAgIHRoZSBpbnB1dCBCQ1A0NyBsYW5ndWFnZSB0
YWcuCi0gKiBAcGFyYW0gbG9jYWxlSUQgIHRoZSBvdXRwdXQgYnVmZmVyIHJlY2VpdmluZyBhIGxv
Y2FsZSBJRCBmb3IgdGhlCi0gKiAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBCQ1A0NyBsYW5n
dWFnZSB0YWcuCi0gKiBAcGFyYW0gbG9jYWxlSURDYXBhY2l0eSAgdGhlIHNpemUgb2YgdGhlIGxv
Y2FsZSBJRCBvdXRwdXQgYnVmZmVyLgotICogQHBhcmFtIHBhcnNlZExlbmd0aCAgaWYgbm90IE5V
TEwsIHN1Y2Nlc3NmdWxseSBwYXJzZWQgbGVuZ3RoCi0gKiAgICAgICAgICAgICAgICAgICAgICBm
b3IgdGhlIGlucHV0IGxhbmd1YWdlIHRhZyBpcyBzZXQuCi0gKiBAcGFyYW0gZXJyICAgICAgIGVy
cm9yIGluZm9ybWF0aW9uIGlmIHJlY2VpdmluZyB0aGUgbG9jYWxkIElECi0gKiAgICAgICAgICAg
ICAgICAgIGZhaWxlZC4KLSAqIEByZXR1cm4gICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgbG9j
YWxlIElELgotICogQHN0YWJsZSBJQ1UgNC4yCi0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9FWFBP
UlQyCi11bG9jX2Zvckxhbmd1YWdlVGFnKGNvbnN0IGNoYXIqIGxhbmd0YWcsCi0gICAgICAgICAg
ICAgICAgICAgIGNoYXIqIGxvY2FsZUlELAotICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxv
Y2FsZUlEQ2FwYWNpdHksCi0gICAgICAgICAgICAgICAgICAgIGludDMyX3QqIHBhcnNlZExlbmd0
aCwKLSAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogZXJyKTsKLQotLyoqCi0gKiBSZXR1
cm5zIGEgd2VsbC1mb3JtZWQgbGFuZ3VhZ2UgdGFnIGZvciB0aGlzIGxvY2FsZSBJRC4gCi0gKiA8
cD4gCi0gKiA8Yj5Ob3RlPC9iPjogV2hlbiA8Y29kZT5zdHJpY3Q8L2NvZGU+IGlzIEZBTFNFLCBh
bnkgbG9jYWxlCi0gKiBmaWVsZHMgd2hpY2ggZG8gbm90IHNhdGlzZnkgdGhlIEJDUDQ3IHN5bnRh
eCByZXF1aXJlbWVudCB3aWxsCi0gKiBiZSBvbWl0dGVkIGZyb20gdGhlIHJlc3VsdC4gIFdoZW4g
PGNvZGU+c3RyaWN0PC9jb2RlPiBpcwotICogVFJVRSwgdGhpcyBmdW5jdGlvbiBzZXRzIFVfSUxM
RUdBTF9BUkdVTUVOVF9FUlJPUiB0byB0aGUKLSAqIDxjb2RlPmVycjwvY29kZT4gaWYgYW55IGxv
Y2FsZSBmaWVsZHMgZG8gbm90IHNhdGlzZnkgdGhlCi0gKiBCQ1A0NyBzeW50YXggcmVxdWlyZW1l
bnQuCi0gKiBAcGFyYW0gbG9jYWxlSUQgIHRoZSBpbnB1dCBsb2NhbGUgSUQKLSAqIEBwYXJhbSBs
YW5ndGFnICAgdGhlIG91dHB1dCBidWZmZXIgcmVjZWl2aW5nIEJDUDQ3IGxhbmd1YWdlCi0gKiAg
ICAgICAgICAgICAgICAgIHRhZyBmb3IgdGhlIGxvY2FsZSBJRC4KLSAqIEBwYXJhbSBsYW5ndGFn
Q2FwYWNpdHkgICB0aGUgc2l6ZSBvZiB0aGUgQkNQNDcgbGFuZ3VhZ2UgdGFnCi0gKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0IGJ1ZmZlci4KLSAqIEBwYXJhbSBzdHJpY3QgICAgYm9v
bGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zCi0gKiAgICAgICAg
ICAgICAgICAgIGFuIGVycm9yIGZvciBhbiBpbGwtZm9ybWVkIGlucHV0IGxvY2FsZSBJRC4KLSAq
IEBwYXJhbSBlcnIgICAgICAgZXJyb3IgaW5mb3JtYXRpb24gaWYgcmVjZWl2aW5nIHRoZSBsYW5n
dWFnZQotICogICAgICAgICAgICAgICAgICB0YWcgZmFpbGVkLgotICogQHJldHVybiAgICAgICAg
ICBUaGUgbGVuZ3RoIG9mIHRoZSBCQ1A0NyBsYW5ndWFnZSB0YWcuCi0gKiBAc3RhYmxlIElDVSA0
LjIKLSAqLwotVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKLXVsb2NfdG9MYW5ndWFnZVRhZyhj
b25zdCBjaGFyKiBsb2NhbGVJRCwKLSAgICAgICAgICAgICAgICAgICBjaGFyKiBsYW5ndGFnLAot
ICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGFuZ3RhZ0NhcGFjaXR5LAotICAgICAgICAgICAg
ICAgICAgIFVCb29sIHN0cmljdCwKLSAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBlcnIp
OwotCi0jaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKLS8qKgotICogQ29udmVydHMgdGhlIHNwZWNp
ZmllZCBrZXl3b3JkIChsZWdhY3kga2V5LCBvciBCQ1AgNDcgVW5pY29kZSBsb2NhbGUKLSAqIGV4
dGVuc2lvbiBrZXkpIHRvIHRoZSBlcXVpdmFsZW50IEJDUCA0NyBVbmljb2RlIGxvY2FsZSBleHRl
bnNpb24ga2V5LgotICogRm9yIGV4YW1wbGUsIEJDUCA0NyBVbmljb2RlIGxvY2FsZSBleHRlbnNp
b24ga2V5ICJjbyIgaXMgcmV0dXJuZWQgZm9yCi0gKiB0aGUgaW5wdXQga2V5d29yZCAiY29sbGF0
aW9uIi4KLSAqIDxwPgotICogV2hlbiB0aGUgc3BlY2lmaWVkIGtleXdvcmQgaXMgdW5rbm93biwg
YnV0IHNhdGlzZmllcyB0aGUgQkNQIHN5bnRheCwKLSAqIHRoZW4gdGhlIHBvaW50ZXIgdG8gdGhl
IGlucHV0IGtleXdvcmQgaXRzZWxmIHdpbGwgYmUgcmV0dXJuZWQuCi0gKiBGb3IgZXhhbXBsZSwK
LSAqIDxjb2RlPnVsb2NfdG9Vbmljb2RlTG9jYWxlS2V5KCJaWiIpPC9jb2RlPiByZXR1cm5zICJa
WiIuCi0gKiAKLSAqIEBwYXJhbSBrZXl3b3JkICAgICAgIHRoZSBpbnB1dCBsb2NhbGUga2V5d29y
ZCAoZWl0aGVyIGxlZ2FjeSBrZXkKLSAqICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgImNv
bGxhdGlvbiIgb3IgQkNQIDQ3IFVuaWNvZGUgbG9jYWxlIGV4dGVuc2lvbgotICogICAgICAgICAg
ICAgICAgICAgICAga2V5IHN1Y2ggYXMgImNvIikuCi0gKiBAcmV0dXJuICAgICAgICAgICAgICB0
aGUgd2VsbC1mb3JtZWQgQkNQIDQ3IFVuaWNvZGUgbG9jYWxlIGV4dGVuc2lvbiBrZXksCi0gKiAg
ICAgICAgICAgICAgICAgICAgICBvciBOVUxMIGlmIHRoZSBzcGVjaWZpZWQgbG9jYWxlIGtleXdv
cmQgY2Fubm90IGJlCi0gKiAgICAgICAgICAgICAgICAgICAgICBtYXBwZWQgdG8gYSB3ZWxsLWZv
cm1lZCBCQ1AgNDcgVW5pY29kZSBsb2NhbGUgZXh0ZW5zaW9uCi0gKiAgICAgICAgICAgICAgICAg
ICAgICBrZXkuIAotICogQHNlZSB1bG9jX3RvTGVnYWN5S2V5Ci0gKiBAZHJhZnQgSUNVIDU0Ci0g
Ki8KLVVfRFJBRlQgY29uc3QgY2hhciogVV9FWFBPUlQyCi11bG9jX3RvVW5pY29kZUxvY2FsZUtl
eShjb25zdCBjaGFyKiBrZXl3b3JkKTsKLQotLyoqCi0gKiBDb252ZXJ0cyB0aGUgc3BlY2lmaWVk
IGtleXdvcmQgdmFsdWUgKGxlZ2FjeSB0eXBlLCBvciBCQ1AgNDcKLSAqIFVuaWNvZGUgbG9jYWxl
IGV4dGVuc2lvbiB0eXBlKSB0byB0aGUgd2VsbC1mb3JtZWQgQkNQIDQ3IFVuaWNvZGUgbG9jYWxl
Ci0gKiBleHRlbnNpb24gdHlwZSBmb3IgdGhlIHNwZWNpZmllZCBrZXl3b3JkIChjYXRlZ29yeSku
IEZvciBleGFtcGxlLCBCQ1AgNDcKLSAqIFVuaWNvZGUgbG9jYWxlIGV4dGVuc2lvbiB0eXBlICJw
aG9uZWJrIiBpcyByZXR1cm5lZCBmb3IgdGhlIGlucHV0Ci0gKiBrZXl3b3JkIHZhbHVlICJwaG9u
ZWJvb2siLCB3aXRoIHRoZSBrZXl3b3JkICJjb2xsYXRpb24iIChvciAiY28iKS4KLSAqIDxwPgot
ICogV2hlbiB0aGUgc3BlY2lmaWVkIGtleXdvcmQgaXMgbm90IHJlY29nbml6ZWQsIGJ1dCB0aGUg
c3BlY2lmaWVkIHZhbHVlCi0gKiBzYXRpc2ZpZXMgdGhlIHN5bnRheCBvZiB0aGUgQkNQIDQ3IFVu
aWNvZGUgbG9jYWxlIGV4dGVuc2lvbiB0eXBlLAotICogb3Igd2hlbiB0aGUgc3BlY2lmaWVkIGtl
eXdvcmQgYWxsb3dzICd2YXJpYWJsZScgdHlwZSBhbmQgdGhlIHNwZWNpZmllZAotICogdmFsdWUg
c2F0aXNmaWVzIHRoZSBzeW50YXgsICB0aGVuIHRoZSBwb2ludGVyIHRvIHRoZSBpbnB1dCB0eXBl
IHZhbHVlIGl0c2VsZgotICogd2lsbCBiZSByZXR1cm5lZC4KLSAqIEZvciBleGFtcGxlLAotICog
PGNvZGU+dWxvY190b1VuaWNvZGVMb2NhbGVUeXBlKCJGb28iLCAiQmFyIik8L2NvZGU+IHJldHVy
bnMgIkJhciIsCi0gKiA8Y29kZT51bG9jX3RvVW5pY29kZUxvY2FsZVR5cGUoInZhcmlhYmxlVG9w
IiwgIjAwQTQiKTwvY29kZT4gcmV0dXJucyAiMDBBNCIuCi0gKiAKLSAqIEBwYXJhbSBrZXl3b3Jk
ICAgICAgIHRoZSBsb2NhbGUga2V5d29yZCAoZWl0aGVyIGxlZ2FjeSBrZXkgc3VjaCBhcwotICog
ICAgICAgICAgICAgICAgICAgICAgImNvbGxhdGlvbiIgb3IgQkNQIDQ3IFVuaWNvZGUgbG9jYWxl
IGV4dGVuc2lvbgotICogICAgICAgICAgICAgICAgICAgICAga2V5IHN1Y2ggYXMgImNvIikuCi0g
KiBAcGFyYW0gdmFsdWUgICAgICAgICB0aGUgbG9jYWxlIGtleXdvcmQgdmFsdWUgKGVpdGhlciBs
ZWdhY3kgdHlwZQotICogICAgICAgICAgICAgICAgICAgICAgc3VjaCBhcyAicGhvbmVib29rIiBv
ciBCQ1AgNDcgVW5pY29kZSBsb2NhbGUgZXh0ZW5zaW9uCi0gKiAgICAgICAgICAgICAgICAgICAg
ICB0eXBlIHN1Y2ggYXMgInBob25lYmsiKS4KLSAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSB3
ZWxsLWZvcm1lZCBCQ1A0NyBVbmljb2RlIGxvY2FsZSBleHRlbnNpb24gdHlwZSwKLSAqICAgICAg
ICAgICAgICAgICAgICAgIG9yIE5VTEwgaWYgdGhlIGxvY2FsZSBrZXl3b3JkIHZhbHVlIGNhbm5v
dCBiZSBtYXBwZWQgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgIGEgd2VsbC1mb3JtZWQgQkNQ
IDQ3IFVuaWNvZGUgbG9jYWxlIGV4dGVuc2lvbiB0eXBlLgotICogQHNlZSB1bG9jX3RvTGVnYWN5
VHlwZQotICogQGRyYWZ0IElDVSA1NAotICovCi1VX0RSQUZUIGNvbnN0IGNoYXIqIFVfRVhQT1JU
MgotdWxvY190b1VuaWNvZGVMb2NhbGVUeXBlKGNvbnN0IGNoYXIqIGtleXdvcmQsIGNvbnN0IGNo
YXIqIHZhbHVlKTsKLQotLyoqCi0gKiBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIGtleXdvcmQgKEJD
UCA0NyBVbmljb2RlIGxvY2FsZSBleHRlbnNpb24ga2V5LCBvcgotICogbGVnYWN5IGtleSkgdG8g
dGhlIGxlZ2FjeSBrZXkuIEZvciBleGFtcGxlLCBsZWdhY3kga2V5ICJjb2xsYXRpb24iIGlzCi0g
KiByZXR1cm5lZCBmb3IgdGhlIGlucHV0IEJDUCA0NyBVbmljb2RlIGxvY2FsZSBleHRlbnNpb24g
a2V5ICJjbyIuCi0gKiAKLSAqIEBwYXJhbSBrZXl3b3JkICAgICAgIHRoZSBpbnB1dCBsb2NhbGUg
a2V5d29yZCAoZWl0aGVyIEJDUCA0NyBVbmljb2RlIGxvY2FsZQotICogICAgICAgICAgICAgICAg
ICAgICAgZXh0ZW5zaW9uIGtleSBvciBsZWdhY3kga2V5KS4KLSAqIEByZXR1cm4gICAgICAgICAg
ICAgIHRoZSB3ZWxsLWZvcm1lZCBsZWdhY3kga2V5LCBvciBOVUxMIGlmIHRoZSBzcGVjaWZpZWQK
LSAqICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQgY2Fubm90IGJlIG1hcHBlZCB0byBhIHdl
bGwtZm9ybWVkIGxlZ2FjeSBrZXkuCi0gKiBAc2VlIHRvVW5pY29kZUxvY2FsZUtleQotICogQGRy
YWZ0IElDVSA1NAotICovCi1VX0RSQUZUIGNvbnN0IGNoYXIqIFVfRVhQT1JUMgotdWxvY190b0xl
Z2FjeUtleShjb25zdCBjaGFyKiBrZXl3b3JkKTsKLQotLyoqCi0gKiBDb252ZXJ0cyB0aGUgc3Bl
Y2lmaWVkIGtleXdvcmQgdmFsdWUgKEJDUCA0NyBVbmljb2RlIGxvY2FsZSBleHRlbnNpb24gdHlw
ZSwKLSAqIG9yIGxlZ2FjeSB0eXBlIG9yIHR5cGUgYWxpYXMpIHRvIHRoZSBjYW5vbmljYWwgbGVn
YWN5IHR5cGUuIEZvciBleGFtcGxlLAotICogdGhlIGxlZ2FjeSB0eXBlICJwaG9uZWJvb2siIGlz
IHJldHVybmVkIGZvciB0aGUgaW5wdXQgQkNQIDQ3IFVuaWNvZGUKLSAqIGxvY2FsZSBleHRlbnNp
b24gdHlwZSAicGhvbmViayIgd2l0aCB0aGUga2V5d29yZCAiY29sbGF0aW9uIiAob3IgImNvIiku
Ci0gKiA8cD4KLSAqIFdoZW4gdGhlIHNwZWNpZmllZCBrZXl3b3JkIGlzIG5vdCByZWNvZ25pemVk
LCBidXQgdGhlIHNwZWNpZmllZCB2YWx1ZQotICogc2F0aXNmaWVzIHRoZSBzeW50YXggb2YgbGVn
YWN5IGtleSwgb3Igd2hlbiB0aGUgc3BlY2lmaWVkIGtleXdvcmQKLSAqIGFsbG93cyAndmFyaWFi
bGUnIHR5cGUgYW5kIHRoZSBzcGVjaWZpZWQgdmFsdWUgc2F0aXNmaWVzIHRoZSBzeW50YXgsCi0g
KiB0aGVuIHRoZSBwb2ludGVyIHRvIHRoZSBpbnB1dCB0eXBlIHZhbHVlIGl0c2VsZiB3aWxsIGJl
IHJldHVybmVkLgotICogRm9yIGV4YW1wbGUsCi0gKiA8Y29kZT51bG9jX3RvTGVnYWN5VHlwZSgi
Rm9vIiwgIkJhciIpPC9jb2RlPiByZXR1cm5zICJCYXIiLAotICogPGNvZGU+dWxvY190b0xlZ2Fj
eVR5cGUoInZ0IiwgIjAwQTQiKTwvY29kZT4gcmV0dXJucyAiMDBBNCIuCi0gKgotICogQHBhcmFt
IGtleXdvcmQgICAgICAgdGhlIGxvY2FsZSBrZXl3b3JkIChlaXRoZXIgbGVnYWN5IGtleXdvcmQg
c3VjaCBhcwotICogICAgICAgICAgICAgICAgICAgICAgImNvbGxhdGlvbiIgb3IgQkNQIDQ3IFVu
aWNvZGUgbG9jYWxlIGV4dGVuc2lvbgotICogICAgICAgICAgICAgICAgICAgICAga2V5IHN1Y2gg
YXMgImNvIikuCi0gKiBAcGFyYW0gdmFsdWUgICAgICAgICB0aGUgbG9jYWxlIGtleXdvcmQgdmFs
dWUgKGVpdGhlciBCQ1AgNDcgVW5pY29kZSBsb2NhbGUKLSAqICAgICAgICAgICAgICAgICAgICAg
IGV4dGVuc2lvbiB0eXBlIHN1Y2ggYXMgInBob25lYmsiIG9yIGxlZ2FjeSBrZXl3b3JkIHZhbHVl
Ci0gKiAgICAgICAgICAgICAgICAgICAgICBzdWNoIGFzICJwaG9uZWJvb2siKS4KLSAqIEByZXR1
cm4gICAgICAgICAgICAgIHRoZSB3ZWxsLWZvcm1lZCBsZWdhY3kgdHlwZSwgb3IgTlVMTCBpZiB0
aGUgc3BlY2lmaWVkCi0gKiAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkIHZhbHVlIGNhbm5v
dCBiZSBtYXBwZWQgdG8gYSB3ZWxsLWZvcm1lZCBsZWdhY3kKLSAqICAgICAgICAgICAgICAgICAg
ICAgIHR5cGUuCi0gKiBAc2VlIHRvVW5pY29kZUxvY2FsZVR5cGUKLSAqIEBkcmFmdCBJQ1UgNTQK
LSAqLwotVV9EUkFGVCBjb25zdCBjaGFyKiBVX0VYUE9SVDIKLXVsb2NfdG9MZWdhY3lUeXBlKGNv
bnN0IGNoYXIqIGtleXdvcmQsIGNvbnN0IGNoYXIqIHZhbHVlKTsKLQotI2VuZGlmICAvKiBVX0hJ
REVfRFJBRlRfQVBJICovCi0KLSNlbmRpZiAvKl9VTE9DKi8KZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvdW1hY2hp
bmUuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1
L3VuaWNvZGUvdW1hY2hpbmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMyMTU5
MjE2YTVlM2QxMzAyN2E3ZmZlZjZmYzMyOGM3YjZmNjRiOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93
dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3VtYWNoaW5lLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzNTYgKzAsMCBAQAotLyoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiAgIENvcHlyaWdo
dCAoQykgMTk5OS0yMDE0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCi0qICAgQ29y
cG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qCi0qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKLSogICBmaWxlIG5hbWU6ICB1bWFjaGluZS5oCi0qICAgZW5jb2Rpbmc6ICAg
VVMtQVNDSUkKLSogICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkKLSogICBpbmRlbnRhdGlvbjo0
Ci0qCi0qICAgY3JlYXRlZCBvbjogMTk5OXNlcDEzCi0qICAgY3JlYXRlZCBieTogTWFya3VzIFcu
IFNjaGVyZXIKLSoKLSogICBUaGlzIGZpbGUgZGVmaW5lcyBiYXNpYyB0eXBlcyBhbmQgY29uc3Rh
bnRzIGZvciBJQ1UgdG8gYmUKLSogICBwbGF0Zm9ybS1pbmRlcGVuZGVudC4gdW1hY2hpbmUuaCBh
bmQgdXRmLmggYXJlIGluY2x1ZGVkIGludG8KLSogICB1dHlwZXMuaCB0byBwcm92aWRlIGFsbCB0
aGUgZ2VuZXJhbCBkZWZpbml0aW9ucyBmb3IgSUNVLgotKiAgIEFsbCBvZiB0aGVzZSBkZWZpbml0
aW9ucyB1c2VkIHRvIGJlIGluIHV0eXBlcy5oIGJlZm9yZQotKiAgIHRoZSBVVEYtaGFuZGxpbmcg
bWFjcm9zIG1hZGUgdGhpcyB1bm1haW50YWluYWJsZS4KLSovCi0KLSNpZm5kZWYgX19VTUFDSElO
RV9IX18KLSNkZWZpbmUgX19VTUFDSElORV9IX18KLQotCi0vKioKLSAqIFxmaWxlCi0gKiBcYnJp
ZWYgQmFzaWMgdHlwZXMgYW5kIGNvbnN0YW50cyBmb3IgVVRGCi0gKgotICogPGgyPiBCYXNpYyB0
eXBlcyBhbmQgY29uc3RhbnRzIGZvciBVVEYgPC9oMj4KLSAqICAgVGhpcyBmaWxlIGRlZmluZXMg
YmFzaWMgdHlwZXMgYW5kIGNvbnN0YW50cyBmb3IgdXRmLmggdG8gYmUKLSAqICAgcGxhdGZvcm0t
aW5kZXBlbmRlbnQuIHVtYWNoaW5lLmggYW5kIHV0Zi5oIGFyZSBpbmNsdWRlZCBpbnRvCi0gKiAg
IHV0eXBlcy5oIHRvIHByb3ZpZGUgYWxsIHRoZSBnZW5lcmFsIGRlZmluaXRpb25zIGZvciBJQ1Uu
Ci0gKiAgIEFsbCBvZiB0aGVzZSBkZWZpbml0aW9ucyB1c2VkIHRvIGJlIGluIHV0eXBlcy5oIGJl
Zm9yZQotICogICB0aGUgVVRGLWhhbmRsaW5nIG1hY3JvcyBtYWRlIHRoaXMgdW5tYWludGFpbmFi
bGUuCi0gKgotICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEluY2x1ZGUgcGxhdGZvcm0t
ZGVwZW5kZW50IGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
LwotLyogd2hpY2ggYXJlIGNvbnRhaW5lZCBpbiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZmlsZSBw
bGF0Zm9ybS5oICAgICAgICAgICAgICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotI2luY2x1
ZGUgInVuaWNvZGUvcHR5cGVzLmgiIC8qIHBsYXRmb3JtLmggaXMgaW5jbHVkZWQgaW4gcHR5cGVz
LmggKi8KLQotLyoKLSAqIEFOU0kgQyBoZWFkZXJzOgotICogc3RkZGVmLmggZGVmaW5lcyB3Y2hh
cl90Ci0gKi8KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotLyo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0v
KiBGb3IgQyB3cmFwcGVycywgd2UgdXNlIHRoZSBzeW1ib2wgVV9TVEFCTEUuICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhpcyB3b3JrcyBwcm9wZXJseSBpZiB0aGUgaW5j
bHVkZXIgaXMgQyBvciBDKysuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBGdW5jdGlv
bnMgYXJlIGRlY2xhcmVkICAgVV9TVEFCTEUgcmV0dXJuLXR5cGUgVV9FWFBPUlQyIGZ1bmN0aW9u
LW5hbWUoKS4uLiAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qKgotICogXGRlZiBVX0NG
VU5DCi0gKiBUaGlzIGlzIHVzZWQgaW4gYSBkZWNsYXJhdGlvbiBvZiBhIGxpYnJhcnkgcHJpdmF0
ZSBJQ1UgQyBmdW5jdGlvbi4KLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0KLS8qKgotICogXGRl
ZiBVX0NERUNMX0JFR0lOCi0gKiBUaGlzIGlzIHVzZWQgdG8gYmVnaW4gYSBkZWNsYXJhdGlvbiBv
ZiBhIGxpYnJhcnkgcHJpdmF0ZSBJQ1UgQyBBUEkuCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwot
Ci0vKioKLSAqIFxkZWYgVV9DREVDTF9FTkQKLSAqIFRoaXMgaXMgdXNlZCB0byBlbmQgYSBkZWNs
YXJhdGlvbiBvZiBhIGxpYnJhcnkgcHJpdmF0ZSBJQ1UgQyBBUEkKLSAqIEBzdGFibGUgSUNVIDIu
NAotICovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotIyAgIGRlZmluZSBVX0NGVU5DIGV4dGVybiAi
QyIKLSMgICBkZWZpbmUgVV9DREVDTF9CRUdJTiBleHRlcm4gIkMiIHsKLSMgICBkZWZpbmUgVV9D
REVDTF9FTkQgICB9Ci0jZWxzZQotIyAgIGRlZmluZSBVX0NGVU5DIGV4dGVybgotIyAgIGRlZmlu
ZSBVX0NERUNMX0JFR0lOCi0jICAgZGVmaW5lIFVfQ0RFQ0xfRU5ECi0jZW5kaWYKLQotI2lmbmRl
ZiBVX0FUVFJJQlVURV9ERVBSRUNBVEVECi0vKioKLSAqIFxkZWYgVV9BVFRSSUJVVEVfREVQUkVD
QVRFRAotICogIFRoaXMgaXMgdXNlZCBmb3IgR0NDIHNwZWNpZmljIGF0dHJpYnV0ZXMKLSAqIEBp
bnRlcm5hbAotICovCi0jaWYgVV9HQ0NfTUFKT1JfTUlOT1IgPj0gMzAyCi0jICAgIGRlZmluZSBV
X0FUVFJJQlVURV9ERVBSRUNBVEVEIF9fYXR0cmlidXRlX18gKChkZXByZWNhdGVkKSkKLS8qKgot
ICogXGRlZiBVX0FUVFJJQlVURV9ERVBSRUNBVEVECi0gKiBUaGlzIGlzIHVzZWQgZm9yIFZpc3Vh
bCBDKysgc3BlY2lmaWMgYXR0cmlidXRlcyAKLSAqIEBpbnRlcm5hbAotICovCi0jZWxpZiBkZWZp
bmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTQwMCkKLSMgICAgZGVmaW5lIFVfQVRUUklC
VVRFX0RFUFJFQ0FURUQgX19kZWNsc3BlYyhkZXByZWNhdGVkKQotI2Vsc2UKLSMgICAgZGVmaW5l
IFVfQVRUUklCVVRFX0RFUFJFQ0FURUQKLSNlbmRpZgotI2VuZGlmCi0KLS8qKiBUaGlzIGlzIHVz
ZWQgdG8gZGVjbGFyZSBhIGZ1bmN0aW9uIGFzIGEgcHVibGljIElDVSBDIEFQSSBAc3RhYmxlIElD
VSAyLjAqLwotI2RlZmluZSBVX0NBUEkgVV9DRlVOQyBVX0VYUE9SVAotLyoqIFRoaXMgaXMgdXNl
ZCB0byBkZWNsYXJlIGEgZnVuY3Rpb24gYXMgYSBzdGFibGUgcHVibGljIElDVSBDIEFQSSovCi0j
ZGVmaW5lIFVfU1RBQkxFIFVfQ0FQSQotLyoqIFRoaXMgaXMgdXNlZCB0byBkZWNsYXJlIGEgZnVu
Y3Rpb24gYXMgYSBkcmFmdCBwdWJsaWMgSUNVIEMgQVBJICAqLwotI2RlZmluZSBVX0RSQUZUICBV
X0NBUEkKLS8qKiBUaGlzIGlzIHVzZWQgdG8gZGVjbGFyZSBhIGZ1bmN0aW9uIGFzIGEgZGVwcmVj
YXRlZCBwdWJsaWMgSUNVIEMgQVBJICAqLwotI2RlZmluZSBVX0RFUFJFQ0FURUQgVV9DQVBJIFVf
QVRUUklCVVRFX0RFUFJFQ0FURUQKLS8qKiBUaGlzIGlzIHVzZWQgdG8gZGVjbGFyZSBhIGZ1bmN0
aW9uIGFzIGFuIG9ic29sZXRlIHB1YmxpYyBJQ1UgQyBBUEkgICovCi0jZGVmaW5lIFVfT0JTT0xF
VEUgVV9DQVBJCi0vKiogVGhpcyBpcyB1c2VkIHRvIGRlY2xhcmUgYSBmdW5jdGlvbiBhcyBhbiBp
bnRlcm5hbCBJQ1UgQyBBUEkgICovCi0jZGVmaW5lIFVfSU5URVJOQUwgVV9DQVBJCi0KLS8qKgot
ICogXGRlZiBVX09WRVJSSURFCi0gKiBEZWZpbmVkIHRvIHRoZSBDKysxMSAib3ZlcnJpZGUiIGtl
eXdvcmQgaWYgYXZhaWxhYmxlLgotICogRGVub3RlcyBhIGNsYXNzIG9yIG1lbWJlciB3aGljaCBp
cyBhbiBvdmVycmlkZSBvZiB0aGUgYmFzZSBjbGFzcy4KLSAqIE1heSByZXN1bHQgaW4gYW4gZXJy
b3IgaWYgaXQgYXBwbGllZCB0byBzb21ldGhpbmcgbm90IGFuIG92ZXJyaWRlLgotICogQGludGVy
bmFsCi0gKi8KLQotLyoqCi0gKiBcZGVmIFVfRklOQUwKLSAqIERlZmluZWQgdG8gdGhlIEMrKzEx
ICJmaW5hbCIga2V5d29yZCBpZiBhdmFpbGFibGUuCi0gKiBEZW5vdGVzIGEgY2xhc3Mgb3IgbWVt
YmVyIHdoaWNoIG1heSBub3QgYmUgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzc2VzLgotICogTWF5IHJl
c3VsdCBpbiBhbiBlcnJvciBpZiBzdWJjbGFzc2VzIGF0dGVtcHQgdG8gb3ZlcnJpZGUuCi0gKiBA
aW50ZXJuYWwKLSAqLwotCi0jaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgX19jcGx1c3BsdXM+
PTIwMTEwM0wKLS8qIEMrKzExICovCi0jaWZuZGVmIFVfT1ZFUlJJREUKLSNkZWZpbmUgVV9PVkVS
UklERSBvdmVycmlkZQotI2VuZGlmCi0jaWZuZGVmIFVfRklOQUwKLSNkZWZpbmUgVV9GSU5BTCBm
aW5hbAotI2VuZGlmCi0jZWxzZQotLyogbm90IEMrKzExIC0gZGVmaW5lIHRvIG5vdGhpbmcgKi8K
LSNpZm5kZWYgVV9PVkVSUklERQotI2RlZmluZSBVX09WRVJSSURFCi0jZW5kaWYKLSNpZm5kZWYg
VV9GSU5BTAotI2RlZmluZSBVX0ZJTkFMCi0jZW5kaWYKLSNlbmRpZgotCi0vKj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ki8KLS8qIGxpbWl0cyBmb3IgaW50MzJfdCBldGMuLCBsaWtlIGluIFBPU0lYIGludHR5
cGVzLmggICAgICAgICAgICAgICAgICAgICAgICAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0K
LSNpZm5kZWYgSU5UOF9NSU4KLS8qKiBUaGUgc21hbGxlc3QgdmFsdWUgYW4gOCBiaXQgc2lnbmVk
IGludGVnZXIgY2FuIGhvbGQgQHN0YWJsZSBJQ1UgMi4wICovCi0jICAgZGVmaW5lIElOVDhfTUlO
ICAgICAgICAoKGludDhfdCkoLTEyOCkpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUlOCi0vKiog
VGhlIHNtYWxsZXN0IHZhbHVlIGEgMTYgYml0IHNpZ25lZCBpbnRlZ2VyIGNhbiBob2xkIEBzdGFi
bGUgSUNVIDIuMCAqLwotIyAgIGRlZmluZSBJTlQxNl9NSU4gICAgICAgKChpbnQxNl90KSgtMzI3
NjctMSkpCi0jZW5kaWYKLSNpZm5kZWYgSU5UMzJfTUlOCi0vKiogVGhlIHNtYWxsZXN0IHZhbHVl
IGEgMzIgYml0IHNpZ25lZCBpbnRlZ2VyIGNhbiBob2xkIEBzdGFibGUgSUNVIDIuMCAqLwotIyAg
IGRlZmluZSBJTlQzMl9NSU4gICAgICAgKChpbnQzMl90KSgtMjE0NzQ4MzY0Ny0xKSkKLSNlbmRp
ZgotCi0jaWZuZGVmIElOVDhfTUFYCi0vKiogVGhlIGxhcmdlc3QgdmFsdWUgYW4gOCBiaXQgc2ln
bmVkIGludGVnZXIgY2FuIGhvbGQgQHN0YWJsZSBJQ1UgMi4wICovCi0jICAgZGVmaW5lIElOVDhf
TUFYICAgICAgICAoKGludDhfdCkoMTI3KSkKLSNlbmRpZgotI2lmbmRlZiBJTlQxNl9NQVgKLS8q
KiBUaGUgbGFyZ2VzdCB2YWx1ZSBhIDE2IGJpdCBzaWduZWQgaW50ZWdlciBjYW4gaG9sZCBAc3Rh
YmxlIElDVSAyLjAgKi8KLSMgICBkZWZpbmUgSU5UMTZfTUFYICAgICAgICgoaW50MTZfdCkoMzI3
NjcpKQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01BWAotLyoqIFRoZSBsYXJnZXN0IHZhbHVlIGEg
MzIgYml0IHNpZ25lZCBpbnRlZ2VyIGNhbiBob2xkIEBzdGFibGUgSUNVIDIuMCAqLwotIyAgIGRl
ZmluZSBJTlQzMl9NQVggICAgICAgKChpbnQzMl90KSgyMTQ3NDgzNjQ3KSkKLSNlbmRpZgotCi0j
aWZuZGVmIFVJTlQ4X01BWAotLyoqIFRoZSBsYXJnZXN0IHZhbHVlIGFuIDggYml0IHVuc2lnbmVk
IGludGVnZXIgY2FuIGhvbGQgQHN0YWJsZSBJQ1UgMi4wICovCi0jICAgZGVmaW5lIFVJTlQ4X01B
WCAgICAgICAoKHVpbnQ4X3QpKDI1NVUpKQotI2VuZGlmCi0jaWZuZGVmIFVJTlQxNl9NQVgKLS8q
KiBUaGUgbGFyZ2VzdCB2YWx1ZSBhIDE2IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIGNhbiBob2xkIEBz
dGFibGUgSUNVIDIuMCAqLwotIyAgIGRlZmluZSBVSU5UMTZfTUFYICAgICAgKCh1aW50MTZfdCko
NjU1MzVVKSkKLSNlbmRpZgotI2lmbmRlZiBVSU5UMzJfTUFYCi0vKiogVGhlIGxhcmdlc3QgdmFs
dWUgYSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlciBjYW4gaG9sZCBAc3RhYmxlIElDVSAyLjAgKi8K
LSMgICBkZWZpbmUgVUlOVDMyX01BWCAgICAgICgodWludDMyX3QpKDQyOTQ5NjcyOTVVKSkKLSNl
bmRpZgotCi0jaWYgZGVmaW5lZChVX0lOVDY0X1RfVU5BVkFJTEFCTEUpCi0jIGVycm9yIGludDY0
X3QgaXMgcmVxdWlyZWQgZm9yIGRlY2ltYWwgZm9ybWF0IGFuZCBydWxlLWJhc2VkIG51bWJlciBm
b3JtYXQuCi0jZWxzZQotIyBpZm5kZWYgSU5UNjRfQwotLyoqCi0gKiBQcm92aWRlcyBhIHBsYXRm
b3JtIGluZGVwZW5kZW50IHdheSB0byBzcGVjaWZ5IGEgc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGNv
bnN0YW50LgotICogbm90ZTogbWF5IGJlIHdyb25nIGZvciBzb21lIDY0IGJpdCBwbGF0Zm9ybXMg
LSBlbnN1cmUgeW91ciBjb21waWxlciBwcm92aWRlcyBJTlQ2NF9DCi0gKiBAc3RhYmxlIElDVSAy
LjgKLSAqLwotIyAgIGRlZmluZSBJTlQ2NF9DKGMpIGMgIyMgTEwKLSMgZW5kaWYKLSMgaWZuZGVm
IFVJTlQ2NF9DCi0vKioKLSAqIFByb3ZpZGVzIGEgcGxhdGZvcm0gaW5kZXBlbmRlbnQgd2F5IHRv
IHNwZWNpZnkgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgY29uc3RhbnQuCi0gKiBub3RlOiBt
YXkgYmUgd3JvbmcgZm9yIHNvbWUgNjQgYml0IHBsYXRmb3JtcyAtIGVuc3VyZSB5b3VyIGNvbXBp
bGVyIHByb3ZpZGVzIFVJTlQ2NF9DCi0gKiBAc3RhYmxlIElDVSAyLjgKLSAqLwotIyAgIGRlZmlu
ZSBVSU5UNjRfQyhjKSBjICMjIFVMTAotIyBlbmRpZgotIyBpZm5kZWYgVV9JTlQ2NF9NSU4KLS8q
KiBUaGUgc21hbGxlc3QgdmFsdWUgYSA2NCBiaXQgc2lnbmVkIGludGVnZXIgY2FuIGhvbGQgQHN0
YWJsZSBJQ1UgMi44ICovCi0jICAgICBkZWZpbmUgVV9JTlQ2NF9NSU4gICAgICAgKChpbnQ2NF90
KShJTlQ2NF9DKC05MjIzMzcyMDM2ODU0Nzc1ODA3KS0xKSkKLSMgZW5kaWYKLSMgaWZuZGVmIFVf
SU5UNjRfTUFYCi0vKiogVGhlIGxhcmdlc3QgdmFsdWUgYSA2NCBiaXQgc2lnbmVkIGludGVnZXIg
Y2FuIGhvbGQgQHN0YWJsZSBJQ1UgMi44ICovCi0jICAgICBkZWZpbmUgVV9JTlQ2NF9NQVggICAg
ICAgKChpbnQ2NF90KShJTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpKSkKLSMgZW5kaWYKLSMg
aWZuZGVmIFVfVUlOVDY0X01BWAotLyoqIFRoZSBsYXJnZXN0IHZhbHVlIGEgNjQgYml0IHVuc2ln
bmVkIGludGVnZXIgY2FuIGhvbGQgQHN0YWJsZSBJQ1UgMi44ICovCi0jICAgICBkZWZpbmUgVV9V
SU5UNjRfTUFYICAgICAgKCh1aW50NjRfdCkoVUlOVDY0X0MoMTg0NDY3NDQwNzM3MDk1NTE2MTUp
KSkKLSMgZW5kaWYKLSNlbmRpZgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEJvb2xlYW4g
ZGF0YSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qKiBUaGUgSUNVIGJvb2xlYW4g
dHlwZSBAc3RhYmxlIElDVSAyLjAgKi8KLXR5cGVkZWYgaW50OF90IFVCb29sOwotCi0jaWZuZGVm
IFRSVUUKLS8qKiBUaGUgVFJVRSB2YWx1ZSBvZiBhIFVCb29sIEBzdGFibGUgSUNVIDIuMCAqLwot
IyAgIGRlZmluZSBUUlVFICAxCi0jZW5kaWYKLSNpZm5kZWYgRkFMU0UKLS8qKiBUaGUgRkFMU0Ug
dmFsdWUgb2YgYSBVQm9vbCBAc3RhYmxlIElDVSAyLjAgKi8KLSMgICBkZWZpbmUgRkFMU0UgMAot
I2VuZGlmCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBVbmljb2RlIGRhdGEgdHlwZXMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K
LS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKiB3Y2hhcl90LXJlbGF0ZWQgZGVmaW5pdGlvbnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAq
IFxkZWYgVV9XQ0hBUl9JU19VVEYxNgotICogRGVmaW5lZCBpZiB3Y2hhcl90IHVzZXMgVVRGLTE2
LgotICoKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi0vKgotICogXGRlZiBVX1dDSEFSX0lTX1VU
RjMyCi0gKiBEZWZpbmVkIGlmIHdjaGFyX3QgdXNlcyBVVEYtMzIuCi0gKgotICogQHN0YWJsZSBJ
Q1UgMi4wCi0gKi8KLSNpZiAhZGVmaW5lZChVX1dDSEFSX0lTX1VURjE2KSAmJiAhZGVmaW5lZChV
X1dDSEFSX0lTX1VURjMyKQotIyAgIGlmZGVmIF9fU1REQ19JU09fMTA2NDZfXwotIyAgICAgICBp
ZiAoVV9TSVpFT0ZfV0NIQVJfVD09MikKLSMgICAgICAgICAgIGRlZmluZSBVX1dDSEFSX0lTX1VU
RjE2Ci0jICAgICAgIGVsaWYgKFVfU0laRU9GX1dDSEFSX1Q9PTQpCi0jICAgICAgICAgICBkZWZp
bmUgIFVfV0NIQVJfSVNfVVRGMzIKLSMgICAgICAgZW5kaWYKLSMgICBlbGlmIGRlZmluZWQgX19V
Q1MyX18KLSMgICAgICAgaWYgKFVfUEZfT1MzOTAgPD0gVV9QTEFURk9STSAmJiBVX1BMQVRGT1JN
IDw9IFVfUEZfT1M0MDApICYmIChVX1NJWkVPRl9XQ0hBUl9UPT0yKQotIyAgICAgICAgICAgZGVm
aW5lIFVfV0NIQVJfSVNfVVRGMTYKLSMgICAgICAgZW5kaWYKLSMgICBlbGlmIGRlZmluZWQoX19V
Q1M0X18pIHx8IChVX1BMQVRGT1JNID09IFVfUEZfT1M0MDAgJiYgZGVmaW5lZChfX1VURjMyX18p
KQotIyAgICAgICBpZiAoVV9TSVpFT0ZfV0NIQVJfVD09NCkKLSMgICAgICAgICAgIGRlZmluZSBV
X1dDSEFSX0lTX1VURjMyCi0jICAgICAgIGVuZGlmCi0jICAgZWxpZiBVX1BMQVRGT1JNX0lTX0RB
UldJTl9CQVNFRCB8fCAoVV9TSVpFT0ZfV0NIQVJfVD09NCAmJiBVX1BMQVRGT1JNX0lTX0xJTlVY
X0JBU0VEKQotIyAgICAgICBkZWZpbmUgVV9XQ0hBUl9JU19VVEYzMgotIyAgIGVsaWYgVV9QTEFU
Rk9STV9IQVNfV0lOMzJfQVBJCi0jICAgICAgIGRlZmluZSBVX1dDSEFSX0lTX1VURjE2Ci0jICAg
ZW5kaWYKLSNlbmRpZgotCi0vKiBVQ2hhciBhbmQgVUNoYXIzMiBkZWZpbml0aW9ucyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiogTnVtYmVyIG9m
IGJ5dGVzIGluIGEgVUNoYXIuIEBzdGFibGUgSUNVIDIuMCAqLwotI2RlZmluZSBVX1NJWkVPRl9V
Q0hBUiAyCi0KLS8qKgotICogXHZhciBVQ2hhcgotICogRGVmaW5lIFVDaGFyIHRvIGJlIFVDSEFS
X1RZUEUsIGlmIHRoYXQgaXMgI2RlZmluZWQgKGZvciBleGFtcGxlLCB0byBjaGFyMTZfdCksCi0g
KiBvciB3Y2hhcl90IGlmIHRoYXQgaXMgMTYgYml0cyB3aWRlOyBhbHdheXMgYXNzdW1lZCB0byBi
ZSB1bnNpZ25lZC4KLSAqIElmIG5laXRoZXIgaXMgYXZhaWxhYmxlLCB0aGVuIGRlZmluZSBVQ2hh
ciB0byBiZSB1aW50MTZfdC4KLSAqCi0gKiBUaGlzIG1ha2VzIHRoZSBkZWZpbml0aW9uIG9mIFVD
aGFyIHBsYXRmb3JtLWRlcGVuZGVudAotICogYnV0IGFsbG93cyBkaXJlY3Qgc3RyaW5nIHR5cGUg
Y29tcGF0aWJpbGl0eSB3aXRoIHBsYXRmb3JtcyB3aXRoCi0gKiAxNi1iaXQgd2NoYXJfdCB0eXBl
cy4KLSAqCi0gKiBAc3RhYmxlIElDVSA0LjQKLSAqLwotI2lmIGRlZmluZWQoVUNIQVJfVFlQRSkK
LSAgICB0eXBlZGVmIFVDSEFSX1RZUEUgVUNoYXI7Ci0vKiBOb3QgI2VsaWYgVV9IQVZFX0NIQVIx
Nl9UIC0tIGJlY2F1c2UgdGhhdCBpcyB0eXBlLWluY29tcGF0aWJsZSB3aXRoIHByZS1DKysxMSBj
YWxsZXJzCi0gICAgdHlwZWRlZiBjaGFyMTZfdCBVQ2hhcjsgICovCi0jZWxpZiBVX1NJWkVPRl9X
Q0hBUl9UPT0yCi0gICAgdHlwZWRlZiB3Y2hhcl90IFVDaGFyOwotI2VsaWYgZGVmaW5lZChfX0NI
QVIxNl9UWVBFX18pCi0gICAgdHlwZWRlZiBfX0NIQVIxNl9UWVBFX18gVUNoYXI7Ci0jZWxzZQot
ICAgIHR5cGVkZWYgdWludDE2X3QgVUNoYXI7Ci0jZW5kaWYKLQotLyoqCi0gKiBEZWZpbmUgVUNo
YXIzMiBhcyBhIHR5cGUgZm9yIHNpbmdsZSBVbmljb2RlIGNvZGUgcG9pbnRzLgotICogVUNoYXIz
MiBpcyBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciAoc2FtZSBhcyBpbnQzMl90KS4KLSAqCi0gKiBU
aGUgVW5pY29kZSBjb2RlIHBvaW50IHJhbmdlIGlzIDAuLjB4MTBmZmZmLgotICogQWxsIG90aGVy
IHZhbHVlcyAobmVnYXRpdmUgb3IgPj0weDExMDAwMCkgYXJlIGlsbGVnYWwgYXMgVW5pY29kZSBj
b2RlIHBvaW50cy4KLSAqIFRoZXkgbWF5IGJlIHVzZWQgYXMgc2VudGluZWwgdmFsdWVzIHRvIGlu
ZGljYXRlICJkb25lIiwgImVycm9yIgotICogb3Igc2ltaWxhciBub24tY29kZSBwb2ludCBjb25k
aXRpb25zLgotICoKLSAqIEJlZm9yZSBJQ1UgMi40IChKaXR0ZXJidWcgMjE0NiksIFVDaGFyMzIg
d2FzIGRlZmluZWQKLSAqIHRvIGJlIHdjaGFyX3QgaWYgdGhhdCBpcyAzMiBiaXRzIHdpZGUgKHdj
aGFyX3QgbWF5IGJlIHNpZ25lZCBvciB1bnNpZ25lZCkKLSAqIG9yIGVsc2UgdG8gYmUgdWludDMy
X3QuCi0gKiBUaGF0IGlzLCB0aGUgZGVmaW5pdGlvbiBvZiBVQ2hhcjMyIHdhcyBwbGF0Zm9ybS1k
ZXBlbmRlbnQuCi0gKgotICogQHNlZSBVX1NFTlRJTkVMCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAq
LwotdHlwZWRlZiBpbnQzMl90IFVDaGFyMzI7Ci0KLS8qKgotICogVGhpcyB2YWx1ZSBpcyBpbnRl
bmRlZCBmb3Igc2VudGluZWwgdmFsdWVzIGZvciBBUElzIHRoYXQKLSAqICh0YWtlIG9yKSByZXR1
cm4gc2luZ2xlIGNvZGUgcG9pbnRzIChVQ2hhcjMyKS4KLSAqIEl0IGlzIG91dHNpZGUgb2YgdGhl
IFVuaWNvZGUgY29kZSBwb2ludCByYW5nZSAwLi4weDEwZmZmZi4KLSAqIAotICogRm9yIGV4YW1w
bGUsIGEgImRvbmUiIG9yICJlcnJvciIgdmFsdWUgaW4gYSBuZXcgQVBJCi0gKiBjb3VsZCBiZSBp
bmRpY2F0ZWQgd2l0aCBVX1NFTlRJTkVMLgotICoKLSAqIElDVSBBUElzIGRlc2lnbmVkIGJlZm9y
ZSBJQ1UgMi40IHVzdWFsbHkgZGVmaW5lIHNlcnZpY2Utc3BlY2lmaWMgImRvbmUiCi0gKiB2YWx1
ZXMsIG1vc3RseSAweGZmZmYuCi0gKiBUaG9zZSBtYXkgbmVlZCB0byBiZSBkaXN0aW5ndWlzaGVk
IGZyb20KLSAqIGFjdHVhbCBVK2ZmZmYgdGV4dCBjb250ZW50cyBieSBjYWxsaW5nIGZ1bmN0aW9u
cyBsaWtlCi0gKiBDaGFyYWN0ZXJJdGVyYXRvcjo6aGFzTmV4dCgpIG9yIFVuaWNvZGVTdHJpbmc6
Omxlbmd0aCgpLgotICoKLSAqIEByZXR1cm4gLTEKLSAqIEBzZWUgVUNoYXIzMgotICogQHN0YWJs
ZSBJQ1UgMi40Ci0gKi8KLSNkZWZpbmUgVV9TRU5USU5FTCAoLTEpCi0KLSNpbmNsdWRlICJ1bmlj
b2RlL3VyZW5hbWUuaCIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3VuaXN0ci5oIGIvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS91bmlz
dHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhmZTJiM2IxZDZjOGEzNWM3N2Zh
YTEyMjBlNGZmZDc3OTYwMDMxMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVz
L2ljdS91bmljb2RlL3VuaXN0ci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUxOCArMCwwIEBACi0v
KgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgotKiAgIENvcHlyaWdodCAoQykgMTk5OC0yMDE0LCBJbnRlcm5hdGlv
bmFsIEJ1c2luZXNzIE1hY2hpbmVzCi0qICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qIEZpbGUgdW5pc3RyLmgKLSoKLSog
TW9kaWZpY2F0aW9uIEhpc3Rvcnk6Ci0qCi0qICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVz
Y3JpcHRpb24KLSogICAwOS8yNS85OCAgICBzdGVwaGVuICAgICBDcmVhdGlvbi4KLSogICAxMS8x
MS85OCAgICBzdGVwaGVuICAgICBDaGFuZ2VkIHBlciAxMS85IGNvZGUgcmV2aWV3LgotKiAgIDA0
LzIwLzk5ICAgIHN0ZXBoZW4gICAgIE92ZXJoYXVsZWQgcGVyIDQvMTYgY29kZSByZXZpZXcuCi0q
ICAgMTEvMTgvOTkgICAgYWxpdSAgICAgICAgTWFkZSB0byBpbmhlcml0IGZyb20gUmVwbGFjZWFi
bGUuICBBZGRlZCBtZXRob2QKLSogICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVSZXBs
YWNlQmV0d2VlbigpOyBvdGhlciBtZXRob2RzIHVuY2hhbmdlZC4KLSogICAwNi8yNS8wMSAgICBn
cmhvdGVuICAgICBSZW1vdmUgZGVwZW5kZW5jeSBvbiBpb3N0cmVhbS4KLSoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgotKi8KLQotI2lmbmRlZiBVTklTVFJfSAotI2RlZmluZSBVTklTVFJfSAotCi0vKioK
LSAqIFxmaWxlIAotICogXGJyaWVmIEMrKyBBUEk6IFVuaWNvZGUgU3RyaW5nIAotICovCi0KLSNp
bmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgotI2luY2x1ZGUgInVuaWNvZGUvcmVwLmgiCi0jaW5j
bHVkZSAidW5pY29kZS9zdGRfc3RyaW5nLmgiCi0jaW5jbHVkZSAidW5pY29kZS9zdHJpbmdwaWVj
ZS5oIgotI2luY2x1ZGUgInVuaWNvZGUvYnl0ZXN0cmVhbS5oIgotI2luY2x1ZGUgInVuaWNvZGUv
dWNhc2VtYXAuaCIKLQotc3RydWN0IFVDb252ZXJ0ZXI7ICAgICAgICAgIC8vIHVuaWNvZGUvdWNu
di5oCi1jbGFzcyAgU3RyaW5nVGhyZWFkVGVzdDsKLQotI2lmbmRlZiBVX0NPTVBBUkVfQ09ERV9Q
T0lOVF9PUkRFUgotLyogc2VlIGFsc28gdXN0cmluZy5oIGFuZCB1bm9ybS5oICovCi0vKioKLSAq
IE9wdGlvbiBiaXQgZm9yIHVfc3RyQ2FzZUNvbXBhcmUsIHVfc3RyY2FzZWNtcCwgdW5vcm1fY29t
cGFyZSwgZXRjOgotICogQ29tcGFyZSBzdHJpbmdzIGluIGNvZGUgcG9pbnQgb3JkZXIgaW5zdGVh
ZCBvZiBjb2RlIHVuaXQgb3JkZXIuCi0gKiBAc3RhYmxlIElDVSAyLjIKLSAqLwotI2RlZmluZSBV
X0NPTVBBUkVfQ09ERV9QT0lOVF9PUkRFUiAgMHg4MDAwCi0jZW5kaWYKLQotI2lmbmRlZiBVU1RS
SU5HX0gKLS8qKgotICogXGluZ3JvdXAgdXN0cmluZ191c3RybGVuCi0gKi8KLVVfU1RBQkxFIGlu
dDMyX3QgVV9FWFBPUlQyCi11X3N0cmxlbihjb25zdCBVQ2hhciAqcyk7Ci0jZW5kaWYKLQotLyoq
Ci0gKiBcZGVmIFVfU1RSSU5HX0NBU0VfTUFQUEVSX0RFRklORUQKLSAqIEBpbnRlcm5hbAotICov
Ci0jaWZuZGVmIFVfU1RSSU5HX0NBU0VfTUFQUEVSX0RFRklORUQKLSNkZWZpbmUgVV9TVFJJTkdf
Q0FTRV9NQVBQRVJfREVGSU5FRAotCi0vKioKLSAqIEludGVybmFsIHN0cmluZyBjYXNlIG1hcHBp
bmcgZnVuY3Rpb24gdHlwZS4KLSAqIEBpbnRlcm5hbAotICovCi10eXBlZGVmIGludDMyX3QgVV9D
QUxMQ09OVgotVVN0cmluZ0Nhc2VNYXBwZXIoY29uc3QgVUNhc2VNYXAgKmNzbSwKLSAgICAgICAg
ICAgICAgICAgIFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKLSAgICAgICAgICAg
ICAgICAgIGNvbnN0IFVDaGFyICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLAotICAgICAgICAgICAg
ICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7Ci0KLSNlbmRpZgotCi1VX05BTUVTUEFDRV9C
RUdJTgotCi1jbGFzcyBCcmVha0l0ZXJhdG9yOyAgICAgICAgLy8gdW5pY29kZS9icmtpdGVyLmgK
LWNsYXNzIExvY2FsZTsgICAgICAgICAgICAgICAvLyB1bmljb2RlL2xvY2lkLmgKLWNsYXNzIFN0
cmluZ0NoYXJhY3Rlckl0ZXJhdG9yOwotY2xhc3MgVW5pY29kZVN0cmluZ0FwcGVuZGFibGU7ICAv
LyB1bmljb2RlL2FwcGVuZGFibGUuaAotCi0vKiBUaGUgPGlvc3RyZWFtPiBpbmNsdWRlIGhhcyBi
ZWVuIG1vdmVkIHRvIHVuaWNvZGUvdXN0cmVhbS5oICovCi0KLS8qKgotICogQ29uc3RhbnQgdG8g
YmUgdXNlZCBpbiB0aGUgVW5pY29kZVN0cmluZyhjaGFyICosIGludDMyX3QsIEVJbnZhcmlhbnQp
IGNvbnN0cnVjdG9yCi0gKiB3aGljaCBjb25zdHJ1Y3RzIGEgVW5pY29kZSBzdHJpbmcgZnJvbSBh
biBpbnZhcmlhbnQtY2hhcmFjdGVyIGNoYXIgKiBzdHJpbmcuCi0gKiBBYm91dCBpbnZhcmlhbnQg
Y2hhcmFjdGVycyBzZWUgdXR5cGVzLmguCi0gKiBUaGlzIGNvbnN0cnVjdG9yIGhhcyBubyBydW50
aW1lIGRlcGVuZGVuY3kgb24gY29udmVyc2lvbiBjb2RlIGFuZCBpcwotICogdGhlcmVmb3JlIHJl
Y29tbWVuZGVkIG92ZXIgb25lcyB0YWtpbmcgYSBjaGFyc2V0IG5hbWUgc3RyaW5nCi0gKiAod2hl
cmUgdGhlIGVtcHR5IHN0cmluZyAiIiBpbmRpY2F0ZXMgaW52YXJpYW50LWNoYXJhY3RlciBjb252
ZXJzaW9uKS4KLSAqCi0gKiBAc3RhYmxlIElDVSAzLjIKLSAqLwotI2RlZmluZSBVU19JTlYgaWN1
OjpVbmljb2RlU3RyaW5nOjprSW52YXJpYW50Ci0KLS8qKgotICogVW5pY29kZSBTdHJpbmcgbGl0
ZXJhbHMgaW4gQysrLgotICogRGVwZW5kZW50IG9uIHRoZSBwbGF0Zm9ybSBwcm9wZXJ0aWVzLCBk
aWZmZXJlbnQgVW5pY29kZVN0cmluZwotICogY29uc3RydWN0b3JzIHNob3VsZCBiZSB1c2VkIHRv
IGNyZWF0ZSBhIFVuaWNvZGVTdHJpbmcgb2JqZWN0IGZyb20KLSAqIGEgc3RyaW5nIGxpdGVyYWwu
Ci0gKiBUaGUgbWFjcm9zIGFyZSBkZWZpbmVkIGZvciBtYXhpbXVtIHBlcmZvcm1hbmNlLgotICog
VGhleSB3b3JrIG9ubHkgZm9yIHN0cmluZ3MgdGhhdCBjb250YWluICJpbnZhcmlhbnQgY2hhcmFj
dGVycyIsIGkuZS4sCi0gKiBvbmx5IGxhdGluIGxldHRlcnMsIGRpZ2l0cywgYW5kIHNvbWUgcHVu
Y3R1YXRpb24uCi0gKiBTZWUgdXR5cGVzLmggZm9yIGRldGFpbHMuCi0gKgotICogVGhlIHN0cmlu
ZyBwYXJhbWV0ZXIgbXVzdCBiZSBhIEMgc3RyaW5nIGxpdGVyYWwuCi0gKiBUaGUgbGVuZ3RoIG9m
IHRoZSBzdHJpbmcsIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCi0gKiA8Y29kZT5OVUw8
L2NvZGU+LCBtdXN0IGJlIHNwZWNpZmllZCBhcyBhIGNvbnN0YW50LgotICogVGhlIFVfU1RSSU5H
X0RFQ0wgbWFjcm8gc2hvdWxkIGJlIGludm9rZWQgZXhhY3RseSBvbmNlIGZvciBvbmUKLSAqIHN1
Y2ggc3RyaW5nIHZhcmlhYmxlIGJlZm9yZSBpdCBpcyB1c2VkLgotICogQHN0YWJsZSBJQ1UgMi4w
Ci0gKi8KLSNpZiBkZWZpbmVkKFVfREVDTEFSRV9VVEYxNikKLSMgICBkZWZpbmUgVU5JQ09ERV9T
VFJJTkcoY3MsIF9sZW5ndGgpIGljdTo6VW5pY29kZVN0cmluZyhUUlVFLCAoY29uc3QgVUNoYXIg
KilVX0RFQ0xBUkVfVVRGMTYoY3MpLCBfbGVuZ3RoKQotI2VsaWYgVV9TSVpFT0ZfV0NIQVJfVD09
VV9TSVpFT0ZfVUNIQVIgJiYgKFVfQ0hBUlNFVF9GQU1JTFk9PVVfQVNDSUlfRkFNSUxZIHx8IChV
X1NJWkVPRl9VQ0hBUiA9PSAyICYmIGRlZmluZWQoVV9XQ0hBUl9JU19VVEYxNikpKQotIyAgIGRl
ZmluZSBVTklDT0RFX1NUUklORyhjcywgX2xlbmd0aCkgaWN1OjpVbmljb2RlU3RyaW5nKFRSVUUs
IChjb25zdCBVQ2hhciAqKUwgIyMgY3MsIF9sZW5ndGgpCi0jZWxpZiBVX1NJWkVPRl9VQ0hBUj09
MSAmJiBVX0NIQVJTRVRfRkFNSUxZPT1VX0FTQ0lJX0ZBTUlMWQotIyAgIGRlZmluZSBVTklDT0RF
X1NUUklORyhjcywgX2xlbmd0aCkgaWN1OjpVbmljb2RlU3RyaW5nKFRSVUUsIChjb25zdCBVQ2hh
ciAqKWNzLCBfbGVuZ3RoKQotI2Vsc2UKLSMgICBkZWZpbmUgVU5JQ09ERV9TVFJJTkcoY3MsIF9s
ZW5ndGgpIGljdTo6VW5pY29kZVN0cmluZyhjcywgX2xlbmd0aCwgVVNfSU5WKQotI2VuZGlmCi0K
LS8qKgotICogVW5pY29kZSBTdHJpbmcgbGl0ZXJhbHMgaW4gQysrLgotICogRGVwZW5kZW50IG9u
IHRoZSBwbGF0Zm9ybSBwcm9wZXJ0aWVzLCBkaWZmZXJlbnQgVW5pY29kZVN0cmluZwotICogY29u
c3RydWN0b3JzIHNob3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhIFVuaWNvZGVTdHJpbmcgb2JqZWN0
IGZyb20KLSAqIGEgc3RyaW5nIGxpdGVyYWwuCi0gKiBUaGUgbWFjcm9zIGFyZSBkZWZpbmVkIGZv
ciBpbXByb3ZlZCBwZXJmb3JtYW5jZS4KLSAqIFRoZXkgd29yayBvbmx5IGZvciBzdHJpbmdzIHRo
YXQgY29udGFpbiAiaW52YXJpYW50IGNoYXJhY3RlcnMiLCBpLmUuLAotICogb25seSBsYXRpbiBs
ZXR0ZXJzLCBkaWdpdHMsIGFuZCBzb21lIHB1bmN0dWF0aW9uLgotICogU2VlIHV0eXBlcy5oIGZv
ciBkZXRhaWxzLgotICoKLSAqIFRoZSBzdHJpbmcgcGFyYW1ldGVyIG11c3QgYmUgYSBDIHN0cmlu
ZyBsaXRlcmFsLgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLSNkZWZpbmUgVU5JQ09ERV9TVFJJ
TkdfU0lNUExFKGNzKSBVTklDT0RFX1NUUklORyhjcywgLTEpCi0KLS8qKgotICogXGRlZiBVTklT
VFJfRlJPTV9DSEFSX0VYUExJQ0lUCi0gKiBUaGlzIGNhbiBiZSBkZWZpbmVkIHRvIGJlIGVtcHR5
IG9yICJleHBsaWNpdCIuCi0gKiBJZiBleHBsaWNpdCwgdGhlbiB0aGUgVW5pY29kZVN0cmluZyhV
Q2hhcikgYW5kIFVuaWNvZGVTdHJpbmcoVUNoYXIzMikKLSAqIGNvbnN0cnVjdG9ycyBhcmUgbWFy
a2VkIGFzIGV4cGxpY2l0LCBwcmV2ZW50aW5nIHRoZWlyIGluYWR2ZXJ0ZW50IHVzZS4KLSAqIEBz
dGFibGUgSUNVIDQ5Ci0gKi8KLSNpZm5kZWYgVU5JU1RSX0ZST01fQ0hBUl9FWFBMSUNJVAotIyBp
ZiBkZWZpbmVkKFVfQ09NQklORURfSU1QTEVNRU5UQVRJT04pIHx8IGRlZmluZWQoVV9DT01NT05f
SU1QTEVNRU5UQVRJT04pIHx8IGRlZmluZWQoVV9JMThOX0lNUExFTUVOVEFUSU9OKSB8fCBkZWZp
bmVkKFVfSU9fSU1QTEVNRU5UQVRJT04pCi0gICAgLy8gQXV0by0iZXhwbGljaXQiIGluIElDVSBs
aWJyYXJ5IGNvZGUuCi0jICAgZGVmaW5lIFVOSVNUUl9GUk9NX0NIQVJfRVhQTElDSVQgZXhwbGlj
aXQKLSMgZWxzZQotICAgIC8vIEVtcHR5IGJ5IGRlZmF1bHQgZm9yIHNvdXJjZSBjb2RlIGNvbXBh
dGliaWxpdHkuCi0jICAgZGVmaW5lIFVOSVNUUl9GUk9NX0NIQVJfRVhQTElDSVQKLSMgZW5kaWYK
LSNlbmRpZgotCi0vKioKLSAqIFxkZWYgVU5JU1RSX0ZST01fU1RSSU5HX0VYUExJQ0lUCi0gKiBU
aGlzIGNhbiBiZSBkZWZpbmVkIHRvIGJlIGVtcHR5IG9yICJleHBsaWNpdCIuCi0gKiBJZiBleHBs
aWNpdCwgdGhlbiB0aGUgVW5pY29kZVN0cmluZyhjb25zdCBjaGFyICopIGFuZCBVbmljb2RlU3Ry
aW5nKGNvbnN0IFVDaGFyICopCi0gKiBjb25zdHJ1Y3RvcnMgYXJlIG1hcmtlZCBhcyBleHBsaWNp
dCwgcHJldmVudGluZyB0aGVpciBpbmFkdmVydGVudCB1c2UuCi0gKgotICogSW4gcGFydGljdWxh
ciwgdGhpcyBoZWxwcyBwcmV2ZW50IGFjY2lkZW50YWxseSBkZXBlbmRpbmcgb24gSUNVIGNvbnZl
cnNpb24gY29kZQotICogYnkgcGFzc2luZyBhIHN0cmluZyBsaXRlcmFsIGludG8gYW4gQVBJIHdp
dGggYSBjb25zdCBVbmljb2RlU3RyaW5nICYgcGFyYW1ldGVyLgotICogQHN0YWJsZSBJQ1UgNDkK
LSAqLwotI2lmbmRlZiBVTklTVFJfRlJPTV9TVFJJTkdfRVhQTElDSVQKLSMgaWYgZGVmaW5lZChV
X0NPTUJJTkVEX0lNUExFTUVOVEFUSU9OKSB8fCBkZWZpbmVkKFVfQ09NTU9OX0lNUExFTUVOVEFU
SU9OKSB8fCBkZWZpbmVkKFVfSTE4Tl9JTVBMRU1FTlRBVElPTikgfHwgZGVmaW5lZChVX0lPX0lN
UExFTUVOVEFUSU9OKQotICAgIC8vIEF1dG8tImV4cGxpY2l0IiBpbiBJQ1UgbGlicmFyeSBjb2Rl
LgotIyAgIGRlZmluZSBVTklTVFJfRlJPTV9TVFJJTkdfRVhQTElDSVQgZXhwbGljaXQKLSMgZWxz
ZQotICAgIC8vIEVtcHR5IGJ5IGRlZmF1bHQgZm9yIHNvdXJjZSBjb2RlIGNvbXBhdGliaWxpdHku
Ci0jICAgZGVmaW5lIFVOSVNUUl9GUk9NX1NUUklOR19FWFBMSUNJVAotIyBlbmRpZgotI2VuZGlm
Ci0KLS8qKgotICogVW5pY29kZVN0cmluZyBpcyBhIHN0cmluZyBjbGFzcyB0aGF0IHN0b3JlcyBV
bmljb2RlIGNoYXJhY3RlcnMgZGlyZWN0bHkgYW5kIHByb3ZpZGVzCi0gKiBzaW1pbGFyIGZ1bmN0
aW9uYWxpdHkgYXMgdGhlIEphdmEgU3RyaW5nIGFuZCBTdHJpbmdCdWZmZXIgY2xhc3Nlcy4KLSAq
IEl0IGlzIGEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGFic3RyYWN0IGNsYXNzIFJl
cGxhY2VhYmxlIChmb3IgdHJhbnNsaXRlcmF0aW9uKS4KLSAqCi0gKiBUaGUgVW5pY29kZVN0cmlu
ZyBjbGFzcyBpcyBub3Qgc3VpdGFibGUgZm9yIHN1YmNsYXNzaW5nLgotICoKLSAqIDxwPkZvciBh
biBvdmVydmlldyBvZiBVbmljb2RlIHN0cmluZ3MgaW4gQyBhbmQgQysrIHNlZSB0aGUKLSAqIDxh
IGhyZWY9Imh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvdXNlcmd1aWRlL3N0cmluZ3MuaHRtbCI+VXNl
ciBHdWlkZSBTdHJpbmdzIGNoYXB0ZXI8L2E+LjwvcD4KLSAqCi0gKiA8cD5JbiBJQ1UsIGEgVW5p
Y29kZSBzdHJpbmcgY29uc2lzdHMgb2YgMTYtYml0IFVuaWNvZGUgPGVtPmNvZGUgdW5pdHM8L2Vt
Pi4KLSAqIEEgVW5pY29kZSBjaGFyYWN0ZXIgbWF5IGJlIHN0b3JlZCB3aXRoIGVpdGhlciBvbmUg
Y29kZSB1bml0Ci0gKiAodGhlIG1vc3QgY29tbW9uIGNhc2UpIG9yIHdpdGggYSBtYXRjaGVkIHBh
aXIgb2Ygc3BlY2lhbCBjb2RlIHVuaXRzCi0gKiAoInN1cnJvZ2F0ZXMiKS4gVGhlIGRhdGEgdHlw
ZSBmb3IgY29kZSB1bml0cyBpcyBVQ2hhci4gCi0gKiBGb3Igc2luZ2xlLWNoYXJhY3RlciBoYW5k
bGluZywgYSBVbmljb2RlIGNoYXJhY3RlciBjb2RlIDxlbT5wb2ludDwvZW0+IGlzIGEgdmFsdWUK
LSAqIGluIHRoZSByYW5nZSAwLi4weDEwZmZmZi4gSUNVIHVzZXMgdGhlIFVDaGFyMzIgdHlwZSBm
b3IgY29kZSBwb2ludHMuPC9wPgotICoKLSAqIDxwPkluZGV4ZXMgYW5kIG9mZnNldHMgaW50byBh
bmQgbGVuZ3RocyBvZiBzdHJpbmdzIGFsd2F5cyBjb3VudCBjb2RlIHVuaXRzLCBub3QgY29kZSBw
b2ludHMuCi0gKiBUaGlzIGlzIHRoZSBzYW1lIGFzIHdpdGggbXVsdGktYnl0ZSBjaGFyKiBzdHJp
bmdzIGluIHRyYWRpdGlvbmFsIHN0cmluZyBoYW5kbGluZy4KLSAqIE9wZXJhdGlvbnMgb24gcGFy
dGlhbCBzdHJpbmdzIHR5cGljYWxseSBkbyBub3QgdGVzdCBmb3IgY29kZSBwb2ludCBib3VuZGFy
aWVzLgotICogSWYgbmVjZXNzYXJ5LCB0aGUgdXNlciBuZWVkcyB0byB0YWtlIGNhcmUgb2Ygc3Vj
aCBib3VuZGFyaWVzIGJ5IHRlc3RpbmcgZm9yIHRoZSBjb2RlIHVuaXQKLSAqIHZhbHVlcyBvciBi
eSB1c2luZyBmdW5jdGlvbnMgbGlrZQotICogVW5pY29kZVN0cmluZzo6Z2V0Q2hhcjMyU3RhcnQo
KSBhbmQgVW5pY29kZVN0cmluZzo6Z2V0Q2hhcjMyTGltaXQoKQotICogKG9yLCBpbiBDLCB0aGUg
ZXF1aXZhbGVudCBtYWNyb3MgVTE2X1NFVF9DUF9TVEFSVCgpIGFuZCBVMTZfU0VUX0NQX0xJTUlU
KCksIHNlZSB1dGYuaCkuPC9wPgotICoKLSAqIFVuaWNvZGVTdHJpbmcgbWV0aG9kcyBhcmUgbW9y
ZSBsZW5pZW50IHdpdGggcmVnYXJkIHRvIGlucHV0IHBhcmFtZXRlciB2YWx1ZXMKLSAqIHRoYW4g
b3RoZXIgSUNVIEFQSXMuIEluIHBhcnRpY3VsYXI6Ci0gKiAtIElmIGluZGV4ZXMgYXJlIG91dCBv
ZiBib3VuZHMgZm9yIGEgVW5pY29kZVN0cmluZyBvYmplY3QKLSAqICAgKDwwIG9yID5sZW5ndGgo
KSkgdGhlbiB0aGV5IGFyZSAicGlubmVkIiB0byB0aGUgbmVhcmVzdCBib3VuZGFyeS4KLSAqIC0g
SWYgcHJpbWl0aXZlIHN0cmluZyBwb2ludGVyIHZhbHVlcyAoZS5nLiwgY29uc3QgVUNoYXIgKiBv
ciBjaGFyICopCi0gKiAgIGZvciBpbnB1dCBzdHJpbmdzIGFyZSBOVUxMLCB0aGVuIHRob3NlIGlu
cHV0IHN0cmluZyBwYXJhbWV0ZXJzIGFyZSB0cmVhdGVkCi0gKiAgIGFzIGlmIHRoZXkgcG9pbnRl
ZCB0byBhbiBlbXB0eSBzdHJpbmcuCi0gKiAgIEhvd2V2ZXIsIHRoaXMgaXMgPGVtPm5vdDwvZW0+
IHRoZSBjYXNlIGZvciBjaGFyICogcGFyYW1ldGVycyBmb3IgY2hhcnNldCBuYW1lcwotICogICBv
ciBvdGhlciBJRHMuCi0gKiAtIE1vc3QgVW5pY29kZVN0cmluZyBtZXRob2RzIGRvIG5vdCB0YWtl
IGEgVUVycm9yQ29kZSBwYXJhbWV0ZXIgYmVjYXVzZQotICogICB0aGVyZSBhcmUgdXN1YWxseSB2
ZXJ5IGZldyBvcHBvcnR1bml0aWVzIGZvciBmYWlsdXJlIG90aGVyIHRoYW4gYSBzaG9ydGFnZQot
ICogICBvZiBtZW1vcnksIGVycm9yIGNvZGVzIGluIGxvdy1sZXZlbCBDKysgc3RyaW5nIG1ldGhv
ZHMgd291bGQgYmUgaW5jb252ZW5pZW50LAotICogICBhbmQgdGhlIGVycm9yIGNvZGUgYXMgdGhl
IGxhc3QgcGFyYW1ldGVyIChJQ1UgY29udmVudGlvbikgd291bGQgcHJldmVudAotICogICB0aGUg
dXNlIG9mIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4KLSAqICAgSW5zdGVhZCwgc3VjaCBtZXRo
b2RzIHNldCB0aGUgVW5pY29kZVN0cmluZyBpbnRvIGEgImJvZ3VzIiBzdGF0ZQotICogICAoc2Vl
IGlzQm9ndXMoKSkgaWYgYW4gZXJyb3Igb2NjdXJzLgotICoKLSAqIEluIHN0cmluZyBjb21wYXJp
c29ucywgdHdvIFVuaWNvZGVTdHJpbmcgb2JqZWN0cyB0aGF0IGFyZSBib3RoICJib2d1cyIKLSAq
IGNvbXBhcmUgZXF1YWwgKHRvIGJlIHRyYW5zaXRpdmUgYW5kIHByZXZlbnQgZW5kbGVzcyBsb29w
cyBpbiBzb3J0aW5nKSwKLSAqIGFuZCBhICJib2d1cyIgc3RyaW5nIGNvbXBhcmVzIGxlc3MgdGhh
biBhbnkgbm9uLSJib2d1cyIgb25lLgotICoKLSAqIENvbnN0IFVuaWNvZGVTdHJpbmcgbWV0aG9k
cyBhcmUgdGhyZWFkLXNhZmUuIE11bHRpcGxlIHRocmVhZHMgY2FuIHVzZQotICogY29uc3QgbWV0
aG9kcyBvbiB0aGUgc2FtZSBVbmljb2RlU3RyaW5nIG9iamVjdCBzaW11bHRhbmVvdXNseSwKLSAq
IGJ1dCBub24tY29uc3QgbWV0aG9kcyBtdXN0IG5vdCBiZSBjYWxsZWQgY29uY3VycmVudGx5IChp
biBtdWx0aXBsZSB0aHJlYWRzKQotICogd2l0aCBhbnkgb3RoZXIgKGNvbnN0IG9yIG5vbi1jb25z
dCkgbWV0aG9kcy4KLSAqCi0gKiBTaW1pbGFybHksIGNvbnN0IFVuaWNvZGVTdHJpbmcgJiBwYXJh
bWV0ZXJzIGFyZSB0aHJlYWQtc2FmZS4KLSAqIE9uZSBvYmplY3QgbWF5IGJlIHBhc3NlZCBpbiBh
cyBzdWNoIGEgcGFyYW1ldGVyIGNvbmN1cnJlbnRseSBpbiBtdWx0aXBsZSB0aHJlYWRzLgotICog
VGhpcyBpbmNsdWRlcyB0aGUgY29uc3QgVW5pY29kZVN0cmluZyAmIHBhcmFtZXRlcnMgZm9yCi0g
KiBjb3B5IGNvbnN0cnVjdGlvbiwgYXNzaWdubWVudCwgYW5kIGNsb25pbmcuCi0gKgotICogPHA+
VW5pY29kZVN0cmluZyB1c2VzIHNldmVyYWwgc3RvcmFnZSBtZXRob2RzLgotICogU3RyaW5nIGNv
bnRlbnRzIGNhbiBiZSBzdG9yZWQgaW5zaWRlIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdCBpdHNl
bGYsCi0gKiBpbiBhbiBhbGxvY2F0ZWQgYW5kIHNoYXJlZCBidWZmZXIsIG9yIGluIGFuIG91dHNp
ZGUgYnVmZmVyIHRoYXQgaXMgImFsaWFzZWQiLgotICogTW9zdCBvZiB0aGlzIGlzIGRvbmUgdHJh
bnNwYXJlbnRseSwgYnV0IGNhcmVmdWwgYWxpYXNpbmcgaW4gcGFydGljdWxhciBwcm92aWRlcwot
ICogc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLgotICogQWxzbywgdGhlIGlu
dGVybmFsIGJ1ZmZlciBpcyBhY2Nlc3NpYmxlIHZpYSBzcGVjaWFsIGZ1bmN0aW9ucy4KLSAqIEZv
ciBkZXRhaWxzIHNlZSB0aGUKLSAqIDxhIGhyZWY9Imh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvdXNl
cmd1aWRlL3N0cmluZ3MuaHRtbCI+VXNlciBHdWlkZSBTdHJpbmdzIGNoYXB0ZXI8L2E+LjwvcD4K
LSAqCi0gKiBAc2VlIHV0Zi5oCi0gKiBAc2VlIENoYXJhY3Rlckl0ZXJhdG9yCi0gKiBAc3RhYmxl
IElDVSAyLjAKLSAqLwotY2xhc3MgVV9DT01NT05fQVBJIFVuaWNvZGVTdHJpbmcgOiBwdWJsaWMg
UmVwbGFjZWFibGUKLXsKLXB1YmxpYzoKLQotICAvKioKLSAgICogQ29uc3RhbnQgdG8gYmUgdXNl
ZCBpbiB0aGUgVW5pY29kZVN0cmluZyhjaGFyICosIGludDMyX3QsIEVJbnZhcmlhbnQpIGNvbnN0
cnVjdG9yCi0gICAqIHdoaWNoIGNvbnN0cnVjdHMgYSBVbmljb2RlIHN0cmluZyBmcm9tIGFuIGlu
dmFyaWFudC1jaGFyYWN0ZXIgY2hhciAqIHN0cmluZy4KLSAgICogVXNlIHRoZSBtYWNybyBVU19J
TlYgaW5zdGVhZCBvZiB0aGUgZnVsbCBxdWFsaWZpY2F0aW9uIGZvciB0aGlzIHZhbHVlLgotICAg
KgotICAgKiBAc2VlIFVTX0lOVgotICAgKiBAc3RhYmxlIElDVSAzLjIKLSAgICovCi0gIGVudW0g
RUludmFyaWFudCB7Ci0gICAgLyoqCi0gICAgICogQHNlZSBFSW52YXJpYW50Ci0gICAgICogQHN0
YWJsZSBJQ1UgMy4yCi0gICAgICovCi0gICAga0ludmFyaWFudAotICB9OwotCi0gIC8vPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBSZWFkLW9ubHkgb3BlcmF0
aW9ucwotICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAv
KiBDb21wYXJpc29uIC0gYml0d2lzZSBvbmx5IC0gZm9yIGludGVybmF0aW9uYWwgY29tcGFyaXNv
biB1c2UgY29sbGF0aW9uICovCi0KLSAgLyoqCi0gICAqIEVxdWFsaXR5IG9wZXJhdG9yLiBQZXJm
b3JtcyBvbmx5IGJpdHdpc2UgY29tcGFyaXNvbi4KLSAgICogQHBhcmFtIHRleHQgVGhlIFVuaWNv
ZGVTdHJpbmcgdG8gY29tcGFyZSB0byB0aGlzIG9uZS4KLSAgICogQHJldHVybiBUUlVFIGlmIDxU
VD50ZXh0PC9UVD4gY29udGFpbnMgdGhlIHNhbWUgY2hhcmFjdGVycyBhcyB0aGlzIG9uZSwKLSAg
ICogRkFMU0Ugb3RoZXJ3aXNlLgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGlu
ZSBVQm9vbCBvcGVyYXRvcj09IChjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdDsKLQot
ICAvKioKLSAgICogSW5lcXVhbGl0eSBvcGVyYXRvci4gUGVyZm9ybXMgb25seSBiaXR3aXNlIGNv
bXBhcmlzb24uCi0gICAqIEBwYXJhbSB0ZXh0IFRoZSBVbmljb2RlU3RyaW5nIHRvIGNvbXBhcmUg
dG8gdGhpcyBvbmUuCi0gICAqIEByZXR1cm4gRkFMU0UgaWYgPFRUPnRleHQ8L1RUPiBjb250YWlu
cyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIHRoaXMgb25lLAotICAgKiBUUlVFIG90aGVyd2lzZS4K
LSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgVUJvb2wgb3BlcmF0b3IhPSAo
Y29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIEdyZWF0ZXIg
dGhhbiBvcGVyYXRvci4gUGVyZm9ybXMgb25seSBiaXR3aXNlIGNvbXBhcmlzb24uCi0gICAqIEBw
YXJhbSB0ZXh0IFRoZSBVbmljb2RlU3RyaW5nIHRvIGNvbXBhcmUgdG8gdGhpcyBvbmUuCi0gICAq
IEByZXR1cm4gVFJVRSBpZiB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIGFyZSBiaXR3aXNlCi0gICAq
IGdyZWF0ZXIgdGhhbiB0aGUgY2hhcmFjdGVycyBpbiA8Y29kZT50ZXh0PC9jb2RlPiwgRkFMU0Ug
b3RoZXJ3aXNlCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIFVCb29sIG9w
ZXJhdG9yPiAoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAq
IExlc3MgdGhhbiBvcGVyYXRvci4gUGVyZm9ybXMgb25seSBiaXR3aXNlIGNvbXBhcmlzb24uCi0g
ICAqIEBwYXJhbSB0ZXh0IFRoZSBVbmljb2RlU3RyaW5nIHRvIGNvbXBhcmUgdG8gdGhpcyBvbmUu
Ci0gICAqIEByZXR1cm4gVFJVRSBpZiB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIGFyZSBiaXR3aXNl
Ci0gICAqIGxlc3MgdGhhbiB0aGUgY2hhcmFjdGVycyBpbiA8Y29kZT50ZXh0PC9jb2RlPiwgRkFM
U0Ugb3RoZXJ3aXNlCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIFVCb29s
IG9wZXJhdG9yPCAoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3Q7Ci0KLSAgLyoqCi0g
ICAqIEdyZWF0ZXIgdGhhbiBvciBlcXVhbCBvcGVyYXRvci4gUGVyZm9ybXMgb25seSBiaXR3aXNl
IGNvbXBhcmlzb24uCi0gICAqIEBwYXJhbSB0ZXh0IFRoZSBVbmljb2RlU3RyaW5nIHRvIGNvbXBh
cmUgdG8gdGhpcyBvbmUuCi0gICAqIEByZXR1cm4gVFJVRSBpZiB0aGUgY2hhcmFjdGVycyBpbiB0
aGlzIGFyZSBiaXR3aXNlCi0gICAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgY2hhcmFj
dGVycyBpbiA8Y29kZT50ZXh0PC9jb2RlPiwgRkFMU0Ugb3RoZXJ3aXNlCi0gICAqIEBzdGFibGUg
SUNVIDIuMAotICAgKi8KLSAgaW5saW5lIFVCb29sIG9wZXJhdG9yPj0gKGNvbnN0IFVuaWNvZGVT
dHJpbmcmIHRleHQpIGNvbnN0OwotCi0gIC8qKgotICAgKiBMZXNzIHRoYW4gb3IgZXF1YWwgb3Bl
cmF0b3IuIFBlcmZvcm1zIG9ubHkgYml0d2lzZSBjb21wYXJpc29uLgotICAgKiBAcGFyYW0gdGV4
dCBUaGUgVW5pY29kZVN0cmluZyB0byBjb21wYXJlIHRvIHRoaXMgb25lLgotICAgKiBAcmV0dXJu
IFRSVUUgaWYgdGhlIGNoYXJhY3RlcnMgaW4gdGhpcyBhcmUgYml0d2lzZQotICAgKiBsZXNzIHRo
YW4gb3IgZXF1YWwgdG8gdGhlIGNoYXJhY3RlcnMgaW4gPGNvZGU+dGV4dDwvY29kZT4sIEZBTFNF
IG90aGVyd2lzZQotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBVQm9vbCBv
cGVyYXRvcjw9IChjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdDsKLQotICAvKioKLSAg
ICogQ29tcGFyZSB0aGUgY2hhcmFjdGVycyBiaXR3aXNlIGluIHRoaXMgVW5pY29kZVN0cmluZyB0
bwotICAgKiB0aGUgY2hhcmFjdGVycyBpbiA8Y29kZT50ZXh0PC9jb2RlPi4KLSAgICogQHBhcmFt
IHRleHQgVGhlIFVuaWNvZGVTdHJpbmcgdG8gY29tcGFyZSB0byB0aGlzIG9uZS4KLSAgICogQHJl
dHVybiBUaGUgcmVzdWx0IG9mIGJpdHdpc2UgY2hhcmFjdGVyIGNvbXBhcmlzb246IDAgaWYgdGhp
cwotICAgKiBjb250YWlucyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIDxjb2RlPnRleHQ8L2NvZGU+
LCAtMSBpZiB0aGUgY2hhcmFjdGVycyBpbgotICAgKiB0aGlzIGFyZSBiaXR3aXNlIGxlc3MgdGhh
biB0aGUgY2hhcmFjdGVycyBpbiA8Y29kZT50ZXh0PC9jb2RlPiwgKzEgaWYgdGhlCi0gICAqIGNo
YXJhY3RlcnMgaW4gdGhpcyBhcmUgYml0d2lzZSBncmVhdGVyIHRoYW4gdGhlIGNoYXJhY3RlcnMK
LSAgICogaW4gPGNvZGU+dGV4dDwvY29kZT4uCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8K
LSAgaW5saW5lIGludDhfdCBjb21wYXJlKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRleHQpIGNvbnN0
OwotCi0gIC8qKgotICAgKiBDb21wYXJlIHRoZSBjaGFyYWN0ZXJzIGJpdHdpc2UgaW4gdGhlIHJh
bmdlCi0gICAqIFs8VFQ+c3RhcnQ8L1RUPiwgPFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4pIHdpdGgg
dGhlIGNoYXJhY3RlcnMKLSAgICogaW4gdGhlIDxiPmVudGlyZSBzdHJpbmc8L2I+IDxUVD50ZXh0
PC9UVD4uCi0gICAqIChUaGUgcGFyYW1ldGVycyAic3RhcnQiIGFuZCAibGVuZ3RoIiBhcmUgbm90
IGFwcGxpZWQgdG8gdGhlIG90aGVyIHRleHQgInRleHQiLikKLSAgICogQHBhcmFtIHN0YXJ0IHRo
ZSBvZmZzZXQgYXQgd2hpY2ggdGhlIGNvbXBhcmUgb3BlcmF0aW9uIGJlZ2lucwotICAgKiBAcGFy
YW0gbGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBvZiB0ZXh0IHRvIGNvbXBhcmUuCi0g
ICAqIEBwYXJhbSB0ZXh0IHRoZSBvdGhlciB0ZXh0IHRvIGJlIGNvbXBhcmVkIGFnYWluc3QgdGhp
cyBzdHJpbmcuCi0gICAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBiaXR3aXNlIGNoYXJhY3RlciBj
b21wYXJpc29uOiAwIGlmIHRoaXMKLSAgICogY29udGFpbnMgdGhlIHNhbWUgY2hhcmFjdGVycyBh
cyA8Y29kZT50ZXh0PC9jb2RlPiwgLTEgaWYgdGhlIGNoYXJhY3RlcnMgaW4KLSAgICogdGhpcyBh
cmUgYml0d2lzZSBsZXNzIHRoYW4gdGhlIGNoYXJhY3RlcnMgaW4gPGNvZGU+dGV4dDwvY29kZT4s
ICsxIGlmIHRoZQotICAgKiBjaGFyYWN0ZXJzIGluIHRoaXMgYXJlIGJpdHdpc2UgZ3JlYXRlciB0
aGFuIHRoZSBjaGFyYWN0ZXJzCi0gICAqIGluIDxjb2RlPnRleHQ8L2NvZGU+LgotICAgKiBAc3Rh
YmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBpbnQ4X3QgY29tcGFyZShpbnQzMl90IHN0YXJ0
LAotICAgICAgICAgaW50MzJfdCBsZW5ndGgsCi0gICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5n
JiB0ZXh0KSBjb25zdDsKLQotICAvKioKLSAgICogQ29tcGFyZSB0aGUgY2hhcmFjdGVycyBiaXR3
aXNlIGluIHRoZSByYW5nZQotICAgKiBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0
aDwvVFQ+KSB3aXRoIHRoZSBjaGFyYWN0ZXJzCi0gICAqIGluIDxUVD5zcmNUZXh0PC9UVD4gaW4g
dGhlIHJhbmdlCi0gICAqIFs8VFQ+c3JjU3RhcnQ8L1RUPiwgPFRUPnNyY1N0YXJ0ICsgc3JjTGVu
Z3RoPC9UVD4pLgotICAgKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBhdCB3aGljaCB0aGUgY29t
cGFyZSBvcGVyYXRpb24gYmVnaW5zCi0gICAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBj
aGFyYWN0ZXJzIGluIHRoaXMgdG8gY29tcGFyZS4KLSAgICogQHBhcmFtIHNyY1RleHQgdGhlIHRl
eHQgdG8gYmUgY29tcGFyZWQKLSAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZzZXQgaW50byA8
VFQ+c3JjVGV4dDwvVFQ+IHRvIHN0YXJ0IGNvbXBhcmlzb24KLSAgICogQHBhcmFtIHNyY0xlbmd0
aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gPFRUPnNyYzwvVFQ+IHRvIGNvbXBhcmUKLSAg
ICogQHJldHVybiBUaGUgcmVzdWx0IG9mIGJpdHdpc2UgY2hhcmFjdGVyIGNvbXBhcmlzb246IDAg
aWYgdGhpcwotICAgKiBjb250YWlucyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIDxjb2RlPnNyY1Rl
eHQ8L2NvZGU+LCAtMSBpZiB0aGUgY2hhcmFjdGVycyBpbgotICAgKiB0aGlzIGFyZSBiaXR3aXNl
IGxlc3MgdGhhbiB0aGUgY2hhcmFjdGVycyBpbiA8Y29kZT5zcmNUZXh0PC9jb2RlPiwgKzEgaWYg
dGhlCi0gICAqIGNoYXJhY3RlcnMgaW4gdGhpcyBhcmUgYml0d2lzZSBncmVhdGVyIHRoYW4gdGhl
IGNoYXJhY3RlcnMKLSAgICogaW4gPGNvZGU+c3JjVGV4dDwvY29kZT4uCi0gICAqIEBzdGFibGUg
SUNVIDIuMAotICAgKi8KLSAgIGlubGluZSBpbnQ4X3QgY29tcGFyZShpbnQzMl90IHN0YXJ0LAot
ICAgICAgICAgaW50MzJfdCBsZW5ndGgsCi0gICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBz
cmNUZXh0LAotICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAgIGludDMyX3Qgc3Jj
TGVuZ3RoKSBjb25zdDsKLQotICAvKioKLSAgICogQ29tcGFyZSB0aGUgY2hhcmFjdGVycyBiaXR3
aXNlIGluIHRoaXMgVW5pY29kZVN0cmluZyB3aXRoIHRoZSBmaXJzdAotICAgKiA8VFQ+c3JjTGVu
Z3RoPC9UVD4gY2hhcmFjdGVycyBpbiA8VFQ+c3JjQ2hhcnM8L1RUPi4KLSAgICogQHBhcmFtIHNy
Y0NoYXJzIFRoZSBjaGFyYWN0ZXJzIHRvIGNvbXBhcmUgdG8gdGhpcyBVbmljb2RlU3RyaW5nLgot
ICAgKiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiA8VFQ+c3Jj
Q2hhcnM8L1RUPiB0byBjb21wYXJlCi0gICAqIEByZXR1cm4gVGhlIHJlc3VsdCBvZiBiaXR3aXNl
IGNoYXJhY3RlciBjb21wYXJpc29uOiAwIGlmIHRoaXMKLSAgICogY29udGFpbnMgdGhlIHNhbWUg
Y2hhcmFjdGVycyBhcyA8Y29kZT5zcmNDaGFyczwvY29kZT4sIC0xIGlmIHRoZSBjaGFyYWN0ZXJz
IGluCi0gICAqIHRoaXMgYXJlIGJpdHdpc2UgbGVzcyB0aGFuIHRoZSBjaGFyYWN0ZXJzIGluIDxj
b2RlPnNyY0NoYXJzPC9jb2RlPiwgKzEgaWYgdGhlCi0gICAqIGNoYXJhY3RlcnMgaW4gdGhpcyBh
cmUgYml0d2lzZSBncmVhdGVyIHRoYW4gdGhlIGNoYXJhY3RlcnMKLSAgICogaW4gPGNvZGU+c3Jj
Q2hhcnM8L2NvZGU+LgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBpbnQ4
X3QgY29tcGFyZShjb25zdCBVQ2hhciAqc3JjQ2hhcnMsCi0gICAgICAgICBpbnQzMl90IHNyY0xl
bmd0aCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIENvbXBhcmUgdGhlIGNoYXJhY3RlcnMgYml0d2lz
ZSBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5zdGFydDwvVFQ+LCA8VFQ+c3RhcnQgKyBsZW5ndGg8
L1RUPikgd2l0aCB0aGUgZmlyc3QKLSAgICogPFRUPmxlbmd0aDwvVFQ+IGNoYXJhY3RlcnMgaW4g
PFRUPnNyY0NoYXJzPC9UVD4KLSAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgYXQgd2hpY2gg
dGhlIGNvbXBhcmUgb3BlcmF0aW9uIGJlZ2lucwotICAgKiBAcGFyYW0gbGVuZ3RoIHRoZSBudW1i
ZXIgb2YgY2hhcmFjdGVycyB0byBjb21wYXJlLgotICAgKiBAcGFyYW0gc3JjQ2hhcnMgdGhlIGNo
YXJhY3RlcnMgdG8gYmUgY29tcGFyZWQKLSAgICogQHJldHVybiBUaGUgcmVzdWx0IG9mIGJpdHdp
c2UgY2hhcmFjdGVyIGNvbXBhcmlzb246IDAgaWYgdGhpcwotICAgKiBjb250YWlucyB0aGUgc2Ft
ZSBjaGFyYWN0ZXJzIGFzIDxjb2RlPnNyY0NoYXJzPC9jb2RlPiwgLTEgaWYgdGhlIGNoYXJhY3Rl
cnMgaW4KLSAgICogdGhpcyBhcmUgYml0d2lzZSBsZXNzIHRoYW4gdGhlIGNoYXJhY3RlcnMgaW4g
PGNvZGU+c3JjQ2hhcnM8L2NvZGU+LCArMSBpZiB0aGUKLSAgICogY2hhcmFjdGVycyBpbiB0aGlz
IGFyZSBiaXR3aXNlIGdyZWF0ZXIgdGhhbiB0aGUgY2hhcmFjdGVycwotICAgKiBpbiA8Y29kZT5z
cmNDaGFyczwvY29kZT4uCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIGlu
dDhfdCBjb21wYXJlKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICBpbnQzMl90IGxlbmd0aCwKLSAg
ICAgICAgIGNvbnN0IFVDaGFyICpzcmNDaGFycykgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIENvbXBh
cmUgdGhlIGNoYXJhY3RlcnMgYml0d2lzZSBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5zdGFydDwv
VFQ+LCA8VFQ+c3RhcnQgKyBsZW5ndGg8L1RUPikgd2l0aCB0aGUgY2hhcmFjdGVycwotICAgKiBp
biA8VFQ+c3JjQ2hhcnM8L1RUPiBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5zcmNTdGFydDwvVFQ+
LCA8VFQ+c3JjU3RhcnQgKyBzcmNMZW5ndGg8L1RUPikuCi0gICAqIEBwYXJhbSBzdGFydCB0aGUg
b2Zmc2V0IGF0IHdoaWNoIHRoZSBjb21wYXJlIG9wZXJhdGlvbiBiZWdpbnMKLSAgICogQHBhcmFt
IGxlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhpcyB0byBjb21wYXJlCi0gICAq
IEBwYXJhbSBzcmNDaGFycyB0aGUgY2hhcmFjdGVycyB0byBiZSBjb21wYXJlZAotICAgKiBAcGFy
YW0gc3JjU3RhcnQgdGhlIG9mZnNldCBpbnRvIDxUVD5zcmNDaGFyczwvVFQ+IHRvIHN0YXJ0IGNv
bXBhcmlzb24KLSAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMg
aW4gPFRUPnNyY0NoYXJzPC9UVD4gdG8gY29tcGFyZQotICAgKiBAcmV0dXJuIFRoZSByZXN1bHQg
b2YgYml0d2lzZSBjaGFyYWN0ZXIgY29tcGFyaXNvbjogMCBpZiB0aGlzCi0gICAqIGNvbnRhaW5z
IHRoZSBzYW1lIGNoYXJhY3RlcnMgYXMgPGNvZGU+c3JjQ2hhcnM8L2NvZGU+LCAtMSBpZiB0aGUg
Y2hhcmFjdGVycyBpbgotICAgKiB0aGlzIGFyZSBiaXR3aXNlIGxlc3MgdGhhbiB0aGUgY2hhcmFj
dGVycyBpbiA8Y29kZT5zcmNDaGFyczwvY29kZT4sICsxIGlmIHRoZQotICAgKiBjaGFyYWN0ZXJz
IGluIHRoaXMgYXJlIGJpdHdpc2UgZ3JlYXRlciB0aGFuIHRoZSBjaGFyYWN0ZXJzCi0gICAqIGlu
IDxjb2RlPnNyY0NoYXJzPC9jb2RlPi4KLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBp
bmxpbmUgaW50OF90IGNvbXBhcmUoaW50MzJfdCBzdGFydCwKLSAgICAgICAgIGludDMyX3QgbGVu
Z3RoLAotICAgICAgICAgY29uc3QgVUNoYXIgKnNyY0NoYXJzLAotICAgICAgICAgaW50MzJfdCBz
cmNTdGFydCwKLSAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsKLQotICAvKioKLSAg
ICogQ29tcGFyZSB0aGUgY2hhcmFjdGVycyBiaXR3aXNlIGluIHRoZSByYW5nZQotICAgKiBbPFRU
PnN0YXJ0PC9UVD4sIDxUVD5saW1pdDwvVFQ+KSB3aXRoIHRoZSBjaGFyYWN0ZXJzCi0gICAqIGlu
IDxUVD5zcmNUZXh0PC9UVD4gaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3JjU3RhcnQ8L1RUPiwg
PFRUPnNyY0xpbWl0PC9UVD4pLgotICAgKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBhdCB3aGlj
aCB0aGUgY29tcGFyZSBvcGVyYXRpb24gYmVnaW5zCi0gICAqIEBwYXJhbSBsaW1pdCB0aGUgb2Zm
c2V0IGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29tcGFyZSBvcGVyYXRpb24KLSAgICogQHBh
cmFtIHNyY1RleHQgdGhlIHRleHQgdG8gYmUgY29tcGFyZWQKLSAgICogQHBhcmFtIHNyY1N0YXJ0
IHRoZSBvZmZzZXQgaW50byA8VFQ+c3JjVGV4dDwvVFQ+IHRvIHN0YXJ0IGNvbXBhcmlzb24KLSAg
ICogQHBhcmFtIHNyY0xpbWl0IHRoZSBvZmZzZXQgaW50byA8VFQ+c3JjVGV4dDwvVFQ+IHRvIGxp
bWl0IGNvbXBhcmlzb24KLSAgICogQHJldHVybiBUaGUgcmVzdWx0IG9mIGJpdHdpc2UgY2hhcmFj
dGVyIGNvbXBhcmlzb246IDAgaWYgdGhpcwotICAgKiBjb250YWlucyB0aGUgc2FtZSBjaGFyYWN0
ZXJzIGFzIDxjb2RlPnNyY1RleHQ8L2NvZGU+LCAtMSBpZiB0aGUgY2hhcmFjdGVycyBpbgotICAg
KiB0aGlzIGFyZSBiaXR3aXNlIGxlc3MgdGhhbiB0aGUgY2hhcmFjdGVycyBpbiA8Y29kZT5zcmNU
ZXh0PC9jb2RlPiwgKzEgaWYgdGhlCi0gICAqIGNoYXJhY3RlcnMgaW4gdGhpcyBhcmUgYml0d2lz
ZSBncmVhdGVyIHRoYW4gdGhlIGNoYXJhY3RlcnMKLSAgICogaW4gPGNvZGU+c3JjVGV4dDwvY29k
ZT4uCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIGludDhfdCBjb21wYXJl
QmV0d2VlbihpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgaW50MzJfdCBsaW1pdCwKLSAgICAg
ICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQsCi0gICAgICAgICAgICBpbnQzMl90
IHNyY1N0YXJ0LAotICAgICAgICAgICAgaW50MzJfdCBzcmNMaW1pdCkgY29uc3Q7Ci0KLSAgLyoq
Ci0gICAqIENvbXBhcmUgdHdvIFVuaWNvZGUgc3RyaW5ncyBpbiBjb2RlIHBvaW50IG9yZGVyLgot
ICAgKiBUaGUgcmVzdWx0IG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgcmVzdWx0cyBvZiBjb21w
YXJlKCksIG9wZXJhdG9yPCwgZXRjLgotICAgKiBpZiBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMg
YXJlIHByZXNlbnQ6Ci0gICAqCi0gICAqIEluIFVURi0xNiwgc3VwcGxlbWVudGFyeSBjaGFyYWN0
ZXJzICh3aXRoIGNvZGUgcG9pbnRzIFUrMTAwMDAgYW5kIGFib3ZlKSBhcmUKLSAgICogc3RvcmVk
IHdpdGggcGFpcnMgb2Ygc3Vycm9nYXRlIGNvZGUgdW5pdHMuIFRoZXNlIGhhdmUgdmFsdWVzIGZy
b20gMHhkODAwIHRvIDB4ZGZmZiwKLSAgICogd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGNvbXBhcmUg
YXMgbGVzcyB0aGFuIHNvbWUgb3RoZXIgQk1QIGNoYXJhY3RlcnMgbGlrZSBVK2ZlZmYuCi0gICAq
IFRoaXMgZnVuY3Rpb24gY29tcGFyZXMgVW5pY29kZSBzdHJpbmdzIGluIGNvZGUgcG9pbnQgb3Jk
ZXIuCi0gICAqIElmIGVpdGhlciBvZiB0aGUgVVRGLTE2IHN0cmluZ3MgaXMgbWFsZm9ybWVkIChp
LmUuLCBpdCBjb250YWlucyB1bnBhaXJlZCBzdXJyb2dhdGVzKSwgdGhlbiB0aGUgcmVzdWx0IGlz
IG5vdCBkZWZpbmVkLgotICAgKgotICAgKiBAcGFyYW0gdGV4dCBBbm90aGVyIHN0cmluZyB0byBj
b21wYXJlIHRoaXMgb25lIHRvLgotICAgKiBAcmV0dXJuIGEgbmVnYXRpdmUvemVyby9wb3NpdGl2
ZSBpbnRlZ2VyIGNvcnJlc3BvbmRpbmcgdG8gd2hldGhlcgotICAgKiB0aGlzIHN0cmluZyBpcyBs
ZXNzIHRoYW4vZXF1YWwgdG8vZ3JlYXRlciB0aGFuIHRoZSBzZWNvbmQgb25lCi0gICAqIGluIGNv
ZGUgcG9pbnQgb3JkZXIKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgaW50
OF90IGNvbXBhcmVDb2RlUG9pbnRPcmRlcihjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0KSBjb25z
dDsKLQotICAvKioKLSAgICogQ29tcGFyZSB0d28gVW5pY29kZSBzdHJpbmdzIGluIGNvZGUgcG9p
bnQgb3JkZXIuCi0gICAqIFRoZSByZXN1bHQgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSByZXN1
bHRzIG9mIGNvbXBhcmUoKSwgb3BlcmF0b3I8LCBldGMuCi0gICAqIGlmIHN1cHBsZW1lbnRhcnkg
Y2hhcmFjdGVycyBhcmUgcHJlc2VudDoKLSAgICoKLSAgICogSW4gVVRGLTE2LCBzdXBwbGVtZW50
YXJ5IGNoYXJhY3RlcnMgKHdpdGggY29kZSBwb2ludHMgVSsxMDAwMCBhbmQgYWJvdmUpIGFyZQot
ICAgKiBzdG9yZWQgd2l0aCBwYWlycyBvZiBzdXJyb2dhdGUgY29kZSB1bml0cy4gVGhlc2UgaGF2
ZSB2YWx1ZXMgZnJvbSAweGQ4MDAgdG8gMHhkZmZmLAotICAgKiB3aGljaCBtZWFucyB0aGF0IHRo
ZXkgY29tcGFyZSBhcyBsZXNzIHRoYW4gc29tZSBvdGhlciBCTVAgY2hhcmFjdGVycyBsaWtlIFUr
ZmVmZi4KLSAgICogVGhpcyBmdW5jdGlvbiBjb21wYXJlcyBVbmljb2RlIHN0cmluZ3MgaW4gY29k
ZSBwb2ludCBvcmRlci4KLSAgICogSWYgZWl0aGVyIG9mIHRoZSBVVEYtMTYgc3RyaW5ncyBpcyBt
YWxmb3JtZWQgKGkuZS4sIGl0IGNvbnRhaW5zIHVucGFpcmVkIHN1cnJvZ2F0ZXMpLCB0aGVuIHRo
ZSByZXN1bHQgaXMgbm90IGRlZmluZWQuCi0gICAqCi0gICAqIEBwYXJhbSBzdGFydCBUaGUgc3Rh
cnQgb2Zmc2V0IGluIHRoaXMgc3RyaW5nIGF0IHdoaWNoIHRoZSBjb21wYXJlIG9wZXJhdGlvbiBi
ZWdpbnMuCi0gICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiBjb2RlIHVuaXRzIGZyb20g
dGhpcyBzdHJpbmcgdG8gY29tcGFyZS4KLSAgICogQHBhcmFtIHNyY1RleHQgQW5vdGhlciBzdHJp
bmcgdG8gY29tcGFyZSB0aGlzIG9uZSB0by4KLSAgICogQHJldHVybiBhIG5lZ2F0aXZlL3plcm8v
cG9zaXRpdmUgaW50ZWdlciBjb3JyZXNwb25kaW5nIHRvIHdoZXRoZXIKLSAgICogdGhpcyBzdHJp
bmcgaXMgbGVzcyB0aGFuL2VxdWFsIHRvL2dyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kIG9uZQotICAg
KiBpbiBjb2RlIHBvaW50IG9yZGVyCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5s
aW5lIGludDhfdCBjb21wYXJlQ29kZVBvaW50T3JkZXIoaW50MzJfdCBzdGFydCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQp
IGNvbnN0OwotCi0gIC8qKgotICAgKiBDb21wYXJlIHR3byBVbmljb2RlIHN0cmluZ3MgaW4gY29k
ZSBwb2ludCBvcmRlci4KLSAgICogVGhlIHJlc3VsdCBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhl
IHJlc3VsdHMgb2YgY29tcGFyZSgpLCBvcGVyYXRvcjwsIGV0Yy4KLSAgICogaWYgc3VwcGxlbWVu
dGFyeSBjaGFyYWN0ZXJzIGFyZSBwcmVzZW50OgotICAgKgotICAgKiBJbiBVVEYtMTYsIHN1cHBs
ZW1lbnRhcnkgY2hhcmFjdGVycyAod2l0aCBjb2RlIHBvaW50cyBVKzEwMDAwIGFuZCBhYm92ZSkg
YXJlCi0gICAqIHN0b3JlZCB3aXRoIHBhaXJzIG9mIHN1cnJvZ2F0ZSBjb2RlIHVuaXRzLiBUaGVz
ZSBoYXZlIHZhbHVlcyBmcm9tIDB4ZDgwMCB0byAweGRmZmYsCi0gICAqIHdoaWNoIG1lYW5zIHRo
YXQgdGhleSBjb21wYXJlIGFzIGxlc3MgdGhhbiBzb21lIG90aGVyIEJNUCBjaGFyYWN0ZXJzIGxp
a2UgVStmZWZmLgotICAgKiBUaGlzIGZ1bmN0aW9uIGNvbXBhcmVzIFVuaWNvZGUgc3RyaW5ncyBp
biBjb2RlIHBvaW50IG9yZGVyLgotICAgKiBJZiBlaXRoZXIgb2YgdGhlIFVURi0xNiBzdHJpbmdz
IGlzIG1hbGZvcm1lZCAoaS5lLiwgaXQgY29udGFpbnMgdW5wYWlyZWQgc3Vycm9nYXRlcyksIHRo
ZW4gdGhlIHJlc3VsdCBpcyBub3QgZGVmaW5lZC4KLSAgICoKLSAgICogQHBhcmFtIHN0YXJ0IFRo
ZSBzdGFydCBvZmZzZXQgaW4gdGhpcyBzdHJpbmcgYXQgd2hpY2ggdGhlIGNvbXBhcmUgb3BlcmF0
aW9uIGJlZ2lucy4KLSAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIG9mIGNvZGUgdW5pdHMg
ZnJvbSB0aGlzIHN0cmluZyB0byBjb21wYXJlLgotICAgKiBAcGFyYW0gc3JjVGV4dCBBbm90aGVy
IHN0cmluZyB0byBjb21wYXJlIHRoaXMgb25lIHRvLgotICAgKiBAcGFyYW0gc3JjU3RhcnQgVGhl
IHN0YXJ0IG9mZnNldCBpbiB0aGF0IHN0cmluZyBhdCB3aGljaCB0aGUgY29tcGFyZSBvcGVyYXRp
b24gYmVnaW5zLgotICAgKiBAcGFyYW0gc3JjTGVuZ3RoIFRoZSBudW1iZXIgb2YgY29kZSB1bml0
cyBmcm9tIHRoYXQgc3RyaW5nIHRvIGNvbXBhcmUuCi0gICAqIEByZXR1cm4gYSBuZWdhdGl2ZS96
ZXJvL3Bvc2l0aXZlIGludGVnZXIgY29ycmVzcG9uZGluZyB0byB3aGV0aGVyCi0gICAqIHRoaXMg
c3RyaW5nIGlzIGxlc3MgdGhhbi9lcXVhbCB0by9ncmVhdGVyIHRoYW4gdGhlIHNlY29uZCBvbmUK
LSAgICogaW4gY29kZSBwb2ludCBvcmRlcgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0g
ICBpbmxpbmUgaW50OF90IGNvbXBhcmVDb2RlUG9pbnRPcmRlcihpbnQzMl90IHN0YXJ0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBz
cmNUZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBz
cmNTdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
c3JjTGVuZ3RoKSBjb25zdDsKLQotICAvKioKLSAgICogQ29tcGFyZSB0d28gVW5pY29kZSBzdHJp
bmdzIGluIGNvZGUgcG9pbnQgb3JkZXIuCi0gICAqIFRoZSByZXN1bHQgbWF5IGJlIGRpZmZlcmVu
dCBmcm9tIHRoZSByZXN1bHRzIG9mIGNvbXBhcmUoKSwgb3BlcmF0b3I8LCBldGMuCi0gICAqIGlm
IHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyBhcmUgcHJlc2VudDoKLSAgICoKLSAgICogSW4gVVRG
LTE2LCBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMgKHdpdGggY29kZSBwb2ludHMgVSsxMDAwMCBh
bmQgYWJvdmUpIGFyZQotICAgKiBzdG9yZWQgd2l0aCBwYWlycyBvZiBzdXJyb2dhdGUgY29kZSB1
bml0cy4gVGhlc2UgaGF2ZSB2YWx1ZXMgZnJvbSAweGQ4MDAgdG8gMHhkZmZmLAotICAgKiB3aGlj
aCBtZWFucyB0aGF0IHRoZXkgY29tcGFyZSBhcyBsZXNzIHRoYW4gc29tZSBvdGhlciBCTVAgY2hh
cmFjdGVycyBsaWtlIFUrZmVmZi4KLSAgICogVGhpcyBmdW5jdGlvbiBjb21wYXJlcyBVbmljb2Rl
IHN0cmluZ3MgaW4gY29kZSBwb2ludCBvcmRlci4KLSAgICogSWYgZWl0aGVyIG9mIHRoZSBVVEYt
MTYgc3RyaW5ncyBpcyBtYWxmb3JtZWQgKGkuZS4sIGl0IGNvbnRhaW5zIHVucGFpcmVkIHN1cnJv
Z2F0ZXMpLCB0aGVuIHRoZSByZXN1bHQgaXMgbm90IGRlZmluZWQuCi0gICAqCi0gICAqIEBwYXJh
bSBzcmNDaGFycyBBIHBvaW50ZXIgdG8gYW5vdGhlciBzdHJpbmcgdG8gY29tcGFyZSB0aGlzIG9u
ZSB0by4KLSAgICogQHBhcmFtIHNyY0xlbmd0aCBUaGUgbnVtYmVyIG9mIGNvZGUgdW5pdHMgZnJv
bSB0aGF0IHN0cmluZyB0byBjb21wYXJlLgotICAgKiBAcmV0dXJuIGEgbmVnYXRpdmUvemVyby9w
b3NpdGl2ZSBpbnRlZ2VyIGNvcnJlc3BvbmRpbmcgdG8gd2hldGhlcgotICAgKiB0aGlzIHN0cmlu
ZyBpcyBsZXNzIHRoYW4vZXF1YWwgdG8vZ3JlYXRlciB0aGFuIHRoZSBzZWNvbmQgb25lCi0gICAq
IGluIGNvZGUgcG9pbnQgb3JkZXIKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxp
bmUgaW50OF90IGNvbXBhcmVDb2RlUG9pbnRPcmRlcihjb25zdCBVQ2hhciAqc3JjQ2hhcnMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBj
b25zdDsKLQotICAvKioKLSAgICogQ29tcGFyZSB0d28gVW5pY29kZSBzdHJpbmdzIGluIGNvZGUg
cG9pbnQgb3JkZXIuCi0gICAqIFRoZSByZXN1bHQgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBy
ZXN1bHRzIG9mIGNvbXBhcmUoKSwgb3BlcmF0b3I8LCBldGMuCi0gICAqIGlmIHN1cHBsZW1lbnRh
cnkgY2hhcmFjdGVycyBhcmUgcHJlc2VudDoKLSAgICoKLSAgICogSW4gVVRGLTE2LCBzdXBwbGVt
ZW50YXJ5IGNoYXJhY3RlcnMgKHdpdGggY29kZSBwb2ludHMgVSsxMDAwMCBhbmQgYWJvdmUpIGFy
ZQotICAgKiBzdG9yZWQgd2l0aCBwYWlycyBvZiBzdXJyb2dhdGUgY29kZSB1bml0cy4gVGhlc2Ug
aGF2ZSB2YWx1ZXMgZnJvbSAweGQ4MDAgdG8gMHhkZmZmLAotICAgKiB3aGljaCBtZWFucyB0aGF0
IHRoZXkgY29tcGFyZSBhcyBsZXNzIHRoYW4gc29tZSBvdGhlciBCTVAgY2hhcmFjdGVycyBsaWtl
IFUrZmVmZi4KLSAgICogVGhpcyBmdW5jdGlvbiBjb21wYXJlcyBVbmljb2RlIHN0cmluZ3MgaW4g
Y29kZSBwb2ludCBvcmRlci4KLSAgICogSWYgZWl0aGVyIG9mIHRoZSBVVEYtMTYgc3RyaW5ncyBp
cyBtYWxmb3JtZWQgKGkuZS4sIGl0IGNvbnRhaW5zIHVucGFpcmVkIHN1cnJvZ2F0ZXMpLCB0aGVu
IHRoZSByZXN1bHQgaXMgbm90IGRlZmluZWQuCi0gICAqCi0gICAqIEBwYXJhbSBzdGFydCBUaGUg
c3RhcnQgb2Zmc2V0IGluIHRoaXMgc3RyaW5nIGF0IHdoaWNoIHRoZSBjb21wYXJlIG9wZXJhdGlv
biBiZWdpbnMuCi0gICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiBjb2RlIHVuaXRzIGZy
b20gdGhpcyBzdHJpbmcgdG8gY29tcGFyZS4KLSAgICogQHBhcmFtIHNyY0NoYXJzIEEgcG9pbnRl
ciB0byBhbm90aGVyIHN0cmluZyB0byBjb21wYXJlIHRoaXMgb25lIHRvLgotICAgKiBAcmV0dXJu
IGEgbmVnYXRpdmUvemVyby9wb3NpdGl2ZSBpbnRlZ2VyIGNvcnJlc3BvbmRpbmcgdG8gd2hldGhl
cgotICAgKiB0aGlzIHN0cmluZyBpcyBsZXNzIHRoYW4vZXF1YWwgdG8vZ3JlYXRlciB0aGFuIHRo
ZSBzZWNvbmQgb25lCi0gICAqIGluIGNvZGUgcG9pbnQgb3JkZXIKLSAgICogQHN0YWJsZSBJQ1Ug
Mi4wCi0gICAqLwotICBpbmxpbmUgaW50OF90IGNvbXBhcmVDb2RlUG9pbnRPcmRlcihpbnQzMl90
IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxl
bmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIg
KnNyY0NoYXJzKSBjb25zdDsKLQotICAvKioKLSAgICogQ29tcGFyZSB0d28gVW5pY29kZSBzdHJp
bmdzIGluIGNvZGUgcG9pbnQgb3JkZXIuCi0gICAqIFRoZSByZXN1bHQgbWF5IGJlIGRpZmZlcmVu
dCBmcm9tIHRoZSByZXN1bHRzIG9mIGNvbXBhcmUoKSwgb3BlcmF0b3I8LCBldGMuCi0gICAqIGlm
IHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyBhcmUgcHJlc2VudDoKLSAgICoKLSAgICogSW4gVVRG
LTE2LCBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMgKHdpdGggY29kZSBwb2ludHMgVSsxMDAwMCBh
bmQgYWJvdmUpIGFyZQotICAgKiBzdG9yZWQgd2l0aCBwYWlycyBvZiBzdXJyb2dhdGUgY29kZSB1
bml0cy4gVGhlc2UgaGF2ZSB2YWx1ZXMgZnJvbSAweGQ4MDAgdG8gMHhkZmZmLAotICAgKiB3aGlj
aCBtZWFucyB0aGF0IHRoZXkgY29tcGFyZSBhcyBsZXNzIHRoYW4gc29tZSBvdGhlciBCTVAgY2hh
cmFjdGVycyBsaWtlIFUrZmVmZi4KLSAgICogVGhpcyBmdW5jdGlvbiBjb21wYXJlcyBVbmljb2Rl
IHN0cmluZ3MgaW4gY29kZSBwb2ludCBvcmRlci4KLSAgICogSWYgZWl0aGVyIG9mIHRoZSBVVEYt
MTYgc3RyaW5ncyBpcyBtYWxmb3JtZWQgKGkuZS4sIGl0IGNvbnRhaW5zIHVucGFpcmVkIHN1cnJv
Z2F0ZXMpLCB0aGVuIHRoZSByZXN1bHQgaXMgbm90IGRlZmluZWQuCi0gICAqCi0gICAqIEBwYXJh
bSBzdGFydCBUaGUgc3RhcnQgb2Zmc2V0IGluIHRoaXMgc3RyaW5nIGF0IHdoaWNoIHRoZSBjb21w
YXJlIG9wZXJhdGlvbiBiZWdpbnMuCi0gICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiBj
b2RlIHVuaXRzIGZyb20gdGhpcyBzdHJpbmcgdG8gY29tcGFyZS4KLSAgICogQHBhcmFtIHNyY0No
YXJzIEEgcG9pbnRlciB0byBhbm90aGVyIHN0cmluZyB0byBjb21wYXJlIHRoaXMgb25lIHRvLgot
ICAgKiBAcGFyYW0gc3JjU3RhcnQgVGhlIHN0YXJ0IG9mZnNldCBpbiB0aGF0IHN0cmluZyBhdCB3
aGljaCB0aGUgY29tcGFyZSBvcGVyYXRpb24gYmVnaW5zLgotICAgKiBAcGFyYW0gc3JjTGVuZ3Ro
IFRoZSBudW1iZXIgb2YgY29kZSB1bml0cyBmcm9tIHRoYXQgc3RyaW5nIHRvIGNvbXBhcmUuCi0g
ICAqIEByZXR1cm4gYSBuZWdhdGl2ZS96ZXJvL3Bvc2l0aXZlIGludGVnZXIgY29ycmVzcG9uZGlu
ZyB0byB3aGV0aGVyCi0gICAqIHRoaXMgc3RyaW5nIGlzIGxlc3MgdGhhbi9lcXVhbCB0by9ncmVh
dGVyIHRoYW4gdGhlIHNlY29uZCBvbmUKLSAgICogaW4gY29kZSBwb2ludCBvcmRlcgotICAgKiBA
c3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBpbnQ4X3QgY29tcGFyZUNvZGVQb2ludE9y
ZGVyKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludDMyX3QgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBVQ2hhciAqc3JjQ2hhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludDMyX3Qgc3JjU3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsKLQotICAvKioKLSAgICogQ29tcGFyZSB0d28g
VW5pY29kZSBzdHJpbmdzIGluIGNvZGUgcG9pbnQgb3JkZXIuCi0gICAqIFRoZSByZXN1bHQgbWF5
IGJlIGRpZmZlcmVudCBmcm9tIHRoZSByZXN1bHRzIG9mIGNvbXBhcmUoKSwgb3BlcmF0b3I8LCBl
dGMuCi0gICAqIGlmIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyBhcmUgcHJlc2VudDoKLSAgICoK
LSAgICogSW4gVVRGLTE2LCBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMgKHdpdGggY29kZSBwb2lu
dHMgVSsxMDAwMCBhbmQgYWJvdmUpIGFyZQotICAgKiBzdG9yZWQgd2l0aCBwYWlycyBvZiBzdXJy
b2dhdGUgY29kZSB1bml0cy4gVGhlc2UgaGF2ZSB2YWx1ZXMgZnJvbSAweGQ4MDAgdG8gMHhkZmZm
LAotICAgKiB3aGljaCBtZWFucyB0aGF0IHRoZXkgY29tcGFyZSBhcyBsZXNzIHRoYW4gc29tZSBv
dGhlciBCTVAgY2hhcmFjdGVycyBsaWtlIFUrZmVmZi4KLSAgICogVGhpcyBmdW5jdGlvbiBjb21w
YXJlcyBVbmljb2RlIHN0cmluZ3MgaW4gY29kZSBwb2ludCBvcmRlci4KLSAgICogSWYgZWl0aGVy
IG9mIHRoZSBVVEYtMTYgc3RyaW5ncyBpcyBtYWxmb3JtZWQgKGkuZS4sIGl0IGNvbnRhaW5zIHVu
cGFpcmVkIHN1cnJvZ2F0ZXMpLCB0aGVuIHRoZSByZXN1bHQgaXMgbm90IGRlZmluZWQuCi0gICAq
Ci0gICAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgb2Zmc2V0IGluIHRoaXMgc3RyaW5nIGF0IHdo
aWNoIHRoZSBjb21wYXJlIG9wZXJhdGlvbiBiZWdpbnMuCi0gICAqIEBwYXJhbSBsaW1pdCBUaGUg
b2Zmc2V0IGFmdGVyIHRoZSBsYXN0IGNvZGUgdW5pdCBmcm9tIHRoaXMgc3RyaW5nIHRvIGNvbXBh
cmUuCi0gICAqIEBwYXJhbSBzcmNUZXh0IEFub3RoZXIgc3RyaW5nIHRvIGNvbXBhcmUgdGhpcyBv
bmUgdG8uCi0gICAqIEBwYXJhbSBzcmNTdGFydCBUaGUgc3RhcnQgb2Zmc2V0IGluIHRoYXQgc3Ry
aW5nIGF0IHdoaWNoIHRoZSBjb21wYXJlIG9wZXJhdGlvbiBiZWdpbnMuCi0gICAqIEBwYXJhbSBz
cmNMaW1pdCBUaGUgb2Zmc2V0IGFmdGVyIHRoZSBsYXN0IGNvZGUgdW5pdCBmcm9tIHRoYXQgc3Ry
aW5nIHRvIGNvbXBhcmUuCi0gICAqIEByZXR1cm4gYSBuZWdhdGl2ZS96ZXJvL3Bvc2l0aXZlIGlu
dGVnZXIgY29ycmVzcG9uZGluZyB0byB3aGV0aGVyCi0gICAqIHRoaXMgc3RyaW5nIGlzIGxlc3Mg
dGhhbi9lcXVhbCB0by9ncmVhdGVyIHRoYW4gdGhlIHNlY29uZCBvbmUKLSAgICogaW4gY29kZSBw
b2ludCBvcmRlcgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBpbnQ4X3Qg
Y29tcGFyZUNvZGVQb2ludE9yZGVyQmV0d2VlbihpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsaW1pdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcm
IHNyY1RleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQzMl90IHNyY1N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50MzJfdCBzcmNMaW1pdCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIENvbXBhcmUgdHdv
IHN0cmluZ3MgY2FzZS1pbnNlbnNpdGl2ZWx5IHVzaW5nIGZ1bGwgY2FzZSBmb2xkaW5nLgotICAg
KiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhpcy0+Zm9sZENhc2Uob3B0aW9ucykuY29tcGFyZSh0
ZXh0LmZvbGRDYXNlKG9wdGlvbnMpKS4KLSAgICoKLSAgICogQHBhcmFtIHRleHQgQW5vdGhlciBz
dHJpbmcgdG8gY29tcGFyZSB0aGlzIG9uZSB0by4KLSAgICogQHBhcmFtIG9wdGlvbnMgQSBiaXQg
c2V0IG9mIG9wdGlvbnM6Ci0gICAqICAgLSBVX0ZPTERfQ0FTRV9ERUZBVUxUIG9yIDAgaXMgdXNl
ZCBmb3IgZGVmYXVsdCBvcHRpb25zOgotICAgKiAgICAgQ29tcGFyaXNvbiBpbiBjb2RlIHVuaXQg
b3JkZXIgd2l0aCBkZWZhdWx0IGNhc2UgZm9sZGluZy4KLSAgICoKLSAgICogICAtIFVfQ09NUEFS
RV9DT0RFX1BPSU5UX09SREVSCi0gICAqICAgICBTZXQgdG8gY2hvb3NlIGNvZGUgcG9pbnQgb3Jk
ZXIgaW5zdGVhZCBvZiBjb2RlIHVuaXQgb3JkZXIKLSAgICogICAgIChzZWUgdV9zdHJDb21wYXJl
IGZvciBkZXRhaWxzKS4KLSAgICoKLSAgICogICAtIFVfRk9MRF9DQVNFX0VYQ0xVREVfU1BFQ0lB
TF9JCi0gICAqCi0gICAqIEByZXR1cm4gQSBuZWdhdGl2ZSwgemVybywgb3IgcG9zaXRpdmUgaW50
ZWdlciBpbmRpY2F0aW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdC4KLSAgICogQHN0YWJsZSBJQ1Ug
Mi4wCi0gICAqLwotICBpbmxpbmUgaW50OF90IGNhc2VDb21wYXJlKGNvbnN0IFVuaWNvZGVTdHJp
bmcmIHRleHQsIHVpbnQzMl90IG9wdGlvbnMpIGNvbnN0OwotCi0gIC8qKgotICAgKiBDb21wYXJl
IHR3byBzdHJpbmdzIGNhc2UtaW5zZW5zaXRpdmVseSB1c2luZyBmdWxsIGNhc2UgZm9sZGluZy4K
LSAgICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoaXMtPmZvbGRDYXNlKG9wdGlvbnMpLmNvbXBh
cmUoc3JjVGV4dC5mb2xkQ2FzZShvcHRpb25zKSkuCi0gICAqCi0gICAqIEBwYXJhbSBzdGFydCBU
aGUgc3RhcnQgb2Zmc2V0IGluIHRoaXMgc3RyaW5nIGF0IHdoaWNoIHRoZSBjb21wYXJlIG9wZXJh
dGlvbiBiZWdpbnMuCi0gICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiBjb2RlIHVuaXRz
IGZyb20gdGhpcyBzdHJpbmcgdG8gY29tcGFyZS4KLSAgICogQHBhcmFtIHNyY1RleHQgQW5vdGhl
ciBzdHJpbmcgdG8gY29tcGFyZSB0aGlzIG9uZSB0by4KLSAgICogQHBhcmFtIG9wdGlvbnMgQSBi
aXQgc2V0IG9mIG9wdGlvbnM6Ci0gICAqICAgLSBVX0ZPTERfQ0FTRV9ERUZBVUxUIG9yIDAgaXMg
dXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zOgotICAgKiAgICAgQ29tcGFyaXNvbiBpbiBjb2RlIHVu
aXQgb3JkZXIgd2l0aCBkZWZhdWx0IGNhc2UgZm9sZGluZy4KLSAgICoKLSAgICogICAtIFVfQ09N
UEFSRV9DT0RFX1BPSU5UX09SREVSCi0gICAqICAgICBTZXQgdG8gY2hvb3NlIGNvZGUgcG9pbnQg
b3JkZXIgaW5zdGVhZCBvZiBjb2RlIHVuaXQgb3JkZXIKLSAgICogICAgIChzZWUgdV9zdHJDb21w
YXJlIGZvciBkZXRhaWxzKS4KLSAgICoKLSAgICogICAtIFVfRk9MRF9DQVNFX0VYQ0xVREVfU1BF
Q0lBTF9JCi0gICAqCi0gICAqIEByZXR1cm4gQSBuZWdhdGl2ZSwgemVybywgb3IgcG9zaXRpdmUg
aW50ZWdlciBpbmRpY2F0aW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdC4KLSAgICogQHN0YWJsZSBJ
Q1UgMi4wCi0gICAqLwotICBpbmxpbmUgaW50OF90IGNhc2VDb21wYXJlKGludDMyX3Qgc3RhcnQs
Ci0gICAgICAgICBpbnQzMl90IGxlbmd0aCwKLSAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcm
IHNyY1RleHQsCi0gICAgICAgICB1aW50MzJfdCBvcHRpb25zKSBjb25zdDsKLQotICAvKioKLSAg
ICogQ29tcGFyZSB0d28gc3RyaW5ncyBjYXNlLWluc2Vuc2l0aXZlbHkgdXNpbmcgZnVsbCBjYXNl
IGZvbGRpbmcuCi0gICAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGlzLT5mb2xkQ2FzZShvcHRp
b25zKS5jb21wYXJlKHNyY1RleHQuZm9sZENhc2Uob3B0aW9ucykpLgotICAgKgotICAgKiBAcGFy
YW0gc3RhcnQgVGhlIHN0YXJ0IG9mZnNldCBpbiB0aGlzIHN0cmluZyBhdCB3aGljaCB0aGUgY29t
cGFyZSBvcGVyYXRpb24gYmVnaW5zLgotICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgb2Yg
Y29kZSB1bml0cyBmcm9tIHRoaXMgc3RyaW5nIHRvIGNvbXBhcmUuCi0gICAqIEBwYXJhbSBzcmNU
ZXh0IEFub3RoZXIgc3RyaW5nIHRvIGNvbXBhcmUgdGhpcyBvbmUgdG8uCi0gICAqIEBwYXJhbSBz
cmNTdGFydCBUaGUgc3RhcnQgb2Zmc2V0IGluIHRoYXQgc3RyaW5nIGF0IHdoaWNoIHRoZSBjb21w
YXJlIG9wZXJhdGlvbiBiZWdpbnMuCi0gICAqIEBwYXJhbSBzcmNMZW5ndGggVGhlIG51bWJlciBv
ZiBjb2RlIHVuaXRzIGZyb20gdGhhdCBzdHJpbmcgdG8gY29tcGFyZS4KLSAgICogQHBhcmFtIG9w
dGlvbnMgQSBiaXQgc2V0IG9mIG9wdGlvbnM6Ci0gICAqICAgLSBVX0ZPTERfQ0FTRV9ERUZBVUxU
IG9yIDAgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zOgotICAgKiAgICAgQ29tcGFyaXNvbiBp
biBjb2RlIHVuaXQgb3JkZXIgd2l0aCBkZWZhdWx0IGNhc2UgZm9sZGluZy4KLSAgICoKLSAgICog
ICAtIFVfQ09NUEFSRV9DT0RFX1BPSU5UX09SREVSCi0gICAqICAgICBTZXQgdG8gY2hvb3NlIGNv
ZGUgcG9pbnQgb3JkZXIgaW5zdGVhZCBvZiBjb2RlIHVuaXQgb3JkZXIKLSAgICogICAgIChzZWUg
dV9zdHJDb21wYXJlIGZvciBkZXRhaWxzKS4KLSAgICoKLSAgICogICAtIFVfRk9MRF9DQVNFX0VY
Q0xVREVfU1BFQ0lBTF9JCi0gICAqCi0gICAqIEByZXR1cm4gQSBuZWdhdGl2ZSwgemVybywgb3Ig
cG9zaXRpdmUgaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdC4KLSAgICog
QHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgaW50OF90IGNhc2VDb21wYXJlKGludDMy
X3Qgc3RhcnQsCi0gICAgICAgICBpbnQzMl90IGxlbmd0aCwKLSAgICAgICAgIGNvbnN0IFVuaWNv
ZGVTdHJpbmcmIHNyY1RleHQsCi0gICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LAotICAgICAgICAg
aW50MzJfdCBzcmNMZW5ndGgsCi0gICAgICAgICB1aW50MzJfdCBvcHRpb25zKSBjb25zdDsKLQot
ICAvKioKLSAgICogQ29tcGFyZSB0d28gc3RyaW5ncyBjYXNlLWluc2Vuc2l0aXZlbHkgdXNpbmcg
ZnVsbCBjYXNlIGZvbGRpbmcuCi0gICAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGlzLT5mb2xk
Q2FzZShvcHRpb25zKS5jb21wYXJlKHNyY0NoYXJzLmZvbGRDYXNlKG9wdGlvbnMpKS4KLSAgICoK
LSAgICogQHBhcmFtIHNyY0NoYXJzIEEgcG9pbnRlciB0byBhbm90aGVyIHN0cmluZyB0byBjb21w
YXJlIHRoaXMgb25lIHRvLgotICAgKiBAcGFyYW0gc3JjTGVuZ3RoIFRoZSBudW1iZXIgb2YgY29k
ZSB1bml0cyBmcm9tIHRoYXQgc3RyaW5nIHRvIGNvbXBhcmUuCi0gICAqIEBwYXJhbSBvcHRpb25z
IEEgYml0IHNldCBvZiBvcHRpb25zOgotICAgKiAgIC0gVV9GT0xEX0NBU0VfREVGQVVMVCBvciAw
IGlzIHVzZWQgZm9yIGRlZmF1bHQgb3B0aW9uczoKLSAgICogICAgIENvbXBhcmlzb24gaW4gY29k
ZSB1bml0IG9yZGVyIHdpdGggZGVmYXVsdCBjYXNlIGZvbGRpbmcuCi0gICAqCi0gICAqICAgLSBV
X0NPTVBBUkVfQ09ERV9QT0lOVF9PUkRFUgotICAgKiAgICAgU2V0IHRvIGNob29zZSBjb2RlIHBv
aW50IG9yZGVyIGluc3RlYWQgb2YgY29kZSB1bml0IG9yZGVyCi0gICAqICAgICAoc2VlIHVfc3Ry
Q29tcGFyZSBmb3IgZGV0YWlscykuCi0gICAqCi0gICAqICAgLSBVX0ZPTERfQ0FTRV9FWENMVURF
X1NQRUNJQUxfSQotICAgKgotICAgKiBAcmV0dXJuIEEgbmVnYXRpdmUsIHplcm8sIG9yIHBvc2l0
aXZlIGludGVnZXIgaW5kaWNhdGluZyB0aGUgY29tcGFyaXNvbiByZXN1bHQuCi0gICAqIEBzdGFi
bGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIGludDhfdCBjYXNlQ29tcGFyZShjb25zdCBVQ2hh
ciAqc3JjQ2hhcnMsCi0gICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwKLSAgICAgICAgIHVpbnQz
Ml90IG9wdGlvbnMpIGNvbnN0OwotCi0gIC8qKgotICAgKiBDb21wYXJlIHR3byBzdHJpbmdzIGNh
c2UtaW5zZW5zaXRpdmVseSB1c2luZyBmdWxsIGNhc2UgZm9sZGluZy4KLSAgICogVGhpcyBpcyBl
cXVpdmFsZW50IHRvIHRoaXMtPmZvbGRDYXNlKG9wdGlvbnMpLmNvbXBhcmUoc3JjQ2hhcnMuZm9s
ZENhc2Uob3B0aW9ucykpLgotICAgKgotICAgKiBAcGFyYW0gc3RhcnQgVGhlIHN0YXJ0IG9mZnNl
dCBpbiB0aGlzIHN0cmluZyBhdCB3aGljaCB0aGUgY29tcGFyZSBvcGVyYXRpb24gYmVnaW5zLgot
ICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgb2YgY29kZSB1bml0cyBmcm9tIHRoaXMgc3Ry
aW5nIHRvIGNvbXBhcmUuCi0gICAqIEBwYXJhbSBzcmNDaGFycyBBIHBvaW50ZXIgdG8gYW5vdGhl
ciBzdHJpbmcgdG8gY29tcGFyZSB0aGlzIG9uZSB0by4KLSAgICogQHBhcmFtIG9wdGlvbnMgQSBi
aXQgc2V0IG9mIG9wdGlvbnM6Ci0gICAqICAgLSBVX0ZPTERfQ0FTRV9ERUZBVUxUIG9yIDAgaXMg
dXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zOgotICAgKiAgICAgQ29tcGFyaXNvbiBpbiBjb2RlIHVu
aXQgb3JkZXIgd2l0aCBkZWZhdWx0IGNhc2UgZm9sZGluZy4KLSAgICoKLSAgICogICAtIFVfQ09N
UEFSRV9DT0RFX1BPSU5UX09SREVSCi0gICAqICAgICBTZXQgdG8gY2hvb3NlIGNvZGUgcG9pbnQg
b3JkZXIgaW5zdGVhZCBvZiBjb2RlIHVuaXQgb3JkZXIKLSAgICogICAgIChzZWUgdV9zdHJDb21w
YXJlIGZvciBkZXRhaWxzKS4KLSAgICoKLSAgICogICAtIFVfRk9MRF9DQVNFX0VYQ0xVREVfU1BF
Q0lBTF9JCi0gICAqCi0gICAqIEByZXR1cm4gQSBuZWdhdGl2ZSwgemVybywgb3IgcG9zaXRpdmUg
aW50ZWdlciBpbmRpY2F0aW5nIHRoZSBjb21wYXJpc29uIHJlc3VsdC4KLSAgICogQHN0YWJsZSBJ
Q1UgMi4wCi0gICAqLwotICBpbmxpbmUgaW50OF90IGNhc2VDb21wYXJlKGludDMyX3Qgc3RhcnQs
Ci0gICAgICAgICBpbnQzMl90IGxlbmd0aCwKLSAgICAgICAgIGNvbnN0IFVDaGFyICpzcmNDaGFy
cywKLSAgICAgICAgIHVpbnQzMl90IG9wdGlvbnMpIGNvbnN0OwotCi0gIC8qKgotICAgKiBDb21w
YXJlIHR3byBzdHJpbmdzIGNhc2UtaW5zZW5zaXRpdmVseSB1c2luZyBmdWxsIGNhc2UgZm9sZGlu
Zy4KLSAgICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoaXMtPmZvbGRDYXNlKG9wdGlvbnMpLmNv
bXBhcmUoc3JjQ2hhcnMuZm9sZENhc2Uob3B0aW9ucykpLgotICAgKgotICAgKiBAcGFyYW0gc3Rh
cnQgVGhlIHN0YXJ0IG9mZnNldCBpbiB0aGlzIHN0cmluZyBhdCB3aGljaCB0aGUgY29tcGFyZSBv
cGVyYXRpb24gYmVnaW5zLgotICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgb2YgY29kZSB1
bml0cyBmcm9tIHRoaXMgc3RyaW5nIHRvIGNvbXBhcmUuCi0gICAqIEBwYXJhbSBzcmNDaGFycyBB
IHBvaW50ZXIgdG8gYW5vdGhlciBzdHJpbmcgdG8gY29tcGFyZSB0aGlzIG9uZSB0by4KLSAgICog
QHBhcmFtIHNyY1N0YXJ0IFRoZSBzdGFydCBvZmZzZXQgaW4gdGhhdCBzdHJpbmcgYXQgd2hpY2gg
dGhlIGNvbXBhcmUgb3BlcmF0aW9uIGJlZ2lucy4KLSAgICogQHBhcmFtIHNyY0xlbmd0aCBUaGUg
bnVtYmVyIG9mIGNvZGUgdW5pdHMgZnJvbSB0aGF0IHN0cmluZyB0byBjb21wYXJlLgotICAgKiBA
cGFyYW0gb3B0aW9ucyBBIGJpdCBzZXQgb2Ygb3B0aW9uczoKLSAgICogICAtIFVfRk9MRF9DQVNF
X0RFRkFVTFQgb3IgMCBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnM6Ci0gICAqICAgICBDb21w
YXJpc29uIGluIGNvZGUgdW5pdCBvcmRlciB3aXRoIGRlZmF1bHQgY2FzZSBmb2xkaW5nLgotICAg
KgotICAgKiAgIC0gVV9DT01QQVJFX0NPREVfUE9JTlRfT1JERVIKLSAgICogICAgIFNldCB0byBj
aG9vc2UgY29kZSBwb2ludCBvcmRlciBpbnN0ZWFkIG9mIGNvZGUgdW5pdCBvcmRlcgotICAgKiAg
ICAgKHNlZSB1X3N0ckNvbXBhcmUgZm9yIGRldGFpbHMpLgotICAgKgotICAgKiAgIC0gVV9GT0xE
X0NBU0VfRVhDTFVERV9TUEVDSUFMX0kKLSAgICoKLSAgICogQHJldHVybiBBIG5lZ2F0aXZlLCB6
ZXJvLCBvciBwb3NpdGl2ZSBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIGNvbXBhcmlzb24gcmVzdWx0
LgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBpbnQ4X3QgY2FzZUNvbXBh
cmUoaW50MzJfdCBzdGFydCwKLSAgICAgICAgIGludDMyX3QgbGVuZ3RoLAotICAgICAgICAgY29u
c3QgVUNoYXIgKnNyY0NoYXJzLAotICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAg
IGludDMyX3Qgc3JjTGVuZ3RoLAotICAgICAgICAgdWludDMyX3Qgb3B0aW9ucykgY29uc3Q7Ci0K
LSAgLyoqCi0gICAqIENvbXBhcmUgdHdvIHN0cmluZ3MgY2FzZS1pbnNlbnNpdGl2ZWx5IHVzaW5n
IGZ1bGwgY2FzZSBmb2xkaW5nLgotICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhpcy0+Zm9s
ZENhc2Uob3B0aW9ucykuY29tcGFyZUJldHdlZW4odGV4dC5mb2xkQ2FzZShvcHRpb25zKSkuCi0g
ICAqCi0gICAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgb2Zmc2V0IGluIHRoaXMgc3RyaW5nIGF0
IHdoaWNoIHRoZSBjb21wYXJlIG9wZXJhdGlvbiBiZWdpbnMuCi0gICAqIEBwYXJhbSBsaW1pdCBU
aGUgb2Zmc2V0IGFmdGVyIHRoZSBsYXN0IGNvZGUgdW5pdCBmcm9tIHRoaXMgc3RyaW5nIHRvIGNv
bXBhcmUuCi0gICAqIEBwYXJhbSBzcmNUZXh0IEFub3RoZXIgc3RyaW5nIHRvIGNvbXBhcmUgdGhp
cyBvbmUgdG8uCi0gICAqIEBwYXJhbSBzcmNTdGFydCBUaGUgc3RhcnQgb2Zmc2V0IGluIHRoYXQg
c3RyaW5nIGF0IHdoaWNoIHRoZSBjb21wYXJlIG9wZXJhdGlvbiBiZWdpbnMuCi0gICAqIEBwYXJh
bSBzcmNMaW1pdCBUaGUgb2Zmc2V0IGFmdGVyIHRoZSBsYXN0IGNvZGUgdW5pdCBmcm9tIHRoYXQg
c3RyaW5nIHRvIGNvbXBhcmUuCi0gICAqIEBwYXJhbSBvcHRpb25zIEEgYml0IHNldCBvZiBvcHRp
b25zOgotICAgKiAgIC0gVV9GT0xEX0NBU0VfREVGQVVMVCBvciAwIGlzIHVzZWQgZm9yIGRlZmF1
bHQgb3B0aW9uczoKLSAgICogICAgIENvbXBhcmlzb24gaW4gY29kZSB1bml0IG9yZGVyIHdpdGgg
ZGVmYXVsdCBjYXNlIGZvbGRpbmcuCi0gICAqCi0gICAqICAgLSBVX0NPTVBBUkVfQ09ERV9QT0lO
VF9PUkRFUgotICAgKiAgICAgU2V0IHRvIGNob29zZSBjb2RlIHBvaW50IG9yZGVyIGluc3RlYWQg
b2YgY29kZSB1bml0IG9yZGVyCi0gICAqICAgICAoc2VlIHVfc3RyQ29tcGFyZSBmb3IgZGV0YWls
cykuCi0gICAqCi0gICAqICAgLSBVX0ZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSQotICAgKgot
ICAgKiBAcmV0dXJuIEEgbmVnYXRpdmUsIHplcm8sIG9yIHBvc2l0aXZlIGludGVnZXIgaW5kaWNh
dGluZyB0aGUgY29tcGFyaXNvbiByZXN1bHQuCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8K
LSAgaW5saW5lIGludDhfdCBjYXNlQ29tcGFyZUJldHdlZW4oaW50MzJfdCBzdGFydCwKLSAgICAg
ICAgICAgIGludDMyX3QgbGltaXQsCi0gICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBz
cmNUZXh0LAotICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAgICAgIGludDMy
X3Qgc3JjTGltaXQsCi0gICAgICAgICAgICB1aW50MzJfdCBvcHRpb25zKSBjb25zdDsKLQotICAv
KioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgc3RhcnRzIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4g
PFRUPnRleHQ8L1RUPgotICAgKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBtYXRjaC4KLSAgICog
QHJldHVybiBUUlVFIGlmIHRoaXMgc3RhcnRzIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gPFRUPnRl
eHQ8L1RUPiwKLSAgICogRkFMU0Ugb3RoZXJ3aXNlCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAg
Ki8KLSAgaW5saW5lIFVCb29sIHN0YXJ0c1dpdGgoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkg
Y29uc3Q7Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGlzIHN0YXJ0cyB3aXRoIHRoZSBj
aGFyYWN0ZXJzIGluIDxUVD5zcmNUZXh0PC9UVD4KLSAgICogaW4gdGhlIHJhbmdlIFs8VFQ+c3Jj
U3RhcnQ8L1RUPiwgPFRUPnNyY1N0YXJ0ICsgc3JjTGVuZ3RoPC9UVD4pLgotICAgKiBAcGFyYW0g
c3JjVGV4dCBUaGUgdGV4dCB0byBtYXRjaC4KLSAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZz
ZXQgaW50byA8VFQ+c3JjVGV4dDwvVFQ+IHRvIHN0YXJ0IG1hdGNoaW5nCi0gICAqIEBwYXJhbSBz
cmNMZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNUZXh0PC9UVD4gdG8g
bWF0Y2gKLSAgICogQHJldHVybiBUUlVFIGlmIHRoaXMgc3RhcnRzIHdpdGggdGhlIGNoYXJhY3Rl
cnMgaW4gPFRUPnRleHQ8L1RUPiwKLSAgICogRkFMU0Ugb3RoZXJ3aXNlCi0gICAqIEBzdGFibGUg
SUNVIDIuMAotICAgKi8KLSAgaW5saW5lIFVCb29sIHN0YXJ0c1dpdGgoY29uc3QgVW5pY29kZVN0
cmluZyYgc3JjVGV4dCwKLSAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsCi0gICAgICAgICAg
ICBpbnQzMl90IHNyY0xlbmd0aCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0
aGlzIHN0YXJ0cyB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+Ci0gICAq
IEBwYXJhbSBzcmNDaGFycyBUaGUgY2hhcmFjdGVycyB0byBtYXRjaC4KLSAgICogQHBhcmFtIHNy
Y0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4KLSAg
ICogQHJldHVybiBUUlVFIGlmIHRoaXMgc3RhcnRzIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4gPFRU
PnNyY0NoYXJzPC9UVD4sCi0gICAqIEZBTFNFIG90aGVyd2lzZQotICAgKiBAc3RhYmxlIElDVSAy
LjAKLSAgICovCi0gIGlubGluZSBVQm9vbCBzdGFydHNXaXRoKGNvbnN0IFVDaGFyICpzcmNDaGFy
cywKLSAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsKLQotICAvKioKLSAgICog
RGV0ZXJtaW5lIGlmIHRoaXMgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFy
czwvVFQ+Ci0gICAqIGluIHRoZSByYW5nZSAgWzxUVD5zcmNTdGFydDwvVFQ+LCA8VFQ+c3JjU3Rh
cnQgKyBzcmNMZW5ndGg8L1RUPikuCi0gICAqIEBwYXJhbSBzcmNDaGFycyBUaGUgY2hhcmFjdGVy
cyB0byBtYXRjaC4KLSAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZzZXQgaW50byA8VFQ+c3Jj
VGV4dDwvVFQ+IHRvIHN0YXJ0IG1hdGNoaW5nCi0gICAqIEBwYXJhbSBzcmNMZW5ndGggdGhlIG51
bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+IHRvIG1hdGNoCi0gICAqIEBy
ZXR1cm4gVFJVRSBpZiB0aGlzIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+c3JjQ2hh
cnM8L1RUPiwgRkFMU0Ugb3RoZXJ3aXNlCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAg
aW5saW5lIFVCb29sIHN0YXJ0c1dpdGgoY29uc3QgVUNoYXIgKnNyY0NoYXJzLAotICAgICAgICAg
ICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25z
dDsKLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZW5kcyB3aXRoIHRoZSBjaGFyYWN0
ZXJzIGluIDxUVD50ZXh0PC9UVD4KLSAgICogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gbWF0Y2gu
Ci0gICAqIEByZXR1cm4gVFJVRSBpZiB0aGlzIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBpbiA8
VFQ+dGV4dDwvVFQ+LAotICAgKiBGQUxTRSBvdGhlcndpc2UKLSAgICogQHN0YWJsZSBJQ1UgMi4w
Ci0gICAqLwotICBpbmxpbmUgVUJvb2wgZW5kc1dpdGgoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4
dCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIERldGVybWluZSBpZiB0aGlzIGVuZHMgd2l0aCB0aGUg
Y2hhcmFjdGVycyBpbiA8VFQ+c3JjVGV4dDwvVFQ+Ci0gICAqIGluIHRoZSByYW5nZSBbPFRUPnNy
Y1N0YXJ0PC9UVD4sIDxUVD5zcmNTdGFydCArIHNyY0xlbmd0aDwvVFQ+KS4KLSAgICogQHBhcmFt
IHNyY1RleHQgVGhlIHRleHQgdG8gbWF0Y2guCi0gICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zm
c2V0IGludG8gPFRUPnNyY1RleHQ8L1RUPiB0byBzdGFydCBtYXRjaGluZwotICAgKiBAcGFyYW0g
c3JjTGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiA8VFQ+c3JjVGV4dDwvVFQ+IHRv
IG1hdGNoCi0gICAqIEByZXR1cm4gVFJVRSBpZiB0aGlzIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVy
cyBpbiA8VFQ+dGV4dDwvVFQ+LAotICAgKiBGQUxTRSBvdGhlcndpc2UKLSAgICogQHN0YWJsZSBJ
Q1UgMi4wCi0gICAqLwotICBpbmxpbmUgVUJvb2wgZW5kc1dpdGgoY29uc3QgVW5pY29kZVN0cmlu
ZyYgc3JjVGV4dCwKLSAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LAotICAgICAgICAgIGludDMy
X3Qgc3JjTGVuZ3RoKSBjb25zdDsKLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRoaXMgZW5k
cyB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+Ci0gICAqIEBwYXJhbSBz
cmNDaGFycyBUaGUgY2hhcmFjdGVycyB0byBtYXRjaC4KLSAgICogQHBhcmFtIHNyY0xlbmd0aCB0
aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4KLSAgICogQHJldHVy
biBUUlVFIGlmIHRoaXMgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwv
VFQ+LAotICAgKiBGQUxTRSBvdGhlcndpc2UKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwot
ICBpbmxpbmUgVUJvb2wgZW5kc1dpdGgoY29uc3QgVUNoYXIgKnNyY0NoYXJzLAotICAgICAgICAg
IGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsKLQotICAvKioKLSAgICogRGV0ZXJtaW5lIGlmIHRo
aXMgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+Ci0gICAqIGlu
IHRoZSByYW5nZSAgWzxUVD5zcmNTdGFydDwvVFQ+LCA8VFQ+c3JjU3RhcnQgKyBzcmNMZW5ndGg8
L1RUPikuCi0gICAqIEBwYXJhbSBzcmNDaGFycyBUaGUgY2hhcmFjdGVycyB0byBtYXRjaC4KLSAg
ICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZzZXQgaW50byA8VFQ+c3JjVGV4dDwvVFQ+IHRvIHN0
YXJ0IG1hdGNoaW5nCi0gICAqIEBwYXJhbSBzcmNMZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0
ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+IHRvIG1hdGNoCi0gICAqIEByZXR1cm4gVFJVRSBpZiB0
aGlzIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+c3JjQ2hhcnM8L1RUPiwKLSAgICog
RkFMU0Ugb3RoZXJ3aXNlCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIFVC
b29sIGVuZHNXaXRoKGNvbnN0IFVDaGFyICpzcmNDaGFycywKLSAgICAgICAgICBpbnQzMl90IHNy
Y1N0YXJ0LAotICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsKLQotCi0gIC8qIFNl
YXJjaGluZyAtIGJpdHdpc2Ugb25seSAqLwotCi0gIC8qKgotICAgKiBMb2NhdGUgaW4gdGhpcyB0
aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+dGV4dDwvVFQ+LAot
ICAgKiB1c2luZyBiaXR3aXNlIGNvbXBhcmlzb24uCi0gICAqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0
IHRvIHNlYXJjaCBmb3IuCi0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgdGhl
IHN0YXJ0IG9mIDxUVD50ZXh0PC9UVD4sCi0gICAqIG9yIC0xIGlmIG5vdCBmb3VuZC4KLSAgICog
QHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgaW50MzJfdCBpbmRleE9mKGNvbnN0IFVu
aWNvZGVTdHJpbmcmIHRleHQpIGNvbnN0OwotCi0gIC8qKgotICAgKiBMb2NhdGUgaW4gdGhpcyB0
aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+dGV4dDwvVFQ+Ci0g
ICAqIHN0YXJ0aW5nIGF0IG9mZnNldCA8VFQ+c3RhcnQ8L1RUPiwgdXNpbmcgYml0d2lzZSBjb21w
YXJpc29uLgotICAgKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBzZWFyY2ggZm9yLgotICAgKiBA
cGFyYW0gc3RhcnQgVGhlIG9mZnNldCBhdCB3aGljaCBzZWFyY2hpbmcgd2lsbCBzdGFydC4KLSAg
ICogQHJldHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBvZiB0aGUgc3RhcnQgb2YgPFRUPnRleHQ8
L1RUPiwKLSAgICogb3IgLTEgaWYgbm90IGZvdW5kLgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAg
ICovCi0gIGlubGluZSBpbnQzMl90IGluZGV4T2YoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCwK
LSAgICAgICAgICAgICAgaW50MzJfdCBzdGFydCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIExvY2F0
ZSBpbiB0aGlzIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIHRoZSByYW5nZQotICAgKiBbPFRUPnN0
YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+KSBvZiB0aGUgY2hhcmFjdGVycwotICAg
KiBpbiA8VFQ+dGV4dDwvVFQ+LCB1c2luZyBiaXR3aXNlIGNvbXBhcmlzb24uCi0gICAqIEBwYXJh
bSB0ZXh0IFRoZSB0ZXh0IHRvIHNlYXJjaCBmb3IuCi0gICAqIEBwYXJhbSBzdGFydCBUaGUgb2Zm
c2V0IGF0IHdoaWNoIHNlYXJjaGluZyB3aWxsIHN0YXJ0LgotICAgKiBAcGFyYW0gbGVuZ3RoIFRo
ZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBzZWFyY2gKLSAgICogQHJldHVybiBUaGUgb2Zmc2V0
IGludG8gdGhpcyBvZiB0aGUgc3RhcnQgb2YgPFRUPnRleHQ8L1RUPiwKLSAgICogb3IgLTEgaWYg
bm90IGZvdW5kLgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBpbnQzMl90
IGluZGV4T2YoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCwKLSAgICAgICAgICAgICAgaW50MzJf
dCBzdGFydCwKLSAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgpIGNvbnN0OwotCi0gIC8qKgot
ICAgKiBMb2NhdGUgaW4gdGhpcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiB0aGUgcmFuZ2UKLSAg
ICogWzxUVD5zdGFydDwvVFQ+LCA8VFQ+c3RhcnQgKyBsZW5ndGg8L1RUPikgb2YgdGhlIGNoYXJh
Y3RlcnMKLSAgICogIGluIDxUVD5zcmNUZXh0PC9UVD4gaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+
c3JjU3RhcnQ8L1RUPiwgPFRUPnNyY1N0YXJ0ICsgc3JjTGVuZ3RoPC9UVD4pLAotICAgKiB1c2lu
ZyBiaXR3aXNlIGNvbXBhcmlzb24uCi0gICAqIEBwYXJhbSBzcmNUZXh0IFRoZSB0ZXh0IHRvIHNl
YXJjaCBmb3IuCi0gICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gPFRUPnNyY1Rl
eHQ8L1RUPiBhdCB3aGljaAotICAgKiB0byBzdGFydCBtYXRjaGluZwotICAgKiBAcGFyYW0gc3Jj
TGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiA8VFQ+c3JjVGV4dDwvVFQ+IHRvIG1h
dGNoCi0gICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IGludG8gdGhpcyBhdCB3aGljaCB0byBz
dGFydCBtYXRjaGluZwotICAgKiBAcGFyYW0gbGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVy
cyBpbiB0aGlzIHRvIHNlYXJjaAotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50byB0aGlzIG9m
IHRoZSBzdGFydCBvZiA8VFQ+dGV4dDwvVFQ+LAotICAgKiBvciAtMSBpZiBub3QgZm91bmQuCi0g
ICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIGludDMyX3QgaW5kZXhPZihjb25z
dCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0LAotICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0
LAotICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwKLSAgICAgICAgICAgICAgaW50MzJf
dCBzdGFydCwKLSAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgpIGNvbnN0OwotCi0gIC8qKgot
ICAgKiBMb2NhdGUgaW4gdGhpcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVy
cyBpbgotICAgKiA8VFQ+c3JjQ2hhcnM8L1RUPgotICAgKiBzdGFydGluZyBhdCBvZmZzZXQgPFRU
PnN0YXJ0PC9UVD4sIHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KLSAgICogQHBhcmFtIHNyY0No
YXJzIFRoZSB0ZXh0IHRvIHNlYXJjaCBmb3IuCi0gICAqIEBwYXJhbSBzcmNMZW5ndGggdGhlIG51
bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+IHRvIG1hdGNoCi0gICAqIEBw
YXJhbSBzdGFydCB0aGUgb2Zmc2V0IGludG8gdGhpcyBhdCB3aGljaCB0byBzdGFydCBtYXRjaGlu
ZwotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50byB0aGlzIG9mIHRoZSBzdGFydCBvZiA8VFQ+
dGV4dDwvVFQ+LAotICAgKiBvciAtMSBpZiBub3QgZm91bmQuCi0gICAqIEBzdGFibGUgSUNVIDIu
MAotICAgKi8KLSAgaW5saW5lIGludDMyX3QgaW5kZXhPZihjb25zdCBVQ2hhciAqc3JjQ2hhcnMs
Ci0gICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLAotICAgICAgICAgICAgICBpbnQzMl90
IHN0YXJ0KSBjb25zdDsKLQotICAvKioKLSAgICogTG9jYXRlIGluIHRoaXMgdGhlIGZpcnN0IG9j
Y3VycmVuY2UgaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3RhcnQ8L1RUPiwgPFRUPnN0YXJ0ICsg
bGVuZ3RoPC9UVD4pIG9mIHRoZSBjaGFyYWN0ZXJzCi0gICAqIGluIDxUVD5zcmNDaGFyczwvVFQ+
LCB1c2luZyBiaXR3aXNlIGNvbXBhcmlzb24uCi0gICAqIEBwYXJhbSBzcmNDaGFycyBUaGUgdGV4
dCB0byBzZWFyY2ggZm9yLgotICAgKiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hh
cmFjdGVycyBpbiA8VFQ+c3JjQ2hhcnM8L1RUPgotICAgKiBAcGFyYW0gc3RhcnQgVGhlIG9mZnNl
dCBhdCB3aGljaCBzZWFyY2hpbmcgd2lsbCBzdGFydC4KLSAgICogQHBhcmFtIGxlbmd0aCBUaGUg
bnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gc2VhcmNoCi0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBp
bnRvIHRoaXMgb2YgdGhlIHN0YXJ0IG9mIDxUVD5zcmNDaGFyczwvVFQ+LAotICAgKiBvciAtMSBp
ZiBub3QgZm91bmQuCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIGludDMy
X3QgaW5kZXhPZihjb25zdCBVQ2hhciAqc3JjQ2hhcnMsCi0gICAgICAgICAgICAgIGludDMyX3Qg
c3JjTGVuZ3RoLAotICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgICBp
bnQzMl90IGxlbmd0aCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIExvY2F0ZSBpbiB0aGlzIHRoZSBm
aXJzdCBvY2N1cnJlbmNlIGluIHRoZSByYW5nZQotICAgKiBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5z
dGFydCArIGxlbmd0aDwvVFQ+KSBvZiB0aGUgY2hhcmFjdGVycwotICAgKiBpbiA8VFQ+c3JjQ2hh
cnM8L1RUPiBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5zcmNTdGFydDwvVFQ+LCA8VFQ+c3JjU3Rh
cnQgKyBzcmNMZW5ndGg8L1RUPiksCi0gICAqIHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KLSAg
ICogQHBhcmFtIHNyY0NoYXJzIFRoZSB0ZXh0IHRvIHNlYXJjaCBmb3IuCi0gICAqIEBwYXJhbSBz
cmNTdGFydCB0aGUgb2Zmc2V0IGludG8gPFRUPnNyY0NoYXJzPC9UVD4gYXQgd2hpY2gKLSAgICog
dG8gc3RhcnQgbWF0Y2hpbmcKLSAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNo
YXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4gdG8gbWF0Y2gKLSAgICogQHBhcmFtIHN0YXJ0
IHRoZSBvZmZzZXQgaW50byB0aGlzIGF0IHdoaWNoIHRvIHN0YXJ0IG1hdGNoaW5nCi0gICAqIEBw
YXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoaXMgdG8gc2VhcmNoCi0g
ICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgdGhlIHN0YXJ0IG9mIDxUVD50ZXh0
PC9UVD4sCi0gICAqIG9yIC0xIGlmIG5vdCBmb3VuZC4KLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0g
ICAqLwotICBpbnQzMl90IGluZGV4T2YoY29uc3QgVUNoYXIgKnNyY0NoYXJzLAotICAgICAgICAg
ICAgICBpbnQzMl90IHNyY1N0YXJ0LAotICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwK
LSAgICAgICAgICAgICAgaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgaW50MzJfdCBsZW5n
dGgpIGNvbnN0OwotCi0gIC8qKgotICAgKiBMb2NhdGUgaW4gdGhpcyB0aGUgZmlyc3Qgb2NjdXJy
ZW5jZSBvZiB0aGUgQk1QIGNvZGUgcG9pbnQgPGNvZGU+YzwvY29kZT4sCi0gICAqIHVzaW5nIGJp
dHdpc2UgY29tcGFyaXNvbi4KLSAgICogQHBhcmFtIGMgVGhlIGNvZGUgdW5pdCB0byBzZWFyY2gg
Zm9yLgotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50byB0aGlzIG9mIDxUVD5jPC9UVD4sIG9y
IC0xIGlmIG5vdCBmb3VuZC4KLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUg
aW50MzJfdCBpbmRleE9mKFVDaGFyIGMpIGNvbnN0OwotCi0gIC8qKgotICAgKiBMb2NhdGUgaW4g
dGhpcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY29kZSBwb2ludCA8VFQ+YzwvVFQ+LAot
ICAgKiB1c2luZyBiaXR3aXNlIGNvbXBhcmlzb24uCi0gICAqCi0gICAqIEBwYXJhbSBjIFRoZSBj
b2RlIHBvaW50IHRvIHNlYXJjaCBmb3IuCi0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRo
aXMgb2YgPFRUPmM8L1RUPiwgb3IgLTEgaWYgbm90IGZvdW5kLgotICAgKiBAc3RhYmxlIElDVSAy
LjAKLSAgICovCi0gIGlubGluZSBpbnQzMl90IGluZGV4T2YoVUNoYXIzMiBjKSBjb25zdDsKLQot
ICAvKioKLSAgICogTG9jYXRlIGluIHRoaXMgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIEJN
UCBjb2RlIHBvaW50IDxjb2RlPmM8L2NvZGU+LAotICAgKiBzdGFydGluZyBhdCBvZmZzZXQgPFRU
PnN0YXJ0PC9UVD4sIHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KLSAgICogQHBhcmFtIGMgVGhl
IGNvZGUgdW5pdCB0byBzZWFyY2ggZm9yLgotICAgKiBAcGFyYW0gc3RhcnQgVGhlIG9mZnNldCBh
dCB3aGljaCBzZWFyY2hpbmcgd2lsbCBzdGFydC4KLSAgICogQHJldHVybiBUaGUgb2Zmc2V0IGlu
dG8gdGhpcyBvZiA8VFQ+YzwvVFQ+LCBvciAtMSBpZiBub3QgZm91bmQuCi0gICAqIEBzdGFibGUg
SUNVIDIuMAotICAgKi8KLSAgaW5saW5lIGludDMyX3QgaW5kZXhPZihVQ2hhciBjLAotICAgICAg
ICAgICAgICBpbnQzMl90IHN0YXJ0KSBjb25zdDsKLQotICAvKioKLSAgICogTG9jYXRlIGluIHRo
aXMgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNvZGUgcG9pbnQgPFRUPmM8L1RUPgotICAg
KiBzdGFydGluZyBhdCBvZmZzZXQgPFRUPnN0YXJ0PC9UVD4sIHVzaW5nIGJpdHdpc2UgY29tcGFy
aXNvbi4KLSAgICoKLSAgICogQHBhcmFtIGMgVGhlIGNvZGUgcG9pbnQgdG8gc2VhcmNoIGZvci4K
LSAgICogQHBhcmFtIHN0YXJ0IFRoZSBvZmZzZXQgYXQgd2hpY2ggc2VhcmNoaW5nIHdpbGwgc3Rh
cnQuCi0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgPFRUPmM8L1RUPiwgb3Ig
LTEgaWYgbm90IGZvdW5kLgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBp
bnQzMl90IGluZGV4T2YoVUNoYXIzMiBjLAotICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0KSBj
b25zdDsKLQotICAvKioKLSAgICogTG9jYXRlIGluIHRoaXMgdGhlIGZpcnN0IG9jY3VycmVuY2Ug
b2YgdGhlIEJNUCBjb2RlIHBvaW50IDxjb2RlPmM8L2NvZGU+Ci0gICAqIGluIHRoZSByYW5nZSBb
PFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+KSwKLSAgICogdXNpbmcgYml0
d2lzZSBjb21wYXJpc29uLgotICAgKiBAcGFyYW0gYyBUaGUgY29kZSB1bml0IHRvIHNlYXJjaCBm
b3IuCi0gICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IGludG8gdGhpcyBhdCB3aGljaCB0byBz
dGFydCBtYXRjaGluZwotICAgKiBAcGFyYW0gbGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVy
cyBpbiB0aGlzIHRvIHNlYXJjaAotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50byB0aGlzIG9m
IDxUVD5jPC9UVD4sIG9yIC0xIGlmIG5vdCBmb3VuZC4KLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0g
ICAqLwotICBpbmxpbmUgaW50MzJfdCBpbmRleE9mKFVDaGFyIGMsCi0gICAgICAgICAgICAgIGlu
dDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoKSBjb25zdDsKLQotICAv
KioKLSAgICogTG9jYXRlIGluIHRoaXMgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNvZGUg
cG9pbnQgPFRUPmM8L1RUPgotICAgKiBpbiB0aGUgcmFuZ2UgWzxUVD5zdGFydDwvVFQ+LCA8VFQ+
c3RhcnQgKyBsZW5ndGg8L1RUPiksCi0gICAqIHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KLSAg
ICoKLSAgICogQHBhcmFtIGMgVGhlIGNvZGUgcG9pbnQgdG8gc2VhcmNoIGZvci4KLSAgICogQHBh
cmFtIHN0YXJ0IHRoZSBvZmZzZXQgaW50byB0aGlzIGF0IHdoaWNoIHRvIHN0YXJ0IG1hdGNoaW5n
Ci0gICAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoaXMgdG8g
c2VhcmNoCi0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgPFRUPmM8L1RUPiwg
b3IgLTEgaWYgbm90IGZvdW5kLgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGlu
ZSBpbnQzMl90IGluZGV4T2YoVUNoYXIzMiBjLAotICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0
LAotICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIExv
Y2F0ZSBpbiB0aGlzIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIGNoYXJhY3RlcnMgaW4gPFRU
PnRleHQ8L1RUPiwKLSAgICogdXNpbmcgYml0d2lzZSBjb21wYXJpc29uLgotICAgKiBAcGFyYW0g
dGV4dCBUaGUgdGV4dCB0byBzZWFyY2ggZm9yLgotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50
byB0aGlzIG9mIHRoZSBzdGFydCBvZiA8VFQ+dGV4dDwvVFQ+LAotICAgKiBvciAtMSBpZiBub3Qg
Zm91bmQuCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIGludDMyX3QgbGFz
dEluZGV4T2YoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAq
IExvY2F0ZSBpbiB0aGlzIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIGNoYXJhY3RlcnMgaW4g
PFRUPnRleHQ8L1RUPgotICAgKiBzdGFydGluZyBhdCBvZmZzZXQgPFRUPnN0YXJ0PC9UVD4sIHVz
aW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KLSAgICogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gc2Vh
cmNoIGZvci4KLSAgICogQHBhcmFtIHN0YXJ0IFRoZSBvZmZzZXQgYXQgd2hpY2ggc2VhcmNoaW5n
IHdpbGwgc3RhcnQuCi0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgdGhlIHN0
YXJ0IG9mIDxUVD50ZXh0PC9UVD4sCi0gICAqIG9yIC0xIGlmIG5vdCBmb3VuZC4KLSAgICogQHN0
YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgaW50MzJfdCBsYXN0SW5kZXhPZihjb25zdCBV
bmljb2RlU3RyaW5nJiB0ZXh0LAotICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0KSBjb25zdDsK
LQotICAvKioKLSAgICogTG9jYXRlIGluIHRoaXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBpbiB0aGUg
cmFuZ2UKLSAgICogWzxUVD5zdGFydDwvVFQ+LCA8VFQ+c3RhcnQgKyBsZW5ndGg8L1RUPikgb2Yg
dGhlIGNoYXJhY3RlcnMKLSAgICogaW4gPFRUPnRleHQ8L1RUPiwgdXNpbmcgYml0d2lzZSBjb21w
YXJpc29uLgotICAgKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBzZWFyY2ggZm9yLgotICAgKiBA
cGFyYW0gc3RhcnQgVGhlIG9mZnNldCBhdCB3aGljaCBzZWFyY2hpbmcgd2lsbCBzdGFydC4KLSAg
ICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gc2VhcmNoCi0gICAq
IEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgdGhlIHN0YXJ0IG9mIDxUVD50ZXh0PC9U
VD4sCi0gICAqIG9yIC0xIGlmIG5vdCBmb3VuZC4KLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAq
LwotICBpbmxpbmUgaW50MzJfdCBsYXN0SW5kZXhPZihjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0
LAotICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgICBpbnQzMl90IGxl
bmd0aCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIExvY2F0ZSBpbiB0aGlzIHRoZSBsYXN0IG9jY3Vy
cmVuY2UgaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3RhcnQ8L1RUPiwgPFRUPnN0YXJ0ICsgbGVu
Z3RoPC9UVD4pIG9mIHRoZSBjaGFyYWN0ZXJzCi0gICAqIGluIDxUVD5zcmNUZXh0PC9UVD4gaW4g
dGhlIHJhbmdlCi0gICAqIFs8VFQ+c3JjU3RhcnQ8L1RUPiwgPFRUPnNyY1N0YXJ0ICsgc3JjTGVu
Z3RoPC9UVD4pLAotICAgKiB1c2luZyBiaXR3aXNlIGNvbXBhcmlzb24uCi0gICAqIEBwYXJhbSBz
cmNUZXh0IFRoZSB0ZXh0IHRvIHNlYXJjaCBmb3IuCi0gICAqIEBwYXJhbSBzcmNTdGFydCB0aGUg
b2Zmc2V0IGludG8gPFRUPnNyY1RleHQ8L1RUPiBhdCB3aGljaAotICAgKiB0byBzdGFydCBtYXRj
aGluZwotICAgKiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiA8
VFQ+c3JjVGV4dDwvVFQ+IHRvIG1hdGNoCi0gICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IGlu
dG8gdGhpcyBhdCB3aGljaCB0byBzdGFydCBtYXRjaGluZwotICAgKiBAcGFyYW0gbGVuZ3RoIHRo
ZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGlzIHRvIHNlYXJjaAotICAgKiBAcmV0dXJuIFRo
ZSBvZmZzZXQgaW50byB0aGlzIG9mIHRoZSBzdGFydCBvZiA8VFQ+dGV4dDwvVFQ+LAotICAgKiBv
ciAtMSBpZiBub3QgZm91bmQuCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5l
IGludDMyX3QgbGFzdEluZGV4T2YoY29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCwKLSAgICAg
ICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5n
dGgsCi0gICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgIGludDMyX3Qg
bGVuZ3RoKSBjb25zdDsKLQotICAvKioKLSAgICogTG9jYXRlIGluIHRoaXMgdGhlIGxhc3Qgb2Nj
dXJyZW5jZSBvZiB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+c3JjQ2hhcnM8L1RUPgotICAgKiBzdGFy
dGluZyBhdCBvZmZzZXQgPFRUPnN0YXJ0PC9UVD4sIHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4K
LSAgICogQHBhcmFtIHNyY0NoYXJzIFRoZSB0ZXh0IHRvIHNlYXJjaCBmb3IuCi0gICAqIEBwYXJh
bSBzcmNMZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIDxUVD5zcmNDaGFyczwvVFQ+
IHRvIG1hdGNoCi0gICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IGludG8gdGhpcyBhdCB3aGlj
aCB0byBzdGFydCBtYXRjaGluZwotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50byB0aGlzIG9m
IHRoZSBzdGFydCBvZiA8VFQ+dGV4dDwvVFQ+LAotICAgKiBvciAtMSBpZiBub3QgZm91bmQuCi0g
ICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIGludDMyX3QgbGFzdEluZGV4T2Yo
Y29uc3QgVUNoYXIgKnNyY0NoYXJzLAotICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwK
LSAgICAgICAgICAgICAgaW50MzJfdCBzdGFydCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIExvY2F0
ZSBpbiB0aGlzIHRoZSBsYXN0IG9jY3VycmVuY2UgaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3Rh
cnQ8L1RUPiwgPFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4pIG9mIHRoZSBjaGFyYWN0ZXJzCi0gICAq
IGluIDxUVD5zcmNDaGFyczwvVFQ+LCB1c2luZyBiaXR3aXNlIGNvbXBhcmlzb24uCi0gICAqIEBw
YXJhbSBzcmNDaGFycyBUaGUgdGV4dCB0byBzZWFyY2ggZm9yLgotICAgKiBAcGFyYW0gc3JjTGVu
Z3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiA8VFQ+c3JjQ2hhcnM8L1RUPgotICAgKiBA
cGFyYW0gc3RhcnQgVGhlIG9mZnNldCBhdCB3aGljaCBzZWFyY2hpbmcgd2lsbCBzdGFydC4KLSAg
ICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gc2VhcmNoCi0gICAq
IEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgdGhlIHN0YXJ0IG9mIDxUVD5zcmNDaGFy
czwvVFQ+LAotICAgKiBvciAtMSBpZiBub3QgZm91bmQuCi0gICAqIEBzdGFibGUgSUNVIDIuMAot
ICAgKi8KLSAgaW5saW5lIGludDMyX3QgbGFzdEluZGV4T2YoY29uc3QgVUNoYXIgKnNyY0NoYXJz
LAotICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwKLSAgICAgICAgICAgICAgaW50MzJf
dCBzdGFydCwKLSAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgpIGNvbnN0OwotCi0gIC8qKgot
ICAgKiBMb2NhdGUgaW4gdGhpcyB0aGUgbGFzdCBvY2N1cnJlbmNlIGluIHRoZSByYW5nZQotICAg
KiBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+KSBvZiB0aGUgY2hhcmFj
dGVycwotICAgKiBpbiA8VFQ+c3JjQ2hhcnM8L1RUPiBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5z
cmNTdGFydDwvVFQ+LCA8VFQ+c3JjU3RhcnQgKyBzcmNMZW5ndGg8L1RUPiksCi0gICAqIHVzaW5n
IGJpdHdpc2UgY29tcGFyaXNvbi4KLSAgICogQHBhcmFtIHNyY0NoYXJzIFRoZSB0ZXh0IHRvIHNl
YXJjaCBmb3IuCi0gICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gPFRUPnNyY0No
YXJzPC9UVD4gYXQgd2hpY2gKLSAgICogdG8gc3RhcnQgbWF0Y2hpbmcKLSAgICogQHBhcmFtIHNy
Y0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4gdG8g
bWF0Y2gKLSAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgaW50byB0aGlzIGF0IHdoaWNoIHRv
IHN0YXJ0IG1hdGNoaW5nCi0gICAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0
ZXJzIGluIHRoaXMgdG8gc2VhcmNoCi0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMg
b2YgdGhlIHN0YXJ0IG9mIDxUVD50ZXh0PC9UVD4sCi0gICAqIG9yIC0xIGlmIG5vdCBmb3VuZC4K
LSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbnQzMl90IGxhc3RJbmRleE9mKGNvbnN0
IFVDaGFyICpzcmNDaGFycywKLSAgICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAg
ICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgsCi0gICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQs
Ci0gICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoKSBjb25zdDsKLQotICAvKioKLSAgICogTG9j
YXRlIGluIHRoaXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgQk1QIGNvZGUgcG9pbnQgPGNv
ZGU+YzwvY29kZT4sCi0gICAqIHVzaW5nIGJpdHdpc2UgY29tcGFyaXNvbi4KLSAgICogQHBhcmFt
IGMgVGhlIGNvZGUgdW5pdCB0byBzZWFyY2ggZm9yLgotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQg
aW50byB0aGlzIG9mIDxUVD5jPC9UVD4sIG9yIC0xIGlmIG5vdCBmb3VuZC4KLSAgICogQHN0YWJs
ZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgaW50MzJfdCBsYXN0SW5kZXhPZihVQ2hhciBjKSBj
b25zdDsKLQotICAvKioKLSAgICogTG9jYXRlIGluIHRoaXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBv
ZiB0aGUgY29kZSBwb2ludCA8VFQ+YzwvVFQ+LAotICAgKiB1c2luZyBiaXR3aXNlIGNvbXBhcmlz
b24uCi0gICAqCi0gICAqIEBwYXJhbSBjIFRoZSBjb2RlIHBvaW50IHRvIHNlYXJjaCBmb3IuCi0g
ICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgPFRUPmM8L1RUPiwgb3IgLTEgaWYg
bm90IGZvdW5kLgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBpbnQzMl90
IGxhc3RJbmRleE9mKFVDaGFyMzIgYykgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIExvY2F0ZSBpbiB0
aGlzIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIEJNUCBjb2RlIHBvaW50IDxjb2RlPmM8L2Nv
ZGU+Ci0gICAqIHN0YXJ0aW5nIGF0IG9mZnNldCA8VFQ+c3RhcnQ8L1RUPiwgdXNpbmcgYml0d2lz
ZSBjb21wYXJpc29uLgotICAgKiBAcGFyYW0gYyBUaGUgY29kZSB1bml0IHRvIHNlYXJjaCBmb3Iu
Ci0gICAqIEBwYXJhbSBzdGFydCBUaGUgb2Zmc2V0IGF0IHdoaWNoIHNlYXJjaGluZyB3aWxsIHN0
YXJ0LgotICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgaW50byB0aGlzIG9mIDxUVD5jPC9UVD4sIG9y
IC0xIGlmIG5vdCBmb3VuZC4KLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUg
aW50MzJfdCBsYXN0SW5kZXhPZihVQ2hhciBjLAotICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0
KSBjb25zdDsKLQotICAvKioKLSAgICogTG9jYXRlIGluIHRoaXMgdGhlIGxhc3Qgb2NjdXJyZW5j
ZSBvZiB0aGUgY29kZSBwb2ludCA8VFQ+YzwvVFQ+Ci0gICAqIHN0YXJ0aW5nIGF0IG9mZnNldCA8
VFQ+c3RhcnQ8L1RUPiwgdXNpbmcgYml0d2lzZSBjb21wYXJpc29uLgotICAgKgotICAgKiBAcGFy
YW0gYyBUaGUgY29kZSBwb2ludCB0byBzZWFyY2ggZm9yLgotICAgKiBAcGFyYW0gc3RhcnQgVGhl
IG9mZnNldCBhdCB3aGljaCBzZWFyY2hpbmcgd2lsbCBzdGFydC4KLSAgICogQHJldHVybiBUaGUg
b2Zmc2V0IGludG8gdGhpcyBvZiA8VFQ+YzwvVFQ+LCBvciAtMSBpZiBub3QgZm91bmQuCi0gICAq
IEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIGludDMyX3QgbGFzdEluZGV4T2YoVUNo
YXIzMiBjLAotICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0KSBjb25zdDsKLQotICAvKioKLSAg
ICogTG9jYXRlIGluIHRoaXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgQk1QIGNvZGUgcG9p
bnQgPGNvZGU+YzwvY29kZT4KLSAgICogaW4gdGhlIHJhbmdlIFs8VFQ+c3RhcnQ8L1RUPiwgPFRU
PnN0YXJ0ICsgbGVuZ3RoPC9UVD4pLAotICAgKiB1c2luZyBiaXR3aXNlIGNvbXBhcmlzb24uCi0g
ICAqIEBwYXJhbSBjIFRoZSBjb2RlIHVuaXQgdG8gc2VhcmNoIGZvci4KLSAgICogQHBhcmFtIHN0
YXJ0IHRoZSBvZmZzZXQgaW50byB0aGlzIGF0IHdoaWNoIHRvIHN0YXJ0IG1hdGNoaW5nCi0gICAq
IEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoaXMgdG8gc2VhcmNo
Ci0gICAqIEByZXR1cm4gVGhlIG9mZnNldCBpbnRvIHRoaXMgb2YgPFRUPmM8L1RUPiwgb3IgLTEg
aWYgbm90IGZvdW5kLgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBpbnQz
Ml90IGxhc3RJbmRleE9mKFVDaGFyIGMsCi0gICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQsCi0g
ICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoKSBjb25zdDsKLQotICAvKioKLSAgICogTG9jYXRl
IGluIHRoaXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY29kZSBwb2ludCA8VFQ+YzwvVFQ+
Ci0gICAqIGluIHRoZSByYW5nZSBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwv
VFQ+KSwKLSAgICogdXNpbmcgYml0d2lzZSBjb21wYXJpc29uLgotICAgKgotICAgKiBAcGFyYW0g
YyBUaGUgY29kZSBwb2ludCB0byBzZWFyY2ggZm9yLgotICAgKiBAcGFyYW0gc3RhcnQgdGhlIG9m
ZnNldCBpbnRvIHRoaXMgYXQgd2hpY2ggdG8gc3RhcnQgbWF0Y2hpbmcKLSAgICogQHBhcmFtIGxl
bmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhpcyB0byBzZWFyY2gKLSAgICogQHJl
dHVybiBUaGUgb2Zmc2V0IGludG8gdGhpcyBvZiA8VFQ+YzwvVFQ+LCBvciAtMSBpZiBub3QgZm91
bmQuCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIGludDMyX3QgbGFzdElu
ZGV4T2YoVUNoYXIzMiBjLAotICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0LAotICAgICAgICAg
ICAgICBpbnQzMl90IGxlbmd0aCkgY29uc3Q7Ci0KLQotICAvKiBDaGFyYWN0ZXIgYWNjZXNzICov
Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgY29kZSB1bml0IGF0IG9mZnNldCA8dHQ+b2Zmc2V0
PC90dD4uCi0gICAqIElmIHRoZSBvZmZzZXQgaXMgbm90IHZhbGlkICgwLi5sZW5ndGgoKS0xKSB0
aGVuIFUrZmZmZiBpcyByZXR1cm5lZC4KLSAgICogQHBhcmFtIG9mZnNldCBhIHZhbGlkIG9mZnNl
dCBpbnRvIHRoZSB0ZXh0Ci0gICAqIEByZXR1cm4gdGhlIGNvZGUgdW5pdCBhdCBvZmZzZXQgPHR0
Pm9mZnNldDwvdHQ+Ci0gICAqICAgICAgICAgb3IgMHhmZmZmIGlmIHRoZSBvZmZzZXQgaXMgbm90
IHZhbGlkIGZvciB0aGlzIHN0cmluZwotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlu
bGluZSBVQ2hhciBjaGFyQXQoaW50MzJfdCBvZmZzZXQpIGNvbnN0OwotCi0gIC8qKgotICAgKiBS
ZXR1cm4gdGhlIGNvZGUgdW5pdCBhdCBvZmZzZXQgPHR0Pm9mZnNldDwvdHQ+LgotICAgKiBJZiB0
aGUgb2Zmc2V0IGlzIG5vdCB2YWxpZCAoMC4ubGVuZ3RoKCktMSkgdGhlbiBVK2ZmZmYgaXMgcmV0
dXJuZWQuCi0gICAqIEBwYXJhbSBvZmZzZXQgYSB2YWxpZCBvZmZzZXQgaW50byB0aGUgdGV4dAot
ICAgKiBAcmV0dXJuIHRoZSBjb2RlIHVuaXQgYXQgb2Zmc2V0IDx0dD5vZmZzZXQ8L3R0PgotICAg
KiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBVQ2hhciBvcGVyYXRvcltdIChpbnQz
Ml90IG9mZnNldCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgY29kZSBwb2ludCB0
aGF0IGNvbnRhaW5zIHRoZSBjb2RlIHVuaXQKLSAgICogYXQgb2Zmc2V0IDx0dD5vZmZzZXQ8L3R0
Pi4KLSAgICogSWYgdGhlIG9mZnNldCBpcyBub3QgdmFsaWQgKDAuLmxlbmd0aCgpLTEpIHRoZW4g
VStmZmZmIGlzIHJldHVybmVkLgotICAgKiBAcGFyYW0gb2Zmc2V0IGEgdmFsaWQgb2Zmc2V0IGlu
dG8gdGhlIHRleHQKLSAgICogdGhhdCBpbmRpY2F0ZXMgdGhlIHRleHQgb2Zmc2V0IG9mIGFueSBv
ZiB0aGUgY29kZSB1bml0cwotICAgKiB0aGF0IHdpbGwgYmUgYXNzZW1ibGVkIGludG8gYSBjb2Rl
IHBvaW50ICgyMS1iaXQgdmFsdWUpIGFuZCByZXR1cm5lZAotICAgKiBAcmV0dXJuIHRoZSBjb2Rl
IHBvaW50IG9mIHRleHQgYXQgPHR0Pm9mZnNldDwvdHQ+Ci0gICAqICAgICAgICAgb3IgMHhmZmZm
IGlmIHRoZSBvZmZzZXQgaXMgbm90IHZhbGlkIGZvciB0aGlzIHN0cmluZwotICAgKiBAc3RhYmxl
IElDVSAyLjAKLSAgICovCi0gIFVDaGFyMzIgY2hhcjMyQXQoaW50MzJfdCBvZmZzZXQpIGNvbnN0
OwotCi0gIC8qKgotICAgKiBBZGp1c3QgYSByYW5kb20tYWNjZXNzIG9mZnNldCBzbyB0aGF0Ci0g
ICAqIGl0IHBvaW50cyB0byB0aGUgYmVnaW5uaW5nIG9mIGEgVW5pY29kZSBjaGFyYWN0ZXIuCi0g
ICAqIFRoZSBvZmZzZXQgdGhhdCBpcyBwYXNzZWQgaW4gcG9pbnRzIHRvCi0gICAqIGFueSBjb2Rl
IHVuaXQgb2YgYSBjb2RlIHBvaW50LAotICAgKiB3aGlsZSB0aGUgcmV0dXJuZWQgb2Zmc2V0IHdp
bGwgcG9pbnQgdG8gdGhlIGZpcnN0IGNvZGUgdW5pdAotICAgKiBvZiB0aGUgc2FtZSBjb2RlIHBv
aW50LgotICAgKiBJbiBVVEYtMTYsIGlmIHRoZSBpbnB1dCBvZmZzZXQgcG9pbnRzIHRvIGEgc2Vj
b25kIHN1cnJvZ2F0ZQotICAgKiBvZiBhIHN1cnJvZ2F0ZSBwYWlyLCB0aGVuIHRoZSByZXR1cm5l
ZCBvZmZzZXQgd2lsbCBwb2ludAotICAgKiB0byB0aGUgZmlyc3Qgc3Vycm9nYXRlLgotICAgKiBA
cGFyYW0gb2Zmc2V0IGEgdmFsaWQgb2Zmc2V0IGludG8gb25lIGNvZGUgcG9pbnQgb2YgdGhlIHRl
eHQKLSAgICogQHJldHVybiBvZmZzZXQgb2YgdGhlIGZpcnN0IGNvZGUgdW5pdCBvZiB0aGUgc2Ft
ZSBjb2RlIHBvaW50Ci0gICAqIEBzZWUgVTE2X1NFVF9DUF9TVEFSVAotICAgKiBAc3RhYmxlIElD
VSAyLjAKLSAgICovCi0gIGludDMyX3QgZ2V0Q2hhcjMyU3RhcnQoaW50MzJfdCBvZmZzZXQpIGNv
bnN0OwotCi0gIC8qKgotICAgKiBBZGp1c3QgYSByYW5kb20tYWNjZXNzIG9mZnNldCBzbyB0aGF0
Ci0gICAqIGl0IHBvaW50cyBiZWhpbmQgYSBVbmljb2RlIGNoYXJhY3Rlci4KLSAgICogVGhlIG9m
ZnNldCB0aGF0IGlzIHBhc3NlZCBpbiBwb2ludHMgYmVoaW5kCi0gICAqIGFueSBjb2RlIHVuaXQg
b2YgYSBjb2RlIHBvaW50LAotICAgKiB3aGlsZSB0aGUgcmV0dXJuZWQgb2Zmc2V0IHdpbGwgcG9p
bnQgYmVoaW5kIHRoZSBsYXN0IGNvZGUgdW5pdAotICAgKiBvZiB0aGUgc2FtZSBjb2RlIHBvaW50
LgotICAgKiBJbiBVVEYtMTYsIGlmIHRoZSBpbnB1dCBvZmZzZXQgcG9pbnRzIGJlaGluZCB0aGUg
Zmlyc3Qgc3Vycm9nYXRlCi0gICAqIChpLmUuLCB0byB0aGUgc2Vjb25kIHN1cnJvZ2F0ZSkKLSAg
ICogb2YgYSBzdXJyb2dhdGUgcGFpciwgdGhlbiB0aGUgcmV0dXJuZWQgb2Zmc2V0IHdpbGwgcG9p
bnQKLSAgICogYmVoaW5kIHRoZSBzZWNvbmQgc3Vycm9nYXRlIChpLmUuLCB0byB0aGUgZmlyc3Qg
c3Vycm9nYXRlKS4KLSAgICogQHBhcmFtIG9mZnNldCBhIHZhbGlkIG9mZnNldCBhZnRlciBhbnkg
Y29kZSB1bml0IG9mIGEgY29kZSBwb2ludCBvZiB0aGUgdGV4dAotICAgKiBAcmV0dXJuIG9mZnNl
dCBvZiB0aGUgZmlyc3QgY29kZSB1bml0IGFmdGVyIHRoZSBzYW1lIGNvZGUgcG9pbnQKLSAgICog
QHNlZSBVMTZfU0VUX0NQX0xJTUlUCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW50
MzJfdCBnZXRDaGFyMzJMaW1pdChpbnQzMl90IG9mZnNldCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAq
IE1vdmUgdGhlIGNvZGUgdW5pdCBpbmRleCBhbG9uZyB0aGUgc3RyaW5nIGJ5IGRlbHRhIGNvZGUg
cG9pbnRzLgotICAgKiBJbnRlcnByZXQgdGhlIGlucHV0IGluZGV4IGFzIGEgY29kZSB1bml0LWJh
c2VkIG9mZnNldCBpbnRvIHRoZSBzdHJpbmcsCi0gICAqIG1vdmUgdGhlIGluZGV4IGZvcndhcmQg
b3IgYmFja3dhcmQgYnkgZGVsdGEgY29kZSBwb2ludHMsIGFuZAotICAgKiByZXR1cm4gdGhlIHJl
c3VsdGluZyBpbmRleC4KLSAgICogVGhlIGlucHV0IGluZGV4IHNob3VsZCBwb2ludCB0byB0aGUg
Zmlyc3QgY29kZSB1bml0IG9mIGEgY29kZSBwb2ludCwKLSAgICogaWYgdGhlcmUgaXMgbW9yZSB0
aGFuIG9uZS4KLSAgICoKLSAgICogQm90aCBpbnB1dCBhbmQgb3V0cHV0IGluZGV4ZXMgYXJlIGNv
ZGUgdW5pdC1iYXNlZCBhcyBmb3IgYWxsCi0gICAqIHN0cmluZyBpbmRleGVzL29mZnNldHMgaW4g
SUNVIChhbmQgb3RoZXIgbGlicmFyaWVzLCBsaWtlIE1CQ1MgY2hhciopLgotICAgKiBJZiBkZWx0
YTwwIHRoZW4gdGhlIGluZGV4IGlzIG1vdmVkIGJhY2t3YXJkICh0b3dhcmQgdGhlIHN0YXJ0IG9m
IHRoZSBzdHJpbmcpLgotICAgKiBJZiBkZWx0YT4wIHRoZW4gdGhlIGluZGV4IGlzIG1vdmVkIGZv
cndhcmQgKHRvd2FyZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcpLgotICAgKgotICAgKiBUaGlzIGJl
aGF2ZXMgbGlrZSBDaGFyYWN0ZXJJdGVyYXRvcjo6bW92ZTMyKGRlbHRhLCBrQ3VycmVudCkuCi0g
ICAqCi0gICAqIEJlaGF2aW9yIGZvciBvdXQtb2YtYm91bmRzIGluZGV4ZXM6Ci0gICAqIDxjb2Rl
Pm1vdmVJbmRleDMyPC9jb2RlPiBwaW5zIHRoZSBpbnB1dCBpbmRleCB0byAwLi5sZW5ndGgoKSwg
aS5lLiwKLSAgICogaWYgdGhlIGlucHV0IGluZGV4PDAgdGhlbiBpdCBpcyBwaW5uZWQgdG8gMDsK
LSAgICogaWYgaXQgaXMgaW5kZXg+bGVuZ3RoKCkgdGhlbiBpdCBpcyBwaW5uZWQgdG8gbGVuZ3Ro
KCkuCi0gICAqIEFmdGVyd2FyZHMsIHRoZSBpbmRleCBpcyBtb3ZlZCBieSA8Y29kZT5kZWx0YTwv
Y29kZT4gY29kZSBwb2ludHMKLSAgICogZm9yd2FyZCBvciBiYWNrd2FyZCwKLSAgICogYnV0IG5v
IGZ1cnRoZXIgYmFja3dhcmQgdGhhbiB0byAwIGFuZCBubyBmdXJ0aGVyIGZvcndhcmQgdGhhbiB0
byBsZW5ndGgoKS4KLSAgICogVGhlIHJlc3VsdGluZyBpbmRleCByZXR1cm4gdmFsdWUgd2lsbCBi
ZSBpbiBiZXR3ZWVuIDAgYW5kIGxlbmd0aCgpLCBpbmNsdXNpdmVseS4KLSAgICoKLSAgICogRXhh
bXBsZXM6Ci0gICAqIDxwcmU+Ci0gICAqIC8vIHMgaGFzIGNvZGUgcG9pbnRzICdhJyBVKzEwMDAw
ICdiJyBVKzEwZmZmZiBVKzIwMjkKLSAgICogVW5pY29kZVN0cmluZyBzPVVOSUNPREVfU1RSSU5H
KCJhXFxVMDAwMTAwMDBiXFxVMDAxMGZmZmZcXHUyMDI5IiwgMzEpLnVuZXNjYXBlKCk7Ci0gICAq
Ci0gICAqIC8vIGluaXRpYWwgaW5kZXg6IHBvc2l0aW9uIG9mIFUrMTAwMDAKLSAgICogaW50MzJf
dCBpbmRleD0xOwotICAgKgotICAgKiAvLyB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIHdpbGwgYWxs
IHJlc3VsdCBpbiBpbmRleD09NCwgcG9zaXRpb24gb2YgVSsxMGZmZmYKLSAgICoKLSAgICogLy8g
c2tpcCAyIGNvZGUgcG9pbnRzIGZyb20gc29tZSBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nCi0gICAq
IGluZGV4PXMubW92ZUluZGV4MzIoaW5kZXgsIDIpOyAvLyBza2lwcyBVKzEwMDAwIGFuZCAnYicK
LSAgICoKLSAgICogLy8gZ28gdG8gdGhlIDNyZCBjb2RlIHBvaW50IGZyb20gdGhlIHN0YXJ0IG9m
IHMgKDAtYmFzZWQpCi0gICAqIGluZGV4PXMubW92ZUluZGV4MzIoMCwgMyk7IC8vIHNraXBzICdh
JywgVSsxMDAwMCwgYW5kICdiJwotICAgKgotICAgKiAvLyBnbyB0byB0aGUgbmV4dC10by1sYXN0
IGNvZGUgcG9pbnQgb2YgcwotICAgKiBpbmRleD1zLm1vdmVJbmRleDMyKHMubGVuZ3RoKCksIC0y
KTsgLy8gYmFja3dhcmQtc2tpcHMgVSsyMDI5IGFuZCBVKzEwZmZmZgotICAgKiA8L3ByZT4KLSAg
ICoKLSAgICogQHBhcmFtIGluZGV4IGlucHV0IGNvZGUgdW5pdCBpbmRleAotICAgKiBAcGFyYW0g
ZGVsdGEgKHNpZ25lZCkgY29kZSBwb2ludCBjb3VudCB0byBtb3ZlIHRoZSBpbmRleCBmb3J3YXJk
IG9yIGJhY2t3YXJkCi0gICAqICAgICAgICBpbiB0aGUgc3RyaW5nCi0gICAqIEByZXR1cm4gdGhl
IHJlc3VsdGluZyBjb2RlIHVuaXQgaW5kZXgKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwot
ICBpbnQzMl90IG1vdmVJbmRleDMyKGludDMyX3QgaW5kZXgsIGludDMyX3QgZGVsdGEpIGNvbnN0
OwotCi0gIC8qIFN1YnN0cmluZyBleHRyYWN0aW9uICovCi0KLSAgLyoqCi0gICAqIENvcHkgdGhl
IGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlCi0gICAqIFs8dHQ+c3RhcnQ8L3R0PiwgPHR0PnN0YXJ0
ICsgbGVuZ3RoPC90dD4pIGludG8gdGhlIGFycmF5IDx0dD5kc3Q8L3R0PiwKLSAgICogYmVnaW5u
aW5nIGF0IDx0dD5kc3RTdGFydDwvdHQ+LgotICAgKiBJZiB0aGUgc3RyaW5nIGFsaWFzZXMgdG8g
PGNvZGU+ZHN0PC9jb2RlPiBpdHNlbGYgYXMgYW4gZXh0ZXJuYWwgYnVmZmVyLAotICAgKiB0aGVu
IGV4dHJhY3QoKSB3aWxsIG5vdCBjb3B5IHRoZSBjb250ZW50cy4KLSAgICoKLSAgICogQHBhcmFt
IHN0YXJ0IG9mZnNldCBvZiBmaXJzdCBjaGFyYWN0ZXIgd2hpY2ggd2lsbCBiZSBjb3BpZWQgaW50
byB0aGUgYXJyYXkKLSAgICogQHBhcmFtIGxlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMg
dG8gZXh0cmFjdAotICAgKiBAcGFyYW0gZHN0IGFycmF5IGluIHdoaWNoIHRvIGNvcHkgY2hhcmFj
dGVycy4gIFRoZSBsZW5ndGggb2YgPHR0PmRzdDwvdHQ+Ci0gICAqIG11c3QgYmUgYXQgbGVhc3Qg
KDx0dD5kc3RTdGFydCArIGxlbmd0aDwvdHQ+KS4KLSAgICogQHBhcmFtIGRzdFN0YXJ0IHRoZSBv
ZmZzZXQgaW4gPFRUPmRzdDwvVFQ+IHdoZXJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIKLSAgICogd2ls
bCBiZSBleHRyYWN0ZWQKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgdm9p
ZCBleHRyYWN0KGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgIGludDMyX3QgbGVuZ3RoLAotICAg
ICAgICAgICBVQ2hhciAqZHN0LAotICAgICAgICAgICBpbnQzMl90IGRzdFN0YXJ0ID0gMCkgY29u
c3Q7Ci0KLSAgLyoqCi0gICAqIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcgaW50byBk
ZXN0LgotICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdAotICAgKiBjaGVj
a3MgaWYgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGluIGRlc3QsCi0gICAqIGV4dHJhY3RzIHRoZSBl
bnRpcmUgc3RyaW5nIGlmIHBvc3NpYmxlLAotICAgKiBhbmQgTlVMLXRlcm1pbmF0ZXMgZGVzdCBp
ZiBwb3NzaWJsZS4KLSAgICoKLSAgICogSWYgdGhlIHN0cmluZyBmaXRzIGludG8gZGVzdCBidXQg
Y2Fubm90IGJlIE5VTC10ZXJtaW5hdGVkCi0gICAqIChsZW5ndGgoKT09ZGVzdENhcGFjaXR5KSB0
aGVuIHRoZSBlcnJvciBjb2RlIGlzIHNldCB0byBVX1NUUklOR19OT1RfVEVSTUlOQVRFRF9XQVJO
SU5HLgotICAgKiBJZiB0aGUgc3RyaW5nIGl0c2VsZiBkb2VzIG5vdCBmaXQgaW50byBkZXN0Ci0g
ICAqIChsZW5ndGgoKT5kZXN0Q2FwYWNpdHkpIHRoZW4gdGhlIGVycm9yIGNvZGUgaXMgc2V0IHRv
IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SLgotICAgKgotICAgKiBJZiB0aGUgc3RyaW5nIGFsaWFz
ZXMgdG8gPGNvZGU+ZGVzdDwvY29kZT4gaXRzZWxmIGFzIGFuIGV4dGVybmFsIGJ1ZmZlciwKLSAg
ICogdGhlbiBleHRyYWN0KCkgd2lsbCBub3QgY29weSB0aGUgY29udGVudHMuCi0gICAqCi0gICAq
IEBwYXJhbSBkZXN0IERlc3RpbmF0aW9uIHN0cmluZyBidWZmZXIuCi0gICAqIEBwYXJhbSBkZXN0
Q2FwYWNpdHkgTnVtYmVyIG9mIFVDaGFycyBhdmFpbGFibGUgYXQgZGVzdC4KLSAgICogQHBhcmFt
IGVycm9yQ29kZSBJQ1UgZXJyb3IgY29kZS4KLSAgICogQHJldHVybiBsZW5ndGgoKQotICAgKiBA
c3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGludDMyX3QKLSAgZXh0cmFjdChVQ2hhciAqZGVzdCwg
aW50MzJfdCBkZXN0Q2FwYWNpdHksCi0gICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSBj
b25zdDsKLQotICAvKioKLSAgICogQ29weSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UKLSAg
ICogWzx0dD5zdGFydDwvdHQ+LCA8dHQ+c3RhcnQgKyBsZW5ndGg8L3R0PikgaW50byB0aGUgIFVu
aWNvZGVTdHJpbmcKLSAgICogPHR0PnRhcmdldDwvdHQ+LgotICAgKiBAcGFyYW0gc3RhcnQgb2Zm
c2V0IG9mIGZpcnN0IGNoYXJhY3RlciB3aGljaCB3aWxsIGJlIGNvcGllZAotICAgKiBAcGFyYW0g
bGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBleHRyYWN0Ci0gICAqIEBwYXJhbSB0
YXJnZXQgVW5pY29kZVN0cmluZyBpbnRvIHdoaWNoIHRvIGNvcHkgY2hhcmFjdGVycy4KLSAgICog
QHJldHVybiBBIHJlZmVyZW5jZSB0byA8VFQ+dGFyZ2V0PC9UVD4KLSAgICogQHN0YWJsZSBJQ1Ug
Mi4wCi0gICAqLwotICBpbmxpbmUgdm9pZCBleHRyYWN0KGludDMyX3Qgc3RhcnQsCi0gICAgICAg
ICAgIGludDMyX3QgbGVuZ3RoLAotICAgICAgICAgICBVbmljb2RlU3RyaW5nJiB0YXJnZXQpIGNv
bnN0OwotCi0gIC8qKgotICAgKiBDb3B5IHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbPHR0
PnN0YXJ0PC90dD4sIDx0dD5saW1pdDwvdHQ+KQotICAgKiBpbnRvIHRoZSBhcnJheSA8dHQ+ZHN0
PC90dD4sIGJlZ2lubmluZyBhdCA8dHQ+ZHN0U3RhcnQ8L3R0Pi4KLSAgICogQHBhcmFtIHN0YXJ0
IG9mZnNldCBvZiBmaXJzdCBjaGFyYWN0ZXIgd2hpY2ggd2lsbCBiZSBjb3BpZWQgaW50byB0aGUg
YXJyYXkKLSAgICogQHBhcmFtIGxpbWl0IG9mZnNldCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhl
IGxhc3QgY2hhcmFjdGVyIHRvIGJlIGNvcGllZAotICAgKiBAcGFyYW0gZHN0IGFycmF5IGluIHdo
aWNoIHRvIGNvcHkgY2hhcmFjdGVycy4gIFRoZSBsZW5ndGggb2YgPHR0PmRzdDwvdHQ+Ci0gICAq
IG11c3QgYmUgYXQgbGVhc3QgKDx0dD5kc3RTdGFydCArIChsaW1pdCAtIHN0YXJ0KTwvdHQ+KS4K
LSAgICogQHBhcmFtIGRzdFN0YXJ0IHRoZSBvZmZzZXQgaW4gPFRUPmRzdDwvVFQ+IHdoZXJlIHRo
ZSBmaXJzdCBjaGFyYWN0ZXIKLSAgICogd2lsbCBiZSBleHRyYWN0ZWQKLSAgICogQHN0YWJsZSBJ
Q1UgMi4wCi0gICAqLwotICBpbmxpbmUgdm9pZCBleHRyYWN0QmV0d2VlbihpbnQzMl90IHN0YXJ0
LAotICAgICAgICAgICAgICBpbnQzMl90IGxpbWl0LAotICAgICAgICAgICAgICBVQ2hhciAqZHN0
LAotICAgICAgICAgICAgICBpbnQzMl90IGRzdFN0YXJ0ID0gMCkgY29uc3Q7Ci0KLSAgLyoqCi0g
ICAqIENvcHkgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFs8dHQ+c3RhcnQ8L3R0PiwgPHR0
PmxpbWl0PC90dD4pCi0gICAqIGludG8gdGhlIFVuaWNvZGVTdHJpbmcgPHR0PnRhcmdldDwvdHQ+
LiAgUmVwbGFjZWFibGUgQVBJLgotICAgKiBAcGFyYW0gc3RhcnQgb2Zmc2V0IG9mIGZpcnN0IGNo
YXJhY3RlciB3aGljaCB3aWxsIGJlIGNvcGllZAotICAgKiBAcGFyYW0gbGltaXQgb2Zmc2V0IGlt
bWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgbGFzdCBjaGFyYWN0ZXIgdG8gYmUgY29waWVkCi0gICAq
IEBwYXJhbSB0YXJnZXQgVW5pY29kZVN0cmluZyBpbnRvIHdoaWNoIHRvIGNvcHkgY2hhcmFjdGVy
cy4KLSAgICogQHJldHVybiBBIHJlZmVyZW5jZSB0byA8VFQ+dGFyZ2V0PC9UVD4KLSAgICogQHN0
YWJsZSBJQ1UgMi4wCi0gICAqLwotICB2aXJ0dWFsIHZvaWQgZXh0cmFjdEJldHdlZW4oaW50MzJf
dCBzdGFydCwKLSAgICAgICAgICAgICAgaW50MzJfdCBsaW1pdCwKLSAgICAgICAgICAgICAgVW5p
Y29kZVN0cmluZyYgdGFyZ2V0KSBjb25zdDsKLQotICAvKioKLSAgICogQ29weSB0aGUgY2hhcmFj
dGVycyBpbiB0aGUgcmFuZ2UgCi0gICAqIFs8dHQ+c3RhcnQ8L1RUPiwgPHR0PnN0YXJ0ICsgbGVu
Z3RoPC9UVD4pIGludG8gYW4gYXJyYXkgb2YgY2hhcmFjdGVycy4KLSAgICogQWxsIGNoYXJhY3Rl
cnMgbXVzdCBiZSBpbnZhcmlhbnQgKHNlZSB1dHlwZXMuaCkuCi0gICAqIFVzZSBVU19JTlYgYXMg
dGhlIGxhc3QsIHNpZ25hdHVyZS1kaXN0aW5ndWlzaGluZyBwYXJhbWV0ZXIuCi0gICAqCi0gICAq
IFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgd3JpdGUgYW55IG1vcmUgdGhhbiA8Y29kZT50YXJnZXRM
ZW5ndGg8L2NvZGU+Ci0gICAqIGNoYXJhY3RlcnMgYnV0IHJldHVybnMgdGhlIGxlbmd0aCBvZiB0
aGUgZW50aXJlIG91dHB1dCBzdHJpbmcKLSAgICogc28gdGhhdCBvbmUgY2FuIGFsbG9jYXRlIGEg
bGFyZ2VyIGJ1ZmZlciBhbmQgY2FsbCB0aGUgZnVuY3Rpb24gYWdhaW4KLSAgICogaWYgbmVjZXNz
YXJ5LgotICAgKiBUaGUgb3V0cHV0IHN0cmluZyBpcyBOVUwtdGVybWluYXRlZCBpZiBwb3NzaWJs
ZS4KLSAgICoKLSAgICogQHBhcmFtIHN0YXJ0IG9mZnNldCBvZiBmaXJzdCBjaGFyYWN0ZXIgd2hp
Y2ggd2lsbCBiZSBjb3BpZWQKLSAgICogQHBhcmFtIHN0YXJ0TGVuZ3RoIHRoZSBudW1iZXIgb2Yg
Y2hhcmFjdGVycyB0byBleHRyYWN0Ci0gICAqIEBwYXJhbSB0YXJnZXQgdGhlIHRhcmdldCBidWZm
ZXIgZm9yIGV4dHJhY3Rpb24sIGNhbiBiZSBOVUxMCi0gICAqICAgICAgICAgICAgICAgaWYgdGFy
Z2V0TGVuZ3RoIGlzIDAKLSAgICogQHBhcmFtIHRhcmdldENhcGFjaXR5IHRoZSBsZW5ndGggb2Yg
dGhlIHRhcmdldCBidWZmZXIKLSAgICogQHBhcmFtIGludiBTaWduYXR1cmUtZGlzdGluZ3Vpc2hp
bmcgcGFyYW1hdGVyLCB1c2UgVVNfSU5WLgotICAgKiBAcmV0dXJuIHRoZSBvdXRwdXQgc3RyaW5n
IGxlbmd0aCwgbm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMCi0gICAqIEBzdGFibGUg
SUNVIDMuMgotICAgKi8KLSAgaW50MzJfdCBleHRyYWN0KGludDMyX3Qgc3RhcnQsCi0gICAgICAg
ICAgIGludDMyX3Qgc3RhcnRMZW5ndGgsCi0gICAgICAgICAgIGNoYXIgKnRhcmdldCwKLSAgICAg
ICAgICAgaW50MzJfdCB0YXJnZXRDYXBhY2l0eSwKLSAgICAgICAgICAgZW51bSBFSW52YXJpYW50
IGludikgY29uc3Q7Ci0KLSNpZiBVX0NIQVJTRVRfSVNfVVRGOCB8fCAhVUNPTkZJR19OT19DT05W
RVJTSU9OCi0KLSAgLyoqCi0gICAqIENvcHkgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlCi0g
ICAqIFs8dHQ+c3RhcnQ8L1RUPiwgPHR0PnN0YXJ0ICsgbGVuZ3RoPC9UVD4pIGludG8gYW4gYXJy
YXkgb2YgY2hhcmFjdGVycwotICAgKiBpbiB0aGUgcGxhdGZvcm0ncyBkZWZhdWx0IGNvZGVwYWdl
LgotICAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHdyaXRlIGFueSBtb3JlIHRoYW4gPGNvZGU+
dGFyZ2V0TGVuZ3RoPC9jb2RlPgotICAgKiBjaGFyYWN0ZXJzIGJ1dCByZXR1cm5zIHRoZSBsZW5n
dGggb2YgdGhlIGVudGlyZSBvdXRwdXQgc3RyaW5nCi0gICAqIHNvIHRoYXQgb25lIGNhbiBhbGxv
Y2F0ZSBhIGxhcmdlciBidWZmZXIgYW5kIGNhbGwgdGhlIGZ1bmN0aW9uIGFnYWluCi0gICAqIGlm
IG5lY2Vzc2FyeS4KLSAgICogVGhlIG91dHB1dCBzdHJpbmcgaXMgTlVMLXRlcm1pbmF0ZWQgaWYg
cG9zc2libGUuCi0gICAqCi0gICAqIEBwYXJhbSBzdGFydCBvZmZzZXQgb2YgZmlyc3QgY2hhcmFj
dGVyIHdoaWNoIHdpbGwgYmUgY29waWVkCi0gICAqIEBwYXJhbSBzdGFydExlbmd0aCB0aGUgbnVt
YmVyIG9mIGNoYXJhY3RlcnMgdG8gZXh0cmFjdAotICAgKiBAcGFyYW0gdGFyZ2V0IHRoZSB0YXJn
ZXQgYnVmZmVyIGZvciBleHRyYWN0aW9uCi0gICAqIEBwYXJhbSB0YXJnZXRMZW5ndGggdGhlIGxl
bmd0aCBvZiB0aGUgdGFyZ2V0IGJ1ZmZlcgotICAgKiBJZiA8VFQ+dGFyZ2V0PC9UVD4gaXMgTlVM
TCwgdGhlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVpcmVkIGZvcgotICAgKiA8VFQ+dGFyZ2V0
PC9UVD4gaXMgcmV0dXJuZWQuCi0gICAqIEByZXR1cm4gdGhlIG91dHB1dCBzdHJpbmcgbGVuZ3Ro
LCBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUwKLSAgICogQHN0YWJsZSBJQ1UgMi4w
Ci0gICAqLwotICBpbnQzMl90IGV4dHJhY3QoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgaW50
MzJfdCBzdGFydExlbmd0aCwKLSAgICAgICAgICAgY2hhciAqdGFyZ2V0LAotICAgICAgICAgICB1
aW50MzJfdCB0YXJnZXRMZW5ndGgpIGNvbnN0OwotCi0jZW5kaWYKLQotI2lmICFVQ09ORklHX05P
X0NPTlZFUlNJT04KLQotICAvKioKLSAgICogQ29weSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFu
Z2UKLSAgICogWzx0dD5zdGFydDwvVFQ+LCA8dHQ+c3RhcnQgKyBsZW5ndGg8L1RUPikgaW50byBh
biBhcnJheSBvZiBjaGFyYWN0ZXJzCi0gICAqIGluIGEgc3BlY2lmaWVkIGNvZGVwYWdlLgotICAg
KiBUaGUgb3V0cHV0IHN0cmluZyBpcyBOVUwtdGVybWluYXRlZC4KLSAgICoKLSAgICogUmVjb21t
ZW5kYXRpb246IEZvciBpbnZhcmlhbnQtY2hhcmFjdGVyIHN0cmluZ3MgdXNlCi0gICAqIGV4dHJh
Y3QoaW50MzJfdCBzdGFydCwgaW50MzJfdCBsZW5ndGgsIGNoYXIgKnRhcmdldCwgaW50MzJfdCB0
YXJnZXRDYXBhY2l0eSwgZW51bSBFSW52YXJpYW50IGludikgY29uc3QKLSAgICogYmVjYXVzZSBp
dCBhdm9pZHMgb2JqZWN0IGNvZGUgZGVwZW5kZW5jaWVzIG9mIFVuaWNvZGVTdHJpbmcgb24KLSAg
ICogdGhlIGNvbnZlcnNpb24gY29kZS4KLSAgICoKLSAgICogQHBhcmFtIHN0YXJ0IG9mZnNldCBv
ZiBmaXJzdCBjaGFyYWN0ZXIgd2hpY2ggd2lsbCBiZSBjb3BpZWQKLSAgICogQHBhcmFtIHN0YXJ0
TGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBleHRyYWN0Ci0gICAqIEBwYXJhbSB0
YXJnZXQgdGhlIHRhcmdldCBidWZmZXIgZm9yIGV4dHJhY3Rpb24KLSAgICogQHBhcmFtIGNvZGVw
YWdlIHRoZSBkZXNpcmVkIGNvZGVwYWdlIGZvciB0aGUgY2hhcmFjdGVycy4gIDAgaGFzCi0gICAq
IHRoZSBzcGVjaWFsIG1lYW5pbmcgb2YgdGhlIGRlZmF1bHQgY29kZXBhZ2UKLSAgICogSWYgPGNv
ZGU+Y29kZXBhZ2U8L2NvZGU+IGlzIGFuIGVtcHR5IHN0cmluZyAoPGNvZGU+IiI8L2NvZGU+KSwK
LSAgICogdGhlbiBhIHNpbXBsZSBjb252ZXJzaW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgY29kZXBh
Z2UtaW52YXJpYW50Ci0gICAqIHN1YnNldCAoImludmFyaWFudCBjaGFyYWN0ZXJzIikgb2YgdGhl
IHBsYXRmb3JtIGVuY29kaW5nLiBTZWUgdXR5cGVzLmguCi0gICAqIElmIDxUVD50YXJnZXQ8L1RU
PiBpcyBOVUxMLCB0aGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgZm9yCi0gICAqIDxU
VD50YXJnZXQ8L1RUPiBpcyByZXR1cm5lZC4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB0YXJnZXQg
aXMgYmlnIGVub3VnaAotICAgKiB0byBmaXQgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzLgotICAgKiBA
cmV0dXJuIHRoZSBvdXRwdXQgc3RyaW5nIGxlbmd0aCwgbm90IGluY2x1ZGluZyB0aGUgdGVybWlu
YXRpbmcgTlVMCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIGludDMyX3Qg
ZXh0cmFjdChpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0TGVu
Z3RoLAotICAgICAgICAgICAgICAgICBjaGFyICp0YXJnZXQsCi0gICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKmNvZGVwYWdlID0gMCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIENvcHkgdGhlIGNo
YXJhY3RlcnMgaW4gdGhlIHJhbmdlCi0gICAqIFs8dHQ+c3RhcnQ8L1RUPiwgPHR0PnN0YXJ0ICsg
bGVuZ3RoPC9UVD4pIGludG8gYW4gYXJyYXkgb2YgY2hhcmFjdGVycwotICAgKiBpbiBhIHNwZWNp
ZmllZCBjb2RlcGFnZS4KLSAgICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3cml0ZSBhbnkgbW9y
ZSB0aGFuIDxjb2RlPnRhcmdldExlbmd0aDwvY29kZT4KLSAgICogY2hhcmFjdGVycyBidXQgcmV0
dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBlbnRpcmUgb3V0cHV0IHN0cmluZwotICAgKiBzbyB0aGF0
IG9uZSBjYW4gYWxsb2NhdGUgYSBsYXJnZXIgYnVmZmVyIGFuZCBjYWxsIHRoZSBmdW5jdGlvbiBh
Z2FpbgotICAgKiBpZiBuZWNlc3NhcnkuCi0gICAqIFRoZSBvdXRwdXQgc3RyaW5nIGlzIE5VTC10
ZXJtaW5hdGVkIGlmIHBvc3NpYmxlLgotICAgKgotICAgKiBSZWNvbW1lbmRhdGlvbjogRm9yIGlu
dmFyaWFudC1jaGFyYWN0ZXIgc3RyaW5ncyB1c2UKLSAgICogZXh0cmFjdChpbnQzMl90IHN0YXJ0
LCBpbnQzMl90IGxlbmd0aCwgY2hhciAqdGFyZ2V0LCBpbnQzMl90IHRhcmdldENhcGFjaXR5LCBl
bnVtIEVJbnZhcmlhbnQgaW52KSBjb25zdAotICAgKiBiZWNhdXNlIGl0IGF2b2lkcyBvYmplY3Qg
Y29kZSBkZXBlbmRlbmNpZXMgb2YgVW5pY29kZVN0cmluZyBvbgotICAgKiB0aGUgY29udmVyc2lv
biBjb2RlLgotICAgKgotICAgKiBAcGFyYW0gc3RhcnQgb2Zmc2V0IG9mIGZpcnN0IGNoYXJhY3Rl
ciB3aGljaCB3aWxsIGJlIGNvcGllZAotICAgKiBAcGFyYW0gc3RhcnRMZW5ndGggdGhlIG51bWJl
ciBvZiBjaGFyYWN0ZXJzIHRvIGV4dHJhY3QKLSAgICogQHBhcmFtIHRhcmdldCB0aGUgdGFyZ2V0
IGJ1ZmZlciBmb3IgZXh0cmFjdGlvbgotICAgKiBAcGFyYW0gdGFyZ2V0TGVuZ3RoIHRoZSBsZW5n
dGggb2YgdGhlIHRhcmdldCBidWZmZXIKLSAgICogQHBhcmFtIGNvZGVwYWdlIHRoZSBkZXNpcmVk
IGNvZGVwYWdlIGZvciB0aGUgY2hhcmFjdGVycy4gIDAgaGFzCi0gICAqIHRoZSBzcGVjaWFsIG1l
YW5pbmcgb2YgdGhlIGRlZmF1bHQgY29kZXBhZ2UKLSAgICogSWYgPGNvZGU+Y29kZXBhZ2U8L2Nv
ZGU+IGlzIGFuIGVtcHR5IHN0cmluZyAoPGNvZGU+IiI8L2NvZGU+KSwKLSAgICogdGhlbiBhIHNp
bXBsZSBjb252ZXJzaW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgY29kZXBhZ2UtaW52YXJpYW50Ci0g
ICAqIHN1YnNldCAoImludmFyaWFudCBjaGFyYWN0ZXJzIikgb2YgdGhlIHBsYXRmb3JtIGVuY29k
aW5nLiBTZWUgdXR5cGVzLmguCi0gICAqIElmIDxUVD50YXJnZXQ8L1RUPiBpcyBOVUxMLCB0aGVu
IHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgZm9yCi0gICAqIDxUVD50YXJnZXQ8L1RUPiBp
cyByZXR1cm5lZC4KLSAgICogQHJldHVybiB0aGUgb3V0cHV0IHN0cmluZyBsZW5ndGgsIG5vdCBp
bmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTAotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICov
Ci0gIGludDMyX3QgZXh0cmFjdChpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICBpbnQzMl90IHN0
YXJ0TGVuZ3RoLAotICAgICAgICAgICBjaGFyICp0YXJnZXQsCi0gICAgICAgICAgIHVpbnQzMl90
IHRhcmdldExlbmd0aCwKLSAgICAgICAgICAgY29uc3QgY2hhciAqY29kZXBhZ2UpIGNvbnN0Owot
Ci0gIC8qKgotICAgKiBDb252ZXJ0IHRoZSBVbmljb2RlU3RyaW5nIGludG8gYSBjb2RlcGFnZSBz
dHJpbmcgdXNpbmcgYW4gZXhpc3RpbmcgVUNvbnZlcnRlci4KLSAgICogVGhlIG91dHB1dCBzdHJp
bmcgaXMgTlVMLXRlcm1pbmF0ZWQgaWYgcG9zc2libGUuCi0gICAqCi0gICAqIFRoaXMgZnVuY3Rp
b24gYXZvaWRzIHRoZSBvdmVyaGVhZCBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIGEgY29udmVydGVy
IGlmCi0gICAqIG11bHRpcGxlIHN0cmluZ3MgYXJlIGV4dHJhY3RlZC4KLSAgICoKLSAgICogQHBh
cmFtIGRlc3QgZGVzdGluYXRpb24gc3RyaW5nIGJ1ZmZlciwgY2FuIGJlIE5VTEwgaWYgZGVzdENh
cGFjaXR5PT0wCi0gICAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgdGhlIG51bWJlciBvZiBjaGFycyBh
dmFpbGFibGUgYXQgZGVzdAotICAgKiBAcGFyYW0gY252IHRoZSBjb252ZXJ0ZXIgb2JqZWN0IHRv
IGJlIHVzZWQgKHVjbnZfcmVzZXRGcm9tVW5pY29kZSgpIHdpbGwgYmUgY2FsbGVkKSwKLSAgICog
ICAgICAgIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGNvbnZlcnRlcgotICAgKiBAcGFyYW0gZXJy
b3JDb2RlIG5vcm1hbCBJQ1UgZXJyb3IgY29kZQotICAgKiBAcmV0dXJuIHRoZSBsZW5ndGggb2Yg
dGhlIG91dHB1dCBzdHJpbmcsIG5vdCBjb3VudGluZyB0aGUgdGVybWluYXRpbmcgTlVMOwotICAg
KiAgICAgICAgIGlmIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIGRlc3RDYXBhY2l0eSwgdGhl
biB0aGUgc3RyaW5nIHdpbGwgbm90IGZpdAotICAgKiAgICAgICAgIGFuZCBhIGJ1ZmZlciBvZiB0
aGUgaW5kaWNhdGVkIGxlbmd0aCB3b3VsZCBuZWVkIHRvIGJlIHBhc3NlZCBpbgotICAgKiBAc3Rh
YmxlIElDVSAyLjAKLSAgICovCi0gIGludDMyX3QgZXh0cmFjdChjaGFyICpkZXN0LCBpbnQzMl90
IGRlc3RDYXBhY2l0eSwKLSAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXIgKmNudiwKLSAgICAg
ICAgICAgICAgICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgY29uc3Q7Ci0KLSNlbmRpZgotCi0g
IC8qKgotICAgKiBDcmVhdGUgYSB0ZW1wb3Jhcnkgc3Vic3RyaW5nIGZvciB0aGUgc3BlY2lmaWVk
IHJhbmdlLgotICAgKiBVbmxpa2UgdGhlIHN1YnN0cmluZyBjb25zdHJ1Y3RvciBhbmQgc2V0VG8o
KSBmdW5jdGlvbnMsCi0gICAqIHRoZSBvYmplY3QgcmV0dXJuZWQgaGVyZSB3aWxsIGJlIGEgcmVh
ZC1vbmx5IGFsaWFzICh1c2luZyBnZXRCdWZmZXIoKSkKLSAgICogcmF0aGVyIHRoYW4gY29weWlu
ZyB0aGUgdGV4dC4KLSAgICogQXMgYSByZXN1bHQsIHRoaXMgc3Vic3RyaW5nIG9wZXJhdGlvbiBp
cyBtdWNoIGZhc3RlciBidXQgcmVxdWlyZXMKLSAgICogdGhhdCB0aGUgb3JpZ2luYWwgc3RyaW5n
IG5vdCBiZSBtb2RpZmllZCBvciBkZWxldGVkIGR1cmluZyB0aGUgbGlmZXRpbWUKLSAgICogb2Yg
dGhlIHJldHVybmVkIHN1YnN0cmluZyBvYmplY3QuCi0gICAqIEBwYXJhbSBzdGFydCBvZmZzZXQg
b2YgdGhlIGZpcnN0IGNoYXJhY3RlciB2aXNpYmxlIGluIHRoZSBzdWJzdHJpbmcKLSAgICogQHBh
cmFtIGxlbmd0aCBsZW5ndGggb2YgdGhlIHN1YnN0cmluZwotICAgKiBAcmV0dXJuIGEgcmVhZC1v
bmx5IGFsaWFzIFVuaWNvZGVTdHJpbmcgb2JqZWN0IGZvciB0aGUgc3Vic3RyaW5nCi0gICAqIEBz
dGFibGUgSUNVIDQuNAotICAgKi8KLSAgVW5pY29kZVN0cmluZyB0ZW1wU3ViU3RyaW5nKGludDMy
X3Qgc3RhcnQ9MCwgaW50MzJfdCBsZW5ndGg9SU5UMzJfTUFYKSBjb25zdDsKLQotICAvKioKLSAg
ICogQ3JlYXRlIGEgdGVtcG9yYXJ5IHN1YnN0cmluZyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS4K
LSAgICogU2FtZSBhcyB0ZW1wU3ViU3RyaW5nKHN0YXJ0LCBsZW5ndGgpIGV4Y2VwdCB0aGF0IHRo
ZSBzdWJzdHJpbmcgcmFuZ2UKLSAgICogaXMgc3BlY2lmaWVkIGFzIGEgKHN0YXJ0LCBsaW1pdCkg
cGFpciAod2l0aCBhbiBleGNsdXNpdmUgbGltaXQgaW5kZXgpCi0gICAqIHJhdGhlciB0aGFuIGEg
KHN0YXJ0LCBsZW5ndGgpIHBhaXIuCi0gICAqIEBwYXJhbSBzdGFydCBvZmZzZXQgb2YgdGhlIGZp
cnN0IGNoYXJhY3RlciB2aXNpYmxlIGluIHRoZSBzdWJzdHJpbmcKLSAgICogQHBhcmFtIGxpbWl0
IG9mZnNldCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIHZpc2libGUg
aW4gdGhlIHN1YnN0cmluZwotICAgKiBAcmV0dXJuIGEgcmVhZC1vbmx5IGFsaWFzIFVuaWNvZGVT
dHJpbmcgb2JqZWN0IGZvciB0aGUgc3Vic3RyaW5nCi0gICAqIEBzdGFibGUgSUNVIDQuNAotICAg
Ki8KLSAgaW5saW5lIFVuaWNvZGVTdHJpbmcgdGVtcFN1YlN0cmluZ0JldHdlZW4oaW50MzJfdCBz
dGFydCwgaW50MzJfdCBsaW1pdD1JTlQzMl9NQVgpIGNvbnN0OwotCi0gIC8qKgotICAgKiBDb252
ZXJ0IHRoZSBVbmljb2RlU3RyaW5nIHRvIFVURi04IGFuZCB3cml0ZSB0aGUgcmVzdWx0Ci0gICAq
IHRvIGEgQnl0ZVNpbmsuIFRoaXMgaXMgY2FsbGVkIGJ5IHRvVVRGOFN0cmluZygpLgotICAgKiBV
bnBhaXJlZCBzdXJyb2dhdGVzIGFyZSByZXBsYWNlZCB3aXRoIFUrRkZGRC4KLSAgICogQ2FsbHMg
dV9zdHJUb1VURjhXaXRoU3ViKCkuCi0gICAqCi0gICAqIEBwYXJhbSBzaW5rIEEgQnl0ZVNpbmsg
dG8gd2hpY2ggdGhlIFVURi04IHZlcnNpb24gb2YgdGhlIHN0cmluZyBpcyB3cml0dGVuLgotICAg
KiAgICAgICAgICAgICBzaW5rLkZsdXNoKCkgaXMgY2FsbGVkIGF0IHRoZSBlbmQuCi0gICAqIEBz
dGFibGUgSUNVIDQuMgotICAgKiBAc2VlIHRvVVRGOFN0cmluZwotICAgKi8KLSAgdm9pZCB0b1VU
RjgoQnl0ZVNpbmsgJnNpbmspIGNvbnN0OwotCi0jaWYgVV9IQVZFX1NURF9TVFJJTkcKLQotICAv
KioKLSAgICogQ29udmVydCB0aGUgVW5pY29kZVN0cmluZyB0byBVVEYtOCBhbmQgYXBwZW5kIHRo
ZSByZXN1bHQKLSAgICogdG8gYSBzdGFuZGFyZCBzdHJpbmcuCi0gICAqIFVucGFpcmVkIHN1cnJv
Z2F0ZXMgYXJlIHJlcGxhY2VkIHdpdGggVStGRkZELgotICAgKiBDYWxscyB0b1VURjgoKS4KLSAg
ICoKLSAgICogQHBhcmFtIHJlc3VsdCBBIHN0YW5kYXJkIHN0cmluZyAob3IgYSBjb21wYXRpYmxl
IG9iamVjdCkKLSAgICogICAgICAgIHRvIHdoaWNoIHRoZSBVVEYtOCB2ZXJzaW9uIG9mIHRoZSBz
dHJpbmcgaXMgYXBwZW5kZWQuCi0gICAqIEByZXR1cm4gVGhlIHN0cmluZyBvYmplY3QuCi0gICAq
IEBzdGFibGUgSUNVIDQuMgotICAgKiBAc2VlIHRvVVRGOAotICAgKi8KLSAgdGVtcGxhdGU8dHlw
ZW5hbWUgU3RyaW5nQ2xhc3M+Ci0gIFN0cmluZ0NsYXNzICZ0b1VURjhTdHJpbmcoU3RyaW5nQ2xh
c3MgJnJlc3VsdCkgY29uc3QgewotICAgIFN0cmluZ0J5dGVTaW5rPFN0cmluZ0NsYXNzPiBzYnMo
JnJlc3VsdCk7Ci0gICAgdG9VVEY4KHNicyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0j
ZW5kaWYKLQotICAvKioKLSAgICogQ29udmVydCB0aGUgVW5pY29kZVN0cmluZyB0byBVVEYtMzIu
Ci0gICAqIFVucGFpcmVkIHN1cnJvZ2F0ZXMgYXJlIHJlcGxhY2VkIHdpdGggVStGRkZELgotICAg
KiBDYWxscyB1X3N0clRvVVRGMzJXaXRoU3ViKCkuCi0gICAqCi0gICAqIEBwYXJhbSB1dGYzMiBk
ZXN0aW5hdGlvbiBzdHJpbmcgYnVmZmVyLCBjYW4gYmUgTlVMTCBpZiBjYXBhY2l0eT09MAotICAg
KiBAcGFyYW0gY2FwYWNpdHkgdGhlIG51bWJlciBvZiBVQ2hhcjMycyBhdmFpbGFibGUgYXQgdXRm
MzIKLSAgICogQHBhcmFtIGVycm9yQ29kZSBTdGFuZGFyZCBJQ1UgZXJyb3IgY29kZS4gSXRzIGlu
cHV0IHZhbHVlIG11c3QKLSAgICogICAgICAgICAgICAgICAgICBwYXNzIHRoZSBVX1NVQ0NFU1Mo
KSB0ZXN0LCBvciBlbHNlIHRoZSBmdW5jdGlvbiByZXR1cm5zCi0gICAqICAgICAgICAgICAgICAg
ICAgaW1tZWRpYXRlbHkuIENoZWNrIGZvciBVX0ZBSUxVUkUoKSBvbiBvdXRwdXQgb3IgdXNlIHdp
dGgKLSAgICogICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGFpbmluZy4gKFNlZSBVc2VyIEd1
aWRlIGZvciBkZXRhaWxzLikKLSAgICogQHJldHVybiBUaGUgbGVuZ3RoIG9mIHRoZSBVVEYtMzIg
c3RyaW5nLgotICAgKiBAc2VlIGZyb21VVEYzMgotICAgKiBAc3RhYmxlIElDVSA0LjIKLSAgICov
Ci0gIGludDMyX3QgdG9VVEYzMihVQ2hhcjMyICp1dGYzMiwgaW50MzJfdCBjYXBhY2l0eSwgVUVy
cm9yQ29kZSAmZXJyb3JDb2RlKSBjb25zdDsKLQotICAvKiBMZW5ndGggb3BlcmF0aW9ucyAqLwot
Ci0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgVW5pY29kZVN0cmluZyBvYmpl
Y3QuCi0gICAqIFRoZSBsZW5ndGggaXMgdGhlIG51bWJlciBvZiBVQ2hhciBjb2RlIHVuaXRzIGFy
ZSBpbiB0aGUgVW5pY29kZVN0cmluZy4KLSAgICogSWYgeW91IHdhbnQgdGhlIG51bWJlciBvZiBj
b2RlIHBvaW50cywgcGxlYXNlIHVzZSBjb3VudENoYXIzMigpLgotICAgKiBAcmV0dXJuIHRoZSBs
ZW5ndGggb2YgdGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0Ci0gICAqIEBzZWUgY291bnRDaGFyMzIK
LSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgaW50MzJfdCBsZW5ndGgodm9p
ZCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIENvdW50IFVuaWNvZGUgY29kZSBwb2ludHMgaW4gdGhl
IGxlbmd0aCBVQ2hhciBjb2RlIHVuaXRzIG9mIHRoZSBzdHJpbmcuCi0gICAqIEEgY29kZSBwb2lu
dCBtYXkgb2NjdXB5IGVpdGhlciBvbmUgb3IgdHdvIFVDaGFyIGNvZGUgdW5pdHMuCi0gICAqIENv
dW50aW5nIGNvZGUgcG9pbnRzIGludm9sdmVzIHJlYWRpbmcgYWxsIGNvZGUgdW5pdHMuCi0gICAq
Ci0gICAqIFRoaXMgZnVuY3Rpb25zIGlzIGJhc2ljYWxseSB0aGUgaW52ZXJzZSBvZiBtb3ZlSW5k
ZXgzMigpLgotICAgKgotICAgKiBAcGFyYW0gc3RhcnQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBj
b2RlIHVuaXQgdG8gY2hlY2sKLSAgICogQHBhcmFtIGxlbmd0aCB0aGUgbnVtYmVyIG9mIFVDaGFy
IGNvZGUgdW5pdHMgdG8gY2hlY2sKLSAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGNvZGUgcG9p
bnRzIGluIHRoZSBzcGVjaWZpZWQgY29kZSB1bml0cwotICAgKiBAc2VlIGxlbmd0aAotICAgKiBA
c3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGludDMyX3QKLSAgY291bnRDaGFyMzIoaW50MzJfdCBz
dGFydD0wLCBpbnQzMl90IGxlbmd0aD1JTlQzMl9NQVgpIGNvbnN0OwotCi0gIC8qKgotICAgKiBD
aGVjayBpZiB0aGUgbGVuZ3RoIFVDaGFyIGNvZGUgdW5pdHMgb2YgdGhlIHN0cmluZwotICAgKiBj
b250YWluIG1vcmUgVW5pY29kZSBjb2RlIHBvaW50cyB0aGFuIGEgY2VydGFpbiBudW1iZXIuCi0g
ICAqIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBjb3VudGluZyBhbGwgY29kZSBwb2ludHMg
aW4gdGhpcyBwYXJ0IG9mIHRoZSBzdHJpbmcKLSAgICogYW5kIGNvbXBhcmluZyB0aGF0IG51bWJl
ciB3aXRoIGEgdGhyZXNob2xkLgotICAgKiBUaGlzIGZ1bmN0aW9uIG1heSBub3QgbmVlZCB0byBz
Y2FuIHRoZSBzdHJpbmcgYXQgYWxsIGlmIHRoZSBsZW5ndGgKLSAgICogZmFsbHMgd2l0aGluIGEg
Y2VydGFpbiByYW5nZSwgYW5kCi0gICAqIG5ldmVyIG5lZWRzIHRvIGNvdW50IG1vcmUgdGhhbiAn
bnVtYmVyKzEnIGNvZGUgcG9pbnRzLgotICAgKiBMb2dpY2FsbHkgZXF1aXZhbGVudCB0byAoY291
bnRDaGFyMzIoc3RhcnQsIGxlbmd0aCk+bnVtYmVyKS4KLSAgICogQSBVbmljb2RlIGNvZGUgcG9p
bnQgbWF5IG9jY3VweSBlaXRoZXIgb25lIG9yIHR3byBVQ2hhciBjb2RlIHVuaXRzLgotICAgKgot
ICAgKiBAcGFyYW0gc3RhcnQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjb2RlIHVuaXQgdG8gY2hl
Y2sgKDAgZm9yIHRoZSBlbnRpcmUgc3RyaW5nKQotICAgKiBAcGFyYW0gbGVuZ3RoIHRoZSBudW1i
ZXIgb2YgVUNoYXIgY29kZSB1bml0cyB0byBjaGVjawotICAgKiAgICAgICAgICAgICAgICh1c2Ug
SU5UMzJfTUFYIGZvciB0aGUgZW50aXJlIHN0cmluZzsgcmVtZW1iZXIgdGhhdCBzdGFydC9sZW5n
dGgKLSAgICogICAgICAgICAgICAgICAgdmFsdWVzIGFyZSBwaW5uZWQpCi0gICAqIEBwYXJhbSBu
dW1iZXIgVGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiB0aGUgKHN1YilzdHJpbmcgaXMgY29t
cGFyZWQgYWdhaW5zdAotICAgKiAgICAgICAgICAgICAgIHRoZSAnbnVtYmVyJyBwYXJhbWV0ZXIu
Ci0gICAqIEByZXR1cm4gQm9vbGVhbiB2YWx1ZSBmb3Igd2hldGhlciB0aGUgc3RyaW5nIGNvbnRh
aW5zIG1vcmUgVW5pY29kZSBjb2RlIHBvaW50cwotICAgKiAgICAgICAgIHRoYW4gJ251bWJlcicu
IFNhbWUgYXMgKHVfY291bnRDaGFyMzIocywgbGVuZ3RoKT5udW1iZXIpLgotICAgKiBAc2VlIGNv
dW50Q2hhcjMyCi0gICAqIEBzZWUgdV9zdHJIYXNNb3JlQ2hhcjMyVGhhbgotICAgKiBAc3RhYmxl
IElDVSAyLjQKLSAgICovCi0gIFVCb29sCi0gIGhhc01vcmVDaGFyMzJUaGFuKGludDMyX3Qgc3Rh
cnQsIGludDMyX3QgbGVuZ3RoLCBpbnQzMl90IG51bWJlcikgY29uc3Q7Ci0KLSAgLyoqCi0gICAq
IERldGVybWluZSBpZiB0aGlzIHN0cmluZyBpcyBlbXB0eS4KLSAgICogQHJldHVybiBUUlVFIGlm
IHRoaXMgc3RyaW5nIGNvbnRhaW5zIDAgY2hhcmFjdGVycywgRkFMU0Ugb3RoZXJ3aXNlLgotICAg
KiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBVQm9vbCBpc0VtcHR5KHZvaWQpIGNv
bnN0OwotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhlIGNhcGFjaXR5IG9mIHRoZSBpbnRlcm5hbCBi
dWZmZXIgb2YgdGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0LgotICAgKiBUaGlzIGlzIHVzZWZ1bCB0
b2dldGhlciB3aXRoIHRoZSBnZXRCdWZmZXIgZnVuY3Rpb25zLgotICAgKiBTZWUgdGhlcmUgZm9y
IGRldGFpbHMuCi0gICAqCi0gICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBVQ2hhcnMgYXZhaWxh
YmxlIGluIHRoZSBpbnRlcm5hbCBidWZmZXIKLSAgICogQHNlZSBnZXRCdWZmZXIKLSAgICogQHN0
YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgaW50MzJfdCBnZXRDYXBhY2l0eSh2b2lkKSBj
b25zdDsKLQotICAvKiBPdGhlciBvcGVyYXRpb25zICovCi0KLSAgLyoqCi0gICAqIEdlbmVyYXRl
IGEgaGFzaCBjb2RlIGZvciB0aGlzIG9iamVjdC4KLSAgICogQHJldHVybiBUaGUgaGFzaCBjb2Rl
IG9mIHRoaXMgVW5pY29kZVN0cmluZy4KLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBp
bmxpbmUgaW50MzJfdCBoYXNoQ29kZSh2b2lkKSBjb25zdDsKLQotICAvKioKLSAgICogRGV0ZXJt
aW5lIGlmIHRoaXMgb2JqZWN0IGNvbnRhaW5zIGEgdmFsaWQgc3RyaW5nLgotICAgKiBBIGJvZ3Vz
IHN0cmluZyBoYXMgbm8gdmFsdWUuIEl0IGlzIGRpZmZlcmVudCBmcm9tIGFuIGVtcHR5IHN0cmlu
ZywKLSAgICogYWx0aG91Z2ggaW4gYm90aCBjYXNlcyBpc0VtcHR5KCkgcmV0dXJucyBUUlVFIGFu
ZCBsZW5ndGgoKSByZXR1cm5zIDAuCi0gICAqIHNldFRvQm9ndXMoKSBhbmQgaXNCb2d1cygpIGNh
biBiZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgbm8gc3RyaW5nIHZhbHVlIGlzIGF2YWlsYWJsZS4K
LSAgICogRm9yIGEgYm9ndXMgc3RyaW5nLCBnZXRCdWZmZXIoKSBhbmQgZ2V0VGVybWluYXRlZEJ1
ZmZlcigpIHJldHVybiBOVUxMLCBhbmQKLSAgICogbGVuZ3RoKCkgcmV0dXJucyAwLgotICAgKgot
ICAgKiBAcmV0dXJuIFRSVUUgaWYgdGhlIHN0cmluZyBpcyBib2d1cy9pbnZhbGlkLCBGQUxTRSBv
dGhlcndpc2UKLSAgICogQHNlZSBzZXRUb0JvZ3VzKCkKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0g
ICAqLwotICBpbmxpbmUgVUJvb2wgaXNCb2d1cyh2b2lkKSBjb25zdDsKLQotCi0gIC8vPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBXcml0ZSBvcGVyYXRpb25z
Ci0gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gIC8qIEFz
c2lnbm1lbnQgb3BlcmF0aW9ucyAqLwotCi0gIC8qKgotICAgKiBBc3NpZ25tZW50IG9wZXJhdG9y
LiAgUmVwbGFjZSB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIFVuaWNvZGVTdHJpbmcKLSAgICogd2l0
aCB0aGUgY2hhcmFjdGVycyBmcm9tIDxUVD5zcmNUZXh0PC9UVD4uCi0gICAqIEBwYXJhbSBzcmNU
ZXh0IFRoZSB0ZXh0IGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlcnMgdG8gcmVwbGFjZQotICAgKiBA
cmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwot
ICBVbmljb2RlU3RyaW5nICZvcGVyYXRvcj0oY29uc3QgVW5pY29kZVN0cmluZyAmc3JjVGV4dCk7
Ci0KLSAgLyoqCi0gICAqIEFsbW9zdCB0aGUgc2FtZSBhcyB0aGUgYXNzaWdubWVudCBvcGVyYXRv
ci4KLSAgICogUmVwbGFjZSB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIFVuaWNvZGVTdHJpbmcKLSAg
ICogd2l0aCB0aGUgY2hhcmFjdGVycyBmcm9tIDxjb2RlPnNyY1RleHQ8L2NvZGU+LgotICAgKgot
ICAgKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIHRoZSBzYW1lIGFzIHRoZSBhc3NpZ25tZW50IG9wZXJh
dG9yCi0gICAqIGZvciBhbGwgc3RyaW5ncyBleGNlcHQgZm9yIG9uZXMgdGhhdCBhcmUgcmVhZG9u
bHkgYWxpYXNlcy4KLSAgICoKLSAgICogU3RhcnRpbmcgd2l0aCBJQ1UgMi40LCB0aGUgYXNzaWdu
bWVudCBvcGVyYXRvciBhbmQgdGhlIGNvcHkgY29uc3RydWN0b3IKLSAgICogYWxsb2NhdGUgYSBu
ZXcgYnVmZmVyIGFuZCBjb3B5IHRoZSBidWZmZXIgY29udGVudHMgZXZlbiBmb3IgcmVhZG9ubHkg
YWxpYXNlcy4KLSAgICogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBvbGQsIG1vcmUgZWZm
aWNpZW50IGJ1dCBsZXNzIHNhZmUgYmVoYXZpb3IKLSAgICogb2YgbWFraW5nIHRoaXMgc3RyaW5n
IGFsc28gYSByZWFkb25seSBhbGlhcyB0byB0aGUgc2FtZSBidWZmZXIuCi0gICAqCi0gICAqIFRo
ZSBmYXN0Q29weUZyb20gZnVuY3Rpb24gbXVzdCBiZSB1c2VkIG9ubHkgaWYgaXQgaXMga25vd24g
dGhhdCB0aGUgbGlmZXRpbWUgb2YKLSAgICogdGhpcyBVbmljb2RlU3RyaW5nIGRvZXMgbm90IGV4
Y2VlZCB0aGUgbGlmZXRpbWUgb2YgdGhlIGFsaWFzZWQgYnVmZmVyCi0gICAqIGluY2x1ZGluZyBp
dHMgY29udGVudHMsIGZvciBleGFtcGxlIGZvciBzdHJpbmdzIGZyb20gcmVzb3VyY2UgYnVuZGxl
cwotICAgKiBvciBhbGlhc2VzIHRvIHN0cmluZyBjb25zdGFudHMuCi0gICAqCi0gICAqIEBwYXJh
bSBzcmMgVGhlIHRleHQgY29udGFpbmluZyB0aGUgY2hhcmFjdGVycyB0byByZXBsYWNlLgotICAg
KiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0YWJsZSBJQ1UgMi40Ci0gICAq
LwotICBVbmljb2RlU3RyaW5nICZmYXN0Q29weUZyb20oY29uc3QgVW5pY29kZVN0cmluZyAmc3Jj
KTsKLQotICAvKioKLSAgICogQXNzaWdubWVudCBvcGVyYXRvci4gIFJlcGxhY2UgdGhlIGNoYXJh
Y3RlcnMgaW4gdGhpcyBVbmljb2RlU3RyaW5nCi0gICAqIHdpdGggdGhlIGNvZGUgdW5pdCA8VFQ+
Y2g8L1RUPi4KLSAgICogQHBhcmFtIGNoIHRoZSBjb2RlIHVuaXQgdG8gcmVwbGFjZQotICAgKiBA
cmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwot
ICBpbmxpbmUgVW5pY29kZVN0cmluZyYgb3BlcmF0b3I9IChVQ2hhciBjaCk7Ci0KLSAgLyoqCi0g
ICAqIEFzc2lnbm1lbnQgb3BlcmF0b3IuICBSZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIGluIHRoaXMg
VW5pY29kZVN0cmluZwotICAgKiB3aXRoIHRoZSBjb2RlIHBvaW50IDxUVD5jaDwvVFQ+LgotICAg
KiBAcGFyYW0gY2ggdGhlIGNvZGUgcG9pbnQgdG8gcmVwbGFjZQotICAgKiBAcmV0dXJuIGEgcmVm
ZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgVW5p
Y29kZVN0cmluZyYgb3BlcmF0b3I9IChVQ2hhcjMyIGNoKTsKLQotICAvKioKLSAgICogU2V0IHRo
ZSB0ZXh0IGluIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdCB0byB0aGUgY2hhcmFjdGVycwotICAg
KiBpbiA8VFQ+c3JjVGV4dDwvVFQ+IGluIHRoZSByYW5nZQotICAgKiBbPFRUPnNyY1N0YXJ0PC9U
VD4sIDxUVD5zcmNUZXh0Lmxlbmd0aCgpPC9UVD4pLgotICAgKiA8VFQ+c3JjVGV4dDwvVFQ+IGlz
IG5vdCBtb2RpZmllZC4KLSAgICogQHBhcmFtIHNyY1RleHQgdGhlIHNvdXJjZSBmb3IgdGhlIG5l
dyBjaGFyYWN0ZXJzCi0gICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0IGludG8gPFRUPnNy
Y1RleHQ8L1RUPiB3aGVyZSBuZXcgY2hhcmFjdGVycwotICAgKiB3aWxsIGJlIG9idGFpbmVkCi0g
ICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAyLjIKLSAg
ICovCi0gIGlubGluZSBVbmljb2RlU3RyaW5nJiBzZXRUbyhjb25zdCBVbmljb2RlU3RyaW5nJiBz
cmNUZXh0LAotICAgICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCk7Ci0KLSAgLyoqCi0gICAq
IFNldCB0aGUgdGV4dCBpbiB0aGUgVW5pY29kZVN0cmluZyBvYmplY3QgdG8gdGhlIGNoYXJhY3Rl
cnMKLSAgICogaW4gPFRUPnNyY1RleHQ8L1RUPiBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5zcmNT
dGFydDwvVFQ+LCA8VFQ+c3JjU3RhcnQgKyBzcmNMZW5ndGg8L1RUPikuCi0gICAqIDxUVD5zcmNU
ZXh0PC9UVD4gaXMgbm90IG1vZGlmaWVkLgotICAgKiBAcGFyYW0gc3JjVGV4dCB0aGUgc291cmNl
IGZvciB0aGUgbmV3IGNoYXJhY3RlcnMKLSAgICogQHBhcmFtIHNyY1N0YXJ0IHRoZSBvZmZzZXQg
aW50byA8VFQ+c3JjVGV4dDwvVFQ+IHdoZXJlIG5ldyBjaGFyYWN0ZXJzCi0gICAqIHdpbGwgYmUg
b2J0YWluZWQKLSAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMg
aW4gPFRUPnNyY1RleHQ8L1RUPiBpbiB0aGUKLSAgICogcmVwbGFjZSBzdHJpbmcuCi0gICAqIEBy
ZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0g
IGlubGluZSBVbmljb2RlU3RyaW5nJiBzZXRUbyhjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0
LAotICAgICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAgICAgICAgIGludDMy
X3Qgc3JjTGVuZ3RoKTsKLQotICAvKioKLSAgICogU2V0IHRoZSB0ZXh0IGluIHRoZSBVbmljb2Rl
U3RyaW5nIG9iamVjdCB0byB0aGUgY2hhcmFjdGVycyBpbgotICAgKiA8VFQ+c3JjVGV4dDwvVFQ+
LgotICAgKiA8VFQ+c3JjVGV4dDwvVFQ+IGlzIG5vdCBtb2RpZmllZC4KLSAgICogQHBhcmFtIHNy
Y1RleHQgdGhlIHNvdXJjZSBmb3IgdGhlIG5ldyBjaGFyYWN0ZXJzCi0gICAqIEByZXR1cm4gYSBy
ZWZlcmVuY2UgdG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBV
bmljb2RlU3RyaW5nJiBzZXRUbyhjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0KTsKLQotICAv
KioKLSAgICogU2V0IHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdCB0
byB0aGUgY2hhcmFjdGVycwotICAgKiBpbiA8VFQ+c3JjQ2hhcnM8L1RUPi4gPFRUPnNyY0NoYXJz
PC9UVD4gaXMgbm90IG1vZGlmaWVkLgotICAgKiBAcGFyYW0gc3JjQ2hhcnMgdGhlIHNvdXJjZSBm
b3IgdGhlIG5ldyBjaGFyYWN0ZXJzCi0gICAqIEBwYXJhbSBzcmNMZW5ndGggdGhlIG51bWJlciBv
ZiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gc3JjQ2hhcnMuCi0gICAqIEByZXR1cm4gYSByZWZlcmVu
Y2UgdG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBVbmljb2Rl
U3RyaW5nJiBzZXRUbyhjb25zdCBVQ2hhciAqc3JjQ2hhcnMsCi0gICAgICAgICAgICAgICBpbnQz
Ml90IHNyY0xlbmd0aCk7Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgY2hhcmFjdGVycyBpbiB0aGUg
VW5pY29kZVN0cmluZyBvYmplY3QgdG8gdGhlIGNvZGUgdW5pdAotICAgKiA8VFQ+c3JjQ2hhcjwv
VFQ+LgotICAgKiBAcGFyYW0gc3JjQ2hhciB0aGUgY29kZSB1bml0IHdoaWNoIGJlY29tZXMgdGhl
IFVuaWNvZGVTdHJpbmcncyBjaGFyYWN0ZXIKLSAgICogY29udGVudAotICAgKiBAcmV0dXJuIGEg
cmVmZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBVbmljb2Rl
U3RyaW5nJiBzZXRUbyhVQ2hhciBzcmNDaGFyKTsKLQotICAvKioKLSAgICogU2V0IHRoZSBjaGFy
YWN0ZXJzIGluIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdCB0byB0aGUgY29kZSBwb2ludAotICAg
KiA8VFQ+c3JjQ2hhcjwvVFQ+LgotICAgKiBAcGFyYW0gc3JjQ2hhciB0aGUgY29kZSBwb2ludCB3
aGljaCBiZWNvbWVzIHRoZSBVbmljb2RlU3RyaW5nJ3MgY2hhcmFjdGVyCi0gICAqIGNvbnRlbnQK
LSAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCi0gICAqIEBzdGFibGUgSUNVIDIuMAot
ICAgKi8KLSAgVW5pY29kZVN0cmluZyYgc2V0VG8oVUNoYXIzMiBzcmNDaGFyKTsKLQotICAvKioK
LSAgICogQWxpYXNpbmcgc2V0VG8oKSBmdW5jdGlvbiwgYW5hbG9nb3VzIHRvIHRoZSByZWFkb25s
eS1hbGlhc2luZyBVQ2hhciogY29uc3RydWN0b3IuCi0gICAqIFRoZSB0ZXh0IHdpbGwgYmUgdXNl
ZCBmb3IgdGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0LCBidXQKLSAgICogaXQgd2lsbCBub3QgYmUg
cmVsZWFzZWQgd2hlbiB0aGUgVW5pY29kZVN0cmluZyBpcyBkZXN0cm95ZWQuCi0gICAqIFRoaXMg
aGFzIGNvcHktb24td3JpdGUgc2VtYW50aWNzOgotICAgKiBXaGVuIHRoZSBzdHJpbmcgaXMgbW9k
aWZpZWQsIHRoZW4gdGhlIGJ1ZmZlciBpcyBmaXJzdCBjb3BpZWQgaW50bwotICAgKiBuZXdseSBh
bGxvY2F0ZWQgbWVtb3J5LgotICAgKiBUaGUgYWxpYXNlZCBidWZmZXIgaXMgbmV2ZXIgbW9kaWZp
ZWQuCi0gICAqCi0gICAqIEluIGFuIGFzc2lnbm1lbnQgdG8gYW5vdGhlciBVbmljb2RlU3RyaW5n
LCB3aGVuIHVzaW5nIHRoZSBjb3B5IGNvbnN0cnVjdG9yCi0gICAqIG9yIHRoZSBhc3NpZ25tZW50
IG9wZXJhdG9yLCB0aGUgdGV4dCB3aWxsIGJlIGNvcGllZC4KLSAgICogV2hlbiB1c2luZyBmYXN0
Q29weUZyb20oKSwgdGhlIHRleHQgd2lsbCBiZSBhbGlhc2VkIGFnYWluLAotICAgKiBzbyB0aGF0
IGJvdGggc3RyaW5ncyB0aGVuIGFsaWFzIHRoZSBzYW1lIHJlYWRvbmx5LXRleHQuCi0gICAqCi0g
ICAqIEBwYXJhbSBpc1Rlcm1pbmF0ZWQgc3BlY2lmaWVzIGlmIDxjb2RlPnRleHQ8L2NvZGU+IGlz
IDxjb2RlPk5VTDwvY29kZT4tdGVybWluYXRlZC4KLSAgICogICAgICAgICAgICAgICAgICAgICBU
aGlzIG11c3QgYmUgdHJ1ZSBpZiA8Y29kZT50ZXh0TGVuZ3RoPT0tMTwvY29kZT4uCi0gICAqIEBw
YXJhbSB0ZXh0IFRoZSBjaGFyYWN0ZXJzIHRvIGFsaWFzIGZvciB0aGUgVW5pY29kZVN0cmluZy4K
LSAgICogQHBhcmFtIHRleHRMZW5ndGggVGhlIG51bWJlciBvZiBVbmljb2RlIGNoYXJhY3RlcnMg
aW4gPGNvZGU+dGV4dDwvY29kZT4gdG8gYWxpYXMuCi0gICAqICAgICAgICAgICAgICAgICAgIElm
IC0xLCB0aGVuIHRoaXMgY29uc3RydWN0b3Igd2lsbCBkZXRlcm1pbmUgdGhlIGxlbmd0aAotICAg
KiAgICAgICAgICAgICAgICAgICBieSBjYWxsaW5nIDxjb2RlPnVfc3RybGVuKCk8L2NvZGU+Lgot
ICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0g
ICAqLwotICBVbmljb2RlU3RyaW5nICZzZXRUbyhVQm9vbCBpc1Rlcm1pbmF0ZWQsCi0gICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICp0ZXh0LAotICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90IHRleHRMZW5ndGgpOwotCi0gIC8qKgotICAgKiBBbGlhc2luZyBzZXRUbygpIGZ1
bmN0aW9uLCBhbmFsb2dvdXMgdG8gdGhlIHdyaXRhYmxlLWFsaWFzaW5nIFVDaGFyKiBjb25zdHJ1
Y3Rvci4KLSAgICogVGhlIHRleHQgd2lsbCBiZSB1c2VkIGZvciB0aGUgVW5pY29kZVN0cmluZyBv
YmplY3QsIGJ1dAotICAgKiBpdCB3aWxsIG5vdCBiZSByZWxlYXNlZCB3aGVuIHRoZSBVbmljb2Rl
U3RyaW5nIGlzIGRlc3Ryb3llZC4KLSAgICogVGhpcyBoYXMgd3JpdGUtdGhyb3VnaCBzZW1hbnRp
Y3M6Ci0gICAqIEZvciBhcyBsb25nIGFzIHRoZSBjYXBhY2l0eSBvZiB0aGUgYnVmZmVyIGlzIHN1
ZmZpY2llbnQsIHdyaXRlIG9wZXJhdGlvbnMKLSAgICogd2lsbCBkaXJlY3RseSBhZmZlY3QgdGhl
IGJ1ZmZlci4gV2hlbiBtb3JlIGNhcGFjaXR5IGlzIG5lY2Vzc2FyeSwgdGhlbgotICAgKiBhIG5l
dyBidWZmZXIgd2lsbCBiZSBhbGxvY2F0ZWQgYW5kIHRoZSBjb250ZW50cyBjb3BpZWQgYXMgd2l0
aCByZWd1bGFybHkKLSAgICogY29uc3RydWN0ZWQgc3RyaW5ncy4KLSAgICogSW4gYW4gYXNzaWdu
bWVudCB0byBhbm90aGVyIFVuaWNvZGVTdHJpbmcsIHRoZSBidWZmZXIgd2lsbCBiZSBjb3BpZWQu
Ci0gICAqIFRoZSBleHRyYWN0KFVDaGFyICpkc3QpIGZ1bmN0aW9uIGRldGVjdHMgd2hldGhlciB0
aGUgZHN0IHBvaW50ZXIgaXMgdGhlIHNhbWUKLSAgICogYXMgdGhlIHN0cmluZyBidWZmZXIgaXRz
ZWxmIGFuZCB3aWxsIGluIHRoaXMgY2FzZSBub3QgY29weSB0aGUgY29udGVudHMuCi0gICAqCi0g
ICAqIEBwYXJhbSBidWZmZXIgVGhlIGNoYXJhY3RlcnMgdG8gYWxpYXMgZm9yIHRoZSBVbmljb2Rl
U3RyaW5nLgotICAgKiBAcGFyYW0gYnVmZkxlbmd0aCBUaGUgbnVtYmVyIG9mIFVuaWNvZGUgY2hh
cmFjdGVycyBpbiA8Y29kZT5idWZmZXI8L2NvZGU+IHRvIGFsaWFzLgotICAgKiBAcGFyYW0gYnVm
ZkNhcGFjaXR5IFRoZSBzaXplIG9mIDxjb2RlPmJ1ZmZlcjwvY29kZT4gaW4gVUNoYXJzLgotICAg
KiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAq
LwotICBVbmljb2RlU3RyaW5nICZzZXRUbyhVQ2hhciAqYnVmZmVyLAotICAgICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90IGJ1ZmZMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGludDMy
X3QgYnVmZkNhcGFjaXR5KTsKLQotICAvKioKLSAgICogTWFrZSB0aGlzIFVuaWNvZGVTdHJpbmcg
b2JqZWN0IGludmFsaWQuCi0gICAqIFRoZSBzdHJpbmcgd2lsbCB0ZXN0IFRSVUUgd2l0aCBpc0Jv
Z3VzKCkuCi0gICAqCi0gICAqIEEgYm9ndXMgc3RyaW5nIGhhcyBubyB2YWx1ZS4gSXQgaXMgZGlm
ZmVyZW50IGZyb20gYW4gZW1wdHkgc3RyaW5nLgotICAgKiBJdCBjYW4gYmUgdXNlZCB0byBpbmRp
Y2F0ZSB0aGF0IG5vIHN0cmluZyB2YWx1ZSBpcyBhdmFpbGFibGUuCi0gICAqIGdldEJ1ZmZlcigp
IGFuZCBnZXRUZXJtaW5hdGVkQnVmZmVyKCkgcmV0dXJuIE5VTEwsIGFuZAotICAgKiBsZW5ndGgo
KSByZXR1cm5zIDAuCi0gICAqCi0gICAqIFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBpcyB1c2VkIHRo
cm91Z2hvdXQgdGhlIFVuaWNvZGVTdHJpbmcKLSAgICogaW1wbGVtZW50YXRpb24gdG8gaW5kaWNh
dGUgdGhhdCBhIFVuaWNvZGVTdHJpbmcgb3BlcmF0aW9uIGZhaWxlZCwKLSAgICogYW5kIG1heSBi
ZSB1c2VkIGluIG90aGVyIGZ1bmN0aW9ucywKLSAgICogZXNwZWNpYWxseSBidXQgbm90IGV4Y2x1
c2l2ZWx5IHdoZW4gc3VjaCBmdW5jdGlvbnMgZG8gbm90Ci0gICAqIHRha2UgYSBVRXJyb3JDb2Rl
IGZvciBzaW1wbGljaXR5LgotICAgKgotICAgKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMsIGFuZCBu
byBvdGhlcnMsIHdpbGwgY2xlYXIgYSBzdHJpbmcgb2JqZWN0J3MgYm9ndXMgZmxhZzoKLSAgICog
LSByZW1vdmUoKQotICAgKiAtIHJlbW92ZSgwLCBJTlQzMl9NQVgpCi0gICAqIC0gdHJ1bmNhdGUo
MCkKLSAgICogLSBvcGVyYXRvcj0oKSAoYXNzaWdubWVudCBvcGVyYXRvcikKLSAgICogLSBzZXRU
byguLi4pCi0gICAqCi0gICAqIFRoZSBzaW1wbGVzdCB3YXlzIHRvIHR1cm4gYSBib2d1cyBzdHJp
bmcgaW50byBhbiBlbXB0eSBvbmUKLSAgICogaXMgdG8gdXNlIHRoZSByZW1vdmUoKSBmdW5jdGlv
bi4KLSAgICogRXhhbXBsZXMgZm9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBlcXVpdmFsZW50
IHRvICJzZXQgdG8gZW1wdHkgc3RyaW5nIjoKLSAgICogXGNvZGUKLSAgICogaWYocy5pc0JvZ3Vz
KCkpIHsKLSAgICogICBzLnJlbW92ZSgpOyAgICAgICAgICAgLy8gc2V0IHRvIGFuIGVtcHR5IHN0
cmluZyAocmVtb3ZlIGFsbCksIG9yCi0gICAqICAgcy5yZW1vdmUoMCwgSU5UMzJfTUFYKTsgLy8g
c2V0IHRvIGFuIGVtcHR5IHN0cmluZyAocmVtb3ZlIGFsbCksIG9yCi0gICAqICAgcy50cnVuY2F0
ZSgwKTsgICAgICAgIC8vIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgKGNvbXBsZXRlIHRydW5jYXRp
b24pLCBvcgotICAgKiAgIHM9VW5pY29kZVN0cmluZygpOyAgICAvLyBhc3NpZ24gYW4gZW1wdHkg
c3RyaW5nLCBvcgotICAgKiAgIHMuc2V0VG8oKFVDaGFyMzIpLTEpOyAvLyBzZXQgdG8gYSBwc2V1
ZG8gY29kZSBwb2ludCB0aGF0IGlzIG91dCBvZiByYW5nZSwgb3IKLSAgICogICBzdGF0aWMgY29u
c3QgVUNoYXIgbnVsPTA7Ci0gICAqICAgcy5zZXRUbygmbnVsLCAwKTsgICAgIC8vIHNldCB0byBh
biBlbXB0eSBDIFVuaWNvZGUgc3RyaW5nCi0gICAqIH0KLSAgICogXGVuZGNvZGUKLSAgICoKLSAg
ICogQHNlZSBpc0JvZ3VzKCkKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICB2b2lkIHNl
dFRvQm9ndXMoKTsKLQotICAvKioKLSAgICogU2V0IHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNwZWNp
ZmllZCBvZmZzZXQgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuCi0gICAqIEBwYXJhbSBvZmZz
ZXQgQSB2YWxpZCBvZmZzZXQgaW50byB0aGUgdGV4dCBvZiB0aGUgY2hhcmFjdGVyIHRvIHNldAot
ICAgKiBAcGFyYW0gY2ggVGhlIG5ldyBjaGFyYWN0ZXIKLSAgICogQHJldHVybiBBIHJlZmVyZW5j
ZSB0byB0aGlzCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgVW5pY29kZVN0cmluZyYg
c2V0Q2hhckF0KGludDMyX3Qgb2Zmc2V0LAotICAgICAgICAgICAgICAgVUNoYXIgY2gpOwotCi0K
LSAgLyogQXBwZW5kIG9wZXJhdGlvbnMgKi8KLQotICAvKioKLSAgICogQXBwZW5kIG9wZXJhdG9y
LiBBcHBlbmQgdGhlIGNvZGUgdW5pdCA8VFQ+Y2g8L1RUPiB0byB0aGUgVW5pY29kZVN0cmluZwot
ICAgKiBvYmplY3QuCi0gICAqIEBwYXJhbSBjaCB0aGUgY29kZSB1bml0IHRvIGJlIGFwcGVuZGVk
Ci0gICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAyLjAK
LSAgICovCi0gaW5saW5lICBVbmljb2RlU3RyaW5nJiBvcGVyYXRvcis9IChVQ2hhciBjaCk7Ci0K
LSAgLyoqCi0gICAqIEFwcGVuZCBvcGVyYXRvci4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IDxUVD5j
aDwvVFQ+IHRvIHRoZSBVbmljb2RlU3RyaW5nCi0gICAqIG9iamVjdC4KLSAgICogQHBhcmFtIGNo
IHRoZSBjb2RlIHBvaW50IHRvIGJlIGFwcGVuZGVkCi0gICAqIEByZXR1cm4gYSByZWZlcmVuY2Ug
dG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gaW5saW5lICBVbmljb2RlU3Ry
aW5nJiBvcGVyYXRvcis9IChVQ2hhcjMyIGNoKTsKLQotICAvKioKLSAgICogQXBwZW5kIG9wZXJh
dG9yLiBBcHBlbmQgdGhlIGNoYXJhY3RlcnMgaW4gPFRUPnNyY1RleHQ8L1RUPiB0byB0aGUKLSAg
ICogVW5pY29kZVN0cmluZyBvYmplY3QuIDxUVD5zcmNUZXh0PC9UVD4gaXMgbm90IG1vZGlmaWVk
LgotICAgKiBAcGFyYW0gc3JjVGV4dCB0aGUgc291cmNlIGZvciB0aGUgbmV3IGNoYXJhY3RlcnMK
LSAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCi0gICAqIEBzdGFibGUgSUNVIDIuMAot
ICAgKi8KLSAgaW5saW5lIFVuaWNvZGVTdHJpbmcmIG9wZXJhdG9yKz0gKGNvbnN0IFVuaWNvZGVT
dHJpbmcmIHNyY1RleHQpOwotCi0gIC8qKgotICAgKiBBcHBlbmQgdGhlIGNoYXJhY3RlcnMKLSAg
ICogaW4gPFRUPnNyY1RleHQ8L1RUPiBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5zcmNTdGFydDwv
VFQ+LCA8VFQ+c3JjU3RhcnQgKyBzcmNMZW5ndGg8L1RUPikgdG8gdGhlCi0gICAqIFVuaWNvZGVT
dHJpbmcgb2JqZWN0IGF0IG9mZnNldCA8VFQ+c3RhcnQ8L1RUPi4gPFRUPnNyY1RleHQ8L1RUPgot
ICAgKiBpcyBub3QgbW9kaWZpZWQuCi0gICAqIEBwYXJhbSBzcmNUZXh0IHRoZSBzb3VyY2UgZm9y
IHRoZSBuZXcgY2hhcmFjdGVycwotICAgKiBAcGFyYW0gc3JjU3RhcnQgdGhlIG9mZnNldCBpbnRv
IDxUVD5zcmNUZXh0PC9UVD4gd2hlcmUgbmV3IGNoYXJhY3RlcnMKLSAgICogd2lsbCBiZSBvYnRh
aW5lZAotICAgKiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiA8
VFQ+c3JjVGV4dDwvVFQ+IGluCi0gICAqIHRoZSBhcHBlbmQgc3RyaW5nCi0gICAqIEByZXR1cm4g
YSByZWZlcmVuY2UgdG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGlu
ZSBVbmljb2RlU3RyaW5nJiBhcHBlbmQoY29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCwKLSAg
ICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsCi0gICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0
aCk7Ci0KLSAgLyoqCi0gICAqIEFwcGVuZCB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+c3JjVGV4dDwv
VFQ+IHRvIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdC4KLSAgICogPFRUPnNyY1RleHQ8L1RUPiBp
cyBub3QgbW9kaWZpZWQuCi0gICAqIEBwYXJhbSBzcmNUZXh0IHRoZSBzb3VyY2UgZm9yIHRoZSBu
ZXcgY2hhcmFjdGVycwotICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0
YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgVW5pY29kZVN0cmluZyYgYXBwZW5kKGNvbnN0
IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQpOwotCi0gIC8qKgotICAgKiBBcHBlbmQgdGhlIGNoYXJh
Y3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4gaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3JjU3Rh
cnQ8L1RUPiwgPFRUPnNyY1N0YXJ0ICsgc3JjTGVuZ3RoPC9UVD4pIHRvIHRoZSBVbmljb2RlU3Ry
aW5nCi0gICAqIG9iamVjdCBhdCBvZmZzZXQKLSAgICogPFRUPnN0YXJ0PC9UVD4uIDxUVD5zcmND
aGFyczwvVFQ+IGlzIG5vdCBtb2RpZmllZC4KLSAgICogQHBhcmFtIHNyY0NoYXJzIHRoZSBzb3Vy
Y2UgZm9yIHRoZSBuZXcgY2hhcmFjdGVycwotICAgKiBAcGFyYW0gc3JjU3RhcnQgdGhlIG9mZnNl
dCBpbnRvIDxUVD5zcmNDaGFyczwvVFQ+IHdoZXJlIG5ldyBjaGFyYWN0ZXJzCi0gICAqIHdpbGwg
YmUgb2J0YWluZWQKLSAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4gaW4KLSAgICogICAgICAgICAgICAgICAgICB0aGUgYXBw
ZW5kIHN0cmluZzsgY2FuIGJlIC0xIGlmIDxUVD5zcmNDaGFyczwvVFQ+IGlzIE5VTC10ZXJtaW5h
dGVkCi0gICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAy
LjAKLSAgICovCi0gIGlubGluZSBVbmljb2RlU3RyaW5nJiBhcHBlbmQoY29uc3QgVUNoYXIgKnNy
Y0NoYXJzLAotICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAgICAgIGludDMy
X3Qgc3JjTGVuZ3RoKTsKLQotICAvKioKLSAgICogQXBwZW5kIHRoZSBjaGFyYWN0ZXJzIGluIDxU
VD5zcmNDaGFyczwvVFQ+IHRvIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdAotICAgKiBhdCBvZmZz
ZXQgPFRUPnN0YXJ0PC9UVD4uIDxUVD5zcmNDaGFyczwvVFQ+IGlzIG5vdCBtb2RpZmllZC4KLSAg
ICogQHBhcmFtIHNyY0NoYXJzIHRoZSBzb3VyY2UgZm9yIHRoZSBuZXcgY2hhcmFjdGVycwotICAg
KiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGluIDxU
VD5zcmNDaGFyczwvVFQ+OwotICAgKiAgICAgICAgICAgICAgICAgIGNhbiBiZSAtMSBpZiA8VFQ+
c3JjQ2hhcnM8L1RUPiBpcyBOVUwtdGVybWluYXRlZAotICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNl
IHRvIHRoaXMKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgVW5pY29kZVN0
cmluZyYgYXBwZW5kKGNvbnN0IFVDaGFyICpzcmNDaGFycywKLSAgICAgICAgICAgIGludDMyX3Qg
c3JjTGVuZ3RoKTsKLQotICAvKioKLSAgICogQXBwZW5kIHRoZSBjb2RlIHVuaXQgPFRUPnNyY0No
YXI8L1RUPiB0byB0aGUgVW5pY29kZVN0cmluZyBvYmplY3QuCi0gICAqIEBwYXJhbSBzcmNDaGFy
IHRoZSBjb2RlIHVuaXQgdG8gYXBwZW5kCi0gICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhp
cwotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBVbmljb2RlU3RyaW5nJiBh
cHBlbmQoVUNoYXIgc3JjQ2hhcik7Ci0KLSAgLyoqCi0gICAqIEFwcGVuZCB0aGUgY29kZSBwb2lu
dCA8VFQ+c3JjQ2hhcjwvVFQ+IHRvIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdC4KLSAgICogQHBh
cmFtIHNyY0NoYXIgdGhlIGNvZGUgcG9pbnQgdG8gYXBwZW5kCi0gICAqIEByZXR1cm4gYSByZWZl
cmVuY2UgdG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIFVuaWNvZGVTdHJp
bmcmIGFwcGVuZChVQ2hhcjMyIHNyY0NoYXIpOwotCi0KLSAgLyogSW5zZXJ0IG9wZXJhdGlvbnMg
Ki8KLQotICAvKioKLSAgICogSW5zZXJ0IHRoZSBjaGFyYWN0ZXJzIGluIDxUVD5zcmNUZXh0PC9U
VD4gaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3JjU3RhcnQ8L1RUPiwgPFRUPnNyY1N0YXJ0ICsg
c3JjTGVuZ3RoPC9UVD4pIGludG8gdGhlIFVuaWNvZGVTdHJpbmcKLSAgICogb2JqZWN0IGF0IG9m
ZnNldCA8VFQ+c3RhcnQ8L1RUPi4gPFRUPnNyY1RleHQ8L1RUPiBpcyBub3QgbW9kaWZpZWQuCi0g
ICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IHdoZXJlIHRoZSBpbnNlcnRpb24gYmVnaW5zCi0g
ICAqIEBwYXJhbSBzcmNUZXh0IHRoZSBzb3VyY2UgZm9yIHRoZSBuZXcgY2hhcmFjdGVycwotICAg
KiBAcGFyYW0gc3JjU3RhcnQgdGhlIG9mZnNldCBpbnRvIDxUVD5zcmNUZXh0PC9UVD4gd2hlcmUg
bmV3IGNoYXJhY3RlcnMKLSAgICogd2lsbCBiZSBvYnRhaW5lZAotICAgKiBAcGFyYW0gc3JjTGVu
Z3RoIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiA8VFQ+c3JjVGV4dDwvVFQ+IGluCi0gICAq
IHRoZSBpbnNlcnQgc3RyaW5nCi0gICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwotICAg
KiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBVbmljb2RlU3RyaW5nJiBpbnNlcnQo
aW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQs
Ci0gICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LAotICAgICAgICAgICAgaW50MzJfdCBzcmNM
ZW5ndGgpOwotCi0gIC8qKgotICAgKiBJbnNlcnQgdGhlIGNoYXJhY3RlcnMgaW4gPFRUPnNyY1Rl
eHQ8L1RUPiBpbnRvIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdAotICAgKiBhdCBvZmZzZXQgPFRU
PnN0YXJ0PC9UVD4uIDxUVD5zcmNUZXh0PC9UVD4gaXMgbm90IG1vZGlmaWVkLgotICAgKiBAcGFy
YW0gc3RhcnQgdGhlIG9mZnNldCB3aGVyZSB0aGUgaW5zZXJ0aW9uIGJlZ2lucwotICAgKiBAcGFy
YW0gc3JjVGV4dCB0aGUgc291cmNlIGZvciB0aGUgbmV3IGNoYXJhY3RlcnMKLSAgICogQHJldHVy
biBhIHJlZmVyZW5jZSB0byB0aGlzCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5s
aW5lIFVuaWNvZGVTdHJpbmcmIGluc2VydChpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgY29u
c3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCk7Ci0KLSAgLyoqCi0gICAqIEluc2VydCB0aGUgY2hh
cmFjdGVycyBpbiA8VFQ+c3JjQ2hhcnM8L1RUPiBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5zcmNT
dGFydDwvVFQ+LCA8VFQ+c3JjU3RhcnQgKyBzcmNMZW5ndGg8L1RUPikgaW50byB0aGUgVW5pY29k
ZVN0cmluZwotICAgKiAgb2JqZWN0IGF0IG9mZnNldCA8VFQ+c3RhcnQ8L1RUPi4gPFRUPnNyY0No
YXJzPC9UVD4gaXMgbm90IG1vZGlmaWVkLgotICAgKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBh
dCB3aGljaCB0aGUgaW5zZXJ0aW9uIGJlZ2lucwotICAgKiBAcGFyYW0gc3JjQ2hhcnMgdGhlIHNv
dXJjZSBmb3IgdGhlIG5ldyBjaGFyYWN0ZXJzCi0gICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zm
c2V0IGludG8gPFRUPnNyY0NoYXJzPC9UVD4gd2hlcmUgbmV3IGNoYXJhY3RlcnMKLSAgICogd2ls
bCBiZSBvYnRhaW5lZAotICAgKiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBudW1iZXIgb2YgY2hhcmFj
dGVycyBpbiA8VFQ+c3JjQ2hhcnM8L1RUPgotICAgKiBpbiB0aGUgaW5zZXJ0IHN0cmluZwotICAg
KiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAq
LwotICBpbmxpbmUgVW5pY29kZVN0cmluZyYgaW5zZXJ0KGludDMyX3Qgc3RhcnQsCi0gICAgICAg
ICAgICBjb25zdCBVQ2hhciAqc3JjQ2hhcnMsCi0gICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0
LAotICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpOwotCi0gIC8qKgotICAgKiBJbnNlcnQg
dGhlIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4gaW50byB0aGUgVW5pY29kZVN0cmlu
ZyBvYmplY3QKLSAgICogYXQgb2Zmc2V0IDxUVD5zdGFydDwvVFQ+LiA8VFQ+c3JjQ2hhcnM8L1RU
PiBpcyBub3QgbW9kaWZpZWQuCi0gICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IHdoZXJlIHRo
ZSBpbnNlcnRpb24gYmVnaW5zCi0gICAqIEBwYXJhbSBzcmNDaGFycyB0aGUgc291cmNlIGZvciB0
aGUgbmV3IGNoYXJhY3RlcnMKLSAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIFVu
aWNvZGUgY2hhcmFjdGVycyBpbiBzcmNDaGFycy4KLSAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0
byB0aGlzCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIFVuaWNvZGVTdHJp
bmcmIGluc2VydChpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNyY0No
YXJzLAotICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpOwotCi0gIC8qKgotICAgKiBJbnNl
cnQgdGhlIGNvZGUgdW5pdCA8VFQ+c3JjQ2hhcjwvVFQ+IGludG8gdGhlIFVuaWNvZGVTdHJpbmcg
b2JqZWN0IGF0Ci0gICAqIG9mZnNldCA8VFQ+c3RhcnQ8L1RUPi4KLSAgICogQHBhcmFtIHN0YXJ0
IHRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIGluc2VydGlvbiBvY2N1cnMKLSAgICogQHBhcmFtIHNy
Y0NoYXIgdGhlIGNvZGUgdW5pdCB0byBpbnNlcnQKLSAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0
byB0aGlzCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIFVuaWNvZGVTdHJp
bmcmIGluc2VydChpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgVUNoYXIgc3JjQ2hhcik7Ci0K
LSAgLyoqCi0gICAqIEluc2VydCB0aGUgY29kZSBwb2ludCA8VFQ+c3JjQ2hhcjwvVFQ+IGludG8g
dGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0IGF0Ci0gICAqIG9mZnNldCA8VFQ+c3RhcnQ8L1RUPi4K
LSAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIGluc2VydGlvbiBvY2N1
cnMKLSAgICogQHBhcmFtIHNyY0NoYXIgdGhlIGNvZGUgcG9pbnQgdG8gaW5zZXJ0Ci0gICAqIEBy
ZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0g
IGlubGluZSBVbmljb2RlU3RyaW5nJiBpbnNlcnQoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAg
IFVDaGFyMzIgc3JjQ2hhcik7Ci0KLQotICAvKiBSZXBsYWNlIG9wZXJhdGlvbnMgKi8KLQotICAv
KioKLSAgICogUmVwbGFjZSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5z
dGFydDwvVFQ+LCA8VFQ+c3RhcnQgKyBsZW5ndGg8L1RUPikgd2l0aCB0aGUgY2hhcmFjdGVycyBp
bgotICAgKiA8VFQ+c3JjVGV4dDwvVFQ+IGluIHRoZSByYW5nZQotICAgKiBbPFRUPnNyY1N0YXJ0
PC9UVD4sIDxUVD5zcmNTdGFydCArIHNyY0xlbmd0aDwvVFQ+KS4KLSAgICogPFRUPnNyY1RleHQ8
L1RUPiBpcyBub3QgbW9kaWZpZWQuCi0gICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IGF0IHdo
aWNoIHRoZSByZXBsYWNlIG9wZXJhdGlvbiBiZWdpbnMKLSAgICogQHBhcmFtIGxlbmd0aCB0aGUg
bnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcmVwbGFjZS4gVGhlIGNoYXJhY3RlciBhdAotICAgKiA8
VFQ+c3RhcnQgKyBsZW5ndGg8L1RUPiBpcyBub3QgbW9kaWZpZWQuCi0gICAqIEBwYXJhbSBzcmNU
ZXh0IHRoZSBzb3VyY2UgZm9yIHRoZSBuZXcgY2hhcmFjdGVycwotICAgKiBAcGFyYW0gc3JjU3Rh
cnQgdGhlIG9mZnNldCBpbnRvIDxUVD5zcmNUZXh0PC9UVD4gd2hlcmUgbmV3IGNoYXJhY3RlcnMK
LSAgICogd2lsbCBiZSBvYnRhaW5lZAotICAgKiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBudW1iZXIg
b2YgY2hhcmFjdGVycyBpbiA8VFQ+c3JjVGV4dDwvVFQ+IGluCi0gICAqIHRoZSByZXBsYWNlIHN0
cmluZwotICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0YWJsZSBJQ1Ug
Mi4wCi0gICAqLwotICBVbmljb2RlU3RyaW5nJiByZXBsYWNlKGludDMyX3Qgc3RhcnQsCi0gICAg
ICAgICAgICAgaW50MzJfdCBsZW5ndGgsCi0gICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmlu
ZyYgc3JjVGV4dCwKLSAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LAotICAgICAgICAgICAg
IGludDMyX3Qgc3JjTGVuZ3RoKTsKLQotICAvKioKLSAgICogUmVwbGFjZSB0aGUgY2hhcmFjdGVy
cyBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5zdGFydDwvVFQ+LCA8VFQ+c3RhcnQgKyBsZW5ndGg8
L1RUPikKLSAgICogd2l0aCB0aGUgY2hhcmFjdGVycyBpbiA8VFQ+c3JjVGV4dDwvVFQ+LiAgPFRU
PnNyY1RleHQ8L1RUPiBpcwotICAgKiAgbm90IG1vZGlmaWVkLgotICAgKiBAcGFyYW0gc3RhcnQg
dGhlIG9mZnNldCBhdCB3aGljaCB0aGUgcmVwbGFjZSBvcGVyYXRpb24gYmVnaW5zCi0gICAqIEBw
YXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJlcGxhY2UuIFRoZSBjaGFy
YWN0ZXIgYXQKLSAgICogPFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4gaXMgbm90IG1vZGlmaWVkLgot
ICAgKiBAcGFyYW0gc3JjVGV4dCB0aGUgc291cmNlIGZvciB0aGUgbmV3IGNoYXJhY3RlcnMKLSAg
ICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAg
Ki8KLSAgVW5pY29kZVN0cmluZyYgcmVwbGFjZShpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAg
IGludDMyX3QgbGVuZ3RoLAotICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1Rl
eHQpOwotCi0gIC8qKgotICAgKiBSZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZQot
ICAgKiBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+KSB3aXRoIHRoZSBj
aGFyYWN0ZXJzIGluCi0gICAqIDxUVD5zcmNDaGFyczwvVFQ+IGluIHRoZSByYW5nZQotICAgKiBb
PFRUPnNyY1N0YXJ0PC9UVD4sIDxUVD5zcmNTdGFydCArIHNyY0xlbmd0aDwvVFQ+KS4gPFRUPnNy
Y0NoYXJzPC9UVD4KLSAgICogaXMgbm90IG1vZGlmaWVkLgotICAgKiBAcGFyYW0gc3RhcnQgdGhl
IG9mZnNldCBhdCB3aGljaCB0aGUgcmVwbGFjZSBvcGVyYXRpb24gYmVnaW5zCi0gICAqIEBwYXJh
bSBsZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJlcGxhY2UuICBUaGUgY2hhcmFj
dGVyIGF0Ci0gICAqIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+IGlzIG5vdCBtb2RpZmllZC4KLSAg
ICogQHBhcmFtIHNyY0NoYXJzIHRoZSBzb3VyY2UgZm9yIHRoZSBuZXcgY2hhcmFjdGVycwotICAg
KiBAcGFyYW0gc3JjU3RhcnQgdGhlIG9mZnNldCBpbnRvIDxUVD5zcmNDaGFyczwvVFQ+IHdoZXJl
IG5ldyBjaGFyYWN0ZXJzCi0gICAqIHdpbGwgYmUgb2J0YWluZWQKLSAgICogQHBhcmFtIHNyY0xl
bmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gPFRUPnNyY0NoYXJzPC9UVD4KLSAgICog
aW4gdGhlIHJlcGxhY2Ugc3RyaW5nCi0gICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwot
ICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIFVuaWNvZGVTdHJpbmcmIHJlcGxhY2UoaW50
MzJfdCBzdGFydCwKLSAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwKLSAgICAgICAgICAgICBj
b25zdCBVQ2hhciAqc3JjQ2hhcnMsCi0gICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAg
ICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCk7Ci0KLSAgLyoqCi0gICAqIFJlcGxhY2UgdGhl
IGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3RhcnQ8L1RUPiwgPFRUPnN0YXJ0
ICsgbGVuZ3RoPC9UVD4pIHdpdGggdGhlIGNoYXJhY3RlcnMgaW4KLSAgICogPFRUPnNyY0NoYXJz
PC9UVD4uICA8VFQ+c3JjQ2hhcnM8L1RUPiBpcyBub3QgbW9kaWZpZWQuCi0gICAqIEBwYXJhbSBz
dGFydCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSByZXBsYWNlIG9wZXJhdGlvbiBiZWdpbnMKLSAg
ICogQHBhcmFtIGxlbmd0aCBudW1iZXIgb2YgY2hhcmFjdGVycyB0byByZXBsYWNlLiAgVGhlIGNo
YXJhY3RlciBhdAotICAgKiA8VFQ+c3RhcnQgKyBsZW5ndGg8L1RUPiBpcyBub3QgbW9kaWZpZWQu
Ci0gICAqIEBwYXJhbSBzcmNDaGFycyB0aGUgc291cmNlIGZvciB0aGUgbmV3IGNoYXJhY3RlcnMK
LSAgICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgbnVtYmVyIG9mIFVuaWNvZGUgY2hhcmFjdGVycyBp
biBzcmNDaGFycwotICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0YWJs
ZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgVW5pY29kZVN0cmluZyYgcmVwbGFjZShpbnQzMl90
IHN0YXJ0LAotICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLAotICAgICAgICAgICAgIGNvbnN0
IFVDaGFyICpzcmNDaGFycywKLSAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCk7Ci0KLSAg
LyoqCi0gICAqIFJlcGxhY2UgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+
c3RhcnQ8L1RUPiwgPFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4pIHdpdGggdGhlIGNvZGUgdW5pdAot
ICAgKiA8VFQ+c3JjQ2hhcjwvVFQ+LgotICAgKiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBhdCB3
aGljaCB0aGUgcmVwbGFjZSBvcGVyYXRpb24gYmVnaW5zCi0gICAqIEBwYXJhbSBsZW5ndGggdGhl
IG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJlcGxhY2UuICBUaGUgY2hhcmFjdGVyIGF0Ci0gICAq
IDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+IGlzIG5vdCBtb2RpZmllZC4KLSAgICogQHBhcmFtIHNy
Y0NoYXIgdGhlIG5ldyBjb2RlIHVuaXQKLSAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlz
Ci0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIFVuaWNvZGVTdHJpbmcmIHJl
cGxhY2UoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwKLSAgICAg
ICAgICAgICBVQ2hhciBzcmNDaGFyKTsKLQotICAvKioKLSAgICogUmVwbGFjZSB0aGUgY2hhcmFj
dGVycyBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5zdGFydDwvVFQ+LCA8VFQ+c3RhcnQgKyBsZW5n
dGg8L1RUPikgd2l0aCB0aGUgY29kZSBwb2ludAotICAgKiA8VFQ+c3JjQ2hhcjwvVFQ+LgotICAg
KiBAcGFyYW0gc3RhcnQgdGhlIG9mZnNldCBhdCB3aGljaCB0aGUgcmVwbGFjZSBvcGVyYXRpb24g
YmVnaW5zCi0gICAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJl
cGxhY2UuICBUaGUgY2hhcmFjdGVyIGF0Ci0gICAqIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+IGlz
IG5vdCBtb2RpZmllZC4KLSAgICogQHBhcmFtIHNyY0NoYXIgdGhlIG5ldyBjb2RlIHBvaW50Ci0g
ICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAg
ICovCi0gIFVuaWNvZGVTdHJpbmcmIHJlcGxhY2UoaW50MzJfdCBzdGFydCwgaW50MzJfdCBsZW5n
dGgsIFVDaGFyMzIgc3JjQ2hhcik7Ci0KLSAgLyoqCi0gICAqIFJlcGxhY2UgdGhlIGNoYXJhY3Rl
cnMgaW4gdGhlIHJhbmdlIFs8VFQ+c3RhcnQ8L1RUPiwgPFRUPmxpbWl0PC9UVD4pCi0gICAqIHdp
dGggdGhlIGNoYXJhY3RlcnMgaW4gPFRUPnNyY1RleHQ8L1RUPi4gPFRUPnNyY1RleHQ8L1RUPiBp
cyBub3QgbW9kaWZpZWQuCi0gICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHRo
ZSByZXBsYWNlIG9wZXJhdGlvbiBiZWdpbnMKLSAgICogQHBhcmFtIGxpbWl0IHRoZSBvZmZzZXQg
aW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSByZXBsYWNlIHJhbmdlCi0gICAqIEBwYXJhbSBzcmNU
ZXh0IHRoZSBzb3VyY2UgZm9yIHRoZSBuZXcgY2hhcmFjdGVycwotICAgKiBAcmV0dXJuIGEgcmVm
ZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgVW5p
Y29kZVN0cmluZyYgcmVwbGFjZUJldHdlZW4oaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAg
ICBpbnQzMl90IGxpbWl0LAotICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNy
Y1RleHQpOwotCi0gIC8qKgotICAgKiBSZXBsYWNlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5n
ZSBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5saW1pdDwvVFQ+KQotICAgKiB3aXRoIHRoZSBjaGFyYWN0
ZXJzIGluIDxUVD5zcmNUZXh0PC9UVD4gaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+c3JjU3RhcnQ8
L1RUPiwgPFRUPnNyY0xpbWl0PC9UVD4pLiA8VFQ+c3JjVGV4dDwvVFQ+IGlzIG5vdCBtb2RpZmll
ZC4KLSAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIHJlcGxhY2Ugb3Bl
cmF0aW9uIGJlZ2lucwotICAgKiBAcGFyYW0gbGltaXQgdGhlIG9mZnNldCBpbW1lZGlhdGVseSBm
b2xsb3dpbmcgdGhlIHJlcGxhY2UgcmFuZ2UKLSAgICogQHBhcmFtIHNyY1RleHQgdGhlIHNvdXJj
ZSBmb3IgdGhlIG5ldyBjaGFyYWN0ZXJzCi0gICAqIEBwYXJhbSBzcmNTdGFydCB0aGUgb2Zmc2V0
IGludG8gPFRUPnNyY0NoYXJzPC9UVD4gd2hlcmUgbmV3IGNoYXJhY3RlcnMKLSAgICogd2lsbCBi
ZSBvYnRhaW5lZAotICAgKiBAcGFyYW0gc3JjTGltaXQgdGhlIG9mZnNldCBpbW1lZGlhdGVseSBm
b2xsb3dpbmcgdGhlIHJhbmdlIHRvIGNvcHkKLSAgICogaW4gPFRUPnNyY1RleHQ8L1RUPgotICAg
KiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAq
LwotICBpbmxpbmUgVW5pY29kZVN0cmluZyYgcmVwbGFjZUJldHdlZW4oaW50MzJfdCBzdGFydCwK
LSAgICAgICAgICAgICAgICBpbnQzMl90IGxpbWl0LAotICAgICAgICAgICAgICAgIGNvbnN0IFVu
aWNvZGVTdHJpbmcmIHNyY1RleHQsCi0gICAgICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwK
LSAgICAgICAgICAgICAgICBpbnQzMl90IHNyY0xpbWl0KTsKLQotICAvKioKLSAgICogUmVwbGFj
ZSBhIHN1YnN0cmluZyBvZiB0aGlzIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB0ZXh0LgotICAgKiBA
cGFyYW0gc3RhcnQgdGhlIGJlZ2lubmluZyBpbmRleCwgaW5jbHVzaXZlOyA8Y29kZT4wIDw9IHN0
YXJ0Ci0gICAqIDw9IGxpbWl0PC9jb2RlPi4KLSAgICogQHBhcmFtIGxpbWl0IHRoZSBlbmRpbmcg
aW5kZXgsIGV4Y2x1c2l2ZTsgPGNvZGU+c3RhcnQgPD0gbGltaXQKLSAgICogPD0gbGVuZ3RoKCk8
L2NvZGU+LgotICAgKiBAcGFyYW0gdGV4dCB0aGUgdGV4dCB0byByZXBsYWNlIGNoYXJhY3RlcnMg
PGNvZGU+c3RhcnQ8L2NvZGU+Ci0gICAqIHRvIDxjb2RlPmxpbWl0IC0gMTwvY29kZT4KLSAgICog
QHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICB2aXJ0dWFsIHZvaWQgaGFuZGxlUmVwbGFjZUJldHdl
ZW4oaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dDMyX3QgbGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
bmljb2RlU3RyaW5nJiB0ZXh0KTsKLQotICAvKioKLSAgICogUmVwbGFjZWFibGUgQVBJCi0gICAq
IEByZXR1cm4gVFJVRSBpZiBpdCBoYXMgTWV0YURhdGEKLSAgICogQHN0YWJsZSBJQ1UgMi40Ci0g
ICAqLwotICB2aXJ0dWFsIFVCb29sIGhhc01ldGFEYXRhKCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAq
IENvcHkgYSBzdWJzdHJpbmcgb2YgdGhpcyBvYmplY3QsIHJldGFpbmluZyBhdHRyaWJ1dGUgKG91
dC1vZi1iYW5kKQotICAgKiBpbmZvcm1hdGlvbi4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZHVw
bGljYXRlIG9yIHJlb3JkZXIgc3Vic3RyaW5ncy4KLSAgICogVGhlIGRlc3RpbmF0aW9uIGluZGV4
IG11c3Qgbm90IG92ZXJsYXAgdGhlIHNvdXJjZSByYW5nZS4KLSAgICoKLSAgICogQHBhcmFtIHN0
YXJ0IHRoZSBiZWdpbm5pbmcgaW5kZXgsIGluY2x1c2l2ZTsgPGNvZGU+MCA8PSBzdGFydCA8PQot
ICAgKiBsaW1pdDwvY29kZT4uCi0gICAqIEBwYXJhbSBsaW1pdCB0aGUgZW5kaW5nIGluZGV4LCBl
eGNsdXNpdmU7IDxjb2RlPnN0YXJ0IDw9IGxpbWl0IDw9Ci0gICAqIGxlbmd0aCgpPC9jb2RlPi4K
LSAgICogQHBhcmFtIGRlc3QgdGhlIGRlc3RpbmF0aW9uIGluZGV4LiAgVGhlIGNoYXJhY3RlcnMg
ZnJvbQotICAgKiA8Y29kZT5zdGFydC4ubGltaXQtMTwvY29kZT4gd2lsbCBiZSBjb3BpZWQgdG8g
PGNvZGU+ZGVzdDwvY29kZT4uCi0gICAqIEltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhvZCBt
YXkgYXNzdW1lIHRoYXQgPGNvZGU+ZGVzdCA8PSBzdGFydCB8fAotICAgKiBkZXN0ID49IGxpbWl0
PC9jb2RlPi4KLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICB2aXJ0dWFsIHZvaWQgY29w
eShpbnQzMl90IHN0YXJ0LCBpbnQzMl90IGxpbWl0LCBpbnQzMl90IGRlc3QpOwotCi0gIC8qIFNl
YXJjaCBhbmQgcmVwbGFjZSBvcGVyYXRpb25zICovCi0KLSAgLyoqCi0gICAqIFJlcGxhY2UgYWxs
IG9jY3VycmVuY2VzIG9mIGNoYXJhY3RlcnMgaW4gb2xkVGV4dCB3aXRoIHRoZSBjaGFyYWN0ZXJz
Ci0gICAqIGluIG5ld1RleHQKLSAgICogQHBhcmFtIG9sZFRleHQgdGhlIHRleHQgY29udGFpbmlu
ZyB0aGUgc2VhcmNoIHRleHQKLSAgICogQHBhcmFtIG5ld1RleHQgdGhlIHRleHQgY29udGFpbmlu
ZyB0aGUgcmVwbGFjZW1lbnQgdGV4dAotICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMK
LSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgVW5pY29kZVN0cmluZyYgZmlu
ZEFuZFJlcGxhY2UoY29uc3QgVW5pY29kZVN0cmluZyYgb2xkVGV4dCwKLSAgICAgICAgICAgICAg
ICBjb25zdCBVbmljb2RlU3RyaW5nJiBuZXdUZXh0KTsKLQotICAvKioKLSAgICogUmVwbGFjZSBh
bGwgb2NjdXJyZW5jZXMgb2YgY2hhcmFjdGVycyBpbiBvbGRUZXh0IHdpdGggY2hhcmFjdGVycwot
ICAgKiBpbiBuZXdUZXh0Ci0gICAqIGluIHRoZSByYW5nZSBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5z
dGFydCArIGxlbmd0aDwvVFQ+KS4KLSAgICogQHBhcmFtIHN0YXJ0IHRoZSBzdGFydCBvZiB0aGUg
cmFuZ2UgaW4gd2hpY2ggcmVwbGFjZSB3aWxsIHBlcmZvcm1lZAotICAgKiBAcGFyYW0gbGVuZ3Ro
IHRoZSBsZW5ndGggb2YgdGhlIHJhbmdlIGluIHdoaWNoIHJlcGxhY2Ugd2lsbCBiZSBwZXJmb3Jt
ZWQKLSAgICogQHBhcmFtIG9sZFRleHQgdGhlIHRleHQgY29udGFpbmluZyB0aGUgc2VhcmNoIHRl
eHQKLSAgICogQHBhcmFtIG5ld1RleHQgdGhlIHRleHQgY29udGFpbmluZyB0aGUgcmVwbGFjZW1l
bnQgdGV4dAotICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKLSAgICogQHN0YWJsZSBJ
Q1UgMi4wCi0gICAqLwotICBpbmxpbmUgVW5pY29kZVN0cmluZyYgZmluZEFuZFJlcGxhY2UoaW50
MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwKLSAgICAgICAgICAg
ICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBvbGRUZXh0LAotICAgICAgICAgICAgICAgIGNvbnN0
IFVuaWNvZGVTdHJpbmcmIG5ld1RleHQpOwotCi0gIC8qKgotICAgKiBSZXBsYWNlIGFsbCBvY2N1
cnJlbmNlcyBvZiBjaGFyYWN0ZXJzIGluIG9sZFRleHQgaW4gdGhlIHJhbmdlCi0gICAqIFs8VFQ+
b2xkU3RhcnQ8L1RUPiwgPFRUPm9sZFN0YXJ0ICsgb2xkTGVuZ3RoPC9UVD4pIHdpdGggdGhlIGNo
YXJhY3RlcnMKLSAgICogaW4gbmV3VGV4dCBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5uZXdTdGFy
dDwvVFQ+LCA8VFQ+bmV3U3RhcnQgKyBuZXdMZW5ndGg8L1RUPikKLSAgICogaW4gdGhlIHJhbmdl
IFs8VFQ+c3RhcnQ8L1RUPiwgPFRUPnN0YXJ0ICsgbGVuZ3RoPC9UVD4pLgotICAgKiBAcGFyYW0g
c3RhcnQgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSBpbiB3aGljaCByZXBsYWNlIHdpbGwgcGVyZm9y
bWVkCi0gICAqIEBwYXJhbSBsZW5ndGggdGhlIGxlbmd0aCBvZiB0aGUgcmFuZ2UgaW4gd2hpY2gg
cmVwbGFjZSB3aWxsIGJlIHBlcmZvcm1lZAotICAgKiBAcGFyYW0gb2xkVGV4dCB0aGUgdGV4dCBj
b250YWluaW5nIHRoZSBzZWFyY2ggdGV4dAotICAgKiBAcGFyYW0gb2xkU3RhcnQgdGhlIHN0YXJ0
IG9mIHRoZSBzZWFyY2ggcmFuZ2UgaW4gPFRUPm9sZFRleHQ8L1RUPgotICAgKiBAcGFyYW0gb2xk
TGVuZ3RoIHRoZSBsZW5ndGggb2YgdGhlIHNlYXJjaCByYW5nZSBpbiA8VFQ+b2xkVGV4dDwvVFQ+
Ci0gICAqIEBwYXJhbSBuZXdUZXh0IHRoZSB0ZXh0IGNvbnRhaW5pbmcgdGhlIHJlcGxhY2VtZW50
IHRleHQKLSAgICogQHBhcmFtIG5ld1N0YXJ0IHRoZSBzdGFydCBvZiB0aGUgcmVwbGFjZW1lbnQg
cmFuZ2UgaW4gPFRUPm5ld1RleHQ8L1RUPgotICAgKiBAcGFyYW0gbmV3TGVuZ3RoIHRoZSBsZW5n
dGggb2YgdGhlIHJlcGxhY2VtZW50IHJhbmdlIGluIDxUVD5uZXdUZXh0PC9UVD4KLSAgICogQHJl
dHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAg
VW5pY29kZVN0cmluZyYgZmluZEFuZFJlcGxhY2UoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAg
ICAgICBpbnQzMl90IGxlbmd0aCwKLSAgICAgICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5n
JiBvbGRUZXh0LAotICAgICAgICAgICAgICAgIGludDMyX3Qgb2xkU3RhcnQsCi0gICAgICAgICAg
ICAgICAgaW50MzJfdCBvbGRMZW5ndGgsCi0gICAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0
cmluZyYgbmV3VGV4dCwKLSAgICAgICAgICAgICAgICBpbnQzMl90IG5ld1N0YXJ0LAotICAgICAg
ICAgICAgICAgIGludDMyX3QgbmV3TGVuZ3RoKTsKLQotCi0gIC8qIFJlbW92ZSBvcGVyYXRpb25z
ICovCi0KLSAgLyoqCi0gICAqIFJlbW92ZSBhbGwgY2hhcmFjdGVycyBmcm9tIHRoZSBVbmljb2Rl
U3RyaW5nIG9iamVjdC4KLSAgICogQHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGlzCi0gICAqIEBz
dGFibGUgSUNVIDIuMAotICAgKi8KLSAgaW5saW5lIFVuaWNvZGVTdHJpbmcmIHJlbW92ZSh2b2lk
KTsKLQotICAvKioKLSAgICogUmVtb3ZlIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZQotICAg
KiBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+KSBmcm9tIHRoZSBVbmlj
b2RlU3RyaW5nIG9iamVjdC4KLSAgICogQHBhcmFtIHN0YXJ0IHRoZSBvZmZzZXQgb2YgdGhlIGZp
cnN0IGNoYXJhY3RlciB0byByZW1vdmUKLSAgICogQHBhcmFtIGxlbmd0aCB0aGUgbnVtYmVyIG9m
IGNoYXJhY3RlcnMgdG8gcmVtb3ZlCi0gICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwot
ICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBVbmljb2RlU3RyaW5nJiByZW1v
dmUoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90
IGxlbmd0aCA9IChpbnQzMl90KUlOVDMyX01BWCk7Ci0KLSAgLyoqCi0gICAqIFJlbW92ZSB0aGUg
Y2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UKLSAgICogWzxUVD5zdGFydDwvVFQ+LCA8VFQ+bGltaXQ8
L1RUPikgZnJvbSB0aGUgVW5pY29kZVN0cmluZyBvYmplY3QuCi0gICAqIEBwYXJhbSBzdGFydCB0
aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gcmVtb3ZlCi0gICAqIEBwYXJhbSBs
aW1pdCB0aGUgb2Zmc2V0IGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgcmFuZ2UgdG8gcmVtb3Zl
Ci0gICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAyLjAK
LSAgICovCi0gIGlubGluZSBVbmljb2RlU3RyaW5nJiByZW1vdmVCZXR3ZWVuKGludDMyX3Qgc3Rh
cnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGltaXQg
PSAoaW50MzJfdClJTlQzMl9NQVgpOwotCi0gIC8qKgotICAgKiBSZXRhaW4gb25seSB0aGUgY2hh
cmFjdGVycyBpbiB0aGUgcmFuZ2UKLSAgICogWzxjb2RlPnN0YXJ0PC9jb2RlPiwgPGNvZGU+bGlt
aXQ8L2NvZGU+KSBmcm9tIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdC4KLSAgICogUmVtb3ZlcyBj
aGFyYWN0ZXJzIGJlZm9yZSA8Y29kZT5zdGFydDwvY29kZT4gYW5kIGF0IGFuZCBhZnRlciA8Y29k
ZT5saW1pdDwvY29kZT4uCi0gICAqIEBwYXJhbSBzdGFydCB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJz
dCBjaGFyYWN0ZXIgdG8gcmV0YWluCi0gICAqIEBwYXJhbSBsaW1pdCB0aGUgb2Zmc2V0IGltbWVk
aWF0ZWx5IGZvbGxvd2luZyB0aGUgcmFuZ2UgdG8gcmV0YWluCi0gICAqIEByZXR1cm4gYSByZWZl
cmVuY2UgdG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSA0LjQKLSAgICovCi0gIGlubGluZSBVbmlj
b2RlU3RyaW5nICZyZXRhaW5CZXR3ZWVuKGludDMyX3Qgc3RhcnQsIGludDMyX3QgbGltaXQgPSBJ
TlQzMl9NQVgpOwotCi0gIC8qIExlbmd0aCBvcGVyYXRpb25zICovCi0KLSAgLyoqCi0gICAqIFBh
ZCB0aGUgc3RhcnQgb2YgdGhpcyBVbmljb2RlU3RyaW5nIHdpdGggdGhlIGNoYXJhY3RlciA8VFQ+
cGFkQ2hhcjwvVFQ+LgotICAgKiBJZiB0aGUgbGVuZ3RoIG9mIHRoaXMgVW5pY29kZVN0cmluZyBp
cyBsZXNzIHRoYW4gdGFyZ2V0TGVuZ3RoLAotICAgKiBsZW5ndGgoKSAtIHRhcmdldExlbmd0aCBj
b3BpZXMgb2YgcGFkQ2hhciB3aWxsIGJlIGFkZGVkIHRvIHRoZQotICAgKiBiZWdpbm5pbmcgb2Yg
dGhpcyBVbmljb2RlU3RyaW5nLgotICAgKiBAcGFyYW0gdGFyZ2V0TGVuZ3RoIHRoZSBkZXNpcmVk
IGxlbmd0aCBvZiB0aGUgc3RyaW5nCi0gICAqIEBwYXJhbSBwYWRDaGFyIHRoZSBjaGFyYWN0ZXIg
dG8gdXNlIGZvciBwYWRkaW5nLiBEZWZhdWx0cyB0bwotICAgKiBzcGFjZSAoVSswMDIwKQotICAg
KiBAcmV0dXJuIFRSVUUgaWYgdGhlIHRleHQgd2FzIHBhZGRlZCwgRkFMU0Ugb3RoZXJ3aXNlLgot
ICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIFVCb29sIHBhZExlYWRpbmcoaW50MzJfdCB0
YXJnZXRMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgIFVDaGFyIHBhZENoYXIgPSAweDAwMjAp
OwotCi0gIC8qKgotICAgKiBQYWQgdGhlIGVuZCBvZiB0aGlzIFVuaWNvZGVTdHJpbmcgd2l0aCB0
aGUgY2hhcmFjdGVyIDxUVD5wYWRDaGFyPC9UVD4uCi0gICAqIElmIHRoZSBsZW5ndGggb2YgdGhp
cyBVbmljb2RlU3RyaW5nIGlzIGxlc3MgdGhhbiB0YXJnZXRMZW5ndGgsCi0gICAqIGxlbmd0aCgp
IC0gdGFyZ2V0TGVuZ3RoIGNvcGllcyBvZiBwYWRDaGFyIHdpbGwgYmUgYWRkZWQgdG8gdGhlCi0g
ICAqIGVuZCBvZiB0aGlzIFVuaWNvZGVTdHJpbmcuCi0gICAqIEBwYXJhbSB0YXJnZXRMZW5ndGgg
dGhlIGRlc2lyZWQgbGVuZ3RoIG9mIHRoZSBzdHJpbmcKLSAgICogQHBhcmFtIHBhZENoYXIgdGhl
IGNoYXJhY3RlciB0byB1c2UgZm9yIHBhZGRpbmcuIERlZmF1bHRzIHRvCi0gICAqIHNwYWNlIChV
KzAwMjApCi0gICAqIEByZXR1cm4gVFJVRSBpZiB0aGUgdGV4dCB3YXMgcGFkZGVkLCBGQUxTRSBv
dGhlcndpc2UuCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgVUJvb2wgcGFkVHJhaWxp
bmcoaW50MzJfdCB0YXJnZXRMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICBVQ2hhciBwYWRD
aGFyID0gMHgwMDIwKTsKLQotICAvKioKLSAgICogVHJ1bmNhdGUgdGhpcyBVbmljb2RlU3RyaW5n
IHRvIHRoZSA8VFQ+dGFyZ2V0TGVuZ3RoPC9UVD4uCi0gICAqIEBwYXJhbSB0YXJnZXRMZW5ndGgg
dGhlIGRlc2lyZWQgbGVuZ3RoIG9mIHRoaXMgVW5pY29kZVN0cmluZy4KLSAgICogQHJldHVybiBU
UlVFIGlmIHRoZSB0ZXh0IHdhcyB0cnVuY2F0ZWQsIEZBTFNFIG90aGVyd2lzZQotICAgKiBAc3Rh
YmxlIElDVSAyLjAKLSAgICovCi0gIGlubGluZSBVQm9vbCB0cnVuY2F0ZShpbnQzMl90IHRhcmdl
dExlbmd0aCk7Ci0KLSAgLyoqCi0gICAqIFRyaW1zIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRl
c3BhY2UgZnJvbSB0aGlzIFVuaWNvZGVTdHJpbmcuCi0gICAqIEByZXR1cm4gYSByZWZlcmVuY2Ug
dG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIFVuaWNvZGVTdHJpbmcmIHRy
aW0odm9pZCk7Ci0KLQotICAvKiBNaXNjZWxsYW5lb3VzIG9wZXJhdGlvbnMgKi8KLQotICAvKioK
LSAgICogUmV2ZXJzZSB0aGlzIFVuaWNvZGVTdHJpbmcgaW4gcGxhY2UuCi0gICAqIEByZXR1cm4g
YSByZWZlcmVuY2UgdG8gdGhpcwotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIGlubGlu
ZSBVbmljb2RlU3RyaW5nJiByZXZlcnNlKHZvaWQpOwotCi0gIC8qKgotICAgKiBSZXZlcnNlIHRo
ZSByYW5nZSBbPFRUPnN0YXJ0PC9UVD4sIDxUVD5zdGFydCArIGxlbmd0aDwvVFQ+KSBpbgotICAg
KiB0aGlzIFVuaWNvZGVTdHJpbmcuCi0gICAqIEBwYXJhbSBzdGFydCB0aGUgc3RhcnQgb2YgdGhl
IHJhbmdlIHRvIHJldmVyc2UKLSAgICogQHBhcmFtIGxlbmd0aCB0aGUgbnVtYmVyIG9mIGNoYXJh
Y3RlcnMgdG8gdG8gcmV2ZXJzZQotICAgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoaXMKLSAg
ICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBpbmxpbmUgVW5pY29kZVN0cmluZyYgcmV2ZXJz
ZShpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoKTsKLQotICAvKioK
LSAgICogQ29udmVydCB0aGUgY2hhcmFjdGVycyBpbiB0aGlzIHRvIFVQUEVSIENBU0UgZm9sbG93
aW5nIHRoZSBjb252ZW50aW9ucyBvZgotICAgKiB0aGUgZGVmYXVsdCBsb2NhbGUuCi0gICAqIEBy
ZXR1cm4gQSByZWZlcmVuY2UgdG8gdGhpcy4KLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwot
ICBVbmljb2RlU3RyaW5nJiB0b1VwcGVyKHZvaWQpOwotCi0gIC8qKgotICAgKiBDb252ZXJ0IHRo
ZSBjaGFyYWN0ZXJzIGluIHRoaXMgdG8gVVBQRVIgQ0FTRSBmb2xsb3dpbmcgdGhlIGNvbnZlbnRp
b25zIG9mCi0gICAqIGEgc3BlY2lmaWMgbG9jYWxlLgotICAgKiBAcGFyYW0gbG9jYWxlIFRoZSBs
b2NhbGUgY29udGFpbmluZyB0aGUgY29udmVudGlvbnMgdG8gdXNlLgotICAgKiBAcmV0dXJuIEEg
cmVmZXJlbmNlIHRvIHRoaXMuCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgVW5pY29k
ZVN0cmluZyYgdG9VcHBlcihjb25zdCBMb2NhbGUmIGxvY2FsZSk7Ci0KLSAgLyoqCi0gICAqIENv
bnZlcnQgdGhlIGNoYXJhY3RlcnMgaW4gdGhpcyB0byBsb3dlciBjYXNlIGZvbGxvd2luZyB0aGUg
Y29udmVudGlvbnMgb2YKLSAgICogdGhlIGRlZmF1bHQgbG9jYWxlLgotICAgKiBAcmV0dXJuIEEg
cmVmZXJlbmNlIHRvIHRoaXMuCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgVW5pY29k
ZVN0cmluZyYgdG9Mb3dlcih2b2lkKTsKLQotICAvKioKLSAgICogQ29udmVydCB0aGUgY2hhcmFj
dGVycyBpbiB0aGlzIHRvIGxvd2VyIGNhc2UgZm9sbG93aW5nIHRoZSBjb252ZW50aW9ucyBvZgot
ICAgKiBhIHNwZWNpZmljIGxvY2FsZS4KLSAgICogQHBhcmFtIGxvY2FsZSBUaGUgbG9jYWxlIGNv
bnRhaW5pbmcgdGhlIGNvbnZlbnRpb25zIHRvIHVzZS4KLSAgICogQHJldHVybiBBIHJlZmVyZW5j
ZSB0byB0aGlzLgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIFVuaWNvZGVTdHJpbmcm
IHRvTG93ZXIoY29uc3QgTG9jYWxlJiBsb2NhbGUpOwotCi0jaWYgIVVDT05GSUdfTk9fQlJFQUtf
SVRFUkFUSU9OCi0KLSAgLyoqCi0gICAqIFRpdGxlY2FzZSB0aGlzIHN0cmluZywgY29udmVuaWVu
Y2UgZnVuY3Rpb24gdXNpbmcgdGhlIGRlZmF1bHQgbG9jYWxlLgotICAgKgotICAgKiBDYXNpbmcg
aXMgbG9jYWxlLWRlcGVuZGVudCBhbmQgY29udGV4dC1zZW5zaXRpdmUuCi0gICAqIFRpdGxlY2Fz
aW5nIHVzZXMgYSBicmVhayBpdGVyYXRvciB0byBmaW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXJzIG9m
IHdvcmRzCi0gICAqIHRoYXQgYXJlIHRvIGJlIHRpdGxlY2FzZWQuIEl0IHRpdGxlY2FzZXMgdGhv
c2UgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlcwotICAgKiBhbGwgb3RoZXJzLgotICAgKgotICAg
KiBUaGUgdGl0bGVjYXNlIGJyZWFrIGl0ZXJhdG9yIGNhbiBiZSBwcm92aWRlZCB0byBjdXN0b21p
emUgZm9yIGFyYml0cmFyeQotICAgKiBzdHlsZXMsIHVzaW5nIHJ1bGVzIGFuZCBkaWN0aW9uYXJp
ZXMgYmV5b25kIHRoZSBzdGFuZGFyZCBpdGVyYXRvcnMuCi0gICAqIEl0IG1heSBiZSBtb3JlIGVm
ZmljaWVudCB0byBhbHdheXMgcHJvdmlkZSBhbiBpdGVyYXRvciB0byBhdm9pZAotICAgKiBvcGVu
aW5nIGFuZCBjbG9zaW5nIG9uZSBmb3IgZWFjaCBzdHJpbmcuCi0gICAqIFRoZSBzdGFuZGFyZCB0
aXRsZWNhc2UgaXRlcmF0b3IgZm9yIHRoZSByb290IGxvY2FsZSBpbXBsZW1lbnRzIHRoZQotICAg
KiBhbGdvcml0aG0gb2YgVW5pY29kZSBUUiAyMS4KLSAgICoKLSAgICogVGhpcyBmdW5jdGlvbiB1
c2VzIG9ubHkgdGhlIHNldFRleHQoKSwgZmlyc3QoKSBhbmQgbmV4dCgpIG1ldGhvZHMgb2YgdGhl
Ci0gICAqIHByb3ZpZGVkIGJyZWFrIGl0ZXJhdG9yLgotICAgKgotICAgKiBAcGFyYW0gdGl0bGVJ
dGVyIEEgYnJlYWsgaXRlcmF0b3IgdG8gZmluZCB0aGUgZmlyc3QgY2hhcmFjdGVycyBvZiB3b3Jk
cwotICAgKiAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIHRvIGJlIHRpdGxlY2FzZWQuCi0gICAq
ICAgICAgICAgICAgICAgICAgSWYgbm9uZSBpcyBwcm92aWRlZCAoMCksIHRoZW4gYSBzdGFuZGFy
ZCB0aXRsZWNhc2UKLSAgICogICAgICAgICAgICAgICAgICBicmVhayBpdGVyYXRvciBpcyBvcGVu
ZWQuCi0gICAqICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlIHRoZSBwcm92aWRlZCBpdGVyYXRv
ciBpcyBzZXQgdG8gdGhlIHN0cmluZydzIHRleHQuCi0gICAqIEByZXR1cm4gQSByZWZlcmVuY2Ug
dG8gdGhpcy4KLSAgICogQHN0YWJsZSBJQ1UgMi4xCi0gICAqLwotICBVbmljb2RlU3RyaW5nICZ0
b1RpdGxlKEJyZWFrSXRlcmF0b3IgKnRpdGxlSXRlcik7Ci0KLSAgLyoqCi0gICAqIFRpdGxlY2Fz
ZSB0aGlzIHN0cmluZy4KLSAgICoKLSAgICogQ2FzaW5nIGlzIGxvY2FsZS1kZXBlbmRlbnQgYW5k
IGNvbnRleHQtc2Vuc2l0aXZlLgotICAgKiBUaXRsZWNhc2luZyB1c2VzIGEgYnJlYWsgaXRlcmF0
b3IgdG8gZmluZCB0aGUgZmlyc3QgY2hhcmFjdGVycyBvZiB3b3JkcwotICAgKiB0aGF0IGFyZSB0
byBiZSB0aXRsZWNhc2VkLiBJdCB0aXRsZWNhc2VzIHRob3NlIGNoYXJhY3RlcnMgYW5kIGxvd2Vy
Y2FzZXMKLSAgICogYWxsIG90aGVycy4KLSAgICoKLSAgICogVGhlIHRpdGxlY2FzZSBicmVhayBp
dGVyYXRvciBjYW4gYmUgcHJvdmlkZWQgdG8gY3VzdG9taXplIGZvciBhcmJpdHJhcnkKLSAgICog
c3R5bGVzLCB1c2luZyBydWxlcyBhbmQgZGljdGlvbmFyaWVzIGJleW9uZCB0aGUgc3RhbmRhcmQg
aXRlcmF0b3JzLgotICAgKiBJdCBtYXkgYmUgbW9yZSBlZmZpY2llbnQgdG8gYWx3YXlzIHByb3Zp
ZGUgYW4gaXRlcmF0b3IgdG8gYXZvaWQKLSAgICogb3BlbmluZyBhbmQgY2xvc2luZyBvbmUgZm9y
IGVhY2ggc3RyaW5nLgotICAgKiBUaGUgc3RhbmRhcmQgdGl0bGVjYXNlIGl0ZXJhdG9yIGZvciB0
aGUgcm9vdCBsb2NhbGUgaW1wbGVtZW50cyB0aGUKLSAgICogYWxnb3JpdGhtIG9mIFVuaWNvZGUg
VFIgMjEuCi0gICAqCi0gICAqIFRoaXMgZnVuY3Rpb24gdXNlcyBvbmx5IHRoZSBzZXRUZXh0KCks
IGZpcnN0KCkgYW5kIG5leHQoKSBtZXRob2RzIG9mIHRoZQotICAgKiBwcm92aWRlZCBicmVhayBp
dGVyYXRvci4KLSAgICoKLSAgICogQHBhcmFtIHRpdGxlSXRlciBBIGJyZWFrIGl0ZXJhdG9yIHRv
IGZpbmQgdGhlIGZpcnN0IGNoYXJhY3RlcnMgb2Ygd29yZHMKLSAgICogICAgICAgICAgICAgICAg
ICB0aGF0IGFyZSB0byBiZSB0aXRsZWNhc2VkLgotICAgKiAgICAgICAgICAgICAgICAgIElmIG5v
bmUgaXMgcHJvdmlkZWQgKDApLCB0aGVuIGEgc3RhbmRhcmQgdGl0bGVjYXNlCi0gICAqICAgICAg
ICAgICAgICAgICAgYnJlYWsgaXRlcmF0b3IgaXMgb3BlbmVkLgotICAgKiAgICAgICAgICAgICAg
ICAgIE90aGVyd2lzZSB0aGUgcHJvdmlkZWQgaXRlcmF0b3IgaXMgc2V0IHRvIHRoZSBzdHJpbmcn
cyB0ZXh0LgotICAgKiBAcGFyYW0gbG9jYWxlICAgIFRoZSBsb2NhbGUgdG8gY29uc2lkZXIuCi0g
ICAqIEByZXR1cm4gQSByZWZlcmVuY2UgdG8gdGhpcy4KLSAgICogQHN0YWJsZSBJQ1UgMi4xCi0g
ICAqLwotICBVbmljb2RlU3RyaW5nICZ0b1RpdGxlKEJyZWFrSXRlcmF0b3IgKnRpdGxlSXRlciwg
Y29uc3QgTG9jYWxlICZsb2NhbGUpOwotCi0gIC8qKgotICAgKiBUaXRsZWNhc2UgdGhpcyBzdHJp
bmcsIHdpdGggb3B0aW9ucy4KLSAgICoKLSAgICogQ2FzaW5nIGlzIGxvY2FsZS1kZXBlbmRlbnQg
YW5kIGNvbnRleHQtc2Vuc2l0aXZlLgotICAgKiBUaXRsZWNhc2luZyB1c2VzIGEgYnJlYWsgaXRl
cmF0b3IgdG8gZmluZCB0aGUgZmlyc3QgY2hhcmFjdGVycyBvZiB3b3JkcwotICAgKiB0aGF0IGFy
ZSB0byBiZSB0aXRsZWNhc2VkLiBJdCB0aXRsZWNhc2VzIHRob3NlIGNoYXJhY3RlcnMgYW5kIGxv
d2VyY2FzZXMKLSAgICogYWxsIG90aGVycy4gKFRoaXMgY2FuIGJlIG1vZGlmaWVkIHdpdGggb3B0
aW9ucy4pCi0gICAqCi0gICAqIFRoZSB0aXRsZWNhc2UgYnJlYWsgaXRlcmF0b3IgY2FuIGJlIHBy
b3ZpZGVkIHRvIGN1c3RvbWl6ZSBmb3IgYXJiaXRyYXJ5Ci0gICAqIHN0eWxlcywgdXNpbmcgcnVs
ZXMgYW5kIGRpY3Rpb25hcmllcyBiZXlvbmQgdGhlIHN0YW5kYXJkIGl0ZXJhdG9ycy4KLSAgICog
SXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50IHRvIGFsd2F5cyBwcm92aWRlIGFuIGl0ZXJhdG9yIHRv
IGF2b2lkCi0gICAqIG9wZW5pbmcgYW5kIGNsb3Npbmcgb25lIGZvciBlYWNoIHN0cmluZy4KLSAg
ICogVGhlIHN0YW5kYXJkIHRpdGxlY2FzZSBpdGVyYXRvciBmb3IgdGhlIHJvb3QgbG9jYWxlIGlt
cGxlbWVudHMgdGhlCi0gICAqIGFsZ29yaXRobSBvZiBVbmljb2RlIFRSIDIxLgotICAgKgotICAg
KiBUaGlzIGZ1bmN0aW9uIHVzZXMgb25seSB0aGUgc2V0VGV4dCgpLCBmaXJzdCgpIGFuZCBuZXh0
KCkgbWV0aG9kcyBvZiB0aGUKLSAgICogcHJvdmlkZWQgYnJlYWsgaXRlcmF0b3IuCi0gICAqCi0g
ICAqIEBwYXJhbSB0aXRsZUl0ZXIgQSBicmVhayBpdGVyYXRvciB0byBmaW5kIHRoZSBmaXJzdCBj
aGFyYWN0ZXJzIG9mIHdvcmRzCi0gICAqICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgdG8gYmUg
dGl0bGVjYXNlZC4KLSAgICogICAgICAgICAgICAgICAgICBJZiBub25lIGlzIHByb3ZpZGVkICgw
KSwgdGhlbiBhIHN0YW5kYXJkIHRpdGxlY2FzZQotICAgKiAgICAgICAgICAgICAgICAgIGJyZWFr
IGl0ZXJhdG9yIGlzIG9wZW5lZC4KLSAgICogICAgICAgICAgICAgICAgICBPdGhlcndpc2UgdGhl
IHByb3ZpZGVkIGl0ZXJhdG9yIGlzIHNldCB0byB0aGUgc3RyaW5nJ3MgdGV4dC4KLSAgICogQHBh
cmFtIGxvY2FsZSAgICBUaGUgbG9jYWxlIHRvIGNvbnNpZGVyLgotICAgKiBAcGFyYW0gb3B0aW9u
cyBPcHRpb25zIGJpdCBzZXQsIHNlZSB1Y2FzZW1hcF9vcGVuKCkuCi0gICAqIEByZXR1cm4gQSBy
ZWZlcmVuY2UgdG8gdGhpcy4KLSAgICogQHNlZSBVX1RJVExFQ0FTRV9OT19MT1dFUkNBU0UKLSAg
ICogQHNlZSBVX1RJVExFQ0FTRV9OT19CUkVBS19BREpVU1RNRU5UCi0gICAqIEBzZWUgdWNhc2Vt
YXBfb3BlbgotICAgKiBAc3RhYmxlIElDVSAzLjgKLSAgICovCi0gIFVuaWNvZGVTdHJpbmcgJnRv
VGl0bGUoQnJlYWtJdGVyYXRvciAqdGl0bGVJdGVyLCBjb25zdCBMb2NhbGUgJmxvY2FsZSwgdWlu
dDMyX3Qgb3B0aW9ucyk7Ci0KLSNlbmRpZgotCi0gIC8qKgotICAgKiBDYXNlLWZvbGRzIHRoZSBj
aGFyYWN0ZXJzIGluIHRoaXMgc3RyaW5nLgotICAgKgotICAgKiBDYXNlLWZvbGRpbmcgaXMgbG9j
YWxlLWluZGVwZW5kZW50IGFuZCBub3QgY29udGV4dC1zZW5zaXRpdmUsCi0gICAqIGJ1dCB0aGVy
ZSBpcyBhbiBvcHRpb24gZm9yIHdoZXRoZXIgdG8gaW5jbHVkZSBvciBleGNsdWRlIG1hcHBpbmdz
IGZvciBkb3R0ZWQgSQotICAgKiBhbmQgZG90bGVzcyBpIHRoYXQgYXJlIG1hcmtlZCB3aXRoICdU
JyBpbiBDYXNlRm9sZGluZy50eHQuCi0gICAqCi0gICAqIFRoZSByZXN1bHQgbWF5IGJlIGxvbmdl
ciBvciBzaG9ydGVyIHRoYW4gdGhlIG9yaWdpbmFsLgotICAgKgotICAgKiBAcGFyYW0gb3B0aW9u
cyBFaXRoZXIgVV9GT0xEX0NBU0VfREVGQVVMVCBvciBVX0ZPTERfQ0FTRV9FWENMVURFX1NQRUNJ
QUxfSQotICAgKiBAcmV0dXJuIEEgcmVmZXJlbmNlIHRvIHRoaXMuCi0gICAqIEBzdGFibGUgSUNV
IDIuMAotICAgKi8KLSAgVW5pY29kZVN0cmluZyAmZm9sZENhc2UodWludDMyX3Qgb3B0aW9ucz0w
IC8qVV9GT0xEX0NBU0VfREVGQVVMVCovKTsKLQotICAvLz09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLSAgLy8gQWNjZXNzIHRvIHRoZSBpbnRlcm5hbCBidWZmZXIKLSAg
Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgLyoqCi0gICAq
IEdldCBhIHJlYWQvd3JpdGUgcG9pbnRlciB0byB0aGUgaW50ZXJuYWwgYnVmZmVyLgotICAgKiBU
aGUgYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgbGFyZ2UgZW5vdWdoIGZvciBhdCBsZWFzdCBt
aW5DYXBhY2l0eSBVQ2hhcnMsCi0gICAqIHdyaXRhYmxlLCBhbmQgaXMgc3RpbGwgb3duZWQgYnkg
dGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0LgotICAgKiBDYWxscyB0byBnZXRCdWZmZXIobWluQ2Fw
YWNpdHkpIG11c3Qgbm90IGJlIG5lc3RlZCwgYW5kCi0gICAqIG11c3QgYmUgbWF0Y2hlZCB3aXRo
IGNhbGxzIHRvIHJlbGVhc2VCdWZmZXIobmV3TGVuZ3RoKS4KLSAgICogSWYgdGhlIHN0cmluZyBi
dWZmZXIgd2FzIHJlYWQtb25seSBvciBzaGFyZWQsCi0gICAqIHRoZW4gaXQgd2lsbCBiZSByZWFs
bG9jYXRlZCBhbmQgY29waWVkLgotICAgKgotICAgKiBBbiBhdHRlbXB0ZWQgbmVzdGVkIGNhbGwg
d2lsbCByZXR1cm4gMCwgYW5kIHdpbGwgbm90IGZ1cnRoZXIgbW9kaWZ5IHRoZQotICAgKiBzdGF0
ZSBvZiB0aGUgVW5pY29kZVN0cmluZyBvYmplY3QuCi0gICAqIEl0IGFsc28gcmV0dXJucyAwIGlm
IHRoZSBzdHJpbmcgaXMgYm9ndXMuCi0gICAqCi0gICAqIFRoZSBhY3R1YWwgY2FwYWNpdHkgb2Yg
dGhlIHN0cmluZyBidWZmZXIgbWF5IGJlIGxhcmdlciB0aGFuIG1pbkNhcGFjaXR5LgotICAgKiBn
ZXRDYXBhY2l0eSgpIHJldHVybnMgdGhlIGFjdHVhbCBjYXBhY2l0eS4KLSAgICogRm9yIG1hbnkg
b3BlcmF0aW9ucywgdGhlIGZ1bGwgY2FwYWNpdHkgc2hvdWxkIGJlIHVzZWQgdG8gYXZvaWQgcmVh
bGxvY2F0aW9ucy4KLSAgICoKLSAgICogV2hpbGUgdGhlIGJ1ZmZlciBpcyAib3BlbiIgYmV0d2Vl
biBnZXRCdWZmZXIobWluQ2FwYWNpdHkpCi0gICAqIGFuZCByZWxlYXNlQnVmZmVyKG5ld0xlbmd0
aCksIHRoZSBmb2xsb3dpbmcgYXBwbGllczoKLSAgICogLSBUaGUgc3RyaW5nIGxlbmd0aCBpcyBz
ZXQgdG8gMC4KLSAgICogLSBBbnkgcmVhZCBBUEkgY2FsbCBvbiB0aGUgVW5pY29kZVN0cmluZyBv
YmplY3Qgd2lsbCBiZWhhdmUgbGlrZSBvbiBhIDAtbGVuZ3RoIHN0cmluZy4KLSAgICogLSBBbnkg
d3JpdGUgQVBJIGNhbGwgb24gdGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0IGlzIGRpc2FsbG93ZWQg
YW5kIHdpbGwgaGF2ZSBubyBlZmZlY3QuCi0gICAqIC0gWW91IGNhbiByZWFkIGZyb20gYW5kIHdy
aXRlIHRvIHRoZSByZXR1cm5lZCBidWZmZXIuCi0gICAqIC0gVGhlIHByZXZpb3VzIHN0cmluZyBj
b250ZW50cyB3aWxsIHN0aWxsIGJlIGluIHRoZSBidWZmZXI7Ci0gICAqICAgaWYgeW91IHdhbnQg
dG8gdXNlIGl0LCB0aGVuIHlvdSBuZWVkIHRvIGNhbGwgbGVuZ3RoKCkgYmVmb3JlIGdldEJ1ZmZl
cihtaW5DYXBhY2l0eSkuCi0gICAqICAgSWYgdGhlIGxlbmd0aCgpIHdhcyBncmVhdGVyIHRoYW4g
bWluQ2FwYWNpdHksIHRoZW4gYW55IGNvbnRlbnRzIGFmdGVyIG1pbkNhcGFjaXR5Ci0gICAqICAg
bWF5IGJlIGxvc3QuCi0gICAqICAgVGhlIGJ1ZmZlciBjb250ZW50cyBpcyBub3QgTlVMLXRlcm1p
bmF0ZWQgYnkgZ2V0QnVmZmVyKCkuCi0gICAqICAgSWYgbGVuZ3RoKCk8Z2V0Q2FwYWNpdHkoKSB0
aGVuIHlvdSBjYW4gdGVybWluYXRlIGl0IGJ5IHdyaXRpbmcgYSBOVUwKLSAgICogICBhdCBpbmRl
eCBsZW5ndGgoKS4KLSAgICogLSBZb3UgbXVzdCBjYWxsIHJlbGVhc2VCdWZmZXIobmV3TGVuZ3Ro
KSBiZWZvcmUgYW5kIGluIG9yZGVyIHRvCi0gICAqICAgcmV0dXJuIHRvIG5vcm1hbCBVbmljb2Rl
U3RyaW5nIG9wZXJhdGlvbi4KLSAgICoKLSAgICogQHBhcmFtIG1pbkNhcGFjaXR5IHRoZSBtaW5p
bXVtIG51bWJlciBvZiBVQ2hhcnMgdGhhdCBhcmUgdG8gYmUgYXZhaWxhYmxlCi0gICAqICAgICAg
ICBpbiB0aGUgYnVmZmVyLCBzdGFydGluZyBhdCB0aGUgcmV0dXJuZWQgcG9pbnRlcjsKLSAgICog
ICAgICAgIGRlZmF1bHQgdG8gdGhlIGN1cnJlbnQgc3RyaW5nIGNhcGFjaXR5IGlmIG1pbkNhcGFj
aXR5PT0tMQotICAgKiBAcmV0dXJuIGEgd3JpdGFibGUgcG9pbnRlciB0byB0aGUgaW50ZXJuYWwg
c3RyaW5nIGJ1ZmZlciwKLSAgICogICAgICAgICBvciAwIGlmIGFuIGVycm9yIG9jY3VycyAobmVz
dGVkIGNhbGxzLCBvdXQgb2YgbWVtb3J5KQotICAgKgotICAgKiBAc2VlIHJlbGVhc2VCdWZmZXIK
LSAgICogQHNlZSBnZXRUZXJtaW5hdGVkQnVmZmVyKCkKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0g
ICAqLwotICBVQ2hhciAqZ2V0QnVmZmVyKGludDMyX3QgbWluQ2FwYWNpdHkpOwotCi0gIC8qKgot
ICAgKiBSZWxlYXNlIGEgcmVhZC93cml0ZSBidWZmZXIgb24gYSBVbmljb2RlU3RyaW5nIG9iamVj
dCB3aXRoIGFuCi0gICAqICJvcGVuIiBnZXRCdWZmZXIobWluQ2FwYWNpdHkpLgotICAgKiBUaGlz
IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGluIGEgbWF0Y2hlZCBwYWlyIHdpdGggZ2V0QnVmZmVy
KG1pbkNhcGFjaXR5KS4KLSAgICogcmVsZWFzZUJ1ZmZlcihuZXdMZW5ndGgpIG11c3QgYmUgY2Fs
bGVkIGlmIGFuZCBvbmx5IGlmIGEgZ2V0QnVmZmVyKG1pbkNhcGFjaXR5KSBpcyAib3BlbiIuCi0g
ICAqCi0gICAqIEl0IHdpbGwgc2V0IHRoZSBzdHJpbmcgbGVuZ3RoIHRvIG5ld0xlbmd0aCwgYXQg
bW9zdCB0byB0aGUgY3VycmVudCBjYXBhY2l0eS4KLSAgICogSWYgbmV3TGVuZ3RoPT0tMSB0aGVu
IGl0IHdpbGwgc2V0IHRoZSBsZW5ndGggYWNjb3JkaW5nIHRvIHRoZQotICAgKiBmaXJzdCBOVUwg
aW4gdGhlIGJ1ZmZlciwgb3IgdG8gdGhlIGNhcGFjaXR5IGlmIHRoZXJlIGlzIG5vIE5VTC4KLSAg
ICoKLSAgICogQWZ0ZXIgY2FsbGluZyByZWxlYXNlQnVmZmVyKG5ld0xlbmd0aCkgdGhlIFVuaWNv
ZGVTdHJpbmcgaXMgYmFjayB0byBub3JtYWwgb3BlcmF0aW9uLgotICAgKgotICAgKiBAcGFyYW0g
bmV3TGVuZ3RoIHRoZSBuZXcgbGVuZ3RoIG9mIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdDsKLSAg
ICogICAgICAgIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGNhcGFjaXR5IGlmIG5ld0xlbmd0aCBp
cyBncmVhdGVyIHRoYW4gdGhhdDsKLSAgICogICAgICAgIGlmIG5ld0xlbmd0aD09LTEsIGl0IGRl
ZmF1bHRzIHRvIHVfc3RybGVuKGJ1ZmZlcikgYnV0IG5vdCBtb3JlIHRoYW4KLSAgICogICAgICAg
IHRoZSBjdXJyZW50IGNhcGFjaXR5IG9mIHRoZSBzdHJpbmcKLSAgICoKLSAgICogQHNlZSBnZXRC
dWZmZXIoaW50MzJfdCBtaW5DYXBhY2l0eSkKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwot
ICB2b2lkIHJlbGVhc2VCdWZmZXIoaW50MzJfdCBuZXdMZW5ndGg9LTEpOwotCi0gIC8qKgotICAg
KiBHZXQgYSByZWFkLW9ubHkgcG9pbnRlciB0byB0aGUgaW50ZXJuYWwgYnVmZmVyLgotICAgKiBU
aGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUgb24gYSB2YWxpZCBVbmljb2RlU3RyaW5nLgot
ICAgKgotICAgKiBJdCByZXR1cm5zIDAgaWYgdGhlIHN0cmluZyBpcyBib2d1cywgb3IKLSAgICog
ZHVyaW5nIGFuICJvcGVuIiBnZXRCdWZmZXIobWluQ2FwYWNpdHkpLgotICAgKgotICAgKiBJdCBj
YW4gYmUgY2FsbGVkIGFzIG1hbnkgdGltZXMgYXMgZGVzaXJlZC4KLSAgICogVGhlIHBvaW50ZXIg
dGhhdCBpdCByZXR1cm5zIHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBVbmljb2RlU3RyaW5n
IG9iamVjdCBpcyBtb2RpZmllZCwKLSAgICogYXQgd2hpY2ggdGltZSB0aGUgcG9pbnRlciBpcyBz
ZW1hbnRpY2FsbHkgaW52YWxpZGF0ZWQgYW5kIG11c3Qgbm90IGJlIHVzZWQgYW55IG1vcmUuCi0g
ICAqCi0gICAqIFRoZSBjYXBhY2l0eSBvZiB0aGUgYnVmZmVyIGNhbiBiZSBkZXRlcm1pbmVkIHdp
dGggZ2V0Q2FwYWNpdHkoKS4KLSAgICogVGhlIHBhcnQgYWZ0ZXIgbGVuZ3RoKCkgbWF5IG9yIG1h
eSBub3QgYmUgaW5pdGlhbGl6ZWQgYW5kIHZhbGlkLAotICAgKiBkZXBlbmRpbmcgb24gdGhlIGhp
c3Rvcnkgb2YgdGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0LgotICAgKgotICAgKiBUaGUgYnVmZmVy
IGNvbnRlbnRzIGlzIChwcm9iYWJseSkgbm90IE5VTC10ZXJtaW5hdGVkLgotICAgKiBZb3UgY2Fu
IGNoZWNrIGlmIGl0IGlzIHdpdGgKLSAgICogPGNvZGU+KHMubGVuZ3RoKCk8cy5nZXRDYXBhY2l0
eSgpICYmIGJ1ZmZlcltzLmxlbmd0aCgpXT09MCk8L2NvZGU+LgotICAgKiAoU2VlIGdldFRlcm1p
bmF0ZWRCdWZmZXIoKS4pCi0gICAqCi0gICAqIFRoZSBidWZmZXIgbWF5IHJlc2lkZSBpbiByZWFk
LW9ubHkgbWVtb3J5LiBJdHMgY29udGVudHMgbXVzdCBub3QKLSAgICogYmUgbW9kaWZpZWQuCi0g
ICAqCi0gICAqIEByZXR1cm4gYSByZWFkLW9ubHkgcG9pbnRlciB0byB0aGUgaW50ZXJuYWwgc3Ry
aW5nIGJ1ZmZlciwKLSAgICogICAgICAgICBvciAwIGlmIHRoZSBzdHJpbmcgaXMgZW1wdHkgb3Ig
Ym9ndXMKLSAgICoKLSAgICogQHNlZSBnZXRCdWZmZXIoaW50MzJfdCBtaW5DYXBhY2l0eSkKLSAg
ICogQHNlZSBnZXRUZXJtaW5hdGVkQnVmZmVyKCkKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAq
LwotICBpbmxpbmUgY29uc3QgVUNoYXIgKmdldEJ1ZmZlcigpIGNvbnN0OwotCi0gIC8qKgotICAg
KiBHZXQgYSByZWFkLW9ubHkgcG9pbnRlciB0byB0aGUgaW50ZXJuYWwgYnVmZmVyLAotICAgKiBt
YWtpbmcgc3VyZSB0aGF0IGl0IGlzIE5VTC10ZXJtaW5hdGVkLgotICAgKiBUaGlzIGNhbiBiZSBj
YWxsZWQgYXQgYW55IHRpbWUgb24gYSB2YWxpZCBVbmljb2RlU3RyaW5nLgotICAgKgotICAgKiBJ
dCByZXR1cm5zIDAgaWYgdGhlIHN0cmluZyBpcyBib2d1cywgb3IKLSAgICogZHVyaW5nIGFuICJv
cGVuIiBnZXRCdWZmZXIobWluQ2FwYWNpdHkpLCBvciBpZiB0aGUgYnVmZmVyIGNhbm5vdAotICAg
KiBiZSBOVUwtdGVybWluYXRlZCAoYmVjYXVzZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQpLgot
ICAgKgotICAgKiBJdCBjYW4gYmUgY2FsbGVkIGFzIG1hbnkgdGltZXMgYXMgZGVzaXJlZC4KLSAg
ICogVGhlIHBvaW50ZXIgdGhhdCBpdCByZXR1cm5zIHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIHRo
ZSBVbmljb2RlU3RyaW5nIG9iamVjdCBpcyBtb2RpZmllZCwKLSAgICogYXQgd2hpY2ggdGltZSB0
aGUgcG9pbnRlciBpcyBzZW1hbnRpY2FsbHkgaW52YWxpZGF0ZWQgYW5kIG11c3Qgbm90IGJlIHVz
ZWQgYW55IG1vcmUuCi0gICAqCi0gICAqIFRoZSBjYXBhY2l0eSBvZiB0aGUgYnVmZmVyIGNhbiBi
ZSBkZXRlcm1pbmVkIHdpdGggZ2V0Q2FwYWNpdHkoKS4KLSAgICogVGhlIHBhcnQgYWZ0ZXIgbGVu
Z3RoKCkrMSBtYXkgb3IgbWF5IG5vdCBiZSBpbml0aWFsaXplZCBhbmQgdmFsaWQsCi0gICAqIGRl
cGVuZGluZyBvbiB0aGUgaGlzdG9yeSBvZiB0aGUgVW5pY29kZVN0cmluZyBvYmplY3QuCi0gICAq
Ci0gICAqIFRoZSBidWZmZXIgY29udGVudHMgaXMgZ3VhcmFudGVlZCB0byBiZSBOVUwtdGVybWlu
YXRlZC4KLSAgICogZ2V0VGVybWluYXRlZEJ1ZmZlcigpIG1heSByZWFsbG9jYXRlIHRoZSBidWZm
ZXIgaWYgYSB0ZXJtaW5hdGluZyBOVUwKLSAgICogaXMgd3JpdHRlbi4KLSAgICogRm9yIHRoaXMg
cmVhc29uLCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBjb25zdCwgdW5saWtlIGdldEJ1ZmZlcigpLgot
ICAgKiBOb3RlIHRoYXQgYSBVbmljb2RlU3RyaW5nIG1heSBhbHNvIGNvbnRhaW4gTlVMIGNoYXJh
Y3RlcnMgYXMgcGFydCBvZiBpdHMgY29udGVudHMuCi0gICAqCi0gICAqIFRoZSBidWZmZXIgbWF5
IHJlc2lkZSBpbiByZWFkLW9ubHkgbWVtb3J5LiBJdHMgY29udGVudHMgbXVzdCBub3QKLSAgICog
YmUgbW9kaWZpZWQuCi0gICAqCi0gICAqIEByZXR1cm4gYSByZWFkLW9ubHkgcG9pbnRlciB0byB0
aGUgaW50ZXJuYWwgc3RyaW5nIGJ1ZmZlciwKLSAgICogICAgICAgICBvciAwIGlmIHRoZSBzdHJp
bmcgaXMgZW1wdHkgb3IgYm9ndXMKLSAgICoKLSAgICogQHNlZSBnZXRCdWZmZXIoaW50MzJfdCBt
aW5DYXBhY2l0eSkKLSAgICogQHNlZSBnZXRCdWZmZXIoKQotICAgKiBAc3RhYmxlIElDVSAyLjIK
LSAgICovCi0gIGNvbnN0IFVDaGFyICpnZXRUZXJtaW5hdGVkQnVmZmVyKCk7Ci0KLSAgLy89PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIENvbnN0cnVjdG9ycwot
ICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAvKiogQ29u
c3RydWN0IGFuIGVtcHR5IFVuaWNvZGVTdHJpbmcuCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAg
Ki8KLSAgaW5saW5lIFVuaWNvZGVTdHJpbmcoKTsKLQotICAvKioKLSAgICogQ29uc3RydWN0IGEg
VW5pY29kZVN0cmluZyB3aXRoIGNhcGFjaXR5IHRvIGhvbGQgPFRUPmNhcGFjaXR5PC9UVD4gVUNo
YXJzCi0gICAqIEBwYXJhbSBjYXBhY2l0eSB0aGUgbnVtYmVyIG9mIFVDaGFycyB0aGlzIFVuaWNv
ZGVTdHJpbmcgc2hvdWxkIGhvbGQKLSAgICogYmVmb3JlIGEgcmVzaXplIGlzIG5lY2Vzc2FyeTsg
aWYgY291bnQgaXMgZ3JlYXRlciB0aGFuIDAgYW5kIGNvdW50Ci0gICAqIGNvZGUgcG9pbnRzIGMg
dGFrZSB1cCBtb3JlIHNwYWNlIHRoYW4gY2FwYWNpdHksIHRoZW4gY2FwYWNpdHkgaXMgYWRqdXN0
ZWQKLSAgICogYWNjb3JkaW5nbHkuCi0gICAqIEBwYXJhbSBjIGlzIHVzZWQgdG8gaW5pdGlhbGx5
IGZpbGwgdGhlIHN0cmluZwotICAgKiBAcGFyYW0gY291bnQgc3BlY2lmaWVzIGhvdyBtYW55IGNv
ZGUgcG9pbnRzIGMgYXJlIHRvIGJlIHdyaXR0ZW4gaW4gdGhlCi0gICAqICAgICAgICAgICAgICBz
dHJpbmcKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBVbmljb2RlU3RyaW5nKGludDMy
X3QgY2FwYWNpdHksIFVDaGFyMzIgYywgaW50MzJfdCBjb3VudCk7Ci0KLSAgLyoqCi0gICAqIFNp
bmdsZSBVQ2hhciAoY29kZSB1bml0KSBjb25zdHJ1Y3Rvci4KLSAgICoKLSAgICogSXQgaXMgcmVj
b21tZW5kZWQgdG8gbWFyayB0aGlzIGNvbnN0cnVjdG9yICJleHBsaWNpdCIgYnkKLSAgICogPGNv
ZGU+LURVTklTVFJfRlJPTV9DSEFSX0VYUExJQ0lUPWV4cGxpY2l0PC9jb2RlPgotICAgKiBvbiB0
aGUgY29tcGlsZXIgY29tbWFuZCBsaW5lIG9yIHNpbWlsYXIuCi0gICAqIEBwYXJhbSBjaCB0aGUg
Y2hhcmFjdGVyIHRvIHBsYWNlIGluIHRoZSBVbmljb2RlU3RyaW5nCi0gICAqIEBzdGFibGUgSUNV
IDIuMAotICAgKi8KLSAgVU5JU1RSX0ZST01fQ0hBUl9FWFBMSUNJVCBVbmljb2RlU3RyaW5nKFVD
aGFyIGNoKTsKLQotICAvKioKLSAgICogU2luZ2xlIFVDaGFyMzIgKGNvZGUgcG9pbnQpIGNvbnN0
cnVjdG9yLgotICAgKgotICAgKiBJdCBpcyByZWNvbW1lbmRlZCB0byBtYXJrIHRoaXMgY29uc3Ry
dWN0b3IgImV4cGxpY2l0IiBieQotICAgKiA8Y29kZT4tRFVOSVNUUl9GUk9NX0NIQVJfRVhQTElD
SVQ9ZXhwbGljaXQ8L2NvZGU+Ci0gICAqIG9uIHRoZSBjb21waWxlciBjb21tYW5kIGxpbmUgb3Ig
c2ltaWxhci4KLSAgICogQHBhcmFtIGNoIHRoZSBjaGFyYWN0ZXIgdG8gcGxhY2UgaW4gdGhlIFVu
aWNvZGVTdHJpbmcKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBVTklTVFJfRlJPTV9D
SEFSX0VYUExJQ0lUIFVuaWNvZGVTdHJpbmcoVUNoYXIzMiBjaCk7Ci0KLSAgLyoqCi0gICAqIFVD
aGFyKiBjb25zdHJ1Y3Rvci4KLSAgICoKLSAgICogSXQgaXMgcmVjb21tZW5kZWQgdG8gbWFyayB0
aGlzIGNvbnN0cnVjdG9yICJleHBsaWNpdCIgYnkKLSAgICogPGNvZGU+LURVTklTVFJfRlJPTV9T
VFJJTkdfRVhQTElDSVQ9ZXhwbGljaXQ8L2NvZGU+Ci0gICAqIG9uIHRoZSBjb21waWxlciBjb21t
YW5kIGxpbmUgb3Igc2ltaWxhci4KLSAgICogQHBhcmFtIHRleHQgVGhlIGNoYXJhY3RlcnMgdG8g
cGxhY2UgaW4gdGhlIFVuaWNvZGVTdHJpbmcuICA8VFQ+dGV4dDwvVFQ+Ci0gICAqIG11c3QgYmUg
TlVMTCAoVSswMDAwKSB0ZXJtaW5hdGVkLgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0g
IFVOSVNUUl9GUk9NX1NUUklOR19FWFBMSUNJVCBVbmljb2RlU3RyaW5nKGNvbnN0IFVDaGFyICp0
ZXh0KTsKLQotICAvKioKLSAgICogVUNoYXIqIGNvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0gdGV4
dCBUaGUgY2hhcmFjdGVycyB0byBwbGFjZSBpbiB0aGUgVW5pY29kZVN0cmluZy4KLSAgICogQHBh
cmFtIHRleHRMZW5ndGggVGhlIG51bWJlciBvZiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gPFRUPnRl
eHQ8L1RUPgotICAgKiB0byBjb3B5LgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIFVu
aWNvZGVTdHJpbmcoY29uc3QgVUNoYXIgKnRleHQsCi0gICAgICAgIGludDMyX3QgdGV4dExlbmd0
aCk7Ci0KLSAgLyoqCi0gICAqIFJlYWRvbmx5LWFsaWFzaW5nIFVDaGFyKiBjb25zdHJ1Y3Rvci4K
LSAgICogVGhlIHRleHQgd2lsbCBiZSB1c2VkIGZvciB0aGUgVW5pY29kZVN0cmluZyBvYmplY3Qs
IGJ1dAotICAgKiBpdCB3aWxsIG5vdCBiZSByZWxlYXNlZCB3aGVuIHRoZSBVbmljb2RlU3RyaW5n
IGlzIGRlc3Ryb3llZC4KLSAgICogVGhpcyBoYXMgY29weS1vbi13cml0ZSBzZW1hbnRpY3M6Ci0g
ICAqIFdoZW4gdGhlIHN0cmluZyBpcyBtb2RpZmllZCwgdGhlbiB0aGUgYnVmZmVyIGlzIGZpcnN0
IGNvcGllZCBpbnRvCi0gICAqIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkuCi0gICAqIFRoZSBhbGlh
c2VkIGJ1ZmZlciBpcyBuZXZlciBtb2RpZmllZC4KLSAgICoKLSAgICogSW4gYW4gYXNzaWdubWVu
dCB0byBhbm90aGVyIFVuaWNvZGVTdHJpbmcsIHdoZW4gdXNpbmcgdGhlIGNvcHkgY29uc3RydWN0
b3IKLSAgICogb3IgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IsIHRoZSB0ZXh0IHdpbGwgYmUgY29w
aWVkLgotICAgKiBXaGVuIHVzaW5nIGZhc3RDb3B5RnJvbSgpLCB0aGUgdGV4dCB3aWxsIGJlIGFs
aWFzZWQgYWdhaW4sCi0gICAqIHNvIHRoYXQgYm90aCBzdHJpbmdzIHRoZW4gYWxpYXMgdGhlIHNh
bWUgcmVhZG9ubHktdGV4dC4KLSAgICoKLSAgICogQHBhcmFtIGlzVGVybWluYXRlZCBzcGVjaWZp
ZXMgaWYgPGNvZGU+dGV4dDwvY29kZT4gaXMgPGNvZGU+TlVMPC9jb2RlPi10ZXJtaW5hdGVkLgot
ICAgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgbXVzdCBiZSB0cnVlIGlmIDxjb2RlPnRleHRM
ZW5ndGg9PS0xPC9jb2RlPi4KLSAgICogQHBhcmFtIHRleHQgVGhlIGNoYXJhY3RlcnMgdG8gYWxp
YXMgZm9yIHRoZSBVbmljb2RlU3RyaW5nLgotICAgKiBAcGFyYW0gdGV4dExlbmd0aCBUaGUgbnVt
YmVyIG9mIFVuaWNvZGUgY2hhcmFjdGVycyBpbiA8Y29kZT50ZXh0PC9jb2RlPiB0byBhbGlhcy4K
LSAgICogICAgICAgICAgICAgICAgICAgSWYgLTEsIHRoZW4gdGhpcyBjb25zdHJ1Y3RvciB3aWxs
IGRldGVybWluZSB0aGUgbGVuZ3RoCi0gICAqICAgICAgICAgICAgICAgICAgIGJ5IGNhbGxpbmcg
PGNvZGU+dV9zdHJsZW4oKTwvY29kZT4uCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAg
VW5pY29kZVN0cmluZyhVQm9vbCBpc1Rlcm1pbmF0ZWQsCi0gICAgICAgICAgICAgICAgY29uc3Qg
VUNoYXIgKnRleHQsCi0gICAgICAgICAgICAgICAgaW50MzJfdCB0ZXh0TGVuZ3RoKTsKLQotICAv
KioKLSAgICogV3JpdGFibGUtYWxpYXNpbmcgVUNoYXIqIGNvbnN0cnVjdG9yLgotICAgKiBUaGUg
dGV4dCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBVbmljb2RlU3RyaW5nIG9iamVjdCwgYnV0Ci0gICAq
IGl0IHdpbGwgbm90IGJlIHJlbGVhc2VkIHdoZW4gdGhlIFVuaWNvZGVTdHJpbmcgaXMgZGVzdHJv
eWVkLgotICAgKiBUaGlzIGhhcyB3cml0ZS10aHJvdWdoIHNlbWFudGljczoKLSAgICogRm9yIGFz
IGxvbmcgYXMgdGhlIGNhcGFjaXR5IG9mIHRoZSBidWZmZXIgaXMgc3VmZmljaWVudCwgd3JpdGUg
b3BlcmF0aW9ucwotICAgKiB3aWxsIGRpcmVjdGx5IGFmZmVjdCB0aGUgYnVmZmVyLiBXaGVuIG1v
cmUgY2FwYWNpdHkgaXMgbmVjZXNzYXJ5LCB0aGVuCi0gICAqIGEgbmV3IGJ1ZmZlciB3aWxsIGJl
IGFsbG9jYXRlZCBhbmQgdGhlIGNvbnRlbnRzIGNvcGllZCBhcyB3aXRoIHJlZ3VsYXJseQotICAg
KiBjb25zdHJ1Y3RlZCBzdHJpbmdzLgotICAgKiBJbiBhbiBhc3NpZ25tZW50IHRvIGFub3RoZXIg
VW5pY29kZVN0cmluZywgdGhlIGJ1ZmZlciB3aWxsIGJlIGNvcGllZC4KLSAgICogVGhlIGV4dHJh
Y3QoVUNoYXIgKmRzdCkgZnVuY3Rpb24gZGV0ZWN0cyB3aGV0aGVyIHRoZSBkc3QgcG9pbnRlciBp
cyB0aGUgc2FtZQotICAgKiBhcyB0aGUgc3RyaW5nIGJ1ZmZlciBpdHNlbGYgYW5kIHdpbGwgaW4g
dGhpcyBjYXNlIG5vdCBjb3B5IHRoZSBjb250ZW50cy4KLSAgICoKLSAgICogQHBhcmFtIGJ1ZmZl
ciBUaGUgY2hhcmFjdGVycyB0byBhbGlhcyBmb3IgdGhlIFVuaWNvZGVTdHJpbmcuCi0gICAqIEBw
YXJhbSBidWZmTGVuZ3RoIFRoZSBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGluIDxjb2Rl
PmJ1ZmZlcjwvY29kZT4gdG8gYWxpYXMuCi0gICAqIEBwYXJhbSBidWZmQ2FwYWNpdHkgVGhlIHNp
emUgb2YgPGNvZGU+YnVmZmVyPC9jb2RlPiBpbiBVQ2hhcnMuCi0gICAqIEBzdGFibGUgSUNVIDIu
MAotICAgKi8KLSAgVW5pY29kZVN0cmluZyhVQ2hhciAqYnVmZmVyLCBpbnQzMl90IGJ1ZmZMZW5n
dGgsIGludDMyX3QgYnVmZkNhcGFjaXR5KTsKLQotI2lmIFVfQ0hBUlNFVF9JU19VVEY4IHx8ICFV
Q09ORklHX05PX0NPTlZFUlNJT04KLQotICAvKioKLSAgICogY2hhciogY29uc3RydWN0b3IuCi0g
ICAqIFVzZXMgdGhlIGRlZmF1bHQgY29udmVydGVyIChhbmQgdGh1cyBkZXBlbmRzIG9uIHRoZSBJ
Q1UgY29udmVyc2lvbiBjb2RlKQotICAgKiB1bmxlc3MgVV9DSEFSU0VUX0lTX1VURjggaXMgc2V0
IHRvIDEuCi0gICAqCi0gICAqIEZvciBBU0NJSSAocmVhbGx5ICJpbnZhcmlhbnQgY2hhcmFjdGVy
Iikgc3RyaW5ncyBpdCBpcyBtb3JlIGVmZmljaWVudCB0byB1c2UKLSAgICogdGhlIGNvbnN0cnVj
dG9yIHRoYXQgdGFrZXMgYSBVU19JTlYgKGZvciBpdHMgZW51bSBFSW52YXJpYW50KS4KLSAgICog
Rm9yIEFTQ0lJIChpbnZhcmlhbnQtY2hhcmFjdGVyKSBzdHJpbmcgbGl0ZXJhbHMsIHNlZSBVTklD
T0RFX1NUUklORyBhbmQKLSAgICogVU5JQ09ERV9TVFJJTkdfU0lNUExFLgotICAgKgotICAgKiBJ
dCBpcyByZWNvbW1lbmRlZCB0byBtYXJrIHRoaXMgY29uc3RydWN0b3IgImV4cGxpY2l0IiBieQot
ICAgKiA8Y29kZT4tRFVOSVNUUl9GUk9NX1NUUklOR19FWFBMSUNJVD1leHBsaWNpdDwvY29kZT4K
LSAgICogb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZSBvciBzaW1pbGFyLgotICAgKiBAcGFy
YW0gY29kZXBhZ2VEYXRhIGFuIGFycmF5IG9mIGJ5dGVzLCBudWxsLXRlcm1pbmF0ZWQsCi0gICAq
ICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHBsYXRmb3JtJ3MgZGVmYXVsdCBjb2RlcGFnZS4K
LSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqIEBzZWUgVU5JQ09ERV9TVFJJTkcKLSAgICogQHNl
ZSBVTklDT0RFX1NUUklOR19TSU1QTEUKLSAgICovCi0gIFVOSVNUUl9GUk9NX1NUUklOR19FWFBM
SUNJVCBVbmljb2RlU3RyaW5nKGNvbnN0IGNoYXIgKmNvZGVwYWdlRGF0YSk7Ci0KLSAgLyoqCi0g
ICAqIGNoYXIqIGNvbnN0cnVjdG9yLgotICAgKiBVc2VzIHRoZSBkZWZhdWx0IGNvbnZlcnRlciAo
YW5kIHRodXMgZGVwZW5kcyBvbiB0aGUgSUNVIGNvbnZlcnNpb24gY29kZSkKLSAgICogdW5sZXNz
IFVfQ0hBUlNFVF9JU19VVEY4IGlzIHNldCB0byAxLgotICAgKiBAcGFyYW0gY29kZXBhZ2VEYXRh
IGFuIGFycmF5IG9mIGJ5dGVzIGluIHRoZSBwbGF0Zm9ybSdzIGRlZmF1bHQgY29kZXBhZ2UuCi0g
ICAqIEBwYXJhbSBkYXRhTGVuZ3RoIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gPFRUPmNvZGVwYWdl
RGF0YTwvVFQ+LgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIFVuaWNvZGVTdHJpbmco
Y29uc3QgY2hhciAqY29kZXBhZ2VEYXRhLCBpbnQzMl90IGRhdGFMZW5ndGgpOwotCi0jZW5kaWYK
LQotI2lmICFVQ09ORklHX05PX0NPTlZFUlNJT04KLQotICAvKioKLSAgICogY2hhciogY29uc3Ry
dWN0b3IuCi0gICAqIEBwYXJhbSBjb2RlcGFnZURhdGEgYW4gYXJyYXkgb2YgYnl0ZXMsIG51bGwt
dGVybWluYXRlZAotICAgKiBAcGFyYW0gY29kZXBhZ2UgdGhlIGVuY29kaW5nIG9mIDxUVD5jb2Rl
cGFnZURhdGE8L1RUPi4gIFRoZSBzcGVjaWFsCi0gICAqIHZhbHVlIDAgZm9yIDxUVD5jb2RlcGFn
ZTwvVFQ+IGluZGljYXRlcyB0aGF0IHRoZSB0ZXh0IGlzIGluIHRoZQotICAgKiBwbGF0Zm9ybSdz
IGRlZmF1bHQgY29kZXBhZ2UuCi0gICAqCi0gICAqIElmIDxjb2RlPmNvZGVwYWdlPC9jb2RlPiBp
cyBhbiBlbXB0eSBzdHJpbmcgKDxjb2RlPiIiPC9jb2RlPiksCi0gICAqIHRoZW4gYSBzaW1wbGUg
Y29udmVyc2lvbiBpcyBwZXJmb3JtZWQgb24gdGhlIGNvZGVwYWdlLWludmFyaWFudAotICAgKiBz
dWJzZXQgKCJpbnZhcmlhbnQgY2hhcmFjdGVycyIpIG9mIHRoZSBwbGF0Zm9ybSBlbmNvZGluZy4g
U2VlIHV0eXBlcy5oLgotICAgKiBSZWNvbW1lbmRhdGlvbjogRm9yIGludmFyaWFudC1jaGFyYWN0
ZXIgc3RyaW5ncyB1c2UgdGhlIGNvbnN0cnVjdG9yCi0gICAqIFVuaWNvZGVTdHJpbmcoY29uc3Qg
Y2hhciAqc3JjLCBpbnQzMl90IGxlbmd0aCwgZW51bSBFSW52YXJpYW50IGludikKLSAgICogYmVj
YXVzZSBpdCBhdm9pZHMgb2JqZWN0IGNvZGUgZGVwZW5kZW5jaWVzIG9mIFVuaWNvZGVTdHJpbmcg
b24KLSAgICogdGhlIGNvbnZlcnNpb24gY29kZS4KLSAgICoKLSAgICogQHN0YWJsZSBJQ1UgMi4w
Ci0gICAqLwotICBVbmljb2RlU3RyaW5nKGNvbnN0IGNoYXIgKmNvZGVwYWdlRGF0YSwgY29uc3Qg
Y2hhciAqY29kZXBhZ2UpOwotCi0gIC8qKgotICAgKiBjaGFyKiBjb25zdHJ1Y3Rvci4KLSAgICog
QHBhcmFtIGNvZGVwYWdlRGF0YSBhbiBhcnJheSBvZiBieXRlcy4KLSAgICogQHBhcmFtIGRhdGFM
ZW5ndGggVGhlIG51bWJlciBvZiBieXRlcyBpbiA8VFQ+Y29kZXBhZ2VEYXRhPC9UVD4uCi0gICAq
IEBwYXJhbSBjb2RlcGFnZSB0aGUgZW5jb2Rpbmcgb2YgPFRUPmNvZGVwYWdlRGF0YTwvVFQ+LiAg
VGhlIHNwZWNpYWwKLSAgICogdmFsdWUgMCBmb3IgPFRUPmNvZGVwYWdlPC9UVD4gaW5kaWNhdGVz
IHRoYXQgdGhlIHRleHQgaXMgaW4gdGhlCi0gICAqIHBsYXRmb3JtJ3MgZGVmYXVsdCBjb2RlcGFn
ZS4KLSAgICogSWYgPGNvZGU+Y29kZXBhZ2U8L2NvZGU+IGlzIGFuIGVtcHR5IHN0cmluZyAoPGNv
ZGU+IiI8L2NvZGU+KSwKLSAgICogdGhlbiBhIHNpbXBsZSBjb252ZXJzaW9uIGlzIHBlcmZvcm1l
ZCBvbiB0aGUgY29kZXBhZ2UtaW52YXJpYW50Ci0gICAqIHN1YnNldCAoImludmFyaWFudCBjaGFy
YWN0ZXJzIikgb2YgdGhlIHBsYXRmb3JtIGVuY29kaW5nLiBTZWUgdXR5cGVzLmguCi0gICAqIFJl
Y29tbWVuZGF0aW9uOiBGb3IgaW52YXJpYW50LWNoYXJhY3RlciBzdHJpbmdzIHVzZSB0aGUgY29u
c3RydWN0b3IKLSAgICogVW5pY29kZVN0cmluZyhjb25zdCBjaGFyICpzcmMsIGludDMyX3QgbGVu
Z3RoLCBlbnVtIEVJbnZhcmlhbnQgaW52KQotICAgKiBiZWNhdXNlIGl0IGF2b2lkcyBvYmplY3Qg
Y29kZSBkZXBlbmRlbmNpZXMgb2YgVW5pY29kZVN0cmluZyBvbgotICAgKiB0aGUgY29udmVyc2lv
biBjb2RlLgotICAgKgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICovCi0gIFVuaWNvZGVTdHJp
bmcoY29uc3QgY2hhciAqY29kZXBhZ2VEYXRhLCBpbnQzMl90IGRhdGFMZW5ndGgsIGNvbnN0IGNo
YXIgKmNvZGVwYWdlKTsKLQotICAvKioKLSAgICogY2hhciAqIC8gVUNvbnZlcnRlciBjb25zdHJ1
Y3Rvci4KLSAgICogVGhpcyBjb25zdHJ1Y3RvciB1c2VzIGFuIGV4aXN0aW5nIFVDb252ZXJ0ZXIg
b2JqZWN0IHRvCi0gICAqIGNvbnZlcnQgdGhlIGNvZGVwYWdlIHN0cmluZyB0byBVbmljb2RlIGFu
ZCBjb25zdHJ1Y3QgYSBVbmljb2RlU3RyaW5nCi0gICAqIGZyb20gdGhhdC4KLSAgICoKLSAgICog
VGhlIGNvbnZlcnRlciBpcyByZXNldCBhdCBmaXJzdC4KLSAgICogSWYgdGhlIGVycm9yIGNvZGUg
aW5kaWNhdGVzIGEgZmFpbHVyZSBiZWZvcmUgdGhpcyBjb25zdHJ1Y3RvciBpcyBjYWxsZWQsCi0g
ICAqIG9yIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgY29udmVyc2lvbiBvciBjb25zdHJ1Y3Rp
b24sCi0gICAqIHRoZW4gdGhlIHN0cmluZyB3aWxsIGJlIGJvZ3VzLgotICAgKgotICAgKiBUaGlz
IGZ1bmN0aW9uIGF2b2lkcyB0aGUgb3ZlcmhlYWQgb2Ygb3BlbmluZyBhbmQgY2xvc2luZyBhIGNv
bnZlcnRlciBpZgotICAgKiBtdWx0aXBsZSBzdHJpbmdzIGFyZSBjb25zdHJ1Y3RlZC4KLSAgICoK
LSAgICogQHBhcmFtIHNyYyBpbnB1dCBjb2RlcGFnZSBzdHJpbmcKLSAgICogQHBhcmFtIHNyY0xl
bmd0aCBsZW5ndGggb2YgdGhlIGlucHV0IHN0cmluZywgY2FuIGJlIC0xIGZvciBOVUwtdGVybWlu
YXRlZCBzdHJpbmdzCi0gICAqIEBwYXJhbSBjbnYgY29udmVydGVyIG9iamVjdCAodWNudl9yZXNl
dFRvVW5pY29kZSgpIHdpbGwgYmUgY2FsbGVkKSwKLSAgICogICAgICAgIGNhbiBiZSBOVUxMIGZv
ciB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIKLSAgICogQHBhcmFtIGVycm9yQ29kZSBub3JtYWwgSUNV
IGVycm9yIGNvZGUKLSAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAqLwotICBVbmljb2RlU3RyaW5n
KAotICAgICAgICBjb25zdCBjaGFyICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLAotICAgICAgICBV
Q29udmVydGVyICpjbnYsCi0gICAgICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7Ci0KLSNlbmRp
ZgotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgVW5pY29kZSBzdHJpbmcgZnJvbSBhbiBpbnZh
cmlhbnQtY2hhcmFjdGVyIGNoYXIgKiBzdHJpbmcuCi0gICAqIEFib3V0IGludmFyaWFudCBjaGFy
YWN0ZXJzIHNlZSB1dHlwZXMuaC4KLSAgICogVGhpcyBjb25zdHJ1Y3RvciBoYXMgbm8gcnVudGlt
ZSBkZXBlbmRlbmN5IG9uIGNvbnZlcnNpb24gY29kZSBhbmQgaXMKLSAgICogdGhlcmVmb3JlIHJl
Y29tbWVuZGVkIG92ZXIgb25lcyB0YWtpbmcgYSBjaGFyc2V0IG5hbWUgc3RyaW5nCi0gICAqICh3
aGVyZSB0aGUgZW1wdHkgc3RyaW5nICIiIGluZGljYXRlcyBpbnZhcmlhbnQtY2hhcmFjdGVyIGNv
bnZlcnNpb24pLgotICAgKgotICAgKiBVc2UgdGhlIG1hY3JvIFVTX0lOViBhcyB0aGUgdGhpcmQs
IHNpZ25hdHVyZS1kaXN0aW5ndWlzaGluZyBwYXJhbWV0ZXIuCi0gICAqCi0gICAqIEZvciBleGFt
cGxlOgotICAgKiBcY29kZQotICAgKiB2b2lkIGZuKGNvbnN0IGNoYXIgKnMpIHsKLSAgICogICBV
bmljb2RlU3RyaW5nIHVzdHIocywgLTEsIFVTX0lOVik7Ci0gICAqICAgLy8gdXNlIHVzdHIgLi4u
Ci0gICAqIH0KLSAgICogXGVuZGNvZGUKLSAgICoKLSAgICogQHBhcmFtIHNyYyBTdHJpbmcgdXNp
bmcgb25seSBpbnZhcmlhbnQgY2hhcmFjdGVycy4KLSAgICogQHBhcmFtIGxlbmd0aCBMZW5ndGgg
b2Ygc3JjLCBvciAtMSBpZiBOVUwtdGVybWluYXRlZC4KLSAgICogQHBhcmFtIGludiBTaWduYXR1
cmUtZGlzdGluZ3Vpc2hpbmcgcGFyYW1hdGVyLCB1c2UgVVNfSU5WLgotICAgKgotICAgKiBAc2Vl
IFVTX0lOVgotICAgKiBAc3RhYmxlIElDVSAzLjIKLSAgICovCi0gIFVuaWNvZGVTdHJpbmcoY29u
c3QgY2hhciAqc3JjLCBpbnQzMl90IGxlbmd0aCwgZW51bSBFSW52YXJpYW50IGludik7Ci0KLQot
ICAvKioKLSAgICogQ29weSBjb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIHRoYXQgVGhlIFVuaWNv
ZGVTdHJpbmcgb2JqZWN0IHRvIGNvcHkuCi0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAg
VW5pY29kZVN0cmluZyhjb25zdCBVbmljb2RlU3RyaW5nJiB0aGF0KTsKLQotICAvKioKLSAgICog
J1N1YnN0cmluZycgY29uc3RydWN0b3IgZnJvbSB0YWlsIG9mIHNvdXJjZSBzdHJpbmcuCi0gICAq
IEBwYXJhbSBzcmMgVGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0IHRvIGNvcHkuCi0gICAqIEBwYXJh
bSBzcmNTdGFydCBUaGUgb2Zmc2V0IGludG8gPHR0PnNyYzwvdHQ+IGF0IHdoaWNoIHRvIHN0YXJ0
IGNvcHlpbmcuCi0gICAqIEBzdGFibGUgSUNVIDIuMgotICAgKi8KLSAgVW5pY29kZVN0cmluZyhj
b25zdCBVbmljb2RlU3RyaW5nJiBzcmMsIGludDMyX3Qgc3JjU3RhcnQpOwotCi0gIC8qKgotICAg
KiAnU3Vic3RyaW5nJyBjb25zdHJ1Y3RvciBmcm9tIHN1YnJhbmdlIG9mIHNvdXJjZSBzdHJpbmcu
Ci0gICAqIEBwYXJhbSBzcmMgVGhlIFVuaWNvZGVTdHJpbmcgb2JqZWN0IHRvIGNvcHkuCi0gICAq
IEBwYXJhbSBzcmNTdGFydCBUaGUgb2Zmc2V0IGludG8gPHR0PnNyYzwvdHQ+IGF0IHdoaWNoIHRv
IHN0YXJ0IGNvcHlpbmcuCi0gICAqIEBwYXJhbSBzcmNMZW5ndGggVGhlIG51bWJlciBvZiBjaGFy
YWN0ZXJzIGZyb20gPHR0PnNyYzwvdHQ+IHRvIGNvcHkuCi0gICAqIEBzdGFibGUgSUNVIDIuMgot
ICAgKi8KLSAgVW5pY29kZVN0cmluZyhjb25zdCBVbmljb2RlU3RyaW5nJiBzcmMsIGludDMyX3Qg
c3JjU3RhcnQsIGludDMyX3Qgc3JjTGVuZ3RoKTsKLQotICAvKioKLSAgICogQ2xvbmUgdGhpcyBv
YmplY3QsIGFuIGluc3RhbmNlIG9mIGEgc3ViY2xhc3Mgb2YgUmVwbGFjZWFibGUuCi0gICAqIENs
b25lcyBjYW4gYmUgdXNlZCBjb25jdXJyZW50bHkgaW4gbXVsdGlwbGUgdGhyZWFkcy4KLSAgICog
SWYgYSBzdWJjbGFzcyBkb2VzIG5vdCBpbXBsZW1lbnQgY2xvbmUoKSwgb3IgaWYgYW4gZXJyb3Ig
b2NjdXJzLAotICAgKiB0aGVuIE5VTEwgaXMgcmV0dXJuZWQuCi0gICAqIFRoZSBjbG9uZSBmdW5j
dGlvbnMgaW4gYWxsIHN1YmNsYXNzZXMgcmV0dXJuIGEgcG9pbnRlciB0byBhIFJlcGxhY2VhYmxl
Ci0gICAqIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgZG8gbm90IHN1cHBvcnQgY292YXJpYW50IChz
YW1lLWFzLXRoaXMpCi0gICAqIHJldHVybiB0eXBlczsgY2FzdCB0byB0aGUgYXBwcm9wcmlhdGUg
c3ViY2xhc3MgaWYgbmVjZXNzYXJ5LgotICAgKiBUaGUgY2FsbGVyIG11c3QgZGVsZXRlIHRoZSBj
bG9uZS4KLSAgICoKLSAgICogQHJldHVybiBhIGNsb25lIG9mIHRoaXMgb2JqZWN0Ci0gICAqCi0g
ICAqIEBzZWUgUmVwbGFjZWFibGU6OmNsb25lCi0gICAqIEBzZWUgZ2V0RHluYW1pY0NsYXNzSUQK
LSAgICogQHN0YWJsZSBJQ1UgMi42Ci0gICAqLwotICB2aXJ0dWFsIFJlcGxhY2VhYmxlICpjbG9u
ZSgpIGNvbnN0OwotCi0gIC8qKiBEZXN0cnVjdG9yLgotICAgKiBAc3RhYmxlIElDVSAyLjAKLSAg
ICovCi0gIHZpcnR1YWwgflVuaWNvZGVTdHJpbmcoKTsKLQotICAvKioKLSAgICogQ3JlYXRlIGEg
VW5pY29kZVN0cmluZyBmcm9tIGEgVVRGLTggc3RyaW5nLgotICAgKiBJbGxlZ2FsIGlucHV0IGlz
IHJlcGxhY2VkIHdpdGggVStGRkZELiBPdGhlcndpc2UsIGVycm9ycyByZXN1bHQgaW4gYSBib2d1
cyBzdHJpbmcuCi0gICAqIENhbGxzIHVfc3RyRnJvbVVURjhXaXRoU3ViKCkuCi0gICAqCi0gICAq
IEBwYXJhbSB1dGY4IFVURi04IGlucHV0IHN0cmluZy4KLSAgICogICAgICAgICAgICAgTm90ZSB0
aGF0IGEgU3RyaW5nUGllY2UgY2FuIGJlIGltcGxpY2l0bHkgY29uc3RydWN0ZWQKLSAgICogICAg
ICAgICAgICAgZnJvbSBhIHN0ZDo6c3RyaW5nIG9yIGEgTlVMLXRlcm1pbmF0ZWQgY29uc3QgY2hh
ciAqIHN0cmluZy4KLSAgICogQHJldHVybiBBIFVuaWNvZGVTdHJpbmcgd2l0aCBlcXVpdmFsZW50
IFVURi0xNiBjb250ZW50cy4KLSAgICogQHNlZSB0b1VURjgKLSAgICogQHNlZSB0b1VURjhTdHJp
bmcKLSAgICogQHN0YWJsZSBJQ1UgNC4yCi0gICAqLwotICBzdGF0aWMgVW5pY29kZVN0cmluZyBm
cm9tVVRGOChjb25zdCBTdHJpbmdQaWVjZSAmdXRmOCk7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBh
IFVuaWNvZGVTdHJpbmcgZnJvbSBhIFVURi0zMiBzdHJpbmcuCi0gICAqIElsbGVnYWwgaW5wdXQg
aXMgcmVwbGFjZWQgd2l0aCBVK0ZGRkQuIE90aGVyd2lzZSwgZXJyb3JzIHJlc3VsdCBpbiBhIGJv
Z3VzIHN0cmluZy4KLSAgICogQ2FsbHMgdV9zdHJGcm9tVVRGMzJXaXRoU3ViKCkuCi0gICAqCi0g
ICAqIEBwYXJhbSB1dGYzMiBVVEYtMzIgaW5wdXQgc3RyaW5nLiBNdXN0IG5vdCBiZSBOVUxMLgot
ICAgKiBAcGFyYW0gbGVuZ3RoIExlbmd0aCBvZiB0aGUgaW5wdXQgc3RyaW5nLCBvciAtMSBpZiBO
VUwtdGVybWluYXRlZC4KLSAgICogQHJldHVybiBBIFVuaWNvZGVTdHJpbmcgd2l0aCBlcXVpdmFs
ZW50IFVURi0xNiBjb250ZW50cy4KLSAgICogQHNlZSB0b1VURjMyCi0gICAqIEBzdGFibGUgSUNV
IDQuMgotICAgKi8KLSAgc3RhdGljIFVuaWNvZGVTdHJpbmcgZnJvbVVURjMyKGNvbnN0IFVDaGFy
MzIgKnV0ZjMyLCBpbnQzMl90IGxlbmd0aCk7Ci0KLSAgLyogTWlzY2VsbGFuZW91cyBvcGVyYXRp
b25zICovCi0KLSAgLyoqCi0gICAqIFVuZXNjYXBlIGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgYW5k
IHJldHVybiBhIHN0cmluZyBjb250YWluaW5nCi0gICAqIHRoZSByZXN1bHQuICBUaGUgZm9sbG93
aW5nIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIHJlY29nbml6ZWQ6Ci0gICAqCi0gICAqIFxcdWhoaGgg
ICAgICAgNCBoZXggZGlnaXRzOyBoIGluIFswLTlBLUZhLWZdCi0gICAqIFxcVWhoaGhoaGhoICAg
OCBoZXggZGlnaXRzCi0gICAqIFxceGhoICAgICAgICAgMS0yIGhleCBkaWdpdHMKLSAgICogXFxv
b28gICAgICAgICAxLTMgb2N0YWwgZGlnaXRzOyBvIGluIFswLTddCi0gICAqIFxcY1ggICAgICAg
ICAgY29udHJvbC1YOyBYIGlzIG1hc2tlZCB3aXRoIDB4MUYKLSAgICoKLSAgICogYXMgd2VsbCBh
cyB0aGUgc3RhbmRhcmQgQU5TSSBDIGVzY2FwZXM6Ci0gICAqCi0gICAqIFxcYSA9PiBVKzAwMDcs
IFxcYiA9PiBVKzAwMDgsIFxcdCA9PiBVKzAwMDksIFxcbiA9PiBVKzAwMEEsCi0gICAqIFxcdiA9
PiBVKzAwMEIsIFxcZiA9PiBVKzAwMEMsIFxcciA9PiBVKzAwMEQsIFxcZSA9PiBVKzAwMUIsCi0g
ICAqIFxcJnF1b3Q7ID0+IFUrMDAyMiwgXFwnID0+IFUrMDAyNywgXFw/ID0+IFUrMDAzRiwgXFxc
XCA9PiBVKzAwNUMKLSAgICoKLSAgICogQW55dGhpbmcgZWxzZSBmb2xsb3dpbmcgYSBiYWNrc2xh
c2ggaXMgZ2VuZXJpY2FsbHkgZXNjYXBlZC4gIEZvcgotICAgKiBleGFtcGxlLCAiW2FcXC16XSIg
cmV0dXJucyAiW2Etel0iLgotICAgKgotICAgKiBJZiBhbiBlc2NhcGUgc2VxdWVuY2UgaXMgaWxs
LWZvcm1lZCwgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBlbXB0eQotICAgKiBzdHJpbmcuICBBbiBl
eGFtcGxlIG9mIGFuIGlsbC1mb3JtZWQgc2VxdWVuY2UgaXMgIlxcdSIgZm9sbG93ZWQgYnkKLSAg
ICogZmV3ZXIgdGhhbiA0IGhleCBkaWdpdHMuCi0gICAqCi0gICAqIFRoaXMgZnVuY3Rpb24gaXMg
c2ltaWxhciB0byB1X3VuZXNjYXBlKCkgYnV0IG5vdCBpZGVudGljYWwgdG8gaXQuCi0gICAqIFRo
ZSBsYXR0ZXIgdGFrZXMgYSBzb3VyY2UgY2hhciosIHNvIGl0IGRvZXMgZXNjYXBlIHJlY29nbml0
aW9uCi0gICAqIGFuZCBhbHNvIGludmFyaWFudCBjb252ZXJzaW9uLgotICAgKgotICAgKiBAcmV0
dXJuIGEgc3RyaW5nIHdpdGggYmFja3NsYXNoIGVzY2FwZXMgaW50ZXJwcmV0ZWQsIG9yIGFuCi0g
ICAqIGVtcHR5IHN0cmluZyBvbiBlcnJvci4KLSAgICogQHNlZSBVbmljb2RlU3RyaW5nI3VuZXNj
YXBlQXQoKQotICAgKiBAc2VlIHVfdW5lc2NhcGUoKQotICAgKiBAc2VlIHVfdW5lc2NhcGVBdCgp
Ci0gICAqIEBzdGFibGUgSUNVIDIuMAotICAgKi8KLSAgVW5pY29kZVN0cmluZyB1bmVzY2FwZSgp
IGNvbnN0OwotCi0gIC8qKgotICAgKiBVbmVzY2FwZSBhIHNpbmdsZSBlc2NhcGUgc2VxdWVuY2Ug
YW5kIHJldHVybiB0aGUgcmVwcmVzZW50ZWQKLSAgICogY2hhcmFjdGVyLiAgU2VlIHVuZXNjYXBl
KCkgZm9yIGEgbGlzdGluZyBvZiB0aGUgcmVjb2duaXplZCBlc2NhcGUKLSAgICogc2VxdWVuY2Vz
LiAgVGhlIGNoYXJhY3RlciBhdCBvZmZzZXQtMSBpcyBhc3N1bWVkICh3aXRob3V0Ci0gICAqIGNo
ZWNraW5nKSB0byBiZSBhIGJhY2tzbGFzaC4gIElmIHRoZSBlc2NhcGUgc2VxdWVuY2UgaXMKLSAg
ICogaWxsLWZvcm1lZCwgb3IgdGhlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UsIFVfU0VOVElORUw9
LTEgaXMKLSAgICogcmV0dXJuZWQuCi0gICAqCi0gICAqIEBwYXJhbSBvZmZzZXQgYW4gaW5wdXQg
b3V0cHV0IHBhcmFtZXRlci4gIE9uIGlucHV0LCBpdCBpcyB0aGUKLSAgICogb2Zmc2V0IGludG8g
dGhpcyBzdHJpbmcgd2hlcmUgdGhlIGVzY2FwZSBzZXF1ZW5jZSBpcyBsb2NhdGVkLAotICAgKiBh
ZnRlciB0aGUgaW5pdGlhbCBiYWNrc2xhc2guICBPbiBvdXRwdXQsIGl0IGlzIGFkdmFuY2VkIGFm
dGVyIHRoZQotICAgKiBsYXN0IGNoYXJhY3RlciBwYXJzZWQuICBPbiBlcnJvciwgaXQgaXMgbm90
IGFkdmFuY2VkIGF0IGFsbC4KLSAgICogQHJldHVybiB0aGUgY2hhcmFjdGVyIHJlcHJlc2VudGVk
IGJ5IHRoZSBlc2NhcGUgc2VxdWVuY2UgYXQKLSAgICogb2Zmc2V0LCBvciBVX1NFTlRJTkVMPS0x
IG9uIGVycm9yLgotICAgKiBAc2VlIFVuaWNvZGVTdHJpbmcjdW5lc2NhcGUoKQotICAgKiBAc2Vl
IHVfdW5lc2NhcGUoKQotICAgKiBAc2VlIHVfdW5lc2NhcGVBdCgpCi0gICAqIEBzdGFibGUgSUNV
IDIuMAotICAgKi8KLSAgVUNoYXIzMiB1bmVzY2FwZUF0KGludDMyX3QgJm9mZnNldCkgY29uc3Q7
Ci0KLSAgLyoqCi0gICAqIElDVSAicG9vciBtYW4ncyBSVFRJIiwgcmV0dXJucyBhIFVDbGFzc0lE
IGZvciB0aGlzIGNsYXNzLgotICAgKgotICAgKiBAc3RhYmxlIElDVSAyLjIKLSAgICovCi0gIHN0
YXRpYyBVQ2xhc3NJRCBVX0VYUE9SVDIgZ2V0U3RhdGljQ2xhc3NJRCgpOwotCi0gIC8qKgotICAg
KiBJQ1UgInBvb3IgbWFuJ3MgUlRUSSIsIHJldHVybnMgYSBVQ2xhc3NJRCBmb3IgdGhlIGFjdHVh
bCBjbGFzcy4KLSAgICoKLSAgICogQHN0YWJsZSBJQ1UgMi4yCi0gICAqLwotICB2aXJ0dWFsIFVD
bGFzc0lEIGdldER5bmFtaWNDbGFzc0lEKCkgY29uc3Q7Ci0KLSAgLy89PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEltcGxlbWVudGF0aW9uIG1ldGhvZHMKLSAg
Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXByb3RlY3RlZDoK
LSAgLyoqCi0gICAqIEltcGxlbWVudCBSZXBsYWNlYWJsZTo6Z2V0TGVuZ3RoKCkgKHNlZSBqaXR0
ZXJidWcgMTAyNykuCi0gICAqIEBzdGFibGUgSUNVIDIuNAotICAgKi8KLSAgdmlydHVhbCBpbnQz
Ml90IGdldExlbmd0aCgpIGNvbnN0OwotCi0gIC8qKgotICAgKiBUaGUgY2hhbmdlIGluIFJlcGxh
Y2VhYmxlIHRvIHVzZSB2aXJ0dWFsIGdldENoYXJBdCgpIGFsbG93cwotICAgKiBVbmljb2RlU3Ry
aW5nOjpjaGFyQXQoKSB0byBiZSBpbmxpbmUgYWdhaW4gKHNlZSBqaXR0ZXJidWcgNzA5KS4KLSAg
ICogQHN0YWJsZSBJQ1UgMi40Ci0gICAqLwotICB2aXJ0dWFsIFVDaGFyIGdldENoYXJBdChpbnQz
Ml90IG9mZnNldCkgY29uc3Q7Ci0KLSAgLyoqCi0gICAqIFRoZSBjaGFuZ2UgaW4gUmVwbGFjZWFi
bGUgdG8gdXNlIHZpcnR1YWwgZ2V0Q2hhcjMyQXQoKSBhbGxvd3MKLSAgICogVW5pY29kZVN0cmlu
Zzo6Y2hhcjMyQXQoKSB0byBiZSBpbmxpbmUgYWdhaW4gKHNlZSBqaXR0ZXJidWcgNzA5KS4KLSAg
ICogQHN0YWJsZSBJQ1UgMi40Ci0gICAqLwotICB2aXJ0dWFsIFVDaGFyMzIgZ2V0Q2hhcjMyQXQo
aW50MzJfdCBvZmZzZXQpIGNvbnN0OwotCi1wcml2YXRlOgotICAvLyBGb3IgY2hhciogY29uc3Ry
dWN0b3JzLiBDb3VsZCBiZSBtYWRlIHB1YmxpYy4KLSAgVW5pY29kZVN0cmluZyAmc2V0VG9VVEY4
KGNvbnN0IFN0cmluZ1BpZWNlICZ1dGY4KTsKLSAgLy8gRm9yIGV4dHJhY3QoY2hhciopLgotICAv
LyBXZSBjb3VsZCBtYWtlIGEgdG9VVEY4KHRhcmdldCwgY2FwYWNpdHksIGVycm9yQ29kZSkgcHVi
bGljIGJ1dCBub3QKLSAgLy8gdGhpcyB2ZXJzaW9uOiBOZXcgQVBJIHdpbGwgYmUgY2xlYW5lciBp
ZiB3ZSBtYWtlIGNhbGxlcnMgY3JlYXRlIHN1YnN0cmluZ3MKLSAgLy8gcmF0aGVyIHRoYW4gaGF2
aW5nIHN0YXJ0K2xlbmd0aCBvbiBldmVyeSBtZXRob2QsCi0gIC8vIGFuZCBpdCBzaG91bGQgdGFr
ZSBhIFVFcnJvckNvZGUmLgotICBpbnQzMl90Ci0gIHRvVVRGOChpbnQzMl90IHN0YXJ0LCBpbnQz
Ml90IGxlbiwKLSAgICAgICAgIGNoYXIgKnRhcmdldCwgaW50MzJfdCBjYXBhY2l0eSkgY29uc3Q7
Ci0KLSAgLyoqCi0gICAqIEludGVybmFsIHN0cmluZyBjb250ZW50cyBjb21wYXJpc29uLCBjYWxs
ZWQgYnkgb3BlcmF0b3I9PS4KLSAgICogUmVxdWlyZXM6IHRoaXMgJiB0ZXh0IG5vdCBib2d1cyBh
bmQgaGF2ZSBzYW1lIGxlbmd0aHMuCi0gICAqLwotICBVQm9vbCBkb0VxdWFscyhjb25zdCBVbmlj
b2RlU3RyaW5nICZ0ZXh0LCBpbnQzMl90IGxlbikgY29uc3Q7Ci0KLSAgaW5saW5lIGludDhfdAot
ICBkb0NvbXBhcmUoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsCi0g
ICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQsCi0gICAgICAgICAgIGludDMy
X3Qgc3JjU3RhcnQsCi0gICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsKLQotICBp
bnQ4X3QgZG9Db21wYXJlKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgIGludDMyX3QgbGVuZ3Ro
LAotICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjQ2hhcnMsCi0gICAgICAgICAgIGludDMyX3Qg
c3JjU3RhcnQsCi0gICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsKLQotICBpbmxp
bmUgaW50OF90Ci0gIGRvQ29tcGFyZUNvZGVQb2ludE9yZGVyKGludDMyX3Qgc3RhcnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQz
Ml90IHNyY0xlbmd0aCkgY29uc3Q7Ci0KLSAgaW50OF90IGRvQ29tcGFyZUNvZGVQb2ludE9yZGVy
KGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90
IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpz
cmNDaGFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjU3Rh
cnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCkg
Y29uc3Q7Ci0KLSAgaW5saW5lIGludDhfdAotICBkb0Nhc2VDb21wYXJlKGludDMyX3Qgc3RhcnQs
Ci0gICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgY29uc3Qg
VW5pY29kZVN0cmluZyAmc3JjVGV4dCwKLSAgICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0
LAotICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLAotICAgICAgICAgICAgICAgIHVp
bnQzMl90IG9wdGlvbnMpIGNvbnN0OwotCi0gIGludDhfdAotICBkb0Nhc2VDb21wYXJlKGludDMy
X3Qgc3RhcnQsCi0gICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsCi0gICAgICAgICAgICAg
ICAgY29uc3QgVUNoYXIgKnNyY0NoYXJzLAotICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjU3Rh
cnQsCi0gICAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgsCi0gICAgICAgICAgICAgICAg
dWludDMyX3Qgb3B0aW9ucykgY29uc3Q7Ci0KLSAgaW50MzJfdCBkb0luZGV4T2YoVUNoYXIgYywK
LSAgICAgICAgICAgIGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICBpbnQzMl90IGxlbmd0aCkg
Y29uc3Q7Ci0KLSAgaW50MzJfdCBkb0luZGV4T2YoVUNoYXIzMiBjLAotICAgICAgICAgICAgICAg
ICAgICAgICAgaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
bGVuZ3RoKSBjb25zdDsKLQotICBpbnQzMl90IGRvTGFzdEluZGV4T2YoVUNoYXIgYywKLSAgICAg
ICAgICAgICAgICBpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3Ro
KSBjb25zdDsKLQotICBpbnQzMl90IGRvTGFzdEluZGV4T2YoVUNoYXIzMiBjLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50MzJfdCBsZW5ndGgpIGNvbnN0OwotCi0gIHZvaWQgZG9FeHRyYWN0KGludDMyX3Qg
c3RhcnQsCi0gICAgICAgICBpbnQzMl90IGxlbmd0aCwKLSAgICAgICAgIFVDaGFyICpkc3QsCi0g
ICAgICAgICBpbnQzMl90IGRzdFN0YXJ0KSBjb25zdDsKLQotICBpbmxpbmUgdm9pZCBkb0V4dHJh
Y3QoaW50MzJfdCBzdGFydCwKLSAgICAgICAgIGludDMyX3QgbGVuZ3RoLAotICAgICAgICAgVW5p
Y29kZVN0cmluZyYgdGFyZ2V0KSBjb25zdDsKLQotICBpbmxpbmUgVUNoYXIgZG9DaGFyQXQoaW50
MzJfdCBvZmZzZXQpICBjb25zdDsKLQotICBVbmljb2RlU3RyaW5nJiBkb1JlcGxhY2UoaW50MzJf
dCBzdGFydCwKLSAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLAotICAgICAgICAgICAgICAg
Y29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCwKLSAgICAgICAgICAgICAgIGludDMyX3Qgc3Jj
U3RhcnQsCi0gICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCk7Ci0KLSAgVW5pY29kZVN0
cmluZyYgZG9SZXBsYWNlKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgICBpbnQzMl90IGxl
bmd0aCwKLSAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpzcmNDaGFycywKLSAgICAgICAgICAg
ICAgIGludDMyX3Qgc3JjU3RhcnQsCi0gICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCk7
Ci0KLSAgVW5pY29kZVN0cmluZyYgZG9SZXZlcnNlKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAg
ICAgICBpbnQzMl90IGxlbmd0aCk7Ci0KLSAgLy8gY2FsY3VsYXRlIGhhc2ggY29kZQotICBpbnQz
Ml90IGRvSGFzaENvZGUodm9pZCkgY29uc3Q7Ci0KLSAgLy8gZ2V0IHBvaW50ZXIgdG8gc3RhcnQg
b2YgYXJyYXkKLSAgLy8gdGhlc2UgZG8gbm90IGNoZWNrIGZvciBrT3BlbkdldEJ1ZmZlciwgdW5s
aWtlIHRoZSBwdWJsaWMgZ2V0QnVmZmVyKCkgZnVuY3Rpb24KLSAgaW5saW5lIFVDaGFyKiBnZXRB
cnJheVN0YXJ0KHZvaWQpOwotICBpbmxpbmUgY29uc3QgVUNoYXIqIGdldEFycmF5U3RhcnQodm9p
ZCkgY29uc3Q7Ci0KLSAgaW5saW5lIFVCb29sIGhhc1Nob3J0TGVuZ3RoKCkgY29uc3Q7Ci0gIGlu
bGluZSBpbnQzMl90IGdldFNob3J0TGVuZ3RoKCkgY29uc3Q7Ci0KLSAgLy8gQSBVbmljb2RlU3Ry
aW5nIG9iamVjdCAobm90IG5lY2Vzc2FyaWx5IGl0cyBjdXJyZW50IGJ1ZmZlcikKLSAgLy8gaXMg
d3JpdGFibGUgdW5sZXNzIGl0IGlzQm9ndXMoKSBvciBpdCBoYXMgYW4gIm9wZW4iIGdldEJ1ZmZl
cihtaW5DYXBhY2l0eSkuCi0gIGlubGluZSBVQm9vbCBpc1dyaXRhYmxlKCkgY29uc3Q7Ci0KLSAg
Ly8gSXMgdGhlIGN1cnJlbnQgYnVmZmVyIHdyaXRhYmxlPwotICBpbmxpbmUgVUJvb2wgaXNCdWZm
ZXJXcml0YWJsZSgpIGNvbnN0OwotCi0gIC8vIE5vbmUgb2YgdGhlIGZvbGxvd2luZyBkb2VzIHJl
bGVhc2VBcnJheSgpLgotICBpbmxpbmUgdm9pZCBzZXRaZXJvTGVuZ3RoKCk7Ci0gIGlubGluZSB2
b2lkIHNldFNob3J0TGVuZ3RoKGludDMyX3QgbGVuKTsKLSAgaW5saW5lIHZvaWQgc2V0TGVuZ3Ro
KGludDMyX3QgbGVuKTsKLSAgaW5saW5lIHZvaWQgc2V0VG9FbXB0eSgpOwotICBpbmxpbmUgdm9p
ZCBzZXRBcnJheShVQ2hhciAqYXJyYXksIGludDMyX3QgbGVuLCBpbnQzMl90IGNhcGFjaXR5KTsg
Ly8gc2V0cyBsZW5ndGggYnV0IG5vdCBmbGFncwotCi0gIC8vIGFsbG9jYXRlIHRoZSBhcnJheTsg
cmVzdWx0IG1heSBiZSB0aGUgc3RhY2sgYnVmZmVyCi0gIC8vIHNldHMgcmVmQ291bnQgdG8gMSBp
ZiBhcHByb3ByaWF0ZQotICAvLyBzZXRzIGZBcnJheSwgZkNhcGFjaXR5LCBhbmQgZmxhZ3MKLSAg
Ly8gc2V0cyBsZW5ndGggdG8gMAotICAvLyByZXR1cm5zIGJvb2xlYW4gZm9yIHN1Y2Nlc3Mgb3Ig
ZmFpbHVyZQotICBVQm9vbCBhbGxvY2F0ZShpbnQzMl90IGNhcGFjaXR5KTsKLQotICAvLyByZWxl
YXNlIHRoZSBhcnJheSBpZiBvd25lZAotICB2b2lkIHJlbGVhc2VBcnJheSh2b2lkKTsKLQotICAv
LyB0dXJuIGEgYm9ndXMgc3RyaW5nIGludG8gYW4gZW1wdHkgb25lCi0gIHZvaWQgdW5Cb2d1cygp
OwotCi0gIC8vIGltcGxlbWVudHMgYXNzaWdtZW50IG9wZXJhdG9yLCBjb3B5IGNvbnN0cnVjdG9y
LCBhbmQgZmFzdENvcHlGcm9tKCkKLSAgVW5pY29kZVN0cmluZyAmY29weUZyb20oY29uc3QgVW5p
Y29kZVN0cmluZyAmc3JjLCBVQm9vbCBmYXN0Q29weT1GQUxTRSk7Ci0KLSAgLy8gUGluIHN0YXJ0
IGFuZCBsaW1pdCB0byBhY2NlcHRhYmxlIHZhbHVlcy4KLSAgaW5saW5lIHZvaWQgcGluSW5kZXgo
aW50MzJfdCYgc3RhcnQpIGNvbnN0OwotICBpbmxpbmUgdm9pZCBwaW5JbmRpY2VzKGludDMyX3Qm
IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QmIGxlbmd0aCkgY29uc3Q7
Ci0KLSNpZiAhVUNPTkZJR19OT19DT05WRVJTSU9OCi0KLSAgLyogSW50ZXJuYWwgZXh0cmFjdCgp
IHVzaW5nIFVDb252ZXJ0ZXIuICovCi0gIGludDMyX3QgZG9FeHRyYWN0KGludDMyX3Qgc3RhcnQs
IGludDMyX3QgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICBjaGFyICpkZXN0LCBpbnQzMl90
IGRlc3RDYXBhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgVUNvbnZlcnRlciAqY252LAotICAg
ICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICZlcnJvckNvZGUpIGNvbnN0OwotCi0gIC8qCi0g
ICAqIFJlYWwgY29uc3RydWN0b3IgZm9yIGNvbnZlcnRpbmcgZnJvbSBjb2RlcGFnZSBkYXRhLgot
ICAgKiBJdCBhc3N1bWVzIHRoYXQgaXQgaXMgY2FsbGVkIHdpdGggIWZSZWZDb3VudGVkLgotICAg
KgotICAgKiBJZiA8Y29kZT5jb2RlcGFnZT09MDwvY29kZT4sIHRoZW4gdGhlIGRlZmF1bHQgY29u
dmVydGVyCi0gICAqIGlzIHVzZWQgZm9yIHRoZSBwbGF0Zm9ybSBlbmNvZGluZy4KLSAgICogSWYg
PGNvZGU+Y29kZXBhZ2U8L2NvZGU+IGlzIGFuIGVtcHR5IHN0cmluZyAoPGNvZGU+IiI8L2NvZGU+
KSwKLSAgICogdGhlbiBhIHNpbXBsZSBjb252ZXJzaW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgY29k
ZXBhZ2UtaW52YXJpYW50Ci0gICAqIHN1YnNldCAoImludmFyaWFudCBjaGFyYWN0ZXJzIikgb2Yg
dGhlIHBsYXRmb3JtIGVuY29kaW5nLiBTZWUgdXR5cGVzLmguCi0gICAqLwotICB2b2lkIGRvQ29k
ZXBhZ2VDcmVhdGUoY29uc3QgY2hhciAqY29kZXBhZ2VEYXRhLAotICAgICAgICAgICAgICAgICAg
ICAgICAgaW50MzJfdCBkYXRhTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqY29kZXBhZ2UpOwotCi0gIC8qCi0gICAqIFdvcmtlciBmdW5jdGlvbiBmb3IgY3JlYXRp
bmcgYSBVbmljb2RlU3RyaW5nIGZyb20KLSAgICogYSBjb2RlcGFnZSBzdHJpbmcgdXNpbmcgYSBV
Q29udmVydGVyLgotICAgKi8KLSAgdm9pZAotICBkb0NvZGVwYWdlQ3JlYXRlKGNvbnN0IGNoYXIg
KmNvZGVwYWdlRGF0YSwKLSAgICAgICAgICAgICAgICAgICBpbnQzMl90IGRhdGFMZW5ndGgsCi0g
ICAgICAgICAgICAgICAgICAgVUNvbnZlcnRlciAqY29udmVydGVyLAotICAgICAgICAgICAgICAg
ICAgIFVFcnJvckNvZGUgJnN0YXR1cyk7Ci0KLSNlbmRpZgotCi0gIC8qCi0gICAqIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIHdoZW4gd3JpdGUgYWNjZXNzIHRvIHRoZSBhcnJheQotICAgKiBpcyBu
ZWNlc3NhcnkuCi0gICAqCi0gICAqIFdlIG5lZWQgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIGFycmF5
IGlmCi0gICAqIHRoZSBidWZmZXIgaXMgcmVhZC1vbmx5LCBvcgotICAgKiB0aGUgYnVmZmVyIGlz
IHJlZkNvdW50ZWQgKHNoYXJlZCksIGFuZCByZWZDb3VudD4xLCBvcgotICAgKiB0aGUgYnVmZmVy
IGlzIHRvbyBzbWFsbC4KLSAgICoKLSAgICogUmV0dXJuIEZBTFNFIGlmIG1lbW9yeSBjb3VsZCBu
b3QgYmUgYWxsb2NhdGVkLgotICAgKi8KLSAgVUJvb2wgY2xvbmVBcnJheUlmTmVlZGVkKGludDMy
X3QgbmV3Q2FwYWNpdHkgPSAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90
IGdyb3dDYXBhY2l0eSA9IC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVCb29sIGRv
Q29weUFycmF5ID0gVFJVRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICoq
cEJ1ZmZlclRvRGVsZXRlID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCBm
b3JjZUNsb25lID0gRkFMU0UpOwotCi0gIC8qKgotICAgKiBDb21tb24gZnVuY3Rpb24gZm9yIFVu
aWNvZGVTdHJpbmcgY2FzZSBtYXBwaW5ncy4KLSAgICogVGhlIHN0cmluZ0Nhc2VNYXBwZXIgaGFz
IHRoZSBzYW1lIHR5cGUgVVN0cmluZ0Nhc2VNYXBwZXIKLSAgICogYXMgaW4gdXN0cl9pbXAuaCBm
b3IgdXN0cmNhc2VfbWFwKCkuCi0gICAqLwotICBVbmljb2RlU3RyaW5nICYKLSAgY2FzZU1hcChj
b25zdCBVQ2FzZU1hcCAqY3NtLCBVU3RyaW5nQ2FzZU1hcHBlciAqc3RyaW5nQ2FzZU1hcHBlcik7
Ci0KLSAgLy8gcmVmIGNvdW50aW5nCi0gIHZvaWQgYWRkUmVmKHZvaWQpOwotICBpbnQzMl90IHJl
bW92ZVJlZih2b2lkKTsKLSAgaW50MzJfdCByZWZDb3VudCh2b2lkKSBjb25zdDsKLQotICAvLyBj
b25zdGFudHMKLSAgZW51bSB7Ci0gICAgLy8gU2V0IHRoZSBzdGFjayBidWZmZXIgc2l6ZSBzbyB0
aGF0IHNpemVvZihVbmljb2RlU3RyaW5nKSBpcywKLSAgICAvLyBuYXR1cmFsbHkgKHdpdGhvdXQg
cGFkZGluZyksIGEgbXVsdGlwbGUgb2Ygc2l6ZW9mKHBvaW50ZXIpLgotICAgIFVTX1NUQUNLQlVG
X1NJWkU9IHNpemVvZih2b2lkICopPT00ID8gMTMgOiAxNSwgLy8gU2l6ZSBvZiBzdGFjayBidWZm
ZXIgZm9yIHNob3J0IHN0cmluZ3MKLSAgICBrSW52YWxpZFVDaGFyPTB4ZmZmZiwgLy8gVStGRkZG
IHJldHVybmVkIGJ5IGNoYXJBdChpbnZhbGlkIGluZGV4KQotICAgIGtHcm93U2l6ZT0xMjgsIC8v
IGdyb3cgc2l6ZSBmb3IgdGhpcyBidWZmZXIKLSAgICBrSW52YWxpZEhhc2hDb2RlPTAsIC8vIGlu
dmFsaWQgaGFzaCBjb2RlCi0gICAga0VtcHR5SGFzaENvZGU9MSwgLy8gaGFzaCBjb2RlIGZvciBl
bXB0eSBzdHJpbmcKLQotICAgIC8vIGJpdCBmbGFnIHZhbHVlcyBmb3IgZkxlbmd0aEFuZEZsYWdz
Ci0gICAga0lzQm9ndXM9MSwgICAgICAgICAvLyB0aGlzIHN0cmluZyBpcyBib2d1cywgaS5lLiwg
bm90IHZhbGlkIG9yIE5VTEwKLSAgICBrVXNpbmdTdGFja0J1ZmZlcj0yLC8vIHVzaW5nIGZVbmlv
bi5mU3RhY2tGaWVsZHMgaW5zdGVhZCBvZiBmVW5pb24uZkZpZWxkcwotICAgIGtSZWZDb3VudGVk
PTQsICAgICAgLy8gdGhlcmUgaXMgYSByZWZDb3VudCBmaWVsZCBiZWZvcmUgdGhlIGNoYXJhY3Rl
cnMgaW4gZkFycmF5Ci0gICAga0J1ZmZlcklzUmVhZG9ubHk9OCwvLyBkbyBub3Qgd3JpdGUgdG8g
dGhpcyBidWZmZXIKLSAgICBrT3BlbkdldEJ1ZmZlcj0xNiwgIC8vIGdldEJ1ZmZlcihtaW5DYXBh
Y2l0eSkgd2FzIGNhbGxlZCAoaXMgIm9wZW4iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFuZCByZWxlYXNlQnVmZmVyKG5ld0xlbmd0aCkgbXVzdCBiZSBjYWxsZWQKLSAgICBrQWxsU3Rv
cmFnZUZsYWdzPTB4MWYsCi0KLSAgICBrTGVuZ3RoU2hpZnQ9NSwgICAgIC8vIHJlbWFpbmluZyAx
MSBiaXRzIGZvciBub24tbmVnYXRpdmUgc2hvcnQgbGVuZ3RoLCBvciBuZWdhdGl2ZSBpZiBsb25n
Ci0gICAga0xlbmd0aDE9MTw8a0xlbmd0aFNoaWZ0LAotICAgIGtNYXhTaG9ydExlbmd0aD0weDNm
ZiwgIC8vIG1heCBub24tbmVnYXRpdmUgc2hvcnQgbGVuZ3RoIChsZWF2ZXMgdG9wIGJpdCAwKQot
ICAgIGtMZW5ndGhJc0xhcmdlPTB4ZmZlMCwgIC8vIHNob3J0IGxlbmd0aCA8IDAsIHJlYWwgbGVu
Z3RoIGlzIGluIGZVbmlvbi5mRmllbGRzLmZMZW5ndGgKLQotICAgIC8vIGNvbWJpbmVkIHZhbHVl
cyBmb3IgY29udmVuaWVuY2UKLSAgICBrU2hvcnRTdHJpbmc9a1VzaW5nU3RhY2tCdWZmZXIsCi0g
ICAga0xvbmdTdHJpbmc9a1JlZkNvdW50ZWQsCi0gICAga1JlYWRvbmx5QWxpYXM9a0J1ZmZlcklz
UmVhZG9ubHksCi0gICAga1dyaXRhYmxlQWxpYXM9MAotICB9OwotCi0gIGZyaWVuZCBjbGFzcyBT
dHJpbmdUaHJlYWRUZXN0OwotICBmcmllbmQgY2xhc3MgVW5pY29kZVN0cmluZ0FwcGVuZGFibGU7
Ci0KLSAgdW5pb24gU3RhY2tCdWZmZXJPckZpZWxkczsgICAgICAgIC8vIGZvcndhcmQgZGVjbGFy
YXRpb24gbmVjZXNzYXJ5IGJlZm9yZSBmcmllbmQgZGVjbGFyYXRpb24KLSAgZnJpZW5kIHVuaW9u
IFN0YWNrQnVmZmVyT3JGaWVsZHM7IC8vIG1ha2UgVVNfU1RBQ0tCVUZfU0laRSB2aXNpYmxlIGlu
c2lkZSBmVW5pb24KLQotICAvKgotICAgKiBUaGUgZm9sbG93aW5nIGFyZSBhbGwgdGhlIGNsYXNz
IGZpZWxkcyB0aGF0IGFyZSBzdG9yZWQKLSAgICogaW4gZWFjaCBVbmljb2RlU3RyaW5nIG9iamVj
dC4KLSAgICogTm90ZSB0aGF0IFVuaWNvZGVTdHJpbmcgaGFzIHZpcnR1YWwgZnVuY3Rpb25zLAot
ICAgKiB0aGVyZWZvcmUgdGhlcmUgaXMgYW4gaW1wbGljaXQgdnRhYmxlIHBvaW50ZXIKLSAgICog
YXMgdGhlIGZpcnN0IHJlYWwgZmllbGQuCi0gICAqIFRoZSBmaWVsZHMgc2hvdWxkIGJlIGFsaWdu
ZWQgc3VjaCB0aGF0IG5vIHBhZGRpbmcgaXMgbmVjZXNzYXJ5LgotICAgKiBPbiAzMi1iaXQgbWFj
aGluZXMsIHRoZSBzaXplIHNob3VsZCBiZSAzMiBieXRlcywKLSAgICogb24gNjQtYml0IG1hY2hp
bmVzICg4LWJ5dGUgcG9pbnRlcnMpLCBpdCBzaG91bGQgYmUgNDAgYnl0ZXMuCi0gICAqCi0gICAq
IFdlIHVzZSBhIGhhY2sgdG8gYWNoaWV2ZSB0aGlzLgotICAgKgotICAgKiBXaXRoIGF0IGxlYXN0
IHNvbWUgY29tcGlsZXJzLCBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgaXMgZm9yY2VkIHRvCi0gICAq
IGEgbXVsdGlwbGUgb2Ygc2l6ZW9mKHBvaW50ZXIpIFt0aGUgbGFyZ2VzdCBmaWVsZCBiYXNlIHVu
aXQgaGVyZSBpcyBhIGRhdGEgcG9pbnRlcl0sCi0gICAqIHJvdW5kZWQgdXAgd2l0aCBhZGRpdGlv
bmFsIHBhZGRpbmcgaWYgdGhlIGZpZWxkcyBkbyBub3QgYWxyZWFkeSBmaXQgdGhhdCByZXF1aXJl
bWVudDoKLSAgICogLSBzaXplb2YoY2xhc3MgVW5pY29kZVN0cmluZykKLSAgICogLSBvZmZzZXRv
ZihVbmljb2RlU3RyaW5nLCBmVW5pb24pCi0gICAqIC0gc2l6ZW9mKGZVbmlvbikKLSAgICogLSBz
aXplb2YoZlN0YWNrRmllbGRzKQotICAgKgotICAgKiBXZSBvcHRpbWl6ZSBmb3IgdGhlIGxvbmdl
c3QgcG9zc2libGUgaW50ZXJuYWwgYnVmZmVyIGZvciBzaG9ydCBzdHJpbmdzLgotICAgKiBmVW5p
b24uZlN0YWNrRmllbGRzIGJlZ2lucyB3aXRoIDIgYnl0ZXMgZm9yIHN0b3JhZ2UgZmxhZ3MKLSAg
ICogYW5kIHRoZSBsZW5ndGggb2YgcmVsYXRpdmVseSBzaG9ydCBzdHJpbmdzLAotICAgKiBmb2xs
b3dlZCBieSB0aGUgYnVmZmVyIGZvciBzaG9ydCBzdHJpbmcgY29udGVudHMuCi0gICAqIFRoZXJl
IGlzIG5vIHBhZGRpbmcgaW5zaWRlIGZTdGFja0ZpZWxkcy4KLSAgICoKLSAgICogSGVhcC1hbGxv
Y2F0ZWQgYW5kIGFsaWFzZWQgc3RyaW5ncyB1c2UgZlVuaW9uLmZGaWVsZHMuCi0gICAqIEJvdGgg
ZlN0YWNrRmllbGRzIGFuZCBmRmllbGRzIG11c3QgYmVnaW4gd2l0aCB0aGUgc2FtZSBmaWVsZHMg
Zm9yIGZsYWdzIGFuZCBzaG9ydCBsZW5ndGgsCi0gICAqIHRoYXQgaXMsIHRob3NlIG11c3QgaGF2
ZSB0aGUgc2FtZSBtZW1vcnkgb2Zmc2V0cyBpbnNpZGUgdGhlIG9iamVjdCwKLSAgICogYmVjYXVz
ZSB0aGUgZmxhZ3MgbXVzdCBiZSBpbnNwZWN0ZWQgaW4gb3JkZXIgdG8gZGVjaWRlIHdoaWNoIGhh
bGYgb2YgZlVuaW9uIGlzIGJlaW5nIHVzZWQuCi0gICAqIFdlIGFzc3VtZSB0aGF0IHRoZSBjb21w
aWxlciBkb2VzIG5vdCByZW9yZGVyIHRoZSBmaWVsZHMuCi0gICAqCi0gICAqIChQYWRkaW5nIGF0
IHRoZSBlbmQgb2YgZkZpZWxkcyBpcyBvazoKLSAgICogQXMgbG9uZyBhcyBpdCBpcyBubyBsYXJn
ZXIgdGhhbiBmU3RhY2tGaWVsZHMsIGl0IGlzIG5vdCB3YXN0ZWQgc3BhY2UuKQotICAgKgotICAg
KiBGb3Igc29tZSBvZiB0aGUgaGlzdG9yeSBvZiB0aGUgVW5pY29kZVN0cmluZyBjbGFzcyBmaWVs
ZHMgbGF5b3V0LAotICAgKiBzZWUgSUNVIHRpY2tldCAjMTEzMzYgIlVuaWNvZGVTdHJpbmc6IHJl
Y29tYmluZSBzdGFjayBidWZmZXIgYXJyYXlzIgotICAgKiBhbmQgdGlja2V0ICM4MzIyICJ3aHkg
aXMgc2l6ZW9mKFVuaWNvZGVTdHJpbmcpPT00OD8iLgotICAgKi8KLSAgLy8gKGltcGxpY2l0KSAq
dnRhYmxlOwotICB1bmlvbiBTdGFja0J1ZmZlck9yRmllbGRzIHsKLSAgICAvLyBmU3RhY2tGaWVs
ZHMgaXMgdXNlZCBpZmYgKGZMZW5ndGhBbmRGbGFncyZrVXNpbmdTdGFja0J1ZmZlcikgZWxzZSBm
RmllbGRzIGlzIHVzZWQuCi0gICAgLy8gRWFjaCBzdHJ1Y3Qgb2YgdGhlIHVuaW9uIG11c3QgYmVn
aW4gd2l0aCBmTGVuZ3RoQW5kRmxhZ3MuCi0gICAgc3RydWN0IHsKLSAgICAgIGludDE2X3QgZkxl
bmd0aEFuZEZsYWdzOyAgICAgICAgICAvLyBiaXQgZmllbGRzOiBzZWUgY29uc3RhbnRzIGFib3Zl
Ci0gICAgICBVQ2hhciBmQnVmZmVyW1VTX1NUQUNLQlVGX1NJWkVdOyAgLy8gYnVmZmVyIGZvciBz
aG9ydCBzdHJpbmdzCi0gICAgfSBmU3RhY2tGaWVsZHM7Ci0gICAgc3RydWN0IHsKLSAgICAgIGlu
dDE2X3QgZkxlbmd0aEFuZEZsYWdzOyAgICAgICAgICAvLyBiaXQgZmllbGRzOiBzZWUgY29uc3Rh
bnRzIGFib3ZlCi0gICAgICBVQ2hhciAgICpmQXJyYXk7ICAgIC8vIHRoZSBVbmljb2RlIGRhdGEK
LSAgICAgIGludDMyX3QgZkNhcGFjaXR5OyAgLy8gY2FwYWNpdHkgb2YgZkFycmF5IChpbiBVQ2hh
cnMpCi0gICAgICBpbnQzMl90IGZMZW5ndGg7ICAgIC8vIG51bWJlciBvZiBjaGFyYWN0ZXJzIGlu
IGZBcnJheSBpZiA+MTI3OyBlbHNlIHVuZGVmaW5lZAotICAgIH0gZkZpZWxkczsKLSAgfSBmVW5p
b247Ci19OwotCi0vKioKLSAqIENyZWF0ZSBhIG5ldyBVbmljb2RlU3RyaW5nIHdpdGggdGhlIGNv
bmNhdGVuYXRpb24gb2YgdHdvIG90aGVycy4KLSAqCi0gKiBAcGFyYW0gczEgVGhlIGZpcnN0IHN0
cmluZyB0byBiZSBjb3BpZWQgdG8gdGhlIG5ldyBvbmUuCi0gKiBAcGFyYW0gczIgVGhlIHNlY29u
ZCBzdHJpbmcgdG8gYmUgY29waWVkIHRvIHRoZSBuZXcgb25lLCBhZnRlciBzMS4KLSAqIEByZXR1
cm4gVW5pY29kZVN0cmluZyhzMSkuYXBwZW5kKHMyKQotICogQHN0YWJsZSBJQ1UgMi44Ci0gKi8K
LVVfQ09NTU9OX0FQSSBVbmljb2RlU3RyaW5nIFVfRVhQT1JUMgotb3BlcmF0b3IrIChjb25zdCBV
bmljb2RlU3RyaW5nICZzMSwgY29uc3QgVW5pY29kZVN0cmluZyAmczIpOwotCi0vLz09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIElubGluZSBtZW1iZXJzCi0vLz09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLy89PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBQcml2YXRlcwotLy89PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWlubGluZSB2b2lkCi1Vbmljb2RlU3RyaW5n
OjpwaW5JbmRleChpbnQzMl90JiBzdGFydCkgY29uc3QKLXsKLSAgLy8gcGluIGluZGV4Ci0gIGlm
KHN0YXJ0IDwgMCkgewotICAgIHN0YXJ0ID0gMDsKLSAgfSBlbHNlIGlmKHN0YXJ0ID4gbGVuZ3Ro
KCkpIHsKLSAgICBzdGFydCA9IGxlbmd0aCgpOwotICB9Ci19Ci0KLWlubGluZSB2b2lkCi1Vbmlj
b2RlU3RyaW5nOjpwaW5JbmRpY2VzKGludDMyX3QmIHN0YXJ0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90JiBfbGVuZ3RoKSBjb25zdAotewotICAvLyBwaW4gaW5kaWNlcwotICBp
bnQzMl90IGxlbiA9IGxlbmd0aCgpOwotICBpZihzdGFydCA8IDApIHsKLSAgICBzdGFydCA9IDA7
Ci0gIH0gZWxzZSBpZihzdGFydCA+IGxlbikgewotICAgIHN0YXJ0ID0gbGVuOwotICB9Ci0gIGlm
KF9sZW5ndGggPCAwKSB7Ci0gICAgX2xlbmd0aCA9IDA7Ci0gIH0gZWxzZSBpZihfbGVuZ3RoID4g
KGxlbiAtIHN0YXJ0KSkgewotICAgIF9sZW5ndGggPSAobGVuIC0gc3RhcnQpOwotICB9Ci19Ci0K
LWlubGluZSBVQ2hhcioKLVVuaWNvZGVTdHJpbmc6OmdldEFycmF5U3RhcnQoKSB7Ci0gIHJldHVy
biAoZlVuaW9uLmZGaWVsZHMuZkxlbmd0aEFuZEZsYWdzJmtVc2luZ1N0YWNrQnVmZmVyKSA/Ci0g
ICAgZlVuaW9uLmZTdGFja0ZpZWxkcy5mQnVmZmVyIDogZlVuaW9uLmZGaWVsZHMuZkFycmF5Owot
fQotCi1pbmxpbmUgY29uc3QgVUNoYXIqCi1Vbmljb2RlU3RyaW5nOjpnZXRBcnJheVN0YXJ0KCkg
Y29uc3QgewotICByZXR1cm4gKGZVbmlvbi5mRmllbGRzLmZMZW5ndGhBbmRGbGFncyZrVXNpbmdT
dGFja0J1ZmZlcikgPwotICAgIGZVbmlvbi5mU3RhY2tGaWVsZHMuZkJ1ZmZlciA6IGZVbmlvbi5m
RmllbGRzLmZBcnJheTsKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0vLyBEZWZhdWx0IGNvbnN0cnVjdG9yCi0vLz09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotaW5saW5lCi1Vbmljb2RlU3RyaW5nOjpVbmljb2RlU3RyaW5n
KCkgewotICBmVW5pb24uZlN0YWNrRmllbGRzLmZMZW5ndGhBbmRGbGFncz1rU2hvcnRTdHJpbmc7
Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gUmVh
ZC1vbmx5IGltcGxlbWVudGF0aW9uIG1ldGhvZHMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotaW5saW5lIFVCb29sCi1Vbmljb2RlU3RyaW5nOjpoYXNTaG9ydExl
bmd0aCgpIGNvbnN0IHsKLSAgcmV0dXJuIGZVbmlvbi5mRmllbGRzLmZMZW5ndGhBbmRGbGFncz49
MDsKLX0KLQotaW5saW5lIGludDMyX3QKLVVuaWNvZGVTdHJpbmc6OmdldFNob3J0TGVuZ3RoKCkg
Y29uc3QgewotICAvLyBmTGVuZ3RoQW5kRmxhZ3MgbXVzdCBiZSBub24tbmVnYXRpdmUgLT4gc2hv
cnQgbGVuZ3RoID49IDAKLSAgLy8gYW5kIGFyaXRobWV0aWMgb3IgbG9naWNhbCBzaGlmdCBkb2Vz
IG5vdCBtYXR0ZXIuCi0gIHJldHVybiBmVW5pb24uZkZpZWxkcy5mTGVuZ3RoQW5kRmxhZ3M+PmtM
ZW5ndGhTaGlmdDsKLX0KLQotaW5saW5lIGludDMyX3QKLVVuaWNvZGVTdHJpbmc6Omxlbmd0aCgp
IGNvbnN0IHsKLSAgcmV0dXJuIGhhc1Nob3J0TGVuZ3RoKCkgPyBnZXRTaG9ydExlbmd0aCgpIDog
ZlVuaW9uLmZGaWVsZHMuZkxlbmd0aDsKLX0KLQotaW5saW5lIGludDMyX3QKLVVuaWNvZGVTdHJp
bmc6OmdldENhcGFjaXR5KCkgY29uc3QgewotICByZXR1cm4gKGZVbmlvbi5mRmllbGRzLmZMZW5n
dGhBbmRGbGFncyZrVXNpbmdTdGFja0J1ZmZlcikgPwotICAgIFVTX1NUQUNLQlVGX1NJWkUgOiBm
VW5pb24uZkZpZWxkcy5mQ2FwYWNpdHk7Ci19Ci0KLWlubGluZSBpbnQzMl90Ci1Vbmljb2RlU3Ry
aW5nOjpoYXNoQ29kZSgpIGNvbnN0Ci17IHJldHVybiBkb0hhc2hDb2RlKCk7IH0KLQotaW5saW5l
IFVCb29sCi1Vbmljb2RlU3RyaW5nOjppc0JvZ3VzKCkgY29uc3QKLXsgcmV0dXJuIChVQm9vbCko
ZlVuaW9uLmZGaWVsZHMuZkxlbmd0aEFuZEZsYWdzICYga0lzQm9ndXMpOyB9Ci0KLWlubGluZSBV
Qm9vbAotVW5pY29kZVN0cmluZzo6aXNXcml0YWJsZSgpIGNvbnN0Ci17IHJldHVybiAoVUJvb2wp
IShmVW5pb24uZkZpZWxkcy5mTGVuZ3RoQW5kRmxhZ3MmKGtPcGVuR2V0QnVmZmVyfGtJc0JvZ3Vz
KSk7IH0KLQotaW5saW5lIFVCb29sCi1Vbmljb2RlU3RyaW5nOjppc0J1ZmZlcldyaXRhYmxlKCkg
Y29uc3QKLXsKLSAgcmV0dXJuIChVQm9vbCkoCi0gICAgICAhKGZVbmlvbi5mRmllbGRzLmZMZW5n
dGhBbmRGbGFncyYoa09wZW5HZXRCdWZmZXJ8a0lzQm9ndXN8a0J1ZmZlcklzUmVhZG9ubHkpKSAm
JgotICAgICAgKCEoZlVuaW9uLmZGaWVsZHMuZkxlbmd0aEFuZEZsYWdzJmtSZWZDb3VudGVkKSB8
fCByZWZDb3VudCgpPT0xKSk7Ci19Ci0KLWlubGluZSBjb25zdCBVQ2hhciAqCi1Vbmljb2RlU3Ry
aW5nOjpnZXRCdWZmZXIoKSBjb25zdCB7Ci0gIGlmKGZVbmlvbi5mRmllbGRzLmZMZW5ndGhBbmRG
bGFncyYoa0lzQm9ndXN8a09wZW5HZXRCdWZmZXIpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0gZWxz
ZSBpZihmVW5pb24uZkZpZWxkcy5mTGVuZ3RoQW5kRmxhZ3Mma1VzaW5nU3RhY2tCdWZmZXIpIHsK
LSAgICByZXR1cm4gZlVuaW9uLmZTdGFja0ZpZWxkcy5mQnVmZmVyOwotICB9IGVsc2UgewotICAg
IHJldHVybiBmVW5pb24uZkZpZWxkcy5mQXJyYXk7Ci0gIH0KLX0KLQotLy89PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBSZWFkLW9ubHkgYWxpYXMgbWV0aG9kcwot
Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1pbmxpbmUgaW50OF90
Ci1Vbmljb2RlU3RyaW5nOjpkb0NvbXBhcmUoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAg
aW50MzJfdCB0aGlzTGVuZ3RoLAotICAgICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBz
cmNUZXh0LAotICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LAotICAgICAgICAgICAgICBp
bnQzMl90IHNyY0xlbmd0aCkgY29uc3QKLXsKLSAgaWYoc3JjVGV4dC5pc0JvZ3VzKCkpIHsKLSAg
ICByZXR1cm4gKGludDhfdCkhaXNCb2d1cygpOyAvLyAwIGlmIGJvdGggYXJlIGJvZ3VzLCAxIG90
aGVyd2lzZQotICB9IGVsc2UgewotICAgIHNyY1RleHQucGluSW5kaWNlcyhzcmNTdGFydCwgc3Jj
TGVuZ3RoKTsKLSAgICByZXR1cm4gZG9Db21wYXJlKHN0YXJ0LCB0aGlzTGVuZ3RoLCBzcmNUZXh0
LmdldEFycmF5U3RhcnQoKSwgc3JjU3RhcnQsIHNyY0xlbmd0aCk7Ci0gIH0KLX0KLQotaW5saW5l
IFVCb29sCi1Vbmljb2RlU3RyaW5nOjpvcGVyYXRvcj09IChjb25zdCBVbmljb2RlU3RyaW5nJiB0
ZXh0KSBjb25zdAotewotICBpZihpc0JvZ3VzKCkpIHsKLSAgICByZXR1cm4gdGV4dC5pc0JvZ3Vz
KCk7Ci0gIH0gZWxzZSB7Ci0gICAgaW50MzJfdCBsZW4gPSBsZW5ndGgoKSwgdGV4dExlbmd0aCA9
IHRleHQubGVuZ3RoKCk7Ci0gICAgcmV0dXJuICF0ZXh0LmlzQm9ndXMoKSAmJiBsZW4gPT0gdGV4
dExlbmd0aCAmJiBkb0VxdWFscyh0ZXh0LCBsZW4pOwotICB9Ci19Ci0KLWlubGluZSBVQm9vbAot
VW5pY29kZVN0cmluZzo6b3BlcmF0b3IhPSAoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29u
c3QKLXsgcmV0dXJuICghIG9wZXJhdG9yPT0odGV4dCkpOyB9Ci0KLWlubGluZSBVQm9vbAotVW5p
Y29kZVN0cmluZzo6b3BlcmF0b3I+IChjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdAot
eyByZXR1cm4gZG9Db21wYXJlKDAsIGxlbmd0aCgpLCB0ZXh0LCAwLCB0ZXh0Lmxlbmd0aCgpKSA9
PSAxOyB9Ci0KLWlubGluZSBVQm9vbAotVW5pY29kZVN0cmluZzo6b3BlcmF0b3I8IChjb25zdCBV
bmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdAoteyByZXR1cm4gZG9Db21wYXJlKDAsIGxlbmd0aCgp
LCB0ZXh0LCAwLCB0ZXh0Lmxlbmd0aCgpKSA9PSAtMTsgfQotCi1pbmxpbmUgVUJvb2wKLVVuaWNv
ZGVTdHJpbmc6Om9wZXJhdG9yPj0gKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRleHQpIGNvbnN0Ci17
IHJldHVybiBkb0NvbXBhcmUoMCwgbGVuZ3RoKCksIHRleHQsIDAsIHRleHQubGVuZ3RoKCkpICE9
IC0xOyB9Ci0KLWlubGluZSBVQm9vbAotVW5pY29kZVN0cmluZzo6b3BlcmF0b3I8PSAoY29uc3Qg
VW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3QKLXsgcmV0dXJuIGRvQ29tcGFyZSgwLCBsZW5ndGgo
KSwgdGV4dCwgMCwgdGV4dC5sZW5ndGgoKSkgIT0gMTsgfQotCi1pbmxpbmUgaW50OF90Ci1Vbmlj
b2RlU3RyaW5nOjpjb21wYXJlKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRleHQpIGNvbnN0Ci17IHJl
dHVybiBkb0NvbXBhcmUoMCwgbGVuZ3RoKCksIHRleHQsIDAsIHRleHQubGVuZ3RoKCkpOyB9Ci0K
LWlubGluZSBpbnQ4X3QKLVVuaWNvZGVTdHJpbmc6OmNvbXBhcmUoaW50MzJfdCBzdGFydCwKLSAg
ICAgICAgICAgICAgIGludDMyX3QgX2xlbmd0aCwKLSAgICAgICAgICAgICAgIGNvbnN0IFVuaWNv
ZGVTdHJpbmcmIHNyY1RleHQpIGNvbnN0Ci17IHJldHVybiBkb0NvbXBhcmUoc3RhcnQsIF9sZW5n
dGgsIHNyY1RleHQsIDAsIHNyY1RleHQubGVuZ3RoKCkpOyB9Ci0KLWlubGluZSBpbnQ4X3QKLVVu
aWNvZGVTdHJpbmc6OmNvbXBhcmUoY29uc3QgVUNoYXIgKnNyY0NoYXJzLAotICAgICAgICAgICAg
ICAgaW50MzJfdCBzcmNMZW5ndGgpIGNvbnN0Ci17IHJldHVybiBkb0NvbXBhcmUoMCwgbGVuZ3Ro
KCksIHNyY0NoYXJzLCAwLCBzcmNMZW5ndGgpOyB9Ci0KLWlubGluZSBpbnQ4X3QKLVVuaWNvZGVT
dHJpbmc6OmNvbXBhcmUoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgIGludDMyX3QgX2xl
bmd0aCwKLSAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQsCi0gICAg
ICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LAotICAgICAgICAgICAgICAgaW50MzJfdCBzcmNM
ZW5ndGgpIGNvbnN0Ci17IHJldHVybiBkb0NvbXBhcmUoc3RhcnQsIF9sZW5ndGgsIHNyY1RleHQs
IHNyY1N0YXJ0LCBzcmNMZW5ndGgpOyB9Ci0KLWlubGluZSBpbnQ4X3QKLVVuaWNvZGVTdHJpbmc6
OmNvbXBhcmUoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgIGludDMyX3QgX2xlbmd0aCwK
LSAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpzcmNDaGFycykgY29uc3QKLXsgcmV0dXJuIGRv
Q29tcGFyZShzdGFydCwgX2xlbmd0aCwgc3JjQ2hhcnMsIDAsIF9sZW5ndGgpOyB9Ci0KLWlubGlu
ZSBpbnQ4X3QKLVVuaWNvZGVTdHJpbmc6OmNvbXBhcmUoaW50MzJfdCBzdGFydCwKLSAgICAgICAg
ICAgICAgIGludDMyX3QgX2xlbmd0aCwKLSAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpzcmND
aGFycywKLSAgICAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsCi0gICAgICAgICAgICAgICBp
bnQzMl90IHNyY0xlbmd0aCkgY29uc3QKLXsgcmV0dXJuIGRvQ29tcGFyZShzdGFydCwgX2xlbmd0
aCwgc3JjQ2hhcnMsIHNyY1N0YXJ0LCBzcmNMZW5ndGgpOyB9Ci0KLWlubGluZSBpbnQ4X3QKLVVu
aWNvZGVTdHJpbmc6OmNvbXBhcmVCZXR3ZWVuKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAg
ICAgICBpbnQzMl90IGxpbWl0LAotICAgICAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmlu
ZyYgc3JjVGV4dCwKLSAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsCi0gICAgICAg
ICAgICAgICAgICBpbnQzMl90IHNyY0xpbWl0KSBjb25zdAoteyByZXR1cm4gZG9Db21wYXJlKHN0
YXJ0LCBsaW1pdCAtIHN0YXJ0LAotICAgICAgICAgICBzcmNUZXh0LCBzcmNTdGFydCwgc3JjTGlt
aXQgLSBzcmNTdGFydCk7IH0KLQotaW5saW5lIGludDhfdAotVW5pY29kZVN0cmluZzo6ZG9Db21w
YXJlQ29kZVBvaW50T3JkZXIoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgdGhpc0xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpIGNvbnN0
Ci17Ci0gIGlmKHNyY1RleHQuaXNCb2d1cygpKSB7Ci0gICAgcmV0dXJuIChpbnQ4X3QpIWlzQm9n
dXMoKTsgLy8gMCBpZiBib3RoIGFyZSBib2d1cywgMSBvdGhlcndpc2UKLSAgfSBlbHNlIHsKLSAg
ICBzcmNUZXh0LnBpbkluZGljZXMoc3JjU3RhcnQsIHNyY0xlbmd0aCk7Ci0gICAgcmV0dXJuIGRv
Q29tcGFyZUNvZGVQb2ludE9yZGVyKHN0YXJ0LCB0aGlzTGVuZ3RoLCBzcmNUZXh0LmdldEFycmF5
U3RhcnQoKSwgc3JjU3RhcnQsIHNyY0xlbmd0aCk7Ci0gIH0KLX0KLQotaW5saW5lIGludDhfdAot
VW5pY29kZVN0cmluZzo6Y29tcGFyZUNvZGVQb2ludE9yZGVyKGNvbnN0IFVuaWNvZGVTdHJpbmcm
IHRleHQpIGNvbnN0Ci17IHJldHVybiBkb0NvbXBhcmVDb2RlUG9pbnRPcmRlcigwLCBsZW5ndGgo
KSwgdGV4dCwgMCwgdGV4dC5sZW5ndGgoKSk7IH0KLQotaW5saW5lIGludDhfdAotVW5pY29kZVN0
cmluZzo6Y29tcGFyZUNvZGVQb2ludE9yZGVyKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBfbGVuZ3RoLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQpIGNvbnN0
Ci17IHJldHVybiBkb0NvbXBhcmVDb2RlUG9pbnRPcmRlcihzdGFydCwgX2xlbmd0aCwgc3JjVGV4
dCwgMCwgc3JjVGV4dC5sZW5ndGgoKSk7IH0KLQotaW5saW5lIGludDhfdAotVW5pY29kZVN0cmlu
Zzo6Y29tcGFyZUNvZGVQb2ludE9yZGVyKGNvbnN0IFVDaGFyICpzcmNDaGFycywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCkgY29uc3QKLXsg
cmV0dXJuIGRvQ29tcGFyZUNvZGVQb2ludE9yZGVyKDAsIGxlbmd0aCgpLCBzcmNDaGFycywgMCwg
c3JjTGVuZ3RoKTsgfQotCi1pbmxpbmUgaW50OF90Ci1Vbmljb2RlU3RyaW5nOjpjb21wYXJlQ29k
ZVBvaW50T3JkZXIoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90IF9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdAoteyByZXR1cm4gZG9Db21w
YXJlQ29kZVBvaW50T3JkZXIoc3RhcnQsIF9sZW5ndGgsIHNyY1RleHQsIHNyY1N0YXJ0LCBzcmNM
ZW5ndGgpOyB9Ci0KLWlubGluZSBpbnQ4X3QKLVVuaWNvZGVTdHJpbmc6OmNvbXBhcmVDb2RlUG9p
bnRPcmRlcihpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludDMyX3QgX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBVQ2hhciAqc3JjQ2hhcnMpIGNvbnN0Ci17IHJldHVybiBkb0NvbXBhcmVDb2RlUG9p
bnRPcmRlcihzdGFydCwgX2xlbmd0aCwgc3JjQ2hhcnMsIDAsIF9sZW5ndGgpOyB9Ci0KLWlubGlu
ZSBpbnQ4X3QKLVVuaWNvZGVTdHJpbmc6OmNvbXBhcmVDb2RlUG9pbnRPcmRlcihpbnQzMl90IHN0
YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgX2xlbmd0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAqc3Jj
Q2hhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzcmNT
dGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY0xl
bmd0aCkgY29uc3QKLXsgcmV0dXJuIGRvQ29tcGFyZUNvZGVQb2ludE9yZGVyKHN0YXJ0LCBfbGVu
Z3RoLCBzcmNDaGFycywgc3JjU3RhcnQsIHNyY0xlbmd0aCk7IH0KLQotaW5saW5lIGludDhfdAot
VW5pY29kZVN0cmluZzo6Y29tcGFyZUNvZGVQb2ludE9yZGVyQmV0d2VlbihpbnQzMl90IHN0YXJ0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxp
bWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
bmljb2RlU3RyaW5nJiBzcmNUZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY0xpbWl0KSBjb25zdAoteyByZXR1cm4gZG9Db21w
YXJlQ29kZVBvaW50T3JkZXIoc3RhcnQsIGxpbWl0IC0gc3RhcnQsCi0gICAgICAgICAgIHNyY1Rl
eHQsIHNyY1N0YXJ0LCBzcmNMaW1pdCAtIHNyY1N0YXJ0KTsgfQotCi1pbmxpbmUgaW50OF90Ci1V
bmljb2RlU3RyaW5nOjpkb0Nhc2VDb21wYXJlKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgdGhpc0xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyAmc3JjVGV4dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50MzJfdCBzcmNMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IG9wdGlvbnMpIGNvbnN0Ci17Ci0gIGlmKHNyY1RleHQuaXNCb2d1cygpKSB7Ci0gICAgcmV0
dXJuIChpbnQ4X3QpIWlzQm9ndXMoKTsgLy8gMCBpZiBib3RoIGFyZSBib2d1cywgMSBvdGhlcndp
c2UKLSAgfSBlbHNlIHsKLSAgICBzcmNUZXh0LnBpbkluZGljZXMoc3JjU3RhcnQsIHNyY0xlbmd0
aCk7Ci0gICAgcmV0dXJuIGRvQ2FzZUNvbXBhcmUoc3RhcnQsIHRoaXNMZW5ndGgsIHNyY1RleHQu
Z2V0QXJyYXlTdGFydCgpLCBzcmNTdGFydCwgc3JjTGVuZ3RoLCBvcHRpb25zKTsKLSAgfQotfQot
Ci1pbmxpbmUgaW50OF90Ci1Vbmljb2RlU3RyaW5nOjpjYXNlQ29tcGFyZShjb25zdCBVbmljb2Rl
U3RyaW5nICZ0ZXh0LCB1aW50MzJfdCBvcHRpb25zKSBjb25zdCB7Ci0gIHJldHVybiBkb0Nhc2VD
b21wYXJlKDAsIGxlbmd0aCgpLCB0ZXh0LCAwLCB0ZXh0Lmxlbmd0aCgpLCBvcHRpb25zKTsKLX0K
LQotaW5saW5lIGludDhfdAotVW5pY29kZVN0cmluZzo6Y2FzZUNvbXBhcmUoaW50MzJfdCBzdGFy
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgX2xlbmd0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcgJnNyY1RleHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBvcHRpb25zKSBjb25zdCB7Ci0gIHJldHVybiBk
b0Nhc2VDb21wYXJlKHN0YXJ0LCBfbGVuZ3RoLCBzcmNUZXh0LCAwLCBzcmNUZXh0Lmxlbmd0aCgp
LCBvcHRpb25zKTsKLX0KLQotaW5saW5lIGludDhfdAotVW5pY29kZVN0cmluZzo6Y2FzZUNvbXBh
cmUoY29uc3QgVUNoYXIgKnNyY0NoYXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCBzcmNMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBvcHRp
b25zKSBjb25zdCB7Ci0gIHJldHVybiBkb0Nhc2VDb21wYXJlKDAsIGxlbmd0aCgpLCBzcmNDaGFy
cywgMCwgc3JjTGVuZ3RoLCBvcHRpb25zKTsKLX0KLQotaW5saW5lIGludDhfdAotVW5pY29kZVN0
cmluZzo6Y2FzZUNvbXBhcmUoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludDMyX3QgX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVu
aWNvZGVTdHJpbmcgJnNyY1RleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90
IHNyY1N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBvcHRpb25zKSBjb25zdCB7Ci0g
IHJldHVybiBkb0Nhc2VDb21wYXJlKHN0YXJ0LCBfbGVuZ3RoLCBzcmNUZXh0LCBzcmNTdGFydCwg
c3JjTGVuZ3RoLCBvcHRpb25zKTsKLX0KLQotaW5saW5lIGludDhfdAotVW5pY29kZVN0cmluZzo6
Y2FzZUNvbXBhcmUoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dDMyX3QgX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpz
cmNDaGFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG9wdGlvbnMpIGNv
bnN0IHsKLSAgcmV0dXJuIGRvQ2FzZUNvbXBhcmUoc3RhcnQsIF9sZW5ndGgsIHNyY0NoYXJzLCAw
LCBfbGVuZ3RoLCBvcHRpb25zKTsKLX0KLQotaW5saW5lIGludDhfdAotVW5pY29kZVN0cmluZzo6
Y2FzZUNvbXBhcmUoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dDMyX3QgX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpz
cmNDaGFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IG9wdGlvbnMpIGNvbnN0IHsKLSAgcmV0dXJuIGRvQ2Fz
ZUNvbXBhcmUoc3RhcnQsIF9sZW5ndGgsIHNyY0NoYXJzLCBzcmNTdGFydCwgc3JjTGVuZ3RoLCBv
cHRpb25zKTsKLX0KLQotaW5saW5lIGludDhfdAotVW5pY29kZVN0cmluZzo6Y2FzZUNvbXBhcmVC
ZXR3ZWVuKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCBsaW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
bmljb2RlU3RyaW5nICZzcmNUZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludDMyX3Qgc3JjU3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCBzcmNMaW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBvcHRpb25zKSBjb25zdCB7Ci0gIHJldHVybiBkb0Nhc2VDb21wYXJlKHN0YXJ0LCBsaW1pdCAt
IHN0YXJ0LCBzcmNUZXh0LCBzcmNTdGFydCwgc3JjTGltaXQgLSBzcmNTdGFydCwgb3B0aW9ucyk7
Ci19Ci0KLWlubGluZSBpbnQzMl90Ci1Vbmljb2RlU3RyaW5nOjppbmRleE9mKGNvbnN0IFVuaWNv
ZGVTdHJpbmcmIHNyY1RleHQsCi0gICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LAotICAg
ICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgsCi0gICAgICAgICAgICAgICBpbnQzMl90IHN0
YXJ0LAotICAgICAgICAgICAgICAgaW50MzJfdCBfbGVuZ3RoKSBjb25zdAotewotICBpZighc3Jj
VGV4dC5pc0JvZ3VzKCkpIHsKLSAgICBzcmNUZXh0LnBpbkluZGljZXMoc3JjU3RhcnQsIHNyY0xl
bmd0aCk7Ci0gICAgaWYoc3JjTGVuZ3RoID4gMCkgewotICAgICAgcmV0dXJuIGluZGV4T2Yoc3Jj
VGV4dC5nZXRBcnJheVN0YXJ0KCksIHNyY1N0YXJ0LCBzcmNMZW5ndGgsIHN0YXJ0LCBfbGVuZ3Ro
KTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIC0xOwotfQotCi1pbmxpbmUgaW50MzJfdAotVW5pY29k
ZVN0cmluZzo6aW5kZXhPZihjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdAoteyByZXR1
cm4gaW5kZXhPZih0ZXh0LCAwLCB0ZXh0Lmxlbmd0aCgpLCAwLCBsZW5ndGgoKSk7IH0KLQotaW5s
aW5lIGludDMyX3QKLVVuaWNvZGVTdHJpbmc6OmluZGV4T2YoY29uc3QgVW5pY29kZVN0cmluZyYg
dGV4dCwKLSAgICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQpIGNvbnN0IHsKLSAgcGluSW5kZXgo
c3RhcnQpOwotICByZXR1cm4gaW5kZXhPZih0ZXh0LCAwLCB0ZXh0Lmxlbmd0aCgpLCBzdGFydCwg
bGVuZ3RoKCkgLSBzdGFydCk7Ci19Ci0KLWlubGluZSBpbnQzMl90Ci1Vbmljb2RlU3RyaW5nOjpp
bmRleE9mKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRleHQsCi0gICAgICAgICAgICAgICBpbnQzMl90
IHN0YXJ0LAotICAgICAgICAgICAgICAgaW50MzJfdCBfbGVuZ3RoKSBjb25zdAoteyByZXR1cm4g
aW5kZXhPZih0ZXh0LCAwLCB0ZXh0Lmxlbmd0aCgpLCBzdGFydCwgX2xlbmd0aCk7IH0KLQotaW5s
aW5lIGludDMyX3QKLVVuaWNvZGVTdHJpbmc6OmluZGV4T2YoY29uc3QgVUNoYXIgKnNyY0NoYXJz
LAotICAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgsCi0gICAgICAgICAgICAgICBpbnQz
Ml90IHN0YXJ0KSBjb25zdCB7Ci0gIHBpbkluZGV4KHN0YXJ0KTsKLSAgcmV0dXJuIGluZGV4T2Yo
c3JjQ2hhcnMsIDAsIHNyY0xlbmd0aCwgc3RhcnQsIGxlbmd0aCgpIC0gc3RhcnQpOwotfQotCi1p
bmxpbmUgaW50MzJfdAotVW5pY29kZVN0cmluZzo6aW5kZXhPZihjb25zdCBVQ2hhciAqc3JjQ2hh
cnMsCi0gICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwKLSAgICAgICAgICAgICAgIGlu
dDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgICBpbnQzMl90IF9sZW5ndGgpIGNvbnN0Ci17IHJl
dHVybiBpbmRleE9mKHNyY0NoYXJzLCAwLCBzcmNMZW5ndGgsIHN0YXJ0LCBfbGVuZ3RoKTsgfQot
Ci1pbmxpbmUgaW50MzJfdAotVW5pY29kZVN0cmluZzo6aW5kZXhPZihVQ2hhciBjLAotICAgICAg
ICAgICAgICAgaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgIGludDMyX3QgX2xlbmd0aCkg
Y29uc3QKLXsgcmV0dXJuIGRvSW5kZXhPZihjLCBzdGFydCwgX2xlbmd0aCk7IH0KLQotaW5saW5l
IGludDMyX3QKLVVuaWNvZGVTdHJpbmc6OmluZGV4T2YoVUNoYXIzMiBjLAotICAgICAgICAgICAg
ICAgaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgIGludDMyX3QgX2xlbmd0aCkgY29uc3QK
LXsgcmV0dXJuIGRvSW5kZXhPZihjLCBzdGFydCwgX2xlbmd0aCk7IH0KLQotaW5saW5lIGludDMy
X3QKLVVuaWNvZGVTdHJpbmc6OmluZGV4T2YoVUNoYXIgYykgY29uc3QKLXsgcmV0dXJuIGRvSW5k
ZXhPZihjLCAwLCBsZW5ndGgoKSk7IH0KLQotaW5saW5lIGludDMyX3QKLVVuaWNvZGVTdHJpbmc6
OmluZGV4T2YoVUNoYXIzMiBjKSBjb25zdAoteyByZXR1cm4gaW5kZXhPZihjLCAwLCBsZW5ndGgo
KSk7IH0KLQotaW5saW5lIGludDMyX3QKLVVuaWNvZGVTdHJpbmc6OmluZGV4T2YoVUNoYXIgYywK
LSAgICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQpIGNvbnN0IHsKLSAgcGluSW5kZXgoc3RhcnQp
OwotICByZXR1cm4gZG9JbmRleE9mKGMsIHN0YXJ0LCBsZW5ndGgoKSAtIHN0YXJ0KTsKLX0KLQot
aW5saW5lIGludDMyX3QKLVVuaWNvZGVTdHJpbmc6OmluZGV4T2YoVUNoYXIzMiBjLAotICAgICAg
ICAgICAgICAgaW50MzJfdCBzdGFydCkgY29uc3QgewotICBwaW5JbmRleChzdGFydCk7Ci0gIHJl
dHVybiBpbmRleE9mKGMsIHN0YXJ0LCBsZW5ndGgoKSAtIHN0YXJ0KTsKLX0KLQotaW5saW5lIGlu
dDMyX3QKLVVuaWNvZGVTdHJpbmc6Omxhc3RJbmRleE9mKGNvbnN0IFVDaGFyICpzcmNDaGFycywK
LSAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLAotICAgICAgICAgICAgICAgaW50MzJf
dCBzdGFydCwKLSAgICAgICAgICAgICAgIGludDMyX3QgX2xlbmd0aCkgY29uc3QKLXsgcmV0dXJu
IGxhc3RJbmRleE9mKHNyY0NoYXJzLCAwLCBzcmNMZW5ndGgsIHN0YXJ0LCBfbGVuZ3RoKTsgfQot
Ci1pbmxpbmUgaW50MzJfdAotVW5pY29kZVN0cmluZzo6bGFzdEluZGV4T2YoY29uc3QgVUNoYXIg
KnNyY0NoYXJzLAotICAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgsCi0gICAgICAgICAg
ICAgICBpbnQzMl90IHN0YXJ0KSBjb25zdCB7Ci0gIHBpbkluZGV4KHN0YXJ0KTsKLSAgcmV0dXJu
IGxhc3RJbmRleE9mKHNyY0NoYXJzLCAwLCBzcmNMZW5ndGgsIHN0YXJ0LCBsZW5ndGgoKSAtIHN0
YXJ0KTsKLX0KLQotaW5saW5lIGludDMyX3QKLVVuaWNvZGVTdHJpbmc6Omxhc3RJbmRleE9mKGNv
bnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQsCi0gICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0
YXJ0LAotICAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgsCi0gICAgICAgICAgICAgICBp
bnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgICAgaW50MzJfdCBfbGVuZ3RoKSBjb25zdAotewot
ICBpZighc3JjVGV4dC5pc0JvZ3VzKCkpIHsKLSAgICBzcmNUZXh0LnBpbkluZGljZXMoc3JjU3Rh
cnQsIHNyY0xlbmd0aCk7Ci0gICAgaWYoc3JjTGVuZ3RoID4gMCkgewotICAgICAgcmV0dXJuIGxh
c3RJbmRleE9mKHNyY1RleHQuZ2V0QXJyYXlTdGFydCgpLCBzcmNTdGFydCwgc3JjTGVuZ3RoLCBz
dGFydCwgX2xlbmd0aCk7Ci0gICAgfQotICB9Ci0gIHJldHVybiAtMTsKLX0KLQotaW5saW5lIGlu
dDMyX3QKLVVuaWNvZGVTdHJpbmc6Omxhc3RJbmRleE9mKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRl
eHQsCi0gICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgICAgaW50MzJf
dCBfbGVuZ3RoKSBjb25zdAoteyByZXR1cm4gbGFzdEluZGV4T2YodGV4dCwgMCwgdGV4dC5sZW5n
dGgoKSwgc3RhcnQsIF9sZW5ndGgpOyB9Ci0KLWlubGluZSBpbnQzMl90Ci1Vbmljb2RlU3RyaW5n
OjpsYXN0SW5kZXhPZihjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0LAotICAgICAgICAgICAgICAg
aW50MzJfdCBzdGFydCkgY29uc3QgewotICBwaW5JbmRleChzdGFydCk7Ci0gIHJldHVybiBsYXN0
SW5kZXhPZih0ZXh0LCAwLCB0ZXh0Lmxlbmd0aCgpLCBzdGFydCwgbGVuZ3RoKCkgLSBzdGFydCk7
Ci19Ci0KLWlubGluZSBpbnQzMl90Ci1Vbmljb2RlU3RyaW5nOjpsYXN0SW5kZXhPZihjb25zdCBV
bmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdAoteyByZXR1cm4gbGFzdEluZGV4T2YodGV4dCwgMCwg
dGV4dC5sZW5ndGgoKSwgMCwgbGVuZ3RoKCkpOyB9Ci0KLWlubGluZSBpbnQzMl90Ci1Vbmljb2Rl
U3RyaW5nOjpsYXN0SW5kZXhPZihVQ2hhciBjLAotICAgICAgICAgICAgICAgaW50MzJfdCBzdGFy
dCwKLSAgICAgICAgICAgICAgIGludDMyX3QgX2xlbmd0aCkgY29uc3QKLXsgcmV0dXJuIGRvTGFz
dEluZGV4T2YoYywgc3RhcnQsIF9sZW5ndGgpOyB9Ci0KLWlubGluZSBpbnQzMl90Ci1Vbmljb2Rl
U3RyaW5nOjpsYXN0SW5kZXhPZihVQ2hhcjMyIGMsCi0gICAgICAgICAgICAgICBpbnQzMl90IHN0
YXJ0LAotICAgICAgICAgICAgICAgaW50MzJfdCBfbGVuZ3RoKSBjb25zdCB7Ci0gIHJldHVybiBk
b0xhc3RJbmRleE9mKGMsIHN0YXJ0LCBfbGVuZ3RoKTsKLX0KLQotaW5saW5lIGludDMyX3QKLVVu
aWNvZGVTdHJpbmc6Omxhc3RJbmRleE9mKFVDaGFyIGMpIGNvbnN0Ci17IHJldHVybiBkb0xhc3RJ
bmRleE9mKGMsIDAsIGxlbmd0aCgpKTsgfQotCi1pbmxpbmUgaW50MzJfdAotVW5pY29kZVN0cmlu
Zzo6bGFzdEluZGV4T2YoVUNoYXIzMiBjKSBjb25zdCB7Ci0gIHJldHVybiBsYXN0SW5kZXhPZihj
LCAwLCBsZW5ndGgoKSk7Ci19Ci0KLWlubGluZSBpbnQzMl90Ci1Vbmljb2RlU3RyaW5nOjpsYXN0
SW5kZXhPZihVQ2hhciBjLAotICAgICAgICAgICAgICAgaW50MzJfdCBzdGFydCkgY29uc3Qgewot
ICBwaW5JbmRleChzdGFydCk7Ci0gIHJldHVybiBkb0xhc3RJbmRleE9mKGMsIHN0YXJ0LCBsZW5n
dGgoKSAtIHN0YXJ0KTsKLX0KLQotaW5saW5lIGludDMyX3QKLVVuaWNvZGVTdHJpbmc6Omxhc3RJ
bmRleE9mKFVDaGFyMzIgYywKLSAgICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQpIGNvbnN0IHsK
LSAgcGluSW5kZXgoc3RhcnQpOwotICByZXR1cm4gbGFzdEluZGV4T2YoYywgc3RhcnQsIGxlbmd0
aCgpIC0gc3RhcnQpOwotfQotCi1pbmxpbmUgVUJvb2wKLVVuaWNvZGVTdHJpbmc6OnN0YXJ0c1dp
dGgoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3QKLXsgcmV0dXJuIGNvbXBhcmUoMCwg
dGV4dC5sZW5ndGgoKSwgdGV4dCwgMCwgdGV4dC5sZW5ndGgoKSkgPT0gMDsgfQotCi1pbmxpbmUg
VUJvb2wKLVVuaWNvZGVTdHJpbmc6OnN0YXJ0c1dpdGgoY29uc3QgVW5pY29kZVN0cmluZyYgc3Jj
VGV4dCwKLSAgICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAgICAgICAgaW50
MzJfdCBzcmNMZW5ndGgpIGNvbnN0Ci17IHJldHVybiBkb0NvbXBhcmUoMCwgc3JjTGVuZ3RoLCBz
cmNUZXh0LCBzcmNTdGFydCwgc3JjTGVuZ3RoKSA9PSAwOyB9Ci0KLWlubGluZSBVQm9vbAotVW5p
Y29kZVN0cmluZzo6c3RhcnRzV2l0aChjb25zdCBVQ2hhciAqc3JjQ2hhcnMsIGludDMyX3Qgc3Jj
TGVuZ3RoKSBjb25zdCB7Ci0gIGlmKHNyY0xlbmd0aCA8IDApIHsKLSAgICBzcmNMZW5ndGggPSB1
X3N0cmxlbihzcmNDaGFycyk7Ci0gIH0KLSAgcmV0dXJuIGRvQ29tcGFyZSgwLCBzcmNMZW5ndGgs
IHNyY0NoYXJzLCAwLCBzcmNMZW5ndGgpID09IDA7Ci19Ci0KLWlubGluZSBVQm9vbAotVW5pY29k
ZVN0cmluZzo6c3RhcnRzV2l0aChjb25zdCBVQ2hhciAqc3JjQ2hhcnMsIGludDMyX3Qgc3JjU3Rh
cnQsIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdCB7Ci0gIGlmKHNyY0xlbmd0aCA8IDApIHsKLSAg
ICBzcmNMZW5ndGggPSB1X3N0cmxlbihzcmNDaGFycyk7Ci0gIH0KLSAgcmV0dXJuIGRvQ29tcGFy
ZSgwLCBzcmNMZW5ndGgsIHNyY0NoYXJzLCBzcmNTdGFydCwgc3JjTGVuZ3RoKSA9PSAwOwotfQot
Ci1pbmxpbmUgVUJvb2wKLVVuaWNvZGVTdHJpbmc6OmVuZHNXaXRoKGNvbnN0IFVuaWNvZGVTdHJp
bmcmIHRleHQpIGNvbnN0Ci17IHJldHVybiBkb0NvbXBhcmUobGVuZ3RoKCkgLSB0ZXh0Lmxlbmd0
aCgpLCB0ZXh0Lmxlbmd0aCgpLAotICAgICAgICAgICB0ZXh0LCAwLCB0ZXh0Lmxlbmd0aCgpKSA9
PSAwOyB9Ci0KLWlubGluZSBVQm9vbAotVW5pY29kZVN0cmluZzo6ZW5kc1dpdGgoY29uc3QgVW5p
Y29kZVN0cmluZyYgc3JjVGV4dCwKLSAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsCi0gICAg
ICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCkgY29uc3QgewotICBzcmNUZXh0LnBpbkluZGljZXMo
c3JjU3RhcnQsIHNyY0xlbmd0aCk7Ci0gIHJldHVybiBkb0NvbXBhcmUobGVuZ3RoKCkgLSBzcmNM
ZW5ndGgsIHNyY0xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICBzcmNUZXh0LCBzcmNTdGFydCwg
c3JjTGVuZ3RoKSA9PSAwOwotfQotCi1pbmxpbmUgVUJvb2wKLVVuaWNvZGVTdHJpbmc6OmVuZHNX
aXRoKGNvbnN0IFVDaGFyICpzcmNDaGFycywKLSAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3Ro
KSBjb25zdCB7Ci0gIGlmKHNyY0xlbmd0aCA8IDApIHsKLSAgICBzcmNMZW5ndGggPSB1X3N0cmxl
bihzcmNDaGFycyk7Ci0gIH0KLSAgcmV0dXJuIGRvQ29tcGFyZShsZW5ndGgoKSAtIHNyY0xlbmd0
aCwgc3JjTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgIHNyY0NoYXJzLCAwLCBzcmNMZW5ndGgp
ID09IDA7Ci19Ci0KLWlubGluZSBVQm9vbAotVW5pY29kZVN0cmluZzo6ZW5kc1dpdGgoY29uc3Qg
VUNoYXIgKnNyY0NoYXJzLAotICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAg
ICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdCB7Ci0gIGlmKHNyY0xlbmd0aCA8IDApIHsKLSAg
ICBzcmNMZW5ndGggPSB1X3N0cmxlbihzcmNDaGFycyArIHNyY1N0YXJ0KTsKLSAgfQotICByZXR1
cm4gZG9Db21wYXJlKGxlbmd0aCgpIC0gc3JjTGVuZ3RoLCBzcmNMZW5ndGgsCi0gICAgICAgICAg
ICAgICAgICAgc3JjQ2hhcnMsIHNyY1N0YXJ0LCBzcmNMZW5ndGgpID09IDA7Ci19Ci0KLS8vPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gcmVwbGFjZQotLy89PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1pbmxpbmUgVW5pY29kZVN0cmlu
ZyYKLVVuaWNvZGVTdHJpbmc6OnJlcGxhY2UoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAg
IGludDMyX3QgX2xlbmd0aCwKLSAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNy
Y1RleHQpCi17IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIF9sZW5ndGgsIHNyY1RleHQsIDAsIHNy
Y1RleHQubGVuZ3RoKCkpOyB9Ci0KLWlubGluZSBVbmljb2RlU3RyaW5nJgotVW5pY29kZVN0cmlu
Zzo6cmVwbGFjZShpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgICAgaW50MzJfdCBfbGVuZ3Ro
LAotICAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCwKLSAgICAgICAg
ICAgICAgIGludDMyX3Qgc3JjU3RhcnQsCi0gICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0
aCkKLXsgcmV0dXJuIGRvUmVwbGFjZShzdGFydCwgX2xlbmd0aCwgc3JjVGV4dCwgc3JjU3RhcnQs
IHNyY0xlbmd0aCk7IH0KLQotaW5saW5lIFVuaWNvZGVTdHJpbmcmCi1Vbmljb2RlU3RyaW5nOjpy
ZXBsYWNlKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgICBpbnQzMl90IF9sZW5ndGgsCi0g
ICAgICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjQ2hhcnMsCi0gICAgICAgICAgICAgICBpbnQz
Ml90IHNyY0xlbmd0aCkKLXsgcmV0dXJuIGRvUmVwbGFjZShzdGFydCwgX2xlbmd0aCwgc3JjQ2hh
cnMsIDAsIHNyY0xlbmd0aCk7IH0KLQotaW5saW5lIFVuaWNvZGVTdHJpbmcmCi1Vbmljb2RlU3Ry
aW5nOjpyZXBsYWNlKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgICBpbnQzMl90IF9sZW5n
dGgsCi0gICAgICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjQ2hhcnMsCi0gICAgICAgICAgICAg
ICBpbnQzMl90IHNyY1N0YXJ0LAotICAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpCi17
IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIF9sZW5ndGgsIHNyY0NoYXJzLCBzcmNTdGFydCwgc3Jj
TGVuZ3RoKTsgfQotCi1pbmxpbmUgVW5pY29kZVN0cmluZyYKLVVuaWNvZGVTdHJpbmc6OnJlcGxh
Y2UoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgIGludDMyX3QgX2xlbmd0aCwKLSAgICAg
ICAgICAgICAgIFVDaGFyIHNyY0NoYXIpCi17IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIF9sZW5n
dGgsICZzcmNDaGFyLCAwLCAxKTsgfQotCi1pbmxpbmUgVW5pY29kZVN0cmluZyYKLVVuaWNvZGVT
dHJpbmc6OnJlcGxhY2VCZXR3ZWVuKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgICAgICBp
bnQzMl90IGxpbWl0LAotICAgICAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyYgc3Jj
VGV4dCkKLXsgcmV0dXJuIGRvUmVwbGFjZShzdGFydCwgbGltaXQgLSBzdGFydCwgc3JjVGV4dCwg
MCwgc3JjVGV4dC5sZW5ndGgoKSk7IH0KLQotaW5saW5lIFVuaWNvZGVTdHJpbmcmCi1Vbmljb2Rl
U3RyaW5nOjpyZXBsYWNlQmV0d2VlbihpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgICAgICAg
aW50MzJfdCBsaW1pdCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNy
Y1RleHQsCi0gICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LAotICAgICAgICAgICAg
ICAgICAgaW50MzJfdCBzcmNMaW1pdCkKLXsgcmV0dXJuIGRvUmVwbGFjZShzdGFydCwgbGltaXQg
LSBzdGFydCwgc3JjVGV4dCwgc3JjU3RhcnQsIHNyY0xpbWl0IC0gc3JjU3RhcnQpOyB9Ci0KLWlu
bGluZSBVbmljb2RlU3RyaW5nJgotVW5pY29kZVN0cmluZzo6ZmluZEFuZFJlcGxhY2UoY29uc3Qg
VW5pY29kZVN0cmluZyYgb2xkVGV4dCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVT
dHJpbmcmIG5ld1RleHQpCi17IHJldHVybiBmaW5kQW5kUmVwbGFjZSgwLCBsZW5ndGgoKSwgb2xk
VGV4dCwgMCwgb2xkVGV4dC5sZW5ndGgoKSwKLSAgICAgICAgICAgIG5ld1RleHQsIDAsIG5ld1Rl
eHQubGVuZ3RoKCkpOyB9Ci0KLWlubGluZSBVbmljb2RlU3RyaW5nJgotVW5pY29kZVN0cmluZzo6
ZmluZEFuZFJlcGxhY2UoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgICAgIGludDMyX3Qg
X2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIG9sZFRleHQs
Ci0gICAgICAgICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBuZXdUZXh0KQoteyByZXR1
cm4gZmluZEFuZFJlcGxhY2Uoc3RhcnQsIF9sZW5ndGgsIG9sZFRleHQsIDAsIG9sZFRleHQubGVu
Z3RoKCksCi0gICAgICAgICAgICBuZXdUZXh0LCAwLCBuZXdUZXh0Lmxlbmd0aCgpKTsgfQotCi0v
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBleHRyYWN0Ci0vLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci1pbmxpbmUgdm9pZAotVW5pY29kZVN0cmluZzo6ZG9FeHRyYWN0
KGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgaW50MzJfdCBfbGVuZ3RoLAotICAgICAgICAg
ICAgIFVuaWNvZGVTdHJpbmcmIHRhcmdldCkgY29uc3QKLXsgdGFyZ2V0LnJlcGxhY2UoMCwgdGFy
Z2V0Lmxlbmd0aCgpLCAqdGhpcywgc3RhcnQsIF9sZW5ndGgpOyB9Ci0KLWlubGluZSB2b2lkCi1V
bmljb2RlU3RyaW5nOjpleHRyYWN0KGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgICBpbnQz
Ml90IF9sZW5ndGgsCi0gICAgICAgICAgICAgICBVQ2hhciAqdGFyZ2V0LAotICAgICAgICAgICAg
ICAgaW50MzJfdCB0YXJnZXRTdGFydCkgY29uc3QKLXsgZG9FeHRyYWN0KHN0YXJ0LCBfbGVuZ3Ro
LCB0YXJnZXQsIHRhcmdldFN0YXJ0KTsgfQotCi1pbmxpbmUgdm9pZAotVW5pY29kZVN0cmluZzo6
ZXh0cmFjdChpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgICAgaW50MzJfdCBfbGVuZ3RoLAot
ICAgICAgICAgICAgICAgVW5pY29kZVN0cmluZyYgdGFyZ2V0KSBjb25zdAoteyBkb0V4dHJhY3Qo
c3RhcnQsIF9sZW5ndGgsIHRhcmdldCk7IH0KLQotI2lmICFVQ09ORklHX05PX0NPTlZFUlNJT04K
LQotaW5saW5lIGludDMyX3QKLVVuaWNvZGVTdHJpbmc6OmV4dHJhY3QoaW50MzJfdCBzdGFydCwK
LSAgICAgICAgICAgICAgIGludDMyX3QgX2xlbmd0aCwKLSAgICAgICAgICAgICAgIGNoYXIgKmRz
dCwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvZGVwYWdlKSBjb25zdAotCi17Ci0gIC8v
IFRoaXMgZHN0U2l6ZSB2YWx1ZSB3aWxsIGJlIGNoZWNrZWQgZXhwbGljaXRseQotICByZXR1cm4g
ZXh0cmFjdChzdGFydCwgX2xlbmd0aCwgZHN0LCBkc3QhPTAgPyAweGZmZmZmZmZmIDogMCwgY29k
ZXBhZ2UpOwotfQotCi0jZW5kaWYKLQotaW5saW5lIHZvaWQKLVVuaWNvZGVTdHJpbmc6OmV4dHJh
Y3RCZXR3ZWVuKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgICAgICBpbnQzMl90IGxpbWl0
LAotICAgICAgICAgICAgICAgICAgVUNoYXIgKmRzdCwKLSAgICAgICAgICAgICAgICAgIGludDMy
X3QgZHN0U3RhcnQpIGNvbnN0IHsKLSAgcGluSW5kZXgoc3RhcnQpOwotICBwaW5JbmRleChsaW1p
dCk7Ci0gIGRvRXh0cmFjdChzdGFydCwgbGltaXQgLSBzdGFydCwgZHN0LCBkc3RTdGFydCk7Ci19
Ci0KLWlubGluZSBVbmljb2RlU3RyaW5nCi1Vbmljb2RlU3RyaW5nOjp0ZW1wU3ViU3RyaW5nQmV0
d2VlbihpbnQzMl90IHN0YXJ0LCBpbnQzMl90IGxpbWl0KSBjb25zdCB7Ci0gICAgcmV0dXJuIHRl
bXBTdWJTdHJpbmcoc3RhcnQsIGxpbWl0IC0gc3RhcnQpOwotfQotCi1pbmxpbmUgVUNoYXIKLVVu
aWNvZGVTdHJpbmc6OmRvQ2hhckF0KGludDMyX3Qgb2Zmc2V0KSBjb25zdAotewotICBpZigodWlu
dDMyX3Qpb2Zmc2V0IDwgKHVpbnQzMl90KWxlbmd0aCgpKSB7Ci0gICAgcmV0dXJuIGdldEFycmF5
U3RhcnQoKVtvZmZzZXRdOwotICB9IGVsc2UgewotICAgIHJldHVybiBrSW52YWxpZFVDaGFyOwot
ICB9Ci19Ci0KLWlubGluZSBVQ2hhcgotVW5pY29kZVN0cmluZzo6Y2hhckF0KGludDMyX3Qgb2Zm
c2V0KSBjb25zdAoteyByZXR1cm4gZG9DaGFyQXQob2Zmc2V0KTsgfQotCi1pbmxpbmUgVUNoYXIK
LVVuaWNvZGVTdHJpbmc6Om9wZXJhdG9yW10gKGludDMyX3Qgb2Zmc2V0KSBjb25zdAoteyByZXR1
cm4gZG9DaGFyQXQob2Zmc2V0KTsgfQotCi1pbmxpbmUgVUJvb2wKLVVuaWNvZGVTdHJpbmc6Omlz
RW1wdHkoKSBjb25zdCB7Ci0gIC8vIEFyaXRobWV0aWMgb3IgbG9naWNhbCByaWdodCBzaGlmdCBk
b2VzIG5vdCBtYXR0ZXI6IG9ubHkgdGVzdGluZyBmb3IgMC4KLSAgcmV0dXJuIChmVW5pb24uZkZp
ZWxkcy5mTGVuZ3RoQW5kRmxhZ3M+PmtMZW5ndGhTaGlmdCkgPT0gMDsKLX0KLQotLy89PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBXcml0ZSBpbXBsZW1lbnRhdGlv
biBtZXRob2RzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWlu
bGluZSB2b2lkCi1Vbmljb2RlU3RyaW5nOjpzZXRaZXJvTGVuZ3RoKCkgewotICBmVW5pb24uZkZp
ZWxkcy5mTGVuZ3RoQW5kRmxhZ3MgJj0ga0FsbFN0b3JhZ2VGbGFnczsKLX0KLQotaW5saW5lIHZv
aWQKLVVuaWNvZGVTdHJpbmc6OnNldFNob3J0TGVuZ3RoKGludDMyX3QgbGVuKSB7Ci0gIC8vIHJl
cXVpcmVzIDAgPD0gbGVuIDw9IGtNYXhTaG9ydExlbmd0aAotICBmVW5pb24uZkZpZWxkcy5mTGVu
Z3RoQW5kRmxhZ3MgPQotICAgIChpbnQxNl90KSgoZlVuaW9uLmZGaWVsZHMuZkxlbmd0aEFuZEZs
YWdzICYga0FsbFN0b3JhZ2VGbGFncykgfCAobGVuIDw8IGtMZW5ndGhTaGlmdCkpOwotfQotCi1p
bmxpbmUgdm9pZAotVW5pY29kZVN0cmluZzo6c2V0TGVuZ3RoKGludDMyX3QgbGVuKSB7Ci0gIGlm
KGxlbiA8PSBrTWF4U2hvcnRMZW5ndGgpIHsKLSAgICBzZXRTaG9ydExlbmd0aChsZW4pOwotICB9
IGVsc2UgewotICAgIGZVbmlvbi5mRmllbGRzLmZMZW5ndGhBbmRGbGFncyB8PSBrTGVuZ3RoSXNM
YXJnZTsKLSAgICBmVW5pb24uZkZpZWxkcy5mTGVuZ3RoID0gbGVuOwotICB9Ci19Ci0KLWlubGlu
ZSB2b2lkCi1Vbmljb2RlU3RyaW5nOjpzZXRUb0VtcHR5KCkgewotICBmVW5pb24uZkZpZWxkcy5m
TGVuZ3RoQW5kRmxhZ3MgPSBrU2hvcnRTdHJpbmc7Ci19Ci0KLWlubGluZSB2b2lkCi1Vbmljb2Rl
U3RyaW5nOjpzZXRBcnJheShVQ2hhciAqYXJyYXksIGludDMyX3QgbGVuLCBpbnQzMl90IGNhcGFj
aXR5KSB7Ci0gIHNldExlbmd0aChsZW4pOwotICBmVW5pb24uZkZpZWxkcy5mQXJyYXkgPSBhcnJh
eTsKLSAgZlVuaW9uLmZGaWVsZHMuZkNhcGFjaXR5ID0gY2FwYWNpdHk7Ci19Ci0KLWlubGluZSBV
bmljb2RlU3RyaW5nJgotVW5pY29kZVN0cmluZzo6b3BlcmF0b3I9IChVQ2hhciBjaCkKLXsgcmV0
dXJuIGRvUmVwbGFjZSgwLCBsZW5ndGgoKSwgJmNoLCAwLCAxKTsgfQotCi1pbmxpbmUgVW5pY29k
ZVN0cmluZyYKLVVuaWNvZGVTdHJpbmc6Om9wZXJhdG9yPSAoVUNoYXIzMiBjaCkKLXsgcmV0dXJu
IHJlcGxhY2UoMCwgbGVuZ3RoKCksIGNoKTsgfQotCi1pbmxpbmUgVW5pY29kZVN0cmluZyYKLVVu
aWNvZGVTdHJpbmc6OnNldFRvKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQsCi0gICAgICAg
ICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCkK
LXsKLSAgdW5Cb2d1cygpOwotICByZXR1cm4gZG9SZXBsYWNlKDAsIGxlbmd0aCgpLCBzcmNUZXh0
LCBzcmNTdGFydCwgc3JjTGVuZ3RoKTsKLX0KLQotaW5saW5lIFVuaWNvZGVTdHJpbmcmCi1Vbmlj
b2RlU3RyaW5nOjpzZXRUbyhjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0LAotICAgICAgICAg
ICAgIGludDMyX3Qgc3JjU3RhcnQpCi17Ci0gIHVuQm9ndXMoKTsKLSAgc3JjVGV4dC5waW5JbmRl
eChzcmNTdGFydCk7Ci0gIHJldHVybiBkb1JlcGxhY2UoMCwgbGVuZ3RoKCksIHNyY1RleHQsIHNy
Y1N0YXJ0LCBzcmNUZXh0Lmxlbmd0aCgpIC0gc3JjU3RhcnQpOwotfQotCi1pbmxpbmUgVW5pY29k
ZVN0cmluZyYKLVVuaWNvZGVTdHJpbmc6OnNldFRvKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1Rl
eHQpCi17Ci0gIHJldHVybiBjb3B5RnJvbShzcmNUZXh0KTsKLX0KLQotaW5saW5lIFVuaWNvZGVT
dHJpbmcmCi1Vbmljb2RlU3RyaW5nOjpzZXRUbyhjb25zdCBVQ2hhciAqc3JjQ2hhcnMsCi0gICAg
ICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpCi17Ci0gIHVuQm9ndXMoKTsKLSAgcmV0dXJuIGRv
UmVwbGFjZSgwLCBsZW5ndGgoKSwgc3JjQ2hhcnMsIDAsIHNyY0xlbmd0aCk7Ci19Ci0KLWlubGlu
ZSBVbmljb2RlU3RyaW5nJgotVW5pY29kZVN0cmluZzo6c2V0VG8oVUNoYXIgc3JjQ2hhcikKLXsK
LSAgdW5Cb2d1cygpOwotICByZXR1cm4gZG9SZXBsYWNlKDAsIGxlbmd0aCgpLCAmc3JjQ2hhciwg
MCwgMSk7Ci19Ci0KLWlubGluZSBVbmljb2RlU3RyaW5nJgotVW5pY29kZVN0cmluZzo6c2V0VG8o
VUNoYXIzMiBzcmNDaGFyKQotewotICB1bkJvZ3VzKCk7Ci0gIHJldHVybiByZXBsYWNlKDAsIGxl
bmd0aCgpLCBzcmNDaGFyKTsKLX0KLQotaW5saW5lIFVuaWNvZGVTdHJpbmcmCi1Vbmljb2RlU3Ry
aW5nOjphcHBlbmQoY29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCwKLSAgICAgICAgICAgICAg
aW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpCi17IHJl
dHVybiBkb1JlcGxhY2UobGVuZ3RoKCksIDAsIHNyY1RleHQsIHNyY1N0YXJ0LCBzcmNMZW5ndGgp
OyB9Ci0KLWlubGluZSBVbmljb2RlU3RyaW5nJgotVW5pY29kZVN0cmluZzo6YXBwZW5kKGNvbnN0
IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQpCi17IHJldHVybiBkb1JlcGxhY2UobGVuZ3RoKCksIDAs
IHNyY1RleHQsIDAsIHNyY1RleHQubGVuZ3RoKCkpOyB9Ci0KLWlubGluZSBVbmljb2RlU3RyaW5n
JgotVW5pY29kZVN0cmluZzo6YXBwZW5kKGNvbnN0IFVDaGFyICpzcmNDaGFycywKLSAgICAgICAg
ICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgp
Ci17IHJldHVybiBkb1JlcGxhY2UobGVuZ3RoKCksIDAsIHNyY0NoYXJzLCBzcmNTdGFydCwgc3Jj
TGVuZ3RoKTsgfQotCi1pbmxpbmUgVW5pY29kZVN0cmluZyYKLVVuaWNvZGVTdHJpbmc6OmFwcGVu
ZChjb25zdCBVQ2hhciAqc3JjQ2hhcnMsCi0gICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3Ro
KQoteyByZXR1cm4gZG9SZXBsYWNlKGxlbmd0aCgpLCAwLCBzcmNDaGFycywgMCwgc3JjTGVuZ3Ro
KTsgfQotCi1pbmxpbmUgVW5pY29kZVN0cmluZyYKLVVuaWNvZGVTdHJpbmc6OmFwcGVuZChVQ2hh
ciBzcmNDaGFyKQoteyByZXR1cm4gZG9SZXBsYWNlKGxlbmd0aCgpLCAwLCAmc3JjQ2hhciwgMCwg
MSk7IH0KLQotaW5saW5lIFVuaWNvZGVTdHJpbmcmCi1Vbmljb2RlU3RyaW5nOjpvcGVyYXRvcis9
IChVQ2hhciBjaCkKLXsgcmV0dXJuIGRvUmVwbGFjZShsZW5ndGgoKSwgMCwgJmNoLCAwLCAxKTsg
fQotCi1pbmxpbmUgVW5pY29kZVN0cmluZyYKLVVuaWNvZGVTdHJpbmc6Om9wZXJhdG9yKz0gKFVD
aGFyMzIgY2gpIHsKLSAgcmV0dXJuIGFwcGVuZChjaCk7Ci19Ci0KLWlubGluZSBVbmljb2RlU3Ry
aW5nJgotVW5pY29kZVN0cmluZzo6b3BlcmF0b3IrPSAoY29uc3QgVW5pY29kZVN0cmluZyYgc3Jj
VGV4dCkKLXsgcmV0dXJuIGRvUmVwbGFjZShsZW5ndGgoKSwgMCwgc3JjVGV4dCwgMCwgc3JjVGV4
dC5sZW5ndGgoKSk7IH0KLQotaW5saW5lIFVuaWNvZGVTdHJpbmcmCi1Vbmljb2RlU3RyaW5nOjpp
bnNlcnQoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyYg
c3JjVGV4dCwKLSAgICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAgICAgICAg
aW50MzJfdCBzcmNMZW5ndGgpCi17IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIDAsIHNyY1RleHQs
IHNyY1N0YXJ0LCBzcmNMZW5ndGgpOyB9Ci0KLWlubGluZSBVbmljb2RlU3RyaW5nJgotVW5pY29k
ZVN0cmluZzo6aW5zZXJ0KGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgIGNvbnN0IFVuaWNv
ZGVTdHJpbmcmIHNyY1RleHQpCi17IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIDAsIHNyY1RleHQs
IDAsIHNyY1RleHQubGVuZ3RoKCkpOyB9Ci0KLWlubGluZSBVbmljb2RlU3RyaW5nJgotVW5pY29k
ZVN0cmluZzo6aW5zZXJ0KGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgIGNvbnN0IFVDaGFy
ICpzcmNDaGFycywKLSAgICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwKLSAgICAgICAgICAg
ICAgaW50MzJfdCBzcmNMZW5ndGgpCi17IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIDAsIHNyY0No
YXJzLCBzcmNTdGFydCwgc3JjTGVuZ3RoKTsgfQotCi1pbmxpbmUgVW5pY29kZVN0cmluZyYKLVVu
aWNvZGVTdHJpbmc6Omluc2VydChpbnQzMl90IHN0YXJ0LAotICAgICAgICAgICAgICBjb25zdCBV
Q2hhciAqc3JjQ2hhcnMsCi0gICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKQoteyByZXR1
cm4gZG9SZXBsYWNlKHN0YXJ0LCAwLCBzcmNDaGFycywgMCwgc3JjTGVuZ3RoKTsgfQotCi1pbmxp
bmUgVW5pY29kZVN0cmluZyYKLVVuaWNvZGVTdHJpbmc6Omluc2VydChpbnQzMl90IHN0YXJ0LAot
ICAgICAgICAgICAgICBVQ2hhciBzcmNDaGFyKQoteyByZXR1cm4gZG9SZXBsYWNlKHN0YXJ0LCAw
LCAmc3JjQ2hhciwgMCwgMSk7IH0KLQotaW5saW5lIFVuaWNvZGVTdHJpbmcmCi1Vbmljb2RlU3Ry
aW5nOjppbnNlcnQoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICAgVUNoYXIzMiBzcmNDaGFy
KQoteyByZXR1cm4gcmVwbGFjZShzdGFydCwgMCwgc3JjQ2hhcik7IH0KLQotCi1pbmxpbmUgVW5p
Y29kZVN0cmluZyYKLVVuaWNvZGVTdHJpbmc6OnJlbW92ZSgpCi17Ci0gIC8vIHJlbW92ZSgpIG9m
IGEgYm9ndXMgc3RyaW5nIG1ha2VzIHRoZSBzdHJpbmcgZW1wdHkgYW5kIG5vbi1ib2d1cwotICBp
Zihpc0JvZ3VzKCkpIHsKLSAgICBzZXRUb0VtcHR5KCk7Ci0gIH0gZWxzZSB7Ci0gICAgc2V0WmVy
b0xlbmd0aCgpOwotICB9Ci0gIHJldHVybiAqdGhpczsKLX0KLQotaW5saW5lIFVuaWNvZGVTdHJp
bmcmCi1Vbmljb2RlU3RyaW5nOjpyZW1vdmUoaW50MzJfdCBzdGFydCwKLSAgICAgICAgICAgICBp
bnQzMl90IF9sZW5ndGgpCi17Ci0gICAgaWYoc3RhcnQgPD0gMCAmJiBfbGVuZ3RoID09IElOVDMy
X01BWCkgewotICAgICAgICAvLyByZW1vdmUoZ3VhcmFudGVlZCBldmVyeXRoaW5nKSBvZiBhIGJv
Z3VzIHN0cmluZyBtYWtlcyB0aGUgc3RyaW5nIGVtcHR5IGFuZCBub24tYm9ndXMKLSAgICAgICAg
cmV0dXJuIHJlbW92ZSgpOwotICAgIH0KLSAgICByZXR1cm4gZG9SZXBsYWNlKHN0YXJ0LCBfbGVu
Z3RoLCBOVUxMLCAwLCAwKTsKLX0KLQotaW5saW5lIFVuaWNvZGVTdHJpbmcmCi1Vbmljb2RlU3Ry
aW5nOjpyZW1vdmVCZXR3ZWVuKGludDMyX3Qgc3RhcnQsCi0gICAgICAgICAgICAgICAgaW50MzJf
dCBsaW1pdCkKLXsgcmV0dXJuIGRvUmVwbGFjZShzdGFydCwgbGltaXQgLSBzdGFydCwgTlVMTCwg
MCwgMCk7IH0KLQotaW5saW5lIFVuaWNvZGVTdHJpbmcgJgotVW5pY29kZVN0cmluZzo6cmV0YWlu
QmV0d2VlbihpbnQzMl90IHN0YXJ0LCBpbnQzMl90IGxpbWl0KSB7Ci0gIHRydW5jYXRlKGxpbWl0
KTsKLSAgcmV0dXJuIGRvUmVwbGFjZSgwLCBzdGFydCwgTlVMTCwgMCwgMCk7Ci19Ci0KLWlubGlu
ZSBVQm9vbAotVW5pY29kZVN0cmluZzo6dHJ1bmNhdGUoaW50MzJfdCB0YXJnZXRMZW5ndGgpCi17
Ci0gIGlmKGlzQm9ndXMoKSAmJiB0YXJnZXRMZW5ndGggPT0gMCkgewotICAgIC8vIHRydW5jYXRl
KDApIG9mIGEgYm9ndXMgc3RyaW5nIG1ha2VzIHRoZSBzdHJpbmcgZW1wdHkgYW5kIG5vbi1ib2d1
cwotICAgIHVuQm9ndXMoKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0gZWxzZSBpZigodWludDMy
X3QpdGFyZ2V0TGVuZ3RoIDwgKHVpbnQzMl90KWxlbmd0aCgpKSB7Ci0gICAgc2V0TGVuZ3RoKHRh
cmdldExlbmd0aCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIEZB
TFNFOwotICB9Ci19Ci0KLWlubGluZSBVbmljb2RlU3RyaW5nJgotVW5pY29kZVN0cmluZzo6cmV2
ZXJzZSgpCi17IHJldHVybiBkb1JldmVyc2UoMCwgbGVuZ3RoKCkpOyB9Ci0KLWlubGluZSBVbmlj
b2RlU3RyaW5nJgotVW5pY29kZVN0cmluZzo6cmV2ZXJzZShpbnQzMl90IHN0YXJ0LAotICAgICAg
ICAgICAgICAgaW50MzJfdCBfbGVuZ3RoKQoteyByZXR1cm4gZG9SZXZlcnNlKHN0YXJ0LCBfbGVu
Z3RoKTsgfQotCi1VX05BTUVTUEFDRV9FTkQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3VvYmpl
Y3QuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1
L3VuaWNvZGUvdW9iamVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGNlYWNl
NjI2ZDczNWNiYWM2ZDgzNWJmNmFiYTM0ODMzYTlmNDNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvdW9iamVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEs
MzIwICswLDAgQEAKLS8qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSogICBDb3B5cmlnaHQg
KEMpIDIwMDItMjAxMiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcwotKiAgIENvcnBv
cmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotKgotKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCi0qICAgZmlsZSBuYW1lOiAgdW9iamVjdC5oCi0qICAgZW5jb2Rpbmc6ICAgVVMt
QVNDSUkKLSogICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkKLSogICBpbmRlbnRhdGlvbjo0Ci0q
Ci0qICAgY3JlYXRlZCBvbjogMjAwMmp1bjI2Ci0qICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNj
aGVyZXIKLSovCi0KLSNpZm5kZWYgX19VT0JKRUNUX0hfXwotI2RlZmluZSBfX1VPQkpFQ1RfSF9f
Ci0KLSNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgotCi0vKioKLSAqIFxmaWxlCi0gKiBcYnJp
ZWYgQysrIEFQSTogQ29tbW9uIElDVSBiYXNlIGNsYXNzIFVPYmplY3QuCi0gKi8KLQotLyoqCi0g
KiBAewotICogXGRlZiBVX05PX1RIUk9XCi0gKiAgICAgICAgIERlZmluZSB0aGlzIHRvIGRlZmlu
ZSB0aGUgdGhyb3coKSBzcGVjaWZpY2F0aW9uIHNvCi0gKiAgICAgICAgICAgICAgICAgY2VydGFp
biBmdW5jdGlvbnMgZG8gbm90IHRocm93IGFueSBleGNlcHRpb25zCi0gKgotICogICAgICAgICBV
TWVtb3J5IG9wZXJhdG9yIG5ldyBtZXRob2RzIHNob3VsZCBoYXZlIHRoZSB0aHJvdygpIHNwZWNp
ZmljYXRpb24gCi0gKiAgICAgICAgIGFwcGVuZGVkIHRvIHRoZW0sIHNvIHRoYXQgdGhlIGNvbXBp
bGVyIGFkZHMgdGhlIGFkZGl0aW9uYWwgTlVMTCBjaGVjayAKLSAqICAgICAgICAgYmVmb3JlIGNh
bGxpbmcgY29uc3RydWN0b3JzLiBXaXRob3V0LCBpZiA8Y29kZT5vcGVyYXRvciBuZXc8L2NvZGU+
IHJldHVybnMgTlVMTCB0aGUgCi0gKiAgICAgICAgIGNvbnN0cnVjdG9yIGlzIHN0aWxsIGNhbGxl
ZCwgYW5kIGlmIHRoZSBjb25zdHJ1Y3RvciByZWZlcmVuY2VzIG1lbWJlciAKLSAqICAgICAgICAg
ZGF0YSwgKHdoaWNoIGl0IHR5cGljYWxseSBkb2VzKSwgdGhlIHJlc3VsdCBpcyBhIHNlZ21lbnRh
dGlvbiB2aW9sYXRpb24uCi0gKgotICogQHN0YWJsZSBJQ1UgNC4yCi0gKi8KLSNpZm5kZWYgVV9O
T19USFJPVwotI2RlZmluZSBVX05PX1RIUk9XIHRocm93KCkKLSNlbmRpZgotCi0vKiogQH0gKi8K
LQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogVUNsYXNzSUQtYmFzZWQgUlRUSSAqLwotLyo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0qLwotCi0vKioKLSAqIFVDbGFzc0lEIGlzIHVzZWQgdG8gaWRlbnRp
ZnkgY2xhc3NlcyB3aXRob3V0IHVzaW5nIHRoZSBjb21waWxlcidzIFJUVEkuCi0gKiBUaGlzIHdh
cyB1c2VkIGJlZm9yZSBDKysgY29tcGlsZXJzIGNvbnNpc3RlbnRseSBzdXBwb3J0ZWQgUlRUSS4K
LSAqIElDVSA0LjYgcmVxdWlyZXMgY29tcGlsZXIgUlRUSSB0byBiZSB0dXJuZWQgb24uCi0gKgot
ICogRWFjaCBjbGFzcyBoaWVyYXJjaHkgd2hpY2ggbmVlZHMKLSAqIHRvIGltcGxlbWVudCBwb2x5
bW9ycGhpYyBjbG9uZSgpIG9yIG9wZXJhdG9yPT0oKSBkZWZpbmVzIHR3byBtZXRob2RzLAotICog
ZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy4gIFVDbGFzc0lEIHZhbHVlcyBjYW4gYmUgY29tcGFy
ZWQgdXNpbmcKLSAqIG9wZXJhdG9yPT0oKS4gTm90aGluZyBlbHNlIHNob3VsZCBiZSBkb25lIHdp
dGggdGhlbS4KLSAqCi0gKiBccGFyCi0gKiBJbiBjbGFzcyBoaWVyYXJjaGllcyB0aGF0IGltcGxl
bWVudCAicG9vciBtYW4ncyBSVFRJIiwKLSAqIGVhY2ggY29uY3JldGUgc3ViY2xhc3MgaW1wbGVt
ZW50cyBnZXREeW5hbWljQ2xhc3NJRCgpIGluIHRoZSBzYW1lIHdheToKLSAqCi0gKiBcY29kZQot
ICogICAgICBjbGFzcyBEZXJpdmVkIHsKLSAqICAgICAgcHVibGljOgotICogICAgICAgICAgdmly
dHVhbCBVQ2xhc3NJRCBnZXREeW5hbWljQ2xhc3NJRCgpIGNvbnN0Ci0gKiAgICAgICAgICAgIHsg
cmV0dXJuIERlcml2ZWQ6OmdldFN0YXRpY0NsYXNzSUQoKTsgfQotICogICAgICB9Ci0gKiBcZW5k
Y29kZQotICoKLSAqIEVhY2ggY29uY3JldGUgY2xhc3MgaW1wbGVtZW50cyBnZXRTdGF0aWNDbGFz
c0lEKCkgYXMgd2VsbCwgd2hpY2ggYWxsb3dzCi0gKiBjbGllbnRzIHRvIHRlc3QgZm9yIGEgc3Bl
Y2lmaWMgdHlwZS4KLSAqCi0gKiBcY29kZQotICogICAgICBjbGFzcyBEZXJpdmVkIHsKLSAqICAg
ICAgcHVibGljOgotICogICAgICAgICAgc3RhdGljIFVDbGFzc0lEIFVfRVhQT1JUMiBnZXRTdGF0
aWNDbGFzc0lEKCk7Ci0gKiAgICAgIHByaXZhdGU6Ci0gKiAgICAgICAgICBzdGF0aWMgY2hhciBm
Z0NsYXNzSUQ7Ci0gKiAgICAgIH0KLSAqCi0gKiAgICAgIC8vIEluIERlcml2ZWQuY3BwOgotICog
ICAgICBVQ2xhc3NJRCBEZXJpdmVkOjpnZXRTdGF0aWNDbGFzc0lEKCkKLSAqICAgICAgICB7IHJl
dHVybiAoVUNsYXNzSUQpJkRlcml2ZWQ6OmZnQ2xhc3NJRDsgfQotICogICAgICBjaGFyIERlcml2
ZWQ6OmZnQ2xhc3NJRCA9IDA7IC8vIFZhbHVlIGlzIGlycmVsZXZhbnQKLSAqIFxlbmRjb2RlCi0g
KiBAc3RhYmxlIElDVSAyLjAKLSAqLwotdHlwZWRlZiB2b2lkKiBVQ2xhc3NJRDsKLQotVV9OQU1F
U1BBQ0VfQkVHSU4KLQotLyoqCi0gKiBVTWVtb3J5IGlzIHRoZSBjb21tb24gSUNVIGJhc2UgY2xh
c3MuCi0gKiBBbGwgb3RoZXIgSUNVIEMrKyBjbGFzc2VzIGFyZSBkZXJpdmVkIGZyb20gVU1lbW9y
eSAoc3RhcnRpbmcgd2l0aCBJQ1UgMi40KS4KLSAqCi0gKiBUaGlzIGlzIHByaW1hcmlseSB0byBt
YWtlIGl0IHBvc3NpYmxlIGFuZCBzaW1wbGUgdG8gb3ZlcnJpZGUgdGhlCi0gKiBDKysgbWVtb3J5
IG1hbmFnZW1lbnQgYnkgYWRkaW5nIG5ldy9kZWxldGUgb3BlcmF0b3JzIHRvIHRoaXMgYmFzZSBj
bGFzcy4KLSAqCi0gKiBUbyBvdmVycmlkZSBBTEwgSUNVIG1lbW9yeSBtYW5hZ2VtZW50LCBpbmNs
dWRpbmcgdGhhdCBmcm9tIHBsYWluIEMgY29kZSwKLSAqIHJlcGxhY2UgdGhlIGFsbG9jYXRpb24g
ZnVuY3Rpb25zIGRlY2xhcmVkIGluIGNtZW1vcnkuaAotICoKLSAqIFVNZW1vcnkgZG9lcyBub3Qg
Y29udGFpbiBhbnkgdmlydHVhbCBmdW5jdGlvbnMuCi0gKiBDb21tb24gImJvaWxlcnBsYXRlIiBm
dW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gVU9iamVjdC4KLSAqCi0gKiBAc3RhYmxlIElDVSAyLjQK
LSAqLwotY2xhc3MgVV9DT01NT05fQVBJIFVNZW1vcnkgewotcHVibGljOgotCi0vKiB0ZXN0IHZl
cnNpb25zIGZvciBkZWJ1Z2dpbmcgc2hhcGVyIGhlYXAgbWVtb3J5IHByb2JsZW1zICovCi0jaWZk
ZWYgU0hBUEVSX01FTU9SWV9ERUJVRyAgCi0gICAgc3RhdGljIHZvaWQgKiBOZXdBcnJheShpbnQg
c2l6ZSwgaW50IGNvdW50KTsKLSAgICBzdGF0aWMgdm9pZCAqIEdyb3dBcnJheSh2b2lkICogYXJy
YXksIGludCBuZXdTaXplICk7Ci0gICAgc3RhdGljIHZvaWQgICBGcmVlQXJyYXkodm9pZCAqIGFy
cmF5ICk7Ci0jZW5kaWYKLQotI2lmIFVfT1ZFUlJJREVfQ1hYX0FMTE9DQVRJT04KLSAgICAvKioK
LSAgICAgKiBPdmVycmlkZSBmb3IgSUNVNEMgQysrIG1lbW9yeSBtYW5hZ2VtZW50LgotICAgICAq
IHNpbXBsZSwgbm9uLWNsYXNzIHR5cGVzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgdGhlIG1hY3JvcyBp
biBjb21tb24vY21lbW9yeS5oCi0gICAgICogKHVwcnZfbWFsbG9jKCksIHVwcnZfZnJlZSgpLCB1
cHJ2X3JlYWxsb2MoKSk7Ci0gICAgICogdGhleSBvciBzb21ldGhpbmcgZWxzZSBjb3VsZCBiZSB1
c2VkIGhlcmUgdG8gaW1wbGVtZW50IEMrKyBuZXcvZGVsZXRlCi0gICAgICogZm9yIElDVTRDIEMr
KyBjbGFzc2VzCi0gICAgICogQHN0YWJsZSBJQ1UgMi40Ci0gICAgICovCi0gICAgc3RhdGljIHZv
aWQgKiBVX0VYUE9SVDIgb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKSBVX05PX1RIUk9XOwotCi0g
ICAgLyoqCi0gICAgICogT3ZlcnJpZGUgZm9yIElDVTRDIEMrKyBtZW1vcnkgbWFuYWdlbWVudC4K
LSAgICAgKiBTZWUgbmV3KCkuCi0gICAgICogQHN0YWJsZSBJQ1UgMi40Ci0gICAgICovCi0gICAg
c3RhdGljIHZvaWQgKiBVX0VYUE9SVDIgb3BlcmF0b3IgbmV3W10oc2l6ZV90IHNpemUpIFVfTk9f
VEhST1c7Ci0KLSAgICAvKioKLSAgICAgKiBPdmVycmlkZSBmb3IgSUNVNEMgQysrIG1lbW9yeSBt
YW5hZ2VtZW50LgotICAgICAqIHNpbXBsZSwgbm9uLWNsYXNzIHR5cGVzIGFyZSBhbGxvY2F0ZWQg
dXNpbmcgdGhlIG1hY3JvcyBpbiBjb21tb24vY21lbW9yeS5oCi0gICAgICogKHVwcnZfbWFsbG9j
KCksIHVwcnZfZnJlZSgpLCB1cHJ2X3JlYWxsb2MoKSk7Ci0gICAgICogdGhleSBvciBzb21ldGhp
bmcgZWxzZSBjb3VsZCBiZSB1c2VkIGhlcmUgdG8gaW1wbGVtZW50IEMrKyBuZXcvZGVsZXRlCi0g
ICAgICogZm9yIElDVTRDIEMrKyBjbGFzc2VzCi0gICAgICogQHN0YWJsZSBJQ1UgMi40Ci0gICAg
ICovCi0gICAgc3RhdGljIHZvaWQgVV9FWFBPUlQyIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICpwKSBV
X05PX1RIUk9XOwotCi0gICAgLyoqCi0gICAgICogT3ZlcnJpZGUgZm9yIElDVTRDIEMrKyBtZW1v
cnkgbWFuYWdlbWVudC4KLSAgICAgKiBTZWUgZGVsZXRlKCkuCi0gICAgICogQHN0YWJsZSBJQ1Ug
Mi40Ci0gICAgICovCi0gICAgc3RhdGljIHZvaWQgVV9FWFBPUlQyIG9wZXJhdG9yIGRlbGV0ZVtd
KHZvaWQgKnApIFVfTk9fVEhST1c7Ci0KLSNpZiBVX0hBVkVfUExBQ0VNRU5UX05FVwotICAgIC8q
KgotICAgICAqIE92ZXJyaWRlIGZvciBJQ1U0QyBDKysgbWVtb3J5IG1hbmFnZW1lbnQgZm9yIFNU
TC4KLSAgICAgKiBTZWUgbmV3KCkuCi0gICAgICogQHN0YWJsZSBJQ1UgMi42Ci0gICAgICovCi0g
ICAgc3RhdGljIGlubGluZSB2b2lkICogVV9FWFBPUlQyIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZv
aWQgKnB0cikgVV9OT19USFJPVyB7IHJldHVybiBwdHI7IH0KLQotICAgIC8qKgotICAgICAqIE92
ZXJyaWRlIGZvciBJQ1U0QyBDKysgbWVtb3J5IG1hbmFnZW1lbnQgZm9yIFNUTC4KLSAgICAgKiBT
ZWUgZGVsZXRlKCkuCi0gICAgICogQHN0YWJsZSBJQ1UgMi42Ci0gICAgICovCi0gICAgc3RhdGlj
IGlubGluZSB2b2lkIFVfRVhQT1JUMiBvcGVyYXRvciBkZWxldGUodm9pZCAqLCB2b2lkICopIFVf
Tk9fVEhST1cge30KLSNlbmRpZiAvKiBVX0hBVkVfUExBQ0VNRU5UX05FVyAqLwotI2lmIFVfSEFW
RV9ERUJVR19MT0NBVElPTl9ORVcKLSAgICAvKioKLSAgICAgICogVGhpcyBtZXRob2Qgb3ZlcnJp
ZGVzIHRoZSBNRkMgZGVidWcgdmVyc2lvbiBvZiB0aGUgb3BlcmF0b3IgbmV3Ci0gICAgICAqIAot
ICAgICAgKiBAcGFyYW0gc2l6ZSAgIFRoZSByZXF1ZXN0ZWQgbWVtb3J5IHNpemUKLSAgICAgICog
QHBhcmFtIGZpbGUgICBUaGUgZmlsZSB3aGVyZSB0aGUgYWxsb2NhdGlvbiB3YXMgcmVxdWVzdGVk
Ci0gICAgICAqIEBwYXJhbSBsaW5lICAgVGhlIGxpbmUgd2hlcmUgdGhlIGFsbG9jYXRpb24gd2Fz
IHJlcXVlc3RlZCAKLSAgICAgICovIAotICAgIHN0YXRpYyB2b2lkICogVV9FWFBPUlQyIG9wZXJh
dG9yIG5ldyhzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpIFVfTk9fVEhS
T1c7Ci0gICAgLyoqCi0gICAgICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgbWF0Y2hpbmcgZGVs
ZXRlIGZvciB0aGUgTUZDIGRlYnVnIG5ldwotICAgICAgKiAKLSAgICAgICogQHBhcmFtIHAgICAg
ICBUaGUgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIG1lbW9yeQotICAgICAgKiBAcGFyYW0gZmls
ZSAgIFRoZSBmaWxlIHdoZXJlIHRoZSBhbGxvY2F0aW9uIHdhcyByZXF1ZXN0ZWQKLSAgICAgICog
QHBhcmFtIGxpbmUgICBUaGUgbGluZSB3aGVyZSB0aGUgYWxsb2NhdGlvbiB3YXMgcmVxdWVzdGVk
IAotICAgICAgKi8gCi0gICAgc3RhdGljIHZvaWQgVV9FWFBPUlQyIG9wZXJhdG9yIGRlbGV0ZSh2
b2lkKiBwLCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSkgVV9OT19USFJPVzsKLSNlbmRpZiAv
KiBVX0hBVkVfREVCVUdfTE9DQVRJT05fTkVXICovCi0jZW5kaWYgLyogVV9PVkVSUklERV9DWFhf
QUxMT0NBVElPTiAqLwotCi0gICAgLyoKLSAgICAgKiBBc3NpZ25tZW50IG9wZXJhdG9yIG5vdCBk
ZWNsYXJlZC4gVGhlIGNvbXBpbGVyIHdpbGwgcHJvdmlkZSBvbmUKLSAgICAgKiB3aGljaCBkb2Vz
IG5vdGhpbmcgc2luY2UgdGhpcyBjbGFzcyBkb2VzIG5vdCBjb250YWluIGFueSBkYXRhIG1lbWJl
cnMuCi0gICAgICogQVBJL2NvZGUgY292ZXJhZ2UgbWF5IHNob3cgdGhlIGFzc2lnbm1lbnQgb3Bl
cmF0b3IgYXMgcHJlc2VudCBhbmQKLSAgICAgKiB1bnRlc3RlZCAtIGlnbm9yZS4KLSAgICAgKiBT
dWJjbGFzc2VzIG5lZWQgdGhpcyBhc3NpZ25tZW50IG9wZXJhdG9yIGlmIHRoZXkgdXNlIGNvbXBp
bGVyLXByb3ZpZGVkCi0gICAgICogYXNzaWdubWVudCBvcGVyYXRvcnMgb2YgdGhlaXIgb3duLiBB
biBhbHRlcm5hdGl2ZSB0byBub3QgZGVjbGFyaW5nIG9uZQotICAgICAqIGhlcmUgd291bGQgYmUg
dG8gZGVjbGFyZSBhbmQgZW1wdHktaW1wbGVtZW50IGEgcHJvdGVjdGVkIG9yIHB1YmxpYyBvbmUu
Ci0gICAgVU1lbW9yeSAmVU1lbW9yeTo6b3BlcmF0b3I9KGNvbnN0IFVNZW1vcnkgJik7Ci0gICAg
ICovCi19OwotCi0vKioKLSAqIFVPYmplY3QgaXMgdGhlIGNvbW1vbiBJQ1UgImJvaWxlcnBsYXRl
IiBjbGFzcy4KLSAqIFVPYmplY3QgaW5oZXJpdHMgVU1lbW9yeSAoc3RhcnRpbmcgd2l0aCBJQ1Ug
Mi40KSwKLSAqIGFuZCBhbGwgb3RoZXIgcHVibGljIElDVSBDKysgY2xhc3NlcwotICogYXJlIGRl
cml2ZWQgZnJvbSBVT2JqZWN0IChzdGFydGluZyB3aXRoIElDVSAyLjIpLgotICoKLSAqIFVPYmpl
Y3QgY29udGFpbnMgY29tbW9uIHZpcnR1YWwgZnVuY3Rpb25zLCBpbiBwYXJ0aWN1bGFyIGEgdmly
dHVhbCBkZXN0cnVjdG9yLgotICoKLSAqIFRoZSBjbG9uZSgpIGZ1bmN0aW9uIGlzIG5vdCBhdmFp
bGFibGUgaW4gVU9iamVjdCBiZWNhdXNlIGl0IGlzIG5vdAotICogaW1wbGVtZW50ZWQgYnkgYWxs
IElDVSBjbGFzc2VzLgotICogTWFueSBJQ1Ugc2VydmljZXMgcHJvdmlkZSBhIGNsb25lKCkgZnVu
Y3Rpb24gZm9yIHRoZWlyIGNsYXNzIHRyZWVzLAotICogZGVmaW5lZCBvbiB0aGUgc2VydmljZSdz
IEMrKyBiYXNlIGNsYXNzLCBhbmQgYWxsIHN1YmNsYXNzZXMgd2l0aGluIHRoYXQKLSAqIHNlcnZp
Y2UgY2xhc3MgdHJlZSByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzZXJ2aWNlIGJhc2UgY2xhc3MK
LSAqICh3aGljaCBpdHNlbGYgaXMgYSBzdWJjbGFzcyBvZiBVT2JqZWN0KS4KLSAqIFRoaXMgaXMg
YmVjYXVzZSBzb21lIGNvbXBpbGVycyBkbyBub3Qgc3VwcG9ydCBjb3ZhcmlhbnQgKHNhbWUtYXMt
dGhpcykKLSAqIHJldHVybiB0eXBlczsgY2FzdCB0byB0aGUgYXBwcm9wcmlhdGUgc3ViY2xhc3Mg
aWYgbmVjZXNzYXJ5LgotICoKLSAqIEBzdGFibGUgSUNVIDIuMgotICovCi1jbGFzcyBVX0NPTU1P
Tl9BUEkgVU9iamVjdCA6IHB1YmxpYyBVTWVtb3J5IHsKLXB1YmxpYzoKLSAgICAvKioKLSAgICAg
KiBEZXN0cnVjdG9yLgotICAgICAqCi0gICAgICogQHN0YWJsZSBJQ1UgMi4yCi0gICAgICovCi0g
ICAgdmlydHVhbCB+VU9iamVjdCgpOwotCi0gICAgLyoqCi0gICAgICogSUNVNEMgInBvb3IgbWFu
J3MgUlRUSSIsIHJldHVybnMgYSBVQ2xhc3NJRCBmb3IgdGhlIGFjdHVhbCBJQ1UgY2xhc3MuCi0g
ICAgICogVGhlIGJhc2UgY2xhc3MgaW1wbGVtZW50YXRpb24gcmV0dXJucyBhIGR1bW15IHZhbHVl
LgotICAgICAqCi0gICAgICogVXNlIGNvbXBpbGVyIFJUVEkgcmF0aGVyIHRoYW4gSUNVJ3MgInBv
b3IgbWFuJ3MgUlRUSSIuCi0gICAgICogU2luY2UgSUNVIDQuNiwgbmV3IElDVSBDKysgY2xhc3Mg
aGllcmFyY2hpZXMgZG8gbm90IGltcGxlbWVudCAicG9vciBtYW4ncyBSVFRJIi4KLSAgICAgKgot
ICAgICAqIEBzdGFibGUgSUNVIDIuMgotICAgICAqLwotICAgIHZpcnR1YWwgVUNsYXNzSUQgZ2V0
RHluYW1pY0NsYXNzSUQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIC8vIHRoZSBmb2xsb3dp
bmcgZnVuY3Rpb25zIGFyZSBwcm90ZWN0ZWQgdG8gcHJldmVudCBpbnN0YW50aWF0aW9uIGFuZAot
ICAgIC8vIGRpcmVjdCB1c2Ugb2YgVU9iamVjdCBpdHNlbGYKLQotICAgIC8vIGRlZmF1bHQgY29u
c3RydWN0b3IKLSAgICAvLyBpbmxpbmUgVU9iamVjdCgpIHt9Ci0KLSAgICAvLyBjb3B5IGNvbnN0
cnVjdG9yCi0gICAgLy8gaW5saW5lIFVPYmplY3QoY29uc3QgVU9iamVjdCAmb3RoZXIpIHt9Ci0K
LSNpZiAwCi0gICAgLy8gVE9ETyBTb21ldGltZSBpbiB0aGUgZnV0dXJlLiBJbXBsZW1lbnQgb3Bl
cmF0b3I9PSgpLgotICAgIC8vIChUaGlzIGNvbW1lbnQgaW5zZXJ0ZWQgaW4gMi4yKQotICAgIC8v
IHNvbWUgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcgImJvaWxlcnBsYXRlIiBmdW5jdGlvbnMgbWF5
IGJlIG1hZGUgcHVibGljCi0gICAgLy8gaW4gYSBmdXR1cmUgSUNVNEMgcmVsZWFzZSB3aGVuIGFs
bCBzdWJjbGFzc2VzIGltcGxlbWVudCB0aGVtCi0KLSAgICAvLyBhc3NpZ25tZW50IG9wZXJhdG9y
Ci0gICAgLy8gKG5vdCB2aXJ0dWFsLCBzZWUgIlRhbGlnZW50J3MgR3VpZGUgdG8gRGVzaWduaW5n
IFByb2dyYW1zIiBwcC43My4uNzQpCi0gICAgLy8gY29tbWVudGVkIG91dCBiZWNhdXNlIHRoZSBp
bXBsZW1lbnRhdGlvbiBpcyB0aGUgc2FtZSBhcyBhIGNvbXBpbGVyJ3MgZGVmYXVsdAotICAgIC8v
IFVPYmplY3QgJm9wZXJhdG9yPShjb25zdCBVT2JqZWN0ICZvdGhlcikgeyByZXR1cm4gKnRoaXM7
IH0KLQotICAgIC8vIGNvbXBhcmlzb24gb3BlcmF0b3JzCi0gICAgdmlydHVhbCBpbmxpbmUgVUJv
b2wgb3BlcmF0b3I9PShjb25zdCBVT2JqZWN0ICZvdGhlcikgY29uc3QgeyByZXR1cm4gdGhpcz09
Jm90aGVyOyB9Ci0gICAgaW5saW5lIFVCb29sIG9wZXJhdG9yIT0oY29uc3QgVU9iamVjdCAmb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQotCi0gICAgLy8gY2xvbmUo
KSBjb21tZW50ZWQgb3V0IGZyb20gdGhlIGJhc2UgY2xhc3M6Ci0gICAgLy8gc29tZSBjb21waWxl
cnMgZG8gbm90IHN1cHBvcnQgY28tdmFyaWFudCByZXR1cm4gdHlwZXMKLSAgICAvLyAoaS5lLiwg
c3ViY2xhc3NlcyB3b3VsZCBoYXZlIHRvIHJldHVybiBVT2JqZWN0ICogYXMgd2VsbCwgaW5zdGVh
ZCBvZiBTdWJDbGFzcyAqKQotICAgIC8vIHNlZSBhbHNvIFVPYmplY3QgY2xhc3MgZG9jdW1lbnRh
dGlvbi4KLSAgICAvLyB2aXJ0dWFsIFVPYmplY3QgKmNsb25lKCkgY29uc3Q7Ci0jZW5kaWYKLQot
ICAgIC8qCi0gICAgICogQXNzaWdubWVudCBvcGVyYXRvciBub3QgZGVjbGFyZWQuIFRoZSBjb21w
aWxlciB3aWxsIHByb3ZpZGUgb25lCi0gICAgICogd2hpY2ggZG9lcyBub3RoaW5nIHNpbmNlIHRo
aXMgY2xhc3MgZG9lcyBub3QgY29udGFpbiBhbnkgZGF0YSBtZW1iZXJzLgotICAgICAqIEFQSS9j
b2RlIGNvdmVyYWdlIG1heSBzaG93IHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yIGFzIHByZXNlbnQg
YW5kCi0gICAgICogdW50ZXN0ZWQgLSBpZ25vcmUuCi0gICAgICogU3ViY2xhc3NlcyBuZWVkIHRo
aXMgYXNzaWdubWVudCBvcGVyYXRvciBpZiB0aGV5IHVzZSBjb21waWxlci1wcm92aWRlZAotICAg
ICAqIGFzc2lnbm1lbnQgb3BlcmF0b3JzIG9mIHRoZWlyIG93bi4gQW4gYWx0ZXJuYXRpdmUgdG8g
bm90IGRlY2xhcmluZyBvbmUKLSAgICAgKiBoZXJlIHdvdWxkIGJlIHRvIGRlY2xhcmUgYW5kIGVt
cHR5LWltcGxlbWVudCBhIHByb3RlY3RlZCBvciBwdWJsaWMgb25lLgotICAgIFVPYmplY3QgJlVP
YmplY3Q6Om9wZXJhdG9yPShjb25zdCBVT2JqZWN0ICYpOwotICAgICAqLwotfTsKLQotI2lmbmRl
ZiBVX0hJREVfSU5URVJOQUxfQVBJCi0vKioKLSAqIFRoaXMgaXMgYSBzaW1wbGUgbWFjcm8gdG8g
YWRkIElDVSBSVFRJIHRvIGFuIElDVSBvYmplY3QgaW1wbGVtZW50YXRpb24uCi0gKiBUaGlzIGRv
ZXMgbm90IGdvIGludG8gdGhlIGhlYWRlci4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluICou
Y3BwIGZpbGVzLgotICoKLSAqIEBwYXJhbSBteUNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0
aGF0IG5lZWRzIFJUVEkgZGVmaW5lZC4KLSAqIEBpbnRlcm5hbAotICovCi0jZGVmaW5lIFVPQkpF
Q1RfREVGSU5FX1JUVElfSU1QTEVNRU5UQVRJT04obXlDbGFzcykgXAotICAgIFVDbGFzc0lEIFVf
RVhQT1JUMiBteUNsYXNzOjpnZXRTdGF0aWNDbGFzc0lEKCkgeyBcCi0gICAgICAgIHN0YXRpYyBj
aGFyIGNsYXNzSUQgPSAwOyBcCi0gICAgICAgIHJldHVybiAoVUNsYXNzSUQpJmNsYXNzSUQ7IFwK
LSAgICB9IFwKLSAgICBVQ2xhc3NJRCBteUNsYXNzOjpnZXREeW5hbWljQ2xhc3NJRCgpIGNvbnN0
IFwKLSAgICB7IHJldHVybiBteUNsYXNzOjpnZXRTdGF0aWNDbGFzc0lEKCk7IH0KLQotCi0vKioK
LSAqIFRoaXMgbWFjcm8gYWRkcyBJQ1UgUlRUSSB0byBhbiBJQ1UgYWJzdHJhY3QgY2xhc3MgaW1w
bGVtZW50YXRpb24uCi0gKiBUaGlzIG1hY3JvIHNob3VsZCBiZSBpbnZva2VkIGluICouY3BwIGZp
bGVzLiAgVGhlIGNvcnJlc3BvbmRpbmcKLSAqIGhlYWRlciBzaG91bGQgZGVjbGFyZSBnZXRTdGF0
aWNDbGFzc0lELgotICoKLSAqIEBwYXJhbSBteUNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0
aGF0IG5lZWRzIFJUVEkgZGVmaW5lZC4KLSAqIEBpbnRlcm5hbAotICovCi0jZGVmaW5lIFVPQkpF
Q1RfREVGSU5FX0FCU1RSQUNUX1JUVElfSU1QTEVNRU5UQVRJT04obXlDbGFzcykgXAotICAgIFVD
bGFzc0lEIFVfRVhQT1JUMiBteUNsYXNzOjpnZXRTdGF0aWNDbGFzc0lEKCkgeyBcCi0gICAgICAg
IHN0YXRpYyBjaGFyIGNsYXNzSUQgPSAwOyBcCi0gICAgICAgIHJldHVybiAoVUNsYXNzSUQpJmNs
YXNzSUQ7IFwKLSAgICB9Ci0KLSNlbmRpZiAgLyogVV9ISURFX0lOVEVSTkFMX0FQSSAqLwotCi1V
X05BTUVTUEFDRV9FTkQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3VyZW5hbWUuaCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvdXJl
bmFtZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTNmMjcxYWIzMWVhNzE3NTEy
ZDg0NThhN2VmNTE3MGI2ZTAwZGFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNp
ZXMvaWN1L3VuaWNvZGUvdXJlbmFtZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc5NSArMCwwIEBA
Ci0vKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgIENvcHlyaWdodCAoQykgMjAwMi0yMDE1
LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCi0qICAgQ29ycG9yYXRpb24gYW5kIG90
aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0q
ICAgZmlsZSBuYW1lOiAgdXJlbmFtZS5oCi0qICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKLSogICB0
YWIgc2l6ZTogICA4IChub3QgdXNlZCkKLSogICBpbmRlbnRhdGlvbjo0Ci0qCi0qICAgQ3JlYXRl
ZCBieTogUGVybCBzY3JpcHQgdG9vbHMvZ2VucmVuLnBsIHdyaXR0ZW4gYnkgVmxhZGltaXIgV2Vp
bnN0ZWluCi0qCi0qICBDb250YWlucyBkYXRhIGZvciByZW5hbWluZyBJQ1UgZXhwb3J0cy4KLSog
IEdldHMgaW5jbHVkZWQgYnkgdW1hY2hpbmUuaAotKgotKiAgVEhJUyBGSUxFIElTIE1BQ0hJTkUt
R0VORVJBVEVELCBET04nVCBQTEFZIFdJVEggSVQgSUYgWU9VIERPTidUIEtOT1cgV0hBVAotKiAg
WU9VIEFSRSBET0lORywgT1RIRVJXSVNFIFZFUlkgQkFEIFRISU5HUyBXSUxMIEhBUFBFTiEKLSov
Ci0KLSNpZm5kZWYgVVJFTkFNRV9ICi0jZGVmaW5lIFVSRU5BTUVfSAotCi0vKiBVX0RJU0FCTEVf
UkVOQU1JTkcgY2FuIGJlIGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyB3YXlzOgotICogICAtIHdo
ZW4gcnVubmluZyBjb25maWd1cmUsIGUuZy4KLSAqICAgICAgICBydW5Db25maWd1cmVJQ1UgTGlu
dXggLS1kaXNhYmxlLXJlbmFtaW5nCi0gKiAgIC0gYnkgY2hhbmdpbmcgdGhlIGRlZmF1bHQgc2V0
dGluZyBvZiBVX0RJU0FCTEVfUkVOQU1JTkcgaW4gdWNvbmZpZy5oCi0gKi8KLQotI2luY2x1ZGUg
InVuaWNvZGUvdWNvbmZpZy5oIgotCi0jaWYgIVVfRElTQUJMRV9SRU5BTUlORwotCi0vKiBXZSBu
ZWVkIHRoZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUgZGVmaW5pdGlvbi4gVGhlcmUncyBhIGRl
ZmF1bHQgb25lIGluIHVuaWNvZGUvdXZlcm51bS5oIHdlIGNhbiB1c2UsIGJ1dCB3ZSB3aWxsIGdp
dmUKLSAgIHRoZSBwbGF0Zm9ybSBhIGNoYW5jZSB0byBkZWZpbmUgaXQgZmlyc3QuCi0gICBOb3Jt
YWxseSAoaWYgdXR5cGVzLmggb3IgdW1hY2hpbmUuaCB3YXMgaW5jbHVkZWQgZmlyc3QpIHRoaXMg
d2lsbCBub3QgYmUgbmVjZXNzYXJ5IGFzIGl0IHdpbGwgYWxyZWFkeSBiZSBkZWZpbmVkLgotICov
Ci0KLSNpZm5kZWYgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FCi0jaW5jbHVkZSAidW5pY29kZS91
bWFjaGluZS5oIgotI2VuZGlmCi0KLS8qIElmIHdlIHN0aWxsIGRvbid0IGhhdmUgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FIHVzZSB0aGUgZGVmYXVsdC4gKi8KLSNpZm5kZWYgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FCi0jaW5jbHVkZSAidW5pY29kZS91dmVybnVtLmgiCi0jZW5kaWYKLQotLyog
RXJyb3Igb3V0IGJlZm9yZSB0aGUgZm9sbG93aW5nIGRlZmluZXMgY2F1c2UgdmVyeSBzdHJhbmdl
IGFuZCB1bmV4cGVjdGVkIGNvZGUgYnJlYWthZ2UgKi8KLSNpZm5kZWYgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FCi0jZXJyb3IgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FIGlzIG5vdCBkZWZpbmVk
IC0gY2Fubm90IGNvbnRpbnVlLiBDb25zaWRlciBkZWZpbmluZyBVX0RJU0FCTEVfUkVOQU1JTkcg
aWYgcmVuYW1pbmcgc2hvdWxkIG5vdCBiZSB1c2VkLgotI2VuZGlmCi0KLQotLyogQyBleHBvcnRz
IHJlbmFtaW5nIGRhdGEgKi8KLQotI2RlZmluZSBUX0NTdHJpbmdfaW50NjRUb1N0cmluZyBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUoVF9DU3RyaW5nX2ludDY0VG9TdHJpbmcpCi0jZGVmaW5lIFRf
Q1N0cmluZ19pbnRlZ2VyVG9TdHJpbmcgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKFRfQ1N0cmlu
Z19pbnRlZ2VyVG9TdHJpbmcpCi0jZGVmaW5lIFRfQ1N0cmluZ19zdHJpbmdUb0ludGVnZXIgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKFRfQ1N0cmluZ19zdHJpbmdUb0ludGVnZXIpCi0jZGVmaW5l
IFRfQ1N0cmluZ190b0xvd2VyQ2FzZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoVF9DU3RyaW5n
X3RvTG93ZXJDYXNlKQotI2RlZmluZSBUX0NTdHJpbmdfdG9VcHBlckNhc2UgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKFRfQ1N0cmluZ190b1VwcGVyQ2FzZSkKLSNkZWZpbmUgVUNOVl9GUk9NX1Vf
Q0FMTEJBQ0tfRVNDQVBFIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShVQ05WX0ZST01fVV9DQUxM
QkFDS19FU0NBUEUpCi0jZGVmaW5lIFVDTlZfRlJPTV9VX0NBTExCQUNLX1NLSVAgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKFVDTlZfRlJPTV9VX0NBTExCQUNLX1NLSVApCi0jZGVmaW5lIFVDTlZf
RlJPTV9VX0NBTExCQUNLX1NUT1AgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKFVDTlZfRlJPTV9V
X0NBTExCQUNLX1NUT1ApCi0jZGVmaW5lIFVDTlZfRlJPTV9VX0NBTExCQUNLX1NVQlNUSVRVVEUg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKFVDTlZfRlJPTV9VX0NBTExCQUNLX1NVQlNUSVRVVEUp
Ci0jZGVmaW5lIFVDTlZfVE9fVV9DQUxMQkFDS19FU0NBUEUgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKFVDTlZfVE9fVV9DQUxMQkFDS19FU0NBUEUpCi0jZGVmaW5lIFVDTlZfVE9fVV9DQUxMQkFD
S19TS0lQIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShVQ05WX1RPX1VfQ0FMTEJBQ0tfU0tJUCkK
LSNkZWZpbmUgVUNOVl9UT19VX0NBTExCQUNLX1NUT1AgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KFVDTlZfVE9fVV9DQUxMQkFDS19TVE9QKQotI2RlZmluZSBVQ05WX1RPX1VfQ0FMTEJBQ0tfU1VC
U1RJVFVURSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoVUNOVl9UT19VX0NBTExCQUNLX1NVQlNU
SVRVVEUpCi0jZGVmaW5lIFVEYXRhTWVtb3J5X2NyZWF0ZU5ld0luc3RhbmNlIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRShVRGF0YU1lbW9yeV9jcmVhdGVOZXdJbnN0YW5jZSkKLSNkZWZpbmUgVURh
dGFNZW1vcnlfaW5pdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoVURhdGFNZW1vcnlfaW5pdCkK
LSNkZWZpbmUgVURhdGFNZW1vcnlfaXNMb2FkZWQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKFVE
YXRhTWVtb3J5X2lzTG9hZGVkKQotI2RlZmluZSBVRGF0YU1lbW9yeV9ub3JtYWxpemVEYXRhUG9p
bnRlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoVURhdGFNZW1vcnlfbm9ybWFsaXplRGF0YVBv
aW50ZXIpCi0jZGVmaW5lIFVEYXRhTWVtb3J5X3NldERhdGEgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKFVEYXRhTWVtb3J5X3NldERhdGEpCi0jZGVmaW5lIFVEYXRhbWVtb3J5X2Fzc2lnbiBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUoVURhdGFtZW1vcnlfYXNzaWduKQotI2RlZmluZSBfQVNDSUlE
YXRhIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShfQVNDSUlEYXRhKQotI2RlZmluZSBfQm9jdTFE
YXRhIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShfQm9jdTFEYXRhKQotI2RlZmluZSBfQ0VTVThE
YXRhIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShfQ0VTVThEYXRhKQotI2RlZmluZSBfQ29tcG91
bmRUZXh0RGF0YSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoX0NvbXBvdW5kVGV4dERhdGEpCi0j
ZGVmaW5lIF9IWkRhdGEgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKF9IWkRhdGEpCi0jZGVmaW5l
IF9JTUFQRGF0YSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoX0lNQVBEYXRhKQotI2RlZmluZSBf
SVNDSUlEYXRhIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShfSVNDSUlEYXRhKQotI2RlZmluZSBf
SVNPMjAyMkRhdGEgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKF9JU08yMDIyRGF0YSkKLSNkZWZp
bmUgX0xNQkNTRGF0YTEgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKF9MTUJDU0RhdGExKQotI2Rl
ZmluZSBfTE1CQ1NEYXRhMTEgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKF9MTUJDU0RhdGExMSkK
LSNkZWZpbmUgX0xNQkNTRGF0YTE2IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShfTE1CQ1NEYXRh
MTYpCi0jZGVmaW5lIF9MTUJDU0RhdGExNyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoX0xNQkNT
RGF0YTE3KQotI2RlZmluZSBfTE1CQ1NEYXRhMTggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKF9M
TUJDU0RhdGExOCkKLSNkZWZpbmUgX0xNQkNTRGF0YTE5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RShfTE1CQ1NEYXRhMTkpCi0jZGVmaW5lIF9MTUJDU0RhdGEyIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRShfTE1CQ1NEYXRhMikKLSNkZWZpbmUgX0xNQkNTRGF0YTMgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKF9MTUJDU0RhdGEzKQotI2RlZmluZSBfTE1CQ1NEYXRhNCBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUoX0xNQkNTRGF0YTQpCi0jZGVmaW5lIF9MTUJDU0RhdGE1IFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRShfTE1CQ1NEYXRhNSkKLSNkZWZpbmUgX0xNQkNTRGF0YTYgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKF9MTUJDU0RhdGE2KQotI2RlZmluZSBfTE1CQ1NEYXRhOCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUoX0xNQkNTRGF0YTgpCi0jZGVmaW5lIF9MYXRpbjFEYXRhIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRShfTGF0aW4xRGF0YSkKLSNkZWZpbmUgX01CQ1NEYXRhIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRShfTUJDU0RhdGEpCi0jZGVmaW5lIF9TQ1NVRGF0YSBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUoX1NDU1VEYXRhKQotI2RlZmluZSBfVVRGMTZCRURhdGEgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKF9VVEYxNkJFRGF0YSkKLSNkZWZpbmUgX1VURjE2RGF0YSBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUoX1VURjE2RGF0YSkKLSNkZWZpbmUgX1VURjE2TEVEYXRhIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRShfVVRGMTZMRURhdGEpCi0jZGVmaW5lIF9VVEYzMkJFRGF0YSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoX1VURjMyQkVEYXRhKQotI2RlZmluZSBfVVRGMzJEYXRh
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShfVVRGMzJEYXRhKQotI2RlZmluZSBfVVRGMzJMRURh
dGEgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKF9VVEYzMkxFRGF0YSkKLSNkZWZpbmUgX1VURjdE
YXRhIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShfVVRGN0RhdGEpCi0jZGVmaW5lIF9VVEY4RGF0
YSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoX1VURjhEYXRhKQotI2RlZmluZSBjbWVtb3J5X2Ns
ZWFudXAgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKGNtZW1vcnlfY2xlYW51cCkKLSNkZWZpbmUg
Z1RpbWVab25lRmlsZXNJbml0T25jZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoZ1RpbWVab25l
RmlsZXNJbml0T25jZSkKLSNkZWZpbmUgaXpydWxlX2Nsb25lIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRShpenJ1bGVfY2xvbmUpCi0jZGVmaW5lIGl6cnVsZV9jbG9zZSBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUoaXpydWxlX2Nsb3NlKQotI2RlZmluZSBpenJ1bGVfZXF1YWxzIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRShpenJ1bGVfZXF1YWxzKQotI2RlZmluZSBpenJ1bGVfZ2V0RFNUU2F2aW5n
cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoaXpydWxlX2dldERTVFNhdmluZ3MpCi0jZGVmaW5l
IGl6cnVsZV9nZXREeW5hbWljQ2xhc3NJRCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoaXpydWxl
X2dldER5bmFtaWNDbGFzc0lEKQotI2RlZmluZSBpenJ1bGVfZ2V0RmluYWxTdGFydCBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUoaXpydWxlX2dldEZpbmFsU3RhcnQpCi0jZGVmaW5lIGl6cnVsZV9n
ZXRGaXJzdFN0YXJ0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShpenJ1bGVfZ2V0Rmlyc3RTdGFy
dCkKLSNkZWZpbmUgaXpydWxlX2dldE5hbWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKGl6cnVs
ZV9nZXROYW1lKQotI2RlZmluZSBpenJ1bGVfZ2V0TmV4dFN0YXJ0IFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRShpenJ1bGVfZ2V0TmV4dFN0YXJ0KQotI2RlZmluZSBpenJ1bGVfZ2V0UHJldmlvdXNT
dGFydCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoaXpydWxlX2dldFByZXZpb3VzU3RhcnQpCi0j
ZGVmaW5lIGl6cnVsZV9nZXRSYXdPZmZzZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKGl6cnVs
ZV9nZXRSYXdPZmZzZXQpCi0jZGVmaW5lIGl6cnVsZV9nZXRTdGF0aWNDbGFzc0lEIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRShpenJ1bGVfZ2V0U3RhdGljQ2xhc3NJRCkKLSNkZWZpbmUgaXpydWxl
X2lzRXF1aXZhbGVudFRvIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShpenJ1bGVfaXNFcXVpdmFs
ZW50VG8pCi0jZGVmaW5lIGl6cnVsZV9vcGVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShpenJ1
bGVfb3BlbikKLSNkZWZpbmUgbGVfY2xvc2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKGxlX2Ns
b3NlKQotI2RlZmluZSBsZV9jcmVhdGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKGxlX2NyZWF0
ZSkKLSNkZWZpbmUgbGVfZ2V0Q2hhckluZGljZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKGxl
X2dldENoYXJJbmRpY2VzKQotI2RlZmluZSBsZV9nZXRDaGFySW5kaWNlc1dpdGhCYXNlIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRShsZV9nZXRDaGFySW5kaWNlc1dpdGhCYXNlKQotI2RlZmluZSBs
ZV9nZXRHbHlwaENvdW50IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShsZV9nZXRHbHlwaENvdW50
KQotI2RlZmluZSBsZV9nZXRHbHlwaFBvc2l0aW9uIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShs
ZV9nZXRHbHlwaFBvc2l0aW9uKQotI2RlZmluZSBsZV9nZXRHbHlwaFBvc2l0aW9ucyBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUobGVfZ2V0R2x5cGhQb3NpdGlvbnMpCi0jZGVmaW5lIGxlX2dldEds
eXBocyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUobGVfZ2V0R2x5cGhzKQotI2RlZmluZSBsZV9s
YXlvdXRDaGFycyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUobGVfbGF5b3V0Q2hhcnMpCi0jZGVm
aW5lIGxlX3Jlc2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShsZV9yZXNldCkKLSNkZWZpbmUg
bG9jYWxlX2dldEtleXdvcmRzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShsb2NhbGVfZ2V0S2V5
d29yZHMpCi0jZGVmaW5lIGxvY2FsZV9nZXRLZXl3b3Jkc1N0YXJ0IFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRShsb2NhbGVfZ2V0S2V5d29yZHNTdGFydCkKLSNkZWZpbmUgbG9jYWxlX2dldF9kZWZh
dWx0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShsb2NhbGVfZ2V0X2RlZmF1bHQpCi0jZGVmaW5l
IGxvY2FsZV9zZXRfZGVmYXVsdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUobG9jYWxlX3NldF9k
ZWZhdWx0KQotI2RlZmluZSBwbF9hZGRGb250UnVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShw
bF9hZGRGb250UnVuKQotI2RlZmluZSBwbF9hZGRMb2NhbGVSdW4gVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHBsX2FkZExvY2FsZVJ1bikKLSNkZWZpbmUgcGxfYWRkVmFsdWVSdW4gVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHBsX2FkZFZhbHVlUnVuKQotI2RlZmluZSBwbF9jbG9zZSBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUocGxfY2xvc2UpCi0jZGVmaW5lIHBsX2Nsb3NlRm9udFJ1bnMgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHBsX2Nsb3NlRm9udFJ1bnMpCi0jZGVmaW5lIHBsX2Nsb3Nl
TGluZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUocGxfY2xvc2VMaW5lKQotI2RlZmluZSBwbF9j
bG9zZUxvY2FsZVJ1bnMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHBsX2Nsb3NlTG9jYWxlUnVu
cykKLSNkZWZpbmUgcGxfY2xvc2VWYWx1ZVJ1bnMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHBs
X2Nsb3NlVmFsdWVSdW5zKQotI2RlZmluZSBwbF9jb3VudExpbmVSdW5zIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRShwbF9jb3VudExpbmVSdW5zKQotI2RlZmluZSBwbF9jcmVhdGUgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHBsX2NyZWF0ZSkKLSNkZWZpbmUgcGxfZ2V0QXNjZW50IFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRShwbF9nZXRBc2NlbnQpCi0jZGVmaW5lIHBsX2dldERlc2NlbnQgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHBsX2dldERlc2NlbnQpCi0jZGVmaW5lIHBsX2dldEZvbnRS
dW5Db3VudCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUocGxfZ2V0Rm9udFJ1bkNvdW50KQotI2Rl
ZmluZSBwbF9nZXRGb250UnVuRm9udCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUocGxfZ2V0Rm9u
dFJ1bkZvbnQpCi0jZGVmaW5lIHBsX2dldEZvbnRSdW5MYXN0TGltaXQgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHBsX2dldEZvbnRSdW5MYXN0TGltaXQpCi0jZGVmaW5lIHBsX2dldEZvbnRSdW5M
aW1pdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUocGxfZ2V0Rm9udFJ1bkxpbWl0KQotI2RlZmlu
ZSBwbF9nZXRMZWFkaW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShwbF9nZXRMZWFkaW5nKQot
I2RlZmluZSBwbF9nZXRMaW5lQXNjZW50IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShwbF9nZXRM
aW5lQXNjZW50KQotI2RlZmluZSBwbF9nZXRMaW5lRGVzY2VudCBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUocGxfZ2V0TGluZURlc2NlbnQpCi0jZGVmaW5lIHBsX2dldExpbmVMZWFkaW5nIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRShwbF9nZXRMaW5lTGVhZGluZykKLSNkZWZpbmUgcGxfZ2V0TGlu
ZVZpc3VhbFJ1biBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUocGxfZ2V0TGluZVZpc3VhbFJ1bikK
LSNkZWZpbmUgcGxfZ2V0TGluZVdpZHRoIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShwbF9nZXRM
aW5lV2lkdGgpCi0jZGVmaW5lIHBsX2dldExvY2FsZVJ1bkNvdW50IFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRShwbF9nZXRMb2NhbGVSdW5Db3VudCkKLSNkZWZpbmUgcGxfZ2V0TG9jYWxlUnVuTGFz
dExpbWl0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShwbF9nZXRMb2NhbGVSdW5MYXN0TGltaXQp
Ci0jZGVmaW5lIHBsX2dldExvY2FsZVJ1bkxpbWl0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShw
bF9nZXRMb2NhbGVSdW5MaW1pdCkKLSNkZWZpbmUgcGxfZ2V0TG9jYWxlUnVuTG9jYWxlIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRShwbF9nZXRMb2NhbGVSdW5Mb2NhbGUpCi0jZGVmaW5lIHBsX2dl
dFBhcmFncmFwaExldmVsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShwbF9nZXRQYXJhZ3JhcGhM
ZXZlbCkKLSNkZWZpbmUgcGxfZ2V0VGV4dERpcmVjdGlvbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUocGxfZ2V0VGV4dERpcmVjdGlvbikKLSNkZWZpbmUgcGxfZ2V0VmFsdWVSdW5Db3VudCBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUocGxfZ2V0VmFsdWVSdW5Db3VudCkKLSNkZWZpbmUgcGxfZ2V0
VmFsdWVSdW5MYXN0TGltaXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHBsX2dldFZhbHVlUnVu
TGFzdExpbWl0KQotI2RlZmluZSBwbF9nZXRWYWx1ZVJ1bkxpbWl0IFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRShwbF9nZXRWYWx1ZVJ1bkxpbWl0KQotI2RlZmluZSBwbF9nZXRWYWx1ZVJ1blZhbHVl
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShwbF9nZXRWYWx1ZVJ1blZhbHVlKQotI2RlZmluZSBw
bF9nZXRWaXN1YWxSdW5Bc2NlbnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHBsX2dldFZpc3Vh
bFJ1bkFzY2VudCkKLSNkZWZpbmUgcGxfZ2V0VmlzdWFsUnVuRGVzY2VudCBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUocGxfZ2V0VmlzdWFsUnVuRGVzY2VudCkKLSNkZWZpbmUgcGxfZ2V0VmlzdWFs
UnVuRGlyZWN0aW9uIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShwbF9nZXRWaXN1YWxSdW5EaXJl
Y3Rpb24pCi0jZGVmaW5lIHBsX2dldFZpc3VhbFJ1bkZvbnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHBsX2dldFZpc3VhbFJ1bkZvbnQpCi0jZGVmaW5lIHBsX2dldFZpc3VhbFJ1bkdseXBoQ291
bnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHBsX2dldFZpc3VhbFJ1bkdseXBoQ291bnQpCi0j
ZGVmaW5lIHBsX2dldFZpc3VhbFJ1bkdseXBoVG9DaGFyTWFwIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRShwbF9nZXRWaXN1YWxSdW5HbHlwaFRvQ2hhck1hcCkKLSNkZWZpbmUgcGxfZ2V0VmlzdWFs
UnVuR2x5cGhzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShwbF9nZXRWaXN1YWxSdW5HbHlwaHMp
Ci0jZGVmaW5lIHBsX2dldFZpc3VhbFJ1bkxlYWRpbmcgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHBsX2dldFZpc3VhbFJ1bkxlYWRpbmcpCi0jZGVmaW5lIHBsX2dldFZpc3VhbFJ1blBvc2l0aW9u
cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUocGxfZ2V0VmlzdWFsUnVuUG9zaXRpb25zKQotI2Rl
ZmluZSBwbF9pc0NvbXBsZXggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHBsX2lzQ29tcGxleCkK
LSNkZWZpbmUgcGxfbmV4dExpbmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHBsX25leHRMaW5l
KQotI2RlZmluZSBwbF9vcGVuRW1wdHlGb250UnVucyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
cGxfb3BlbkVtcHR5Rm9udFJ1bnMpCi0jZGVmaW5lIHBsX29wZW5FbXB0eUxvY2FsZVJ1bnMgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHBsX29wZW5FbXB0eUxvY2FsZVJ1bnMpCi0jZGVmaW5lIHBs
X29wZW5FbXB0eVZhbHVlUnVucyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUocGxfb3BlbkVtcHR5
VmFsdWVSdW5zKQotI2RlZmluZSBwbF9vcGVuRm9udFJ1bnMgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHBsX29wZW5Gb250UnVucykKLSNkZWZpbmUgcGxfb3BlbkxvY2FsZVJ1bnMgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHBsX29wZW5Mb2NhbGVSdW5zKQotI2RlZmluZSBwbF9vcGVuVmFsdWVS
dW5zIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShwbF9vcGVuVmFsdWVSdW5zKQotI2RlZmluZSBw
bF9yZWZsb3cgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHBsX3JlZmxvdykKLSNkZWZpbmUgcGxf
cmVzZXRGb250UnVucyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUocGxfcmVzZXRGb250UnVucykK
LSNkZWZpbmUgcGxfcmVzZXRMb2NhbGVSdW5zIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShwbF9y
ZXNldExvY2FsZVJ1bnMpCi0jZGVmaW5lIHBsX3Jlc2V0VmFsdWVSdW5zIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRShwbF9yZXNldFZhbHVlUnVucykKLSNkZWZpbmUgcmVzX2NvdW50QXJyYXlJdGVt
cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUocmVzX2NvdW50QXJyYXlJdGVtcykKLSNkZWZpbmUg
cmVzX2ZpbmRSZXNvdXJjZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUocmVzX2ZpbmRSZXNvdXJj
ZSkKLSNkZWZpbmUgcmVzX2dldEFsaWFzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShyZXNfZ2V0
QWxpYXMpCi0jZGVmaW5lIHJlc19nZXRBcnJheUl0ZW0gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHJlc19nZXRBcnJheUl0ZW0pCi0jZGVmaW5lIHJlc19nZXRCaW5hcnkgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHJlc19nZXRCaW5hcnkpCi0jZGVmaW5lIHJlc19nZXRJbnRWZWN0b3IgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHJlc19nZXRJbnRWZWN0b3IpCi0jZGVmaW5lIHJlc19nZXRQdWJs
aWNUeXBlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShyZXNfZ2V0UHVibGljVHlwZSkKLSNkZWZp
bmUgcmVzX2dldFJlc291cmNlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShyZXNfZ2V0UmVzb3Vy
Y2UpCi0jZGVmaW5lIHJlc19nZXRTdHJpbmcgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHJlc19n
ZXRTdHJpbmcpCi0jZGVmaW5lIHJlc19nZXRUYWJsZUl0ZW1CeUluZGV4IFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRShyZXNfZ2V0VGFibGVJdGVtQnlJbmRleCkKLSNkZWZpbmUgcmVzX2dldFRhYmxl
SXRlbUJ5S2V5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShyZXNfZ2V0VGFibGVJdGVtQnlLZXkp
Ci0jZGVmaW5lIHJlc19sb2FkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShyZXNfbG9hZCkKLSNk
ZWZpbmUgcmVzX3JlYWQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHJlc19yZWFkKQotI2RlZmlu
ZSByZXNfdW5sb2FkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRShyZXNfdW5sb2FkKQotI2RlZmlu
ZSB1X1VDaGFyc1RvQ2hhcnMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfVUNoYXJzVG9DaGFy
cykKLSNkZWZpbmUgdV9hdXN0cmNweSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9hdXN0cmNw
eSkKLSNkZWZpbmUgdV9hdXN0cm5jcHkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfYXVzdHJu
Y3B5KQotI2RlZmluZSB1X2Nhc2VJbnNlbnNpdGl2ZVByZWZpeE1hdGNoIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1X2Nhc2VJbnNlbnNpdGl2ZVByZWZpeE1hdGNoKQotI2RlZmluZSB1X2NhdGNs
b3NlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2NhdGNsb3NlKQotI2RlZmluZSB1X2NhdGdl
dHMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfY2F0Z2V0cykKLSNkZWZpbmUgdV9jYXRvcGVu
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2NhdG9wZW4pCi0jZGVmaW5lIHVfY2hhckFnZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9jaGFyQWdlKQotI2RlZmluZSB1X2NoYXJEaWdpdFZh
bHVlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2NoYXJEaWdpdFZhbHVlKQotI2RlZmluZSB1
X2NoYXJEaXJlY3Rpb24gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfY2hhckRpcmVjdGlvbikK
LSNkZWZpbmUgdV9jaGFyRnJvbU5hbWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfY2hhckZy
b21OYW1lKQotI2RlZmluZSB1X2NoYXJNaXJyb3IgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVf
Y2hhck1pcnJvcikKLSNkZWZpbmUgdV9jaGFyTmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dV9jaGFyTmFtZSkKLSNkZWZpbmUgdV9jaGFyVHlwZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dV9jaGFyVHlwZSkKLSNkZWZpbmUgdV9jaGFyc1RvVUNoYXJzIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1X2NoYXJzVG9VQ2hhcnMpCi0jZGVmaW5lIHVfY2xlYW51cCBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodV9jbGVhbnVwKQotI2RlZmluZSB1X2NvdW50Q2hhcjMyIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1X2NvdW50Q2hhcjMyKQotI2RlZmluZSB1X2RpZ2l0IFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1X2RpZ2l0KQotI2RlZmluZSB1X2VudW1DaGFyTmFtZXMgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVfZW51bUNoYXJOYW1lcykKLSNkZWZpbmUgdV9lbnVtQ2hhclR5cGVzIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2VudW1DaGFyVHlwZXMpCi0jZGVmaW5lIHVfZXJyb3JO
YW1lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2Vycm9yTmFtZSkKLSNkZWZpbmUgdV9mYWRv
cHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZmFkb3B0KQotI2RlZmluZSB1X2ZjbG9zZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9mY2xvc2UpCi0jZGVmaW5lIHVfZmVvZiBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodV9mZW9mKQotI2RlZmluZSB1X2ZmbHVzaCBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodV9mZmx1c2gpCi0jZGVmaW5lIHVfZmdldENvbnZlcnRlciBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodV9mZ2V0Q29udmVydGVyKQotI2RlZmluZSB1X2ZnZXROdW1iZXJGb3Jt
YXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZmdldE51bWJlckZvcm1hdCkKLSNkZWZpbmUg
dV9mZ2V0YyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9mZ2V0YykKLSNkZWZpbmUgdV9mZ2V0
Y29kZXBhZ2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZmdldGNvZGVwYWdlKQotI2RlZmlu
ZSB1X2ZnZXRjeCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9mZ2V0Y3gpCi0jZGVmaW5lIHVf
ZmdldGZpbGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZmdldGZpbGUpCi0jZGVmaW5lIHVf
ZmdldGxvY2FsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9mZ2V0bG9jYWxlKQotI2RlZmlu
ZSB1X2ZnZXRzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2ZnZXRzKQotI2RlZmluZSB1X2Zp
bGVfcmVhZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9maWxlX3JlYWQpCi0jZGVmaW5lIHVf
ZmlsZV93cml0ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9maWxlX3dyaXRlKQotI2RlZmlu
ZSB1X2ZpbGVfd3JpdGVfZmx1c2ggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZmlsZV93cml0
ZV9mbHVzaCkKLSNkZWZpbmUgdV9maW5pdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9maW5p
dCkKLSNkZWZpbmUgdV9mbHVzaERlZmF1bHRDb252ZXJ0ZXIgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVfZmx1c2hEZWZhdWx0Q29udmVydGVyKQotI2RlZmluZSB1X2ZvbGRDYXNlIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1X2ZvbGRDYXNlKQotI2RlZmluZSB1X2ZvcGVuIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1X2ZvcGVuKQotI2RlZmluZSB1X2ZvcGVuX3UgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVfZm9wZW5fdSkKLSNkZWZpbmUgdV9mb3JEaWdpdCBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodV9mb3JEaWdpdCkKLSNkZWZpbmUgdV9mb3JtYXRNZXNzYWdlIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1X2Zvcm1hdE1lc3NhZ2UpCi0jZGVmaW5lIHVfZm9ybWF0TWVzc2FnZVdp
dGhFcnJvciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9mb3JtYXRNZXNzYWdlV2l0aEVycm9y
KQotI2RlZmluZSB1X2ZwcmludGYgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZnByaW50ZikK
LSNkZWZpbmUgdV9mcHJpbnRmX3UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZnByaW50Zl91
KQotI2RlZmluZSB1X2ZwdXRjIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2ZwdXRjKQotI2Rl
ZmluZSB1X2ZwdXRzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2ZwdXRzKQotI2RlZmluZSB1
X2ZyZXdpbmQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZnJld2luZCkKLSNkZWZpbmUgdV9m
c2NhbmYgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZnNjYW5mKQotI2RlZmluZSB1X2ZzY2Fu
Zl91IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2ZzY2FuZl91KQotI2RlZmluZSB1X2ZzZXRj
b2RlcGFnZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9mc2V0Y29kZXBhZ2UpCi0jZGVmaW5l
IHVfZnNldGxvY2FsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9mc2V0bG9jYWxlKQotI2Rl
ZmluZSB1X2ZzZXR0cmFuc2xpdGVyYXRvciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9mc2V0
dHJhbnNsaXRlcmF0b3IpCi0jZGVmaW5lIHVfZnN0cm9wZW4gVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVfZnN0cm9wZW4pCi0jZGVmaW5lIHVfZnVuZ2V0YyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodV9mdW5nZXRjKQotI2RlZmluZSB1X2dldEJpZGlQYWlyZWRCcmFja2V0IFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1X2dldEJpZGlQYWlyZWRCcmFja2V0KQotI2RlZmluZSB1X2dldENvbWJp
bmluZ0NsYXNzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2dldENvbWJpbmluZ0NsYXNzKQot
I2RlZmluZSB1X2dldERhdGFEaXJlY3RvcnkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZ2V0
RGF0YURpcmVjdG9yeSkKLSNkZWZpbmUgdV9nZXREYXRhVmVyc2lvbiBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodV9nZXREYXRhVmVyc2lvbikKLSNkZWZpbmUgdV9nZXREZWZhdWx0Q29udmVydGVy
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2dldERlZmF1bHRDb252ZXJ0ZXIpCi0jZGVmaW5l
IHVfZ2V0RkNfTkZLQ19DbG9zdXJlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2dldEZDX05G
S0NfQ2xvc3VyZSkKLSNkZWZpbmUgdV9nZXRJU09Db21tZW50IFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1X2dldElTT0NvbW1lbnQpCi0jZGVmaW5lIHVfZ2V0SW50UHJvcGVydHlNYXhWYWx1ZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9nZXRJbnRQcm9wZXJ0eU1heFZhbHVlKQotI2RlZmlu
ZSB1X2dldEludFByb3BlcnR5TWluVmFsdWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZ2V0
SW50UHJvcGVydHlNaW5WYWx1ZSkKLSNkZWZpbmUgdV9nZXRJbnRQcm9wZXJ0eVZhbHVlIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1X2dldEludFByb3BlcnR5VmFsdWUpCi0jZGVmaW5lIHVfZ2V0
TWFpblByb3BlcnRpZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZ2V0TWFpblByb3BlcnRp
ZXMpCi0jZGVmaW5lIHVfZ2V0TnVtZXJpY1ZhbHVlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
X2dldE51bWVyaWNWYWx1ZSkKLSNkZWZpbmUgdV9nZXRQcm9wZXJ0eUVudW0gVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVfZ2V0UHJvcGVydHlFbnVtKQotI2RlZmluZSB1X2dldFByb3BlcnR5TmFt
ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9nZXRQcm9wZXJ0eU5hbWUpCi0jZGVmaW5lIHVf
Z2V0UHJvcGVydHlWYWx1ZUVudW0gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZ2V0UHJvcGVy
dHlWYWx1ZUVudW0pCi0jZGVmaW5lIHVfZ2V0UHJvcGVydHlWYWx1ZU5hbWUgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVfZ2V0UHJvcGVydHlWYWx1ZU5hbWUpCi0jZGVmaW5lIHVfZ2V0VGltZVpv
bmVGaWxlc0RpcmVjdG9yeSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9nZXRUaW1lWm9uZUZp
bGVzRGlyZWN0b3J5KQotI2RlZmluZSB1X2dldFVuaWNvZGVQcm9wZXJ0aWVzIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1X2dldFVuaWNvZGVQcm9wZXJ0aWVzKQotI2RlZmluZSB1X2dldFVuaWNv
ZGVWZXJzaW9uIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2dldFVuaWNvZGVWZXJzaW9uKQot
I2RlZmluZSB1X2dldFZlcnNpb24gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfZ2V0VmVyc2lv
bikKLSNkZWZpbmUgdV9nZXRfc3Rkb3V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2dldF9z
dGRvdXQpCi0jZGVmaW5lIHVfaGFzQmluYXJ5UHJvcGVydHkgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVfaGFzQmluYXJ5UHJvcGVydHkpCi0jZGVmaW5lIHVfaW5pdCBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodV9pbml0KQotI2RlZmluZSB1X2lzSURJZ25vcmFibGUgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVfaXNJRElnbm9yYWJsZSkKLSNkZWZpbmUgdV9pc0lEUGFydCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodV9pc0lEUGFydCkKLSNkZWZpbmUgdV9pc0lEU3RhcnQgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVfaXNJRFN0YXJ0KQotI2RlZmluZSB1X2lzSVNPQ29udHJvbCBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodV9pc0lTT0NvbnRyb2wpCi0jZGVmaW5lIHVfaXNKYXZhSURQ
YXJ0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lzSmF2YUlEUGFydCkKLSNkZWZpbmUgdV9p
c0phdmFJRFN0YXJ0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lzSmF2YUlEU3RhcnQpCi0j
ZGVmaW5lIHVfaXNKYXZhU3BhY2VDaGFyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lzSmF2
YVNwYWNlQ2hhcikKLSNkZWZpbmUgdV9pc01pcnJvcmVkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1X2lzTWlycm9yZWQpCi0jZGVmaW5lIHVfaXNVQWxwaGFiZXRpYyBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodV9pc1VBbHBoYWJldGljKQotI2RlZmluZSB1X2lzVUxvd2VyY2FzZSBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodV9pc1VMb3dlcmNhc2UpCi0jZGVmaW5lIHVfaXNVVXBwZXJjYXNl
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lzVVVwcGVyY2FzZSkKLSNkZWZpbmUgdV9pc1VX
aGl0ZVNwYWNlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lzVVdoaXRlU3BhY2UpCi0jZGVm
aW5lIHVfaXNXaGl0ZXNwYWNlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lzV2hpdGVzcGFj
ZSkKLSNkZWZpbmUgdV9pc2FsbnVtIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lzYWxudW0p
Ci0jZGVmaW5lIHVfaXNhbG51bVBPU0lYIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lzYWxu
dW1QT1NJWCkKLSNkZWZpbmUgdV9pc2FscGhhIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lz
YWxwaGEpCi0jZGVmaW5lIHVfaXNiYXNlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lzYmFz
ZSkKLSNkZWZpbmUgdV9pc2JsYW5rIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lzYmxhbmsp
Ci0jZGVmaW5lIHVfaXNjbnRybCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9pc2NudHJsKQot
I2RlZmluZSB1X2lzZGVmaW5lZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9pc2RlZmluZWQp
Ci0jZGVmaW5lIHVfaXNkaWdpdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9pc2RpZ2l0KQot
I2RlZmluZSB1X2lzZ3JhcGggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfaXNncmFwaCkKLSNk
ZWZpbmUgdV9pc2dyYXBoUE9TSVggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfaXNncmFwaFBP
U0lYKQotI2RlZmluZSB1X2lzbG93ZXIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfaXNsb3dl
cikKLSNkZWZpbmUgdV9pc3ByaW50IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lzcHJpbnQp
Ci0jZGVmaW5lIHVfaXNwcmludFBPU0lYIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lzcHJp
bnRQT1NJWCkKLSNkZWZpbmUgdV9pc3B1bmN0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lz
cHVuY3QpCi0jZGVmaW5lIHVfaXNzcGFjZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9pc3Nw
YWNlKQotI2RlZmluZSB1X2lzdGl0bGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfaXN0aXRs
ZSkKLSNkZWZpbmUgdV9pc3VwcGVyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X2lzdXBwZXIp
Ci0jZGVmaW5lIHVfaXN4ZGlnaXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfaXN4ZGlnaXQp
Ci0jZGVmaW5lIHVfbG9jYnVuZF9jbG9zZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9sb2Ni
dW5kX2Nsb3NlKQotI2RlZmluZSB1X2xvY2J1bmRfZ2V0TnVtYmVyRm9ybWF0IFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1X2xvY2J1bmRfZ2V0TnVtYmVyRm9ybWF0KQotI2RlZmluZSB1X2xvY2J1
bmRfaW5pdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9sb2NidW5kX2luaXQpCi0jZGVmaW5l
IHVfbWVtY2FzZWNtcCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9tZW1jYXNlY21wKQotI2Rl
ZmluZSB1X21lbWNociBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9tZW1jaHIpCi0jZGVmaW5l
IHVfbWVtY2hyMzIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfbWVtY2hyMzIpCi0jZGVmaW5l
IHVfbWVtY21wIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X21lbWNtcCkKLSNkZWZpbmUgdV9t
ZW1jbXBDb2RlUG9pbnRPcmRlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9tZW1jbXBDb2Rl
UG9pbnRPcmRlcikKLSNkZWZpbmUgdV9tZW1jcHkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVf
bWVtY3B5KQotI2RlZmluZSB1X21lbW1vdmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfbWVt
bW92ZSkKLSNkZWZpbmUgdV9tZW1yY2hyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X21lbXJj
aHIpCi0jZGVmaW5lIHVfbWVtcmNocjMyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X21lbXJj
aHIzMikKLSNkZWZpbmUgdV9tZW1zZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfbWVtc2V0
KQotI2RlZmluZSB1X3BhcnNlTWVzc2FnZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9wYXJz
ZU1lc3NhZ2UpCi0jZGVmaW5lIHVfcGFyc2VNZXNzYWdlV2l0aEVycm9yIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1X3BhcnNlTWVzc2FnZVdpdGhFcnJvcikKLSNkZWZpbmUgdV9wcmludGYgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfcHJpbnRmKQotI2RlZmluZSB1X3ByaW50Zl9wYXJzZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9wcmludGZfcGFyc2UpCi0jZGVmaW5lIHVfcHJpbnRm
X3UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfcHJpbnRmX3UpCi0jZGVmaW5lIHVfcmVsZWFz
ZURlZmF1bHRDb252ZXJ0ZXIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfcmVsZWFzZURlZmF1
bHRDb252ZXJ0ZXIpCi0jZGVmaW5lIHVfc2NhbmZfcGFyc2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVfc2NhbmZfcGFyc2UpCi0jZGVmaW5lIHVfc2V0QXRvbWljSW5jRGVjRnVuY3Rpb25zIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3NldEF0b21pY0luY0RlY0Z1bmN0aW9ucykKLSNkZWZp
bmUgdV9zZXREYXRhRGlyZWN0b3J5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3NldERhdGFE
aXJlY3RvcnkpCi0jZGVmaW5lIHVfc2V0TWVtb3J5RnVuY3Rpb25zIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1X3NldE1lbW9yeUZ1bmN0aW9ucykKLSNkZWZpbmUgdV9zZXRNdXRleEZ1bmN0aW9u
cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9zZXRNdXRleEZ1bmN0aW9ucykKLSNkZWZpbmUg
dV9zZXRUaW1lWm9uZUZpbGVzRGlyZWN0b3J5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3Nl
dFRpbWVab25lRmlsZXNEaXJlY3RvcnkpCi0jZGVmaW5lIHVfc2hhcGVBcmFiaWMgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVfc2hhcGVBcmFiaWMpCi0jZGVmaW5lIHVfc25wcmludGYgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVfc25wcmludGYpCi0jZGVmaW5lIHVfc25wcmludGZfdSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodV9zbnByaW50Zl91KQotI2RlZmluZSB1X3NwcmludGYgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfc3ByaW50ZikKLSNkZWZpbmUgdV9zcHJpbnRmX3UgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfc3ByaW50Zl91KQotI2RlZmluZSB1X3NzY2FuZiBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodV9zc2NhbmYpCi0jZGVmaW5lIHVfc3NjYW5mX3UgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVfc3NjYW5mX3UpCi0jZGVmaW5lIHVfc3RyQ2FzZUNvbXBhcmUg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfc3RyQ2FzZUNvbXBhcmUpCi0jZGVmaW5lIHVfc3Ry
Q29tcGFyZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9zdHJDb21wYXJlKQotI2RlZmluZSB1
X3N0ckNvbXBhcmVJdGVyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0ckNvbXBhcmVJdGVy
KQotI2RlZmluZSB1X3N0ckZpbmRGaXJzdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9zdHJG
aW5kRmlyc3QpCi0jZGVmaW5lIHVfc3RyRmluZExhc3QgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVfc3RyRmluZExhc3QpCi0jZGVmaW5lIHVfc3RyRm9sZENhc2UgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVfc3RyRm9sZENhc2UpCi0jZGVmaW5lIHVfc3RyRnJvbUphdmFNb2RpZmllZFVURjhX
aXRoU3ViIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0ckZyb21KYXZhTW9kaWZpZWRVVEY4
V2l0aFN1YikKLSNkZWZpbmUgdV9zdHJGcm9tUHVueWNvZGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVfc3RyRnJvbVB1bnljb2RlKQotI2RlZmluZSB1X3N0ckZyb21VVEYzMiBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodV9zdHJGcm9tVVRGMzIpCi0jZGVmaW5lIHVfc3RyRnJvbVVURjMyV2l0
aFN1YiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9zdHJGcm9tVVRGMzJXaXRoU3ViKQotI2Rl
ZmluZSB1X3N0ckZyb21VVEY4IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0ckZyb21VVEY4
KQotI2RlZmluZSB1X3N0ckZyb21VVEY4TGVuaWVudCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dV9zdHJGcm9tVVRGOExlbmllbnQpCi0jZGVmaW5lIHVfc3RyRnJvbVVURjhXaXRoU3ViIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0ckZyb21VVEY4V2l0aFN1YikKLSNkZWZpbmUgdV9zdHJG
cm9tV0NTIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0ckZyb21XQ1MpCi0jZGVmaW5lIHVf
c3RySGFzTW9yZUNoYXIzMlRoYW4gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfc3RySGFzTW9y
ZUNoYXIzMlRoYW4pCi0jZGVmaW5lIHVfc3RyVG9KYXZhTW9kaWZpZWRVVEY4IFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1X3N0clRvSmF2YU1vZGlmaWVkVVRGOCkKLSNkZWZpbmUgdV9zdHJUb0xv
d2VyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0clRvTG93ZXIpCi0jZGVmaW5lIHVfc3Ry
VG9QdW55Y29kZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9zdHJUb1B1bnljb2RlKQotI2Rl
ZmluZSB1X3N0clRvVGl0bGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfc3RyVG9UaXRsZSkK
LSNkZWZpbmUgdV9zdHJUb1VURjMyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0clRvVVRG
MzIpCi0jZGVmaW5lIHVfc3RyVG9VVEYzMldpdGhTdWIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVfc3RyVG9VVEYzMldpdGhTdWIpCi0jZGVmaW5lIHVfc3RyVG9VVEY4IFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1X3N0clRvVVRGOCkKLSNkZWZpbmUgdV9zdHJUb1VURjhXaXRoU3ViIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0clRvVVRGOFdpdGhTdWIpCi0jZGVmaW5lIHVfc3RyVG9V
cHBlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9zdHJUb1VwcGVyKQotI2RlZmluZSB1X3N0
clRvV0NTIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0clRvV0NTKQotI2RlZmluZSB1X3N0
cmNhc2VjbXAgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfc3RyY2FzZWNtcCkKLSNkZWZpbmUg
dV9zdHJjYXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfc3RyY2F0KQotI2RlZmluZSB1X3N0
cmNociBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9zdHJjaHIpCi0jZGVmaW5lIHVfc3RyY2hy
MzIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfc3RyY2hyMzIpCi0jZGVmaW5lIHVfc3RyY21w
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0cmNtcCkKLSNkZWZpbmUgdV9zdHJjbXBDb2Rl
UG9pbnRPcmRlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9zdHJjbXBDb2RlUG9pbnRPcmRl
cikKLSNkZWZpbmUgdV9zdHJjbXBGb2xkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0cmNt
cEZvbGQpCi0jZGVmaW5lIHVfc3RyY3B5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0cmNw
eSkKLSNkZWZpbmUgdV9zdHJjc3BuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0cmNzcG4p
Ci0jZGVmaW5lIHVfc3RybGVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0cmxlbikKLSNk
ZWZpbmUgdV9zdHJuY2FzZWNtcCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9zdHJuY2FzZWNt
cCkKLSNkZWZpbmUgdV9zdHJuY2F0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3N0cm5jYXQp
Ci0jZGVmaW5lIHVfc3RybmNtcCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV9zdHJuY21wKQot
I2RlZmluZSB1X3N0cm5jbXBDb2RlUG9pbnRPcmRlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dV9zdHJuY21wQ29kZVBvaW50T3JkZXIpCi0jZGVmaW5lIHVfc3RybmNweSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodV9zdHJuY3B5KQotI2RlZmluZSB1X3N0cnBicmsgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVfc3RycGJyaykKLSNkZWZpbmUgdV9zdHJyY2hyIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1X3N0cnJjaHIpCi0jZGVmaW5lIHVfc3RycmNocjMyIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1X3N0cnJjaHIzMikKLSNkZWZpbmUgdV9zdHJyc3RyIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1X3N0cnJzdHIpCi0jZGVmaW5lIHVfc3Ryc3BuIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1X3N0cnNwbikKLSNkZWZpbmUgdV9zdHJzdHIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVfc3Ryc3RyKQotI2RlZmluZSB1X3N0cnRva19yIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
X3N0cnRva19yKQotI2RlZmluZSB1X3Rlcm1pbmF0ZUNoYXJzIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1X3Rlcm1pbmF0ZUNoYXJzKQotI2RlZmluZSB1X3Rlcm1pbmF0ZVVDaGFyMzJzIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1X3Rlcm1pbmF0ZVVDaGFyMzJzKQotI2RlZmluZSB1X3Rlcm1p
bmF0ZVVDaGFycyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV90ZXJtaW5hdGVVQ2hhcnMpCi0j
ZGVmaW5lIHVfdGVybWluYXRlV0NoYXJzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3Rlcm1p
bmF0ZVdDaGFycykKLSNkZWZpbmUgdV90b2xvd2VyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
X3RvbG93ZXIpCi0jZGVmaW5lIHVfdG90aXRsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV90
b3RpdGxlKQotI2RlZmluZSB1X3RvdXBwZXIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfdG91
cHBlcikKLSNkZWZpbmUgdV91YXN0cmNweSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV91YXN0
cmNweSkKLSNkZWZpbmUgdV91YXN0cm5jcHkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfdWFz
dHJuY3B5KQotI2RlZmluZSB1X3VuZXNjYXBlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3Vu
ZXNjYXBlKQotI2RlZmluZSB1X3VuZXNjYXBlQXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVf
dW5lc2NhcGVBdCkKLSNkZWZpbmUgdV92ZXJzaW9uRnJvbVN0cmluZyBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodV92ZXJzaW9uRnJvbVN0cmluZykKLSNkZWZpbmUgdV92ZXJzaW9uRnJvbVVTdHJp
bmcgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfdmVyc2lvbkZyb21VU3RyaW5nKQotI2RlZmlu
ZSB1X3ZlcnNpb25Ub1N0cmluZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV92ZXJzaW9uVG9T
dHJpbmcpCi0jZGVmaW5lIHVfdmZvcm1hdE1lc3NhZ2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVfdmZvcm1hdE1lc3NhZ2UpCi0jZGVmaW5lIHVfdmZvcm1hdE1lc3NhZ2VXaXRoRXJyb3IgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfdmZvcm1hdE1lc3NhZ2VXaXRoRXJyb3IpCi0jZGVmaW5l
IHVfdmZwcmludGYgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfdmZwcmludGYpCi0jZGVmaW5l
IHVfdmZwcmludGZfdSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV92ZnByaW50Zl91KQotI2Rl
ZmluZSB1X3Zmc2NhbmYgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfdmZzY2FuZikKLSNkZWZp
bmUgdV92ZnNjYW5mX3UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfdmZzY2FuZl91KQotI2Rl
ZmluZSB1X3ZwYXJzZU1lc3NhZ2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVfdnBhcnNlTWVz
c2FnZSkKLSNkZWZpbmUgdV92cGFyc2VNZXNzYWdlV2l0aEVycm9yIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1X3ZwYXJzZU1lc3NhZ2VXaXRoRXJyb3IpCi0jZGVmaW5lIHVfdnNucHJpbnRmIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3ZzbnByaW50ZikKLSNkZWZpbmUgdV92c25wcmludGZf
dSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV92c25wcmludGZfdSkKLSNkZWZpbmUgdV92c3By
aW50ZiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV92c3ByaW50ZikKLSNkZWZpbmUgdV92c3By
aW50Zl91IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1X3ZzcHJpbnRmX3UpCi0jZGVmaW5lIHVf
dnNzY2FuZiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV92c3NjYW5mKQotI2RlZmluZSB1X3Zz
c2NhbmZfdSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV92c3NjYW5mX3UpCi0jZGVmaW5lIHVf
d3JpdGVJZGVudGljYWxMZXZlbFJ1biBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodV93cml0ZUlk
ZW50aWNhbExldmVsUnVuKQotI2RlZmluZSB1YmlkaV9hZGRQcm9wZXJ0eVN0YXJ0cyBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfYWRkUHJvcGVydHlTdGFydHMpCi0jZGVmaW5lIHViaWRp
X2Nsb3NlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YmlkaV9jbG9zZSkKLSNkZWZpbmUgdWJp
ZGlfY291bnRQYXJhZ3JhcGhzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YmlkaV9jb3VudFBh
cmFncmFwaHMpCi0jZGVmaW5lIHViaWRpX2NvdW50UnVucyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWJpZGlfY291bnRSdW5zKQotI2RlZmluZSB1YmlkaV9nZXRCYXNlRGlyZWN0aW9uIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1YmlkaV9nZXRCYXNlRGlyZWN0aW9uKQotI2RlZmluZSB1Ymlk
aV9nZXRDbGFzcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfZ2V0Q2xhc3MpCi0jZGVm
aW5lIHViaWRpX2dldENsYXNzQ2FsbGJhY2sgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHViaWRp
X2dldENsYXNzQ2FsbGJhY2spCi0jZGVmaW5lIHViaWRpX2dldEN1c3RvbWl6ZWRDbGFzcyBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfZ2V0Q3VzdG9taXplZENsYXNzKQotI2RlZmluZSB1
YmlkaV9nZXREaXJlY3Rpb24gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHViaWRpX2dldERpcmVj
dGlvbikKLSNkZWZpbmUgdWJpZGlfZ2V0Sm9pbmluZ0dyb3VwIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1YmlkaV9nZXRKb2luaW5nR3JvdXApCi0jZGVmaW5lIHViaWRpX2dldEpvaW5pbmdUeXBl
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YmlkaV9nZXRKb2luaW5nVHlwZSkKLSNkZWZpbmUg
dWJpZGlfZ2V0TGVuZ3RoIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YmlkaV9nZXRMZW5ndGgp
Ci0jZGVmaW5lIHViaWRpX2dldExldmVsQXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHViaWRp
X2dldExldmVsQXQpCi0jZGVmaW5lIHViaWRpX2dldExldmVscyBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWJpZGlfZ2V0TGV2ZWxzKQotI2RlZmluZSB1YmlkaV9nZXRMb2dpY2FsSW5kZXggVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHViaWRpX2dldExvZ2ljYWxJbmRleCkKLSNkZWZpbmUgdWJp
ZGlfZ2V0TG9naWNhbE1hcCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfZ2V0TG9naWNh
bE1hcCkKLSNkZWZpbmUgdWJpZGlfZ2V0TG9naWNhbFJ1biBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWJpZGlfZ2V0TG9naWNhbFJ1bikKLSNkZWZpbmUgdWJpZGlfZ2V0TWF4VmFsdWUgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHViaWRpX2dldE1heFZhbHVlKQotI2RlZmluZSB1YmlkaV9nZXRN
ZW1vcnkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHViaWRpX2dldE1lbW9yeSkKLSNkZWZpbmUg
dWJpZGlfZ2V0TWlycm9yIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YmlkaV9nZXRNaXJyb3Ip
Ci0jZGVmaW5lIHViaWRpX2dldFBhaXJlZEJyYWNrZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHViaWRpX2dldFBhaXJlZEJyYWNrZXQpCi0jZGVmaW5lIHViaWRpX2dldFBhaXJlZEJyYWNrZXRU
eXBlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YmlkaV9nZXRQYWlyZWRCcmFja2V0VHlwZSkK
LSNkZWZpbmUgdWJpZGlfZ2V0UGFyYUxldmVsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Ymlk
aV9nZXRQYXJhTGV2ZWwpCi0jZGVmaW5lIHViaWRpX2dldFBhcmFMZXZlbEF0SW5kZXggVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHViaWRpX2dldFBhcmFMZXZlbEF0SW5kZXgpCi0jZGVmaW5lIHVi
aWRpX2dldFBhcmFncmFwaCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfZ2V0UGFyYWdy
YXBoKQotI2RlZmluZSB1YmlkaV9nZXRQYXJhZ3JhcGhCeUluZGV4IFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1YmlkaV9nZXRQYXJhZ3JhcGhCeUluZGV4KQotI2RlZmluZSB1YmlkaV9nZXRQcm9j
ZXNzZWRMZW5ndGggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHViaWRpX2dldFByb2Nlc3NlZExl
bmd0aCkKLSNkZWZpbmUgdWJpZGlfZ2V0UmVvcmRlcmluZ01vZGUgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHViaWRpX2dldFJlb3JkZXJpbmdNb2RlKQotI2RlZmluZSB1YmlkaV9nZXRSZW9yZGVy
aW5nT3B0aW9ucyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfZ2V0UmVvcmRlcmluZ09w
dGlvbnMpCi0jZGVmaW5lIHViaWRpX2dldFJlc3VsdExlbmd0aCBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWJpZGlfZ2V0UmVzdWx0TGVuZ3RoKQotI2RlZmluZSB1YmlkaV9nZXRSdW5zIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1YmlkaV9nZXRSdW5zKQotI2RlZmluZSB1YmlkaV9nZXRTaW5n
bGV0b24gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHViaWRpX2dldFNpbmdsZXRvbikKLSNkZWZp
bmUgdWJpZGlfZ2V0VGV4dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfZ2V0VGV4dCkK
LSNkZWZpbmUgdWJpZGlfZ2V0VmlzdWFsSW5kZXggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVi
aWRpX2dldFZpc3VhbEluZGV4KQotI2RlZmluZSB1YmlkaV9nZXRWaXN1YWxNYXAgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHViaWRpX2dldFZpc3VhbE1hcCkKLSNkZWZpbmUgdWJpZGlfZ2V0Vmlz
dWFsUnVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YmlkaV9nZXRWaXN1YWxSdW4pCi0jZGVm
aW5lIHViaWRpX2ludmVydE1hcCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfaW52ZXJ0
TWFwKQotI2RlZmluZSB1YmlkaV9pc0JpZGlDb250cm9sIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1YmlkaV9pc0JpZGlDb250cm9sKQotI2RlZmluZSB1YmlkaV9pc0ludmVyc2UgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHViaWRpX2lzSW52ZXJzZSkKLSNkZWZpbmUgdWJpZGlfaXNKb2luQ29u
dHJvbCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfaXNKb2luQ29udHJvbCkKLSNkZWZp
bmUgdWJpZGlfaXNNaXJyb3JlZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfaXNNaXJy
b3JlZCkKLSNkZWZpbmUgdWJpZGlfaXNPcmRlclBhcmFncmFwaHNMVFIgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHViaWRpX2lzT3JkZXJQYXJhZ3JhcGhzTFRSKQotI2RlZmluZSB1YmlkaV9vcGVu
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YmlkaV9vcGVuKQotI2RlZmluZSB1YmlkaV9vcGVu
U2l6ZWQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHViaWRpX29wZW5TaXplZCkKLSNkZWZpbmUg
dWJpZGlfb3JkZXJQYXJhZ3JhcGhzTFRSIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YmlkaV9v
cmRlclBhcmFncmFwaHNMVFIpCi0jZGVmaW5lIHViaWRpX3Jlb3JkZXJMb2dpY2FsIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1YmlkaV9yZW9yZGVyTG9naWNhbCkKLSNkZWZpbmUgdWJpZGlfcmVv
cmRlclZpc3VhbCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfcmVvcmRlclZpc3VhbCkK
LSNkZWZpbmUgdWJpZGlfc2V0Q2xhc3NDYWxsYmFjayBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dWJpZGlfc2V0Q2xhc3NDYWxsYmFjaykKLSNkZWZpbmUgdWJpZGlfc2V0Q29udGV4dCBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfc2V0Q29udGV4dCkKLSNkZWZpbmUgdWJpZGlfc2V0SW52
ZXJzZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfc2V0SW52ZXJzZSkKLSNkZWZpbmUg
dWJpZGlfc2V0TGluZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfc2V0TGluZSkKLSNk
ZWZpbmUgdWJpZGlfc2V0UGFyYSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfc2V0UGFy
YSkKLSNkZWZpbmUgdWJpZGlfc2V0UmVvcmRlcmluZ01vZGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHViaWRpX3NldFJlb3JkZXJpbmdNb2RlKQotI2RlZmluZSB1YmlkaV9zZXRSZW9yZGVyaW5n
T3B0aW9ucyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJpZGlfc2V0UmVvcmRlcmluZ09wdGlv
bnMpCi0jZGVmaW5lIHViaWRpX3dyaXRlUmVvcmRlcmVkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1YmlkaV93cml0ZVJlb3JkZXJlZCkKLSNkZWZpbmUgdWJpZGlfd3JpdGVSZXZlcnNlIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1YmlkaV93cml0ZVJldmVyc2UpCi0jZGVmaW5lIHVibG9ja19n
ZXRDb2RlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YmxvY2tfZ2V0Q29kZSkKLSNkZWZpbmUg
dWJya19jbG9zZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJya19jbG9zZSkKLSNkZWZpbmUg
dWJya19jb3VudEF2YWlsYWJsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJya19jb3VudEF2
YWlsYWJsZSkKLSNkZWZpbmUgdWJya19jdXJyZW50IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
YnJrX2N1cnJlbnQpCi0jZGVmaW5lIHVicmtfZmlyc3QgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVicmtfZmlyc3QpCi0jZGVmaW5lIHVicmtfZm9sbG93aW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1YnJrX2ZvbGxvd2luZykKLSNkZWZpbmUgdWJya19nZXRBdmFpbGFibGUgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVicmtfZ2V0QXZhaWxhYmxlKQotI2RlZmluZSB1YnJrX2dldExvY2Fs
ZUJ5VHlwZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJya19nZXRMb2NhbGVCeVR5cGUpCi0j
ZGVmaW5lIHVicmtfZ2V0UnVsZVN0YXR1cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJya19n
ZXRSdWxlU3RhdHVzKQotI2RlZmluZSB1YnJrX2dldFJ1bGVTdGF0dXNWZWMgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVicmtfZ2V0UnVsZVN0YXR1c1ZlYykKLSNkZWZpbmUgdWJya19pc0JvdW5k
YXJ5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YnJrX2lzQm91bmRhcnkpCi0jZGVmaW5lIHVi
cmtfbGFzdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJya19sYXN0KQotI2RlZmluZSB1YnJr
X25leHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVicmtfbmV4dCkKLSNkZWZpbmUgdWJya19v
cGVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YnJrX29wZW4pCi0jZGVmaW5lIHVicmtfb3Bl
blJ1bGVzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YnJrX29wZW5SdWxlcykKLSNkZWZpbmUg
dWJya19wcmVjZWRpbmcgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVicmtfcHJlY2VkaW5nKQot
I2RlZmluZSB1YnJrX3ByZXZpb3VzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1YnJrX3ByZXZp
b3VzKQotI2RlZmluZSB1YnJrX3JlZnJlc2hVVGV4dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dWJya19yZWZyZXNoVVRleHQpCi0jZGVmaW5lIHVicmtfc2FmZUNsb25lIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1YnJrX3NhZmVDbG9uZSkKLSNkZWZpbmUgdWJya19zZXRUZXh0IFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1YnJrX3NldFRleHQpCi0jZGVmaW5lIHVicmtfc2V0VVRleHQgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVicmtfc2V0VVRleHQpCi0jZGVmaW5lIHVicmtfc3dhcCBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWJya19zd2FwKQotI2RlZmluZSB1Y2FjaGVfY29tcGFy
ZUtleXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYWNoZV9jb21wYXJlS2V5cykKLSNkZWZp
bmUgdWNhY2hlX2RlbGV0ZUtleSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhY2hlX2RlbGV0
ZUtleSkKLSNkZWZpbmUgdWNhY2hlX2hhc2hLZXlzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
Y2FjaGVfaGFzaEtleXMpCi0jZGVmaW5lIHVjYWxfYWRkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1Y2FsX2FkZCkKLSNkZWZpbmUgdWNhbF9jbGVhciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dWNhbF9jbGVhcikKLSNkZWZpbmUgdWNhbF9jbGVhckZpZWxkIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1Y2FsX2NsZWFyRmllbGQpCi0jZGVmaW5lIHVjYWxfY2xvbmUgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVjYWxfY2xvbmUpCi0jZGVmaW5lIHVjYWxfY2xvc2UgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVjYWxfY2xvc2UpCi0jZGVmaW5lIHVjYWxfY291bnRBdmFpbGFibGUgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVjYWxfY291bnRBdmFpbGFibGUpCi0jZGVmaW5lIHVjYWxfZXF1
aXZhbGVudFRvIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2FsX2VxdWl2YWxlbnRUbykKLSNk
ZWZpbmUgdWNhbF9nZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYWxfZ2V0KQotI2RlZmlu
ZSB1Y2FsX2dldEF0dHJpYnV0ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhbF9nZXRBdHRy
aWJ1dGUpCi0jZGVmaW5lIHVjYWxfZ2V0QXZhaWxhYmxlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1Y2FsX2dldEF2YWlsYWJsZSkKLSNkZWZpbmUgdWNhbF9nZXRDYW5vbmljYWxUaW1lWm9uZUlE
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2FsX2dldENhbm9uaWNhbFRpbWVab25lSUQpCi0j
ZGVmaW5lIHVjYWxfZ2V0RFNUU2F2aW5ncyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhbF9n
ZXREU1RTYXZpbmdzKQotI2RlZmluZSB1Y2FsX2dldERheU9mV2Vla1R5cGUgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVjYWxfZ2V0RGF5T2ZXZWVrVHlwZSkKLSNkZWZpbmUgdWNhbF9nZXREZWZh
dWx0VGltZVpvbmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYWxfZ2V0RGVmYXVsdFRpbWVa
b25lKQotI2RlZmluZSB1Y2FsX2dldEZpZWxkRGlmZmVyZW5jZSBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWNhbF9nZXRGaWVsZERpZmZlcmVuY2UpCi0jZGVmaW5lIHVjYWxfZ2V0R3JlZ29yaWFu
Q2hhbmdlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2FsX2dldEdyZWdvcmlhbkNoYW5nZSkK
LSNkZWZpbmUgdWNhbF9nZXRLZXl3b3JkVmFsdWVzRm9yTG9jYWxlIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1Y2FsX2dldEtleXdvcmRWYWx1ZXNGb3JMb2NhbGUpCi0jZGVmaW5lIHVjYWxfZ2V0
TGltaXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYWxfZ2V0TGltaXQpCi0jZGVmaW5lIHVj
YWxfZ2V0TG9jYWxlQnlUeXBlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2FsX2dldExvY2Fs
ZUJ5VHlwZSkKLSNkZWZpbmUgdWNhbF9nZXRNaWxsaXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVjYWxfZ2V0TWlsbGlzKQotI2RlZmluZSB1Y2FsX2dldE5vdyBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWNhbF9nZXROb3cpCi0jZGVmaW5lIHVjYWxfZ2V0VFpEYXRhVmVyc2lvbiBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWNhbF9nZXRUWkRhdGFWZXJzaW9uKQotI2RlZmluZSB1Y2FsX2dl
dFRpbWVab25lRGlzcGxheU5hbWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYWxfZ2V0VGlt
ZVpvbmVEaXNwbGF5TmFtZSkKLSNkZWZpbmUgdWNhbF9nZXRUaW1lWm9uZUlEIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1Y2FsX2dldFRpbWVab25lSUQpCi0jZGVmaW5lIHVjYWxfZ2V0VGltZVpv
bmVJREZvcldpbmRvd3NJRCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhbF9nZXRUaW1lWm9u
ZUlERm9yV2luZG93c0lEKQotI2RlZmluZSB1Y2FsX2dldFRpbWVab25lVHJhbnNpdGlvbkRhdGUg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYWxfZ2V0VGltZVpvbmVUcmFuc2l0aW9uRGF0ZSkK
LSNkZWZpbmUgdWNhbF9nZXRUeXBlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2FsX2dldFR5
cGUpCi0jZGVmaW5lIHVjYWxfZ2V0V2Vla2VuZFRyYW5zaXRpb24gVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVjYWxfZ2V0V2Vla2VuZFRyYW5zaXRpb24pCi0jZGVmaW5lIHVjYWxfZ2V0V2luZG93
c1RpbWVab25lSUQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYWxfZ2V0V2luZG93c1RpbWVa
b25lSUQpCi0jZGVmaW5lIHVjYWxfaW5EYXlsaWdodFRpbWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVjYWxfaW5EYXlsaWdodFRpbWUpCi0jZGVmaW5lIHVjYWxfaXNTZXQgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVjYWxfaXNTZXQpCi0jZGVmaW5lIHVjYWxfaXNXZWVrZW5kIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1Y2FsX2lzV2Vla2VuZCkKLSNkZWZpbmUgdWNhbF9vcGVuIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2FsX29wZW4pCi0jZGVmaW5lIHVjYWxfb3BlbkNvdW50cnlU
aW1lWm9uZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYWxfb3BlbkNvdW50cnlUaW1lWm9u
ZXMpCi0jZGVmaW5lIHVjYWxfb3BlblRpbWVab25lSURFbnVtZXJhdGlvbiBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodWNhbF9vcGVuVGltZVpvbmVJREVudW1lcmF0aW9uKQotI2RlZmluZSB1Y2Fs
X29wZW5UaW1lWm9uZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYWxfb3BlblRpbWVab25l
cykKLSNkZWZpbmUgdWNhbF9yb2xsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2FsX3JvbGwp
Ci0jZGVmaW5lIHVjYWxfc2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2FsX3NldCkKLSNk
ZWZpbmUgdWNhbF9zZXRBdHRyaWJ1dGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYWxfc2V0
QXR0cmlidXRlKQotI2RlZmluZSB1Y2FsX3NldERhdGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVjYWxfc2V0RGF0ZSkKLSNkZWZpbmUgdWNhbF9zZXREYXRlVGltZSBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodWNhbF9zZXREYXRlVGltZSkKLSNkZWZpbmUgdWNhbF9zZXREZWZhdWx0VGltZVpv
bmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYWxfc2V0RGVmYXVsdFRpbWVab25lKQotI2Rl
ZmluZSB1Y2FsX3NldEdyZWdvcmlhbkNoYW5nZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNh
bF9zZXRHcmVnb3JpYW5DaGFuZ2UpCi0jZGVmaW5lIHVjYWxfc2V0TWlsbGlzIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1Y2FsX3NldE1pbGxpcykKLSNkZWZpbmUgdWNhbF9zZXRUaW1lWm9uZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhbF9zZXRUaW1lWm9uZSkKLSNkZWZpbmUgdWNhc2Vf
YWRkQ2FzZUNsb3N1cmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYXNlX2FkZENhc2VDbG9z
dXJlKQotI2RlZmluZSB1Y2FzZV9hZGRQcm9wZXJ0eVN0YXJ0cyBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWNhc2VfYWRkUHJvcGVydHlTdGFydHMpCi0jZGVmaW5lIHVjYXNlX2FkZFN0cmluZ0Nh
c2VDbG9zdXJlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2FzZV9hZGRTdHJpbmdDYXNlQ2xv
c3VyZSkKLSNkZWZpbmUgdWNhc2VfZm9sZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhc2Vf
Zm9sZCkKLSNkZWZpbmUgdWNhc2VfZ2V0Q2FzZUxvY2FsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWNhc2VfZ2V0Q2FzZUxvY2FsZSkKLSNkZWZpbmUgdWNhc2VfZ2V0U2luZ2xldG9uIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2FzZV9nZXRTaW5nbGV0b24pCi0jZGVmaW5lIHVjYXNlX2dl
dFR5cGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYXNlX2dldFR5cGUpCi0jZGVmaW5lIHVj
YXNlX2dldFR5cGVPcklnbm9yYWJsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhc2VfZ2V0
VHlwZU9ySWdub3JhYmxlKQotI2RlZmluZSB1Y2FzZV9oYXNCaW5hcnlQcm9wZXJ0eSBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWNhc2VfaGFzQmluYXJ5UHJvcGVydHkpCi0jZGVmaW5lIHVjYXNl
X2lzQ2FzZVNlbnNpdGl2ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhc2VfaXNDYXNlU2Vu
c2l0aXZlKQotI2RlZmluZSB1Y2FzZV9pc1NvZnREb3R0ZWQgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVjYXNlX2lzU29mdERvdHRlZCkKLSNkZWZpbmUgdWNhc2VfdG9GdWxsRm9sZGluZyBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhc2VfdG9GdWxsRm9sZGluZykKLSNkZWZpbmUgdWNhc2Vf
dG9GdWxsTG93ZXIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYXNlX3RvRnVsbExvd2VyKQot
I2RlZmluZSB1Y2FzZV90b0Z1bGxUaXRsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhc2Vf
dG9GdWxsVGl0bGUpCi0jZGVmaW5lIHVjYXNlX3RvRnVsbFVwcGVyIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1Y2FzZV90b0Z1bGxVcHBlcikKLSNkZWZpbmUgdWNhc2VfdG9sb3dlciBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWNhc2VfdG9sb3dlcikKLSNkZWZpbmUgdWNhc2VfdG90aXRsZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhc2VfdG90aXRsZSkKLSNkZWZpbmUgdWNhc2VfdG91
cHBlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhc2VfdG91cHBlcikKLSNkZWZpbmUgdWNh
c2VtYXBfY2xvc2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYXNlbWFwX2Nsb3NlKQotI2Rl
ZmluZSB1Y2FzZW1hcF9nZXRCcmVha0l0ZXJhdG9yIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
Y2FzZW1hcF9nZXRCcmVha0l0ZXJhdG9yKQotI2RlZmluZSB1Y2FzZW1hcF9nZXRMb2NhbGUgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYXNlbWFwX2dldExvY2FsZSkKLSNkZWZpbmUgdWNhc2Vt
YXBfZ2V0T3B0aW9ucyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhc2VtYXBfZ2V0T3B0aW9u
cykKLSNkZWZpbmUgdWNhc2VtYXBfaW50ZXJuYWxVVEY4VG9UaXRsZSBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodWNhc2VtYXBfaW50ZXJuYWxVVEY4VG9UaXRsZSkKLSNkZWZpbmUgdWNhc2VtYXBf
bWFwVVRGOCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhc2VtYXBfbWFwVVRGOCkKLSNkZWZp
bmUgdWNhc2VtYXBfb3BlbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhc2VtYXBfb3BlbikK
LSNkZWZpbmUgdWNhc2VtYXBfc2V0QnJlYWtJdGVyYXRvciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWNhc2VtYXBfc2V0QnJlYWtJdGVyYXRvcikKLSNkZWZpbmUgdWNhc2VtYXBfc2V0TG9jYWxl
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2FzZW1hcF9zZXRMb2NhbGUpCi0jZGVmaW5lIHVj
YXNlbWFwX3NldE9wdGlvbnMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYXNlbWFwX3NldE9w
dGlvbnMpCi0jZGVmaW5lIHVjYXNlbWFwX3RvVGl0bGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVjYXNlbWFwX3RvVGl0bGUpCi0jZGVmaW5lIHVjYXNlbWFwX3V0ZjhGb2xkQ2FzZSBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWNhc2VtYXBfdXRmOEZvbGRDYXNlKQotI2RlZmluZSB1Y2FzZW1h
cF91dGY4VG9Mb3dlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNhc2VtYXBfdXRmOFRvTG93
ZXIpCi0jZGVmaW5lIHVjYXNlbWFwX3V0ZjhUb1RpdGxlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1Y2FzZW1hcF91dGY4VG9UaXRsZSkKLSNkZWZpbmUgdWNhc2VtYXBfdXRmOFRvVXBwZXIgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjYXNlbWFwX3V0ZjhUb1VwcGVyKQotI2RlZmluZSB1Y2hh
cl9hZGRQcm9wZXJ0eVN0YXJ0cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNoYXJfYWRkUHJv
cGVydHlTdGFydHMpCi0jZGVmaW5lIHVjaGFyX3N3YXBOYW1lcyBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWNoYXJfc3dhcE5hbWVzKQotI2RlZmluZSB1Y2xuX2NsZWFudXBPbmUgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVjbG5fY2xlYW51cE9uZSkKLSNkZWZpbmUgdWNsbl9jb21tb25fcmVn
aXN0ZXJDbGVhbnVwIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2xuX2NvbW1vbl9yZWdpc3Rl
ckNsZWFudXApCi0jZGVmaW5lIHVjbG5faTE4bl9yZWdpc3RlckNsZWFudXAgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVjbG5faTE4bl9yZWdpc3RlckNsZWFudXApCi0jZGVmaW5lIHVjbG5faW9f
cmVnaXN0ZXJDbGVhbnVwIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y2xuX2lvX3JlZ2lzdGVy
Q2xlYW51cCkKLSNkZWZpbmUgdWNsbl9saWJfY2xlYW51cCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWNsbl9saWJfY2xlYW51cCkKLSNkZWZpbmUgdWNsbl9yZWdpc3RlckNsZWFudXAgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVjbG5fcmVnaXN0ZXJDbGVhbnVwKQotI2RlZmluZSB1Y252X01C
Q1NGcm9tVUNoYXIzMiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9NQkNTRnJvbVVDaGFy
MzIpCi0jZGVmaW5lIHVjbnZfTUJDU0Zyb21Vbmljb2RlV2l0aE9mZnNldHMgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVjbnZfTUJDU0Zyb21Vbmljb2RlV2l0aE9mZnNldHMpCi0jZGVmaW5lIHVj
bnZfTUJDU0dldEZpbHRlcmVkVW5pY29kZVNldEZvclVuaWNvZGUgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVjbnZfTUJDU0dldEZpbHRlcmVkVW5pY29kZVNldEZvclVuaWNvZGUpCi0jZGVmaW5l
IHVjbnZfTUJDU0dldFR5cGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfTUJDU0dldFR5
cGUpCi0jZGVmaW5lIHVjbnZfTUJDU0dldFVuaWNvZGVTZXRGb3JVbmljb2RlIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1Y252X01CQ1NHZXRVbmljb2RlU2V0Rm9yVW5pY29kZSkKLSNkZWZpbmUg
dWNudl9NQkNTSXNMZWFkQnl0ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9NQkNTSXNM
ZWFkQnl0ZSkKLSNkZWZpbmUgdWNudl9NQkNTU2ltcGxlR2V0TmV4dFVDaGFyIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1Y252X01CQ1NTaW1wbGVHZXROZXh0VUNoYXIpCi0jZGVmaW5lIHVjbnZf
TUJDU1RvVW5pY29kZVdpdGhPZmZzZXRzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X01C
Q1NUb1VuaWNvZGVXaXRoT2Zmc2V0cykKLSNkZWZpbmUgdWNudl9ibGRfY291bnRBdmFpbGFibGVD
b252ZXJ0ZXJzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2JsZF9jb3VudEF2YWlsYWJs
ZUNvbnZlcnRlcnMpCi0jZGVmaW5lIHVjbnZfYmxkX2dldEF2YWlsYWJsZUNvbnZlcnRlciBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9ibGRfZ2V0QXZhaWxhYmxlQ29udmVydGVyKQotI2Rl
ZmluZSB1Y252X2NhbkNyZWF0ZUNvbnZlcnRlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNu
dl9jYW5DcmVhdGVDb252ZXJ0ZXIpCi0jZGVmaW5lIHVjbnZfY2JGcm9tVVdyaXRlQnl0ZXMgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfY2JGcm9tVVdyaXRlQnl0ZXMpCi0jZGVmaW5lIHVj
bnZfY2JGcm9tVVdyaXRlU3ViIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2NiRnJvbVVX
cml0ZVN1YikKLSNkZWZpbmUgdWNudl9jYkZyb21VV3JpdGVVQ2hhcnMgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVjbnZfY2JGcm9tVVdyaXRlVUNoYXJzKQotI2RlZmluZSB1Y252X2NiVG9VV3Jp
dGVTdWIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfY2JUb1VXcml0ZVN1YikKLSNkZWZp
bmUgdWNudl9jYlRvVVdyaXRlVUNoYXJzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2Ni
VG9VV3JpdGVVQ2hhcnMpCi0jZGVmaW5lIHVjbnZfY2xvc2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVjbnZfY2xvc2UpCi0jZGVmaW5lIHVjbnZfY29tcGFyZU5hbWVzIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1Y252X2NvbXBhcmVOYW1lcykKLSNkZWZpbmUgdWNudl9jb252ZXJ0IFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2NvbnZlcnQpCi0jZGVmaW5lIHVjbnZfY29udmVydEV4
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2NvbnZlcnRFeCkKLSNkZWZpbmUgdWNudl9j
b3VudEFsaWFzZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfY291bnRBbGlhc2VzKQot
I2RlZmluZSB1Y252X2NvdW50QXZhaWxhYmxlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252
X2NvdW50QXZhaWxhYmxlKQotI2RlZmluZSB1Y252X2NvdW50U3RhbmRhcmRzIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1Y252X2NvdW50U3RhbmRhcmRzKQotI2RlZmluZSB1Y252X2NyZWF0ZUFs
Z29yaXRobWljQ29udmVydGVyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2NyZWF0ZUFs
Z29yaXRobWljQ29udmVydGVyKQotI2RlZmluZSB1Y252X2NyZWF0ZUNvbnZlcnRlciBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWNudl9jcmVhdGVDb252ZXJ0ZXIpCi0jZGVmaW5lIHVjbnZfY3Jl
YXRlQ29udmVydGVyRnJvbVBhY2thZ2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfY3Jl
YXRlQ29udmVydGVyRnJvbVBhY2thZ2UpCi0jZGVmaW5lIHVjbnZfY3JlYXRlQ29udmVydGVyRnJv
bVNoYXJlZERhdGEgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfY3JlYXRlQ29udmVydGVy
RnJvbVNoYXJlZERhdGEpCi0jZGVmaW5lIHVjbnZfZGV0ZWN0VW5pY29kZVNpZ25hdHVyZSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9kZXRlY3RVbmljb2RlU2lnbmF0dXJlKQotI2RlZmlu
ZSB1Y252X2V4dENvbnRpbnVlTWF0Y2hGcm9tVSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNu
dl9leHRDb250aW51ZU1hdGNoRnJvbVUpCi0jZGVmaW5lIHVjbnZfZXh0Q29udGludWVNYXRjaFRv
VSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9leHRDb250aW51ZU1hdGNoVG9VKQotI2Rl
ZmluZSB1Y252X2V4dEdldFVuaWNvZGVTZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZf
ZXh0R2V0VW5pY29kZVNldCkKLSNkZWZpbmUgdWNudl9leHRJbml0aWFsTWF0Y2hGcm9tVSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9leHRJbml0aWFsTWF0Y2hGcm9tVSkKLSNkZWZpbmUg
dWNudl9leHRJbml0aWFsTWF0Y2hUb1UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfZXh0
SW5pdGlhbE1hdGNoVG9VKQotI2RlZmluZSB1Y252X2V4dFNpbXBsZU1hdGNoRnJvbVUgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfZXh0U2ltcGxlTWF0Y2hGcm9tVSkKLSNkZWZpbmUgdWNu
dl9leHRTaW1wbGVNYXRjaFRvVSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9leHRTaW1w
bGVNYXRjaFRvVSkKLSNkZWZpbmUgdWNudl9maXhGaWxlU2VwYXJhdG9yIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1Y252X2ZpeEZpbGVTZXBhcmF0b3IpCi0jZGVmaW5lIHVjbnZfZmx1c2hDYWNo
ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9mbHVzaENhY2hlKQotI2RlZmluZSB1Y252
X2Zyb21BbGdvcml0aG1pYyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9mcm9tQWxnb3Jp
dGhtaWMpCi0jZGVmaW5lIHVjbnZfZnJvbVVDaGFycyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dWNudl9mcm9tVUNoYXJzKQotI2RlZmluZSB1Y252X2Zyb21VQ291bnRQZW5kaW5nIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1Y252X2Zyb21VQ291bnRQZW5kaW5nKQotI2RlZmluZSB1Y252X2Zy
b21VV3JpdGVCeXRlcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9mcm9tVVdyaXRlQnl0
ZXMpCi0jZGVmaW5lIHVjbnZfZnJvbVVuaWNvZGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVj
bnZfZnJvbVVuaWNvZGUpCi0jZGVmaW5lIHVjbnZfZnJvbVVuaWNvZGVfVVRGOCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodWNudl9mcm9tVW5pY29kZV9VVEY4KQotI2RlZmluZSB1Y252X2Zyb21V
bmljb2RlX1VURjhfT0ZGU0VUU19MT0dJQyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9m
cm9tVW5pY29kZV9VVEY4X09GRlNFVFNfTE9HSUMpCi0jZGVmaW5lIHVjbnZfZ2V0QWxpYXMgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfZ2V0QWxpYXMpCi0jZGVmaW5lIHVjbnZfZ2V0QWxp
YXNlcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9nZXRBbGlhc2VzKQotI2RlZmluZSB1
Y252X2dldEF2YWlsYWJsZU5hbWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfZ2V0QXZh
aWxhYmxlTmFtZSkKLSNkZWZpbmUgdWNudl9nZXRDQ1NJRCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWNudl9nZXRDQ1NJRCkKLSNkZWZpbmUgdWNudl9nZXRDYW5vbmljYWxOYW1lIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1Y252X2dldENhbm9uaWNhbE5hbWUpCi0jZGVmaW5lIHVjbnZfZ2V0
Q29tcGxldGVVbmljb2RlU2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2dldENvbXBs
ZXRlVW5pY29kZVNldCkKLSNkZWZpbmUgdWNudl9nZXREZWZhdWx0TmFtZSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodWNudl9nZXREZWZhdWx0TmFtZSkKLSNkZWZpbmUgdWNudl9nZXREaXNwbGF5
TmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9nZXREaXNwbGF5TmFtZSkKLSNkZWZp
bmUgdWNudl9nZXRGcm9tVUNhbGxCYWNrIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2dl
dEZyb21VQ2FsbEJhY2spCi0jZGVmaW5lIHVjbnZfZ2V0SW52YWxpZENoYXJzIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1Y252X2dldEludmFsaWRDaGFycykKLSNkZWZpbmUgdWNudl9nZXRJbnZh
bGlkVUNoYXJzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2dldEludmFsaWRVQ2hhcnMp
Ci0jZGVmaW5lIHVjbnZfZ2V0TWF4Q2hhclNpemUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVj
bnZfZ2V0TWF4Q2hhclNpemUpCi0jZGVmaW5lIHVjbnZfZ2V0TWluQ2hhclNpemUgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVjbnZfZ2V0TWluQ2hhclNpemUpCi0jZGVmaW5lIHVjbnZfZ2V0TmFt
ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9nZXROYW1lKQotI2RlZmluZSB1Y252X2dl
dE5leHRVQ2hhciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9nZXROZXh0VUNoYXIpCi0j
ZGVmaW5lIHVjbnZfZ2V0Tm9uU3Vycm9nYXRlVW5pY29kZVNldCBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWNudl9nZXROb25TdXJyb2dhdGVVbmljb2RlU2V0KQotI2RlZmluZSB1Y252X2dldFBs
YXRmb3JtIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2dldFBsYXRmb3JtKQotI2RlZmlu
ZSB1Y252X2dldFN0YW5kYXJkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2dldFN0YW5k
YXJkKQotI2RlZmluZSB1Y252X2dldFN0YW5kYXJkTmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWNudl9nZXRTdGFuZGFyZE5hbWUpCi0jZGVmaW5lIHVjbnZfZ2V0U3RhcnRlcnMgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfZ2V0U3RhcnRlcnMpCi0jZGVmaW5lIHVjbnZfZ2V0U3Vi
c3RDaGFycyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9nZXRTdWJzdENoYXJzKQotI2Rl
ZmluZSB1Y252X2dldFRvVUNhbGxCYWNrIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2dl
dFRvVUNhbGxCYWNrKQotI2RlZmluZSB1Y252X2dldFR5cGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVjbnZfZ2V0VHlwZSkKLSNkZWZpbmUgdWNudl9nZXRVbmljb2RlU2V0IFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1Y252X2dldFVuaWNvZGVTZXQpCi0jZGVmaW5lIHVjbnZfaW5jcmVtZW50
UmVmQ291bnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfaW5jcmVtZW50UmVmQ291bnQp
Ci0jZGVmaW5lIHVjbnZfaW9fY291bnRLbm93bkNvbnZlcnRlcnMgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVjbnZfaW9fY291bnRLbm93bkNvbnZlcnRlcnMpCi0jZGVmaW5lIHVjbnZfaW9fZ2V0
Q29udmVydGVyTmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9pb19nZXRDb252ZXJ0
ZXJOYW1lKQotI2RlZmluZSB1Y252X2lvX3N0cmlwQVNDSUlGb3JDb21wYXJlIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1Y252X2lvX3N0cmlwQVNDSUlGb3JDb21wYXJlKQotI2RlZmluZSB1Y252
X2lvX3N0cmlwRUJDRElDRm9yQ29tcGFyZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9p
b19zdHJpcEVCQ0RJQ0ZvckNvbXBhcmUpCi0jZGVmaW5lIHVjbnZfaXNBbWJpZ3VvdXMgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfaXNBbWJpZ3VvdXMpCi0jZGVmaW5lIHVjbnZfaXNGaXhl
ZFdpZHRoIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2lzRml4ZWRXaWR0aCkKLSNkZWZp
bmUgdWNudl9sb2FkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X2xvYWQpCi0jZGVmaW5l
IHVjbnZfbG9hZFNoYXJlZERhdGEgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfbG9hZFNo
YXJlZERhdGEpCi0jZGVmaW5lIHVjbnZfb3BlbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNu
dl9vcGVuKQotI2RlZmluZSB1Y252X29wZW5BbGxOYW1lcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWNudl9vcGVuQWxsTmFtZXMpCi0jZGVmaW5lIHVjbnZfb3BlbkNDU0lEIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1Y252X29wZW5DQ1NJRCkKLSNkZWZpbmUgdWNudl9vcGVuUGFja2FnZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9vcGVuUGFja2FnZSkKLSNkZWZpbmUgdWNudl9v
cGVuU3RhbmRhcmROYW1lcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9vcGVuU3RhbmRh
cmROYW1lcykKLSNkZWZpbmUgdWNudl9vcGVuVSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNu
dl9vcGVuVSkKLSNkZWZpbmUgdWNudl9yZXNldCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNu
dl9yZXNldCkKLSNkZWZpbmUgdWNudl9yZXNldEZyb21Vbmljb2RlIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1Y252X3Jlc2V0RnJvbVVuaWNvZGUpCi0jZGVmaW5lIHVjbnZfcmVzZXRUb1VuaWNv
ZGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfcmVzZXRUb1VuaWNvZGUpCi0jZGVmaW5l
IHVjbnZfc2FmZUNsb25lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X3NhZmVDbG9uZSkK
LSNkZWZpbmUgdWNudl9zZXREZWZhdWx0TmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNu
dl9zZXREZWZhdWx0TmFtZSkKLSNkZWZpbmUgdWNudl9zZXRGYWxsYmFjayBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodWNudl9zZXRGYWxsYmFjaykKLSNkZWZpbmUgdWNudl9zZXRGcm9tVUNhbGxC
YWNrIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X3NldEZyb21VQ2FsbEJhY2spCi0jZGVm
aW5lIHVjbnZfc2V0U3Vic3RDaGFycyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9zZXRT
dWJzdENoYXJzKQotI2RlZmluZSB1Y252X3NldFN1YnN0U3RyaW5nIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1Y252X3NldFN1YnN0U3RyaW5nKQotI2RlZmluZSB1Y252X3NldFRvVUNhbGxCYWNr
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X3NldFRvVUNhbGxCYWNrKQotI2RlZmluZSB1
Y252X3N3YXAgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfc3dhcCkKLSNkZWZpbmUgdWNu
dl9zd2FwQWxpYXNlcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl9zd2FwQWxpYXNlcykK
LSNkZWZpbmUgdWNudl90b0FsZ29yaXRobWljIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252
X3RvQWxnb3JpdGhtaWMpCi0jZGVmaW5lIHVjbnZfdG9VQ2hhcnMgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVjbnZfdG9VQ2hhcnMpCi0jZGVmaW5lIHVjbnZfdG9VQ291bnRQZW5kaW5nIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252X3RvVUNvdW50UGVuZGluZykKLSNkZWZpbmUgdWNudl90
b1VXcml0ZUNvZGVQb2ludCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl90b1VXcml0ZUNv
ZGVQb2ludCkKLSNkZWZpbmUgdWNudl90b1VXcml0ZVVDaGFycyBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWNudl90b1VXcml0ZVVDaGFycykKLSNkZWZpbmUgdWNudl90b1VuaWNvZGUgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfdG9Vbmljb2RlKQotI2RlZmluZSB1Y252X3VubG9hZCBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudl91bmxvYWQpCi0jZGVmaW5lIHVjbnZfdW5sb2Fk
U2hhcmVkRGF0YUlmUmVhZHkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZfdW5sb2FkU2hh
cmVkRGF0YUlmUmVhZHkpCi0jZGVmaW5lIHVjbnZfdXNlc0ZhbGxiYWNrIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1Y252X3VzZXNGYWxsYmFjaykKLSNkZWZpbmUgdWNudnNlbF9jbG9zZSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWNudnNlbF9jbG9zZSkKLSNkZWZpbmUgdWNudnNlbF9vcGVu
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252c2VsX29wZW4pCi0jZGVmaW5lIHVjbnZzZWxf
b3BlbkZyb21TZXJpYWxpemVkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y252c2VsX29wZW5G
cm9tU2VyaWFsaXplZCkKLSNkZWZpbmUgdWNudnNlbF9zZWxlY3RGb3JTdHJpbmcgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVjbnZzZWxfc2VsZWN0Rm9yU3RyaW5nKQotI2RlZmluZSB1Y252c2Vs
X3NlbGVjdEZvclVURjggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjbnZzZWxfc2VsZWN0Rm9y
VVRGOCkKLSNkZWZpbmUgdWNudnNlbF9zZXJpYWxpemUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVjbnZzZWxfc2VyaWFsaXplKQotI2RlZmluZSB1Y29sX2Nsb25lQmluYXJ5IFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1Y29sX2Nsb25lQmluYXJ5KQotI2RlZmluZSB1Y29sX2Nsb3NlIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX2Nsb3NlKQotI2RlZmluZSB1Y29sX2Nsb3NlRWxlbWVu
dHMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjb2xfY2xvc2VFbGVtZW50cykKLSNkZWZpbmUg
dWNvbF9jb3VudEF2YWlsYWJsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9jb3VudEF2
YWlsYWJsZSkKLSNkZWZpbmUgdWNvbF9lcXVhbCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNv
bF9lcXVhbCkKLSNkZWZpbmUgdWNvbF9lcXVhbHMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVj
b2xfZXF1YWxzKQotI2RlZmluZSB1Y29sX2dldEF0dHJpYnV0ZSBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWNvbF9nZXRBdHRyaWJ1dGUpCi0jZGVmaW5lIHVjb2xfZ2V0QXZhaWxhYmxlIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX2dldEF2YWlsYWJsZSkKLSNkZWZpbmUgdWNvbF9nZXRC
b3VuZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9nZXRCb3VuZCkKLSNkZWZpbmUgdWNv
bF9nZXRDb250cmFjdGlvbnMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjb2xfZ2V0Q29udHJh
Y3Rpb25zKQotI2RlZmluZSB1Y29sX2dldENvbnRyYWN0aW9uc0FuZEV4cGFuc2lvbnMgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVjb2xfZ2V0Q29udHJhY3Rpb25zQW5kRXhwYW5zaW9ucykKLSNk
ZWZpbmUgdWNvbF9nZXREaXNwbGF5TmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9n
ZXREaXNwbGF5TmFtZSkKLSNkZWZpbmUgdWNvbF9nZXRFcXVpdmFsZW50UmVvcmRlckNvZGVzIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX2dldEVxdWl2YWxlbnRSZW9yZGVyQ29kZXMpCi0j
ZGVmaW5lIHVjb2xfZ2V0RnVuY3Rpb25hbEVxdWl2YWxlbnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVjb2xfZ2V0RnVuY3Rpb25hbEVxdWl2YWxlbnQpCi0jZGVmaW5lIHVjb2xfZ2V0S2V5d29y
ZFZhbHVlcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9nZXRLZXl3b3JkVmFsdWVzKQot
I2RlZmluZSB1Y29sX2dldEtleXdvcmRWYWx1ZXNGb3JMb2NhbGUgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVjb2xfZ2V0S2V5d29yZFZhbHVlc0ZvckxvY2FsZSkKLSNkZWZpbmUgdWNvbF9nZXRL
ZXl3b3JkcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9nZXRLZXl3b3JkcykKLSNkZWZp
bmUgdWNvbF9nZXRMb2NhbGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjb2xfZ2V0TG9jYWxl
KQotI2RlZmluZSB1Y29sX2dldExvY2FsZUJ5VHlwZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dWNvbF9nZXRMb2NhbGVCeVR5cGUpCi0jZGVmaW5lIHVjb2xfZ2V0TWF4RXhwYW5zaW9uIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX2dldE1heEV4cGFuc2lvbikKLSNkZWZpbmUgdWNvbF9n
ZXRNYXhWYXJpYWJsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9nZXRNYXhWYXJpYWJs
ZSkKLSNkZWZpbmUgdWNvbF9nZXRPZmZzZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjb2xf
Z2V0T2Zmc2V0KQotI2RlZmluZSB1Y29sX2dldFJlb3JkZXJDb2RlcyBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodWNvbF9nZXRSZW9yZGVyQ29kZXMpCi0jZGVmaW5lIHVjb2xfZ2V0UnVsZXMgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjb2xfZ2V0UnVsZXMpCi0jZGVmaW5lIHVjb2xfZ2V0UnVs
ZXNFeCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9nZXRSdWxlc0V4KQotI2RlZmluZSB1
Y29sX2dldFNob3J0RGVmaW5pdGlvblN0cmluZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNv
bF9nZXRTaG9ydERlZmluaXRpb25TdHJpbmcpCi0jZGVmaW5lIHVjb2xfZ2V0U29ydEtleSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9nZXRTb3J0S2V5KQotI2RlZmluZSB1Y29sX2dldFN0
cmVuZ3RoIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX2dldFN0cmVuZ3RoKQotI2RlZmlu
ZSB1Y29sX2dldFRhaWxvcmVkU2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX2dldFRh
aWxvcmVkU2V0KQotI2RlZmluZSB1Y29sX2dldFVDQVZlcnNpb24gVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVjb2xfZ2V0VUNBVmVyc2lvbikKLSNkZWZpbmUgdWNvbF9nZXRVbnNhZmVTZXQgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjb2xfZ2V0VW5zYWZlU2V0KQotI2RlZmluZSB1Y29sX2dl
dFZhcmlhYmxlVG9wIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX2dldFZhcmlhYmxlVG9w
KQotI2RlZmluZSB1Y29sX2dldFZlcnNpb24gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjb2xf
Z2V0VmVyc2lvbikKLSNkZWZpbmUgdWNvbF9ncmVhdGVyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1Y29sX2dyZWF0ZXIpCi0jZGVmaW5lIHVjb2xfZ3JlYXRlck9yRXF1YWwgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVjb2xfZ3JlYXRlck9yRXF1YWwpCi0jZGVmaW5lIHVjb2xfa2V5SGFzaENv
ZGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjb2xfa2V5SGFzaENvZGUpCi0jZGVmaW5lIHVj
b2xfbG9va3NMaWtlQ29sbGF0aW9uQmluYXJ5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29s
X2xvb2tzTGlrZUNvbGxhdGlvbkJpbmFyeSkKLSNkZWZpbmUgdWNvbF9tZXJnZVNvcnRrZXlzIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX21lcmdlU29ydGtleXMpCi0jZGVmaW5lIHVjb2xf
bmV4dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9uZXh0KQotI2RlZmluZSB1Y29sX25l
eHRTb3J0S2V5UGFydCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9uZXh0U29ydEtleVBh
cnQpCi0jZGVmaW5lIHVjb2xfbm9ybWFsaXplU2hvcnREZWZpbml0aW9uU3RyaW5nIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1Y29sX25vcm1hbGl6ZVNob3J0RGVmaW5pdGlvblN0cmluZykKLSNk
ZWZpbmUgdWNvbF9vcGVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX29wZW4pCi0jZGVm
aW5lIHVjb2xfb3BlbkF2YWlsYWJsZUxvY2FsZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVj
b2xfb3BlbkF2YWlsYWJsZUxvY2FsZXMpCi0jZGVmaW5lIHVjb2xfb3BlbkJpbmFyeSBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWNvbF9vcGVuQmluYXJ5KQotI2RlZmluZSB1Y29sX29wZW5FbGVt
ZW50cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9vcGVuRWxlbWVudHMpCi0jZGVmaW5l
IHVjb2xfb3BlbkZyb21TaG9ydFN0cmluZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9v
cGVuRnJvbVNob3J0U3RyaW5nKQotI2RlZmluZSB1Y29sX29wZW5SdWxlcyBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodWNvbF9vcGVuUnVsZXMpCi0jZGVmaW5lIHVjb2xfcHJlcGFyZVNob3J0U3Ry
aW5nT3BlbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9wcmVwYXJlU2hvcnRTdHJpbmdP
cGVuKQotI2RlZmluZSB1Y29sX3ByZXZpb3VzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29s
X3ByZXZpb3VzKQotI2RlZmluZSB1Y29sX3ByaW1hcnlPcmRlciBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWNvbF9wcmltYXJ5T3JkZXIpCi0jZGVmaW5lIHVjb2xfcmVzZXQgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVjb2xfcmVzZXQpCi0jZGVmaW5lIHVjb2xfcmVzdG9yZVZhcmlhYmxlVG9w
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX3Jlc3RvcmVWYXJpYWJsZVRvcCkKLSNkZWZp
bmUgdWNvbF9zYWZlQ2xvbmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjb2xfc2FmZUNsb25l
KQotI2RlZmluZSB1Y29sX3NlY29uZGFyeU9yZGVyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
Y29sX3NlY29uZGFyeU9yZGVyKQotI2RlZmluZSB1Y29sX3NldEF0dHJpYnV0ZSBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodWNvbF9zZXRBdHRyaWJ1dGUpCi0jZGVmaW5lIHVjb2xfc2V0TWF4VmFy
aWFibGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjb2xfc2V0TWF4VmFyaWFibGUpCi0jZGVm
aW5lIHVjb2xfc2V0T2Zmc2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX3NldE9mZnNl
dCkKLSNkZWZpbmUgdWNvbF9zZXRSZW9yZGVyQ29kZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVjb2xfc2V0UmVvcmRlckNvZGVzKQotI2RlZmluZSB1Y29sX3NldFN0cmVuZ3RoIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1Y29sX3NldFN0cmVuZ3RoKQotI2RlZmluZSB1Y29sX3NldFRleHQg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjb2xfc2V0VGV4dCkKLSNkZWZpbmUgdWNvbF9zZXRW
YXJpYWJsZVRvcCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNvbF9zZXRWYXJpYWJsZVRvcCkK
LSNkZWZpbmUgdWNvbF9zdHJjb2xsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX3N0cmNv
bGwpCi0jZGVmaW5lIHVjb2xfc3RyY29sbEl0ZXIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVj
b2xfc3RyY29sbEl0ZXIpCi0jZGVmaW5lIHVjb2xfc3RyY29sbFVURjggVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVjb2xfc3RyY29sbFVURjgpCi0jZGVmaW5lIHVjb2xfc3dhcCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodWNvbF9zd2FwKQotI2RlZmluZSB1Y29sX3N3YXBJbnZlcnNlVUNBIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y29sX3N3YXBJbnZlcnNlVUNBKQotI2RlZmluZSB1Y29s
X3RlcnRpYXJ5T3JkZXIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjb2xfdGVydGlhcnlPcmRl
cikKLSNkZWZpbmUgdWNzZGV0X2Nsb3NlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y3NkZXRf
Y2xvc2UpCi0jZGVmaW5lIHVjc2RldF9kZXRlY3QgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVj
c2RldF9kZXRlY3QpCi0jZGVmaW5lIHVjc2RldF9kZXRlY3RBbGwgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVjc2RldF9kZXRlY3RBbGwpCi0jZGVmaW5lIHVjc2RldF9lbmFibGVJbnB1dEZpbHRl
ciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNzZGV0X2VuYWJsZUlucHV0RmlsdGVyKQotI2Rl
ZmluZSB1Y3NkZXRfZ2V0QWxsRGV0ZWN0YWJsZUNoYXJzZXRzIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1Y3NkZXRfZ2V0QWxsRGV0ZWN0YWJsZUNoYXJzZXRzKQotI2RlZmluZSB1Y3NkZXRfZ2V0
Q29uZmlkZW5jZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNzZGV0X2dldENvbmZpZGVuY2Up
Ci0jZGVmaW5lIHVjc2RldF9nZXREZXRlY3RhYmxlQ2hhcnNldHMgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVjc2RldF9nZXREZXRlY3RhYmxlQ2hhcnNldHMpCi0jZGVmaW5lIHVjc2RldF9nZXRM
YW5ndWFnZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNzZGV0X2dldExhbmd1YWdlKQotI2Rl
ZmluZSB1Y3NkZXRfZ2V0TmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNzZGV0X2dldE5h
bWUpCi0jZGVmaW5lIHVjc2RldF9nZXRVQ2hhcnMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVj
c2RldF9nZXRVQ2hhcnMpCi0jZGVmaW5lIHVjc2RldF9pc0lucHV0RmlsdGVyRW5hYmxlZCBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWNzZGV0X2lzSW5wdXRGaWx0ZXJFbmFibGVkKQotI2RlZmlu
ZSB1Y3NkZXRfb3BlbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWNzZGV0X29wZW4pCi0jZGVm
aW5lIHVjc2RldF9zZXREZWNsYXJlZEVuY29kaW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
Y3NkZXRfc2V0RGVjbGFyZWRFbmNvZGluZykKLSNkZWZpbmUgdWNzZGV0X3NldERldGVjdGFibGVD
aGFyc2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y3NkZXRfc2V0RGV0ZWN0YWJsZUNoYXJz
ZXQpCi0jZGVmaW5lIHVjc2RldF9zZXRUZXh0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y3Nk
ZXRfc2V0VGV4dCkKLSNkZWZpbmUgdWN1cnJfY291bnRDdXJyZW5jaWVzIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1Y3Vycl9jb3VudEN1cnJlbmNpZXMpCi0jZGVmaW5lIHVjdXJyX2ZvckxvY2Fs
ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWN1cnJfZm9yTG9jYWxlKQotI2RlZmluZSB1Y3Vy
cl9mb3JMb2NhbGVBbmREYXRlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y3Vycl9mb3JMb2Nh
bGVBbmREYXRlKQotI2RlZmluZSB1Y3Vycl9nZXREZWZhdWx0RnJhY3Rpb25EaWdpdHMgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVjdXJyX2dldERlZmF1bHRGcmFjdGlvbkRpZ2l0cykKLSNkZWZp
bmUgdWN1cnJfZ2V0RGVmYXVsdEZyYWN0aW9uRGlnaXRzRm9yVXNhZ2UgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVjdXJyX2dldERlZmF1bHRGcmFjdGlvbkRpZ2l0c0ZvclVzYWdlKQotI2RlZmlu
ZSB1Y3Vycl9nZXRLZXl3b3JkVmFsdWVzRm9yTG9jYWxlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1Y3Vycl9nZXRLZXl3b3JkVmFsdWVzRm9yTG9jYWxlKQotI2RlZmluZSB1Y3Vycl9nZXROYW1l
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y3Vycl9nZXROYW1lKQotI2RlZmluZSB1Y3Vycl9n
ZXROdW1lcmljQ29kZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWN1cnJfZ2V0TnVtZXJpY0Nv
ZGUpCi0jZGVmaW5lIHVjdXJyX2dldFBsdXJhbE5hbWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVjdXJyX2dldFBsdXJhbE5hbWUpCi0jZGVmaW5lIHVjdXJyX2dldFJvdW5kaW5nSW5jcmVtZW50
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Y3Vycl9nZXRSb3VuZGluZ0luY3JlbWVudCkKLSNk
ZWZpbmUgdWN1cnJfZ2V0Um91bmRpbmdJbmNyZW1lbnRGb3JVc2FnZSBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodWN1cnJfZ2V0Um91bmRpbmdJbmNyZW1lbnRGb3JVc2FnZSkKLSNkZWZpbmUgdWN1
cnJfaXNBdmFpbGFibGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVjdXJyX2lzQXZhaWxhYmxl
KQotI2RlZmluZSB1Y3Vycl9vcGVuSVNPQ3VycmVuY2llcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWN1cnJfb3BlbklTT0N1cnJlbmNpZXMpCi0jZGVmaW5lIHVjdXJyX3JlZ2lzdGVyIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1Y3Vycl9yZWdpc3RlcikKLSNkZWZpbmUgdWN1cnJfdW5yZWdp
c3RlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWN1cnJfdW5yZWdpc3RlcikKLSNkZWZpbmUg
dWRhdF9hZG9wdE51bWJlckZvcm1hdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdF9hZG9w
dE51bWJlckZvcm1hdCkKLSNkZWZpbmUgdWRhdF9hZG9wdE51bWJlckZvcm1hdEZvckZpZWxkcyBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdF9hZG9wdE51bWJlckZvcm1hdEZvckZpZWxkcykK
LSNkZWZpbmUgdWRhdF9hcHBseVBhdHRlcm4gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkYXRf
YXBwbHlQYXR0ZXJuKQotI2RlZmluZSB1ZGF0X2FwcGx5UGF0dGVyblJlbGF0aXZlIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1ZGF0X2FwcGx5UGF0dGVyblJlbGF0aXZlKQotI2RlZmluZSB1ZGF0
X2Nsb25lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0X2Nsb25lKQotI2RlZmluZSB1ZGF0
X2Nsb3NlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0X2Nsb3NlKQotI2RlZmluZSB1ZGF0
X2NvdW50QXZhaWxhYmxlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0X2NvdW50QXZhaWxh
YmxlKQotI2RlZmluZSB1ZGF0X2NvdW50U3ltYm9scyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dWRhdF9jb3VudFN5bWJvbHMpCi0jZGVmaW5lIHVkYXRfZm9ybWF0IFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1ZGF0X2Zvcm1hdCkKLSNkZWZpbmUgdWRhdF9mb3JtYXRDYWxlbmRhciBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWRhdF9mb3JtYXRDYWxlbmRhcikKLSNkZWZpbmUgdWRhdF9mb3Jt
YXRDYWxlbmRhckZvckZpZWxkcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdF9mb3JtYXRD
YWxlbmRhckZvckZpZWxkcykKLSNkZWZpbmUgdWRhdF9mb3JtYXRGb3JGaWVsZHMgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVkYXRfZm9ybWF0Rm9yRmllbGRzKQotI2RlZmluZSB1ZGF0X2dldDJE
aWdpdFllYXJTdGFydCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdF9nZXQyRGlnaXRZZWFy
U3RhcnQpCi0jZGVmaW5lIHVkYXRfZ2V0QXZhaWxhYmxlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1ZGF0X2dldEF2YWlsYWJsZSkKLSNkZWZpbmUgdWRhdF9nZXRCb29sZWFuQXR0cmlidXRlIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0X2dldEJvb2xlYW5BdHRyaWJ1dGUpCi0jZGVmaW5l
IHVkYXRfZ2V0Q2FsZW5kYXIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkYXRfZ2V0Q2FsZW5k
YXIpCi0jZGVmaW5lIHVkYXRfZ2V0Q29udGV4dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRh
dF9nZXRDb250ZXh0KQotI2RlZmluZSB1ZGF0X2dldExvY2FsZUJ5VHlwZSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodWRhdF9nZXRMb2NhbGVCeVR5cGUpCi0jZGVmaW5lIHVkYXRfZ2V0TnVtYmVy
Rm9ybWF0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0X2dldE51bWJlckZvcm1hdCkKLSNk
ZWZpbmUgdWRhdF9nZXROdW1iZXJGb3JtYXRGb3JGaWVsZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWRhdF9nZXROdW1iZXJGb3JtYXRGb3JGaWVsZCkKLSNkZWZpbmUgdWRhdF9nZXRTeW1ib2xz
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0X2dldFN5bWJvbHMpCi0jZGVmaW5lIHVkYXRf
aXNMZW5pZW50IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0X2lzTGVuaWVudCkKLSNkZWZp
bmUgdWRhdF9vcGVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0X29wZW4pCi0jZGVmaW5l
IHVkYXRfcGFyc2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkYXRfcGFyc2UpCi0jZGVmaW5l
IHVkYXRfcGFyc2VDYWxlbmRhciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdF9wYXJzZUNh
bGVuZGFyKQotI2RlZmluZSB1ZGF0X3JlZ2lzdGVyT3BlbmVyIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1ZGF0X3JlZ2lzdGVyT3BlbmVyKQotI2RlZmluZSB1ZGF0X3NldDJEaWdpdFllYXJTdGFy
dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdF9zZXQyRGlnaXRZZWFyU3RhcnQpCi0jZGVm
aW5lIHVkYXRfc2V0Qm9vbGVhbkF0dHJpYnV0ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRh
dF9zZXRCb29sZWFuQXR0cmlidXRlKQotI2RlZmluZSB1ZGF0X3NldENhbGVuZGFyIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1ZGF0X3NldENhbGVuZGFyKQotI2RlZmluZSB1ZGF0X3NldENvbnRl
eHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkYXRfc2V0Q29udGV4dCkKLSNkZWZpbmUgdWRh
dF9zZXRMZW5pZW50IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0X3NldExlbmllbnQpCi0j
ZGVmaW5lIHVkYXRfc2V0TnVtYmVyRm9ybWF0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0
X3NldE51bWJlckZvcm1hdCkKLSNkZWZpbmUgdWRhdF9zZXRTeW1ib2xzIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1ZGF0X3NldFN5bWJvbHMpCi0jZGVmaW5lIHVkYXRfdG9DYWxlbmRhckRhdGVG
aWVsZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdF90b0NhbGVuZGFyRGF0ZUZpZWxkKQot
I2RlZmluZSB1ZGF0X3RvUGF0dGVybiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdF90b1Bh
dHRlcm4pCi0jZGVmaW5lIHVkYXRfdG9QYXR0ZXJuUmVsYXRpdmVEYXRlIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1ZGF0X3RvUGF0dGVyblJlbGF0aXZlRGF0ZSkKLSNkZWZpbmUgdWRhdF90b1Bh
dHRlcm5SZWxhdGl2ZVRpbWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkYXRfdG9QYXR0ZXJu
UmVsYXRpdmVUaW1lKQotI2RlZmluZSB1ZGF0X3VucmVnaXN0ZXJPcGVuZXIgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVkYXRfdW5yZWdpc3Rlck9wZW5lcikKLSNkZWZpbmUgdWRhdGFfY2hlY2tD
b21tb25EYXRhIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0YV9jaGVja0NvbW1vbkRhdGEp
Ci0jZGVmaW5lIHVkYXRhX2Nsb3NlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0YV9jbG9z
ZSkKLSNkZWZpbmUgdWRhdGFfY2xvc2VTd2FwcGVyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
ZGF0YV9jbG9zZVN3YXBwZXIpCi0jZGVmaW5lIHVkYXRhX2dldEhlYWRlclNpemUgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVkYXRhX2dldEhlYWRlclNpemUpCi0jZGVmaW5lIHVkYXRhX2dldElu
Zm8gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkYXRhX2dldEluZm8pCi0jZGVmaW5lIHVkYXRh
X2dldEluZm9TaXplIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0YV9nZXRJbmZvU2l6ZSkK
LSNkZWZpbmUgdWRhdGFfZ2V0TGVuZ3RoIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0YV9n
ZXRMZW5ndGgpCi0jZGVmaW5lIHVkYXRhX2dldE1lbW9yeSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWRhdGFfZ2V0TWVtb3J5KQotI2RlZmluZSB1ZGF0YV9nZXRSYXdNZW1vcnkgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVkYXRhX2dldFJhd01lbW9yeSkKLSNkZWZpbmUgdWRhdGFfb3BlbiBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdGFfb3BlbikKLSNkZWZpbmUgdWRhdGFfb3BlbkNo
b2ljZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdGFfb3BlbkNob2ljZSkKLSNkZWZpbmUg
dWRhdGFfb3BlblN3YXBwZXIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkYXRhX29wZW5Td2Fw
cGVyKQotI2RlZmluZSB1ZGF0YV9vcGVuU3dhcHBlckZvcklucHV0RGF0YSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodWRhdGFfb3BlblN3YXBwZXJGb3JJbnB1dERhdGEpCi0jZGVmaW5lIHVkYXRh
X3ByaW50RXJyb3IgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkYXRhX3ByaW50RXJyb3IpCi0j
ZGVmaW5lIHVkYXRhX3JlYWRJbnQxNiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdGFfcmVh
ZEludDE2KQotI2RlZmluZSB1ZGF0YV9yZWFkSW50MzIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVkYXRhX3JlYWRJbnQzMikKLSNkZWZpbmUgdWRhdGFfc2V0QXBwRGF0YSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodWRhdGFfc2V0QXBwRGF0YSkKLSNkZWZpbmUgdWRhdGFfc2V0Q29tbW9uRGF0
YSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdGFfc2V0Q29tbW9uRGF0YSkKLSNkZWZpbmUg
dWRhdGFfc2V0RmlsZUFjY2VzcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdGFfc2V0Rmls
ZUFjY2VzcykKLSNkZWZpbmUgdWRhdGFfc3dhcERhdGFIZWFkZXIgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVkYXRhX3N3YXBEYXRhSGVhZGVyKQotI2RlZmluZSB1ZGF0YV9zd2FwSW52U3RyaW5n
QmxvY2sgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkYXRhX3N3YXBJbnZTdHJpbmdCbG9jaykK
LSNkZWZpbmUgdWRhdHBnX2FkZFBhdHRlcm4gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkYXRw
Z19hZGRQYXR0ZXJuKQotI2RlZmluZSB1ZGF0cGdfY2xvbmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVkYXRwZ19jbG9uZSkKLSNkZWZpbmUgdWRhdHBnX2Nsb3NlIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1ZGF0cGdfY2xvc2UpCi0jZGVmaW5lIHVkYXRwZ19nZXRBcHBlbmRJdGVtRm9ybWF0
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0cGdfZ2V0QXBwZW5kSXRlbUZvcm1hdCkKLSNk
ZWZpbmUgdWRhdHBnX2dldEFwcGVuZEl0ZW1OYW1lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
ZGF0cGdfZ2V0QXBwZW5kSXRlbU5hbWUpCi0jZGVmaW5lIHVkYXRwZ19nZXRCYXNlU2tlbGV0b24g
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkYXRwZ19nZXRCYXNlU2tlbGV0b24pCi0jZGVmaW5l
IHVkYXRwZ19nZXRCZXN0UGF0dGVybiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdHBnX2dl
dEJlc3RQYXR0ZXJuKQotI2RlZmluZSB1ZGF0cGdfZ2V0QmVzdFBhdHRlcm5XaXRoT3B0aW9ucyBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdHBnX2dldEJlc3RQYXR0ZXJuV2l0aE9wdGlvbnMp
Ci0jZGVmaW5lIHVkYXRwZ19nZXREYXRlVGltZUZvcm1hdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodWRhdHBnX2dldERhdGVUaW1lRm9ybWF0KQotI2RlZmluZSB1ZGF0cGdfZ2V0RGVjaW1hbCBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdHBnX2dldERlY2ltYWwpCi0jZGVmaW5lIHVkYXRw
Z19nZXRQYXR0ZXJuRm9yU2tlbGV0b24gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkYXRwZ19n
ZXRQYXR0ZXJuRm9yU2tlbGV0b24pCi0jZGVmaW5lIHVkYXRwZ19nZXRTa2VsZXRvbiBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWRhdHBnX2dldFNrZWxldG9uKQotI2RlZmluZSB1ZGF0cGdfb3Bl
biBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdHBnX29wZW4pCi0jZGVmaW5lIHVkYXRwZ19v
cGVuQmFzZVNrZWxldG9ucyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdHBnX29wZW5CYXNl
U2tlbGV0b25zKQotI2RlZmluZSB1ZGF0cGdfb3BlbkVtcHR5IFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1ZGF0cGdfb3BlbkVtcHR5KQotI2RlZmluZSB1ZGF0cGdfb3BlblNrZWxldG9ucyBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdHBnX29wZW5Ta2VsZXRvbnMpCi0jZGVmaW5lIHVkYXRw
Z19yZXBsYWNlRmllbGRUeXBlcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdHBnX3JlcGxh
Y2VGaWVsZFR5cGVzKQotI2RlZmluZSB1ZGF0cGdfcmVwbGFjZUZpZWxkVHlwZXNXaXRoT3B0aW9u
cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdHBnX3JlcGxhY2VGaWVsZFR5cGVzV2l0aE9w
dGlvbnMpCi0jZGVmaW5lIHVkYXRwZ19zZXRBcHBlbmRJdGVtRm9ybWF0IFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1ZGF0cGdfc2V0QXBwZW5kSXRlbUZvcm1hdCkKLSNkZWZpbmUgdWRhdHBnX3Nl
dEFwcGVuZEl0ZW1OYW1lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZGF0cGdfc2V0QXBwZW5k
SXRlbU5hbWUpCi0jZGVmaW5lIHVkYXRwZ19zZXREYXRlVGltZUZvcm1hdCBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodWRhdHBnX3NldERhdGVUaW1lRm9ybWF0KQotI2RlZmluZSB1ZGF0cGdfc2V0
RGVjaW1hbCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWRhdHBnX3NldERlY2ltYWwpCi0jZGVm
aW5lIHVkaWN0X3N3YXAgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVkaWN0X3N3YXApCi0jZGVm
aW5lIHVkdGl0dmZtdF9jbG9zZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWR0aXR2Zm10X2Ns
b3NlKQotI2RlZmluZSB1ZHRpdHZmbXRfZm9ybWF0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
ZHRpdHZmbXRfZm9ybWF0KQotI2RlZmluZSB1ZHRpdHZmbXRfb3BlbiBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodWR0aXR2Zm10X29wZW4pCi0jZGVmaW5lIHVlbnVtX2Nsb3NlIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1ZW51bV9jbG9zZSkKLSNkZWZpbmUgdWVudW1fY291bnQgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVlbnVtX2NvdW50KQotI2RlZmluZSB1ZW51bV9uZXh0IFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1ZW51bV9uZXh0KQotI2RlZmluZSB1ZW51bV9uZXh0RGVmYXVsdCBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWVudW1fbmV4dERlZmF1bHQpCi0jZGVmaW5lIHVlbnVt
X29wZW5DaGFyU3RyaW5nc0VudW1lcmF0aW9uIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZW51
bV9vcGVuQ2hhclN0cmluZ3NFbnVtZXJhdGlvbikKLSNkZWZpbmUgdWVudW1fb3BlbkZyb21TdHJp
bmdFbnVtZXJhdGlvbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWVudW1fb3BlbkZyb21TdHJp
bmdFbnVtZXJhdGlvbikKLSNkZWZpbmUgdWVudW1fb3BlblVDaGFyU3RyaW5nc0VudW1lcmF0aW9u
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZW51bV9vcGVuVUNoYXJTdHJpbmdzRW51bWVyYXRp
b24pCi0jZGVmaW5lIHVlbnVtX3Jlc2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZW51bV9y
ZXNldCkKLSNkZWZpbmUgdWVudW1fdW5leHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVlbnVt
X3VuZXh0KQotI2RlZmluZSB1ZW51bV91bmV4dERlZmF1bHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVlbnVtX3VuZXh0RGVmYXVsdCkKLSNkZWZpbmUgdWZpZWxkcG9zaXRlcl9jbG9zZSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWZpZWxkcG9zaXRlcl9jbG9zZSkKLSNkZWZpbmUgdWZpZWxk
cG9zaXRlcl9uZXh0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZmllbGRwb3NpdGVyX25leHQp
Ci0jZGVmaW5lIHVmaWVsZHBvc2l0ZXJfb3BlbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWZp
ZWxkcG9zaXRlcl9vcGVuKQotI2RlZmluZSB1ZmlsZV9jbG9zZV90cmFuc2xpdCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodWZpbGVfY2xvc2VfdHJhbnNsaXQpCi0jZGVmaW5lIHVmaWxlX2ZpbGxf
dWNoYXJfYnVmZmVyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZmlsZV9maWxsX3VjaGFyX2J1
ZmZlcikKLSNkZWZpbmUgdWZpbGVfZmx1c2hfaW8gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVm
aWxlX2ZsdXNoX2lvKQotI2RlZmluZSB1ZmlsZV9mbHVzaF90cmFuc2xpdCBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodWZpbGVfZmx1c2hfdHJhbnNsaXQpCi0jZGVmaW5lIHVmaWxlX2dldGNoIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1ZmlsZV9nZXRjaCkKLSNkZWZpbmUgdWZpbGVfZ2V0Y2gz
MiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWZpbGVfZ2V0Y2gzMikKLSNkZWZpbmUgdWZtdF82
NHRvdSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWZtdF82NHRvdSkKLSNkZWZpbmUgdWZtdF9j
bG9zZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWZtdF9jbG9zZSkKLSNkZWZpbmUgdWZtdF9k
ZWZhdWx0Q1BUb1VuaWNvZGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVmbXRfZGVmYXVsdENQ
VG9Vbmljb2RlKQotI2RlZmluZSB1Zm10X2RpZ2l0dmFsdWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVmbXRfZGlnaXR2YWx1ZSkKLSNkZWZpbmUgdWZtdF9nZXRBcnJheUl0ZW1CeUluZGV4IFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1Zm10X2dldEFycmF5SXRlbUJ5SW5kZXgpCi0jZGVmaW5l
IHVmbXRfZ2V0QXJyYXlMZW5ndGggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVmbXRfZ2V0QXJy
YXlMZW5ndGgpCi0jZGVmaW5lIHVmbXRfZ2V0RGF0ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dWZtdF9nZXREYXRlKQotI2RlZmluZSB1Zm10X2dldERlY051bUNoYXJzIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1Zm10X2dldERlY051bUNoYXJzKQotI2RlZmluZSB1Zm10X2dldERvdWJsZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWZtdF9nZXREb3VibGUpCi0jZGVmaW5lIHVmbXRfZ2V0
SW50NjQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVmbXRfZ2V0SW50NjQpCi0jZGVmaW5lIHVm
bXRfZ2V0TG9uZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWZtdF9nZXRMb25nKQotI2RlZmlu
ZSB1Zm10X2dldE9iamVjdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWZtdF9nZXRPYmplY3Qp
Ci0jZGVmaW5lIHVmbXRfZ2V0VHlwZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWZtdF9nZXRU
eXBlKQotI2RlZmluZSB1Zm10X2dldFVDaGFycyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWZt
dF9nZXRVQ2hhcnMpCi0jZGVmaW5lIHVmbXRfaXNOdW1lcmljIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1Zm10X2lzTnVtZXJpYykKLSNkZWZpbmUgdWZtdF9pc2RpZ2l0IFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1Zm10X2lzZGlnaXQpCi0jZGVmaW5lIHVmbXRfb3BlbiBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodWZtdF9vcGVuKQotI2RlZmluZSB1Zm10X3B0b3UgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVmbXRfcHRvdSkKLSNkZWZpbmUgdWZtdF91dG82NCBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodWZtdF91dG82NCkKLSNkZWZpbmUgdWZtdF91dG9wIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1Zm10X3V0b3ApCi0jZGVmaW5lIHVnZW5kZXJfZ2V0SW5zdGFuY2UgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVnZW5kZXJfZ2V0SW5zdGFuY2UpCi0jZGVmaW5lIHVnZW5kZXJfZ2V0
TGlzdEdlbmRlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWdlbmRlcl9nZXRMaXN0R2VuZGVy
KQotI2RlZmluZSB1aGFzaF9jbG9zZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWhhc2hfY2xv
c2UpCi0jZGVmaW5lIHVoYXNoX2NvbXBhcmVDYXNlbGVzc1VuaWNvZGVTdHJpbmcgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVoYXNoX2NvbXBhcmVDYXNlbGVzc1VuaWNvZGVTdHJpbmcpCi0jZGVm
aW5lIHVoYXNoX2NvbXBhcmVDaGFycyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWhhc2hfY29t
cGFyZUNoYXJzKQotI2RlZmluZSB1aGFzaF9jb21wYXJlSUNoYXJzIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1aGFzaF9jb21wYXJlSUNoYXJzKQotI2RlZmluZSB1aGFzaF9jb21wYXJlTG9uZyBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWhhc2hfY29tcGFyZUxvbmcpCi0jZGVmaW5lIHVoYXNo
X2NvbXBhcmVTY3JpcHRTZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVoYXNoX2NvbXBhcmVT
Y3JpcHRTZXQpCi0jZGVmaW5lIHVoYXNoX2NvbXBhcmVVQ2hhcnMgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVoYXNoX2NvbXBhcmVVQ2hhcnMpCi0jZGVmaW5lIHVoYXNoX2NvbXBhcmVVbmljb2Rl
U3RyaW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1aGFzaF9jb21wYXJlVW5pY29kZVN0cmlu
ZykKLSNkZWZpbmUgdWhhc2hfY291bnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVoYXNoX2Nv
dW50KQotI2RlZmluZSB1aGFzaF9kZWxldGVIYXNodGFibGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVoYXNoX2RlbGV0ZUhhc2h0YWJsZSkKLSNkZWZpbmUgdWhhc2hfZGVsZXRlU2NyaXB0U2V0
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1aGFzaF9kZWxldGVTY3JpcHRTZXQpCi0jZGVmaW5l
IHVoYXNoX2VxdWFscyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWhhc2hfZXF1YWxzKQotI2Rl
ZmluZSB1aGFzaF9lcXVhbHNTY3JpcHRTZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVoYXNo
X2VxdWFsc1NjcmlwdFNldCkKLSNkZWZpbmUgdWhhc2hfZmluZCBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWhhc2hfZmluZCkKLSNkZWZpbmUgdWhhc2hfZ2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1aGFzaF9nZXQpCi0jZGVmaW5lIHVoYXNoX2dldGkgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVoYXNoX2dldGkpCi0jZGVmaW5lIHVoYXNoX2hhc2hDYXNlbGVzc1VuaWNvZGVTdHJpbmcg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVoYXNoX2hhc2hDYXNlbGVzc1VuaWNvZGVTdHJpbmcp
Ci0jZGVmaW5lIHVoYXNoX2hhc2hDaGFycyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWhhc2hf
aGFzaENoYXJzKQotI2RlZmluZSB1aGFzaF9oYXNoSUNoYXJzIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1aGFzaF9oYXNoSUNoYXJzKQotI2RlZmluZSB1aGFzaF9oYXNoTG9uZyBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodWhhc2hfaGFzaExvbmcpCi0jZGVmaW5lIHVoYXNoX2hhc2hTY3JpcHRT
ZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVoYXNoX2hhc2hTY3JpcHRTZXQpCi0jZGVmaW5l
IHVoYXNoX2hhc2hVQ2hhcnMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVoYXNoX2hhc2hVQ2hh
cnMpCi0jZGVmaW5lIHVoYXNoX2hhc2hVbmljb2RlU3RyaW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1aGFzaF9oYXNoVW5pY29kZVN0cmluZykKLSNkZWZpbmUgdWhhc2hfaWdldCBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWhhc2hfaWdldCkKLSNkZWZpbmUgdWhhc2hfaWdldGkgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVoYXNoX2lnZXRpKQotI2RlZmluZSB1aGFzaF9pbml0IFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1aGFzaF9pbml0KQotI2RlZmluZSB1aGFzaF9pcHV0IFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1aGFzaF9pcHV0KQotI2RlZmluZSB1aGFzaF9pcHV0aSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWhhc2hfaXB1dGkpCi0jZGVmaW5lIHVoYXNoX2lyZW1vdmUg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVoYXNoX2lyZW1vdmUpCi0jZGVmaW5lIHVoYXNoX2ly
ZW1vdmVpIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1aGFzaF9pcmVtb3ZlaSkKLSNkZWZpbmUg
dWhhc2hfbmV4dEVsZW1lbnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVoYXNoX25leHRFbGVt
ZW50KQotI2RlZmluZSB1aGFzaF9vcGVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1aGFzaF9v
cGVuKQotI2RlZmluZSB1aGFzaF9vcGVuU2l6ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWhh
c2hfb3BlblNpemUpCi0jZGVmaW5lIHVoYXNoX3B1dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dWhhc2hfcHV0KQotI2RlZmluZSB1aGFzaF9wdXRpIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
aGFzaF9wdXRpKQotI2RlZmluZSB1aGFzaF9yZW1vdmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVoYXNoX3JlbW92ZSkKLSNkZWZpbmUgdWhhc2hfcmVtb3ZlQWxsIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1aGFzaF9yZW1vdmVBbGwpCi0jZGVmaW5lIHVoYXNoX3JlbW92ZUVsZW1lbnQgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVoYXNoX3JlbW92ZUVsZW1lbnQpCi0jZGVmaW5lIHVoYXNo
X3JlbW92ZWkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVoYXNoX3JlbW92ZWkpCi0jZGVmaW5l
IHVoYXNoX3NldEtleUNvbXBhcmF0b3IgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVoYXNoX3Nl
dEtleUNvbXBhcmF0b3IpCi0jZGVmaW5lIHVoYXNoX3NldEtleURlbGV0ZXIgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVoYXNoX3NldEtleURlbGV0ZXIpCi0jZGVmaW5lIHVoYXNoX3NldEtleUhh
c2hlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWhhc2hfc2V0S2V5SGFzaGVyKQotI2RlZmlu
ZSB1aGFzaF9zZXRSZXNpemVQb2xpY3kgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVoYXNoX3Nl
dFJlc2l6ZVBvbGljeSkKLSNkZWZpbmUgdWhhc2hfc2V0VmFsdWVDb21wYXJhdG9yIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1aGFzaF9zZXRWYWx1ZUNvbXBhcmF0b3IpCi0jZGVmaW5lIHVoYXNo
X3NldFZhbHVlRGVsZXRlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWhhc2hfc2V0VmFsdWVE
ZWxldGVyKQotI2RlZmluZSB1aWRuYV9JRE5Ub0FTQ0lJIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1aWRuYV9JRE5Ub0FTQ0lJKQotI2RlZmluZSB1aWRuYV9JRE5Ub1VuaWNvZGUgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVpZG5hX0lETlRvVW5pY29kZSkKLSNkZWZpbmUgdWlkbmFfY2xvc2Ug
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVpZG5hX2Nsb3NlKQotI2RlZmluZSB1aWRuYV9jb21w
YXJlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1aWRuYV9jb21wYXJlKQotI2RlZmluZSB1aWRu
YV9sYWJlbFRvQVNDSUkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVpZG5hX2xhYmVsVG9BU0NJ
SSkKLSNkZWZpbmUgdWlkbmFfbGFiZWxUb0FTQ0lJX1VURjggVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVpZG5hX2xhYmVsVG9BU0NJSV9VVEY4KQotI2RlZmluZSB1aWRuYV9sYWJlbFRvVW5pY29k
ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWlkbmFfbGFiZWxUb1VuaWNvZGUpCi0jZGVmaW5l
IHVpZG5hX2xhYmVsVG9Vbmljb2RlVVRGOCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWlkbmFf
bGFiZWxUb1VuaWNvZGVVVEY4KQotI2RlZmluZSB1aWRuYV9uYW1lVG9BU0NJSSBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodWlkbmFfbmFtZVRvQVNDSUkpCi0jZGVmaW5lIHVpZG5hX25hbWVUb0FT
Q0lJX1VURjggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVpZG5hX25hbWVUb0FTQ0lJX1VURjgp
Ci0jZGVmaW5lIHVpZG5hX25hbWVUb1VuaWNvZGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVp
ZG5hX25hbWVUb1VuaWNvZGUpCi0jZGVmaW5lIHVpZG5hX25hbWVUb1VuaWNvZGVVVEY4IFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1aWRuYV9uYW1lVG9Vbmljb2RlVVRGOCkKLSNkZWZpbmUgdWlk
bmFfb3BlblVUUzQ2IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1aWRuYV9vcGVuVVRTNDYpCi0j
ZGVmaW5lIHVpZG5hX3RvQVNDSUkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVpZG5hX3RvQVND
SUkpCi0jZGVmaW5lIHVpZG5hX3RvVW5pY29kZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWlk
bmFfdG9Vbmljb2RlKQotI2RlZmluZSB1aXRlcl9jdXJyZW50MzIgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVpdGVyX2N1cnJlbnQzMikKLSNkZWZpbmUgdWl0ZXJfZ2V0U3RhdGUgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVpdGVyX2dldFN0YXRlKQotI2RlZmluZSB1aXRlcl9uZXh0MzIgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVpdGVyX25leHQzMikKLSNkZWZpbmUgdWl0ZXJfcHJldmlv
dXMzMiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWl0ZXJfcHJldmlvdXMzMikKLSNkZWZpbmUg
dWl0ZXJfc2V0Q2hhcmFjdGVySXRlcmF0b3IgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVpdGVy
X3NldENoYXJhY3Rlckl0ZXJhdG9yKQotI2RlZmluZSB1aXRlcl9zZXRSZXBsYWNlYWJsZSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWl0ZXJfc2V0UmVwbGFjZWFibGUpCi0jZGVmaW5lIHVpdGVy
X3NldFN0YXRlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1aXRlcl9zZXRTdGF0ZSkKLSNkZWZp
bmUgdWl0ZXJfc2V0U3RyaW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1aXRlcl9zZXRTdHJp
bmcpCi0jZGVmaW5lIHVpdGVyX3NldFVURjE2QkUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVp
dGVyX3NldFVURjE2QkUpCi0jZGVmaW5lIHVpdGVyX3NldFVURjggVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVpdGVyX3NldFVURjgpCi0jZGVmaW5lIHVsZG5fY2xvc2UgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVsZG5fY2xvc2UpCi0jZGVmaW5lIHVsZG5fZ2V0Q29udGV4dCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodWxkbl9nZXRDb250ZXh0KQotI2RlZmluZSB1bGRuX2dldERpYWxlY3RI
YW5kbGluZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxkbl9nZXREaWFsZWN0SGFuZGxpbmcp
Ci0jZGVmaW5lIHVsZG5fZ2V0TG9jYWxlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bGRuX2dl
dExvY2FsZSkKLSNkZWZpbmUgdWxkbl9rZXlEaXNwbGF5TmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodWxkbl9rZXlEaXNwbGF5TmFtZSkKLSNkZWZpbmUgdWxkbl9rZXlWYWx1ZURpc3BsYXlO
YW1lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bGRuX2tleVZhbHVlRGlzcGxheU5hbWUpCi0j
ZGVmaW5lIHVsZG5fbGFuZ3VhZ2VEaXNwbGF5TmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dWxkbl9sYW5ndWFnZURpc3BsYXlOYW1lKQotI2RlZmluZSB1bGRuX2xvY2FsZURpc3BsYXlOYW1l
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bGRuX2xvY2FsZURpc3BsYXlOYW1lKQotI2RlZmlu
ZSB1bGRuX29wZW4gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsZG5fb3BlbikKLSNkZWZpbmUg
dWxkbl9vcGVuRm9yQ29udGV4dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxkbl9vcGVuRm9y
Q29udGV4dCkKLSNkZWZpbmUgdWxkbl9yZWdpb25EaXNwbGF5TmFtZSBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodWxkbl9yZWdpb25EaXNwbGF5TmFtZSkKLSNkZWZpbmUgdWxkbl9zY3JpcHRDb2Rl
RGlzcGxheU5hbWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsZG5fc2NyaXB0Q29kZURpc3Bs
YXlOYW1lKQotI2RlZmluZSB1bGRuX3NjcmlwdERpc3BsYXlOYW1lIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1bGRuX3NjcmlwdERpc3BsYXlOYW1lKQotI2RlZmluZSB1bGRuX3ZhcmlhbnREaXNw
bGF5TmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxkbl92YXJpYW50RGlzcGxheU5hbWUp
Ci0jZGVmaW5lIHVsaXN0X2FkZEl0ZW1CZWdpbkxpc3QgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVsaXN0X2FkZEl0ZW1CZWdpbkxpc3QpCi0jZGVmaW5lIHVsaXN0X2FkZEl0ZW1FbmRMaXN0IFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bGlzdF9hZGRJdGVtRW5kTGlzdCkKLSNkZWZpbmUgdWxp
c3RfY2xvc2Vfa2V5d29yZF92YWx1ZXNfaXRlcmF0b3IgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVsaXN0X2Nsb3NlX2tleXdvcmRfdmFsdWVzX2l0ZXJhdG9yKQotI2RlZmluZSB1bGlzdF9jb250
YWluc1N0cmluZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxpc3RfY29udGFpbnNTdHJpbmcp
Ci0jZGVmaW5lIHVsaXN0X2NvdW50X2tleXdvcmRfdmFsdWVzIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1bGlzdF9jb3VudF9rZXl3b3JkX3ZhbHVlcykKLSNkZWZpbmUgdWxpc3RfY3JlYXRlRW1w
dHlMaXN0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bGlzdF9jcmVhdGVFbXB0eUxpc3QpCi0j
ZGVmaW5lIHVsaXN0X2RlbGV0ZUxpc3QgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsaXN0X2Rl
bGV0ZUxpc3QpCi0jZGVmaW5lIHVsaXN0X2dldExpc3RGcm9tRW51bSBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodWxpc3RfZ2V0TGlzdEZyb21FbnVtKQotI2RlZmluZSB1bGlzdF9nZXRMaXN0U2l6
ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxpc3RfZ2V0TGlzdFNpemUpCi0jZGVmaW5lIHVs
aXN0X2dldE5leHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsaXN0X2dldE5leHQpCi0jZGVm
aW5lIHVsaXN0X25leHRfa2V5d29yZF92YWx1ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxp
c3RfbmV4dF9rZXl3b3JkX3ZhbHVlKQotI2RlZmluZSB1bGlzdF9yZXNldExpc3QgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVsaXN0X3Jlc2V0TGlzdCkKLSNkZWZpbmUgdWxpc3RfcmVzZXRfa2V5
d29yZF92YWx1ZXNfaXRlcmF0b3IgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsaXN0X3Jlc2V0
X2tleXdvcmRfdmFsdWVzX2l0ZXJhdG9yKQotI2RlZmluZSB1bGlzdGZtdF9jbG9zZSBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWxpc3RmbXRfY2xvc2UpCi0jZGVmaW5lIHVsaXN0Zm10X2Zvcm1h
dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxpc3RmbXRfZm9ybWF0KQotI2RlZmluZSB1bGlz
dGZtdF9vcGVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bGlzdGZtdF9vcGVuKQotI2RlZmlu
ZSB1bG9jX2FjY2VwdExhbmd1YWdlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jX2FjY2Vw
dExhbmd1YWdlKQotI2RlZmluZSB1bG9jX2FjY2VwdExhbmd1YWdlRnJvbUhUVFAgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVsb2NfYWNjZXB0TGFuZ3VhZ2VGcm9tSFRUUCkKLSNkZWZpbmUgdWxv
Y19hZGRMaWtlbHlTdWJ0YWdzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jX2FkZExpa2Vs
eVN1YnRhZ3MpCi0jZGVmaW5lIHVsb2NfY2Fub25pY2FsaXplIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1bG9jX2Nhbm9uaWNhbGl6ZSkKLSNkZWZpbmUgdWxvY19jb3VudEF2YWlsYWJsZSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY19jb3VudEF2YWlsYWJsZSkKLSNkZWZpbmUgdWxvY19m
b3JMYW5ndWFnZVRhZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY19mb3JMYW5ndWFnZVRh
ZykKLSNkZWZpbmUgdWxvY19nZXRBdmFpbGFibGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVs
b2NfZ2V0QXZhaWxhYmxlKQotI2RlZmluZSB1bG9jX2dldEJhc2VOYW1lIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1bG9jX2dldEJhc2VOYW1lKQotI2RlZmluZSB1bG9jX2dldENoYXJhY3Rlck9y
aWVudGF0aW9uIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jX2dldENoYXJhY3Rlck9yaWVu
dGF0aW9uKQotI2RlZmluZSB1bG9jX2dldENvdW50cnkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVsb2NfZ2V0Q291bnRyeSkKLSNkZWZpbmUgdWxvY19nZXRDdXJyZW50Q291bnRyeUlEIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jX2dldEN1cnJlbnRDb3VudHJ5SUQpCi0jZGVmaW5lIHVs
b2NfZ2V0Q3VycmVudExhbmd1YWdlSUQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2NfZ2V0
Q3VycmVudExhbmd1YWdlSUQpCi0jZGVmaW5lIHVsb2NfZ2V0RGVmYXVsdCBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodWxvY19nZXREZWZhdWx0KQotI2RlZmluZSB1bG9jX2dldERpc3BsYXlDb3Vu
dHJ5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jX2dldERpc3BsYXlDb3VudHJ5KQotI2Rl
ZmluZSB1bG9jX2dldERpc3BsYXlLZXl3b3JkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9j
X2dldERpc3BsYXlLZXl3b3JkKQotI2RlZmluZSB1bG9jX2dldERpc3BsYXlLZXl3b3JkVmFsdWUg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2NfZ2V0RGlzcGxheUtleXdvcmRWYWx1ZSkKLSNk
ZWZpbmUgdWxvY19nZXREaXNwbGF5TGFuZ3VhZ2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVs
b2NfZ2V0RGlzcGxheUxhbmd1YWdlKQotI2RlZmluZSB1bG9jX2dldERpc3BsYXlOYW1lIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jX2dldERpc3BsYXlOYW1lKQotI2RlZmluZSB1bG9jX2dl
dERpc3BsYXlTY3JpcHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2NfZ2V0RGlzcGxheVNj
cmlwdCkKLSNkZWZpbmUgdWxvY19nZXREaXNwbGF5U2NyaXB0SW5Db250ZXh0IFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1bG9jX2dldERpc3BsYXlTY3JpcHRJbkNvbnRleHQpCi0jZGVmaW5lIHVs
b2NfZ2V0RGlzcGxheVZhcmlhbnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2NfZ2V0RGlz
cGxheVZhcmlhbnQpCi0jZGVmaW5lIHVsb2NfZ2V0SVNPM0NvdW50cnkgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVsb2NfZ2V0SVNPM0NvdW50cnkpCi0jZGVmaW5lIHVsb2NfZ2V0SVNPM0xhbmd1
YWdlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jX2dldElTTzNMYW5ndWFnZSkKLSNkZWZp
bmUgdWxvY19nZXRJU09Db3VudHJpZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2NfZ2V0
SVNPQ291bnRyaWVzKQotI2RlZmluZSB1bG9jX2dldElTT0xhbmd1YWdlcyBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodWxvY19nZXRJU09MYW5ndWFnZXMpCi0jZGVmaW5lIHVsb2NfZ2V0S2V5d29y
ZFZhbHVlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jX2dldEtleXdvcmRWYWx1ZSkKLSNk
ZWZpbmUgdWxvY19nZXRMQ0lEIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jX2dldExDSUQp
Ci0jZGVmaW5lIHVsb2NfZ2V0TGFuZ3VhZ2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2Nf
Z2V0TGFuZ3VhZ2UpCi0jZGVmaW5lIHVsb2NfZ2V0TGluZU9yaWVudGF0aW9uIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1bG9jX2dldExpbmVPcmllbnRhdGlvbikKLSNkZWZpbmUgdWxvY19nZXRM
b2NhbGVGb3JMQ0lEIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jX2dldExvY2FsZUZvckxD
SUQpCi0jZGVmaW5lIHVsb2NfZ2V0TmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY19n
ZXROYW1lKQotI2RlZmluZSB1bG9jX2dldFBhcmVudCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dWxvY19nZXRQYXJlbnQpCi0jZGVmaW5lIHVsb2NfZ2V0U2NyaXB0IFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1bG9jX2dldFNjcmlwdCkKLSNkZWZpbmUgdWxvY19nZXRUYWJsZVN0cmluZ1dpdGhG
YWxsYmFjayBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY19nZXRUYWJsZVN0cmluZ1dpdGhG
YWxsYmFjaykKLSNkZWZpbmUgdWxvY19nZXRWYXJpYW50IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1bG9jX2dldFZhcmlhbnQpCi0jZGVmaW5lIHVsb2NfaXNSaWdodFRvTGVmdCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodWxvY19pc1JpZ2h0VG9MZWZ0KQotI2RlZmluZSB1bG9jX21pbmltaXpl
U3VidGFncyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY19taW5pbWl6ZVN1YnRhZ3MpCi0j
ZGVmaW5lIHVsb2Nfb3BlbktleXdvcmRMaXN0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9j
X29wZW5LZXl3b3JkTGlzdCkKLSNkZWZpbmUgdWxvY19vcGVuS2V5d29yZHMgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVsb2Nfb3BlbktleXdvcmRzKQotI2RlZmluZSB1bG9jX3NldERlZmF1bHQg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2Nfc2V0RGVmYXVsdCkKLSNkZWZpbmUgdWxvY19z
ZXRLZXl3b3JkVmFsdWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2Nfc2V0S2V5d29yZFZh
bHVlKQotI2RlZmluZSB1bG9jX3RvTGFuZ3VhZ2VUYWcgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVsb2NfdG9MYW5ndWFnZVRhZykKLSNkZWZpbmUgdWxvY190b0xlZ2FjeUtleSBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodWxvY190b0xlZ2FjeUtleSkKLSNkZWZpbmUgdWxvY190b0xlZ2FjeVR5
cGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2NfdG9MZWdhY3lUeXBlKQotI2RlZmluZSB1
bG9jX3RvVW5pY29kZUxvY2FsZUtleSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY190b1Vu
aWNvZGVMb2NhbGVLZXkpCi0jZGVmaW5lIHVsb2NfdG9Vbmljb2RlTG9jYWxlVHlwZSBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodWxvY190b1VuaWNvZGVMb2NhbGVUeXBlKQotI2RlZmluZSB1bG9j
ZGF0YV9jbG9zZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY2RhdGFfY2xvc2UpCi0jZGVm
aW5lIHVsb2NkYXRhX2dldENMRFJWZXJzaW9uIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9j
ZGF0YV9nZXRDTERSVmVyc2lvbikKLSNkZWZpbmUgdWxvY2RhdGFfZ2V0RGVsaW1pdGVyIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jZGF0YV9nZXREZWxpbWl0ZXIpCi0jZGVmaW5lIHVsb2Nk
YXRhX2dldEV4ZW1wbGFyU2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jZGF0YV9nZXRF
eGVtcGxhclNldCkKLSNkZWZpbmUgdWxvY2RhdGFfZ2V0TG9jYWxlRGlzcGxheVBhdHRlcm4gVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2NkYXRhX2dldExvY2FsZURpc3BsYXlQYXR0ZXJuKQot
I2RlZmluZSB1bG9jZGF0YV9nZXRMb2NhbGVTZXBhcmF0b3IgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVsb2NkYXRhX2dldExvY2FsZVNlcGFyYXRvcikKLSNkZWZpbmUgdWxvY2RhdGFfZ2V0TWVh
c3VyZW1lbnRTeXN0ZW0gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2NkYXRhX2dldE1lYXN1
cmVtZW50U3lzdGVtKQotI2RlZmluZSB1bG9jZGF0YV9nZXROb1N1YnN0aXR1dGUgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVsb2NkYXRhX2dldE5vU3Vic3RpdHV0ZSkKLSNkZWZpbmUgdWxvY2Rh
dGFfZ2V0UGFwZXJTaXplIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jZGF0YV9nZXRQYXBl
clNpemUpCi0jZGVmaW5lIHVsb2NkYXRhX29wZW4gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVs
b2NkYXRhX29wZW4pCi0jZGVmaW5lIHVsb2NkYXRhX3NldE5vU3Vic3RpdHV0ZSBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodWxvY2RhdGFfc2V0Tm9TdWJzdGl0dXRlKQotI2RlZmluZSB1bG9jaW1w
X2dldENvdW50cnkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVsb2NpbXBfZ2V0Q291bnRyeSkK
LSNkZWZpbmUgdWxvY2ltcF9nZXRMYW5ndWFnZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxv
Y2ltcF9nZXRMYW5ndWFnZSkKLSNkZWZpbmUgdWxvY2ltcF9nZXRTY3JpcHQgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVsb2NpbXBfZ2V0U2NyaXB0KQotI2RlZmluZSB1bG9jaW1wX3RvQmNwS2V5
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bG9jaW1wX3RvQmNwS2V5KQotI2RlZmluZSB1bG9j
aW1wX3RvQmNwVHlwZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodWxvY2ltcF90b0JjcFR5cGUp
Ci0jZGVmaW5lIHVsb2NpbXBfdG9MZWdhY3lLZXkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVs
b2NpbXBfdG9MZWdhY3lLZXkpCi0jZGVmaW5lIHVsb2NpbXBfdG9MZWdhY3lUeXBlIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1bG9jaW1wX3RvTGVnYWN5VHlwZSkKLSNkZWZpbmUgdWx0YWdfaXNV
bmljb2RlTG9jYWxlS2V5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bHRhZ19pc1VuaWNvZGVM
b2NhbGVLZXkpCi0jZGVmaW5lIHVsdGFnX2lzVW5pY29kZUxvY2FsZVR5cGUgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVsdGFnX2lzVW5pY29kZUxvY2FsZVR5cGUpCi0jZGVmaW5lIHVtc2dfYXBw
bHlQYXR0ZXJuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bXNnX2FwcGx5UGF0dGVybikKLSNk
ZWZpbmUgdW1zZ19hdXRvUXVvdGVBcG9zdHJvcGhlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
bXNnX2F1dG9RdW90ZUFwb3N0cm9waGUpCi0jZGVmaW5lIHVtc2dfY2xvbmUgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVtc2dfY2xvbmUpCi0jZGVmaW5lIHVtc2dfY2xvc2UgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVtc2dfY2xvc2UpCi0jZGVmaW5lIHVtc2dfZm9ybWF0IFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1bXNnX2Zvcm1hdCkKLSNkZWZpbmUgdW1zZ19nZXRMb2NhbGUgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVtc2dfZ2V0TG9jYWxlKQotI2RlZmluZSB1bXNnX29wZW4gVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVtc2dfb3BlbikKLSNkZWZpbmUgdW1zZ19wYXJzZSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodW1zZ19wYXJzZSkKLSNkZWZpbmUgdW1zZ19zZXRMb2NhbGUg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVtc2dfc2V0TG9jYWxlKQotI2RlZmluZSB1bXNnX3Rv
UGF0dGVybiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW1zZ190b1BhdHRlcm4pCi0jZGVmaW5l
IHVtc2dfdmZvcm1hdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW1zZ192Zm9ybWF0KQotI2Rl
ZmluZSB1bXNnX3ZwYXJzZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW1zZ192cGFyc2UpCi0j
ZGVmaW5lIHVtdHhfY29uZEJyb2FkY2FzdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW10eF9j
b25kQnJvYWRjYXN0KQotI2RlZmluZSB1bXR4X2NvbmRTaWduYWwgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVtdHhfY29uZFNpZ25hbCkKLSNkZWZpbmUgdW10eF9jb25kV2FpdCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodW10eF9jb25kV2FpdCkKLSNkZWZpbmUgdW10eF9sb2NrIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1bXR4X2xvY2spCi0jZGVmaW5lIHVtdHhfdW5sb2NrIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1bXR4X3VubG9jaykKLSNkZWZpbmUgdW5pc2V0X2dldFVuaWNvZGUz
Mkluc3RhbmNlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bmlzZXRfZ2V0VW5pY29kZTMySW5z
dGFuY2UpCi0jZGVmaW5lIHVub3JtMl9hcHBlbmQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVu
b3JtMl9hcHBlbmQpCi0jZGVmaW5lIHVub3JtMl9jbG9zZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodW5vcm0yX2Nsb3NlKQotI2RlZmluZSB1bm9ybTJfY29tcG9zZVBhaXIgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVub3JtMl9jb21wb3NlUGFpcikKLSNkZWZpbmUgdW5vcm0yX2dldENvbWJp
bmluZ0NsYXNzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bm9ybTJfZ2V0Q29tYmluaW5nQ2xh
c3MpCi0jZGVmaW5lIHVub3JtMl9nZXREZWNvbXBvc2l0aW9uIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1bm9ybTJfZ2V0RGVjb21wb3NpdGlvbikKLSNkZWZpbmUgdW5vcm0yX2dldEluc3RhbmNl
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bm9ybTJfZ2V0SW5zdGFuY2UpCi0jZGVmaW5lIHVu
b3JtMl9nZXRORkNJbnN0YW5jZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW5vcm0yX2dldE5G
Q0luc3RhbmNlKQotI2RlZmluZSB1bm9ybTJfZ2V0TkZESW5zdGFuY2UgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVub3JtMl9nZXRORkRJbnN0YW5jZSkKLSNkZWZpbmUgdW5vcm0yX2dldE5GS0ND
YXNlZm9sZEluc3RhbmNlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bm9ybTJfZ2V0TkZLQ0Nh
c2Vmb2xkSW5zdGFuY2UpCi0jZGVmaW5lIHVub3JtMl9nZXRORktDSW5zdGFuY2UgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVub3JtMl9nZXRORktDSW5zdGFuY2UpCi0jZGVmaW5lIHVub3JtMl9n
ZXRORktESW5zdGFuY2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVub3JtMl9nZXRORktESW5z
dGFuY2UpCi0jZGVmaW5lIHVub3JtMl9nZXRSYXdEZWNvbXBvc2l0aW9uIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1bm9ybTJfZ2V0UmF3RGVjb21wb3NpdGlvbikKLSNkZWZpbmUgdW5vcm0yX2hh
c0JvdW5kYXJ5QWZ0ZXIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVub3JtMl9oYXNCb3VuZGFy
eUFmdGVyKQotI2RlZmluZSB1bm9ybTJfaGFzQm91bmRhcnlCZWZvcmUgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVub3JtMl9oYXNCb3VuZGFyeUJlZm9yZSkKLSNkZWZpbmUgdW5vcm0yX2lzSW5l
cnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVub3JtMl9pc0luZXJ0KQotI2RlZmluZSB1bm9y
bTJfaXNOb3JtYWxpemVkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bm9ybTJfaXNOb3JtYWxp
emVkKQotI2RlZmluZSB1bm9ybTJfbm9ybWFsaXplIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
bm9ybTJfbm9ybWFsaXplKQotI2RlZmluZSB1bm9ybTJfbm9ybWFsaXplU2Vjb25kQW5kQXBwZW5k
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bm9ybTJfbm9ybWFsaXplU2Vjb25kQW5kQXBwZW5k
KQotI2RlZmluZSB1bm9ybTJfb3BlbkZpbHRlcmVkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
bm9ybTJfb3BlbkZpbHRlcmVkKQotI2RlZmluZSB1bm9ybTJfcXVpY2tDaGVjayBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodW5vcm0yX3F1aWNrQ2hlY2spCi0jZGVmaW5lIHVub3JtMl9zcGFuUXVp
Y2tDaGVja1llcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW5vcm0yX3NwYW5RdWlja0NoZWNr
WWVzKQotI2RlZmluZSB1bm9ybTJfc3dhcCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW5vcm0y
X3N3YXApCi0jZGVmaW5lIHVub3JtX2NvbXBhcmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVu
b3JtX2NvbXBhcmUpCi0jZGVmaW5lIHVub3JtX2NvbmNhdGVuYXRlIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1bm9ybV9jb25jYXRlbmF0ZSkKLSNkZWZpbmUgdW5vcm1fZ2V0RkNEMTYgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVub3JtX2dldEZDRDE2KQotI2RlZmluZSB1bm9ybV9nZXRRdWlj
a0NoZWNrIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bm9ybV9nZXRRdWlja0NoZWNrKQotI2Rl
ZmluZSB1bm9ybV9pc05vcm1hbGl6ZWQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVub3JtX2lz
Tm9ybWFsaXplZCkKLSNkZWZpbmUgdW5vcm1faXNOb3JtYWxpemVkV2l0aE9wdGlvbnMgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVub3JtX2lzTm9ybWFsaXplZFdpdGhPcHRpb25zKQotI2RlZmlu
ZSB1bm9ybV9uZXh0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bm9ybV9uZXh0KQotI2RlZmlu
ZSB1bm9ybV9ub3JtYWxpemUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVub3JtX25vcm1hbGl6
ZSkKLSNkZWZpbmUgdW5vcm1fcHJldmlvdXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVub3Jt
X3ByZXZpb3VzKQotI2RlZmluZSB1bm9ybV9xdWlja0NoZWNrIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1bm9ybV9xdWlja0NoZWNrKQotI2RlZmluZSB1bm9ybV9xdWlja0NoZWNrV2l0aE9wdGlv
bnMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVub3JtX3F1aWNrQ2hlY2tXaXRoT3B0aW9ucykK
LSNkZWZpbmUgdW51bV9hcHBseVBhdHRlcm4gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVudW1f
YXBwbHlQYXR0ZXJuKQotI2RlZmluZSB1bnVtX2Nsb25lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1bnVtX2Nsb25lKQotI2RlZmluZSB1bnVtX2Nsb3NlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1bnVtX2Nsb3NlKQotI2RlZmluZSB1bnVtX2NvdW50QXZhaWxhYmxlIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1bnVtX2NvdW50QXZhaWxhYmxlKQotI2RlZmluZSB1bnVtX2Zvcm1hdCBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodW51bV9mb3JtYXQpCi0jZGVmaW5lIHVudW1fZm9ybWF0RGVj
aW1hbCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW51bV9mb3JtYXREZWNpbWFsKQotI2RlZmlu
ZSB1bnVtX2Zvcm1hdERvdWJsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW51bV9mb3JtYXRE
b3VibGUpCi0jZGVmaW5lIHVudW1fZm9ybWF0RG91YmxlQ3VycmVuY3kgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVudW1fZm9ybWF0RG91YmxlQ3VycmVuY3kpCi0jZGVmaW5lIHVudW1fZm9ybWF0
SW50NjQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVudW1fZm9ybWF0SW50NjQpCi0jZGVmaW5l
IHVudW1fZm9ybWF0VUZvcm1hdHRhYmxlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bnVtX2Zv
cm1hdFVGb3JtYXR0YWJsZSkKLSNkZWZpbmUgdW51bV9nZXRBdHRyaWJ1dGUgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVudW1fZ2V0QXR0cmlidXRlKQotI2RlZmluZSB1bnVtX2dldEF2YWlsYWJs
ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW51bV9nZXRBdmFpbGFibGUpCi0jZGVmaW5lIHVu
dW1fZ2V0Q29udGV4dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW51bV9nZXRDb250ZXh0KQot
I2RlZmluZSB1bnVtX2dldERvdWJsZUF0dHJpYnV0ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dW51bV9nZXREb3VibGVBdHRyaWJ1dGUpCi0jZGVmaW5lIHVudW1fZ2V0TG9jYWxlQnlUeXBlIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bnVtX2dldExvY2FsZUJ5VHlwZSkKLSNkZWZpbmUgdW51
bV9nZXRTeW1ib2wgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVudW1fZ2V0U3ltYm9sKQotI2Rl
ZmluZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVudW1f
Z2V0VGV4dEF0dHJpYnV0ZSkKLSNkZWZpbmUgdW51bV9vcGVuIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1bnVtX29wZW4pCi0jZGVmaW5lIHVudW1fcGFyc2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVudW1fcGFyc2UpCi0jZGVmaW5lIHVudW1fcGFyc2VEZWNpbWFsIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1bnVtX3BhcnNlRGVjaW1hbCkKLSNkZWZpbmUgdW51bV9wYXJzZURvdWJsZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW51bV9wYXJzZURvdWJsZSkKLSNkZWZpbmUgdW51bV9w
YXJzZURvdWJsZUN1cnJlbmN5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bnVtX3BhcnNlRG91
YmxlQ3VycmVuY3kpCi0jZGVmaW5lIHVudW1fcGFyc2VJbnQ2NCBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodW51bV9wYXJzZUludDY0KQotI2RlZmluZSB1bnVtX3BhcnNlVG9VRm9ybWF0dGFibGUg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVudW1fcGFyc2VUb1VGb3JtYXR0YWJsZSkKLSNkZWZp
bmUgdW51bV9zZXRBdHRyaWJ1dGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVudW1fc2V0QXR0
cmlidXRlKQotI2RlZmluZSB1bnVtX3NldENvbnRleHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVudW1fc2V0Q29udGV4dCkKLSNkZWZpbmUgdW51bV9zZXREb3VibGVBdHRyaWJ1dGUgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVudW1fc2V0RG91YmxlQXR0cmlidXRlKQotI2RlZmluZSB1bnVt
X3NldFN5bWJvbCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW51bV9zZXRTeW1ib2wpCi0jZGVm
aW5lIHVudW1fc2V0VGV4dEF0dHJpYnV0ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW51bV9z
ZXRUZXh0QXR0cmlidXRlKQotI2RlZmluZSB1bnVtX3RvUGF0dGVybiBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodW51bV90b1BhdHRlcm4pCi0jZGVmaW5lIHVudW1zeXNfY2xvc2UgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVudW1zeXNfY2xvc2UpCi0jZGVmaW5lIHVudW1zeXNfZ2V0RGVzY3Jp
cHRpb24gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVudW1zeXNfZ2V0RGVzY3JpcHRpb24pCi0j
ZGVmaW5lIHVudW1zeXNfZ2V0TmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodW51bXN5c19n
ZXROYW1lKQotI2RlZmluZSB1bnVtc3lzX2dldFJhZGl4IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1bnVtc3lzX2dldFJhZGl4KQotI2RlZmluZSB1bnVtc3lzX2lzQWxnb3JpdGhtaWMgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVudW1zeXNfaXNBbGdvcml0aG1pYykKLSNkZWZpbmUgdW51bXN5
c19vcGVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bnVtc3lzX29wZW4pCi0jZGVmaW5lIHVu
dW1zeXNfb3BlbkF2YWlsYWJsZU5hbWVzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1bnVtc3lz
X29wZW5BdmFpbGFibGVOYW1lcykKLSNkZWZpbmUgdW51bXN5c19vcGVuQnlOYW1lIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1bnVtc3lzX29wZW5CeU5hbWUpCi0jZGVmaW5lIHVwbHJ1bGVzX2Ns
b3NlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cGxydWxlc19jbG9zZSkKLSNkZWZpbmUgdXBs
cnVsZXNfb3BlbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBscnVsZXNfb3BlbikKLSNkZWZp
bmUgdXBscnVsZXNfb3BlbkZvclR5cGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwbHJ1bGVz
X29wZW5Gb3JUeXBlKQotI2RlZmluZSB1cGxydWxlc19zZWxlY3QgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVwbHJ1bGVzX3NlbGVjdCkKLSNkZWZpbmUgdXBsdWdfY2xvc2VMaWJyYXJ5IFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1cGx1Z19jbG9zZUxpYnJhcnkpCi0jZGVmaW5lIHVwbHVnX2Zp
bmRMaWJyYXJ5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cGx1Z19maW5kTGlicmFyeSkKLSNk
ZWZpbmUgdXBsdWdfZ2V0Q29uZmlndXJhdGlvbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBs
dWdfZ2V0Q29uZmlndXJhdGlvbikKLSNkZWZpbmUgdXBsdWdfZ2V0Q29udGV4dCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXBsdWdfZ2V0Q29udGV4dCkKLSNkZWZpbmUgdXBsdWdfZ2V0Q3VycmVu
dExldmVsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cGx1Z19nZXRDdXJyZW50TGV2ZWwpCi0j
ZGVmaW5lIHVwbHVnX2dldExpYnJhcnkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwbHVnX2dl
dExpYnJhcnkpCi0jZGVmaW5lIHVwbHVnX2dldExpYnJhcnlOYW1lIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1cGx1Z19nZXRMaWJyYXJ5TmFtZSkKLSNkZWZpbmUgdXBsdWdfZ2V0UGx1Z0ludGVy
bmFsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cGx1Z19nZXRQbHVnSW50ZXJuYWwpCi0jZGVm
aW5lIHVwbHVnX2dldFBsdWdMZXZlbCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBsdWdfZ2V0
UGx1Z0xldmVsKQotI2RlZmluZSB1cGx1Z19nZXRQbHVnTG9hZFN0YXR1cyBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXBsdWdfZ2V0UGx1Z0xvYWRTdGF0dXMpCi0jZGVmaW5lIHVwbHVnX2dldFBs
dWdOYW1lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cGx1Z19nZXRQbHVnTmFtZSkKLSNkZWZp
bmUgdXBsdWdfZ2V0UGx1Z2luRmlsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBsdWdfZ2V0
UGx1Z2luRmlsZSkKLSNkZWZpbmUgdXBsdWdfZ2V0U3ltYm9sTmFtZSBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodXBsdWdfZ2V0U3ltYm9sTmFtZSkKLSNkZWZpbmUgdXBsdWdfaW5pdCBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXBsdWdfaW5pdCkKLSNkZWZpbmUgdXBsdWdfbG9hZFBsdWdGcm9t
RW50cnlwb2ludCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBsdWdfbG9hZFBsdWdGcm9tRW50
cnlwb2ludCkKLSNkZWZpbmUgdXBsdWdfbG9hZFBsdWdGcm9tTGlicmFyeSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXBsdWdfbG9hZFBsdWdGcm9tTGlicmFyeSkKLSNkZWZpbmUgdXBsdWdfbmV4
dFBsdWcgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwbHVnX25leHRQbHVnKQotI2RlZmluZSB1
cGx1Z19vcGVuTGlicmFyeSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBsdWdfb3BlbkxpYnJh
cnkpCi0jZGVmaW5lIHVwbHVnX3JlbW92ZVBsdWcgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVw
bHVnX3JlbW92ZVBsdWcpCi0jZGVmaW5lIHVwbHVnX3NldENvbnRleHQgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVwbHVnX3NldENvbnRleHQpCi0jZGVmaW5lIHVwbHVnX3NldFBsdWdMZXZlbCBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBsdWdfc2V0UGx1Z0xldmVsKQotI2RlZmluZSB1cGx1
Z19zZXRQbHVnTmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBsdWdfc2V0UGx1Z05hbWUp
Ci0jZGVmaW5lIHVwbHVnX3NldFBsdWdOb1VubG9hZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXBsdWdfc2V0UGx1Z05vVW5sb2FkKQotI2RlZmluZSB1cHJvcHNfZ2V0U291cmNlIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1cHJvcHNfZ2V0U291cmNlKQotI2RlZmluZSB1cHJvcHN2ZWNfYWRk
UHJvcGVydHlTdGFydHMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcm9wc3ZlY19hZGRQcm9w
ZXJ0eVN0YXJ0cykKLSNkZWZpbmUgdXBydl9hZXN0cm5jcHkgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVwcnZfYWVzdHJuY3B5KQotI2RlZmluZSB1cHJ2X2FzY2lpRnJvbUViY2RpYyBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXBydl9hc2NpaUZyb21FYmNkaWMpCi0jZGVmaW5lIHVwcnZfYXNj
aWl0b2xvd2VyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2FzY2lpdG9sb3dlcikKLSNk
ZWZpbmUgdXBydl9jYWxsb2MgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfY2FsbG9jKQot
I2RlZmluZSB1cHJ2X2NlaWwgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfY2VpbCkKLSNk
ZWZpbmUgdXBydl9jb21wYXJlQVNDSUlQcm9wZXJ0eU5hbWVzIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1cHJ2X2NvbXBhcmVBU0NJSVByb3BlcnR5TmFtZXMpCi0jZGVmaW5lIHVwcnZfY29tcGFy
ZUVCQ0RJQ1Byb3BlcnR5TmFtZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfY29tcGFy
ZUVCQ0RJQ1Byb3BlcnR5TmFtZXMpCi0jZGVmaW5lIHVwcnZfY29tcGFyZUludkFzY2lpIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2NvbXBhcmVJbnZBc2NpaSkKLSNkZWZpbmUgdXBydl9j
b21wYXJlSW52RWJjZGljIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2NvbXBhcmVJbnZF
YmNkaWMpCi0jZGVmaW5lIHVwcnZfY29tcGFyZUludkViY2RpY0FzQXNjaWkgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVwcnZfY29tcGFyZUludkViY2RpY0FzQXNjaWkpCi0jZGVmaW5lIHVwcnZf
Y29udmVydFRvTENJRCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9jb252ZXJ0VG9MQ0lE
KQotI2RlZmluZSB1cHJ2X2NvbnZlcnRUb1Bvc2l4IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
cHJ2X2NvbnZlcnRUb1Bvc2l4KQotI2RlZmluZSB1cHJ2X2NvcHlBc2NpaSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXBydl9jb3B5QXNjaWkpCi0jZGVmaW5lIHVwcnZfY29weUViY2RpYyBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9jb3B5RWJjZGljKQotI2RlZmluZSB1cHJ2X2RlY0Nv
bnRleHRDbGVhclN0YXR1cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9kZWNDb250ZXh0
Q2xlYXJTdGF0dXMpCi0jZGVmaW5lIHVwcnZfZGVjQ29udGV4dERlZmF1bHQgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVwcnZfZGVjQ29udGV4dERlZmF1bHQpCi0jZGVmaW5lIHVwcnZfZGVjQ29u
dGV4dEdldFJvdW5kaW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY0NvbnRleHRH
ZXRSb3VuZGluZykKLSNkZWZpbmUgdXBydl9kZWNDb250ZXh0R2V0U3RhdHVzIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1cHJ2X2RlY0NvbnRleHRHZXRTdGF0dXMpCi0jZGVmaW5lIHVwcnZfZGVj
Q29udGV4dFJlc3RvcmVTdGF0dXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjQ29u
dGV4dFJlc3RvcmVTdGF0dXMpCi0jZGVmaW5lIHVwcnZfZGVjQ29udGV4dFNhdmVTdGF0dXMgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjQ29udGV4dFNhdmVTdGF0dXMpCi0jZGVmaW5l
IHVwcnZfZGVjQ29udGV4dFNldFJvdW5kaW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2
X2RlY0NvbnRleHRTZXRSb3VuZGluZykKLSNkZWZpbmUgdXBydl9kZWNDb250ZXh0U2V0U3RhdHVz
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY0NvbnRleHRTZXRTdGF0dXMpCi0jZGVm
aW5lIHVwcnZfZGVjQ29udGV4dFNldFN0YXR1c0Zyb21TdHJpbmcgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVwcnZfZGVjQ29udGV4dFNldFN0YXR1c0Zyb21TdHJpbmcpCi0jZGVmaW5lIHVwcnZf
ZGVjQ29udGV4dFNldFN0YXR1c0Zyb21TdHJpbmdRdWlldCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodXBydl9kZWNDb250ZXh0U2V0U3RhdHVzRnJvbVN0cmluZ1F1aWV0KQotI2RlZmluZSB1cHJ2
X2RlY0NvbnRleHRTZXRTdGF0dXNRdWlldCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9k
ZWNDb250ZXh0U2V0U3RhdHVzUXVpZXQpCi0jZGVmaW5lIHVwcnZfZGVjQ29udGV4dFN0YXR1c1Rv
U3RyaW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY0NvbnRleHRTdGF0dXNUb1N0
cmluZykKLSNkZWZpbmUgdXBydl9kZWNDb250ZXh0VGVzdFNhdmVkU3RhdHVzIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1cHJ2X2RlY0NvbnRleHRUZXN0U2F2ZWRTdGF0dXMpCi0jZGVmaW5lIHVw
cnZfZGVjQ29udGV4dFRlc3RTdGF0dXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVj
Q29udGV4dFRlc3RTdGF0dXMpCi0jZGVmaW5lIHVwcnZfZGVjQ29udGV4dFplcm9TdGF0dXMgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjQ29udGV4dFplcm9TdGF0dXMpCi0jZGVmaW5l
IHVwcnZfZGVjTnVtYmVyQWJzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051bWJl
ckFicykKLSNkZWZpbmUgdXBydl9kZWNOdW1iZXJBZGQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVwcnZfZGVjTnVtYmVyQWRkKQotI2RlZmluZSB1cHJ2X2RlY051bWJlckFuZCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXBydl9kZWNOdW1iZXJBbmQpCi0jZGVmaW5lIHVwcnZfZGVjTnVtYmVy
Q2xhc3MgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVyQ2xhc3MpCi0jZGVm
aW5lIHVwcnZfZGVjTnVtYmVyQ2xhc3NUb1N0cmluZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXBydl9kZWNOdW1iZXJDbGFzc1RvU3RyaW5nKQotI2RlZmluZSB1cHJ2X2RlY051bWJlckNvbXBh
cmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVyQ29tcGFyZSkKLSNkZWZp
bmUgdXBydl9kZWNOdW1iZXJDb21wYXJlU2lnbmFsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
cHJ2X2RlY051bWJlckNvbXBhcmVTaWduYWwpCi0jZGVmaW5lIHVwcnZfZGVjTnVtYmVyQ29tcGFy
ZVRvdGFsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051bWJlckNvbXBhcmVUb3Rh
bCkKLSNkZWZpbmUgdXBydl9kZWNOdW1iZXJDb21wYXJlVG90YWxNYWcgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVyQ29tcGFyZVRvdGFsTWFnKQotI2RlZmluZSB1cHJ2X2Rl
Y051bWJlckNvcHkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVyQ29weSkK
LSNkZWZpbmUgdXBydl9kZWNOdW1iZXJDb3B5QWJzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
cHJ2X2RlY051bWJlckNvcHlBYnMpCi0jZGVmaW5lIHVwcnZfZGVjTnVtYmVyQ29weU5lZ2F0ZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9kZWNOdW1iZXJDb3B5TmVnYXRlKQotI2RlZmlu
ZSB1cHJ2X2RlY051bWJlckNvcHlTaWduIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2Rl
Y051bWJlckNvcHlTaWduKQotI2RlZmluZSB1cHJ2X2RlY051bWJlckRpdmlkZSBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXBydl9kZWNOdW1iZXJEaXZpZGUpCi0jZGVmaW5lIHVwcnZfZGVjTnVt
YmVyRGl2aWRlSW50ZWdlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9kZWNOdW1iZXJE
aXZpZGVJbnRlZ2VyKQotI2RlZmluZSB1cHJ2X2RlY051bWJlckV4cCBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodXBydl9kZWNOdW1iZXJFeHApCi0jZGVmaW5lIHVwcnZfZGVjTnVtYmVyRk1BIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051bWJlckZNQSkKLSNkZWZpbmUgdXBydl9k
ZWNOdW1iZXJGcm9tSW50MzIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVy
RnJvbUludDMyKQotI2RlZmluZSB1cHJ2X2RlY051bWJlckZyb21TdHJpbmcgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVyRnJvbVN0cmluZykKLSNkZWZpbmUgdXBydl9kZWNO
dW1iZXJGcm9tVUludDMyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051bWJlckZy
b21VSW50MzIpCi0jZGVmaW5lIHVwcnZfZGVjTnVtYmVyR2V0QkNEIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1cHJ2X2RlY051bWJlckdldEJDRCkKLSNkZWZpbmUgdXBydl9kZWNOdW1iZXJJbnZl
cnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVySW52ZXJ0KQotI2RlZmlu
ZSB1cHJ2X2RlY051bWJlcklzTm9ybWFsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2Rl
Y051bWJlcklzTm9ybWFsKQotI2RlZmluZSB1cHJ2X2RlY051bWJlcklzU3Vibm9ybWFsIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051bWJlcklzU3Vibm9ybWFsKQotI2RlZmluZSB1
cHJ2X2RlY051bWJlckxuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051bWJlckxu
KQotI2RlZmluZSB1cHJ2X2RlY051bWJlckxvZzEwIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
cHJ2X2RlY051bWJlckxvZzEwKQotI2RlZmluZSB1cHJ2X2RlY051bWJlckxvZ0IgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVyTG9nQikKLSNkZWZpbmUgdXBydl9kZWNOdW1i
ZXJNYXggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVyTWF4KQotI2RlZmlu
ZSB1cHJ2X2RlY051bWJlck1heE1hZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9kZWNO
dW1iZXJNYXhNYWcpCi0jZGVmaW5lIHVwcnZfZGVjTnVtYmVyTWluIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1cHJ2X2RlY051bWJlck1pbikKLSNkZWZpbmUgdXBydl9kZWNOdW1iZXJNaW5NYWcg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVyTWluTWFnKQotI2RlZmluZSB1
cHJ2X2RlY051bWJlck1pbnVzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051bWJl
ck1pbnVzKQotI2RlZmluZSB1cHJ2X2RlY051bWJlck11bHRpcGx5IFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1cHJ2X2RlY051bWJlck11bHRpcGx5KQotI2RlZmluZSB1cHJ2X2RlY051bWJlck5l
eHRNaW51cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9kZWNOdW1iZXJOZXh0TWludXMp
Ci0jZGVmaW5lIHVwcnZfZGVjTnVtYmVyTmV4dFBsdXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVwcnZfZGVjTnVtYmVyTmV4dFBsdXMpCi0jZGVmaW5lIHVwcnZfZGVjTnVtYmVyTmV4dFRvd2Fy
ZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9kZWNOdW1iZXJOZXh0VG93YXJkKQotI2Rl
ZmluZSB1cHJ2X2RlY051bWJlck5vcm1hbGl6ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBy
dl9kZWNOdW1iZXJOb3JtYWxpemUpCi0jZGVmaW5lIHVwcnZfZGVjTnVtYmVyT3IgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVyT3IpCi0jZGVmaW5lIHVwcnZfZGVjTnVtYmVy
UGx1cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9kZWNOdW1iZXJQbHVzKQotI2RlZmlu
ZSB1cHJ2X2RlY051bWJlclBvd2VyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051
bWJlclBvd2VyKQotI2RlZmluZSB1cHJ2X2RlY051bWJlclF1YW50aXplIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1cHJ2X2RlY051bWJlclF1YW50aXplKQotI2RlZmluZSB1cHJ2X2RlY051bWJl
clJlZHVjZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9kZWNOdW1iZXJSZWR1Y2UpCi0j
ZGVmaW5lIHVwcnZfZGVjTnVtYmVyUmVtYWluZGVyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
cHJ2X2RlY051bWJlclJlbWFpbmRlcikKLSNkZWZpbmUgdXBydl9kZWNOdW1iZXJSZW1haW5kZXJO
ZWFyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051bWJlclJlbWFpbmRlck5lYXIp
Ci0jZGVmaW5lIHVwcnZfZGVjTnVtYmVyUmVzY2FsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXBydl9kZWNOdW1iZXJSZXNjYWxlKQotI2RlZmluZSB1cHJ2X2RlY051bWJlclJvdGF0ZSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9kZWNOdW1iZXJSb3RhdGUpCi0jZGVmaW5lIHVwcnZf
ZGVjTnVtYmVyU2FtZVF1YW50dW0gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVt
YmVyU2FtZVF1YW50dW0pCi0jZGVmaW5lIHVwcnZfZGVjTnVtYmVyU2NhbGVCIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051bWJlclNjYWxlQikKLSNkZWZpbmUgdXBydl9kZWNOdW1i
ZXJTZXRCQ0QgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVyU2V0QkNEKQot
I2RlZmluZSB1cHJ2X2RlY051bWJlclNoaWZ0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2
X2RlY051bWJlclNoaWZ0KQotI2RlZmluZSB1cHJ2X2RlY051bWJlclNxdWFyZVJvb3QgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVyU3F1YXJlUm9vdCkKLSNkZWZpbmUgdXBy
dl9kZWNOdW1iZXJTdWJ0cmFjdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9kZWNOdW1i
ZXJTdWJ0cmFjdCkKLSNkZWZpbmUgdXBydl9kZWNOdW1iZXJUb0VuZ1N0cmluZyBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXBydl9kZWNOdW1iZXJUb0VuZ1N0cmluZykKLSNkZWZpbmUgdXBydl9k
ZWNOdW1iZXJUb0ludDMyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051bWJlclRv
SW50MzIpCi0jZGVmaW5lIHVwcnZfZGVjTnVtYmVyVG9JbnRlZ3JhbEV4YWN0IFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051bWJlclRvSW50ZWdyYWxFeGFjdCkKLSNkZWZpbmUgdXBy
dl9kZWNOdW1iZXJUb0ludGVncmFsVmFsdWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZf
ZGVjTnVtYmVyVG9JbnRlZ3JhbFZhbHVlKQotI2RlZmluZSB1cHJ2X2RlY051bWJlclRvU3RyaW5n
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051bWJlclRvU3RyaW5nKQotI2RlZmlu
ZSB1cHJ2X2RlY051bWJlclRvVUludDMyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2Rl
Y051bWJlclRvVUludDMyKQotI2RlZmluZSB1cHJ2X2RlY051bWJlclRyaW0gVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVwcnZfZGVjTnVtYmVyVHJpbSkKLSNkZWZpbmUgdXBydl9kZWNOdW1iZXJW
ZXJzaW9uIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlY051bWJlclZlcnNpb24pCi0j
ZGVmaW5lIHVwcnZfZGVjTnVtYmVyWG9yIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2Rl
Y051bWJlclhvcikKLSNkZWZpbmUgdXBydl9kZWNOdW1iZXJaZXJvIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1cHJ2X2RlY051bWJlclplcm8pCi0jZGVmaW5lIHVwcnZfZGVsZXRlQ29uZGl0aW9u
YWxDRTMyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2RlbGV0ZUNvbmRpdGlvbmFsQ0Uz
MikKLSNkZWZpbmUgdXBydl9kZWxldGVVT2JqZWN0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
cHJ2X2RlbGV0ZVVPYmplY3QpCi0jZGVmaW5lIHVwcnZfZGxfY2xvc2UgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVwcnZfZGxfY2xvc2UpCi0jZGVmaW5lIHVwcnZfZGxfb3BlbiBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXBydl9kbF9vcGVuKQotI2RlZmluZSB1cHJ2X2Rsc3ltX2Z1bmMgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZGxzeW1fZnVuYykKLSNkZWZpbmUgdXBydl9lYXN0
cm5jcHkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZWFzdHJuY3B5KQotI2RlZmluZSB1
cHJ2X2ViY2RpY0Zyb21Bc2NpaSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9lYmNkaWNG
cm9tQXNjaWkpCi0jZGVmaW5lIHVwcnZfZWJjZGljVG9Mb3dlcmNhc2VBc2NpaSBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXBydl9lYmNkaWNUb0xvd2VyY2FzZUFzY2lpKQotI2RlZmluZSB1cHJ2
X2ViY2RpY3RvbG93ZXIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZWJjZGljdG9sb3dl
cikKLSNkZWZpbmUgdXBydl9mYWJzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2ZhYnMp
Ci0jZGVmaW5lIHVwcnZfZmxvb3IgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZmxvb3Ip
Ci0jZGVmaW5lIHVwcnZfZm1heCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9mbWF4KQot
I2RlZmluZSB1cHJ2X2ZtaW4gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfZm1pbikKLSNk
ZWZpbmUgdXBydl9mbW9kIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2Ztb2QpCi0jZGVm
aW5lIHVwcnZfZnJlZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9mcmVlKQotI2RlZmlu
ZSB1cHJ2X2dldENoYXJOYW1lQ2hhcmFjdGVycyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBy
dl9nZXRDaGFyTmFtZUNoYXJhY3RlcnMpCi0jZGVmaW5lIHVwcnZfZ2V0RGVmYXVsdENvZGVwYWdl
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2dldERlZmF1bHRDb2RlcGFnZSkKLSNkZWZp
bmUgdXBydl9nZXREZWZhdWx0TG9jYWxlSUQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZf
Z2V0RGVmYXVsdExvY2FsZUlEKQotI2RlZmluZSB1cHJ2X2dldEluZmluaXR5IFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1cHJ2X2dldEluZmluaXR5KQotI2RlZmluZSB1cHJ2X2dldE1heENoYXJO
YW1lTGVuZ3RoIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2dldE1heENoYXJOYW1lTGVu
Z3RoKQotI2RlZmluZSB1cHJ2X2dldE1heFZhbHVlcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXBydl9nZXRNYXhWYWx1ZXMpCi0jZGVmaW5lIHVwcnZfZ2V0TmFOIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1cHJ2X2dldE5hTikKLSNkZWZpbmUgdXBydl9nZXRSYXdVVEN0aW1lIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2dldFJhd1VUQ3RpbWUpCi0jZGVmaW5lIHVwcnZfZ2V0U3Rh
dGljQ3VycmVuY3lOYW1lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2dldFN0YXRpY0N1
cnJlbmN5TmFtZSkKLSNkZWZpbmUgdXBydl9nZXRVVEN0aW1lIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1cHJ2X2dldFVUQ3RpbWUpCi0jZGVmaW5lIHVwcnZfaGF2ZVByb3BlcnRpZXMgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfaGF2ZVByb3BlcnRpZXMpCi0jZGVmaW5lIHVwcnZfaW50
MzJDb21wYXJhdG9yIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2ludDMyQ29tcGFyYXRv
cikKLSNkZWZpbmUgdXBydl9pc0FTQ0lJTGV0dGVyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
cHJ2X2lzQVNDSUlMZXR0ZXIpCi0jZGVmaW5lIHVwcnZfaXNJbmZpbml0ZSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXBydl9pc0luZmluaXRlKQotI2RlZmluZSB1cHJ2X2lzSW52YXJpYW50U3Ry
aW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2lzSW52YXJpYW50U3RyaW5nKQotI2Rl
ZmluZSB1cHJ2X2lzSW52YXJpYW50VVN0cmluZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBy
dl9pc0ludmFyaWFudFVTdHJpbmcpCi0jZGVmaW5lIHVwcnZfaXNOYU4gVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVwcnZfaXNOYU4pCi0jZGVmaW5lIHVwcnZfaXNOZWdhdGl2ZUluZmluaXR5IFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X2lzTmVnYXRpdmVJbmZpbml0eSkKLSNkZWZpbmUg
dXBydl9pc1Bvc2l0aXZlSW5maW5pdHkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfaXNQ
b3NpdGl2ZUluZmluaXR5KQotI2RlZmluZSB1cHJ2X2l0b3UgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVwcnZfaXRvdSkKLSNkZWZpbmUgdXBydl9sb2cgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVwcnZfbG9nKQotI2RlZmluZSB1cHJ2X21hbGxvYyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXBydl9tYWxsb2MpCi0jZGVmaW5lIHVwcnZfbWFwRmlsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodXBydl9tYXBGaWxlKQotI2RlZmluZSB1cHJ2X21heCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodXBydl9tYXgpCi0jZGVmaW5lIHVwcnZfbWF4TWFudGlzc2EgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVwcnZfbWF4TWFudGlzc2EpCi0jZGVmaW5lIHVwcnZfbWF4aW11bVB0ciBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXBydl9tYXhpbXVtUHRyKQotI2RlZmluZSB1cHJ2X21pbiBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9taW4pCi0jZGVmaW5lIHVwcnZfbW9kZiBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXBydl9tb2RmKQotI2RlZmluZSB1cHJ2X3BhcnNlQ3VycmVuY3kg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfcGFyc2VDdXJyZW5jeSkKLSNkZWZpbmUgdXBy
dl9wYXRoSXNBYnNvbHV0ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9wYXRoSXNBYnNv
bHV0ZSkKLSNkZWZpbmUgdXBydl9wb3cgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfcG93
KQotI2RlZmluZSB1cHJ2X3BvdzEwIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X3BvdzEw
KQotI2RlZmluZSB1cHJ2X3JlYWxsb2MgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfcmVh
bGxvYykKLSNkZWZpbmUgdXBydl9yb3VuZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9y
b3VuZCkKLSNkZWZpbmUgdXBydl9zb3J0QXJyYXkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVw
cnZfc29ydEFycmF5KQotI2RlZmluZSB1cHJ2X3N0YWJsZUJpbmFyeVNlYXJjaCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXBydl9zdGFibGVCaW5hcnlTZWFyY2gpCi0jZGVmaW5lIHVwcnZfc3Ry
Q29tcGFyZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9zdHJDb21wYXJlKQotI2RlZmlu
ZSB1cHJ2X3N0cmR1cCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9zdHJkdXApCi0jZGVm
aW5lIHVwcnZfc3RyaWNtcCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9zdHJpY21wKQot
I2RlZmluZSB1cHJ2X3N0cm5kdXAgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfc3RybmR1
cCkKLSNkZWZpbmUgdXBydl9zdHJuaWNtcCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl9z
dHJuaWNtcCkKLSNkZWZpbmUgdXBydl9zeW50YXhFcnJvciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodXBydl9zeW50YXhFcnJvcikKLSNkZWZpbmUgdXBydl90aW1lem9uZSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXBydl90aW1lem9uZSkKLSNkZWZpbmUgdXBydl90b3VwcGVyIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1cHJ2X3RvdXBwZXIpCi0jZGVmaW5lIHVwcnZfdHJ1bmMgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVwcnZfdHJ1bmMpCi0jZGVmaW5lIHVwcnZfdHpuYW1lIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X3R6bmFtZSkKLSNkZWZpbmUgdXBydl90enNldCBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXBydl90enNldCkKLSNkZWZpbmUgdXBydl91aW50MTZDb21w
YXJhdG9yIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHJ2X3VpbnQxNkNvbXBhcmF0b3IpCi0j
ZGVmaW5lIHVwcnZfdWludDMyQ29tcGFyYXRvciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXBy
dl91aW50MzJDb21wYXJhdG9yKQotI2RlZmluZSB1cHJ2X3VubWFwRmlsZSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXBydl91bm1hcEZpbGUpCi0jZGVmaW5lIHVwdmVjX2Nsb25lQXJyYXkgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwdmVjX2Nsb25lQXJyYXkpCi0jZGVmaW5lIHVwdmVjX2Ns
b3NlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHZlY19jbG9zZSkKLSNkZWZpbmUgdXB2ZWNf
Y29tcGFjdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXB2ZWNfY29tcGFjdCkKLSNkZWZpbmUg
dXB2ZWNfY29tcGFjdFRvVVRyaWUySGFuZGxlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXB2
ZWNfY29tcGFjdFRvVVRyaWUySGFuZGxlcikKLSNkZWZpbmUgdXB2ZWNfY29tcGFjdFRvVVRyaWUy
V2l0aFJvd0luZGV4ZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwdmVjX2NvbXBhY3RUb1VU
cmllMldpdGhSb3dJbmRleGVzKQotI2RlZmluZSB1cHZlY19nZXRBcnJheSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXB2ZWNfZ2V0QXJyYXkpCi0jZGVmaW5lIHVwdmVjX2dldFJvdyBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXB2ZWNfZ2V0Um93KQotI2RlZmluZSB1cHZlY19nZXRWYWx1ZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXB2ZWNfZ2V0VmFsdWUpCi0jZGVmaW5lIHVwdmVjX29w
ZW4gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVwdmVjX29wZW4pCi0jZGVmaW5lIHVwdmVjX3Nl
dFZhbHVlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cHZlY19zZXRWYWx1ZSkKLSNkZWZpbmUg
dXJlZ2V4X2FwcGVuZFJlcGxhY2VtZW50IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVnZXhf
YXBwZW5kUmVwbGFjZW1lbnQpCi0jZGVmaW5lIHVyZWdleF9hcHBlbmRSZXBsYWNlbWVudFVUZXh0
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVnZXhfYXBwZW5kUmVwbGFjZW1lbnRVVGV4dCkK
LSNkZWZpbmUgdXJlZ2V4X2FwcGVuZFRhaWwgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdl
eF9hcHBlbmRUYWlsKQotI2RlZmluZSB1cmVnZXhfYXBwZW5kVGFpbFVUZXh0IFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1cmVnZXhfYXBwZW5kVGFpbFVUZXh0KQotI2RlZmluZSB1cmVnZXhfY2xv
bmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9jbG9uZSkKLSNkZWZpbmUgdXJlZ2V4
X2Nsb3NlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVnZXhfY2xvc2UpCi0jZGVmaW5lIHVy
ZWdleF9lbmQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9lbmQpCi0jZGVmaW5lIHVy
ZWdleF9lbmQ2NCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X2VuZDY0KQotI2RlZmlu
ZSB1cmVnZXhfZmluZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X2ZpbmQpCi0jZGVm
aW5lIHVyZWdleF9maW5kNjQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9maW5kNjQp
Ci0jZGVmaW5lIHVyZWdleF9maW5kTmV4dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4
X2ZpbmROZXh0KQotI2RlZmluZSB1cmVnZXhfZmxhZ3MgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVyZWdleF9mbGFncykKLSNkZWZpbmUgdXJlZ2V4X2dldEZpbmRQcm9ncmVzc0NhbGxiYWNrIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVnZXhfZ2V0RmluZFByb2dyZXNzQ2FsbGJhY2spCi0j
ZGVmaW5lIHVyZWdleF9nZXRNYXRjaENhbGxiYWNrIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
cmVnZXhfZ2V0TWF0Y2hDYWxsYmFjaykKLSNkZWZpbmUgdXJlZ2V4X2dldFN0YWNrTGltaXQgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9nZXRTdGFja0xpbWl0KQotI2RlZmluZSB1cmVn
ZXhfZ2V0VGV4dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X2dldFRleHQpCi0jZGVm
aW5lIHVyZWdleF9nZXRUaW1lTGltaXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9n
ZXRUaW1lTGltaXQpCi0jZGVmaW5lIHVyZWdleF9nZXRVVGV4dCBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodXJlZ2V4X2dldFVUZXh0KQotI2RlZmluZSB1cmVnZXhfZ3JvdXAgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVyZWdleF9ncm91cCkKLSNkZWZpbmUgdXJlZ2V4X2dyb3VwQ291bnQgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9ncm91cENvdW50KQotI2RlZmluZSB1cmVnZXhf
Z3JvdXBOdW1iZXJGcm9tQ05hbWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9ncm91
cE51bWJlckZyb21DTmFtZSkKLSNkZWZpbmUgdXJlZ2V4X2dyb3VwTnVtYmVyRnJvbU5hbWUgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9ncm91cE51bWJlckZyb21OYW1lKQotI2RlZmlu
ZSB1cmVnZXhfZ3JvdXBVVGV4dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X2dyb3Vw
VVRleHQpCi0jZGVmaW5lIHVyZWdleF9oYXNBbmNob3JpbmdCb3VuZHMgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVyZWdleF9oYXNBbmNob3JpbmdCb3VuZHMpCi0jZGVmaW5lIHVyZWdleF9oYXNU
cmFuc3BhcmVudEJvdW5kcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X2hhc1RyYW5z
cGFyZW50Qm91bmRzKQotI2RlZmluZSB1cmVnZXhfaGl0RW5kIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1cmVnZXhfaGl0RW5kKQotI2RlZmluZSB1cmVnZXhfbG9va2luZ0F0IFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1cmVnZXhfbG9va2luZ0F0KQotI2RlZmluZSB1cmVnZXhfbG9va2luZ0F0
NjQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9sb29raW5nQXQ2NCkKLSNkZWZpbmUg
dXJlZ2V4X21hdGNoZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9tYXRjaGVzKQot
I2RlZmluZSB1cmVnZXhfbWF0Y2hlczY0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVnZXhf
bWF0Y2hlczY0KQotI2RlZmluZSB1cmVnZXhfb3BlbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXJlZ2V4X29wZW4pCi0jZGVmaW5lIHVyZWdleF9vcGVuQyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodXJlZ2V4X29wZW5DKQotI2RlZmluZSB1cmVnZXhfb3BlblVUZXh0IFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1cmVnZXhfb3BlblVUZXh0KQotI2RlZmluZSB1cmVnZXhfcGF0dGVybiBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X3BhdHRlcm4pCi0jZGVmaW5lIHVyZWdleF9wYXR0
ZXJuVVRleHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9wYXR0ZXJuVVRleHQpCi0j
ZGVmaW5lIHVyZWdleF9yZWZyZXNoVVRleHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdl
eF9yZWZyZXNoVVRleHQpCi0jZGVmaW5lIHVyZWdleF9yZWdpb25FbmQgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVyZWdleF9yZWdpb25FbmQpCi0jZGVmaW5lIHVyZWdleF9yZWdpb25FbmQ2NCBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X3JlZ2lvbkVuZDY0KQotI2RlZmluZSB1cmVn
ZXhfcmVnaW9uU3RhcnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9yZWdpb25TdGFy
dCkKLSNkZWZpbmUgdXJlZ2V4X3JlZ2lvblN0YXJ0NjQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVyZWdleF9yZWdpb25TdGFydDY0KQotI2RlZmluZSB1cmVnZXhfcmVwbGFjZUFsbCBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X3JlcGxhY2VBbGwpCi0jZGVmaW5lIHVyZWdleF9yZXBs
YWNlQWxsVVRleHQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9yZXBsYWNlQWxsVVRl
eHQpCi0jZGVmaW5lIHVyZWdleF9yZXBsYWNlRmlyc3QgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVyZWdleF9yZXBsYWNlRmlyc3QpCi0jZGVmaW5lIHVyZWdleF9yZXBsYWNlRmlyc3RVVGV4dCBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X3JlcGxhY2VGaXJzdFVUZXh0KQotI2RlZmlu
ZSB1cmVnZXhfcmVxdWlyZUVuZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X3JlcXVp
cmVFbmQpCi0jZGVmaW5lIHVyZWdleF9yZXNldCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJl
Z2V4X3Jlc2V0KQotI2RlZmluZSB1cmVnZXhfcmVzZXQ2NCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodXJlZ2V4X3Jlc2V0NjQpCi0jZGVmaW5lIHVyZWdleF9zZXRGaW5kUHJvZ3Jlc3NDYWxsYmFj
ayBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X3NldEZpbmRQcm9ncmVzc0NhbGxiYWNr
KQotI2RlZmluZSB1cmVnZXhfc2V0TWF0Y2hDYWxsYmFjayBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodXJlZ2V4X3NldE1hdGNoQ2FsbGJhY2spCi0jZGVmaW5lIHVyZWdleF9zZXRSZWdpb24gVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9zZXRSZWdpb24pCi0jZGVmaW5lIHVyZWdleF9z
ZXRSZWdpb242NCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X3NldFJlZ2lvbjY0KQot
I2RlZmluZSB1cmVnZXhfc2V0UmVnaW9uQW5kU3RhcnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVyZWdleF9zZXRSZWdpb25BbmRTdGFydCkKLSNkZWZpbmUgdXJlZ2V4X3NldFN0YWNrTGltaXQg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9zZXRTdGFja0xpbWl0KQotI2RlZmluZSB1
cmVnZXhfc2V0VGV4dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X3NldFRleHQpCi0j
ZGVmaW5lIHVyZWdleF9zZXRUaW1lTGltaXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdl
eF9zZXRUaW1lTGltaXQpCi0jZGVmaW5lIHVyZWdleF9zZXRVVGV4dCBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodXJlZ2V4X3NldFVUZXh0KQotI2RlZmluZSB1cmVnZXhfc3BsaXQgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVyZWdleF9zcGxpdCkKLSNkZWZpbmUgdXJlZ2V4X3NwbGl0VVRleHQg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9zcGxpdFVUZXh0KQotI2RlZmluZSB1cmVn
ZXhfc3RhcnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9zdGFydCkKLSNkZWZpbmUg
dXJlZ2V4X3N0YXJ0NjQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdleF9zdGFydDY0KQot
I2RlZmluZSB1cmVnZXhfdWNzdHJfdW5lc2NhcGVfY2hhckF0IFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1cmVnZXhfdWNzdHJfdW5lc2NhcGVfY2hhckF0KQotI2RlZmluZSB1cmVnZXhfdXNlQW5j
aG9yaW5nQm91bmRzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVnZXhfdXNlQW5jaG9yaW5n
Qm91bmRzKQotI2RlZmluZSB1cmVnZXhfdXNlVHJhbnNwYXJlbnRCb3VuZHMgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVyZWdleF91c2VUcmFuc3BhcmVudEJvdW5kcykKLSNkZWZpbmUgdXJlZ2V4
X3V0ZXh0X3VuZXNjYXBlX2NoYXJBdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2V4X3V0
ZXh0X3VuZXNjYXBlX2NoYXJBdCkKLSNkZWZpbmUgdXJlZ2lvbl9hcmVFcXVhbCBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXJlZ2lvbl9hcmVFcXVhbCkKLSNkZWZpbmUgdXJlZ2lvbl9jb250YWlu
cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2lvbl9jb250YWlucykKLSNkZWZpbmUgdXJl
Z2lvbl9nZXRBdmFpbGFibGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdpb25fZ2V0QXZh
aWxhYmxlKQotI2RlZmluZSB1cmVnaW9uX2dldENvbnRhaW5lZFJlZ2lvbnMgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVyZWdpb25fZ2V0Q29udGFpbmVkUmVnaW9ucykKLSNkZWZpbmUgdXJlZ2lv
bl9nZXRDb250YWluZWRSZWdpb25zT2ZUeXBlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVn
aW9uX2dldENvbnRhaW5lZFJlZ2lvbnNPZlR5cGUpCi0jZGVmaW5lIHVyZWdpb25fZ2V0Q29udGFp
bmluZ1JlZ2lvbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2lvbl9nZXRDb250YWluaW5n
UmVnaW9uKQotI2RlZmluZSB1cmVnaW9uX2dldENvbnRhaW5pbmdSZWdpb25PZlR5cGUgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVyZWdpb25fZ2V0Q29udGFpbmluZ1JlZ2lvbk9mVHlwZSkKLSNk
ZWZpbmUgdXJlZ2lvbl9nZXROdW1lcmljQ29kZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJl
Z2lvbl9nZXROdW1lcmljQ29kZSkKLSNkZWZpbmUgdXJlZ2lvbl9nZXRQcmVmZXJyZWRWYWx1ZXMg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdpb25fZ2V0UHJlZmVycmVkVmFsdWVzKQotI2Rl
ZmluZSB1cmVnaW9uX2dldFJlZ2lvbkNvZGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdp
b25fZ2V0UmVnaW9uQ29kZSkKLSNkZWZpbmUgdXJlZ2lvbl9nZXRSZWdpb25Gcm9tQ29kZSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlZ2lvbl9nZXRSZWdpb25Gcm9tQ29kZSkKLSNkZWZpbmUg
dXJlZ2lvbl9nZXRSZWdpb25Gcm9tTnVtZXJpY0NvZGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVyZWdpb25fZ2V0UmVnaW9uRnJvbU51bWVyaWNDb2RlKQotI2RlZmluZSB1cmVnaW9uX2dldFR5
cGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZWdpb25fZ2V0VHlwZSkKLSNkZWZpbmUgdXJl
c19jbG9zZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlc19jbG9zZSkKLSNkZWZpbmUgdXJl
c19jb3B5UmVzYiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlc19jb3B5UmVzYikKLSNkZWZp
bmUgdXJlc19jb3VudEFycmF5SXRlbXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZXNfY291
bnRBcnJheUl0ZW1zKQotI2RlZmluZSB1cmVzX2ZpbmRSZXNvdXJjZSBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodXJlc19maW5kUmVzb3VyY2UpCi0jZGVmaW5lIHVyZXNfZmluZFN1YlJlc291cmNl
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX2ZpbmRTdWJSZXNvdXJjZSkKLSNkZWZpbmUg
dXJlc19nZXRCaW5hcnkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZXNfZ2V0QmluYXJ5KQot
I2RlZmluZSB1cmVzX2dldEJ5SW5kZXggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZXNfZ2V0
QnlJbmRleCkKLSNkZWZpbmUgdXJlc19nZXRCeUtleSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXJlc19nZXRCeUtleSkKLSNkZWZpbmUgdXJlc19nZXRCeUtleVdpdGhGYWxsYmFjayBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXJlc19nZXRCeUtleVdpdGhGYWxsYmFjaykKLSNkZWZpbmUgdXJl
c19nZXRGdW5jdGlvbmFsRXF1aXZhbGVudCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlc19n
ZXRGdW5jdGlvbmFsRXF1aXZhbGVudCkKLSNkZWZpbmUgdXJlc19nZXRJbnQgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVyZXNfZ2V0SW50KQotI2RlZmluZSB1cmVzX2dldEludFZlY3RvciBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlc19nZXRJbnRWZWN0b3IpCi0jZGVmaW5lIHVyZXNfZ2V0
S2V5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX2dldEtleSkKLSNkZWZpbmUgdXJlc19n
ZXRLZXl3b3JkVmFsdWVzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX2dldEtleXdvcmRW
YWx1ZXMpCi0jZGVmaW5lIHVyZXNfZ2V0TG9jYWxlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
cmVzX2dldExvY2FsZSkKLSNkZWZpbmUgdXJlc19nZXRMb2NhbGVCeVR5cGUgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHVyZXNfZ2V0TG9jYWxlQnlUeXBlKQotI2RlZmluZSB1cmVzX2dldExvY2Fs
ZUludGVybmFsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX2dldExvY2FsZUludGVybmFs
KQotI2RlZmluZSB1cmVzX2dldE5hbWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZXNfZ2V0
TmFtZSkKLSNkZWZpbmUgdXJlc19nZXROZXh0UmVzb3VyY2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHVyZXNfZ2V0TmV4dFJlc291cmNlKQotI2RlZmluZSB1cmVzX2dldE5leHRTdHJpbmcgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZXNfZ2V0TmV4dFN0cmluZykKLSNkZWZpbmUgdXJlc19n
ZXRTaXplIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX2dldFNpemUpCi0jZGVmaW5lIHVy
ZXNfZ2V0U3RyaW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX2dldFN0cmluZykKLSNk
ZWZpbmUgdXJlc19nZXRTdHJpbmdCeUluZGV4IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVz
X2dldFN0cmluZ0J5SW5kZXgpCi0jZGVmaW5lIHVyZXNfZ2V0U3RyaW5nQnlLZXkgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVyZXNfZ2V0U3RyaW5nQnlLZXkpCi0jZGVmaW5lIHVyZXNfZ2V0U3Ry
aW5nQnlLZXlXaXRoRmFsbGJhY2sgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZXNfZ2V0U3Ry
aW5nQnlLZXlXaXRoRmFsbGJhY2spCi0jZGVmaW5lIHVyZXNfZ2V0VHlwZSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXJlc19nZXRUeXBlKQotI2RlZmluZSB1cmVzX2dldFVJbnQgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVyZXNfZ2V0VUludCkKLSNkZWZpbmUgdXJlc19nZXRVVEY4U3RyaW5n
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX2dldFVURjhTdHJpbmcpCi0jZGVmaW5lIHVy
ZXNfZ2V0VVRGOFN0cmluZ0J5SW5kZXggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZXNfZ2V0
VVRGOFN0cmluZ0J5SW5kZXgpCi0jZGVmaW5lIHVyZXNfZ2V0VVRGOFN0cmluZ0J5S2V5IFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX2dldFVURjhTdHJpbmdCeUtleSkKLSNkZWZpbmUgdXJl
c19nZXRWZXJzaW9uIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX2dldFZlcnNpb24pCi0j
ZGVmaW5lIHVyZXNfZ2V0VmVyc2lvbkJ5S2V5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVz
X2dldFZlcnNpb25CeUtleSkKLSNkZWZpbmUgdXJlc19nZXRWZXJzaW9uTnVtYmVyIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1cmVzX2dldFZlcnNpb25OdW1iZXIpCi0jZGVmaW5lIHVyZXNfZ2V0
VmVyc2lvbk51bWJlckludGVybmFsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX2dldFZl
cnNpb25OdW1iZXJJbnRlcm5hbCkKLSNkZWZpbmUgdXJlc19oYXNOZXh0IFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1cmVzX2hhc05leHQpCi0jZGVmaW5lIHVyZXNfaW5pdFN0YWNrT2JqZWN0IFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX2luaXRTdGFja09iamVjdCkKLSNkZWZpbmUgdXJl
c19vcGVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX29wZW4pCi0jZGVmaW5lIHVyZXNf
b3BlbkF2YWlsYWJsZUxvY2FsZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZXNfb3BlbkF2
YWlsYWJsZUxvY2FsZXMpCi0jZGVmaW5lIHVyZXNfb3BlbkRpcmVjdCBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodXJlc19vcGVuRGlyZWN0KQotI2RlZmluZSB1cmVzX29wZW5GaWxsSW4gVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVyZXNfb3BlbkZpbGxJbikKLSNkZWZpbmUgdXJlc19vcGVuTm9E
ZWZhdWx0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1cmVzX29wZW5Ob0RlZmF1bHQpCi0jZGVm
aW5lIHVyZXNfb3BlblUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVyZXNfb3BlblUpCi0jZGVm
aW5lIHVyZXNfcmVzZXRJdGVyYXRvciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXJlc19yZXNl
dEl0ZXJhdG9yKQotI2RlZmluZSB1cmVzX3N3YXAgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVy
ZXNfc3dhcCkKLSNkZWZpbmUgdXNjcmlwdF9icmVha3NCZXR3ZWVuTGV0dGVycyBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXNjcmlwdF9icmVha3NCZXR3ZWVuTGV0dGVycykKLSNkZWZpbmUgdXNj
cmlwdF9jbG9zZVJ1biBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNjcmlwdF9jbG9zZVJ1bikK
LSNkZWZpbmUgdXNjcmlwdF9nZXRDb2RlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2NyaXB0
X2dldENvZGUpCi0jZGVmaW5lIHVzY3JpcHRfZ2V0TmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodXNjcmlwdF9nZXROYW1lKQotI2RlZmluZSB1c2NyaXB0X2dldFNhbXBsZVN0cmluZyBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXNjcmlwdF9nZXRTYW1wbGVTdHJpbmcpCi0jZGVmaW5lIHVz
Y3JpcHRfZ2V0U2FtcGxlVW5pY29kZVN0cmluZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNj
cmlwdF9nZXRTYW1wbGVVbmljb2RlU3RyaW5nKQotI2RlZmluZSB1c2NyaXB0X2dldFNjcmlwdCBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNjcmlwdF9nZXRTY3JpcHQpCi0jZGVmaW5lIHVzY3Jp
cHRfZ2V0U2NyaXB0RXh0ZW5zaW9ucyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNjcmlwdF9n
ZXRTY3JpcHRFeHRlbnNpb25zKQotI2RlZmluZSB1c2NyaXB0X2dldFNob3J0TmFtZSBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXNjcmlwdF9nZXRTaG9ydE5hbWUpCi0jZGVmaW5lIHVzY3JpcHRf
Z2V0VXNhZ2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzY3JpcHRfZ2V0VXNhZ2UpCi0jZGVm
aW5lIHVzY3JpcHRfaGFzU2NyaXB0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2NyaXB0X2hh
c1NjcmlwdCkKLSNkZWZpbmUgdXNjcmlwdF9pc0Nhc2VkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1c2NyaXB0X2lzQ2FzZWQpCi0jZGVmaW5lIHVzY3JpcHRfaXNSaWdodFRvTGVmdCBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXNjcmlwdF9pc1JpZ2h0VG9MZWZ0KQotI2RlZmluZSB1c2NyaXB0
X25leHRSdW4gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzY3JpcHRfbmV4dFJ1bikKLSNkZWZp
bmUgdXNjcmlwdF9vcGVuUnVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2NyaXB0X29wZW5S
dW4pCi0jZGVmaW5lIHVzY3JpcHRfcmVzZXRSdW4gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVz
Y3JpcHRfcmVzZXRSdW4pCi0jZGVmaW5lIHVzY3JpcHRfc2V0UnVuVGV4dCBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXNjcmlwdF9zZXRSdW5UZXh0KQotI2RlZmluZSB1c2VhcmNoX2Nsb3NlIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2VhcmNoX2Nsb3NlKQotI2RlZmluZSB1c2VhcmNoX2Zp
cnN0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2VhcmNoX2ZpcnN0KQotI2RlZmluZSB1c2Vh
cmNoX2ZvbGxvd2luZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNlYXJjaF9mb2xsb3dpbmcp
Ci0jZGVmaW5lIHVzZWFyY2hfZ2V0QXR0cmlidXRlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
c2VhcmNoX2dldEF0dHJpYnV0ZSkKLSNkZWZpbmUgdXNlYXJjaF9nZXRCcmVha0l0ZXJhdG9yIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2VhcmNoX2dldEJyZWFrSXRlcmF0b3IpCi0jZGVmaW5l
IHVzZWFyY2hfZ2V0Q29sbGF0b3IgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzZWFyY2hfZ2V0
Q29sbGF0b3IpCi0jZGVmaW5lIHVzZWFyY2hfZ2V0TWF0Y2hlZExlbmd0aCBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXNlYXJjaF9nZXRNYXRjaGVkTGVuZ3RoKQotI2RlZmluZSB1c2VhcmNoX2dl
dE1hdGNoZWRTdGFydCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNlYXJjaF9nZXRNYXRjaGVk
U3RhcnQpCi0jZGVmaW5lIHVzZWFyY2hfZ2V0TWF0Y2hlZFRleHQgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVzZWFyY2hfZ2V0TWF0Y2hlZFRleHQpCi0jZGVmaW5lIHVzZWFyY2hfZ2V0T2Zmc2V0
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2VhcmNoX2dldE9mZnNldCkKLSNkZWZpbmUgdXNl
YXJjaF9nZXRQYXR0ZXJuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2VhcmNoX2dldFBhdHRl
cm4pCi0jZGVmaW5lIHVzZWFyY2hfZ2V0VGV4dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNl
YXJjaF9nZXRUZXh0KQotI2RlZmluZSB1c2VhcmNoX2hhbmRsZU5leHRDYW5vbmljYWwgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVzZWFyY2hfaGFuZGxlTmV4dENhbm9uaWNhbCkKLSNkZWZpbmUg
dXNlYXJjaF9oYW5kbGVOZXh0RXhhY3QgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzZWFyY2hf
aGFuZGxlTmV4dEV4YWN0KQotI2RlZmluZSB1c2VhcmNoX2hhbmRsZVByZXZpb3VzQ2Fub25pY2Fs
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2VhcmNoX2hhbmRsZVByZXZpb3VzQ2Fub25pY2Fs
KQotI2RlZmluZSB1c2VhcmNoX2hhbmRsZVByZXZpb3VzRXhhY3QgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVzZWFyY2hfaGFuZGxlUHJldmlvdXNFeGFjdCkKLSNkZWZpbmUgdXNlYXJjaF9sYXN0
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2VhcmNoX2xhc3QpCi0jZGVmaW5lIHVzZWFyY2hf
bmV4dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNlYXJjaF9uZXh0KQotI2RlZmluZSB1c2Vh
cmNoX29wZW4gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzZWFyY2hfb3BlbikKLSNkZWZpbmUg
dXNlYXJjaF9vcGVuRnJvbUNvbGxhdG9yIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2VhcmNo
X29wZW5Gcm9tQ29sbGF0b3IpCi0jZGVmaW5lIHVzZWFyY2hfcHJlY2VkaW5nIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1c2VhcmNoX3ByZWNlZGluZykKLSNkZWZpbmUgdXNlYXJjaF9wcmV2aW91
cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNlYXJjaF9wcmV2aW91cykKLSNkZWZpbmUgdXNl
YXJjaF9yZXNldCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNlYXJjaF9yZXNldCkKLSNkZWZp
bmUgdXNlYXJjaF9zZWFyY2ggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzZWFyY2hfc2VhcmNo
KQotI2RlZmluZSB1c2VhcmNoX3NlYXJjaEJhY2t3YXJkcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodXNlYXJjaF9zZWFyY2hCYWNrd2FyZHMpCi0jZGVmaW5lIHVzZWFyY2hfc2V0QXR0cmlidXRl
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2VhcmNoX3NldEF0dHJpYnV0ZSkKLSNkZWZpbmUg
dXNlYXJjaF9zZXRCcmVha0l0ZXJhdG9yIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2VhcmNo
X3NldEJyZWFrSXRlcmF0b3IpCi0jZGVmaW5lIHVzZWFyY2hfc2V0Q29sbGF0b3IgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHVzZWFyY2hfc2V0Q29sbGF0b3IpCi0jZGVmaW5lIHVzZWFyY2hfc2V0
T2Zmc2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2VhcmNoX3NldE9mZnNldCkKLSNkZWZp
bmUgdXNlYXJjaF9zZXRQYXR0ZXJuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2VhcmNoX3Nl
dFBhdHRlcm4pCi0jZGVmaW5lIHVzZWFyY2hfc2V0VGV4dCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodXNlYXJjaF9zZXRUZXh0KQotI2RlZmluZSB1c2V0X2FkZCBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodXNldF9hZGQpCi0jZGVmaW5lIHVzZXRfYWRkQWxsIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1c2V0X2FkZEFsbCkKLSNkZWZpbmUgdXNldF9hZGRBbGxDb2RlUG9pbnRzIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1c2V0X2FkZEFsbENvZGVQb2ludHMpCi0jZGVmaW5lIHVzZXRfYWRk
UmFuZ2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzZXRfYWRkUmFuZ2UpCi0jZGVmaW5lIHVz
ZXRfYWRkU3RyaW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2V0X2FkZFN0cmluZykKLSNk
ZWZpbmUgdXNldF9hcHBseUludFByb3BlcnR5VmFsdWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVzZXRfYXBwbHlJbnRQcm9wZXJ0eVZhbHVlKQotI2RlZmluZSB1c2V0X2FwcGx5UGF0dGVybiBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNldF9hcHBseVBhdHRlcm4pCi0jZGVmaW5lIHVzZXRf
YXBwbHlQcm9wZXJ0eUFsaWFzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2V0X2FwcGx5UHJv
cGVydHlBbGlhcykKLSNkZWZpbmUgdXNldF9jaGFyQXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHVzZXRfY2hhckF0KQotI2RlZmluZSB1c2V0X2NsZWFyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1c2V0X2NsZWFyKQotI2RlZmluZSB1c2V0X2Nsb25lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1c2V0X2Nsb25lKQotI2RlZmluZSB1c2V0X2Nsb25lQXNUaGF3ZWQgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVzZXRfY2xvbmVBc1RoYXdlZCkKLSNkZWZpbmUgdXNldF9jbG9zZSBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXNldF9jbG9zZSkKLSNkZWZpbmUgdXNldF9jbG9zZU92ZXIgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzZXRfY2xvc2VPdmVyKQotI2RlZmluZSB1c2V0X2NvbXBh
Y3QgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzZXRfY29tcGFjdCkKLSNkZWZpbmUgdXNldF9j
b21wbGVtZW50IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2V0X2NvbXBsZW1lbnQpCi0jZGVm
aW5lIHVzZXRfY29tcGxlbWVudEFsbCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNldF9jb21w
bGVtZW50QWxsKQotI2RlZmluZSB1c2V0X2NvbnRhaW5zIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1c2V0X2NvbnRhaW5zKQotI2RlZmluZSB1c2V0X2NvbnRhaW5zQWxsIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1c2V0X2NvbnRhaW5zQWxsKQotI2RlZmluZSB1c2V0X2NvbnRhaW5zQWxsQ29k
ZVBvaW50cyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNldF9jb250YWluc0FsbENvZGVQb2lu
dHMpCi0jZGVmaW5lIHVzZXRfY29udGFpbnNOb25lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
c2V0X2NvbnRhaW5zTm9uZSkKLSNkZWZpbmUgdXNldF9jb250YWluc1JhbmdlIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1c2V0X2NvbnRhaW5zUmFuZ2UpCi0jZGVmaW5lIHVzZXRfY29udGFpbnNT
b21lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2V0X2NvbnRhaW5zU29tZSkKLSNkZWZpbmUg
dXNldF9jb250YWluc1N0cmluZyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNldF9jb250YWlu
c1N0cmluZykKLSNkZWZpbmUgdXNldF9lcXVhbHMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVz
ZXRfZXF1YWxzKQotI2RlZmluZSB1c2V0X2ZyZWV6ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXNldF9mcmVlemUpCi0jZGVmaW5lIHVzZXRfZ2V0SXRlbSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodXNldF9nZXRJdGVtKQotI2RlZmluZSB1c2V0X2dldEl0ZW1Db3VudCBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXNldF9nZXRJdGVtQ291bnQpCi0jZGVmaW5lIHVzZXRfZ2V0U2VyaWFsaXpl
ZFJhbmdlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2V0X2dldFNlcmlhbGl6ZWRSYW5nZSkK
LSNkZWZpbmUgdXNldF9nZXRTZXJpYWxpemVkUmFuZ2VDb3VudCBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodXNldF9nZXRTZXJpYWxpemVkUmFuZ2VDb3VudCkKLSNkZWZpbmUgdXNldF9nZXRTZXJp
YWxpemVkU2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2V0X2dldFNlcmlhbGl6ZWRTZXQp
Ci0jZGVmaW5lIHVzZXRfaW5kZXhPZiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNldF9pbmRl
eE9mKQotI2RlZmluZSB1c2V0X2lzRW1wdHkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzZXRf
aXNFbXB0eSkKLSNkZWZpbmUgdXNldF9pc0Zyb3plbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXNldF9pc0Zyb3plbikKLSNkZWZpbmUgdXNldF9vcGVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1c2V0X29wZW4pCi0jZGVmaW5lIHVzZXRfb3BlbkVtcHR5IFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1c2V0X29wZW5FbXB0eSkKLSNkZWZpbmUgdXNldF9vcGVuUGF0dGVybiBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXNldF9vcGVuUGF0dGVybikKLSNkZWZpbmUgdXNldF9vcGVuUGF0dGVy
bk9wdGlvbnMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzZXRfb3BlblBhdHRlcm5PcHRpb25z
KQotI2RlZmluZSB1c2V0X3JlbW92ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNldF9yZW1v
dmUpCi0jZGVmaW5lIHVzZXRfcmVtb3ZlQWxsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2V0
X3JlbW92ZUFsbCkKLSNkZWZpbmUgdXNldF9yZW1vdmVBbGxTdHJpbmdzIFVfSUNVX0VOVFJZX1BP
SU5UX1JFTkFNRSh1c2V0X3JlbW92ZUFsbFN0cmluZ3MpCi0jZGVmaW5lIHVzZXRfcmVtb3ZlUmFu
Z2UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzZXRfcmVtb3ZlUmFuZ2UpCi0jZGVmaW5lIHVz
ZXRfcmVtb3ZlU3RyaW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2V0X3JlbW92ZVN0cmlu
ZykKLSNkZWZpbmUgdXNldF9yZXNlbWJsZXNQYXR0ZXJuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1c2V0X3Jlc2VtYmxlc1BhdHRlcm4pCi0jZGVmaW5lIHVzZXRfcmV0YWluIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1c2V0X3JldGFpbikKLSNkZWZpbmUgdXNldF9yZXRhaW5BbGwgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVzZXRfcmV0YWluQWxsKQotI2RlZmluZSB1c2V0X3NlcmlhbGl6
ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNldF9zZXJpYWxpemUpCi0jZGVmaW5lIHVzZXRf
c2VyaWFsaXplZENvbnRhaW5zIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2V0X3NlcmlhbGl6
ZWRDb250YWlucykKLSNkZWZpbmUgdXNldF9zZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVz
ZXRfc2V0KQotI2RlZmluZSB1c2V0X3NldFNlcmlhbGl6ZWRUb09uZSBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodXNldF9zZXRTZXJpYWxpemVkVG9PbmUpCi0jZGVmaW5lIHVzZXRfc2l6ZSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXNldF9zaXplKQotI2RlZmluZSB1c2V0X3NwYW4gVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVzZXRfc3BhbikKLSNkZWZpbmUgdXNldF9zcGFuQmFjayBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXNldF9zcGFuQmFjaykKLSNkZWZpbmUgdXNldF9zcGFuQmFj
a1VURjggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzZXRfc3BhbkJhY2tVVEY4KQotI2RlZmlu
ZSB1c2V0X3NwYW5VVEY4IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c2V0X3NwYW5VVEY4KQot
I2RlZmluZSB1c2V0X3RvUGF0dGVybiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNldF90b1Bh
dHRlcm4pCi0jZGVmaW5lIHVzcG9vZl9hcmVDb25mdXNhYmxlIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1c3Bvb2ZfYXJlQ29uZnVzYWJsZSkKLSNkZWZpbmUgdXNwb29mX2FyZUNvbmZ1c2FibGVV
VEY4IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c3Bvb2ZfYXJlQ29uZnVzYWJsZVVURjgpCi0j
ZGVmaW5lIHVzcG9vZl9hcmVDb25mdXNhYmxlVW5pY29kZVN0cmluZyBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodXNwb29mX2FyZUNvbmZ1c2FibGVVbmljb2RlU3RyaW5nKQotI2RlZmluZSB1c3Bv
b2ZfY2hlY2sgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzcG9vZl9jaGVjaykKLSNkZWZpbmUg
dXNwb29mX2NoZWNrVVRGOCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNwb29mX2NoZWNrVVRG
OCkKLSNkZWZpbmUgdXNwb29mX2NoZWNrVW5pY29kZVN0cmluZyBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodXNwb29mX2NoZWNrVW5pY29kZVN0cmluZykKLSNkZWZpbmUgdXNwb29mX2Nsb25lIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c3Bvb2ZfY2xvbmUpCi0jZGVmaW5lIHVzcG9vZl9jbG9z
ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNwb29mX2Nsb3NlKQotI2RlZmluZSB1c3Bvb2Zf
Z2V0QWxsb3dlZENoYXJzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c3Bvb2ZfZ2V0QWxsb3dl
ZENoYXJzKQotI2RlZmluZSB1c3Bvb2ZfZ2V0QWxsb3dlZExvY2FsZXMgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVzcG9vZl9nZXRBbGxvd2VkTG9jYWxlcykKLSNkZWZpbmUgdXNwb29mX2dldEFs
bG93ZWRVbmljb2RlU2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c3Bvb2ZfZ2V0QWxsb3dl
ZFVuaWNvZGVTZXQpCi0jZGVmaW5lIHVzcG9vZl9nZXRDaGVja3MgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHVzcG9vZl9nZXRDaGVja3MpCi0jZGVmaW5lIHVzcG9vZl9nZXRJbmNsdXNpb25TZXQg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzcG9vZl9nZXRJbmNsdXNpb25TZXQpCi0jZGVmaW5l
IHVzcG9vZl9nZXRJbmNsdXNpb25Vbmljb2RlU2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
c3Bvb2ZfZ2V0SW5jbHVzaW9uVW5pY29kZVNldCkKLSNkZWZpbmUgdXNwb29mX2dldFJlY29tbWVu
ZGVkU2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c3Bvb2ZfZ2V0UmVjb21tZW5kZWRTZXQp
Ci0jZGVmaW5lIHVzcG9vZl9nZXRSZWNvbW1lbmRlZFVuaWNvZGVTZXQgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVzcG9vZl9nZXRSZWNvbW1lbmRlZFVuaWNvZGVTZXQpCi0jZGVmaW5lIHVzcG9v
Zl9nZXRSZXN0cmljdGlvbkxldmVsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c3Bvb2ZfZ2V0
UmVzdHJpY3Rpb25MZXZlbCkKLSNkZWZpbmUgdXNwb29mX2dldFNrZWxldG9uIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1c3Bvb2ZfZ2V0U2tlbGV0b24pCi0jZGVmaW5lIHVzcG9vZl9nZXRTa2Vs
ZXRvblVURjggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzcG9vZl9nZXRTa2VsZXRvblVURjgp
Ci0jZGVmaW5lIHVzcG9vZl9nZXRTa2VsZXRvblVuaWNvZGVTdHJpbmcgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHVzcG9vZl9nZXRTa2VsZXRvblVuaWNvZGVTdHJpbmcpCi0jZGVmaW5lIHVzcG9v
Zl9vcGVuIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c3Bvb2Zfb3BlbikKLSNkZWZpbmUgdXNw
b29mX29wZW5Gcm9tU2VyaWFsaXplZCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNwb29mX29w
ZW5Gcm9tU2VyaWFsaXplZCkKLSNkZWZpbmUgdXNwb29mX29wZW5Gcm9tU291cmNlIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh1c3Bvb2Zfb3BlbkZyb21Tb3VyY2UpCi0jZGVmaW5lIHVzcG9vZl9z
ZXJpYWxpemUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzcG9vZl9zZXJpYWxpemUpCi0jZGVm
aW5lIHVzcG9vZl9zZXRBbGxvd2VkQ2hhcnMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzcG9v
Zl9zZXRBbGxvd2VkQ2hhcnMpCi0jZGVmaW5lIHVzcG9vZl9zZXRBbGxvd2VkTG9jYWxlcyBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXNwb29mX3NldEFsbG93ZWRMb2NhbGVzKQotI2RlZmluZSB1
c3Bvb2Zfc2V0QWxsb3dlZFVuaWNvZGVTZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzcG9v
Zl9zZXRBbGxvd2VkVW5pY29kZVNldCkKLSNkZWZpbmUgdXNwb29mX3NldENoZWNrcyBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXNwb29mX3NldENoZWNrcykKLSNkZWZpbmUgdXNwb29mX3NldFJl
c3RyaWN0aW9uTGV2ZWwgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzcG9vZl9zZXRSZXN0cmlj
dGlvbkxldmVsKQotI2RlZmluZSB1c3Bvb2Zfc3dhcCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXNwb29mX3N3YXApCi0jZGVmaW5lIHVzcHJlcF9jbG9zZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodXNwcmVwX2Nsb3NlKQotI2RlZmluZSB1c3ByZXBfb3BlbiBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodXNwcmVwX29wZW4pCi0jZGVmaW5lIHVzcHJlcF9vcGVuQnlUeXBlIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1c3ByZXBfb3BlbkJ5VHlwZSkKLSNkZWZpbmUgdXNwcmVwX3ByZXBhcmUg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzcHJlcF9wcmVwYXJlKQotI2RlZmluZSB1c3ByZXBf
c3dhcCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXNwcmVwX3N3YXApCi0jZGVmaW5lIHVzdHJf
aGFzaENoYXJzTiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXN0cl9oYXNoQ2hhcnNOKQotI2Rl
ZmluZSB1c3RyX2hhc2hJQ2hhcnNOIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c3RyX2hhc2hJ
Q2hhcnNOKQotI2RlZmluZSB1c3RyX2hhc2hVQ2hhcnNOIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1c3RyX2hhc2hVQ2hhcnNOKQotI2RlZmluZSB1c3RyY2FzZV9pbnRlcm5hbEZvbGQgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHVzdHJjYXNlX2ludGVybmFsRm9sZCkKLSNkZWZpbmUgdXN0cmNh
c2VfaW50ZXJuYWxUb0xvd2VyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c3RyY2FzZV9pbnRl
cm5hbFRvTG93ZXIpCi0jZGVmaW5lIHVzdHJjYXNlX2ludGVybmFsVG9UaXRsZSBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXN0cmNhc2VfaW50ZXJuYWxUb1RpdGxlKQotI2RlZmluZSB1c3RyY2Fz
ZV9pbnRlcm5hbFRvVXBwZXIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHVzdHJjYXNlX2ludGVy
bmFsVG9VcHBlcikKLSNkZWZpbmUgdXN0cmNhc2VfbWFwIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1c3RyY2FzZV9tYXApCi0jZGVmaW5lIHVzdHJjYXNlX3NldFRlbXBDYXNlTWFwTG9jYWxlIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1c3RyY2FzZV9zZXRUZW1wQ2FzZU1hcExvY2FsZSkKLSNk
ZWZpbmUgdXRleHRfY2hhcjMyQXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0ZXh0X2NoYXIz
MkF0KQotI2RlZmluZSB1dGV4dF9jbG9uZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRleHRf
Y2xvbmUpCi0jZGVmaW5lIHV0ZXh0X2Nsb3NlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dGV4
dF9jbG9zZSkKLSNkZWZpbmUgdXRleHRfY29weSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRl
eHRfY29weSkKLSNkZWZpbmUgdXRleHRfY3VycmVudDMyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1dGV4dF9jdXJyZW50MzIpCi0jZGVmaW5lIHV0ZXh0X2VxdWFscyBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodXRleHRfZXF1YWxzKQotI2RlZmluZSB1dGV4dF9leHRyYWN0IFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1dGV4dF9leHRyYWN0KQotI2RlZmluZSB1dGV4dF9mcmVlemUgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHV0ZXh0X2ZyZWV6ZSkKLSNkZWZpbmUgdXRleHRfZ2V0TmF0aXZl
SW5kZXggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0ZXh0X2dldE5hdGl2ZUluZGV4KQotI2Rl
ZmluZSB1dGV4dF9nZXRQcmV2aW91c05hdGl2ZUluZGV4IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh1dGV4dF9nZXRQcmV2aW91c05hdGl2ZUluZGV4KQotI2RlZmluZSB1dGV4dF9oYXNNZXRhRGF0
YSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRleHRfaGFzTWV0YURhdGEpCi0jZGVmaW5lIHV0
ZXh0X2lzTGVuZ3RoRXhwZW5zaXZlIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dGV4dF9pc0xl
bmd0aEV4cGVuc2l2ZSkKLSNkZWZpbmUgdXRleHRfaXNXcml0YWJsZSBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodXRleHRfaXNXcml0YWJsZSkKLSNkZWZpbmUgdXRleHRfbW92ZUluZGV4MzIgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0ZXh0X21vdmVJbmRleDMyKQotI2RlZmluZSB1dGV4dF9u
YXRpdmVMZW5ndGggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0ZXh0X25hdGl2ZUxlbmd0aCkK
LSNkZWZpbmUgdXRleHRfbmV4dDMyIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dGV4dF9uZXh0
MzIpCi0jZGVmaW5lIHV0ZXh0X25leHQzMkZyb20gVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0
ZXh0X25leHQzMkZyb20pCi0jZGVmaW5lIHV0ZXh0X29wZW5DaGFyYWN0ZXJJdGVyYXRvciBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXRleHRfb3BlbkNoYXJhY3Rlckl0ZXJhdG9yKQotI2RlZmlu
ZSB1dGV4dF9vcGVuQ29uc3RVbmljb2RlU3RyaW5nIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1
dGV4dF9vcGVuQ29uc3RVbmljb2RlU3RyaW5nKQotI2RlZmluZSB1dGV4dF9vcGVuUmVwbGFjZWFi
bGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0ZXh0X29wZW5SZXBsYWNlYWJsZSkKLSNkZWZp
bmUgdXRleHRfb3BlblVDaGFycyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRleHRfb3BlblVD
aGFycykKLSNkZWZpbmUgdXRleHRfb3BlblVURjggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0
ZXh0X29wZW5VVEY4KQotI2RlZmluZSB1dGV4dF9vcGVuVW5pY29kZVN0cmluZyBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodXRleHRfb3BlblVuaWNvZGVTdHJpbmcpCi0jZGVmaW5lIHV0ZXh0X3By
ZXZpb3VzMzIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0ZXh0X3ByZXZpb3VzMzIpCi0jZGVm
aW5lIHV0ZXh0X3ByZXZpb3VzMzJGcm9tIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dGV4dF9w
cmV2aW91czMyRnJvbSkKLSNkZWZpbmUgdXRleHRfcmVwbGFjZSBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodXRleHRfcmVwbGFjZSkKLSNkZWZpbmUgdXRleHRfc2V0TmF0aXZlSW5kZXggVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHV0ZXh0X3NldE5hdGl2ZUluZGV4KQotI2RlZmluZSB1dGV4dF9z
ZXR1cCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRleHRfc2V0dXApCi0jZGVmaW5lIHV0Zjhf
YXBwZW5kQ2hhclNhZmVCb2R5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dGY4X2FwcGVuZENo
YXJTYWZlQm9keSkKLSNkZWZpbmUgdXRmOF9iYWNrMVNhZmVCb2R5IFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1dGY4X2JhY2sxU2FmZUJvZHkpCi0jZGVmaW5lIHV0ZjhfY291bnRUcmFpbEJ5dGVz
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dGY4X2NvdW50VHJhaWxCeXRlcykKLSNkZWZpbmUg
dXRmOF9uZXh0Q2hhclNhZmVCb2R5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dGY4X25leHRD
aGFyU2FmZUJvZHkpCi0jZGVmaW5lIHV0ZjhfcHJldkNoYXJTYWZlQm9keSBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXRmOF9wcmV2Q2hhclNhZmVCb2R5KQotI2RlZmluZSB1dG1zY2FsZV9mcm9t
SW50NjQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0bXNjYWxlX2Zyb21JbnQ2NCkKLSNkZWZp
bmUgdXRtc2NhbGVfZ2V0VGltZVNjYWxlVmFsdWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0
bXNjYWxlX2dldFRpbWVTY2FsZVZhbHVlKQotI2RlZmluZSB1dG1zY2FsZV90b0ludDY0IFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1dG1zY2FsZV90b0ludDY0KQotI2RlZmluZSB1dHJhY2VfY2xl
YW51cCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyYWNlX2NsZWFudXApCi0jZGVmaW5lIHV0
cmFjZV9kYXRhIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJhY2VfZGF0YSkKLSNkZWZpbmUg
dXRyYWNlX2VudHJ5IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJhY2VfZW50cnkpCi0jZGVm
aW5lIHV0cmFjZV9leGl0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJhY2VfZXhpdCkKLSNk
ZWZpbmUgdXRyYWNlX2Zvcm1hdCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyYWNlX2Zvcm1h
dCkKLSNkZWZpbmUgdXRyYWNlX2Z1bmN0aW9uTmFtZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXRyYWNlX2Z1bmN0aW9uTmFtZSkKLSNkZWZpbmUgdXRyYWNlX2dldEZ1bmN0aW9ucyBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXRyYWNlX2dldEZ1bmN0aW9ucykKLSNkZWZpbmUgdXRyYWNlX2dl
dExldmVsIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJhY2VfZ2V0TGV2ZWwpCi0jZGVmaW5l
IHV0cmFjZV9sZXZlbCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyYWNlX2xldmVsKQotI2Rl
ZmluZSB1dHJhY2Vfc2V0RnVuY3Rpb25zIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJhY2Vf
c2V0RnVuY3Rpb25zKQotI2RlZmluZSB1dHJhY2Vfc2V0TGV2ZWwgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHV0cmFjZV9zZXRMZXZlbCkKLSNkZWZpbmUgdXRyYWNlX3Zmb3JtYXQgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHV0cmFjZV92Zm9ybWF0KQotI2RlZmluZSB1dHJhbnNfY2xvbmUgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmFuc19jbG9uZSkKLSNkZWZpbmUgdXRyYW5zX2Nsb3Nl
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJhbnNfY2xvc2UpCi0jZGVmaW5lIHV0cmFuc19j
b3VudEF2YWlsYWJsZUlEcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyYW5zX2NvdW50QXZh
aWxhYmxlSURzKQotI2RlZmluZSB1dHJhbnNfZ2V0QXZhaWxhYmxlSUQgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHV0cmFuc19nZXRBdmFpbGFibGVJRCkKLSNkZWZpbmUgdXRyYW5zX2dldElEIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJhbnNfZ2V0SUQpCi0jZGVmaW5lIHV0cmFuc19nZXRT
b3VyY2VTZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmFuc19nZXRTb3VyY2VTZXQpCi0j
ZGVmaW5lIHV0cmFuc19nZXRVbmljb2RlSUQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmFu
c19nZXRVbmljb2RlSUQpCi0jZGVmaW5lIHV0cmFuc19vcGVuIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh1dHJhbnNfb3BlbikKLSNkZWZpbmUgdXRyYW5zX29wZW5JRHMgVV9JQ1VfRU5UUllfUE9J
TlRfUkVOQU1FKHV0cmFuc19vcGVuSURzKQotI2RlZmluZSB1dHJhbnNfb3BlbkludmVyc2UgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmFuc19vcGVuSW52ZXJzZSkKLSNkZWZpbmUgdXRyYW5z
X29wZW5VIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJhbnNfb3BlblUpCi0jZGVmaW5lIHV0
cmFuc19yZWdpc3RlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyYW5zX3JlZ2lzdGVyKQot
I2RlZmluZSB1dHJhbnNfcmVwX2Nhc2VDb250ZXh0SXRlcmF0b3IgVV9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHV0cmFuc19yZXBfY2FzZUNvbnRleHRJdGVyYXRvcikKLSNkZWZpbmUgdXRyYW5zX3Nl
dEZpbHRlciBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyYW5zX3NldEZpbHRlcikKLSNkZWZp
bmUgdXRyYW5zX3N0cmlwUnVsZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmFuc19zdHJp
cFJ1bGVzKQotI2RlZmluZSB1dHJhbnNfdG9SdWxlcyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXRyYW5zX3RvUnVsZXMpCi0jZGVmaW5lIHV0cmFuc190cmFucyBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodXRyYW5zX3RyYW5zKQotI2RlZmluZSB1dHJhbnNfdHJhbnNJbmNyZW1lbnRhbCBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyYW5zX3RyYW5zSW5jcmVtZW50YWwpCi0jZGVmaW5lIHV0
cmFuc190cmFuc0luY3JlbWVudGFsVUNoYXJzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJh
bnNfdHJhbnNJbmNyZW1lbnRhbFVDaGFycykKLSNkZWZpbmUgdXRyYW5zX3RyYW5zVUNoYXJzIFVf
SUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJhbnNfdHJhbnNVQ2hhcnMpCi0jZGVmaW5lIHV0cmFu
c190cmFuc2xpdGVyYXRvcl9jbGVhbnVwIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJhbnNf
dHJhbnNsaXRlcmF0b3JfY2xlYW51cCkKLSNkZWZpbmUgdXRyYW5zX3VucmVnaXN0ZXIgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHV0cmFuc191bnJlZ2lzdGVyKQotI2RlZmluZSB1dHJhbnNfdW5y
ZWdpc3RlcklEIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJhbnNfdW5yZWdpc3RlcklEKQot
I2RlZmluZSB1dHJpZTJfY2xvbmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmllMl9jbG9u
ZSkKLSNkZWZpbmUgdXRyaWUyX2Nsb25lQXNUaGF3ZWQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1F
KHV0cmllMl9jbG9uZUFzVGhhd2VkKQotI2RlZmluZSB1dHJpZTJfY2xvc2UgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHV0cmllMl9jbG9zZSkKLSNkZWZpbmUgdXRyaWUyX2VudW0gVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHV0cmllMl9lbnVtKQotI2RlZmluZSB1dHJpZTJfZW51bUZvckxlYWRT
dXJyb2dhdGUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmllMl9lbnVtRm9yTGVhZFN1cnJv
Z2F0ZSkKLSNkZWZpbmUgdXRyaWUyX2ZyZWV6ZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRy
aWUyX2ZyZWV6ZSkKLSNkZWZpbmUgdXRyaWUyX2Zyb21VVHJpZSBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodXRyaWUyX2Zyb21VVHJpZSkKLSNkZWZpbmUgdXRyaWUyX2dldDMyIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh1dHJpZTJfZ2V0MzIpCi0jZGVmaW5lIHV0cmllMl9nZXQzMkZyb21MZWFk
U3Vycm9nYXRlQ29kZVVuaXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmllMl9nZXQzMkZy
b21MZWFkU3Vycm9nYXRlQ29kZVVuaXQpCi0jZGVmaW5lIHV0cmllMl9nZXRWZXJzaW9uIFVfSUNV
X0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJpZTJfZ2V0VmVyc2lvbikKLSNkZWZpbmUgdXRyaWUyX2lu
dGVybmFsVThOZXh0SW5kZXggVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmllMl9pbnRlcm5h
bFU4TmV4dEluZGV4KQotI2RlZmluZSB1dHJpZTJfaW50ZXJuYWxVOFByZXZJbmRleCBVX0lDVV9F
TlRSWV9QT0lOVF9SRU5BTUUodXRyaWUyX2ludGVybmFsVThQcmV2SW5kZXgpCi0jZGVmaW5lIHV0
cmllMl9pc0Zyb3plbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyaWUyX2lzRnJvemVuKQot
I2RlZmluZSB1dHJpZTJfb3BlbiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyaWUyX29wZW4p
Ci0jZGVmaW5lIHV0cmllMl9vcGVuRHVtbXkgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmll
Ml9vcGVuRHVtbXkpCi0jZGVmaW5lIHV0cmllMl9vcGVuRnJvbVNlcmlhbGl6ZWQgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHV0cmllMl9vcGVuRnJvbVNlcmlhbGl6ZWQpCi0jZGVmaW5lIHV0cmll
Ml9zZXJpYWxpemUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmllMl9zZXJpYWxpemUpCi0j
ZGVmaW5lIHV0cmllMl9zZXQzMiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyaWUyX3NldDMy
KQotI2RlZmluZSB1dHJpZTJfc2V0MzJGb3JMZWFkU3Vycm9nYXRlQ29kZVVuaXQgVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHV0cmllMl9zZXQzMkZvckxlYWRTdXJyb2dhdGVDb2RlVW5pdCkKLSNk
ZWZpbmUgdXRyaWUyX3NldFJhbmdlMzIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmllMl9z
ZXRSYW5nZTMyKQotI2RlZmluZSB1dHJpZTJfc3dhcCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUo
dXRyaWUyX3N3YXApCi0jZGVmaW5lIHV0cmllMl9zd2FwQW55VmVyc2lvbiBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodXRyaWUyX3N3YXBBbnlWZXJzaW9uKQotI2RlZmluZSB1dHJpZV9jbG9uZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyaWVfY2xvbmUpCi0jZGVmaW5lIHV0cmllX2Nsb3Nl
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJpZV9jbG9zZSkKLSNkZWZpbmUgdXRyaWVfZGVm
YXVsdEdldEZvbGRpbmdPZmZzZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmllX2RlZmF1
bHRHZXRGb2xkaW5nT2Zmc2V0KQotI2RlZmluZSB1dHJpZV9lbnVtIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh1dHJpZV9lbnVtKQotI2RlZmluZSB1dHJpZV9nZXQzMiBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodXRyaWVfZ2V0MzIpCi0jZGVmaW5lIHV0cmllX2dldERhdGEgVV9JQ1VfRU5UUllf
UE9JTlRfUkVOQU1FKHV0cmllX2dldERhdGEpCi0jZGVmaW5lIHV0cmllX29wZW4gVV9JQ1VfRU5U
UllfUE9JTlRfUkVOQU1FKHV0cmllX29wZW4pCi0jZGVmaW5lIHV0cmllX3NlcmlhbGl6ZSBVX0lD
VV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyaWVfc2VyaWFsaXplKQotI2RlZmluZSB1dHJpZV9zZXQz
MiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodXRyaWVfc2V0MzIpCi0jZGVmaW5lIHV0cmllX3Nl
dFJhbmdlMzIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmllX3NldFJhbmdlMzIpCi0jZGVm
aW5lIHV0cmllX3N3YXAgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHV0cmllX3N3YXApCi0jZGVm
aW5lIHV0cmllX3Vuc2VyaWFsaXplIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh1dHJpZV91bnNl
cmlhbGl6ZSkKLSNkZWZpbmUgdXRyaWVfdW5zZXJpYWxpemVEdW1teSBVX0lDVV9FTlRSWV9QT0lO
VF9SRU5BTUUodXRyaWVfdW5zZXJpYWxpemVEdW1teSkKLSNkZWZpbmUgdnpvbmVfY2xvbmUgVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHZ6b25lX2Nsb25lKQotI2RlZmluZSB2em9uZV9jbG9zZSBV
X0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodnpvbmVfY2xvc2UpCi0jZGVmaW5lIHZ6b25lX2NvdW50
VHJhbnNpdGlvblJ1bGVzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh2em9uZV9jb3VudFRyYW5z
aXRpb25SdWxlcykKLSNkZWZpbmUgdnpvbmVfZXF1YWxzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFN
RSh2em9uZV9lcXVhbHMpCi0jZGVmaW5lIHZ6b25lX2dldER5bmFtaWNDbGFzc0lEIFVfSUNVX0VO
VFJZX1BPSU5UX1JFTkFNRSh2em9uZV9nZXREeW5hbWljQ2xhc3NJRCkKLSNkZWZpbmUgdnpvbmVf
Z2V0TGFzdE1vZGlmaWVkIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh2em9uZV9nZXRMYXN0TW9k
aWZpZWQpCi0jZGVmaW5lIHZ6b25lX2dldE5leHRUcmFuc2l0aW9uIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh2em9uZV9nZXROZXh0VHJhbnNpdGlvbikKLSNkZWZpbmUgdnpvbmVfZ2V0T2Zmc2V0
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh2em9uZV9nZXRPZmZzZXQpCi0jZGVmaW5lIHZ6b25l
X2dldE9mZnNldDIgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHZ6b25lX2dldE9mZnNldDIpCi0j
ZGVmaW5lIHZ6b25lX2dldE9mZnNldDMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHZ6b25lX2dl
dE9mZnNldDMpCi0jZGVmaW5lIHZ6b25lX2dldFByZXZpb3VzVHJhbnNpdGlvbiBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUodnpvbmVfZ2V0UHJldmlvdXNUcmFuc2l0aW9uKQotI2RlZmluZSB2em9u
ZV9nZXRSYXdPZmZzZXQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHZ6b25lX2dldFJhd09mZnNl
dCkKLSNkZWZpbmUgdnpvbmVfZ2V0U3RhdGljQ2xhc3NJRCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUodnpvbmVfZ2V0U3RhdGljQ2xhc3NJRCkKLSNkZWZpbmUgdnpvbmVfZ2V0VFpVUkwgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHZ6b25lX2dldFRaVVJMKQotI2RlZmluZSB2em9uZV9oYXNTYW1l
UnVsZXMgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHZ6b25lX2hhc1NhbWVSdWxlcykKLSNkZWZp
bmUgdnpvbmVfaW5EYXlsaWdodFRpbWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHZ6b25lX2lu
RGF5bGlnaHRUaW1lKQotI2RlZmluZSB2em9uZV9vcGVuRGF0YSBVX0lDVV9FTlRSWV9QT0lOVF9S
RU5BTUUodnpvbmVfb3BlbkRhdGEpCi0jZGVmaW5lIHZ6b25lX29wZW5JRCBVX0lDVV9FTlRSWV9Q
T0lOVF9SRU5BTUUodnpvbmVfb3BlbklEKQotI2RlZmluZSB2em9uZV9zZXRMYXN0TW9kaWZpZWQg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHZ6b25lX3NldExhc3RNb2RpZmllZCkKLSNkZWZpbmUg
dnpvbmVfc2V0UmF3T2Zmc2V0IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh2em9uZV9zZXRSYXdP
ZmZzZXQpCi0jZGVmaW5lIHZ6b25lX3NldFRaVVJMIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh2
em9uZV9zZXRUWlVSTCkKLSNkZWZpbmUgdnpvbmVfdXNlRGF5bGlnaHRUaW1lIFVfSUNVX0VOVFJZ
X1BPSU5UX1JFTkFNRSh2em9uZV91c2VEYXlsaWdodFRpbWUpCi0jZGVmaW5lIHZ6b25lX3dyaXRl
IFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh2em9uZV93cml0ZSkKLSNkZWZpbmUgdnpvbmVfd3Jp
dGVGcm9tU3RhcnQgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHZ6b25lX3dyaXRlRnJvbVN0YXJ0
KQotI2RlZmluZSB2em9uZV93cml0ZVNpbXBsZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUodnpv
bmVfd3JpdGVTaW1wbGUpCi0jZGVmaW5lIHpydWxlX2Nsb3NlIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh6cnVsZV9jbG9zZSkKLSNkZWZpbmUgenJ1bGVfZXF1YWxzIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh6cnVsZV9lcXVhbHMpCi0jZGVmaW5lIHpydWxlX2dldERTVFNhdmluZ3MgVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHpydWxlX2dldERTVFNhdmluZ3MpCi0jZGVmaW5lIHpydWxlX2dl
dE5hbWUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHpydWxlX2dldE5hbWUpCi0jZGVmaW5lIHpy
dWxlX2dldFJhd09mZnNldCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoenJ1bGVfZ2V0UmF3T2Zm
c2V0KQotI2RlZmluZSB6cnVsZV9pc0VxdWl2YWxlbnRUbyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUoenJ1bGVfaXNFcXVpdmFsZW50VG8pCi0jZGVmaW5lIHp0cmFuc19hZG9wdEZyb20gVV9JQ1Vf
RU5UUllfUE9JTlRfUkVOQU1FKHp0cmFuc19hZG9wdEZyb20pCi0jZGVmaW5lIHp0cmFuc19hZG9w
dFRvIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh6dHJhbnNfYWRvcHRUbykKLSNkZWZpbmUgenRy
YW5zX2Nsb25lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh6dHJhbnNfY2xvbmUpCi0jZGVmaW5l
IHp0cmFuc19jbG9zZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoenRyYW5zX2Nsb3NlKQotI2Rl
ZmluZSB6dHJhbnNfZXF1YWxzIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh6dHJhbnNfZXF1YWxz
KQotI2RlZmluZSB6dHJhbnNfZ2V0RHluYW1pY0NsYXNzSUQgVV9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHp0cmFuc19nZXREeW5hbWljQ2xhc3NJRCkKLSNkZWZpbmUgenRyYW5zX2dldEZyb20gVV9J
Q1VfRU5UUllfUE9JTlRfUkVOQU1FKHp0cmFuc19nZXRGcm9tKQotI2RlZmluZSB6dHJhbnNfZ2V0
U3RhdGljQ2xhc3NJRCBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoenRyYW5zX2dldFN0YXRpY0Ns
YXNzSUQpCi0jZGVmaW5lIHp0cmFuc19nZXRUaW1lIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh6
dHJhbnNfZ2V0VGltZSkKLSNkZWZpbmUgenRyYW5zX2dldFRvIFVfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh6dHJhbnNfZ2V0VG8pCi0jZGVmaW5lIHp0cmFuc19vcGVuIFVfSUNVX0VOVFJZX1BPSU5U
X1JFTkFNRSh6dHJhbnNfb3BlbikKLSNkZWZpbmUgenRyYW5zX29wZW5FbXB0eSBVX0lDVV9FTlRS
WV9QT0lOVF9SRU5BTUUoenRyYW5zX29wZW5FbXB0eSkKLSNkZWZpbmUgenRyYW5zX3NldEZyb20g
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHp0cmFuc19zZXRGcm9tKQotI2RlZmluZSB6dHJhbnNf
c2V0VGltZSBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoenRyYW5zX3NldFRpbWUpCi0jZGVmaW5l
IHp0cmFuc19zZXRUbyBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoenRyYW5zX3NldFRvKQotCi0j
ZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3VzdHJpbmcuaCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvdXN0cmluZy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDE0MWU4ZGY2MzM4ZGM4ZTRlZDBjOWY0NGI3
NmJiM2FjNTFhMDU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3Vu
aWNvZGUvdXN0cmluZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcwMCArMCwwIEBACi0vKgotKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKgotKiAgIENvcHlyaWdodCAoQykgMTk5OC0yMDE0LCBJbnRlcm5hdGlvbmFsIEJ1
c2luZXNzIE1hY2hpbmVzCi0qICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qIEZpbGUgdXN0cmluZy5oCi0qCi0qIE1vZGlm
aWNhdGlvbiBIaXN0b3J5OgotKgotKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0
aW9uCi0qICAgMTIvMDcvOTggICAgYmVydHJhbmQgICAgQ3JlYXRpb24uCi0qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKLSovCi0KLSNpZm5kZWYgVVNUUklOR19ICi0jZGVmaW5lIFVTVFJJTkdfSAotCi0j
aW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKLSNpbmNsdWRlICJ1bmljb2RlL3B1dGlsLmgiCi0j
aW5jbHVkZSAidW5pY29kZS91aXRlci5oIgotCi0vKioKLSAqIFxkZWYgVUJSS19UWVBFREVGX1VC
UkVBS19JVEVSQVRPUgotICogQGludGVybmFsIAotICovCi0KLSNpZm5kZWYgVUJSS19UWVBFREVG
X1VCUkVBS19JVEVSQVRPUgotIyAgIGRlZmluZSBVQlJLX1RZUEVERUZfVUJSRUFLX0lURVJBVE9S
Ci0vKiogU2ltcGxlIGRlY2xhcmF0aW9uIGZvciB1X3N0clRvVGl0bGUoKSB0byBhdm9pZCBpbmNs
dWRpbmcgdW5pY29kZS91YnJrLmguIEBzdGFibGUgSUNVIDIuMSovCi0gICAgdHlwZWRlZiBzdHJ1
Y3QgVUJyZWFrSXRlcmF0b3IgVUJyZWFrSXRlcmF0b3I7Ci0jZW5kaWYKLQotLyoqCi0gKiBcZmls
ZQotICogXGJyaWVmIEMgQVBJOiBVbmljb2RlIHN0cmluZyBoYW5kbGluZyBmdW5jdGlvbnMKLSAq
Ci0gKiBUaGVzZSBDIEFQSSBmdW5jdGlvbnMgcHJvdmlkZSBnZW5lcmFsIFVuaWNvZGUgc3RyaW5n
IGhhbmRsaW5nLgotICoKLSAqIFNvbWUgZnVuY3Rpb25zIGFyZSBlcXVpdmFsZW50IGluIG5hbWUs
IHNpZ25hdHVyZSwgYW5kIGJlaGF2aW9yIHRvIHRoZSBBTlNJIEMgPHN0cmluZy5oPgotICogZnVu
Y3Rpb25zLiAoRm9yIGV4YW1wbGUsIHRoZXkgZG8gbm90IGNoZWNrIGZvciBiYWQgYXJndW1lbnRz
IGxpa2UgTlVMTCBzdHJpbmcgcG9pbnRlcnMuKQotICogSW4gc29tZSBjYXNlcywgb25seSB0aGUg
dGhyZWFkLXNhZmUgdmFyaWFudCBvZiBzdWNoIGEgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgaGVy
ZQotICogKHNlZSB1X3N0cnRva19yKCkpLgotICoKLSAqIE90aGVyIGZ1bmN0aW9ucyBwcm92aWRl
IG1vcmUgVW5pY29kZS1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGxpa2UgbG9jYWxlLXNwZWNpZmlj
Ci0gKiB1cHBlci9sb3dlci1jYXNpbmcgYW5kIHN0cmluZyBjb21wYXJpc29uIGluIGNvZGUgcG9p
bnQgb3JkZXIuCi0gKgotICogSUNVIHVzZXMgMTYtYml0IFVuaWNvZGUgKFVURi0xNikgaW4gdGhl
IGZvcm0gb2YgYXJyYXlzIG9mIFVDaGFyIGNvZGUgdW5pdHMuCi0gKiBVVEYtMTYgZW5jb2RlcyBl
YWNoIFVuaWNvZGUgY29kZSBwb2ludCB3aXRoIGVpdGhlciBvbmUgb3IgdHdvIFVDaGFyIGNvZGUg
dW5pdHMuCi0gKiAoVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3JtIG9mIFVuaWNvZGUsIGFuZCBhIGZv
cndhcmQtY29tcGF0aWJsZSBleHRlbnNpb24gb2YgdGhlIG9yaWdpbmFsLAotICogZml4ZWQtd2lk
dGggZm9ybSB0aGF0IHdhcyBrbm93biBhcyBVQ1MtMi4gVVRGLTE2IHN1cGVyc2VkZWQgVUNTLTIg
d2l0aCBVbmljb2RlIDIuMAotICogaW4gMTk5Ni4pCi0gKgotICogU29tZSBBUElzIGFjY2VwdCBh
IDMyLWJpdCBVQ2hhcjMyIHZhbHVlIGZvciBhIHNpbmdsZSBjb2RlIHBvaW50LgotICoKLSAqIElD
VSBhbHNvIGhhbmRsZXMgMTYtYml0IFVuaWNvZGUgdGV4dCB3aXRoIHVucGFpcmVkIHN1cnJvZ2F0
ZXMuCi0gKiBTdWNoIHRleHQgaXMgbm90IHdlbGwtZm9ybWVkIFVURi0xNi4KLSAqIENvZGUtcG9p
bnQtcmVsYXRlZCBmdW5jdGlvbnMgdHJlYXQgdW5wYWlyZWQgc3Vycm9nYXRlcyBhcyBzdXJyb2dh
dGUgY29kZSBwb2ludHMsCi0gKiBpLmUuLCBhcyBzZXBhcmF0ZSB1bml0cy4KLSAqCi0gKiBBbHRo
b3VnaCBVVEYtMTYgaXMgYSB2YXJpYWJsZS13aWR0aCBlbmNvZGluZyBmb3JtIChsaWtlIHNvbWUg
bGVnYWN5IG11bHRpLWJ5dGUgZW5jb2RpbmdzKSwKLSAqIGl0IGlzIG11Y2ggbW9yZSBlZmZpY2ll
bnQgZXZlbiBmb3IgcmFuZG9tIGFjY2VzcyBiZWNhdXNlIHRoZSBjb2RlIHVuaXQgdmFsdWVzCi0g
KiBmb3Igc2luZ2xlLXVuaXQgY2hhcmFjdGVycyB2cy4gbGVhZCB1bml0cyB2cy4gdHJhaWwgdW5p
dHMgYXJlIGNvbXBsZXRlbHkgZGlzam9pbnQuCi0gKiBUaGlzIG1lYW5zIHRoYXQgaXQgaXMgZWFz
eSB0byBkZXRlcm1pbmUgY2hhcmFjdGVyIChjb2RlIHBvaW50KSBib3VuZGFyaWVzIGZyb20KLSAq
IHJhbmRvbSBvZmZzZXRzIGluIHRoZSBzdHJpbmcuCi0gKgotICogVW5pY29kZSAoVVRGLTE2KSBz
dHJpbmcgcHJvY2Vzc2luZyBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBzaW5nbGUtdW5pdCBjYXNlLgot
ICogQWx0aG91Z2ggaXQgaXMgaW1wb3J0YW50IHRvIHN1cHBvcnQgc3VwcGxlbWVudGFyeSBjaGFy
YWN0ZXJzCi0gKiAod2hpY2ggdXNlIHBhaXJzIG9mIGxlYWQvdHJhaWwgY29kZSB1bml0cyBjYWxs
ZWQgInN1cnJvZ2F0ZXMiKSwKLSAqIHRoZWlyIG9jY3VycmVuY2UgaXMgcmFyZS4gQWxtb3N0IGFs
bCBjaGFyYWN0ZXJzIGluIG1vZGVybiB1c2UgcmVxdWlyZSBvbmx5Ci0gKiBhIHNpbmdsZSBVQ2hh
ciBjb2RlIHVuaXQgKGkuZS4sIHRoZWlyIGNvZGUgcG9pbnQgdmFsdWVzIGFyZSA8PTB4ZmZmZiku
Ci0gKgotICogRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIFVzZXIgR3VpZGUgU3RyaW5ncyBjaGFw
dGVyIChodHRwOi8vaWN1LXByb2plY3Qub3JnL3VzZXJndWlkZS9zdHJpbmdzLmh0bWwpLgotICog
Rm9yIGEgZGlzY3Vzc2lvbiBvZiB0aGUgaGFuZGxpbmcgb2YgdW5wYWlyZWQgc3Vycm9nYXRlcyBz
ZWUgYWxzbwotICogSml0dGVyYnVnIDIxNDUgYW5kIGl0cyBpY3UgbWFpbGluZyBsaXN0IHByb3Bv
c2FsIG9uIDIwMDItc2VwLTE4LgotICovCi0KLS8qKgotICogXGRlZmdyb3VwIHVzdHJpbmdfdXN0
cmxlbiBTdHJpbmcgTGVuZ3RoCi0gKiBcaW5ncm91cCB1c3RyaW5nX3N0cmxlbgotICovCi0vKkB7
Ki8KLS8qKgotICogRGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgYW4gYXJyYXkgb2YgVUNoYXIuCi0g
KgotICogQHBhcmFtIHMgVGhlIGFycmF5IG9mIFVDaGFycywgTlVMTCAoVSswMDAwKSB0ZXJtaW5h
dGVkLgotICogQHJldHVybiBUaGUgbnVtYmVyIG9mIFVDaGFycyBpbiA8Y29kZT5jaGFyczwvY29k
ZT4sIG1pbnVzIHRoZSB0ZXJtaW5hdG9yLgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RB
QkxFIGludDMyX3QgVV9FWFBPUlQyCi11X3N0cmxlbihjb25zdCBVQ2hhciAqcyk7Ci0vKkB9Ki8K
LQotLyoqCi0gKiBDb3VudCBVbmljb2RlIGNvZGUgcG9pbnRzIGluIHRoZSBsZW5ndGggVUNoYXIg
Y29kZSB1bml0cyBvZiB0aGUgc3RyaW5nLgotICogQSBjb2RlIHBvaW50IG1heSBvY2N1cHkgZWl0
aGVyIG9uZSBvciB0d28gVUNoYXIgY29kZSB1bml0cy4KLSAqIENvdW50aW5nIGNvZGUgcG9pbnRz
IGludm9sdmVzIHJlYWRpbmcgYWxsIGNvZGUgdW5pdHMuCi0gKgotICogVGhpcyBmdW5jdGlvbnMg
aXMgYmFzaWNhbGx5IHRoZSBpbnZlcnNlIG9mIHRoZSBVMTZfRldEX04oKSBtYWNybyAoc2VlIHV0
Zi5oKS4KLSAqCi0gKiBAcGFyYW0gcyBUaGUgaW5wdXQgc3RyaW5nLgotICogQHBhcmFtIGxlbmd0
aCBUaGUgbnVtYmVyIG9mIFVDaGFyIGNvZGUgdW5pdHMgdG8gYmUgY2hlY2tlZCwgb3IgLTEgdG8g
Y291bnQgYWxsCi0gKiAgICAgICAgICAgICAgIGNvZGUgcG9pbnRzIGJlZm9yZSB0aGUgZmlyc3Qg
TlVMIChVKzAwMDApLgotICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIHRo
ZSBzcGVjaWZpZWQgY29kZSB1bml0cy4KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJM
RSBpbnQzMl90IFVfRVhQT1JUMgotdV9jb3VudENoYXIzMihjb25zdCBVQ2hhciAqcywgaW50MzJf
dCBsZW5ndGgpOwotCi0vKioKLSAqIENoZWNrIGlmIHRoZSBzdHJpbmcgY29udGFpbnMgbW9yZSBV
bmljb2RlIGNvZGUgcG9pbnRzIHRoYW4gYSBjZXJ0YWluIG51bWJlci4KLSAqIFRoaXMgaXMgbW9y
ZSBlZmZpY2llbnQgdGhhbiBjb3VudGluZyBhbGwgY29kZSBwb2ludHMgaW4gdGhlIGVudGlyZSBz
dHJpbmcKLSAqIGFuZCBjb21wYXJpbmcgdGhhdCBudW1iZXIgd2l0aCBhIHRocmVzaG9sZC4KLSAq
IFRoaXMgZnVuY3Rpb24gbWF5IG5vdCBuZWVkIHRvIHNjYW4gdGhlIHN0cmluZyBhdCBhbGwgaWYg
dGhlIGxlbmd0aCBpcyBrbm93bgotICogKG5vdCAtMSBmb3IgTlVMLXRlcm1pbmF0aW9uKSBhbmQg
ZmFsbHMgd2l0aGluIGEgY2VydGFpbiByYW5nZSwgYW5kCi0gKiBuZXZlciBuZWVkcyB0byBjb3Vu
dCBtb3JlIHRoYW4gJ251bWJlcisxJyBjb2RlIHBvaW50cy4KLSAqIExvZ2ljYWxseSBlcXVpdmFs
ZW50IHRvICh1X2NvdW50Q2hhcjMyKHMsIGxlbmd0aCk+bnVtYmVyKS4KLSAqIEEgVW5pY29kZSBj
b2RlIHBvaW50IG1heSBvY2N1cHkgZWl0aGVyIG9uZSBvciB0d28gVUNoYXIgY29kZSB1bml0cy4K
LSAqCi0gKiBAcGFyYW0gcyBUaGUgaW5wdXQgc3RyaW5nLgotICogQHBhcmFtIGxlbmd0aCBUaGUg
bGVuZ3RoIG9mIHRoZSBzdHJpbmcsIG9yIC0xIGlmIGl0IGlzIE5VTC10ZXJtaW5hdGVkLgotICog
QHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIHRoZSBzdHJpbmcgaXMg
Y29tcGFyZWQgYWdhaW5zdAotICogICAgICAgICAgICAgICB0aGUgJ251bWJlcicgcGFyYW1ldGVy
LgotICogQHJldHVybiBCb29sZWFuIHZhbHVlIGZvciB3aGV0aGVyIHRoZSBzdHJpbmcgY29udGFp
bnMgbW9yZSBVbmljb2RlIGNvZGUgcG9pbnRzCi0gKiAgICAgICAgIHRoYW4gJ251bWJlcicuIFNh
bWUgYXMgKHVfY291bnRDaGFyMzIocywgbGVuZ3RoKT5udW1iZXIpLgotICogQHN0YWJsZSBJQ1Ug
Mi40Ci0gKi8KLVVfU1RBQkxFIFVCb29sIFVfRVhQT1JUMgotdV9zdHJIYXNNb3JlQ2hhcjMyVGhh
bihjb25zdCBVQ2hhciAqcywgaW50MzJfdCBsZW5ndGgsIGludDMyX3QgbnVtYmVyKTsKLQotLyoq
Ci0gKiBDb25jYXRlbmF0ZSB0d28gdXN0cmluZ3MuICBBcHBlbmRzIGEgY29weSBvZiA8Y29kZT5z
cmM8L2NvZGU+LAotICogaW5jbHVkaW5nIHRoZSBudWxsIHRlcm1pbmF0b3IsIHRvIDxjb2RlPmRz
dDwvY29kZT4uIFRoZSBpbml0aWFsIGNvcGllZAotICogY2hhcmFjdGVyIGZyb20gPGNvZGU+c3Jj
PC9jb2RlPiBvdmVyd3JpdGVzIHRoZSBudWxsIHRlcm1pbmF0b3IgaW4gPGNvZGU+ZHN0PC9jb2Rl
Pi4KLSAqCi0gKiBAcGFyYW0gZHN0IFRoZSBkZXN0aW5hdGlvbiBzdHJpbmcuCi0gKiBAcGFyYW0g
c3JjIFRoZSBzb3VyY2Ugc3RyaW5nLgotICogQHJldHVybiBBIHBvaW50ZXIgdG8gPGNvZGU+ZHN0
PC9jb2RlPi4KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBVQ2hhciogVV9FWFBP
UlQyCi11X3N0cmNhdChVQ2hhciAgICAgKmRzdCwgCi0gICAgY29uc3QgVUNoYXIgICAgICpzcmMp
OwotCi0vKioKLSAqIENvbmNhdGVuYXRlIHR3byB1c3RyaW5ncy4gIAotICogQXBwZW5kcyBhdCBt
b3N0IDxjb2RlPm48L2NvZGU+IGNoYXJhY3RlcnMgZnJvbSA8Y29kZT5zcmM8L2NvZGU+IHRvIDxj
b2RlPmRzdDwvY29kZT4uCi0gKiBBZGRzIGEgdGVybWluYXRpbmcgTlVMLgotICogSWYgc3JjIGlz
IHRvbyBsb25nLCB0aGVuIG9ubHkgPGNvZGU+bi0xPC9jb2RlPiBjaGFyYWN0ZXJzIHdpbGwgYmUg
Y29waWVkCi0gKiBiZWZvcmUgdGhlIHRlcm1pbmF0aW5nIE5VTC4KLSAqIElmIDxjb2RlPm4mbHQ7
PTA8L2NvZGU+IHRoZW4gZHN0IGlzIG5vdCBtb2RpZmllZC4KLSAqCi0gKiBAcGFyYW0gZHN0IFRo
ZSBkZXN0aW5hdGlvbiBzdHJpbmcuCi0gKiBAcGFyYW0gc3JjIFRoZSBzb3VyY2Ugc3RyaW5nIChj
YW4gYmUgTlVMTC9pbnZhbGlkIGlmIG48PTApLgotICogQHBhcmFtIG4gVGhlIG1heGltdW0gbnVt
YmVyIG9mIGNoYXJhY3RlcnMgdG8gYXBwZW5kOyBuby1vcCBpZiA8PTAuCi0gKiBAcmV0dXJuIEEg
cG9pbnRlciB0byA8Y29kZT5kc3Q8L2NvZGU+LgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVf
U1RBQkxFIFVDaGFyKiBVX0VYUE9SVDIKLXVfc3RybmNhdChVQ2hhciAgICAgKmRzdCwgCi0gICAg
IGNvbnN0IFVDaGFyICAgICAqc3JjLCAKLSAgICAgaW50MzJfdCAgICAgbik7Ci0KLS8qKgotICog
RmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHN1YnN0cmluZyBpbiBhIHN0cmluZy4KLSAq
IFRoZSBzdWJzdHJpbmcgaXMgZm91bmQgYXQgY29kZSBwb2ludCBib3VuZGFyaWVzLgotICogVGhh
dCBtZWFucyB0aGF0IGlmIHRoZSBzdWJzdHJpbmcgYmVnaW5zIHdpdGgKLSAqIGEgdHJhaWwgc3Vy
cm9nYXRlIG9yIGVuZHMgd2l0aCBhIGxlYWQgc3Vycm9nYXRlLAotICogdGhlbiBpdCBpcyBmb3Vu
ZCBvbmx5IGlmIHRoZXNlIHN1cnJvZ2F0ZXMgc3RhbmQgYWxvbmUgaW4gdGhlIHRleHQuCi0gKiBP
dGhlcndpc2UsIHRoZSBzdWJzdHJpbmcgZWRnZSB1bml0cyB3b3VsZCBiZSBtYXRjaGVkIGFnYWlu
c3QKLSAqIGhhbHZlcyBvZiBzdXJyb2dhdGUgcGFpcnMuCi0gKgotICogQHBhcmFtIHMgVGhlIHN0
cmluZyB0byBzZWFyY2ggKE5VTC10ZXJtaW5hdGVkKS4KLSAqIEBwYXJhbSBzdWJzdHJpbmcgVGhl
IHN1YnN0cmluZyB0byBmaW5kIChOVUwtdGVybWluYXRlZCkuCi0gKiBAcmV0dXJuIEEgcG9pbnRl
ciB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiA8Y29kZT5zdWJzdHJpbmc8L2NvZGU+IGluIDxj
b2RlPnM8L2NvZGU+LAotICogICAgICAgICBvciA8Y29kZT5zPC9jb2RlPiBpdHNlbGYgaWYgdGhl
IDxjb2RlPnN1YnN0cmluZzwvY29kZT4gaXMgZW1wdHksCi0gKiAgICAgICAgIG9yIDxjb2RlPk5V
TEw8L2NvZGU+IGlmIDxjb2RlPnN1YnN0cmluZzwvY29kZT4gaXMgbm90IGluIDxjb2RlPnM8L2Nv
ZGU+LgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKgotICogQHNlZSB1X3N0cnJzdHIKLSAqIEBzZWUg
dV9zdHJGaW5kRmlyc3QKLSAqIEBzZWUgdV9zdHJGaW5kTGFzdAotICovCi1VX1NUQUJMRSBVQ2hh
ciAqIFVfRVhQT1JUMgotdV9zdHJzdHIoY29uc3QgVUNoYXIgKnMsIGNvbnN0IFVDaGFyICpzdWJz
dHJpbmcpOwotCi0vKioKLSAqIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzdWJzdHJp
bmcgaW4gYSBzdHJpbmcuCi0gKiBUaGUgc3Vic3RyaW5nIGlzIGZvdW5kIGF0IGNvZGUgcG9pbnQg
Ym91bmRhcmllcy4KLSAqIFRoYXQgbWVhbnMgdGhhdCBpZiB0aGUgc3Vic3RyaW5nIGJlZ2lucyB3
aXRoCi0gKiBhIHRyYWlsIHN1cnJvZ2F0ZSBvciBlbmRzIHdpdGggYSBsZWFkIHN1cnJvZ2F0ZSwK
LSAqIHRoZW4gaXQgaXMgZm91bmQgb25seSBpZiB0aGVzZSBzdXJyb2dhdGVzIHN0YW5kIGFsb25l
IGluIHRoZSB0ZXh0LgotICogT3RoZXJ3aXNlLCB0aGUgc3Vic3RyaW5nIGVkZ2UgdW5pdHMgd291
bGQgYmUgbWF0Y2hlZCBhZ2FpbnN0Ci0gKiBoYWx2ZXMgb2Ygc3Vycm9nYXRlIHBhaXJzLgotICoK
LSAqIEBwYXJhbSBzIFRoZSBzdHJpbmcgdG8gc2VhcmNoLgotICogQHBhcmFtIGxlbmd0aCBUaGUg
bGVuZ3RoIG9mIHMgKG51bWJlciBvZiBVQ2hhcnMpLCBvciAtMSBpZiBpdCBpcyBOVUwtdGVybWlu
YXRlZC4KLSAqIEBwYXJhbSBzdWJzdHJpbmcgVGhlIHN1YnN0cmluZyB0byBmaW5kIChOVUwtdGVy
bWluYXRlZCkuCi0gKiBAcGFyYW0gc3ViTGVuZ3RoIFRoZSBsZW5ndGggb2Ygc3Vic3RyaW5nIChu
dW1iZXIgb2YgVUNoYXJzKSwgb3IgLTEgaWYgaXQgaXMgTlVMLXRlcm1pbmF0ZWQuCi0gKiBAcmV0
dXJuIEEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiA8Y29kZT5zdWJzdHJpbmc8
L2NvZGU+IGluIDxjb2RlPnM8L2NvZGU+LAotICogICAgICAgICBvciA8Y29kZT5zPC9jb2RlPiBp
dHNlbGYgaWYgdGhlIDxjb2RlPnN1YnN0cmluZzwvY29kZT4gaXMgZW1wdHksCi0gKiAgICAgICAg
IG9yIDxjb2RlPk5VTEw8L2NvZGU+IGlmIDxjb2RlPnN1YnN0cmluZzwvY29kZT4gaXMgbm90IGlu
IDxjb2RlPnM8L2NvZGU+LgotICogQHN0YWJsZSBJQ1UgMi40Ci0gKgotICogQHNlZSB1X3N0cnN0
cgotICogQHNlZSB1X3N0ckZpbmRMYXN0Ci0gKi8KLVVfU1RBQkxFIFVDaGFyICogVV9FWFBPUlQy
Ci11X3N0ckZpbmRGaXJzdChjb25zdCBVQ2hhciAqcywgaW50MzJfdCBsZW5ndGgsIGNvbnN0IFVD
aGFyICpzdWJzdHJpbmcsIGludDMyX3Qgc3ViTGVuZ3RoKTsKLQotLyoqCi0gKiBGaW5kIHRoZSBm
aXJzdCBvY2N1cnJlbmNlIG9mIGEgQk1QIGNvZGUgcG9pbnQgaW4gYSBzdHJpbmcuCi0gKiBBIHN1
cnJvZ2F0ZSBjb2RlIHBvaW50IGlzIGZvdW5kIG9ubHkgaWYgaXRzIG1hdGNoIGluIHRoZSB0ZXh0
IGlzIG5vdAotICogcGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyLgotICogQSBOVUwgY2hhcmFjdGVy
IGlzIGZvdW5kIGF0IHRoZSBzdHJpbmcgdGVybWluYXRvci4KLSAqCi0gKiBAcGFyYW0gcyBUaGUg
c3RyaW5nIHRvIHNlYXJjaCAoTlVMLXRlcm1pbmF0ZWQpLgotICogQHBhcmFtIGMgVGhlIEJNUCBj
b2RlIHBvaW50IHRvIGZpbmQuCi0gKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb2Nj
dXJyZW5jZSBvZiA8Y29kZT5jPC9jb2RlPiBpbiA8Y29kZT5zPC9jb2RlPgotICogICAgICAgICBv
ciA8Y29kZT5OVUxMPC9jb2RlPiBpZiA8Y29kZT5jPC9jb2RlPiBpcyBub3QgaW4gPGNvZGU+czwv
Y29kZT4uCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqCi0gKiBAc2VlIHVfc3RyY2hyMzIKLSAqIEBz
ZWUgdV9tZW1jaHIKLSAqIEBzZWUgdV9zdHJzdHIKLSAqIEBzZWUgdV9zdHJGaW5kRmlyc3QKLSAq
LwotVV9TVEFCTEUgVUNoYXIgKiBVX0VYUE9SVDIKLXVfc3RyY2hyKGNvbnN0IFVDaGFyICpzLCBV
Q2hhciBjKTsKLQotLyoqCi0gKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgY29kZSBw
b2ludCBpbiBhIHN0cmluZy4KLSAqIEEgc3Vycm9nYXRlIGNvZGUgcG9pbnQgaXMgZm91bmQgb25s
eSBpZiBpdHMgbWF0Y2ggaW4gdGhlIHRleHQgaXMgbm90Ci0gKiBwYXJ0IG9mIGEgc3Vycm9nYXRl
IHBhaXIuCi0gKiBBIE5VTCBjaGFyYWN0ZXIgaXMgZm91bmQgYXQgdGhlIHN0cmluZyB0ZXJtaW5h
dG9yLgotICoKLSAqIEBwYXJhbSBzIFRoZSBzdHJpbmcgdG8gc2VhcmNoIChOVUwtdGVybWluYXRl
ZCkuCi0gKiBAcGFyYW0gYyBUaGUgY29kZSBwb2ludCB0byBmaW5kLgotICogQHJldHVybiBBIHBv
aW50ZXIgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgPGNvZGU+YzwvY29kZT4gaW4gPGNvZGU+
czwvY29kZT4KLSAqICAgICAgICAgb3IgPGNvZGU+TlVMTDwvY29kZT4gaWYgPGNvZGU+YzwvY29k
ZT4gaXMgbm90IGluIDxjb2RlPnM8L2NvZGU+LgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKgotICog
QHNlZSB1X3N0cmNocgotICogQHNlZSB1X21lbWNocjMyCi0gKiBAc2VlIHVfc3Ryc3RyCi0gKiBA
c2VlIHVfc3RyRmluZEZpcnN0Ci0gKi8KLVVfU1RBQkxFIFVDaGFyICogVV9FWFBPUlQyCi11X3N0
cmNocjMyKGNvbnN0IFVDaGFyICpzLCBVQ2hhcjMyIGMpOwotCi0vKioKLSAqIEZpbmQgdGhlIGxh
c3Qgb2NjdXJyZW5jZSBvZiBhIHN1YnN0cmluZyBpbiBhIHN0cmluZy4KLSAqIFRoZSBzdWJzdHJp
bmcgaXMgZm91bmQgYXQgY29kZSBwb2ludCBib3VuZGFyaWVzLgotICogVGhhdCBtZWFucyB0aGF0
IGlmIHRoZSBzdWJzdHJpbmcgYmVnaW5zIHdpdGgKLSAqIGEgdHJhaWwgc3Vycm9nYXRlIG9yIGVu
ZHMgd2l0aCBhIGxlYWQgc3Vycm9nYXRlLAotICogdGhlbiBpdCBpcyBmb3VuZCBvbmx5IGlmIHRo
ZXNlIHN1cnJvZ2F0ZXMgc3RhbmQgYWxvbmUgaW4gdGhlIHRleHQuCi0gKiBPdGhlcndpc2UsIHRo
ZSBzdWJzdHJpbmcgZWRnZSB1bml0cyB3b3VsZCBiZSBtYXRjaGVkIGFnYWluc3QKLSAqIGhhbHZl
cyBvZiBzdXJyb2dhdGUgcGFpcnMuCi0gKgotICogQHBhcmFtIHMgVGhlIHN0cmluZyB0byBzZWFy
Y2ggKE5VTC10ZXJtaW5hdGVkKS4KLSAqIEBwYXJhbSBzdWJzdHJpbmcgVGhlIHN1YnN0cmluZyB0
byBmaW5kIChOVUwtdGVybWluYXRlZCkuCi0gKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgbGFz
dCBvY2N1cnJlbmNlIG9mIDxjb2RlPnN1YnN0cmluZzwvY29kZT4gaW4gPGNvZGU+czwvY29kZT4s
Ci0gKiAgICAgICAgIG9yIDxjb2RlPnM8L2NvZGU+IGl0c2VsZiBpZiB0aGUgPGNvZGU+c3Vic3Ry
aW5nPC9jb2RlPiBpcyBlbXB0eSwKLSAqICAgICAgICAgb3IgPGNvZGU+TlVMTDwvY29kZT4gaWYg
PGNvZGU+c3Vic3RyaW5nPC9jb2RlPiBpcyBub3QgaW4gPGNvZGU+czwvY29kZT4uCi0gKiBAc3Rh
YmxlIElDVSAyLjQKLSAqCi0gKiBAc2VlIHVfc3Ryc3RyCi0gKiBAc2VlIHVfc3RyRmluZEZpcnN0
Ci0gKiBAc2VlIHVfc3RyRmluZExhc3QKLSAqLwotVV9TVEFCTEUgVUNoYXIgKiBVX0VYUE9SVDIK
LXVfc3RycnN0cihjb25zdCBVQ2hhciAqcywgY29uc3QgVUNoYXIgKnN1YnN0cmluZyk7Ci0KLS8q
KgotICogRmluZCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGEgc3Vic3RyaW5nIGluIGEgc3RyaW5n
LgotICogVGhlIHN1YnN0cmluZyBpcyBmb3VuZCBhdCBjb2RlIHBvaW50IGJvdW5kYXJpZXMuCi0g
KiBUaGF0IG1lYW5zIHRoYXQgaWYgdGhlIHN1YnN0cmluZyBiZWdpbnMgd2l0aAotICogYSB0cmFp
bCBzdXJyb2dhdGUgb3IgZW5kcyB3aXRoIGEgbGVhZCBzdXJyb2dhdGUsCi0gKiB0aGVuIGl0IGlz
IGZvdW5kIG9ubHkgaWYgdGhlc2Ugc3Vycm9nYXRlcyBzdGFuZCBhbG9uZSBpbiB0aGUgdGV4dC4K
LSAqIE90aGVyd2lzZSwgdGhlIHN1YnN0cmluZyBlZGdlIHVuaXRzIHdvdWxkIGJlIG1hdGNoZWQg
YWdhaW5zdAotICogaGFsdmVzIG9mIHN1cnJvZ2F0ZSBwYWlycy4KLSAqCi0gKiBAcGFyYW0gcyBU
aGUgc3RyaW5nIHRvIHNlYXJjaC4KLSAqIEBwYXJhbSBsZW5ndGggVGhlIGxlbmd0aCBvZiBzIChu
dW1iZXIgb2YgVUNoYXJzKSwgb3IgLTEgaWYgaXQgaXMgTlVMLXRlcm1pbmF0ZWQuCi0gKiBAcGFy
YW0gc3Vic3RyaW5nIFRoZSBzdWJzdHJpbmcgdG8gZmluZCAoTlVMLXRlcm1pbmF0ZWQpLgotICog
QHBhcmFtIHN1Ykxlbmd0aCBUaGUgbGVuZ3RoIG9mIHN1YnN0cmluZyAobnVtYmVyIG9mIFVDaGFy
cyksIG9yIC0xIGlmIGl0IGlzIE5VTC10ZXJtaW5hdGVkLgotICogQHJldHVybiBBIHBvaW50ZXIg
dG8gdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiA8Y29kZT5zdWJzdHJpbmc8L2NvZGU+IGluIDxjb2Rl
PnM8L2NvZGU+LAotICogICAgICAgICBvciA8Y29kZT5zPC9jb2RlPiBpdHNlbGYgaWYgdGhlIDxj
b2RlPnN1YnN0cmluZzwvY29kZT4gaXMgZW1wdHksCi0gKiAgICAgICAgIG9yIDxjb2RlPk5VTEw8
L2NvZGU+IGlmIDxjb2RlPnN1YnN0cmluZzwvY29kZT4gaXMgbm90IGluIDxjb2RlPnM8L2NvZGU+
LgotICogQHN0YWJsZSBJQ1UgMi40Ci0gKgotICogQHNlZSB1X3N0cnN0cgotICogQHNlZSB1X3N0
ckZpbmRMYXN0Ci0gKi8KLVVfU1RBQkxFIFVDaGFyICogVV9FWFBPUlQyCi11X3N0ckZpbmRMYXN0
KGNvbnN0IFVDaGFyICpzLCBpbnQzMl90IGxlbmd0aCwgY29uc3QgVUNoYXIgKnN1YnN0cmluZywg
aW50MzJfdCBzdWJMZW5ndGgpOwotCi0vKioKLSAqIEZpbmQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBv
ZiBhIEJNUCBjb2RlIHBvaW50IGluIGEgc3RyaW5nLgotICogQSBzdXJyb2dhdGUgY29kZSBwb2lu
dCBpcyBmb3VuZCBvbmx5IGlmIGl0cyBtYXRjaCBpbiB0aGUgdGV4dCBpcyBub3QKLSAqIHBhcnQg
b2YgYSBzdXJyb2dhdGUgcGFpci4KLSAqIEEgTlVMIGNoYXJhY3RlciBpcyBmb3VuZCBhdCB0aGUg
c3RyaW5nIHRlcm1pbmF0b3IuCi0gKgotICogQHBhcmFtIHMgVGhlIHN0cmluZyB0byBzZWFyY2gg
KE5VTC10ZXJtaW5hdGVkKS4KLSAqIEBwYXJhbSBjIFRoZSBCTVAgY29kZSBwb2ludCB0byBmaW5k
LgotICogQHJldHVybiBBIHBvaW50ZXIgdG8gdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiA8Y29kZT5j
PC9jb2RlPiBpbiA8Y29kZT5zPC9jb2RlPgotICogICAgICAgICBvciA8Y29kZT5OVUxMPC9jb2Rl
PiBpZiA8Y29kZT5jPC9jb2RlPiBpcyBub3QgaW4gPGNvZGU+czwvY29kZT4uCi0gKiBAc3RhYmxl
IElDVSAyLjQKLSAqCi0gKiBAc2VlIHVfc3RycmNocjMyCi0gKiBAc2VlIHVfbWVtcmNocgotICog
QHNlZSB1X3N0cnJzdHIKLSAqIEBzZWUgdV9zdHJGaW5kTGFzdAotICovCi1VX1NUQUJMRSBVQ2hh
ciAqIFVfRVhQT1JUMgotdV9zdHJyY2hyKGNvbnN0IFVDaGFyICpzLCBVQ2hhciBjKTsKLQotLyoq
Ci0gKiBGaW5kIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSBjb2RlIHBvaW50IGluIGEgc3RyaW5n
LgotICogQSBzdXJyb2dhdGUgY29kZSBwb2ludCBpcyBmb3VuZCBvbmx5IGlmIGl0cyBtYXRjaCBp
biB0aGUgdGV4dCBpcyBub3QKLSAqIHBhcnQgb2YgYSBzdXJyb2dhdGUgcGFpci4KLSAqIEEgTlVM
IGNoYXJhY3RlciBpcyBmb3VuZCBhdCB0aGUgc3RyaW5nIHRlcm1pbmF0b3IuCi0gKgotICogQHBh
cmFtIHMgVGhlIHN0cmluZyB0byBzZWFyY2ggKE5VTC10ZXJtaW5hdGVkKS4KLSAqIEBwYXJhbSBj
IFRoZSBjb2RlIHBvaW50IHRvIGZpbmQuCi0gKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgbGFz
dCBvY2N1cnJlbmNlIG9mIDxjb2RlPmM8L2NvZGU+IGluIDxjb2RlPnM8L2NvZGU+Ci0gKiAgICAg
ICAgIG9yIDxjb2RlPk5VTEw8L2NvZGU+IGlmIDxjb2RlPmM8L2NvZGU+IGlzIG5vdCBpbiA8Y29k
ZT5zPC9jb2RlPi4KLSAqIEBzdGFibGUgSUNVIDIuNAotICoKLSAqIEBzZWUgdV9zdHJyY2hyCi0g
KiBAc2VlIHVfbWVtY2hyMzIKLSAqIEBzZWUgdV9zdHJyc3RyCi0gKiBAc2VlIHVfc3RyRmluZExh
c3QKLSAqLwotVV9TVEFCTEUgVUNoYXIgKiBVX0VYUE9SVDIKLXVfc3RycmNocjMyKGNvbnN0IFVD
aGFyICpzLCBVQ2hhcjMyIGMpOwotCi0vKioKLSAqIExvY2F0ZXMgdGhlIGZpcnN0IG9jY3VycmVu
Y2UgaW4gdGhlIHN0cmluZyA8Y29kZT5zdHJpbmc8L2NvZGU+IG9mIGFueSBvZiB0aGUgY2hhcmFj
dGVycwotICogaW4gdGhlIHN0cmluZyA8Y29kZT5tYXRjaFNldDwvY29kZT4uCi0gKiBXb3JrcyBq
dXN0IGxpa2UgQydzIHN0cnBicmsgYnV0IHdpdGggVW5pY29kZS4KLSAqCi0gKiBAcGFyYW0gc3Ry
aW5nIFRoZSBzdHJpbmcgaW4gd2hpY2ggdG8gc2VhcmNoLCBOVUwtdGVybWluYXRlZC4KLSAqIEBw
YXJhbSBtYXRjaFNldCBBIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBkZWZpbmluZyBhIHNldCBvZiBj
b2RlIHBvaW50cwotICogICAgICAgICAgICAgICAgIGZvciB3aGljaCB0byBzZWFyY2ggaW4gdGhl
IHRleHQgc3RyaW5nLgotICogQHJldHVybiBBIHBvaW50ZXIgdG8gdGhlICBjaGFyYWN0ZXIgaW4g
PGNvZGU+c3RyaW5nPC9jb2RlPiB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZQotICogICAgICAgICBj
aGFyYWN0ZXJzIGluIDxjb2RlPm1hdGNoU2V0PC9jb2RlPiwgb3IgTlVMTCBpZiBubyBzdWNoIGNo
YXJhY3RlciBpcyBmb3VuZC4KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBVQ2hh
ciAqIFVfRVhQT1JUMgotdV9zdHJwYnJrKGNvbnN0IFVDaGFyICpzdHJpbmcsIGNvbnN0IFVDaGFy
ICptYXRjaFNldCk7Ci0KLS8qKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZl
IGNoYXJhY3RlcnMgaW4gPGNvZGU+c3RyaW5nPC9jb2RlPiwKLSAqIGJlZ2lubmluZyB3aXRoIHRo
ZSBmaXJzdCwgdGhhdCBkbyBub3Qgb2NjdXIgc29tZXdoZXJlIGluIDxjb2RlPm1hdGNoU2V0PC9j
b2RlPi4KLSAqIFdvcmtzIGp1c3QgbGlrZSBDJ3Mgc3RyY3NwbiBidXQgd2l0aCBVbmljb2RlLgot
ICoKLSAqIEBwYXJhbSBzdHJpbmcgVGhlIHN0cmluZyBpbiB3aGljaCB0byBzZWFyY2gsIE5VTC10
ZXJtaW5hdGVkLgotICogQHBhcmFtIG1hdGNoU2V0IEEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGRl
ZmluaW5nIGEgc2V0IG9mIGNvZGUgcG9pbnRzCi0gKiAgICAgICAgICAgICAgICAgZm9yIHdoaWNo
IHRvIHNlYXJjaCBpbiB0aGUgdGV4dCBzdHJpbmcuCi0gKiBAcmV0dXJuIFRoZSBudW1iZXIgb2Yg
aW5pdGlhbCBjaGFyYWN0ZXJzIGluIDxjb2RlPnN0cmluZzwvY29kZT4gdGhhdCBkbyBub3QKLSAq
ICAgICAgICAgb2NjdXIgaW4gPGNvZGU+bWF0Y2hTZXQ8L2NvZGU+LgotICogQHNlZSB1X3N0cnNw
bgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCi11
X3N0cmNzcG4oY29uc3QgVUNoYXIgKnN0cmluZywgY29uc3QgVUNoYXIgKm1hdGNoU2V0KTsKLQot
LyoqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgY2hhcmFjdGVycyBpbiA8
Y29kZT5zdHJpbmc8L2NvZGU+LAotICogYmVnaW5uaW5nIHdpdGggdGhlIGZpcnN0LCB0aGF0IG9j
Y3VyIHNvbWV3aGVyZSBpbiA8Y29kZT5tYXRjaFNldDwvY29kZT4uCi0gKiBXb3JrcyBqdXN0IGxp
a2UgQydzIHN0cnNwbiBidXQgd2l0aCBVbmljb2RlLgotICoKLSAqIEBwYXJhbSBzdHJpbmcgVGhl
IHN0cmluZyBpbiB3aGljaCB0byBzZWFyY2gsIE5VTC10ZXJtaW5hdGVkLgotICogQHBhcmFtIG1h
dGNoU2V0IEEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGRlZmluaW5nIGEgc2V0IG9mIGNvZGUgcG9p
bnRzCi0gKiAgICAgICAgICAgICAgICAgZm9yIHdoaWNoIHRvIHNlYXJjaCBpbiB0aGUgdGV4dCBz
dHJpbmcuCi0gKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgaW5pdGlhbCBjaGFyYWN0ZXJzIGluIDxj
b2RlPnN0cmluZzwvY29kZT4gdGhhdCBkbwotICogICAgICAgICBvY2N1ciBpbiA8Y29kZT5tYXRj
aFNldDwvY29kZT4uCi0gKiBAc2VlIHVfc3RyY3NwbgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8K
LVVfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCi11X3N0cnNwbihjb25zdCBVQ2hhciAqc3RyaW5n
LCBjb25zdCBVQ2hhciAqbWF0Y2hTZXQpOwotCi0vKioKLSAqIFRoZSBzdHJpbmcgdG9rZW5pemVy
IEFQSSBhbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gYnJlYWsgYSBzdHJpbmcgaW50bwotICogdG9r
ZW5zLiBVbmxpa2Ugc3RydG9rKCksIHRoZSBzYXZlU3RhdGUgKHRoZSBjdXJyZW50IHBvaW50ZXIg
d2l0aGluIHRoZQotICogb3JpZ2luYWwgc3RyaW5nKSBpcyBtYWludGFpbmVkIGluIHNhdmVTdGF0
ZS4gSW4gdGhlIGZpcnN0IGNhbGwsIHRoZQotICogYXJndW1lbnQgc3JjIGlzIGEgcG9pbnRlciB0
byB0aGUgc3RyaW5nLiBJbiBzdWJzZXF1ZW50IGNhbGxzIHRvCi0gKiByZXR1cm4gc3VjY2Vzc2l2
ZSB0b2tlbnMgb2YgdGhhdCBzdHJpbmcsIHNyYyBtdXN0IGJlIHNwZWNpZmllZCBhcwotICogTlVM
TC4gVGhlIHZhbHVlIHNhdmVTdGF0ZSBpcyBzZXQgYnkgdGhpcyBmdW5jdGlvbiB0byBtYWludGFp
biB0aGUKLSAqIGZ1bmN0aW9uJ3MgcG9zaXRpb24gd2l0aGluIHRoZSBzdHJpbmcsIGFuZCBvbiBl
YWNoIHN1YnNlcXVlbnQgY2FsbAotICogeW91IG11c3QgZ2l2ZSB0aGlzIGFyZ3VtZW50IHRoZSBz
YW1lIHZhcmlhYmxlLiBUaGlzIGZ1bmN0aW9uIGRvZXMKLSAqIGhhbmRsZSBzdXJyb2dhdGUgcGFp
cnMuIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byB0aGUgc3RydG9rX3IoKQotICogdGhlIFBP
U0lYIFRocmVhZHMgRXh0ZW5zaW9uICgxMDAzLjFjLTE5OTUpIHZlcnNpb24uCi0gKgotICogQHBh
cmFtIHNyYyBTdHJpbmcgY29udGFpbmluZyB0b2tlbihzKS4gVGhpcyBzdHJpbmcgd2lsbCBiZSBt
b2RpZmllZC4KLSAqICAgICAgICAgICAgQWZ0ZXIgdGhlIGZpcnN0IGNhbGwgdG8gdV9zdHJ0b2tf
cigpLCB0aGlzIGFyZ3VtZW50IG11c3QKLSAqICAgICAgICAgICAgYmUgTlVMTCB0byBnZXQgdG8g
dGhlIG5leHQgdG9rZW4uCi0gKiBAcGFyYW0gZGVsaW0gU2V0IG9mIGRlbGltaXRlciBjaGFyYWN0
ZXJzIChVbmljb2RlIGNvZGUgcG9pbnRzKS4KLSAqIEBwYXJhbSBzYXZlU3RhdGUgVGhlIGN1cnJl
bnQgcG9pbnRlciB3aXRoaW4gdGhlIG9yaWdpbmFsIHN0cmluZywKLSAqICAgICAgICAgICAgICB3
aGljaCBpcyBzZXQgYnkgdGhpcyBmdW5jdGlvbi4gVGhlIHNhdmVTdGF0ZQotICogICAgICAgICAg
ICAgIHBhcmFtZXRlciBzaG91bGQgdGhlIGFkZHJlc3Mgb2YgYSBsb2NhbCB2YXJpYWJsZSBvZiB0
eXBlCi0gKiAgICAgICAgICAgICAgVUNoYXIgKi4gKGkuZS4gZGVmaW5lZCAiVWhhciAqbXlMb2Nh
bFNhdmVTdGF0ZSIgYW5kIHVzZQotICogICAgICAgICAgICAgICZteUxvY2FsU2F2ZVN0YXRlIGZv
ciB0aGlzIHBhcmFtZXRlcikuCi0gKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgbmV4dCB0b2tl
biBmb3VuZCBpbiBzcmMsIG9yIE5VTEwKLSAqICAgICAgICAgd2hlbiB0aGVyZSBhcmUgbm8gbW9y
ZSB0b2tlbnMuCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgVUNoYXIgKiBVX0VY
UE9SVDIKLXVfc3RydG9rX3IoVUNoYXIgICAgKnNyYywgCi0gICAgIGNvbnN0IFVDaGFyICAgICpk
ZWxpbSwKLSAgICAgICAgICAgVUNoYXIgICAqKnNhdmVTdGF0ZSk7Ci0KLS8qKgotICogQ29tcGFy
ZSB0d28gVW5pY29kZSBzdHJpbmdzIGZvciBiaXR3aXNlIGVxdWFsaXR5IChjb2RlIHVuaXQgb3Jk
ZXIpLgotICoKLSAqIEBwYXJhbSBzMSBBIHN0cmluZyB0byBjb21wYXJlLgotICogQHBhcmFtIHMy
IEEgc3RyaW5nIHRvIGNvbXBhcmUuCi0gKiBAcmV0dXJuIDAgaWYgPGNvZGU+czE8L2NvZGU+IGFu
ZCA8Y29kZT5zMjwvY29kZT4gYXJlIGJpdHdpc2UgZXF1YWw7IGEgbmVnYXRpdmUKLSAqIHZhbHVl
IGlmIDxjb2RlPnMxPC9jb2RlPiBpcyBiaXR3aXNlIGxlc3MgdGhhbiA8Y29kZT5zMiw8L2NvZGU+
OyBhIHBvc2l0aXZlCi0gKiB2YWx1ZSBpZiA8Y29kZT5zMTwvY29kZT4gaXMgYml0d2lzZSBncmVh
dGVyIHRoYW4gPGNvZGU+czI8L2NvZGU+LgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RB
QkxFIGludDMyX3QgIFVfRVhQT1JUMgotdV9zdHJjbXAoY29uc3QgVUNoYXIgICAgICpzMSwgCi0g
ICAgICAgICBjb25zdCBVQ2hhciAgICAgKnMyKTsKLQotLyoqCi0gKiBDb21wYXJlIHR3byBVbmlj
b2RlIHN0cmluZ3MgaW4gY29kZSBwb2ludCBvcmRlci4KLSAqIFNlZSB1X3N0ckNvbXBhcmUgZm9y
IGRldGFpbHMuCi0gKgotICogQHBhcmFtIHMxIEEgc3RyaW5nIHRvIGNvbXBhcmUuCi0gKiBAcGFy
YW0gczIgQSBzdHJpbmcgdG8gY29tcGFyZS4KLSAqIEByZXR1cm4gYSBuZWdhdGl2ZS96ZXJvL3Bv
c2l0aXZlIGludGVnZXIgY29ycmVzcG9uZGluZyB0byB3aGV0aGVyCi0gKiB0aGUgZmlyc3Qgc3Ry
aW5nIGlzIGxlc3MgdGhhbi9lcXVhbCB0by9ncmVhdGVyIHRoYW4gdGhlIHNlY29uZCBvbmUKLSAq
IGluIGNvZGUgcG9pbnQgb3JkZXIKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBp
bnQzMl90IFVfRVhQT1JUMgotdV9zdHJjbXBDb2RlUG9pbnRPcmRlcihjb25zdCBVQ2hhciAqczEs
IGNvbnN0IFVDaGFyICpzMik7Ci0KLS8qKgotICogQ29tcGFyZSB0d28gVW5pY29kZSBzdHJpbmdz
IChiaW5hcnkgb3JkZXIpLgotICoKLSAqIFRoZSBjb21wYXJpc29uIGNhbiBiZSBkb25lIGluIGNv
ZGUgdW5pdCBvcmRlciBvciBpbiBjb2RlIHBvaW50IG9yZGVyLgotICogVGhleSBkaWZmZXIgb25s
eSBpbiBVVEYtMTYgd2hlbgotICogY29tcGFyaW5nIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludHMg
KFUrMTAwMDAuLlUrMTBmZmZmKQotICogdG8gQk1QIGNvZGUgcG9pbnRzIG5lYXIgdGhlIGVuZCBv
ZiB0aGUgQk1QIChpLmUuLCBVK2UwMDAuLlUrZmZmZikuCi0gKiBJbiBjb2RlIHVuaXQgb3JkZXIs
IGhpZ2ggQk1QIGNvZGUgcG9pbnRzIHNvcnQgYWZ0ZXIgc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50
cwotICogYmVjYXVzZSB0aGV5IGFyZSBzdG9yZWQgYXMgcGFpcnMgb2Ygc3Vycm9nYXRlcyB3aGlj
aCBhcmUgYXQgVStkODAwLi5VK2RmZmYuCi0gKgotICogVGhpcyBmdW5jdGlvbnMgd29ya3Mgd2l0
aCBzdHJpbmdzIG9mIGRpZmZlcmVudCBleHBsaWNpdGx5IHNwZWNpZmllZCBsZW5ndGhzCi0gKiB1
bmxpa2UgdGhlIEFOU0kgQy1saWtlIHVfc3RyY21wKCkgYW5kIHVfbWVtY21wKCkgZXRjLgotICog
TlVMLXRlcm1pbmF0ZWQgc3RyaW5ncyBhcmUgcG9zc2libGUgd2l0aCBsZW5ndGggYXJndW1lbnRz
IG9mIC0xLgotICoKLSAqIEBwYXJhbSBzMSBGaXJzdCBzb3VyY2Ugc3RyaW5nLgotICogQHBhcmFt
IGxlbmd0aDEgTGVuZ3RoIG9mIGZpcnN0IHNvdXJjZSBzdHJpbmcsIG9yIC0xIGlmIE5VTC10ZXJt
aW5hdGVkLgotICoKLSAqIEBwYXJhbSBzMiBTZWNvbmQgc291cmNlIHN0cmluZy4KLSAqIEBwYXJh
bSBsZW5ndGgyIExlbmd0aCBvZiBzZWNvbmQgc291cmNlIHN0cmluZywgb3IgLTEgaWYgTlVMLXRl
cm1pbmF0ZWQuCi0gKgotICogQHBhcmFtIGNvZGVQb2ludE9yZGVyIENob29zZSBiZXR3ZWVuIGNv
ZGUgdW5pdCBvcmRlciAoRkFMU0UpCi0gKiAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNvZGUg
cG9pbnQgb3JkZXIgKFRSVUUpLgotICoKLSAqIEByZXR1cm4gPDAgb3IgMCBvciA+MCBhcyB1c3Vh
bCBmb3Igc3RyaW5nIGNvbXBhcmlzb25zCi0gKgotICogQHN0YWJsZSBJQ1UgMi4yCi0gKi8KLVVf
U1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCi11X3N0ckNvbXBhcmUoY29uc3QgVUNoYXIgKnMxLCBp
bnQzMl90IGxlbmd0aDEsCi0gICAgICAgICAgICAgY29uc3QgVUNoYXIgKnMyLCBpbnQzMl90IGxl
bmd0aDIsCi0gICAgICAgICAgICAgVUJvb2wgY29kZVBvaW50T3JkZXIpOwotCi0vKioKLSAqIENv
bXBhcmUgdHdvIFVuaWNvZGUgc3RyaW5ncyAoYmluYXJ5IG9yZGVyKQotICogYXMgcHJlc2VudGVk
IGJ5IFVDaGFySXRlcmF0b3Igb2JqZWN0cy4KLSAqIFdvcmtzIG90aGVyd2lzZSBqdXN0IGxpa2Ug
dV9zdHJDb21wYXJlKCkuCi0gKgotICogQm90aCBpdGVyYXRvcnMgYXJlIHJlc2V0IHRvIHRoZWly
IHN0YXJ0IHBvc2l0aW9ucy4KLSAqIFdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMsIGl0IGlzIHVu
ZGVmaW5lZCB3aGVyZSB0aGUgaXRlcmF0b3JzCi0gKiBoYXZlIHN0b3BwZWQuCi0gKgotICogQHBh
cmFtIGl0ZXIxIEZpcnN0IHNvdXJjZSBzdHJpbmcgaXRlcmF0b3IuCi0gKiBAcGFyYW0gaXRlcjIg
U2Vjb25kIHNvdXJjZSBzdHJpbmcgaXRlcmF0b3IuCi0gKiBAcGFyYW0gY29kZVBvaW50T3JkZXIg
Q2hvb3NlIGJldHdlZW4gY29kZSB1bml0IG9yZGVyIChGQUxTRSkKLSAqICAgICAgICAgICAgICAg
ICAgICAgICBhbmQgY29kZSBwb2ludCBvcmRlciAoVFJVRSkuCi0gKgotICogQHJldHVybiA8MCBv
ciAwIG9yID4wIGFzIHVzdWFsIGZvciBzdHJpbmcgY29tcGFyaXNvbnMKLSAqCi0gKiBAc2VlIHVf
c3RyQ29tcGFyZQotICoKLSAqIEBzdGFibGUgSUNVIDIuNgotICovCi1VX1NUQUJMRSBpbnQzMl90
IFVfRVhQT1JUMgotdV9zdHJDb21wYXJlSXRlcihVQ2hhckl0ZXJhdG9yICppdGVyMSwgVUNoYXJJ
dGVyYXRvciAqaXRlcjIsIFVCb29sIGNvZGVQb2ludE9yZGVyKTsKLQotI2lmbmRlZiBVX0NPTVBB
UkVfQ09ERV9QT0lOVF9PUkRFUgotLyogc2VlIGFsc28gdW5pc3RyLmggYW5kIHVub3JtLmggKi8K
LS8qKgotICogT3B0aW9uIGJpdCBmb3IgdV9zdHJDYXNlQ29tcGFyZSwgdV9zdHJjYXNlY21wLCB1
bm9ybV9jb21wYXJlLCBldGM6Ci0gKiBDb21wYXJlIHN0cmluZ3MgaW4gY29kZSBwb2ludCBvcmRl
ciBpbnN0ZWFkIG9mIGNvZGUgdW5pdCBvcmRlci4KLSAqIEBzdGFibGUgSUNVIDIuMgotICovCi0j
ZGVmaW5lIFVfQ09NUEFSRV9DT0RFX1BPSU5UX09SREVSICAweDgwMDAKLSNlbmRpZgotCi0vKioK
LSAqIENvbXBhcmUgdHdvIHN0cmluZ3MgY2FzZS1pbnNlbnNpdGl2ZWx5IHVzaW5nIGZ1bGwgY2Fz
ZSBmb2xkaW5nLgotICogVGhpcyBpcyBlcXVpdmFsZW50IHRvCi0gKiAgIHVfc3RyQ29tcGFyZSh1
X3N0ckZvbGRDYXNlKHMxLCBvcHRpb25zKSwKLSAqICAgICAgICAgICAgICAgIHVfc3RyRm9sZENh
c2UoczIsIG9wdGlvbnMpLAotICogICAgICAgICAgICAgICAgKG9wdGlvbnMmVV9DT01QQVJFX0NP
REVfUE9JTlRfT1JERVIpIT0wKS4KLSAqCi0gKiBUaGUgY29tcGFyaXNvbiBjYW4gYmUgZG9uZSBp
biBVVEYtMTYgY29kZSB1bml0IG9yZGVyIG9yIGluIGNvZGUgcG9pbnQgb3JkZXIuCi0gKiBUaGV5
IGRpZmZlciBvbmx5IHdoZW4gY29tcGFyaW5nIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludHMgKFUr
MTAwMDAuLlUrMTBmZmZmKQotICogdG8gQk1QIGNvZGUgcG9pbnRzIG5lYXIgdGhlIGVuZCBvZiB0
aGUgQk1QIChpLmUuLCBVK2UwMDAuLlUrZmZmZikuCi0gKiBJbiBjb2RlIHVuaXQgb3JkZXIsIGhp
Z2ggQk1QIGNvZGUgcG9pbnRzIHNvcnQgYWZ0ZXIgc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50cwot
ICogYmVjYXVzZSB0aGV5IGFyZSBzdG9yZWQgYXMgcGFpcnMgb2Ygc3Vycm9nYXRlcyB3aGljaCBh
cmUgYXQgVStkODAwLi5VK2RmZmYuCi0gKgotICogVGhpcyBmdW5jdGlvbnMgd29ya3Mgd2l0aCBz
dHJpbmdzIG9mIGRpZmZlcmVudCBleHBsaWNpdGx5IHNwZWNpZmllZCBsZW5ndGhzCi0gKiB1bmxp
a2UgdGhlIEFOU0kgQy1saWtlIHVfc3RyY21wKCkgYW5kIHVfbWVtY21wKCkgZXRjLgotICogTlVM
LXRlcm1pbmF0ZWQgc3RyaW5ncyBhcmUgcG9zc2libGUgd2l0aCBsZW5ndGggYXJndW1lbnRzIG9m
IC0xLgotICoKLSAqIEBwYXJhbSBzMSBGaXJzdCBzb3VyY2Ugc3RyaW5nLgotICogQHBhcmFtIGxl
bmd0aDEgTGVuZ3RoIG9mIGZpcnN0IHNvdXJjZSBzdHJpbmcsIG9yIC0xIGlmIE5VTC10ZXJtaW5h
dGVkLgotICoKLSAqIEBwYXJhbSBzMiBTZWNvbmQgc291cmNlIHN0cmluZy4KLSAqIEBwYXJhbSBs
ZW5ndGgyIExlbmd0aCBvZiBzZWNvbmQgc291cmNlIHN0cmluZywgb3IgLTEgaWYgTlVMLXRlcm1p
bmF0ZWQuCi0gKgotICogQHBhcmFtIG9wdGlvbnMgQSBiaXQgc2V0IG9mIG9wdGlvbnM6Ci0gKiAg
IC0gVV9GT0xEX0NBU0VfREVGQVVMVCBvciAwIGlzIHVzZWQgZm9yIGRlZmF1bHQgb3B0aW9uczoK
LSAqICAgICBDb21wYXJpc29uIGluIGNvZGUgdW5pdCBvcmRlciB3aXRoIGRlZmF1bHQgY2FzZSBm
b2xkaW5nLgotICoKLSAqICAgLSBVX0NPTVBBUkVfQ09ERV9QT0lOVF9PUkRFUgotICogICAgIFNl
dCB0byBjaG9vc2UgY29kZSBwb2ludCBvcmRlciBpbnN0ZWFkIG9mIGNvZGUgdW5pdCBvcmRlcgot
ICogICAgIChzZWUgdV9zdHJDb21wYXJlIGZvciBkZXRhaWxzKS4KLSAqCi0gKiAgIC0gVV9GT0xE
X0NBU0VfRVhDTFVERV9TUEVDSUFMX0kKLSAqCi0gKiBAcGFyYW0gcEVycm9yQ29kZSBNdXN0IGJl
IGEgdmFsaWQgcG9pbnRlciB0byBhbiBlcnJvciBjb2RlIHZhbHVlLAotICogICAgICAgICAgICAg
ICAgICB3aGljaCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRoZSBmdW5jdGlv
biBjYWxsLgotICoKLSAqIEByZXR1cm4gPDAgb3IgMCBvciA+MCBhcyB1c3VhbCBmb3Igc3RyaW5n
IGNvbXBhcmlzb25zCi0gKgotICogQHN0YWJsZSBJQ1UgMi4yCi0gKi8KLVVfU1RBQkxFIGludDMy
X3QgVV9FWFBPUlQyCi11X3N0ckNhc2VDb21wYXJlKGNvbnN0IFVDaGFyICpzMSwgaW50MzJfdCBs
ZW5ndGgxLAotICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAqczIsIGludDMyX3QgbGVuZ3Ro
MiwKLSAgICAgICAgICAgICAgICAgdWludDMyX3Qgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAg
VUVycm9yQ29kZSAqcEVycm9yQ29kZSk7Ci0KLS8qKgotICogQ29tcGFyZSB0d28gdXN0cmluZ3Mg
Zm9yIGJpdHdpc2UgZXF1YWxpdHkuIAotICogQ29tcGFyZXMgYXQgbW9zdCA8Y29kZT5uPC9jb2Rl
PiBjaGFyYWN0ZXJzLgotICoKLSAqIEBwYXJhbSB1Y3MxIEEgc3RyaW5nIHRvIGNvbXBhcmUgKGNh
biBiZSBOVUxML2ludmFsaWQgaWYgbjw9MCkuCi0gKiBAcGFyYW0gdWNzMiBBIHN0cmluZyB0byBj
b21wYXJlIChjYW4gYmUgTlVMTC9pbnZhbGlkIGlmIG48PTApLgotICogQHBhcmFtIG4gVGhlIG1h
eGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gY29tcGFyZTsgYWx3YXlzIHJldHVybnMgMCBp
ZiBuPD0wLgotICogQHJldHVybiAwIGlmIDxjb2RlPnMxPC9jb2RlPiBhbmQgPGNvZGU+czI8L2Nv
ZGU+IGFyZSBiaXR3aXNlIGVxdWFsOyBhIG5lZ2F0aXZlCi0gKiB2YWx1ZSBpZiA8Y29kZT5zMTwv
Y29kZT4gaXMgYml0d2lzZSBsZXNzIHRoYW4gPGNvZGU+czI8L2NvZGU+OyBhIHBvc2l0aXZlCi0g
KiB2YWx1ZSBpZiA8Y29kZT5zMTwvY29kZT4gaXMgYml0d2lzZSBncmVhdGVyIHRoYW4gPGNvZGU+
czI8L2NvZGU+LgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9F
WFBPUlQyCi11X3N0cm5jbXAoY29uc3QgVUNoYXIgICAgICp1Y3MxLCAKLSAgICAgY29uc3QgVUNo
YXIgICAgICp1Y3MyLCAKLSAgICAgaW50MzJfdCAgICAgbik7Ci0KLS8qKgotICogQ29tcGFyZSB0
d28gVW5pY29kZSBzdHJpbmdzIGluIGNvZGUgcG9pbnQgb3JkZXIuCi0gKiBUaGlzIGlzIGRpZmZl
cmVudCBpbiBVVEYtMTYgZnJvbSB1X3N0cm5jbXAoKSBpZiBzdXBwbGVtZW50YXJ5IGNoYXJhY3Rl
cnMgYXJlIHByZXNlbnQuCi0gKiBGb3IgZGV0YWlscywgc2VlIHVfc3RyQ29tcGFyZSgpLgotICoK
LSAqIEBwYXJhbSBzMSBBIHN0cmluZyB0byBjb21wYXJlLgotICogQHBhcmFtIHMyIEEgc3RyaW5n
IHRvIGNvbXBhcmUuCi0gKiBAcGFyYW0gbiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVy
cyB0byBjb21wYXJlLgotICogQHJldHVybiBhIG5lZ2F0aXZlL3plcm8vcG9zaXRpdmUgaW50ZWdl
ciBjb3JyZXNwb25kaW5nIHRvIHdoZXRoZXIKLSAqIHRoZSBmaXJzdCBzdHJpbmcgaXMgbGVzcyB0
aGFuL2VxdWFsIHRvL2dyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kIG9uZQotICogaW4gY29kZSBwb2lu
dCBvcmRlcgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9FWFBP
UlQyCi11X3N0cm5jbXBDb2RlUG9pbnRPcmRlcihjb25zdCBVQ2hhciAqczEsIGNvbnN0IFVDaGFy
ICpzMiwgaW50MzJfdCBuKTsKLQotLyoqCi0gKiBDb21wYXJlIHR3byBzdHJpbmdzIGNhc2UtaW5z
ZW5zaXRpdmVseSB1c2luZyBmdWxsIGNhc2UgZm9sZGluZy4KLSAqIFRoaXMgaXMgZXF1aXZhbGVu
dCB0byB1X3N0cmNtcCh1X3N0ckZvbGRDYXNlKHMxLCBvcHRpb25zKSwgdV9zdHJGb2xkQ2FzZShz
Miwgb3B0aW9ucykpLgotICoKLSAqIEBwYXJhbSBzMSBBIHN0cmluZyB0byBjb21wYXJlLgotICog
QHBhcmFtIHMyIEEgc3RyaW5nIHRvIGNvbXBhcmUuCi0gKiBAcGFyYW0gb3B0aW9ucyBBIGJpdCBz
ZXQgb2Ygb3B0aW9uczoKLSAqICAgLSBVX0ZPTERfQ0FTRV9ERUZBVUxUIG9yIDAgaXMgdXNlZCBm
b3IgZGVmYXVsdCBvcHRpb25zOgotICogICAgIENvbXBhcmlzb24gaW4gY29kZSB1bml0IG9yZGVy
IHdpdGggZGVmYXVsdCBjYXNlIGZvbGRpbmcuCi0gKgotICogICAtIFVfQ09NUEFSRV9DT0RFX1BP
SU5UX09SREVSCi0gKiAgICAgU2V0IHRvIGNob29zZSBjb2RlIHBvaW50IG9yZGVyIGluc3RlYWQg
b2YgY29kZSB1bml0IG9yZGVyCi0gKiAgICAgKHNlZSB1X3N0ckNvbXBhcmUgZm9yIGRldGFpbHMp
LgotICoKLSAqICAgLSBVX0ZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSQotICoKLSAqIEByZXR1
cm4gQSBuZWdhdGl2ZSwgemVybywgb3IgcG9zaXRpdmUgaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBj
b21wYXJpc29uIHJlc3VsdC4KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBpbnQz
Ml90IFVfRVhQT1JUMgotdV9zdHJjYXNlY21wKGNvbnN0IFVDaGFyICpzMSwgY29uc3QgVUNoYXIg
KnMyLCB1aW50MzJfdCBvcHRpb25zKTsKLQotLyoqCi0gKiBDb21wYXJlIHR3byBzdHJpbmdzIGNh
c2UtaW5zZW5zaXRpdmVseSB1c2luZyBmdWxsIGNhc2UgZm9sZGluZy4KLSAqIFRoaXMgaXMgZXF1
aXZhbGVudCB0byB1X3N0cmNtcCh1X3N0ckZvbGRDYXNlKHMxLCBhdCBtb3N0IG4sIG9wdGlvbnMp
LAotICogdV9zdHJGb2xkQ2FzZShzMiwgYXQgbW9zdCBuLCBvcHRpb25zKSkuCi0gKgotICogQHBh
cmFtIHMxIEEgc3RyaW5nIHRvIGNvbXBhcmUuCi0gKiBAcGFyYW0gczIgQSBzdHJpbmcgdG8gY29t
cGFyZS4KLSAqIEBwYXJhbSBuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGVhY2gg
c3RyaW5nIHRvIGNhc2UtZm9sZCBhbmQgdGhlbiBjb21wYXJlLgotICogQHBhcmFtIG9wdGlvbnMg
QSBiaXQgc2V0IG9mIG9wdGlvbnM6Ci0gKiAgIC0gVV9GT0xEX0NBU0VfREVGQVVMVCBvciAwIGlz
IHVzZWQgZm9yIGRlZmF1bHQgb3B0aW9uczoKLSAqICAgICBDb21wYXJpc29uIGluIGNvZGUgdW5p
dCBvcmRlciB3aXRoIGRlZmF1bHQgY2FzZSBmb2xkaW5nLgotICoKLSAqICAgLSBVX0NPTVBBUkVf
Q09ERV9QT0lOVF9PUkRFUgotICogICAgIFNldCB0byBjaG9vc2UgY29kZSBwb2ludCBvcmRlciBp
bnN0ZWFkIG9mIGNvZGUgdW5pdCBvcmRlcgotICogICAgIChzZWUgdV9zdHJDb21wYXJlIGZvciBk
ZXRhaWxzKS4KLSAqCi0gKiAgIC0gVV9GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kKLSAqCi0g
KiBAcmV0dXJuIEEgbmVnYXRpdmUsIHplcm8sIG9yIHBvc2l0aXZlIGludGVnZXIgaW5kaWNhdGlu
ZyB0aGUgY29tcGFyaXNvbiByZXN1bHQuCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFC
TEUgaW50MzJfdCBVX0VYUE9SVDIKLXVfc3RybmNhc2VjbXAoY29uc3QgVUNoYXIgKnMxLCBjb25z
dCBVQ2hhciAqczIsIGludDMyX3QgbiwgdWludDMyX3Qgb3B0aW9ucyk7Ci0KLS8qKgotICogQ29t
cGFyZSB0d28gc3RyaW5ncyBjYXNlLWluc2Vuc2l0aXZlbHkgdXNpbmcgZnVsbCBjYXNlIGZvbGRp
bmcuCi0gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdV9zdHJjbXAodV9zdHJGb2xkQ2FzZShzMSwg
biwgb3B0aW9ucyksCi0gKiB1X3N0ckZvbGRDYXNlKHMyLCBuLCBvcHRpb25zKSkuCi0gKgotICog
QHBhcmFtIHMxIEEgc3RyaW5nIHRvIGNvbXBhcmUuCi0gKiBAcGFyYW0gczIgQSBzdHJpbmcgdG8g
Y29tcGFyZS4KLSAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGVh
Y2ggc3RyaW5nIHRvIGNhc2UtZm9sZCBhbmQgdGhlbiBjb21wYXJlLgotICogQHBhcmFtIG9wdGlv
bnMgQSBiaXQgc2V0IG9mIG9wdGlvbnM6Ci0gKiAgIC0gVV9GT0xEX0NBU0VfREVGQVVMVCBvciAw
IGlzIHVzZWQgZm9yIGRlZmF1bHQgb3B0aW9uczoKLSAqICAgICBDb21wYXJpc29uIGluIGNvZGUg
dW5pdCBvcmRlciB3aXRoIGRlZmF1bHQgY2FzZSBmb2xkaW5nLgotICoKLSAqICAgLSBVX0NPTVBB
UkVfQ09ERV9QT0lOVF9PUkRFUgotICogICAgIFNldCB0byBjaG9vc2UgY29kZSBwb2ludCBvcmRl
ciBpbnN0ZWFkIG9mIGNvZGUgdW5pdCBvcmRlcgotICogICAgIChzZWUgdV9zdHJDb21wYXJlIGZv
ciBkZXRhaWxzKS4KLSAqCi0gKiAgIC0gVV9GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kKLSAq
Ci0gKiBAcmV0dXJuIEEgbmVnYXRpdmUsIHplcm8sIG9yIHBvc2l0aXZlIGludGVnZXIgaW5kaWNh
dGluZyB0aGUgY29tcGFyaXNvbiByZXN1bHQuCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9T
VEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKLXVfbWVtY2FzZWNtcChjb25zdCBVQ2hhciAqczEsIGNv
bnN0IFVDaGFyICpzMiwgaW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IG9wdGlvbnMpOwotCi0vKioK
LSAqIENvcHkgYSB1c3RyaW5nLiBBZGRzIGEgbnVsbCB0ZXJtaW5hdG9yLgotICoKLSAqIEBwYXJh
bSBkc3QgVGhlIGRlc3RpbmF0aW9uIHN0cmluZy4KLSAqIEBwYXJhbSBzcmMgVGhlIHNvdXJjZSBz
dHJpbmcuCi0gKiBAcmV0dXJuIEEgcG9pbnRlciB0byA8Y29kZT5kc3Q8L2NvZGU+LgotICogQHN0
YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxFIFVDaGFyKiBVX0VYUE9SVDIKLXVfc3RyY3B5KFVD
aGFyICAgICAqZHN0LCAKLSAgICBjb25zdCBVQ2hhciAgICAgKnNyYyk7Ci0KLS8qKgotICogQ29w
eSBhIHVzdHJpbmcuCi0gKiBDb3BpZXMgYXQgbW9zdCA8Y29kZT5uPC9jb2RlPiBjaGFyYWN0ZXJz
LiAgVGhlIHJlc3VsdCB3aWxsIGJlIG51bGwgdGVybWluYXRlZAotICogaWYgdGhlIGxlbmd0aCBv
ZiA8Y29kZT5zcmM8L2NvZGU+IGlzIGxlc3MgdGhhbiA8Y29kZT5uPC9jb2RlPi4KLSAqCi0gKiBA
cGFyYW0gZHN0IFRoZSBkZXN0aW5hdGlvbiBzdHJpbmcuCi0gKiBAcGFyYW0gc3JjIFRoZSBzb3Vy
Y2Ugc3RyaW5nIChjYW4gYmUgTlVMTC9pbnZhbGlkIGlmIG48PTApLgotICogQHBhcmFtIG4gVGhl
IG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gY29weTsgbm8tb3AgaWYgPD0wLgotICog
QHJldHVybiBBIHBvaW50ZXIgdG8gPGNvZGU+ZHN0PC9jb2RlPi4KLSAqIEBzdGFibGUgSUNVIDIu
MAotICovCi1VX1NUQUJMRSBVQ2hhciogVV9FWFBPUlQyCi11X3N0cm5jcHkoVUNoYXIgICAgICpk
c3QsIAotICAgICBjb25zdCBVQ2hhciAgICAgKnNyYywgCi0gICAgIGludDMyX3QgICAgIG4pOwot
Ci0jaWYgIVVDT05GSUdfTk9fQ09OVkVSU0lPTgotCi0vKioKLSAqIENvcHkgYSBieXRlIHN0cmlu
ZyBlbmNvZGVkIGluIHRoZSBkZWZhdWx0IGNvZGVwYWdlIHRvIGEgdXN0cmluZy4KLSAqIEFkZHMg
YSBudWxsIHRlcm1pbmF0b3IuCi0gKiBQZXJmb3JtcyBhIGhvc3QgYnl0ZSB0byBVQ2hhciBjb252
ZXJzaW9uCi0gKgotICogQHBhcmFtIGRzdCBUaGUgZGVzdGluYXRpb24gc3RyaW5nLgotICogQHBh
cmFtIHNyYyBUaGUgc291cmNlIHN0cmluZy4KLSAqIEByZXR1cm4gQSBwb2ludGVyIHRvIDxjb2Rl
PmRzdDwvY29kZT4uCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgVUNoYXIqIFVf
RVhQT1JUMiB1X3Vhc3RyY3B5KFVDaGFyICpkc3QsCi0gICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpzcmMgKTsKLQotLyoqCi0gKiBDb3B5IGEgYnl0ZSBzdHJpbmcgZW5jb2RlZCBpbiB0aGUgZGVm
YXVsdCBjb2RlcGFnZSB0byBhIHVzdHJpbmcuCi0gKiBDb3BpZXMgYXQgbW9zdCA8Y29kZT5uPC9j
b2RlPiBjaGFyYWN0ZXJzLiAgVGhlIHJlc3VsdCB3aWxsIGJlIG51bGwgdGVybWluYXRlZAotICog
aWYgdGhlIGxlbmd0aCBvZiA8Y29kZT5zcmM8L2NvZGU+IGlzIGxlc3MgdGhhbiA8Y29kZT5uPC9j
b2RlPi4KLSAqIFBlcmZvcm1zIGEgaG9zdCBieXRlIHRvIFVDaGFyIGNvbnZlcnNpb24KLSAqCi0g
KiBAcGFyYW0gZHN0IFRoZSBkZXN0aW5hdGlvbiBzdHJpbmcuCi0gKiBAcGFyYW0gc3JjIFRoZSBz
b3VyY2Ugc3RyaW5nLgotICogQHBhcmFtIG4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgdG8gY29weS4KLSAqIEByZXR1cm4gQSBwb2ludGVyIHRvIDxjb2RlPmRzdDwvY29kZT4uCi0g
KiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgVUNoYXIqIFVfRVhQT1JUMiB1X3Vhc3Ry
bmNweShVQ2hhciAqZHN0LAotICAgICAgICAgICAgY29uc3QgY2hhciAqc3JjLAotICAgICAgICAg
ICAgaW50MzJfdCBuKTsKLQotLyoqCi0gKiBDb3B5IHVzdHJpbmcgdG8gYSBieXRlIHN0cmluZyBl
bmNvZGVkIGluIHRoZSBkZWZhdWx0IGNvZGVwYWdlLgotICogQWRkcyBhIG51bGwgdGVybWluYXRv
ci4KLSAqIFBlcmZvcm1zIGEgVUNoYXIgdG8gaG9zdCBieXRlIGNvbnZlcnNpb24KLSAqCi0gKiBA
cGFyYW0gZHN0IFRoZSBkZXN0aW5hdGlvbiBzdHJpbmcuCi0gKiBAcGFyYW0gc3JjIFRoZSBzb3Vy
Y2Ugc3RyaW5nLgotICogQHJldHVybiBBIHBvaW50ZXIgdG8gPGNvZGU+ZHN0PC9jb2RlPi4KLSAq
IEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBjaGFyKiBVX0VYUE9SVDIgdV9hdXN0cmNw
eShjaGFyICpkc3QsCi0gICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjICk7Ci0KLS8qKgotICog
Q29weSB1c3RyaW5nIHRvIGEgYnl0ZSBzdHJpbmcgZW5jb2RlZCBpbiB0aGUgZGVmYXVsdCBjb2Rl
cGFnZS4KLSAqIENvcGllcyBhdCBtb3N0IDxjb2RlPm48L2NvZGU+IGNoYXJhY3RlcnMuICBUaGUg
cmVzdWx0IHdpbGwgYmUgbnVsbCB0ZXJtaW5hdGVkCi0gKiBpZiB0aGUgbGVuZ3RoIG9mIDxjb2Rl
PnNyYzwvY29kZT4gaXMgbGVzcyB0aGFuIDxjb2RlPm48L2NvZGU+LgotICogUGVyZm9ybXMgYSBV
Q2hhciB0byBob3N0IGJ5dGUgY29udmVyc2lvbgotICoKLSAqIEBwYXJhbSBkc3QgVGhlIGRlc3Rp
bmF0aW9uIHN0cmluZy4KLSAqIEBwYXJhbSBzcmMgVGhlIHNvdXJjZSBzdHJpbmcuCi0gKiBAcGFy
YW0gbiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb3B5LgotICogQHJldHVy
biBBIHBvaW50ZXIgdG8gPGNvZGU+ZHN0PC9jb2RlPi4KLSAqIEBzdGFibGUgSUNVIDIuMAotICov
Ci1VX1NUQUJMRSBjaGFyKiBVX0VYUE9SVDIgdV9hdXN0cm5jcHkoY2hhciAqZHN0LAotICAgICAg
ICAgICAgY29uc3QgVUNoYXIgKnNyYywKLSAgICAgICAgICAgIGludDMyX3QgbiApOwotCi0jZW5k
aWYKLQotLyoqCi0gKiBTeW5vbnltIGZvciBtZW1jcHkoKSwgYnV0IHdpdGggVUNoYXJzIG9ubHku
Ci0gKiBAcGFyYW0gZGVzdCBUaGUgZGVzdGluYXRpb24gc3RyaW5nCi0gKiBAcGFyYW0gc3JjIFRo
ZSBzb3VyY2Ugc3RyaW5nIChjYW4gYmUgTlVMTC9pbnZhbGlkIGlmIGNvdW50PD0wKQotICogQHBh
cmFtIGNvdW50IFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb3B5OyBuby1vcCBpZiA8PTAK
LSAqIEByZXR1cm4gQSBwb2ludGVyIHRvIDxjb2RlPmRlc3Q8L2NvZGU+Ci0gKiBAc3RhYmxlIElD
VSAyLjAKLSAqLwotVV9TVEFCTEUgVUNoYXIqIFVfRVhQT1JUMgotdV9tZW1jcHkoVUNoYXIgKmRl
c3QsIGNvbnN0IFVDaGFyICpzcmMsIGludDMyX3QgY291bnQpOwotCi0vKioKLSAqIFN5bm9ueW0g
Zm9yIG1lbW1vdmUoKSwgYnV0IHdpdGggVUNoYXJzIG9ubHkuCi0gKiBAcGFyYW0gZGVzdCBUaGUg
ZGVzdGluYXRpb24gc3RyaW5nCi0gKiBAcGFyYW0gc3JjIFRoZSBzb3VyY2Ugc3RyaW5nIChjYW4g
YmUgTlVMTC9pbnZhbGlkIGlmIGNvdW50PD0wKQotICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIg
b2YgY2hhcmFjdGVycyB0byBtb3ZlOyBuby1vcCBpZiA8PTAKLSAqIEByZXR1cm4gQSBwb2ludGVy
IHRvIDxjb2RlPmRlc3Q8L2NvZGU+Ci0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUg
VUNoYXIqIFVfRVhQT1JUMgotdV9tZW1tb3ZlKFVDaGFyICpkZXN0LCBjb25zdCBVQ2hhciAqc3Jj
LCBpbnQzMl90IGNvdW50KTsKLQotLyoqCi0gKiBJbml0aWFsaXplIDxjb2RlPmNvdW50PC9jb2Rl
PiBjaGFyYWN0ZXJzIG9mIDxjb2RlPmRlc3Q8L2NvZGU+IHRvIDxjb2RlPmM8L2NvZGU+LgotICoK
LSAqIEBwYXJhbSBkZXN0IFRoZSBkZXN0aW5hdGlvbiBzdHJpbmcuCi0gKiBAcGFyYW0gYyBUaGUg
Y2hhcmFjdGVyIHRvIGluaXRpYWxpemUgdGhlIHN0cmluZy4KLSAqIEBwYXJhbSBjb3VudCBUaGUg
bWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBzZXQuCi0gKiBAcmV0dXJuIEEgcG9pbnRl
ciB0byA8Y29kZT5kZXN0PC9jb2RlPi4KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJM
RSBVQ2hhciogVV9FWFBPUlQyCi11X21lbXNldChVQ2hhciAqZGVzdCwgVUNoYXIgYywgaW50MzJf
dCBjb3VudCk7Ci0KLS8qKgotICogQ29tcGFyZSB0aGUgZmlyc3QgPGNvZGU+Y291bnQ8L2NvZGU+
IFVDaGFycyBvZiBlYWNoIGJ1ZmZlci4KLSAqCi0gKiBAcGFyYW0gYnVmMSBUaGUgZmlyc3Qgc3Ry
aW5nIHRvIGNvbXBhcmUuCi0gKiBAcGFyYW0gYnVmMiBUaGUgc2Vjb25kIHN0cmluZyB0byBjb21w
YXJlLgotICogQHBhcmFtIGNvdW50IFRoZSBtYXhpbXVtIG51bWJlciBvZiBVQ2hhcnMgdG8gY29t
cGFyZS4KLSAqIEByZXR1cm4gV2hlbiBidWYxIDwgYnVmMiwgYSBuZWdhdGl2ZSBudW1iZXIgaXMg
cmV0dXJuZWQuCi0gKiAgICAgIFdoZW4gYnVmMSA9PSBidWYyLCAwIGlzIHJldHVybmVkLgotICog
ICAgICBXaGVuIGJ1ZjEgPiBidWYyLCBhIHBvc2l0aXZlIG51bWJlciBpcyByZXR1cm5lZC4KLSAq
IEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgotdV9tZW1j
bXAoY29uc3QgVUNoYXIgKmJ1ZjEsIGNvbnN0IFVDaGFyICpidWYyLCBpbnQzMl90IGNvdW50KTsK
LQotLyoqCi0gKiBDb21wYXJlIHR3byBVbmljb2RlIHN0cmluZ3MgaW4gY29kZSBwb2ludCBvcmRl
ci4KLSAqIFRoaXMgaXMgZGlmZmVyZW50IGluIFVURi0xNiBmcm9tIHVfbWVtY21wKCkgaWYgc3Vw
cGxlbWVudGFyeSBjaGFyYWN0ZXJzIGFyZSBwcmVzZW50LgotICogRm9yIGRldGFpbHMsIHNlZSB1
X3N0ckNvbXBhcmUoKS4KLSAqCi0gKiBAcGFyYW0gczEgQSBzdHJpbmcgdG8gY29tcGFyZS4KLSAq
IEBwYXJhbSBzMiBBIHN0cmluZyB0byBjb21wYXJlLgotICogQHBhcmFtIGNvdW50IFRoZSBtYXhp
bXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvbXBhcmUuCi0gKiBAcmV0dXJuIGEgbmVnYXRp
dmUvemVyby9wb3NpdGl2ZSBpbnRlZ2VyIGNvcnJlc3BvbmRpbmcgdG8gd2hldGhlcgotICogdGhl
IGZpcnN0IHN0cmluZyBpcyBsZXNzIHRoYW4vZXF1YWwgdG8vZ3JlYXRlciB0aGFuIHRoZSBzZWNv
bmQgb25lCi0gKiBpbiBjb2RlIHBvaW50IG9yZGVyCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwot
VV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKLXVfbWVtY21wQ29kZVBvaW50T3JkZXIoY29uc3Qg
VUNoYXIgKnMxLCBjb25zdCBVQ2hhciAqczIsIGludDMyX3QgY291bnQpOwotCi0vKioKLSAqIEZp
bmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBCTVAgY29kZSBwb2ludCBpbiBhIHN0cmluZy4K
LSAqIEEgc3Vycm9nYXRlIGNvZGUgcG9pbnQgaXMgZm91bmQgb25seSBpZiBpdHMgbWF0Y2ggaW4g
dGhlIHRleHQgaXMgbm90Ci0gKiBwYXJ0IG9mIGEgc3Vycm9nYXRlIHBhaXIuCi0gKiBBIE5VTCBj
aGFyYWN0ZXIgaXMgZm91bmQgYXQgdGhlIHN0cmluZyB0ZXJtaW5hdG9yLgotICoKLSAqIEBwYXJh
bSBzIFRoZSBzdHJpbmcgdG8gc2VhcmNoIChjb250YWlucyA8Y29kZT5jb3VudDwvY29kZT4gVUNo
YXJzKS4KLSAqIEBwYXJhbSBjIFRoZSBCTVAgY29kZSBwb2ludCB0byBmaW5kLgotICogQHBhcmFt
IGNvdW50IFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4KLSAqIEByZXR1cm4gQSBwb2ludGVyIHRv
IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIDxjb2RlPmM8L2NvZGU+IGluIDxjb2RlPnM8L2NvZGU+
Ci0gKiAgICAgICAgIG9yIDxjb2RlPk5VTEw8L2NvZGU+IGlmIDxjb2RlPmM8L2NvZGU+IGlzIG5v
dCBpbiA8Y29kZT5zPC9jb2RlPi4KLSAqIEBzdGFibGUgSUNVIDIuMAotICoKLSAqIEBzZWUgdV9z
dHJjaHIKLSAqIEBzZWUgdV9tZW1jaHIzMgotICogQHNlZSB1X3N0ckZpbmRGaXJzdAotICovCi1V
X1NUQUJMRSBVQ2hhciogVV9FWFBPUlQyCi11X21lbWNocihjb25zdCBVQ2hhciAqcywgVUNoYXIg
YywgaW50MzJfdCBjb3VudCk7Ci0KLS8qKgotICogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBv
ZiBhIGNvZGUgcG9pbnQgaW4gYSBzdHJpbmcuCi0gKiBBIHN1cnJvZ2F0ZSBjb2RlIHBvaW50IGlz
IGZvdW5kIG9ubHkgaWYgaXRzIG1hdGNoIGluIHRoZSB0ZXh0IGlzIG5vdAotICogcGFydCBvZiBh
IHN1cnJvZ2F0ZSBwYWlyLgotICogQSBOVUwgY2hhcmFjdGVyIGlzIGZvdW5kIGF0IHRoZSBzdHJp
bmcgdGVybWluYXRvci4KLSAqCi0gKiBAcGFyYW0gcyBUaGUgc3RyaW5nIHRvIHNlYXJjaCAoY29u
dGFpbnMgPGNvZGU+Y291bnQ8L2NvZGU+IFVDaGFycykuCi0gKiBAcGFyYW0gYyBUaGUgY29kZSBw
b2ludCB0byBmaW5kLgotICogQHBhcmFtIGNvdW50IFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4K
LSAqIEByZXR1cm4gQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIDxjb2RlPmM8
L2NvZGU+IGluIDxjb2RlPnM8L2NvZGU+Ci0gKiAgICAgICAgIG9yIDxjb2RlPk5VTEw8L2NvZGU+
IGlmIDxjb2RlPmM8L2NvZGU+IGlzIG5vdCBpbiA8Y29kZT5zPC9jb2RlPi4KLSAqIEBzdGFibGUg
SUNVIDIuMAotICoKLSAqIEBzZWUgdV9zdHJjaHIzMgotICogQHNlZSB1X21lbWNocgotICogQHNl
ZSB1X3N0ckZpbmRGaXJzdAotICovCi1VX1NUQUJMRSBVQ2hhciogVV9FWFBPUlQyCi11X21lbWNo
cjMyKGNvbnN0IFVDaGFyICpzLCBVQ2hhcjMyIGMsIGludDMyX3QgY291bnQpOwotCi0vKioKLSAq
IEZpbmQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIEJNUCBjb2RlIHBvaW50IGluIGEgc3RyaW5n
LgotICogQSBzdXJyb2dhdGUgY29kZSBwb2ludCBpcyBmb3VuZCBvbmx5IGlmIGl0cyBtYXRjaCBp
biB0aGUgdGV4dCBpcyBub3QKLSAqIHBhcnQgb2YgYSBzdXJyb2dhdGUgcGFpci4KLSAqIEEgTlVM
IGNoYXJhY3RlciBpcyBmb3VuZCBhdCB0aGUgc3RyaW5nIHRlcm1pbmF0b3IuCi0gKgotICogQHBh
cmFtIHMgVGhlIHN0cmluZyB0byBzZWFyY2ggKGNvbnRhaW5zIDxjb2RlPmNvdW50PC9jb2RlPiBV
Q2hhcnMpLgotICogQHBhcmFtIGMgVGhlIEJNUCBjb2RlIHBvaW50IHRvIGZpbmQuCi0gKiBAcGFy
YW0gY291bnQgVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgotICogQHJldHVybiBBIHBvaW50ZXIg
dG8gdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiA8Y29kZT5jPC9jb2RlPiBpbiA8Y29kZT5zPC9jb2Rl
PgotICogICAgICAgICBvciA8Y29kZT5OVUxMPC9jb2RlPiBpZiA8Y29kZT5jPC9jb2RlPiBpcyBu
b3QgaW4gPGNvZGU+czwvY29kZT4uCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqCi0gKiBAc2VlIHVf
c3RycmNocgotICogQHNlZSB1X21lbXJjaHIzMgotICogQHNlZSB1X3N0ckZpbmRMYXN0Ci0gKi8K
LVVfU1RBQkxFIFVDaGFyKiBVX0VYUE9SVDIKLXVfbWVtcmNocihjb25zdCBVQ2hhciAqcywgVUNo
YXIgYywgaW50MzJfdCBjb3VudCk7Ci0KLS8qKgotICogRmluZCB0aGUgbGFzdCBvY2N1cnJlbmNl
IG9mIGEgY29kZSBwb2ludCBpbiBhIHN0cmluZy4KLSAqIEEgc3Vycm9nYXRlIGNvZGUgcG9pbnQg
aXMgZm91bmQgb25seSBpZiBpdHMgbWF0Y2ggaW4gdGhlIHRleHQgaXMgbm90Ci0gKiBwYXJ0IG9m
IGEgc3Vycm9nYXRlIHBhaXIuCi0gKiBBIE5VTCBjaGFyYWN0ZXIgaXMgZm91bmQgYXQgdGhlIHN0
cmluZyB0ZXJtaW5hdG9yLgotICoKLSAqIEBwYXJhbSBzIFRoZSBzdHJpbmcgdG8gc2VhcmNoIChj
b250YWlucyA8Y29kZT5jb3VudDwvY29kZT4gVUNoYXJzKS4KLSAqIEBwYXJhbSBjIFRoZSBjb2Rl
IHBvaW50IHRvIGZpbmQuCi0gKiBAcGFyYW0gY291bnQgVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5n
LgotICogQHJldHVybiBBIHBvaW50ZXIgdG8gdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiA8Y29kZT5j
PC9jb2RlPiBpbiA8Y29kZT5zPC9jb2RlPgotICogICAgICAgICBvciA8Y29kZT5OVUxMPC9jb2Rl
PiBpZiA8Y29kZT5jPC9jb2RlPiBpcyBub3QgaW4gPGNvZGU+czwvY29kZT4uCi0gKiBAc3RhYmxl
IElDVSAyLjQKLSAqCi0gKiBAc2VlIHVfc3RycmNocjMyCi0gKiBAc2VlIHVfbWVtcmNocgotICog
QHNlZSB1X3N0ckZpbmRMYXN0Ci0gKi8KLVVfU1RBQkxFIFVDaGFyKiBVX0VYUE9SVDIKLXVfbWVt
cmNocjMyKGNvbnN0IFVDaGFyICpzLCBVQ2hhcjMyIGMsIGludDMyX3QgY291bnQpOwotCi0vKioK
LSAqIFVuaWNvZGUgU3RyaW5nIGxpdGVyYWxzIGluIEMuCi0gKiBXZSBuZWVkIG9uZSBtYWNybyB0
byBkZWNsYXJlIGEgdmFyaWFibGUgZm9yIHRoZSBzdHJpbmcKLSAqIGFuZCB0byBzdGF0aWNhbGx5
IHByZWluaXRpYWxpemUgaXQgaWYgcG9zc2libGUsCi0gKiBhbmQgYSBzZWNvbmQgbWFjcm8gdG8g
ZHluYW1pY2FsbHkgaW50aWFsaXplIHN1Y2ggYSBzdHJpbmcgdmFyaWFibGUgaWYgbmVjZXNzYXJ5
LgotICoKLSAqIFRoZSBtYWNyb3MgYXJlIGRlZmluZWQgZm9yIG1heGltdW0gcGVyZm9ybWFuY2Uu
Ci0gKiBUaGV5IHdvcmsgb25seSBmb3Igc3RyaW5ncyB0aGF0IGNvbnRhaW4gImludmFyaWFudCBj
aGFyYWN0ZXJzIiwgaS5lLiwKLSAqIG9ubHkgbGF0aW4gbGV0dGVycywgZGlnaXRzLCBhbmQgc29t
ZSBwdW5jdHVhdGlvbi4KLSAqIFNlZSB1dHlwZXMuaCBmb3IgZGV0YWlscy4KLSAqCi0gKiBBIHBh
aXIgb2YgbWFjcm9zIGZvciBhIHNpbmdsZSBzdHJpbmcgbXVzdCBiZSB1c2VkIHdpdGggdGhlIHNh
bWUKLSAqIHBhcmFtZXRlcnMuCi0gKiBUaGUgc3RyaW5nIHBhcmFtZXRlciBtdXN0IGJlIGEgQyBz
dHJpbmcgbGl0ZXJhbC4KLSAqIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgbm90IGluY2x1ZGlu
ZyB0aGUgdGVybWluYXRpbmcKLSAqIDxjb2RlPk5VTDwvY29kZT4sIG11c3QgYmUgc3BlY2lmaWVk
IGFzIGEgY29uc3RhbnQuCi0gKiBUaGUgVV9TVFJJTkdfREVDTCBtYWNybyBzaG91bGQgYmUgaW52
b2tlZCBleGFjdGx5IG9uY2UgZm9yIG9uZQotICogc3VjaCBzdHJpbmcgdmFyaWFibGUgYmVmb3Jl
IGl0IGlzIHVzZWQuCi0gKgotICogVXNhZ2U6Ci0gKiA8cHJlPgotICogICAgVV9TVFJJTkdfREVD
TCh1c3RyaW5nVmFyMSwgIlF1aWNrLUZveCAyIiwgMTEpOwotICogICAgVV9TVFJJTkdfREVDTCh1
c3RyaW5nVmFyMiwgImp1bXBzIDUlIiwgOCk7Ci0gKiAgICBzdGF0aWMgVUJvb2wgZGlkSW5pdD1G
QUxTRTsKLSAqIAotICogICAgaW50MzJfdCBmdW5jdGlvbigpIHsKLSAqICAgICAgICBpZighZGlk
SW5pdCkgewotICogICAgICAgICAgICBVX1NUUklOR19JTklUKHVzdHJpbmdWYXIxLCAiUXVpY2st
Rm94IDIiLCAxMSk7Ci0gKiAgICAgICAgICAgIFVfU1RSSU5HX0lOSVQodXN0cmluZ1ZhcjIsICJq
dW1wcyA1JSIsIDgpOwotICogICAgICAgICAgICBkaWRJbml0PVRSVUU7Ci0gKiAgICAgICAgfQot
ICogICAgICAgIHJldHVybiB1X3N0cmNtcCh1c3RyaW5nVmFyMSwgdXN0cmluZ1ZhcjIpOwotICog
ICAgfQotICogPC9wcmU+Ci0gKiAKLSAqIE5vdGUgdGhhdCB0aGUgbWFjcm9zIHdpbGwgTk9UIGNv
bnNpc3RlbnRseSB3b3JrIGlmIHRoZWlyIGFyZ3VtZW50IGlzIGFub3RoZXIgPGNvZGU+I2RlZmlu
ZTwvY29kZT4uIAotICogIFRoZSBmb2xsb3dpbmcgd2lsbCBub3Qgd29yayBvbiBhbGwgcGxhdGZv
cm1zLCBkb24ndCB1c2UgaXQuCi0gKiAKLSAqIDxwcmU+Ci0gKiAgICAgI2RlZmluZSBHTFVDSyAi
TXIuIEdsdWNrIgotICogICAgIFVfU1RSSU5HX0RFQ0wodmFyLCBHTFVDSywgOSkKLSAqICAgICBV
X1NUUklOR19JTklUKHZhciwgR0xVQ0ssIDkpCi0gKiA8L3ByZT4KLSAqIAotICogSW5zdGVhZCwg
dXNlIHRoZSBzdHJpbmcgbGl0ZXJhbCAiTXIuIEdsdWNrIiAgYXMgdGhlIGFyZ3VtZW50IHRvIGJv
dGggbWFjcm8KLSAqIGNhbGxzLgotICoKLSAqCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotI2lm
IGRlZmluZWQoVV9ERUNMQVJFX1VURjE2KQotIyAgIGRlZmluZSBVX1NUUklOR19ERUNMKHZhciwg
Y3MsIGxlbmd0aCkgc3RhdGljIGNvbnN0IFVDaGFyICp2YXI9KGNvbnN0IFVDaGFyICopVV9ERUNM
QVJFX1VURjE2KGNzKQotICAgIC8qKkBzdGFibGUgSUNVIDIuMCAqLwotIyAgIGRlZmluZSBVX1NU
UklOR19JTklUKHZhciwgY3MsIGxlbmd0aCkKLSNlbGlmIFVfU0laRU9GX1dDSEFSX1Q9PVVfU0la
RU9GX1VDSEFSICYmIChVX0NIQVJTRVRfRkFNSUxZPT1VX0FTQ0lJX0ZBTUlMWSB8fCAoVV9TSVpF
T0ZfVUNIQVIgPT0gMiAmJiBkZWZpbmVkKFVfV0NIQVJfSVNfVVRGMTYpKSkKLSMgICBkZWZpbmUg
VV9TVFJJTkdfREVDTCh2YXIsIGNzLCBsZW5ndGgpIHN0YXRpYyBjb25zdCBVQ2hhciB2YXJbKGxl
bmd0aCkrMV09TCAjIyBjcwotICAgIC8qKkBzdGFibGUgSUNVIDIuMCAqLwotIyAgIGRlZmluZSBV
X1NUUklOR19JTklUKHZhciwgY3MsIGxlbmd0aCkKLSNlbGlmIFVfU0laRU9GX1VDSEFSPT0xICYm
IFVfQ0hBUlNFVF9GQU1JTFk9PVVfQVNDSUlfRkFNSUxZCi0jICAgZGVmaW5lIFVfU1RSSU5HX0RF
Q0wodmFyLCBjcywgbGVuZ3RoKSBzdGF0aWMgY29uc3QgVUNoYXIgdmFyWyhsZW5ndGgpKzFdPWNz
Ci0gICAgLyoqQHN0YWJsZSBJQ1UgMi4wICovCi0jICAgZGVmaW5lIFVfU1RSSU5HX0lOSVQodmFy
LCBjcywgbGVuZ3RoKQotI2Vsc2UKLSMgICBkZWZpbmUgVV9TVFJJTkdfREVDTCh2YXIsIGNzLCBs
ZW5ndGgpIHN0YXRpYyBVQ2hhciB2YXJbKGxlbmd0aCkrMV0KLSAgICAvKipAc3RhYmxlIElDVSAy
LjAgKi8KLSMgICBkZWZpbmUgVV9TVFJJTkdfSU5JVCh2YXIsIGNzLCBsZW5ndGgpIHVfY2hhcnNU
b1VDaGFycyhjcywgdmFyLCBsZW5ndGgrMSkKLSNlbmRpZgotCi0vKioKLSAqIFVuZXNjYXBlIGEg
c3RyaW5nIG9mIGNoYXJhY3RlcnMgYW5kIHdyaXRlIHRoZSByZXN1bHRpbmcKLSAqIFVuaWNvZGUg
Y2hhcmFjdGVycyB0byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiAgVGhlIGZvbGxvd2luZyBlc2Nh
cGUKLSAqIHNlcXVlbmNlcyBhcmUgcmVjb2duaXplZDoKLSAqCi0gKiBcXHVoaGhoICAgICAgIDQg
aGV4IGRpZ2l0czsgaCBpbiBbMC05QS1GYS1mXQotICogXFxVaGhoaGhoaGggICA4IGhleCBkaWdp
dHMKLSAqIFxceGhoICAgICAgICAgMS0yIGhleCBkaWdpdHMKLSAqIFxceHtoLi4ufSAgICAgMS04
IGhleCBkaWdpdHMKLSAqIFxcb29vICAgICAgICAgMS0zIG9jdGFsIGRpZ2l0czsgbyBpbiBbMC03
XQotICogXFxjWCAgICAgICAgICBjb250cm9sLVg7IFggaXMgbWFza2VkIHdpdGggMHgxRgotICoK
LSAqIGFzIHdlbGwgYXMgdGhlIHN0YW5kYXJkIEFOU0kgQyBlc2NhcGVzOgotICoKLSAqIFxcYSA9
PiBVKzAwMDcsIFxcYiA9PiBVKzAwMDgsIFxcdCA9PiBVKzAwMDksIFxcbiA9PiBVKzAwMEEsCi0g
KiBcXHYgPT4gVSswMDBCLCBcXGYgPT4gVSswMDBDLCBcXHIgPT4gVSswMDBELCBcXGUgPT4gVSsw
MDFCLAotICogXFwmcXVvdDsgPT4gVSswMDIyLCBcXCcgPT4gVSswMDI3LCBcXD8gPT4gVSswMDNG
LCBcXFxcID0+IFUrMDA1QwotICoKLSAqIEFueXRoaW5nIGVsc2UgZm9sbG93aW5nIGEgYmFja3Ns
YXNoIGlzIGdlbmVyaWNhbGx5IGVzY2FwZWQuICBGb3IKLSAqIGV4YW1wbGUsICJbYVxcLXpdIiBy
ZXR1cm5zICJbYS16XSIuCi0gKgotICogSWYgYW4gZXNjYXBlIHNlcXVlbmNlIGlzIGlsbC1mb3Jt
ZWQsIHRoaXMgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkKLSAqIHN0cmluZy4gIEFuIGV4YW1wbGUg
b2YgYW4gaWxsLWZvcm1lZCBzZXF1ZW5jZSBpcyAiXFx1IiBmb2xsb3dlZCBieQotICogZmV3ZXIg
dGhhbiA0IGhleCBkaWdpdHMuCi0gKgotICogVGhlIGFib3ZlIGNoYXJhY3RlcnMgYXJlIHJlY29n
bml6ZWQgaW4gdGhlIGNvbXBpbGVyJ3MgY29kZXBhZ2UsCi0gKiB0aGF0IGlzLCB0aGV5IGFyZSBj
b2RlZCBhcyAndScsICdcXCcsIGV0Yy4gIENoYXJhY3RlcnMgdGhhdCBhcmUKLSAqIG5vdCBwYXJ0
cyBvZiBlc2NhcGUgc2VxdWVuY2VzIGFyZSBjb252ZXJ0ZWQgdXNpbmcgdV9jaGFyc1RvVUNoYXJz
KCkuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIFVuaWNvZGVTdHJpbmc6OnVu
ZXNjYXBlKCkgYnV0IG5vdAotICogaWRlbnRpY2FsIHRvIGl0LiAgVGhlIGxhdHRlciB0YWtlcyBh
IHNvdXJjZSBVbmljb2RlU3RyaW5nLCBzbyBpdAotICogZG9lcyBlc2NhcGUgcmVjb2duaXRpb24g
YnV0IG5vIGNvbnZlcnNpb24uCi0gKgotICogQHBhcmFtIHNyYyBhIHplcm8tdGVybWluYXRlZCBz
dHJpbmcgb2YgaW52YXJpYW50IGNoYXJhY3RlcnMKLSAqIEBwYXJhbSBkZXN0IHBvaW50ZXIgdG8g
YnVmZmVyIHRvIHJlY2VpdmUgY29udmVydGVkIGFuZCB1bmVzY2FwZWQKLSAqIHRleHQgYW5kLCBp
ZiB0aGVyZSBpcyByb29tLCBhIHplcm8gdGVybWluYXRvci4gIE1heSBiZSBOVUxMIGZvcgotICog
cHJlZmxpZ2h0aW5nLCBpbiB3aGljaCBjYXNlIG5vIFVDaGFycyB3aWxsIGJlIHdyaXR0ZW4sIGJ1
dCB0aGUKLSAqIHJldHVybiB2YWx1ZSB3aWxsIHN0aWxsIGJlIHZhbGlkLiAgT24gZXJyb3IsIGFu
IGVtcHR5IHN0cmluZyBpcwotICogc3RvcmVkIGhlcmUgKGlmIHBvc3NpYmxlKS4KLSAqIEBwYXJh
bSBkZXN0Q2FwYWNpdHkgdGhlIG51bWJlciBvZiBVQ2hhcnMgdGhhdCBtYXkgYmUgd3JpdHRlbiBh
dAotICogZGVzdC4gIElnbm9yZWQgaWYgZGVzdCA9PSBOVUxMLgotICogQHJldHVybiB0aGUgbGVu
Z3RoIG9mIHVuZXNjYXBlZCBzdHJpbmcuCi0gKiBAc2VlIHVfdW5lc2NhcGVBdAotICogQHNlZSBV
bmljb2RlU3RyaW5nI3VuZXNjYXBlKCkKLSAqIEBzZWUgVW5pY29kZVN0cmluZyN1bmVzY2FwZUF0
KCkKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgot
dV91bmVzY2FwZShjb25zdCBjaGFyICpzcmMsCi0gICAgICAgICAgIFVDaGFyICpkZXN0LCBpbnQz
Ml90IGRlc3RDYXBhY2l0eSk7Ci0KLVVfQ0RFQ0xfQkVHSU4KLS8qKgotICogQ2FsbGJhY2sgZnVu
Y3Rpb24gZm9yIHVfdW5lc2NhcGVBdCgpIHRoYXQgcmV0dXJucyBhIGNoYXJhY3RlciBvZgotICog
dGhlIHNvdXJjZSB0ZXh0IGdpdmVuIGFuIG9mZnNldCBhbmQgYSBjb250ZXh0IHBvaW50ZXIuICBU
aGUgY29udGV4dAotICogcG9pbnRlciB3aWxsIGJlIHdoYXRldmVyIGlzIHBhc3NlZCBpbnRvIHVf
dW5lc2NhcGVBdCgpLgotICoKLSAqIEBwYXJhbSBvZmZzZXQgcG9pbnRlciB0byB0aGUgb2Zmc2V0
IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdV91bmVzY2FwZUF0KCkuCi0gKiBAcGFyYW0gY29udGV4
dCBhbiBvcGFxdWUgcG9pbnRlciBwYXNzZWQgZGlyZWN0bHkgaW50byB1X3VuZXNjYXBlQXQoKQot
ICogQHJldHVybiB0aGUgY2hhcmFjdGVyIHJlcHJlc2VudGVkIGJ5IHRoZSBlc2NhcGUgc2VxdWVu
Y2UgYXQKLSAqIG9mZnNldAotICogQHNlZSB1X3VuZXNjYXBlQXQKLSAqIEBzdGFibGUgSUNVIDIu
MAotICovCi10eXBlZGVmIFVDaGFyIChVX0NBTExDT05WICpVTkVTQ0FQRV9DSEFSX0FUKShpbnQz
Ml90IG9mZnNldCwgdm9pZCAqY29udGV4dCk7Ci1VX0NERUNMX0VORAotCi0vKioKLSAqIFVuZXNj
YXBlIGEgc2luZ2xlIHNlcXVlbmNlLiBUaGUgY2hhcmFjdGVyIGF0IG9mZnNldC0xIGlzIGFzc3Vt
ZWQKLSAqICh3aXRob3V0IGNoZWNraW5nKSB0byBiZSBhIGJhY2tzbGFzaC4gIFRoaXMgbWV0aG9k
IHRha2VzIGEgY2FsbGJhY2sKLSAqIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMg
dGhlIFVDaGFyIGF0IGEgZ2l2ZW4gb2Zmc2V0LiAgQnkKLSAqIHZhcnlpbmcgdGhpcyBjYWxsYmFj
aywgSUNVIGZ1bmN0aW9ucyBhcmUgYWJsZSB0byB1bmVzY2FwZSBjaGFyKgotICogc3RyaW5ncywg
VW5pY29kZVN0cmluZyBvYmplY3RzLCBhbmQgVUZJTEUgcG9pbnRlcnMuCi0gKgotICogSWYgb2Zm
c2V0IGlzIG91dCBvZiByYW5nZSwgb3IgaWYgdGhlIGVzY2FwZSBzZXF1ZW5jZSBpcyBpbGwtZm9y
bWVkLAotICogKFVDaGFyMzIpMHhGRkZGRkZGRiBpcyByZXR1cm5lZC4gIFNlZSBkb2N1bWVudGF0
aW9uIG9mIHVfdW5lc2NhcGUoKQotICogZm9yIGEgbGlzdCBvZiByZWNvZ25pemVkIHNlcXVlbmNl
cy4KLSAqCi0gKiBAcGFyYW0gY2hhckF0IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBh
IFVDaGFyIG9mIHRoZSBzb3VyY2UKLSAqIHRleHQgZ2l2ZW4gYW4gb2Zmc2V0IGFuZCBhIGNvbnRl
eHQgcG9pbnRlci4KLSAqIEBwYXJhbSBvZmZzZXQgcG9pbnRlciB0byB0aGUgb2Zmc2V0IHRoYXQg
d2lsbCBiZSBwYXNzZWQgdG8gY2hhckF0LgotICogVGhlIG9mZnNldCB2YWx1ZSB3aWxsIGJlIHVw
ZGF0ZWQgdXBvbiByZXR1cm4gdG8gcG9pbnQgYWZ0ZXIgdGhlCi0gKiBsYXN0IHBhcnNlZCBjaGFy
YWN0ZXIgb2YgdGhlIGVzY2FwZSBzZXF1ZW5jZS4gIE9uIGVycm9yIHRoZSBvZmZzZXQKLSAqIGlz
IHVuY2hhbmdlZC4KLSAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGlu
IHRoZSBzb3VyY2UgdGV4dC4gIFRoZQotICogbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIHNvdXJjZSB0
ZXh0IGlzIGNvbnNpZGVyZWQgdG8gYmUgYXQgb2Zmc2V0Ci0gKiBsZW5ndGgtMS4KLSAqIEBwYXJh
bSBjb250ZXh0IGFuIG9wYXF1ZSBwb2ludGVyIHBhc3NlZCBkaXJlY3RseSBpbnRvIGNoYXJBdC4K
LSAqIEByZXR1cm4gdGhlIGNoYXJhY3RlciByZXByZXNlbnRlZCBieSB0aGUgZXNjYXBlIHNlcXVl
bmNlIGF0Ci0gKiBvZmZzZXQsIG9yIChVQ2hhcjMyKTB4RkZGRkZGRkYgb24gZXJyb3IuCi0gKiBA
c2VlIHVfdW5lc2NhcGUoKQotICogQHNlZSBVbmljb2RlU3RyaW5nI3VuZXNjYXBlKCkKLSAqIEBz
ZWUgVW5pY29kZVN0cmluZyN1bmVzY2FwZUF0KCkKLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1V
X1NUQUJMRSBVQ2hhcjMyIFVfRVhQT1JUMgotdV91bmVzY2FwZUF0KFVORVNDQVBFX0NIQVJfQVQg
Y2hhckF0LAotICAgICAgICAgICAgIGludDMyX3QgKm9mZnNldCwKLSAgICAgICAgICAgICBpbnQz
Ml90IGxlbmd0aCwKLSAgICAgICAgICAgICB2b2lkICpjb250ZXh0KTsKLQotLyoqCi0gKiBVcHBl
cmNhc2UgdGhlIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcuCi0gKiBDYXNpbmcgaXMgbG9jYWxlLWRl
cGVuZGVudCBhbmQgY29udGV4dC1zZW5zaXRpdmUuCi0gKiBUaGUgcmVzdWx0IG1heSBiZSBsb25n
ZXIgb3Igc2hvcnRlciB0aGFuIHRoZSBvcmlnaW5hbC4KLSAqIFRoZSBzb3VyY2Ugc3RyaW5nIGFu
ZCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGFyZSBhbGxvd2VkIHRvIG92ZXJsYXAuCi0gKgotICog
QHBhcmFtIGRlc3QgICAgICBBIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdCBzdHJpbmcuIFRoZSByZXN1
bHQgd2lsbCBiZSB6ZXJvLXRlcm1pbmF0ZWQgaWYKLSAqICAgICAgICAgICAgICAgICAgdGhlIGJ1
ZmZlciBpcyBsYXJnZSBlbm91Z2guCi0gKiBAcGFyYW0gZGVzdENhcGFjaXR5IFRoZSBzaXplIG9m
IHRoZSBidWZmZXIgKG51bWJlciBvZiBVQ2hhcnMpLiBJZiBpdCBpcyAwLCB0aGVuCi0gKiAgICAg
ICAgICAgICAgICAgIGRlc3QgbWF5IGJlIE5VTEwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIG9ubHkg
cmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdAotICogICAgICAgICAgICAgICAgICB3aXRo
b3V0IHdyaXRpbmcgYW55IG9mIHRoZSByZXN1bHQgc3RyaW5nLgotICogQHBhcmFtIHNyYyAgICAg
ICBUaGUgb3JpZ2luYWwgc3RyaW5nCi0gKiBAcGFyYW0gc3JjTGVuZ3RoIFRoZSBsZW5ndGggb2Yg
dGhlIG9yaWdpbmFsIHN0cmluZy4gSWYgLTEsIHRoZW4gc3JjIG11c3QgYmUgemVyby10ZXJtaW5h
dGVkLgotICogQHBhcmFtIGxvY2FsZSAgICBUaGUgbG9jYWxlIHRvIGNvbnNpZGVyLCBvciAiIiBm
b3IgdGhlIHJvb3QgbG9jYWxlIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGxvY2FsZS4KLSAqIEBw
YXJhbSBwRXJyb3JDb2RlIE11c3QgYmUgYSB2YWxpZCBwb2ludGVyIHRvIGFuIGVycm9yIGNvZGUg
dmFsdWUsCi0gKiAgICAgICAgICAgICAgICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFp
bHVyZSBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuCi0gKiBAcmV0dXJuIFRoZSBsZW5ndGggb2Yg
dGhlIHJlc3VsdCBzdHJpbmcuIEl0IG1heSBiZSBncmVhdGVyIHRoYW4gZGVzdENhcGFjaXR5LiBJ
biB0aGF0IGNhc2UsCi0gKiAgICAgICAgIG9ubHkgc29tZSBvZiB0aGUgcmVzdWx0IHdhcyB3cml0
dGVuIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwot
VV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKLXVfc3RyVG9VcHBlcihVQ2hhciAqZGVzdCwgaW50
MzJfdCBkZXN0Q2FwYWNpdHksCi0gICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNyYywgaW50MzJf
dCBzcmNMZW5ndGgsCi0gICAgICAgICAgICAgY29uc3QgY2hhciAqbG9jYWxlLAotICAgICAgICAg
ICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwotCi0vKioKLSAqIExvd2VyY2FzZSB0aGUgY2hh
cmFjdGVycyBpbiBhIHN0cmluZy4KLSAqIENhc2luZyBpcyBsb2NhbGUtZGVwZW5kZW50IGFuZCBj
b250ZXh0LXNlbnNpdGl2ZS4KLSAqIFRoZSByZXN1bHQgbWF5IGJlIGxvbmdlciBvciBzaG9ydGVy
IHRoYW4gdGhlIG9yaWdpbmFsLgotICogVGhlIHNvdXJjZSBzdHJpbmcgYW5kIHRoZSBkZXN0aW5h
dGlvbiBidWZmZXIgYXJlIGFsbG93ZWQgdG8gb3ZlcmxhcC4KLSAqCi0gKiBAcGFyYW0gZGVzdCAg
ICAgIEEgYnVmZmVyIGZvciB0aGUgcmVzdWx0IHN0cmluZy4gVGhlIHJlc3VsdCB3aWxsIGJlIHpl
cm8tdGVybWluYXRlZCBpZgotICogICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyIGlzIGxhcmdl
IGVub3VnaC4KLSAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAo
bnVtYmVyIG9mIFVDaGFycykuIElmIGl0IGlzIDAsIHRoZW4KLSAqICAgICAgICAgICAgICAgICAg
ZGVzdCBtYXkgYmUgTlVMTCBhbmQgdGhlIGZ1bmN0aW9uIHdpbGwgb25seSByZXR1cm4gdGhlIGxl
bmd0aCBvZiB0aGUgcmVzdWx0Ci0gKiAgICAgICAgICAgICAgICAgIHdpdGhvdXQgd3JpdGluZyBh
bnkgb2YgdGhlIHJlc3VsdCBzdHJpbmcuCi0gKiBAcGFyYW0gc3JjICAgICAgIFRoZSBvcmlnaW5h
bCBzdHJpbmcKLSAqIEBwYXJhbSBzcmNMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwg
c3RyaW5nLiBJZiAtMSwgdGhlbiBzcmMgbXVzdCBiZSB6ZXJvLXRlcm1pbmF0ZWQuCi0gKiBAcGFy
YW0gbG9jYWxlICAgIFRoZSBsb2NhbGUgdG8gY29uc2lkZXIsIG9yICIiIGZvciB0aGUgcm9vdCBs
b2NhbGUgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgbG9jYWxlLgotICogQHBhcmFtIHBFcnJvckNv
ZGUgTXVzdCBiZSBhIHZhbGlkIHBvaW50ZXIgdG8gYW4gZXJyb3IgY29kZSB2YWx1ZSwKLSAqICAg
ICAgICAgICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5kaWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0
aGUgZnVuY3Rpb24gY2FsbC4KLSAqIEByZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0
cmluZy4gSXQgbWF5IGJlIGdyZWF0ZXIgdGhhbiBkZXN0Q2FwYWNpdHkuIEluIHRoYXQgY2FzZSwK
LSAqICAgICAgICAgb25seSBzb21lIG9mIHRoZSByZXN1bHQgd2FzIHdyaXR0ZW4gdG8gdGhlIGRl
c3RpbmF0aW9uIGJ1ZmZlci4KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBpbnQz
Ml90IFVfRVhQT1JUMgotdV9zdHJUb0xvd2VyKFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBh
Y2l0eSwKLSAgICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwK
LSAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NhbGUsCi0gICAgICAgICAgICAgVUVycm9yQ29k
ZSAqcEVycm9yQ29kZSk7Ci0KLSNpZiAhVUNPTkZJR19OT19CUkVBS19JVEVSQVRJT04KLQotLyoq
Ci0gKiBUaXRsZWNhc2UgYSBzdHJpbmcuCi0gKiBDYXNpbmcgaXMgbG9jYWxlLWRlcGVuZGVudCBh
bmQgY29udGV4dC1zZW5zaXRpdmUuCi0gKiBUaXRsZWNhc2luZyB1c2VzIGEgYnJlYWsgaXRlcmF0
b3IgdG8gZmluZCB0aGUgZmlyc3QgY2hhcmFjdGVycyBvZiB3b3JkcwotICogdGhhdCBhcmUgdG8g
YmUgdGl0bGVjYXNlZC4gSXQgdGl0bGVjYXNlcyB0aG9zZSBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNh
c2VzCi0gKiBhbGwgb3RoZXJzLgotICoKLSAqIFRoZSB0aXRsZWNhc2UgYnJlYWsgaXRlcmF0b3Ig
Y2FuIGJlIHByb3ZpZGVkIHRvIGN1c3RvbWl6ZSBmb3IgYXJiaXRyYXJ5Ci0gKiBzdHlsZXMsIHVz
aW5nIHJ1bGVzIGFuZCBkaWN0aW9uYXJpZXMgYmV5b25kIHRoZSBzdGFuZGFyZCBpdGVyYXRvcnMu
Ci0gKiBJdCBtYXkgYmUgbW9yZSBlZmZpY2llbnQgdG8gYWx3YXlzIHByb3ZpZGUgYW4gaXRlcmF0
b3IgdG8gYXZvaWQKLSAqIG9wZW5pbmcgYW5kIGNsb3Npbmcgb25lIGZvciBlYWNoIHN0cmluZy4K
LSAqIFRoZSBzdGFuZGFyZCB0aXRsZWNhc2UgaXRlcmF0b3IgZm9yIHRoZSByb290IGxvY2FsZSBp
bXBsZW1lbnRzIHRoZQotICogYWxnb3JpdGhtIG9mIFVuaWNvZGUgVFIgMjEuCi0gKgotICogVGhp
cyBmdW5jdGlvbiB1c2VzIG9ubHkgdGhlIHNldFRleHQoKSwgZmlyc3QoKSBhbmQgbmV4dCgpIG1l
dGhvZHMgb2YgdGhlCi0gKiBwcm92aWRlZCBicmVhayBpdGVyYXRvci4KLSAqCi0gKiBUaGUgcmVz
dWx0IG1heSBiZSBsb25nZXIgb3Igc2hvcnRlciB0aGFuIHRoZSBvcmlnaW5hbC4KLSAqIFRoZSBz
b3VyY2Ugc3RyaW5nIGFuZCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGFyZSBhbGxvd2VkIHRvIG92
ZXJsYXAuCi0gKgotICogQHBhcmFtIGRlc3QgICAgICBBIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdCBz
dHJpbmcuIFRoZSByZXN1bHQgd2lsbCBiZSB6ZXJvLXRlcm1pbmF0ZWQgaWYKLSAqICAgICAgICAg
ICAgICAgICAgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guCi0gKiBAcGFyYW0gZGVzdENhcGFj
aXR5IFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG51bWJlciBvZiBVQ2hhcnMpLiBJZiBpdCBpcyAw
LCB0aGVuCi0gKiAgICAgICAgICAgICAgICAgIGRlc3QgbWF5IGJlIE5VTEwgYW5kIHRoZSBmdW5j
dGlvbiB3aWxsIG9ubHkgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdAotICogICAgICAg
ICAgICAgICAgICB3aXRob3V0IHdyaXRpbmcgYW55IG9mIHRoZSByZXN1bHQgc3RyaW5nLgotICog
QHBhcmFtIHNyYyAgICAgICBUaGUgb3JpZ2luYWwgc3RyaW5nCi0gKiBAcGFyYW0gc3JjTGVuZ3Ro
IFRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIHN0cmluZy4gSWYgLTEsIHRoZW4gc3JjIG11c3Qg
YmUgemVyby10ZXJtaW5hdGVkLgotICogQHBhcmFtIHRpdGxlSXRlciBBIGJyZWFrIGl0ZXJhdG9y
IHRvIGZpbmQgdGhlIGZpcnN0IGNoYXJhY3RlcnMgb2Ygd29yZHMKLSAqICAgICAgICAgICAgICAg
ICAgdGhhdCBhcmUgdG8gYmUgdGl0bGVjYXNlZC4KLSAqICAgICAgICAgICAgICAgICAgSWYgbm9u
ZSBpcyBwcm92aWRlZCAoTlVMTCksIHRoZW4gYSBzdGFuZGFyZCB0aXRsZWNhc2UKLSAqICAgICAg
ICAgICAgICAgICAgYnJlYWsgaXRlcmF0b3IgaXMgb3BlbmVkLgotICogQHBhcmFtIGxvY2FsZSAg
ICBUaGUgbG9jYWxlIHRvIGNvbnNpZGVyLCBvciAiIiBmb3IgdGhlIHJvb3QgbG9jYWxlIG9yIE5V
TEwgZm9yIHRoZSBkZWZhdWx0IGxvY2FsZS4KLSAqIEBwYXJhbSBwRXJyb3JDb2RlIE11c3QgYmUg
YSB2YWxpZCBwb2ludGVyIHRvIGFuIGVycm9yIGNvZGUgdmFsdWUsCi0gKiAgICAgICAgICAgICAg
ICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFpbHVyZSBiZWZvcmUgdGhlIGZ1bmN0aW9u
IGNhbGwuCi0gKiBAcmV0dXJuIFRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBzdHJpbmcuIEl0IG1h
eSBiZSBncmVhdGVyIHRoYW4gZGVzdENhcGFjaXR5LiBJbiB0aGF0IGNhc2UsCi0gKiAgICAgICAg
IG9ubHkgc29tZSBvZiB0aGUgcmVzdWx0IHdhcyB3cml0dGVuIHRvIHRoZSBkZXN0aW5hdGlvbiBi
dWZmZXIuCi0gKiBAc3RhYmxlIElDVSAyLjEKLSAqLwotVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9S
VDIKLXVfc3RyVG9UaXRsZShVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksCi0gICAg
ICAgICAgICAgY29uc3QgVUNoYXIgKnNyYywgaW50MzJfdCBzcmNMZW5ndGgsCi0gICAgICAgICAg
ICAgVUJyZWFrSXRlcmF0b3IgKnRpdGxlSXRlciwKLSAgICAgICAgICAgICBjb25zdCBjaGFyICps
b2NhbGUsCi0gICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7Ci0KLSNlbmRpZgot
Ci0vKioKLSAqIENhc2UtZm9sZHMgdGhlIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcuCi0gKgotICog
Q2FzZS1mb2xkaW5nIGlzIGxvY2FsZS1pbmRlcGVuZGVudCBhbmQgbm90IGNvbnRleHQtc2Vuc2l0
aXZlLAotICogYnV0IHRoZXJlIGlzIGFuIG9wdGlvbiBmb3Igd2hldGhlciB0byBpbmNsdWRlIG9y
IGV4Y2x1ZGUgbWFwcGluZ3MgZm9yIGRvdHRlZCBJCi0gKiBhbmQgZG90bGVzcyBpIHRoYXQgYXJl
IG1hcmtlZCB3aXRoICdUJyBpbiBDYXNlRm9sZGluZy50eHQuCi0gKgotICogVGhlIHJlc3VsdCBt
YXkgYmUgbG9uZ2VyIG9yIHNob3J0ZXIgdGhhbiB0aGUgb3JpZ2luYWwuCi0gKiBUaGUgc291cmNl
IHN0cmluZyBhbmQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBhcmUgYWxsb3dlZCB0byBvdmVybGFw
LgotICoKLSAqIEBwYXJhbSBkZXN0ICAgICAgQSBidWZmZXIgZm9yIHRoZSByZXN1bHQgc3RyaW5n
LiBUaGUgcmVzdWx0IHdpbGwgYmUgemVyby10ZXJtaW5hdGVkIGlmCi0gKiAgICAgICAgICAgICAg
ICAgIHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLgotICogQHBhcmFtIGRlc3RDYXBhY2l0eSBU
aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChudW1iZXIgb2YgVUNoYXJzKS4gSWYgaXQgaXMgMCwgdGhl
bgotICogICAgICAgICAgICAgICAgICBkZXN0IG1heSBiZSBOVUxMIGFuZCB0aGUgZnVuY3Rpb24g
d2lsbCBvbmx5IHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQKLSAqICAgICAgICAgICAg
ICAgICAgd2l0aG91dCB3cml0aW5nIGFueSBvZiB0aGUgcmVzdWx0IHN0cmluZy4KLSAqIEBwYXJh
bSBzcmMgICAgICAgVGhlIG9yaWdpbmFsIHN0cmluZwotICogQHBhcmFtIHNyY0xlbmd0aCBUaGUg
bGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0xLCB0aGVuIHNyYyBtdXN0IGJlIHpl
cm8tdGVybWluYXRlZC4KLSAqIEBwYXJhbSBvcHRpb25zICAgRWl0aGVyIFVfRk9MRF9DQVNFX0RF
RkFVTFQgb3IgVV9GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kKLSAqIEBwYXJhbSBwRXJyb3JD
b2RlIE11c3QgYmUgYSB2YWxpZCBwb2ludGVyIHRvIGFuIGVycm9yIGNvZGUgdmFsdWUsCi0gKiAg
ICAgICAgICAgICAgICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFpbHVyZSBiZWZvcmUg
dGhlIGZ1bmN0aW9uIGNhbGwuCi0gKiBAcmV0dXJuIFRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBz
dHJpbmcuIEl0IG1heSBiZSBncmVhdGVyIHRoYW4gZGVzdENhcGFjaXR5LiBJbiB0aGF0IGNhc2Us
Ci0gKiAgICAgICAgIG9ubHkgc29tZSBvZiB0aGUgcmVzdWx0IHdhcyB3cml0dGVuIHRvIHRoZSBk
ZXN0aW5hdGlvbiBidWZmZXIuCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgaW50
MzJfdCBVX0VYUE9SVDIKLXVfc3RyRm9sZENhc2UoVUNoYXIgKmRlc3QsIGludDMyX3QgZGVzdENh
cGFjaXR5LAotICAgICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0
aCwKLSAgICAgICAgICAgICAgdWludDMyX3Qgb3B0aW9ucywKLSAgICAgICAgICAgICAgVUVycm9y
Q29kZSAqcEVycm9yQ29kZSk7Ci0KLSNpZiBkZWZpbmVkKFVfV0NIQVJfSVNfVVRGMTYpIHx8IGRl
ZmluZWQoVV9XQ0hBUl9JU19VVEYzMikgfHwgIVVDT05GSUdfTk9fQ09OVkVSU0lPTgotLyoqCi0g
KiBDb252ZXJ0IGEgVVRGLTE2IHN0cmluZyB0byBhIHdjaGFyX3Qgc3RyaW5nLgotICogSWYgaXQg
aXMga25vd24gYXQgY29tcGlsZSB0aW1lIHRoYXQgd2NoYXJfdCBzdHJpbmdzIGFyZSBpbiBVVEYt
MTYgb3IgVVRGLTMyLCB0aGVuCi0gKiB0aGlzIGZ1bmN0aW9uIHNpbXBseSBjYWxscyB0aGUgZmFz
dCwgZGVkaWNhdGVkIGZ1bmN0aW9uIGZvciB0aGF0LgotICogT3RoZXJ3aXNlLCB0d28gY29udmVy
c2lvbnMgVVRGLTE2IC0+IGRlZmF1bHQgY2hhcnNldCAtPiB3Y2hhcl90KiBhcmUgcGVyZm9ybWVk
LgotICoKLSAqIEBwYXJhbSBkZXN0ICAgICAgICAgIEEgYnVmZmVyIGZvciB0aGUgcmVzdWx0IHN0
cmluZy4gVGhlIHJlc3VsdCB3aWxsIGJlIHplcm8tdGVybWluYXRlZCBpZgotICogICAgICAgICAg
ICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guCi0gKiBAcGFyYW0gZGVzdENh
cGFjaXR5ICBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChudW1iZXIgb2Ygd2NoYXJfdCdzKS4gSWYg
aXQgaXMgMCwgdGhlbgotICogICAgICAgICAgICAgICAgICAgICAgZGVzdCBtYXkgYmUgTlVMTCBh
bmQgdGhlIGZ1bmN0aW9uIHdpbGwgb25seSByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgCi0gKiAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgd2l0aG91dCB3cml0aW5nIGFueSBvZiB0aGUgcmVz
dWx0IHN0cmluZyAocHJlLWZsaWdodGluZykuCi0gKiBAcGFyYW0gcERlc3RMZW5ndGggICBBIHBv
aW50ZXIgdG8gcmVjZWl2ZSB0aGUgbnVtYmVyIG9mIHVuaXRzIHdyaXR0ZW4gdG8gdGhlIGRlc3Rp
bmF0aW9uLiBJZiAKLSAqICAgICAgICAgICAgICAgICAgICAgIHBEZXN0TGVuZ3RoIT1OVUxMIHRo
ZW4gKnBEZXN0TGVuZ3RoIGlzIGFsd2F5cyBzZXQgdG8gdGhlIAotICogICAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyIG9mIG91dHB1dCB1bml0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSB0cmFuc2Zv
cm1hdGlvbiBvZiAKLSAqICAgICAgICAgICAgICAgICAgICAgIGFsbCB0aGUgaW5wdXQgdW5pdHMs
IGV2ZW4gaW4gY2FzZSBvZiBhIGJ1ZmZlciBvdmVyZmxvdy4KLSAqIEBwYXJhbSBzcmMgICAgICAg
ICAgIFRoZSBvcmlnaW5hbCBzb3VyY2Ugc3RyaW5nCi0gKiBAcGFyYW0gc3JjTGVuZ3RoICAgICBU
aGUgbGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0xLCB0aGVuIHNyYyBtdXN0IGJl
IHplcm8tdGVybWluYXRlZC4KLSAqIEBwYXJhbSBwRXJyb3JDb2RlICAgIE11c3QgYmUgYSB2YWxp
ZCBwb2ludGVyIHRvIGFuIGVycm9yIGNvZGUgdmFsdWUsCi0gKiAgICAgICAgICAgICAgICAgICAg
ICB3aGljaCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRoZSBmdW5jdGlvbiBj
YWxsLgotICogQHJldHVybiBUaGUgcG9pbnRlciB0byBkZXN0aW5hdGlvbiBidWZmZXIuCi0gKiBA
c3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgd2NoYXJfdCogVV9FWFBPUlQyCi11X3N0clRv
V0NTKHdjaGFyX3QgKmRlc3QsIAotICAgICAgICAgICBpbnQzMl90IGRlc3RDYXBhY2l0eSwKLSAg
ICAgICAgICAgaW50MzJfdCAqcERlc3RMZW5ndGgsCi0gICAgICAgICAgIGNvbnN0IFVDaGFyICpz
cmMsIAotICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwKLSAgICAgICAgICAgVUVycm9yQ29k
ZSAqcEVycm9yQ29kZSk7Ci0vKioKLSAqIENvbnZlcnQgYSB3Y2hhcl90IHN0cmluZyB0byBVVEYt
MTYuCi0gKiBJZiBpdCBpcyBrbm93biBhdCBjb21waWxlIHRpbWUgdGhhdCB3Y2hhcl90IHN0cmlu
Z3MgYXJlIGluIFVURi0xNiBvciBVVEYtMzIsIHRoZW4KLSAqIHRoaXMgZnVuY3Rpb24gc2ltcGx5
IGNhbGxzIHRoZSBmYXN0LCBkZWRpY2F0ZWQgZnVuY3Rpb24gZm9yIHRoYXQuCi0gKiBPdGhlcndp
c2UsIHR3byBjb252ZXJzaW9ucyB3Y2hhcl90KiAtPiBkZWZhdWx0IGNoYXJzZXQgLT4gVVRGLTE2
IGFyZSBwZXJmb3JtZWQuCi0gKgotICogQHBhcmFtIGRlc3QgICAgICAgICAgQSBidWZmZXIgZm9y
IHRoZSByZXN1bHQgc3RyaW5nLiBUaGUgcmVzdWx0IHdpbGwgYmUgemVyby10ZXJtaW5hdGVkIGlm
Ci0gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KLSAq
IEBwYXJhbSBkZXN0Q2FwYWNpdHkgIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG51bWJlciBvZiBV
Q2hhcnMpLiBJZiBpdCBpcyAwLCB0aGVuCi0gKiAgICAgICAgICAgICAgICAgICAgICBkZXN0IG1h
eSBiZSBOVUxMIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBvbmx5IHJldHVybiB0aGUgbGVuZ3RoIG9m
IHRoZSAKLSAqICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB3aXRob3V0IHdyaXRpbmcgYW55
IG9mIHRoZSByZXN1bHQgc3RyaW5nIChwcmUtZmxpZ2h0aW5nKS4KLSAqIEBwYXJhbSBwRGVzdExl
bmd0aCAgIEEgcG9pbnRlciB0byByZWNlaXZlIHRoZSBudW1iZXIgb2YgdW5pdHMgd3JpdHRlbiB0
byB0aGUgZGVzdGluYXRpb24uIElmIAotICogICAgICAgICAgICAgICAgICAgICAgcERlc3RMZW5n
dGghPU5VTEwgdGhlbiAqcERlc3RMZW5ndGggaXMgYWx3YXlzIHNldCB0byB0aGUgCi0gKiAgICAg
ICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygb3V0cHV0IHVuaXRzIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIHRyYW5zZm9ybWF0aW9uIG9mIAotICogICAgICAgICAgICAgICAgICAgICAgYWxsIHRoZSBp
bnB1dCB1bml0cywgZXZlbiBpbiBjYXNlIG9mIGEgYnVmZmVyIG92ZXJmbG93LgotICogQHBhcmFt
IHNyYyAgICAgICAgICAgVGhlIG9yaWdpbmFsIHNvdXJjZSBzdHJpbmcKLSAqIEBwYXJhbSBzcmNM
ZW5ndGggICAgIFRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIHN0cmluZy4gSWYgLTEsIHRoZW4g
c3JjIG11c3QgYmUgemVyby10ZXJtaW5hdGVkLgotICogQHBhcmFtIHBFcnJvckNvZGUgICAgTXVz
dCBiZSBhIHZhbGlkIHBvaW50ZXIgdG8gYW4gZXJyb3IgY29kZSB2YWx1ZSwKLSAqICAgICAgICAg
ICAgICAgICAgICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFpbHVyZSBiZWZvcmUgdGhl
IGZ1bmN0aW9uIGNhbGwuCi0gKiBAcmV0dXJuIFRoZSBwb2ludGVyIHRvIGRlc3RpbmF0aW9uIGJ1
ZmZlci4KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi1VX1NUQUJMRSBVQ2hhciogVV9FWFBPUlQy
Ci11X3N0ckZyb21XQ1MoVUNoYXIgICAqZGVzdCwKLSAgICAgICAgICAgICBpbnQzMl90IGRlc3RD
YXBhY2l0eSwgCi0gICAgICAgICAgICAgaW50MzJfdCAqcERlc3RMZW5ndGgsCi0gICAgICAgICAg
ICAgY29uc3Qgd2NoYXJfdCAqc3JjLAotICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLAot
ICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwotI2VuZGlmIC8qIGRlZmluZWQo
VV9XQ0hBUl9JU19VVEYxNikgfHwgZGVmaW5lZChVX1dDSEFSX0lTX1VURjMyKSB8fCAhVUNPTkZJ
R19OT19DT05WRVJTSU9OICovCi0KLS8qKgotICogQ29udmVydCBhIFVURi0xNiBzdHJpbmcgdG8g
VVRGLTguCi0gKiBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIG5vdCB3ZWxsLWZvcm1lZCwgdGhlbiB0
aGUgVV9JTlZBTElEX0NIQVJfRk9VTkQgZXJyb3IgY29kZSBpcyBzZXQuCi0gKgotICogQHBhcmFt
IGRlc3QgICAgICAgICAgQSBidWZmZXIgZm9yIHRoZSByZXN1bHQgc3RyaW5nLiBUaGUgcmVzdWx0
IHdpbGwgYmUgemVyby10ZXJtaW5hdGVkIGlmCi0gKiAgICAgICAgICAgICAgICAgICAgICB0aGUg
YnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KLSAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgIFRoZSBzaXpl
IG9mIHRoZSBidWZmZXIgKG51bWJlciBvZiBjaGFycykuIElmIGl0IGlzIDAsIHRoZW4KLSAqICAg
ICAgICAgICAgICAgICAgICAgIGRlc3QgbWF5IGJlIE5VTEwgYW5kIHRoZSBmdW5jdGlvbiB3aWxs
IG9ubHkgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIAotICogICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0IHdpdGhvdXQgd3JpdGluZyBhbnkgb2YgdGhlIHJlc3VsdCBzdHJpbmcgKHByZS1mbGln
aHRpbmcpLgotICogQHBhcmFtIHBEZXN0TGVuZ3RoICAgQSBwb2ludGVyIHRvIHJlY2VpdmUgdGhl
IG51bWJlciBvZiB1bml0cyB3cml0dGVuIHRvIHRoZSBkZXN0aW5hdGlvbi4gSWYgCi0gKiAgICAg
ICAgICAgICAgICAgICAgICBwRGVzdExlbmd0aCE9TlVMTCB0aGVuICpwRGVzdExlbmd0aCBpcyBh
bHdheXMgc2V0IHRvIHRoZSAKLSAqICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBvdXRw
dXQgdW5pdHMgY29ycmVzcG9uZGluZyB0byB0aGUgdHJhbnNmb3JtYXRpb24gb2YgCi0gKiAgICAg
ICAgICAgICAgICAgICAgICBhbGwgdGhlIGlucHV0IHVuaXRzLCBldmVuIGluIGNhc2Ugb2YgYSBi
dWZmZXIgb3ZlcmZsb3cuCi0gKiBAcGFyYW0gc3JjICAgICAgICAgICBUaGUgb3JpZ2luYWwgc291
cmNlIHN0cmluZwotICogQHBhcmFtIHNyY0xlbmd0aCAgICAgVGhlIGxlbmd0aCBvZiB0aGUgb3Jp
Z2luYWwgc3RyaW5nLiBJZiAtMSwgdGhlbiBzcmMgbXVzdCBiZSB6ZXJvLXRlcm1pbmF0ZWQuCi0g
KiBAcGFyYW0gcEVycm9yQ29kZSAgICBNdXN0IGJlIGEgdmFsaWQgcG9pbnRlciB0byBhbiBlcnJv
ciBjb2RlIHZhbHVlLAotICogICAgICAgICAgICAgICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5k
aWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC4KLSAqIEByZXR1cm4gVGhl
IHBvaW50ZXIgdG8gZGVzdGluYXRpb24gYnVmZmVyLgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKiBA
c2VlIHVfc3RyVG9VVEY4V2l0aFN1YgotICogQHNlZSB1X3N0ckZyb21VVEY4Ci0gKi8KLVVfU1RB
QkxFIGNoYXIqIFVfRVhQT1JUMiAKLXVfc3RyVG9VVEY4KGNoYXIgKmRlc3QsICAgICAgICAgICAK
LSAgICAgICAgICAgIGludDMyX3QgZGVzdENhcGFjaXR5LAotICAgICAgICAgICAgaW50MzJfdCAq
cERlc3RMZW5ndGgsCi0gICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjLCAKLSAgICAgICAgICAg
IGludDMyX3Qgc3JjTGVuZ3RoLAotICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7
Ci0KLS8qKgotICogQ29udmVydCBhIFVURi04IHN0cmluZyB0byBVVEYtMTYuCi0gKiBJZiB0aGUg
aW5wdXQgc3RyaW5nIGlzIG5vdCB3ZWxsLWZvcm1lZCwgdGhlbiB0aGUgVV9JTlZBTElEX0NIQVJf
Rk9VTkQgZXJyb3IgY29kZSBpcyBzZXQuCi0gKgotICogQHBhcmFtIGRlc3QgICAgICAgICAgQSBi
dWZmZXIgZm9yIHRoZSByZXN1bHQgc3RyaW5nLiBUaGUgcmVzdWx0IHdpbGwgYmUgemVyby10ZXJt
aW5hdGVkIGlmCi0gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyIGlzIGxhcmdlIGVu
b3VnaC4KLSAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG51
bWJlciBvZiBVQ2hhcnMpLiBJZiBpdCBpcyAwLCB0aGVuCi0gKiAgICAgICAgICAgICAgICAgICAg
ICBkZXN0IG1heSBiZSBOVUxMIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBvbmx5IHJldHVybiB0aGUg
bGVuZ3RoIG9mIHRoZSAKLSAqICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB3aXRob3V0IHdy
aXRpbmcgYW55IG9mIHRoZSByZXN1bHQgc3RyaW5nIChwcmUtZmxpZ2h0aW5nKS4KLSAqIEBwYXJh
bSBwRGVzdExlbmd0aCAgIEEgcG9pbnRlciB0byByZWNlaXZlIHRoZSBudW1iZXIgb2YgdW5pdHMg
d3JpdHRlbiB0byB0aGUgZGVzdGluYXRpb24uIElmIAotICogICAgICAgICAgICAgICAgICAgICAg
cERlc3RMZW5ndGghPU5VTEwgdGhlbiAqcERlc3RMZW5ndGggaXMgYWx3YXlzIHNldCB0byB0aGUg
Ci0gKiAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygb3V0cHV0IHVuaXRzIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIHRyYW5zZm9ybWF0aW9uIG9mIAotICogICAgICAgICAgICAgICAgICAgICAg
YWxsIHRoZSBpbnB1dCB1bml0cywgZXZlbiBpbiBjYXNlIG9mIGEgYnVmZmVyIG92ZXJmbG93Lgot
ICogQHBhcmFtIHNyYyAgICAgICAgICAgVGhlIG9yaWdpbmFsIHNvdXJjZSBzdHJpbmcKLSAqIEBw
YXJhbSBzcmNMZW5ndGggICAgIFRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIHN0cmluZy4gSWYg
LTEsIHRoZW4gc3JjIG11c3QgYmUgemVyby10ZXJtaW5hdGVkLgotICogQHBhcmFtIHBFcnJvckNv
ZGUgICAgTXVzdCBiZSBhIHZhbGlkIHBvaW50ZXIgdG8gYW4gZXJyb3IgY29kZSB2YWx1ZSwKLSAq
ICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFpbHVyZSBi
ZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuCi0gKiBAcmV0dXJuIFRoZSBwb2ludGVyIHRvIGRlc3Rp
bmF0aW9uIGJ1ZmZlci4KLSAqIEBzdGFibGUgSUNVIDIuMAotICogQHNlZSB1X3N0ckZyb21VVEY4
V2l0aFN1YgotICogQHNlZSB1X3N0ckZyb21VVEY4TGVuaWVudAotICovCi1VX1NUQUJMRSBVQ2hh
ciogVV9FWFBPUlQyCi11X3N0ckZyb21VVEY4KFVDaGFyICpkZXN0LCAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCi0gICAgICAgICAgICAgIGludDMyX3Qg
KnBEZXN0TGVuZ3RoLAotICAgICAgICAgICAgICBjb25zdCBjaGFyICpzcmMsIAotICAgICAgICAg
ICAgICBpbnQzMl90IHNyY0xlbmd0aCwKLSAgICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9y
Q29kZSk7Ci0KLS8qKgotICogQ29udmVydCBhIFVURi0xNiBzdHJpbmcgdG8gVVRGLTguCi0gKgot
ICogU2FtZSBhcyB1X3N0clRvVVRGOCgpIGV4Y2VwdCBmb3IgdGhlIGFkZGl0aW9uYWwgc3ViY2hh
ciB3aGljaCBpcyBvdXRwdXQgZm9yCi0gKiBpbGxlZ2FsIGlucHV0IHNlcXVlbmNlcywgaW5zdGVh
ZCBvZiBzdG9wcGluZyB3aXRoIHRoZSBVX0lOVkFMSURfQ0hBUl9GT1VORCBlcnJvciBjb2RlLgot
ICogV2l0aCBzdWJjaGFyPT1VX1NFTlRJTkVMLCB0aGlzIGZ1bmN0aW9uIGJlaGF2ZXMgZXhhY3Rs
eSBsaWtlIHVfc3RyVG9VVEY4KCkuCi0gKgotICogQHBhcmFtIGRlc3QgICAgICAgICAgQSBidWZm
ZXIgZm9yIHRoZSByZXN1bHQgc3RyaW5nLiBUaGUgcmVzdWx0IHdpbGwgYmUgemVyby10ZXJtaW5h
dGVkIGlmCi0gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3Vn
aC4KLSAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG51bWJl
ciBvZiBjaGFycykuIElmIGl0IGlzIDAsIHRoZW4KLSAqICAgICAgICAgICAgICAgICAgICAgIGRl
c3QgbWF5IGJlIE5VTEwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuIHRoZSBsZW5n
dGggb2YgdGhlIAotICogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHdpdGhvdXQgd3JpdGlu
ZyBhbnkgb2YgdGhlIHJlc3VsdCBzdHJpbmcgKHByZS1mbGlnaHRpbmcpLgotICogQHBhcmFtIHBE
ZXN0TGVuZ3RoICAgQSBwb2ludGVyIHRvIHJlY2VpdmUgdGhlIG51bWJlciBvZiB1bml0cyB3cml0
dGVuIHRvIHRoZSBkZXN0aW5hdGlvbi4gSWYgCi0gKiAgICAgICAgICAgICAgICAgICAgICBwRGVz
dExlbmd0aCE9TlVMTCB0aGVuICpwRGVzdExlbmd0aCBpcyBhbHdheXMgc2V0IHRvIHRoZSAKLSAq
ICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBvdXRwdXQgdW5pdHMgY29ycmVzcG9uZGlu
ZyB0byB0aGUgdHJhbnNmb3JtYXRpb24gb2YgCi0gKiAgICAgICAgICAgICAgICAgICAgICBhbGwg
dGhlIGlucHV0IHVuaXRzLCBldmVuIGluIGNhc2Ugb2YgYSBidWZmZXIgb3ZlcmZsb3cuCi0gKiBA
cGFyYW0gc3JjICAgICAgICAgICBUaGUgb3JpZ2luYWwgc291cmNlIHN0cmluZwotICogQHBhcmFt
IHNyY0xlbmd0aCAgICAgVGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nLiBJZiAtMSwg
dGhlbiBzcmMgbXVzdCBiZSB6ZXJvLXRlcm1pbmF0ZWQuCi0gKiBAcGFyYW0gc3ViY2hhciAgICAg
ICBUaGUgc3Vic3RpdHV0aW9uIGNoYXJhY3RlciB0byB1c2UgaW4gcGxhY2Ugb2YgYW4gaWxsZWdh
bCBpbnB1dCBzZXF1ZW5jZSwKLSAqICAgICAgICAgICAgICAgICAgICAgIG9yIFVfU0VOVElORUwg
aWYgdGhlIGZ1bmN0aW9uIGlzIHRvIHJldHVybiB3aXRoIFVfSU5WQUxJRF9DSEFSX0ZPVU5EIGlu
c3RlYWQuCi0gKiAgICAgICAgICAgICAgICAgICAgICBBIHN1YnN0aXR1dGlvbiBjaGFyYWN0ZXIg
Y2FuIGJlIGFueSB2YWxpZCBVbmljb2RlIGNvZGUgcG9pbnQgKHVwIHRvIFUrMTBGRkZGKQotICog
ICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGZvciBzdXJyb2dhdGUgY29kZSBwb2ludHMgKFUr
RDgwMC4uVStERkZGKS4KLSAqICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNvbW1lbmRlZCB2
YWx1ZSBpcyBVK0ZGRkQgIlJFUExBQ0VNRU5UIENIQVJBQ1RFUiIuCi0gKiBAcGFyYW0gcE51bVN1
YnN0aXR1dGlvbnMgT3V0cHV0IHBhcmFtZXRlciByZWNlaXZpbmcgdGhlIG51bWJlciBvZiBzdWJz
dGl0dXRpb25zIGlmIHN1YmNoYXI+PTAuCi0gKiAgICAgICAgICAgICAgICAgICAgICBTZXQgdG8g
MCBpZiBubyBzdWJzdGl0dXRpb25zIG9jY3VyIG9yIHN1YmNoYXI8MC4KLSAqICAgICAgICAgICAg
ICAgICAgICAgIHBOdW1TdWJzdGl0dXRpb25zIGNhbiBiZSBOVUxMLgotICogQHBhcmFtIHBFcnJv
ckNvZGUgICAgUG9pbnRlciB0byBhIHN0YW5kYXJkIElDVSBlcnJvciBjb2RlLiBJdHMgaW5wdXQg
dmFsdWUgbXVzdAotICogICAgICAgICAgICAgICAgICAgICAgcGFzcyB0aGUgVV9TVUNDRVNTKCkg
dGVzdCwgb3IgZWxzZSB0aGUgZnVuY3Rpb24gcmV0dXJucwotICogICAgICAgICAgICAgICAgICAg
ICAgaW1tZWRpYXRlbHkuIENoZWNrIGZvciBVX0ZBSUxVUkUoKSBvbiBvdXRwdXQgb3IgdXNlIHdp
dGgKLSAqICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoYWluaW5nLiAoU2VlIFVzZXIg
R3VpZGUgZm9yIGRldGFpbHMuKQotICogQHJldHVybiBUaGUgcG9pbnRlciB0byBkZXN0aW5hdGlv
biBidWZmZXIuCi0gKiBAc2VlIHVfc3RyVG9VVEY4Ci0gKiBAc2VlIHVfc3RyRnJvbVVURjhXaXRo
U3ViCi0gKiBAc3RhYmxlIElDVSAzLjYKLSAqLwotVV9TVEFCTEUgY2hhciogVV9FWFBPUlQyCi11
X3N0clRvVVRGOFdpdGhTdWIoY2hhciAqZGVzdCwKLSAgICAgICAgICAgIGludDMyX3QgZGVzdENh
cGFjaXR5LAotICAgICAgICAgICAgaW50MzJfdCAqcERlc3RMZW5ndGgsCi0gICAgICAgICAgICBj
b25zdCBVQ2hhciAqc3JjLAotICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgsCi0gICAgICAg
ICAgICBVQ2hhcjMyIHN1YmNoYXIsIGludDMyX3QgKnBOdW1TdWJzdGl0dXRpb25zLAotICAgICAg
ICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7Ci0KLS8qKgotICogQ29udmVydCBhIFVURi04
IHN0cmluZyB0byBVVEYtMTYuCi0gKgotICogU2FtZSBhcyB1X3N0ckZyb21VVEY4KCkgZXhjZXB0
IGZvciB0aGUgYWRkaXRpb25hbCBzdWJjaGFyIHdoaWNoIGlzIG91dHB1dCBmb3IKLSAqIGlsbGVn
YWwgaW5wdXQgc2VxdWVuY2VzLCBpbnN0ZWFkIG9mIHN0b3BwaW5nIHdpdGggdGhlIFVfSU5WQUxJ
RF9DSEFSX0ZPVU5EIGVycm9yIGNvZGUuCi0gKiBXaXRoIHN1YmNoYXI9PVVfU0VOVElORUwsIHRo
aXMgZnVuY3Rpb24gYmVoYXZlcyBleGFjdGx5IGxpa2UgdV9zdHJGcm9tVVRGOCgpLgotICoKLSAq
IEBwYXJhbSBkZXN0ICAgICAgICAgIEEgYnVmZmVyIGZvciB0aGUgcmVzdWx0IHN0cmluZy4gVGhl
IHJlc3VsdCB3aWxsIGJlIHplcm8tdGVybWluYXRlZCBpZgotICogICAgICAgICAgICAgICAgICAg
ICAgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guCi0gKiBAcGFyYW0gZGVzdENhcGFjaXR5ICBU
aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChudW1iZXIgb2YgVUNoYXJzKS4gSWYgaXQgaXMgMCwgdGhl
bgotICogICAgICAgICAgICAgICAgICAgICAgZGVzdCBtYXkgYmUgTlVMTCBhbmQgdGhlIGZ1bmN0
aW9uIHdpbGwgb25seSByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgCi0gKiAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgd2l0aG91dCB3cml0aW5nIGFueSBvZiB0aGUgcmVzdWx0IHN0cmluZyAo
cHJlLWZsaWdodGluZykuCi0gKiBAcGFyYW0gcERlc3RMZW5ndGggICBBIHBvaW50ZXIgdG8gcmVj
ZWl2ZSB0aGUgbnVtYmVyIG9mIHVuaXRzIHdyaXR0ZW4gdG8gdGhlIGRlc3RpbmF0aW9uLiBJZiAK
LSAqICAgICAgICAgICAgICAgICAgICAgIHBEZXN0TGVuZ3RoIT1OVUxMIHRoZW4gKnBEZXN0TGVu
Z3RoIGlzIGFsd2F5cyBzZXQgdG8gdGhlIAotICogICAgICAgICAgICAgICAgICAgICAgbnVtYmVy
IG9mIG91dHB1dCB1bml0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSB0cmFuc2Zvcm1hdGlvbiBvZiAK
LSAqICAgICAgICAgICAgICAgICAgICAgIGFsbCB0aGUgaW5wdXQgdW5pdHMsIGV2ZW4gaW4gY2Fz
ZSBvZiBhIGJ1ZmZlciBvdmVyZmxvdy4KLSAqIEBwYXJhbSBzcmMgICAgICAgICAgIFRoZSBvcmln
aW5hbCBzb3VyY2Ugc3RyaW5nCi0gKiBAcGFyYW0gc3JjTGVuZ3RoICAgICBUaGUgbGVuZ3RoIG9m
IHRoZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0xLCB0aGVuIHNyYyBtdXN0IGJlIHplcm8tdGVybWlu
YXRlZC4KLSAqIEBwYXJhbSBzdWJjaGFyICAgICAgIFRoZSBzdWJzdGl0dXRpb24gY2hhcmFjdGVy
IHRvIHVzZSBpbiBwbGFjZSBvZiBhbiBpbGxlZ2FsIGlucHV0IHNlcXVlbmNlLAotICogICAgICAg
ICAgICAgICAgICAgICAgb3IgVV9TRU5USU5FTCBpZiB0aGUgZnVuY3Rpb24gaXMgdG8gcmV0dXJu
IHdpdGggVV9JTlZBTElEX0NIQVJfRk9VTkQgaW5zdGVhZC4KLSAqICAgICAgICAgICAgICAgICAg
ICAgIEEgc3Vic3RpdHV0aW9uIGNoYXJhY3RlciBjYW4gYmUgYW55IHZhbGlkIFVuaWNvZGUgY29k
ZSBwb2ludCAodXAgdG8gVSsxMEZGRkYpCi0gKiAgICAgICAgICAgICAgICAgICAgICBleGNlcHQg
Zm9yIHN1cnJvZ2F0ZSBjb2RlIHBvaW50cyAoVStEODAwLi5VK0RGRkYpLgotICogICAgICAgICAg
ICAgICAgICAgICAgVGhlIHJlY29tbWVuZGVkIHZhbHVlIGlzIFUrRkZGRCAiUkVQTEFDRU1FTlQg
Q0hBUkFDVEVSIi4KLSAqIEBwYXJhbSBwTnVtU3Vic3RpdHV0aW9ucyBPdXRwdXQgcGFyYW1ldGVy
IHJlY2VpdmluZyB0aGUgbnVtYmVyIG9mIHN1YnN0aXR1dGlvbnMgaWYgc3ViY2hhcj49MC4KLSAq
ICAgICAgICAgICAgICAgICAgICAgIFNldCB0byAwIGlmIG5vIHN1YnN0aXR1dGlvbnMgb2NjdXIg
b3Igc3ViY2hhcjwwLgotICogICAgICAgICAgICAgICAgICAgICAgcE51bVN1YnN0aXR1dGlvbnMg
Y2FuIGJlIE5VTEwuCi0gKiBAcGFyYW0gcEVycm9yQ29kZSAgICBQb2ludGVyIHRvIGEgc3RhbmRh
cmQgSUNVIGVycm9yIGNvZGUuIEl0cyBpbnB1dCB2YWx1ZSBtdXN0Ci0gKiAgICAgICAgICAgICAg
ICAgICAgICBwYXNzIHRoZSBVX1NVQ0NFU1MoKSB0ZXN0LCBvciBlbHNlIHRoZSBmdW5jdGlvbiBy
ZXR1cm5zCi0gKiAgICAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGVseS4gQ2hlY2sgZm9yIFVf
RkFJTFVSRSgpIG9uIG91dHB1dCBvciB1c2Ugd2l0aAotICogICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24gY2hhaW5pbmcuIChTZWUgVXNlciBHdWlkZSBmb3IgZGV0YWlscy4pCi0gKiBAcmV0
dXJuIFRoZSBwb2ludGVyIHRvIGRlc3RpbmF0aW9uIGJ1ZmZlci4KLSAqIEBzZWUgdV9zdHJGcm9t
VVRGOAotICogQHNlZSB1X3N0ckZyb21VVEY4TGVuaWVudAotICogQHNlZSB1X3N0clRvVVRGOFdp
dGhTdWIKLSAqIEBzdGFibGUgSUNVIDMuNgotICovCi1VX1NUQUJMRSBVQ2hhciogVV9FWFBPUlQy
Ci11X3N0ckZyb21VVEY4V2l0aFN1YihVQ2hhciAqZGVzdCwKLSAgICAgICAgICAgICAgaW50MzJf
dCBkZXN0Q2FwYWNpdHksCi0gICAgICAgICAgICAgIGludDMyX3QgKnBEZXN0TGVuZ3RoLAotICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpzcmMsCi0gICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVu
Z3RoLAotICAgICAgICAgICAgICBVQ2hhcjMyIHN1YmNoYXIsIGludDMyX3QgKnBOdW1TdWJzdGl0
dXRpb25zLAotICAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKLQotLyoqCi0g
KiBDb252ZXJ0IGEgVVRGLTggc3RyaW5nIHRvIFVURi0xNi4KLSAqCi0gKiBTYW1lIGFzIHVfc3Ry
RnJvbVVURjgoKSBleGNlcHQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHZl
cnkgZmFzdCwKLSAqIHdoaWNoIGl0IGFjaGlldmVzIGJ5IGJlaW5nIGxlbmllbnQgYWJvdXQgbWFs
Zm9ybWVkIFVURi04IHNlcXVlbmNlcy4KLSAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9y
IHVzZSBpbiBlbnZpcm9ubWVudHMgd2hlcmUgVVRGLTggdGV4dCBpcwotICogZXhwZWN0ZWQgdG8g
YmUgd2VsbC1mb3JtZWQuCi0gKgotICogSXRzIHNlbWFudGljcyBhcmU6Ci0gKiAtIFdlbGwtZm9y
bWVkIFVURi04IHRleHQgaXMgY29ycmVjdGx5IGNvbnZlcnRlZCB0byB3ZWxsLWZvcm1lZCBVVEYt
MTYgdGV4dC4KLSAqIC0gVGhlIGZ1bmN0aW9uIHdpbGwgbm90IHJlYWQgYmV5b25kIHRoZSBpbnB1
dCBzdHJpbmcsIG5vciB3cml0ZSBiZXlvbmQKLSAqICAgdGhlIGRlc3RDYXBhY2l0eS4KLSAqIC0g
TWFsZm9ybWVkIFVURi04IHJlc3VsdHMgaW4gImdhcmJhZ2UiIDE2LWJpdCBVbmljb2RlIHN0cmlu
Z3Mgd2hpY2ggbWF5IG5vdAotICogICBiZSB3ZWxsLWZvcm1lZCBVVEYtMTYuCi0gKiAgIFRoZSBm
dW5jdGlvbiB3aWxsIHJlc3luY2hyb25pemUgdG8gdmFsaWQgY29kZSBwb2ludCBib3VuZGFyaWVz
Ci0gKiAgIHdpdGhpbiBhIHNtYWxsIG51bWJlciBvZiBjb2RlIHBvaW50cyBhZnRlciBhbiBpbGxl
Z2FsIHNlcXVlbmNlLgotICogLSBOb24tc2hvcnRlc3QgZm9ybXMgYXJlIG5vdCBkZXRlY3RlZCBh
bmQgd2lsbCByZXN1bHQgaW4gInNwb29maW5nIiBvdXRwdXQuCi0gKgotICogRm9yIGZ1cnRoZXIg
cGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQsIGlmIHNyY0xlbmd0aCBpcyBnaXZlbiAoPj0wKSwKLSAq
IHRoZW4gaXQgbXVzdCBiZSBkZXN0Q2FwYWNpdHk+PXNyY0xlbmd0aC4KLSAqCi0gKiBUaGVyZSBp
cyBubyBpbnZlcnNlIHVfc3RyVG9VVEY4TGVuaWVudCgpIGZ1bmN0aW9uIGJlY2F1c2UgdGhlcmUg
aXMgcHJhY3RpY2FsbHkKLSAqIG5vIHBlcmZvcm1hbmNlIGdhaW4gZnJvbSBub3QgY2hlY2tpbmcg
dGhhdCBhIFVURi0xNiBzdHJpbmcgaXMgd2VsbC1mb3JtZWQuCi0gKgotICogQHBhcmFtIGRlc3Qg
ICAgICAgICAgQSBidWZmZXIgZm9yIHRoZSByZXN1bHQgc3RyaW5nLiBUaGUgcmVzdWx0IHdpbGwg
YmUgemVyby10ZXJtaW5hdGVkIGlmCi0gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVy
IGlzIGxhcmdlIGVub3VnaC4KLSAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgIFRoZSBzaXplIG9mIHRo
ZSBidWZmZXIgKG51bWJlciBvZiBVQ2hhcnMpLiBJZiBpdCBpcyAwLCB0aGVuCi0gKiAgICAgICAg
ICAgICAgICAgICAgICBkZXN0IG1heSBiZSBOVUxMIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBvbmx5
IHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSAKLSAqICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCB3aXRob3V0IHdyaXRpbmcgYW55IG9mIHRoZSByZXN1bHQgc3RyaW5nIChwcmUtZmxpZ2h0aW5n
KS4KLSAqICAgICAgICAgICAgICAgICAgICAgIFVubGlrZSBmb3Igb3RoZXIgSUNVIGZ1bmN0aW9u
cywgaWYgc3JjTGVuZ3RoPj0wIHRoZW4gaXQKLSAqICAgICAgICAgICAgICAgICAgICAgIG11c3Qg
YmUgZGVzdENhcGFjaXR5Pj1zcmNMZW5ndGguCi0gKiBAcGFyYW0gcERlc3RMZW5ndGggICBBIHBv
aW50ZXIgdG8gcmVjZWl2ZSB0aGUgbnVtYmVyIG9mIHVuaXRzIHdyaXR0ZW4gdG8gdGhlIGRlc3Rp
bmF0aW9uLiBJZiAKLSAqICAgICAgICAgICAgICAgICAgICAgIHBEZXN0TGVuZ3RoIT1OVUxMIHRo
ZW4gKnBEZXN0TGVuZ3RoIGlzIGFsd2F5cyBzZXQgdG8gdGhlIAotICogICAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyIG9mIG91dHB1dCB1bml0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSB0cmFuc2Zv
cm1hdGlvbiBvZiAKLSAqICAgICAgICAgICAgICAgICAgICAgIGFsbCB0aGUgaW5wdXQgdW5pdHMs
IGV2ZW4gaW4gY2FzZSBvZiBhIGJ1ZmZlciBvdmVyZmxvdy4KLSAqICAgICAgICAgICAgICAgICAg
ICAgIFVubGlrZSBmb3Igb3RoZXIgSUNVIGZ1bmN0aW9ucywgaWYgc3JjTGVuZ3RoPj0wIGJ1dAot
ICogICAgICAgICAgICAgICAgICAgICAgZGVzdENhcGFjaXR5PHNyY0xlbmd0aCwgdGhlbiAqcERl
c3RMZW5ndGggd2lsbCBiZSBzZXQgdG8gc3JjTGVuZ3RoCi0gKiAgICAgICAgICAgICAgICAgICAg
ICAoYW5kIFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SIHdpbGwgYmUgc2V0KQotICogICAgICAgICAg
ICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgYWN0dWFsIHJlc3VsdCBsZW5ndGguCi0gKiBA
cGFyYW0gc3JjICAgICAgICAgICBUaGUgb3JpZ2luYWwgc291cmNlIHN0cmluZwotICogQHBhcmFt
IHNyY0xlbmd0aCAgICAgVGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nLiBJZiAtMSwg
dGhlbiBzcmMgbXVzdCBiZSB6ZXJvLXRlcm1pbmF0ZWQuCi0gKiBAcGFyYW0gcEVycm9yQ29kZSAg
ICBQb2ludGVyIHRvIGEgc3RhbmRhcmQgSUNVIGVycm9yIGNvZGUuIEl0cyBpbnB1dCB2YWx1ZSBt
dXN0Ci0gKiAgICAgICAgICAgICAgICAgICAgICBwYXNzIHRoZSBVX1NVQ0NFU1MoKSB0ZXN0LCBv
ciBlbHNlIHRoZSBmdW5jdGlvbiByZXR1cm5zCi0gKiAgICAgICAgICAgICAgICAgICAgICBpbW1l
ZGlhdGVseS4gQ2hlY2sgZm9yIFVfRkFJTFVSRSgpIG9uIG91dHB1dCBvciB1c2Ugd2l0aAotICog
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hhaW5pbmcuIChTZWUgVXNlciBHdWlkZSBm
b3IgZGV0YWlscy4pCi0gKiBAcmV0dXJuIFRoZSBwb2ludGVyIHRvIGRlc3RpbmF0aW9uIGJ1ZmZl
ci4KLSAqIEBzZWUgdV9zdHJGcm9tVVRGOAotICogQHNlZSB1X3N0ckZyb21VVEY4V2l0aFN1Ygot
ICogQHNlZSB1X3N0clRvVVRGOFdpdGhTdWIKLSAqIEBzdGFibGUgSUNVIDMuNgotICovCi1VX1NU
QUJMRSBVQ2hhciAqIFVfRVhQT1JUMgotdV9zdHJGcm9tVVRGOExlbmllbnQoVUNoYXIgKmRlc3Qs
Ci0gICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGRlc3RDYXBhY2l0eSwKLSAgICAgICAgICAg
ICAgICAgICAgIGludDMyX3QgKnBEZXN0TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqc3JjLAotICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgsCi0g
ICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKLQotLyoqCi0gKiBD
b252ZXJ0IGEgVVRGLTE2IHN0cmluZyB0byBVVEYtMzIuCi0gKiBJZiB0aGUgaW5wdXQgc3RyaW5n
IGlzIG5vdCB3ZWxsLWZvcm1lZCwgdGhlbiB0aGUgVV9JTlZBTElEX0NIQVJfRk9VTkQgZXJyb3Ig
Y29kZSBpcyBzZXQuCi0gKgotICogQHBhcmFtIGRlc3QgICAgICAgICAgQSBidWZmZXIgZm9yIHRo
ZSByZXN1bHQgc3RyaW5nLiBUaGUgcmVzdWx0IHdpbGwgYmUgemVyby10ZXJtaW5hdGVkIGlmCi0g
KiAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KLSAqIEBw
YXJhbSBkZXN0Q2FwYWNpdHkgIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG51bWJlciBvZiBVQ2hh
cjMycykuIElmIGl0IGlzIDAsIHRoZW4KLSAqICAgICAgICAgICAgICAgICAgICAgIGRlc3QgbWF5
IGJlIE5VTEwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuIHRoZSBsZW5ndGggb2Yg
dGhlIAotICogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHdpdGhvdXQgd3JpdGluZyBhbnkg
b2YgdGhlIHJlc3VsdCBzdHJpbmcgKHByZS1mbGlnaHRpbmcpLgotICogQHBhcmFtIHBEZXN0TGVu
Z3RoICAgQSBwb2ludGVyIHRvIHJlY2VpdmUgdGhlIG51bWJlciBvZiB1bml0cyB3cml0dGVuIHRv
IHRoZSBkZXN0aW5hdGlvbi4gSWYgCi0gKiAgICAgICAgICAgICAgICAgICAgICBwRGVzdExlbmd0
aCE9TlVMTCB0aGVuICpwRGVzdExlbmd0aCBpcyBhbHdheXMgc2V0IHRvIHRoZSAKLSAqICAgICAg
ICAgICAgICAgICAgICAgIG51bWJlciBvZiBvdXRwdXQgdW5pdHMgY29ycmVzcG9uZGluZyB0byB0
aGUgdHJhbnNmb3JtYXRpb24gb2YgCi0gKiAgICAgICAgICAgICAgICAgICAgICBhbGwgdGhlIGlu
cHV0IHVuaXRzLCBldmVuIGluIGNhc2Ugb2YgYSBidWZmZXIgb3ZlcmZsb3cuCi0gKiBAcGFyYW0g
c3JjICAgICAgICAgICBUaGUgb3JpZ2luYWwgc291cmNlIHN0cmluZwotICogQHBhcmFtIHNyY0xl
bmd0aCAgICAgVGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nLiBJZiAtMSwgdGhlbiBz
cmMgbXVzdCBiZSB6ZXJvLXRlcm1pbmF0ZWQuCi0gKiBAcGFyYW0gcEVycm9yQ29kZSAgICBNdXN0
IGJlIGEgdmFsaWQgcG9pbnRlciB0byBhbiBlcnJvciBjb2RlIHZhbHVlLAotICogICAgICAgICAg
ICAgICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5kaWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUg
ZnVuY3Rpb24gY2FsbC4KLSAqIEByZXR1cm4gVGhlIHBvaW50ZXIgdG8gZGVzdGluYXRpb24gYnVm
ZmVyLgotICogQHNlZSB1X3N0clRvVVRGMzJXaXRoU3ViCi0gKiBAc2VlIHVfc3RyRnJvbVVURjMy
Ci0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgVUNoYXIzMiogVV9FWFBPUlQyIAot
dV9zdHJUb1VURjMyKFVDaGFyMzIgKmRlc3QsIAotICAgICAgICAgICAgIGludDMyX3QgIGRlc3RD
YXBhY2l0eSwKLSAgICAgICAgICAgICBpbnQzMl90ICAqcERlc3RMZW5ndGgsCi0gICAgICAgICAg
ICAgY29uc3QgVUNoYXIgKnNyYywgCi0gICAgICAgICAgICAgaW50MzJfdCAgc3JjTGVuZ3RoLAot
ICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwotCi0vKioKLSAqIENvbnZlcnQg
YSBVVEYtMzIgc3RyaW5nIHRvIFVURi0xNi4KLSAqIElmIHRoZSBpbnB1dCBzdHJpbmcgaXMgbm90
IHdlbGwtZm9ybWVkLCB0aGVuIHRoZSBVX0lOVkFMSURfQ0hBUl9GT1VORCBlcnJvciBjb2RlIGlz
IHNldC4KLSAqCi0gKiBAcGFyYW0gZGVzdCAgICAgICAgICBBIGJ1ZmZlciBmb3IgdGhlIHJlc3Vs
dCBzdHJpbmcuIFRoZSByZXN1bHQgd2lsbCBiZSB6ZXJvLXRlcm1pbmF0ZWQgaWYKLSAqICAgICAg
ICAgICAgICAgICAgICAgIHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLgotICogQHBhcmFtIGRl
c3RDYXBhY2l0eSAgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAobnVtYmVyIG9mIFVDaGFycykuIElm
IGl0IGlzIDAsIHRoZW4KLSAqICAgICAgICAgICAgICAgICAgICAgIGRlc3QgbWF5IGJlIE5VTEwg
YW5kIHRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIAotICog
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHdpdGhvdXQgd3JpdGluZyBhbnkgb2YgdGhlIHJl
c3VsdCBzdHJpbmcgKHByZS1mbGlnaHRpbmcpLgotICogQHBhcmFtIHBEZXN0TGVuZ3RoICAgQSBw
b2ludGVyIHRvIHJlY2VpdmUgdGhlIG51bWJlciBvZiB1bml0cyB3cml0dGVuIHRvIHRoZSBkZXN0
aW5hdGlvbi4gSWYgCi0gKiAgICAgICAgICAgICAgICAgICAgICBwRGVzdExlbmd0aCE9TlVMTCB0
aGVuICpwRGVzdExlbmd0aCBpcyBhbHdheXMgc2V0IHRvIHRoZSAKLSAqICAgICAgICAgICAgICAg
ICAgICAgIG51bWJlciBvZiBvdXRwdXQgdW5pdHMgY29ycmVzcG9uZGluZyB0byB0aGUgdHJhbnNm
b3JtYXRpb24gb2YgCi0gKiAgICAgICAgICAgICAgICAgICAgICBhbGwgdGhlIGlucHV0IHVuaXRz
LCBldmVuIGluIGNhc2Ugb2YgYSBidWZmZXIgb3ZlcmZsb3cuCi0gKiBAcGFyYW0gc3JjICAgICAg
ICAgICBUaGUgb3JpZ2luYWwgc291cmNlIHN0cmluZwotICogQHBhcmFtIHNyY0xlbmd0aCAgICAg
VGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nLiBJZiAtMSwgdGhlbiBzcmMgbXVzdCBi
ZSB6ZXJvLXRlcm1pbmF0ZWQuCi0gKiBAcGFyYW0gcEVycm9yQ29kZSAgICBNdXN0IGJlIGEgdmFs
aWQgcG9pbnRlciB0byBhbiBlcnJvciBjb2RlIHZhbHVlLAotICogICAgICAgICAgICAgICAgICAg
ICAgd2hpY2ggbXVzdCBub3QgaW5kaWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUgZnVuY3Rpb24g
Y2FsbC4KLSAqIEByZXR1cm4gVGhlIHBvaW50ZXIgdG8gZGVzdGluYXRpb24gYnVmZmVyLgotICog
QHNlZSB1X3N0ckZyb21VVEYzMldpdGhTdWIKLSAqIEBzZWUgdV9zdHJUb1VURjMyCi0gKiBAc3Rh
YmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgVUNoYXIqIFVfRVhQT1JUMiAKLXVfc3RyRnJvbVVU
RjMyKFVDaGFyICAgKmRlc3QsCi0gICAgICAgICAgICAgICBpbnQzMl90IGRlc3RDYXBhY2l0eSwg
Ci0gICAgICAgICAgICAgICBpbnQzMl90ICpwRGVzdExlbmd0aCwKLSAgICAgICAgICAgICAgIGNv
bnN0IFVDaGFyMzIgKnNyYywKLSAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLAotICAg
ICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7Ci0KLS8qKgotICogQ29udmVydCBh
IFVURi0xNiBzdHJpbmcgdG8gVVRGLTMyLgotICoKLSAqIFNhbWUgYXMgdV9zdHJUb1VURjMyKCkg
ZXhjZXB0IGZvciB0aGUgYWRkaXRpb25hbCBzdWJjaGFyIHdoaWNoIGlzIG91dHB1dCBmb3IKLSAq
IGlsbGVnYWwgaW5wdXQgc2VxdWVuY2VzLCBpbnN0ZWFkIG9mIHN0b3BwaW5nIHdpdGggdGhlIFVf
SU5WQUxJRF9DSEFSX0ZPVU5EIGVycm9yIGNvZGUuCi0gKiBXaXRoIHN1YmNoYXI9PVVfU0VOVElO
RUwsIHRoaXMgZnVuY3Rpb24gYmVoYXZlcyBleGFjdGx5IGxpa2UgdV9zdHJUb1VURjMyKCkuCi0g
KgotICogQHBhcmFtIGRlc3QgICAgICAgICAgQSBidWZmZXIgZm9yIHRoZSByZXN1bHQgc3RyaW5n
LiBUaGUgcmVzdWx0IHdpbGwgYmUgemVyby10ZXJtaW5hdGVkIGlmCi0gKiAgICAgICAgICAgICAg
ICAgICAgICB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KLSAqIEBwYXJhbSBkZXN0Q2FwYWNp
dHkgIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG51bWJlciBvZiBVQ2hhcjMycykuIElmIGl0IGlz
IDAsIHRoZW4KLSAqICAgICAgICAgICAgICAgICAgICAgIGRlc3QgbWF5IGJlIE5VTEwgYW5kIHRo
ZSBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlCi0gKiAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgd2l0aG91dCB3cml0aW5nIGFueSBvZiB0aGUgcmVzdWx0IHN0
cmluZyAocHJlLWZsaWdodGluZykuCi0gKiBAcGFyYW0gcERlc3RMZW5ndGggICBBIHBvaW50ZXIg
dG8gcmVjZWl2ZSB0aGUgbnVtYmVyIG9mIHVuaXRzIHdyaXR0ZW4gdG8gdGhlIGRlc3RpbmF0aW9u
LiBJZgotICogICAgICAgICAgICAgICAgICAgICAgcERlc3RMZW5ndGghPU5VTEwgdGhlbiAqcERl
c3RMZW5ndGggaXMgYWx3YXlzIHNldCB0byB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgIG51
bWJlciBvZiBvdXRwdXQgdW5pdHMgY29ycmVzcG9uZGluZyB0byB0aGUgdHJhbnNmb3JtYXRpb24g
b2YKLSAqICAgICAgICAgICAgICAgICAgICAgIGFsbCB0aGUgaW5wdXQgdW5pdHMsIGV2ZW4gaW4g
Y2FzZSBvZiBhIGJ1ZmZlciBvdmVyZmxvdy4KLSAqIEBwYXJhbSBzcmMgICAgICAgICAgIFRoZSBv
cmlnaW5hbCBzb3VyY2Ugc3RyaW5nCi0gKiBAcGFyYW0gc3JjTGVuZ3RoICAgICBUaGUgbGVuZ3Ro
IG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0xLCB0aGVuIHNyYyBtdXN0IGJlIHplcm8tdGVy
bWluYXRlZC4KLSAqIEBwYXJhbSBzdWJjaGFyICAgICAgIFRoZSBzdWJzdGl0dXRpb24gY2hhcmFj
dGVyIHRvIHVzZSBpbiBwbGFjZSBvZiBhbiBpbGxlZ2FsIGlucHV0IHNlcXVlbmNlLAotICogICAg
ICAgICAgICAgICAgICAgICAgb3IgVV9TRU5USU5FTCBpZiB0aGUgZnVuY3Rpb24gaXMgdG8gcmV0
dXJuIHdpdGggVV9JTlZBTElEX0NIQVJfRk9VTkQgaW5zdGVhZC4KLSAqICAgICAgICAgICAgICAg
ICAgICAgIEEgc3Vic3RpdHV0aW9uIGNoYXJhY3RlciBjYW4gYmUgYW55IHZhbGlkIFVuaWNvZGUg
Y29kZSBwb2ludCAodXAgdG8gVSsxMEZGRkYpCi0gKiAgICAgICAgICAgICAgICAgICAgICBleGNl
cHQgZm9yIHN1cnJvZ2F0ZSBjb2RlIHBvaW50cyAoVStEODAwLi5VK0RGRkYpLgotICogICAgICAg
ICAgICAgICAgICAgICAgVGhlIHJlY29tbWVuZGVkIHZhbHVlIGlzIFUrRkZGRCAiUkVQTEFDRU1F
TlQgQ0hBUkFDVEVSIi4KLSAqIEBwYXJhbSBwTnVtU3Vic3RpdHV0aW9ucyBPdXRwdXQgcGFyYW1l
dGVyIHJlY2VpdmluZyB0aGUgbnVtYmVyIG9mIHN1YnN0aXR1dGlvbnMgaWYgc3ViY2hhcj49MC4K
LSAqICAgICAgICAgICAgICAgICAgICAgIFNldCB0byAwIGlmIG5vIHN1YnN0aXR1dGlvbnMgb2Nj
dXIgb3Igc3ViY2hhcjwwLgotICogICAgICAgICAgICAgICAgICAgICAgcE51bVN1YnN0aXR1dGlv
bnMgY2FuIGJlIE5VTEwuCi0gKiBAcGFyYW0gcEVycm9yQ29kZSAgICBQb2ludGVyIHRvIGEgc3Rh
bmRhcmQgSUNVIGVycm9yIGNvZGUuIEl0cyBpbnB1dCB2YWx1ZSBtdXN0Ci0gKiAgICAgICAgICAg
ICAgICAgICAgICBwYXNzIHRoZSBVX1NVQ0NFU1MoKSB0ZXN0LCBvciBlbHNlIHRoZSBmdW5jdGlv
biByZXR1cm5zCi0gKiAgICAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGVseS4gQ2hlY2sgZm9y
IFVfRkFJTFVSRSgpIG9uIG91dHB1dCBvciB1c2Ugd2l0aAotICogICAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24gY2hhaW5pbmcuIChTZWUgVXNlciBHdWlkZSBmb3IgZGV0YWlscy4pCi0gKiBA
cmV0dXJuIFRoZSBwb2ludGVyIHRvIGRlc3RpbmF0aW9uIGJ1ZmZlci4KLSAqIEBzZWUgdV9zdHJU
b1VURjMyCi0gKiBAc2VlIHVfc3RyRnJvbVVURjMyV2l0aFN1YgotICogQHN0YWJsZSBJQ1UgNC4y
Ci0gKi8KLVVfU1RBQkxFIFVDaGFyMzIqIFVfRVhQT1JUMgotdV9zdHJUb1VURjMyV2l0aFN1YihV
Q2hhcjMyICpkZXN0LAotICAgICAgICAgICAgIGludDMyX3QgZGVzdENhcGFjaXR5LAotICAgICAg
ICAgICAgIGludDMyX3QgKnBEZXN0TGVuZ3RoLAotICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpz
cmMsCi0gICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgsCi0gICAgICAgICAgICAgVUNoYXIz
MiBzdWJjaGFyLCBpbnQzMl90ICpwTnVtU3Vic3RpdHV0aW9ucywKLSAgICAgICAgICAgICBVRXJy
b3JDb2RlICpwRXJyb3JDb2RlKTsKLQotLyoqCi0gKiBDb252ZXJ0IGEgVVRGLTMyIHN0cmluZyB0
byBVVEYtMTYuCi0gKgotICogU2FtZSBhcyB1X3N0ckZyb21VVEYzMigpIGV4Y2VwdCBmb3IgdGhl
IGFkZGl0aW9uYWwgc3ViY2hhciB3aGljaCBpcyBvdXRwdXQgZm9yCi0gKiBpbGxlZ2FsIGlucHV0
IHNlcXVlbmNlcywgaW5zdGVhZCBvZiBzdG9wcGluZyB3aXRoIHRoZSBVX0lOVkFMSURfQ0hBUl9G
T1VORCBlcnJvciBjb2RlLgotICogV2l0aCBzdWJjaGFyPT1VX1NFTlRJTkVMLCB0aGlzIGZ1bmN0
aW9uIGJlaGF2ZXMgZXhhY3RseSBsaWtlIHVfc3RyRnJvbVVURjMyKCkuCi0gKgotICogQHBhcmFt
IGRlc3QgICAgICAgICAgQSBidWZmZXIgZm9yIHRoZSByZXN1bHQgc3RyaW5nLiBUaGUgcmVzdWx0
IHdpbGwgYmUgemVyby10ZXJtaW5hdGVkIGlmCi0gKiAgICAgICAgICAgICAgICAgICAgICB0aGUg
YnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KLSAqIEBwYXJhbSBkZXN0Q2FwYWNpdHkgIFRoZSBzaXpl
IG9mIHRoZSBidWZmZXIgKG51bWJlciBvZiBVQ2hhcnMpLiBJZiBpdCBpcyAwLCB0aGVuCi0gKiAg
ICAgICAgICAgICAgICAgICAgICBkZXN0IG1heSBiZSBOVUxMIGFuZCB0aGUgZnVuY3Rpb24gd2ls
bCBvbmx5IHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZQotICogICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0IHdpdGhvdXQgd3JpdGluZyBhbnkgb2YgdGhlIHJlc3VsdCBzdHJpbmcgKHByZS1mbGln
aHRpbmcpLgotICogQHBhcmFtIHBEZXN0TGVuZ3RoICAgQSBwb2ludGVyIHRvIHJlY2VpdmUgdGhl
IG51bWJlciBvZiB1bml0cyB3cml0dGVuIHRvIHRoZSBkZXN0aW5hdGlvbi4gSWYKLSAqICAgICAg
ICAgICAgICAgICAgICAgIHBEZXN0TGVuZ3RoIT1OVUxMIHRoZW4gKnBEZXN0TGVuZ3RoIGlzIGFs
d2F5cyBzZXQgdG8gdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygb3V0cHV0
IHVuaXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRyYW5zZm9ybWF0aW9uIG9mCi0gKiAgICAgICAg
ICAgICAgICAgICAgICBhbGwgdGhlIGlucHV0IHVuaXRzLCBldmVuIGluIGNhc2Ugb2YgYSBidWZm
ZXIgb3ZlcmZsb3cuCi0gKiBAcGFyYW0gc3JjICAgICAgICAgICBUaGUgb3JpZ2luYWwgc291cmNl
IHN0cmluZwotICogQHBhcmFtIHNyY0xlbmd0aCAgICAgVGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2lu
YWwgc3RyaW5nLiBJZiAtMSwgdGhlbiBzcmMgbXVzdCBiZSB6ZXJvLXRlcm1pbmF0ZWQuCi0gKiBA
cGFyYW0gc3ViY2hhciAgICAgICBUaGUgc3Vic3RpdHV0aW9uIGNoYXJhY3RlciB0byB1c2UgaW4g
cGxhY2Ugb2YgYW4gaWxsZWdhbCBpbnB1dCBzZXF1ZW5jZSwKLSAqICAgICAgICAgICAgICAgICAg
ICAgIG9yIFVfU0VOVElORUwgaWYgdGhlIGZ1bmN0aW9uIGlzIHRvIHJldHVybiB3aXRoIFVfSU5W
QUxJRF9DSEFSX0ZPVU5EIGluc3RlYWQuCi0gKiAgICAgICAgICAgICAgICAgICAgICBBIHN1YnN0
aXR1dGlvbiBjaGFyYWN0ZXIgY2FuIGJlIGFueSB2YWxpZCBVbmljb2RlIGNvZGUgcG9pbnQgKHVw
IHRvIFUrMTBGRkZGKQotICogICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGZvciBzdXJyb2dh
dGUgY29kZSBwb2ludHMgKFUrRDgwMC4uVStERkZGKS4KLSAqICAgICAgICAgICAgICAgICAgICAg
IFRoZSByZWNvbW1lbmRlZCB2YWx1ZSBpcyBVK0ZGRkQgIlJFUExBQ0VNRU5UIENIQVJBQ1RFUiIu
Ci0gKiBAcGFyYW0gcE51bVN1YnN0aXR1dGlvbnMgT3V0cHV0IHBhcmFtZXRlciByZWNlaXZpbmcg
dGhlIG51bWJlciBvZiBzdWJzdGl0dXRpb25zIGlmIHN1YmNoYXI+PTAuCi0gKiAgICAgICAgICAg
ICAgICAgICAgICBTZXQgdG8gMCBpZiBubyBzdWJzdGl0dXRpb25zIG9jY3VyIG9yIHN1YmNoYXI8
MC4KLSAqICAgICAgICAgICAgICAgICAgICAgIHBOdW1TdWJzdGl0dXRpb25zIGNhbiBiZSBOVUxM
LgotICogQHBhcmFtIHBFcnJvckNvZGUgICAgUG9pbnRlciB0byBhIHN0YW5kYXJkIElDVSBlcnJv
ciBjb2RlLiBJdHMgaW5wdXQgdmFsdWUgbXVzdAotICogICAgICAgICAgICAgICAgICAgICAgcGFz
cyB0aGUgVV9TVUNDRVNTKCkgdGVzdCwgb3IgZWxzZSB0aGUgZnVuY3Rpb24gcmV0dXJucwotICog
ICAgICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlbHkuIENoZWNrIGZvciBVX0ZBSUxVUkUoKSBv
biBvdXRwdXQgb3IgdXNlIHdpdGgKLSAqICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNo
YWluaW5nLiAoU2VlIFVzZXIgR3VpZGUgZm9yIGRldGFpbHMuKQotICogQHJldHVybiBUaGUgcG9p
bnRlciB0byBkZXN0aW5hdGlvbiBidWZmZXIuCi0gKiBAc2VlIHVfc3RyRnJvbVVURjMyCi0gKiBA
c2VlIHVfc3RyVG9VVEYzMldpdGhTdWIKLSAqIEBzdGFibGUgSUNVIDQuMgotICovCi1VX1NUQUJM
RSBVQ2hhciogVV9FWFBPUlQyCi11X3N0ckZyb21VVEYzMldpdGhTdWIoVUNoYXIgKmRlc3QsCi0g
ICAgICAgICAgICAgICBpbnQzMl90IGRlc3RDYXBhY2l0eSwKLSAgICAgICAgICAgICAgIGludDMy
X3QgKnBEZXN0TGVuZ3RoLAotICAgICAgICAgICAgICAgY29uc3QgVUNoYXIzMiAqc3JjLAotICAg
ICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgsCi0gICAgICAgICAgICAgICBVQ2hhcjMyIHN1
YmNoYXIsIGludDMyX3QgKnBOdW1TdWJzdGl0dXRpb25zLAotICAgICAgICAgICAgICAgVUVycm9y
Q29kZSAqcEVycm9yQ29kZSk7Ci0KLS8qKgotICogQ29udmVydCBhIDE2LWJpdCBVbmljb2RlIHN0
cmluZyB0byBKYXZhIE1vZGlmaWVkIFVURi04LgotICogU2VlIGh0dHA6Ly9qYXZhLnN1bi5jb20v
amF2YXNlLzYvZG9jcy9hcGkvamF2YS9pby9EYXRhSW5wdXQuaHRtbCNtb2RpZmllZC11dGYtOAot
ICoKLSAqIFRoaXMgZnVuY3Rpb24gYmVoYXZlcyBhY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50YXRp
b24gZm9yIEphdmEgRGF0YU91dHB1dC53cml0ZVVURigpCi0gKiBleGNlcHQgdGhhdCBpdCBkb2Vz
IG5vdCBlbmNvZGUgdGhlIG91dHB1dCBsZW5ndGggaW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgot
ICogYW5kIGRvZXMgbm90IGhhdmUgYW4gb3V0cHV0IGxlbmd0aCByZXN0cmljdGlvbi4KLSAqIFNl
ZSBodHRwOi8vamF2YS5zdW4uY29tL2phdmFzZS82L2RvY3MvYXBpL2phdmEvaW8vRGF0YU91dHB1
dC5odG1sI3dyaXRlVVRGKGphdmEubGFuZy5TdHJpbmcpCi0gKgotICogVGhlIGlucHV0IHN0cmlu
ZyBuZWVkIG5vdCBiZSB3ZWxsLWZvcm1lZCBVVEYtMTYuCi0gKiAoVGhlcmVmb3JlIHRoZXJlIGlz
IG5vIHN1YmNoYXIgcGFyYW1ldGVyLikKLSAqCi0gKiBAcGFyYW0gZGVzdCAgICAgICAgICBBIGJ1
ZmZlciBmb3IgdGhlIHJlc3VsdCBzdHJpbmcuIFRoZSByZXN1bHQgd2lsbCBiZSB6ZXJvLXRlcm1p
bmF0ZWQgaWYKLSAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5v
dWdoLgotICogQHBhcmFtIGRlc3RDYXBhY2l0eSAgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAobnVt
YmVyIG9mIGNoYXJzKS4gSWYgaXQgaXMgMCwgdGhlbgotICogICAgICAgICAgICAgICAgICAgICAg
ZGVzdCBtYXkgYmUgTlVMTCBhbmQgdGhlIGZ1bmN0aW9uIHdpbGwgb25seSByZXR1cm4gdGhlIGxl
bmd0aCBvZiB0aGUgCi0gKiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgd2l0aG91dCB3cml0
aW5nIGFueSBvZiB0aGUgcmVzdWx0IHN0cmluZyAocHJlLWZsaWdodGluZykuCi0gKiBAcGFyYW0g
cERlc3RMZW5ndGggICBBIHBvaW50ZXIgdG8gcmVjZWl2ZSB0aGUgbnVtYmVyIG9mIHVuaXRzIHdy
aXR0ZW4gdG8gdGhlIGRlc3RpbmF0aW9uLiBJZiAKLSAqICAgICAgICAgICAgICAgICAgICAgIHBE
ZXN0TGVuZ3RoIT1OVUxMIHRoZW4gKnBEZXN0TGVuZ3RoIGlzIGFsd2F5cyBzZXQgdG8gdGhlIAot
ICogICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIG91dHB1dCB1bml0cyBjb3JyZXNwb25k
aW5nIHRvIHRoZSB0cmFuc2Zvcm1hdGlvbiBvZiAKLSAqICAgICAgICAgICAgICAgICAgICAgIGFs
bCB0aGUgaW5wdXQgdW5pdHMsIGV2ZW4gaW4gY2FzZSBvZiBhIGJ1ZmZlciBvdmVyZmxvdy4KLSAq
IEBwYXJhbSBzcmMgICAgICAgICAgIFRoZSBvcmlnaW5hbCBzb3VyY2Ugc3RyaW5nCi0gKiBAcGFy
YW0gc3JjTGVuZ3RoICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0x
LCB0aGVuIHNyYyBtdXN0IGJlIHplcm8tdGVybWluYXRlZC4KLSAqIEBwYXJhbSBwRXJyb3JDb2Rl
ICAgIFBvaW50ZXIgdG8gYSBzdGFuZGFyZCBJQ1UgZXJyb3IgY29kZS4gSXRzIGlucHV0IHZhbHVl
IG11c3QKLSAqICAgICAgICAgICAgICAgICAgICAgIHBhc3MgdGhlIFVfU1VDQ0VTUygpIHRlc3Qs
IG9yIGVsc2UgdGhlIGZ1bmN0aW9uIHJldHVybnMKLSAqICAgICAgICAgICAgICAgICAgICAgIGlt
bWVkaWF0ZWx5LiBDaGVjayBmb3IgVV9GQUlMVVJFKCkgb24gb3V0cHV0IG9yIHVzZSB3aXRoCi0g
KiAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGFpbmluZy4gKFNlZSBVc2VyIEd1aWRl
IGZvciBkZXRhaWxzLikKLSAqIEByZXR1cm4gVGhlIHBvaW50ZXIgdG8gZGVzdGluYXRpb24gYnVm
ZmVyLgotICogQHN0YWJsZSBJQ1UgNC40Ci0gKiBAc2VlIHVfc3RyVG9VVEY4V2l0aFN1YgotICog
QHNlZSB1X3N0ckZyb21KYXZhTW9kaWZpZWRVVEY4V2l0aFN1YgotICovCi1VX1NUQUJMRSBjaGFy
KiBVX0VYUE9SVDIgCi11X3N0clRvSmF2YU1vZGlmaWVkVVRGOCgKLSAgICAgICAgY2hhciAqZGVz
dCwKLSAgICAgICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCi0gICAgICAgIGludDMyX3QgKnBEZXN0
TGVuZ3RoLAotICAgICAgICBjb25zdCBVQ2hhciAqc3JjLCAKLSAgICAgICAgaW50MzJfdCBzcmNM
ZW5ndGgsCi0gICAgICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwotCi0vKioKLSAqIENvbnZl
cnQgYSBKYXZhIE1vZGlmaWVkIFVURi04IHN0cmluZyB0byBhIDE2LWJpdCBVbmljb2RlIHN0cmlu
Zy4KLSAqIElmIHRoZSBpbnB1dCBzdHJpbmcgaXMgbm90IHdlbGwtZm9ybWVkIGFuZCBubyBzdWJz
dGl0dXRpb24gY2hhciBpcyBzcGVjaWZpZWQsIAotICogdGhlbiB0aGUgVV9JTlZBTElEX0NIQVJf
Rk9VTkQgZXJyb3IgY29kZSBpcyBzZXQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBiZWhhdmVzIGFj
Y29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgSmF2YSBEYXRhSW5wdXQucmVhZFVURigp
Ci0gKiBleGNlcHQgdGhhdCBpdCB0YWtlcyBhIGxlbmd0aCBwYXJhbWV0ZXIgcmF0aGVyIHRoYW4K
LSAqIGludGVycHJldGluZyB0aGUgZmlyc3QgdHdvIGlucHV0IGJ5dGVzIGFzIHRoZSBsZW5ndGgu
Ci0gKiBTZWUgaHR0cDovL2phdmEuc3VuLmNvbS9qYXZhc2UvNi9kb2NzL2FwaS9qYXZhL2lvL0Rh
dGFJbnB1dC5odG1sI3JlYWRVVEYoKQotICoKLSAqIFRoZSBvdXRwdXQgc3RyaW5nIG1heSBub3Qg
YmUgd2VsbC1mb3JtZWQgVVRGLTE2LgotICoKLSAqIEBwYXJhbSBkZXN0ICAgICAgICAgIEEgYnVm
ZmVyIGZvciB0aGUgcmVzdWx0IHN0cmluZy4gVGhlIHJlc3VsdCB3aWxsIGJlIHplcm8tdGVybWlu
YXRlZCBpZgotICogICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91
Z2guCi0gKiBAcGFyYW0gZGVzdENhcGFjaXR5ICBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChudW1i
ZXIgb2YgVUNoYXJzKS4gSWYgaXQgaXMgMCwgdGhlbgotICogICAgICAgICAgICAgICAgICAgICAg
ZGVzdCBtYXkgYmUgTlVMTCBhbmQgdGhlIGZ1bmN0aW9uIHdpbGwgb25seSByZXR1cm4gdGhlIGxl
bmd0aCBvZiB0aGUgCi0gKiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgd2l0aG91dCB3cml0
aW5nIGFueSBvZiB0aGUgcmVzdWx0IHN0cmluZyAocHJlLWZsaWdodGluZykuCi0gKiBAcGFyYW0g
cERlc3RMZW5ndGggICBBIHBvaW50ZXIgdG8gcmVjZWl2ZSB0aGUgbnVtYmVyIG9mIHVuaXRzIHdy
aXR0ZW4gdG8gdGhlIGRlc3RpbmF0aW9uLiBJZiAKLSAqICAgICAgICAgICAgICAgICAgICAgIHBE
ZXN0TGVuZ3RoIT1OVUxMIHRoZW4gKnBEZXN0TGVuZ3RoIGlzIGFsd2F5cyBzZXQgdG8gdGhlIAot
ICogICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIG91dHB1dCB1bml0cyBjb3JyZXNwb25k
aW5nIHRvIHRoZSB0cmFuc2Zvcm1hdGlvbiBvZiAKLSAqICAgICAgICAgICAgICAgICAgICAgIGFs
bCB0aGUgaW5wdXQgdW5pdHMsIGV2ZW4gaW4gY2FzZSBvZiBhIGJ1ZmZlciBvdmVyZmxvdy4KLSAq
IEBwYXJhbSBzcmMgICAgICAgICAgIFRoZSBvcmlnaW5hbCBzb3VyY2Ugc3RyaW5nCi0gKiBAcGFy
YW0gc3JjTGVuZ3RoICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0x
LCB0aGVuIHNyYyBtdXN0IGJlIHplcm8tdGVybWluYXRlZC4KLSAqIEBwYXJhbSBzdWJjaGFyICAg
ICAgIFRoZSBzdWJzdGl0dXRpb24gY2hhcmFjdGVyIHRvIHVzZSBpbiBwbGFjZSBvZiBhbiBpbGxl
Z2FsIGlucHV0IHNlcXVlbmNlLAotICogICAgICAgICAgICAgICAgICAgICAgb3IgVV9TRU5USU5F
TCBpZiB0aGUgZnVuY3Rpb24gaXMgdG8gcmV0dXJuIHdpdGggVV9JTlZBTElEX0NIQVJfRk9VTkQg
aW5zdGVhZC4KLSAqICAgICAgICAgICAgICAgICAgICAgIEEgc3Vic3RpdHV0aW9uIGNoYXJhY3Rl
ciBjYW4gYmUgYW55IHZhbGlkIFVuaWNvZGUgY29kZSBwb2ludCAodXAgdG8gVSsxMEZGRkYpCi0g
KiAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgZm9yIHN1cnJvZ2F0ZSBjb2RlIHBvaW50cyAo
VStEODAwLi5VK0RGRkYpLgotICogICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY29tbWVuZGVk
IHZhbHVlIGlzIFUrRkZGRCAiUkVQTEFDRU1FTlQgQ0hBUkFDVEVSIi4KLSAqIEBwYXJhbSBwTnVt
U3Vic3RpdHV0aW9ucyBPdXRwdXQgcGFyYW1ldGVyIHJlY2VpdmluZyB0aGUgbnVtYmVyIG9mIHN1
YnN0aXR1dGlvbnMgaWYgc3ViY2hhcj49MC4KLSAqICAgICAgICAgICAgICAgICAgICAgIFNldCB0
byAwIGlmIG5vIHN1YnN0aXR1dGlvbnMgb2NjdXIgb3Igc3ViY2hhcjwwLgotICogICAgICAgICAg
ICAgICAgICAgICAgcE51bVN1YnN0aXR1dGlvbnMgY2FuIGJlIE5VTEwuCi0gKiBAcGFyYW0gcEVy
cm9yQ29kZSAgICBQb2ludGVyIHRvIGEgc3RhbmRhcmQgSUNVIGVycm9yIGNvZGUuIEl0cyBpbnB1
dCB2YWx1ZSBtdXN0Ci0gKiAgICAgICAgICAgICAgICAgICAgICBwYXNzIHRoZSBVX1NVQ0NFU1Mo
KSB0ZXN0LCBvciBlbHNlIHRoZSBmdW5jdGlvbiByZXR1cm5zCi0gKiAgICAgICAgICAgICAgICAg
ICAgICBpbW1lZGlhdGVseS4gQ2hlY2sgZm9yIFVfRkFJTFVSRSgpIG9uIG91dHB1dCBvciB1c2Ug
d2l0aAotICogICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hhaW5pbmcuIChTZWUgVXNl
ciBHdWlkZSBmb3IgZGV0YWlscy4pCi0gKiBAcmV0dXJuIFRoZSBwb2ludGVyIHRvIGRlc3RpbmF0
aW9uIGJ1ZmZlci4KLSAqIEBzZWUgdV9zdHJGcm9tVVRGOFdpdGhTdWIKLSAqIEBzZWUgdV9zdHJG
cm9tVVRGOExlbmllbnQKLSAqIEBzZWUgdV9zdHJUb0phdmFNb2RpZmllZFVURjgKLSAqIEBzdGFi
bGUgSUNVIDQuNAotICovCi1VX1NUQUJMRSBVQ2hhciogVV9FWFBPUlQyCi11X3N0ckZyb21KYXZh
TW9kaWZpZWRVVEY4V2l0aFN1YigKLSAgICAgICAgVUNoYXIgKmRlc3QsCi0gICAgICAgIGludDMy
X3QgZGVzdENhcGFjaXR5LAotICAgICAgICBpbnQzMl90ICpwRGVzdExlbmd0aCwKLSAgICAgICAg
Y29uc3QgY2hhciAqc3JjLAotICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwKLSAgICAgICAgVUNo
YXIzMiBzdWJjaGFyLCBpbnQzMl90ICpwTnVtU3Vic3RpdHV0aW9ucywKLSAgICAgICAgVUVycm9y
Q29kZSAqcEVycm9yQ29kZSk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS91dGV4dC5oIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS91
dGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDMxOTEzZDM1YjMxZTg3NzE5
YzI2NDc5YWIyMjE1ZTY0ZmYzMzllLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNp
ZXMvaWN1L3VuaWNvZGUvdXRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2MDAgKzAsMCBAQAot
LyoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSogICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAx
MiwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcwotKiAgIENvcnBvcmF0aW9uIGFuZCBv
dGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotKgotKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgot
KiAgIGZpbGUgbmFtZTogIHV0ZXh0LmgKLSogICBlbmNvZGluZzogICBVUy1BU0NJSQotKiAgIHRh
YiBzaXplOiAgIDggKG5vdCB1c2VkKQotKiAgIGluZGVudGF0aW9uOjQKLSoKLSogICBjcmVhdGVk
IG9uOiAyMDA0b2N0MDYKLSogICBjcmVhdGVkIGJ5OiBNYXJrdXMgVy4gU2NoZXJlcgotKi8KLQot
I2lmbmRlZiBfX1VURVhUX0hfXwotI2RlZmluZSBfX1VURVhUX0hfXwotCi0vKioKLSAqIFxmaWxl
Ci0gKiBcYnJpZWYgQyBBUEk6IEFic3RyYWN0IFVuaWNvZGUgVGV4dCBBUEkKLSAqCi0gKiBUaGUg
VGV4dCBBY2Nlc3MgQVBJIHByb3ZpZGVzIGEgbWVhbnMgdG8gYWxsb3cgdGV4dCB0aGF0IGlzIHN0
b3JlZCBpbiBhbHRlcm5hdGl2ZQotICogZm9ybWF0cyB0byB3b3JrIHdpdGggSUNVIHNlcnZpY2Vz
LiAgSUNVIG5vcm1hbGx5IG9wZXJhdGVzIG9uIHRleHQgdGhhdCBpcwotICogc3RvcmVkIGluIFVU
Ri0xNiBmb3JtYXQsIGluIChVQ2hhciAqKSBhcnJheXMgZm9yIHRoZSBDIEFQSXMgb3IgYXMgdHlw
ZQotICogVW5pY29kZVN0cmluZyBmb3IgQysrIEFQSXMuCi0gKgotICogSUNVIFRleHQgQWNjZXNz
IGFsbG93cyBvdGhlciBmb3JtYXRzLCBzdWNoIGFzIFVURi04IG9yIG5vbi1jb250aWd1b3VzCi0g
KiBVVEYtMTYgc3RyaW5ncywgdG8gYmUgcGxhY2VkIGluIGEgVVRleHQgd3JhcHBlciBhbmQgdGhl
biBwYXNzZWQgdG8gSUNVIHNlcnZpY2VzLgotICoKLSAqIFRoZXJlIGFyZSB0aHJlZSBnZW5lcmFs
IGNsYXNzZXMgb2YgdXNhZ2UgZm9yIFVUZXh0OgotICoKLSAqICAgICBBcHBsaWNhdGlvbiBMZXZl
bCBVc2UuICBUaGlzIGlzIHRoZSBzaW1wbGVzdCB1c2FnZSAtIGFwcGxpY2F0aW9ucyB3b3VsZAot
ICogICAgIHVzZSBvbmUgb2YgdGhlIHV0ZXh0X29wZW4oKSBmdW5jdGlvbnMgb24gdGhlaXIgaW5w
dXQgdGV4dCwgYW5kIHBhc3MKLSAqICAgICB0aGUgcmVzdWx0aW5nIFVUZXh0IHRvIHRoZSBkZXNp
cmVkIElDVSBzZXJ2aWNlLgotICoKLSAqICAgICBTZWNvbmQgaXMgdXNhZ2UgaW4gSUNVIFNlcnZp
Y2VzLCBzdWNoIGFzIGJyZWFrIGl0ZXJhdGlvbiwgdGhhdCB3aWxsIG5lZWQgdG8KLSAqICAgICBv
cGVyYXRlIG9uIGlucHV0IHByZXNlbnRlZCB0byB0aGVtIGFzIGEgVVRleHQuICBUaGVzZSBpbXBs
ZW1lbnRhdGlvbnMKLSAqICAgICB3aWxsIG5lZWQgdG8gdXNlIHRoZSBpdGVyYXRpb24gYW5kIHJl
bGF0ZWQgVVRleHQgZnVuY3Rpb25zIHRvIGdhaW4KLSAqICAgICBhY2Nlc3MgdG8gdGhlIGFjdHVh
bCB0ZXh0LgotICoKLSAqICAgICBUaGUgdGhpcmQgY2xhc3Mgb2YgVVRleHQgdXNlcnMgYXJlICJ0
ZXh0IHByb3ZpZGVycy4iICBUaGVzZSBhcmUgdGhlCi0gKiAgICAgVVRleHQgaW1wbGVtZW50YXRp
b25zIGZvciB0aGUgdmFyaW91cyB0ZXh0IHN0b3JhZ2UgZm9ybWF0cy4gIEFuIGFwcGxpY2F0aW9u
Ci0gKiAgICAgb3Igc3lzdGVtIHdpdGggYSB1bmlxdWUgdGV4dCBzdG9yYWdlIGZvcm1hdCBjYW4g
aW1wbGVtZW50IGEgc2V0IG9mCi0gKiAgICAgVVRleHQgcHJvdmlkZXIgZnVuY3Rpb25zIGZvciB0
aGF0IGZvcm1hdCwgd2hpY2ggd2lsbCB0aGVuIGFsbG93Ci0gKiAgICAgSUNVIHNlcnZpY2VzIHRv
IG9wZXJhdGUgb24gdGhhdCBmb3JtYXQuCi0gKgotICoKLSAqIDxlbT5JdGVyYXRpbmcgb3ZlciB0
ZXh0PC9lbT4KLSAqCi0gKiBIZXJlIGlzIHNhbXBsZSBjb2RlIGZvciBhIGZvcndhcmQgaXRlcmF0
aW9uIG92ZXIgdGhlIGNvbnRlbnRzIG9mIGEgVVRleHQKLSAqCi0gKiBcY29kZQotICogICAgVUNo
YXIzMiAgYzsKLSAqICAgIFVUZXh0ICAgICp1dCA9IHdoYXRldmVyKCk7Ci0gKgotICogICAgZm9y
IChjPXV0ZXh0X25leHQzMkZyb20odXQsIDApOyBjPj0wOyBjPXV0ZXh0X25leHQzMih1dCkpIHsK
LSAqICAgICAgIC8vIGRvIHdoYXRldmVyIHdpdGggdGhlIGNvZGVwb2ludCBjIGhlcmUuCi0gKiAg
ICB9Ci0gKiBcZW5kY29kZQotICoKLSAqIEFuZCBoZXJlIGlzIHNpbWlsYXIgY29kZSB0byBpdGVy
YXRlIGluIHRoZSByZXZlcnNlIGRpcmVjdGlvbiwgZnJvbSB0aGUgZW5kCi0gKiBvZiB0aGUgdGV4
dCB0b3dhcmRzIHRoZSBiZWdpbm5pbmcuCi0gKgotICogXGNvZGUKLSAqICAgIFVDaGFyMzIgIGM7
Ci0gKiAgICBVVGV4dCAgICAqdXQgPSB3aGF0ZXZlcigpOwotICogICAgaW50ICAgICAgdGV4dExl
bmd0aCA9IHV0ZXh0X25hdGl2ZUxlbmd0aCh1dCk7Ci0gKiAgICBmb3IgKGM9dXRleHRfcHJldmlv
dXMzMkZyb20odXQsIHRleHRMZW5ndGgpOyBjPj0wOyBjPXV0ZXh0X3ByZXZpb3VzMzIodXQpKSB7
Ci0gKiAgICAgICAvLyBkbyB3aGF0ZXZlciB3aXRoIHRoZSBjb2RlcG9pbnQgYyBoZXJlLgotICog
ICAgfQotICogXGVuZGNvZGUKLSAqCi0gKiA8ZW0+Q2hhcmFjdGVycyBhbmQgSW5kZXhpbmc8L2Vt
PgotICoKLSAqIEluZGV4aW5nIGludG8gdGV4dCBieSBVVGV4dCBmdW5jdGlvbnMgaXMgbmVhcmx5
IGFsd2F5cyBpbiB0ZXJtcyBvZiB0aGUgbmF0aXZlCi0gKiBpbmRleGluZyBvZiB0aGUgdW5kZXJs
eWluZyB0ZXh0IHN0b3JhZ2UuICBUaGUgc3RvcmFnZSBmb3JtYXQgY291bGQgYmUgVVRGLTgKLSAq
IG9yIFVURi0zMiwgZm9yIGV4YW1wbGUuICBXaGVuIGNvZGluZyB0byB0aGUgVVRleHQgYWNjZXNz
IEFQSSwgbm8gYXNzdW1wdGlvbnMKLSAqIGNhbiBiZSBtYWRlIHJlZ2FyZGluZyB0aGUgc2l6ZSBv
ZiBjaGFyYWN0ZXJzLCBvciBob3cgZmFyIGFuIGluZGV4Ci0gKiBtYXkgbW92ZSB3aGVuIGl0ZXJh
dGluZyBiZXR3ZWVuIGNoYXJhY3RlcnMuCi0gKgotICogQWxsIGluZGljZXMgc3VwcGxpZWQgdG8g
VVRleHQgZnVuY3Rpb25zIGFyZSBwaW5uZWQgdG8gdGhlIGxlbmd0aCBvZiB0aGUKLSAqIHRleHQu
ICBBbiBvdXQtb2YtYm91bmRzIGluZGV4IGlzIG5vdCBjb25zaWRlcmVkIHRvIGJlIGFuIGVycm9y
LCBidXQgaXMKLSAqIGFkanVzdGVkIHRvIGJlIGluIHRoZSByYW5nZSAgMCA8PSBpbmRleCA8PSBs
ZW5ndGggb2YgaW5wdXQgdGV4dC4KLSAqCi0gKgotICogV2hlbiBhbiBpbmRleCBwb3NpdGlvbiBp
cyByZXR1cm5lZCBmcm9tIGEgVVRleHQgZnVuY3Rpb24sIGl0IHdpbGwgYmUKLSAqIGEgbmF0aXZl
IGluZGV4IHRvIHRoZSB1bmRlcmx5aW5nIHRleHQuICBJbiB0aGUgY2FzZSBvZiBtdWx0aS11bml0
IGNoYXJhY3RlcnMsCi0gKiBpdCB3aWxsICBhbHdheXMgcmVmZXIgdG8gdGhlIGZpcnN0IHBvc2l0
aW9uIG9mIHRoZSBjaGFyYWN0ZXIsCi0gKiBuZXZlciB0byB0aGUgaW50ZXJpb3IuICBUaGlzIGlz
IGVzc2VudGlhbGx5IHRoZSBzYW1lIHRoaW5nIGFzIHNheWluZyB0aGF0Ci0gKiBhIHJldHVybmVk
IGluZGV4IHdpbGwgYWx3YXlzIHBvaW50IHRvIGEgYm91bmRhcnkgYmV0d2VlbiBjaGFyYWN0ZXJz
LgotICoKLSAqIFdoZW4gYSBuYXRpdmUgaW5kZXggaXMgc3VwcGxpZWQgdG8gYSBVVGV4dCBmdW5j
dGlvbiwgYWxsIGluZGljZXMgdGhhdAotICogcmVmZXIgdG8gYW55IHBhcnQgb2YgYSBtdWx0aS11
bml0IGNoYXJhY3RlciByZXByZXNlbnRhdGlvbiBhcmUgY29uc2lkZXJlZAotICogdG8gYmUgZXF1
aXZhbGVudC4gIEluIHRoZSBjYXNlIG9mIG11bHRpLXVuaXQgY2hhcmFjdGVycywgYW4gaW5jb21p
bmcgaW5kZXgKLSAqIHdpbGwgYmUgbG9naWNhbGx5IG5vcm1hbGl6ZWQgdG8gcmVmZXIgdG8gdGhl
IHN0YXJ0IG9mIHRoZSBjaGFyYWN0ZXIuCi0gKiAKLSAqIEl0IGlzIHBvc3NpYmxlIHRvIHRlc3Qg
d2hldGhlciBhIG5hdGl2ZSBpbmRleCBpcyBvbiBhIGNvZGUgcG9pbnQgYm91bmRhcnkKLSAqIGJ5
IGRvaW5nIGEgdXRleHRfc2V0TmF0aXZlSW5kZXgoKSBmb2xsb3dlZCBieSBhIHV0ZXh0X2dldE5h
dGl2ZUluZGV4KCkuCi0gKiBJZiB0aGUgaW5kZXggaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLCBpdCB3
YXMgb24gYSBjb2RlIHBvaW50IGJvdW5kYXJ5LiAgSWYKLSAqIGFuIGFkanVzdGVkIGluZGV4IGlz
IHJldHVybmVkLCB0aGUgb3JpZ2luYWwgaW5kZXggcmVmZXJyZWQgdG8gdGhlCi0gKiBpbnRlcmlv
ciBvZiBhIGNoYXJhY3Rlci4KLSAqCi0gKiA8ZW0+Q29udmVudGlvbnMgZm9yIGNhbGxpbmcgVVRl
eHQgZnVuY3Rpb25zPC9lbT4KLSAqCi0gKiBNb3N0IFVUZXh0IGFjY2VzcyBmdW5jdGlvbnMgaGF2
ZSBhcyB0aGVpciBmaXJzdCBwYXJhbWV0ZXIgYSAoVVRleHQgKikgcG9pbnRlciwKLSAqIHdoaWNo
IHNwZWNpZmllcyB0aGUgVVRleHQgdG8gYmUgdXNlZC4gIFVubGVzcyBvdGhlcndpc2Ugbm90ZWQs
IHRoZQotICogcG9pbnRlciBtdXN0IHJlZmVyIHRvIGEgdmFsaWQsIG9wZW4gVVRleHQuICBBdHRl
bXB0aW5nIHRvCi0gKiB1c2UgYSBjbG9zZWQgVVRleHQgb3IgcGFzc2luZyBhIE5VTEwgcG9pbnRl
ciBpcyBhIHByb2dyYW1taW5nIGVycm9yIGFuZAotICogd2lsbCBwcm9kdWNlIHVuZGVmaW5lZCBy
ZXN1bHRzIG9yIE5VTEwgcG9pbnRlciBleGNlcHRpb25zLgotICogCi0gKiBUaGUgVVRleHRfT3Bl
biBmYW1pbHkgb2YgZnVuY3Rpb25zIGNhbiBlaXRoZXIgb3BlbiBhbiBleGlzdGluZyAoY2xvc2Vk
KQotICogVVRleHQsIG9yIGhlYXAgYWxsb2NhdGUgYSBuZXcgVVRleHQuICBIZXJlIGlzIHNhbXBs
ZSBjb2RlIGZvciBjcmVhdGluZwotICogYSBzdGFjay1hbGxvY2F0ZWQgVVRleHQuCi0gKgotICog
XGNvZGUKLSAqICAgIGNoYXIgICAgICpzID0gd2hhdGV2ZXIoKTsgIC8vIEEgdXRmLTggc3RyaW5n
IAotICogICAgVV9FcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICogICAgVVRleHQg
ICAgdXQgPSBVVEVYVF9JTklUSUFMSVpFUjsKLSAqICAgIHV0ZXh0X29wZW5VVEY4KHV0LCBzLCAt
MSwgJnN0YXR1cyk7Ci0gKiAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpIHsKLSAqICAgICAgICAv
LyBlcnJvciBoYW5kbGluZwotICogICAgfSBlbHNlIHsKLSAqICAgICAgICAvLyB3b3JrIHdpdGgg
dGhlIFVUZXh0Ci0gKiAgICB9Ci0gKiBcZW5kY29kZQotICoKLSAqIEFueSBleGlzdGluZyBVVGV4
dCBwYXNzZWQgdG8gYW4gb3BlbiBmdW5jdGlvbiBfbXVzdF8gaGF2ZSBiZWVuIGluaXRpYWxpemVk
LCAKLSAqIGVpdGhlciBieSB0aGUgVVRFWFRfSU5JVElBTElaRVIsIG9yIGJ5IGhhdmluZyBiZWVu
IG9yaWdpbmFsbHkgaGVhcC1hbGxvY2F0ZWQKLSAqIGJ5IGFuIG9wZW4gZnVuY3Rpb24uICBQYXNz
aW5nIE5VTEwgd2lsbCBjYXVzZSB0aGUgb3BlbiBmdW5jdGlvbiB0bwotICogaGVhcC1hbGxvY2F0
ZSBhbmQgZnVsbHkgaW5pdGlhbGl6ZSBhIG5ldyBVVGV4dC4KLSAqCi0gKi8KLQotCi0KLSNpbmNs
dWRlICJ1bmljb2RlL3V0eXBlcy5oIgotI2luY2x1ZGUgInVuaWNvZGUvdWNoYXIuaCIKLSNpZiBV
X1NIT1dfQ1BMVVNQTFVTX0FQSQotI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2ludGVyLmgiCi0j
aW5jbHVkZSAidW5pY29kZS9yZXAuaCIKLSNpbmNsdWRlICJ1bmljb2RlL3VuaXN0ci5oIgotI2lu
Y2x1ZGUgInVuaWNvZGUvY2hhcml0ZXIuaCIKLSNlbmRpZgotCi0KLVVfQ0RFQ0xfQkVHSU4KLQot
c3RydWN0IFVUZXh0OwotdHlwZWRlZiBzdHJ1Y3QgVVRleHQgVVRleHQ7IC8qKjwgQyB0eXBlZGVm
IGZvciBzdHJ1Y3QgVVRleHQuIEBzdGFibGUgSUNVIDMuNiAqLwotCi0KLS8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKLSAqCi0gKiAgIEMgRnVuY3Rpb25zIGZvciBjcmVhdGluZyBVVGV4
dCB3cmFwcGVycyBhcm91bmQgdmFyaW91cyBraW5kcyBvZiB0ZXh0IHN0cmluZ3MuCi0gKgotICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotLyoqCi0gICogQ2xvc2UgZnVuY3Rp
b24gZm9yIFVUZXh0IGluc3RhbmNlcy4KLSAgKiBDbGVhbnMgdXAsIHJlbGVhc2VzIGFueSByZXNv
dXJjZXMgYmVpbmcgaGVsZCBieSBhbiBvcGVuIFVUZXh0LgotICAqIDxwPgotICAqICAgSWYgdGhl
IFVUZXh0IHdhcyBvcmlnaW5hbGx5IGFsbG9jYXRlZCBieSBvbmUgb2YgdGhlIHV0ZXh0X29wZW4g
ZnVuY3Rpb25zLAotICAqICAgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSB1dGV4dCB3
aWxsIGFsc28gYmUgZnJlZWQuCi0gICogICBJZiB0aGUgVVRleHQgc3RvcmFnZSBvcmlnaW5hdGVk
IHdpdGggdGhlIGFwcGxpY2F0aW9uLCBhcyBpdCB3b3VsZCB3aXRoCi0gICogICBhIGxvY2FsIG9y
IHN0YXRpYyBpbnN0YW5jZSwgdGhlIHN0b3JhZ2Ugd2lsbCBub3QgYmUgZGVsZXRlZC4KLSAgKgot
ICAqICAgQW4gb3BlbiBVVGV4dCBjYW4gYmUgcmVzZXQgdG8gcmVmZXIgdG8gbmV3IHN0cmluZyBi
eSB1c2luZyBvbmUgb2YgdGhlIHV0ZXh0X29wZW4oKQotICAqICAgZnVuY3Rpb25zIHdpdGhvdXQg
Zmlyc3QgY2xvc2luZyB0aGUgVVRleHQuICAKLSAgKgotICAqIEBwYXJhbSB1dCAgVGhlIFVUZXh0
IHRvIGJlIGNsb3NlZC4KLSAgKiBAcmV0dXJuICAgIE5VTEwgaWYgdGhlIFVUZXh0IHN0cnVjdCB3
YXMgZGVsZXRlZCBieSB0aGUgY2xvc2UuICBJZiB0aGUgVVRleHQgc3RydWN0Ci0gICogICAgICAg
ICAgICB3YXMgb3JpZ2luYWxseSBwcm92aWRlZCBieSB0aGUgY2FsbGVyIHRvIHRoZSBvcGVuIGZ1
bmN0aW9uLCBpdCBpcwotICAqICAgICAgICAgICAgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiwg
YW5kIG1heSBiZSBzYWZlbHkgdXNlZCBhZ2FpbiBpbgotICAqICAgICAgICAgICAgYSBzdWJzZXF1
ZW50IHV0ZXh0X29wZW4uCi0gICoKLSAgKiBAc3RhYmxlIElDVSAzLjQKLSAgKi8KLVVfU1RBQkxF
IFVUZXh0ICogVV9FWFBPUlQyCi11dGV4dF9jbG9zZShVVGV4dCAqdXQpOwotCi0jaWYgVV9TSE9X
X0NQTFVTUExVU19BUEkKLQotVV9OQU1FU1BBQ0VfQkVHSU4KLQotLyoqCi0gKiBcY2xhc3MgTG9j
YWxVVGV4dFBvaW50ZXIKLSAqICJTbWFydCBwb2ludGVyIiBjbGFzcywgY2xvc2VzIGEgVVRleHQg
dmlhIHV0ZXh0X2Nsb3NlKCkuCi0gKiBGb3IgbW9zdCBtZXRob2RzIHNlZSB0aGUgTG9jYWxQb2lu
dGVyQmFzZSBiYXNlIGNsYXNzLgotICoKLSAqIEBzZWUgTG9jYWxQb2ludGVyQmFzZQotICogQHNl
ZSBMb2NhbFBvaW50ZXIKLSAqIEBzdGFibGUgSUNVIDQuNAotICovCi1VX0RFRklORV9MT0NBTF9P
UEVOX1BPSU5URVIoTG9jYWxVVGV4dFBvaW50ZXIsIFVUZXh0LCB1dGV4dF9jbG9zZSk7Ci0KLVVf
TkFNRVNQQUNFX0VORAotCi0jZW5kaWYKLQotLyoqCi0gKiBPcGVuIGEgcmVhZC1vbmx5IFVUZXh0
IGltcGxlbWVudGF0aW9uIGZvciBVVEYtOCBzdHJpbmdzLgotICogCi0gKiBcaHRtbG9ubHkKLSAq
IEFueSBpbnZhbGlkIFVURi04IGluIHRoZSBpbnB1dCB3aWxsIGJlIGhhbmRsZWQgaW4gdGhpcyB3
YXk6Ci0gKiBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgaGFzIHRoZSBmb3JtIG9mIGEgdHJ1bmNh
dGVkLCBidXQgb3RoZXJ3aXNlIHZhbGlkLAotICogVVRGLTggc2VxdWVuY2Ugd2lsbCBiZSByZXBs
YWNlZCBieSBhIHNpbmdsZSB1bmljb2RlIHJlcGxhY2VtZW50IGNoYXJhY3RlciwgXHVGRkZELiAK
LSAqIEFueSBvdGhlciBpbGxlZ2FsIGJ5dGVzIHdpbGwgZWFjaCBiZSByZXBsYWNlZCBieSBhIFx1
RkZGRC4KLSAqIFxlbmRodG1sb25seQotICogCi0gKiBAcGFyYW0gdXQgICAgIFBvaW50ZXIgdG8g
YSBVVGV4dCBzdHJ1Y3QuICBJZiBOVUxMLCBhIG5ldyBVVGV4dCB3aWxsIGJlIGNyZWF0ZWQuCi0g
KiAgICAgICAgICAgICAgIElmIG5vbi1OVUxMLCBtdXN0IHJlZmVyIHRvIGFuIGluaXRpYWxpemVk
IFVUZXh0IHN0cnVjdCwgd2hpY2ggd2lsbCB0aGVuCi0gKiAgICAgICAgICAgICAgIGJlIHJlc2V0
IHRvIHJlZmVyZW5jZSB0aGUgc3BlY2lmaWVkIFVURi04IHN0cmluZy4KLSAqIEBwYXJhbSBzICAg
ICAgQSBVVEYtOCBzdHJpbmcuICBNdXN0IG5vdCBiZSBOVUxMLgotICogQHBhcmFtIGxlbmd0aCBU
aGUgbGVuZ3RoIG9mIHRoZSBVVEYtOCBzdHJpbmcgaW4gYnl0ZXMsIG9yIC0xIGlmIHRoZSBzdHJp
bmcgaXMKLSAqICAgICAgICAgICAgICAgemVybyB0ZXJtaW5hdGVkLgotICogQHBhcmFtIHN0YXR1
cyBFcnJvcnMgYXJlIHJldHVybmVkIGhlcmUuCi0gKiBAcmV0dXJuICAgICAgIEEgcG9pbnRlciB0
byB0aGUgVVRleHQuICBJZiBhIHByZS1hbGxvY2F0ZWQgVVRleHQgd2FzIHByb3ZpZGVkLCBpdAot
ICogICAgICAgICAgICAgICB3aWxsIGFsd2F5cyBiZSB1c2VkIGFuZCByZXR1cm5lZC4KLSAqIEBz
dGFibGUgSUNVIDMuNAotICovCi1VX1NUQUJMRSBVVGV4dCAqIFVfRVhQT1JUMgotdXRleHRfb3Bl
blVURjgoVVRleHQgKnV0LCBjb25zdCBjaGFyICpzLCBpbnQ2NF90IGxlbmd0aCwgVUVycm9yQ29k
ZSAqc3RhdHVzKTsKLQotCi0vKioKLSAqIE9wZW4gYSByZWFkLW9ubHkgVVRleHQgZm9yIFVDaGFy
ICogc3RyaW5nLgotICogCi0gKiBAcGFyYW0gdXQgICAgIFBvaW50ZXIgdG8gYSBVVGV4dCBzdHJ1
Y3QuICBJZiBOVUxMLCBhIG5ldyBVVGV4dCB3aWxsIGJlIGNyZWF0ZWQuCi0gKiAgICAgICAgICAg
ICAgIElmIG5vbi1OVUxMLCBtdXN0IHJlZmVyIHRvIGFuIGluaXRpYWxpemVkIFVUZXh0IHN0cnVj
dCwgd2hpY2ggd2lsbCB0aGVuCi0gKiAgICAgICAgICAgICAgIGJlIHJlc2V0IHRvIHJlZmVyZW5j
ZSB0aGUgc3BlY2lmaWVkIFVDaGFyIHN0cmluZy4KLSAqIEBwYXJhbSBzICAgICAgQSBVQ2hhciAo
VVRGLTE2KSBzdHJpbmcKLSAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiBVQ2hhcnMgaW4g
dGhlIGlucHV0IHN0cmluZywgb3IgLTEgaWYgdGhlIHN0cmluZyBpcwotICogICAgICAgICAgICAg
ICB6ZXJvIHRlcm1pbmF0ZWQuCi0gKiBAcGFyYW0gc3RhdHVzIEVycm9ycyBhcmUgcmV0dXJuZWQg
aGVyZS4KLSAqIEByZXR1cm4gICAgICAgQSBwb2ludGVyIHRvIHRoZSBVVGV4dC4gIElmIGEgcHJl
LWFsbG9jYXRlZCBVVGV4dCB3YXMgcHJvdmlkZWQsIGl0Ci0gKiAgICAgICAgICAgICAgIHdpbGwg
YWx3YXlzIGJlIHVzZWQgYW5kIHJldHVybmVkLgotICogQHN0YWJsZSBJQ1UgMy40Ci0gKi8KLVVf
U1RBQkxFIFVUZXh0ICogVV9FWFBPUlQyCi11dGV4dF9vcGVuVUNoYXJzKFVUZXh0ICp1dCwgY29u
c3QgVUNoYXIgKnMsIGludDY0X3QgbGVuZ3RoLCBVRXJyb3JDb2RlICpzdGF0dXMpOwotCi0KLSNp
ZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQotLyoqCi0gKiBPcGVuIGEgd3JpdGFibGUgVVRleHQgZm9y
IGEgbm9uLWNvbnN0IFVuaWNvZGVTdHJpbmcuIAotICogCi0gKiBAcGFyYW0gdXQgICAgICBQb2lu
dGVyIHRvIGEgVVRleHQgc3RydWN0LiAgSWYgTlVMTCwgYSBuZXcgVVRleHQgd2lsbCBiZSBjcmVh
dGVkLgotICogICAgICAgICAgICAgICAgIElmIG5vbi1OVUxMLCBtdXN0IHJlZmVyIHRvIGFuIGlu
aXRpYWxpemVkIFVUZXh0IHN0cnVjdCwgd2hpY2ggd2lsbCB0aGVuCi0gKiAgICAgICAgICAgICAg
ICAgYmUgcmVzZXQgdG8gcmVmZXJlbmNlIHRoZSBzcGVjaWZpZWQgaW5wdXQgc3RyaW5nLgotICog
QHBhcmFtIHMgICAgICAgQSBVbmljb2RlU3RyaW5nLgotICogQHBhcmFtIHN0YXR1cyBFcnJvcnMg
YXJlIHJldHVybmVkIGhlcmUuCi0gKiBAcmV0dXJuICAgICAgICBQb2ludGVyIHRvIHRoZSBVVGV4
dC4gIElmIGEgVVRleHQgd2FzIHN1cHBsaWVkIGFzIGlucHV0LCB0aGlzCi0gKiAgICAgICAgICAg
ICAgICAgd2lsbCBhbHdheXMgYmUgdXNlZCBhbmQgcmV0dXJuZWQuCi0gKiBAc3RhYmxlIElDVSAz
LjQKLSAqLwotVV9TVEFCTEUgVVRleHQgKiBVX0VYUE9SVDIKLXV0ZXh0X29wZW5Vbmljb2RlU3Ry
aW5nKFVUZXh0ICp1dCwgaWN1OjpVbmljb2RlU3RyaW5nICpzLCBVRXJyb3JDb2RlICpzdGF0dXMp
OwotCi0KLS8qKgotICogT3BlbiBhIFVUZXh0IGZvciBhIGNvbnN0IFVuaWNvZGVTdHJpbmcuICAg
VGhlIHJlc3VsdGluZyBVVGV4dCB3aWxsIG5vdCBiZSB3cml0YWJsZS4KLSAqIAotICogQHBhcmFt
IHV0ICAgIFBvaW50ZXIgdG8gYSBVVGV4dCBzdHJ1Y3QuICBJZiBOVUxMLCBhIG5ldyBVVGV4dCB3
aWxsIGJlIGNyZWF0ZWQuCi0gKiAgICAgICAgICAgICAgIElmIG5vbi1OVUxMLCBtdXN0IHJlZmVy
IHRvIGFuIGluaXRpYWxpemVkIFVUZXh0IHN0cnVjdCwgd2hpY2ggd2lsbCB0aGVuCi0gKiAgICAg
ICAgICAgICAgIGJlIHJlc2V0IHRvIHJlZmVyZW5jZSB0aGUgc3BlY2lmaWVkIGlucHV0IHN0cmlu
Zy4KLSAqIEBwYXJhbSBzICAgICAgQSBjb25zdCBVbmljb2RlU3RyaW5nIHRvIGJlIHdyYXBwZWQu
Ci0gKiBAcGFyYW0gc3RhdHVzIEVycm9ycyBhcmUgcmV0dXJuZWQgaGVyZS4KLSAqIEByZXR1cm4g
ICAgICAgUG9pbnRlciB0byB0aGUgVVRleHQuICBJZiBhIFVUZXh0IHdhcyBzdXBwbGllZCBhcyBp
bnB1dCwgdGhpcwotICogICAgICAgICAgICAgICB3aWxsIGFsd2F5cyBiZSB1c2VkIGFuZCByZXR1
cm5lZC4KLSAqIEBzdGFibGUgSUNVIDMuNAotICovCi1VX1NUQUJMRSBVVGV4dCAqIFVfRVhQT1JU
MgotdXRleHRfb3BlbkNvbnN0VW5pY29kZVN0cmluZyhVVGV4dCAqdXQsIGNvbnN0IGljdTo6VW5p
Y29kZVN0cmluZyAqcywgVUVycm9yQ29kZSAqc3RhdHVzKTsKLQotCi0vKioKLSAqIE9wZW4gYSB3
cml0YWJsZSBVVGV4dCBpbXBsZW1lbnRhdGlvbiBmb3IgYW4gSUNVIFJlcGxhY2VhYmxlIG9iamVj
dC4KLSAqIEBwYXJhbSB1dCAgICBQb2ludGVyIHRvIGEgVVRleHQgc3RydWN0LiAgSWYgTlVMTCwg
YSBuZXcgVVRleHQgd2lsbCBiZSBjcmVhdGVkLgotICogICAgICAgICAgICAgICBJZiBub24tTlVM
TCwgbXVzdCByZWZlciB0byBhbiBhbHJlYWR5IGV4aXN0aW5nIFVUZXh0LCB3aGljaCB3aWxsIHRo
ZW4KLSAqICAgICAgICAgICAgICAgYmUgcmVzZXQgdG8gcmVmZXJlbmNlIHRoZSBzcGVjaWZpZWQg
cmVwbGFjZWFibGUgdGV4dC4KLSAqIEBwYXJhbSByZXAgICAgQSBSZXBsYWNlYWJsZSB0ZXh0IG9i
amVjdC4KLSAqIEBwYXJhbSBzdGF0dXMgRXJyb3JzIGFyZSByZXR1cm5lZCBoZXJlLgotICogQHJl
dHVybiAgICAgICBQb2ludGVyIHRvIHRoZSBVVGV4dC4gIElmIGEgVVRleHQgd2FzIHN1cHBsaWVk
IGFzIGlucHV0LCB0aGlzCi0gKiAgICAgICAgICAgICAgIHdpbGwgYWx3YXlzIGJlIHVzZWQgYW5k
IHJldHVybmVkLgotICogQHNlZSBSZXBsYWNlYWJsZQotICogQHN0YWJsZSBJQ1UgMy40Ci0gKi8K
LVVfU1RBQkxFIFVUZXh0ICogVV9FWFBPUlQyCi11dGV4dF9vcGVuUmVwbGFjZWFibGUoVVRleHQg
KnV0LCBpY3U6OlJlcGxhY2VhYmxlICpyZXAsIFVFcnJvckNvZGUgKnN0YXR1cyk7Ci0KLS8qKgot
ICogT3BlbiBhICBVVGV4dCBpbXBsZW1lbnRhdGlvbiBvdmVyIGFuIElDVSBDaGFyYWN0ZXJJdGVy
YXRvci4KLSAqIEBwYXJhbSB1dCAgICBQb2ludGVyIHRvIGEgVVRleHQgc3RydWN0LiAgSWYgTlVM
TCwgYSBuZXcgVVRleHQgd2lsbCBiZSBjcmVhdGVkLgotICogICAgICAgICAgICAgICBJZiBub24t
TlVMTCwgbXVzdCByZWZlciB0byBhbiBhbHJlYWR5IGV4aXN0aW5nIFVUZXh0LCB3aGljaCB3aWxs
IHRoZW4KLSAqICAgICAgICAgICAgICAgYmUgcmVzZXQgdG8gcmVmZXJlbmNlIHRoZSBzcGVjaWZp
ZWQgcmVwbGFjZWFibGUgdGV4dC4KLSAqIEBwYXJhbSBjaSAgICAgQSBDaGFyYWN0ZXIgSXRlcmF0
b3IuCi0gKiBAcGFyYW0gc3RhdHVzIEVycm9ycyBhcmUgcmV0dXJuZWQgaGVyZS4KLSAqIEByZXR1
cm4gICAgICAgUG9pbnRlciB0byB0aGUgVVRleHQuICBJZiBhIFVUZXh0IHdhcyBzdXBwbGllZCBh
cyBpbnB1dCwgdGhpcwotICogICAgICAgICAgICAgICB3aWxsIGFsd2F5cyBiZSB1c2VkIGFuZCBy
ZXR1cm5lZC4KLSAqIEBzZWUgUmVwbGFjZWFibGUKLSAqIEBzdGFibGUgSUNVIDMuNAotICovCi1V
X1NUQUJMRSBVVGV4dCAqIFVfRVhQT1JUMgotdXRleHRfb3BlbkNoYXJhY3Rlckl0ZXJhdG9yKFVU
ZXh0ICp1dCwgaWN1OjpDaGFyYWN0ZXJJdGVyYXRvciAqY2ksIFVFcnJvckNvZGUgKnN0YXR1cyk7
Ci0KLSNlbmRpZgotCi0KLS8qKgotICAqICBDbG9uZSBhIFVUZXh0LiAgVGhpcyBpcyBtdWNoIGxp
a2Ugb3BlbmluZyBhIFVUZXh0IHdoZXJlIHRoZSBzb3VyY2UgdGV4dCBpcyBpdHNlbGYKLSAgKiAg
YW5vdGhlciBVVGV4dC4KLSAgKgotICAqICBBIGRlZXAgY2xvbmUgd2lsbCBjb3B5IGJvdGggdGhl
IFVUZXh0IGRhdGEgc3RydWN0dXJlcyBhbmQgdGhlIHVuZGVybHlpbmcgdGV4dC4KLSAgKiAgVGhl
IG9yaWdpbmFsIGFuZCBjbG9uZWQgVVRleHQgd2lsbCBvcGVyYXRlIGNvbXBsZXRlbHkgaW5kZXBl
bmRlbnRseTsgbW9kaWZpY2F0aW9ucwotICAqICBtYWRlIHRvIHRoZSB0ZXh0IGluIG9uZSB3aWxs
IG5vdCBhZmZlY3QgdGhlIG90aGVyLiAgVGV4dCBwcm92aWRlcnMgYXJlIG5vdAotICAqICByZXF1
aXJlZCB0byBzdXBwb3J0IGRlZXAgY2xvbmVzLiAgVGhlIHVzZXIgb2YgY2xvbmUoKSBtdXN0IGNo
ZWNrIHRoZSBzdGF0dXMgcmV0dXJuCi0gICogIGFuZCBiZSBwcmVwYXJlZCB0byBoYW5kbGUgZmFp
bHVyZXMuCi0gICoKLSAgKiAgVGhlIHN0YW5kYXJkIFVUZXh0IGltcGxlbWVudGF0aW9ucyBmb3Ig
VVRGOCwgVUNoYXIgKiwgVW5pY29kZVN0cmluZyBhbmQKLSAgKiAgUmVwbGFjZWFibGUgYWxsIHN1
cHBvcnQgZGVlcCBjbG9uaW5nLgotICAqCi0gICogIFRoZSBVVGV4dCByZXR1cm5lZCBmcm9tIGEg
ZGVlcCBjbG9uZSB3aWxsIGJlIHdyaXRhYmxlLCBhc3N1bWluZyB0aGF0IHRoZSB0ZXh0Ci0gICog
IHByb3ZpZGVyIGlzIGFibGUgdG8gc3VwcG9ydCB3cml0aW5nLCBldmVuIGlmIHRoZSBzb3VyY2Ug
VVRleHQgaGFkIGJlZW4gbWFkZQotICAqICBub24td3JpdGFibGUgYnkgbWVhbnMgb2YgVVRleHRf
ZnJlZXplKCkuCi0gICoKLSAgKiAgQSBzaGFsbG93IGNsb25lIHJlcGxpY2F0ZXMgb25seSB0aGUg
VVRleHQgZGF0YSBzdHJ1Y3R1cmVzOyBpdCBkb2VzIG5vdCBtYWtlCi0gICogIGEgY29weSBvZiB0
aGUgdW5kZXJseWluZyB0ZXh0LiAgU2hhbGxvdyBjbG9uZXMgY2FuIGJlIHVzZWQgYXMgYW4gZWZm
aWNpZW50IHdheSB0byAKLSAgKiAgaGF2ZSBtdWx0aXBsZSBpdGVyYXRvcnMgYWN0aXZlIGluIGEg
c2luZ2xlIHRleHQgc3RyaW5nIHRoYXQgaXMgbm90IGJlaW5nCi0gICogIG1vZGlmaWVkLgotICAq
Ci0gICogIEEgc2hhbGxvdyBjbG9uZSBvcGVyYXRpb24gd2lsbCBub3QgZmFpbCwgYmFycmluZyB0
cnVseSBleGNlcHRpb25hbCBjb25kaXRpb25zIHN1Y2gKLSAgKiAgYXMgbWVtb3J5IGFsbG9jYXRp
b24gZmFpbHVyZXMuCi0gICoKLSAgKiAgU2hhbGxvdyBVVGV4dCBjbG9uZXMgc2hvdWxkIGJlIGF2
b2lkZWQgaWYgdGhlIFVUZXh0IGZ1bmN0aW9ucyB0aGF0IG1vZGlmeSB0aGUKLSAgKiAgdGV4dCBh
cmUgZXhwZWN0ZWQgdG8gYmUgdXNlZCwgZWl0aGVyIG9uIHRoZSBvcmlnaW5hbCBvciB0aGUgY2xv
bmVkIFVUZXh0LgotICAqICBBbnkgc3VjaCBtb2RpZmljYXRpb25zICBjYW4gY2F1c2UgdW5wcmVk
aWN0YWJsZSBiZWhhdmlvci4gIFJlYWQgT25seQotICAqICBzaGFsbG93IGNsb25lcyBwcm92aWRl
IHNvbWUgcHJvdGVjdGlvbiBhZ2FpbnN0IGVycm9ycyBvZiB0aGlzIHR5cGUgYnkKLSAgKiAgZGlz
YWJsaW5nIHRleHQgbW9kaWZpY2F0aW9uIHZpYSB0aGUgY2xvbmVkIFVUZXh0LgotICAqCi0gICog
IEEgc2hhbGxvdyBjbG9uZSBtYWRlIHdpdGggdGhlIHJlYWRPbmx5IHBhcmFtZXRlciA9PSBGQUxT
RSB3aWxsIHByZXNlcnZlIHRoZSAKLSAgKiAgdXRleHRfaXNXcml0YWJsZSgpIHN0YXRlIG9mIHRo
ZSBzb3VyY2Ugb2JqZWN0LiAgTm90ZSwgaG93ZXZlciwgdGhhdAotICAqICB3cml0ZSBvcGVyYXRp
b25zIG11c3QgYmUgYXZvaWRlZCB3aGlsZSBtb3JlIHRoYW4gb25lIFVUZXh0IGV4aXN0cyB0aGF0
IHJlZmVyCi0gICogIHRvIHRoZSBzYW1lIHVuZGVybHlpbmcgdGV4dC4KLSAgKgotICAqICBBIFVU
ZXh0IGFuZCBpdHMgY2xvbmUgbWF5IGJlIHNhZmVseSBjb25jdXJyZW50bHkgYWNjZXNzZWQgYnkg
c2VwYXJhdGUgdGhyZWFkcy4KLSAgKiAgVGhpcyBpcyB0cnVlIGZvciByZWFkIGFjY2VzcyBvbmx5
IHdpdGggc2hhbGxvdyBjbG9uZXMsIGFuZCBmb3IgYm90aCByZWFkIGFuZAotICAqICB3cml0ZSBh
Y2Nlc3Mgd2l0aCBkZWVwIGNsb25lcy4KLSAgKiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9m
IHRoZSBUZXh0IFByb3ZpZGVyIHRvIGVuc3VyZSB0aGF0IHRoaXMgdGhyZWFkIHNhZmV0eQotICAq
ICBjb25zdHJhaW50IGlzIG1ldC4KLSAgKgotICAqICBAcGFyYW0gZGVzdCAgIEEgVVRleHQgc3Ry
dWN0IHRvIGJlIGZpbGxlZCBpbiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGNsb25lIG9wZXJhdGlv
biwKLSAgKiAgICAgICAgICAgICAgICBvciBOVUxMIGlmIHRoZSBjbG9uZSBmdW5jdGlvbiBzaG91
bGQgaGVhcC1hbGxvY2F0ZSBhIG5ldyBVVGV4dCBzdHJ1Y3QuCi0gICogICAgICAgICAgICAgICAg
SWYgbm9uLU5VTEwsIG11c3QgcmVmZXIgdG8gYW4gYWxyZWFkeSBleGlzdGluZyBVVGV4dCwgd2hp
Y2ggd2lsbCB0aGVuCi0gICogICAgICAgICAgICAgICAgYmUgcmVzZXQgdG8gYmVjb21lIHRoZSBj
bG9uZS4KLSAgKiAgQHBhcmFtIHNyYyAgICBUaGUgVVRleHQgdG8gYmUgY2xvbmVkLgotICAqICBA
cGFyYW0gZGVlcCAgIFRSVUUgdG8gcmVxdWVzdCBhIGRlZXAgY2xvbmUsIEZBTFNFIGZvciBhIHNo
YWxsb3cgY2xvbmUuCi0gICogIEBwYXJhbSByZWFkT25seSBUUlVFIHRvIHJlcXVlc3QgdGhhdCB0
aGUgY2xvbmVkIFVUZXh0IGhhdmUgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgCi0gICogICAgICAg
ICAgICAgICAgdW5kZXJseWluZyB0ZXh0LiAgCi0KLSAgKiAgQHBhcmFtIHN0YXR1cyBFcnJvcnMg
YXJlIHJldHVybmVkIGhlcmUuICBGb3IgZGVlcCBjbG9uZXMsIFVfVU5TVVBQT1JURURfRVJST1IK
LSAgKiAgICAgICAgICAgICAgICB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSB0ZXh0IHByb3ZpZGVy
IGlzIHVuYWJsZSB0byBjbG9uZSB0aGUKLSAgKiAgICAgICAgICAgICAgICBvcmlnaW5hbCB0ZXh0
LgotICAqICBAcmV0dXJuICAgICAgIFRoZSBuZXdseSBjcmVhdGVkIGNsb25lLCBvciBOVUxMIGlm
IHRoZSBjbG9uZSBvcGVyYXRpb24gZmFpbGVkLgotICAqICBAc3RhYmxlIElDVSAzLjQKLSAgKi8K
LVVfU1RBQkxFIFVUZXh0ICogVV9FWFBPUlQyCi11dGV4dF9jbG9uZShVVGV4dCAqZGVzdCwgY29u
c3QgVVRleHQgKnNyYywgVUJvb2wgZGVlcCwgVUJvb2wgcmVhZE9ubHksIFVFcnJvckNvZGUgKnN0
YXR1cyk7Ci0KLQotLyoqCi0gICogIENvbXBhcmUgdHdvIFVUZXh0IG9iamVjdHMgZm9yIGVxdWFs
aXR5LgotICAqICBVVGV4dHMgYXJlIGVxdWFsIGlmIHRoZXkgYXJlIGl0ZXJhdGluZyBvdmVyIHRo
ZSBzYW1lIHRleHQsIGFuZAotICAqICAgIGhhdmUgdGhlIHNhbWUgaXRlcmF0aW9uIHBvc2l0aW9u
IHdpdGhpbiB0aGUgdGV4dC4KLSAgKiAgICBJZiBlaXRoZXIgb3IgYm90aCBvZiB0aGUgcGFyYW1l
dGVycyBhcmUgTlVMTCwgdGhlIGNvbXBhcmlzb24gaXMgRkFMU0UuCi0gICoKLSAgKiAgQHBhcmFt
IGEgICBUaGUgZmlyc3Qgb2YgdGhlIHR3byBVVGV4dHMgdG8gY29tcGFyZS4KLSAgKiAgQHBhcmFt
IGIgICBUaGUgb3RoZXIgVVRleHQgdG8gYmUgY29tcGFyZWQuCi0gICogIEByZXR1cm4gICAgVFJV
RSBpZiB0aGUgdHdvIFVUZXh0cyBhcmUgZXF1YWwuCi0gICogIEBzdGFibGUgSUNVIDMuNgotICAq
LwotVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyCi11dGV4dF9lcXVhbHMoY29uc3QgVVRleHQgKmEs
IGNvbnN0IFVUZXh0ICpiKTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgIEZ1
bmN0aW9ucyB0byB3b3JrIHdpdGggdGhlIHRleHQgcmVwcmVzZXRlZCBieSBhIFVUZXh0IHdyYXBw
ZXIKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKgotICAqIEdldCB0aGUgbGVuZ3Ro
IG9mIHRoZSB0ZXh0LiAgRGVwZW5kaW5nIG9uIHRoZSBjaGFyYWN0ZXJpc3RpY3MKLSAgKiBvZiB0
aGUgdW5kZXJseWluZyB0ZXh0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1heSBiZSBleHBlbnNpdmUu
ICAKLSAgKiBAc2VlICB1dGV4dF9pc0xlbmd0aEV4cGVuc2l2ZSgpCi0gICoKLSAgKgotICAqIEBw
YXJhbSB1dCAgdGhlIHRleHQgdG8gYmUgYWNjZXNzZWQuCi0gICogQHJldHVybiB0aGUgbGVuZ3Ro
IG9mIHRoZSB0ZXh0LCBleHByZXNzZWQgaW4gbmF0aXZlIHVuaXRzLgotICAqCi0gICogQHN0YWJs
ZSBJQ1UgMy40Ci0gICovCi1VX1NUQUJMRSBpbnQ2NF90IFVfRVhQT1JUMgotdXRleHRfbmF0aXZl
TGVuZ3RoKFVUZXh0ICp1dCk7Ci0KLS8qKgotICogIFJldHVybiBUUlVFIGlmIGNhbGN1bGF0aW5n
IHRoZSBsZW5ndGggb2YgdGhlIHRleHQgY291bGQgYmUgZXhwZW5zaXZlLgotICogIEZpbmRpbmcg
dGhlIGxlbmd0aCBvZiBOVUwgdGVybWluYXRlZCBzdHJpbmdzIGlzIGNvbnNpZGVyZWQgdG8gYmUg
ZXhwZW5zaXZlLgotICoKLSAqICBOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24g
bWF5IGNoYW5nZQotICogIGFzIHRoZSByZXN1bHQgb2Ygb3RoZXIgb3BlcmF0aW9ucyBvbiBhIFVU
ZXh0LgotICogIE9uY2UgdGhlIGxlbmd0aCBvZiBhIHN0cmluZyBoYXMgYmVlbiBkaXNjb3ZlcmVk
LCBpdCB3aWxsIG5vIGxvbmdlcgotICogIGJlIGV4cGVuc2l2ZSB0byByZXBvcnQgaXQuCi0gKgot
ICogQHBhcmFtIHV0IHRoZSB0ZXh0IHRvIGJlIGFjY2Vzc2VkLgotICogQHJldHVybiBUUlVFIGlm
IGRldGVybWluaW5nIHRoZSBsZW5ndGggb2YgdGhlIHRleHQgY291bGQgYmUgdGltZSBjb25zdW1p
bmcuCi0gKiBAc3RhYmxlIElDVSAzLjQKLSAqLwotVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyCi11
dGV4dF9pc0xlbmd0aEV4cGVuc2l2ZShjb25zdCBVVGV4dCAqdXQpOwotCi0vKioKLSAqIFJldHVy
bnMgdGhlIGNvZGUgcG9pbnQgYXQgdGhlIHJlcXVlc3RlZCBpbmRleCwKLSAqIG9yIFVfU0VOVElO
RUwgKC0xKSBpZiBpdCBpcyBvdXQgb2YgYm91bmRzLgotICoKLSAqIElmIHRoZSBzcGVjaWZpZWQg
aW5kZXggcG9pbnRzIHRvIHRoZSBpbnRlcmlvciBvZiBhIG11bHRpLXVuaXQKLSAqIGNoYXJhY3Rl
ciAtIG9uZSBvZiB0aGUgdHJhaWwgYnl0ZXMgb2YgYSBVVEYtOCBzZXF1ZW5jZSwgZm9yIGV4YW1w
bGUgLQotICogdGhlIGNvbXBsZXRlIGNvZGUgcG9pbnQgd2lsbCBiZSByZXR1cm5lZC4KLSAqCi0g
KiBUaGUgaXRlcmF0aW9uIHBvc2l0aW9uIHdpbGwgYmUgc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUg
cmV0dXJuZWQgY29kZSBwb2ludC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHJvdWdobHkgZXF1
aXZhbGVudCB0byB0aGUgdGhlIHNlcXVlbmNlCi0gKiAgICB1dGV4dF9zZXROYXRpdmVJbmRleChp
bmRleCk7Ci0gKiAgICB1dGV4dF9jdXJyZW50MzIoKTsKLSAqIChUaGVyZSBpcyBhIHN1YnRsZSBk
aWZmZXJlbmNlIGlmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzIGJ5IGJlaW5nIGxlc3MgdGhh
biB6ZXJvIC0gCi0gKiB1dGV4dF9zZXROYXRpdmVJbmRleChuZWdhdGl2ZSB2YWx1ZSkgc2V0cyB0
aGUgaW5kZXggdG8gemVybywgYWZ0ZXIgd2hpY2ggdXRleHRfY3VycmVudCgpCi0gKiB3aWxsIHJl
dHVybiB0aGUgY2hhciBhdCB6ZXJvLiAgdXRleHRfY2hhcjMyQXQobmVnYXRpdmUgaW5kZXgpLCBv
biB0aGUgb3RoZXIgaGFuZCwgd2lsbAotICogcmV0dXJuIHRoZSBVX1NFTlRJTkVMIHZhbHVlIG9m
IC0xLikKLSAqIAotICogQHBhcmFtIHV0IHRoZSB0ZXh0IHRvIGJlIGFjY2Vzc2VkCi0gKiBAcGFy
YW0gbmF0aXZlSW5kZXggdGhlIG5hdGl2ZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIHRvIGJlIGFj
Y2Vzc2VkLiAgSWYgdGhlIGluZGV4IHBvaW50cwotICogICAgICAgIHRvIG90aGVyIHRoYW4gdGhl
IGZpcnN0IHVuaXQgb2YgYSBtdWx0aS11bml0IGNoYXJhY3RlciwgaXQgd2lsbCBiZSBhZGp1c3Rl
ZAotICogICAgICAgIHRvIHRoZSBzdGFydCBvZiB0aGUgY2hhcmFjdGVyLgotICogQHJldHVybiB0
aGUgY29kZSBwb2ludCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LgotICogQHN0YWJsZSBJQ1UgMy40
Ci0gKi8KLVVfU1RBQkxFIFVDaGFyMzIgVV9FWFBPUlQyCi11dGV4dF9jaGFyMzJBdChVVGV4dCAq
dXQsIGludDY0X3QgbmF0aXZlSW5kZXgpOwotCi0KLS8qKgotICoKLSAqIEdldCB0aGUgY29kZSBw
b2ludCBhdCB0aGUgY3VycmVudCBpdGVyYXRpb24gcG9zaXRpb24sCi0gKiBvciBVX1NFTlRJTkVM
ICgtMSkgaWYgdGhlIGl0ZXJhdGlvbiBoYXMgcmVhY2hlZCB0aGUgZW5kIG9mCi0gKiB0aGUgaW5w
dXQgdGV4dC4KLSAqCi0gKiBAcGFyYW0gdXQgdGhlIHRleHQgdG8gYmUgYWNjZXNzZWQuCi0gKiBA
cmV0dXJuIHRoZSBVbmljb2RlIGNvZGUgcG9pbnQgYXQgdGhlIGN1cnJlbnQgaXRlcmF0b3IgcG9z
aXRpb24uCi0gKiBAc3RhYmxlIElDVSAzLjQKLSAqLwotVV9TVEFCTEUgVUNoYXIzMiBVX0VYUE9S
VDIKLXV0ZXh0X2N1cnJlbnQzMihVVGV4dCAqdXQpOwotCi0KLS8qKgotICogR2V0IHRoZSBjb2Rl
IHBvaW50IGF0IHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbiBvZiB0aGUgVVRleHQsIGFu
ZAotICogYWR2YW5jZSB0aGUgcG9zaXRpb24gdG8gdGhlIGZpcnN0IGluZGV4IGZvbGxvd2luZyB0
aGUgY2hhcmFjdGVyLgotICoKLSAqIElmIHRoZSBwb3NpdGlvbiBpcyBhdCB0aGUgZW5kIG9mIHRo
ZSB0ZXh0ICh0aGUgaW5kZXggZm9sbG93aW5nCi0gKiB0aGUgbGFzdCBjaGFyYWN0ZXIsIHdoaWNo
IGlzIGFsc28gdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCksIAotICogcmV0dXJuIFVfU0VOVElORUwg
KC0xKSBhbmQgZG8gbm90IGFkdmFuY2UgdGhlIGluZGV4LiAKLSAqCi0gKiBUaGlzIGlzIGEgcG9z
dC1pbmNyZW1lbnQgb3BlcmF0aW9uLgotICoKLSAqIEFuIGlubGluZSBtYWNybyB2ZXJzaW9uIG9m
IHRoaXMgZnVuY3Rpb24sIFVURVhUX05FWFQzMigpLCAKLSAqIGlzIGF2YWlsYWJsZSBmb3IgcGVy
Zm9ybWFuY2UgY3JpdGljYWwgdXNlLgotICoKLSAqIEBwYXJhbSB1dCB0aGUgdGV4dCB0byBiZSBh
Y2Nlc3NlZC4KLSAqIEByZXR1cm4gdGhlIFVuaWNvZGUgY29kZSBwb2ludCBhdCB0aGUgaXRlcmF0
aW9uIHBvc2l0aW9uLgotICogQHNlZSBVVEVYVF9ORVhUMzIKLSAqIEBzdGFibGUgSUNVIDMuNAot
ICovCi1VX1NUQUJMRSBVQ2hhcjMyIFVfRVhQT1JUMgotdXRleHRfbmV4dDMyKFVUZXh0ICp1dCk7
Ci0KLQotLyoqCi0gKiAgTW92ZSB0aGUgaXRlcmF0b3IgcG9zaXRpb24gdG8gdGhlIGNoYXJhY3Rl
ciAoY29kZSBwb2ludCkgd2hvc2UKLSAqICBpbmRleCBwcmVjZWRlcyB0aGUgY3VycmVudCBwb3Np
dGlvbiwgYW5kIHJldHVybiB0aGF0IGNoYXJhY3Rlci4KLSAqICBUaGlzIGlzIGEgcHJlLWRlY3Jl
bWVudCBvcGVyYXRpb24uCi0gKgotICogIElmIHRoZSBpbml0aWFsIHBvc2l0aW9uIGlzIGF0IHRo
ZSBzdGFydCBvZiB0aGUgdGV4dCAoaW5kZXggb2YgMCkgCi0gKiAgcmV0dXJuIFVfU0VOVElORUwg
KC0xKSwgYW5kIGxlYXZlIHRoZSBwb3NpdGlvbiB1bmNoYW5nZWQuCi0gKgotICogIEFuIGlubGlu
ZSBtYWNybyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24sIFVURVhUX1BSRVZJT1VTMzIoKSwgCi0g
KiAgaXMgYXZhaWxhYmxlIGZvciBwZXJmb3JtYW5jZSBjcml0aWNhbCB1c2UuCi0gKgotICogIEBw
YXJhbSB1dCB0aGUgdGV4dCB0byBiZSBhY2Nlc3NlZC4KLSAqICBAcmV0dXJuIHRoZSBwcmV2aW91
cyBVQ2hhcjMyIGNvZGUgcG9pbnQsIG9yIFVfU0VOVElORUwgKC0xKSAKLSAqICAgICAgICAgIGlm
IHRoZSBpdGVyYXRpb24gaGFzIHJlYWNoZWQgdGhlIHN0YXJ0IG9mIHRoZSB0ZXh0LgotICogIEBz
ZWUgVVRFWFRfUFJFVklPVVMzMgotICogIEBzdGFibGUgSUNVIDMuNAotICovCi1VX1NUQUJMRSBV
Q2hhcjMyIFVfRVhQT1JUMgotdXRleHRfcHJldmlvdXMzMihVVGV4dCAqdXQpOwotCi0KLS8qKgot
ICAqIFNldCB0aGUgaXRlcmF0aW9uIGluZGV4IGFuZCByZXR1cm4gdGhlIGNvZGUgcG9pbnQgYXQg
dGhhdCBpbmRleC4gCi0gICogTGVhdmUgdGhlIGl0ZXJhdGlvbiBpbmRleCBhdCB0aGUgc3RhcnQg
b2YgdGhlIGZvbGxvd2luZyBjb2RlIHBvaW50LgotICAqCi0gICogVGhpcyBmdW5jdGlvbiBpcyB0
aGUgbW9zdCBlZmZpY2llbnQgYW5kIGNvbnZlbmllbnQgd2F5IHRvCi0gICogYmVnaW4gYSBmb3J3
YXJkIGl0ZXJhdGlvbi4gIFRoZSByZXN1bHRzIGFyZSBpZGVudGljYWwgdG8gdGhlIHRob3NlCi0g
ICogZnJvbSB0aGUgc2VxdWVuY2UKLSAgKiBcY29kZQotICAqICAgIHV0ZXh0X3NldEluZGV4KCk7
Ci0gICogICAgdXRleHRfbmV4dDMyKCk7Ci0gICogXGVuZGNvZGUKLSAgKgotICAqICBAcGFyYW0g
dXQgdGhlIHRleHQgdG8gYmUgYWNjZXNzZWQuCi0gICogIEBwYXJhbSBuYXRpdmVJbmRleCBJdGVy
YXRpb24gaW5kZXgsIGluIHRoZSBuYXRpdmUgdW5pdHMgb2YgdGhlIHRleHQgcHJvdmlkZXIuCi0g
ICogIEByZXR1cm4gQ29kZSBwb2ludCB3aGljaCBzdGFydHMgYXQgb3IgYmVmb3JlIGluZGV4LAot
ICAqICAgICAgICAgb3IgVV9TRU5USU5FTCAoLTEpIGlmIGl0IGlzIG91dCBvZiBib3VuZHMuCi0g
ICogQHN0YWJsZSBJQ1UgMy40Ci0gICovCi1VX1NUQUJMRSBVQ2hhcjMyIFVfRVhQT1JUMgotdXRl
eHRfbmV4dDMyRnJvbShVVGV4dCAqdXQsIGludDY0X3QgbmF0aXZlSW5kZXgpOwotCi0KLQotLyoq
Ci0gICogU2V0IHRoZSBpdGVyYXRpb24gaW5kZXgsIGFuZCByZXR1cm4gdGhlIGNvZGUgcG9pbnQg
cHJlY2VkaW5nIHRoZQotICAqIG9uZSBzcGVjaWZpZWQgYnkgdGhlIGluaXRpYWwgaW5kZXguICBM
ZWF2ZSB0aGUgaXRlcmF0aW9uIHBvc2l0aW9uCi0gICogYXQgdGhlIHN0YXJ0IG9mIHRoZSByZXR1
cm5lZCBjb2RlIHBvaW50LgotICAqCi0gICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgbW9zdCBlZmZp
Y2llbnQgYW5kIGNvbnZlbmllbnQgd2F5IHRvCi0gICogYmVnaW4gYSBiYWNrd2FyZHMgaXRlcmF0
aW9uLgotICAqCi0gICogQHBhcmFtIHV0IHRoZSB0ZXh0IHRvIGJlIGFjY2Vzc2VkLgotICAqIEBw
YXJhbSBuYXRpdmVJbmRleCBJdGVyYXRpb24gaW5kZXggaW4gdGhlIG5hdGl2ZSB1bml0cyBvZiB0
aGUgdGV4dCBwcm92aWRlci4KLSAgKiBAcmV0dXJuIENvZGUgcG9pbnQgcHJlY2VkaW5nIHRoZSBv
bmUgYXQgdGhlIGluaXRpYWwgaW5kZXgsCi0gICogICAgICAgICBvciBVX1NFTlRJTkVMICgtMSkg
aWYgaXQgaXMgb3V0IG9mIGJvdW5kcy4KLSAgKgotICAqIEBzdGFibGUgSUNVIDMuNAotICAqLwot
VV9TVEFCTEUgVUNoYXIzMiBVX0VYUE9SVDIKLXV0ZXh0X3ByZXZpb3VzMzJGcm9tKFVUZXh0ICp1
dCwgaW50NjRfdCBuYXRpdmVJbmRleCk7Ci0KLS8qKgotICAqIEdldCB0aGUgY3VycmVudCBpdGVy
YXRvciBwb3NpdGlvbiwgd2hpY2ggY2FuIHJhbmdlIGZyb20gMCB0byAKLSAgKiB0aGUgbGVuZ3Ro
IG9mIHRoZSB0ZXh0LgotICAqIFRoZSBwb3NpdGlvbiBpcyBhIG5hdGl2ZSBpbmRleCBpbnRvIHRo
ZSBpbnB1dCB0ZXh0LCBpbiB3aGF0ZXZlciBmb3JtYXQgaXQKLSAgKiBtYXkgaGF2ZSAocG9zc2li
bHkgVVRGLTggZm9yIGV4YW1wbGUpLCBhbmQgbWF5IG5vdCBhbHdheXMgYmUgdGhlIHNhbWUgYXMK
LSAgKiB0aGUgY29ycmVzcG9uZGluZyBVQ2hhciAoVVRGLTE2KSBpbmRleC4KLSAgKiBUaGUgcmV0
dXJuZWQgcG9zaXRpb24gd2lsbCBhbHdheXMgYmUgYWxpZ25lZCB0byBhIGNvZGUgcG9pbnQgYm91
bmRhcnkuIAotICAqCi0gICogQHBhcmFtIHV0IHRoZSB0ZXh0IHRvIGJlIGFjY2Vzc2VkLgotICAq
IEByZXR1cm4gdGhlIGN1cnJlbnQgaW5kZXggcG9zaXRpb24sIGluIHRoZSBuYXRpdmUgdW5pdHMg
b2YgdGhlIHRleHQgcHJvdmlkZXIuCi0gICogQHN0YWJsZSBJQ1UgMy40Ci0gICovCi1VX1NUQUJM
RSBpbnQ2NF90IFVfRVhQT1JUMgotdXRleHRfZ2V0TmF0aXZlSW5kZXgoY29uc3QgVVRleHQgKnV0
KTsKLQotLyoqCi0gKiBTZXQgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIHBvc2l0aW9uIHRvIHRoZSBu
ZWFyZXN0IGNvZGUgcG9pbnQKLSAqIGJvdW5kYXJ5IGF0IG9yIHByZWNlZGluZyB0aGUgc3BlY2lm
aWVkIGluZGV4LgotICogVGhlIGluZGV4IGlzIGluIHRoZSBuYXRpdmUgdW5pdHMgb2YgdGhlIG9y
aWdpbmFsIGlucHV0IHRleHQuCi0gKiBJZiB0aGUgaW5kZXggaXMgb3V0IG9mIHJhbmdlLCBpdCB3
aWxsIGJlIHBpbm5lZCB0byBiZSB3aXRoaW4KLSAqIHRoZSByYW5nZSBvZiB0aGUgaW5wdXQgdGV4
dC4KLSAqIDxwPgotICogSXQgd2lsbCB1c3VhbGx5IGJlIG1vcmUgZWZmaWNpZW50IHRvIGJlZ2lu
IGFuIGl0ZXJhdGlvbgotICogdXNpbmcgdGhlIGZ1bmN0aW9ucyB1dGV4dF9uZXh0MzJGcm9tKCkg
b3IgdXRleHRfcHJldmlvdXMzMkZyb20oKQotICogcmF0aGVyIHRoYW4gc2V0SW5kZXgoKS4KLSAq
IDxwPgotICogTW92aW5nIHRoZSBpbmRleCBwb3NpdGlvbiB0byBhbiBhZGphY2VudCBjaGFyYWN0
ZXIgaXMgYmVzdCBkb25lCi0gKiB3aXRoIHV0ZXh0X25leHQzMigpLCB1dGV4dF9wcmV2aW91czMy
KCkgb3IgdXRleHRfbW92ZUluZGV4MzIoKS4KLSAqIEF0dGVtcHRpbmcgdG8gZG8gZGlyZWN0IGFy
aXRobWV0aWMgb24gdGhlIGluZGV4IHBvc2l0aW9uIGlzCi0gKiBjb21wbGljYXRlZCBieSB0aGUg
ZmFjdCB0aGF0IHRoZSBzaXplIChpbiBuYXRpdmUgdW5pdHMpIG9mIGEKLSAqIGNoYXJhY3RlciBk
ZXBlbmRzIG9uIHRoZSB1bmRlcmx5aW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjaGFyYWN0ZXIK
LSAqIChVVEYtOCwgVVRGLTE2LCBVVEYtMzIsIGFyYml0cmFyeSBjb2RlcGFnZSksIGFuZCBpcyBu
b3QKLSAqIGVhc2lseSBrbm93YWJsZS4KLSAqCi0gKiBAcGFyYW0gdXQgdGhlIHRleHQgdG8gYmUg
YWNjZXNzZWQuCi0gKiBAcGFyYW0gbmF0aXZlSW5kZXggdGhlIG5hdGl2ZSB1bml0IGluZGV4IG9m
IHRoZSBuZXcgaXRlcmF0aW9uIHBvc2l0aW9uLgotICogQHN0YWJsZSBJQ1UgMy40Ci0gKi8KLVVf
U1RBQkxFIHZvaWQgVV9FWFBPUlQyCi11dGV4dF9zZXROYXRpdmVJbmRleChVVGV4dCAqdXQsIGlu
dDY0X3QgbmF0aXZlSW5kZXgpOwotCi0vKioKLSAqIE1vdmUgdGhlIGl0ZXJhdG9yIHBvc3Rpb24g
YnkgZGVsdGEgY29kZSBwb2ludHMuICBUaGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzCi0gKiBpcyBh
IHNpZ25lZCBudW1iZXI7IGEgbmVnYXRpdmUgZGVsdGEgd2lsbCBtb3ZlIHRoZSBpdGVyYXRvciBi
YWNrd2FyZHMsCi0gKiB0b3dhcmRzIHRoZSBzdGFydCBvZiB0aGUgdGV4dC4KLSAqIDxwPgotICog
VGhlIGluZGV4IGlzIG1vdmVkIGJ5IDxjb2RlPmRlbHRhPC9jb2RlPiBjb2RlIHBvaW50cwotICog
Zm9yd2FyZCBvciBiYWNrd2FyZCwgYnV0IG5vIGZ1cnRoZXIgYmFja3dhcmQgdGhhbiB0byAwIGFu
ZAotICogbm8gZnVydGhlciBmb3J3YXJkIHRoYW4gdG8gdXRleHRfbmF0aXZlTGVuZ3RoKCkuCi0g
KiBUaGUgcmVzdWx0aW5nIGluZGV4IHZhbHVlIHdpbGwgYmUgaW4gYmV0d2VlbiAwIGFuZCBsZW5n
dGgsIGluY2x1c2l2ZS4KLSAqCi0gKiBAcGFyYW0gdXQgdGhlIHRleHQgdG8gYmUgYWNjZXNzZWQu
Ci0gKiBAcGFyYW0gZGVsdGEgdGhlIHNpZ25lZCBudW1iZXIgb2YgY29kZSBwb2ludHMgdG8gbW92
ZSB0aGUgaXRlcmF0aW9uIHBvc2l0aW9uLgotICogQHJldHVybiBUUlVFIGlmIHRoZSBwb3NpdGlv
biBjb3VsZCBiZSBtb3ZlZCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBwb3NpdGlvbnMgd2hpbGUK
LSAqICAgICAgICAgICAgICBzdGF5aW5nIHdpdGhpbiB0aGUgcmFuZ2UgWzAgLSB0ZXh0IGxlbmd0
aF0uCi0gKiBAc3RhYmxlIElDVSAzLjQKLSAqLwotVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyCi11
dGV4dF9tb3ZlSW5kZXgzMihVVGV4dCAqdXQsIGludDMyX3QgZGVsdGEpOwotCi0vKioKLSAqIEdl
dCB0aGUgbmF0aXZlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgcHJlY2VlZGluZyB0aGUgY3VycmVu
dCBwb3NpdGlvbi4KLSAqIElmIHRoZSBpdGVyYXRpb24gcG9zaXRpb24gaXMgYWxyZWFkeSBhdCB0
aGUgc3RhcnQgb2YgdGhlIHRleHQsIHplcm8KLSAqIGlzIHJldHVybmVkLgotICogVGhlIHZhbHVl
IHJldHVybmVkIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2J0YWluZWQgZnJvbSB0aGUgZm9sbG93aW5n
IHNlcXVlbmNlLAotICogYnV0IHdpdGhvdXQgdGhlIHNpZGUgZWZmZWN0IG9mIGNoYW5naW5nIHRo
ZSBpdGVyYXRpb24gcG9zaXRpb24uCi0gKiAgIAotICogXGNvZGUKLSAqICAgIFVUZXh0ICAqdXQg
PSB3aGF0ZXZlcjsKLSAqICAgICAgLi4uCi0gKiAgICB1dGV4dF9wcmV2aW91cyh1dCkKLSAqICAg
IHV0ZXh0X2dldE5hdGl2ZUluZGV4KHV0KTsKLSAqIFxlbmRjb2RlCi0gKgotICogVGhpcyBmdW5j
dGlvbiBpcyBtb3N0IHVzZWZ1bCBkdXJpbmcgZm9yd2FyZHMgaXRlcmF0aW9uLCB3aGVyZSBpdCB3
aWxsIGdldCB0aGUKLSAqICAgbmF0aXZlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgbW9zdCByZWNl
bnRseSByZXR1cm5lZCBmcm9tIHV0ZXh0X25leHQoKS4KLSAqCi0gKiBAcGFyYW0gdXQgdGhlIHRl
eHQgdG8gYmUgYWNjZXNzZWQKLSAqIEByZXR1cm4gdGhlIG5hdGl2ZSBpbmRleCBvZiB0aGUgY2hh
cmFjdGVyIHByZWNlZWRpbmcgdGhlIGN1cnJlbnQgaW5kZXggcG9zaXRpb24sCi0gKiAgICAgICAg
IG9yIHplcm8gaWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSB0
ZXh0LgotICogQHN0YWJsZSBJQ1UgMy42Ci0gKi8KLVVfU1RBQkxFIGludDY0X3QgVV9FWFBPUlQy
Ci11dGV4dF9nZXRQcmV2aW91c05hdGl2ZUluZGV4KFVUZXh0ICp1dCk7IAotCi0KLS8qKgotICoK
LSAqIEV4dHJhY3QgdGV4dCBmcm9tIGEgVVRleHQgaW50byBhIFVDaGFyIGJ1ZmZlci4gIFRoZSBy
YW5nZSBvZiB0ZXh0IHRvIGJlIGV4dHJhY3RlZAotICogaXMgc3BlY2lmaWVkIGluIHRoZSBuYXRp
dmUgaW5kaWNlcyBvZiB0aGUgVVRleHQgcHJvdmlkZXIuICBUaGVzZSBtYXkgbm90IG5lY2Vzc2Fy
aWx5Ci0gKiBiZSBVVEYtMTYgaW5kaWNlcy4KLSAqIDxwPgotICogVGhlIHNpemUgKG51bWJlciBv
ZiAxNiBiaXQgVUNoYXJzKSBvZiB0aGUgZGF0YSB0byBiZSBleHRyYWN0ZWQgaXMgcmV0dXJuZWQu
ICBUaGUKLSAqIGZ1bGwgbnVtYmVyIG9mIFVDaGFycyBpcyByZXR1cm5lZCwgZXZlbiB3aGVuIHRo
ZSBleHRyYWN0ZWQgdGV4dCBpcyB0cnVuY2F0ZWQKLSAqIGJlY2F1c2UgdGhlIHNwZWNpZmllZCBi
dWZmZXIgc2l6ZSBpcyB0b28gc21hbGwuCi0gKiA8cD4KLSAqIFRoZSBleHRyYWN0ZWQgc3RyaW5n
IHdpbGwgKGlmIHlvdSBhcmUgYSB1c2VyKSAvIG11c3QgKGlmIHlvdSBhcmUgYSB0ZXh0IHByb3Zp
ZGVyKQotICogYmUgTlVMLXRlcm1pbmF0ZWQgaWYgdGhlcmUgaXMgc3VmZmljaWVudCBzcGFjZSBp
biB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiAgVGhpcwotICogdGVybWluYXRpbmcgTlVMIGlzIG5v
dCBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgbGVuZ3RoLgotICogPHA+Ci0gKiBUaGUgaXRlcmF0
aW9uIGluZGV4IGlzIGxlZnQgYXQgdGhlIHBvc2l0aW9uIGZvbGxvd2luZyB0aGUgbGFzdCBleHRy
YWN0ZWQgY2hhcmFjdGVyLgotICoKLSAqIEBwYXJhbSAgdXQgICAgdGhlIFVUZXh0IGZyb20gd2hp
Y2ggdG8gZXh0cmFjdCBkYXRhLgotICogQHBhcmFtICBuYXRpdmVTdGFydCB0aGUgbmF0aXZlIGlu
ZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gZXh0cmFjdC5cCi0gKiAgICAgICAgICAgICAg
IElmIHRoZSBzcGVjaWZpZWQgaW5kZXggaXMgb3V0IG9mIHJhbmdlLAotICogICAgICAgICAgICAg
ICBpdCB3aWxsIGJlIHBpbm5lZCB0byB0byBiZSB3aXRoaW4gMCA8PSBpbmRleCA8PSB0ZXh0TGVu
Z3RoCi0gKiBAcGFyYW0gIG5hdGl2ZUxpbWl0IHRoZSBuYXRpdmUgc3RyaW5nIGluZGV4IG9mIHRo
ZSBwb3NpdGlvbiBmb2xsb3dpbmcgdGhlIGxhc3QKLSAqICAgICAgICAgICAgICAgY2hhcmFjdGVy
IHRvIGV4dHJhY3QuICBJZiB0aGUgc3BlY2lmaWVkIGluZGV4IGlzIG91dCBvZiByYW5nZSwKLSAq
ICAgICAgICAgICAgICAgaXQgd2lsbCBiZSBwaW5uZWQgdG8gdG8gYmUgd2l0aGluIDAgPD0gaW5k
ZXggPD0gdGV4dExlbmd0aC4KLSAqICAgICAgICAgICAgICAgbmF0aXZlTGltaXQgbXVzdCBiZSA+
PSBuYXRpdmVTdGFydC4KLSAqIEBwYXJhbSAgZGVzdCAgdGhlIFVDaGFyIChVVEYtMTYpIGJ1ZmZl
ciBpbnRvIHdoaWNoIHRoZSBleHRyYWN0ZWQgdGV4dCBpcyBwbGFjZWQKLSAqIEBwYXJhbSAgZGVz
dENhcGFjaXR5ICBUaGUgc2l6ZSwgaW4gVUNoYXJzLCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVy
LiAgTWF5IGJlIHplcm8KLSAqICAgICAgICAgICAgICAgZm9yIHByZWNvbXB1dGluZyB0aGUgcmVx
dWlyZWQgc2l6ZS4KLSAqIEBwYXJhbSAgc3RhdHVzIHJlY2VpdmVzIGFueSBlcnJvciBzdGF0dXMu
Ci0gKiAgICAgICAgIFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SOiB0aGUgZXh0cmFjdGVkIHRleHQg
d2FzIHRydW5jYXRlZCBiZWNhdXNlIHRoZSAKLSAqICAgICAgICAgYnVmZmVyIHdhcyB0b28gc21h
bGwuICBSZXR1cm5zIG51bWJlciBvZiBVQ2hhcnMgZm9yIHByZWZsaWdodGluZy4KLSAqIEByZXR1
cm4gTnVtYmVyIG9mIFVDaGFycyBpbiB0aGUgZGF0YSB0byBiZSBleHRyYWN0ZWQuICBEb2VzIG5v
dCBpbmNsdWRlIGEgdHJhaWxpbmcgTlVMLgotICoKLSAqIEBzdGFibGUgSUNVIDMuNAotICovCi1V
X1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgotdXRleHRfZXh0cmFjdChVVGV4dCAqdXQsCi0gICAg
ICAgICAgICAgaW50NjRfdCBuYXRpdmVTdGFydCwgaW50NjRfdCBuYXRpdmVMaW1pdCwKLSAgICAg
ICAgICAgICBVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksCi0gICAgICAgICAgICAg
VUVycm9yQ29kZSAqc3RhdHVzKTsKLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
LSAqCi0gKiAgI2RlZmluZSBpbmxpbmUgdmVyc2lvbnMgb2Ygc2VsZWN0ZWQgcGVyZm9ybWFuY2Ut
Y3JpdGljYWwgdGV4dCBhY2Nlc3MgZnVuY3Rpb25zCi0gKiAgICAgICAgICBDYXV0aW9uOiAgZG8g
bm90IHVzZSBhdXRvIGluY3JlbWVudCsrIG9yIGRlY3JlbWVudC0tIGV4cHJlc3Npb25zCi0gKiAg
ICAgICAgICAgICAgICAgICAgYXMgcGFyYW1ldGVycyB0byB0aGVzZSBtYWNyb3MuCi0gKgotICog
ICAgICAgICAgRm9yIG1vc3QgdXNlLCB3aGVyZSB0aGVyZSBpcyBubyBleHRyZW1lIHBlcmZvcm1h
bmNlIGNvbnN0cmFpbnQsIHRoZQotICogICAgICAgICAgbm9ybWFsLCBub24taW5saW5lIGZ1bmN0
aW9ucyBhcmUgYSBiZXR0ZXIgY2hvaWNlLiAgVGhlIHJlc3VsdGluZyBjb2RlCi0gKiAgICAgICAg
ICB3aWxsIGJlIHNtYWxsZXIsIGFuZCwgaWYgdGhlIG5lZWQgZXZlciBhcmlzZXMsIGVhc2llciB0
byBkZWJ1Zy4KLSAqCi0gKiAgICAgICAgICBUaGVzZSBhcmUgaW1wbGVtZW50ZWQgYXMgI2RlZmlu
ZXMgcmF0aGVyIHRoYW4gcmVhbCBmdW5jdGlvbnMKLSAqICAgICAgICAgIGJlY2F1c2UgdGhlcmUg
aXMgbm8gZnVsbHkgcG9ydGFibGUgd2F5IHRvIGRvIGlubGluZSBmdW5jdGlvbnMgaW4gcGxhaW4g
Qy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIFVfSElERV9J
TlRFUk5BTF9BUEkKLS8qKgotICogaW5saW5lIHZlcnNpb24gb2YgdXRleHRfY3VycmVudDMyKCks
IGZvciBwZXJmb3JtYW5jZS1jcml0aWNhbCBzaXR1YXRpb25zLgotICoKLSAqIEdldCB0aGUgY29k
ZSBwb2ludCBhdCB0aGUgY3VycmVudCBpdGVyYXRpb24gcG9zaXRpb24gb2YgdGhlIFVUZXh0Lgot
ICogUmV0dXJucyBVX1NFTlRJTkVMICgtMSkgaWYgdGhlIHBvc2l0aW9uIGlzIGF0IHRoZSBlbmQg
b2YgdGhlCi0gKiB0ZXh0LgotICoKLSAqIEBpbnRlcm5hbCBJQ1UgNC40IHRlY2hub2xvZ3kgcHJl
dmlldwotICovCi0jZGVmaW5lIFVURVhUX0NVUlJFTlQzMih1dCkgIFwKLSAgICAoKHV0KS0+Y2h1
bmtPZmZzZXQgPCAodXQpLT5jaHVua0xlbmd0aCAmJiAoKHV0KS0+Y2h1bmtDb250ZW50cylbKHV0
KS0+Y2h1bmtPZmZzZXRdPDB4ZDgwMCA/IFwKLSAgICAoKHV0KS0+Y2h1bmtDb250ZW50cylbKCh1
dCktPmNodW5rT2Zmc2V0KV0gOiB1dGV4dF9jdXJyZW50MzIodXQpKQotI2VuZGlmICAvKiBVX0hJ
REVfSU5URVJOQUxfQVBJICovCi0KLS8qKgotICogaW5saW5lIHZlcnNpb24gb2YgdXRleHRfbmV4
dDMyKCksIGZvciBwZXJmb3JtYW5jZS1jcml0aWNhbCBzaXR1YXRpb25zLgotICoKLSAqIEdldCB0
aGUgY29kZSBwb2ludCBhdCB0aGUgY3VycmVudCBpdGVyYXRpb24gcG9zaXRpb24gb2YgdGhlIFVU
ZXh0LCBhbmQKLSAqIGFkdmFuY2UgdGhlIHBvc2l0aW9uIHRvIHRoZSBmaXJzdCBpbmRleCBmb2xs
b3dpbmcgdGhlIGNoYXJhY3Rlci4KLSAqIFRoaXMgaXMgYSBwb3N0LWluY3JlbWVudCBvcGVyYXRp
b24uCi0gKiBSZXR1cm5zIFVfU0VOVElORUwgKC0xKSBpZiB0aGUgcG9zaXRpb24gaXMgYXQgdGhl
IGVuZCBvZiB0aGUKLSAqIHRleHQuCi0gKgotICogQHN0YWJsZSBJQ1UgMy40Ci0gKi8KLSNkZWZp
bmUgVVRFWFRfTkVYVDMyKHV0KSAgXAotICAgICgodXQpLT5jaHVua09mZnNldCA8ICh1dCktPmNo
dW5rTGVuZ3RoICYmICgodXQpLT5jaHVua0NvbnRlbnRzKVsodXQpLT5jaHVua09mZnNldF08MHhk
ODAwID8gXAotICAgICgodXQpLT5jaHVua0NvbnRlbnRzKVsoKHV0KS0+Y2h1bmtPZmZzZXQpKytd
IDogdXRleHRfbmV4dDMyKHV0KSkKLQotLyoqCi0gKiBpbmxpbmUgdmVyc2lvbiBvZiB1dGV4dF9w
cmV2aW91czMyKCksIGZvciBwZXJmb3JtYW5jZS1jcml0aWNhbCBzaXR1YXRpb25zLgotICoKLSAq
ICBNb3ZlIHRoZSBpdGVyYXRvciBwb3NpdGlvbiB0byB0aGUgY2hhcmFjdGVyIChjb2RlIHBvaW50
KSB3aG9zZQotICogIGluZGV4IHByZWNlZGVzIHRoZSBjdXJyZW50IHBvc2l0aW9uLCBhbmQgcmV0
dXJuIHRoYXQgY2hhcmFjdGVyLgotICogIFRoaXMgaXMgYSBwcmUtZGVjcmVtZW50IG9wZXJhdGlv
bi4KLSAqICBSZXR1cm5zIFVfU0VOVElORUwgKC0xKSBpZiB0aGUgcG9zaXRpb24gaXMgYXQgdGhl
IHN0YXJ0IG9mIHRoZSAgdGV4dC4KLSAqCi0gKiBAc3RhYmxlIElDVSAzLjQKLSAqLwotI2RlZmlu
ZSBVVEVYVF9QUkVWSU9VUzMyKHV0KSAgXAotICAgICgodXQpLT5jaHVua09mZnNldCA+IDAgJiYg
XAotICAgICAodXQpLT5jaHVua0NvbnRlbnRzWyh1dCktPmNodW5rT2Zmc2V0LTFdIDwgMHhkODAw
ID8gXAotICAgICAgICAgICh1dCktPmNodW5rQ29udGVudHNbLS0oKHV0KS0+Y2h1bmtPZmZzZXQp
XSAgOiAgdXRleHRfcHJldmlvdXMzMih1dCkpCi0KLS8qKgotICAqICBpbmxpbmUgdmVyc2lvbiBv
ZiB1dGV4dF9nZXROYXRpdmVJbmRleCgpLCBmb3IgcGVyZm9ybWFuY2UtY3JpdGljYWwgc2l0dWF0
aW9ucy4KLSAgKgotICAqIEdldCB0aGUgY3VycmVudCBpdGVyYXRvciBwb3NpdGlvbiwgd2hpY2gg
Y2FuIHJhbmdlIGZyb20gMCB0byAKLSAgKiB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0LgotICAqIFRo
ZSBwb3NpdGlvbiBpcyBhIG5hdGl2ZSBpbmRleCBpbnRvIHRoZSBpbnB1dCB0ZXh0LCBpbiB3aGF0
ZXZlciBmb3JtYXQgaXQKLSAgKiBtYXkgaGF2ZSAocG9zc2libHkgVVRGLTggZm9yIGV4YW1wbGUp
LCBhbmQgbWF5IG5vdCBhbHdheXMgYmUgdGhlIHNhbWUgYXMKLSAgKiB0aGUgY29ycmVzcG9uZGlu
ZyBVQ2hhciAoVVRGLTE2KSBpbmRleC4KLSAgKiBUaGUgcmV0dXJuZWQgcG9zaXRpb24gd2lsbCBh
bHdheXMgYmUgYWxpZ25lZCB0byBhIGNvZGUgcG9pbnQgYm91bmRhcnkuIAotICAqCi0gICogQHN0
YWJsZSBJQ1UgMy42Ci0gICovCi0jZGVmaW5lIFVURVhUX0dFVE5BVElWRUlOREVYKHV0KSAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICgodXQpLT5jaHVua09mZnNldCA8PSAodXQpLT5uYXRp
dmVJbmRleGluZ0xpbWl0PyAgIFwKLSAgICAgICAgKHV0KS0+Y2h1bmtOYXRpdmVTdGFydCsodXQp
LT5jaHVua09mZnNldCA6ICAgICBcCi0gICAgICAgICh1dCktPnBGdW5jcy0+bWFwT2Zmc2V0VG9O
YXRpdmUodXQpKSAgICAKLQotLyoqCi0gICogIGlubGluZSB2ZXJzaW9uIG9mIHV0ZXh0X3NldE5h
dGl2ZUluZGV4KCksIGZvciBwZXJmb3JtYW5jZS1jcml0aWNhbCBzaXR1YXRpb25zLgotICAqCi0g
ICogU2V0IHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlvbiB0byB0aGUgbmVhcmVzdCBjb2Rl
IHBvaW50Ci0gICogYm91bmRhcnkgYXQgb3IgcHJlY2VkaW5nIHRoZSBzcGVjaWZpZWQgaW5kZXgu
Ci0gICogVGhlIGluZGV4IGlzIGluIHRoZSBuYXRpdmUgdW5pdHMgb2YgdGhlIG9yaWdpbmFsIGlu
cHV0IHRleHQuCi0gICogSWYgdGhlIGluZGV4IGlzIG91dCBvZiByYW5nZSwgaXQgd2lsbCBiZSBw
aW5uZWQgdG8gYmUgd2l0aGluCi0gICogdGhlIHJhbmdlIG9mIHRoZSBpbnB1dCB0ZXh0LgotICAq
Ci0gICogQHN0YWJsZSBJQ1UgMy44Ci0gICovCi0jZGVmaW5lIFVURVhUX1NFVE5BVElWRUlOREVY
KHV0LCBpeCkgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7IGludDY0X3QgX19vZmZzZXQg
PSAoaXgpIC0gKHV0KS0+Y2h1bmtOYXRpdmVTdGFydDsgXAotICAgICAgaWYgKF9fb2Zmc2V0Pj0w
ICYmIF9fb2Zmc2V0PD0oaW50NjRfdCkodXQpLT5uYXRpdmVJbmRleGluZ0xpbWl0KSB7IFwKLSAg
ICAgICAgICAodXQpLT5jaHVua09mZnNldD0oaW50MzJfdClfX29mZnNldDsgXAotICAgICAgfSBl
bHNlIHsgXAotICAgICAgICAgIHV0ZXh0X3NldE5hdGl2ZUluZGV4KCh1dCksIChpeCkpOyB9IH0K
LQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgIEZ1bmN0aW9ucyBy
ZWxhdGVkIHRvIHdyaXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSB0ZXh0LgotICogICBUaGVzZSB3aWxs
IHdvcmsgb25seSB3aXRoIG1vZGlmaWFibGUgVVRleHRzLiAgQXR0ZW1wdGluZyB0bwotICogICBt
b2RpZnkgYSByZWFkLW9ubHkgVVRleHQgd2lsbCByZXR1cm4gYW4gZXJyb3Igc3RhdHVzLgotICoK
LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotLyoqCi0gKiAgUmV0dXJuIFRSVUUg
aWYgdGhlIHRleHQgY2FuIGJlIHdyaXR0ZW4gKG1vZGlmaWVkKSB3aXRoIHV0ZXh0X3JlcGxhY2Uo
KSBvcgotICogIHV0ZXh0X2NvcHkoKS4gIEZvciB0aGUgdGV4dCB0byBiZSB3cml0YWJsZSwgdGhl
IHRleHQgcHJvdmlkZXIgbXVzdAotICogIGJlIG9mIGEgdHlwZSB0aGF0IHN1cHBvcnRzIHdyaXRp
bmcgYW5kIHRoZSBVVGV4dCBtdXN0IG5vdCBiZSBmcm96ZW4uCi0gKgotICogIEF0dGVtcHRpbmcg
dG8gbW9kaWZ5IHRleHQgd2hlbiB1dGV4dF9pc1dyaXRlYWJsZSgpIGlzIEZBTFNFIHdpbGwgZmFp
bCAtCi0gKiAgdGhlIHRleHQgd2lsbCBub3QgYmUgbW9kaWZpZWQsIGFuZCBhbiBlcnJvciB3aWxs
IGJlIHJldHVybmVkIGZyb20gdGhlIGZ1bmN0aW9uCi0gKiAgdGhhdCBhdHRlbXB0ZWQgdGhlIG1v
ZGlmaWNhdGlvbi4KLSAqCi0gKiBAcGFyYW0gIHV0ICAgdGhlIFVUZXh0IHRvIGJlIHRlc3RlZC4K
LSAqIEByZXR1cm4gVFJVRSBpZiB0aGUgdGV4dCBpcyBtb2RpZmlhYmxlLgotICoKLSAqIEBzZWUg
ICAgdXRleHRfZnJlZXplKCkKLSAqIEBzZWUgICAgdXRleHRfcmVwbGFjZSgpCi0gKiBAc2VlICAg
IHV0ZXh0X2NvcHkoKQotICogQHN0YWJsZSBJQ1UgMy40Ci0gKgotICovCi1VX1NUQUJMRSBVQm9v
bCBVX0VYUE9SVDIKLXV0ZXh0X2lzV3JpdGFibGUoY29uc3QgVVRleHQgKnV0KTsKLQotCi0vKioK
LSAgKiBUZXN0IHdoZXRoZXIgdGhlcmUgaXMgbWV0YSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUg
dGV4dC4KLSAgKiBAc2VlIFJlcGxhY2VhYmxlOjpoYXNNZXRhRGF0YSgpCi0gICoKLSAgKiBAcGFy
YW0gdXQgVGhlIFVUZXh0IHRvIGJlIHRlc3RlZAotICAqIEByZXR1cm4gVFJVRSBpZiB0aGUgdW5k
ZXJseWluZyB0ZXh0IGluY2x1ZGVzIG1ldGEgZGF0YS4KLSAgKiBAc3RhYmxlIElDVSAzLjQKLSAg
Ki8KLVVfU1RBQkxFIFVCb29sIFVfRVhQT1JUMgotdXRleHRfaGFzTWV0YURhdGEoY29uc3QgVVRl
eHQgKnV0KTsKLQotCi0vKioKLSAqIFJlcGxhY2UgYSByYW5nZSBvZiB0aGUgb3JpZ2luYWwgdGV4
dCB3aXRoIGEgcmVwbGFjZW1lbnQgdGV4dC4KLSAqCi0gKiBMZWF2ZXMgdGhlIGN1cnJlbnQgaXRl
cmF0aW9uIHBvc2l0aW9uIGF0IHRoZSBwb3NpdGlvbiBmb2xsb3dpbmcgdGhlCi0gKiAgbmV3bHkg
aW5zZXJ0ZWQgcmVwbGFjZW1lbnQgdGV4dC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkg
YXZhaWxhYmxlIG9uIFVUZXh0IHR5cGVzIHRoYXQgc3VwcG9ydCB3cml0aW5nLAotICogdGhhdCBp
cywgb25lcyB3aGVyZSB1dGV4dF9pc1dyaXRhYmxlKCkgcmV0dXJucyBUUlVFLgotICoKLSAqIFdo
ZW4gdXNpbmcgdGhpcyBmdW5jdGlvbiwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgYSBzaW5nbGUgVVRl
eHQgb3BlbmVkIG9udG8gdGhlCi0gKiB1bmRlcmx5aW5nIG5hdGl2ZSB0ZXh0IHN0cmluZy4gIEJl
aGF2aW9yIGFmdGVyIGEgcmVwbGFjZSBvcGVyYXRpb24KLSAqIG9uIGEgVVRleHQgaXMgdW5kZWZp
bmVkIGZvciBhbnkgb3RoZXIgYWRkaXRpb25hbCBVVGV4dHMgdGhhdCByZWZlciB0byB0aGUKLSAq
IG1vZGlmaWVkIHN0cmluZy4KLSAqCi0gKiBAcGFyYW0gdXQgICAgICAgICAgICAgICB0aGUgVVRl
eHQgcmVwcmVzZW50aW5nIHRoZSB0ZXh0IHRvIGJlIG9wZXJhdGVkIG9uLgotICogQHBhcmFtIG5h
dGl2ZVN0YXJ0ICAgICAgdGhlIG5hdGl2ZSBpbmRleCBvZiB0aGUgc3RhcnQgb2YgdGhlIHJlZ2lv
biB0byBiZSByZXBsYWNlZAotICogQHBhcmFtIG5hdGl2ZUxpbWl0ICAgICAgdGhlIG5hdGl2ZSBp
bmRleCBvZiB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgcmVnaW9uIHRvIGJlIHJlcGxhY2Vk
LgotICogQHBhcmFtIHJlcGxhY2VtZW50VGV4dCAgcG9pbnRlciB0byB0aGUgcmVwbGFjZW1lbnQg
dGV4dAotICogQHBhcmFtIHJlcGxhY2VtZW50TGVuZ3RoIGxlbmd0aCBvZiB0aGUgcmVwbGFjZW1l
bnQgdGV4dCwgb3IgLTEgaWYgdGhlIHRleHQgaXMgTlVMIHRlcm1pbmF0ZWQuCi0gKiBAcGFyYW0g
c3RhdHVzICAgICAgICAgICByZWNlaXZlcyBhbnkgZXJyb3Igc3RhdHVzLiAgUG9zc2libGUgZXJy
b3JzIGluY2x1ZGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIFVfTk9fV1JJVEVfUEVSTUlT
U0lPTgotICoKLSAqIEByZXR1cm4gVGhlIHNpZ25lZCBudW1iZXIgb2YgKG5hdGl2ZSkgc3RvcmFn
ZSB1bml0cyBieSB3aGljaAotICogICAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0IGV4cGFu
ZGVkIG9yIGNvbnRyYWN0ZWQuCi0gKgotICogQHN0YWJsZSBJQ1UgMy40Ci0gKi8KLVVfU1RBQkxF
IGludDMyX3QgVV9FWFBPUlQyCi11dGV4dF9yZXBsYWNlKFVUZXh0ICp1dCwKLSAgICAgICAgICAg
ICBpbnQ2NF90IG5hdGl2ZVN0YXJ0LCBpbnQ2NF90IG5hdGl2ZUxpbWl0LAotICAgICAgICAgICAg
IGNvbnN0IFVDaGFyICpyZXBsYWNlbWVudFRleHQsIGludDMyX3QgcmVwbGFjZW1lbnRMZW5ndGgs
Ci0gICAgICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsKLQotCi0KLS8qKgotICoKLSAqIENv
cHkgb3IgbW92ZSBhIHN1YnN0cmluZyBmcm9tIG9uZSBwb3NpdGlvbiB0byBhbm90aGVyIHdpdGhp
biB0aGUgdGV4dCwKLSAqIHdoaWxlIHJldGFpbmluZyBhbnkgbWV0YWRhdGEgYXNzb2NpYXRlZCB3
aXRoIHRoZSB0ZXh0LgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGR1cGxpY2F0ZSBvciBy
ZW9yZGVyIHN1YnN0cmluZ3MuCi0gKiBUaGUgZGVzdGluYXRpb24gaW5kZXggbXVzdCBub3Qgb3Zl
cmxhcCB0aGUgc291cmNlIHJhbmdlLgotICoKLSAqIFRoZSB0ZXh0IHRvIGJlIGNvcGllZCBvciBt
b3ZlZCBpcyBpbnNlcnRlZCBhdCBkZXN0SW5kZXg7Ci0gKiBpdCBkb2VzIG5vdCByZXBsYWNlIG9y
IG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgdGV4dC4KLSAqCi0gKiBUaGUgaXRlcmF0aW9uIHBvc2l0
aW9uIGlzIGxlZnQgZm9sbG93aW5nIHRoZSBuZXdseSBpbnNlcnRlZCB0ZXh0Ci0gKiBhdCB0aGUg
ZGVzdGluYXRpb24gcG9zaXRpb24uCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWls
YWJsZSBvbiBVVGV4dCB0eXBlcyB0aGF0IHN1cHBvcnQgd3JpdGluZywKLSAqIHRoYXQgaXMsIG9u
ZXMgd2hlcmUgdXRleHRfaXNXcml0YWJsZSgpIHJldHVybnMgVFJVRS4KLSAqCi0gKiBXaGVuIHVz
aW5nIHRoaXMgZnVuY3Rpb24sIHRoZXJlIHNob3VsZCBiZSBvbmx5IGEgc2luZ2xlIFVUZXh0IG9w
ZW5lZCBvbnRvIHRoZQotICogdW5kZXJseWluZyBuYXRpdmUgdGV4dCBzdHJpbmcuICBCZWhhdmlv
ciBhZnRlciBhIGNvcHkgb3BlcmF0aW9uCi0gKiBvbiBhIFVUZXh0IGlzIHVuZGVmaW5lZCBpbiBh
bnkgb3RoZXIgYWRkaXRpb25hbCBVVGV4dHMgdGhhdCByZWZlciB0byB0aGUKLSAqIG1vZGlmaWVk
IHN0cmluZy4KLSAqCi0gKiBAcGFyYW0gdXQgICAgICAgICAgIFRoZSBVVGV4dCByZXByZXNlbnRp
bmcgdGhlIHRleHQgdG8gYmUgb3BlcmF0ZWQgb24uCi0gKiBAcGFyYW0gbmF0aXZlU3RhcnQgIFRo
ZSBuYXRpdmUgaW5kZXggb2YgdGhlIHN0YXJ0IG9mIHRoZSByZWdpb24gdG8gYmUgY29waWVkIG9y
IG1vdmVkCi0gKiBAcGFyYW0gbmF0aXZlTGltaXQgIFRoZSBuYXRpdmUgaW5kZXggb2YgdGhlIGNo
YXJhY3RlciBwb3NpdGlvbiBmb2xsb3dpbmcgdGhlIHJlZ2lvbgotICogICAgICAgICAgICAgICAg
ICAgICB0byBiZSBjb3BpZWQuCi0gKiBAcGFyYW0gZGVzdEluZGV4ICAgIFRoZSBuYXRpdmUgZGVz
dGluYXRpb24gaW5kZXggdG8gd2hpY2ggdGhlIHNvdXJjZSBzdWJzdHJpbmcgaXMKLSAqICAgICAg
ICAgICAgICAgICAgICAgY29waWVkIG9yIG1vdmVkLgotICogQHBhcmFtIG1vdmUgICAgICAgICBJ
ZiBUUlVFLCB0aGVuIHRoZSBzdWJzdHJpbmcgaXMgbW92ZWQsIG5vdCBjb3BpZWQvZHVwbGljYXRl
ZC4KLSAqIEBwYXJhbSBzdGF0dXMgICAgICAgcmVjZWl2ZXMgYW55IGVycm9yIHN0YXR1cy4gIFBv
c3NpYmxlIGVycm9ycyBpbmNsdWRlIFVfTk9fV1JJVEVfUEVSTUlTU0lPTgotICogICAgICAgICAg
ICAgICAgICAgICAgIAotICogQHN0YWJsZSBJQ1UgMy40Ci0gKi8KLVVfU1RBQkxFIHZvaWQgVV9F
WFBPUlQyCi11dGV4dF9jb3B5KFVUZXh0ICp1dCwKLSAgICAgICAgICBpbnQ2NF90IG5hdGl2ZVN0
YXJ0LCBpbnQ2NF90IG5hdGl2ZUxpbWl0LAotICAgICAgICAgIGludDY0X3QgZGVzdEluZGV4LAot
ICAgICAgICAgIFVCb29sIG1vdmUsCi0gICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsKLQot
Ci0vKioKLSAgKiAgPHA+Ci0gICogIEZyZWV6ZSBhIFVUZXh0LiAgVGhpcyBwcmV2ZW50cyBhbnkg
bW9kaWZpY2F0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIHRleHQgaXRzZWxmCi0gICogIGJ5IG1lYW5z
IG9mIGZ1bmN0aW9ucyBvcGVyYXRpbmcgb24gdGhpcyBVVGV4dC4KLSAgKiAgPC9wPgotICAqICA8
cD4KLSAgKiAgT25jZSBmcm96ZW4sIGEgVVRleHQgY2FuIG5vdCBiZSB1bmZyb3plbi4gIFRoZSBp
bnRlbnQgaXMgdG8gZW5zdXJlCi0gICogIHRoYXQgYSB0aGUgdGV4dCB1bmRlcmx5aW5nIGEgZnJv
emVuIFVUZXh0IHdyYXBwZXIgY2Fubm90IGJlIG1vZGlmaWVkIHZpYSB0aGF0IFVUZXh0LgotICAq
ICA8L3A+Ci0gICogIDxwPgotICAqICBDYXV0aW9uOiAgZnJlZXppbmcgYSBVVGV4dCB3aWxsIGRp
c2FibGUgY2hhbmdlcyBtYWRlIHZpYSB0aGUgc3BlY2lmaWMKLSAgKiAgIGZyb3plbiBVVGV4dCB3
cmFwcGVyIG9ubHk7IGl0IHdpbGwgbm90IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgYWJpbGl0eSB0
bwotICAqICAgZGlyZWN0bHkgbW9kaWZ5IHRoZSB0ZXh0IGJ5IGJ5cGFzc2luZyB0aGUgVVRleHQu
ICBBbnkgc3VjaCBiYWNrZG9vciBtb2RpZmljYXRpb25zCi0gICogICBhcmUgYWx3YXlzIGFuIGVy
cm9yIHdoaWxlIFVUZXh0IGFjY2VzcyBpcyBvY2N1cmluZyBiZWNhdXNlIHRoZSB1bmRlcmx5aW5n
Ci0gICogICB0ZXh0IGNhbiBnZXQgb3V0IG9mIHN5bmMgd2l0aCBVVGV4dCdzIGJ1ZmZlcmluZy4K
LSAgKiAgPC9wPgotICAqCi0gICogIEBwYXJhbSB1dCAgVGhlIFVUZXh0IHRvIGJlIGZyb3plbi4K
LSAgKiAgQHNlZSAgIHV0ZXh0X2lzV3JpdGFibGUoKQotICAqICBAc3RhYmxlIElDVSAzLjYKLSAg
Ki8KLVVfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCi11dGV4dF9mcmVlemUoVVRleHQgKnV0KTsKLQot
Ci0vKioKLSAqIFVUZXh0IHByb3ZpZGVyIHByb3BlcnRpZXMgKGJpdCBmaWVsZCBpbmRleGVzKS4K
LSAqCi0gKiBAc2VlIFVUZXh0Ci0gKiBAc3RhYmxlIElDVSAzLjQKLSAqLwotZW51bSB7Ci0gICAg
LyoqCi0gICAgICogSXQgaXMgcG90ZW50aWFsbHkgdGltZSBjb25zdW1pbmcgZm9yIHRoZSBwcm92
aWRlciB0byBkZXRlcm1pbmUgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dC4KLSAgICAgKiBAc3RhYmxl
IElDVSAzLjQKLSAgICAgKi8KLSAgICBVVEVYVF9QUk9WSURFUl9MRU5HVEhfSVNfRVhQRU5TSVZF
ID0gMSwKLSAgICAvKioKLSAgICAgKiBUZXh0IGNodW5rcyByZW1haW4gdmFsaWQgYW5kIHVzYWJs
ZSB1bnRpbCB0aGUgdGV4dCBvYmplY3QgaXMgbW9kaWZpZWQgb3IKLSAgICAgKiBkZWxldGVkLCBu
b3QganVzdCB1bnRpbCB0aGUgbmV4dCB0aW1lIHRoZSBhY2Nlc3MoKSBmdW5jdGlvbiBpcyBjYWxs
ZWQKLSAgICAgKiAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLgotICAgICAqIEBzdGFibGUgSUNVIDMu
NAotICAgICAqLwotICAgIFVURVhUX1BST1ZJREVSX1NUQUJMRV9DSFVOS1MgPSAyLAotICAgIC8q
KgotICAgICAqIFRoZSBwcm92aWRlciBzdXBwb3J0cyBtb2RpZnlpbmcgdGhlIHRleHQgdmlhIHRo
ZSByZXBsYWNlKCkgYW5kIGNvcHkoKQotICAgICAqIGZ1bmN0aW9ucy4KLSAgICAgKiBAc2VlIFJl
cGxhY2VhYmxlCi0gICAgICogQHN0YWJsZSBJQ1UgMy40Ci0gICAgICovCi0gICAgVVRFWFRfUFJP
VklERVJfV1JJVEFCTEUgPSAzLAotICAgIC8qKgotICAgICAqIFRoZXJlIGlzIG1ldGEgZGF0YSBh
c3NvY2lhdGVkIHdpdGggdGhlIHRleHQuCi0gICAgICogQHNlZSBSZXBsYWNlYWJsZTo6aGFzTWV0
YURhdGEoKQotICAgICAqIEBzdGFibGUgSUNVIDMuNAotICAgICAqLyAKLSAgICBVVEVYVF9QUk9W
SURFUl9IQVNfTUVUQV9EQVRBID0gNCwKLSAgICAvKioKLSAgICAgKiBUZXh0IHByb3ZpZGVyIG93
bnMgdGhlIHRleHQgc3RvcmFnZS4KLSAgICAgKiAgR2VuZXJhbGx5IG9jY3VycyBhcyB0aGUgcmVz
dWx0IG9mIGEgZGVlcCBjbG9uZSBvZiB0aGUgVVRleHQuCi0gICAgICogIFdoZW4gY2xvc2luZyB0
aGUgVVRleHQsIHRoZSBhc3NvY2lhdGVkIHRleHQgbXVzdAotICAgICAqICBhbHNvIGJlIGNsb3Nl
ZC9kZWxldGVkL2ZyZWVkLyB3aGF0ZXZlciBpcyBhcHByb3ByaWF0ZS4KLSAgICAgKiBAc3RhYmxl
IElDVSAzLjYKLSAgICAgKi8KLSAgICAgVVRFWFRfUFJPVklERVJfT1dOU19URVhUID0gNQotfTsK
LQotLyoqCi0gICogRnVuY3Rpb24gdHlwZSBkZWNsYXJhdGlvbiBmb3IgVVRleHQuY2xvbmUoKS4K
LSAgKgotICAqICBjbG9uZSBhIFVUZXh0LiAgTXVjaCBsaWtlIG9wZW5pbmcgYSBVVGV4dCB3aGVy
ZSB0aGUgc291cmNlIHRleHQgaXMgaXRzZWxmCi0gICogIGFub3RoZXIgVVRleHQuCi0gICoKLSAg
KiAgQSBkZWVwIGNsb25lIHdpbGwgY29weSBib3RoIHRoZSBVVGV4dCBkYXRhIHN0cnVjdHVyZXMg
YW5kIHRoZSB1bmRlcmx5aW5nIHRleHQuCi0gICogIFRoZSBvcmlnaW5hbCBhbmQgY2xvbmVkIFVU
ZXh0IHdpbGwgb3BlcmF0ZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50bHk7IG1vZGlmaWNhdGlvbnMK
LSAgKiAgbWFkZSB0byB0aGUgdGV4dCBpbiBvbmUgd2lsbCBub3QgZWZmZWN0IHRoZSBvdGhlci4g
IFRleHQgcHJvdmlkZXJzIGFyZSBub3QKLSAgKiAgcmVxdWlyZWQgdG8gc3VwcG9ydCBkZWVwIGNs
b25lcy4gIFRoZSB1c2VyIG9mIGNsb25lKCkgbXVzdCBjaGVjayB0aGUgc3RhdHVzIHJldHVybgot
ICAqICBhbmQgYmUgcHJlcGFyZWQgdG8gaGFuZGxlIGZhaWx1cmVzLgotICAqCi0gICogIEEgc2hh
bGxvdyBjbG9uZSByZXBsaWNhdGVzIG9ubHkgdGhlIFVUZXh0IGRhdGEgc3RydWN0dXJlczsgaXQg
ZG9lcyBub3QgbWFrZQotICAqICBhIGNvcHkgb2YgdGhlIHVuZGVybHlpbmcgdGV4dC4gIFNoYWxs
b3cgY2xvbmVzIGNhbiBiZSB1c2VkIGFzIGFuIGVmZmljaWVudCB3YXkgdG8gCi0gICogIGhhdmUg
bXVsdGlwbGUgaXRlcmF0b3JzIGFjdGl2ZSBpbiBhIHNpbmdsZSB0ZXh0IHN0cmluZyB0aGF0IGlz
IG5vdCBiZWluZwotICAqICBtb2RpZmllZC4KLSAgKgotICAqICBBIHNoYWxsb3cgY2xvbmUgb3Bl
cmF0aW9uIG11c3Qgbm90IGZhaWwgZXhjZXB0IGZvciB0cnVseSBleGNlcHRpb25hbCBjb25kaXRp
b25zIHN1Y2gKLSAgKiAgYXMgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMuCi0gICoKLSAgKiAg
QSBVVGV4dCBhbmQgaXRzIGNsb25lIG1heSBiZSBzYWZlbHkgY29uY3VycmVudGx5IGFjY2Vzc2Vk
IGJ5IHNlcGFyYXRlIHRocmVhZHMuCi0gICogIFRoaXMgaXMgdHJ1ZSBmb3IgYm90aCBzaGFsbG93
IGFuZCBkZWVwIGNsb25lcy4KLSAgKiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBU
ZXh0IFByb3ZpZGVyIHRvIGVuc3VyZSB0aGF0IHRoaXMgdGhyZWFkIHNhZmV0eQotICAqICBjb25z
dHJhaW50IGlzIG1ldC4KLQotICAqCi0gICogIEBwYXJhbSBkZXN0ICAgQSBVVGV4dCBzdHJ1Y3Qg
dG8gYmUgZmlsbGVkIGluIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgY2xvbmUgb3BlcmF0aW9uLAot
ICAqICAgICAgICAgICAgICAgIG9yIE5VTEwgaWYgdGhlIGNsb25lIGZ1bmN0aW9uIHNob3VsZCBo
ZWFwLWFsbG9jYXRlIGEgbmV3IFVUZXh0IHN0cnVjdC4KLSAgKiAgQHBhcmFtIHNyYyAgICBUaGUg
VVRleHQgdG8gYmUgY2xvbmVkLgotICAqICBAcGFyYW0gZGVlcCAgIFRSVUUgdG8gcmVxdWVzdCBh
IGRlZXAgY2xvbmUsIEZBTFNFIGZvciBhIHNoYWxsb3cgY2xvbmUuCi0gICogIEBwYXJhbSBzdGF0
dXMgRXJyb3JzIGFyZSByZXR1cm5lZCBoZXJlLiAgRm9yIGRlZXAgY2xvbmVzLCBVX1VOU1VQUE9S
VEVEX0VSUk9SCi0gICogICAgICAgICAgICAgICAgc2hvdWxkIGJlIHJldHVybmVkIGlmIHRoZSB0
ZXh0IHByb3ZpZGVyIGlzIHVuYWJsZSB0byBjbG9uZSB0aGUKLSAgKiAgICAgICAgICAgICAgICBv
cmlnaW5hbCB0ZXh0LgotICAqICBAcmV0dXJuICAgICAgIFRoZSBuZXdseSBjcmVhdGVkIGNsb25l
LCBvciBOVUxMIGlmIHRoZSBjbG9uZSBvcGVyYXRpb24gZmFpbGVkLgotICAqCi0gICogQHN0YWJs
ZSBJQ1UgMy40Ci0gICovCi10eXBlZGVmIFVUZXh0ICogVV9DQUxMQ09OVgotVVRleHRDbG9uZShV
VGV4dCAqZGVzdCwgY29uc3QgVVRleHQgKnNyYywgVUJvb2wgZGVlcCwgVUVycm9yQ29kZSAqc3Rh
dHVzKTsKLQotCi0vKioKLSAqIEZ1bmN0aW9uIHR5cGUgZGVjbGFyYXRpb24gZm9yIFVUZXh0Lm5h
dGl2ZUxlbmd0aCgpLgotICoKLSAqIEBwYXJhbSB1dCB0aGUgVVRleHQgdG8gZ2V0IHRoZSBsZW5n
dGggb2YuCi0gKiBAcmV0dXJuIHRoZSBsZW5ndGgsIGluIHRoZSBuYXRpdmUgdW5pdHMgb2YgdGhl
IG9yaWdpbmFsIHRleHQgc3RyaW5nLgotICogQHNlZSBVVGV4dAotICogQHN0YWJsZSBJQ1UgMy40
Ci0gKi8KLXR5cGVkZWYgaW50NjRfdCBVX0NBTExDT05WCi1VVGV4dE5hdGl2ZUxlbmd0aChVVGV4
dCAqdXQpOwotCi0vKioKLSAqIEZ1bmN0aW9uIHR5cGUgZGVjbGFyYXRpb24gZm9yIFVUZXh0LmFj
Y2VzcygpLiAgR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgdGV4dCBjaHVuawotICogIGNvbnRh
aW5pbmcgdGhlIHRleHQgYXQgYSByZXF1ZXN0ZWQgbmF0aXZlIGluZGV4LiAgVGhlIFVUZXh0J3Mg
aXRlcmF0aW9uCi0gKiAgcG9zaXRpb24gd2lsbCBiZSBsZWZ0IGF0IHRoZSByZXF1ZXN0ZWQgaW5k
ZXguICBJZiB0aGUgaW5kZXggaXMgb3V0Ci0gKiAgb2YgYm91bmRzLCB0aGUgaXRlcmF0aW9uIHBv
c2l0aW9uIHdpbGwgYmUgbGVmdCBhdCB0aGUgc3RhcnQgb3IgZW5kCi0gKiAgb2YgdGhlIHN0cmlu
ZywgYXMgYXBwcm9wcmlhdGUuCi0gKgotICogIENodW5rcyBtdXN0IGJlZ2luIGFuZCBlbmQgb24g
Y29kZSBwb2ludCBib3VuZGFyaWVzLiAgQSBzaW5nbGUgY29kZSBwb2ludAotICogIGNvbXByaXNl
ZCBvZiBtdWx0aXBsZSBzdG9yYWdlIHVuaXRzIG11c3QgbmV2ZXIgc3BhbiBhIGNodW5rIGJvdW5k
YXJ5LgotICoKLSAqCi0gKiBAcGFyYW0gdXQgICAgICAgICAgdGhlIFVUZXh0IGJlaW5nIGFjY2Vz
c2VkLgotICogQHBhcmFtIG5hdGl2ZUluZGV4IFJlcXVlc3RlZCBpbmRleCBvZiB0aGUgdGV4dCB0
byBiZSBhY2Nlc3NlZC4KLSAqIEBwYXJhbSBmb3J3YXJkICAgICBJZiBUUlVFLCB0aGVuIHRoZSBy
ZXR1cm5lZCBjaHVuayBtdXN0IGNvbnRhaW4gdGV4dAotICogICAgICAgICAgICAgICAgICAgIHN0
YXJ0aW5nIGZyb20gdGhlIGluZGV4LCBzbyB0aGF0IHN0YXJ0PD1pbmRleDxsaW1pdC4KLSAqICAg
ICAgICAgICAgICAgICAgICBJZiBGQUxTRSwgdGhlbiB0aGUgcmV0dXJuZWQgY2h1bmsgbXVzdCBj
b250YWluIHRleHQKLSAqICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIGluZGV4LCBzbyB0
aGF0IHN0YXJ0PGluZGV4PD1saW1pdC4KLSAqIEByZXR1cm4gICAgICAgICAgICBUcnVlIGlmIHRo
ZSByZXF1ZXN0ZWQgaW5kZXggY291bGQgYmUgYWNjZXNzZWQuICBUaGUgY2h1bmsKLSAqICAgICAg
ICAgICAgICAgICAgICB3aWxsIGNvbnRhaW4gdGhlIHJlcXVlc3RlZCB0ZXh0LgotICogICAgICAg
ICAgICAgICAgICAgIEZhbHNlIHZhbHVlIGlmIGEgY2h1bmsgY2Fubm90IGJlIGFjY2Vzc2VkCi0g
KiAgICAgICAgICAgICAgICAgICAgKHRoZSByZXF1ZXN0ZWQgaW5kZXggaXMgb3V0IG9mIGJvdW5k
cykuCi0gKgotICogQHNlZSBVVGV4dAotICogQHN0YWJsZSBJQ1UgMy40Ci0gKi8KLXR5cGVkZWYg
VUJvb2wgVV9DQUxMQ09OVgotVVRleHRBY2Nlc3MoVVRleHQgKnV0LCBpbnQ2NF90IG5hdGl2ZUlu
ZGV4LCBVQm9vbCBmb3J3YXJkKTsKLQotLyoqCi0gKiBGdW5jdGlvbiB0eXBlIGRlY2xhcmF0aW9u
IGZvciBVVGV4dC5leHRyYWN0KCkuCi0gKgotICogRXh0cmFjdCB0ZXh0IGZyb20gYSBVVGV4dCBp
bnRvIGEgVUNoYXIgYnVmZmVyLiAgVGhlIHJhbmdlIG9mIHRleHQgdG8gYmUgZXh0cmFjdGVkCi0g
KiBpcyBzcGVjaWZpZWQgaW4gdGhlIG5hdGl2ZSBpbmRpY2VzIG9mIHRoZSBVVGV4dCBwcm92aWRl
ci4gIFRoZXNlIG1heSBub3QgbmVjZXNzYXJpbHkKLSAqIGJlIFVURi0xNiBpbmRpY2VzLgotICog
PHA+Ci0gKiBUaGUgc2l6ZSAobnVtYmVyIG9mIDE2IGJpdCBVQ2hhcnMpIGluIHRoZSBkYXRhIHRv
IGJlIGV4dHJhY3RlZCBpcyByZXR1cm5lZC4gIFRoZQotICogZnVsbCBhbW91bnQgaXMgcmV0dXJu
ZWQsIGV2ZW4gd2hlbiB0aGUgc3BlY2lmaWVkIGJ1ZmZlciBzaXplIGlzIHNtYWxsZXIuCi0gKiA8
cD4KLSAqIFRoZSBleHRyYWN0ZWQgc3RyaW5nIHdpbGwgKGlmIHlvdSBhcmUgYSB1c2VyKSAvIG11
c3QgKGlmIHlvdSBhcmUgYSB0ZXh0IHByb3ZpZGVyKQotICogYmUgTlVMLXRlcm1pbmF0ZWQgaWYg
dGhlcmUgaXMgc3VmZmljaWVudCBzcGFjZSBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgotICoK
LSAqIEBwYXJhbSAgdXQgICAgICAgICAgICB0aGUgVVRleHQgZnJvbSB3aGljaCB0byBleHRyYWN0
IGRhdGEuCi0gKiBAcGFyYW0gIG5hdGl2ZVN0YXJ0ICAgdGhlIG5hdGl2ZSBpbmRleCBvZiB0aGUg
Zmlyc3QgY2hhcmFjZXIgdG8gZXh0cmFjdC4KLSAqIEBwYXJhbSAgbmF0aXZlTGltaXQgICB0aGUg
bmF0aXZlIHN0cmluZyBpbmRleCBvZiB0aGUgcG9zaXRpb24gZm9sbG93aW5nIHRoZSBsYXN0Ci0g
KiAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHRvIGV4dHJhY3QuCi0gKiBAcGFyYW0g
IGRlc3QgICAgICAgICAgdGhlIFVDaGFyIChVVEYtMTYpIGJ1ZmZlciBpbnRvIHdoaWNoIHRoZSBl
eHRyYWN0ZWQgdGV4dCBpcyBwbGFjZWQKLSAqIEBwYXJhbSAgZGVzdENhcGFjaXR5ICBUaGUgc2l6
ZSwgaW4gVUNoYXJzLCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiAgTWF5IGJlIHplcm8KLSAq
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJlY29tcHV0aW5nIHRoZSByZXF1aXJlZCBzaXpl
LgotICogQHBhcmFtICBzdGF0dXMgICAgICAgIHJlY2VpdmVzIGFueSBlcnJvciBzdGF0dXMuCi0g
KiAgICAgICAgICAgICAgICAgICAgICAgSWYgVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1I6IFJldHVy
bnMgbnVtYmVyIG9mIFVDaGFycyBmb3IKLSAqICAgICAgICAgICAgICAgICAgICAgICBwcmVmbGln
aHRpbmcuCi0gKiBAcmV0dXJuIE51bWJlciBvZiBVQ2hhcnMgaW4gdGhlIGRhdGEuICBEb2VzIG5v
dCBpbmNsdWRlIGEgdHJhaWxpbmcgTlVMLgotICoKLSAqIEBzdGFibGUgSUNVIDMuNAotICovCi10
eXBlZGVmIGludDMyX3QgVV9DQUxMQ09OVgotVVRleHRFeHRyYWN0KFVUZXh0ICp1dCwKLSAgICAg
ICAgICAgICBpbnQ2NF90IG5hdGl2ZVN0YXJ0LCBpbnQ2NF90IG5hdGl2ZUxpbWl0LAotICAgICAg
ICAgICAgIFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKLSAgICAgICAgICAgICBV
RXJyb3JDb2RlICpzdGF0dXMpOwotCi0vKioKLSAqIEZ1bmN0aW9uIHR5cGUgZGVjbGFyYXRpb24g
Zm9yIFVUZXh0LnJlcGxhY2UoKS4KLSAqCi0gKiBSZXBsYWNlIGEgcmFuZ2Ugb2YgdGhlIG9yaWdp
bmFsIHRleHQgd2l0aCBhIHJlcGxhY2VtZW50IHRleHQuCi0gKgotICogTGVhdmVzIHRoZSBjdXJy
ZW50IGl0ZXJhdGlvbiBwb3NpdGlvbiBhdCB0aGUgcG9zaXRpb24gZm9sbG93aW5nIHRoZQotICog
IG5ld2x5IGluc2VydGVkIHJlcGxhY2VtZW50IHRleHQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBu
ZWVkIG9ubHkgYmUgaW1wbGVtZW50ZWQgb24gVVRleHQgdHlwZXMgdGhhdCBzdXBwb3J0IHdyaXRp
bmcuCi0gKgotICogV2hlbiB1c2luZyB0aGlzIGZ1bmN0aW9uLCB0aGVyZSBzaG91bGQgYmUgb25s
eSBhIHNpbmdsZSBVVGV4dCBvcGVuZWQgb250byB0aGUKLSAqIHVuZGVybHlpbmcgbmF0aXZlIHRl
eHQgc3RyaW5nLiAgVGhlIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGUK
LSAqIHRleHQgY2h1bmsgd2l0aGluIHRoZSBVVGV4dCB0byByZWZsZWN0IHRoZSB1cGRhdGVkIGl0
ZXJhdGlvbiBwb3NpdGlvbiwKLSAqIHRha2luZyBpbnRvIGFjY291bnQgYW55IGNoYW5nZXMgdG8g
dGhlIHVuZGVybHlpbmcgc3RyaW5nJ3Mgc3RydWN0dXJlIGNhdXNlZAotICogYnkgdGhlIHJlcGxh
Y2Ugb3BlcmF0aW9uLgotICoKLSAqIEBwYXJhbSB1dCAgICAgICAgICAgICAgIHRoZSBVVGV4dCBy
ZXByZXNlbnRpbmcgdGhlIHRleHQgdG8gYmUgb3BlcmF0ZWQgb24uCi0gKiBAcGFyYW0gbmF0aXZl
U3RhcnQgICAgICB0aGUgaW5kZXggb2YgdGhlIHN0YXJ0IG9mIHRoZSByZWdpb24gdG8gYmUgcmVw
bGFjZWQKLSAqIEBwYXJhbSBuYXRpdmVMaW1pdCAgICAgIHRoZSBpbmRleCBvZiB0aGUgY2hhcmFj
dGVyIGZvbGxvd2luZyB0aGUgcmVnaW9uIHRvIGJlIHJlcGxhY2VkLgotICogQHBhcmFtIHJlcGxh
Y2VtZW50VGV4dCAgcG9pbnRlciB0byB0aGUgcmVwbGFjZW1lbnQgdGV4dAotICogQHBhcmFtIHJl
cGxhY21lbnRMZW5ndGggbGVuZ3RoIG9mIHRoZSByZXBsYWNlbWVudCB0ZXh0IGluIFVDaGFycywg
b3IgLTEgaWYgdGhlIHRleHQgaXMgTlVMIHRlcm1pbmF0ZWQuCi0gKiBAcGFyYW0gc3RhdHVzICAg
ICAgICAgICByZWNlaXZlcyBhbnkgZXJyb3Igc3RhdHVzLiAgUG9zc2libGUgZXJyb3JzIGluY2x1
ZGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIFVfTk9fV1JJVEVfUEVSTUlTU0lPTgotICoK
LSAqIEByZXR1cm4gVGhlIHNpZ25lZCBudW1iZXIgb2YgKG5hdGl2ZSkgc3RvcmFnZSB1bml0cyBi
eSB3aGljaAotICogICAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0IGV4cGFuZGVkIG9yIGNv
bnRyYWN0ZWQuCi0gKgotICogQHN0YWJsZSBJQ1UgMy40Ci0gKi8KLXR5cGVkZWYgaW50MzJfdCBV
X0NBTExDT05WCi1VVGV4dFJlcGxhY2UoVVRleHQgKnV0LAotICAgICAgICAgICAgIGludDY0X3Qg
bmF0aXZlU3RhcnQsIGludDY0X3QgbmF0aXZlTGltaXQsCi0gICAgICAgICAgICAgY29uc3QgVUNo
YXIgKnJlcGxhY2VtZW50VGV4dCwgaW50MzJfdCByZXBsYWNtZW50TGVuZ3RoLAotICAgICAgICAg
ICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7Ci0KLS8qKgotICogRnVuY3Rpb24gdHlwZSBkZWNsYXJh
dGlvbiBmb3IgVVRleHQuY29weSgpLgotICoKLSAqIENvcHkgb3IgbW92ZSBhIHN1YnN0cmluZyBm
cm9tIG9uZSBwb3NpdGlvbiB0byBhbm90aGVyIHdpdGhpbiB0aGUgdGV4dCwKLSAqIHdoaWxlIHJl
dGFpbmluZyBhbnkgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSB0ZXh0LgotICogVGhpcyBm
dW5jdGlvbiBpcyB1c2VkIHRvIGR1cGxpY2F0ZSBvciByZW9yZGVyIHN1YnN0cmluZ3MuCi0gKiBU
aGUgZGVzdGluYXRpb24gaW5kZXggbXVzdCBub3Qgb3ZlcmxhcCB0aGUgc291cmNlIHJhbmdlLgot
ICoKLSAqIFRoZSB0ZXh0IHRvIGJlIGNvcGllZCBvciBtb3ZlZCBpcyBpbnNlcnRlZCBhdCBkZXN0
SW5kZXg7Ci0gKiBpdCBkb2VzIG5vdCByZXBsYWNlIG9yIG92ZXJ3cml0ZSBhbnkgZXhpc3Rpbmcg
dGV4dC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIG5lZWQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3Ig
VVRleHQgdHlwZXMgdGhhdCBzdXBwb3J0IHdyaXRpbmcuCi0gKgotICogV2hlbiB1c2luZyB0aGlz
IGZ1bmN0aW9uLCB0aGVyZSBzaG91bGQgYmUgb25seSBhIHNpbmdsZSBVVGV4dCBvcGVuZWQgb250
byB0aGUKLSAqIHVuZGVybHlpbmcgbmF0aXZlIHRleHQgc3RyaW5nLiAgVGhlIGZ1bmN0aW9uIGlz
IHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGUKLSAqIHRleHQgY2h1bmsgd2l0aGluIHRoZSBV
VGV4dCB0byByZWZsZWN0IHRoZSB1cGRhdGVkIGl0ZXJhdGlvbiBwb3NpdGlvbiwKLSAqIHRha2lu
ZyBpbnRvIGFjY291bnQgYW55IGNoYW5nZXMgdG8gdGhlIHVuZGVybHlpbmcgc3RyaW5nJ3Mgc3Ry
dWN0dXJlIGNhdXNlZAotICogYnkgdGhlIHJlcGxhY2Ugb3BlcmF0aW9uLgotICoKLSAqIEBwYXJh
bSB1dCAgICAgICAgICAgVGhlIFVUZXh0IHJlcHJlc2VudGluZyB0aGUgdGV4dCB0byBiZSBvcGVy
YXRlZCBvbi4KLSAqIEBwYXJhbSBuYXRpdmVTdGFydCAgVGhlIGluZGV4IG9mIHRoZSBzdGFydCBv
ZiB0aGUgcmVnaW9uIHRvIGJlIGNvcGllZCBvciBtb3ZlZAotICogQHBhcmFtIG5hdGl2ZUxpbWl0
ICBUaGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIHJlZ2lvbiB0byBiZSBy
ZXBsYWNlZC4KLSAqIEBwYXJhbSBuYXRpdmVEZXN0ICAgVGhlIGRlc3RpbmF0aW9uIGluZGV4IHRv
IHdoaWNoIHRoZSBzb3VyY2Ugc3Vic3RyaW5nIGlzIGNvcGllZCBvciBtb3ZlZC4KLSAqIEBwYXJh
bSBtb3ZlICAgICAgICAgSWYgVFJVRSwgdGhlbiB0aGUgc3Vic3RyaW5nIGlzIG1vdmVkLCBub3Qg
Y29waWVkL2R1cGxpY2F0ZWQuCi0gKiBAcGFyYW0gc3RhdHVzICAgICAgIHJlY2VpdmVzIGFueSBl
cnJvciBzdGF0dXMuICBQb3NzaWJsZSBlcnJvcnMgaW5jbHVkZSBVX05PX1dSSVRFX1BFUk1JU1NJ
T04KLSAqCi0gKiBAc3RhYmxlIElDVSAzLjQKLSAqLwotdHlwZWRlZiB2b2lkIFVfQ0FMTENPTlYK
LVVUZXh0Q29weShVVGV4dCAqdXQsCi0gICAgICAgICAgaW50NjRfdCBuYXRpdmVTdGFydCwgaW50
NjRfdCBuYXRpdmVMaW1pdCwKLSAgICAgICAgICBpbnQ2NF90IG5hdGl2ZURlc3QsCi0gICAgICAg
ICAgVUJvb2wgbW92ZSwKLSAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOwotCi0vKioKLSAq
IEZ1bmN0aW9uIHR5cGUgZGVjbGFyYXRpb24gZm9yIFVUZXh0Lm1hcE9mZnNldFRvTmF0aXZlKCku
Ci0gKiBNYXAgZnJvbSB0aGUgY3VycmVudCBVQ2hhciBvZmZzZXQgd2l0aGluIHRoZSBjdXJyZW50
IHRleHQgY2h1bmsgdG8KLSAqICB0aGUgY29ycmVzcG9uZGluZyBuYXRpdmUgaW5kZXggaW4gdGhl
IG9yaWdpbmFsIHNvdXJjZSB0ZXh0LgotICoKLSAqIFRoaXMgaXMgcmVxdWlyZWQgb25seSBmb3Ig
dGV4dCBwcm92aWRlcnMgdGhhdCBkbyBub3QgdXNlIG5hdGl2ZSBVVEYtMTYgaW5kZXhlcy4KLSAq
Ci0gKiBAcGFyYW0gdXQgICAgIHRoZSBVVGV4dC4KLSAqIEByZXR1cm4gQWJzb2x1dGUgKG5hdGl2
ZSkgaW5kZXggY29ycmVzcG9uZGluZyB0byBjaHVua09mZnNldCBpbiB0aGUgY3VycmVudCBjaHVu
ay4KLSAqICAgICAgICAgVGhlIHJldHVybmVkIG5hdGl2ZSBpbmRleCBzaG91bGQgYWx3YXlzIGJl
IHRvIGEgY29kZSBwb2ludCBib3VuZGFyeS4KLSAqCi0gKiBAc3RhYmxlIElDVSAzLjQKLSAqLwot
dHlwZWRlZiBpbnQ2NF90IFVfQ0FMTENPTlYKLVVUZXh0TWFwT2Zmc2V0VG9OYXRpdmUoY29uc3Qg
VVRleHQgKnV0KTsKLQotLyoqCi0gKiBGdW5jdGlvbiB0eXBlIGRlY2xhcmF0aW9uIGZvciBVVGV4
dC5tYXBJbmRleFRvVVRGMTYoKS4KLSAqIE1hcCBmcm9tIGEgbmF0aXZlIGluZGV4IHRvIGEgVUNo
YXIgb2Zmc2V0IHdpdGhpbiBhIHRleHQgY2h1bmsuCi0gKiBCZWhhdmlvciBpcyB1bmRlZmluZWQg
aWYgdGhlIG5hdGl2ZSBpbmRleCBkb2VzIG5vdCBmYWxsIHdpdGhpbiB0aGUKLSAqICAgY3VycmVu
dCBjaHVuay4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIG9ubHkgZm9yIHRleHQg
cHJvdmlkZXJzIHRoYXQgZG8gbm90IHVzZSBuYXRpdmUgVVRGLTE2IGluZGV4ZXMuCi0gKgotICog
QHBhcmFtIHV0ICAgICAgICAgIFRoZSBVVGV4dCBjb250YWluaW5nIHRoZSB0ZXh0IGNodW5rLgot
ICogQHBhcmFtIG5hdGl2ZUluZGV4IEFic29sdXRlIChuYXRpdmUpIHRleHQgaW5kZXgsIGNodW5r
LT5zdGFydDw9aW5kZXg8PWNodW5rLT5saW1pdC4KLSAqIEByZXR1cm4gICAgICAgICAgICBDaHVu
ay1yZWxhdGl2ZSBVVEYtMTYgb2Zmc2V0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBu
YXRpdmUKLSAqICAgICAgICAgICAgICAgICAgICBpbmRleC4KLSAqCi0gKiBAc3RhYmxlIElDVSAz
LjQKLSAqLwotdHlwZWRlZiBpbnQzMl90IFVfQ0FMTENPTlYKLVVUZXh0TWFwTmF0aXZlSW5kZXhU
b1VURjE2KGNvbnN0IFVUZXh0ICp1dCwgaW50NjRfdCBuYXRpdmVJbmRleCk7Ci0KLQotLyoqCi0g
KiBGdW5jdGlvbiB0eXBlIGRlY2xhcmF0aW9uIGZvciBVVGV4dC51dGV4dENsb3NlKCkuCi0gKgot
ICogQSBUZXh0IFByb3ZpZGVyIGNsb3NlIGZ1bmN0aW9uIGlzIG9ubHkgcmVxdWlyZWQgZm9yIHBy
b3ZpZGVyIHR5cGVzIHRoYXQgbWFrZQotICogIGFsbG9jYXRpb25zIGluIHRoZWlyIG9wZW4gZnVu
Y3Rpb24gKG9yIG90aGVyIGZ1bmN0aW9ucykgdGhhdCBtdXN0IGJlIAotICogIGNsZWFuZWQgd2hl
biB0aGUgVVRleHQgaXMgY2xvc2VkLgotICoKLSAqIFRoZSBhbGxvY2F0aW9uIG9mIHRoZSBVVGV4
dCBzdHJ1Y3QgaXRzZWxmIGFuZCBhbnkgImV4dHJhIiBzdG9yYWdlCi0gKiBhc3NvY2lhdGVkIHdp
dGggdGhlIFVUZXh0IGlzIGhhbmRsZWQgYnkgdGhlIGNvbW1vbiBVVGV4dCBpbXBsZW1lbnRhdGlv
bgotICogYW5kIGRvZXMgbm90IHJlcXVpcmUgcHJvdmlkZXIgc3BlY2lmaWMgY2xlYW51cCBpbiBh
IGNsb3NlIGZ1bmN0aW9uLgotICoKLSAqIE1vc3QgVVRleHQgcHJvdmlkZXIgaW1wbGVtZW50YXRp
b25zIGRvIG5vdCBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgotICoKLSAqIEBwYXJh
bSB1dCBBIFVUZXh0IG9iamVjdCB0byBiZSBjbG9zZWQuCi0gKgotICogQHN0YWJsZSBJQ1UgMy40
Ci0gKi8KLXR5cGVkZWYgdm9pZCBVX0NBTExDT05WCi1VVGV4dENsb3NlKFVUZXh0ICp1dCk7Ci0K
LQotLyoqCi0gICogICAocHVibGljKSAgRnVuY3Rpb24gZGlzcGF0Y2ggdGFibGUgZm9yIFVUZXh0
LgotICAqICAgICAgICAgICAgIENvbmNlcHR1YWxseSB2ZXJ5IG11Y2ggbGlrZSBhIEMrKyBWaXJ0
dWFsIEZ1bmN0aW9uIFRhYmxlLgotICAqICAgICAgICAgICAgIFRoaXMgc3RydWN0IGRlZmluZXMg
dGhlIG9yZ2FuaXphdGlvbiBvZiB0aGUgdGFibGUuCi0gICogICAgICAgICAgICAgRWFjaCB0ZXh0
IHByb3ZpZGVyIGltcGxlbWVudGF0aW9uIG11c3QgcHJvdmlkZSBhbgotICAqICAgICAgICAgICAg
ICBhY3R1YWwgdGFibGUgdGhhdCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBm
dW5jdGlvbnMKLSAgKiAgICAgICAgICAgICAgZm9yIHRoZSB0eXBlIG9mIHRleHQgYmVpbmcgaGFu
ZGxlZC4KLSAgKiAgIEBzdGFibGUgSUNVIDMuNgotICAqLwotc3RydWN0IFVUZXh0RnVuY3Mgewot
ICAgIC8qKgotICAgICAqICAgKHB1YmxpYykgIEZ1bmN0aW9uIHRhYmxlIHNpemUsIHNpemVvZihV
VGV4dEZ1bmNzKQotICAgICAqICAgICAgICAgICAgIEludGVuZGVkIGZvciB1c2Ugc2hvdWxkIHRo
ZSB0YWJsZSBncm93IHRvIGFjY29tb2RhdGUgYWRkZWQKLSAgICAgKiAgICAgICAgICAgICBmdW5j
dGlvbnMgaW4gdGhlIGZ1dHVyZSwgdG8gYWxsb3cgdGVzdHMgZm9yIG9sZGVyIGZvcm1hdAotICAg
ICAqICAgICAgICAgICAgIGZ1bmN0aW9uIHRhYmxlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBl
eHRlbnNpb25zLgotICAgICAqCi0gICAgICogICAgICAgICAgICAgRmllbGRzIGFyZSBwbGFjZWQg
Zm9yIG9wdGltYWwgYWxpZ25tZW50IG9uCi0gICAgICogICAgICAgICAgICAgMzIvNjQvMTI4LWJp
dC1wb2ludGVyIG1hY2hpbmVzLCBieSBub3JtYWxseSBncm91cGluZyB0b2dldGhlcgotICAgICAq
ICAgICAgICAgICAgIDQgMzItYml0IGZpZWxkcywKLSAgICAgKiAgICAgICAgICAgICA0IHBvaW50
ZXJzLAotICAgICAqICAgICAgICAgICAgIDIgNjQtYml0IGZpZWxkcwotICAgICAqICAgICAgICAg
ICAgIGluIHNlcXVlbmNlLgotICAgICAqICAgQHN0YWJsZSBJQ1UgMy42Ci0gICAgICovCi0gICAg
aW50MzJfdCAgICAgICB0YWJsZVNpemU7Ci0KLSAgICAvKioKLSAgICAgICogICAocHJpdmF0ZSkg
IEFsaWdubWVudCBwYWRkaW5nLgotICAgICAgKiAgICAgICAgICAgICAgRG8gbm90IHVzZSwgcmVz
ZXJ2ZWQgZm9yIHVzZSBieSB0aGUgVVRleHQgZnJhbWV3b3JrIG9ubHkuCi0gICAgICAqICAgQGlu
dGVybmFsCi0gICAgICAqLwotICAgIGludDMyX3QgICAgICAgcmVzZXJ2ZWQxLCAvKiogQGludGVy
bmFsICovIHJlc2VydmVkMiwgLyoqIEBpbnRlcm5hbCAqLyByZXNlcnZlZDM7Ci0KLQotICAgIC8q
KgotICAgICAqIChwdWJsaWMpIEZ1bmN0aW9uIHBvaW50ZXIgZm9yIFVUZXh0Q2xvbmUKLSAgICAg
KgotICAgICAqIEBzZWUgVVRleHRDbG9uZQotICAgICAqIEBzdGFibGUgSUNVIDMuNgotICAgICAq
LwotICAgIFVUZXh0Q2xvbmUgKmNsb25lOwotCi0gICAgLyoqCi0gICAgICogKHB1YmxpYykgZnVu
Y3Rpb24gcG9pbnRlciBmb3IgVVRleHRMZW5ndGgKLSAgICAgKiBNYXkgYmUgZXhwZW5zaXZlIHRv
IGNvbXB1dGUhCi0gICAgICoKLSAgICAgKiBAc2VlIFVUZXh0TGVuZ3RoCi0gICAgICogQHN0YWJs
ZSBJQ1UgMy42Ci0gICAgICovCi0gICAgVVRleHROYXRpdmVMZW5ndGggKm5hdGl2ZUxlbmd0aDsK
LQotICAgIC8qKgotICAgICAqIChwdWJsaWMpIEZ1bmN0aW9uIHBvaW50ZXIgZm9yIFVUZXh0QWNj
ZXNzLgotICAgICAqCi0gICAgICogQHNlZSBVVGV4dEFjY2VzcwotICAgICAqIEBzdGFibGUgSUNV
IDMuNgotICAgICAqLwotICAgIFVUZXh0QWNjZXNzICphY2Nlc3M7Ci0KLSAgICAvKioKLSAgICAg
KiAocHVibGljKSBGdW5jdGlvbiBwb2ludGVyIGZvciBVVGV4dEV4dHJhY3QuCi0gICAgICoKLSAg
ICAgKiBAc2VlIFVUZXh0RXh0cmFjdAotICAgICAqIEBzdGFibGUgSUNVIDMuNgotICAgICAqLwot
ICAgIFVUZXh0RXh0cmFjdCAqZXh0cmFjdDsKLQotICAgIC8qKgotICAgICAqIChwdWJsaWMpIEZ1
bmN0aW9uIHBvaW50ZXIgZm9yIFVUZXh0UmVwbGFjZS4KLSAgICAgKgotICAgICAqIEBzZWUgVVRl
eHRSZXBsYWNlCi0gICAgICogQHN0YWJsZSBJQ1UgMy42Ci0gICAgICovCi0gICAgVVRleHRSZXBs
YWNlICpyZXBsYWNlOwotCi0gICAgLyoqCi0gICAgICogKHB1YmxpYykgRnVuY3Rpb24gcG9pbnRl
ciBmb3IgVVRleHRDb3B5LgotICAgICAqCi0gICAgICogQHNlZSBVVGV4dENvcHkKLSAgICAgKiBA
c3RhYmxlIElDVSAzLjYKLSAgICAgKi8KLSAgICBVVGV4dENvcHkgKmNvcHk7Ci0KLSAgICAvKioK
LSAgICAgKiAocHVibGljKSBGdW5jdGlvbiBwb2ludGVyIGZvciBVVGV4dE1hcE9mZnNldFRvTmF0
aXZlLgotICAgICAqCi0gICAgICogQHNlZSBVVGV4dE1hcE9mZnNldFRvTmF0aXZlCi0gICAgICog
QHN0YWJsZSBJQ1UgMy42Ci0gICAgICovCi0gICAgVVRleHRNYXBPZmZzZXRUb05hdGl2ZSAqbWFw
T2Zmc2V0VG9OYXRpdmU7Ci0KLSAgICAvKioKLSAgICAgKiAocHVibGljKSBGdW5jdGlvbiBwb2lu
dGVyIGZvciBVVGV4dE1hcE5hdGl2ZUluZGV4VG9VVEYxNi4KLSAgICAgKgotICAgICAqIEBzZWUg
VVRleHRNYXBOYXRpdmVJbmRleFRvVVRGMTYKLSAgICAgKiBAc3RhYmxlIElDVSAzLjYKLSAgICAg
Ki8KLSAgICBVVGV4dE1hcE5hdGl2ZUluZGV4VG9VVEYxNiAqbWFwTmF0aXZlSW5kZXhUb1VURjE2
OwotCi0gICAgLyoqCi0gICAgICogKHB1YmxpYykgRnVuY3Rpb24gcG9pbnRlciBmb3IgVVRleHRD
bG9zZS4KLSAgICAgICoKLSAgICAgICogQHNlZSBVVGV4dENsb3NlCi0gICAgICAqIEBzdGFibGUg
SUNVIDMuNgotICAgICAgKi8KLSAgICBVVGV4dENsb3NlICAqY2xvc2U7Ci0KLSAgICAvKioKLSAg
ICAgICogKHByaXZhdGUpICBTcGFyZSBmdW5jdGlvbiBwb2ludGVyCi0gICAgICAqIEBpbnRlcm5h
bAotICAgICAgKi8KLSAgICBVVGV4dENsb3NlICAqc3BhcmUxOwotICAgIAotICAgIC8qKgotICAg
ICAgKiAocHJpdmF0ZSkgIFNwYXJlIGZ1bmN0aW9uIHBvaW50ZXIKLSAgICAgICogQGludGVybmFs
Ci0gICAgICAqLwotICAgIFVUZXh0Q2xvc2UgICpzcGFyZTI7Ci0KLSAgICAvKioKLSAgICAgICog
KHByaXZhdGUpICBTcGFyZSBmdW5jdGlvbiBwb2ludGVyCi0gICAgICAqIEBpbnRlcm5hbAotICAg
ICAgKi8KLSAgICBVVGV4dENsb3NlICAqc3BhcmUzOwotCi19OwotLyoqCi0gKiBGdW5jdGlvbiBk
aXNwYXRjaCB0YWJsZSBmb3IgVVRleHQKLSAqIEBzZWUgVVRleHRGdW5jcwotICovCi10eXBlZGVm
IHN0cnVjdCBVVGV4dEZ1bmNzIFVUZXh0RnVuY3M7Ci0KLSAvKioKLSAgKiAgIFVUZXh0IHN0cnVj
dC4gIFByb3ZpZGVzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgZ2VuZXJpYyBVVGV4dCBhY2Nl
c3MgY29kZQotICAqICAgICAgICAgICAgICAgICAgYW5kIHRoZSBVVGV4dCBwcm92aWRlciBjb2Rl
IHRoYXQgd29ya3Mgb24gc3BlY2lmaWMga2luZHMgb2YKLSAgKiAgICAgICAgICAgICAgICAgIHRl
eHQgIChVVEYtOCwgbm9uY29udGlndW91cyBVVEYtMTYsIHdoYXRldmVyLikKLSAgKgotICAqICAg
ICAgICAgICAgICAgICAgQXBwbGljYXRpb25zIHRoYXQgYXJlIHVzaW5nIHByZWRlZmluZWQgdHlw
ZXMgb2YgdGV4dCBwcm92aWRlcnMKLSAgKiAgICAgICAgICAgICAgICAgIHRvIHBhc3MgdGV4dCBk
YXRhIHRvIElDVSBzZXJ2aWNlcyB3aWxsIGhhdmUgbm8gbmVlZCB0byB2aWV3IHRoZQotICAqICAg
ICAgICAgICAgICAgICAgaW50ZXJuYWxzIG9mIHRoZSBVVGV4dCBzdHJ1Y3RzIHRoYXQgdGhleSBv
cGVuLgotICAqCi0gICogQHN0YWJsZSBJQ1UgMy42Ci0gICovCi1zdHJ1Y3QgVVRleHQgewotICAg
IC8qKgotICAgICAqICAgICAocHJpdmF0ZSkgIE1hZ2ljLiAgVXNlZCB0byBoZWxwIGRldGVjdCB3
aGVuIFVUZXh0IGZ1bmN0aW9ucyBhcmUgaGFuZGVkCi0gICAgICogICAgICAgICAgICAgICAgICAg
ICAgICBpbnZhbGlkIG9yIHVuaXRpYWxpemVkIFVUZXh0IHN0cnVjdHMuCi0gICAgICogICAgICAg
ICAgICAgICAgICAgICAgICB1dGV4dF9vcGVuWFlaKCkgZnVuY3Rpb25zIHRha2UgYW4gaW5pdGlh
bGl6ZWQsCi0gICAgICogICAgICAgICAgICAgICAgICAgICAgICBidXQgbm90IG5lY2Vzc2FyaWx5
IG9wZW4sIFVUZXh0IHN0cnVjdCBhcyBhbgotICAgICAqICAgICAgICAgICAgICAgICAgICAgICAg
b3B0aW9uYWwgZmlsbC1pbiBwYXJhbWV0ZXIuICBUaGlzIG1hZ2ljIGZpZWxkCi0gICAgICogICAg
ICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIGNoZWNrIGZvciB0aGF0IGluaXRpYWxpemF0
aW9uLgotICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCBwcm92aWRlciBjbG9zZSBm
dW5jdGlvbnMgbXVzdCBOT1QgY2xlYXIKLSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRo
ZSBtYWdpYyBmaWVsZCBiZWNhdXNlIHRoYXQgd291bGQgcHJldmVudAotICAgICAqICAgICAgICAg
ICAgICAgICAgICAgICAgcmV1c2Ugb2YgdGhlIFVUZXh0IHN0cnVjdC4KLSAgICAgKiBAaW50ZXJu
YWwKLSAgICAgKi8KLSAgICB1aW50MzJfdCAgICAgICBtYWdpYzsKLQotCi0gICAgLyoqCi0gICAg
ICogICAgIChwcml2YXRlKSAgRmxhZ3MgZm9yIG1hbmFnaW5nIHRoZSBhbGxvY2F0aW9uIGFuZCBm
cmVlaW5nIG9mCi0gICAgICogICAgICAgICAgICAgICAgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0
aGlzIFVUZXh0LgotICAgICAqIEBpbnRlcm5hbAotICAgICAqLwotICAgIGludDMyX3QgICAgICAg
IGZsYWdzOwotCi0KLSAgICAvKioKLSAgICAgICogIFRleHQgcHJvdmlkZXIgcHJvcGVydGllcy4g
IFRoaXMgc2V0IG9mIGZsYWdzIGlzIG1haW50YWludGVkIGJ5IHRoZQotICAgICAgKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dCBwcm92aWRlciBpbXBsZW1lbnRhdGlvbi4KLSAgICAg
ICogIEBzdGFibGUgSUNVIDMuNAotICAgICAgKi8KLSAgICBpbnQzMl90ICAgICAgICAgcHJvdmlk
ZXJQcm9wZXJ0aWVzOwotCi0gICAgLyoqCi0gICAgICogKHB1YmxpYykgc2l6ZU9mU3RydWN0PXNp
emVvZihVVGV4dCkKLSAgICAgKiBBbGxvd3MgcG9zc2libGUgYmFja3dhcmQgY29tcGF0aWJsZSBl
eHRlbnNpb24uCi0gICAgICoKLSAgICAgKiBAc3RhYmxlIElDVSAzLjQKLSAgICAgKi8KLSAgICBp
bnQzMl90ICAgICAgICAgc2l6ZU9mU3RydWN0OwotICAgIAotICAgIC8qIC0tLS0tLSAxNiBieXRl
IGFsaWdubWVudCBib3VuZGFyeSAtLS0tLS0tLS0tLSAgKi8KLSAgICAKLQotICAgIC8qKgotICAg
ICAgKiAgKHByb3RlY3RlZCkgTmF0aXZlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgcG9z
aXRpb24gZm9sbG93aW5nCi0gICAgICAqICAgICAgICAgICAgICB0aGUgY3VycmVudCBjaHVuay4K
LSAgICAgICogIEBzdGFibGUgSUNVIDMuNgotICAgICAgKi8KLSAgICBpbnQ2NF90ICAgICAgICAg
Y2h1bmtOYXRpdmVMaW1pdDsKLQotICAgIC8qKgotICAgICAqICAgKHByb3RlY3RlZCkgIFNpemUg
aW4gYnl0ZXMgb2YgdGhlIGV4dHJhIHNwYWNlIChwRXh0cmEpLgotICAgICAqICBAc3RhYmxlIElD
VSAzLjQKLSAgICAgKi8KLSAgICBpbnQzMl90ICAgICAgICBleHRyYVNpemU7Ci0KLSAgICAvKioK
LSAgICAgICogICAgKHByb3RlY3RlZCkgVGhlIGhpZ2hlc3QgY2h1bmsgb2Zmc2V0IHdoZXJlIG5h
dGl2ZSBpbmRleGluZyBhbmQKLSAgICAgICogICAgY2h1bmsgKFVURi0xNikgaW5kZXhpbmcgY29y
cmVzcG9uZC4gIEZvciBVVEYtMTYgc291cmNlcywgdmFsdWUKLSAgICAgICogICAgd2lsbCBiZSBl
cXVhbCB0byBjaHVua0xlbmd0aC4KLSAgICAgICoKLSAgICAgICogICAgQHN0YWJsZSBJQ1UgMy42
Ci0gICAgICAqLwotICAgIGludDMyX3QgICAgICAgICBuYXRpdmVJbmRleGluZ0xpbWl0OwotCi0g
ICAgLyogLS0tLSAxNiBieXRlIGFsaWdubWVudCBib3VuZGFyeS0tLS0tLSAqLwotICAgIAotICAg
IC8qKgotICAgICAqICAocHJvdGVjdGVkKSBOYXRpdmUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJh
Y3RlciBpbiB0aGUgdGV4dCBjaHVuay4KLSAgICAgKiAgQHN0YWJsZSBJQ1UgMy42Ci0gICAgICov
Ci0gICAgaW50NjRfdCAgICAgICAgIGNodW5rTmF0aXZlU3RhcnQ7Ci0KLSAgICAvKioKLSAgICAg
KiAgKHByb3RlY3RlZCkgQ3VycmVudCBpdGVyYXRpb24gcG9zaXRpb24gd2l0aGluIHRoZSB0ZXh0
IGNodW5rIChVVEYtMTYgYnVmZmVyKS4KLSAgICAgKiAgVGhpcyBpcyB0aGUgaW5kZXggdG8gdGhl
IGNoYXJhY3RlciB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgYnkgdXRleHRfbmV4dDMyKCkuCi0gICAg
ICogIEBzdGFibGUgSUNVIDMuNgotICAgICAqLwotICAgIGludDMyX3QgICAgICAgICBjaHVua09m
ZnNldDsKLQotICAgIC8qKgotICAgICAqICAocHJvdGVjdGVkKSBMZW5ndGggdGhlIHRleHQgY2h1
bmsgKFVURi0xNiBidWZmZXIpLCBpbiBVQ2hhcnMuCi0gICAgICogIEBzdGFibGUgSUNVIDMuNgot
ICAgICAqLwotICAgIGludDMyX3QgICAgICAgICBjaHVua0xlbmd0aDsKLQotICAgIC8qIC0tLS0g
MTYgIGJ5dGUgYWxpZ25tZW50IGJvdW5kYXJ5LS0gKi8KLSAgICAKLQotICAgIC8qKgotICAgICAq
ICAocHJvdGVjdGVkKSAgcG9pbnRlciB0byBhIGNodW5rIG9mIHRleHQgaW4gVVRGLTE2IGZvcm1h
dC4KLSAgICAgKiAgTWF5IHJlZmVyIGVpdGhlciB0byBvcmlnaW5hbCBzdG9yYWdlIG9mIHRoZSBz
b3VyY2Ugb2YgdGhlIHRleHQsIG9yCi0gICAgICogIGlmIGNvbnZlcnNpb24gd2FzIHJlcXVpcmVk
LCB0byBhIGJ1ZmZlciBvd25lZCBieSB0aGUgVVRleHQuCi0gICAgICogIEBzdGFibGUgSUNVIDMu
NgotICAgICAqLwotICAgIGNvbnN0IFVDaGFyICAgICpjaHVua0NvbnRlbnRzOwotCi0gICAgIC8q
KgotICAgICAgKiAocHVibGljKSAgICAgUG9pbnRlciB0byBEaXNwYXRjaCB0YWJsZSBmb3IgYWNj
ZXNzaW5nIGZ1bmN0aW9ucyBmb3IgdGhpcyBVVGV4dC4KLSAgICAgICogQHN0YWJsZSBJQ1UgMy42
Ci0gICAgICAqLwotICAgIGNvbnN0IFVUZXh0RnVuY3MgICAgICpwRnVuY3M7Ci0KLSAgICAvKioK
LSAgICAgKiAgKHByb3RlY3RlZCkgIFBvaW50ZXIgdG8gYWRkaXRpb25hbCBzcGFjZSByZXF1ZXN0
ZWQgYnkgdGhlCi0gICAgICogICAgICAgICAgICAgICB0ZXh0IHByb3ZpZGVyIGR1cmluZyB0aGUg
dXRleHRfb3BlbiBvcGVyYXRpb24uCi0gICAgICogQHN0YWJsZSBJQ1UgMy40Ci0gICAgICovCi0g
ICAgdm9pZCAgICAgICAgICAqcEV4dHJhOwotCi0gICAgLyoqCi0gICAgICogKHByb3RlY3RlZCkg
UG9pbnRlciB0byBzdHJpbmcgb3IgdGV4dC1jb250YWluaW4gb2JqZWN0IG9yIHNpbWlsYXIuCi0g
ICAgICogVGhpcyBpcyB0aGUgc291cmNlIG9mIHRoZSB0ZXh0IHRoYXQgdGhpcyBVVGV4dCBpcyB3
cmFwcGluZywgaW4gYSBmb3JtYXQKLSAgICAgKiAgdGhhdCBpcyBrbm93biB0byB0aGUgdGV4dCBw
cm92aWRlciBmdW5jdGlvbnMuCi0gICAgICogQHN0YWJsZSBJQ1UgMy40Ci0gICAgICovCi0gICAg
Y29uc3Qgdm9pZCAgICpjb250ZXh0OwotCi0gICAgLyogLS0tIDE2IGJ5dGUgYWxpZ25tZW50IGJv
dW5kYXJ5LS0tICovCi0KLSAgICAvKioKLSAgICAgKiAocHJvdGVjdGVkKSBQb2ludGVyIGZpZWxk
cyBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUgdGV4dCBwcm92aWRlci4KLSAgICAgKiBOb3QgdXNl
ZCBieSBVVGV4dCBjb21tb24gY29kZS4KLSAgICAgKiBAc3RhYmxlIElDVSAzLjYKLSAgICAgKi8K
LSAgICBjb25zdCB2b2lkICAgICAqcDsgCi0gICAgLyoqCi0gICAgICogKHByb3RlY3RlZCkgUG9p
bnRlciBmaWVsZHMgYXZhaWxhYmxlIGZvciB1c2UgYnkgdGhlIHRleHQgcHJvdmlkZXIuCi0gICAg
ICogTm90IHVzZWQgYnkgVVRleHQgY29tbW9uIGNvZGUuCi0gICAgICogQHN0YWJsZSBJQ1UgMy42
Ci0gICAgICovCi0gICAgY29uc3Qgdm9pZCAgICAgKnE7Ci0gICAgIC8qKgotICAgICAqIChwcm90
ZWN0ZWQpIFBvaW50ZXIgZmllbGRzIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHRoZSB0ZXh0IHByb3Zp
ZGVyLgotICAgICAqIE5vdCB1c2VkIGJ5IFVUZXh0IGNvbW1vbiBjb2RlLgotICAgICAqIEBzdGFi
bGUgSUNVIDMuNgotICAgICAgKi8KLSAgICBjb25zdCB2b2lkICAgICAqcjsKLQotICAgIC8qKgot
ICAgICAgKiAgUHJpdmF0ZSBmaWVsZCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBieSB0aGUgVVRl
eHQgZnJhbWV3b3JrCi0gICAgICAqICAgICBpdHNlbGYuICBUaGlzIGlzIG5vdCB0byBiZSB0b3Vj
aGVkIGJ5IHRoZSB0ZXh0IHByb3ZpZGVycy4KLSAgICAgICogQGludGVybmFsIElDVSAzLjQKLSAg
ICAgICovCi0gICAgdm9pZCAgICAgICAgICAgKnByaXZQOwotCi0KLSAgICAvKiAtLS0gMTYgYnl0
ZSBhbGlnbm1lbnQgYm91bmRhcnktLS0gKi8KLSAgICAKLQotICAgIC8qKgotICAgICAgKiAocHJv
dGVjdGVkKSBJbnRlZ2VyIGZpZWxkIHJlc2VydmVkIGZvciB1c2UgYnkgdGhlIHRleHQgcHJvdmlk
ZXIuCi0gICAgICAqIE5vdCB1c2VkIGJ5IHRoZSBVVGV4dCBmcmFtZXdvcmssIG9yIGJ5IHRoZSBj
bGllbnQgKHVzZXIpIG9mIHRoZSBVVGV4dC4KLSAgICAgICogQHN0YWJsZSBJQ1UgMy40Ci0gICAg
ICAqLwotICAgIGludDY0X3QgICAgICAgICBhOwotCi0gICAgLyoqCi0gICAgICAqIChwcm90ZWN0
ZWQpIEludGVnZXIgZmllbGQgcmVzZXJ2ZWQgZm9yIHVzZSBieSB0aGUgdGV4dCBwcm92aWRlci4K
LSAgICAgICogTm90IHVzZWQgYnkgdGhlIFVUZXh0IGZyYW1ld29yaywgb3IgYnkgdGhlIGNsaWVu
dCAodXNlcikgb2YgdGhlIFVUZXh0LgotICAgICAgKiBAc3RhYmxlIElDVSAzLjQKLSAgICAgICov
Ci0gICAgaW50MzJfdCAgICAgICAgIGI7Ci0KLSAgICAvKioKLSAgICAgICogKHByb3RlY3RlZCkg
SW50ZWdlciBmaWVsZCByZXNlcnZlZCBmb3IgdXNlIGJ5IHRoZSB0ZXh0IHByb3ZpZGVyLgotICAg
ICAgKiBOb3QgdXNlZCBieSB0aGUgVVRleHQgZnJhbWV3b3JrLCBvciBieSB0aGUgY2xpZW50ICh1
c2VyKSBvZiB0aGUgVVRleHQuCi0gICAgICAqIEBzdGFibGUgSUNVIDMuNAotICAgICAgKi8KLSAg
ICBpbnQzMl90ICAgICAgICAgYzsKLQotICAgIC8qICAtLS0tIDE2IGJ5dGUgYWxpZ25tZW50IGJv
dW5kYXJ5LS0tLSAqLwotCi0KLSAgICAvKioKLSAgICAgICogIFByaXZhdGUgZmllbGQgcmVzZXJ2
ZWQgZm9yIGZ1dHVyZSB1c2UgYnkgdGhlIFVUZXh0IGZyYW1ld29yawotICAgICAgKiAgICAgaXRz
ZWxmLiAgVGhpcyBpcyBub3QgdG8gYmUgdG91Y2hlZCBieSB0aGUgdGV4dCBwcm92aWRlcnMuCi0g
ICAgICAqIEBpbnRlcm5hbCBJQ1UgMy40Ci0gICAgICAqLwotICAgIGludDY0X3QgICAgICAgICBw
cml2QTsKLSAgICAvKioKLSAgICAgICogIFByaXZhdGUgZmllbGQgcmVzZXJ2ZWQgZm9yIGZ1dHVy
ZSB1c2UgYnkgdGhlIFVUZXh0IGZyYW1ld29yawotICAgICAgKiAgICAgaXRzZWxmLiAgVGhpcyBp
cyBub3QgdG8gYmUgdG91Y2hlZCBieSB0aGUgdGV4dCBwcm92aWRlcnMuCi0gICAgICAqIEBpbnRl
cm5hbCBJQ1UgMy40Ci0gICAgICAqLwotICAgIGludDMyX3QgICAgICAgICBwcml2QjsKLSAgICAv
KioKLSAgICAgICogIFByaXZhdGUgZmllbGQgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYnkgdGhl
IFVUZXh0IGZyYW1ld29yawotICAgICAgKiAgICAgaXRzZWxmLiAgVGhpcyBpcyBub3QgdG8gYmUg
dG91Y2hlZCBieSB0aGUgdGV4dCBwcm92aWRlcnMuCi0gICAgICAqIEBpbnRlcm5hbCBJQ1UgMy40
Ci0gICAgICAqLwotICAgIGludDMyX3QgICAgICAgICBwcml2QzsKLX07Ci0KLQotLyoqCi0gKiAg
Q29tbW9uIGZ1bmN0aW9uIGZvciB1c2UgYnkgVGV4dCBQcm92aWRlciBpbXBsZW1lbnRhdGlvbnMg
dG8gYWxsb2NhdGUgYW5kL29yIGluaXRpYWxpemUKLSAqICBhIG5ldyBVVGV4dCBzdHJ1Y3QuICBU
byBiZSBjYWxsZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHV0ZXh0X29wZW4oKSBmdW5jdGlv
bnMuCi0gKiAgSWYgdGhlIHN1cHBsaWVkIFVUZXh0IHBhcmFtZXRlciBpcyBudWxsLCBhIG5ldyBV
VGV4dCBzdHJ1Y3Qgd2lsbCBiZSBhbGxvY2F0ZWQgb24gdGhlIGhlYXAuCi0gKiAgSWYgdGhlIHN1
cHBsaWVkIFVUZXh0IGlzIGFscmVhZHkgb3BlbiwgdGhlIHByb3ZpZGVyJ3MgY2xvc2UgZnVuY3Rp
b24gd2lsbCBiZSBjYWxsZWQKLSAqICBzbyB0aGF0IHRoZSBzdHJ1Y3QgY2FuIGJlIHJldXNlZCBi
eSB0aGUgb3BlbiB0aGF0IGlzIGluIHByb2dyZXNzLgotICoKLSAqIEBwYXJhbSB1dCAgIHBvaW50
ZXIgdG8gYSBVVGV4dCBzdHJ1Y3QgdG8gYmUgcmUtdXNlZCwgb3IgbnVsbCBpZiBhIG5ldyBVVGV4
dAotICogICAgICAgICAgICAgc2hvdWxkIGJlIGFsbG9jYXRlZC4KLSAqIEBwYXJhbSBleHRyYVNw
YWNlIFRoZSBhbW91bnQgb2YgYWRkaXRpb25hbCBzcGFjZSB0byBiZSBhbGxvY2F0ZWQgYXMgcGFy
dAotICogICAgICAgICAgICAgb2YgdGhpcyBVVGV4dCwgZm9yIHVzZSBieSB0eXBlcyBvZiBwcm92
aWRlcnMgdGhhdCByZXF1aXJlCi0gKiAgICAgICAgICAgICBhZGRpdGlvbmFsIHN0b3JhZ2UuCi0g
KiBAcGFyYW0gc3RhdHVzIEVycm9ycyBhcmUgcmV0dXJuZWQgaGVyZS4KLSAqIEByZXR1cm4gcG9p
bnRlciB0byB0aGUgVVRleHQsIGFsbG9jYXRlZCBpZiBuZWNlc3NhcnksIHdpdGggZXh0cmEgc3Bh
Y2Ugc2V0IHVwIGlmIHJlcXVlc3RlZC4KLSAqIEBzdGFibGUgSUNVIDMuNAotICovCi1VX1NUQUJM
RSBVVGV4dCAqIFVfRVhQT1JUMgotdXRleHRfc2V0dXAoVVRleHQgKnV0LCBpbnQzMl90IGV4dHJh
U3BhY2UsIFVFcnJvckNvZGUgKnN0YXR1cyk7Ci0KLSNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQ
SQotLyoqCi0gICogQGludGVybmFsCi0gICogIFZhbHVlIHVzZWQgdG8gaGVscCBpZGVudGlmeSBj
b3JyZWN0bHkgaW5pdGlhbGl6ZWQgVVRleHQgc3RydWN0cy4KLSAgKiAgTm90ZTogIG11c3QgYmUg
cHVibGljbHkgdmlzaWJsZSBzbyB0aGF0IFVURVhUX0lOSVRJQUxJWkVSIGNhbiBhY2Nlc3MgaXQu
Ci0gICovCi1lbnVtIHsKLSAgICBVVEVYVF9NQUdJQyA9IDB4MzQ1YWQ4MmMKLX07Ci0jZW5kaWYg
IC8qIFVfSElERV9JTlRFUk5BTF9BUEkgKi8KLQotLyoqCi0gKiBpbml0aWFsaXplciB0byBiZSB1
c2VkIHdpdGggbG9jYWwgKHN0YWNrKSBpbnN0YW5jZXMgb2YgYSBVVGV4dAotICogIHN0cnVjdC4g
IFVUZXh0IHN0cnVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgcGFzc2luZwotICogIHRo
ZW0gdG8gb25lIG9mIHRoZSB1dGV4dF9vcGVuIGZ1bmN0aW9ucy4KLSAqCi0gKiBAc3RhYmxlIElD
VSAzLjYKLSAqLwotI2RlZmluZSBVVEVYVF9JTklUSUFMSVpFUiB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFVURVhUX01BR0lDLCAg
ICAgICAgICAvKiBtYWdpYyAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgICAw
LCAgICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgICAgICAgICAgICAgICAgKi8gXAotICAgICAg
ICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHByb3ZpZGVyUHJvcHMgICAgICAg
ICovIFwKLSAgICAgICAgICAgICAgICAgIHNpemVvZihVVGV4dCksICAgICAgICAvKiBzaXplT2ZT
dHJ1Y3QgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAg
ICAgLyogY2h1bmtOYXRpdmVMaW1pdCAgICAgKi8gXAotICAgICAgICAgICAgICAgICAgMCwgICAg
ICAgICAgICAgICAgICAgIC8qIGV4dHJhU2l6ZSAgICAgICAgICAgICovIFwKLSAgICAgICAgICAg
ICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiBuYXRpdmVJbmRleGluZ0xpbWl0ICAqLyBc
Ci0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogY2h1bmtOYXRpdmVT
dGFydCAgICAgKi8gXAotICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgIC8q
IGNodW5rT2Zmc2V0ICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAg
ICAgICAgICAgICAvKiBjaHVua0xlbmd0aCAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAg
ICBOVUxMLCAgICAgICAgICAgICAgICAgLyogY2h1bmtDb250ZW50cyAgICAgICAgKi8gXAotICAg
ICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgIC8qIHBGdW5jcyAgICAgICAgICAg
ICAgICovIFwKLSAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAvKiBwRXh0
cmEgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAg
ICAgICAgLyogY29udGV4dCAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgICAgTlVM
TCwgTlVMTCwgTlVMTCwgICAgIC8qIHAsIHEsIHIgICAgICAgICAgICAgICovIFwKLSAgICAgICAg
ICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAvKiBwcml2UCAgICAgICAgICAgICAgICAq
LyBcCi0gICAgICAgICAgICAgICAgICAwLCAwLCAwLCAgICAgICAgICAgICAgLyogYSwgYiwgYyAg
ICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgICAgMCwgMCwgMCAgICAgICAgICAgICAg
IC8qIHByaXZBLEIsQywgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAgIH0KLQotCi1V
X0NERUNMX0VORAotCi0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3V0Zi5oIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS91dGYuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU5NTRmZTlmZTY5OTg5M2JkMzE4ZTI0Nzcy
OTI2YzE3NWEyMGM3NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91
bmljb2RlL3V0Zi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLS8qCi0qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCi0qCi0qICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTEsIEludGVybmF0
aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKLSogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICBmaWxlIG5h
bWU6ICB1dGYuaAotKiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCi0qICAgdGFiIHNpemU6ICAgOCAo
bm90IHVzZWQpCi0qICAgaW5kZW50YXRpb246NAotKgotKiAgIGNyZWF0ZWQgb246IDE5OTlzZXAw
OQotKiAgIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCi0qLwotCi0vKioKLSAqIFxmaWxl
Ci0gKiBcYnJpZWYgQyBBUEk6IENvZGUgcG9pbnQgbWFjcm9zCi0gKgotICogVGhpcyBmaWxlIGRl
ZmluZXMgbWFjcm9zIGZvciBjaGVja2luZyB3aGV0aGVyIGEgY29kZSBwb2ludCBpcwotICogYSBz
dXJyb2dhdGUgb3IgYSBub24tY2hhcmFjdGVyIGV0Yy4KLSAqCi0gKiBUaGUgVUNoYXIgYW5kIFVD
aGFyMzIgZGF0YSB0eXBlcyBmb3IgVW5pY29kZSBjb2RlIHVuaXRzIGFuZCBjb2RlIHBvaW50cwot
ICogYXJlIGRlZmluZWQgaW4gdW1hY2hpbmUuaCBiZWNhdXNlIHRoZXkgY2FuIGJlIG1hY2hpbmUt
ZGVwZW5kZW50LgotICoKLSAqIElmIFVfTk9fREVGQVVMVF9JTkNMVURFX1VURl9IRUFERVJTIGlz
IDAgdGhlbiB1dGYuaCBpcyBpbmNsdWRlZCBieSB1dHlwZXMuaAotICogYW5kIGl0c2VsZiBpbmNs
dWRlcyB1dGY4LmggYW5kIHV0ZjE2LmggYWZ0ZXIgc29tZQotICogY29tbW9uIGRlZmluaXRpb25z
LgotICogSWYgVV9OT19ERUZBVUxUX0lOQ0xVREVfVVRGX0hFQURFUlMgaXMgMSB0aGVuIGVhY2gg
b2YgdGhlc2UgaGVhZGVycyBtdXN0IGJlCi0gKiBpbmNsdWRlZCBleHBsaWNpdGx5IGlmIHRoZWly
IGRlZmluaXRpb25zIGFyZSB1c2VkLgotICoKLSAqIHV0ZjguaCBhbmQgdXRmMTYuaCBkZWZpbmUg
bWFjcm9zIGZvciBlZmZpY2llbnRseSBnZXR0aW5nIGNvZGUgcG9pbnRzCi0gKiBpbiBhbmQgb3V0
IG9mIFVURi04LzE2IHN0cmluZ3MuCi0gKiB1dGYxNi5oIG1hY3JvcyBoYXZlICJVMTZfIiBwcmVm
aXhlcy4KLSAqIHV0ZjguaCBkZWZpbmVzIHNpbWlsYXIgbWFjcm9zIHdpdGggIlU4XyIgcHJlZml4
ZXMgZm9yIFVURi04IHN0cmluZyBoYW5kbGluZy4KLSAqCi0gKiBJQ1UgbW9zdGx5IHByb2Nlc3Nl
cyAxNi1iaXQgVW5pY29kZSBzdHJpbmdzLgotICogTW9zdCBvZiB0aGUgdGltZSwgc3VjaCBzdHJp
bmdzIGFyZSB3ZWxsLWZvcm1lZCBVVEYtMTYuCi0gKiBTaW5nbGUsIHVucGFpcmVkIHN1cnJvZ2F0
ZXMgbXVzdCBiZSBoYW5kbGVkIGFzIHdlbGwsIGFuZCBhcmUgdHJlYXRlZCBpbiBJQ1UKLSAqIGxp
a2UgcmVndWxhciBjb2RlIHBvaW50cyB3aGVyZSBwb3NzaWJsZS4KLSAqIChQYWlycyBvZiBzdXJy
b2dhdGUgY29kZSBwb2ludHMgYXJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gc3VwcGxlbWVudGFy
eQotICogY29kZSBwb2ludHMgZW5jb2RlZCBhcyBwYWlycyBvZiBzdXBwbGVtZW50YXJ5IGNvZGUg
dW5pdHMuKQotICoKLSAqIEluIGZhY3QsIGFsbW9zdCBhbGwgVW5pY29kZSBjb2RlIHBvaW50cyBp
biBub3JtYWwgdGV4dCAoPjk5JSkKLSAqIGFyZSBvbiB0aGUgQk1QICg8PVUrZmZmZikgYW5kIGV2
ZW4gPD1VK2Q3ZmYuCi0gKiBJQ1UgZnVuY3Rpb25zIGhhbmRsZSBzdXBwbGVtZW50YXJ5IGNvZGUg
cG9pbnRzIChVKzEwMDAwLi5VKzEwZmZmZikKLSAqIGJ1dCBhcmUgb3B0aW1pemVkIGZvciB0aGUg
bXVjaCBtb3JlIGZyZXF1ZW50bHkgb2NjdXJyaW5nIEJNUCBjb2RlIHBvaW50cy4KLSAqCi0gKiB1
bWFjaGluZS5oIGRlZmluZXMgVUNoYXIgdG8gYmUgYW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIu
Ci0gKiBXaGVyZSBhdmFpbGFibGUsIFVDaGFyIGlzIGRlZmluZWQgdG8gYmUgYSBjaGFyMTZfdAot
ICogb3IgYSB3Y2hhcl90IChpZiB0aGF0IGlzIGFuIHVuc2lnbmVkIDE2LWJpdCB0eXBlKSwgb3Ro
ZXJ3aXNlIHVpbnQxNl90LgotICoKLSAqIFVDaGFyMzIgaXMgZGVmaW5lZCB0byBiZSBhIHNpZ25l
ZCAzMi1iaXQgaW50ZWdlciAoaW50MzJfdCksIGxhcmdlIGVub3VnaCBmb3IgYSAyMS1iaXQKLSAq
IFVuaWNvZGUgY29kZSBwb2ludCAoVW5pY29kZSBzY2FsYXIgdmFsdWUsIDAuLjB4MTBmZmZmKS4K
LSAqIEJlZm9yZSBJQ1UgMi40LCB0aGUgZGVmaW5pdGlvbiBvZiBVQ2hhcjMyIHdhcyBzaW1pbGFy
bHkgcGxhdGZvcm0tZGVwZW5kZW50IGFzCi0gKiB0aGUgZGVmaW5pdGlvbiBvZiBVQ2hhci4gRm9y
IGRldGFpbHMgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBVQ2hhcjMyIGl0c2VsZi4KLSAqCi0g
KiB1dGYuaCBkZWZpbmVzIGEgc21hbGwgbnVtYmVyIG9mIEMgbWFjcm9zIGZvciBzaW5nbGUgVW5p
Y29kZSBjb2RlIHBvaW50cy4KLSAqIFRoZXNlIGFyZSBzaW1wbGUgY2hlY2tzIGZvciBzdXJyb2dh
dGVzIGFuZCBub24tY2hhcmFjdGVycy4KLSAqIEZvciBhY3R1YWwgVW5pY29kZSBjaGFyYWN0ZXIg
cHJvcGVydGllcyBzZWUgdWNoYXIuaC4KLSAqCi0gKiBCeSBkZWZhdWx0LCBzdHJpbmcgb3BlcmF0
aW9ucyBtdXN0IGJlIGRvbmUgd2l0aCBlcnJvciBjaGVja2luZyBpbiBjYXNlCi0gKiBhIHN0cmlu
ZyBpcyBub3Qgd2VsbC1mb3JtZWQgVVRGLTE2LgotICogVGhlIG1hY3JvcyB3aWxsIGRldGVjdCBp
ZiBhIHN1cnJvZ2F0ZSBjb2RlIHVuaXQgaXMgdW5wYWlyZWQKLSAqIChsZWFkIHVuaXQgd2l0aG91
dCB0cmFpbCB1bml0IG9yIHZpY2UgdmVyc2EpIGFuZCBqdXN0IHJldHVybiB0aGUgdW5pdCBpdHNl
bGYKLSAqIGFzIHRoZSBjb2RlIHBvaW50LgotICoKLSAqIFRoZSByZWd1bGFyICJzYWZlIiBtYWNy
b3MgcmVxdWlyZSB0aGF0IHRoZSBpbml0aWFsLCBwYXNzZWQtaW4gc3RyaW5nIGluZGV4Ci0gKiBp
cyB3aXRoaW4gYm91bmRzLiBUaGV5IG9ubHkgY2hlY2sgdGhlIGluZGV4IHdoZW4gdGhleSByZWFk
IG1vcmUgdGhhbiBvbmUKLSAqIGNvZGUgdW5pdC4gVGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aCBj
b2RlIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBsb29wOgotICogPHByZT53aGlsZShpPGxlbmd0
aCkgewotICogICBVMTZfTkVYVChzLCBpLCBsZW5ndGgsIGMpOwotICogICAvLyB1c2UgYwotICog
fTwvcHJlPgotICoKLSAqIFdoZW4gaXQgaXMgc2FmZSB0byBhc3N1bWUgdGhhdCB0ZXh0IGlzIHdl
bGwtZm9ybWVkIFVURi0xNgotICogKGRvZXMgbm90IGNvbnRhaW4gc2luZ2xlLCB1bnBhaXJlZCBz
dXJyb2dhdGVzKSwgdGhlbiBvbmUgY2FuIHVzZQotICogVTE2Xy4uLl9VTlNBRkUgbWFjcm9zLgot
ICogVGhlc2UgZG8gbm90IGNoZWNrIGZvciBwcm9wZXIgY29kZSB1bml0IHNlcXVlbmNlcyBvciB0
cnVuY2F0ZWQgdGV4dCBhbmQgbWF5Ci0gKiB5aWVsZCB3cm9uZyByZXN1bHRzIG9yIGV2ZW4gY2F1
c2UgYSBjcmFzaCBpZiB0aGV5IGFyZSB1c2VkIHdpdGggIm1hbGZvcm1lZCIKLSAqIHRleHQuCi0g
KiBJbiBwcmFjdGljZSwgVTE2Xy4uLl9VTlNBRkUgbWFjcm9zIHdpbGwgcHJvZHVjZSBzbGlnaHRs
eSBsZXNzIGNvZGUgYnV0Ci0gKiBzaG91bGQgbm90IGJlIGZhc3RlciBiZWNhdXNlIHRoZSBwcm9j
ZXNzaW5nIGlzIG9ubHkgZGlmZmVyZW50IHdoZW4gYQotICogc3Vycm9nYXRlIGNvZGUgdW5pdCBp
cyBkZXRlY3RlZCwgd2hpY2ggd2lsbCBiZSByYXJlLgotICoKLSAqIFNpbWlsYXJseSBmb3IgVVRG
LTgsIHRoZXJlIGFyZSAic2FmZSIgbWFjcm9zIHdpdGhvdXQgYSBzdWZmaXgsCi0gKiBhbmQgVThf
Li4uX1VOU0FGRSB2ZXJzaW9ucy4KLSAqIFRoZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlcyBhcmUg
bXVjaCBsYXJnZXIgaGVyZSBiZWNhdXNlIFVURi04IHByb3ZpZGVzIHNvCi0gKiBtYW55IG9wcG9y
dHVuaXRpZXMgZm9yIG1hbGZvcm1lZCBzZXF1ZW5jZXMuCi0gKiBUaGUgdW5zYWZlIFVURi04IG1h
Y3JvcyBhcmUgZW50aXJlbHkgaW1wbGVtZW50ZWQgaW5zaWRlIHRoZSBtYWNybyBkZWZpbml0aW9u
cwotICogYW5kIGFyZSBmYXN0LCB3aGlsZSB0aGUgc2FmZSBVVEYtOCBtYWNyb3MgY2FsbCBmdW5j
dGlvbnMgZm9yIGFsbCBidXQgdGhlCi0gKiB0cml2aWFsIChBU0NJSSkgY2FzZXMuCi0gKiAoSUNV
IDMuNiBvcHRpbWl6ZXMgVThfTkVYVCgpIGFuZCBVOF9BUFBFTkQoKSB0byBoYW5kbGUgbW9zdCBv
dGhlciBjb21tb24KLSAqIGNoYXJhY3RlcnMgaW5saW5lIGFzIHdlbGwuKQotICoKLSAqIFVubGlr
ZSB3aXRoIFVURi0xNiwgbWFsZm9ybWVkIHNlcXVlbmNlcyBjYW5ub3QgYmUgZXhwcmVzc2VkIHdp
dGggZGlzdGluY3QKLSAqIGNvZGUgcG9pbnQgdmFsdWVzICgwLi5VKzEwZmZmZikuIFRoZXkgYXJl
IGluZGljYXRlZCB3aXRoIG5lZ2F0aXZlIHZhbHVlcyBpbnN0ZWFkLgotICoKLSAqIEZvciBtb3Jl
IGluZm9ybWF0aW9uIHNlZSB0aGUgSUNVIFVzZXIgR3VpZGUgU3RyaW5ncyBjaGFwdGVyCi0gKiAo
aHR0cDovL3VzZXJndWlkZS5pY3UtcHJvamVjdC5vcmcvc3RyaW5ncykuCi0gKgotICogPGVtPlVz
YWdlOjwvZW0+Ci0gKiBJQ1UgY29kaW5nIGd1aWRlbGluZXMgZm9yIGlmKCkgc3RhdGVtZW50cyBz
aG91bGQgYmUgZm9sbG93ZWQgd2hlbiB1c2luZyB0aGVzZSBtYWNyb3MuCi0gKiBDb21wb3VuZCBz
dGF0ZW1lbnRzIChjdXJseSBicmFjZXMge30pIG11c3QgYmUgdXNlZCAgZm9yIGlmLWVsc2Utd2hp
bGUuLi4gCi0gKiBib2RpZXMgYW5kIGFsbCBtYWNybyBzdGF0ZW1lbnRzIHNob3VsZCBiZSB0ZXJt
aW5hdGVkIHdpdGggc2VtaWNvbG9uLgotICoKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0KLSNp
Zm5kZWYgX19VVEZfSF9fCi0jZGVmaW5lIF9fVVRGX0hfXwotCi0jaW5jbHVkZSAidW5pY29kZS91
bWFjaGluZS5oIgotLyogaW5jbHVkZSB0aGUgdXRmWFguaCBhZnRlciB0aGUgZm9sbG93aW5nIGRl
ZmluaXRpb25zICovCi0KLS8qIHNpbmdsZS1jb2RlIHBvaW50IGRlZmluaXRpb25zIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qKgotICogSXMgdGhp
cyBjb2RlIHBvaW50IGEgVW5pY29kZSBub25jaGFyYWN0ZXI/Ci0gKiBAcGFyYW0gYyAzMi1iaXQg
Y29kZSBwb2ludAotICogQHJldHVybiBUUlVFIG9yIEZBTFNFCi0gKiBAc3RhYmxlIElDVSAyLjQK
LSAqLwotI2RlZmluZSBVX0lTX1VOSUNPREVfTk9OQ0hBUihjKSBcCi0gICAgKChjKT49MHhmZGQw
ICYmIFwKLSAgICAgKCh1aW50MzJfdCkoYyk8PTB4ZmRlZiB8fCAoKGMpJjB4ZmZmZSk9PTB4ZmZm
ZSkgJiYgXAotICAgICAodWludDMyX3QpKGMpPD0weDEwZmZmZikKLQotLyoqCi0gKiBJcyBjIGEg
VW5pY29kZSBjb2RlIHBvaW50IHZhbHVlICgwLi5VKzEwZmZmZikKLSAqIHRoYXQgY2FuIGJlIGFz
c2lnbmVkIGEgY2hhcmFjdGVyPwotICoKLSAqIENvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBjaGFy
YWN0ZXJzIGluY2x1ZGU6Ci0gKiAtIHNpbmdsZSBzdXJyb2dhdGUgY29kZSBwb2ludHMgKFUrZDgw
MC4uVStkZmZmLCAyMDQ4IGNvZGUgcG9pbnRzKQotICogLSB0aGUgbGFzdCB0d28gY29kZSBwb2lu
dHMgb24gZWFjaCBwbGFuZSAoVStfX2ZmZmUgYW5kIFUrX19mZmZmLCAzNCBjb2RlIHBvaW50cykK
LSAqIC0gVStmZGQwLi5VK2ZkZWYgKG5ldyB3aXRoIFVuaWNvZGUgMy4xLCAzMiBjb2RlIHBvaW50
cykKLSAqIC0gdGhlIGhpZ2hlc3QgVW5pY29kZSBjb2RlIHBvaW50IHZhbHVlIGlzIFUrMTBmZmZm
Ci0gKgotICogVGhpcyBtZWFucyB0aGF0IGFsbCBjb2RlIHBvaW50cyBiZWxvdyBVK2Q4MDAgYXJl
IGNoYXJhY3RlciBjb2RlIHBvaW50cywKLSAqIGFuZCB0aGF0IGJvdW5kYXJ5IGlzIHRlc3RlZCBm
aXJzdCBmb3IgcGVyZm9ybWFuY2UuCi0gKgotICogQHBhcmFtIGMgMzItYml0IGNvZGUgcG9pbnQK
LSAqIEByZXR1cm4gVFJVRSBvciBGQUxTRQotICogQHN0YWJsZSBJQ1UgMi40Ci0gKi8KLSNkZWZp
bmUgVV9JU19VTklDT0RFX0NIQVIoYykgXAotICAgICgodWludDMyX3QpKGMpPDB4ZDgwMCB8fCBc
Ci0gICAgICAgICgodWludDMyX3QpKGMpPjB4ZGZmZiAmJiBcCi0gICAgICAgICAodWludDMyX3Qp
KGMpPD0weDEwZmZmZiAmJiBcCi0gICAgICAgICAhVV9JU19VTklDT0RFX05PTkNIQVIoYykpKQot
Ci0vKioKLSAqIElzIHRoaXMgY29kZSBwb2ludCBhIEJNUCBjb2RlIHBvaW50IChVKzAwMDAuLlUr
ZmZmZik/Ci0gKiBAcGFyYW0gYyAzMi1iaXQgY29kZSBwb2ludAotICogQHJldHVybiBUUlVFIG9y
IEZBTFNFCi0gKiBAc3RhYmxlIElDVSAyLjgKLSAqLwotI2RlZmluZSBVX0lTX0JNUChjKSAoKHVp
bnQzMl90KShjKTw9MHhmZmZmKQotCi0vKioKLSAqIElzIHRoaXMgY29kZSBwb2ludCBhIHN1cHBs
ZW1lbnRhcnkgY29kZSBwb2ludCAoVSsxMDAwMC4uVSsxMGZmZmYpPwotICogQHBhcmFtIGMgMzIt
Yml0IGNvZGUgcG9pbnQKLSAqIEByZXR1cm4gVFJVRSBvciBGQUxTRQotICogQHN0YWJsZSBJQ1Ug
Mi44Ci0gKi8KLSNkZWZpbmUgVV9JU19TVVBQTEVNRU5UQVJZKGMpICgodWludDMyX3QpKChjKS0w
eDEwMDAwKTw9MHhmZmZmZikKLSAKLS8qKgotICogSXMgdGhpcyBjb2RlIHBvaW50IGEgbGVhZCBz
dXJyb2dhdGUgKFUrZDgwMC4uVStkYmZmKT8KLSAqIEBwYXJhbSBjIDMyLWJpdCBjb2RlIHBvaW50
Ci0gKiBAcmV0dXJuIFRSVUUgb3IgRkFMU0UKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVm
aW5lIFVfSVNfTEVBRChjKSAoKChjKSYweGZmZmZmYzAwKT09MHhkODAwKQotCi0vKioKLSAqIElz
IHRoaXMgY29kZSBwb2ludCBhIHRyYWlsIHN1cnJvZ2F0ZSAoVStkYzAwLi5VK2RmZmYpPwotICog
QHBhcmFtIGMgMzItYml0IGNvZGUgcG9pbnQKLSAqIEByZXR1cm4gVFJVRSBvciBGQUxTRQotICog
QHN0YWJsZSBJQ1UgMi40Ci0gKi8KLSNkZWZpbmUgVV9JU19UUkFJTChjKSAoKChjKSYweGZmZmZm
YzAwKT09MHhkYzAwKQotCi0vKioKLSAqIElzIHRoaXMgY29kZSBwb2ludCBhIHN1cnJvZ2F0ZSAo
VStkODAwLi5VK2RmZmYpPwotICogQHBhcmFtIGMgMzItYml0IGNvZGUgcG9pbnQKLSAqIEByZXR1
cm4gVFJVRSBvciBGQUxTRQotICogQHN0YWJsZSBJQ1UgMi40Ci0gKi8KLSNkZWZpbmUgVV9JU19T
VVJST0dBVEUoYykgKCgoYykmMHhmZmZmZjgwMCk9PTB4ZDgwMCkKLQotLyoqCi0gKiBBc3N1bWlu
ZyBjIGlzIGEgc3Vycm9nYXRlIGNvZGUgcG9pbnQgKFVfSVNfU1VSUk9HQVRFKGMpKSwKLSAqIGlz
IGl0IGEgbGVhZCBzdXJyb2dhdGU/Ci0gKiBAcGFyYW0gYyAzMi1iaXQgY29kZSBwb2ludAotICog
QHJldHVybiBUUlVFIG9yIEZBTFNFCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBV
X0lTX1NVUlJPR0FURV9MRUFEKGMpICgoKGMpJjB4NDAwKT09MCkKLQotLyoqCi0gKiBBc3N1bWlu
ZyBjIGlzIGEgc3Vycm9nYXRlIGNvZGUgcG9pbnQgKFVfSVNfU1VSUk9HQVRFKGMpKSwKLSAqIGlz
IGl0IGEgdHJhaWwgc3Vycm9nYXRlPwotICogQHBhcmFtIGMgMzItYml0IGNvZGUgcG9pbnQKLSAq
IEByZXR1cm4gVFJVRSBvciBGQUxTRQotICogQHN0YWJsZSBJQ1UgNC4yCi0gKi8KLSNkZWZpbmUg
VV9JU19TVVJST0dBVEVfVFJBSUwoYykgKCgoYykmMHg0MDApIT0wKQotCi0vKiBpbmNsdWRlIHRo
ZSB1dGZYWC5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLwotCi0jaWYgIVVfTk9fREVGQVVMVF9JTkNMVURFX1VURl9IRUFERVJTCi0KLSNp
bmNsdWRlICJ1bmljb2RlL3V0ZjguaCIKLSNpbmNsdWRlICJ1bmljb2RlL3V0ZjE2LmgiCi0KLS8q
IHV0Zl9vbGQuaCBjb250YWlucyBkZXByZWNhdGVkLCBwcmUtSUNVIDIuNCBkZWZpbml0aW9ucyAq
LwotI2luY2x1ZGUgInVuaWNvZGUvdXRmX29sZC5oIgotCi0jZW5kaWYgIC8qICFVX05PX0RFRkFV
TFRfSU5DTFVERV9VVEZfSEVBREVSUyAqLwotCi0jZW5kaWYgIC8qIF9fVVRGX0hfXyAqLwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9p
Y3UvdW5pY29kZS91dGYxNi5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2Rl
cGVuZGVuY2llcy9pY3UvdW5pY29kZS91dGYxNi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiZGQ4OGE4YjljNGYwMGVhMGRmMjcyYWMwMmY2OTY3ZWY2MTA4OWI2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvdXRmMTYuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDYyMyArMCwwIEBACi0vKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiAg
IENvcHlyaWdodCAoQykgMTk5OS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVz
Ci0qICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qCi0q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCi0qICAgZmlsZSBuYW1lOiAgdXRmMTYuaAotKiAgIGVuY29k
aW5nOiAgIFVTLUFTQ0lJCi0qICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCi0qICAgaW5kZW50
YXRpb246NAotKgotKiAgIGNyZWF0ZWQgb246IDE5OTlzZXAwOQotKiAgIGNyZWF0ZWQgYnk6IE1h
cmt1cyBXLiBTY2hlcmVyCi0qLwotCi0vKioKLSAqIFxmaWxlCi0gKiBcYnJpZWYgQyBBUEk6IDE2
LWJpdCBVbmljb2RlIGhhbmRsaW5nIG1hY3JvcwotICogCi0gKiBUaGlzIGZpbGUgZGVmaW5lcyBt
YWNyb3MgdG8gZGVhbCB3aXRoIDE2LWJpdCBVbmljb2RlIChVVEYtMTYpIGNvZGUgdW5pdHMgYW5k
IHN0cmluZ3MuCi0gKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHV0Zi5oIGFuZCB0aGUg
SUNVIFVzZXIgR3VpZGUgU3RyaW5ncyBjaGFwdGVyCi0gKiAoaHR0cDovL3VzZXJndWlkZS5pY3Ut
cHJvamVjdC5vcmcvc3RyaW5ncykuCi0gKgotICogPGVtPlVzYWdlOjwvZW0+Ci0gKiBJQ1UgY29k
aW5nIGd1aWRlbGluZXMgZm9yIGlmKCkgc3RhdGVtZW50cyBzaG91bGQgYmUgZm9sbG93ZWQgd2hl
biB1c2luZyB0aGVzZSBtYWNyb3MuCi0gKiBDb21wb3VuZCBzdGF0ZW1lbnRzIChjdXJseSBicmFj
ZXMge30pIG11c3QgYmUgdXNlZCAgZm9yIGlmLWVsc2Utd2hpbGUuLi4gCi0gKiBib2RpZXMgYW5k
IGFsbCBtYWNybyBzdGF0ZW1lbnRzIHNob3VsZCBiZSB0ZXJtaW5hdGVkIHdpdGggc2VtaWNvbG9u
LgotICovCi0KLSNpZm5kZWYgX19VVEYxNl9IX18KLSNkZWZpbmUgX19VVEYxNl9IX18KLQotI2lu
Y2x1ZGUgInVuaWNvZGUvdW1hY2hpbmUuaCIKLSNpZm5kZWYgX19VVEZfSF9fCi0jICAgaW5jbHVk
ZSAidW5pY29kZS91dGYuaCIKLSNlbmRpZgotCi0vKiBzaW5nbGUtY29kZSBwb2ludCBkZWZpbml0
aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0v
KioKLSAqIERvZXMgdGhpcyBjb2RlIHVuaXQgYWxvbmUgZW5jb2RlIGEgY29kZSBwb2ludCAoQk1Q
LCBub3QgYSBzdXJyb2dhdGUpPwotICogQHBhcmFtIGMgMTYtYml0IGNvZGUgdW5pdAotICogQHJl
dHVybiBUUlVFIG9yIEZBTFNFCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBVMTZf
SVNfU0lOR0xFKGMpICFVX0lTX1NVUlJPR0FURShjKQotCi0vKioKLSAqIElzIHRoaXMgY29kZSB1
bml0IGEgbGVhZCBzdXJyb2dhdGUgKFUrZDgwMC4uVStkYmZmKT8KLSAqIEBwYXJhbSBjIDE2LWJp
dCBjb2RlIHVuaXQKLSAqIEByZXR1cm4gVFJVRSBvciBGQUxTRQotICogQHN0YWJsZSBJQ1UgMi40
Ci0gKi8KLSNkZWZpbmUgVTE2X0lTX0xFQUQoYykgKCgoYykmMHhmZmZmZmMwMCk9PTB4ZDgwMCkK
LQotLyoqCi0gKiBJcyB0aGlzIGNvZGUgdW5pdCBhIHRyYWlsIHN1cnJvZ2F0ZSAoVStkYzAwLi5V
K2RmZmYpPwotICogQHBhcmFtIGMgMTYtYml0IGNvZGUgdW5pdAotICogQHJldHVybiBUUlVFIG9y
IEZBTFNFCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBVMTZfSVNfVFJBSUwoYykg
KCgoYykmMHhmZmZmZmMwMCk9PTB4ZGMwMCkKLQotLyoqCi0gKiBJcyB0aGlzIGNvZGUgdW5pdCBh
IHN1cnJvZ2F0ZSAoVStkODAwLi5VK2RmZmYpPwotICogQHBhcmFtIGMgMTYtYml0IGNvZGUgdW5p
dAotICogQHJldHVybiBUUlVFIG9yIEZBTFNFCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2Rl
ZmluZSBVMTZfSVNfU1VSUk9HQVRFKGMpIFVfSVNfU1VSUk9HQVRFKGMpCi0KLS8qKgotICogQXNz
dW1pbmcgYyBpcyBhIHN1cnJvZ2F0ZSBjb2RlIHBvaW50IChVMTZfSVNfU1VSUk9HQVRFKGMpKSwK
LSAqIGlzIGl0IGEgbGVhZCBzdXJyb2dhdGU/Ci0gKiBAcGFyYW0gYyAxNi1iaXQgY29kZSB1bml0
Ci0gKiBAcmV0dXJuIFRSVUUgb3IgRkFMU0UKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVm
aW5lIFUxNl9JU19TVVJST0dBVEVfTEVBRChjKSAoKChjKSYweDQwMCk9PTApCi0KLS8qKgotICog
QXNzdW1pbmcgYyBpcyBhIHN1cnJvZ2F0ZSBjb2RlIHBvaW50IChVMTZfSVNfU1VSUk9HQVRFKGMp
KSwKLSAqIGlzIGl0IGEgdHJhaWwgc3Vycm9nYXRlPwotICogQHBhcmFtIGMgMTYtYml0IGNvZGUg
dW5pdAotICogQHJldHVybiBUUlVFIG9yIEZBTFNFCi0gKiBAc3RhYmxlIElDVSA0LjIKLSAqLwot
I2RlZmluZSBVMTZfSVNfU1VSUk9HQVRFX1RSQUlMKGMpICgoKGMpJjB4NDAwKSE9MCkKLQotLyoq
Ci0gKiBIZWxwZXIgY29uc3RhbnQgZm9yIFUxNl9HRVRfU1VQUExFTUVOVEFSWS4KLSAqIEBpbnRl
cm5hbAotICovCi0jZGVmaW5lIFUxNl9TVVJST0dBVEVfT0ZGU0VUICgoMHhkODAwPDwxMFVMKSsw
eGRjMDAtMHgxMDAwMCkKLQotLyoqCi0gKiBHZXQgYSBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnQg
dmFsdWUgKFUrMTAwMDAuLlUrMTBmZmZmKQotICogZnJvbSBpdHMgbGVhZCBhbmQgdHJhaWwgc3Vy
cm9nYXRlcy4KLSAqIFRoZSByZXN1bHQgaXMgdW5kZWZpbmVkIGlmIHRoZSBpbnB1dCB2YWx1ZXMg
YXJlIG5vdAotICogbGVhZCBhbmQgdHJhaWwgc3Vycm9nYXRlcy4KLSAqCi0gKiBAcGFyYW0gbGVh
ZCBsZWFkIHN1cnJvZ2F0ZSAoVStkODAwLi5VK2RiZmYpCi0gKiBAcGFyYW0gdHJhaWwgdHJhaWwg
c3Vycm9nYXRlIChVK2RjMDAuLlUrZGZmZikKLSAqIEByZXR1cm4gc3VwcGxlbWVudGFyeSBjb2Rl
IHBvaW50IChVKzEwMDAwLi5VKzEwZmZmZikKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVm
aW5lIFUxNl9HRVRfU1VQUExFTUVOVEFSWShsZWFkLCB0cmFpbCkgXAotICAgICgoKFVDaGFyMzIp
KGxlYWQpPDwxMFVMKSsoVUNoYXIzMikodHJhaWwpLVUxNl9TVVJST0dBVEVfT0ZGU0VUKQotCi0K
LS8qKgotICogR2V0IHRoZSBsZWFkIHN1cnJvZ2F0ZSAoMHhkODAwLi4weGRiZmYpIGZvciBhCi0g
KiBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnQgKDB4MTAwMDAuLjB4MTBmZmZmKS4KLSAqIEBwYXJh
bSBzdXBwbGVtZW50YXJ5IDMyLWJpdCBjb2RlIHBvaW50IChVKzEwMDAwLi5VKzEwZmZmZikKLSAq
IEByZXR1cm4gbGVhZCBzdXJyb2dhdGUgKFUrZDgwMC4uVStkYmZmKSBmb3Igc3VwcGxlbWVudGFy
eQotICogQHN0YWJsZSBJQ1UgMi40Ci0gKi8KLSNkZWZpbmUgVTE2X0xFQUQoc3VwcGxlbWVudGFy
eSkgKFVDaGFyKSgoKHN1cHBsZW1lbnRhcnkpPj4xMCkrMHhkN2MwKQotCi0vKioKLSAqIEdldCB0
aGUgdHJhaWwgc3Vycm9nYXRlICgweGRjMDAuLjB4ZGZmZikgZm9yIGEKLSAqIHN1cHBsZW1lbnRh
cnkgY29kZSBwb2ludCAoMHgxMDAwMC4uMHgxMGZmZmYpLgotICogQHBhcmFtIHN1cHBsZW1lbnRh
cnkgMzItYml0IGNvZGUgcG9pbnQgKFUrMTAwMDAuLlUrMTBmZmZmKQotICogQHJldHVybiB0cmFp
bCBzdXJyb2dhdGUgKFUrZGMwMC4uVStkZmZmKSBmb3Igc3VwcGxlbWVudGFyeQotICogQHN0YWJs
ZSBJQ1UgMi40Ci0gKi8KLSNkZWZpbmUgVTE2X1RSQUlMKHN1cHBsZW1lbnRhcnkpIChVQ2hhciko
KChzdXBwbGVtZW50YXJ5KSYweDNmZil8MHhkYzAwKQotCi0vKioKLSAqIEhvdyBtYW55IDE2LWJp
dCBjb2RlIHVuaXRzIGFyZSB1c2VkIHRvIGVuY29kZSB0aGlzIFVuaWNvZGUgY29kZSBwb2ludD8g
KDEgb3IgMikKLSAqIFRoZSByZXN1bHQgaXMgbm90IGRlZmluZWQgaWYgYyBpcyBub3QgYSBVbmlj
b2RlIGNvZGUgcG9pbnQgKFUrMDAwMC4uVSsxMGZmZmYpLgotICogQHBhcmFtIGMgMzItYml0IGNv
ZGUgcG9pbnQKLSAqIEByZXR1cm4gMSBvciAyCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2Rl
ZmluZSBVMTZfTEVOR1RIKGMpICgodWludDMyX3QpKGMpPD0weGZmZmYgPyAxIDogMikKLQotLyoq
Ci0gKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgMTYtYml0IGNvZGUgdW5pdHMgcGVyIFVuaWNvZGUg
Y29kZSBwb2ludCAoVSswMDAwLi5VKzEwZmZmZikuCi0gKiBAcmV0dXJuIDIKLSAqIEBzdGFibGUg
SUNVIDIuNAotICovCi0jZGVmaW5lIFUxNl9NQVhfTEVOR1RIIDIKLQotLyoqCi0gKiBHZXQgYSBj
b2RlIHBvaW50IGZyb20gYSBzdHJpbmcgYXQgYSByYW5kb20tYWNjZXNzIG9mZnNldCwKLSAqIHdp
dGhvdXQgY2hhbmdpbmcgdGhlIG9mZnNldC4KLSAqICJVbnNhZmUiIG1hY3JvLCBhc3N1bWVzIHdl
bGwtZm9ybWVkIFVURi0xNi4KLSAqCi0gKiBUaGUgb2Zmc2V0IG1heSBwb2ludCB0byBlaXRoZXIg
dGhlIGxlYWQgb3IgdHJhaWwgc3Vycm9nYXRlIHVuaXQKLSAqIGZvciBhIHN1cHBsZW1lbnRhcnkg
Y29kZSBwb2ludCwgaW4gd2hpY2ggY2FzZSB0aGUgbWFjcm8gd2lsbCByZWFkCi0gKiB0aGUgYWRq
YWNlbnQgbWF0Y2hpbmcgc3Vycm9nYXRlIGFzIHdlbGwuCi0gKiBUaGUgcmVzdWx0IGlzIHVuZGVm
aW5lZCBpZiB0aGUgb2Zmc2V0IHBvaW50cyB0byBhIHNpbmdsZSwgdW5wYWlyZWQgc3Vycm9nYXRl
LgotICogSXRlcmF0aW9uIHRocm91Z2ggYSBzdHJpbmcgaXMgbW9yZSBlZmZpY2llbnQgd2l0aCBV
MTZfTkVYVF9VTlNBRkUgb3IgVTE2X05FWFQuCi0gKgotICogQHBhcmFtIHMgY29uc3QgVUNoYXIg
KiBzdHJpbmcKLSAqIEBwYXJhbSBpIHN0cmluZyBvZmZzZXQKLSAqIEBwYXJhbSBjIG91dHB1dCBV
Q2hhcjMyIHZhcmlhYmxlCi0gKiBAc2VlIFUxNl9HRVQKLSAqIEBzdGFibGUgSUNVIDIuNAotICov
Ci0jZGVmaW5lIFUxNl9HRVRfVU5TQUZFKHMsIGksIGMpIHsgXAotICAgIChjKT0ocylbaV07IFwK
LSAgICBpZihVMTZfSVNfU1VSUk9HQVRFKGMpKSB7IFwKLSAgICAgICAgaWYoVTE2X0lTX1NVUlJP
R0FURV9MRUFEKGMpKSB7IFwKLSAgICAgICAgICAgIChjKT1VMTZfR0VUX1NVUFBMRU1FTlRBUlko
KGMpLCAocylbKGkpKzFdKTsgXAotICAgICAgICB9IGVsc2UgeyBcCi0gICAgICAgICAgICAoYyk9
VTE2X0dFVF9TVVBQTEVNRU5UQVJZKChzKVsoaSktMV0sIChjKSk7IFwKLSAgICAgICAgfSBcCi0g
ICAgfSBcCi19Ci0KLS8qKgotICogR2V0IGEgY29kZSBwb2ludCBmcm9tIGEgc3RyaW5nIGF0IGEg
cmFuZG9tLWFjY2VzcyBvZmZzZXQsCi0gKiB3aXRob3V0IGNoYW5naW5nIHRoZSBvZmZzZXQuCi0g
KiAiU2FmZSIgbWFjcm8sIGhhbmRsZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyBhbmQgY2hlY2tzIGZv
ciBzdHJpbmcgYm91bmRhcmllcy4KLSAqCi0gKiBUaGUgb2Zmc2V0IG1heSBwb2ludCB0byBlaXRo
ZXIgdGhlIGxlYWQgb3IgdHJhaWwgc3Vycm9nYXRlIHVuaXQKLSAqIGZvciBhIHN1cHBsZW1lbnRh
cnkgY29kZSBwb2ludCwgaW4gd2hpY2ggY2FzZSB0aGUgbWFjcm8gd2lsbCByZWFkCi0gKiB0aGUg
YWRqYWNlbnQgbWF0Y2hpbmcgc3Vycm9nYXRlIGFzIHdlbGwuCi0gKgotICogVGhlIGxlbmd0aCBj
YW4gYmUgbmVnYXRpdmUgZm9yIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nLgotICoKLSAqIElmIHRo
ZSBvZmZzZXQgcG9pbnRzIHRvIGEgc2luZ2xlLCB1bnBhaXJlZCBzdXJyb2dhdGUsIHRoZW4gdGhh
dCBpdHNlbGYKLSAqIHdpbGwgYmUgcmV0dXJuZWQgYXMgdGhlIGNvZGUgcG9pbnQuCi0gKiBJdGVy
YXRpb24gdGhyb3VnaCBhIHN0cmluZyBpcyBtb3JlIGVmZmljaWVudCB3aXRoIFUxNl9ORVhUX1VO
U0FGRSBvciBVMTZfTkVYVC4KLSAqCi0gKiBAcGFyYW0gcyBjb25zdCBVQ2hhciAqIHN0cmluZwot
ICogQHBhcmFtIHN0YXJ0IHN0YXJ0aW5nIHN0cmluZyBvZmZzZXQgKHVzdWFsbHkgMCkKLSAqIEBw
YXJhbSBpIHN0cmluZyBvZmZzZXQsIG11c3QgYmUgc3RhcnQ8PWk8bGVuZ3RoCi0gKiBAcGFyYW0g
bGVuZ3RoIHN0cmluZyBsZW5ndGgKLSAqIEBwYXJhbSBjIG91dHB1dCBVQ2hhcjMyIHZhcmlhYmxl
Ci0gKiBAc2VlIFUxNl9HRVRfVU5TQUZFCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmlu
ZSBVMTZfR0VUKHMsIHN0YXJ0LCBpLCBsZW5ndGgsIGMpIHsgXAotICAgIChjKT0ocylbaV07IFwK
LSAgICBpZihVMTZfSVNfU1VSUk9HQVRFKGMpKSB7IFwKLSAgICAgICAgdWludDE2X3QgX19jMjsg
XAotICAgICAgICBpZihVMTZfSVNfU1VSUk9HQVRFX0xFQUQoYykpIHsgXAotICAgICAgICAgICAg
aWYoKGkpKzEhPShsZW5ndGgpICYmIFUxNl9JU19UUkFJTChfX2MyPShzKVsoaSkrMV0pKSB7IFwK
LSAgICAgICAgICAgICAgICAoYyk9VTE2X0dFVF9TVVBQTEVNRU5UQVJZKChjKSwgX19jMik7IFwK
LSAgICAgICAgICAgIH0gXAotICAgICAgICB9IGVsc2UgeyBcCi0gICAgICAgICAgICBpZigoaSk+
KHN0YXJ0KSAmJiBVMTZfSVNfTEVBRChfX2MyPShzKVsoaSktMV0pKSB7IFwKLSAgICAgICAgICAg
ICAgICAoYyk9VTE2X0dFVF9TVVBQTEVNRU5UQVJZKF9fYzIsIChjKSk7IFwKLSAgICAgICAgICAg
IH0gXAotICAgICAgICB9IFwKLSAgICB9IFwKLX0KLQotLyogZGVmaW5pdGlvbnMgd2l0aCBmb3J3
YXJkIGl0ZXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K
LQotLyoqCi0gKiBHZXQgYSBjb2RlIHBvaW50IGZyb20gYSBzdHJpbmcgYXQgYSBjb2RlIHBvaW50
IGJvdW5kYXJ5IG9mZnNldCwKLSAqIGFuZCBhZHZhbmNlIHRoZSBvZmZzZXQgdG8gdGhlIG5leHQg
Y29kZSBwb2ludCBib3VuZGFyeS4KLSAqIChQb3N0LWluY3JlbWVudGluZyBmb3J3YXJkIGl0ZXJh
dGlvbi4pCi0gKiAiVW5zYWZlIiBtYWNybywgYXNzdW1lcyB3ZWxsLWZvcm1lZCBVVEYtMTYuCi0g
KgotICogVGhlIG9mZnNldCBtYXkgcG9pbnQgdG8gdGhlIGxlYWQgc3Vycm9nYXRlIHVuaXQKLSAq
IGZvciBhIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludCwgaW4gd2hpY2ggY2FzZSB0aGUgbWFjcm8g
d2lsbCByZWFkCi0gKiB0aGUgZm9sbG93aW5nIHRyYWlsIHN1cnJvZ2F0ZSBhcyB3ZWxsLgotICog
SWYgdGhlIG9mZnNldCBwb2ludHMgdG8gYSB0cmFpbCBzdXJyb2dhdGUsIHRoZW4gdGhhdCBpdHNl
bGYKLSAqIHdpbGwgYmUgcmV0dXJuZWQgYXMgdGhlIGNvZGUgcG9pbnQuCi0gKiBUaGUgcmVzdWx0
IGlzIHVuZGVmaW5lZCBpZiB0aGUgb2Zmc2V0IHBvaW50cyB0byBhIHNpbmdsZSwgdW5wYWlyZWQg
bGVhZCBzdXJyb2dhdGUuCi0gKgotICogQHBhcmFtIHMgY29uc3QgVUNoYXIgKiBzdHJpbmcKLSAq
IEBwYXJhbSBpIHN0cmluZyBvZmZzZXQKLSAqIEBwYXJhbSBjIG91dHB1dCBVQ2hhcjMyIHZhcmlh
YmxlCi0gKiBAc2VlIFUxNl9ORVhUCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBV
MTZfTkVYVF9VTlNBRkUocywgaSwgYykgeyBcCi0gICAgKGMpPShzKVsoaSkrK107IFwKLSAgICBp
ZihVMTZfSVNfTEVBRChjKSkgeyBcCi0gICAgICAgIChjKT1VMTZfR0VUX1NVUFBMRU1FTlRBUlko
KGMpLCAocylbKGkpKytdKTsgXAotICAgIH0gXAotfQotCi0vKioKLSAqIEdldCBhIGNvZGUgcG9p
bnQgZnJvbSBhIHN0cmluZyBhdCBhIGNvZGUgcG9pbnQgYm91bmRhcnkgb2Zmc2V0LAotICogYW5k
IGFkdmFuY2UgdGhlIG9mZnNldCB0byB0aGUgbmV4dCBjb2RlIHBvaW50IGJvdW5kYXJ5LgotICog
KFBvc3QtaW5jcmVtZW50aW5nIGZvcndhcmQgaXRlcmF0aW9uLikKLSAqICJTYWZlIiBtYWNybywg
aGFuZGxlcyB1bnBhaXJlZCBzdXJyb2dhdGVzIGFuZCBjaGVja3MgZm9yIHN0cmluZyBib3VuZGFy
aWVzLgotICoKLSAqIFRoZSBsZW5ndGggY2FuIGJlIG5lZ2F0aXZlIGZvciBhIE5VTC10ZXJtaW5h
dGVkIHN0cmluZy4KLSAqCi0gKiBUaGUgb2Zmc2V0IG1heSBwb2ludCB0byB0aGUgbGVhZCBzdXJy
b2dhdGUgdW5pdAotICogZm9yIGEgc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50LCBpbiB3aGljaCBj
YXNlIHRoZSBtYWNybyB3aWxsIHJlYWQKLSAqIHRoZSBmb2xsb3dpbmcgdHJhaWwgc3Vycm9nYXRl
IGFzIHdlbGwuCi0gKiBJZiB0aGUgb2Zmc2V0IHBvaW50cyB0byBhIHRyYWlsIHN1cnJvZ2F0ZSBv
cgotICogdG8gYSBzaW5nbGUsIHVucGFpcmVkIGxlYWQgc3Vycm9nYXRlLCB0aGVuIHRoYXQgaXRz
ZWxmCi0gKiB3aWxsIGJlIHJldHVybmVkIGFzIHRoZSBjb2RlIHBvaW50LgotICoKLSAqIEBwYXJh
bSBzIGNvbnN0IFVDaGFyICogc3RyaW5nCi0gKiBAcGFyYW0gaSBzdHJpbmcgb2Zmc2V0LCBtdXN0
IGJlIGk8bGVuZ3RoCi0gKiBAcGFyYW0gbGVuZ3RoIHN0cmluZyBsZW5ndGgKLSAqIEBwYXJhbSBj
IG91dHB1dCBVQ2hhcjMyIHZhcmlhYmxlCi0gKiBAc2VlIFUxNl9ORVhUX1VOU0FGRQotICogQHN0
YWJsZSBJQ1UgMi40Ci0gKi8KLSNkZWZpbmUgVTE2X05FWFQocywgaSwgbGVuZ3RoLCBjKSB7IFwK
LSAgICAoYyk9KHMpWyhpKSsrXTsgXAotICAgIGlmKFUxNl9JU19MRUFEKGMpKSB7IFwKLSAgICAg
ICAgdWludDE2X3QgX19jMjsgXAotICAgICAgICBpZigoaSkhPShsZW5ndGgpICYmIFUxNl9JU19U
UkFJTChfX2MyPShzKVsoaSldKSkgeyBcCi0gICAgICAgICAgICArKyhpKTsgXAotICAgICAgICAg
ICAgKGMpPVUxNl9HRVRfU1VQUExFTUVOVEFSWSgoYyksIF9fYzIpOyBcCi0gICAgICAgIH0gXAot
ICAgIH0gXAotfQotCi0vKioKLSAqIEFwcGVuZCBhIGNvZGUgcG9pbnQgdG8gYSBzdHJpbmcsIG92
ZXJ3cml0aW5nIDEgb3IgMiBjb2RlIHVuaXRzLgotICogVGhlIG9mZnNldCBwb2ludHMgdG8gdGhl
IGN1cnJlbnQgZW5kIG9mIHRoZSBzdHJpbmcgY29udGVudHMKLSAqIGFuZCBpcyBhZHZhbmNlZCAo
cG9zdC1pbmNyZW1lbnQpLgotICogIlVuc2FmZSIgbWFjcm8sIGFzc3VtZXMgYSB2YWxpZCBjb2Rl
IHBvaW50IGFuZCBzdWZmaWNpZW50IHNwYWNlIGluIHRoZSBzdHJpbmcuCi0gKiBPdGhlcndpc2Us
IHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgotICoKLSAqIEBwYXJhbSBzIGNvbnN0IFVDaGFyICog
c3RyaW5nIGJ1ZmZlcgotICogQHBhcmFtIGkgc3RyaW5nIG9mZnNldAotICogQHBhcmFtIGMgY29k
ZSBwb2ludCB0byBhcHBlbmQKLSAqIEBzZWUgVTE2X0FQUEVORAotICogQHN0YWJsZSBJQ1UgMi40
Ci0gKi8KLSNkZWZpbmUgVTE2X0FQUEVORF9VTlNBRkUocywgaSwgYykgeyBcCi0gICAgaWYoKHVp
bnQzMl90KShjKTw9MHhmZmZmKSB7IFwKLSAgICAgICAgKHMpWyhpKSsrXT0odWludDE2X3QpKGMp
OyBcCi0gICAgfSBlbHNlIHsgXAotICAgICAgICAocylbKGkpKytdPSh1aW50MTZfdCkoKChjKT4+
MTApKzB4ZDdjMCk7IFwKLSAgICAgICAgKHMpWyhpKSsrXT0odWludDE2X3QpKCgoYykmMHgzZmYp
fDB4ZGMwMCk7IFwKLSAgICB9IFwKLX0KLQotLyoqCi0gKiBBcHBlbmQgYSBjb2RlIHBvaW50IHRv
IGEgc3RyaW5nLCBvdmVyd3JpdGluZyAxIG9yIDIgY29kZSB1bml0cy4KLSAqIFRoZSBvZmZzZXQg
cG9pbnRzIHRvIHRoZSBjdXJyZW50IGVuZCBvZiB0aGUgc3RyaW5nIGNvbnRlbnRzCi0gKiBhbmQg
aXMgYWR2YW5jZWQgKHBvc3QtaW5jcmVtZW50KS4KLSAqICJTYWZlIiBtYWNybywgY2hlY2tzIGZv
ciBhIHZhbGlkIGNvZGUgcG9pbnQuCi0gKiBJZiBhIHN1cnJvZ2F0ZSBwYWlyIGlzIHdyaXR0ZW4s
IGNoZWNrcyBmb3Igc3VmZmljaWVudCBzcGFjZSBpbiB0aGUgc3RyaW5nLgotICogSWYgdGhlIGNv
ZGUgcG9pbnQgaXMgbm90IHZhbGlkIG9yIGEgdHJhaWwgc3Vycm9nYXRlIGRvZXMgbm90IGZpdCwK
LSAqIHRoZW4gaXNFcnJvciBpcyBzZXQgdG8gVFJVRS4KLSAqCi0gKiBAcGFyYW0gcyBjb25zdCBV
Q2hhciAqIHN0cmluZyBidWZmZXIKLSAqIEBwYXJhbSBpIHN0cmluZyBvZmZzZXQsIG11c3QgYmUg
aTxjYXBhY2l0eQotICogQHBhcmFtIGNhcGFjaXR5IHNpemUgb2YgdGhlIHN0cmluZyBidWZmZXIK
LSAqIEBwYXJhbSBjIGNvZGUgcG9pbnQgdG8gYXBwZW5kCi0gKiBAcGFyYW0gaXNFcnJvciBvdXRw
dXQgVUJvb2wgc2V0IHRvIFRSVUUgaWYgYW4gZXJyb3Igb2NjdXJzLCBvdGhlcndpc2Ugbm90IG1v
ZGlmaWVkCi0gKiBAc2VlIFUxNl9BUFBFTkRfVU5TQUZFCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAq
LwotI2RlZmluZSBVMTZfQVBQRU5EKHMsIGksIGNhcGFjaXR5LCBjLCBpc0Vycm9yKSB7IFwKLSAg
ICBpZigodWludDMyX3QpKGMpPD0weGZmZmYpIHsgXAotICAgICAgICAocylbKGkpKytdPSh1aW50
MTZfdCkoYyk7IFwKLSAgICB9IGVsc2UgaWYoKHVpbnQzMl90KShjKTw9MHgxMGZmZmYgJiYgKGkp
KzE8KGNhcGFjaXR5KSkgeyBcCi0gICAgICAgIChzKVsoaSkrK109KHVpbnQxNl90KSgoKGMpPj4x
MCkrMHhkN2MwKTsgXAotICAgICAgICAocylbKGkpKytdPSh1aW50MTZfdCkoKChjKSYweDNmZil8
MHhkYzAwKTsgXAotICAgIH0gZWxzZSAvKiBjPjB4MTBmZmZmIG9yIG5vdCBlbm91Z2ggc3BhY2Ug
Ki8geyBcCi0gICAgICAgIChpc0Vycm9yKT1UUlVFOyBcCi0gICAgfSBcCi19Ci0KLS8qKgotICog
QWR2YW5jZSB0aGUgc3RyaW5nIG9mZnNldCBmcm9tIG9uZSBjb2RlIHBvaW50IGJvdW5kYXJ5IHRv
IHRoZSBuZXh0LgotICogKFBvc3QtaW5jcmVtZW50aW5nIGl0ZXJhdGlvbi4pCi0gKiAiVW5zYWZl
IiBtYWNybywgYXNzdW1lcyB3ZWxsLWZvcm1lZCBVVEYtMTYuCi0gKgotICogQHBhcmFtIHMgY29u
c3QgVUNoYXIgKiBzdHJpbmcKLSAqIEBwYXJhbSBpIHN0cmluZyBvZmZzZXQKLSAqIEBzZWUgVTE2
X0ZXRF8xCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBVMTZfRldEXzFfVU5TQUZF
KHMsIGkpIHsgXAotICAgIGlmKFUxNl9JU19MRUFEKChzKVsoaSkrK10pKSB7IFwKLSAgICAgICAg
KysoaSk7IFwKLSAgICB9IFwKLX0KLQotLyoqCi0gKiBBZHZhbmNlIHRoZSBzdHJpbmcgb2Zmc2V0
IGZyb20gb25lIGNvZGUgcG9pbnQgYm91bmRhcnkgdG8gdGhlIG5leHQuCi0gKiAoUG9zdC1pbmNy
ZW1lbnRpbmcgaXRlcmF0aW9uLikKLSAqICJTYWZlIiBtYWNybywgaGFuZGxlcyB1bnBhaXJlZCBz
dXJyb2dhdGVzIGFuZCBjaGVja3MgZm9yIHN0cmluZyBib3VuZGFyaWVzLgotICoKLSAqIFRoZSBs
ZW5ndGggY2FuIGJlIG5lZ2F0aXZlIGZvciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4KLSAqCi0g
KiBAcGFyYW0gcyBjb25zdCBVQ2hhciAqIHN0cmluZwotICogQHBhcmFtIGkgc3RyaW5nIG9mZnNl
dCwgbXVzdCBiZSBpPGxlbmd0aAotICogQHBhcmFtIGxlbmd0aCBzdHJpbmcgbGVuZ3RoCi0gKiBA
c2VlIFUxNl9GV0RfMV9VTlNBRkUKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVmaW5lIFUx
Nl9GV0RfMShzLCBpLCBsZW5ndGgpIHsgXAotICAgIGlmKFUxNl9JU19MRUFEKChzKVsoaSkrK10p
ICYmIChpKSE9KGxlbmd0aCkgJiYgVTE2X0lTX1RSQUlMKChzKVtpXSkpIHsgXAotICAgICAgICAr
KyhpKTsgXAotICAgIH0gXAotfQotCi0vKioKLSAqIEFkdmFuY2UgdGhlIHN0cmluZyBvZmZzZXQg
ZnJvbSBvbmUgY29kZSBwb2ludCBib3VuZGFyeSB0byB0aGUgbi10aCBuZXh0IG9uZSwKLSAqIGku
ZS4sIG1vdmUgZm9yd2FyZCBieSBuIGNvZGUgcG9pbnRzLgotICogKFBvc3QtaW5jcmVtZW50aW5n
IGl0ZXJhdGlvbi4pCi0gKiAiVW5zYWZlIiBtYWNybywgYXNzdW1lcyB3ZWxsLWZvcm1lZCBVVEYt
MTYuCi0gKgotICogQHBhcmFtIHMgY29uc3QgVUNoYXIgKiBzdHJpbmcKLSAqIEBwYXJhbSBpIHN0
cmluZyBvZmZzZXQKLSAqIEBwYXJhbSBuIG51bWJlciBvZiBjb2RlIHBvaW50cyB0byBza2lwCi0g
KiBAc2VlIFUxNl9GV0RfTgotICogQHN0YWJsZSBJQ1UgMi40Ci0gKi8KLSNkZWZpbmUgVTE2X0ZX
RF9OX1VOU0FGRShzLCBpLCBuKSB7IFwKLSAgICBpbnQzMl90IF9fTj0obik7IFwKLSAgICB3aGls
ZShfX04+MCkgeyBcCi0gICAgICAgIFUxNl9GV0RfMV9VTlNBRkUocywgaSk7IFwKLSAgICAgICAg
LS1fX047IFwKLSAgICB9IFwKLX0KLQotLyoqCi0gKiBBZHZhbmNlIHRoZSBzdHJpbmcgb2Zmc2V0
IGZyb20gb25lIGNvZGUgcG9pbnQgYm91bmRhcnkgdG8gdGhlIG4tdGggbmV4dCBvbmUsCi0gKiBp
LmUuLCBtb3ZlIGZvcndhcmQgYnkgbiBjb2RlIHBvaW50cy4KLSAqIChQb3N0LWluY3JlbWVudGlu
ZyBpdGVyYXRpb24uKQotICogIlNhZmUiIG1hY3JvLCBoYW5kbGVzIHVucGFpcmVkIHN1cnJvZ2F0
ZXMgYW5kIGNoZWNrcyBmb3Igc3RyaW5nIGJvdW5kYXJpZXMuCi0gKgotICogVGhlIGxlbmd0aCBj
YW4gYmUgbmVnYXRpdmUgZm9yIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nLgotICoKLSAqIEBwYXJh
bSBzIGNvbnN0IFVDaGFyICogc3RyaW5nCi0gKiBAcGFyYW0gaSBpbnQzMl90IHN0cmluZyBvZmZz
ZXQsIG11c3QgYmUgaTxsZW5ndGgKLSAqIEBwYXJhbSBsZW5ndGggaW50MzJfdCBzdHJpbmcgbGVu
Z3RoCi0gKiBAcGFyYW0gbiBudW1iZXIgb2YgY29kZSBwb2ludHMgdG8gc2tpcAotICogQHNlZSBV
MTZfRldEX05fVU5TQUZFCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBVMTZfRldE
X04ocywgaSwgbGVuZ3RoLCBuKSB7IFwKLSAgICBpbnQzMl90IF9fTj0obik7IFwKLSAgICB3aGls
ZShfX04+MCAmJiAoKGkpPChsZW5ndGgpIHx8ICgobGVuZ3RoKTwwICYmIChzKVtpXSE9MCkpKSB7
IFwKLSAgICAgICAgVTE2X0ZXRF8xKHMsIGksIGxlbmd0aCk7IFwKLSAgICAgICAgLS1fX047IFwK
LSAgICB9IFwKLX0KLQotLyoqCi0gKiBBZGp1c3QgYSByYW5kb20tYWNjZXNzIG9mZnNldCB0byBh
IGNvZGUgcG9pbnQgYm91bmRhcnkKLSAqIGF0IHRoZSBzdGFydCBvZiBhIGNvZGUgcG9pbnQuCi0g
KiBJZiB0aGUgb2Zmc2V0IHBvaW50cyB0byB0aGUgdHJhaWwgc3Vycm9nYXRlIG9mIGEgc3Vycm9n
YXRlIHBhaXIsCi0gKiB0aGVuIHRoZSBvZmZzZXQgaXMgZGVjcmVtZW50ZWQuCi0gKiBPdGhlcndp
c2UsIGl0IGlzIG5vdCBtb2RpZmllZC4KLSAqICJVbnNhZmUiIG1hY3JvLCBhc3N1bWVzIHdlbGwt
Zm9ybWVkIFVURi0xNi4KLSAqCi0gKiBAcGFyYW0gcyBjb25zdCBVQ2hhciAqIHN0cmluZwotICog
QHBhcmFtIGkgc3RyaW5nIG9mZnNldAotICogQHNlZSBVMTZfU0VUX0NQX1NUQVJUCi0gKiBAc3Rh
YmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBVMTZfU0VUX0NQX1NUQVJUX1VOU0FGRShzLCBpKSB7
IFwKLSAgICBpZihVMTZfSVNfVFJBSUwoKHMpW2ldKSkgeyBcCi0gICAgICAgIC0tKGkpOyBcCi0g
ICAgfSBcCi19Ci0KLS8qKgotICogQWRqdXN0IGEgcmFuZG9tLWFjY2VzcyBvZmZzZXQgdG8gYSBj
b2RlIHBvaW50IGJvdW5kYXJ5Ci0gKiBhdCB0aGUgc3RhcnQgb2YgYSBjb2RlIHBvaW50LgotICog
SWYgdGhlIG9mZnNldCBwb2ludHMgdG8gdGhlIHRyYWlsIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0
ZSBwYWlyLAotICogdGhlbiB0aGUgb2Zmc2V0IGlzIGRlY3JlbWVudGVkLgotICogT3RoZXJ3aXNl
LCBpdCBpcyBub3QgbW9kaWZpZWQuCi0gKiAiU2FmZSIgbWFjcm8sIGhhbmRsZXMgdW5wYWlyZWQg
c3Vycm9nYXRlcyBhbmQgY2hlY2tzIGZvciBzdHJpbmcgYm91bmRhcmllcy4KLSAqCi0gKiBAcGFy
YW0gcyBjb25zdCBVQ2hhciAqIHN0cmluZwotICogQHBhcmFtIHN0YXJ0IHN0YXJ0aW5nIHN0cmlu
ZyBvZmZzZXQgKHVzdWFsbHkgMCkKLSAqIEBwYXJhbSBpIHN0cmluZyBvZmZzZXQsIG11c3QgYmUg
c3RhcnQ8PWkKLSAqIEBzZWUgVTE2X1NFVF9DUF9TVEFSVF9VTlNBRkUKLSAqIEBzdGFibGUgSUNV
IDIuNAotICovCi0jZGVmaW5lIFUxNl9TRVRfQ1BfU1RBUlQocywgc3RhcnQsIGkpIHsgXAotICAg
IGlmKFUxNl9JU19UUkFJTCgocylbaV0pICYmIChpKT4oc3RhcnQpICYmIFUxNl9JU19MRUFEKChz
KVsoaSktMV0pKSB7IFwKLSAgICAgICAgLS0oaSk7IFwKLSAgICB9IFwKLX0KLQotLyogZGVmaW5p
dGlvbnMgd2l0aCBiYWNrd2FyZCBpdGVyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KLQotLyoqCi0gKiBNb3ZlIHRoZSBzdHJpbmcgb2Zmc2V0IGZyb20gb25l
IGNvZGUgcG9pbnQgYm91bmRhcnkgdG8gdGhlIHByZXZpb3VzIG9uZQotICogYW5kIGdldCB0aGUg
Y29kZSBwb2ludCBiZXR3ZWVuIHRoZW0uCi0gKiAoUHJlLWRlY3JlbWVudGluZyBiYWNrd2FyZCBp
dGVyYXRpb24uKQotICogIlVuc2FmZSIgbWFjcm8sIGFzc3VtZXMgd2VsbC1mb3JtZWQgVVRGLTE2
LgotICoKLSAqIFRoZSBpbnB1dCBvZmZzZXQgbWF5IGJlIHRoZSBzYW1lIGFzIHRoZSBzdHJpbmcg
bGVuZ3RoLgotICogSWYgdGhlIG9mZnNldCBpcyBiZWhpbmQgYSB0cmFpbCBzdXJyb2dhdGUgdW5p
dAotICogZm9yIGEgc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50LCB0aGVuIHRoZSBtYWNybyB3aWxs
IHJlYWQKLSAqIHRoZSBwcmVjZWRpbmcgbGVhZCBzdXJyb2dhdGUgYXMgd2VsbC4KLSAqIElmIHRo
ZSBvZmZzZXQgaXMgYmVoaW5kIGEgbGVhZCBzdXJyb2dhdGUsIHRoZW4gdGhhdCBpdHNlbGYKLSAq
IHdpbGwgYmUgcmV0dXJuZWQgYXMgdGhlIGNvZGUgcG9pbnQuCi0gKiBUaGUgcmVzdWx0IGlzIHVu
ZGVmaW5lZCBpZiB0aGUgb2Zmc2V0IGlzIGJlaGluZCBhIHNpbmdsZSwgdW5wYWlyZWQgdHJhaWwg
c3Vycm9nYXRlLgotICoKLSAqIEBwYXJhbSBzIGNvbnN0IFVDaGFyICogc3RyaW5nCi0gKiBAcGFy
YW0gaSBzdHJpbmcgb2Zmc2V0Ci0gKiBAcGFyYW0gYyBvdXRwdXQgVUNoYXIzMiB2YXJpYWJsZQot
ICogQHNlZSBVMTZfUFJFVgotICogQHN0YWJsZSBJQ1UgMi40Ci0gKi8KLSNkZWZpbmUgVTE2X1BS
RVZfVU5TQUZFKHMsIGksIGMpIHsgXAotICAgIChjKT0ocylbLS0oaSldOyBcCi0gICAgaWYoVTE2
X0lTX1RSQUlMKGMpKSB7IFwKLSAgICAgICAgKGMpPVUxNl9HRVRfU1VQUExFTUVOVEFSWSgocylb
LS0oaSldLCAoYykpOyBcCi0gICAgfSBcCi19Ci0KLS8qKgotICogTW92ZSB0aGUgc3RyaW5nIG9m
ZnNldCBmcm9tIG9uZSBjb2RlIHBvaW50IGJvdW5kYXJ5IHRvIHRoZSBwcmV2aW91cyBvbmUKLSAq
IGFuZCBnZXQgdGhlIGNvZGUgcG9pbnQgYmV0d2VlbiB0aGVtLgotICogKFByZS1kZWNyZW1lbnRp
bmcgYmFja3dhcmQgaXRlcmF0aW9uLikKLSAqICJTYWZlIiBtYWNybywgaGFuZGxlcyB1bnBhaXJl
ZCBzdXJyb2dhdGVzIGFuZCBjaGVja3MgZm9yIHN0cmluZyBib3VuZGFyaWVzLgotICoKLSAqIFRo
ZSBpbnB1dCBvZmZzZXQgbWF5IGJlIHRoZSBzYW1lIGFzIHRoZSBzdHJpbmcgbGVuZ3RoLgotICog
SWYgdGhlIG9mZnNldCBpcyBiZWhpbmQgYSB0cmFpbCBzdXJyb2dhdGUgdW5pdAotICogZm9yIGEg
c3VwcGxlbWVudGFyeSBjb2RlIHBvaW50LCB0aGVuIHRoZSBtYWNybyB3aWxsIHJlYWQKLSAqIHRo
ZSBwcmVjZWRpbmcgbGVhZCBzdXJyb2dhdGUgYXMgd2VsbC4KLSAqIElmIHRoZSBvZmZzZXQgaXMg
YmVoaW5kIGEgbGVhZCBzdXJyb2dhdGUgb3IgYmVoaW5kIGEgc2luZ2xlLCB1bnBhaXJlZAotICog
dHJhaWwgc3Vycm9nYXRlLCB0aGVuIHRoYXQgaXRzZWxmCi0gKiB3aWxsIGJlIHJldHVybmVkIGFz
IHRoZSBjb2RlIHBvaW50LgotICoKLSAqIEBwYXJhbSBzIGNvbnN0IFVDaGFyICogc3RyaW5nCi0g
KiBAcGFyYW0gc3RhcnQgc3RhcnRpbmcgc3RyaW5nIG9mZnNldCAodXN1YWxseSAwKQotICogQHBh
cmFtIGkgc3RyaW5nIG9mZnNldCwgbXVzdCBiZSBzdGFydDxpCi0gKiBAcGFyYW0gYyBvdXRwdXQg
VUNoYXIzMiB2YXJpYWJsZQotICogQHNlZSBVMTZfUFJFVl9VTlNBRkUKLSAqIEBzdGFibGUgSUNV
IDIuNAotICovCi0jZGVmaW5lIFUxNl9QUkVWKHMsIHN0YXJ0LCBpLCBjKSB7IFwKLSAgICAoYyk9
KHMpWy0tKGkpXTsgXAotICAgIGlmKFUxNl9JU19UUkFJTChjKSkgeyBcCi0gICAgICAgIHVpbnQx
Nl90IF9fYzI7IFwKLSAgICAgICAgaWYoKGkpPihzdGFydCkgJiYgVTE2X0lTX0xFQUQoX19jMj0o
cylbKGkpLTFdKSkgeyBcCi0gICAgICAgICAgICAtLShpKTsgXAotICAgICAgICAgICAgKGMpPVUx
Nl9HRVRfU1VQUExFTUVOVEFSWShfX2MyLCAoYykpOyBcCi0gICAgICAgIH0gXAotICAgIH0gXAot
fQotCi0vKioKLSAqIE1vdmUgdGhlIHN0cmluZyBvZmZzZXQgZnJvbSBvbmUgY29kZSBwb2ludCBi
b3VuZGFyeSB0byB0aGUgcHJldmlvdXMgb25lLgotICogKFByZS1kZWNyZW1lbnRpbmcgYmFja3dh
cmQgaXRlcmF0aW9uLikKLSAqIFRoZSBpbnB1dCBvZmZzZXQgbWF5IGJlIHRoZSBzYW1lIGFzIHRo
ZSBzdHJpbmcgbGVuZ3RoLgotICogIlVuc2FmZSIgbWFjcm8sIGFzc3VtZXMgd2VsbC1mb3JtZWQg
VVRGLTE2LgotICoKLSAqIEBwYXJhbSBzIGNvbnN0IFVDaGFyICogc3RyaW5nCi0gKiBAcGFyYW0g
aSBzdHJpbmcgb2Zmc2V0Ci0gKiBAc2VlIFUxNl9CQUNLXzEKLSAqIEBzdGFibGUgSUNVIDIuNAot
ICovCi0jZGVmaW5lIFUxNl9CQUNLXzFfVU5TQUZFKHMsIGkpIHsgXAotICAgIGlmKFUxNl9JU19U
UkFJTCgocylbLS0oaSldKSkgeyBcCi0gICAgICAgIC0tKGkpOyBcCi0gICAgfSBcCi19Ci0KLS8q
KgotICogTW92ZSB0aGUgc3RyaW5nIG9mZnNldCBmcm9tIG9uZSBjb2RlIHBvaW50IGJvdW5kYXJ5
IHRvIHRoZSBwcmV2aW91cyBvbmUuCi0gKiAoUHJlLWRlY3JlbWVudGluZyBiYWNrd2FyZCBpdGVy
YXRpb24uKQotICogVGhlIGlucHV0IG9mZnNldCBtYXkgYmUgdGhlIHNhbWUgYXMgdGhlIHN0cmlu
ZyBsZW5ndGguCi0gKiAiU2FmZSIgbWFjcm8sIGhhbmRsZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyBh
bmQgY2hlY2tzIGZvciBzdHJpbmcgYm91bmRhcmllcy4KLSAqCi0gKiBAcGFyYW0gcyBjb25zdCBV
Q2hhciAqIHN0cmluZwotICogQHBhcmFtIHN0YXJ0IHN0YXJ0aW5nIHN0cmluZyBvZmZzZXQgKHVz
dWFsbHkgMCkKLSAqIEBwYXJhbSBpIHN0cmluZyBvZmZzZXQsIG11c3QgYmUgc3RhcnQ8aQotICog
QHNlZSBVMTZfQkFDS18xX1VOU0FGRQotICogQHN0YWJsZSBJQ1UgMi40Ci0gKi8KLSNkZWZpbmUg
VTE2X0JBQ0tfMShzLCBzdGFydCwgaSkgeyBcCi0gICAgaWYoVTE2X0lTX1RSQUlMKChzKVstLShp
KV0pICYmIChpKT4oc3RhcnQpICYmIFUxNl9JU19MRUFEKChzKVsoaSktMV0pKSB7IFwKLSAgICAg
ICAgLS0oaSk7IFwKLSAgICB9IFwKLX0KLQotLyoqCi0gKiBNb3ZlIHRoZSBzdHJpbmcgb2Zmc2V0
IGZyb20gb25lIGNvZGUgcG9pbnQgYm91bmRhcnkgdG8gdGhlIG4tdGggb25lIGJlZm9yZSBpdCwK
LSAqIGkuZS4sIG1vdmUgYmFja3dhcmQgYnkgbiBjb2RlIHBvaW50cy4KLSAqIChQcmUtZGVjcmVt
ZW50aW5nIGJhY2t3YXJkIGl0ZXJhdGlvbi4pCi0gKiBUaGUgaW5wdXQgb2Zmc2V0IG1heSBiZSB0
aGUgc2FtZSBhcyB0aGUgc3RyaW5nIGxlbmd0aC4KLSAqICJVbnNhZmUiIG1hY3JvLCBhc3N1bWVz
IHdlbGwtZm9ybWVkIFVURi0xNi4KLSAqCi0gKiBAcGFyYW0gcyBjb25zdCBVQ2hhciAqIHN0cmlu
ZwotICogQHBhcmFtIGkgc3RyaW5nIG9mZnNldAotICogQHBhcmFtIG4gbnVtYmVyIG9mIGNvZGUg
cG9pbnRzIHRvIHNraXAKLSAqIEBzZWUgVTE2X0JBQ0tfTgotICogQHN0YWJsZSBJQ1UgMi40Ci0g
Ki8KLSNkZWZpbmUgVTE2X0JBQ0tfTl9VTlNBRkUocywgaSwgbikgeyBcCi0gICAgaW50MzJfdCBf
X049KG4pOyBcCi0gICAgd2hpbGUoX19OPjApIHsgXAotICAgICAgICBVMTZfQkFDS18xX1VOU0FG
RShzLCBpKTsgXAotICAgICAgICAtLV9fTjsgXAotICAgIH0gXAotfQotCi0vKioKLSAqIE1vdmUg
dGhlIHN0cmluZyBvZmZzZXQgZnJvbSBvbmUgY29kZSBwb2ludCBib3VuZGFyeSB0byB0aGUgbi10
aCBvbmUgYmVmb3JlIGl0LAotICogaS5lLiwgbW92ZSBiYWNrd2FyZCBieSBuIGNvZGUgcG9pbnRz
LgotICogKFByZS1kZWNyZW1lbnRpbmcgYmFja3dhcmQgaXRlcmF0aW9uLikKLSAqIFRoZSBpbnB1
dCBvZmZzZXQgbWF5IGJlIHRoZSBzYW1lIGFzIHRoZSBzdHJpbmcgbGVuZ3RoLgotICogIlNhZmUi
IG1hY3JvLCBoYW5kbGVzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgYW5kIGNoZWNrcyBmb3Igc3RyaW5n
IGJvdW5kYXJpZXMuCi0gKgotICogQHBhcmFtIHMgY29uc3QgVUNoYXIgKiBzdHJpbmcKLSAqIEBw
YXJhbSBzdGFydCBzdGFydCBvZiBzdHJpbmcKLSAqIEBwYXJhbSBpIHN0cmluZyBvZmZzZXQsIG11
c3QgYmUgc3RhcnQ8aQotICogQHBhcmFtIG4gbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRvIHNraXAK
LSAqIEBzZWUgVTE2X0JBQ0tfTl9VTlNBRkUKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVm
aW5lIFUxNl9CQUNLX04ocywgc3RhcnQsIGksIG4pIHsgXAotICAgIGludDMyX3QgX19OPShuKTsg
XAotICAgIHdoaWxlKF9fTj4wICYmIChpKT4oc3RhcnQpKSB7IFwKLSAgICAgICAgVTE2X0JBQ0tf
MShzLCBzdGFydCwgaSk7IFwKLSAgICAgICAgLS1fX047IFwKLSAgICB9IFwKLX0KLQotLyoqCi0g
KiBBZGp1c3QgYSByYW5kb20tYWNjZXNzIG9mZnNldCB0byBhIGNvZGUgcG9pbnQgYm91bmRhcnkg
YWZ0ZXIgYSBjb2RlIHBvaW50LgotICogSWYgdGhlIG9mZnNldCBpcyBiZWhpbmQgdGhlIGxlYWQg
c3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXIsCi0gKiB0aGVuIHRoZSBvZmZzZXQgaXMgaW5j
cmVtZW50ZWQuCi0gKiBPdGhlcndpc2UsIGl0IGlzIG5vdCBtb2RpZmllZC4KLSAqIFRoZSBpbnB1
dCBvZmZzZXQgbWF5IGJlIHRoZSBzYW1lIGFzIHRoZSBzdHJpbmcgbGVuZ3RoLgotICogIlVuc2Fm
ZSIgbWFjcm8sIGFzc3VtZXMgd2VsbC1mb3JtZWQgVVRGLTE2LgotICoKLSAqIEBwYXJhbSBzIGNv
bnN0IFVDaGFyICogc3RyaW5nCi0gKiBAcGFyYW0gaSBzdHJpbmcgb2Zmc2V0Ci0gKiBAc2VlIFUx
Nl9TRVRfQ1BfTElNSVQKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVmaW5lIFUxNl9TRVRf
Q1BfTElNSVRfVU5TQUZFKHMsIGkpIHsgXAotICAgIGlmKFUxNl9JU19MRUFEKChzKVsoaSktMV0p
KSB7IFwKLSAgICAgICAgKysoaSk7IFwKLSAgICB9IFwKLX0KLQotLyoqCi0gKiBBZGp1c3QgYSBy
YW5kb20tYWNjZXNzIG9mZnNldCB0byBhIGNvZGUgcG9pbnQgYm91bmRhcnkgYWZ0ZXIgYSBjb2Rl
IHBvaW50LgotICogSWYgdGhlIG9mZnNldCBpcyBiZWhpbmQgdGhlIGxlYWQgc3Vycm9nYXRlIG9m
IGEgc3Vycm9nYXRlIHBhaXIsCi0gKiB0aGVuIHRoZSBvZmZzZXQgaXMgaW5jcmVtZW50ZWQuCi0g
KiBPdGhlcndpc2UsIGl0IGlzIG5vdCBtb2RpZmllZC4KLSAqIFRoZSBpbnB1dCBvZmZzZXQgbWF5
IGJlIHRoZSBzYW1lIGFzIHRoZSBzdHJpbmcgbGVuZ3RoLgotICogIlNhZmUiIG1hY3JvLCBoYW5k
bGVzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgYW5kIGNoZWNrcyBmb3Igc3RyaW5nIGJvdW5kYXJpZXMu
Ci0gKgotICogVGhlIGxlbmd0aCBjYW4gYmUgbmVnYXRpdmUgZm9yIGEgTlVMLXRlcm1pbmF0ZWQg
c3RyaW5nLgotICoKLSAqIEBwYXJhbSBzIGNvbnN0IFVDaGFyICogc3RyaW5nCi0gKiBAcGFyYW0g
c3RhcnQgaW50MzJfdCBzdGFydGluZyBzdHJpbmcgb2Zmc2V0ICh1c3VhbGx5IDApCi0gKiBAcGFy
YW0gaSBpbnQzMl90IHN0cmluZyBvZmZzZXQsIHN0YXJ0PD1pPD1sZW5ndGgKLSAqIEBwYXJhbSBs
ZW5ndGggaW50MzJfdCBzdHJpbmcgbGVuZ3RoCi0gKiBAc2VlIFUxNl9TRVRfQ1BfTElNSVRfVU5T
QUZFCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBVMTZfU0VUX0NQX0xJTUlUKHMs
IHN0YXJ0LCBpLCBsZW5ndGgpIHsgXAotICAgIGlmKChzdGFydCk8KGkpICYmICgoaSk8KGxlbmd0
aCkgfHwgKGxlbmd0aCk8MCkgJiYgVTE2X0lTX0xFQUQoKHMpWyhpKS0xXSkgJiYgVTE2X0lTX1RS
QUlMKChzKVtpXSkpIHsgXAotICAgICAgICArKyhpKTsgXAotICAgIH0gXAotfQotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNp
ZXMvaWN1L3VuaWNvZGUvdXRmOC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3Rm
L2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS91dGY4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDdiZDBiMGU4NTI2MGYwMjBhODg1ZDU5YWJjMjRiZjMwNTA5N2QyNWIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS91dGY4LmgKKysrIC9kZXYv
bnVsbApAQCAtMSw4MjQgKzAsMCBAQAotLyoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSog
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5l
cwotKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotKgot
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgotKiAgIGZpbGUgbmFtZTogIHV0ZjguaAotKiAgIGVuY29k
aW5nOiAgIFVTLUFTQ0lJCi0qICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCi0qICAgaW5kZW50
YXRpb246NAotKgotKiAgIGNyZWF0ZWQgb246IDE5OTlzZXAxMwotKiAgIGNyZWF0ZWQgYnk6IE1h
cmt1cyBXLiBTY2hlcmVyCi0qLwotCi0vKioKLSAqIFxmaWxlCi0gKiBcYnJpZWYgQyBBUEk6IDgt
Yml0IFVuaWNvZGUgaGFuZGxpbmcgbWFjcm9zCi0gKiAKLSAqIFRoaXMgZmlsZSBkZWZpbmVzIG1h
Y3JvcyB0byBkZWFsIHdpdGggOC1iaXQgVW5pY29kZSAoVVRGLTgpIGNvZGUgdW5pdHMgKGJ5dGVz
KSBhbmQgc3RyaW5ncy4KLSAqCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdXRmLmggYW5k
IHRoZSBJQ1UgVXNlciBHdWlkZSBTdHJpbmdzIGNoYXB0ZXIKLSAqIChodHRwOi8vdXNlcmd1aWRl
LmljdS1wcm9qZWN0Lm9yZy9zdHJpbmdzKS4KLSAqCi0gKiA8ZW0+VXNhZ2U6PC9lbT4KLSAqIElD
VSBjb2RpbmcgZ3VpZGVsaW5lcyBmb3IgaWYoKSBzdGF0ZW1lbnRzIHNob3VsZCBiZSBmb2xsb3dl
ZCB3aGVuIHVzaW5nIHRoZXNlIG1hY3Jvcy4KLSAqIENvbXBvdW5kIHN0YXRlbWVudHMgKGN1cmx5
IGJyYWNlcyB7fSkgbXVzdCBiZSB1c2VkICBmb3IgaWYtZWxzZS13aGlsZS4uLiAKLSAqIGJvZGll
cyBhbmQgYWxsIG1hY3JvIHN0YXRlbWVudHMgc2hvdWxkIGJlIHRlcm1pbmF0ZWQgd2l0aCBzZW1p
Y29sb24uCi0gKi8KLQotI2lmbmRlZiBfX1VURjhfSF9fCi0jZGVmaW5lIF9fVVRGOF9IX18KLQot
I2luY2x1ZGUgInVuaWNvZGUvdW1hY2hpbmUuaCIKLSNpZm5kZWYgX19VVEZfSF9fCi0jICAgaW5j
bHVkZSAidW5pY29kZS91dGYuaCIKLSNlbmRpZgotCi0vKiBpbnRlcm5hbCBkZWZpbml0aW9ucyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwot
Ci0vKioKLSAqIFx2YXIgdXRmOF9jb3VudFRyYWlsQnl0ZXMKLSAqIEludGVybmFsIGFycmF5IHdp
dGggbnVtYmVycyBvZiB0cmFpbCBieXRlcyBmb3IgYW55IGdpdmVuIGJ5dGUgdXNlZCBpbgotICog
bGVhZCBieXRlIHBvc2l0aW9uLgotICoKLSAqIFRoaXMgaXMgaW50ZXJuYWwgc2luY2UgaXQgaXMg
bm90IG1lYW50IHRvIGJlIGNhbGxlZCBkaXJlY3RseSBieSBleHRlcm5hbCBjbGllbnRzOwotICog
aG93ZXZlciBpdCBpcyBjYWxsZWQgYnkgcHVibGljIG1hY3JvcyBpbiB0aGlzIGZpbGUgYW5kIHRo
dXMgbXVzdCByZW1haW4gc3RhYmxlLAotICogYW5kIHNob3VsZCBub3QgYmUgaGlkZGVuIHdoZW4g
b3RoZXIgaW50ZXJuYWwgZnVuY3Rpb25zIGFyZSBoaWRkZW4gKG90aGVyd2lzZQotICogcHVibGlj
IG1hY3JvcyB3b3VsZCBmYWlsIHRvIGNvbXBpbGUpLgotICogQGludGVybmFsCi0gKi8KLSNpZmRl
ZiBVX1VURjhfSU1QTAotVV9FWFBPUlQgY29uc3QgdWludDhfdCAKLSNlbGlmIGRlZmluZWQoVV9T
VEFUSUNfSU1QTEVNRU5UQVRJT04pIHx8IGRlZmluZWQoVV9DT01NT05fSU1QTEVNRU5UQVRJT04p
Ci1VX0NGVU5DIGNvbnN0IHVpbnQ4X3QKLSNlbHNlCi1VX0NGVU5DIFVfSU1QT1JUIGNvbnN0IHVp
bnQ4X3QgLyogVV9JTVBPUlQyPyAqLyAvKlVfSU1QT1JUKi8gCi0jZW5kaWYKLXV0ZjhfY291bnRU
cmFpbEJ5dGVzWzI1Nl07Ci0KLS8qKgotICogQ291bnRzIHRoZSB0cmFpbCBieXRlcyBmb3IgYSBV
VEYtOCBsZWFkIGJ5dGUuCi0gKiBSZXR1cm5zIDAgZm9yIDAuLjB4YmYgYXMgd2VsbCBhcyBmb3Ig
MHhmZSBhbmQgMHhmZi4KLSAqCi0gKiBUaGlzIGlzIGludGVybmFsIHNpbmNlIGl0IGlzIG5vdCBt
ZWFudCB0byBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgZXh0ZXJuYWwgY2xpZW50czsKLSAqIGhvd2V2
ZXIgaXQgaXMgY2FsbGVkIGJ5IHB1YmxpYyBtYWNyb3MgaW4gdGhpcyBmaWxlIGFuZCB0aHVzIG11
c3QgcmVtYWluIHN0YWJsZS4KLSAqCi0gKiBOb3RlOiBCZWdpbm5pbmcgd2l0aCBJQ1UgNTAsIHRo
ZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgbXVsdGktY29uZGl0aW9uIGV4cHJlc3Npb24KLSAqIHdo
aWNoIHdhcyBzaG93biBpbiAyMDEyIChvbiB4ODYtNjQpIHRvIGNvbXBpbGUgdG8gZmFzdCwgYnJh
bmNoLWZyZWUgY29kZS4KLSAqIGxlYWRCeXRlIGlzIGV2YWx1YXRlZCBtdWx0aXBsZSB0aW1lcy4K
LSAqCi0gKiBUaGUgcHJlLUlDVSA1MCBpbXBsZW1lbnRhdGlvbiB1c2VkIHRoZSBleHBvcnRlZCBh
cnJheSB1dGY4X2NvdW50VHJhaWxCeXRlczoKLSAqICNkZWZpbmUgVThfQ09VTlRfVFJBSUxfQllU
RVMobGVhZEJ5dGUpICh1dGY4X2NvdW50VHJhaWxCeXRlc1tsZWFkQnl0ZV0pCi0gKiBsZWFkQnl0
ZSB3YXMgZXZhbHVhdGVkIGV4YWN0bHkgb25jZS4KLSAqCi0gKiBAcGFyYW0gbGVhZEJ5dGUgVGhl
IGZpcnN0IGJ5dGUgb2YgYSBVVEYtOCBzZXF1ZW5jZS4gTXVzdCBiZSAwLi4weGZmLgotICogQGlu
dGVybmFsCi0gKi8KLSNkZWZpbmUgVThfQ09VTlRfVFJBSUxfQllURVMobGVhZEJ5dGUpIFwKLSAg
ICAoKHVpbnQ4X3QpKGxlYWRCeXRlKTwweGYwID8gXAotICAgICAgICAoKHVpbnQ4X3QpKGxlYWRC
eXRlKT49MHhjMCkrKCh1aW50OF90KShsZWFkQnl0ZSk+PTB4ZTApIDogXAotICAgICAgICAodWlu
dDhfdCkobGVhZEJ5dGUpPDB4ZmUgPyAzKygodWludDhfdCkobGVhZEJ5dGUpPj0weGY4KSsoKHVp
bnQ4X3QpKGxlYWRCeXRlKT49MHhmYykgOiAwKQotCi0vKioKLSAqIENvdW50cyB0aGUgdHJhaWwg
Ynl0ZXMgZm9yIGEgVVRGLTggbGVhZCBieXRlIG9mIGEgdmFsaWQgVVRGLTggc2VxdWVuY2UuCi0g
KiBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgbGVhZCBieXRlIGlzIDB4ZjQgY29ycmVzcG9uZGluZyB0
byBVKzEwRkZGRi4KLSAqIGxlYWRCeXRlIG1pZ2h0IGJlIGV2YWx1YXRlZCBtdWx0aXBsZSB0aW1l
cy4KLSAqCi0gKiBUaGlzIGlzIGludGVybmFsIHNpbmNlIGl0IGlzIG5vdCBtZWFudCB0byBiZSBj
YWxsZWQgZGlyZWN0bHkgYnkgZXh0ZXJuYWwgY2xpZW50czsKLSAqIGhvd2V2ZXIgaXQgaXMgY2Fs
bGVkIGJ5IHB1YmxpYyBtYWNyb3MgaW4gdGhpcyBmaWxlIGFuZCB0aHVzIG11c3QgcmVtYWluIHN0
YWJsZS4KLSAqCi0gKiBAcGFyYW0gbGVhZEJ5dGUgVGhlIGZpcnN0IGJ5dGUgb2YgYSBVVEYtOCBz
ZXF1ZW5jZS4gTXVzdCBiZSAwLi4weGZmLgotICogQGludGVybmFsCi0gKi8KLSNkZWZpbmUgVThf
Q09VTlRfVFJBSUxfQllURVNfVU5TQUZFKGxlYWRCeXRlKSBcCi0gICAgKCgobGVhZEJ5dGUpPj0w
eGMwKSsoKGxlYWRCeXRlKT49MHhlMCkrKChsZWFkQnl0ZSk+PTB4ZjApKQotCi0vKioKLSAqIE1h
c2sgYSBVVEYtOCBsZWFkIGJ5dGUsIGxlYXZlIG9ubHkgdGhlIGxvd2VyIGJpdHMgdGhhdCBmb3Jt
IHBhcnQgb2YgdGhlIGNvZGUgcG9pbnQgdmFsdWUuCi0gKgotICogVGhpcyBpcyBpbnRlcm5hbCBz
aW5jZSBpdCBpcyBub3QgbWVhbnQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IGV4dGVybmFsIGNs
aWVudHM7Ci0gKiBob3dldmVyIGl0IGlzIGNhbGxlZCBieSBwdWJsaWMgbWFjcm9zIGluIHRoaXMg
ZmlsZSBhbmQgdGh1cyBtdXN0IHJlbWFpbiBzdGFibGUuCi0gKiBAaW50ZXJuYWwKLSAqLwotI2Rl
ZmluZSBVOF9NQVNLX0xFQURfQllURShsZWFkQnl0ZSwgY291bnRUcmFpbEJ5dGVzKSAoKGxlYWRC
eXRlKSY9KDE8PCg2LShjb3VudFRyYWlsQnl0ZXMpKSktMSkKLQotLyoqCi0gKiBGdW5jdGlvbiBm
b3IgaGFuZGxpbmcgIm5leHQgY29kZSBwb2ludCIgd2l0aCBlcnJvci1jaGVja2luZy4KLSAqCi0g
KiBUaGlzIGlzIGludGVybmFsIHNpbmNlIGl0IGlzIG5vdCBtZWFudCB0byBiZSBjYWxsZWQgZGly
ZWN0bHkgYnkgZXh0ZXJuYWwgY2xpZW50czsKLSAqIGhvd2V2ZXIgaXQgaXMgVV9TVEFCTEUgKG5v
dCBVX0lOVEVSTkFMKSBzaW5jZSBpdCBpcyBjYWxsZWQgYnkgcHVibGljIG1hY3JvcyBpbiB0aGlz
Ci0gKiBmaWxlIGFuZCB0aHVzIG11c3QgcmVtYWluIHN0YWJsZSwgYW5kIHNob3VsZCBub3QgYmUg
aGlkZGVuIHdoZW4gb3RoZXIgaW50ZXJuYWwKLSAqIGZ1bmN0aW9ucyBhcmUgaGlkZGVuIChvdGhl
cndpc2UgcHVibGljIG1hY3JvcyB3b3VsZCBmYWlsIHRvIGNvbXBpbGUpLgotICogQGludGVybmFs
Ci0gKi8KLVVfU1RBQkxFIFVDaGFyMzIgVV9FWFBPUlQyCi11dGY4X25leHRDaGFyU2FmZUJvZHko
Y29uc3QgdWludDhfdCAqcywgaW50MzJfdCAqcGksIGludDMyX3QgbGVuZ3RoLCBVQ2hhcjMyIGMs
IFVCb29sIHN0cmljdCk7Ci0KLS8qKgotICogRnVuY3Rpb24gZm9yIGhhbmRsaW5nICJhcHBlbmQg
Y29kZSBwb2ludCIgd2l0aCBlcnJvci1jaGVja2luZy4KLSAqCi0gKiBUaGlzIGlzIGludGVybmFs
IHNpbmNlIGl0IGlzIG5vdCBtZWFudCB0byBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgZXh0ZXJuYWwg
Y2xpZW50czsKLSAqIGhvd2V2ZXIgaXQgaXMgVV9TVEFCTEUgKG5vdCBVX0lOVEVSTkFMKSBzaW5j
ZSBpdCBpcyBjYWxsZWQgYnkgcHVibGljIG1hY3JvcyBpbiB0aGlzCi0gKiBmaWxlIGFuZCB0aHVz
IG11c3QgcmVtYWluIHN0YWJsZSwgYW5kIHNob3VsZCBub3QgYmUgaGlkZGVuIHdoZW4gb3RoZXIg
aW50ZXJuYWwKLSAqIGZ1bmN0aW9ucyBhcmUgaGlkZGVuIChvdGhlcndpc2UgcHVibGljIG1hY3Jv
cyB3b3VsZCBmYWlsIHRvIGNvbXBpbGUpLgotICogQGludGVybmFsCi0gKi8KLVVfU1RBQkxFIGlu
dDMyX3QgVV9FWFBPUlQyCi11dGY4X2FwcGVuZENoYXJTYWZlQm9keSh1aW50OF90ICpzLCBpbnQz
Ml90IGksIGludDMyX3QgbGVuZ3RoLCBVQ2hhcjMyIGMsIFVCb29sICpwSXNFcnJvcik7Ci0KLS8q
KgotICogRnVuY3Rpb24gZm9yIGhhbmRsaW5nICJwcmV2aW91cyBjb2RlIHBvaW50IiB3aXRoIGVy
cm9yLWNoZWNraW5nLgotICoKLSAqIFRoaXMgaXMgaW50ZXJuYWwgc2luY2UgaXQgaXMgbm90IG1l
YW50IHRvIGJlIGNhbGxlZCBkaXJlY3RseSBieSBleHRlcm5hbCBjbGllbnRzOwotICogaG93ZXZl
ciBpdCBpcyBVX1NUQUJMRSAobm90IFVfSU5URVJOQUwpIHNpbmNlIGl0IGlzIGNhbGxlZCBieSBw
dWJsaWMgbWFjcm9zIGluIHRoaXMKLSAqIGZpbGUgYW5kIHRodXMgbXVzdCByZW1haW4gc3RhYmxl
LCBhbmQgc2hvdWxkIG5vdCBiZSBoaWRkZW4gd2hlbiBvdGhlciBpbnRlcm5hbAotICogZnVuY3Rp
b25zIGFyZSBoaWRkZW4gKG90aGVyd2lzZSBwdWJsaWMgbWFjcm9zIHdvdWxkIGZhaWwgdG8gY29t
cGlsZSkuCi0gKiBAaW50ZXJuYWwKLSAqLwotVV9TVEFCTEUgVUNoYXIzMiBVX0VYUE9SVDIKLXV0
ZjhfcHJldkNoYXJTYWZlQm9keShjb25zdCB1aW50OF90ICpzLCBpbnQzMl90IHN0YXJ0LCBpbnQz
Ml90ICpwaSwgVUNoYXIzMiBjLCBVQm9vbCBzdHJpY3QpOwotCi0vKioKLSAqIEZ1bmN0aW9uIGZv
ciBoYW5kbGluZyAic2tpcCBiYWNrd2FyZCBvbmUgY29kZSBwb2ludCIgd2l0aCBlcnJvci1jaGVj
a2luZy4KLSAqCi0gKiBUaGlzIGlzIGludGVybmFsIHNpbmNlIGl0IGlzIG5vdCBtZWFudCB0byBi
ZSBjYWxsZWQgZGlyZWN0bHkgYnkgZXh0ZXJuYWwgY2xpZW50czsKLSAqIGhvd2V2ZXIgaXQgaXMg
VV9TVEFCTEUgKG5vdCBVX0lOVEVSTkFMKSBzaW5jZSBpdCBpcyBjYWxsZWQgYnkgcHVibGljIG1h
Y3JvcyBpbiB0aGlzCi0gKiBmaWxlIGFuZCB0aHVzIG11c3QgcmVtYWluIHN0YWJsZSwgYW5kIHNo
b3VsZCBub3QgYmUgaGlkZGVuIHdoZW4gb3RoZXIgaW50ZXJuYWwKLSAqIGZ1bmN0aW9ucyBhcmUg
aGlkZGVuIChvdGhlcndpc2UgcHVibGljIG1hY3JvcyB3b3VsZCBmYWlsIHRvIGNvbXBpbGUpLgot
ICogQGludGVybmFsCi0gKi8KLVVfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCi11dGY4X2JhY2sx
U2FmZUJvZHkoY29uc3QgdWludDhfdCAqcywgaW50MzJfdCBzdGFydCwgaW50MzJfdCBpKTsKLQot
Lyogc2luZ2xlLWNvZGUgcG9pbnQgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoqCi0gKiBEb2VzIHRoaXMgY29kZSB1bml0IChi
eXRlKSBlbmNvZGUgYSBjb2RlIHBvaW50IGJ5IGl0c2VsZiAoVVMtQVNDSUkgMC4uMHg3Zik/Ci0g
KiBAcGFyYW0gYyA4LWJpdCBjb2RlIHVuaXQgKGJ5dGUpCi0gKiBAcmV0dXJuIFRSVUUgb3IgRkFM
U0UKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVmaW5lIFU4X0lTX1NJTkdMRShjKSAoKChj
KSYweDgwKT09MCkKLQotLyoqCi0gKiBJcyB0aGlzIGNvZGUgdW5pdCAoYnl0ZSkgYSBVVEYtOCBs
ZWFkIGJ5dGU/Ci0gKiBAcGFyYW0gYyA4LWJpdCBjb2RlIHVuaXQgKGJ5dGUpCi0gKiBAcmV0dXJu
IFRSVUUgb3IgRkFMU0UKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVmaW5lIFU4X0lTX0xF
QUQoYykgKCh1aW50OF90KSgoYyktMHhjMCk8MHgzZSkKLQotLyoqCi0gKiBJcyB0aGlzIGNvZGUg
dW5pdCAoYnl0ZSkgYSBVVEYtOCB0cmFpbCBieXRlPwotICogQHBhcmFtIGMgOC1iaXQgY29kZSB1
bml0IChieXRlKQotICogQHJldHVybiBUUlVFIG9yIEZBTFNFCi0gKiBAc3RhYmxlIElDVSAyLjQK
LSAqLwotI2RlZmluZSBVOF9JU19UUkFJTChjKSAoKChjKSYweGMwKT09MHg4MCkKLQotLyoqCi0g
KiBIb3cgbWFueSBjb2RlIHVuaXRzIChieXRlcykgYXJlIHVzZWQgZm9yIHRoZSBVVEYtOCBlbmNv
ZGluZwotICogb2YgdGhpcyBVbmljb2RlIGNvZGUgcG9pbnQ/Ci0gKiBAcGFyYW0gYyAzMi1iaXQg
Y29kZSBwb2ludAotICogQHJldHVybiAxLi40LCBvciAwIGlmIGMgaXMgYSBzdXJyb2dhdGUgb3Ig
bm90IGEgVW5pY29kZSBjb2RlIHBvaW50Ci0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmlu
ZSBVOF9MRU5HVEgoYykgXAotICAgICgodWludDMyX3QpKGMpPD0weDdmID8gMSA6IFwKLSAgICAg
ICAgKCh1aW50MzJfdCkoYyk8PTB4N2ZmID8gMiA6IFwKLSAgICAgICAgICAgICgodWludDMyX3Qp
KGMpPD0weGQ3ZmYgPyAzIDogXAotICAgICAgICAgICAgICAgICgodWludDMyX3QpKGMpPD0weGRm
ZmYgfHwgKHVpbnQzMl90KShjKT4weDEwZmZmZiA/IDAgOiBcCi0gICAgICAgICAgICAgICAgICAg
ICgodWludDMyX3QpKGMpPD0weGZmZmYgPyAzIDogNClcCi0gICAgICAgICAgICAgICAgKSBcCi0g
ICAgICAgICAgICApIFwKLSAgICAgICAgKSBcCi0gICAgKQotCi0vKioKLSAqIFRoZSBtYXhpbXVt
IG51bWJlciBvZiBVVEYtOCBjb2RlIHVuaXRzIChieXRlcykgcGVyIFVuaWNvZGUgY29kZSBwb2lu
dCAoVSswMDAwLi5VKzEwZmZmZikuCi0gKiBAcmV0dXJuIDQKLSAqIEBzdGFibGUgSUNVIDIuNAot
ICovCi0jZGVmaW5lIFU4X01BWF9MRU5HVEggNAotCi0vKioKLSAqIEdldCBhIGNvZGUgcG9pbnQg
ZnJvbSBhIHN0cmluZyBhdCBhIHJhbmRvbS1hY2Nlc3Mgb2Zmc2V0LAotICogd2l0aG91dCBjaGFu
Z2luZyB0aGUgb2Zmc2V0LgotICogVGhlIG9mZnNldCBtYXkgcG9pbnQgdG8gZWl0aGVyIHRoZSBs
ZWFkIGJ5dGUgb3Igb25lIG9mIHRoZSB0cmFpbCBieXRlcwotICogZm9yIGEgY29kZSBwb2ludCwg
aW4gd2hpY2ggY2FzZSB0aGUgbWFjcm8gd2lsbCByZWFkIGFsbCBvZiB0aGUgYnl0ZXMKLSAqIGZv
ciB0aGUgY29kZSBwb2ludC4KLSAqIFRoZSByZXN1bHQgaXMgdW5kZWZpbmVkIGlmIHRoZSBvZmZz
ZXQgcG9pbnRzIHRvIGFuIGlsbGVnYWwgVVRGLTgKLSAqIGJ5dGUgc2VxdWVuY2UuCi0gKiBJdGVy
YXRpb24gdGhyb3VnaCBhIHN0cmluZyBpcyBtb3JlIGVmZmljaWVudCB3aXRoIFU4X05FWFRfVU5T
QUZFIG9yIFU4X05FWFQuCi0gKgotICogQHBhcmFtIHMgY29uc3QgdWludDhfdCAqIHN0cmluZwot
ICogQHBhcmFtIGkgc3RyaW5nIG9mZnNldAotICogQHBhcmFtIGMgb3V0cHV0IFVDaGFyMzIgdmFy
aWFibGUKLSAqIEBzZWUgVThfR0VUCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBV
OF9HRVRfVU5TQUZFKHMsIGksIGMpIHsgXAotICAgIGludDMyX3QgX3U4X2dldF91bnNhZmVfaW5k
ZXg9KGludDMyX3QpKGkpOyBcCi0gICAgVThfU0VUX0NQX1NUQVJUX1VOU0FGRShzLCBfdThfZ2V0
X3Vuc2FmZV9pbmRleCk7IFwKLSAgICBVOF9ORVhUX1VOU0FGRShzLCBfdThfZ2V0X3Vuc2FmZV9p
bmRleCwgYyk7IFwKLX0KLQotLyoqCi0gKiBHZXQgYSBjb2RlIHBvaW50IGZyb20gYSBzdHJpbmcg
YXQgYSByYW5kb20tYWNjZXNzIG9mZnNldCwKLSAqIHdpdGhvdXQgY2hhbmdpbmcgdGhlIG9mZnNl
dC4KLSAqIFRoZSBvZmZzZXQgbWF5IHBvaW50IHRvIGVpdGhlciB0aGUgbGVhZCBieXRlIG9yIG9u
ZSBvZiB0aGUgdHJhaWwgYnl0ZXMKLSAqIGZvciBhIGNvZGUgcG9pbnQsIGluIHdoaWNoIGNhc2Ug
dGhlIG1hY3JvIHdpbGwgcmVhZCBhbGwgb2YgdGhlIGJ5dGVzCi0gKiBmb3IgdGhlIGNvZGUgcG9p
bnQuCi0gKgotICogVGhlIGxlbmd0aCBjYW4gYmUgbmVnYXRpdmUgZm9yIGEgTlVMLXRlcm1pbmF0
ZWQgc3RyaW5nLgotICoKLSAqIElmIHRoZSBvZmZzZXQgcG9pbnRzIHRvIGFuIGlsbGVnYWwgVVRG
LTggYnl0ZSBzZXF1ZW5jZSwgdGhlbgotICogYyBpcyBzZXQgdG8gYSBuZWdhdGl2ZSB2YWx1ZS4K
LSAqIEl0ZXJhdGlvbiB0aHJvdWdoIGEgc3RyaW5nIGlzIG1vcmUgZWZmaWNpZW50IHdpdGggVThf
TkVYVF9VTlNBRkUgb3IgVThfTkVYVC4KLSAqCi0gKiBAcGFyYW0gcyBjb25zdCB1aW50OF90ICog
c3RyaW5nCi0gKiBAcGFyYW0gc3RhcnQgaW50MzJfdCBzdGFydGluZyBzdHJpbmcgb2Zmc2V0Ci0g
KiBAcGFyYW0gaSBpbnQzMl90IHN0cmluZyBvZmZzZXQsIG11c3QgYmUgc3RhcnQ8PWk8bGVuZ3Ro
Ci0gKiBAcGFyYW0gbGVuZ3RoIGludDMyX3Qgc3RyaW5nIGxlbmd0aAotICogQHBhcmFtIGMgb3V0
cHV0IFVDaGFyMzIgdmFyaWFibGUsIHNldCB0byA8MCBpbiBjYXNlIG9mIGFuIGVycm9yCi0gKiBA
c2VlIFU4X0dFVF9VTlNBRkUKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVmaW5lIFU4X0dF
VChzLCBzdGFydCwgaSwgbGVuZ3RoLCBjKSB7IFwKLSAgICBpbnQzMl90IF91OF9nZXRfaW5kZXg9
KGkpOyBcCi0gICAgVThfU0VUX0NQX1NUQVJUKHMsIHN0YXJ0LCBfdThfZ2V0X2luZGV4KTsgXAot
ICAgIFU4X05FWFQocywgX3U4X2dldF9pbmRleCwgbGVuZ3RoLCBjKTsgXAotfQotCi0vKioKLSAq
IEdldCBhIGNvZGUgcG9pbnQgZnJvbSBhIHN0cmluZyBhdCBhIHJhbmRvbS1hY2Nlc3Mgb2Zmc2V0
LAotICogd2l0aG91dCBjaGFuZ2luZyB0aGUgb2Zmc2V0LgotICogVGhlIG9mZnNldCBtYXkgcG9p
bnQgdG8gZWl0aGVyIHRoZSBsZWFkIGJ5dGUgb3Igb25lIG9mIHRoZSB0cmFpbCBieXRlcwotICog
Zm9yIGEgY29kZSBwb2ludCwgaW4gd2hpY2ggY2FzZSB0aGUgbWFjcm8gd2lsbCByZWFkIGFsbCBv
ZiB0aGUgYnl0ZXMKLSAqIGZvciB0aGUgY29kZSBwb2ludC4KLSAqCi0gKiBUaGUgbGVuZ3RoIGNh
biBiZSBuZWdhdGl2ZSBmb3IgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcuCi0gKgotICogSWYgdGhl
IG9mZnNldCBwb2ludHMgdG8gYW4gaWxsZWdhbCBVVEYtOCBieXRlIHNlcXVlbmNlLCB0aGVuCi0g
KiBjIGlzIHNldCB0byBVK0ZGRkQuCi0gKiBJdGVyYXRpb24gdGhyb3VnaCBhIHN0cmluZyBpcyBt
b3JlIGVmZmljaWVudCB3aXRoIFU4X05FWFRfVU5TQUZFIG9yIFU4X05FWFRfT1JfRkZGRC4KLSAq
Ci0gKiBUaGlzIG1hY3JvIGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gYSByZWFsIFUrRkZG
RCBpbiB0aGUgdGV4dAotICogYW5kIFUrRkZGRCByZXR1cm5lZCBmb3IgYW4gaWxsLWZvcm1lZCBz
ZXF1ZW5jZS4KLSAqIFVzZSBVOF9HRVQoKSBpZiB0aGF0IGRpc3RpbmN0aW9uIGlzIGltcG9ydGFu
dC4KLSAqCi0gKiBAcGFyYW0gcyBjb25zdCB1aW50OF90ICogc3RyaW5nCi0gKiBAcGFyYW0gc3Rh
cnQgaW50MzJfdCBzdGFydGluZyBzdHJpbmcgb2Zmc2V0Ci0gKiBAcGFyYW0gaSBpbnQzMl90IHN0
cmluZyBvZmZzZXQsIG11c3QgYmUgc3RhcnQ8PWk8bGVuZ3RoCi0gKiBAcGFyYW0gbGVuZ3RoIGlu
dDMyX3Qgc3RyaW5nIGxlbmd0aAotICogQHBhcmFtIGMgb3V0cHV0IFVDaGFyMzIgdmFyaWFibGUs
IHNldCB0byBVK0ZGRkQgaW4gY2FzZSBvZiBhbiBlcnJvcgotICogQHNlZSBVOF9HRVQKLSAqIEBz
dGFibGUgSUNVIDUxCi0gKi8KLSNkZWZpbmUgVThfR0VUX09SX0ZGRkQocywgc3RhcnQsIGksIGxl
bmd0aCwgYykgeyBcCi0gICAgaW50MzJfdCBfdThfZ2V0X2luZGV4PShpKTsgXAotICAgIFU4X1NF
VF9DUF9TVEFSVChzLCBzdGFydCwgX3U4X2dldF9pbmRleCk7IFwKLSAgICBVOF9ORVhUX09SX0ZG
RkQocywgX3U4X2dldF9pbmRleCwgbGVuZ3RoLCBjKTsgXAotfQotCi0vKiBkZWZpbml0aW9ucyB3
aXRoIGZvcndhcmQgaXRlcmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLwotCi0vKioKLSAqIEdldCBhIGNvZGUgcG9pbnQgZnJvbSBhIHN0cmluZyBhdCBhIGNv
ZGUgcG9pbnQgYm91bmRhcnkgb2Zmc2V0LAotICogYW5kIGFkdmFuY2UgdGhlIG9mZnNldCB0byB0
aGUgbmV4dCBjb2RlIHBvaW50IGJvdW5kYXJ5LgotICogKFBvc3QtaW5jcmVtZW50aW5nIGZvcndh
cmQgaXRlcmF0aW9uLikKLSAqICJVbnNhZmUiIG1hY3JvLCBhc3N1bWVzIHdlbGwtZm9ybWVkIFVU
Ri04LgotICoKLSAqIFRoZSBvZmZzZXQgbWF5IHBvaW50IHRvIHRoZSBsZWFkIGJ5dGUgb2YgYSBt
dWx0aS1ieXRlIHNlcXVlbmNlLAotICogaW4gd2hpY2ggY2FzZSB0aGUgbWFjcm8gd2lsbCByZWFk
IHRoZSB3aG9sZSBzZXF1ZW5jZS4KLSAqIFRoZSByZXN1bHQgaXMgdW5kZWZpbmVkIGlmIHRoZSBv
ZmZzZXQgcG9pbnRzIHRvIGEgdHJhaWwgYnl0ZQotICogb3IgYW4gaWxsZWdhbCBVVEYtOCBzZXF1
ZW5jZS4KLSAqCi0gKiBAcGFyYW0gcyBjb25zdCB1aW50OF90ICogc3RyaW5nCi0gKiBAcGFyYW0g
aSBzdHJpbmcgb2Zmc2V0Ci0gKiBAcGFyYW0gYyBvdXRwdXQgVUNoYXIzMiB2YXJpYWJsZQotICog
QHNlZSBVOF9ORVhUCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBVOF9ORVhUX1VO
U0FGRShzLCBpLCBjKSB7IFwKLSAgICAoYyk9KHVpbnQ4X3QpKHMpWyhpKSsrXTsgXAotICAgIGlm
KChjKT49MHg4MCkgeyBcCi0gICAgICAgIGlmKChjKTwweGUwKSB7IFwKLSAgICAgICAgICAgIChj
KT0oKChjKSYweDFmKTw8Nil8KChzKVsoaSkrK10mMHgzZik7IFwKLSAgICAgICAgfSBlbHNlIGlm
KChjKTwweGYwKSB7IFwKLSAgICAgICAgICAgIC8qIG5vIG5lZWQgZm9yIChjJjB4ZikgYmVjYXVz
ZSB0aGUgdXBwZXIgYml0cyBhcmUgdHJ1bmNhdGVkIGFmdGVyIDw8MTIgaW4gdGhlIGNhc3QgdG8g
KFVDaGFyKSAqLyBcCi0gICAgICAgICAgICAoYyk9KFVDaGFyKSgoKGMpPDwxMil8KCgocylbaV0m
MHgzZik8PDYpfCgocylbKGkpKzFdJjB4M2YpKTsgXAotICAgICAgICAgICAgKGkpKz0yOyBcCi0g
ICAgICAgIH0gZWxzZSB7IFwKLSAgICAgICAgICAgIChjKT0oKChjKSY3KTw8MTgpfCgoKHMpW2ld
JjB4M2YpPDwxMil8KCgocylbKGkpKzFdJjB4M2YpPDw2KXwoKHMpWyhpKSsyXSYweDNmKTsgXAot
ICAgICAgICAgICAgKGkpKz0zOyBcCi0gICAgICAgIH0gXAotICAgIH0gXAotfQotCi0vKioKLSAq
IEdldCBhIGNvZGUgcG9pbnQgZnJvbSBhIHN0cmluZyBhdCBhIGNvZGUgcG9pbnQgYm91bmRhcnkg
b2Zmc2V0LAotICogYW5kIGFkdmFuY2UgdGhlIG9mZnNldCB0byB0aGUgbmV4dCBjb2RlIHBvaW50
IGJvdW5kYXJ5LgotICogKFBvc3QtaW5jcmVtZW50aW5nIGZvcndhcmQgaXRlcmF0aW9uLikKLSAq
ICJTYWZlIiBtYWNybywgY2hlY2tzIGZvciBpbGxlZ2FsIHNlcXVlbmNlcyBhbmQgZm9yIHN0cmlu
ZyBib3VuZGFyaWVzLgotICoKLSAqIFRoZSBsZW5ndGggY2FuIGJlIG5lZ2F0aXZlIGZvciBhIE5V
TC10ZXJtaW5hdGVkIHN0cmluZy4KLSAqCi0gKiBUaGUgb2Zmc2V0IG1heSBwb2ludCB0byB0aGUg
bGVhZCBieXRlIG9mIGEgbXVsdGktYnl0ZSBzZXF1ZW5jZSwKLSAqIGluIHdoaWNoIGNhc2UgdGhl
IG1hY3JvIHdpbGwgcmVhZCB0aGUgd2hvbGUgc2VxdWVuY2UuCi0gKiBJZiB0aGUgb2Zmc2V0IHBv
aW50cyB0byBhIHRyYWlsIGJ5dGUgb3IgYW4gaWxsZWdhbCBVVEYtOCBzZXF1ZW5jZSwgdGhlbgot
ICogYyBpcyBzZXQgdG8gYSBuZWdhdGl2ZSB2YWx1ZS4KLSAqCi0gKiBAcGFyYW0gcyBjb25zdCB1
aW50OF90ICogc3RyaW5nCi0gKiBAcGFyYW0gaSBpbnQzMl90IHN0cmluZyBvZmZzZXQsIG11c3Qg
YmUgaTxsZW5ndGgKLSAqIEBwYXJhbSBsZW5ndGggaW50MzJfdCBzdHJpbmcgbGVuZ3RoCi0gKiBA
cGFyYW0gYyBvdXRwdXQgVUNoYXIzMiB2YXJpYWJsZSwgc2V0IHRvIDwwIGluIGNhc2Ugb2YgYW4g
ZXJyb3IKLSAqIEBzZWUgVThfTkVYVF9VTlNBRkUKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0j
ZGVmaW5lIFU4X05FWFQocywgaSwgbGVuZ3RoLCBjKSB7IFwKLSAgICAoYyk9KHVpbnQ4X3QpKHMp
WyhpKSsrXTsgXAotICAgIGlmKChjKT49MHg4MCkgeyBcCi0gICAgICAgIHVpbnQ4X3QgX190MSwg
X190MjsgXAotICAgICAgICBpZiggLyogaGFuZGxlIFUrMTAwMC4uVStDRkZGIGlubGluZSAqLyBc
Ci0gICAgICAgICAgICAoMHhlMDwoYykgJiYgKGMpPD0weGVjKSAmJiBcCi0gICAgICAgICAgICAo
KChpKSsxKTwobGVuZ3RoKSB8fCAobGVuZ3RoKTwwKSAmJiBcCi0gICAgICAgICAgICAoX190MT0o
dWludDhfdCkoKHMpW2ldLTB4ODApKTw9MHgzZiAmJiBcCi0gICAgICAgICAgICAoX190Mj0odWlu
dDhfdCkoKHMpWyhpKSsxXS0weDgwKSk8PSAweDNmIFwKLSAgICAgICAgKSB7IFwKLSAgICAgICAg
ICAgIC8qIG5vIG5lZWQgZm9yIChjJjB4ZikgYmVjYXVzZSB0aGUgdXBwZXIgYml0cyBhcmUgdHJ1
bmNhdGVkIGFmdGVyIDw8MTIgaW4gdGhlIGNhc3QgdG8gKFVDaGFyKSAqLyBcCi0gICAgICAgICAg
ICAoYyk9KFVDaGFyKSgoKGMpPDwxMil8KF9fdDE8PDYpfF9fdDIpOyBcCi0gICAgICAgICAgICAo
aSkrPTI7IFwKLSAgICAgICAgfSBlbHNlIGlmKCAvKiBoYW5kbGUgVSswMDgwLi5VKzA3RkYgaW5s
aW5lICovIFwKLSAgICAgICAgICAgICgoYyk8MHhlMCAmJiAoYyk+PTB4YzIpICYmIFwKLSAgICAg
ICAgICAgICgoaSkhPShsZW5ndGgpKSAmJiBcCi0gICAgICAgICAgICAoX190MT0odWludDhfdCko
KHMpW2ldLTB4ODApKTw9MHgzZiBcCi0gICAgICAgICkgeyBcCi0gICAgICAgICAgICAoYyk9KCgo
YykmMHgxZik8PDYpfF9fdDE7IFwKLSAgICAgICAgICAgICsrKGkpOyBcCi0gICAgICAgIH0gZWxz
ZSB7IFwKLSAgICAgICAgICAgIC8qIGZ1bmN0aW9uIGNhbGwgZm9yICJjb21wbGljYXRlZCIgYW5k
IGVycm9yIGNhc2VzICovIFwKLSAgICAgICAgICAgIChjKT11dGY4X25leHRDaGFyU2FmZUJvZHko
KGNvbnN0IHVpbnQ4X3QgKilzLCAmKGkpLCAobGVuZ3RoKSwgYywgLTEpOyBcCi0gICAgICAgIH0g
XAotICAgIH0gXAotfQotCi0vKioKLSAqIEdldCBhIGNvZGUgcG9pbnQgZnJvbSBhIHN0cmluZyBh
dCBhIGNvZGUgcG9pbnQgYm91bmRhcnkgb2Zmc2V0LAotICogYW5kIGFkdmFuY2UgdGhlIG9mZnNl
dCB0byB0aGUgbmV4dCBjb2RlIHBvaW50IGJvdW5kYXJ5LgotICogKFBvc3QtaW5jcmVtZW50aW5n
IGZvcndhcmQgaXRlcmF0aW9uLikKLSAqICJTYWZlIiBtYWNybywgY2hlY2tzIGZvciBpbGxlZ2Fs
IHNlcXVlbmNlcyBhbmQgZm9yIHN0cmluZyBib3VuZGFyaWVzLgotICoKLSAqIFRoZSBsZW5ndGgg
Y2FuIGJlIG5lZ2F0aXZlIGZvciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4KLSAqCi0gKiBUaGUg
b2Zmc2V0IG1heSBwb2ludCB0byB0aGUgbGVhZCBieXRlIG9mIGEgbXVsdGktYnl0ZSBzZXF1ZW5j
ZSwKLSAqIGluIHdoaWNoIGNhc2UgdGhlIG1hY3JvIHdpbGwgcmVhZCB0aGUgd2hvbGUgc2VxdWVu
Y2UuCi0gKiBJZiB0aGUgb2Zmc2V0IHBvaW50cyB0byBhIHRyYWlsIGJ5dGUgb3IgYW4gaWxsZWdh
bCBVVEYtOCBzZXF1ZW5jZSwgdGhlbgotICogYyBpcyBzZXQgdG8gVStGRkZELgotICoKLSAqIFRo
aXMgbWFjcm8gZG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIHJlYWwgVStGRkZEIGluIHRo
ZSB0ZXh0Ci0gKiBhbmQgVStGRkZEIHJldHVybmVkIGZvciBhbiBpbGwtZm9ybWVkIHNlcXVlbmNl
LgotICogVXNlIFU4X05FWFQoKSBpZiB0aGF0IGRpc3RpbmN0aW9uIGlzIGltcG9ydGFudC4KLSAq
Ci0gKiBAcGFyYW0gcyBjb25zdCB1aW50OF90ICogc3RyaW5nCi0gKiBAcGFyYW0gaSBpbnQzMl90
IHN0cmluZyBvZmZzZXQsIG11c3QgYmUgaTxsZW5ndGgKLSAqIEBwYXJhbSBsZW5ndGggaW50MzJf
dCBzdHJpbmcgbGVuZ3RoCi0gKiBAcGFyYW0gYyBvdXRwdXQgVUNoYXIzMiB2YXJpYWJsZSwgc2V0
IHRvIFUrRkZGRCBpbiBjYXNlIG9mIGFuIGVycm9yCi0gKiBAc2VlIFU4X05FWFQKLSAqIEBzdGFi
bGUgSUNVIDUxCi0gKi8KLSNkZWZpbmUgVThfTkVYVF9PUl9GRkZEKHMsIGksIGxlbmd0aCwgYykg
eyBcCi0gICAgKGMpPSh1aW50OF90KShzKVsoaSkrK107IFwKLSAgICBpZigoYyk+PTB4ODApIHsg
XAotICAgICAgICB1aW50OF90IF9fdDEsIF9fdDI7IFwKLSAgICAgICAgaWYoIC8qIGhhbmRsZSBV
KzEwMDAuLlUrQ0ZGRiBpbmxpbmUgKi8gXAotICAgICAgICAgICAgKDB4ZTA8KGMpICYmIChjKTw9
MHhlYykgJiYgXAotICAgICAgICAgICAgKCgoaSkrMSk8KGxlbmd0aCkgfHwgKGxlbmd0aCk8MCkg
JiYgXAotICAgICAgICAgICAgKF9fdDE9KHVpbnQ4X3QpKChzKVtpXS0weDgwKSk8PTB4M2YgJiYg
XAotICAgICAgICAgICAgKF9fdDI9KHVpbnQ4X3QpKChzKVsoaSkrMV0tMHg4MCkpPD0gMHgzZiBc
Ci0gICAgICAgICkgeyBcCi0gICAgICAgICAgICAvKiBubyBuZWVkIGZvciAoYyYweGYpIGJlY2F1
c2UgdGhlIHVwcGVyIGJpdHMgYXJlIHRydW5jYXRlZCBhZnRlciA8PDEyIGluIHRoZSBjYXN0IHRv
IChVQ2hhcikgKi8gXAotICAgICAgICAgICAgKGMpPShVQ2hhcikoKChjKTw8MTIpfChfX3QxPDw2
KXxfX3QyKTsgXAotICAgICAgICAgICAgKGkpKz0yOyBcCi0gICAgICAgIH0gZWxzZSBpZiggLyog
aGFuZGxlIFUrMDA4MC4uVSswN0ZGIGlubGluZSAqLyBcCi0gICAgICAgICAgICAoKGMpPDB4ZTAg
JiYgKGMpPj0weGMyKSAmJiBcCi0gICAgICAgICAgICAoKGkpIT0obGVuZ3RoKSkgJiYgXAotICAg
ICAgICAgICAgKF9fdDE9KHVpbnQ4X3QpKChzKVtpXS0weDgwKSk8PTB4M2YgXAotICAgICAgICAp
IHsgXAotICAgICAgICAgICAgKGMpPSgoKGMpJjB4MWYpPDw2KXxfX3QxOyBcCi0gICAgICAgICAg
ICArKyhpKTsgXAotICAgICAgICB9IGVsc2UgeyBcCi0gICAgICAgICAgICAvKiBmdW5jdGlvbiBj
YWxsIGZvciAiY29tcGxpY2F0ZWQiIGFuZCBlcnJvciBjYXNlcyAqLyBcCi0gICAgICAgICAgICAo
Yyk9dXRmOF9uZXh0Q2hhclNhZmVCb2R5KChjb25zdCB1aW50OF90ICopcywgJihpKSwgKGxlbmd0
aCksIGMsIC0zKTsgXAotICAgICAgICB9IFwKLSAgICB9IFwKLX0KLQotLyoqCi0gKiBBcHBlbmQg
YSBjb2RlIHBvaW50IHRvIGEgc3RyaW5nLCBvdmVyd3JpdGluZyAxIHRvIDQgYnl0ZXMuCi0gKiBU
aGUgb2Zmc2V0IHBvaW50cyB0byB0aGUgY3VycmVudCBlbmQgb2YgdGhlIHN0cmluZyBjb250ZW50
cwotICogYW5kIGlzIGFkdmFuY2VkIChwb3N0LWluY3JlbWVudCkuCi0gKiAiVW5zYWZlIiBtYWNy
bywgYXNzdW1lcyBhIHZhbGlkIGNvZGUgcG9pbnQgYW5kIHN1ZmZpY2llbnQgc3BhY2UgaW4gdGhl
IHN0cmluZy4KLSAqIE90aGVyd2lzZSwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuCi0gKgotICog
QHBhcmFtIHMgY29uc3QgdWludDhfdCAqIHN0cmluZyBidWZmZXIKLSAqIEBwYXJhbSBpIHN0cmlu
ZyBvZmZzZXQKLSAqIEBwYXJhbSBjIGNvZGUgcG9pbnQgdG8gYXBwZW5kCi0gKiBAc2VlIFU4X0FQ
UEVORAotICogQHN0YWJsZSBJQ1UgMi40Ci0gKi8KLSNkZWZpbmUgVThfQVBQRU5EX1VOU0FGRShz
LCBpLCBjKSB7IFwKLSAgICBpZigodWludDMyX3QpKGMpPD0weDdmKSB7IFwKLSAgICAgICAgKHMp
WyhpKSsrXT0odWludDhfdCkoYyk7IFwKLSAgICB9IGVsc2UgeyBcCi0gICAgICAgIGlmKCh1aW50
MzJfdCkoYyk8PTB4N2ZmKSB7IFwKLSAgICAgICAgICAgIChzKVsoaSkrK109KHVpbnQ4X3QpKCgo
Yyk+PjYpfDB4YzApOyBcCi0gICAgICAgIH0gZWxzZSB7IFwKLSAgICAgICAgICAgIGlmKCh1aW50
MzJfdCkoYyk8PTB4ZmZmZikgeyBcCi0gICAgICAgICAgICAgICAgKHMpWyhpKSsrXT0odWludDhf
dCkoKChjKT4+MTIpfDB4ZTApOyBcCi0gICAgICAgICAgICB9IGVsc2UgeyBcCi0gICAgICAgICAg
ICAgICAgKHMpWyhpKSsrXT0odWludDhfdCkoKChjKT4+MTgpfDB4ZjApOyBcCi0gICAgICAgICAg
ICAgICAgKHMpWyhpKSsrXT0odWludDhfdCkoKCgoYyk+PjEyKSYweDNmKXwweDgwKTsgXAotICAg
ICAgICAgICAgfSBcCi0gICAgICAgICAgICAocylbKGkpKytdPSh1aW50OF90KSgoKChjKT4+Nikm
MHgzZil8MHg4MCk7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIChzKVsoaSkrK109KHVpbnQ4X3Qp
KCgoYykmMHgzZil8MHg4MCk7IFwKLSAgICB9IFwKLX0KLQotLyoqCi0gKiBBcHBlbmQgYSBjb2Rl
IHBvaW50IHRvIGEgc3RyaW5nLCBvdmVyd3JpdGluZyAxIHRvIDQgYnl0ZXMuCi0gKiBUaGUgb2Zm
c2V0IHBvaW50cyB0byB0aGUgY3VycmVudCBlbmQgb2YgdGhlIHN0cmluZyBjb250ZW50cwotICog
YW5kIGlzIGFkdmFuY2VkIChwb3N0LWluY3JlbWVudCkuCi0gKiAiU2FmZSIgbWFjcm8sIGNoZWNr
cyBmb3IgYSB2YWxpZCBjb2RlIHBvaW50LgotICogSWYgYSBub24tQVNDSUkgY29kZSBwb2ludCBp
cyB3cml0dGVuLCBjaGVja3MgZm9yIHN1ZmZpY2llbnQgc3BhY2UgaW4gdGhlIHN0cmluZy4KLSAq
IElmIHRoZSBjb2RlIHBvaW50IGlzIG5vdCB2YWxpZCBvciB0cmFpbCBieXRlcyBkbyBub3QgZml0
LAotICogdGhlbiBpc0Vycm9yIGlzIHNldCB0byBUUlVFLgotICoKLSAqIEBwYXJhbSBzIGNvbnN0
IHVpbnQ4X3QgKiBzdHJpbmcgYnVmZmVyCi0gKiBAcGFyYW0gaSBpbnQzMl90IHN0cmluZyBvZmZz
ZXQsIG11c3QgYmUgaTxjYXBhY2l0eQotICogQHBhcmFtIGNhcGFjaXR5IGludDMyX3Qgc2l6ZSBv
ZiB0aGUgc3RyaW5nIGJ1ZmZlcgotICogQHBhcmFtIGMgVUNoYXIzMiBjb2RlIHBvaW50IHRvIGFw
cGVuZAotICogQHBhcmFtIGlzRXJyb3Igb3V0cHV0IFVCb29sIHNldCB0byBUUlVFIGlmIGFuIGVy
cm9yIG9jY3Vycywgb3RoZXJ3aXNlIG5vdCBtb2RpZmllZAotICogQHNlZSBVOF9BUFBFTkRfVU5T
QUZFCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBVOF9BUFBFTkQocywgaSwgY2Fw
YWNpdHksIGMsIGlzRXJyb3IpIHsgXAotICAgIGlmKCh1aW50MzJfdCkoYyk8PTB4N2YpIHsgXAot
ICAgICAgICAocylbKGkpKytdPSh1aW50OF90KShjKTsgXAotICAgIH0gZWxzZSBpZigodWludDMy
X3QpKGMpPD0weDdmZiAmJiAoaSkrMTwoY2FwYWNpdHkpKSB7IFwKLSAgICAgICAgKHMpWyhpKSsr
XT0odWludDhfdCkoKChjKT4+Nil8MHhjMCk7IFwKLSAgICAgICAgKHMpWyhpKSsrXT0odWludDhf
dCkoKChjKSYweDNmKXwweDgwKTsgXAotICAgIH0gZWxzZSBpZigodWludDMyX3QpKGMpPD0weGQ3
ZmYgJiYgKGkpKzI8KGNhcGFjaXR5KSkgeyBcCi0gICAgICAgIChzKVsoaSkrK109KHVpbnQ4X3Qp
KCgoYyk+PjEyKXwweGUwKTsgXAotICAgICAgICAocylbKGkpKytdPSh1aW50OF90KSgoKChjKT4+
NikmMHgzZil8MHg4MCk7IFwKLSAgICAgICAgKHMpWyhpKSsrXT0odWludDhfdCkoKChjKSYweDNm
KXwweDgwKTsgXAotICAgIH0gZWxzZSB7IFwKLSAgICAgICAgKGkpPXV0ZjhfYXBwZW5kQ2hhclNh
ZmVCb2R5KHMsIChpKSwgKGNhcGFjaXR5KSwgYywgJihpc0Vycm9yKSk7IFwKLSAgICB9IFwKLX0K
LQotLyoqCi0gKiBBZHZhbmNlIHRoZSBzdHJpbmcgb2Zmc2V0IGZyb20gb25lIGNvZGUgcG9pbnQg
Ym91bmRhcnkgdG8gdGhlIG5leHQuCi0gKiAoUG9zdC1pbmNyZW1lbnRpbmcgaXRlcmF0aW9uLikK
LSAqICJVbnNhZmUiIG1hY3JvLCBhc3N1bWVzIHdlbGwtZm9ybWVkIFVURi04LgotICoKLSAqIEBw
YXJhbSBzIGNvbnN0IHVpbnQ4X3QgKiBzdHJpbmcKLSAqIEBwYXJhbSBpIHN0cmluZyBvZmZzZXQK
LSAqIEBzZWUgVThfRldEXzEKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVmaW5lIFU4X0ZX
RF8xX1VOU0FGRShzLCBpKSB7IFwKLSAgICAoaSkrPTErVThfQ09VTlRfVFJBSUxfQllURVNfVU5T
QUZFKCh1aW50OF90KShzKVtpXSk7IFwKLX0KLQotLyoqCi0gKiBBZHZhbmNlIHRoZSBzdHJpbmcg
b2Zmc2V0IGZyb20gb25lIGNvZGUgcG9pbnQgYm91bmRhcnkgdG8gdGhlIG5leHQuCi0gKiAoUG9z
dC1pbmNyZW1lbnRpbmcgaXRlcmF0aW9uLikKLSAqICJTYWZlIiBtYWNybywgY2hlY2tzIGZvciBp
bGxlZ2FsIHNlcXVlbmNlcyBhbmQgZm9yIHN0cmluZyBib3VuZGFyaWVzLgotICoKLSAqIFRoZSBs
ZW5ndGggY2FuIGJlIG5lZ2F0aXZlIGZvciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4KLSAqCi0g
KiBAcGFyYW0gcyBjb25zdCB1aW50OF90ICogc3RyaW5nCi0gKiBAcGFyYW0gaSBpbnQzMl90IHN0
cmluZyBvZmZzZXQsIG11c3QgYmUgaTxsZW5ndGgKLSAqIEBwYXJhbSBsZW5ndGggaW50MzJfdCBz
dHJpbmcgbGVuZ3RoCi0gKiBAc2VlIFU4X0ZXRF8xX1VOU0FGRQotICogQHN0YWJsZSBJQ1UgMi40
Ci0gKi8KLSNkZWZpbmUgVThfRldEXzEocywgaSwgbGVuZ3RoKSB7IFwKLSAgICB1aW50OF90IF9f
Yj0odWludDhfdCkocylbKGkpKytdOyBcCi0gICAgaWYoVThfSVNfTEVBRChfX2IpKSB7IFwKLSAg
ICAgICAgdWludDhfdCBfX2NvdW50PVU4X0NPVU5UX1RSQUlMX0JZVEVTKF9fYik7IFwKLSAgICAg
ICAgaWYoKGkpK19fY291bnQ+KGxlbmd0aCkgJiYgKGxlbmd0aCk+PTApIHsgXAotICAgICAgICAg
ICAgX19jb3VudD0odWludDhfdCkoKGxlbmd0aCktKGkpKTsgXAotICAgICAgICB9IFwKLSAgICAg
ICAgd2hpbGUoX19jb3VudD4wICYmIFU4X0lTX1RSQUlMKChzKVtpXSkpIHsgXAotICAgICAgICAg
ICAgKysoaSk7IFwKLSAgICAgICAgICAgIC0tX19jb3VudDsgXAotICAgICAgICB9IFwKLSAgICB9
IFwKLX0KLQotLyoqCi0gKiBBZHZhbmNlIHRoZSBzdHJpbmcgb2Zmc2V0IGZyb20gb25lIGNvZGUg
cG9pbnQgYm91bmRhcnkgdG8gdGhlIG4tdGggbmV4dCBvbmUsCi0gKiBpLmUuLCBtb3ZlIGZvcndh
cmQgYnkgbiBjb2RlIHBvaW50cy4KLSAqIChQb3N0LWluY3JlbWVudGluZyBpdGVyYXRpb24uKQot
ICogIlVuc2FmZSIgbWFjcm8sIGFzc3VtZXMgd2VsbC1mb3JtZWQgVVRGLTguCi0gKgotICogQHBh
cmFtIHMgY29uc3QgdWludDhfdCAqIHN0cmluZwotICogQHBhcmFtIGkgc3RyaW5nIG9mZnNldAot
ICogQHBhcmFtIG4gbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRvIHNraXAKLSAqIEBzZWUgVThfRldE
X04KLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVmaW5lIFU4X0ZXRF9OX1VOU0FGRShzLCBp
LCBuKSB7IFwKLSAgICBpbnQzMl90IF9fTj0obik7IFwKLSAgICB3aGlsZShfX04+MCkgeyBcCi0g
ICAgICAgIFU4X0ZXRF8xX1VOU0FGRShzLCBpKTsgXAotICAgICAgICAtLV9fTjsgXAotICAgIH0g
XAotfQotCi0vKioKLSAqIEFkdmFuY2UgdGhlIHN0cmluZyBvZmZzZXQgZnJvbSBvbmUgY29kZSBw
b2ludCBib3VuZGFyeSB0byB0aGUgbi10aCBuZXh0IG9uZSwKLSAqIGkuZS4sIG1vdmUgZm9yd2Fy
ZCBieSBuIGNvZGUgcG9pbnRzLgotICogKFBvc3QtaW5jcmVtZW50aW5nIGl0ZXJhdGlvbi4pCi0g
KiAiU2FmZSIgbWFjcm8sIGNoZWNrcyBmb3IgaWxsZWdhbCBzZXF1ZW5jZXMgYW5kIGZvciBzdHJp
bmcgYm91bmRhcmllcy4KLSAqCi0gKiBUaGUgbGVuZ3RoIGNhbiBiZSBuZWdhdGl2ZSBmb3IgYSBO
VUwtdGVybWluYXRlZCBzdHJpbmcuCi0gKgotICogQHBhcmFtIHMgY29uc3QgdWludDhfdCAqIHN0
cmluZwotICogQHBhcmFtIGkgaW50MzJfdCBzdHJpbmcgb2Zmc2V0LCBtdXN0IGJlIGk8bGVuZ3Ro
Ci0gKiBAcGFyYW0gbGVuZ3RoIGludDMyX3Qgc3RyaW5nIGxlbmd0aAotICogQHBhcmFtIG4gbnVt
YmVyIG9mIGNvZGUgcG9pbnRzIHRvIHNraXAKLSAqIEBzZWUgVThfRldEX05fVU5TQUZFCi0gKiBA
c3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBVOF9GV0RfTihzLCBpLCBsZW5ndGgsIG4pIHsg
XAotICAgIGludDMyX3QgX19OPShuKTsgXAotICAgIHdoaWxlKF9fTj4wICYmICgoaSk8KGxlbmd0
aCkgfHwgKChsZW5ndGgpPDAgJiYgKHMpW2ldIT0wKSkpIHsgXAotICAgICAgICBVOF9GV0RfMShz
LCBpLCBsZW5ndGgpOyBcCi0gICAgICAgIC0tX19OOyBcCi0gICAgfSBcCi19Ci0KLS8qKgotICog
QWRqdXN0IGEgcmFuZG9tLWFjY2VzcyBvZmZzZXQgdG8gYSBjb2RlIHBvaW50IGJvdW5kYXJ5Ci0g
KiBhdCB0aGUgc3RhcnQgb2YgYSBjb2RlIHBvaW50LgotICogSWYgdGhlIG9mZnNldCBwb2ludHMg
dG8gYSBVVEYtOCB0cmFpbCBieXRlLAotICogdGhlbiB0aGUgb2Zmc2V0IGlzIG1vdmVkIGJhY2t3
YXJkIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlYWQgYnl0ZS4KLSAqIE90aGVyd2lzZSwgaXQgaXMg
bm90IG1vZGlmaWVkLgotICogIlVuc2FmZSIgbWFjcm8sIGFzc3VtZXMgd2VsbC1mb3JtZWQgVVRG
LTguCi0gKgotICogQHBhcmFtIHMgY29uc3QgdWludDhfdCAqIHN0cmluZwotICogQHBhcmFtIGkg
c3RyaW5nIG9mZnNldAotICogQHNlZSBVOF9TRVRfQ1BfU1RBUlQKLSAqIEBzdGFibGUgSUNVIDIu
NAotICovCi0jZGVmaW5lIFU4X1NFVF9DUF9TVEFSVF9VTlNBRkUocywgaSkgeyBcCi0gICAgd2hp
bGUoVThfSVNfVFJBSUwoKHMpW2ldKSkgeyAtLShpKTsgfSBcCi19Ci0KLS8qKgotICogQWRqdXN0
IGEgcmFuZG9tLWFjY2VzcyBvZmZzZXQgdG8gYSBjb2RlIHBvaW50IGJvdW5kYXJ5Ci0gKiBhdCB0
aGUgc3RhcnQgb2YgYSBjb2RlIHBvaW50LgotICogSWYgdGhlIG9mZnNldCBwb2ludHMgdG8gYSBV
VEYtOCB0cmFpbCBieXRlLAotICogdGhlbiB0aGUgb2Zmc2V0IGlzIG1vdmVkIGJhY2t3YXJkIHRv
IHRoZSBjb3JyZXNwb25kaW5nIGxlYWQgYnl0ZS4KLSAqIE90aGVyd2lzZSwgaXQgaXMgbm90IG1v
ZGlmaWVkLgotICogIlNhZmUiIG1hY3JvLCBjaGVja3MgZm9yIGlsbGVnYWwgc2VxdWVuY2VzIGFu
ZCBmb3Igc3RyaW5nIGJvdW5kYXJpZXMuCi0gKgotICogQHBhcmFtIHMgY29uc3QgdWludDhfdCAq
IHN0cmluZwotICogQHBhcmFtIHN0YXJ0IGludDMyX3Qgc3RhcnRpbmcgc3RyaW5nIG9mZnNldCAo
dXN1YWxseSAwKQotICogQHBhcmFtIGkgaW50MzJfdCBzdHJpbmcgb2Zmc2V0LCBtdXN0IGJlIHN0
YXJ0PD1pCi0gKiBAc2VlIFU4X1NFVF9DUF9TVEFSVF9VTlNBRkUKLSAqIEBzdGFibGUgSUNVIDIu
NAotICovCi0jZGVmaW5lIFU4X1NFVF9DUF9TVEFSVChzLCBzdGFydCwgaSkgeyBcCi0gICAgaWYo
VThfSVNfVFJBSUwoKHMpWyhpKV0pKSB7IFwKLSAgICAgICAgKGkpPXV0ZjhfYmFjazFTYWZlQm9k
eShzLCBzdGFydCwgKGkpKTsgXAotICAgIH0gXAotfQotCi0vKiBkZWZpbml0aW9ucyB3aXRoIGJh
Y2t3YXJkIGl0ZXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
LwotCi0vKioKLSAqIE1vdmUgdGhlIHN0cmluZyBvZmZzZXQgZnJvbSBvbmUgY29kZSBwb2ludCBi
b3VuZGFyeSB0byB0aGUgcHJldmlvdXMgb25lCi0gKiBhbmQgZ2V0IHRoZSBjb2RlIHBvaW50IGJl
dHdlZW4gdGhlbS4KLSAqIChQcmUtZGVjcmVtZW50aW5nIGJhY2t3YXJkIGl0ZXJhdGlvbi4pCi0g
KiAiVW5zYWZlIiBtYWNybywgYXNzdW1lcyB3ZWxsLWZvcm1lZCBVVEYtOC4KLSAqCi0gKiBUaGUg
aW5wdXQgb2Zmc2V0IG1heSBiZSB0aGUgc2FtZSBhcyB0aGUgc3RyaW5nIGxlbmd0aC4KLSAqIElm
IHRoZSBvZmZzZXQgaXMgYmVoaW5kIGEgbXVsdGktYnl0ZSBzZXF1ZW5jZSwgdGhlbiB0aGUgbWFj
cm8gd2lsbCByZWFkCi0gKiB0aGUgd2hvbGUgc2VxdWVuY2UuCi0gKiBJZiB0aGUgb2Zmc2V0IGlz
IGJlaGluZCBhIGxlYWQgYnl0ZSwgdGhlbiB0aGF0IGl0c2VsZgotICogd2lsbCBiZSByZXR1cm5l
ZCBhcyB0aGUgY29kZSBwb2ludC4KLSAqIFRoZSByZXN1bHQgaXMgdW5kZWZpbmVkIGlmIHRoZSBv
ZmZzZXQgaXMgYmVoaW5kIGFuIGlsbGVnYWwgVVRGLTggc2VxdWVuY2UuCi0gKgotICogQHBhcmFt
IHMgY29uc3QgdWludDhfdCAqIHN0cmluZwotICogQHBhcmFtIGkgc3RyaW5nIG9mZnNldAotICog
QHBhcmFtIGMgb3V0cHV0IFVDaGFyMzIgdmFyaWFibGUKLSAqIEBzZWUgVThfUFJFVgotICogQHN0
YWJsZSBJQ1UgMi40Ci0gKi8KLSNkZWZpbmUgVThfUFJFVl9VTlNBRkUocywgaSwgYykgeyBcCi0g
ICAgKGMpPSh1aW50OF90KShzKVstLShpKV07IFwKLSAgICBpZihVOF9JU19UUkFJTChjKSkgeyBc
Ci0gICAgICAgIHVpbnQ4X3QgX19iLCBfX2NvdW50PTEsIF9fc2hpZnQ9NjsgXAotXAotICAgICAg
ICAvKiBjIGlzIGEgdHJhaWwgYnl0ZSAqLyBcCi0gICAgICAgIChjKSY9MHgzZjsgXAotICAgICAg
ICBmb3IoOzspIHsgXAotICAgICAgICAgICAgX19iPSh1aW50OF90KShzKVstLShpKV07IFwKLSAg
ICAgICAgICAgIGlmKF9fYj49MHhjMCkgeyBcCi0gICAgICAgICAgICAgICAgVThfTUFTS19MRUFE
X0JZVEUoX19iLCBfX2NvdW50KTsgXAotICAgICAgICAgICAgICAgIChjKXw9KFVDaGFyMzIpX19i
PDxfX3NoaWZ0OyBcCi0gICAgICAgICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgICAgIH0gZWxz
ZSB7IFwKLSAgICAgICAgICAgICAgICAoYyl8PShVQ2hhcjMyKShfX2ImMHgzZik8PF9fc2hpZnQ7
IFwKLSAgICAgICAgICAgICAgICArK19fY291bnQ7IFwKLSAgICAgICAgICAgICAgICBfX3NoaWZ0
Kz02OyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgfSBcCi0gICAgfSBcCi19Ci0KLS8qKgot
ICogTW92ZSB0aGUgc3RyaW5nIG9mZnNldCBmcm9tIG9uZSBjb2RlIHBvaW50IGJvdW5kYXJ5IHRv
IHRoZSBwcmV2aW91cyBvbmUKLSAqIGFuZCBnZXQgdGhlIGNvZGUgcG9pbnQgYmV0d2VlbiB0aGVt
LgotICogKFByZS1kZWNyZW1lbnRpbmcgYmFja3dhcmQgaXRlcmF0aW9uLikKLSAqICJTYWZlIiBt
YWNybywgY2hlY2tzIGZvciBpbGxlZ2FsIHNlcXVlbmNlcyBhbmQgZm9yIHN0cmluZyBib3VuZGFy
aWVzLgotICoKLSAqIFRoZSBpbnB1dCBvZmZzZXQgbWF5IGJlIHRoZSBzYW1lIGFzIHRoZSBzdHJp
bmcgbGVuZ3RoLgotICogSWYgdGhlIG9mZnNldCBpcyBiZWhpbmQgYSBtdWx0aS1ieXRlIHNlcXVl
bmNlLCB0aGVuIHRoZSBtYWNybyB3aWxsIHJlYWQKLSAqIHRoZSB3aG9sZSBzZXF1ZW5jZS4KLSAq
IElmIHRoZSBvZmZzZXQgaXMgYmVoaW5kIGEgbGVhZCBieXRlLCB0aGVuIHRoYXQgaXRzZWxmCi0g
KiB3aWxsIGJlIHJldHVybmVkIGFzIHRoZSBjb2RlIHBvaW50LgotICogSWYgdGhlIG9mZnNldCBp
cyBiZWhpbmQgYW4gaWxsZWdhbCBVVEYtOCBzZXF1ZW5jZSwgdGhlbiBjIGlzIHNldCB0byBhIG5l
Z2F0aXZlIHZhbHVlLgotICoKLSAqIEBwYXJhbSBzIGNvbnN0IHVpbnQ4X3QgKiBzdHJpbmcKLSAq
IEBwYXJhbSBzdGFydCBpbnQzMl90IHN0YXJ0aW5nIHN0cmluZyBvZmZzZXQgKHVzdWFsbHkgMCkK
LSAqIEBwYXJhbSBpIGludDMyX3Qgc3RyaW5nIG9mZnNldCwgbXVzdCBiZSBzdGFydDxpCi0gKiBA
cGFyYW0gYyBvdXRwdXQgVUNoYXIzMiB2YXJpYWJsZSwgc2V0IHRvIDwwIGluIGNhc2Ugb2YgYW4g
ZXJyb3IKLSAqIEBzZWUgVThfUFJFVl9VTlNBRkUKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0j
ZGVmaW5lIFU4X1BSRVYocywgc3RhcnQsIGksIGMpIHsgXAotICAgIChjKT0odWludDhfdCkocylb
LS0oaSldOyBcCi0gICAgaWYoKGMpPj0weDgwKSB7IFwKLSAgICAgICAgKGMpPXV0ZjhfcHJldkNo
YXJTYWZlQm9keSgoY29uc3QgdWludDhfdCAqKXMsIHN0YXJ0LCAmKGkpLCBjLCAtMSk7IFwKLSAg
ICB9IFwKLX0KLQotLyoqCi0gKiBNb3ZlIHRoZSBzdHJpbmcgb2Zmc2V0IGZyb20gb25lIGNvZGUg
cG9pbnQgYm91bmRhcnkgdG8gdGhlIHByZXZpb3VzIG9uZQotICogYW5kIGdldCB0aGUgY29kZSBw
b2ludCBiZXR3ZWVuIHRoZW0uCi0gKiAoUHJlLWRlY3JlbWVudGluZyBiYWNrd2FyZCBpdGVyYXRp
b24uKQotICogIlNhZmUiIG1hY3JvLCBjaGVja3MgZm9yIGlsbGVnYWwgc2VxdWVuY2VzIGFuZCBm
b3Igc3RyaW5nIGJvdW5kYXJpZXMuCi0gKgotICogVGhlIGlucHV0IG9mZnNldCBtYXkgYmUgdGhl
IHNhbWUgYXMgdGhlIHN0cmluZyBsZW5ndGguCi0gKiBJZiB0aGUgb2Zmc2V0IGlzIGJlaGluZCBh
IG11bHRpLWJ5dGUgc2VxdWVuY2UsIHRoZW4gdGhlIG1hY3JvIHdpbGwgcmVhZAotICogdGhlIHdo
b2xlIHNlcXVlbmNlLgotICogSWYgdGhlIG9mZnNldCBpcyBiZWhpbmQgYSBsZWFkIGJ5dGUsIHRo
ZW4gdGhhdCBpdHNlbGYKLSAqIHdpbGwgYmUgcmV0dXJuZWQgYXMgdGhlIGNvZGUgcG9pbnQuCi0g
KiBJZiB0aGUgb2Zmc2V0IGlzIGJlaGluZCBhbiBpbGxlZ2FsIFVURi04IHNlcXVlbmNlLCB0aGVu
IGMgaXMgc2V0IHRvIFUrRkZGRC4KLSAqCi0gKiBUaGlzIG1hY3JvIGRvZXMgbm90IGRpc3Rpbmd1
aXNoIGJldHdlZW4gYSByZWFsIFUrRkZGRCBpbiB0aGUgdGV4dAotICogYW5kIFUrRkZGRCByZXR1
cm5lZCBmb3IgYW4gaWxsLWZvcm1lZCBzZXF1ZW5jZS4KLSAqIFVzZSBVOF9QUkVWKCkgaWYgdGhh
dCBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQuCi0gKgotICogQHBhcmFtIHMgY29uc3QgdWludDhf
dCAqIHN0cmluZwotICogQHBhcmFtIHN0YXJ0IGludDMyX3Qgc3RhcnRpbmcgc3RyaW5nIG9mZnNl
dCAodXN1YWxseSAwKQotICogQHBhcmFtIGkgaW50MzJfdCBzdHJpbmcgb2Zmc2V0LCBtdXN0IGJl
IHN0YXJ0PGkKLSAqIEBwYXJhbSBjIG91dHB1dCBVQ2hhcjMyIHZhcmlhYmxlLCBzZXQgdG8gVStG
RkZEIGluIGNhc2Ugb2YgYW4gZXJyb3IKLSAqIEBzZWUgVThfUFJFVgotICogQHN0YWJsZSBJQ1Ug
NTEKLSAqLwotI2RlZmluZSBVOF9QUkVWX09SX0ZGRkQocywgc3RhcnQsIGksIGMpIHsgXAotICAg
IChjKT0odWludDhfdCkocylbLS0oaSldOyBcCi0gICAgaWYoKGMpPj0weDgwKSB7IFwKLSAgICAg
ICAgKGMpPXV0ZjhfcHJldkNoYXJTYWZlQm9keSgoY29uc3QgdWludDhfdCAqKXMsIHN0YXJ0LCAm
KGkpLCBjLCAtMyk7IFwKLSAgICB9IFwKLX0KLQotLyoqCi0gKiBNb3ZlIHRoZSBzdHJpbmcgb2Zm
c2V0IGZyb20gb25lIGNvZGUgcG9pbnQgYm91bmRhcnkgdG8gdGhlIHByZXZpb3VzIG9uZS4KLSAq
IChQcmUtZGVjcmVtZW50aW5nIGJhY2t3YXJkIGl0ZXJhdGlvbi4pCi0gKiBUaGUgaW5wdXQgb2Zm
c2V0IG1heSBiZSB0aGUgc2FtZSBhcyB0aGUgc3RyaW5nIGxlbmd0aC4KLSAqICJVbnNhZmUiIG1h
Y3JvLCBhc3N1bWVzIHdlbGwtZm9ybWVkIFVURi04LgotICoKLSAqIEBwYXJhbSBzIGNvbnN0IHVp
bnQ4X3QgKiBzdHJpbmcKLSAqIEBwYXJhbSBpIHN0cmluZyBvZmZzZXQKLSAqIEBzZWUgVThfQkFD
S18xCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBVOF9CQUNLXzFfVU5TQUZFKHMs
IGkpIHsgXAotICAgIHdoaWxlKFU4X0lTX1RSQUlMKChzKVstLShpKV0pKSB7fSBcCi19Ci0KLS8q
KgotICogTW92ZSB0aGUgc3RyaW5nIG9mZnNldCBmcm9tIG9uZSBjb2RlIHBvaW50IGJvdW5kYXJ5
IHRvIHRoZSBwcmV2aW91cyBvbmUuCi0gKiAoUHJlLWRlY3JlbWVudGluZyBiYWNrd2FyZCBpdGVy
YXRpb24uKQotICogVGhlIGlucHV0IG9mZnNldCBtYXkgYmUgdGhlIHNhbWUgYXMgdGhlIHN0cmlu
ZyBsZW5ndGguCi0gKiAiU2FmZSIgbWFjcm8sIGNoZWNrcyBmb3IgaWxsZWdhbCBzZXF1ZW5jZXMg
YW5kIGZvciBzdHJpbmcgYm91bmRhcmllcy4KLSAqCi0gKiBAcGFyYW0gcyBjb25zdCB1aW50OF90
ICogc3RyaW5nCi0gKiBAcGFyYW0gc3RhcnQgaW50MzJfdCBzdGFydGluZyBzdHJpbmcgb2Zmc2V0
ICh1c3VhbGx5IDApCi0gKiBAcGFyYW0gaSBpbnQzMl90IHN0cmluZyBvZmZzZXQsIG11c3QgYmUg
c3RhcnQ8aQotICogQHNlZSBVOF9CQUNLXzFfVU5TQUZFCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAq
LwotI2RlZmluZSBVOF9CQUNLXzEocywgc3RhcnQsIGkpIHsgXAotICAgIGlmKFU4X0lTX1RSQUlM
KChzKVstLShpKV0pKSB7IFwKLSAgICAgICAgKGkpPXV0ZjhfYmFjazFTYWZlQm9keShzLCBzdGFy
dCwgKGkpKTsgXAotICAgIH0gXAotfQotCi0vKioKLSAqIE1vdmUgdGhlIHN0cmluZyBvZmZzZXQg
ZnJvbSBvbmUgY29kZSBwb2ludCBib3VuZGFyeSB0byB0aGUgbi10aCBvbmUgYmVmb3JlIGl0LAot
ICogaS5lLiwgbW92ZSBiYWNrd2FyZCBieSBuIGNvZGUgcG9pbnRzLgotICogKFByZS1kZWNyZW1l
bnRpbmcgYmFja3dhcmQgaXRlcmF0aW9uLikKLSAqIFRoZSBpbnB1dCBvZmZzZXQgbWF5IGJlIHRo
ZSBzYW1lIGFzIHRoZSBzdHJpbmcgbGVuZ3RoLgotICogIlVuc2FmZSIgbWFjcm8sIGFzc3VtZXMg
d2VsbC1mb3JtZWQgVVRGLTguCi0gKgotICogQHBhcmFtIHMgY29uc3QgdWludDhfdCAqIHN0cmlu
ZwotICogQHBhcmFtIGkgc3RyaW5nIG9mZnNldAotICogQHBhcmFtIG4gbnVtYmVyIG9mIGNvZGUg
cG9pbnRzIHRvIHNraXAKLSAqIEBzZWUgVThfQkFDS19OCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAq
LwotI2RlZmluZSBVOF9CQUNLX05fVU5TQUZFKHMsIGksIG4pIHsgXAotICAgIGludDMyX3QgX19O
PShuKTsgXAotICAgIHdoaWxlKF9fTj4wKSB7IFwKLSAgICAgICAgVThfQkFDS18xX1VOU0FGRShz
LCBpKTsgXAotICAgICAgICAtLV9fTjsgXAotICAgIH0gXAotfQotCi0vKioKLSAqIE1vdmUgdGhl
IHN0cmluZyBvZmZzZXQgZnJvbSBvbmUgY29kZSBwb2ludCBib3VuZGFyeSB0byB0aGUgbi10aCBv
bmUgYmVmb3JlIGl0LAotICogaS5lLiwgbW92ZSBiYWNrd2FyZCBieSBuIGNvZGUgcG9pbnRzLgot
ICogKFByZS1kZWNyZW1lbnRpbmcgYmFja3dhcmQgaXRlcmF0aW9uLikKLSAqIFRoZSBpbnB1dCBv
ZmZzZXQgbWF5IGJlIHRoZSBzYW1lIGFzIHRoZSBzdHJpbmcgbGVuZ3RoLgotICogIlNhZmUiIG1h
Y3JvLCBjaGVja3MgZm9yIGlsbGVnYWwgc2VxdWVuY2VzIGFuZCBmb3Igc3RyaW5nIGJvdW5kYXJp
ZXMuCi0gKgotICogQHBhcmFtIHMgY29uc3QgdWludDhfdCAqIHN0cmluZwotICogQHBhcmFtIHN0
YXJ0IGludDMyX3QgaW5kZXggb2YgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcKLSAqIEBwYXJhbSBp
IGludDMyX3Qgc3RyaW5nIG9mZnNldCwgbXVzdCBiZSBzdGFydDxpCi0gKiBAcGFyYW0gbiBudW1i
ZXIgb2YgY29kZSBwb2ludHMgdG8gc2tpcAotICogQHNlZSBVOF9CQUNLX05fVU5TQUZFCi0gKiBA
c3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBVOF9CQUNLX04ocywgc3RhcnQsIGksIG4pIHsg
XAotICAgIGludDMyX3QgX19OPShuKTsgXAotICAgIHdoaWxlKF9fTj4wICYmIChpKT4oc3RhcnQp
KSB7IFwKLSAgICAgICAgVThfQkFDS18xKHMsIHN0YXJ0LCBpKTsgXAotICAgICAgICAtLV9fTjsg
XAotICAgIH0gXAotfQotCi0vKioKLSAqIEFkanVzdCBhIHJhbmRvbS1hY2Nlc3Mgb2Zmc2V0IHRv
IGEgY29kZSBwb2ludCBib3VuZGFyeSBhZnRlciBhIGNvZGUgcG9pbnQuCi0gKiBJZiB0aGUgb2Zm
c2V0IGlzIGJlaGluZCBhIHBhcnRpYWwgbXVsdGktYnl0ZSBzZXF1ZW5jZSwKLSAqIHRoZW4gdGhl
IG9mZnNldCBpcyBpbmNyZW1lbnRlZCB0byBiZWhpbmQgdGhlIHdob2xlIHNlcXVlbmNlLgotICog
T3RoZXJ3aXNlLCBpdCBpcyBub3QgbW9kaWZpZWQuCi0gKiBUaGUgaW5wdXQgb2Zmc2V0IG1heSBi
ZSB0aGUgc2FtZSBhcyB0aGUgc3RyaW5nIGxlbmd0aC4KLSAqICJVbnNhZmUiIG1hY3JvLCBhc3N1
bWVzIHdlbGwtZm9ybWVkIFVURi04LgotICoKLSAqIEBwYXJhbSBzIGNvbnN0IHVpbnQ4X3QgKiBz
dHJpbmcKLSAqIEBwYXJhbSBpIHN0cmluZyBvZmZzZXQKLSAqIEBzZWUgVThfU0VUX0NQX0xJTUlU
Ci0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotI2RlZmluZSBVOF9TRVRfQ1BfTElNSVRfVU5TQUZF
KHMsIGkpIHsgXAotICAgIFU4X0JBQ0tfMV9VTlNBRkUocywgaSk7IFwKLSAgICBVOF9GV0RfMV9V
TlNBRkUocywgaSk7IFwKLX0KLQotLyoqCi0gKiBBZGp1c3QgYSByYW5kb20tYWNjZXNzIG9mZnNl
dCB0byBhIGNvZGUgcG9pbnQgYm91bmRhcnkgYWZ0ZXIgYSBjb2RlIHBvaW50LgotICogSWYgdGhl
IG9mZnNldCBpcyBiZWhpbmQgYSBwYXJ0aWFsIG11bHRpLWJ5dGUgc2VxdWVuY2UsCi0gKiB0aGVu
IHRoZSBvZmZzZXQgaXMgaW5jcmVtZW50ZWQgdG8gYmVoaW5kIHRoZSB3aG9sZSBzZXF1ZW5jZS4K
LSAqIE90aGVyd2lzZSwgaXQgaXMgbm90IG1vZGlmaWVkLgotICogVGhlIGlucHV0IG9mZnNldCBt
YXkgYmUgdGhlIHNhbWUgYXMgdGhlIHN0cmluZyBsZW5ndGguCi0gKiAiU2FmZSIgbWFjcm8sIGNo
ZWNrcyBmb3IgaWxsZWdhbCBzZXF1ZW5jZXMgYW5kIGZvciBzdHJpbmcgYm91bmRhcmllcy4KLSAq
Ci0gKiBUaGUgbGVuZ3RoIGNhbiBiZSBuZWdhdGl2ZSBmb3IgYSBOVUwtdGVybWluYXRlZCBzdHJp
bmcuCi0gKgotICogQHBhcmFtIHMgY29uc3QgdWludDhfdCAqIHN0cmluZwotICogQHBhcmFtIHN0
YXJ0IGludDMyX3Qgc3RhcnRpbmcgc3RyaW5nIG9mZnNldCAodXN1YWxseSAwKQotICogQHBhcmFt
IGkgaW50MzJfdCBzdHJpbmcgb2Zmc2V0LCBtdXN0IGJlIHN0YXJ0PD1pPD1sZW5ndGgKLSAqIEBw
YXJhbSBsZW5ndGggaW50MzJfdCBzdHJpbmcgbGVuZ3RoCi0gKiBAc2VlIFU4X1NFVF9DUF9MSU1J
VF9VTlNBRkUKLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVmaW5lIFU4X1NFVF9DUF9MSU1J
VChzLCBzdGFydCwgaSwgbGVuZ3RoKSB7IFwKLSAgICBpZigoc3RhcnQpPChpKSAmJiAoKGkpPChs
ZW5ndGgpIHx8ICgobGVuZ3RoKTwwICYmIChzKVtpXSE9MCkpKSB7IFwKLSAgICAgICAgVThfQkFD
S18xKHMsIHN0YXJ0LCBpKTsgXAotICAgICAgICBVOF9GV0RfMShzLCBpLCBsZW5ndGgpOyBcCi0g
ICAgfSBcCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS91dGZfb2xkLmggYi9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3V0Zl9vbGQu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkxMjViMWRkMmVkN2UxYzY4NGRhMTY1
NGY1ZTQ3ZGQ3Y2Q1ZmIxNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2lj
dS91bmljb2RlL3V0Zl9vbGQuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNjkgKzAsMCBAQAotLyoK
LSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKLSoKLSogICBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMiwg
SW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcwotKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhl
cnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAg
IGZpbGUgbmFtZTogIHV0Zl9vbGQuaAotKiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCi0qICAgdGFi
IHNpemU6ICAgOCAobm90IHVzZWQpCi0qICAgaW5kZW50YXRpb246NAotKgotKiAgIGNyZWF0ZWQg
b246IDIwMDJzZXAyMQotKiAgIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCi0qLwotCi0v
KioKLSAqIFxmaWxlIAotICogXGJyaWVmIEMgQVBJOiBEZXByZWNhdGVkIG1hY3JvcyBmb3IgVW5p
Y29kZSBzdHJpbmcgaGFuZGxpbmcKLSAqLwotCi0vKioKLSAqIAotICogVGhlIG1hY3JvcyBpbiB1
dGZfb2xkLmggYXJlIGFsbCBkZXByZWNhdGVkIGFuZCB0aGVpciB1c2UgZGlzY291cmFnZWQuCi0g
KiBTb21lIG9mIHRoZSBkZXNpZ24gcHJpbmNpcGxlcyBiZWhpbmQgdGhlIHNldCBvZiBVVEYgbWFj
cm9zCi0gKiBoYXZlIGNoYW5nZWQgb3IgcHJvdmVkIGltcHJhY3RpY2FsLgotICogQWxtb3N0IGFs
bCBvZiB0aGUgb2xkICJVVEYgbWFjcm9zIiBhcmUgYXQgbGVhc3QgcmVuYW1lZC4KLSAqIElmIHlv
dSBhcmUgbG9va2luZyBmb3IgYSBuZXcgZXF1aXZhbGVudCB0byBhbiBvbGQgbWFjcm8sIHBsZWFz
ZSBzZWUgdGhlCi0gKiBjb21tZW50IGF0IHRoZSBvbGQgb25lLgotICoKLSAqIEJyaWVmIHN1bW1h
cnkgb2YgcmVhc29ucyBmb3IgZGVwcmVjYXRpb246Ci0gKiAtIFN3aXRjaCBvbiBVVEZfU0laRSAo
c2VsZWN0aW9uIG9mIFVURi04LzE2LzMyIGRlZmF1bHQgc3RyaW5nIHByb2Nlc3NpbmcpCi0gKiAg
IHdhcyBpbXByYWN0aWNhbC4KLSAqIC0gU3dpdGNoIG9uIFVURl9TQUZFIGV0Yy4gKHNlbGVjdGlv
biBvZiB1bnNhZmUvc2FmZS9zdHJpY3QgZGVmYXVsdCBzdHJpbmcgcHJvY2Vzc2luZykKLSAqICAg
d2FzIG9mIGxpdHRsZSB1c2UgYW5kIGltcHJhY3RpY2FsLgotICogLSBXaG9sZSBjbGFzc2VzIG9m
IG1hY3JvcyBiZWNhbWUgb2Jzb2xldGUgb3V0c2lkZSBvZiB0aGUgVVRGX1NJWkUvVVRGX1NBRkUK
LSAqICAgc2VsZWN0aW9uIGZyYW1ld29yazogVVRGMzJfIG1hY3JvcyAoYWxsIHRyaXZpYWwpCi0g
KiAgIGFuZCBVVEZfIGRlZmF1bHQgYW5kIGludGVybWVkaWF0ZSBtYWNyb3MgKGFsbCBhbGlhc2Vz
KS4KLSAqIC0gVGhlIHNlbGVjdGlvbiBmcmFtZXdvcmsgYWxzbyBjYXVzZWQgbWFueSBtYWNybyBh
bGlhc2VzLgotICogLSBDaGFuZ2UgaW4gVW5pY29kZSBzdGFuZGFyZDogImlycmVndWxhciIgc2Vx
dWVuY2VzICgzLjApIGJlY2FtZSBpbGxlZ2FsICgzLjIpLgotICogLSBDaGFuZ2Ugb2YgbGFuZ3Vh
Z2UgaW4gVW5pY29kZSBzdGFuZGFyZDoKLSAqICAgR3Jvd2luZyBkaXN0aW5jdGlvbiBiZXR3ZWVu
IGludGVybmFsIHgtYml0IFVuaWNvZGUgc3RyaW5ncyBhbmQgZXh0ZXJuYWwgVVRGLXgKLSAqICAg
Zm9ybXMsIHdpdGggdGhlIGZvcm1lciBtb3JlIGxlbmllbnQuCi0gKiAgIFN1Z2dlc3RzIHJlbmFt
aW5nIG9mIFVURjE2XyBtYWNyb3MgdG8gVTE2Xy4KLSAqIC0gVGhlIHByZWZpeCAiVVRGXyIgd2l0
aG91dCBhIHdpZHRoIG51bWJlciBjb25mdXNlZCBzb21lIHVzZXJzLgotICogLSAiU2FmZSIgYXBw
ZW5kIG1hY3JvcyBuZWVkZWQgdGhlIGFkZGl0aW9uIG9mIGFuIGVycm9yIGluZGljYXRvciBvdXRw
dXQuCi0gKiAtICJTYWZlIiBVVEYtOCBtYWNyb3MgdXNlZCBsZWdpdGltYXRlIChpZiByYXJlbHkg
dXNlZCkgY29kZSBwb2ludCB2YWx1ZXMKLSAqICAgdG8gaW5kaWNhdGUgZXJyb3IgY29uZGl0aW9u
cy4KLSAqIC0gVGhlIHVzZSBvZiB0aGUgIl9DSEFSIiBpbmZpeCBmb3IgY29kZSBwb2ludCBvcGVy
YXRpb25zIGNvbmZ1c2VkIHNvbWUgdXNlcnMuCi0gKgotICogTW9yZSBkZXRhaWxzOgotICoKLSAq
IFVudGlsIElDVSAyLjIsIHV0Zi5oIHRoZW9yZXRpY2FsbHkgYWxsb3dlZCB0byBjaG9vc2UgYW1v
bmcgVVRGLTgvMTYvMzIKLSAqIGZvciBzdHJpbmcgcHJvY2Vzc2luZywgYW5kIGFtb25nIHVuc2Fm
ZS9zYWZlL3N0cmljdCBkZWZhdWx0IG1hY3JvcyBmb3IgdGhhdC4KLSAqCi0gKiBJdCBwcm92ZWQg
bmVhcmx5IGltcG9zc2libGUgdG8gd3JpdGUgbm9uLXRyaXZpYWwsIGhpZ2gtcGVyZm9ybWFuY2Ug
Y29kZQotICogdGhhdCBpcyBVVEYtZ2VuZXJpYy4KLSAqIFVuc2FmZSBkZWZhdWx0IG1hY3JvcyB3
b3VsZCBiZSBkYW5nZXJvdXMgZm9yIGRlZmF1bHQgc3RyaW5nIHByb2Nlc3NpbmcsCi0gKiBhbmQg
dGhlIG1haW4gcmVhc29uIGZvciB0aGUgInN0cmljdCIgdmVyc2lvbnMgZGlzYXBwZWFyZWQ6Ci0g
KiBCZXR3ZWVuIFVuaWNvZGUgMy4wIGFuZCAzLjIgYWxsICJpcnJlZ3VsYXIiIFVURi04IHNlcXVl
bmNlcyBiZWNhbWUgaWxsZWdhbC4KLSAqIFRoZSBvbmx5IG90aGVyIGNvbmRpdGlvbnMgdGhhdCAi
c3RyaWN0IiBjaGVja2VkIGZvciB3ZXJlIG5vbi1jaGFyYWN0ZXJzLAotICogd2hpY2ggYXJlIHZh
bGlkIGR1cmluZyBwcm9jZXNzaW5nLiBPbmx5IGR1cmluZyB0ZXh0IGlucHV0L291dHB1dCBzaG91
bGQgdGhleQotICogYmUgY2hlY2tlZCwgYW5kIGF0IHRoYXQgdGltZSBvdGhlciB3ZWxsLWZvcm1l
ZG5lc3MgY2hlY2tzIG1heSBiZQotICogbmVjZXNzYXJ5IG9yIHVzZWZ1bCBhcyB3ZWxsLgotICog
VGhpcyBjYW4gc3RpbGwgYmUgZG9uZSBieSB1c2luZyBVMTZfTkVYVCBhbmQgVV9JU19VTklDT0RF
X05PTkNIQVIKLSAqIG9yIFVfSVNfVU5JQ09ERV9DSEFSLgotICoKLSAqIFRoZSBvbGQgVVRGOF8u
Li5fU0FGRSBtYWNyb3MgYWxzbyB1c2VkIHNvbWUgbm9ybWFsIFVuaWNvZGUgY29kZSBwb2ludHMK
LSAqIHRvIGluZGljYXRlIG1hbGZvcm1lZCBzZXF1ZW5jZXMuCi0gKiBUaGUgbmV3IFVURjhfIG1h
Y3JvcyB3aXRob3V0IHN1ZmZpeCB1c2UgbmVnYXRpdmUgdmFsdWVzIGluc3RlYWQuCi0gKgotICog
VGhlIGVudGlyZSBjb250ZW50cyBvZiB1dGYzMi5oIHdhcyBtb3ZlZCBoZXJlIHdpdGhvdXQgcmVw
bGFjZW1lbnQKLSAqIGJlY2F1c2UgYWxsIHRob3NlIG1hY3JvcyB3ZXJlIHRyaXZpYWwgYW5kCi0g
KiB3ZXJlIG1lYW5pbmdmdWwgb25seSBpbiB0aGUgZnJhbWV3b3JrIG9mIGNob29zaW5nIHRoZSBV
VEYgc2l6ZS4KLSAqCi0gKiBTZWUgSml0dGVyYnVnIDIxNTAgYW5kIGl0cyBkaXNjdXNzaW9uIG9u
IHRoZSBJQ1UgbWFpbGluZyBsaXN0Ci0gKiBpbiBTZXB0ZW1iZXIgMjAwMi4KLSAqCi0gKiA8aHI+
Ci0gKgotICogPGVtPk9ic29sZXRlIHBhcnQ8L2VtPiBvZiBwcmUtSUNVIDIuNCB1dGYuaCBmaWxl
IGRvY3VtZW50YXRpb246Ci0gKgotICogPHA+VGhlIG9yaWdpbmFsIGNvbmNlcHQgZm9yIHRoZXNl
IGZpbGVzIHdhcyBmb3IgSUNVIHRvIGFsbG93Ci0gKiBpbiBwcmluY2lwbGUgdG8gc2V0IHdoaWNo
IFVURiAoVVRGLTgvMTYvMzIpIGlzIHVzZWQgaW50ZXJuYWxseQotICogYnkgZGVmaW5pbmcgVVRG
X1NJWkUgdG8gZWl0aGVyIDgsIDE2LCBvciAzMi4gdXRmLmggd291bGQgdGhlbiBkZWZpbmUgdGhl
IFVDaGFyIHR5cGUKLSAqIGFjY29yZGluZ2x5LiBVVEYtMTYgd2FzIHRoZSBkZWZhdWx0LjwvcD4K
LSAqCi0gKiA8cD5UaGlzIGNvbmNlcHQgaGFzIGJlZW4gYWJhbmRvbmVkLgotICogQSBsb3Qgb2Yg
dGhlIElDVSBzb3VyY2UgY29kZSBhc3N1bWVzIFVDaGFyIHN0cmluZ3MgYXJlIGluIFVURi0xNi4K
LSAqIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGZvciBsb3ctbGV2ZWwgY29kZSBsaWtlCi0gKiBj
b252ZXJzaW9uLCBub3JtYWxpemF0aW9uLCBhbmQgY29sbGF0aW9uLgotICogVGhlIHV0Zi5oIGhl
YWRlciBlbmZvcmNlcyB0aGUgZGVmYXVsdCBvZiBVVEYtMTYuCi0gKiBUaGUgVVRGLTggYW5kIFVU
Ri0zMiBtYWNyb3MgcmVtYWluIGZvciBub3cgZm9yIGNvbXBsZXRlbmVzcyBhbmQgYmFja3dhcmQg
Y29tcGF0aWJpbGl0eS48L3A+Ci0gKgotICogPHA+QWNjb3JkaW5nbHksIHV0Zi5oIGRlZmluZXMg
VUNoYXIgdG8gYmUgYW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIuIElmIHRoaXMgbWF0Y2hlcyB3
Y2hhcl90LCB0aGVuCi0gKiBVQ2hhciBpcyBkZWZpbmVkIHRvIGJlIGV4YWN0bHkgd2NoYXJfdCwg
b3RoZXJ3aXNlIHVpbnQxNl90LjwvcD4KLSAqCi0gKiA8cD5VQ2hhcjMyIGlzIGRlZmluZWQgdG8g
YmUgYSBzaWduZWQgMzItYml0IGludGVnZXIgKGludDMyX3QpLCBsYXJnZSBlbm91Z2ggZm9yIGEg
MjEtYml0Ci0gKiBVbmljb2RlIGNvZGUgcG9pbnQgKFVuaWNvZGUgc2NhbGFyIHZhbHVlLCAwLi4w
eDEwZmZmZikuCi0gKiBCZWZvcmUgSUNVIDIuNCwgdGhlIGRlZmluaXRpb24gb2YgVUNoYXIzMiB3
YXMgc2ltaWxhcmx5IHBsYXRmb3JtLWRlcGVuZGVudCBhcwotICogdGhlIGRlZmluaXRpb24gb2Yg
VUNoYXIuIEZvciBkZXRhaWxzIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgVUNoYXIzMiBpdHNl
bGYuPC9wPgotICoKLSAqIDxwPnV0Zi5oIGFsc28gZGVmaW5lcyBhIG51bWJlciBvZiBDIG1hY3Jv
cyBmb3IgaGFuZGxpbmcgc2luZ2xlIFVuaWNvZGUgY29kZSBwb2ludHMgYW5kCi0gKiBmb3IgdXNp
bmcgVVRGIFVuaWNvZGUgc3RyaW5ncy4gSXQgaW5jbHVkZXMgdXRmOC5oLCB1dGYxNi5oLCBhbmQg
dXRmMzIuaCBmb3IgdGhlIGFjdHVhbAotICogaW1wbGVtZW50YXRpb25zIG9mIHRob3NlIG1hY3Jv
cyBhbmQgdGhlbiBhbGlhc2VzIG9uZSBzZXQgb2YgdGhlbSAoZm9yIFVURi0xNikgZm9yIGdlbmVy
YWwgdXNlLgotICogVGhlIFVURi1zcGVjaWZpYyBtYWNyb3MgaGF2ZSB0aGUgVVRGIHNpemUgaW4g
dGhlIG1hY3JvIG5hbWUgcHJlZml4ZXMgKFVURjE2Xy4uLiksIHdoaWxlCi0gKiB0aGUgZ2VuZXJh
bCBhbGlhcyBtYWNyb3MgYWx3YXlzIGJlZ2luIHdpdGggVVRGXy4uLjwvcD4KLSAqCi0gKiA8cD5N
YW55IHN0cmluZyBvcGVyYXRpb25zIGNhbiBiZSBkb25lIHdpdGggb3Igd2l0aG91dCBlcnJvciBj
aGVja2luZy4KLSAqIFdoZXJlIHN1Y2ggYSBkaXN0aW5jdGlvbiBpcyB1c2VmdWwsIHRoZXJlIGFy
ZSB0d28gdmVyc2lvbnMgb2YgdGhlIG1hY3JvcywgInVuc2FmZSIgYW5kICJzYWZlIgotICogb25l
cyB3aXRoIC4uLl9VTlNBRkUgYW5kIC4uLl9TQUZFIHN1ZmZpeGVzLiBUaGUgdW5zYWZlIG1hY3Jv
cyBhcmUgZmFzdCBidXQgbWF5IGNhdXNlCi0gKiBwcm9ncmFtIGZhaWx1cmVzIGlmIHRoZSBzdHJp
bmdzIGFyZSBub3Qgd2VsbC1mb3JtZWQuIFRoZSBzYWZlIG1hY3JvcyBoYXZlIGFuIGFkZGl0aW9u
YWwsIGJvb2xlYW4KLSAqIHBhcmFtZXRlciAic3RyaWN0Ii4gSWYgc3RyaWN0IGlzIEZBTFNFLCB0
aGVuIG9ubHkgaWxsZWdhbCBzZXF1ZW5jZXMgYXJlIGRldGVjdGVkLgotICogT3RoZXJ3aXNlLCBp
cnJlZ3VsYXIgc2VxdWVuY2VzIGFuZCBub24tY2hhcmFjdGVycyBhcmUgZGV0ZWN0ZWQgYXMgd2Vs
bCAobGlrZSBzaW5nbGUgc3Vycm9nYXRlcykuCi0gKiBTYWZlIG1hY3JvcyByZXR1cm4gc3BlY2lh
bCBlcnJvciBjb2RlIHBvaW50cyBmb3IgaWxsZWdhbC9pcnJlZ3VsYXIgc2VxdWVuY2VzOgotICog
VHlwaWNhbGx5LCBVK2ZmZmYsIG9yIHZhbHVlcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIGNvZGUg
dW5pdCBzZXF1ZW5jZSBvZiB0aGUgc2FtZSBsZW5ndGgKLSAqIGFzIHRoZSBlcnJvbmVvdXMgaW5w
dXQgc2VxdWVuY2UuPGJyPgotICogTm90ZSB0aGF0IF9VTlNBRkUgbWFjcm9zIGhhdmUgZmV3ZXIg
cGFyYW1ldGVyczogVGhleSBkbyBub3QgaGF2ZSB0aGUgc3RyaWN0bmVzcyBwYXJhbWV0ZXIsIGFu
ZAotICogdGhleSBkbyBub3QgaGF2ZSBzdGFydC9sZW5ndGggcGFyYW1ldGVycyBmb3IgYm91bmRh
cnkgY2hlY2tpbmcuPC9wPgotICoKLSAqIDxwPkhlcmUsIHRoZSBtYWNyb3MgYXJlIGFsaWFzZWQg
aW4gdHdvIHN0ZXBzOgotICogSW4gdGhlIGZpcnN0IHN0ZXAsIHRoZSBVVEYtc3BlY2lmaWMgbWFj
cm9zIHdpdGggVVRGMTZfIHByZWZpeCBhbmQgX1VOU0FGRSBhbmQgX1NBRkUgc3VmZml4ZXMgYXJl
Ci0gKiBhbGlhc2VkIGFjY29yZGluZyB0byB0aGUgVVRGX1NJWkUgdG8gbWFjcm9zIHdpdGggVVRG
XyBwcmVmaXggYW5kIHRoZSBzYW1lIHN1ZmZpeGVzIGFuZCBzaWduYXR1cmVzLgotICogVGhlbiwg
aW4gYSBzZWNvbmQgc3RlcCwgdGhlIGRlZmF1bHQsIGdlbmVyYWwgYWxpYXMgbWFjcm9zIGFyZSBz
ZXQgdG8gdXNlIGVpdGhlciB0aGUgdW5zYWZlIG9yCi0gKiB0aGUgc2FmZS9ub3Qgc3RyaWN0IChk
ZWZhdWx0KSBvciB0aGUgc2FmZS9zdHJpY3QgbWFjcm87Ci0gKiB0aGVzZSBnZW5lcmFsIG1hY3Jv
cyBkbyBub3QgaGF2ZSBhIHN0cmljdG5lc3MgcGFyYW1ldGVyLjwvcD4KLSAqCi0gKiA8cD5JdCBp
cyBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgY2hvaWNlIGZvciB0aGUgZ2VuZXJhbCBh
bGlhcyBtYWNyb3MgdG8gYmUgdW5zYWZlLCBzYWZlL25vdCBzdHJpY3Qgb3Igc2FmZS9zdHJpY3Qu
Ci0gKiBUaGUgZGVmYXVsdCBpcyBzYWZlL25vdCBzdHJpY3QuIEl0IGlzIG5vdCByZWNvbW1lbmRl
ZCB0byBzZWxlY3QgdGhlIHVuc2FmZSBtYWNyb3MgYXMgdGhlIGJhc2lzIGZvcgotICogVW5pY29k
ZSBzdHJpbmcgaGFuZGxpbmcgaW4gSUNVISBUbyBzZWxlY3QgdGhpcywgZGVmaW5lIFVURl9TQUZF
LCBVVEZfU1RSSUNULCBvciBVVEZfVU5TQUZFLjwvcD4KLSAqCi0gKiA8cD5Gb3IgZ2VuZXJhbCB1
c2UsIG9uZSBzaG91bGQgdXNlIHRoZSBkZWZhdWx0LCBnZW5lcmFsIG1hY3JvcyB3aXRoIFVURl8g
cHJlZml4IGFuZCBubyBfU0FGRS9fVU5TQUZFIHN1ZmZpeC4KLSAqIE9ubHkgaW4gc29tZSBjYXNl
cyBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGNvbnRyb2wgdGhlIGNob2ljZSBvZiBtYWNybyBkaXJl
Y3RseSBhbmQgdXNlIGEgbGVzcyBnZW5lcmljIGFsaWFzLgotICogRm9yIGV4YW1wbGUsIGlmIGl0
IGNhbiBiZSBhc3N1bWVkIHRoYXQgYSBzdHJpbmcgaXMgd2VsbC1mb3JtZWQgYW5kIHRoZSBpbmRl
eCB3aWxsIHN0YXkgd2l0aGluIHRoZSBib3VuZHMsCi0gKiB0aGVuIHRoZSBfVU5TQUZFIHZlcnNp
b24gbWF5IGJlIHVzZWQuCi0gKiBJZiBhIFVURi04IHN0cmluZyBpcyB0byBiZSBwcm9jZXNzZWQs
IHRoZW4gdGhlIG1hY3JvcyB3aXRoIFVURjhfIHByZWZpeGVzIG5lZWQgdG8gYmUgdXNlZC48L3A+
Ci0gKgotICogPGhyPgotICoKLSAqIEBkZXByZWNhdGVkIElDVSAyLjQuIFVzZSB0aGUgbWFjcm9z
IGluIHV0Zi5oLCB1dGYxNi5oLCB1dGY4LmggaW5zdGVhZC4KLSAqLwotCi0jaWZuZGVmIF9fVVRG
X09MRF9IX18KLSNkZWZpbmUgX19VVEZfT0xEX0hfXwotCi0jaWZuZGVmIFVfSElERV9ERVBSRUNB
VEVEX0FQSQotCi0jaW5jbHVkZSAidW5pY29kZS91dGYuaCIKLSNpbmNsdWRlICJ1bmljb2RlL3V0
ZjguaCIKLSNpbmNsdWRlICJ1bmljb2RlL3V0ZjE2LmgiCi0KLS8qIEZvcm1lcmx5IHV0Zi5oLCBw
YXJ0IDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCi0KLSNpZmRlZiBVX1VTRV9VVEZfREVQUkVDQVRFUwotLyoqCi0gKiBVbmljb2RlIHN0cmlu
ZyBhbmQgYXJyYXkgb2Zmc2V0IGFuZCBpbmRleCB0eXBlLgotICogSUNVIGFsd2F5cyBjb3VudHMg
VW5pY29kZSBjb2RlIHVuaXRzIChVQ2hhcnMpIGZvcgotICogc3RyaW5nIG9mZnNldHMsIGluZGV4
ZXMsIGFuZCBsZW5ndGhzLCBub3QgVW5pY29kZSBjb2RlIHBvaW50cy4KLSAqCi0gKiBAb2Jzb2xl
dGUgSUNVIDIuNi4gVXNlIGludDMyX3QgZGlyZWN0bHkgaW5zdGVhZCBzaW5jZSB0aGlzIEFQSSB3
aWxsIGJlIHJlbW92ZWQgaW4gdGhhdCByZWxlYXNlLgotICovCi10eXBlZGVmIGludDMyX3QgVVRl
eHRPZmZzZXQ7Ci0jZW5kaWYKLQotLyoqIE51bWJlciBvZiBiaXRzIGluIGEgVW5pY29kZSBzdHJp
bmcgY29kZSB1bml0IC0gSUNVIHVzZXMgMTYtYml0IFVuaWNvZGUuIEBkZXByZWNhdGVkIElDVSAy
LjQuIE9ic29sZXRlLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEZfU0laRSAxNgotCi0v
KioKLSAqIFRoZSBkZWZhdWx0IGNob2ljZSBmb3IgZ2VuZXJhbCBVbmljb2RlIHN0cmluZyBtYWNy
b3MgaXMgdG8gdXNlIHRoZSAuLi5fU0FGRSBtYWNybyBpbXBsZW1lbnRhdGlvbnMKLSAqIHdpdGgg
c3RyaWN0PUZBTFNFLgotICoKLSAqIEBkZXByZWNhdGVkIElDVSAyLjQuIE9ic29sZXRlLCBzZWUg
dXRmX29sZC5oLgotICovCi0jZGVmaW5lIFVURl9TQUZFCi0vKiogQGRlcHJlY2F0ZWQgSUNVIDIu
NC4gT2Jzb2xldGUsIHNlZSB1dGZfb2xkLmguICovCi0jdW5kZWYgVVRGX1VOU0FGRQotLyoqIEBk
ZXByZWNhdGVkIElDVSAyLjQuIE9ic29sZXRlLCBzZWUgdXRmX29sZC5oLiAqLwotI3VuZGVmIFVU
Rl9TVFJJQ1QKLQotLyoqCi0gKiBVVEY4X0VSUk9SX1ZBTFVFXzEgYW5kIFVURjhfRVJST1JfVkFM
VUVfMiBhcmUgc3BlY2lhbCBlcnJvciB2YWx1ZXMgZm9yIFVURi04LAotICogd2hpY2ggbmVlZCAx
IG9yIDIgYnl0ZXMgaW4gVVRGLTg6Ci0gKiBcY29kZQotICogVSswMDE1ID0gTkFLID0gTmVnYXRp
dmUgQWNrbm93bGVkZ2UsIEMwIGNvbnRyb2wgY2hhcmFjdGVyCi0gKiBVKzAwOWYgPSBoaWdoZXN0
IEMxIGNvbnRyb2wgY2hhcmFjdGVyCi0gKiBcZW5kY29kZQotICoKLSAqIFRoZXNlIGFyZSB1c2Vk
IGJ5IFVURjhfLi4uX1NBRkUgbWFjcm9zIHNvIHRoYXQgdGhleSBjYW4gcmV0dXJuIGFuIGVycm9y
IHZhbHVlCi0gKiB0aGF0IG5lZWRzIHRoZSBzYW1lIG51bWJlciBvZiBjb2RlIHVuaXRzIChieXRl
cykgYXMgd2VyZSBzZWVuIGJ5Ci0gKiBhIG1hY3JvLiBUaGV5IHNob3VsZCBiZSB0ZXN0ZWQgd2l0
aCBVVEZfSVNfRVJST1IoKSBvciBVVEZfSVNfVkFMSUQoKS4KLSAqCi0gKiBAZGVwcmVjYXRlZCBJ
Q1UgMi40LiBPYnNvbGV0ZSwgc2VlIHV0Zl9vbGQuaC4KLSAqLwotI2RlZmluZSBVVEY4X0VSUk9S
X1ZBTFVFXzEgMHgxNQotCi0vKioKLSAqIFNlZSBkb2N1bWVudGF0aW9uIG9uIFVURjhfRVJST1Jf
VkFMVUVfMSBmb3IgZGV0YWlscy4KLSAqCi0gKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBPYnNvbGV0
ZSwgc2VlIHV0Zl9vbGQuaC4KLSAqLwotI2RlZmluZSBVVEY4X0VSUk9SX1ZBTFVFXzIgMHg5Zgot
Ci0vKioKLSAqIEVycm9yIHZhbHVlIGZvciBhbGwgVVRGcy4gVGhpcyBjb2RlIHBvaW50IHZhbHVl
IHdpbGwgYmUgc2V0IGJ5IG1hY3JvcyB3aXRoIGVycm9yCi0gKiBjaGVja2luZyBpZiBhbiBlcnJv
ciBpcyBkZXRlY3RlZC4KLSAqCi0gKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBPYnNvbGV0ZSwgc2Vl
IHV0Zl9vbGQuaC4KLSAqLwotI2RlZmluZSBVVEZfRVJST1JfVkFMVUUgMHhmZmZmCi0KLS8qKgot
ICogSXMgYSBnaXZlbiAzMi1iaXQgY29kZSBhbiBlcnJvciB2YWx1ZQotICogYXMgcmV0dXJuZWQg
Ynkgb25lIG9mIHRoZSBtYWNyb3MgZm9yIGFueSBVVEY/Ci0gKgotICogQGRlcHJlY2F0ZWQgSUNV
IDIuNC4gT2Jzb2xldGUsIHNlZSB1dGZfb2xkLmguCi0gKi8KLSNkZWZpbmUgVVRGX0lTX0VSUk9S
KGMpIFwKLSAgICAoKChjKSYweGZmZmUpPT0weGZmZmUgfHwgKGMpPT1VVEY4X0VSUk9SX1ZBTFVF
XzEgfHwgKGMpPT1VVEY4X0VSUk9SX1ZBTFVFXzIpCi0KLS8qKgotICogVGhpcyBpcyBhIGNvbWJp
bmVkIG1hY3JvOiBJcyBjIGEgdmFsaWQgVW5pY29kZSB2YWx1ZSBfYW5kXyBub3QgYW4gZXJyb3Ig
Y29kZT8KLSAqCi0gKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBPYnNvbGV0ZSwgc2VlIHV0Zl9vbGQu
aC4KLSAqLwotI2RlZmluZSBVVEZfSVNfVkFMSUQoYykgXAotICAgIChVVEZfSVNfVU5JQ09ERV9D
SEFSKGMpICYmIFwKLSAgICAgKGMpIT1VVEY4X0VSUk9SX1ZBTFVFXzEgJiYgKGMpIT1VVEY4X0VS
Uk9SX1ZBTFVFXzIpCi0KLS8qKgotICogSXMgdGhpcyBjb2RlIHVuaXQgb3IgY29kZSBwb2ludCBh
IHN1cnJvZ2F0ZSAoVStkODAwLi5VK2RmZmYpPwotICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVu
YW1lZCB0byBVX0lTX1NVUlJPR0FURSBhbmQgVTE2X0lTX1NVUlJPR0FURSwgc2VlIHV0Zl9vbGQu
aC4KLSAqLwotI2RlZmluZSBVVEZfSVNfU1VSUk9HQVRFKHVjaGFyKSAoKCh1Y2hhcikmMHhmZmZm
ZjgwMCk9PTB4ZDgwMCkKLQotLyoqCi0gKiBJcyBhIGdpdmVuIDMyLWJpdCBjb2RlIHBvaW50IGEg
VW5pY29kZSBub25jaGFyYWN0ZXI/Ci0gKgotICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1l
ZCB0byBVX0lTX1VOSUNPREVfTk9OQ0hBUiwgc2VlIHV0Zl9vbGQuaC4KLSAqLwotI2RlZmluZSBV
VEZfSVNfVU5JQ09ERV9OT05DSEFSKGMpIFwKLSAgICAoKGMpPj0weGZkZDAgJiYgXAotICAgICAo
KHVpbnQzMl90KShjKTw9MHhmZGVmIHx8ICgoYykmMHhmZmZlKT09MHhmZmZlKSAmJiBcCi0gICAg
ICh1aW50MzJfdCkoYyk8PTB4MTBmZmZmKQotCi0vKioKLSAqIElzIGEgZ2l2ZW4gMzItYml0IHZh
bHVlIGEgVW5pY29kZSBjb2RlIHBvaW50IHZhbHVlICgwLi5VKzEwZmZmZikKLSAqIHRoYXQgY2Fu
IGJlIGFzc2lnbmVkIGEgY2hhcmFjdGVyPwotICoKLSAqIENvZGUgcG9pbnRzIHRoYXQgYXJlIG5v
dCBjaGFyYWN0ZXJzIGluY2x1ZGU6Ci0gKiAtIHNpbmdsZSBzdXJyb2dhdGUgY29kZSBwb2ludHMg
KFUrZDgwMC4uVStkZmZmLCAyMDQ4IGNvZGUgcG9pbnRzKQotICogLSB0aGUgbGFzdCB0d28gY29k
ZSBwb2ludHMgb24gZWFjaCBwbGFuZSAoVStfX2ZmZmUgYW5kIFUrX19mZmZmLCAzNCBjb2RlIHBv
aW50cykKLSAqIC0gVStmZGQwLi5VK2ZkZWYgKG5ldyB3aXRoIFVuaWNvZGUgMy4xLCAzMiBjb2Rl
IHBvaW50cykKLSAqIC0gdGhlIGhpZ2hlc3QgVW5pY29kZSBjb2RlIHBvaW50IHZhbHVlIGlzIFUr
MTBmZmZmCi0gKgotICogVGhpcyBtZWFucyB0aGF0IGFsbCBjb2RlIHBvaW50cyBiZWxvdyBVK2Q4
MDAgYXJlIGNoYXJhY3RlciBjb2RlIHBvaW50cywKLSAqIGFuZCB0aGF0IGJvdW5kYXJ5IGlzIHRl
c3RlZCBmaXJzdCBmb3IgcGVyZm9ybWFuY2UuCi0gKgotICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4g
UmVuYW1lZCB0byBVX0lTX1VOSUNPREVfQ0hBUiwgc2VlIHV0Zl9vbGQuaC4KLSAqLwotI2RlZmlu
ZSBVVEZfSVNfVU5JQ09ERV9DSEFSKGMpIFwKLSAgICAoKHVpbnQzMl90KShjKTwweGQ4MDAgfHwg
XAotICAgICAgICAoKHVpbnQzMl90KShjKT4weGRmZmYgJiYgXAotICAgICAgICAgKHVpbnQzMl90
KShjKTw9MHgxMGZmZmYgJiYgXAotICAgICAgICAgIVVURl9JU19VTklDT0RFX05PTkNIQVIoYykp
KQotCi0vKiBGb3JtZXJseSB1dGY4LmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKioKLSAqIENvdW50IHRoZSB0cmFpbCBi
eXRlcyBmb3IgYSBVVEYtOCBsZWFkIGJ5dGUuCi0gKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5h
bWVkIHRvIFU4X0NPVU5UX1RSQUlMX0JZVEVTLCBzZWUgdXRmX29sZC5oLgotICovCi0jZGVmaW5l
IFVURjhfQ09VTlRfVFJBSUxfQllURVMobGVhZEJ5dGUpICh1dGY4X2NvdW50VHJhaWxCeXRlc1so
dWludDhfdClsZWFkQnl0ZV0pCi0KLS8qKgotICogTWFzayBhIFVURi04IGxlYWQgYnl0ZSwgbGVh
dmUgb25seSB0aGUgbG93ZXIgYml0cyB0aGF0IGZvcm0gcGFydCBvZiB0aGUgY29kZSBwb2ludCB2
YWx1ZS4KLSAqIEBkZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQgdG8gVThfTUFTS19MRUFEX0JZ
VEUsIHNlZSB1dGZfb2xkLmguCi0gKi8KLSNkZWZpbmUgVVRGOF9NQVNLX0xFQURfQllURShsZWFk
Qnl0ZSwgY291bnRUcmFpbEJ5dGVzKSAoKGxlYWRCeXRlKSY9KDE8PCg2LShjb3VudFRyYWlsQnl0
ZXMpKSktMSkKLQotLyoqIElzIHRoaXMgdGhpcyBjb2RlIHBvaW50IGEgc2luZ2xlIGNvZGUgdW5p
dCAoYnl0ZSk/IEBkZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQgdG8gVThfSVNfU0lOR0xFLCBz
ZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEY4X0lTX1NJTkdMRSh1Y2hhcikgKCgodWNoYXIp
JjB4ODApPT0wKQotLyoqIElzIHRoaXMgdGhpcyBjb2RlIHVuaXQgdGhlIGxlYWQgY29kZSB1bml0
IChieXRlKSBvZiBhIGNvZGUgcG9pbnQ/IEBkZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQgdG8g
VThfSVNfTEVBRCwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGOF9JU19MRUFEKHVjaGFy
KSAoKHVpbnQ4X3QpKCh1Y2hhciktMHhjMCk8MHgzZSkKLS8qKiBJcyB0aGlzIHRoaXMgY29kZSB1
bml0IGEgdHJhaWxpbmcgY29kZSB1bml0IChieXRlKSBvZiBhIGNvZGUgcG9pbnQ/IEBkZXByZWNh
dGVkIElDVSAyLjQuIFJlbmFtZWQgdG8gVThfSVNfVFJBSUwsIHNlZSB1dGZfb2xkLmguICovCi0j
ZGVmaW5lIFVURjhfSVNfVFJBSUwodWNoYXIpICgoKHVjaGFyKSYweGMwKT09MHg4MCkKLQotLyoq
IERvZXMgdGhpcyBzY2FsYXIgVW5pY29kZSB2YWx1ZSBuZWVkIG11bHRpcGxlIGNvZGUgdW5pdHMg
Zm9yIHN0b3JhZ2U/IEBkZXByZWNhdGVkIElDVSAyLjQuIFVzZSBVOF9MRU5HVEggb3IgdGVzdCAo
KHVpbnQzMl90KShjKT4weDdmKSBpbnN0ZWFkLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBV
VEY4X05FRURfTVVMVElQTEVfVUNIQVIoYykgKCh1aW50MzJfdCkoYyk+MHg3ZikKLQotLyoqCi0g
KiBHaXZlbiB0aGUgbGVhZCBjaGFyYWN0ZXIsIGhvdyBtYW55IGJ5dGVzIGFyZSB0YWtlbiBieSB0
aGlzIGNvZGUgcG9pbnQuCi0gKiBJQ1UgZG9lcyBub3QgZGVhbCB3aXRoIGNvZGUgcG9pbnRzID4w
eDEwZmZmZgotICogdW5sZXNzIG5lY2Vzc2FyeSBmb3IgYWR2YW5jaW5nIGluIHRoZSBieXRlIHN0
cmVhbS4KLSAqCi0gKiBUaGVzZSBsZW5ndGggbWFjcm9zIHRha2UgaW50byBhY2NvdW50IHRoYXQg
Zm9yIHZhbHVlcyA+MHgxMGZmZmYKLSAqIHRoZSBVVEY4X0FQUEVORF9DSEFSX1NBRkUgbWFjcm9z
IHdvdWxkIHdyaXRlIHRoZSBlcnJvciBjb2RlIHBvaW50IDB4ZmZmZgotICogd2l0aCAzIGJ5dGVz
LgotICogQ29kZSBwb2ludCBjb21wYXJpc29ucyBuZWVkIHRvIGJlIGluIHVpbnQzMl90IGJlY2F1
c2UgVUNoYXIzMgotICogbWF5IGJlIGEgc2lnbmVkIHR5cGUsIGFuZCBuZWdhdGl2ZSB2YWx1ZXMg
bXVzdCBiZSByZWNvZ25pemVkLgotICoKLSAqIEBkZXByZWNhdGVkIElDVSAyLjQuIFVzZSBVOF9M
RU5HVEggaW5zdGVhZCwgc2VlIHV0Zi5oLgotICovCi0jaWYgMQotIyAgIGRlZmluZSBVVEY4X0NI
QVJfTEVOR1RIKGMpIFwKLSAgICAgICAgKCh1aW50MzJfdCkoYyk8PTB4N2YgPyAxIDogXAotICAg
ICAgICAgICAgKCh1aW50MzJfdCkoYyk8PTB4N2ZmID8gMiA6IFwKLSAgICAgICAgICAgICAgICAo
KHVpbnQzMl90KSgoYyktMHgxMDAwMCk+MHhmZmZmZiA/IDMgOiA0KSBcCi0gICAgICAgICAgICAp
IFwKLSAgICAgICAgKQotI2Vsc2UKLSMgICBkZWZpbmUgVVRGOF9DSEFSX0xFTkdUSChjKSBcCi0g
ICAgICAgICgodWludDMyX3QpKGMpPD0weDdmID8gMSA6IFwKLSAgICAgICAgICAgICgodWludDMy
X3QpKGMpPD0weDdmZiA/IDIgOiBcCi0gICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoYyk8PTB4
ZmZmZiA/IDMgOiBcCi0gICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpKGMpPD0weDEwZmZm
ZiA/IDQgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KShjKTw9MHgzZmZm
ZmZmID8gNSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KShjKTw9
MHg3ZmZmZmZmZiA/IDYgOiAzKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICApIFwKLSAgICAg
ICAgICAgICAgICAgICAgKSBcCi0gICAgICAgICAgICAgICAgKSBcCi0gICAgICAgICAgICApIFwK
LSAgICAgICAgKQotI2VuZGlmCi0KLS8qKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgcGVy
IGNvZGUgcG9pbnQuIEBkZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQgdG8gVThfTUFYX0xFTkdU
SCwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGOF9NQVhfQ0hBUl9MRU5HVEggNAotCi0v
KiogQXZlcmFnZSBudW1iZXIgb2YgY29kZSB1bml0cyBjb21wYXJlZCB0byBVVEYtMTYuIEBkZXBy
ZWNhdGVkIElDVSAyLjQuIE9ic29sZXRlLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEY4
X0FSUkFZX1NJWkUoc2l6ZSkgKCg1KihzaXplKSkvMikKLQotLyoqIEBkZXByZWNhdGVkIElDVSAy
LjQuIFJlbmFtZWQgdG8gVThfR0VUX1VOU0FGRSwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUg
VVRGOF9HRVRfQ0hBUl9VTlNBRkUocywgaSwgYykgeyBcCi0gICAgaW50MzJfdCBfdXRmOF9nZXRf
Y2hhcl91bnNhZmVfaW5kZXg9KGludDMyX3QpKGkpOyBcCi0gICAgVVRGOF9TRVRfQ0hBUl9TVEFS
VF9VTlNBRkUocywgX3V0ZjhfZ2V0X2NoYXJfdW5zYWZlX2luZGV4KTsgXAotICAgIFVURjhfTkVY
VF9DSEFSX1VOU0FGRShzLCBfdXRmOF9nZXRfY2hhcl91bnNhZmVfaW5kZXgsIGMpOyBcCi19Ci0K
LS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBVc2UgVThfR0VUIGluc3RlYWQsIHNlZSB1dGZfb2xk
LmguICovCi0jZGVmaW5lIFVURjhfR0VUX0NIQVJfU0FGRShzLCBzdGFydCwgaSwgbGVuZ3RoLCBj
LCBzdHJpY3QpIHsgXAotICAgIGludDMyX3QgX3V0ZjhfZ2V0X2NoYXJfc2FmZV9pbmRleD0oaW50
MzJfdCkoaSk7IFwKLSAgICBVVEY4X1NFVF9DSEFSX1NUQVJUX1NBRkUocywgc3RhcnQsIF91dGY4
X2dldF9jaGFyX3NhZmVfaW5kZXgpOyBcCi0gICAgVVRGOF9ORVhUX0NIQVJfU0FGRShzLCBfdXRm
OF9nZXRfY2hhcl9zYWZlX2luZGV4LCBsZW5ndGgsIGMsIHN0cmljdCk7IFwKLX0KLQotLyoqIEBk
ZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQgdG8gVThfTkVYVF9VTlNBRkUsIHNlZSB1dGZfb2xk
LmguICovCi0jZGVmaW5lIFVURjhfTkVYVF9DSEFSX1VOU0FGRShzLCBpLCBjKSB7IFwKLSAgICAo
Yyk9KHMpWyhpKSsrXTsgXAotICAgIGlmKCh1aW50OF90KSgoYyktMHhjMCk8MHgzNSkgeyBcCi0g
ICAgICAgIHVpbnQ4X3QgX19jb3VudD1VVEY4X0NPVU5UX1RSQUlMX0JZVEVTKGMpOyBcCi0gICAg
ICAgIFVURjhfTUFTS19MRUFEX0JZVEUoYywgX19jb3VudCk7IFwKLSAgICAgICAgc3dpdGNoKF9f
Y291bnQpIHsgXAotICAgICAgICAvKiBlYWNoIGZvbGxvd2luZyBicmFuY2ggZmFsbHMgdGhyb3Vn
aCB0byB0aGUgbmV4dCBvbmUgKi8gXAotICAgICAgICBjYXNlIDM6IFwKLSAgICAgICAgICAgIChj
KT0oKGMpPDw2KXwoKHMpWyhpKSsrXSYweDNmKTsgXAotICAgICAgICBjYXNlIDI6IFwKLSAgICAg
ICAgICAgIChjKT0oKGMpPDw2KXwoKHMpWyhpKSsrXSYweDNmKTsgXAotICAgICAgICBjYXNlIDE6
IFwKLSAgICAgICAgICAgIChjKT0oKGMpPDw2KXwoKHMpWyhpKSsrXSYweDNmKTsgXAotICAgICAg
ICAvKiBubyBvdGhlciBicmFuY2hlcyB0byBvcHRpbWl6ZSBzd2l0Y2goKSAqLyBcCi0gICAgICAg
ICAgICBicmVhazsgXAotICAgICAgICB9IFwKLSAgICB9IFwKLX0KLQotLyoqIEBkZXByZWNhdGVk
IElDVSAyLjQuIFJlbmFtZWQgdG8gVThfQVBQRU5EX1VOU0FGRSwgc2VlIHV0Zl9vbGQuaC4gKi8K
LSNkZWZpbmUgVVRGOF9BUFBFTkRfQ0hBUl9VTlNBRkUocywgaSwgYykgeyBcCi0gICAgaWYoKHVp
bnQzMl90KShjKTw9MHg3ZikgeyBcCi0gICAgICAgIChzKVsoaSkrK109KHVpbnQ4X3QpKGMpOyBc
Ci0gICAgfSBlbHNlIHsgXAotICAgICAgICBpZigodWludDMyX3QpKGMpPD0weDdmZikgeyBcCi0g
ICAgICAgICAgICAocylbKGkpKytdPSh1aW50OF90KSgoKGMpPj42KXwweGMwKTsgXAotICAgICAg
ICB9IGVsc2UgeyBcCi0gICAgICAgICAgICBpZigodWludDMyX3QpKGMpPD0weGZmZmYpIHsgXAot
ICAgICAgICAgICAgICAgIChzKVsoaSkrK109KHVpbnQ4X3QpKCgoYyk+PjEyKXwweGUwKTsgXAot
ICAgICAgICAgICAgfSBlbHNlIHsgXAotICAgICAgICAgICAgICAgIChzKVsoaSkrK109KHVpbnQ4
X3QpKCgoYyk+PjE4KXwweGYwKTsgXAotICAgICAgICAgICAgICAgIChzKVsoaSkrK109KHVpbnQ4
X3QpKCgoKGMpPj4xMikmMHgzZil8MHg4MCk7IFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICAg
ICAgKHMpWyhpKSsrXT0odWludDhfdCkoKCgoYyk+PjYpJjB4M2YpfDB4ODApOyBcCi0gICAgICAg
IH0gXAotICAgICAgICAocylbKGkpKytdPSh1aW50OF90KSgoKGMpJjB4M2YpfDB4ODApOyBcCi0g
ICAgfSBcCi19Ci0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFU4X0ZXRF8x
X1VOU0FGRSwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGOF9GV0RfMV9VTlNBRkUocywg
aSkgeyBcCi0gICAgKGkpKz0xK1VURjhfQ09VTlRfVFJBSUxfQllURVMoKHMpW2ldKTsgXAotfQot
Ci0vKiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBVOF9GV0RfTl9VTlNBRkUsIHNl
ZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjhfRldEX05fVU5TQUZFKHMsIGksIG4pIHsgXAot
ICAgIGludDMyX3QgX19OPShuKTsgXAotICAgIHdoaWxlKF9fTj4wKSB7IFwKLSAgICAgICAgVVRG
OF9GV0RfMV9VTlNBRkUocywgaSk7IFwKLSAgICAgICAgLS1fX047IFwKLSAgICB9IFwKLX0KLQot
LyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQgdG8gVThfU0VUX0NQX1NUQVJUX1VOU0FG
RSwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGOF9TRVRfQ0hBUl9TVEFSVF9VTlNBRkUo
cywgaSkgeyBcCi0gICAgd2hpbGUoVVRGOF9JU19UUkFJTCgocylbaV0pKSB7IC0tKGkpOyB9IFwK
LX0KLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIFVzZSBVOF9ORVhUIGluc3RlYWQsIHNlZSB1
dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjhfTkVYVF9DSEFSX1NBRkUocywgaSwgbGVuZ3RoLCBj
LCBzdHJpY3QpIHsgXAotICAgIChjKT0ocylbKGkpKytdOyBcCi0gICAgaWYoKGMpPj0weDgwKSB7
IFwKLSAgICAgICAgaWYoVVRGOF9JU19MRUFEKGMpKSB7IFwKLSAgICAgICAgICAgIChjKT11dGY4
X25leHRDaGFyU2FmZUJvZHkocywgJihpKSwgKGludDMyX3QpKGxlbmd0aCksIGMsIHN0cmljdCk7
IFwKLSAgICAgICAgfSBlbHNlIHsgXAotICAgICAgICAgICAgKGMpPVVURjhfRVJST1JfVkFMVUVf
MTsgXAotICAgICAgICB9IFwKLSAgICB9IFwKLX0KLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQu
IFVzZSBVOF9BUFBFTkQgaW5zdGVhZCwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGOF9B
UFBFTkRfQ0hBUl9TQUZFKHMsIGksIGxlbmd0aCwgYykgIHsgXAotICAgIGlmKCh1aW50MzJfdCko
Yyk8PTB4N2YpIHsgXAotICAgICAgICAocylbKGkpKytdPSh1aW50OF90KShjKTsgXAotICAgIH0g
ZWxzZSB7IFwKLSAgICAgICAgKGkpPXV0ZjhfYXBwZW5kQ2hhclNhZmVCb2R5KHMsIChpbnQzMl90
KShpKSwgKGludDMyX3QpKGxlbmd0aCksIGMsIE5VTEwpOyBcCi0gICAgfSBcCi19Ci0KLS8qKiBA
ZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFU4X0ZXRF8xLCBzZWUgdXRmX29sZC5oLiAq
LwotI2RlZmluZSBVVEY4X0ZXRF8xX1NBRkUocywgaSwgbGVuZ3RoKSBVOF9GV0RfMShzLCBpLCBs
ZW5ndGgpCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFU4X0ZXRF9OLCBz
ZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEY4X0ZXRF9OX1NBRkUocywgaSwgbGVuZ3RoLCBu
KSBVOF9GV0RfTihzLCBpLCBsZW5ndGgsIG4pCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBS
ZW5hbWVkIHRvIFU4X1NFVF9DUF9TVEFSVCwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRG
OF9TRVRfQ0hBUl9TVEFSVF9TQUZFKHMsIHN0YXJ0LCBpKSBVOF9TRVRfQ1BfU1RBUlQocywgc3Rh
cnQsIGkpCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFU4X1BSRVZfVU5T
QUZFLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEY4X1BSRVZfQ0hBUl9VTlNBRkUocywg
aSwgYykgeyBcCi0gICAgKGMpPShzKVstLShpKV07IFwKLSAgICBpZihVVEY4X0lTX1RSQUlMKGMp
KSB7IFwKLSAgICAgICAgdWludDhfdCBfX2IsIF9fY291bnQ9MSwgX19zaGlmdD02OyBcCi1cCi0g
ICAgICAgIC8qIGMgaXMgYSB0cmFpbCBieXRlICovIFwKLSAgICAgICAgKGMpJj0weDNmOyBcCi0g
ICAgICAgIGZvcig7OykgeyBcCi0gICAgICAgICAgICBfX2I9KHMpWy0tKGkpXTsgXAotICAgICAg
ICAgICAgaWYoX19iPj0weGMwKSB7IFwKLSAgICAgICAgICAgICAgICBVVEY4X01BU0tfTEVBRF9C
WVRFKF9fYiwgX19jb3VudCk7IFwKLSAgICAgICAgICAgICAgICAoYyl8PShVQ2hhcjMyKV9fYjw8
X19zaGlmdDsgXAotICAgICAgICAgICAgICAgIGJyZWFrOyBcCi0gICAgICAgICAgICB9IGVsc2Ug
eyBcCi0gICAgICAgICAgICAgICAgKGMpfD0oVUNoYXIzMikoX19iJjB4M2YpPDxfX3NoaWZ0OyBc
Ci0gICAgICAgICAgICAgICAgKytfX2NvdW50OyBcCi0gICAgICAgICAgICAgICAgX19zaGlmdCs9
NjsgXAotICAgICAgICAgICAgfSBcCi0gICAgICAgIH0gXAotICAgIH0gXAotfQotCi0vKiogQGRl
cHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBVOF9CQUNLXzFfVU5TQUZFLCBzZWUgdXRmX29s
ZC5oLiAqLwotI2RlZmluZSBVVEY4X0JBQ0tfMV9VTlNBRkUocywgaSkgeyBcCi0gICAgd2hpbGUo
VVRGOF9JU19UUkFJTCgocylbLS0oaSldKSkge30gXAotfQotCi0vKiogQGRlcHJlY2F0ZWQgSUNV
IDIuNC4gUmVuYW1lZCB0byBVOF9CQUNLX05fVU5TQUZFLCBzZWUgdXRmX29sZC5oLiAqLwotI2Rl
ZmluZSBVVEY4X0JBQ0tfTl9VTlNBRkUocywgaSwgbikgeyBcCi0gICAgaW50MzJfdCBfX049KG4p
OyBcCi0gICAgd2hpbGUoX19OPjApIHsgXAotICAgICAgICBVVEY4X0JBQ0tfMV9VTlNBRkUocywg
aSk7IFwKLSAgICAgICAgLS1fX047IFwKLSAgICB9IFwKLX0KLQotLyoqIEBkZXByZWNhdGVkIElD
VSAyLjQuIFJlbmFtZWQgdG8gVThfU0VUX0NQX0xJTUlUX1VOU0FGRSwgc2VlIHV0Zl9vbGQuaC4g
Ki8KLSNkZWZpbmUgVVRGOF9TRVRfQ0hBUl9MSU1JVF9VTlNBRkUocywgaSkgeyBcCi0gICAgVVRG
OF9CQUNLXzFfVU5TQUZFKHMsIGkpOyBcCi0gICAgVVRGOF9GV0RfMV9VTlNBRkUocywgaSk7IFwK
LX0KLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIFVzZSBVOF9QUkVWIGluc3RlYWQsIHNlZSB1
dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjhfUFJFVl9DSEFSX1NBRkUocywgc3RhcnQsIGksIGMs
IHN0cmljdCkgeyBcCi0gICAgKGMpPShzKVstLShpKV07IFwKLSAgICBpZigoYyk+PTB4ODApIHsg
XAotICAgICAgICBpZigoYyk8PTB4YmYpIHsgXAotICAgICAgICAgICAgKGMpPXV0ZjhfcHJldkNo
YXJTYWZlQm9keShzLCBzdGFydCwgJihpKSwgYywgc3RyaWN0KTsgXAotICAgICAgICB9IGVsc2Ug
eyBcCi0gICAgICAgICAgICAoYyk9VVRGOF9FUlJPUl9WQUxVRV8xOyBcCi0gICAgICAgIH0gXAot
ICAgIH0gXAotfQotCi0vKiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBVOF9CQUNL
XzEsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjhfQkFDS18xX1NBRkUocywgc3RhcnQs
IGkpIFU4X0JBQ0tfMShzLCBzdGFydCwgaSkKLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIFJl
bmFtZWQgdG8gVThfQkFDS19OLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEY4X0JBQ0tf
Tl9TQUZFKHMsIHN0YXJ0LCBpLCBuKSBVOF9CQUNLX04ocywgc3RhcnQsIGksIG4pCi0KLS8qKiBA
ZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFU4X1NFVF9DUF9MSU1JVCwgc2VlIHV0Zl9v
bGQuaC4gKi8KLSNkZWZpbmUgVVRGOF9TRVRfQ0hBUl9MSU1JVF9TQUZFKHMsIHN0YXJ0LCBpLCBs
ZW5ndGgpIFU4X1NFVF9DUF9MSU1JVChzLCBzdGFydCwgaSwgbGVuZ3RoKQotCi0vKiBGb3JtZXJs
eSB1dGYxNi5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLwotCi0vKiogSXMgdWNoYXIgYSBmaXJzdC9sZWFkIHN1cnJvZ2F0ZT8gQGRl
cHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBVX0lTX0xFQUQgYW5kIFUxNl9JU19MRUFELCBz
ZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEZfSVNfRklSU1RfU1VSUk9HQVRFKHVjaGFyKSAo
KCh1Y2hhcikmMHhmZmZmZmMwMCk9PTB4ZDgwMCkKLQotLyoqIElzIHVjaGFyIGEgc2Vjb25kL3Ry
YWlsIHN1cnJvZ2F0ZT8gQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBVX0lTX1RSQUlM
IGFuZCBVMTZfSVNfVFJBSUwsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURl9JU19TRUNP
TkRfU1VSUk9HQVRFKHVjaGFyKSAoKCh1Y2hhcikmMHhmZmZmZmMwMCk9PTB4ZGMwMCkKLQotLyoq
IEFzc3VtaW5nIGMgaXMgYSBzdXJyb2dhdGUsIGlzIGl0IGEgZmlyc3QvbGVhZCBzdXJyb2dhdGU/
IEBkZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQgdG8gVV9JU19TVVJST0dBVEVfTEVBRCBhbmQg
VTE2X0lTX1NVUlJPR0FURV9MRUFELCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEZfSVNf
U1VSUk9HQVRFX0ZJUlNUKGMpICgoKGMpJjB4NDAwKT09MCkKLQotLyoqIEhlbHBlciBjb25zdGFu
dCBmb3IgVVRGMTZfR0VUX1BBSVJfVkFMVUUuIEBkZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQg
dG8gVTE2X1NVUlJPR0FURV9PRkZTRVQsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURl9T
VVJST0dBVEVfT0ZGU0VUICgoMHhkODAwPDwxMFVMKSsweGRjMDAtMHgxMDAwMCkKLQotLyoqIEdl
dCB0aGUgVVRGLTMyIHZhbHVlIGZyb20gdGhlIHN1cnJvZ2F0ZSBjb2RlIHVuaXRzLiBAZGVwcmVj
YXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9HRVRfU1VQUExFTUVOVEFSWSwgc2VlIHV0Zl9v
bGQuaC4gKi8KLSNkZWZpbmUgVVRGMTZfR0VUX1BBSVJfVkFMVUUoZmlyc3QsIHNlY29uZCkgXAot
ICAgICgoKGZpcnN0KTw8MTBVTCkrKHNlY29uZCktVVRGX1NVUlJPR0FURV9PRkZTRVQpCi0KLS8q
KiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9MRUFELCBzZWUgdXRmX29sZC5o
LiAqLwotI2RlZmluZSBVVEZfRklSU1RfU1VSUk9HQVRFKHN1cHBsZW1lbnRhcnkpIChVQ2hhciko
KChzdXBwbGVtZW50YXJ5KT4+MTApKzB4ZDdjMCkKLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQu
IFJlbmFtZWQgdG8gVTE2X1RSQUlMLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEZfU0VD
T05EX1NVUlJPR0FURShzdXBwbGVtZW50YXJ5KSAoVUNoYXIpKCgoc3VwcGxlbWVudGFyeSkmMHgz
ZmYpfDB4ZGMwMCkKLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQgdG8gVTE2X0xF
QUQsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjE2X0xFQUQoc3VwcGxlbWVudGFyeSkg
VVRGX0ZJUlNUX1NVUlJPR0FURShzdXBwbGVtZW50YXJ5KQotCi0vKiogQGRlcHJlY2F0ZWQgSUNV
IDIuNC4gUmVuYW1lZCB0byBVMTZfVFJBSUwsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVU
RjE2X1RSQUlMKHN1cHBsZW1lbnRhcnkpIFVURl9TRUNPTkRfU1VSUk9HQVRFKHN1cHBsZW1lbnRh
cnkpCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9JU19TSU5HTEUs
IHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjE2X0lTX1NJTkdMRSh1Y2hhcikgIVVURl9J
U19TVVJST0dBVEUodWNoYXIpCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRv
IFUxNl9JU19MRUFELCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEYxNl9JU19MRUFEKHVj
aGFyKSBVVEZfSVNfRklSU1RfU1VSUk9HQVRFKHVjaGFyKQotCi0vKiogQGRlcHJlY2F0ZWQgSUNV
IDIuNC4gUmVuYW1lZCB0byBVMTZfSVNfVFJBSUwsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5l
IFVURjE2X0lTX1RSQUlMKHVjaGFyKSBVVEZfSVNfU0VDT05EX1NVUlJPR0FURSh1Y2hhcikKLQot
LyoqIERvZXMgdGhpcyBzY2FsYXIgVW5pY29kZSB2YWx1ZSBuZWVkIG11bHRpcGxlIGNvZGUgdW5p
dHMgZm9yIHN0b3JhZ2U/IEBkZXByZWNhdGVkIElDVSAyLjQuIFVzZSBVMTZfTEVOR1RIIG9yIHRl
c3QgKCh1aW50MzJfdCkoYyk+MHhmZmZmKSBpbnN0ZWFkLCBzZWUgdXRmX29sZC5oLiAqLwotI2Rl
ZmluZSBVVEYxNl9ORUVEX01VTFRJUExFX1VDSEFSKGMpICgodWludDMyX3QpKGMpPjB4ZmZmZikK
LQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQgdG8gVTE2X0xFTkdUSCwgc2VlIHV0
Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGMTZfQ0hBUl9MRU5HVEgoYykgKCh1aW50MzJfdCkoYyk8
PTB4ZmZmZiA/IDEgOiAyKQotCi0vKiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBV
MTZfTUFYX0xFTkdUSCwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGMTZfTUFYX0NIQVJf
TEVOR1RIIDIKLQotLyoqIEF2ZXJhZ2UgbnVtYmVyIG9mIGNvZGUgdW5pdHMgY29tcGFyZWQgdG8g
VVRGLTE2LiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBPYnNvbGV0ZSwgc2VlIHV0Zl9vbGQuaC4gKi8K
LSNkZWZpbmUgVVRGMTZfQVJSQVlfU0laRShzaXplKSAoc2l6ZSkKLQotLyoqCi0gKiBHZXQgYSBz
aW5nbGUgY29kZSBwb2ludCBmcm9tIGFuIG9mZnNldCB0aGF0IHBvaW50cyB0byBhbnkKLSAqIG9m
IHRoZSBjb2RlIHVuaXRzIHRoYXQgYmVsb25nIHRvIHRoYXQgY29kZSBwb2ludC4KLSAqIEFzc3Vt
ZSAwPD1pPGxlbmd0aC4KLSAqCi0gKiBUaGlzIGNvdWxkIGJlIHVzZWQgZm9yIGl0ZXJhdGlvbiB0
b2dldGhlciB3aXRoCi0gKiBVVEYxNl9DSEFSX0xFTkdUSCgpIGFuZCBVVEZfSVNfRVJST1IoKSwK
LSAqIGJ1dCB0aGUgdXNlIG9mIFVURjE2X05FWFRfQ0hBUltfVU5TQUZFXSgpIGFuZAotICogVVRG
MTZfUFJFVl9DSEFSW19VTlNBRkVdKCkgaXMgbW9yZSBlZmZpY2llbnQgZm9yIHRoYXQuCi0gKiBA
ZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9HRVRfVU5TQUZFLCBzZWUgdXRmX29s
ZC5oLgotICovCi0jZGVmaW5lIFVURjE2X0dFVF9DSEFSX1VOU0FGRShzLCBpLCBjKSB7IFwKLSAg
ICAoYyk9KHMpW2ldOyBcCi0gICAgaWYoVVRGX0lTX1NVUlJPR0FURShjKSkgeyBcCi0gICAgICAg
IGlmKFVURl9JU19TVVJST0dBVEVfRklSU1QoYykpIHsgXAotICAgICAgICAgICAgKGMpPVVURjE2
X0dFVF9QQUlSX1ZBTFVFKChjKSwgKHMpWyhpKSsxXSk7IFwKLSAgICAgICAgfSBlbHNlIHsgXAot
ICAgICAgICAgICAgKGMpPVVURjE2X0dFVF9QQUlSX1ZBTFVFKChzKVsoaSktMV0sIChjKSk7IFwK
LSAgICAgICAgfSBcCi0gICAgfSBcCi19Ci0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBVc2Ug
VTE2X0dFVCBpbnN0ZWFkLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEYxNl9HRVRfQ0hB
Ul9TQUZFKHMsIHN0YXJ0LCBpLCBsZW5ndGgsIGMsIHN0cmljdCkgeyBcCi0gICAgKGMpPShzKVtp
XTsgXAotICAgIGlmKFVURl9JU19TVVJST0dBVEUoYykpIHsgXAotICAgICAgICB1aW50MTZfdCBf
X2MyOyBcCi0gICAgICAgIGlmKFVURl9JU19TVVJST0dBVEVfRklSU1QoYykpIHsgXAotICAgICAg
ICAgICAgaWYoKGkpKzE8KGxlbmd0aCkgJiYgVVRGX0lTX1NFQ09ORF9TVVJST0dBVEUoX19jMj0o
cylbKGkpKzFdKSkgeyBcCi0gICAgICAgICAgICAgICAgKGMpPVVURjE2X0dFVF9QQUlSX1ZBTFVF
KChjKSwgX19jMik7IFwKLSAgICAgICAgICAgICAgICAvKiBzdHJpY3Q6ICgoYykmMHhmZmZlKT09
MHhmZmZlIGlzIGNhdWdodCBieSBVVEZfSVNfRVJST1IoKSBhbmQgVVRGX0lTX1VOSUNPREVfQ0hB
UigpICovIFwKLSAgICAgICAgICAgIH0gZWxzZSBpZihzdHJpY3QpIHtcCi0gICAgICAgICAgICAg
ICAgLyogdW5tYXRjaGVkIGZpcnN0IHN1cnJvZ2F0ZSAqLyBcCi0gICAgICAgICAgICAgICAgKGMp
PVVURl9FUlJPUl9WQUxVRTsgXAotICAgICAgICAgICAgfSBcCi0gICAgICAgIH0gZWxzZSB7IFwK
LSAgICAgICAgICAgIGlmKChpKS0xPj0oc3RhcnQpICYmIFVURl9JU19GSVJTVF9TVVJST0dBVEUo
X19jMj0ocylbKGkpLTFdKSkgeyBcCi0gICAgICAgICAgICAgICAgKGMpPVVURjE2X0dFVF9QQUlS
X1ZBTFVFKF9fYzIsIChjKSk7IFwKLSAgICAgICAgICAgICAgICAvKiBzdHJpY3Q6ICgoYykmMHhm
ZmZlKT09MHhmZmZlIGlzIGNhdWdodCBieSBVVEZfSVNfRVJST1IoKSBhbmQgVVRGX0lTX1VOSUNP
REVfQ0hBUigpICovIFwKLSAgICAgICAgICAgIH0gZWxzZSBpZihzdHJpY3QpIHtcCi0gICAgICAg
ICAgICAgICAgLyogdW5tYXRjaGVkIHNlY29uZCBzdXJyb2dhdGUgKi8gXAotICAgICAgICAgICAg
ICAgIChjKT1VVEZfRVJST1JfVkFMVUU7IFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICB9IFwK
LSAgICB9IGVsc2UgaWYoKHN0cmljdCkgJiYgIVVURl9JU19VTklDT0RFX0NIQVIoYykpIHsgXAot
ICAgICAgICAoYyk9VVRGX0VSUk9SX1ZBTFVFOyBcCi0gICAgfSBcCi19Ci0KLS8qKiBAZGVwcmVj
YXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9ORVhUX1VOU0FGRSwgc2VlIHV0Zl9vbGQuaC4g
Ki8KLSNkZWZpbmUgVVRGMTZfTkVYVF9DSEFSX1VOU0FGRShzLCBpLCBjKSB7IFwKLSAgICAoYyk9
KHMpWyhpKSsrXTsgXAotICAgIGlmKFVURl9JU19GSVJTVF9TVVJST0dBVEUoYykpIHsgXAotICAg
ICAgICAoYyk9VVRGMTZfR0VUX1BBSVJfVkFMVUUoKGMpLCAocylbKGkpKytdKTsgXAotICAgIH0g
XAotfQotCi0vKiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBVMTZfQVBQRU5EX1VO
U0FGRSwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGMTZfQVBQRU5EX0NIQVJfVU5TQUZF
KHMsIGksIGMpIHsgXAotICAgIGlmKCh1aW50MzJfdCkoYyk8PTB4ZmZmZikgeyBcCi0gICAgICAg
IChzKVsoaSkrK109KHVpbnQxNl90KShjKTsgXAotICAgIH0gZWxzZSB7IFwKLSAgICAgICAgKHMp
WyhpKSsrXT0odWludDE2X3QpKCgoYyk+PjEwKSsweGQ3YzApOyBcCi0gICAgICAgIChzKVsoaSkr
K109KHVpbnQxNl90KSgoKGMpJjB4M2ZmKXwweGRjMDApOyBcCi0gICAgfSBcCi19Ci0KLS8qKiBA
ZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9GV0RfMV9VTlNBRkUsIHNlZSB1dGZf
b2xkLmguICovCi0jZGVmaW5lIFVURjE2X0ZXRF8xX1VOU0FGRShzLCBpKSB7IFwKLSAgICBpZihV
VEZfSVNfRklSU1RfU1VSUk9HQVRFKChzKVsoaSkrK10pKSB7IFwKLSAgICAgICAgKysoaSk7IFwK
LSAgICB9IFwKLX0KLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQgdG8gVTE2X0ZX
RF9OX1VOU0FGRSwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGMTZfRldEX05fVU5TQUZF
KHMsIGksIG4pIHsgXAotICAgIGludDMyX3QgX19OPShuKTsgXAotICAgIHdoaWxlKF9fTj4wKSB7
IFwKLSAgICAgICAgVVRGMTZfRldEXzFfVU5TQUZFKHMsIGkpOyBcCi0gICAgICAgIC0tX19OOyBc
Ci0gICAgfSBcCi19Ci0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9T
RVRfQ1BfU1RBUlRfVU5TQUZFLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEYxNl9TRVRf
Q0hBUl9TVEFSVF9VTlNBRkUocywgaSkgeyBcCi0gICAgaWYoVVRGX0lTX1NFQ09ORF9TVVJST0dB
VEUoKHMpW2ldKSkgeyBcCi0gICAgICAgIC0tKGkpOyBcCi0gICAgfSBcCi19Ci0KLS8qKiBAZGVw
cmVjYXRlZCBJQ1UgMi40LiBVc2UgVTE2X05FWFQgaW5zdGVhZCwgc2VlIHV0Zl9vbGQuaC4gKi8K
LSNkZWZpbmUgVVRGMTZfTkVYVF9DSEFSX1NBRkUocywgaSwgbGVuZ3RoLCBjLCBzdHJpY3QpIHsg
XAotICAgIChjKT0ocylbKGkpKytdOyBcCi0gICAgaWYoVVRGX0lTX0ZJUlNUX1NVUlJPR0FURShj
KSkgeyBcCi0gICAgICAgIHVpbnQxNl90IF9fYzI7IFwKLSAgICAgICAgaWYoKGkpPChsZW5ndGgp
ICYmIFVURl9JU19TRUNPTkRfU1VSUk9HQVRFKF9fYzI9KHMpWyhpKV0pKSB7IFwKLSAgICAgICAg
ICAgICsrKGkpOyBcCi0gICAgICAgICAgICAoYyk9VVRGMTZfR0VUX1BBSVJfVkFMVUUoKGMpLCBf
X2MyKTsgXAotICAgICAgICAgICAgLyogc3RyaWN0OiAoKGMpJjB4ZmZmZSk9PTB4ZmZmZSBpcyBj
YXVnaHQgYnkgVVRGX0lTX0VSUk9SKCkgYW5kIFVURl9JU19VTklDT0RFX0NIQVIoKSAqLyBcCi0g
ICAgICAgIH0gZWxzZSBpZihzdHJpY3QpIHtcCi0gICAgICAgICAgICAvKiB1bm1hdGNoZWQgZmly
c3Qgc3Vycm9nYXRlICovIFwKLSAgICAgICAgICAgIChjKT1VVEZfRVJST1JfVkFMVUU7IFwKLSAg
ICAgICAgfSBcCi0gICAgfSBlbHNlIGlmKChzdHJpY3QpICYmICFVVEZfSVNfVU5JQ09ERV9DSEFS
KGMpKSB7IFwKLSAgICAgICAgLyogdW5tYXRjaGVkIHNlY29uZCBzdXJyb2dhdGUgb3Igb3RoZXIg
bm9uLWNoYXJhY3RlciAqLyBcCi0gICAgICAgIChjKT1VVEZfRVJST1JfVkFMVUU7IFwKLSAgICB9
IFwKLX0KLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIFVzZSBVMTZfQVBQRU5EIGluc3RlYWQs
IHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjE2X0FQUEVORF9DSEFSX1NBRkUocywgaSwg
bGVuZ3RoLCBjKSB7IFwKLSAgICBpZigodWludDMyX3QpKGMpPD0weGZmZmYpIHsgXAotICAgICAg
ICAocylbKGkpKytdPSh1aW50MTZfdCkoYyk7IFwKLSAgICB9IGVsc2UgaWYoKHVpbnQzMl90KShj
KTw9MHgxMGZmZmYpIHsgXAotICAgICAgICBpZigoaSkrMTwobGVuZ3RoKSkgeyBcCi0gICAgICAg
ICAgICAocylbKGkpKytdPSh1aW50MTZfdCkoKChjKT4+MTApKzB4ZDdjMCk7IFwKLSAgICAgICAg
ICAgIChzKVsoaSkrK109KHVpbnQxNl90KSgoKGMpJjB4M2ZmKXwweGRjMDApOyBcCi0gICAgICAg
IH0gZWxzZSAvKiBub3QgZW5vdWdoIHNwYWNlICovIHsgXAotICAgICAgICAgICAgKHMpWyhpKSsr
XT1VVEZfRVJST1JfVkFMVUU7IFwKLSAgICAgICAgfSBcCi0gICAgfSBlbHNlIC8qIGM+MHgxMGZm
ZmYsIHdyaXRlIGVycm9yIHZhbHVlICovIHsgXAotICAgICAgICAocylbKGkpKytdPVVURl9FUlJP
Ul9WQUxVRTsgXAotICAgIH0gXAotfQotCi0vKiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1l
ZCB0byBVMTZfRldEXzEsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjE2X0ZXRF8xX1NB
RkUocywgaSwgbGVuZ3RoKSBVMTZfRldEXzEocywgaSwgbGVuZ3RoKQotCi0vKiogQGRlcHJlY2F0
ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBVMTZfRldEX04sIHNlZSB1dGZfb2xkLmguICovCi0jZGVm
aW5lIFVURjE2X0ZXRF9OX1NBRkUocywgaSwgbGVuZ3RoLCBuKSBVMTZfRldEX04ocywgaSwgbGVu
Z3RoLCBuKQotCi0vKiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBVMTZfU0VUX0NQ
X1NUQVJULCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEYxNl9TRVRfQ0hBUl9TVEFSVF9T
QUZFKHMsIHN0YXJ0LCBpKSBVMTZfU0VUX0NQX1NUQVJUKHMsIHN0YXJ0LCBpKQotCi0vKiogQGRl
cHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBVMTZfUFJFVl9VTlNBRkUsIHNlZSB1dGZfb2xk
LmguICovCi0jZGVmaW5lIFVURjE2X1BSRVZfQ0hBUl9VTlNBRkUocywgaSwgYykgeyBcCi0gICAg
KGMpPShzKVstLShpKV07IFwKLSAgICBpZihVVEZfSVNfU0VDT05EX1NVUlJPR0FURShjKSkgeyBc
Ci0gICAgICAgIChjKT1VVEYxNl9HRVRfUEFJUl9WQUxVRSgocylbLS0oaSldLCAoYykpOyBcCi0g
ICAgfSBcCi19Ci0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9CQUNL
XzFfVU5TQUZFLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEYxNl9CQUNLXzFfVU5TQUZF
KHMsIGkpIHsgXAotICAgIGlmKFVURl9JU19TRUNPTkRfU1VSUk9HQVRFKChzKVstLShpKV0pKSB7
IFwKLSAgICAgICAgLS0oaSk7IFwKLSAgICB9IFwKLX0KLQotLyoqIEBkZXByZWNhdGVkIElDVSAy
LjQuIFJlbmFtZWQgdG8gVTE2X0JBQ0tfTl9VTlNBRkUsIHNlZSB1dGZfb2xkLmguICovCi0jZGVm
aW5lIFVURjE2X0JBQ0tfTl9VTlNBRkUocywgaSwgbikgeyBcCi0gICAgaW50MzJfdCBfX049KG4p
OyBcCi0gICAgd2hpbGUoX19OPjApIHsgXAotICAgICAgICBVVEYxNl9CQUNLXzFfVU5TQUZFKHMs
IGkpOyBcCi0gICAgICAgIC0tX19OOyBcCi0gICAgfSBcCi19Ci0KLS8qKiBAZGVwcmVjYXRlZCBJ
Q1UgMi40LiBSZW5hbWVkIHRvIFUxNl9TRVRfQ1BfTElNSVRfVU5TQUZFLCBzZWUgdXRmX29sZC5o
LiAqLwotI2RlZmluZSBVVEYxNl9TRVRfQ0hBUl9MSU1JVF9VTlNBRkUocywgaSkgeyBcCi0gICAg
aWYoVVRGX0lTX0ZJUlNUX1NVUlJPR0FURSgocylbKGkpLTFdKSkgeyBcCi0gICAgICAgICsrKGkp
OyBcCi0gICAgfSBcCi19Ci0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBVc2UgVTE2X1BSRVYg
aW5zdGVhZCwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGMTZfUFJFVl9DSEFSX1NBRkUo
cywgc3RhcnQsIGksIGMsIHN0cmljdCkgeyBcCi0gICAgKGMpPShzKVstLShpKV07IFwKLSAgICBp
ZihVVEZfSVNfU0VDT05EX1NVUlJPR0FURShjKSkgeyBcCi0gICAgICAgIHVpbnQxNl90IF9fYzI7
IFwKLSAgICAgICAgaWYoKGkpPihzdGFydCkgJiYgVVRGX0lTX0ZJUlNUX1NVUlJPR0FURShfX2My
PShzKVsoaSktMV0pKSB7IFwKLSAgICAgICAgICAgIC0tKGkpOyBcCi0gICAgICAgICAgICAoYyk9
VVRGMTZfR0VUX1BBSVJfVkFMVUUoX19jMiwgKGMpKTsgXAotICAgICAgICAgICAgLyogc3RyaWN0
OiAoKGMpJjB4ZmZmZSk9PTB4ZmZmZSBpcyBjYXVnaHQgYnkgVVRGX0lTX0VSUk9SKCkgYW5kIFVU
Rl9JU19VTklDT0RFX0NIQVIoKSAqLyBcCi0gICAgICAgIH0gZWxzZSBpZihzdHJpY3QpIHtcCi0g
ICAgICAgICAgICAvKiB1bm1hdGNoZWQgc2Vjb25kIHN1cnJvZ2F0ZSAqLyBcCi0gICAgICAgICAg
ICAoYyk9VVRGX0VSUk9SX1ZBTFVFOyBcCi0gICAgICAgIH0gXAotICAgIH0gZWxzZSBpZigoc3Ry
aWN0KSAmJiAhVVRGX0lTX1VOSUNPREVfQ0hBUihjKSkgeyBcCi0gICAgICAgIC8qIHVubWF0Y2hl
ZCBmaXJzdCBzdXJyb2dhdGUgb3Igb3RoZXIgbm9uLWNoYXJhY3RlciAqLyBcCi0gICAgICAgIChj
KT1VVEZfRVJST1JfVkFMVUU7IFwKLSAgICB9IFwKLX0KLQotLyoqIEBkZXByZWNhdGVkIElDVSAy
LjQuIFJlbmFtZWQgdG8gVTE2X0JBQ0tfMSwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRG
MTZfQkFDS18xX1NBRkUocywgc3RhcnQsIGkpIFUxNl9CQUNLXzEocywgc3RhcnQsIGkpCi0KLS8q
KiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9CQUNLX04sIHNlZSB1dGZfb2xk
LmguICovCi0jZGVmaW5lIFVURjE2X0JBQ0tfTl9TQUZFKHMsIHN0YXJ0LCBpLCBuKSBVMTZfQkFD
S19OKHMsIHN0YXJ0LCBpLCBuKQotCi0vKiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0
byBVMTZfU0VUX0NQX0xJTUlULCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEYxNl9TRVRf
Q0hBUl9MSU1JVF9TQUZFKHMsIHN0YXJ0LCBpLCBsZW5ndGgpIFUxNl9TRVRfQ1BfTElNSVQocywg
c3RhcnQsIGksIGxlbmd0aCkKLQotLyogRm9ybWVybHkgdXRmMzIuaCAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSogT2xk
IGRvY3VtZW50YXRpb246Ci0qCi0qICAgVGhpcyBmaWxlIGRlZmluZXMgbWFjcm9zIHRvIGRlYWwg
d2l0aCBVVEYtMzIgY29kZSB1bml0cyBhbmQgY29kZSBwb2ludHMuCi0qICAgU2lnbmF0dXJlcyBh
bmQgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIHNpbWlsYXJseSBuYW1lZCBtYWNy
b3MKLSogICBpbiB1dGYxNi5oLgotKiAgIHV0ZjMyLmggaXMgaW5jbHVkZWQgYnkgdXRmLmggYWZ0
ZXIgdW5pY29kZS91bWFjaGluZS5oPC9wPgotKiAgIGFuZCBzb21lIGNvbW1vbiBkZWZpbml0aW9u
cy4KLSogICA8cD48Yj5Vc2FnZTo8L2I+ICBJQ1UgY29kaW5nIGd1aWRlbGluZXMgZm9yIGlmKCkg
c3RhdGVtZW50cyBzaG91bGQgYmUgZm9sbG93ZWQgd2hlbiB1c2luZyB0aGVzZSBtYWNyb3MuCi0q
ICAgICAgICAgICAgICAgICAgQ29tcG91bmQgc3RhdGVtZW50cyAoY3VybHkgYnJhY2VzIHt9KSBt
dXN0IGJlIHVzZWQgIGZvciBpZi1lbHNlLXdoaWxlLi4uCi0qICAgICAgICAgICAgICAgICAgYm9k
aWVzIGFuZCBhbGwgbWFjcm8gc3RhdGVtZW50cyBzaG91bGQgYmUgdGVybWluYXRlZCB3aXRoIHNl
bWljb2xvbi48L3A+Ci0qLwotCi0vKiBpbnRlcm5hbCBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiogQGRlcHJl
Y2F0ZWQgSUNVIDIuNC4gT2Jzb2xldGUsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjMy
X0lTX1NBRkUoYywgc3RyaWN0KSBcCi0gICAgKCEoc3RyaWN0KSA/IFwKLSAgICAgICAgKHVpbnQz
Ml90KShjKTw9MHgxMGZmZmYgOiBcCi0gICAgICAgIFVURl9JU19VTklDT0RFX0NIQVIoYykpCi0K
LS8qCi0gKiBGb3IgdGhlIHNlbWFudGljcyBvZiBhbGwgb2YgdGhlc2UgbWFjcm9zLCBzZWUgdXRm
MTYuaC4KLSAqIFRoZSBVVEYtMzIgdmVyc2lvbnMgYXJlIHRyaXZpYWwgYmVjYXVzZSBhbnkgY29k
ZSBwb2ludCBpcwotICogZW5jb2RlZCB1c2luZyBleGFjdGx5IG9uZSBjb2RlIHVuaXQuCi0gKi8K
LQotLyogc2luZ2xlLWNvZGUgcG9pbnQgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogY2xhc3NlcyBvZiBjb2RlIHVuaXQgdmFs
dWVzICovCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBPYnNvbGV0ZSwgc2VlIHV0Zl9vbGQu
aC4gKi8KLSNkZWZpbmUgVVRGMzJfSVNfU0lOR0xFKHVjaGFyKSAxCi0vKiogQGRlcHJlY2F0ZWQg
SUNVIDIuNC4gT2Jzb2xldGUsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjMyX0lTX0xF
QUQodWNoYXIpIDAKLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBPYnNvbGV0ZSwgc2VlIHV0Zl9v
bGQuaC4gKi8KLSNkZWZpbmUgVVRGMzJfSVNfVFJBSUwodWNoYXIpIDAKLQotLyogbnVtYmVyIG9m
IGNvZGUgdW5pdHMgcGVyIGNvZGUgcG9pbnQgKi8KLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQu
IE9ic29sZXRlLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEYzMl9ORUVEX01VTFRJUExF
X1VDSEFSKGMpIDAKLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBPYnNvbGV0ZSwgc2VlIHV0Zl9v
bGQuaC4gKi8KLSNkZWZpbmUgVVRGMzJfQ0hBUl9MRU5HVEgoYykgMQotLyoqIEBkZXByZWNhdGVk
IElDVSAyLjQuIE9ic29sZXRlLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEYzMl9NQVhf
Q0hBUl9MRU5HVEggMQotCi0vKiBhdmVyYWdlIG51bWJlciBvZiBjb2RlIHVuaXRzIGNvbXBhcmVk
IHRvIFVURi0xNiAqLwotCi0vKiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gT2Jzb2xldGUsIHNlZSB1
dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjMyX0FSUkFZX1NJWkUoc2l6ZSkgKHNpemUpCi0KLS8q
KiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBPYnNvbGV0ZSwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZp
bmUgVVRGMzJfR0VUX0NIQVJfVU5TQUZFKHMsIGksIGMpIHsgXAotICAgIChjKT0ocylbaV07IFwK
LX0KLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIE9ic29sZXRlLCBzZWUgdXRmX29sZC5oLiAq
LwotI2RlZmluZSBVVEYzMl9HRVRfQ0hBUl9TQUZFKHMsIHN0YXJ0LCBpLCBsZW5ndGgsIGMsIHN0
cmljdCkgeyBcCi0gICAgKGMpPShzKVtpXTsgXAotICAgIGlmKCFVVEYzMl9JU19TQUZFKGMsIHN0
cmljdCkpIHsgXAotICAgICAgICAoYyk9VVRGX0VSUk9SX1ZBTFVFOyBcCi0gICAgfSBcCi19Ci0K
LS8qIGRlZmluaXRpb25zIHdpdGggZm9yd2FyZCBpdGVyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBPYnNv
bGV0ZSwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGMzJfTkVYVF9DSEFSX1VOU0FGRShz
LCBpLCBjKSB7IFwKLSAgICAoYyk9KHMpWyhpKSsrXTsgXAotfQotCi0vKiogQGRlcHJlY2F0ZWQg
SUNVIDIuNC4gT2Jzb2xldGUsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjMyX0FQUEVO
RF9DSEFSX1VOU0FGRShzLCBpLCBjKSB7IFwKLSAgICAocylbKGkpKytdPShjKTsgXAotfQotCi0v
KiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gT2Jzb2xldGUsIHNlZSB1dGZfb2xkLmguICovCi0jZGVm
aW5lIFVURjMyX0ZXRF8xX1VOU0FGRShzLCBpKSB7IFwKLSAgICArKyhpKTsgXAotfQotCi0vKiog
QGRlcHJlY2F0ZWQgSUNVIDIuNC4gT2Jzb2xldGUsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5l
IFVURjMyX0ZXRF9OX1VOU0FGRShzLCBpLCBuKSB7IFwKLSAgICAoaSkrPShuKTsgXAotfQotCi0v
KiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gT2Jzb2xldGUsIHNlZSB1dGZfb2xkLmguICovCi0jZGVm
aW5lIFVURjMyX1NFVF9DSEFSX1NUQVJUX1VOU0FGRShzLCBpKSB7IFwKLX0KLQotLyoqIEBkZXBy
ZWNhdGVkIElDVSAyLjQuIE9ic29sZXRlLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEYz
Ml9ORVhUX0NIQVJfU0FGRShzLCBpLCBsZW5ndGgsIGMsIHN0cmljdCkgeyBcCi0gICAgKGMpPShz
KVsoaSkrK107IFwKLSAgICBpZighVVRGMzJfSVNfU0FGRShjLCBzdHJpY3QpKSB7IFwKLSAgICAg
ICAgKGMpPVVURl9FUlJPUl9WQUxVRTsgXAotICAgIH0gXAotfQotCi0vKiogQGRlcHJlY2F0ZWQg
SUNVIDIuNC4gT2Jzb2xldGUsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjMyX0FQUEVO
RF9DSEFSX1NBRkUocywgaSwgbGVuZ3RoLCBjKSB7IFwKLSAgICBpZigodWludDMyX3QpKGMpPD0w
eDEwZmZmZikgeyBcCi0gICAgICAgIChzKVsoaSkrK109KGMpOyBcCi0gICAgfSBlbHNlIC8qIGM+
MHgxMGZmZmYsIHdyaXRlIDB4ZmZmZCAqLyB7IFwKLSAgICAgICAgKHMpWyhpKSsrXT0weGZmZmQ7
IFwKLSAgICB9IFwKLX0KLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIE9ic29sZXRlLCBzZWUg
dXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEYzMl9GV0RfMV9TQUZFKHMsIGksIGxlbmd0aCkgeyBc
Ci0gICAgKysoaSk7IFwKLX0KLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIE9ic29sZXRlLCBz
ZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEYzMl9GV0RfTl9TQUZFKHMsIGksIGxlbmd0aCwg
bikgeyBcCi0gICAgaWYoKChpKSs9KG4pKT4obGVuZ3RoKSkgeyBcCi0gICAgICAgIChpKT0obGVu
Z3RoKTsgXAotICAgIH0gXAotfQotCi0vKiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gT2Jzb2xldGUs
IHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjMyX1NFVF9DSEFSX1NUQVJUX1NBRkUocywg
c3RhcnQsIGkpIHsgXAotfQotCi0vKiBkZWZpbml0aW9ucyB3aXRoIGJhY2t3YXJkIGl0ZXJhdGlv
biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiogQGRlcHJl
Y2F0ZWQgSUNVIDIuNC4gT2Jzb2xldGUsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURjMy
X1BSRVZfQ0hBUl9VTlNBRkUocywgaSwgYykgeyBcCi0gICAgKGMpPShzKVstLShpKV07IFwKLX0K
LQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIE9ic29sZXRlLCBzZWUgdXRmX29sZC5oLiAqLwot
I2RlZmluZSBVVEYzMl9CQUNLXzFfVU5TQUZFKHMsIGkpIHsgXAotICAgIC0tKGkpOyBcCi19Ci0K
LS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBPYnNvbGV0ZSwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNk
ZWZpbmUgVVRGMzJfQkFDS19OX1VOU0FGRShzLCBpLCBuKSB7IFwKLSAgICAoaSktPShuKTsgXAot
fQotCi0vKiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gT2Jzb2xldGUsIHNlZSB1dGZfb2xkLmguICov
Ci0jZGVmaW5lIFVURjMyX1NFVF9DSEFSX0xJTUlUX1VOU0FGRShzLCBpKSB7IFwKLX0KLQotLyoq
IEBkZXByZWNhdGVkIElDVSAyLjQuIE9ic29sZXRlLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmlu
ZSBVVEYzMl9QUkVWX0NIQVJfU0FGRShzLCBzdGFydCwgaSwgYywgc3RyaWN0KSB7IFwKLSAgICAo
Yyk9KHMpWy0tKGkpXTsgXAotICAgIGlmKCFVVEYzMl9JU19TQUZFKGMsIHN0cmljdCkpIHsgXAot
ICAgICAgICAoYyk9VVRGX0VSUk9SX1ZBTFVFOyBcCi0gICAgfSBcCi19Ci0KLS8qKiBAZGVwcmVj
YXRlZCBJQ1UgMi40LiBPYnNvbGV0ZSwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGMzJf
QkFDS18xX1NBRkUocywgc3RhcnQsIGkpIHsgXAotICAgIC0tKGkpOyBcCi19Ci0KLS8qKiBAZGVw
cmVjYXRlZCBJQ1UgMi40LiBPYnNvbGV0ZSwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRG
MzJfQkFDS19OX1NBRkUocywgc3RhcnQsIGksIG4pIHsgXAotICAgIChpKS09KG4pOyBcCi0gICAg
aWYoKGkpPChzdGFydCkpIHsgXAotICAgICAgICAoaSk9KHN0YXJ0KTsgXAotICAgIH0gXAotfQot
Ci0vKiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gT2Jzb2xldGUsIHNlZSB1dGZfb2xkLmguICovCi0j
ZGVmaW5lIFVURjMyX1NFVF9DSEFSX0xJTUlUX1NBRkUocywgaSwgbGVuZ3RoKSB7IFwKLX0KLQot
LyogRm9ybWVybHkgdXRmLmgsIHBhcnQgMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoqCi0gKiBFc3RpbWF0ZSB0aGUgbnVtYmVyIG9m
IGNvZGUgdW5pdHMgZm9yIGEgc3RyaW5nIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgVVRGLTE2IGNv
ZGUgdW5pdHMuCi0gKgotICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gT2Jzb2xldGUsIHNlZSB1dGZf
b2xkLmguCi0gKi8KLSNkZWZpbmUgVVRGX0FSUkFZX1NJWkUoc2l6ZSkgVVRGMTZfQVJSQVlfU0la
RShzaXplKQotCi0vKiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBVMTZfR0VUX1VO
U0FGRSwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGX0dFVF9DSEFSX1VOU0FGRShzLCBp
LCBjKSAgICAgICAgICAgICAgICAgVVRGMTZfR0VUX0NIQVJfVU5TQUZFKHMsIGksIGMpCi0KLS8q
KiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBVc2UgVTE2X0dFVCBpbnN0ZWFkLCBzZWUgdXRmX29sZC5o
LiAqLwotI2RlZmluZSBVVEZfR0VUX0NIQVJfU0FGRShzLCBzdGFydCwgaSwgbGVuZ3RoLCBjLCBz
dHJpY3QpIFVURjE2X0dFVF9DSEFSX1NBRkUocywgc3RhcnQsIGksIGxlbmd0aCwgYywgc3RyaWN0
KQotCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9ORVhUX1VOU0FG
RSwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGX05FWFRfQ0hBUl9VTlNBRkUocywgaSwg
YykgICAgICAgICAgICAgICAgVVRGMTZfTkVYVF9DSEFSX1VOU0FGRShzLCBpLCBjKQotCi0vKiog
QGRlcHJlY2F0ZWQgSUNVIDIuNC4gVXNlIFUxNl9ORVhUIGluc3RlYWQsIHNlZSB1dGZfb2xkLmgu
ICovCi0jZGVmaW5lIFVURl9ORVhUX0NIQVJfU0FGRShzLCBpLCBsZW5ndGgsIGMsIHN0cmljdCkg
IFVURjE2X05FWFRfQ0hBUl9TQUZFKHMsIGksIGxlbmd0aCwgYywgc3RyaWN0KQotCi0KLS8qKiBA
ZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9BUFBFTkRfVU5TQUZFLCBzZWUgdXRm
X29sZC5oLiAqLwotI2RlZmluZSBVVEZfQVBQRU5EX0NIQVJfVU5TQUZFKHMsIGksIGMpICAgICAg
ICAgICAgICBVVEYxNl9BUFBFTkRfQ0hBUl9VTlNBRkUocywgaSwgYykKLQotLyoqIEBkZXByZWNh
dGVkIElDVSAyLjQuIFVzZSBVMTZfQVBQRU5EIGluc3RlYWQsIHNlZSB1dGZfb2xkLmguICovCi0j
ZGVmaW5lIFVURl9BUFBFTkRfQ0hBUl9TQUZFKHMsIGksIGxlbmd0aCwgYykgICAgICAgIFVURjE2
X0FQUEVORF9DSEFSX1NBRkUocywgaSwgbGVuZ3RoLCBjKQotCi0KLS8qKiBAZGVwcmVjYXRlZCBJ
Q1UgMi40LiBSZW5hbWVkIHRvIFUxNl9GV0RfMV9VTlNBRkUsIHNlZSB1dGZfb2xkLmguICovCi0j
ZGVmaW5lIFVURl9GV0RfMV9VTlNBRkUocywgaSkgICAgICAgICAgICAgICAgICAgICAgIFVURjE2
X0ZXRF8xX1VOU0FGRShzLCBpKQotCi0vKiogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0
byBVMTZfRldEXzEsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURl9GV0RfMV9TQUZFKHMs
IGksIGxlbmd0aCkgICAgICAgICAgICAgICAgIFVURjE2X0ZXRF8xX1NBRkUocywgaSwgbGVuZ3Ro
KQotCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9GV0RfTl9VTlNB
RkUsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURl9GV0RfTl9VTlNBRkUocywgaSwgbikg
ICAgICAgICAgICAgICAgICAgIFVURjE2X0ZXRF9OX1VOU0FGRShzLCBpLCBuKQotCi0vKiogQGRl
cHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBVMTZfRldEX04sIHNlZSB1dGZfb2xkLmguICov
Ci0jZGVmaW5lIFVURl9GV0RfTl9TQUZFKHMsIGksIGxlbmd0aCwgbikgICAgICAgICAgICAgIFVU
RjE2X0ZXRF9OX1NBRkUocywgaSwgbGVuZ3RoLCBuKQotCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1Ug
Mi40LiBSZW5hbWVkIHRvIFUxNl9TRVRfQ1BfU1RBUlRfVU5TQUZFLCBzZWUgdXRmX29sZC5oLiAq
LwotI2RlZmluZSBVVEZfU0VUX0NIQVJfU1RBUlRfVU5TQUZFKHMsIGkpICAgICAgICAgICAgICBV
VEYxNl9TRVRfQ0hBUl9TVEFSVF9VTlNBRkUocywgaSkKLQotLyoqIEBkZXByZWNhdGVkIElDVSAy
LjQuIFJlbmFtZWQgdG8gVTE2X1NFVF9DUF9TVEFSVCwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZp
bmUgVVRGX1NFVF9DSEFSX1NUQVJUX1NBRkUocywgc3RhcnQsIGkpICAgICAgICAgVVRGMTZfU0VU
X0NIQVJfU1RBUlRfU0FGRShzLCBzdGFydCwgaSkKLQotCi0vKiogQGRlcHJlY2F0ZWQgSUNVIDIu
NC4gUmVuYW1lZCB0byBVMTZfUFJFVl9VTlNBRkUsIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5l
IFVURl9QUkVWX0NIQVJfVU5TQUZFKHMsIGksIGMpICAgICAgICAgICAgICAgIFVURjE2X1BSRVZf
Q0hBUl9VTlNBRkUocywgaSwgYykKLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIFVzZSBVMTZf
UFJFViBpbnN0ZWFkLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEZfUFJFVl9DSEFSX1NB
RkUocywgc3RhcnQsIGksIGMsIHN0cmljdCkgICBVVEYxNl9QUkVWX0NIQVJfU0FGRShzLCBzdGFy
dCwgaSwgYywgc3RyaWN0KQotCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRv
IFUxNl9CQUNLXzFfVU5TQUZFLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBVVEZfQkFDS18x
X1VOU0FGRShzLCBpKSAgICAgICAgICAgICAgICAgICAgICBVVEYxNl9CQUNLXzFfVU5TQUZFKHMs
IGkpCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9CQUNLXzEsIHNl
ZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVURl9CQUNLXzFfU0FGRShzLCBzdGFydCwgaSkgICAg
ICAgICAgICAgICAgIFVURjE2X0JBQ0tfMV9TQUZFKHMsIHN0YXJ0LCBpKQotCi0KLS8qKiBAZGVw
cmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9CQUNLX05fVU5TQUZFLCBzZWUgdXRmX29s
ZC5oLiAqLwotI2RlZmluZSBVVEZfQkFDS19OX1VOU0FGRShzLCBpLCBuKSAgICAgICAgICAgICAg
ICAgICBVVEYxNl9CQUNLX05fVU5TQUZFKHMsIGksIG4pCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1Ug
Mi40LiBSZW5hbWVkIHRvIFUxNl9CQUNLX04sIHNlZSB1dGZfb2xkLmguICovCi0jZGVmaW5lIFVU
Rl9CQUNLX05fU0FGRShzLCBzdGFydCwgaSwgbikgICAgICAgICAgICAgIFVURjE2X0JBQ0tfTl9T
QUZFKHMsIHN0YXJ0LCBpLCBuKQotCi0KLS8qKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVk
IHRvIFUxNl9TRVRfQ1BfTElNSVRfVU5TQUZFLCBzZWUgdXRmX29sZC5oLiAqLwotI2RlZmluZSBV
VEZfU0VUX0NIQVJfTElNSVRfVU5TQUZFKHMsIGkpICAgICAgICAgICAgICBVVEYxNl9TRVRfQ0hB
Ul9MSU1JVF9VTlNBRkUocywgaSkKLQotLyoqIEBkZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQg
dG8gVTE2X1NFVF9DUF9MSU1JVCwgc2VlIHV0Zl9vbGQuaC4gKi8KLSNkZWZpbmUgVVRGX1NFVF9D
SEFSX0xJTUlUX1NBRkUocywgc3RhcnQsIGksIGxlbmd0aCkgVVRGMTZfU0VUX0NIQVJfTElNSVRf
U0FGRShzLCBzdGFydCwgaSwgbGVuZ3RoKQotCi0vKiBEZWZpbmUgZGVmYXVsdCBtYWNyb3MgKFVU
Ri0xNiAic2FmZSIpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0v
KioKLSAqIERvZXMgdGhpcyBjb2RlIHVuaXQgYWxvbmUgZW5jb2RlIGEgY29kZSBwb2ludCAoQk1Q
LCBub3QgYSBzdXJyb2dhdGUpPwotICogU2FtZSBhcyBVVEYxNl9JU19TSU5HTEUuCi0gKiBAZGVw
cmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFVfSVNfU0lOR0xFIGFuZCBVMTZfSVNfU0lOR0xF
LCBzZWUgdXRmX29sZC5oLgotICovCi0jZGVmaW5lIFVURl9JU19TSU5HTEUodWNoYXIpIFUxNl9J
U19TSU5HTEUodWNoYXIpCi0KLS8qKgotICogSXMgdGhpcyBjb2RlIHVuaXQgdGhlIGZpcnN0IG9u
ZSBvZiBzZXZlcmFsIChhIGxlYWQgc3Vycm9nYXRlKT8KLSAqIFNhbWUgYXMgVVRGMTZfSVNfTEVB
RC4KLSAqIEBkZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQgdG8gVV9JU19MRUFEIGFuZCBVMTZf
SVNfTEVBRCwgc2VlIHV0Zl9vbGQuaC4KLSAqLwotI2RlZmluZSBVVEZfSVNfTEVBRCh1Y2hhcikg
VTE2X0lTX0xFQUQodWNoYXIpCi0KLS8qKgotICogSXMgdGhpcyBjb2RlIHVuaXQgb25lIG9mIHNl
dmVyYWwgYnV0IG5vdCB0aGUgZmlyc3Qgb25lIChhIHRyYWlsIHN1cnJvZ2F0ZSk/Ci0gKiBTYW1l
IGFzIFVURjE2X0lTX1RSQUlMLgotICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBV
X0lTX1RSQUlMIGFuZCBVMTZfSVNfVFJBSUwsIHNlZSB1dGZfb2xkLmguCi0gKi8KLSNkZWZpbmUg
VVRGX0lTX1RSQUlMKHVjaGFyKSBVMTZfSVNfVFJBSUwodWNoYXIpCi0KLS8qKgotICogRG9lcyB0
aGlzIGNvZGUgcG9pbnQgcmVxdWlyZSBtdWx0aXBsZSBjb2RlIHVuaXRzIChpcyBpdCBhIHN1cHBs
ZW1lbnRhcnkgY29kZSBwb2ludCk/Ci0gKiBTYW1lIGFzIFVURjE2X05FRURfTVVMVElQTEVfVUNI
QVIuCi0gKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBVc2UgVTE2X0xFTkdUSCBvciB0ZXN0ICgodWlu
dDMyX3QpKGMpPjB4ZmZmZikgaW5zdGVhZC4KLSAqLwotI2RlZmluZSBVVEZfTkVFRF9NVUxUSVBM
RV9VQ0hBUihjKSBVVEYxNl9ORUVEX01VTFRJUExFX1VDSEFSKGMpCi0KLS8qKgotICogSG93IG1h
bnkgY29kZSB1bml0cyBhcmUgdXNlZCB0byBlbmNvZGUgdGhpcyBjb2RlIHBvaW50ICgxIG9yIDIp
PwotICogU2FtZSBhcyBVVEYxNl9DSEFSX0xFTkdUSC4KLSAqIEBkZXByZWNhdGVkIElDVSAyLjQu
IFJlbmFtZWQgdG8gVTE2X0xFTkdUSCwgc2VlIHV0Zl9vbGQuaC4KLSAqLwotI2RlZmluZSBVVEZf
Q0hBUl9MRU5HVEgoYykgVTE2X0xFTkdUSChjKQotCi0vKioKLSAqIEhvdyBtYW55IGNvZGUgdW5p
dHMgYXJlIHVzZWQgYXQgbW9zdCBmb3IgYW55IFVuaWNvZGUgY29kZSBwb2ludCAoMik/Ci0gKiBT
YW1lIGFzIFVURjE2X01BWF9DSEFSX0xFTkdUSC4KLSAqIEBkZXByZWNhdGVkIElDVSAyLjQuIFJl
bmFtZWQgdG8gVTE2X01BWF9MRU5HVEgsIHNlZSB1dGZfb2xkLmguCi0gKi8KLSNkZWZpbmUgVVRG
X01BWF9DSEFSX0xFTkdUSCBVMTZfTUFYX0xFTkdUSAotCi0vKioKLSAqIFNldCBjIHRvIHRoZSBj
b2RlIHBvaW50IHRoYXQgY29udGFpbnMgdGhlIGNvZGUgdW5pdCBpLgotICogaSBjb3VsZCBwb2lu
dCB0byB0aGUgbGVhZCBvciB0aGUgdHJhaWwgc3Vycm9nYXRlIGZvciB0aGUgY29kZSBwb2ludC4K
LSAqIGkgaXMgbm90IG1vZGlmaWVkLgotICogU2FtZSBhcyBVVEYxNl9HRVRfQ0hBUi4KLSAqIFxw
cmUgMDw9aTxsZW5ndGgKLSAqCi0gKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUx
Nl9HRVQsIHNlZSB1dGZfb2xkLmguCi0gKi8KLSNkZWZpbmUgVVRGX0dFVF9DSEFSKHMsIHN0YXJ0
LCBpLCBsZW5ndGgsIGMpIFUxNl9HRVQocywgc3RhcnQsIGksIGxlbmd0aCwgYykKLQotLyoqCi0g
KiBTZXQgYyB0byB0aGUgY29kZSBwb2ludCB0aGF0IHN0YXJ0cyBhdCBjb2RlIHVuaXQgaQotICog
YW5kIGFkdmFuY2UgaSB0byBiZXlvbmQgdGhlIGNvZGUgdW5pdHMgb2YgdGhpcyBjb2RlIHBvaW50
IChwb3N0LWluY3JlbWVudCkuCi0gKiBpIG11c3QgcG9pbnQgdG8gdGhlIGZpcnN0IGNvZGUgdW5p
dCBvZiBhIGNvZGUgcG9pbnQuCi0gKiBPdGhlcndpc2UgYyBpcyBzZXQgdG8gdGhlIHRyYWlsIHVu
aXQgKHN1cnJvZ2F0ZSkgaXRzZWxmLgotICogU2FtZSBhcyBVVEYxNl9ORVhUX0NIQVIuCi0gKiBc
cHJlIDA8PWk8bGVuZ3RoCi0gKiBccG9zdCAwPGk8PWxlbmd0aAotICoKLSAqIEBkZXByZWNhdGVk
IElDVSAyLjQuIFJlbmFtZWQgdG8gVTE2X05FWFQsIHNlZSB1dGZfb2xkLmguCi0gKi8KLSNkZWZp
bmUgVVRGX05FWFRfQ0hBUihzLCBpLCBsZW5ndGgsIGMpIFUxNl9ORVhUKHMsIGksIGxlbmd0aCwg
YykKLQotLyoqCi0gKiBBcHBlbmQgdGhlIGNvZGUgdW5pdHMgb2YgY29kZSBwb2ludCBjIHRvIHRo
ZSBzdHJpbmcgYXQgaW5kZXggaQotICogYW5kIGFkdmFuY2UgaSB0byBiZXlvbmQgdGhlIG5ldyBj
b2RlIHVuaXRzIChwb3N0LWluY3JlbWVudCkuCi0gKiBUaGUgY29kZSB1bml0cyBiZWdpbm5pbmcg
YXQgaW5kZXggaSB3aWxsIGJlIG92ZXJ3cml0dGVuLgotICogU2FtZSBhcyBVVEYxNl9BUFBFTkRf
Q0hBUi4KLSAqIFxwcmUgMDw9Yzw9MHgxMGZmZmYKLSAqIFxwcmUgMDw9aTxsZW5ndGgKLSAqIFxw
b3N0IDA8aTw9bGVuZ3RoCi0gKgotICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gVXNlIFUxNl9BUFBF
TkQgaW5zdGVhZCwgc2VlIHV0Zl9vbGQuaC4KLSAqLwotI2RlZmluZSBVVEZfQVBQRU5EX0NIQVIo
cywgaSwgbGVuZ3RoLCBjKSBVVEYxNl9BUFBFTkRfQ0hBUl9TQUZFKHMsIGksIGxlbmd0aCwgYykK
LQotLyoqCi0gKiBBZHZhbmNlIGkgdG8gYmV5b25kIHRoZSBjb2RlIHVuaXRzIG9mIHRoZSBjb2Rl
IHBvaW50IHRoYXQgYmVnaW5zIGF0IGkuCi0gKiBJLmUuLCBhZHZhbmNlIGkgYnkgb25lIGNvZGUg
cG9pbnQuCi0gKiBTYW1lIGFzIFVURjE2X0ZXRF8xLgotICogXHByZSAwPD1pPGxlbmd0aAotICog
XHBvc3QgMDxpPD1sZW5ndGgKLSAqCi0gKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRv
IFUxNl9GV0RfMSwgc2VlIHV0Zl9vbGQuaC4KLSAqLwotI2RlZmluZSBVVEZfRldEXzEocywgaSwg
bGVuZ3RoKSBVMTZfRldEXzEocywgaSwgbGVuZ3RoKQotCi0vKioKLSAqIEFkdmFuY2UgaSB0byBi
ZXlvbmQgdGhlIGNvZGUgdW5pdHMgb2YgdGhlIG4gY29kZSBwb2ludHMgd2hlcmUgdGhlIGZpcnN0
IG9uZSBiZWdpbnMgYXQgaS4KLSAqIEkuZS4sIGFkdmFuY2UgaSBieSBuIGNvZGUgcG9pbnRzLgot
ICogU2FtZSBhcyBVVDE2X0ZXRF9OLgotICogXHByZSAwPD1pPGxlbmd0aAotICogXHBvc3QgMDxp
PD1sZW5ndGgKLSAqCi0gKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9GV0Rf
Tiwgc2VlIHV0Zl9vbGQuaC4KLSAqLwotI2RlZmluZSBVVEZfRldEX04ocywgaSwgbGVuZ3RoLCBu
KSBVMTZfRldEX04ocywgaSwgbGVuZ3RoLCBuKQotCi0vKioKLSAqIFRha2UgdGhlIHJhbmRvbS1h
Y2Nlc3MgaW5kZXggaSBhbmQgYWRqdXN0IGl0IHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBiZWdp
bm5pbmcKLSAqIG9mIGEgY29kZSBwb2ludC4KLSAqIFRoZSBpbnB1dCBpbmRleCBwb2ludHMgdG8g
YW55IGNvZGUgdW5pdCBvZiBhIGNvZGUgcG9pbnQgYW5kIGlzIG1vdmVkIHRvIHBvaW50IHRvCi0g
KiB0aGUgZmlyc3QgY29kZSB1bml0IG9mIHRoZSBzYW1lIGNvZGUgcG9pbnQuIGkgaXMgbmV2ZXIg
aW5jcmVtZW50ZWQuCi0gKiBJbiBvdGhlciB3b3JkcywgaWYgaSBwb2ludHMgdG8gYSB0cmFpbCBz
dXJyb2dhdGUgdGhhdCBpcyBwcmVjZWRlZCBieSBhIG1hdGNoaW5nCi0gKiBsZWFkIHN1cnJvZ2F0
ZSwgdGhlbiBpIGlzIGRlY3JlbWVudGVkLiBPdGhlcndpc2UgaXQgaXMgbm90IG1vZGlmaWVkLgot
ICogVGhpcyBjYW4gYmUgdXNlZCB0byBzdGFydCBhbiBpdGVyYXRpb24gd2l0aCBVVEZfTkVYVF9D
SEFSKCkgZnJvbSBhIHJhbmRvbSBpbmRleC4KLSAqIFNhbWUgYXMgVVRGMTZfU0VUX0NIQVJfU1RB
UlQuCi0gKiBccHJlIHN0YXJ0PD1pPGxlbmd0aAotICogXHBvc3Qgc3RhcnQ8PWk8bGVuZ3RoCi0g
KgotICogQGRlcHJlY2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBVMTZfU0VUX0NQX1NUQVJULCBz
ZWUgdXRmX29sZC5oLgotICovCi0jZGVmaW5lIFVURl9TRVRfQ0hBUl9TVEFSVChzLCBzdGFydCwg
aSkgVTE2X1NFVF9DUF9TVEFSVChzLCBzdGFydCwgaSkKLQotLyoqCi0gKiBTZXQgYyB0byB0aGUg
Y29kZSBwb2ludCB0aGF0IGhhcyBjb2RlIHVuaXRzIGJlZm9yZSBpCi0gKiBhbmQgbW92ZSBpIGJh
Y2t3YXJkICh0b3dhcmRzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZykKLSAqIHRvIHRoZSBm
aXJzdCBjb2RlIHVuaXQgb2YgdGhpcyBjb2RlIHBvaW50IChwcmUtaW5jcmVtZW50KS4KLSAqIGkg
bXVzdCBwb2ludCB0byB0aGUgZmlyc3QgY29kZSB1bml0IGFmdGVyIHRoZSBsYXN0IHVuaXQgb2Yg
YSBjb2RlIHBvaW50IChpPT1sZW5ndGggaXMgYWxsb3dlZCkuCi0gKiBTYW1lIGFzIFVURjE2X1BS
RVZfQ0hBUi4KLSAqIFxwcmUgc3RhcnQ8aTw9bGVuZ3RoCi0gKiBccG9zdCBzdGFydDw9aTxsZW5n
dGgKLSAqCi0gKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5hbWVkIHRvIFUxNl9QUkVWLCBzZWUg
dXRmX29sZC5oLgotICovCi0jZGVmaW5lIFVURl9QUkVWX0NIQVIocywgc3RhcnQsIGksIGMpIFUx
Nl9QUkVWKHMsIHN0YXJ0LCBpLCBjKQotCi0vKioKLSAqIE1vdmUgaSBiYWNrd2FyZCAodG93YXJk
cyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcpCi0gKiB0byB0aGUgZmlyc3QgY29kZSB1bml0
IG9mIHRoZSBjb2RlIHBvaW50IHRoYXQgaGFzIGNvZGUgdW5pdHMgYmVmb3JlIGkuCi0gKiBJLmUu
LCBtb3ZlIGkgYmFja3dhcmQgYnkgb25lIGNvZGUgcG9pbnQuCi0gKiBpIG11c3QgcG9pbnQgdG8g
dGhlIGZpcnN0IGNvZGUgdW5pdCBhZnRlciB0aGUgbGFzdCB1bml0IG9mIGEgY29kZSBwb2ludCAo
aT09bGVuZ3RoIGlzIGFsbG93ZWQpLgotICogU2FtZSBhcyBVVEYxNl9CQUNLXzEuCi0gKiBccHJl
IHN0YXJ0PGk8PWxlbmd0aAotICogXHBvc3Qgc3RhcnQ8PWk8bGVuZ3RoCi0gKgotICogQGRlcHJl
Y2F0ZWQgSUNVIDIuNC4gUmVuYW1lZCB0byBVMTZfQkFDS18xLCBzZWUgdXRmX29sZC5oLgotICov
Ci0jZGVmaW5lIFVURl9CQUNLXzEocywgc3RhcnQsIGkpIFUxNl9CQUNLXzEocywgc3RhcnQsIGkp
Ci0KLS8qKgotICogTW92ZSBpIGJhY2t3YXJkICh0b3dhcmRzIHRoZSBiZWdpbm5pbmcgb2YgdGhl
IHN0cmluZykKLSAqIHRvIHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgdGhlIG4gY29kZSBwb2ludHMg
dGhhdCBoYXZlIGNvZGUgdW5pdHMgYmVmb3JlIGkuCi0gKiBJLmUuLCBtb3ZlIGkgYmFja3dhcmQg
YnkgbiBjb2RlIHBvaW50cy4KLSAqIGkgbXVzdCBwb2ludCB0byB0aGUgZmlyc3QgY29kZSB1bml0
IGFmdGVyIHRoZSBsYXN0IHVuaXQgb2YgYSBjb2RlIHBvaW50IChpPT1sZW5ndGggaXMgYWxsb3dl
ZCkuCi0gKiBTYW1lIGFzIFVURjE2X0JBQ0tfTi4KLSAqIFxwcmUgc3RhcnQ8aTw9bGVuZ3RoCi0g
KiBccG9zdCBzdGFydDw9aTxsZW5ndGgKLSAqCi0gKiBAZGVwcmVjYXRlZCBJQ1UgMi40LiBSZW5h
bWVkIHRvIFUxNl9CQUNLX04sIHNlZSB1dGZfb2xkLmguCi0gKi8KLSNkZWZpbmUgVVRGX0JBQ0tf
TihzLCBzdGFydCwgaSwgbikgVTE2X0JBQ0tfTihzLCBzdGFydCwgaSwgbikKLQotLyoqCi0gKiBU
YWtlIHRoZSByYW5kb20tYWNjZXNzIGluZGV4IGkgYW5kIGFkanVzdCBpdCBzbyB0aGF0IGl0IHBv
aW50cyBiZXlvbmQKLSAqIGEgY29kZSBwb2ludC4gVGhlIGlucHV0IGluZGV4IHBvaW50cyBiZXlv
bmQgYW55IGNvZGUgdW5pdAotICogb2YgYSBjb2RlIHBvaW50IGFuZCBpcyBtb3ZlZCB0byBwb2lu
dCBiZXlvbmQgdGhlIGxhc3QgY29kZSB1bml0IG9mIHRoZSBzYW1lCi0gKiBjb2RlIHBvaW50LiBp
IGlzIG5ldmVyIGRlY3JlbWVudGVkLgotICogSW4gb3RoZXIgd29yZHMsIGlmIGkgcG9pbnRzIHRv
IGEgdHJhaWwgc3Vycm9nYXRlIHRoYXQgaXMgcHJlY2VkZWQgYnkgYSBtYXRjaGluZwotICogbGVh
ZCBzdXJyb2dhdGUsIHRoZW4gaSBpcyBpbmNyZW1lbnRlZC4gT3RoZXJ3aXNlIGl0IGlzIG5vdCBt
b2RpZmllZC4KLSAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gc3RhcnQgYW4gaXRlcmF0aW9uIHdpdGgg
VVRGX1BSRVZfQ0hBUigpIGZyb20gYSByYW5kb20gaW5kZXguCi0gKiBTYW1lIGFzIFVURjE2X1NF
VF9DSEFSX0xJTUlULgotICogXHByZSBzdGFydDxpPD1sZW5ndGgKLSAqIFxwb3N0IHN0YXJ0PGk8
PWxlbmd0aAotICoKLSAqIEBkZXByZWNhdGVkIElDVSAyLjQuIFJlbmFtZWQgdG8gVTE2X1NFVF9D
UF9MSU1JVCwgc2VlIHV0Zl9vbGQuaC4KLSAqLwotI2RlZmluZSBVVEZfU0VUX0NIQVJfTElNSVQo
cywgc3RhcnQsIGksIGxlbmd0aCkgVTE2X1NFVF9DUF9MSU1JVChzLCBzdGFydCwgaSwgbGVuZ3Ro
KQotCi0jZW5kaWYgLyogVV9ISURFX0RFUFJFQ0FURURfQVBJICovCi0KLSNlbmRpZgotCmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2lj
dS91bmljb2RlL3V0eXBlcy5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2Rl
cGVuZGVuY2llcy9pY3UvdW5pY29kZS91dHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDkwMzdhODFkNTI4NWMxNzU0MzQ3ZDM1YWRiMDVmM2ZjOWQyZDM1ZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3V0eXBlcy5oCisrKyAvZGV2
L251bGwKQEAgLTEsNzI5ICswLDAgQEAKLS8qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICAgQ29weXJpZ2h0
IChDKSAxOTk2LTIwMTUsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKLSogICBDb3Jw
b3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
LSoKLSogIEZJTEUgTkFNRSA6IFVUWVBFUy5IIChmb3JtZXJseSBwdHlwZXMuaCkKLSoKLSogICBE
YXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgotKiAgIDEyLzExLzk2ICAgIGhlbGVu
YSAgICAgIENyZWF0aW9uLgotKiAgIDAyLzI3Lzk3ICAgIGFsaXUgICAgICAgIEFkZGVkIHR5cGVk
ZWZzIGZvciBVQ2xhc3NJRCwgaW50OCwgaW50MTYsIGludDMyLAotKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQ4LCB1aW50MTYsIGFuZCB1aW50MzIuCi0qICAgMDQvMDEvOTcgICAgYWxp
dSAgICAgICAgQWRkZWQgWFBfQ1BMVVNQTFVTIGFuZCBtb2RpZmllZCB0byB3b3JrIHVuZGVyIEMg
YXMKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VsbCBhcyBDKysuCi0qICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgdG8gdXNlIG1lbWNweSgpIGZvciB1cHJ2X2FycmF5
Q29weSgpIGZucy4KLSogICAwNC8xNC85NyAgICBhbGl1ICAgICAgICBBZGRlZCBUUGxhdGZvcm1V
dGlsaXRpZXMuCi0qICAgMDUvMDcvOTcgICAgYWxpdSAgICAgICAgQWRkZWQgaW1wb3J0L2V4cG9y
dCBzcGVjaWZpZXJzIChyZXBsYWNpbmcgdGhlIG9sZAotKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyb2tlbiBFWFRfQ0xBU1MpLiAgQWRkZWQgdmVyc2lvbiBudW1iZXIgZm9yIG91cgotKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUuICBDbGVhbmVkIHVwIGhlYWRlci4KLSogICAg
Ni8yMC85NyAgICBoZWxlbmEgICAgICBKYXZhIGNsYXNzIG5hbWUgY2hhbmdlLgotKiAgIDA4LzEx
Lzk4ICAgIHN0ZXBoZW4gICAgIFVFcnJvckNvZGUgY2hhbmdlZCBmcm9tIHR5cGVkZWYgdG8gZW51
bQotKiAgIDA4LzEyLzk4ICAgIGVybSAgICAgICAgIENoYW5nZWQgVF9BTkFMWVRJQ19QQUNLQUdF
X1ZFUlNJT04gdG8gMwotKiAgIDA4LzE0Lzk4ICAgIHN0ZXBoZW4gICAgIEFkZGVkIHVwcnZfYXJy
YXlDb3B5KCkgZm9yIGludDhfdCwgaW50MTZfdCwgaW50MzJfdAotKiAgIDEyLzA5Lzk4ICAgIGpm
aXR6ICAgICAgIEFkZGVkIEJVRkZFUl9PVkVSRkxPV19FUlJPUiAoYnVnIDExMDAwNjYpCi0qICAg
MDQvMjAvOTkgICAgc3RlcGhlbiAgICAgQ2xlYW5lZCB1cCAmIHJld29ya2VkIGZvciBhdXRvY29u
Zi4KLSogICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5hbWVkIHRvIHV0eXBlcy5oLgotKiAg
IDA1LzA1Lzk5ICAgIHN0ZXBoZW4gICAgIENoYW5nZWQgdG8gdXNlIDxpbnR0eXBlcy5oPgotKiAg
IDEyLzA3Lzk5ICAgIGhlbGVuYSAgICAgIE1vdmVkIGNvcHlyaWdodCBub3RpY2Ugc3RyaW5nIGZy
b20gdWNudl9ibGQuaCBoZXJlLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKi8KLQotI2lmbmRl
ZiBVVFlQRVNfSAotI2RlZmluZSBVVFlQRVNfSAotCi0KLSNpbmNsdWRlICJ1bmljb2RlL3VtYWNo
aW5lLmgiCi0jaW5jbHVkZSAidW5pY29kZS91dmVyc2lvbi5oIgotI2luY2x1ZGUgInVuaWNvZGUv
dWNvbmZpZy5oIgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0KLSNpZiAhVV9OT19ERUZBVUxUX0lOQ0xV
REVfVVRGX0hFQURFUlMKLSMgICBpbmNsdWRlICJ1bmljb2RlL3V0Zi5oIgotI2VuZGlmCi0KLS8q
IQotICogXGZpbGUKLSAqIFxicmllZiBCYXNpYyBkZWZpbml0aW9ucyBmb3IgSUNVLCBmb3IgYm90
aCBDIGFuZCBDKysgQVBJcwotICoKLSAqIFRoaXMgZmlsZSBkZWZpbmVzIGJhc2ljIHR5cGVzLCBj
b25zdGFudHMsIGFuZCBlbnVtZXJhdGlvbnMgZGlyZWN0bHkgb3IKLSAqIGluZGlyZWN0bHkgYnkg
aW5jbHVkaW5nIG90aGVyIGhlYWRlciBmaWxlcywgZXNwZWNpYWxseSB1dGYuaCBmb3IgdGhlCi0g
KiBiYXNpYyBjaGFyYWN0ZXIgYW5kIHN0cmluZyBkZWZpbml0aW9ucyBhbmQgdW1hY2hpbmUuaCBm
b3IgY29uc2lzdGVudAotICogaW50ZWdlciBhbmQgb3RoZXIgdHlwZXMuCi0gKi8KLQotCi0vKioK
LSAqIFxkZWYgVV9TSE9XX0NQTFVTUExVU19BUEkKLSAqIEBpbnRlcm5hbAotICovCi0jaWZkZWYg
X19jcGx1c3BsdXMKLSMgICBpZm5kZWYgVV9TSE9XX0NQTFVTUExVU19BUEkKLSMgICAgICAgZGVm
aW5lIFVfU0hPV19DUExVU1BMVVNfQVBJIDEKLSMgICBlbmRpZgotI2Vsc2UKLSMgICB1bmRlZiBV
X1NIT1dfQ1BMVVNQTFVTX0FQSQotIyAgIGRlZmluZSBVX1NIT1dfQ1BMVVNQTFVTX0FQSSAwCi0j
ZW5kaWYKLQotLyoqIEB7IEFQSSB2aXNpYmlsaXR5IGNvbnRyb2wgKi8KLQotLyoqCi0gKiBcZGVm
IFVfSElERV9EUkFGVF9BUEkKLSAqIERlZmluZSB0aGlzIHRvIDEgdG8gcmVxdWVzdCB0aGF0IGRy
YWZ0IEFQSSBiZSAiaGlkZGVuIgotICogQGludGVybmFsCi0gKi8KLS8qKgotICogXGRlZiBVX0hJ
REVfSU5URVJOQUxfQVBJCi0gKiBEZWZpbmUgdGhpcyB0byAxIHRvIHJlcXVlc3QgdGhhdCBpbnRl
cm5hbCBBUEkgYmUgImhpZGRlbiIKLSAqIEBpbnRlcm5hbAotICovCi0jaWYgIVVfREVGQVVMVF9T
SE9XX0RSQUZUICYmICFkZWZpbmVkKFVfU0hPV19EUkFGVF9BUEkpCi0jZGVmaW5lIFVfSElERV9E
UkFGVF9BUEkgMQotI2VuZGlmCi0jaWYgIVVfREVGQVVMVF9TSE9XX0RSQUZUICYmICFkZWZpbmVk
KFVfU0hPV19JTlRFUk5BTF9BUEkpCi0jZGVmaW5lIFVfSElERV9JTlRFUk5BTF9BUEkgMQotI2Vu
ZGlmCi0KLS8qKiBAfSAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBJQ1VEQVRBIG5h
bWluZyBzY2hlbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qKgotICogXGRlZiBVX0lDVURB
VEFfVFlQRV9MRVRURVIKLSAqCi0gKiBUaGlzIGlzIGEgcGxhdGZvcm0tZGVwZW5kZW50IHN0cmlu
ZyBjb250YWluaW5nIG9uZSBsZXR0ZXI6Ci0gKiAtIGIgZm9yIGJpZy1lbmRpYW4sIEFTQ0lJLWZh
bWlseSBwbGF0Zm9ybXMKLSAqIC0gbCBmb3IgbGl0dGxlLWVuZGlhbiwgQVNDSUktZmFtaWx5IHBs
YXRmb3JtcwotICogLSBlIGZvciBiaWctZW5kaWFuLCBFQkNESUMtZmFtaWx5IHBsYXRmb3Jtcwot
ICogVGhpcyBsZXR0ZXIgaXMgcGFydCBvZiB0aGUgY29tbW9uIGRhdGEgZmlsZSBuYW1lLgotICog
QHN0YWJsZSBJQ1UgMi4wCi0gKi8KLQotLyoqCi0gKiBcZGVmIFVfSUNVREFUQV9UWVBFX0xJVExF
VFRFUgotICogVGhlIG5vbi1zdHJpbmcgZm9ybSBvZiBVX0lDVURBVEFfVFlQRV9MRVRURVIKLSAq
IEBzdGFibGUgSUNVIDIuMAotICovCi0jaWYgVV9DSEFSU0VUX0ZBTUlMWQotIyAgIGlmIFVfSVNf
QklHX0VORElBTgotICAgLyogRUJDRElDIC0gc2hvdWxkIGFsd2F5cyBiZSBCRSAqLwotIyAgICAg
ZGVmaW5lIFVfSUNVREFUQV9UWVBFX0xFVFRFUiAiZSIKLSMgICAgIGRlZmluZSBVX0lDVURBVEFf
VFlQRV9MSVRMRVRURVIgZQotIyAgIGVsc2UKLSMgICAgIGVycm9yICJEb24ndCBrbm93IHdoYXQg
dG8gZG8gd2l0aCBsaXR0bGUgZW5kaWFuIEVCQ0RJQyEiCi0jICAgICBkZWZpbmUgVV9JQ1VEQVRB
X1RZUEVfTEVUVEVSICJ4IgotIyAgICAgZGVmaW5lIFVfSUNVREFUQV9UWVBFX0xJVExFVFRFUiB4
Ci0jICAgZW5kaWYKLSNlbHNlCi0jICAgaWYgVV9JU19CSUdfRU5ESUFOCi0gICAgICAvKiBCaWct
ZW5kaWFuIEFTQ0lJICovCi0jICAgICBkZWZpbmUgVV9JQ1VEQVRBX1RZUEVfTEVUVEVSICJiIgot
IyAgICAgZGVmaW5lIFVfSUNVREFUQV9UWVBFX0xJVExFVFRFUiBiCi0jICAgZWxzZQotICAgICAg
LyogTGl0dGxlLWVuZGlhbiBBU0NJSSAqLwotIyAgICAgZGVmaW5lIFVfSUNVREFUQV9UWVBFX0xF
VFRFUiAibCIKLSMgICAgIGRlZmluZSBVX0lDVURBVEFfVFlQRV9MSVRMRVRURVIgbAotIyAgIGVu
ZGlmCi0jZW5kaWYKLQotLyoqCi0gKiBBIHNpbmdsZSBzdHJpbmcgbGl0ZXJhbCBjb250YWluaW5n
IHRoZSBpY3VkYXRhIHN0dWIgbmFtZS4gaS5lLiAnaWN1ZHQxOGUnIGZvcgotICogSUNVIDEuOC54
IG9uIEVCQ0RJQywgZXRjLi4KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi0jZGVmaW5lIFVfSUNV
REFUQV9OQU1FICAgICJpY3VkdCIgVV9JQ1VfVkVSU0lPTl9TSE9SVCBVX0lDVURBVEFfVFlQRV9M
RVRURVIKLSNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQSQotI2RlZmluZSBVX1VTUkRBVEFfTkFN
RSAgICAidXNyZHQiIFVfSUNVX1ZFUlNJT05fU0hPUlQgVV9JQ1VEQVRBX1RZUEVfTEVUVEVSICAv
Kio8IEBpbnRlcm5hbCAqLwotI2RlZmluZSBVX1VTRV9VU1JEQVRBICAgICAxICAvKio8IEBpbnRl
cm5hbCAqLwotI2VuZGlmICAvKiBVX0hJREVfSU5URVJOQUxfQVBJICovCi0KLS8qKgotICogIFVf
SUNVX0VOVFJZX1BPSU5UIGlzIHRoZSBuYW1lIG9mIHRoZSBETEwgZW50cnkgcG9pbnQgdG8gdGhl
IElDVSBkYXRhIGxpYnJhcnkuCi0gKiAgICBEZWZpbmVkIGFzIGEgbGl0ZXJhbCwgbm90IGEgc3Ry
aW5nLgotICogICAgVHJpY2t5IFByZXByb2Nlc3NvciB1c2UgLSAjIyBvcGVyYXRvciByZXBsYWNl
cyBtYWNybyBwYXJhbXRlcnMgd2l0aCB0aGUgbGl0ZXJhbCBzdHJpbmcKLSAqICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBtYWNybyBpbnZvY2F0aW9u
LCBfYmVmb3JlXyBvdGhlciBtYWNybyBzdWJzdGl0dXRpb25zLgotICogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOZWVkIGEgbmVzdGVkIFwjZGVmaW5lcyB0byBnZXQgdGhlIGFjdHVhbCB2
ZXJzaW9uIG51bWJlcnMgcmF0aGVyIHRoYW4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhlIGxpdGVyYWwgdGV4dCBVX0lDVV9WRVJTSU9OX01BSk9SX05VTSBpbnRvIHRoZSBuYW1l
LgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmV0IHJlc3VsdCB3aWxsIGJl
IHNvbWV0aGluZyBvZiB0aGUgZm9ybQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXCNkZWZpbmUgVV9JQ1VfRU5UUllfUE9JTlQgaWN1ZHQxOV9kYXQKLSAqIEBzdGFibGUgSUNV
IDIuNAotICovCi0jZGVmaW5lIFVfSUNVREFUQV9FTlRSWV9QT0lOVCAgVV9ERUYyX0lDVURBVEFf
RU5UUllfUE9JTlQoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0sVV9MSUJfU1VGRklYX0NfTkFNRSkK
LQotI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJCi0vKioKLSAqIERvIG5vdCB1c2UuIE5vdGUg
dGhhdCBpdCdzIE9LIGZvciB0aGUgMm5kIGFyZ3VtZW50IHRvIGJlIHVuZGVmaW5lZCAobGl0ZXJh
bCkuCi0gKiBAaW50ZXJuYWwKLSAqLwotI2RlZmluZSBVX0RFRjJfSUNVREFUQV9FTlRSWV9QT0lO
VChtYWpvcixzdWZmKSBVX0RFRl9JQ1VEQVRBX0VOVFJZX1BPSU5UKG1ham9yLHN1ZmYpCi0KLS8q
KgotICogRG8gbm90IHVzZS4KLSAqIEBpbnRlcm5hbAotICovCi0jaWZuZGVmIFVfREVGX0lDVURB
VEFfRU5UUllfUE9JTlQKLS8qIGFmZmVjdGVkIGJ5IHN5bWJvbCByZW5hbWluZy4gU2VlIHBsYXRm
b3JtLmggKi8KLSNpZm5kZWYgVV9MSUJfU1VGRklYX0NfTkFNRQotI2RlZmluZSBVX0RFRl9JQ1VE
QVRBX0VOVFJZX1BPSU5UKG1ham9yLCBzdWZmKSBpY3VkdCMjbWFqb3IjI19kYXQKLSNlbHNlCi0j
ZGVmaW5lIFVfREVGX0lDVURBVEFfRU5UUllfUE9JTlQobWFqb3IsIHN1ZmYpIGljdWR0IyNzdWZm
ICMjIG1ham9yIyNfZGF0Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmICAvKiBVX0hJREVfSU5URVJO
QUxfQVBJICovCi0KLS8qKgotICogXGRlZiBOVUxMCi0gKiBEZWZpbmUgTlVMTCBpZiBuZWNlc3Nh
cnksIHRvIDAgZm9yIEMrKyBhbmQgdG8gKCh2b2lkICopMCkgZm9yIEMuCi0gKiBAc3RhYmxlIElD
VSAyLjAKLSAqLwotI2lmbmRlZiBOVUxMCi0jaWZkZWYgX19jcGx1c3BsdXMKLSNkZWZpbmUgTlVM
TCAgICAwCi0jZWxzZQotI2RlZmluZSBOVUxMICAgICgodm9pZCAqKTApCi0jZW5kaWYKLSNlbmRp
ZgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBDYWxlbmRhci9UaW1lWm9uZSBkYXRhIHR5
cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PSovCi0KLS8qKgotICogRGF0ZSBhbmQgVGltZSBkYXRhIHR5cGUuCi0g
KiBUaGlzIGlzIGEgcHJpbWl0aXZlIGRhdGEgdHlwZSB0aGF0IGhvbGRzIHRoZSBkYXRlIGFuZCB0
aW1lCi0gKiBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAxOTcwLWphbi0wMSwg
MDA6MDAgVVRDLgotICogVVRDIGxlYXAgc2Vjb25kcyBhcmUgaWdub3JlZC4KLSAqIEBzdGFibGUg
SUNVIDIuMAotICovCi10eXBlZGVmIGRvdWJsZSBVRGF0ZTsKLQotLyoqIFRoZSBudW1iZXIgb2Yg
bWlsbGlzZWNvbmRzIHBlciBzZWNvbmQgQHN0YWJsZSBJQ1UgMi4wICovCi0jZGVmaW5lIFVfTUlM
TElTX1BFUl9TRUNPTkQgICAgICAgICgxMDAwKQotLyoqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNv
bmRzIHBlciBtaW51dGUgQHN0YWJsZSBJQ1UgMi4wICovCi0jZGVmaW5lIFVfTUlMTElTX1BFUl9N
SU5VVEUgICAgICAgKDYwMDAwKQotLyoqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHBlciBo
b3VyIEBzdGFibGUgSUNVIDIuMCAqLwotI2RlZmluZSBVX01JTExJU19QRVJfSE9VUiAgICAgICAo
MzYwMDAwMCkKLS8qKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBwZXIgZGF5IEBzdGFibGUg
SUNVIDIuMCAqLwotI2RlZmluZSBVX01JTExJU19QRVJfREFZICAgICAgICg4NjQwMDAwMCkKLQot
LyoqIAotICogTWF4aW11bSBVRGF0ZSB2YWx1ZSAKLSAqIEBzdGFibGUgSUNVIDQuOCAKLSAqLyAK
LSNkZWZpbmUgVV9EQVRFX01BWCBEQkxfTUFYCi0KLS8qKgotICogTWluaW11bSBVRGF0ZSB2YWx1
ZSAKLSAqIEBzdGFibGUgSUNVIDQuOCAKLSAqLyAKLSNkZWZpbmUgVV9EQVRFX01JTiAtVV9EQVRF
X01BWAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTaGFyZWQgbGlicmFyeS9ETEwgaW1w
b3J0LWV4cG9ydCBBUEkgY29udHJvbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0v
Kj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PSovCi0KLS8qCi0gKiBDb250cm9sIG9mIHN5bWJvbCBpbXBvcnQv
ZXhwb3J0LgotICogSUNVIGlzIHNlcGFyYXRlZCBpbnRvIHRocmVlIGxpYnJhcmllcy4KLSAqLwot
Ci0vKioKLSAqIFxkZWYgVV9DT01CSU5FRF9JTVBMRU1FTlRBVElPTgotICogU2V0IHRvIGV4cG9y
dCBsaWJyYXJ5IHN5bWJvbHMgZnJvbSBpbnNpZGUgdGhlIElDVSBsaWJyYXJ5Ci0gKiB3aGVuIGFs
bCBvZiBJQ1UgaXMgaW4gYSBzaW5nbGUgbGlicmFyeS4KLSAqIFRoaXMgY2FuIGJlIHNldCBhcyBh
IGNvbXBpbGVyIG9wdGlvbiB3aGlsZSBidWlsZGluZyBJQ1UsIGFuZCBpdAotICogbmVlZHMgdG8g
YmUgdGhlIGZpcnN0IG9uZSB0ZXN0ZWQgdG8gb3ZlcnJpZGUgVV9DT01NT05fQVBJLCBVX0kxOE5f
QVBJLCBldGMuCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotCi0vKioKLSAqIFxkZWYgVV9EQVRB
X0FQSQotICogU2V0IHRvIGV4cG9ydCBsaWJyYXJ5IHN5bWJvbHMgZnJvbSBpbnNpZGUgdGhlIHN0
dWJkYXRhIGxpYnJhcnksCi0gKiBhbmQgdG8gaW1wb3J0IHRoZW0gZnJvbSBvdXRzaWRlLgotICog
QHN0YWJsZSBJQ1UgMy4wCi0gKi8KLQotLyoqCi0gKiBcZGVmIFVfQ09NTU9OX0FQSQotICogU2V0
IHRvIGV4cG9ydCBsaWJyYXJ5IHN5bWJvbHMgZnJvbSBpbnNpZGUgdGhlIGNvbW1vbiBsaWJyYXJ5
LAotICogYW5kIHRvIGltcG9ydCB0aGVtIGZyb20gb3V0c2lkZS4KLSAqIEBzdGFibGUgSUNVIDIu
MAotICovCi0KLS8qKgotICogXGRlZiBVX0kxOE5fQVBJCi0gKiBTZXQgdG8gZXhwb3J0IGxpYnJh
cnkgc3ltYm9scyBmcm9tIGluc2lkZSB0aGUgaTE4biBsaWJyYXJ5LAotICogYW5kIHRvIGltcG9y
dCB0aGVtIGZyb20gb3V0c2lkZS4KLSAqIEBzdGFibGUgSUNVIDIuMAotICovCi0KLS8qKgotICog
XGRlZiBVX0xBWU9VVF9BUEkKLSAqIFNldCB0byBleHBvcnQgbGlicmFyeSBzeW1ib2xzIGZyb20g
aW5zaWRlIHRoZSBsYXlvdXQgZW5naW5lIGxpYnJhcnksCi0gKiBhbmQgdG8gaW1wb3J0IHRoZW0g
ZnJvbSBvdXRzaWRlLgotICogQHN0YWJsZSBJQ1UgMi4wCi0gKi8KLQotLyoqCi0gKiBcZGVmIFVf
TEFZT1VURVhfQVBJCi0gKiBTZXQgdG8gZXhwb3J0IGxpYnJhcnkgc3ltYm9scyBmcm9tIGluc2lk
ZSB0aGUgbGF5b3V0IGV4dGVuc2lvbnMgbGlicmFyeSwKLSAqIGFuZCB0byBpbXBvcnQgdGhlbSBm
cm9tIG91dHNpZGUuCi0gKiBAc3RhYmxlIElDVSAyLjYKLSAqLwotCi0vKioKLSAqIFxkZWYgVV9J
T19BUEkKLSAqIFNldCB0byBleHBvcnQgbGlicmFyeSBzeW1ib2xzIGZyb20gaW5zaWRlIHRoZSB1
c3RkaW8gbGlicmFyeSwKLSAqIGFuZCB0byBpbXBvcnQgdGhlbSBmcm9tIG91dHNpZGUuCi0gKiBA
c3RhYmxlIElDVSAyLjAKLSAqLwotCi0vKioKLSAqIFxkZWYgVV9UT09MVVRJTF9BUEkKLSAqIFNl
dCB0byBleHBvcnQgbGlicmFyeSBzeW1ib2xzIGZyb20gaW5zaWRlIHRoZSB0b29sdXRpbCBsaWJy
YXJ5LAotICogYW5kIHRvIGltcG9ydCB0aGVtIGZyb20gb3V0c2lkZS4KLSAqIEBzdGFibGUgSUNV
IDMuNAotICovCi0KLSNpZiBkZWZpbmVkKFVfQ09NQklORURfSU1QTEVNRU5UQVRJT04pCi0jZGVm
aW5lIFVfREFUQV9BUEkgICAgIFVfRVhQT1JUCi0jZGVmaW5lIFVfQ09NTU9OX0FQSSAgIFVfRVhQ
T1JUCi0jZGVmaW5lIFVfSTE4Tl9BUEkgICAgIFVfRVhQT1JUCi0jZGVmaW5lIFVfTEFZT1VUX0FQ
SSAgIFVfRVhQT1JUCi0jZGVmaW5lIFVfTEFZT1VURVhfQVBJIFVfRVhQT1JUCi0jZGVmaW5lIFVf
SU9fQVBJICAgICAgIFVfRVhQT1JUCi0jZGVmaW5lIFVfVE9PTFVUSUxfQVBJIFVfRVhQT1JUCi0j
ZWxpZiBkZWZpbmVkKFVfU1RBVElDX0lNUExFTUVOVEFUSU9OKQotI2RlZmluZSBVX0RBVEFfQVBJ
Ci0jZGVmaW5lIFVfQ09NTU9OX0FQSQotI2RlZmluZSBVX0kxOE5fQVBJCi0jZGVmaW5lIFVfTEFZ
T1VUX0FQSQotI2RlZmluZSBVX0xBWU9VVEVYX0FQSQotI2RlZmluZSBVX0lPX0FQSQotI2RlZmlu
ZSBVX1RPT0xVVElMX0FQSQotI2VsaWYgZGVmaW5lZChVX0NPTU1PTl9JTVBMRU1FTlRBVElPTikK
LSNkZWZpbmUgVV9EQVRBX0FQSSAgICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9DT01NT05fQVBJICAg
VV9FWFBPUlQKLSNkZWZpbmUgVV9JMThOX0FQSSAgICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9MQVlP
VVRfQVBJICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9MQVlPVVRFWF9BUEkgVV9JTVBPUlQKLSNkZWZp
bmUgVV9JT19BUEkgICAgICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9UT09MVVRJTF9BUEkgVV9JTVBP
UlQKLSNlbGlmIGRlZmluZWQoVV9JMThOX0lNUExFTUVOVEFUSU9OKQotI2RlZmluZSBVX0RBVEFf
QVBJICAgICBVX0lNUE9SVAotI2RlZmluZSBVX0NPTU1PTl9BUEkgICBVX0lNUE9SVAotI2RlZmlu
ZSBVX0kxOE5fQVBJICAgICBVX0VYUE9SVAotI2RlZmluZSBVX0xBWU9VVF9BUEkgICBVX0lNUE9S
VAotI2RlZmluZSBVX0xBWU9VVEVYX0FQSSBVX0lNUE9SVAotI2RlZmluZSBVX0lPX0FQSSAgICAg
ICBVX0lNUE9SVAotI2RlZmluZSBVX1RPT0xVVElMX0FQSSBVX0lNUE9SVAotI2VsaWYgZGVmaW5l
ZChVX0xBWU9VVF9JTVBMRU1FTlRBVElPTikKLSNkZWZpbmUgVV9EQVRBX0FQSSAgICAgVV9JTVBP
UlQKLSNkZWZpbmUgVV9DT01NT05fQVBJICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9JMThOX0FQSSAg
ICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9MQVlPVVRfQVBJICAgVV9FWFBPUlQKLSNkZWZpbmUgVV9M
QVlPVVRFWF9BUEkgVV9JTVBPUlQKLSNkZWZpbmUgVV9JT19BUEkgICAgICAgVV9JTVBPUlQKLSNk
ZWZpbmUgVV9UT09MVVRJTF9BUEkgVV9JTVBPUlQKLSNlbGlmIGRlZmluZWQoVV9MQVlPVVRFWF9J
TVBMRU1FTlRBVElPTikKLSNkZWZpbmUgVV9EQVRBX0FQSSAgICAgVV9JTVBPUlQKLSNkZWZpbmUg
VV9DT01NT05fQVBJICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9JMThOX0FQSSAgICAgVV9JTVBPUlQK
LSNkZWZpbmUgVV9MQVlPVVRfQVBJICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9MQVlPVVRFWF9BUEkg
VV9FWFBPUlQKLSNkZWZpbmUgVV9JT19BUEkgICAgICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9UT09M
VVRJTF9BUEkgVV9JTVBPUlQKLSNlbGlmIGRlZmluZWQoVV9JT19JTVBMRU1FTlRBVElPTikKLSNk
ZWZpbmUgVV9EQVRBX0FQSSAgICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9DT01NT05fQVBJICAgVV9J
TVBPUlQKLSNkZWZpbmUgVV9JMThOX0FQSSAgICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9MQVlPVVRf
QVBJICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9MQVlPVVRFWF9BUEkgVV9JTVBPUlQKLSNkZWZpbmUg
VV9JT19BUEkgICAgICAgVV9FWFBPUlQKLSNkZWZpbmUgVV9UT09MVVRJTF9BUEkgVV9JTVBPUlQK
LSNlbGlmIGRlZmluZWQoVV9UT09MVVRJTF9JTVBMRU1FTlRBVElPTikKLSNkZWZpbmUgVV9EQVRB
X0FQSSAgICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9DT01NT05fQVBJICAgVV9JTVBPUlQKLSNkZWZp
bmUgVV9JMThOX0FQSSAgICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9MQVlPVVRfQVBJICAgVV9JTVBP
UlQKLSNkZWZpbmUgVV9MQVlPVVRFWF9BUEkgVV9JTVBPUlQKLSNkZWZpbmUgVV9JT19BUEkgICAg
ICAgVV9JTVBPUlQKLSNkZWZpbmUgVV9UT09MVVRJTF9BUEkgVV9FWFBPUlQKLSNlbHNlCi0jZGVm
aW5lIFVfREFUQV9BUEkgICAgIFVfSU1QT1JUCi0jZGVmaW5lIFVfQ09NTU9OX0FQSSAgIFVfSU1Q
T1JUCi0jZGVmaW5lIFVfSTE4Tl9BUEkgICAgIFVfSU1QT1JUCi0jZGVmaW5lIFVfTEFZT1VUX0FQ
SSAgIFVfSU1QT1JUCi0jZGVmaW5lIFVfTEFZT1VURVhfQVBJIFVfSU1QT1JUCi0jZGVmaW5lIFVf
SU9fQVBJICAgICAgIFVfSU1QT1JUCi0jZGVmaW5lIFVfVE9PTFVUSUxfQVBJIFVfSU1QT1JUCi0j
ZW5kaWYKLQotLyoqCi0gKiBcZGVmIFVfU1RBTkRBUkRfQ1BQX05BTUVTUEFDRQotICogQ29udHJv
bCBvZiBDKysgTmFtZXNwYWNlCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotI2lmZGVmIF9fY3Bs
dXNwbHVzCi0jZGVmaW5lIFVfU1RBTkRBUkRfQ1BQX05BTUVTUEFDRSAgICAgICAgOjoKLSNlbHNl
Ci0jZGVmaW5lIFVfU1RBTkRBUkRfQ1BQX05BTUVTUEFDRQotI2VuZGlmCi0KLQotLyo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0qLwotLyogR2xvYmFsIGRlbGV0ZSBvcGVyYXRvciAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0qLwotCi0vKgotICogVGhlIElDVTRDIGxpYnJhcnkgbXVzdCBub3QgdXNlIHRoZSBnbG9iYWwg
bmV3IGFuZCBkZWxldGUgb3BlcmF0b3JzLgotICogVGhlc2Ugb3BlcmF0b3JzIGhlcmUgYXJlIGRl
ZmluZWQgdG8gZW5hYmxlIHRlc3RpbmcgZm9yIHRoaXMuCi0gKiBTZWUgSml0dGVyYnVnIDI1ODEg
Zm9yIGRldGFpbHMgb2Ygd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotICoKLSAqIFZlcmlmaWNhdGlv
biB0aGF0IElDVTRDJ3MgbWVtb3J5IHVzYWdlIGlzIGNvcnJlY3QsIGkuZS4sCi0gKiB0aGF0IGds
b2JhbCBuZXcvZGVsZXRlIGFyZSBub3QgdXNlZDoKLSAqCi0gKiBhKSBDaGVjayBmb3IgaW1wb3J0
cyBvZiBnbG9iYWwgbmV3L2RlbGV0ZSAoc2VlIHVvYmplY3QuY3BwIGZvciBkZXRhaWxzKQotICog
YikgVmVyaWZ5IHRoYXQgbmV3IGlzIG5ldmVyIGltcG9ydGVkLgotICogYykgVmVyaWZ5IHRoYXQg
ZGVsZXRlIGlzIG9ubHkgaW1wb3J0ZWQgZnJvbSBvYmplY3QgY29kZSBmb3IgaW50ZXJmYWNlL21p
eGluIGNsYXNzZXMuCi0gKiBkKSBBZGQgZ2xvYmFsIGRlbGV0ZSBhbmQgZGVsZXRlW10gb25seSBm
b3IgdGhlIElDVTRDIGxpYnJhcnkgaXRzZWxmCi0gKiAgICBhbmQgZGVmaW5lIHRoZW0gaW4gYSB3
YXkgdGhhdCBjcmFzaGVzIG9yIG90aGVyd2lzZSBlYXNpbHkgc2hvd3MgYSBwcm9ibGVtLgotICoK
LSAqIFRoZSBmb2xsb3dpbmcgaW1wbGVtZW50cyBkKS4KLSAqIFRoZSBvcGVyYXRvciBpbXBsZW1l
bnRhdGlvbnMgY3Jhc2g7IHRoaXMgaXMgaW50ZW50aW9uYWwgYW5kIHVzZWQgZm9yIGxpYnJhcnkg
ZGVidWdnaW5nLgotICoKLSAqIE5vdGU6IFRoaXMgaXMgY3VycmVudGx5IG9ubHkgZG9uZSBvbiBX
aW5kb3dzIGJlY2F1c2UKLSAqIHNvbWUgTGludXgvVW5peCBjb21waWxlcnMgaGF2ZSBwcm9ibGVt
cyB3aXRoIGRlZmluaW5nIGdsb2JhbCBuZXcvZGVsZXRlLgotICogT24gV2luZG93cywgaXQgaXMg
X01TQ19WRVI+PTEyMDAgZm9yIE1TVkMgNi4wIGFuZCBoaWdoZXIuCi0gKi8KLSNpZiBkZWZpbmVk
KF9fY3BsdXNwbHVzKSAmJiBVX0RFQlVHICYmIFVfT1ZFUlJJREVfQ1hYX0FMTE9DQVRJT04gJiYg
KF9NU0NfVkVSPj0xMjAwKSAmJiAhZGVmaW5lZChVX1NUQVRJQ19JTVBMRU1FTlRBVElPTikgJiYg
KGRlZmluZWQoVV9DT01NT05fSU1QTEVNRU5UQVRJT04pIHx8IGRlZmluZWQoVV9JMThOX0lNUExF
TUVOVEFUSU9OKSB8fCBkZWZpbmVkKFVfSU9fSU1QTEVNRU5UQVRJT04pIHx8IGRlZmluZWQoVV9M
QVlPVVRfSU1QTEVNRU5UQVRJT04pIHx8IGRlZmluZWQoVV9MQVlPVVRFWF9JTVBMRU1FTlRBVElP
TikpCi0KLSNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQSQotLyoqCi0gKiBHbG9iYWwgb3BlcmF0
b3IgbmV3LCBkZWZpbmVkIG9ubHkgaW5zaWRlIElDVTRDLCBtdXN0IG5vdCBiZSB1c2VkLgotICog
Q3Jhc2hlcyBpbnRlbnRpb25hbGx5LgotICogQGludGVybmFsCi0gKi8KLWlubGluZSB2b2lkICoK
LW9wZXJhdG9yIG5ldyhzaXplX3QgLypzaXplKi8pIHsKLSAgICBjaGFyICpxPU5VTEw7Ci0gICAg
KnE9NTsgLyogYnJlYWsgaXQgKi8KLSAgICByZXR1cm4gcTsKLX0KLQotI2lmZGVmIF9SZXRfYnl0
ZWNhcF8KLS8qIFRoaXMgaXMgb25seSBuZWVkZWQgdG8gc3VwcHJlc3MgYSBWaXN1YWwgQysrIDIw
MDggd2FybmluZyBmb3Igb3BlcmF0b3IgbmV3W10uICovCi1fUmV0X2J5dGVjYXBfKF9TaXplKQot
I2VuZGlmCi0vKioKLSAqIEdsb2JhbCBvcGVyYXRvciBuZXdbXSwgZGVmaW5lZCBvbmx5IGluc2lk
ZSBJQ1U0QywgbXVzdCBub3QgYmUgdXNlZC4KLSAqIENyYXNoZXMgaW50ZW50aW9uYWxseS4KLSAq
IEBpbnRlcm5hbAotICovCi1pbmxpbmUgdm9pZCAqCi1vcGVyYXRvciBuZXdbXShzaXplX3QgLypz
aXplKi8pIHsKLSAgICBjaGFyICpxPU5VTEw7Ci0gICAgKnE9NTsgLyogYnJlYWsgaXQgKi8KLSAg
ICByZXR1cm4gcTsKLX0KLQotLyoqCi0gKiBHbG9iYWwgb3BlcmF0b3IgZGVsZXRlLCBkZWZpbmVk
IG9ubHkgaW5zaWRlIElDVTRDLCBtdXN0IG5vdCBiZSB1c2VkLgotICogQ3Jhc2hlcyBpbnRlbnRp
b25hbGx5LgotICogQGludGVybmFsCi0gKi8KLWlubGluZSB2b2lkCi1vcGVyYXRvciBkZWxldGUo
dm9pZCAqIC8qcCovKSB7Ci0gICAgY2hhciAqcT1OVUxMOwotICAgICpxPTU7IC8qIGJyZWFrIGl0
ICovCi19Ci0KLS8qKgotICogR2xvYmFsIG9wZXJhdG9yIGRlbGV0ZVtdLCBkZWZpbmVkIG9ubHkg
aW5zaWRlIElDVTRDLCBtdXN0IG5vdCBiZSB1c2VkLgotICogQ3Jhc2hlcyBpbnRlbnRpb25hbGx5
LgotICogQGludGVybmFsCi0gKi8KLWlubGluZSB2b2lkCi1vcGVyYXRvciBkZWxldGVbXSh2b2lk
ICogLypwKi8pIHsKLSAgICBjaGFyICpxPU5VTEw7Ci0gICAgKnE9NTsgLyogYnJlYWsgaXQgKi8K
LX0KLQotI2VuZGlmIC8qIFVfSElERV9JTlRFUk5BTF9BUEkgKi8KLSNlbmRpZgotCi0vKj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PSovCi0vKiBVRXJyb3JDb2RlICovCi0vKj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSov
Ci0KLS8qKgotICogRXJyb3IgY29kZSB0byByZXBsYWNlIGV4Y2VwdGlvbiBoYW5kbGluZywgc28g
dGhhdCB0aGUgY29kZSBpcyBjb21wYXRpYmxlIHdpdGggYWxsIEMrKyBjb21waWxlcnMsCi0gKiBh
bmQgdG8gdXNlIHRoZSBzYW1lIG1lY2hhbmlzbSBmb3IgQyBhbmQgQysrLgotICoKLSAqIFxwYXIK
LSAqIElDVSBmdW5jdGlvbnMgdGhhdCB0YWtlIGEgcmVmZXJlbmNlIChDKyspIG9yIGEgcG9pbnRl
ciAoQykgdG8gYSBVRXJyb3JDb2RlCi0gKiBmaXJzdCB0ZXN0IGlmKFVfRkFJTFVSRShlcnJvckNv
ZGUpKSB7IHJldHVybiBpbW1lZGlhdGVseTsgfQotICogc28gdGhhdCBpbiBhIGNoYWluIG9mIHN1
Y2ggZnVuY3Rpb25zIHRoZSBmaXJzdCBvbmUgdGhhdCBzZXRzIGFuIGVycm9yIGNvZGUKLSAqIGNh
dXNlcyB0aGUgZm9sbG93aW5nIG9uZXMgdG8gbm90IHBlcmZvcm0gYW55IG9wZXJhdGlvbnMuCi0g
KgotICogXHBhcgotICogRXJyb3IgY29kZXMgc2hvdWxkIGJlIHRlc3RlZCB1c2luZyBVX0ZBSUxV
UkUoKSBhbmQgVV9TVUNDRVNTKCkuCi0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotdHlwZWRlZiBl
bnVtIFVFcnJvckNvZGUgewotICAgIC8qIFRoZSBvcmRlcmluZyBvZiBVX0VSUk9SX0lORk9fU1RB
UlQgVnMgVV9VU0lOR19GQUxMQkFDS19XQVJOSU5HIGxvb2tzIHdlaXJkCi0gICAgICogYW5kIGlz
IHRoYXQgd2F5IGJlY2F1c2UgVkMrKyBkZWJ1Z2dlciBkaXNwbGF5cyBmaXJzdCBlbmNvdW50ZXJl
ZCBjb25zdGFudCwKLSAgICAgKiB3aGljaCBpcyBub3QgdGhlIHdoYXQgdGhlIGNvZGUgaXMgdXNl
ZCBmb3IKLSAgICAgKi8KLQotICAgIFVfVVNJTkdfRkFMTEJBQ0tfV0FSTklORyAgPSAtMTI4LCAg
IC8qKjwgQSByZXNvdXJjZSBidW5kbGUgbG9va3VwIHJldHVybmVkIGEgZmFsbGJhY2sgcmVzdWx0
IChub3QgYW4gZXJyb3IpICovCi0KLSAgICBVX0VSUk9SX1dBUk5JTkdfU1RBUlQgICAgID0gLTEy
OCwgICAvKio8IFN0YXJ0IG9mIGluZm9ybWF0aW9uIHJlc3VsdHMgKHNlbWFudGljYWxseSBzdWNj
ZXNzZnVsKSAqLwotCi0gICAgVV9VU0lOR19ERUZBVUxUX1dBUk5JTkcgICA9IC0xMjcsICAgLyoq
PCBBIHJlc291cmNlIGJ1bmRsZSBsb29rdXAgcmV0dXJuZWQgYSByZXN1bHQgZnJvbSB0aGUgcm9v
dCBsb2NhbGUgKG5vdCBhbiBlcnJvcikgKi8KLQotICAgIFVfU0FGRUNMT05FX0FMTE9DQVRFRF9X
QVJOSU5HID0gLTEyNiwgLyoqPCBBIFNhZmVDbG9uZSBvcGVyYXRpb24gcmVxdWlyZWQgYWxsb2Nh
dGluZyBtZW1vcnkgKGluZm9ybWF0aW9uYWwgb25seSkgKi8KLQotICAgIFVfU1RBVEVfT0xEX1dB
Uk5JTkcgICAgICAgPSAtMTI1LCAgIC8qKjwgSUNVIGhhcyB0byB1c2UgY29tcGF0aWJpbGl0eSBs
YXllciB0byBjb25zdHJ1Y3QgdGhlIHNlcnZpY2UuIEV4cGVjdCBwZXJmb3JtYW5jZS9tZW1vcnkg
dXNhZ2UgZGVncmFkYXRpb24uIENvbnNpZGVyIHVwZ3JhZGluZyAqLwotCi0gICAgVV9TVFJJTkdf
Tk9UX1RFUk1JTkFURURfV0FSTklORyA9IC0xMjQsLyoqPCBBbiBvdXRwdXQgc3RyaW5nIGNvdWxk
IG5vdCBiZSBOVUwtdGVybWluYXRlZCBiZWNhdXNlIG91dHB1dCBsZW5ndGg9PWRlc3RDYXBhY2l0
eS4gKi8KLQotICAgIFVfU09SVF9LRVlfVE9PX1NIT1JUX1dBUk5JTkcgPSAtMTIzLCAvKio8IE51
bWJlciBvZiBsZXZlbHMgcmVxdWVzdGVkIGluIGdldEJvdW5kIGlzIGhpZ2hlciB0aGFuIHRoZSBu
dW1iZXIgb2YgbGV2ZWxzIGluIHRoZSBzb3J0IGtleSAqLwotCi0gICAgVV9BTUJJR1VPVVNfQUxJ
QVNfV0FSTklORyA9IC0xMjIsICAgLyoqPCBUaGlzIGNvbnZlcnRlciBhbGlhcyBjYW4gZ28gdG8g
ZGlmZmVyZW50IGNvbnZlcnRlciBpbXBsZW1lbnRhdGlvbnMgKi8KLQotICAgIFVfRElGRkVSRU5U
X1VDQV9WRVJTSU9OID0gLTEyMSwgICAgIC8qKjwgdWNvbF9vcGVuIGVuY291bnRlcmVkIGEgbWlz
bWF0Y2ggYmV0d2VlbiBVQ0EgdmVyc2lvbiBhbmQgY29sbGF0b3IgaW1hZ2UgdmVyc2lvbiwgc28g
dGhlIGNvbGxhdG9yIHdhcyBjb25zdHJ1Y3RlZCBmcm9tIHJ1bGVzLiBObyBpbXBhY3QgdG8gZnVy
dGhlciBmdW5jdGlvbiAqLwotICAgIAotICAgIFVfUExVR0lOX0NIQU5HRURfTEVWRUxfV0FSTklO
RyA9IC0xMjAsIC8qKjwgQSBwbHVnaW4gY2F1c2VkIGEgbGV2ZWwgY2hhbmdlLiBNYXkgbm90IGJl
IGFuIGVycm9yLCBidXQgbGF0ZXIgcGx1Z2lucyBtYXkgbm90IGxvYWQuICovCi0KLSAgICBVX0VS
Uk9SX1dBUk5JTkdfTElNSVQsICAgICAgICAgICAgICAvKio8IFRoaXMgbXVzdCBhbHdheXMgYmUg
dGhlIGxhc3Qgd2FybmluZyB2YWx1ZSB0byBpbmRpY2F0ZSB0aGUgbGltaXQgZm9yIFVFcnJvckNv
ZGUgd2FybmluZ3MgKGxhc3Qgd2FybmluZyBjb2RlICsxKSAqLwotCi0KLSAgICBVX1pFUk9fRVJS
T1IgICAgICAgICAgICAgID0gIDAsICAgICAvKio8IE5vIGVycm9yLCBubyB3YXJuaW5nLiAqLwot
Ci0gICAgVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SICA9ICAxLCAgICAgLyoqPCBTdGFydCBvZiBj
b2RlcyBpbmRpY2F0aW5nIGZhaWx1cmUgKi8KLSAgICBVX01JU1NJTkdfUkVTT1VSQ0VfRVJST1Ig
ID0gIDIsICAgICAvKio8IFRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgY2Fubm90IGJlIGZvdW5kICov
Ci0gICAgVV9JTlZBTElEX0ZPUk1BVF9FUlJPUiAgICA9ICAzLCAgICAgLyoqPCBEYXRhIGZvcm1h
dCBpcyBub3Qgd2hhdCBpcyBleHBlY3RlZCAqLwotICAgIFVfRklMRV9BQ0NFU1NfRVJST1IgICAg
ICAgPSAgNCwgICAgIC8qKjwgVGhlIHJlcXVlc3RlZCBmaWxlIGNhbm5vdCBiZSBmb3VuZCAqLwot
ICAgIFVfSU5URVJOQUxfUFJPR1JBTV9FUlJPUiAgPSAgNSwgICAgIC8qKjwgSW5kaWNhdGVzIGEg
YnVnIGluIHRoZSBsaWJyYXJ5IGNvZGUgKi8KLSAgICBVX01FU1NBR0VfUEFSU0VfRVJST1IgICAg
ID0gIDYsICAgICAvKio8IFVuYWJsZSB0byBwYXJzZSBhIG1lc3NhZ2UgKG1lc3NhZ2UgZm9ybWF0
KSAqLwotICAgIFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1IgPSAgNywgICAgIC8qKjwgTWVtb3J5
IGFsbG9jYXRpb24gZXJyb3IgKi8KLSAgICBVX0lOREVYX09VVE9GQk9VTkRTX0VSUk9SID0gIDgs
ICAgICAvKio8IFRyeWluZyB0byBhY2Nlc3MgdGhlIGluZGV4IHRoYXQgaXMgb3V0IG9mIGJvdW5k
cyAqLwotICAgIFVfUEFSU0VfRVJST1IgICAgICAgICAgICAgPSAgOSwgICAgIC8qKjwgRXF1aXZh
bGVudCB0byBKYXZhIFBhcnNlRXhjZXB0aW9uICovCi0gICAgVV9JTlZBTElEX0NIQVJfRk9VTkQg
ICAgICA9IDEwLCAgICAgLyoqPCBDaGFyYWN0ZXIgY29udmVyc2lvbjogVW5tYXBwYWJsZSBpbnB1
dCBzZXF1ZW5jZS4gSW4gb3RoZXIgQVBJczogSW52YWxpZCBjaGFyYWN0ZXIuICovCi0gICAgVV9U
UlVOQ0FURURfQ0hBUl9GT1VORCAgICA9IDExLCAgICAgLyoqPCBDaGFyYWN0ZXIgY29udmVyc2lv
bjogSW5jb21wbGV0ZSBpbnB1dCBzZXF1ZW5jZS4gKi8KLSAgICBVX0lMTEVHQUxfQ0hBUl9GT1VO
RCAgICAgID0gMTIsICAgICAvKio8IENoYXJhY3RlciBjb252ZXJzaW9uOiBJbGxlZ2FsIGlucHV0
IHNlcXVlbmNlL2NvbWJpbmF0aW9uIG9mIGlucHV0IHVuaXRzLiAqLwotICAgIFVfSU5WQUxJRF9U
QUJMRV9GT1JNQVQgICAgPSAxMywgICAgIC8qKjwgQ29udmVyc2lvbiB0YWJsZSBmaWxlIGZvdW5k
LCBidXQgY29ycnVwdGVkICovCi0gICAgVV9JTlZBTElEX1RBQkxFX0ZJTEUgICAgICA9IDE0LCAg
ICAgLyoqPCBDb252ZXJzaW9uIHRhYmxlIGZpbGUgbm90IGZvdW5kICovCi0gICAgVV9CVUZGRVJf
T1ZFUkZMT1dfRVJST1IgICA9IDE1LCAgICAgLyoqPCBBIHJlc3VsdCB3b3VsZCBub3QgZml0IGlu
IHRoZSBzdXBwbGllZCBidWZmZXIgKi8KLSAgICBVX1VOU1VQUE9SVEVEX0VSUk9SICAgICAgID0g
MTYsICAgICAvKio8IFJlcXVlc3RlZCBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBpbiBjdXJyZW50
IGNvbnRleHQgKi8KLSAgICBVX1JFU09VUkNFX1RZUEVfTUlTTUFUQ0ggID0gMTcsICAgICAvKio8
IGFuIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQgb3ZlciBhIHJlc291cmNlIHRoYXQgZG9lcyBub3Qg
c3VwcG9ydCBpdCAqLwotICAgIFVfSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0UgPSAxOCwgICAgIC8q
KjwgSVNPLTIwMjIgaWxsbGVnYWwgZXNjYXBlIHNlcXVlbmNlICovCi0gICAgVV9VTlNVUFBPUlRF
RF9FU0NBUEVfU0VRVUVOQ0UgPSAxOSwgLyoqPCBJU08tMjAyMiB1bnN1cHBvcnRlZCBlc2NhcGUg
c2VxdWVuY2UgKi8KLSAgICBVX05PX1NQQUNFX0FWQUlMQUJMRSAgICAgID0gMjAsICAgICAvKio8
IE5vIHNwYWNlIGF2YWlsYWJsZSBmb3IgaW4tYnVmZmVyIGV4cGFuc2lvbiBmb3IgQXJhYmljIHNo
YXBpbmcgKi8KLSAgICBVX0NFX05PVF9GT1VORF9FUlJPUiAgICAgID0gMjEsICAgICAvKio8IEN1
cnJlbnRseSB1c2VkIG9ubHkgd2hpbGUgc2V0dGluZyB2YXJpYWJsZSB0b3AsIGJ1dCBjYW4gYmUg
dXNlZCBnZW5lcmFsbHkgKi8KLSAgICBVX1BSSU1BUllfVE9PX0xPTkdfRVJST1IgID0gMjIsICAg
ICAvKio8IFVzZXIgdHJpZWQgdG8gc2V0IHZhcmlhYmxlIHRvcCB0byBhIHByaW1hcnkgdGhhdCBp
cyBsb25nZXIgdGhhbiB0d28gYnl0ZXMgKi8KLSAgICBVX1NUQVRFX1RPT19PTERfRVJST1IgICAg
ID0gMjMsICAgICAvKio8IElDVSBjYW5ub3QgY29uc3RydWN0IGEgc2VydmljZSBmcm9tIHRoaXMg
c3RhdGUsIGFzIGl0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgKi8KLSAgICBVX1RPT19NQU5ZX0FM
SUFTRVNfRVJST1IgID0gMjQsICAgICAvKio8IFRoZXJlIGFyZSB0b28gbWFueSBhbGlhc2VzIGlu
IHRoZSBwYXRoIHRvIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyB2ZXJ5IHBvc3NpYmxlIHRoYXQgYSBjaXJj
dWxhciBhbGlhcyBkZWZpbml0aW9uIGhhcyBvY2N1cmVkICovCi0gICAgVV9FTlVNX09VVF9PRl9T
WU5DX0VSUk9SICA9IDI1LCAgICAgLyoqPCBVRW51bWVyYXRpb24gb3V0IG9mIHN5bmMgd2l0aCB1
bmRlcmx5aW5nIGNvbGxlY3Rpb24gKi8KLSAgICBVX0lOVkFSSUFOVF9DT05WRVJTSU9OX0VSUk9S
ID0gMjYsICAvKio8IFVuYWJsZSB0byBjb252ZXJ0IGEgVUNoYXIqIHN0cmluZyB0byBjaGFyKiB3
aXRoIHRoZSBpbnZhcmlhbnQgY29udmVydGVyLiAqLwotICAgIFVfSU5WQUxJRF9TVEFURV9FUlJP
UiAgICAgPSAyNywgICAgIC8qKjwgUmVxdWVzdGVkIG9wZXJhdGlvbiBjYW4gbm90IGJlIGNvbXBs
ZXRlZCB3aXRoIElDVSBpbiBpdHMgY3VycmVudCBzdGF0ZSAqLwotICAgIFVfQ09MTEFUT1JfVkVS
U0lPTl9NSVNNQVRDSCA9IDI4LCAgIC8qKjwgQ29sbGF0b3IgdmVyc2lvbiBpcyBub3QgY29tcGF0
aWJsZSB3aXRoIHRoZSBiYXNlIHZlcnNpb24gKi8KLSAgICBVX1VTRUxFU1NfQ09MTEFUT1JfRVJS
T1IgID0gMjksICAgICAvKio8IENvbGxhdG9yIGlzIG9wdGlvbnMgb25seSBhbmQgbm8gYmFzZSBp
cyBzcGVjaWZpZWQgKi8KLSAgICBVX05PX1dSSVRFX1BFUk1JU1NJT04gICAgID0gMzAsICAgICAv
Kio8IEF0dGVtcHQgdG8gbW9kaWZ5IHJlYWQtb25seSBvciBjb25zdGFudCBkYXRhLiAqLwotCi0g
ICAgVV9TVEFOREFSRF9FUlJPUl9MSU1JVCwgICAgICAgICAgICAgLyoqPCBUaGlzIG11c3QgYWx3
YXlzIGJlIHRoZSBsYXN0IHZhbHVlIHRvIGluZGljYXRlIHRoZSBsaW1pdCBmb3Igc3RhbmRhcmQg
ZXJyb3JzICovCi0gICAgLyoKLSAgICAgKiB0aGUgZXJyb3IgY29kZSByYW5nZSAweDEwMDAwIDB4
MTAxMDAgYXJlIHJlc2VydmVkIGZvciBUcmFuc2xpdGVyYXRvcgotICAgICAqLwotICAgIFVfQkFE
X1ZBUklBQkxFX0RFRklOSVRJT049MHgxMDAwMCwvKio8IE1pc3NpbmcgJyQnIG9yIGR1cGxpY2F0
ZSB2YXJpYWJsZSBuYW1lICovCi0gICAgVV9QQVJTRV9FUlJPUl9TVEFSVCA9IDB4MTAwMDAsICAg
IC8qKjwgU3RhcnQgb2YgVHJhbnNsaXRlcmF0b3IgZXJyb3JzICovCi0gICAgVV9NQUxGT1JNRURf
UlVMRSwgICAgICAgICAgICAgICAgIC8qKjwgRWxlbWVudHMgb2YgYSBydWxlIGFyZSBtaXNwbGFj
ZWQgKi8KLSAgICBVX01BTEZPUk1FRF9TRVQsICAgICAgICAgICAgICAgICAgLyoqPCBBIFVuaWNv
ZGVTZXQgcGF0dGVybiBpcyBpbnZhbGlkKi8KLSAgICBVX01BTEZPUk1FRF9TWU1CT0xfUkVGRVJF
TkNFLCAgICAgLyoqPCBVTlVTRUQgYXMgb2YgSUNVIDIuNCAqLwotICAgIFVfTUFMRk9STUVEX1VO
SUNPREVfRVNDQVBFLCAgICAgICAvKio8IEEgVW5pY29kZSBlc2NhcGUgcGF0dGVybiBpcyBpbnZh
bGlkKi8KLSAgICBVX01BTEZPUk1FRF9WQVJJQUJMRV9ERUZJTklUSU9OLCAgLyoqPCBBIHZhcmlh
YmxlIGRlZmluaXRpb24gaXMgaW52YWxpZCAqLwotICAgIFVfTUFMRk9STUVEX1ZBUklBQkxFX1JF
RkVSRU5DRSwgICAvKio8IEEgdmFyaWFibGUgcmVmZXJlbmNlIGlzIGludmFsaWQgKi8KLSAgICBV
X01JU01BVENIRURfU0VHTUVOVF9ERUxJTUlURVJTLCAgLyoqPCBVTlVTRUQgYXMgb2YgSUNVIDIu
NCAqLwotICAgIFVfTUlTUExBQ0VEX0FOQ0hPUl9TVEFSVCwgICAgICAgICAvKio8IEEgc3RhcnQg
YW5jaG9yIGFwcGVhcnMgYXQgYW4gaWxsZWdhbCBwb3NpdGlvbiAqLwotICAgIFVfTUlTUExBQ0VE
X0NVUlNPUl9PRkZTRVQsICAgICAgICAvKio8IEEgY3Vyc29yIG9mZnNldCBvY2N1cnMgYXQgYW4g
aWxsZWdhbCBwb3NpdGlvbiAqLwotICAgIFVfTUlTUExBQ0VEX1FVQU5USUZJRVIsICAgICAgICAg
ICAvKio8IEEgcXVhbnRpZmllciBhcHBlYXJzIGFmdGVyIGEgc2VnbWVudCBjbG9zZSBkZWxpbWl0
ZXIgKi8KLSAgICBVX01JU1NJTkdfT1BFUkFUT1IsICAgICAgICAgICAgICAgLyoqPCBBIHJ1bGUg
Y29udGFpbnMgbm8gb3BlcmF0b3IgKi8KLSAgICBVX01JU1NJTkdfU0VHTUVOVF9DTE9TRSwgICAg
ICAgICAgLyoqPCBVTlVTRUQgYXMgb2YgSUNVIDIuNCAqLwotICAgIFVfTVVMVElQTEVfQU5URV9D
T05URVhUUywgICAgICAgICAvKio8IE1vcmUgdGhhbiBvbmUgYW50ZSBjb250ZXh0ICovCi0gICAg
VV9NVUxUSVBMRV9DVVJTT1JTLCAgICAgICAgICAgICAgIC8qKjwgTW9yZSB0aGFuIG9uZSBjdXJz
b3IgKi8KLSAgICBVX01VTFRJUExFX1BPU1RfQ09OVEVYVFMsICAgICAgICAgLyoqPCBNb3JlIHRo
YW4gb25lIHBvc3QgY29udGV4dCAqLwotICAgIFVfVFJBSUxJTkdfQkFDS1NMQVNILCAgICAgICAg
ICAgICAvKio8IEEgZGFuZ2xpbmcgYmFja3NsYXNoICovCi0gICAgVV9VTkRFRklORURfU0VHTUVO
VF9SRUZFUkVOQ0UsICAgIC8qKjwgQSBzZWdtZW50IHJlZmVyZW5jZSBkb2VzIG5vdCBjb3JyZXNw
b25kIHRvIGEgZGVmaW5lZCBzZWdtZW50ICovCi0gICAgVV9VTkRFRklORURfVkFSSUFCTEUsICAg
ICAgICAgICAgIC8qKjwgQSB2YXJpYWJsZSByZWZlcmVuY2UgZG9lcyBub3QgY29ycmVzcG9uZCB0
byBhIGRlZmluZWQgdmFyaWFibGUgKi8KLSAgICBVX1VOUVVPVEVEX1NQRUNJQUwsICAgICAgICAg
ICAgICAgLyoqPCBBIHNwZWNpYWwgY2hhcmFjdGVyIHdhcyBub3QgcXVvdGVkIG9yIGVzY2FwZWQg
Ki8KLSAgICBVX1VOVEVSTUlOQVRFRF9RVU9URSwgICAgICAgICAgICAgLyoqPCBBIGNsb3Npbmcg
c2luZ2xlIHF1b3RlIGlzIG1pc3NpbmcgKi8KLSAgICBVX1JVTEVfTUFTS19FUlJPUiwgICAgICAg
ICAgICAgICAgLyoqPCBBIHJ1bGUgaXMgaGlkZGVuIGJ5IGFuIGVhcmxpZXIgbW9yZSBnZW5lcmFs
IHJ1bGUgKi8KLSAgICBVX01JU1BMQUNFRF9DT01QT1VORF9GSUxURVIsICAgICAgLyoqPCBBIGNv
bXBvdW5kIGZpbHRlciBpcyBpbiBhbiBpbnZhbGlkIGxvY2F0aW9uICovCi0gICAgVV9NVUxUSVBM
RV9DT01QT1VORF9GSUxURVJTLCAgICAgIC8qKjwgTW9yZSB0aGFuIG9uZSBjb21wb3VuZCBmaWx0
ZXIgKi8KLSAgICBVX0lOVkFMSURfUkJUX1NZTlRBWCwgICAgICAgICAgICAgLyoqPCBBICI6Omlk
IiBydWxlIHdhcyBwYXNzZWQgdG8gdGhlIFJ1bGVCYXNlZFRyYW5zbGl0ZXJhdG9yIHBhcnNlciAq
LwotICAgIFVfSU5WQUxJRF9QUk9QRVJUWV9QQVRURVJOLCAgICAgICAvKio8IFVOVVNFRCBhcyBv
ZiBJQ1UgMi40ICovCi0gICAgVV9NQUxGT1JNRURfUFJBR01BLCAgICAgICAgICAgICAgIC8qKjwg
QSAndXNlJyBwcmFnbWEgaXMgaW52bGFsaWQgKi8KLSAgICBVX1VOQ0xPU0VEX1NFR01FTlQsICAg
ICAgICAgICAgICAgLyoqPCBBIGNsb3NpbmcgJyknIGlzIG1pc3NpbmcgKi8KLSAgICBVX0lMTEVH
QUxfQ0hBUl9JTl9TRUdNRU5ULCAgICAgICAgLyoqPCBVTlVTRUQgYXMgb2YgSUNVIDIuNCAqLwot
ICAgIFVfVkFSSUFCTEVfUkFOR0VfRVhIQVVTVEVELCAgICAgICAvKio8IFRvbyBtYW55IHN0YW5k
LWlucyBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiB2YXJpYWJsZSByYW5nZSAqLwotICAgIFVfVkFS
SUFCTEVfUkFOR0VfT1ZFUkxBUCwgICAgICAgICAvKio8IFRoZSB2YXJpYWJsZSByYW5nZSBvdmVy
bGFwcyBjaGFyYWN0ZXJzIHVzZWQgaW4gcnVsZXMgKi8KLSAgICBVX0lMTEVHQUxfQ0hBUkFDVEVS
LCAgICAgICAgICAgICAgLyoqPCBBIHNwZWNpYWwgY2hhcmFjdGVyIGlzIG91dHNpZGUgaXRzIGFs
bG93ZWQgY29udGV4dCAqLwotICAgIFVfSU5URVJOQUxfVFJBTlNMSVRFUkFUT1JfRVJST1IsICAv
Kio8IEludGVybmFsIHRyYW5zbGl0ZXJhdG9yIHN5c3RlbSBlcnJvciAqLwotICAgIFVfSU5WQUxJ
RF9JRCwgICAgICAgICAgICAgICAgICAgICAvKio8IEEgIjo6aWQiIHJ1bGUgc3BlY2lmaWVzIGFu
IHVua25vd24gdHJhbnNsaXRlcmF0b3IgKi8KLSAgICBVX0lOVkFMSURfRlVOQ1RJT04sICAgICAg
ICAgICAgICAgLyoqPCBBICImZm4oKSIgcnVsZSBzcGVjaWZpZXMgYW4gdW5rbm93biB0cmFuc2xp
dGVyYXRvciAqLwotICAgIFVfUEFSU0VfRVJST1JfTElNSVQsICAgICAgICAgICAgICAvKio8IFRo
ZSBsaW1pdCBmb3IgVHJhbnNsaXRlcmF0b3IgZXJyb3JzICovCi0KLSAgICAvKgotICAgICAqIHRo
ZSBlcnJvciBjb2RlIHJhbmdlIDB4MTAxMDAgMHgxMDIwMCBhcmUgcmVzZXJ2ZWQgZm9yIGZvcm1h
dHRpbmcgQVBJIHBhcnNpbmcgZXJyb3IKLSAgICAgKi8KLSAgICBVX1VORVhQRUNURURfVE9LRU49
MHgxMDEwMCwgICAgICAgLyoqPCBTeW50YXggZXJyb3IgaW4gZm9ybWF0IHBhdHRlcm4gKi8KLSAg
ICBVX0ZNVF9QQVJTRV9FUlJPUl9TVEFSVD0weDEwMTAwLCAgLyoqPCBTdGFydCBvZiBmb3JtYXQg
bGlicmFyeSBlcnJvcnMgKi8KLSAgICBVX01VTFRJUExFX0RFQ0lNQUxfU0VQQVJBVE9SUywgICAg
LyoqPCBNb3JlIHRoYW4gb25lIGRlY2ltYWwgc2VwYXJhdG9yIGluIG51bWJlciBwYXR0ZXJuICov
Ci0gICAgVV9NVUxUSVBMRV9ERUNJTUFMX1NFUEVSQVRPUlMgPSBVX01VTFRJUExFX0RFQ0lNQUxf
U0VQQVJBVE9SUywgLyoqPCBUeXBvOiBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBV
c2UgVV9NVUxUSVBMRV9ERUNJTUFMX1NFUEFSQVRPUlMgKi8KLSAgICBVX01VTFRJUExFX0VYUE9O
RU5USUFMX1NZTUJPTFMsICAgLyoqPCBNb3JlIHRoYW4gb25lIGV4cG9uZW50IHN5bWJvbCBpbiBu
dW1iZXIgcGF0dGVybiAqLwotICAgIFVfTUFMRk9STUVEX0VYUE9ORU5USUFMX1BBVFRFUk4sICAv
Kio8IEdyb3VwaW5nIHN5bWJvbCBpbiBleHBvbmVudCBwYXR0ZXJuICovCi0gICAgVV9NVUxUSVBM
RV9QRVJDRU5UX1NZTUJPTFMsICAgICAgIC8qKjwgTW9yZSB0aGFuIG9uZSBwZXJjZW50IHN5bWJv
bCBpbiBudW1iZXIgcGF0dGVybiAqLwotICAgIFVfTVVMVElQTEVfUEVSTUlMTF9TWU1CT0xTLCAg
ICAgICAvKio8IE1vcmUgdGhhbiBvbmUgcGVybWlsbCBzeW1ib2wgaW4gbnVtYmVyIHBhdHRlcm4g
Ki8KLSAgICBVX01VTFRJUExFX1BBRF9TUEVDSUZJRVJTLCAgICAgICAgLyoqPCBNb3JlIHRoYW4g
b25lIHBhZCBzeW1ib2wgaW4gbnVtYmVyIHBhdHRlcm4gKi8KLSAgICBVX1BBVFRFUk5fU1lOVEFY
X0VSUk9SLCAgICAgICAgICAgLyoqPCBTeW50YXggZXJyb3IgaW4gZm9ybWF0IHBhdHRlcm4gKi8K
LSAgICBVX0lMTEVHQUxfUEFEX1BPU0lUSU9OLCAgICAgICAgICAgLyoqPCBQYWQgc3ltYm9sIG1p
c3BsYWNlZCBpbiBudW1iZXIgcGF0dGVybiAqLwotICAgIFVfVU5NQVRDSEVEX0JSQUNFUywgICAg
ICAgICAgICAgICAvKio8IEJyYWNlcyBkbyBub3QgbWF0Y2ggaW4gbWVzc2FnZSBwYXR0ZXJuICov
Ci0gICAgVV9VTlNVUFBPUlRFRF9QUk9QRVJUWSwgICAgICAgICAgIC8qKjwgVU5VU0VEIGFzIG9m
IElDVSAyLjQgKi8KLSAgICBVX1VOU1VQUE9SVEVEX0FUVFJJQlVURSwgICAgICAgICAgLyoqPCBV
TlVTRUQgYXMgb2YgSUNVIDIuNCAqLwotICAgIFVfQVJHVU1FTlRfVFlQRV9NSVNNQVRDSCwgICAg
ICAgICAvKio8IEFyZ3VtZW50IG5hbWUgYW5kIGFyZ3VtZW50IGluZGV4IG1pc21hdGNoIGluIE1l
c3NhZ2VGb3JtYXQgZnVuY3Rpb25zICovCi0gICAgVV9EVVBMSUNBVEVfS0VZV09SRCwgICAgICAg
ICAgICAgIC8qKjwgRHVwbGljYXRlIGtleXdvcmQgaW4gUGx1cmFsRm9ybWF0ICovCi0gICAgVV9V
TkRFRklORURfS0VZV09SRCwgICAgICAgICAgICAgIC8qKjwgVW5kZWZpbmVkIFBsdXJhbCBrZXl3
b3JkICovCi0gICAgVV9ERUZBVUxUX0tFWVdPUkRfTUlTU0lORywgICAgICAgIC8qKjwgTWlzc2lu
ZyBERUZBVUxUIHJ1bGUgaW4gcGx1cmFsIHJ1bGVzICovCi0gICAgVV9ERUNJTUFMX05VTUJFUl9T
WU5UQVhfRVJST1IsICAgIC8qKjwgRGVjaW1hbCBudW1iZXIgc3ludGF4IGVycm9yICovCi0gICAg
VV9GT1JNQVRfSU5FWEFDVF9FUlJPUiwgICAgICAgICAgIC8qKjwgQ2Fubm90IGZvcm1hdCBhIG51
bWJlciBleGFjdGx5IGFuZCByb3VuZGluZyBtb2RlIGlzIFJPVU5EX1VOTkVDRVNTQVJZIEBzdGFi
bGUgSUNVIDQuOCAqLwotICAgIFVfRk1UX1BBUlNFX0VSUk9SX0xJTUlULCAgICAgICAgICAvKio8
IFRoZSBsaW1pdCBmb3IgZm9ybWF0IGxpYnJhcnkgZXJyb3JzICovCi0KLSAgICAvKgotICAgICAq
IHRoZSBlcnJvciBjb2RlIHJhbmdlIDB4MTAyMDAgMHgxMDJmZiBhcmUgcmVzZXJ2ZWQgZm9yIEJy
ZWFrIEl0ZXJhdG9yIHJlbGF0ZWQgZXJyb3IKLSAgICAgKi8KLSAgICBVX0JSS19JTlRFUk5BTF9F
UlJPUj0weDEwMjAwLCAgICAgICAgICAvKio8IEFuIGludGVybmFsIGVycm9yIChidWcpIHdhcyBk
ZXRlY3RlZC4gICAgICAgICAgICAgKi8KLSAgICBVX0JSS19FUlJPUl9TVEFSVD0weDEwMjAwLCAg
ICAgICAgICAgICAvKio8IFN0YXJ0IG9mIGNvZGVzIGluZGljYXRpbmcgQnJlYWsgSXRlcmF0b3Ig
ZmFpbHVyZXMgKi8KLSAgICBVX0JSS19IRVhfRElHSVRTX0VYUEVDVEVELCAgICAgICAgICAgICAv
Kio8IEhleCBkaWdpdHMgZXhwZWN0ZWQgYXMgcGFydCBvZiBhIGVzY2FwZWQgY2hhciBpbiBhIHJ1
bGUuICovCi0gICAgVV9CUktfU0VNSUNPTE9OX0VYUEVDVEVELCAgICAgICAgICAgICAgLyoqPCBN
aXNzaW5nICc7JyBhdCB0aGUgZW5kIG9mIGEgUkJCSSBydWxlLiAgICAgICAgICAgICovCi0gICAg
VV9CUktfUlVMRV9TWU5UQVgsICAgICAgICAgICAgICAgICAgICAgLyoqPCBTeW50YXggZXJyb3Ig
aW4gUkJCSSBydWxlLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgVV9CUktfVU5DTE9T
RURfU0VULCAgICAgICAgICAgICAgICAgICAgLyoqPCBVbmljb2RlU2V0IHdpdGluZyBhbiBSQkJJ
IHJ1bGUgbWlzc2luZyBhIGNsb3NpbmcgJ10nLiAgKi8KLSAgICBVX0JSS19BU1NJR05fRVJST1Is
ICAgICAgICAgICAgICAgICAgICAvKio8IFN5bnRheCBlcnJvciBpbiBSQkJJIHJ1bGUgYXNzaWdu
bWVudCBzdGF0ZW1lbnQuICAgKi8KLSAgICBVX0JSS19WQVJJQUJMRV9SRURGSU5JVElPTiwgICAg
ICAgICAgICAvKio8IFJCQkkgcnVsZSAkVmFyaWFibGUgcmVkZWZpbmVkLiAgICAgICAgICAgICAg
ICAgICAgKi8KLSAgICBVX0JSS19NSVNNQVRDSEVEX1BBUkVOLCAgICAgICAgICAgICAgICAvKio8
IE1pcy1tYXRjaGVkIHBhcmVudGhlc2VzIGluIGFuIFJCQkkgcnVsZS4gICAgICAgICAgKi8KLSAg
ICBVX0JSS19ORVdfTElORV9JTl9RVU9URURfU1RSSU5HLCAgICAgICAvKio8IE1pc3NpbmcgY2xv
c2luZyBxdW90ZSBpbiBhbiBSQkJJIHJ1bGUuICAgICAgICAgICAgKi8KLSAgICBVX0JSS19VTkRF
RklORURfVkFSSUFCTEUsICAgICAgICAgICAgICAvKio8IFVzZSBvZiBhbiB1bmRlZmluZWQgJFZh
cmlhYmxlIGluIGFuIFJCQkkgcnVsZS4gICAgKi8KLSAgICBVX0JSS19JTklUX0VSUk9SLCAgICAg
ICAgICAgICAgICAgICAgICAvKio8IEluaXRpYWxpemF0aW9uIGZhaWx1cmUuICBQcm9iYWJsZSBt
aXNzaW5nIElDVSBEYXRhLiAqLwotICAgIFVfQlJLX1JVTEVfRU1QVFlfU0VULCAgICAgICAgICAg
ICAgICAgIC8qKjwgUnVsZSBjb250YWlucyBhbiBlbXB0eSBVbmljb2RlIFNldC4gICAgICAgICAg
ICAgICAqLwotICAgIFVfQlJLX1VOUkVDT0dOSVpFRF9PUFRJT04sICAgICAgICAgICAgIC8qKjwg
ISFvcHRpb24gaW4gUkJCSSBydWxlcyBub3QgcmVjb2duaXplZC4gICAgICAgICAgICAqLwotICAg
IFVfQlJLX01BTEZPUk1FRF9SVUxFX1RBRywgICAgICAgICAgICAgIC8qKjwgVGhlIHtubm59IHRh
ZyBvbiBhIHJ1bGUgaXMgbWFsIGZvcm1lZCAgICAgICAgICAgICAqLwotICAgIFVfQlJLX0VSUk9S
X0xJTUlULCAgICAgICAgICAgICAgICAgICAgIC8qKjwgVGhpcyBtdXN0IGFsd2F5cyBiZSB0aGUg
bGFzdCB2YWx1ZSB0byBpbmRpY2F0ZSB0aGUgbGltaXQgZm9yIEJyZWFrIEl0ZXJhdG9yIGZhaWx1
cmVzICovCi0KLSAgICAvKgotICAgICAqIFRoZSBlcnJvciBjb2RlcyBpbiB0aGUgcmFuZ2UgMHgx
MDMwMC0weDEwM2ZmIGFyZSByZXNlcnZlZCBmb3IgcmVndWxhciBleHByZXNzaW9uIHJlbGF0ZWQg
ZXJycnMKLSAgICAgKi8KLSAgICBVX1JFR0VYX0lOVEVSTkFMX0VSUk9SPTB4MTAzMDAsICAgICAg
IC8qKjwgQW4gaW50ZXJuYWwgZXJyb3IgKGJ1Zykgd2FzIGRldGVjdGVkLiAgICAgICAgICAgICAg
Ki8KLSAgICBVX1JFR0VYX0VSUk9SX1NUQVJUPTB4MTAzMDAsICAgICAgICAgIC8qKjwgU3RhcnQg
b2YgY29kZXMgaW5kaWNhdGluZyBSZWdleHAgZmFpbHVyZXMgICAgICAgICAgKi8KLSAgICBVX1JF
R0VYX1JVTEVfU1lOVEFYLCAgICAgICAgICAgICAgICAgIC8qKjwgU3ludGF4IGVycm9yIGluIHJl
Z2V4cCBwYXR0ZXJuLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBVX1JFR0VYX0lOVkFMSURf
U1RBVEUsICAgICAgICAgICAgICAgIC8qKjwgUmVnZXhNYXRjaGVyIGluIGludmFsaWQgc3RhdGUg
Zm9yIHJlcXVlc3RlZCBvcGVyYXRpb24gKi8KLSAgICBVX1JFR0VYX0JBRF9FU0NBUEVfU0VRVUVO
Q0UsICAgICAgICAgIC8qKjwgVW5yZWNvZ25pemVkIGJhY2tzbGFzaCBlc2NhcGUgc2VxdWVuY2Ug
aW4gcGF0dGVybiAgKi8KLSAgICBVX1JFR0VYX1BST1BFUlRZX1NZTlRBWCwgICAgICAgICAgICAg
IC8qKjwgSW5jb3JyZWN0IFVuaWNvZGUgcHJvcGVydHkgICAgICAgICAgICAgICAgICAgICAgICAg
Ki8KLSAgICBVX1JFR0VYX1VOSU1QTEVNRU5URUQsICAgICAgICAgICAgICAgIC8qKjwgVXNlIG9m
IHJlZ2V4cCBmZWF0dXJlIHRoYXQgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4gKi8KLSAgICBVX1JF
R0VYX01JU01BVENIRURfUEFSRU4sICAgICAgICAgICAgIC8qKjwgSW5jb3JyZWN0bHkgbmVzdGVk
IHBhcmVudGhlc2VzIGluIHJlZ2V4cCBwYXR0ZXJuLiAgKi8KLSAgICBVX1JFR0VYX05VTUJFUl9U
T09fQklHLCAgICAgICAgICAgICAgIC8qKjwgRGVjaW1hbCBudW1iZXIgaXMgdG9vIGxhcmdlLiAg
ICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBVX1JFR0VYX0JBRF9JTlRFUlZBTCwgICAgICAg
ICAgICAgICAgIC8qKjwgRXJyb3IgaW4ge21pbixtYXh9IGludGVydmFsICAgICAgICAgICAgICAg
ICAgICAgICAgKi8KLSAgICBVX1JFR0VYX01BWF9MVF9NSU4sICAgICAgICAgICAgICAgICAgIC8q
KjwgSW4ge21pbixtYXh9LCBtYXggaXMgbGVzcyB0aGFuIG1pbi4gICAgICAgICAgICAgICAgKi8K
LSAgICBVX1JFR0VYX0lOVkFMSURfQkFDS19SRUYsICAgICAgICAgICAgIC8qKjwgQmFjay1yZWZl
cmVuY2UgdG8gYSBub24tZXhpc3RlbnQgY2FwdHVyZSBncm91cC4gICAgKi8KLSAgICBVX1JFR0VY
X0lOVkFMSURfRkxBRywgICAgICAgICAgICAgICAgIC8qKjwgSW52YWxpZCB2YWx1ZSBmb3IgbWF0
Y2ggbW9kZSBmbGFncy4gICAgICAgICAgICAgICAgKi8KLSAgICBVX1JFR0VYX0xPT0tfQkVISU5E
X0xJTUlULCAgICAgICAgICAgIC8qKjwgTG9vay1CZWhpbmQgcGF0dGVybiBtYXRjaGVzIG11c3Qg
aGF2ZSBhIGJvdW5kZWQgbWF4aW11bSBsZW5ndGguICAgICovCi0gICAgVV9SRUdFWF9TRVRfQ09O
VEFJTlNfU1RSSU5HLCAgICAgICAgICAvKio8IFJlZ2V4cHMgY2Fubm90IGhhdmUgVW5pY29kZVNl
dHMgY29udGFpbmluZyBzdHJpbmdzLiovCi0jaWZuZGVmIFVfSElERV9ERVBSRUNBVEVEX0FQSQot
ICAgIFVfUkVHRVhfT0NUQUxfVE9PX0JJRywgICAgICAgICAgICAgICAgLyoqPCBPY3RhbCBjaGFy
YWN0ZXIgY29uc3RhbnRzIG11c3QgYmUgPD0gMDM3Ny4gQGRlcHJlY2F0ZWQgSUNVIDU0LiBUaGlz
IGVycm9yIGNhbm5vdCBvY2N1ci4gKi8KLSNlbmRpZiAgLyogVV9ISURFX0RFUFJFQ0FURURfQVBJ
ICovCi0gICAgVV9SRUdFWF9NSVNTSU5HX0NMT1NFX0JSQUNLRVQ9VV9SRUdFWF9TRVRfQ09OVEFJ
TlNfU1RSSU5HKzIsIC8qKjwgTWlzc2luZyBjbG9zaW5nIGJyYWNrZXQgb24gYSBicmFja2V0IGV4
cHJlc3Npb24uICovCi0gICAgVV9SRUdFWF9JTlZBTElEX1JBTkdFLCAgICAgICAgICAgICAgICAv
Kio8IEluIGEgY2hhcmFjdGVyIHJhbmdlIFt4LXldLCB4IGlzIGdyZWF0ZXIgdGhhbiB5LiAgICov
Ci0gICAgVV9SRUdFWF9TVEFDS19PVkVSRkxPVywgICAgICAgICAgICAgICAvKio8IFJlZ3VsYXIg
ZXhwcmVzc2lvbiBiYWNrdHJhY2sgc3RhY2sgb3ZlcmZsb3cuICAgICAgICovCi0gICAgVV9SRUdF
WF9USU1FX09VVCwgICAgICAgICAgICAgICAgICAgICAvKio8IE1heGltdW0gYWxsb3dlZCBtYXRj
aCB0aW1lIGV4Y2VlZGVkICAgICAgICAgICAgICAgICovCi0gICAgVV9SRUdFWF9TVE9QUEVEX0JZ
X0NBTExFUiwgICAgICAgICAgICAvKio8IE1hdGNoaW5nIG9wZXJhdGlvbiBhYm9ydGVkIGJ5IHVz
ZXIgY2FsbGJhY2sgZm4uICAgICovCi0jaWZuZGVmIFVfSElERV9EUkFGVF9BUEkKLSAgICBVX1JF
R0VYX1BBVFRFUk5fVE9PX0JJRywgICAgICAgICAgICAgIC8qKjwgUGF0dGVybiBleGNlZWRzIGxp
bWl0cyBvbiBzaXplIG9yIGNvbXBsZXhpdHkuIEBkcmFmdCBJQ1UgNTUgKi8KLSAgICBVX1JFR0VY
X0lOVkFMSURfQ0FQVFVSRV9HUk9VUF9OQU1FLCAgIC8qKjwgSW52YWxpZCBjYXB0dXJlIGdyb3Vw
IG5hbWUuIEBkcmFmdCBJQ1UgNTUgKi8KLSNlbmRpZiAgLyogVV9ISURFX0RSQUZUX0FQSSAqLwot
ICAgIFVfUkVHRVhfRVJST1JfTElNSVQ9VV9SRUdFWF9TVE9QUEVEX0JZX0NBTExFUiszLCAvKio8
IFRoaXMgbXVzdCBhbHdheXMgYmUgdGhlIGxhc3QgdmFsdWUgdG8gaW5kaWNhdGUgdGhlIGxpbWl0
IGZvciByZWdleHAgZXJyb3JzICovCi0KLSAgICAvKgotICAgICAqIFRoZSBlcnJvciBjb2RlIGlu
IHRoZSByYW5nZSAweDEwNDAwLTB4MTA0ZmYgYXJlIHJlc2VydmVkIGZvciBJRE5BIHJlbGF0ZWQg
ZXJyb3IgY29kZXMKLSAgICAgKi8KLSAgICBVX0lETkFfUFJPSElCSVRFRF9FUlJPUj0weDEwNDAw
LAotICAgIFVfSUROQV9FUlJPUl9TVEFSVD0weDEwNDAwLAotICAgIFVfSUROQV9VTkFTU0lHTkVE
X0VSUk9SLAotICAgIFVfSUROQV9DSEVDS19CSURJX0VSUk9SLAotICAgIFVfSUROQV9TVEQzX0FT
Q0lJX1JVTEVTX0VSUk9SLAotICAgIFVfSUROQV9BQ0VfUFJFRklYX0VSUk9SLAotICAgIFVfSURO
QV9WRVJJRklDQVRJT05fRVJST1IsCi0gICAgVV9JRE5BX0xBQkVMX1RPT19MT05HX0VSUk9SLAot
ICAgIFVfSUROQV9aRVJPX0xFTkdUSF9MQUJFTF9FUlJPUiwKLSAgICBVX0lETkFfRE9NQUlOX05B
TUVfVE9PX0xPTkdfRVJST1IsCi0gICAgVV9JRE5BX0VSUk9SX0xJTUlULAotICAgIC8qCi0gICAg
ICogQWxpYXNlcyBmb3IgU3RyaW5nUHJlcAotICAgICAqLwotICAgIFVfU1RSSU5HUFJFUF9QUk9I
SUJJVEVEX0VSUk9SID0gVV9JRE5BX1BST0hJQklURURfRVJST1IsCi0gICAgVV9TVFJJTkdQUkVQ
X1VOQVNTSUdORURfRVJST1IgPSBVX0lETkFfVU5BU1NJR05FRF9FUlJPUiwKLSAgICBVX1NUUklO
R1BSRVBfQ0hFQ0tfQklESV9FUlJPUiA9IFVfSUROQV9DSEVDS19CSURJX0VSUk9SLAotICAgIAot
ICAgIC8qCi0gICAgICogVGhlIGVycm9yIGNvZGUgaW4gdGhlIHJhbmdlIDB4MTA1MDAtMHgxMDVm
ZiBhcmUgcmVzZXJ2ZWQgZm9yIFBsdWdpbiByZWxhdGVkIGVycm9yIGNvZGVzCi0gICAgICovCi0g
ICAgVV9QTFVHSU5fRVJST1JfU1RBUlQ9MHgxMDUwMCwgICAgICAgICAvKio8IFN0YXJ0IG9mIGNv
ZGVzIGluZGljYXRpbmcgcGx1Z2luIGZhaWx1cmVzICovCi0gICAgVV9QTFVHSU5fVE9PX0hJR0g9
MHgxMDUwMCwgICAgICAgICAgICAvKio8IFRoZSBwbHVnaW4ncyBsZXZlbCBpcyB0b28gaGlnaCB0
byBiZSBsb2FkZWQgcmlnaHQgbm93LiAqLwotICAgIFVfUExVR0lOX0RJRE5UX1NFVF9MRVZFTCwg
ICAgICAgICAgICAgLyoqPCBUaGUgcGx1Z2luIGRpZG4ndCBjYWxsIHVwbHVnX3NldFBsdWdMZXZl
bCBpbiByZXNwb25zZSB0byBhIFFVRVJZICovCi0gICAgVV9QTFVHSU5fRVJST1JfTElNSVQsICAg
ICAgICAgICAgICAgICAvKio8IFRoaXMgbXVzdCBhbHdheXMgYmUgdGhlIGxhc3QgdmFsdWUgdG8g
aW5kaWNhdGUgdGhlIGxpbWl0IGZvciBwbHVnaW4gZXJyb3JzICovCi0KLSAgICBVX0VSUk9SX0xJ
TUlUPVVfUExVR0lOX0VSUk9SX0xJTUlUICAgICAgLyoqPCBUaGlzIG11c3QgYWx3YXlzIGJlIHRo
ZSBsYXN0IHZhbHVlIHRvIGluZGljYXRlIHRoZSBsaW1pdCBmb3IgVUVycm9yQ29kZSAobGFzdCBl
cnJvciBjb2RlICsxKSAqLwotfSBVRXJyb3JDb2RlOwotCi0vKiBVc2UgdGhlIGZvbGxvd2luZyB0
byBkZXRlcm1pbmUgaWYgYW4gVUVycm9yQ29kZSByZXByZXNlbnRzICovCi0vKiBvcGVyYXRpb25h
bCBzdWNjZXNzIG9yIGZhaWx1cmUuICovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotICAgIC8qKgot
ICAgICAqIERvZXMgdGhlIGVycm9yIGNvZGUgaW5kaWNhdGUgc3VjY2Vzcz8KLSAgICAgKiBAc3Rh
YmxlIElDVSAyLjAKLSAgICAgKi8KLSAgICBzdGF0aWMKLSAgICBpbmxpbmUgVUJvb2wgVV9TVUND
RVNTKFVFcnJvckNvZGUgY29kZSkgeyByZXR1cm4gKFVCb29sKShjb2RlPD1VX1pFUk9fRVJST1Ip
OyB9Ci0gICAgLyoqCi0gICAgICogRG9lcyB0aGUgZXJyb3IgY29kZSBpbmRpY2F0ZSBhIGZhaWx1
cmU/Ci0gICAgICogQHN0YWJsZSBJQ1UgMi4wCi0gICAgICovCi0gICAgc3RhdGljCi0gICAgaW5s
aW5lIFVCb29sIFVfRkFJTFVSRShVRXJyb3JDb2RlIGNvZGUpIHsgcmV0dXJuIChVQm9vbCkoY29k
ZT5VX1pFUk9fRVJST1IpOyB9Ci0jZWxzZQotICAgIC8qKgotICAgICAqIERvZXMgdGhlIGVycm9y
IGNvZGUgaW5kaWNhdGUgc3VjY2Vzcz8KLSAgICAgKiBAc3RhYmxlIElDVSAyLjAKLSAgICAgKi8K
LSMgICBkZWZpbmUgVV9TVUNDRVNTKHgpICgoeCk8PVVfWkVST19FUlJPUikKLSAgICAvKioKLSAg
ICAgKiBEb2VzIHRoZSBlcnJvciBjb2RlIGluZGljYXRlIGEgZmFpbHVyZT8KLSAgICAgKiBAc3Rh
YmxlIElDVSAyLjAKLSAgICAgKi8KLSMgICBkZWZpbmUgVV9GQUlMVVJFKHgpICgoeCk+VV9aRVJP
X0VSUk9SKQotI2VuZGlmCi0KLS8qKgotICogUmV0dXJuIGEgc3RyaW5nIGZvciBhIFVFcnJvckNv
ZGUgdmFsdWUuCi0gKiBUaGUgc3RyaW5nIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2Yg
dGhlIGVycm9yIGNvZGUgY29uc3RhbnQKLSAqIGluIHRoZSBVRXJyb3JDb2RlIGVudW0gYWJvdmUu
Ci0gKiBAc3RhYmxlIElDVSAyLjAKLSAqLwotVV9TVEFCTEUgY29uc3QgY2hhciAqIFVfRVhQT1JU
MgotdV9lcnJvck5hbWUoVUVycm9yQ29kZSBjb2RlKTsKLQotCi0jZW5kaWYgLyogX1VUWVBFUyAq
LwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVu
Y2llcy9pY3UvdW5pY29kZS91dmVybnVtLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3V2ZXJudW0uaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggM2UyZWZmNjMxYzEwNTg1OTQwMGMyZDcwMmM1Mzg3Njg5NGJjYjA0Ny4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL2ljdS91bmljb2RlL3V2ZXJudW0u
aAorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKgotKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKgotKiAgIENvcHlyaWdodCAoQykgMjAwMC0yMDE1LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNz
IE1hY2hpbmVzCi0qICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qICAgZmlsZSBuYW1lOiAgdXZlcm51bS5o
Ci0qICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKLSogICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkK
LSogICBpbmRlbnRhdGlvbjo0Ci0qCi0qICAgQ3JlYXRlZCBieTogVmxhZGltaXIgV2VpbnN0ZWlu
Ci0qICAgVXBkYXRlZCBieTogU3RldmVuIFIuIExvb21pcwotKgotKi8KLQotLyoqCi0gKiBcZmls
ZQotICogXGJyaWVmIEMgQVBJOiBkZWZpbml0aW9ucyBvZiBJQ1UgdmVyc2lvbiBudW1iZXJzCi0g
KgotICogVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGJ5IHV2ZXJzaW9uLmggYW5kIG90aGVyIGZpbGVz
LiBUaGlzIGZpbGUgY29udGFpbnMgb25seQotICogbWFjcm9zIGFuZCBkZWZpbml0aW9ucy4gVGhl
IGFjdHVhbCB2ZXJzaW9uIG51bWJlcnMgYXJlIGRlZmluZWQgaGVyZS4KLSAqLwotCi0gLyoKLSAg
KiBJTVBPUlRBTlQ6IFdoZW4gdXBkYXRpbmcgdmVyc2lvbiwgdGhlIGZvbGxvd2luZyB0aGluZ3Mg
bmVlZCB0byBiZSBkb25lOgotICAqIHNvdXJjZS9jb21tb24vdW5pY29kZS91dmVybnVtLmggLSB0
aGlzIGZpbGU6IHVwZGF0ZSBtYWpvciwgbWlub3IsCi0gICogICAgICAgIHBhdGNobGV2ZWwsIHN1
ZmZpeCwgdmVyc2lvbiwgc2hvcnQgdmVyc2lvbiBjb25zdGFudHMsIG5hbWVzcGFjZSwKLSAgKiAg
ICAgICAgICAgICAgICAgICAgcmVuYW1pbmcgbWFjcm8sIGFuZCBjb3B5cmlnaHQKLSAgKgotICAq
IFRoZSBmb2xsb3dpbmcgZmlsZXMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwsIHdoaWNoIGNh
biBiZSBkb25lCi0gICogIGJ5IHJ1bm5pbmcgdGhlIFVOSVggbWFrZWZpbGUgdGFyZ2V0ICd1cGRh
dGUtd2luZG93cy1tYWtlZmlsZXMnIGluIGljdS9zb3VyY2UuCi0gICoKLSAgKgotICAqIHNvdXJj
ZS9jb21tb24vY29tbW9uLnZjcHJvaiAtIHVwZGF0ZSAnT3V0cHV0IGZpbGUgbmFtZScgb24gdGhl
IGxpbmsgdGFiIHNvCi0gICogICAgICAgICAgICAgICAgICAgdGhhdCBpdCBjb250YWlucyB0aGUg
bmV3IG1ham9yL21pbm9yIGNvbWJpbmF0aW9uCi0gICogc291cmNlL2kxOG4vaTE4bi52Y3Byb2og
LSBzYW1lIGFzIGZvciB0aGUgY29tbW9uLnZjcHJvagotICAqIHNvdXJjZS9sYXlvdXQvbGF5b3V0
LnZjcHJvaiAtIHNhbWUgYXMgZm9yIHRoZSBjb21tb24udmNwcm9qCi0gICogc291cmNlL2xheW91
dGV4L2xheW91dGV4LnZjcHJvaiAtIHNhbWUKLSAgKiBzb3VyY2Uvc3R1YmRhdGEvc3R1YmRhdGEu
dmNwcm9qIC0gc2FtZSBhcyBmb3IgdGhlIGNvbW1vbi52Y3Byb2oKLSAgKiBzb3VyY2UvaW8vaW8u
dmNwcm9qIC0gc2FtZSBhcyBmb3IgdGhlIGNvbW1vbi52Y3Byb2oKLSAgKiBzb3VyY2UvZGF0YS9t
YWtlZGF0YS5tYWsgLSBjaGFuZ2UgVV9JQ1VEQVRBX05BTUUgc28gdGhhdCBpdCBjb250YWlucwot
ICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuZXcgbWFqb3IvbWlub3IgY29tYmlu
YXRpb24gYW5kIHRoZSBVbmljb2RlIHZlcnNpb24uCi0gICovCi0KLSNpZm5kZWYgVVZFUk5VTV9I
Ci0jZGVmaW5lIFVWRVJOVU1fSAotCi0vKiogVGhlIHN0YW5kYXJkIGNvcHlyaWdodCBub3RpY2Ug
dGhhdCBnZXRzIGNvbXBpbGVkIGludG8gZWFjaCBsaWJyYXJ5LgotICogIFRoaXMgdmFsdWUgd2ls
bCBjaGFuZ2UgaW4gdGhlIHN1YnNlcXVlbnQgcmVsZWFzZXMgb2YgSUNVCi0gKiAgQHN0YWJsZSBJ
Q1UgMi40Ci0gKi8KLSNkZWZpbmUgVV9DT1BZUklHSFRfU1RSSU5HIFwKLSAgIiBDb3B5cmlnaHQg
KEMpIDIwMTUsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5k
IG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gIgotCi0vKiogVGhlIGN1cnJlbnQgSUNVIG1h
am9yIHZlcnNpb24gYXMgYW4gaW50ZWdlci4KLSAqICBUaGlzIHZhbHVlIHdpbGwgY2hhbmdlIGlu
IHRoZSBzdWJzZXF1ZW50IHJlbGVhc2VzIG9mIElDVQotICogIEBzdGFibGUgSUNVIDIuNAotICov
Ci0jZGVmaW5lIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDU1Ci0KLS8qKiBUaGUgY3VycmVudCBJ
Q1UgbWlub3IgdmVyc2lvbiBhcyBhbiBpbnRlZ2VyLgotICogIFRoaXMgdmFsdWUgd2lsbCBjaGFu
Z2UgaW4gdGhlIHN1YnNlcXVlbnQgcmVsZWFzZXMgb2YgSUNVCi0gKiAgQHN0YWJsZSBJQ1UgMi42
Ci0gKi8KLSNkZWZpbmUgVV9JQ1VfVkVSU0lPTl9NSU5PUl9OVU0gMQotCi0vKiogVGhlIGN1cnJl
bnQgSUNVIHBhdGNobGV2ZWwgdmVyc2lvbiBhcyBhbiBpbnRlZ2VyLgotICogIFRoaXMgdmFsdWUg
d2lsbCBjaGFuZ2UgaW4gdGhlIHN1YnNlcXVlbnQgcmVsZWFzZXMgb2YgSUNVCi0gKiAgQHN0YWJs
ZSBJQ1UgMi40Ci0gKi8KLSNkZWZpbmUgVV9JQ1VfVkVSU0lPTl9QQVRDSExFVkVMX05VTSAwCi0K
LS8qKiBUaGUgY3VycmVudCBJQ1UgYnVpbGQgbGV2ZWwgdmVyc2lvbiBhcyBhbiBpbnRlZ2VyLgot
ICogIFRoaXMgdmFsdWUgaXMgZm9yIHVzZSBieSBJQ1UgY2xpZW50cy4gSXQgZGVmYXVsdHMgdG8g
MC4KLSAqICBAc3RhYmxlIElDVSA0LjAKLSAqLwotI2lmbmRlZiBVX0lDVV9WRVJTSU9OX0JVSUxE
TEVWRUxfTlVNCi0jZGVmaW5lIFVfSUNVX1ZFUlNJT05fQlVJTERMRVZFTF9OVU0gMAotI2VuZGlm
Ci0KLS8qKiBHbHVlZCB2ZXJzaW9uIHN1ZmZpeCBmb3IgcmVuYW1lcnMKLSAqICBUaGlzIHZhbHVl
IHdpbGwgY2hhbmdlIGluIHRoZSBzdWJzZXF1ZW50IHJlbGVhc2VzIG9mIElDVQotICogIEBzdGFi
bGUgSUNVIDIuNgotICovCi0jZGVmaW5lIFVfSUNVX1ZFUlNJT05fU1VGRklYIF81NQotCi0vKioK
LSAqIFxkZWYgVV9ERUYyX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUKLSAqIEBpbnRlcm5hbAotICov
Ci0vKioKLSAqIFxkZWYgVV9ERUZfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRQotICogQGludGVybmFs
Ci0gKi8KLS8qKiBHbHVlZCB2ZXJzaW9uIHN1ZmZpeCBmdW5jdGlvbiBmb3IgcmVuYW1lcnMKLSAq
ICBUaGlzIHZhbHVlIHdpbGwgY2hhbmdlIGluIHRoZSBzdWJzZXF1ZW50IHJlbGVhc2VzIG9mIElD
VS4KLSAqICBJZiBhIGN1c3RvbSBzdWZmaXggKHN1Y2ggYXMgbWF0Y2hpbmcgbGlicmFyeSBzdWZm
aXhlcykgaXMgZGVzaXJlZCwgdGhpcyBjYW4gYmUgbW9kaWZpZWQuCi0gKiAgTm90ZSB0aGF0IGlm
IHByZXNlbnQsIHBsYXRmb3JtLmggbWF5IGNvbnRhaW4gYW4gZWFybGllciBkZWZpbml0aW9uIG9m
IHRoaXMgbWFjcm8uCi0gKiAgXGRlZiBVX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUKLSAqICBAc3Rh
YmxlIElDVSA0LjIKLSAqLwotCi0jaWZuZGVmIFVfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRQotI2lm
ZGVmIFVfSEFWRV9MSUJfU1VGRklYCi0jZGVmaW5lIFVfREVGX0lDVV9FTlRSWV9QT0lOVF9SRU5B
TUUoeCx5LHopIHggIyMgeSAjIyAgegotI2RlZmluZSBVX0RFRjJfSUNVX0VOVFJZX1BPSU5UX1JF
TkFNRSh4LHkseikgVV9ERUZfSUNVX0VOVFJZX1BPSU5UX1JFTkFNRSh4LHkseikKLSNkZWZpbmUg
VV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgpICAgIFVfREVGMl9JQ1VfRU5UUllfUE9JTlRfUkVO
QU1FKHgsVV9JQ1VfVkVSU0lPTl9TVUZGSVgsVV9MSUJfU1VGRklYX0NfTkFNRSkKLSNlbHNlCi0j
ZGVmaW5lIFVfREVGX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoeCx5KSB4ICMjIHkKLSNkZWZpbmUg
VV9ERUYyX0lDVV9FTlRSWV9QT0lOVF9SRU5BTUUoeCx5KSBVX0RFRl9JQ1VfRU5UUllfUE9JTlRf
UkVOQU1FKHgseSkKLSNkZWZpbmUgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgpICAgIFVfREVG
Ml9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKHgsVV9JQ1VfVkVSU0lPTl9TVUZGSVgpCi0jZW5kaWYK
LSNlbmRpZgotCi0vKiogVGhlIGN1cnJlbnQgSUNVIGxpYnJhcnkgdmVyc2lvbiBhcyBhIGRvdHRl
ZC1kZWNpbWFsIHN0cmluZy4gVGhlIHBhdGNobGV2ZWwKLSAqICBvbmx5IGFwcGVhcnMgaW4gdGhp
cyBzdHJpbmcgaWYgaXQgbm9uLXplcm8uCi0gKiAgVGhpcyB2YWx1ZSB3aWxsIGNoYW5nZSBpbiB0
aGUgc3Vic2VxdWVudCByZWxlYXNlcyBvZiBJQ1UKLSAqICBAc3RhYmxlIElDVSAyLjQKLSAqLwot
I2RlZmluZSBVX0lDVV9WRVJTSU9OICI1NS4xIgotCi0vKiogVGhlIGN1cnJlbnQgSUNVIGxpYnJh
cnkgbWFqb3IvbWlub3IgdmVyc2lvbiBhcyBhIHN0cmluZyB3aXRob3V0IGRvdHMsIGZvciBsaWJy
YXJ5IG5hbWUgc3VmZml4ZXMuCi0gKiAgVGhpcyB2YWx1ZSB3aWxsIGNoYW5nZSBpbiB0aGUgc3Vi
c2VxdWVudCByZWxlYXNlcyBvZiBJQ1UKLSAqICBAc3RhYmxlIElDVSAyLjYKLSAqLwotI2RlZmlu
ZSBVX0lDVV9WRVJTSU9OX1NIT1JUICI1NSIKLQotI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJ
Ci0vKiogRGF0YSB2ZXJzaW9uIGluIElDVTRDLgotICogQGludGVybmFsIElDVSA0LjQgSW50ZXJu
YWwgVXNlIE9ubHkKLSAqKi8KLSNkZWZpbmUgVV9JQ1VfREFUQV9WRVJTSU9OICI1NS4xIgotI2Vu
ZGlmICAvKiBVX0hJREVfSU5URVJOQUxfQVBJICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0g
KiBJQ1UgY29sbGF0aW9uIGZyYW1ld29yayB2ZXJzaW9uIGluZm9ybWF0aW9uCi0gKiBWZXJzaW9u
IGluZm8gdGhhdCBjYW4gYmUgb2J0YWluZWQgZnJvbSBhIGNvbGxhdG9yIGlzIGFmZmVjdGVkIGJ5
IHRoZXNlCi0gKiBudW1iZXJzIGluIGEgc2VjcmV0IGFuZCBtYWdpYyB3YXkuIFBsZWFzZSB1c2Ug
Y29sbGF0b3IgdmVyc2lvbiBhcyB3aG9sZQotICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0v
KioKLSAqIENvbGxhdGlvbiBydW50aW1lIHZlcnNpb24gKHNvcnQga2V5IGdlbmVyYXRvciwgc3Ry
Y29sbCkuCi0gKiBJZiB0aGUgdmVyc2lvbiBpcyBkaWZmZXJlbnQsIHNvcnQga2V5cyBmb3IgdGhl
IHNhbWUgc3RyaW5nIGNvdWxkIGJlIGRpZmZlcmVudC4KLSAqIFRoaXMgdmFsdWUgbWF5IGNoYW5n
ZSBpbiBzdWJzZXF1ZW50IHJlbGVhc2VzIG9mIElDVS4KLSAqIEBzdGFibGUgSUNVIDIuNAotICov
Ci0jZGVmaW5lIFVDT0xfUlVOVElNRV9WRVJTSU9OIDkKLQotLyoqCi0gKiBDb2xsYXRpb24gYnVp
bGRlciBjb2RlIHZlcnNpb24uCi0gKiBXaGVuIHRoaXMgaXMgZGlmZmVyZW50LCB0aGUgc2FtZSB0
YWlsb3JpbmcgbWlnaHQgcmVzdWx0Ci0gKiBpbiBhc3NpZ25pbmcgZGlmZmVyZW50IGNvbGxhdGlv
biBlbGVtZW50cyB0byBjb2RlIHBvaW50cy4KLSAqIFRoaXMgdmFsdWUgbWF5IGNoYW5nZSBpbiBz
dWJzZXF1ZW50IHJlbGVhc2VzIG9mIElDVS4KLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVm
aW5lIFVDT0xfQlVJTERFUl9WRVJTSU9OIDkKLQotI2lmbmRlZiBVX0hJREVfREVQUkVDQVRFRF9B
UEkKLS8qKgotICogQ29uc3RhbnQgMS4KLSAqIFRoaXMgd2FzIGludGVuZGVkIHRvIGJlIHRoZSB2
ZXJzaW9uIG9mIGNvbGxhdGlvbiB0YWlsb3JpbmdzLAotICogYnV0IGluc3RlYWQgdGhlIHRhaWxv
cmluZyBkYXRhIGNhcnJpZXMgYSB2ZXJzaW9uIG51bWJlci4KLSAqIEBkZXByZWNhdGVkIElDVSA1
NAotICovCi0jZGVmaW5lIFVDT0xfVEFJTE9SSU5HU19WRVJTSU9OIDEKLSNlbmRpZiAgLyogVV9I
SURFX0RFUFJFQ0FURURfQVBJICovCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5pY29kZS91dmVyc2lvbi5o
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2RlcGVuZGVuY2llcy9pY3UvdW5p
Y29kZS91dmVyc2lvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGUzMDkxMDU1
MTRhZGYzODIzN2EzYjdhNDA5ODAxYTgxNWE1ZDU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9k
ZXBlbmRlbmNpZXMvaWN1L3VuaWNvZGUvdXZlcnNpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDE5
MyArMCwwIEBACi0vKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgIENvcHlyaWdodCAoQykg
MjAwMC0yMDExLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCi0qICAgQ29ycG9yYXRp
b24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCi0qCi0qICAgZmlsZSBuYW1lOiAgdXZlcnNpb24uaAotKiAgIGVuY29kaW5nOiAgIFVTLUFT
Q0lJCi0qICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCi0qICAgaW5kZW50YXRpb246NAotKgot
KiAgIENyZWF0ZWQgYnk6IFZsYWRpbWlyIFdlaW5zdGVpbgotKgotKiAgR2V0cyBpbmNsdWRlZCBi
eSB1dHlwZXMuaCBhbmQgV2luZG93cyAucmMgZmlsZXMKLSovCi0KLS8qKgotICogXGZpbGUKLSAq
IFxicmllZiBDIEFQSTogQVBJIGZvciBhY2Nlc3NpbmcgSUNVIHZlcnNpb24gbnVtYmVycy4gCi0g
Ki8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIE1haW4gSUNVIHZlcnNpb24gaW5mb3JtYXRp
b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ki8KLQotI2lmbmRlZiBVVkVSU0lPTl9ICi0jZGVmaW5lIFVWRVJTSU9O
X0gKLQotI2luY2x1ZGUgInVuaWNvZGUvdW1hY2hpbmUuaCIKLQotLyogQWN0dWFsIHZlcnNpb24g
aW5mbyBsaXZlcyBpbiB1dmVybnVtLmggKi8KLSNpbmNsdWRlICJ1bmljb2RlL3V2ZXJudW0uaCIK
LQotLyoqIE1heGltdW0gbGVuZ3RoIG9mIHRoZSBjb3B5cmlnaHQgc3RyaW5nLgotICogIEBzdGFi
bGUgSUNVIDIuNAotICovCi0jZGVmaW5lIFVfQ09QWVJJR0hUX1NUUklOR19MRU5HVEggIDEyOAot
Ci0vKiogQW4gSUNVIHZlcnNpb24gY29uc2lzdHMgb2YgdXAgdG8gNCBudW1iZXJzIGZyb20gMC4u
MjU1LgotICogIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVmaW5lIFVfTUFYX1ZFUlNJT05fTEVO
R1RIIDQKLQotLyoqIEluIGEgc3RyaW5nLCBJQ1UgdmVyc2lvbiBmaWVsZHMgYXJlIGRlbGltaXRl
ZCBieSBkb3RzLgotICogIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVmaW5lIFVfVkVSU0lPTl9E
RUxJTUlURVIgJy4nCi0KLS8qKiBUaGUgbWF4aW11bSBsZW5ndGggb2YgYW4gSUNVIHZlcnNpb24g
c3RyaW5nLgotICogIEBzdGFibGUgSUNVIDIuNAotICovCi0jZGVmaW5lIFVfTUFYX1ZFUlNJT05f
U1RSSU5HX0xFTkdUSCAyMAotCi0vKiogVGhlIGJpbmFyeSBmb3JtIG9mIGEgdmVyc2lvbiBvbiBJ
Q1UgQVBJcyBpcyBhbiBhcnJheSBvZiA0IHVpbnQ4X3QuCi0gKiAgVG8gY29tcGFyZSB0d28gdmVy
c2lvbnMsIHVzZSBtZW1jbXAodjEsdjIsc2l6ZW9mKFVWZXJzaW9uSW5mbykpLgotICogIEBzdGFi
bGUgSUNVIDIuNAotICovCi10eXBlZGVmIHVpbnQ4X3QgVVZlcnNpb25JbmZvW1VfTUFYX1ZFUlNJ
T05fTEVOR1RIXTsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogQysrIG5hbWVzcGFjZSBp
ZiBzdXBwb3J0ZWQuIFZlcnNpb25lZCB1bmxlc3MgdmVyc2lvbmluZyBpcyBkaXNhYmxlZC4gICAg
ICAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKioKLSAqIFxkZWYgVV9OQU1FU1BBQ0Vf
QkVHSU4KLSAqIFRoaXMgaXMgdXNlZCB0byBiZWdpbiBhIGRlY2xhcmF0aW9uIG9mIGEgcHVibGlj
IElDVSBDKysgQVBJLgotICogV2hlbiBub3QgY29tcGlsaW5nIGZvciBDKyssIGl0IGRvZXMgbm90
aGluZy4KLSAqIFdoZW4gY29tcGlsaW5nIGZvciBDKyssIGl0IGJlZ2lucyBhbiBleHRlcm4gIkMr
KyIgbGlua2FnZSBibG9jayAodG8gcHJvdGVjdAotICogYWdhaW5zdCBjYXNlcyBpbiB3aGljaCBh
biBleHRlcm5hbCBjbGllbnQgaW5jbHVkZXMgSUNVIGhlYWRlciBmaWxlcyBpbnNpZGUKLSAqIGFu
IGV4dGVybiAiQyIgbGlua2FnZSBibG9jaykuCi0gKgotICogSXQgYWxzbyBiZWdpbnMgYSB2ZXJz
aW9uZWQtSUNVLW5hbWVzcGFjZSBibG9jay4KLSAqIEBzdGFibGUgSUNVIDIuNAotICovCi0KLS8q
KgotICogXGRlZiBVX05BTUVTUEFDRV9FTkQKLSAqIFRoaXMgaXMgdXNlZCB0byBlbmQgYSBkZWNs
YXJhdGlvbiBvZiBhIHB1YmxpYyBJQ1UgQysrIEFQSS4KLSAqIFdoZW4gbm90IGNvbXBpbGluZyBm
b3IgQysrLCBpdCBkb2VzIG5vdGhpbmcuCi0gKiBXaGVuIGNvbXBpbGluZyBmb3IgQysrLCBpdCBl
bmRzIHRoZSBleHRlcm4gIkMrKyIgYmxvY2sgYmVndW4gYnkKLSAqIFVfTkFNRVNQQUNFX0JFR0lO
LgotICoKLSAqIEl0IGFsc28gZW5kcyB0aGUgdmVyc2lvbmVkLUlDVS1uYW1lc3BhY2UgYmxvY2sg
YmVndW4gYnkgVV9OQU1FU1BBQ0VfQkVHSU4uCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwotCi0v
KioKLSAqIFxkZWYgVV9OQU1FU1BBQ0VfVVNFCi0gKiBUaGlzIGlzIHVzZWQgdG8gc3BlY2lmeSB0
aGF0IHRoZSByZXN0IG9mIHRoZSBjb2RlIHVzZXMgdGhlCi0gKiBwdWJsaWMgSUNVIEMrKyBBUEkg
bmFtZXNwYWNlLgotICogVGhpcyBpcyBpbnZva2VkIGJ5IGRlZmF1bHQ7IHdlIHJlY29tbWVuZCB0
aGF0IHlvdSB0dXJuIGl0IG9mZjoKLSAqIFNlZSB0aGUgIlJlY29tbWVuZGVkIEJ1aWxkIE9wdGlv
bnMiIHNlY3Rpb24gb2YgdGhlIElDVTRDIHJlYWRtZQotICogKGh0dHA6Ly9zb3VyY2UuaWN1LXBy
b2plY3Qub3JnL3JlcG9zL2ljdS9pY3UvdHJ1bmsvcmVhZG1lLmh0bWwjUmVjQnVpbGQpCi0gKiBA
c3RhYmxlIElDVSAyLjQKLSAqLwotCi0vKioKLSAqIFxkZWYgVV9OQU1FU1BBQ0VfUVVBTElGSUVS
Ci0gKiBUaGlzIGlzIHVzZWQgdG8gcXVhbGlmeSB0aGF0IGEgZnVuY3Rpb24gb3IgY2xhc3MgaXMg
cGFydCBvZgotICogdGhlIHB1YmxpYyBJQ1UgQysrIEFQSSBuYW1lc3BhY2UuCi0gKgotICogVGhp
cyBtYWNybyBpcyB1bm5lY2Vzc2FyeSBzaW5jZSBJQ1UgNDkgcmVxdWlyZXMgbmFtZXNwYWNlIHN1
cHBvcnQuCi0gKiBZb3UgY2FuIGp1c3QgdXNlICJpY3U6OiIgaW5zdGVhZC4KLSAqIEBzdGFibGUg
SUNVIDIuNAotICovCi0KLS8qIERlZmluZSBuYW1lc3BhY2Ugc3ltYm9scyBpZiB0aGUgY29tcGls
ZXIgc3VwcG9ydHMgaXQuICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLSMgICBpZiBVX0RJU0FCTEVf
UkVOQU1JTkcKLSMgICAgICAgZGVmaW5lIFVfSUNVX05BTUVTUEFDRSBpY3UKLSAgICAgICAgbmFt
ZXNwYWNlIFVfSUNVX05BTUVTUEFDRSB7IH0KLSMgICBlbHNlCi0jICAgICAgIGRlZmluZSBVX0lD
VV9OQU1FU1BBQ0UgVV9JQ1VfRU5UUllfUE9JTlRfUkVOQU1FKGljdSkKLSAgICAgICAgbmFtZXNw
YWNlIFVfSUNVX05BTUVTUEFDRSB7IH0KLSAgICAgICAgbmFtZXNwYWNlIGljdSA9IFVfSUNVX05B
TUVTUEFDRTsKLSMgICBlbmRpZgotCi0jICAgZGVmaW5lIFVfTkFNRVNQQUNFX0JFR0lOIGV4dGVy
biAiQysrIiB7IG5hbWVzcGFjZSBVX0lDVV9OQU1FU1BBQ0UgewotIyAgIGRlZmluZSBVX05BTUVT
UEFDRV9FTkQgfSB9Ci0jICAgZGVmaW5lIFVfTkFNRVNQQUNFX1VTRSB1c2luZyBuYW1lc3BhY2Ug
VV9JQ1VfTkFNRVNQQUNFOwotIyAgIGRlZmluZSBVX05BTUVTUEFDRV9RVUFMSUZJRVIgVV9JQ1Vf
TkFNRVNQQUNFOjoKLQotIyAgIGlmbmRlZiBVX1VTSU5HX0lDVV9OQU1FU1BBQ0UKLSMgICAgICAg
ZGVmaW5lIFVfVVNJTkdfSUNVX05BTUVTUEFDRSAxCi0jICAgZW5kaWYKLSMgICBpZiBVX1VTSU5H
X0lDVV9OQU1FU1BBQ0UKLSAgICAgICAgVV9OQU1FU1BBQ0VfVVNFCi0jICAgZW5kaWYKLSNlbHNl
Ci0jICAgZGVmaW5lIFVfTkFNRVNQQUNFX0JFR0lOCi0jICAgZGVmaW5lIFVfTkFNRVNQQUNFX0VO
RAotIyAgIGRlZmluZSBVX05BTUVTUEFDRV9VU0UKLSMgICBkZWZpbmUgVV9OQU1FU1BBQ0VfUVVB
TElGSUVSCi0jZW5kaWYKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogR2VuZXJhbCB2ZXJz
aW9uIGhlbHBlciBmdW5jdGlvbnMuIERlZmluaXRpb25zIGluIHB1dGlsLmMgICAgICAgICAgICAg
ICAgICAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKioKLSAqIFBhcnNlIGEgc3RyaW5n
IHdpdGggZG90dGVkLWRlY2ltYWwgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQKLSAqIGZpbGwgaW4g
YSBVVmVyc2lvbkluZm8gc3RydWN0dXJlIHdpdGggdGhlIHJlc3VsdC4KLSAqIERlZmluaXRpb24g
b2YgdGhpcyBmdW5jdGlvbiBsaXZlcyBpbiBwdXRpbC5jCi0gKgotICogQHBhcmFtIHZlcnNpb25B
cnJheSBUaGUgZGVzdGluYXRpb24gc3RydWN0dXJlIGZvciB0aGUgdmVyc2lvbiBpbmZvcm1hdGlv
bi4KLSAqIEBwYXJhbSB2ZXJzaW9uU3RyaW5nIEEgc3RyaW5nIHdpdGggZG90dGVkLWRlY2ltYWwg
dmVyc2lvbiBpbmZvcm1hdGlvbiwKLSAqICAgICAgICAgICAgICAgICAgICAgIHdpdGggdXAgdG8g
Zm91ciBub24tbmVnYXRpdmUgbnVtYmVyIGZpZWxkcyB3aXRoCi0gKiAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZXMgb2YgdXAgdG8gMjU1IGVhY2guCi0gKiBAc3RhYmxlIElDVSAyLjQKLSAqLwot
VV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKLXVfdmVyc2lvbkZyb21TdHJpbmcoVVZlcnNpb25JbmZv
IHZlcnNpb25BcnJheSwgY29uc3QgY2hhciAqdmVyc2lvblN0cmluZyk7Ci0KLS8qKgotICogUGFy
c2UgYSBVbmljb2RlIHN0cmluZyB3aXRoIGRvdHRlZC1kZWNpbWFsIHZlcnNpb24gaW5mb3JtYXRp
b24gYW5kCi0gKiBmaWxsIGluIGEgVVZlcnNpb25JbmZvIHN0cnVjdHVyZSB3aXRoIHRoZSByZXN1
bHQuCi0gKiBEZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbGl2ZXMgaW4gcHV0aWwuYwotICoK
LSAqIEBwYXJhbSB2ZXJzaW9uQXJyYXkgVGhlIGRlc3RpbmF0aW9uIHN0cnVjdHVyZSBmb3IgdGhl
IHZlcnNpb24gaW5mb3JtYXRpb24uCi0gKiBAcGFyYW0gdmVyc2lvblN0cmluZyBBIFVuaWNvZGUg
c3RyaW5nIHdpdGggZG90dGVkLWRlY2ltYWwgdmVyc2lvbgotICogICAgICAgICAgICAgICAgICAg
ICAgaW5mb3JtYXRpb24sIHdpdGggdXAgdG8gZm91ciBub24tbmVnYXRpdmUgbnVtYmVyCi0gKiAg
ICAgICAgICAgICAgICAgICAgICBmaWVsZHMgd2l0aCB2YWx1ZXMgb2YgdXAgdG8gMjU1IGVhY2gu
Ci0gKiBAc3RhYmxlIElDVSA0LjIKLSAqLwotVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKLXVfdmVy
c2lvbkZyb21VU3RyaW5nKFVWZXJzaW9uSW5mbyB2ZXJzaW9uQXJyYXksIGNvbnN0IFVDaGFyICp2
ZXJzaW9uU3RyaW5nKTsKLQotCi0vKioKLSAqIFdyaXRlIGEgc3RyaW5nIHdpdGggZG90dGVkLWRl
Y2ltYWwgdmVyc2lvbiBpbmZvcm1hdGlvbiBhY2NvcmRpbmcKLSAqIHRvIHRoZSBpbnB1dCBVVmVy
c2lvbkluZm8uCi0gKiBEZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24gbGl2ZXMgaW4gcHV0aWwu
YwotICoKLSAqIEBwYXJhbSB2ZXJzaW9uQXJyYXkgVGhlIHZlcnNpb24gaW5mb3JtYXRpb24gdG8g
YmUgd3JpdHRlbiBhcyBhIHN0cmluZy4KLSAqIEBwYXJhbSB2ZXJzaW9uU3RyaW5nIEEgc3RyaW5n
IGJ1ZmZlciB0aGF0IHdpbGwgYmUgZmlsbGVkIGluIHdpdGgKLSAqICAgICAgICAgICAgICAgICAg
ICAgIGEgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG51bWVyaWMgdmVyc2lvbgotICogICAg
ICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gaW4gdmVyc2lvbkFycmF5LgotICogICAgICAg
ICAgICAgICAgICAgICAgVGhlIGJ1ZmZlciBzaXplIG11c3QgYmUgYXQgbGVhc3QgVV9NQVhfVkVS
U0lPTl9TVFJJTkdfTEVOR1RILgotICogQHN0YWJsZSBJQ1UgMi40Ci0gKi8KLVVfU1RBQkxFIHZv
aWQgVV9FWFBPUlQyCi11X3ZlcnNpb25Ub1N0cmluZyhjb25zdCBVVmVyc2lvbkluZm8gdmVyc2lv
bkFycmF5LCBjaGFyICp2ZXJzaW9uU3RyaW5nKTsKLQotLyoqCi0gKiBHZXRzIHRoZSBJQ1UgcmVs
ZWFzZSB2ZXJzaW9uLiAgVGhlIHZlcnNpb24gYXJyYXkgc3RvcmVzIHRoZSB2ZXJzaW9uIGluZm9y
bWF0aW9uCi0gKiBmb3IgSUNVLiAgRm9yIGV4YW1wbGUsIHJlbGVhc2UgIjEuMy4zMS4yIiBpcyB0
aGVuIHJlcHJlc2VudGVkIGFzIDB4MDEwMzFGMDIuCi0gKiBEZWZpbml0aW9uIG9mIHRoaXMgZnVu
Y3Rpb24gbGl2ZXMgaW4gcHV0aWwuYwotICoKLSAqIEBwYXJhbSB2ZXJzaW9uQXJyYXkgdGhlIHZl
cnNpb24gIyBpbmZvcm1hdGlvbiwgdGhlIHJlc3VsdCB3aWxsIGJlIGZpbGxlZCBpbgotICogQHN0
YWJsZSBJQ1UgMi4wCi0gKi8KLVVfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCi11X2dldFZlcnNpb24o
VVZlcnNpb25JbmZvIHZlcnNpb25BcnJheSk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvdW5pY29kZS5jcHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZGVwZW5kZW5jaWVzL3VuaWNvZGUuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTI4ZGIwODAyNzZiMzcwOTEwN2JiZjA4MTU3
MjhkZGE5N2UwOTI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kZXBlbmRlbmNpZXMvdW5pY29k
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gU3R1YiBvdXQgYWxsIHVuaWNvZGUgdGhpbmdz
LiBPdXIgYmVuY2htYXJrcyBzaG91bGRuJ3QgYmUgdXNpbmcgdGhlbS4KLQotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0KLWV4dGVybiAiQyIgewotdm9pZCB1X2NoYXJEaXJlY3Rpb25fNTUo
KSB7IENSQVNIKCk7IH0KLXZvaWQgdV9lcnJvck5hbWVfNTUoKSB7IENSQVNIKCk7IH0KLXZvaWQg
dV9mb2xkQ2FzZV81NSgpIHsgQ1JBU0goKTsgfQotdm9pZCB1X21lbWNhc2VjbXBfNTUoKSB7IENS
QVNIKCk7IH0KLXZvaWQgdV9zdHJGb2xkQ2FzZV81NSgpIHsgQ1JBU0goKTsgfQotdm9pZCB1X3N0
clRvTG93ZXJfNTUoKSB7IENSQVNIKCk7IH0KLXZvaWQgdV9zdHJUb1VwcGVyXzU1KCkgeyBDUkFT
SCgpOyB9Ci12b2lkIHVfdG9sb3dlcl81NSgpIHsgQ1JBU0goKTsgfQotdm9pZCB1X3RvdXBwZXJf
NTUoKSB7IENSQVNIKCk7IH0KLXZvaWQgdWJya19jbG9zZV81NSgpIHsgQ1JBU0goKTsgfQotdm9p
ZCB1YnJrX2N1cnJlbnRfNTUoKSB7IENSQVNIKCk7IH0KLXZvaWQgdWJya19mb2xsb3dpbmdfNTUo
KSB7IENSQVNIKCk7IH0KLXZvaWQgdWJya19nZXRSdWxlU3RhdHVzXzU1KCkgeyBDUkFTSCgpOyB9
Ci12b2lkIHVicmtfbmV4dF81NSgpIHsgQ1JBU0goKTsgfQotdm9pZCB1YnJrX29wZW5fNTUoKSB7
IENSQVNIKCk7IH0KLXZvaWQgdWJya19zZXRUZXh0XzU1KCkgeyBDUkFTSCgpOyB9Ci12b2lkIHVi
cmtfc2V0VVRleHRfNTUoKSB7IENSQVNIKCk7IH0KLXZvaWQgdWxvY19zZXRLZXl3b3JkVmFsdWVf
NTUoKSB7IENSQVNIKCk7IH0KLXZvaWQgdXRleHRfY2xvc2VfNTUoKSB7IENSQVNIKCk7IH0KLXZv
aWQgdXRleHRfc2V0dXBfNTUoKSB7IENSQVNIKCk7IH0KLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kdG9hLmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi9kdG9hLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIz
YjE2MWIzYWRmYzk1YjQxZDY1NjQ2MjMxNjk3ZDJhODkyZTU0Ny4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvZHRvYS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzExICswLDAgQEAKLS8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ci0gKgotICogVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KLSAq
Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDIwMDAsIDIwMDEgYnkgTHVjZW50IFRlY2hub2xvZ2ll
cy4KLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCwg
MjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUGVybWlz
c2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBm
b3IgYW55Ci0gKiBwdXJwb3NlIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRl
ZCB0aGF0IHRoaXMgZW50aXJlIG5vdGljZQotICogaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv
ZiBhbnkgc29mdHdhcmUgd2hpY2ggaXMgb3IgaW5jbHVkZXMgYSBjb3B5Ci0gKiBvciBtb2RpZmlj
YXRpb24gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgaW4gYWxsIGNvcGllcyBvZiB0aGUgc3VwcG9ydGlu
ZwotICogZG9jdW1lbnRhdGlvbiBmb3Igc3VjaCBzb2Z0d2FyZS4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIEJFSU5HIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRAotICogV0FSUkFOVFkuICBJTiBQQVJUSUNVTEFSLCBORUlUSEVSIFRIRSBBVVRIT1IgTk9S
IExVQ0VOVCBNQUtFUyBBTlkKLSAqIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIEFOWSBL
SU5EIENPTkNFUk5JTkcgVEhFIE1FUkNIQU5UQUJJTElUWQotICogT0YgVEhJUyBTT0ZUV0FSRSBP
UiBJVFMgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqCi0gKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot
Ci0vKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBNLiBHYXkgKGRtZyBhdCBhY20g
ZG90IG9yZywKLSAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAiIGFuZCAiIGRvdCAiIGNoYW5n
ZWQgdG8gIi4iKS4gICAgKi8KLQotLyogT24gYSBtYWNoaW5lIHdpdGggSUVFRSBleHRlbmRlZC1w
cmVjaXNpb24gcmVnaXN0ZXJzLCBpdCBpcwotICogbmVjZXNzYXJ5IHRvIHNwZWNpZnkgZG91Ymxl
LXByZWNpc2lvbiAoNTMtYml0KSByb3VuZGluZyBwcmVjaXNpb24KLSAqIGJlZm9yZSBpbnZva2lu
ZyBzdHJ0b2Qgb3IgZHRvYS4gIElmIHRoZSBtYWNoaW5lIHVzZXMgKHRoZSBlcXVpdmFsZW50Ci0g
KiBvZikgSW50ZWwgODB4ODcgYXJpdGhtZXRpYywgdGhlIGNhbGwKLSAqICAgIF9jb250cm9sODco
UENfNTMsIE1DV19QQyk7Ci0gKiBkb2VzIHRoaXMgd2l0aCBtYW55IGNvbXBpbGVycy4gIFdoZXRo
ZXIgdGhpcyBvciBhbm90aGVyIGNhbGwgaXMKLSAqIGFwcHJvcHJpYXRlIGRlcGVuZHMgb24gdGhl
IGNvbXBpbGVyOyBmb3IgdGhpcyB0byB3b3JrLCBpdCBtYXkgYmUKLSAqIG5lY2Vzc2FyeSB0byAj
aW5jbHVkZSAiZmxvYXQuaCIgb3IgYW5vdGhlciBzeXN0ZW0tZGVwZW5kZW50IGhlYWRlcgotICog
ZmlsZS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiZHRvYS5oIgotCi0j
aW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLQotI2lmIENPTVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDI0NCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjQ1KQotI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQ1NTQpCi0jZW5kaWYKLQotI2lmIENQVShQUEM2NCkgfHwgQ1BVKFg4Nl82NCkgfHwg
Q1BVKEFSTTY0KQotLy8gRklYTUU6IHNob3VsZCB3ZSBlbmFibGUgdGhpcyBvbiBhbGwgNjQtYml0
IENQVXM/Ci0vLyA2NC1iaXQgZW11bGF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBjb21waWxlciBpcyBs
aWtlbHkgdG8gYmUgc2xvd2VyIHRoYW4gZHRvYSBvd24gY29kZSBvbiAzMi1iaXQgaGFyZHdhcmUu
Ci0jZGVmaW5lIFVTRV9MT05HX0xPTkcKLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotc3Rh
dGljIFN0YXRpY0xvY2sgc19kdG9hUDVNdXRleDsKLQotdHlwZWRlZiB1bmlvbiB7Ci0gICAgZG91
YmxlIGQ7Ci0gICAgdWludDMyX3QgTFsyXTsKLX0gVTsKLQotI2lmIENQVShCSUdfRU5ESUFOKSB8
fCBDUFUoTUlERExFX0VORElBTikKLSNkZWZpbmUgd29yZDAoeCkgKHgpLT5MWzBdCi0jZGVmaW5l
IHdvcmQxKHgpICh4KS0+TFsxXQotI2Vsc2UKLSNkZWZpbmUgd29yZDAoeCkgKHgpLT5MWzFdCi0j
ZGVmaW5lIHdvcmQxKHgpICh4KS0+TFswXQotI2VuZGlmCi0jZGVmaW5lIGR2YWwoeCkgKHgpLT5k
Ci0KLSNpZm5kZWYgVVNFX0xPTkdfTE9ORwotLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIG9m
IFN0b3JlaW5jIGlzIGFwcHJvcHJpYXRlIGZvciBNSVBTIHByb2Nlc3NvcnMuCi0gKiBBbiBhbHRl
cm5hdGl2ZSB0aGF0IG1pZ2h0IGJlIGJldHRlciBvbiBzb21lIG1hY2hpbmVzIGlzCi0gKiAgKnAr
KyA9IGhpZ2ggPDwgMTYgfCBsb3cgJiAweGZmZmY7Ci0gKi8KLXN0YXRpYyBBTFdBWVNfSU5MSU5F
IHVpbnQzMl90KiBzdG9yZUluYyh1aW50MzJfdCogcCwgdWludDE2X3QgaGlnaCwgdWludDE2X3Qg
bG93KQotewotICAgIHVpbnQxNl90KiBwMTYgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4o
cCk7Ci0jaWYgQ1BVKEJJR19FTkRJQU4pCi0gICAgcDE2WzBdID0gaGlnaDsKLSAgICBwMTZbMV0g
PSBsb3c7Ci0jZWxzZQotICAgIHAxNlsxXSA9IGhpZ2g7Ci0gICAgcDE2WzBdID0gbG93OwotI2Vu
ZGlmCi0gICAgcmV0dXJuIHAgKyAxOwotfQotCi0jZW5kaWYgLy8gVVNFX0xPTkdfTE9ORwotCi0j
ZGVmaW5lIEV4cF9zaGlmdCAgMjAKLSNkZWZpbmUgRXhwX3NoaWZ0MSAyMAotI2RlZmluZSBFeHBf
bXNrMSAgICAweDEwMDAwMAotI2RlZmluZSBFeHBfbXNrMTEgICAweDEwMDAwMAotI2RlZmluZSBF
eHBfbWFzayAgMHg3ZmYwMDAwMAotI2RlZmluZSBQIDUzCi0jZGVmaW5lIEJpYXMgMTAyMwotI2Rl
ZmluZSBFbWluICgtMTAyMikKLSNkZWZpbmUgRXhwXzEgIDB4M2ZmMDAwMDAKLSNkZWZpbmUgRXhw
XzExIDB4M2ZmMDAwMDAKLSNkZWZpbmUgRWJpdHMgMTEKLSNkZWZpbmUgRnJhY19tYXNrICAweGZm
ZmZmCi0jZGVmaW5lIEZyYWNfbWFzazEgMHhmZmZmZgotI2RlZmluZSBUZW5fcG1heCAyMgotI2Rl
ZmluZSBCbGV0Y2ggMHgxMAotI2RlZmluZSBCbmRyeV9tYXNrICAweGZmZmZmCi0jZGVmaW5lIEJu
ZHJ5X21hc2sxIDB4ZmZmZmYKLSNkZWZpbmUgTFNCIDEKLSNkZWZpbmUgU2lnbl9iaXQgMHg4MDAw
MDAwMAotI2RlZmluZSBMb2cyUCAxCi0jZGVmaW5lIFRpbnkwIDAKLSNkZWZpbmUgVGlueTEgMQot
I2RlZmluZSBRdWlja19tYXggMTQKLSNkZWZpbmUgSW50X21heCAxNAotCi0jZGVmaW5lIHJvdW5k
ZWRfcHJvZHVjdChhLCBiKSBhICo9IGIKLSNkZWZpbmUgcm91bmRlZF9xdW90aWVudChhLCBiKSBh
IC89IGIKLQotI2RlZmluZSBCaWcwIChGcmFjX21hc2sxIHwgRXhwX21zazEgKiAoREJMX01BWF9F
WFAgKyBCaWFzIC0gMSkpCi0jZGVmaW5lIEJpZzEgMHhmZmZmZmZmZgotCi1zdHJ1Y3QgQmlnSW50
IHsKLSAgICBCaWdJbnQoKSA6IHNpZ24oMCkgeyB9Ci0gICAgaW50IHNpZ247Ci0KLSAgICB2b2lk
IGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIHNpZ24gPSAwOwotICAgICAgICBtX3dvcmRzLmNsZWFy
KCk7Ci0gICAgfQotCi0gICAgc2l6ZV90IHNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fd29yZHMuc2l6ZSgpOwotICAgIH0KLQotICAgIHZvaWQgcmVzaXplKHNpemVfdCBzKQot
ICAgIHsKLSAgICAgICAgbV93b3Jkcy5yZXNpemUocyk7Ci0gICAgfQotCi0gICAgdWludDMyX3Qq
IHdvcmRzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3dvcmRzLmRhdGEoKTsKLSAgICB9Ci0K
LSAgICBjb25zdCB1aW50MzJfdCogd29yZHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fd29yZHMuZGF0YSgpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kKHVpbnQzMl90IHcpCi0g
ICAgewotICAgICAgICBtX3dvcmRzLmFwcGVuZCh3KTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8dWlu
dDMyX3QsIDE2PiBtX3dvcmRzOwotfTsKLQotc3RhdGljIHZvaWQgbXVsdGFkZChCaWdJbnQmIGIs
IGludCBtLCBpbnQgYSkgICAgLyogbXVsdGlwbHkgYnkgbSBhbmQgYWRkIGEgKi8KLXsKLSNpZmRl
ZiBVU0VfTE9OR19MT05HCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIGNhcnJ5OwotI2Vsc2UKLSAg
ICB1aW50MzJfdCBjYXJyeTsKLSNlbmRpZgotCi0gICAgaW50IHdkcyA9IGIuc2l6ZSgpOwotICAg
IHVpbnQzMl90KiB4ID0gYi53b3JkcygpOwotICAgIGludCBpID0gMDsKLSAgICBjYXJyeSA9IGE7
Ci0gICAgZG8gewotI2lmZGVmIFVTRV9MT05HX0xPTkcKLSAgICAgICAgdW5zaWduZWQgbG9uZyBs
b25nIHkgPSAqeCAqICh1bnNpZ25lZCBsb25nIGxvbmcpbSArIGNhcnJ5OwotICAgICAgICBjYXJy
eSA9IHkgPj4gMzI7Ci0gICAgICAgICp4KysgPSAodWludDMyX3QpeSAmIDB4ZmZmZmZmZmZVTDsK
LSNlbHNlCi0gICAgICAgIHVpbnQzMl90IHhpID0gKng7Ci0gICAgICAgIHVpbnQzMl90IHkgPSAo
eGkgJiAweGZmZmYpICogbSArIGNhcnJ5OwotICAgICAgICB1aW50MzJfdCB6ID0gKHhpID4+IDE2
KSAqIG0gKyAoeSA+PiAxNik7Ci0gICAgICAgIGNhcnJ5ID0geiA+PiAxNjsKLSAgICAgICAgKngr
KyA9ICh6IDw8IDE2KSArICh5ICYgMHhmZmZmKTsKLSNlbmRpZgotICAgIH0gd2hpbGUgKCsraSA8
IHdkcyk7Ci0KLSAgICBpZiAoY2FycnkpCi0gICAgICAgIGIuYXBwZW5kKCh1aW50MzJfdCljYXJy
eSk7Ci19Ci0KLXN0YXRpYyBpbnQgaGkwYml0cyh1aW50MzJfdCB4KQotewotICAgIGludCBrID0g
MDsKLQotICAgIGlmICghKHggJiAweGZmZmYwMDAwKSkgewotICAgICAgICBrID0gMTY7Ci0gICAg
ICAgIHggPDw9IDE2OwotICAgIH0KLSAgICBpZiAoISh4ICYgMHhmZjAwMDAwMCkpIHsKLSAgICAg
ICAgayArPSA4OwotICAgICAgICB4IDw8PSA4OwotICAgIH0KLSAgICBpZiAoISh4ICYgMHhmMDAw
MDAwMCkpIHsKLSAgICAgICAgayArPSA0OwotICAgICAgICB4IDw8PSA0OwotICAgIH0KLSAgICBp
ZiAoISh4ICYgMHhjMDAwMDAwMCkpIHsKLSAgICAgICAgayArPSAyOwotICAgICAgICB4IDw8PSAy
OwotICAgIH0KLSAgICBpZiAoISh4ICYgMHg4MDAwMDAwMCkpIHsKLSAgICAgICAgaysrOwotICAg
ICAgICBpZiAoISh4ICYgMHg0MDAwMDAwMCkpCi0gICAgICAgICAgICByZXR1cm4gMzI7Ci0gICAg
fQotICAgIHJldHVybiBrOwotfQotCi1zdGF0aWMgaW50IGxvMGJpdHModWludDMyX3QqIHkpCi17
Ci0gICAgaW50IGs7Ci0gICAgdWludDMyX3QgeCA9ICp5OwotCi0gICAgaWYgKHggJiA3KSB7Ci0g
ICAgICAgIGlmICh4ICYgMSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoeCAm
IDIpIHsKLSAgICAgICAgICAgICp5ID0geCA+PiAxOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgICAgIH0KLSAgICAgICAgKnkgPSB4ID4+IDI7Ci0gICAgICAgIHJldHVybiAyOwotICAgIH0K
LSAgICBrID0gMDsKLSAgICBpZiAoISh4ICYgMHhmZmZmKSkgewotICAgICAgICBrID0gMTY7Ci0g
ICAgICAgIHggPj49IDE2OwotICAgIH0KLSAgICBpZiAoISh4ICYgMHhmZikpIHsKLSAgICAgICAg
ayArPSA4OwotICAgICAgICB4ID4+PSA4OwotICAgIH0KLSAgICBpZiAoISh4ICYgMHhmKSkgewot
ICAgICAgICBrICs9IDQ7Ci0gICAgICAgIHggPj49IDQ7Ci0gICAgfQotICAgIGlmICghKHggJiAw
eDMpKSB7Ci0gICAgICAgIGsgKz0gMjsKLSAgICAgICAgeCA+Pj0gMjsKLSAgICB9Ci0gICAgaWYg
KCEoeCAmIDEpKSB7Ci0gICAgICAgIGsrKzsKLSAgICAgICAgeCA+Pj0gMTsKLSAgICAgICAgaWYg
KCF4KQotICAgICAgICAgICAgcmV0dXJuIDMyOwotICAgIH0KLSAgICAqeSA9IHg7Ci0gICAgcmV0
dXJuIGs7Ci19Ci0KLXN0YXRpYyB2b2lkIGkyYihCaWdJbnQmIGIsIGludCBpKQotewotICAgIGIu
c2lnbiA9IDA7Ci0gICAgYi5yZXNpemUoMSk7Ci0gICAgYi53b3JkcygpWzBdID0gaTsKLX0KLQot
c3RhdGljIHZvaWQgbXVsdChCaWdJbnQmIGFSZWYsIGNvbnN0IEJpZ0ludCYgYlJlZikKLXsKLSAg
ICBjb25zdCBCaWdJbnQqIGEgPSAmYVJlZjsKLSAgICBjb25zdCBCaWdJbnQqIGIgPSAmYlJlZjsK
LSAgICBCaWdJbnQgYzsKLSAgICBpbnQgd2EsIHdiLCB3YzsKLSAgICBjb25zdCB1aW50MzJfdCog
eCA9IDA7Ci0gICAgY29uc3QgdWludDMyX3QqIHhhOwotICAgIGNvbnN0IHVpbnQzMl90KiB4YjsK
LSAgICBjb25zdCB1aW50MzJfdCogeGFlOwotICAgIGNvbnN0IHVpbnQzMl90KiB4YmU7Ci0gICAg
dWludDMyX3QqIHhjOwotICAgIHVpbnQzMl90KiB4YzA7Ci0gICAgdWludDMyX3QgeTsKLSNpZmRl
ZiBVU0VfTE9OR19MT05HCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIGNhcnJ5LCB6OwotI2Vsc2UK
LSAgICB1aW50MzJfdCBjYXJyeSwgejsKLSNlbmRpZgotCi0gICAgaWYgKGEtPnNpemUoKSA8IGIt
PnNpemUoKSkgewotICAgICAgICBjb25zdCBCaWdJbnQqIHRtcCA9IGE7Ci0gICAgICAgIGEgPSBi
OwotICAgICAgICBiID0gdG1wOwotICAgIH0KLQotICAgIHdhID0gYS0+c2l6ZSgpOwotICAgIHdi
ID0gYi0+c2l6ZSgpOwotICAgIHdjID0gd2EgKyB3YjsKLSAgICBjLnJlc2l6ZSh3Yyk7Ci0KLSAg
ICBmb3IgKHhjID0gYy53b3JkcygpLCB4YSA9IHhjICsgd2M7IHhjIDwgeGE7IHhjKyspCi0gICAg
ICAgICp4YyA9IDA7Ci0gICAgeGEgPSBhLT53b3JkcygpOwotICAgIHhhZSA9IHhhICsgd2E7Ci0g
ICAgeGIgPSBiLT53b3JkcygpOwotICAgIHhiZSA9IHhiICsgd2I7Ci0gICAgeGMwID0gYy53b3Jk
cygpOwotI2lmZGVmIFVTRV9MT05HX0xPTkcKLSAgICBmb3IgKDsgeGIgPCB4YmU7IHhjMCsrKSB7
Ci0gICAgICAgIGlmICgoeSA9ICp4YisrKSkgewotICAgICAgICAgICAgeCA9IHhhOwotICAgICAg
ICAgICAgeGMgPSB4YzA7Ci0gICAgICAgICAgICBjYXJyeSA9IDA7Ci0gICAgICAgICAgICBkbyB7
Ci0gICAgICAgICAgICAgICAgeiA9ICp4KysgKiAodW5zaWduZWQgbG9uZyBsb25nKXkgKyAqeGMg
KyBjYXJyeTsKLSAgICAgICAgICAgICAgICBjYXJyeSA9IHogPj4gMzI7Ci0gICAgICAgICAgICAg
ICAgKnhjKysgPSAodWludDMyX3QpeiAmIDB4ZmZmZmZmZmZVTDsKLSAgICAgICAgICAgIH0gd2hp
bGUgKHggPCB4YWUpOwotICAgICAgICAgICAgKnhjID0gKHVpbnQzMl90KWNhcnJ5OwotICAgICAg
ICB9Ci0gICAgfQotI2Vsc2UKLSAgICBmb3IgKDsgeGIgPCB4YmU7IHhiKyssIHhjMCsrKSB7Ci0g
ICAgICAgIGlmICgoeSA9ICp4YiAmIDB4ZmZmZikpIHsKLSAgICAgICAgICAgIHggPSB4YTsKLSAg
ICAgICAgICAgIHhjID0geGMwOwotICAgICAgICAgICAgY2FycnkgPSAwOwotICAgICAgICAgICAg
ZG8gewotICAgICAgICAgICAgICAgIHogPSAoKnggJiAweGZmZmYpICogeSArICgqeGMgJiAweGZm
ZmYpICsgY2Fycnk7Ci0gICAgICAgICAgICAgICAgY2FycnkgPSB6ID4+IDE2OwotICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHoyID0gKCp4KysgPj4gMTYpICogeSArICgqeGMgPj4gMTYpICsgY2Fy
cnk7Ci0gICAgICAgICAgICAgICAgY2FycnkgPSB6MiA+PiAxNjsKLSAgICAgICAgICAgICAgICB4
YyA9IHN0b3JlSW5jKHhjLCB6Miwgeik7Ci0gICAgICAgICAgICB9IHdoaWxlICh4IDwgeGFlKTsK
LSAgICAgICAgICAgICp4YyA9IGNhcnJ5OwotICAgICAgICB9Ci0gICAgICAgIGlmICgoeSA9ICp4
YiA+PiAxNikpIHsKLSAgICAgICAgICAgIHggPSB4YTsKLSAgICAgICAgICAgIHhjID0geGMwOwot
ICAgICAgICAgICAgY2FycnkgPSAwOwotICAgICAgICAgICAgdWludDMyX3QgejIgPSAqeGM7Ci0g
ICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgeiA9ICgqeCAmIDB4ZmZmZikgKiB5ICsg
KCp4YyA+PiAxNikgKyBjYXJyeTsKLSAgICAgICAgICAgICAgICBjYXJyeSA9IHogPj4gMTY7Ci0g
ICAgICAgICAgICAgICAgeGMgPSBzdG9yZUluYyh4YywgeiwgejIpOwotICAgICAgICAgICAgICAg
IHoyID0gKCp4KysgPj4gMTYpICogeSArICgqeGMgJiAweGZmZmYpICsgY2Fycnk7Ci0gICAgICAg
ICAgICAgICAgY2FycnkgPSB6MiA+PiAxNjsKLSAgICAgICAgICAgIH0gd2hpbGUgKHggPCB4YWUp
OwotICAgICAgICAgICAgKnhjID0gejI7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICBm
b3IgKHhjMCA9IGMud29yZHMoKSwgeGMgPSB4YzAgKyB3Yzsgd2MgPiAwICYmICEqLS14YzsgLS13
YykgeyB9Ci0gICAgYy5yZXNpemUod2MpOwotICAgIGFSZWYgPSBjOwotfQotCi1zdHJ1Y3QgUDVO
b2RlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQNU5vZGUpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQNU5vZGUoKSB7IH0KLSAgICBCaWdJbnQgdmFsOwotICAg
IFA1Tm9kZSogbmV4dDsKLX07Ci0KLXN0YXRpYyBQNU5vZGUqIHA1czsKLXN0YXRpYyBpbnQgcDVz
Q291bnQ7Ci0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgcG93NW11bHQoQmlnSW50JiBiLCBp
bnQgaykKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IHAwNVszXSA9IHsgNSwgMjUsIDEyNSB9Owot
Ci0gICAgaWYgKGludCBpID0gayAmIDMpCi0gICAgICAgIG11bHRhZGQoYiwgcDA1W2kgLSAxXSwg
MCk7Ci0KLSAgICBpZiAoIShrID4+PSAyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc19kdG9h
UDVNdXRleC5sb2NrKCk7Ci0gICAgUDVOb2RlKiBwNSA9IHA1czsKLQotICAgIGlmICghcDUpIHsK
LSAgICAgICAgLyogZmlyc3QgdGltZSAqLwotICAgICAgICBwNSA9IG5ldyBQNU5vZGU7Ci0gICAg
ICAgIGkyYihwNS0+dmFsLCA2MjUpOwotICAgICAgICBwNS0+bmV4dCA9IDA7Ci0gICAgICAgIHA1
cyA9IHA1OwotICAgICAgICBwNXNDb3VudCA9IDE7Ci0gICAgfQotCi0gICAgaW50IHA1c0NvdW50
TG9jYWwgPSBwNXNDb3VudDsKLSAgICBzX2R0b2FQNU11dGV4LnVubG9jaygpOwotICAgIGludCBw
NXNVc2VkID0gMDsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKGsgJiAxKQotICAgICAg
ICAgICAgbXVsdChiLCBwNS0+dmFsKTsKLQotICAgICAgICBpZiAoIShrID4+PSAxKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmICgrK3A1c1VzZWQgPT0gcDVzQ291bnRMb2NhbCkg
ewotICAgICAgICAgICAgc19kdG9hUDVNdXRleC5sb2NrKCk7Ci0gICAgICAgICAgICBpZiAocDVz
VXNlZCA9PSBwNXNDb3VudCkgewotICAgICAgICAgICAgICAgIEFTU0VSVCghcDUtPm5leHQpOwot
ICAgICAgICAgICAgICAgIHA1LT5uZXh0ID0gbmV3IFA1Tm9kZTsKLSAgICAgICAgICAgICAgICBw
NS0+bmV4dC0+bmV4dCA9IDA7Ci0gICAgICAgICAgICAgICAgcDUtPm5leHQtPnZhbCA9IHA1LT52
YWw7Ci0gICAgICAgICAgICAgICAgbXVsdChwNS0+bmV4dC0+dmFsLCBwNS0+bmV4dC0+dmFsKTsK
LSAgICAgICAgICAgICAgICArK3A1c0NvdW50OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBwNXNDb3VudExvY2FsID0gcDVzQ291bnQ7Ci0gICAgICAgICAgICBzX2R0b2FQNU11dGV4LnVu
bG9jaygpOwotICAgICAgICB9Ci0gICAgICAgIHA1ID0gcDUtPm5leHQ7Ci0gICAgfQotfQotCi1z
dGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGxzaGlmdChCaWdJbnQmIGIsIGludCBrKQotewotICAg
IGludCBuID0gayA+PiA1OwotCi0gICAgaW50IG9yaWdTaXplID0gYi5zaXplKCk7Ci0gICAgaW50
IG4xID0gbiArIG9yaWdTaXplICsgMTsKLQotICAgIGlmIChrICY9IDB4MWYpCi0gICAgICAgIGIu
cmVzaXplKGIuc2l6ZSgpICsgbiArIDEpOwotICAgIGVsc2UKLSAgICAgICAgYi5yZXNpemUoYi5z
aXplKCkgKyBuKTsKLQotICAgIGNvbnN0IHVpbnQzMl90KiBzcmNTdGFydCA9IGIud29yZHMoKTsK
LSAgICB1aW50MzJfdCogZHN0U3RhcnQgPSBiLndvcmRzKCk7Ci0gICAgY29uc3QgdWludDMyX3Qq
IHNyYyA9IHNyY1N0YXJ0ICsgb3JpZ1NpemUgLSAxOwotICAgIHVpbnQzMl90KiBkc3QgPSBkc3RT
dGFydCArIG4xIC0gMTsKLSAgICBpZiAoaykgewotICAgICAgICB1aW50MzJfdCBoaVN1YndvcmQg
PSAwOwotICAgICAgICBpbnQgcyA9IDMyIC0gazsKLSAgICAgICAgZm9yICg7IHNyYyA+PSBzcmNT
dGFydDsgLS1zcmMpIHsKLSAgICAgICAgICAgICpkc3QtLSA9IGhpU3Vid29yZCB8ICpzcmMgPj4g
czsKLSAgICAgICAgICAgIGhpU3Vid29yZCA9ICpzcmMgPDwgazsKLSAgICAgICAgfQotICAgICAg
ICAqZHN0ID0gaGlTdWJ3b3JkOwotICAgICAgICBBU1NFUlQoZHN0ID09IGRzdFN0YXJ0ICsgbik7
Ci0KLSAgICAgICAgYi5yZXNpemUob3JpZ1NpemUgKyBuICsgISFiLndvcmRzKClbbjEgLSAxXSk7
Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAqLS1kc3QgPSAq
c3JjLS07Ci0gICAgICAgIH0gd2hpbGUgKHNyYyA+PSBzcmNTdGFydCk7Ci0gICAgfQotICAgIGZv
ciAoZHN0ID0gZHN0U3RhcnQgKyBuOyBkc3QgIT0gZHN0U3RhcnQ7ICkKLSAgICAgICAgKi0tZHN0
ID0gMDsKLQotICAgIEFTU0VSVChiLnNpemUoKSA8PSAxIHx8IGIud29yZHMoKVtiLnNpemUoKSAt
IDFdKTsKLX0KLQotc3RhdGljIGludCBjbXAoY29uc3QgQmlnSW50JiBhLCBjb25zdCBCaWdJbnQm
IGIpCi17Ci0gICAgY29uc3QgdWludDMyX3QgKnhhLCAqeGEwLCAqeGIsICp4YjA7Ci0gICAgaW50
IGksIGo7Ci0KLSAgICBpID0gYS5zaXplKCk7Ci0gICAgaiA9IGIuc2l6ZSgpOwotICAgIEFTU0VS
VChpIDw9IDEgfHwgYS53b3JkcygpW2kgLSAxXSk7Ci0gICAgQVNTRVJUKGogPD0gMSB8fCBiLndv
cmRzKClbaiAtIDFdKTsKLSAgICBpZiAoaSAtPSBqKQotICAgICAgICByZXR1cm4gaTsKLSAgICB4
YTAgPSBhLndvcmRzKCk7Ci0gICAgeGEgPSB4YTAgKyBqOwotICAgIHhiMCA9IGIud29yZHMoKTsK
LSAgICB4YiA9IHhiMCArIGo7Ci0gICAgZm9yICg7OykgewotICAgICAgICBpZiAoKi0teGEgIT0g
Ki0teGIpCi0gICAgICAgICAgICByZXR1cm4gKnhhIDwgKnhiID8gLTEgOiAxOwotICAgICAgICBp
ZiAoeGEgPD0geGEwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiAwOwot
fQotCi1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGRpZmYoQmlnSW50JiBjLCBjb25zdCBCaWdJ
bnQmIGFSZWYsIGNvbnN0IEJpZ0ludCYgYlJlZikKLXsKLSAgICBjb25zdCBCaWdJbnQqIGEgPSAm
YVJlZjsKLSAgICBjb25zdCBCaWdJbnQqIGIgPSAmYlJlZjsKLSAgICBpbnQgaSwgd2EsIHdiOwot
ICAgIHVpbnQzMl90KiB4YzsKLQotICAgIGkgPSBjbXAoKmEsICpiKTsKLSAgICBpZiAoIWkpIHsK
LSAgICAgICAgYy5zaWduID0gMDsKLSAgICAgICAgYy5yZXNpemUoMSk7Ci0gICAgICAgIGMud29y
ZHMoKVswXSA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGkgPCAwKSB7Ci0g
ICAgICAgIGNvbnN0IEJpZ0ludCogdG1wID0gYTsKLSAgICAgICAgYSA9IGI7Ci0gICAgICAgIGIg
PSB0bXA7Ci0gICAgICAgIGkgPSAxOwotICAgIH0gZWxzZQotICAgICAgICBpID0gMDsKLQotICAg
IHdhID0gYS0+c2l6ZSgpOwotICAgIGNvbnN0IHVpbnQzMl90KiB4YSA9IGEtPndvcmRzKCk7Ci0g
ICAgY29uc3QgdWludDMyX3QqIHhhZSA9IHhhICsgd2E7Ci0gICAgd2IgPSBiLT5zaXplKCk7Ci0g
ICAgY29uc3QgdWludDMyX3QqIHhiID0gYi0+d29yZHMoKTsKLSAgICBjb25zdCB1aW50MzJfdCog
eGJlID0geGIgKyB3YjsKLQotICAgIGMucmVzaXplKHdhKTsKLSAgICBjLnNpZ24gPSBpOwotICAg
IHhjID0gYy53b3JkcygpOwotI2lmZGVmIFVTRV9MT05HX0xPTkcKLSAgICB1bnNpZ25lZCBsb25n
IGxvbmcgYm9ycm93ID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB5
ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykqeGErKyAtICp4YisrIC0gYm9ycm93OwotICAgICAgICBi
b3Jyb3cgPSB5ID4+IDMyICYgKHVpbnQzMl90KTE7Ci0gICAgICAgICp4YysrID0gKHVpbnQzMl90
KXkgJiAweGZmZmZmZmZmVUw7Ci0gICAgfSB3aGlsZSAoeGIgPCB4YmUpOwotICAgIHdoaWxlICh4
YSA8IHhhZSkgewotICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgeSA9ICp4YSsrIC0gYm9ycm93
OwotICAgICAgICBib3Jyb3cgPSB5ID4+IDMyICYgKHVpbnQzMl90KTE7Ci0gICAgICAgICp4Yysr
ID0gKHVpbnQzMl90KXkgJiAweGZmZmZmZmZmVUw7Ci0gICAgfQotI2Vsc2UKLSAgICB1aW50MzJf
dCBib3Jyb3cgPSAwOwotICAgIGRvIHsKLSAgICAgICAgdWludDMyX3QgeSA9ICgqeGEgJiAweGZm
ZmYpIC0gKCp4YiAmIDB4ZmZmZikgLSBib3Jyb3c7Ci0gICAgICAgIGJvcnJvdyA9ICh5ICYgMHgx
MDAwMCkgPj4gMTY7Ci0gICAgICAgIHVpbnQzMl90IHogPSAoKnhhKysgPj4gMTYpIC0gKCp4Yisr
ID4+IDE2KSAtIGJvcnJvdzsKLSAgICAgICAgYm9ycm93ID0gKHogJiAweDEwMDAwKSA+PiAxNjsK
LSAgICAgICAgeGMgPSBzdG9yZUluYyh4YywgeiwgeSk7Ci0gICAgfSB3aGlsZSAoeGIgPCB4YmUp
OwotICAgIHdoaWxlICh4YSA8IHhhZSkgewotICAgICAgICB1aW50MzJfdCB5ID0gKCp4YSAmIDB4
ZmZmZikgLSBib3Jyb3c7Ci0gICAgICAgIGJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7Ci0g
ICAgICAgIHVpbnQzMl90IHogPSAoKnhhKysgPj4gMTYpIC0gYm9ycm93OwotICAgICAgICBib3Jy
b3cgPSAoeiAmIDB4MTAwMDApID4+IDE2OwotICAgICAgICB4YyA9IHN0b3JlSW5jKHhjLCB6LCB5
KTsKLSAgICB9Ci0jZW5kaWYKLSAgICB3aGlsZSAoISotLXhjKQotICAgICAgICB3YS0tOwotICAg
IGMucmVzaXplKHdhKTsKLX0KLQotc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBkMmIoQmlnSW50
JiBiLCBVKiBkLCBpbnQqIGUsIGludCogYml0cykKLXsKLSAgICBpbnQgZGUsIGs7Ci0gICAgdWlu
dDMyX3QqIHg7Ci0gICAgdWludDMyX3QgeSwgejsKLSAgICBpbnQgaTsKLSNkZWZpbmUgZDAgd29y
ZDAoZCkKLSNkZWZpbmUgZDEgd29yZDEoZCkKLQotICAgIGIuc2lnbiA9IDA7Ci0gICAgYi5yZXNp
emUoMSk7Ci0gICAgeCA9IGIud29yZHMoKTsKLQotICAgIHogPSBkMCAmIEZyYWNfbWFzazsKLSAg
ICBkMCAmPSAweDdmZmZmZmZmOyAgICAvKiBjbGVhciBzaWduIGJpdCwgd2hpY2ggd2UgaWdub3Jl
ICovCi0gICAgaWYgKChkZSA9IChpbnQpKGQwID4+IEV4cF9zaGlmdCkpKQotICAgICAgICB6IHw9
IEV4cF9tc2sxOwotICAgIGlmICgoeSA9IGQxKSkgewotICAgICAgICBpZiAoKGsgPSBsbzBiaXRz
KCZ5KSkpIHsKLSAgICAgICAgICAgIHhbMF0gPSB5IHwgKHogPDwgKDMyIC0gaykpOwotICAgICAg
ICAgICAgeiA+Pj0gazsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB4WzBdID0geTsKLSAg
ICAgICAgaWYgKHopIHsKLSAgICAgICAgICAgIGIucmVzaXplKDIpOwotICAgICAgICAgICAgeFsx
XSA9IHo7Ci0gICAgICAgIH0KLQotICAgICAgICBpID0gYi5zaXplKCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgayA9IGxvMGJpdHMoJnopOwotICAgICAgICB4WzBdID0gejsKLSAgICAgICAgaSA9
IDE7Ci0gICAgICAgIGIucmVzaXplKDEpOwotICAgICAgICBrICs9IDMyOwotICAgIH0KLSAgICBp
ZiAoZGUpIHsKLSAgICAgICAgKmUgPSBkZSAtIEJpYXMgLSAoUCAtIDEpICsgazsKLSAgICAgICAg
KmJpdHMgPSBQIC0gazsKLSAgICB9IGVsc2UgewotICAgICAgICAqZSA9IDAgLSBCaWFzIC0gKFAg
LSAxKSArIDEgKyBrOwotICAgICAgICAqYml0cyA9ICgzMiAqIGkpIC0gaGkwYml0cyh4W2kgLSAx
XSk7Ci0gICAgfQotfQotI3VuZGVmIGQwCi0jdW5kZWYgZDEKLQotc3RhdGljIGNvbnN0IGRvdWJs
ZSB0ZW5zW10gPSB7Ci0gICAgMWUwLCAxZTEsIDFlMiwgMWUzLCAxZTQsIDFlNSwgMWU2LCAxZTcs
IDFlOCwgMWU5LAotICAgIDFlMTAsIDFlMTEsIDFlMTIsIDFlMTMsIDFlMTQsIDFlMTUsIDFlMTYs
IDFlMTcsIDFlMTgsIDFlMTksCi0gICAgMWUyMCwgMWUyMSwgMWUyMgotfTsKLQotc3RhdGljIGNv
bnN0IGRvdWJsZSBiaWd0ZW5zW10gPSB7IDFlMTYsIDFlMzIsIDFlNjQsIDFlMTI4LCAxZTI1NiB9
OwotCi0jZGVmaW5lIFNjYWxlX0JpdCAweDEwCi0jZGVmaW5lIG5fYmlndGVucyA1Ci0KLXN0YXRp
YyBBTFdBWVNfSU5MSU5FIGludCBxdW9yZW0oQmlnSW50JiBiLCBCaWdJbnQmIFMpCi17Ci0gICAg
c2l6ZV90IG47Ci0gICAgdWludDMyX3QqIGJ4OwotICAgIHVpbnQzMl90KiBieGU7Ci0gICAgdWlu
dDMyX3QgcTsKLSAgICB1aW50MzJfdCogc3g7Ci0gICAgdWludDMyX3QqIHN4ZTsKLSNpZmRlZiBV
U0VfTE9OR19MT05HCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIGJvcnJvdywgY2FycnksIHksIHlz
OwotI2Vsc2UKLSAgICB1aW50MzJfdCBib3Jyb3csIGNhcnJ5LCB5LCB5czsKLSAgICB1aW50MzJf
dCBzaSwgeiwgenM7Ci0jZW5kaWYKLSAgICBBU1NFUlQoYi5zaXplKCkgPD0gMSB8fCBiLndvcmRz
KClbYi5zaXplKCkgLSAxXSk7Ci0gICAgQVNTRVJUKFMuc2l6ZSgpIDw9IDEgfHwgUy53b3Jkcygp
W1Muc2l6ZSgpIC0gMV0pOwotCi0gICAgbiA9IFMuc2l6ZSgpOwotICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UoYi5zaXplKCkgPD0gbiwgIm92ZXJzaXplIGIgaW4gcXVvcmVtIik7Ci0gICAgaWYgKGIu
c2l6ZSgpIDwgbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3ggPSBTLndvcmRzKCk7Ci0gICAg
c3hlID0gc3ggKyAtLW47Ci0gICAgYnggPSBiLndvcmRzKCk7Ci0gICAgYnhlID0gYnggKyBuOwot
ICAgIHEgPSAqYnhlIC8gKCpzeGUgKyAxKTsgICAgLyogZW5zdXJlIHEgPD0gdHJ1ZSBxdW90aWVu
dCAqLwotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocSA8PSA5LCAib3ZlcnNpemVkIHF1b3RpZW50
IGluIHF1b3JlbSIpOwotICAgIGlmIChxKSB7Ci0gICAgICAgIGJvcnJvdyA9IDA7Ci0gICAgICAg
IGNhcnJ5ID0gMDsKLSAgICAgICAgZG8gewotI2lmZGVmIFVTRV9MT05HX0xPTkcKLSAgICAgICAg
ICAgIHlzID0gKnN4KysgKiAodW5zaWduZWQgbG9uZyBsb25nKXEgKyBjYXJyeTsKLSAgICAgICAg
ICAgIGNhcnJ5ID0geXMgPj4gMzI7Ci0gICAgICAgICAgICB5ID0gKmJ4IC0gKHlzICYgMHhmZmZm
ZmZmZlVMKSAtIGJvcnJvdzsKLSAgICAgICAgICAgIGJvcnJvdyA9IHkgPj4gMzIgJiAodWludDMy
X3QpMTsKLSAgICAgICAgICAgICpieCsrID0gKHVpbnQzMl90KXkgJiAweGZmZmZmZmZmVUw7Ci0j
ZWxzZQotICAgICAgICAgICAgc2kgPSAqc3grKzsKLSAgICAgICAgICAgIHlzID0gKHNpICYgMHhm
ZmZmKSAqIHEgKyBjYXJyeTsKLSAgICAgICAgICAgIHpzID0gKHNpID4+IDE2KSAqIHEgKyAoeXMg
Pj4gMTYpOwotICAgICAgICAgICAgY2FycnkgPSB6cyA+PiAxNjsKLSAgICAgICAgICAgIHkgPSAo
KmJ4ICYgMHhmZmZmKSAtICh5cyAmIDB4ZmZmZikgLSBib3Jyb3c7Ci0gICAgICAgICAgICBib3Jy
b3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OwotICAgICAgICAgICAgeiA9ICgqYnggPj4gMTYpIC0g
KHpzICYgMHhmZmZmKSAtIGJvcnJvdzsKLSAgICAgICAgICAgIGJvcnJvdyA9ICh6ICYgMHgxMDAw
MCkgPj4gMTY7Ci0gICAgICAgICAgICBieCA9IHN0b3JlSW5jKGJ4LCB6LCB5KTsKLSNlbmRpZgot
ICAgICAgICB9IHdoaWxlIChzeCA8PSBzeGUpOwotICAgICAgICBpZiAoISpieGUpIHsKLSAgICAg
ICAgICAgIGJ4ID0gYi53b3JkcygpOwotICAgICAgICAgICAgd2hpbGUgKC0tYnhlID4gYnggJiYg
ISpieGUpCi0gICAgICAgICAgICAgICAgLS1uOwotICAgICAgICAgICAgYi5yZXNpemUobik7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGNtcChiLCBTKSA+PSAwKSB7Ci0gICAgICAgIHErKzsK
LSAgICAgICAgYm9ycm93ID0gMDsKLSAgICAgICAgY2FycnkgPSAwOwotICAgICAgICBieCA9IGIu
d29yZHMoKTsKLSAgICAgICAgc3ggPSBTLndvcmRzKCk7Ci0gICAgICAgIGRvIHsKLSNpZmRlZiBV
U0VfTE9OR19MT05HCi0gICAgICAgICAgICB5cyA9ICpzeCsrICsgY2Fycnk7Ci0gICAgICAgICAg
ICBjYXJyeSA9IHlzID4+IDMyOwotICAgICAgICAgICAgeSA9ICpieCAtICh5cyAmIDB4ZmZmZmZm
ZmZVTCkgLSBib3Jyb3c7Ci0gICAgICAgICAgICBib3Jyb3cgPSB5ID4+IDMyICYgKHVpbnQzMl90
KTE7Ci0gICAgICAgICAgICAqYngrKyA9ICh1aW50MzJfdCl5ICYgMHhmZmZmZmZmZlVMOwotI2Vs
c2UKLSAgICAgICAgICAgIHNpID0gKnN4Kys7Ci0gICAgICAgICAgICB5cyA9IChzaSAmIDB4ZmZm
ZikgKyBjYXJyeTsKLSAgICAgICAgICAgIHpzID0gKHNpID4+IDE2KSArICh5cyA+PiAxNik7Ci0g
ICAgICAgICAgICBjYXJyeSA9IHpzID4+IDE2OwotICAgICAgICAgICAgeSA9ICgqYnggJiAweGZm
ZmYpIC0gKHlzICYgMHhmZmZmKSAtIGJvcnJvdzsKLSAgICAgICAgICAgIGJvcnJvdyA9ICh5ICYg
MHgxMDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICB6ID0gKCpieCA+PiAxNikgLSAoenMgJiAweGZm
ZmYpIC0gYm9ycm93OwotICAgICAgICAgICAgYm9ycm93ID0gKHogJiAweDEwMDAwKSA+PiAxNjsK
LSAgICAgICAgICAgIGJ4ID0gc3RvcmVJbmMoYngsIHosIHkpOwotI2VuZGlmCi0gICAgICAgIH0g
d2hpbGUgKHN4IDw9IHN4ZSk7Ci0gICAgICAgIGJ4ID0gYi53b3JkcygpOwotICAgICAgICBieGUg
PSBieCArIG47Ci0gICAgICAgIGlmICghKmJ4ZSkgewotICAgICAgICAgICAgd2hpbGUgKC0tYnhl
ID4gYnggJiYgISpieGUpCi0gICAgICAgICAgICAgICAgLS1uOwotICAgICAgICAgICAgYi5yZXNp
emUobik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHE7Ci19Ci0KLS8qIGR0b2EgZm9y
IElFRUUgYXJpdGhtZXRpYyAoZG1nKTogY29udmVydCBkb3VibGUgdG8gQVNDSUkgc3RyaW5nLgot
ICoKLSAqIEluc3BpcmVkIGJ5ICJIb3cgdG8gUHJpbnQgRmxvYXRpbmctUG9pbnQgTnVtYmVycyBB
Y2N1cmF0ZWx5IiBieQotICogR3V5IEwuIFN0ZWVsZSwgSnIuIGFuZCBKb24gTC4gV2hpdGUgW1By
b2MuIEFDTSBTSUdQTEFOICc5MCwgcHAuIDExMi0xMjZdLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6
Ci0gKiAgICAxLiBSYXRoZXIgdGhhbiBpdGVyYXRpbmcsIHdlIHVzZSBhIHNpbXBsZSBudW1lcmlj
IG92ZXJlc3RpbWF0ZQotICogICAgICAgdG8gZGV0ZXJtaW5lIGsgPSBmbG9vcihsb2cxMChkKSku
ICBXZSBzY2FsZSByZWxldmFudAotICogICAgICAgcXVhbnRpdGllcyB1c2luZyBPKGxvZzIoaykp
IHJhdGhlciB0aGFuIE8oaykgbXVsdGlwbGljYXRpb25zLgotICogICAgMi4gRm9yIHNvbWUgbW9k
ZXMgPiAyIChjb3JyZXNwb25kaW5nIHRvIGVjdnQgYW5kIGZjdnQpLCB3ZSBkb24ndAotICogICAg
ICAgdHJ5IHRvIGdlbmVyYXRlIGRpZ2l0cyBzdHJpY3RseSBsZWZ0IHRvIHJpZ2h0LiAgSW5zdGVh
ZCwgd2UKLSAqICAgICAgIGNvbXB1dGUgd2l0aCBmZXdlciBiaXRzIGFuZCBwcm9wYWdhdGUgdGhl
IGNhcnJ5IGlmIG5lY2Vzc2FyeQotICogICAgICAgd2hlbiByb3VuZGluZyB0aGUgZmluYWwgZGln
aXQgdXAuICBUaGlzIGlzIG9mdGVuIGZhc3Rlci4KLSAqICAgIDMuIFVuZGVyIHRoZSBhc3N1bXB0
aW9uIHRoYXQgaW5wdXQgd2lsbCBiZSByb3VuZGVkIG5lYXJlc3QsCi0gKiAgICAgICBtb2RlIDAg
cmVuZGVycyAxZTIzIGFzIDFlMjMgcmF0aGVyIHRoYW4gOS45OTk5OTk5OTk5OTk5OTllMjIuCi0g
KiAgICAgICBUaGF0IGlzLCB3ZSBhbGxvdyBlcXVhbGl0eSBpbiBzdG9wcGluZyB0ZXN0cyB3aGVu
IHRoZQotICogICAgICAgcm91bmQtbmVhcmVzdCBydWxlIHdpbGwgZ2l2ZSB0aGUgc2FtZSBmbG9h
dGluZy1wb2ludCB2YWx1ZQotICogICAgICAgYXMgd291bGQgc2F0aXNmYWN0aW9uIG9mIHRoZSBz
dG9wcGluZyB0ZXN0IHdpdGggc3RyaWN0Ci0gKiAgICAgICBpbmVxdWFsaXR5LgotICogICAgNC4g
V2UgcmVtb3ZlIGNvbW1vbiBmYWN0b3JzIG9mIHBvd2VycyBvZiAyIGZyb20gcmVsZXZhbnQKLSAq
ICAgICAgIHF1YW50aXRpZXMuCi0gKiAgICA1LiBXaGVuIGNvbnZlcnRpbmcgZmxvYXRpbmctcG9p
bnQgaW50ZWdlcnMgbGVzcyB0aGFuIDFlMTYsCi0gKiAgICAgICB3ZSB1c2UgZmxvYXRpbmctcG9p
bnQgYXJpdGhtZXRpYyByYXRoZXIgdGhhbiByZXNvcnRpbmcKLSAqICAgICAgIHRvIG11bHRpcGxl
LXByZWNpc2lvbiBpbnRlZ2Vycy4KLSAqICAgIDYuIFdoZW4gYXNrZWQgdG8gcHJvZHVjZSBmZXdl
ciB0aGFuIDE1IGRpZ2l0cywgd2UgZmlyc3QgdHJ5Ci0gKiAgICAgICB0byBnZXQgYnkgd2l0aCBm
bG9hdGluZy1wb2ludCBhcml0aG1ldGljOyB3ZSByZXNvcnQgdG8KLSAqICAgICAgIG11bHRpcGxl
LXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMgb25seSBpZiB3ZSBjYW5ub3QKLSAqICAgICAg
IGd1YXJhbnRlZSB0aGF0IHRoZSBmbG9hdGluZy1wb2ludCBjYWxjdWxhdGlvbiBoYXMgZ2l2ZW4K
LSAqICAgICAgIHRoZSBjb3JyZWN0bHkgcm91bmRlZCByZXN1bHQuICBGb3IgayByZXF1ZXN0ZWQg
ZGlnaXRzIGFuZAotICogICAgICAgInVuaWZvcm1seSIgZGlzdHJpYnV0ZWQgaW5wdXQsIHRoZSBw
cm9iYWJpbGl0eSBpcwotICogICAgICAgc29tZXRoaW5nIGxpa2UgMTBeKGstMTUpIHRoYXQgd2Ug
bXVzdCByZXNvcnQgdG8gdGhlIGludDMyX3QKLSAqICAgICAgIGNhbGN1bGF0aW9uLgotICoKLSAq
IE5vdGU6ICdsZWZ0cmlnaHQnIHRyYW5zbGF0ZXMgdG8gJ2dlbmVyYXRlIHNob3J0ZXN0IHBvc3Np
YmxlIHN0cmluZycuCi0gKi8KLXRlbXBsYXRlPGJvb2wgcm91bmRpbmdOb25lLCBib29sIHJvdW5k
aW5nU2lnbmlmaWNhbnRGaWd1cmVzLCBib29sIHJvdW5kaW5nRGVjaW1hbFBsYWNlcywgYm9vbCBs
ZWZ0cmlnaHQ+Ci12b2lkIGR0b2EoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5k
aWdpdHMsIGJvb2wmIHNpZ25PdXQsIGludCYgZXhwb25lbnRPdXQsIHVuc2lnbmVkJiBwcmVjaXNp
b25PdXQpCi17Ci0gICAgLy8gRXhhY3RseSBvbmUgcm91bmRpbmcgbW9kZSBtdXN0IGJlIHNwZWNp
ZmllZC4KLSAgICBBU1NFUlQocm91bmRpbmdOb25lICsgcm91bmRpbmdTaWduaWZpY2FudEZpZ3Vy
ZXMgKyByb3VuZGluZ0RlY2ltYWxQbGFjZXMgPT0gMSk7Ci0gICAgLy8gcm91bmRpbmdOb25lIG9u
bHkgYWxsb3dlZCAob25seSBzZW5zaWJsZT8pIHdpdGggbGVmdHJpZ2h0IHNldC4KLSAgICBBU1NF
UlQoIXJvdW5kaW5nTm9uZSB8fCBsZWZ0cmlnaHQpOwotCi0gICAgQVNTRVJUKHN0ZDo6aXNmaW5p
dGUoZGQpKTsKLQotICAgIGludCBiYml0cywgYjIsIGI1LCBiZSwgZGlnLCBpLCBpZXBzLCBpbGlt
ID0gMCwgaWxpbTAsIGlsaW0xID0gMCwKLSAgICAgICAgaiwgajEsIGssIGswLCBrX2NoZWNrLCBt
MiwgbTUsIHMyLCBzNSwKLSAgICAgICAgc3BlY19jYXNlOwotICAgIGludDMyX3QgTDsKLSAgICBp
bnQgZGVub3JtOwotICAgIHVpbnQzMl90IHg7Ci0gICAgQmlnSW50IGIsIGRlbHRhLCBtbG8sIG1o
aSwgUzsKLSAgICBVIGQyLCBlcHMsIHU7Ci0gICAgZG91YmxlIGRzOwotICAgIGNoYXIqIHM7Ci0g
ICAgY2hhciogczA7Ci0KLSAgICB1LmQgPSBkZDsKLQotICAgIC8qIEluZmluaXR5IG9yIE5hTiAq
LwotICAgIEFTU0VSVCgod29yZDAoJnUpICYgRXhwX21hc2spICE9IEV4cF9tYXNrKTsKLQotICAg
IC8vIEphdmFTY3JpcHQgdG9TdHJpbmcgY29udmVyc2lvbiB0cmVhdHMgLTAgYXMgMC4KLSAgICBp
ZiAoIWR2YWwoJnUpKSB7Ci0gICAgICAgIHNpZ25PdXQgPSBmYWxzZTsKLSAgICAgICAgZXhwb25l
bnRPdXQgPSAwOwotICAgICAgICBwcmVjaXNpb25PdXQgPSAxOwotICAgICAgICByZXN1bHRbMF0g
PSAnMCc7Ci0gICAgICAgIHJlc3VsdFsxXSA9ICdcMCc7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAod29yZDAoJnUpICYgU2lnbl9iaXQpIHsKLSAgICAgICAgc2lnbk91dCA9IHRy
dWU7Ci0gICAgICAgIHdvcmQwKCZ1KSAmPSB+U2lnbl9iaXQ7IC8vIGNsZWFyIHNpZ24gYml0Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHNpZ25PdXQgPSBmYWxzZTsKLQotICAgIGQyYihiLCAmdSwgJmJl
LCAmYmJpdHMpOwotICAgIGlmICgoaSA9IChpbnQpKHdvcmQwKCZ1KSA+PiBFeHBfc2hpZnQxICYg
KEV4cF9tYXNrID4+IEV4cF9zaGlmdDEpKSkpIHsKLSAgICAgICAgZHZhbCgmZDIpID0gZHZhbCgm
dSk7Ci0gICAgICAgIHdvcmQwKCZkMikgJj0gRnJhY19tYXNrMTsKLSAgICAgICAgd29yZDAoJmQy
KSB8PSBFeHBfMTE7Ci0KLSAgICAgICAgLyogbG9nKHgpICAgIH49fiBsb2coMS41KSArICh4LTEu
NSkvMS41Ci0gICAgICAgICAqIGxvZzEwKHgpICAgICA9ICBsb2coeCkgLyBsb2coMTApCi0gICAg
ICAgICAqICAgICAgICB+PX4gbG9nKDEuNSkvbG9nKDEwKSArICh4LTEuNSkvKDEuNSpsb2coMTAp
KQotICAgICAgICAgKiBsb2cxMChkKSA9IChpLUJpYXMpKmxvZygyKS9sb2coMTApICsgbG9nMTAo
ZDIpCi0gICAgICAgICAqCi0gICAgICAgICAqIFRoaXMgc3VnZ2VzdHMgY29tcHV0aW5nIGFuIGFw
cHJveGltYXRpb24gayB0byBsb2cxMChkKSBieQotICAgICAgICAgKgotICAgICAgICAgKiBrID0g
KGkgLSBCaWFzKSowLjMwMTAyOTk5NTY2Mzk4MQotICAgICAgICAgKiAgICArICggKGQyLTEuNSkq
MC4yODk1Mjk2NTQ2MDIxNjggKyAwLjE3NjA5MTI1OTA1NTY4MSApOwotICAgICAgICAgKgotICAg
ICAgICAgKiBXZSB3YW50IGsgdG8gYmUgdG9vIGxhcmdlIHJhdGhlciB0aGFuIHRvbyBzbWFsbC4K
LSAgICAgICAgICogVGhlIGVycm9yIGluIHRoZSBmaXJzdC1vcmRlciBUYXlsb3Igc2VyaWVzIGFw
cHJveGltYXRpb24KLSAgICAgICAgICogaXMgaW4gb3VyIGZhdm9yLCBzbyB3ZSBqdXN0IHJvdW5k
IHVwIHRoZSBjb25zdGFudCBlbm91Z2gKLSAgICAgICAgICogdG8gY29tcGVuc2F0ZSBmb3IgYW55
IGVycm9yIGluIHRoZSBtdWx0aXBsaWNhdGlvbiBvZgotICAgICAgICAgKiAoaSAtIEJpYXMpIGJ5
IDAuMzAxMDI5OTk1NjYzOTgxOyBzaW5jZSB8aSAtIEJpYXN8IDw9IDEwNzcsCi0gICAgICAgICAq
IGFuZCAxMDc3ICogMC4zMDEwMyAqIDJeLTUyIH49fiA3LjJlLTE0LAotICAgICAgICAgKiBhZGRp
bmcgMWUtMTMgdG8gdGhlIGNvbnN0YW50IHRlcm0gbW9yZSB0aGFuIHN1ZmZpY2VzLgotICAgICAg
ICAgKiBIZW5jZSB3ZSBhZGp1c3QgdGhlIGNvbnN0YW50IHRlcm0gdG8gMC4xNzYwOTEyNTkwNTU4
LgotICAgICAgICAgKiAoV2UgY291bGQgZ2V0IGEgbW9yZSBhY2N1cmF0ZSBrIGJ5IGludm9raW5n
IGxvZzEwLAotICAgICAgICAgKiAgYnV0IHRoaXMgaXMgcHJvYmFibHkgbm90IHdvcnRod2hpbGUu
KQotICAgICAgICAgKi8KLQotICAgICAgICBpIC09IEJpYXM7Ci0gICAgICAgIGRlbm9ybSA9IDA7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogZCBpcyBkZW5vcm1hbGl6ZWQgKi8KLQotICAgICAg
ICBpID0gYmJpdHMgKyBiZSArIChCaWFzICsgKFAgLSAxKSAtIDEpOwotICAgICAgICB4ID0gKGkg
PiAzMikgPyAod29yZDAoJnUpIDw8ICg2NCAtIGkpKSB8ICh3b3JkMSgmdSkgPj4gKGkgLSAzMikp
Ci0gICAgICAgICAgICAgICAgOiB3b3JkMSgmdSkgPDwgKDMyIC0gaSk7Ci0gICAgICAgIGR2YWwo
JmQyKSA9IHg7Ci0gICAgICAgIHdvcmQwKCZkMikgLT0gMzEgKiBFeHBfbXNrMTsgLyogYWRqdXN0
IGV4cG9uZW50ICovCi0gICAgICAgIGkgLT0gKEJpYXMgKyAoUCAtIDEpIC0gMSkgKyAxOwotICAg
ICAgICBkZW5vcm0gPSAxOwotICAgIH0KLSAgICBkcyA9IChkdmFsKCZkMikgLSAxLjUpICogMC4y
ODk1Mjk2NTQ2MDIxNjggKyAwLjE3NjA5MTI1OTA1NTggKyAoaSAqIDAuMzAxMDI5OTk1NjYzOTgx
KTsKLSAgICBrID0gKGludClkczsKLSAgICBpZiAoZHMgPCAwLiAmJiBkcyAhPSBrKQotICAgICAg
ICBrLS07ICAgIC8qIHdhbnQgayA9IGZsb29yKGRzKSAqLwotICAgIGtfY2hlY2sgPSAxOwotICAg
IGlmIChrID49IDAgJiYgayA8PSBUZW5fcG1heCkgewotICAgICAgICBpZiAoZHZhbCgmdSkgPCB0
ZW5zW2tdKQotICAgICAgICAgICAgay0tOwotICAgICAgICBrX2NoZWNrID0gMDsKLSAgICB9Ci0g
ICAgaiA9IGJiaXRzIC0gaSAtIDE7Ci0gICAgaWYgKGogPj0gMCkgewotICAgICAgICBiMiA9IDA7
Ci0gICAgICAgIHMyID0gajsKLSAgICB9IGVsc2UgewotICAgICAgICBiMiA9IC1qOwotICAgICAg
ICBzMiA9IDA7Ci0gICAgfQotICAgIGlmIChrID49IDApIHsKLSAgICAgICAgYjUgPSAwOwotICAg
ICAgICBzNSA9IGs7Ci0gICAgICAgIHMyICs9IGs7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYjIg
LT0gazsKLSAgICAgICAgYjUgPSAtazsKLSAgICAgICAgczUgPSAwOwotICAgIH0KLQotICAgIGlm
IChyb3VuZGluZ05vbmUpIHsKLSAgICAgICAgaWxpbSA9IGlsaW0xID0gLTE7Ci0gICAgICAgIGkg
PSAxODsKLSAgICAgICAgbmRpZ2l0cyA9IDA7Ci0gICAgfQotICAgIGlmIChyb3VuZGluZ1NpZ25p
ZmljYW50RmlndXJlcykgewotICAgICAgICBpZiAobmRpZ2l0cyA8PSAwKQotICAgICAgICAgICAg
bmRpZ2l0cyA9IDE7Ci0gICAgICAgIGlsaW0gPSBpbGltMSA9IGkgPSBuZGlnaXRzOwotICAgIH0K
LSAgICBpZiAocm91bmRpbmdEZWNpbWFsUGxhY2VzKSB7Ci0gICAgICAgIGkgPSBuZGlnaXRzICsg
ayArIDE7Ci0gICAgICAgIGlsaW0gPSBpOwotICAgICAgICBpbGltMSA9IGkgLSAxOwotICAgICAg
ICBpZiAoaSA8PSAwKQotICAgICAgICAgICAgaSA9IDE7Ci0gICAgfQotCi0gICAgcyA9IHMwID0g
cmVzdWx0OwotCi0gICAgaWYgKGlsaW0gPj0gMCAmJiBpbGltIDw9IFF1aWNrX21heCkgewotICAg
ICAgICAvKiBUcnkgdG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4gKi8K
LQotICAgICAgICBpID0gMDsKLSAgICAgICAgZHZhbCgmZDIpID0gZHZhbCgmdSk7Ci0gICAgICAg
IGswID0gazsKLSAgICAgICAgaWxpbTAgPSBpbGltOwotICAgICAgICBpZXBzID0gMjsgLyogY29u
c2VydmF0aXZlICovCi0gICAgICAgIGlmIChrID4gMCkgewotICAgICAgICAgICAgZHMgPSB0ZW5z
W2sgJiAweGZdOwotICAgICAgICAgICAgaiA9IGsgPj4gNDsKLSAgICAgICAgICAgIGlmIChqICYg
QmxldGNoKSB7Ci0gICAgICAgICAgICAgICAgLyogcHJldmVudCBvdmVyZmxvd3MgKi8KLSAgICAg
ICAgICAgICAgICBqICY9IEJsZXRjaCAtIDE7Ci0gICAgICAgICAgICAgICAgZHZhbCgmdSkgLz0g
YmlndGVuc1tuX2JpZ3RlbnMgLSAxXTsKLSAgICAgICAgICAgICAgICBpZXBzKys7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBmb3IgKDsgajsgaiA+Pj0gMSwgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGogJiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGllcHMrKzsKLSAgICAgICAg
ICAgICAgICAgICAgZHMgKj0gYmlndGVuc1tpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBkdmFsKCZ1KSAvPSBkczsKLSAgICAgICAgfSBlbHNlIGlmICgo
ajEgPSAtaykpIHsKLSAgICAgICAgICAgIGR2YWwoJnUpICo9IHRlbnNbajEgJiAweGZdOwotICAg
ICAgICAgICAgZm9yIChqID0gajEgPj4gNDsgajsgaiA+Pj0gMSwgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGogJiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGllcHMrKzsKLSAgICAgICAg
ICAgICAgICAgICAgZHZhbCgmdSkgKj0gYmlndGVuc1tpXTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtfY2hlY2sgJiYgZHZhbCgmdSkg
PCAxLiAmJiBpbGltID4gMCkgewotICAgICAgICAgICAgaWYgKGlsaW0xIDw9IDApCi0gICAgICAg
ICAgICAgICAgZ290byBmYXN0RmFpbGVkOwotICAgICAgICAgICAgaWxpbSA9IGlsaW0xOwotICAg
ICAgICAgICAgay0tOwotICAgICAgICAgICAgZHZhbCgmdSkgKj0gMTAuOwotICAgICAgICAgICAg
aWVwcysrOwotICAgICAgICB9Ci0gICAgICAgIGR2YWwoJmVwcykgPSAoaWVwcyAqIGR2YWwoJnUp
KSArIDcuOwotICAgICAgICB3b3JkMCgmZXBzKSAtPSAoUCAtIDEpICogRXhwX21zazE7Ci0gICAg
ICAgIGlmICghaWxpbSkgewotICAgICAgICAgICAgUy5jbGVhcigpOwotICAgICAgICAgICAgbWhp
LmNsZWFyKCk7Ci0gICAgICAgICAgICBkdmFsKCZ1KSAtPSA1LjsKLSAgICAgICAgICAgIGlmIChk
dmFsKCZ1KSA+IGR2YWwoJmVwcykpCi0gICAgICAgICAgICAgICAgZ290byBvbmVEaWdpdDsKLSAg
ICAgICAgICAgIGlmIChkdmFsKCZ1KSA8IC1kdmFsKCZlcHMpKQotICAgICAgICAgICAgICAgIGdv
dG8gbm9EaWdpdHM7Ci0gICAgICAgICAgICBnb3RvIGZhc3RGYWlsZWQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGxlZnRyaWdodCkgewotICAgICAgICAgICAgLyogVXNlIFN0ZWVsZSAmIFdoaXRl
IG1ldGhvZCBvZiBvbmx5Ci0gICAgICAgICAgICAgKiBnZW5lcmF0aW5nIGRpZ2l0cyBuZWVkZWQu
Ci0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGR2YWwoJmVwcykgPSAoMC41IC8gdGVuc1tp
bGltIC0gMV0pIC0gZHZhbCgmZXBzKTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7OykgewotICAg
ICAgICAgICAgICAgIEwgPSAobG9uZyBpbnQpZHZhbCgmdSk7Ci0gICAgICAgICAgICAgICAgZHZh
bCgmdSkgLT0gTDsKLSAgICAgICAgICAgICAgICAqcysrID0gJzAnICsgKGludClMOwotICAgICAg
ICAgICAgICAgIGlmIChkdmFsKCZ1KSA8IGR2YWwoJmVwcykpCi0gICAgICAgICAgICAgICAgICAg
IGdvdG8gcmV0OwotICAgICAgICAgICAgICAgIGlmICgxLiAtIGR2YWwoJnUpIDwgZHZhbCgmZXBz
KSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBidW1wVXA7Ci0gICAgICAgICAgICAgICAgaWYg
KCsraSA+PSBpbGltKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBkdmFsKCZlcHMpICo9IDEwLjsKLSAgICAgICAgICAgICAgICBkdmFsKCZ1KSAqPSAxMC47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBHZW5lcmF0ZSBp
bGltIGRpZ2l0cywgdGhlbiBmaXggdGhlbSB1cC4gKi8KLSAgICAgICAgICAgIGR2YWwoJmVwcykg
Kj0gdGVuc1tpbGltIC0gMV07Ci0gICAgICAgICAgICBmb3IgKGkgPSAxOzsgaSsrLCBkdmFsKCZ1
KSAqPSAxMC4pIHsKLSAgICAgICAgICAgICAgICBMID0gKGludDMyX3QpKGR2YWwoJnUpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIShkdmFsKCZ1KSAtPSBMKSkKLSAgICAgICAgICAgICAgICAgICAg
aWxpbSA9IGk7Ci0gICAgICAgICAgICAgICAgKnMrKyA9ICcwJyArIChpbnQpTDsKLSAgICAgICAg
ICAgICAgICBpZiAoaSA9PSBpbGltKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkdmFsKCZ1
KSA+IDAuNSArIGR2YWwoJmVwcykpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJ1bXBV
cDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGR2YWwoJnUpIDwgMC41IC0gZHZhbCgmZXBzKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCotLXMgPT0gJzAnKSB7IH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmV0
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotZmFzdEZhaWxlZDoKLSAg
ICAgICAgcyA9IHMwOwotICAgICAgICBkdmFsKCZ1KSA9IGR2YWwoJmQyKTsKLSAgICAgICAgayA9
IGswOwotICAgICAgICBpbGltID0gaWxpbTA7Ci0gICAgfQotCi0gICAgLyogRG8gd2UgaGF2ZSBh
ICJzbWFsbCIgaW50ZWdlcj8gKi8KLQotICAgIGlmIChiZSA+PSAwICYmIGsgPD0gSW50X21heCkg
ewotICAgICAgICAvKiBZZXMuICovCi0gICAgICAgIGRzID0gdGVuc1trXTsKLSAgICAgICAgaWYg
KG5kaWdpdHMgPCAwICYmIGlsaW0gPD0gMCkgewotICAgICAgICAgICAgUy5jbGVhcigpOwotICAg
ICAgICAgICAgbWhpLmNsZWFyKCk7Ci0gICAgICAgICAgICBpZiAoaWxpbSA8IDAgfHwgZHZhbCgm
dSkgPD0gNSAqIGRzKQotICAgICAgICAgICAgICAgIGdvdG8gbm9EaWdpdHM7Ci0gICAgICAgICAg
ICBnb3RvIG9uZURpZ2l0OwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDE7OyBpKyssIGR2
YWwoJnUpICo9IDEwLikgewotICAgICAgICAgICAgTCA9IChpbnQzMl90KShkdmFsKCZ1KSAvIGRz
KTsKLSAgICAgICAgICAgIGR2YWwoJnUpIC09IEwgKiBkczsKLSAgICAgICAgICAgICpzKysgPSAn
MCcgKyAoaW50KUw7Ci0gICAgICAgICAgICBpZiAoIWR2YWwoJnUpKSB7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaSA9PSBpbGltKSB7Ci0g
ICAgICAgICAgICAgICAgZHZhbCgmdSkgKz0gZHZhbCgmdSk7Ci0gICAgICAgICAgICAgICAgaWYg
KGR2YWwoJnUpID4gZHMgfHwgKGR2YWwoJnUpID09IGRzICYmIChMICYgMSkpKSB7Ci1idW1wVXA6
Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlICgqLS1zID09ICc5JykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzID09IHMwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaysr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzID0gJzAnOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICArKypzKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGdvdG8gcmV0OwotICAgIH0K
LQotICAgIG0yID0gYjI7Ci0gICAgbTUgPSBiNTsKLSAgICBtaGkuY2xlYXIoKTsKLSAgICBtbG8u
Y2xlYXIoKTsKLSAgICBpZiAobGVmdHJpZ2h0KSB7Ci0gICAgICAgIGkgPSBkZW5vcm0gPyBiZSAr
IChCaWFzICsgKFAgLSAxKSAtIDEgKyAxKSA6IDEgKyBQIC0gYmJpdHM7Ci0gICAgICAgIGIyICs9
IGk7Ci0gICAgICAgIHMyICs9IGk7Ci0gICAgICAgIGkyYihtaGksIDEpOwotICAgIH0KLSAgICBp
ZiAobTIgPiAwICYmIHMyID4gMCkgewotICAgICAgICBpID0gbTIgPCBzMiA/IG0yIDogczI7Ci0g
ICAgICAgIGIyIC09IGk7Ci0gICAgICAgIG0yIC09IGk7Ci0gICAgICAgIHMyIC09IGk7Ci0gICAg
fQotICAgIGlmIChiNSA+IDApIHsKLSAgICAgICAgaWYgKGxlZnRyaWdodCkgewotICAgICAgICAg
ICAgaWYgKG01ID4gMCkgewotICAgICAgICAgICAgICAgIHBvdzVtdWx0KG1oaSwgbTUpOwotICAg
ICAgICAgICAgICAgIG11bHQoYiwgbWhpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
ICgoaiA9IGI1IC0gbTUpKQotICAgICAgICAgICAgICAgIHBvdzVtdWx0KGIsIGopOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHBvdzVtdWx0KGIsIGI1KTsKLSAgICB9Ci0gICAgaTJiKFMs
IDEpOwotICAgIGlmIChzNSA+IDApCi0gICAgICAgIHBvdzVtdWx0KFMsIHM1KTsKLQotICAgIC8q
IENoZWNrIGZvciBzcGVjaWFsIGNhc2UgdGhhdCBkIGlzIGEgbm9ybWFsaXplZCBwb3dlciBvZiAy
LiAqLwotCi0gICAgc3BlY19jYXNlID0gMDsKLSAgICBpZiAoKHJvdW5kaW5nTm9uZSB8fCBsZWZ0
cmlnaHQpICYmICghd29yZDEoJnUpICYmICEod29yZDAoJnUpICYgQm5kcnlfbWFzaykgJiYgd29y
ZDAoJnUpICYgKEV4cF9tYXNrICYgfkV4cF9tc2sxKSkpIHsKLSAgICAgICAgLyogVGhlIHNwZWNp
YWwgY2FzZSAqLwotICAgICAgICBiMiArPSBMb2cyUDsKLSAgICAgICAgczIgKz0gTG9nMlA7Ci0g
ICAgICAgIHNwZWNfY2FzZSA9IDE7Ci0gICAgfQotCi0gICAgLyogQXJyYW5nZSBmb3IgY29udmVu
aWVudCBjb21wdXRhdGlvbiBvZiBxdW90aWVudHM6Ci0gICAgICogc2hpZnQgbGVmdCBpZiBuZWNl
c3Nhcnkgc28gZGl2aXNvciBoYXMgNCBsZWFkaW5nIDAgYml0cy4KLSAgICAgKgotICAgICAqIFBl
cmhhcHMgd2Ugc2hvdWxkIGp1c3QgY29tcHV0ZSBsZWFkaW5nIDI4IGJpdHMgb2YgUyBvbmNlCi0g
ICAgICogYW5kIGZvciBhbGwgYW5kIHBhc3MgdGhlbSBhbmQgYSBzaGlmdCB0byBxdW9yZW0sIHNv
IGl0Ci0gICAgICogY2FuIGRvIHNoaWZ0cyBhbmQgb3JzIHRvIGNvbXB1dGUgdGhlIG51bWVyYXRv
ciBmb3IgcS4KLSAgICAgKi8KLSAgICBpZiAoKGkgPSAoKHM1ID8gMzIgLSBoaTBiaXRzKFMud29y
ZHMoKVtTLnNpemUoKSAtIDFdKSA6IDEpICsgczIpICYgMHgxZikpCi0gICAgICAgIGkgPSAzMiAt
IGk7Ci0gICAgaWYgKGkgPiA0KSB7Ci0gICAgICAgIGkgLT0gNDsKLSAgICAgICAgYjIgKz0gaTsK
LSAgICAgICAgbTIgKz0gaTsKLSAgICAgICAgczIgKz0gaTsKLSAgICB9IGVsc2UgaWYgKGkgPCA0
KSB7Ci0gICAgICAgIGkgKz0gMjg7Ci0gICAgICAgIGIyICs9IGk7Ci0gICAgICAgIG0yICs9IGk7
Ci0gICAgICAgIHMyICs9IGk7Ci0gICAgfQotICAgIGlmIChiMiA+IDApCi0gICAgICAgIGxzaGlm
dChiLCBiMik7Ci0gICAgaWYgKHMyID4gMCkKLSAgICAgICAgbHNoaWZ0KFMsIHMyKTsKLSAgICBp
ZiAoa19jaGVjaykgewotICAgICAgICBpZiAoY21wKGIsIFMpIDwgMCkgewotICAgICAgICAgICAg
ay0tOwotICAgICAgICAgICAgbXVsdGFkZChiLCAxMCwgMCk7ICAgIC8qIHdlIGJvdGNoZWQgdGhl
IGsgZXN0aW1hdGUgKi8KLSAgICAgICAgICAgIGlmIChsZWZ0cmlnaHQpCi0gICAgICAgICAgICAg
ICAgbXVsdGFkZChtaGksIDEwLCAwKTsKLSAgICAgICAgICAgIGlsaW0gPSBpbGltMTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAoaWxpbSA8PSAwICYmIHJvdW5kaW5nRGVjaW1hbFBsYWNlcykg
ewotICAgICAgICBpZiAoaWxpbSA8IDApCi0gICAgICAgICAgICBnb3RvIG5vRGlnaXRzOwotICAg
ICAgICBtdWx0YWRkKFMsIDUsIDApOwotICAgICAgICAvLyBGb3IgSUVFRS03NTQgdW5iaWFzZWQg
cm91bmRpbmcgdGhpcyBjaGVjayBzaG91bGQgYmUgPD0sIHN1Y2ggdGhhdCAwLjUgd291bGQgZmx1
c2ggdG8gemVyby4KLSAgICAgICAgaWYgKGNtcChiLCBTKSA8IDApCi0gICAgICAgICAgICBnb3Rv
IG5vRGlnaXRzOwotICAgICAgICBnb3RvIG9uZURpZ2l0OwotICAgIH0KLSAgICBpZiAobGVmdHJp
Z2h0KSB7Ci0gICAgICAgIGlmIChtMiA+IDApCi0gICAgICAgICAgICBsc2hpZnQobWhpLCBtMik7
Ci0KLSAgICAgICAgLyogQ29tcHV0ZSBtbG8gLS0gY2hlY2sgZm9yIHNwZWNpYWwgY2FzZQotICAg
ICAgICAgKiB0aGF0IGQgaXMgYSBub3JtYWxpemVkIHBvd2VyIG9mIDIuCi0gICAgICAgICAqLwot
Ci0gICAgICAgIG1sbyA9IG1oaTsKLSAgICAgICAgaWYgKHNwZWNfY2FzZSkKLSAgICAgICAgICAg
IGxzaGlmdChtaGksIExvZzJQKTsKLQotICAgICAgICBmb3IgKGkgPSAxOztpKyspIHsKLSAgICAg
ICAgICAgIGRpZyA9IHF1b3JlbShiLCBTKSArICcwJzsKLSAgICAgICAgICAgIC8qIERvIHdlIHll
dCBoYXZlIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHN0cmluZwotICAgICAgICAgICAgICogdGhhdCB3
aWxsIHJvdW5kIHRvIGQ/Ci0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGogPSBjbXAoYiwg
bWxvKTsKLSAgICAgICAgICAgIGRpZmYoZGVsdGEsIFMsIG1oaSk7Ci0gICAgICAgICAgICBqMSA9
IGRlbHRhLnNpZ24gPyAxIDogY21wKGIsIGRlbHRhKTsKLSNpZmRlZiBEVE9BX1JPVU5EX0JJQVNF
RAotICAgICAgICAgICAgaWYgKGogPCAwIHx8ICFqKSB7Ci0jZWxzZQotICAgICAgICAgICAgLy8g
RklYTUU6IEVDTUEtMjYyIHNwZWNpZmllcyB0aGF0IGVxdWlkaXN0YW50IHJlc3VsdHMgcm91bmQg
YXdheSBmcm9tCi0gICAgICAgICAgICAvLyB6ZXJvLCB3aGljaCBwcm9iYWJseSBtZWFucyB3ZSBz
aG91bGRuJ3QgYmUgb24gdGhlIHVuYmlhc2VkIGNvZGUgcGF0aAotICAgICAgICAgICAgLy8gKHRo
ZSAod29yZDEoJnUpICYgMSkgY2xhdXNlIGlzIGxvb2tpbmcgaGlnaGx5IHN1c3BpY2lvdXMpLiBJ
IGhhdmVuJ3QKLSAgICAgICAgICAgIC8vIHlldCB1bmRlcnN0b29kIHRoaXMgY29kZSB3ZWxsIGVu
b3VnaCB0byBtYWtlIHRoZSBjYWxsLCBidXQgd2Ugc2hvdWxkCi0gICAgICAgICAgICAvLyBwcm9i
YWJseSBiZSBlbmFibGluZyBEVE9BX1JPVU5EX0JJQVNFRC4gSSB0aGluayB0aGUgaW50ZXJlc3Rp
bmcgY29ybmVyCi0gICAgICAgICAgICAvLyBjYXNlIHRvIHVuZGVyc3RhbmQgaXMgcHJvYmFibHkg
Ik1hdGgucG93KDAuNSwgMjQpLnRvU3RyaW5nKCkiLgotICAgICAgICAgICAgLy8gSSBiZWxpZXZl
IHRoaXMgdmFsdWUgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBJIHRoaW5rIGl0IGlzIHByZWNpc2Vs
eQotICAgICAgICAgICAgLy8gcmVwcmVzZW50YWJsZSBpbiBiaW5hcnkgZmxvYXRpbmcgcG9pbnQs
IGFuZCBpdHMgZGVjaW1hbCByZXByZXNlbnRhdGlvbgotICAgICAgICAgICAgLy8gaGFzIGEgc2lu
Z2xlIGRpZ2l0IHRoYXQgU3RlZWxlICYgV2hpdGUgcmVkdWN0aW9uIGNhbiByZW1vdmUsIHdpdGgg
dGhlCi0gICAgICAgICAgICAvLyB2YWx1ZSA1ICh0aHVzIGVxdWlkaXN0YW50IGZyb20gdGhlIG5l
eHQgbnVtYmVycyBhYm92ZSBhbmQgYmVsb3cpLgotICAgICAgICAgICAgLy8gV2UgcHJvZHVjZSB0
aGUgY29ycmVjdCBhbnN3ZXIgdXNpbmcgZWl0aGVyIGNvZGVwYXRoLCBhbmQgSSBkb24ndCBhcwot
ICAgICAgICAgICAgLy8geWV0IHVuZGVyc3RhbmQgd2h5LiA6LSkKLSAgICAgICAgICAgIGlmICgh
ajEgJiYgISh3b3JkMSgmdSkgJiAxKSkgewotICAgICAgICAgICAgICAgIGlmIChkaWcgPT0gJzkn
KQotICAgICAgICAgICAgICAgICAgICBnb3RvIHJvdW5kOXVwOwotICAgICAgICAgICAgICAgIGlm
IChqID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZGlnKys7Ci0gICAgICAgICAgICAgICAgKnMr
KyA9IGRpZzsKLSAgICAgICAgICAgICAgICBnb3RvIHJldDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChqIDwgMCB8fCAoIWogJiYgISh3b3JkMSgmdSkgJiAxKSkpIHsKLSNlbmRpZgot
ICAgICAgICAgICAgICAgIGlmICgoYi53b3JkcygpWzBdIHx8IGIuc2l6ZSgpID4gMSkgJiYgKGox
ID4gMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbHNoaWZ0KGIsIDEpOwotICAgICAgICAgICAg
ICAgICAgICBqMSA9IGNtcChiLCBTKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gRm9yIElFRUUt
NzU0IHJvdW5kLXRvLWV2ZW4sIHRoaXMgY2hlY2sgc2hvdWxkIGJlIChqMSA+IDAgfHwgKCFqMSAm
JiAoZGlnICYgMSkpKSwKLSAgICAgICAgICAgICAgICAgICAgLy8gYnV0IEVDTUEtMjYyIHNwZWNp
ZmllcyB0aGF0IGVxdWlkaXN0YW50IHZhbHVlcyAoZS5nLiAoLjUpLnRvRml4ZWQoKSkgc2hvdWxk
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGJlIHJvdW5kZWQgYXdheSBmcm9tIHplcm8uCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChqMSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZGlnID09ICc5JykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJvdW5kOXVw
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGlnKys7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKnMrKyA9IGRpZzsKLSAgICAgICAg
ICAgICAgICBnb3RvIHJldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChqMSA+IDAp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZGlnID09ICc5JykgeyAvKiBwb3NzaWJsZSBpZiBpID09
IDEgKi8KLXJvdW5kOXVwOgotICAgICAgICAgICAgICAgICAgICAqcysrID0gJzknOwotICAgICAg
ICAgICAgICAgICAgICBnb3RvIHJvdW5kb2ZmOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAqcysrID0gZGlnICsgMTsKLSAgICAgICAgICAgICAgICBnb3RvIHJldDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICpzKysgPSBkaWc7Ci0gICAgICAgICAgICBpZiAoaSA9PSBp
bGltKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbXVsdGFkZChiLCAxMCwg
MCk7Ci0gICAgICAgICAgICBtdWx0YWRkKG1sbywgMTAsIDApOwotICAgICAgICAgICAgbXVsdGFk
ZChtaGksIDEwLCAwKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaSA9
IDE7OyBpKyspIHsKLSAgICAgICAgICAgICpzKysgPSBkaWcgPSBxdW9yZW0oYiwgUykgKyAnMCc7
Ci0gICAgICAgICAgICBpZiAoIWIud29yZHMoKVswXSAmJiBiLnNpemUoKSA8PSAxKQotICAgICAg
ICAgICAgICAgIGdvdG8gcmV0OwotICAgICAgICAgICAgaWYgKGkgPj0gaWxpbSkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG11bHRhZGQoYiwgMTAsIDApOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLyogUm91bmQgb2ZmIGxhc3QgZGlnaXQgKi8KLQotICAgIGxzaGlmdChi
LCAxKTsKLSAgICBqID0gY21wKGIsIFMpOwotICAgIC8vIEZvciBJRUVFLTc1NCByb3VuZC10by1l
dmVuLCB0aGlzIGNoZWNrIHNob3VsZCBiZSAoaiA+IDAgfHwgKCFqICYmIChkaWcgJiAxKSkpLAot
ICAgIC8vIGJ1dCBFQ01BLTI2MiBzcGVjaWZpZXMgdGhhdCBlcXVpZGlzdGFudCB2YWx1ZXMgKGUu
Zy4gKC41KS50b0ZpeGVkKCkpIHNob3VsZAotICAgIC8vIGJlIHJvdW5kZWQgYXdheSBmcm9tIHpl
cm8uCi0gICAgaWYgKGogPj0gMCkgewotcm91bmRvZmY6Ci0gICAgICAgIHdoaWxlICgqLS1zID09
ICc5JykKLSAgICAgICAgICAgIGlmIChzID09IHMwKSB7Ci0gICAgICAgICAgICAgICAgaysrOwot
ICAgICAgICAgICAgICAgICpzKysgPSAnMSc7Ci0gICAgICAgICAgICAgICAgZ290byByZXQ7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICsrKnMrKzsKLSAgICB9IGVsc2UgewotICAgICAgICB3aGls
ZSAoKi0tcyA9PSAnMCcpIHsgfQotICAgICAgICBzKys7Ci0gICAgfQotICAgIGdvdG8gcmV0Owot
bm9EaWdpdHM6Ci0gICAgZXhwb25lbnRPdXQgPSAwOwotICAgIHByZWNpc2lvbk91dCA9IDE7Ci0g
ICAgcmVzdWx0WzBdID0gJzAnOwotICAgIHJlc3VsdFsxXSA9ICdcMCc7Ci0gICAgcmV0dXJuOwot
b25lRGlnaXQ6Ci0gICAgKnMrKyA9ICcxJzsKLSAgICBrKys7Ci0gICAgZ290byByZXQ7Ci1yZXQ6
Ci0gICAgQVNTRVJUKHMgPiByZXN1bHQpOwotICAgICpzID0gMDsKLSAgICBleHBvbmVudE91dCA9
IGs7Ci0gICAgcHJlY2lzaW9uT3V0ID0gcyAtIHJlc3VsdDsKLX0KLQotdm9pZCBkdG9hKER0b2FC
dWZmZXIgcmVzdWx0LCBkb3VibGUgZGQsIGJvb2wmIHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2ln
bmVkJiBwcmVjaXNpb24pCi17Ci0gICAgLy8gZmxhZ3MgYXJlIHJvdW5kaW5nTm9uZSwgbGVmdHJp
Z2h0LgotICAgIGR0b2E8dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlPihyZXN1bHQsIGRkLCAwLCBz
aWduLCBleHBvbmVudCwgcHJlY2lzaW9uKTsKLX0KLQotdm9pZCBkdG9hUm91bmRTRihEdG9hQnVm
ZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBpbnQgbmRpZ2l0cywgYm9vbCYgc2lnbiwgaW50JiBleHBv
bmVudCwgdW5zaWduZWQmIHByZWNpc2lvbikKLXsKLSAgICAvLyBmbGFnIGlzIHJvdW5kaW5nU2ln
bmlmaWNhbnRGaWd1cmVzLgotICAgIGR0b2E8ZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZT4ocmVz
dWx0LCBkZCwgbmRpZ2l0cywgc2lnbiwgZXhwb25lbnQsIHByZWNpc2lvbik7Ci19Ci0KLXZvaWQg
ZHRvYVJvdW5kRFAoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMsIGJv
b2wmIHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24pCi17Ci0gICAgLy8g
ZmxhZyBpcyByb3VuZGluZ0RlY2ltYWxQbGFjZXMuCi0gICAgZHRvYTxmYWxzZSwgZmFsc2UsIHRy
dWUsIGZhbHNlPihyZXN1bHQsIGRkLCBuZGlnaXRzLCBzaWduLCBleHBvbmVudCwgcHJlY2lzaW9u
KTsKLX0KLQotY29uc3QgY2hhciogbnVtYmVyVG9TdHJpbmcoZG91YmxlIGQsIE51bWJlclRvU3Ry
aW5nQnVmZmVyIGJ1ZmZlcikKLXsKLSAgICBkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRl
ciBidWlsZGVyKGJ1ZmZlciwgTnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotICAgIGNvbnN0
IGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVUb1N0cmluZ0NvbnZlcnRlciYgY29udmVydGVyID0g
ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29u
dmVydGVyKCk7Ci0gICAgY29udmVydGVyLlRvU2hvcnRlc3QoZCwgJmJ1aWxkZXIpOwotICAgIHJl
dHVybiBidWlsZGVyLkZpbmFsaXplKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciog
Zm9ybWF0U3RyaW5nVHJ1bmNhdGluZ1RyYWlsaW5nWmVyb3NJZk5lZWRlZChOdW1iZXJUb1N0cmlu
Z0J1ZmZlciBidWZmZXIsIGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyJiBidWlsZGVy
KQotewotICAgIHNpemVfdCBsZW5ndGggPSBidWlsZGVyLnBvc2l0aW9uKCk7Ci0gICAgc2l6ZV90
IGRlY2ltYWxQb2ludFBvc2l0aW9uID0gMDsKLSAgICBmb3IgKDsgZGVjaW1hbFBvaW50UG9zaXRp
b24gPCBsZW5ndGg7ICsrZGVjaW1hbFBvaW50UG9zaXRpb24pIHsKLSAgICAgICAgaWYgKGJ1ZmZl
cltkZWNpbWFsUG9pbnRQb3NpdGlvbl0gPT0gJy4nKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgLy8gTm8gZGVjaW1hbCBzZXBlcmF0b3IgZm91bmQsIGVhcmx5IGV4aXQuCi0gICAg
aWYgKGRlY2ltYWxQb2ludFBvc2l0aW9uID09IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGJ1aWxk
ZXIuRmluYWxpemUoKTsKLQotICAgIHNpemVfdCB0cnVuY2F0ZWRMZW5ndGggPSBsZW5ndGggLSAx
OwotICAgIGZvciAoOyB0cnVuY2F0ZWRMZW5ndGggPiBkZWNpbWFsUG9pbnRQb3NpdGlvbjsgLS10
cnVuY2F0ZWRMZW5ndGgpIHsKLSAgICAgICAgaWYgKGJ1ZmZlclt0cnVuY2F0ZWRMZW5ndGhdICE9
ICcwJykKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIE5vIHRyYWlsaW5nIHpl
cm9zIGZvdW5kIHRvIHN0cmlwLgotICAgIGlmICh0cnVuY2F0ZWRMZW5ndGggPT0gbGVuZ3RoIC0g
MSkKLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIuRmluYWxpemUoKTsKLQotICAgIC8vIElmIHdlIHJl
bW92ZWQgYWxsIHRyYWlsaW5nIHplcm9zLCByZW1vdmUgdGhlIGRlY2ltYWwgcG9pbnQgYXMgd2Vs
bC4KLSAgICBpZiAodHJ1bmNhdGVkTGVuZ3RoID09IGRlY2ltYWxQb2ludFBvc2l0aW9uKSB7Ci0g
ICAgICAgIEFTU0VSVCh0cnVuY2F0ZWRMZW5ndGggPiAwKTsKLSAgICAgICAgLS10cnVuY2F0ZWRM
ZW5ndGg7Ci0gICAgfQotCi0gICAgLy8gVHJ1bmNhdGUgdGhlIFN0cmluZ0J1aWxkZXIsIGFuZCBy
ZXR1cm4gdGhlIGZpbmFsIHJlc3VsdC4KLSAgICBidWlsZGVyLlNldFBvc2l0aW9uKHRydW5jYXRl
ZExlbmd0aCArIDEpOwotICAgIHJldHVybiBidWlsZGVyLkZpbmFsaXplKCk7Ci19Ci0KLWNvbnN0
IGNoYXIqIG51bWJlclRvRml4ZWRQcmVjaXNpb25TdHJpbmcoZG91YmxlIGQsIHVuc2lnbmVkIHNp
Z25pZmljYW50RmlndXJlcywgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyLCBib29sIHRydW5j
YXRlVHJhaWxpbmdaZXJvcykKLXsKLSAgICAvLyBNaW1pYyBTdHJpbmc6OmZvcm1hdCgiJS5bcHJl
Y2lzaW9uXWciLCAuLi4pLCBidXQgdXNlIGR0b2FzIHJvdW5kaW5nIGZhY2lsaXRpZXMuCi0gICAg
Ly8gImciOiBTaWduZWQgdmFsdWUgcHJpbnRlZCBpbiBmIG9yIGUgZm9ybWF0LCB3aGljaGV2ZXIg
aXMgbW9yZSBjb21wYWN0IGZvciB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHByZWNpc2lvbi4KLSAgICAv
LyBUaGUgZSBmb3JtYXQgaXMgdXNlZCBvbmx5IHdoZW4gdGhlIGV4cG9uZW50IG9mIHRoZSB2YWx1
ZSBpcyBsZXNzIHRoYW4g4oCTNCBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlCi0gICAg
Ly8gcHJlY2lzaW9uIGFyZ3VtZW50LiBUcmFpbGluZyB6ZXJvcyBhcmUgdHJ1bmNhdGVkLCBhbmQg
dGhlIGRlY2ltYWwgcG9pbnQgYXBwZWFycyBvbmx5IGlmIG9uZSBvciBtb3JlIGRpZ2l0cyBmb2xs
b3cgaXQuCi0gICAgLy8gInByZWNpc2lvbiI6IFRoZSBwcmVjaXNpb24gc3BlY2lmaWVzIHRoZSBt
YXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgcHJpbnRlZC4KLSAgICBkb3VibGVf
Y29udmVyc2lvbjo6U3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgTnVtYmVyVG9TdHJpbmdC
dWZmZXJMZW5ndGgpOwotICAgIGNvbnN0IGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVUb1N0cmlu
Z0NvbnZlcnRlciYgY29udmVydGVyID0gZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZVRvU3RyaW5n
Q29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7Ci0gICAgY29udmVydGVyLlRvUHJlY2lz
aW9uKGQsIHNpZ25pZmljYW50RmlndXJlcywgJmJ1aWxkZXIpOwotICAgIGlmICghdHJ1bmNhdGVU
cmFpbGluZ1plcm9zKQotICAgICAgICByZXR1cm4gYnVpbGRlci5GaW5hbGl6ZSgpOwotICAgIHJl
dHVybiBmb3JtYXRTdHJpbmdUcnVuY2F0aW5nVHJhaWxpbmdaZXJvc0lmTmVlZGVkKGJ1ZmZlciwg
YnVpbGRlcik7Ci19Ci0KLWNvbnN0IGNoYXIqIG51bWJlclRvRml4ZWRXaWR0aFN0cmluZyhkb3Vi
bGUgZCwgdW5zaWduZWQgZGVjaW1hbFBsYWNlcywgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVy
KQotewotICAgIC8vIE1pbWljIFN0cmluZzo6Zm9ybWF0KCIlLltwcmVjaXNpb25dZiIsIC4uLiks
IGJ1dCB1c2UgZHRvYXMgcm91bmRpbmcgZmFjaWxpdGllcy4KLSAgICAvLyAiZiI6IFNpZ25lZCB2
YWx1ZSBoYXZpbmcgdGhlIGZvcm0gWyDigJMgXWRkZGQuZGRkZCwgd2hlcmUgZGRkZCBpcyBvbmUg
b3IgbW9yZSBkZWNpbWFsIGRpZ2l0cy4KLSAgICAvLyBUaGUgbnVtYmVyIG9mIGRpZ2l0cyBiZWZv
cmUgdGhlIGRlY2ltYWwgcG9pbnQgZGVwZW5kcyBvbiB0aGUgbWFnbml0dWRlIG9mIHRoZSBudW1i
ZXIsIGFuZAotICAgIC8vIHRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBv
aW50IGRlcGVuZHMgb24gdGhlIHJlcXVlc3RlZCBwcmVjaXNpb24uCi0gICAgLy8gInByZWNpc2lv
biI6IFRoZSBwcmVjaXNpb24gdmFsdWUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZGlnaXRzIGFm
dGVyIHRoZSBkZWNpbWFsIHBvaW50LgotICAgIC8vIElmIGEgZGVjaW1hbCBwb2ludCBhcHBlYXJz
LCBhdCBsZWFzdCBvbmUgZGlnaXQgYXBwZWFycyBiZWZvcmUgaXQuCi0gICAgLy8gVGhlIHZhbHVl
IGlzIHJvdW5kZWQgdG8gdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZiBkaWdpdHMuICAgIAotICAg
IGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoYnVmZmVyLCBOdW1iZXJU
b1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgY29uc3QgZG91YmxlX2NvbnZlcnNpb246OkRvdWJs
ZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBkb3VibGVfY29udmVyc2lvbjo6RG91Ymxl
VG9TdHJpbmdDb252ZXJ0ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKTsKLSAgICBjb252ZXJ0ZXIu
VG9GaXhlZChkLCBkZWNpbWFsUGxhY2VzLCAmYnVpbGRlcik7Ci0gICAgcmV0dXJuIGJ1aWxkZXIu
RmluYWxpemUoKTsKLX0KLQotbmFtZXNwYWNlIEludGVybmFsIHsKLQotZG91YmxlIHBhcnNlRG91
YmxlRnJvbUxvbmdTdHJpbmcoY29uc3QgVUNoYXIqIHN0cmluZywgc2l6ZV90IGxlbmd0aCwgc2l6
ZV90JiBwYXJzZWRMZW5ndGgpCi17Ci0gICAgVmVjdG9yPExDaGFyPiBjb252ZXJzaW9uQnVmZmVy
KGxlbmd0aCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAg
ICAgY29udmVyc2lvbkJ1ZmZlcltpXSA9IGlzQVNDSUkoc3RyaW5nW2ldKSA/IHN0cmluZ1tpXSA6
IDA7Ci0gICAgcmV0dXJuIHBhcnNlRG91YmxlKGNvbnZlcnNpb25CdWZmZXIuZGF0YSgpLCBsZW5n
dGgsIHBhcnNlZExlbmd0aCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEludGVybmFsCi0KLX0gLy8g
bmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL2R0b2EuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kdG9hLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNWI1YjlmNDgzOWM1N2JjMWQ3ZGNjN2YxYWU4
Nzg1NWIyZDViYzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2EuaAorKysgL2Rldi9udWxs
CkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYg
V1RGX2R0b2FfaAotI2RlZmluZSBXVEZfZHRvYV9oCi0KLSNpbmNsdWRlIDx1bmljb2RlL3V0eXBl
cy5oPgotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL2R0b2EvZG91
YmxlLWNvbnZlcnNpb24uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+Ci0KLW5h
bWVzcGFjZSBXVEYgewotCi10eXBlZGVmIGNoYXIgRHRvYUJ1ZmZlcls4MF07Ci0KLVdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGR0b2EoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgYm9vbCYg
c2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbik7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBkdG9hUm91bmRTRihEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBpbnQg
bmRpZ2l0cywgYm9vbCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbik7
Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdG9hUm91bmREUChEdG9hQnVmZmVyIHJlc3VsdCwg
ZG91YmxlIGRkLCBpbnQgbmRpZ2l0cywgYm9vbCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWdu
ZWQmIHByZWNpc2lvbik7Ci0KLS8vIFNpemUgPSA4MCBmb3Igc2l6ZW9mKER0b2FCdWZmZXIpICsg
c29tZSBzaWduIGJpdHMsIGRlY2ltYWwgcG9pbnQsICdlJywgZXhwb25lbnQgZGlnaXRzLgotY29u
c3QgdW5zaWduZWQgTnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGggPSA5NjsKLXR5cGVkZWYgY2hh
ciBOdW1iZXJUb1N0cmluZ0J1ZmZlcltOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07Ci10eXBl
ZGVmIExDaGFyIE51bWJlclRvTFN0cmluZ0J1ZmZlcltOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0
aF07Ci0KLVdURl9FWFBPUlRfUFJJVkFURSBjb25zdCBjaGFyKiBudW1iZXJUb1N0cmluZyhkb3Vi
bGUsIE51bWJlclRvU3RyaW5nQnVmZmVyKTsKLVdURl9FWFBPUlRfUFJJVkFURSBjb25zdCBjaGFy
KiBudW1iZXJUb0ZpeGVkUHJlY2lzaW9uU3RyaW5nKGRvdWJsZSwgdW5zaWduZWQgc2lnbmlmaWNh
bnRGaWd1cmVzLCBOdW1iZXJUb1N0cmluZ0J1ZmZlciwgYm9vbCB0cnVuY2F0ZVRyYWlsaW5nWmVy
b3MgPSBmYWxzZSk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgY29uc3QgY2hhciogbnVtYmVyVG9GaXhl
ZFdpZHRoU3RyaW5nKGRvdWJsZSwgdW5zaWduZWQgZGVjaW1hbFBsYWNlcywgTnVtYmVyVG9TdHJp
bmdCdWZmZXIpOwotCi1kb3VibGUgcGFyc2VEb3VibGUoY29uc3QgTENoYXIqIHN0cmluZywgc2l6
ZV90IGxlbmd0aCwgc2l6ZV90JiBwYXJzZWRMZW5ndGgpOwotZG91YmxlIHBhcnNlRG91YmxlKGNv
bnN0IFVDaGFyKiBzdHJpbmcsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKTsK
LWRvdWJsZSBwYXJzZURvdWJsZShTdHJpbmdWaWV3LCBzaXplX3QmIHBhcnNlZExlbmd0aCk7Ci0K
LW5hbWVzcGFjZSBJbnRlcm5hbCB7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBwYXJz
ZURvdWJsZUZyb21Mb25nU3RyaW5nKGNvbnN0IFVDaGFyKiBzdHJpbmcsIHNpemVfdCBsZW5ndGgs
IHNpemVfdCYgcGFyc2VkTGVuZ3RoKTsKLX0KLQotaW5saW5lIGRvdWJsZSBwYXJzZURvdWJsZShj
b25zdCBMQ2hhciogc3RyaW5nLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0aCkK
LXsKLSAgICByZXR1cm4gZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ1RvRG91YmxlQ29udmVydGVy
OjpTdHJpbmdUb0RvdWJsZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpLCBs
ZW5ndGgsICZwYXJzZWRMZW5ndGgpOwotfQotCi1pbmxpbmUgZG91YmxlIHBhcnNlRG91YmxlKGNv
bnN0IFVDaGFyKiBzdHJpbmcsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKQot
ewotICAgIGNvbnN0IHNpemVfdCBjb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDY0OwotICAgIGlmIChs
ZW5ndGggPiBjb252ZXJzaW9uQnVmZmVyU2l6ZSkKLSAgICAgICAgcmV0dXJuIEludGVybmFsOjpw
YXJzZURvdWJsZUZyb21Mb25nU3RyaW5nKHN0cmluZywgbGVuZ3RoLCBwYXJzZWRMZW5ndGgpOwot
ICAgIExDaGFyIGNvbnZlcnNpb25CdWZmZXJbY29udmVyc2lvbkJ1ZmZlclNpemVdOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpOyArK2kpCi0gICAgICAg
IGNvbnZlcnNpb25CdWZmZXJbaV0gPSBpc0FTQ0lJKHN0cmluZ1tpXSkgPyBzdHJpbmdbaV0gOiAw
OwotICAgIHJldHVybiBwYXJzZURvdWJsZShjb252ZXJzaW9uQnVmZmVyLCBsZW5ndGgsIHBhcnNl
ZExlbmd0aCk7Ci19Ci0KLWlubGluZSBkb3VibGUgcGFyc2VEb3VibGUoU3RyaW5nVmlldyBzdHJp
bmcsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKQotewotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0g
ICAgICAgIHJldHVybiBwYXJzZURvdWJsZShzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxl
bmd0aCgpLCBwYXJzZWRMZW5ndGgpOwotICAgIHJldHVybiBwYXJzZURvdWJsZShzdHJpbmcuY2hh
cmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSwgcGFyc2VkTGVuZ3RoKTsKLX0KLSAgICAKLX0g
Ly8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyOwotdXNp
bmcgV1RGOjpOdW1iZXJUb0xTdHJpbmdCdWZmZXI7Ci11c2luZyBXVEY6Om51bWJlclRvU3RyaW5n
OwotdXNpbmcgV1RGOjpudW1iZXJUb0ZpeGVkUHJlY2lzaW9uU3RyaW5nOwotdXNpbmcgV1RGOjpu
dW1iZXJUb0ZpeGVkV2lkdGhTdHJpbmc7Ci11c2luZyBXVEY6OnBhcnNlRG91YmxlOwotCi0jZW5k
aWYgLy8gV1RGX2R0b2FfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL2R0b2EvQ09QWUlORyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9k
dG9hL0NPUFlJTkcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMzcxOGE5ZWY5ZGFl
NGNiNGFmYTU2ZTQ5MDIxMTc2MGQ4YTk0OWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2Ev
Q09QWUlORworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLUNvcHlyaWdodCAyMDA2LTIw
MTEsIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1SZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLW1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0gICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0iQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi1BIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi1TUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi1PRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2EvTElDRU5TRSBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kdG9hL0xJQ0VOU0UKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMzcxOGE5ZWY5ZGFlNGNiNGFmYTU2ZTQ5MDIxMTc2MGQ4
YTk0OWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2EvTElDRU5TRQorKysgL2Rldi9udWxs
CkBAIC0xLDI2ICswLDAgQEAKLUNvcHlyaWdodCAyMDA2LTIwMTEsIHRoZSBWOCBwcm9qZWN0IGF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLW1l
dDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAgICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gICAgICBkaXNj
bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQKLSAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0iQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi1BIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi1TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLURBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi1PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2EvUkVBRE1FIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL2R0b2EvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
MTg2YjQyMGY0MmJjMTRjN2Q1NzY1ZWE0M2Y2YjI4ZDNjMjliOTIxLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL3d0Zi9kdG9hL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLWh0dHA6
Ly9jb2RlLmdvb2dsZS5jb20vcC9kb3VibGUtY29udmVyc2lvbgotCi1UaGlzIHByb2plY3QgKGRv
dWJsZS1jb252ZXJzaW9uKSBwcm92aWRlcyBiaW5hcnktZGVjaW1hbCBhbmQgZGVjaW1hbC1iaW5h
cnkKLXJvdXRpbmVzIGZvciBJRUVFIGRvdWJsZXMuCi0KLVRoZSBsaWJyYXJ5IGNvbnNpc3RzIG9m
IGVmZmljaWVudCBjb252ZXJzaW9uIHJvdXRpbmVzIHRoYXQgaGF2ZSBiZWVuIGV4dHJhY3RlZAot
ZnJvbSB0aGUgVjggSmF2YVNjcmlwdCBlbmdpbmUuIFRoZSBjb2RlIGhhcyBiZWVuIHJlZmFjdG9y
ZWQgYW5kIGltcHJvdmVkIHNvIHRoYXQKLWl0IGNhbiBiZSB1c2VkIG1vcmUgZWFzaWx5IGluIG90
aGVyIHByb2plY3RzLgotCi1UaGVyZSBpcyBleHRlbnNpdmUgZG9jdW1lbnRhdGlvbiBpbiBzcmMv
ZG91YmxlLWNvbnZlcnNpb24uaC4gT3RoZXIgZXhhbXBsZXMgY2FuCi1iZSBmb3VuZCBpbiB0ZXN0
L2NjdGVzdC90ZXN0LWNvbnZlcnNpb25zLmNjLgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MgYi9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci93dGYvZHRvYS9iaWdudW0tZHRvYS5jYwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjU4YWExNDU4MjExYWZiY2NlNmJjNWJhOGVjNzUxZTkwODFlZjdjNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvZHRvYS9iaWdudW0tZHRvYS5jYworKysgL2Rldi9udWxsCkBA
IC0xLDY1OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0v
LyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vICAg
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCi0vLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLS8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLS8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgImJpZ251bS1kdG9hLmgi
Ci0KLSNpbmNsdWRlICJiaWdudW0uaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLQotbmFtZXNwYWNl
IFdURiB7Ci0KLW5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7Ci0gICAgCi0gICAgc3RhdGlj
IGludCBOb3JtYWxpemVkRXhwb25lbnQodWludDY0X3Qgc2lnbmlmaWNhbmQsIGludCBleHBvbmVu
dCkgewotICAgICAgICBBU1NFUlQoc2lnbmlmaWNhbmQgIT0gMCk7Ci0gICAgICAgIHdoaWxlICgo
c2lnbmlmaWNhbmQgJiBEb3VibGU6OmtIaWRkZW5CaXQpID09IDApIHsKLSAgICAgICAgICAgIHNp
Z25pZmljYW5kID0gc2lnbmlmaWNhbmQgPDwgMTsKLSAgICAgICAgICAgIGV4cG9uZW50ID0gZXhw
b25lbnQgLSAxOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBleHBvbmVudDsKLSAgICB9Ci0g
ICAgCi0gICAgCi0gICAgLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnM6Ci0gICAgLy8gUmV0dXJucyBh
biBlc3RpbWF0aW9uIG9mIGsgc3VjaCB0aGF0IDEwXihrLTEpIDw9IHYgPCAxMF5rLgotICAgIHN0
YXRpYyBpbnQgRXN0aW1hdGVQb3dlcihpbnQgZXhwb25lbnQpOwotICAgIC8vIENvbXB1dGVzIHYg
LyAxMF5lc3RpbWF0ZWRfcG93ZXIgZXhhY3RseSwgYXMgYSByYXRpbyBvZiB0d28gYmlnbnVtcywg
bnVtZXJhdG9yCi0gICAgLy8gYW5kIGRlbm9taW5hdG9yLgotICAgIHN0YXRpYyB2b2lkIEluaXRp
YWxTY2FsZWRTdGFydFZhbHVlcyhkb3VibGUgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGVzdGltYXRlZF9wb3dlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVub21pbmF0b3Is
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFf
bWludXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSog
ZGVsdGFfcGx1cyk7Ci0gICAgLy8gTXVsdGlwbGllcyBudW1lcmF0b3IvZGVub21pbmF0b3Igc28g
dGhhdCBpdHMgdmFsdWVzIGxpZXMgaW4gdGhlIHJhbmdlIDEtMTAuCi0gICAgLy8gUmV0dXJucyBk
ZWNpbWFsX3BvaW50IHMudC4KLSAgICAvLyAgdiA9IG51bWVyYXRvcicvZGVub21pbmF0b3InICog
MTBeKGRlY2ltYWxfcG9pbnQtMSkKLSAgICAvLyAgICAgd2hlcmUgbnVtZXJhdG9yJyBhbmQgZGVu
b21pbmF0b3InIGFyZSB0aGUgdmFsdWVzIG9mIG51bWVyYXRvciBhbmQKLSAgICAvLyAgICAgZGVu
b21pbmF0b3IgYWZ0ZXIgdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KLSAgICBzdGF0aWMgdm9p
ZCBGaXh1cE11bHRpcGx5MTAoaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBpc19ldmVuLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9t
aW5hdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21p
bnVzLCBCaWdudW0qIGRlbHRhX3BsdXMpOwotICAgIC8vIEdlbmVyYXRlcyBkaWdpdHMgZnJvbSB0
aGUgbGVmdCB0byB0aGUgcmlnaHQgYW5kIHN0b3BzIHdoZW4gdGhlIGdlbmVyYXRlZAotICAgIC8v
IGRpZ2l0cyB5aWVsZCB0aGUgc2hvcnRlc3QgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB2Lgot
ICAgIHN0YXRpYyB2b2lkIEdlbmVyYXRlU2hvcnRlc3REaWdpdHMoQmlnbnVtKiBudW1lcmF0b3Is
IEJpZ251bSogZGVub21pbmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0qIGRlbHRhX3BsdXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2V2ZW4sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJSZWZlcmVuY2U8Y2hhcj4gYnVmZmVyLCBp
bnQqIGxlbmd0aCk7Ci0gICAgLy8gR2VuZXJhdGVzICdyZXF1ZXN0ZWRfZGlnaXRzJyBhZnRlciB0
aGUgZGVjaW1hbCBwb2ludC4KLSAgICBzdGF0aWMgdm9pZCBCaWdudW1Ub0ZpeGVkKGludCByZXF1
ZXN0ZWRfZGlnaXRzLCBpbnQqIGRlY2ltYWxfcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclJlZmVyZW5jZTxjaGFyPihidWZmZXIpLCBpbnQq
IGxlbmd0aCk7Ci0gICAgLy8gR2VuZXJhdGVzICdjb3VudCcgZGlnaXRzIG9mIG51bWVyYXRvci9k
ZW5vbWluYXRvci4KLSAgICAvLyBPbmNlICdjb3VudCcgZGlnaXRzIGhhdmUgYmVlbiBwcm9kdWNl
ZCByb3VuZHMgdGhlIHJlc3VsdCBkZXBlbmRpbmcgb24gdGhlCi0gICAgLy8gcmVtYWluZGVyIChy
ZW1haW5kZXJzIG9mIGV4YWN0bHkgLjUgcm91bmQgdXB3YXJkcykuIE1pZ2h0IHVwZGF0ZSB0aGUK
LSAgICAvLyBkZWNpbWFsX3BvaW50IHdoZW4gcm91bmRpbmcgdXAgKGZvciBleGFtcGxlIGZvciAw
Ljk5OTkpLgotICAgIHN0YXRpYyB2b2lkIEdlbmVyYXRlQ291bnRlZERpZ2l0cyhpbnQgY291bnQs
IGludCogZGVjaW1hbF9wb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3IsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclJlZmVyZW5jZTxjaGFyPihidWZmZXIpLCBp
bnQqIGxlbmd0aCk7Ci0gICAgCi0gICAgCi0gICAgdm9pZCBCaWdudW1EdG9hKGRvdWJsZSB2LCBC
aWdudW1EdG9hTW9kZSBtb2RlLCBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKLSAgICAgICAgICAgICAg
ICAgICAgQnVmZmVyUmVmZXJlbmNlPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGludCogZGVj
aW1hbF9wb2ludCkgewotICAgICAgICBBU1NFUlQodiA+IDApOwotICAgICAgICBBU1NFUlQoIURv
dWJsZSh2KS5Jc1NwZWNpYWwoKSk7Ci0gICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gRG91
YmxlKHYpLlNpZ25pZmljYW5kKCk7Ci0gICAgICAgIGJvb2wgaXNfZXZlbiA9IChzaWduaWZpY2Fu
ZCAmIDEpID09IDA7Ci0gICAgICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2KS5FeHBvbmVudCgp
OwotICAgICAgICBpbnQgbm9ybWFsaXplZF9leHBvbmVudCA9IE5vcm1hbGl6ZWRFeHBvbmVudChz
aWduaWZpY2FuZCwgZXhwb25lbnQpOwotICAgICAgICAvLyBlc3RpbWF0ZWRfcG93ZXIgbWlnaHQg
YmUgdG9vIGxvdyBieSAxLgotICAgICAgICBpbnQgZXN0aW1hdGVkX3Bvd2VyID0gRXN0aW1hdGVQ
b3dlcihub3JtYWxpemVkX2V4cG9uZW50KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFNob3J0Y3V0
IGZvciBGaXhlZC4KLSAgICAgICAgLy8gVGhlIHJlcXVlc3RlZCBkaWdpdHMgY29ycmVzcG9uZCB0
byB0aGUgZGlnaXRzIGFmdGVyIHRoZSBwb2ludC4gSWYgdGhlCi0gICAgICAgIC8vIG51bWJlciBp
cyBtdWNoIHRvbyBzbWFsbCwgdGhlbiB0aGVyZSBpcyBubyBuZWVkIGluIHRyeWluZyB0byBnZXQg
YW55Ci0gICAgICAgIC8vIGRpZ2l0cy4KLSAgICAgICAgaWYgKG1vZGUgPT0gQklHTlVNX0RUT0Ff
RklYRUQgJiYgLWVzdGltYXRlZF9wb3dlciAtIDEgPiByZXF1ZXN0ZWRfZGlnaXRzKSB7Ci0gICAg
ICAgICAgICBidWZmZXJbMF0gPSAnXDAnOwotICAgICAgICAgICAgKmxlbmd0aCA9IDA7Ci0gICAg
ICAgICAgICAvLyBTZXQgZGVjaW1hbC1wb2ludCB0byAtcmVxdWVzdGVkX2RpZ2l0cy4gVGhpcyBp
cyB3aGF0IEdheSBkb2VzLgotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0IHNob3VsZCBub3Qg
aGF2ZSBhbnkgZWZmZWN0IGFueXdheXMgc2luY2UgdGhlIHN0cmluZyBpcwotICAgICAgICAgICAg
Ly8gZW1wdHkuCi0gICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IC1yZXF1ZXN0ZWRfZGlnaXRz
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBCaWdu
dW0gbnVtZXJhdG9yOwotICAgICAgICBCaWdudW0gZGVub21pbmF0b3I7Ci0gICAgICAgIEJpZ251
bSBkZWx0YV9taW51czsKLSAgICAgICAgQmlnbnVtIGRlbHRhX3BsdXM7Ci0gICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGUgYmlnbnVtIGNhbiBncm93IGxhcmdlIGVub3VnaC4gVGhlIHNtYWxsZXN0IGRv
dWJsZSBlcXVhbHMKLSAgICAgICAgLy8gNGUtMzI0LiBJbiB0aGlzIGNhc2UgdGhlIGRlbm9taW5h
dG9yIG5lZWRzIGZld2VyIHRoYW4gMzI0KjQgYmluYXJ5IGRpZ2l0cy4KLSAgICAgICAgLy8gVGhl
IG1heGltdW0gZG91YmxlIGlzIDEuNzk3NjkzMTM0ODYyMzE1N2UzMDggd2hpY2ggbmVlZHMgZmV3
ZXIgdGhhbgotICAgICAgICAvLyAzMDgqNCBiaW5hcnkgZGlnaXRzLgotICAgICAgICBBU1NFUlQo
QmlnbnVtOjprTWF4U2lnbmlmaWNhbnRCaXRzID49IDMyNCo0KTsKLSAgICAgICAgYm9vbCBuZWVk
X2JvdW5kYXJ5X2RlbHRhcyA9IChtb2RlID09IEJJR05VTV9EVE9BX1NIT1JURVNUKTsKLSAgICAg
ICAgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzKHYsIGVzdGltYXRlZF9wb3dlciwgbmVlZF9ib3Vu
ZGFyeV9kZWx0YXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVtZXJhdG9y
LCAmZGVub21pbmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVsdGFf
bWludXMsICZkZWx0YV9wbHVzKTsKLSAgICAgICAgLy8gV2Ugbm93IGhhdmUgdiA9IChudW1lcmF0
b3IgLyBkZW5vbWluYXRvcikgKiAxMF5lc3RpbWF0ZWRfcG93ZXIuCi0gICAgICAgIEZpeHVwTXVs
dGlwbHkxMChlc3RpbWF0ZWRfcG93ZXIsIGlzX2V2ZW4sIGRlY2ltYWxfcG9pbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAmZGVsdGFfbWludXMsICZkZWx0YV9wbHVzKTsKLSAgICAgICAgLy8gV2Ugbm93
IGhhdmUgdiA9IChudW1lcmF0b3IgLyBkZW5vbWluYXRvcikgKiAxMF4oZGVjaW1hbF9wb2ludC0x
KSwgYW5kCi0gICAgICAgIC8vICAxIDw9IChudW1lcmF0b3IgKyBkZWx0YV9wbHVzKSAvIGRlbm9t
aW5hdG9yIDwgMTAKLSAgICAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgICAgICAgICBjYXNlIEJJ
R05VTV9EVE9BX1NIT1JURVNUOgotICAgICAgICAgICAgICAgIEdlbmVyYXRlU2hvcnRlc3REaWdp
dHMoJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmRlbHRhX21pbnVzLCAmZGVsdGFfcGx1cywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlzX2V2ZW4sIGJ1ZmZlciwgbGVuZ3RoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQklHTlVNX0RUT0FfRklYRUQ6Ci0gICAg
ICAgICAgICAgICAgQmlnbnVtVG9GaXhlZChyZXF1ZXN0ZWRfZGlnaXRzLCBkZWNpbWFsX3BvaW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9y
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCSUdOVU1fRFRPQV9QUkVDSVNJT046
Ci0gICAgICAgICAgICAgICAgR2VuZXJhdGVDb3VudGVkRGlnaXRzKHJlcXVlc3RlZF9kaWdpdHMs
IGRlY2ltYWxfcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZu
dW1lcmF0b3IsICZkZW5vbWluYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnVmZmVyLCBsZW5ndGgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0g
ICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICdcMCc7Ci0gICAgfQotICAgIAotICAgIAotICAgIC8v
IFRoZSBwcm9jZWR1cmUgc3RhcnRzIGdlbmVyYXRpbmcgZGlnaXRzIGZyb20gdGhlIGxlZnQgdG8g
dGhlIHJpZ2h0IGFuZCBzdG9wcwotICAgIC8vIHdoZW4gdGhlIGdlbmVyYXRlZCBkaWdpdHMgeWll
bGQgdGhlIHNob3J0ZXN0IGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygdi4gQQotICAgIC8vIGRl
Y2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdiBpcyBhIG51bWJlciBseWluZyBjbG9zZXIgdG8gdiB0
aGFuIHRvIGFueSBvdGhlcgotICAgIC8vIGRvdWJsZSwgc28gaXQgY29udmVydHMgdG8gdiB3aGVu
IHJlYWQuCi0gICAgLy8KLSAgICAvLyBUaGlzIGlzIHRydWUgaWYgZCwgdGhlIGRlY2ltYWwgcmVw
cmVzZW50YXRpb24sIGlzIGJldHdlZW4gbS0gYW5kIG0rLCB0aGUKLSAgICAvLyB1cHBlciBhbmQg
bG93ZXIgYm91bmRhcmllcy4gZCBtdXN0IGJlIHN0cmljdGx5IGJldHdlZW4gdGhlbSBpZiAhaXNf
ZXZlbi4KLSAgICAvLyAgICAgICAgICAgbS0gOj0gKG51bWVyYXRvciAtIGRlbHRhX21pbnVzKSAv
IGRlbm9taW5hdG9yCi0gICAgLy8gICAgICAgICAgIG0rIDo9IChudW1lcmF0b3IgKyBkZWx0YV9w
bHVzKSAvIGRlbm9taW5hdG9yCi0gICAgLy8KLSAgICAvLyBQcmVjb25kaXRpb246IDAgPD0gKG51
bWVyYXRvcitkZWx0YV9wbHVzKSAvIGRlbm9taW5hdG9yIDwgMTAuCi0gICAgLy8gICBJZiAxIDw9
IChudW1lcmF0b3IrZGVsdGFfcGx1cykgLyBkZW5vbWluYXRvciA8IDEwIHRoZW4gbm8gbGVhZGlu
ZyAwIGRpZ2l0Ci0gICAgLy8gICB3aWxsIGJlIHByb2R1Y2VkLiBUaGlzIHNob3VsZCBiZSB0aGUg
c3RhbmRhcmQgcHJlY29uZGl0aW9uLgotICAgIHN0YXRpYyB2b2lkIEdlbmVyYXRlU2hvcnRlc3RE
aWdpdHMoQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0q
IGRlbHRhX3BsdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGlzX2V2ZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJS
ZWZlcmVuY2U8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCkgewotICAgICAgICAvLyBTbWFsbCBv
cHRpbWl6YXRpb246IGlmIGRlbHRhX21pbnVzIGFuZCBkZWx0YV9wbHVzIGFyZSB0aGUgc2FtZSBq
dXN0IHJldXNlCi0gICAgICAgIC8vIG9uZSBvZiB0aGUgdHdvIGJpZ251bXMuCi0gICAgICAgIGlm
IChCaWdudW06OkVxdWFsKCpkZWx0YV9taW51cywgKmRlbHRhX3BsdXMpKSB7Ci0gICAgICAgICAg
ICBkZWx0YV9wbHVzID0gZGVsdGFfbWludXM7Ci0gICAgICAgIH0KLSAgICAgICAgKmxlbmd0aCA9
IDA7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICB1aW50MTZfdCBkaWdpdDsK
LSAgICAgICAgICAgIGRpZ2l0ID0gbnVtZXJhdG9yLT5EaXZpZGVNb2R1bG9JbnRCaWdudW0oKmRl
bm9taW5hdG9yKTsKLSAgICAgICAgICAgIEFTU0VSVChkaWdpdCA8PSA5KTsgIC8vIGRpZ2l0IGlz
IGEgdWludDE2X3QgYW5kIHRoZXJlZm9yZSBhbHdheXMgcG9zaXRpdmUuCi0gICAgICAgICAgICAv
LyBkaWdpdCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yIChpbnRlZ2VyIGRpdmlzaW9uKS4KLSAg
ICAgICAgICAgIC8vIG51bWVyYXRvciA9IG51bWVyYXRvciAlIGRlbm9taW5hdG9yLgotICAgICAg
ICAgICAgYnVmZmVyWygqbGVuZ3RoKSsrXSA9IGRpZ2l0ICsgJzAnOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBDYW4gd2Ugc3RvcCBhbHJlYWR5PwotICAgICAgICAgICAgLy8gSWYgdGhl
IHJlbWFpbmRlciBvZiB0aGUgZGl2aXNpb24gaXMgbGVzcyB0aGFuIHRoZSBkaXN0YW5jZSB0byB0
aGUgbG93ZXIKLSAgICAgICAgICAgIC8vIGJvdW5kYXJ5IHdlIGNhbiBzdG9wLiBJbiB0aGlzIGNh
c2Ugd2Ugc2ltcGx5IHJvdW5kIGRvd24gKGRpc2NhcmRpbmcgdGhlCi0gICAgICAgICAgICAvLyBy
ZW1haW5kZXIpLgotICAgICAgICAgICAgLy8gU2ltaWxhcmx5IHdlIHRlc3QgaWYgd2UgY2FuIHJv
dW5kIHVwICh1c2luZyB0aGUgdXBwZXIgYm91bmRhcnkpLgotICAgICAgICAgICAgYm9vbCBpbl9k
ZWx0YV9yb29tX21pbnVzOwotICAgICAgICAgICAgYm9vbCBpbl9kZWx0YV9yb29tX3BsdXM7Ci0g
ICAgICAgICAgICBpZiAoaXNfZXZlbikgewotICAgICAgICAgICAgICAgIGluX2RlbHRhX3Jvb21f
bWludXMgPSBCaWdudW06Okxlc3NFcXVhbCgqbnVtZXJhdG9yLCAqZGVsdGFfbWludXMpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbl9kZWx0YV9yb29tX21pbnVzID0g
QmlnbnVtOjpMZXNzKCpudW1lcmF0b3IsICpkZWx0YV9taW51cyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoaXNfZXZlbikgewotICAgICAgICAgICAgICAgIGluX2RlbHRhX3Jvb21f
cGx1cyA9Ci0gICAgICAgICAgICAgICAgQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAq
ZGVsdGFfcGx1cywgKmRlbm9taW5hdG9yKSA+PSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBpbl9kZWx0YV9yb29tX3BsdXMgPQotICAgICAgICAgICAgICAgIEJpZ251
bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRvcikgPiAw
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFpbl9kZWx0YV9yb29tX21pbnVzICYm
ICFpbl9kZWx0YV9yb29tX3BsdXMpIHsKLSAgICAgICAgICAgICAgICAvLyBQcmVwYXJlIGZvciBu
ZXh0IGl0ZXJhdGlvbi4KLSAgICAgICAgICAgICAgICBudW1lcmF0b3ItPlRpbWVzMTAoKTsKLSAg
ICAgICAgICAgICAgICBkZWx0YV9taW51cy0+VGltZXMxMCgpOwotICAgICAgICAgICAgICAgIC8v
IFdlIG9wdGltaXplZCBkZWx0YV9wbHVzIHRvIGJlIGVxdWFsIHRvIGRlbHRhX21pbnVzIChpZiB0
aGV5IHNoYXJlIHRoZQotICAgICAgICAgICAgICAgIC8vIHNhbWUgdmFsdWUpLiBTbyBkb24ndCBt
dWx0aXBseSBkZWx0YV9wbHVzIGlmIHRoZXkgcG9pbnQgdG8gdGhlIHNhbWUKLSAgICAgICAgICAg
ICAgICAvLyBvYmplY3QuCi0gICAgICAgICAgICAgICAgaWYgKGRlbHRhX21pbnVzICE9IGRlbHRh
X3BsdXMpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+VGltZXMxMCgpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5fZGVsdGFfcm9vbV9taW51
cyAmJiBpbl9kZWx0YV9yb29tX3BsdXMpIHsKLSAgICAgICAgICAgICAgICAvLyBMZXQncyBzZWUg
aWYgMipudW1lcmF0b3IgPCBkZW5vbWluYXRvci4KLSAgICAgICAgICAgICAgICAvLyBJZiB5ZXMs
IHRoZW4gdGhlIG5leHQgZGlnaXQgd291bGQgYmUgPCA1IGFuZCB3ZSBjYW4gcm91bmQgZG93bi4K
LSAgICAgICAgICAgICAgICBpbnQgY29tcGFyZSA9IEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVy
YXRvciwgKm51bWVyYXRvciwgKmRlbm9taW5hdG9yKTsKLSAgICAgICAgICAgICAgICBpZiAoY29t
cGFyZSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVtYWluaW5nIGRpZ2l0cyBhcmUg
bGVzcyB0aGFuIC41LiAtPiBSb3VuZCBkb3duICg9PSBkbyBub3RoaW5nKS4KLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGNvbXBhcmUgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJl
bWFpbmluZyBkaWdpdHMgYXJlIG1vcmUgdGhhbiAuNSBvZiBkZW5vbWluYXRvci4gLT4gUm91bmQg
dXAuCi0gICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgbGFzdCBkaWdpdCBjb3Vs
ZCBub3QgYmUgYSAnOScgYXMgb3RoZXJ3aXNlIHRoZSB3aG9sZQotICAgICAgICAgICAgICAgICAg
ICAvLyBsb29wIHdvdWxkIGhhdmUgc3RvcHBlZCBlYXJsaWVyLgotICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBzdGlsbCBoYXZlIGFuIGFzc2VydCBoZXJlIGluIGNhc2UgdGhlIHByZWNvbmRpdGlv
bnMgd2VyZSBub3QKLSAgICAgICAgICAgICAgICAgICAgLy8gc2F0aXNmaWVkLgotICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoYnVmZmVyWygqbGVuZ3RoKSAtIDFdICE9ICc5Jyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlclsoKmxlbmd0aCkgLSAxXSsrOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEhhbGZ3YXkgY2FzZS4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IG5lZWQgYSB3YXkgdG8gc29sdmUgaGFsZi13YXkg
Y2FzZXMuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgRm9yIG5vdyBsZXQncyByb3VuZCB0b3dh
cmRzIGV2ZW4gKHNpbmNlIHRoaXMgaXMgd2hhdCBHYXkgc2VlbXMgdG8KLSAgICAgICAgICAgICAg
ICAgICAgLy8gICBkbykuCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoKGJ1ZmZlclsoKmxlbmd0aCkgLSAxXSAtICcwJykgJSAyID09IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFJvdW5kIGRvd24gPT4gRG8gbm90aGluZy4KLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJb
KCpsZW5ndGgpIC0gMV0gIT0gJzknKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclso
Kmxlbmd0aCkgLSAxXSsrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5fZGVs
dGFfcm9vbV9taW51cykgewotICAgICAgICAgICAgICAgIC8vIFJvdW5kIGRvd24gKD09IGRvIG5v
dGhpbmcpLgotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSB7ICAv
LyBpbl9kZWx0YV9yb29tX3BsdXMKLSAgICAgICAgICAgICAgICAvLyBSb3VuZCB1cC4KLSAgICAg
ICAgICAgICAgICAvLyBOb3RlIGFnYWluIHRoYXQgdGhlIGxhc3QgZGlnaXQgY291bGQgbm90IGJl
ICc5JyBzaW5jZSB0aGlzIHdvdWxkIGhhdmUKLSAgICAgICAgICAgICAgICAvLyBzdG9wcGVkIHRo
ZSBsb29wIGVhcmxpZXIuCi0gICAgICAgICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSBhbiBBU1NF
UlQgaGVyZSwgaW4gY2FzZSB0aGUgcHJlY29uZGl0aW9ucyB3ZXJlIG5vdAotICAgICAgICAgICAg
ICAgIC8vIHNhdGlzZmllZC4KLSAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyWygqbGVuZ3Ro
KSAtMV0gIT0gJzknKTsKLSAgICAgICAgICAgICAgICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgCi0gICAgLy8gTGV0IHYgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvciA8IDEw
LgotICAgIC8vIFRoZW4gd2UgZ2VuZXJhdGUgJ2NvdW50JyBkaWdpdHMgb2YgZCA9IHgueHh4eHgu
Li4gKHdpdGhvdXQgdGhlIGRlY2ltYWwgcG9pbnQpCi0gICAgLy8gZnJvbSBsZWZ0IHRvIHJpZ2h0
LiBPbmNlICdjb3VudCcgZGlnaXRzIGhhdmUgYmVlbiBwcm9kdWNlZCB3ZSBkZWNpZGUgd2V0aGVy
Ci0gICAgLy8gdG8gcm91bmQgdXAgb3IgZG93bi4gUmVtYWluZGVycyBvZiBleGFjdGx5IC41IHJv
dW5kIHVwd2FyZHMuIE51bWJlcnMgc3VjaAotICAgIC8vIGFzIDkuOTk5OTk5IHByb3BhZ2F0ZSBh
IGNhcnJ5IGFsbCB0aGUgd2F5LCBhbmQgY2hhbmdlIHRoZQotICAgIC8vIGV4cG9uZW50IChkZWNp
bWFsX3BvaW50KSwgd2hlbiByb3VuZGluZyB1cHdhcmRzLgotICAgIHN0YXRpYyB2b2lkIEdlbmVy
YXRlQ291bnRlZERpZ2l0cyhpbnQgY291bnQsIGludCogZGVjaW1hbF9wb2ludCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSog
ZGVub21pbmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZl
clJlZmVyZW5jZTxjaGFyPihidWZmZXIpLCBpbnQqIGxlbmd0aCkgewotICAgICAgICBBU1NFUlQo
Y291bnQgPj0gMCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgLSAxOyArK2kp
IHsKLSAgICAgICAgICAgIHVpbnQxNl90IGRpZ2l0OwotICAgICAgICAgICAgZGlnaXQgPSBudW1l
cmF0b3ItPkRpdmlkZU1vZHVsb0ludEJpZ251bSgqZGVub21pbmF0b3IpOwotICAgICAgICAgICAg
QVNTRVJUKGRpZ2l0IDw9IDkpOyAgLy8gZGlnaXQgaXMgYSB1aW50MTZfdCBhbmQgdGhlcmVmb3Jl
IGFsd2F5cyBwb3NpdGl2ZS4KLSAgICAgICAgICAgIC8vIGRpZ2l0ID0gbnVtZXJhdG9yIC8gZGVu
b21pbmF0b3IgKGludGVnZXIgZGl2aXNpb24pLgotICAgICAgICAgICAgLy8gbnVtZXJhdG9yID0g
bnVtZXJhdG9yICUgZGVub21pbmF0b3IuCi0gICAgICAgICAgICBidWZmZXJbaV0gPSBkaWdpdCAr
ICcwJzsKLSAgICAgICAgICAgIC8vIFByZXBhcmUgZm9yIG5leHQgaXRlcmF0aW9uLgotICAgICAg
ICAgICAgbnVtZXJhdG9yLT5UaW1lczEwKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gR2VuZXJh
dGUgdGhlIGxhc3QgZGlnaXQuCi0gICAgICAgIHVpbnQxNl90IGRpZ2l0OwotICAgICAgICBkaWdp
dCA9IG51bWVyYXRvci0+RGl2aWRlTW9kdWxvSW50QmlnbnVtKCpkZW5vbWluYXRvcik7Ci0gICAg
ICAgIGlmIChCaWdudW06OlBsdXNDb21wYXJlKCpudW1lcmF0b3IsICpudW1lcmF0b3IsICpkZW5v
bWluYXRvcikgPj0gMCkgewotICAgICAgICAgICAgZGlnaXQrKzsKLSAgICAgICAgfQotICAgICAg
ICBidWZmZXJbY291bnQgLSAxXSA9IGRpZ2l0ICsgJzAnOwotICAgICAgICAvLyBDb3JyZWN0IGJh
ZCBkaWdpdHMgKGluIGNhc2Ugd2UgaGFkIGEgc2VxdWVuY2Ugb2YgJzkncykuIFByb3BhZ2F0ZSB0
aGUKLSAgICAgICAgLy8gY2FycnkgdW50aWwgd2UgaGF0IGEgbm9uLSc5JyBvciB0aWwgd2UgcmVh
Y2ggdGhlIGZpcnN0IGRpZ2l0LgotICAgICAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBpID4g
MDsgLS1pKSB7Ci0gICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9ICcwJyArIDEwKSBicmVhazsK
LSAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICcwJzsKLSAgICAgICAgICAgIGJ1ZmZlcltpIC0gMV0r
KzsKLSAgICAgICAgfQotICAgICAgICBpZiAoYnVmZmVyWzBdID09ICcwJyArIDEwKSB7Ci0gICAg
ICAgICAgICAvLyBQcm9wYWdhdGUgYSBjYXJyeSBwYXN0IHRoZSB0b3AgcGxhY2UuCi0gICAgICAg
ICAgICBidWZmZXJbMF0gPSAnMSc7Ci0gICAgICAgICAgICAoKmRlY2ltYWxfcG9pbnQpKys7Ci0g
ICAgICAgIH0KLSAgICAgICAgKmxlbmd0aCA9IGNvdW50OwotICAgIH0KLSAgICAKLSAgICAKLSAg
ICAvLyBHZW5lcmF0ZXMgJ3JlcXVlc3RlZF9kaWdpdHMnIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50
LiBJdCBtaWdodCBvbWl0Ci0gICAgLy8gdHJhaWxpbmcgJzAncy4gSWYgdGhlIGlucHV0IG51bWJl
ciBpcyB0b28gc21hbGwgdGhlbiBubyBkaWdpdHMgYXQgYWxsIGFyZQotICAgIC8vIGdlbmVyYXRl
ZCAoZXguOiAyIGZpeGVkIGRpZ2l0cyBmb3IgMC4wMDAwMSkuCi0gICAgLy8KLSAgICAvLyBJbnB1
dCB2ZXJpZmllczogIDEgPD0gKG51bWVyYXRvciArIGRlbHRhKSAvIGRlbm9taW5hdG9yIDwgMTAu
Ci0gICAgc3RhdGljIHZvaWQgQmlnbnVtVG9GaXhlZChpbnQgcmVxdWVzdGVkX2RpZ2l0cywgaW50
KiBkZWNpbWFsX3BvaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBu
dW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCdWZmZXJSZWZlcmVuY2U8Y2hhcj4oYnVmZmVyKSwgaW50KiBsZW5ndGgpIHsKLSAgICAg
ICAgLy8gTm90ZSB0aGF0IHdlIGhhdmUgdG8gbG9vayBhdCBtb3JlIHRoYW4ganVzdCB0aGUgcmVx
dWVzdGVkX2RpZ2l0cywgc2luY2UKLSAgICAgICAgLy8gYSBudW1iZXIgY291bGQgYmUgcm91bmRl
ZCB1cC4gRXhhbXBsZTogdj0wLjUgd2l0aCByZXF1ZXN0ZWRfZGlnaXRzPTAuCi0gICAgICAgIC8v
IEV2ZW4gdGhvdWdoIHRoZSBwb3dlciBvZiB2IGVxdWFscyAwIHdlIGNhbid0IGp1c3Qgc3RvcCBo
ZXJlLgotICAgICAgICBpZiAoLSgqZGVjaW1hbF9wb2ludCkgPiByZXF1ZXN0ZWRfZGlnaXRzKSB7
Ci0gICAgICAgICAgICAvLyBUaGUgbnVtYmVyIGlzIGRlZmluaXRpdmVseSB0b28gc21hbGwuCi0g
ICAgICAgICAgICAvLyBFeDogMC4wMDEgd2l0aCByZXF1ZXN0ZWRfZGlnaXRzID09IDEuCi0gICAg
ICAgICAgICAvLyBTZXQgZGVjaW1hbC1wb2ludCB0byAtcmVxdWVzdGVkX2RpZ2l0cy4gVGhpcyBp
cyB3aGF0IEdheSBkb2VzLgotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0IHNob3VsZCBub3Qg
aGF2ZSBhbnkgZWZmZWN0IGFueXdheXMgc2luY2UgdGhlIHN0cmluZyBpcwotICAgICAgICAgICAg
Ly8gZW1wdHkuCi0gICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IC1yZXF1ZXN0ZWRfZGlnaXRz
OwotICAgICAgICAgICAgKmxlbmd0aCA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0gZWxzZSBpZiAoLSgqZGVjaW1hbF9wb2ludCkgPT0gcmVxdWVzdGVkX2RpZ2l0cykgewotICAg
ICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIHZlcmlmeSBpZiB0aGUgbnVtYmVyIHJvdW5kcyBk
b3duIG9yIHVwLgotICAgICAgICAgICAgLy8gRXg6IDAuMDQgYW5kIDAuMDYgd2l0aCByZXF1ZXN0
ZWRfZGlnaXRzID09IDEuCi0gICAgICAgICAgICBBU1NFUlQoKmRlY2ltYWxfcG9pbnQgPT0gLXJl
cXVlc3RlZF9kaWdpdHMpOwotICAgICAgICAgICAgLy8gSW5pdGlhbGx5IHRoZSBmcmFjdGlvbiBs
aWVzIGluIHJhbmdlICgxLCAxMF0uIE11bHRpcGx5IHRoZSBkZW5vbWluYXRvcgotICAgICAgICAg
ICAgLy8gYnkgMTAgc28gdGhhdCB3ZSBjYW4gY29tcGFyZSBtb3JlIGVhc2lseS4KLSAgICAgICAg
ICAgIGRlbm9taW5hdG9yLT5UaW1lczEwKCk7Ci0gICAgICAgICAgICBpZiAoQmlnbnVtOjpQbHVz
Q29tcGFyZSgqbnVtZXJhdG9yLCAqbnVtZXJhdG9yLCAqZGVub21pbmF0b3IpID49IDApIHsKLSAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgZnJhY3Rpb24gaXMgPj0gMC41IHRoZW4gd2UgaGF2ZSB0
byBpbmNsdWRlIHRoZSByb3VuZGVkCi0gICAgICAgICAgICAgICAgLy8gZGlnaXQuCi0gICAgICAg
ICAgICAgICAgYnVmZmVyWzBdID0gJzEnOwotICAgICAgICAgICAgICAgICpsZW5ndGggPSAxOwot
ICAgICAgICAgICAgICAgICgqZGVjaW1hbF9wb2ludCkrKzsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGNhdWdodCBtb3N0IG9mIHNpbWlsYXIg
Y2FzZXMgZWFybGllci4KLSAgICAgICAgICAgICAgICAqbGVuZ3RoID0gMDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IFRoZSByZXF1ZXN0ZWQgZGlnaXRzIGNvcnJlc3BvbmQgdG8gdGhlIGRpZ2l0cyBhZnRlciB0aGUg
cG9pbnQuCi0gICAgICAgICAgICAvLyBUaGUgdmFyaWFibGUgJ25lZWRlZF9kaWdpdHMnIGluY2x1
ZGVzIHRoZSBkaWdpdHMgYmVmb3JlIHRoZSBwb2ludC4KLSAgICAgICAgICAgIGludCBuZWVkZWRf
ZGlnaXRzID0gKCpkZWNpbWFsX3BvaW50KSArIHJlcXVlc3RlZF9kaWdpdHM7Ci0gICAgICAgICAg
ICBHZW5lcmF0ZUNvdW50ZWREaWdpdHMobmVlZGVkX2RpZ2l0cywgZGVjaW1hbF9wb2ludCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9yLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICAKLSAgICAvLyBSZXR1cm5zIGFuIGVzdGltYXRpb24gb2Yg
ayBzdWNoIHRoYXQgMTBeKGstMSkgPD0gdiA8IDEwXmsgd2hlcmUKLSAgICAvLyB2ID0gZiAqIDJe
ZXhwb25lbnQgYW5kIDJeNTIgPD0gZiA8IDJeNTMuCi0gICAgLy8gdiBpcyBoZW5jZSBhIG5vcm1h
bGl6ZWQgZG91YmxlIHdpdGggdGhlIGdpdmVuIGV4cG9uZW50LiBUaGUgb3V0cHV0IGlzIGFuCi0g
ICAgLy8gYXBwcm94aW1hdGlvbiBmb3IgdGhlIGV4cG9uZW50IG9mIHRoZSBkZWNpbWFsIGFwcHJv
aW1hdGlvbiAuZGlnaXRzICogMTBeay4KLSAgICAvLwotICAgIC8vIFRoZSByZXN1bHQgbWlnaHQg
dW5kZXJzaG9vdCBieSAxIGluIHdoaWNoIGNhc2UgMTBeayA8PSB2IDwgMTBeaysxLgotICAgIC8v
IE5vdGU6IHRoaXMgcHJvcGVydHkgaG9sZHMgZm9yIHYncyB1cHBlciBib3VuZGFyeSBtKyB0b28u
Ci0gICAgLy8gICAgMTBeayA8PSBtKyA8IDEwXmsrMS4KLSAgICAvLyAgIChzZWUgZXhwbGFuYXRp
b24gYmVsb3cpLgotICAgIC8vCi0gICAgLy8gRXhhbXBsZXM6Ci0gICAgLy8gIEVzdGltYXRlUG93
ZXIoMCkgICA9PiAxNgotICAgIC8vICBFc3RpbWF0ZVBvd2VyKC01MikgPT4gMAotICAgIC8vCi0g
ICAgLy8gTm90ZTogZSA+PSAwID0+IEVzdGltYXRlZFBvd2VyKGUpID4gMC4gTm8gc2ltaWxhciBj
bGFpbSBjYW4gYmUgbWFkZSBmb3IgZTwwLgotICAgIHN0YXRpYyBpbnQgRXN0aW1hdGVQb3dlcihp
bnQgZXhwb25lbnQpIHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBlc3RpbWF0ZXMgbG9nMTAg
b2YgdiB3aGVyZSB2ID0gZioyXmUgKHdpdGggZSA9PSBleHBvbmVudCkuCi0gICAgICAgIC8vIE5v
dGUgdGhhdCAxMF5mbG9vcihsb2cxMCh2KSkgPD0gdiwgYnV0IHYgPD0gMTBeY2VpbChsb2cxMCh2
KSkuCi0gICAgICAgIC8vIE5vdGUgdGhhdCBmIGlzIGJvdW5kZWQgYnkgaXRzIGNvbnRhaW5lciBz
aXplLiBMZXQgcCA9IDUzICh0aGUgZG91YmxlJ3MKLSAgICAgICAgLy8gc2lnbmlmaWNhbmQgc2l6
ZSkuIFRoZW4gMl4ocC0xKSA8PSBmIDwgMl5wLgotICAgICAgICAvLwotICAgICAgICAvLyBHaXZl
biB0aGF0IGxvZzEwKHYpID09IGxvZzIodikvbG9nMigxMCkgYW5kIGUrKGxlbihmKS0xKSBpcyBx
dWl0ZSBjbG9zZQotICAgICAgICAvLyB0byBsb2cyKHYpIHRoZSBmdW5jdGlvbiBpcyBzaW1wbGlm
aWVkIHRvIChlKyhsZW4oZiktMSkvbG9nMigxMCkpLgotICAgICAgICAvLyBUaGUgY29tcHV0ZWQg
bnVtYmVyIHVuZGVyc2hvb3RzIGJ5IGxlc3MgdGhhbiAwLjYzMSAod2hlbiB3ZSBjb21wdXRlIGxv
ZzMKLSAgICAgICAgLy8gYW5kIG5vdCBsb2cxMCkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE9w
dGltaXphdGlvbjogc2luY2Ugd2Ugb25seSBuZWVkIGFuIGFwcHJveGltYXRlZCByZXN1bHQgdGhp
cyBjb21wdXRhdGlvbgotICAgICAgICAvLyBjYW4gYmUgcGVyZm9ybWVkIG9uIDY0IGJpdCBpbnRl
Z2Vycy4gT24geDg2L3g2NCBhcmNoaXRlY3R1cmUgdGhlIHNwZWVkdXAgaXMKLSAgICAgICAgLy8g
bm90IHJlYWxseSBtZWFzdXJhYmxlLCB0aG91Z2guCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFNp
bmNlIHdlIHdhbnQgdG8gYXZvaWQgb3ZlcnNob290aW5nIHdlIGRlY3JlbWVudCBieSAxZTEwIHNv
IHRoYXQKLSAgICAgICAgLy8gZmxvYXRpbmctcG9pbnQgaW1wcmVjaXNpb25zIGRvbid0IGFmZmVj
dCB1cy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRXhwbGFuYXRpb24gZm9yIHYncyBib3VuZGFy
eSBtKzogdGhlIGNvbXB1dGF0aW9uIHRha2VzIGFkdmFudGFnZSBvZgotICAgICAgICAvLyB0aGUg
ZmFjdCB0aGF0IDJeKHAtMSkgPD0gZiA8IDJecC4gQm91bmRhcmllcyBzdGlsbCBzYXRpc2Z5IHRo
aXMgcmVxdWlyZW1lbnQKLSAgICAgICAgLy8gKGV2ZW4gZm9yIGRlbm9ybWFscyB3aGVyZSB0aGUg
ZGVsdGEgY2FuIGJlIG11Y2ggbW9yZSBpbXBvcnRhbnQpLgotICAgICAgICAKLSAgICAgICAgY29u
c3QgZG91YmxlIGsxTG9nMTAgPSAwLjMwMTAyOTk5NTY2Mzk4MTE0OyAgLy8gMS9sZygxMCkKLSAg
ICAgICAgCi0gICAgICAgIC8vIEZvciBkb3VibGVzIGxlbihmKSA9PSA1MyAoZG9uJ3QgZm9yZ2V0
IHRoZSBoaWRkZW4gYml0KS4KLSAgICAgICAgY29uc3QgaW50IGtTaWduaWZpY2FuZFNpemUgPSA1
MzsKLSAgICAgICAgZG91YmxlIGVzdGltYXRlID0gY2VpbCgoZXhwb25lbnQgKyBrU2lnbmlmaWNh
bmRTaXplIC0gMSkgKiBrMUxvZzEwIC0gMWUtMTApOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50Pihlc3RpbWF0ZSk7Ci0gICAgfQotICAgIAotICAgIAotICAgIC8vIFNlZSBjb21tZW50
cyBmb3IgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzLgotICAgIHN0YXRpYyB2b2lkIEluaXRpYWxT
Y2FsZWRTdGFydFZhbHVlc1Bvc2l0aXZlRXhwb25lbnQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdiwgaW50IGVzdGltYXRl
ZF9wb3dlciwgYm9vbCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBC
aWdudW0qIGRlbm9taW5hdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9w
bHVzKSB7Ci0gICAgICAgIC8vIEEgcG9zaXRpdmUgZXhwb25lbnQgaW1wbGllcyBhIHBvc2l0aXZl
IHBvd2VyLgotICAgICAgICBBU1NFUlQoZXN0aW1hdGVkX3Bvd2VyID49IDApOwotICAgICAgICAv
LyBTaW5jZSB0aGUgZXN0aW1hdGVkX3Bvd2VyIGlzIHBvc2l0aXZlIHdlIHNpbXBseSBtdWx0aXBs
eSB0aGUgZGVub21pbmF0b3IKLSAgICAgICAgLy8gYnkgMTBeZXN0aW1hdGVkX3Bvd2VyLgotICAg
ICAgICAKLSAgICAgICAgLy8gbnVtZXJhdG9yID0gdi4KLSAgICAgICAgbnVtZXJhdG9yLT5Bc3Np
Z25VSW50NjQoRG91YmxlKHYpLlNpZ25pZmljYW5kKCkpOwotICAgICAgICBudW1lcmF0b3ItPlNo
aWZ0TGVmdChEb3VibGUodikuRXhwb25lbnQoKSk7Ci0gICAgICAgIC8vIGRlbm9taW5hdG9yID0g
MTBeZXN0aW1hdGVkX3Bvd2VyLgotICAgICAgICBkZW5vbWluYXRvci0+QXNzaWduUG93ZXJVSW50
MTYoMTAsIGVzdGltYXRlZF9wb3dlcik7Ci0gICAgICAgIAotICAgICAgICBpZiAobmVlZF9ib3Vu
ZGFyeV9kZWx0YXMpIHsKLSAgICAgICAgICAgIC8vIEludHJvZHVjZSBhIGNvbW1vbiBkZW5vbWlu
YXRvciBzbyB0aGF0IHRoZSBkZWx0YXMgdG8gdGhlIGJvdW5kYXJpZXMgYXJlCi0gICAgICAgICAg
ICAvLyBpbnRlZ2Vycy4KLSAgICAgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoMSk7Ci0g
ICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsKLSAgICAgICAgICAgIC8vIExldCB2
ID0gZiAqIDJeZSwgdGhlbiBtKyAtIHYgPSAxLzIgKiAyXmU7IFdpdGggdGhlIGNvbW1vbgotICAg
ICAgICAgICAgLy8gZGVub21pbmF0b3IgKG9mIDIpIGRlbHRhX3BsdXMgZXF1YWxzIDJeZS4KLSAg
ICAgICAgICAgIGRlbHRhX3BsdXMtPkFzc2lnblVJbnQxNigxKTsKLSAgICAgICAgICAgIGRlbHRh
X3BsdXMtPlNoaWZ0TGVmdChEb3VibGUodikuRXhwb25lbnQoKSk7Ci0gICAgICAgICAgICAvLyBT
YW1lIGZvciBkZWx0YV9taW51cyAod2l0aCBhZGp1c3RtZW50cyBiZWxvdyBpZiBmID09IDJecC0x
KS4KLSAgICAgICAgICAgIGRlbHRhX21pbnVzLT5Bc3NpZ25VSW50MTYoMSk7Ci0gICAgICAgICAg
ICBkZWx0YV9taW51cy0+U2hpZnRMZWZ0KERvdWJsZSh2KS5FeHBvbmVudCgpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gSWYgdGhlIHNpZ25pZmljYW5kICh3aXRob3V0IHRoZSBoaWRk
ZW4gYml0KSBpcyAwLCB0aGVuIHRoZSBsb3dlcgotICAgICAgICAgICAgLy8gYm91bmRhcnkgaXMg
Y2xvc2VyIHRoYW4ganVzdCBoYWxmIGEgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKS4KLSAg
ICAgICAgICAgIC8vIFRoZXJlIGlzIG9ubHkgb25lIGV4Y2VwdGlvbjogaWYgdGhlIG5leHQgbG93
ZXIgbnVtYmVyIGlzIGEgZGVub3JtYWwgdGhlbgotICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNl
IGlzIDEgdWxwLiBUaGlzIGNhbm5vdCBiZSB0aGUgY2FzZSBmb3IgZXhwb25lbnQgPj0gMCAoYnV0
IHdlCi0gICAgICAgICAgICAvLyBoYXZlIHRvIHRlc3QgaXQgaW4gdGhlIG90aGVyIGZ1bmN0aW9u
IHdoZXJlIGV4cG9uZW50IDwgMCkuCi0gICAgICAgICAgICB1aW50NjRfdCB2X2JpdHMgPSBEb3Vi
bGUodikuQXNVaW50NjQoKTsKLSAgICAgICAgICAgIGlmICgodl9iaXRzICYgRG91YmxlOjprU2ln
bmlmaWNhbmRNYXNrKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGxvd2VyIGJvdW5k
YXJ5IGlzIGNsb3NlciBhdCBoYWxmIHRoZSBkaXN0YW5jZSBvZiAibm9ybWFsIiBudW1iZXJzLgot
ICAgICAgICAgICAgICAgIC8vIEluY3JlYXNlIHRoZSBjb21tb24gZGVub21pbmF0b3IgYW5kIGFk
YXB0IGFsbCBidXQgdGhlIGRlbHRhX21pbnVzLgotICAgICAgICAgICAgICAgIGRlbm9taW5hdG9y
LT5TaGlmdExlZnQoMSk7ICAvLyAqMgotICAgICAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRM
ZWZ0KDEpOyAgICAvLyAqMgotICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlNoaWZ0TGVmdCgx
KTsgICAvLyAqMgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIAot
ICAgIC8vIFNlZSBjb21tZW50cyBmb3IgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzCi0gICAgc3Rh
dGljIHZvaWQgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzTmVnYXRpdmVFeHBvbmVudFBvc2l0aXZl
UG93ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHYsIGludCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wg
bmVlZF9ib3VuZGFyeV9kZWx0YXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJp
Z251bSogZGVub21pbmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmln
bnVtKiBkZWx0YV9wbHVzKSB7Ci0gICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gRG91Ymxl
KHYpLlNpZ25pZmljYW5kKCk7Ci0gICAgICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2KS5FeHBv
bmVudCgpOwotICAgICAgICAvLyB2ID0gZiAqIDJeZSB3aXRoIGUgPCAwLCBhbmQgd2l0aCBlc3Rp
bWF0ZWRfcG93ZXIgPj0gMC4KLSAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGUgaXMgY2xvc2Ug
dG8gMCAoaGF2ZSBhIGxvb2sgYXQgaG93IGVzdGltYXRlZF9wb3dlciBpcwotICAgICAgICAvLyBj
b21wdXRlZCkuCi0gICAgICAgIAotICAgICAgICAvLyBudW1lcmF0b3IgPSBzaWduaWZpY2FuZAot
ICAgICAgICAvLyAgc2luY2UgdiA9IHNpZ25pZmljYW5kICogMl5leHBvbmVudCB0aGlzIGlzIGVx
dWl2YWxlbnQgdG8KLSAgICAgICAgLy8gIG51bWVyYXRvciA9IHYgKiAvIDJeLWV4cG9uZW50Ci0g
ICAgICAgIG51bWVyYXRvci0+QXNzaWduVUludDY0KHNpZ25pZmljYW5kKTsKLSAgICAgICAgLy8g
ZGVub21pbmF0b3IgPSAxMF5lc3RpbWF0ZWRfcG93ZXIgKiAyXi1leHBvbmVudCAod2l0aCBleHBv
bmVudCA8IDApCi0gICAgICAgIGRlbm9taW5hdG9yLT5Bc3NpZ25Qb3dlclVJbnQxNigxMCwgZXN0
aW1hdGVkX3Bvd2VyKTsKLSAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgtZXhwb25lbnQp
OwotICAgICAgICAKLSAgICAgICAgaWYgKG5lZWRfYm91bmRhcnlfZGVsdGFzKSB7Ci0gICAgICAg
ICAgICAvLyBJbnRyb2R1Y2UgYSBjb21tb24gZGVub21pbmF0b3Igc28gdGhhdCB0aGUgZGVsdGFz
IHRvIHRoZSBib3VuZGFyaWVzIGFyZQotICAgICAgICAgICAgLy8gaW50ZWdlcnMuCi0gICAgICAg
ICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KDEpOwotICAgICAgICAgICAgbnVtZXJhdG9yLT5T
aGlmdExlZnQoMSk7Ci0gICAgICAgICAgICAvLyBMZXQgdiA9IGYgKiAyXmUsIHRoZW4gbSsgLSB2
ID0gMS8yICogMl5lOyBXaXRoIHRoZSBjb21tb24KLSAgICAgICAgICAgIC8vIGRlbm9taW5hdG9y
IChvZiAyKSBkZWx0YV9wbHVzIGVxdWFscyAyXmUuCi0gICAgICAgICAgICAvLyBHaXZlbiB0aGF0
IHRoZSBkZW5vbWluYXRvciBhbHJlYWR5IGluY2x1ZGVzIHYncyBleHBvbmVudCB0aGUgZGlzdGFu
Y2UKLSAgICAgICAgICAgIC8vIHRvIHRoZSBib3VuZGFyaWVzIGlzIHNpbXBseSAxLgotICAgICAg
ICAgICAgZGVsdGFfcGx1cy0+QXNzaWduVUludDE2KDEpOwotICAgICAgICAgICAgLy8gU2FtZSBm
b3IgZGVsdGFfbWludXMgKHdpdGggYWRqdXN0bWVudHMgYmVsb3cgaWYgZiA9PSAyXnAtMSkuCi0g
ICAgICAgICAgICBkZWx0YV9taW51cy0+QXNzaWduVUludDE2KDEpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBJZiB0aGUgc2lnbmlmaWNhbmQgKHdpdGhvdXQgdGhlIGhpZGRlbiBiaXQp
IGlzIDAsIHRoZW4gdGhlIGxvd2VyCi0gICAgICAgICAgICAvLyBib3VuZGFyeSBpcyBjbG9zZXIg
dGhhbiBqdXN0IG9uZSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLgotICAgICAgICAgICAg
Ly8gVGhlcmUgaXMgb25seSBvbmUgZXhjZXB0aW9uOiBpZiB0aGUgbmV4dCBsb3dlciBudW1iZXIg
aXMgYSBkZW5vcm1hbAotICAgICAgICAgICAgLy8gdGhlbiB0aGUgZGlzdGFuY2UgaXMgMSB1bHAu
IFNpbmNlIHRoZSBleHBvbmVudCBpcyBjbG9zZSB0byB6ZXJvCi0gICAgICAgICAgICAvLyAob3Ro
ZXJ3aXNlIGVzdGltYXRlZF9wb3dlciB3b3VsZCBoYXZlIGJlZW4gbmVnYXRpdmUpIHRoaXMgY2Fu
bm90IGhhcHBlbgotICAgICAgICAgICAgLy8gaGVyZSBlaXRoZXIuCi0gICAgICAgICAgICB1aW50
NjRfdCB2X2JpdHMgPSBEb3VibGUodikuQXNVaW50NjQoKTsKLSAgICAgICAgICAgIGlmICgodl9i
aXRzICYgRG91YmxlOjprU2lnbmlmaWNhbmRNYXNrKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhlIGxvd2VyIGJvdW5kYXJ5IGlzIGNsb3NlciBhdCBoYWxmIHRoZSBkaXN0YW5jZSBvZiAi
bm9ybWFsIiBudW1iZXJzLgotICAgICAgICAgICAgICAgIC8vIEluY3JlYXNlIHRoZSBkZW5vbWlu
YXRvciBhbmQgYWRhcHQgYWxsIGJ1dCB0aGUgZGVsdGFfbWludXMuCi0gICAgICAgICAgICAgICAg
ZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsgIC8vICoyCi0gICAgICAgICAgICAgICAgbnVtZXJh
dG9yLT5TaGlmdExlZnQoMSk7ICAgIC8vICoyCi0gICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+
U2hpZnRMZWZ0KDEpOyAgIC8vICoyCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgCi0gICAgLy8gU2VlIGNvbW1lbnRzIGZvciBJbml0aWFsU2NhbGVkU3RhcnRWYWx1
ZXMKLSAgICBzdGF0aWMgdm9pZCBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNOZWdhdGl2ZUV4cG9u
ZW50TmVnYXRpdmVQb3dlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdiwgaW50IGVzdGltYXRlZF9w
b3dlciwgYm9vbCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51
bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRh
X21pbnVzLCBCaWdudW0qIGRlbHRhX3BsdXMpIHsKLSAgICAgICAgY29uc3QgdWludDY0X3Qga01p
bmltYWxOb3JtYWxpemVkRXhwb25lbnQgPQotICAgICAgICBVSU5UNjRfMlBBUlRfQygweDAwMTAw
MDAwLCAwMDAwMDAwMCk7Ci0gICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gRG91YmxlKHYp
LlNpZ25pZmljYW5kKCk7Ci0gICAgICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2KS5FeHBvbmVu
dCgpOwotICAgICAgICAvLyBJbnN0ZWFkIG9mIG11bHRpcGx5aW5nIHRoZSBkZW5vbWluYXRvciB3
aXRoIDEwXmVzdGltYXRlZF9wb3dlciB3ZQotICAgICAgICAvLyBtdWx0aXBseSBhbGwgdmFsdWVz
IChudW1lcmF0b3IgYW5kIGRlbHRhcykgYnkgMTBeLWVzdGltYXRlZF9wb3dlci4KLSAgICAgICAg
Ci0gICAgICAgIC8vIFVzZSBudW1lcmF0b3IgYXMgdGVtcG9yYXJ5IGNvbnRhaW5lciBmb3IgcG93
ZXJfdGVuLgotICAgICAgICBCaWdudW0qIHBvd2VyX3RlbiA9IG51bWVyYXRvcjsKLSAgICAgICAg
cG93ZXJfdGVuLT5Bc3NpZ25Qb3dlclVJbnQxNigxMCwgLWVzdGltYXRlZF9wb3dlcik7Ci0gICAg
ICAgIAotICAgICAgICBpZiAobmVlZF9ib3VuZGFyeV9kZWx0YXMpIHsKLSAgICAgICAgICAgIC8v
IFNpbmNlIHBvd2VyX3RlbiA9PSBudW1lcmF0b3Igd2UgbXVzdCBtYWtlIGEgY29weSBvZiAxMF5l
c3RpbWF0ZWRfcG93ZXIKLSAgICAgICAgICAgIC8vIGJlZm9yZSB3ZSBjb21wbGV0ZSB0aGUgY29t
cHV0YXRpb24gb2YgdGhlIG51bWVyYXRvci4KLSAgICAgICAgICAgIC8vIGRlbHRhX3BsdXMgPSBk
ZWx0YV9taW51cyA9IDEwXmVzdGltYXRlZF9wb3dlcgotICAgICAgICAgICAgZGVsdGFfcGx1cy0+
QXNzaWduQmlnbnVtKCpwb3dlcl90ZW4pOwotICAgICAgICAgICAgZGVsdGFfbWludXMtPkFzc2ln
bkJpZ251bSgqcG93ZXJfdGVuKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gbnVt
ZXJhdG9yID0gc2lnbmlmaWNhbmQgKiAyICogMTBeLWVzdGltYXRlZF9wb3dlcgotICAgICAgICAv
LyAgc2luY2UgdiA9IHNpZ25pZmljYW5kICogMl5leHBvbmVudCB0aGlzIGlzIGVxdWl2YWxlbnQg
dG8KLSAgICAgICAgLy8gbnVtZXJhdG9yID0gdiAqIDEwXi1lc3RpbWF0ZWRfcG93ZXIgKiAyICog
Ml4tZXhwb25lbnQuCi0gICAgICAgIC8vIFJlbWVtYmVyOiBudW1lcmF0b3IgaGFzIGJlZW4gYWJ1
c2VkIGFzIHBvd2VyX3Rlbi4gU28gbm8gbmVlZCB0byBhc3NpZ24gaXQKLSAgICAgICAgLy8gIHRv
IGl0c2VsZi4KLSAgICAgICAgQVNTRVJUKG51bWVyYXRvciA9PSBwb3dlcl90ZW4pOwotICAgICAg
ICBudW1lcmF0b3ItPk11bHRpcGx5QnlVSW50NjQoc2lnbmlmaWNhbmQpOwotICAgICAgICAKLSAg
ICAgICAgLy8gZGVub21pbmF0b3IgPSAyICogMl4tZXhwb25lbnQgd2l0aCBleHBvbmVudCA8IDAu
Ci0gICAgICAgIGRlbm9taW5hdG9yLT5Bc3NpZ25VSW50MTYoMSk7Ci0gICAgICAgIGRlbm9taW5h
dG9yLT5TaGlmdExlZnQoLWV4cG9uZW50KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChuZWVkX2Jv
dW5kYXJ5X2RlbHRhcykgewotICAgICAgICAgICAgLy8gSW50cm9kdWNlIGEgY29tbW9uIGRlbm9t
aW5hdG9yIHNvIHRoYXQgdGhlIGRlbHRhcyB0byB0aGUgYm91bmRhcmllcyBhcmUKLSAgICAgICAg
ICAgIC8vIGludGVnZXJzLgotICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7Ci0g
ICAgICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KDEpOwotICAgICAgICAgICAgLy8gV2l0
aCB0aGlzIHNoaWZ0IHRoZSBib3VuZGFyaWVzIGhhdmUgdGhlaXIgY29ycmVjdCB2YWx1ZSwgc2lu
Y2UKLSAgICAgICAgICAgIC8vIGRlbHRhX3BsdXMgPSAxMF4tZXN0aW1hdGVkX3Bvd2VyLCBhbmQK
LSAgICAgICAgICAgIC8vIGRlbHRhX21pbnVzID0gMTBeLWVzdGltYXRlZF9wb3dlci4KLSAgICAg
ICAgICAgIC8vIFRoZXNlIGFzc2lnbm1lbnRzIGhhdmUgYmVlbiBkb25lIGVhcmxpZXIuCi0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIFRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIGxvd2Vy
IGJvdW5kYXJ5IGlzIHR3aWNlIGFzIGNsb3NlLgotICAgICAgICAgICAgLy8gVGhpcyB0aW1lIHdl
IGhhdmUgdG8gbG9vayBvdXQgZm9yIHRoZSBleGNlcHRpb24gdG9vLgotICAgICAgICAgICAgdWlu
dDY0X3Qgdl9iaXRzID0gRG91YmxlKHYpLkFzVWludDY0KCk7Ci0gICAgICAgICAgICBpZiAoKHZf
Yml0cyAmIERvdWJsZTo6a1NpZ25pZmljYW5kTWFzaykgPT0gMCAmJgotICAgICAgICAgICAgICAg
IC8vIFRoZSBvbmx5IGV4Y2VwdGlvbiB3aGVyZSBhIHNpZ25pZmljYW5kID09IDAgaGFzIGl0cyBi
b3VuZGFyaWVzIGF0Ci0gICAgICAgICAgICAgICAgLy8gIm5vcm1hbCIgZGlzdGFuY2VzOgotICAg
ICAgICAgICAgICAgICh2X2JpdHMgJiBEb3VibGU6OmtFeHBvbmVudE1hc2spICE9IGtNaW5pbWFs
Tm9ybWFsaXplZEV4cG9uZW50KSB7Ci0gICAgICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExl
ZnQoMSk7ICAgIC8vICoyCi0gICAgICAgICAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgx
KTsgIC8vICoyCi0gICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+U2hpZnRMZWZ0KDEpOyAgIC8v
ICoyCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgCi0gICAgLy8g
TGV0IHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQuCi0gICAgLy8gQ29tcHV0ZXMgdiAvIDEw
XmVzdGltYXRlZF9wb3dlciBleGFjdGx5LCBhcyBhIHJhdGlvIG9mIHR3byBiaWdudW1zLCBudW1l
cmF0b3IKLSAgICAvLyBhbmQgZGVub21pbmF0b3IuIFRoZSBmdW5jdGlvbnMgR2VuZXJhdGVTaG9y
dGVzdERpZ2l0cyBhbmQKLSAgICAvLyBHZW5lcmF0ZUNvdW50ZWREaWdpdHMgd2lsbCB0aGVuIGNv
bnZlcnQgdGhpcyByYXRpbyB0byBpdHMgZGVjaW1hbAotICAgIC8vIHJlcHJlc2VudGF0aW9uIGQs
IHdpdGggdGhlIHJlcXVpcmVkIGFjY3VyYWN5LgotICAgIC8vIFRoZW4gZCAqIDEwXmVzdGltYXRl
ZF9wb3dlciBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2Ygdi4KLSAgICAvLyAoTm90ZTogdGhlIGZy
YWN0aW9uIGFuZCB0aGUgZXN0aW1hdGVkX3Bvd2VyIG1pZ2h0IGdldCBhZGp1c3RlZCBiZWZvcmUK
LSAgICAvLyBnZW5lcmF0aW5nIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLikKLSAgICAvLwot
ICAgIC8vIFRoZSBpbml0aWFsIHN0YXJ0IHZhbHVlcyBjb25zaXN0IG9mOgotICAgIC8vICAtIGEg
c2NhbGVkIG51bWVyYXRvcjogcy50LiBudW1lcmF0b3IvZGVub21pbmF0b3IgPT0gdiAvIDEwXmVz
dGltYXRlZF9wb3dlci4KLSAgICAvLyAgLSBhIHNjYWxlZCAoY29tbW9uKSBkZW5vbWluYXRvci4K
LSAgICAvLyAgb3B0aW9uYWxseSAodXNlZCBieSBHZW5lcmF0ZVNob3J0ZXN0RGlnaXRzIHRvIGRl
Y2lkZSBpZiBpdCBoYXMgdGhlIHNob3J0ZXN0Ci0gICAgLy8gIGRlY2ltYWwgY29udmVydGluZyBi
YWNrIHRvIHYpOgotICAgIC8vICAtIHYgLSBtLTogdGhlIGRpc3RhbmNlIHRvIHRoZSBsb3dlciBi
b3VuZGFyeS4KLSAgICAvLyAgLSBtKyAtIHY6IHRoZSBkaXN0YW5jZSB0byB0aGUgdXBwZXIgYm91
bmRhcnkuCi0gICAgLy8KLSAgICAvLyB2LCBtKywgbS0sIGFuZCB0aGVyZWZvcmUgdiAtIG0tIGFu
ZCBtKyAtIHYgYWxsIHNoYXJlIHRoZSBzYW1lIGRlbm9taW5hdG9yLgotICAgIC8vCi0gICAgLy8g
TGV0IGVwID09IGVzdGltYXRlZF9wb3dlciwgdGhlbiB0aGUgcmV0dXJuZWQgdmFsdWVzIHdpbGwg
c2F0aXNmeToKLSAgICAvLyAgdiAvIDEwXmVwID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3IuCi0g
ICAgLy8gIHYncyBib3VuZGFyeXMgbS0gYW5kIG0rOgotICAgIC8vICAgIG0tIC8gMTBeZXAgPT0g
diAvIDEwXmVwIC0gZGVsdGFfbWludXMgLyBkZW5vbWluYXRvcgotICAgIC8vICAgIG0rIC8gMTBe
ZXAgPT0gdiAvIDEwXmVwICsgZGVsdGFfcGx1cyAvIGRlbm9taW5hdG9yCi0gICAgLy8gIE9yIGlu
IG90aGVyIHdvcmRzOgotICAgIC8vICAgIG0tID09IHYgLSBkZWx0YV9taW51cyAqIDEwXmVwIC8g
ZGVub21pbmF0b3I7Ci0gICAgLy8gICAgbSsgPT0gdiArIGRlbHRhX3BsdXMgKiAxMF5lcCAvIGRl
bm9taW5hdG9yOwotICAgIC8vCi0gICAgLy8gU2luY2UgMTBeKGstMSkgPD0gdiA8IDEwXmsgICAg
KHdpdGggayA9PSBlc3RpbWF0ZWRfcG93ZXIpCi0gICAgLy8gIG9yICAgICAgIDEwXmsgPD0gdiA8
IDEwXihrKzEpCi0gICAgLy8gIHdlIHRoZW4gaGF2ZSAwLjEgPD0gbnVtZXJhdG9yL2Rlbm9taW5h
dG9yIDwgMQotICAgIC8vICAgICAgICAgICBvciAgICAxIDw9IG51bWVyYXRvci9kZW5vbWluYXRv
ciA8IDEwCi0gICAgLy8KLSAgICAvLyBJdCBpcyB0aGVuIGVhc3kgdG8ga2lja3N0YXJ0IHRoZSBk
aWdpdC1nZW5lcmF0aW9uIHJvdXRpbmUuCi0gICAgLy8KLSAgICAvLyBUaGUgYm91bmRhcnktZGVs
dGFzIGFyZSBvbmx5IGZpbGxlZCBpZiBuZWVkX2JvdW5kYXJ5X2RlbHRhcyBpcyBzZXQuCi0gICAg
c3RhdGljIHZvaWQgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzKGRvdWJsZSB2LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXN0aW1hdGVkX3Bvd2VyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5lZWRfYm91bmRhcnlf
ZGVsdGFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0q
IG51bWVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmln
bnVtKiBkZW5vbWluYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQmlnbnVtKiBkZWx0YV9taW51cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQmlnbnVtKiBkZWx0YV9wbHVzKSB7Ci0gICAgICAgIGlmIChEb3VibGUodikuRXhw
b25lbnQoKSA+PSAwKSB7Ci0gICAgICAgICAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNQb3Np
dGl2ZUV4cG9uZW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2LCBlc3RpbWF0ZWRfcG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmF0
b3IsIGRlbm9taW5hdG9yLCBkZWx0YV9taW51cywgZGVsdGFfcGx1cyk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoZXN0aW1hdGVkX3Bvd2VyID49IDApIHsKLSAgICAgICAgICAgIEluaXRpYWxTY2FsZWRT
dGFydFZhbHVlc05lZ2F0aXZlRXhwb25lbnRQb3NpdGl2ZVBvd2VyKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiwgZXN0
aW1hdGVkX3Bvd2VyLCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciwg
ZGVub21pbmF0b3IsIGRlbHRhX21pbnVzLCBkZWx0YV9wbHVzKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0aXZlRXhwb25lbnROZWdh
dGl2ZVBvd2VyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdiwgZXN0aW1hdGVkX3Bvd2VyLCBuZWVkX2JvdW5kYXJ5X2Rl
bHRhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bWVyYXRvciwgZGVub21pbmF0b3IsIGRlbHRhX21pbnVzLCBkZWx0
YV9wbHVzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAKLSAgICAvLyBUaGlzIHJvdXRp
bmUgbXVsdGlwbGllcyBudW1lcmF0b3IvZGVub21pbmF0b3Igc28gdGhhdCBpdHMgdmFsdWVzIGxp
ZXMgaW4gdGhlCi0gICAgLy8gcmFuZ2UgMS0xMC4gVGhhdCBpcyBhZnRlciBhIGNhbGwgdG8gdGhp
cyBmdW5jdGlvbiB3ZSBoYXZlOgotICAgIC8vICAgIDEgPD0gKG51bWVyYXRvciArIGRlbHRhX3Bs
dXMpIC9kZW5vbWluYXRvciA8IDEwLgotICAgIC8vIExldCBudW1lcmF0b3IgdGhlIGlucHV0IGJl
Zm9yZSBtb2RpZmljYXRpb24gYW5kIG51bWVyYXRvcicgdGhlIGFyZ3VtZW50Ci0gICAgLy8gYWZ0
ZXIgbW9kaWZpY2F0aW9uLCB0aGVuIHRoZSBvdXRwdXQtcGFyYW1ldGVyIGRlY2ltYWxfcG9pbnQg
aXMgc3VjaCB0aGF0Ci0gICAgLy8gIG51bWVyYXRvciAvIGRlbm9taW5hdG9yICogMTBeZXN0aW1h
dGVkX3Bvd2VyID09Ci0gICAgLy8gICAgbnVtZXJhdG9yJyAvIGRlbm9taW5hdG9yJyAqIDEwXihk
ZWNpbWFsX3BvaW50IC0gMSkKLSAgICAvLyBJbiBzb21lIGNhc2VzIGVzdGltYXRlZF9wb3dlciB3
YXMgdG9vIGxvdywgYW5kIHRoaXMgaXMgYWxyZWFkeSB0aGUgY2FzZS4gV2UKLSAgICAvLyB0aGVu
IHNpbXBseSBhZGp1c3QgdGhlIHBvd2VyIHNvIHRoYXQgMTBeKGstMSkgPD0gdiA8IDEwXmsgKHdp
dGggayA9PQotICAgIC8vIGVzdGltYXRlZF9wb3dlcikgYnV0IGRvIG5vdCB0b3VjaCB0aGUgbnVt
ZXJhdG9yIG9yIGRlbm9taW5hdG9yLgotICAgIC8vIE90aGVyd2lzZSB0aGUgcm91dGluZSBtdWx0
aXBsaWVzIHRoZSBudW1lcmF0b3IgYW5kIHRoZSBkZWx0YXMgYnkgMTAuCi0gICAgc3RhdGljIHZv
aWQgRml4dXBNdWx0aXBseTEwKGludCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wgaXNfZXZlbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5v
bWluYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9t
aW51cywgQmlnbnVtKiBkZWx0YV9wbHVzKSB7Ci0gICAgICAgIGJvb2wgaW5fcmFuZ2U7Ci0gICAg
ICAgIGlmIChpc19ldmVuKSB7Ci0gICAgICAgICAgICAvLyBGb3IgSUVFRSBkb3VibGVzIGhhbGYt
d2F5IGNhc2VzIChpbiBkZWNpbWFsIHN5c3RlbSBudW1iZXJzIGVuZGluZyB3aXRoIDUpCi0gICAg
ICAgICAgICAvLyBhcmUgcm91bmRlZCB0byB0aGUgY2xvc2VzdCBmbG9hdGluZy1wb2ludCBudW1i
ZXIgd2l0aCBldmVuIHNpZ25pZmljYW5kLgotICAgICAgICAgICAgaW5fcmFuZ2UgPSBCaWdudW06
OlBsdXNDb21wYXJlKCpudW1lcmF0b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0b3IpID49IDA7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbl9yYW5nZSA9IEJpZ251bTo6UGx1c0Nv
bXBhcmUoKm51bWVyYXRvciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRvcikgPiAwOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChpbl9yYW5nZSkgewotICAgICAgICAgICAgLy8gU2luY2UgbnVtZXJh
dG9yICsgZGVsdGFfcGx1cyA+PSBkZW5vbWluYXRvciB3ZSBhbHJlYWR5IGhhdmUKLSAgICAgICAg
ICAgIC8vIDEgPD0gbnVtZXJhdG9yL2Rlbm9taW5hdG9yIDwgMTAuIFNpbXBseSB1cGRhdGUgdGhl
IGVzdGltYXRlZF9wb3dlci4KLSAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gZXN0aW1hdGVk
X3Bvd2VyICsgMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICpkZWNpbWFsX3BvaW50
ID0gZXN0aW1hdGVkX3Bvd2VyOwotICAgICAgICAgICAgbnVtZXJhdG9yLT5UaW1lczEwKCk7Ci0g
ICAgICAgICAgICBpZiAoQmlnbnVtOjpFcXVhbCgqZGVsdGFfbWludXMsICpkZWx0YV9wbHVzKSkg
ewotICAgICAgICAgICAgICAgIGRlbHRhX21pbnVzLT5UaW1lczEwKCk7Ci0gICAgICAgICAgICAg
ICAgZGVsdGFfcGx1cy0+QXNzaWduQmlnbnVtKCpkZWx0YV9taW51cyk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGRlbHRhX21pbnVzLT5UaW1lczEwKCk7Ci0gICAgICAg
ICAgICAgICAgZGVsdGFfcGx1cy0+VGltZXMxMCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIAotfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCi0KLX0gLy8g
bmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL2R0b2EvYmlnbnVtLWR0b2EuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9kdG9hL2JpZ251bS1kdG9hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1Yjdl
ZmViYjE2MWY2NTcwNTkyZGUwZDI0MDJlMTIyODg4OTU2NTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL2R0b2EvYmlnbnVtLWR0b2EuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8v
IENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gICAgICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vICAgICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZAotLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gICAgICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0vLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9CSUdO
VU1fRFRPQV9IXwotI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fRFRPQV9IXwotCi0j
aW5jbHVkZSAidXRpbHMuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBkb3VibGVf
Y29udmVyc2lvbiB7Ci0gICAgCi0gICAgZW51bSBCaWdudW1EdG9hTW9kZSB7Ci0gICAgICAgIC8v
IFJldHVybiB0aGUgc2hvcnRlc3QgY29ycmVjdCByZXByZXNlbnRhdGlvbi4KLSAgICAgICAgLy8g
Rm9yIGV4YW1wbGUgdGhlIG91dHB1dCBvZiAwLjI5OTk5OTk5OTk5OTk5OTk4ODg5NyBpcyAodGhl
IGxlc3MgYWNjdXJhdGUgYnV0Ci0gICAgICAgIC8vIGNvcnJlY3QpIDAuMy4KLSAgICAgICAgQklH
TlVNX0RUT0FfU0hPUlRFU1QsCi0gICAgICAgIC8vIFJldHVybiBhIGZpeGVkIG51bWJlciBvZiBk
aWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCi0gICAgICAgIC8vIEZvciBpbnN0YW5jZSBm
aXhlZCgwLjEsIDQpIGJlY29tZXMgMC4xMDAwCi0gICAgICAgIC8vIElmIHRoZSBpbnB1dCBudW1i
ZXIgaXMgYmlnLCB0aGUgb3V0cHV0IHdpbGwgYmUgYmlnLgotICAgICAgICBCSUdOVU1fRFRPQV9G
SVhFRCwKLSAgICAgICAgLy8gUmV0dXJuIGEgZml4ZWQgbnVtYmVyIG9mIGRpZ2l0cywgbm8gbWF0
dGVyIHdoYXQgdGhlIGV4cG9uZW50IGlzLgotICAgICAgICBCSUdOVU1fRFRPQV9QUkVDSVNJT04K
LSAgICB9OwotICAgIAotICAgIC8vIENvbnZlcnRzIHRoZSBnaXZlbiBkb3VibGUgJ3YnIHRvIGFz
Y2lpLgotICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJ1ZmZlciAq
IDEwXihwb2ludC1sZW5ndGgpLgotICAgIC8vIFRoZSBidWZmZXIgd2lsbCBiZSBudWxsLXRlcm1p
bmF0ZWQuCi0gICAgLy8KLSAgICAvLyBUaGUgaW5wdXQgdiBtdXN0IGJlID4gMCBhbmQgZGlmZmVy
ZW50IGZyb20gTmFOLCBhbmQgSW5maW5pdHkuCi0gICAgLy8KLSAgICAvLyBUaGUgb3V0cHV0IGRl
cGVuZHMgb24gdGhlIGdpdmVuIG1vZGU6Ci0gICAgLy8gIC0gU0hPUlRFU1Q6IHByb2R1Y2UgdGhl
IGxlYXN0IGFtb3VudCBvZiBkaWdpdHMgZm9yIHdoaWNoIHRoZSBpbnRlcm5hbAotICAgIC8vICAg
aWRlbnRpdHkgcmVxdWlyZW1lbnQgaXMgc3RpbGwgc2F0aXNmaWVkLiBJZiB0aGUgZGlnaXRzIGFy
ZSBwcmludGVkCi0gICAgLy8gICAodG9nZXRoZXIgd2l0aCB0aGUgY29ycmVjdCBleHBvbmVudCkg
dGhlbiByZWFkaW5nIHRoaXMgbnVtYmVyIHdpbGwgZ2l2ZQotICAgIC8vICAgJ3YnIGFnYWluLiBU
aGUgYnVmZmVyIHdpbGwgY2hvb3NlIHRoZSByZXByZXNlbnRhdGlvbiB0aGF0IGlzIGNsb3Nlc3Qg
dG8KLSAgICAvLyAgICd2Jy4gSWYgdGhlcmUgYXJlIHR3byBhdCB0aGUgc2FtZSBkaXN0YW5jZSwg
dGhhbiB0aGUgbnVtYmVyIGlzIHJvdW5kIHVwLgotICAgIC8vICAgSW4gdGhpcyBtb2RlIHRoZSAn
cmVxdWVzdGVkX2RpZ2l0cycgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCi0gICAgLy8gIC0gRklYRUQ6
IHByb2R1Y2VzIGRpZ2l0cyBuZWNlc3NhcnkgdG8gcHJpbnQgYSBnaXZlbiBudW1iZXIgd2l0aAot
ICAgIC8vICAgJ3JlcXVlc3RlZF9kaWdpdHMnIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2lu
dC4gVGhlIHByb2R1Y2VkIGRpZ2l0cwotICAgIC8vICAgbWlnaHQgYmUgdG9vIHNob3J0IGluIHdo
aWNoIGNhc2UgdGhlIGNhbGxlciBoYXMgdG8gZmlsbCB0aGUgZ2FwcyB3aXRoICcwJ3MuCi0gICAg
Ly8gICBFeGFtcGxlOiB0b0ZpeGVkKDAuMDAxLCA1KSBpcyBhbGxvd2VkIHRvIHJldHVybiBidWZm
ZXI9IjEiLCBwb2ludD0tMi4KLSAgICAvLyAgIEhhbGZ3YXkgY2FzZXMgYXJlIHJvdW5kZWQgdXAu
IFRoZSBjYWxsIHRvRml4ZWQoMC4xNSwgMikgdGh1cyByZXR1cm5zCi0gICAgLy8gICAgIGJ1ZmZl
cj0iMiIsIHBvaW50PTAuCi0gICAgLy8gICBOb3RlOiB0aGUgbGVuZ3RoIG9mIHRoZSByZXR1cm5l
ZCBidWZmZXIgaGFzIG5vIG1lYW5pbmcgd3J0IHRoZSBzaWduaWZpY2FuY2UKLSAgICAvLyAgIG9m
IGl0cyBkaWdpdHMuIFRoYXQgaXMsIGp1c3QgYmVjYXVzZSBpdCBjb250YWlucyAnMCdzIGRvZXMg
bm90IG1lYW4gdGhhdAotICAgIC8vICAgYW55IG90aGVyIGRpZ2l0IHdvdWxkIG5vdCBzYXRpc2Z5
IHRoZSBpbnRlcm5hbCBpZGVudGl0eSByZXF1aXJlbWVudC4KLSAgICAvLyAgLSBQUkVDSVNJT046
IHByb2R1Y2VzICdyZXF1ZXN0ZWRfZGlnaXRzJyB3aGVyZSB0aGUgZmlyc3QgZGlnaXQgaXMgbm90
ICcwJy4KLSAgICAvLyAgIEV2ZW4gdGhvdWdoIHRoZSBsZW5ndGggb2YgcHJvZHVjZWQgZGlnaXRz
IHVzdWFsbHkgZXF1YWxzCi0gICAgLy8gICAncmVxdWVzdGVkX2RpZ2l0cycsIHRoZSBmdW5jdGlv
biBpcyBhbGxvd2VkIHRvIHJldHVybiBmZXdlciBkaWdpdHMsIGluCi0gICAgLy8gICB3aGljaCBj
YXNlIHRoZSBjYWxsZXIgaGFzIHRvIGZpbGwgdGhlIG1pc3NpbmcgZGlnaXRzIHdpdGggJzAncy4K
LSAgICAvLyAgIEhhbGZ3YXkgY2FzZXMgYXJlIGFnYWluIHJvdW5kZWQgdXAuCi0gICAgLy8gJ0Jp
Z251bUR0b2EnIGV4cGVjdHMgdGhlIGdpdmVuIGJ1ZmZlciB0byBiZSBiaWcgZW5vdWdoIHRvIGhv
bGQgYWxsIGRpZ2l0cwotICAgIC8vIGFuZCBhIHRlcm1pbmF0aW5nIG51bGwtY2hhcmFjdGVyLgot
ICAgIHZvaWQgQmlnbnVtRHRvYShkb3VibGUgdiwgQmlnbnVtRHRvYU1vZGUgbW9kZSwgaW50IHJl
cXVlc3RlZF9kaWdpdHMsCi0gICAgICAgICAgICAgICAgICAgIEJ1ZmZlclJlZmVyZW5jZTxjaGFy
PiBidWZmZXIsIGludCogbGVuZ3RoLCBpbnQqIHBvaW50KTsKLSAgICAKLX0gIC8vIG5hbWVzcGFj
ZSBkb3VibGVfY29udmVyc2lvbgotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmICAvLyBE
T1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fRFRPQV9IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2EvYmlnbnVtLmNjIGIvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL2R0b2EvYmlnbnVtLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4ZjZmNzNhOGVlMjk0ZjNiY2NhODQ2ZjQwNjE1ZjczOWZmOGYwMjM4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi9kdG9hL2JpZ251bS5jYworKysgL2Rldi9udWxsCkBAIC0xLDc3MCArMCww
IEBACi0vLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLS8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0vLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKLS8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0v
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2luY2x1ZGUgImJpZ251bS5oIgotI2luY2x1ZGUgInV0aWxzLmgiCi0jaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBkb3VibGVfY29udmVy
c2lvbiB7Ci0gICAgCi0gICAgQmlnbnVtOjpCaWdudW0oKQotICAgIDogYmlnaXRzXyhiaWdpdHNf
YnVmZmVyXywga0JpZ2l0Q2FwYWNpdHkpLCB1c2VkX2RpZ2l0c18oMCksIGV4cG9uZW50XygwKSB7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0JpZ2l0Q2FwYWNpdHk7ICsraSkgewotICAg
ICAgICAgICAgYmlnaXRzX1tpXSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KLSAgICBzdGF0aWMgaW50IEJpdFNpemUoUyB2YWx1ZSkg
ewotICAgICAgICByZXR1cm4gOCAqIHNpemVvZih2YWx1ZSk7Ci0gICAgfQotICAgIAotICAgIC8v
IEd1YXJhbnRlZWQgdG8gbGllIGluIG9uZSBCaWdpdC4KLSAgICB2b2lkIEJpZ251bTo6QXNzaWdu
VUludDE2KHVpbnQxNl90IHZhbHVlKSB7Ci0gICAgICAgIEFTU0VSVChrQmlnaXRTaXplID49IEJp
dFNpemUodmFsdWUpKTsKLSAgICAgICAgWmVybygpOwotICAgICAgICBpZiAodmFsdWUgPT0gMCkg
cmV0dXJuOwotICAgICAgICAKLSAgICAgICAgRW5zdXJlQ2FwYWNpdHkoMSk7Ci0gICAgICAgIGJp
Z2l0c19bMF0gPSB2YWx1ZTsKLSAgICAgICAgdXNlZF9kaWdpdHNfID0gMTsKLSAgICB9Ci0gICAg
Ci0gICAgCi0gICAgdm9pZCBCaWdudW06OkFzc2lnblVJbnQ2NCh1aW50NjRfdCB2YWx1ZSkgewot
ICAgICAgICBjb25zdCBpbnQga1VJbnQ2NFNpemUgPSA2NDsKLSAgICAgICAgCi0gICAgICAgIFpl
cm8oKTsKLSAgICAgICAgaWYgKHZhbHVlID09IDApIHJldHVybjsKLSAgICAgICAgCi0gICAgICAg
IGludCBuZWVkZWRfYmlnaXRzID0ga1VJbnQ2NFNpemUgLyBrQmlnaXRTaXplICsgMTsKLSAgICAg
ICAgRW5zdXJlQ2FwYWNpdHkobmVlZGVkX2JpZ2l0cyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbmVlZGVkX2JpZ2l0czsgKytpKSB7Ci0gICAgICAgICAgICBiaWdpdHNfW2ldID0gc3Rh
dGljX2Nhc3Q8Q2h1bms+KHZhbHVlICYga0JpZ2l0TWFzayk7Ci0gICAgICAgICAgICB2YWx1ZSA9
IHZhbHVlID4+IGtCaWdpdFNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgdXNlZF9kaWdpdHNfID0g
bmVlZGVkX2JpZ2l0czsKLSAgICAgICAgQ2xhbXAoKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAg
dm9pZCBCaWdudW06OkFzc2lnbkJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKSB7Ci0gICAgICAg
IGV4cG9uZW50XyA9IG90aGVyLmV4cG9uZW50XzsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBvdGhlci51c2VkX2RpZ2l0c187ICsraSkgewotICAgICAgICAgICAgYmlnaXRzX1tpXSA9IG90
aGVyLmJpZ2l0c19baV07Ci0gICAgICAgIH0KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGV4Y2VzcyBk
aWdpdHMgKGlmIHRoZXJlIHdlcmUgYW55KS4KLSAgICAgICAgZm9yIChpbnQgaSA9IG90aGVyLnVz
ZWRfZGlnaXRzXzsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7Ci0gICAgICAgICAgICBiaWdpdHNf
W2ldID0gMDsKLSAgICAgICAgfQotICAgICAgICB1c2VkX2RpZ2l0c18gPSBvdGhlci51c2VkX2Rp
Z2l0c187Ci0gICAgfQotICAgIAotICAgIAotICAgIHN0YXRpYyB1aW50NjRfdCBSZWFkVUludDY0
KEJ1ZmZlclJlZmVyZW5jZTxjb25zdCBjaGFyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGRpZ2l0c190b19yZWFkKSB7Ci0gICAgICAgIHVpbnQ2NF90IHJlc3VsdCA9IDA7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZGlnaXRzX3RvX3JlYWQ7ICsraSkgewotICAgICAgICAgICAg
aW50IGRpZ2l0ID0gYnVmZmVyW2Zyb20gKyBpXSAtICcwJzsKLSAgICAgICAgICAgIEFTU0VSVCgw
IDw9IGRpZ2l0ICYmIGRpZ2l0IDw9IDkpOwotICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICog
MTAgKyBkaWdpdDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAg
ICAKLSAgICAKLSAgICB2b2lkIEJpZ251bTo6QXNzaWduRGVjaW1hbFN0cmluZyhCdWZmZXJSZWZl
cmVuY2U8Y29uc3QgY2hhcj4gdmFsdWUpIHsKLSAgICAgICAgLy8gMl42NCA9IDE4NDQ2NzQ0MDcz
NzA5NTUxNjE2ID4gMTBeMTkKLSAgICAgICAgY29uc3QgaW50IGtNYXhVaW50NjREZWNpbWFsRGln
aXRzID0gMTk7Ci0gICAgICAgIFplcm8oKTsKLSAgICAgICAgaW50IGxlbmd0aCA9IHZhbHVlLmxl
bmd0aCgpOwotICAgICAgICBpbnQgcG9zID0gMDsKLSAgICAgICAgLy8gTGV0J3MganVzdCBzYXkg
dGhhdCBlYWNoIGRpZ2l0IG5lZWRzIDQgYml0cy4KLSAgICAgICAgd2hpbGUgKGxlbmd0aCA+PSBr
TWF4VWludDY0RGVjaW1hbERpZ2l0cykgewotICAgICAgICAgICAgdWludDY0X3QgZGlnaXRzID0g
UmVhZFVJbnQ2NCh2YWx1ZSwgcG9zLCBrTWF4VWludDY0RGVjaW1hbERpZ2l0cyk7Ci0gICAgICAg
ICAgICBwb3MgKz0ga01heFVpbnQ2NERlY2ltYWxEaWdpdHM7Ci0gICAgICAgICAgICBsZW5ndGgg
LT0ga01heFVpbnQ2NERlY2ltYWxEaWdpdHM7Ci0gICAgICAgICAgICBNdWx0aXBseUJ5UG93ZXJP
ZlRlbihrTWF4VWludDY0RGVjaW1hbERpZ2l0cyk7Ci0gICAgICAgICAgICBBZGRVSW50NjQoZGln
aXRzKTsKLSAgICAgICAgfQotICAgICAgICB1aW50NjRfdCBkaWdpdHMgPSBSZWFkVUludDY0KHZh
bHVlLCBwb3MsIGxlbmd0aCk7Ci0gICAgICAgIE11bHRpcGx5QnlQb3dlck9mVGVuKGxlbmd0aCk7
Ci0gICAgICAgIEFkZFVJbnQ2NChkaWdpdHMpOwotICAgICAgICBDbGFtcCgpOwotICAgIH0KLSAg
ICAKLSAgICAKLSAgICB2b2lkIEJpZ251bTo6QXNzaWduSGV4U3RyaW5nKEJ1ZmZlclJlZmVyZW5j
ZTxjb25zdCBjaGFyPiB2YWx1ZSkgewotICAgICAgICBaZXJvKCk7Ci0gICAgICAgIGludCBsZW5n
dGggPSB2YWx1ZS5sZW5ndGgoKTsKLSAgICAgICAgCi0gICAgICAgIGludCBuZWVkZWRfYmlnaXRz
ID0gbGVuZ3RoICogNCAvIGtCaWdpdFNpemUgKyAxOwotICAgICAgICBFbnN1cmVDYXBhY2l0eShu
ZWVkZWRfYmlnaXRzKTsKLSAgICAgICAgaW50IHN0cmluZ19pbmRleCA9IGxlbmd0aCAtIDE7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmVlZGVkX2JpZ2l0cyAtIDE7ICsraSkgewotICAg
ICAgICAgICAgLy8gVGhlc2UgYmlnaXRzIGFyZSBndWFyYW50ZWVkIHRvIGJlICJmdWxsIi4KLSAg
ICAgICAgICAgIENodW5rIGN1cnJlbnRfYmlnaXQgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCBrQmlnaXRTaXplIC8gNDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVu
dF9iaWdpdCArPSB0b0FTQ0lJSGV4VmFsdWUodmFsdWVbc3RyaW5nX2luZGV4LS1dKSA8PCAoaiAq
IDQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYmlnaXRzX1tpXSA9IGN1cnJlbnRfYmln
aXQ7Ci0gICAgICAgIH0KLSAgICAgICAgdXNlZF9kaWdpdHNfID0gbmVlZGVkX2JpZ2l0cyAtIDE7
Ci0gICAgICAgIAotICAgICAgICBDaHVuayBtb3N0X3NpZ25pZmljYW50X2JpZ2l0ID0gMDsgIC8v
IENvdWxkIGJlID0gMDsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gc3RyaW5nX2luZGV4
OyArK2opIHsKLSAgICAgICAgICAgIG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgPDw9IDQ7Ci0gICAg
ICAgICAgICBtb3N0X3NpZ25pZmljYW50X2JpZ2l0ICs9IHRvQVNDSUlIZXhWYWx1ZSh2YWx1ZVtq
XSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgIT0gMCkg
ewotICAgICAgICAgICAgYmlnaXRzX1t1c2VkX2RpZ2l0c19dID0gbW9zdF9zaWduaWZpY2FudF9i
aWdpdDsKLSAgICAgICAgICAgIHVzZWRfZGlnaXRzXysrOwotICAgICAgICB9Ci0gICAgICAgIENs
YW1wKCk7Ci0gICAgfQotICAgIAotICAgIAotICAgIHZvaWQgQmlnbnVtOjpBZGRVSW50NjQodWlu
dDY0X3Qgb3BlcmFuZCkgewotICAgICAgICBpZiAob3BlcmFuZCA9PSAwKSByZXR1cm47Ci0gICAg
ICAgIEJpZ251bSBvdGhlcjsKLSAgICAgICAgb3RoZXIuQXNzaWduVUludDY0KG9wZXJhbmQpOwot
ICAgICAgICBBZGRCaWdudW0ob3RoZXIpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICB2b2lkIEJp
Z251bTo6QWRkQmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpIHsKLSAgICAgICAgQVNTRVJUKElz
Q2xhbXBlZCgpKTsKLSAgICAgICAgQVNTRVJUKG90aGVyLklzQ2xhbXBlZCgpKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIElmIHRoaXMgaGFzIGEgZ3JlYXRlciBleHBvbmVudCB0aGFuIG90aGVyIGFw
cGVuZCB6ZXJvLWJpZ2l0cyB0byB0aGlzLgotICAgICAgICAvLyBBZnRlciB0aGlzIGNhbGwgZXhw
b25lbnRfIDw9IG90aGVyLmV4cG9uZW50Xy4KLSAgICAgICAgQWxpZ24ob3RoZXIpOwotICAgICAg
ICAKLSAgICAgICAgLy8gVGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzOgotICAgICAgICAvLyAg
IGFhYWFhYWFhYWFhIDAwMDAgICh3aGVyZSB0aGUgMHMgcmVwcmVzZW50IGEncyBleHBvbmVudCkK
LSAgICAgICAgLy8gICAgIGJiYmJiIDAwMDAwMDAwCi0gICAgICAgIC8vICAgLS0tLS0tLS0tLS0t
LS0tLQotICAgICAgICAvLyAgIGNjY2NjY2NjY2NjIDAwMDAKLSAgICAgICAgLy8gb3IKLSAgICAg
ICAgLy8gICAgYWFhYWFhYWFhYSAwMDAwCi0gICAgICAgIC8vICBiYmJiYmJiYmIgMDAwMDAwMAot
ICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgLy8gIGNjY2NjY2NjY2NjYyAw
MDAwCi0gICAgICAgIC8vIEluIGJvdGggY2FzZXMgd2UgbWlnaHQgbmVlZCBhIGNhcnJ5IGJpZ2l0
LgotICAgICAgICAKLSAgICAgICAgRW5zdXJlQ2FwYWNpdHkoMSArIE1heChCaWdpdExlbmd0aCgp
LCBvdGhlci5CaWdpdExlbmd0aCgpKSAtIGV4cG9uZW50Xyk7Ci0gICAgICAgIENodW5rIGNhcnJ5
ID0gMDsKLSAgICAgICAgaW50IGJpZ2l0X3BvcyA9IG90aGVyLmV4cG9uZW50XyAtIGV4cG9uZW50
XzsKLSAgICAgICAgQVNTRVJUKGJpZ2l0X3BvcyA+PSAwKTsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBvdGhlci51c2VkX2RpZ2l0c187ICsraSkgewotICAgICAgICAgICAgQ2h1bmsgc3Vt
ID0gYmlnaXRzX1tiaWdpdF9wb3NdICsgb3RoZXIuYmlnaXRzX1tpXSArIGNhcnJ5OwotICAgICAg
ICAgICAgYmlnaXRzX1tiaWdpdF9wb3NdID0gc3VtICYga0JpZ2l0TWFzazsKLSAgICAgICAgICAg
IGNhcnJ5ID0gc3VtID4+IGtCaWdpdFNpemU7Ci0gICAgICAgICAgICBiaWdpdF9wb3MrKzsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgd2hpbGUgKGNhcnJ5ICE9IDApIHsKLSAgICAgICAg
ICAgIENodW5rIHN1bSA9IGJpZ2l0c19bYmlnaXRfcG9zXSArIGNhcnJ5OwotICAgICAgICAgICAg
YmlnaXRzX1tiaWdpdF9wb3NdID0gc3VtICYga0JpZ2l0TWFzazsKLSAgICAgICAgICAgIGNhcnJ5
ID0gc3VtID4+IGtCaWdpdFNpemU7Ci0gICAgICAgICAgICBiaWdpdF9wb3MrKzsKLSAgICAgICAg
fQotICAgICAgICB1c2VkX2RpZ2l0c18gPSBNYXgoYmlnaXRfcG9zLCB1c2VkX2RpZ2l0c18pOwot
ICAgICAgICBBU1NFUlQoSXNDbGFtcGVkKCkpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICB2b2lk
IEJpZ251bTo6U3VidHJhY3RCaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcikgewotICAgICAgICBB
U1NFUlQoSXNDbGFtcGVkKCkpOwotICAgICAgICBBU1NFUlQob3RoZXIuSXNDbGFtcGVkKCkpOwot
ICAgICAgICAvLyBXZSByZXF1aXJlIHRoaXMgdG8gYmUgYmlnZ2VyIHRoYW4gb3RoZXIuCi0gICAg
ICAgIEFTU0VSVChMZXNzRXF1YWwob3RoZXIsICp0aGlzKSk7Ci0gICAgICAgIAotICAgICAgICBB
bGlnbihvdGhlcik7Ci0gICAgICAgIAotICAgICAgICBpbnQgb2Zmc2V0ID0gb3RoZXIuZXhwb25l
bnRfIC0gZXhwb25lbnRfOwotICAgICAgICBDaHVuayBib3Jyb3cgPSAwOwotICAgICAgICBpbnQg
aTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG90aGVyLnVzZWRfZGlnaXRzXzsgKytpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoKGJvcnJvdyA9PSAwKSB8fCAoYm9ycm93ID09IDEpKTsKLSAgICAg
ICAgICAgIENodW5rIGRpZmZlcmVuY2UgPSBiaWdpdHNfW2kgKyBvZmZzZXRdIC0gb3RoZXIuYmln
aXRzX1tpXSAtIGJvcnJvdzsKLSAgICAgICAgICAgIGJpZ2l0c19baSArIG9mZnNldF0gPSBkaWZm
ZXJlbmNlICYga0JpZ2l0TWFzazsKLSAgICAgICAgICAgIGJvcnJvdyA9IGRpZmZlcmVuY2UgPj4g
KGtDaHVua1NpemUgLSAxKTsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoYm9ycm93ICE9IDAp
IHsKLSAgICAgICAgICAgIENodW5rIGRpZmZlcmVuY2UgPSBiaWdpdHNfW2kgKyBvZmZzZXRdIC0g
Ym9ycm93OwotICAgICAgICAgICAgYmlnaXRzX1tpICsgb2Zmc2V0XSA9IGRpZmZlcmVuY2UgJiBr
QmlnaXRNYXNrOwotICAgICAgICAgICAgYm9ycm93ID0gZGlmZmVyZW5jZSA+PiAoa0NodW5rU2l6
ZSAtIDEpOwotICAgICAgICAgICAgKytpOwotICAgICAgICB9Ci0gICAgICAgIENsYW1wKCk7Ci0g
ICAgfQotICAgIAotICAgIAotICAgIHZvaWQgQmlnbnVtOjpTaGlmdExlZnQoaW50IHNoaWZ0X2Ft
b3VudCkgewotICAgICAgICBpZiAodXNlZF9kaWdpdHNfID09IDApIHJldHVybjsKLSAgICAgICAg
ZXhwb25lbnRfICs9IHNoaWZ0X2Ftb3VudCAvIGtCaWdpdFNpemU7Ci0gICAgICAgIGludCBsb2Nh
bF9zaGlmdCA9IHNoaWZ0X2Ftb3VudCAlIGtCaWdpdFNpemU7Ci0gICAgICAgIEVuc3VyZUNhcGFj
aXR5KHVzZWRfZGlnaXRzXyArIDEpOwotICAgICAgICBCaWdpdHNTaGlmdExlZnQobG9jYWxfc2hp
ZnQpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICB2b2lkIEJpZ251bTo6TXVsdGlwbHlCeVVJbnQz
Mih1aW50MzJfdCBmYWN0b3IpIHsKLSAgICAgICAgaWYgKGZhY3RvciA9PSAxKSByZXR1cm47Ci0g
ICAgICAgIGlmIChmYWN0b3IgPT0gMCkgewotICAgICAgICAgICAgWmVybygpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgcmV0
dXJuOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIHByb2R1Y3Qgb2YgYSBiaWdpdCB3aXRoIHRo
ZSBmYWN0b3IgaXMgb2Ygc2l6ZSBrQmlnaXRTaXplICsgMzIuCi0gICAgICAgIC8vIEFzc2VydCB0
aGF0IHRoaXMgbnVtYmVyICsgMSAoZm9yIHRoZSBjYXJyeSkgZml0cyBpbnRvIGRvdWJsZSBjaHVu
ay4KLSAgICAgICAgQVNTRVJUKGtEb3VibGVDaHVua1NpemUgPj0ga0JpZ2l0U2l6ZSArIDMyICsg
MSk7Ci0gICAgICAgIERvdWJsZUNodW5rIGNhcnJ5ID0gMDsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgewotICAgICAgICAgICAgRG91YmxlQ2h1bmsgcHJv
ZHVjdCA9IHN0YXRpY19jYXN0PERvdWJsZUNodW5rPihmYWN0b3IpICogYmlnaXRzX1tpXSArIGNh
cnJ5OwotICAgICAgICAgICAgYmlnaXRzX1tpXSA9IHN0YXRpY19jYXN0PENodW5rPihwcm9kdWN0
ICYga0JpZ2l0TWFzayk7Ci0gICAgICAgICAgICBjYXJyeSA9IChwcm9kdWN0ID4+IGtCaWdpdFNp
emUpOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChjYXJyeSAhPSAwKSB7Ci0gICAgICAgICAg
ICBFbnN1cmVDYXBhY2l0eSh1c2VkX2RpZ2l0c18gKyAxKTsKLSAgICAgICAgICAgIGJpZ2l0c19b
dXNlZF9kaWdpdHNfXSA9IHN0YXRpY19jYXN0PENodW5rPihjYXJyeSAmIGtCaWdpdE1hc2spOwot
ICAgICAgICAgICAgdXNlZF9kaWdpdHNfKys7Ci0gICAgICAgICAgICBjYXJyeSA+Pj0ga0JpZ2l0
U2l6ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAKLSAgICB2b2lkIEJpZ251bTo6TXVs
dGlwbHlCeVVJbnQ2NCh1aW50NjRfdCBmYWN0b3IpIHsKLSAgICAgICAgaWYgKGZhY3RvciA9PSAx
KSByZXR1cm47Ci0gICAgICAgIGlmIChmYWN0b3IgPT0gMCkgewotICAgICAgICAgICAgWmVybygp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChrQmlnaXRT
aXplIDwgMzIpOwotICAgICAgICB1aW50NjRfdCBjYXJyeSA9IDA7Ci0gICAgICAgIHVpbnQ2NF90
IGxvdyA9IGZhY3RvciAmIDB4RkZGRkZGRkY7Ci0gICAgICAgIHVpbnQ2NF90IGhpZ2ggPSBmYWN0
b3IgPj4gMzI7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kp
IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IHByb2R1Y3RfbG93ID0gbG93ICogYmlnaXRzX1tpXTsK
LSAgICAgICAgICAgIHVpbnQ2NF90IHByb2R1Y3RfaGlnaCA9IGhpZ2ggKiBiaWdpdHNfW2ldOwot
ICAgICAgICAgICAgdWludDY0X3QgdG1wID0gKGNhcnJ5ICYga0JpZ2l0TWFzaykgKyBwcm9kdWN0
X2xvdzsKLSAgICAgICAgICAgIGJpZ2l0c19baV0gPSBzdGF0aWNfY2FzdDxDaHVuaz4odG1wICYg
a0JpZ2l0TWFzayk7Ci0gICAgICAgICAgICBjYXJyeSA9IChjYXJyeSA+PiBrQmlnaXRTaXplKSAr
ICh0bXAgPj4ga0JpZ2l0U2l6ZSkgKwotICAgICAgICAgICAgKHByb2R1Y3RfaGlnaCA8PCAoMzIg
LSBrQmlnaXRTaXplKSk7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKGNhcnJ5ICE9IDApIHsK
LSAgICAgICAgICAgIEVuc3VyZUNhcGFjaXR5KHVzZWRfZGlnaXRzXyArIDEpOwotICAgICAgICAg
ICAgYmlnaXRzX1t1c2VkX2RpZ2l0c19dID0gc3RhdGljX2Nhc3Q8Q2h1bms+KGNhcnJ5ICYga0Jp
Z2l0TWFzayk7Ci0gICAgICAgICAgICB1c2VkX2RpZ2l0c18rKzsKLSAgICAgICAgICAgIGNhcnJ5
ID4+PSBrQmlnaXRTaXplOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIAotICAgIHZvaWQg
QmlnbnVtOjpNdWx0aXBseUJ5UG93ZXJPZlRlbihpbnQgZXhwb25lbnQpIHsKLSAgICAgICAgY29u
c3QgdWludDY0X3Qga0ZpdmUyNyA9IFVJTlQ2NF8yUEFSVF9DKDB4Njc2NWM3OTMsIGZhMTAwNzlk
KTsKLSAgICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmUxID0gNTsKLSAgICAgICAgY29uc3QgdWlu
dDE2X3Qga0ZpdmUyID0ga0ZpdmUxICogNTsKLSAgICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmUz
ID0ga0ZpdmUyICogNTsKLSAgICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmU0ID0ga0ZpdmUzICog
NTsKLSAgICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmU1ID0ga0ZpdmU0ICogNTsKLSAgICAgICAg
Y29uc3QgdWludDE2X3Qga0ZpdmU2ID0ga0ZpdmU1ICogNTsKLSAgICAgICAgY29uc3QgdWludDMy
X3Qga0ZpdmU3ID0ga0ZpdmU2ICogNTsKLSAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmU4ID0g
a0ZpdmU3ICogNTsKLSAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmU5ID0ga0ZpdmU4ICogNTsK
LSAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmUxMCA9IGtGaXZlOSAqIDU7Ci0gICAgICAgIGNv
bnN0IHVpbnQzMl90IGtGaXZlMTEgPSBrRml2ZTEwICogNTsKLSAgICAgICAgY29uc3QgdWludDMy
X3Qga0ZpdmUxMiA9IGtGaXZlMTEgKiA1OwotICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTEz
ID0ga0ZpdmUxMiAqIDU7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlMV90b18xMltdID0K
LSAgICAgICAgeyBrRml2ZTEsIGtGaXZlMiwga0ZpdmUzLCBrRml2ZTQsIGtGaXZlNSwga0ZpdmU2
LAotICAgICAgICAgICAga0ZpdmU3LCBrRml2ZTgsIGtGaXZlOSwga0ZpdmUxMCwga0ZpdmUxMSwg
a0ZpdmUxMiB9OwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGV4cG9uZW50ID49IDApOwotICAg
ICAgICBpZiAoZXhwb25lbnQgPT0gMCkgcmV0dXJuOwotICAgICAgICBpZiAodXNlZF9kaWdpdHNf
ID09IDApIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIC8vIFdlIHNoaWZ0IGJ5IGV4cG9uZW50
IGF0IHRoZSBlbmQganVzdCBiZWZvcmUgcmV0dXJuaW5nLgotICAgICAgICBpbnQgcmVtYWluaW5n
X2V4cG9uZW50ID0gZXhwb25lbnQ7Ci0gICAgICAgIHdoaWxlIChyZW1haW5pbmdfZXhwb25lbnQg
Pj0gMjcpIHsKLSAgICAgICAgICAgIE11bHRpcGx5QnlVSW50NjQoa0ZpdmUyNyk7Ci0gICAgICAg
ICAgICByZW1haW5pbmdfZXhwb25lbnQgLT0gMjc7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUg
KHJlbWFpbmluZ19leHBvbmVudCA+PSAxMykgewotICAgICAgICAgICAgTXVsdGlwbHlCeVVJbnQz
MihrRml2ZTEzKTsKLSAgICAgICAgICAgIHJlbWFpbmluZ19leHBvbmVudCAtPSAxMzsKLSAgICAg
ICAgfQotICAgICAgICBpZiAocmVtYWluaW5nX2V4cG9uZW50ID4gMCkgewotICAgICAgICAgICAg
TXVsdGlwbHlCeVVJbnQzMihrRml2ZTFfdG9fMTJbcmVtYWluaW5nX2V4cG9uZW50IC0gMV0pOwot
ICAgICAgICB9Ci0gICAgICAgIFNoaWZ0TGVmdChleHBvbmVudCk7Ci0gICAgfQotICAgIAotICAg
IAotICAgIHZvaWQgQmlnbnVtOjpTcXVhcmUoKSB7Ci0gICAgICAgIEFTU0VSVChJc0NsYW1wZWQo
KSk7Ci0gICAgICAgIGludCBwcm9kdWN0X2xlbmd0aCA9IDIgKiB1c2VkX2RpZ2l0c187Ci0gICAg
ICAgIEVuc3VyZUNhcGFjaXR5KHByb2R1Y3RfbGVuZ3RoKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IENvbWJhIG11bHRpcGxpY2F0aW9uOiBjb21wdXRlIGVhY2ggY29sdW1uIHNlcGFyYXRlbHkuCi0g
ICAgICAgIC8vIEV4YW1wbGU6IHIgPSBhMmExYTAgKiBiMmIxYjAuCi0gICAgICAgIC8vICAgIHIg
PSAgMSAgICAqIGEwYjAgKwotICAgICAgICAvLyAgICAgICAgMTAgICAgKiAoYTFiMCArIGEwYjEp
ICsKLSAgICAgICAgLy8gICAgICAgIDEwMCAgICogKGEyYjAgKyBhMWIxICsgYTBiMikgKwotICAg
ICAgICAvLyAgICAgICAgMTAwMCAgKiAoYTJiMSArIGExYjIpICsKLSAgICAgICAgLy8gICAgICAg
IDEwMDAwICogYTJiMgotICAgICAgICAvLwotICAgICAgICAvLyBJbiB0aGUgd29yc3QgY2FzZSB3
ZSBoYXZlIHRvIGFjY3VtdWxhdGUgbmItZGlnaXRzIHByb2R1Y3RzIG9mIGRpZ2l0KmRpZ2l0Lgot
ICAgICAgICAvLwotICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgYWRkaXRpb25hbCBudW1iZXIg
b2YgYml0cyBpbiBhIERvdWJsZUNodW5rIGFyZSBlbm91Z2ggdG8KLSAgICAgICAgLy8gc3VtIHVw
IHVzZWRfZGlnaXRzIG9mIEJpZ2l0KkJpZ2l0LgotICAgICAgICBpZiAoKDEgPDwgKDIgKiAoa0No
dW5rU2l6ZSAtIGtCaWdpdFNpemUpKSkgPD0gdXNlZF9kaWdpdHNfKSB7Ci0gICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgRG91YmxlQ2h1bmsgYWNjdW11bGF0
b3IgPSAwOwotICAgICAgICAvLyBGaXJzdCBzaGlmdCB0aGUgZGlnaXRzIHNvIHdlIGRvbid0IG92
ZXJ3cml0ZSB0aGVtLgotICAgICAgICBpbnQgY29weV9vZmZzZXQgPSB1c2VkX2RpZ2l0c187Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKLSAgICAgICAg
ICAgIGJpZ2l0c19bY29weV9vZmZzZXQgKyBpXSA9IGJpZ2l0c19baV07Ci0gICAgICAgIH0KLSAg
ICAgICAgLy8gV2UgaGF2ZSB0d28gbG9vcHMgdG8gYXZvaWQgc29tZSAnaWYncyBpbiB0aGUgbG9v
cC4KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgewotICAg
ICAgICAgICAgLy8gUHJvY2VzcyB0ZW1wb3JhcnkgZGlnaXQgaSB3aXRoIHBvd2VyIGkuCi0gICAg
ICAgICAgICAvLyBUaGUgc3VtIG9mIHRoZSB0d28gaW5kaWNlcyBtdXN0IGJlIGVxdWFsIHRvIGku
Ci0gICAgICAgICAgICBpbnQgYmlnaXRfaW5kZXgxID0gaTsKLSAgICAgICAgICAgIGludCBiaWdp
dF9pbmRleDIgPSAwOwotICAgICAgICAgICAgLy8gU3VtIGFsbCBvZiB0aGUgc3ViLXByb2R1Y3Rz
LgotICAgICAgICAgICAgd2hpbGUgKGJpZ2l0X2luZGV4MSA+PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgQ2h1bmsgY2h1bmsxID0gYmlnaXRzX1tjb3B5X29mZnNldCArIGJpZ2l0X2luZGV4MV07Ci0g
ICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsyID0gYmlnaXRzX1tjb3B5X29mZnNldCArIGJpZ2l0
X2luZGV4Ml07Ci0gICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgKz0gc3RhdGljX2Nhc3Q8RG91
YmxlQ2h1bms+KGNodW5rMSkgKiBjaHVuazI7Ci0gICAgICAgICAgICAgICAgYmlnaXRfaW5kZXgx
LS07Ci0gICAgICAgICAgICAgICAgYmlnaXRfaW5kZXgyKys7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBiaWdpdHNfW2ldID0gc3RhdGljX2Nhc3Q8Q2h1bms+KGFjY3VtdWxhdG9yKSAmIGtC
aWdpdE1hc2s7Ci0gICAgICAgICAgICBhY2N1bXVsYXRvciA+Pj0ga0JpZ2l0U2l6ZTsKLSAgICAg
ICAgfQotICAgICAgICBmb3IgKGludCBpID0gdXNlZF9kaWdpdHNfOyBpIDwgcHJvZHVjdF9sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgaW50IGJpZ2l0X2luZGV4MSA9IHVzZWRfZGlnaXRzXyAt
IDE7Ci0gICAgICAgICAgICBpbnQgYmlnaXRfaW5kZXgyID0gaSAtIGJpZ2l0X2luZGV4MTsKLSAg
ICAgICAgICAgIC8vIEludmFyaWFudDogc3VtIG9mIGJvdGggaW5kaWNlcyBpcyBhZ2FpbiBlcXVh
bCB0byBpLgotICAgICAgICAgICAgLy8gSW5uZXIgbG9vcCBydW5zIDAgdGltZXMgb24gbGFzdCBp
dGVyYXRpb24sIGVtcHR5aW5nIGFjY3VtdWxhdG9yLgotICAgICAgICAgICAgd2hpbGUgKGJpZ2l0
X2luZGV4MiA8IHVzZWRfZGlnaXRzXykgewotICAgICAgICAgICAgICAgIENodW5rIGNodW5rMSA9
IGJpZ2l0c19bY29weV9vZmZzZXQgKyBiaWdpdF9pbmRleDFdOwotICAgICAgICAgICAgICAgIENo
dW5rIGNodW5rMiA9IGJpZ2l0c19bY29weV9vZmZzZXQgKyBiaWdpdF9pbmRleDJdOwotICAgICAg
ICAgICAgICAgIGFjY3VtdWxhdG9yICs9IHN0YXRpY19jYXN0PERvdWJsZUNodW5rPihjaHVuazEp
ICogY2h1bmsyOwotICAgICAgICAgICAgICAgIGJpZ2l0X2luZGV4MS0tOwotICAgICAgICAgICAg
ICAgIGJpZ2l0X2luZGV4MisrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gVGhlIG92
ZXJ3cml0dGVuIGJpZ2l0c19baV0gd2lsbCBuZXZlciBiZSByZWFkIGluIGZ1cnRoZXIgbG9vcCBp
dGVyYXRpb25zLAotICAgICAgICAgICAgLy8gYmVjYXVzZSBiaWdpdF9pbmRleDEgYW5kIGJpZ2l0
X2luZGV4MiBhcmUgYWx3YXlzIGdyZWF0ZXIKLSAgICAgICAgICAgIC8vIHRoYW4gaSAtIHVzZWRf
ZGlnaXRzXy4KLSAgICAgICAgICAgIGJpZ2l0c19baV0gPSBzdGF0aWNfY2FzdDxDaHVuaz4oYWNj
dW11bGF0b3IpICYga0JpZ2l0TWFzazsKLSAgICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSBrQmln
aXRTaXplOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNpbmNlIHRoZSByZXN1bHQgd2FzIGd1YXJh
bnRlZWQgdG8gbGllIGluc2lkZSB0aGUgbnVtYmVyIHRoZQotICAgICAgICAvLyBhY2N1bXVsYXRv
ciBtdXN0IGJlIDAgbm93LgotICAgICAgICBBU1NFUlQoYWNjdW11bGF0b3IgPT0gMCk7Ci0gICAg
ICAgIAotICAgICAgICAvLyBEb24ndCBmb3JnZXQgdG8gdXBkYXRlIHRoZSB1c2VkX2RpZ2l0cyBh
bmQgdGhlIGV4cG9uZW50LgotICAgICAgICB1c2VkX2RpZ2l0c18gPSBwcm9kdWN0X2xlbmd0aDsK
LSAgICAgICAgZXhwb25lbnRfICo9IDI7Ci0gICAgICAgIENsYW1wKCk7Ci0gICAgfQotICAgIAot
ICAgIAotICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25Qb3dlclVJbnQxNih1aW50MTZfdCBiYXNlLCBp
bnQgcG93ZXJfZXhwb25lbnQpIHsKLSAgICAgICAgQVNTRVJUKGJhc2UgIT0gMCk7Ci0gICAgICAg
IEFTU0VSVChwb3dlcl9leHBvbmVudCA+PSAwKTsKLSAgICAgICAgaWYgKHBvd2VyX2V4cG9uZW50
ID09IDApIHsKLSAgICAgICAgICAgIEFzc2lnblVJbnQxNigxKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBaZXJvKCk7Ci0gICAgICAgIGludCBzaGlmdHMgPSAwOwot
ICAgICAgICAvLyBXZSBleHBlY3QgYmFzZSB0byBiZSBpbiByYW5nZSAyLTMyLCBhbmQgbW9zdCBv
ZnRlbiB0byBiZSAxMC4KLSAgICAgICAgLy8gSXQgZG9lcyBub3QgbWFrZSBtdWNoIHNlbnNlIHRv
IGltcGxlbWVudCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3IgY291bnRpbmcKLSAgICAgICAgLy8g
dGhlIGJpdHMuCi0gICAgICAgIHdoaWxlICgoYmFzZSAmIDEpID09IDApIHsKLSAgICAgICAgICAg
IGJhc2UgPj49IDE7Ci0gICAgICAgICAgICBzaGlmdHMrKzsKLSAgICAgICAgfQotICAgICAgICBp
bnQgYml0X3NpemUgPSAwOwotICAgICAgICBpbnQgdG1wX2Jhc2UgPSBiYXNlOwotICAgICAgICB3
aGlsZSAodG1wX2Jhc2UgIT0gMCkgewotICAgICAgICAgICAgdG1wX2Jhc2UgPj49IDE7Ci0gICAg
ICAgICAgICBiaXRfc2l6ZSsrOwotICAgICAgICB9Ci0gICAgICAgIGludCBmaW5hbF9zaXplID0g
Yml0X3NpemUgKiBwb3dlcl9leHBvbmVudDsKLSAgICAgICAgLy8gMSBleHRyYSBiaWdpdCBmb3Ig
dGhlIHNoaWZ0aW5nLCBhbmQgb25lIGZvciByb3VuZGVkIGZpbmFsX3NpemUuCi0gICAgICAgIEVu
c3VyZUNhcGFjaXR5KGZpbmFsX3NpemUgLyBrQmlnaXRTaXplICsgMik7Ci0gICAgICAgIAotICAg
ICAgICAvLyBMZWZ0IHRvIFJpZ2h0IGV4cG9uZW50aWF0aW9uLgotICAgICAgICBpbnQgbWFzayA9
IDE7Ci0gICAgICAgIHdoaWxlIChwb3dlcl9leHBvbmVudCA+PSBtYXNrKSBtYXNrIDw8PSAxOwot
ICAgICAgICAKLSAgICAgICAgLy8gVGhlIG1hc2sgaXMgbm93IHBvaW50aW5nIHRvIHRoZSBiaXQg
YWJvdmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMS1iaXQgb2YKLSAgICAgICAgLy8gcG93ZXJfZXhw
b25lbnQuCi0gICAgICAgIC8vIEdldCByaWQgb2YgZmlyc3QgMS1iaXQ7Ci0gICAgICAgIG1hc2sg
Pj49IDI7Ci0gICAgICAgIHVpbnQ2NF90IHRoaXNfdmFsdWUgPSBiYXNlOwotICAgICAgICAKLSAg
ICAgICAgYm9vbCBkZWxheWVkX211bHRpcGxpY2lhdGlvbiA9IGZhbHNlOwotICAgICAgICBjb25z
dCB1aW50NjRfdCBtYXhfMzJiaXRzID0gMHhGRkZGRkZGRjsKLSAgICAgICAgd2hpbGUgKG1hc2sg
IT0gMCAmJiB0aGlzX3ZhbHVlIDw9IG1heF8zMmJpdHMpIHsKLSAgICAgICAgICAgIHRoaXNfdmFs
dWUgPSB0aGlzX3ZhbHVlICogdGhpc192YWx1ZTsKLSAgICAgICAgICAgIC8vIFZlcmlmeSB0aGF0
IHRoZXJlIGlzIGVub3VnaCBzcGFjZSBpbiB0aGlzX3ZhbHVlIHRvIHBlcmZvcm0gdGhlCi0gICAg
ICAgICAgICAvLyBtdWx0aXBsaWNhdGlvbi4gIFRoZSBmaXJzdCBiaXRfc2l6ZSBiaXRzIG11c3Qg
YmUgMC4KLSAgICAgICAgICAgIGlmICgocG93ZXJfZXhwb25lbnQgJiBtYXNrKSAhPSAwKSB7Ci0g
ICAgICAgICAgICAgICAgdWludDY0X3QgYmFzZV9iaXRzX21hc2sgPQotICAgICAgICAgICAgICAg
IH4oKHN0YXRpY19jYXN0PHVpbnQ2NF90PigxKSA8PCAoNjQgLSBiaXRfc2l6ZSkpIC0gMSk7Ci0g
ICAgICAgICAgICAgICAgYm9vbCBoaWdoX2JpdHNfemVybyA9ICh0aGlzX3ZhbHVlICYgYmFzZV9i
aXRzX21hc2spID09IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGhpZ2hfYml0c196ZXJvKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXNfdmFsdWUgKj0gYmFzZTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkZWxheWVkX211bHRpcGxpY2lhdGlvbiA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFzayA+
Pj0gMTsKLSAgICAgICAgfQotICAgICAgICBBc3NpZ25VSW50NjQodGhpc192YWx1ZSk7Ci0gICAg
ICAgIGlmIChkZWxheWVkX211bHRpcGxpY2lhdGlvbikgewotICAgICAgICAgICAgTXVsdGlwbHlC
eVVJbnQzMihiYXNlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gTm93IGRvIHRo
ZSBzYW1lIHRoaW5nIGFzIGEgYmlnbnVtLgotICAgICAgICB3aGlsZSAobWFzayAhPSAwKSB7Ci0g
ICAgICAgICAgICBTcXVhcmUoKTsKLSAgICAgICAgICAgIGlmICgocG93ZXJfZXhwb25lbnQgJiBt
YXNrKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgTXVsdGlwbHlCeVVJbnQzMihiYXNlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hc2sgPj49IDE7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIC8vIEFuZCBmaW5hbGx5IGFkZCB0aGUgc2F2ZWQgc2hpZnRzLgotICAgICAgICBT
aGlmdExlZnQoc2hpZnRzICogcG93ZXJfZXhwb25lbnQpOwotICAgIH0KLSAgICAKLSAgICAKLSAg
ICAvLyBQcmVjb25kaXRpb246IHRoaXMvb3RoZXIgPCAxNmJpdC4KLSAgICB1aW50MTZfdCBCaWdu
dW06OkRpdmlkZU1vZHVsb0ludEJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKSB7Ci0gICAgICAg
IEFTU0VSVChJc0NsYW1wZWQoKSk7Ci0gICAgICAgIEFTU0VSVChvdGhlci5Jc0NsYW1wZWQoKSk7
Ci0gICAgICAgIEFTU0VSVChvdGhlci51c2VkX2RpZ2l0c18gPiAwKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIEVhc3kgY2FzZTogaWYgd2UgaGF2ZSBsZXNzIGRpZ2l0cyB0aGFuIHRoZSBkaXZpc29y
IHRoYW4gdGhlIHJlc3VsdCBpcyAwLgotICAgICAgICAvLyBOb3RlOiB0aGlzIGhhbmRsZXMgdGhl
IGNhc2Ugd2hlcmUgdGhpcyA9PSAwLCB0b28uCi0gICAgICAgIGlmIChCaWdpdExlbmd0aCgpIDwg
b3RoZXIuQmlnaXRMZW5ndGgoKSkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIEFsaWduKG90aGVyKTsKLSAgICAgICAgCi0gICAgICAgIHVpbnQx
Nl90IHJlc3VsdCA9IDA7Ci0gICAgICAgIAotICAgICAgICAvLyBTdGFydCBieSByZW1vdmluZyBt
dWx0aXBsZXMgb2YgJ290aGVyJyB1bnRpbCBib3RoIG51bWJlcnMgaGF2ZSB0aGUgc2FtZQotICAg
ICAgICAvLyBudW1iZXIgb2YgZGlnaXRzLgotICAgICAgICB3aGlsZSAoQmlnaXRMZW5ndGgoKSA+
IG90aGVyLkJpZ2l0TGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgbmFpdmUgYXBwcm9h
Y2ggaXMgZXh0cmVtZWx5IGluZWZmaWNpZW50IGlmIHRoZSB0aGlzIGRpdmlkZWQgb3RoZXIKLSAg
ICAgICAgICAgIC8vIG1pZ2h0IGJlIGJpZy4gVGhpcyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBm
b3IgZG91YmxlVG9TdHJpbmcgd2hlcmUKLSAgICAgICAgICAgIC8vIHRoZSByZXN1bHQgc2hvdWxk
IGJlIHNtYWxsIChsZXNzIHRoYW4gMTApLgotICAgICAgICAgICAgQVNTRVJUKG90aGVyLmJpZ2l0
c19bb3RoZXIudXNlZF9kaWdpdHNfIC0gMV0gPj0gKCgxIDw8IGtCaWdpdFNpemUpIC8gMTYpKTsK
LSAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgbXVsdGlwbGVzIG9mIHRoZSBmaXJzdCBkaWdpdC4K
LSAgICAgICAgICAgIC8vIEV4YW1wbGUgdGhpcyA9IDIzIGFuZCBvdGhlciBlcXVhbHMgOS4gLT4g
UmVtb3ZlIDIgbXVsdGlwbGVzLgotICAgICAgICAgICAgcmVzdWx0ICs9IGJpZ2l0c19bdXNlZF9k
aWdpdHNfIC0gMV07Ci0gICAgICAgICAgICBTdWJ0cmFjdFRpbWVzKG90aGVyLCBiaWdpdHNfW3Vz
ZWRfZGlnaXRzXyAtIDFdKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNTRVJUKEJp
Z2l0TGVuZ3RoKCkgPT0gb3RoZXIuQmlnaXRMZW5ndGgoKSk7Ci0gICAgICAgIAotICAgICAgICAv
LyBCb3RoIGJpZ251bXMgYXJlIGF0IHRoZSBzYW1lIGxlbmd0aCBub3cuCi0gICAgICAgIC8vIFNp
bmNlIG90aGVyIGhhcyBtb3JlIHRoYW4gMCBkaWdpdHMgd2Uga25vdyB0aGF0IHRoZSBhY2Nlc3Mg
dG8KLSAgICAgICAgLy8gYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSBpcyBzYWZlLgotICAgICAg
ICBDaHVuayB0aGlzX2JpZ2l0ID0gYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXTsKLSAgICAgICAg
Q2h1bmsgb3RoZXJfYmlnaXQgPSBvdGhlci5iaWdpdHNfW290aGVyLnVzZWRfZGlnaXRzXyAtIDFd
OwotICAgICAgICAKLSAgICAgICAgaWYgKG90aGVyLnVzZWRfZGlnaXRzXyA9PSAxKSB7Ci0gICAg
ICAgICAgICAvLyBTaG9ydGN1dCBmb3IgZWFzeSAoYW5kIGNvbW1vbikgY2FzZS4KLSAgICAgICAg
ICAgIGludCBxdW90aWVudCA9IHRoaXNfYmlnaXQgLyBvdGhlcl9iaWdpdDsKLSAgICAgICAgICAg
IGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0gPSB0aGlzX2JpZ2l0IC0gb3RoZXJfYmlnaXQgKiBx
dW90aWVudDsKLSAgICAgICAgICAgIHJlc3VsdCArPSBxdW90aWVudDsKLSAgICAgICAgICAgIENs
YW1wKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpbnQgZGl2aXNpb25fZXN0aW1hdGUgPSB0aGlzX2JpZ2l0IC8gKG90aGVyX2JpZ2l0
ICsgMSk7Ci0gICAgICAgIHJlc3VsdCArPSBkaXZpc2lvbl9lc3RpbWF0ZTsKLSAgICAgICAgU3Vi
dHJhY3RUaW1lcyhvdGhlciwgZGl2aXNpb25fZXN0aW1hdGUpOwotICAgICAgICAKLSAgICAgICAg
aWYgKG90aGVyX2JpZ2l0ICogKGRpdmlzaW9uX2VzdGltYXRlICsgMSkgPiB0aGlzX2JpZ2l0KSB7
Ci0gICAgICAgICAgICAvLyBObyBuZWVkIHRvIGV2ZW4gdHJ5IHRvIHN1YnRyYWN0LiBFdmVuIGlm
IG90aGVyJ3MgcmVtYWluaW5nIGRpZ2l0cyB3ZXJlIDAKLSAgICAgICAgICAgIC8vIGFub3RoZXIg
c3VidHJhY3Rpb24gd291bGQgYmUgdG9vIG11Y2guCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB3aGlsZSAoTGVzc0VxdWFsKG90aGVyLCAq
dGhpcykpIHsKLSAgICAgICAgICAgIFN1YnRyYWN0QmlnbnVtKG90aGVyKTsKLSAgICAgICAgICAg
IHJlc3VsdCsrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAg
IAotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFM+Ci0gICAgc3RhdGljIGludCBTaXplSW5I
ZXhDaGFycyhTIG51bWJlcikgewotICAgICAgICBBU1NFUlQobnVtYmVyID4gMCk7Ci0gICAgICAg
IGludCByZXN1bHQgPSAwOwotICAgICAgICB3aGlsZSAobnVtYmVyICE9IDApIHsKLSAgICAgICAg
ICAgIG51bWJlciA+Pj0gNDsKLSAgICAgICAgICAgIHJlc3VsdCsrOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIAotICAgIHN0YXRpYyBjaGFyIEhl
eENoYXJPZlZhbHVlKGludCB2YWx1ZSkgewotICAgICAgICBBU1NFUlQoMCA8PSB2YWx1ZSAmJiB2
YWx1ZSA8PSAxNik7Ci0gICAgICAgIGlmICh2YWx1ZSA8IDEwKSByZXR1cm4gdmFsdWUgKyAnMCc7
Ci0gICAgICAgIHJldHVybiB2YWx1ZSAtIDEwICsgJ0EnOwotICAgIH0KLSAgICAKLSAgICAKLSAg
ICBib29sIEJpZ251bTo6VG9IZXhTdHJpbmcoY2hhciogYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUp
IGNvbnN0IHsKLSAgICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKLSAgICAgICAgLy8gRWFjaCBi
aWdpdCBtdXN0IGJlIHByaW50YWJsZSBhcyBzZXBhcmF0ZSBoZXgtY2hhcmFjdGVyLgotICAgICAg
ICBBU1NFUlQoa0JpZ2l0U2l6ZSAlIDQgPT0gMCk7Ci0gICAgICAgIGNvbnN0IGludCBrSGV4Q2hh
cnNQZXJCaWdpdCA9IGtCaWdpdFNpemUgLyA0OwotICAgICAgICAKLSAgICAgICAgaWYgKHVzZWRf
ZGlnaXRzXyA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoYnVmZmVyX3NpemUgPCAyKSByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBidWZmZXJbMF0gPSAnMCc7Ci0gICAgICAgICAgICBidWZmZXJb
MV0gPSAnXDAnOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gV2UgYWRkIDEgZm9yIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGNoYXJhY3Rlci4KLSAgICAgICAg
aW50IG5lZWRlZF9jaGFycyA9IChCaWdpdExlbmd0aCgpIC0gMSkgKiBrSGV4Q2hhcnNQZXJCaWdp
dCArCi0gICAgICAgIFNpemVJbkhleENoYXJzKGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0pICsg
MTsKLSAgICAgICAgaWYgKG5lZWRlZF9jaGFycyA+IGJ1ZmZlcl9zaXplKSByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGludCBzdHJpbmdfaW5kZXggPSBuZWVkZWRfY2hhcnMgLSAxOwotICAgICAgICBi
dWZmZXJbc3RyaW5nX2luZGV4LS1dID0gJ1wwJzsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBleHBvbmVudF87ICsraSkgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBrSGV4
Q2hhcnNQZXJCaWdpdDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW3N0cmluZ19pbmRl
eC0tXSA9ICcwJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHVzZWRfZGlnaXRzXyAtIDE7ICsraSkgewotICAgICAgICAgICAgQ2h1bmsgY3Vy
cmVudF9iaWdpdCA9IGJpZ2l0c19baV07Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8
IGtIZXhDaGFyc1BlckJpZ2l0OyArK2opIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbc3RyaW5n
X2luZGV4LS1dID0gSGV4Q2hhck9mVmFsdWUoY3VycmVudF9iaWdpdCAmIDB4Rik7Ci0gICAgICAg
ICAgICAgICAgY3VycmVudF9iaWdpdCA+Pj0gNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAvLyBBbmQgZmluYWxseSB0aGUgbGFzdCBiaWdpdC4KLSAgICAgICAgQ2h1bmsgbW9z
dF9zaWduaWZpY2FudF9iaWdpdCA9IGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV07Ci0gICAgICAg
IHdoaWxlIChtb3N0X3NpZ25pZmljYW50X2JpZ2l0ICE9IDApIHsKLSAgICAgICAgICAgIGJ1ZmZl
cltzdHJpbmdfaW5kZXgtLV0gPSBIZXhDaGFyT2ZWYWx1ZShtb3N0X3NpZ25pZmljYW50X2JpZ2l0
ICYgMHhGKTsKLSAgICAgICAgICAgIG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgPj49IDQ7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIAotICAgIEJpZ251
bTo6Q2h1bmsgQmlnbnVtOjpCaWdpdEF0KGludCBpbmRleCkgY29uc3QgewotICAgICAgICBpZiAo
aW5kZXggPj0gQmlnaXRMZW5ndGgoKSkgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChpbmRleCA8IGV4
cG9uZW50XykgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBiaWdpdHNfW2luZGV4IC0gZXhwb25l
bnRfXTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgaW50IEJpZ251bTo6Q29tcGFyZShjb25zdCBC
aWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYikgewotICAgICAgICBBU1NFUlQoYS5Jc0NsYW1wZWQo
KSk7Ci0gICAgICAgIEFTU0VSVChiLklzQ2xhbXBlZCgpKTsKLSAgICAgICAgaW50IGJpZ2l0X2xl
bmd0aF9hID0gYS5CaWdpdExlbmd0aCgpOwotICAgICAgICBpbnQgYmlnaXRfbGVuZ3RoX2IgPSBi
LkJpZ2l0TGVuZ3RoKCk7Ci0gICAgICAgIGlmIChiaWdpdF9sZW5ndGhfYSA8IGJpZ2l0X2xlbmd0
aF9iKSByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChiaWdpdF9sZW5ndGhfYSA+IGJpZ2l0X2xlbmd0
aF9iKSByZXR1cm4gKzE7Ci0gICAgICAgIGZvciAoaW50IGkgPSBiaWdpdF9sZW5ndGhfYSAtIDE7
IGkgPj0gTWluKGEuZXhwb25lbnRfLCBiLmV4cG9uZW50Xyk7IC0taSkgewotICAgICAgICAgICAg
Q2h1bmsgYmlnaXRfYSA9IGEuQmlnaXRBdChpKTsKLSAgICAgICAgICAgIENodW5rIGJpZ2l0X2Ig
PSBiLkJpZ2l0QXQoaSk7Ci0gICAgICAgICAgICBpZiAoYmlnaXRfYSA8IGJpZ2l0X2IpIHJldHVy
biAtMTsKLSAgICAgICAgICAgIGlmIChiaWdpdF9hID4gYmlnaXRfYikgcmV0dXJuICsxOwotICAg
ICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkgYXJlIGVxdWFsIHVwIHRvIHRoaXMgZGlnaXQuIFRy
eSB0aGUgbmV4dCBkaWdpdC4KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgCi0gICAgCi0gICAgaW50IEJpZ251bTo6UGx1c0NvbXBhcmUoY29uc3QgQmlnbnVtJiBhLCBj
b25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYykgewotICAgICAgICBBU1NFUlQoYS5Jc0Ns
YW1wZWQoKSk7Ci0gICAgICAgIEFTU0VSVChiLklzQ2xhbXBlZCgpKTsKLSAgICAgICAgQVNTRVJU
KGMuSXNDbGFtcGVkKCkpOwotICAgICAgICBpZiAoYS5CaWdpdExlbmd0aCgpIDwgYi5CaWdpdExl
bmd0aCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUGx1c0NvbXBhcmUoYiwgYSwgYyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKGEuQmlnaXRMZW5ndGgoKSArIDEgPCBjLkJpZ2l0TGVuZ3RoKCkp
IHJldHVybiAtMTsKLSAgICAgICAgaWYgKGEuQmlnaXRMZW5ndGgoKSA+IGMuQmlnaXRMZW5ndGgo
KSkgcmV0dXJuICsxOwotICAgICAgICAvLyBUaGUgZXhwb25lbnQgZW5jb2RlcyAwLWJpZ2l0cy4g
U28gaWYgdGhlcmUgYXJlIG1vcmUgMC1kaWdpdHMgaW4gJ2EnIHRoYW4KLSAgICAgICAgLy8gJ2In
IGhhcyBkaWdpdHMsIHRoZW4gdGhlIGJpZ2l0LWxlbmd0aCBvZiAnYScrJ2InIG11c3QgYmUgZXF1
YWwgdG8gdGhlIG9uZQotICAgICAgICAvLyBvZiAnYScuCi0gICAgICAgIGlmIChhLmV4cG9uZW50
XyA+PSBiLkJpZ2l0TGVuZ3RoKCkgJiYgYS5CaWdpdExlbmd0aCgpIDwgYy5CaWdpdExlbmd0aCgp
KSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IENodW5rIGJvcnJvdyA9IDA7Ci0gICAgICAgIC8vIFN0YXJ0aW5nIGF0IG1pbl9leHBvbmVudCBh
bGwgZGlnaXRzIGFyZSA9PSAwLiBTbyBubyBuZWVkIHRvIGNvbXBhcmUgdGhlbS4KLSAgICAgICAg
aW50IG1pbl9leHBvbmVudCA9IE1pbihNaW4oYS5leHBvbmVudF8sIGIuZXhwb25lbnRfKSwgYy5l
eHBvbmVudF8pOwotICAgICAgICBmb3IgKGludCBpID0gYy5CaWdpdExlbmd0aCgpIC0gMTsgaSA+
PSBtaW5fZXhwb25lbnQ7IC0taSkgewotICAgICAgICAgICAgQ2h1bmsgY2h1bmtfYSA9IGEuQmln
aXRBdChpKTsKLSAgICAgICAgICAgIENodW5rIGNodW5rX2IgPSBiLkJpZ2l0QXQoaSk7Ci0gICAg
ICAgICAgICBDaHVuayBjaHVua19jID0gYy5CaWdpdEF0KGkpOwotICAgICAgICAgICAgQ2h1bmsg
c3VtID0gY2h1bmtfYSArIGNodW5rX2I7Ci0gICAgICAgICAgICBpZiAoc3VtID4gY2h1bmtfYyAr
IGJvcnJvdykgewotICAgICAgICAgICAgICAgIHJldHVybiArMTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgYm9ycm93ID0gY2h1bmtfYyArIGJvcnJvdyAtIHN1bTsKLSAg
ICAgICAgICAgICAgICBpZiAoYm9ycm93ID4gMSkgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAg
IGJvcnJvdyA8PD0ga0JpZ2l0U2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBpZiAoYm9ycm93ID09IDApIHJldHVybiAwOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQot
ICAgIAotICAgIAotICAgIHZvaWQgQmlnbnVtOjpDbGFtcCgpIHsKLSAgICAgICAgd2hpbGUgKHVz
ZWRfZGlnaXRzXyA+IDAgJiYgYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSA9PSAwKSB7Ci0gICAg
ICAgICAgICB1c2VkX2RpZ2l0c18tLTsKLSAgICAgICAgfQotICAgICAgICBpZiAodXNlZF9kaWdp
dHNfID09IDApIHsKLSAgICAgICAgICAgIC8vIFplcm8uCi0gICAgICAgICAgICBleHBvbmVudF8g
PSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIAotICAgIGJvb2wgQmlnbnVtOjpJc0Ns
YW1wZWQoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiB1c2VkX2RpZ2l0c18gPT0gMCB8fCBiaWdp
dHNfW3VzZWRfZGlnaXRzXyAtIDFdICE9IDA7Ci0gICAgfQotICAgIAotICAgIAotICAgIHZvaWQg
QmlnbnVtOjpaZXJvKCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRz
XzsgKytpKSB7Ci0gICAgICAgICAgICBiaWdpdHNfW2ldID0gMDsKLSAgICAgICAgfQotICAgICAg
ICB1c2VkX2RpZ2l0c18gPSAwOwotICAgICAgICBleHBvbmVudF8gPSAwOwotICAgIH0KLSAgICAK
LSAgICAKLSAgICB2b2lkIEJpZ251bTo6QWxpZ24oY29uc3QgQmlnbnVtJiBvdGhlcikgewotICAg
ICAgICBpZiAoZXhwb25lbnRfID4gb3RoZXIuZXhwb25lbnRfKSB7Ci0gICAgICAgICAgICAvLyBJ
ZiAiWCIgcmVwcmVzZW50cyBhICJoaWRkZW4iIGRpZ2l0IChieSB0aGUgZXhwb25lbnQpIHRoZW4g
d2UgYXJlIGluIHRoZQotICAgICAgICAgICAgLy8gZm9sbG93aW5nIGNhc2UgKGEgPT0gdGhpcywg
YiA9PSBvdGhlcik6Ci0gICAgICAgICAgICAvLyBhOiAgYWFhYWFhWFhYWCAgIG9yIGE6ICAgYWFh
YWFYWFgKLSAgICAgICAgICAgIC8vIGI6ICAgICBiYmJiYmJYICAgICAgYjogYmJiYmJiYmJYWAot
ICAgICAgICAgICAgLy8gV2UgcmVwbGFjZSBzb21lIG9mIHRoZSBoaWRkZW4gZGlnaXRzIChYKSBv
ZiBhIHdpdGggMCBkaWdpdHMuCi0gICAgICAgICAgICAvLyBhOiAgYWFhYWFhMDAwWCAgIG9yIGE6
ICAgYWFhYWEwWFgKLSAgICAgICAgICAgIGludCB6ZXJvX2RpZ2l0cyA9IGV4cG9uZW50XyAtIG90
aGVyLmV4cG9uZW50XzsKLSAgICAgICAgICAgIEVuc3VyZUNhcGFjaXR5KHVzZWRfZGlnaXRzXyAr
IHplcm9fZGlnaXRzKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSB1c2VkX2RpZ2l0c18gLSAx
OyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgICAgIGJpZ2l0c19baSArIHplcm9fZGlnaXRz
XSA9IGJpZ2l0c19baV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHplcm9fZGlnaXRzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBiaWdpdHNfW2ldID0g
MDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVzZWRfZGlnaXRzXyArPSB6ZXJvX2RpZ2l0
czsKLSAgICAgICAgICAgIGV4cG9uZW50XyAtPSB6ZXJvX2RpZ2l0czsKLSAgICAgICAgICAgIEFT
U0VSVCh1c2VkX2RpZ2l0c18gPj0gMCk7Ci0gICAgICAgICAgICBBU1NFUlQoZXhwb25lbnRfID49
IDApOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIAotICAgIHZvaWQgQmlnbnVtOjpCaWdp
dHNTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCkgewotICAgICAgICBBU1NFUlQoc2hpZnRfYW1v
dW50IDwga0JpZ2l0U2l6ZSk7Ci0gICAgICAgIEFTU0VSVChzaGlmdF9hbW91bnQgPj0gMCk7Ci0g
ICAgICAgIENodW5rIGNhcnJ5ID0gMDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2Vk
X2RpZ2l0c187ICsraSkgewotICAgICAgICAgICAgQ2h1bmsgbmV3X2NhcnJ5ID0gYmlnaXRzX1tp
XSA+PiAoa0JpZ2l0U2l6ZSAtIHNoaWZ0X2Ftb3VudCk7Ci0gICAgICAgICAgICBiaWdpdHNfW2ld
ID0gKChiaWdpdHNfW2ldIDw8IHNoaWZ0X2Ftb3VudCkgKyBjYXJyeSkgJiBrQmlnaXRNYXNrOwot
ICAgICAgICAgICAgY2FycnkgPSBuZXdfY2Fycnk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNh
cnJ5ICE9IDApIHsKLSAgICAgICAgICAgIGJpZ2l0c19bdXNlZF9kaWdpdHNfXSA9IGNhcnJ5Owot
ICAgICAgICAgICAgdXNlZF9kaWdpdHNfKys7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
Ci0gICAgdm9pZCBCaWdudW06OlN1YnRyYWN0VGltZXMoY29uc3QgQmlnbnVtJiBvdGhlciwgaW50
IGZhY3RvcikgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgQmlnbnVtIGEsIGI7Ci0gICAgICAg
IGEuQXNzaWduQmlnbnVtKCp0aGlzKTsKLSAgICAgICAgYi5Bc3NpZ25CaWdudW0ob3RoZXIpOwot
ICAgICAgICBiLk11bHRpcGx5QnlVSW50MzIoZmFjdG9yKTsKLSAgICAgICAgYS5TdWJ0cmFjdEJp
Z251bShiKTsKLSNlbmRpZgotICAgICAgICBBU1NFUlQoZXhwb25lbnRfIDw9IG90aGVyLmV4cG9u
ZW50Xyk7Ci0gICAgICAgIGlmIChmYWN0b3IgPCAzKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGZhY3RvcjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgU3VidHJhY3RCaWdudW0o
b3RoZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIENodW5rIGJvcnJvdyA9IDA7Ci0gICAgICAgIGludCBleHBvbmVudF9kaWZmID0gb3Ro
ZXIuZXhwb25lbnRfIC0gZXhwb25lbnRfOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG90
aGVyLnVzZWRfZGlnaXRzXzsgKytpKSB7Ci0gICAgICAgICAgICBEb3VibGVDaHVuayBwcm9kdWN0
ID0gc3RhdGljX2Nhc3Q8RG91YmxlQ2h1bms+KGZhY3RvcikgKiBvdGhlci5iaWdpdHNfW2ldOwot
ICAgICAgICAgICAgRG91YmxlQ2h1bmsgcmVtb3ZlID0gYm9ycm93ICsgcHJvZHVjdDsKLSAgICAg
ICAgICAgIENodW5rIGRpZmZlcmVuY2UgPQotICAgICAgICAgICAgICAgIGJpZ2l0c19baSArIGV4
cG9uZW50X2RpZmZdIC0gc3RhdGljX2Nhc3Q8Q2h1bms+KHJlbW92ZSAmIGtCaWdpdE1hc2spOwot
ICAgICAgICAgICAgYmlnaXRzX1tpICsgZXhwb25lbnRfZGlmZl0gPSBkaWZmZXJlbmNlICYga0Jp
Z2l0TWFzazsKLSAgICAgICAgICAgIGJvcnJvdyA9IHN0YXRpY19jYXN0PENodW5rPigoZGlmZmVy
ZW5jZSA+PiAoa0NodW5rU2l6ZSAtIDEpKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHJlbW92ZSA+PiBrQmlnaXRTaXplKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IG90aGVyLnVzZWRfZGlnaXRzXyArIGV4cG9uZW50X2RpZmY7IGkgPCB1c2Vk
X2RpZ2l0c187ICsraSkgewotICAgICAgICAgICAgaWYgKGJvcnJvdyA9PSAwKSByZXR1cm47Ci0g
ICAgICAgICAgICBDaHVuayBkaWZmZXJlbmNlID0gYmlnaXRzX1tpXSAtIGJvcnJvdzsKLSAgICAg
ICAgICAgIGJpZ2l0c19baV0gPSBkaWZmZXJlbmNlICYga0JpZ2l0TWFzazsKLSAgICAgICAgICAg
IGJvcnJvdyA9IGRpZmZlcmVuY2UgPj4gKGtDaHVua1NpemUgLSAxKTsKLSAgICAgICAgfQotICAg
ICAgICBDbGFtcCgpOwotICAgICAgICBBU1NFUlQoQmlnbnVtOjpFcXVhbChhLCAqdGhpcykpOwot
ICAgIH0KLSAgICAKLSAgICAKLX0gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgotCi19
IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFy
a2VyL3d0Zi9kdG9hL2JpZ251bS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3Rm
L2R0b2EvYmlnbnVtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZTZhNDkyOTIz
YWU5YzMzMjQ0OTNiMThhNjllNWViODQ5ZGY5MTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0
b2EvYmlnbnVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLy8gQ29weXJpZ2h0
IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0vLyAg
ICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLS8vICAg
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0jaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0JJR05VTV9IXwotI2Rl
ZmluZSBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fSF8KLQotI2luY2x1ZGUgInV0aWxzLmgiCi0K
LW5hbWVzcGFjZSBXVEYgewotCi1uYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24gewotICAgIAot
ICAgIGNsYXNzIEJpZ251bSB7Ci0gICAgcHVibGljOgotICAgICAgICAvLyAzNTg0ID0gMTI4ICog
MjguIFdlIGNhbiByZXByZXNlbnQgMl4zNTg0ID4gMTBeMTAwMCBhY2N1cmF0ZWx5LgotICAgICAg
ICAvLyBUaGlzIGJpZ251bSBjYW4gZW5jb2RlIG11Y2ggYmlnZ2VyIG51bWJlcnMsIHNpbmNlIGl0
IGNvbnRhaW5zIGFuCi0gICAgICAgIC8vIGV4cG9uZW50LgotICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGtNYXhTaWduaWZpY2FudEJpdHMgPSAzNTg0OwotICAgICAgICAKLSAgICAgICAgQmlnbnVt
KCk7Ci0gICAgICAgIHZvaWQgQXNzaWduVUludDE2KHVpbnQxNl90IHZhbHVlKTsKLSAgICAgICAg
dm9pZCBBc3NpZ25VSW50NjQodWludDY0X3QgdmFsdWUpOwotICAgICAgICB2b2lkIEFzc2lnbkJp
Z251bShjb25zdCBCaWdudW0mIG90aGVyKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgQXNzaWdu
RGVjaW1hbFN0cmluZyhCdWZmZXJSZWZlcmVuY2U8Y29uc3QgY2hhcj4gdmFsdWUpOwotICAgICAg
ICB2b2lkIEFzc2lnbkhleFN0cmluZyhCdWZmZXJSZWZlcmVuY2U8Y29uc3QgY2hhcj4gdmFsdWUp
OwotICAgICAgICAKLSAgICAgICAgdm9pZCBBc3NpZ25Qb3dlclVJbnQxNih1aW50MTZfdCBiYXNl
LCBpbnQgZXhwb25lbnQpOwotICAgICAgICAKLSAgICAgICAgdm9pZCBBZGRVSW50MTYodWludDE2
X3Qgb3BlcmFuZCk7Ci0gICAgICAgIHZvaWQgQWRkVUludDY0KHVpbnQ2NF90IG9wZXJhbmQpOwot
ICAgICAgICB2b2lkIEFkZEJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKTsKLSAgICAgICAgLy8g
UHJlY29uZGl0aW9uOiB0aGlzID49IG90aGVyLgotICAgICAgICB2b2lkIFN1YnRyYWN0QmlnbnVt
KGNvbnN0IEJpZ251bSYgb3RoZXIpOwotICAgICAgICAKLSAgICAgICAgdm9pZCBTcXVhcmUoKTsK
LSAgICAgICAgdm9pZCBTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCk7Ci0gICAgICAgIHZvaWQg
TXVsdGlwbHlCeVVJbnQzMih1aW50MzJfdCBmYWN0b3IpOwotICAgICAgICB2b2lkIE11bHRpcGx5
QnlVSW50NjQodWludDY0X3QgZmFjdG9yKTsKLSAgICAgICAgdm9pZCBNdWx0aXBseUJ5UG93ZXJP
ZlRlbihpbnQgZXhwb25lbnQpOwotICAgICAgICB2b2lkIFRpbWVzMTAoKSB7IHJldHVybiBNdWx0
aXBseUJ5VUludDMyKDEwKTsgfQotICAgICAgICAvLyBQc2V1ZG9jb2RlOgotICAgICAgICAvLyAg
aW50IHJlc3VsdCA9IHRoaXMgLyBvdGhlcjsKLSAgICAgICAgLy8gIHRoaXMgPSB0aGlzICUgb3Ro
ZXI7Ci0gICAgICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgaW4gTyh0
aGlzL290aGVyKS4KLSAgICAgICAgdWludDE2X3QgRGl2aWRlTW9kdWxvSW50QmlnbnVtKGNvbnN0
IEJpZ251bSYgb3RoZXIpOwotICAgICAgICAKLSAgICAgICAgYm9vbCBUb0hleFN0cmluZyhjaGFy
KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICBzdGF0
aWMgaW50IENvbXBhcmUoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpOwotICAgICAg
ICBzdGF0aWMgYm9vbCBFcXVhbChjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYikgewot
ICAgICAgICAgICAgcmV0dXJuIENvbXBhcmUoYSwgYikgPT0gMDsKLSAgICAgICAgfQotICAgICAg
ICBzdGF0aWMgYm9vbCBMZXNzRXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIp
IHsKLSAgICAgICAgICAgIHJldHVybiBDb21wYXJlKGEsIGIpIDw9IDA7Ci0gICAgICAgIH0KLSAg
ICAgICAgc3RhdGljIGJvb2wgTGVzcyhjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYikg
ewotICAgICAgICAgICAgcmV0dXJuIENvbXBhcmUoYSwgYikgPCAwOwotICAgICAgICB9Ci0gICAg
ICAgIC8vIFJldHVybnMgQ29tcGFyZShhICsgYiwgYyk7Ci0gICAgICAgIHN0YXRpYyBpbnQgUGx1
c0NvbXBhcmUoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYg
Yyk7Ci0gICAgICAgIC8vIFJldHVybnMgYSArIGIgPT0gYwotICAgICAgICBzdGF0aWMgYm9vbCBQ
bHVzRXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYg
YykgewotICAgICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGEsIGIsIGMpID09IDA7Ci0gICAg
ICAgIH0KLSAgICAgICAgLy8gUmV0dXJucyBhICsgYiA8PSBjCi0gICAgICAgIHN0YXRpYyBib29s
IFBsdXNMZXNzRXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJp
Z251bSYgYykgewotICAgICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGEsIGIsIGMpIDw9IDA7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gUmV0dXJucyBhICsgYiA8IGMKLSAgICAgICAgc3RhdGlj
IGJvb2wgUGx1c0xlc3MoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJp
Z251bSYgYykgewotICAgICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGEsIGIsIGMpIDwgMDsK
LSAgICAgICAgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgdWludDMyX3QgQ2h1bms7
Ci0gICAgICAgIHR5cGVkZWYgdWludDY0X3QgRG91YmxlQ2h1bms7Ci0gICAgICAgIAotICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGtDaHVua1NpemUgPSBzaXplb2YoQ2h1bmspICogODsKLSAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBrRG91YmxlQ2h1bmtTaXplID0gc2l6ZW9mKERvdWJsZUNodW5r
KSAqIDg7Ci0gICAgICAgIC8vIFdpdGggYmlnaXQgc2l6ZSBvZiAyOCB3ZSBsb29zZSBzb21lIGJp
dHMsIGJ1dCBhIGRvdWJsZSBzdGlsbCBmaXRzIGVhc2lseQotICAgICAgICAvLyBpbnRvIHR3byBj
aHVua3MsIGFuZCBtb3JlIGltcG9ydGFudGx5IHdlIGNhbiB1c2UgdGhlIENvbWJhIG11bHRpcGxp
Y2F0aW9uLgotICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtCaWdpdFNpemUgPSAyODsKLSAgICAg
ICAgc3RhdGljIGNvbnN0IENodW5rIGtCaWdpdE1hc2sgPSAoMSA8PCBrQmlnaXRTaXplKSAtIDE7
Ci0gICAgICAgIC8vIEV2ZXJ5IGluc3RhbmNlIGFsbG9jYXRlcyBrQmlnaXRMZW5ndGggY2h1bmtz
IG9uIHRoZSBzdGFjay4gQmlnbnVtcyBjYW5ub3QKLSAgICAgICAgLy8gZ3Jvdy4gVGhlcmUgYXJl
IG5vIGNoZWNrcyBpZiB0aGUgc3RhY2stYWxsb2NhdGVkIHNwYWNlIGlzIHN1ZmZpY2llbnQuCi0g
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0JpZ2l0Q2FwYWNpdHkgPSBrTWF4U2lnbmlmaWNhbnRC
aXRzIC8ga0JpZ2l0U2l6ZTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgRW5zdXJlQ2FwYWNpdHko
aW50IHNpemUpIHsKLSAgICAgICAgICAgIGlmIChzaXplID4ga0JpZ2l0Q2FwYWNpdHkpIHsKLSAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIHZvaWQgQWxpZ24oY29uc3QgQmlnbnVtJiBvdGhlcik7Ci0gICAgICAgIHZvaWQgQ2xh
bXAoKTsKLSAgICAgICAgYm9vbCBJc0NsYW1wZWQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBaZXJv
KCk7Ci0gICAgICAgIC8vIFJlcXVpcmVzIHRoaXMgdG8gaGF2ZSBlbm91Z2ggY2FwYWNpdHkgKG5v
IHRlc3RzIGRvbmUpLgotICAgICAgICAvLyBVcGRhdGVzIHVzZWRfZGlnaXRzXyBpZiBuZWNlc3Nh
cnkuCi0gICAgICAgIC8vIHNoaWZ0X2Ftb3VudCBtdXN0IGJlIDwga0JpZ2l0U2l6ZS4KLSAgICAg
ICAgdm9pZCBCaWdpdHNTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCk7Ci0gICAgICAgIC8vIEJp
Z2l0TGVuZ3RoIGluY2x1ZGVzIHRoZSAiaGlkZGVuIiBkaWdpdHMgZW5jb2RlZCBpbiB0aGUgZXhw
b25lbnQuCi0gICAgICAgIGludCBCaWdpdExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHVzZWRfZGln
aXRzXyArIGV4cG9uZW50XzsgfQotICAgICAgICBDaHVuayBCaWdpdEF0KGludCBpbmRleCkgY29u
c3Q7Ci0gICAgICAgIHZvaWQgU3VidHJhY3RUaW1lcyhjb25zdCBCaWdudW0mIG90aGVyLCBpbnQg
ZmFjdG9yKTsKLSAgICAgICAgCi0gICAgICAgIENodW5rIGJpZ2l0c19idWZmZXJfW2tCaWdpdENh
cGFjaXR5XTsKLSAgICAgICAgLy8gQSB2ZWN0b3IgYmFja2VkIGJ5IGJpZ2l0c19idWZmZXJfLiBU
aGlzIHdheSBhY2Nlc3NlcyB0byB0aGUgYXJyYXkgYXJlCi0gICAgICAgIC8vIGNoZWNrZWQgZm9y
IG91dC1vZi1ib3VuZHMgZXJyb3JzLgotICAgICAgICBCdWZmZXJSZWZlcmVuY2U8Q2h1bms+IGJp
Z2l0c187Ci0gICAgICAgIGludCB1c2VkX2RpZ2l0c187Ci0gICAgICAgIC8vIFRoZSBCaWdudW0n
cyB2YWx1ZSBlcXVhbHMgdmFsdWUoYmlnaXRzXykgKiAyXihleHBvbmVudF8gKiBrQmlnaXRTaXpl
KS4KLSAgICAgICAgaW50IGV4cG9uZW50XzsKLSAgICAgICAgCi0gICAgICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihCaWdudW0pOwotICAgIH07Ci0gICAgCi19ICAvLyBuYW1lc3BhY2UgZG91
YmxlX2NvbnZlcnNpb24KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAgLy8gRE9VQkxF
X0NPTlZFUlNJT05fQklHTlVNX0hfCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggN2Y4NjI0NWExMTRhZDgwNGFiNGU3MTY5ZTQxZGY1ZTE1NzZiM2Q4NS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjCisrKyAvZGV2L251bGwKQEAg
LTEsMTgwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDA2LTIwMDggdGhlIFY4IHByb2plY3QgYXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0vLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLS8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4K
LSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJ1dGlscy5oIgotI2luY2x1ZGUgImNhY2hl
ZC1wb3dlcnMuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBkb3VibGVfY29udmVy
c2lvbiB7Ci0gICAgCi0gICAgc3RydWN0IENhY2hlZFBvd2VyIHsKLSAgICAgICAgdWludDY0X3Qg
c2lnbmlmaWNhbmQ7Ci0gICAgICAgIGludDE2X3QgYmluYXJ5X2V4cG9uZW50OwotICAgICAgICBp
bnQxNl90IGRlY2ltYWxfZXhwb25lbnQ7Ci0gICAgfTsKLSAgICAKLSAgICBjb25zdGV4cHIgc3Rh
dGljIGNvbnN0IGRvdWJsZSBrRF8xX0xPRzJfMTAgPSAwLjMwMTAyOTk5NTY2Mzk4MTE0OyAgLy8g
IDEgLyBsZygxMCkKLSAgICBjb25zdGV4cHIgc3RhdGljIGNvbnN0IENhY2hlZFBvd2VyIGtDYWNo
ZWRQb3dlcnNbXSA9IHsKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZmE4ZmQ1YTAsIDA4MWMw
Mjg4KSwgLTEyMjAsIC0zNDh9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiYWFlZTE3Ziwg
YTIzZWJmNzYpLCAtMTE5MywgLTM0MH0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhiMTZm
YjIwLCAzMDU1YWM3NiksIC0xMTY2LCAtMzMyfSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
Y2Y0Mjg5NGEsIDVkY2UzNWVhKSwgLTExNDAsIC0zMjR9LAotICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHg5YTZiYjBhYSwgNTU2NTNiMmQpLCAtMTExMywgLTMxNn0sCi0gICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweGU2MWFjZjAzLCAzZDFhNDVkZiksIC0xMDg3LCAtMzA4fSwKLSAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4YWI3MGZlMTcsIGM3OWFjNmNhKSwgLTEwNjAsIC0zMDB9LAotICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHhmZjc3YjFmYywgYmViY2RjNGYpLCAtMTAzNCwgLTI5Mn0sCi0g
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGJlNTY5MWVmLCA0MTZiZDYwYyksIC0xMDA3LCAtMjg0
fSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGRkMDFmYWQsIDkwN2ZmYzNjKSwgLTk4MCwg
LTI3Nn0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQzNTE1YzI4LCAzMTU1OWE4MyksIC05
NTQsIC0yNjh9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5ZDcxYWM4ZiwgYWRhNmM5YjUp
LCAtOTI3LCAtMjYwfSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZWE5YzIyNzcsIDIzZWU4
YmNiKSwgLTkwMSwgLTI1Mn0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFlY2M0OTkxLCA0
MDc4NTM2ZCksIC04NzQsIC0yNDR9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4MjNjMTI3
OSwgNWRiNmNlNTcpLCAtODQ3LCAtMjM2fSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzIx
MDk0MzYsIDRkZmI1NjM3KSwgLTgyMSwgLTIyOH0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eDkwOTZlYTZmLCAzODQ4OTg0ZiksIC03OTQsIC0yMjB9LAotICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHhkNzc0ODVjYiwgMjU4MjNhYzcpLCAtNzY4LCAtMjEyfSwKLSAgICAgICAge1VJTlQ2NF8y
UEFSVF9DKDB4YTA4NmNmY2QsIDk3YmY5N2Y0KSwgLTc0MSwgLTIwNH0sCi0gICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweGVmMzQwYTk4LCAxNzJhYWNlNSksIC03MTUsIC0xOTZ9LAotICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhiMjM4NjdmYiwgMmEzNWIyOGUpLCAtNjg4LCAtMTg4fSwKLSAgICAg
ICAge1VJTlQ2NF8yUEFSVF9DKDB4ODRjOGQ0ZGYsIGQyYzYzZjNiKSwgLTY2MSwgLTE4MH0sCi0g
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGM1ZGQ0NDI3LCAxYWQzY2RiYSksIC02MzUsIC0xNzJ9
LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5MzZiOWZjZSwgYmIyNWM5OTYpLCAtNjA4LCAt
MTY0fSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZGJhYzZjMjQsIDdkNjJhNTg0KSwgLTU4
MiwgLTE1Nn0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGEzYWI2NjU4LCAwZDVmZGFmNiks
IC01NTUsIC0xNDh9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmM2UyZjg5MywgZGVjM2Yx
MjYpLCAtNTI5LCAtMTQwfSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YjViNWFkYTgsIGFh
ZmY4MGI4KSwgLTUwMiwgLTEzMn0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDg3NjI1ZjA1
LCA2YzdjNGE4YiksIC00NzUsIC0xMjR9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjOWJj
ZmY2MCwgMzRjMTMwNTMpLCAtNDQ5LCAtMTE2fSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
OTY0ZTg1OGMsIDkxYmEyNjU1KSwgLTQyMiwgLTEwOH0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweGRmZjk3NzI0LCA3MDI5N2ViZCksIC0zOTYsIC0xMDB9LAotICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhhNmRmYmQ5ZiwgYjhlNWI4OGYpLCAtMzY5LCAtOTJ9LAotICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHhmOGE5NWZjZiwgODg3NDdkOTQpLCAtMzQzLCAtODR9LAotICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHhiOTQ0NzA5MywgOGZhODliY2YpLCAtMzE2LCAtNzZ9LAotICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHg4YTA4ZjBmOCwgYmYwZjE1NmIpLCAtMjg5LCAtNjh9LAotICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHhjZGIwMjU1NSwgNjUzMTMxYjYpLCAtMjYzLCAtNjB9LAotICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5OTNmZTJjNiwgZDA3YjdmYWMpLCAtMjM2LCAtNTJ9LAot
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlNDVjMTBjNCwgMmEyYjNiMDYpLCAtMjEwLCAtNDR9
LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhYTI0MjQ5OSwgNjk3MzkyZDMpLCAtMTgzLCAt
MzZ9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmZDg3YjVmMiwgODMwMGNhMGUpLCAtMTU3
LCAtMjh9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiY2U1MDg2NCwgOTIxMTFhZWIpLCAt
MTMwLCAtMjB9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4Y2JjY2MwOSwgNmY1MDg4Y2Mp
LCAtMTAzLCAtMTJ9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkMWI3MTc1OCwgZTIxOTY1
MmMpLCAtNzcsIC00fSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OWM0MDAwMDAsIDAwMDAw
MDAwKSwgLTUwLCA0fSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZThkNGE1MTAsIDAwMDAw
MDAwKSwgLTI0LCAxMn0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFkNzhlYmM1LCBhYzYy
MDAwMCksIDMsIDIwfSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODEzZjM5NzgsIGY4OTQw
OTg0KSwgMzAsIDI4fSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzA5N2NlN2IsIGM5MDcx
NWIzKSwgNTYsIDM2fSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGY3ZTMyY2UsIDdiZWE1
YzcwKSwgODMsIDQ0fSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZDVkMjM4YTQsIGFiZTk4
MDY4KSwgMTA5LCA1Mn0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDlmNGYyNzI2LCAxNzlh
MjI0NSksIDEzNiwgNjB9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlZDYzYTIzMSwgZDRj
NGZiMjcpLCAxNjIsIDY4fSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YjBkZTY1MzgsIDhj
YzhhZGE4KSwgMTg5LCA3Nn0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDgzYzcwODhlLCAx
YWFiNjVkYiksIDIxNiwgODR9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjNDVkMWRmOSwg
NDI3MTFkOWEpLCAyNDIsIDkyfSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OTI0ZDY5MmMs
IGE2MWJlNzU4KSwgMjY5LCAxMDB9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkYTAxZWU2
NCwgMWE3MDhkZWEpLCAyOTUsIDEwOH0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGEyNmRh
Mzk5LCA5YWVmNzc0YSksIDMyMiwgMTE2fSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZjIw
OTc4N2IsIGI0N2Q2Yjg1KSwgMzQ4LCAxMjR9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhi
NDU0ZTRhMSwgNzlkZDE4NzcpLCAzNzUsIDEzMn0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eDg2NWI4NjkyLCA1YjliYzVjMiksIDQwMiwgMTQwfSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4YzgzNTUzYzUsIGM4OTY1ZDNkKSwgNDI4LCAxNDh9LAotICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHg5NTJhYjQ1YywgZmE5N2EwYjMpLCA0NTUsIDE1Nn0sCi0gICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGRlNDY5ZmJkLCA5OWEwNWZlMyksIDQ4MSwgMTY0fSwKLSAgICAgICAge1VJTlQ2NF8y
UEFSVF9DKDB4YTU5YmMyMzQsIGRiMzk4YzI1KSwgNTA4LCAxNzJ9LAotICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHhmNmM2OWE3MiwgYTM5ODlmNWMpLCA1MzQsIDE4MH0sCi0gICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweGI3ZGNiZjUzLCA1NGU5YmVjZSksIDU2MSwgMTg4fSwKLSAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4ODhmY2YzMTcsIGYyMjI0MWUyKSwgNTg4LCAxOTZ9LAotICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhjYzIwY2U5YiwgZDM1Yzc4YTUpLCA2MTQsIDIwNH0sCi0gICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweDk4MTY1YWYzLCA3YjIxNTNkZiksIDY0MSwgMjEyfSwKLSAgICAg
ICAge1VJTlQ2NF8yUEFSVF9DKDB4ZTJhMGI1ZGMsIDk3MWYzMDNhKSwgNjY3LCAyMjB9LAotICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhOGQ5ZDE1MywgNWNlM2IzOTYpLCA2OTQsIDIyOH0sCi0g
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGZiOWI3Y2Q5LCBhNGE3NDQzYyksIDcyMCwgMjM2fSwK
LSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YmI3NjRjNGMsIGE3YTQ0NDEwKSwgNzQ3LCAyNDR9
LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4YmFiOGVlZiwgYjY0MDljMWEpLCA3NzQsIDI1
Mn0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQwMWZlZjEwLCBhNjU3ODQyYyksIDgwMCwg
MjYwfSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OWIxMGE0ZTUsIGU5OTEzMTI5KSwgODI3
LCAyNjh9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlNzEwOWJmYiwgYTE5YzBjOWQpLCA4
NTMsIDI3Nn0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFjMjgyMGQ5LCA2MjNiZjQyOSks
IDg4MCwgMjg0fSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODA0NDRiNWUsIDdhYTdjZjg1
KSwgOTA3LCAyOTJ9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiZjIxZTQ0MCwgMDNhY2Rk
MmQpLCA5MzMsIDMwMH0sCi0gICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhlNjc5YzJmLCA1ZTQ0
ZmY4ZiksIDk2MCwgMzA4fSwKLSAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZDQzMzE3OWQsIDlj
OGNiODQxKSwgOTg2LCAzMTZ9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5ZTE5ZGI5Miwg
YjRlMzFiYTkpLCAxMDEzLCAzMjR9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlYjk2YmY2
ZSwgYmFkZjc3ZDkpLCAxMDM5LCAzMzJ9LAotICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhZjg3
MDIzYiwgOWJmMGVlNmIpLCAxMDY2LCAzNDB9LAotICAgIH07Ci0gICAgY29uc3RleHByIHN0YXRp
YyBjb25zdCBpbnQga0NhY2hlZFBvd2Vyc0xlbmd0aCB7IEFSUkFZX1NJWkUoa0NhY2hlZFBvd2Vy
cykgfTsKLSAgICBjb25zdGV4cHIgc3RhdGljIGNvbnN0IGludCBrQ2FjaGVkUG93ZXJzT2Zmc2V0
IHsgLWtDYWNoZWRQb3dlcnNbMF0uZGVjaW1hbF9leHBvbmVudCB9OwotICAgIAotICAgIGNvbnN0
IGludCBQb3dlcnNPZlRlbkNhY2hlOjprRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UgeyBrQ2FjaGVk
UG93ZXJzWzFdLmRlY2ltYWxfZXhwb25lbnQgLSBrQ2FjaGVkUG93ZXJzWzBdLmRlY2ltYWxfZXhw
b25lbnQgfTsKLSAgICBjb25zdCBpbnQgUG93ZXJzT2ZUZW5DYWNoZTo6a01pbkRlY2ltYWxFeHBv
bmVudCB7IGtDYWNoZWRQb3dlcnNbMF0uZGVjaW1hbF9leHBvbmVudCB9OwotICAgIGNvbnN0IGlu
dCBQb3dlcnNPZlRlbkNhY2hlOjprTWF4RGVjaW1hbEV4cG9uZW50IHsga0NhY2hlZFBvd2Vyc1tr
Q2FjaGVkUG93ZXJzTGVuZ3RoIC0gMV0uZGVjaW1hbF9leHBvbmVudCB9OwotICAgIAotICAgIHZv
aWQgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBvbmVudFJhbmdl
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBtaW5fZXhwb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF9leHBvbmVudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEaXlGcCogcG93ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX2V4cG9uZW50KSB7Ci0gICAg
ICAgIFVOVVNFRF9QQVJBTShtYXhfZXhwb25lbnQpOwotICAgICAgICBpbnQga1EgPSBEaXlGcDo6
a1NpZ25pZmljYW5kU2l6ZTsKLSAgICAgICAgZG91YmxlIGsgPSBjZWlsKChtaW5fZXhwb25lbnQg
KyBrUSAtIDEpICoga0RfMV9MT0cyXzEwKTsKLSAgICAgICAgaW50IGZvbyA9IGtDYWNoZWRQb3dl
cnNPZmZzZXQ7Ci0gICAgICAgIGludCBpbmRleCA9Ci0gICAgICAgIChmb28gKyBzdGF0aWNfY2Fz
dDxpbnQ+KGspIC0gMSkgLyBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UgKyAxOwotICAgICAgICBB
U1NFUlQoMCA8PSBpbmRleCAmJiBpbmRleCA8IGtDYWNoZWRQb3dlcnNMZW5ndGgpOwotICAgICAg
ICBDYWNoZWRQb3dlciBjYWNoZWRfcG93ZXIgPSBrQ2FjaGVkUG93ZXJzW2luZGV4XTsKLSAgICAg
ICAgQVNTRVJUKG1pbl9leHBvbmVudCA8PSBjYWNoZWRfcG93ZXIuYmluYXJ5X2V4cG9uZW50KTsK
LSAgICAgICAgQVNTRVJUKGNhY2hlZF9wb3dlci5iaW5hcnlfZXhwb25lbnQgPD0gbWF4X2V4cG9u
ZW50KTsKLSAgICAgICAgKmRlY2ltYWxfZXhwb25lbnQgPSBjYWNoZWRfcG93ZXIuZGVjaW1hbF9l
eHBvbmVudDsKLSAgICAgICAgKnBvd2VyID0gRGl5RnAoY2FjaGVkX3Bvd2VyLnNpZ25pZmljYW5k
LCBjYWNoZWRfcG93ZXIuYmluYXJ5X2V4cG9uZW50KTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAg
dm9pZCBQb3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZvckRlY2ltYWxFeHBvbmVudChp
bnQgcmVxdWVzdGVkX2V4cG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHBvd2VyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBmb3VuZF9l
eHBvbmVudCkgewotICAgICAgICBBU1NFUlQoa01pbkRlY2ltYWxFeHBvbmVudCA8PSByZXF1ZXN0
ZWRfZXhwb25lbnQpOwotICAgICAgICBBU1NFUlQocmVxdWVzdGVkX2V4cG9uZW50IDwga01heERl
Y2ltYWxFeHBvbmVudCArIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7Ci0gICAgICAgIGludCBp
bmRleCA9Ci0gICAgICAgIChyZXF1ZXN0ZWRfZXhwb25lbnQgKyBrQ2FjaGVkUG93ZXJzT2Zmc2V0
KSAvIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZTsKLSAgICAgICAgQ2FjaGVkUG93ZXIgY2FjaGVk
X3Bvd2VyID0ga0NhY2hlZFBvd2Vyc1tpbmRleF07Ci0gICAgICAgICpwb3dlciA9IERpeUZwKGNh
Y2hlZF9wb3dlci5zaWduaWZpY2FuZCwgY2FjaGVkX3Bvd2VyLmJpbmFyeV9leHBvbmVudCk7Ci0g
ICAgICAgICpmb3VuZF9leHBvbmVudCA9IGNhY2hlZF9wb3dlci5kZWNpbWFsX2V4cG9uZW50Owot
ICAgICAgICBBU1NFUlQoKmZvdW5kX2V4cG9uZW50IDw9IHJlcXVlc3RlZF9leHBvbmVudCk7Ci0g
ICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRfZXhwb25lbnQgPCAqZm91bmRfZXhwb25lbnQgKyBrRGVj
aW1hbEV4cG9uZW50RGlzdGFuY2UpOwotICAgIH0KLSAgICAKLX0gIC8vIG5hbWVzcGFjZSBkb3Vi
bGVfY29udmVyc2lvbgotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNGNmNmI2ZTEyNTIxMDg0ZWFlYTAxOWQxNmMwMDc0MDBkOWU3
MTMzMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVj
dCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCi0vLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLS8vICAgICAgIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLS8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0v
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNp
Zm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVEX1BPV0VSU19IXwotI2RlZmluZSBET1VCTEVf
Q09OVkVSU0lPTl9DQUNIRURfUE9XRVJTX0hfCi0KLSNpbmNsdWRlICJkaXktZnAuaCIKLQotbmFt
ZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7Ci0gICAgCi0gICAg
Y2xhc3MgUG93ZXJzT2ZUZW5DYWNoZSB7Ci0gICAgcHVibGljOgotICAgICAgICAKLSAgICAgICAg
Ly8gTm90IGFsbCBwb3dlcnMgb2YgdGVuIGFyZSBjYWNoZWQuIFRoZSBkZWNpbWFsIGV4cG9uZW50
IG9mIHR3byBuZWlnaGJvcmluZwotICAgICAgICAvLyBjYWNoZWQgbnVtYmVycyB3aWxsIGRpZmZl
ciBieSBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UuCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
a0RlY2ltYWxFeHBvbmVudERpc3RhbmNlOwotICAgICAgICAKLSAgICAgICAgc3RhdGljIGNvbnN0
IGludCBrTWluRGVjaW1hbEV4cG9uZW50OwotICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhE
ZWNpbWFsRXhwb25lbnQ7Ci0gICAgICAgIAotICAgICAgICAvLyBSZXR1cm5zIGEgY2FjaGVkIHBv
d2VyLW9mLXRlbiB3aXRoIGEgYmluYXJ5IGV4cG9uZW50IGluIHRoZSByYW5nZQotICAgICAgICAv
LyBbbWluX2V4cG9uZW50OyBtYXhfZXhwb25lbnRdIChib3VuZGFyaWVzIGluY2x1ZGVkKS4KLSAg
ICAgICAgc3RhdGljIHZvaWQgR2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBvbmVudFJhbmdlKGlu
dCBtaW5fZXhwb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbWF4X2V4cG9uZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHBvd2VyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBk
ZWNpbWFsX2V4cG9uZW50KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFJldHVybnMgYSBjYWNoZWQg
cG93ZXIgb2YgdGVuIHggfj0gMTBeayBzdWNoIHRoYXQKLSAgICAgICAgLy8gICBrIDw9IGRlY2lt
YWxfZXhwb25lbnQgPCBrICsga0NhY2hlZFBvd2Vyc0RlY2ltYWxEaXN0YW5jZS4KLSAgICAgICAg
Ly8gVGhlIGdpdmVuIGRlY2ltYWxfZXhwb25lbnQgbXVzdCBzYXRpc2Z5Ci0gICAgICAgIC8vICAg
a01pbkRlY2ltYWxFeHBvbmVudCA8PSByZXF1ZXN0ZWRfZXhwb25lbnQsIGFuZAotICAgICAgICAv
LyAgIHJlcXVlc3RlZF9leHBvbmVudCA8IGtNYXhEZWNpbWFsRXhwb25lbnQgKyBrRGVjaW1hbEV4
cG9uZW50RGlzdGFuY2UuCi0gICAgICAgIHN0YXRpYyB2b2lkIEdldENhY2hlZFBvd2VyRm9yRGVj
aW1hbEV4cG9uZW50KGludCByZXF1ZXN0ZWRfZXhwb25lbnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZwKiBwb3dlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBmb3VuZF9l
eHBvbmVudCk7Ci0gICAgfTsKLSAgICAKLX0gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lv
bgotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9D
QUNIRURfUE9XRVJTX0hfCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvZHRvYS9kaXktZnAuY2MgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
ZHRvYS9kaXktZnAuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMjMzNTk1Zjk4
YmEyNmNjYjQzYWE5NDQ4NzgzN2Q2M2Q1YTc1MjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0
b2EvZGl5LWZwLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLy8gQ29weXJpZ2h0
IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0v
LyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0vLyAg
ICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLS8vICAg
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJkaXktZnAu
aCIKLSNpbmNsdWRlICJ1dGlscy5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLQotbmFtZXNwYWNlIGRv
dWJsZV9jb252ZXJzaW9uIHsKLSAgICAKLSAgICB2b2lkIERpeUZwOjpNdWx0aXBseShjb25zdCBE
aXlGcCYgb3RoZXIpIHsKLSAgICAgICAgLy8gU2ltcGx5ICJlbXVsYXRlcyIgYSAxMjggYml0IG11
bHRpcGxpY2F0aW9uLgotICAgICAgICAvLyBIb3dldmVyOiB0aGUgcmVzdWx0aW5nIG51bWJlciBv
bmx5IGNvbnRhaW5zIDY0IGJpdHMuIFRoZSBsZWFzdAotICAgICAgICAvLyBzaWduaWZpY2FudCA2
NCBiaXRzIGFyZSBvbmx5IHVzZWQgZm9yIHJvdW5kaW5nIHRoZSBtb3N0IHNpZ25pZmljYW50IDY0
Ci0gICAgICAgIC8vIGJpdHMuCi0gICAgICAgIGNvbnN0IHVpbnQ2NF90IGtNMzIgPSAweEZGRkZG
RkZGVTsKLSAgICAgICAgdWludDY0X3QgYSA9IGZfID4+IDMyOwotICAgICAgICB1aW50NjRfdCBi
ID0gZl8gJiBrTTMyOwotICAgICAgICB1aW50NjRfdCBjID0gb3RoZXIuZl8gPj4gMzI7Ci0gICAg
ICAgIHVpbnQ2NF90IGQgPSBvdGhlci5mXyAmIGtNMzI7Ci0gICAgICAgIHVpbnQ2NF90IGFjID0g
YSAqIGM7Ci0gICAgICAgIHVpbnQ2NF90IGJjID0gYiAqIGM7Ci0gICAgICAgIHVpbnQ2NF90IGFk
ID0gYSAqIGQ7Ci0gICAgICAgIHVpbnQ2NF90IGJkID0gYiAqIGQ7Ci0gICAgICAgIHVpbnQ2NF90
IHRtcCA9IChiZCA+PiAzMikgKyAoYWQgJiBrTTMyKSArIChiYyAmIGtNMzIpOwotICAgICAgICAv
LyBCeSBhZGRpbmcgMVUgPDwgMzEgdG8gdG1wIHdlIHJvdW5kIHRoZSBmaW5hbCByZXN1bHQuCi0g
ICAgICAgIC8vIEhhbGZ3YXkgY2FzZXMgd2lsbCBiZSByb3VuZCB1cC4KLSAgICAgICAgdG1wICs9
IDFVIDw8IDMxOwotICAgICAgICB1aW50NjRfdCByZXN1bHRfZiA9IGFjICsgKGFkID4+IDMyKSAr
IChiYyA+PiAzMikgKyAodG1wID4+IDMyKTsKLSAgICAgICAgZV8gKz0gb3RoZXIuZV8gKyA2NDsK
LSAgICAgICAgZl8gPSByZXN1bHRfZjsKLSAgICB9Ci0gICAgCi19ICAvLyBuYW1lc3BhY2UgZG91
YmxlX2NvbnZlcnNpb24KLQotfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZHRvYS9kaXktZnAuaCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9kdG9hL2RpeS1mcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBlODQzMTAwYTgyYWEzNGE2MjhkY2VlOGMyNzExZjlhYzUwZWY5ZTY5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi9kdG9hL2RpeS1mcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICsw
LDAgQEAKLS8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8v
Ci0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gICAgICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8v
ICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZAotLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8g
ICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0vLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmbmRlZiBET1VCTEVfQ09OVkVS
U0lPTl9ESVlfRlBfSF8KLSNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fRElZX0ZQX0hfCi0KLSNp
bmNsdWRlICJ1dGlscy5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLQotbmFtZXNwYWNlIGRvdWJsZV9j
b252ZXJzaW9uIHsKLSAgICAKLSAgICAvLyBUaGlzICJEbyBJdCBZb3Vyc2VsZiBGbG9hdGluZyBQ
b2ludCIgY2xhc3MgaW1wbGVtZW50cyBhIGZsb2F0aW5nLXBvaW50IG51bWJlcgotICAgIC8vIHdp
dGggYSB1aW50NjQgc2lnbmlmaWNhbmQgYW5kIGFuIGludCBleHBvbmVudC4gTm9ybWFsaXplZCBE
aXlGcCBudW1iZXJzIHdpbGwKLSAgICAvLyBoYXZlIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBv
ZiB0aGUgc2lnbmlmaWNhbmQgc2V0LgotICAgIC8vIE11bHRpcGxpY2F0aW9uIGFuZCBTdWJ0cmFj
dGlvbiBkbyBub3Qgbm9ybWFsaXplIHRoZWlyIHJlc3VsdHMuCi0gICAgLy8gRGl5RnAgYXJlIG5v
dCBkZXNpZ25lZCB0byBjb250YWluIHNwZWNpYWwgZG91YmxlcyAoTmFOIGFuZCBJbmZpbml0eSku
Ci0gICAgY2xhc3MgRGl5RnAgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBrU2lnbmlmaWNhbmRTaXplID0gNjQ7Ci0gICAgICAgIAotICAgICAgICBEaXlGcCgpIDogZl8o
MCksIGVfKDApIHt9Ci0gICAgICAgIERpeUZwKHVpbnQ2NF90IGYsIGludCBlKSA6IGZfKGYpLCBl
XyhlKSB7fQotICAgICAgICAKLSAgICAgICAgLy8gdGhpcyA9IHRoaXMgLSBvdGhlci4KLSAgICAg
ICAgLy8gVGhlIGV4cG9uZW50cyBvZiBib3RoIG51bWJlcnMgbXVzdCBiZSB0aGUgc2FtZSBhbmQg
dGhlIHNpZ25pZmljYW5kIG9mIHRoaXMKLSAgICAgICAgLy8gbXVzdCBiZSBiaWdnZXIgdGhhbiB0
aGUgc2lnbmlmaWNhbmQgb2Ygb3RoZXIuCi0gICAgICAgIC8vIFRoZSByZXN1bHQgd2lsbCBub3Qg
YmUgbm9ybWFsaXplZC4KLSAgICAgICAgdm9pZCBTdWJ0cmFjdChjb25zdCBEaXlGcCYgb3RoZXIp
IHsKLSAgICAgICAgICAgIEFTU0VSVChlXyA9PSBvdGhlci5lXyk7Ci0gICAgICAgICAgICBBU1NF
UlQoZl8gPj0gb3RoZXIuZl8pOwotICAgICAgICAgICAgZl8gLT0gb3RoZXIuZl87Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIC8vIFJldHVybnMgYSAtIGIuCi0gICAgICAgIC8vIFRoZSBl
eHBvbmVudHMgb2YgYm90aCBudW1iZXJzIG11c3QgYmUgdGhlIHNhbWUgYW5kIHRoaXMgbXVzdCBi
ZSBiaWdnZXIKLSAgICAgICAgLy8gdGhhbiBvdGhlci4gVGhlIHJlc3VsdCB3aWxsIG5vdCBiZSBu
b3JtYWxpemVkLgotICAgICAgICBzdGF0aWMgRGl5RnAgTWludXMoY29uc3QgRGl5RnAmIGEsIGNv
bnN0IERpeUZwJiBiKSB7Ci0gICAgICAgICAgICBEaXlGcCByZXN1bHQgPSBhOwotICAgICAgICAg
ICAgcmVzdWx0LlN1YnRyYWN0KGIpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIC8vIHRoaXMgPSB0aGlzICogb3RoZXIu
Ci0gICAgICAgIHZvaWQgTXVsdGlwbHkoY29uc3QgRGl5RnAmIG90aGVyKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIHJldHVybnMgYSAqIGI7Ci0gICAgICAgIHN0YXRpYyBEaXlGcCBUaW1lcyhjb25z
dCBEaXlGcCYgYSwgY29uc3QgRGl5RnAmIGIpIHsKLSAgICAgICAgICAgIERpeUZwIHJlc3VsdCA9
IGE7Ci0gICAgICAgICAgICByZXN1bHQuTXVsdGlwbHkoYik7Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIE5vcm1hbGl6ZSgpIHsK
LSAgICAgICAgICAgIEFTU0VSVChmXyAhPSAwKTsKLSAgICAgICAgICAgIHVpbnQ2NF90IGYgPSBm
XzsKLSAgICAgICAgICAgIGludCBlID0gZV87Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IFRoaXMgbWV0aG9kIGlzIG1haW5seSBjYWxsZWQgZm9yIG5vcm1hbGl6aW5nIGJvdW5kYXJpZXMu
IEluIGdlbmVyYWwKLSAgICAgICAgICAgIC8vIGJvdW5kYXJpZXMgbmVlZCB0byBiZSBzaGlmdGVk
IGJ5IDEwIGJpdHMuIFdlIHRodXMgb3B0aW1pemUgZm9yIHRoaXMgY2FzZS4KLSAgICAgICAgICAg
IGNvbnN0IHVpbnQ2NF90IGsxME1TQml0cyA9IFVJTlQ2NF8yUEFSVF9DKDB4RkZDMDAwMDAsIDAw
MDAwMDAwKTsKLSAgICAgICAgICAgIHdoaWxlICgoZiAmIGsxME1TQml0cykgPT0gMCkgewotICAg
ICAgICAgICAgICAgIGYgPDw9IDEwOwotICAgICAgICAgICAgICAgIGUgLT0gMTA7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoKGYgJiBrVWludDY0TVNCKSA9PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgZiA8PD0gMTsKLSAgICAgICAgICAgICAgICBlLS07Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBmXyA9IGY7Ci0gICAgICAgICAgICBlXyA9IGU7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyBEaXlGcCBOb3JtYWxpemUoY29uc3QgRGl5RnAmIGEpIHsK
LSAgICAgICAgICAgIERpeUZwIHJlc3VsdCA9IGE7Ci0gICAgICAgICAgICByZXN1bHQuTm9ybWFs
aXplKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICB1aW50NjRfdCBmKCkgY29uc3QgeyByZXR1cm4gZl87IH0KLSAgICAgICAgaW50IGUo
KSBjb25zdCB7IHJldHVybiBlXzsgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRfZih1aW50
NjRfdCBuZXdfdmFsdWUpIHsgZl8gPSBuZXdfdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRfZShp
bnQgbmV3X3ZhbHVlKSB7IGVfID0gbmV3X3ZhbHVlOyB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6
Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrVWludDY0TVNCID0gVUlOVDY0XzJQQVJU
X0MoMHg4MDAwMDAwMCwgMDAwMDAwMDApOwotICAgICAgICAKLSAgICAgICAgdWludDY0X3QgZl87
Ci0gICAgICAgIGludCBlXzsKLSAgICB9OwotICAgIAotfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9j
b252ZXJzaW9uCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgIC8vIERPVUJMRV9DT05W
RVJTSU9OX0RJWV9GUF9IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2MgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNmJmMzYwMjQ1Y2RlNzY4MjVjYzdmMzE2NTIzN2FlNTEzYTQ3N2YzZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYworKysgL2Rldi9u
dWxsCkBAIC0xLDYwNSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBh
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCi0vLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLS8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJkb3VibGUtY29udmVyc2lvbi5oIgotCi0jaW5jbHVk
ZSAiYmlnbnVtLWR0b2EuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLSNpbmNsdWRlICJmYXN0LWR0
b2EuaCIKLSNpbmNsdWRlICJmaXhlZC1kdG9hLmgiCi0jaW5jbHVkZSAic3RydG9kLmgiCi0jaW5j
bHVkZSAidXRpbHMuaCIKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0j
aW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFj
ZSBkb3VibGVfY29udmVyc2lvbiB7Ci0gICAgCi0gICAgY29uc3QgRG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXImIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCkgewot
ICAgICAgICBpbnQgZmxhZ3MgPSBVTklRVUVfWkVSTyB8IEVNSVRfUE9TSVRJVkVfRVhQT05FTlRf
U0lHTjsKLSAgICAgICAgc3RhdGljIERvdWJsZVRvU3RyaW5nQ29udmVydGVyIGNvbnZlcnRlcihm
bGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
SW5maW5pdHkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJOYU4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtNiwgMjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNiwgMCk7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0ZXI7Ci0gICAgfQotICAgIAotICAgIAot
ICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkhhbmRsZVNwZWNpYWxWYWx1ZXMoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgewotICAgICAgICBE
b3VibGUgZG91YmxlX2luc3BlY3QodmFsdWUpOwotICAgICAgICBpZiAoZG91YmxlX2luc3BlY3Qu
SXNJbmZpbml0ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoaW5maW5pdHlfc3ltYm9sXyA9PSBOVUxM
KSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN0cmluZyhpbmZpbml0eV9zeW1ib2xfKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChkb3VibGVf
aW5zcGVjdC5Jc05hbigpKSB7Ci0gICAgICAgICAgICBpZiAobmFuX3N5bWJvbF8gPT0gTlVMTCkg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN0cmluZyhuYW5f
c3ltYm9sXyk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIAotICAgIHZvaWQgRG91YmxlVG9TdHJpbmdD
b252ZXJ0ZXI6OkNyZWF0ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBkZWNpbWFsX2RpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZXhwb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29u
c3QgewotICAgICAgICBBU1NFUlQobGVuZ3RoICE9IDApOwotICAgICAgICByZXN1bHRfYnVpbGRl
ci0+QWRkQ2hhcmFjdGVyKGRlY2ltYWxfZGlnaXRzWzBdKTsKLSAgICAgICAgaWYgKGxlbmd0aCAh
PSAxKSB7Ci0gICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7Ci0g
ICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKCZkZWNpbWFsX2RpZ2l0c1sx
XSwgbGVuZ3RoLTEpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFy
YWN0ZXIoZXhwb25lbnRfY2hhcmFjdGVyXyk7Ci0gICAgICAgIGlmIChleHBvbmVudCA8IDApIHsK
LSAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsKLSAgICAgICAg
ICAgIGV4cG9uZW50ID0gLWV4cG9uZW50OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKChmbGFnc18gJiBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04pICE9IDApIHsKLSAgICAg
ICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcrJyk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4cG9uZW50ID09IDApIHsKLSAgICAgICAgICAg
IHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJzAnKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBBU1NFUlQoZXhwb25lbnQgPCAxZTQpOwotICAgICAgICBjb25z
dCBpbnQga01heEV4cG9uZW50TGVuZ3RoID0gNTsKLSAgICAgICAgY2hhciBidWZmZXJba01heEV4
cG9uZW50TGVuZ3RoICsgMV07Ci0gICAgICAgIGludCBmaXJzdF9jaGFyX3BvcyA9IGtNYXhFeHBv
bmVudExlbmd0aDsKLSAgICAgICAgYnVmZmVyW2ZpcnN0X2NoYXJfcG9zXSA9ICdcMCc7Ci0gICAg
ICAgIHdoaWxlIChleHBvbmVudCA+IDApIHsKLSAgICAgICAgICAgIGJ1ZmZlclstLWZpcnN0X2No
YXJfcG9zXSA9ICcwJyArIChleHBvbmVudCAlIDEwKTsKLSAgICAgICAgICAgIGV4cG9uZW50IC89
IDEwOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoJmJ1
ZmZlcltmaXJzdF9jaGFyX3Bvc10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAga01heEV4cG9uZW50TGVuZ3RoIC0gZmlyc3RfY2hhcl9wb3MpOwotICAgIH0KLSAgICAKLSAg
ICAKLSAgICB2b2lkIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpDcmVhdGVEZWNpbWFsUmVwcmVz
ZW50YXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRlY2ltYWxfZGlnaXRzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVu
Z3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZGVjaW1hbF9wb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0c19hZnRlcl9wb2lu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKLSAgICAgICAg
Ly8gQ3JlYXRlIGEgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBwYWRkZWQgd2l0aCB6ZXJvcyBpZiBu
ZWVkZWQuCi0gICAgICAgIGlmIChkZWNpbWFsX3BvaW50IDw9IDApIHsKLSAgICAgICAgICAgIC8v
ICIwLjAwMDAwZGVjaW1hbF9yZXAiLgotICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENo
YXJhY3RlcignMCcpOwotICAgICAgICAgICAgaWYgKGRpZ2l0c19hZnRlcl9wb2ludCA+IDApIHsK
LSAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCAtZGVjaW1hbF9wb2lu
dCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBkaWdpdHNfYWZ0ZXJfcG9pbnQg
LSAoLWRlY2ltYWxfcG9pbnQpKTsKLSAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRk
U3Vic3RyaW5nKGRlY2ltYWxfZGlnaXRzLCBsZW5ndGgpOwotICAgICAgICAgICAgICAgIGludCBy
ZW1haW5pbmdfZGlnaXRzID0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKC1kZWNpbWFsX3BvaW50KSAt
IGxlbmd0aDsKLSAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFkZGluZygnMCcs
IHJlbWFpbmluZ19kaWdpdHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGRl
Y2ltYWxfcG9pbnQgPj0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyAiZGVjaW1hbF9yZXAwMDAw
LjAwMDAwIiBvciAiZGVjaW1hbF9yZXAuMDAwMCIKLSAgICAgICAgICAgIHJlc3VsdF9idWlsZGVy
LT5BZGRTdWJzdHJpbmcoZGVjaW1hbF9kaWdpdHMsIGxlbmd0aCk7Ci0gICAgICAgICAgICByZXN1
bHRfYnVpbGRlci0+QWRkUGFkZGluZygnMCcsIGRlY2ltYWxfcG9pbnQgLSBsZW5ndGgpOwotICAg
ICAgICAgICAgaWYgKGRpZ2l0c19hZnRlcl9wb2ludCA+IDApIHsKLSAgICAgICAgICAgICAgICBy
ZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCBkaWdpdHNfYWZ0ZXJfcG9pbnQpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gImRlY2ltYS5sX3JlcDAwMCIK
LSAgICAgICAgICAgIEFTU0VSVChkaWdpdHNfYWZ0ZXJfcG9pbnQgPiAwKTsKLSAgICAgICAgICAg
IHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoZGVjaW1hbF9kaWdpdHMsIGRlY2ltYWxfcG9p
bnQpOwotICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLicpOwotICAg
ICAgICAgICAgQVNTRVJUKGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQgPD0gZGlnaXRzX2FmdGVyX3Bv
aW50KTsKLSAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoJmRlY2ltYWxf
ZGlnaXRzW2RlY2ltYWxfcG9pbnRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZW5ndGggLSBkZWNpbWFsX3BvaW50KTsKLSAgICAgICAgICAgIGludCByZW1haW5p
bmdfZGlnaXRzID0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQp
OwotICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCByZW1haW5pbmdf
ZGlnaXRzKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZGlnaXRzX2FmdGVyX3BvaW50ID09IDAp
IHsKLSAgICAgICAgICAgIGlmICgoZmxhZ3NfICYgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5U
KSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3Rlcign
LicpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChmbGFnc18gJiBFTUlUX1RSQUlM
SU5HX1pFUk9fQUZURVJfUE9JTlQpICE9IDApIHsKLSAgICAgICAgICAgICAgICByZXN1bHRfYnVp
bGRlci0+QWRkQ2hhcmFjdGVyKCcwJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgCi0gICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6VG9TaG9ydGVz
dChkb3VibGUgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgewotICAgICAgICBpZiAo
RG91YmxlKHZhbHVlKS5Jc1NwZWNpYWwoKSkgewotICAgICAgICAgICAgcmV0dXJuIEhhbmRsZVNw
ZWNpYWxWYWx1ZXModmFsdWUsIHJlc3VsdF9idWlsZGVyKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQ7Ci0gICAgICAgIGJvb2wgc2lnbjsKLSAgICAgICAg
Y29uc3QgaW50IGtEZWNpbWFsUmVwQ2FwYWNpdHkgPSBrQmFzZTEwTWF4aW1hbExlbmd0aCArIDE7
Ci0gICAgICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0eV07Ci0gICAgICAg
IGludCBkZWNpbWFsX3JlcF9sZW5ndGg7Ci0gICAgICAgIAotICAgICAgICBEb3VibGVUb0FzY2lp
KHZhbHVlLCBTSE9SVEVTVCwgMCwgZGVjaW1hbF9yZXAsIGtEZWNpbWFsUmVwQ2FwYWNpdHksCi0g
ICAgICAgICAgICAgICAgICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgsICZkZWNpbWFs
X3BvaW50KTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgdW5pcXVlX3plcm8gPSAoZmxhZ3NfICYg
VU5JUVVFX1pFUk8pICE9IDA7Ci0gICAgICAgIGlmIChzaWduICYmICh2YWx1ZSAhPSAwLjAgfHwg
IXVuaXF1ZV96ZXJvKSkgewotICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3Rl
cignLScpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQgZXhwb25lbnQgPSBkZWNp
bWFsX3BvaW50IC0gMTsKLSAgICAgICAgaWYgKChkZWNpbWFsX2luX3Nob3J0ZXN0X2xvd18gPD0g
ZXhwb25lbnQpICYmCi0gICAgICAgICAgICAoZXhwb25lbnQgPCBkZWNpbWFsX2luX3Nob3J0ZXN0
X2hpZ2hfKSkgewotICAgICAgICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGRlY2lt
YWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVjaW1hbF9wb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNYXgoMCwgZGVjaW1hbF9yZXBfbGVuZ3RoIC0gZGVjaW1hbF9wb2ludCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ3JlYXRlRXhwb25lbnRpYWxSZXByZXNlbnRh
dGlvbihkZWNpbWFsX3JlcCwgZGVjaW1hbF9yZXBfbGVuZ3RoLCBleHBvbmVudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBib29s
IERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpUb0ZpeGVkKGRvdWJsZSB2YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciog
cmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKLSAgICAgICAgQVNTRVJUKGtNYXhGaXhlZERpZ2l0c0Jl
Zm9yZVBvaW50ID09IDYwKTsKLSAgICAgICAgY29uc3QgZG91YmxlIGtGaXJzdE5vbkZpeGVkID0g
MWU2MDsKLSAgICAgICAgCi0gICAgICAgIGlmIChEb3VibGUodmFsdWUpLklzU3BlY2lhbCgpKSB7
Ci0gICAgICAgICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwgcmVzdWx0X2J1
aWxkZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0
cyA+IGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQpIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYg
KHZhbHVlID49IGtGaXJzdE5vbkZpeGVkIHx8IHZhbHVlIDw9IC1rRmlyc3ROb25GaXhlZCkgcmV0
dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgLy8gRmluZCBhIHN1ZmZpY2llbnRseSBwcmVj
aXNlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygbi4KLSAgICAgICAgaW50IGRlY2ltYWxfcG9p
bnQ7Ci0gICAgICAgIGJvb2wgc2lnbjsKLSAgICAgICAgLy8gQWRkIHNwYWNlIGZvciB0aGUgJ1ww
JyBieXRlLgotICAgICAgICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9Ci0gICAgICAg
IGtNYXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50ICsga01heEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCAr
IDE7Ci0gICAgICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0eV07Ci0gICAg
ICAgIGludCBkZWNpbWFsX3JlcF9sZW5ndGg7Ci0gICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUs
IEZJWEVELCByZXF1ZXN0ZWRfZGlnaXRzLAotICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxf
cmVwLCBrRGVjaW1hbFJlcENhcGFjaXR5LAotICAgICAgICAgICAgICAgICAgICAgICZzaWduLCAm
ZGVjaW1hbF9yZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7Ci0gICAgICAgIAotICAgICAgICBi
b29sIHVuaXF1ZV96ZXJvID0gKChmbGFnc18gJiBVTklRVUVfWkVSTykgIT0gMCk7Ci0gICAgICAg
IGlmIChzaWduICYmICh2YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgewotICAgICAgICAg
ICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsIGRlY2lt
YWxfcmVwX2xlbmd0aCwgZGVjaW1hbF9wb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcXVlc3RlZF9kaWdpdHMsIHJlc3VsdF9idWlsZGVyKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIAotICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXI6OlRvRXhwb25lbnRpYWwoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9i
dWlsZGVyKSBjb25zdCB7Ci0gICAgICAgIGlmIChEb3VibGUodmFsdWUpLklzU3BlY2lhbCgpKSB7
Ci0gICAgICAgICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwgcmVzdWx0X2J1
aWxkZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0
cyA8IC0xKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzID4ga01h
eEV4cG9uZW50aWFsRGlnaXRzKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpbnQg
ZGVjaW1hbF9wb2ludDsKLSAgICAgICAgYm9vbCBzaWduOwotICAgICAgICAvLyBBZGQgc3BhY2Ug
Zm9yIGRpZ2l0IGJlZm9yZSB0aGUgZGVjaW1hbCBwb2ludCBhbmQgdGhlICdcMCcgY2hhcmFjdGVy
LgotICAgICAgICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9IGtNYXhFeHBvbmVudGlh
bERpZ2l0cyArIDI7Ci0gICAgICAgIEFTU0VSVChrRGVjaW1hbFJlcENhcGFjaXR5ID4ga0Jhc2Ux
ME1heGltYWxMZW5ndGgpOwotICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tEZWNpbWFsUmVwQ2Fw
YWNpdHldOwotICAgICAgICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOwotICAgICAgICAKLSAgICAg
ICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgPT0gLTEpIHsKLSAgICAgICAgICAgIERvdWJsZVRvQXNj
aWkodmFsdWUsIFNIT1JURVNULCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpbWFs
X3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnNp
Z24sICZkZWNpbWFsX3JlcF9sZW5ndGgsICZkZWNpbWFsX3BvaW50KTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIFBSRUNJU0lPTiwgcmVxdWVzdGVk
X2RpZ2l0cyArIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBrRGVj
aW1hbFJlcENhcGFjaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc2lnbiwgJmRlY2lt
YWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQpOwotICAgICAgICAgICAgQVNTRVJUKGRlY2lt
YWxfcmVwX2xlbmd0aCA8PSByZXF1ZXN0ZWRfZGlnaXRzICsgMSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSBkZWNpbWFsX3JlcF9sZW5ndGg7IGkgPCByZXF1ZXN0ZWRf
ZGlnaXRzICsgMTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgZGVjaW1hbF9yZXBbaV0gPSAnMCc7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWNpbWFsX3JlcF9sZW5ndGggPSByZXF1ZXN0
ZWRfZGlnaXRzICsgMTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCB1bmlxdWVf
emVybyA9ICgoZmxhZ3NfICYgVU5JUVVFX1pFUk8pICE9IDApOwotICAgICAgICBpZiAoc2lnbiAm
JiAodmFsdWUgIT0gMC4wIHx8ICF1bmlxdWVfemVybykpIHsKLSAgICAgICAgICAgIHJlc3VsdF9i
dWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aW50IGV4cG9uZW50ID0gZGVjaW1hbF9wb2ludCAtIDE7Ci0gICAgICAgIENyZWF0ZUV4cG9uZW50
aWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVjaW1hbF9yZXBfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIAotICAgIAotICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OlRvUHJlY2lz
aW9uKGRvdWJsZSB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgcHJlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7Ci0gICAg
ICAgIGlmIChEb3VibGUodmFsdWUpLklzU3BlY2lhbCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4g
SGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwgcmVzdWx0X2J1aWxkZXIpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAocHJlY2lzaW9uIDwga01pblByZWNpc2lvbkRpZ2l0cyB8fCBw
cmVjaXNpb24gPiBrTWF4UHJlY2lzaW9uRGlnaXRzKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEZpbmQgYSBzdWZmaWNpZW50bHkg
cHJlY2lzZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIG4uCi0gICAgICAgIGludCBkZWNpbWFs
X3BvaW50OwotICAgICAgICBib29sIHNpZ247Ci0gICAgICAgIC8vIEFkZCBvbmUgZm9yIHRoZSB0
ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4KLSAgICAgICAgY29uc3QgaW50IGtEZWNpbWFsUmVw
Q2FwYWNpdHkgPSBrTWF4UHJlY2lzaW9uRGlnaXRzICsgMTsKLSAgICAgICAgY2hhciBkZWNpbWFs
X3JlcFtrRGVjaW1hbFJlcENhcGFjaXR5XTsKLSAgICAgICAgaW50IGRlY2ltYWxfcmVwX2xlbmd0
aDsKLSAgICAgICAgCi0gICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIFBSRUNJU0lPTiwgcHJl
Y2lzaW9uLAotICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBrRGVjaW1hbFJlcENh
cGFjaXR5LAotICAgICAgICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9yZXBfbGVuZ3Ro
LCAmZGVjaW1hbF9wb2ludCk7Ci0gICAgICAgIEFTU0VSVChkZWNpbWFsX3JlcF9sZW5ndGggPD0g
cHJlY2lzaW9uKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgdW5pcXVlX3plcm8gPSAoKGZsYWdz
XyAmIFVOSVFVRV9aRVJPKSAhPSAwKTsKLSAgICAgICAgaWYgKHNpZ24gJiYgKHZhbHVlICE9IDAu
MCB8fCAhdW5pcXVlX3plcm8pKSB7Ci0gICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hh
cmFjdGVyKCctJyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBleHBvbmVu
dCBpZiB3ZSBwcmludCB0aGUgbnVtYmVyIGFzIHgueHhleXl5LiBUaGF0IGlzIHdpdGggdGhlCi0g
ICAgICAgIC8vIGRlY2ltYWwgcG9pbnQgYWZ0ZXIgdGhlIGZpcnN0IGRpZ2l0LgotICAgICAgICBp
bnQgZXhwb25lbnQgPSBkZWNpbWFsX3BvaW50IC0gMTsKLSAgICAgICAgCi0gICAgICAgIGludCBl
eHRyYV96ZXJvID0gKChmbGFnc18gJiBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQpICE9
IDApID8gMSA6IDA7Ci0gICAgICAgIGlmICgoLWRlY2ltYWxfcG9pbnQgKyAxID4gbWF4X2xlYWRp
bmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKSB8fAotICAgICAgICAgICAgKGRl
Y2ltYWxfcG9pbnQgLSBwcmVjaXNpb24gKyBleHRyYV96ZXJvID4KLSAgICAgICAgICAgICBtYXhf
dHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKSkgewotICAgICAgICAg
ICAgICAgIC8vIEZpbGwgYnVmZmVyIHRvIGNvbnRhaW4gJ3ByZWNpc2lvbicgZGlnaXRzLgotICAg
ICAgICAgICAgICAgIC8vIFVzdWFsbHkgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IGF0IHRoZSBjb3Jy
ZWN0IGxlbmd0aCwgYnV0ICdEb3VibGVUb0FzY2lpJwotICAgICAgICAgICAgICAgIC8vIGlzIGFs
bG93ZWQgdG8gcmV0dXJuIGxlc3MgY2hhcmFjdGVycy4KLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gZGVjaW1hbF9yZXBfbGVuZ3RoOyBpIDwgcHJlY2lzaW9uOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZGVjaW1hbF9yZXBbaV0gPSAnMCc7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENyZWF0ZUV4cG9uZW50aWFsUmVwcmVzZW50
YXRpb24oZGVjaW1hbF9yZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleHBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGRlY2ltYWxfcmVwLCBk
ZWNpbWFsX3JlcF9sZW5ndGgsIGRlY2ltYWxfcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1heCgwLCBwcmVjaXNpb24gLSBkZWNpbWFsX3BvaW50KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxk
ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgCi0gICAgc3RhdGljIEJpZ251bUR0b2FNb2RlIER0b2FUb0JpZ251bUR0b2FNb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb3VibGVUb1N0cmlu
Z0NvbnZlcnRlcjo6RHRvYU1vZGUgZHRvYV9tb2RlKSB7Ci0gICAgICAgIHN3aXRjaCAoZHRvYV9t
b2RlKSB7Ci0gICAgICAgICAgICBjYXNlIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpTSE9SVEVT
VDogIHJldHVybiBCSUdOVU1fRFRPQV9TSE9SVEVTVDsKLSAgICAgICAgICAgIGNhc2UgRG91Ymxl
VG9TdHJpbmdDb252ZXJ0ZXI6OkZJWEVEOiAgICAgcmV0dXJuIEJJR05VTV9EVE9BX0ZJWEVEOwot
ICAgICAgICAgICAgY2FzZSBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6UFJFQ0lTSU9OOiByZXR1
cm4gQklHTlVNX0RUT0FfUFJFQ0lTSU9OOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBCSUdOVU1fRFRP
QV9TSE9SVEVTVDsgIC8vIFRvIHNpbGVuY2UgY29tcGlsZXIuCi0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgCi0gICAgdm9pZCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RG91YmxlVG9Bc2Np
aShkb3VibGUgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIER0b2FNb2RlIG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWZmZXJfbGVuZ3RoLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogc2lnbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3Ro
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBw
b2ludCkgewotICAgICAgICBCdWZmZXJSZWZlcmVuY2U8Y2hhcj4gdmVjdG9yKGJ1ZmZlciwgYnVm
ZmVyX2xlbmd0aCk7Ci0gICAgICAgIEFTU0VSVCghRG91YmxlKHYpLklzU3BlY2lhbCgpKTsKLSAg
ICAgICAgQVNTRVJUKG1vZGUgPT0gU0hPUlRFU1QgfHwgcmVxdWVzdGVkX2RpZ2l0cyA+PSAwKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChEb3VibGUodikuU2lnbigpIDwgMCkgewotICAgICAgICAg
ICAgKnNpZ24gPSB0cnVlOwotICAgICAgICAgICAgdiA9IC12OwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgKnNpZ24gPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKG1vZGUgPT0gUFJFQ0lTSU9OICYmIHJlcXVlc3RlZF9kaWdpdHMgPT0gMCkgewotICAgICAg
ICAgICAgdmVjdG9yWzBdID0gJ1wwJzsKLSAgICAgICAgICAgICpsZW5ndGggPSAwOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAodiA9PSAwKSB7
Ci0gICAgICAgICAgICB2ZWN0b3JbMF0gPSAnMCc7Ci0gICAgICAgICAgICB2ZWN0b3JbMV0gPSAn
XDAnOwotICAgICAgICAgICAgKmxlbmd0aCA9IDE7Ci0gICAgICAgICAgICAqcG9pbnQgPSAxOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIGZh
c3Rfd29ya2VkOwotICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICAgICAgICAgIGNhc2UgU0hP
UlRFU1Q6Ci0gICAgICAgICAgICAgICAgZmFzdF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNUX0RU
T0FfU0hPUlRFU1QsIDAsIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZJWEVEOgotICAgICAgICAgICAgICAgIGZhc3Rfd29y
a2VkID0gRmFzdEZpeGVkRHRvYSh2LCByZXF1ZXN0ZWRfZGlnaXRzLCB2ZWN0b3IsIGxlbmd0aCwg
cG9pbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQUkVDSVNJ
T046Ci0gICAgICAgICAgICAgICAgZmFzdF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNUX0RUT0Ff
UFJFQ0lTSU9OLCByZXF1ZXN0ZWRfZGlnaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmVjdG9yLCBsZW5ndGgsIHBvaW50KTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgICAgICAgICBmYXN0X3dvcmtlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChmYXN0X3dvcmtlZCkgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhlIGZh
c3QgZHRvYSBkaWRuJ3Qgc3VjY2VlZCB1c2UgdGhlIHNsb3dlciBiaWdudW0gdmVyc2lvbi4KLSAg
ICAgICAgQmlnbnVtRHRvYU1vZGUgYmlnbnVtX21vZGUgPSBEdG9hVG9CaWdudW1EdG9hTW9kZSht
b2RlKTsKLSAgICAgICAgQmlnbnVtRHRvYSh2LCBiaWdudW1fbW9kZSwgcmVxdWVzdGVkX2RpZ2l0
cywgdmVjdG9yLCBsZW5ndGgsIHBvaW50KTsKLSAgICAgICAgdmVjdG9yWypsZW5ndGhdID0gJ1ww
JzsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgLy8gTWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNh
bnQgZGlnaXRzIGluIGRlY2ltYWwgcmVwcmVzZW50YXRpb24uCi0gICAgLy8gVGhlIGxvbmdlc3Qg
cG9zc2libGUgZG91YmxlIGluIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gaXMKLSAgICAvLyAoMl41
MyAtIDEpICogMiBeIC0xMDc0IHRoYXQgaXMgKDIgXiA1MyAtIDEpICogNSBeIDEwNzQgLyAxMCBe
IDEwNzQKLSAgICAvLyAoNzY4IGRpZ2l0cykuIElmIHdlIHBhcnNlIGEgbnVtYmVyIHdob3NlIGZp
cnN0IGRpZ2l0cyBhcmUgZXF1YWwgdG8gYQotICAgIC8vIG1lYW4gb2YgMiBhZGphY2VudCBkb3Vi
bGVzICh0aGF0IGNvdWxkIGhhdmUgdXAgdG8gNzY5IGRpZ2l0cykgdGhlIHJlc3VsdAotICAgIC8v
IG11c3QgYmUgcm91bmRlZCB0byB0aGUgYmlnZ2VyIG9uZSB1bmxlc3MgdGhlIHRhaWwgY29uc2lz
dHMgb2YgemVyb3MsIHNvCi0gICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBwcmVzZXJ2ZSBhbGwgdGhl
IGRpZ2l0cy4KLSAgICBjb25zdCBpbnQga01heFNpZ25pZmljYW50RGlnaXRzID0gNzcyOwotICAg
IAotICAgIAotICAgIHN0YXRpYyBkb3VibGUgU2lnbmVkWmVybyhib29sIHNpZ24pIHsKLSAgICAg
ICAgcmV0dXJuIHNpZ24gPyAtMC4wIDogMC4wOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBkb3Vi
bGUgU3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXI6OlN0cmluZ1RvRG91YmxlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5wdXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90KiBwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCkgewotICAgICAgICBjb25z
dCBjaGFyKiBjdXJyZW50ID0gaW5wdXQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGVuZCA9IGlucHV0
ICsgbGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50
ID0gMDsKLSAgICAgICAgCi0gICAgICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IGl0ZXJhdG9yIGRl
cmVmZXJlbmNpbmcgaXMgdmFsaWQgdGhlIGZvbGxvd2luZwotICAgICAgICAvLyBjb252ZW50aW9u
IGlzIHVzZWQ6Ci0gICAgICAgIC8vIDEuIEVhY2ggJysrY3VycmVudCcgc3RhdGVtZW50IGlzIGZv
bGxvd2VkIGJ5IGNoZWNrIGZvciBlcXVhbGl0eSB0byAnZW5kJy4KLSAgICAgICAgLy8gMy4gSWYg
J2N1cnJlbnQnIGJlY29tZXMgZXF1YWwgdG8gJ2VuZCcgdGhlIGZ1bmN0aW9uIHJldHVybnMgb3Ig
Z29lcyB0bwotICAgICAgICAvLyAncGFyc2luZ19kb25lJy4KLSAgICAgICAgLy8gNC4gJ2N1cnJl
bnQnIGlzIG5vdCBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhlICdwYXJzaW5nX2RvbmUnIGxhYmVsLgot
ICAgICAgICAvLyA1LiBDb2RlIGJlZm9yZSAncGFyc2luZ19kb25lJyBtYXkgcmVseSBvbiAnY3Vy
cmVudCAhPSBlbmQnLgotICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHJldHVybiAwLjA7Ci0g
ICAgICAgIAotICAgICAgICAvLyBUaGUgbG9uZ2VzdCBmb3JtIG9mIHNpbXBsaWZpZWQgbnVtYmVy
IGlzOiAiLTxzaWduaWZpY2FudCBkaWdpdHM+LjFlWFhYXDAiLgotICAgICAgICBjb25zdCB1bnNp
Z25lZCBrQnVmZmVyU2l6ZSA9IGtNYXhTaWduaWZpY2FudERpZ2l0cyArIDEwOwotICAgICAgICBj
aGFyIGJ1ZmZlcltrQnVmZmVyU2l6ZV07ICAvLyBOT0xJTlQ6IHNpemUgaXMga25vd24gYXQgY29t
cGlsZSB0aW1lLgotICAgICAgICB1bnNpZ25lZCBidWZmZXJfcG9zID0gMDsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEV4cG9uZW50IHdpbGwgYmUgYWRqdXN0ZWQgaWYgaW5zaWduaWZpY2FudCBkaWdp
dHMgb2YgdGhlIGludGVnZXIgcGFydAotICAgICAgICAvLyBvciBpbnNpZ25pZmljYW50IGxlYWRp
bmcgemVyb3Mgb2YgdGhlIGZyYWN0aW9uYWwgcGFydCBhcmUgZHJvcHBlZC4KLSAgICAgICAgaW50
IGV4cG9uZW50ID0gMDsKLSAgICAgICAgaW50IHNpZ25pZmljYW50X2RpZ2l0cyA9IDA7Ci0gICAg
ICAgIGludCBpbnNpZ25pZmljYW50X2RpZ2l0cyA9IDA7Ci0gICAgICAgIGJvb2wgbm9uemVyb19k
aWdpdF9kcm9wcGVkID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgc2lnbiA9IGZhbHNlOwotICAgICAg
ICAKLSAgICAgICAgaWYgKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScpIHsKLSAg
ICAgICAgICAgIHNpZ24gPSAoKmN1cnJlbnQgPT0gJy0nKTsKLSAgICAgICAgICAgICsrY3VycmVu
dDsKLSAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgcmV0dXJuIDAuMDsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgYm9vbCBsZWFkaW5nX3plcm8gPSBmYWxzZTsKLSAgICAgICAg
aWYgKCpjdXJyZW50ID09ICcwJykgewotICAgICAgICAgICAgKytjdXJyZW50OwotICAgICAgICAg
ICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7Ci0gICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFy
YWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OwotICAgICAgICAgICAgICAgIHJldHVybiBT
aWduZWRaZXJvKHNpZ24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBsZWFkaW5nX3plcm8gPSB0cnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBJZ25v
cmUgbGVhZGluZyB6ZXJvcyBpbiB0aGUgaW50ZWdlciBwYXJ0LgotICAgICAgICAgICAgd2hpbGUg
KCpjdXJyZW50ID09ICcwJykgewotICAgICAgICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAg
ICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgKnByb2Nl
c3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gU2lnbmVkWmVybyhzaWduKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIENvcHkgc2lnbmlmaWNhbnQg
ZGlnaXRzIG9mIHRoZSBpbnRlZ2VyIHBhcnQgKGlmIGFueSkgdG8gdGhlIGJ1ZmZlci4KLSAgICAg
ICAgd2hpbGUgKGlzQVNDSUlEaWdpdCgqY3VycmVudCkpIHsKLSAgICAgICAgICAgIGlmIChzaWdu
aWZpY2FudF9kaWdpdHMgPCBrTWF4U2lnbmlmaWNhbnREaWdpdHMpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoYnVmZmVyX3BvcyA8IGtCdWZmZXJTaXplKTsKLSAgICAgICAgICAgICAgICBidWZm
ZXJbYnVmZmVyX3BvcysrXSA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KTsKLSAgICAgICAg
ICAgICAgICBzaWduaWZpY2FudF9kaWdpdHMrKzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaW5zaWduaWZpY2FudF9kaWdpdHMrKzsgIC8vIE1vdmUgdGhlIGRpZ2l0IGlu
dG8gdGhlIGV4cG9uZW50aWFsIHBhcnQuCi0gICAgICAgICAgICAgICAgbm9uemVyb19kaWdpdF9k
cm9wcGVkID0gbm9uemVyb19kaWdpdF9kcm9wcGVkIHx8ICpjdXJyZW50ICE9ICcwJzsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAgICAgIGlmIChjdXJyZW50
ID09IGVuZCkgZ290byBwYXJzaW5nX2RvbmU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmICgqY3VycmVudCA9PSAnLicpIHsKLSAgICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAg
ICAgIGlmIChjdXJyZW50ID09IGVuZCkgewotICAgICAgICAgICAgICAgIGlmIChzaWduaWZpY2Fu
dF9kaWdpdHMgPT0gMCAmJiAhbGVhZGluZ196ZXJvKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwLjA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Z290byBwYXJzaW5nX2RvbmU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzID09IDApIHsKLSAg
ICAgICAgICAgICAgICAvLyBJbnRlZ2VyIHBhcnQgY29uc2lzdHMgb2YgMCBvciBpcyBhYnNlbnQu
IFNpZ25pZmljYW50IGRpZ2l0cyBzdGFydCBhZnRlcgotICAgICAgICAgICAgICAgIC8vIGxlYWRp
bmcgemVyb3MgKGlmIGFueSkuCi0gICAgICAgICAgICAgICAgd2hpbGUgKCpjdXJyZW50ID09ICcw
JykgewotICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50ID09IGVuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgKnByb2Nlc3Nl
ZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OwotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFNpZ25lZFplcm8oc2lnbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZXhwb25lbnQtLTsgIC8vIE1vdmUgdGhpcyAwIGludG8gdGhlIGV4
cG9uZW50LgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gVGhlcmUgaXMgYSBmcmFjdGlvbmFsIHBhcnQuCi0gICAgICAgICAgICB3aGlsZSAoaXNBU0NJ
SURpZ2l0KCpjdXJyZW50KSkgewotICAgICAgICAgICAgICAgIGlmIChzaWduaWZpY2FudF9kaWdp
dHMgPCBrTWF4U2lnbmlmaWNhbnREaWdpdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGJ1ZmZlcl9wb3MgPCBrQnVmZmVyU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlclti
dWZmZXJfcG9zKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpOwotICAgICAgICAgICAg
ICAgICAgICBzaWduaWZpY2FudF9kaWdpdHMrKzsKLSAgICAgICAgICAgICAgICAgICAgZXhwb25l
bnQtLTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBJ
Z25vcmUgaW5zaWduaWZpY2FudCBkaWdpdHMgaW4gdGhlIGZyYWN0aW9uYWwgcGFydC4KLSAgICAg
ICAgICAgICAgICAgICAgbm9uemVyb19kaWdpdF9kcm9wcGVkID0gbm9uemVyb19kaWdpdF9kcm9w
cGVkIHx8ICpjdXJyZW50ICE9ICcwJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgKytjdXJyZW50OwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgZ290byBw
YXJzaW5nX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmICghbGVhZGluZ196ZXJvICYmIGV4cG9uZW50ID09IDAgJiYgc2lnbmlmaWNhbnRfZGlnaXRz
ID09IDApIHsKLSAgICAgICAgICAgIC8vIElmIGxlYWRpbmdfemVyb3MgaXMgdHJ1ZSB0aGVuIHRo
ZSBzdHJpbmcgY29udGFpbnMgemVyb3MuCi0gICAgICAgICAgICAvLyBJZiBleHBvbmVudCA8IDAg
dGhlbiBzdHJpbmcgd2FzIFsrLV1cLjAqLi4uCi0gICAgICAgICAgICAvLyBJZiBzaWduaWZpY2Fu
dF9kaWdpdHMgIT0gMCB0aGUgc3RyaW5nIGlzIG5vdCBlcXVhbCB0byAwLgotICAgICAgICAgICAg
Ly8gT3RoZXJ3aXNlIHRoZXJlIGFyZSBubyBkaWdpdHMgaW4gdGhlIHN0cmluZy4KLSAgICAgICAg
ICAgIHJldHVybiAwLjA7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFBhcnNlIGV4
cG9uZW50aWFsIHBhcnQuCi0gICAgICAgIGlmICgqY3VycmVudCA9PSAnZScgfHwgKmN1cnJlbnQg
PT0gJ0UnKSB7Ci0gICAgICAgICAgICArK2N1cnJlbnQ7Ci0gICAgICAgICAgICBpZiAoY3VycmVu
dCA9PSBlbmQpIHsKLSAgICAgICAgICAgICAgICAtLWN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAg
Z290byBwYXJzaW5nX2RvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGFyIHNpZ24g
PSAwOwotICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScp
IHsKLSAgICAgICAgICAgICAgICBzaWduID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpOwot
ICAgICAgICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9
PSBlbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudCAtPSAyOwotICAgICAgICAgICAg
ICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgqY3VycmVudCA8ICcwJyB8fCAqY3Vy
cmVudCA+ICc5JykgewotICAgICAgICAgICAgICAgIGlmIChzaWduKQotICAgICAgICAgICAgICAg
ICAgICAtLWN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgLS1jdXJyZW50OwotICAgICAgICAgICAg
ICAgIGdvdG8gcGFyc2luZ19kb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gSU5UX01BWCAvIDI7Ci0gICAgICAgICAg
ICBBU1NFUlQoLW1heF9leHBvbmVudCAvIDIgPD0gZXhwb25lbnQgJiYgZXhwb25lbnQgPD0gbWF4
X2V4cG9uZW50IC8gMik7Ci0gICAgICAgICAgICBpbnQgbnVtID0gMDsKLSAgICAgICAgICAgIGRv
IHsKLSAgICAgICAgICAgICAgICAvLyBDaGVjayBvdmVyZmxvdy4KLSAgICAgICAgICAgICAgICBp
bnQgZGlnaXQgPSAqY3VycmVudCAtICcwJzsKLSAgICAgICAgICAgICAgICBpZiAobnVtID49IG1h
eF9leHBvbmVudCAvIDEwCi0gICAgICAgICAgICAgICAgICAgICYmICEobnVtID09IG1heF9leHBv
bmVudCAvIDEwICYmIGRpZ2l0IDw9IG1heF9leHBvbmVudCAlIDEwKSkgewotICAgICAgICAgICAg
ICAgICAgICBudW0gPSBtYXhfZXhwb25lbnQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgbnVtID0gbnVtICogMTAgKyBkaWdpdDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgKytjdXJyZW50OwotICAgICAgICAgICAgfSB3aGlsZSAoY3Vy
cmVudCAhPSBlbmQgJiYgaXNBU0NJSURpZ2l0KCpjdXJyZW50KSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGV4cG9uZW50ICs9IChzaWduID09ICctJyA/IC1udW0gOiBudW0pOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgIHBhcnNpbmdfZG9uZToKLSAgICAgICAgZXhwb25lbnQgKz0gaW5z
aWduaWZpY2FudF9kaWdpdHM7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9uemVyb19kaWdpdF9k
cm9wcGVkKSB7Ci0gICAgICAgICAgICBidWZmZXJbYnVmZmVyX3BvcysrXSA9ICcxJzsKLSAgICAg
ICAgICAgIGV4cG9uZW50LS07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChi
dWZmZXJfcG9zIDwga0J1ZmZlclNpemUpOwotICAgICAgICBidWZmZXJbYnVmZmVyX3Bvc10gPSAn
XDAnOwotICAgICAgICAKLSAgICAgICAgZG91YmxlIGNvbnZlcnRlZCA9IFN0cnRvZChCdWZmZXJS
ZWZlcmVuY2U8Y29uc3QgY2hhcj4oYnVmZmVyLCBidWZmZXJfcG9zKSwgZXhwb25lbnQpOwotICAg
ICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7Ci0gICAg
ICAgIHJldHVybiBzaWduPyAtY29udmVydGVkOiBjb252ZXJ0ZWQ7Ci0gICAgfQotICAgIAotfSAg
Ly8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCi0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2EvZG91YmxlLWNv
bnZlcnNpb24uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kdG9hL2RvdWJs
ZS1jb252ZXJzaW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNDljMGQ3YzY3
YzI3NjBiZGQxM2FlOTU2ZjZmOWU2OGE5YjQ0M2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0
b2EvZG91YmxlLWNvbnZlcnNpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDM3NyArMCwwIEBACi0v
LyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vICAgICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0vLyAgICAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQKLS8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vICAgICAgIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRE9V
QkxFX0NPTlZFUlNJT05fSF8KLSNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZF
UlNJT05fSF8KLQotI2luY2x1ZGUgPHd0Zi9kdG9hL3V0aWxzLmg+Ci0KLW5hbWVzcGFjZSBXVEYg
ewotCi1uYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24gewotICAgIAotICAgIGNsYXNzIERvdWJs
ZVRvU3RyaW5nQ29udmVydGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIFdoZW4gY2FsbGlu
ZyBUb0ZpeGVkIHdpdGggYSBkb3VibGUgPiAxMF5rTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludAot
ICAgICAgICAvLyBvciBhIHJlcXVlc3RlZF9kaWdpdHMgcGFyYW1ldGVyID4ga01heEZpeGVkRGln
aXRzQWZ0ZXJQb2ludCB0aGVuIHRoZQotICAgICAgICAvLyBmdW5jdGlvbiByZXR1cm5zIGZhbHNl
LgotICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50ID0g
NjA7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCA9
IDYwOwotICAgICAgICAKLSAgICAgICAgLy8gV2hlbiBjYWxsaW5nIFRvRXhwb25lbnRpYWwgd2l0
aCBhIHJlcXVlc3RlZF9kaWdpdHMKLSAgICAgICAgLy8gcGFyYW1ldGVyID4ga01heEV4cG9uZW50
aWFsRGlnaXRzIHRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCi0gICAgICAgIHN0YXRp
YyBjb25zdCBpbnQga01heEV4cG9uZW50aWFsRGlnaXRzID0gMTIwOwotICAgICAgICAKLSAgICAg
ICAgLy8gV2hlbiBjYWxsaW5nIFRvUHJlY2lzaW9uIHdpdGggYSByZXF1ZXN0ZWRfZGlnaXRzCi0g
ICAgICAgIC8vIHBhcmFtZXRlciA8IGtNaW5QcmVjaXNpb25EaWdpdHMgb3IgcmVxdWVzdGVkX2Rp
Z2l0cyA+IGtNYXhQcmVjaXNpb25EaWdpdHMKLSAgICAgICAgLy8gdGhlbiB0aGUgZnVuY3Rpb24g
cmV0dXJucyBmYWxzZS4KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWluUHJlY2lzaW9uRGln
aXRzID0gMTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4UHJlY2lzaW9uRGlnaXRzID0g
MTIwOwotICAgICAgICAKLSAgICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAgICAgICBOT19GTEFH
UyA9IDAsCi0gICAgICAgICAgICBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04gPSAxLAotICAg
ICAgICAgICAgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UID0gMiwKLSAgICAgICAgICAgIEVN
SVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCA9IDQsCi0gICAgICAgICAgICBVTklRVUVfWkVS
TyA9IDgKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZsYWdzIHNob3VsZCBiZSBh
IGJpdC1vciBjb21iaW5hdGlvbiBvZiB0aGUgcG9zc2libGUgRmxhZ3MtZW51bS4KLSAgICAgICAg
Ly8gIC0gTk9fRkxBR1M6IG5vIHNwZWNpYWwgZmxhZ3MuCi0gICAgICAgIC8vICAtIEVNSVRfUE9T
SVRJVkVfRVhQT05FTlRfU0lHTjogd2hlbiB0aGUgbnVtYmVyIGlzIGNvbnZlcnRlZCBpbnRvIGV4
cG9uZW50Ci0gICAgICAgIC8vICAgIGZvcm0sIGVtaXRzIGEgJysnIGZvciBwb3NpdGl2ZSBleHBv
bmVudHMuIEV4YW1wbGU6IDEuMmUrMi4KLSAgICAgICAgLy8gIC0gRU1JVF9UUkFJTElOR19ERUNJ
TUFMX1BPSU5UOiB3aGVuIHRoZSBpbnB1dCBudW1iZXIgaXMgYW4gaW50ZWdlciBhbmQgaXMKLSAg
ICAgICAgLy8gICAgY29udmVydGVkIGludG8gZGVjaW1hbCBmb3JtYXQgdGhlbiBhIHRyYWlsaW5n
IGRlY2ltYWwgcG9pbnQgaXMgYXBwZW5kZWQuCi0gICAgICAgIC8vICAgIEV4YW1wbGU6IDIzNDUu
MCBpcyBjb252ZXJ0ZWQgdG8gIjIzNDUuIi4KLSAgICAgICAgLy8gIC0gRU1JVF9UUkFJTElOR19a
RVJPX0FGVEVSX1BPSU5UOiBpbiBhZGRpdGlvbiB0byBhIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnQK
LSAgICAgICAgLy8gICAgZW1pdHMgYSB0cmFpbGluZyAnMCctY2hhcmFjdGVyLiBUaGlzIGZsYWcg
cmVxdWlyZXMgdGhlCi0gICAgICAgIC8vICAgIEVYTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQg
ZmxhZy4KLSAgICAgICAgLy8gICAgRXhhbXBsZTogMjM0NS4wIGlzIGNvbnZlcnRlZCB0byAiMjM0
NS4wIi4KLSAgICAgICAgLy8gIC0gVU5JUVVFX1pFUk86ICItMC4wIiBpcyBjb252ZXJ0ZWQgdG8g
IjAuMCIuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEluZmluaXR5IHN5bWJvbCBhbmQgbmFuX3N5
bWJvbCBwcm92aWRlIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZXNlCi0gICAgICAg
IC8vIHNwZWNpYWwgdmFsdWVzLiBJZiB0aGUgc3RyaW5nIGlzIE5VTEwgYW5kIHRoZSBzcGVjaWFs
IHZhbHVlIGlzIGVuY291bnRlcmVkCi0gICAgICAgIC8vIHRoZW4gdGhlIGNvbnZlcnNpb24gZnVu
Y3Rpb25zIHJldHVybiBmYWxzZS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIGV4cG9uZW50
X2NoYXJhY3RlciBpcyB1c2VkIGluIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9ucy4gSXQgaXMK
LSAgICAgICAgLy8gdXN1YWxseSAnZScgb3IgJ0UnLgotICAgICAgICAvLwotICAgICAgICAvLyBX
aGVuIGNvbnZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIHRoZSBjb252ZXJ0
ZXIgd2lsbAotICAgICAgICAvLyByZXByZXNlbnQgaW5wdXQgbnVtYmVycyBpbiBkZWNpbWFsIGZv
cm1hdCBpZiB0aGV5IGFyZSBpbiB0aGUgaW50ZXJ2YWwKLSAgICAgICAgLy8gWzEwXmRlY2ltYWxf
aW5fc2hvcnRlc3RfbG93OyAxMF5kZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2hbCi0gICAgICAgIC8v
ICAgIChsb3dlciBib3VuZGFyeSBpbmNsdWRlZCwgZ3JlYXRlciBib3VuZGFyeSBleGNsdWRlZCku
Ci0gICAgICAgIC8vIEV4YW1wbGU6IHdpdGggZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3cgPSAtNiBh
bmQKLSAgICAgICAgLy8gICAgICAgICAgICAgICBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2ggPSAy
MToKLSAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDAuMDAwMDAxKSAgLT4gIjAuMDAwMDAxIgotICAg
ICAgICAvLyAgIFRvU2hvcnRlc3QoMC4wMDAwMDAxKSAtPiAiMWUtNyIKLSAgICAgICAgLy8gICBU
b1Nob3J0ZXN0KDExMTExMTExMTExMTExMTExMTExMS4wKSAgLT4gIjExMTExMTExMTExMTExMTEx
MDAwMCIKLSAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDEwMDAwMDAwMDAwMDAwMDAwMDAwMC4wKSAg
LT4gIjEwMDAwMDAwMDAwMDAwMDAwMDAwMCIKLSAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDExMTEx
MTExMTExMTExMTExMTExMTEuMCkgLT4gIjEuMTExMTExMTExMTExMTExMWUrMjEiCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIFdoZW4gY29udmVydGluZyB0byBwcmVjaXNpb24gbW9kZSB0aGUgY29u
dmVydGVyIG1heSBhZGQKLSAgICAgICAgLy8gbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXMgYmVm
b3JlIHJldHVybmluZyB0aGUgbnVtYmVyIGluIGV4cG9uZW50aWFsCi0gICAgICAgIC8vIGZvcm1h
dC4KLSAgICAgICAgLy8gRXhhbXBsZSB3aXRoIG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2lu
X3ByZWNpc2lvbl9tb2RlID0gNi4KLSAgICAgICAgLy8gICBUb1ByZWNpc2lvbigwLjAwMDAwMTIz
NDUsIDIpIC0+ICIwLjAwMDAwMTIiCi0gICAgICAgIC8vICAgVG9QcmVjaXNpb24oMC4wMDAwMDAx
MjM0NSwgMikgLT4gIjEuMmUtNyIKLSAgICAgICAgLy8gU2ltaWxhcmlseSB0aGUgY29udmVydGVy
IG1heSBhZGQgdXAgdG8KLSAgICAgICAgLy8gbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2lu
X3ByZWNpc2lvbl9tb2RlIGluIHByZWNpc2lvbiBtb2RlIHRvIGF2b2lkCi0gICAgICAgIC8vIHJl
dHVybmluZyBhbiBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbi4gQSB6ZXJvIGFkZGVkIGJ5IHRo
ZQotICAgICAgICAvLyBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQgZmxhZyBpcyBjb3Vu
dGVkIGZvciB0aGlzIGxpbWl0LgotICAgICAgICAvLyBFeGFtcGxlcyBmb3IgbWF4X3RyYWlsaW5n
X3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlID0gMToKLSAgICAgICAgLy8gICBUb1By
ZWNpc2lvbigyMzAuMCwgMikgLT4gIjIzMCIKLSAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAu
MCwgMikgLT4gIjIzMC4iICB3aXRoIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVC4KLSAgICAg
ICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIuM2UyIiB3aXRoIEVNSVRfVFJBSUxJ
TkdfWkVST19BRlRFUl9QT0lOVC4KLSAgICAgICAgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIoaW50
IGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbmZp
bml0eV9zeW1ib2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IG5hbl9zeW1ib2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZXhwb25l
bnRfY2hhcmFjdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVjaW1h
bF9pbl9zaG9ydGVzdF9sb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
ZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9l
c19pbl9wcmVjaXNpb25fbW9kZSkKLSAgICAgICAgOiBmbGFnc18oZmxhZ3MpLAotICAgICAgICBp
bmZpbml0eV9zeW1ib2xfKGluZmluaXR5X3N5bWJvbCksCi0gICAgICAgIG5hbl9zeW1ib2xfKG5h
bl9zeW1ib2wpLAotICAgICAgICBleHBvbmVudF9jaGFyYWN0ZXJfKGV4cG9uZW50X2NoYXJhY3Rl
ciksCi0gICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93XyhkZWNpbWFsX2luX3Nob3J0ZXN0
X2xvdyksCi0gICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaF8oZGVjaW1hbF9pbl9zaG9y
dGVzdF9oaWdoKSwKLSAgICAgICAgbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lz
aW9uX21vZGVfKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUpLAot
ICAgICAgICBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
eF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSkgewotICAgICAgICAg
ICAgLy8gV2hlbiAndHJhaWxpbmcgemVybyBhZnRlciB0aGUgcG9pbnQnIGlzIHNldCwgdGhlbiAn
dHJhaWxpbmcgcG9pbnQnCi0gICAgICAgICAgICAvLyBtdXN0IGJlIHNldCB0b28uCi0gICAgICAg
ICAgICBBU1NFUlQoKChmbGFncyAmIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVCkgIT0gMCkg
fHwKLSAgICAgICAgICAgICAgICAgICAhKChmbGFncyAmIEVNSVRfVFJBSUxJTkdfWkVST19BRlRF
Ul9QT0lOVCkgIT0gMCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBSZXR1cm5z
IGEgY29udmVydGVyIGZvbGxvd2luZyB0aGUgRWNtYVNjcmlwdCBzcGVjaWZpY2F0aW9uLgotICAg
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGNvbnN0IERvdWJsZVRvU3RyaW5nQ29udmVy
dGVyJiBFY21hU2NyaXB0Q29udmVydGVyKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBDb21wdXRl
cyB0aGUgc2hvcnRlc3Qgc3RyaW5nIG9mIGRpZ2l0cyB0aGF0IGNvcnJlY3RseSByZXByZXNlbnQg
dGhlIGlucHV0Ci0gICAgICAgIC8vIG51bWJlci4gRGVwZW5kaW5nIG9uIGRlY2ltYWxfaW5fc2hv
cnRlc3RfbG93IGFuZCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2gKLSAgICAgICAgLy8gKHNlZSBj
b25zdHJ1Y3RvcikgaXQgdGhlbiBlaXRoZXIgcmV0dXJucyBhIGRlY2ltYWwgcmVwcmVzZW50YXRp
b24sIG9yIGFuCi0gICAgICAgIC8vIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uLgotICAgICAg
ICAvLyBFeGFtcGxlIHdpdGggZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3cgPSAtNiwKLSAgICAgICAg
Ly8gICAgICAgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaCA9IDIxLAotICAgICAgICAv
LyAgICAgICAgICAgICAgRU1JVF9QT1NJVElWRV9FWFBPTkVOVF9TSUdOIGFjdGl2YXRlZCwgYW5k
Ci0gICAgICAgIC8vICAgICAgICAgICAgICBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgZGVh
Y3RpdmVkOgotICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMC4wMDAwMDEpICAtPiAiMC4wMDAwMDEi
Ci0gICAgICAgIC8vICAgVG9TaG9ydGVzdCgwLjAwMDAwMDEpIC0+ICIxZS03IgotICAgICAgICAv
LyAgIFRvU2hvcnRlc3QoMTExMTExMTExMTExMTExMTExMTExLjApICAtPiAiMTExMTExMTExMTEx
MTExMTEwMDAwIgotICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMTAwMDAwMDAwMDAwMDAwMDAwMDAw
LjApICAtPiAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwIgotICAgICAgICAvLyAgIFRvU2hvcnRlc3Qo
MTExMTExMTExMTExMTExMTExMTExMS4wKSAtPiAiMS4xMTExMTExMTExMTExMTExZSsyMSIKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gTm90ZTogdGhlIGNvbnZlcnNpb24gbWF5IHJvdW5kIHRoZSBv
dXRwdXQgaWYgdGhlIHJldHVybmVkIHN0cmluZwotICAgICAgICAvLyBpcyBhY2N1cmF0ZSBlbm91
Z2ggdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGlucHV0LW51bWJlci4KLSAgICAgICAgLy8gRm9y
IGV4YW1wbGUgdGhlIG1vc3QgcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG91YmxlIDll
NTkgZXF1YWxzCi0gICAgICAgIC8vICI4OTk5OTk5OTk5OTk5OTk5MTg3NjcyMjk0NDk3MTc2MTk5
NTM4MTAxMzEyNzM2NzQ2OTA2NTYyMDY4NDgiLCBidXQKLSAgICAgICAgLy8gdGhlIGNvbnZlcnRl
ciB3aWxsIHJldHVybiB0aGUgc2hvcnRlciAoYnV0IHN0aWxsIGNvcnJlY3QpICI5ZTU5Ii4KLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb252ZXJzaW9uIHN1Y2Nl
ZWRzLiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKLSAgICAgICAgLy8gZXhjZXB0IHdo
ZW4gdGhlIGlucHV0IHZhbHVlIGlzIHNwZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvcgot
ICAgICAgICAvLyBuYW5fc3ltYm9sIGhhcyBiZWVuIGdpdmVuIHRvIHRoZSBjb25zdHJ1Y3Rvci4K
LSAgICAgICAgYm9vbCBUb1Nob3J0ZXN0KGRvdWJsZSB2YWx1ZSwgU3RyaW5nQnVpbGRlciogcmVz
dWx0X2J1aWxkZXIpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIC8vIENvbXB1
dGVzIGEgZGVjaW1hbCByZXByZXNlbnRhdGlvbiB3aXRoIGEgZml4ZWQgbnVtYmVyIG9mIGRpZ2l0
cyBhZnRlciB0aGUKLSAgICAgICAgLy8gZGVjaW1hbCBwb2ludC4gVGhlIGxhc3QgZW1pdHRlZCBk
aWdpdCBpcyByb3VuZGVkLgotICAgICAgICAvLwotICAgICAgICAvLyBFeGFtcGxlczoKLSAgICAg
ICAgLy8gICBUb0ZpeGVkKDMuMTIsIDEpIC0+ICIzLjEiCi0gICAgICAgIC8vICAgVG9GaXhlZCgz
LjE0MTUsIDMpIC0+ICIzLjE0MiIKLSAgICAgICAgLy8gICBUb0ZpeGVkKDEyMzQuNTY3ODksIDQp
IC0+ICIxMjM0LjU2NzkiCi0gICAgICAgIC8vICAgVG9GaXhlZCgxLjIzLCA1KSAtPiAiMS4yMzAw
MCIKLSAgICAgICAgLy8gICBUb0ZpeGVkKDAuMSwgNCkgLT4gIjAuMTAwMCIKLSAgICAgICAgLy8g
ICBUb0ZpeGVkKDFlMzAsIDIpIC0+ICIxMDAwMDAwMDAwMDAwMDAwMDE5ODg0NjI0ODM4NjU2LjAw
IgotICAgICAgICAvLyAgIFRvRml4ZWQoMC4xLCAzMCkgLT4gIjAuMTAwMDAwMDAwMDAwMDAwMDA1
NTUxMTE1MTIzMTI2IgotICAgICAgICAvLyAgIFRvRml4ZWQoMC4xLCAxNykgLT4gIjAuMTAwMDAw
MDAwMDAwMDAwMDEiCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIHJlcXVlc3RlZF9kaWdpdHMg
ZXF1YWxzIDAsIHRoZW4gdGhlIHRhaWwgb2YgdGhlIHJlc3VsdCBkZXBlbmRzIG9uCi0gICAgICAg
IC8vIHRoZSBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgYW5kIEVNSVRfVFJBSUxJTkdfWkVS
T19BRlRFUl9QT0lOVC4KLSAgICAgICAgLy8gRXhhbXBsZXMsIGZvciByZXF1ZXN0ZWRfZGlnaXRz
ID09IDAsCi0gICAgICAgIC8vICAgbGV0IEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVCBhbmQg
RU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UIGJlCi0gICAgICAgIC8vICAgIC0gZmFsc2Ug
YW5kIGZhbHNlOiB0aGVuIDEyMy40NSAtPiAxMjMKLSAgICAgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAuNjc4IC0+IDEKLSAgICAgICAgLy8gICAgLSB0cnVlIGFuZCBmYWxzZTog
dGhlbiAxMjMuNDUgLT4gMTIzLgotICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLjY3OCAtPiAxLgotICAgICAgICAvLyAgICAtIHRydWUgYW5kIHRydWU6IHRoZW4gMTIzLjQ1
IC0+IDEyMy4wCi0gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgMC42NzggLT4g
MS4wCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udmVyc2lv
biBzdWNjZWVkcy4gVGhlIGNvbnZlcnNpb24gYWx3YXlzIHN1Y2NlZWRzCi0gICAgICAgIC8vIGV4
Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKLSAgICAgICAgLy8gICAtIHRoZSBpbnB1dCB2
YWx1ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3IgbmFuX3N5bWJvbCBoYXMK
LSAgICAgICAgLy8gICAgIGJlZW4gcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLAotICAgICAg
ICAvLyAgIC0gJ3ZhbHVlJyA+IDEwXmtNYXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50LCBvcgotICAg
ICAgICAvLyAgIC0gJ3JlcXVlc3RlZF9kaWdpdHMnID4ga01heEZpeGVkRGlnaXRzQWZ0ZXJQb2lu
dC4KLSAgICAgICAgLy8gVGhlIGxhc3QgdHdvIGNvbmRpdGlvbnMgaW1wbHkgdGhhdCB0aGUgcmVz
dWx0IHdpbGwgbmV2ZXIgY29udGFpbiBtb3JlIHRoYW4KLSAgICAgICAgLy8gMSArIGtNYXhGaXhl
ZERpZ2l0c0JlZm9yZVBvaW50ICsgMSArIGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQgY2hhcmFj
dGVycwotICAgICAgICAvLyAob25lIGFkZGl0aW9uYWwgY2hhcmFjdGVyIGZvciB0aGUgc2lnbiwg
YW5kIG9uZSBmb3IgdGhlIGRlY2ltYWwgcG9pbnQpLgotICAgICAgICBib29sIFRvRml4ZWQoZG91
YmxlIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCi0g
ICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7
Ci0gICAgICAgIAotICAgICAgICAvLyBDb21wdXRlcyBhIHJlcHJlc2VudGF0aW9uIGluIGV4cG9u
ZW50aWFsIGZvcm1hdCB3aXRoIHJlcXVlc3RlZF9kaWdpdHMKLSAgICAgICAgLy8gYWZ0ZXIgdGhl
IGRlY2ltYWwgcG9pbnQuIFRoZSBsYXN0IGVtaXR0ZWQgZGlnaXQgaXMgcm91bmRlZC4KLSAgICAg
ICAgLy8gSWYgcmVxdWVzdGVkX2RpZ2l0cyBlcXVhbHMgLTEsIHRoZW4gdGhlIHNob3J0ZXN0IGV4
cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uCi0gICAgICAgIC8vIGlzIGNvbXB1dGVkLgotICAgICAg
ICAvLwotICAgICAgICAvLyBFeGFtcGxlcyB3aXRoIEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lH
TiBkZWFjdGl2YXRlZCwgYW5kCi0gICAgICAgIC8vICAgICAgICAgICAgICAgZXhwb25lbnRfY2hh
cmFjdGVyIHNldCB0byAnZScuCi0gICAgICAgIC8vICAgVG9FeHBvbmVudGlhbCgzLjEyLCAxKSAt
PiAiMy4xZTAiCi0gICAgICAgIC8vICAgVG9FeHBvbmVudGlhbCg1LjAsIDMpIC0+ICI1LjAwMGUw
IgotICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMC4wMDEsIDIpIC0+ICIxLjAwZS0zIgotICAg
ICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMy4xNDE1LCAtMSkgLT4gIjMuMTQxNWUwIgotICAgICAg
ICAvLyAgIFRvRXhwb25lbnRpYWwoMy4xNDE1LCA0KSAtPiAiMy4xNDE1ZTAiCi0gICAgICAgIC8v
ICAgVG9FeHBvbmVudGlhbCgzLjE0MTUsIDMpIC0+ICIzLjE0MmUwIgotICAgICAgICAvLyAgIFRv
RXhwb25lbnRpYWwoMTIzNDU2Nzg5MDAwMDAwLCAzKSAtPiAiMS4yMzVlMTQiCi0gICAgICAgIC8v
ICAgVG9FeHBvbmVudGlhbCgxMDAwMDAwMDAwMDAwMDAwMDE5ODg0NjI0ODM4NjU2LjAsIC0xKSAt
PiAiMWUzMCIKLSAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDEwMDAwMDAwMDAwMDAwMDAwMTk4
ODQ2MjQ4Mzg2NTYuMCwgMzIpIC0+Ci0gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIjEu
MDAwMDAwMDAwMDAwMDAwMDE5ODg0NjI0ODM4NjU2MDBlMzAiCi0gICAgICAgIC8vICAgVG9FeHBv
bmVudGlhbCgxMjM0LCAwKSAtPiAiMWUzIgotICAgICAgICAvLwotICAgICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIGNvbnZlcnNpb24gc3VjY2VlZHMuIFRoZSBjb252ZXJzaW9uIGFsd2F5cyBz
dWNjZWVkcwotICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6Ci0gICAg
ICAgIC8vICAgLSB0aGUgaW5wdXQgdmFsdWUgaXMgc3BlY2lhbCBhbmQgbm8gaW5maW5pdHlfc3lt
Ym9sIG9yIG5hbl9zeW1ib2wgaGFzCi0gICAgICAgIC8vICAgICBiZWVuIHByb3ZpZGVkIHRvIHRo
ZSBjb25zdHJ1Y3RvciwKLSAgICAgICAgLy8gICAtICdyZXF1ZXN0ZWRfZGlnaXRzJyA+IGtNYXhF
eHBvbmVudGlhbERpZ2l0cy4KLSAgICAgICAgLy8gVGhlIGxhc3QgY29uZGl0aW9uIGltcGxpZXMg
dGhhdCB0aGUgcmVzdWx0IHdpbGwgbmV2ZXIgY29udGFpbiBtb3JlIHRoYW4KLSAgICAgICAgLy8g
a01heEV4cG9uZW50aWFsRGlnaXRzICsgOCBjaGFyYWN0ZXJzICh0aGUgc2lnbiwgdGhlIGRpZ2l0
IGJlZm9yZSB0aGUKLSAgICAgICAgLy8gZGVjaW1hbCBwb2ludCwgdGhlIGRlY2ltYWwgcG9pbnQs
IHRoZSBleHBvbmVudCBjaGFyYWN0ZXIsIHRoZQotICAgICAgICAvLyBleHBvbmVudCdzIHNpZ24s
IGFuZCBhdCBtb3N0IDMgZXhwb25lbnQgZGlnaXRzKS4KLSAgICAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIGJvb2wgVG9FeHBvbmVudGlhbChkb3VibGUgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAg
IC8vIENvbXB1dGVzICdwcmVjaXNpb24nIGxlYWRpbmcgZGlnaXRzIG9mIHRoZSBnaXZlbiAndmFs
dWUnIGFuZCByZXR1cm5zIHRoZW0KLSAgICAgICAgLy8gZWl0aGVyIGluIGV4cG9uZW50aWFsIG9y
IGRlY2ltYWwgZm9ybWF0LCBkZXBlbmRpbmcgb24KLSAgICAgICAgLy8gbWF4X3tsZWFkaW5nfHRy
YWlsaW5nfV9wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSAoZ2l2ZW4gdG8gdGhlCi0g
ICAgICAgIC8vIGNvbnN0cnVjdG9yKS4KLSAgICAgICAgLy8gVGhlIGxhc3QgY29tcHV0ZWQgZGln
aXQgaXMgcm91bmRlZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRXhhbXBsZSB3aXRoIG1heF9s
ZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlID0gNi4KLSAgICAgICAgLy8g
ICBUb1ByZWNpc2lvbigwLjAwMDAwMTIzNDUsIDIpIC0+ICIwLjAwMDAwMTIiCi0gICAgICAgIC8v
ICAgVG9QcmVjaXNpb24oMC4wMDAwMDAxMjM0NSwgMikgLT4gIjEuMmUtNyIKLSAgICAgICAgLy8g
U2ltaWxhcmlseSB0aGUgY29udmVydGVyIG1heSBhZGQgdXAgdG8KLSAgICAgICAgLy8gbWF4X3Ry
YWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlIGluIHByZWNpc2lvbiBtb2Rl
IHRvIGF2b2lkCi0gICAgICAgIC8vIHJldHVybmluZyBhbiBleHBvbmVudGlhbCByZXByZXNlbnRh
dGlvbi4gQSB6ZXJvIGFkZGVkIGJ5IHRoZQotICAgICAgICAvLyBFTUlUX1RSQUlMSU5HX1pFUk9f
QUZURVJfUE9JTlQgZmxhZyBpcyBjb3VudGVkIGZvciB0aGlzIGxpbWl0LgotICAgICAgICAvLyBF
eGFtcGxlcyBmb3IgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2Rl
ID0gMToKLSAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIzMCIKLSAgICAg
ICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIzMC4iICB3aXRoIEVNSVRfVFJBSUxJ
TkdfREVDSU1BTF9QT0lOVC4KLSAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4g
IjIuM2UyIiB3aXRoIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVC4KLSAgICAgICAgLy8g
RXhhbXBsZXMgZm9yIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9k
ZSA9IDMsIGFuZCBubwotICAgICAgICAvLyAgICBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9J
TlQ6Ci0gICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDYpIC0+ICIxMjM0NTAiCi0g
ICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDUpIC0+ICIxMjM0NTAiCi0gICAgICAg
IC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDQpIC0+ICIxMjM1MDAiCi0gICAgICAgIC8vICAg
VG9QcmVjaXNpb24oMTIzNDUwLjAsIDMpIC0+ICIxMjMwMDAiCi0gICAgICAgIC8vICAgVG9QcmVj
aXNpb24oMTIzNDUwLjAsIDIpIC0+ICIxLjJlNSIKLSAgICAgICAgLy8KLSAgICAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBjb252ZXJzaW9uIHN1Y2NlZWRzLiBUaGUgY29udmVyc2lvbiBhbHdh
eXMgc3VjY2VlZHMKLSAgICAgICAgLy8gZXhjZXB0IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOgot
ICAgICAgICAvLyAgIC0gdGhlIGlucHV0IHZhbHVlIGlzIHNwZWNpYWwgYW5kIG5vIGluZmluaXR5
X3N5bWJvbCBvciBuYW5fc3ltYm9sIGhhcwotICAgICAgICAvLyAgICAgYmVlbiBwcm92aWRlZCB0
byB0aGUgY29uc3RydWN0b3IsCi0gICAgICAgIC8vICAgLSBwcmVjaXNpb24gPCBrTWluUGVyaWNp
c2lvbkRpZ2l0cwotICAgICAgICAvLyAgIC0gcHJlY2lzaW9uID4ga01heFByZWNpc2lvbkRpZ2l0
cwotICAgICAgICAvLyBUaGUgbGFzdCBjb25kaXRpb24gaW1wbGllcyB0aGF0IHRoZSByZXN1bHQg
d2lsbCBuZXZlciBjb250YWluIG1vcmUgdGhhbgotICAgICAgICAvLyBrTWF4UHJlY2lzaW9uRGln
aXRzICsgNyBjaGFyYWN0ZXJzICh0aGUgc2lnbiwgdGhlIGRlY2ltYWwgcG9pbnQsIHRoZQotICAg
ICAgICAvLyBleHBvbmVudCBjaGFyYWN0ZXIsIHRoZSBleHBvbmVudCdzIHNpZ24sIGFuZCBhdCBt
b3N0IDMgZXhwb25lbnQgZGlnaXRzKS4KLSAgICAgICAgYm9vbCBUb1ByZWNpc2lvbihkb3VibGUg
dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWNpc2lvbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7Ci0g
ICAgICAgIAotICAgICAgICBlbnVtIER0b2FNb2RlIHsKLSAgICAgICAgICAgIC8vIFByb2R1Y2Ug
dGhlIHNob3J0ZXN0IGNvcnJlY3QgcmVwcmVzZW50YXRpb24uCi0gICAgICAgICAgICAvLyBGb3Ig
ZXhhbXBsZSB0aGUgb3V0cHV0IG9mIDAuMjk5OTk5OTk5OTk5OTk5OTg4ODk3IGlzICh0aGUgbGVz
cyBhY2N1cmF0ZQotICAgICAgICAgICAgLy8gYnV0IGNvcnJlY3QpIDAuMy4KLSAgICAgICAgICAg
IFNIT1JURVNULAotICAgICAgICAgICAgLy8gUHJvZHVjZSBhIGZpeGVkIG51bWJlciBvZiBkaWdp
dHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCi0gICAgICAgICAgICAvLyBGb3IgaW5zdGFuY2Ug
Zml4ZWQoMC4xLCA0KSBiZWNvbWVzIDAuMTAwMAotICAgICAgICAgICAgLy8gSWYgdGhlIGlucHV0
IG51bWJlciBpcyBiaWcsIHRoZSBvdXRwdXQgd2lsbCBiZSBiaWcuCi0gICAgICAgICAgICBGSVhF
RCwKLSAgICAgICAgICAgIC8vIEZpeGVkIG51bWJlciBvZiBkaWdpdHMgKGluZGVwZW5kZW50IG9m
IHRoZSBkZWNpbWFsIHBvaW50KS4KLSAgICAgICAgICAgIFBSRUNJU0lPTgotICAgICAgICB9Owot
ICAgICAgICAKLSAgICAgICAgLy8gVGhlIG1heGltYWwgbnVtYmVyIG9mIGRpZ2l0cyB0aGF0IGFy
ZSBuZWVkZWQgdG8gZW1pdCBhIGRvdWJsZSBpbiBiYXNlIDEwLgotICAgICAgICAvLyBBIGhpZ2hl
ciBwcmVjaXNpb24gY2FuIGJlIGFjaGlldmVkIGJ5IHVzaW5nIG1vcmUgZGlnaXRzLCBidXQgdGhl
IHNob3J0ZXN0Ci0gICAgICAgIC8vIGFjY3VyYXRlIHJlcHJlc2VudGF0aW9uIG9mIGFueSBkb3Vi
bGUgd2lsbCBuZXZlciB1c2UgbW9yZSBkaWdpdHMgdGhhbgotICAgICAgICAvLyBrQmFzZTEwTWF4
aW1hbExlbmd0aC4KLSAgICAgICAgLy8gTm90ZSB0aGF0IERvdWJsZVRvQXNjaWkgbnVsbC10ZXJt
aW5hdGVzIGl0cyBpbnB1dC4gU28gdGhlIGdpdmVuIGJ1ZmZlcgotICAgICAgICAvLyBzaG91bGQg
YmUgYXQgbGVhc3Qga0Jhc2UxME1heGltYWxMZW5ndGggKyAxIGNoYXJhY3RlcnMgbG9uZy4KLSAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBrQmFzZTEwTWF4aW1hbExlbmd0aCA9IDE3OwotICAgICAg
ICAKLSAgICAgICAgLy8gQ29udmVydHMgdGhlIGdpdmVuIGRvdWJsZSAndicgdG8gYXNjaWkuCi0g
ICAgICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJ1ZmZlciAqIDEw
Xihwb2ludC1sZW5ndGgpLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgb3V0cHV0IGRlcGVu
ZHMgb24gdGhlIGdpdmVuIG1vZGU6Ci0gICAgICAgIC8vICAtIFNIT1JURVNUOiBwcm9kdWNlIHRo
ZSBsZWFzdCBhbW91bnQgb2YgZGlnaXRzIGZvciB3aGljaCB0aGUgaW50ZXJuYWwKLSAgICAgICAg
Ly8gICBpZGVudGl0eSByZXF1aXJlbWVudCBpcyBzdGlsbCBzYXRpc2ZpZWQuIElmIHRoZSBkaWdp
dHMgYXJlIHByaW50ZWQKLSAgICAgICAgLy8gICAodG9nZXRoZXIgd2l0aCB0aGUgY29ycmVjdCBl
eHBvbmVudCkgdGhlbiByZWFkaW5nIHRoaXMgbnVtYmVyIHdpbGwgZ2l2ZQotICAgICAgICAvLyAg
ICd2JyBhZ2Fpbi4gVGhlIGJ1ZmZlciB3aWxsIGNob29zZSB0aGUgcmVwcmVzZW50YXRpb24gdGhh
dCBpcyBjbG9zZXN0IHRvCi0gICAgICAgIC8vICAgJ3YnLiBJZiB0aGVyZSBhcmUgdHdvIGF0IHRo
ZSBzYW1lIGRpc3RhbmNlLCB0aGFuIHRoZSBvbmUgZmFydGhlciBhd2F5Ci0gICAgICAgIC8vICAg
ZnJvbSAwIGlzIGNob3NlbiAoaGFsZndheSBjYXNlcyAtIGVuZGluZyB3aXRoIDUgLSBhcmUgcm91
bmRlZCB1cCkuCi0gICAgICAgIC8vICAgSW4gdGhpcyBtb2RlIHRoZSAncmVxdWVzdGVkX2RpZ2l0
cycgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCi0gICAgICAgIC8vICAtIEZJWEVEOiBwcm9kdWNlcyBk
aWdpdHMgbmVjZXNzYXJ5IHRvIHByaW50IGEgZ2l2ZW4gbnVtYmVyIHdpdGgKLSAgICAgICAgLy8g
ICAncmVxdWVzdGVkX2RpZ2l0cycgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiBUaGUg
cHJvZHVjZWQgZGlnaXRzCi0gICAgICAgIC8vICAgbWlnaHQgYmUgdG9vIHNob3J0IGluIHdoaWNo
IGNhc2UgdGhlIGNhbGxlciBoYXMgdG8gZmlsbCB0aGUgcmVtYWluZGVyCi0gICAgICAgIC8vICAg
d2l0aCAnMCdzLgotICAgICAgICAvLyAgIEV4YW1wbGU6IHRvRml4ZWQoMC4wMDEsIDUpIGlzIGFs
bG93ZWQgdG8gcmV0dXJuIGJ1ZmZlcj0iMSIsIHBvaW50PS0yLgotICAgICAgICAvLyAgIEhhbGZ3
YXkgY2FzZXMgYXJlIHJvdW5kZWQgdG93YXJkcyArLy1JbmZpbml0eSAoYXdheSBmcm9tIDApLiBU
aGUgY2FsbAotICAgICAgICAvLyAgIHRvRml4ZWQoMC4xNSwgMikgdGh1cyByZXR1cm5zIGJ1ZmZl
cj0iMiIsIHBvaW50PTAuCi0gICAgICAgIC8vICAgVGhlIHJldHVybmVkIGJ1ZmZlciBtYXkgY29u
dGFpbiBkaWdpdHMgdGhhdCB3b3VsZCBiZSB0cnVuY2F0ZWQgZnJvbSB0aGUKLSAgICAgICAgLy8g
ICBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQuCi0gICAgICAgIC8vICAtIFBS
RUNJU0lPTjogcHJvZHVjZXMgJ3JlcXVlc3RlZF9kaWdpdHMnIHdoZXJlIHRoZSBmaXJzdCBkaWdp
dCBpcyBub3QgJzAnLgotICAgICAgICAvLyAgIEV2ZW4gdGhvdWdoIHRoZSBsZW5ndGggb2YgcHJv
ZHVjZWQgZGlnaXRzIHVzdWFsbHkgZXF1YWxzCi0gICAgICAgIC8vICAgJ3JlcXVlc3RlZF9kaWdp
dHMnLCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byByZXR1cm4gZmV3ZXIgZGlnaXRzLCBpbgot
ICAgICAgICAvLyAgIHdoaWNoIGNhc2UgdGhlIGNhbGxlciBoYXMgdG8gZmlsbCB0aGUgbWlzc2lu
ZyBkaWdpdHMgd2l0aCAnMCdzLgotICAgICAgICAvLyAgIEhhbGZ3YXkgY2FzZXMgYXJlIGFnYWlu
IHJvdW5kZWQgYXdheSBmcm9tIDAuCi0gICAgICAgIC8vIERvdWJsZVRvQXNjaWkgZXhwZWN0cyB0
aGUgZ2l2ZW4gYnVmZmVyIHRvIGJlIGJpZyBlbm91Z2ggdG8gaG9sZCBhbGwKLSAgICAgICAgLy8g
ZGlnaXRzIGFuZCBhIHRlcm1pbmF0aW5nIG51bGwtY2hhcmFjdGVyLiBJbiBTSE9SVEVTVC1tb2Rl
IGl0IGV4cGVjdHMgYQotICAgICAgICAvLyBidWZmZXIgb2YgYXQgbGVhc3Qga0Jhc2UxME1heGlt
YWxMZW5ndGggKyAxLiBJbiBhbGwgb3RoZXIgbW9kZXMgdGhlCi0gICAgICAgIC8vIHJlcXVlc3Rl
ZF9kaWdpdHMgcGFyYW1ldGVyICgrIDEgZm9yIHRoZSBudWxsLWNoYXJhY3RlcikgbGltaXRzIHRo
ZSBzaXplIG9mCi0gICAgICAgIC8vIHRoZSBvdXRwdXQuIFRoZSBnaXZlbiBsZW5ndGggaXMgb25s
eSB1c2VkIGluIGRlYnVnIG1vZGUgdG8gZW5zdXJlIHRoZQotICAgICAgICAvLyBidWZmZXIgaXMg
YmlnIGVub3VnaC4KLSAgICAgICAgc3RhdGljIHZvaWQgRG91YmxlVG9Bc2NpaShkb3VibGUgdiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdG9hTW9kZSBtb2RlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmZlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgYnVmZmVyX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sKiBzaWduLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCogbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCogcG9pbnQpOwotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICAvLyBJZiB0aGUgdmFs
dWUgaXMgYSBzcGVjaWFsIHZhbHVlIChOYU4gb3IgSW5maW5pdHkpIGNvbnN0cnVjdHMgdGhlCi0g
ICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nIHVzaW5nIHRoZSBjb25maWd1cmVkIGluZmlu
aXR5L25hbi1zeW1ib2wuCi0gICAgICAgIC8vIElmIGVpdGhlciBvZiB0aGVtIGlzIE5VTEwgb3Ig
dGhlIHZhbHVlIGlzIG5vdCBzcGVjaWFsIHRoZW4gdGhlCi0gICAgICAgIC8vIGZ1bmN0aW9uIHJl
dHVybnMgZmFsc2UuCi0gICAgICAgIGJvb2wgSGFuZGxlU3BlY2lhbFZhbHVlcyhkb3VibGUgdmFs
dWUsIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKLSAgICAgICAgLy8gQ29u
c3RydWN0cyBhbiBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbiAoaS5lLiAxLjIzNGU1NikuCi0g
ICAgICAgIC8vIFRoZSBnaXZlbiBleHBvbmVudCBhc3N1bWVzIGEgZGVjaW1hbCBwb2ludCBhZnRl
ciB0aGUgZmlyc3QgZGVjaW1hbCBkaWdpdC4KLSAgICAgICAgdm9pZCBDcmVhdGVFeHBvbmVudGlh
bFJlcHJlc2VudGF0aW9uKGNvbnN0IGNoYXIqIGRlY2ltYWxfZGlnaXRzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3Vs
dF9idWlsZGVyKSBjb25zdDsKLSAgICAgICAgLy8gQ3JlYXRlcyBhIGRlY2ltYWwgcmVwcmVzZW50
YXRpb24gKGkuZSAxMjM0LjU2NzgpLgotICAgICAgICB2b2lkIENyZWF0ZURlY2ltYWxSZXByZXNl
bnRhdGlvbihjb25zdCBjaGFyKiBkZWNpbWFsX2RpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdHNfYWZ0ZXJfcG9pbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWls
ZGVyKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGludCBmbGFnc187Ci0gICAgICAg
IGNvbnN0IGNoYXIqIGNvbnN0IGluZmluaXR5X3N5bWJvbF87Ci0gICAgICAgIGNvbnN0IGNoYXIq
IGNvbnN0IG5hbl9zeW1ib2xfOwotICAgICAgICBjb25zdCBjaGFyIGV4cG9uZW50X2NoYXJhY3Rl
cl87Ci0gICAgICAgIGNvbnN0IGludCBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvd187Ci0gICAgICAg
IGNvbnN0IGludCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2hfOwotICAgICAgICBjb25zdCBpbnQg
bWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfOwotICAgICAgICBj
b25zdCBpbnQgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlXzsK
LSAgICAgICAgCi0gICAgICAgIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhEb3VibGVU
b1N0cmluZ0NvbnZlcnRlcik7Ci0gICAgfTsKLSAgICAKLSAgICAKLSAgICBjbGFzcyBTdHJpbmdU
b0RvdWJsZUNvbnZlcnRlciB7Ci0gICAgcHVibGljOgotICAgICAgICAvLyBQZXJmb3JtcyB0aGUg
Y29udmVyc2lvbi4KLSAgICAgICAgLy8gVGhlIG91dHB1dCBwYXJhbWV0ZXIgJ3Byb2Nlc3NlZF9j
aGFyYWN0ZXJzX2NvdW50JyBpcyBzZXQgdG8gdGhlIG51bWJlcgotICAgICAgICAvLyBvZiBjaGFy
YWN0ZXJzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZCB0byByZWFkIHRoZSBudW1iZXIuCi0gICAg
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgZG91YmxlIFN0cmluZ1RvRG91YmxlKGNvbnN0
IGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90KiBwcm9jZXNzZWRfY2hhcmFjdGVy
c19jb3VudCk7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIERJU0FMTE9XX0lNUExJ
Q0lUX0NPTlNUUlVDVE9SUyhTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcik7Ci0gICAgfTsKLSAgICAK
LX0gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgotCi19IC8vIG5hbWVzcGFjZSBXVEYK
LQotI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9ET1VCTEVfQ09OVkVSU0lPTl9IXwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2EvZG91YmxlLmgg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZHRvYS9kb3VibGUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU0NGZkYjVhODE3ZmE4MjE2YjNlMzFlNjVhMzE5MTJm
MDc4NzIyNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZHRvYS9kb3VibGUuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDI0OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBh
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LS8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCi0vLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLS8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5k
ZWYgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0hfCi0jZGVmaW5lIERPVUJMRV9DT05WRVJTSU9O
X0RPVUJMRV9IXwotCi0jaW5jbHVkZSAiZGl5LWZwLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotCi1u
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24gewotICAgIAotICAgIC8vIFdlIGFzc3VtZSB0aGF0
IGRvdWJsZXMgYW5kIHVpbnQ2NF90IGhhdmUgdGhlIHNhbWUgZW5kaWFubmVzcy4KLSAgICBzdGF0
aWMgdWludDY0X3QgZG91YmxlX3RvX3VpbnQ2NChkb3VibGUgZCkgeyByZXR1cm4gQml0Q2FzdDx1
aW50NjRfdD4oZCk7IH0KLSAgICBzdGF0aWMgZG91YmxlIHVpbnQ2NF90b19kb3VibGUodWludDY0
X3QgZDY0KSB7IHJldHVybiBCaXRDYXN0PGRvdWJsZT4oZDY0KTsgfQotICAgIAotICAgIC8vIEhl
bHBlciBmdW5jdGlvbnMgZm9yIGRvdWJsZXMuCi0gICAgY2xhc3MgRG91YmxlIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrU2lnbk1hc2sgPSBVSU5UNjRfMlBB
UlRfQygweDgwMDAwMDAwLCAwMDAwMDAwMCk7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRf
dCBrRXhwb25lbnRNYXNrID0gVUlOVDY0XzJQQVJUX0MoMHg3RkYwMDAwMCwgMDAwMDAwMDApOwot
ICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qga1NpZ25pZmljYW5kTWFzayA9IFVJTlQ2NF8y
UEFSVF9DKDB4MDAwRkZGRkYsIEZGRkZGRkZGKTsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2
NF90IGtIaWRkZW5CaXQgPSBVSU5UNjRfMlBBUlRfQygweDAwMTAwMDAwLCAwMDAwMDAwMCk7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQga1BoeXNpY2FsU2lnbmlmaWNhbmRTaXplID0gNTI7ICAv
LyBFeGNsdWRlcyB0aGUgaGlkZGVuIGJpdC4KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBrU2ln
bmlmaWNhbmRTaXplID0gNTM7Ci0gICAgICAgIAotICAgICAgICBEb3VibGUoKSA6IGQ2NF8oMCkg
e30KLSAgICAgICAgZXhwbGljaXQgRG91YmxlKGRvdWJsZSBkKSA6IGQ2NF8oZG91YmxlX3RvX3Vp
bnQ2NChkKSkge30KLSAgICAgICAgZXhwbGljaXQgRG91YmxlKHVpbnQ2NF90IGQ2NCkgOiBkNjRf
KGQ2NCkge30KLSAgICAgICAgZXhwbGljaXQgRG91YmxlKERpeUZwIGRpeV9mcCkKLSAgICAgICAg
OiBkNjRfKERpeUZwVG9VaW50NjQoZGl5X2ZwKSkge30KLSAgICAgICAgCi0gICAgICAgIC8vIFRo
ZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91YmxlIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0
byArMC4wLgotICAgICAgICAvLyBJdCBtdXN0IG5vdCBiZSBzcGVjaWFsIChpbmZpbml0eSwgb3Ig
TmFOKS4KLSAgICAgICAgRGl5RnAgQXNEaXlGcCgpIGNvbnN0IHsKLSAgICAgICAgICAgIEFTU0VS
VChTaWduKCkgPiAwKTsKLSAgICAgICAgICAgIEFTU0VSVCghSXNTcGVjaWFsKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIERpeUZwKFNpZ25pZmljYW5kKCksIEV4cG9uZW50KCkpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgdmFsdWUgZW5jb2RlZCBieSB0aGlzIERvdWJsZSBt
dXN0IGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAwLgotICAgICAgICBEaXlGcCBBc05vcm1hbGl6
ZWREaXlGcCgpIGNvbnN0IHsKLSAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSgpID4gMC4wKTsKLSAg
ICAgICAgICAgIHVpbnQ2NF90IGYgPSBTaWduaWZpY2FuZCgpOwotICAgICAgICAgICAgaW50IGUg
PSBFeHBvbmVudCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUaGUgY3VycmVudCBk
b3VibGUgY291bGQgYmUgYSBkZW5vcm1hbC4KLSAgICAgICAgICAgIHdoaWxlICgoZiAmIGtIaWRk
ZW5CaXQpID09IDApIHsKLSAgICAgICAgICAgICAgICBmIDw8PSAxOwotICAgICAgICAgICAgICAg
IGUtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIERvIHRoZSBmaW5hbCBzaGlmdHMg
aW4gb25lIGdvLgotICAgICAgICAgICAgZiA8PD0gRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgLSBr
U2lnbmlmaWNhbmRTaXplOwotICAgICAgICAgICAgZSAtPSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6
ZSAtIGtTaWduaWZpY2FuZFNpemU7Ci0gICAgICAgICAgICByZXR1cm4gRGl5RnAoZiwgZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFJldHVybnMgdGhlIGRvdWJsZSdzIGJpdCBh
cyB1aW50NjQuCi0gICAgICAgIHVpbnQ2NF90IEFzVWludDY0KCkgY29uc3QgewotICAgICAgICAg
ICAgcmV0dXJuIGQ2NF87Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFJldHVybnMg
dGhlIG5leHQgZ3JlYXRlciBkb3VibGUuIFJldHVybnMgK2luZmluaXR5IG9uIGlucHV0ICtpbmZp
bml0eS4KLSAgICAgICAgZG91YmxlIE5leHREb3VibGUoKSBjb25zdCB7Ci0gICAgICAgICAgICBp
ZiAoZDY0XyA9PSBrSW5maW5pdHkpIHJldHVybiBEb3VibGUoa0luZmluaXR5KS52YWx1ZSgpOwot
ICAgICAgICAgICAgaWYgKFNpZ24oKSA8IDAgJiYgU2lnbmlmaWNhbmQoKSA9PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gLTAuMAotICAgICAgICAgICAgICAgIHJldHVybiAwLjA7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoU2lnbigpIDwgMCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBEb3VibGUoZDY0XyAtIDEpLnZhbHVlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIHJldHVybiBEb3VibGUoZDY0XyArIDEpLnZhbHVlKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGludCBFeHBvbmVudCgpIGNvbnN0IHsK
LSAgICAgICAgICAgIGlmIChJc0Rlbm9ybWFsKCkpIHJldHVybiBrRGVub3JtYWxFeHBvbmVudDsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsKLSAg
ICAgICAgICAgIGludCBiaWFzZWRfZSA9Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KChk
NjQgJiBrRXhwb25lbnRNYXNrKSA+PiBrUGh5c2ljYWxTaWduaWZpY2FuZFNpemUpOwotICAgICAg
ICAgICAgcmV0dXJuIGJpYXNlZF9lIC0ga0V4cG9uZW50QmlhczsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgdWludDY0X3QgU2lnbmlmaWNhbmQoKSBjb25zdCB7Ci0gICAgICAgICAgICB1
aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgpOwotICAgICAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNh
bmQgPSBkNjQgJiBrU2lnbmlmaWNhbmRNYXNrOwotICAgICAgICAgICAgaWYgKCFJc0Rlbm9ybWFs
KCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2lnbmlmaWNhbmQgKyBrSGlkZGVuQml0Owot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2lnbmlmaWNhbmQ7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgZG91YmxlIGlzIGEgZGVub3JtYWwuCi0gICAgICAgIGJvb2wgSXNEZW5vcm1h
bCgpIGNvbnN0IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7Ci0gICAg
ICAgICAgICByZXR1cm4gKGQ2NCAmIGtFeHBvbmVudE1hc2spID09IDA7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIC8vIFdlIGNvbnNpZGVyIGRlbm9ybWFscyBub3QgdG8gYmUgc3BlY2lh
bC4KLSAgICAgICAgLy8gSGVuY2Ugb25seSBJbmZpbml0eSBhbmQgTmFOIGFyZSBzcGVjaWFsLgot
ICAgICAgICBib29sIElzU3BlY2lhbCgpIGNvbnN0IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGQ2
NCA9IEFzVWludDY0KCk7Ci0gICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtFeHBvbmVudE1hc2sp
ID09IGtFeHBvbmVudE1hc2s7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgSXNO
YW4oKSBjb25zdCB7Ci0gICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgpOwotICAg
ICAgICAgICAgcmV0dXJuICgoZDY0ICYga0V4cG9uZW50TWFzaykgPT0ga0V4cG9uZW50TWFzaykg
JiYKLSAgICAgICAgICAgICgoZDY0ICYga1NpZ25pZmljYW5kTWFzaykgIT0gMCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgSXNJbmZpbml0ZSgpIGNvbnN0IHsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7Ci0gICAgICAgICAgICByZXR1cm4gKChkNjQg
JiBrRXhwb25lbnRNYXNrKSA9PSBrRXhwb25lbnRNYXNrKSAmJgotICAgICAgICAgICAgKChkNjQg
JiBrU2lnbmlmaWNhbmRNYXNrKSA9PSAwKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aW50IFNpZ24oKSBjb25zdCB7Ci0gICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgp
OwotICAgICAgICAgICAgcmV0dXJuIChkNjQgJiBrU2lnbk1hc2spID09IDA/IDE6IC0xOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBQcmVjb25kaXRpb246IHRoZSB2YWx1ZSBlbmNv
ZGVkIGJ5IHRoaXMgRG91YmxlIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbAotICAgICAgICAvLyB0
aGFuICswLjAuCi0gICAgICAgIERpeUZwIFVwcGVyQm91bmRhcnkoKSBjb25zdCB7Ci0gICAgICAg
ICAgICBBU1NFUlQoU2lnbigpID4gMCk7Ci0gICAgICAgICAgICByZXR1cm4gRGl5RnAoU2lnbmlm
aWNhbmQoKSAqIDIgKyAxLCBFeHBvbmVudCgpIC0gMSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIC8vIENvbXB1dGVzIHRoZSB0d28gYm91bmRhcmllcyBvZiB0aGlzLgotICAgICAgICAv
LyBUaGUgYmlnZ2VyIGJvdW5kYXJ5IChtX3BsdXMpIGlzIG5vcm1hbGl6ZWQuIFRoZSBsb3dlciBi
b3VuZGFyeSBoYXMgdGhlIHNhbWUKLSAgICAgICAgLy8gZXhwb25lbnQgYXMgbV9wbHVzLgotICAg
ICAgICAvLyBQcmVjb25kaXRpb246IHRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91YmxlIG11
c3QgYmUgZ3JlYXRlciB0aGFuIDAuCi0gICAgICAgIHZvaWQgTm9ybWFsaXplZEJvdW5kYXJpZXMo
RGl5RnAqIG91dF9tX21pbnVzLCBEaXlGcCogb3V0X21fcGx1cykgY29uc3QgewotICAgICAgICAg
ICAgQVNTRVJUKHZhbHVlKCkgPiAwLjApOwotICAgICAgICAgICAgRGl5RnAgdiA9IHRoaXMtPkFz
RGl5RnAoKTsKLSAgICAgICAgICAgIGJvb2wgc2lnbmlmaWNhbmRfaXNfemVybyA9ICh2LmYoKSA9
PSBrSGlkZGVuQml0KTsKLSAgICAgICAgICAgIERpeUZwIG1fcGx1cyA9IERpeUZwOjpOb3JtYWxp
emUoRGl5RnAoKHYuZigpIDw8IDEpICsgMSwgdi5lKCkgLSAxKSk7Ci0gICAgICAgICAgICBEaXlG
cCBtX21pbnVzOwotICAgICAgICAgICAgaWYgKHNpZ25pZmljYW5kX2lzX3plcm8gJiYgdi5lKCkg
IT0ga0Rlbm9ybWFsRXhwb25lbnQpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgYm91bmRhcnkg
aXMgY2xvc2VyLiBUaGluayBvZiB2ID0gMTAwMGUxMCBhbmQgdi0gPSA5OTk5ZTkuCi0gICAgICAg
ICAgICAgICAgLy8gVGhlbiB0aGUgYm91bmRhcnkgKD09ICh2IC0gdi0pLzIpIGlzIG5vdCBqdXN0
IGF0IGEgZGlzdGFuY2Ugb2YgMWU5IGJ1dAotICAgICAgICAgICAgICAgIC8vIGF0IGEgZGlzdGFu
Y2Ugb2YgMWU4LgotICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBmb3Ig
dGhlIHNtYWxsZXN0IG5vcm1hbDogdGhlIGxhcmdlc3QgZGVub3JtYWwgaXMKLSAgICAgICAgICAg
ICAgICAvLyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBhcyBpdHMgc3VjY2Vzc29yLgotICAgICAgICAg
ICAgICAgIC8vIE5vdGU6IGRlbm9ybWFscyBoYXZlIHRoZSBzYW1lIGV4cG9uZW50IGFzIHRoZSBz
bWFsbGVzdCBub3JtYWxzLgotICAgICAgICAgICAgICAgIG1fbWludXMgPSBEaXlGcCgodi5mKCkg
PDwgMikgLSAxLCB2LmUoKSAtIDIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBtX21pbnVzID0gRGl5RnAoKHYuZigpIDw8IDEpIC0gMSwgdi5lKCkgLSAxKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fbWludXMuc2V0X2YobV9taW51cy5mKCkgPDwgKG1fbWlu
dXMuZSgpIC0gbV9wbHVzLmUoKSkpOwotICAgICAgICAgICAgbV9taW51cy5zZXRfZShtX3BsdXMu
ZSgpKTsKLSAgICAgICAgICAgICpvdXRfbV9wbHVzID0gbV9wbHVzOwotICAgICAgICAgICAgKm91
dF9tX21pbnVzID0gbV9taW51czsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZG91Ymxl
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdWludDY0X3RvX2RvdWJsZShkNjRfKTsgfQotICAgICAg
ICAKLSAgICAgICAgLy8gUmV0dXJucyB0aGUgc2lnbmlmaWNhbmQgc2l6ZSBmb3IgYSBnaXZlbiBv
cmRlciBvZiBtYWduaXR1ZGUuCi0gICAgICAgIC8vIElmIHYgPSBmKjJeZSB3aXRoIDJecC0xIDw9
IGYgPD0gMl5wIHRoZW4gcCtlIGlzIHYncyBvcmRlciBvZiBtYWduaXR1ZGUuCi0gICAgICAgIC8v
IFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJpbmFyeSBk
aWdpdHMgdiB3aWxsIGhhdmUKLSAgICAgICAgLy8gb25jZSBpdCdzIGVuY29kZWQgaW50byBhIGRv
dWJsZS4gSW4gYWxtb3N0IGFsbCBjYXNlcyB0aGlzIGlzIGVxdWFsIHRvCi0gICAgICAgIC8vIGtT
aWduaWZpY2FuZFNpemUuIFRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlIGRlbm9ybWFscy4gVGhleSBz
dGFydCB3aXRoCi0gICAgICAgIC8vIGxlYWRpbmcgemVyb2VzIGFuZCB0aGVpciBlZmZlY3RpdmUg
c2lnbmlmaWNhbmQtc2l6ZSBpcyBoZW5jZSBzbWFsbGVyLgotICAgICAgICBzdGF0aWMgaW50IFNp
Z25pZmljYW5kU2l6ZUZvck9yZGVyT2ZNYWduaXR1ZGUoaW50IG9yZGVyKSB7Ci0gICAgICAgICAg
ICBpZiAob3JkZXIgPj0gKGtEZW5vcm1hbEV4cG9uZW50ICsga1NpZ25pZmljYW5kU2l6ZSkpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4ga1NpZ25pZmljYW5kU2l6ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChvcmRlciA8PSBrRGVub3JtYWxFeHBvbmVudCkgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICByZXR1cm4gb3JkZXIgLSBrRGVub3JtYWxFeHBvbmVudDsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgc3RhdGljIGRvdWJsZSBJbmZpbml0eSgpIHsKLSAgICAgICAgICAg
IHJldHVybiBEb3VibGUoa0luZmluaXR5KS52YWx1ZSgpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBzdGF0aWMgZG91YmxlIE5hTigpIHsKLSAgICAgICAgICAgIHJldHVybiBEb3VibGUo
a05hTikudmFsdWUoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGtFeHBvbmVudEJpYXMgPSAweDNGRiArIGtQaHlzaWNhbFNpZ25p
ZmljYW5kU2l6ZTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBrRGVub3JtYWxFeHBvbmVudCA9
IC1rRXhwb25lbnRCaWFzICsgMTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4RXhwb25l
bnQgPSAweDdGRiAtIGtFeHBvbmVudEJpYXM7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRf
dCBrSW5maW5pdHkgPSBVSU5UNjRfMlBBUlRfQygweDdGRjAwMDAwLCAwMDAwMDAwMCk7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrTmFOID0gVUlOVDY0XzJQQVJUX0MoMHg3RkY4MDAw
MCwgMDAwMDAwMDApOwotICAgICAgICAKLSAgICAgICAgY29uc3QgdWludDY0X3QgZDY0XzsKLSAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyB1aW50NjRfdCBEaXlGcFRvVWludDY0KERpeUZwIGRpeV9m
cCkgewotICAgICAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBkaXlfZnAuZigpOwotICAg
ICAgICAgICAgaW50IGV4cG9uZW50ID0gZGl5X2ZwLmUoKTsKLSAgICAgICAgICAgIHdoaWxlIChz
aWduaWZpY2FuZCA+IGtIaWRkZW5CaXQgKyBrU2lnbmlmaWNhbmRNYXNrKSB7Ci0gICAgICAgICAg
ICAgICAgc2lnbmlmaWNhbmQgPj49IDE7Ci0gICAgICAgICAgICAgICAgZXhwb25lbnQrKzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChleHBvbmVudCA+PSBrTWF4RXhwb25lbnQpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4ga0luZmluaXR5OwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGV4cG9uZW50IDwga0Rlbm9ybWFsRXhwb25lbnQpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlIChleHBvbmVudCA+
IGtEZW5vcm1hbEV4cG9uZW50ICYmIChzaWduaWZpY2FuZCAmIGtIaWRkZW5CaXQpID09IDApIHsK
LSAgICAgICAgICAgICAgICBzaWduaWZpY2FuZCA8PD0gMTsKLSAgICAgICAgICAgICAgICBleHBv
bmVudC0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdWludDY0X3QgYmlhc2VkX2V4cG9u
ZW50OwotICAgICAgICAgICAgaWYgKGV4cG9uZW50ID09IGtEZW5vcm1hbEV4cG9uZW50ICYmIChz
aWduaWZpY2FuZCAmIGtIaWRkZW5CaXQpID09IDApIHsKLSAgICAgICAgICAgICAgICBiaWFzZWRf
ZXhwb25lbnQgPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBiaWFz
ZWRfZXhwb25lbnQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZXhwb25lbnQgKyBrRXhwb25lbnRC
aWFzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAoc2lnbmlmaWNhbmQgJiBr
U2lnbmlmaWNhbmRNYXNrKSB8Ci0gICAgICAgICAgICAoYmlhc2VkX2V4cG9uZW50IDw8IGtQaHlz
aWNhbFNpZ25pZmljYW5kU2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIAotfSAgLy8gbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYg
IC8vIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9IXwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2EvZmFzdC1kdG9hLmNjIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2EvZmFzdC1kdG9hLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkYWMzYmY1ZmYxZGVlOTkyNTVkNWViMWMwN2NhYmVkMGY1M2IyY2ViLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9kdG9hL2Zhc3QtZHRvYS5jYworKysgL2Rldi9udWxsCkBAIC0x
LDc1MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vICAgICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCi0vLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQKLS8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgImZhc3QtZHRvYS5oIgotCi0jaW5jbHVkZSAiY2FjaGVkLXBvd2Vy
cy5oIgotI2luY2x1ZGUgImRpeS1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLQotbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKLSAgICAKLSAgICAvLyBU
aGUgbWluaW1hbCBhbmQgbWF4aW1hbCB0YXJnZXQgZXhwb25lbnQgZGVmaW5lIHRoZSByYW5nZSBv
ZiB3J3MgYmluYXJ5Ci0gICAgLy8gZXhwb25lbnQsIHdoZXJlICd3JyBpcyB0aGUgcmVzdWx0IG9m
IG11bHRpcGx5aW5nIHRoZSBpbnB1dCBieSBhIGNhY2hlZCBwb3dlcgotICAgIC8vIG9mIHRlbi4K
LSAgICAvLwotICAgIC8vIEEgZGlmZmVyZW50IHJhbmdlIG1pZ2h0IGJlIGNob3NlbiBvbiBhIGRp
ZmZlcmVudCBwbGF0Zm9ybSwgdG8gb3B0aW1pemUgZGlnaXQKLSAgICAvLyBnZW5lcmF0aW9uLCBi
dXQgYSBzbWFsbGVyIHJhbmdlIHJlcXVpcmVzIG1vcmUgcG93ZXJzIG9mIHRlbiB0byBiZSBjYWNo
ZWQuCi0gICAgc3RhdGljIGNvbnN0IGludCBrTWluaW1hbFRhcmdldEV4cG9uZW50ID0gLTYwOwot
ICAgIHN0YXRpYyBjb25zdCBpbnQga01heGltYWxUYXJnZXRFeHBvbmVudCA9IC0zMjsKLSAgICAK
LSAgICAKLSAgICAvLyBBZGp1c3RzIHRoZSBsYXN0IGRpZ2l0IG9mIHRoZSBnZW5lcmF0ZWQgbnVt
YmVyLCBhbmQgc2NyZWVucyBvdXQgZ2VuZXJhdGVkCi0gICAgLy8gc29sdXRpb25zIHRoYXQgbWF5
IGJlIGluYWNjdXJhdGUuIEEgc29sdXRpb24gbWF5IGJlIGluYWNjdXJhdGUgaWYgaXQgaXMKLSAg
ICAvLyBvdXRzaWRlIHRoZSBzYWZlIGludGVydmFsLCBvciBpZiB3ZSBjYW5ub3QgcHJvdmUgdGhh
dCBpdCBpcyBjbG9zZXIgdG8gdGhlCi0gICAgLy8gaW5wdXQgdGhhbiBhIG5laWdoYm9yaW5nIHJl
cHJlc2VudGF0aW9uIG9mIHRoZSBzYW1lIGxlbmd0aC4KLSAgICAvLwotICAgIC8vIElucHV0OiAq
IGJ1ZmZlciBjb250YWluaW5nIHRoZSBkaWdpdHMgb2YgdG9vX2hpZ2ggLyAxMF5rYXBwYQotICAg
IC8vICAgICAgICAqIHRoZSBidWZmZXIncyBsZW5ndGgKLSAgICAvLyAgICAgICAgKiBkaXN0YW5j
ZV90b29faGlnaF93ID09ICh0b29faGlnaCAtIHcpLmYoKSAqIHVuaXQKLSAgICAvLyAgICAgICAg
KiB1bnNhZmVfaW50ZXJ2YWwgPT0gKHRvb19oaWdoIC0gdG9vX2xvdykuZigpICogdW5pdAotICAg
IC8vICAgICAgICAqIHJlc3QgPSAodG9vX2hpZ2ggLSBidWZmZXIgKiAxMF5rYXBwYSkuZigpICog
dW5pdAotICAgIC8vICAgICAgICAqIHRlbl9rYXBwYSA9IDEwXmthcHBhICogdW5pdAotICAgIC8v
ICAgICAgICAqIHVuaXQgPSB0aGUgY29tbW9uIG11bHRpcGxpZXIKLSAgICAvLyBPdXRwdXQ6IHJl
dHVybnMgdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFpbiB0aGUgY2xv
c2VzdAotICAgIC8vICAgIHJlcHJlc2VudGFibGUgbnVtYmVyIHRvIHRoZSBpbnB1dC4KLSAgICAv
LyAgTW9kaWZpZXMgdGhlIGdlbmVyYXRlZCBkaWdpdHMgaW4gdGhlIGJ1ZmZlciB0byBhcHByb2Fj
aCAocm91bmQgdG93YXJkcykgdy4KLSAgICBzdGF0aWMgYm9vbCBSb3VuZFdlZWQoQnVmZmVyUmVm
ZXJlbmNlPGNoYXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZGlzdGFuY2VfdG9vX2hpZ2hf
dywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdW5zYWZlX2ludGVydmFsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCByZXN0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50NjRfdCB0ZW5fa2FwcGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQ2NF90IHVuaXQpIHsKLSAgICAgICAgdWludDY0X3Qgc21hbGxfZGlzdGFuY2UgPSBkaXN0
YW5jZV90b29faGlnaF93IC0gdW5pdDsKLSAgICAgICAgdWludDY0X3QgYmlnX2Rpc3RhbmNlID0g
ZGlzdGFuY2VfdG9vX2hpZ2hfdyArIHVuaXQ7Ci0gICAgICAgIC8vIExldCB3X2xvdyAgPSB0b29f
aGlnaCAtIGJpZ19kaXN0YW5jZSwgYW5kCi0gICAgICAgIC8vICAgICB3X2hpZ2ggPSB0b29faGln
aCAtIHNtYWxsX2Rpc3RhbmNlLgotICAgICAgICAvLyBOb3RlOiB3X2xvdyA8IHcgPCB3X2hpZ2gK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIHJlYWwgdyAoKiB1bml0KSBtdXN0IGxpZSBzb21l
d2hlcmUgaW5zaWRlIHRoZSBpbnRlcnZhbAotICAgICAgICAvLyBdd19sb3c7IHdfaGlnaFsgKG9m
dGVuIHdyaXR0ZW4gYXMgIih3X2xvdzsgd19oaWdoKSIpCi0gICAgICAgIAotICAgICAgICAvLyBC
YXNpY2FsbHkgdGhlIGJ1ZmZlciBjdXJyZW50bHkgY29udGFpbnMgYSBudW1iZXIgaW4gdGhlIHVu
c2FmZSBpbnRlcnZhbAotICAgICAgICAvLyBddG9vX2xvdzsgdG9vX2hpZ2hbIHdpdGggdG9vX2xv
dyA8IHcgPCB0b29faGlnaAotICAgICAgICAvLwotICAgICAgICAvLyAgdG9vX2hpZ2ggLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0KLSAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAxIHVuaXQgICAgICAgICAgICBe
ICAgICAgXiAgICAgICAgICAgICAgICAgXiAgICAgIF4KLSAgICAgICAgLy8gIGJvdW5kYXJ5X2hp
Z2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAuICAgICAgLiAgICAgICAgICAgICAgICAgLiAg
ICAgIC4KLSAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAxIHVuaXQgICAgICAgICAg
ICAuICAgICAgLiAgICAgICAgICAgICAgICAgLiAgICAgIC4KLSAgICAgICAgLy8gICAtIC0gLSAt
IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICArICAtIC0gKyAtIC0gLSAtIC0gLSAgICAg
LiAgICAgIC4KLSAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuICAgICAgLiAgICAgICAgIF4gICAgICAgLiAgICAgIC4KLSAgICAgICAgLy8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICBiaWdfZGlzdGFuY2UgIC4gICAg
ICAgLiAgICAgIC4KLSAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuICAgICAgLiAgICAgICAgIC4gICAgICAgLiAgICByZXN0Ci0gICAgICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxfZGlzdGFuY2UgICAgIC4gICAgICAgICAu
ICAgICAgIC4gICAgICAuCi0gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdiAgICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCi0gICAgICAgIC8v
ICB3X2hpZ2ggLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gICAgIC4gICAgICAg
ICAuICAgICAgIC4gICAgICAuCi0gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYgMSB1
bml0ICAgICAgICAgICAgICAgICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCi0gICAgICAg
IC8vICB3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC4gICAg
ICAgICAuICAgICAgIC4gICAgICAuCi0gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYg
MSB1bml0ICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAuICAgICAgIC4gICAgICAuCi0gICAg
ICAgIC8vICB3X2xvdyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
ICAgICAgICAuICAgICAgIC4gICAgICAuCi0gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICAgICAgIC4gICAgICB2Ci0g
ICAgICAgIC8vICBidWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLQotICAgICAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAuCi0gICAg
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
YWZlX2ludGVydmFsICAgIC4KLSAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgLgotICAgICAgICAvLyAgIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
ICAgICAuCi0gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYgMSB1bml0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgLy8gIGJvdW5kYXJ5X2xvdyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgdW5zYWZlX2ludGVy
dmFsCi0gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYgMSB1bml0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHYKLSAgICAgICAgLy8gIHRvb19sb3cgIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgdmFsdWUg
b2YgYnVmZmVyIGNvdWxkIGxpZSBhbnl3aGVyZSBpbnNpZGUgdGhlIHJhbmdlIHRvb19sb3cKLSAg
ICAgICAgLy8gdG8gdG9vX2hpZ2guCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGJvdW5kYXJ5X2xv
dywgYm91bmRhcnlfaGlnaCBhbmQgdyBhcmUgYXBwcm94aW1hdGlvbnMgb2YgdGhlIHJlYWwgYm91
bmRhcmllcwotICAgICAgICAvLyBhbmQgdiAodGhlIGlucHV0IG51bWJlcikuIFRoZXkgYXJlIGd1
YXJhbnRlZWQgdG8gYmUgcHJlY2lzZSB1cCB0byBvbmUgdW5pdC4KLSAgICAgICAgLy8gSW4gZmFj
dCB0aGUgZXJyb3IgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHJpY3RseSBsZXNzIHRoYW4gb25lIHVu
aXQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEFueXRoaW5nIHRoYXQgbGllcyBvdXRzaWRlIHRo
ZSB1bnNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCBub3QgdG8gcm91bmQKLSAgICAgICAgLy8g
dG8gdiB3aGVuIHJlYWQgYWdhaW4uCi0gICAgICAgIC8vIEFueXRoaW5nIHRoYXQgbGllcyBpbnNp
ZGUgdGhlIHNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCB0byByb3VuZCB0byB2Ci0gICAgICAg
IC8vIHdoZW4gcmVhZCBhZ2Fpbi4KLSAgICAgICAgLy8gSWYgdGhlIG51bWJlciBpbnNpZGUgdGhl
IGJ1ZmZlciBsaWVzIGluc2lkZSB0aGUgdW5zYWZlIGludGVydmFsIGJ1dCBub3QKLSAgICAgICAg
Ly8gaW5zaWRlIHRoZSBzYWZlIGludGVydmFsIHRoZW4gd2Ugc2ltcGx5IGRvIG5vdCBrbm93IGFu
ZCBiYWlsIG91dCAocmV0dXJuaW5nCi0gICAgICAgIC8vIGZhbHNlKS4KLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gU2ltaWxhcmx5IHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIGltcHJl
Y2lzaW9uIG9mICd3JyB3aGVuIGZpbmRpbmcKLSAgICAgICAgLy8gdGhlIGNsb3Nlc3QgcmVwcmVz
ZW50YXRpb24gb2YgJ3cnLiBJZiB3ZSBoYXZlIHR3byBwb3RlbnRpYWwKLSAgICAgICAgLy8gcmVw
cmVzZW50YXRpb25zLCBhbmQgb25lIGlzIGNsb3NlciB0byBib3RoIHdfbG93IGFuZCB3X2hpZ2gs
IHRoZW4gd2Uga25vdwotICAgICAgICAvLyBpdCBpcyBjbG9zZXIgdG8gdGhlIGFjdHVhbCB2YWx1
ZSB2LgotICAgICAgICAvLwotICAgICAgICAvLyBCeSBnZW5lcmF0aW5nIHRoZSBkaWdpdHMgb2Yg
dG9vX2hpZ2ggd2UgZ290IHRoZSBsYXJnZXN0IChjbG9zZXN0IHRvCi0gICAgICAgIC8vIHRvb19o
aWdoKSBidWZmZXIgdGhhdCBpcyBzdGlsbCBpbiB0aGUgdW5zYWZlIGludGVydmFsLiBJbiB0aGUg
Y2FzZSB3aGVyZQotICAgICAgICAvLyB3X2hpZ2ggPCBidWZmZXIgPCB0b29faGlnaCB3ZSB0cnkg
dG8gZGVjcmVtZW50IHRoZSBidWZmZXIuCi0gICAgICAgIC8vIFRoaXMgd2F5IHRoZSBidWZmZXIg
YXBwcm9hY2hlcyAocm91bmRzIHRvd2FyZHMpIHcuCi0gICAgICAgIC8vIFRoZXJlIGFyZSAzIGNv
bmRpdGlvbnMgdGhhdCBzdG9wIHRoZSBkZWNyZW1lbnRhdGlvbiBwcm9jZXNzOgotICAgICAgICAv
LyAgIDEpIHRoZSBidWZmZXIgaXMgYWxyZWFkeSBiZWxvdyB3X2hpZ2gKLSAgICAgICAgLy8gICAy
KSBkZWNyZW1lbnRpbmcgdGhlIGJ1ZmZlciB3b3VsZCBtYWtlIGl0IGxlYXZlIHRoZSB1bnNhZmUg
aW50ZXJ2YWwKLSAgICAgICAgLy8gICAzKSBkZWNyZW1lbnRpbmcgdGhlIGJ1ZmZlciB3b3VsZCB5
aWVsZCBhIG51bWJlciBiZWxvdyB3X2hpZ2ggYW5kIGZhcnRoZXIKLSAgICAgICAgLy8gICAgICBh
d2F5IHRoYW4gdGhlIGN1cnJlbnQgbnVtYmVyLiBJbiBvdGhlciB3b3JkczoKLSAgICAgICAgLy8g
ICAgICAgICAgICAgIChidWZmZXJ7LTF9IDwgd19oaWdoKSAmJiB3X2hpZ2ggLSBidWZmZXJ7LTF9
ID4gYnVmZmVyIC0gd19oaWdoCi0gICAgICAgIC8vIEluc3RlYWQgb2YgdXNpbmcgdGhlIGJ1ZmZl
ciBkaXJlY3RseSB3ZSB1c2UgaXRzIGRpc3RhbmNlIHRvIHRvb19oaWdoLgotICAgICAgICAvLyBD
b25jZXB0dWFsbHkgcmVzdCB+PSB0b29faGlnaCAtIGJ1ZmZlcgotICAgICAgICAvLyBXZSBuZWVk
IHRvIGRvIHRoZSBmb2xsb3dpbmcgdGVzdHMgaW4gdGhpcyBvcmRlciB0byBhdm9pZCBvdmVyLSBh
bmQKLSAgICAgICAgLy8gdW5kZXJmbG93cy4KLSAgICAgICAgQVNTRVJUKHJlc3QgPD0gdW5zYWZl
X2ludGVydmFsKTsKLSAgICAgICAgd2hpbGUgKHJlc3QgPCBzbWFsbF9kaXN0YW5jZSAmJiAgLy8g
TmVnYXRlZCBjb25kaXRpb24gMQotICAgICAgICAgICAgICAgdW5zYWZlX2ludGVydmFsIC0gcmVz
dCA+PSB0ZW5fa2FwcGEgJiYgIC8vIE5lZ2F0ZWQgY29uZGl0aW9uIDIKLSAgICAgICAgICAgICAg
IChyZXN0ICsgdGVuX2thcHBhIDwgc21hbGxfZGlzdGFuY2UgfHwgIC8vIGJ1ZmZlcnstMX0gPiB3
X2hpZ2gKLSAgICAgICAgICAgICAgICBzbWFsbF9kaXN0YW5jZSAtIHJlc3QgPj0gcmVzdCArIHRl
bl9rYXBwYSAtIHNtYWxsX2Rpc3RhbmNlKSkgewotICAgICAgICAgICAgICAgICAgIGJ1ZmZlclts
ZW5ndGggLSAxXS0tOwotICAgICAgICAgICAgICAgICAgIHJlc3QgKz0gdGVuX2thcHBhOwotICAg
ICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gV2UgaGF2ZSBhcHByb2FjaGVkIHcr
IGFzIG11Y2ggYXMgcG9zc2libGUuIFdlIG5vdyB0ZXN0IGlmIGFwcHJvYWNoaW5nIHctCi0gICAg
ICAgIC8vIHdvdWxkIHJlcXVpcmUgY2hhbmdpbmcgdGhlIGJ1ZmZlci4gSWYgeWVzLCB0aGVuIHdl
IGhhdmUgdHdvIHBvc3NpYmxlCi0gICAgICAgIC8vIHJlcHJlc2VudGF0aW9ucyBjbG9zZSB0byB3
LCBidXQgd2UgY2Fubm90IGRlY2lkZSB3aGljaCBvbmUgaXMgY2xvc2VyLgotICAgICAgICBpZiAo
cmVzdCA8IGJpZ19kaXN0YW5jZSAmJgotICAgICAgICAgICAgdW5zYWZlX2ludGVydmFsIC0gcmVz
dCA+PSB0ZW5fa2FwcGEgJiYKLSAgICAgICAgICAgIChyZXN0ICsgdGVuX2thcHBhIDwgYmlnX2Rp
c3RhbmNlIHx8Ci0gICAgICAgICAgICAgYmlnX2Rpc3RhbmNlIC0gcmVzdCA+IHJlc3QgKyB0ZW5f
a2FwcGEgLSBiaWdfZGlzdGFuY2UpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gV2VlZGluZyB0ZXN0LgotICAgICAg
ICAvLyAgIFRoZSBzYWZlIGludGVydmFsIGlzIFt0b29fbG93ICsgMiB1bHA7IHRvb19oaWdoIC0g
MiB1bHBdCi0gICAgICAgIC8vICAgU2luY2UgdG9vX2xvdyA9IHRvb19oaWdoIC0gdW5zYWZlX2lu
dGVydmFsIHRoaXMgaXMgZXF1aXZhbGVudCB0bwotICAgICAgICAvLyAgICAgIFt0b29faGlnaCAt
IHVuc2FmZV9pbnRlcnZhbCArIDQgdWxwOyB0b29faGlnaCAtIDIgdWxwXQotICAgICAgICAvLyAg
IENvbmNlcHR1YWxseSB3ZSBoYXZlOiByZXN0IH49IHRvb19oaWdoIC0gYnVmZmVyCi0gICAgICAg
IHJldHVybiAoMiAqIHVuaXQgPD0gcmVzdCkgJiYgKHJlc3QgPD0gdW5zYWZlX2ludGVydmFsIC0g
NCAqIHVuaXQpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICAvLyBSb3VuZHMgdGhlIGJ1ZmZlciB1
cHdhcmRzIGlmIHRoZSByZXN1bHQgaXMgY2xvc2VyIHRvIHYgYnkgcG9zc2libHkgYWRkaW5nCi0g
ICAgLy8gMSB0byB0aGUgYnVmZmVyLiBJZiB0aGUgcHJlY2lzaW9uIG9mIHRoZSBjYWxjdWxhdGlv
biBpcyBub3Qgc3VmZmljaWVudCB0bwotICAgIC8vIHJvdW5kIGNvcnJlY3RseSwgcmV0dXJuIGZh
bHNlLgotICAgIC8vIFRoZSByb3VuZGluZyBtaWdodCBzaGlmdCB0aGUgd2hvbGUgYnVmZmVyIGlu
IHdoaWNoIGNhc2UgdGhlIGthcHBhIGlzCi0gICAgLy8gYWRqdXN0ZWQuIEZvciBleGFtcGxlICI5
OSIsIGthcHBhID0gMyBtaWdodCBiZWNvbWUgIjEwIiwga2FwcGEgPSA0LgotICAgIC8vCi0gICAg
Ly8gSWYgMipyZXN0ID4gdGVuX2thcHBhIHRoZW4gdGhlIGJ1ZmZlciBuZWVkcyB0byBiZSByb3Vu
ZCB1cC4KLSAgICAvLyByZXN0IGNhbiBoYXZlIGFuIGVycm9yIG9mICsvLSAxIHVuaXQuIFRoaXMg
ZnVuY3Rpb24gYWNjb3VudHMgZm9yIHRoZQotICAgIC8vIGltcHJlY2lzaW9uIGFuZCByZXR1cm5z
IGZhbHNlLCBpZiB0aGUgcm91bmRpbmcgZGlyZWN0aW9uIGNhbm5vdCBiZQotICAgIC8vIHVuYW1i
aWd1b3VzbHkgZGV0ZXJtaW5lZC4KLSAgICAvLwotICAgIC8vIFByZWNvbmRpdGlvbjogcmVzdCA8
IHRlbl9rYXBwYS4KLSAgICBzdGF0aWMgYm9vbCBSb3VuZFdlZWRDb3VudGVkKEJ1ZmZlclJlZmVy
ZW5jZTxjaGFyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
bGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgcmVzdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHRlbl9rYXBwYSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHVuaXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGthcHBhKSB7Ci0gICAgICAgIEFTU0VSVChyZXN0
IDwgdGVuX2thcHBhKTsKLSAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgZG9uZSBp
biBhIHNwZWNpZmljIG9yZGVyIHRvIGF2b2lkIG92ZXJmbG93cy4gVGhleQotICAgICAgICAvLyB3
aWxsIHdvcmsgY29ycmVjdGx5IHdpdGggYW55IHVpbnQ2NCB2YWx1ZXMgb2YgcmVzdCA8IHRlbl9r
YXBwYSBhbmQgdW5pdC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gSWYgdGhlIHVuaXQgaXMgdG9v
IGJpZywgdGhlbiB3ZSBkb24ndCBrbm93IHdoaWNoIHdheSB0byByb3VuZC4gRm9yIGV4YW1wbGUK
LSAgICAgICAgLy8gYSB1bml0IG9mIDUwIG1lYW5zIHRoYXQgdGhlIHJlYWwgbnVtYmVyIGxpZXMg
d2l0aGluIHJlc3QgKy8tIDUwLiBJZgotICAgICAgICAvLyAxMF5rYXBwYSA9PSA0MCB0aGVuIHRo
ZXJlIGlzIG5vIHdheSB0byB0ZWxsIHdoaWNoIHdheSB0byByb3VuZC4KLSAgICAgICAgaWYgKHVu
aXQgPj0gdGVuX2thcHBhKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIEV2ZW4gaWYgdW5pdCBp
cyBqdXN0IGhhbGYgdGhlIHNpemUgb2YgMTBea2FwcGEgd2UgYXJlIGFscmVhZHkgY29tcGxldGVs
eQotICAgICAgICAvLyBsb3N0LiAoQW5kIGFmdGVyIHRoZSBwcmV2aW91cyB0ZXN0IHdlIGtub3cg
dGhhdCB0aGUgZXhwcmVzc2lvbiB3aWxsIG5vdAotICAgICAgICAvLyBvdmVyL3VuZGVyZmxvdy4p
Ci0gICAgICAgIGlmICh0ZW5fa2FwcGEgLSB1bml0IDw9IHVuaXQpIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgLy8gSWYgMiAqIChyZXN0ICsgdW5pdCkgPD0gMTBea2FwcGEgd2UgY2FuIHNhZmVseSBy
b3VuZCBkb3duLgotICAgICAgICBpZiAoKHRlbl9rYXBwYSAtIHJlc3QgPiByZXN0KSAmJiAodGVu
X2thcHBhIC0gMiAqIHJlc3QgPj0gMiAqIHVuaXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBJZiAyICogKHJlc3QgLSB1bml0KSA+PSAxMF5rYXBw
YSwgdGhlbiB3ZSBjYW4gc2FmZWx5IHJvdW5kIHVwLgotICAgICAgICBpZiAoKHJlc3QgPiB1bml0
KSAmJiAodGVuX2thcHBhIC0gKHJlc3QgLSB1bml0KSA8PSAocmVzdCAtIHVuaXQpKSkgewotICAg
ICAgICAgICAgLy8gSW5jcmVtZW50IHRoZSBsYXN0IGRpZ2l0IHJlY3Vyc2l2ZWx5IHVudGlsIHdl
IGZpbmQgYSBub24gJzknIGRpZ2l0LgotICAgICAgICAgICAgYnVmZmVyW2xlbmd0aCAtIDFdKys7
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+IDA7IC0taSkgewotICAg
ICAgICAgICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnICsgMTApIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpXSA9ICcwJzsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSAtIDFdKys7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgZGlnaXQgaXMgbm93
ICcwJysgMTAgd2UgaGFkIGEgYnVmZmVyIHdpdGggYWxsICc5J3MuIFdpdGggdGhlCi0gICAgICAg
ICAgICAvLyBleGNlcHRpb24gb2YgdGhlIGZpcnN0IGRpZ2l0IGFsbCBkaWdpdHMgYXJlIG5vdyAn
MCcuIFNpbXBseSBzd2l0Y2ggdGhlCi0gICAgICAgICAgICAvLyBmaXJzdCBkaWdpdCB0byAnMScg
YW5kIGFkanVzdCB0aGUga2FwcGEuIEV4YW1wbGU6ICI5OSIgYmVjb21lcyAiMTAiIGFuZAotICAg
ICAgICAgICAgLy8gdGhlIHBvd2VyICh0aGUga2FwcGEpIGlzIGluY3JlYXNlZC4KLSAgICAgICAg
ICAgIGlmIChidWZmZXJbMF0gPT0gJzAnICsgMTApIHsKLSAgICAgICAgICAgICAgICBidWZmZXJb
MF0gPSAnMSc7Ci0gICAgICAgICAgICAgICAgKCprYXBwYSkgKz0gMTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW40ID0g
MTAwMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW41ID0gMTAwMDAwOwotICAgIHN0
YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuNiA9IDEwMDAwMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVp
bnQzMl90IGtUZW43ID0gMTAwMDAwMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW44
ID0gMTAwMDAwMDAwOwotICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuOSA9IDEwMDAwMDAw
MDA7Ci0gICAgCi0gICAgLy8gUmV0dXJucyB0aGUgYmlnZ2VzdCBwb3dlciBvZiB0ZW4gdGhhdCBp
cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuCi0gICAgLy8gbnVtYmVyLiBXZSBmdXJ0
aGVybW9yZSByZWNlaXZlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiaXRzICdudW1iZXInIGhhcy4K
LSAgICAvLyBJZiBudW1iZXJfYml0cyA9PSAwIHRoZW4gMF4tMSBpcyByZXR1cm5lZAotICAgIC8v
IFRoZSBudW1iZXIgb2YgYml0cyBtdXN0IGJlIDw9IDMyLgotICAgIC8vIFByZWNvbmRpdGlvbjog
bnVtYmVyIDwgKDEgPDwgKG51bWJlcl9iaXRzICsgMSkpLgotICAgIHN0YXRpYyB2b2lkIEJpZ2dl
c3RQb3dlclRlbih1aW50MzJfdCBudW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBudW1iZXJfYml0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDMyX3QqIHBvd2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGV4cG9u
ZW50KSB7Ci0gICAgICAgIEFTU0VSVChudW1iZXIgPCAodWludDMyX3QpKDEgPDwgKG51bWJlcl9i
aXRzICsgMSkpKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobnVtYmVyX2JpdHMpIHsKLSAg
ICAgICAgICAgIGNhc2UgMzI6Ci0gICAgICAgICAgICBjYXNlIDMxOgotICAgICAgICAgICAgY2Fz
ZSAzMDoKLSAgICAgICAgICAgICAgICBpZiAoa1RlbjkgPD0gbnVtYmVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICpwb3dlciA9IGtUZW45OwotICAgICAgICAgICAgICAgICAgICAqZXhwb25lbnQg
PSA5OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgICAgICBjYXNlIDI5OgotICAgICAgICAg
ICAgY2FzZSAyODoKLSAgICAgICAgICAgIGNhc2UgMjc6Ci0gICAgICAgICAgICAgICAgaWYgKGtU
ZW44IDw9IG51bWJlcikgewotICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBrVGVuODsKLSAg
ICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gODsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEZBTExUSFJPVUdIOwotICAg
ICAgICAgICAgY2FzZSAyNjoKLSAgICAgICAgICAgIGNhc2UgMjU6Ci0gICAgICAgICAgICBjYXNl
IDI0OgotICAgICAgICAgICAgICAgIGlmIChrVGVuNyA8PSBudW1iZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgKnBvd2VyID0ga1Rlbjc7Ci0gICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9
IDc7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBGQUxMVEhST1VHSDsKLSAgICAgICAgICAgIGNhc2UgMjM6Ci0gICAgICAgICAg
ICBjYXNlIDIyOgotICAgICAgICAgICAgY2FzZSAyMToKLSAgICAgICAgICAgIGNhc2UgMjA6Ci0g
ICAgICAgICAgICAgICAgaWYgKGtUZW42IDw9IG51bWJlcikgewotICAgICAgICAgICAgICAgICAg
ICAqcG93ZXIgPSBrVGVuNjsKLSAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNjsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIEZBTExUSFJPVUdIOwotICAgICAgICAgICAgY2FzZSAxOToKLSAgICAgICAgICAgIGNhc2Ug
MTg6Ci0gICAgICAgICAgICBjYXNlIDE3OgotICAgICAgICAgICAgICAgIGlmIChrVGVuNSA8PSBu
dW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgKnBvd2VyID0ga1RlbjU7Ci0gICAgICAgICAg
ICAgICAgICAgICpleHBvbmVudCA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBGQUxMVEhST1VHSDsKLSAgICAgICAgICAg
IGNhc2UgMTY6Ci0gICAgICAgICAgICBjYXNlIDE1OgotICAgICAgICAgICAgY2FzZSAxNDoKLSAg
ICAgICAgICAgICAgICBpZiAoa1RlbjQgPD0gbnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICpwb3dlciA9IGtUZW40OwotICAgICAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSA0OwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgICAgICBjYXNlIDEzOgotICAgICAgICAgICAgY2FzZSAx
MjoKLSAgICAgICAgICAgIGNhc2UgMTE6Ci0gICAgICAgICAgICBjYXNlIDEwOgotICAgICAgICAg
ICAgICAgIGlmICgxMDAwIDw9IG51bWJlcikgewotICAgICAgICAgICAgICAgICAgICAqcG93ZXIg
PSAxMDAwOwotICAgICAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSAzOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgRkFMTFRI
Uk9VR0g7Ci0gICAgICAgICAgICBjYXNlIDk6Ci0gICAgICAgICAgICBjYXNlIDg6Ci0gICAgICAg
ICAgICBjYXNlIDc6Ci0gICAgICAgICAgICAgICAgaWYgKDEwMCA8PSBudW1iZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgKnBvd2VyID0gMTAwOwotICAgICAgICAgICAgICAgICAgICAqZXhwb25l
bnQgPSAyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgICAgICBjYXNlIDY6Ci0gICAgICAg
ICAgICBjYXNlIDU6Ci0gICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgaWYgKDEw
IDw9IG51bWJlcikgewotICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSAxMDsKLSAgICAgICAg
ICAgICAgICAgICAgKmV4cG9uZW50ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEZBTExUSFJPVUdIOwotICAgICAgICAg
ICAgY2FzZSAzOgotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgY2FzZSAxOgotICAg
ICAgICAgICAgICAgIGlmICgxIDw9IG51bWJlcikgewotICAgICAgICAgICAgICAgICAgICAqcG93
ZXIgPSAxOwotICAgICAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSAwOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgRkFMTFRI
Uk9VR0g7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgKnBvd2VyID0gMDsK
LSAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSAtMTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgLy8gRm9sbG93aW5nIGFzc2ln
bm1lbnRzIGFyZSBoZXJlIHRvIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZ3MuCi0gICAgICAgICAg
ICAgICAgKnBvd2VyID0gMDsKLSAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSAwOwotICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgCi0g
ICAgLy8gR2VuZXJhdGVzIHRoZSBkaWdpdHMgb2YgaW5wdXQgbnVtYmVyIHcuCi0gICAgLy8gdyBp
cyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciAoRGl5RnApLCBjb25zaXN0aW5nIG9mIGEgc2lnbmlm
aWNhbmQgYW5kIGFuCi0gICAgLy8gZXhwb25lbnQuIEl0cyBleHBvbmVudCBpcyBib3VuZGVkIGJ5
IGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgYW5kCi0gICAgLy8ga01heGltYWxUYXJnZXRFeHBvbmVu
dC4KLSAgICAvLyAgICAgICBIZW5jZSAtNjAgPD0gdy5lKCkgPD0gLTMyLgotICAgIC8vCi0gICAg
Ly8gUmV0dXJucyBmYWxzZSBpZiBpdCBmYWlscywgaW4gd2hpY2ggY2FzZSB0aGUgZ2VuZXJhdGVk
IGRpZ2l0cyBpbiB0aGUgYnVmZmVyCi0gICAgLy8gc2hvdWxkIG5vdCBiZSB1c2VkLgotICAgIC8v
IFByZWNvbmRpdGlvbnM6Ci0gICAgLy8gICogbG93LCB3IGFuZCBoaWdoIGFyZSBjb3JyZWN0IHVw
IHRvIDEgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKS4gVGhhdAotICAgIC8vICAgIGlzLCB0
aGVpciBlcnJvciBtdXN0IGJlIGxlc3MgdGhhbiBhIHVuaXQgb2YgdGhlaXIgbGFzdCBkaWdpdHMu
Ci0gICAgLy8gICogbG93LmUoKSA9PSB3LmUoKSA9PSBoaWdoLmUoKQotICAgIC8vICAqIGxvdyA8
IHcgPCBoaWdoLCBhbmQgdGFraW5nIGludG8gYWNjb3VudCB0aGVpciBlcnJvcjogbG93fiA8PSBo
aWdofgotICAgIC8vICAqIGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgPD0ga01heGlt
YWxUYXJnZXRFeHBvbmVudAotICAgIC8vIFBvc3Rjb25kaXRpb25zOiByZXR1cm5zIGZhbHNlIGlm
IHByb2NlZHVyZSBmYWlscy4KLSAgICAvLyAgIG90aGVyd2lzZToKLSAgICAvLyAgICAgKiBidWZm
ZXIgaXMgbm90IG51bGwtdGVybWluYXRlZCwgYnV0IGxlbiBjb250YWlucyB0aGUgbnVtYmVyIG9m
IGRpZ2l0cy4KLSAgICAvLyAgICAgKiBidWZmZXIgY29udGFpbnMgdGhlIHNob3J0ZXN0IHBvc3Np
YmxlIGRlY2ltYWwgZGlnaXQtc2VxdWVuY2UKLSAgICAvLyAgICAgICBzdWNoIHRoYXQgTE9XIDwg
YnVmZmVyICogMTBea2FwcGEgPCBISUdILCB3aGVyZSBMT1cgYW5kIEhJR0ggYXJlIHRoZQotICAg
IC8vICAgICAgIGNvcnJlY3QgdmFsdWVzIG9mIGxvdyBhbmQgaGlnaCAod2l0aG91dCB0aGVpciBl
cnJvcikuCi0gICAgLy8gICAgICogaWYgbW9yZSB0aGFuIG9uZSBkZWNpbWFsIHJlcHJlc2VudGF0
aW9uIGdpdmVzIHRoZSBtaW5pbWFsIG51bWJlciBvZgotICAgIC8vICAgICAgIGRlY2ltYWwgZGln
aXRzIHRoZW4gdGhlIG9uZSBjbG9zZXN0IHRvIFcgKHdoZXJlIFcgaXMgdGhlIGNvcnJlY3QgdmFs
dWUKLSAgICAvLyAgICAgICBvZiB3KSBpcyBjaG9zZW4uCi0gICAgLy8gUmVtYXJrOiB0aGlzIHBy
b2NlZHVyZSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGltcHJlY2lzaW9uIG9mIGl0cyBpbnB1dAot
ICAgIC8vICAgbnVtYmVycy4gSWYgdGhlIHByZWNpc2lvbiBpcyBub3QgZW5vdWdoIHRvIGd1YXJh
bnRlZSBhbGwgdGhlIHBvc3Rjb25kaXRpb25zCi0gICAgLy8gICB0aGVuIGZhbHNlIGlzIHJldHVy
bmVkLiBUaGlzIHVzdWFsbHkgaGFwcGVucyByYXJlbHkgKH4wLjUlKS4KLSAgICAvLwotICAgIC8v
IFNheSwgZm9yIHRoZSBzYWtlIG9mIGV4YW1wbGUsIHRoYXQKLSAgICAvLyAgIHcuZSgpID09IC00
OCwgYW5kIHcuZigpID09IDB4MTIzNDU2Nzg5MGFiY2RlZgotICAgIC8vIHcncyB2YWx1ZSBjYW4g
YmUgY29tcHV0ZWQgYnkgdy5mKCkgKiAyXncuZSgpCi0gICAgLy8gV2UgY2FuIG9idGFpbiB3J3Mg
aW50ZWdyYWwgZGlnaXRzIGJ5IHNpbXBseSBzaGlmdGluZyB3LmYoKSBieSAtdy5lKCkuCi0gICAg
Ly8gIC0+IHcncyBpbnRlZ3JhbCBwYXJ0IGlzIDB4MTIzNAotICAgIC8vICB3J3MgZnJhY3Rpb25h
bCBwYXJ0IGlzIHRoZXJlZm9yZSAweDU2Nzg5MGFiY2RlZi4KLSAgICAvLyBQcmludGluZyB3J3Mg
aW50ZWdyYWwgcGFydCBpcyBlYXN5IChzaW1wbHkgcHJpbnQgMHgxMjM0IGluIGRlY2ltYWwpLgot
ICAgIC8vIEluIG9yZGVyIHRvIHByaW50IGl0cyBmcmFjdGlvbiB3ZSByZXBlYXRlZGx5IG11bHRp
cGx5IHRoZSBmcmFjdGlvbiBieSAxMCBhbmQKLSAgICAvLyBnZXQgZWFjaCBkaWdpdC4gRXhhbXBs
ZSB0aGUgZmlyc3QgZGlnaXQgYWZ0ZXIgdGhlIHBvaW50IHdvdWxkIGJlIGNvbXB1dGVkIGJ5Ci0g
ICAgLy8gICAoMHg1Njc4OTBhYmNkZWYgKiAxMCkgPj4gNDguIC0+IDMKLSAgICAvLyBUaGUgd2hv
bGUgdGhpbmcgYmVjb21lcyBzbGlnaHRseSBtb3JlIGNvbXBsaWNhdGVkIGJlY2F1c2Ugd2Ugd2Fu
dCB0byBzdG9wCi0gICAgLy8gb25jZSB3ZSBoYXZlIGVub3VnaCBkaWdpdHMuIFRoYXQgaXMsIG9u
Y2UgdGhlIGRpZ2l0cyBpbnNpZGUgdGhlIGJ1ZmZlcgotICAgIC8vIHJlcHJlc2VudCAndycgd2Ug
Y2FuIHN0b3AuIEV2ZXJ5dGhpbmcgaW5zaWRlIHRoZSBpbnRlcnZhbCBsb3cgLSBoaWdoCi0gICAg
Ly8gcmVwcmVzZW50cyB3LiBIb3dldmVyIHdlIGhhdmUgdG8gcGF5IGF0dGVudGlvbiB0byBsb3cs
IGhpZ2ggYW5kIHcncwotICAgIC8vIGltcHJlY2lzaW9uLgotICAgIHN0YXRpYyBib29sIERpZ2l0
R2VuKERpeUZwIGxvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCB3LAotICAgICAg
ICAgICAgICAgICAgICAgICAgIERpeUZwIGhpZ2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
QnVmZmVyUmVmZXJlbmNlPGNoYXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQqIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGthcHBhKSB7Ci0gICAg
ICAgIEFTU0VSVChsb3cuZSgpID09IHcuZSgpICYmIHcuZSgpID09IGhpZ2guZSgpKTsKLSAgICAg
ICAgQVNTRVJUKGxvdy5mKCkgKyAxIDw9IGhpZ2guZigpIC0gMSk7Ci0gICAgICAgIEFTU0VSVChr
TWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpICYmIHcuZSgpIDw9IGtNYXhpbWFsVGFyZ2V0
RXhwb25lbnQpOwotICAgICAgICAvLyBsb3csIHcgYW5kIGhpZ2ggYXJlIGltcHJlY2lzZSwgYnV0
IGJ5IGxlc3MgdGhhbiBvbmUgdWxwICh1bml0IGluIHRoZSBsYXN0Ci0gICAgICAgIC8vIHBsYWNl
KS4KLSAgICAgICAgLy8gSWYgd2UgcmVtb3ZlIChyZXNwLiBhZGQpIDEgdWxwIGZyb20gbG93IChy
ZXNwLiBoaWdoKSB3ZSBhcmUgY2VydGFpbiB0aGF0Ci0gICAgICAgIC8vIHRoZSBuZXcgbnVtYmVy
cyBhcmUgb3V0c2lkZSBvZiB0aGUgaW50ZXJ2YWwgd2Ugd2FudCB0aGUgZmluYWwKLSAgICAgICAg
Ly8gcmVwcmVzZW50YXRpb24gdG8gbGllIGluLgotICAgICAgICAvLyBJbnZlcnNlbHkgYWRkaW5n
IChyZXNwLiByZW1vdmluZykgMSB1bHAgZnJvbSBsb3cgKHJlc3AuIGhpZ2gpIHdvdWxkIHlpZWxk
Ci0gICAgICAgIC8vIG51bWJlcnMgdGhhdCBhcmUgY2VydGFpbiB0byBsaWUgaW4gdGhlIGludGVy
dmFsLiBXZSB3aWxsIHVzZSB0aGlzIGZhY3QKLSAgICAgICAgLy8gbGF0ZXIgb24uCi0gICAgICAg
IC8vIFdlIHdpbGwgbm93IHN0YXJ0IGJ5IGdlbmVyYXRpbmcgdGhlIGRpZ2l0cyB3aXRoaW4gdGhl
IHVuY2VydGFpbgotICAgICAgICAvLyBpbnRlcnZhbC4gTGF0ZXIgd2Ugd2lsbCB3ZWVkIG91dCBy
ZXByZXNlbnRhdGlvbnMgdGhhdCBsaWUgb3V0c2lkZSB0aGUgc2FmZQotICAgICAgICAvLyBpbnRl
cnZhbCBhbmQgdGh1cyBfbWlnaHRfIGxpZSBvdXRzaWRlIHRoZSBjb3JyZWN0IGludGVydmFsLgot
ICAgICAgICB1aW50NjRfdCB1bml0ID0gMTsKLSAgICAgICAgRGl5RnAgdG9vX2xvdyA9IERpeUZw
KGxvdy5mKCkgLSB1bml0LCBsb3cuZSgpKTsKLSAgICAgICAgRGl5RnAgdG9vX2hpZ2ggPSBEaXlG
cChoaWdoLmYoKSArIHVuaXQsIGhpZ2guZSgpKTsKLSAgICAgICAgLy8gdG9vX2xvdyBhbmQgdG9v
X2hpZ2ggYXJlIGd1YXJhbnRlZWQgdG8gbGllIG91dHNpZGUgdGhlIGludGVydmFsIHdlIHdhbnQg
dGhlCi0gICAgICAgIC8vIGdlbmVyYXRlZCBudW1iZXIgaW4uCi0gICAgICAgIERpeUZwIHVuc2Fm
ZV9pbnRlcnZhbCA9IERpeUZwOjpNaW51cyh0b29faGlnaCwgdG9vX2xvdyk7Ci0gICAgICAgIC8v
IFdlIG5vdyBjdXQgdGhlIGlucHV0IG51bWJlciBpbnRvIHR3byBwYXJ0czogdGhlIGludGVncmFs
IGRpZ2l0cyBhbmQgdGhlCi0gICAgICAgIC8vIGZyYWN0aW9uYWxzLiBXZSB3aWxsIG5vdCB3cml0
ZSBhbnkgZGVjaW1hbCBzZXBhcmF0b3IgdGhvdWdoLCBidXQgYWRhcHQKLSAgICAgICAgLy8ga2Fw
cGEgaW5zdGVhZC4KLSAgICAgICAgLy8gUmVtaW5kZXI6IHdlIGFyZSBjdXJyZW50bHkgY29tcHV0
aW5nIHRoZSBkaWdpdHMgKHN0b3JlZCBpbnNpZGUgdGhlIGJ1ZmZlcikKLSAgICAgICAgLy8gc3Vj
aCB0aGF0OiAgIHRvb19sb3cgPCBidWZmZXIgKiAxMF5rYXBwYSA8IHRvb19oaWdoCi0gICAgICAg
IC8vIFdlIHVzZSB0b29faGlnaCBmb3IgdGhlIGRpZ2l0X2dlbmVyYXRpb24gYW5kIHN0b3AgYXMg
c29vbiBhcyBwb3NzaWJsZS4KLSAgICAgICAgLy8gSWYgd2Ugc3RvcCBlYXJseSB3ZSBlZmZlY3Rp
dmVseSByb3VuZCBkb3duLgotICAgICAgICBEaXlGcCBvbmUgPSBEaXlGcChzdGF0aWNfY2FzdDx1
aW50NjRfdD4oMSkgPDwgLXcuZSgpLCB3LmUoKSk7Ci0gICAgICAgIC8vIERpdmlzaW9uIGJ5IG9u
ZSBpcyBhIHNoaWZ0LgotICAgICAgICB1aW50MzJfdCBpbnRlZ3JhbHMgPSBzdGF0aWNfY2FzdDx1
aW50MzJfdD4odG9vX2hpZ2guZigpID4+IC1vbmUuZSgpKTsKLSAgICAgICAgLy8gTW9kdWxvIGJ5
IG9uZSBpcyBhbiBhbmQuCi0gICAgICAgIHVpbnQ2NF90IGZyYWN0aW9uYWxzID0gdG9vX2hpZ2gu
ZigpICYgKG9uZS5mKCkgLSAxKTsKLSAgICAgICAgdWludDMyX3QgZGl2aXNvcjsKLSAgICAgICAg
aW50IGRpdmlzb3JfZXhwb25lbnQ7Ci0gICAgICAgIEJpZ2dlc3RQb3dlclRlbihpbnRlZ3JhbHMs
IERpeUZwOjprU2lnbmlmaWNhbmRTaXplIC0gKC1vbmUuZSgpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICZkaXZpc29yLCAmZGl2aXNvcl9leHBvbmVudCk7Ci0gICAgICAgICprYXBwYSA9IGRp
dmlzb3JfZXhwb25lbnQgKyAxOwotICAgICAgICAqbGVuZ3RoID0gMDsKLSAgICAgICAgLy8gTG9v
cCBpbnZhcmlhbnQ6IGJ1ZmZlciA9IHRvb19oaWdoIC8gMTBea2FwcGEgIChpbnRlZ2VyIGRpdmlz
aW9uKQotICAgICAgICAvLyBUaGUgaW52YXJpYW50IGhvbGRzIGZvciB0aGUgZmlyc3QgaXRlcmF0
aW9uOiBrYXBwYSBoYXMgYmVlbiBpbml0aWFsaXplZAotICAgICAgICAvLyB3aXRoIHRoZSBkaXZp
c29yIGV4cG9uZW50ICsgMS4gQW5kIHRoZSBkaXZpc29yIGlzIHRoZSBiaWdnZXN0IHBvd2VyIG9m
IHRlbgotICAgICAgICAvLyB0aGF0IGlzIHNtYWxsZXIgdGhhbiBpbnRlZ3JhbHMuCi0gICAgICAg
IHdoaWxlICgqa2FwcGEgPiAwKSB7Ci0gICAgICAgICAgICBpbnQgZGlnaXQgPSBpbnRlZ3JhbHMg
LyBkaXZpc29yOwotICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJzAnICsgZGlnaXQ7Ci0g
ICAgICAgICAgICAoKmxlbmd0aCkrKzsKLSAgICAgICAgICAgIGludGVncmFscyAlPSBkaXZpc29y
OwotICAgICAgICAgICAgKCprYXBwYSktLTsKLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBrYXBw
YSBub3cgZXF1YWxzIHRoZSBleHBvbmVudCBvZiB0aGUgZGl2aXNvciBhbmQgdGhhdCB0aGUKLSAg
ICAgICAgICAgIC8vIGludmFyaWFudCB0aHVzIGhvbGRzIGFnYWluLgotICAgICAgICAgICAgdWlu
dDY0X3QgcmVzdCA9Ci0gICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGludGVncmFs
cykgPDwgLW9uZS5lKCkpICsgZnJhY3Rpb25hbHM7Ci0gICAgICAgICAgICAvLyBJbnZhcmlhbnQ6
IHRvb19oaWdoID0gYnVmZmVyICogMTBea2FwcGEgKyBEaXlGcChyZXN0LCBvbmUuZSgpKQotICAg
ICAgICAgICAgLy8gUmVtaW5kZXI6IHVuc2FmZV9pbnRlcnZhbC5lKCkgPT0gb25lLmUoKQotICAg
ICAgICAgICAgaWYgKHJlc3QgPCB1bnNhZmVfaW50ZXJ2YWwuZigpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gUm91bmRpbmcgZG93biAoYnkgbm90IGVtaXR0aW5nIHRoZSByZW1haW5pbmcgZGlnaXRz
KSB5aWVsZHMgYSBudW1iZXIKLSAgICAgICAgICAgICAgICAvLyB0aGF0IGxpZXMgd2l0aGluIHRo
ZSB1bnNhZmUgaW50ZXJ2YWwuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFJvdW5kV2VlZChidWZm
ZXIsICpsZW5ndGgsIERpeUZwOjpNaW51cyh0b29faGlnaCwgdykuZigpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zYWZlX2ludGVydmFsLmYoKSwgcmVzdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihkaXZpc29yKSA8
PCAtb25lLmUoKSwgdW5pdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkaXZpc29yIC89
IDEwOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgaW50ZWdyYWxzIGhhdmUg
YmVlbiBnZW5lcmF0ZWQuIFdlIGFyZSBhdCB0aGUgcG9pbnQgb2YgdGhlIGRlY2ltYWwKLSAgICAg
ICAgLy8gc2VwYXJhdG9yLiBJbiB0aGUgZm9sbG93aW5nIGxvb3Agd2Ugc2ltcGx5IG11bHRpcGx5
IHRoZSByZW1haW5pbmcgZGlnaXRzIGJ5Ci0gICAgICAgIC8vIDEwIGFuZCBkaXZpZGUgYnkgb25l
LiBXZSBqdXN0IG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBtdWx0aXBseSBhc3NvY2lhdGVkCi0g
ICAgICAgIC8vIGRhdGEgKGxpa2UgdGhlIGludGVydmFsIG9yICd1bml0JyksIHRvby4KLSAgICAg
ICAgLy8gTm90ZSB0aGF0IHRoZSBtdWx0aXBsaWNhdGlvbiBieSAxMCBkb2VzIG5vdCBvdmVyZmxv
dywgYmVjYXVzZSB3LmUgPj0gLTYwCi0gICAgICAgIC8vIGFuZCB0aHVzIG9uZS5lID49IC02MC4K
LSAgICAgICAgQVNTRVJUKG9uZS5lKCkgPj0gLTYwKTsKLSAgICAgICAgQVNTRVJUKGZyYWN0aW9u
YWxzIDwgb25lLmYoKSk7Ci0gICAgICAgIEFTU0VSVChVSU5UNjRfMlBBUlRfQygweEZGRkZGRkZG
LCBGRkZGRkZGRikgLyAxMCA+PSBvbmUuZigpKTsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgICAgIGZyYWN0aW9uYWxzICo9IDEwOwotICAgICAgICAgICAgdW5pdCAqPSAxMDsKLSAg
ICAgICAgICAgIHVuc2FmZV9pbnRlcnZhbC5zZXRfZih1bnNhZmVfaW50ZXJ2YWwuZigpICogMTAp
OwotICAgICAgICAgICAgLy8gSW50ZWdlciBkaXZpc2lvbiBieSBvbmUuCi0gICAgICAgICAgICBp
bnQgZGlnaXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZyYWN0aW9uYWxzID4+IC1vbmUuZSgpKTsKLSAg
ICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICcwJyArIGRpZ2l0OwotICAgICAgICAgICAgKCps
ZW5ndGgpKys7Ci0gICAgICAgICAgICBmcmFjdGlvbmFscyAmPSBvbmUuZigpIC0gMTsgIC8vIE1v
ZHVsbyBieSBvbmUuCi0gICAgICAgICAgICAoKmthcHBhKS0tOwotICAgICAgICAgICAgaWYgKGZy
YWN0aW9uYWxzIDwgdW5zYWZlX2ludGVydmFsLmYoKSkgewotICAgICAgICAgICAgICAgIHJldHVy
biBSb3VuZFdlZWQoYnVmZmVyLCAqbGVuZ3RoLCBEaXlGcDo6TWludXModG9vX2hpZ2gsIHcpLmYo
KSAqIHVuaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2
YWwuZigpLCBmcmFjdGlvbmFscywgb25lLmYoKSwgdW5pdCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgCi0gICAgCi0gICAgLy8gR2VuZXJhdGVzIChhdCBtb3N0
KSByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cyBvZiBpbnB1dCBudW1iZXIgdy4KLSAgICAvLyB3IGlz
IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChEaXlGcCksIGNvbnNpc3Rpbmcgb2YgYSBzaWduaWZp
Y2FuZCBhbmQgYW4KLSAgICAvLyBleHBvbmVudC4gSXRzIGV4cG9uZW50IGlzIGJvdW5kZWQgYnkg
a01pbmltYWxUYXJnZXRFeHBvbmVudCBhbmQKLSAgICAvLyBrTWF4aW1hbFRhcmdldEV4cG9uZW50
LgotICAgIC8vICAgICAgIEhlbmNlIC02MCA8PSB3LmUoKSA8PSAtMzIuCi0gICAgLy8KLSAgICAv
LyBSZXR1cm5zIGZhbHNlIGlmIGl0IGZhaWxzLCBpbiB3aGljaCBjYXNlIHRoZSBnZW5lcmF0ZWQg
ZGlnaXRzIGluIHRoZSBidWZmZXIKLSAgICAvLyBzaG91bGQgbm90IGJlIHVzZWQuCi0gICAgLy8g
UHJlY29uZGl0aW9uczoKLSAgICAvLyAgKiB3IGlzIGNvcnJlY3QgdXAgdG8gMSB1bHAgKHVuaXQg
aW4gdGhlIGxhc3QgcGxhY2UpLiBUaGF0Ci0gICAgLy8gICAgaXMsIGl0cyBlcnJvciBtdXN0IGJl
IHN0cmljdGx5IGxlc3MgdGhhbiBhIHVuaXQgb2YgaXRzIGxhc3QgZGlnaXQuCi0gICAgLy8gICog
a01pbmltYWxUYXJnZXRFeHBvbmVudCA8PSB3LmUoKSA8PSBrTWF4aW1hbFRhcmdldEV4cG9uZW50
Ci0gICAgLy8KLSAgICAvLyBQb3N0Y29uZGl0aW9uczogcmV0dXJucyBmYWxzZSBpZiBwcm9jZWR1
cmUgZmFpbHMuCi0gICAgLy8gICBvdGhlcndpc2U6Ci0gICAgLy8gICAgICogYnVmZmVyIGlzIG5v
dCBudWxsLXRlcm1pbmF0ZWQsIGJ1dCBsZW5ndGggY29udGFpbnMgdGhlIG51bWJlciBvZgotICAg
IC8vICAgICAgIGRpZ2l0cy4KLSAgICAvLyAgICAgKiB0aGUgcmVwcmVzZW50YXRpb24gaW4gYnVm
ZmVyIGlzIHRoZSBtb3N0IHByZWNpc2UgcmVwcmVzZW50YXRpb24gb2YKLSAgICAvLyAgICAgICBy
ZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cy4KLSAgICAvLyAgICAgKiBidWZmZXIgY29udGFpbnMgYXQg
bW9zdCByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cyBvZiB3LiBJZiB0aGVyZSBhcmUgbGVzcwotICAg
IC8vICAgICAgIHRoYW4gcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMgdGhlbiBzb21lIHRyYWlsaW5n
ICcwJ3MgaGF2ZSBiZWVuIHJlbW92ZWQuCi0gICAgLy8gICAgICoga2FwcGEgaXMgc3VjaCB0aGF0
Ci0gICAgLy8gICAgICAgICAgICB3ID0gYnVmZmVyICogMTBea2FwcGEgKyBlcHMgd2l0aCB8ZXBz
fCA8IDEwXmthcHBhIC8gMi4KLSAgICAvLwotICAgIC8vIFJlbWFyazogVGhpcyBwcm9jZWR1cmUg
dGFrZXMgaW50byBhY2NvdW50IHRoZSBpbXByZWNpc2lvbiBvZiBpdHMgaW5wdXQKLSAgICAvLyAg
IG51bWJlcnMuIElmIHRoZSBwcmVjaXNpb24gaXMgbm90IGVub3VnaCB0byBndWFyYW50ZWUgYWxs
IHRoZSBwb3N0Y29uZGl0aW9ucwotICAgIC8vICAgdGhlbiBmYWxzZSBpcyByZXR1cm5lZC4gVGhp
cyB1c3VhbGx5IGhhcHBlbnMgcmFyZWx5LCBidXQgdGhlIGZhaWx1cmUtcmF0ZQotICAgIC8vICAg
aW5jcmVhc2VzIHdpdGggaGlnaGVyIHJlcXVlc3RlZF9kaWdpdHMuCi0gICAgc3RhdGljIGJvb2wg
RGlnaXRHZW5Db3VudGVkKERpeUZwIHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCByZXF1ZXN0ZWRfZGlnaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
dWZmZXJSZWZlcmVuY2U8Y2hhcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQqIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBr
YXBwYSkgewotICAgICAgICBBU1NFUlQoa01pbmltYWxUYXJnZXRFeHBvbmVudCA8PSB3LmUoKSAm
JiB3LmUoKSA8PSBrTWF4aW1hbFRhcmdldEV4cG9uZW50KTsKLSAgICAgICAgQVNTRVJUKGtNaW5p
bWFsVGFyZ2V0RXhwb25lbnQgPj0gLTYwKTsKLSAgICAgICAgQVNTRVJUKGtNYXhpbWFsVGFyZ2V0
RXhwb25lbnQgPD0gLTMyKTsKLSAgICAgICAgLy8gdyBpcyBhc3N1bWVkIHRvIGhhdmUgYW4gZXJy
b3IgbGVzcyB0aGFuIDEgdW5pdC4gV2hlbmV2ZXIgdyBpcyBzY2FsZWQgd2UKLSAgICAgICAgLy8g
YWxzbyBzY2FsZSBpdHMgZXJyb3IuCi0gICAgICAgIHVpbnQ2NF90IHdfZXJyb3IgPSAxOwotICAg
ICAgICAvLyBXZSBjdXQgdGhlIGlucHV0IG51bWJlciBpbnRvIHR3byBwYXJ0czogdGhlIGludGVn
cmFsIGRpZ2l0cyBhbmQgdGhlCi0gICAgICAgIC8vIGZyYWN0aW9uYWwgZGlnaXRzLiBXZSBkb24n
dCBlbWl0IGFueSBkZWNpbWFsIHNlcGFyYXRvciwgYnV0IGFkYXB0IGthcHBhCi0gICAgICAgIC8v
IGluc3RlYWQuIEV4YW1wbGU6IGluc3RlYWQgb2Ygd3JpdGluZyAiMS4yIiB3ZSBwdXQgIjEyIiBp
bnRvIHRoZSBidWZmZXIgYW5kCi0gICAgICAgIC8vIGluY3JlYXNlIGthcHBhIGJ5IDEuCi0gICAg
ICAgIERpeUZwIG9uZSA9IERpeUZwKHN0YXRpY19jYXN0PHVpbnQ2NF90PigxKSA8PCAtdy5lKCks
IHcuZSgpKTsKLSAgICAgICAgLy8gRGl2aXNpb24gYnkgb25lIGlzIGEgc2hpZnQuCi0gICAgICAg
IHVpbnQzMl90IGludGVncmFscyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih3LmYoKSA+PiAtb25l
LmUoKSk7Ci0gICAgICAgIC8vIE1vZHVsbyBieSBvbmUgaXMgYW4gYW5kLgotICAgICAgICB1aW50
NjRfdCBmcmFjdGlvbmFscyA9IHcuZigpICYgKG9uZS5mKCkgLSAxKTsKLSAgICAgICAgdWludDMy
X3QgZGl2aXNvcjsKLSAgICAgICAgaW50IGRpdmlzb3JfZXhwb25lbnQ7Ci0gICAgICAgIEJpZ2dl
c3RQb3dlclRlbihpbnRlZ3JhbHMsIERpeUZwOjprU2lnbmlmaWNhbmRTaXplIC0gKC1vbmUuZSgp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZkaXZpc29yLCAmZGl2aXNvcl9leHBvbmVudCk7
Ci0gICAgICAgICprYXBwYSA9IGRpdmlzb3JfZXhwb25lbnQgKyAxOwotICAgICAgICAqbGVuZ3Ro
ID0gMDsKLSAgICAgICAgCi0gICAgICAgIC8vIExvb3AgaW52YXJpYW50OiBidWZmZXIgPSB3IC8g
MTBea2FwcGEgIChpbnRlZ2VyIGRpdmlzaW9uKQotICAgICAgICAvLyBUaGUgaW52YXJpYW50IGhv
bGRzIGZvciB0aGUgZmlyc3QgaXRlcmF0aW9uOiBrYXBwYSBoYXMgYmVlbiBpbml0aWFsaXplZAot
ICAgICAgICAvLyB3aXRoIHRoZSBkaXZpc29yIGV4cG9uZW50ICsgMS4gQW5kIHRoZSBkaXZpc29y
IGlzIHRoZSBiaWdnZXN0IHBvd2VyIG9mIHRlbgotICAgICAgICAvLyB0aGF0IGlzIHNtYWxsZXIg
dGhhbiAnaW50ZWdyYWxzJy4KLSAgICAgICAgd2hpbGUgKCprYXBwYSA+IDApIHsKLSAgICAgICAg
ICAgIGludCBkaWdpdCA9IGludGVncmFscyAvIGRpdmlzb3I7Ci0gICAgICAgICAgICBidWZmZXJb
Kmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKLSAgICAgICAgICAgICgqbGVuZ3RoKSsrOwotICAgICAg
ICAgICAgcmVxdWVzdGVkX2RpZ2l0cy0tOwotICAgICAgICAgICAgaW50ZWdyYWxzICU9IGRpdmlz
b3I7Ci0gICAgICAgICAgICAoKmthcHBhKS0tOwotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGth
cHBhIG5vdyBlcXVhbHMgdGhlIGV4cG9uZW50IG9mIHRoZSBkaXZpc29yIGFuZCB0aGF0IHRoZQot
ICAgICAgICAgICAgLy8gaW52YXJpYW50IHRodXMgaG9sZHMgYWdhaW4uCi0gICAgICAgICAgICBp
ZiAocmVxdWVzdGVkX2RpZ2l0cyA9PSAwKSBicmVhazsKLSAgICAgICAgICAgIGRpdmlzb3IgLz0g
MTA7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzID09
IDApIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IHJlc3QgPQotICAgICAgICAgICAgKHN0YXRpY19j
YXN0PHVpbnQ2NF90PihpbnRlZ3JhbHMpIDw8IC1vbmUuZSgpKSArIGZyYWN0aW9uYWxzOwotICAg
ICAgICAgICAgcmV0dXJuIFJvdW5kV2VlZENvdW50ZWQoYnVmZmVyLCAqbGVuZ3RoLCByZXN0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KGRpdmlzb3IpIDw8IC1vbmUuZSgpLCB3X2Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAga2FwcGEpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUg
aW50ZWdyYWxzIGhhdmUgYmVlbiBnZW5lcmF0ZWQuIFdlIGFyZSBhdCB0aGUgcG9pbnQgb2YgdGhl
IGRlY2ltYWwKLSAgICAgICAgLy8gc2VwYXJhdG9yLiBJbiB0aGUgZm9sbG93aW5nIGxvb3Agd2Ug
c2ltcGx5IG11bHRpcGx5IHRoZSByZW1haW5pbmcgZGlnaXRzIGJ5Ci0gICAgICAgIC8vIDEwIGFu
ZCBkaXZpZGUgYnkgb25lLiBXZSBqdXN0IG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBtdWx0aXBs
eSBhc3NvY2lhdGVkCi0gICAgICAgIC8vIGRhdGEgKHRoZSAndW5pdCcpLCB0b28uCi0gICAgICAg
IC8vIE5vdGUgdGhhdCB0aGUgbXVsdGlwbGljYXRpb24gYnkgMTAgZG9lcyBub3Qgb3ZlcmZsb3cs
IGJlY2F1c2Ugdy5lID49IC02MAotICAgICAgICAvLyBhbmQgdGh1cyBvbmUuZSA+PSAtNjAuCi0g
ICAgICAgIEFTU0VSVChvbmUuZSgpID49IC02MCk7Ci0gICAgICAgIEFTU0VSVChmcmFjdGlvbmFs
cyA8IG9uZS5mKCkpOwotICAgICAgICBBU1NFUlQoVUlOVDY0XzJQQVJUX0MoMHhGRkZGRkZGRiwg
RkZGRkZGRkYpIC8gMTAgPj0gb25lLmYoKSk7Ci0gICAgICAgIHdoaWxlIChyZXF1ZXN0ZWRfZGln
aXRzID4gMCAmJiBmcmFjdGlvbmFscyA+IHdfZXJyb3IpIHsKLSAgICAgICAgICAgIGZyYWN0aW9u
YWxzICo9IDEwOwotICAgICAgICAgICAgd19lcnJvciAqPSAxMDsKLSAgICAgICAgICAgIC8vIElu
dGVnZXIgZGl2aXNpb24gYnkgb25lLgotICAgICAgICAgICAgaW50IGRpZ2l0ID0gc3RhdGljX2Nh
c3Q8aW50PihmcmFjdGlvbmFscyA+PiAtb25lLmUoKSk7Ci0gICAgICAgICAgICBidWZmZXJbKmxl
bmd0aF0gPSAnMCcgKyBkaWdpdDsKLSAgICAgICAgICAgICgqbGVuZ3RoKSsrOwotICAgICAgICAg
ICAgcmVxdWVzdGVkX2RpZ2l0cy0tOwotICAgICAgICAgICAgZnJhY3Rpb25hbHMgJj0gb25lLmYo
KSAtIDE7ICAvLyBNb2R1bG8gYnkgb25lLgotICAgICAgICAgICAgKCprYXBwYSktLTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0cyAhPSAwKSByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHJldHVybiBSb3VuZFdlZWRDb3VudGVkKGJ1ZmZlciwgKmxlbmd0aCwgZnJhY3Rpb25h
bHMsIG9uZS5mKCksIHdfZXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGth
cHBhKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgLy8gUHJvdmlkZXMgYSBkZWNpbWFsIHJlcHJl
c2VudGF0aW9uIG9mIHYuCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IHN1Y2NlZWRzLCBvdGhl
cndpc2UgdGhlIHJlc3VsdCBjYW5ub3QgYmUgdHJ1c3RlZC4KLSAgICAvLyBUaGVyZSB3aWxsIGJl
ICpsZW5ndGggZGlnaXRzIGluc2lkZSB0aGUgYnVmZmVyIChub3QgbnVsbC10ZXJtaW5hdGVkKS4K
LSAgICAvLyBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHRoZW4KLSAgICAvLyAgICAgICAg
diA9PSAoZG91YmxlKSAoYnVmZmVyICogMTBeZGVjaW1hbF9leHBvbmVudCkuCi0gICAgLy8gVGhl
IGRpZ2l0cyBpbiB0aGUgYnVmZmVyIGFyZSB0aGUgc2hvcnRlc3QgcmVwcmVzZW50YXRpb24gcG9z
c2libGU6IG5vCi0gICAgLy8gMC4wOTk5OTk5OTk5OTk5OTk5OSBpbnN0ZWFkIG9mIDAuMS4gVGhl
IHNob3J0ZXIgcmVwcmVzZW50YXRpb24gd2lsbCBldmVuIGJlCi0gICAgLy8gY2hvc2VuIGV2ZW4g
aWYgdGhlIGxvbmdlciBvbmUgd291bGQgYmUgY2xvc2VyIHRvIHYuCi0gICAgLy8gVGhlIGxhc3Qg
ZGlnaXQgd2lsbCBiZSBjbG9zZXN0IHRvIHRoZSBhY3R1YWwgdi4gVGhhdCBpcywgZXZlbiBpZiBz
ZXZlcmFsCi0gICAgLy8gZGlnaXRzIG1pZ2h0IGNvcnJlY3RseSB5aWVsZCAndicgd2hlbiByZWFk
IGFnYWluLCB0aGUgY2xvc2VzdCB3aWxsIGJlCi0gICAgLy8gY29tcHV0ZWQuCi0gICAgc3RhdGlj
IGJvb2wgR3Jpc3UzKGRvdWJsZSB2LAotICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJSZWZl
cmVuY2U8Y2hhcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX2V4cG9uZW50KSB7Ci0gICAgICAg
IERpeUZwIHcgPSBEb3VibGUodikuQXNOb3JtYWxpemVkRGl5RnAoKTsKLSAgICAgICAgLy8gYm91
bmRhcnlfbWludXMgYW5kIGJvdW5kYXJ5X3BsdXMgYXJlIHRoZSBib3VuZGFyaWVzIGJldHdlZW4g
diBhbmQgaXRzCi0gICAgICAgIC8vIGNsb3Nlc3QgZmxvYXRpbmctcG9pbnQgbmVpZ2hib3JzLiBB
bnkgbnVtYmVyIHN0cmljdGx5IGJldHdlZW4KLSAgICAgICAgLy8gYm91bmRhcnlfbWludXMgYW5k
IGJvdW5kYXJ5X3BsdXMgd2lsbCByb3VuZCB0byB2IHdoZW4gY29udmVydCB0byBhIGRvdWJsZS4K
LSAgICAgICAgLy8gR3Jpc3UzIHdpbGwgbmV2ZXIgb3V0cHV0IHJlcHJlc2VudGF0aW9ucyB0aGF0
IGxpZSBleGFjdGx5IG9uIGEgYm91bmRhcnkuCi0gICAgICAgIERpeUZwIGJvdW5kYXJ5X21pbnVz
LCBib3VuZGFyeV9wbHVzOwotICAgICAgICBEb3VibGUodikuTm9ybWFsaXplZEJvdW5kYXJpZXMo
JmJvdW5kYXJ5X21pbnVzLCAmYm91bmRhcnlfcGx1cyk7Ci0gICAgICAgIEFTU0VSVChib3VuZGFy
eV9wbHVzLmUoKSA9PSB3LmUoKSk7Ci0gICAgICAgIERpeUZwIHRlbl9tazsgIC8vIENhY2hlZCBw
b3dlciBvZiB0ZW46IDEwXi1rCi0gICAgICAgIGludCBtazsgICAgICAgIC8vIC1rCi0gICAgICAg
IGludCB0ZW5fbWtfbWluaW1hbF9iaW5hcnlfZXhwb25lbnQgPQotICAgICAgICBrTWluaW1hbFRh
cmdldEV4cG9uZW50IC0gKHcuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOwotICAgICAg
ICBpbnQgdGVuX21rX21heGltYWxfYmluYXJ5X2V4cG9uZW50ID0KLSAgICAgICAga01heGltYWxU
YXJnZXRFeHBvbmVudCAtICh3LmUoKSArIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKTsKLSAgICAg
ICAgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBvbmVudFJhbmdl
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVuX21rX21pbmltYWxfYmluYXJ5X2V4cG9uZW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVuX21rX21h
eGltYWxfYmluYXJ5X2V4cG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbl9taywgJm1rKTsKLSAgICAgICAgQVNT
RVJUKChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpICsgdGVuX21rLmUoKSArCi0gICAg
ICAgICAgICAgICAgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpICYmCi0gICAgICAgICAgICAgICAo
a01heGltYWxUYXJnZXRFeHBvbmVudCA+PSB3LmUoKSArIHRlbl9tay5lKCkgKwotICAgICAgICAg
ICAgICAgIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKSk7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB0
ZW5fbWsgaXMgb25seSBhbiBhcHByb3hpbWF0aW9uIG9mIDEwXi1rLiBBIERpeUZwIG9ubHkgY29u
dGFpbnMgYQotICAgICAgICAvLyA2NCBiaXQgc2lnbmlmaWNhbmQgYW5kIHRlbl9tayBpcyB0aHVz
IG9ubHkgcHJlY2lzZSB1cCB0byA2NCBiaXRzLgotICAgICAgICAKLSAgICAgICAgLy8gVGhlIERp
eUZwOjpUaW1lcyBwcm9jZWR1cmUgcm91bmRzIGl0cyByZXN1bHQsIGFuZCB0ZW5fbWsgaXMgYXBw
cm94aW1hdGVkCi0gICAgICAgIC8vIHRvby4gVGhlIHZhcmlhYmxlIHNjYWxlZF93IChhcyB3ZWxs
IGFzIHNjYWxlZF9ib3VuZGFyeV9taW51cy9wbHVzKSBhcmUgbm93Ci0gICAgICAgIC8vIG9mZiBi
eSBhIHNtYWxsIGFtb3VudC4KLSAgICAgICAgLy8gSW4gZmFjdDogc2NhbGVkX3cgLSB3KjEwXmsg
PCAxdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKSBvZiBzY2FsZWRfdy4KLSAgICAgICAgLy8g
SW4gb3RoZXIgd29yZHM6IGxldCBmID0gc2NhbGVkX3cuZigpIGFuZCBlID0gc2NhbGVkX3cuZSgp
LCB0aGVuCi0gICAgICAgIC8vICAgICAgICAgICAoZi0xKSAqIDJeZSA8IHcqMTBeayA8IChmKzEp
ICogMl5lCi0gICAgICAgIERpeUZwIHNjYWxlZF93ID0gRGl5RnA6OlRpbWVzKHcsIHRlbl9tayk7
Ci0gICAgICAgIEFTU0VSVChzY2FsZWRfdy5lKCkgPT0KLSAgICAgICAgICAgICAgIGJvdW5kYXJ5
X3BsdXMuZSgpICsgdGVuX21rLmUoKSArIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKTsKLSAgICAg
ICAgLy8gSW4gdGhlb3J5IGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGF2b2lkIHNvbWUgcmVjb21w
dXRhdGlvbnMgYnkgY29tcHV0aW5nCi0gICAgICAgIC8vIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4g
dyBhbmQgYm91bmRhcnlfbWludXMvcGx1cyAoYSBwb3dlciBvZiAyKSBhbmQgdG8KLSAgICAgICAg
Ly8gY29tcHV0ZSBzY2FsZWRfYm91bmRhcnlfbWludXMvcGx1cyBieSBzdWJ0cmFjdGluZy9hZGRp
bmcgZnJvbQotICAgICAgICAvLyBzY2FsZWRfdy4gSG93ZXZlciB0aGUgY29kZSBiZWNvbWVzIG11
Y2ggbGVzcyByZWFkYWJsZSBhbmQgdGhlIHNwZWVkCi0gICAgICAgIC8vIGVuaGFuY2VtZW50cyBh
cmUgbm90IHRlcnJpZmZpYy4KLSAgICAgICAgRGl5RnAgc2NhbGVkX2JvdW5kYXJ5X21pbnVzID0g
RGl5RnA6OlRpbWVzKGJvdW5kYXJ5X21pbnVzLCB0ZW5fbWspOwotICAgICAgICBEaXlGcCBzY2Fs
ZWRfYm91bmRhcnlfcGx1cyAgPSBEaXlGcDo6VGltZXMoYm91bmRhcnlfcGx1cywgIHRlbl9tayk7
Ci0gICAgICAgIAotICAgICAgICAvLyBEaWdpdEdlbiB3aWxsIGdlbmVyYXRlIHRoZSBkaWdpdHMg
b2Ygc2NhbGVkX3cuIFRoZXJlZm9yZSB3ZSBoYXZlCi0gICAgICAgIC8vIHYgPT0gKGRvdWJsZSkg
KHNjYWxlZF93ICogMTBeLW1rKS4KLSAgICAgICAgLy8gU2V0IGRlY2ltYWxfZXhwb25lbnQgPT0g
LW1rIGFuZCBwYXNzIGl0IHRvIERpZ2l0R2VuLiBJZiBzY2FsZWRfdyBpcyBub3QgYW4KLSAgICAg
ICAgLy8gaW50ZWdlciB0aGFuIGl0IHdpbGwgYmUgdXBkYXRlZC4gRm9yIGluc3RhbmNlIGlmIHNj
YWxlZF93ID09IDEuMjMgdGhlbgotICAgICAgICAvLyB0aGUgYnVmZmVyIHdpbGwgYmUgZmlsbGVk
IHdpdGggIjEyMyIgdW5kIHRoZSBkZWNpbWFsX2V4cG9uZW50IHdpbGwgYmUKLSAgICAgICAgLy8g
ZGVjcmVhc2VkIGJ5IDIuCi0gICAgICAgIGludCBrYXBwYTsKLSAgICAgICAgYm9vbCByZXN1bHQg
PSBEaWdpdEdlbihzY2FsZWRfYm91bmRhcnlfbWludXMsIHNjYWxlZF93LCBzY2FsZWRfYm91bmRh
cnlfcGx1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwg
JmthcHBhKTsKLSAgICAgICAgKmRlY2ltYWxfZXhwb25lbnQgPSAtbWsgKyBrYXBwYTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgLy8gVGhlICJjb3VudGVk
IiB2ZXJzaW9uIG9mIGdyaXN1MyAoc2VlIGFib3ZlKSBvbmx5IGdlbmVyYXRlcyByZXF1ZXN0ZWRf
ZGlnaXRzCi0gICAgLy8gbnVtYmVyIG9mIGRpZ2l0cy4gVGhpcyB2ZXJzaW9uIGRvZXMgbm90IGdl
bmVyYXRlIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiwKLSAgICAvLyBhbmQgd2l0aCBlbm91
Z2ggcmVxdWVzdGVkIGRpZ2l0cyAwLjEgd2lsbCBhdCBzb21lIHBvaW50IHByaW50IGFzIDAuOTk5
OTk5OS4uLgotICAgIC8vIEdyaXN1MyBpcyB0b28gaW1wcmVjaXNlIGZvciByZWFsIGhhbGZ3YXkg
Y2FzZXMgKDEuNSB3aWxsIG5vdCB3b3JrKSBhbmQKLSAgICAvLyB0aGVyZWZvcmUgdGhlIHJvdW5k
aW5nIHN0cmF0ZWd5IGZvciBoYWxmd2F5IGNhc2VzIGlzIGlycmVsZXZhbnQuCi0gICAgc3RhdGlj
IGJvb2wgR3Jpc3UzQ291bnRlZChkb3VibGUgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QnVmZmVyUmVmZXJlbmNlPGNoYXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCogbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNp
bWFsX2V4cG9uZW50KSB7Ci0gICAgICAgIERpeUZwIHcgPSBEb3VibGUodikuQXNOb3JtYWxpemVk
RGl5RnAoKTsKLSAgICAgICAgRGl5RnAgdGVuX21rOyAgLy8gQ2FjaGVkIHBvd2VyIG9mIHRlbjog
MTBeLWsKLSAgICAgICAgaW50IG1rOyAgICAgICAgLy8gLWsKLSAgICAgICAgaW50IHRlbl9ta19t
aW5pbWFsX2JpbmFyeV9leHBvbmVudCA9Ci0gICAgICAgIGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQg
LSAody5lKCkgKyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7Ci0gICAgICAgIGludCB0ZW5fbWtf
bWF4aW1hbF9iaW5hcnlfZXhwb25lbnQgPQotICAgICAgICBrTWF4aW1hbFRhcmdldEV4cG9uZW50
IC0gKHcuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOwotICAgICAgICBQb3dlcnNPZlRl
bkNhY2hlOjpHZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4cG9uZW50UmFuZ2UoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5f
bWtfbWluaW1hbF9iaW5hcnlfZXhwb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5fbWtfbWF4aW1hbF9iaW5hcnlf
ZXhwb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmdGVuX21rLCAmbWspOwotICAgICAgICBBU1NFUlQoKGtNaW5pbWFs
VGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgKyB0ZW5fbWsuZSgpICsKLSAgICAgICAgICAgICAgICBE
aXlGcDo6a1NpZ25pZmljYW5kU2l6ZSkgJiYKLSAgICAgICAgICAgICAgIChrTWF4aW1hbFRhcmdl
dEV4cG9uZW50ID49IHcuZSgpICsgdGVuX21rLmUoKSArCi0gICAgICAgICAgICAgICAgRGl5RnA6
OmtTaWduaWZpY2FuZFNpemUpKTsKLSAgICAgICAgLy8gTm90ZSB0aGF0IHRlbl9tayBpcyBvbmx5
IGFuIGFwcHJveGltYXRpb24gb2YgMTBeLWsuIEEgRGl5RnAgb25seSBjb250YWlucyBhCi0gICAg
ICAgIC8vIDY0IGJpdCBzaWduaWZpY2FuZCBhbmQgdGVuX21rIGlzIHRodXMgb25seSBwcmVjaXNl
IHVwIHRvIDY0IGJpdHMuCi0gICAgICAgIAotICAgICAgICAvLyBUaGUgRGl5RnA6OlRpbWVzIHBy
b2NlZHVyZSByb3VuZHMgaXRzIHJlc3VsdCwgYW5kIHRlbl9tayBpcyBhcHByb3hpbWF0ZWQKLSAg
ICAgICAgLy8gdG9vLiBUaGUgdmFyaWFibGUgc2NhbGVkX3cgKGFzIHdlbGwgYXMgc2NhbGVkX2Jv
dW5kYXJ5X21pbnVzL3BsdXMpIGFyZSBub3cKLSAgICAgICAgLy8gb2ZmIGJ5IGEgc21hbGwgYW1v
dW50LgotICAgICAgICAvLyBJbiBmYWN0OiBzY2FsZWRfdyAtIHcqMTBeayA8IDF1bHAgKHVuaXQg
aW4gdGhlIGxhc3QgcGxhY2UpIG9mIHNjYWxlZF93LgotICAgICAgICAvLyBJbiBvdGhlciB3b3Jk
czogbGV0IGYgPSBzY2FsZWRfdy5mKCkgYW5kIGUgPSBzY2FsZWRfdy5lKCksIHRoZW4KLSAgICAg
ICAgLy8gICAgICAgICAgIChmLTEpICogMl5lIDwgdyoxMF5rIDwgKGYrMSkgKiAyXmUKLSAgICAg
ICAgRGl5RnAgc2NhbGVkX3cgPSBEaXlGcDo6VGltZXModywgdGVuX21rKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIFdlIG5vdyBoYXZlIChkb3VibGUpIChzY2FsZWRfdyAqIDEwXi1taykuCi0gICAg
ICAgIC8vIERpZ2l0R2VuIHdpbGwgZ2VuZXJhdGUgdGhlIGZpcnN0IHJlcXVlc3RlZF9kaWdpdHMg
ZGlnaXRzIG9mIHNjYWxlZF93IGFuZAotICAgICAgICAvLyByZXR1cm4gdG9nZXRoZXIgd2l0aCBh
IGthcHBhIHN1Y2ggdGhhdCBzY2FsZWRfdyB+PSBidWZmZXIgKiAxMF5rYXBwYS4gKEl0Ci0gICAg
ICAgIC8vIHdpbGwgbm90IGFsd2F5cyBiZSBleGFjdGx5IHRoZSBzYW1lIHNpbmNlIERpZ2l0R2Vu
Q291bnRlZCBvbmx5IHByb2R1Y2VzIGEKLSAgICAgICAgLy8gbGltaXRlZCBudW1iZXIgb2YgZGln
aXRzLikKLSAgICAgICAgaW50IGthcHBhOwotICAgICAgICBib29sIHJlc3VsdCA9IERpZ2l0R2Vu
Q291bnRlZChzY2FsZWRfdywgcmVxdWVzdGVkX2RpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgsICZrYXBwYSk7Ci0gICAgICAgICpkZWNp
bWFsX2V4cG9uZW50ID0gLW1rICsga2FwcGE7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotICAgIAotICAgIAotICAgIGJvb2wgRmFzdER0b2EoZG91YmxlIHYsCi0gICAgICAgICAgICAg
ICAgICBGYXN0RHRvYU1vZGUgbW9kZSwKLSAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRf
ZGlnaXRzLAotICAgICAgICAgICAgICAgICAgQnVmZmVyUmVmZXJlbmNlPGNoYXI+IGJ1ZmZlciwK
LSAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgaW50KiBk
ZWNpbWFsX3BvaW50KSB7Ci0gICAgICAgIEFTU0VSVCh2ID4gMCk7Ci0gICAgICAgIEFTU0VSVCgh
RG91YmxlKHYpLklzU3BlY2lhbCgpKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7Ci0gICAgICAgIGludCBkZWNpbWFsX2V4cG9uZW50ID0gMDsKLSAgICAgICAgc3dpdGNo
IChtb2RlKSB7Ci0gICAgICAgICAgICBjYXNlIEZBU1RfRFRPQV9TSE9SVEVTVDoKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBHcmlzdTModiwgYnVmZmVyLCBsZW5ndGgsICZkZWNpbWFsX2V4cG9u
ZW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRkFTVF9EVE9B
X1BSRUNJU0lPTjoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBHcmlzdTNDb3VudGVkKHYsIHJl
cXVlc3RlZF9kaWdpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
dWZmZXIsIGxlbmd0aCwgJmRlY2ltYWxfZXhwb25lbnQpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgICpkZWNpbWFsX3Bv
aW50ID0gKmxlbmd0aCArIGRlY2ltYWxfZXhwb25lbnQ7Ci0gICAgICAgICAgICBidWZmZXJbKmxl
bmd0aF0gPSAnXDAnOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
ICAgIAotfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCi0KLX0gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2Ev
ZmFzdC1kdG9hLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZHRvYS9mYXN0
LWR0b2EuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE0NDMyMzdmOGFlOTM4OThi
YTM2Y2YxYzE2ZDkzZmE3MmZlM2QwNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZHRvYS9mYXN0
LWR0b2EuaAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEw
IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0vLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9GQVNUX0RUT0FfSF8KLSNkZWZp
bmUgRE9VQkxFX0NPTlZFUlNJT05fRkFTVF9EVE9BX0hfCi0KLSNpbmNsdWRlICJ1dGlscy5oIgot
Ci1uYW1lc3BhY2UgV1RGIHsKLQotbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKLSAgICAK
LSAgICBlbnVtIEZhc3REdG9hTW9kZSB7Ci0gICAgICAgIC8vIENvbXB1dGVzIHRoZSBzaG9ydGVz
dCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gaW5wdXQuIFRoZSByZXR1cm5lZAotICAgICAg
ICAvLyByZXN1bHQgd2lsbCBiZSB0aGUgbW9zdCBhY2N1cmF0ZSBudW1iZXIgb2YgdGhpcyBsZW5n
dGguIExvbmdlcgotICAgICAgICAvLyByZXByZXNlbnRhdGlvbnMgbWlnaHQgYmUgbW9yZSBhY2N1
cmF0ZS4KLSAgICAgICAgRkFTVF9EVE9BX1NIT1JURVNULAotICAgICAgICAvLyBDb21wdXRlcyBh
IHJlcHJlc2VudGF0aW9uIHdoZXJlIHRoZSBwcmVjaXNpb24gKG51bWJlciBvZiBkaWdpdHMpIGlz
Ci0gICAgICAgIC8vIGdpdmVuIGFzIGlucHV0LiBUaGUgcHJlY2lzaW9uIGlzIGluZGVwZW5kZW50
IG9mIHRoZSBkZWNpbWFsIHBvaW50LgotICAgICAgICBGQVNUX0RUT0FfUFJFQ0lTSU9OCi0gICAg
fTsKLSAgICAKLSAgICAvLyBGYXN0RHRvYSB3aWxsIHByb2R1Y2UgYXQgbW9zdCBrRmFzdER0b2FN
YXhpbWFsTGVuZ3RoIGRpZ2l0cy4gVGhpcyBkb2VzIG5vdAotICAgIC8vIGluY2x1ZGUgdGhlIHRl
cm1pbmF0aW5nICdcMCcgY2hhcmFjdGVyLgotICAgIHN0YXRpYyBjb25zdCBpbnQga0Zhc3REdG9h
TWF4aW1hbExlbmd0aCA9IDE3OwotICAgIAotICAgIC8vIFByb3ZpZGVzIGEgZGVjaW1hbCByZXBy
ZXNlbnRhdGlvbiBvZiB2LgotICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIGludGVycHJldGVk
IGFzIGJ1ZmZlciAqIDEwXihwb2ludCAtIGxlbmd0aCkuCi0gICAgLy8KLSAgICAvLyBQcmVjb25k
aXRpb246Ci0gICAgLy8gICAqIHYgbXVzdCBiZSBhIHN0cmljdGx5IHBvc2l0aXZlIGZpbml0ZSBk
b3VibGUuCi0gICAgLy8KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMsIG90aGVy
d2lzZSB0aGUgcmVzdWx0IGNhbiBub3QgYmUgdHJ1c3RlZC4KLSAgICAvLyBUaGVyZSB3aWxsIGJl
ICpsZW5ndGggZGlnaXRzIGluc2lkZSB0aGUgYnVmZmVyIGZvbGxvd2VkIGJ5IGEgbnVsbCB0ZXJt
aW5hdG9yLgotICAgIC8vIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgYW5kIG1vZGUgZXF1
YWxzCi0gICAgLy8gICAtIEZBU1RfRFRPQV9TSE9SVEVTVCwgdGhlbgotICAgIC8vICAgICB0aGUg
cGFyYW1ldGVyIHJlcXVlc3RlZF9kaWdpdHMgaXMgaWdub3JlZC4KLSAgICAvLyAgICAgVGhlIHJl
c3VsdCBzYXRpc2ZpZXMKLSAgICAvLyAgICAgICAgIHYgPT0gKGRvdWJsZSkgKGJ1ZmZlciAqIDEw
Xihwb2ludCAtIGxlbmd0aCkpLgotICAgIC8vICAgICBUaGUgZGlnaXRzIGluIHRoZSBidWZmZXIg
YXJlIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBwb3NzaWJsZS4gRS5nLgotICAgIC8vICAg
ICBpZiAwLjA5OTk5OTk5OTk5OSBhbmQgMC4xIHJlcHJlc2VudCB0aGUgc2FtZSBkb3VibGUgdGhl
biAiMSIgaXMgcmV0dXJuZWQKLSAgICAvLyAgICAgd2l0aCBwb2ludCA9IDAuCi0gICAgLy8gICAg
IFRoZSBsYXN0IGRpZ2l0IHdpbGwgYmUgY2xvc2VzdCB0byB0aGUgYWN0dWFsIHYuIFRoYXQgaXMs
IGV2ZW4gaWYgc2V2ZXJhbAotICAgIC8vICAgICBkaWdpdHMgbWlnaHQgY29ycmVjdGx5IHlpZWxk
ICd2JyB3aGVuIHJlYWQgYWdhaW4sIHRoZSBidWZmZXIgd2lsbCBjb250YWluCi0gICAgLy8gICAg
IHRoZSBvbmUgY2xvc2VzdCB0byB2LgotICAgIC8vICAgLSBGQVNUX0RUT0FfUFJFQ0lTSU9OLCB0
aGVuCi0gICAgLy8gICAgIHRoZSBidWZmZXIgY29udGFpbnMgcmVxdWVzdGVkX2RpZ2l0cyBkaWdp
dHMuCi0gICAgLy8gICAgIHRoZSBkaWZmZXJlbmNlIHYgLSAoYnVmZmVyICogMTBeKHBvaW50LWxl
bmd0aCkpIGlzIGNsb3Nlc3QgdG8gemVybyBmb3IKLSAgICAvLyAgICAgYWxsIHBvc3NpYmxlIHJl
cHJlc2VudGF0aW9ucyBvZiByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cy4KLSAgICAvLyAgICAgSWYg
dGhlcmUgYXJlIHR3byB2YWx1ZXMgdGhhdCBhcmUgZXF1YWxseSBjbG9zZSwgdGhlbiBGYXN0RHRv
YSByZXR1cm5zCi0gICAgLy8gICAgIGZhbHNlLgotICAgIC8vIEZvciBib3RoIG1vZGVzIHRoZSBi
dWZmZXIgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgcmVzdWx0LgotICAgIGJvb2wg
RmFzdER0b2EoZG91YmxlIGQsCi0gICAgICAgICAgICAgICAgICBGYXN0RHRvYU1vZGUgbW9kZSwK
LSAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAotICAgICAgICAgICAgICAg
ICAgQnVmZmVyUmVmZXJlbmNlPGNoYXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgIGludCog
bGVuZ3RoLAotICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50KTsKLSAgICAKLX0g
IC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQot
I2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9GQVNUX0RUT0FfSF8KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuY2MgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZHRvYS9maXhlZC1kdG9hLmNjCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWJhNzNjMGFhNjVkNGQ5ZWEzNmRjNDRmYTgxMDcyYWVk
NDM4MDdhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuY2MKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MDkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2pl
Y3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0vLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0vLyAgICAgICB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLS8vICAgICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJmaXhl
ZC1kdG9hLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotCi1uYW1l
c3BhY2UgZG91YmxlX2NvbnZlcnNpb24gewotICAgIAotICAgIC8vIFJlcHJlc2VudHMgYSAxMjhi
aXQgdHlwZS4gVGhpcyBjbGFzcyBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBuYXRpdmUgdHlwZSBv
bgotICAgIC8vIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgMTI4Yml0IGludGVnZXJzLgotICAgIGNs
YXNzIFVJbnQxMjggewotICAgIHB1YmxpYzoKLSAgICAgICAgVUludDEyOCgpIDogaGlnaF9iaXRz
XygwKSwgbG93X2JpdHNfKDApIHsgfQotICAgICAgICBVSW50MTI4KHVpbnQ2NF90IGhpZ2gsIHVp
bnQ2NF90IGxvdykgOiBoaWdoX2JpdHNfKGhpZ2gpLCBsb3dfYml0c18obG93KSB7IH0KLSAgICAg
ICAgCi0gICAgICAgIHZvaWQgTXVsdGlwbHkodWludDMyX3QgbXVsdGlwbGljYW5kKSB7Ci0gICAg
ICAgICAgICB1aW50NjRfdCBhY2N1bXVsYXRvcjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
YWNjdW11bGF0b3IgPSAobG93X2JpdHNfICYga01hc2szMikgKiBtdWx0aXBsaWNhbmQ7Ci0gICAg
ICAgICAgICB1aW50MzJfdCBwYXJ0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjY3VtdWxhdG9y
ICYga01hc2szMik7Ci0gICAgICAgICAgICBhY2N1bXVsYXRvciA+Pj0gMzI7Ci0gICAgICAgICAg
ICBhY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yICsgKGxvd19iaXRzXyA+PiAzMikgKiBtdWx0aXBs
aWNhbmQ7Ci0gICAgICAgICAgICBsb3dfYml0c18gPSAoYWNjdW11bGF0b3IgPDwgMzIpICsgcGFy
dDsKLSAgICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSAzMjsKLSAgICAgICAgICAgIGFjY3VtdWxh
dG9yID0gYWNjdW11bGF0b3IgKyAoaGlnaF9iaXRzXyAmIGtNYXNrMzIpICogbXVsdGlwbGljYW5k
OwotICAgICAgICAgICAgcGFydCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihhY2N1bXVsYXRvciAm
IGtNYXNrMzIpOwotICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IDMyOwotICAgICAgICAgICAg
YWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvciArIChoaWdoX2JpdHNfID4+IDMyKSAqIG11bHRpcGxp
Y2FuZDsKLSAgICAgICAgICAgIGhpZ2hfYml0c18gPSAoYWNjdW11bGF0b3IgPDwgMzIpICsgcGFy
dDsKLSAgICAgICAgICAgIEFTU0VSVCgoYWNjdW11bGF0b3IgPj4gMzIpID09IDApOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIFNoaWZ0KGludCBzaGlmdF9hbW91bnQpIHsKLSAg
ICAgICAgICAgIEFTU0VSVCgtNjQgPD0gc2hpZnRfYW1vdW50ICYmIHNoaWZ0X2Ftb3VudCA8PSA2
NCk7Ci0gICAgICAgICAgICBpZiAoc2hpZnRfYW1vdW50ID09IDApIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0X2Ftb3VudCA9PSAtNjQpIHsK
LSAgICAgICAgICAgICAgICBoaWdoX2JpdHNfID0gbG93X2JpdHNfOwotICAgICAgICAgICAgICAg
IGxvd19iaXRzXyA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0X2Ftb3VudCA9PSA2
NCkgewotICAgICAgICAgICAgICAgIGxvd19iaXRzXyA9IGhpZ2hfYml0c187Ci0gICAgICAgICAg
ICAgICAgaGlnaF9iaXRzXyA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0X2Ftb3Vu
dCA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgaGlnaF9iaXRzXyA8PD0gLXNoaWZ0X2Ftb3VudDsK
LSAgICAgICAgICAgICAgICBoaWdoX2JpdHNfICs9IGxvd19iaXRzXyA+PiAoNjQgKyBzaGlmdF9h
bW91bnQpOwotICAgICAgICAgICAgICAgIGxvd19iaXRzXyA8PD0gLXNoaWZ0X2Ftb3VudDsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbG93X2JpdHNfID4+PSBzaGlmdF9h
bW91bnQ7Ci0gICAgICAgICAgICAgICAgbG93X2JpdHNfICs9IGhpZ2hfYml0c18gPDwgKDY0IC0g
c2hpZnRfYW1vdW50KTsKLSAgICAgICAgICAgICAgICBoaWdoX2JpdHNfID4+PSBzaGlmdF9hbW91
bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIE1vZGlm
aWVzICp0aGlzIHRvICp0aGlzIE1PRCAoMl5wb3dlcikuCi0gICAgICAgIC8vIFJldHVybnMgKnRo
aXMgRElWICgyXnBvd2VyKS4KLSAgICAgICAgaW50IERpdk1vZFBvd2VyT2YyKGludCBwb3dlcikg
ewotICAgICAgICAgICAgaWYgKHBvd2VyID49IDY0KSB7Ci0gICAgICAgICAgICAgICAgaW50IHJl
c3VsdCA9IHN0YXRpY19jYXN0PGludD4oaGlnaF9iaXRzXyA+PiAocG93ZXIgLSA2NCkpOwotICAg
ICAgICAgICAgICAgIGhpZ2hfYml0c18gLT0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJlc3VsdCkg
PDwgKHBvd2VyIC0gNjQpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVpbnQ2NF90IHBhcnRfbG93ID0gbG93X2Jp
dHNfID4+IHBvd2VyOwotICAgICAgICAgICAgICAgIHVpbnQ2NF90IHBhcnRfaGlnaCA9IGhpZ2hf
Yml0c18gPDwgKDY0IC0gcG93ZXIpOwotICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBhcnRfbG93ICsgcGFydF9oaWdoKTsKLSAgICAgICAgICAgICAgICBoaWdo
X2JpdHNfID0gMDsKLSAgICAgICAgICAgICAgICBsb3dfYml0c18gLT0gcGFydF9sb3cgPDwgcG93
ZXI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBJc1plcm8oKSBjb25zdCB7Ci0gICAgICAgICAg
ICByZXR1cm4gaGlnaF9iaXRzXyA9PSAwICYmIGxvd19iaXRzXyA9PSAwOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpbnQgQml0QXQoaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgICAgICBp
ZiAocG9zaXRpb24gPj0gNjQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihoaWdoX2JpdHNfID4+IChwb3NpdGlvbiAtIDY0KSkgJiAxOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihsb3dfYml0c18g
Pj4gcG9zaXRpb24pICYgMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAg
ICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qga01hc2szMiA9IDB4RkZG
RkZGRkY7Ci0gICAgICAgIC8vIFZhbHVlID09IChoaWdoX2JpdHNfIDw8IDY0KSArIGxvd19iaXRz
XwotICAgICAgICB1aW50NjRfdCBoaWdoX2JpdHNfOwotICAgICAgICB1aW50NjRfdCBsb3dfYml0
c187Ci0gICAgfTsKLSAgICAKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgaW50IGtEb3VibGVTaWdu
aWZpY2FuZFNpemUgPSA1MzsgIC8vIEluY2x1ZGVzIHRoZSBoaWRkZW4gYml0LgotICAgIAotICAg
IAotICAgIHN0YXRpYyB2b2lkIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHVpbnQzMl90IG51bWJl
ciwgaW50IHJlcXVlc3RlZF9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQnVmZmVyUmVmZXJlbmNlPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgpIHsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZF9sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewot
ICAgICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSArIGldID0gJzAnICsgbnVtYmVyICUgMTA7Ci0g
ICAgICAgICAgICBudW1iZXIgLz0gMTA7Ci0gICAgICAgIH0KLSAgICAgICAgKmxlbmd0aCArPSBy
ZXF1ZXN0ZWRfbGVuZ3RoOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBzdGF0aWMgdm9pZCBGaWxs
RGlnaXRzMzIodWludDMyX3QgbnVtYmVyLCBCdWZmZXJSZWZlcmVuY2U8Y2hhcj4gYnVmZmVyLCBp
bnQqIGxlbmd0aCkgewotICAgICAgICBpbnQgbnVtYmVyX2xlbmd0aCA9IDA7Ci0gICAgICAgIC8v
IFdlIGZpbGwgdGhlIGRpZ2l0cyBpbiByZXZlcnNlIG9yZGVyIGFuZCBleGNoYW5nZSB0aGVtIGFm
dGVyd2FyZHMuCi0gICAgICAgIHdoaWxlIChudW1iZXIgIT0gMCkgewotICAgICAgICAgICAgaW50
IGRpZ2l0ID0gbnVtYmVyICUgMTA7Ci0gICAgICAgICAgICBudW1iZXIgLz0gMTA7Ci0gICAgICAg
ICAgICBidWZmZXJbKCpsZW5ndGgpICsgbnVtYmVyX2xlbmd0aF0gPSAnMCcgKyBkaWdpdDsKLSAg
ICAgICAgICAgIG51bWJlcl9sZW5ndGgrKzsKLSAgICAgICAgfQotICAgICAgICAvLyBFeGNoYW5n
ZSB0aGUgZGlnaXRzLgotICAgICAgICBpbnQgaSA9ICpsZW5ndGg7Ci0gICAgICAgIGludCBqID0g
Kmxlbmd0aCArIG51bWJlcl9sZW5ndGggLSAxOwotICAgICAgICB3aGlsZSAoaSA8IGopIHsKLSAg
ICAgICAgICAgIGNoYXIgdG1wID0gYnVmZmVyW2ldOwotICAgICAgICAgICAgYnVmZmVyW2ldID0g
YnVmZmVyW2pdOwotICAgICAgICAgICAgYnVmZmVyW2pdID0gdG1wOwotICAgICAgICAgICAgaSsr
OwotICAgICAgICAgICAgai0tOwotICAgICAgICB9Ci0gICAgICAgICpsZW5ndGggKz0gbnVtYmVy
X2xlbmd0aDsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgc3RhdGljIHZvaWQgRmlsbERpZ2l0czY0
Rml4ZWRMZW5ndGgodWludDY0X3QgbnVtYmVyLCBpbnQgcmVxdWVzdGVkX2xlbmd0aCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJSZWZlcmVuY2U8Y2hhcj4g
YnVmZmVyLCBpbnQqIGxlbmd0aCkgewotICAgICAgICBVTlVTRURfUEFSQU0ocmVxdWVzdGVkX2xl
bmd0aCk7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IGtUZW43ID0gMTAwMDAwMDA7Ci0gICAgICAg
IC8vIEZvciBlZmZpY2llbmN5IGN1dCB0aGUgbnVtYmVyIGludG8gMyB1aW50MzJfdCBwYXJ0cywg
YW5kIHByaW50IHRob3NlLgotICAgICAgICB1aW50MzJfdCBwYXJ0MiA9IHN0YXRpY19jYXN0PHVp
bnQzMl90PihudW1iZXIgJSBrVGVuNyk7Ci0gICAgICAgIG51bWJlciAvPSBrVGVuNzsKLSAgICAg
ICAgdWludDMyX3QgcGFydDEgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyICUga1Rlbjcp
OwotICAgICAgICB1aW50MzJfdCBwYXJ0MCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIg
LyBrVGVuNyk7Ci0gICAgICAgIAotICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0
MCwgMywgYnVmZmVyLCBsZW5ndGgpOwotICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChw
YXJ0MSwgNywgYnVmZmVyLCBsZW5ndGgpOwotICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0
aChwYXJ0MiwgNywgYnVmZmVyLCBsZW5ndGgpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBzdGF0
aWMgdm9pZCBGaWxsRGlnaXRzNjQodWludDY0X3QgbnVtYmVyLCBCdWZmZXJSZWZlcmVuY2U8Y2hh
cj4gYnVmZmVyLCBpbnQqIGxlbmd0aCkgewotICAgICAgICBjb25zdCB1aW50MzJfdCBrVGVuNyA9
IDEwMDAwMDAwOwotICAgICAgICAvLyBGb3IgZWZmaWNpZW5jeSBjdXQgdGhlIG51bWJlciBpbnRv
IDMgdWludDMyX3QgcGFydHMsIGFuZCBwcmludCB0aG9zZS4KLSAgICAgICAgdWludDMyX3QgcGFy
dDIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyICUga1RlbjcpOwotICAgICAgICBudW1i
ZXIgLz0ga1Rlbjc7Ci0gICAgICAgIHVpbnQzMl90IHBhcnQxID0gc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KG51bWJlciAlIGtUZW43KTsKLSAgICAgICAgdWludDMyX3QgcGFydDAgPSBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4obnVtYmVyIC8ga1RlbjcpOwotICAgICAgICAKLSAgICAgICAgaWYgKHBhcnQw
ICE9IDApIHsKLSAgICAgICAgICAgIEZpbGxEaWdpdHMzMihwYXJ0MCwgYnVmZmVyLCBsZW5ndGgp
OwotICAgICAgICAgICAgRmlsbERpZ2l0czMyRml4ZWRMZW5ndGgocGFydDEsIDcsIGJ1ZmZlciwg
bGVuZ3RoKTsKLSAgICAgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQyLCA3LCBi
dWZmZXIsIGxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocGFydDEgIT0gMCkgewotICAgICAg
ICAgICAgRmlsbERpZ2l0czMyKHBhcnQxLCBidWZmZXIsIGxlbmd0aCk7Ci0gICAgICAgICAgICBG
aWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MiwgNywgYnVmZmVyLCBsZW5ndGgpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgRmlsbERpZ2l0czMyKHBhcnQyLCBidWZmZXIsIGxlbmd0
aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgCi0gICAgc3RhdGljIHZvaWQgUm91bmRV
cChCdWZmZXJSZWZlcmVuY2U8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCwgaW50KiBkZWNpbWFs
X3BvaW50KSB7Ci0gICAgICAgIC8vIEFuIGVtcHR5IGJ1ZmZlciByZXByZXNlbnRzIDAuCi0gICAg
ICAgIGlmICgqbGVuZ3RoID09IDApIHsKLSAgICAgICAgICAgIGJ1ZmZlclswXSA9ICcxJzsKLSAg
ICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gMTsKLSAgICAgICAgICAgICpsZW5ndGggPSAxOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIFJvdW5kIHRoZSBsYXN0
IGRpZ2l0IHVudGlsIHdlIGVpdGhlciBoYXZlIGEgZGlnaXQgdGhhdCB3YXMgbm90ICc5JyBvciB1
bnRpbAotICAgICAgICAvLyB3ZSByZWFjaGVkIHRoZSBmaXJzdCBkaWdpdC4KLSAgICAgICAgYnVm
ZmVyWygqbGVuZ3RoKSAtIDFdKys7Ci0gICAgICAgIGZvciAoaW50IGkgPSAoKmxlbmd0aCkgLSAx
OyBpID4gMDsgLS1pKSB7Ci0gICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9ICcwJyArIDEwKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnVm
ZmVyW2ldID0gJzAnOwotICAgICAgICAgICAgYnVmZmVyW2kgLSAxXSsrOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIElmIHRoZSBmaXJzdCBkaWdpdCBpcyBub3cgJzAnICsgMTAsIHdlIHdvdWxkIG5l
ZWQgdG8gc2V0IGl0IHRvICcwJyBhbmQgYWRkCi0gICAgICAgIC8vIGEgJzEnIGluIGZyb250LiBI
b3dldmVyIHdlIHJlYWNoIHRoZSBmaXJzdCBkaWdpdCBvbmx5IGlmIGFsbCBmb2xsb3dpbmcKLSAg
ICAgICAgLy8gZGlnaXRzIGhhZCBiZWVuICc5JyBiZWZvcmUgcm91bmRpbmcgdXAuIE5vdyBhbGwg
dHJhaWxpbmcgZGlnaXRzIGFyZSAnMCcgYW5kCi0gICAgICAgIC8vIHdlIHNpbXBseSBzd2l0Y2gg
dGhlIGZpcnN0IGRpZ2l0IHRvICcxJyBhbmQgdXBkYXRlIHRoZSBkZWNpbWFsLXBvaW50Ci0gICAg
ICAgIC8vIChpbmRpY2F0aW5nIHRoYXQgdGhlIHBvaW50IGlzIG5vdyBvbmUgZGlnaXQgdG8gdGhl
IHJpZ2h0KS4KLSAgICAgICAgaWYgKGJ1ZmZlclswXSA9PSAnMCcgKyAxMCkgewotICAgICAgICAg
ICAgYnVmZmVyWzBdID0gJzEnOwotICAgICAgICAgICAgKCpkZWNpbWFsX3BvaW50KSsrOwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIAotICAgIC8vIFRoZSBnaXZlbiBmcmFjdGlvbmFscyBu
dW1iZXIgcmVwcmVzZW50cyBhIGZpeGVkLXBvaW50IG51bWJlciB3aXRoIGJpbmFyeQotICAgIC8v
IHBvaW50IGF0IGJpdCAoLWV4cG9uZW50KS4KLSAgICAvLyBQcmVjb25kaXRpb25zOgotICAgIC8v
ICAgLTEyOCA8PSBleHBvbmVudCA8PSAwLgotICAgIC8vICAgMCA8PSBmcmFjdGlvbmFscyAqIDJe
ZXhwb25lbnQgPCAxCi0gICAgLy8gICBUaGUgYnVmZmVyIGhvbGRzIHRoZSByZXN1bHQuCi0gICAg
Ly8gVGhlIGZ1bmN0aW9uIHdpbGwgcm91bmQgaXRzIHJlc3VsdC4gRHVyaW5nIHRoZSByb3VuZGlu
Zy1wcm9jZXNzIGRpZ2l0cyBub3QKLSAgICAvLyBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBt
aWdodCBiZSB1cGRhdGVkLCBhbmQgdGhlIGRlY2ltYWwtcG9pbnQgdmFyaWFibGUKLSAgICAvLyBt
aWdodCBiZSB1cGRhdGVkLiBJZiB0aGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyB0aGUgZGlnaXRzIDk5
IGFuZCB0aGUgYnVmZmVyCi0gICAgLy8gYWxyZWFkeSBjb250YWluZWQgIjE5OSIgKHRodXMgeWll
bGRpbmcgYSBidWZmZXIgb2YgIjE5OTk5IikgdGhlbiBhCi0gICAgLy8gcm91bmRpbmctdXAgd2ls
bCBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgdG8gIjIwMDAwIi4KLSAgICBzdGF0
aWMgdm9pZCBGaWxsRnJhY3Rpb25hbHModWludDY0X3QgZnJhY3Rpb25hbHMsIGludCBleHBvbmVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyYWN0aW9uYWxfY291bnQs
IEJ1ZmZlclJlZmVyZW5jZTxjaGFyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCogbGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKLSAgICAgICAgQVNTRVJU
KC0xMjggPD0gZXhwb25lbnQgJiYgZXhwb25lbnQgPD0gMCk7Ci0gICAgICAgIC8vICdmcmFjdGlv
bmFscycgaXMgYSBmaXhlZC1wb2ludCBudW1iZXIsIHdpdGggYmluYXJ5IHBvaW50IGF0IGJpdAot
ICAgICAgICAvLyAoLWV4cG9uZW50KS4gSW5zaWRlIHRoZSBmdW5jdGlvbiB0aGUgbm9uLWNvbnZl
cnRlZCByZW1haW5kZXIgb2YgZnJhY3Rpb25hbHMKLSAgICAgICAgLy8gaXMgYSBmaXhlZC1wb2lu
dCBudW1iZXIsIHdpdGggYmluYXJ5IHBvaW50IGF0IGJpdCAncG9pbnQnLgotICAgICAgICBpZiAo
LWV4cG9uZW50IDw9IDY0KSB7Ci0gICAgICAgICAgICAvLyBPbmUgNjQgYml0IG51bWJlciBpcyBz
dWZmaWNpZW50LgotICAgICAgICAgICAgQVNTRVJUKGZyYWN0aW9uYWxzID4+IDU2ID09IDApOwot
ICAgICAgICAgICAgaW50IHBvaW50ID0gLWV4cG9uZW50OwotICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBmcmFjdGlvbmFsX2NvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAo
ZnJhY3Rpb25hbHMgPT0gMCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgLy8gSW5zdGVhZCBvZiBt
dWx0aXBseWluZyBieSAxMCB3ZSBtdWx0aXBseSBieSA1IGFuZCBhZGp1c3QgdGhlIHBvaW50Ci0g
ICAgICAgICAgICAgICAgLy8gbG9jYXRpb24uIFRoaXMgd2F5IHRoZSBmcmFjdGlvbmFscyB2YXJp
YWJsZSB3aWxsIG5vdCBvdmVyZmxvdy4KLSAgICAgICAgICAgICAgICAvLyBJbnZhcmlhbnQgYXQg
dGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcDogZnJhY3Rpb25hbHMgPCAyXnBvaW50LgotICAgICAg
ICAgICAgICAgIC8vIEluaXRpYWxseSB3ZSBoYXZlOiBwb2ludCA8PSA2NCBhbmQgZnJhY3Rpb25h
bHMgPCAyXjU2Ci0gICAgICAgICAgICAgICAgLy8gQWZ0ZXIgZWFjaCBpdGVyYXRpb24gdGhlIHBv
aW50IGlzIGRlY3JlbWVudGVkIGJ5IG9uZS4KLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQg
NV4zID0gMTI1IDwgMTI4ID0gMl43LgotICAgICAgICAgICAgICAgIC8vIFRoZXJlZm9yZSB0aHJl
ZSBpdGVyYXRpb25zIG9mIHRoaXMgbG9vcCB3aWxsIG5vdCBvdmVyZmxvdyBmcmFjdGlvbmFscwot
ICAgICAgICAgICAgICAgIC8vIChldmVuIHdpdGhvdXQgdGhlIHN1YnRyYWN0aW9uIGF0IHRoZSBl
bmQgb2YgdGhlIGxvb3AgYm9keSkuIEF0IHRoaXMKLSAgICAgICAgICAgICAgICAvLyB0aW1lIHBv
aW50IHdpbGwgc2F0aXNmeSBwb2ludCA8PSA2MSBhbmQgdGhlcmVmb3JlIGZyYWN0aW9uYWxzIDwg
Ml5wb2ludAotICAgICAgICAgICAgICAgIC8vIGFuZCBhbnkgZnVydGhlciBtdWx0aXBsaWNhdGlv
biBvZiBmcmFjdGlvbmFscyBieSA1IHdpbGwgbm90IG92ZXJmbG93LgotICAgICAgICAgICAgICAg
IGZyYWN0aW9uYWxzICo9IDU7Ci0gICAgICAgICAgICAgICAgcG9pbnQtLTsKLSAgICAgICAgICAg
ICAgICBpbnQgZGlnaXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZyYWN0aW9uYWxzID4+IHBvaW50KTsK
LSAgICAgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKLSAgICAgICAg
ICAgICAgICAoKmxlbmd0aCkrKzsKLSAgICAgICAgICAgICAgICBmcmFjdGlvbmFscyAtPSBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oZGlnaXQpIDw8IHBvaW50OwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgLy8gSWYgdGhlIGZpcnN0IGJpdCBhZnRlciB0aGUgcG9pbnQgaXMgc2V0IHdlIGhhdmUg
dG8gcm91bmQgdXAuCi0gICAgICAgICAgICBpZiAoKChmcmFjdGlvbmFscyA+PiAocG9pbnQgLSAx
KSkgJiAxKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgUm91bmRVcChidWZmZXIsIGxlbmd0aCwg
ZGVjaW1hbF9wb2ludCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAvLyBXZSBu
ZWVkIDEyOCBiaXRzLgotICAgICAgICAgICAgQVNTRVJUKDY0IDwgLWV4cG9uZW50ICYmIC1leHBv
bmVudCA8PSAxMjgpOwotICAgICAgICAgICAgVUludDEyOCBmcmFjdGlvbmFsczEyOCA9IFVJbnQx
MjgoZnJhY3Rpb25hbHMsIDApOwotICAgICAgICAgICAgZnJhY3Rpb25hbHMxMjguU2hpZnQoLWV4
cG9uZW50IC0gNjQpOwotICAgICAgICAgICAgaW50IHBvaW50ID0gMTI4OwotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBmcmFjdGlvbmFsX2NvdW50OyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoZnJhY3Rpb25hbHMxMjguSXNaZXJvKCkpIGJyZWFrOwotICAgICAgICAgICAgICAg
IC8vIEFzIGJlZm9yZTogaW5zdGVhZCBvZiBtdWx0aXBseWluZyBieSAxMCB3ZSBtdWx0aXBseSBi
eSA1IGFuZCBhZGp1c3QgdGhlCi0gICAgICAgICAgICAgICAgLy8gcG9pbnQgbG9jYXRpb24uCi0g
ICAgICAgICAgICAgICAgLy8gVGhpcyBtdWx0aXBsaWNhdGlvbiB3aWxsIG5vdCBvdmVyZmxvdyBm
b3IgdGhlIHNhbWUgcmVhc29ucyBhcyBiZWZvcmUuCi0gICAgICAgICAgICAgICAgZnJhY3Rpb25h
bHMxMjguTXVsdGlwbHkoNSk7Ci0gICAgICAgICAgICAgICAgcG9pbnQtLTsKLSAgICAgICAgICAg
ICAgICBpbnQgZGlnaXQgPSBmcmFjdGlvbmFsczEyOC5EaXZNb2RQb3dlck9mMihwb2ludCk7Ci0g
ICAgICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJzAnICsgZGlnaXQ7Ci0gICAgICAgICAg
ICAgICAgKCpsZW5ndGgpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZnJhY3Rp
b25hbHMxMjguQml0QXQocG9pbnQgLSAxKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgUm91bmRV
cChidWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgCi0gICAgCi0gICAgLy8gUmVtb3ZlcyBsZWFkaW5nIGFuZCB0cmFpbGlu
ZyB6ZXJvcy4KLSAgICAvLyBJZiBsZWFkaW5nIHplcm9zIGFyZSByZW1vdmVkIHRoZW4gdGhlIGRl
Y2ltYWwgcG9pbnQgcG9zaXRpb24gaXMgYWRqdXN0ZWQuCi0gICAgc3RhdGljIHZvaWQgVHJpbVpl
cm9zKEJ1ZmZlclJlZmVyZW5jZTxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoLCBpbnQqIGRlY2lt
YWxfcG9pbnQpIHsKLSAgICAgICAgd2hpbGUgKCpsZW5ndGggPiAwICYmIGJ1ZmZlclsoKmxlbmd0
aCkgLSAxXSA9PSAnMCcpIHsKLSAgICAgICAgICAgICgqbGVuZ3RoKS0tOwotICAgICAgICB9Ci0g
ICAgICAgIGludCBmaXJzdF9ub25femVybyA9IDA7Ci0gICAgICAgIHdoaWxlIChmaXJzdF9ub25f
emVybyA8ICpsZW5ndGggJiYgYnVmZmVyW2ZpcnN0X25vbl96ZXJvXSA9PSAnMCcpIHsKLSAgICAg
ICAgICAgIGZpcnN0X25vbl96ZXJvKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZpcnN0X25v
bl96ZXJvICE9IDApIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBmaXJzdF9ub25femVybzsg
aSA8ICpsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIGJ1ZmZlcltpIC0gZmlyc3Rfbm9u
X3plcm9dID0gYnVmZmVyW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmxlbmd0aCAt
PSBmaXJzdF9ub25femVybzsKLSAgICAgICAgICAgICpkZWNpbWFsX3BvaW50IC09IGZpcnN0X25v
bl96ZXJvOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIAotICAgIGJvb2wgRmFzdEZpeGVk
RHRvYShkb3VibGUgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyYWN0aW9uYWxfY291
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclJlZmVyZW5jZTxjaGFyPiBidWZmZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAotICAgICAgICAgICAgICAgICAg
ICAgICBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKLSAgICAgICAgY29uc3QgdWludDMyX3Qga01heFVJ
bnQzMiA9IDB4RkZGRkZGRkY7Ci0gICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gRG91Ymxl
KHYpLlNpZ25pZmljYW5kKCk7Ci0gICAgICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2KS5FeHBv
bmVudCgpOwotICAgICAgICAvLyB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50ICh3aXRoIHNp
Z25pZmljYW5kIGEgNTNiaXQgaW50ZWdlcikuCi0gICAgICAgIC8vIElmIHRoZSBleHBvbmVudCBp
cyBsYXJnZXIgdGhhbiAyMCAoaS5lLiB3ZSBtYXkgaGF2ZSBhIDczYml0IG51bWJlcikgdGhlbiB3
ZQotICAgICAgICAvLyBkb24ndCBrbm93IGhvdyB0byBjb21wdXRlIHRoZSByZXByZXNlbnRhdGlv
bi4gMl43MyB+PSA5LjUqMTBeMjEuCi0gICAgICAgIC8vIElmIG5lY2Vzc2FyeSB0aGlzIGxpbWl0
IGNvdWxkIHByb2JhYmx5IGJlIGluY3JlYXNlZCwgYnV0IHdlIGRvbid0IG5lZWQKLSAgICAgICAg
Ly8gbW9yZS4KLSAgICAgICAgaWYgKGV4cG9uZW50ID4gMjApIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKGZyYWN0aW9uYWxfY291bnQgPiAyMCkgcmV0dXJuIGZhbHNlOwotICAgICAgICAqbGVu
Z3RoID0gMDsKLSAgICAgICAgLy8gQXQgbW9zdCBrRG91YmxlU2lnbmlmaWNhbmRTaXplIGJpdHMg
b2YgdGhlIHNpZ25pZmljYW5kIGFyZSBub24temVyby4KLSAgICAgICAgLy8gR2l2ZW4gYSA2NCBi
aXQgaW50ZWdlciB3ZSBoYXZlIDExIDBzIGZvbGxvd2VkIGJ5IDUzIHBvdGVudGlhbGx5IG5vbi16
ZXJvCi0gICAgICAgIC8vIGJpdHM6ICAwLi4xMSouLjB4eHguLjUzKi4ueHgKLSAgICAgICAgaWYg
KGV4cG9uZW50ICsga0RvdWJsZVNpZ25pZmljYW5kU2l6ZSA+IDY0KSB7Ci0gICAgICAgICAgICAv
LyBUaGUgZXhwb25lbnQgbXVzdCBiZSA+IDExLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
IC8vIFdlIGtub3cgdGhhdCB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50LgotICAgICAgICAg
ICAgLy8gQW5kIHRoZSBleHBvbmVudCA+IDExLgotICAgICAgICAgICAgLy8gV2Ugc2ltcGxpZnkg
dGhlIHRhc2sgYnkgZGl2aWRpbmcgdiBieSAxMF4xNy4KLSAgICAgICAgICAgIC8vIFRoZSBxdW90
aWVudCBkZWxpdmVycyB0aGUgZmlyc3QgZGlnaXRzLCBhbmQgdGhlIHJlbWFpbmRlciBmaXRzIGlu
dG8gYSA2NAotICAgICAgICAgICAgLy8gYml0IG51bWJlci4KLSAgICAgICAgICAgIC8vIERpdmlk
aW5nIGJ5IDEwXjE3IGlzIGVxdWl2YWxlbnQgdG8gZGl2aWRpbmcgYnkgNV4xNyoyXjE3LgotICAg
ICAgICAgICAgY29uc3QgdWludDY0X3Qga0ZpdmUxNyA9IFVJTlQ2NF8yUEFSVF9DKDB4QjEsIEEy
QkMyRUM1KTsgIC8vIDVeMTcKLSAgICAgICAgICAgIHVpbnQ2NF90IGRpdmlzb3IgPSBrRml2ZTE3
OwotICAgICAgICAgICAgaW50IGRpdmlzb3JfcG93ZXIgPSAxNzsKLSAgICAgICAgICAgIHVpbnQ2
NF90IGRpdmlkZW5kID0gc2lnbmlmaWNhbmQ7Ci0gICAgICAgICAgICB1aW50MzJfdCBxdW90aWVu
dDsKLSAgICAgICAgICAgIHVpbnQ2NF90IHJlbWFpbmRlcjsKLSAgICAgICAgICAgIC8vIExldCB2
ID0gZiAqIDJeZSB3aXRoIGYgPT0gc2lnbmlmaWNhbmQgYW5kIGUgPT0gZXhwb25lbnQuCi0gICAg
ICAgICAgICAvLyBUaGVuIG5lZWQgcSAocXVvdGllbnQpIGFuZCByIChyZW1haW5kZXIpIGFzIGZv
bGxvd3M6Ci0gICAgICAgICAgICAvLyAgIHYgICAgICAgICAgICA9IHEgKiAxMF4xNyAgICAgICAr
IHIKLSAgICAgICAgICAgIC8vICAgZiAqIDJeZSAgICAgID0gcSAqIDEwXjE3ICAgICAgICsgcgot
ICAgICAgICAgICAgLy8gICBmICogMl5lICAgICAgPSBxICogNV4xNyAqIDJeMTcgKyByCi0gICAg
ICAgICAgICAvLyBJZiBlID4gMTcgdGhlbgotICAgICAgICAgICAgLy8gICBmICogMl4oZS0xNykg
PSBxICogNV4xNyAgICAgICAgKyByLzJeMTcKLSAgICAgICAgICAgIC8vIGVsc2UKLSAgICAgICAg
ICAgIC8vICAgZiAgPSBxICogNV4xNyAqIDJeKDE3LWUpICsgci8yXmUKLSAgICAgICAgICAgIGlm
IChleHBvbmVudCA+IGRpdmlzb3JfcG93ZXIpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBvbmx5
IGFsbG93IGV4cG9uZW50cyBvZiB1cCB0byAyMCBhbmQgdGhlcmVmb3JlICgxNyAtIGUpIDw9IDMK
LSAgICAgICAgICAgICAgICBkaXZpZGVuZCA8PD0gZXhwb25lbnQgLSBkaXZpc29yX3Bvd2VyOwot
ICAgICAgICAgICAgICAgIHF1b3RpZW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRpdmlkZW5k
IC8gZGl2aXNvcik7Ci0gICAgICAgICAgICAgICAgcmVtYWluZGVyID0gKGRpdmlkZW5kICUgZGl2
aXNvcikgPDwgZGl2aXNvcl9wb3dlcjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgZGl2aXNvciA8PD0gZGl2aXNvcl9wb3dlciAtIGV4cG9uZW50OwotICAgICAgICAgICAg
ICAgIHF1b3RpZW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRpdmlkZW5kIC8gZGl2aXNvcik7
Ci0gICAgICAgICAgICAgICAgcmVtYWluZGVyID0gKGRpdmlkZW5kICUgZGl2aXNvcikgPDwgZXhw
b25lbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBGaWxsRGlnaXRzMzIocXVvdGllbnQs
IGJ1ZmZlciwgbGVuZ3RoKTsKLSAgICAgICAgICAgIEZpbGxEaWdpdHM2NEZpeGVkTGVuZ3RoKHJl
bWFpbmRlciwgZGl2aXNvcl9wb3dlciwgYnVmZmVyLCBsZW5ndGgpOwotICAgICAgICAgICAgKmRl
Y2ltYWxfcG9pbnQgPSAqbGVuZ3RoOwotICAgICAgICB9IGVsc2UgaWYgKGV4cG9uZW50ID49IDAp
IHsKLSAgICAgICAgICAgIC8vIDAgPD0gZXhwb25lbnQgPD0gMTEKLSAgICAgICAgICAgIHNpZ25p
ZmljYW5kIDw8PSBleHBvbmVudDsKLSAgICAgICAgICAgIEZpbGxEaWdpdHM2NChzaWduaWZpY2Fu
ZCwgYnVmZmVyLCBsZW5ndGgpOwotICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3Ro
OwotICAgICAgICB9IGVsc2UgaWYgKGV4cG9uZW50ID4gLWtEb3VibGVTaWduaWZpY2FuZFNpemUp
IHsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gY3V0IHRoZSBudW1iZXIuCi0gICAgICAgICAg
ICB1aW50NjRfdCBpbnRlZ3JhbHMgPSBzaWduaWZpY2FuZCA+PiAtZXhwb25lbnQ7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBmcmFjdGlvbmFscyA9IHNpZ25pZmljYW5kIC0gKGludGVncmFscyA8PCAt
ZXhwb25lbnQpOwotICAgICAgICAgICAgaWYgKGludGVncmFscyA+IGtNYXhVSW50MzIpIHsKLSAg
ICAgICAgICAgICAgICBGaWxsRGlnaXRzNjQoaW50ZWdyYWxzLCBidWZmZXIsIGxlbmd0aCk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEZpbGxEaWdpdHMzMihzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oaW50ZWdyYWxzKSwgYnVmZmVyLCBsZW5ndGgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoOwotICAgICAgICAgICAgRmls
bEZyYWN0aW9uYWxzKGZyYWN0aW9uYWxzLCBleHBvbmVudCwgZnJhY3Rpb25hbF9jb3VudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoZXhwb25lbnQgPCAtMTI4KSB7Ci0gICAgICAgICAgICAvLyBU
aGlzIGNvbmZpZ3VyYXRpb24gKHdpdGggYXQgbW9zdCAyMCBkaWdpdHMpIG1lYW5zIHRoYXQgYWxs
IGRpZ2l0cyBtdXN0IGJlCi0gICAgICAgICAgICAvLyAwLgotICAgICAgICAgICAgQVNTRVJUKGZy
YWN0aW9uYWxfY291bnQgPD0gMjApOwotICAgICAgICAgICAgYnVmZmVyWzBdID0gJ1wwJzsKLSAg
ICAgICAgICAgICpsZW5ndGggPSAwOwotICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAtZnJh
Y3Rpb25hbF9jb3VudDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICpkZWNpbWFsX3Bv
aW50ID0gMDsKLSAgICAgICAgICAgIEZpbGxGcmFjdGlvbmFscyhzaWduaWZpY2FuZCwgZXhwb25l
bnQsIGZyYWN0aW9uYWxfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVy
LCBsZW5ndGgsIGRlY2ltYWxfcG9pbnQpOwotICAgICAgICB9Ci0gICAgICAgIFRyaW1aZXJvcyhi
dWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7Ci0gICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9
ICdcMCc7Ci0gICAgICAgIGlmICgoKmxlbmd0aCkgPT0gMCkgewotICAgICAgICAgICAgLy8gVGhl
IHN0cmluZyBpcyBlbXB0eSBhbmQgdGhlIGRlY2ltYWxfcG9pbnQgdGh1cyBoYXMgbm8gaW1wb3J0
YW5jZS4gTWltaWNrCi0gICAgICAgICAgICAvLyBHYXkncyBkdG9hIGFuZCBhbmQgc2V0IGl0IHRv
IC1mcmFjdGlvbmFsX2NvdW50LgotICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAtZnJhY3Rp
b25hbF9jb3VudDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
Ci19ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KLQotfSAvLyBuYW1lc3BhY2UgV1RG
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZHRvYS9maXhl
ZC1kdG9hLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZHRvYS9maXhlZC1k
dG9hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOTEzMzIzNTA5ZGNlODFmOGUy
NjU5NTMwNmQ5M2FiNzZiYTk0Y2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2EvZml4ZWQt
ZHRvYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTAg
dGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0vLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0vLyAgICAgICB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLS8vICAgICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0jaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0ZJWEVEX0RUT0FfSF8KLSNkZWZp
bmUgRE9VQkxFX0NPTlZFUlNJT05fRklYRURfRFRPQV9IXwotCi0jaW5jbHVkZSAidXRpbHMuaCIK
LQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7Ci0gICAg
Ci0gICAgLy8gUHJvZHVjZXMgZGlnaXRzIG5lY2Vzc2FyeSB0byBwcmludCBhIGdpdmVuIG51bWJl
ciB3aXRoCi0gICAgLy8gJ2ZyYWN0aW9uYWxfY291bnQnIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1h
bCBwb2ludC4KLSAgICAvLyBUaGUgYnVmZmVyIG11c3QgYmUgYmlnIGVub3VnaCB0byBob2xkIHRo
ZSByZXN1bHQgcGx1cyBvbmUgdGVybWluYXRpbmcgbnVsbAotICAgIC8vIGNoYXJhY3Rlci4KLSAg
ICAvLwotICAgIC8vIFRoZSBwcm9kdWNlZCBkaWdpdHMgbWlnaHQgYmUgdG9vIHNob3J0IGluIHdo
aWNoIGNhc2UgdGhlIGNhbGxlciBoYXMgdG8gZmlsbAotICAgIC8vIHRoZSBnYXBzIHdpdGggJzAn
cy4KLSAgICAvLyBFeGFtcGxlOiBGYXN0Rml4ZWREdG9hKDAuMDAxLCA1LCAuLi4pIGlzIGFsbG93
ZWQgdG8gcmV0dXJuIGJ1ZmZlciA9ICIxIiwgYW5kCi0gICAgLy8gZGVjaW1hbF9wb2ludCA9IC0y
LgotICAgIC8vIEhhbGZ3YXkgY2FzZXMgYXJlIHJvdW5kZWQgdG93YXJkcyArLy1JbmZpbml0eSAo
YXdheSBmcm9tIDApLiBUaGUgY2FsbAotICAgIC8vIEZhc3RGaXhlZER0b2EoMC4xNSwgMiwgLi4u
KSB0aHVzIHJldHVybnMgYnVmZmVyID0gIjIiLCBkZWNpbWFsX3BvaW50ID0gMC4KLSAgICAvLyBU
aGUgcmV0dXJuZWQgYnVmZmVyIG1heSBjb250YWluIGRpZ2l0cyB0aGF0IHdvdWxkIGJlIHRydW5j
YXRlZCBmcm9tIHRoZQotICAgIC8vIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnB1
dC4KLSAgICAvLwotICAgIC8vIFRoaXMgbWV0aG9kIG9ubHkgd29ya3MgZm9yIHNvbWUgcGFyYW1l
dGVycy4gSWYgaXQgY2FuJ3QgaGFuZGxlIHRoZSBpbnB1dCBpdAotICAgIC8vIHJldHVybnMgZmFs
c2UuIFRoZSBvdXRwdXQgaXMgbnVsbC10ZXJtaW5hdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIHN1Y2Nl
ZWRzLgotICAgIGJvb2wgRmFzdEZpeGVkRHRvYShkb3VibGUgdiwgaW50IGZyYWN0aW9uYWxfY291
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclJlZmVyZW5jZTxjaGFyPiBidWZmZXIs
IGludCogbGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpOwotICAgIAotfSAgLy8gbmFtZXNwYWNl
IGRvdWJsZV9jb252ZXJzaW9uCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgIC8vIERP
VUJMRV9DT05WRVJTSU9OX0ZJWEVEX0RUT0FfSF8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9kdG9hL3N0cnRvZC5jYyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi9kdG9hL3N0cnRvZC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTI3MGMzZTU5NTgzNjBiOTMyZjZkOWVkOGY5YWVjYWJmZTEyYTUzOC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvZHRvYS9zdHJ0b2QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw0NTQgKzAsMCBA
QAotLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyAgICAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gICAg
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkCi0vLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAg
ICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLS8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
bmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotI2luY2x1ZGUgInN0cnRv
ZC5oIgotI2luY2x1ZGUgImJpZ251bS5oIgotI2luY2x1ZGUgImNhY2hlZC1wb3dlcnMuaCIKLSNp
bmNsdWRlICJkb3VibGUuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBkb3VibGVf
Y29udmVyc2lvbiB7Ci0KLSNpZiBkZWZpbmVkKERPVUJMRV9DT05WRVJTSU9OX0NPUlJFQ1RfRE9V
QkxFX09QRVJBVElPTlMpCi0gICAgLy8gMl41MyA9IDkwMDcxOTkyNTQ3NDA5OTIuCi0gICAgLy8g
QW55IGludGVnZXIgd2l0aCBhdCBtb3N0IDE1IGRlY2ltYWwgZGlnaXRzIHdpbGwgaGVuY2UgZml0
IGludG8gYSBkb3VibGUKLSAgICAvLyAod2hpY2ggaGFzIGEgNTNiaXQgc2lnbmlmaWNhbmQpIHdp
dGhvdXQgbG9zcyBvZiBwcmVjaXNpb24uCi0gICAgc3RhdGljIGNvbnN0IGludCBrTWF4RXhhY3RE
b3VibGVJbnRlZ2VyRGVjaW1hbERpZ2l0cyA9IDE1OwotI2VuZGlmCi0gICAgLy8gMl42NCA9IDE4
NDQ2NzQ0MDczNzA5NTUxNjE2ID4gMTBeMTkKLSAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhVaW50
NjREZWNpbWFsRGlnaXRzID0gMTk7Ci0gICAgCi0gICAgLy8gTWF4IGRvdWJsZTogMS43OTc2OTMx
MzQ4NjIzMTU3IHggMTBeMzA4Ci0gICAgLy8gTWluIG5vbi16ZXJvIGRvdWJsZTogNC45NDA2NTY0
NTg0MTI0NjU0IHggMTBeLTMyNAotICAgIC8vIEFueSB4ID49IDEwXjMwOSBpcyBpbnRlcnByZXRl
ZCBhcyAraW5maW5pdHkuCi0gICAgLy8gQW55IHggPD0gMTBeLTMyNCBpcyBpbnRlcnByZXRlZCBh
cyAwLgotICAgIC8vIE5vdGUgdGhhdCAyLjVlLTMyNCAoZGVzcGl0ZSBiZWluZyBzbWFsbGVyIHRo
YW4gdGhlIG1pbiBkb3VibGUpIHdpbGwgYmUgcmVhZAotICAgIC8vIGFzIG5vbi16ZXJvIChlcXVh
bCB0byB0aGUgbWluIG5vbi16ZXJvIGRvdWJsZSkuCi0gICAgc3RhdGljIGNvbnN0IGludCBrTWF4
RGVjaW1hbFBvd2VyID0gMzA5OwotICAgIHN0YXRpYyBjb25zdCBpbnQga01pbkRlY2ltYWxQb3dl
ciA9IC0zMjQ7Ci0gICAgCi0gICAgLy8gMl42NCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE2Ci0gICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGtNYXhVaW50NjQgPSBVSU5UNjRfMlBBUlRfQygweEZGRkZG
RkZGLCBGRkZGRkZGRik7Ci0gICAgCi0jaWYgZGVmaW5lZChET1VCTEVfQ09OVkVSU0lPTl9DT1JS
RUNUX0RPVUJMRV9PUEVSQVRJT05TKQotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZXhhY3RfcG93
ZXJzX29mX3RlbltdID0gewotICAgICAgICAxLjAsICAvLyAxMF4wCi0gICAgICAgIDEwLjAsCi0g
ICAgICAgIDEwMC4wLAotICAgICAgICAxMDAwLjAsCi0gICAgICAgIDEwMDAwLjAsCi0gICAgICAg
IDEwMDAwMC4wLAotICAgICAgICAxMDAwMDAwLjAsCi0gICAgICAgIDEwMDAwMDAwLjAsCi0gICAg
ICAgIDEwMDAwMDAwMC4wLAotICAgICAgICAxMDAwMDAwMDAwLjAsCi0gICAgICAgIDEwMDAwMDAw
MDAwLjAsICAvLyAxMF4xMAotICAgICAgICAxMDAwMDAwMDAwMDAuMCwKLSAgICAgICAgMTAwMDAw
MDAwMDAwMC4wLAotICAgICAgICAxMDAwMDAwMDAwMDAwMC4wLAotICAgICAgICAxMDAwMDAwMDAw
MDAwMDAuMCwKLSAgICAgICAgMTAwMDAwMDAwMDAwMDAwMC4wLAotICAgICAgICAxMDAwMDAwMDAw
MDAwMDAwMC4wLAotICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAuMCwKLSAgICAgICAgMTAwMDAw
MDAwMDAwMDAwMDAwMC4wLAotICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMC4wLAotICAgICAg
ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAuMCwgIC8vIDEwXjIwCi0gICAgICAgIDEwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuMCwKLSAgICAgICAgLy8gMTBeMjIgPSAweDIxZTE5ZTBjOWJhYjI0MDAwMDAg
PSAweDg3ODY3ODMyNmVhYzkgKiAyXjIyCi0gICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
LjAKLSAgICB9OwotICAgIHN0YXRpYyBjb25zdCBpbnQga0V4YWN0UG93ZXJzT2ZUZW5TaXplID0g
QVJSQVlfU0laRShleGFjdF9wb3dlcnNfb2ZfdGVuKTsKLSNlbmRpZgotICAgIAotICAgIC8vIE1h
eGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBpbiB0aGUgZGVjaW1hbCByZXByZXNl
bnRhdGlvbi4KLSAgICAvLyBJbiBmYWN0IHRoZSB2YWx1ZSBpcyA3NzIgKHNlZSBjb252ZXJzaW9u
cy5jYyksIGJ1dCB0byBnaXZlIHVzIHNvbWUgbWFyZ2luCi0gICAgLy8gd2Ugcm91bmQgdXAgdG8g
NzgwLgotICAgIHN0YXRpYyBjb25zdCBpbnQga01heFNpZ25pZmljYW50RGVjaW1hbERpZ2l0cyA9
IDc4MDsKLSAgICAKLSAgICBzdGF0aWMgQnVmZmVyUmVmZXJlbmNlPGNvbnN0IGNoYXI+IFRyaW1M
ZWFkaW5nWmVyb3MoQnVmZmVyUmVmZXJlbmNlPGNvbnN0IGNoYXI+IGJ1ZmZlcikgewotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAg
ICBpZiAoYnVmZmVyW2ldICE9ICcwJykgewotICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXIu
U3ViQnVmZmVyUmVmZXJlbmNlKGksIGJ1ZmZlci5sZW5ndGgoKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEJ1ZmZlclJlZmVyZW5jZTxjb25zdCBjaGFyPihidWZm
ZXIuc3RhcnQoKSwgMCk7Ci0gICAgfQotICAgIAotICAgIAotICAgIHN0YXRpYyBCdWZmZXJSZWZl
cmVuY2U8Y29uc3QgY2hhcj4gVHJpbVRyYWlsaW5nWmVyb3MoQnVmZmVyUmVmZXJlbmNlPGNvbnN0
IGNoYXI+IGJ1ZmZlcikgewotICAgICAgICBmb3IgKGludCBpID0gYnVmZmVyLmxlbmd0aCgpIC0g
MTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci5TdWJCdWZmZXJSZWZlcmVuY2UoMCwgaSArIDEp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBCdWZmZXJSZWZlcmVu
Y2U8Y29uc3QgY2hhcj4oYnVmZmVyLnN0YXJ0KCksIDApOwotICAgIH0KLSAgICAKLSAgICAKLSAg
ICBzdGF0aWMgdm9pZCBUcmltVG9NYXhTaWduaWZpY2FudERpZ2l0cyhCdWZmZXJSZWZlcmVuY2U8
Y29uc3QgY2hhcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBleHBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyKiBzaWduaWZpY2FudF9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50KiBzaWduaWZpY2FudF9leHBvbmVudCkgewotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMgLSAxOyAr
K2kpIHsKLSAgICAgICAgICAgIHNpZ25pZmljYW50X2J1ZmZlcltpXSA9IGJ1ZmZlcltpXTsKLSAg
ICAgICAgfQotICAgICAgICAvLyBUaGUgaW5wdXQgYnVmZmVyIGhhcyBiZWVuIHRyaW1tZWQuIFRo
ZXJlZm9yZSB0aGUgbGFzdCBkaWdpdCBtdXN0IGJlCi0gICAgICAgIC8vIGRpZmZlcmVudCBmcm9t
ICcwJy4KLSAgICAgICAgQVNTRVJUKGJ1ZmZlcltidWZmZXIubGVuZ3RoKCkgLSAxXSAhPSAnMCcp
OwotICAgICAgICAvLyBTZXQgdGhlIGxhc3QgZGlnaXQgdG8gYmUgbm9uLXplcm8uIFRoaXMgaXMg
c3VmZmljaWVudCB0byBndWFyYW50ZWUKLSAgICAgICAgLy8gY29ycmVjdCByb3VuZGluZy4KLSAg
ICAgICAgc2lnbmlmaWNhbnRfYnVmZmVyW2tNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMgLSAx
XSA9ICcxJzsKLSAgICAgICAgKnNpZ25pZmljYW50X2V4cG9uZW50ID0KLSAgICAgICAgZXhwb25l
bnQgKyAoYnVmZmVyLmxlbmd0aCgpIC0ga01heFNpZ25pZmljYW50RGVjaW1hbERpZ2l0cyk7Ci0g
ICAgfQotICAgIAotICAgIC8vIFJlYWRzIGRpZ2l0cyBmcm9tIHRoZSBidWZmZXIgYW5kIGNvbnZl
cnRzIHRoZW0gdG8gYSB1aW50NjQuCi0gICAgLy8gUmVhZHMgaW4gYXMgbWFueSBkaWdpdHMgYXMg
Zml0IGludG8gYSB1aW50NjQuCi0gICAgLy8gV2hlbiB0aGUgc3RyaW5nIHN0YXJ0cyB3aXRoICIx
ODQ0Njc0NDA3MzcwOTU1MTYxIiBubyBmdXJ0aGVyIGRpZ2l0IGlzIHJlYWQuCi0gICAgLy8gU2lu
Y2UgMl42NCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE2IGl0IHdvdWxkIHN0aWxsIGJlIHBvc3NpYmxl
IHJlYWQgYW5vdGhlcgotICAgIC8vIGRpZ2l0IGlmIGl0IHdhcyBsZXNzIG9yIGVxdWFsIHRoYW4g
NiwgYnV0IHRoaXMgd291bGQgY29tcGxpY2F0ZSB0aGUgY29kZS4KLSAgICBzdGF0aWMgdWludDY0
X3QgUmVhZFVpbnQ2NChCdWZmZXJSZWZlcmVuY2U8Y29uc3QgY2hhcj4gYnVmZmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbnVtYmVyX29mX3JlYWRfZGlnaXRzKSB7Ci0g
ICAgICAgIHVpbnQ2NF90IHJlc3VsdCA9IDA7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAg
d2hpbGUgKGkgPCBidWZmZXIubGVuZ3RoKCkgJiYgcmVzdWx0IDw9IChrTWF4VWludDY0IC8gMTAg
LSAxKSkgewotICAgICAgICAgICAgaW50IGRpZ2l0ID0gYnVmZmVyW2krK10gLSAnMCc7Ci0gICAg
ICAgICAgICBBU1NFUlQoMCA8PSBkaWdpdCAmJiBkaWdpdCA8PSA5KTsKLSAgICAgICAgICAgIHJl
c3VsdCA9IDEwICogcmVzdWx0ICsgZGlnaXQ7Ci0gICAgICAgIH0KLSAgICAgICAgKm51bWJlcl9v
Zl9yZWFkX2RpZ2l0cyA9IGk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAot
ICAgIAotICAgIC8vIFJlYWRzIGEgRGl5RnAgZnJvbSB0aGUgYnVmZmVyLgotICAgIC8vIFRoZSBy
ZXR1cm5lZCBEaXlGcCBpcyBub3QgbmVjZXNzYXJpbHkgbm9ybWFsaXplZC4KLSAgICAvLyBJZiBy
ZW1haW5pbmdfZGVjaW1hbHMgaXMgemVybyB0aGVuIHRoZSByZXR1cm5lZCBEaXlGcCBpcyBhY2N1
cmF0ZS4KLSAgICAvLyBPdGhlcndpc2UgaXQgaGFzIGJlZW4gcm91bmRlZCBhbmQgaGFzIGVycm9y
IG9mIGF0IG1vc3QgMS8yIHVscC4KLSAgICBzdGF0aWMgdm9pZCBSZWFkRGl5RnAoQnVmZmVyUmVm
ZXJlbmNlPGNvbnN0IGNoYXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5
RnAqIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiByZW1haW5pbmdfZGVj
aW1hbHMpIHsKLSAgICAgICAgaW50IHJlYWRfZGlnaXRzOwotICAgICAgICB1aW50NjRfdCBzaWdu
aWZpY2FuZCA9IFJlYWRVaW50NjQoYnVmZmVyLCAmcmVhZF9kaWdpdHMpOwotICAgICAgICBpZiAo
YnVmZmVyLmxlbmd0aCgpID09IHJlYWRfZGlnaXRzKSB7Ci0gICAgICAgICAgICAqcmVzdWx0ID0g
RGl5RnAoc2lnbmlmaWNhbmQsIDApOwotICAgICAgICAgICAgKnJlbWFpbmluZ19kZWNpbWFscyA9
IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBSb3VuZCB0aGUgc2lnbmlmaWNh
bmQuCi0gICAgICAgICAgICBpZiAoYnVmZmVyW3JlYWRfZGlnaXRzXSA+PSAnNScpIHsKLSAgICAg
ICAgICAgICAgICBzaWduaWZpY2FuZCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8g
Q29tcHV0ZSB0aGUgYmluYXJ5IGV4cG9uZW50LgotICAgICAgICAgICAgaW50IGV4cG9uZW50ID0g
MDsKLSAgICAgICAgICAgICpyZXN1bHQgPSBEaXlGcChzaWduaWZpY2FuZCwgZXhwb25lbnQpOwot
ICAgICAgICAgICAgKnJlbWFpbmluZ19kZWNpbWFscyA9IGJ1ZmZlci5sZW5ndGgoKSAtIHJlYWRf
ZGlnaXRzOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIAotICAgIHN0YXRpYyBib29sIERv
dWJsZVN0cnRvZChCdWZmZXJSZWZlcmVuY2U8Y29uc3QgY2hhcj4gdHJpbW1lZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUqIHJlc3VsdCkgewotI2lmICFkZWZpbmVkKERPVUJMRV9DT05WRVJTSU9O
X0NPUlJFQ1RfRE9VQkxFX09QRVJBVElPTlMpCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0cmltbWVk
KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGV4cG9uZW50KTsKLSAgICAgICAgVU5VU0VEX1BBUkFN
KHJlc3VsdCk7Ci0gICAgICAgIC8vIE9uIHg4NiB0aGUgZmxvYXRpbmctcG9pbnQgc3RhY2sgY2Fu
IGJlIDY0IG9yIDgwIGJpdHMgd2lkZS4gSWYgaXQgaXMKLSAgICAgICAgLy8gODAgYml0cyB3aWRl
IChhcyBpcyB0aGUgY2FzZSBvbiBMaW51eCkgdGhlbiBkb3VibGUtcm91bmRpbmcgb2NjdXJzIGFu
ZCB0aGUKLSAgICAgICAgLy8gcmVzdWx0IGlzIG5vdCBhY2N1cmF0ZS4KLSAgICAgICAgLy8gV2Ug
a25vdyB0aGF0IFdpbmRvd3MzMiB1c2VzIDY0IGJpdHMgYW5kIGlzIHRoZXJlZm9yZSBhY2N1cmF0
ZS4KLSAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBBUk0gc2ltdWxhdG9yIGlzIGNvbXBpbGVkIGZv
ciAzMmJpdHMuIEl0IHRoZXJlZm9yZSBleGhpYml0cwotICAgICAgICAvLyB0aGUgc2FtZSBwcm9i
bGVtLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgICAgICBpZiAodHJpbW1lZC5s
ZW5ndGgoKSA8PSBrTWF4RXhhY3REb3VibGVJbnRlZ2VyRGVjaW1hbERpZ2l0cykgewotICAgICAg
ICAgICAgaW50IHJlYWRfZGlnaXRzOwotICAgICAgICAgICAgLy8gVGhlIHRyaW1tZWQgaW5wdXQg
Zml0cyBpbnRvIGEgZG91YmxlLgotICAgICAgICAgICAgLy8gSWYgdGhlIDEwXmV4cG9uZW50IChy
ZXNwLiAxMF4tZXhwb25lbnQpIGZpdHMgaW50byBhIGRvdWJsZSB0b28gdGhlbiB3ZQotICAgICAg
ICAgICAgLy8gY2FuIGNvbXB1dGUgdGhlIHJlc3VsdC1kb3VibGUgc2ltcGx5IGJ5IG11bHRpcGx5
aW5nIChyZXNwLiBkaXZpZGluZykgdGhlCi0gICAgICAgICAgICAvLyB0d28gbnVtYmVycy4KLSAg
ICAgICAgICAgIC8vIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBJRUVFIGd1YXJhbnRlZXMgdGhh
dCBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zCi0gICAgICAgICAgICAvLyByZXR1cm4gdGhlIGJl
c3QgcG9zc2libGUgYXBwcm94aW1hdGlvbi4KLSAgICAgICAgICAgIGlmIChleHBvbmVudCA8IDAg
JiYgLWV4cG9uZW50IDwga0V4YWN0UG93ZXJzT2ZUZW5TaXplKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gMTBeLWV4cG9uZW50IGZpdHMgaW50byBhIGRvdWJsZS4KLSAgICAgICAgICAgICAgICAqcmVz
dWx0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihSZWFkVWludDY0KHRyaW1tZWQsICZyZWFkX2RpZ2l0
cykpOwotICAgICAgICAgICAgICAgIEFTU0VSVChyZWFkX2RpZ2l0cyA9PSB0cmltbWVkLmxlbmd0
aCgpKTsKLSAgICAgICAgICAgICAgICAqcmVzdWx0IC89IGV4YWN0X3Bvd2Vyc19vZl90ZW5bLWV4
cG9uZW50XTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICgwIDw9IGV4cG9uZW50ICYmIGV4cG9uZW50IDwga0V4YWN0UG93ZXJzT2ZU
ZW5TaXplKSB7Ci0gICAgICAgICAgICAgICAgLy8gMTBeZXhwb25lbnQgZml0cyBpbnRvIGEgZG91
YmxlLgotICAgICAgICAgICAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KFJlYWRV
aW50NjQodHJpbW1lZCwgJnJlYWRfZGlnaXRzKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJl
YWRfZGlnaXRzID09IHRyaW1tZWQubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgICpyZXN1bHQg
Kj0gZXhhY3RfcG93ZXJzX29mX3RlbltleHBvbmVudF07Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgcmVtYWluaW5nX2RpZ2l0cyA9
Ci0gICAgICAgICAgICBrTWF4RXhhY3REb3VibGVJbnRlZ2VyRGVjaW1hbERpZ2l0cyAtIHRyaW1t
ZWQubGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAoKDAgPD0gZXhwb25lbnQpICYmCi0gICAgICAg
ICAgICAgICAgKGV4cG9uZW50IC0gcmVtYWluaW5nX2RpZ2l0cyA8IGtFeGFjdFBvd2Vyc09mVGVu
U2l6ZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgdHJpbW1lZCBzdHJpbmcgd2FzIHNob3J0
IGFuZCB3ZSBjYW4gbXVsdGlwbHkgaXQgd2l0aAotICAgICAgICAgICAgICAgIC8vIDEwXnJlbWFp
bmluZ19kaWdpdHMuIEFzIGEgcmVzdWx0IHRoZSByZW1haW5pbmcgZXhwb25lbnQgbm93IGZpdHMK
LSAgICAgICAgICAgICAgICAvLyBpbnRvIGEgZG91YmxlIHRvby4KLSAgICAgICAgICAgICAgICAq
cmVzdWx0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihSZWFkVWludDY0KHRyaW1tZWQsICZyZWFkX2Rp
Z2l0cykpOwotICAgICAgICAgICAgICAgIEFTU0VSVChyZWFkX2RpZ2l0cyA9PSB0cmltbWVkLmxl
bmd0aCgpKTsKLSAgICAgICAgICAgICAgICAqcmVzdWx0ICo9IGV4YWN0X3Bvd2Vyc19vZl90ZW5b
cmVtYWluaW5nX2RpZ2l0c107Ci0gICAgICAgICAgICAgICAgKnJlc3VsdCAqPSBleGFjdF9wb3dl
cnNfb2ZfdGVuW2V4cG9uZW50IC0gcmVtYWluaW5nX2RpZ2l0c107Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotI2VuZGlmCi0gICAgfQotICAgIAotICAgIAotICAgIC8vIFJldHVybnMgMTBeZXhwb25l
bnQgYXMgYW4gZXhhY3QgRGl5RnAuCi0gICAgLy8gVGhlIGdpdmVuIGV4cG9uZW50IG11c3QgYmUg
aW4gdGhlIHJhbmdlIFsxOyBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2VbLgotICAgIHN0YXRpYyBE
aXlGcCBBZGp1c3RtZW50UG93ZXJPZlRlbihpbnQgZXhwb25lbnQpIHsKLSAgICAgICAgQVNTRVJU
KDAgPCBleHBvbmVudCk7Ci0gICAgICAgIEFTU0VSVChleHBvbmVudCA8IFBvd2Vyc09mVGVuQ2Fj
aGU6OmtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7Ci0gICAgICAgIC8vIFNpbXBseSBoYXJkY29k
ZSB0aGUgcmVtYWluaW5nIHBvd2VycyBmb3IgdGhlIGdpdmVuIGRlY2ltYWwgZXhwb25lbnQKLSAg
ICAgICAgLy8gZGlzdGFuY2UuCi0gICAgICAgIEFTU0VSVChQb3dlcnNPZlRlbkNhY2hlOjprRGVj
aW1hbEV4cG9uZW50RGlzdGFuY2UgPT0gOCk7Ci0gICAgICAgIHN3aXRjaCAoZXhwb25lbnQpIHsK
LSAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4YTAwMDAw
MDAsIDAwMDAwMDAwKSwgLTYwKTsKLSAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIERpeUZwKFVJ
TlQ2NF8yUEFSVF9DKDB4YzgwMDAwMDAsIDAwMDAwMDAwKSwgLTU3KTsKLSAgICAgICAgICAgIGNh
c2UgMzogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4ZmEwMDAwMDAsIDAwMDAwMDAwKSwg
LTU0KTsKLSAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4
OWM0MDAwMDAsIDAwMDAwMDAwKSwgLTUwKTsKLSAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIERp
eUZwKFVJTlQ2NF8yUEFSVF9DKDB4YzM1MDAwMDAsIDAwMDAwMDAwKSwgLTQ3KTsKLSAgICAgICAg
ICAgIGNhc2UgNjogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4ZjQyNDAwMDAsIDAwMDAw
MDAwKSwgLTQ0KTsKLSAgICAgICAgICAgIGNhc2UgNzogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFS
VF9DKDB4OTg5NjgwMDAsIDAwMDAwMDAwKSwgLTQwKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gRGl5
RnAoMCwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgCi0gICAgLy8gSWYgdGhlIGZ1
bmN0aW9uIHJldHVybnMgdHJ1ZSB0aGVuIHRoZSByZXN1bHQgaXMgdGhlIGNvcnJlY3QgZG91Ymxl
LgotICAgIC8vIE90aGVyd2lzZSBpdCBpcyBlaXRoZXIgdGhlIGNvcnJlY3QgZG91YmxlIG9yIHRo
ZSBkb3VibGUgdGhhdCBpcyBqdXN0IGJlbG93Ci0gICAgLy8gdGhlIGNvcnJlY3QgZG91YmxlLgot
ICAgIHN0YXRpYyBib29sIERpeUZwU3RydG9kKEJ1ZmZlclJlZmVyZW5jZTxjb25zdCBjaGFyPiBi
dWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSogcmVzdWx0KSB7Ci0gICAgICAgIERpeUZwIGlu
cHV0OwotICAgICAgICBpbnQgcmVtYWluaW5nX2RlY2ltYWxzOwotICAgICAgICBSZWFkRGl5RnAo
YnVmZmVyLCAmaW5wdXQsICZyZW1haW5pbmdfZGVjaW1hbHMpOwotICAgICAgICAvLyBTaW5jZSB3
ZSBtYXkgaGF2ZSBkcm9wcGVkIHNvbWUgZGlnaXRzIHRoZSBpbnB1dCBpcyBub3QgYWNjdXJhdGUu
Ci0gICAgICAgIC8vIElmIHJlbWFpbmluZ19kZWNpbWFscyBpcyBkaWZmZXJlbnQgdGhhbiAwIHRo
YW4gdGhlIGVycm9yIGlzIGF0IG1vc3QKLSAgICAgICAgLy8gLjUgdWxwICh1bml0IGluIHRoZSBs
YXN0IHBsYWNlKS4KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGggZnJhY3Rp
b25zIGFuZCB0aGVyZWZvcmUga2VlcCBhIGNvbW1vbgotICAgICAgICAvLyBkZW5vbWluYXRvci4K
LSAgICAgICAgY29uc3QgaW50IGtEZW5vbWluYXRvckxvZyA9IDM7Ci0gICAgICAgIGNvbnN0IGlu
dCBrRGVub21pbmF0b3IgPSAxIDw8IGtEZW5vbWluYXRvckxvZzsKLSAgICAgICAgLy8gTW92ZSB0
aGUgcmVtYWluaW5nIGRlY2ltYWxzIGludG8gdGhlIGV4cG9uZW50LgotICAgICAgICBleHBvbmVu
dCArPSByZW1haW5pbmdfZGVjaW1hbHM7Ci0gICAgICAgIGludCBlcnJvciA9IChyZW1haW5pbmdf
ZGVjaW1hbHMgPT0gMCA/IDAgOiBrRGVub21pbmF0b3IgLyAyKTsKLSAgICAgICAgCi0gICAgICAg
IGludCBvbGRfZSA9IGlucHV0LmUoKTsKLSAgICAgICAgaW5wdXQuTm9ybWFsaXplKCk7Ci0gICAg
ICAgIGVycm9yIDw8PSBvbGRfZSAtIGlucHV0LmUoKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VS
VChleHBvbmVudCA8PSBQb3dlcnNPZlRlbkNhY2hlOjprTWF4RGVjaW1hbEV4cG9uZW50KTsKLSAg
ICAgICAgaWYgKGV4cG9uZW50IDwgUG93ZXJzT2ZUZW5DYWNoZTo6a01pbkRlY2ltYWxFeHBvbmVu
dCkgewotICAgICAgICAgICAgKnJlc3VsdCA9IDAuMDsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIERpeUZwIGNhY2hlZF9wb3dlcjsKLSAgICAgICAgaW50IGNh
Y2hlZF9kZWNpbWFsX2V4cG9uZW50OwotICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNo
ZWRQb3dlckZvckRlY2ltYWxFeHBvbmVudChleHBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlZF9wb3dlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JmNhY2hlZF9kZWNpbWFsX2V4cG9uZW50KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjYWNoZWRf
ZGVjaW1hbF9leHBvbmVudCAhPSBleHBvbmVudCkgewotICAgICAgICAgICAgaW50IGFkanVzdG1l
bnRfZXhwb25lbnQgPSBleHBvbmVudCAtIGNhY2hlZF9kZWNpbWFsX2V4cG9uZW50OwotICAgICAg
ICAgICAgRGl5RnAgYWRqdXN0bWVudF9wb3dlciA9IEFkanVzdG1lbnRQb3dlck9mVGVuKGFkanVz
dG1lbnRfZXhwb25lbnQpOwotICAgICAgICAgICAgaW5wdXQuTXVsdGlwbHkoYWRqdXN0bWVudF9w
b3dlcik7Ci0gICAgICAgICAgICBpZiAoa01heFVpbnQ2NERlY2ltYWxEaWdpdHMgLSBidWZmZXIu
bGVuZ3RoKCkgPj0gYWRqdXN0bWVudF9leHBvbmVudCkgewotICAgICAgICAgICAgICAgIC8vIFRo
ZSBwcm9kdWN0IG9mIGlucHV0IHdpdGggdGhlIGFkanVzdG1lbnQgcG93ZXIgZml0cyBpbnRvIGEg
NjQgYml0Ci0gICAgICAgICAgICAgICAgLy8gaW50ZWdlci4KLSAgICAgICAgICAgICAgICBBU1NF
UlQoRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgPT0gNjQpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAvLyBUaGUgYWRqdXN0bWVudCBwb3dlciBpcyBleGFjdC4gVGhlcmUg
aXMgaGVuY2Ugb25seSBhbiBlcnJvciBvZiAwLjUuCi0gICAgICAgICAgICAgICAgZXJyb3IgKz0g
a0Rlbm9taW5hdG9yIC8gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaW5wdXQuTXVsdGlwbHkoY2FjaGVkX3Bvd2VyKTsKLSAgICAgICAgLy8gVGhlIGVycm9y
IGludHJvZHVjZWQgYnkgYSBtdWx0aXBsaWNhdGlvbiBvZiBhKmIgZXF1YWxzCi0gICAgICAgIC8v
ICAgZXJyb3JfYSArIGVycm9yX2IgKyBlcnJvcl9hKmVycm9yX2IvMl42NCArIDAuNQotICAgICAg
ICAvLyBTdWJzdGl0dXRpbmcgYSB3aXRoICdpbnB1dCcgYW5kIGIgd2l0aCAnY2FjaGVkX3Bvd2Vy
JyB3ZSBoYXZlCi0gICAgICAgIC8vICAgZXJyb3JfYiA9IDAuNSAgKGFsbCBjYWNoZWQgcG93ZXJz
IGhhdmUgYW4gZXJyb3Igb2YgbGVzcyB0aGFuIDAuNSB1bHApLAotICAgICAgICAvLyAgIGVycm9y
X2FiID0gMCBvciAxIC8ga0Rlbm9taW5hdG9yID4gZXJyb3JfYSplcnJvcl9iLyAyXjY0Ci0gICAg
ICAgIGludCBlcnJvcl9iID0ga0Rlbm9taW5hdG9yIC8gMjsKLSAgICAgICAgaW50IGVycm9yX2Fi
ID0gKGVycm9yID09IDAgPyAwIDogMSk7ICAvLyBXZSByb3VuZCB1cCB0byAxLgotICAgICAgICBp
bnQgZml4ZWRfZXJyb3IgPSBrRGVub21pbmF0b3IgLyAyOwotICAgICAgICBlcnJvciArPSBlcnJv
cl9iICsgZXJyb3JfYWIgKyBmaXhlZF9lcnJvcjsKLSAgICAgICAgCi0gICAgICAgIG9sZF9lID0g
aW5wdXQuZSgpOwotICAgICAgICBpbnB1dC5Ob3JtYWxpemUoKTsKLSAgICAgICAgZXJyb3IgPDw9
IG9sZF9lIC0gaW5wdXQuZSgpOwotICAgICAgICAKLSAgICAgICAgLy8gU2VlIGlmIHRoZSBkb3Vi
bGUncyBzaWduaWZpY2FuZCBjaGFuZ2VzIGlmIHdlIGFkZC9zdWJ0cmFjdCB0aGUgZXJyb3IuCi0g
ICAgICAgIGludCBvcmRlcl9vZl9tYWduaXR1ZGUgPSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSAr
IGlucHV0LmUoKTsKLSAgICAgICAgaW50IGVmZmVjdGl2ZV9zaWduaWZpY2FuZF9zaXplID0KLSAg
ICAgICAgRG91YmxlOjpTaWduaWZpY2FuZFNpemVGb3JPcmRlck9mTWFnbml0dWRlKG9yZGVyX29m
X21hZ25pdHVkZSk7Ci0gICAgICAgIGludCBwcmVjaXNpb25fZGlnaXRzX2NvdW50ID0KLSAgICAg
ICAgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgLSBlZmZlY3RpdmVfc2lnbmlmaWNhbmRfc2l6ZTsK
LSAgICAgICAgaWYgKHByZWNpc2lvbl9kaWdpdHNfY291bnQgKyBrRGVub21pbmF0b3JMb2cgPj0g
RGl5RnA6OmtTaWduaWZpY2FuZFNpemUpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgY2FuIG9ubHkg
aGFwcGVuIGZvciB2ZXJ5IHNtYWxsIGRlbm9ybWFscy4gSW4gdGhpcyBjYXNlIHRoZQotICAgICAg
ICAgICAgLy8gaGFsZi13YXkgbXVsdGlwbGllZCBieSB0aGUgZGVub21pbmF0b3IgZXhjZWVkcyB0
aGUgcmFuZ2Ugb2YgYW4gdWludDY0LgotICAgICAgICAgICAgLy8gU2ltcGx5IHNoaWZ0IGV2ZXJ5
dGhpbmcgdG8gdGhlIHJpZ2h0LgotICAgICAgICAgICAgaW50IHNoaWZ0X2Ftb3VudCA9IChwcmVj
aXNpb25fZGlnaXRzX2NvdW50ICsga0Rlbm9taW5hdG9yTG9nKSAtCi0gICAgICAgICAgICBEaXlG
cDo6a1NpZ25pZmljYW5kU2l6ZSArIDE7Ci0gICAgICAgICAgICBpbnB1dC5zZXRfZihpbnB1dC5m
KCkgPj4gc2hpZnRfYW1vdW50KTsKLSAgICAgICAgICAgIGlucHV0LnNldF9lKGlucHV0LmUoKSAr
IHNoaWZ0X2Ftb3VudCk7Ci0gICAgICAgICAgICAvLyBXZSBhZGQgMSBmb3IgdGhlIGxvc3QgcHJl
Y2lzaW9uIG9mIGVycm9yLCBhbmQga0Rlbm9taW5hdG9yIGZvcgotICAgICAgICAgICAgLy8gdGhl
IGxvc3QgcHJlY2lzaW9uIG9mIGlucHV0LmYoKS4KLSAgICAgICAgICAgIGVycm9yID0gKGVycm9y
ID4+IHNoaWZ0X2Ftb3VudCkgKyAxICsga0Rlbm9taW5hdG9yOwotICAgICAgICAgICAgcHJlY2lz
aW9uX2RpZ2l0c19jb3VudCAtPSBzaGlmdF9hbW91bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
V2UgdXNlIHVpbnQ2NF90cyBub3cuIFRoaXMgb25seSB3b3JrcyBpZiB0aGUgRGl5RnAgdXNlcyB1
aW50NjRfdHMgdG9vLgotICAgICAgICBBU1NFUlQoRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgPT0g
NjQpOwotICAgICAgICBBU1NFUlQocHJlY2lzaW9uX2RpZ2l0c19jb3VudCA8IDY0KTsKLSAgICAg
ICAgdWludDY0X3Qgb25lNjQgPSAxOwotICAgICAgICB1aW50NjRfdCBwcmVjaXNpb25fYml0c19t
YXNrID0gKG9uZTY0IDw8IHByZWNpc2lvbl9kaWdpdHNfY291bnQpIC0gMTsKLSAgICAgICAgdWlu
dDY0X3QgcHJlY2lzaW9uX2JpdHMgPSBpbnB1dC5mKCkgJiBwcmVjaXNpb25fYml0c19tYXNrOwot
ICAgICAgICB1aW50NjRfdCBoYWxmX3dheSA9IG9uZTY0IDw8IChwcmVjaXNpb25fZGlnaXRzX2Nv
dW50IC0gMSk7Ci0gICAgICAgIHByZWNpc2lvbl9iaXRzICo9IGtEZW5vbWluYXRvcjsKLSAgICAg
ICAgaGFsZl93YXkgKj0ga0Rlbm9taW5hdG9yOwotICAgICAgICBEaXlGcCByb3VuZGVkX2lucHV0
KGlucHV0LmYoKSA+PiBwcmVjaXNpb25fZGlnaXRzX2NvdW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlucHV0LmUoKSArIHByZWNpc2lvbl9kaWdpdHNfY291bnQpOwotICAgICAgICBp
ZiAocHJlY2lzaW9uX2JpdHMgPj0gaGFsZl93YXkgKyBlcnJvcikgewotICAgICAgICAgICAgcm91
bmRlZF9pbnB1dC5zZXRfZihyb3VuZGVkX2lucHV0LmYoKSArIDEpOwotICAgICAgICB9Ci0gICAg
ICAgIC8vIElmIHRoZSBsYXN0X2JpdHMgYXJlIHRvbyBjbG9zZSB0byB0aGUgaGFsZi13YXkgY2Fz
ZSB0aGFuIHdlIGFyZSB0b28KLSAgICAgICAgLy8gaW5hY2N1cmF0ZSBhbmQgcm91bmQgZG93bi4g
SW4gdGhpcyBjYXNlIHdlIHJldHVybiBmYWxzZSBzbyB0aGF0IHdlIGNhbgotICAgICAgICAvLyBm
YWxsIGJhY2sgdG8gYSBtb3JlIHByZWNpc2UgYWxnb3JpdGhtLgotICAgICAgICAKLSAgICAgICAg
KnJlc3VsdCA9IERvdWJsZShyb3VuZGVkX2lucHV0KS52YWx1ZSgpOwotICAgICAgICBpZiAoaGFs
Zl93YXkgLSBlcnJvciA8IHByZWNpc2lvbl9iaXRzICYmIHByZWNpc2lvbl9iaXRzIDwgaGFsZl93
YXkgKyBlcnJvcikgewotICAgICAgICAgICAgLy8gVG9vIGltcHJlY2lzZS4gVGhlIGNhbGxlciB3
aWxsIGhhdmUgdG8gZmFsbCBiYWNrIHRvIGEgc2xvd2VyIHZlcnNpb24uCi0gICAgICAgICAgICAv
LyBIb3dldmVyIHRoZSByZXR1cm5lZCBudW1iZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBlaXRoZXIg
dGhlIGNvcnJlY3QKLSAgICAgICAgICAgIC8vIGRvdWJsZSwgb3IgdGhlIG5leHQtbG93ZXIgZG91
YmxlLgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgCi0gICAgLy8g
UmV0dXJucyB0aGUgY29ycmVjdCBkb3VibGUgZm9yIHRoZSBidWZmZXIqMTBeZXhwb25lbnQuCi0g
ICAgLy8gVGhlIHZhcmlhYmxlIGd1ZXNzIHNob3VsZCBiZSBhIGNsb3NlIGd1ZXNzIHRoYXQgaXMg
ZWl0aGVyIHRoZSBjb3JyZWN0IGRvdWJsZQotICAgIC8vIG9yIGl0cyBsb3dlciBuZWlnaGJvciAo
dGhlIG5lYXJlc3QgZG91YmxlIGxlc3MgdGhhbiB0aGUgY29ycmVjdCBvbmUpLgotICAgIC8vIFBy
ZWNvbmRpdGlvbnM6Ci0gICAgLy8gICBidWZmZXIubGVuZ3RoKCkgKyBleHBvbmVudCA8PSBrTWF4
RGVjaW1hbFBvd2VyICsgMQotICAgIC8vICAgYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPiBr
TWluRGVjaW1hbFBvd2VyCi0gICAgLy8gICBidWZmZXIubGVuZ3RoKCkgPD0ga01heERlY2ltYWxT
aWduaWZpY2FudERpZ2l0cwotICAgIHN0YXRpYyBkb3VibGUgQmlnbnVtU3RydG9kKEJ1ZmZlclJl
ZmVyZW5jZTxjb25zdCBjaGFyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGV4cG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBn
dWVzcykgewotICAgICAgICBpZiAoZ3Vlc3MgPT0gRG91YmxlOjpJbmZpbml0eSgpKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ3Vlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERpeUZw
IHVwcGVyX2JvdW5kYXJ5ID0gRG91YmxlKGd1ZXNzKS5VcHBlckJvdW5kYXJ5KCk7Ci0gICAgICAg
IAotICAgICAgICBBU1NFUlQoYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPD0ga01heERlY2lt
YWxQb3dlciArIDEpOwotICAgICAgICBBU1NFUlQoYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQg
PiBrTWluRGVjaW1hbFBvd2VyKTsKLSAgICAgICAgQVNTRVJUKGJ1ZmZlci5sZW5ndGgoKSA8PSBr
TWF4U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRzKTsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
dGhlIEJpZ251bSB3aWxsIGJlIGFibGUgdG8gaG9sZCBhbGwgb3VyIG51bWJlcnMuCi0gICAgICAg
IC8vIE91ciBCaWdudW0gaW1wbGVtZW50YXRpb24gaGFzIGEgc2VwYXJhdGUgZmllbGQgZm9yIGV4
cG9uZW50cy4gU2hpZnRzIHdpbGwKLSAgICAgICAgLy8gY29uc3VtZSBhdCBtb3N0IG9uZSBiaWdp
dCAoPCA2NCBiaXRzKS4KLSAgICAgICAgLy8gbG4oMTApID09IDMuMzIxOS4uLgotICAgICAgICBB
U1NFUlQoKChrTWF4RGVjaW1hbFBvd2VyICsgMSkgKiAzMzMgLyAxMDApIDwgQmlnbnVtOjprTWF4
U2lnbmlmaWNhbnRCaXRzKTsKLSAgICAgICAgQmlnbnVtIGlucHV0OwotICAgICAgICBCaWdudW0g
Ym91bmRhcnk7Ci0gICAgICAgIGlucHV0LkFzc2lnbkRlY2ltYWxTdHJpbmcoYnVmZmVyKTsKLSAg
ICAgICAgYm91bmRhcnkuQXNzaWduVUludDY0KHVwcGVyX2JvdW5kYXJ5LmYoKSk7Ci0gICAgICAg
IGlmIChleHBvbmVudCA+PSAwKSB7Ci0gICAgICAgICAgICBpbnB1dC5NdWx0aXBseUJ5UG93ZXJP
ZlRlbihleHBvbmVudCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBib3VuZGFyeS5N
dWx0aXBseUJ5UG93ZXJPZlRlbigtZXhwb25lbnQpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh1
cHBlcl9ib3VuZGFyeS5lKCkgPiAwKSB7Ci0gICAgICAgICAgICBib3VuZGFyeS5TaGlmdExlZnQo
dXBwZXJfYm91bmRhcnkuZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlucHV0
LlNoaWZ0TGVmdCgtdXBwZXJfYm91bmRhcnkuZSgpKTsKLSAgICAgICAgfQotICAgICAgICBpbnQg
Y29tcGFyaXNvbiA9IEJpZ251bTo6Q29tcGFyZShpbnB1dCwgYm91bmRhcnkpOwotICAgICAgICBp
ZiAoY29tcGFyaXNvbiA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiBndWVzczsKLSAgICAgICAg
fSBlbHNlIGlmIChjb21wYXJpc29uID4gMCkgewotICAgICAgICAgICAgcmV0dXJuIERvdWJsZShn
dWVzcykuTmV4dERvdWJsZSgpOwotICAgICAgICB9IGVsc2UgaWYgKChEb3VibGUoZ3Vlc3MpLlNp
Z25pZmljYW5kKCkgJiAxKSA9PSAwKSB7Ci0gICAgICAgICAgICAvLyBSb3VuZCB0b3dhcmRzIGV2
ZW4uCi0gICAgICAgICAgICByZXR1cm4gZ3Vlc3M7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICByZXR1cm4gRG91YmxlKGd1ZXNzKS5OZXh0RG91YmxlKCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgCi0gICAgZG91YmxlIFN0cnRvZChCdWZmZXJSZWZlcmVuY2U8Y29uc3QgY2hh
cj4gYnVmZmVyLCBpbnQgZXhwb25lbnQpIHsKLSAgICAgICAgQnVmZmVyUmVmZXJlbmNlPGNvbnN0
IGNoYXI+IGxlZnRfdHJpbW1lZCA9IFRyaW1MZWFkaW5nWmVyb3MoYnVmZmVyKTsKLSAgICAgICAg
QnVmZmVyUmVmZXJlbmNlPGNvbnN0IGNoYXI+IHRyaW1tZWQgPSBUcmltVHJhaWxpbmdaZXJvcyhs
ZWZ0X3RyaW1tZWQpOwotICAgICAgICBleHBvbmVudCArPSBsZWZ0X3RyaW1tZWQubGVuZ3RoKCkg
LSB0cmltbWVkLmxlbmd0aCgpOwotICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGgoKSA9PSAwKSBy
ZXR1cm4gMC4wOwotICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGgoKSA+IGtNYXhTaWduaWZpY2Fu
dERlY2ltYWxEaWdpdHMpIHsKLSAgICAgICAgICAgIGNoYXIgc2lnbmlmaWNhbnRfYnVmZmVyW2tN
YXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHNdOwotICAgICAgICAgICAgaW50IHNpZ25pZmljYW50
X2V4cG9uZW50OwotICAgICAgICAgICAgVHJpbVRvTWF4U2lnbmlmaWNhbnREaWdpdHModHJpbW1l
ZCwgZXhwb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdu
aWZpY2FudF9idWZmZXIsICZzaWduaWZpY2FudF9leHBvbmVudCk7Ci0gICAgICAgICAgICByZXR1
cm4gU3RydG9kKEJ1ZmZlclJlZmVyZW5jZTxjb25zdCBjaGFyPihzaWduaWZpY2FudF9idWZmZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWF4U2lnbmlm
aWNhbnREZWNpbWFsRGlnaXRzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNh
bnRfZXhwb25lbnQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChleHBvbmVudCArIHRyaW1tZWQu
bGVuZ3RoKCkgLSAxID49IGtNYXhEZWNpbWFsUG93ZXIpIHsKLSAgICAgICAgICAgIHJldHVybiBE
b3VibGU6OkluZmluaXR5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4cG9uZW50ICsgdHJp
bW1lZC5sZW5ndGgoKSA8PSBrTWluRGVjaW1hbFBvd2VyKSB7Ci0gICAgICAgICAgICByZXR1cm4g
MC4wOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgZ3Vlc3M7Ci0gICAgICAg
IGlmIChEb3VibGVTdHJ0b2QodHJpbW1lZCwgZXhwb25lbnQsICZndWVzcykgfHwKLSAgICAgICAg
ICAgIERpeUZwU3RydG9kKHRyaW1tZWQsIGV4cG9uZW50LCAmZ3Vlc3MpKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gZ3Vlc3M7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEJpZ251bVN0cnRvZCh0
cmltbWVkLCBleHBvbmVudCwgZ3Vlc3MpOwotICAgIH0KLSAgICAKLX0gIC8vIG5hbWVzcGFjZSBk
b3VibGVfY29udmVyc2lvbgotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kdG9hL3N0cnRvZC5oIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2Evc3RydG9kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDY2OTczY2ViZjJhM2E3Y2I0ZjJhMDdjZDM1ZjlmM2Q2YzNhZTgyMTIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL2R0b2Evc3RydG9kLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NSAr
MCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vICAgICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0v
LyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQKLS8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8v
ICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZm5kZWYgRE9VQkxFX0NPTlZF
UlNJT05fU1RSVE9EX0hfCi0jZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX1NUUlRPRF9IXwotCi0j
aW5jbHVkZSAidXRpbHMuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBkb3VibGVf
Y29udmVyc2lvbiB7Ci0gICAgCi0gICAgLy8gVGhlIGJ1ZmZlciBtdXN0IG9ubHkgY29udGFpbiBk
aWdpdHMgaW4gdGhlIHJhbmdlIFswLTldLiBJdCBtdXN0IG5vdAotICAgIC8vIGNvbnRhaW4gYSBk
b3Qgb3IgYSBzaWduLiBJdCBtdXN0IG5vdCBzdGFydCB3aXRoICcwJywgYW5kIG11c3Qgbm90IGJl
IGVtcHR5LgotICAgIGRvdWJsZSBTdHJ0b2QoQnVmZmVyUmVmZXJlbmNlPGNvbnN0IGNoYXI+IGJ1
ZmZlciwgaW50IGV4cG9uZW50KTsKLSAgICAKLX0gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVy
c2lvbgotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lP
Tl9TVFJUT0RfSF8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi9kdG9hL3V0aWxzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZHRvYS91
dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODk2NDJjZWU3MjI2NjdiZDU5
NjJiMTIyYWNmNWQ0OTQyMjljOWY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9kdG9hL3V0aWxz
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMTEgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTAgdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0vLyAgICAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLS8vICAgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0jaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX1VUSUxTX0hfCi0jZGVmaW5lIERPVUJM
RV9DT05WRVJTSU9OX1VUSUxTX0hfCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIFVOSU1QTEVN
RU5URUQgQVNTRVJUX05PVF9SRUFDSEVECi0jZGVmaW5lIFVOUkVBQ0hBQkxFIEFTU0VSVF9OT1Rf
UkVBQ0hFRAotCi0vLyBEb3VibGUgb3BlcmF0aW9ucyBkZXRlY3Rpb24gYmFzZWQgb24gdGFyZ2V0
IGFyY2hpdGVjdHVyZS4KLS8vIExpbnV4IHVzZXMgYSA4MGJpdCB3aWRlIGZsb2F0aW5nIHBvaW50
IHN0YWNrIG9uIHg4Ni4gVGhpcyBpbmR1Y2VzIGRvdWJsZQotLy8gcm91bmRpbmcsIHdoaWNoIGlu
IHR1cm4gbGVhZHMgdG8gd3JvbmcgcmVzdWx0cy4KLS8vIEFuIGVhc3kgd2F5IHRvIHRlc3QgaWYg
dGhlIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QgaXMgdG8KLS8vIGV2YWx1
YXRlOiA4OTI1NS4wLzFlMjIuIElmIHRoZSBmbG9hdGluZy1wb2ludCBzdGFjayBpcyA2NCBiaXRz
IHdpZGUgdGhlbgotLy8gdGhlIHJlc3VsdCBpcyBlcXVhbCB0byA4OTI1NWUtMjIuCi0vLyBUaGUg
YmVzdCB3YXkgdG8gdGVzdCB0aGlzLCBpcyB0byBjcmVhdGUgYSBkaXZpc2lvbi1mdW5jdGlvbiBh
bmQgdG8gY29tcGFyZQotLy8gdGhlIG91dHB1dCBvZiB0aGUgZGl2aXNpb24gd2l0aCB0aGUgZXhw
ZWN0ZWQgcmVzdWx0LiAoSW5saW5pbmcgbXVzdCBiZQotLy8gZGlzYWJsZWQuKQotLy8gT24gTGlu
dXgseDg2IDg5MjU1ZS0yMiAhPSBEaXZfZG91YmxlKDg5MjU1LjAvMWUyMikKLSNpZiBkZWZpbmVk
KF9NX1g2NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBcCi1kZWZpbmVkKF9fQVJNRUxfXykg
fHwgXAotZGVmaW5lZChfTUlQU19BUkNIX01JUFMzMlIyKQotI2RlZmluZSBET1VCTEVfQ09OVkVS
U0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TIDEKLSNlbGlmIENQVShNSVBTKSB8fCBDUFUo
TUlQUzY0KSB8fCBDUFUoUFBDKSB8fCBDUFUoUFBDNjQpIHx8IENQVShQUEM2NExFKSB8fCBDUFUo
U0g0KSB8fCBDUFUoUzM5MCkgfHwgQ1BVKFMzOTBYKSB8fCBDUFUoSUE2NCkgfHwgQ1BVKEFMUEhB
KSB8fCBDUFUoQVJNNjQpIHx8IENQVShIUFBBKQotI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9D
T1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TIDEKLSNlbGlmIGRlZmluZWQoX01fSVg4NikgfHwgZGVm
aW5lZChfX2kzODZfXykKLSNpZiBkZWZpbmVkKF9XSU4zMikKLS8vIFdpbmRvd3MgdXNlcyBhIDY0
Yml0IHdpZGUgZmxvYXRpbmcgcG9pbnQgc3RhY2suCi0jZGVmaW5lIERPVUJMRV9DT05WRVJTSU9O
X0NPUlJFQ1RfRE9VQkxFX09QRVJBVElPTlMgMQotI2Vsc2UKLSN1bmRlZiBET1VCTEVfQ09OVkVS
U0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TCi0jZW5kaWYgIC8vIF9XSU4zMgotI2Vsc2UK
LSNlcnJvciBUYXJnZXQgYXJjaGl0ZWN0dXJlIHdhcyBub3QgZGV0ZWN0ZWQgYXMgc3VwcG9ydGVk
IGJ5IERvdWJsZS1Db252ZXJzaW9uLgotI2VuZGlmCi0KLQotI2lmIGRlZmluZWQoX1dJTjMyKSAm
JiAhZGVmaW5lZChfX01JTkdXMzJfXykKLQotdHlwZWRlZiBzaWduZWQgY2hhciBpbnQ4X3Q7Ci10
eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKLXR5cGVkZWYgc2hvcnQgaW50MTZfdDsgIC8v
IE5PTElOVAotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsgIC8vIE5PTElOVAotdHlw
ZWRlZiBpbnQgaW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwotdHlwZWRl
ZiBfX2ludDY0IGludDY0X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7Ci0v
LyBpbnRwdHJfdCBhbmQgZnJpZW5kcyBhcmUgZGVmaW5lZCBpbiBjcnRkZWZzLmggdGhyb3VnaCBz
dGRpby5oLgotCi0jZWxzZQotCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLSNlbmRpZgotCi0vLyBU
aGUgZm9sbG93aW5nIG1hY3JvIHdvcmtzIG9uIGJvdGggMzIgYW5kIDY0LWJpdCBwbGF0Zm9ybXMu
Ci0vLyBVc2FnZTogaW5zdGVhZCBvZiB3cml0aW5nIDB4MTIzNDU2Nzg5MDEyMzQ1NgotLy8gICAg
ICB3cml0ZSBVSU5UNjRfMlBBUlRfQygweDEyMzQ1Njc4LDkwMTIzNDU2KTsKLSNkZWZpbmUgVUlO
VDY0XzJQQVJUX0MoYSwgYikgKCgoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGEpIDw8IDMyKSArIDB4
IyNiIyN1KSkKLQotCi0vLyBUaGUgZXhwcmVzc2lvbiBBUlJBWV9TSVpFKGEpIGlzIGEgY29tcGls
ZS10aW1lIGNvbnN0YW50IG9mIHR5cGUKLS8vIHNpemVfdCB3aGljaCByZXByZXNlbnRzIHRoZSBu
dW1iZXIgb2YgZWxlbWVudHMgb2YgdGhlIGdpdmVuCi0vLyBhcnJheS4gWW91IHNob3VsZCBvbmx5
IHVzZSBBUlJBWV9TSVpFIG9uIHN0YXRpY2FsbHkgYWxsb2NhdGVkCi0vLyBhcnJheXMuCi0jZGVm
aW5lIEFSUkFZX1NJWkUoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSgo
c2l6ZW9mKGEpIC8gc2l6ZW9mKCooYSkpKSAvICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0
YXRpY19jYXN0PHNpemVfdD4oIShzaXplb2YoYSkgJSBzaXplb2YoKihhKSkpKSkKLQotLy8gQSBt
YWNybyB0byBkaXNhbGxvdyB0aGUgZXZpbCBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0g
ZnVuY3Rpb25zCi0vLyBUaGlzIHNob3VsZCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJh
dGlvbnMgZm9yIGEgY2xhc3MKLSNkZWZpbmUgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVO
YW1lKSAgICAgIFwKLVR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgICAg
ICBcCi12b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCi0KLS8vIEEgbWFjcm8gdG8gZGlz
YWxsb3cgYWxsIHRoZSBpbXBsaWNpdCBjb25zdHJ1Y3RvcnMsIG5hbWVseSB0aGUKLS8vIGRlZmF1
bHQgY29uc3RydWN0b3IsIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMu
Ci0vLwotLy8gVGhpcyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25z
IGZvciBhIGNsYXNzCi0vLyB0aGF0IHdhbnRzIHRvIHByZXZlbnQgYW55b25lIGZyb20gaW5zdGFu
dGlhdGluZyBpdC4gVGhpcyBpcwotLy8gZXNwZWNpYWxseSB1c2VmdWwgZm9yIGNsYXNzZXMgY29u
dGFpbmluZyBvbmx5IHN0YXRpYyBtZXRob2RzLgotI2RlZmluZSBESVNBTExPV19JTVBMSUNJVF9D
T05TVFJVQ1RPUlMoVHlwZU5hbWUpIFwKLVR5cGVOYW1lKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKQotCi1u
YW1lc3BhY2UgV1RGIHsKLQotbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKLSAgICAKLSAg
ICBzdGF0aWMgY29uc3QgaW50IGtDaGFyU2l6ZSA9IHNpemVvZihjaGFyKTsKLSAgICAKLSAgICAv
LyBSZXR1cm5zIHRoZSBtYXhpbXVtIG9mIHRoZSB0d28gcGFyYW1ldGVycy4KLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgVCBNYXgoVCBhLCBUIGIpIHsKLSAgICAgICAgcmV0
dXJuIGEgPCBiID8gYiA6IGE7Ci0gICAgfQotICAgIAotICAgIAotICAgIC8vIFJldHVybnMgdGhl
IG1pbmltdW0gb2YgdGhlIHR3byBwYXJhbWV0ZXJzLgotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgotICAgIHN0YXRpYyBUIE1pbihUIGEsIFQgYikgewotICAgICAgICByZXR1cm4gYSA8IGIgPyBh
IDogYjsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgaW5saW5lIGludCBTdHJMZW5ndGgoY29uc3Qg
Y2hhciogc3RyaW5nKSB7Ci0gICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsK
LSAgICAgICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0YXRpY19jYXN0
PGludD4obGVuZ3RoKSkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgp
OwotICAgIH0KLQotICAgIC8vIEJ1ZmZlclJlZmVyZW5jZSBhYnN0cmFjdCBhIG1lbW9yeSBidWZm
ZXIuIEl0IHByb3ZpZGVzIGEgcG9pbnRlcgotICAgIC8vIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhl
IGJ1ZmZlciwgYW5kIHRoZSBhdmFpbGFibGUgbGVuZ3RoLiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLSAgICBjbGFzcyBCdWZmZXJSZWZlcmVuY2UgewotICAgIHB1YmxpYzoKLSAgICAgICAg
QnVmZmVyUmVmZXJlbmNlKCkgOiBzdGFydF8oTlVMTCksIGxlbmd0aF8oMCkge30KLSAgICAgICAg
QnVmZmVyUmVmZXJlbmNlKFQqIGRhdGEsIGludCBsZW5ndGgpIDogc3RhcnRfKGRhdGEpLCBsZW5n
dGhfKGxlbmd0aCkgewotICAgICAgICAgICAgQVNTRVJUKGxlbmd0aCA9PSAwIHx8IChsZW5ndGgg
PiAwICYmIGRhdGEgIT0gTlVMTCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBS
ZXR1cm5zIGEgdmVjdG9yIHVzaW5nIHRoZSBzYW1lIGJhY2tpbmcgc3RvcmFnZSBhcyB0aGlzIG9u
ZSwKLSAgICAgICAgLy8gc3Bhbm5pbmcgZnJvbSBhbmQgaW5jbHVkaW5nICdmcm9tJywgdG8gYnV0
IG5vdCBpbmNsdWRpbmcgJ3RvJy4KLSAgICAgICAgQnVmZmVyUmVmZXJlbmNlPFQ+IFN1YkJ1ZmZl
clJlZmVyZW5jZShpbnQgZnJvbSwgaW50IHRvKSB7Ci0gICAgICAgICAgICBBU1NFUlQodG8gPD0g
bGVuZ3RoXyk7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihm
cm9tIDwgdG8pOwotICAgICAgICAgICAgQVNTRVJUKDAgPD0gZnJvbSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gQnVmZmVyUmVmZXJlbmNlPFQ+KHN0YXJ0KCkgKyBmcm9tLCB0byAtIGZyb20pOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHZl
Y3Rvci4KLSAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGxlbmd0aF87IH0KLSAg
ICAgICAgCi0gICAgICAgIC8vIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvciBpcyBl
bXB0eS4KLSAgICAgICAgYm9vbCBpc19lbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGxlbmd0aF8gPT0g
MDsgfQotICAgICAgICAKLSAgICAgICAgLy8gUmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgc3Rh
cnQgb2YgdGhlIGRhdGEgaW4gdGhlIHZlY3Rvci4KLSAgICAgICAgVCogc3RhcnQoKSBjb25zdCB7
IHJldHVybiBzdGFydF87IH0KLSAgICAgICAgCi0gICAgICAgIC8vIEFjY2VzcyBpbmRpdmlkdWFs
IHZlY3RvciBlbGVtZW50cyAtIGNoZWNrcyBib3VuZHMgaW4gZGVidWcgbW9kZS4KLSAgICAgICAg
VCYgb3BlcmF0b3JbXShpbnQgaW5kZXgpIGNvbnN0IHsKLSAgICAgICAgICAgIEFTU0VSVCgwIDw9
IGluZGV4ICYmIGluZGV4IDwgbGVuZ3RoXyk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhcnRfW2lu
ZGV4XTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVCYgZmlyc3QoKSB7IHJldHVybiBz
dGFydF9bMF07IH0KLSAgICAgICAgCi0gICAgICAgIFQmIGxhc3QoKSB7IHJldHVybiBzdGFydF9b
bGVuZ3RoXyAtIDFdOyB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFQqIHN0YXJ0
XzsKLSAgICAgICAgaW50IGxlbmd0aF87Ci0gICAgfTsKLSAgICAKLSAgICAKLSAgICAvLyBIZWxw
ZXIgY2xhc3MgZm9yIGJ1aWxkaW5nIHJlc3VsdCBzdHJpbmdzIGluIGEgY2hhcmFjdGVyIGJ1ZmZl
ci4gVGhlCi0gICAgLy8gcHVycG9zZSBvZiB0aGUgY2xhc3MgaXMgdG8gdXNlIHNhZmUgb3BlcmF0
aW9ucyB0aGF0IGNoZWNrcyB0aGUKLSAgICAvLyBidWZmZXIgYm91bmRzIG9uIGFsbCBvcGVyYXRp
b25zIGluIGRlYnVnIG1vZGUuCi0gICAgY2xhc3MgU3RyaW5nQnVpbGRlciB7Ci0gICAgcHVibGlj
OgotICAgICAgICBTdHJpbmdCdWlsZGVyKGNoYXIqIGJ1ZmZlciwgaW50IHNpemUpCi0gICAgICAg
IDogYnVmZmVyXyhidWZmZXIsIHNpemUpLCBwb3NpdGlvbl8oMCkgeyB9Ci0gICAgICAgIAotICAg
ICAgICB+U3RyaW5nQnVpbGRlcigpIHsgaWYgKCFpc19maW5hbGl6ZWQoKSkgRmluYWxpemUoKTsg
fQotICAgICAgICAKLSAgICAgICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBidWZmZXJfLmxl
bmd0aCgpOyB9Ci0gICAgICAgIAotICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcG9zaXRpb24g
aW4gdGhlIGJ1aWxkZXIuCi0gICAgICAgIGludCBwb3NpdGlvbigpIGNvbnN0IHsKLSAgICAgICAg
ICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkpOwotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9u
XzsKLSAgICAgICAgfQotICAgICAgICAgCi0gICAgICAgIC8vIFNldCB0aGUgY3VycmVudCBwb3Np
dGlvbiBpbiB0aGUgYnVpbGRlci4KLSAgICAgICAgdm9pZCBTZXRQb3NpdGlvbihpbnQgcG9zaXRp
b24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkpOwotICAg
ICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocG9zaXRpb24gPCBzaXpl
KCkpOwotICAgICAgICAgICAgcG9zaXRpb25fID0gcG9zaXRpb247Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIC8vIFJlc2V0IHRoZSBwb3NpdGlvbi4KLSAgICAgICAgdm9pZCBSZXNldCgp
IHsgcG9zaXRpb25fID0gMDsgfQotICAgICAgICAKLSAgICAgICAgLy8gQWRkIGEgc2luZ2xlIGNo
YXJhY3RlciB0byB0aGUgYnVpbGRlci4gSXQgaXMgbm90IGFsbG93ZWQgdG8gYWRkCi0gICAgICAg
IC8vIDAtY2hhcmFjdGVyczsgdXNlIHRoZSBGaW5hbGl6ZSgpIG1ldGhvZCB0byB0ZXJtaW5hdGUg
dGhlIHN0cmluZwotICAgICAgICAvLyBpbnN0ZWFkLgotICAgICAgICB2b2lkIEFkZENoYXJhY3Rl
cihjaGFyIGMpIHsKLSAgICAgICAgICAgIEFTU0VSVChjICE9ICdcMCcpOwotICAgICAgICAgICAg
QVNTRVJUKCFpc19maW5hbGl6ZWQoKSAmJiBwb3NpdGlvbl8gPCBidWZmZXJfLmxlbmd0aCgpKTsK
LSAgICAgICAgICAgIGJ1ZmZlcl9bcG9zaXRpb25fKytdID0gYzsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgLy8gQWRkIGFuIGVudGlyZSBzdHJpbmcgdG8gdGhlIGJ1aWxkZXIuIFVzZXMg
c3RybGVuKCkgaW50ZXJuYWxseSB0bwotICAgICAgICAvLyBjb21wdXRlIHRoZSBsZW5ndGggb2Yg
dGhlIGlucHV0IHN0cmluZy4KLSAgICAgICAgdm9pZCBBZGRTdHJpbmcoY29uc3QgY2hhciogcykg
ewotICAgICAgICAgICAgQWRkU3Vic3RyaW5nKHMsIFN0ckxlbmd0aChzKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIC8vIEFkZCB0aGUgZmlyc3QgJ24nIGNoYXJhY3RlcnMgb2YgdGhl
IGdpdmVuIHN0cmluZyAncycgdG8gdGhlCi0gICAgICAgIC8vIGJ1aWxkZXIuIFRoZSBpbnB1dCBz
dHJpbmcgbXVzdCBoYXZlIGVub3VnaCBjaGFyYWN0ZXJzLgotICAgICAgICB2b2lkIEFkZFN1YnN0
cmluZyhjb25zdCBjaGFyKiBzLCBpbnQgbikgewotICAgICAgICAgICAgQVNTRVJUKCFpc19maW5h
bGl6ZWQoKSAmJiBwb3NpdGlvbl8gKyBuIDwgYnVmZmVyXy5sZW5ndGgoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG4p
IDw9IHN0cmxlbihzKSk7Ci0gICAgICAgICAgICBtZW1jcHkoJmJ1ZmZlcl9bcG9zaXRpb25fXSwg
cywgbiAqIGtDaGFyU2l6ZSk7Ci0gICAgICAgICAgICBwb3NpdGlvbl8gKz0gbjsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIC8vIEFkZCBjaGFyYWN0ZXIgcGFkZGluZyB0
byB0aGUgYnVpbGRlci4gSWYgY291bnQgaXMgbm9uLXBvc2l0aXZlLAotICAgICAgICAvLyBub3Ro
aW5nIGlzIGFkZGVkIHRvIHRoZSBidWlsZGVyLgotICAgICAgICB2b2lkIEFkZFBhZGRpbmcoY2hh
ciBjLCBpbnQgY291bnQpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgewotICAgICAgICAgICAgICAgIEFkZENoYXJhY3RlcihjKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gRmluYWxpemUgdGhlIHN0cmluZyBieSAw
LXRlcm1pbmF0aW5nIGl0IGFuZCByZXR1cm5pbmcgdGhlIGJ1ZmZlci4KLSAgICAgICAgY2hhciog
RmluYWxpemUoKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWlzX2ZpbmFsaXplZCgpICYmIHBvc2l0
aW9uXyA8IGJ1ZmZlcl8ubGVuZ3RoKCkpOwotICAgICAgICAgICAgYnVmZmVyX1twb3NpdGlvbl9d
ID0gJ1wwJzsKLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBub2JvZHkgbWFuYWdlZCB0byBhZGQg
YSAwLWNoYXJhY3RlciB0byB0aGUKLSAgICAgICAgICAgIC8vIGJ1ZmZlciB3aGlsZSBidWlsZGlu
ZyB0aGUgc3RyaW5nLgotICAgICAgICAgICAgQVNTRVJUKHN0cmxlbihidWZmZXJfLnN0YXJ0KCkp
ID09IHN0YXRpY19jYXN0PHNpemVfdD4ocG9zaXRpb25fKSk7Ci0gICAgICAgICAgICBwb3NpdGlv
bl8gPSAtMTsKLSAgICAgICAgICAgIEFTU0VSVChpc19maW5hbGl6ZWQoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gYnVmZmVyXy5zdGFydCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgIHByaXZh
dGU6Ci0gICAgICAgIEJ1ZmZlclJlZmVyZW5jZTxjaGFyPiBidWZmZXJfOwotICAgICAgICBpbnQg
cG9zaXRpb25fOwotICAgICAgICAKLSAgICAgICAgYm9vbCBpc19maW5hbGl6ZWQoKSBjb25zdCB7
IHJldHVybiBwb3NpdGlvbl8gPCAwOyB9Ci0gICAgICAgIAotICAgICAgICBESVNBTExPV19JTVBM
SUNJVF9DT05TVFJVQ1RPUlMoU3RyaW5nQnVpbGRlcik7Ci0gICAgfTsKLSAgICAKLSAgICAvLyBU
aGUgdHlwZS1iYXNlZCBhbGlhc2luZyBydWxlIGFsbG93cyB0aGUgY29tcGlsZXIgdG8gYXNzdW1l
IHRoYXQgcG9pbnRlcnMgb2YKLSAgICAvLyBkaWZmZXJlbnQgdHlwZXMgKGZvciBzb21lIGRlZmlu
aXRpb24gb2YgZGlmZmVyZW50KSBuZXZlciBhbGlhcyBlYWNoIG90aGVyLgotICAgIC8vIFRodXMg
dGhlIGZvbGxvd2luZyBjb2RlIGRvZXMgbm90IHdvcms6Ci0gICAgLy8KLSAgICAvLyBmbG9hdCBm
ID0gZm9vKCk7Ci0gICAgLy8gaW50IGZiaXRzID0gKihpbnQqKSgmZik7Ci0gICAgLy8KLSAgICAv
LyBUaGUgY29tcGlsZXIgJ2tub3dzJyB0aGF0IHRoZSBpbnQgcG9pbnRlciBjYW4ndCByZWZlciB0
byBmIHNpbmNlIHRoZSB0eXBlcwotICAgIC8vIGRvbid0IG1hdGNoLCBzbyB0aGUgY29tcGlsZXIg
bWF5IGNhY2hlIGYgaW4gYSByZWdpc3RlciwgbGVhdmluZyByYW5kb20gZGF0YQotICAgIC8vIGlu
IGZiaXRzLiAgVXNpbmcgQysrIHN0eWxlIGNhc3RzIG1ha2VzIG5vIGRpZmZlcmVuY2UsIGhvd2V2
ZXIgYSBwb2ludGVyIHRvCi0gICAgLy8gY2hhciBkYXRhIGlzIGFzc3VtZWQgdG8gYWxpYXMgYW55
IG90aGVyIHBvaW50ZXIuICBUaGlzIGlzIHRoZSAnbWVtY3B5Ci0gICAgLy8gZXhjZXB0aW9uJy4K
LSAgICAvLwotICAgIC8vIEJpdF9jYXN0IHVzZXMgdGhlIG1lbWNweSBleGNlcHRpb24gdG8gbW92
ZSB0aGUgYml0cyBmcm9tIGEgdmFyaWFibGUgb2Ygb25lCi0gICAgLy8gdHlwZSBvZiBhIHZhcmlh
YmxlIG9mIGFub3RoZXIgdHlwZS4gIE9mIGNvdXJzZSB0aGUgZW5kIHJlc3VsdCBpcyBsaWtlbHkg
dG8KLSAgICAvLyBiZSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBNb3N0IGNvbXBpbGVycyAo
Z2NjLTQuMiBhbmQgTVNWQyAyMDA1KQotICAgIC8vIHdpbGwgY29tcGxldGVseSBvcHRpbWl6ZSBC
aXRDYXN0IGF3YXkuCi0gICAgLy8KLSAgICAvLyBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIHVzZSBm
b3IgQml0Q2FzdC4KLSAgICAvLyBSZWNlbnQgZ2NjcyB3aWxsIHdhcm4gd2hlbiB0aGV5IHNlZSBj
YXN0cyB0aGF0IG1heSByZXN1bHQgaW4gYnJlYWthZ2UgZHVlIHRvCi0gICAgLy8gdGhlIHR5cGUt
YmFzZWQgYWxpYXNpbmcgcnVsZS4gIElmIHlvdSBoYXZlIGNoZWNrZWQgdGhhdCB0aGVyZSBpcyBu
byBicmVha2FnZQotICAgIC8vIHlvdSBjYW4gdXNlIEJpdENhc3QgdG8gY2FzdCBvbmUgcG9pbnRl
ciB0eXBlIHRvIGFub3RoZXIuICBUaGlzIGNvbmZ1c2VzIGdjYwotICAgIC8vIGVub3VnaCB0aGF0
IGl0IGNhbiBubyBsb25nZXIgc2VlIHRoYXQgeW91IGhhdmUgY2FzdCBvbmUgcG9pbnRlciB0eXBl
IHRvCi0gICAgLy8gYW5vdGhlciB0aHVzIGF2b2lkaW5nIHRoZSB3YXJuaW5nLgotICAgIHRlbXBs
YXRlIDxjbGFzcyBEZXN0LCBjbGFzcyBTb3VyY2U+Ci0gICAgaW5saW5lIERlc3QgQml0Q2FzdChj
b25zdCBTb3VyY2UmIHNvdXJjZSkgewotICAgICAgICAvLyBDb21waWxlIHRpbWUgYXNzZXJ0aW9u
OiBzaXplb2YoRGVzdCkgPT0gc2l6ZW9mKFNvdXJjZSkKLSAgICAgICAgLy8gQSBjb21waWxlIGVy
cm9yIGhlcmUgbWVhbnMgeW91ciBEZXN0IGFuZCBTb3VyY2UgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMu
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKERlc3QpID09IHNpemVvZihTb3VyY2UpLCAi
U291cmNlIGFuZCBkZXN0aW5hdGlvbiBzaXplcyBtdXN0IGJlIGVxdWFsIik7Ci0gICAgICAgIAot
ICAgICAgICBEZXN0IGRlc3Q7Ci0gICAgICAgIG1lbWNweSgmZGVzdCwgJnNvdXJjZSwgc2l6ZW9m
KGRlc3QpKTsKLSAgICAgICAgcmV0dXJuIGRlc3Q7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRl
IDxjbGFzcyBEZXN0LCBjbGFzcyBTb3VyY2U+Ci0gICAgaW5saW5lIERlc3QgQml0Q2FzdChTb3Vy
Y2UqIHNvdXJjZSkgewotICAgICAgICByZXR1cm4gQml0Q2FzdDxEZXN0PihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oc291cmNlKSk7Ci0gICAgfQotICAgIAotfSAgLy8gbmFtZXNwYWNlIGRv
dWJsZV9jb252ZXJzaW9uCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgIC8vIERPVUJM
RV9DT05WRVJTSU9OX1VUSUxTX0hfCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvZ2VuZXJpYy9NYWluVGhyZWFkR2VuZXJpYy5jcHAgYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvZ2VuZXJpYy9NYWluVGhyZWFkR2VuZXJpYy5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZTlmMGI5OTU4ODRhMDkwZjA0YmZhNTU4N2U0YTQx
MWIwM2U2NjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2dlbmVyaWMvTWFpblRocmVhZEdlbmVy
aWMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEtvbnN0YW50aW4gVG9rYXZldiA8YW5udWxlbkB5YW5kZXgucnU+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29t
PgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLSNpbmNsdWRlIDx3dGYv
UnVuTG9vcC5oPgotI2lmIFVTRShHTElCKQotI2luY2x1ZGUgPHd0Zi9nbGliL1J1bkxvb3BTb3Vy
Y2VQcmlvcml0eS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBNYWluVGhy
ZWFkRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgTWFpblRocmVhZERpc3BhdGNoZXIoKQotICAg
ICAgICA6IG1fdGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTWFpblRocmVhZERpc3BhdGNo
ZXI6OmZpcmVkKQotICAgIHsKLSNpZiBVU0UoR0xJQikKLSAgICAgICAgbV90aW1lci5zZXRQcmlv
cml0eShSdW5Mb29wU291cmNlUHJpb3JpdHk6Ok1haW5UaHJlYWREaXNwYXRjaGVyVGltZXIpOwot
I2VuZGlmCi0gICAgfQotCi0gICAgdm9pZCBzY2hlZHVsZSgpCi0gICAgewotICAgICAgICBtX3Rp
bWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGZpcmVk
KCkKLSAgICB7Ci0gICAgICAgIGRpc3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQoKTsKLSAg
ICB9Ci0KLSAgICBSdW5Mb29wOjpUaW1lcjxNYWluVGhyZWFkRGlzcGF0Y2hlcj4gbV90aW1lcjsK
LX07Ci0KLXZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCi17Ci19Ci0KLXZvaWQg
c2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpCi17Ci0gICAgLy8gVXNlIGEg
UnVuTG9vcDo6VGltZXIgaW5zdGVhZCBvZiBSdW5Mb29wOjpkaXNwYXRjaCgpIHRvIGJlIGFibGUg
dG8gdXNlIGEgZGlmZmVyZW50IHByaW9yaXR5IGFuZAotICAgIC8vIGF2b2lkIHRoZSBkb3VibGUg
cXVldWUgYmVjYXVzZSBkaXNwYXRjaE9uTWFpblRocmVhZCBhbHNvIHF1ZXVlcyB0aGUgZnVuY3Rp
b25zLgotICAgIHN0YXRpYyBNYWluVGhyZWFkRGlzcGF0Y2hlciBkaXNwYXRjaGVyOwotICAgIGRp
c3BhdGNoZXIuc2NoZWR1bGUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZ2VuZXJpYy9SdW5Mb29wR2VuZXJp
Yy5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvZ2VuZXJpYy9SdW5Mb29w
R2VuZXJpYy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYjgyM2ViYjljNTUx
ZDcyNzgyNzBiODYyMDYzMDk5ZTQ3MGJmM2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL2dlbmVy
aWMvUnVuTG9vcEdlbmVyaWMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzA0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgS29uc3RhbnRpbiBUb2thdmV2IDxhbm51bGVuQHlhbmRl
eC5ydT4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotY2xhc3MgUnVuTG9vcDo6VGltZXJCYXNlOjpTY2hlZHVsZWRUYXNrIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFNjaGVkdWxlZFRhc2s+IHsKLVdURl9NQUtFX05PTkNPUFlB
QkxFKFNjaGVkdWxlZFRhc2spOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2NoZWR1bGVkVGFz
az4gY3JlYXRlKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbiwgU2Vjb25kcyBpbnRlcnZhbCwg
Ym9vbCByZXBlYXRpbmcpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY2hl
ZHVsZWRUYXNrKFdURk1vdmUoZnVuY3Rpb24pLCBpbnRlcnZhbCwgcmVwZWF0aW5nKSk7Ci0gICAg
fQotCi0gICAgU2NoZWR1bGVkVGFzayhGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24sIFNlY29u
ZHMgaW50ZXJ2YWwsIGJvb2wgcmVwZWF0aW5nKQotICAgICAgICA6IG1fZnVuY3Rpb24oV1RGTW92
ZShmdW5jdGlvbikpCi0gICAgICAgICwgbV9maXJlSW50ZXJ2YWwoaW50ZXJ2YWwpCi0gICAgICAg
ICwgbV9pc1JlcGVhdGluZyhyZXBlYXRpbmcpCi0gICAgewotICAgICAgICB1cGRhdGVSZWFkeVRp
bWUoKTsKLSAgICB9Ci0KLSAgICBib29sIGZpcmVkKCkKLSAgICB7Ci0gICAgICAgIGlmICghaXNB
Y3RpdmUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX2Z1bmN0aW9u
KCk7Ci0KLSAgICAgICAgaWYgKCFtX2lzUmVwZWF0aW5nKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIHVwZGF0ZVJlYWR5VGltZSgpOwotICAgICAgICByZXR1cm4gaXNBY3Rp
dmUoKTsKLSAgICB9Ci0KLSAgICBNb25vdG9uaWNUaW1lIHNjaGVkdWxlZFRpbWVQb2ludCgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zY2hlZHVsZWRUaW1lUG9pbnQ7Ci0gICAgfQot
Ci0gICAgdm9pZCB1cGRhdGVSZWFkeVRpbWUoKQotICAgIHsKLSAgICAgICAgbV9zY2hlZHVsZWRU
aW1lUG9pbnQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAgICAgaWYgKCFtX2ZpcmVJbnRl
cnZhbCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zY2hlZHVsZWRUaW1lUG9pbnQg
Kz0gbV9maXJlSW50ZXJ2YWw7Ci0gICAgfQotCi0gICAgc3RydWN0IEVhcmxpZXN0U2NoZWR1bGUg
ewotICAgICAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgUmVmUHRyPFNjaGVkdWxlZFRhc2s+JiBs
aHMsIGNvbnN0IFJlZlB0cjxTY2hlZHVsZWRUYXNrPiYgcmhzKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbGhzLT5zY2hlZHVsZWRUaW1lUG9pbnQoKSA+IHJocy0+c2NoZWR1bGVkVGlt
ZVBvaW50KCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pc0FjdGl2ZS5sb2FkKCk7Ci0gICAgfQotCi0gICAg
dm9pZCBkZWFjdGl2YXRlKCkKLSAgICB7Ci0gICAgICAgIG1faXNBY3RpdmUuc3RvcmUoZmFsc2Up
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBGdW5jdGlvbjx2b2lkICgpPiBtX2Z1bmN0aW9uOwot
ICAgIE1vbm90b25pY1RpbWUgbV9zY2hlZHVsZWRUaW1lUG9pbnQ7Ci0gICAgU2Vjb25kcyBtX2Zp
cmVJbnRlcnZhbDsKLSAgICBzdGQ6OmF0b21pYzxib29sPiBtX2lzQWN0aXZlIHsgdHJ1ZSB9Owot
ICAgIGJvb2wgbV9pc1JlcGVhdGluZzsKLX07Ci0KLVJ1bkxvb3A6OlJ1bkxvb3AoKQotewotfQot
Ci1SdW5Mb29wOjp+UnVuTG9vcCgpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb29wTG9j
ayk7Ci0gICAgbV9zaHV0ZG93biA9IHRydWU7Ci0gICAgbV9yZWFkeVRvUnVuLm5vdGlmeU9uZSgp
OwotCi0gICAgLy8gSGVyZSBpcyBydW5uaW5nIG1haW4gbG9vcHMuIFdhaXQgdW50aWwgYWxsIHRo
ZSBtYWluIGxvb3BzIGFyZSBkZXN0cm95ZWQuCi0gICAgaWYgKCFtX21haW5Mb29wcy5pc0VtcHR5
KCkpCi0gICAgICAgIG1fc3RvcENvbmRpdGlvbi53YWl0KG1fbG9vcExvY2spOwotfQotCi1pbmxp
bmUgYm9vbCBSdW5Mb29wOjpwb3B1bGF0ZVRhc2tzKFJ1bk1vZGUgcnVuTW9kZSwgU3RhdHVzJiBz
dGF0dXNPZlRoaXNMb29wLCBEZXF1ZTxSZWZQdHI8VGltZXJCYXNlOjpTY2hlZHVsZWRUYXNrPj4m
IGZpcmVkVGltZXJzKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9vcExvY2spOwotCi0g
ICAgaWYgKHJ1bk1vZGUgPT0gUnVuTW9kZTo6RHJhaW4pIHsKLSAgICAgICAgTW9ub3RvbmljVGlt
ZSBzbGVlcFVudGlsID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKTsKLSAgICAgICAgaWYgKCFt
X3NjaGVkdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzbGVlcFVudGlsID0gbV9zY2hlZHVs
ZXMuZmlyc3QoKS0+c2NoZWR1bGVkVGltZVBvaW50KCk7Ci0KLSAgICAgICAgbV9yZWFkeVRvUnVu
LndhaXRVbnRpbChtX2xvb3BMb2NrLCBzbGVlcFVudGlsLCBbJl0gewotICAgICAgICAgICAgcmV0
dXJuIG1fc2h1dGRvd24gfHwgbV9wZW5kaW5nVGFza3MgfHwgc3RhdHVzT2ZUaGlzTG9vcCA9PSBT
dGF0dXM6OlN0b3BwaW5nOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdHVzT2ZU
aGlzTG9vcCA9PSBTdGF0dXM6OlN0b3BwaW5nIHx8IG1fc2h1dGRvd24pIHsKLSAgICAgICAgbV9t
YWluTG9vcHMucmVtb3ZlTGFzdCgpOwotICAgICAgICBpZiAobV9tYWluTG9vcHMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgbV9zdG9wQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIG1fcGVuZGluZ1Rhc2tzID0gZmFsc2U7Ci0gICAgaWYgKHJ1
bk1vZGUgPT0gUnVuTW9kZTo6SXRlcmF0ZSkKLSAgICAgICAgc3RhdHVzT2ZUaGlzTG9vcCA9IFN0
YXR1czo6U3RvcHBpbmc7Ci0KLSAgICAvLyBDaGVjayBleHBpcmVkIHRpbWVycy4KLSAgICBNb25v
dG9uaWNUaW1lIG5vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgIHdoaWxlICghbV9zY2hl
ZHVsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxUaW1lckJhc2U6OlNjaGVkdWxlZFRh
c2s+IGVhcmxpZXN0ID0gbV9zY2hlZHVsZXMuZmlyc3QoKTsKLSAgICAgICAgaWYgKGVhcmxpZXN0
LT5zY2hlZHVsZWRUaW1lUG9pbnQoKSA+IG5vdykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBzdGQ6OnBvcF9oZWFwKG1fc2NoZWR1bGVzLmJlZ2luKCksIG1fc2NoZWR1bGVzLmVuZCgpLCBU
aW1lckJhc2U6OlNjaGVkdWxlZFRhc2s6OkVhcmxpZXN0U2NoZWR1bGUoKSk7Ci0gICAgICAgIG1f
c2NoZWR1bGVzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgZmlyZWRUaW1lcnMuYXBwZW5kKFdURk1v
dmUoZWFybGllc3QpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSdW5M
b29wOjpydW5JbXBsKFJ1bk1vZGUgcnVuTW9kZSkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSAmUnVu
TG9vcDo6Y3VycmVudCgpKTsKLQotICAgIFN0YXR1cyBzdGF0dXNPZlRoaXNMb29wID0gU3RhdHVz
OjpDbGVhcjsKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9vcExvY2spOwot
ICAgICAgICBtX21haW5Mb29wcy5hcHBlbmQoJnN0YXR1c09mVGhpc0xvb3ApOwotICAgIH0KLQot
ICAgIERlcXVlPFJlZlB0cjxUaW1lckJhc2U6OlNjaGVkdWxlZFRhc2s+PiBmaXJlZFRpbWVyczsK
LSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAoIXBvcHVsYXRlVGFza3MocnVuTW9kZSwg
c3RhdHVzT2ZUaGlzTG9vcCwgZmlyZWRUaW1lcnMpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIC8vIERpc3BhdGNoIHNjaGVkdWxlZCB0aW1lcnMuCi0gICAgICAgIHdoaWxlICghZmly
ZWRUaW1lcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8VGltZXJCYXNlOjpTY2hl
ZHVsZWRUYXNrPiB0YXNrID0gZmlyZWRUaW1lcnMudGFrZUZpcnN0KCk7Ci0gICAgICAgICAgICBp
ZiAodGFzay0+ZmlyZWQoKSkgewotICAgICAgICAgICAgICAgIC8vIFJlc2NoZWR1bGUgYmVjYXVz
ZSB0aGUgdGltZXIgcmVxdWlyZXMgcmVwZWF0aW5nLgotICAgICAgICAgICAgICAgIC8vIFNpbmNl
IHdlIHdpbGwgcXVlcnkgdGhlIHRpbWVycycgdGltZSBwb2ludHMgYmVmb3JlIHNsZWVwaW5nLAot
ICAgICAgICAgICAgICAgIC8vIHdlIGRvIG5vdCBjYWxsIHdha2VVcCgpIGhlcmUuCi0gICAgICAg
ICAgICAgICAgc2NoZWR1bGUoKnRhc2spOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIHBlcmZvcm1Xb3JrKCk7Ci0gICAgfQotfQotCi12b2lkIFJ1bkxvb3A6OnJ1bigpCi17Ci0g
ICAgUnVuTG9vcDo6Y3VycmVudCgpLnJ1bkltcGwoUnVuTW9kZTo6RHJhaW4pOwotfQotCi12b2lk
IFJ1bkxvb3A6Oml0ZXJhdGUoKQotewotICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS5ydW5JbXBsKFJ1
bk1vZGU6Okl0ZXJhdGUpOwotfQotCi0vLyBSdW5Mb29wIG9wZXJhdGlvbnMgYXJlIHRocmVhZC1z
YWZlLiBUaGVzZSBvcGVyYXRpb25zIGNhbiBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIHRoZSBS
dW5Mb29wJ3MgdGhyZWFkLgotLy8gRm9yIGV4YW1wbGUsIFdvcmtRdWV1ZTo6e2Rpc3BhdGNoLCBk
aXNwYXRjaEFmdGVyfSBjYWxsIHRoZSBvcGVyYXRpb25zIG9mIHRoZSBXb3JrUXVldWUgdGhyZWFk
J3MgUnVuTG9vcAotLy8gZnJvbSB0aGUgY2FsbGVyJ3MgdGhyZWFkLgotCi12b2lkIFJ1bkxvb3A6
OnN0b3AoKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9vcExvY2spOwotICAgIGlmICht
X21haW5Mb29wcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0YXR1cyogc3Rh
dHVzID0gbV9tYWluTG9vcHMubGFzdCgpOwotICAgIGlmICgqc3RhdHVzICE9IFN0YXR1czo6U3Rv
cHBpbmcpIHsKLSAgICAgICAgKnN0YXR1cyA9IFN0YXR1czo6U3RvcHBpbmc7Ci0gICAgICAgIG1f
cmVhZHlUb1J1bi5ub3RpZnlPbmUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUnVuTG9vcDo6d2FrZVVw
KGNvbnN0IEFic3RyYWN0TG9ja2VyJikKLXsKLSAgICBtX3BlbmRpbmdUYXNrcyA9IHRydWU7Ci0g
ICAgbV9yZWFkeVRvUnVuLm5vdGlmeU9uZSgpOwotfQotCi12b2lkIFJ1bkxvb3A6Ondha2VVcCgp
Ci17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb29wTG9jayk7Ci0gICAgd2FrZVVwKGxvY2tl
cik7Ci19Ci0KLXZvaWQgUnVuTG9vcDo6c2NoZWR1bGUoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBS
ZWY8VGltZXJCYXNlOjpTY2hlZHVsZWRUYXNrPiYmIHRhc2spCi17Ci0gICAgbV9zY2hlZHVsZXMu
YXBwZW5kKHRhc2sucHRyKCkpOwotICAgIHN0ZDo6cHVzaF9oZWFwKG1fc2NoZWR1bGVzLmJlZ2lu
KCksIG1fc2NoZWR1bGVzLmVuZCgpLCBUaW1lckJhc2U6OlNjaGVkdWxlZFRhc2s6OkVhcmxpZXN0
U2NoZWR1bGUoKSk7Ci19Ci0KLXZvaWQgUnVuTG9vcDo6c2NoZWR1bGUoUmVmPFRpbWVyQmFzZTo6
U2NoZWR1bGVkVGFzaz4mJiB0YXNrKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9vcExv
Y2spOwotICAgIHNjaGVkdWxlKGxvY2tlciwgV1RGTW92ZSh0YXNrKSk7Ci19Ci0KLXZvaWQgUnVu
TG9vcDo6c2NoZWR1bGVBbmRXYWtlVXAoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgUmVm
PFRpbWVyQmFzZTo6U2NoZWR1bGVkVGFzaz4mJiB0YXNrKQotewotICAgIHNjaGVkdWxlKGxvY2tl
ciwgV1RGTW92ZSh0YXNrKSk7Ci0gICAgd2FrZVVwKGxvY2tlcik7Ci19Ci0KLXZvaWQgUnVuTG9v
cDo6ZGlzcGF0Y2hBZnRlcihTZWNvbmRzIGRlbGF5LCBGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rp
b24pCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb29wTG9jayk7Ci0gICAgYm9vbCByZXBl
YXRpbmcgPSBmYWxzZTsKLSAgICBzY2hlZHVsZShsb2NrZXIsIFRpbWVyQmFzZTo6U2NoZWR1bGVk
VGFzazo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24pLCBkZWxheSwgcmVwZWF0aW5nKSk7Ci0gICAg
d2FrZVVwKGxvY2tlcik7Ci19Ci0KLS8vIFNpbmNlIFJ1bkxvb3AgZG9lcyBub3Qgb3duIHRoZSBy
ZWdpc3RlcmVkIFRpbWVyQmFzZSwKLS8vIFRpbWVyQmFzZSBhbmQgaXRzIG93bmVyIHNob3VsZCBt
YW5hZ2UgdGhlc2UgbGlmZXRpbWUuCi1SdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZShSdW5M
b29wJiBydW5Mb29wKQotICAgIDogbV9ydW5Mb29wKHJ1bkxvb3ApCi0gICAgLCBtX3NjaGVkdWxl
ZFRhc2sobnVsbHB0cikKLXsKLX0KLQotUnVuTG9vcDo6VGltZXJCYXNlOjp+VGltZXJCYXNlKCkK
LXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3J1bkxvb3AtPm1fbG9vcExvY2spOwotICAgIHN0
b3AobG9ja2VyKTsKLX0KLQotdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0YXJ0KGRvdWJsZSBp
bnRlcnZhbCwgYm9vbCByZXBlYXRpbmcpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9ydW5M
b29wLT5tX2xvb3BMb2NrKTsKLSAgICBzdG9wKGxvY2tlcik7Ci0gICAgbV9zY2hlZHVsZWRUYXNr
ID0gU2NoZWR1bGVkVGFzazo6Y3JlYXRlKFt0aGlzXSB7Ci0gICAgICAgIGZpcmVkKCk7Ci0gICAg
fSwgU2Vjb25kcyhpbnRlcnZhbCksIHJlcGVhdGluZyk7Ci0gICAgbV9ydW5Mb29wLT5zY2hlZHVs
ZUFuZFdha2VVcChsb2NrZXIsICptX3NjaGVkdWxlZFRhc2spOwotfQotCi12b2lkIFJ1bkxvb3A6
OlRpbWVyQmFzZTo6c3RvcChjb25zdCBBYnN0cmFjdExvY2tlciYpCi17Ci0gICAgaWYgKG1fc2No
ZWR1bGVkVGFzaykgewotICAgICAgICBtX3NjaGVkdWxlZFRhc2stPmRlYWN0aXZhdGUoKTsKLSAg
ICAgICAgbV9zY2hlZHVsZWRUYXNrID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLXZvaWQgUnVuTG9v
cDo6VGltZXJCYXNlOjpzdG9wKCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3J1bkxvb3At
Pm1fbG9vcExvY2spOwotICAgIHN0b3AobG9ja2VyKTsKLX0KLQotYm9vbCBSdW5Mb29wOjpUaW1l
ckJhc2U6OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3J1bkxv
b3AtPm1fbG9vcExvY2spOwotICAgIHJldHVybiBpc0FjdGl2ZShsb2NrZXIpOwotfQotCi1ib29s
IFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25z
dAotewotICAgIHJldHVybiBtX3NjaGVkdWxlZFRhc2s7Ci19Ci0KLVNlY29uZHMgUnVuTG9vcDo6
VGltZXJCYXNlOjpzZWNvbmRzVW50aWxGaXJlKCkgY29uc3QKLXsKLSAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX3J1bkxvb3AtPm1fbG9vcExvY2spOwotICAgIGlmIChpc0FjdGl2ZShsb2NrZXIpKQot
ICAgICAgICByZXR1cm4gc3RkOjptYXg8U2Vjb25kcz4obV9zY2hlZHVsZWRUYXNrLT5zY2hlZHVs
ZWRUaW1lUG9pbnQoKSAtIE1vbm90b25pY1RpbWU6Om5vdygpLCAwX3MpOwotICAgIHJldHVybiAw
X3M7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oIGIvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlYjU0ODI4YTI4ZWFkYTQwOTc0NWM4MWRlZDM3MWRiMjY2MmZiNTc2Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaAorKysgL2Rldi9udWxs
CkBAIC0xLDE5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIEFTQ0lJ
RmFzdFBhdGhfaAotI2RlZmluZSBBU0NJSUZhc3RQYXRoX2gKLQotI2luY2x1ZGUgPHN0ZGludC5o
PgotI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+Ci0KLSNpZiBDUFUoWDg2X1NTRTIpCi0j
aW5jbHVkZSA8ZW1taW50cmluLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBs
YXRlIDx1aW50cHRyX3QgbWFzaz4KLWlubGluZSBib29sIGlzQWxpZ25lZFRvKGNvbnN0IHZvaWQq
IHBvaW50ZXIpCi17Ci0gICAgcmV0dXJuICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBv
aW50ZXIpICYgbWFzayk7Ci19Ci0KLS8vIEFzc3VtaW5nIHRoYXQgYSBwb2ludGVyIGlzIHRoZSBz
aXplIG9mIGEgIm1hY2hpbmUgd29yZCIsIHRoZW4KLS8vIHVpbnRwdHJfdCBpcyBhbiBpbnRlZ2Vy
IHR5cGUgdGhhdCBpcyBhbHNvIGEgbWFjaGluZSB3b3JkLgotdHlwZWRlZiB1aW50cHRyX3QgTWFj
aGluZVdvcmQ7Ci1jb25zdCB1aW50cHRyX3QgbWFjaGluZVdvcmRBbGlnbm1lbnRNYXNrID0gc2l6
ZW9mKE1hY2hpbmVXb3JkKSAtIDE7Ci0KLWlubGluZSBib29sIGlzQWxpZ25lZFRvTWFjaGluZVdv
cmQoY29uc3Qgdm9pZCogcG9pbnRlcikKLXsKLSAgICByZXR1cm4gaXNBbGlnbmVkVG88bWFjaGlu
ZVdvcmRBbGlnbm1lbnRNYXNrPihwb2ludGVyKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIFQqIGFsaWduVG9NYWNoaW5lV29yZChUKiBwb2ludGVyKQotewotICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcikg
JiB+bWFjaGluZVdvcmRBbGlnbm1lbnRNYXNrKTsKLX0KLQotdGVtcGxhdGU8c2l6ZV90IHNpemUs
IHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0cnVjdCBOb25BU0NJSU1hc2s7Ci10ZW1wbGF0ZTw+
IHN0cnVjdCBOb25BU0NJSU1hc2s8NCwgVUNoYXI+IHsKLSAgICBzdGF0aWMgaW5saW5lIHVpbnQz
Ml90IHZhbHVlKCkgeyByZXR1cm4gMHhGRjgwRkY4MFU7IH0KLX07Ci10ZW1wbGF0ZTw+IHN0cnVj
dCBOb25BU0NJSU1hc2s8NCwgTENoYXI+IHsKLSAgICBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHZh
bHVlKCkgeyByZXR1cm4gMHg4MDgwODA4MFU7IH0KLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBOb25B
U0NJSU1hc2s8OCwgVUNoYXI+IHsKLSAgICBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHZhbHVlKCkg
eyByZXR1cm4gMHhGRjgwRkY4MEZGODBGRjgwVUxMOyB9Ci19OwotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Tm9uQVNDSUlNYXNrPDgsIExDaGFyPiB7Ci0gICAgc3RhdGljIGlubGluZSB1aW50NjRfdCB2YWx1
ZSgpIHsgcmV0dXJuIDB4ODA4MDgwODA4MDgwODA4MFVMTDsgfQotfTsKLQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgaXNBbGxBU0NJSShNYWNoaW5lV29y
ZCB3b3JkKQotewotICAgIHJldHVybiAhKHdvcmQgJiBOb25BU0NJSU1hc2s8c2l6ZW9mKE1hY2hp
bmVXb3JkKSwgQ2hhcmFjdGVyVHlwZT46OnZhbHVlKCkpOwotfQotCi0vLyBOb3RlOiBUaGlzIGZ1
bmN0aW9uIGFzc3VtZSB0aGUgaW5wdXQgaXMgbGlrZWx5IGFsbCBBU0NJSSwgYW5kCi0vLyBkb2Vz
IG5vdCBsZWF2ZSBlYXJseSBpZiBpdCBpcyBub3QgdGhlIGNhc2UuCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNvbnN0
IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgTWFjaGlu
ZVdvcmQgYWxsQ2hhckJpdHMgPSAwOwotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCA9IGNo
YXJhY3RlcnMgKyBsZW5ndGg7Ci0KLSAgICAvLyBQcm9sb2d1ZTogYWxpZ24gdGhlIGlucHV0Lgot
ICAgIHdoaWxlICghaXNBbGlnbmVkVG9NYWNoaW5lV29yZChjaGFyYWN0ZXJzKSAmJiBjaGFyYWN0
ZXJzICE9IGVuZCkgewotICAgICAgICBhbGxDaGFyQml0cyB8PSAqY2hhcmFjdGVyczsKLSAgICAg
ICAgKytjaGFyYWN0ZXJzOwotICAgIH0KLQotICAgIC8vIENvbXBhcmUgdGhlIHZhbHVlcyBvZiBD
UFUgd29yZCBzaXplLgotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHdvcmRFbmQgPSBhbGlnblRv
TWFjaGluZVdvcmQoZW5kKTsKLSAgICBjb25zdCBzaXplX3QgbG9vcEluY3JlbWVudCA9IHNpemVv
ZihNYWNoaW5lV29yZCkgLyBzaXplb2YoQ2hhcmFjdGVyVHlwZSk7Ci0gICAgd2hpbGUgKGNoYXJh
Y3RlcnMgPCB3b3JkRW5kKSB7Ci0gICAgICAgIGFsbENoYXJCaXRzIHw9ICoocmVpbnRlcnByZXRf
Y2FzdF9wdHI8Y29uc3QgTWFjaGluZVdvcmQqPihjaGFyYWN0ZXJzKSk7Ci0gICAgICAgIGNoYXJh
Y3RlcnMgKz0gbG9vcEluY3JlbWVudDsKLSAgICB9Ci0KLSAgICAvLyBQcm9jZXNzIHRoZSByZW1h
aW5pbmcgYnl0ZXMuCi0gICAgd2hpbGUgKGNoYXJhY3RlcnMgIT0gZW5kKSB7Ci0gICAgICAgIGFs
bENoYXJCaXRzIHw9ICpjaGFyYWN0ZXJzOwotICAgICAgICArK2NoYXJhY3RlcnM7Ci0gICAgfQot
Ci0gICAgTWFjaGluZVdvcmQgbm9uQVNDSUlCaXRNYXNrID0gTm9uQVNDSUlNYXNrPHNpemVvZihN
YWNoaW5lV29yZCksIENoYXJhY3RlclR5cGU+Ojp2YWx1ZSgpOwotICAgIHJldHVybiAhKGFsbENo
YXJCaXRzICYgbm9uQVNDSUlCaXRNYXNrKTsKLX0KLQotaW5saW5lIHZvaWQgY29weUxDaGFyc0Zy
b21VQ2hhclNvdXJjZShMQ2hhciogZGVzdGluYXRpb24sIGNvbnN0IFVDaGFyKiBzb3VyY2UsIHNp
emVfdCBsZW5ndGgpCi17Ci0jaWYgQ1BVKFg4Nl9TU0UyKQotICAgIGNvbnN0IHVpbnRwdHJfdCBt
ZW1vcnlBY2Nlc3NTaXplID0gMTY7IC8vIE1lbW9yeSBhY2Nlc3NlcyBvbiAxNiBieXRlICgxMjgg
Yml0KSBhbGlnbm1lbnQKLSAgICBjb25zdCB1aW50cHRyX3QgbWVtb3J5QWNjZXNzTWFzayA9IG1l
bW9yeUFjY2Vzc1NpemUgLSAxOwotCi0gICAgc2l6ZV90IGkgPSAwOwotICAgIGZvciAoO2kgPCBs
ZW5ndGggJiYgIWlzQWxpZ25lZFRvPG1lbW9yeUFjY2Vzc01hc2s+KCZzb3VyY2VbaV0pOyArK2kp
IHsKLSAgICAgICAgQVNTRVJUKCEoc291cmNlW2ldICYgMHhmZjAwKSk7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uW2ldID0gc3RhdGljX2Nhc3Q8TENoYXI+KHNvdXJjZVtpXSk7Ci0gICAgfQotCi0gICAg
Y29uc3QgdWludHB0cl90IHNvdXJjZUxvYWRTaXplID0gMzI7IC8vIFByb2Nlc3MgMzIgYnl0ZXMg
KDE2IFVDaGFycykgZWFjaCBpdGVyYXRpb24KLSAgICBjb25zdCBzaXplX3QgdWNoYXJzUGVyTG9v
cCA9IHNvdXJjZUxvYWRTaXplIC8gc2l6ZW9mKFVDaGFyKTsKLSAgICBpZiAobGVuZ3RoID4gdWNo
YXJzUGVyTG9vcCkgewotICAgICAgICBjb25zdCBzaXplX3QgZW5kTGVuZ3RoID0gbGVuZ3RoIC0g
dWNoYXJzUGVyTG9vcCArIDE7Ci0gICAgICAgIGZvciAoOyBpIDwgZW5kTGVuZ3RoOyBpICs9IHVj
aGFyc1Blckxvb3ApIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGNoZWNrSW5kZXggPSAwOyBjaGVja0luZGV4IDwgdWNoYXJzUGVyTG9vcDsgKytjaGVja0luZGV4
KQotICAgICAgICAgICAgICAgIEFTU0VSVCghKHNvdXJjZVtpK2NoZWNrSW5kZXhdICYgMHhmZjAw
KSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIF9fbTEyOGkgZmlyc3Q4VUNoYXJzID0gX21tX2xvYWRf
c2kxMjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4oJnNvdXJjZVtpXSkpOwotICAg
ICAgICAgICAgX19tMTI4aSBzZWNvbmQ4VUNoYXJzID0gX21tX2xvYWRfc2kxMjgocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBfX20xMjhpKj4oJnNvdXJjZVtpKzhdKSk7Ci0gICAgICAgICAgICBfX20x
MjhpIHBhY2tlZENoYXJzID0gX21tX3BhY2t1c19lcGkxNihmaXJzdDhVQ2hhcnMsIHNlY29uZDhV
Q2hhcnMpOwotICAgICAgICAgICAgX21tX3N0b3JldV9zaTEyOChyZWludGVycHJldF9jYXN0PF9f
bTEyOGkqPigmZGVzdGluYXRpb25baV0pLCBwYWNrZWRDaGFycyk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEFTU0VSVCghKHNvdXJj
ZVtpXSAmIDB4ZmYwMCkpOwotICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHN0YXRpY19jYXN0PExD
aGFyPihzb3VyY2VbaV0pOwotICAgIH0KLSNlbGlmIENPTVBJTEVSKEdDQ19PUl9DTEFORykgJiYg
Q1BVKEFSTTY0KSAmJiBkZWZpbmVkKE5ERUJVRykKLSAgICBjb25zdCBMQ2hhciogY29uc3QgZW5k
ID0gZGVzdGluYXRpb24gKyBsZW5ndGg7Ci0gICAgY29uc3QgdWludHB0cl90IG1lbW9yeUFjY2Vz
c1NpemUgPSAxNjsKLQotICAgIGlmIChsZW5ndGggPj0gbWVtb3J5QWNjZXNzU2l6ZSkgewotICAg
ICAgICBjb25zdCB1aW50cHRyX3QgbWVtb3J5QWNjZXNzTWFzayA9IG1lbW9yeUFjY2Vzc1NpemUg
LSAxOwotCi0gICAgICAgIC8vIFZlY3RvciBpbnRlcmxlYXZlZCB1bnBhY2ssIHdlIG9ubHkgc3Rv
cmUgdGhlIGxvd2VyIDggYml0cy4KLSAgICAgICAgY29uc3QgdWludHB0cl90IGxlbmd0aExlZnQg
PSBlbmQgLSBkZXN0aW5hdGlvbjsKLSAgICAgICAgY29uc3QgTENoYXIqIGNvbnN0IHNpbWRFbmQg
PSBkZXN0aW5hdGlvbiArIChsZW5ndGhMZWZ0ICYgfm1lbW9yeUFjY2Vzc01hc2spOwotICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICBhc20oImxkMiAgIHsgdjAuMTZCLCB2MS4xNkIgfSwgWyVbU09V
UkNFXV0sICMzMlxuXHQiCi0gICAgICAgICAgICAgICAgInN0MSAgIHsgdjAuMTZCIH0sIFslW0RF
U1RJTkFUSU9OXV0sICMxNlxuXHQiCi0gICAgICAgICAgICAgICAgOiBbU09VUkNFXSIrciIgKHNv
dXJjZSksIFtERVNUSU5BVElPTl0iK3IiIChkZXN0aW5hdGlvbikKLSAgICAgICAgICAgICAgICA6
Ci0gICAgICAgICAgICAgICAgOiAibWVtb3J5IiwgInYwIiwgInYxIik7Ci0gICAgICAgIH0gd2hp
bGUgKGRlc3RpbmF0aW9uICE9IHNpbWRFbmQpOwotICAgIH0KLQotICAgIHdoaWxlIChkZXN0aW5h
dGlvbiAhPSBlbmQpCi0gICAgICAgICpkZXN0aW5hdGlvbisrID0gc3RhdGljX2Nhc3Q8TENoYXI+
KCpzb3VyY2UrKyk7Ci0jZWxpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpICYmIENQVShBUk1fTkVP
TikgJiYgIShDUFUoQklHX0VORElBTikgfHwgQ1BVKE1JRERMRV9FTkRJQU4pKSAmJiBkZWZpbmVk
KE5ERUJVRykKLSAgICBjb25zdCBMQ2hhciogY29uc3QgZW5kID0gZGVzdGluYXRpb24gKyBsZW5n
dGg7Ci0gICAgY29uc3QgdWludHB0cl90IG1lbW9yeUFjY2Vzc1NpemUgPSA4OwotCi0gICAgaWYg
KGxlbmd0aCA+PSAoMiAqIG1lbW9yeUFjY2Vzc1NpemUpIC0gMSkgewotICAgICAgICAvLyBQcmVm
aXg6IGFsaWduIGRzdCBvbiA2NCBiaXRzLgotICAgICAgICBjb25zdCB1aW50cHRyX3QgbWVtb3J5
QWNjZXNzTWFzayA9IG1lbW9yeUFjY2Vzc1NpemUgLSAxOwotICAgICAgICB3aGlsZSAoIWlzQWxp
Z25lZFRvPG1lbW9yeUFjY2Vzc01hc2s+KGRlc3RpbmF0aW9uKSkKLSAgICAgICAgICAgICpkZXN0
aW5hdGlvbisrID0gc3RhdGljX2Nhc3Q8TENoYXI+KCpzb3VyY2UrKyk7Ci0KLSAgICAgICAgLy8g
VmVjdG9yIGludGVybGVhdmVkIHVucGFjaywgd2Ugb25seSBzdG9yZSB0aGUgbG93ZXIgOCBiaXRz
LgotICAgICAgICBjb25zdCB1aW50cHRyX3QgbGVuZ3RoTGVmdCA9IGVuZCAtIGRlc3RpbmF0aW9u
OwotICAgICAgICBjb25zdCBMQ2hhciogY29uc3Qgc2ltZEVuZCA9IGVuZCAtIChsZW5ndGhMZWZ0
ICUgbWVtb3J5QWNjZXNzU2l6ZSk7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGFzbSgidmxk
Mi44ICAgeyBkMC1kMSB9LCBbJVtTT1VSQ0VdXSAhXG5cdCIKLSAgICAgICAgICAgICAgICAidnN0
MS44ICAgeyBkMCB9LCBbJVtERVNUSU5BVElPTl0sOjY0XSAhXG5cdCIKLSAgICAgICAgICAgICAg
ICA6IFtTT1VSQ0VdIityIiAoc291cmNlKSwgW0RFU1RJTkFUSU9OXSIrciIgKGRlc3RpbmF0aW9u
KQotICAgICAgICAgICAgICAgIDoKLSAgICAgICAgICAgICAgICA6ICJtZW1vcnkiLCAiZDAiLCAi
ZDEiKTsKLSAgICAgICAgfSB3aGlsZSAoZGVzdGluYXRpb24gIT0gc2ltZEVuZCk7Ci0gICAgfQot
Ci0gICAgd2hpbGUgKGRlc3RpbmF0aW9uICE9IGVuZCkKLSAgICAgICAgKmRlc3RpbmF0aW9uKysg
PSBzdGF0aWNfY2FzdDxMQ2hhcj4oKnNvdXJjZSsrKTsKLSNlbHNlCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBBU1NFUlQoIShzb3VyY2VbaV0gJiAw
eGZmMDApKTsKLSAgICAgICAgZGVzdGluYXRpb25baV0gPSBzdGF0aWNfY2FzdDxMQ2hhcj4oc291
cmNlW2ldKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRp
ZiAvLyBBU0NJSUZhc3RQYXRoX2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5NTAyM2UyOGFlNjFlYTNjOTY5NTIwMDAzMWFlYzE1OTU1OGNjOTdlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0
ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLQotI2luY2x1ZGUgIkludGVnZXJUb1N0cmluZ0Nv
bnZlcnNpb24uaCIKLSNpbmNsdWRlIDx3dGYvZHRvYS5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTxBdG9taWNTdHJpbmc6OkNhc2VD
b252ZXJ0VHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBBdG9taWNTdHJpbmcgQXRvbWljU3RyaW5n
Ojpjb252ZXJ0QVNDSUlDYXNlKCkgY29uc3QKLXsKLSAgICBTdHJpbmdJbXBsKiBpbXBsID0gdGhp
cy0+aW1wbCgpOwotICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCi0gICAgICAgIHJldHVybiBudWxs
QXRvbSgpOwotCi0gICAgLy8gQ29udmVydCBzaG9ydCBzdHJpbmdzIHdpdGhvdXQgYWxsb2NhdGlu
ZyBhIG5ldyBTdHJpbmdJbXBsLCBzaW5jZQotICAgIC8vIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0
aGVzZSBzdHJpbmdzIGFyZSBhbHJlYWR5IGluIHRoZSBhdG9taWMKLSAgICAvLyBzdHJpbmcgdGFi
bGUgYW5kIHNvIG5vIG1lbW9yeSBhbGxvY2F0aW9uIHdpbGwgYmUgcmVxdWlyZWQuCi0gICAgdW5z
aWduZWQgbGVuZ3RoOwotICAgIGNvbnN0IHVuc2lnbmVkIGxvY2FsQnVmZmVyU2l6ZSA9IDEwMDsK
LSAgICBpZiAoaW1wbC0+aXM4Qml0KCkgJiYgKGxlbmd0aCA9IGltcGwtPmxlbmd0aCgpKSA8PSBs
b2NhbEJ1ZmZlclNpemUpIHsKLSAgICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMgPSBpbXBs
LT5jaGFyYWN0ZXJzOCgpOwotICAgICAgICB1bnNpZ25lZCBmYWlsaW5nSW5kZXg7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYg
KHR5cGUgPT0gQ2FzZUNvbnZlcnRUeXBlOjpMb3dlciA/IFVOTElLRUxZKGlzQVNDSUlVcHBlcihj
aGFyYWN0ZXJzW2ldKSkgOiBMSUtFTFkoaXNBU0NJSUxvd2VyKGNoYXJhY3RlcnNbaV0pKSkgewot
ICAgICAgICAgICAgICAgIGZhaWxpbmdJbmRleCA9IGk7Ci0gICAgICAgICAgICAgICAgZ290byBT
bG93UGF0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7
Ci1TbG93UGF0aDoKLSAgICAgICAgTENoYXIgbG9jYWxCdWZmZXJbbG9jYWxCdWZmZXJTaXplXTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhaWxpbmdJbmRleDsgKytpKQotICAg
ICAgICAgICAgbG9jYWxCdWZmZXJbaV0gPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBmYWlsaW5nSW5kZXg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGxv
Y2FsQnVmZmVyW2ldID0gdHlwZSA9PSBDYXNlQ29udmVydFR5cGU6Okxvd2VyID8gdG9BU0NJSUxv
d2VyKGNoYXJhY3RlcnNbaV0pIDogdG9BU0NJSVVwcGVyKGNoYXJhY3RlcnNbaV0pOwotICAgICAg
ICByZXR1cm4gQXRvbWljU3RyaW5nKGxvY2FsQnVmZmVyLCBsZW5ndGgpOwotICAgIH0KLQotICAg
IFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0ZWRTdHJpbmcgPSB0eXBlID09IENhc2VDb252ZXJ0VHlw
ZTo6TG93ZXIgPyBpbXBsLT5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpIDogaW1wbC0+Y29udmVy
dFRvQVNDSUlVcHBlcmNhc2UoKTsKLSAgICBpZiAoTElLRUxZKGNvbnZlcnRlZFN0cmluZy5wdHIo
KSA9PSBpbXBsKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgQXRvbWljU3RyaW5nIHJl
c3VsdDsKLSAgICByZXN1bHQubV9zdHJpbmcgPSBBdG9taWNTdHJpbmdJbXBsOjphZGQoY29udmVy
dGVkU3RyaW5nLnB0cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1BdG9taWNTdHJpbmcg
QXRvbWljU3RyaW5nOjpjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGNvbnZlcnRBU0NJSUNhc2U8Q2FzZUNvbnZlcnRUeXBlOjpMb3dlcj4oKTsKLX0KLQotQXRv
bWljU3RyaW5nIEF0b21pY1N0cmluZzo6Y29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSBjb25zdAot
ewotICAgIHJldHVybiBjb252ZXJ0QVNDSUlDYXNlPENhc2VDb252ZXJ0VHlwZTo6VXBwZXI+KCk7
Ci19Ci0KLUF0b21pY1N0cmluZyBBdG9taWNTdHJpbmc6Om51bWJlcihpbnQgbnVtYmVyKQotewot
ICAgIHJldHVybiBudW1iZXJUb1N0cmluZ1NpZ25lZDxBdG9taWNTdHJpbmc+KG51bWJlcik7Ci19
Ci0KLUF0b21pY1N0cmluZyBBdG9taWNTdHJpbmc6Om51bWJlcih1bnNpZ25lZCBudW1iZXIpCi17
Ci0gICAgcmV0dXJuIG51bWJlclRvU3RyaW5nVW5zaWduZWQ8QXRvbWljU3RyaW5nPihudW1iZXIp
OwotfQotCi1BdG9taWNTdHJpbmcgQXRvbWljU3RyaW5nOjpudW1iZXIodW5zaWduZWQgbG9uZyBu
dW1iZXIpCi17Ci0gICAgcmV0dXJuIG51bWJlclRvU3RyaW5nVW5zaWduZWQ8QXRvbWljU3RyaW5n
PihudW1iZXIpOwotfQotCi1BdG9taWNTdHJpbmcgQXRvbWljU3RyaW5nOjpudW1iZXIodW5zaWdu
ZWQgbG9uZyBsb25nIG51bWJlcikKLXsKLSAgICByZXR1cm4gbnVtYmVyVG9TdHJpbmdVbnNpZ25l
ZDxBdG9taWNTdHJpbmc+KG51bWJlcik7Ci19Ci0KLUF0b21pY1N0cmluZyBBdG9taWNTdHJpbmc6
Om51bWJlcihkb3VibGUgbnVtYmVyKQotewotICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZl
cjsKLSAgICByZXR1cm4gU3RyaW5nKG51bWJlclRvRml4ZWRQcmVjaXNpb25TdHJpbmcobnVtYmVy
LCA2LCBidWZmZXIsIHRydWUpKTsKLX0KLQotQXRvbWljU3RyaW5nIEF0b21pY1N0cmluZzo6ZnJv
bVVURjhJbnRlcm5hbChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzU3RhcnQsIGNvbnN0IGNoYXIqIGNo
YXJhY3RlcnNFbmQpCi17Ci0gICAgYXV0byBpbXBsID0gQXRvbWljU3RyaW5nSW1wbDo6YWRkVVRG
OChjaGFyYWN0ZXJzU3RhcnQsIGNoYXJhY3RlcnNFbmQpOwotICAgIGlmICghaW1wbCkKLSAgICAg
ICAgcmV0dXJuIG51bGxBdG9tKCk7Ci0gICAgcmV0dXJuIGltcGwuZ2V0KCk7Ci19Ci0KLSNpZm5k
ZWYgTkRFQlVHCi12b2lkIEF0b21pY1N0cmluZzo6c2hvdygpIGNvbnN0Ci17Ci0gICAgbV9zdHJp
bmcuc2hvdygpOwotfQotI2VuZGlmCi0KLVdURl9FWFBPUlREQVRBIExhenlOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IG51bGxBdG9tRGF0YTsKLVdURl9FWFBPUlREQVRBIExhenlOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IGVtcHR5QXRvbURhdGE7Ci1XVEZfRVhQT1JUREFUQSBMYXp5
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBzdGFyQXRvbURhdGE7Ci1XVEZfRVhQT1JUREFU
QSBMYXp5TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB4bWxBdG9tRGF0YTsKLVdURl9FWFBP
UlREQVRBIExhenlOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHhtbG5zQXRvbURhdGE7Ci0K
LXZvaWQgQXRvbWljU3RyaW5nOjppbml0KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
aW5pdGlhbGl6ZUtleTsKLSAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplS2V5LCBbXSB7Ci0g
ICAgICAgIC8vIEluaXRpYWxpemF0aW9uIGlzIG5vdCB0aHJlYWQgc2FmZSwgc28gdGhpcyBmdW5j
dGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZCBmaXJzdC4KLSAgICAgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7Ci0KLSAgICAgICAgbnVsbEF0b21EYXRhLmNvbnN0cnVjdCgp
OwotICAgICAgICBlbXB0eUF0b21EYXRhLmNvbnN0cnVjdCgiIik7Ci0gICAgICAgIHN0YXJBdG9t
RGF0YS5jb25zdHJ1Y3QoIioiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICAgICAgeG1sQXRvbURhdGEuY29uc3RydWN0KCJ4bWwiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgeG1sbnNBdG9tRGF0YS5jb25zdHJ1Y3QoInhtbG5z
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgfSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL3RleHQvQXRvbWljU3RyaW5nLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvdGV4dC9BdG9taWNTdHJpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MWZiZWI1YmRjZTk2ZjFhNjUyNDMxNzg5OTk2YjFlZjFlNjA3NGNkNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvdGV4dC9BdG9taWNTdHJpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIDIwMDgsIDIwMTQtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIEF0b21pY1N0cmluZ19oCi0j
ZGVmaW5lIEF0b21pY1N0cmluZ19oCi0KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLS8vIERlZmluZSAnTk9fSU1QTElDSVRfQVRP
TUlDU1RSSU5HJyBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgaGVhZGVyLAotLy8gdG8gZGlzYWxsb3cg
KGV4cGVuc2l2ZSkgaW1wbGljaXQgU3RyaW5nLS0+QXRvbWljU3RyaW5nIGNvbnZlcnNpb25zLgot
I2lmZGVmIE5PX0lNUExJQ0lUX0FUT01JQ1NUUklORwotI2RlZmluZSBBVE9NSUNTVFJJTkdfQ09O
VkVSU0lPTiBleHBsaWNpdAotI2Vsc2UKLSNkZWZpbmUgQVRPTUlDU1RSSU5HX0NPTlZFUlNJT04K
LSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotc3RydWN0IEF0b21pY1N0cmluZ0hhc2g7Ci0K
LWNsYXNzIEF0b21pY1N0cmluZyB7Ci1wdWJsaWM6Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGluaXQoKTsKLQotICAgIEF0b21pY1N0cmluZygpOwotICAgIEF0b21pY1N0cmlu
Zyhjb25zdCBMQ2hhciopOwotICAgIEF0b21pY1N0cmluZyhjb25zdCBjaGFyKik7Ci0gICAgQXRv
bWljU3RyaW5nKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBBdG9taWNTdHJp
bmcoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIEF0b21pY1N0cmluZyhjb25z
dCBVQ2hhciopOwotCi0gICAgdGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIGV4
cGxpY2l0IEF0b21pY1N0cmluZyhjb25zdCBWZWN0b3I8VUNoYXIsIGlubGluZUNhcGFjaXR5PiYg
Y2hhcmFjdGVycykKLSAgICAgICAgOiBtX3N0cmluZyhBdG9taWNTdHJpbmdJbXBsOjphZGQoY2hh
cmFjdGVycy5kYXRhKCksIGNoYXJhY3RlcnMuc2l6ZSgpKSkKLSAgICB7Ci0gICAgfQotCi0gICAg
QXRvbWljU3RyaW5nKEF0b21pY1N0cmluZ0ltcGwqKTsKLSAgICBBdG9taWNTdHJpbmcoUmVmUHRy
PEF0b21pY1N0cmluZ0ltcGw+JiYpOwotICAgIEFUT01JQ1NUUklOR19DT05WRVJTSU9OIEF0b21p
Y1N0cmluZyhTdHJpbmdJbXBsKik7Ci0gICAgQVRPTUlDU1RSSU5HX0NPTlZFUlNJT04gQXRvbWlj
U3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIEF0b21pY1N0cmluZyhTdHJpbmdJbXBsKiBiYXNl
U3RyaW5nLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIEZJWE1F
OiBBdG9taWNTdHJpbmcgZG9lc27igJl0IGFsd2F5cyBoYXZlIEF0b21pY1N0cmluZ0ltcGwsIHNv
IG9uZSBvZiB0aG9zZSB0d28gbmFtZXMgbmVlZHMgdG8gY2hhbmdlLi4KLSAgICBBdG9taWNTdHJp
bmcoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci0KLSAgICBlbnVtIENvbnN0cnVjdEZyb21MaXRl
cmFsVGFnIHsgQ29uc3RydWN0RnJvbUxpdGVyYWwgfTsKLSAgICBBdG9taWNTdHJpbmcoY29uc3Qg
Y2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDb25zdHJ1Y3RGcm9tTGl0ZXJhbFRh
ZykKLSAgICAgICAgOiBtX3N0cmluZyhBdG9taWNTdHJpbmdJbXBsOjphZGRMaXRlcmFsKGNoYXJh
Y3RlcnMsIGxlbmd0aCkpCi0gICAgewotICAgIH0KLQotICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNo
YXJhY3RlckNvdW50PgotICAgIEFMV0FZU19JTkxJTkUgQXRvbWljU3RyaW5nKGNvbnN0IGNoYXIg
KCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0sIENvbnN0cnVjdEZyb21MaXRlcmFsVGFnKQot
ICAgICAgICA6IG1fc3RyaW5nKEF0b21pY1N0cmluZ0ltcGw6OmFkZExpdGVyYWwoY2hhcmFjdGVy
cywgY2hhcmFjdGVyQ291bnQgLSAxKSkKLSAgICB7Ci0gICAgICAgIENPTVBJTEVfQVNTRVJUKGNo
YXJhY3RlckNvdW50ID4gMSwgQXRvbWljU3RyaW5nRnJvbUxpdGVyYWxOb3RFbXB0eSk7Ci0gICAg
ICAgIENPTVBJTEVfQVNTRVJUKChjaGFyYWN0ZXJDb3VudCAtIDEgPD0gKCh1bnNpZ25lZCh+MCkg
LSBzaXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKExDaGFyKSkpLCBBdG9taWNTdHJpbmdGcm9t
TGl0ZXJhbENhbm5vdE92ZXJmbG93KTsKLSAgICB9Ci0KLSAgICAvLyBXZSBoYXZlIHRvIGRlY2xh
cmUgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIGNvcHkgYXNzaWdubWVudCBvcGVyYXRvciBhcyB3
ZWxsLCBvdGhlcndpc2UKLSAgICAvLyB0aGV5J2xsIGJlIGltcGxpY2l0bHkgZGVsZXRlZCBieSBh
ZGRpbmcgdGhlIG1vdmUgY29uc3RydWN0b3IgYW5kIG1vdmUgYXNzaWdubWVudCBvcGVyYXRvci4K
LSAgICBBdG9taWNTdHJpbmcoY29uc3QgQXRvbWljU3RyaW5nJiBvdGhlcikgOiBtX3N0cmluZyhv
dGhlci5tX3N0cmluZykgeyB9Ci0gICAgQXRvbWljU3RyaW5nKEF0b21pY1N0cmluZyYmIG90aGVy
KSA6IG1fc3RyaW5nKFdURk1vdmUob3RoZXIubV9zdHJpbmcpKSB7IH0KLSAgICBBdG9taWNTdHJp
bmcmIG9wZXJhdG9yPShjb25zdCBBdG9taWNTdHJpbmcmIG90aGVyKSB7IG1fc3RyaW5nID0gb3Ro
ZXIubV9zdHJpbmc7IHJldHVybiAqdGhpczsgfQotICAgIEF0b21pY1N0cmluZyYgb3BlcmF0b3I9
KEF0b21pY1N0cmluZyYmIG90aGVyKSB7IG1fc3RyaW5nID0gV1RGTW92ZShvdGhlci5tX3N0cmlu
Zyk7IHJldHVybiAqdGhpczsgfQotCi0gICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywg
d2hpY2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQu
Ci0gICAgQXRvbWljU3RyaW5nKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3N0
cmluZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkgeyB9Ci0gICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCk7IH0KLQotICAgIHVuc2lnbmVkIGV4aXN0aW5nSGFzaCgpIGNvbnN0IHsgcmV0dXJu
IGlzTnVsbCgpID8gMCA6IGltcGwoKS0+ZXhpc3RpbmdIYXNoKCk7IH0KLQotICAgIG9wZXJhdG9y
IGNvbnN0IFN0cmluZyYoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQotICAgIGNvbnN0IFN0
cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH07Ci0KLSAgICBBdG9taWNT
dHJpbmdJbXBsKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWljU3RyaW5n
SW1wbCAqPihtX3N0cmluZy5pbXBsKCkpOyB9Ci0KLSAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaW5nLmlzOEJpdCgpOyB9Ci0gICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuY2hhcmFjdGVyczgoKTsgfQotICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5jaGFyYWN0ZXJzMTYo
KTsgfQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0
aCgpOyB9Ci0KLSAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGludCBpKSBjb25zdCB7IHJl
dHVybiBtX3N0cmluZ1tpXTsgfQotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBB
dG9taWNTdHJpbmcgbnVtYmVyKGludCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRp
YyBBdG9taWNTdHJpbmcgbnVtYmVyKHVuc2lnbmVkKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgc3RhdGljIEF0b21pY1N0cmluZyBudW1iZXIodW5zaWduZWQgbG9uZyk7Ci0gICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBBdG9taWNTdHJpbmcgbnVtYmVyKHVuc2lnbmVkIGxvbmcg
bG9uZyk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBBdG9taWNTdHJpbmcgbnVt
YmVyKGRvdWJsZSk7Ci0gICAgLy8gSWYgd2UgbmVlZCBtb3JlIG92ZXJsb2FkcyBvZiB0aGUgbnVt
YmVyIGZ1bmN0aW9uLCB3ZSBjYW4gYWRkIGFsbCB0aGUgb3RoZXJzIHRoYXQgU3RyaW5nIGhhcywg
YnV0IHRoZXNlIHNlZW0gdG8gZG8gZm9yIG5vdy4KLQotICAgIGJvb2wgY29udGFpbnMoVUNoYXIg
YykgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuY29udGFpbnMoYyk7IH0KLSAgICBib29sIGNvbnRh
aW5zKGNvbnN0IExDaGFyKiBzLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdAotICAg
ICAgICB7IHJldHVybiBtX3N0cmluZy5jb250YWlucyhzLCBjYXNlU2Vuc2l0aXZlKTsgfQotICAg
IGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBzKSBjb25zdAotICAgICAgICB7IHJldHVybiBt
X3N0cmluZy5jb250YWlucyhzKTsgfQotICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBz
LCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1fc3RyaW5nLmNv
bnRhaW5zKHMsIGNhc2VTZW5zaXRpdmUpOyB9Ci0gICAgYm9vbCBjb250YWluc0lnbm9yaW5nQVND
SUlDYXNlKGNvbnN0IFN0cmluZyYgcykgY29uc3QKLSAgICAgICAgeyByZXR1cm4gbV9zdHJpbmcu
Y29udGFpbnNJZ25vcmluZ0FTQ0lJQ2FzZShzKTsgfQotCi0gICAgc2l6ZV90IGZpbmQoVUNoYXIg
YywgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5maW5kKGMsIHN0
YXJ0KTsgfQotICAgIHNpemVfdCBmaW5kKGNvbnN0IExDaGFyKiBzLCB1bnNpZ25lZCBzdGFydCA9
IDAsIGJvb2wgY2FzZVNlbnRpdGl2ZSA9IHRydWUpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1f
c3RyaW5nLmZpbmQocywgc3RhcnQsIGNhc2VTZW50aXRpdmUpOyB9Ci0gICAgc2l6ZV90IGZpbmQo
Y29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFydCA9IDAsIGJvb2wgY2FzZVNlbnRpdGl2ZSA9
IHRydWUpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1fc3RyaW5nLmZpbmQocywgc3RhcnQsIGNh
c2VTZW50aXRpdmUpOyB9Ci0gICAgc2l6ZV90IGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBT
dHJpbmcmIHMpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1fc3RyaW5nLmZpbmRJZ25vcmluZ0FT
Q0lJQ2FzZShzKTsgfQotICAgIHNpemVfdCBmaW5kSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3Ry
aW5nJiBzLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gbV9z
dHJpbmcuZmluZElnbm9yaW5nQVNDSUlDYXNlKHMsIHN0YXJ0T2Zmc2V0KTsgfQotICAgIHNpemVf
dCBmaW5kKENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIgbWF0Y2hGdW5jdGlvbiwgdW5zaWduZWQg
c3RhcnQgPSAwKSBjb25zdAotICAgICAgICB7IHJldHVybiBtX3N0cmluZy5maW5kKG1hdGNoRnVu
Y3Rpb24sIHN0YXJ0KTsgfQotCi0gICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0IFN0cmluZyYgcykg
Y29uc3QKLSAgICAgICAgeyByZXR1cm4gbV9zdHJpbmcuc3RhcnRzV2l0aChzKTsgfQotICAgIGJv
b2wgc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgcykgY29uc3QKLSAg
ICAgICAgeyByZXR1cm4gbV9zdHJpbmcuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHMpOyB9
Ci0gICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0IFN0cmluZyYgcywgYm9vbCBjYXNlU2Vuc2l0aXZl
KSBjb25zdAotICAgICAgICB7IHJldHVybiBtX3N0cmluZy5zdGFydHNXaXRoKHMsIGNhc2VTZW5z
aXRpdmUpOyB9Ci0gICAgYm9vbCBzdGFydHNXaXRoKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKLSAg
ICAgICAgeyByZXR1cm4gbV9zdHJpbmcuc3RhcnRzV2l0aChjaGFyYWN0ZXIpOyB9Ci0gICAgdGVt
cGxhdGU8dW5zaWduZWQgbWF0Y2hMZW5ndGg+Ci0gICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0IGNo
YXIgKCZwcmVmaXgpW21hdGNoTGVuZ3RoXSwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29u
c3QKLSAgICAgICAgeyByZXR1cm4gbV9zdHJpbmcuc3RhcnRzV2l0aDxtYXRjaExlbmd0aD4ocHJl
Zml4LCBjYXNlU2Vuc2l0aXZlKTsgfQotCi0gICAgYm9vbCBlbmRzV2l0aChjb25zdCBTdHJpbmcm
IHMpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1fc3RyaW5nLmVuZHNXaXRoKHMpOyB9Ci0gICAg
Ym9vbCBlbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgcykgY29uc3QKLSAg
ICAgICAgeyByZXR1cm4gbV9zdHJpbmcuZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShzKTsgfQot
ICAgIGJvb2wgZW5kc1dpdGgoY29uc3QgU3RyaW5nJiBzLCBib29sIGNhc2VTZW5zaXRpdmUpIGNv
bnN0Ci0gICAgICAgIHsgcmV0dXJuIG1fc3RyaW5nLmVuZHNXaXRoKHMsIGNhc2VTZW5zaXRpdmUp
OyB9Ci0gICAgYm9vbCBlbmRzV2l0aChVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0Ci0gICAgICAgIHsg
cmV0dXJuIG1fc3RyaW5nLmVuZHNXaXRoKGNoYXJhY3Rlcik7IH0KLSAgICB0ZW1wbGF0ZTx1bnNp
Z25lZCBtYXRjaExlbmd0aD4KLSAgICBib29sIGVuZHNXaXRoKGNvbnN0IGNoYXIgKCZwcmVmaXgp
W21hdGNoTGVuZ3RoXSwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QKLSAgICAgICAg
eyByZXR1cm4gbV9zdHJpbmcuZW5kc1dpdGg8bWF0Y2hMZW5ndGg+KHByZWZpeCwgY2FzZVNlbnNp
dGl2ZSk7IH0KLQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBBdG9taWNTdHJpbmcgY29udmVy
dFRvQVNDSUlMb3dlcmNhc2UoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgQXRv
bWljU3RyaW5nIGNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgY29uc3Q7Ci0KLSAgICBpbnQgdG9J
bnQoYm9vbCogb2sgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy50b0ludChvayk7IH0KLSAg
ICBkb3VibGUgdG9Eb3VibGUoYm9vbCogb2sgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy50
b0RvdWJsZShvayk7IH0KLSAgICBmbG9hdCB0b0Zsb2F0KGJvb2wqIG9rID0gMCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpbmcudG9GbG9hdChvayk7IH0KLSAgICBib29sIHBlcmNlbnRhZ2UoaW50JiBw
KSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5wZXJjZW50YWdlKHApOyB9Ci0KLSAgICBib29sIGlz
TnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9Ci0gICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOyB9Ci0KLSNpZiBVU0UoQ0Yp
Ci0gICAgQXRvbWljU3RyaW5nKENGU3RyaW5nUmVmKTsKLSNlbmRpZgotI2lmZGVmIF9fT0JKQ19f
Ci0gICAgQXRvbWljU3RyaW5nKE5TU3RyaW5nKik7Ci0gICAgb3BlcmF0b3IgTlNTdHJpbmcqKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KLSNlbmRpZgotCi0gICAgLy8gQXRvbWljU3RyaW5n
Ojpmcm9tVVRGOCB3aWxsIHJldHVybiBhIG51bGwgc3RyaW5nIGlmCi0gICAgLy8gdGhlIGlucHV0
IGRhdGEgY29udGFpbnMgaW52YWxpZCBVVEYtOCBzZXF1ZW5jZXMuCi0gICAgc3RhdGljIEF0b21p
Y1N0cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKiwgc2l6ZV90KTsKLSAgICBzdGF0aWMgQXRvbWlj
U3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICB2b2lk
IHNob3coKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIC8vIFRoZSBleHBsaWNpdCBj
b25zdHJ1Y3RvcnMgd2l0aCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsIG11c3Qg
YmUgdXNlZCBmb3IgbGl0ZXJhbHMuCi0gICAgQXRvbWljU3RyaW5nKEFTQ0lJTGl0ZXJhbCk7Ci0K
LSAgICBlbnVtIGNsYXNzIENhc2VDb252ZXJ0VHlwZSB7IFVwcGVyLCBMb3dlciB9OwotICAgIHRl
bXBsYXRlPENhc2VDb252ZXJ0VHlwZT4gQXRvbWljU3RyaW5nIGNvbnZlcnRBU0NJSUNhc2UoKSBj
b25zdDsKLQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgQXRvbWljU3RyaW5nIGZy
b21VVEY4SW50ZXJuYWwoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKLQotICAgIFN0cmluZyBt
X3N0cmluZzsKLX07Ci0KLXN0YXRpY19hc3NlcnQoc2l6ZW9mKEF0b21pY1N0cmluZykgPT0gc2l6
ZW9mKFN0cmluZyksICJBdG9taWNTdHJpbmcgYW5kIFN0cmluZyBtdXN0IGJlIHNhbWUgc2l6ZSEi
KTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0
IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gYS5pbXBsKCkgPT0gYi5pbXBsKCk7IH0KLWJvb2wg
b3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBMQ2hhciopOwotaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0
dXJuIFdURjo6ZXF1YWwoYS5pbXBsKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihi
KSk7IH0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25z
dCBWZWN0b3I8VUNoYXI+JiBiKSB7IHJldHVybiBhLmltcGwoKSAmJiBlcXVhbChhLmltcGwoKSwg
Yi5kYXRhKCksIGIuc2l6ZSgpKTsgfSAgICAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
QXRvbWljU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsKGEuaW1wbCgp
LCBiLmltcGwoKSk7IH0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTENoYXIqIGEsIGNv
bnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gYiA9PSBhOyB9Ci1pbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBl
cXVhbChhLmltcGwoKSwgYi5pbXBsKCkpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFZlY3RvcjxVQ2hhcj4mIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gYiA9PSBh
OyB9Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25z
dCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGEuaW1wbCgpICE9IGIuaW1wbCgpOyB9Ci1pbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgTENoYXIqIGIp
IHsgcmV0dXJuICEoYSA9PSBiKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9t
aWNTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQotaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikg
eyByZXR1cm4gIWVxdWFsKGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KLWlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBWZWN0b3I8VUNoYXI+JiBiKSB7IHJl
dHVybiAhKGEgPT0gYik7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTENoYXIqIGEs
IGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gIShiID09IGEpOyB9Ci1pbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJl
dHVybiAhZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBWZWN0b3I8VUNoYXI+JiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJu
ICEoYSA9PSBiKTsgfQotCi1ib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQXRvbWlj
U3RyaW5nJiwgY29uc3QgQXRvbWljU3RyaW5nJik7Ci1ib29sIGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7Ci1ib29sIGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiwgY29uc3QgQXRvbWljU3RyaW5nJik7Ci1ib29sIGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgY2hhciopOwot
Ci10ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMp
W2xlbmd0aF0pOwotCi1pbmxpbmUgQXRvbWljU3RyaW5nOjpBdG9taWNTdHJpbmcoKQotewotfQot
Ci1pbmxpbmUgQXRvbWljU3RyaW5nOjpBdG9taWNTdHJpbmcoY29uc3QgTENoYXIqIHMpCi0gICAg
OiBtX3N0cmluZyhBdG9taWNTdHJpbmdJbXBsOjphZGQocykpCi17Ci19Ci0KLWlubGluZSBBdG9t
aWNTdHJpbmc6OkF0b21pY1N0cmluZyhjb25zdCBjaGFyKiBzKQotICAgIDogbV9zdHJpbmcoQXRv
bWljU3RyaW5nSW1wbDo6YWRkKHMpKQotewotfQotCi1pbmxpbmUgQXRvbWljU3RyaW5nOjpBdG9t
aWNTdHJpbmcoY29uc3QgTENoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IG1fc3RyaW5n
KEF0b21pY1N0cmluZ0ltcGw6OmFkZChzLCBsZW5ndGgpKQotewotfQotCi1pbmxpbmUgQXRvbWlj
U3RyaW5nOjpBdG9taWNTdHJpbmcoY29uc3QgVUNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkKLSAg
ICA6IG1fc3RyaW5nKEF0b21pY1N0cmluZ0ltcGw6OmFkZChzLCBsZW5ndGgpKQotewotfQotCi1p
bmxpbmUgQXRvbWljU3RyaW5nOjpBdG9taWNTdHJpbmcoY29uc3QgVUNoYXIqIHMpCi0gICAgOiBt
X3N0cmluZyhBdG9taWNTdHJpbmdJbXBsOjphZGQocykpCi17Ci19Ci0KLWlubGluZSBBdG9taWNT
dHJpbmc6OkF0b21pY1N0cmluZyhBdG9taWNTdHJpbmdJbXBsKiBpbXApCi0gICAgOiBtX3N0cmlu
ZyhpbXApCi17Ci19Ci0KLWlubGluZSBBdG9taWNTdHJpbmc6OkF0b21pY1N0cmluZyhSZWZQdHI8
QXRvbWljU3RyaW5nSW1wbD4mJiBpbXApCi0gICAgOiBtX3N0cmluZyhXVEZNb3ZlKGltcCkpCi17
Ci19Ci0KLWlubGluZSBBdG9taWNTdHJpbmc6OkF0b21pY1N0cmluZyhTdHJpbmdJbXBsKiBpbXAp
Ci0gICAgOiBtX3N0cmluZyhBdG9taWNTdHJpbmdJbXBsOjphZGQoaW1wKSkKLXsKLX0KLQotaW5s
aW5lIEF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKLSAgICA6IG1f
c3RyaW5nKEF0b21pY1N0cmluZ0ltcGw6OmFkZChzLmltcGwoKSkpCi17Ci19Ci0KLWlubGluZSBB
dG9taWNTdHJpbmc6OkF0b21pY1N0cmluZyhTdHJpbmdJbXBsKiBiYXNlU3RyaW5nLCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogbV9zdHJpbmcoQXRvbWljU3RyaW5nSW1w
bDo6YWRkKGJhc2VTdHJpbmcsIHN0YXJ0LCBsZW5ndGgpKQotewotfQotCi1pbmxpbmUgQXRvbWlj
U3RyaW5nOjpBdG9taWNTdHJpbmcoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLSAgICA6IG1fc3Ry
aW5nKHVpZCkKLXsKLX0KLQotI2lmIFVTRShDRikKLWlubGluZSBBdG9taWNTdHJpbmc6OkF0b21p
Y1N0cmluZyhDRlN0cmluZ1JlZiBzKQotICAgIDogIG1fc3RyaW5nKEF0b21pY1N0cmluZ0ltcGw6
OmFkZChzKSkKLXsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19PQkpDX18KLWlubGluZSBBdG9taWNT
dHJpbmc6OkF0b21pY1N0cmluZyhOU1N0cmluZyogcykKLSAgICA6IG1fc3RyaW5nKEF0b21pY1N0
cmluZ0ltcGw6OmFkZCgoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpcykpCi17Ci19Ci0jZW5kaWYKLQot
Ly8gRGVmaW5lIGV4dGVybmFsIGdsb2JhbCB2YXJpYWJsZXMgZm9yIHRoZSBjb21tb25seSB1c2Vk
IGF0b21pYyBzdHJpbmdzLgotLy8gVGhlc2UgYXJlIG9ubHkgdXNhYmxlIGZyb20gdGhlIG1haW4g
dGhyZWFkLgotZXh0ZXJuIFdURl9FWFBPUlREQVRBIExhenlOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IG51bGxBdG9tRGF0YTsKLWV4dGVybiBXVEZfRVhQT1JUREFUQSBMYXp5TmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBlbXB0eUF0b21EYXRhOwotZXh0ZXJuIFdURl9FWFBPUlREQVRB
IExhenlOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHN0YXJBdG9tRGF0YTsKLWV4dGVybiBX
VEZfRVhQT1JUREFUQSBMYXp5TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB4bWxBdG9tRGF0
YTsKLWV4dGVybiBXVEZfRVhQT1JUREFUQSBMYXp5TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiB4bWxuc0F0b21EYXRhOwotCi1pbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBudWxsQXRvbSgp
IHsgcmV0dXJuIG51bGxBdG9tRGF0YS5nZXQoKTsgfQotaW5saW5lIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZW1wdHlBdG9tKCkgeyByZXR1cm4gZW1wdHlBdG9tRGF0YS5nZXQoKTsgfQotaW5saW5lIGNv
bnN0IEF0b21pY1N0cmluZyYgc3RhckF0b20oKSB7IHJldHVybiBzdGFyQXRvbURhdGEuZ2V0KCk7
IH0KLWlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIHhtbEF0b20oKSB7IHJldHVybiB4bWxBdG9t
RGF0YS5nZXQoKTsgfQotaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgeG1sbnNBdG9tKCkgeyBy
ZXR1cm4geG1sbnNBdG9tRGF0YS5nZXQoKTsgfQotCi1pbmxpbmUgQXRvbWljU3RyaW5nIEF0b21p
Y1N0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkK
LXsKLSAgICBpZiAoIWNoYXJhY3RlcnMpCi0gICAgICAgIHJldHVybiBudWxsQXRvbSgpOwotICAg
IGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZW1wdHlBdG9tKCk7Ci0gICAgcmV0dXJuIGZy
b21VVEY4SW50ZXJuYWwoY2hhcmFjdGVycywgY2hhcmFjdGVycyArIGxlbmd0aCk7Ci19Ci0KLWlu
bGluZSBBdG9taWNTdHJpbmcgQXRvbWljU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBjaGFy
YWN0ZXJzKQotewotICAgIGlmICghY2hhcmFjdGVycykKLSAgICAgICAgcmV0dXJuIG51bGxBdG9t
KCk7Ci0gICAgaWYgKCEqY2hhcmFjdGVycykKLSAgICAgICAgcmV0dXJuIGVtcHR5QXRvbSgpOwot
ICAgIHJldHVybiBmcm9tVVRGOEludGVybmFsKGNoYXJhY3RlcnMsIG51bGxwdHIpOwotfQotCi0v
LyBBdG9taWNTdHJpbmdIYXNoIGlzIHRoZSBkZWZhdWx0IGhhc2ggZm9yIEF0b21pY1N0cmluZwot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotdGVtcGxhdGU8PiBzdHJ1
Y3QgRGVmYXVsdEhhc2g8QXRvbWljU3RyaW5nPiB7Ci0gICAgdHlwZWRlZiBBdG9taWNTdHJpbmdI
YXNoIEhhc2g7Ci19OwotCi10ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBib29sIGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nLCBj
b25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSkKLXsKLSAgICByZXR1cm4gZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLnN0cmluZygpLCBsb3dlcmNhc2VMZXR0
ZXJzKTsKLX0KLQotaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBBdG9t
aWNTdHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikKLXsKLSAgICByZXR1cm4gZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShhLnN0cmluZygpLCBiLnN0cmluZygpKTsKLX0KLQotaW5saW5lIGJv
b2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFN0
cmluZyYgYikKLXsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhLnN0cmluZygp
LCBiKTsKLX0KLQotaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJp
bmcmIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikKLXsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShhLCBiLnN0cmluZygpKTsKLX0KLQotaW5saW5lIGJvb2wgZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpCi17Ci0gICAg
cmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYS5zdHJpbmcoKSwgYik7Ci19Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDxBdG9taWNTdHJpbmc+
IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gQXRvbWljU3RyaW5nOwotICAgIHVzaW5nIEFkZGl0
aW9uYWxBcmd1bWVudFR5cGUgPSB2b2lkOwotICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZmx1c2go
TENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCopIHsgcmV0dXJuIHsgY2hh
cmFjdGVycywgbGVuZ3RoIH07IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jaWZuZGVm
IEFUT01JQ1NUUklOR19ISURFX0dMT0JBTFMKLXVzaW5nIFdURjo6QXRvbWljU3RyaW5nOwotdXNp
bmcgV1RGOjpudWxsQXRvbTsKLXVzaW5nIFdURjo6ZW1wdHlBdG9tOwotdXNpbmcgV1RGOjpzdGFy
QXRvbTsKLXVzaW5nIFdURjo6eG1sQXRvbTsKLXVzaW5nIFdURjo6eG1sbnNBdG9tOwotI2VuZGlm
Ci0KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgotCi0jZW5kaWYgLy8g
QXRvbWljU3RyaW5nX2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDBiYTZlMDI2MTBiZDJlNDI4ODc5YTA0ZjI5MDAzODNiNDg4MGQ4NDguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw1NDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEz
LTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE1IFl1c3VrZSBTdXp1a2k8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBdG9taWNTdHJpbmdJ
bXBsLmgiCi0KLSNpbmNsdWRlICJBdG9taWNTdHJpbmdUYWJsZS5oIgotI2luY2x1ZGUgIkludGVn
ZXJUb1N0cmluZ0NvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCi0jaW5jbHVk
ZSA8d3RmL0NvbW1hUHJpbnRlci5oPgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Ci0jaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLSNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4K
LSNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+Ci0KLSNpZiBVU0UoV0VCX1RIUkVBRCkKLSNp
bmNsdWRlICJMb2NrLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXVzaW5nIG5hbWVz
cGFjZSBVbmljb2RlOwotCi0jaWYgVVNFKFdFQl9USFJFQUQpCi0KLWNsYXNzIEF0b21pY1N0cmlu
Z1RhYmxlTG9ja2VyIDogcHVibGljIExvY2tIb2xkZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyKTsKLQotICAgIHN0YXRpYyBTdGF0aWNMb2NrIHNf
c3RyaW5nVGFibGVMb2NrOwotcHVibGljOgotICAgIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyKCkK
LSAgICAgICAgOiBMb2NrSG9sZGVyKCZzX3N0cmluZ1RhYmxlTG9jaykKLSAgICB7Ci0gICAgfQot
fTsKLQotU3RhdGljTG9jayBBdG9taWNTdHJpbmdUYWJsZUxvY2tlcjo6c19zdHJpbmdUYWJsZUxv
Y2s7Ci0KLSNlbHNlCi0KLWNsYXNzIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShBdG9taWNTdHJpbmdUYWJsZUxvY2tlcik7Ci1wdWJsaWM6Ci0gICAg
QXRvbWljU3RyaW5nVGFibGVMb2NrZXIoKSB7IH0KLX07Ci0KLSNlbmRpZiAvLyBVU0UoV0VCX1RI
UkVBRCkKLQotdXNpbmcgU3RyaW5nVGFibGVJbXBsID0gSGFzaFNldDxTdHJpbmdJbXBsKj47Ci0K
LXN0YXRpYyBBTFdBWVNfSU5MSU5FIFN0cmluZ1RhYmxlSW1wbCYgc3RyaW5nVGFibGUoKQotewot
ICAgIHJldHVybiB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFibGUoKS0+dGFibGUoKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+Ci1zdGF0
aWMgaW5saW5lIFJlZjxBdG9taWNTdHJpbmdJbXBsPiBhZGRUb1N0cmluZ1RhYmxlKEF0b21pY1N0
cmluZ1RhYmxlTG9ja2VyJiwgU3RyaW5nVGFibGVJbXBsJiBhdG9taWNTdHJpbmdUYWJsZSwgY29u
c3QgVCYgdmFsdWUpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBhdG9taWNTdHJpbmdUYWJsZS5h
ZGQ8SGFzaFRyYW5zbGF0b3I+KHZhbHVlKTsKLQotICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgbmV3
bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0IGl0LgotICAgIC8vIFRoZSBib29s
ZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCi0gICAgaWYgKGFkZFJlc3Vs
dC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QXRvbWlj
U3RyaW5nSW1wbCY+KCoqYWRkUmVzdWx0Lml0ZXJhdG9yKSk7Ci0gICAgcmV0dXJuICpzdGF0aWNf
Y2FzdDxBdG9taWNTdHJpbmdJbXBsKj4oKmFkZFJlc3VsdC5pdGVyYXRvcik7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgotc3RhdGljIGlubGluZSBS
ZWY8QXRvbWljU3RyaW5nSW1wbD4gYWRkVG9TdHJpbmdUYWJsZShjb25zdCBUJiB2YWx1ZSkKLXsK
LSAgICBBdG9taWNTdHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgcmV0dXJuIGFkZFRvU3Ry
aW5nVGFibGU8VCwgSGFzaFRyYW5zbGF0b3I+KGxvY2tlciwgc3RyaW5nVGFibGUoKSwgdmFsdWUp
OwotfQotCi1zdHJ1Y3QgQ1N0cmluZ1RyYW5zbGF0b3IgewotICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmlu
Z0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVycyk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIGlubGluZSBib29sIGVxdWFsKFN0cmluZ0ltcGwqIHN0ciwgY29uc3QgTENo
YXIqIGNoYXJhY3RlcnMpCi0gICAgewotICAgICAgICByZXR1cm4gV1RGOjplcXVhbChzdHIsIGNo
YXJhY3RlcnMpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBs
KiYgbG9jYXRpb24sIGNvbnN0IExDaGFyKiBjb25zdCYgY2hhcmFjdGVycywgdW5zaWduZWQgaGFz
aCkKLSAgICB7Ci0gICAgICAgIGxvY2F0aW9uID0gJlN0cmluZ0ltcGw6OmNyZWF0ZShjaGFyYWN0
ZXJzKS5sZWFrUmVmKCk7Ci0gICAgICAgIGxvY2F0aW9uLT5zZXRIYXNoKGhhc2gpOwotICAgICAg
ICBsb2NhdGlvbi0+c2V0SXNBdG9taWModHJ1ZSk7Ci0gICAgfQotfTsKLQotUmVmUHRyPEF0b21p
Y1N0cmluZ0ltcGw+IEF0b21pY1N0cmluZ0ltcGw6OmFkZChjb25zdCBMQ2hhciogY2hhcmFjdGVy
cykKLXsKLSAgICBpZiAoIWNoYXJhY3RlcnMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IGlmICghKmNoYXJhY3RlcnMpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdG9taWNTdHJp
bmdJbXBsKj4oU3RyaW5nSW1wbDo6ZW1wdHkoKSk7Ci0KLSAgICByZXR1cm4gYWRkVG9TdHJpbmdU
YWJsZTxjb25zdCBMQ2hhciosIENTdHJpbmdUcmFuc2xhdG9yPihjaGFyYWN0ZXJzKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0cnVjdCBIYXNoVHJhbnNsYXRvckNo
YXJCdWZmZXIgewotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnM7Ci0gICAgdW5z
aWduZWQgbGVuZ3RoOwotICAgIHVuc2lnbmVkIGhhc2g7Ci0KLSAgICBIYXNoVHJhbnNsYXRvckNo
YXJCdWZmZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQotICAgICAgICA6IGNoYXJhY3RlcnMoY2hhcmFjdGVycykKLSAgICAgICAgLCBsZW5ndGgobGVu
Z3RoKQotICAgICAgICAsIGhhc2goU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4
Qml0cyhjaGFyYWN0ZXJzLCBsZW5ndGgpKQotICAgIHsKLSAgICB9Ci0KLSAgICBIYXNoVHJhbnNs
YXRvckNoYXJCdWZmZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCBoYXNoKQotICAgICAgICA6IGNoYXJhY3RlcnMoY2hhcmFjdGVycykK
LSAgICAgICAgLCBsZW5ndGgobGVuZ3RoKQotICAgICAgICAsIGhhc2goaGFzaCkKLSAgICB7Ci0g
ICAgfQotfTsKLQotdXNpbmcgVUNoYXJCdWZmZXIgPSBIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8
VUNoYXI+Owotc3RydWN0IFVDaGFyQnVmZmVyVHJhbnNsYXRvciB7Ci0gICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgVUNoYXJCdWZmZXImIGJ1ZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBi
dWYuaGFzaDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBjb25z
dCYgc3RyLCBjb25zdCBVQ2hhckJ1ZmZlciYgYnVmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdU
Rjo6ZXF1YWwoc3RyLCBidWYuY2hhcmFjdGVycywgYnVmLmxlbmd0aCk7Ci0gICAgfQotCi0gICAg
c3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlvbiwgY29uc3QgVUNoYXJC
dWZmZXImIGJ1ZiwgdW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIGxvY2F0aW9uID0gJlN0
cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBvc3NpYmxlKGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3Ro
KS5sZWFrUmVmKCk7Ci0gICAgICAgIGxvY2F0aW9uLT5zZXRIYXNoKGhhc2gpOwotICAgICAgICBs
b2NhdGlvbi0+c2V0SXNBdG9taWModHJ1ZSk7Ci0gICAgfQotfTsKLQotc3RydWN0IEhhc2hBbmRV
VEY4Q2hhcmFjdGVycyB7Ci0gICAgdW5zaWduZWQgaGFzaDsKLSAgICBjb25zdCBjaGFyKiBjaGFy
YWN0ZXJzOwotICAgIHVuc2lnbmVkIGxlbmd0aDsKLSAgICB1bnNpZ25lZCB1dGYxNkxlbmd0aDsK
LX07Ci0KLXN0cnVjdCBIYXNoQW5kVVRGOENoYXJhY3RlcnNUcmFuc2xhdG9yIHsKLSAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBIYXNoQW5kVVRGOENoYXJhY3RlcnMmIGJ1ZmZlcikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBidWZmZXIuaGFzaDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9v
bCBlcXVhbChTdHJpbmdJbXBsKiBjb25zdCYgc3RyaW5nLCBjb25zdCBIYXNoQW5kVVRGOENoYXJh
Y3RlcnMmIGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIGlmIChidWZmZXIudXRmMTZMZW5ndGggIT0g
c3RyaW5nLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAv
LyBJZiBidWZmZXIgY29udGFpbnMgb25seSBBU0NJSSBjaGFyYWN0ZXJzIFVURi04IGFuZCBVVEYx
NiBsZW5ndGggYXJlIHRoZSBzYW1lLgotICAgICAgICBpZiAoYnVmZmVyLnV0ZjE2TGVuZ3RoICE9
IGJ1ZmZlci5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChzdHJpbmctPmlzOEJpdCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBlcXVhbExhdGluMVdpdGhVVEY4KHN0cmluZy0+Y2hhcmFjdGVy
czgoKSwgYnVmZmVyLmNoYXJhY3RlcnMsIGJ1ZmZlci5jaGFyYWN0ZXJzICsgYnVmZmVyLmxlbmd0
aCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBlcXVhbFVURjE2V2l0aFVURjgoc3RyaW5nLT5jaGFy
YWN0ZXJzMTYoKSwgYnVmZmVyLmNoYXJhY3RlcnMsIGJ1ZmZlci5jaGFyYWN0ZXJzICsgYnVmZmVy
Lmxlbmd0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RyaW5nLT5pczhCaXQoKSkgewot
ICAgICAgICAgICAgY29uc3QgTENoYXIqIHN0cmluZ0NoYXJhY3RlcnMgPSBzdHJpbmctPmNoYXJh
Y3RlcnM4KCk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXIu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNBU0NJSShidWZmZXIuY2hh
cmFjdGVyc1tpXSkpOwotICAgICAgICAgICAgICAgIGlmIChzdHJpbmdDaGFyYWN0ZXJzW2ldICE9
IGJ1ZmZlci5jaGFyYWN0ZXJzW2ldKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgY29uc3QgVUNoYXIqIHN0cmluZ0NoYXJhY3RlcnMgPSBzdHJpbmctPmNoYXJhY3Rl
cnMxNigpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgIEFTU0VSVChpc0FTQ0lJKGJ1ZmZlci5jaGFyYWN0ZXJzW2ld
KSk7Ci0gICAgICAgICAgICBpZiAoc3RyaW5nQ2hhcmFjdGVyc1tpXSAhPSBidWZmZXIuY2hhcmFj
dGVyc1tpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3Ry
aW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBIYXNoQW5kVVRGOENoYXJhY3RlcnMmIGJ1ZmZlciwg
dW5zaWduZWQgaGFzaCkKLSAgICB7Ci0gICAgICAgIFVDaGFyKiB0YXJnZXQ7Ci0gICAgICAgIGF1
dG8gbmV3U3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChidWZmZXIudXRm
MTZMZW5ndGgsIHRhcmdldCk7Ci0KLSAgICAgICAgYm9vbCBpc0FsbEFTQ0lJOwotICAgICAgICBj
b25zdCBjaGFyKiBzb3VyY2UgPSBidWZmZXIuY2hhcmFjdGVyczsKLSAgICAgICAgaWYgKGNvbnZl
cnRVVEY4VG9VVEYxNigmc291cmNlLCBzb3VyY2UgKyBidWZmZXIubGVuZ3RoLCAmdGFyZ2V0LCB0
YXJnZXQgKyBidWZmZXIudXRmMTZMZW5ndGgsICZpc0FsbEFTQ0lJKSAhPSBjb252ZXJzaW9uT0sp
Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICBpZiAoaXNBbGxB
U0NJSSkKLSAgICAgICAgICAgIG5ld1N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZShidWZmZXIu
Y2hhcmFjdGVycywgYnVmZmVyLmxlbmd0aCk7Ci0KLSAgICAgICAgbG9jYXRpb24gPSAmbmV3U3Ry
aW5nLmxlYWtSZWYoKTsKLSAgICAgICAgbG9jYXRpb24tPnNldEhhc2goaGFzaCk7Ci0gICAgICAg
IGxvY2F0aW9uLT5zZXRJc0F0b21pYyh0cnVlKTsKLSAgICB9Ci19OwotCi1SZWZQdHI8QXRvbWlj
U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nSW1wbDo6YWRkKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKCFjaGFyYWN0ZXJzKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QXRvbWljU3RyaW5nSW1wbCo+KFN0cmluZ0ltcGw6OmVtcHR5KCkpOwotCi0gICAgVUNoYXJC
dWZmZXIgYnVmZmVyIHsgY2hhcmFjdGVycywgbGVuZ3RoIH07Ci0gICAgcmV0dXJuIGFkZFRvU3Ry
aW5nVGFibGU8VUNoYXJCdWZmZXIsIFVDaGFyQnVmZmVyVHJhbnNsYXRvcj4oYnVmZmVyKTsKLX0K
LQotUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IEF0b21pY1N0cmluZ0ltcGw6OmFkZChjb25zdCBV
Q2hhciogY2hhcmFjdGVycykKLXsKLSAgICBpZiAoIWNoYXJhY3RlcnMpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAgICB3aGlsZSAoY2hhcmFj
dGVyc1tsZW5ndGhdICE9IFVDaGFyKDApKQotICAgICAgICArK2xlbmd0aDsKLQotICAgIGlmICgh
bGVuZ3RoKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+KFN0
cmluZ0ltcGw6OmVtcHR5KCkpOwotCi0gICAgVUNoYXJCdWZmZXIgYnVmZmVyIHsgY2hhcmFjdGVy
cywgbGVuZ3RoIH07Ci0gICAgcmV0dXJuIGFkZFRvU3RyaW5nVGFibGU8VUNoYXJCdWZmZXIsIFVD
aGFyQnVmZmVyVHJhbnNsYXRvcj4oYnVmZmVyKTsKLX0KLQotc3RydWN0IFN1YnN0cmluZ0xvY2F0
aW9uIHsKLSAgICBTdHJpbmdJbXBsKiBiYXNlU3RyaW5nOwotICAgIHVuc2lnbmVkIHN0YXJ0Owot
ICAgIHVuc2lnbmVkIGxlbmd0aDsKLX07Ci0KLXN0cnVjdCBTdWJzdHJpbmdUcmFuc2xhdG9yIHsK
LSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBT
dWJzdHJpbmdMb2NhdGlvbiYgYnVmZmVyLCB1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAgICAg
bG9jYXRpb24gPSAmU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKmJ1ZmZl
ci5iYXNlU3RyaW5nLCBidWZmZXIuc3RhcnQsIGJ1ZmZlci5sZW5ndGgpLmxlYWtSZWYoKTsKLSAg
ICAgICAgbG9jYXRpb24tPnNldEhhc2goaGFzaCk7Ci0gICAgICAgIGxvY2F0aW9uLT5zZXRJc0F0
b21pYyh0cnVlKTsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgU3Vic3RyaW5nVHJhbnNsYXRvcjggOiBT
dWJzdHJpbmdUcmFuc2xhdG9yIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBTdWJz
dHJpbmdMb2NhdGlvbiYgYnVmZmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hl
cjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoYnVmZmVyLmJhc2VTdHJpbmctPmNoYXJhY3Rl
cnM4KCkgKyBidWZmZXIuc3RhcnQsIGJ1ZmZlci5sZW5ndGgpOwotICAgIH0KLQotICAgIHN0YXRp
YyBib29sIGVxdWFsKFN0cmluZ0ltcGwqIGNvbnN0JiBzdHJpbmcsIGNvbnN0IFN1YnN0cmluZ0xv
Y2F0aW9uJiBidWZmZXIpCi0gICAgewotICAgICAgICByZXR1cm4gV1RGOjplcXVhbChzdHJpbmcs
IGJ1ZmZlci5iYXNlU3RyaW5nLT5jaGFyYWN0ZXJzOCgpICsgYnVmZmVyLnN0YXJ0LCBidWZmZXIu
bGVuZ3RoKTsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgU3Vic3RyaW5nVHJhbnNsYXRvcjE2IDogU3Vi
c3RyaW5nVHJhbnNsYXRvciB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU3Vic3Ry
aW5nTG9jYXRpb24mIGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6
OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGJ1ZmZlci5iYXNlU3RyaW5nLT5jaGFyYWN0ZXJz
MTYoKSArIGJ1ZmZlci5zdGFydCwgYnVmZmVyLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogY29uc3QmIHN0cmluZywgY29uc3QgU3Vic3RyaW5nTG9j
YXRpb24mIGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHN0cmluZywg
YnVmZmVyLmJhc2VTdHJpbmctPmNoYXJhY3RlcnMxNigpICsgYnVmZmVyLnN0YXJ0LCBidWZmZXIu
bGVuZ3RoKTsKLSAgICB9Ci19OwotCi1SZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4gQXRvbWljU3Ry
aW5nSW1wbDo6YWRkKFN0cmluZ0ltcGwqIGJhc2VTdHJpbmcsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKCFiYXNlU3RyaW5nKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGlmICghbGVuZ3RoIHx8IHN0YXJ0ID49IGJhc2VTdHJpbmctPmxlbmd0aCgp
KQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+KFN0cmluZ0lt
cGw6OmVtcHR5KCkpOwotCi0gICAgdW5zaWduZWQgbWF4TGVuZ3RoID0gYmFzZVN0cmluZy0+bGVu
Z3RoKCkgLSBzdGFydDsKLSAgICBpZiAobGVuZ3RoID49IG1heExlbmd0aCkgewotICAgICAgICBp
ZiAoIXN0YXJ0KQotICAgICAgICAgICAgcmV0dXJuIGFkZChiYXNlU3RyaW5nKTsKLSAgICAgICAg
bGVuZ3RoID0gbWF4TGVuZ3RoOwotICAgIH0KLQotICAgIFN1YnN0cmluZ0xvY2F0aW9uIGJ1ZmZl
ciA9IHsgYmFzZVN0cmluZywgc3RhcnQsIGxlbmd0aCB9OwotICAgIGlmIChiYXNlU3RyaW5nLT5p
czhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGFkZFRvU3RyaW5nVGFibGU8U3Vic3RyaW5nTG9jYXRp
b24sIFN1YnN0cmluZ1RyYW5zbGF0b3I4PihidWZmZXIpOwotICAgIHJldHVybiBhZGRUb1N0cmlu
Z1RhYmxlPFN1YnN0cmluZ0xvY2F0aW9uLCBTdWJzdHJpbmdUcmFuc2xhdG9yMTY+KGJ1ZmZlcik7
Ci19Ci0gICAgCi11c2luZyBMQ2hhckJ1ZmZlciA9IEhhc2hUcmFuc2xhdG9yQ2hhckJ1ZmZlcjxM
Q2hhcj47Ci1zdHJ1Y3QgTENoYXJCdWZmZXJUcmFuc2xhdG9yIHsKLSAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBMQ2hhckJ1ZmZlciYgYnVmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJ1
Zi5oYXNoOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwqIGNvbnN0
JiBzdHIsIGNvbnN0IExDaGFyQnVmZmVyJiBidWYpCi0gICAgewotICAgICAgICByZXR1cm4gV1RG
OjplcXVhbChzdHIsIGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBMQ2hhckJ1
ZmZlciYgYnVmLCB1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAgICAgbG9jYXRpb24gPSAmU3Ry
aW5nSW1wbDo6Y3JlYXRlKGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3RoKS5sZWFrUmVmKCk7Ci0g
ICAgICAgIGxvY2F0aW9uLT5zZXRIYXNoKGhhc2gpOwotICAgICAgICBsb2NhdGlvbi0+c2V0SXNB
dG9taWModHJ1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+Ci1z
dHJ1Y3QgQnVmZmVyRnJvbVN0YXRpY0RhdGFUcmFuc2xhdG9yIHsKLSAgICB1c2luZyBCdWZmZXIg
PSBIYXNoVHJhbnNsYXRvckNoYXJCdWZmZXI8Q2hhclR5cGU+OwotICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IEJ1ZmZlciYgYnVmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJ1Zi5oYXNo
OwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwqIGNvbnN0JiBzdHIs
IGNvbnN0IEJ1ZmZlciYgYnVmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6ZXF1YWwoc3Ry
LCBidWYuY2hhcmFjdGVycywgYnVmLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQg
dHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlvbiwgY29uc3QgQnVmZmVyJiBidWYsIHVuc2ln
bmVkIGhhc2gpCi0gICAgewotICAgICAgICBsb2NhdGlvbiA9ICZTdHJpbmdJbXBsOjpjcmVhdGVX
aXRob3V0Q29weWluZyhidWYuY2hhcmFjdGVycywgYnVmLmxlbmd0aCkubGVha1JlZigpOwotICAg
ICAgICBsb2NhdGlvbi0+c2V0SGFzaChoYXNoKTsKLSAgICAgICAgbG9jYXRpb24tPnNldElzQXRv
bWljKHRydWUpOwotICAgIH0KLX07Ci0KLVJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBBdG9taWNT
dHJpbmdJbXBsOjphZGQoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBpZiAoIWNoYXJhY3RlcnMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
aWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdG9taWNTdHJpbmdJbXBs
Kj4oU3RyaW5nSW1wbDo6ZW1wdHkoKSk7Ci0KLSAgICBMQ2hhckJ1ZmZlciBidWZmZXIgeyBjaGFy
YWN0ZXJzLCBsZW5ndGggfTsKLSAgICByZXR1cm4gYWRkVG9TdHJpbmdUYWJsZTxMQ2hhckJ1ZmZl
ciwgTENoYXJCdWZmZXJUcmFuc2xhdG9yPihidWZmZXIpOwotfQotCi1SZWY8QXRvbWljU3RyaW5n
SW1wbD4gQXRvbWljU3RyaW5nSW1wbDo6YWRkTGl0ZXJhbChjb25zdCBjaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKGNoYXJhY3RlcnMpOwotICAgIEFTU0VS
VChsZW5ndGgpOwotCi0gICAgTENoYXJCdWZmZXIgYnVmZmVyIHsgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGggfTsKLSAgICByZXR1cm4gYWRkVG9TdHJp
bmdUYWJsZTxMQ2hhckJ1ZmZlciwgQnVmZmVyRnJvbVN0YXRpY0RhdGFUcmFuc2xhdG9yPExDaGFy
Pj4oYnVmZmVyKTsKLX0KLQotc3RhdGljIFJlZjxBdG9taWNTdHJpbmdJbXBsPiBhZGRTeW1ib2wo
QXRvbWljU3RyaW5nVGFibGVMb2NrZXImIGxvY2tlciwgU3RyaW5nVGFibGVJbXBsJiBhdG9taWNT
dHJpbmdUYWJsZSwgU3RyaW5nSW1wbCYgYmFzZSkKLXsKLSAgICBBU1NFUlQoYmFzZS5sZW5ndGgo
KSk7Ci0gICAgQVNTRVJUKGJhc2UuaXNTeW1ib2woKSk7Ci0KLSAgICBTdWJzdHJpbmdMb2NhdGlv
biBidWZmZXIgPSB7ICZiYXNlLCAwLCBiYXNlLmxlbmd0aCgpIH07Ci0gICAgaWYgKGJhc2UuaXM4
Qml0KCkpCi0gICAgICAgIHJldHVybiBhZGRUb1N0cmluZ1RhYmxlPFN1YnN0cmluZ0xvY2F0aW9u
LCBTdWJzdHJpbmdUcmFuc2xhdG9yOD4obG9ja2VyLCBhdG9taWNTdHJpbmdUYWJsZSwgYnVmZmVy
KTsKLSAgICByZXR1cm4gYWRkVG9TdHJpbmdUYWJsZTxTdWJzdHJpbmdMb2NhdGlvbiwgU3Vic3Ry
aW5nVHJhbnNsYXRvcjE2Pihsb2NrZXIsIGF0b21pY1N0cmluZ1RhYmxlLCBidWZmZXIpOwotfQot
Ci1zdGF0aWMgaW5saW5lIFJlZjxBdG9taWNTdHJpbmdJbXBsPiBhZGRTeW1ib2woU3RyaW5nSW1w
bCYgYmFzZSkKLXsKLSAgICBBdG9taWNTdHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgcmV0
dXJuIGFkZFN5bWJvbChsb2NrZXIsIHN0cmluZ1RhYmxlKCksIGJhc2UpOwotfQotCi1zdGF0aWMg
UmVmPEF0b21pY1N0cmluZ0ltcGw+IGFkZFN0YXRpYyhBdG9taWNTdHJpbmdUYWJsZUxvY2tlciYg
bG9ja2VyLCBTdHJpbmdUYWJsZUltcGwmIGF0b21pY1N0cmluZ1RhYmxlLCBTdHJpbmdJbXBsJiBi
YXNlKQotewotICAgIEFTU0VSVChiYXNlLmxlbmd0aCgpKTsKLSAgICBBU1NFUlQoYmFzZS5pc1N0
YXRpYygpKTsKLQotICAgIGlmIChiYXNlLmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyQnVmZmVy
IGJ1ZmZlciB7IGJhc2UuY2hhcmFjdGVyczgoKSwgYmFzZS5sZW5ndGgoKSwgYmFzZS5oYXNoKCkg
fTsKLSAgICAgICAgcmV0dXJuIGFkZFRvU3RyaW5nVGFibGU8TENoYXJCdWZmZXIsIEJ1ZmZlckZy
b21TdGF0aWNEYXRhVHJhbnNsYXRvcjxMQ2hhcj4+KGxvY2tlciwgYXRvbWljU3RyaW5nVGFibGUs
IGJ1ZmZlcik7Ci0gICAgfQotICAgIFVDaGFyQnVmZmVyIGJ1ZmZlciB7IGJhc2UuY2hhcmFjdGVy
czE2KCksIGJhc2UubGVuZ3RoKCksIGJhc2UuaGFzaCgpIH07Ci0gICAgcmV0dXJuIGFkZFRvU3Ry
aW5nVGFibGU8VUNoYXJCdWZmZXIsIEJ1ZmZlckZyb21TdGF0aWNEYXRhVHJhbnNsYXRvcjxVQ2hh
cj4+KGxvY2tlciwgYXRvbWljU3RyaW5nVGFibGUsIGJ1ZmZlcik7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgUmVmPEF0b21pY1N0cmluZ0ltcGw+IGFkZFN0YXRpYyhTdHJpbmdJbXBsJiBiYXNlKQotewot
ICAgIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKLSAgICByZXR1cm4gYWRkU3RhdGlj
KGxvY2tlciwgc3RyaW5nVGFibGUoKSwgYmFzZSk7Ci19Ci0KLVJlZjxBdG9taWNTdHJpbmdJbXBs
PiBBdG9taWNTdHJpbmdJbXBsOjphZGRTbG93Q2FzZShTdHJpbmdJbXBsJiBzdHJpbmcpCi17Ci0g
ICAgLy8gVGhpcyBjaGVjayBpcyBuZWNlc3NhcnkgZm9yIG51bGwgc3ltYm9scy4KLSAgICAvLyBU
aGVpciBsZW5ndGggaXMgemVybywgYnV0IHRoZXkgYXJlIG5vdCBBdG9taWNTdHJpbmdJbXBsLgot
ICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gKnN0YXRpY19jYXN0PEF0
b21pY1N0cmluZ0ltcGwqPihTdHJpbmdJbXBsOjplbXB0eSgpKTsKLQotICAgIGlmIChzdHJpbmcu
aXNTdGF0aWMoKSkKLSAgICAgICAgcmV0dXJuIGFkZFN0YXRpYyhzdHJpbmcpOwotCi0gICAgaWYg
KHN0cmluZy5pc1N5bWJvbCgpKQotICAgICAgICByZXR1cm4gYWRkU3ltYm9sKHN0cmluZyk7Ci0K
LSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzdHJpbmcuaXNBdG9taWMoKSwgIkF0b21pY1N0cmlu
Z0ltcGwgc2hvdWxkIG5vdCBoaXQgdGhlIHNsb3cgY2FzZSBpZiB0aGUgc3RyaW5nIGlzIGFscmVh
ZHkgYXRvbWljLiIpOwotCi0gICAgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOwotICAg
IGF1dG8gYWRkUmVzdWx0ID0gc3RyaW5nVGFibGUoKS5hZGQoJnN0cmluZyk7Ci0KLSAgICBpZiAo
YWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCphZGRSZXN1bHQuaXRlcmF0
b3IgPT0gJnN0cmluZyk7Ci0gICAgICAgIHN0cmluZy5zZXRJc0F0b21pYyh0cnVlKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gKnN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPigqYWRkUmVzdWx0
Lml0ZXJhdG9yKTsKLX0KLQotUmVmPEF0b21pY1N0cmluZ0ltcGw+IEF0b21pY1N0cmluZ0ltcGw6
OmFkZFNsb3dDYXNlKEF0b21pY1N0cmluZ1RhYmxlJiBzdHJpbmdUYWJsZSwgU3RyaW5nSW1wbCYg
c3RyaW5nKQotewotICAgIC8vIFRoaXMgY2hlY2sgaXMgbmVjZXNzYXJ5IGZvciBudWxsIHN5bWJv
bHMuCi0gICAgLy8gVGhlaXIgbGVuZ3RoIGlzIHplcm8sIGJ1dCB0aGV5IGFyZSBub3QgQXRvbWlj
U3RyaW5nSW1wbC4KLSAgICBpZiAoIXN0cmluZy5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuICpz
dGF0aWNfY2FzdDxBdG9taWNTdHJpbmdJbXBsKj4oU3RyaW5nSW1wbDo6ZW1wdHkoKSk7Ci0KLSAg
ICBpZiAoc3RyaW5nLmlzU3RhdGljKCkpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nVGFibGVMb2Nr
ZXIgbG9ja2VyOwotICAgICAgICByZXR1cm4gYWRkU3RhdGljKGxvY2tlciwgc3RyaW5nVGFibGUu
dGFibGUoKSwgc3RyaW5nKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyaW5nLmlzU3ltYm9sKCkpIHsK
LSAgICAgICAgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOwotICAgICAgICByZXR1cm4g
YWRkU3ltYm9sKGxvY2tlciwgc3RyaW5nVGFibGUudGFibGUoKSwgc3RyaW5nKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzdHJpbmcuaXNBdG9taWMoKSwgIkF0b21pY1N0cmlu
Z0ltcGwgc2hvdWxkIG5vdCBoaXQgdGhlIHNsb3cgY2FzZSBpZiB0aGUgc3RyaW5nIGlzIGFscmVh
ZHkgYXRvbWljLiIpOwotCi0gICAgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOwotICAg
IGF1dG8gYWRkUmVzdWx0ID0gc3RyaW5nVGFibGUudGFibGUoKS5hZGQoJnN0cmluZyk7Ci0KLSAg
ICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCphZGRSZXN1bHQu
aXRlcmF0b3IgPT0gJnN0cmluZyk7Ci0gICAgICAgIHN0cmluZy5zZXRJc0F0b21pYyh0cnVlKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gKnN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPigqYWRk
UmVzdWx0Lml0ZXJhdG9yKTsKLX0KLQotdm9pZCBBdG9taWNTdHJpbmdJbXBsOjpyZW1vdmUoQXRv
bWljU3RyaW5nSW1wbCogc3RyaW5nKQotewotICAgIEFTU0VSVChzdHJpbmctPmlzQXRvbWljKCkp
OwotICAgIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKLSAgICBhdXRvJiBhdG9taWNT
dHJpbmdUYWJsZSA9IHN0cmluZ1RhYmxlKCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IGF0b21pY1N0
cmluZ1RhYmxlLmZpbmQoc3RyaW5nKTsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXJhdG9y
ICE9IGF0b21pY1N0cmluZ1RhYmxlLmVuZCgpLCAiVGhlIHN0cmluZyBiZWluZyByZW1vdmVkIGlz
IGF0b21pYyBpbiB0aGUgc3RyaW5nIHRhYmxlIG9mIGFuIG90aGVyIHRocmVhZCEiKTsKLSAgICBB
U1NFUlQoc3RyaW5nID09ICppdGVyYXRvcik7Ci0gICAgYXRvbWljU3RyaW5nVGFibGUucmVtb3Zl
KGl0ZXJhdG9yKTsKLX0KLQotUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IEF0b21pY1N0cmluZ0lt
cGw6Omxvb2tVcFNsb3dDYXNlKFN0cmluZ0ltcGwmIHN0cmluZykKLXsKLSAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKCFzdHJpbmcuaXNBdG9taWMoKSwgIkF0b21pY1N0cmluZ0ltcGxzIHNob3VsZCBy
ZXR1cm4gZnJvbSB0aGUgZmFzdCBjYXNlLiIpOwotCi0gICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkp
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdG9taWNTdHJpbmdJbXBsKj4oU3RyaW5nSW1w
bDo6ZW1wdHkoKSk7Ci0KLSAgICBBdG9taWNTdHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAg
YXV0byYgYXRvbWljU3RyaW5nVGFibGUgPSBzdHJpbmdUYWJsZSgpOwotICAgIGF1dG8gaXRlcmF0
b3IgPSBhdG9taWNTdHJpbmdUYWJsZS5maW5kKCZzdHJpbmcpOwotICAgIGlmIChpdGVyYXRvciAh
PSBhdG9taWNTdHJpbmdUYWJsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0
b21pY1N0cmluZ0ltcGwqPigqaXRlcmF0b3IpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1S
ZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nSW1wbDo6YWRkVVRGOChjb25zdCBj
aGFyKiBjaGFyYWN0ZXJzU3RhcnQsIGNvbnN0IGNoYXIqIGNoYXJhY3RlcnNFbmQpCi17Ci0gICAg
SGFzaEFuZFVURjhDaGFyYWN0ZXJzIGJ1ZmZlcjsKLSAgICBidWZmZXIuY2hhcmFjdGVycyA9IGNo
YXJhY3RlcnNTdGFydDsKLSAgICBidWZmZXIuaGFzaCA9IGNhbGN1bGF0ZVN0cmluZ0hhc2hBbmRM
ZW5ndGhGcm9tVVRGOE1hc2tpbmdUb3A4Qml0cyhjaGFyYWN0ZXJzU3RhcnQsIGNoYXJhY3RlcnNF
bmQsIGJ1ZmZlci5sZW5ndGgsIGJ1ZmZlci51dGYxNkxlbmd0aCk7Ci0KLSAgICBpZiAoIWJ1ZmZl
ci5oYXNoKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBhZGRUb1N0cmlu
Z1RhYmxlPEhhc2hBbmRVVEY4Q2hhcmFjdGVycywgSGFzaEFuZFVURjhDaGFyYWN0ZXJzVHJhbnNs
YXRvcj4oYnVmZmVyKTsKLX0KLQotUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IEF0b21pY1N0cmlu
Z0ltcGw6Omxvb2tVcChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKLSAgICBhdXRvJiB0YWJsZSA9
IHN0cmluZ1RhYmxlKCk7Ci0KLSAgICBMQ2hhckJ1ZmZlciBidWZmZXIgPSB7IGNoYXJhY3RlcnMs
IGxlbmd0aCB9OwotICAgIGF1dG8gaXRlcmF0b3IgPSB0YWJsZS5maW5kPExDaGFyQnVmZmVyVHJh
bnNsYXRvcj4oYnVmZmVyKTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gdGFibGUuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdG9taWNTdHJpbmdJbXBsKj4oKml0ZXJhdG9yKTsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IEF0b21pY1N0
cmluZ0ltcGw6Omxvb2tVcChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKLSAgICBhdXRvJiB0YWJs
ZSA9IHN0cmluZ1RhYmxlKCk7Ci0KLSAgICBVQ2hhckJ1ZmZlciBidWZmZXIgeyBjaGFyYWN0ZXJz
LCBsZW5ndGggfTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gdGFibGUuZmluZDxVQ2hhckJ1ZmZlclRy
YW5zbGF0b3I+KGJ1ZmZlcik7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IHRhYmxlLmVuZCgpKQotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+KCppdGVyYXRvcik7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotYm9vbCBBdG9taWNT
dHJpbmdJbXBsOjppc0luQXRvbWljU3RyaW5nVGFibGUoU3RyaW5nSW1wbCogc3RyaW5nKQotewot
ICAgIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyIGxvY2tlcjsKLSAgICByZXR1cm4gc3RyaW5nVGFi
bGUoKS5jb250YWlucyhzdHJpbmcpOwotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdURgpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvQXRvbWlj
U3RyaW5nSW1wbC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvQXRv
bWljU3RyaW5nSW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTBkNzQ3NmU5
MDlhYjgyNTBjOGNhMzliMmMwY2Y1M2U3ZmU4MmNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90
ZXh0L0F0b21pY1N0cmluZ0ltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgQXRvbWljU3Ry
aW5nSW1wbF9oCi0jZGVmaW5lIEF0b21pY1N0cmluZ0ltcGxfaAotCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvVW5pcXVlZFN0cmluZ0ltcGwuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEF0b21p
Y1N0cmluZ1RhYmxlOwotCi1jbGFzcyBBdG9taWNTdHJpbmdJbXBsIDogcHVibGljIFVuaXF1ZWRT
dHJpbmdJbXBsIHsKLXB1YmxpYzoKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFJl
ZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBsb29rVXAoY29uc3QgTENoYXIqLCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmUHRyPEF0b21pY1N0cmlu
Z0ltcGw+IGxvb2tVcChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGlj
IFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBsb29rVXAoU3RyaW5nSW1wbCogc3RyaW5nKQotICAg
IHsKLSAgICAgICAgaWYgKCFzdHJpbmcgfHwgc3RyaW5nLT5pc0F0b21pYygpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPihzdHJpbmcpOwotICAgICAg
ICByZXR1cm4gbG9va1VwU2xvd0Nhc2UoKnN0cmluZyk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZv
aWQgcmVtb3ZlKEF0b21pY1N0cmluZ0ltcGwqKTsKLQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBzdGF0aWMgUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IGFkZChjb25zdCBMQ2hhciopOwotICAg
IEFMV0FZU19JTkxJTkUgc3RhdGljIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBhZGQoY29uc3Qg
Y2hhciogcykgeyByZXR1cm4gYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSk7
IH07Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWZQdHI8QXRvbWljU3RyaW5n
SW1wbD4gYWRkKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgc3RhdGljIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBhZGQoY29uc3QgVUNo
YXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFJlZlB0cjxB
dG9taWNTdHJpbmdJbXBsPiBhZGQoY29uc3QgY2hhciogcywgdW5zaWduZWQgbGVuZ3RoKSB7IHJl
dHVybiBhZGQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHMpLCBsZW5ndGgpOyB9Owot
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+
IGFkZChjb25zdCBVQ2hhciopOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVm
UHRyPEF0b21pY1N0cmluZ0ltcGw+IGFkZChTdHJpbmdJbXBsKiwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFJlZlB0cjxBdG9taWNT
dHJpbmdJbXBsPiBhZGQoU3RyaW5nSW1wbCogc3RyaW5nKQotICAgIHsKLSAgICAgICAgaWYgKCFz
dHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+
KHN0cmluZyk7Ci0gICAgICAgIHJldHVybiBhZGQoKnN0cmluZyk7Ci0gICAgfQotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPEF0b21pY1N0cmluZ0ltcGw+IGFkZExpdGVyYWwo
Y29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFJldHVy
bnMgbnVsbCBpZiB0aGUgaW5wdXQgZGF0YSBjb250YWlucyBhbiBpbnZhbGlkIFVURi04IHNlcXVl
bmNlLgotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmUHRyPEF0b21pY1N0cmlu
Z0ltcGw+IGFkZFVURjgoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCk7Ci0jaWYg
VVNFKENGKQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmUHRyPEF0b21pY1N0
cmluZ0ltcGw+IGFkZChDRlN0cmluZ1JlZik7Ci0jZW5kaWYKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFN0cmluZ1RhYmxlUHJvdmlkZXI+Ci0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgUmVmUHRy
PEF0b21pY1N0cmluZ0ltcGw+IGFkZFdpdGhTdHJpbmdUYWJsZVByb3ZpZGVyKFN0cmluZ1RhYmxl
UHJvdmlkZXImIHN0cmluZ1RhYmxlUHJvdmlkZXIsIFN0cmluZ0ltcGwqIHN0cmluZykKLSAgICB7
Ci0gICAgICAgIGlmICghc3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIHJldHVybiBhZGQoKnN0cmluZ1RhYmxlUHJvdmlkZXIuYXRvbWljU3RyaW5nVGFibGUoKSwg
KnN0cmluZyk7Ci0gICAgfQotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBXVEZfRVhQT1JUX1NU
UklOR19BUEkgc3RhdGljIGJvb2wgaXNJbkF0b21pY1N0cmluZ1RhYmxlKFN0cmluZ0ltcGwqKTsK
LSNlbmRpZgotCi1wcml2YXRlOgotICAgIEF0b21pY1N0cmluZ0ltcGwoKSA9IGRlbGV0ZTsKLQot
ICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFJlZjxBdG9taWNTdHJpbmdJbXBsPiBhZGQoU3RyaW5n
SW1wbCYgc3RyaW5nKQotICAgIHsKLSAgICAgICAgaWYgKHN0cmluZy5pc0F0b21pYygpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzdHJpbmcubGVuZ3RoKCkgfHwgaXNJbkF0
b21pY1N0cmluZ1RhYmxlKCZzdHJpbmcpLCAiVGhlIGF0b21pYyBzdHJpbmcgY29tZXMgZnJvbSBh
biBvdGhlciB0aHJlYWQhIik7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWlj
U3RyaW5nSW1wbCY+KHN0cmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFkZFNsb3dD
YXNlKHN0cmluZyk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgUmVmPEF0b21p
Y1N0cmluZ0ltcGw+IGFkZChBdG9taWNTdHJpbmdUYWJsZSYgc3RyaW5nVGFibGUsIFN0cmluZ0lt
cGwmIHN0cmluZykKLSAgICB7Ci0gICAgICAgIGlmIChzdHJpbmcuaXNBdG9taWMoKSkgewotICAg
ICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc3RyaW5nLmxlbmd0aCgpIHx8IGlzSW5BdG9t
aWNTdHJpbmdUYWJsZSgmc3RyaW5nKSwgIlRoZSBhdG9taWMgc3RyaW5nIGNvbWVzIGZyb20gYW4g
b3RoZXIgdGhyZWFkISIpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21pY1N0
cmluZ0ltcGwmPihzdHJpbmcpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhZGRTbG93Q2Fz
ZShzdHJpbmdUYWJsZSwgc3RyaW5nKTsKLSAgICB9Ci0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgc3RhdGljIFJlZjxBdG9taWNTdHJpbmdJbXBsPiBhZGRTbG93Q2FzZShTdHJpbmdJbXBsJik7
Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8QXRvbWljU3RyaW5nSW1wbD4g
YWRkU2xvd0Nhc2UoQXRvbWljU3RyaW5nVGFibGUmLCBTdHJpbmdJbXBsJik7Ci0KLSAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBsb29rVXBT
bG93Q2FzZShTdHJpbmdJbXBsJik7Ci19OwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLS8vIEF0b21p
Y1N0cmluZ0ltcGxzIGNyZWF0ZWQgZnJvbSBTdGF0aWNTdHJpbmdJbXBsIHdpbGwgQVNTRVJUCi0v
LyBpbiB0aGUgZ2VuZXJpYyBWYWx1ZUNoZWNrPFQ+OjpjaGVja0NvbnNpc3RlbmN5Ci0vLyBhcyB0
aGV5IGFyZSBub3QgYWxsb2NhdGVkIGJ5IGZhc3RNYWxsb2MuCi0vLyBXZSBkb24ndCBjdXJyZW50
bHkgaGF2ZSBhbnkgd2F5IHRvIGRldGVjdCB0aGF0IGNhc2UKLS8vIHNvIHdlIGlnbm9yZSB0aGUg
Y29uc2lzdGVuY3kgY2hlY2sgZm9yIGFsbCBBdG9taWNTdHJpbmdJbXBscyouCi10ZW1wbGF0ZTw+
IHN0cnVjdAotVmFsdWVDaGVjazxBdG9taWNTdHJpbmdJbXBsKj4gewotICAgIHN0YXRpYyB2b2lk
IGNoZWNrQ29uc2lzdGVuY3koY29uc3QgQXRvbWljU3RyaW5nSW1wbCopIHsgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QKLVZhbHVlQ2hlY2s8Y29uc3QgQXRvbWljU3RyaW5nSW1wbCo+IHsKLSAg
ICBzdGF0aWMgdm9pZCBjaGVja0NvbnNpc3RlbmN5KGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqKSB7
IH0KLX07Ci0jZW5kaWYKLQotfQotCi11c2luZyBXVEY6OkF0b21pY1N0cmluZ0ltcGw7Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQv
QXRvbWljU3RyaW5nVGFibGUuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3Rm
L3RleHQvQXRvbWljU3RyaW5nVGFibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmZThhNDg4NGRiN2U2NzhkZWQ2YWYzMmRkNDM3MTJlNTk1ZjNiOTM1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi90ZXh0L0F0b21pY1N0cmluZ1RhYmxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkF0b21pY1N0cmluZ1RhYmxlLmgiCi0KLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8
d3RmL1dURlRocmVhZERhdGEuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXZvaWQgQXRvbWljU3Ry
aW5nVGFibGU6OmNyZWF0ZShXVEZUaHJlYWREYXRhJiBkYXRhKQotewotI2lmIFVTRShXRUJfVEhS
RUFEKQotICAgIC8vIE9uIGlPUywgb25lIEF0b21pY1N0cmluZ1RhYmxlIGlzIHNoYXJlZCBiZXR3
ZWVuIHRoZSBtYWluIFVJIHRocmVhZCBhbmQgdGhlIFdlYlRocmVhZC4KLSAgICBzdGF0aWMgQXRv
bWljU3RyaW5nVGFibGUqIHNoYXJlZFN0cmluZ1RhYmxlID0gbmV3IEF0b21pY1N0cmluZ1RhYmxl
OwotCi0gICAgYm9vbCBjdXJyZW50VGhyZWFkSXNXZWJUaHJlYWQgPSBpc1dlYlRocmVhZCgpOwot
ICAgIGlmIChjdXJyZW50VGhyZWFkSXNXZWJUaHJlYWQgfHwgaXNVSVRocmVhZCgpKQotICAgICAg
ICBkYXRhLm1fZGVmYXVsdEF0b21pY1N0cmluZ1RhYmxlID0gc2hhcmVkU3RyaW5nVGFibGU7Ci0g
ICAgZWxzZQotICAgICAgICBkYXRhLm1fZGVmYXVsdEF0b21pY1N0cmluZ1RhYmxlID0gbmV3IEF0
b21pY1N0cmluZ1RhYmxlOwotCi0gICAgLy8gV2UgZG8gdGhlIGZvbGxvd2luZyBzbyB0aGF0IGl0
cyBkZXN0cnVjdGlvbiBoYXBwZW5zIG9ubHkKLSAgICAvLyBvbmNlIC0gb24gdGhlIG1haW4gVUkg
dGhyZWFkLgotICAgIGlmICghY3VycmVudFRocmVhZElzV2ViVGhyZWFkKQotICAgICAgICBkYXRh
Lm1fYXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yID0gQXRvbWljU3RyaW5nVGFibGU6OmRlc3Ry
b3k7Ci0jZWxzZQotICAgIGRhdGEubV9kZWZhdWx0QXRvbWljU3RyaW5nVGFibGUgPSBuZXcgQXRv
bWljU3RyaW5nVGFibGU7Ci0gICAgZGF0YS5tX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvciA9
IEF0b21pY1N0cmluZ1RhYmxlOjpkZXN0cm95OwotI2VuZGlmIC8vIFVTRShXRUJfVEhSRUFEKQot
fQotCi1BdG9taWNTdHJpbmdUYWJsZTo6fkF0b21pY1N0cmluZ1RhYmxlKCkKLXsKLSAgICBmb3Ig
KGF1dG8qIHN0cmluZyA6IG1fdGFibGUpCi0gICAgICAgIHN0cmluZy0+c2V0SXNBdG9taWMoZmFs
c2UpOwotfQotCi12b2lkIEF0b21pY1N0cmluZ1RhYmxlOjpkZXN0cm95KEF0b21pY1N0cmluZ1Rh
YmxlKiB0YWJsZSkKLXsKLSAgICBkZWxldGUgdGFibGU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L0F0b21pY1N0cmluZ1RhYmxlLmgg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9BdG9taWNTdHJpbmdUYWJs
ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDRhZTkyYmRlYzQ0MzliZjA3MDEy
MWI3OGEzNWY1YTg0ZmM0MDlkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L0F0b21pY1N0
cmluZ1RhYmxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJl
ciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgV1RGX0F0b21pY1N0cmluZ1RhYmxlX2gK
LSNkZWZpbmUgV1RGX0F0b21pY1N0cmluZ1RhYmxlX2gKLQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdJbXBsLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBTdHJpbmdJbXBsOwotCi1j
bGFzcyBBdG9taWNTdHJpbmdUYWJsZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIH5BdG9taWNTdHJpbmdUYWJsZSgpOwotCi0g
ICAgc3RhdGljIHZvaWQgY3JlYXRlKFdURlRocmVhZERhdGEmKTsKLSAgICBIYXNoU2V0PFN0cmlu
Z0ltcGwqPiYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9Ci0KLXByaXZhdGU6Ci0gICAgc3Rh
dGljIHZvaWQgZGVzdHJveShBdG9taWNTdHJpbmdUYWJsZSopOwotCi0gICAgSGFzaFNldDxTdHJp
bmdJbXBsKj4gbV90YWJsZTsKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9DU3RyaW5nLmNwcCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyMWIzN2ViYThjMjU0Mzk2ZmYxZmJmYzEwNWNmMzM4M2Q0NjBhODI0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDgsIDIw
MDksIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQ1N0cmluZy5oIgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hlci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotUmVmPENTdHJpbmdCdWZmZXI+IENT
dHJpbmdCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVChsZW5ndGggPCAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpIC0gc2l6ZW9mKENTdHJpbmdCdWZmZXIpKSk7Ci0KLSAgICAvLyBUaGUgKzEgaXMgZm9yIHRo
ZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4KLSAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihD
U3RyaW5nQnVmZmVyKSArIGxlbmd0aCArIDE7Ci0gICAgQ1N0cmluZ0J1ZmZlciogc3RyaW5nQnVm
ZmVyID0gc3RhdGljX2Nhc3Q8Q1N0cmluZ0J1ZmZlcio+KGZhc3RNYWxsb2Moc2l6ZSkpOwotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IChOb3ROdWxsLCBzdHJpbmdCdWZmZXIpIENTdHJpbmdCdWZm
ZXIobGVuZ3RoKSk7Ci19Ci0KLUNTdHJpbmc6OkNTdHJpbmcoY29uc3QgY2hhciogc3RyKQotewot
ICAgIGlmICghc3RyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbml0KHN0ciwgc3RybGVuKHN0
cikpOwotfQotCi1DU3RyaW5nOjpDU3RyaW5nKGNvbnN0IGNoYXIqIHN0ciwgc2l6ZV90IGxlbmd0
aCkKLXsKLSAgICBpZiAoIXN0cikgewotICAgICAgICBBU1NFUlQoIWxlbmd0aCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpbml0KHN0ciwgbGVuZ3RoKTsKLX0KLQotdm9pZCBDU3Ry
aW5nOjppbml0KGNvbnN0IGNoYXIqIHN0ciwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBBU1NFUlQo
c3RyKTsKLQotICAgIG1fYnVmZmVyID0gQ1N0cmluZ0J1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXpl
ZChsZW5ndGgpOwotICAgIG1lbWNweShtX2J1ZmZlci0+bXV0YWJsZURhdGEoKSwgc3RyLCBsZW5n
dGgpOyAKLSAgICBtX2J1ZmZlci0+bXV0YWJsZURhdGEoKVtsZW5ndGhdID0gJ1wwJzsKLX0KLQot
Y2hhciogQ1N0cmluZzo6bXV0YWJsZURhdGEoKQotewotICAgIGNvcHlCdWZmZXJJZk5lZWRlZCgp
OwotICAgIGlmICghbV9idWZmZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2J1
ZmZlci0+bXV0YWJsZURhdGEoKTsKLX0KLQotQ1N0cmluZyBDU3RyaW5nOjpuZXdVbmluaXRpYWxp
emVkKHNpemVfdCBsZW5ndGgsIGNoYXIqJiBjaGFyYWN0ZXJCdWZmZXIpCi17Ci0gICAgQ1N0cmlu
ZyByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1fYnVmZmVyID0gQ1N0cmluZ0J1ZmZlcjo6Y3JlYXRlVW5p
bml0aWFsaXplZChsZW5ndGgpOwotICAgIGNoYXIqIGJ5dGVzID0gcmVzdWx0Lm1fYnVmZmVyLT5t
dXRhYmxlRGF0YSgpOwotICAgIGJ5dGVzW2xlbmd0aF0gPSAnXDAnOwotICAgIGNoYXJhY3RlckJ1
ZmZlciA9IGJ5dGVzOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgQ1N0cmluZzo6Y29w
eUJ1ZmZlcklmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fYnVmZmVyIHx8IG1fYnVmZmVyLT5oYXNP
bmVSZWYoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPENTdHJpbmdCdWZmZXI+IGJ1
ZmZlciA9IFdURk1vdmUobV9idWZmZXIpOwotICAgIHNpemVfdCBsZW5ndGggPSBidWZmZXItPmxl
bmd0aCgpOwotICAgIG1fYnVmZmVyID0gQ1N0cmluZ0J1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXpl
ZChsZW5ndGgpOwotICAgIG1lbWNweShtX2J1ZmZlci0+bXV0YWJsZURhdGEoKSwgYnVmZmVyLT5k
YXRhKCksIGxlbmd0aCArIDEpOwotfQotCi1ib29sIENTdHJpbmc6OmlzU2FmZVRvU2VuZFRvQW5v
dGhlclRocmVhZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX2J1ZmZlciB8fCBtX2J1ZmZlci0+
aGFzT25lUmVmKCk7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBDU3RyaW5nJiBhLCBjb25z
dCBDU3RyaW5nJiBiKQotewotICAgIGlmIChhLmlzTnVsbCgpICE9IGIuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5sZW5ndGgoKSAhPSBiLmxlbmd0aCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuICFtZW1jbXAoYS5kYXRhKCksIGIuZGF0YSgp
LCBhLmxlbmd0aCgpKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTdHJpbmcmIGEsIGNv
bnN0IGNoYXIqIGIpCi17Ci0gICAgaWYgKGEuaXNOdWxsKCkgIT0gIWIpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAh
c3RyY21wKGEuZGF0YSgpLCBiKTsKLX0KLQotdW5zaWduZWQgQ1N0cmluZzo6aGFzaCgpIGNvbnN0
Ci17Ci0gICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBTdHJpbmdIYXNo
ZXIgaGFzaGVyOwotICAgIGZvciAoY29uc3QgY2hhciogcHRyID0gZGF0YSgpOyAqcHRyOyArK3B0
cikKLSAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcigqcHRyKTsKLSAgICByZXR1cm4gaGFzaGVy
Lmhhc2goKTsKLX0KLQotYm9vbCBvcGVyYXRvcjwoY29uc3QgQ1N0cmluZyYgYSwgY29uc3QgQ1N0
cmluZyYgYikKLXsKLSAgICBpZiAoYS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuICFiLmlzTnVs
bCgpOwotICAgIGlmIChiLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIHN0cmNtcChhLmRhdGEoKSwgYi5kYXRhKCkpIDwgMDsKLX0KLQotYm9vbCBDU3RyaW5nSGFz
aDo6ZXF1YWwoY29uc3QgQ1N0cmluZyYgYSwgY29uc3QgQ1N0cmluZyYgYikKLXsKLSAgICBpZiAo
YS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQotICAgICAgICByZXR1cm4gYi5pc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpOwotICAgIGlmIChiLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYSA9PSBiOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXVEYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90
ZXh0L0NTdHJpbmcuaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L0NT
dHJpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4ZDgwMzk5YzY5MDBiMTMz
ZTcxNWM0MzA3ZDhkNDI0MzgzZDZmYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9DU3Ry
aW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgQ1N0cmluZ19oCi0jZGVmaW5lIENTdHJpbmdfaAotCi0jaW5jbHVkZSA8d3RmL0hh
c2hGdW5jdGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgotI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV1RGIHsK
LQotLy8gQ1N0cmluZ0J1ZmZlciBpcyB0aGUgcmVmLWNvdW50ZWQgc3RvcmFnZSBjbGFzcyBmb3Ig
dGhlIGNoYXJhY3RlcnMgaW4gYSBDU3RyaW5nLgotLy8gVGhlIGRhdGEgaXMgaW1wbGljaXRseSBh
bGxvY2F0ZWQgMSBjaGFyYWN0ZXIgbG9uZ2VyIHRoYW4gbGVuZ3RoKCksIGFzIGl0IGlzIHplcm8t
dGVybWluYXRlZC4KLWNsYXNzIENTdHJpbmdCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxDU3Ry
aW5nQnVmZmVyPiB7Ci1wdWJsaWM6Ci0gICAgY29uc3QgY2hhciogZGF0YSgpIHsgcmV0dXJuIG11
dGFibGVEYXRhKCk7IH0KLSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5n
dGg7IH0KLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ1N0cmluZzsKLQotICAgIHN0YXRp
YyBSZWY8Q1N0cmluZ0J1ZmZlcj4gY3JlYXRlVW5pbml0aWFsaXplZChzaXplX3QgbGVuZ3RoKTsK
LQotICAgIENTdHJpbmdCdWZmZXIoc2l6ZV90IGxlbmd0aCkgOiBtX2xlbmd0aChsZW5ndGgpIHsg
fQotICAgIGNoYXIqIG11dGFibGVEYXRhKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8
Y2hhcio+KHRoaXMgKyAxKTsgfQotCi0gICAgY29uc3Qgc2l6ZV90IG1fbGVuZ3RoOwotfTsKLQot
Ly8gQSBjb250YWluZXIgZm9yIGEgbnVsbC10ZXJtaW5hdGVkIGNoYXIgYXJyYXkgc3VwcG9ydGlu
ZyBjb3B5LW9uLXdyaXRlCi0vLyBhc3NpZ25tZW50LiAgVGhlIGNvbnRhaW5lZCBjaGFyIGFycmF5
IG1heSBiZSBudWxsLgotY2xhc3MgQ1N0cmluZyB7Ci1wdWJsaWM6Ci0gICAgQ1N0cmluZygpIHsg
fQotICAgIFdURl9FWFBPUlRfUFJJVkFURSBDU3RyaW5nKGNvbnN0IGNoYXIqKTsKLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgQ1N0cmluZyhjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCk7Ci0gICAg
Q1N0cmluZyhDU3RyaW5nQnVmZmVyKiBidWZmZXIpIDogbV9idWZmZXIoYnVmZmVyKSB7IH0KLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIENTdHJpbmcgbmV3VW5pbml0aWFsaXplZChzaXpl
X3QgbGVuZ3RoLCBjaGFyKiYgY2hhcmFjdGVyQnVmZmVyKTsKLSAgICBDU3RyaW5nKEhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9idWZmZXIoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0K
LQotICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
YnVmZmVyID8gbV9idWZmZXItPmRhdGEoKSA6IDA7Ci0gICAgfQotICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBjaGFyKiBtdXRhYmxlRGF0YSgpOwotICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZmZXItPmxlbmd0aCgpIDogMDsKLSAg
ICB9Ci0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX2J1ZmZlcjsgfQotICAg
IGJvb2wgaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkgY29uc3Q7Ci0KLSAgICBDU3RyaW5n
QnVmZmVyKiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5nZXQoKTsgfQotICAgIAot
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZl
ci5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9Ci0gICAgCi0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNvcHlCdWZm
ZXJJZk5lZWRlZCgpOwotICAgIHZvaWQgaW5pdChjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCk7
Ci0gICAgUmVmUHRyPENTdHJpbmdCdWZmZXI+IG1fYnVmZmVyOwotfTsKLQotV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDU3RyaW5nJiBhLCBjb25zdCBDU3RyaW5nJiBi
KTsKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ1N0cmluZyYgYSwgY29uc3QgQ1N0cmlu
ZyYgYikgeyByZXR1cm4gIShhID09IGIpOyB9Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpOwotaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBDU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiAhKGEgPT0g
Yik7IH0KLVdURl9FWFBPUlRfUFJJVkFURSBib29sIG9wZXJhdG9yPChjb25zdCBDU3RyaW5nJiBh
LCBjb25zdCBDU3RyaW5nJiBiKTsKLQotc3RydWN0IENTdHJpbmdIYXNoIHsKLSAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBDU3RyaW5nJiBzdHJpbmcpIHsgcmV0dXJuIHN0cmluZy5oYXNo
KCk7IH0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ1N0
cmluZyYgYSwgY29uc3QgQ1N0cmluZyYgYik7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IERlZmF1bHRIYXNoOwotdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8Q1N0
cmluZz4gewotICAgIHR5cGVkZWYgQ1N0cmluZ0hhc2ggSGFzaDsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwotdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxDU3RyaW5nPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxDU3RyaW5nPiB7IH07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OkNTdHJpbmc7Ci0KLSNlbmRpZiAvLyBDU3RyaW5n
X2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L0Nv
bnZlcnNpb25Nb2RlLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9D
b252ZXJzaW9uTW9kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzE3MjcyODdj
ZDY5Y2NjNTA5ODEzMjYyMGJlNTAwNjZjZDU5M2I0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90
ZXh0L0NvbnZlcnNpb25Nb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ29udmVy
c2lvbk1vZGVfaAotI2RlZmluZSBDb252ZXJzaW9uTW9kZV9oCi0KLW5hbWVzcGFjZSBXVEYgewot
Ci10eXBlZGVmIGVudW0gewotICAgIExlbmllbnRDb252ZXJzaW9uLAotICAgIFN0cmljdENvbnZl
cnNpb24sCi0gICAgU3RyaWN0Q29udmVyc2lvblJlcGxhY2luZ1VucGFpcmVkU3Vycm9nYXRlc1dp
dGhGRkZELAotfSBDb252ZXJzaW9uTW9kZTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5n
IFdURjo6Q29udmVyc2lvbk1vZGU7Ci11c2luZyBXVEY6OkxlbmllbnRDb252ZXJzaW9uOwotdXNp
bmcgV1RGOjpTdHJpY3RDb252ZXJzaW9uOwotdXNpbmcgV1RGOjpTdHJpY3RDb252ZXJzaW9uUmVw
bGFjaW5nVW5wYWlyZWRTdXJyb2dhdGVzV2l0aEZGRkQ7Ci0KLSNlbmRpZiAvLyBDb252ZXJzaW9u
TW9kZV9oCi0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90
ZXh0L0ludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi90ZXh0L0ludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNjE5NDJlN2ZjNGIyNWNhMWI5MDU2MjQwMTc5ZDgxN2ZhYWY1Yjli
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9u
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBJbnRl
Z2VyVG9TdHJpbmdDb252ZXJzaW9uX2gKLSNkZWZpbmUgSW50ZWdlclRvU3RyaW5nQ29udmVyc2lv
bl9oCi0KLW5hbWVzcGFjZSBXVEYgewotCi1lbnVtIFBvc2l0aXZlT3JOZWdhdGl2ZU51bWJlciB7
Ci0gICAgUG9zaXRpdmVOdW1iZXIsCi0gICAgTmVnYXRpdmVOdW1iZXIKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uVHJhaXQ7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuc2lnbmVkSW50ZWdlclR5cGUsIFBvc2l0aXZl
T3JOZWdhdGl2ZU51bWJlciBOdW1iZXJUeXBlLCB0eXBlbmFtZSBBZGRpdGlvbmFsQXJndW1lbnRU
eXBlPgotc3RhdGljIHR5cGVuYW1lIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDxUPjo6
UmV0dXJuVHlwZSBudW1iZXJUb1N0cmluZ0ltcGwoVW5zaWduZWRJbnRlZ2VyVHlwZSBudW1iZXIs
IEFkZGl0aW9uYWxBcmd1bWVudFR5cGUgYWRkaXRpb25hbEFyZ3VtZW50KQotewotICAgIExDaGFy
IGJ1ZltzaXplb2YoVW5zaWduZWRJbnRlZ2VyVHlwZSkgKiAzICsgMV07Ci0gICAgTENoYXIqIGVu
ZCA9IHN0ZDo6ZW5kKGJ1Zik7Ci0gICAgTENoYXIqIHAgPSBlbmQ7Ci0KLSAgICBkbyB7Ci0gICAg
ICAgICotLXAgPSBzdGF0aWNfY2FzdDxMQ2hhcj4oKG51bWJlciAlIDEwKSArICcwJyk7Ci0gICAg
ICAgIG51bWJlciAvPSAxMDsKLSAgICB9IHdoaWxlIChudW1iZXIpOwotCi0gICAgaWYgKE51bWJl
clR5cGUgPT0gTmVnYXRpdmVOdW1iZXIpCi0gICAgICAgICotLXAgPSAnLSc7Ci0KLSAgICByZXR1
cm4gSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0PFQ+OjpmbHVzaChwLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZW5kIC0gcCksIGFkZGl0aW9uYWxBcmd1bWVudCk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNpZ25lZEludGVnZXJUeXBlPgotaW5saW5lIHR5cGVuYW1l
IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb25UcmFpdDxUPjo6UmV0dXJuVHlwZSBudW1iZXJUb1N0
cmluZ1NpZ25lZChTaWduZWRJbnRlZ2VyVHlwZSBudW1iZXIsIHR5cGVuYW1lIEludGVnZXJUb1N0
cmluZ0NvbnZlcnNpb25UcmFpdDxUPjo6QWRkaXRpb25hbEFyZ3VtZW50VHlwZSogYWRkaXRpb25h
bEFyZ3VtZW50ID0gbnVsbHB0cikKLXsKLSAgICBpZiAobnVtYmVyIDwgMCkKLSAgICAgICAgcmV0
dXJuIG51bWJlclRvU3RyaW5nSW1wbDxULCB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8U2ln
bmVkSW50ZWdlclR5cGU+Ojp0eXBlLCBOZWdhdGl2ZU51bWJlcj4oLW51bWJlciwgYWRkaXRpb25h
bEFyZ3VtZW50KTsKLSAgICByZXR1cm4gbnVtYmVyVG9TdHJpbmdJbXBsPFQsIHR5cGVuYW1lIHN0
ZDo6bWFrZV91bnNpZ25lZDxTaWduZWRJbnRlZ2VyVHlwZT46OnR5cGUsIFBvc2l0aXZlTnVtYmVy
PihudW1iZXIsIGFkZGl0aW9uYWxBcmd1bWVudCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFVuc2lnbmVkSW50ZWdlclR5cGU+Ci1pbmxpbmUgdHlwZW5hbWUgSW50ZWdlclRv
U3RyaW5nQ29udmVyc2lvblRyYWl0PFQ+OjpSZXR1cm5UeXBlIG51bWJlclRvU3RyaW5nVW5zaWdu
ZWQoVW5zaWduZWRJbnRlZ2VyVHlwZSBudW1iZXIsIHR5cGVuYW1lIEludGVnZXJUb1N0cmluZ0Nv
bnZlcnNpb25UcmFpdDxUPjo6QWRkaXRpb25hbEFyZ3VtZW50VHlwZSogYWRkaXRpb25hbEFyZ3Vt
ZW50ID0gbnVsbHB0cikKLXsKLSAgICByZXR1cm4gbnVtYmVyVG9TdHJpbmdJbXBsPFQsIFVuc2ln
bmVkSW50ZWdlclR5cGUsIFBvc2l0aXZlTnVtYmVyPihudW1iZXIsIGFkZGl0aW9uYWxBcmd1bWVu
dCk7Ci19Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVW5z
aWduZWRJbnRlZ2VyVHlwZSwgUG9zaXRpdmVPck5lZ2F0aXZlTnVtYmVyIE51bWJlclR5cGU+Ci1z
dGF0aWMgdm9pZCB3cml0ZU51bWJlclRvQnVmZmVySW1wbChVbnNpZ25lZEludGVnZXJUeXBlIG51
bWJlciwgQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24pCi17Ci0gICAgTENoYXIgYnVmW3NpemVv
ZihVbnNpZ25lZEludGVnZXJUeXBlKSAqIDMgKyAxXTsKLSAgICBMQ2hhciogZW5kID0gc3RkOjpl
bmQoYnVmKTsKLSAgICBMQ2hhciogcCA9IGVuZDsKLQotICAgIGRvIHsKLSAgICAgICAgKi0tcCA9
IHN0YXRpY19jYXN0PExDaGFyPigobnVtYmVyICUgMTApICsgJzAnKTsKLSAgICAgICAgbnVtYmVy
IC89IDEwOwotICAgIH0gd2hpbGUgKG51bWJlcik7Ci0KLSAgICBpZiAoTnVtYmVyVHlwZSA9PSBO
ZWdhdGl2ZU51bWJlcikKLSAgICAgICAgKi0tcCA9ICctJzsKLSAgICAKLSAgICB3aGlsZSAocCA8
IGVuZCkKLSAgICAgICAgKmRlc3RpbmF0aW9uKysgPSBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJUeXBl
PigqcCsrKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUg
U2lnbmVkSW50ZWdlclR5cGU+Ci1pbmxpbmUgdm9pZCB3cml0ZU51bWJlclRvQnVmZmVyU2lnbmVk
KFNpZ25lZEludGVnZXJUeXBlIG51bWJlciwgQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24pCi17
Ci0gICAgaWYgKG51bWJlciA8IDApCi0gICAgICAgIHJldHVybiB3cml0ZU51bWJlclRvQnVmZmVy
SW1wbDxDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8U2lnbmVkSW50
ZWdlclR5cGU+Ojp0eXBlLCBOZWdhdGl2ZU51bWJlcj4oLW51bWJlciwgZGVzdGluYXRpb24pOwot
ICAgIHJldHVybiB3cml0ZU51bWJlclRvQnVmZmVySW1wbDxDaGFyYWN0ZXJUeXBlLCB0eXBlbmFt
ZSBzdGQ6Om1ha2VfdW5zaWduZWQ8U2lnbmVkSW50ZWdlclR5cGU+Ojp0eXBlLCBQb3NpdGl2ZU51
bWJlcj4obnVtYmVyLCBkZXN0aW5hdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGUsIHR5cGVuYW1lIFVuc2lnbmVkSW50ZWdlclR5cGU+Ci1pbmxpbmUgdm9pZCB3cml0
ZU51bWJlclRvQnVmZmVyVW5zaWduZWQoVW5zaWduZWRJbnRlZ2VyVHlwZSBudW1iZXIsIENoYXJh
Y3RlclR5cGUqIGRlc3RpbmF0aW9uKQotewotICAgIHJldHVybiB3cml0ZU51bWJlclRvQnVmZmVy
SW1wbDxDaGFyYWN0ZXJUeXBlLCBVbnNpZ25lZEludGVnZXJUeXBlLCBQb3NpdGl2ZU51bWJlcj4o
bnVtYmVyLCBkZXN0aW5hdGlvbik7Ci19Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5zaWduZWRJ
bnRlZ2VyVHlwZSwgUG9zaXRpdmVPck5lZ2F0aXZlTnVtYmVyIE51bWJlclR5cGU+Ci1zdGF0aWMg
dW5zaWduZWQgbGVuZ3RoT2ZOdW1iZXJBc1N0cmluZ0ltcGwoVW5zaWduZWRJbnRlZ2VyVHlwZSBu
dW1iZXIpCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLQotICAgIGRvIHsKLSAgICAgICAg
KytsZW5ndGg7Ci0gICAgICAgIG51bWJlciAvPSAxMDsKLSAgICB9IHdoaWxlIChudW1iZXIpOwot
Ci0gICAgaWYgKE51bWJlclR5cGUgPT0gTmVnYXRpdmVOdW1iZXIpCi0gICAgICAgICsrbGVuZ3Ro
OwotCi0gICAgcmV0dXJuIGxlbmd0aDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU2lnbmVkSW50
ZWdlclR5cGU+Ci1pbmxpbmUgdW5zaWduZWQgbGVuZ3RoT2ZOdW1iZXJBc1N0cmluZ1NpZ25lZChT
aWduZWRJbnRlZ2VyVHlwZSBudW1iZXIpCi17Ci0gICAgaWYgKG51bWJlciA8IDApCi0gICAgICAg
IHJldHVybiBsZW5ndGhPZk51bWJlckFzU3RyaW5nSW1wbDx0eXBlbmFtZSBzdGQ6Om1ha2VfdW5z
aWduZWQ8U2lnbmVkSW50ZWdlclR5cGU+Ojp0eXBlLCBOZWdhdGl2ZU51bWJlcj4oLW51bWJlcik7
Ci0gICAgcmV0dXJuIGxlbmd0aE9mTnVtYmVyQXNTdHJpbmdJbXBsPHR5cGVuYW1lIHN0ZDo6bWFr
ZV91bnNpZ25lZDxTaWduZWRJbnRlZ2VyVHlwZT46OnR5cGUsIFBvc2l0aXZlTnVtYmVyPihudW1i
ZXIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbnNpZ25lZEludGVnZXJUeXBlPgotaW5saW5l
IHVuc2lnbmVkIGxlbmd0aE9mTnVtYmVyQXNTdHJpbmdVbnNpZ25lZChVbnNpZ25lZEludGVnZXJU
eXBlIG51bWJlcikKLXsKLSAgICByZXR1cm4gbGVuZ3RoT2ZOdW1iZXJBc1N0cmluZ0ltcGw8VW5z
aWduZWRJbnRlZ2VyVHlwZSwgUG9zaXRpdmVOdW1iZXI+KG51bWJlcik7Ci19Ci0KLQotfSAvLyBu
YW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uX2gKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L0xDaGFyLmgg
Yi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9MQ2hhci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDMxZGFmYjk2MmZhOTk2Y2I1ZTU5MjBkNGExY2NiNzNi
NmU5N2RjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L0xDaGFyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKgotICovCi0KLSNpZm5kZWYgTENoYXJfaAotI2RlZmluZSBMQ2hhcl9oCi0KLS8vIEEgdHlw
ZSB0byBob2xkIGEgc2luZ2xlIExhdGluLTEgY2hhcmFjdGVyLgotLy8gVGhpcyB0eXBlIGNvbXBs
ZW1lbnRzIHRoZSBVQ2hhciB0eXBlIHRoYXQgd2UgZ2V0IGZyb20gdGhlIElDVSBsaWJyYXJ5Lgot
Ly8gVG8gcGFyYWxsZWwgdGhhdCB0eXBlLCB3ZSBwdXQgdGhpcyBvbmUgaW4gdGhlIGdsb2JhbCBu
YW1lc3BhY2UuCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgTENoYXI7Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvTGluZUJyZWFrSXRl
cmF0b3JQb29sSUNVLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9M
aW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OGU4OWMzMTE2ZWRiY2ZiMjY0MWViMDA2NGFlMGJiOWQ5MjIyODM4Zi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvdGV4dC9MaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx1bmljb2RlL3Vsb2MuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgTGluZUJyZWFrSXRlcmF0b3JQb29sIHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMaW5lQnJlYWtJdGVyYXRvclBvb2wpOwotcHVibGlj
OgotICAgIExpbmVCcmVha0l0ZXJhdG9yUG9vbCgpID0gZGVmYXVsdDsKLQotICAgIHN0YXRpYyBM
aW5lQnJlYWtJdGVyYXRvclBvb2wmIHNoYXJlZFBvb2woKQotICAgIHsKLSAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFdURjo6VGhyZWFkU3BlY2lmaWM8TGluZUJyZWFrSXRlcmF0b3JQb29s
Pj4gcG9vbDsKLSAgICAgICAgcmV0dXJuICpwb29sLmdldCgpOwotICAgIH0KLQotICAgIHN0YXRp
YyBBdG9taWNTdHJpbmcgbWFrZUxvY2FsZVdpdGhCcmVha0tleXdvcmQoY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbGUsIExpbmVCcmVha0l0ZXJhdG9yTW9kZSBtb2RlKQotICAgIHsKLSAgICAgICAg
Ly8gVGhlIHVsb2MgZnVuY3Rpb25zIG1vZGVsIGxvY2FsZXMgYXMgY2hhciosIHNvIHdlIGhhdmUg
dG8gZG93bmNvbnZlcnQgb3VyIEF0b21pY1N0cmluZy4KLSAgICAgICAgYXV0byB1dGY4TG9jYWxl
ID0gbG9jYWxlLnN0cmluZygpLnV0ZjgoKTsKLSAgICAgICAgaWYgKCF1dGY4TG9jYWxlLmxlbmd0
aCgpKQotICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTsKLSAgICAgICAgVmVjdG9yPGNoYXI+IHNj
cmF0Y2hCdWZmZXIodXRmOExvY2FsZS5sZW5ndGgoKSArIDExLCAwKTsKLSAgICAgICAgbWVtY3B5
KHNjcmF0Y2hCdWZmZXIuZGF0YSgpLCB1dGY4TG9jYWxlLmRhdGEoKSwgdXRmOExvY2FsZS5sZW5n
dGgoKSk7Ci0KLSAgICAgICAgY29uc3QgY2hhcioga2V5d29yZFZhbHVlID0gbnVsbHB0cjsKLSAg
ICAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgICAgIGNhc2UgTGluZUJyZWFrSXRlcmF0b3JNb2Rl
OjpEZWZhdWx0OgotICAgICAgICAgICAgLy8gbnVsbHB0ciB3aWxsIGNhdXNlIGFueSBleGlzdGlu
ZyB2YWx1ZXMgdG8gYmUgcmVtb3ZlZC4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IExpbmVCcmVha0l0ZXJhdG9yTW9kZTo6TG9vc2U6Ci0gICAgICAgICAgICBrZXl3b3JkVmFsdWUg
PSAibG9vc2UiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTGluZUJyZWFrSXRl
cmF0b3JNb2RlOjpOb3JtYWw6Ci0gICAgICAgICAgICBrZXl3b3JkVmFsdWUgPSAibm9ybWFsIjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExpbmVCcmVha0l0ZXJhdG9yTW9kZTo6
U3RyaWN0OgotICAgICAgICAgICAga2V5d29yZFZhbHVlID0gInN0cmljdCI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJP
X0VSUk9SOwotICAgICAgICBpbnQzMl90IGxlbmd0aE5lZWRlZCA9IHVsb2Nfc2V0S2V5d29yZFZh
bHVlKCJsYiIsIGtleXdvcmRWYWx1ZSwgc2NyYXRjaEJ1ZmZlci5kYXRhKCksIHNjcmF0Y2hCdWZm
ZXIuc2l6ZSgpLCAmc3RhdHVzKTsKLSAgICAgICAgaWYgKFVfU1VDQ0VTUyhzdGF0dXMpKQotICAg
ICAgICAgICAgcmV0dXJuIEF0b21pY1N0cmluZzo6ZnJvbVVURjgoc2NyYXRjaEJ1ZmZlci5kYXRh
KCksIGxlbmd0aE5lZWRlZCk7Ci0gICAgICAgIGlmIChzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZM
T1dfRVJST1IpIHsKLSAgICAgICAgICAgIHNjcmF0Y2hCdWZmZXIuZ3JvdyhsZW5ndGhOZWVkZWQg
KyAxKTsKLSAgICAgICAgICAgIG1lbXNldChzY3JhdGNoQnVmZmVyLmRhdGEoKSArIHV0ZjhMb2Nh
bGUubGVuZ3RoKCksIDAsIHNjcmF0Y2hCdWZmZXIuc2l6ZSgpIC0gdXRmOExvY2FsZS5sZW5ndGgo
KSk7Ci0gICAgICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgICAgICBpbnQz
Ml90IGxlbmd0aE5lZWRlZDIgPSB1bG9jX3NldEtleXdvcmRWYWx1ZSgibGIiLCBrZXl3b3JkVmFs
dWUsIHNjcmF0Y2hCdWZmZXIuZGF0YSgpLCBzY3JhdGNoQnVmZmVyLnNpemUoKSwgJnN0YXR1cyk7
Ci0gICAgICAgICAgICBpZiAoIVVfU1VDQ0VTUyhzdGF0dXMpIHx8IGxlbmd0aE5lZWRlZCAhPSBs
ZW5ndGhOZWVkZWQyKQotICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7Ci0gICAgICAgICAg
ICByZXR1cm4gQXRvbWljU3RyaW5nOjpmcm9tVVRGOChzY3JhdGNoQnVmZmVyLmRhdGEoKSwgbGVu
Z3RoTmVlZGVkKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbG9jYWxlOwotICAgIH0KLQot
ICAgIFVCcmVha0l0ZXJhdG9yKiB0YWtlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlLCBMaW5l
QnJlYWtJdGVyYXRvck1vZGUgbW9kZSkKLSAgICB7Ci0gICAgICAgIGF1dG8gbG9jYWxlV2l0aE9w
dGlvbmFsQnJlYWtLZXl3b3JkID0gbWFrZUxvY2FsZVdpdGhCcmVha0tleXdvcmQobG9jYWxlLCBt
b2RlKTsKLQotICAgICAgICBVQnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSBudWxscHRyOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcG9vbC5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgaWYgKG1fcG9vbFtpXS5maXJzdCA9PSBsb2NhbGVXaXRoT3B0aW9uYWxCcmVha0tleXdv
cmQpIHsKLSAgICAgICAgICAgICAgICBpdGVyYXRvciA9IG1fcG9vbFtpXS5zZWNvbmQ7Ci0gICAg
ICAgICAgICAgICAgbV9wb29sLnJlbW92ZShpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXRlcmF0b3IpIHsKLSAgICAg
ICAgICAgIGl0ZXJhdG9yID0gb3BlbkxpbmVCcmVha0l0ZXJhdG9yKGxvY2FsZVdpdGhPcHRpb25h
bEJyZWFrS2V5d29yZCk7Ci0gICAgICAgICAgICBpZiAoIWl0ZXJhdG9yKQotICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKCFtX3ZlbmRl
ZEl0ZXJhdG9ycy5jb250YWlucyhpdGVyYXRvcikpOwotICAgICAgICBtX3ZlbmRlZEl0ZXJhdG9y
cy5hZGQoaXRlcmF0b3IsIGxvY2FsZVdpdGhPcHRpb25hbEJyZWFrS2V5d29yZCk7Ci0gICAgICAg
IHJldHVybiBpdGVyYXRvcjsKLSAgICB9Ci0KLSAgICB2b2lkIHB1dChVQnJlYWtJdGVyYXRvciog
aXRlcmF0b3IpCi0gICAgewotICAgICAgICBBU1NFUlQobV92ZW5kZWRJdGVyYXRvcnMuY29udGFp
bnMoaXRlcmF0b3IpKTsKLSAgICAgICAgaWYgKG1fcG9vbC5zaXplKCkgPT0gY2FwYWNpdHkpIHsK
LSAgICAgICAgICAgIGNsb3NlTGluZUJyZWFrSXRlcmF0b3IobV9wb29sWzBdLnNlY29uZCk7Ci0g
ICAgICAgICAgICBtX3Bvb2wucmVtb3ZlKDApOwotICAgICAgICB9Ci0gICAgICAgIG1fcG9vbC51
bmNoZWNrZWRBcHBlbmQoeyBtX3ZlbmRlZEl0ZXJhdG9ycy50YWtlKGl0ZXJhdG9yKSwgaXRlcmF0
b3IgfSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGNh
cGFjaXR5ID0gNDsKLQotICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXRvbWljU3RyaW5nLCBVQnJlYWtJ
dGVyYXRvcio+LCBjYXBhY2l0eT4gbV9wb29sOwotICAgIEhhc2hNYXA8VUJyZWFrSXRlcmF0b3Iq
LCBBdG9taWNTdHJpbmc+IG1fdmVuZGVkSXRlcmF0b3JzOwotCi0gICAgZnJpZW5kIFdURjo6VGhy
ZWFkU3BlY2lmaWM8TGluZUJyZWFrSXRlcmF0b3JQb29sPjo6b3BlcmF0b3IgTGluZUJyZWFrSXRl
cmF0b3JQb29sKigpOwotfTsKLQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL3RleHQvTnVsbFRleHRCcmVha0l0ZXJhdG9yLmggYi9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9OdWxsVGV4dEJyZWFrSXRlcmF0b3IuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhiMWYzZTU0ZDMxM2Y4ODU3ZmU2OTcwOWU5ZDBhZjIw
MDEzYTc0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9OdWxsVGV4dEJyZWFrSXRlcmF0
b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBOdWxsVGV4dEJyZWFrSXRlcmF0b3IgewotcHVibGlj
OgotICAgIE51bGxUZXh0QnJlYWtJdGVyYXRvcigpID0gZGVmYXVsdDsKLSAgICBOdWxsVGV4dEJy
ZWFrSXRlcmF0b3IoY29uc3QgTnVsbFRleHRCcmVha0l0ZXJhdG9yJikgPSBkZWxldGU7Ci0gICAg
TnVsbFRleHRCcmVha0l0ZXJhdG9yKE51bGxUZXh0QnJlYWtJdGVyYXRvciYmKSA9IGRlZmF1bHQ7
Ci0gICAgTnVsbFRleHRCcmVha0l0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgTnVsbFRleHRCcmVh
a0l0ZXJhdG9yJikgPSBkZWxldGU7Ci0gICAgTnVsbFRleHRCcmVha0l0ZXJhdG9yJiBvcGVyYXRv
cj0oTnVsbFRleHRCcmVha0l0ZXJhdG9yJiYpID0gZGVmYXVsdDsKLQotICAgIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IHByZWNlZGluZyh1bnNpZ25lZCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGZvbGxvd2luZyh1bnNpZ25lZCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0K
LQotICAgIGJvb2wgaXNCb3VuZGFyeSh1bnNpZ25lZCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
dm9pZCBzZXRUZXh0KFN0cmluZ1ZpZXcpCi0gICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICB9Ci19OwotCi19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0
Y2hNYXJrZXIvd3RmL3RleHQvU3RyaW5nQnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGYyOTNkMzMzZGJlM2U0NWU2MzdhMTQ4NjczM2QwYTJmZDhjMDhjMGMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL3RleHQvU3RyaW5nQnVmZmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAg
ICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgU3RyaW5nQnVmZmVyX2gKLSNkZWZpbmUgU3RyaW5nQnVmZmVyX2gK
LQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1
ZGUgPHVuaWNvZGUvdXR5cGVzLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhclR5cGU+Ci1jbGFzcyBTdHJpbmdCdWZmZXIgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFN0cmluZ0J1ZmZlcik7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgU3RyaW5nQnVmZmVy
KHVuc2lnbmVkIGxlbmd0aCkKLSAgICAgICAgOiBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwg
bV9kYXRhKG1fbGVuZ3RoID8gc3RhdGljX2Nhc3Q8Q2hhclR5cGUqPihmYXN0TWFsbG9jKChDaGVj
a2VkPHNpemVfdD4obV9sZW5ndGgpICogc2l6ZW9mKENoYXJUeXBlKSkudW5zYWZlR2V0KCkpKSA6
IG51bGxwdHIpCi0gICAgewotICAgIH0KLQotICAgIH5TdHJpbmdCdWZmZXIoKQotICAgIHsKLSAg
ICAgICAgZmFzdEZyZWUobV9kYXRhKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNocmluayh1bnNpZ25l
ZCBuZXdMZW5ndGgpCi0gICAgewotICAgICAgICBBU1NFUlQobmV3TGVuZ3RoIDw9IG1fbGVuZ3Ro
KTsKLSAgICAgICAgbV9sZW5ndGggPSBuZXdMZW5ndGg7Ci0gICAgfQotCi0gICAgdm9pZCByZXNp
emUodW5zaWduZWQgbmV3TGVuZ3RoKQotICAgIHsKLSAgICAgICAgaWYgKG5ld0xlbmd0aCA+IG1f
bGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAobmV3TGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpIC8gc2l6ZW9mKFVDaGFyKSkKLSAgICAgICAgICAgICAgICBDUkFT
SCgpOwotICAgICAgICAgICAgbV9kYXRhID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0UmVhbGxv
YyhtX2RhdGEsIG5ld0xlbmd0aCAqIHNpemVvZihVQ2hhcikpKTsKLSAgICAgICAgfQotICAgICAg
ICBtX2xlbmd0aCA9IG5ld0xlbmd0aDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQotICAgIENoYXJUeXBlKiBjaGFyYWN0ZXJzKCkgeyBy
ZXR1cm4gbV9kYXRhOyB9Ci0KLSAgICBDaGFyVHlwZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSB7
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX2xlbmd0aCk7IHJldHVybiBt
X2RhdGFbaV07IH0KLQotICAgIE1hbGxvY1B0cjxDaGFyVHlwZT4gcmVsZWFzZSgpCi0gICAgewot
ICAgICAgICBDaGFyVHlwZSogZGF0YSA9IG1fZGF0YTsKLSAgICAgICAgbV9kYXRhID0gMDsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0TWFsbG9jUHRyKGRhdGEpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICBDaGFyVHlwZSogbV9kYXRhOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6U3RyaW5nQnVmZmVyOwotCi0jZW5kaWYgLy8gU3Ry
aW5nQnVmZmVyX2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGFjZmRjMDA3OTY5NmFlZDFmZmE5OTgwOGNjMGNlMDdkYWVjMTY0ZjUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0Njkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMywgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgi
Ci0KLSNpbmNsdWRlICJJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiV1RG
U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL2R0b2EuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotc3RhdGljIHVuc2lnbmVkIGV4cGFuZGVkQ2FwYWNp
dHkodW5zaWduZWQgY2FwYWNpdHksIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQotewotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQ2FwYWNpdHkgPSAxNjsKLSAgICByZXR1cm4gc3Rk
OjptYXgocmVxdWlyZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgY2FwYWNpdHkg
KiAyKSk7Ci19Ci0KLXZvaWQgU3RyaW5nQnVpbGRlcjo6cmVpZnlTdHJpbmcoKSBjb25zdAotewot
ICAgIC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgYWxyZWFkeSBleGlzdHMuCi0gICAgaWYgKCFtX3N0
cmluZy5pc051bGwoKSkgewotICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9s
ZW5ndGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgZm9yIGVtcHR5
LgotICAgIGlmICghbV9sZW5ndGgpIHsKLSAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpl
bXB0eSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gTXVzdCBiZSB2YWxpZCBp
biB0aGUgYnVmZmVyLCB0YWtlIGEgc3Vic3RyaW5nICh1bmxlc3Mgc3RyaW5nIGZpbGxzIHRoZSBi
dWZmZXIpLgotICAgIEFTU0VSVChtX2J1ZmZlciAmJiBtX2xlbmd0aCA8PSBtX2J1ZmZlci0+bGVu
Z3RoKCkpOwotICAgIGlmIChtX2xlbmd0aCA9PSBtX2J1ZmZlci0+bGVuZ3RoKCkpCi0gICAgICAg
IG1fc3RyaW5nID0gbV9idWZmZXIuZ2V0KCk7Ci0gICAgZWxzZQotICAgICAgICBtX3N0cmluZyA9
IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCptX2J1ZmZlciwgMCwgbV9s
ZW5ndGgpOwotfQotCi12b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2l6ZSh1bnNpZ25lZCBuZXdTaXpl
KQotewotICAgIC8vIENoZWNrIG5ld1NpemUgPCBtX2xlbmd0aCwgaGVuY2UgbV9sZW5ndGggPiAw
LgotICAgIEFTU0VSVChuZXdTaXplIDw9IG1fbGVuZ3RoKTsKLSAgICBpZiAobmV3U2l6ZSA9PSBt
X2xlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2xlbmd0aCk7Ci0KLSAgICAv
LyBJZiB0aGVyZSBpcyBhIGJ1ZmZlciwgd2Ugb25seSBuZWVkIHRvIGR1cGxpY2F0ZSBpdCBpZiBp
dCBoYXMgbW9yZSB0aGFuIG9uZSByZWYuCi0gICAgaWYgKG1fYnVmZmVyKSB7Ci0gICAgICAgIG1f
c3RyaW5nID0gU3RyaW5nKCk7IC8vIENsZWFyIHRoZSBzdHJpbmcgdG8gcmVtb3ZlIHRoZSByZWZl
cmVuY2UgdG8gbV9idWZmZXIgaWYgYW55IGJlZm9yZSBjaGVja2luZyB0aGUgcmVmZXJlbmNlIGNv
dW50IG9mIG1fYnVmZmVyLgotICAgICAgICBpZiAoIW1fYnVmZmVyLT5oYXNPbmVSZWYoKSkgewot
ICAgICAgICAgICAgaWYgKG1fYnVmZmVyLT5pczhCaXQoKSkKLSAgICAgICAgICAgICAgICBhbGxv
Y2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgbV9idWZmZXItPmxlbmd0aCgpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZl
ci0+Y2hhcmFjdGVyczE2KCksIG1fYnVmZmVyLT5sZW5ndGgoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgbV9sZW5ndGggPSBuZXdTaXplOwotICAgICAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgp
ID49IG1fbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFNpbmNlIG1f
bGVuZ3RoICYmICFtX2J1ZmZlciwgdGhlIHN0cmluZyBtdXN0IGJlIHZhbGlkIGluIG1fc3RyaW5n
LCBhbmQgbV9zdHJpbmcubGVuZ3RoKCkgPiAwLgotICAgIEFTU0VSVCghbV9zdHJpbmcuaXNFbXB0
eSgpKTsKLSAgICBBU1NFUlQobV9sZW5ndGggPT0gbV9zdHJpbmcubGVuZ3RoKCkpOwotICAgIEFT
U0VSVChuZXdTaXplIDwgbV9zdHJpbmcubGVuZ3RoKCkpOwotICAgIG1fbGVuZ3RoID0gbmV3U2l6
ZTsKLSAgICBtX3N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBs
KCptX3N0cmluZy5pbXBsKCksIDAsIG5ld1NpemUpOwotfQotCi0vLyBBbGxvY2F0ZSBhIG5ldyA4
IGJpdCBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENoYXJhY3RlcnMgKHRoZXNlIG1heSBjb21l
IGZyb20gZWl0aGVyIG1fc3RyaW5nCi0vLyBvciBtX2J1ZmZlciwgbmVpdGhlciB3aWxsIGJlIHJl
YXNzaWduZWQgdW50aWwgdGhlIGNvcHkgaGFzIGNvbXBsZXRlZCkuCi12b2lkIFN0cmluZ0J1aWxk
ZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWdu
ZWQgcmVxdWlyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKG1faXM4Qml0KTsKLSAgICAvLyBDb3B5
IHRoZSBleGlzdGluZyBkYXRhIGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVzdWx0IHRvIHBvaW50
IHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGRhdGEuCi0gICAgYXV0byBidWZmZXIgPSBTdHJp
bmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJh
Y3RlcnM4KTsKLSAgICBtZW1jcHkobV9idWZmZXJDaGFyYWN0ZXJzOCwgY3VycmVudENoYXJhY3Rl
cnMsIHN0YXRpY19jYXN0PHNpemVfdD4obV9sZW5ndGgpICogc2l6ZW9mKExDaGFyKSk7IC8vIFRo
aXMgY2FuJ3Qgb3ZlcmZsb3cuCi0gICAgCi0gICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRl
LgotICAgIG1fYnVmZmVyID0gV1RGTW92ZShidWZmZXIpOwotICAgIG1fc3RyaW5nID0gU3RyaW5n
KCk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA9PSByZXF1aXJlZExlbmd0aCk7Ci19
Ci0KLS8vIEFsbG9jYXRlIGEgbmV3IDE2IGJpdCBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENo
YXJhY3RlcnMgKHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5nCi0vLyBvciBtX2J1
ZmZlciwgIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVudGlsIHRoZSBjb3B5IGhhcyBjb21w
bGV0ZWQpLgotdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciog
Y3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQotewotICAgIEFTU0VS
VCghbV9pczhCaXQpOwotICAgIC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5ldyBi
dWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0
YS4KLSAgICBhdXRvIGJ1ZmZlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVx
dWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVyczE2KTsKLSAgICBtZW1jcHkobV9idWZmZXJD
aGFyYWN0ZXJzMTYsIGN1cnJlbnRDaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVu
Z3RoKSAqIHNpemVvZihVQ2hhcikpOyAvLyBUaGlzIGNhbid0IG92ZXJmbG93LgotICAgIAotICAg
IC8vIFVwZGF0ZSB0aGUgYnVpbGRlciBzdGF0ZS4KLSAgICBtX2J1ZmZlciA9IFdURk1vdmUoYnVm
ZmVyKTsKLSAgICBtX3N0cmluZyA9IFN0cmluZygpOwotICAgIEFTU0VSVChtX2J1ZmZlci0+bGVu
Z3RoKCkgPT0gcmVxdWlyZWRMZW5ndGgpOwotfQotCi0vLyBBbGxvY2F0ZSBhIG5ldyAxNiBiaXQg
YnVmZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRDaGFyYWN0ZXJzICh3aGljaCBpcyA4IGJpdCBhbmQg
bWF5IGNvbWUKLS8vIGZyb20gZWl0aGVyIG1fc3RyaW5nIG9yIG1fYnVmZmVyLCBuZWl0aGVyIHdp
bGwgYmUgcmVhc3NpZ25lZCB1bnRpbCB0aGUgY29weSBoYXMgY29tcGxldGVkKS4KLXZvaWQgU3Ry
aW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXJVcENvbnZlcnQoY29uc3QgTENoYXIqIGN1cnJlbnRD
aGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKLXsKLSAgICBBU1NFUlQobV9pczhC
aXQpOwotICAgIEFTU0VSVChyZXF1aXJlZExlbmd0aCA+PSBtX2xlbmd0aCk7Ci0gICAgLy8gQ29w
eSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciwgc2V0IHJlc3VsdCB0byBwb2lu
dCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBkYXRhLgotICAgIGF1dG8gYnVmZmVyID0gU3Ry
aW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFy
YWN0ZXJzMTYpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKQot
ICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNltpXSA9IGN1cnJlbnRDaGFyYWN0ZXJzW2ldOwot
ICAgIAotICAgIG1faXM4Qml0ID0gZmFsc2U7Ci0gICAgCi0gICAgLy8gVXBkYXRlIHRoZSBidWls
ZGVyIHN0YXRlLgotICAgIG1fYnVmZmVyID0gV1RGTW92ZShidWZmZXIpOwotICAgIG1fc3RyaW5n
ID0gU3RyaW5nKCk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA9PSByZXF1aXJlZExl
bmd0aCk7Ci19Ci0KLXRlbXBsYXRlIDw+Ci12b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVC
dWZmZXI8TENoYXI+KHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQotewotICAgIC8vIElmIHRoZSBi
dWZmZXIgaGFzIG9ubHkgb25lIHJlZiAoYnkgdGhpcyBTdHJpbmdCdWlsZGVyKSwgcmVhbGxvY2F0
ZSBpdCwKLSAgICAvLyBvdGhlcndpc2UgZmFsbCBiYWNrIHRvICJhbGxvY2F0ZSBhbmQgY29weSIg
bWV0aG9kLgotICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgCi0gICAgQVNTRVJUKG1faXM4
Qml0KTsKLSAgICBBU1NFUlQobV9idWZmZXItPmlzOEJpdCgpKTsKLSAgICAKLSAgICBpZiAobV9i
dWZmZXItPmhhc09uZVJlZigpKQotICAgICAgICBtX2J1ZmZlciA9IFN0cmluZ0ltcGw6OnJlYWxs
b2NhdGUobV9idWZmZXIucmVsZWFzZU5vbk51bGwoKSwgcmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVy
Q2hhcmFjdGVyczgpOwotICAgIGVsc2UKLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXIt
PmNoYXJhY3RlcnM4KCksIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICBBU1NFUlQobV9idWZmZXItPmxl
bmd0aCgpID09IHJlcXVpcmVkTGVuZ3RoKTsKLX0KLQotdGVtcGxhdGUgPD4KLXZvaWQgU3RyaW5n
QnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4odW5zaWduZWQgcmVxdWlyZWRMZW5ndGgp
Ci17Ci0gICAgLy8gSWYgdGhlIGJ1ZmZlciBoYXMgb25seSBvbmUgcmVmIChieSB0aGlzIFN0cmlu
Z0J1aWxkZXIpLCByZWFsbG9jYXRlIGl0LAotICAgIC8vIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8g
ImFsbG9jYXRlIGFuZCBjb3B5IiBtZXRob2QuCi0gICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAg
ICAKLSAgICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQotICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVw
Q29udmVydChtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgcmVxdWlyZWRMZW5ndGgpOwotICAgIGVs
c2UgaWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkKLSAgICAgICAgbV9idWZmZXIgPSBTdHJpbmdJ
bXBsOjpyZWFsbG9jYXRlKG1fYnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIHJlcXVpcmVkTGVuZ3Ro
LCBtX2J1ZmZlckNoYXJhY3RlcnMxNik7Ci0gICAgZWxzZQotICAgICAgICBhbGxvY2F0ZUJ1ZmZl
cihtX2J1ZmZlci0+Y2hhcmFjdGVyczE2KCksIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICBBU1NFUlQo
bV9idWZmZXItPmxlbmd0aCgpID09IHJlcXVpcmVkTGVuZ3RoKTsKLX0KLQotdm9pZCBTdHJpbmdC
dWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbmV3Q2FwYWNpdHkpCi17Ci0gICAgaWYg
KG1fYnVmZmVyKSB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBidWZmZXIsIHRo
ZW4gZ3JvdyBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IG1fYnVmZmVy
LT5sZW5ndGgoKSkgewotICAgICAgICAgICAgaWYgKG1fYnVmZmVyLT5pczhCaXQoKSkKLSAgICAg
ICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihuZXdDYXBhY2l0eSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4obmV3Q2Fw
YWNpdHkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gR3JvdyB0aGUgc3Ry
aW5nLCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IG1fbGVuZ3RoKSB7
Ci0gICAgICAgICAgICBpZiAoIW1fbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgTENoYXIqIG51
bGxQbGFjZWhvbGRlciA9IDA7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobnVsbFBs
YWNlaG9sZGVyLCBuZXdDYXBhY2l0eSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RyaW5n
LmlzOEJpdCgpKQotICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJh
Y3RlcnM4KCksIG5ld0NhcGFjaXR5KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbmV3Q2FwYWNpdHkpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VSVCghbmV3Q2FwYWNpdHkgfHwgbV9idWZmZXItPmxl
bmd0aCgpID49IG5ld0NhcGFjaXR5KTsKLX0KLQotLy8gTWFrZSAnbGVuZ3RoJyBhZGRpdGlvbmFs
IGNhcGFjaXR5IGJlIGF2YWlsYWJsZSBpbiBtX2J1ZmZlciwgdXBkYXRlIG1fc3RyaW5nICYgbV9s
ZW5ndGgsCi0vLyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgc3RvcmFn
ZS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KLUFMV0FZU19JTkxJTkUgQ2hhclR5cGUq
IFN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIEFTU0VSVChsZW5ndGgpOwotCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXcgc2l6ZSBvZiB0
aGUgYnVpbGRlciBhZnRlciBhcHBlbmRpbmcuCi0gICAgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgg
PSBsZW5ndGggKyBtX2xlbmd0aDsKLSAgICBpZiAocmVxdWlyZWRMZW5ndGggPCBsZW5ndGgpCi0g
ICAgICAgIENSQVNIKCk7Ci0KLSAgICBpZiAoKG1fYnVmZmVyKSAmJiAocmVxdWlyZWRMZW5ndGgg
PD0gbV9idWZmZXItPmxlbmd0aCgpKSkgewotICAgICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZh
bGlkIGl0IG11c3QgYmUgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgY3VycmVudCBidWlsZGVyIGNv
bnRlbnRzIQotICAgICAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoKTsK
LSAgICAgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IG1fbGVuZ3RoOwotICAgICAgICBtX3N0
cmluZyA9IFN0cmluZygpOwotICAgICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwotICAg
ICAgICByZXR1cm4gZ2V0QnVmZmVyQ2hhcmFjdGVyczxDaGFyVHlwZT4oKSArIGN1cnJlbnRMZW5n
dGg7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBhcHBlbmRVbmluaXRpYWxpemVkU2xvdzxDaGFy
VHlwZT4ocmVxdWlyZWRMZW5ndGgpOwotfQotCi0vLyBNYWtlICdsZW5ndGgnIGFkZGl0aW9uYWwg
Y2FwYWNpdHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVyLCB1cGRhdGUgbV9zdHJpbmcgJiBtX2xl
bmd0aCwKLS8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzdG9yYWdl
LgotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgotQ2hhclR5cGUqIFN0cmluZ0J1aWxkZXI6
OmFwcGVuZFVuaW5pdGlhbGl6ZWRTbG93KHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQotewotICAg
IEFTU0VSVChyZXF1aXJlZExlbmd0aCk7Ci0KLSAgICBpZiAobV9idWZmZXIpIHsKLSAgICAgICAg
Ly8gSWYgdGhlIGJ1ZmZlciBpcyB2YWxpZCBpdCBtdXN0IGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMg
dGhlIGN1cnJlbnQgYnVpbGRlciBjb250ZW50cyEKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVyLT5s
ZW5ndGgoKSA+PSBtX2xlbmd0aCk7Ci0gICAgICAgIAotICAgICAgICByZWFsbG9jYXRlQnVmZmVy
PENoYXJUeXBlPihleHBhbmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fc3RyaW5nLmxlbmd0aCgpID09IG1fbGVu
Z3RoKTsKLSAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9sZW5ndGggPyBtX3N0cmluZy5jaGFyYWN0
ZXJzPENoYXJUeXBlPigpIDogMCwgZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1aXJl
ZExlbmd0aCkpOwotICAgIH0KLSAgICAKLSAgICBDaGFyVHlwZSogcmVzdWx0ID0gZ2V0QnVmZmVy
Q2hhcmFjdGVyczxDaGFyVHlwZT4oKSArIG1fbGVuZ3RoOwotICAgIG1fbGVuZ3RoID0gcmVxdWly
ZWRMZW5ndGg7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAoIWxlbmd0aCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGNoYXJhY3RlcnMpOwotCi0gICAgaWYgKG1f
aXM4Qml0KSB7Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSAmJiAhKCpjaGFyYWN0ZXJzICYgfjB4
ZmYpKSB7Ci0gICAgICAgICAgICAvLyBBcHBlbmQgYXMgOCBiaXQgY2hhcmFjdGVyCi0gICAgICAg
ICAgICBMQ2hhciBsQ2hhciA9IHN0YXRpY19jYXN0PExDaGFyPigqY2hhcmFjdGVycyk7Ci0gICAg
ICAgICAgICBhcHBlbmQoJmxDaGFyLCAxKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbmV3IHNpemUgb2YgdGhlIGJ1aWxkZXIgYWZ0
ZXIgYXBwZW5kaW5nLgotICAgICAgICB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCA9IGxlbmd0aCAr
IG1fbGVuZ3RoOwotICAgICAgICBpZiAocmVxdWlyZWRMZW5ndGggPCBsZW5ndGgpCi0gICAgICAg
ICAgICBDUkFTSCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fYnVmZmVyKSB7Ci0gICAgICAg
ICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZhbGlkIGl0IG11c3QgYmUgYXQgbGVhc3QgYXMgbG9u
ZyBhcyB0aGUgY3VycmVudCBidWlsZGVyIGNvbnRlbnRzIQotICAgICAgICAgICAgQVNTRVJUKG1f
YnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCBleHBhbmRl
ZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgpOwotICAg
ICAgICAgICAgYWxsb2NhdGVCdWZmZXJVcENvbnZlcnQobV9zdHJpbmcuaXNOdWxsKCkgPyAwIDog
bV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgZXhwYW5kZWRDYXBhY2l0eShjYXBhY2l0eSgpLCByZXF1
aXJlZExlbmd0aCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbWVtY3B5KG1fYnVmZmVyQ2hhcmFj
dGVyczE2ICsgbV9sZW5ndGgsIGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3Ro
KSAqIHNpemVvZihVQ2hhcikpOwotICAgICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwot
ICAgIH0gZWxzZQotICAgICAgICBtZW1jcHkoYXBwZW5kVW5pbml0aWFsaXplZDxVQ2hhcj4obGVu
Z3RoKSwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc2l6ZW9mKFVD
aGFyKSk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7Ci19Ci0K
LXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybjsKLSAgICBB
U1NFUlQoY2hhcmFjdGVycyk7Ci0KLSAgICBpZiAobV9pczhCaXQpIHsKLSAgICAgICAgTENoYXIq
IGRlc3QgPSBhcHBlbmRVbmluaXRpYWxpemVkPExDaGFyPihsZW5ndGgpOwotICAgICAgICBpZiAo
bGVuZ3RoID4gOCkKLSAgICAgICAgICAgIG1lbWNweShkZXN0LCBjaGFyYWN0ZXJzLCBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBzaXplb2YoTENoYXIpKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBjb25zdCBMQ2hhciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKLSAgICAg
ICAgICAgIHdoaWxlIChjaGFyYWN0ZXJzIDwgZW5kKQotICAgICAgICAgICAgICAgICooZGVzdCsr
KSA9ICooY2hhcmFjdGVycysrKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFVD
aGFyKiBkZXN0ID0gYXBwZW5kVW5pbml0aWFsaXplZDxVQ2hhcj4obGVuZ3RoKTsKLSAgICAgICAg
Y29uc3QgTENoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAgICAgIHdoaWxlIChj
aGFyYWN0ZXJzIDwgZW5kKQotICAgICAgICAgICAgKihkZXN0KyspID0gKihjaGFyYWN0ZXJzKysp
OwotICAgIH0KLX0KLQotdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmROdW1iZXIoaW50IG51bWJl
cikKLXsKLSAgICBudW1iZXJUb1N0cmluZ1NpZ25lZDxTdHJpbmdCdWlsZGVyPihudW1iZXIsIHRo
aXMpOwotfQotCi12b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZE51bWJlcih1bnNpZ25lZCBpbnQg
bnVtYmVyKQotewotICAgIG51bWJlclRvU3RyaW5nVW5zaWduZWQ8U3RyaW5nQnVpbGRlcj4obnVt
YmVyLCB0aGlzKTsKLX0KLQotdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmROdW1iZXIobG9uZyBu
dW1iZXIpCi17Ci0gICAgbnVtYmVyVG9TdHJpbmdTaWduZWQ8U3RyaW5nQnVpbGRlcj4obnVtYmVy
LCB0aGlzKTsKLX0KLQotdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmROdW1iZXIodW5zaWduZWQg
bG9uZyBudW1iZXIpCi17Ci0gICAgbnVtYmVyVG9TdHJpbmdVbnNpZ25lZDxTdHJpbmdCdWlsZGVy
PihudW1iZXIsIHRoaXMpOwotfQotCi12b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZE51bWJlcihs
b25nIGxvbmcgbnVtYmVyKQotewotICAgIG51bWJlclRvU3RyaW5nU2lnbmVkPFN0cmluZ0J1aWxk
ZXI+KG51bWJlciwgdGhpcyk7Ci19Ci0KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kTnVtYmVy
KHVuc2lnbmVkIGxvbmcgbG9uZyBudW1iZXIpCi17Ci0gICAgbnVtYmVyVG9TdHJpbmdVbnNpZ25l
ZDxTdHJpbmdCdWlsZGVyPihudW1iZXIsIHRoaXMpOwotfQotCi12b2lkIFN0cmluZ0J1aWxkZXI6
OmFwcGVuZE51bWJlcihkb3VibGUgbnVtYmVyLCB1bnNpZ25lZCBwcmVjaXNpb24sIFRyYWlsaW5n
WmVyb3NUcnVuY2F0aW5nUG9saWN5IHRyYWlsaW5nWmVyb3NUcnVuY2F0aW5nUG9saWN5KQotewot
ICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICBhcHBlbmQobnVtYmVyVG9GaXhl
ZFByZWNpc2lvblN0cmluZyhudW1iZXIsIHByZWNpc2lvbiwgYnVmZmVyLCB0cmFpbGluZ1plcm9z
VHJ1bmNhdGluZ1BvbGljeSA9PSBUcnVuY2F0ZVRyYWlsaW5nWmVyb3MpKTsKLX0KLQotdm9pZCBT
dHJpbmdCdWlsZGVyOjphcHBlbmRFQ01BU2NyaXB0TnVtYmVyKGRvdWJsZSBudW1iZXIpCi17Ci0g
ICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICAgIGFwcGVuZChudW1iZXJUb1N0cmlu
ZyhudW1iZXIsIGJ1ZmZlcikpOwotfQotCi12b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZEZpeGVk
V2lkdGhOdW1iZXIoZG91YmxlIG51bWJlciwgdW5zaWduZWQgZGVjaW1hbFBsYWNlcykKLXsKLSAg
ICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZmZXI7Ci0gICAgYXBwZW5kKG51bWJlclRvRml4ZWRX
aWR0aFN0cmluZyhudW1iZXIsIGRlY2ltYWxQbGFjZXMsIGJ1ZmZlcikpOwotfQotCi1ib29sIFN0
cmluZ0J1aWxkZXI6OmNhblNocmluaygpIGNvbnN0Ci17Ci0gICAgLy8gT25seSBzaHJpbmsgdGhl
IGJ1ZmZlciBpZiBpdCdzIGxlc3MgdGhhbiA4MCUgZnVsbC4gTmVlZCB0byB0dW5lIHRoaXMgaGV1
cmlzdGljIQotICAgIHJldHVybiBtX2J1ZmZlciAmJiBtX2J1ZmZlci0+bGVuZ3RoKCkgPiAobV9s
ZW5ndGggKyAobV9sZW5ndGggPj4gMikpOwotfQotCi12b2lkIFN0cmluZ0J1aWxkZXI6OnNocmlu
a1RvRml0KCkKLXsKLSAgICBpZiAoY2FuU2hyaW5rKCkpIHsKLSAgICAgICAgaWYgKG1faXM4Qml0
KQotICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4obV9sZW5ndGgpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyPFVDaGFyPihtX2xlbmd0aCk7Ci0g
ICAgICAgIG1fc3RyaW5nID0gV1RGTW92ZShtX2J1ZmZlcik7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgT3V0cHV0Q2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgSW5wdXRDaGFyYWN0ZXJU
eXBlPgotc3RhdGljIHZvaWQgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsU2xvdyhPdXRw
dXRDaGFyYWN0ZXJUeXBlKiYgb3V0cHV0LCBjb25zdCBJbnB1dENoYXJhY3RlclR5cGUgY2hhcmFj
dGVyKQotewotICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7Ci0gICAgY2FzZSAnXHQnOgotICAgICAg
ICAqb3V0cHV0KysgPSAnXFwnOwotICAgICAgICAqb3V0cHV0KysgPSAndCc7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgJ1xyJzoKLSAgICAgICAgKm91dHB1dCsrID0gJ1xcJzsKLSAgICAgICAg
Km91dHB1dCsrID0gJ3InOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdcbic6Ci0gICAgICAg
ICpvdXRwdXQrKyA9ICdcXCc7Ci0gICAgICAgICpvdXRwdXQrKyA9ICduJzsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSAnXGYnOgotICAgICAgICAqb3V0cHV0KysgPSAnXFwnOwotICAgICAgICAq
b3V0cHV0KysgPSAnZic7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ1xiJzoKLSAgICAgICAg
Km91dHB1dCsrID0gJ1xcJzsKLSAgICAgICAgKm91dHB1dCsrID0gJ2InOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoIShjaGFyYWN0ZXIgJiAweEZGMDApKTsK
LSAgICAgICAgKm91dHB1dCsrID0gJ1xcJzsKLSAgICAgICAgKm91dHB1dCsrID0gJ3UnOwotICAg
ICAgICAqb3V0cHV0KysgPSAnMCc7Ci0gICAgICAgICpvdXRwdXQrKyA9ICcwJzsKLSAgICAgICAg
Km91dHB1dCsrID0gdXBwZXJOaWJibGVUb0xvd2VyY2FzZUFTQ0lJSGV4RGlnaXQoY2hhcmFjdGVy
KTsKLSAgICAgICAgKm91dHB1dCsrID0gbG93ZXJOaWJibGVUb0xvd2VyY2FzZUFTQ0lJSGV4RGln
aXQoY2hhcmFjdGVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3V0cHV0Q2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgSW5wdXRDaGFyYWN0ZXJUeXBlPgot
c3RhdGljIHZvaWQgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKE91dHB1dENoYXJhY3Rl
clR5cGUqJiBvdXRwdXQsIGNvbnN0IElucHV0Q2hhcmFjdGVyVHlwZSogaW5wdXQsIHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICBmb3IgKGNvbnN0IElucHV0Q2hhcmFjdGVyVHlwZSogZW5kID0gaW5w
dXQgKyBsZW5ndGg7IGlucHV0ICE9IGVuZDsgKytpbnB1dCkgewotICAgICAgICBjb25zdCBJbnB1
dENoYXJhY3RlclR5cGUgY2hhcmFjdGVyID0gKmlucHV0OwotICAgICAgICBpZiAoTElLRUxZKGNo
YXJhY3RlciAhPSAnIicgJiYgY2hhcmFjdGVyICE9ICdcXCcgJiYgY2hhcmFjdGVyID4gMHgxRikp
IHsKLSAgICAgICAgICAgICpvdXRwdXQrKyA9IGNoYXJhY3RlcjsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnIicgfHwgY2hhcmFj
dGVyID09ICdcXCcpIHsKLSAgICAgICAgICAgICpvdXRwdXQrKyA9ICdcXCc7Ci0gICAgICAgICAg
ICAqb3V0cHV0KysgPSBjaGFyYWN0ZXI7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbFNsb3cob3V0cHV0LCBj
aGFyYWN0ZXIpOwotICAgIH0KLX0KLQotdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmRRdW90ZWRK
U09OU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIC8vIE1ha2Ugc3VyZSB3ZSBo
YXZlIGVub3VnaCBidWZmZXIgc3BhY2UgdG8gYXBwZW5kIHRoaXMgc3RyaW5nIHdpdGhvdXQgaGF2
aW5nCi0gICAgLy8gdG8gd29ycnkgYWJvdXQgcmVhbGxvY2F0aW5nIGluIHRoZSBtaWRkbGUuCi0g
ICAgLy8gVGhlIDIgaXMgZm9yIHRoZSAnIicgcXVvdGVzIG9uIGVhY2ggZW5kLgotICAgIC8vIFRo
ZSA2IGlzIGZvciBjaGFyYWN0ZXJzIHRoYXQgbmVlZCB0byBiZSBcdU5OTk4gZW5jb2RlZC4KLSAg
ICBDaGVja2VkPHVuc2lnbmVkPiBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAg
Q2hlY2tlZDx1bnNpZ25lZD4gbWF4aW11bUNhcGFjaXR5UmVxdWlyZWQgPSBsZW5ndGgoKTsKLSAg
ICBtYXhpbXVtQ2FwYWNpdHlSZXF1aXJlZCArPSAyICsgc3RyaW5nTGVuZ3RoICogNjsKLSAgICB1
bnNpZ25lZCBhbGxvY2F0aW9uU2l6ZSA9IG1heGltdW1DYXBhY2l0eVJlcXVpcmVkLnVuc2FmZUdl
dCgpOwotICAgIC8vIFRoaXMgbWF4KCkgaXMgaGVyZSB0byBhbGxvdyB1cyB0byBhbGxvY2F0ZSBz
aXplcyBiZXR3ZWVuIHRoZSByYW5nZSBbMl4zMSwgMl4zMiAtIDJdIGJlY2F1c2Ugcm91bmRVcFRv
UG93ZXJPZlR3bygxPDwzMSArIHNvbWUgaW50IHNtYWxsZXIgdGhhbiAxPDwzMSkgPT0gMC4KLSAg
ICBhbGxvY2F0aW9uU2l6ZSA9IHN0ZDo6bWF4KGFsbG9jYXRpb25TaXplLCByb3VuZFVwVG9Qb3dl
ck9mVHdvKGFsbG9jYXRpb25TaXplKSk7Ci0KLSAgICBpZiAoaXM4Qml0KCkgJiYgIXN0cmluZy5p
czhCaXQoKSkKLSAgICAgICAgYWxsb2NhdGVCdWZmZXJVcENvbnZlcnQobV9idWZmZXJDaGFyYWN0
ZXJzOCwgYWxsb2NhdGlvblNpemUpOwotICAgIGVsc2UKLSAgICAgICAgcmVzZXJ2ZUNhcGFjaXR5
KGFsbG9jYXRpb25TaXplKTsKLSAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IGFsbG9j
YXRpb25TaXplKTsKLQotICAgIGlmIChpczhCaXQoKSkgewotICAgICAgICBBU1NFUlQoc3RyaW5n
LmlzOEJpdCgpKTsKLSAgICAgICAgTENoYXIqIG91dHB1dCA9IG1fYnVmZmVyQ2hhcmFjdGVyczgg
KyBtX2xlbmd0aDsKLSAgICAgICAgKm91dHB1dCsrID0gJyInOwotICAgICAgICBhcHBlbmRRdW90
ZWRKU09OU3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5n
Lmxlbmd0aCgpKTsKLSAgICAgICAgKm91dHB1dCsrID0gJyInOwotICAgICAgICBtX2xlbmd0aCA9
IG91dHB1dCAtIG1fYnVmZmVyQ2hhcmFjdGVyczg7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVUNo
YXIqIG91dHB1dCA9IG1fYnVmZmVyQ2hhcmFjdGVyczE2ICsgbV9sZW5ndGg7Ci0gICAgICAgICpv
dXRwdXQrKyA9ICciJzsKLSAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgICAg
IGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbChvdXRwdXQsIHN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcHBlbmRR
dW90ZWRKU09OU3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0
cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgICpvdXRwdXQrKyA9ICciJzsKLSAgICAgICAgbV9sZW5n
dGggPSBvdXRwdXQgLSBtX2J1ZmZlckNoYXJhY3RlcnMxNjsKLSAgICB9Ci0gICAgQVNTRVJUKG1f
YnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTJjZjBlNjJlN2Q0OTI3
YTc0MmU1M2YzMGIzNjAwNzYxNTg5OTlmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAsIDIwMTItMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgU3RyaW5nQnVpbGRlcl9oCi0jZGVmaW5lIFN0cmluZ0J1aWxkZXJfaAotCi0jaW5j
bHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvSW50ZWdl
clRvU3RyaW5nQ29udmVyc2lvbi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNs
YXNzIFN0cmluZ0J1aWxkZXIgewotICAgIC8vIERpc2FsbG93IGNvcHlpbmcgc2luY2UgaXQncyBl
eHBlbnNpdmUgYW5kIHdlIGRvbid0IHdhbnQgY29kZSB0byBkbyBpdCBieSBhY2NpZGVudC4KLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJpbmdCdWlsZGVyKTsKLQotcHVibGljOgotICAgIFN0
cmluZ0J1aWxkZXIoKQotICAgICAgICA6IG1fbGVuZ3RoKDApCi0gICAgICAgICwgbV9pczhCaXQo
dHJ1ZSkKLSAgICAgICAgLCBtX2J1ZmZlckNoYXJhY3RlcnM4KDApCi0gICAgewotICAgIH0KLQot
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChjb25zdCBVQ2hhciosIHVuc2lnbmVk
KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmQoY29uc3QgTENoYXIqLCB1bnNp
Z25lZCk7Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkgeyBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpOyB9Ci0KLSAgICB2b2lkIGFwcGVuZChjb25zdCBB
dG9taWNTdHJpbmcmIGF0b21pY1N0cmluZykKLSAgICB7Ci0gICAgICAgIGFwcGVuZChhdG9taWNT
dHJpbmcuc3RyaW5nKCkpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQotICAgIHsKLSAgICAgICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5IHN0
cmluZywgYW5kIHRoZXJlIGlzIG5vdCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5IGhhcyBub3Qg
YmVlbiBjYWxsZWQpCi0gICAgICAgIC8vIHRoZW4ganVzdCByZXRhaW4gdGhlIHN0cmluZy4KLSAg
ICAgICAgaWYgKCFtX2xlbmd0aCAmJiAhbV9idWZmZXIpIHsKLSAgICAgICAgICAgIG1fc3RyaW5n
ID0gc3RyaW5nOwotICAgICAgICAgICAgbV9sZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAg
ICAgICAgICBtX2lzOEJpdCA9IG1fc3RyaW5nLmlzOEJpdCgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgICAg
IGFwcGVuZChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxl
bmd0aCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmdCdWlsZGVyJiBv
dGhlcikKLSAgICB7Ci0gICAgICAgIGlmICghb3RoZXIubV9sZW5ndGgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5IHN0cmlu
ZywgYW5kIHRoZXJlIGlzIG5vdCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5IGhhcyBub3QgYmVl
biBjYWxsZWQpCi0gICAgICAgIC8vIHRoZW4ganVzdCByZXRhaW4gdGhlIHN0cmluZy4KLSAgICAg
ICAgaWYgKCFtX2xlbmd0aCAmJiAhbV9idWZmZXIgJiYgIW90aGVyLm1fc3RyaW5nLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICBtX3N0cmluZyA9IG90aGVyLm1fc3RyaW5nOwotICAgICAgICAgICAg
bV9sZW5ndGggPSBvdGhlci5tX2xlbmd0aDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChvdGhlci5pczhCaXQoKSkKLSAgICAgICAgICAgIGFwcGVuZChvdGhl
ci5jaGFyYWN0ZXJzOCgpLCBvdGhlci5tX2xlbmd0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGFwcGVuZChvdGhlci5jaGFyYWN0ZXJzMTYoKSwgb3RoZXIubV9sZW5ndGgpOwotICAgIH0K
LQotICAgIHZvaWQgYXBwZW5kKFN0cmluZ1ZpZXcgc3RyaW5nVmlldykKLSAgICB7Ci0gICAgICAg
IGlmIChzdHJpbmdWaWV3LmlzOEJpdCgpKQotICAgICAgICAgICAgYXBwZW5kKHN0cmluZ1ZpZXcu
Y2hhcmFjdGVyczgoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGFwcGVuZChzdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpLCBzdHJpbmdWaWV3Lmxlbmd0
aCgpKTsKLSAgICB9Ci0KLSNpZiBVU0UoQ0YpCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
YXBwZW5kKENGU3RyaW5nUmVmKTsKLSNlbmRpZgotI2lmIFVTRShDRikgJiYgZGVmaW5lZChfX09C
SkNfXykKLSAgICB2b2lkIGFwcGVuZChOU1N0cmluZyAqc3RyaW5nKSB7IGFwcGVuZCgoX19icmlk
Z2UgQ0ZTdHJpbmdSZWYpc3RyaW5nKTsgfQotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBhcHBlbmQo
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQot
ICAgIHsKLSAgICAgICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgaWYgKChvZmZzZXQgKyBsZW5ndGgpID4gc3RyaW5nLmxlbmd0aCgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAg
ICAgICBhcHBlbmQoc3RyaW5nLmNoYXJhY3RlcnM4KCkgKyBvZmZzZXQsIGxlbmd0aCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGVuZChzdHJpbmcuY2hhcmFjdGVyczE2KCkgKyBvZmZz
ZXQsIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciogY2hhcmFj
dGVycykKLSAgICB7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJzKQotICAgICAgICAgICAgYXBwZW5k
KGNoYXJhY3RlcnMsIHN0cmxlbihjaGFyYWN0ZXJzKSk7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBl
bmQoVUNoYXIgYykKLSAgICB7Ci0gICAgICAgIGlmIChtX2J1ZmZlciAmJiBtX2xlbmd0aCA8IG1f
YnVmZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkgewotICAgICAgICAgICAgaWYg
KCFtX2lzOEJpdCkgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczE2W21fbGVu
Z3RoKytdID0gYzsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICghKGMgJiB+MHhmZikpIHsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlckNo
YXJhY3RlcnM4W21fbGVuZ3RoKytdID0gc3RhdGljX2Nhc3Q8TENoYXI+KGMpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBhcHBlbmQo
JmMsIDEpOwotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kKExDaGFyIGMpCi0gICAgewotICAgICAg
ICBpZiAobV9idWZmZXIgJiYgbV9sZW5ndGggPCBtX2J1ZmZlci0+bGVuZ3RoKCkgJiYgbV9zdHJp
bmcuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGlmIChtX2lzOEJpdCkKLSAgICAgICAgICAgICAg
ICBtX2J1ZmZlckNoYXJhY3RlcnM4W21fbGVuZ3RoKytdID0gYzsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNlttX2xlbmd0aCsrXSA9IGM7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYXBwZW5kKCZjLCAxKTsKLSAgICB9Ci0KLSAgICB2
b2lkIGFwcGVuZChjaGFyIGMpCi0gICAgewotICAgICAgICBhcHBlbmQoc3RhdGljX2Nhc3Q8TENo
YXI+KGMpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZChVQ2hhcjMyIGMpCi0gICAgewotICAg
ICAgICBpZiAoVV9JU19CTVAoYykpIHsKLSAgICAgICAgICAgIGFwcGVuZChzdGF0aWNfY2FzdDxV
Q2hhcj4oYykpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGFwcGVu
ZChVMTZfTEVBRChjKSk7Ci0gICAgICAgIGFwcGVuZChVMTZfVFJBSUwoYykpOwotICAgIH0KLQot
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmcoY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KLSAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kTGl0ZXJhbChjb25zdCBjaGFyICgmY2hhcmFjdGVycylb
Y2hhcmFjdGVyQ291bnRdKSB7IGFwcGVuZChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJDb3VudCAtIDEp
OyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmROdW1iZXIoaW50KTsKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmROdW1iZXIodW5zaWduZWQgaW50KTsKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmROdW1iZXIobG9uZyk7Ci0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kTnVtYmVyKHVuc2lnbmVkIGxvbmcpOwotICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZE51bWJlcihsb25nIGxvbmcpOwotICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGFwcGVuZE51bWJlcih1bnNpZ25lZCBsb25nIGxvbmcpOwotICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZE51bWJlcihkb3VibGUsIHVuc2lnbmVkIHByZWNp
c2lvbiA9IDYsIFRyYWlsaW5nWmVyb3NUcnVuY2F0aW5nUG9saWN5ID0gVHJ1bmNhdGVUcmFpbGlu
Z1plcm9zKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmRFQ01BU2NyaXB0TnVt
YmVyKGRvdWJsZSk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kRml4ZWRXaWR0
aE51bWJlcihkb3VibGUsIHVuc2lnbmVkIGRlY2ltYWxQbGFjZXMpOwotCi0gICAgU3RyaW5nIHRv
U3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHNocmlua1RvRml0KCk7Ci0gICAgICAgIGlmIChtX3N0
cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIHJlaWZ5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVy
biBtX3N0cmluZzsKLSAgICB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIHRvU3RyaW5nUHJlc2VydmVD
YXBhY2l0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9zdHJpbmcuaXNOdWxsKCkpCi0g
ICAgICAgICAgICByZWlmeVN0cmluZygpOwotICAgICAgICByZXR1cm4gbV9zdHJpbmc7Ci0gICAg
fQotCi0gICAgQXRvbWljU3RyaW5nIHRvQXRvbWljU3RyaW5nKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlBdG9tKCk7Ci0KLSAg
ICAgICAgLy8gSWYgdGhlIGJ1ZmZlciBpcyBzdWZmaWNpZW50bHkgb3Zlci1hbGxvY2F0ZWQsIG1h
a2UgYSBuZXcgQXRvbWljU3RyaW5nIGZyb20gYSBjb3B5IHNvIGl0cyBidWZmZXIgaXMgbm90IHNv
IGxhcmdlLgotICAgICAgICBpZiAoY2FuU2hyaW5rKCkpIHsKLSAgICAgICAgICAgIGlmIChpczhC
aXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nKGNoYXJhY3RlcnM4KCks
IGxlbmd0aCgpKTsKLSAgICAgICAgICAgIHJldHVybiBBdG9taWNTdHJpbmcoY2hhcmFjdGVyczE2
KCksIGxlbmd0aCgpKTsgICAgICAgICAgICAKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbV9z
dHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nKG1fc3RyaW5n
KTsKLQotICAgICAgICBBU1NFUlQobV9idWZmZXIpOwotICAgICAgICByZXR1cm4gQXRvbWljU3Ry
aW5nKG1fYnVmZmVyLmdldCgpLCAwLCBtX2xlbmd0aCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xlbmd0aDsKLSAgICB9Ci0K
LSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9sZW5ndGg7IH0KLQotICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIHJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0
eSk7Ci0KLSAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9idWZmZXIgPyBtX2J1ZmZlci0+bGVuZ3RoKCkgOiBtX2xlbmd0aDsKLSAgICB9Ci0KLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXNpemUodW5zaWduZWQgbmV3U2l6ZSk7Ci0KLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5TaHJpbmsoKSBjb25zdDsKLQotICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHNocmlua1RvRml0KCk7Ci0KLSAgICBVQ2hhciBvcGVyYXRvcltd
KHVuc2lnbmVkIGkpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihpIDwgbV9sZW5ndGgpOwotICAgICAgICBpZiAobV9pczhCaXQpCi0gICAgICAg
ICAgICByZXR1cm4gY2hhcmFjdGVyczgoKVtpXTsKLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnMx
NigpW2ldOwotICAgIH0KLQotICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQobV9pczhCaXQpOwotICAgICAgICBpZiAoIW1fbGVuZ3RoKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmICghbV9zdHJpbmcuaXNOdWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gbV9zdHJpbmcuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgQVNTRVJU
KG1fYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpOwotICAg
IH0KLQotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKCFtX2lzOEJpdCk7Ci0gICAgICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKTsKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVy
KTsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzMTYoKTsKLSAgICB9Ci0gICAg
Ci0gICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX2lzOEJpdDsgfQotCi0gICAgdm9p
ZCBjbGVhcigpCi0gICAgewotICAgICAgICBtX2xlbmd0aCA9IDA7Ci0gICAgICAgIG1fc3RyaW5n
ID0gU3RyaW5nKCk7Ci0gICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAgbV9idWZm
ZXJDaGFyYWN0ZXJzOCA9IDA7Ci0gICAgICAgIG1faXM4Qml0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHN3YXAoU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKLSAgICB7Ci0gICAgICAg
IHN0ZDo6c3dhcChtX2xlbmd0aCwgc3RyaW5nQnVpbGRlci5tX2xlbmd0aCk7Ci0gICAgICAgIG1f
c3RyaW5nLnN3YXAoc3RyaW5nQnVpbGRlci5tX3N0cmluZyk7Ci0gICAgICAgIG1fYnVmZmVyLnN3
YXAoc3RyaW5nQnVpbGRlci5tX2J1ZmZlcik7Ci0gICAgICAgIHN0ZDo6c3dhcChtX2lzOEJpdCwg
c3RyaW5nQnVpbGRlci5tX2lzOEJpdCk7Ci0gICAgICAgIHN0ZDo6c3dhcChtX2J1ZmZlckNoYXJh
Y3RlcnM4LCBzdHJpbmdCdWlsZGVyLm1fYnVmZmVyQ2hhcmFjdGVyczgpOwotICAgICAgICBBU1NF
UlQoIW1fYnVmZmVyIHx8IG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoY29uc3QgTENoYXIqIGN1cnJlbnRD
aGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJ1
ZmZlcihjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVu
Z3RoKTsKLSAgICB2b2lkIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KGNvbnN0IExDaGFyKiBjdXJy
ZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOwotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyVHlwZT4KLSAgICB2b2lkIHJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVx
dWlyZWRMZW5ndGgpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KLSAgICBBTFdB
WVNfSU5MSU5FIENoYXJUeXBlKiBhcHBlbmRVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgotICAgIENoYXJUeXBlKiBhcHBlbmRV
bmluaXRpYWxpemVkU2xvdyh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyVHlwZT4KLSAgICBBTFdBWVNfSU5MSU5FIENoYXJUeXBlICogZ2V0QnVmZmVyQ2hhcmFj
dGVycygpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJlaWZ5U3RyaW5nKCkgY29uc3Q7
Ci0KLSAgICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICBtdXRhYmxlIFN0cmluZyBtX3N0cmluZzsK
LSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9idWZmZXI7Ci0gICAgYm9vbCBtX2lzOEJpdDsKLSAg
ICB1bmlvbiB7Ci0gICAgICAgIExDaGFyKiBtX2J1ZmZlckNoYXJhY3RlcnM4OwotICAgICAgICBV
Q2hhciogbV9idWZmZXJDaGFyYWN0ZXJzMTY7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlIDw+Ci1B
TFdBWVNfSU5MSU5FIExDaGFyKiBTdHJpbmdCdWlsZGVyOjpnZXRCdWZmZXJDaGFyYWN0ZXJzPExD
aGFyPigpCi17Ci0gICAgQVNTRVJUKG1faXM4Qml0KTsKLSAgICByZXR1cm4gbV9idWZmZXJDaGFy
YWN0ZXJzODsKLX0KLQotdGVtcGxhdGUgPD4KLUFMV0FZU19JTkxJTkUgVUNoYXIqIFN0cmluZ0J1
aWxkZXI6OmdldEJ1ZmZlckNoYXJhY3RlcnM8VUNoYXI+KCkKLXsKLSAgICBBU1NFUlQoIW1faXM4
Qml0KTsKLSAgICByZXR1cm4gbV9idWZmZXJDaGFyYWN0ZXJzMTY7Ci19ICAgIAotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhclR5cGU+Ci1ib29sIGVxdWFsKGNvbnN0IFN0cmluZ0J1aWxkZXImIHMs
IGNvbnN0IENoYXJUeXBlKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAocy5s
ZW5ndGgoKSAhPSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzLmlz
OEJpdCgpKQotICAgICAgICByZXR1cm4gZXF1YWwocy5jaGFyYWN0ZXJzOCgpLCBidWZmZXIsIGxl
bmd0aCk7Ci0KLSAgICByZXR1cm4gZXF1YWwocy5jaGFyYWN0ZXJzMTYoKSwgYnVmZmVyLCBsZW5n
dGgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgU3RyaW5nVHlwZT4KLWJvb2wgZXF1YWwoY29u
c3QgU3RyaW5nQnVpbGRlciYgYSwgY29uc3QgU3RyaW5nVHlwZSYgYikKLXsKLSAgICBpZiAoYS5s
ZW5ndGgoKSAhPSBiLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
IWEubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGEuaXM4Qml0KCkp
IHsKLSAgICAgICAgaWYgKGIuaXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gZXF1YWwoYS5j
aGFyYWN0ZXJzOCgpLCBiLmNoYXJhY3RlcnM4KCksIGEubGVuZ3RoKCkpOwotICAgICAgICByZXR1
cm4gZXF1YWwoYS5jaGFyYWN0ZXJzOCgpLCBiLmNoYXJhY3RlcnMxNigpLCBhLmxlbmd0aCgpKTsK
LSAgICB9Ci0KLSAgICBpZiAoYi5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGVxdWFsKGEuY2hh
cmFjdGVyczE2KCksIGIuY2hhcmFjdGVyczgoKSwgYS5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIGVx
dWFsKGEuY2hhcmFjdGVyczE2KCksIGIuY2hhcmFjdGVyczE2KCksIGEubGVuZ3RoKCkpOwotfQot
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZ0J1aWxkZXImIGEsIGNvbnN0IFN0
cmluZ0J1aWxkZXImIGIpIHsgcmV0dXJuIGVxdWFsKGEsIGIpOyB9Ci1pbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFN0cmluZ0J1aWxkZXImIGEsIGNvbnN0IFN0cmluZ0J1aWxkZXImIGIpIHsg
cmV0dXJuICFlcXVhbChhLCBiKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJp
bmdCdWlsZGVyJiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsKGEsIGIpOyB9Ci1p
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZ0J1aWxkZXImIGEsIGNvbnN0IFN0cmlu
ZyYgYikgeyByZXR1cm4gIWVxdWFsKGEsIGIpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nQnVpbGRlciYgYikgeyByZXR1cm4gZXF1YWwoYiwg
YSk7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJp
bmdCdWlsZGVyJiBiKSB7IHJldHVybiAhZXF1YWwoYiwgYSk7IH0KLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0PFN0cmluZ0J1aWxkZXI+IHsKLSAgICB1
c2luZyBSZXR1cm5UeXBlID0gdm9pZDsKLSAgICB1c2luZyBBZGRpdGlvbmFsQXJndW1lbnRUeXBl
ID0gU3RyaW5nQnVpbGRlcjsKLSAgICBzdGF0aWMgdm9pZCBmbHVzaChMQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoLCBTdHJpbmdCdWlsZGVyKiBzdHJpbmdCdWlsZGVyKSB7IHN0cmlu
Z0J1aWxkZXItPmFwcGVuZChjaGFyYWN0ZXJzLCBsZW5ndGgpOyB9Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXVEYKLQotdXNpbmcgV1RGOjpTdHJpbmdCdWlsZGVyOwotCi0jZW5kaWYgLy8gU3RyaW5n
QnVpbGRlcl9oCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
dGV4dC9TdHJpbmdDb21tb24uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90
ZXh0L1N0cmluZ0NvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWYyYmNk
MTA0ZTZkMTQ1NDA2YTBjYWRlNWFiMjg0NjlmZTZjNTBjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi90ZXh0L1N0cmluZ0NvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjU4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgU3RyaW5nQ29tbW9uX2gKLSNkZWZpbmUgU3RyaW5nQ29t
bW9uX2gKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+
Ci0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvTm90Rm91bmQuaD4K
LQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGVBLCB0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlQj4gYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0
IENoYXJhY3RlclR5cGVBKiwgY29uc3QgQ2hhcmFjdGVyVHlwZUIqLCB1bnNpZ25lZCBsZW5ndGgp
OwotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZUEsIHR5cGVuYW1lIENoYXJhY3RlclR5
cGVCPiBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQ2hhcmFjdGVyVHlwZUEqLCB1
bnNpZ25lZCBsZW5ndGhBLCBjb25zdCBDaGFyYWN0ZXJUeXBlQiosIHVuc2lnbmVkIGxlbmd0aEIp
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdDbGFzc0EsIHR5cGVuYW1lIFN0cmluZ0NsYXNz
Qj4gYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlQ29tbW9uKGNvbnN0IFN0cmluZ0NsYXNzQSYs
IGNvbnN0IFN0cmluZ0NsYXNzQiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IENoYXJhY3RlclR5cGUq
LCBjb25zdCBjaGFyKiBsb3dlcmNhc2VMZXR0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdW5zaWduZWQgbG93ZXJjYXNlTGV0dGVyc0xlbmd0
aD4gYm9vbCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBDaGFyYWN0ZXJUeXBl
KiwgdW5zaWduZWQgY2hhcmFjdGVyc0xlbmd0aCwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRl
cnMpW2xvd2VyY2FzZUxldHRlcnNMZW5ndGhdKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5n
Q2xhc3MsIHVuc2lnbmVkIGxlbmd0aD4gYm9vbCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZUNvbW1vbihjb25zdCBTdHJpbmdDbGFzcyYsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJz
KVtsZW5ndGhdKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUIGxvYWRVbmFsaWdu
ZWQoY29uc3QgY2hhciogcykKLXsKLSNpZiBDT01QSUxFUihDTEFORykKLSAgICBUIHRtcDsKLSAg
ICBtZW1jcHkoJnRtcCwgcywgc2l6ZW9mKFQpKTsKLSAgICByZXR1cm4gdG1wOwotI2Vsc2UKLSAg
ICAvLyBUaGlzIG1heSByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2aW9yIGR1ZSB0byB1bmFsaWdu
ZWQgYWNjZXNzLgotICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocyk7Ci0j
ZW5kaWYKLX0KLQotLy8gRG8gY29tcGFyaXNvbnMgOCBvciA0IGJ5dGVzLWF0LWEtdGltZSBvbiBh
cmNoaXRlY3R1cmVzIHdoZXJlIGl0J3Mgc2FmZS4KLSNpZiAoQ1BVKFg4Nl82NCkgfHwgQ1BVKEFS
TTY0KSkgJiYgIUFTQU5fRU5BQkxFRAotQUxXQVlTX0lOTElORSBib29sIGVxdWFsKGNvbnN0IExD
aGFyKiBhTENoYXIsIGNvbnN0IExDaGFyKiBiTENoYXIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICB1bnNpZ25lZCBkd29yZExlbmd0aCA9IGxlbmd0aCA+PiAzOwotCi0gICAgY29uc3QgY2hhciog
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGFMQ2hhcik7Ci0gICAgY29uc3QgY2hh
ciogYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJMQ2hhcik7Ci0KLSAgICBpZiAo
ZHdvcmRMZW5ndGgpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBkd29yZExl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobG9hZFVuYWxpZ25lZDx1aW50NjRfdD4oYSkg
IT0gbG9hZFVuYWxpZ25lZDx1aW50NjRfdD4oYikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgICAgICBhICs9IHNpemVvZih1aW50NjRfdCk7Ci0gICAgICAgICAgICBi
ICs9IHNpemVvZih1aW50NjRfdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobGVuZ3Ro
ICYgNCkgewotICAgICAgICBpZiAobG9hZFVuYWxpZ25lZDx1aW50MzJfdD4oYSkgIT0gbG9hZFVu
YWxpZ25lZDx1aW50MzJfdD4oYikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgYSArPSBzaXplb2YodWludDMyX3QpOwotICAgICAgICBiICs9IHNpemVvZih1aW50MzJfdCk7
Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCAmIDIpIHsKLSAgICAgICAgaWYgKGxvYWRVbmFsaWdu
ZWQ8dWludDE2X3Q+KGEpICE9IGxvYWRVbmFsaWduZWQ8dWludDE2X3Q+KGIpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGEgKz0gc2l6ZW9mKHVpbnQxNl90KTsKLSAgICAg
ICAgYiArPSBzaXplb2YodWludDE2X3QpOwotICAgIH0KLQotICAgIGlmIChsZW5ndGggJiAxICYm
ICgqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGEpICE9ICpyZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oYikpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIGVxdWFsKGNvbnN0IFVDaGFyKiBhVUNoYXIs
IGNvbnN0IFVDaGFyKiBiVUNoYXIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICB1bnNpZ25lZCBk
d29yZExlbmd0aCA9IGxlbmd0aCA+PiAyOwotCi0gICAgY29uc3QgY2hhciogYSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGFVQ2hhcik7Ci0gICAgY29uc3QgY2hhciogYiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJVQ2hhcik7Ci0KLSAgICBpZiAoZHdvcmRMZW5ndGgp
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBkd29yZExlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAobG9hZFVuYWxpZ25lZDx1aW50NjRfdD4oYSkgIT0gbG9hZFVuYWxp
Z25lZDx1aW50NjRfdD4oYikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgICAgICBhICs9IHNpemVvZih1aW50NjRfdCk7Ci0gICAgICAgICAgICBiICs9IHNpemVvZih1
aW50NjRfdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoICYgMikgewotICAg
ICAgICBpZiAobG9hZFVuYWxpZ25lZDx1aW50MzJfdD4oYSkgIT0gbG9hZFVuYWxpZ25lZDx1aW50
MzJfdD4oYikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYSArPSBzaXpl
b2YodWludDMyX3QpOwotICAgICAgICBiICs9IHNpemVvZih1aW50MzJfdCk7Ci0gICAgfQotCi0g
ICAgaWYgKGxlbmd0aCAmIDEgJiYgKCpyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oYSkg
IT0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihiKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VsaWYgQ1BVKFg4NikgJiYgIUFTQU5fRU5B
QkxFRAotQUxXQVlTX0lOTElORSBib29sIGVxdWFsKGNvbnN0IExDaGFyKiBhTENoYXIsIGNvbnN0
IExDaGFyKiBiTENoYXIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBjb25zdCBjaGFyKiBhID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYUxDaGFyKTsKLSAgICBjb25zdCBjaGFyKiBi
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYkxDaGFyKTsKLQotICAgIHVuc2lnbmVk
IHdvcmRMZW5ndGggPSBsZW5ndGggPj4gMjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9
IHdvcmRMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAobG9hZFVuYWxpZ25lZDx1aW50MzJfdD4o
YSkgIT0gbG9hZFVuYWxpZ25lZDx1aW50MzJfdD4oYikpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGEgKz0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgYiArPSBzaXplb2Yo
dWludDMyX3QpOwotICAgIH0KLQotICAgIGxlbmd0aCAmPSAzOwotCi0gICAgaWYgKGxlbmd0aCkg
ewotICAgICAgICBjb25zdCBMQ2hhciogYVJlbWFpbmRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPihhKTsKLSAgICAgICAgY29uc3QgTENoYXIqIGJSZW1haW5kZXIgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYik7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8ICBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKGFSZW1haW5kZXJbaV0gIT0g
YlJlbWFpbmRlcltpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIGVxdWFs
KGNvbnN0IFVDaGFyKiBhVUNoYXIsIGNvbnN0IFVDaGFyKiBiVUNoYXIsIHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICBjb25zdCBjaGFyKiBhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
YVVDaGFyKTsKLSAgICBjb25zdCBjaGFyKiBiID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oYlVDaGFyKTsKLQotICAgIHVuc2lnbmVkIHdvcmRMZW5ndGggPSBsZW5ndGggPj4gMTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IHdvcmRMZW5ndGg7ICsraSkgewotICAgICAgICBp
ZiAobG9hZFVuYWxpZ25lZDx1aW50MzJfdD4oYSkgIT0gbG9hZFVuYWxpZ25lZDx1aW50MzJfdD4o
YikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGEgKz0gc2l6ZW9mKHVpbnQz
Ml90KTsKLSAgICAgICAgYiArPSBzaXplb2YodWludDMyX3QpOwotICAgIH0KLQotICAgIGlmIChs
ZW5ndGggJiAxICYmICpyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oYSkgIT0gKnJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihiKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0jZWxpZiBQTEFURk9STShJT1MpICYmIFdURl9BUk1fQVJDSF9B
VF9MRUFTVCg3KSAmJiAhQVNBTl9FTkFCTEVECi1BTFdBWVNfSU5MSU5FIGJvb2wgZXF1YWwoY29u
c3QgTENoYXIqIGEsIGNvbnN0IExDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgYm9v
bCBpc0VxdWFsID0gZmFsc2U7Ci0gICAgdWludDMyX3QgYVZhbHVlOwotICAgIHVpbnQzMl90IGJW
YWx1ZTsKLSAgICBhc20oInN1YnMgICAlW2xlbmd0aF0sICM0XG4iCi0gICAgICAgICJibG8gICAg
MmZcbiIKLQotICAgICAgICAiMDpcbiIgLy8gTGFiZWwgMCA9IFN0YXJ0IG9mIGxvb3Agb3ZlciAz
MiBiaXRzLgotICAgICAgICAibGRyICAgICVbYVZhbHVlXSwgWyVbYV1dLCAjNFxuIgotICAgICAg
ICAibGRyICAgICVbYlZhbHVlXSwgWyVbYl1dLCAjNFxuIgotICAgICAgICAiY21wICAgICVbYVZh
bHVlXSwgJVtiVmFsdWVdXG4iCi0gICAgICAgICJibmUgICAgNjZmXG4iCi0gICAgICAgICJzdWJz
ICAgJVtsZW5ndGhdLCAjNFxuIgotICAgICAgICAiYmhzICAgIDBiXG4iCi0KLSAgICAgICAgLy8g
QXQgdGhpcyBwb2ludCwgbGVuZ3RoIGNhbiBiZToKLSAgICAgICAgLy8gLTA6IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwICgwIGJ5dGVzIGxlZnQpCi0gICAgICAgIC8vIC0xOiAxMTEx
MTExMTExMTExMTExMTExMTExMTExMTExMTExMSAoMyBieXRlcyBsZWZ0KQotICAgICAgICAvLyAt
MjogMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgKDIgYnl0ZXMgbGVmdCkKLSAgICAg
ICAgLy8gLTM6IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxICgxIGJ5dGUgbGVmdCkK
LSAgICAgICAgLy8gLTQ6IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwIChsZW5ndGgg
d2FzIDApCi0gICAgICAgIC8vIFRoZSBwb2ludGVycyBhcmUgYXQgdGhlIGNvcnJlY3QgcG9zaXRp
b24uCi0gICAgICAgICIyOlxuIiAvLyBMYWJlbCAyID0gRW5kIG9mIGxvb3Agb3ZlciAzMiBiaXRz
LCBjaGVjayBmb3IgcGFpciBvZiBjaGFyYWN0ZXJzLgotICAgICAgICAidHN0ICAgICVbbGVuZ3Ro
XSwgIzJcbiIKLSAgICAgICAgImJlcSAgICAxZlxuIgotICAgICAgICAibGRyaCAgICVbYVZhbHVl
XSwgWyVbYV1dLCAjMlxuIgotICAgICAgICAibGRyaCAgICVbYlZhbHVlXSwgWyVbYl1dLCAjMlxu
IgotICAgICAgICAiY21wICAgICVbYVZhbHVlXSwgJVtiVmFsdWVdXG4iCi0gICAgICAgICJibmUg
ICAgNjZmXG4iCi0KLSAgICAgICAgIjE6XG4iIC8vIExhYmVsIDEgPSBDaGVjayBmb3IgYSBzaW5n
bGUgY2hhcmFjdGVyIGxlZnQuCi0gICAgICAgICJ0c3QgICAgJVtsZW5ndGhdLCAjMVxuIgotICAg
ICAgICAiYmVxICAgIDQyZlxuIgotICAgICAgICAibGRyYiAgICVbYVZhbHVlXSwgWyVbYV1dXG4i
Ci0gICAgICAgICJsZHJiICAgJVtiVmFsdWVdLCBbJVtiXV1cbiIKLSAgICAgICAgImNtcCAgICAl
W2FWYWx1ZV0sICVbYlZhbHVlXVxuIgotICAgICAgICAiYm5lICAgIDY2ZlxuIgotCi0gICAgICAg
ICI0MjpcbiIgLy8gTGFiZWwgNDIgPSBTdWNjZXNzLgotICAgICAgICAibW92ICAgICVbaXNFcXVh
bF0sICMxXG4iCi0gICAgICAgICI2NjpcbiIgLy8gTGFiZWwgNjYgPSBFbmQgd2l0aG91dCBjaGFu
Z2luZyBpc0VxdWFsIHRvIDEuCi0gICAgICAgIDogW2xlbmd0aF0iK3IiKGxlbmd0aCksIFtpc0Vx
dWFsXSIrciIoaXNFcXVhbCksIFthXSIrciIoYSksIFtiXSIrciIoYiksIFthVmFsdWVdIityIihh
VmFsdWUpLCBbYlZhbHVlXSIrciIoYlZhbHVlKQotICAgICAgICA6Ci0gICAgICAgIDoKLSAgICAg
ICAgKTsKLSAgICByZXR1cm4gaXNFcXVhbDsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIGVxdWFs
KGNvbnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IGJvb2wgaXNFcXVhbCA9IGZhbHNlOwotICAgIHVpbnQzMl90IGFWYWx1ZTsKLSAgICB1aW50MzJf
dCBiVmFsdWU7Ci0gICAgYXNtKCJzdWJzICAgJVtsZW5ndGhdLCAjMlxuIgotICAgICAgICAiYmxv
ICAgIDFmXG4iCi0KLSAgICAgICAgIjA6XG4iIC8vIExhYmVsIDAgPSBTdGFydCBvZiBsb29wIG92
ZXIgMzIgYml0cy4KLSAgICAgICAgImxkciAgICAlW2FWYWx1ZV0sIFslW2FdXSwgIzRcbiIKLSAg
ICAgICAgImxkciAgICAlW2JWYWx1ZV0sIFslW2JdXSwgIzRcbiIKLSAgICAgICAgImNtcCAgICAl
W2FWYWx1ZV0sICVbYlZhbHVlXVxuIgotICAgICAgICAiYm5lICAgIDY2ZlxuIgotICAgICAgICAi
c3VicyAgICVbbGVuZ3RoXSwgIzJcbiIKLSAgICAgICAgImJocyAgICAwYlxuIgotCi0gICAgICAg
IC8vIEF0IHRoaXMgcG9pbnQsIGxlbmd0aCBjYW4gYmU6Ci0gICAgICAgIC8vIC0wOiAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAoMCBieXRlcyBsZWZ0KQotICAgICAgICAvLyAtMTog
MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgKDEgY2hhcmFjdGVyIGxlZnQsIDIgYnl0
ZXMpCi0gICAgICAgIC8vIC0yOiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAobGVu
Z3RoIHdhcyB6ZXJvKQotICAgICAgICAvLyBUaGUgcG9pbnRlcnMgYXJlIGF0IHRoZSBjb3JyZWN0
IHBvc2l0aW9uLgotICAgICAgICAiMTpcbiIgLy8gTGFiZWwgMSA9IENoZWNrIGZvciBhIHNpbmds
ZSBjaGFyYWN0ZXIgbGVmdC4KLSAgICAgICAgInRzdCAgICAlW2xlbmd0aF0sICMxXG4iCi0gICAg
ICAgICJiZXEgICAgNDJmXG4iCi0gICAgICAgICJsZHJoICAgJVthVmFsdWVdLCBbJVthXV1cbiIK
LSAgICAgICAgImxkcmggICAlW2JWYWx1ZV0sIFslW2JdXVxuIgotICAgICAgICAiY21wICAgICVb
YVZhbHVlXSwgJVtiVmFsdWVdXG4iCi0gICAgICAgICJibmUgICAgNjZmXG4iCi0KLSAgICAgICAg
IjQyOlxuIiAvLyBMYWJlbCA0MiA9IFN1Y2Nlc3MuCi0gICAgICAgICJtb3YgICAgJVtpc0VxdWFs
XSwgIzFcbiIKLSAgICAgICAgIjY2OlxuIiAvLyBMYWJlbCA2NiA9IEVuZCB3aXRob3V0IGNoYW5n
aW5nIGlzRXF1YWwgdG8gMS4KLSAgICAgICAgOiBbbGVuZ3RoXSIrciIobGVuZ3RoKSwgW2lzRXF1
YWxdIityIihpc0VxdWFsKSwgW2FdIityIihhKSwgW2JdIityIihiKSwgW2FWYWx1ZV0iK3IiKGFW
YWx1ZSksIFtiVmFsdWVdIityIihiVmFsdWUpCi0gICAgICAgIDoKLSAgICAgICAgOgotICAgICAg
ICApOwotICAgIHJldHVybiBpc0VxdWFsOwotfQotI2VsaWYgIUFTQU5fRU5BQkxFRAotQUxXQVlT
X0lOTElORSBib29sIGVxdWFsKGNvbnN0IExDaGFyKiBhLCBjb25zdCBMQ2hhciogYiwgdW5zaWdu
ZWQgbGVuZ3RoKSB7IHJldHVybiAhbWVtY21wKGEsIGIsIGxlbmd0aCk7IH0KLUFMV0FZU19JTkxJ
TkUgYm9vbCBlcXVhbChjb25zdCBVQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIHVuc2lnbmVkIGxl
bmd0aCkgeyByZXR1cm4gIW1lbWNtcChhLCBiLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsgfQot
I2Vsc2UKLUFMV0FZU19JTkxJTkUgYm9vbCBlcXVhbChjb25zdCBMQ2hhciogYSwgY29uc3QgTENo
YXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci1BTFdBWVNfSU5MSU5FIGJv
b2wgZXF1YWwoY29uc3QgVUNoYXIqIGEsIGNvbnN0IFVDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IGlmIChhW2ldICE9IGJbaV0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KLUFMV0FZU19JTkxJTkUgYm9vbCBlcXVhbChjb25z
dCBMQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGFbaV0gIT0g
YltpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBlcXVhbChjb25zdCBVQ2hhciogYSwgY29uc3QgTENo
YXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gZXF1YWwoYiwgYSwgbGVuZ3RoKTsgfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdDbGFzc0EsIHR5cGVuYW1lIFN0cmluZ0NsYXNzQj4K
LUFMV0FZU19JTkxJTkUgYm9vbCBlcXVhbENvbW1vbihjb25zdCBTdHJpbmdDbGFzc0EmIGEsIGNv
bnN0IFN0cmluZ0NsYXNzQiYgYikKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhLmxlbmd0aCgp
OwotICAgIGlmIChsZW5ndGggIT0gYi5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKGEuaXM4Qml0KCkpIHsKLSAgICAgICAgaWYgKGIuaXM4Qml0KCkpCi0gICAgICAg
ICAgICByZXR1cm4gZXF1YWwoYS5jaGFyYWN0ZXJzOCgpLCBiLmNoYXJhY3RlcnM4KCksIGxlbmd0
aCk7Ci0KLSAgICAgICAgcmV0dXJuIGVxdWFsKGEuY2hhcmFjdGVyczgoKSwgYi5jaGFyYWN0ZXJz
MTYoKSwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBpZiAoYi5pczhCaXQoKSkKLSAgICAgICAgcmV0
dXJuIGVxdWFsKGEuY2hhcmFjdGVyczE2KCksIGIuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKLQot
ICAgIHJldHVybiBlcXVhbChhLmNoYXJhY3RlcnMxNigpLCBiLmNoYXJhY3RlcnMxNigpLCBsZW5n
dGgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdDbGFzc0EsIHR5cGVuYW1lIFN0cmlu
Z0NsYXNzQj4KLUFMV0FZU19JTkxJTkUgYm9vbCBlcXVhbENvbW1vbihjb25zdCBTdHJpbmdDbGFz
c0EqIGEsIGNvbnN0IFN0cmluZ0NsYXNzQiogYikKLXsKLSAgICBpZiAoYSA9PSBiKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gZXF1YWwoKmEsICpiKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5n
Q2xhc3MsIHVuc2lnbmVkIGxlbmd0aD4gYm9vbCBlcXVhbChjb25zdCBTdHJpbmdDbGFzcyYgYSwg
Y29uc3QgVUNoYXIgKCZjb2RlVW5pdHMpW2xlbmd0aF0pCi17Ci0gICAgaWYgKGEubGVuZ3RoKCkg
IT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS5pczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIGVxdWFsKGEuY2hhcmFjdGVyczgoKSwgY29kZVVuaXRzLCBsZW5ndGgp
OwotCi0gICAgcmV0dXJuIGVxdWFsKGEuY2hhcmFjdGVyczE2KCksIGNvZGVVbml0cywgbGVuZ3Ro
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZUEsIHR5cGVuYW1lIENoYXJh
Y3RlclR5cGVCPgotaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBDaGFy
YWN0ZXJUeXBlQSogYSwgY29uc3QgQ2hhcmFjdGVyVHlwZUIqIGIsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
aWYgKHRvQVNDSUlMb3dlcihhW2ldKSAhPSB0b0FTQ0lJTG93ZXIoYltpXSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlQSwgdHlwZW5hbWUgQ2hhcmFjdGVyVHlwZUI+IGlubGluZSBi
b29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQ2hhcmFjdGVyVHlwZUEqIGEsIHVuc2ln
bmVkIGxlbmd0aEEsIGNvbnN0IENoYXJhY3RlclR5cGVCKiBiLCB1bnNpZ25lZCBsZW5ndGhCKQot
ewotICAgIHJldHVybiBsZW5ndGhBID09IGxlbmd0aEIgJiYgZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShhLCBiLCBsZW5ndGhBKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nQ2xhc3NBLCB0
eXBlbmFtZSBTdHJpbmdDbGFzc0I+Ci1ib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2VDb21tb24o
Y29uc3QgU3RyaW5nQ2xhc3NBJiBhLCBjb25zdCBTdHJpbmdDbGFzc0ImIGIpCi17Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gYS5sZW5ndGgoKTsKLSAgICBpZiAobGVuZ3RoICE9IGIubGVuZ3RoKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhLmlzOEJpdCgpKSB7Ci0gICAgICAg
IGlmIChiLmlzOEJpdCgpKQotICAgICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoYS5jaGFyYWN0ZXJzOCgpLCBiLmNoYXJhY3RlcnM4KCksIGxlbmd0aCk7Ci0KLSAgICAgICAg
cmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYS5jaGFyYWN0ZXJzOCgpLCBiLmNoYXJhY3Rl
cnMxNigpLCBsZW5ndGgpOwotICAgIH0KLQotICAgIGlmIChiLmlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhLmNoYXJhY3RlcnMxNigpLCBiLmNoYXJhY3Rl
cnM4KCksIGxlbmd0aCk7Ci0KLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhLmNo
YXJhY3RlcnMxNigpLCBiLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBTdHJpbmdDbGFzc0E+IGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbihj
b25zdCBTdHJpbmdDbGFzc0EmIGEsIGNvbnN0IGNoYXIqIGIpCi17Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gYS5sZW5ndGgoKTsKLSAgICBpZiAobGVuZ3RoICE9IHN0cmxlbihiKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGEuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGEuY2hhcmFjdGVyczgoKSwgYiwgbGVuZ3RoKTsKLQotICAgIHJl
dHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEuY2hhcmFjdGVyczE2KCksIGIsIGxlbmd0aCk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ0NsYXNzQSwgdHlwZW5hbWUgU3RyaW5nQ2xh
c3NCPgotYm9vbCBzdGFydHNXaXRoKGNvbnN0IFN0cmluZ0NsYXNzQSYgcmVmZXJlbmNlLCBjb25z
dCBTdHJpbmdDbGFzc0ImIHByZWZpeCkKLXsKLSAgICB1bnNpZ25lZCBwcmVmaXhMZW5ndGggPSBw
cmVmaXgubGVuZ3RoKCk7Ci0gICAgaWYgKHByZWZpeExlbmd0aCA+IHJlZmVyZW5jZS5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHJlZmVyZW5jZS5pczhCaXQoKSkg
ewotICAgICAgICBpZiAocHJlZml4LmlzOEJpdCgpKQotICAgICAgICAgICAgcmV0dXJuIGVxdWFs
KHJlZmVyZW5jZS5jaGFyYWN0ZXJzOCgpLCBwcmVmaXguY2hhcmFjdGVyczgoKSwgcHJlZml4TGVu
Z3RoKTsKLSAgICAgICAgcmV0dXJuIGVxdWFsKHJlZmVyZW5jZS5jaGFyYWN0ZXJzOCgpLCBwcmVm
aXguY2hhcmFjdGVyczE2KCksIHByZWZpeExlbmd0aCk7Ci0gICAgfQotICAgIGlmIChwcmVmaXgu
aXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBlcXVhbChyZWZlcmVuY2UuY2hhcmFjdGVyczE2KCks
IHByZWZpeC5jaGFyYWN0ZXJzOCgpLCBwcmVmaXhMZW5ndGgpOwotICAgIHJldHVybiBlcXVhbChy
ZWZlcmVuY2UuY2hhcmFjdGVyczE2KCksIHByZWZpeC5jaGFyYWN0ZXJzMTYoKSwgcHJlZml4TGVu
Z3RoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nQ2xhc3NBLCB0eXBlbmFtZSBTdHJp
bmdDbGFzc0I+Ci1ib29sIHN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdD
bGFzc0EmIHJlZmVyZW5jZSwgY29uc3QgU3RyaW5nQ2xhc3NCJiBwcmVmaXgpCi17Ci0gICAgdW5z
aWduZWQgcHJlZml4TGVuZ3RoID0gcHJlZml4Lmxlbmd0aCgpOwotICAgIGlmIChwcmVmaXhMZW5n
dGggPiByZWZlcmVuY2UubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChyZWZlcmVuY2UuaXM4Qml0KCkpIHsKLSAgICAgICAgaWYgKHByZWZpeC5pczhCaXQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZS5jaGFyYWN0
ZXJzOCgpLCBwcmVmaXguY2hhcmFjdGVyczgoKSwgcHJlZml4TGVuZ3RoKTsKLSAgICAgICAgcmV0
dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UocmVmZXJlbmNlLmNoYXJhY3RlcnM4KCksIHByZWZp
eC5jaGFyYWN0ZXJzMTYoKSwgcHJlZml4TGVuZ3RoKTsKLSAgICB9Ci0gICAgaWYgKHByZWZpeC5p
czhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UocmVmZXJlbmNl
LmNoYXJhY3RlcnMxNigpLCBwcmVmaXguY2hhcmFjdGVyczgoKSwgcHJlZml4TGVuZ3RoKTsKLSAg
ICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2UuY2hhcmFjdGVyczE2KCks
IHByZWZpeC5jaGFyYWN0ZXJzMTYoKSwgcHJlZml4TGVuZ3RoKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgU3RyaW5nQ2xhc3NBLCB0eXBlbmFtZSBTdHJpbmdDbGFzc0I+Ci1ib29sIGVuZHNXaXRo
KGNvbnN0IFN0cmluZ0NsYXNzQSYgcmVmZXJlbmNlLCBjb25zdCBTdHJpbmdDbGFzc0ImIHN1ZmZp
eCkKLXsKLSAgICB1bnNpZ25lZCBzdWZmaXhMZW5ndGggPSBzdWZmaXgubGVuZ3RoKCk7Ci0gICAg
dW5zaWduZWQgcmVmZXJlbmNlTGVuZ3RoID0gcmVmZXJlbmNlLmxlbmd0aCgpOwotICAgIGlmIChz
dWZmaXhMZW5ndGggPiByZWZlcmVuY2VMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gcmVmZXJlbmNlTGVuZ3RoIC0gc3VmZml4TGVuZ3Ro
OwotCi0gICAgaWYgKHJlZmVyZW5jZS5pczhCaXQoKSkgewotICAgICAgICBpZiAoc3VmZml4Lmlz
OEJpdCgpKQotICAgICAgICAgICAgcmV0dXJuIGVxdWFsKHJlZmVyZW5jZS5jaGFyYWN0ZXJzOCgp
ICsgc3RhcnRPZmZzZXQsIHN1ZmZpeC5jaGFyYWN0ZXJzOCgpLCBzdWZmaXhMZW5ndGgpOwotICAg
ICAgICByZXR1cm4gZXF1YWwocmVmZXJlbmNlLmNoYXJhY3RlcnM4KCkgKyBzdGFydE9mZnNldCwg
c3VmZml4LmNoYXJhY3RlcnMxNigpLCBzdWZmaXhMZW5ndGgpOwotICAgIH0KLSAgICBpZiAoc3Vm
Zml4LmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gZXF1YWwocmVmZXJlbmNlLmNoYXJhY3RlcnMx
NigpICsgc3RhcnRPZmZzZXQsIHN1ZmZpeC5jaGFyYWN0ZXJzOCgpLCBzdWZmaXhMZW5ndGgpOwot
ICAgIHJldHVybiBlcXVhbChyZWZlcmVuY2UuY2hhcmFjdGVyczE2KCkgKyBzdGFydE9mZnNldCwg
c3VmZml4LmNoYXJhY3RlcnMxNigpLCBzdWZmaXhMZW5ndGgpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBTdHJpbmdDbGFzc0EsIHR5cGVuYW1lIFN0cmluZ0NsYXNzQj4KLWJvb2wgZW5kc1dpdGhJ
Z25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdDbGFzc0EmIHJlZmVyZW5jZSwgY29uc3QgU3Ry
aW5nQ2xhc3NCJiBzdWZmaXgpCi17Ci0gICAgdW5zaWduZWQgc3VmZml4TGVuZ3RoID0gc3VmZml4
Lmxlbmd0aCgpOwotICAgIHVuc2lnbmVkIHJlZmVyZW5jZUxlbmd0aCA9IHJlZmVyZW5jZS5sZW5n
dGgoKTsKLSAgICBpZiAoc3VmZml4TGVuZ3RoID4gcmVmZXJlbmNlTGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHJlZmVyZW5jZUxlbmd0
aCAtIHN1ZmZpeExlbmd0aDsKLQotICAgIGlmIChyZWZlcmVuY2UuaXM4Qml0KCkpIHsKLSAgICAg
ICAgaWYgKHN1ZmZpeC5pczhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKHJlZmVyZW5jZS5jaGFyYWN0ZXJzOCgpICsgc3RhcnRPZmZzZXQsIHN1ZmZpeC5j
aGFyYWN0ZXJzOCgpLCBzdWZmaXhMZW5ndGgpOwotICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShyZWZlcmVuY2UuY2hhcmFjdGVyczgoKSArIHN0YXJ0T2Zmc2V0LCBzdWZmaXgu
Y2hhcmFjdGVyczE2KCksIHN1ZmZpeExlbmd0aCk7Ci0gICAgfQotICAgIGlmIChzdWZmaXguaXM4
Qml0KCkpCi0gICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHJlZmVyZW5jZS5j
aGFyYWN0ZXJzMTYoKSArIHN0YXJ0T2Zmc2V0LCBzdWZmaXguY2hhcmFjdGVyczgoKSwgc3VmZml4
TGVuZ3RoKTsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShyZWZlcmVuY2UuY2hh
cmFjdGVyczE2KCkgKyBzdGFydE9mZnNldCwgc3VmZml4LmNoYXJhY3RlcnMxNigpLCBzdWZmaXhM
ZW5ndGgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgU2VhcmNoQ2hhcmFjdGVyVHlwZSwgdHlw
ZW5hbWUgTWF0Y2hDaGFyYWN0ZXJUeXBlPgotc2l6ZV90IGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShj
b25zdCBTZWFyY2hDaGFyYWN0ZXJUeXBlKiBzb3VyY2UsIGNvbnN0IE1hdGNoQ2hhcmFjdGVyVHlw
ZSogbWF0Y2hDaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgc2VhcmNo
TGVuZ3RoLCB1bnNpZ25lZCBtYXRjaExlbmd0aCkKLXsKLSAgICBBU1NFUlQoc2VhcmNoTGVuZ3Ro
ID49IG1hdGNoTGVuZ3RoKTsKLQotICAgIGNvbnN0IFNlYXJjaENoYXJhY3RlclR5cGUqIHN0YXJ0
U2VhcmNoZWRDaGFyYWN0ZXJzID0gc291cmNlICsgc3RhcnRPZmZzZXQ7Ci0KLSAgICAvLyBkZWx0
YSBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgdGltZXMgdG8gdGVzdDsgZGVsdGEgPT0gMCBt
ZWFucyB0ZXN0IG9ubHkgb25jZS4KLSAgICB1bnNpZ25lZCBkZWx0YSA9IHNlYXJjaExlbmd0aCAt
IG1hdGNoTGVuZ3RoOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBkZWx0YTsgKytp
KSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHN0YXJ0U2VhcmNoZWRDaGFy
YWN0ZXJzICsgaSwgbWF0Y2hDaGFyYWN0ZXJzLCBtYXRjaExlbmd0aCkpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhcnRPZmZzZXQgKyBpOwotICAgIH0KLSAgICByZXR1cm4gbm90Rm91bmQ7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ0NsYXNzQSwgdHlwZW5hbWUgU3RyaW5nQ2xhc3NCPgot
c2l6ZV90IGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdDbGFzc0EmIHNvdXJjZSwg
Y29uc3QgU3RyaW5nQ2xhc3NCJiBzdHJpbmdUb0ZpbmQsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KQot
ewotICAgIHVuc2lnbmVkIHNvdXJjZVN0cmluZ0xlbmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKLSAg
ICB1bnNpZ25lZCBtYXRjaExlbmd0aCA9IHN0cmluZ1RvRmluZC5sZW5ndGgoKTsKLSAgICBpZiAo
IW1hdGNoTGVuZ3RoKQotICAgICAgICByZXR1cm4gc3RkOjptaW4oc3RhcnRPZmZzZXQsIHNvdXJj
ZVN0cmluZ0xlbmd0aCk7Ci0KLSAgICAvLyBDaGVjayBzdGFydE9mZnNldCAmIG1hdGNoTGVuZ3Ro
IGFyZSBpbiByYW5nZS4KLSAgICBpZiAoc3RhcnRPZmZzZXQgPiBzb3VyY2VTdHJpbmdMZW5ndGgp
Ci0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICB1bnNpZ25lZCBzZWFyY2hMZW5ndGggPSBz
b3VyY2VTdHJpbmdMZW5ndGggLSBzdGFydE9mZnNldDsKLSAgICBpZiAobWF0Y2hMZW5ndGggPiBz
ZWFyY2hMZW5ndGgpCi0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLQotICAgIGlmIChzb3VyY2Uu
aXM4Qml0KCkpIHsKLSAgICAgICAgaWYgKHN0cmluZ1RvRmluZC5pczhCaXQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmaW5kSWdub3JpbmdBU0NJSUNhc2Uoc291cmNlLmNoYXJhY3RlcnM4KCksIHN0
cmluZ1RvRmluZC5jaGFyYWN0ZXJzOCgpLCBzdGFydE9mZnNldCwgc2VhcmNoTGVuZ3RoLCBtYXRj
aExlbmd0aCk7Ci0gICAgICAgIHJldHVybiBmaW5kSWdub3JpbmdBU0NJSUNhc2Uoc291cmNlLmNo
YXJhY3RlcnM4KCksIHN0cmluZ1RvRmluZC5jaGFyYWN0ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHNl
YXJjaExlbmd0aCwgbWF0Y2hMZW5ndGgpOwotICAgIH0KLQotICAgIGlmIChzdHJpbmdUb0ZpbmQu
aXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBmaW5kSWdub3JpbmdBU0NJSUNhc2Uoc291cmNlLmNo
YXJhY3RlcnMxNigpLCBzdHJpbmdUb0ZpbmQuY2hhcmFjdGVyczgoKSwgc3RhcnRPZmZzZXQsIHNl
YXJjaExlbmd0aCwgbWF0Y2hMZW5ndGgpOwotCi0gICAgcmV0dXJuIGZpbmRJZ25vcmluZ0FTQ0lJ
Q2FzZShzb3VyY2UuY2hhcmFjdGVyczE2KCksIHN0cmluZ1RvRmluZC5jaGFyYWN0ZXJzMTYoKSwg
c3RhcnRPZmZzZXQsIHNlYXJjaExlbmd0aCwgbWF0Y2hMZW5ndGgpOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgU2VhcmNoQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgTWF0Y2hDaGFyYWN0ZXJUeXBl
PgotQUxXQVlTX0lOTElORSBzdGF0aWMgc2l6ZV90IGZpbmRJbm5lcihjb25zdCBTZWFyY2hDaGFy
YWN0ZXJUeXBlKiBzZWFyY2hDaGFyYWN0ZXJzLCBjb25zdCBNYXRjaENoYXJhY3RlclR5cGUqIG1h
dGNoQ2hhcmFjdGVycywgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIHNlYXJjaExlbmd0aCwgdW5z
aWduZWQgbWF0Y2hMZW5ndGgpCi17Ci0gICAgLy8gT3B0aW1pemF0aW9uOiBrZWVwIGEgcnVubmlu
ZyBoYXNoIG9mIHRoZSBzdHJpbmdzLAotICAgIC8vIG9ubHkgY2FsbCBlcXVhbCgpIGlmIHRoZSBo
YXNoZXMgbWF0Y2guCi0KLSAgICAvLyBkZWx0YSBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwg
dGltZXMgdG8gdGVzdDsgZGVsdGEgPT0gMCBtZWFucyB0ZXN0IG9ubHkgb25jZS4KLSAgICB1bnNp
Z25lZCBkZWx0YSA9IHNlYXJjaExlbmd0aCAtIG1hdGNoTGVuZ3RoOwotCi0gICAgdW5zaWduZWQg
c2VhcmNoSGFzaCA9IDA7Ci0gICAgdW5zaWduZWQgbWF0Y2hIYXNoID0gMDsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaExlbmd0aDsgKytpKSB7Ci0gICAgICAgIHNlYXJjaEhh
c2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tpXTsKLSAgICAgICAgbWF0Y2hIYXNoICs9IG1hdGNoQ2hh
cmFjdGVyc1tpXTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAvLyBrZWVwIGxv
b3BpbmcgdW50aWwgd2UgbWF0Y2gKLSAgICB3aGlsZSAoc2VhcmNoSGFzaCAhPSBtYXRjaEhhc2gg
fHwgIWVxdWFsKHNlYXJjaENoYXJhY3RlcnMgKyBpLCBtYXRjaENoYXJhY3RlcnMsIG1hdGNoTGVu
Z3RoKSkgewotICAgICAgICBpZiAoaSA9PSBkZWx0YSkKLSAgICAgICAgICAgIHJldHVybiBub3RG
b3VuZDsKLSAgICAgICAgc2VhcmNoSGFzaCArPSBzZWFyY2hDaGFyYWN0ZXJzW2kgKyBtYXRjaExl
bmd0aF07Ci0gICAgICAgIHNlYXJjaEhhc2ggLT0gc2VhcmNoQ2hhcmFjdGVyc1tpXTsKLSAgICAg
ICAgKytpOwotICAgIH0KLSAgICByZXR1cm4gaW5kZXggKyBpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIHNpemVfdCBmaW5kKGNvbnN0IENoYXJhY3RlclR5
cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ2hhcmFjdGVyVHlwZSBtYXRjaENoYXJh
Y3RlciwgdW5zaWduZWQgaW5kZXggPSAwKQotewotICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkg
ewotICAgICAgICBpZiAoY2hhcmFjdGVyc1tpbmRleF0gPT0gbWF0Y2hDaGFyYWN0ZXIpCi0gICAg
ICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICsraW5kZXg7Ci0gICAgfQotICAgIHJldHVy
biBub3RGb3VuZDsKLX0KLQotQUxXQVlTX0lOTElORSBzaXplX3QgZmluZChjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBMQ2hhciBtYXRjaENoYXJhY3RlciwgdW5zaWdu
ZWQgaW5kZXggPSAwKQotewotICAgIHJldHVybiBmaW5kKGNoYXJhY3RlcnMsIGxlbmd0aCwgc3Rh
dGljX2Nhc3Q8VUNoYXI+KG1hdGNoQ2hhcmFjdGVyKSwgaW5kZXgpOwotfQotCi1pbmxpbmUgc2l6
ZV90IGZpbmQoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIg
bWF0Y2hDaGFyYWN0ZXIsIHVuc2lnbmVkIGluZGV4ID0gMCkKLXsKLSAgICBpZiAobWF0Y2hDaGFy
YWN0ZXIgJiB+MHhGRikKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIHJldHVybiBmaW5k
KGNoYXJhY3RlcnMsIGxlbmd0aCwgc3RhdGljX2Nhc3Q8TENoYXI+KG1hdGNoQ2hhcmFjdGVyKSwg
aW5kZXgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdDbGFzcz4KLXNpemVfdCBmaW5k
Q29tbW9uKGNvbnN0IFN0cmluZ0NsYXNzJiBoYXlzdGFjaywgY29uc3QgU3RyaW5nQ2xhc3MmIG5l
ZWRsZSwgdW5zaWduZWQgc3RhcnQpCi17Ci0gICAgdW5zaWduZWQgbmVlZGxlTGVuZ3RoID0gbmVl
ZGxlLmxlbmd0aCgpOwotCi0gICAgaWYgKG5lZWRsZUxlbmd0aCA9PSAxKSB7Ci0gICAgICAgIGlm
IChoYXlzdGFjay5pczhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6OmZpbmQoaGF5c3Rh
Y2suY2hhcmFjdGVyczgoKSwgaGF5c3RhY2subGVuZ3RoKCksIG5lZWRsZVswXSwgc3RhcnQpOwot
ICAgICAgICByZXR1cm4gV1RGOjpmaW5kKGhheXN0YWNrLmNoYXJhY3RlcnMxNigpLCBoYXlzdGFj
ay5sZW5ndGgoKSwgbmVlZGxlWzBdLCBzdGFydCk7Ci0gICAgfQotCi0gICAgaWYgKCFuZWVkbGVM
ZW5ndGgpCi0gICAgICAgIHJldHVybiBzdGQ6Om1pbihzdGFydCwgaGF5c3RhY2subGVuZ3RoKCkp
OwotCi0gICAgaWYgKHN0YXJ0ID4gaGF5c3RhY2subGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBu
b3RGb3VuZDsKLSAgICB1bnNpZ25lZCBzZWFyY2hMZW5ndGggPSBoYXlzdGFjay5sZW5ndGgoKSAt
IHN0YXJ0OwotICAgIGlmIChuZWVkbGVMZW5ndGggPiBzZWFyY2hMZW5ndGgpCi0gICAgICAgIHJl
dHVybiBub3RGb3VuZDsKLQotICAgIGlmIChoYXlzdGFjay5pczhCaXQoKSkgewotICAgICAgICBp
ZiAobmVlZGxlLmlzOEJpdCgpKQotICAgICAgICAgICAgcmV0dXJuIGZpbmRJbm5lcihoYXlzdGFj
ay5jaGFyYWN0ZXJzOCgpICsgc3RhcnQsIG5lZWRsZS5jaGFyYWN0ZXJzOCgpLCBzdGFydCwgc2Vh
cmNoTGVuZ3RoLCBuZWVkbGVMZW5ndGgpOwotICAgICAgICByZXR1cm4gZmluZElubmVyKGhheXN0
YWNrLmNoYXJhY3RlcnM4KCkgKyBzdGFydCwgbmVlZGxlLmNoYXJhY3RlcnMxNigpLCBzdGFydCwg
c2VhcmNoTGVuZ3RoLCBuZWVkbGVMZW5ndGgpOwotICAgIH0KLQotICAgIGlmIChuZWVkbGUuaXM4
Qml0KCkpCi0gICAgICAgIHJldHVybiBmaW5kSW5uZXIoaGF5c3RhY2suY2hhcmFjdGVyczE2KCkg
KyBzdGFydCwgbmVlZGxlLmNoYXJhY3RlcnM4KCksIHN0YXJ0LCBzZWFyY2hMZW5ndGgsIG5lZWRs
ZUxlbmd0aCk7Ci0KLSAgICByZXR1cm4gZmluZElubmVyKGhheXN0YWNrLmNoYXJhY3RlcnMxNigp
ICsgc3RhcnQsIG5lZWRsZS5jaGFyYWN0ZXJzMTYoKSwgc3RhcnQsIHNlYXJjaExlbmd0aCwgbmVl
ZGxlTGVuZ3RoKTsKLX0KLQotLy8gVGhpcyBpcyBtYXJrZWQgaW5saW5lIHNpbmNlIGl0J3MgbW9z
dGx5IHVzZWQgaW4gbm9uLWlubGluZSBmdW5jdGlvbnMgZm9yIGVhY2ggc3RyaW5nIHR5cGUuCi0v
LyBXaGVuIHVzZWQgZGlyZWN0bHkgaW4gY29kZSBpdCdzIHByb2JhYmx5IE9LIHRvIGJlIGlubGlu
ZTsgbWF5YmUgdGhlIGxvb3Agd2lsbCBiZSB1bnJvbGxlZC4KLXRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGlubGluZSBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNv
bnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGNvbnN0IGNoYXIqIGxvd2VyY2FzZUxldHRl
cnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJh
Y3RlcnNbaV0sIGxvd2VyY2FzZUxldHRlcnNbaV0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZSwgdW5zaWduZWQgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aD4gaW5saW5lIGJvb2wgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVy
cywgdW5zaWduZWQgY2hhcmFjdGVyc0xlbmd0aCwgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRl
cnMpW2xvd2VyY2FzZUxldHRlcnNMZW5ndGhdKQotewotICAgIEFTU0VSVChzdHJsZW4obG93ZXJj
YXNlTGV0dGVycykgPT0gbG93ZXJjYXNlTGV0dGVyc0xlbmd0aCAtIDEpOwotICAgIHVuc2lnbmVk
IGxvd2VyY2FzZUxldHRlcnNTdHJpbmdMZW5ndGggPSBsb3dlcmNhc2VMZXR0ZXJzTGVuZ3RoIC0g
MTsKLSAgICByZXR1cm4gY2hhcmFjdGVyc0xlbmd0aCA9PSBsb3dlcmNhc2VMZXR0ZXJzU3RyaW5n
TGVuZ3RoICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNoYXJhY3RlcnMsIGxvd2Vy
Y2FzZUxldHRlcnMsIGxvd2VyY2FzZUxldHRlcnNTdHJpbmdMZW5ndGgpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBTdHJpbmdDbGFzcz4gYm9vbCBpbmxpbmUgaGFzUHJlZml4V2l0aExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZUNvbW1vbihjb25zdCBTdHJpbmdDbGFzcyYgc3RyaW5nLCBjb25zdCBj
aGFyKiBsb3dlcmNhc2VMZXR0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0jaWYgQVNTRVJUX0VO
QUJMRUQKLSAgICBBU1NFUlQoKmxvd2VyY2FzZUxldHRlcnMpOwotICAgIGZvciAoY29uc3QgY2hh
ciogbGV0dGVyID0gbG93ZXJjYXNlTGV0dGVyczsgKmxldHRlcjsgKytsZXR0ZXIpCi0gICAgICAg
IEFTU0VSVCh0b0FTQ0lJTG93ZXJVbmNoZWNrZWQoKmxldHRlcikgPT0gKmxldHRlcik7Ci0jZW5k
aWYKLSAgICBBU1NFUlQoc3RyaW5nLmxlbmd0aCgpID49IGxlbmd0aCk7Ci0KLSAgICBpZiAoc3Ry
aW5nLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2Uoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxvd2VyY2FzZUxldHRlcnMsIGxlbmd0aCk7Ci0gICAg
cmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZy5jaGFyYWN0ZXJzMTYo
KSwgbG93ZXJjYXNlTGV0dGVycywgbGVuZ3RoKTsKLX0KLQotLy8gVGhpcyBpcyBpbnRlbnRpb25h
bGx5IG5vdCBtYXJrZWQgaW5saW5lIGJlY2F1c2UgaXQncyB1c2VkIG9mdGVuIGFuZCBpcyBub3Qg
c3BlZWQtY3JpdGljYWwgZW5vdWdoIHRvIHdhbnQgaXQgaW5saW5lZCBldmVyeXdoZXJlLgotdGVt
cGxhdGU8dHlwZW5hbWUgU3RyaW5nQ2xhc3M+IGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2VDb21tb25XaXRob3V0TGVuZ3RoKGNvbnN0IFN0cmluZ0NsYXNzJiBzdHJpbmcsIGNvbnN0
IGNoYXIqIGxvd2VyY2FzZUxldHRlcnMpCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5n
Lmxlbmd0aCgpOwotICAgIGlmIChsZW5ndGggIT0gc3RybGVuKGxvd2VyY2FzZUxldHRlcnMpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGhhc1ByZWZpeFdpdGhMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2VDb21tb24oc3RyaW5nLCBsb3dlcmNhc2VMZXR0ZXJzLCBsZW5ndGgpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdDbGFzcz4gYm9vbCBzdGFydHNXaXRoTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlQ29tbW9uV2l0aG91dExlbmd0aChjb25zdCBTdHJpbmdDbGFzcyYg
c3RyaW5nLCBjb25zdCBjaGFyKiBsb3dlcmNhc2VMZXR0ZXJzKQotewotICAgIHNpemVfdCBwcmVm
aXhMZW5ndGggPSBzdHJsZW4obG93ZXJjYXNlTGV0dGVycyk7Ci0gICAgaWYgKCFwcmVmaXhMZW5n
dGgpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPCBwcmVm
aXhMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaGFzUHJlZml4V2l0
aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbihzdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMs
IHByZWZpeExlbmd0aCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ0NsYXNzLCB1bnNp
Z25lZCBsZW5ndGg+IGlubGluZSBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlQ29t
bW9uKGNvbnN0IFN0cmluZ0NsYXNzJiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0
ZXJzKVtsZW5ndGhdKQotewotICAgIC8vIERvbid0IGFjdHVhbGx5IHVzZSB0aGUgbGVuZ3RoOyB3
ZSBhcmUgY2hvb3NpbmcgY29kZSBzaXplIG92ZXIgc3BlZWQuCi0gICAgQVNTRVJUKHN0cmxlbihs
b3dlcmNhc2VMZXR0ZXJzKSA9PSBsZW5ndGggLSAxKTsKLSAgICBjb25zdCBjaGFyKiBwb2ludGVy
ID0gbG93ZXJjYXNlTGV0dGVyczsKLSAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2VDb21tb25XaXRob3V0TGVuZ3RoKHN0cmluZywgcG9pbnRlcik7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFN0cmluZ0NsYXNzLCB1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBib29sIHN0YXJ0
c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb24oY29uc3QgU3RyaW5nQ2xhc3MmIHN0
cmluZywgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pCi17Ci0gICAgY29u
c3QgY2hhciogcG9pbnRlciA9IGxvd2VyY2FzZUxldHRlcnM7Ci0gICAgcmV0dXJuIHN0YXJ0c1dp
dGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2VDb21tb25XaXRob3V0TGVuZ3RoKHN0cmluZywgcG9p
bnRlcik7Ci19Ci0KLX0KLQotdXNpbmcgV1RGOjplcXVhbElnbm9yaW5nQVNDSUlDYXNlOwotdXNp
bmcgV1RGOjplcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZTsKLQotI2VuZGlmIC8vIFN0cmlu
Z0NvbW1vbl9oCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYWZmYjdlMTk1YjI0N2EwM2E3Y2JmMjUxZWEyZmM0ZTQ0ZTBiYzEwMC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MzYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIFN0cmluZ0NvbmNhdGVuYXRlX2gKLSNkZWZpbmUgU3RyaW5nQ29uY2F0
ZW5hdGVfaAotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZm5kZWYgQXRvbWljU3RyaW5nX2gK
LSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLSNlbmRpZgotCi0jaWZuZGVmIFN0
cmluZ1ZpZXdfaAotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KLSNlbmRpZgotCi0v
LyBUaGlzIG1hY3JvIGlzIGhlbHBmdWwgZm9yIHRlc3RpbmcgaG93IG1hbnkgaW50ZXJtZWRpYXRl
IFN0cmluZ3MgYXJlIGNyZWF0ZWQgd2hpbGUgZXZhbHVhdGluZyBhbgotLy8gZXhwcmVzc2lvbiBj
b250YWluaW5nIG9wZXJhdG9yKy4KLSNpZm5kZWYgV1RGX1NUUklOR1RZUEVBREFQVEVSX0NPUElF
RF9XVEZfU1RSSU5HCi0jZGVmaW5lIFdURl9TVFJJTkdUWVBFQURBUFRFUl9DT1BJRURfV1RGX1NU
UklORygpICgodm9pZCkwKQotI2VuZGlmCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBTdHJpbmdUeXBlPgotY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI7Ci0KLXRlbXBsYXRl
PD4KLWNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGNoYXI+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxjaGFyPihjaGFyIGNoYXJhY3RlcikKLSAgICAgICAgOiBtX2NoYXJhY3Rlcihj
aGFyYWN0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJu
IDE7IH0KLSAgICBib29sIGlzOEJpdCgpIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZvaWQgd3Jp
dGVUbyhMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0Ci0gICAgewotICAgICAgICAqZGVzdGluYXRp
b24gPSBtX2NoYXJhY3RlcjsKLSAgICB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3Rp
bmF0aW9uKSBjb25zdAotICAgIHsKLSAgICAgICAgKmRlc3RpbmF0aW9uID0gbV9jaGFyYWN0ZXI7
Ci0gICAgfQotCi0gICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCZt
X2NoYXJhY3RlciwgMSk7IH0KLQotcHJpdmF0ZToKLSAgICBjaGFyIG1fY2hhcmFjdGVyOwotfTsK
LQotdGVtcGxhdGU8PgotY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8VUNoYXI+IHsKLXB1YmxpYzoK
LSAgICBTdHJpbmdUeXBlQWRhcHRlcjxVQ2hhcj4oVUNoYXIgY2hhcmFjdGVyKQotICAgICAgICA6
IG1fY2hhcmFjdGVyKGNoYXJhY3RlcikKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gMTsgfQotICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1
cm4gbV9jaGFyYWN0ZXIgPD0gMHhmZjsgfQotCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0
aW5hdGlvbikgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpczhCaXQoKSk7Ci0gICAgICAg
ICpkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PExDaGFyPihtX2NoYXJhY3Rlcik7Ci0gICAgfQot
Ci0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKLSAgICB7Ci0gICAg
ICAgICpkZXN0aW5hdGlvbiA9IG1fY2hhcmFjdGVyOwotICAgIH0KLQotICAgIFN0cmluZyB0b1N0
cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygmbV9jaGFyYWN0ZXIsIDEpOyB9Ci0KLXByaXZh
dGU6Ci0gICAgVUNoYXIgbV9jaGFyYWN0ZXI7Ci19OwotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBTdHJp
bmdUeXBlQWRhcHRlcjxjb25zdCBMQ2hhcio+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRh
cHRlcihjb25zdCBMQ2hhciogY2hhcmFjdGVycykKLSAgICAgICAgOiBtX2NoYXJhY3RlcnMoY2hh
cmFjdGVycykKLSAgICAgICAgLCBtX2xlbmd0aChzdHJsZW4ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oY2hhcmFjdGVycykpKQotICAgIHsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQotICAgIGJvb2wgaXM4Qml0KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIFN0cmluZ1ZpZXcobV9jaGFyYWN0ZXJzLCBtX2xlbmd0aCku
Z2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24pOwotICAgIH0KLQotICAgIHZv
aWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0Ci0gICAgewotICAgICAgICBTdHJp
bmdWaWV3KG1fY2hhcmFjdGVycywgbV9sZW5ndGgpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0
KGRlc3RpbmF0aW9uKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBTdHJpbmcobV9jaGFyYWN0ZXJzLCBtX2xlbmd0aCk7IH0KLQotcHJpdmF0ZToKLSAgICBj
b25zdCBMQ2hhciogbV9jaGFyYWN0ZXJzOwotICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotfTsKLQot
dGVtcGxhdGU8PgotY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgVUNoYXIqPiB7Ci1wdWJs
aWM6Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMpCi0gICAg
ICAgIDogbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSAwOwotICAgICAgICB3aGlsZSAobV9jaGFyYWN0ZXJzW2xlbmd0aF0pCi0gICAgICAg
ICAgICArK2xlbmd0aDsKLQotICAgICAgICBpZiAobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKSAvLyBGSVhNRSB0aGlzIGlzIHNpbGx5IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3OTAKLSAgICAgICAgICAgIENSQVNIKCk7Ci0K
LSAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgd3JpdGVU
byhMQ2hhciopIGNvbnN0Ci0gICAgewotICAgICAgICBDUkFTSCgpOyAvLyBGSVhNRSBtYWtlIHRo
aXMgYSBjb21waWxlLXRpbWUgZmFpbHVyZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1NzkxCi0gICAgfQotCi0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5h
dGlvbikgY29uc3QKLSAgICB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgbV9jaGFyYWN0
ZXJzLCBtX2xlbmd0aCAqIHNpemVvZihVQ2hhcikpOwotICAgIH0KLQotICAgIFN0cmluZyB0b1N0
cmluZygpIGNvbnN0IHsgcmV0dXJuIFN0cmluZyhtX2NoYXJhY3RlcnMsIG1fbGVuZ3RoKTsgfQot
Ci1wcml2YXRlOgotICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3RlcnM7Ci0gICAgdW5zaWduZWQg
bV9sZW5ndGg7Ci19OwotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjb25z
dCBjaGFyKj4gOiBwdWJsaWMgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgTENoYXIqPiB7Ci1wdWJs
aWM6Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgY2hhciogY2hhcmFjdGVycykKLSAgICAg
ICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBMQ2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPihjaGFyYWN0ZXJzKSkKLSAgICB7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8Pgot
Y2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcio+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVy
PGNvbnN0IGNoYXIqPiB7Ci1wdWJsaWM6Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgY2hh
ciogY2hhcmFjdGVycykKLSAgICAgICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBjaGFyKj4o
Y2hhcmFjdGVycykKLSAgICB7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PgotY2xhc3MgU3RyaW5n
VHlwZUFkYXB0ZXI8QVNDSUlMaXRlcmFsPiA6IHB1YmxpYyBTdHJpbmdUeXBlQWRhcHRlcjxjb25z
dCBjaGFyKj4gewotcHVibGljOgotICAgIFN0cmluZ1R5cGVBZGFwdGVyKEFTQ0lJTGl0ZXJhbCBj
aGFyYWN0ZXJzKQotICAgICAgICA6IFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IGNoYXIqPihjaGFy
YWN0ZXJzKQotICAgIHsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBTdHJpbmdUeXBl
QWRhcHRlcjxWZWN0b3I8Y2hhcj4+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcihj
b25zdCBWZWN0b3I8Y2hhcj4mIHZlY3RvcikKLSAgICAgICAgOiBtX3ZlY3Rvcih2ZWN0b3IpCi0g
ICAgewotICAgIH0KLQotICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rv
ci5zaXplKCk7IH0KLSAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0Ci0gICAgewotICAgICAg
ICBTdHJpbmdWaWV3KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihtX3ZlY3Rvci5kYXRh
KCkpLCBtX3ZlY3Rvci5zaXplKCkpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRlc3RpbmF0
aW9uKTsKLSAgICB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25z
dAotICAgIHsKLSAgICAgICAgU3RyaW5nVmlldyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4obV92ZWN0b3IuZGF0YSgpKSwgbV92ZWN0b3Iuc2l6ZSgpKS5nZXRDaGFyYWN0ZXJzV2l0aFVw
Y29udmVydChkZXN0aW5hdGlvbik7Ci0gICAgfQotCi0gICAgU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gU3RyaW5nKG1fdmVjdG9yLmRhdGEoKSwgbV92ZWN0b3Iuc2l6ZSgpKTsgfQot
Ci1wcml2YXRlOgotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgbV92ZWN0b3I7Ci19OwotCi10ZW1w
bGF0ZTw+Ci1jbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmc+IHsKLXB1YmxpYzoKLSAgICBT
dHJpbmdUeXBlQWRhcHRlcjxTdHJpbmc+KGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgICAgICA6
IG1fc3RyaW5nKHN0cmluZykKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmcubGVuZ3RoKCk7IH0KLSAgICBib29sIGlzOEJpdCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpIHx8IG1fc3RyaW5nLmlzOEJpdCgpOyB9Ci0K
LSAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAotICAgIHsKLSAgICAg
ICAgU3RyaW5nVmlldyhtX3N0cmluZykuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGlu
YXRpb24pOwotICAgICAgICBXVEZfU1RSSU5HVFlQRUFEQVBURVJfQ09QSUVEX1dURl9TVFJJTkco
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAot
ICAgIHsKLSAgICAgICAgU3RyaW5nVmlldyhtX3N0cmluZykuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNv
bnZlcnQoZGVzdGluYXRpb24pOwotICAgICAgICBXVEZfU1RSSU5HVFlQRUFEQVBURVJfQ09QSUVE
X1dURl9TVFJJTkcoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3N0cmluZzsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFN0cmluZyYgbV9zdHJpbmc7
Ci19OwotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxBdG9taWNTdHJpbmc+
IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZz4gewotcHVibGljOgotICAgIFN0cmlu
Z1R5cGVBZGFwdGVyKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQotICAgICAgICA6IFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZz4oc3RyaW5nLnN0cmluZygpKQotICAgIHsKLSAgICB9Ci19Owot
Ci1pbmxpbmUgdm9pZCBzdW1XaXRoT3ZlcmZsb3coYm9vbCYgb3ZlcmZsb3csIHVuc2lnbmVkJiB0
b3RhbCwgdW5zaWduZWQgYWRkZW5kKQotewotICAgIHVuc2lnbmVkIG9sZFRvdGFsID0gdG90YWw7
Ci0gICAgdG90YWwgPSBvbGRUb3RhbCArIGFkZGVuZDsKLSAgICBpZiAodG90YWwgPCBvbGRUb3Rh
bCkKLSAgICAgICAgb3ZlcmZsb3cgPSB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBV
bnNpZ25lZD4KLWlubGluZSB2b2lkIHN1bVdpdGhPdmVyZmxvdyhib29sJiBvdmVyZmxvdywgdW5z
aWduZWQmIHRvdGFsLCB1bnNpZ25lZCBhZGRlbmQsIFVuc2lnbmVkIC4uLmFkZGVuZHMpCi17Ci0g
ICAgdW5zaWduZWQgb2xkVG90YWwgPSB0b3RhbDsKLSAgICB0b3RhbCA9IG9sZFRvdGFsICsgYWRk
ZW5kOwotICAgIGlmICh0b3RhbCA8IG9sZFRvdGFsKQotICAgICAgICBvdmVyZmxvdyA9IHRydWU7
Ci0gICAgc3VtV2l0aE92ZXJmbG93KG92ZXJmbG93LCB0b3RhbCwgYWRkZW5kcy4uLik7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0ZXI+Ci1pbmxpbmUgYm9vbCBhcmU4Qml0KEFkYXB0ZXIg
YWRhcHRlcikKLXsKLSAgICByZXR1cm4gYWRhcHRlci5pczhCaXQoKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRlciwgdHlwZW5hbWUuLi4gQWRhcHRlcnM+Ci1pbmxpbmUgYm9vbCBhcmU4
Qml0KEFkYXB0ZXIgYWRhcHRlciwgQWRhcHRlcnMgLi4uYWRhcHRlcnMpCi17Ci0gICAgcmV0dXJu
IGFkYXB0ZXIuaXM4Qml0KCkgJiYgYXJlOEJpdChhZGFwdGVycy4uLik7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lIEFkYXB0ZXI+Ci1pbmxpbmUgdm9pZCBtYWtl
U3RyaW5nQWNjdW11bGF0b3IoUmVzdWx0VHlwZSogcmVzdWx0LCBBZGFwdGVyIGFkYXB0ZXIpCi17
Ci0gICAgYWRhcHRlci53cml0ZVRvKHJlc3VsdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJl
c3VsdFR5cGUsIHR5cGVuYW1lIEFkYXB0ZXIsIHR5cGVuYW1lLi4uIEFkYXB0ZXJzPgotaW5saW5l
IHZvaWQgbWFrZVN0cmluZ0FjY3VtdWxhdG9yKFJlc3VsdFR5cGUqIHJlc3VsdCwgQWRhcHRlciBh
ZGFwdGVyLCBBZGFwdGVycyAuLi5hZGFwdGVycykKLXsKLSAgICBhZGFwdGVyLndyaXRlVG8ocmVz
dWx0KTsKLSAgICBtYWtlU3RyaW5nQWNjdW11bGF0b3IocmVzdWx0ICsgYWRhcHRlci5sZW5ndGgo
KSwgYWRhcHRlcnMuLi4pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlQWRhcHRl
ciwgdHlwZW5hbWUuLi4gU3RyaW5nVHlwZUFkYXB0ZXJzPgotU3RyaW5nIHRyeU1ha2VTdHJpbmdG
cm9tQWRhcHRlcnMoU3RyaW5nVHlwZUFkYXB0ZXIgYWRhcHRlciwgU3RyaW5nVHlwZUFkYXB0ZXJz
IC4uLmFkYXB0ZXJzKQotewotICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSBhZGFwdGVyLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhvdmVyZmxv
dywgbGVuZ3RoLCBhZGFwdGVycy5sZW5ndGgoKS4uLik7Ci0gICAgaWYgKG92ZXJmbG93KQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoYXJlOEJpdChhZGFwdGVyLCBhZGFwdGVy
cy4uLikpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0lt
cGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0
aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotCi0gICAgICAgIG1ha2VTdHJpbmdBY2N1bXVsYXRvcihidWZmZXIsIGFkYXB0
ZXIsIGFkYXB0ZXJzLi4uKTsKLQotICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsK
LSAgICB9Ci0KLSAgICBVQ2hhciogYnVmZmVyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1
bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZl
cik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAg
ICBtYWtlU3RyaW5nQWNjdW11bGF0b3IoYnVmZmVyLCBhZGFwdGVyLCBhZGFwdGVycy4uLik7Ci0K
LSAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUu
Li4gU3RyaW5nVHlwZXM+Ci1TdHJpbmcgdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlcyAuLi5zdHJp
bmdzKQotewotICAgIHJldHVybiB0cnlNYWtlU3RyaW5nRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVB
ZGFwdGVyPFN0cmluZ1R5cGVzPihzdHJpbmdzKS4uLik7Ci19Ci0KLS8vIENvbnZlbmllbmNlIG9u
bHkuCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlPgotU3RyaW5nIG1ha2VTdHJpbmcoU3Ry
aW5nVHlwZSBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIFN0cmluZyhzdHJpbmcpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlcz4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5
cGVzLi4uIHN0cmluZ3MpCi17Ci0gICAgU3RyaW5nIHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3Ry
aW5ncy4uLik7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6bWFrZVN0cmlu
ZzsKLXVzaW5nIFdURjo6dHJ5TWFrZVN0cmluZzsKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z09wZXJhdG9ycy5oPgotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRj
aE1hcmtlci93dGYvdGV4dC9TdHJpbmdIYXNoLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvdGV4dC9TdHJpbmdIYXNoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDk1YWMyNGIxZjBkNjdiMDhjMGRhMmYzYzc2MWI1YWEyYWE3ZjQzZDQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hN
YXJrZXIvd3RmL3RleHQvU3RyaW5nSGFzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCwgMjAxMi0yMDEzLCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDA5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBTdHJp
bmdIYXNoX2gKLSNkZWZpbmUgU3RyaW5nSGFzaF9oCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoZXIuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLSAgICBpbmxpbmUgYm9vbCBIYXNoVHJhaXRz
PFN0cmluZz46OmlzRW1wdHlWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLmlzTnVsbCgpOwotICAgIH0KLQotICAgIGlubGluZSB2b2lkIEhhc2hU
cmFpdHM8U3RyaW5nPjo6Y3VzdG9tRGVsZXRlQnVja2V0KFN0cmluZyYgdmFsdWUpCi0gICAgewot
ICAgICAgICAvLyBTZWUgdW5pcXVlX3B0cidzIGN1c3RvbURlbGV0ZUJ1Y2tldCgpIGZvciBhbiBl
eHBsYW5hdGlvbi4KLSAgICAgICAgQVNTRVJUKCFpc0RlbGV0ZWRWYWx1ZSh2YWx1ZSkpOwotICAg
ICAgICBTdHJpbmcgdmFsdWVUb0JlRGVzdHJveWVkID0gV1RGTW92ZSh2YWx1ZSk7Ci0gICAgICAg
IGNvbnN0cnVjdERlbGV0ZWRWYWx1ZSh2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gVGhlIGhhc2go
KSBmdW5jdGlvbnMgb24gU3RyaW5nSGFzaCBhbmQgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoIGRv
IG5vdCBzdXBwb3J0Ci0gICAgLy8gbnVsbCBzdHJpbmdzLiBnZXQoKSwgY29udGFpbnMoKSwgYW5k
IGFkZCgpIG9uIEhhc2hNYXA8U3RyaW5nLC4uLiwgU3RyaW5nSGFzaD4KLSAgICAvLyBjYXVzZSBh
IG51bGwtcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIHBhc3NlZCBudWxsIHN0cmluZ3MuCi0KLSAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBmaWd1cmUgb3V0IGEgd2F5IHRvIHB1dCB0aGUg
Y29tcHV0ZUhhc2ggZnVuY3Rpb24gdGhhdCdzCi0gICAgLy8gY3VycmVudGx5IGEgbWVtYmVyIGZ1
bmN0aW9uIG9mIFN0cmluZ0ltcGwgaW50byB0aGlzIGZpbGUgc28gd2UgY2FuIGJlIGEgbGl0dGxl
Ci0gICAgLy8gY2xvc2VyIHRvIGhhdmluZyBhbGwgdGhlIG5lYXJseS1pZGVudGljYWwgaGFzaCBm
dW5jdGlvbnMgaW4gb25lIHBsYWNlLgotCi0gICAgc3RydWN0IFN0cmluZ0hhc2ggewotICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIGtleS0+aGFz
aCgpOyB9Ci0gICAgICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBs
KiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
V1RGOjplcXVhbCgqYSwgKmIpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgUmVmUHRyPFN0cmluZ0ltcGw+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgp
OyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxTdHJpbmdJbXBsPiYg
YSwgY29uc3QgUmVmUHRyPFN0cmluZ0ltcGw+JiBiKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXF1YWwoYS5nZXQoKSwgYi5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgUmVmUHRyPFN0cmluZ0ltcGw+JiBhLCBjb25zdCBTdHJpbmdJbXBs
KiBiKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXF1YWwoYS5nZXQoKSwgYik7Ci0g
ICAgICAgIH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwg
Y29uc3QgUmVmUHRyPFN0cmluZ0ltcGw+JiBiKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXF1YWwoYSwgYi5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBTdHJpbmcmIGtleSkgeyByZXR1cm4ga2V5LmltcGwoKS0+aGFzaCgpOyB9
Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5n
JiBiKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXF1YWwoYS5pbXBsKCksIGIuaW1w
bCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBBU0NJSUNh
c2VJbnNlbnNpdGl2ZUhhc2ggewotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
aW5saW5lIFVDaGFyIGZvbGRDYXNlKFQgY2hhcmFjdGVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gdG9BU0NJSUxvd2VyKGNoYXJhY3Rlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBVQ2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFu
ZE1hc2tUb3A4Qml0czxVQ2hhciwgZm9sZENhc2U8VUNoYXI+PihkYXRhLCBsZW5ndGgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goU3RyaW5nSW1wbCYgc3RyaW5n
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBoYXNoKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkp
OwotICAgICAgICAgICAgcmV0dXJuIGhhc2goc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcu
bGVuZ3RoKCkpOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFN0cmlu
Z0ltcGwqIHN0cmluZykKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN0cmluZyk7Ci0g
ICAgICAgICAgICByZXR1cm4gaGFzaCgqc3RyaW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IExDaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5k
TWFza1RvcDhCaXRzPExDaGFyLCBmb2xkQ2FzZTxMQ2hhcj4+KGRhdGEsIGxlbmd0aCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGhhc2goY29uc3QgY2hhciog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFz
aChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbChjb25zdCBTdHJp
bmdJbXBsJiBhLCBjb25zdCBTdHJpbmdJbXBsJiBiKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhLCBiKTsKLSAgICAgICAgfQotICAgICAgICBz
dGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3RyaW5n
SW1wbCogYikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGEpOwotICAgICAgICAgICAg
QVNTRVJUKGIpOwotICAgICAgICAgICAgcmV0dXJuIGVxdWFsKCphLCAqYik7Ci0gICAgICAgIH0K
LQotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8U3RyaW5nSW1wbD4m
IGtleSkgCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNoKGtleS5nZXQoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8U3RyaW5n
SW1wbD4mIGEsIGNvbnN0IFJlZlB0cjxTdHJpbmdJbXBsPiYgYikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGVxdWFsKGEuZ2V0KCksIGIuZ2V0KCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU3RyaW5nJiBrZXkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBoYXNoKGtleS5pbXBsKCkpOwotICAgICAgICB9Ci0gICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEF0b21pY1N0cmluZyYga2V5KQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gaGFzaChrZXkuaW1wbCgpKTsKLSAgICAgICAgfQotICAgICAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVxdWFsKGEuaW1wbCgpLCBiLmltcGwoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQXRvbWljU3RyaW5nJiBhLCBj
b25zdCBBdG9taWNTdHJpbmcmIGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJ
cyB0aGUgImEgPT0gYiIgaGVyZSBhIGhlbHBmdWwgb3B0aW1pemF0aW9uPwotICAgICAgICAgICAg
Ly8gSXQgbWFrZXMgYWxsIGNhc2VzIHdoZXJlIHRoZSBzdHJpbmdzIGFyZSBub3QgaWRlbnRpY2Fs
IHNsaWdodGx5IHNsb3dlci4KLSAgICAgICAgICAgIHJldHVybiBhID09IGIgfHwgZXF1YWwoYS5p
bXBsKCksIGIuaW1wbCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci0gICAgfTsKLQotICAgIC8v
IFRoaXMgaGFzaCBjYW4gYmUgdXNlZCBpbiBjYXNlcyB3aGVyZSB0aGUga2V5IGlzIGEgaGFzaCBv
ZiBhIHN0cmluZywgYnV0IHdlIGRvbid0Ci0gICAgLy8gd2FudCB0byBzdG9yZSB0aGUgc3RyaW5n
LiBJdCdzIG5vdCByZWFsbHkgc3BlY2lmaWMgdG8gc3RyaW5nIGhhc2hpbmcsIGJ1dCBhbGwgb3Vy
Ci0gICAgLy8gY3VycmVudCB1c2VzIG9mIGl0IGFyZSBmb3Igc3RyaW5ncy4KLSAgICBzdHJ1Y3Qg
QWxyZWFkeUhhc2hlZCA6IEludEhhc2g8dW5zaWduZWQ+IHsKLSAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2godW5zaWduZWQga2V5KSB7IHJldHVybiBrZXk7IH0KLQotICAgICAgICAvLyBUbyB1
c2UgYSBoYXNoIHZhbHVlIGFzIGEga2V5IGZvciBhIGhhc2ggdGFibGUsIHdlIG5lZWQgdG8gZWxp
bWluYXRlIHRoZQotICAgICAgICAvLyAiZGVsZXRlZCIgdmFsdWUsIHdoaWNoIGlzIG5lZ2F0aXZl
IG9uZS4gVGhhdCBjb3VsZCBiZSBkb25lIGJ5IGNoYW5naW5nCi0gICAgICAgIC8vIHRoZSBzdHJp
bmcgaGFzaCBmdW5jdGlvbiB0byBuZXZlciBnZW5lcmF0ZSBuZWdhdGl2ZSBvbmUsIGJ1dCB0aGlz
IHdvcmtzCi0gICAgICAgIC8vIGFuZCBpcyBzdGlsbCByZWxhdGl2ZWx5IGVmZmljaWVudC4KLSAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGF2b2lkRGVsZXRlZFZhbHVlKHVuc2lnbmVkIGhhc2gpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChoYXNoKTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IG5ld0hhc2ggPSBoYXNoIHwgKCEoaGFzaCArIDEpIDw8IDMxKTsKLSAgICAgICAgICAgIEFTU0VS
VChuZXdIYXNoKTsKLSAgICAgICAgICAgIEFTU0VSVChuZXdIYXNoICE9IDB4RkZGRkZGRkYpOwot
ICAgICAgICAgICAgcmV0dXJuIG5ld0hhc2g7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8g
RklYTUU6IEZpbmQgYSB3YXkgdG8gaW5jb3Jwb3JhdGUgdGhpcyBmdW5jdGlvbmFsaXR5IGludG8g
QVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoIGFuZCBhbGxvdwotICAgIC8vIGEgSGFzaE1hcCB3aG9z
ZSBrZXlzIGFyZSB0eXBlIFN0cmluZyB0byBwZXJmb3JtIG9wZXJhdGlvbnMgd2hlbiBnaXZlbiBh
IGtleSBvZiB0eXBlIFN0cmluZ1ZpZXcuCi0gICAgc3RydWN0IEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
U3RyaW5nVmlld0hhc2hUcmFuc2xhdG9yIHsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
U3RyaW5nVmlldyBrZXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChrZXkuaXM4Qml0KCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6aGFzaChr
ZXkuY2hhcmFjdGVyczgoKSwga2V5Lmxlbmd0aCgpKTsKLSAgICAgICAgICAgIHJldHVybiBBU0NJ
SUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goa2V5LmNoYXJhY3RlcnMxNigpLCBrZXkubGVuZ3Ro
KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5n
JiBhLCBTdHJpbmdWaWV3IGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcXVhbEln
bm9yaW5nQVNDSUlDYXNlQ29tbW9uKGEsIGIpOwotICAgICAgICB9Ci0gICAgfTsKLQotfQotCi11
c2luZyBXVEY6OkFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDsKLXVzaW5nIFdURjo6QVNDSUlDYXNl
SW5zZW5zaXRpdmVTdHJpbmdWaWV3SGFzaFRyYW5zbGF0b3I7Ci11c2luZyBXVEY6OkFscmVhZHlI
YXNoZWQ7Ci11c2luZyBXVEY6OlN0cmluZ0hhc2g7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY4NjVhNGU0NmIwNzEzNjc2NTcxODZjNmJlNTQ2MGQy
YzJmM2I2Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDIxODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVl
bGxlciAoIG11ZWxsZXJAa2RlLm9yZyApCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSwgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwNiBBbmRyZXcgV2VsbGluZ3RvbiAocHJvdG9uQHdpcmV0YXBwZWQubmV0KQotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKLQotI2luY2x1ZGUgIkF0b21p
Y1N0cmluZy5oIgotI2luY2x1ZGUgIlN0cmluZ0J1ZmZlci5oIgotI2luY2x1ZGUgIlN0cmluZ0hh
c2guaCIKLSNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdWaWV3Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3ltYm9sSW1wbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1N5bWJvbFJlZ2lzdHJ5Lmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hh
cmFjdGVyTmFtZXMuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+Ci0KLSNpZiBTVFJJ
TkdfU1RBVFMKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXVEYgewotCi11c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKLQot
c3RhdGljX2Fzc2VydChzaXplb2YoU3RyaW5nSW1wbCkgPT0gMiAqIHNpemVvZihpbnQpICsgMiAq
IHNpemVvZih2b2lkKiksICJTdHJpbmdJbXBsIHNob3VsZCBzdGF5IHNtYWxsIik7Ci0KLSNpZiBT
VFJJTkdfU1RBVFMKLVN0cmluZ1N0YXRzIFN0cmluZ0ltcGw6Om1fc3RyaW5nU3RhdHM7Ci0KLXN0
ZDo6YXRvbWljPHVuc2lnbmVkPiBTdHJpbmdTdGF0czo6c19zdHJpbmdSZW1vdmVzVGlsbFByaW50
U3RhdHMoc19wcmludFN0cmluZ1N0YXRzRnJlcXVlbmN5KTsKLQotdm9pZCBTdHJpbmdTdGF0czo6
cmVtb3ZlU3RyaW5nKFN0cmluZ0ltcGwmIHN0cmluZykKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgYm9vbCBpc1N1YlN0cmluZyA9IHN0cmluZy5pc1N1YlN0
cmluZygpOwotCi0gICAgLS1tX3RvdGFsTnVtYmVyU3RyaW5nczsKLQotICAgIGlmIChzdHJpbmcu
aXM4Qml0KCkpIHsKLSAgICAgICAgLS1tX251bWJlcjhCaXRTdHJpbmdzOwotICAgICAgICBpZiAo
IWlzU3ViU3RyaW5nKQotICAgICAgICAgICAgbV90b3RhbDhCaXREYXRhIC09IGxlbmd0aDsKLSAg
ICB9IGVsc2UgewotICAgICAgICAtLW1fbnVtYmVyMTZCaXRTdHJpbmdzOwotICAgICAgICBpZiAo
IWlzU3ViU3RyaW5nKQotICAgICAgICAgICAgbV90b3RhbDE2Qml0RGF0YSAtPSBsZW5ndGg7Ci0g
ICAgfQotCi0gICAgaWYgKCEtLXNfc3RyaW5nUmVtb3Zlc1RpbGxQcmludFN0YXRzKSB7Ci0gICAg
ICAgIHNfc3RyaW5nUmVtb3Zlc1RpbGxQcmludFN0YXRzID0gc19wcmludFN0cmluZ1N0YXRzRnJl
cXVlbmN5OwotICAgICAgICBwcmludFN0YXRzKCk7Ci0gICAgfQotfQotCi12b2lkIFN0cmluZ1N0
YXRzOjpwcmludFN0YXRzKCkKLXsKLSAgICBkYXRhTG9nRigiU3RyaW5nIHN0YXRzIGZvciBwcm9j
ZXNzIGlkICVkOlxuIiwgZ2V0Q3VycmVudFByb2Nlc3NJRCgpKTsKLQotICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyB0b3RhbE51bWJlckNoYXJhY3RlcnMgPSBtX3RvdGFsOEJpdERhdGEgKyBtX3RvdGFs
MTZCaXREYXRhOwotICAgIGRvdWJsZSBwZXJjZW50OEJpdCA9IG1fdG90YWxOdW1iZXJTdHJpbmdz
ID8gKChkb3VibGUpbV9udW1iZXI4Qml0U3RyaW5ncyAqIDEwMCkgLyAoZG91YmxlKW1fdG90YWxO
dW1iZXJTdHJpbmdzIDogMC4wOwotICAgIGRvdWJsZSBhdmVyYWdlOGJpdExlbmd0aCA9IG1fbnVt
YmVyOEJpdFN0cmluZ3MgPyAoZG91YmxlKW1fdG90YWw4Qml0RGF0YSAvIChkb3VibGUpbV9udW1i
ZXI4Qml0U3RyaW5ncyA6IDAuMDsKLSAgICBkYXRhTG9nRigiJTh1ICglNS4yZiUlKSA4IGJpdCAg
ICAgICAgJTEybGx1IGNoYXJzICAlMTJsbHUgYnl0ZXMgIGF2ZyBsZW5ndGggJTYuMWZcbiIsIG1f
bnVtYmVyOEJpdFN0cmluZ3MubG9hZCgpLCBwZXJjZW50OEJpdCwgbV90b3RhbDhCaXREYXRhLmxv
YWQoKSwgbV90b3RhbDhCaXREYXRhLmxvYWQoKSwgYXZlcmFnZThiaXRMZW5ndGgpOwotCi0gICAg
ZG91YmxlIHBlcmNlbnQxNkJpdCA9IG1fdG90YWxOdW1iZXJTdHJpbmdzID8gKChkb3VibGUpbV9u
dW1iZXIxNkJpdFN0cmluZ3MgKiAxMDApIC8gKGRvdWJsZSltX3RvdGFsTnVtYmVyU3RyaW5ncyA6
IDAuMDsKLSAgICBkb3VibGUgYXZlcmFnZTE2Yml0TGVuZ3RoID0gbV9udW1iZXIxNkJpdFN0cmlu
Z3MgPyAoZG91YmxlKW1fdG90YWwxNkJpdERhdGEgLyAoZG91YmxlKW1fbnVtYmVyMTZCaXRTdHJp
bmdzIDogMC4wOwotICAgIGRhdGFMb2dGKCIlOHUgKCU1LjJmJSUpIDE2IGJpdCAgICAgICAlMTJs
bHUgY2hhcnMgICUxMmxsdSBieXRlcyAgYXZnIGxlbmd0aCAlNi4xZlxuIiwgbV9udW1iZXIxNkJp
dFN0cmluZ3MubG9hZCgpLCBwZXJjZW50MTZCaXQsIG1fdG90YWwxNkJpdERhdGEubG9hZCgpLCBt
X3RvdGFsMTZCaXREYXRhICogMiwgYXZlcmFnZTE2Yml0TGVuZ3RoKTsKLQotICAgIGRvdWJsZSBh
dmVyYWdlTGVuZ3RoID0gbV90b3RhbE51bWJlclN0cmluZ3MgPyAoZG91YmxlKXRvdGFsTnVtYmVy
Q2hhcmFjdGVycyAvIChkb3VibGUpbV90b3RhbE51bWJlclN0cmluZ3MgOiAwLjA7Ci0gICAgdW5z
aWduZWQgbG9uZyBsb25nIHRvdGFsRGF0YUJ5dGVzID0gbV90b3RhbDhCaXREYXRhICsgbV90b3Rh
bDE2Qml0RGF0YSAqIDI7Ci0gICAgZGF0YUxvZ0YoIiU4dSBUb3RhbCAgICAgICAgICAgICAgICAg
JTEybGx1IGNoYXJzICAlMTJsbHUgYnl0ZXMgIGF2ZyBsZW5ndGggJTYuMWZcbiIsIG1fdG90YWxO
dW1iZXJTdHJpbmdzLmxvYWQoKSwgdG90YWxOdW1iZXJDaGFyYWN0ZXJzLCB0b3RhbERhdGFCeXRl
cywgYXZlcmFnZUxlbmd0aCk7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsU2F2ZWRCeXRl
cyA9IG1fdG90YWw4Qml0RGF0YTsKLSAgICBkb3VibGUgcGVyY2VudFNhdmluZ3MgPSB0b3RhbFNh
dmVkQnl0ZXMgPyAoKGRvdWJsZSl0b3RhbFNhdmVkQnl0ZXMgKiAxMDApIC8gKGRvdWJsZSkodG90
YWxEYXRhQnl0ZXMgKyB0b3RhbFNhdmVkQnl0ZXMpIDogMC4wOwotICAgIGRhdGFMb2dGKCIgICAg
ICAgICBUb3RhbCBzYXZpbmdzICUxMmxsdSBieXRlcyAoJTUuMmYlJSlcbiIsIHRvdGFsU2F2ZWRC
eXRlcywgcGVyY2VudFNhdmluZ3MpOwotCi0gICAgZGF0YUxvZ0YoIiU4dSBTdHJpbmdJbXBsOjpy
ZWYgY2FsbHNcbiIsIG1fcmVmQ2FsbHMubG9hZCgpKTsKLSAgICBkYXRhTG9nRigiJTh1IFN0cmlu
Z0ltcGw6OmRlcmVmIGNhbGxzXG4iLCBtX2RlcmVmQ2FsbHMubG9hZCgpKTsKLX0KLSNlbmRpZgot
Ci1TdHJpbmdJbXBsOjpTdGF0aWNTdHJpbmdJbXBsIFN0cmluZ0ltcGw6OnNfYXRvbWljRW1wdHlT
dHJpbmcoIiIsIFN0cmluZ0ltcGw6OlN0cmluZ0F0b21pYyk7Ci0KLVN0cmluZ0ltcGw6On5TdHJp
bmdJbXBsKCkKLXsKLSAgICBBU1NFUlQoIWlzU3RhdGljKCkpOwotCi0gICAgU3RyaW5nVmlldzo6
aW52YWxpZGF0ZSgqdGhpcyk7Ci0KLSAgICBTVFJJTkdfU1RBVFNfUkVNT1ZFX1NUUklORygqdGhp
cyk7Ci0KLSAgICBpZiAoaXNBdG9taWMoKSkgewotICAgICAgICBBU1NFUlQoIWlzU3ltYm9sKCkp
OwotICAgICAgICBpZiAobGVuZ3RoKCkpCi0gICAgICAgICAgICBBdG9taWNTdHJpbmdJbXBsOjpy
ZW1vdmUoc3RhdGljX2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+KHRoaXMpKTsKLSAgICB9IGVsc2Ug
aWYgKGlzU3ltYm9sKCkpIHsKLSAgICAgICAgYXV0byYgc3ltYm9sID0gc3RhdGljX2Nhc3Q8U3lt
Ym9sSW1wbCY+KCp0aGlzKTsKLSAgICAgICAgYXV0byogc3ltYm9sUmVnaXN0cnkgPSBzeW1ib2wu
c3ltYm9sUmVnaXN0cnkoKTsKLSAgICAgICAgaWYgKHN5bWJvbFJlZ2lzdHJ5KQotICAgICAgICAg
ICAgc3ltYm9sUmVnaXN0cnktPnJlbW92ZSgqc3ltYm9sLmFzUmVnaXN0ZXJlZFN5bWJvbEltcGwo
KSk7Ci0gICAgfQotCi0gICAgQnVmZmVyT3duZXJzaGlwIG93bmVyc2hpcCA9IGJ1ZmZlck93bmVy
c2hpcCgpOwotCi0gICAgaWYgKG93bmVyc2hpcCA9PSBCdWZmZXJJbnRlcm5hbCkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmIChvd25lcnNoaXAgPT0gQnVmZmVyT3duZWQpIHsKLSAgICAgICAgLy8g
V2UgdXNlIG1fZGF0YTgsIGJ1dCBzaW5jZSBpdCBpcyBhIHVuaW9uIHdpdGggbV9kYXRhMTYgdGhp
cyB3b3JrcyBlaXRoZXIgd2F5LgotICAgICAgICBBU1NFUlQobV9kYXRhOCk7Ci0gICAgICAgIGZh
c3RGcmVlKGNvbnN0X2Nhc3Q8TENoYXIqPihtX2RhdGE4KSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQob3duZXJzaGlwID09IEJ1ZmZlclN1YnN0cmluZyk7Ci0gICAgQVNT
RVJUKHN1YnN0cmluZ0J1ZmZlcigpKTsKLSAgICBzdWJzdHJpbmdCdWZmZXIoKS0+ZGVyZWYoKTsK
LX0KLQotdm9pZCBTdHJpbmdJbXBsOjpkZXN0cm95KFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwpCi17
Ci0gICAgc3RyaW5nSW1wbC0+flN0cmluZ0ltcGwoKTsKLSAgICBmYXN0RnJlZShzdHJpbmdJbXBs
KTsKLX0KLQotUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKGNv
bnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGxlbmd0aCwgIlVzZSBTdHJpbmdJbXBsOjplbXB0eSgpIHRvIGNyZWF0ZSBhbiBl
bXB0eSBzdHJpbmciKTsKLSAgICBBU1NFUlQoY2hhcmFjdGVyc0FyZUFsbEFTQ0lJPExDaGFyPihy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0aCkpOwotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFN0cmluZ0ltcGwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgsIENvbnN0cnVjdFdpdGhvdXRDb3B5aW5nKSk7Ci19
Ci0KLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChjb25zdCBj
aGFyKiBjaGFyYWN0ZXJzKQotewotICAgIHJldHVybiBjcmVhdGVGcm9tTGl0ZXJhbChjaGFyYWN0
ZXJzLCBzdHJsZW4oY2hhcmFjdGVycykpOwotfQotCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1w
bDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuICplbXB0eSgpOwot
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RyaW5nSW1wbChjaGFyYWN0ZXJzLCBsZW5ndGgs
IENvbnN0cnVjdFdpdGhvdXRDb3B5aW5nKSk7Ci19Ci0KLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gKmVtcHR5KCk7
Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJpbmdJbXBsKGNoYXJhY3RlcnMsIGxlbmd0
aCwgQ29uc3RydWN0V2l0aG91dENvcHlpbmcpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJUeXBlPgotaW5saW5lIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRp
YWxpemVkSW50ZXJuYWwodW5zaWduZWQgbGVuZ3RoLCBDaGFyVHlwZSomIGRhdGEpCi17Ci0gICAg
aWYgKCFsZW5ndGgpIHsKLSAgICAgICAgZGF0YSA9IDA7Ci0gICAgICAgIHJldHVybiAqZW1wdHko
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5
KGxlbmd0aCwgZGF0YSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KLWlubGlu
ZSBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZEludGVybmFs
Tm9uRW1wdHkodW5zaWduZWQgbGVuZ3RoLCBDaGFyVHlwZSomIGRhdGEpCi17Ci0gICAgQVNTRVJU
KGxlbmd0aCk7Ci0KLSAgICAvLyBBbGxvY2F0ZSBhIHNpbmdsZSBidWZmZXIgbGFyZ2UgZW5vdWdo
IHRvIGNvbnRhaW4gdGhlIFN0cmluZ0ltcGwKLSAgICAvLyBzdHJ1Y3QgYXMgd2VsbCBhcyB0aGUg
ZGF0YSB3aGljaCBpdCBjb250YWlucy4gVGhpcyByZW1vdmVzIG9uZQotICAgIC8vIGhlYXAgYWxs
b2NhdGlvbiBmcm9tIHRoaXMgY2FsbC4KLSAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBzaXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKENo
YXJUeXBlKSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgU3RyaW5nSW1wbCogc3RyaW5nID0gc3Rh
dGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemU8Q2hhclR5cGU+
KGxlbmd0aCkpKTsKLQotICAgIGRhdGEgPSBzdHJpbmctPnRhaWxQb2ludGVyPENoYXJUeXBlPigp
OwotICAgIHJldHVybiBjb25zdHJ1Y3RJbnRlcm5hbDxDaGFyVHlwZT4oc3RyaW5nLCBsZW5ndGgp
OwotfQotCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBsZW5ndGgsIExDaGFyKiYgZGF0YSkKLXsKLSAgICByZXR1cm4gY3JlYXRlVW5pbml0
aWFsaXplZEludGVybmFsKGxlbmd0aCwgZGF0YSk7Ci19Ci0KLVJlZjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqJiBkYXRh
KQotewotICAgIHJldHVybiBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWwobGVuZ3RoLCBkYXRh
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgotaW5saW5lIFJlZjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlSW50ZXJuYWwoUmVmPFN0cmluZ0ltcGw+JiYgb3Jp
Z2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgQ2hhclR5cGUqJiBkYXRhKQotewotICAgIEFT
U0VSVChvcmlnaW5hbFN0cmluZy0+aGFzT25lUmVmKCkpOwotICAgIEFTU0VSVChvcmlnaW5hbFN0
cmluZy0+YnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVySW50ZXJuYWwpOwotCi0gICAgaWYgKCFs
ZW5ndGgpIHsKLSAgICAgICAgZGF0YSA9IDA7Ci0gICAgICAgIHJldHVybiAqZW1wdHkoKTsKLSAg
ICB9Ci0KLSAgICAvLyBTYW1lIGFzIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoKSBleGNlcHQgaGVyZSB3
ZSB1c2UgZmFzdFJlYWxsb2MuCi0gICAgaWYgKGxlbmd0aCA+ICgoc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpIC0gc2l6ZW9mKFN0cmluZ0ltcGwpKSAvIHNpemVvZihDaGFyVHlw
ZSkpKQotICAgICAgICBDUkFTSCgpOwotCi0gICAgb3JpZ2luYWxTdHJpbmctPn5TdHJpbmdJbXBs
KCk7Ci0gICAgYXV0byogc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGZhc3RSZWFs
bG9jKCZvcmlnaW5hbFN0cmluZy5sZWFrUmVmKCksIGFsbG9jYXRpb25TaXplPENoYXJUeXBlPihs
ZW5ndGgpKSk7Ci0KLSAgICBkYXRhID0gc3RyaW5nLT50YWlsUG9pbnRlcjxDaGFyVHlwZT4oKTsK
LSAgICByZXR1cm4gY29uc3RydWN0SW50ZXJuYWw8Q2hhclR5cGU+KHN0cmluZywgbGVuZ3RoKTsK
LX0KLQotUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGUoUmVmPFN0cmluZ0lt
cGw+JiYgb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgTENoYXIqJiBkYXRhKQotewot
ICAgIEFTU0VSVChvcmlnaW5hbFN0cmluZy0+aXM4Qml0KCkpOwotICAgIHJldHVybiByZWFsbG9j
YXRlSW50ZXJuYWwoV1RGTW92ZShvcmlnaW5hbFN0cmluZyksIGxlbmd0aCwgZGF0YSk7Ci19Ci0K
LVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKFJlZjxTdHJpbmdJbXBsPiYm
IG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSkKLXsKLSAgICBB
U1NFUlQoIW9yaWdpbmFsU3RyaW5nLT5pczhCaXQoKSk7Ci0gICAgcmV0dXJuIHJlYWxsb2NhdGVJ
bnRlcm5hbChXVEZNb3ZlKG9yaWdpbmFsU3RyaW5nKSwgbGVuZ3RoLCBkYXRhKTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgotaW5saW5lIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpjcmVhdGVJbnRlcm5hbChjb25zdCBDaGFyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoKQotewotICAgIGlmICghY2hhcmFjdGVycyB8fCAhbGVuZ3RoKQotICAgICAgICByZXR1
cm4gKmVtcHR5KCk7Ci0KLSAgICBDaGFyVHlwZSogZGF0YTsKLSAgICBhdXRvIHN0cmluZyA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KGxlbmd0aCwgZGF0YSk7Ci0gICAgbWVt
Y3B5KGRhdGEsIGNoYXJhY3RlcnMsIGxlbmd0aCAqIHNpemVvZihDaGFyVHlwZSkpOwotICAgIHJl
dHVybiBzdHJpbmc7Ci19Ci0KLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGUoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gY3Jl
YXRlSW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsKLX0KLQotUmVmPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OmNyZWF0ZShjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIHJldHVybiBjcmVhdGVJbnRlcm5hbChjaGFyYWN0ZXJzLCBsZW5ndGgpOwotfQot
Ci1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAoIWNoYXJhY3Rl
cnMgfHwgIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuICplbXB0eSgpOwotCi0gICAgTENoYXIqIGRh
dGE7Ci0gICAgYXV0byBzdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0
eShsZW5ndGgsIGRhdGEpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewotICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSAmIDB4ZmYwMCkKLSAgICAgICAgICAgIHJl
dHVybiBjcmVhdGUoY2hhcmFjdGVycywgbGVuZ3RoKTsKLSAgICAgICAgZGF0YVtpXSA9IHN0YXRp
Y19jYXN0PExDaGFyPihjaGFyYWN0ZXJzW2ldKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5n
OwotfQotCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUo
Y29uc3QgVUNoYXIqIHN0cmluZykKLXsKLSAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlOEJp
dElmUG9zc2libGUoc3RyaW5nLCBsZW5ndGhPZk51bGxUZXJtaW5hdGVkU3RyaW5nKHN0cmluZykp
OwotfQotCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IExDaGFyKiBz
dHJpbmcpCi17Ci0gICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIHJldHVybiAqZW1wdHkoKTsKLSAg
ICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0
cmluZykpOwotICAgIGlmIChsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIGNyZWF0ZShzdHJpbmcsIGxlbmd0
aCk7Ci19Ci0KLWJvb2wgU3RyaW5nSW1wbDo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpCi17Ci0g
ICAgLy8gRklYTUU6IFRoZSBkZWZpbml0aW9uIG9mIHdoaXRlc3BhY2UgaGVyZSBpbmNsdWRlcyBh
IG51bWJlciBvZiBjaGFyYWN0ZXJzCi0gICAgLy8gdGhhdCBhcmUgbm90IHdoaXRlc3BhY2UgZnJv
bSB0aGUgcG9pbnQgb2YgdmlldyBvZiBSZW5kZXJUZXh0OyBJIHdvbmRlciBpZgotICAgIC8vIHRo
YXQncyBhIHByb2JsZW0gaW4gcHJhY3RpY2UuCi0gICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBV
Q2hhciBjID0gbV9kYXRhOFtpXTsKLSAgICAgICAgICAgIGlmICghaXNBU0NJSVNwYWNlKGMpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsg
KytpKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBtX2RhdGExNltpXTsKLSAgICAgICAgaWYgKCFpc0FT
Q0lJU3BhY2UoYykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6c3Vic3RyaW5nKHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKHN0YXJ0ID49IG1fbGVuZ3Ro
KQotICAgICAgICByZXR1cm4gKmVtcHR5KCk7Ci0gICAgdW5zaWduZWQgbWF4TGVuZ3RoID0gbV9s
ZW5ndGggLSBzdGFydDsKLSAgICBpZiAobGVuZ3RoID49IG1heExlbmd0aCkgewotICAgICAgICBp
ZiAoIXN0YXJ0KQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICBsZW5ndGggPSBt
YXhMZW5ndGg7Ci0gICAgfQotICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0
ZShtX2RhdGE4ICsgc3RhcnQsIGxlbmd0aCk7Ci0KLSAgICByZXR1cm4gY3JlYXRlKG1fZGF0YTE2
ICsgc3RhcnQsIGxlbmd0aCk7Ci19Ci0KLVVDaGFyMzIgU3RyaW5nSW1wbDo6Y2hhcmFjdGVyU3Rh
cnRpbmdBdCh1bnNpZ25lZCBpKQotewotICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IG1fZGF0YThbaV07Ci0gICAgaWYgKFUxNl9JU19TSU5HTEUobV9kYXRhMTZbaV0pKQotICAgICAg
ICByZXR1cm4gbV9kYXRhMTZbaV07Ci0gICAgaWYgKGkgKyAxIDwgbV9sZW5ndGggJiYgVTE2X0lT
X0xFQUQobV9kYXRhMTZbaV0pICYmIFUxNl9JU19UUkFJTChtX2RhdGExNltpICsgMV0pKQotICAg
ICAgICByZXR1cm4gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKG1fZGF0YTE2W2ldLCBtX2RhdGExNltp
ICsgMV0pOwotICAgIHJldHVybiAwOwotfQotCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6
Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpCi17Ci0gICAgLy8gTm90ZTogQXQgb25l
IHRpbWUgdGhpcyB3YXMgYSBob3QgZnVuY3Rpb24gaW4gdGhlIERyb21hZW8gYmVuY2htYXJrLCBz
cGVjaWZpY2FsbHkgdGhlCi0gICAgLy8gbm8tb3AgY29kZSBwYXRoIHRoYXQgbWF5IHJldHVybiBv
dXJzZWxmIGlmIHdlIGZpbmQgbm8gdXBwZXIgY2FzZSBsZXR0ZXJzIGFuZCBubyBpbnZhbGlkCi0g
ICAgLy8gQVNDSUkgbGV0dGVycy4KLQotICAgIC8vIEZpcnN0IHNjYW4gdGhlIHN0cmluZyBmb3Ig
dXBwZXJjYXNlIGFuZCBub24tQVNDSUkgY2hhcmFjdGVyczoKLSAgICBpZiAoaXM4Qml0KCkpIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIExDaGFyIGNoYXJhY3RlciA9IG1fZGF0YThbaV07Ci0gICAgICAgICAgICBpZiAoVU5M
SUtFTFkoKGNoYXJhY3RlciAmIH4weDdGKSB8fCBpc0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFy
dGluZ0F0RmFpbGluZ0luZGV4OEJpdChpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAq
dGhpczsKLSAgICB9Ci0KLSAgICBib29sIG5vVXBwZXIgPSB0cnVlOwotICAgIHVuc2lnbmVkIG9y
ZWQgPSAwOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gbV9kYXRhMTZbaV07Ci0gICAgICAgIGlmIChVTkxJ
S0VMWShpc0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSkpCi0gICAgICAgICAgICBub1VwcGVyID0gZmFs
c2U7Ci0gICAgICAgIG9yZWQgfD0gY2hhcmFjdGVyOwotICAgIH0KLSAgICAvLyBOb3RoaW5nIHRv
IGRvIGlmIHRoZSBzdHJpbmcgaXMgYWxsIEFTQ0lJIHdpdGggbm8gdXBwZXJjYXNlLgotICAgIGlm
IChub1VwcGVyICYmICEob3JlZCAmIH4weDdGKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0g
ICAgaWYgKCEob3JlZCAmIH4weDdGKSkgewotICAgICAgICBVQ2hhciogZGF0YTE2OwotICAgICAg
ICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShtX2xl
bmd0aCwgZGF0YTE2KTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBVQ2hhciBjID0gbV9kYXRhMTZbaV07Ci0g
ICAgICAgICAgICBkYXRhMTZbaV0gPSB0b0FTQ0lJTG93ZXIoYyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIG5ld0ltcGw7Ci0gICAgfQotCi0gICAgaWYgKG1fbGVuZ3RoID4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkKLSAgICAg
ICAgQ1JBU0goKTsKLSAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwotCi0gICAgLy8gRG8g
YSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkg
Y2hhcmFjdGVycy4KLSAgICBVQ2hhciogZGF0YTE2OwotICAgIGF1dG8gbmV3SW1wbCA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhMTYpOwotCi0gICAg
VUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgaW50MzJfdCByZWFsTGVuZ3Ro
ID0gdV9zdHJUb0xvd2VyKGRhdGExNiwgbGVuZ3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICIiLCAm
c3RhdHVzKTsKLSAgICBpZiAoVV9TVUNDRVNTKHN0YXR1cykgJiYgcmVhbExlbmd0aCA9PSBsZW5n
dGgpCi0gICAgICAgIHJldHVybiBuZXdJbXBsOwotCi0gICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2KTsKLSAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7
Ci0gICAgdV9zdHJUb0xvd2VyKGRhdGExNiwgcmVhbExlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3Ro
LCAiIiwgJnN0YXR1cyk7Ci0gICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgcmV0dXJuIG5ld0ltcGw7Ci19Ci0KLVJlZjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlU3RhcnRpbmdBdEZhaWxpbmdJ
bmRleDhCaXQodW5zaWduZWQgZmFpbGluZ0luZGV4KQotewotICAgIEFTU0VSVChpczhCaXQoKSk7
Ci0gICAgTENoYXIqIGRhdGE4OwotICAgIGF1dG8gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6
ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhOCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZmFpbGluZ0luZGV4OyArK2kpIHsKLSAgICAgICAgQVNTRVJUKCEobV9kYXRh
OFtpXSAmIH4weDdGKSAmJiAhaXNBU0NJSVVwcGVyKG1fZGF0YThbaV0pKTsKLSAgICAgICAgZGF0
YThbaV0gPSBtX2RhdGE4W2ldOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IGZhaWxp
bmdJbmRleDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgTENoYXIgY2hhcmFjdGVyID0g
bV9kYXRhOFtpXTsKLSAgICAgICAgaWYgKCEoY2hhcmFjdGVyICYgfjB4N0YpKQotICAgICAgICAg
ICAgZGF0YThbaV0gPSB0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBBU1NFUlQodV90b2xvd2VyKGNoYXJhY3RlcikgPD0gMHhGRik7Ci0gICAgICAg
ICAgICBkYXRhOFtpXSA9IHN0YXRpY19jYXN0PExDaGFyPih1X3RvbG93ZXIoY2hhcmFjdGVyKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3SW1wbDsKLX0KLQotUmVmPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKQotewot
ICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgb3B0aW1pemVkIGZvciBuby1vcCBjYXNlcyB0
aGUgd2F5Ci0gICAgLy8gY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpIGlzLCBidXQg
aW4gZW1waXJpY2FsIHRlc3RpbmcsCi0gICAgLy8gZmV3IGFjdHVhbCBjYWxscyB0byB1cHBlcigp
IGFyZSBuby1vcHMsIHNvIGl0IHdvdWxkbid0IGJlIHdvcnRoCi0gICAgLy8gdGhlIGV4dHJhIHRp
bWUgZm9yIHByZS1zY2FubmluZy4KLQotICAgIGlmIChtX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCi0gICAgICAgIENS
QVNIKCk7Ci0gICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKLQotICAgIGlmIChpczhCaXQo
KSkgewotICAgICAgICBMQ2hhciogZGF0YTg7Ci0gICAgICAgIGF1dG8gbmV3SW1wbCA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGE4KTsKLSAgICAgICAgCi0gICAgICAgIC8vIERv
IGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUg
QVNDSUkuCi0gICAgICAgIHVuc2lnbmVkIG9yZWQgPSAwOwotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBMQ2hhciBjID0gbV9kYXRhOFtpXTsK
LSAgICAgICAgICAgIG9yZWQgfD0gYzsKLSAgICAgICAgICAgIGRhdGE4W2ldID0gdG9BU0NJSVVw
cGVyKGMpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghKG9yZWQgJiB+MHg3RikpCi0gICAgICAg
ICAgICByZXR1cm4gbmV3SW1wbDsKLQotICAgICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRh
dGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJSSBMYXRpbi0xIGNoYXJhY3RlcnMu
Ci0gICAgICAgIGludCBudW1iZXJTaGFycFNDaGFyYWN0ZXJzID0gMDsKLQotICAgICAgICAvLyBU
aGVyZSBhcmUgdHdvIHNwZWNpYWwgY2FzZXMuCi0gICAgICAgIC8vICAxLiBTb21lIExhdGluLTEg
Y2hhcmFjdGVycyB3aGVuIGNvbnZlcnRlZCB0byB1cHBlciBjYXNlIGFyZSAxNiBiaXQgY2hhcmFj
dGVycy4KLSAgICAgICAgLy8gIDIuIExvd2VyIGNhc2Ugc2hhcnAtUyBjb252ZXJ0cyB0byAiU1Mi
ICh0d28gY2hhcmFjdGVycykKLSAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgIExDaGFyIGMgPSBtX2RhdGE4W2ldOwotICAgICAgICAgICAg
aWYgKFVOTElLRUxZKGMgPT0gc21hbGxMZXR0ZXJTaGFycFMpKQotICAgICAgICAgICAgICAgICsr
bnVtYmVyU2hhcnBTQ2hhcmFjdGVyczsKLSAgICAgICAgICAgIEFTU0VSVCh1X3RvdXBwZXIoYykg
PD0gMHhGRkZGKTsKLSAgICAgICAgICAgIFVDaGFyIHVwcGVyID0gdV90b3VwcGVyKGMpOwotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHVwcGVyID4gMHhGRikpIHsKLSAgICAgICAgICAgICAgICAv
LyBTaW5jZSB0aGlzIHVwcGVyLWNhc2VkIGNoYXJhY3RlciBkb2VzIG5vdCBmaXQgaW4gYW4gOC1i
aXQgc3RyaW5nLCB3ZSBuZWVkIHRvIHRha2UgdGhlIDE2LWJpdCBwYXRoLgotICAgICAgICAgICAg
ICAgIGdvdG8gdXBjb252ZXJ0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YThbaV0g
PSBzdGF0aWNfY2FzdDxMQ2hhcj4odXBwZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFu
dW1iZXJTaGFycFNDaGFyYWN0ZXJzKQotICAgICAgICAgICAgcmV0dXJuIG5ld0ltcGw7Ci0KLSAg
ICAgICAgLy8gV2UgaGF2ZSBudW1iZXJTU0NoYXJhY3RlcnMgc2hhcnAtcyBjaGFyYWN0ZXJzLCBi
dXQgbm9uZSBvZiB0aGUgb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzLgotICAgICAgICBuZXdJbXBs
ID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCArIG51bWJlclNoYXJwU0NoYXJhY3RlcnMs
IGRhdGE4KTsKLQotICAgICAgICBMQ2hhciogZGVzdCA9IGRhdGE4OwotCi0gICAgICAgIGZvciAo
aW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBMQ2hhciBjID0g
bV9kYXRhOFtpXTsKLSAgICAgICAgICAgIGlmIChjID09IHNtYWxsTGV0dGVyU2hhcnBTKSB7Ci0g
ICAgICAgICAgICAgICAgKmRlc3QrKyA9ICdTJzsKLSAgICAgICAgICAgICAgICAqZGVzdCsrID0g
J1MnOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodV90b3Vw
cGVyKGMpIDw9IDB4RkYpOwotICAgICAgICAgICAgICAgICpkZXN0KysgPSBzdGF0aWNfY2FzdDxM
Q2hhcj4odV90b3VwcGVyKGMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBuZXdJbXBsOwotICAgIH0KLQotdXBjb252ZXJ0OgotICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldygqdGhpcykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIHNvdXJjZTE2ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotCi0g
ICAgVUNoYXIqIGRhdGExNjsKLSAgICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVk
KG1fbGVuZ3RoLCBkYXRhMTYpOwotICAgIAotICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRo
ZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCi0gICAgdW5zaWduZWQg
b3JlZCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAg
ICBVQ2hhciBjID0gc291cmNlMTZbaV07Ci0gICAgICAgIG9yZWQgfD0gYzsKLSAgICAgICAgZGF0
YTE2W2ldID0gdG9BU0NJSVVwcGVyKGMpOwotICAgIH0KLSAgICBpZiAoIShvcmVkICYgfjB4N0Yp
KQotICAgICAgICByZXR1cm4gbmV3SW1wbDsKLQotICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVu
dGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCi0gICAg
VUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgaW50MzJfdCByZWFsTGVuZ3Ro
ID0gdV9zdHJUb1VwcGVyKGRhdGExNiwgbGVuZ3RoLCBzb3VyY2UxNiwgbV9sZW5ndGgsICIiLCAm
c3RhdHVzKTsKLSAgICBpZiAoVV9TVUNDRVNTKHN0YXR1cykgJiYgcmVhbExlbmd0aCA9PSBsZW5n
dGgpCi0gICAgICAgIHJldHVybiBuZXdJbXBsOwotICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRp
YWxpemVkKHJlYWxMZW5ndGgsIGRhdGExNik7Ci0gICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwot
ICAgIHVfc3RyVG9VcHBlcihkYXRhMTYsIHJlYWxMZW5ndGgsIHNvdXJjZTE2LCBtX2xlbmd0aCwg
IiIsICZzdGF0dXMpOwotICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIHJldHVybiBuZXdJbXBsOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgbmVl
ZHNUdXJraXNoQ2FzaW5nUnVsZXMoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVy
KQotewotICAgIC8vIEVpdGhlciAidHIiIG9yICJheiIgbG9jYWxlLCB3aXRoIGNhc2Ugc2Vuc2l0
aXZlIGNvbXBhcmlzb24gYW5kIGFsbG93aW5nIGZvciBhbiBpZ25vcmVkIHN1YnRhZy4KLSAgICBV
Q2hhciBmaXJzdCA9IGxvY2FsZUlkZW50aWZpZXJbMF07Ci0gICAgVUNoYXIgc2Vjb25kID0gbG9j
YWxlSWRlbnRpZmllclsxXTsKLSAgICByZXR1cm4gKChpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFs
KGZpcnN0LCAndCcpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoc2Vjb25kLCAncicpKQot
ICAgICAgICB8fCAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChmaXJzdCwgJ2EnKSAmJiBpc0FT
Q0lJQWxwaGFDYXNlbGVzc0VxdWFsKHNlY29uZCwgJ3onKSkpCi0gICAgICAgICYmIChsb2NhbGVJ
ZGVudGlmaWVyLmxlbmd0aCgpID09IDIgfHwgbG9jYWxlSWRlbnRpZmllclsyXSA9PSAnLScpOwot
fQotCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aExv
Y2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCi17Ci0gICAgLy8gVXNl
IHRoZSBtb3JlLW9wdGltaXplZCBjb2RlIHBhdGggbW9zdCBvZiB0aGUgdGltZS4KLSAgICAvLyBB
c3N1bWluZyBoZXJlIHRoYXQgdGhlIG9ubHkgbG9jYWxlLXNwZWNpZmljIGxvd2VyY2FzaW5nIGlz
IHRoZSBUdXJraXNoIGNhc2luZyBydWxlcy4KLSAgICAvLyBGSVhNRTogQ291bGQgcG9zc2libHkg
b3B0aW1pemUgZnVydGhlciBieSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgc2VxdWVuY2VzCi0g
ICAgLy8gdGhhdCBoYXZlIGxvY2FsZS1zcGVjaWZpYyBsb3dlcmNhc2luZy4gVGhlcmUgYXJlIG9u
bHkgdGhyZWUgb2YgdGhlbS4KLSAgICBpZiAoIW5lZWRzVHVya2lzaENhc2luZ1J1bGVzKGxvY2Fs
ZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm4gY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExv
Y2FsZSgpOwotCi0gICAgLy8gRklYTUU6IENvdWxkIHNoYXJlIG1vcmUgY29kZSB3aXRoIHRoZSBt
YWluIFN0cmluZ0ltcGw6Omxvd2VyIGJ5IGZhY3RvcmluZyBvdXQKLSAgICAvLyB0aGlzIGxhc3Qg
cGFydCBpbnRvIGEgc2hhcmVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBsb2NhbGUgc3RyaW5nLCBz
aW5jZSB0aGlzIGlzCi0gICAgLy8ganVzdCBsaWtlIHRoZSBlbmQgb2YgdGhhdCBmdW5jdGlvbi4K
LQotICAgIGlmIChtX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludDMyX3Q+OjptYXgoKSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgaW50IGxlbmd0
aCA9IG1fbGVuZ3RoOwotCi0gICAgLy8gQmVsb3csIHdlIHBhc3MgaW4gdGhlIGhhcmRjb2RlZCBs
b2NhbGUgInRyIi4gUGFzc2luZyB0aGF0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4KLSAgICAvLyBh
bGxvY2F0aW5nIG1lbW9yeSBqdXN0IHRvIHR1cm4gbG9jYWxlSWRlbnRpZmllciBpbnRvIGEgQyBz
dHJpbmcsIGFuZCB3ZSBhc3N1bWUKLSAgICAvLyB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdl
ZW4gdGhlIHVwcGVyY2FzaW5nIGZvciAidHIiIGFuZCAiYXoiIGxvY2FsZXMuCi0gICAgYXV0byB1
cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KCp0aGlzKS51cGNvbnZlcnRlZENoYXJh
Y3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogc291cmNlMTYgPSB1cGNvbnZlcnRlZENoYXJhY3Rl
cnM7Ci0gICAgVUNoYXIqIGRhdGExNjsKLSAgICBhdXRvIG5ld1N0cmluZyA9IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBkYXRhMTYpOwotICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJP
X0VSUk9SOwotICAgIGludCByZWFsTGVuZ3RoID0gdV9zdHJUb0xvd2VyKGRhdGExNiwgbGVuZ3Ro
LCBzb3VyY2UxNiwgbGVuZ3RoLCAidHIiLCAmc3RhdHVzKTsKLSAgICBpZiAoVV9TVUNDRVNTKHN0
YXR1cykgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBuZXdTdHJpbmc7
Ci0gICAgbmV3U3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhMTYp
OwotICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICB1X3N0clRvTG93ZXIoZGF0YTE2LCBy
ZWFsTGVuZ3RoLCBzb3VyY2UxNiwgbGVuZ3RoLCAidHIiLCAmc3RhdHVzKTsKLSAgICBpZiAoVV9G
QUlMVVJFKHN0YXR1cykpCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICByZXR1cm4gbmV3U3Ry
aW5nOwotfQotCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNl
V2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCi17Ci0gICAg
Ly8gVXNlIHRoZSBtb3JlLW9wdGltaXplZCBjb2RlIHBhdGggbW9zdCBvZiB0aGUgdGltZS4KLSAg
ICAvLyBBc3N1bWluZyBoZXJlIHRoYXQgdGhlIG9ubHkgbG9jYWxlLXNwZWNpZmljIGxvd2VyY2Fz
aW5nIGlzIHRoZSBUdXJraXNoIGNhc2luZyBydWxlcywKLSAgICAvLyBhbmQgdGhhdCB0aGUgb25s
eSBhZmZlY3RlZCBjaGFyYWN0ZXIgaXMgbG93ZXJjYXNlICJpIi4KLSAgICBpZiAoIW5lZWRzVHVy
a2lzaENhc2luZ1J1bGVzKGxvY2FsZUlkZW50aWZpZXIpIHx8IGZpbmQoJ2knKSA9PSBub3RGb3Vu
ZCkKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKTsKLQot
ICAgIGlmIChtX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptYXgoKSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgaW50IGxlbmd0aCA9
IG1fbGVuZ3RoOwotCi0gICAgLy8gQmVsb3csIHdlIHBhc3MgaW4gdGhlIGhhcmRjb2RlZCBsb2Nh
bGUgInRyIi4gUGFzc2luZyB0aGF0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4KLSAgICAvLyBhbGxv
Y2F0aW5nIG1lbW9yeSBqdXN0IHRvIHR1cm4gbG9jYWxlSWRlbnRpZmllciBpbnRvIGEgQyBzdHJp
bmcsIGFuZCB3ZSBhc3N1bWUKLSAgICAvLyB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4g
dGhlIHVwcGVyY2FzaW5nIGZvciAidHIiIGFuZCAiYXoiIGxvY2FsZXMuCi0gICAgYXV0byB1cGNv
bnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KCp0aGlzKS51cGNvbnZlcnRlZENoYXJhY3Rl
cnMoKTsKLSAgICBjb25zdCBVQ2hhciogc291cmNlMTYgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7
Ci0gICAgVUNoYXIqIGRhdGExNjsKLSAgICBhdXRvIG5ld1N0cmluZyA9IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQobGVuZ3RoLCBkYXRhMTYpOwotICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VS
Uk9SOwotICAgIGludCByZWFsTGVuZ3RoID0gdV9zdHJUb1VwcGVyKGRhdGExNiwgbGVuZ3RoLCBz
b3VyY2UxNiwgbGVuZ3RoLCAidHIiLCAmc3RhdHVzKTsKLSAgICBpZiAoVV9TVUNDRVNTKHN0YXR1
cykgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBuZXdTdHJpbmc7Ci0g
ICAgbmV3U3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhMTYpOwot
ICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICB1X3N0clRvVXBwZXIoZGF0YTE2LCByZWFs
TGVuZ3RoLCBzb3VyY2UxNiwgbGVuZ3RoLCAidHIiLCAmc3RhdHVzKTsKLSAgICBpZiAoVV9GQUlM
VVJFKHN0YXR1cykpCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICByZXR1cm4gbmV3U3RyaW5n
OwotfQotCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Zm9sZENhc2UoKQotewotICAgIGlm
IChpczhCaXQoKSkgewotICAgICAgICB1bnNpZ25lZCBmYWlsaW5nSW5kZXg7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBhdXRv
IGNoYXJhY3RlciA9IG1fZGF0YThbaV07Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWlzQVND
SUkoY2hhcmFjdGVyKSB8fCBpc0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSkpIHsKLSAgICAgICAgICAg
ICAgICBmYWlsaW5nSW5kZXggPSBpOwotICAgICAgICAgICAgICAgIGdvdG8gU2xvd1BhdGg7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU3RyaW5nIHdhcyBhbGwgQVNDSUkg
YW5kIG5vIHVwcGVyY2FzZSwgc28ganVzdCByZXR1cm4gYXMtaXMuCi0gICAgICAgIHJldHVybiAq
dGhpczsKLQotU2xvd1BhdGg6Ci0gICAgICAgIGJvb2wgbmVlZDE2Qml0Q2hhcmFjdGVycyA9IGZh
bHNlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmYWlsaW5nSW5kZXg7IGkgPCBtX2xlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvIGNoYXJhY3RlciA9IG1fZGF0YThbaV07Ci0gICAg
ICAgICAgICBpZiAoY2hhcmFjdGVyID09IDB4QjUgfHwgY2hhcmFjdGVyID09IDB4REYpIHsKLSAg
ICAgICAgICAgICAgICBuZWVkMTZCaXRDaGFyYWN0ZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbmVlZDE2
Qml0Q2hhcmFjdGVycykgewotICAgICAgICAgICAgTENoYXIqIGRhdGE4OwotICAgICAgICAgICAg
YXV0byBmb2xkZWQgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShtX2xlbmd0
aCwgZGF0YTgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhaWxpbmdJ
bmRleDsgKytpKQotICAgICAgICAgICAgICAgIGRhdGE4W2ldID0gbV9kYXRhOFtpXTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8IG1fbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIGNoYXJhY3RlciA9IG1fZGF0YThbaV07Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzQVNDSUkoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgICAgICAgICAgZGF0
YThbaV0gPSB0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHVfZm9sZENhc2UoY2hhcmFjdGVyLCBVX0ZPTERf
Q0FTRV9ERUZBVUxUKSA8PSAweEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YThbaV0gPSBz
dGF0aWNfY2FzdDxMQ2hhcj4odV9mb2xkQ2FzZShjaGFyYWN0ZXIsIFVfRk9MRF9DQVNFX0RFRkFV
TFQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gZm9sZGVkOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IFVu
Y2xlYXIgd2h5IHdlIHVzZSBnb3RvIGluIHRoZSA4LWJpdCBjYXNlLCBhbmQgYSBkaWZmZXJlbnQg
YXBwcm9hY2ggaW4gdGhlIDE2LWJpdCBjYXNlLgotICAgICAgICBib29sIG5vVXBwZXIgPSB0cnVl
OwotICAgICAgICB1bnNpZ25lZCBvcmVkID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IG1f
ZGF0YTE2W2ldOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGlzQVNDSUlVcHBlcihjaGFyYWN0
ZXIpKSkKLSAgICAgICAgICAgICAgICBub1VwcGVyID0gZmFsc2U7Ci0gICAgICAgICAgICBvcmVk
IHw9IGNoYXJhY3RlcjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIShvcmVkICYgfjB4N0YpKSB7
Ci0gICAgICAgICAgICBpZiAobm9VcHBlcikgewotICAgICAgICAgICAgICAgIC8vIFN0cmluZyB3
YXMgYWxsIEFTQ0lJIGFuZCBubyB1cHBlcmNhc2UsIHNvIGp1c3QgcmV0dXJuIGFzLWlzLgotICAg
ICAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFVD
aGFyKiBkYXRhMTY7Ci0gICAgICAgICAgICBhdXRvIGZvbGRlZCA9IGNyZWF0ZVVuaW5pdGlhbGl6
ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhMTYpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgZGF0YTE2
W2ldID0gdG9BU0NJSUxvd2VyKG1fZGF0YTE2W2ldKTsKLSAgICAgICAgICAgIHJldHVybiBmb2xk
ZWQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9sZW5ndGggPiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKQotICAgICAgICBD
UkFTSCgpOwotCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KCp0
aGlzKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLQotICAgIFVDaGFyKiBkYXRhOwotICAgIGF1
dG8gZm9sZGVkID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkobV9sZW5ndGgs
IGRhdGEpOwotICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7Ci0gICAgVUVycm9yQ29kZSBz
dGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgaW50MzJfdCByZWFsTGVuZ3RoID0gdV9zdHJGb2xk
Q2FzZShkYXRhLCBsZW5ndGgsIHVwY29udmVydGVkQ2hhcmFjdGVycywgbGVuZ3RoLCBVX0ZPTERf
Q0FTRV9ERUZBVUxULCAmc3RhdHVzKTsKLSAgICBpZiAoVV9TVUNDRVNTKHN0YXR1cykgJiYgcmVh
bExlbmd0aCA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmb2xkZWQ7Ci0gICAgQVNTRVJUKHJl
YWxMZW5ndGggPiBsZW5ndGgpOwotICAgIGZvbGRlZCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRl
cm5hbE5vbkVtcHR5KHJlYWxMZW5ndGgsIGRhdGEpOwotICAgIHN0YXR1cyA9IFVfWkVST19FUlJP
UjsKLSAgICB1X3N0ckZvbGRDYXNlKGRhdGEsIHJlYWxMZW5ndGgsIHVwY29udmVydGVkQ2hhcmFj
dGVycywgbGVuZ3RoLCBVX0ZPTERfQ0FTRV9ERUZBVUxULCAmc3RhdHVzKTsKLSAgICBpZiAoVV9G
QUlMVVJFKHN0YXR1cykpCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICByZXR1cm4gZm9sZGVk
OwotfQotCi10ZW1wbGF0ZTxTdHJpbmdJbXBsOjpDYXNlQ29udmVydFR5cGUgdHlwZSwgdHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLUFMV0FZU19JTkxJTkUgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OmNvbnZlcnRBU0NJSUNhc2UoU3RyaW5nSW1wbCYgaW1wbCwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHVuc2lnbmVkIGZhaWxpbmdJbmRleDsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgQ2hh
cmFjdGVyVHlwZSBjaGFyYWN0ZXIgPSBkYXRhW2ldOwotICAgICAgICBpZiAodHlwZSA9PSBDYXNl
Q29udmVydFR5cGU6Okxvd2VyID8gVU5MSUtFTFkoaXNBU0NJSVVwcGVyKGNoYXJhY3RlcikpIDog
TElLRUxZKGlzQVNDSUlMb3dlcihjaGFyYWN0ZXIpKSkgewotICAgICAgICAgICAgZmFpbGluZ0lu
ZGV4ID0gaTsKLSAgICAgICAgICAgIGdvdG8gU2xvd1BhdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIGltcGw7Ci0KLVNsb3dQYXRoOgotICAgIENoYXJhY3RlclR5cGUqIG5ld0RhdGE7
Ci0gICAgYXV0byBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHko
bGVuZ3RoLCBuZXdEYXRhKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFpbGluZ0lu
ZGV4OyArK2kpCi0gICAgICAgIG5ld0RhdGFbaV0gPSBkYXRhW2ldOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBuZXdEYXRhW2ld
ID0gdHlwZSA9PSBDYXNlQ29udmVydFR5cGU6Okxvd2VyID8gdG9BU0NJSUxvd2VyKGRhdGFbaV0p
IDogdG9BU0NJSVVwcGVyKGRhdGFbaV0pOwotICAgIHJldHVybiBuZXdJbXBsOwotfQotCi1SZWY8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvQVNDSUlMb3dlcmNhc2UoKQotewotICAg
IGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRBU0NJSUNhc2U8Q2FzZUNvbnZl
cnRUeXBlOjpMb3dlcj4oKnRoaXMsIG1fZGF0YTgsIG1fbGVuZ3RoKTsKLSAgICByZXR1cm4gY29u
dmVydEFTQ0lJQ2FzZTxDYXNlQ29udmVydFR5cGU6Okxvd2VyPigqdGhpcywgbV9kYXRhMTYsIG1f
bGVuZ3RoKTsKLX0KLQotUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb0FTQ0lJ
VXBwZXJjYXNlKCkKLXsKLSAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBjb252ZXJ0
QVNDSUlDYXNlPENhc2VDb252ZXJ0VHlwZTo6VXBwZXI+KCp0aGlzLCBtX2RhdGE4LCBtX2xlbmd0
aCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRBU0NJSUNhc2U8Q2FzZUNvbnZlcnRUeXBlOjpVcHBlcj4o
KnRoaXMsIG1fZGF0YTE2LCBtX2xlbmd0aCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBVQ2hhclBy
ZWRpY2F0ZT4KLWlubGluZSBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6c3RyaXBNYXRjaGVk
Q2hhcmFjdGVycyhVQ2hhclByZWRpY2F0ZSBwcmVkaWNhdGUpCi17Ci0gICAgaWYgKCFtX2xlbmd0
aCkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgdW5zaWduZWQgc3RhcnQgPSAwOwotICAg
IHVuc2lnbmVkIGVuZCA9IG1fbGVuZ3RoIC0gMTsKLSAgICAKLSAgICAvLyBza2lwIHdoaXRlIHNw
YWNlIGZyb20gc3RhcnQKLSAgICB3aGlsZSAoc3RhcnQgPD0gZW5kICYmIHByZWRpY2F0ZShpczhC
aXQoKSA/IG1fZGF0YThbc3RhcnRdIDogbV9kYXRhMTZbc3RhcnRdKSkKLSAgICAgICAgKytzdGFy
dDsKLSAgICAKLSAgICAvLyBvbmx5IHdoaXRlIHNwYWNlCi0gICAgaWYgKHN0YXJ0ID4gZW5kKSAK
LSAgICAgICAgcmV0dXJuICplbXB0eSgpOwotCi0gICAgLy8gc2tpcCB3aGl0ZSBzcGFjZSBmcm9t
IGVuZAotICAgIHdoaWxlIChlbmQgJiYgcHJlZGljYXRlKGlzOEJpdCgpID8gbV9kYXRhOFtlbmRd
IDogbV9kYXRhMTZbZW5kXSkpCi0gICAgICAgIC0tZW5kOwotCi0gICAgaWYgKCFzdGFydCAmJiBl
bmQgPT0gbV9sZW5ndGggLSAxKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgaWYgKGlzOEJp
dCgpKQotICAgICAgICByZXR1cm4gY3JlYXRlKG1fZGF0YTggKyBzdGFydCwgZW5kICsgMSAtIHN0
YXJ0KTsKLSAgICByZXR1cm4gY3JlYXRlKG1fZGF0YTE2ICsgc3RhcnQsIGVuZCArIDEgLSBzdGFy
dCk7Ci19Ci0KLWNsYXNzIFVDaGFyUHJlZGljYXRlIHsKLXB1YmxpYzoKLSAgICBpbmxpbmUgVUNo
YXJQcmVkaWNhdGUoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBmdW5jdGlvbik6IG1fZnVuY3Rp
b24oZnVuY3Rpb24pIHsgfQotCi0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3IoKShVQ2hhciBjaCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Z1bmN0aW9uKGNoKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgY29uc3QgQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBtX2Z1bmN0aW9uOwot
fTsKLQotY2xhc3MgU3BhY2VPck5ld2xpbmVQcmVkaWNhdGUgewotcHVibGljOgotICAgIGlubGlu
ZSBib29sIG9wZXJhdG9yKCkoVUNoYXIgY2gpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
aXNTcGFjZU9yTmV3bGluZShjaCk7Ci0gICAgfQotfTsKLQotUmVmPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OnN0cmlwV2hpdGVTcGFjZSgpCi17Ci0gICAgcmV0dXJuIHN0cmlwTWF0Y2hlZENoYXJh
Y3RlcnMoU3BhY2VPck5ld2xpbmVQcmVkaWNhdGUoKSk7Ci19Ci0KLVJlZjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpzdHJpcFdoaXRlU3BhY2UoSXNXaGl0ZVNwYWNlRnVuY3Rpb25QdHIgaXNXaGl0
ZVNwYWNlKQotewotICAgIHJldHVybiBzdHJpcE1hdGNoZWRDaGFyYWN0ZXJzKFVDaGFyUHJlZGlj
YXRlKGlzV2hpdGVTcGFjZSkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+Ci1B
TFdBWVNfSU5MSU5FIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZW1vdmVDaGFyYWN0ZXJz
KGNvbnN0IENoYXJUeXBlKiBjaGFyYWN0ZXJzLCBDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyIGZp
bmRNYXRjaCkKLXsKLSAgICBjb25zdCBDaGFyVHlwZSogZnJvbSA9IGNoYXJhY3RlcnM7Ci0gICAg
Y29uc3QgQ2hhclR5cGUqIGZyb21lbmQgPSBmcm9tICsgbV9sZW5ndGg7Ci0gICAgCi0gICAgLy8g
QXNzdW1lIHRoZSBjb21tb24gY2FzZSB3aWxsIG5vdCByZW1vdmUgYW55IGNoYXJhY3RlcnMKLSAg
ICB3aGlsZSAoZnJvbSAhPSBmcm9tZW5kICYmICFmaW5kTWF0Y2goKmZyb20pKQotICAgICAgICAr
K2Zyb207Ci0gICAgaWYgKGZyb20gPT0gZnJvbWVuZCkKLSAgICAgICAgcmV0dXJuICp0aGlzOwot
ICAgIAotICAgIFN0cmluZ0J1ZmZlcjxDaGFyVHlwZT4gZGF0YShtX2xlbmd0aCk7Ci0gICAgQ2hh
clR5cGUqIHRvID0gZGF0YS5jaGFyYWN0ZXJzKCk7Ci0gICAgdW5zaWduZWQgb3V0YyA9IGZyb20g
LSBjaGFyYWN0ZXJzOwotICAgIAotICAgIGlmIChvdXRjKQotICAgICAgICBtZW1jcHkodG8sIGNo
YXJhY3RlcnMsIG91dGMgKiBzaXplb2YoQ2hhclR5cGUpKTsKLQotICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgIHdoaWxlIChmcm9tICE9IGZyb21lbmQgJiYgZmluZE1hdGNoKCpmcm9tKSkKLSAg
ICAgICAgICAgICsrZnJvbTsKLSAgICAgICAgd2hpbGUgKGZyb20gIT0gZnJvbWVuZCAmJiAhZmlu
ZE1hdGNoKCpmcm9tKSkKLSAgICAgICAgICAgIHRvW291dGMrK10gPSAqZnJvbSsrOwotICAgICAg
ICBpZiAoZnJvbSA9PSBmcm9tZW5kKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
ZGF0YS5zaHJpbmsob3V0Yyk7Ci0KLSAgICByZXR1cm4gYWRvcHQoV1RGTW92ZShkYXRhKSk7Ci19
Ci0KLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZW1vdmVDaGFyYWN0ZXJzKENoYXJhY3Rl
ck1hdGNoRnVuY3Rpb25QdHIgZmluZE1hdGNoKQotewotICAgIGlmIChpczhCaXQoKSkKLSAgICAg
ICAgcmV0dXJuIHJlbW92ZUNoYXJhY3RlcnMoY2hhcmFjdGVyczgoKSwgZmluZE1hdGNoKTsKLSAg
ICByZXR1cm4gcmVtb3ZlQ2hhcmFjdGVycyhjaGFyYWN0ZXJzMTYoKSwgZmluZE1hdGNoKTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlLCBjbGFzcyBVQ2hhclByZWRpY2F0ZT4KLWlu
bGluZSBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6c2ltcGxpZnlNYXRjaGVkQ2hhcmFjdGVy
c1RvU3BhY2UoVUNoYXJQcmVkaWNhdGUgcHJlZGljYXRlKQotewotICAgIFN0cmluZ0J1ZmZlcjxD
aGFyVHlwZT4gZGF0YShtX2xlbmd0aCk7Ci0KLSAgICBjb25zdCBDaGFyVHlwZSogZnJvbSA9IGNo
YXJhY3RlcnM8Q2hhclR5cGU+KCk7Ci0gICAgY29uc3QgQ2hhclR5cGUqIGZyb21lbmQgPSBmcm9t
ICsgbV9sZW5ndGg7Ci0gICAgaW50IG91dGMgPSAwOwotICAgIGJvb2wgY2hhbmdlZFRvU3BhY2Ug
PSBmYWxzZTsKLSAgICAKLSAgICBDaGFyVHlwZSogdG8gPSBkYXRhLmNoYXJhY3RlcnMoKTsKLSAg
ICAKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICB3aGlsZSAoZnJvbSAhPSBmcm9tZW5kICYm
IHByZWRpY2F0ZSgqZnJvbSkpIHsKLSAgICAgICAgICAgIGlmICgqZnJvbSAhPSAnICcpCi0gICAg
ICAgICAgICAgICAgY2hhbmdlZFRvU3BhY2UgPSB0cnVlOwotICAgICAgICAgICAgKytmcm9tOwot
ICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChmcm9tICE9IGZyb21lbmQgJiYgIXByZWRpY2F0ZSgq
ZnJvbSkpCi0gICAgICAgICAgICB0b1tvdXRjKytdID0gKmZyb20rKzsKLSAgICAgICAgaWYgKGZy
b20gIT0gZnJvbWVuZCkKLSAgICAgICAgICAgIHRvW291dGMrK10gPSAnICc7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBpZiAob3V0YyA+IDAgJiYg
dG9bb3V0YyAtIDFdID09ICcgJykKLSAgICAgICAgLS1vdXRjOwotICAgIAotICAgIGlmIChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ob3V0YykgPT0gbV9sZW5ndGggJiYgIWNoYW5nZWRUb1NwYWNlKQot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgCi0gICAgZGF0YS5zaHJpbmsob3V0Yyk7Ci0gICAg
Ci0gICAgcmV0dXJuIGFkb3B0KFdURk1vdmUoZGF0YSkpOwotfQotCi1SZWY8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6c2ltcGxpZnlXaGl0ZVNwYWNlKCkKLXsKLSAgICBpZiAoaXM4Qml0KCkpCi0g
ICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9TcGFj
ZTxMQ2hhcj4oU3BhY2VPck5ld2xpbmVQcmVkaWNhdGUoKSk7Ci0gICAgcmV0dXJuIFN0cmluZ0lt
cGw6OnNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlPFVDaGFyPihTcGFjZU9yTmV3bGlu
ZVByZWRpY2F0ZSgpKTsKLX0KLQotUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnNpbXBsaWZ5
V2hpdGVTcGFjZShJc1doaXRlU3BhY2VGdW5jdGlvblB0ciBpc1doaXRlU3BhY2UpCi17Ci0gICAg
aWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6c2ltcGxpZnlNYXRjaGVk
Q2hhcmFjdGVyc1RvU3BhY2U8TENoYXI+KFVDaGFyUHJlZGljYXRlKGlzV2hpdGVTcGFjZSkpOwot
ICAgIHJldHVybiBTdHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9TcGFjZTxV
Q2hhcj4oVUNoYXJQcmVkaWNhdGUoaXNXaGl0ZVNwYWNlKSk7Ci19Ci0KLWludCBTdHJpbmdJbXBs
Ojp0b0ludFN0cmljdChib29sKiBvaywgaW50IGJhc2UpCi17Ci0gICAgaWYgKGlzOEJpdCgpKQot
ICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50U3RyaWN0KGNoYXJhY3RlcnM4KCksIG1fbGVu
Z3RoLCBvaywgYmFzZSk7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFN0cmljdChjaGFyYWN0
ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsKLX0KLQotdW5zaWduZWQgU3RyaW5nSW1wbDo6
dG9VSW50U3RyaWN0KGJvb2wqIG9rLCBpbnQgYmFzZSkKLXsKLSAgICBpZiAoaXM4Qml0KCkpCi0g
ICAgICAgIHJldHVybiBjaGFyYWN0ZXJzVG9VSW50U3RyaWN0KGNoYXJhY3RlcnM4KCksIG1fbGVu
Z3RoLCBvaywgYmFzZSk7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QoY2hhcmFj
dGVyczE2KCksIG1fbGVuZ3RoLCBvaywgYmFzZSk7Ci19Ci0KLWludDY0X3QgU3RyaW5nSW1wbDo6
dG9JbnQ2NFN0cmljdChib29sKiBvaywgaW50IGJhc2UpCi17Ci0gICAgaWYgKGlzOEJpdCgpKQot
ICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50NjRTdHJpY3QoY2hhcmFjdGVyczgoKSwgbV9s
ZW5ndGgsIG9rLCBiYXNlKTsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50NjRTdHJpY3QoY2hh
cmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvaywgYmFzZSk7Ci19Ci0KLXVpbnQ2NF90IFN0cmluZ0lt
cGw6OnRvVUludDY0U3RyaWN0KGJvb2wqIG9rLCBpbnQgYmFzZSkKLXsKLSAgICBpZiAoaXM4Qml0
KCkpCi0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzVG9VSW50NjRTdHJpY3QoY2hhcmFjdGVyczgo
KSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0U3Ry
aWN0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGJhc2UpOwotfQotCi1pbnRwdHJfdCBT
dHJpbmdJbXBsOjp0b0ludFB0clN0cmljdChib29sKiBvaywgaW50IGJhc2UpCi17Ci0gICAgaWYg
KGlzOEJpdCgpKQotICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50UHRyU3RyaWN0KGNoYXJh
Y3RlcnM4KCksIG1fbGVuZ3RoLCBvaywgYmFzZSk7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0lu
dFB0clN0cmljdChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsKLX0KLQotaW50
IFN0cmluZ0ltcGw6OnRvSW50KGJvb2wqIG9rKQotewotICAgIGlmIChpczhCaXQoKSkKLSAgICAg
ICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgb2spOwot
ICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7
Ci19Ci0KLXVuc2lnbmVkIFN0cmluZ0ltcGw6OnRvVUludChib29sKiBvaykKLXsKLSAgICBpZiAo
aXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzVG9VSW50KGNoYXJhY3RlcnM4KCks
IG1fbGVuZ3RoLCBvayk7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQoY2hhcmFjdGVyczE2
KCksIG1fbGVuZ3RoLCBvayk7Ci19Ci0KLWludDY0X3QgU3RyaW5nSW1wbDo6dG9JbnQ2NChib29s
KiBvaykKLXsKLSAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzVG9J
bnQ2NChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgb2spOwotICAgIHJldHVybiBjaGFyYWN0ZXJz
VG9JbnQ2NChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rKTsKLX0KLQotdWludDY0X3QgU3Ry
aW5nSW1wbDo6dG9VSW50NjQoYm9vbCogb2spCi17Ci0gICAgaWYgKGlzOEJpdCgpKQotICAgICAg
ICByZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0KGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCBvayk7
Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQ2NChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgs
IG9rKTsKLX0KLQotaW50cHRyX3QgU3RyaW5nSW1wbDo6dG9JbnRQdHIoYm9vbCogb2spCi17Ci0g
ICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50UHRyKGNoYXJh
Y3RlcnM4KCksIG1fbGVuZ3RoLCBvayk7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFB0cihj
aGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rKTsKLX0KLQotZG91YmxlIFN0cmluZ0ltcGw6OnRv
RG91YmxlKGJvb2wqIG9rKQotewotICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGNo
YXJhY3RlcnNUb0RvdWJsZShjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgb2spOwotICAgIHJldHVy
biBjaGFyYWN0ZXJzVG9Eb3VibGUoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7Ci19Ci0K
LWZsb2F0IFN0cmluZ0ltcGw6OnRvRmxvYXQoYm9vbCogb2spCi17Ci0gICAgaWYgKGlzOEJpdCgp
KQotICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQoY2hhcmFjdGVyczgoKSwgbV9sZW5n
dGgsIG9rKTsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQoY2hhcmFjdGVyczE2KCksIG1f
bGVuZ3RoLCBvayk7Ci19Ci0KLS8vIFRhYmxlIGlzIGJhc2VkIG9uIGZ0cDovL2Z0cC51bmljb2Rl
Lm9yZy9QdWJsaWMvVU5JREFUQS9DYXNlRm9sZGluZy50eHQKLXN0YXRpYyBjb25zdCBVQ2hhciBs
YXRpbjFDYXNlRm9sZFRhYmxlWzI1Nl0gPSB7Ci0gICAgMHgwMDAwLCAweDAwMDEsIDB4MDAwMiwg
MHgwMDAzLCAweDAwMDQsIDB4MDAwNSwgMHgwMDA2LCAweDAwMDcsIDB4MDAwOCwgMHgwMDA5LCAw
eDAwMGEsIDB4MDAwYiwgMHgwMDBjLCAweDAwMGQsIDB4MDAwZSwgMHgwMDBmLAotICAgIDB4MDAx
MCwgMHgwMDExLCAweDAwMTIsIDB4MDAxMywgMHgwMDE0LCAweDAwMTUsIDB4MDAxNiwgMHgwMDE3
LCAweDAwMTgsIDB4MDAxOSwgMHgwMDFhLCAweDAwMWIsIDB4MDAxYywgMHgwMDFkLCAweDAwMWUs
IDB4MDAxZiwKLSAgICAweDAwMjAsIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgw
MDI1LCAweDAwMjYsIDB4MDAyNywgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAw
MmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwg
MHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAw
eDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAotICAgIDB4MDA0
MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3
LCAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUs
IDB4MDA2ZiwKLSAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgw
MDc1LCAweDAwNzYsIDB4MDA3NywgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMDViLCAweDAw
NWMsIDB4MDA1ZCwgMHgwMDVlLCAweDAwNWYsCi0gICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2Miwg
MHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsIDB4MDA2OCwgMHgwMDY5LCAw
eDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgwMDZmLAotICAgIDB4MDA3
MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3
LCAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwN2IsIDB4MDA3YywgMHgwMDdkLCAweDAwN2Us
IDB4MDA3ZiwKLSAgICAweDAwODAsIDB4MDA4MSwgMHgwMDgyLCAweDAwODMsIDB4MDA4NCwgMHgw
MDg1LCAweDAwODYsIDB4MDA4NywgMHgwMDg4LCAweDAwODksIDB4MDA4YSwgMHgwMDhiLCAweDAw
OGMsIDB4MDA4ZCwgMHgwMDhlLCAweDAwOGYsCi0gICAgMHgwMDkwLCAweDAwOTEsIDB4MDA5Miwg
MHgwMDkzLCAweDAwOTQsIDB4MDA5NSwgMHgwMDk2LCAweDAwOTcsIDB4MDA5OCwgMHgwMDk5LCAw
eDAwOWEsIDB4MDA5YiwgMHgwMDljLCAweDAwOWQsIDB4MDA5ZSwgMHgwMDlmLAotICAgIDB4MDBh
MCwgMHgwMGExLCAweDAwYTIsIDB4MDBhMywgMHgwMGE0LCAweDAwYTUsIDB4MDBhNiwgMHgwMGE3
LCAweDAwYTgsIDB4MDBhOSwgMHgwMGFhLCAweDAwYWIsIDB4MDBhYywgMHgwMGFkLCAweDAwYWUs
IDB4MDBhZiwKLSAgICAweDAwYjAsIDB4MDBiMSwgMHgwMGIyLCAweDAwYjMsIDB4MDBiNCwgMHgw
M2JjLCAweDAwYjYsIDB4MDBiNywgMHgwMGI4LCAweDAwYjksIDB4MDBiYSwgMHgwMGJiLCAweDAw
YmMsIDB4MDBiZCwgMHgwMGJlLCAweDAwYmYsCi0gICAgMHgwMGUwLCAweDAwZTEsIDB4MDBlMiwg
MHgwMGUzLCAweDAwZTQsIDB4MDBlNSwgMHgwMGU2LCAweDAwZTcsIDB4MDBlOCwgMHgwMGU5LCAw
eDAwZWEsIDB4MDBlYiwgMHgwMGVjLCAweDAwZWQsIDB4MDBlZSwgMHgwMGVmLAotICAgIDB4MDBm
MCwgMHgwMGYxLCAweDAwZjIsIDB4MDBmMywgMHgwMGY0LCAweDAwZjUsIDB4MDBmNiwgMHgwMGQ3
LCAweDAwZjgsIDB4MDBmOSwgMHgwMGZhLCAweDAwZmIsIDB4MDBmYywgMHgwMGZkLCAweDAwZmUs
IDB4MDBkZiwKLSAgICAweDAwZTAsIDB4MDBlMSwgMHgwMGUyLCAweDAwZTMsIDB4MDBlNCwgMHgw
MGU1LCAweDAwZTYsIDB4MDBlNywgMHgwMGU4LCAweDAwZTksIDB4MDBlYSwgMHgwMGViLCAweDAw
ZWMsIDB4MDBlZCwgMHgwMGVlLCAweDAwZWYsCi0gICAgMHgwMGYwLCAweDAwZjEsIDB4MDBmMiwg
MHgwMGYzLCAweDAwZjQsIDB4MDBmNSwgMHgwMGY2LCAweDAwZjcsIDB4MDBmOCwgMHgwMGY5LCAw
eDAwZmEsIDB4MDBmYiwgMHgwMGZjLCAweDAwZmQsIDB4MDBmZSwgMHgwMGZmLAotfTsKLQotc3Rh
dGljIGlubGluZSBib29sIGVxdWFsQ29tcGF0aWJpbGl0eUNhc2VsZXNzKGNvbnN0IExDaGFyKiBh
LCBjb25zdCBMQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHdoaWxlIChsZW5ndGgt
LSkgewotICAgICAgICBpZiAobGF0aW4xQ2FzZUZvbGRUYWJsZVsqYSsrXSAhPSBsYXRpbjFDYXNl
Rm9sZFRhYmxlWypiKytdKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGVxdWFsQ29tcGF0aWJpbGl0eUNh
c2VsZXNzKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBMQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHdoaWxlIChsZW5ndGgtLSkgewotICAgICAgICBpZiAodV9mb2xkQ2FzZSgqYSsrLCBV
X0ZPTERfQ0FTRV9ERUZBVUxUKSAhPSBsYXRpbjFDYXNlRm9sZFRhYmxlWypiKytdKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IGlubGluZSBib29sIGVxdWFsQ29tcGF0aWJpbGl0eUNhc2VsZXNzKGNvbnN0IExDaGFyKiBhLCBj
b25zdCBVQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBlcXVhbENvbXBh
dGliaWxpdHlDYXNlbGVzcyhiLCBhLCBsZW5ndGgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
ZXF1YWxDb21wYXRpYmlsaXR5Q2FzZWxlc3MoY29uc3QgVUNoYXIqIGEsIGNvbnN0IFVDaGFyKiBi
LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuICF1X21lbWNhc2VjbXAoYSwgYiwgbGVu
Z3RoLCBVX0ZPTERfQ0FTRV9ERUZBVUxUKTsKLX0KLQotc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQo
Q2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBtYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBzdGFydCkK
LXsKLSAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVy
czgoKSwgbV9sZW5ndGgsIG1hdGNoRnVuY3Rpb24sIHN0YXJ0KTsKLSAgICByZXR1cm4gV1RGOjpm
aW5kKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgbWF0Y2hGdW5jdGlvbiwgc3RhcnQpOwotfQot
Ci1zaXplX3QgU3RyaW5nSW1wbDo6ZmluZChjb25zdCBMQ2hhciogbWF0Y2hTdHJpbmcsIHVuc2ln
bmVkIGluZGV4KQotewotICAgIC8vIENoZWNrIGZvciBudWxsIG9yIGVtcHR5IHN0cmluZyB0byBt
YXRjaCBhZ2FpbnN0Ci0gICAgaWYgKCFtYXRjaFN0cmluZykKLSAgICAgICAgcmV0dXJuIG5vdEZv
dW5kOwotICAgIHNpemVfdCBtYXRjaFN0cmluZ0xlbmd0aCA9IHN0cmxlbihyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihtYXRjaFN0cmluZykpOwotICAgIGlmIChtYXRjaFN0cmluZ0xlbmd0
aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAgQ1JBU0go
KTsKLSAgICB1bnNpZ25lZCBtYXRjaExlbmd0aCA9IG1hdGNoU3RyaW5nTGVuZ3RoOwotICAgIGlm
ICghbWF0Y2hMZW5ndGgpCi0gICAgICAgIHJldHVybiBzdGQ6Om1pbihpbmRleCwgbGVuZ3RoKCkp
OwotCi0gICAgLy8gT3B0aW1pemF0aW9uIDE6IGZhc3QgY2FzZSBmb3Igc3RyaW5ncyBvZiBsZW5n
dGggMS4KLSAgICBpZiAobWF0Y2hMZW5ndGggPT0gMSkgewotICAgICAgICBpZiAoaXM4Qml0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpLCBt
YXRjaFN0cmluZ1swXSwgaW5kZXgpOwotICAgICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3Rl
cnMxNigpLCBsZW5ndGgoKSwgKm1hdGNoU3RyaW5nLCBpbmRleCk7Ci0gICAgfQotCi0gICAgLy8g
Q2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCi0gICAgaWYgKGluZGV4ID4g
bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICB1bnNpZ25lZCBzZWFyY2hM
ZW5ndGggPSBsZW5ndGgoKSAtIGluZGV4OwotICAgIGlmIChtYXRjaExlbmd0aCA+IHNlYXJjaExl
bmd0aCkKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIC8vIGRlbHRhIGlzIHRoZSBudW1i
ZXIgb2YgYWRkaXRpb25hbCB0aW1lcyB0byB0ZXN0OyBkZWx0YSA9PSAwIG1lYW5zIHRlc3Qgb25s
eSBvbmNlLgotICAgIHVuc2lnbmVkIGRlbHRhID0gc2VhcmNoTGVuZ3RoIC0gbWF0Y2hMZW5ndGg7
Ci0KLSAgICAvLyBPcHRpbWl6YXRpb24gMjoga2VlcCBhIHJ1bm5pbmcgaGFzaCBvZiB0aGUgc3Ry
aW5ncywKLSAgICAvLyBvbmx5IGNhbGwgZXF1YWwgaWYgdGhlIGhhc2hlcyBtYXRjaC4KLQotICAg
IGlmIChpczhCaXQoKSkgewotICAgICAgICBjb25zdCBMQ2hhciogc2VhcmNoQ2hhcmFjdGVycyA9
IGNoYXJhY3RlcnM4KCkgKyBpbmRleDsKLQotICAgICAgICB1bnNpZ25lZCBzZWFyY2hIYXNoID0g
MDsKLSAgICAgICAgdW5zaWduZWQgbWF0Y2hIYXNoID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1hdGNoTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHNlYXJjaEhhc2gg
Kz0gc2VhcmNoQ2hhcmFjdGVyc1tpXTsKLSAgICAgICAgICAgIG1hdGNoSGFzaCArPSBtYXRjaFN0
cmluZ1tpXTsKLSAgICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICB3
aGlsZSAoc2VhcmNoSGFzaCAhPSBtYXRjaEhhc2ggfHwgIWVxdWFsKHNlYXJjaENoYXJhY3RlcnMg
KyBpLCBtYXRjaFN0cmluZywgbWF0Y2hMZW5ndGgpKSB7Ci0gICAgICAgICAgICBpZiAoaSA9PSBk
ZWx0YSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgICAgICAgICBzZWFy
Y2hIYXNoICs9IHNlYXJjaENoYXJhY3RlcnNbaSArIG1hdGNoTGVuZ3RoXTsKLSAgICAgICAgICAg
IHNlYXJjaEhhc2ggLT0gc2VhcmNoQ2hhcmFjdGVyc1tpXTsKLSAgICAgICAgICAgICsraTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gaW5kZXggKyBpOwotICAgIH0KLQotICAgIGNvbnN0IFVD
aGFyKiBzZWFyY2hDaGFyYWN0ZXJzID0gY2hhcmFjdGVyczE2KCkgKyBpbmRleDsKLQotICAgIHVu
c2lnbmVkIHNlYXJjaEhhc2ggPSAwOwotICAgIHVuc2lnbmVkIG1hdGNoSGFzaCA9IDA7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgc2Vh
cmNoSGFzaCArPSBzZWFyY2hDaGFyYWN0ZXJzW2ldOwotICAgICAgICBtYXRjaEhhc2ggKz0gbWF0
Y2hTdHJpbmdbaV07Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgd2hpbGUgKHNl
YXJjaEhhc2ggIT0gbWF0Y2hIYXNoIHx8ICFlcXVhbChzZWFyY2hDaGFyYWN0ZXJzICsgaSwgbWF0
Y2hTdHJpbmcsIG1hdGNoTGVuZ3RoKSkgewotICAgICAgICBpZiAoaSA9PSBkZWx0YSkKLSAgICAg
ICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICAgICAgc2VhcmNoSGFzaCArPSBzZWFyY2hDaGFy
YWN0ZXJzW2kgKyBtYXRjaExlbmd0aF07Ci0gICAgICAgIHNlYXJjaEhhc2ggLT0gc2VhcmNoQ2hh
cmFjdGVyc1tpXTsKLSAgICAgICAgKytpOwotICAgIH0KLSAgICByZXR1cm4gaW5kZXggKyBpOwot
fQotCi1zaXplX3QgU3RyaW5nSW1wbDo6ZmluZElnbm9yaW5nQ2FzZShjb25zdCBMQ2hhciogbWF0
Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQotewotICAgIC8vIENoZWNrIGZvciBudWxsIG9yIGVt
cHR5IHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0Ci0gICAgaWYgKCFtYXRjaFN0cmluZykKLSAgICAg
ICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIHNpemVfdCBtYXRjaFN0cmluZ0xlbmd0aCA9IHN0cmxl
bihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtYXRjaFN0cmluZykpOwotICAgIGlmICht
YXRjaFN0cmluZ0xlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkK
LSAgICAgICAgQ1JBU0goKTsKLSAgICB1bnNpZ25lZCBtYXRjaExlbmd0aCA9IG1hdGNoU3RyaW5n
TGVuZ3RoOwotICAgIGlmICghbWF0Y2hMZW5ndGgpCi0gICAgICAgIHJldHVybiBzdGQ6Om1pbihp
bmRleCwgbGVuZ3RoKCkpOwotCi0gICAgLy8gQ2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUg
aW4gcmFuZ2UuCi0gICAgaWYgKGluZGV4ID4gbGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBub3RG
b3VuZDsKLSAgICB1bnNpZ25lZCBzZWFyY2hMZW5ndGggPSBsZW5ndGgoKSAtIGluZGV4OwotICAg
IGlmIChtYXRjaExlbmd0aCA+IHNlYXJjaExlbmd0aCkKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5k
OwotICAgIC8vIGRlbHRhIGlzIHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCB0aW1lcyB0byB0ZXN0
OyBkZWx0YSA9PSAwIG1lYW5zIHRlc3Qgb25seSBvbmNlLgotICAgIHVuc2lnbmVkIGRlbHRhID0g
c2VhcmNoTGVuZ3RoIC0gbWF0Y2hMZW5ndGg7Ci0KLSAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAg
ICAgY29uc3QgTENoYXIqIHNlYXJjaENoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzOCgpICsgaW5kZXg7
Ci0KLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIHdoaWxlICghZXF1YWxDb21wYXRp
YmlsaXR5Q2FzZWxlc3Moc2VhcmNoQ2hhcmFjdGVycyArIGksIG1hdGNoU3RyaW5nLCBtYXRjaExl
bmd0aCkpIHsKLSAgICAgICAgICAgIGlmIChpID09IGRlbHRhKQotICAgICAgICAgICAgICAgIHJl
dHVybiBub3RGb3VuZDsKLSAgICAgICAgICAgICsraTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gaW5kZXggKyBpOwotICAgIH0KLQotICAgIGNvbnN0IFVDaGFyKiBzZWFyY2hDaGFyYWN0ZXJz
ID0gY2hhcmFjdGVyczE2KCkgKyBpbmRleDsKLQotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIHdo
aWxlICghZXF1YWxDb21wYXRpYmlsaXR5Q2FzZWxlc3Moc2VhcmNoQ2hhcmFjdGVycyArIGksIG1h
dGNoU3RyaW5nLCBtYXRjaExlbmd0aCkpIHsKLSAgICAgICAgaWYgKGkgPT0gZGVsdGEpCi0gICAg
ICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgICAgICsraTsKLSAgICB9Ci0gICAgcmV0dXJu
IGluZGV4ICsgaTsKLX0KLQotc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoU3RyaW5nSW1wbCogbWF0
Y2hTdHJpbmcpCi17Ci0gICAgLy8gQ2hlY2sgZm9yIG51bGwgc3RyaW5nIHRvIG1hdGNoIGFnYWlu
c3QKLSAgICBpZiAoVU5MSUtFTFkoIW1hdGNoU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIG5vdEZv
dW5kOwotICAgIHVuc2lnbmVkIG1hdGNoTGVuZ3RoID0gbWF0Y2hTdHJpbmctPmxlbmd0aCgpOwot
Ci0gICAgLy8gT3B0aW1pemF0aW9uIDE6IGZhc3QgY2FzZSBmb3Igc3RyaW5ncyBvZiBsZW5ndGgg
MS4KLSAgICBpZiAobWF0Y2hMZW5ndGggPT0gMSkgewotICAgICAgICBpZiAoaXM4Qml0KCkpIHsK
LSAgICAgICAgICAgIGlmIChtYXRjaFN0cmluZy0+aXM4Qml0KCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSwgbWF0Y2hTdHJpbmctPmNo
YXJhY3RlcnM4KClbMF0pOwotICAgICAgICAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJz
OCgpLCBsZW5ndGgoKSwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMxNigpWzBdKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAobWF0Y2hTdHJpbmctPmlzOEJpdCgpKQotICAgICAgICAgICAgcmV0dXJu
IFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCksIG1hdGNoU3RyaW5nLT5jaGFyYWN0
ZXJzOCgpWzBdKTsKLSAgICAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbGVu
Z3RoKCksIG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzMTYoKVswXSk7Ci0gICAgfQotCi0gICAgLy8g
Q2hlY2sgbWF0Y2hMZW5ndGggaXMgaW4gcmFuZ2UuCi0gICAgaWYgKG1hdGNoTGVuZ3RoID4gbGVu
Z3RoKCkpCi0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLQotICAgIC8vIENoZWNrIGZvciBlbXB0
eSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdAotICAgIGlmIChVTkxJS0VMWSghbWF0Y2hMZW5ndGgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChpczhCaXQoKSkgewotICAgICAgICBpZiAo
bWF0Y2hTdHJpbmctPmlzOEJpdCgpKQotICAgICAgICAgICAgcmV0dXJuIGZpbmRJbm5lcihjaGFy
YWN0ZXJzOCgpLCBtYXRjaFN0cmluZy0+Y2hhcmFjdGVyczgoKSwgMCwgbGVuZ3RoKCksIG1hdGNo
TGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIGZpbmRJbm5lcihjaGFyYWN0ZXJzOCgpLCBtYXRjaFN0
cmluZy0+Y2hhcmFjdGVyczE2KCksIDAsIGxlbmd0aCgpLCBtYXRjaExlbmd0aCk7Ci0gICAgfQot
Ci0gICAgaWYgKG1hdGNoU3RyaW5nLT5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGZpbmRJbm5l
cihjaGFyYWN0ZXJzMTYoKSwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnM4KCksIDAsIGxlbmd0aCgp
LCBtYXRjaExlbmd0aCk7Ci0KLSAgICByZXR1cm4gZmluZElubmVyKGNoYXJhY3RlcnMxNigpLCBt
YXRjaFN0cmluZy0+Y2hhcmFjdGVyczE2KCksIDAsIGxlbmd0aCgpLCBtYXRjaExlbmd0aCk7Ci19
Ci0KLXNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKFN0cmluZ0ltcGwqIG1hdGNoU3RyaW5nLCB1bnNp
Z25lZCBpbmRleCkKLXsKLSAgICAvLyBDaGVjayBmb3IgbnVsbCBvciBlbXB0eSBzdHJpbmcgdG8g
bWF0Y2ggYWdhaW5zdAotICAgIGlmIChVTkxJS0VMWSghbWF0Y2hTdHJpbmcpKQotICAgICAgICBy
ZXR1cm4gbm90Rm91bmQ7Ci0KLSAgICByZXR1cm4gZmluZENvbW1vbigqdGhpcywgKm1hdGNoU3Ry
aW5nLCBpbmRleCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBTZWFyY2hDaGFyYWN0ZXJUeXBl
LCB0eXBlbmFtZSBNYXRjaENoYXJhY3RlclR5cGU+Ci1BTFdBWVNfSU5MSU5FIHN0YXRpYyBzaXpl
X3QgZmluZElnbm9yaW5nQ2FzZUlubmVyKGNvbnN0IFNlYXJjaENoYXJhY3RlclR5cGUqIHNlYXJj
aENoYXJhY3RlcnMsIGNvbnN0IE1hdGNoQ2hhcmFjdGVyVHlwZSogbWF0Y2hDaGFyYWN0ZXJzLCB1
bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgc2VhcmNoTGVuZ3RoLCB1bnNpZ25lZCBtYXRjaExlbmd0
aCkKLXsKLSAgICAvLyBkZWx0YSBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgdGltZXMgdG8g
dGVzdDsgZGVsdGEgPT0gMCBtZWFucyB0ZXN0IG9ubHkgb25jZS4KLSAgICB1bnNpZ25lZCBkZWx0
YSA9IHNlYXJjaExlbmd0aCAtIG1hdGNoTGVuZ3RoOwotCi0gICAgdW5zaWduZWQgaSA9IDA7Ci0g
ICAgLy8ga2VlcCBsb29waW5nIHVudGlsIHdlIG1hdGNoCi0gICAgd2hpbGUgKCFlcXVhbENvbXBh
dGliaWxpdHlDYXNlbGVzcyhzZWFyY2hDaGFyYWN0ZXJzICsgaSwgbWF0Y2hDaGFyYWN0ZXJzLCBt
YXRjaExlbmd0aCkpIHsKLSAgICAgICAgaWYgKGkgPT0gZGVsdGEpCi0gICAgICAgICAgICByZXR1
cm4gbm90Rm91bmQ7Ci0gICAgICAgICsraTsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4ICsgaTsK
LX0KLQotc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmRJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCogbWF0
Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQotewotICAgIC8vIENoZWNrIGZvciBudWxsIG9yIGVt
cHR5IHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0Ci0gICAgaWYgKCFtYXRjaFN0cmluZykKLSAgICAg
ICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIHVuc2lnbmVkIG1hdGNoTGVuZ3RoID0gbWF0Y2hTdHJp
bmctPmxlbmd0aCgpOwotICAgIGlmICghbWF0Y2hMZW5ndGgpCi0gICAgICAgIHJldHVybiBzdGQ6
Om1pbihpbmRleCwgbGVuZ3RoKCkpOwotCi0gICAgLy8gQ2hlY2sgaW5kZXggJiBtYXRjaExlbmd0
aCBhcmUgaW4gcmFuZ2UuCi0gICAgaWYgKGluZGV4ID4gbGVuZ3RoKCkpCi0gICAgICAgIHJldHVy
biBub3RGb3VuZDsKLSAgICB1bnNpZ25lZCBzZWFyY2hMZW5ndGggPSBsZW5ndGgoKSAtIGluZGV4
OwotICAgIGlmIChtYXRjaExlbmd0aCA+IHNlYXJjaExlbmd0aCkKLSAgICAgICAgcmV0dXJuIG5v
dEZvdW5kOwotCi0gICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgIGlmIChtYXRjaFN0cmluZy0+
aXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmluZElnbm9yaW5nQ2FzZUlubmVyKGNoYXJh
Y3RlcnM4KCkgKyBpbmRleCwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnM4KCksIGluZGV4LCBzZWFy
Y2hMZW5ndGgsIG1hdGNoTGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIGZpbmRJZ25vcmluZ0Nhc2VJ
bm5lcihjaGFyYWN0ZXJzOCgpICsgaW5kZXgsIG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzMTYoKSwg
aW5kZXgsIHNlYXJjaExlbmd0aCwgbWF0Y2hMZW5ndGgpOwotICAgIH0KLQotICAgIGlmIChtYXRj
aFN0cmluZy0+aXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBmaW5kSWdub3JpbmdDYXNlSW5uZXIo
Y2hhcmFjdGVyczE2KCkgKyBpbmRleCwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnM4KCksIGluZGV4
LCBzZWFyY2hMZW5ndGgsIG1hdGNoTGVuZ3RoKTsKLQotICAgIHJldHVybiBmaW5kSWdub3JpbmdD
YXNlSW5uZXIoY2hhcmFjdGVyczE2KCkgKyBpbmRleCwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMx
NigpLCBpbmRleCwgc2VhcmNoTGVuZ3RoLCBtYXRjaExlbmd0aCk7Ci19Ci0KLXNpemVfdCBTdHJp
bmdJbXBsOjpmaW5kSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCYgbWF0Y2hTdHJp
bmcpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDo6V1RGOjpmaW5kSWdub3JpbmdBU0NJSUNhc2UoKnRo
aXMsIG1hdGNoU3RyaW5nLCAwKTsKLX0KLQotc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmRJZ25vcmlu
Z0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdJbXBsJiBtYXRjaFN0cmluZywgdW5zaWduZWQgc3RhcnRP
ZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDo6V1RGOjpmaW5kSWdub3JpbmdBU0NJSUNhc2Uo
KnRoaXMsIG1hdGNoU3RyaW5nLCBzdGFydE9mZnNldCk7Ci19Ci0KLXNpemVfdCBTdHJpbmdJbXBs
OjpmaW5kSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtYXRjaFN0cmluZykKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwot
ICAgIHJldHVybiA6OldURjo6ZmluZElnbm9yaW5nQVNDSUlDYXNlKCp0aGlzLCAqbWF0Y2hTdHJp
bmcsIDApOwotfQotCi1zaXplX3QgU3RyaW5nSW1wbDo6ZmluZElnbm9yaW5nQVNDSUlDYXNlKGNv
bnN0IFN0cmluZ0ltcGwqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3QK
LXsKLSAgICBpZiAoIW1hdGNoU3RyaW5nKQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAg
cmV0dXJuIDo6V1RGOjpmaW5kSWdub3JpbmdBU0NJSUNhc2UoKnRoaXMsICptYXRjaFN0cmluZywg
c3RhcnRPZmZzZXQpOwotfQotCi1zaXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoVUNoYXIg
YywgdW5zaWduZWQgaW5kZXgpCi17Ci0gICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1cm4g
V1RGOjpyZXZlcnNlRmluZChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgYywgaW5kZXgpOwotICAg
IHJldHVybiBXVEY6OnJldmVyc2VGaW5kKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgYywgaW5k
ZXgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgU2VhcmNoQ2hhcmFjdGVyVHlwZSwgdHlwZW5h
bWUgTWF0Y2hDaGFyYWN0ZXJUeXBlPgotQUxXQVlTX0lOTElORSBzdGF0aWMgc2l6ZV90IHJldmVy
c2VGaW5kSW5uZXIoY29uc3QgU2VhcmNoQ2hhcmFjdGVyVHlwZSogc2VhcmNoQ2hhcmFjdGVycywg
Y29uc3QgTWF0Y2hDaGFyYWN0ZXJUeXBlKiBtYXRjaENoYXJhY3RlcnMsIHVuc2lnbmVkIGluZGV4
LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG1hdGNoTGVuZ3RoKQotewotICAgIC8vIE9wdGlt
aXphdGlvbjoga2VlcCBhIHJ1bm5pbmcgaGFzaCBvZiB0aGUgc3RyaW5ncywKLSAgICAvLyBvbmx5
IGNhbGwgZXF1YWwgaWYgdGhlIGhhc2hlcyBtYXRjaC4KLQotICAgIC8vIGRlbHRhIGlzIHRoZSBu
dW1iZXIgb2YgYWRkaXRpb25hbCB0aW1lcyB0byB0ZXN0OyBkZWx0YSA9PSAwIG1lYW5zIHRlc3Qg
b25seSBvbmNlLgotICAgIHVuc2lnbmVkIGRlbHRhID0gc3RkOjptaW4oaW5kZXgsIGxlbmd0aCAt
IG1hdGNoTGVuZ3RoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBzZWFyY2hIYXNoID0gMDsKLSAgICB1
bnNpZ25lZCBtYXRjaEhhc2ggPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRj
aExlbmd0aDsgKytpKSB7Ci0gICAgICAgIHNlYXJjaEhhc2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tk
ZWx0YSArIGldOwotICAgICAgICBtYXRjaEhhc2ggKz0gbWF0Y2hDaGFyYWN0ZXJzW2ldOwotICAg
IH0KLQotICAgIC8vIGtlZXAgbG9vcGluZyB1bnRpbCB3ZSBtYXRjaAotICAgIHdoaWxlIChzZWFy
Y2hIYXNoICE9IG1hdGNoSGFzaCB8fCAhZXF1YWwoc2VhcmNoQ2hhcmFjdGVycyArIGRlbHRhLCBt
YXRjaENoYXJhY3RlcnMsIG1hdGNoTGVuZ3RoKSkgewotICAgICAgICBpZiAoIWRlbHRhKQotICAg
ICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgICAgICAtLWRlbHRhOwotICAgICAgICBzZWFy
Y2hIYXNoIC09IHNlYXJjaENoYXJhY3RlcnNbZGVsdGEgKyBtYXRjaExlbmd0aF07Ci0gICAgICAg
IHNlYXJjaEhhc2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tkZWx0YV07Ci0gICAgfQotICAgIHJldHVy
biBkZWx0YTsKLX0KLQotc2l6ZV90IFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKFN0cmluZ0ltcGwq
IG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBpbmRleCkKLXsKLSAgICAvLyBDaGVjayBmb3IgbnVsbCBv
ciBlbXB0eSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdAotICAgIGlmICghbWF0Y2hTdHJpbmcpCi0g
ICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICB1bnNpZ25lZCBtYXRjaExlbmd0aCA9IG1hdGNo
U3RyaW5nLT5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBvdXJMZW5ndGggPSBsZW5ndGgoKTsKLSAg
ICBpZiAoIW1hdGNoTGVuZ3RoKQotICAgICAgICByZXR1cm4gc3RkOjptaW4oaW5kZXgsIG91ckxl
bmd0aCk7Ci0KLSAgICAvLyBPcHRpbWl6YXRpb24gMTogZmFzdCBjYXNlIGZvciBzdHJpbmdzIG9m
IGxlbmd0aCAxLgotICAgIGlmIChtYXRjaExlbmd0aCA9PSAxKSB7Ci0gICAgICAgIGlmIChpczhC
aXQoKSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6OnJldmVyc2VGaW5kKGNoYXJhY3RlcnM4KCks
IG91ckxlbmd0aCwgKCptYXRjaFN0cmluZylbMF0sIGluZGV4KTsKLSAgICAgICAgcmV0dXJuIFdU
Rjo6cmV2ZXJzZUZpbmQoY2hhcmFjdGVyczE2KCksIG91ckxlbmd0aCwgKCptYXRjaFN0cmluZylb
MF0sIGluZGV4KTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpbmRleCAmIG1hdGNoTGVuZ3RoIGFy
ZSBpbiByYW5nZS4KLSAgICBpZiAobWF0Y2hMZW5ndGggPiBvdXJMZW5ndGgpCi0gICAgICAgIHJl
dHVybiBub3RGb3VuZDsKLQotICAgIGlmIChpczhCaXQoKSkgewotICAgICAgICBpZiAobWF0Y2hT
dHJpbmctPmlzOEJpdCgpKQotICAgICAgICAgICAgcmV0dXJuIHJldmVyc2VGaW5kSW5uZXIoY2hh
cmFjdGVyczgoKSwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnM4KCksIGluZGV4LCBvdXJMZW5ndGgs
IG1hdGNoTGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIHJldmVyc2VGaW5kSW5uZXIoY2hhcmFjdGVy
czgoKSwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMxNigpLCBpbmRleCwgb3VyTGVuZ3RoLCBtYXRj
aExlbmd0aCk7Ci0gICAgfQotICAgIAotICAgIGlmIChtYXRjaFN0cmluZy0+aXM4Qml0KCkpCi0g
ICAgICAgIHJldHVybiByZXZlcnNlRmluZElubmVyKGNoYXJhY3RlcnMxNigpLCBtYXRjaFN0cmlu
Zy0+Y2hhcmFjdGVyczgoKSwgaW5kZXgsIG91ckxlbmd0aCwgbWF0Y2hMZW5ndGgpOwotCi0gICAg
cmV0dXJuIHJldmVyc2VGaW5kSW5uZXIoY2hhcmFjdGVyczE2KCksIG1hdGNoU3RyaW5nLT5jaGFy
YWN0ZXJzMTYoKSwgaW5kZXgsIG91ckxlbmd0aCwgbWF0Y2hMZW5ndGgpOwotfQotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgU2VhcmNoQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgTWF0Y2hDaGFyYWN0ZXJU
eXBlPgotQUxXQVlTX0lOTElORSBzdGF0aWMgc2l6ZV90IHJldmVyc2VGaW5kSWdub3JpbmdDYXNl
SW5uZXIoY29uc3QgU2VhcmNoQ2hhcmFjdGVyVHlwZSogc2VhcmNoQ2hhcmFjdGVycywgY29uc3Qg
TWF0Y2hDaGFyYWN0ZXJUeXBlKiBtYXRjaENoYXJhY3RlcnMsIHVuc2lnbmVkIGluZGV4LCB1bnNp
Z25lZCBsZW5ndGgsIHVuc2lnbmVkIG1hdGNoTGVuZ3RoKQotewotICAgIC8vIGRlbHRhIGlzIHRo
ZSBudW1iZXIgb2YgYWRkaXRpb25hbCB0aW1lcyB0byB0ZXN0OyBkZWx0YSA9PSAwIG1lYW5zIHRl
c3Qgb25seSBvbmNlLgotICAgIHVuc2lnbmVkIGRlbHRhID0gc3RkOjptaW4oaW5kZXgsIGxlbmd0
aCAtIG1hdGNoTGVuZ3RoKTsKLQotICAgIC8vIGtlZXAgbG9vcGluZyB1bnRpbCB3ZSBtYXRjaAot
ICAgIHdoaWxlICghZXF1YWxDb21wYXRpYmlsaXR5Q2FzZWxlc3Moc2VhcmNoQ2hhcmFjdGVycyAr
IGRlbHRhLCBtYXRjaENoYXJhY3RlcnMsIG1hdGNoTGVuZ3RoKSkgewotICAgICAgICBpZiAoIWRl
bHRhKQotICAgICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgICAgICAtLWRlbHRhOwotICAg
IH0KLSAgICByZXR1cm4gZGVsdGE7Ci19Ci0KLXNpemVfdCBTdHJpbmdJbXBsOjpyZXZlcnNlRmlu
ZElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiBtYXRjaFN0cmluZywgdW5zaWduZWQgaW5kZXgpCi17
Ci0gICAgLy8gQ2hlY2sgZm9yIG51bGwgb3IgZW1wdHkgc3RyaW5nIHRvIG1hdGNoIGFnYWluc3QK
LSAgICBpZiAoIW1hdGNoU3RyaW5nKQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgdW5z
aWduZWQgbWF0Y2hMZW5ndGggPSBtYXRjaFN0cmluZy0+bGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQg
b3VyTGVuZ3RoID0gbGVuZ3RoKCk7Ci0gICAgaWYgKCFtYXRjaExlbmd0aCkKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bWluKGluZGV4LCBvdXJMZW5ndGgpOwotCi0gICAgLy8gQ2hlY2sgaW5kZXggJiBt
YXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCi0gICAgaWYgKG1hdGNoTGVuZ3RoID4gb3VyTGVuZ3Ro
KQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0KLSAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAg
ICAgaWYgKG1hdGNoU3RyaW5nLT5pczhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiByZXZlcnNl
RmluZElnbm9yaW5nQ2FzZUlubmVyKGNoYXJhY3RlcnM4KCksIG1hdGNoU3RyaW5nLT5jaGFyYWN0
ZXJzOCgpLCBpbmRleCwgb3VyTGVuZ3RoLCBtYXRjaExlbmd0aCk7Ci0gICAgICAgIHJldHVybiBy
ZXZlcnNlRmluZElnbm9yaW5nQ2FzZUlubmVyKGNoYXJhY3RlcnM4KCksIG1hdGNoU3RyaW5nLT5j
aGFyYWN0ZXJzMTYoKSwgaW5kZXgsIG91ckxlbmd0aCwgbWF0Y2hMZW5ndGgpOwotICAgIH0KLQot
ICAgIGlmIChtYXRjaFN0cmluZy0+aXM4Qml0KCkpCi0gICAgICAgIHJldHVybiByZXZlcnNlRmlu
ZElnbm9yaW5nQ2FzZUlubmVyKGNoYXJhY3RlcnMxNigpLCBtYXRjaFN0cmluZy0+Y2hhcmFjdGVy
czgoKSwgaW5kZXgsIG91ckxlbmd0aCwgbWF0Y2hMZW5ndGgpOwotCi0gICAgcmV0dXJuIHJldmVy
c2VGaW5kSWdub3JpbmdDYXNlSW5uZXIoY2hhcmFjdGVyczE2KCksIG1hdGNoU3RyaW5nLT5jaGFy
YWN0ZXJzMTYoKSwgaW5kZXgsIG91ckxlbmd0aCwgbWF0Y2hMZW5ndGgpOwotfQotCi1BTFdBWVNf
SU5MSU5FIHN0YXRpYyBib29sIGVxdWFsSW5uZXIoY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nSW1w
bCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGNvbnN0IGNoYXIqIG1hdGNoU3RyaW5nLCB1bnNpZ25l
ZCBtYXRjaExlbmd0aCwgYm9vbCBjYXNlU2Vuc2l0aXZlKQotewotICAgIEFTU0VSVChzdHJpbmdJ
bXBsKTsKLSAgICBBU1NFUlQobWF0Y2hMZW5ndGggPD0gc3RyaW5nSW1wbC0+bGVuZ3RoKCkpOwot
ICAgIEFTU0VSVChzdGFydE9mZnNldCArIG1hdGNoTGVuZ3RoIDw9IHN0cmluZ0ltcGwtPmxlbmd0
aCgpKTsKLQotICAgIGlmIChjYXNlU2Vuc2l0aXZlKSB7Ci0gICAgICAgIGlmIChzdHJpbmdJbXBs
LT5pczhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiBlcXVhbChzdHJpbmdJbXBsLT5jaGFyYWN0
ZXJzOCgpICsgc3RhcnRPZmZzZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihtYXRj
aFN0cmluZyksIG1hdGNoTGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIGVxdWFsKHN0cmluZ0ltcGwt
PmNoYXJhY3RlcnMxNigpICsgc3RhcnRPZmZzZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihtYXRjaFN0cmluZyksIG1hdGNoTGVuZ3RoKTsKLSAgICB9Ci0gICAgaWYgKHN0cmluZ0lt
cGwtPmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gZXF1YWxDb21wYXRpYmlsaXR5Q2FzZWxlc3Mo
c3RyaW5nSW1wbC0+Y2hhcmFjdGVyczgoKSArIHN0YXJ0T2Zmc2V0LCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4obWF0Y2hTdHJpbmcpLCBtYXRjaExlbmd0aCk7Ci0gICAgcmV0dXJuIGVx
dWFsQ29tcGF0aWJpbGl0eUNhc2VsZXNzKHN0cmluZ0ltcGwtPmNoYXJhY3RlcnMxNigpICsgc3Rh
cnRPZmZzZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihtYXRjaFN0cmluZyksIG1h
dGNoTGVuZ3RoKTsKLX0KLQotQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBlcXVhbElubmVyKGNv
bnN0IFN0cmluZ0ltcGwmIHN0cmluZ0ltcGwsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBjb25zdCBT
dHJpbmdJbXBsJiBtYXRjaFN0cmluZykKLXsKLSAgICBpZiAoc3RhcnRPZmZzZXQgPiBzdHJpbmdJ
bXBsLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1hdGNoU3RyaW5n
Lmxlbmd0aCgpID4gc3RyaW5nSW1wbC5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChtYXRjaFN0cmluZy5sZW5ndGgoKSArIHN0YXJ0T2Zmc2V0ID4gc3RyaW5nSW1wbC5s
ZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0cmluZ0ltcGwuaXM4
Qml0KCkpIHsKLSAgICAgICAgaWYgKG1hdGNoU3RyaW5nLmlzOEJpdCgpKQotICAgICAgICAgICAg
cmV0dXJuIGVxdWFsKHN0cmluZ0ltcGwuY2hhcmFjdGVyczgoKSArIHN0YXJ0T2Zmc2V0LCBtYXRj
aFN0cmluZy5jaGFyYWN0ZXJzOCgpLCBtYXRjaFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgIHJl
dHVybiBlcXVhbChzdHJpbmdJbXBsLmNoYXJhY3RlcnM4KCkgKyBzdGFydE9mZnNldCwgbWF0Y2hT
dHJpbmcuY2hhcmFjdGVyczE2KCksIG1hdGNoU3RyaW5nLmxlbmd0aCgpKTsKLSAgICB9Ci0gICAg
aWYgKG1hdGNoU3RyaW5nLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gZXF1YWwoc3RyaW5nSW1w
bC5jaGFyYWN0ZXJzMTYoKSArIHN0YXJ0T2Zmc2V0LCBtYXRjaFN0cmluZy5jaGFyYWN0ZXJzOCgp
LCBtYXRjaFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIGVxdWFsKHN0cmluZ0ltcGwuY2hh
cmFjdGVyczE2KCkgKyBzdGFydE9mZnNldCwgbWF0Y2hTdHJpbmcuY2hhcmFjdGVyczE2KCksIG1h
dGNoU3RyaW5nLmxlbmd0aCgpKTsKLX0KLQotYm9vbCBTdHJpbmdJbXBsOjpzdGFydHNXaXRoKGNv
bnN0IFN0cmluZ0ltcGwqIHN0cikgY29uc3QKLXsKLSAgICBpZiAoIXN0cikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiA6OldURjo6c3RhcnRzV2l0aCgqdGhpcywgKnN0cik7Ci19
Ci0KLWJvb2wgU3RyaW5nSW1wbDo6c3RhcnRzV2l0aChjb25zdCBTdHJpbmdJbXBsJiBzdHIpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIDo6V1RGOjpzdGFydHNXaXRoKCp0aGlzLCBzdHIpOwotfQotCi1i
b29sIFN0cmluZ0ltcGw6OnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdJ
bXBsKiBwcmVmaXgpIGNvbnN0Ci17Ci0gICAgaWYgKCFwcmVmaXgpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiA6OldURjo6c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCp0
aGlzLCAqcHJlZml4KTsKLX0KLQotYm9vbCBTdHJpbmdJbXBsOjpzdGFydHNXaXRoSWdub3JpbmdB
U0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCYgcHJlZml4KSBjb25zdAotewotICAgIHJldHVybiA6
OldURjo6c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCp0aGlzLCBwcmVmaXgpOwotfQotCi1i
b29sIFN0cmluZ0ltcGw6OnN0YXJ0c1dpdGgoVUNoYXIgY2hhcmFjdGVyKSBjb25zdAotewotICAg
IHJldHVybiBtX2xlbmd0aCAmJiAoKnRoaXMpWzBdID09IGNoYXJhY3RlcjsKLX0KLQotYm9vbCBT
dHJpbmdJbXBsOjpzdGFydHNXaXRoKGNvbnN0IGNoYXIqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBt
YXRjaExlbmd0aCwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAotewotICAgIEFTU0VSVChtYXRj
aExlbmd0aCk7Ci0gICAgaWYgKG1hdGNoTGVuZ3RoID4gbGVuZ3RoKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gZXF1YWxJbm5lcih0aGlzLCAwLCBtYXRjaFN0cmluZywgbWF0
Y2hMZW5ndGgsIGNhc2VTZW5zaXRpdmUpOwotfQotCi1ib29sIFN0cmluZ0ltcGw6Omhhc0luZml4
U3RhcnRpbmdBdChjb25zdCBTdHJpbmdJbXBsJiBtYXRjaFN0cmluZywgdW5zaWduZWQgc3RhcnRP
ZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVxdWFsSW5uZXIoKnRoaXMsIHN0YXJ0T2Zmc2V0
LCBtYXRjaFN0cmluZyk7Ci19Ci0KLWJvb2wgU3RyaW5nSW1wbDo6ZW5kc1dpdGgoU3RyaW5nSW1w
bCogc3VmZml4KQotewotICAgIGlmICghc3VmZml4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gOjpXVEY6OmVuZHNXaXRoKCp0aGlzLCAqc3VmZml4KTsKLX0KLQotYm9vbCBT
dHJpbmdJbXBsOjplbmRzV2l0aChTdHJpbmdJbXBsJiBzdWZmaXgpCi17Ci0gICAgcmV0dXJuIDo6
V1RGOjplbmRzV2l0aCgqdGhpcywgc3VmZml4KTsKLX0KLQotYm9vbCBTdHJpbmdJbXBsOjplbmRz
V2l0aChTdHJpbmdJbXBsKiBtYXRjaFN0cmluZywgYm9vbCBjYXNlU2Vuc2l0aXZlKQotewotICAg
IEFTU0VSVChtYXRjaFN0cmluZyk7Ci0gICAgaWYgKG1fbGVuZ3RoID49IG1hdGNoU3RyaW5nLT5t
X2xlbmd0aCkgewotICAgICAgICB1bnNpZ25lZCBzdGFydCA9IG1fbGVuZ3RoIC0gbWF0Y2hTdHJp
bmctPm1fbGVuZ3RoOwotICAgICAgICByZXR1cm4gKGNhc2VTZW5zaXRpdmUgPyBmaW5kKG1hdGNo
U3RyaW5nLCBzdGFydCkgOiBmaW5kSWdub3JpbmdDYXNlKG1hdGNoU3RyaW5nLCBzdGFydCkpID09
IHN0YXJ0OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU3RyaW5nSW1wbDo6
ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdJbXBsKiBzdWZmaXgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFzdWZmaXgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biA6OldURjo6ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgqdGhpcywgKnN1ZmZpeCk7Ci19Ci0K
LWJvb2wgU3RyaW5nSW1wbDo6ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdJ
bXBsJiBzdWZmaXgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDo6V1RGOjplbmRzV2l0aElnbm9yaW5n
QVNDSUlDYXNlKCp0aGlzLCBzdWZmaXgpOwotfQotCi1ib29sIFN0cmluZ0ltcGw6OmVuZHNXaXRo
KFVDaGFyIGNoYXJhY3RlcikgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sZW5ndGggJiYgKCp0aGlz
KVttX2xlbmd0aCAtIDFdID09IGNoYXJhY3RlcjsKLX0KLQotYm9vbCBTdHJpbmdJbXBsOjplbmRz
V2l0aChjb25zdCBjaGFyKiBtYXRjaFN0cmluZywgdW5zaWduZWQgbWF0Y2hMZW5ndGgsIGJvb2wg
Y2FzZVNlbnNpdGl2ZSkgY29uc3QKLXsKLSAgICBBU1NFUlQobWF0Y2hMZW5ndGgpOwotICAgIGlm
IChtYXRjaExlbmd0aCA+IGxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5z
aWduZWQgc3RhcnRPZmZzZXQgPSBsZW5ndGgoKSAtIG1hdGNoTGVuZ3RoOwotICAgIHJldHVybiBl
cXVhbElubmVyKHRoaXMsIHN0YXJ0T2Zmc2V0LCBtYXRjaFN0cmluZywgbWF0Y2hMZW5ndGgsIGNh
c2VTZW5zaXRpdmUpOwotfQotCi1ib29sIFN0cmluZ0ltcGw6Omhhc0luZml4RW5kaW5nQXQoY29u
c3QgU3RyaW5nSW1wbCYgbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGVuZE9mZnNldCkgY29uc3QKLXsK
LSAgICBpZiAoZW5kT2Zmc2V0IDwgbWF0Y2hTdHJpbmcubGVuZ3RoKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gZXF1YWxJbm5lcigqdGhpcywgZW5kT2Zmc2V0IC0gbWF0Y2hT
dHJpbmcubGVuZ3RoKCksIG1hdGNoU3RyaW5nKTsKLX0KLQotUmVmPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OnJlcGxhY2UoVUNoYXIgb2xkQywgVUNoYXIgbmV3QykKLXsKLSAgICBpZiAob2xkQyA9
PSBuZXdDKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgdW5zaWduZWQgaTsKLSAgICBmb3Ig
KGkgPSAwOyBpICE9IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IGlzOEJpdCgp
ID8gbV9kYXRhOFtpXSA6IG1fZGF0YTE2W2ldOwotICAgICAgICBpZiAoYyA9PSBvbGRDKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChpID09IG1fbGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0KLSAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgaWYgKG9sZEMgPiAw
eGZmKQotICAgICAgICAgICAgLy8gTG9va2luZyBmb3IgYSAxNiBiaXQgY2hhciBpbiBhbiA4IGJp
dCBzdHJpbmcsIHdlJ3JlIGRvbmUuCi0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICAg
ICAgaWYgKG5ld0MgPD0gMHhmZikgewotICAgICAgICAgICAgTENoYXIqIGRhdGE7Ci0gICAgICAg
ICAgICBMQ2hhciBvbGRDaGFyID0gc3RhdGljX2Nhc3Q8TENoYXI+KG9sZEMpOwotICAgICAgICAg
ICAgTENoYXIgbmV3Q2hhciA9IHN0YXRpY19jYXN0PExDaGFyPihuZXdDKTsKLQotICAgICAgICAg
ICAgYXV0byBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkobV9s
ZW5ndGgsIGRhdGEpOwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpICE9IG1fbGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICBMQ2hhciBjaCA9IG1fZGF0YThbaV07Ci0gICAgICAgICAg
ICAgICAgaWYgKGNoID09IG9sZENoYXIpCi0gICAgICAgICAgICAgICAgICAgIGNoID0gbmV3Q2hh
cjsKLSAgICAgICAgICAgICAgICBkYXRhW2ldID0gY2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3SW1wbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZXJlIGlzIHRo
ZSBwb3NzaWJpbGl0eSB3ZSBuZWVkIHRvIHVwIGNvbnZlcnQgZnJvbSA4IHRvIDE2IGJpdCwKLSAg
ICAgICAgLy8gY3JlYXRlIGEgMTYgYml0IHN0cmluZyBmb3IgdGhlIHJlc3VsdC4KLSAgICAgICAg
VUNoYXIqIGRhdGE7Ci0gICAgICAgIGF1dG8gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJ
bnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhKTsKLQotICAgICAgICBmb3IgKGkgPSAwOyBp
ICE9IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIFVDaGFyIGNoID0gbV9kYXRhOFtpXTsK
LSAgICAgICAgICAgIGlmIChjaCA9PSBvbGRDKQotICAgICAgICAgICAgICAgIGNoID0gbmV3QzsK
LSAgICAgICAgICAgIGRhdGFbaV0gPSBjaDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBu
ZXdJbXBsOwotICAgIH0KLQotICAgIFVDaGFyKiBkYXRhOwotICAgIGF1dG8gbmV3SW1wbCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhKTsKLQotICAg
IGZvciAoaSA9IDA7IGkgIT0gbV9sZW5ndGg7ICsraSkgewotICAgICAgICBVQ2hhciBjaCA9IG1f
ZGF0YTE2W2ldOwotICAgICAgICBpZiAoY2ggPT0gb2xkQykKLSAgICAgICAgICAgIGNoID0gbmV3
QzsKLSAgICAgICAgZGF0YVtpXSA9IGNoOwotICAgIH0KLSAgICByZXR1cm4gbmV3SW1wbDsKLX0K
LQotUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UodW5zaWduZWQgcG9zaXRpb24s
IHVuc2lnbmVkIGxlbmd0aFRvUmVwbGFjZSwgU3RyaW5nSW1wbCogc3RyKQotewotICAgIHBvc2l0
aW9uID0gc3RkOjptaW4ocG9zaXRpb24sIGxlbmd0aCgpKTsKLSAgICBsZW5ndGhUb1JlcGxhY2Ug
PSBzdGQ6Om1pbihsZW5ndGhUb1JlcGxhY2UsIGxlbmd0aCgpIC0gcG9zaXRpb24pOwotICAgIHVu
c2lnbmVkIGxlbmd0aFRvSW5zZXJ0ID0gc3RyID8gc3RyLT5sZW5ndGgoKSA6IDA7Ci0gICAgaWYg
KCFsZW5ndGhUb1JlcGxhY2UgJiYgIWxlbmd0aFRvSW5zZXJ0KQotICAgICAgICByZXR1cm4gKnRo
aXM7Ci0KLSAgICBpZiAoKGxlbmd0aCgpIC0gbGVuZ3RoVG9SZXBsYWNlKSA+PSAoc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gbGVuZ3RoVG9JbnNlcnQpKQotICAgICAgICBD
UkFTSCgpOwotCi0gICAgaWYgKGlzOEJpdCgpICYmICghc3RyIHx8IHN0ci0+aXM4Qml0KCkpKSB7
Ci0gICAgICAgIExDaGFyKiBkYXRhOwotICAgICAgICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCgpIC0gbGVuZ3RoVG9SZXBsYWNlICsgbGVuZ3RoVG9JbnNlcnQsIGRh
dGEpOwotICAgICAgICBtZW1jcHkoZGF0YSwgbV9kYXRhOCwgcG9zaXRpb24gKiBzaXplb2YoTENo
YXIpKTsKLSAgICAgICAgaWYgKHN0cikKLSAgICAgICAgICAgIG1lbWNweShkYXRhICsgcG9zaXRp
b24sIHN0ci0+bV9kYXRhOCwgbGVuZ3RoVG9JbnNlcnQgKiBzaXplb2YoTENoYXIpKTsKLSAgICAg
ICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0LCBtX2RhdGE4ICsgcG9z
aXRpb24gKyBsZW5ndGhUb1JlcGxhY2UsCi0gICAgICAgICAgICAgICAobGVuZ3RoKCkgLSBwb3Np
dGlvbiAtIGxlbmd0aFRvUmVwbGFjZSkgKiBzaXplb2YoTENoYXIpKTsKLSAgICAgICAgcmV0dXJu
IG5ld0ltcGw7Ci0gICAgfQotICAgIFVDaGFyKiBkYXRhOwotICAgIGF1dG8gbmV3SW1wbCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgLSBsZW5ndGhUb1JlcGxhY2UgKyBsZW5ndGhUb0lu
c2VydCwgZGF0YSk7Ci0gICAgaWYgKGlzOEJpdCgpKQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcG9zaXRpb247ICsraSkKLSAgICAgICAgICAgIGRhdGFbaV0gPSBtX2RhdGE4W2ld
OwotICAgIGVsc2UKLSAgICAgICAgbWVtY3B5KGRhdGEsIG1fZGF0YTE2LCBwb3NpdGlvbiAqIHNp
emVvZihVQ2hhcikpOwotICAgIGlmIChzdHIpIHsKLSAgICAgICAgaWYgKHN0ci0+aXM4Qml0KCkp
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoVG9JbnNlcnQ7ICsr
aSkKLSAgICAgICAgICAgICAgICBkYXRhW2kgKyBwb3NpdGlvbl0gPSBzdHItPm1fZGF0YThbaV07
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1lbWNweShkYXRhICsgcG9zaXRpb24sIHN0ci0+
bV9kYXRhMTYsIGxlbmd0aFRvSW5zZXJ0ICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgfQotICAgIGlm
IChpczhCaXQoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCkg
LSBwb3NpdGlvbiAtIGxlbmd0aFRvUmVwbGFjZTsgKytpKQotICAgICAgICAgICAgZGF0YVtpICsg
cG9zaXRpb24gKyBsZW5ndGhUb0luc2VydF0gPSBtX2RhdGE4W2kgKyBwb3NpdGlvbiArIGxlbmd0
aFRvUmVwbGFjZV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlv
biArIGxlbmd0aFRvSW5zZXJ0LCBjaGFyYWN0ZXJzMTYoKSArIHBvc2l0aW9uICsgbGVuZ3RoVG9S
ZXBsYWNlLAotICAgICAgICAgICAgKGxlbmd0aCgpIC0gcG9zaXRpb24gLSBsZW5ndGhUb1JlcGxh
Y2UpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgfQotICAgIHJldHVybiBuZXdJbXBsOwotfQotCi1S
ZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBTdHJpbmdJ
bXBsKiByZXBsYWNlbWVudCkKLXsKLSAgICBpZiAoIXJlcGxhY2VtZW50KQotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0KLSAgICBpZiAocmVwbGFjZW1lbnQtPmlzOEJpdCgpKQotICAgICAgICByZXR1
cm4gcmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudC0+bV9kYXRhOCwgcmVwbGFjZW1lbnQtPmxl
bmd0aCgpKTsKLQotICAgIHJldHVybiByZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50LT5tX2Rh
dGExNiwgcmVwbGFjZW1lbnQtPmxlbmd0aCgpKTsKLX0KLQotUmVmPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgTENoYXIqIHJlcGxhY2VtZW50LCB1
bnNpZ25lZCByZXBTdHJMZW5ndGgpCi17Ci0gICAgQVNTRVJUKHJlcGxhY2VtZW50KTsKLQotICAg
IHNpemVfdCBzcmNTZWdtZW50U3RhcnQgPSAwOwotICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAw
OwotCi0gICAgLy8gQ291bnQgdGhlIG1hdGNoZXMuCi0gICAgd2hpbGUgKChzcmNTZWdtZW50U3Rh
cnQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7Ci0gICAg
ICAgICsrbWF0Y2hDb3VudDsKLSAgICAgICAgKytzcmNTZWdtZW50U3RhcnQ7Ci0gICAgfQotCi0g
ICAgLy8gSWYgd2UgaGF2ZSAwIG1hdGNoZXMgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueSBt
b3JlIHdvcmsuCi0gICAgaWYgKCFtYXRjaENvdW50KQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0K
LSAgICBpZiAocmVwU3RyTGVuZ3RoICYmIG1hdGNoQ291bnQgPiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkgLyByZXBTdHJMZW5ndGgpCi0gICAgICAgIENSQVNIKCk7Ci0KLSAg
ICB1bnNpZ25lZCByZXBsYWNlU2l6ZSA9IG1hdGNoQ291bnQgKiByZXBTdHJMZW5ndGg7Ci0gICAg
dW5zaWduZWQgbmV3U2l6ZSA9IG1fbGVuZ3RoIC0gbWF0Y2hDb3VudDsKLSAgICBpZiAobmV3U2l6
ZSA+PSAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gcmVwbGFjZVNpemUp
KQotICAgICAgICBDUkFTSCgpOwotCi0gICAgbmV3U2l6ZSArPSByZXBsYWNlU2l6ZTsKLQotICAg
IC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEuCi0gICAgc2l6ZV90IHNyY1NlZ21lbnRFbmQ7Ci0g
ICAgdW5zaWduZWQgc3JjU2VnbWVudExlbmd0aDsKLSAgICBzcmNTZWdtZW50U3RhcnQgPSAwOwot
ICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9IDA7Ci0KLSAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAg
ICAgTENoYXIqIGRhdGE7Ci0gICAgICAgIGF1dG8gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6
ZWQobmV3U2l6ZSwgZGF0YSk7Ci0KLSAgICAgICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmlu
ZChwYXR0ZXJuLCBzcmNTZWdtZW50U3RhcnQpKSAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAg
c3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAg
ICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhOCArIHNyY1NlZ21lbnRTdGFy
dCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihMQ2hhcikpOwotICAgICAgICAgICAgZHN0T2Zm
c2V0ICs9IHNyY1NlZ21lbnRMZW5ndGg7Ci0gICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9m
ZnNldCwgcmVwbGFjZW1lbnQsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihMQ2hhcikpOwotICAgICAg
ICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKLSAgICAgICAgICAgIHNyY1NlZ21lbnRT
dGFydCA9IHNyY1NlZ21lbnRFbmQgKyAxOwotICAgICAgICB9Ci0KLSAgICAgICAgc3JjU2VnbWVu
dExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgICAgICBtZW1jcHkoZGF0
YSArIGRzdE9mZnNldCwgbV9kYXRhOCArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0
aCAqIHNpemVvZihMQ2hhcikpOwotCi0gICAgICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdt
ZW50TGVuZ3RoID09IG5ld0ltcGwuZ2V0KCkubGVuZ3RoKCkpOwotCi0gICAgICAgIHJldHVybiBu
ZXdJbXBsOwotICAgIH0KLQotICAgIFVDaGFyKiBkYXRhOwotICAgIGF1dG8gbmV3SW1wbCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7Ci0KLSAgICB3aGlsZSAoKHNyY1NlZ21l
bnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7Ci0g
ICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0
OwotICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50
U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLQotICAgICAgICBkc3RP
ZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlcFN0ckxlbmd0aDsgKytpKQotICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9
IHJlcGxhY2VtZW50W2ldOwotCi0gICAgICAgIGRzdE9mZnNldCArPSByZXBTdHJMZW5ndGg7Ci0g
ICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyAxOwotICAgIH0KLQotICAg
IHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFydDsKLSAgICBtZW1j
cHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21l
bnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLQotICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNT
ZWdtZW50TGVuZ3RoID09IG5ld0ltcGwuZ2V0KCkubGVuZ3RoKCkpOwotCi0gICAgcmV0dXJuIG5l
d0ltcGw7Ci19Ci0KLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBh
dHRlcm4sIGNvbnN0IFVDaGFyKiByZXBsYWNlbWVudCwgdW5zaWduZWQgcmVwU3RyTGVuZ3RoKQot
ewotICAgIEFTU0VSVChyZXBsYWNlbWVudCk7Ci0KLSAgICBzaXplX3Qgc3JjU2VnbWVudFN0YXJ0
ID0gMDsKLSAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMDsKLQotICAgIC8vIENvdW50IHRoZSBt
YXRjaGVzLgotICAgIHdoaWxlICgoc3JjU2VnbWVudFN0YXJ0ID0gZmluZChwYXR0ZXJuLCBzcmNT
ZWdtZW50U3RhcnQpKSAhPSBub3RGb3VuZCkgewotICAgICAgICArK21hdGNoQ291bnQ7Ci0gICAg
ICAgICsrc3JjU2VnbWVudFN0YXJ0OwotICAgIH0KLQotICAgIC8vIElmIHdlIGhhdmUgMCBtYXRj
aGVzIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkgbW9yZSB3b3JrLgotICAgIGlmICghbWF0
Y2hDb3VudCkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgaWYgKHJlcFN0ckxlbmd0aCAm
JiBtYXRjaENvdW50ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gcmVw
U3RyTGVuZ3RoKQotICAgICAgICBDUkFTSCgpOwotCi0gICAgdW5zaWduZWQgcmVwbGFjZVNpemUg
PSBtYXRjaENvdW50ICogcmVwU3RyTGVuZ3RoOwotICAgIHVuc2lnbmVkIG5ld1NpemUgPSBtX2xl
bmd0aCAtIG1hdGNoQ291bnQ7Ci0gICAgaWYgKG5ld1NpemUgPj0gKHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSAtIHJlcGxhY2VTaXplKSkKLSAgICAgICAgQ1JBU0goKTsKLQot
ICAgIG5ld1NpemUgKz0gcmVwbGFjZVNpemU7Ci0KLSAgICAvLyBDb25zdHJ1Y3QgdGhlIG5ldyBk
YXRhLgotICAgIHNpemVfdCBzcmNTZWdtZW50RW5kOwotICAgIHVuc2lnbmVkIHNyY1NlZ21lbnRM
ZW5ndGg7Ci0gICAgc3JjU2VnbWVudFN0YXJ0ID0gMDsKLSAgICB1bnNpZ25lZCBkc3RPZmZzZXQg
PSAwOwotCi0gICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgIFVDaGFyKiBkYXRhOwotICAgICAg
ICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG5ld1NpemUsIGRhdGEpOwotCi0g
ICAgICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0
YXJ0KSkgIT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNT
ZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNyY1NlZ21lbnRMZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICBkYXRhW2kg
KyBkc3RPZmZzZXRdID0gbV9kYXRhOFtpICsgc3JjU2VnbWVudFN0YXJ0XTsKLQotICAgICAgICAg
ICAgZHN0T2Zmc2V0ICs9IHNyY1NlZ21lbnRMZW5ndGg7Ci0gICAgICAgICAgICBtZW1jcHkoZGF0
YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikp
OwotCi0gICAgICAgICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVuZ3RoOwotICAgICAgICAgICAg
c3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzcmNTZWdtZW50TGVuZ3RoID0gbV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICBkYXRhW2kgKyBkc3RPZmZzZXRdID0gbV9kYXRhOFtpICsgc3JjU2VnbWVudFN0YXJ0XTsK
LQotICAgICAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBuZXdJbXBs
LmdldCgpLmxlbmd0aCgpKTsKLQotICAgICAgICByZXR1cm4gbmV3SW1wbDsKLSAgICB9Ci0KLSAg
ICBVQ2hhciogZGF0YTsKLSAgICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG5l
d1NpemUsIGRhdGEpOwotCi0gICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJu
LCBzcmNTZWdtZW50U3RhcnQpKSAhPSBub3RGb3VuZCkgewotICAgICAgICBzcmNTZWdtZW50TGVu
Z3RoID0gc3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKLSAgICAgICAgbWVtY3B5KGRh
dGEgKyBkc3RPZmZzZXQsIG1fZGF0YTE2ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0KLSAgICAgICAgZHN0T2Zmc2V0ICs9IHNyY1NlZ21lbnRM
ZW5ndGg7Ci0gICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudCwgcmVw
U3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0KLSAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0
ckxlbmd0aDsKLSAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7Ci0g
ICAgfQotCi0gICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0
OwotICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21lbnRTdGFy
dCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwotCi0gICAgQVNTRVJUKGRzdE9m
ZnNldCArIHNyY1NlZ21lbnRMZW5ndGggPT0gbmV3SW1wbC5nZXQoKS5sZW5ndGgoKSk7Ci0KLSAg
ICByZXR1cm4gbmV3SW1wbDsKLX0KLQotUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxh
Y2UoU3RyaW5nSW1wbCogcGF0dGVybiwgU3RyaW5nSW1wbCogcmVwbGFjZW1lbnQpCi17Ci0gICAg
aWYgKCFwYXR0ZXJuIHx8ICFyZXBsYWNlbWVudCkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0g
ICAgdW5zaWduZWQgcGF0dGVybkxlbmd0aCA9IHBhdHRlcm4tPmxlbmd0aCgpOwotICAgIGlmICgh
cGF0dGVybkxlbmd0aCkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICAKLSAgICB1bnNp
Z25lZCByZXBTdHJMZW5ndGggPSByZXBsYWNlbWVudC0+bGVuZ3RoKCk7Ci0gICAgc2l6ZV90IHNy
Y1NlZ21lbnRTdGFydCA9IDA7Ci0gICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7Ci0gICAgCi0g
ICAgLy8gQ291bnQgdGhlIG1hdGNoZXMuCi0gICAgd2hpbGUgKChzcmNTZWdtZW50U3RhcnQgPSBm
aW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICsr
bWF0Y2hDb3VudDsKLSAgICAgICAgc3JjU2VnbWVudFN0YXJ0ICs9IHBhdHRlcm5MZW5ndGg7Ci0g
ICAgfQotICAgIAotICAgIC8vIElmIHdlIGhhdmUgMCBtYXRjaGVzLCB3ZSBkb24ndCBoYXZlIHRv
IGRvIGFueSBtb3JlIHdvcmsKLSAgICBpZiAoIW1hdGNoQ291bnQpCi0gICAgICAgIHJldHVybiAq
dGhpczsKLSAgICAKLSAgICB1bnNpZ25lZCBuZXdTaXplID0gbV9sZW5ndGggLSBtYXRjaENvdW50
ICogcGF0dGVybkxlbmd0aDsKLSAgICBpZiAocmVwU3RyTGVuZ3RoICYmIG1hdGNoQ291bnQgPiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyByZXBTdHJMZW5ndGgpCi0gICAg
ICAgIENSQVNIKCk7Ci0KLSAgICBpZiAobmV3U2l6ZSA+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkgLSBtYXRjaENvdW50ICogcmVwU3RyTGVuZ3RoKSkKLSAgICAgICAgQ1JB
U0goKTsKLQotICAgIG5ld1NpemUgKz0gbWF0Y2hDb3VudCAqIHJlcFN0ckxlbmd0aDsKLQotICAg
IAotICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEKLSAgICBzaXplX3Qgc3JjU2VnbWVudEVu
ZDsKLSAgICB1bnNpZ25lZCBzcmNTZWdtZW50TGVuZ3RoOwotICAgIHNyY1NlZ21lbnRTdGFydCA9
IDA7Ci0gICAgdW5zaWduZWQgZHN0T2Zmc2V0ID0gMDsKLSAgICBib29sIHNyY0lzOEJpdCA9IGlz
OEJpdCgpOwotICAgIGJvb2wgcmVwbGFjZW1lbnRJczhCaXQgPSByZXBsYWNlbWVudC0+aXM4Qml0
KCk7Ci0gICAgCi0gICAgLy8gVGhlcmUgYXJlIDQgY2FzZXM6Ci0gICAgLy8gMS4gVGhpcyBhbmQg
cmVwbGFjZW1lbnQgYXJlIGJvdGggOCBiaXQuCi0gICAgLy8gMi4gVGhpcyBhbmQgcmVwbGFjZW1l
bnQgYXJlIGJvdGggMTYgYml0LgotICAgIC8vIDMuIFRoaXMgaXMgOCBiaXQgYW5kIHJlcGxhY2Vt
ZW50IGlzIDE2IGJpdC4KLSAgICAvLyA0LiBUaGlzIGlzIDE2IGJpdCBhbmQgcmVwbGFjZW1lbnQg
aXMgOCBiaXQuCi0gICAgaWYgKHNyY0lzOEJpdCAmJiByZXBsYWNlbWVudElzOEJpdCkgewotICAg
ICAgICAvLyBDYXNlIDEKLSAgICAgICAgTENoYXIqIGRhdGE7Ci0gICAgICAgIGF1dG8gbmV3SW1w
bCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7Ci0gICAgICAgIHdoaWxlICgo
c3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91
bmQpIHsKLSAgICAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3Jj
U2VnbWVudFN0YXJ0OwotICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0
YTggKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoTENoYXIpKTsK
LSAgICAgICAgICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOwotICAgICAgICAgICAg
bWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGE4LCByZXBTdHJMZW5n
dGggKiBzaXplb2YoTENoYXIpKTsKLSAgICAgICAgICAgIGRzdE9mZnNldCArPSByZXBTdHJMZW5n
dGg7Ci0gICAgICAgICAgICBzcmNTZWdtZW50U3RhcnQgPSBzcmNTZWdtZW50RW5kICsgcGF0dGVy
bkxlbmd0aDsKLSAgICAgICAgfQotCi0gICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0
aCAtIHNyY1NlZ21lbnRTdGFydDsKLSAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1f
ZGF0YTggKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoTENoYXIp
KTsKLQotICAgICAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBuZXdJ
bXBsLmdldCgpLmxlbmd0aCgpKTsKLQotICAgICAgICByZXR1cm4gbmV3SW1wbDsKLSAgICB9Ci0K
LSAgICBVQ2hhciogZGF0YTsKLSAgICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVk
KG5ld1NpemUsIGRhdGEpOwotICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVy
biwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKLSAgICAgICAgc3JjU2VnbWVudExl
bmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAgICAgIGlmIChzcmNJ
czhCaXQpIHsKLSAgICAgICAgICAgIC8vIENhc2UgMy4KLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgZGF0
YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBDYXNlIDIgJiA0LgotICAgICAgICAgICAgbWVtY3B5
KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YTE2ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50
TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZHN0T2Zmc2V0ICs9
IHNyY1NlZ21lbnRMZW5ndGg7Ci0gICAgICAgIGlmIChyZXBsYWNlbWVudElzOEJpdCkgewotICAg
ICAgICAgICAgLy8gQ2FzZXMgMiAmIDMuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcmVwU3RyTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zm
c2V0XSA9IHJlcGxhY2VtZW50LT5tX2RhdGE4W2ldOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgLy8gQ2FzZSA0Ci0gICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVw
bGFjZW1lbnQtPm1fZGF0YTE2LCByZXBTdHJMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICAg
ICAgfQotICAgICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVuZ3RoOwotICAgICAgICBzcmNTZWdt
ZW50U3RhcnQgPSBzcmNTZWdtZW50RW5kICsgcGF0dGVybkxlbmd0aDsKLSAgICB9Ci0KLSAgICBz
cmNTZWdtZW50TGVuZ3RoID0gbV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAgaWYgKHNy
Y0lzOEJpdCkgewotICAgICAgICAvLyBDYXNlIDMuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBkYXRhW2kgKyBkc3RP
ZmZzZXRdID0gbV9kYXRhOFtpICsgc3JjU2VnbWVudFN0YXJ0XTsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBDYXNlcyAyICYgNC4KLSAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1f
ZGF0YTE2ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFy
KSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGRzdE9mZnNldCArIHNyY1NlZ21lbnRMZW5ndGggPT0g
bmV3SW1wbC5nZXQoKS5sZW5ndGgoKSk7Ci0KLSAgICByZXR1cm4gbmV3SW1wbDsKLX0KLQotYm9v
bCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKQotewotICAg
IHJldHVybiBlcXVhbENvbW1vbihhLCBiKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJU
eXBlPgotaW5saW5lIGJvb2wgZXF1YWxJbnRlcm5hbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25z
dCBDaGFyVHlwZSogYiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGlmICghYSkKLSAgICAgICAg
cmV0dXJuICFiOwotICAgIGlmICghYikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGEtPmxlbmd0aCgpICE9IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChh
LT5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGVxdWFsKGEtPmNoYXJhY3RlcnM4KCksIGIsIGxl
bmd0aCk7Ci0gICAgcmV0dXJuIGVxdWFsKGEtPmNoYXJhY3RlcnMxNigpLCBiLCBsZW5ndGgpOwot
fQotCi1ib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IExDaGFyKiBiLCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIGVxdWFsSW50ZXJuYWwoYSwgYiwgbGVuZ3RoKTsK
LX0KLQotYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBVQ2hhciogYiwgdW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBlcXVhbEludGVybmFsKGEsIGIsIGxlbmd0aCk7
Ci19Ci0KLWJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgTENoYXIqIGIpCi17
Ci0gICAgaWYgKCFhKQotICAgICAgICByZXR1cm4gIWI7Ci0gICAgaWYgKCFiKQotICAgICAgICBy
ZXR1cm4gIWE7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhLT5sZW5ndGgoKTsKLQotICAgIGlm
IChhLT5pczhCaXQoKSkgewotICAgICAgICBjb25zdCBMQ2hhciogYVB0ciA9IGEtPmNoYXJhY3Rl
cnM4KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIExDaGFyIGJjID0gYltpXTsKLSAgICAgICAgICAgIExDaGFyIGFjID0gYVB0
cltpXTsKLSAgICAgICAgICAgIGlmICghYmMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgaWYgKGFjICE9IGJjKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAhYltsZW5ndGhdOwotICAgIH0KLQotICAg
IGNvbnN0IFVDaGFyKiBhUHRyID0gYS0+Y2hhcmFjdGVyczE2KCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgewotICAgICAgICBMQ2hhciBiYyA9IGJbaV07Ci0g
ICAgICAgIGlmICghYmMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChh
UHRyW2ldICE9IGJjKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiAhYltsZW5ndGhdOwotfQotCi1ib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwmIGEsIGNv
bnN0IFN0cmluZ0ltcGwmIGIpCi17Ci0gICAgcmV0dXJuIGVxdWFsQ29tbW9uKGEsIGIpOwotfQot
Ci1ib29sIGVxdWFsSWdub3JpbmdOdWxsaXR5KFN0cmluZ0ltcGwqIGEsIFN0cmluZ0ltcGwqIGIp
Ci17Ci0gICAgaWYgKCFhICYmIGIgJiYgIWItPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBpZiAoIWIgJiYgYSAmJiAhYS0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIHJldHVybiBlcXVhbChhLCBiKTsKLX0KLQotYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpCi17Ci0gICAgaWYg
KGEgPT0gYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFhIHx8ICFiKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2VDb21tb24o
KmEsICpiKTsKLX0KLQotYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlTm9uTnVsbChjb25zdCBT
dHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKQotewotICAgIEFTU0VSVChhKTsKLSAg
ICBBU1NFUlQoYik7Ci0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoKmEsICpiKTsK
LX0KLQotVUNoYXJEaXJlY3Rpb24gU3RyaW5nSW1wbDo6ZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24o
Ym9vbCogaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXJEaXJlY3Rpb24gY2hhckRpcmVj
dGlvbiA9IHVfY2hhckRpcmVjdGlvbihpczhCaXQoKSA/IG1fZGF0YThbaV0gOiBtX2RhdGExNltp
XSk7Ci0gICAgICAgIGlmIChjaGFyRGlyZWN0aW9uID09IFVfTEVGVF9UT19SSUdIVCkgewotICAg
ICAgICAgICAgaWYgKGhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5KQotICAgICAgICAgICAgICAgICpo
YXNTdHJvbmdEaXJlY3Rpb25hbGl0eSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gVV9MRUZU
X1RPX1JJR0hUOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjaGFyRGlyZWN0aW9uID09IFVfUklH
SFRfVE9fTEVGVCB8fCBjaGFyRGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMpIHsK
LSAgICAgICAgICAgIGlmIChoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSkKLSAgICAgICAgICAgICAg
ICAqaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIFVf
UklHSFRfVE9fTEVGVDsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaGFzU3Ryb25nRGlyZWN0
aW9uYWxpdHkpCi0gICAgICAgICpoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSA9IGZhbHNlOwotICAg
IHJldHVybiBVX0xFRlRfVE9fUklHSFQ7Ci19Ci0KLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
OjphZG9wdChTdHJpbmdCdWZmZXI8TENoYXI+JiYgYnVmZmVyKQotewotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGJ1ZmZlci5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJu
ICplbXB0eSgpOwotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cmluZ0ltcGwoYnVmZmVyLnJl
bGVhc2UoKSwgbGVuZ3RoKSk7Ci19Ci0KLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjphZG9w
dChTdHJpbmdCdWZmZXI8VUNoYXI+JiYgYnVmZmVyKQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGJ1ZmZlci5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuICplbXB0
eSgpOwotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cmluZ0ltcGwoYnVmZmVyLnJlbGVhc2Uo
KSwgbGVuZ3RoKSk7Ci19Ci0KLXNpemVfdCBTdHJpbmdJbXBsOjpzaXplSW5CeXRlcygpIGNvbnN0
Ci17Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQgc3Vic3RyaW5ncwotICAgIHNpemVfdCBzaXplID0g
bGVuZ3RoKCk7Ci0gICAgaWYgKCFpczhCaXQoKSkKLSAgICAgICAgc2l6ZSAqPSAyOwotICAgIHJl
dHVybiBzaXplICsgc2l6ZW9mKCp0aGlzKTsKLX0KLQotLy8gSGVscGVyIHRvIHdyaXRlIGEgdGhy
ZWUtYnl0ZSBVVEYtOCBjb2RlIHBvaW50IHRvIHRoZSBidWZmZXIsIGNhbGxlciBtdXN0IGNoZWNr
IHJvb20gaXMgYXZhaWxhYmxlLgotc3RhdGljIGlubGluZSB2b2lkIHB1dFVURjhUcmlwbGUoY2hh
ciomIGJ1ZmZlciwgVUNoYXIgY2gpCi17Ci0gICAgQVNTRVJUKGNoID49IDB4MDgwMCk7Ci0gICAg
KmJ1ZmZlcisrID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKChjaCA+PiAxMikgJiAweDBGKSB8IDB4RTAp
OwotICAgICpidWZmZXIrKyA9IHN0YXRpY19jYXN0PGNoYXI+KCgoY2ggPj4gNikgJiAweDNGKSB8
IDB4ODApOwotICAgICpidWZmZXIrKyA9IHN0YXRpY19jYXN0PGNoYXI+KChjaCAmIDB4M0YpIHwg
MHg4MCk7Ci19Ci0KLWJvb2wgU3RyaW5nSW1wbDo6dXRmOEltcGwoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgY2hhciomIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUs
IENvbnZlcnNpb25Nb2RlIG1vZGUpCi17Ci0gICAgaWYgKG1vZGUgPT0gU3RyaWN0Q29udmVyc2lv
blJlcGxhY2luZ1VucGFpcmVkU3Vycm9nYXRlc1dpdGhGRkZEKSB7Ci0gICAgICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzRW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKLSAgICAgICAgY2hhciog
YnVmZmVyRW5kID0gYnVmZmVyICsgYnVmZmVyU2l6ZTsKLSAgICAgICAgd2hpbGUgKGNoYXJhY3Rl
cnMgPCBjaGFyYWN0ZXJzRW5kKSB7Ci0gICAgICAgICAgICAvLyBVc2Ugc3RyaWN0IGNvbnZlcnNp
b24gdG8gZGV0ZWN0IHVucGFpcmVkIHN1cnJvZ2F0ZXMuCi0gICAgICAgICAgICBDb252ZXJzaW9u
UmVzdWx0IHJlc3VsdCA9IGNvbnZlcnRVVEYxNlRvVVRGOCgmY2hhcmFjdGVycywgY2hhcmFjdGVy
c0VuZCwgJmJ1ZmZlciwgYnVmZmVyRW5kLCB0cnVlKTsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgIT0gdGFyZ2V0RXhoYXVzdGVkKTsKLSAgICAgICAgICAgIC8vIENvbnZlcnNpb24gZmFpbHMg
d2hlbiB0aGVyZSBpcyBhbiB1bnBhaXJlZCBzdXJyb2dhdGUuCi0gICAgICAgICAgICAvLyBQdXQg
cmVwbGFjZW1lbnQgY2hhcmFjdGVyIChVK0ZGRkQpIGluc3RlYWQgb2YgdGhlIHVucGFpcmVkIHN1
cnJvZ2F0ZS4KLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gY29udmVyc2lvbk9LKSB7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKCgweEQ4MDAgPD0gKmNoYXJhY3RlcnMgJiYgKmNoYXJhY3RlcnMg
PD0gMHhERkZGKSk7Ci0gICAgICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGJlIHJvb20gbGVm
dCwgc2luY2Ugb25lIFVDaGFyIGhhc24ndCBiZWVuIGNvbnZlcnRlZC4KLSAgICAgICAgICAgICAg
ICBBU1NFUlQoKGJ1ZmZlciArIDMpIDw9IGJ1ZmZlckVuZCk7Ci0gICAgICAgICAgICAgICAgcHV0
VVRGOFRyaXBsZShidWZmZXIsIHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAg
ICArK2NoYXJhY3RlcnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBib29sIHN0cmljdCA9IG1vZGUgPT0gU3RyaWN0Q29udmVyc2lvbjsKLSAgICAgICAg
Y29uc3QgVUNoYXIqIG9yaWdpbmFsQ2hhcmFjdGVycyA9IGNoYXJhY3RlcnM7Ci0gICAgICAgIENv
bnZlcnNpb25SZXN1bHQgcmVzdWx0ID0gY29udmVydFVURjE2VG9VVEY4KCZjaGFyYWN0ZXJzLCBj
aGFyYWN0ZXJzICsgbGVuZ3RoLCAmYnVmZmVyLCBidWZmZXIgKyBidWZmZXJTaXplLCBzdHJpY3Qp
OwotICAgICAgICBBU1NFUlQocmVzdWx0ICE9IHRhcmdldEV4aGF1c3RlZCk7IC8vIChsZW5ndGgg
KiAzKSBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgYW55IGNvbnZlcnNpb24KLQotICAgICAgICAv
LyBPbmx5IHByb2R1Y2VkIGZyb20gc3RyaWN0IGNvbnZlcnNpb24uCi0gICAgICAgIGlmIChyZXN1
bHQgPT0gc291cmNlSWxsZWdhbCkgewotICAgICAgICAgICAgQVNTRVJUKHN0cmljdCk7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayBmb3Ig
YW4gdW5jb252ZXJ0ZWQgaGlnaCBzdXJyb2dhdGUuCi0gICAgICAgIGlmIChyZXN1bHQgPT0gc291
cmNlRXhoYXVzdGVkKSB7Ci0gICAgICAgICAgICBpZiAoc3RyaWN0KQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIG9uZSB1bnBhaXJl
ZCBoaWdoIHN1cnJvZ2F0ZS4gVHJlYXQgaXQgdGhlIHNhbWUKLSAgICAgICAgICAgIC8vIHdhcyBh
cyBhbiB1bnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSB3b3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBpbgot
ICAgICAgICAgICAgLy8gdGhlIG1pZGRsZSBvZiBhIHN0cmluZyB3aXRoIG5vbi1zdHJpY3QgY29u
dmVyc2lvbiAtIHdoaWNoIGlzCi0gICAgICAgICAgICAvLyB0byBzYXksIHNpbXBseSBlbmNvZGUg
aXQgdG8gVVRGLTguCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKAotICAgICAgICAgICAgICAg
IG9yaWdpbmFsQ2hhcmFjdGVycywgKGNoYXJhY3RlcnMgKyAxKSA9PSAob3JpZ2luYWxDaGFyYWN0
ZXJzICsgbGVuZ3RoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoKCpjaGFyYWN0ZXJzID49IDB4RDgw
MCkgJiYgKCpjaGFyYWN0ZXJzIDw9IDB4REJGRikpOwotICAgICAgICAgICAgLy8gVGhlcmUgc2hv
dWxkIGJlIHJvb20gbGVmdCwgc2luY2Ugb25lIFVDaGFyIGhhc24ndCBiZWVuIGNvbnZlcnRlZC4K
LSAgICAgICAgICAgIEFTU0VSVCgoYnVmZmVyICsgMykgPD0gKGJ1ZmZlciArIGJ1ZmZlclNpemUp
KTsKLSAgICAgICAgICAgIHB1dFVURjhUcmlwbGUoYnVmZmVyLCAqY2hhcmFjdGVycyk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUNTdHJpbmcgU3RyaW5n
SW1wbDo6dXRmOEZvckNoYXJhY3RlcnMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIENTdHJpbmcoIiIs
IDApOwotICAgIGlmIChsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkgLyAzKQotICAgICAgICByZXR1cm4gQ1N0cmluZygpOwotICAgIFZlY3RvcjxjaGFyLCAxMDI0
PiBidWZmZXJWZWN0b3IobGVuZ3RoICogMyk7Ci0gICAgY2hhciogYnVmZmVyID0gYnVmZmVyVmVj
dG9yLmRhdGEoKTsKLSAgICBjb25zdCBMQ2hhciogc291cmNlID0gY2hhcmFjdGVyczsKLSAgICBD
b252ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IGNvbnZlcnRMYXRpbjFUb1VURjgoJnNvdXJjZSwgc291
cmNlICsgbGVuZ3RoLCAmYnVmZmVyLCBidWZmZXIgKyBidWZmZXJWZWN0b3Iuc2l6ZSgpKTsKLSAg
ICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ICE9IHRhcmdldEV4aGF1c3RlZCk7IC8vIChs
ZW5ndGggKiAzKSBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgYW55IGNvbnZlcnNpb24KLSAgICBy
ZXR1cm4gQ1N0cmluZyhidWZmZXJWZWN0b3IuZGF0YSgpLCBidWZmZXIgLSBidWZmZXJWZWN0b3Iu
ZGF0YSgpKTsKLX0KLQotQ1N0cmluZyBTdHJpbmdJbXBsOjp1dGY4Rm9yQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDb252ZXJzaW9uTW9kZSBtb2Rl
KQotewotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gQ1N0cmluZygiIiwgMCk7Ci0g
ICAgaWYgKGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIDMp
Ci0gICAgICAgIHJldHVybiBDU3RyaW5nKCk7Ci0gICAgVmVjdG9yPGNoYXIsIDEwMjQ+IGJ1ZmZl
clZlY3RvcihsZW5ndGggKiAzKTsKLSAgICBjaGFyKiBidWZmZXIgPSBidWZmZXJWZWN0b3IuZGF0
YSgpOwotICAgIGlmICghdXRmOEltcGwoY2hhcmFjdGVycywgbGVuZ3RoLCBidWZmZXIsIGJ1ZmZl
clZlY3Rvci5zaXplKCksIG1vZGUpKQotICAgICAgICByZXR1cm4gQ1N0cmluZygpOwotICAgIHJl
dHVybiBDU3RyaW5nKGJ1ZmZlclZlY3Rvci5kYXRhKCksIGJ1ZmZlciAtIGJ1ZmZlclZlY3Rvci5k
YXRhKCkpOwotfQotCi1DU3RyaW5nIFN0cmluZ0ltcGw6OnV0ZjhGb3JSYW5nZSh1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgQ29udmVyc2lvbk1vZGUgbW9kZSkgY29uc3QKLXsKLSAg
ICBBU1NFUlQob2Zmc2V0IDw9IHRoaXMtPmxlbmd0aCgpKTsKLSAgICBBU1NFUlQob2Zmc2V0ICsg
bGVuZ3RoIDw9IHRoaXMtPmxlbmd0aCgpKTsKLSAgICAKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAg
ICAgcmV0dXJuIENTdHJpbmcoIiIsIDApOwotCi0gICAgLy8gQWxsb2NhdGUgYSBidWZmZXIgYmln
IGVub3VnaCB0byBob2xkIGFsbCB0aGUgY2hhcmFjdGVycwotICAgIC8vIChhbiBpbmRpdmlkdWFs
IFVURi0xNiBVQ2hhciBjYW4gb25seSBleHBhbmQgdG8gMyBVVEYtOCBieXRlcykuCi0gICAgLy8g
T3B0aW1pemF0aW9uIGlkZWFzLCBpZiB3ZSBmaW5kIHRoaXMgZnVuY3Rpb24gaXMgaG90OgotICAg
IC8vICAqIFdlIGNvdWxkIHNwZWN1bGF0aXZlbHkgY3JlYXRlIGEgQ1N0cmluZ0J1ZmZlciB0byBj
b250YWluICdsZW5ndGgnIAotICAgIC8vICAgIGNoYXJhY3RlcnMsIGFuZCByZXNpemUgaWYgbmVj
ZXNzYXJ5IChpLmUuIGlmIHRoZSBidWZmZXIgY29udGFpbnMKLSAgICAvLyAgICBub24tYXNjaWkg
Y2hhcmFjdGVycykuIChBbHRlcm5hdGl2ZWx5LCBzY2FuIHRoZSBidWZmZXIgZmlyc3QgZm9yCi0g
ICAgLy8gICAgYXNjaWkgY2hhcmFjdGVycywgc28gd2Uga25vdyB0aGlzIHdpbGwgYmUgc3VmZmlj
aWVudCkuCi0gICAgLy8gICogV2UgY291bGQgYWxsb2NhdGUgYSBDU3RyaW5nQnVmZmVyIHdpdGgg
YW4gYXBwcm9wcmlhdGUgc2l6ZSB0bwotICAgIC8vICAgIGhhdmUgYSBnb29kIGNoYW5jZSBvZiBi
ZWluZyBhYmxlIHRvIHdyaXRlIHRoZSBzdHJpbmcgaW50byB0aGUKLSAgICAvLyAgICBidWZmZXIg
d2l0aG91dCByZWFsbG9jaW5nIChzYXksIDEuNSB4IGxlbmd0aCkuCi0gICAgaWYgKGxlbmd0aCA+
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIDMpCi0gICAgICAgIHJldHVy
biBDU3RyaW5nKCk7Ci0gICAgVmVjdG9yPGNoYXIsIDEwMjQ+IGJ1ZmZlclZlY3RvcihsZW5ndGgg
KiAzKTsKLQotICAgIGNoYXIqIGJ1ZmZlciA9IGJ1ZmZlclZlY3Rvci5kYXRhKCk7Ci0KLSAgICBp
ZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMgPSB0aGlzLT5j
aGFyYWN0ZXJzOCgpICsgb2Zmc2V0OwotCi0gICAgICAgIENvbnZlcnNpb25SZXN1bHQgcmVzdWx0
ID0gY29udmVydExhdGluMVRvVVRGOCgmY2hhcmFjdGVycywgY2hhcmFjdGVycyArIGxlbmd0aCwg
JmJ1ZmZlciwgYnVmZmVyICsgYnVmZmVyVmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQgIT0gdGFyZ2V0RXhoYXVzdGVkKTsgLy8gKGxlbmd0aCAqIDMp
IHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBhbnkgY29udmVyc2lvbgotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmICghdXRmOEltcGwodGhpcy0+Y2hhcmFjdGVyczE2KCkgKyBvZmZzZXQsIGxlbmd0
aCwgYnVmZmVyLCBidWZmZXJWZWN0b3Iuc2l6ZSgpLCBtb2RlKSkKLSAgICAgICAgICAgIHJldHVy
biBDU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIENTdHJpbmcoYnVmZmVyVmVjdG9yLmRh
dGEoKSwgYnVmZmVyIC0gYnVmZmVyVmVjdG9yLmRhdGEoKSk7Ci19Ci0KLUNTdHJpbmcgU3RyaW5n
SW1wbDo6dXRmOChDb252ZXJzaW9uTW9kZSBtb2RlKSBjb25zdAotewotICAgIHJldHVybiB1dGY4
Rm9yUmFuZ2UoMCwgbGVuZ3RoKCksIG1vZGUpOwotfQotCi1ORVZFUl9JTkxJTkUgdW5zaWduZWQg
U3RyaW5nSW1wbDo6aGFzaFNsb3dDYXNlKCkgY29uc3QKLXsKLSAgICBpZiAoaXM4Qml0KCkpCi0g
ICAgICAgIHNldEhhc2goU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyht
X2RhdGE4LCBtX2xlbmd0aCkpOwotICAgIGVsc2UKLSAgICAgICAgc2V0SGFzaChTdHJpbmdIYXNo
ZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKG1fZGF0YTE2LCBtX2xlbmd0aCkpOwotICAg
IHJldHVybiBleGlzdGluZ0hhc2goKTsKLX0KLQotdW5zaWduZWQgU3RyaW5nSW1wbDo6Y29uY3Vy
cmVudEhhc2goKSBjb25zdAotewotICAgIHVuc2lnbmVkIGhhc2g7Ci0gICAgaWYgKGlzOEJpdCgp
KQotICAgICAgICBoYXNoID0gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0
cyhtX2RhdGE4LCBtX2xlbmd0aCk7Ci0gICAgZWxzZQotICAgICAgICBoYXNoID0gU3RyaW5nSGFz
aGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhtX2RhdGExNiwgbV9sZW5ndGgpOwotICAg
IEFTU0VSVCgoKGhhc2ggPDwgc19mbGFnQ291bnQpID4+IHNfZmxhZ0NvdW50KSA9PSBoYXNoKTsK
LSAgICByZXR1cm4gaGFzaDsKLX0KLQotYm9vbCBlcXVhbElnbm9yaW5nTnVsbGl0eShjb25zdCBV
Q2hhciogYSwgc2l6ZV90IGFMZW5ndGgsIFN0cmluZ0ltcGwqIGIpCi17Ci0gICAgaWYgKCFiKQot
ICAgICAgICByZXR1cm4gIWFMZW5ndGg7Ci0gICAgaWYgKGFMZW5ndGggIT0gYi0+bGVuZ3RoKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYi0+aXM4Qml0KCkpIHsKLSAgICAgICAg
Y29uc3QgTENoYXIqIGJDaGFyYWN0ZXJzID0gYi0+Y2hhcmFjdGVyczgoKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGFMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKGFb
aV0gIT0gYkNoYXJhY3RlcnNbaV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gIW1lbWNtcChh
LCBiLT5jaGFyYWN0ZXJzMTYoKSwgYi0+bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvdGV4dC9TdHJpbmdJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3
NTVlNTQ0MmE5NTM4ODRmNWQ4MmMyZDJjMDZmYTVkNDllNWQ5ODUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL3RleHQvU3RyaW5nSW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE1OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICov
Ci0KLSNpZm5kZWYgU3RyaW5nSW1wbF9oCi0jZGVmaW5lIFN0cmluZ0ltcGxfaAotCi0jaW5jbHVk
ZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1ZGUgPHVuaWNv
ZGUvdXN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5jbHVkZSA8d3Rm
L0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NvbnZlcnNpb25Nb2RlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29tbW9u
Lmg+Ci0KLSNpZiBVU0UoQ0YpCi10eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGU3RyaW5nICogQ0ZT
dHJpbmdSZWY7Ci0jZW5kaWYKLQotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgTlNTdHJpbmc7Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci1uYW1lc3BhY2UgTExJbnQgeyBjbGFzcyBEYXRhOyB9
Ci1jbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci19Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1j
bGFzcyBTeW1ib2xJbXBsOwotY2xhc3MgU3ltYm9sUmVnaXN0cnk7Ci0KLXN0cnVjdCBDU3RyaW5n
VHJhbnNsYXRvcjsKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgQnVmZmVyRnJvbVN0YXRpY0Rh
dGFUcmFuc2xhdG9yOwotc3RydWN0IEhhc2hBbmRVVEY4Q2hhcmFjdGVyc1RyYW5zbGF0b3I7Ci1z
dHJ1Y3QgTENoYXJCdWZmZXJUcmFuc2xhdG9yOwotc3RydWN0IFN0cmluZ0hhc2g7Ci1zdHJ1Y3Qg
U3Vic3RyaW5nVHJhbnNsYXRvcjsKLXN0cnVjdCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBSZXRhaW5QdHI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lPiBz
dHJ1Y3QgSGFzaEFuZENoYXJhY3RlcnNUcmFuc2xhdG9yOwotCi1lbnVtIFRleHRDYXNlU2Vuc2l0
aXZpdHkgewotICAgIFRleHRDYXNlU2Vuc2l0aXZlLAotICAgIFRleHRDYXNlSW5zZW5zaXRpdmUK
LX07Ci0KLXR5cGVkZWYgYm9vbCAoKkNoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIpKFVDaGFyKTsK
LXR5cGVkZWYgYm9vbCAoKklzV2hpdGVTcGFjZUZ1bmN0aW9uUHRyKShVQ2hhcik7Ci0KLS8vIERl
ZmluZSBTVFJJTkdfU1RBVFMgdG8gMSB0dXJuIG9uIHJ1biB0aW1lIHN0YXRpc3RpY3Mgb2Ygc3Ry
aW5nIHNpemVzIGFuZCBtZW1vcnkgdXNhZ2UKLSNkZWZpbmUgU1RSSU5HX1NUQVRTIDAKLQotI2lm
IFNUUklOR19TVEFUUwotc3RydWN0IFN0cmluZ1N0YXRzIHsKLSAgICBpbmxpbmUgdm9pZCBhZGQ4
Qml0U3RyaW5nKHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBpc1N1YlN0cmluZyA9IGZhbHNlKQotICAg
IHsKLSAgICAgICAgKyttX3RvdGFsTnVtYmVyU3RyaW5nczsKLSAgICAgICAgKyttX251bWJlcjhC
aXRTdHJpbmdzOwotICAgICAgICBpZiAoIWlzU3ViU3RyaW5nKQotICAgICAgICAgICAgbV90b3Rh
bDhCaXREYXRhICs9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdm9pZCBhZGQxNkJpdFN0
cmluZyh1bnNpZ25lZCBsZW5ndGgsIGJvb2wgaXNTdWJTdHJpbmcgPSBmYWxzZSkKLSAgICB7Ci0g
ICAgICAgICsrbV90b3RhbE51bWJlclN0cmluZ3M7Ci0gICAgICAgICsrbV9udW1iZXIxNkJpdFN0
cmluZ3M7Ci0gICAgICAgIGlmICghaXNTdWJTdHJpbmcpCi0gICAgICAgICAgICBtX3RvdGFsMTZC
aXREYXRhICs9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICB2b2lkIHJlbW92ZVN0cmluZyhTdHJpbmdJ
bXBsJik7Ci0gICAgdm9pZCBwcmludFN0YXRzKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc19wcmludFN0cmluZ1N0YXRzRnJlcXVlbmN5ID0gNTAwMDsKLSAgICBzdGF0aWMgc3RkOjph
dG9taWM8dW5zaWduZWQ+IHNfc3RyaW5nUmVtb3Zlc1RpbGxQcmludFN0YXRzOwotCi0gICAgc3Rk
OjphdG9taWM8dW5zaWduZWQ+IG1fcmVmQ2FsbHM7Ci0gICAgc3RkOjphdG9taWM8dW5zaWduZWQ+
IG1fZGVyZWZDYWxsczsKLQotICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBtX3RvdGFsTnVtYmVy
U3RyaW5nczsKLSAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbV9udW1iZXI4Qml0U3RyaW5nczsK
LSAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gbV9udW1iZXIxNkJpdFN0cmluZ3M7Ci0gICAgc3Rk
OjphdG9taWM8dW5zaWduZWQgbG9uZyBsb25nPiBtX3RvdGFsOEJpdERhdGE7Ci0gICAgc3RkOjph
dG9taWM8dW5zaWduZWQgbG9uZyBsb25nPiBtX3RvdGFsMTZCaXREYXRhOwotfTsKLQotI2RlZmlu
ZSBTVFJJTkdfU1RBVFNfQUREXzhCSVRfU1RSSU5HKGxlbmd0aCkgU3RyaW5nSW1wbDo6c3RyaW5n
U3RhdHMoKS5hZGQ4Qml0U3RyaW5nKGxlbmd0aCkKLSNkZWZpbmUgU1RSSU5HX1NUQVRTX0FERF84
QklUX1NUUklORzIobGVuZ3RoLCBpc1N1YlN0cmluZykgU3RyaW5nSW1wbDo6c3RyaW5nU3RhdHMo
KS5hZGQ4Qml0U3RyaW5nKGxlbmd0aCwgaXNTdWJTdHJpbmcpCi0jZGVmaW5lIFNUUklOR19TVEFU
U19BRERfMTZCSVRfU1RSSU5HKGxlbmd0aCkgU3RyaW5nSW1wbDo6c3RyaW5nU3RhdHMoKS5hZGQx
NkJpdFN0cmluZyhsZW5ndGgpCi0jZGVmaW5lIFNUUklOR19TVEFUU19BRERfMTZCSVRfU1RSSU5H
MihsZW5ndGgsIGlzU3ViU3RyaW5nKSBTdHJpbmdJbXBsOjpzdHJpbmdTdGF0cygpLmFkZDE2Qml0
U3RyaW5nKGxlbmd0aCwgaXNTdWJTdHJpbmcpCi0jZGVmaW5lIFNUUklOR19TVEFUU19SRU1PVkVf
U1RSSU5HKHN0cmluZykgU3RyaW5nSW1wbDo6c3RyaW5nU3RhdHMoKS5yZW1vdmVTdHJpbmcoc3Ry
aW5nKQotI2RlZmluZSBTVFJJTkdfU1RBVFNfUkVGX1NUUklORyhzdHJpbmcpICsrU3RyaW5nSW1w
bDo6c3RyaW5nU3RhdHMoKS5tX3JlZkNhbGxzOwotI2RlZmluZSBTVFJJTkdfU1RBVFNfREVSRUZf
U1RSSU5HKHN0cmluZykgKytTdHJpbmdJbXBsOjpzdHJpbmdTdGF0cygpLm1fZGVyZWZDYWxsczsK
LSNlbHNlCi0jZGVmaW5lIFNUUklOR19TVEFUU19BRERfOEJJVF9TVFJJTkcobGVuZ3RoKSAoKHZv
aWQpMCkKLSNkZWZpbmUgU1RSSU5HX1NUQVRTX0FERF84QklUX1NUUklORzIobGVuZ3RoLCBpc1N1
YlN0cmluZykgKCh2b2lkKTApCi0jZGVmaW5lIFNUUklOR19TVEFUU19BRERfMTZCSVRfU1RSSU5H
KGxlbmd0aCkgKCh2b2lkKTApCi0jZGVmaW5lIFNUUklOR19TVEFUU19BRERfMTZCSVRfU1RSSU5H
MihsZW5ndGgsIGlzU3ViU3RyaW5nKSAoKHZvaWQpMCkKLSNkZWZpbmUgU1RSSU5HX1NUQVRTX0FE
RF9VUENPTlZFUlRFRF9TVFJJTkcobGVuZ3RoKSAoKHZvaWQpMCkKLSNkZWZpbmUgU1RSSU5HX1NU
QVRTX1JFTU9WRV9TVFJJTkcoc3RyaW5nKSAoKHZvaWQpMCkKLSNkZWZpbmUgU1RSSU5HX1NUQVRT
X1JFRl9TVFJJTkcoc3RyaW5nKSAoKHZvaWQpMCkKLSNkZWZpbmUgU1RSSU5HX1NUQVRTX0RFUkVG
X1NUUklORyhzdHJpbmcpICgodm9pZCkwKQotI2VuZGlmCi0KLWNsYXNzIFN0cmluZ0ltcGxTaGFw
ZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RyaW5nSW1wbFNoYXBlKTsKLXByb3RlY3Rl
ZDoKLSAgICBTdHJpbmdJbXBsU2hhcGUodW5zaWduZWQgcmVmQ291bnQsIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgTENoYXIqIGRhdGE4LCB1bnNpZ25lZCBoYXNoQW5kRmxhZ3MpCi0gICAgICAgIDog
bV9yZWZDb3VudChyZWZDb3VudCkKLSAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAg
ICwgbV9kYXRhOChkYXRhOCkKLSAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhoYXNoQW5kRmxhZ3Mp
Ci0gICAgeyB9Ci0KLSAgICBTdHJpbmdJbXBsU2hhcGUodW5zaWduZWQgcmVmQ291bnQsIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgVUNoYXIqIGRhdGExNiwgdW5zaWduZWQgaGFzaEFuZEZsYWdzKQot
ICAgICAgICA6IG1fcmVmQ291bnQocmVmQ291bnQpCi0gICAgICAgICwgbV9sZW5ndGgobGVuZ3Ro
KQotICAgICAgICAsIG1fZGF0YTE2KGRhdGExNikKLSAgICAgICAgLCBtX2hhc2hBbmRGbGFncyho
YXNoQW5kRmxhZ3MpCi0gICAgeyB9Ci0KLSAgICBlbnVtIENvbnN0cnVjdFdpdGhDb25zdEV4cHJU
YWcgeyBDb25zdHJ1Y3RXaXRoQ29uc3RFeHByIH07Ci0gICAgCi0gICAgdGVtcGxhdGU8dW5zaWdu
ZWQgY2hhcmFjdGVyQ291bnQ+Ci0gICAgY29uc3RleHByIFN0cmluZ0ltcGxTaGFwZSh1bnNpZ25l
ZCByZWZDb3VudCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hh
cmFjdGVyQ291bnRdLCB1bnNpZ25lZCBoYXNoQW5kRmxhZ3MsIENvbnN0cnVjdFdpdGhDb25zdEV4
cHJUYWcpCi0gICAgICAgIDogbV9yZWZDb3VudChyZWZDb3VudCkKLSAgICAgICAgLCBtX2xlbmd0
aChsZW5ndGgpCi0gICAgICAgICwgbV9kYXRhOENoYXIoY2hhcmFjdGVycykKLSAgICAgICAgLCBt
X2hhc2hBbmRGbGFncyhoYXNoQW5kRmxhZ3MpCi0gICAgeyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8
dW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+Ci0gICAgY29uc3RleHByIFN0cmluZ0ltcGxTaGFwZSh1
bnNpZ25lZCByZWZDb3VudCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBjaGFyMTZfdCAoJmNoYXJh
Y3RlcnMpW2NoYXJhY3RlckNvdW50XSwgdW5zaWduZWQgaGFzaEFuZEZsYWdzLCBDb25zdHJ1Y3RX
aXRoQ29uc3RFeHByVGFnKQotICAgICAgICA6IG1fcmVmQ291bnQocmVmQ291bnQpCi0gICAgICAg
ICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAsIG1fZGF0YTE2Q2hhcihjaGFyYWN0ZXJzKQot
ICAgICAgICAsIG1faGFzaEFuZEZsYWdzKGhhc2hBbmRGbGFncykKLSAgICB7IH0KLQotICAgIHVu
c2lnbmVkIG1fcmVmQ291bnQ7Ci0gICAgdW5zaWduZWQgbV9sZW5ndGg7Ci0gICAgdW5pb24gewot
ICAgICAgICBjb25zdCBMQ2hhciogbV9kYXRhODsKLSAgICAgICAgY29uc3QgVUNoYXIqIG1fZGF0
YTE2OwotICAgICAgICAvLyBJdCBzZWVtcyB0aGF0IHJlaW50ZXJwcmV0X2Nhc3QgcHJldmVudHMg
Y29uc3RleHByJ3MgY29tcGlsZSB0aW1lIGluaXRpYWxpemF0aW9uIGluIFZDKysuCi0gICAgICAg
IC8vIFRoZXNlIGFyZSBuZWVkZWQgdG8gYXZvaWQgcmVpbnRlcnByZXRfY2FzdC4KLSAgICAgICAg
Y29uc3QgY2hhciogbV9kYXRhOENoYXI7Ci0gICAgICAgIGNvbnN0IGNoYXIxNl90KiBtX2RhdGEx
NkNoYXI7Ci0gICAgfTsKLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzaEFuZEZsYWdzOwotfTsK
LQotY2xhc3MgU3RyaW5nSW1wbCA6IHByaXZhdGUgU3RyaW5nSW1wbFNoYXBlIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShTdHJpbmdJbXBsKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0g
ICAgZnJpZW5kIHN0cnVjdCBXVEY6OkNTdHJpbmdUcmFuc2xhdG9yOwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IGZyaWVuZCBzdHJ1Y3QgV1RGOjpIYXNoQW5kQ2hhcmFjdGVy
c1RyYW5zbGF0b3I7Ci0gICAgZnJpZW5kIHN0cnVjdCBXVEY6Okhhc2hBbmRVVEY4Q2hhcmFjdGVy
c1RyYW5zbGF0b3I7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gZnJpZW5k
IHN0cnVjdCBXVEY6OkJ1ZmZlckZyb21TdGF0aWNEYXRhVHJhbnNsYXRvcjsKLSAgICBmcmllbmQg
c3RydWN0IFdURjo6TENoYXJCdWZmZXJUcmFuc2xhdG9yOwotICAgIGZyaWVuZCBzdHJ1Y3QgV1RG
OjpTdWJzdHJpbmdUcmFuc2xhdG9yOwotICAgIGZyaWVuZCBzdHJ1Y3QgV1RGOjpVQ2hhckJ1ZmZl
clRyYW5zbGF0b3I7Ci0gICAgZnJpZW5kIGNsYXNzIEpTQzo6TExJbnQ6OkRhdGE7Ci0gICAgZnJp
ZW5kIGNsYXNzIEpTQzo6TExJbnRPZmZzZXRzRXh0cmFjdG9yOwotICAgIGZyaWVuZCBjbGFzcyBB
dG9taWNTdHJpbmdJbXBsOwotICAgIGZyaWVuZCBjbGFzcyBTeW1ib2xJbXBsOwotICAgIGZyaWVu
ZCBjbGFzcyBQcml2YXRlU3ltYm9sSW1wbDsKLSAgICBmcmllbmQgY2xhc3MgUmVnaXN0ZXJlZFN5
bWJvbEltcGw7Ci0gICAgCi1wcml2YXRlOgotICAgIGVudW0gQnVmZmVyT3duZXJzaGlwIHsKLSAg
ICAgICAgQnVmZmVySW50ZXJuYWwsCi0gICAgICAgIEJ1ZmZlck93bmVkLAotICAgICAgICBCdWZm
ZXJTdWJzdHJpbmcsCi0gICAgfTsKLQotICAgIC8vIFRoZSBib3R0b20gNiBiaXRzIGluIHRoZSBo
YXNoIGFyZSBmbGFncy4KLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2ln
bmVkIHNfZmxhZ0NvdW50ID0gNjsKLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25z
dCB1bnNpZ25lZCBzX2ZsYWdNYXNrID0gKDF1IDw8IHNfZmxhZ0NvdW50KSAtIDE7Ci0gICAgc3Rh
dGljX2Fzc2VydChzX2ZsYWdDb3VudCA8PSBTdHJpbmdIYXNoZXI6OmZsYWdDb3VudCwgIlN0cmlu
Z0hhc2hlciByZXNlcnZlcyBlbm91Z2ggYml0cyBmb3IgU3RyaW5nSW1wbCBmbGFncyIpOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19mbGFnU3RyaW5nS2luZENvdW50ID0g
NDsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ1N0cmlu
Z0tpbmRJc0F0b21pYyA9IDF1IDw8IChzX2ZsYWdTdHJpbmdLaW5kQ291bnQpOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ1N0cmluZ0tpbmRJc1N5bWJvbCA9
IDF1IDw8IChzX2ZsYWdTdHJpbmdLaW5kQ291bnQgKyAxKTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGNvbnN0IHVuc2lnbmVkIHNfaGFzaE1hc2tTdHJpbmdLaW5kID0gc19oYXNoRmxhZ1N0cmluZ0tp
bmRJc0F0b21pYyB8IHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1ib2w7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnOEJpdEJ1ZmZlciA9IDF1IDw8IDM7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnRGlkUmVwb3J0Q29z
dCA9IDF1IDw8IDI7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2hhc2hN
YXNrQnVmZmVyT3duZXJzaGlwID0gKDF1IDw8IDApIHwgKDF1IDw8IDEpOwotCi0gICAgZW51bSBT
dHJpbmdLaW5kIHsKLSAgICAgICAgU3RyaW5nTm9ybWFsID0gMHUsIC8vIG5vbi1zeW1ib2wsIG5v
bi1hdG9taWMKLSAgICAgICAgU3RyaW5nQXRvbWljID0gc19oYXNoRmxhZ1N0cmluZ0tpbmRJc0F0
b21pYywgLy8gbm9uLXN5bWJvbCwgYXRvbWljCi0gICAgICAgIFN0cmluZ1N5bWJvbCA9IHNfaGFz
aEZsYWdTdHJpbmdLaW5kSXNTeW1ib2wsIC8vIHN5bWJvbCwgbm9uLWF0b21pYwotICAgIH07Ci0K
LSAgICAvLyBGSVhNRTogdGhlcmUgaGFzIHRvIGJlIGEgbGVzcyBoYWNreSB3YXkgdG8gZG8gdGhp
cy4KLSAgICBlbnVtIEZvcmNlOEJpdCB7IEZvcmNlOEJpdENvbnN0cnVjdG9yIH07Ci0gICAgLy8g
Q3JlYXRlIGEgbm9ybWFsIDgtYml0IHN0cmluZyB3aXRoIGludGVybmFsIHN0b3JhZ2UgKEJ1ZmZl
ckludGVybmFsKQotICAgIFN0cmluZ0ltcGwodW5zaWduZWQgbGVuZ3RoLCBGb3JjZThCaXQpCi0g
ICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRJbmNyZW1lbnQsIGxlbmd0aCwgdGFp
bFBvaW50ZXI8TENoYXI+KCksIHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgU3RyaW5nTm9ybWFsIHwg
QnVmZmVySW50ZXJuYWwpCi0gICAgewotICAgICAgICBBU1NFUlQobV9kYXRhOCk7Ci0gICAgICAg
IEFTU0VSVChtX2xlbmd0aCk7Ci0KLSAgICAgICAgU1RSSU5HX1NUQVRTX0FERF84QklUX1NUUklO
RyhtX2xlbmd0aCk7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGEgbm9ybWFsIDE2LWJpdCBzdHJp
bmcgd2l0aCBpbnRlcm5hbCBzdG9yYWdlIChCdWZmZXJJbnRlcm5hbCkKLSAgICBTdHJpbmdJbXBs
KHVuc2lnbmVkIGxlbmd0aCkKLSAgICAgICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudElu
Y3JlbWVudCwgbGVuZ3RoLCB0YWlsUG9pbnRlcjxVQ2hhcj4oKSwgU3RyaW5nTm9ybWFsIHwgQnVm
ZmVySW50ZXJuYWwpCi0gICAgewotICAgICAgICBBU1NFUlQobV9kYXRhMTYpOwotICAgICAgICBB
U1NFUlQobV9sZW5ndGgpOwotCi0gICAgICAgIFNUUklOR19TVEFUU19BRERfMTZCSVRfU1RSSU5H
KG1fbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYSBTdHJpbmdJbXBsIGFkb3B0aW5n
IG93bmVyc2hpcCBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyIChCdWZmZXJPd25lZCkKLSAgICBTdHJp
bmdJbXBsKE1hbGxvY1B0cjxMQ2hhcj4gY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotICAg
ICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50SW5jcmVtZW50LCBsZW5ndGgsIGNoYXJh
Y3RlcnMubGVha1B0cigpLCBzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ05vcm1hbCB8IEJ1
ZmZlck93bmVkKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZGF0YTgpOwotICAgICAgICBBU1NF
UlQobV9sZW5ndGgpOwotCi0gICAgICAgIFNUUklOR19TVEFUU19BRERfOEJJVF9TVFJJTkcobV9s
ZW5ndGgpOwotICAgIH0KLQotICAgIGVudW0gQ29uc3RydWN0V2l0aG91dENvcHlpbmdUYWcgeyBD
b25zdHJ1Y3RXaXRob3V0Q29weWluZyB9OwotICAgIFN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ29uc3RydWN0V2l0aG91dENvcHlpbmdUYWcpCi0g
ICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291bnRJbmNyZW1lbnQsIGxlbmd0aCwgY2hh
cmFjdGVycywgU3RyaW5nTm9ybWFsIHwgQnVmZmVySW50ZXJuYWwpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9kYXRhMTYpOwotICAgICAgICBBU1NFUlQobV9sZW5ndGgpOwotCi0gICAgICAgIFNU
UklOR19TVEFUU19BRERfMTZCSVRfU1RSSU5HKG1fbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBTdHJp
bmdJbXBsKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENvbnN0cnVj
dFdpdGhvdXRDb3B5aW5nVGFnKQotICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNvdW50
SW5jcmVtZW50LCBsZW5ndGgsIGNoYXJhY3RlcnMsIHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgU3Ry
aW5nTm9ybWFsIHwgQnVmZmVySW50ZXJuYWwpCi0gICAgewotICAgICAgICBBU1NFUlQobV9kYXRh
OCk7Ci0gICAgICAgIEFTU0VSVChtX2xlbmd0aCk7Ci0KLSAgICAgICAgU1RSSU5HX1NUQVRTX0FE
RF84QklUX1NUUklORyhtX2xlbmd0aCk7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGEgU3RyaW5n
SW1wbCBhZG9wdGluZyBvd25lcnNoaXAgb2YgdGhlIHByb3ZpZGVkIGJ1ZmZlciAoQnVmZmVyT3du
ZWQpCi0gICAgU3RyaW5nSW1wbChNYWxsb2NQdHI8VUNoYXI+IGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKLSAgICAgICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEluY3JlbWVudCwg
bGVuZ3RoLCBjaGFyYWN0ZXJzLmxlYWtQdHIoKSwgU3RyaW5nTm9ybWFsIHwgQnVmZmVyT3duZWQp
Ci0gICAgewotICAgICAgICBBU1NFUlQobV9kYXRhMTYpOwotICAgICAgICBBU1NFUlQobV9sZW5n
dGgpOwotCi0gICAgICAgIFNUUklOR19TVEFUU19BRERfMTZCSVRfU1RSSU5HKG1fbGVuZ3RoKTsK
LSAgICB9Ci0KLSAgICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1
YnN0cmluZyBvZiBhbiBleGlzdGluZyA4LWJpdCBTdHJpbmdJbXBsIChCdWZmZXJTdWJzdHJpbmcp
Ci0gICAgU3RyaW5nSW1wbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
LCBSZWY8U3RyaW5nSW1wbD4mJiBiYXNlKQotICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3Jl
ZkNvdW50SW5jcmVtZW50LCBsZW5ndGgsIGNoYXJhY3RlcnMsIHNfaGFzaEZsYWc4Qml0QnVmZmVy
IHwgU3RyaW5nTm9ybWFsIHwgQnVmZmVyU3Vic3RyaW5nKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzOEJpdCgpKTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YTgpOwotICAgICAgICBBU1NFUlQobV9s
ZW5ndGgpOwotICAgICAgICBBU1NFUlQoYmFzZS0+YnVmZmVyT3duZXJzaGlwKCkgIT0gQnVmZmVy
U3Vic3RyaW5nKTsKLQotICAgICAgICBzdWJzdHJpbmdCdWZmZXIoKSA9ICZiYXNlLmxlYWtSZWYo
KTsKLQotICAgICAgICBTVFJJTkdfU1RBVFNfQUREXzhCSVRfU1RSSU5HMihtX2xlbmd0aCwgdHJ1
ZSk7Ci0gICAgfQotCi0gICAgLy8gVXNlZCB0byBjcmVhdGUgbmV3IHN0cmluZ3MgdGhhdCBhcmUg
YSBzdWJzdHJpbmcgb2YgYW4gZXhpc3RpbmcgMTYtYml0IFN0cmluZ0ltcGwgKEJ1ZmZlclN1YnN0
cmluZykKLSAgICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgsIFJlZjxTdHJpbmdJbXBsPiYmIGJhc2UpCi0gICAgICAgIDogU3RyaW5nSW1wbFNoYXBl
KHNfcmVmQ291bnRJbmNyZW1lbnQsIGxlbmd0aCwgY2hhcmFjdGVycywgU3RyaW5nTm9ybWFsIHwg
QnVmZmVyU3Vic3RyaW5nKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFpczhCaXQoKSk7Ci0gICAg
ICAgIEFTU0VSVChtX2RhdGExNik7Ci0gICAgICAgIEFTU0VSVChtX2xlbmd0aCk7Ci0gICAgICAg
IEFTU0VSVChiYXNlLT5idWZmZXJPd25lcnNoaXAoKSAhPSBCdWZmZXJTdWJzdHJpbmcpOwotCi0g
ICAgICAgIHN1YnN0cmluZ0J1ZmZlcigpID0gJmJhc2UubGVha1JlZigpOwotCi0gICAgICAgIFNU
UklOR19TVEFUU19BRERfMTZCSVRfU1RSSU5HMihtX2xlbmd0aCwgdHJ1ZSk7Ci0gICAgfQotCi1w
dWJsaWM6Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyB2b2lkIGRlc3Ryb3koU3Ry
aW5nSW1wbCopOwotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3RyaW5n
SW1wbD4gY3JlYXRlKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgTENoYXIq
LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVm
PFN0cmluZ0ltcGw+IGNyZWF0ZThCaXRJZlBvc3NpYmxlKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQg
bGVuZ3RoKTsKLSAgICB0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGlj
IFJlZjxTdHJpbmdJbXBsPiBjcmVhdGU4Qml0SWZQb3NzaWJsZShjb25zdCBWZWN0b3I8VUNoYXIs
IGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZThC
aXRJZlBvc3NpYmxlKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpOwotICAgIH0KLSAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGU4Qml0SWZQ
b3NzaWJsZShjb25zdCBVQ2hhciopOwotCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgUmVmPFN0
cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBjaGFyKiBzLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJu
IGNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4ocyksIGxlbmd0aCk7IH0KLSAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGUoY29u
c3QgTENoYXIqKTsKLSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3Jl
YXRlKGNvbnN0IGNoYXIqIHMpIHsgcmV0dXJuIGNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4ocykpOyB9Ci0KLSAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBSZWY8U3RyaW5nSW1w
bD4gY3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoU3RyaW5nSW1wbCYgcmVwLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChsZW5ndGggPD0g
cmVwLmxlbmd0aCgpKTsKLQotICAgICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgICAgIHJldHVy
biAqZW1wdHkoKTsKLQotICAgICAgICBhdXRvKiBvd25lclJlcCA9ICgocmVwLmJ1ZmZlck93bmVy
c2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyByZXAuc3Vic3RyaW5nQnVmZmVyKCkgOiAmcmVw
KTsKLQotICAgICAgICAvLyBXZSBhbGxvY2F0ZSBhIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIGJvdGgg
dGhlIFN0cmluZ0ltcGwgc3RydWN0IGFzIHdlbGwgYXMgdGhlIHBvaW50ZXIgdG8gdGhlIG93bmVy
IHN0cmluZy4KLSAgICAgICAgYXV0byogc3RyaW5nSW1wbCA9IHN0YXRpY19jYXN0PFN0cmluZ0lt
cGwqPihmYXN0TWFsbG9jKGFsbG9jYXRpb25TaXplPFN0cmluZ0ltcGwqPigxKSkpOwotICAgICAg
ICBpZiAocmVwLmlzOEJpdCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgKE5v
dE51bGwsIHN0cmluZ0ltcGwpIFN0cmluZ0ltcGwocmVwLm1fZGF0YTggKyBvZmZzZXQsIGxlbmd0
aCwgKm93bmVyUmVwKSk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IChOb3ROdWxsLCBz
dHJpbmdJbXBsKSBTdHJpbmdJbXBsKHJlcC5tX2RhdGExNiArIG9mZnNldCwgbGVuZ3RoLCAqb3du
ZXJSZXApKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4K
LSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlRnJvbUxpdGVy
YWwoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlckNvdW50XSkKLSAgICB7Ci0gICAg
ICAgIENPTVBJTEVfQVNTRVJUKGNoYXJhY3RlckNvdW50ID4gMSwgU3RyaW5nSW1wbEZyb21MaXRl
cmFsTm90RW1wdHkpOwotICAgICAgICBDT01QSUxFX0FTU0VSVCgoY2hhcmFjdGVyQ291bnQgLSAx
IDw9ICgodW5zaWduZWQofjApIC0gc2l6ZW9mKFN0cmluZ0ltcGwpKSAvIHNpemVvZihMQ2hhcikp
KSwgU3RyaW5nSW1wbEZyb21MaXRlcmFsQ2Fubm90T3ZlcmZsb3cpOwotCi0gICAgICAgIHJldHVy
biBjcmVhdGVXaXRob3V0Q29weWluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hh
cmFjdGVycyksIGNoYXJhY3RlckNvdW50IC0gMSk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRy
YW5zaXRpb24gb2ZmIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byBjcmVhdGVXaXRob3V0Q29weWluZyBp
bnN0ZWFkLgotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+
IGNyZWF0ZUZyb21MaXRlcmFsKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3Jl
YXRlRnJvbUxpdGVyYWwoY29uc3QgY2hhciogY2hhcmFjdGVycyk7Ci0KLSAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGVXaXRob3V0Q29weWluZyhj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGVXaXRob3V0Q29weWluZyhj
b25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dW5zaWduZWQgbGVuZ3RoLCBMQ2hhciomIGRhdGEpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoLCBVQ2hhciomIGRhdGEpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgQUxX
QVlTX0lOTElORSBSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNp
Z25lZCBsZW5ndGgsIFQqJiBvdXRwdXQpCi0gICAgewotICAgICAgICBpZiAoIWxlbmd0aCkgewot
ICAgICAgICAgICAgb3V0cHV0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHJldHVybiBlbXB0eSgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxlbmd0aCA+ICgoc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpIC0gc2l6ZW9mKFN0cmluZ0ltcGwpKSAvIHNpemVvZihUKSkpIHsK
LSAgICAgICAgICAgIG91dHB1dCA9IG51bGxwdHI7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmdJbXBsKiByZXN1bHRJbXBsOwotICAgICAgICBp
ZiAoIXRyeUZhc3RNYWxsb2MoYWxsb2NhdGlvblNpemU8VD4obGVuZ3RoKSkuZ2V0VmFsdWUocmVz
dWx0SW1wbCkpIHsKLSAgICAgICAgICAgIG91dHB1dCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBvdXRwdXQgPSByZXN1bHRJbXBsLT50
YWlsUG9pbnRlcjxUPigpOwotCi0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RJbnRlcm5hbDxUPihy
ZXN1bHRJbXBsLCBsZW5ndGgpOwotICAgIH0KLQotICAgIC8vIFJlYWxsb2NhdGUgdGhlIFN0cmlu
Z0ltcGwuIFRoZSBvcmlnaW5hbFN0cmluZyBtdXN0IGJlIG9ubHkgb3duZWQgYnkgdGhlIFJlZiwK
LSAgICAvLyBhbmQgdGhlIGJ1ZmZlciBvd25lcnNoaXAgbXVzdCBiZSBCdWZmZXJJbnRlcm5hbC4g
SnVzdCBsaWtlIHRoZSBpbnB1dCBwb2ludGVyIG9mIHJlYWxsb2MoKSwKLSAgICAvLyB0aGUgb3Jp
Z2luYWxTdHJpbmcgY2FuJ3QgYmUgdXNlZCBhZnRlciB0aGlzIGZ1bmN0aW9uLgotICAgIHN0YXRp
YyBSZWY8U3RyaW5nSW1wbD4gcmVhbGxvY2F0ZShSZWY8U3RyaW5nSW1wbD4mJiBvcmlnaW5hbFN0
cmluZywgdW5zaWduZWQgbGVuZ3RoLCBMQ2hhciomIGRhdGEpOwotICAgIHN0YXRpYyBSZWY8U3Ry
aW5nSW1wbD4gcmVhbGxvY2F0ZShSZWY8U3RyaW5nSW1wbD4mJiBvcmlnaW5hbFN0cmluZywgdW5z
aWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpOwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGZsYWdz
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cmluZ0ltcGwsIG1faGFzaEFuZEZs
YWdzKTsgfQotICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFnSXM4Qml0KCkgeyByZXR1cm4gc19oYXNo
RmxhZzhCaXRCdWZmZXI7IH0KLSAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ0lzQXRvbWljKCkgeyBy
ZXR1cm4gc19oYXNoRmxhZ1N0cmluZ0tpbmRJc0F0b21pYzsgfQotICAgIHN0YXRpYyB1bnNpZ25l
ZCBmbGFnSXNTeW1ib2woKSB7IHJldHVybiBzX2hhc2hGbGFnU3RyaW5nS2luZElzU3ltYm9sOyB9
Ci0gICAgc3RhdGljIHVuc2lnbmVkIG1hc2tTdHJpbmdLaW5kKCkgeyByZXR1cm4gc19oYXNoTWFz
a1N0cmluZ0tpbmQ7IH0KLSAgICBzdGF0aWMgdW5zaWduZWQgZGF0YU9mZnNldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihTdHJpbmdJbXBsLCBtX2RhdGE4KTsgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhclR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPgotICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRvcHQoVmVjdG9yPENoYXJU
eXBlLCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYmIHZlY3RvcikKLSAgICB7Ci0g
ICAgICAgIGlmIChzaXplX3Qgc2l6ZSA9IHZlY3Rvci5zaXplKCkpIHsKLSAgICAgICAgICAgIEFT
U0VSVCh2ZWN0b3IuZGF0YSgpKTsKLSAgICAgICAgICAgIGlmIChzaXplID4gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJpbmdJbXBsKHZlY3Rvci5yZWxlYXNlQnVm
ZmVyKCksIHNpemUpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKmVtcHR5KCk7Ci0gICAg
fQotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gYWRv
cHQoU3RyaW5nQnVmZmVyPFVDaGFyPiYmKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3Rh
dGljIFJlZjxTdHJpbmdJbXBsPiBhZG9wdChTdHJpbmdCdWZmZXI8TENoYXI+JiYpOwotCi0gICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBzdGF0aWMg
cHRyZGlmZl90IGxlbmd0aE1lbW9yeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihT
dHJpbmdJbXBsLCBtX2xlbmd0aCk7IH0KLSAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzaEFuZEZsYWdzICYgc19oYXNoRmxhZzhCaXRCdWZmZXI7IH0KLQotICAgIEFMV0FZU19J
TkxJTkUgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QgeyBBU1NFUlQoaXM4Qml0KCkp
OyByZXR1cm4gbV9kYXRhODsgfQotICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMxNigpIGNvbnN0IHsgQVNTRVJUKCFpczhCaXQoKSk7IHJldHVybiBtX2RhdGExNjsgfQot
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgotICAgIEFMV0FZU19JTkxJTkUgY29u
c3QgQ2hhclR5cGUgKmNoYXJhY3RlcnMoKSBjb25zdDsKLQotICAgIHNpemVfdCBjb3N0KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIC8vIEZvciBzdWJzdHJpbmdzLCByZXR1cm4gdGhlIGNvc3Qgb2Yg
dGhlIGJhc2Ugc3RyaW5nLgotICAgICAgICBpZiAoYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVy
U3Vic3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuIHN1YnN0cmluZ0J1ZmZlcigpLT5jb3N0KCk7
Ci0KLSAgICAgICAgLy8gTm90ZTogd2UgbXVzdCBub3QgYWx0ZXIgdGhlIG1faGFzaEFuZEZsYWdz
IGZpZWxkIGluIGluc3RhbmNlcyBvZiBTdGF0aWNTdHJpbmdJbXBsLgotICAgICAgICAvLyBXZSBl
bnN1cmUgdGhpcyBieSBwcmUtc2V0dGluZyB0aGUgc19oYXNoRmxhZ0RpZFJlcG9ydENvc3QgYml0
IGluIGFsbCBpbnN0YW5jZXMgb2YKLSAgICAgICAgLy8gU3RhdGljU3RyaW5nSW1wbC4gQXMgYSBy
ZXN1bHQsIFN0YXRpY1N0cmluZ0ltcGwgaW5zdGFuY2VzIHdpbGwgYWx3YXlzIHJldHVybiBhIGNv
c3Qgb2YKLSAgICAgICAgLy8gMCBoZXJlIGFuZCBhdm9pZCBtb2RpZnlpbmcgbV9oYXNoQW5kRmxh
Z3MuCi0gICAgICAgIGlmIChtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdEaWRSZXBvcnRDb3N0
KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgbV9oYXNoQW5kRmxhZ3MgfD0gc19o
YXNoRmxhZ0RpZFJlcG9ydENvc3Q7Ci0gICAgICAgIHNpemVfdCByZXN1bHQgPSBtX2xlbmd0aDsK
LSAgICAgICAgaWYgKCFpczhCaXQoKSkKLSAgICAgICAgICAgIHJlc3VsdCA8PD0gMTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IGNvc3REdXJpbmdHQygp
Ci0gICAgewotICAgICAgICBpZiAoaXNTdGF0aWMoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmlu
ZykKLSAgICAgICAgICAgIHJldHVybiBkaXZpZGVSb3VuZGVkVXAoc3Vic3RyaW5nQnVmZmVyKCkt
PmNvc3REdXJpbmdHQygpLCByZWZDb3VudCgpKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBy
ZXN1bHQgPSBtX2xlbmd0aDsKLSAgICAgICAgaWYgKCFpczhCaXQoKSkKLSAgICAgICAgICAgIHJl
c3VsdCA8PD0gMTsKLSAgICAgICAgcmV0dXJuIGRpdmlkZVJvdW5kZWRVcChyZXN1bHQsIHJlZkNv
dW50KCkpOwotICAgIH0KLQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzaXplX3Qgc2l6ZUlu
Qnl0ZXMoKSBjb25zdDsKLQotICAgIFN0cmluZ0tpbmQgc3RyaW5nS2luZCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFN0cmluZ0tpbmQ+KG1faGFzaEFuZEZsYWdzICYgc19oYXNoTWFza1N0
cmluZ0tpbmQpOyB9Ci0gICAgYm9vbCBpc1N5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEFu
ZEZsYWdzICYgc19oYXNoRmxhZ1N0cmluZ0tpbmRJc1N5bWJvbDsgfQotICAgIGJvb2wgaXNBdG9t
aWMoKSBjb25zdCB7IHJldHVybiBtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdTdHJpbmdLaW5k
SXNBdG9taWM7IH0KLQotICAgIHZvaWQgc2V0SXNBdG9taWMoYm9vbCBpc0F0b21pYykKLSAgICB7
Ci0gICAgICAgIEFTU0VSVCghaXNTdGF0aWMoKSk7Ci0gICAgICAgIEFTU0VSVCghaXNTeW1ib2wo
KSk7Ci0gICAgICAgIGlmIChpc0F0b21pYykgewotICAgICAgICAgICAgbV9oYXNoQW5kRmxhZ3Mg
fD0gc19oYXNoRmxhZ1N0cmluZ0tpbmRJc0F0b21pYzsKLSAgICAgICAgICAgIEFTU0VSVChzdHJp
bmdLaW5kKCkgPT0gU3RyaW5nQXRvbWljKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IG1faGFzaEFuZEZsYWdzICY9IH5zX2hhc2hGbGFnU3RyaW5nS2luZElzQXRvbWljOwotICAgICAg
ICAgICAgQVNTRVJUKHN0cmluZ0tpbmQoKSA9PSBTdHJpbmdOb3JtYWwpOwotICAgICAgICB9Ci0g
ICAgfQotCi0jaWYgU1RSSU5HX1NUQVRTCi0gICAgYm9vbCBpc1N1YlN0cmluZygpIGNvbnN0IHsg
cmV0dXJuIGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZzsgfQotI2VuZGlmCi0K
LSAgICBzdGF0aWMgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIENTdHJpbmcgdXRmOEZvckNoYXJhY3Rl
cnMoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGlj
IFdURl9FWFBPUlRfU1RSSU5HX0FQSSBDU3RyaW5nIHV0ZjhGb3JDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENvbnZlcnNpb25Nb2RlID0gTGVuaWVu
dENvbnZlcnNpb24pOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBDU3RyaW5nIHV0ZjhGb3JS
YW5nZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgQ29udmVyc2lvbk1vZGUgPSBM
ZW5pZW50Q29udmVyc2lvbikgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIENTdHJp
bmcgdXRmOChDb252ZXJzaW9uTW9kZSA9IExlbmllbnRDb252ZXJzaW9uKSBjb25zdDsKLQotcHJp
dmF0ZToKLSAgICBzdGF0aWMgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgdXRmOEltcGwoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgY2hhciomIGJ1ZmZlciwgc2l6
ZV90IGJ1ZmZlclNpemUsIENvbnZlcnNpb25Nb2RlKTsKLSAgICAKLSAgICAvLyBUaGUgaGlnaCBi
aXRzIG9mICdoYXNoJyBhcmUgYWx3YXlzIGVtcHR5LCBidXQgd2UgcHJlZmVyIHRvIHN0b3JlIG91
ciBmbGFncwotICAgIC8vIGluIHRoZSBsb3cgYml0cyBiZWNhdXNlIGl0IG1ha2VzIHRoZW0gc2xp
Z2h0bHkgbW9yZSBlZmZpY2llbnQgdG8gYWNjZXNzLgotICAgIC8vIFNvLCB3ZSBzaGlmdCBsZWZ0
IGFuZCByaWdodCB3aGVuIHNldHRpbmcgYW5kIGdldHRpbmcgb3VyIGhhc2ggY29kZS4KLSAgICB2
b2lkIHNldEhhc2godW5zaWduZWQgaGFzaCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCgh
aGFzSGFzaCgpKTsKLSAgICAgICAgQVNTRVJUKCFpc1N0YXRpYygpKTsKLSAgICAgICAgLy8gTXVs
dGlwbGUgY2xpZW50cyBhc3N1bWUgdGhhdCBTdHJpbmdIYXNoZXIgaXMgdGhlIGNhbm9uaWNhbCBz
dHJpbmcgaGFzaCBmdW5jdGlvbi4KLSAgICAgICAgQVNTRVJUKGhhc2ggPT0gKGlzOEJpdCgpID8g
U3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhtX2RhdGE4LCBtX2xlbmd0
aCkgOiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKG1fZGF0YTE2LCBt
X2xlbmd0aCkpKTsKLSAgICAgICAgQVNTRVJUKCEoaGFzaCAmIChzX2ZsYWdNYXNrIDw8ICg4ICog
c2l6ZW9mKGhhc2gpIC0gc19mbGFnQ291bnQpKSkpOyAvLyBWZXJpZnkgdGhhdCBlbm91Z2ggaGln
aCBiaXRzIGFyZSBlbXB0eS4KLSAgICAgICAgCi0gICAgICAgIGhhc2ggPDw9IHNfZmxhZ0NvdW50
OwotICAgICAgICBBU1NFUlQoIShoYXNoICYgbV9oYXNoQW5kRmxhZ3MpKTsgLy8gVmVyaWZ5IHRo
YXQgZW5vdWdoIGxvdyBiaXRzIGFyZSBlbXB0eSBhZnRlciBzaGlmdC4KLSAgICAgICAgQVNTRVJU
KGhhc2gpOyAvLyBWZXJpZnkgdGhhdCAwIGlzIGEgdmFsaWQgc2VudGluZWwgaGFzaCB2YWx1ZS4K
LQotICAgICAgICBtX2hhc2hBbmRGbGFncyB8PSBoYXNoOyAvLyBTdG9yZSBoYXNoIHdpdGggZmxh
Z3MgaW4gbG93IGJpdHMuCi0gICAgfQotCi0gICAgdW5zaWduZWQgcmF3SGFzaCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9oYXNoQW5kRmxhZ3MgPj4gc19mbGFnQ291bnQ7Ci0gICAg
fQotCi1wdWJsaWM6Ci0gICAgYm9vbCBoYXNIYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiByYXdIYXNoKCkgIT0gMDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBleGlzdGluZ0hhc2go
KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc0hhc2goKSk7Ci0gICAgICAgIHJldHVy
biByYXdIYXNoKCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZiAoaGFzSGFzaCgpKQotICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nSGFzaCgp
OwotICAgICAgICByZXR1cm4gaGFzaFNsb3dDYXNlKCk7Ci0gICAgfQotCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIHVuc2lnbmVkIGNvbmN1cnJlbnRIYXNoKCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25l
ZCBzeW1ib2xBd2FyZUhhc2goKSBjb25zdDsKLSAgICB1bnNpZ25lZCBleGlzdGluZ1N5bWJvbEF3
YXJlSGFzaCgpIGNvbnN0OwotCi0gICAgYm9vbCBpc1N0YXRpYygpIGNvbnN0IHsgcmV0dXJuIG1f
cmVmQ291bnQgJiBzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nOyB9Ci0KLSAgICBpbmxpbmUg
c2l6ZV90IHJlZkNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3JlZkNvdW50
IC8gc19yZWZDb3VudEluY3JlbWVudDsKLSAgICB9Ci0gICAgCi0gICAgaW5saW5lIGJvb2wgaGFz
T25lUmVmKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3JlZkNvdW50ID09IHNfcmVm
Q291bnRJbmNyZW1lbnQ7Ci0gICAgfQotICAgIAotICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWZ1
bCBmb3IgYXNzZXJ0aW9ucy4KLSAgICBpbmxpbmUgYm9vbCBoYXNBdExlYXN0T25lUmVmKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIW1fcmVmQ291bnQ7Ci0gICAgfQotCi0gICAgaW5s
aW5lIHZvaWQgcmVmKCkKLSAgICB7Ci0gICAgICAgIFNUUklOR19TVEFUU19SRUZfU1RSSU5HKCp0
aGlzKTsKLQotICAgICAgICBtX3JlZkNvdW50ICs9IHNfcmVmQ291bnRJbmNyZW1lbnQ7Ci0gICAg
fQotCi0gICAgaW5saW5lIHZvaWQgZGVyZWYoKQotICAgIHsKLSAgICAgICAgU1RSSU5HX1NUQVRT
X0RFUkVGX1NUUklORygqdGhpcyk7Ci0KLSAgICAgICAgdW5zaWduZWQgdGVtcFJlZkNvdW50ID0g
bV9yZWZDb3VudCAtIHNfcmVmQ291bnRJbmNyZW1lbnQ7Ci0gICAgICAgIGlmICghdGVtcFJlZkNv
dW50KSB7Ci0gICAgICAgICAgICBTdHJpbmdJbXBsOjpkZXN0cm95KHRoaXMpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1fcmVmQ291bnQgPSB0ZW1wUmVmQ291bnQ7
Ci0gICAgfQotCi0gICAgY2xhc3MgU3RhdGljU3RyaW5nSW1wbCA6IHByaXZhdGUgU3RyaW5nSW1w
bFNoYXBlIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhdGljU3RyaW5nSW1wbCk7
Ci0gICAgcHVibGljOgotICAgICAgICAvLyBVc2VkIHRvIGNvbnN0cnVjdCBzdGF0aWMgc3RyaW5n
cywgd2hpY2ggaGF2ZSBhbiBzcGVjaWFsIHJlZkNvdW50IHRoYXQgY2FuIG5ldmVyIGhpdCB6ZXJv
LgotICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0YXRpYyBzdHJpbmcgd2lsbCBuZXZl
ciBiZSBkZXN0cm95ZWQsIHdoaWNoIGlzIGltcG9ydGFudCBiZWNhdXNlCi0gICAgICAgIC8vIHN0
YXRpYyBzdHJpbmdzIHdpbGwgYmUgc2hhcmVkIGFjcm9zcyB0aHJlYWRzICYgcmVmLWNvdW50ZWQg
aW4gYSBub24tdGhyZWFkc2FmZSBtYW5uZXIuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEluIG9y
ZGVyIHRvIG1ha2UgU3RhdGljU3RyaW5nSW1wbCB0aHJlYWQgc2FmZSwgd2UgYWxzbyBuZWVkIHRv
IGVuc3VyZSB0aGF0IHRoZSByZXN0IG9mCi0gICAgICAgIC8vIHRoZSBmaWVsZHMgYXJlIG5ldmVy
IG11dGF0ZWQgYnkgdGhyZWFkcy4gV2UgaGF2ZSB0aGlzIGd1YXJhbnRlZSBiZWNhdXNlOgotICAg
ICAgICAvLwotICAgICAgICAvLyAxLiBtX2xlbmd0aCBpcyBvbmx5IHNldCBvbiBjb25zdHJ1Y3Rp
b24gYW5kIG5ldmVyIG11dGF0ZWQgdGhlcmVhZnRlci4KLSAgICAgICAgLy8KLSAgICAgICAgLy8g
Mi4gbV9kYXRhOCBhbmQgbV9kYXRhMTYgYXJlIG9ubHkgc2V0IG9uIGNvbnN0cnVjdGlvbiBhbmQg
bmV2ZXIgbXV0YXRlZCB0aGVyZWFmdGVyLgotICAgICAgICAvLyAgICBXZSBhbHNvIGtub3cgdGhh
dCBhIFN0cmluZ0ltcGwgbmV2ZXIgY2hhbmdlcyBmcm9tIDggYml0IHRvIDE2IGJpdCBiZWNhdXNl
IHRoZXJlCi0gICAgICAgIC8vICAgIGlzIG5vIHdheSB0byBzZXQvY2xlYXIgdGhlIHNfaGFzaEZs
YWc4Qml0QnVmZmVyIGZsYWcgb3RoZXIgdGhhbiBhdCBjb25zdHJ1Y3Rpb24uCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIDMuIG1faGFzaEFuZEZsYWdzIHdpbGwgbm90IGJlIG11dGF0ZWQgYnkgZGlm
ZmVyZW50IHRocmVhZHMgYmVjYXVzZToKLSAgICAgICAgLy8KLSAgICAgICAgLy8gICAgYS4gU3Rh
dGljU3RyaW5nSW1wbCdzIGNvbnN0cnVjdG9yIHNldHMgdGhlIHNfaGFzaEZsYWdEaWRSZXBvcnRD
b3N0IGZsYWcgdG8gZW5zdXJlCi0gICAgICAgIC8vICAgICAgIHRoYXQgU3RyaW5nSW1wbDo6Y29z
dCgpIHJldHVybnMgZWFybHkuCi0gICAgICAgIC8vICAgICAgIFRoaXMgbWVhbnMgU3RhdGljU3Ry
aW5nSW1wbCBjb3N0cyBhcmUgbm90IGNvdW50ZWQuIEJ1dCBzaW5jZSB0aGVyZSBzaG91bGQgb25s
eQotICAgICAgICAvLyAgICAgICBiZSBhIGZpbml0ZSBzZXQgb2YgU3RhdGljU3RyaW5nSW1wbHMs
IHRoZWlyIGNvc3QgY2FuIGJlIGFnZ3JlZ2F0ZWQgaW50byBhIHNpbmdsZQotICAgICAgICAvLyAg
ICAgICBzeXN0ZW0gY29zdCBpZiBuZWVkZWQuCi0gICAgICAgIC8vICAgIGIuIHNldElzQXRvbWlj
KCkgaXMgbmV2ZXIgY2FsbGVkIG9uIGEgU3RhdGljU3RyaW5nSW1wbC4KLSAgICAgICAgLy8gICAg
ICAgc2V0SXNBdG9taWMoKSBhc3NlcnRzICFpc1N0YXRpYygpLgotICAgICAgICAvLyAgICBjLiBz
ZXRIYXNoKCkgaXMgbmV2ZXIgY2FsbGVkIG9uIGEgU3RhdGljU3RyaW5nSW1wbC4KLSAgICAgICAg
Ly8gICAgICAgU3RhdGljU3RyaW5nSW1wbCdzIGNvbnN0cnVjdG9yIHNldHMgdGhlIGhhc2ggb24g
Y29uc3RydWN0aW9uLgotICAgICAgICAvLyAgICAgICBTdHJpbmdJbXBsOjpoYXNoKCkgb25seSBz
ZXRzIGEgbmV3IGhhc2ggaWZmICFoYXNIYXNoKCkuCi0gICAgICAgIC8vICAgICAgIEFkZGl0aW9u
YWxseSwgU3RyaW5nSW1wbDo6c2V0SGFzaCgpIGFzc2VydHMgaGFzSGFzaCgpIGFuZCAhaXNTdGF0
aWMoKS4KLQotICAgICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KLSAgICAg
ICAgY29uc3RleHByIFN0YXRpY1N0cmluZ0ltcGwoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2No
YXJhY3RlckNvdW50XSwgU3RyaW5nS2luZCBzdHJpbmdLaW5kID0gU3RyaW5nTm9ybWFsKQotICAg
ICAgICAgICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZywg
Y2hhcmFjdGVyQ291bnQgLSAxLCBjaGFyYWN0ZXJzLAotICAgICAgICAgICAgICAgIHNfaGFzaEZs
YWc4Qml0QnVmZmVyIHwgc19oYXNoRmxhZ0RpZFJlcG9ydENvc3QgfCBzdHJpbmdLaW5kIHwgQnVm
ZmVySW50ZXJuYWwgfCAoU3RyaW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9w
OEJpdHMoY2hhcmFjdGVycykgPDwgc19mbGFnQ291bnQpLCBDb25zdHJ1Y3RXaXRoQ29uc3RFeHBy
KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFy
YWN0ZXJDb3VudD4KLSAgICAgICAgY29uc3RleHByIFN0YXRpY1N0cmluZ0ltcGwoY29uc3QgY2hh
cjE2X3QgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0sIFN0cmluZ0tpbmQgc3RyaW5nS2lu
ZCA9IFN0cmluZ05vcm1hbCkKLSAgICAgICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291
bnRGbGFnSXNTdGF0aWNTdHJpbmcsIGNoYXJhY3RlckNvdW50IC0gMSwgY2hhcmFjdGVycywKLSAg
ICAgICAgICAgICAgICBzX2hhc2hGbGFnRGlkUmVwb3J0Q29zdCB8IHN0cmluZ0tpbmQgfCBCdWZm
ZXJJbnRlcm5hbCB8IChTdHJpbmdIYXNoZXI6OmNvbXB1dGVMaXRlcmFsSGFzaEFuZE1hc2tUb3A4
Qml0cyhjaGFyYWN0ZXJzKSA8PCBzX2ZsYWdDb3VudCksIENvbnN0cnVjdFdpdGhDb25zdEV4cHIp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIG9wZXJhdG9yIFN0cmluZ0ltcGwmKCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFN0cmluZ0lt
cGwqPih0aGlzKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBXVEZfRVhQT1JUREFUQSBzdGF0
aWMgU3RhdGljU3RyaW5nSW1wbCBzX2F0b21pY0VtcHR5U3RyaW5nOwotICAgIEFMV0FZU19JTkxJ
TkUgc3RhdGljIFN0cmluZ0ltcGwqIGVtcHR5KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxT
dHJpbmdJbXBsKj4oJnNfYXRvbWljRW1wdHlTdHJpbmcpOyB9Ci0KLSAgICAvLyBGSVhNRTogRG9l
cyB0aGlzIHJlYWxseSBiZWxvbmcgaW4gU3RyaW5nSW1wbD8KLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gc3RhdGljIHZvaWQgY29weUNoYXJzKFQqIGRlc3RpbmF0aW9uLCBjb25zdCBUKiBzb3Vy
Y2UsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMpCi0gICAgewotICAgICAgICBpZiAobnVtQ2hhcmFj
dGVycyA9PSAxKSB7Ci0gICAgICAgICAgICAqZGVzdGluYXRpb24gPSAqc291cmNlOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291
cmNlLCBudW1DaGFyYWN0ZXJzICogc2l6ZW9mKFQpKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5M
SU5FIHN0YXRpYyB2b2lkIGNvcHlDaGFycyhVQ2hhciogZGVzdGluYXRpb24sIGNvbnN0IExDaGFy
KiBzb3VyY2UsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMpCi0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVyczsgKytpKQotICAgICAgICAgICAgZGVzdGlu
YXRpb25baV0gPSBzb3VyY2VbaV07Ci0gICAgfQotCi0gICAgLy8gU29tZSBzdHJpbmcgZmVhdHVy
ZXMsIGxpa2UgcmVmY291bnRpbmcgYW5kIHRoZSBhdG9taWNpdHkgZmxhZywgYXJlIG5vdAotICAg
IC8vIHRocmVhZC1zYWZlLiBXZSBhY2hpZXZlIHRocmVhZCBzYWZldHkgYnkgaXNvbGF0aW9uLCBn
aXZpbmcgZWFjaCB0aHJlYWQKLSAgICAvLyBpdHMgb3duIGNvcHkgb2YgdGhlIHN0cmluZy4KLSAg
ICBSZWY8U3RyaW5nSW1wbD4gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7Ci0KLSAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IHN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2ln
bmVkIGxlbiA9IFVJTlRfTUFYKTsKLQotICAgIFVDaGFyIGF0KHVuc2lnbmVkIGkpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgbV9sZW5n
dGgpOwotICAgICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gbV9kYXRhOFtp
XTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YTE2W2ldOwotICAgIH0KLSAgICBVQ2hhciBvcGVyYXRv
cltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9Ci0gICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIFVDaGFyMzIgY2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCk7Ci0KLSAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKCk7Ci0KLSAg
ICBpbnQgdG9JbnRTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKTsKLSAgICB1bnNp
Z25lZCB0b1VJbnRTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKTsKLSAgICBpbnQ2
NF90IHRvSW50NjRTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKTsKLSAgICB1aW50
NjRfdCB0b1VJbnQ2NFN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApOwotICAgIGlu
dHB0cl90IHRvSW50UHRyU3RyaWN0KGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCk7Ci0KLSAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgaW50IHRvSW50KGJvb2wqIG9rID0gMCk7IC8vIGlnbm9y
ZXMgdHJhaWxpbmcgZ2FyYmFnZQotICAgIHVuc2lnbmVkIHRvVUludChib29sKiBvayA9IDApOyAv
LyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKLSAgICBpbnQ2NF90IHRvSW50NjQoYm9vbCogb2sg
PSAwKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCi0gICAgdWludDY0X3QgdG9VSW50NjQo
Ym9vbCogb2sgPSAwKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCi0gICAgaW50cHRyX3Qg
dG9JbnRQdHIoYm9vbCogb2sgPSAwKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCi0KLSAg
ICAvLyBGSVhNRTogTGlrZSB0aGUgc3RyaWN0IGZ1bmN0aW9ucyBhYm92ZSwgdGhlc2UgZ2l2ZSBm
YWxzZSBmb3IgIm9rIiB3aGVuIHRoZXJlIGlzIHRyYWlsaW5nIGdhcmJhZ2UuCi0gICAgLy8gTGlr
ZSB0aGUgbm9uLXN0cmljdCBmdW5jdGlvbnMgYWJvdmUsIHRoZXNlIHJldHVybiB0aGUgdmFsdWUg
d2hlbiB0aGVyZSBpcyB0cmFpbGluZyBnYXJiYWdlLgotICAgIC8vIEl0IHdvdWxkIGJlIGJldHRl
ciBpZiB0aGVzZSB3ZXJlIG1vcmUgY29uc2lzdGVudCB3aXRoIHRoZSBhYm92ZSBmdW5jdGlvbnMg
aW5zdGVhZC4KLSAgICBkb3VibGUgdG9Eb3VibGUoYm9vbCogb2sgPSAwKTsKLSAgICBmbG9hdCB0
b0Zsb2F0KGJvb2wqIG9rID0gMCk7Ci0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0
cmluZ0ltcGw+IGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJ
TkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpOwotICAgIFdU
Rl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvTG93ZXJjYXNlV2l0
aG91dExvY2FsZSgpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4g
Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXg4Qml0
KHVuc2lnbmVkKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IGNv
bnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhMb2NhbGUoY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
UmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUoY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKTsKLQotICAgIFJlZjxTdHJpbmdJbXBsPiBmb2xkQ2Fz
ZSgpOwotCi0gICAgUmVmPFN0cmluZ0ltcGw+IHN0cmlwV2hpdGVTcGFjZSgpOwotICAgIFJlZjxT
dHJpbmdJbXBsPiBzdHJpcFdoaXRlU3BhY2UoSXNXaGl0ZVNwYWNlRnVuY3Rpb25QdHIpOwotICAg
IFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gc2ltcGxpZnlXaGl0ZVNwYWNl
KCk7Ci0gICAgUmVmPFN0cmluZ0ltcGw+IHNpbXBsaWZ5V2hpdGVTcGFjZShJc1doaXRlU3BhY2VG
dW5jdGlvblB0cik7Ci0KLSAgICBSZWY8U3RyaW5nSW1wbD4gcmVtb3ZlQ2hhcmFjdGVycyhDaGFy
YWN0ZXJNYXRjaEZ1bmN0aW9uUHRyKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+
Ci0gICAgQUxXQVlTX0lOTElORSBSZWY8U3RyaW5nSW1wbD4gcmVtb3ZlQ2hhcmFjdGVycyhjb25z
dCBDaGFyVHlwZSogY2hhcmFjdGVycywgQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0cik7Ci0KLSAg
ICBzaXplX3QgZmluZChMQ2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIHN0YXJ0ID0gMCk7Ci0gICAg
c2l6ZV90IGZpbmQoY2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIHN0YXJ0ID0gMCk7Ci0gICAgc2l6
ZV90IGZpbmQoVUNoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBzdGFydCA9IDApOwotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBzaXplX3QgZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyLCB1
bnNpZ25lZCBpbmRleCA9IDApOwotICAgIHNpemVfdCBmaW5kKGNvbnN0IExDaGFyKiwgdW5zaWdu
ZWQgaW5kZXggPSAwKTsKLSAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBmaW5kKGNvbnN0IGNoYXIq
IHMsIHVuc2lnbmVkIGluZGV4ID0gMCkgeyByZXR1cm4gZmluZChyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4ocyksIGluZGV4KTsgfQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzaXpl
X3QgZmluZChTdHJpbmdJbXBsKik7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHNpemVfdCBm
aW5kKFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBpbmRleCk7Ci0gICAgc2l6ZV90IGZpbmRJZ25vcmlu
Z0Nhc2UoY29uc3QgTENoYXIqLCB1bnNpZ25lZCBpbmRleCA9IDApOwotICAgIEFMV0FZU19JTkxJ
TkUgc2l6ZV90IGZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogcywgdW5zaWduZWQgaW5kZXgg
PSAwKSB7IHJldHVybiBmaW5kSWdub3JpbmdDYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihzKSwgaW5kZXgpOyB9Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHNpemVfdCBmaW5k
SWdub3JpbmdDYXNlKFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBpbmRleCA9IDApOwotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBzaXplX3QgZmluZElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmlu
Z0ltcGwmKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc2l6ZV90IGZpbmRJZ25v
cmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdJbXBsJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQpIGNv
bnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzaXplX3QgZmluZElnbm9yaW5nQVNDSUlD
YXNlKGNvbnN0IFN0cmluZ0ltcGwqKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
c2l6ZV90IGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdJbXBsKiwgdW5zaWduZWQg
c3RhcnRPZmZzZXQpIGNvbnN0OwotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHNpemVfdCBy
ZXZlcnNlRmluZChVQ2hhciwgdW5zaWduZWQgaW5kZXggPSBVSU5UX01BWCk7Ci0gICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIHNpemVfdCByZXZlcnNlRmluZChTdHJpbmdJbXBsKiwgdW5zaWduZWQg
aW5kZXggPSBVSU5UX01BWCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHNpemVfdCByZXZl
cnNlRmluZElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiwgdW5zaWduZWQgaW5kZXggPSBVSU5UX01B
WCk7Ci0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBzdGFydHNXaXRoKGNvbnN0IFN0
cmluZ0ltcGwqKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBzdGFydHNX
aXRoKGNvbnN0IFN0cmluZ0ltcGwmKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
Ym9vbCBzdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCopIGNvbnN0
OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIHN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJ
Q2FzZShjb25zdCBTdHJpbmdJbXBsJikgY29uc3Q7Ci0gICAgYm9vbCBzdGFydHNXaXRoKFN0cmlu
Z0ltcGwqIHN0ciwgYm9vbCBjYXNlU2Vuc2l0aXZlKSB7IHJldHVybiBjYXNlU2Vuc2l0aXZlID8g
c3RhcnRzV2l0aChzdHIpIDogKHJldmVyc2VGaW5kSWdub3JpbmdDYXNlKHN0ciwgMCkgPT0gMCk7
IH0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBzdGFydHNXaXRoKFVDaGFyKSBjb25z
dDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBzdGFydHNXaXRoKGNvbnN0IGNoYXIq
LCB1bnNpZ25lZCBtYXRjaExlbmd0aCwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdDsKLSAgICB0
ZW1wbGF0ZTx1bnNpZ25lZCBtYXRjaExlbmd0aD4KLSAgICBib29sIHN0YXJ0c1dpdGgoY29uc3Qg
Y2hhciAoJnByZWZpeClbbWF0Y2hMZW5ndGhdLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBj
b25zdCB7IHJldHVybiBzdGFydHNXaXRoKHByZWZpeCwgbWF0Y2hMZW5ndGggLSAxLCBjYXNlU2Vu
c2l0aXZlKTsgfQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGhhc0luZml4U3RhcnRp
bmdBdChjb25zdCBTdHJpbmdJbXBsJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQpIGNvbnN0OwotCi0g
ICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgZW5kc1dpdGgoU3RyaW5nSW1wbCopOwotICAg
IFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVuZHNXaXRoKFN0cmluZ0ltcGwmKTsKLSAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0
IFN0cmluZ0ltcGwqKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlbmRz
V2l0aElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwmKSBjb25zdDsKLSAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgYm9vbCBlbmRzV2l0aChTdHJpbmdJbXBsKiwgYm9vbCBjYXNlU2Vu
c2l0aXZlKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlbmRzV2l0aChVQ2hhcikg
Y29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgZW5kc1dpdGgoY29uc3QgY2hh
ciosIHVuc2lnbmVkIG1hdGNoTGVuZ3RoLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0OwotICAg
IHRlbXBsYXRlPHVuc2lnbmVkIG1hdGNoTGVuZ3RoPgotICAgIGJvb2wgZW5kc1dpdGgoY29uc3Qg
Y2hhciAoJnByZWZpeClbbWF0Y2hMZW5ndGhdLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBj
b25zdCB7IHJldHVybiBlbmRzV2l0aChwcmVmaXgsIG1hdGNoTGVuZ3RoIC0gMSwgY2FzZVNlbnNp
dGl2ZSk7IH0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBoYXNJbmZpeEVuZGluZ0F0
KGNvbnN0IFN0cmluZ0ltcGwmLCB1bnNpZ25lZCBlbmRPZmZzZXQpIGNvbnN0OwotCi0gICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiByZXBsYWNlKFVDaGFyLCBVQ2hhcik7
Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiByZXBsYWNlKFVDaGFy
LCBTdHJpbmdJbXBsKik7Ci0gICAgQUxXQVlTX0lOTElORSBSZWY8U3RyaW5nSW1wbD4gcmVwbGFj
ZShVQ2hhciBwYXR0ZXJuLCBjb25zdCBjaGFyKiByZXBsYWNlbWVudCwgdW5zaWduZWQgcmVwbGFj
ZW1lbnRMZW5ndGgpIHsgcmV0dXJuIHJlcGxhY2UocGF0dGVybiwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KHJlcGxhY2VtZW50KSwgcmVwbGFjZW1lbnRMZW5ndGgpOyB9Ci0gICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiByZXBsYWNlKFVDaGFyLCBjb25zdCBM
Q2hhciosIHVuc2lnbmVkIHJlcGxhY2VtZW50TGVuZ3RoKTsKLSAgICBSZWY8U3RyaW5nSW1wbD4g
cmVwbGFjZShVQ2hhciwgY29uc3QgVUNoYXIqLCB1bnNpZ25lZCByZXBsYWNlbWVudExlbmd0aCk7
Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiByZXBsYWNlKFN0cmlu
Z0ltcGwqLCBTdHJpbmdJbXBsKik7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJp
bmdJbXBsPiByZXBsYWNlKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW4sIFN0cmluZ0ltcGwq
KTsKLQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBVQ2hhckRpcmVjdGlvbiBkZWZhdWx0V3Jp
dGluZ0RpcmVjdGlvbihib29sKiBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSA9IG51bGxwdHIpOwot
Ci0jaWYgVVNFKENGKQotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY3JlYXRlQ0ZTdHJpbmco
KTsKLSNlbmRpZgotI2lmZGVmIF9fT0JKQ19fCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIG9w
ZXJhdG9yIE5TU3RyaW5nICooKTsKLSNlbmRpZgotCi0jaWYgU1RSSU5HX1NUQVRTCi0gICAgQUxX
QVlTX0lOTElORSBzdGF0aWMgU3RyaW5nU3RhdHMmIHN0cmluZ1N0YXRzKCkgeyByZXR1cm4gbV9z
dHJpbmdTdGF0czsgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICB+U3RyaW5nSW1wbCgpOwot
Ci0gICAgZW51bSBDcmVhdGVTeW1ib2xUYWcgeyBDcmVhdGVTeW1ib2wgfTsKLQotICAgIC8vIFVz
ZWQgdG8gY3JlYXRlIG5ldyBzeW1ib2wgc3RyaW5ncyB0aGF0IGhvbGRzIGV4aXN0aW5nIDgtYml0
IFtbRGVzY3JpcHRpb25dXSBzdHJpbmcgYXMgYSBzdWJzdHJpbmcgYnVmZmVyIChCdWZmZXJTdWJz
dHJpbmcpLgotICAgIFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sVGFnLCBjb25zdCBMQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3Jl
ZkNvdW50SW5jcmVtZW50LCBsZW5ndGgsIGNoYXJhY3RlcnMsIHNfaGFzaEZsYWc4Qml0QnVmZmVy
IHwgU3RyaW5nU3ltYm9sIHwgQnVmZmVyU3Vic3RyaW5nKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzOEJpdCgpKTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YTgpOwotICAgICAgICBTVFJJTkdfU1RB
VFNfQUREXzhCSVRfU1RSSU5HMihtX2xlbmd0aCwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gVXNl
ZCB0byBjcmVhdGUgbmV3IHN5bWJvbCBzdHJpbmdzIHRoYXQgaG9sZHMgZXhpc3RpbmcgMTYtYml0
IFtbRGVzY3JpcHRpb25dXSBzdHJpbmcgYXMgYSBzdWJzdHJpbmcgYnVmZmVyIChCdWZmZXJTdWJz
dHJpbmcpLgotICAgIFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sVGFnLCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3Jl
ZkNvdW50SW5jcmVtZW50LCBsZW5ndGgsIGNoYXJhY3RlcnMsIFN0cmluZ1N5bWJvbCB8IEJ1ZmZl
clN1YnN0cmluZykKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghaXM4Qml0KCkpOwotICAgICAgICBB
U1NFUlQobV9kYXRhMTYpOwotICAgICAgICBTVFJJTkdfU1RBVFNfQUREXzE2QklUX1NUUklORzIo
bV9sZW5ndGgsIHRydWUpOwotICAgIH0KLQotICAgIC8vIE51bGwgc3ltYm9sLgotICAgIFN0cmlu
Z0ltcGwoQ3JlYXRlU3ltYm9sVGFnKQotICAgICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3JlZkNv
dW50SW5jcmVtZW50LCAwLCBlbXB0eSgpLT5jaGFyYWN0ZXJzOCgpLCBzX2hhc2hGbGFnOEJpdEJ1
ZmZlciB8IFN0cmluZ1N5bWJvbCB8IEJ1ZmZlclN1YnN0cmluZykKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChpczhCaXQoKSk7Ci0gICAgICAgIEFTU0VSVChtX2RhdGE4KTsKLSAgICAgICAgU1RSSU5H
X1NUQVRTX0FERF84QklUX1NUUklORzIobV9sZW5ndGgsIHRydWUpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVj
a2VkPHNpemVfdD4gdGFpbEVsZW1lbnRDb3VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAodGFp
bE9mZnNldDxUPigpICsgdGFpbEVsZW1lbnRDb3VudCAqIHNpemVvZihUKSkudW5zYWZlR2V0KCk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgc2l6ZV90IHRh
aWxPZmZzZXQoKQotICAgIHsKLSNpZiBDT01QSUxFUihNU1ZDKQotICAgICAgICAvLyBNU1ZDIGRv
ZXNuJ3Qgc3VwcG9ydCBhbGlnbm9mIHlldC4KLSAgICAgICAgcmV0dXJuIHJvdW5kVXBUb011bHRp
cGxlT2Y8c2l6ZW9mKFQpPihzaXplb2YoU3RyaW5nSW1wbCkpOwotI2Vsc2UKLSAgICAgICAgcmV0
dXJuIHJvdW5kVXBUb011bHRpcGxlT2Y8YWxpZ25vZihUKT4ob2Zmc2V0b2YoU3RyaW5nSW1wbCwg
bV9oYXNoQW5kRmxhZ3MpICsgc2l6ZW9mKFN0cmluZ0ltcGw6Om1faGFzaEFuZEZsYWdzKSk7Ci0j
ZW5kaWYKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCByZXF1aXJlc0NvcHkoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgaWYgKGJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlckludGVybmFsKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKGlzOEJpdCgpKQotICAgICAg
ICAgICAgcmV0dXJuIG1fZGF0YTggPT0gdGFpbFBvaW50ZXI8TENoYXI+KCk7Ci0gICAgICAgIHJl
dHVybiBtX2RhdGExNiA9PSB0YWlsUG9pbnRlcjxVQ2hhcj4oKTsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIGNvbnN0IFQqIHRhaWxQb2ludGVyKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBUKj4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odGhpcykgKyB0YWlsT2Zmc2V0PFQ+KCkpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCogdGFpbFBvaW50ZXIoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFQqPihyZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPih0aGlzKSArIHRhaWxPZmZzZXQ8VD4oKSk7Ci0gICAgfQotCi0gICAgU3RyaW5n
SW1wbCogY29uc3QmIHN1YnN0cmluZ0J1ZmZlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQoYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5nKTsKLQotICAgICAgICByZXR1
cm4gKnRhaWxQb2ludGVyPFN0cmluZ0ltcGwqPigpOwotICAgIH0KLQotICAgIFN0cmluZ0ltcGwq
JiBzdWJzdHJpbmdCdWZmZXIoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGJ1ZmZlck93bmVyc2hp
cCgpID09IEJ1ZmZlclN1YnN0cmluZyk7Ci0KLSAgICAgICAgcmV0dXJuICp0YWlsUG9pbnRlcjxT
dHJpbmdJbXBsKj4oKTsKLSAgICB9Ci0KLSAgICBlbnVtIGNsYXNzIENhc2VDb252ZXJ0VHlwZSB7
IFVwcGVyLCBMb3dlciB9OwotICAgIHRlbXBsYXRlPENhc2VDb252ZXJ0VHlwZSB0eXBlLCB0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRBU0NJSUNh
c2UoU3RyaW5nSW1wbCYsIGNvbnN0IENoYXJhY3RlclR5cGUqLCB1bnNpZ25lZCk7Ci0KLSAgICBC
dWZmZXJPd25lcnNoaXAgYnVmZmVyT3duZXJzaGlwKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8QnVmZmVyT3duZXJzaGlwPihtX2hhc2hBbmRGbGFncyAmIHNfaGFzaE1hc2tCdWZmZXJPd25l
cnNoaXApOyB9Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFVDaGFyUHJlZGljYXRlPiBSZWY8U3RyaW5n
SW1wbD4gc3RyaXBNYXRjaGVkQ2hhcmFjdGVycyhVQ2hhclByZWRpY2F0ZSk7Ci0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJUeXBlLCBjbGFzcyBVQ2hhclByZWRpY2F0ZT4gUmVmPFN0cmluZ0lt
cGw+IHNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlKFVDaGFyUHJlZGljYXRlKTsKLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY29u
c3RydWN0SW50ZXJuYWwoU3RyaW5nSW1wbCosIHVuc2lnbmVkKTsKLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhclR5cGU+IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlVW5pbml0aWFsaXpl
ZEludGVybmFsKHVuc2lnbmVkLCBDaGFyVHlwZSomKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhclR5cGU+IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlVW5pbml0aWFsaXplZEludGVy
bmFsTm9uRW1wdHkodW5zaWduZWQsIENoYXJUeXBlKiYpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyVHlwZT4gc3RhdGljIFJlZjxTdHJpbmdJbXBsPiByZWFsbG9jYXRlSW50ZXJuYWwoUmVm
PFN0cmluZ0ltcGw+JiYsIHVuc2lnbmVkLCBDaGFyVHlwZSomKTsKLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhclR5cGU+IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlSW50ZXJuYWwoY29u
c3QgQ2hhclR5cGUqLCB1bnNpZ25lZCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIE5FVkVSX0lO
TElORSB1bnNpZ25lZCBoYXNoU2xvd0Nhc2UoKSBjb25zdDsKLQotICAgIC8vIFRoZSBib3R0b20g
Yml0IGluIHRoZSByZWYgY291bnQgaW5kaWNhdGVzIGEgc3RhdGljIChpbW1vcnRhbCkgc3RyaW5n
LgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5n
ID0gMHgxOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50SW5jcmVtZW50ID0g
MHgyOyAvLyBUaGlzIGFsbG93cyB1cyB0byByZWYgLyBkZXJlZiB3aXRob3V0IGRpc3R1cmJpbmcg
dGhlIHN0YXRpYyBzdHJpbmcgZmxhZy4KLQotI2lmIFNUUklOR19TVEFUUwotICAgIFdURl9FWFBP
UlREQVRBIHN0YXRpYyBTdHJpbmdTdGF0cyBtX3N0cmluZ1N0YXRzOwotI2VuZGlmCi0KLXB1Ymxp
YzoKLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBhc3NlcnRIYXNoSXNDb3JyZWN0KCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChoYXNIYXNoKCkpOwotICAgICAgICBBU1NFUlQoZXhpc3RpbmdIYXNo
KCkgPT0gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJz
OCgpLCBsZW5ndGgoKSkpOwotICAgIH0KLSNlbmRpZgotfTsKLQotdXNpbmcgU3RhdGljU3RyaW5n
SW1wbCA9IFN0cmluZ0ltcGw6OlN0YXRpY1N0cmluZ0ltcGw7Ci0KLXN0YXRpY19hc3NlcnQoc2l6
ZW9mKFN0cmluZ0ltcGwpID09IHNpemVvZihTdGF0aWNTdHJpbmdJbXBsKSwgIiIpOwotCi0jaWYg
QVNTRVJUX0VOQUJMRUQKLS8vIFN0cmluZ0ltcGxzIGNyZWF0ZWQgZnJvbSBTdGF0aWNTdHJpbmdJ
bXBsIHdpbGwgQVNTRVJUCi0vLyBpbiB0aGUgZ2VuZXJpYyBWYWx1ZUNoZWNrPFQ+OjpjaGVja0Nv
bnNpc3RlbmN5Ci0vLyBhcyB0aGV5IGFyZSBub3QgYWxsb2NhdGVkIGJ5IGZhc3RNYWxsb2MuCi0v
LyBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhbnkgd2F5IHRvIGRldGVjdCB0aGF0IGNhc2UKLS8v
IHNvIHdlIGlnbm9yZSB0aGUgY29uc2lzdGVuY3kgY2hlY2sgZm9yIGFsbCBTdHJpbmdJbXBsKi4K
LXRlbXBsYXRlPD4gc3RydWN0Ci1WYWx1ZUNoZWNrPFN0cmluZ0ltcGwqPiB7Ci0gICAgc3RhdGlj
IHZvaWQgY2hlY2tDb25zaXN0ZW5jeShjb25zdCBTdHJpbmdJbXBsKikgeyB9Ci19OwotI2VuZGlm
Ci0KLXRlbXBsYXRlIDw+Ci1BTFdBWVNfSU5MSU5FIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
Ojpjb25zdHJ1Y3RJbnRlcm5hbDxMQ2hhcj4oU3RyaW5nSW1wbCogaW1wbCwgdW5zaWduZWQgbGVu
Z3RoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IChOb3ROdWxsLCBpbXBsKSBTdHJpbmdJbXBsKGxl
bmd0aCwgRm9yY2U4Qml0Q29uc3RydWN0b3IpKTsgfQotdGVtcGxhdGUgPD4KLUFMV0FZU19JTkxJ
TkUgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnN0cnVjdEludGVybmFsPFVDaGFyPihT
dHJpbmdJbXBsKiBpbXBsLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
KE5vdE51bGwsIGltcGwpIFN0cmluZ0ltcGwobGVuZ3RoKSk7IH0KLQotdGVtcGxhdGUgPD4KLUFM
V0FZU19JTkxJTkUgY29uc3QgTENoYXIqIFN0cmluZ0ltcGw6OmNoYXJhY3RlcnM8TENoYXI+KCkg
Y29uc3QgeyByZXR1cm4gY2hhcmFjdGVyczgoKTsgfQotCi10ZW1wbGF0ZSA8PgotQUxXQVlTX0lO
TElORSBjb25zdCBVQ2hhciogU3RyaW5nSW1wbDo6Y2hhcmFjdGVyczxVQ2hhcj4oKSBjb25zdCB7
IHJldHVybiBjaGFyYWN0ZXJzMTYoKTsgfQotCi1XVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBl
cXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgU3RyaW5nSW1wbCopOwotV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IExDaGFyKik7Ci1p
bmxpbmUgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBjaGFyKiBiKSB7IHJl
dHVybiBlcXVhbChhLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9Ci1XVEZf
RVhQT1JUX1NUUklOR19BUEkgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgTENo
YXIqLCB1bnNpZ25lZCk7Ci1XVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlcXVhbChjb25zdCBT
dHJpbmdJbXBsKiwgY29uc3QgVUNoYXIqLCB1bnNpZ25lZCk7Ci1pbmxpbmUgYm9vbCBlcXVhbChj
b25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBjaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0
dXJuIGVxdWFsKGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSwgbGVuZ3RoKTsg
fQotaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgTENoYXIqIGEsIFN0cmluZ0ltcGwqIGIpIHsgcmV0
dXJuIGVxdWFsKGIsIGEpOyB9Ci1pbmxpbmUgYm9vbCBlcXVhbChjb25zdCBjaGFyKiBhLCBTdHJp
bmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbChiLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oYSkpOyB9Ci1XVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJ
bXBsJiBhLCBjb25zdCBTdHJpbmdJbXBsJiBiKTsKLQotV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJv
b2wgZXF1YWxJZ25vcmluZ051bGxpdHkoU3RyaW5nSW1wbCosIFN0cmluZ0ltcGwqKTsKLVdURl9F
WFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsSWdub3JpbmdOdWxsaXR5KGNvbnN0IFVDaGFyKiwg
c2l6ZV90IGxlbmd0aCwgU3RyaW5nSW1wbCopOwotCi1ib29sIGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoY29uc3QgU3RyaW5nSW1wbCYsIGNvbnN0IFN0cmluZ0ltcGwmKTsKLVdURl9FWFBPUlRfU1RS
SU5HX0FQSSBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCosIGNv
bnN0IFN0cmluZ0ltcGwqKTsKLWJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJp
bmdJbXBsJiwgY29uc3QgY2hhciopOwotYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0
IFN0cmluZ0ltcGwqLCBjb25zdCBjaGFyKik7Ci0KLVdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29s
IGVxdWFsSWdub3JpbmdBU0NJSUNhc2VOb25OdWxsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBT
dHJpbmdJbXBsKik7Ci0KLXRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gYm9vbCBlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdJbXBsJiwgY29uc3QgY2hhciAoJmxvd2Vy
Y2FzZUxldHRlcnMpW2xlbmd0aF0pOwotdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBib29sIGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBjaGFy
ICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSk7Ci0KLWlubGluZSBzaXplX3QgZmluZChjb25z
dCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDaGFyYWN0ZXJNYXRjaEZ1bmN0
aW9uUHRyIG1hdGNoRnVuY3Rpb24sIHVuc2lnbmVkIGluZGV4ID0gMCkKLXsKLSAgICB3aGlsZSAo
aW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgaWYgKG1hdGNoRnVuY3Rpb24oY2hhcmFjdGVyc1tp
bmRleF0pKQotICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICArK2luZGV4OwotICAg
IH0KLSAgICByZXR1cm4gbm90Rm91bmQ7Ci19Ci0KLWlubGluZSBzaXplX3QgZmluZChjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9u
UHRyIG1hdGNoRnVuY3Rpb24sIHVuc2lnbmVkIGluZGV4ID0gMCkKLXsKLSAgICB3aGlsZSAoaW5k
ZXggPCBsZW5ndGgpIHsKLSAgICAgICAgaWYgKG1hdGNoRnVuY3Rpb24oY2hhcmFjdGVyc1tpbmRl
eF0pKQotICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICArK2luZGV4OwotICAgIH0K
LSAgICByZXR1cm4gbm90Rm91bmQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Ci1pbmxpbmUgc2l6ZV90IHJldmVyc2VGaW5kTGluZVRlcm1pbmF0b3IoY29uc3QgQ2hhcmFj
dGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBpbmRleCA9IFVJ
TlRfTUFYKQotewotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0g
ICAgaWYgKGluZGV4ID49IGxlbmd0aCkKLSAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxOwotICAg
IENoYXJhY3RlclR5cGUgYyA9IGNoYXJhY3RlcnNbaW5kZXhdOwotICAgIHdoaWxlICgoYyAhPSAn
XG4nKSAmJiAoYyAhPSAnXHInKSkgewotICAgICAgICBpZiAoIWluZGV4LS0pCi0gICAgICAgICAg
ICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgICAgIGMgPSBjaGFyYWN0ZXJzW2luZGV4XTsKLSAgICB9
Ci0gICAgcmV0dXJuIGluZGV4OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PgotaW5saW5lIHNpemVfdCByZXZlcnNlRmluZChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENoYXJhY3RlclR5cGUgbWF0Y2hDaGFyYWN0ZXIsIHVuc2ln
bmVkIGluZGV4ID0gVUlOVF9NQVgpCi17Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVy
biBub3RGb3VuZDsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQotICAgICAgICBpbmRleCA9IGxl
bmd0aCAtIDE7Ci0gICAgd2hpbGUgKGNoYXJhY3RlcnNbaW5kZXhdICE9IG1hdGNoQ2hhcmFjdGVy
KSB7Ci0gICAgICAgIGlmICghaW5kZXgtLSkKLSAgICAgICAgICAgIHJldHVybiBub3RGb3VuZDsK
LSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotfQotCi1BTFdBWVNfSU5MSU5FIHNpemVfdCByZXZl
cnNlRmluZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBMQ2hhciBt
YXRjaENoYXJhY3RlciwgdW5zaWduZWQgaW5kZXggPSBVSU5UX01BWCkKLXsKLSAgICByZXR1cm4g
cmV2ZXJzZUZpbmQoY2hhcmFjdGVycywgbGVuZ3RoLCBzdGF0aWNfY2FzdDxVQ2hhcj4obWF0Y2hD
aGFyYWN0ZXIpLCBpbmRleCk7Ci19Ci0KLWlubGluZSBzaXplX3QgcmV2ZXJzZUZpbmQoY29uc3Qg
TENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIgbWF0Y2hDaGFyYWN0ZXIs
IHVuc2lnbmVkIGluZGV4ID0gVUlOVF9NQVgpCi17Ci0gICAgaWYgKG1hdGNoQ2hhcmFjdGVyICYg
fjB4RkYpCi0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICByZXR1cm4gcmV2ZXJzZUZpbmQo
Y2hhcmFjdGVycywgbGVuZ3RoLCBzdGF0aWNfY2FzdDxMQ2hhcj4obWF0Y2hDaGFyYWN0ZXIpLCBp
bmRleCk7Ci19Ci0KLWlubGluZSBzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChMQ2hhciBjaGFyYWN0
ZXIsIHVuc2lnbmVkIHN0YXJ0KQotewotICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IFdURjo6ZmluZChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgY2hhcmFjdGVyLCBzdGFydCk7Ci0g
ICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIGNoYXJhY3Rlciwg
c3RhcnQpOwotfQotCi1BTFdBWVNfSU5MSU5FIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKGNoYXIg
Y2hhcmFjdGVyLCB1bnNpZ25lZCBzdGFydCkKLXsKLSAgICByZXR1cm4gZmluZChzdGF0aWNfY2Fz
dDxMQ2hhcj4oY2hhcmFjdGVyKSwgc3RhcnQpOwotfQotCi1pbmxpbmUgc2l6ZV90IFN0cmluZ0lt
cGw6OmZpbmQoVUNoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBzdGFydCkKLXsKLSAgICBpZiAoaXM4
Qml0KCkpCi0gICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgs
IGNoYXJhY3Rlciwgc3RhcnQpOwotICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczE2KCks
IG1fbGVuZ3RoLCBjaGFyYWN0ZXIsIHN0YXJ0KTsKLX0KLQotdGVtcGxhdGU8c2l6ZV90IGlubGlu
ZUNhcGFjaXR5PiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nTnVsbGl0eShjb25zdCBWZWN0b3I8
VUNoYXIsIGlubGluZUNhcGFjaXR5PiYgYSwgU3RyaW5nSW1wbCogYikKLXsKLSAgICByZXR1cm4g
ZXF1YWxJZ25vcmluZ051bGxpdHkoYS5kYXRhKCksIGEuc2l6ZSgpLCBiKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZTEsIHR5cGVuYW1lIENoYXJhY3RlclR5cGUyPgotaW5s
aW5lIGludCBjb2RlUG9pbnRDb21wYXJlKHVuc2lnbmVkIGwxLCB1bnNpZ25lZCBsMiwgY29uc3Qg
Q2hhcmFjdGVyVHlwZTEqIGMxLCBjb25zdCBDaGFyYWN0ZXJUeXBlMiogYzIpCi17Ci0gICAgY29u
c3QgdW5zaWduZWQgbG1pbiA9IGwxIDwgbDIgPyBsMSA6IGwyOwotICAgIHVuc2lnbmVkIHBvcyA9
IDA7Ci0gICAgd2hpbGUgKHBvcyA8IGxtaW4gJiYgKmMxID09ICpjMikgewotICAgICAgICArK2Mx
OwotICAgICAgICArK2MyOwotICAgICAgICArK3BvczsKLSAgICB9Ci0KLSAgICBpZiAocG9zIDwg
bG1pbikKLSAgICAgICAgcmV0dXJuIChjMVswXSA+IGMyWzBdKSA/IDEgOiAtMTsKLQotICAgIGlm
IChsMSA9PSBsMikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gKGwxID4gbDIpID8g
MSA6IC0xOwotfQotCi1pbmxpbmUgaW50IGNvZGVQb2ludENvbXBhcmU4KGNvbnN0IFN0cmluZ0lt
cGwqIHN0cmluZzEsIGNvbnN0IFN0cmluZ0ltcGwqIHN0cmluZzIpCi17Ci0gICAgcmV0dXJuIGNv
ZGVQb2ludENvbXBhcmUoc3RyaW5nMS0+bGVuZ3RoKCksIHN0cmluZzItPmxlbmd0aCgpLCBzdHJp
bmcxLT5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcyLT5jaGFyYWN0ZXJzOCgpKTsKLX0KLQotaW5saW5l
IGludCBjb2RlUG9pbnRDb21wYXJlMTYoY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nMSwgY29uc3Qg
U3RyaW5nSW1wbCogc3RyaW5nMikKLXsKLSAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShzdHJp
bmcxLT5sZW5ndGgoKSwgc3RyaW5nMi0+bGVuZ3RoKCksIHN0cmluZzEtPmNoYXJhY3RlcnMxNigp
LCBzdHJpbmcyLT5jaGFyYWN0ZXJzMTYoKSk7Ci19Ci0KLWlubGluZSBpbnQgY29kZVBvaW50Q29t
cGFyZThUbzE2KGNvbnN0IFN0cmluZ0ltcGwqIHN0cmluZzEsIGNvbnN0IFN0cmluZ0ltcGwqIHN0
cmluZzIpCi17Ci0gICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoc3RyaW5nMS0+bGVuZ3RoKCks
IHN0cmluZzItPmxlbmd0aCgpLCBzdHJpbmcxLT5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcyLT5jaGFy
YWN0ZXJzMTYoKSk7Ci19Ci0KLWlubGluZSBpbnQgY29kZVBvaW50Q29tcGFyZShjb25zdCBTdHJp
bmdJbXBsKiBzdHJpbmcxLCBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmcyKQotewotICAgIGlmICgh
c3RyaW5nMSkKLSAgICAgICAgcmV0dXJuIChzdHJpbmcyICYmIHN0cmluZzItPmxlbmd0aCgpKSA/
IC0xIDogMDsKLQotICAgIGlmICghc3RyaW5nMikKLSAgICAgICAgcmV0dXJuIHN0cmluZzEtPmxl
bmd0aCgpID8gMSA6IDA7Ci0KLSAgICBib29sIHN0cmluZzFJczhCaXQgPSBzdHJpbmcxLT5pczhC
aXQoKTsKLSAgICBib29sIHN0cmluZzJJczhCaXQgPSBzdHJpbmcyLT5pczhCaXQoKTsKLSAgICBp
ZiAoc3RyaW5nMUlzOEJpdCkgewotICAgICAgICBpZiAoc3RyaW5nMklzOEJpdCkKLSAgICAgICAg
ICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlOChzdHJpbmcxLCBzdHJpbmcyKTsKLSAgICAgICAg
cmV0dXJuIGNvZGVQb2ludENvbXBhcmU4VG8xNihzdHJpbmcxLCBzdHJpbmcyKTsKLSAgICB9Ci0g
ICAgaWYgKHN0cmluZzJJczhCaXQpCi0gICAgICAgIHJldHVybiAtY29kZVBvaW50Q29tcGFyZThU
bzE2KHN0cmluZzIsIHN0cmluZzEpOwotICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlMTYoc3Ry
aW5nMSwgc3RyaW5nMik7Ci19Ci0KLWlubGluZSBib29sIGlzU3BhY2VPck5ld2xpbmUoVUNoYXIz
MiBjKQotewotICAgIC8vIFVzZSBpc0FTQ0lJU3BhY2UoKSBmb3IgYmFzaWMgTGF0aW4tMS4KLSAg
ICAvLyBUaGlzIHdpbGwgaW5jbHVkZSBuZXdsaW5lcywgd2hpY2ggYXJlbid0IGluY2x1ZGVkIGlu
IFVuaWNvZGUgRGlyV1MuCi0gICAgcmV0dXJuIGMgPD0gMHg3RiA/IGlzQVNDSUlTcGFjZShjKSA6
IHVfY2hhckRpcmVjdGlvbihjKSA9PSBVX1dISVRFX1NQQUNFX05FVVRSQUw7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgdW5zaWduZWQgbGVuZ3RoT2ZOdWxs
VGVybWluYXRlZFN0cmluZyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzdHJpbmcpCi17Ci0gICAgQVNT
RVJUKHN0cmluZyk7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IDA7Ci0gICAgd2hpbGUgKHN0cmluZ1ts
ZW5ndGhdKQotICAgICAgICArK2xlbmd0aDsKLQotICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA8
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihsZW5ndGgpOwotfQotCi1pbmxpbmUgUmVmPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6Omlzb2xhdGVkQ29weSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZXF1aXJlc0NvcHko
KSkgewotICAgICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nSW1w
bDo6Y3JlYXRlV2l0aG91dENvcHlpbmcobV9kYXRhOCwgbV9sZW5ndGgpOwotICAgICAgICByZXR1
cm4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcobV9kYXRhMTYsIG1fbGVuZ3RoKTsK
LSAgICB9Ci0KLSAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBjcmVhdGUobV9kYXRh
OCwgbV9sZW5ndGgpOwotICAgIHJldHVybiBjcmVhdGUobV9kYXRhMTYsIG1fbGVuZ3RoKTsKLX0K
LQotLy8gU3RyaW5nSGFzaCBpcyB0aGUgZGVmYXVsdCBoYXNoIGZvciBTdHJpbmdJbXBsKiBhbmQg
UmVmUHRyPFN0cmluZ0ltcGw+Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7Ci10ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxTdHJpbmdJbXBsKj4gewotICAgIHR5
cGVkZWYgU3RyaW5nSGFzaCBIYXNoOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNo
PFJlZlB0cjxTdHJpbmdJbXBsPj4gewotICAgIHR5cGVkZWYgU3RyaW5nSGFzaCBIYXNoOwotfTsK
LQotaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdJbXBsJiBh
LCBjb25zdCBTdHJpbmdJbXBsJiBiKQotewotICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlQ29tbW9uKGEsIGIpOwotfQotCi1pbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KGNvbnN0IFN0cmluZ0ltcGwmIGEsIGNvbnN0IGNoYXIqIGIpCi17Ci0gICAgcmV0dXJuIGVxdWFs
SWdub3JpbmdBU0NJSUNhc2VDb21tb24oYSwgYik7Ci19Ci0KLWlubGluZSBib29sIGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgY2hhciogYikKLXsKLSAg
ICByZXR1cm4gYSAmJiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKCphLCBiKTsKLX0KLQotdGVtcGxh
dGU8dW5zaWduZWQgbGVuZ3RoPiBpbmxpbmUgYm9vbCBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZywgY29uc3QgY2hhciAoJmxvd2VyY2Fz
ZUxldHRlcnMpW2xlbmd0aF0pCi17Ci0gICAgcmV0dXJuIHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2VDb21tb24oc3RyaW5nLCBsb3dlcmNhc2VMZXR0ZXJzKTsKLX0KLQotdGVtcGxh
dGU8dW5zaWduZWQgbGVuZ3RoPiBpbmxpbmUgYm9vbCBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwqIHN0cmluZywgY29uc3QgY2hhciAoJmxvd2VyY2Fz
ZUxldHRlcnMpW2xlbmd0aF0pCi17Ci0gICAgcmV0dXJuIHN0cmluZyAmJiBzdGFydHNXaXRoTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKCpzdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMpOwotfQotCi10
ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZywgY29uc3QgY2hhciAoJmxvd2VyY2Fz
ZUxldHRlcnMpW2xlbmd0aF0pCi17Ci0gICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlQ29tbW9uKHN0cmluZywgbG93ZXJjYXNlTGV0dGVycyk7Ci19Ci0KLXRlbXBsYXRlPHVu
c2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
Y29uc3QgU3RyaW5nSW1wbCogc3RyaW5nLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylb
bGVuZ3RoXSkKLXsKLSAgICByZXR1cm4gc3RyaW5nICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKCpzdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMpOwotfQotCi0jZGVmaW5lIE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKGNoYXJhY3RlcnMpIChbXSB7IFwKLSAgICAgICAgc3RhdGljIFN0YXRp
Y1N0cmluZ0ltcGwgaW1wbChjaGFyYWN0ZXJzKTsgXAotICAgICAgICByZXR1cm4gJmltcGw7IFwK
LSAgICB9KCkpCi0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6U3RyaW5nSW1w
bDsKLXVzaW5nIFdURjo6U3RhdGljU3RyaW5nSW1wbDsKLXVzaW5nIFdURjo6ZXF1YWw7Ci11c2lu
ZyBXVEY6OlRleHRDYXNlU2Vuc2l0aXZpdHk7Ci11c2luZyBXVEY6OlRleHRDYXNlU2Vuc2l0aXZl
OwotdXNpbmcgV1RGOjpUZXh0Q2FzZUluc2Vuc2l0aXZlOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L1N0cmluZ09wZXJhdG9ycy5o
IGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvU3RyaW5nT3BlcmF0b3Jz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMjQzNTY1OGQzMWU4Zjk2ODYyOTc1
ODVlMjViZGMzNDg2ZjhjMmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvU3RyaW5nT3Bl
cmF0b3JzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFN0cmluZ09w
ZXJhdG9yc19oCi0jZGVmaW5lIFN0cmluZ09wZXJhdG9yc19oCi0KLW5hbWVzcGFjZSBXVEYgewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+Ci1j
bGFzcyBTdHJpbmdBcHBlbmQgewotcHVibGljOgotICAgIFN0cmluZ0FwcGVuZChTdHJpbmdUeXBl
MSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyKQotICAgICAgICA6IG1fc3RyaW5nMShzdHJp
bmcxKQotICAgICAgICAsIG1fc3RyaW5nMihzdHJpbmcyKQotICAgIHsKLSAgICB9Ci0KLSAgICBv
cGVyYXRvciBTdHJpbmcoKSBjb25zdAotICAgIHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHRy
eU1ha2VTdHJpbmcobV9zdHJpbmcxLCBtX3N0cmluZzIpOwotICAgICAgICBpZiAoIXJlc3VsdCkK
LSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgb3BlcmF0b3IgQXRvbWljU3RyaW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBv
cGVyYXRvciBTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBib29sIGlzOEJpdCgpCi0gICAgewotICAg
ICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEobV9zdHJpbmcxKTsK
LSAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKG1fc3RyaW5n
Mik7Ci0gICAgICAgIHJldHVybiBhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQo
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKGlzOEJpdCgpKTsKLSAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3Ry
aW5nVHlwZTE+IGFkYXB0ZXIxKG1fc3RyaW5nMSk7Ci0gICAgICAgIFN0cmluZ1R5cGVBZGFwdGVy
PFN0cmluZ1R5cGUyPiBhZGFwdGVyMihtX3N0cmluZzIpOwotICAgICAgICBhZGFwdGVyMS53cml0
ZVRvKGRlc3RpbmF0aW9uKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhkZXN0aW5hdGlvbiAr
IGFkYXB0ZXIxLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRl
c3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+
IGFkYXB0ZXIxKG1fc3RyaW5nMSk7Ci0gICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5
cGUyPiBhZGFwdGVyMihtX3N0cmluZzIpOwotICAgICAgICBhZGFwdGVyMS53cml0ZVRvKGRlc3Rp
bmF0aW9uKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhkZXN0aW5hdGlvbiArIGFkYXB0ZXIx
Lmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKQotICAgIHsKLSAgICAg
ICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKG1fc3RyaW5nMSk7Ci0g
ICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihtX3N0cmluZzIp
OwotICAgICAgICByZXR1cm4gYWRhcHRlcjEubGVuZ3RoKCkgKyBhZGFwdGVyMi5sZW5ndGgoKTsK
LSAgICB9ICAgIAotCi1wcml2YXRlOgotICAgIFN0cmluZ1R5cGUxIG1fc3RyaW5nMTsKLSAgICBT
dHJpbmdUeXBlMiBtX3N0cmluZzI7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBl
MSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+Ci1jbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdB
cHBlbmQ8U3RyaW5nVHlwZTEsIFN0cmluZ1R5cGUyPj4gewotcHVibGljOgotICAgIFN0cmluZ1R5
cGVBZGFwdGVyPFN0cmluZ0FwcGVuZDxTdHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+PihTdHJpbmdB
cHBlbmQ8U3RyaW5nVHlwZTEsIFN0cmluZ1R5cGUyPiYgYnVmZmVyKQotICAgICAgICA6IG1fYnVm
ZmVyKGJ1ZmZlcikKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1
cm4gbV9idWZmZXIubGVuZ3RoKCk7IH0KLQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gbV9i
dWZmZXIuaXM4Qml0KCk7IH0KLQotICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24p
IHsgbV9idWZmZXIud3JpdGVUbyhkZXN0aW5hdGlvbik7IH0KLSAgICB2b2lkIHdyaXRlVG8oVUNo
YXIqIGRlc3RpbmF0aW9uKSB7IG1fYnVmZmVyLndyaXRlVG8oZGVzdGluYXRpb24pOyB9Ci0KLSAg
ICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcjsgfQotCi1wcml2YXRl
OgotICAgIFN0cmluZ0FwcGVuZDxTdHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+JiBtX2J1ZmZlcjsK
LX07Ci0KLWlubGluZSBTdHJpbmdBcHBlbmQ8Y29uc3QgY2hhciosIFN0cmluZz4gb3BlcmF0b3Ir
KGNvbnN0IGNoYXIqIHN0cmluZzEsIGNvbnN0IFN0cmluZyYgc3RyaW5nMikKLXsKLSAgICByZXR1
cm4gU3RyaW5nQXBwZW5kPGNvbnN0IGNoYXIqLCBTdHJpbmc+KHN0cmluZzEsIHN0cmluZzIpOwot
fQotCi1pbmxpbmUgU3RyaW5nQXBwZW5kPGNvbnN0IGNoYXIqLCBBdG9taWNTdHJpbmc+IG9wZXJh
dG9yKyhjb25zdCBjaGFyKiBzdHJpbmcxLCBjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZzIpCi17
Ci0gICAgcmV0dXJuIFN0cmluZ0FwcGVuZDxjb25zdCBjaGFyKiwgQXRvbWljU3RyaW5nPihzdHJp
bmcxLCBzdHJpbmcyKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLWlu
bGluZSBTdHJpbmdBcHBlbmQ8Y29uc3QgY2hhciosIFN0cmluZ0FwcGVuZDxVLCBWPj4gb3BlcmF0
b3IrKGNvbnN0IGNoYXIqIHN0cmluZzEsIGNvbnN0IFN0cmluZ0FwcGVuZDxVLCBWPiYgc3RyaW5n
MikKLXsKLSAgICByZXR1cm4gU3RyaW5nQXBwZW5kPGNvbnN0IGNoYXIqLCBTdHJpbmdBcHBlbmQ8
VSwgVj4+KHN0cmluZzEsIHN0cmluZzIpOwotfQotCi1pbmxpbmUgU3RyaW5nQXBwZW5kPGNvbnN0
IFVDaGFyKiwgU3RyaW5nPiBvcGVyYXRvcisoY29uc3QgVUNoYXIqIHN0cmluZzEsIGNvbnN0IFN0
cmluZyYgc3RyaW5nMikKLXsKLSAgICByZXR1cm4gU3RyaW5nQXBwZW5kPGNvbnN0IFVDaGFyKiwg
U3RyaW5nPihzdHJpbmcxLCBzdHJpbmcyKTsKLX0KLQotaW5saW5lIFN0cmluZ0FwcGVuZDxjb25z
dCBVQ2hhciosIEF0b21pY1N0cmluZz4gb3BlcmF0b3IrKGNvbnN0IFVDaGFyKiBzdHJpbmcxLCBj
b25zdCBBdG9taWNTdHJpbmcmIHN0cmluZzIpCi17Ci0gICAgcmV0dXJuIFN0cmluZ0FwcGVuZDxj
b25zdCBVQ2hhciosIEF0b21pY1N0cmluZz4oc3RyaW5nMSwgc3RyaW5nMik7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgU3RyaW5nQXBwZW5kPGNvbnN0IFVD
aGFyKiwgU3RyaW5nQXBwZW5kPFUsIFY+PiBvcGVyYXRvcisoY29uc3QgVUNoYXIqIHN0cmluZzEs
IGNvbnN0IFN0cmluZ0FwcGVuZDxVLCBWPiYgc3RyaW5nMikKLXsKLSAgICByZXR1cm4gU3RyaW5n
QXBwZW5kPGNvbnN0IFVDaGFyKiwgU3RyaW5nQXBwZW5kPFUsIFY+PihzdHJpbmcxLCBzdHJpbmcy
KTsKLX0KLQotaW5saW5lIFN0cmluZ0FwcGVuZDxBU0NJSUxpdGVyYWwsIFN0cmluZz4gb3BlcmF0
b3IrKGNvbnN0IEFTQ0lJTGl0ZXJhbCYgc3RyaW5nMSwgY29uc3QgU3RyaW5nJiBzdHJpbmcyKQot
ewotICAgIHJldHVybiBTdHJpbmdBcHBlbmQ8QVNDSUlMaXRlcmFsLCBTdHJpbmc+KHN0cmluZzEs
IHN0cmluZzIpOwotfQotCi1pbmxpbmUgU3RyaW5nQXBwZW5kPEFTQ0lJTGl0ZXJhbCwgQXRvbWlj
U3RyaW5nPiBvcGVyYXRvcisoY29uc3QgQVNDSUlMaXRlcmFsJiBzdHJpbmcxLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHN0cmluZzIpCi17Ci0gICAgcmV0dXJuIFN0cmluZ0FwcGVuZDxBU0NJSUxpdGVy
YWwsIEF0b21pY1N0cmluZz4oc3RyaW5nMSwgc3RyaW5nMik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+Ci1pbmxpbmUgU3RyaW5nQXBwZW5kPEFTQ0lJTGl0ZXJhbCwgU3Ry
aW5nQXBwZW5kPFUsIFY+PiBvcGVyYXRvcisoY29uc3QgQVNDSUlMaXRlcmFsJiBzdHJpbmcxLCBj
b25zdCBTdHJpbmdBcHBlbmQ8VSwgVj4mIHN0cmluZzIpCi17Ci0gICAgcmV0dXJuIFN0cmluZ0Fw
cGVuZDxBU0NJSUxpdGVyYWwsIFN0cmluZ0FwcGVuZDxVLCBWPj4oc3RyaW5nMSwgc3RyaW5nMik7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1TdHJpbmdBcHBlbmQ8U3RyaW5nLCBUPiBvcGVy
YXRvcisoY29uc3QgU3RyaW5nJiBzdHJpbmcxLCBUIHN0cmluZzIpCi17Ci0gICAgcmV0dXJuIFN0
cmluZ0FwcGVuZDxTdHJpbmcsIFQ+KHN0cmluZzEsIHN0cmluZzIpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgotU3RyaW5nQXBwZW5kPFN0cmluZ0Fw
cGVuZDxVLCBWPiwgVz4gb3BlcmF0b3IrKGNvbnN0IFN0cmluZ0FwcGVuZDxVLCBWPiYgc3RyaW5n
MSwgVyBzdHJpbmcyKQotewotICAgIHJldHVybiBTdHJpbmdBcHBlbmQ8U3RyaW5nQXBwZW5kPFUs
IFY+LCBXPihzdHJpbmcxLCBzdHJpbmcyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNl
bmRpZiAvLyBTdHJpbmdPcGVyYXRvcnNfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
dGl0Y2hNYXJrZXIvd3RmL3RleHQvU3RyaW5nVmlldy5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvdGV4dC9TdHJpbmdWaWV3LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTgwNzk5NzY1MjhkMjMwOWVjYTA0Y2U5Yjc0MWMyNWI4ZGM0YmMzZi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1N0aXRjaE1hcmtlci93dGYvdGV4dC9TdHJpbmdWaWV3LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDI4NSArMCwwIEBACi0vKgotCi1Db3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi1hcmUgbWV0OgotMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi1ESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi1BTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLVNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiU3RyaW5nVmlldy5oIgotCi0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8dW5pY29k
ZS91YnJrLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5o
PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg+Ci0jaW5jbHVkZSA8
d3RmL3VuaWNvZGUvVVRGOC5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdXNpbmcgbmFtZXNwYWNl
IFVuaWNvZGU7Ci0KLWJvb2wgU3RyaW5nVmlldzo6Y29udGFpbnNJZ25vcmluZ0FTQ0lJQ2FzZShj
b25zdCBTdHJpbmdWaWV3JiBtYXRjaFN0cmluZykgY29uc3QKLXsKLSAgICByZXR1cm4gZmluZEln
bm9yaW5nQVNDSUlDYXNlKG1hdGNoU3RyaW5nKSAhPSBub3RGb3VuZDsKLX0KLQotYm9vbCBTdHJp
bmdWaWV3Ojpjb250YWluc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ1ZpZXcmIG1hdGNo
U3RyaW5nLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmluZEln
bm9yaW5nQVNDSUlDYXNlKG1hdGNoU3RyaW5nLCBzdGFydE9mZnNldCkgIT0gbm90Rm91bmQ7Ci19
Ci0KLXNpemVfdCBTdHJpbmdWaWV3OjpmaW5kSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5n
VmlldyYgbWF0Y2hTdHJpbmcpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDo6V1RGOjpmaW5kSWdub3Jp
bmdBU0NJSUNhc2UoKnRoaXMsIG1hdGNoU3RyaW5nLCAwKTsKLX0KLQotc2l6ZV90IFN0cmluZ1Zp
ZXc6OmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdWaWV3JiBtYXRjaFN0cmluZywg
dW5zaWduZWQgc3RhcnRPZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDo6V1RGOjpmaW5kSWdu
b3JpbmdBU0NJSUNhc2UoKnRoaXMsIG1hdGNoU3RyaW5nLCBzdGFydE9mZnNldCk7Ci19Ci0KLWJv
b2wgU3RyaW5nVmlldzo6c3RhcnRzV2l0aChjb25zdCBTdHJpbmdWaWV3JiBwcmVmaXgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIDo6V1RGOjpzdGFydHNXaXRoKCp0aGlzLCBwcmVmaXgpOwotfQotCi1i
b29sIFN0cmluZ1ZpZXc6OnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdW
aWV3JiBwcmVmaXgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDo6V1RGOjpzdGFydHNXaXRoSWdub3Jp
bmdBU0NJSUNhc2UoKnRoaXMsIHByZWZpeCk7Ci19Ci0KLWJvb2wgU3RyaW5nVmlldzo6ZW5kc1dp
dGgoY29uc3QgU3RyaW5nVmlldyYgc3VmZml4KSBjb25zdAotewotICAgIHJldHVybiA6OldURjo6
ZW5kc1dpdGgoKnRoaXMsIHN1ZmZpeCk7Ci19Ci0KLWJvb2wgU3RyaW5nVmlldzo6ZW5kc1dpdGhJ
Z25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdWaWV3JiBzdWZmaXgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIDo6V1RGOjplbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCp0aGlzLCBzdWZmaXgpOwot
fQotCi1DU3RyaW5nIFN0cmluZ1ZpZXc6OnV0ZjgoQ29udmVyc2lvbk1vZGUgbW9kZSkgY29uc3QK
LXsKLSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCIiLCAwKTsKLSAg
ICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjp1dGY4Rm9yQ2hhcmFj
dGVycyhjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7Ci0gICAgcmV0dXJuIFN0cmluZ0ltcGw6OnV0
ZjhGb3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgbW9kZSk7Ci19Ci0KLXNp
emVfdCBTdHJpbmdWaWV3OjpmaW5kKFN0cmluZ1ZpZXcgbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIHN0
YXJ0KSBjb25zdAotewotICAgIHJldHVybiBmaW5kQ29tbW9uKCp0aGlzLCBtYXRjaFN0cmluZywg
c3RhcnQpOwotfQotCi12b2lkIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJdGVyYXRvcjo6Zmlu
ZE5leHRTdWJzdHJpbmcoKQotewotICAgIGZvciAoc2l6ZV90IHNlcGFyYXRvclBvc2l0aW9uOyAo
c2VwYXJhdG9yUG9zaXRpb24gPSBtX3Jlc3VsdC5tX3N0cmluZy5maW5kKG1fcmVzdWx0Lm1fc2Vw
YXJhdG9yLCBtX3Bvc2l0aW9uKSkgIT0gbm90Rm91bmQ7ICsrbV9wb3NpdGlvbikgewotICAgICAg
ICBpZiAoc2VwYXJhdG9yUG9zaXRpb24gPiBtX3Bvc2l0aW9uKSB7Ci0gICAgICAgICAgICBtX2xl
bmd0aCA9IHNlcGFyYXRvclBvc2l0aW9uIC0gbV9wb3NpdGlvbjsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX2xlbmd0aCA9IG1fcmVzdWx0Lm1fc3RyaW5nLmxl
bmd0aCgpIC0gbV9wb3NpdGlvbjsKLX0KLQotYXV0byBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdDo6
SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAtPiBJdGVyYXRvciYKLXsKLSAgICBBU1NFUlQobV9wb3Np
dGlvbiA8IG1fcmVzdWx0Lm1fc3RyaW5nLmxlbmd0aCgpKTsKLSAgICBtX3Bvc2l0aW9uICs9IG1f
bGVuZ3RoOwotICAgIGlmIChtX3Bvc2l0aW9uIDwgbV9yZXN1bHQubV9zdHJpbmcubGVuZ3RoKCkp
IHsKLSAgICAgICAgKyttX3Bvc2l0aW9uOwotICAgICAgICBmaW5kTmV4dFN1YnN0cmluZygpOwot
ICAgIH0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWNsYXNzIFN0cmluZ1ZpZXc6OkdyYXBoZW1l
Q2x1c3RlcnM6Okl0ZXJhdG9yOjpJbXBsIHsKLXB1YmxpYzoKLSAgICBJbXBsKGNvbnN0IFN0cmlu
Z1ZpZXcmIHN0cmluZ1ZpZXcsIHN0ZDo6b3B0aW9uYWw8Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJ
dGVyYXRvcj4mJiBpdGVyYXRvciwgdW5zaWduZWQgaW5kZXgpCi0gICAgICAgIDogbV9zdHJpbmdW
aWV3KHN0cmluZ1ZpZXcpCi0gICAgICAgICwgbV9pdGVyYXRvcihXVEZNb3ZlKGl0ZXJhdG9yKSkK
LSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1faW5kZXhFbmQoY29tcHV0ZUlu
ZGV4RW5kKCkpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgb3BlcmF0b3IrKygpCi0gICAgewot
ICAgICAgICBBU1NFUlQobV9pbmRleEVuZCA+IG1faW5kZXgpOwotICAgICAgICBtX2luZGV4ID0g
bV9pbmRleEVuZDsKLSAgICAgICAgbV9pbmRleEVuZCA9IGNvbXB1dGVJbmRleEVuZCgpOwotICAg
IH0KLQotICAgIFN0cmluZ1ZpZXcgb3BlcmF0b3IqKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
IChtX3N0cmluZ1ZpZXcuaXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nVmlldyht
X3N0cmluZ1ZpZXcuY2hhcmFjdGVyczgoKSArIG1faW5kZXgsIG1faW5kZXhFbmQgLSBtX2luZGV4
KTsKLSAgICAgICAgcmV0dXJuIFN0cmluZ1ZpZXcobV9zdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigp
ICsgbV9pbmRleCwgbV9pbmRleEVuZCAtIG1faW5kZXgpOwotICAgIH0KLQotICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBJbXBsJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCgm
bV9zdHJpbmdWaWV3ID09ICZvdGhlci5tX3N0cmluZ1ZpZXcpOwotICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKLSAgICAgICAgQVNTRVJUKCFyZXN1bHQgfHwg
bV9pbmRleEVuZCA9PSBvdGhlci5tX2luZGV4RW5kKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjb21wdXRlSW5kZXhFbmQoKQotICAgIHsKLSAgICAgICAg
aWYgKCFtX2l0ZXJhdG9yKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChtX2lu
ZGV4ID09IG1fc3RyaW5nVmlldy5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2luZGV4
OwotICAgICAgICByZXR1cm4gdWJya19mb2xsb3dpbmcobV9pdGVyYXRvci52YWx1ZSgpLCBtX2lu
ZGV4KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgU3RyaW5nVmlldyYgbV9zdHJpbmdW
aWV3OwotICAgIHN0ZDo6b3B0aW9uYWw8Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcj4g
bV9pdGVyYXRvcjsKLSAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgIHVuc2lnbmVkIG1faW5kZXhF
bmQ7Ci19OwotCi1TdHJpbmdWaWV3OjpHcmFwaGVtZUNsdXN0ZXJzOjpJdGVyYXRvcjo6SXRlcmF0
b3IoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgdW5zaWduZWQgaW5kZXgpCi0gICAgOiBt
X2ltcGwoc3RkOjptYWtlX3VuaXF1ZTxJbXBsPihzdHJpbmdWaWV3LCBzdHJpbmdWaWV3LmlzTnVs
bCgpID8gc3RkOjpudWxsb3B0IDogc3RkOjpvcHRpb25hbDxOb25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yPihOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKHN0cmluZ1ZpZXcpKSwg
aW5kZXgpKQotewotfQotCi1TdHJpbmdWaWV3OjpHcmFwaGVtZUNsdXN0ZXJzOjpJdGVyYXRvcjo6
fkl0ZXJhdG9yKCkKLXsKLX0KLQotU3RyaW5nVmlldzo6R3JhcGhlbWVDbHVzdGVyczo6SXRlcmF0
b3I6Okl0ZXJhdG9yKEl0ZXJhdG9yJiYgb3RoZXIpCi0gICAgOiBtX2ltcGwoV1RGTW92ZShvdGhl
ci5tX2ltcGwpKQotewotfQotCi1hdXRvIFN0cmluZ1ZpZXc6OkdyYXBoZW1lQ2x1c3RlcnM6Okl0
ZXJhdG9yOjpvcGVyYXRvcisrKCkgLT4gSXRlcmF0b3ImCi17Ci0gICAgKysoKm1faW1wbCk7Ci0g
ICAgcmV0dXJuICp0aGlzOwotfQotCi1TdHJpbmdWaWV3IFN0cmluZ1ZpZXc6OkdyYXBoZW1lQ2x1
c3RlcnM6Okl0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAotewotICAgIHJldHVybiAqKm1faW1w
bDsKLX0KLQotYm9vbCBTdHJpbmdWaWV3OjpHcmFwaGVtZUNsdXN0ZXJzOjpJdGVyYXRvcjo6b3Bl
cmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICptX2lt
cGwgPT0gKihvdGhlci5tX2ltcGwpOwotfQotCi1ib29sIFN0cmluZ1ZpZXc6OkdyYXBoZW1lQ2x1
c3RlcnM6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
LXsKLSAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci19Ci0KLSNpZiBDSEVDS19TVFJJTkdW
SUVXX0xJRkVUSU1FCi0KLS8vIE1hbmFnZSByZWZlcmVuY2UgY291bnQgbWFudWFsbHkgc28gVW5k
ZXJseWluZ1N0cmluZyBkb2VzIG5vdCBuZWVkIHRvIGJlIGRlZmluZWQgaW4gdGhlIGhlYWRlci4K
LQotc3RydWN0IFN0cmluZ1ZpZXc6OlVuZGVybHlpbmdTdHJpbmcgewotICAgIHN0ZDo6YXRvbWlj
X3VpbnQgcmVmQ291bnQgeyAxdSB9OwotICAgIGJvb2wgaXNWYWxpZCB7IHRydWUgfTsKLSAgICBj
b25zdCBTdHJpbmdJbXBsJiBzdHJpbmc7Ci0gICAgZXhwbGljaXQgVW5kZXJseWluZ1N0cmluZyhj
b25zdCBTdHJpbmdJbXBsJik7Ci19OwotCi1TdHJpbmdWaWV3OjpVbmRlcmx5aW5nU3RyaW5nOjpV
bmRlcmx5aW5nU3RyaW5nKGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykKLSAgICA6IHN0cmluZyhz
dHJpbmcpCi17Ci19Ci0KLXN0YXRpYyBTdGF0aWNMb2NrIHVuZGVybHlpbmdTdHJpbmdzTXV0ZXg7
Ci0KLXN0YXRpYyBIYXNoTWFwPGNvbnN0IFN0cmluZ0ltcGwqLCBTdHJpbmdWaWV3OjpVbmRlcmx5
aW5nU3RyaW5nKj4mIHVuZGVybHlpbmdTdHJpbmdzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SGFzaE1hcDxjb25zdCBTdHJpbmdJbXBsKiwgU3RyaW5nVmlldzo6VW5kZXJseWluZ1N0
cmluZyo+PiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotdm9pZCBTdHJpbmdWaWV3OjppbnZh
bGlkYXRlKGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZ1RvQmVEZXN0cm95ZWQpCi17Ci0gICAgVW5k
ZXJseWluZ1N0cmluZyogdW5kZXJseWluZ1N0cmluZzsKLSAgICB7Ci0gICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKHVuZGVybHlpbmdTdHJpbmdzTXV0ZXgpOwotICAgICAg
ICB1bmRlcmx5aW5nU3RyaW5nID0gdW5kZXJseWluZ1N0cmluZ3MoKS50YWtlKCZzdHJpbmdUb0Jl
RGVzdHJveWVkKTsKLSAgICAgICAgaWYgKCF1bmRlcmx5aW5nU3RyaW5nKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlQodW5kZXJseWluZ1N0cmluZy0+aXNWYWxpZCk7Ci0g
ICAgdW5kZXJseWluZ1N0cmluZy0+aXNWYWxpZCA9IGZhbHNlOwotfQotCi1ib29sIFN0cmluZ1Zp
ZXc6OnVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1fdW5k
ZXJseWluZ1N0cmluZyB8fCBtX3VuZGVybHlpbmdTdHJpbmctPmlzVmFsaWQ7Ci19Ci0KLXZvaWQg
U3RyaW5nVmlldzo6YWRvcHRVbmRlcmx5aW5nU3RyaW5nKFVuZGVybHlpbmdTdHJpbmcqIHVuZGVy
bHlpbmdTdHJpbmcpCi17Ci0gICAgaWYgKG1fdW5kZXJseWluZ1N0cmluZykgewotICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh1bmRlcmx5aW5nU3RyaW5nc011dGV4KTsK
LSAgICAgICAgaWYgKCEtLW1fdW5kZXJseWluZ1N0cmluZy0+cmVmQ291bnQpIHsKLSAgICAgICAg
ICAgIGlmIChtX3VuZGVybHlpbmdTdHJpbmctPmlzVmFsaWQpIHsKLSAgICAgICAgICAgICAgICB1
bmRlcmx5aW5nU3RyaW5ncygpLnJlbW92ZSgmbV91bmRlcmx5aW5nU3RyaW5nLT5zdHJpbmcpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVsZXRlIG1fdW5kZXJseWluZ1N0cmluZzsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBtX3VuZGVybHlpbmdTdHJpbmcgPSB1bmRlcmx5aW5nU3RyaW5n
OwotfQotCi12b2lkIFN0cmluZ1ZpZXc6OnNldFVuZGVybHlpbmdTdHJpbmcoY29uc3QgU3RyaW5n
SW1wbCogc3RyaW5nKQotewotICAgIFVuZGVybHlpbmdTdHJpbmcqIHVuZGVybHlpbmdTdHJpbmc7
Ci0gICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIHVuZGVybHlpbmdTdHJpbmcgPSBudWxscHRyOwot
ICAgIGVsc2UgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayh1bmRl
cmx5aW5nU3RyaW5nc011dGV4KTsKLSAgICAgICAgYXV0byByZXN1bHQgPSB1bmRlcmx5aW5nU3Ry
aW5ncygpLmFkZChzdHJpbmcsIG51bGxwdHIpOwotICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IFVuZGVybHlpbmdT
dHJpbmcoKnN0cmluZyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICsrcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS0+cmVmQ291bnQ7Ci0gICAgICAgIHVuZGVybHlpbmdTdHJpbmcgPSByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwotICAgIH0KLSAgICBhZG9wdFVuZGVybHlpbmdTdHJpbmcodW5kZXJs
eWluZ1N0cmluZyk7Ci19Ci0KLXZvaWQgU3RyaW5nVmlldzo6c2V0VW5kZXJseWluZ1N0cmluZyhj
b25zdCBTdHJpbmdWaWV3JiBvdGhlclN0cmluZykKLXsKLSAgICBVbmRlcmx5aW5nU3RyaW5nKiB1
bmRlcmx5aW5nU3RyaW5nID0gb3RoZXJTdHJpbmcubV91bmRlcmx5aW5nU3RyaW5nOwotICAgIGlm
ICh1bmRlcmx5aW5nU3RyaW5nKQotICAgICAgICArK3VuZGVybHlpbmdTdHJpbmctPnJlZkNvdW50
OwotICAgIGFkb3B0VW5kZXJseWluZ1N0cmluZyh1bmRlcmx5aW5nU3RyaW5nKTsKLX0KLQotI2Vu
ZGlmIC8vIENIRUNLX1NUUklOR1ZJRVdfTElGRVRJTUUKLQotfSAvLyBuYW1lc3BhY2UgV1RGCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9TdHJpbmdW
aWV3LmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9TdHJpbmdWaWV3
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZDY3NWJjZmEzNDBkNzk2YmUyMDZh
YzY4ZTAyMTkzMTYyZTNjYjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvU3RyaW5nVmll
dy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgU3RyaW5nVmlld19oCi0jZGVmaW5lIFN0cmluZ1ZpZXdfaAotCi0jaW5jbHVkZSA8bGlt
aXRzLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NvbnZl
cnNpb25Nb2RlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvTENoYXIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdDb21tb24uaD4KLQotLy8gRklYTUU6IEVuYWJsaW5nIHRoZSBTdHJpbmdWaWV3
IGxpZmV0aW1lIGNoZWNraW5nIGNhdXNlcyB0aGUgTVNWQyBidWlsZCB0byBmYWlsLiBGaWd1cmUg
b3V0IHdoeS4KLSNpZiBkZWZpbmVkKE5ERUJVRykgfHwgQ09NUElMRVIoTVNWQykKLSNkZWZpbmUg
Q0hFQ0tfU1RSSU5HVklFV19MSUZFVElNRSAwCi0jZWxzZQotI2RlZmluZSBDSEVDS19TVFJJTkdW
SUVXX0xJRkVUSU1FIDEKLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdXNpbmcgQ2hhcmFj
dGVyTWF0Y2hGdW5jdGlvbiA9IGJvb2wgKCopKFVDaGFyKTsKLQotLy8gU3RyaW5nVmlldyBpcyBh
IG5vbi1vd25pbmcgcmVmZXJlbmNlIHRvIGEgc3RyaW5nLCBzaW1pbGFyIHRvIHRoZSBwcm9wb3Nl
ZCBzdGQ6OnN0cmluZ192aWV3LgotCi1jbGFzcyBTdHJpbmdWaWV3IHsKLXB1YmxpYzoKLSAgICBT
dHJpbmdWaWV3KCk7Ci0jaWYgQ0hFQ0tfU1RSSU5HVklFV19MSUZFVElNRQotICAgIH5TdHJpbmdW
aWV3KCk7Ci0gICAgU3RyaW5nVmlldyhTdHJpbmdWaWV3JiYpOwotICAgIFN0cmluZ1ZpZXcoY29u
c3QgU3RyaW5nVmlldyYpOwotICAgIFN0cmluZ1ZpZXcmIG9wZXJhdG9yPShTdHJpbmdWaWV3JiYp
OwotICAgIFN0cmluZ1ZpZXcmIG9wZXJhdG9yPShjb25zdCBTdHJpbmdWaWV3Jik7Ci0jZW5kaWYK
LQotICAgIFN0cmluZ1ZpZXcoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgU3RyaW5nVmlldyhj
b25zdCBTdHJpbmcmKTsKLSAgICBTdHJpbmdWaWV3KGNvbnN0IFN0cmluZ0ltcGwmKTsKLSAgICBT
dHJpbmdWaWV3KGNvbnN0IFN0cmluZ0ltcGwqKTsKLSAgICBTdHJpbmdWaWV3KGNvbnN0IExDaGFy
KiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBTdHJpbmdWaWV3KGNvbnN0IFVDaGFyKiwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLSAgICBTdHJpbmdWaWV3KGNvbnN0IGNoYXIqKTsKLQotICAgIHN0YXRpYyBT
dHJpbmdWaWV3IGVtcHR5KCk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICBi
b29sIGlzRW1wdHkoKSBjb25zdDsKLQotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dDsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0OwotCi0gICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNp
Z25lZCBpbmRleCkgY29uc3Q7Ci0KLSAgICBjbGFzcyBDb2RlVW5pdHM7Ci0gICAgQ29kZVVuaXRz
IGNvZGVVbml0cygpIGNvbnN0OwotCi0gICAgY2xhc3MgQ29kZVBvaW50czsKLSAgICBDb2RlUG9p
bnRzIGNvZGVQb2ludHMoKSBjb25zdDsKLQotICAgIGNsYXNzIEdyYXBoZW1lQ2x1c3RlcnM7Ci0g
ICAgR3JhcGhlbWVDbHVzdGVycyBncmFwaGVtZUNsdXN0ZXJzKCkgY29uc3Q7Ci0KLSAgICBib29s
IGlzOEJpdCgpIGNvbnN0OwotICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0Owot
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdDsKLQotICAgIFN0cmluZyB0b1N0
cmluZygpIGNvbnN0OwotICAgIFN0cmluZyB0b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkgY29uc3Q7
Ci0gICAgQXRvbWljU3RyaW5nIHRvQXRvbWljU3RyaW5nKCkgY29uc3Q7Ci0gICAgUmVmUHRyPEF0
b21pY1N0cmluZ0ltcGw+IHRvRXhpc3RpbmdBdG9taWNTdHJpbmcoKSBjb25zdDsKLQotI2lmIFVT
RShDRikKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIG51bGwgc3RyaW5ncyB0byBlbXB0
eSBzdHJpbmdzLgotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGNyZWF0ZUNGU3RyaW5nV2l0aG91dENvcHlpbmcoKSBjb25zdDsKLSNlbmRpZgotCi0jaWZk
ZWYgX19PQkpDX18KLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBudWxsIHN0cmluZ3Mg
dG8gZW1wdHkgc3RyaW5ncy4KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmV0YWluUHRyPE5T
U3RyaW5nPiBjcmVhdGVOU1N0cmluZygpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBSZXRhaW5QdHI8TlNTdHJpbmc+IGNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlpbmcoKSBjb25z
dDsKLSNlbmRpZgotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIENTdHJpbmcgdXRmOChDb252
ZXJzaW9uTW9kZSA9IExlbmllbnRDb252ZXJzaW9uKSBjb25zdDsKLQotICAgIGNsYXNzIFVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBVcGNvbnZlcnRlZENoYXJhY3RlcnMgdXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0
KExDaGFyKikgY29uc3Q7Ci0gICAgdm9pZCBnZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChVQ2hh
ciopIGNvbnN0OwotCi0gICAgU3RyaW5nVmlldyBzdWJzdHJpbmcodW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkIGxlbmd0aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkgY29u
c3Q7Ci0gICAgU3RyaW5nVmlldyBsZWZ0KHVuc2lnbmVkIGxlbikgY29uc3QgeyByZXR1cm4gc3Vi
c3RyaW5nKDAsIGxlbik7IH0KLSAgICBTdHJpbmdWaWV3IHJpZ2h0KHVuc2lnbmVkIGxlbikgY29u
c3QgeyByZXR1cm4gc3Vic3RyaW5nKGxlbmd0aCgpIC0gbGVuLCBsZW4pOyB9Ci0KLSAgICBjbGFz
cyBTcGxpdFJlc3VsdDsKLSAgICBTcGxpdFJlc3VsdCBzcGxpdChVQ2hhcikgY29uc3Q7Ci0KLSAg
ICBzaXplX3QgZmluZChVQ2hhciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdDsKLSAgICBzaXpl
X3QgZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0
OwotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHNpemVfdCBmaW5kKFN0cmluZ1ZpZXcsIHVu
c2lnbmVkIHN0YXJ0KSBjb25zdDsKLQotICAgIHNpemVfdCByZXZlcnNlRmluZChVQ2hhciwgdW5z
aWduZWQgaW5kZXggPSBVSU5UX01BWCkgY29uc3Q7Ci0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgc2l6ZV90IGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdWaWV3JikgY29uc3Q7
Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHNpemVfdCBmaW5kSWdub3JpbmdBU0NJSUNhc2Uo
Y29uc3QgU3RyaW5nVmlldyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KSBjb25zdDsKLQotICAgIGJv
b2wgY29udGFpbnMoVUNoYXIpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29s
IGNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nVmlldyYpIGNvbnN0OwotICAg
IFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoY29u
c3QgU3RyaW5nVmlldyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KSBjb25zdDsKLQotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3RyaW5nVmlldyYpIGNvbnN0
OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIHN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJ
Q2FzZShjb25zdCBTdHJpbmdWaWV3JikgY29uc3Q7Ci0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgYm9vbCBlbmRzV2l0aChjb25zdCBTdHJpbmdWaWV3JikgY29uc3Q7Ci0gICAgV1RGX0VYUE9S
VF9TVFJJTkdfQVBJIGJvb2wgZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdW
aWV3JikgY29uc3Q7Ci0KLSAgICBpbnQgdG9JbnQoKSBjb25zdDsKLSAgICBpbnQgdG9JbnQoYm9v
bCYgaXNWYWxpZCkgY29uc3Q7Ci0gICAgaW50IHRvSW50U3RyaWN0KGJvb2wmIGlzVmFsaWQpIGNv
bnN0OwotICAgIGZsb2F0IHRvRmxvYXQoYm9vbCYgaXNWYWxpZCkgY29uc3Q7Ci0KLSAgICBzdGF0
aWMgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IFN0cmluZ0ltcGwmKTsKLQotICAgIHN0cnVjdCBVbmRl
cmx5aW5nU3RyaW5nOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBib29sIGVxdWFsKFN0cmluZ1Zp
ZXcsIFN0cmluZ1ZpZXcpOwotCi0gICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IExDaGFyKiwgdW5z
aWduZWQgbGVuZ3RoKTsKLSAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgVUNoYXIqLCB1bnNpZ25l
ZCBsZW5ndGgpOwotCi0jaWYgQ0hFQ0tfU1RSSU5HVklFV19MSUZFVElNRQotICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBib29sIHVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKCkgY29uc3Q7Ci0gICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgc2V0VW5kZXJseWluZ1N0cmluZyhjb25zdCBTdHJp
bmdJbXBsKik7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgc2V0VW5kZXJseWluZ1N0
cmluZyhjb25zdCBTdHJpbmdWaWV3Jik7Ci0jZWxzZQotICAgIGJvb2wgdW5kZXJseWluZ1N0cmlu
Z0lzVmFsaWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBzZXRVbmRlcmx5aW5n
U3RyaW5nKGNvbnN0IFN0cmluZ0ltcGwqKSB7IH0KLSAgICB2b2lkIHNldFVuZGVybHlpbmdTdHJp
bmcoY29uc3QgU3RyaW5nVmlldyYpIHsgfQotI2VuZGlmCi0gICAgdm9pZCBjbGVhcigpOwotCi0g
ICAgY29uc3Qgdm9pZCogbV9jaGFyYWN0ZXJzIHsgbnVsbHB0ciB9OwotICAgIHVuc2lnbmVkIG1f
bGVuZ3RoIHsgMCB9OwotICAgIGJvb2wgbV9pczhCaXQgeyB0cnVlIH07Ci0KLSNpZiBDSEVDS19T
VFJJTkdWSUVXX0xJRkVUSU1FCi0gICAgdm9pZCBhZG9wdFVuZGVybHlpbmdTdHJpbmcoVW5kZXJs
eWluZ1N0cmluZyopOwotICAgIFVuZGVybHlpbmdTdHJpbmcqIG1fdW5kZXJseWluZ1N0cmluZyB7
IG51bGxwdHIgfTsKLSNlbmRpZgotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiB2b2lkIGFwcGVuZChWZWN0b3I8Q2hhcmFjdGVyVHlw
ZSwgaW5saW5lQ2FwYWNpdHk+JiwgU3RyaW5nVmlldyk7Ci0KLWJvb2wgZXF1YWwoU3RyaW5nVmll
dywgU3RyaW5nVmlldyk7Ci1ib29sIGVxdWFsKFN0cmluZ1ZpZXcsIGNvbnN0IExDaGFyKik7Ci1i
b29sIGVxdWFsKFN0cmluZ1ZpZXcsIGNvbnN0IGNoYXIqKTsKLQotYm9vbCBlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKFN0cmluZ1ZpZXcsIFN0cmluZ1ZpZXcpOwotYm9vbCBlcXVhbElnbm9yaW5nQVND
SUlDYXNlKFN0cmluZ1ZpZXcsIGNvbnN0IGNoYXIqKTsKLQotdGVtcGxhdGU8dW5zaWduZWQgbGVu
Z3RoPiBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ1ZpZXcsIGNvbnN0
IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKTsKLQotaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShTdHJpbmdWaWV3IGEsIFN0cmluZ1ZpZXcgYikgeyByZXR1cm4gZXF1YWwoYSwgYik7IH0K
LWlubGluZSBib29sIG9wZXJhdG9yPT0oU3RyaW5nVmlldyBhLCBjb25zdCBMQ2hhciogYikgeyBy
ZXR1cm4gZXF1YWwoYSwgYik7IH0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oU3RyaW5nVmlldyBh
LCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiBlcXVhbChhLCBiKTsgfQotaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBMQ2hhciogYSwgU3RyaW5nVmlldyBiKSB7IHJldHVybiBlcXVhbChiLCBh
KTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjaGFyKiBhLCBTdHJpbmdWaWV3IGIp
IHsgcmV0dXJuIGVxdWFsKGIsIGEpOyB9Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oU3RyaW5n
VmlldyBhLCBTdHJpbmdWaWV3IGIpIHsgcmV0dXJuICFlcXVhbChhLCBiKTsgfQotaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShTdHJpbmdWaWV3IGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiAhZXF1
YWwoYSwgYik7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oU3RyaW5nVmlldyBhLCBjb25zdCBj
aGFyKiBiKSB7IHJldHVybiAhZXF1YWwoYSwgYik7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgTENoYXIqIGEsIFN0cmluZ1ZpZXcgYikgeyByZXR1cm4gIWVxdWFsKGIsIGEpOyB9Ci1p
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNoYXIqIGEsIFN0cmluZ1ZpZXcgYikgeyByZXR1
cm4gIWVxdWFsKGIsIGEpOyB9Ci0KLX0KLQotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV1RGIHsK
LQotaW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoKQotewotICAgIC8vIEZJWE1FOiBJdCdz
IHBlY3VsaWFyIHRoYXQgbnVsbCBzdHJpbmdzIGFyZSAxNi1iaXQgYW5kIGVtcHR5IHN0cmluZ3Mg
cmV0dXJuIDgtYml0IChhY2NvcmRpbmcgdG8gdGhlIGlzOEJpdCBmdW5jdGlvbikuCi19Ci0KLSNp
ZiBDSEVDS19TVFJJTkdWSUVXX0xJRkVUSU1FCi1pbmxpbmUgU3RyaW5nVmlldzo6flN0cmluZ1Zp
ZXcoKQotewotICAgIHNldFVuZGVybHlpbmdTdHJpbmcobnVsbHB0cik7Ci19Ci0KLWlubGluZSBT
dHJpbmdWaWV3OjpTdHJpbmdWaWV3KFN0cmluZ1ZpZXcmJiBvdGhlcikKLSAgICA6IG1fY2hhcmFj
dGVycyhvdGhlci5tX2NoYXJhY3RlcnMpCi0gICAgLCBtX2xlbmd0aChvdGhlci5tX2xlbmd0aCkK
LSAgICAsIG1faXM4Qml0KG90aGVyLm1faXM4Qml0KQotewotICAgIEFTU0VSVChvdGhlci51bmRl
cmx5aW5nU3RyaW5nSXNWYWxpZCgpKTsKLQotICAgIG90aGVyLmNsZWFyKCk7Ci0KLSAgICBzZXRV
bmRlcmx5aW5nU3RyaW5nKG90aGVyKTsKLSAgICBvdGhlci5zZXRVbmRlcmx5aW5nU3RyaW5nKG51
bGxwdHIpOwotfQotCi1pbmxpbmUgU3RyaW5nVmlldzo6U3RyaW5nVmlldyhjb25zdCBTdHJpbmdW
aWV3JiBvdGhlcikKLSAgICA6IG1fY2hhcmFjdGVycyhvdGhlci5tX2NoYXJhY3RlcnMpCi0gICAg
LCBtX2xlbmd0aChvdGhlci5tX2xlbmd0aCkKLSAgICAsIG1faXM4Qml0KG90aGVyLm1faXM4Qml0
KQotewotICAgIEFTU0VSVChvdGhlci51bmRlcmx5aW5nU3RyaW5nSXNWYWxpZCgpKTsKLQotICAg
IHNldFVuZGVybHlpbmdTdHJpbmcob3RoZXIpOwotfQotCi1pbmxpbmUgU3RyaW5nVmlldyYgU3Ry
aW5nVmlldzo6b3BlcmF0b3I9KFN0cmluZ1ZpZXcmJiBvdGhlcikKLXsKLSAgICBBU1NFUlQob3Ro
ZXIudW5kZXJseWluZ1N0cmluZ0lzVmFsaWQoKSk7Ci0KLSAgICBtX2NoYXJhY3RlcnMgPSBvdGhl
ci5tX2NoYXJhY3RlcnM7Ci0gICAgbV9sZW5ndGggPSBvdGhlci5tX2xlbmd0aDsKLSAgICBtX2lz
OEJpdCA9IG90aGVyLm1faXM4Qml0OwotCi0gICAgb3RoZXIuY2xlYXIoKTsKLQotICAgIHNldFVu
ZGVybHlpbmdTdHJpbmcob3RoZXIpOwotICAgIG90aGVyLnNldFVuZGVybHlpbmdTdHJpbmcobnVs
bHB0cik7Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSBTdHJpbmdWaWV3JiBTdHJp
bmdWaWV3OjpvcGVyYXRvcj0oY29uc3QgU3RyaW5nVmlldyYgb3RoZXIpCi17Ci0gICAgQVNTRVJU
KG90aGVyLnVuZGVybHlpbmdTdHJpbmdJc1ZhbGlkKCkpOwotCi0gICAgbV9jaGFyYWN0ZXJzID0g
b3RoZXIubV9jaGFyYWN0ZXJzOwotICAgIG1fbGVuZ3RoID0gb3RoZXIubV9sZW5ndGg7Ci0gICAg
bV9pczhCaXQgPSBvdGhlci5tX2lzOEJpdDsKLQotICAgIHNldFVuZGVybHlpbmdTdHJpbmcob3Ro
ZXIpOwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotI2VuZGlmIC8vIENIRUNLX1NUUklOR1ZJRVdf
TElGRVRJTUUKLQotaW5saW5lIHZvaWQgU3RyaW5nVmlldzo6aW5pdGlhbGl6ZShjb25zdCBMQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIG1fY2hhcmFjdGVycyA9IGNo
YXJhY3RlcnM7Ci0gICAgbV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgbV9pczhCaXQgPSB0cnVlOwot
fQotCi1pbmxpbmUgdm9pZCBTdHJpbmdWaWV3Ojppbml0aWFsaXplKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgbV9jaGFyYWN0ZXJzID0gY2hhcmFjdGVy
czsKLSAgICBtX2xlbmd0aCA9IGxlbmd0aDsKLSAgICBtX2lzOEJpdCA9IGZhbHNlOwotfQotCi1p
bmxpbmUgU3RyaW5nVmlldzo6U3RyaW5nVmlldyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKQotewotICAgIGluaXRpYWxpemUoY2hhcmFjdGVycywgbGVuZ3RoKTsKLX0K
LQotaW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpbml0aWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCk7
Ci19Ci0KLWlubGluZSBTdHJpbmdWaWV3OjpTdHJpbmdWaWV3KGNvbnN0IGNoYXIqIGNoYXJhY3Rl
cnMpCi17Ci0gICAgaW5pdGlhbGl6ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hh
cmFjdGVycyksIHN0cmxlbihjaGFyYWN0ZXJzKSk7Ci19Ci0KLWlubGluZSBTdHJpbmdWaWV3OjpT
dHJpbmdWaWV3KGNvbnN0IFN0cmluZ0ltcGwmIHN0cmluZykKLXsKLSAgICBzZXRVbmRlcmx5aW5n
U3RyaW5nKCZzdHJpbmcpOwotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIGluaXRp
YWxpemUoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBpbml0aWFsaXplKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgp
KTsKLX0KLQotaW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nSW1wbCog
c3RyaW5nKQotewotICAgIGlmICghc3RyaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRV
bmRlcmx5aW5nU3RyaW5nKHN0cmluZyk7Ci0gICAgaWYgKHN0cmluZy0+aXM4Qml0KCkpCi0gICAg
ICAgIGluaXRpYWxpemUoc3RyaW5nLT5jaGFyYWN0ZXJzOCgpLCBzdHJpbmctPmxlbmd0aCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGluaXRpYWxpemUoc3RyaW5nLT5jaGFyYWN0ZXJzMTYoKSwgc3Ry
aW5nLT5sZW5ndGgoKSk7Ci19Ci0KLWlubGluZSBTdHJpbmdWaWV3OjpTdHJpbmdWaWV3KGNvbnN0
IFN0cmluZyYgc3RyaW5nKQotewotICAgIHNldFVuZGVybHlpbmdTdHJpbmcoc3RyaW5nLmltcGwo
KSk7Ci0gICAgaWYgKCFzdHJpbmcuaW1wbCgpKSB7Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHN0cmluZy5pczhCaXQoKSkgewotICAgICAgICBpbml0
aWFsaXplKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGluaXRpYWxpemUoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJp
bmcubGVuZ3RoKCkpOwotfQotCi1pbmxpbmUgU3RyaW5nVmlldzo6U3RyaW5nVmlldyhjb25zdCBB
dG9taWNTdHJpbmcmIGF0b21pY1N0cmluZykKLSAgICA6IFN0cmluZ1ZpZXcoYXRvbWljU3RyaW5n
LnN0cmluZygpKQotewotfQotCi1pbmxpbmUgdm9pZCBTdHJpbmdWaWV3OjpjbGVhcigpCi17Ci0g
ICAgbV9jaGFyYWN0ZXJzID0gbnVsbHB0cjsKLSAgICBtX2xlbmd0aCA9IDA7Ci0gICAgbV9pczhC
aXQgPSB0cnVlOwotfQotCi1pbmxpbmUgU3RyaW5nVmlldyBTdHJpbmdWaWV3OjplbXB0eSgpCi17
Ci0gICAgcmV0dXJuIFN0cmluZ1ZpZXcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCIi
KSwgMCk7Ci19Ci0KLWlubGluZSBjb25zdCBMQ2hhciogU3RyaW5nVmlldzo6Y2hhcmFjdGVyczgo
KSBjb25zdAotewotICAgIEFTU0VSVChpczhCaXQoKSk7Ci0gICAgQVNTRVJUKHVuZGVybHlpbmdT
dHJpbmdJc1ZhbGlkKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBMQ2hhcio+KG1f
Y2hhcmFjdGVycyk7Ci19Ci0KLWlubGluZSBjb25zdCBVQ2hhciogU3RyaW5nVmlldzo6Y2hhcmFj
dGVyczE2KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzOEJpdCgpKTsKLSAgICBBU1NFUlQodW5k
ZXJseWluZ1N0cmluZ0lzVmFsaWQoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFVD
aGFyKj4obV9jaGFyYWN0ZXJzKTsKLX0KLQotY2xhc3MgU3RyaW5nVmlldzo6VXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBVcGNvbnZlcnRlZENoYXJhY3RlcnMo
Y29uc3QgU3RyaW5nVmlldyYpOwotICAgIG9wZXJhdG9yIGNvbnN0IFVDaGFyKigpIGNvbnN0IHsg
cmV0dXJuIG1fY2hhcmFjdGVyczsgfQotICAgIGNvbnN0IFVDaGFyKiBnZXQoKSBjb25zdCB7IHJl
dHVybiBtX2NoYXJhY3RlcnM7IH0KLXByaXZhdGU6Ci0gICAgVmVjdG9yPFVDaGFyLCAzMj4gbV91
cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyczsKLX07
Ci0KLWlubGluZSBTdHJpbmdWaWV3OjpVcGNvbnZlcnRlZENoYXJhY3RlcnMgU3RyaW5nVmlldzo6
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gVXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCp0aGlzKTsKLX0KLQotaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6aXNOdWxsKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gIW1fY2hhcmFjdGVyczsKLX0KLQotaW5saW5lIGJvb2wgU3Ry
aW5nVmlldzo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFsZW5ndGgoKTsKLX0KLQot
aW5saW5lIHVuc2lnbmVkIFN0cmluZ1ZpZXc6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fbGVuZ3RoOwotfQotCi1pbmxpbmUgU3RyaW5nVmlldzo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICFpc051bGwoKTsKLX0KLQotaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6
aXM4Qml0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pczhCaXQ7Ci19Ci0KLWlubGluZSBTdHJp
bmdWaWV3IFN0cmluZ1ZpZXc6OnN1YnN0cmluZyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVu
Z3RoKSBjb25zdAotewotICAgIGlmIChzdGFydCA+PSB0aGlzLT5sZW5ndGgoKSkKLSAgICAgICAg
cmV0dXJuIGVtcHR5KCk7Ci0gICAgdW5zaWduZWQgbWF4TGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCkg
LSBzdGFydDsKLQotICAgIGlmIChsZW5ndGggPj0gbWF4TGVuZ3RoKSB7Ci0gICAgICAgIGlmICgh
c3RhcnQpCi0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIGxlbmd0aCA9IG1heExl
bmd0aDsKLSAgICB9Ci0KLSAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgU3RyaW5nVmlldyBy
ZXN1bHQoY2hhcmFjdGVyczgoKSArIHN0YXJ0LCBsZW5ndGgpOwotICAgICAgICByZXN1bHQuc2V0
VW5kZXJseWluZ1N0cmluZygqdGhpcyk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
ICAgIFN0cmluZ1ZpZXcgcmVzdWx0KGNoYXJhY3RlcnMxNigpICsgc3RhcnQsIGxlbmd0aCk7Ci0g
ICAgcmVzdWx0LnNldFVuZGVybHlpbmdTdHJpbmcoKnRoaXMpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLWlubGluZSBVQ2hhciBTdHJpbmdWaWV3OjpvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4
KSBjb25zdAotewotICAgIEFTU0VSVChpbmRleCA8IGxlbmd0aCgpKTsKLSAgICBpZiAoaXM4Qml0
KCkpCi0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzOCgpW2luZGV4XTsKLSAgICByZXR1cm4gY2hh
cmFjdGVyczE2KClbaW5kZXhdOwotfQotCi1pbmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojpjb250YWlu
cyhVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZpbmQoY2hhcmFjdGVyKSAh
PSBub3RGb3VuZDsKLX0KLQotaW5saW5lIHZvaWQgU3RyaW5nVmlldzo6Z2V0Q2hhcmFjdGVyc1dp
dGhVcGNvbnZlcnQoTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAotewotICAgIEFTU0VSVChpczhC
aXQoKSk7Ci0gICAgYXV0byBjaGFyYWN0ZXJzOCA9IHRoaXMtPmNoYXJhY3RlcnM4KCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCi0gICAgICAgIGRlc3RpbmF0
aW9uW2ldID0gY2hhcmFjdGVyczhbaV07Ci19Ci0KLWlubGluZSB2b2lkIFN0cmluZ1ZpZXc6Omdl
dENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKLXsKLSAg
ICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgYXV0byBjaGFyYWN0ZXJzOCA9IHRoaXMtPmNoYXJh
Y3RlcnM4KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytp
KQotICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBjaGFyYWN0ZXJzOFtpXTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBhdXRvIGNoYXJhY3RlcnMxNiA9IHRoaXMtPmNoYXJhY3RlcnMx
NigpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKQotICAgICAg
ICBkZXN0aW5hdGlvbltpXSA9IGNoYXJhY3RlcnMxNltpXTsKLX0KLQotaW5saW5lIFN0cmluZ1Zp
ZXc6OlVwY29udmVydGVkQ2hhcmFjdGVyczo6VXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKGNvbnN0IFN0
cmluZ1ZpZXcmIHN0cmluZykKLXsKLSAgICBpZiAoIXN0cmluZy5pczhCaXQoKSkgewotICAgICAg
ICBtX2NoYXJhY3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVyczE2KCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4ID0gc3RyaW5nLmNoYXJhY3RlcnM4
KCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLm1fbGVuZ3RoOwotICAgIG1fdXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIG1fdXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzLnVuY2hlY2tlZEFwcGVuZChjaGFyYWN0ZXJzOFtpXSk7Ci0gICAgbV9jaGFyYWN0
ZXJzID0gbV91cGNvbnZlcnRlZENoYXJhY3RlcnMuZGF0YSgpOwotfQotCi1pbmxpbmUgU3RyaW5n
IFN0cmluZ1ZpZXc6OnRvU3RyaW5nKCkgY29uc3QKLXsKLSAgICBpZiAoaXM4Qml0KCkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgpOwotICAgIHJldHVybiBT
dHJpbmcoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoKTsKLX0KLQotaW5saW5lIEF0b21pY1N0cmlu
ZyBTdHJpbmdWaWV3Ojp0b0F0b21pY1N0cmluZygpIGNvbnN0Ci17Ci0gICAgaWYgKGlzOEJpdCgp
KQotICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nKGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoKTsK
LSAgICByZXR1cm4gQXRvbWljU3RyaW5nKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCk7Ci19Ci0K
LWlubGluZSBSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4gU3RyaW5nVmlldzo6dG9FeGlzdGluZ0F0
b21pY1N0cmluZygpIGNvbnN0Ci17Ci0gICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1cm4g
QXRvbWljU3RyaW5nSW1wbDo6bG9va1VwKGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoKTsKLSAgICBy
ZXR1cm4gQXRvbWljU3RyaW5nSW1wbDo6bG9va1VwKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCk7
Ci19Ci0KLWlubGluZSBmbG9hdCBTdHJpbmdWaWV3Ojp0b0Zsb2F0KGJvb2wmIGlzVmFsaWQpIGNv
bnN0Ci17Ci0gICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvRmxv
YXQoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgsICZpc1ZhbGlkKTsKLSAgICByZXR1cm4gY2hhcmFj
dGVyc1RvRmxvYXQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCAmaXNWYWxpZCk7Ci19Ci0KLWlu
bGluZSBpbnQgU3RyaW5nVmlldzo6dG9JbnQoKSBjb25zdAotewotICAgIGJvb2wgaXNWYWxpZDsK
LSAgICByZXR1cm4gdG9JbnQoaXNWYWxpZCk7Ci19Ci0KLWlubGluZSBpbnQgU3RyaW5nVmlldzo6
dG9JbnQoYm9vbCYgaXNWYWxpZCkgY29uc3QKLXsKLSAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAg
IHJldHVybiBjaGFyYWN0ZXJzVG9JbnQoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgsICZpc1ZhbGlk
KTsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwg
JmlzVmFsaWQpOwotfQotCi1pbmxpbmUgaW50IFN0cmluZ1ZpZXc6OnRvSW50U3RyaWN0KGJvb2wm
IGlzVmFsaWQpIGNvbnN0Ci17Ci0gICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1cm4gY2hh
cmFjdGVyc1RvSW50U3RyaWN0KGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCAmaXNWYWxpZCk7Ci0g
ICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFN0cmljdChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgs
ICZpc1ZhbGlkKTsKLX0KLQotaW5saW5lIFN0cmluZyBTdHJpbmdWaWV3Ojp0b1N0cmluZ1dpdGhv
dXRDb3B5aW5nKCkgY29uc3QKLXsKLSAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBT
dHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCk7
Ci0gICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGNoYXJhY3RlcnMx
NigpLCBtX2xlbmd0aCk7Ci19Ci0KLWlubGluZSBzaXplX3QgU3RyaW5nVmlldzo6ZmluZChVQ2hh
ciBjaGFyYWN0ZXIsIHVuc2lnbmVkIHN0YXJ0KSBjb25zdAotewotICAgIGlmIChpczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgY2hhcmFj
dGVyLCBzdGFydCk7Ci0gICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5n
dGgsIGNoYXJhY3Rlciwgc3RhcnQpOwotfQotCi1pbmxpbmUgc2l6ZV90IFN0cmluZ1ZpZXc6OmZp
bmQoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvbiBtYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBzdGFydCkg
Y29uc3QKLXsKLSAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hh
cmFjdGVyczgoKSwgbV9sZW5ndGgsIG1hdGNoRnVuY3Rpb24sIHN0YXJ0KTsKLSAgICByZXR1cm4g
V1RGOjpmaW5kKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgbWF0Y2hGdW5jdGlvbiwgc3RhcnQp
OwotfQotCi1pbmxpbmUgc2l6ZV90IFN0cmluZ1ZpZXc6OnJldmVyc2VGaW5kKFVDaGFyIGNoYXJh
Y3RlciwgdW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzOEJpdCgpKQotICAgICAg
ICByZXR1cm4gV1RGOjpyZXZlcnNlRmluZChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgY2hhcmFj
dGVyLCBpbmRleCk7Ci0gICAgcmV0dXJuIFdURjo6cmV2ZXJzZUZpbmQoY2hhcmFjdGVyczE2KCks
IG1fbGVuZ3RoLCBjaGFyYWN0ZXIsIGluZGV4KTsKLX0KLQotI2lmICFDSEVDS19TVFJJTkdWSUVX
X0xJRkVUSU1FCi1pbmxpbmUgdm9pZCBTdHJpbmdWaWV3OjppbnZhbGlkYXRlKGNvbnN0IFN0cmlu
Z0ltcGwmKQotewotfQotI2VuZGlmCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGU+IGNs
YXNzIFN0cmluZ1R5cGVBZGFwdGVyOwotCi10ZW1wbGF0ZTw+IGNsYXNzIFN0cmluZ1R5cGVBZGFw
dGVyPFN0cmluZ1ZpZXc+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdW
aWV3PihTdHJpbmdWaWV3IHN0cmluZykKLSAgICAgICAgOiBtX3N0cmluZyhzdHJpbmcpCi0gICAg
ewotICAgIH0KLQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0
aCgpOyB9Ci0gICAgYm9vbCBpczhCaXQoKSB7IHJldHVybiBtX3N0cmluZy5pczhCaXQoKTsgfQot
ICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24pIHsgbV9zdHJpbmcuZ2V0Q2hhcmFj
dGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24pOyB9Ci0gICAgdm9pZCB3cml0ZVRvKFVDaGFy
KiBkZXN0aW5hdGlvbikgeyBtX3N0cmluZy5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkZXN0
aW5hdGlvbik7IH0KLQotICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
aW5nLnRvU3RyaW5nKCk7IH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmdWaWV3IG1fc3RyaW5nOwot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PiB2b2lkIGFwcGVuZChWZWN0b3I8Q2hhcmFjdGVyVHlwZSwgaW5saW5lQ2FwYWNpdHk+JiBi
dWZmZXIsIFN0cmluZ1ZpZXcgc3RyaW5nKQotewotICAgIHVuc2lnbmVkIG9sZFNpemUgPSBidWZm
ZXIuc2l6ZSgpOwotICAgIGJ1ZmZlci5ncm93KG9sZFNpemUgKyBzdHJpbmcubGVuZ3RoKCkpOwot
ICAgIHN0cmluZy5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChidWZmZXIuZGF0YSgpICsgb2xk
U2l6ZSk7Ci19Ci0KLWlubGluZSBib29sIGVxdWFsKFN0cmluZ1ZpZXcgYSwgU3RyaW5nVmlldyBi
KQotewotICAgIGlmIChhLm1fY2hhcmFjdGVycyA9PSBiLm1fY2hhcmFjdGVycykgewotICAgICAg
ICBBU1NFUlQoYS5pczhCaXQoKSA9PSBiLmlzOEJpdCgpKTsKLSAgICAgICAgcmV0dXJuIGEubGVu
Z3RoKCkgPT0gYi5sZW5ndGgoKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHJldHVybiBlcXVhbENv
bW1vbihhLCBiKTsKLX0KLQotaW5saW5lIGJvb2wgZXF1YWwoU3RyaW5nVmlldyBhLCBjb25zdCBM
Q2hhciogYikKLXsKLSAgICBpZiAoIWIpCi0gICAgICAgIHJldHVybiAhYS5pc0VtcHR5KCk7Ci0g
ICAgaWYgKGEuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gIWI7Ci0gICAgdW5zaWduZWQgYUxl
bmd0aCA9IGEubGVuZ3RoKCk7Ci0gICAgaWYgKGEuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBl
cXVhbChhLmNoYXJhY3RlcnM4KCksIGIsIGFMZW5ndGgpOwotICAgIHJldHVybiBlcXVhbChhLmNo
YXJhY3RlcnMxNigpLCBiLCBhTGVuZ3RoKTsKLX0KLQotaW5saW5lIGJvb2wgZXF1YWwoU3RyaW5n
VmlldyBhLCBjb25zdCBjaGFyKiBiKSAKLXsKLSAgICByZXR1cm4gZXF1YWwoYSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KGIpKTsgCi19Ci0KLWlubGluZSBib29sIGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoU3RyaW5nVmlldyBhLCBTdHJpbmdWaWV3IGIpCi17Ci0gICAgcmV0dXJuIGVx
dWFsSWdub3JpbmdBU0NJSUNhc2VDb21tb24oYSwgYik7Ci19Ci0KLWlubGluZSBib29sIGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nVmlldyBhLCBjb25zdCBjaGFyKiBiKQotewotICAgIHJl
dHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlQ29tbW9uKGEsIGIpOwotfQotCi1jbGFzcyBTdHJp
bmdWaWV3OjpTcGxpdFJlc3VsdCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BsaXRSZXN1bHQo
U3RyaW5nVmlldywgVUNoYXIgc2VwYXJhdG9yKTsKLQotICAgIGNsYXNzIEl0ZXJhdG9yOwotICAg
IEl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7Ci0gICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7Ci0KLXBy
aXZhdGU6Ci0gICAgU3RyaW5nVmlldyBtX3N0cmluZzsKLSAgICBVQ2hhciBtX3NlcGFyYXRvcjsK
LX07Ci0KLWNsYXNzIFN0cmluZ1ZpZXc6OkdyYXBoZW1lQ2x1c3RlcnMgewotcHVibGljOgotICAg
IGV4cGxpY2l0IEdyYXBoZW1lQ2x1c3RlcnMoY29uc3QgU3RyaW5nVmlldyYpOwotCi0gICAgY2xh
c3MgSXRlcmF0b3I7Ci0gICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKLSAgICBJdGVyYXRvciBl
bmQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBTdHJpbmdWaWV3IG1fc3RyaW5nVmlldzsKLX07
Ci0KLWNsYXNzIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHMgewotcHVibGljOgotICAgIGV4cGxpY2l0
IENvZGVQb2ludHMoY29uc3QgU3RyaW5nVmlldyYpOwotCi0gICAgY2xhc3MgSXRlcmF0b3I7Ci0g
ICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKLSAgICBJdGVyYXRvciBlbmQoKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBTdHJpbmdWaWV3IG1fc3RyaW5nVmlldzsKLX07Ci0KLWNsYXNzIFN0cmlu
Z1ZpZXc6OkNvZGVVbml0cyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29kZVVuaXRzKGNvbnN0
IFN0cmluZ1ZpZXcmKTsKLQotICAgIGNsYXNzIEl0ZXJhdG9yOwotICAgIEl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3Q7Ci0gICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgU3Ry
aW5nVmlldyBtX3N0cmluZ1ZpZXc7Ci19OwotCi1jbGFzcyBTdHJpbmdWaWV3OjpTcGxpdFJlc3Vs
dDo6SXRlcmF0b3IgewotcHVibGljOgotICAgIFN0cmluZ1ZpZXcgb3BlcmF0b3IqKCkgY29uc3Q7
Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKLQotICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYpIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBJdGVyYXRvciYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGVudW0gUG9zaXRp
b25UYWcgeyBBdEVuZCB9OwotICAgIEl0ZXJhdG9yKGNvbnN0IFNwbGl0UmVzdWx0Jik7Ci0gICAg
SXRlcmF0b3IoY29uc3QgU3BsaXRSZXN1bHQmLCBQb3NpdGlvblRhZyk7Ci0KLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBmaW5kTmV4dFN1YnN0cmluZygpOwotCi0gICAgZnJpZW5kIFNwbGl0
UmVzdWx0OwotCi0gICAgY29uc3QgU3BsaXRSZXN1bHQmIG1fcmVzdWx0OwotICAgIHVuc2lnbmVk
IG1fcG9zaXRpb24geyAwIH07Ci0gICAgdW5zaWduZWQgbV9sZW5ndGg7Ci19OwotCi1jbGFzcyBT
dHJpbmdWaWV3OjpHcmFwaGVtZUNsdXN0ZXJzOjpJdGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgSXRl
cmF0b3IoKSA9IGRlbGV0ZTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgSXRlcmF0b3IoY29uc3Qg
U3RyaW5nVmlldyYsIHVuc2lnbmVkIGluZGV4KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkl0
ZXJhdG9yKCk7Ci0KLSAgICBJdGVyYXRvcihjb25zdCBJdGVyYXRvciYpID0gZGVsZXRlOwotICAg
IFdURl9FWFBPUlRfUFJJVkFURSBJdGVyYXRvcihJdGVyYXRvciYmKTsKLSAgICBJdGVyYXRvciYg
b3BlcmF0b3I9KGNvbnN0IEl0ZXJhdG9yJikgPSBkZWxldGU7Ci0gICAgSXRlcmF0b3ImIG9wZXJh
dG9yPShJdGVyYXRvciYmKSA9IGRlbGV0ZTsKLQotICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJp
bmdWaWV3IG9wZXJhdG9yKigpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBJdGVyYXRv
ciYgb3BlcmF0b3IrKygpOwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBJdGVyYXRvciYpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBjbGFzcyBJ
bXBsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltcGw+IG1faW1wbDsKLX07Ci0KLWNsYXNzIFN0
cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBJdGVyYXRvcihj
b25zdCBTdHJpbmdWaWV3JiwgdW5zaWduZWQgaW5kZXgpOwotCi0gICAgVUNoYXIzMiBvcGVyYXRv
ciooKSBjb25zdDsKLSAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpOwotCi0gICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEl0ZXJhdG9yJikgY29uc3Q7Ci0gICAgSXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBJdGVyYXRv
ciYpOwotCi1wcml2YXRlOgotICAgIHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgU3RyaW5n
Vmlldz4gbV9zdHJpbmdWaWV3OwotICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IG1fbmV4dENv
ZGVQb2ludE9mZnNldDsKLSAgICBVQ2hhcjMyIG1fY29kZVBvaW50OwotfTsKLQotY2xhc3MgU3Ry
aW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgSXRlcmF0b3IoY29u
c3QgU3RyaW5nVmlldyYsIHVuc2lnbmVkIGluZGV4KTsKLQotICAgIFVDaGFyIG9wZXJhdG9yKigp
IGNvbnN0OwotICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7Ci0KLSAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRl
cmF0b3ImKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBjb25zdCBTdHJpbmdWaWV3JiBtX3N0cmlu
Z1ZpZXc7Ci0gICAgdW5zaWduZWQgbV9pbmRleDsKLX07Ci0KLWlubGluZSBhdXRvIFN0cmluZ1Zp
ZXc6OmdyYXBoZW1lQ2x1c3RlcnMoKSBjb25zdCAtPiBHcmFwaGVtZUNsdXN0ZXJzCi17Ci0gICAg
cmV0dXJuIEdyYXBoZW1lQ2x1c3RlcnMoKnRoaXMpOwotfQotCi1pbmxpbmUgYXV0byBTdHJpbmdW
aWV3Ojpjb2RlUG9pbnRzKCkgY29uc3QgLT4gQ29kZVBvaW50cwotewotICAgIHJldHVybiBDb2Rl
UG9pbnRzKCp0aGlzKTsKLX0KLQotaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6Y29kZVVuaXRzKCkg
Y29uc3QgLT4gQ29kZVVuaXRzCi17Ci0gICAgcmV0dXJuIENvZGVVbml0cygqdGhpcyk7Ci19Ci0K
LWlubGluZSBTdHJpbmdWaWV3OjpHcmFwaGVtZUNsdXN0ZXJzOjpHcmFwaGVtZUNsdXN0ZXJzKGNv
bnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcpCi0gICAgOiBtX3N0cmluZ1ZpZXcoc3RyaW5nVmll
dykKLXsKLX0KLQotaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6R3JhcGhlbWVDbHVzdGVyczo6YmVn
aW4oKSBjb25zdCAtPiBJdGVyYXRvcgotewotICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1Zp
ZXcsIDApOwotfQotCi1pbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpHcmFwaGVtZUNsdXN0ZXJzOjpl
bmQoKSBjb25zdCAtPiBJdGVyYXRvcgotewotICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1Zp
ZXcsIG1fc3RyaW5nVmlldy5sZW5ndGgoKSk7Ci19Ci0KLWlubGluZSBTdHJpbmdWaWV3OjpDb2Rl
UG9pbnRzOjpDb2RlUG9pbnRzKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcpCi0gICAgOiBt
X3N0cmluZ1ZpZXcoc3RyaW5nVmlldykKLXsKLX0KLQotaW5saW5lIFN0cmluZ1ZpZXc6OkNvZGVQ
b2ludHM6Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCB1
bnNpZ25lZCBpbmRleCkKLSAgICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQotICAgICwgbV9u
ZXh0Q29kZVBvaW50T2Zmc2V0KGluZGV4KQotewotICAgIG9wZXJhdG9yKysoKTsKLX0KLQotaW5s
aW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAt
PiBJdGVyYXRvciYKLXsKLSAgICBBU1NFUlQobV9uZXh0Q29kZVBvaW50T2Zmc2V0KTsKLSAgICBp
ZiAobV9uZXh0Q29kZVBvaW50T2Zmc2V0LnZhbHVlKCkgPT0gbV9zdHJpbmdWaWV3LmdldCgpLmxl
bmd0aCgpKSB7Ci0gICAgICAgIG1fbmV4dENvZGVQb2ludE9mZnNldCA9IHN0ZDo6bnVsbG9wdDsK
LSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBpZiAobV9zdHJpbmdWaWV3LmdldCgp
LmlzOEJpdCgpKQotICAgICAgICBtX2NvZGVQb2ludCA9IG1fc3RyaW5nVmlldy5nZXQoKS5jaGFy
YWN0ZXJzOCgpW21fbmV4dENvZGVQb2ludE9mZnNldC52YWx1ZSgpKytdOwotICAgIGVsc2UKLSAg
ICAgICAgVTE2X05FWFQobV9zdHJpbmdWaWV3LmdldCgpLmNoYXJhY3RlcnMxNigpLCBtX25leHRD
b2RlUG9pbnRPZmZzZXQudmFsdWUoKSwgbV9zdHJpbmdWaWV3LmdldCgpLmxlbmd0aCgpLCBtX2Nv
ZGVQb2ludCk7Ci0gICAgQVNTRVJUKG1fbmV4dENvZGVQb2ludE9mZnNldC52YWx1ZSgpIDw9IG1f
c3RyaW5nVmlldy5nZXQoKS5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxp
bmUgYXV0byBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvcjo6b3BlcmF0b3I9KGNvbnN0
IEl0ZXJhdG9yJiBvdGhlcikgLT4gSXRlcmF0b3ImCi17Ci0gICAgbV9zdHJpbmdWaWV3ID0gb3Ro
ZXIubV9zdHJpbmdWaWV3OwotICAgIG1fbmV4dENvZGVQb2ludE9mZnNldCA9IG90aGVyLm1fbmV4
dENvZGVQb2ludE9mZnNldDsKLSAgICBtX2NvZGVQb2ludCA9IG90aGVyLm1fY29kZVBvaW50Owot
ICAgIHJldHVybiAqdGhpczsKLX0KLQotaW5saW5lIFVDaGFyMzIgU3RyaW5nVmlldzo6Q29kZVBv
aW50czo6SXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fbmV4dENv
ZGVQb2ludE9mZnNldCk7Ci0gICAgcmV0dXJuIG1fY29kZVBvaW50OwotfQotCi1pbmxpbmUgYm9v
bCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBJdGVy
YXRvciYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCZtX3N0cmluZ1ZpZXcuZ2V0KCkgPT0g
Jm90aGVyLm1fc3RyaW5nVmlldy5nZXQoKSk7Ci0gICAgcmV0dXJuIG1fbmV4dENvZGVQb2ludE9m
ZnNldCA9PSBvdGhlci5tX25leHRDb2RlUG9pbnRPZmZzZXQ7Ci19Ci0KLWlubGluZSBib29sIFN0
cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci19Ci0KLWlu
bGluZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6OmJlZ2luKCkgY29uc3QgLT4gSXRlcmF0
b3IKLXsKLSAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCAwKTsKLX0KLQotaW5saW5l
IGF1dG8gU3RyaW5nVmlldzo6Q29kZVBvaW50czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0b3IKLXsK
LSAgICByZXR1cm4gSXRlcmF0b3IobV9zdHJpbmdWaWV3LCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkp
OwotfQotCi1pbmxpbmUgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpDb2RlVW5pdHMoY29uc3QgU3Ry
aW5nVmlldyYgc3RyaW5nVmlldykKLSAgICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQotewot
fQotCi1pbmxpbmUgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6SXRlcmF0b3IoY29u
c3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgdW5zaWduZWQgaW5kZXgpCi0gICAgOiBtX3N0cmlu
Z1ZpZXcoc3RyaW5nVmlldykKLSAgICAsIG1faW5kZXgoaW5kZXgpCi17Ci19Ci0KLWlubGluZSBh
dXRvIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAtPiBJdGVy
YXRvciYKLXsKLSAgICArK21faW5kZXg7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUg
VUNoYXIgU3RyaW5nVmlldzo6Q29kZVVuaXRzOjpJdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9zdHJpbmdWaWV3W21faW5kZXhdOwotfQotCi1pbmxpbmUgYm9vbCBT
dHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKLXsKLSAgICBBU1NFUlQoJm1fc3RyaW5nVmlldyA9PSAmb3RoZXIubV9z
dHJpbmdWaWV3KTsKLSAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OwotfQotCi1p
bmxpbmUgYm9vbCBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNv
bnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7Ci19Ci0KLWlubGluZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6YmVnaW4oKSBjb25z
dCAtPiBJdGVyYXRvcgotewotICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIDApOwot
fQotCi1pbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpDb2RlVW5pdHM6OmVuZCgpIGNvbnN0IC0+IEl0
ZXJhdG9yCi17Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKG1fc3RyaW5nVmlldywgbV9zdHJpbmdWaWV3
Lmxlbmd0aCgpKTsKLX0KLQotaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6c3BsaXQoVUNoYXIgc2Vw
YXJhdG9yKSBjb25zdCAtPiBTcGxpdFJlc3VsdAotewotICAgIHJldHVybiBTcGxpdFJlc3VsdCB7
ICp0aGlzLCBzZXBhcmF0b3IgfTsKLX0KLQotaW5saW5lIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0
OjpTcGxpdFJlc3VsdChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFVDaGFyIHNlcGFyYXRvcikKLSAg
ICA6IG1fc3RyaW5nIHsgc3RyaW5nVmlldyB9Ci0gICAgLCBtX3NlcGFyYXRvciB7IHNlcGFyYXRv
ciB9Ci17Ci19Ci0KLWlubGluZSBhdXRvIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpiZWdpbigp
IGNvbnN0IC0+IEl0ZXJhdG9yCi17Ci0gICAgcmV0dXJuIEl0ZXJhdG9yIHsgKnRoaXMgfTsKLX0K
LQotaW5saW5lIGF1dG8gU3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6OmVuZCgpIGNvbnN0IC0+IEl0
ZXJhdG9yCi17Ci0gICAgcmV0dXJuIEl0ZXJhdG9yIHsgKnRoaXMsIEl0ZXJhdG9yOjpBdEVuZCB9
OwotfQotCi1pbmxpbmUgU3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpJdGVyYXRv
cihjb25zdCBTcGxpdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9yZXN1bHQgeyByZXN1bHQgfQot
ewotICAgIGZpbmROZXh0U3Vic3RyaW5nKCk7Ci19Ci0KLWlubGluZSBTdHJpbmdWaWV3OjpTcGxp
dFJlc3VsdDo6SXRlcmF0b3I6Okl0ZXJhdG9yKGNvbnN0IFNwbGl0UmVzdWx0JiByZXN1bHQsIFBv
c2l0aW9uVGFnKQotICAgIDogbV9yZXN1bHQgeyByZXN1bHQgfQotICAgICwgbV9wb3NpdGlvbiB7
IHJlc3VsdC5tX3N0cmluZy5sZW5ndGgoKSB9Ci17Ci19Ci0KLWlubGluZSBTdHJpbmdWaWV3IFN0
cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQobV9wb3NpdGlvbiA8IG1fcmVzdWx0Lm1fc3RyaW5nLmxlbmd0aCgpKTsKLSAgICBy
ZXR1cm4gbV9yZXN1bHQubV9zdHJpbmcuc3Vic3RyaW5nKG1fcG9zaXRpb24sIG1fbGVuZ3RoKTsK
LX0KLQotaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpvcGVy
YXRvcj09KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLXsKLSAgICBBU1NFUlQoJm1fcmVz
dWx0ID09ICZvdGhlci5tX3Jlc3VsdCk7Ci0gICAgcmV0dXJuIG1fcG9zaXRpb24gPT0gb3RoZXIu
bV9wb3NpdGlvbjsKLX0KLQotaW5saW5lIGJvb2wgU3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0
ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci19Ci0KLXRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4g
aW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nVmlldyBzdHJp
bmcsIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKQotewotICAgIHJldHVy
biBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZUNvbW1vbihzdHJpbmcsIGxvd2VyY2FzZUxl
dHRlcnMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjphcHBlbmQ7Ci11
c2luZyBXVEY6OmVxdWFsOwotdXNpbmcgV1RGOjpTdHJpbmdWaWV3OwotCi0jZW5kaWYgLy8gU3Ry
aW5nVmlld19oCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
dGV4dC9TeW1ib2xJbXBsLmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90
ZXh0L1N5bWJvbEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDY3NTg5
ZWFiMjYyYzUwOTE4MTYyYTVmNjhlOWU3MmFiYjI4NmQxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi90ZXh0L1N5bWJvbEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3ltYm9sSW1w
bC5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gSW4gYWRkaXRpb24gdG8gdGhlIG5vcm1hbCBo
YXNoIHZhbHVlLCBzdG9yZSBzcGVjaWFsaXplZCBoYXNoIHZhbHVlIGZvcgotLy8gc3ltYm9saXpl
ZCBTdHJpbmdJbXBsKi4gQW5kIGRvbid0IHVzZSB0aGUgbm9ybWFsIGhhc2ggdmFsdWUgZm9yIHN5
bWJvbGl6ZWQKLS8vIFN0cmluZ0ltcGwqIHdoZW4gdGhleSBhcmUgdHJlYXRlZCBhcyBJZGVudGlm
aWVycy4gVW5pcXVlIG5hdHVyZSBvZiB0aGVzZQotLy8gc3ltYm9saXplZCBTdHJpbmdJbXBsKiBr
ZXlzIG1lYW5zIHRoYXQgd2UgZG9uJ3QgbmVlZCB0aGVtIHRvIG1hdGNoIGFueSBvdGhlcgotLy8g
c3RyaW5nIChpbiBmYWN0LCB0aGF0J3MgZXhhY3RseSB0aGUgb3Bvc2l0ZSBvZiB3aGF0IHdlIHdh
bnQhKSwgYW5kIHRoZQotLy8gbm9ybWFsIGhhc2ggd291bGQgbGVhZCB0byBsb3RzIG9mIGNvbmZs
aWN0cy4KLXVuc2lnbmVkIFN5bWJvbEltcGw6Om5leHRIYXNoRm9yU3ltYm9sKCkKLXsKLSAgICBz
dGF0aWMgdW5zaWduZWQgc19uZXh0SGFzaEZvclN5bWJvbCA9IDA7Ci0gICAgc19uZXh0SGFzaEZv
clN5bWJvbCArPSAxIDw8IHNfZmxhZ0NvdW50OwotICAgIHNfbmV4dEhhc2hGb3JTeW1ib2wgfD0g
MSA8PCAzMTsKLSAgICByZXR1cm4gc19uZXh0SGFzaEZvclN5bWJvbDsKLX0KLQotUmVmPFN5bWJv
bEltcGw+IFN5bWJvbEltcGw6OmNyZWF0ZShTdHJpbmdJbXBsJiByZXApCi17Ci0gICAgYXV0byog
b3duZXJSZXAgPSAocmVwLmJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyBy
ZXAuc3Vic3RyaW5nQnVmZmVyKCkgOiAmcmVwOwotICAgIEFTU0VSVChvd25lclJlcC0+YnVmZmVy
T3duZXJzaGlwKCkgIT0gQnVmZmVyU3Vic3RyaW5nKTsKLSAgICBpZiAocmVwLmlzOEJpdCgpKQot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTeW1ib2xJbXBsKHJlcC5tX2RhdGE4LCByZXAu
bGVuZ3RoKCksICpvd25lclJlcCkpOwotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN5bWJvbElt
cGwocmVwLm1fZGF0YTE2LCByZXAubGVuZ3RoKCksICpvd25lclJlcCkpOwotfQotCi1SZWY8U3lt
Ym9sSW1wbD4gU3ltYm9sSW1wbDo6Y3JlYXRlTnVsbFN5bWJvbCgpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU3ltYm9sSW1wbCk7Ci19Ci0KLVJlZjxQcml2YXRlU3ltYm9sSW1wbD4gUHJp
dmF0ZVN5bWJvbEltcGw6OmNyZWF0ZShTdHJpbmdJbXBsJiByZXApCi17Ci0gICAgYXV0byogb3du
ZXJSZXAgPSAocmVwLmJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyByZXAu
c3Vic3RyaW5nQnVmZmVyKCkgOiAmcmVwOwotICAgIEFTU0VSVChvd25lclJlcC0+YnVmZmVyT3du
ZXJzaGlwKCkgIT0gQnVmZmVyU3Vic3RyaW5nKTsKLSAgICBpZiAocmVwLmlzOEJpdCgpKQotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQcml2YXRlU3ltYm9sSW1wbChyZXAubV9kYXRhOCwg
cmVwLmxlbmd0aCgpLCAqb3duZXJSZXApKTsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQcml2
YXRlU3ltYm9sSW1wbChyZXAubV9kYXRhMTYsIHJlcC5sZW5ndGgoKSwgKm93bmVyUmVwKSk7Ci19
Ci0KLVJlZjxQcml2YXRlU3ltYm9sSW1wbD4gUHJpdmF0ZVN5bWJvbEltcGw6OmNyZWF0ZU51bGxT
eW1ib2woKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFByaXZhdGVTeW1ib2xJbXBsKTsK
LX0KLQotUmVmPFJlZ2lzdGVyZWRTeW1ib2xJbXBsPiBSZWdpc3RlcmVkU3ltYm9sSW1wbDo6Y3Jl
YXRlKFN0cmluZ0ltcGwmIHJlcCwgU3ltYm9sUmVnaXN0cnkmIHN5bWJvbFJlZ2lzdHJ5KQotewot
ICAgIGF1dG8qIG93bmVyUmVwID0gKHJlcC5idWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJz
dHJpbmcpID8gcmVwLnN1YnN0cmluZ0J1ZmZlcigpIDogJnJlcDsKLSAgICBBU1NFUlQob3duZXJS
ZXAtPmJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7Ci0gICAgaWYgKHJlcC5p
czhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVnaXN0ZXJlZFN5bWJvbElt
cGwocmVwLm1fZGF0YTgsIHJlcC5sZW5ndGgoKSwgKm93bmVyUmVwLCBzeW1ib2xSZWdpc3RyeSkp
OwotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlZ2lzdGVyZWRTeW1ib2xJbXBsKHJlcC5tX2Rh
dGExNiwgcmVwLmxlbmd0aCgpLCAqb3duZXJSZXAsIHN5bWJvbFJlZ2lzdHJ5KSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL3RleHQvU3ltYm9sSW1wbC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL3RleHQvU3ltYm9sSW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmI1
YTQyYmJiYmJjMTZjNWU5YWNkNDI5ODM0YzJiZDliZGI0NjgzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2Vy
L3d0Zi90ZXh0L1N5bWJvbEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPi4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvdGV4
dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgUmVnaXN0
ZXJlZFN5bWJvbEltcGw7Ci0KLS8vIFN5bWJvbEltcGwgaXMgdXNlZCB0byByZXByZXNlbnQgdGhl
IHN5bWJvbCBzdHJpbmcgaW1wbC4KLS8vIEl0IGlzIHVuaXF1ZWQgc3RyaW5nIGltcGwsIGJ1dCBp
cyBub3QgcmVnaXN0ZXJlZCBpbiBBdG9taWMgU3RyaW5nIHRhYmxlcywgc28gaXQncyBub3QgYXRv
bWljLgotY2xhc3MgU3ltYm9sSW1wbCA6IHB1YmxpYyBVbmlxdWVkU3RyaW5nSW1wbCB7Ci1wdWJs
aWM6Ci0gICAgdXNpbmcgRmxhZ3MgPSB1bnNpZ25lZDsKLSAgICBzdGF0aWMgY29uc3RleHByIEZs
YWdzIHNfZmxhZ0RlZmF1bHQgPSAwdTsKLSAgICBzdGF0aWMgY29uc3RleHByIEZsYWdzIHNfZmxh
Z0lzTnVsbFN5bWJvbCA9IDBiMDAxdTsKLSAgICBzdGF0aWMgY29uc3RleHByIEZsYWdzIHNfZmxh
Z0lzUmVnaXN0ZXJlZCA9IDBiMDEwdTsKLSAgICBzdGF0aWMgY29uc3RleHByIEZsYWdzIHNfZmxh
Z0lzUHJpdmF0ZSA9IDBiMTAwdTsKLQotICAgIHVuc2lnbmVkIGhhc2hGb3JTeW1ib2woKSBjb25z
dCB7IHJldHVybiBtX2hhc2hGb3JTeW1ib2w7IH0KLSAgICBib29sIGlzTnVsbFN5bWJvbCgpIGNv
bnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBzX2ZsYWdJc051bGxTeW1ib2w7IH0KLSAgICBib29sIGlz
UmVnaXN0ZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBzX2ZsYWdJc1JlZ2lzdGVyZWQ7
IH0KLSAgICBib29sIGlzUHJpdmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBzX2ZsYWdJ
c1ByaXZhdGU7IH0KLQotICAgIFN5bWJvbFJlZ2lzdHJ5KiBzeW1ib2xSZWdpc3RyeSgpIGNvbnN0
OwotCi0gICAgUmVnaXN0ZXJlZFN5bWJvbEltcGwqIGFzUmVnaXN0ZXJlZFN5bWJvbEltcGwoKTsK
LQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVmPFN5bWJvbEltcGw+IGNyZWF0
ZU51bGxTeW1ib2woKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFJlZjxTeW1i
b2xJbXBsPiBjcmVhdGUoU3RyaW5nSW1wbCYgcmVwKTsKLQotICAgIGNsYXNzIFN0YXRpY1N5bWJv
bEltcGwgOiBwcml2YXRlIFN0cmluZ0ltcGxTaGFwZSB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFN0YXRpY1N5bWJvbEltcGwpOwotICAgIHB1YmxpYzoKLSAgICAgICAgdGVtcGxhdGU8
dW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+Ci0gICAgICAgIGNvbnN0ZXhwciBTdGF0aWNTeW1ib2xJ
bXBsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0sIEZsYWdzIGZsYWdz
ID0gc19mbGFnRGVmYXVsdCkKLSAgICAgICAgICAgIDogU3RyaW5nSW1wbFNoYXBlKHNfcmVmQ291
bnRGbGFnSXNTdGF0aWNTdHJpbmcsIGNoYXJhY3RlckNvdW50IC0gMSwgY2hhcmFjdGVycywKLSAg
ICAgICAgICAgICAgICBzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IHNfaGFzaEZsYWdEaWRSZXBvcnRD
b3N0IHwgU3RyaW5nU3ltYm9sIHwgQnVmZmVySW50ZXJuYWwgfCAoU3RyaW5nSGFzaGVyOjpjb21w
dXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVycykgPDwgc19mbGFnQ291bnQp
LCBDb25zdHJ1Y3RXaXRoQ29uc3RFeHByKQotICAgICAgICAgICAgLCBtX2hhc2hGb3JTeW1ib2wo
U3RyaW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVy
cykgPDwgc19mbGFnQ291bnQpCi0gICAgICAgICAgICAsIG1fZmxhZ3MoZmxhZ3MpCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlckNvdW50
PgotICAgICAgICBjb25zdGV4cHIgU3RhdGljU3ltYm9sSW1wbChjb25zdCBjaGFyMTZfdCAoJmNo
YXJhY3RlcnMpW2NoYXJhY3RlckNvdW50XSwgRmxhZ3MgZmxhZ3MgPSBzX2ZsYWdEZWZhdWx0KQot
ICAgICAgICAgICAgOiBTdHJpbmdJbXBsU2hhcGUoc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmlu
ZywgY2hhcmFjdGVyQ291bnQgLSAxLCBjaGFyYWN0ZXJzLAotICAgICAgICAgICAgICAgIHNfaGFz
aEZsYWdEaWRSZXBvcnRDb3N0IHwgU3RyaW5nU3ltYm9sIHwgQnVmZmVySW50ZXJuYWwgfCAoU3Ry
aW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVycykg
PDwgc19mbGFnQ291bnQpLCBDb25zdHJ1Y3RXaXRoQ29uc3RFeHByKQotICAgICAgICAgICAgLCBt
X2hhc2hGb3JTeW1ib2woU3RyaW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9w
OEJpdHMoY2hhcmFjdGVycykgPDwgc19mbGFnQ291bnQpCi0gICAgICAgICAgICAsIG1fZmxhZ3Mo
ZmxhZ3MpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIG9wZXJhdG9yIFN5bWJvbElt
cGwmKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFN5
bWJvbEltcGwqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZ0ltcGwqIG1fb3du
ZXIgeyBudWxscHRyIH07IC8vIFdlIGRvIG5vdCBtYWtlIFN0YXRpY1N5bWJvbEltcGwgQnVmZmVy
U3Vic3RyaW5nLiBUaHVzIHdlIGNhbiBtYWtlIHRoaXMgbnVsbHB0ci4KLSAgICAgICAgdW5zaWdu
ZWQgbV9oYXNoRm9yU3ltYm9sOwotICAgICAgICBGbGFncyBtX2ZsYWdzOwotICAgIH07Ci0KLXBy
b3RlY3RlZDoKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHVuc2lnbmVkIG5leHRIYXNo
Rm9yU3ltYm9sKCk7Ci0KLSAgICBmcmllbmQgY2xhc3MgU3RyaW5nSW1wbDsKLQotICAgIFN5bWJv
bEltcGwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUmVmPFN0cmlu
Z0ltcGw+JiYgYmFzZSwgRmxhZ3MgZmxhZ3MgPSBzX2ZsYWdEZWZhdWx0KQotICAgICAgICA6IFVu
aXF1ZWRTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbCwgY2hhcmFjdGVycywgbGVuZ3RoKQotICAgICAg
ICAsIG1fb3duZXIoJmJhc2UubGVha1JlZigpKQotICAgICAgICAsIG1faGFzaEZvclN5bWJvbChu
ZXh0SGFzaEZvclN5bWJvbCgpKQotICAgICAgICAsIG1fZmxhZ3MoZmxhZ3MpCi0gICAgewotICAg
ICAgICBBU1NFUlQoU3RyaW5nSW1wbDo6dGFpbE9mZnNldDxTdHJpbmdJbXBsKj4oKSA9PSBPQkpF
Q1RfT0ZGU0VUT0YoU3ltYm9sSW1wbCwgbV9vd25lcikpOwotICAgIH0KLQotICAgIFN5bWJvbElt
cGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUmVmPFN0cmluZ0lt
cGw+JiYgYmFzZSwgRmxhZ3MgZmxhZ3MgPSBzX2ZsYWdEZWZhdWx0KQotICAgICAgICA6IFVuaXF1
ZWRTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbCwgY2hhcmFjdGVycywgbGVuZ3RoKQotICAgICAgICAs
IG1fb3duZXIoJmJhc2UubGVha1JlZigpKQotICAgICAgICAsIG1faGFzaEZvclN5bWJvbChuZXh0
SGFzaEZvclN5bWJvbCgpKQotICAgICAgICAsIG1fZmxhZ3MoZmxhZ3MpCi0gICAgewotICAgICAg
ICBBU1NFUlQoU3RyaW5nSW1wbDo6dGFpbE9mZnNldDxTdHJpbmdJbXBsKj4oKSA9PSBPQkpFQ1Rf
T0ZGU0VUT0YoU3ltYm9sSW1wbCwgbV9vd25lcikpOwotICAgIH0KLQotICAgIFN5bWJvbEltcGwo
RmxhZ3MgZmxhZ3MgPSBzX2ZsYWdEZWZhdWx0KQotICAgICAgICA6IFVuaXF1ZWRTdHJpbmdJbXBs
KENyZWF0ZVN5bWJvbCkKLSAgICAgICAgLCBtX293bmVyKFN0cmluZ0ltcGw6OmVtcHR5KCkpCi0g
ICAgICAgICwgbV9oYXNoRm9yU3ltYm9sKG5leHRIYXNoRm9yU3ltYm9sKCkpCi0gICAgICAgICwg
bV9mbGFncyhmbGFncyB8IHNfZmxhZ0lzTnVsbFN5bWJvbCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChTdHJpbmdJbXBsOjp0YWlsT2Zmc2V0PFN0cmluZ0ltcGwqPigpID09IE9CSkVDVF9PRkZTRVRP
RihTeW1ib2xJbXBsLCBtX293bmVyKSk7Ci0gICAgfQotCi0gICAgLy8gVGhlIHBvaW50ZXIgdG8g
dGhlIG93bmVyIHN0cmluZyBzaG91bGQgYmUgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGFmdGVyIHRo
ZSBTdHJpbmdJbXBsIGxheW91dCwKLSAgICAvLyBzaW5jZSB3ZSB3b3VsZCBsaWtlIHRvIGFsaWdu
IHRoZSBsYXlvdXQgb2YgU3ltYm9sSW1wbCB0byB0aGUgb25lIG9mIEJ1ZmZlclN1YnN0cmluZyBT
dHJpbmdJbXBsLgotICAgIFN0cmluZ0ltcGwqIG1fb3duZXI7Ci0gICAgdW5zaWduZWQgbV9oYXNo
Rm9yU3ltYm9sOwotICAgIEZsYWdzIG1fZmxhZ3MgeyBzX2ZsYWdEZWZhdWx0IH07Ci19Owotc3Rh
dGljX2Fzc2VydChzaXplb2YoU3ltYm9sSW1wbCkgPT0gc2l6ZW9mKFN5bWJvbEltcGw6OlN0YXRp
Y1N5bWJvbEltcGwpLCAiIik7Ci0KLWNsYXNzIFByaXZhdGVTeW1ib2xJbXBsIDogcHVibGljIFN5
bWJvbEltcGwgewotcHVibGljOgotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUmVm
PFByaXZhdGVTeW1ib2xJbXBsPiBjcmVhdGVOdWxsU3ltYm9sKCk7Ci0gICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIHN0YXRpYyBSZWY8UHJpdmF0ZVN5bWJvbEltcGw+IGNyZWF0ZShTdHJpbmdJbXBs
JiByZXApOwotCi1wcml2YXRlOgotICAgIFByaXZhdGVTeW1ib2xJbXBsKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFJlZjxTdHJpbmdJbXBsPiYmIGJhc2UpCi0gICAg
ICAgIDogU3ltYm9sSW1wbChjaGFyYWN0ZXJzLCBsZW5ndGgsIFdURk1vdmUoYmFzZSksIHNfZmxh
Z0lzUHJpdmF0ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgUHJpdmF0ZVN5bWJvbEltcGwoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUmVmPFN0cmluZ0ltcGw+JiYgYmFz
ZSkKLSAgICAgICAgOiBTeW1ib2xJbXBsKGNoYXJhY3RlcnMsIGxlbmd0aCwgV1RGTW92ZShiYXNl
KSwgc19mbGFnSXNQcml2YXRlKQotICAgIHsKLSAgICB9Ci0KLSAgICBQcml2YXRlU3ltYm9sSW1w
bCgpCi0gICAgICAgIDogU3ltYm9sSW1wbChzX2ZsYWdJc1ByaXZhdGUpCi0gICAgewotICAgIH0K
LX07Ci0KLWNsYXNzIFJlZ2lzdGVyZWRTeW1ib2xJbXBsIDogcHVibGljIFN5bWJvbEltcGwgewot
cHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgU3RyaW5nSW1wbDsKLSAgICBmcmllbmQgY2xhc3Mg
U3ltYm9sSW1wbDsKLSAgICBmcmllbmQgY2xhc3MgU3ltYm9sUmVnaXN0cnk7Ci0KLSAgICBTeW1i
b2xSZWdpc3RyeSogc3ltYm9sUmVnaXN0cnkoKSBjb25zdCB7IHJldHVybiBtX3N5bWJvbFJlZ2lz
dHJ5OyB9Ci0gICAgdm9pZCBjbGVhclN5bWJvbFJlZ2lzdHJ5KCkgeyBtX3N5bWJvbFJlZ2lzdHJ5
ID0gbnVsbHB0cjsgfQotCi0gICAgc3RhdGljIFJlZjxSZWdpc3RlcmVkU3ltYm9sSW1wbD4gY3Jl
YXRlKFN0cmluZ0ltcGwmIHJlcCwgU3ltYm9sUmVnaXN0cnkmKTsKLQotICAgIFJlZ2lzdGVyZWRT
eW1ib2xJbXBsKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFJlZjxT
dHJpbmdJbXBsPiYmIGJhc2UsIFN5bWJvbFJlZ2lzdHJ5JiByZWdpc3RyeSkKLSAgICAgICAgOiBT
eW1ib2xJbXBsKGNoYXJhY3RlcnMsIGxlbmd0aCwgV1RGTW92ZShiYXNlKSwgc19mbGFnSXNSZWdp
c3RlcmVkKQotICAgICAgICAsIG1fc3ltYm9sUmVnaXN0cnkoJnJlZ2lzdHJ5KQotICAgIHsKLSAg
ICB9Ci0KLSAgICBSZWdpc3RlcmVkU3ltYm9sSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoLCBSZWY8U3RyaW5nSW1wbD4mJiBiYXNlLCBTeW1ib2xSZWdpc3RyeSYg
cmVnaXN0cnkpCi0gICAgICAgIDogU3ltYm9sSW1wbChjaGFyYWN0ZXJzLCBsZW5ndGgsIFdURk1v
dmUoYmFzZSksIHNfZmxhZ0lzUmVnaXN0ZXJlZCkKLSAgICAgICAgLCBtX3N5bWJvbFJlZ2lzdHJ5
KCZyZWdpc3RyeSkKLSAgICB7Ci0gICAgfQotCi0gICAgU3ltYm9sUmVnaXN0cnkqIG1fc3ltYm9s
UmVnaXN0cnk7Ci19OwotCi1pbmxpbmUgdW5zaWduZWQgU3RyaW5nSW1wbDo6c3ltYm9sQXdhcmVI
YXNoKCkgY29uc3QKLXsKLSAgICBpZiAoaXNTeW1ib2woKSkKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFN5bWJvbEltcGwqPih0aGlzKS0+aGFzaEZvclN5bWJvbCgpOwotICAgIHJl
dHVybiBoYXNoKCk7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBTdHJpbmdJbXBsOjpleGlzdGluZ1N5
bWJvbEF3YXJlSGFzaCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU3ltYm9sKCkpCi0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBTeW1ib2xJbXBsKj4odGhpcyktPmhhc2hGb3JTeW1ib2wo
KTsKLSAgICByZXR1cm4gZXhpc3RpbmdIYXNoKCk7Ci19Ci0KLWlubGluZSBTeW1ib2xSZWdpc3Ry
eSogU3ltYm9sSW1wbDo6c3ltYm9sUmVnaXN0cnkoKSBjb25zdAotewotICAgIGlmIChpc1JlZ2lz
dGVyZWQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlZ2lzdGVyZWRTeW1i
b2xJbXBsKj4odGhpcyktPnN5bWJvbFJlZ2lzdHJ5KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLWlubGluZSBSZWdpc3RlcmVkU3ltYm9sSW1wbCogU3ltYm9sSW1wbDo6YXNSZWdpc3RlcmVk
U3ltYm9sSW1wbCgpCi17Ci0gICAgQVNTRVJUKGlzUmVnaXN0ZXJlZCgpKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UmVnaXN0ZXJlZFN5bWJvbEltcGwqPih0aGlzKTsKLX0KLQotI2lmIEFTU0VS
VF9FTkFCTEVECi0vLyBTeW1ib2xJbXBscyBjcmVhdGVkIGZyb20gU3RhdGljU3RyaW5nSW1wbCB3
aWxsIEFTU0VSVAotLy8gaW4gdGhlIGdlbmVyaWMgVmFsdWVDaGVjazxUPjo6Y2hlY2tDb25zaXN0
ZW5jeQotLy8gYXMgdGhleSBhcmUgbm90IGFsbG9jYXRlZCBieSBmYXN0TWFsbG9jLgotLy8gV2Ug
ZG9uJ3QgY3VycmVudGx5IGhhdmUgYW55IHdheSB0byBkZXRlY3QgdGhhdCBjYXNlCi0vLyBzbyB3
ZSBpZ25vcmUgdGhlIGNvbnNpc3RlbmN5IGNoZWNrIGZvciBhbGwgU3ltYm9sSW1wbHMqLgotdGVt
cGxhdGU8PiBzdHJ1Y3QKLVZhbHVlQ2hlY2s8U3ltYm9sSW1wbCo+IHsKLSAgICBzdGF0aWMgdm9p
ZCBjaGVja0NvbnNpc3RlbmN5KGNvbnN0IFN5bWJvbEltcGwqKSB7IH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0Ci1WYWx1ZUNoZWNrPGNvbnN0IFN5bWJvbEltcGwqPiB7Ci0gICAgc3RhdGljIHZv
aWQgY2hlY2tDb25zaXN0ZW5jeShjb25zdCBTeW1ib2xJbXBsKikgeyB9Ci19OwotI2VuZGlmCi0K
LX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OlN5bWJvbEltcGw7Ci11c2luZyBXVEY6
OlByaXZhdGVTeW1ib2xJbXBsOwotdXNpbmcgV1RGOjpSZWdpc3RlcmVkU3ltYm9sSW1wbDsKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L1N5bWJvbFJl
Z2lzdHJ5LmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L1N5bWJv
bFJlZ2lzdHJ5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdkOWM1OTBlMzU5
YTMyYThhNTdjY2RiODVlMTIwNWQyZGE3ZTA5Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4
dC9TeW1ib2xSZWdpc3RyeS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTeW1ib2xSZWdp
c3RyeS5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLQotU3ltYm9sUmVnaXN0cnk6On5TeW1ib2xSZWdp
c3RyeSgpCi17Ci0gICAgZm9yIChhdXRvJiBrZXkgOiBtX3RhYmxlKSB7Ci0gICAgICAgIEFTU0VS
VChrZXkuaW1wbCgpLT5pc1N5bWJvbCgpKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8U3ltYm9sSW1w
bCo+KGtleS5pbXBsKCkpLT5hc1JlZ2lzdGVyZWRTeW1ib2xJbXBsKCktPmNsZWFyU3ltYm9sUmVn
aXN0cnkoKTsKLSAgICB9Ci19Ci0KLVJlZjxSZWdpc3RlcmVkU3ltYm9sSW1wbD4gU3ltYm9sUmVn
aXN0cnk6OnN5bWJvbEZvcktleShjb25zdCBTdHJpbmcmIHJlcCkKLXsKLSAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fdGFibGUuYWRkKFN5bWJvbFJlZ2lzdHJ5S2V5KHJlcC5pbXBsKCkpKTsKLSAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVChhZGRSZXN1bHQuaXRl
cmF0b3ItPmltcGwoKS0+aXNTeW1ib2woKSk7Ci0gICAgICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8
U3ltYm9sSW1wbCo+KGFkZFJlc3VsdC5pdGVyYXRvci0+aW1wbCgpKS0+YXNSZWdpc3RlcmVkU3lt
Ym9sSW1wbCgpOwotICAgIH0KLQotICAgIGF1dG8gc3ltYm9sID0gUmVnaXN0ZXJlZFN5bWJvbElt
cGw6OmNyZWF0ZSgqcmVwLmltcGwoKSwgKnRoaXMpOwotICAgICphZGRSZXN1bHQuaXRlcmF0b3Ig
PSBTeW1ib2xSZWdpc3RyeUtleSgmc3ltYm9sLmdldCgpKTsKLSAgICByZXR1cm4gc3ltYm9sOwot
fQotCi12b2lkIFN5bWJvbFJlZ2lzdHJ5OjpyZW1vdmUoUmVnaXN0ZXJlZFN5bWJvbEltcGwmIHVp
ZCkKLXsKLSAgICBBU1NFUlQodWlkLnN5bWJvbFJlZ2lzdHJ5KCkgPT0gdGhpcyk7Ci0gICAgYXV0
byBpdGVyYXRvciA9IG1fdGFibGUuZmluZChTeW1ib2xSZWdpc3RyeUtleSgmdWlkKSk7Ci0gICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyYXRvciAhPSBtX3RhYmxlLmVuZCgpLCAiVGhlIHN0cmlu
ZyBiZWluZyByZW1vdmVkIGlzIHJlZ2lzdGVyZWQgaW4gdGhlIHN0cmluZyB0YWJsZSBvZiBhbiBv
dGhlciB0aHJlYWQhIik7Ci0gICAgbV90YWJsZS5yZW1vdmUoaXRlcmF0b3IpOwotfQotCi19CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9TeW1ib2xS
ZWdpc3RyeS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvU3ltYm9s
UmVnaXN0cnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThkMjJjOTFlMDQyNzdj
ZGE2NzVjZTU3ZGE0NDk3NWMzZGU1NGQ5OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9T
eW1ib2xSZWdpc3RyeS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBXVEZfU3ltYm9sUmVnaXN0cnlfaAotI2RlZmluZSBXVEZfU3lt
Ym9sUmVnaXN0cnlfaAotCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3ltYm9sSW1wbC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gU2lu
Y2UgU3RyaW5nSW1wbCogdXNlZCBmb3IgU3ltYm9sIHVpZCBkb2Vzbid0IGhhdmUgYSBoYXNoIHZh
bHVlIHJlZmxlY3RpbmcgdGhlIHN0cmluZyBjb250ZW50LAotLy8gdG8gY29tcGFyZSB3aXRoIGFu
IGV4dGVybmFsIHN0cmluZyBpbiBzdHJpbmcgY29udGVudHMsIGludHJvZHVjZSBTeW1ib2xSZWdp
c3RyeUtleS4KLS8vIFN5bWJvbFJlZ2lzdHJ5S2V5IGhvbGRzIGEgaGFzaCB2YWx1ZSByZWZsZWN0
aW5nIHRoZSBzdHJpbmcgY29udGVudCBhZGRpdGlvbmFsbHkuCi1jbGFzcyBTeW1ib2xSZWdpc3Ry
eUtleSB7Ci1wdWJsaWM6Ci0gICAgU3ltYm9sUmVnaXN0cnlLZXkoKSA9IGRlZmF1bHQ7Ci0gICAg
ZXhwbGljaXQgU3ltYm9sUmVnaXN0cnlLZXkoU3RyaW5nSW1wbCogdWlkKTsKLSAgICBTeW1ib2xS
ZWdpc3RyeUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpOwotCi0gICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsgfQotICAgIFN0cmluZ0ltcGwqIGltcGwo
KSBjb25zdCB7IHJldHVybiBtX2ltcGw7IH0KLQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPT0gaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7
IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgU3RyaW5nSW1wbCogaGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJpbmdJbXBsKj4oLTEpOyB9Ci0KLSAg
ICBTdHJpbmdJbXBsKiBtX2ltcGwgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQgbV9oYXNoIHsg
MCB9OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotdGVt
cGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8U3ltYm9sUmVnaXN0cnlLZXk+IHsKLSAgICBzdHJ1
Y3QgSGFzaCA6IFN0cmluZ0hhc2ggewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBTeW1ib2xSZWdpc3RyeUtleSYga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
a2V5Lmhhc2goKTsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBT
eW1ib2xSZWdpc3RyeUtleSYgYSwgY29uc3QgU3ltYm9sUmVnaXN0cnlLZXkmIGIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmdIYXNoOjplcXVhbChhLmltcGwoKSwgYi5pbXBs
KCkpOwotICAgICAgICB9Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFp
dHM8U3ltYm9sUmVnaXN0cnlLZXk+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFN5bWJvbFJlZ2lz
dHJ5S2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24g
PSB0cnVlOwotICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCBTeW1ib2xSZWdpc3Ry
eUtleSYga2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGtleS5pbXBsKCkgPT0gbnVsbHB0cjsK
LSAgICB9Ci19OwotCi1jbGFzcyBTeW1ib2xSZWdpc3RyeSB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU3ltYm9sUmVnaXN0cnkpOwotcHVibGljOgotICAgIFN5bWJvbFJlZ2lzdHJ5KCkgPSBk
ZWZhdWx0OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB+U3ltYm9sUmVnaXN0cnkoKTsKLQotICAg
IFdURl9FWFBPUlRfUFJJVkFURSBSZWY8UmVnaXN0ZXJlZFN5bWJvbEltcGw+IHN5bWJvbEZvcktl
eShjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgcmVtb3ZlKFJlZ2lzdGVyZWRTeW1ib2xJbXBs
Jik7Ci0KLXByaXZhdGU6Ci0gICAgSGFzaFNldDxTeW1ib2xSZWdpc3RyeUtleT4gbV90YWJsZTsK
LX07Ci0KLWlubGluZSBTeW1ib2xSZWdpc3RyeUtleTo6U3ltYm9sUmVnaXN0cnlLZXkoU3RyaW5n
SW1wbCogdWlkKQotICAgIDogbV9pbXBsKHVpZCkKLXsKLSAgICBpZiAodWlkLT5pc1N5bWJvbCgp
KSB7Ci0gICAgICAgIGlmICh1aWQtPmlzOEJpdCgpKQotICAgICAgICAgICAgbV9oYXNoID0gU3Ry
aW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyh1aWQtPmNoYXJhY3RlcnM4KCks
IHVpZC0+bGVuZ3RoKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2hhc2ggPSBTdHJp
bmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKHVpZC0+Y2hhcmFjdGVyczE2KCks
IHVpZC0+bGVuZ3RoKCkpOwotICAgIH0gZWxzZQotICAgICAgICBtX2hhc2ggPSB1aWQtPmhhc2go
KTsKLX0KLQotaW5saW5lIFN5bWJvbFJlZ2lzdHJ5S2V5OjpTeW1ib2xSZWdpc3RyeUtleShXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgOiBtX2ltcGwoaGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkpCi17Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHAgYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNDU0YzkyM2JjNGQzOWRkODVkZjM2NzE5NjQx
OTBmNmE3OTJhNWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0
b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLS8qCi0gKiAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkg
VG9yY2ggTW9iaWxlLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0QnJl
YWtJdGVyYXRvci5oIgotCi0jaW5jbHVkZSAiTGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmgiCi0j
aW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oIgotI2luY2x1ZGUgPGF0b21p
Yz4KLSNpbmNsdWRlIDxtdXRleD4KLSNpbmNsdWRlIDx1bmljb2RlL3VicmsuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9pY3UvVVRleHRQcm92aWRlckxhdGluMS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L2ljdS9VVGV4dFByb3ZpZGVyVVRGMTYuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1zdGF0aWMgVmFyaWFudDxUZXh0QnJlYWtJdGVy
YXRvcklDVSwgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbWFwTW9kZVRvQmFja2luZ0l0ZXJh
dG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0QnJlYWtJdGVyYXRvcjo6TW9kZSBtb2RlLCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNl
IFRleHRCcmVha0l0ZXJhdG9yOjpNb2RlOjpMaW5lOgotICAgICAgICByZXR1cm4gVGV4dEJyZWFr
SXRlcmF0b3JJQ1Uoc3RyaW5nLCBUZXh0QnJlYWtJdGVyYXRvcklDVTo6TW9kZTo6TGluZSwgbG9j
YWxlLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGNhc2UgVGV4dEJyZWFrSXRlcmF0b3I6
Ok1vZGU6OkNhcmV0OgotICAgICAgICByZXR1cm4gVGV4dEJyZWFrSXRlcmF0b3JJQ1Uoc3RyaW5n
LCBUZXh0QnJlYWtJdGVyYXRvcklDVTo6TW9kZTo6Q2hhcmFjdGVyLCBsb2NhbGUuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgY2FzZSBUZXh0QnJlYWtJdGVyYXRvcjo6TW9kZTo6RGVsZXRl
OgotICAgICAgICByZXR1cm4gVGV4dEJyZWFrSXRlcmF0b3JJQ1Uoc3RyaW5nLCBUZXh0QnJlYWtJ
dGVyYXRvcklDVTo6TW9kZTo6Q2hhcmFjdGVyLCBsb2NhbGUuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiBUZXh0QnJlYWtJdGVyYXRvcklDVShzdHJpbmcsIFRleHRCcmVha0l0ZXJhdG9ySUNV
OjpNb2RlOjpDaGFyYWN0ZXIsIGxvY2FsZS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICB9
Ci19Ci0KLVRleHRCcmVha0l0ZXJhdG9yOjpUZXh0QnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3IHN0
cmluZywgTW9kZSBtb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKLSAgICA6IG1fYmFj
a2luZyhtYXBNb2RlVG9CYWNraW5nSXRlcmF0b3Ioc3RyaW5nLCBtb2RlLCBsb2NhbGUpKQotICAg
ICwgbV9tb2RlKG1vZGUpCi0gICAgLCBtX2xvY2FsZShsb2NhbGUpCi17Ci19Ci0KLS8vIEl0ZXJh
dG9yIGluaXRpYWxpemF0aW9uCi0KLXN0YXRpYyBVQnJlYWtJdGVyYXRvciogaW5pdGlhbGl6ZUl0
ZXJhdG9yKFVCcmVha0l0ZXJhdG9yVHlwZSB0eXBlLCBjb25zdCBjaGFyKiBsb2NhbGUgPSBjdXJy
ZW50VGV4dEJyZWFrTG9jYWxlSUQoKSkKLXsKLSAgICBVRXJyb3JDb2RlIG9wZW5TdGF0dXMgPSBV
X1pFUk9fRVJST1I7Ci0gICAgVUJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gdWJya19vcGVuKHR5
cGUsIGxvY2FsZSwgMCwgMCwgJm9wZW5TdGF0dXMpOwotICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
VV9TVUNDRVNTKG9wZW5TdGF0dXMpLCAiSUNVIGNvdWxkIG5vdCBvcGVuIGEgYnJlYWsgaXRlcmF0
b3I6ICVzICglZCkiLCB1X2Vycm9yTmFtZShvcGVuU3RhdHVzKSwgb3BlblN0YXR1cyk7Ci0gICAg
cmV0dXJuIGl0ZXJhdG9yOwotfQotCi0vLyBJdGVyYXRvciB0ZXh0IHNldHRpbmcKLQotc3RhdGlj
IFVCcmVha0l0ZXJhdG9yKiBzZXRUZXh0Rm9ySXRlcmF0b3IoVUJyZWFrSXRlcmF0b3ImIGl0ZXJh
dG9yLCBTdHJpbmdWaWV3IHN0cmluZykKLXsKLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7Ci0g
ICAgICAgIFVUZXh0V2l0aEJ1ZmZlciB0ZXh0TG9jYWw7Ci0gICAgICAgIHRleHRMb2NhbC50ZXh0
ID0gVVRFWFRfSU5JVElBTElaRVI7Ci0gICAgICAgIHRleHRMb2NhbC50ZXh0LmV4dHJhU2l6ZSA9
IHNpemVvZih0ZXh0TG9jYWwuYnVmZmVyKTsKLSAgICAgICAgdGV4dExvY2FsLnRleHQucEV4dHJh
ID0gdGV4dExvY2FsLmJ1ZmZlcjsKLQotICAgICAgICBVRXJyb3JDb2RlIG9wZW5TdGF0dXMgPSBV
X1pFUk9fRVJST1I7Ci0gICAgICAgIFVUZXh0KiB0ZXh0ID0gb3BlbkxhdGluMVVUZXh0UHJvdmlk
ZXIoJnRleHRMb2NhbCwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSwgJm9w
ZW5TdGF0dXMpOwotICAgICAgICBpZiAoVV9GQUlMVVJFKG9wZW5TdGF0dXMpKSB7Ci0gICAgICAg
ICAgICBMT0dfRVJST1IoInVUZXh0T3BlbkxhdGluMSBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCBv
cGVuU3RhdHVzKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAg
ICAgICAgVUVycm9yQ29kZSBzZXRUZXh0U3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgICAgICB1
YnJrX3NldFVUZXh0KCZpdGVyYXRvciwgdGV4dCwgJnNldFRleHRTdGF0dXMpOwotICAgICAgICBp
ZiAoVV9GQUlMVVJFKHNldFRleHRTdGF0dXMpKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoInVi
cmtfc2V0VVRleHQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgc2V0VGV4dFN0YXR1cyk7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHV0ZXh0X2Nsb3Nl
KHRleHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFVFcnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9
IFVfWkVST19FUlJPUjsKLSAgICAgICAgdWJya19zZXRUZXh0KCZpdGVyYXRvciwgc3RyaW5nLmNo
YXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCksICZzZXRUZXh0U3RhdHVzKTsKLSAgICAgICAg
aWYgKFVfRkFJTFVSRShzZXRUZXh0U3RhdHVzKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIHJldHVybiAmaXRlcmF0b3I7Ci19Ci0KLXN0YXRpYyBVQnJlYWtJdGVy
YXRvciogc2V0Q29udGV4dEF3YXJlVGV4dEZvckl0ZXJhdG9yKFVCcmVha0l0ZXJhdG9yJiBpdGVy
YXRvciwgU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IFVDaGFyKiBwcmlvckNvbnRleHQsIHVuc2ln
bmVkIHByaW9yQ29udGV4dExlbmd0aCkKLXsKLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7Ci0g
ICAgICAgIFVUZXh0V2l0aEJ1ZmZlciB0ZXh0TG9jYWw7Ci0gICAgICAgIHRleHRMb2NhbC50ZXh0
ID0gVVRFWFRfSU5JVElBTElaRVI7Ci0gICAgICAgIHRleHRMb2NhbC50ZXh0LmV4dHJhU2l6ZSA9
IHNpemVvZih0ZXh0TG9jYWwuYnVmZmVyKTsKLSAgICAgICAgdGV4dExvY2FsLnRleHQucEV4dHJh
ID0gdGV4dExvY2FsLmJ1ZmZlcjsKLQotICAgICAgICBVRXJyb3JDb2RlIG9wZW5TdGF0dXMgPSBV
X1pFUk9fRVJST1I7Ci0gICAgICAgIFVUZXh0KiB0ZXh0ID0gb3BlbkxhdGluMUNvbnRleHRBd2Fy
ZVVUZXh0UHJvdmlkZXIoJnRleHRMb2NhbCwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5s
ZW5ndGgoKSwgcHJpb3JDb250ZXh0LCBwcmlvckNvbnRleHRMZW5ndGgsICZvcGVuU3RhdHVzKTsK
LSAgICAgICAgaWYgKFVfRkFJTFVSRShvcGVuU3RhdHVzKSkgewotICAgICAgICAgICAgTE9HX0VS
Uk9SKCJvcGVuTGF0aW4xQ29udGV4dEF3YXJlVVRleHRQcm92aWRlciBmYWlsZWQgd2l0aCBzdGF0
dXMgJWQiLCBvcGVuU3RhdHVzKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICB9Ci0KLSAgICAgICAgVUVycm9yQ29kZSBzZXRUZXh0U3RhdHVzID0gVV9aRVJPX0VSUk9SOwot
ICAgICAgICB1YnJrX3NldFVUZXh0KCZpdGVyYXRvciwgdGV4dCwgJnNldFRleHRTdGF0dXMpOwot
ICAgICAgICBpZiAoVV9GQUlMVVJFKHNldFRleHRTdGF0dXMpKSB7Ci0gICAgICAgICAgICBMT0df
RVJST1IoInVicmtfc2V0VVRleHQgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgc2V0VGV4dFN0YXR1
cyk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHV0
ZXh0X2Nsb3NlKHRleHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFVUZXh0IHRleHRMb2NhbCA9
IFVURVhUX0lOSVRJQUxJWkVSOwotCi0gICAgICAgIFVFcnJvckNvZGUgb3BlblN0YXR1cyA9IFVf
WkVST19FUlJPUjsKLSAgICAgICAgVVRleHQqIHRleHQgPSBvcGVuVVRGMTZDb250ZXh0QXdhcmVV
VGV4dFByb3ZpZGVyKCZ0ZXh0TG9jYWwsIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxl
bmd0aCgpLCBwcmlvckNvbnRleHQsIHByaW9yQ29udGV4dExlbmd0aCwgJm9wZW5TdGF0dXMpOwot
ICAgICAgICBpZiAoVV9GQUlMVVJFKG9wZW5TdGF0dXMpKSB7Ci0gICAgICAgICAgICBMT0dfRVJS
T1IoIm9wZW5VVEYxNkNvbnRleHRBd2FyZVVUZXh0UHJvdmlkZXIgZmFpbGVkIHdpdGggc3RhdHVz
ICVkIiwgb3BlblN0YXR1cyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0g
ICAgICAgIFVFcnJvckNvZGUgc2V0VGV4dFN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICAgICAg
dWJya19zZXRVVGV4dCgmaXRlcmF0b3IsIHRleHQsICZzZXRUZXh0U3RhdHVzKTsKLSAgICAgICAg
aWYgKFVfRkFJTFVSRShzZXRUZXh0U3RhdHVzKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJ1
YnJrX3NldFVUZXh0IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIHNldFRleHRTdGF0dXMpOwotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICB1dGV4dF9jbG9z
ZSh0ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gJml0ZXJhdG9yOwotfQotCi0KLS8vIFN0YXRp
YyBpdGVyYXRvcnMKLQotVUJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKFN0cmluZ1Zp
ZXcgc3RyaW5nKQotewotICAgIHN0YXRpYyBVQnJlYWtJdGVyYXRvciogc3RhdGljV29yZEJyZWFr
SXRlcmF0b3IgPSBpbml0aWFsaXplSXRlcmF0b3IoVUJSS19XT1JEKTsKLSAgICBpZiAoIXN0YXRp
Y1dvcmRCcmVha0l0ZXJhdG9yKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVy
biBzZXRUZXh0Rm9ySXRlcmF0b3IoKnN0YXRpY1dvcmRCcmVha0l0ZXJhdG9yLCBzdHJpbmcpOwot
fQotCi1VQnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcgc3Ry
aW5nKQotewotICAgIHN0YXRpYyBVQnJlYWtJdGVyYXRvciogc3RhdGljU2VudGVuY2VCcmVha0l0
ZXJhdG9yID0gaW5pdGlhbGl6ZUl0ZXJhdG9yKFVCUktfU0VOVEVOQ0UpOwotICAgIGlmICghc3Rh
dGljU2VudGVuY2VCcmVha0l0ZXJhdG9yKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IHJldHVybiBzZXRUZXh0Rm9ySXRlcmF0b3IoKnN0YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvciwg
c3RyaW5nKTsKLX0KLQotVUJyZWFrSXRlcmF0b3IqIGFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvcihT
dHJpbmdWaWV3IHN0cmluZywgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUsIGNvbnN0IFVDaGFy
KiBwcmlvckNvbnRleHQsIHVuc2lnbmVkIHByaW9yQ29udGV4dExlbmd0aCwgTGluZUJyZWFrSXRl
cmF0b3JNb2RlIG1vZGUpCi17Ci0gICAgVUJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gTGluZUJy
ZWFrSXRlcmF0b3JQb29sOjpzaGFyZWRQb29sKCkudGFrZShsb2NhbGUsIG1vZGUpOwotICAgIGlm
ICghaXRlcmF0b3IpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHNldENv
bnRleHRBd2FyZVRleHRGb3JJdGVyYXRvcigqaXRlcmF0b3IsIHN0cmluZywgcHJpb3JDb250ZXh0
LCBwcmlvckNvbnRleHRMZW5ndGgpOwotfQotCi12b2lkIHJlbGVhc2VMaW5lQnJlYWtJdGVyYXRv
cihVQnJlYWtJdGVyYXRvciogaXRlcmF0b3IpCi17Ci0gICAgQVNTRVJUX0FSRyhpdGVyYXRvciwg
aXRlcmF0b3IpOwotCi0gICAgTGluZUJyZWFrSXRlcmF0b3JQb29sOjpzaGFyZWRQb29sKCkucHV0
KGl0ZXJhdG9yKTsKLX0KLQotVUJyZWFrSXRlcmF0b3IqIG9wZW5MaW5lQnJlYWtJdGVyYXRvcihj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKLXsKLSAgICBib29sIGxvY2FsZUlzRW1wdHkgPSBs
b2NhbGUuaXNFbXB0eSgpOwotICAgIFVFcnJvckNvZGUgb3BlblN0YXR1cyA9IFVfWkVST19FUlJP
UjsKLSAgICBVQnJlYWtJdGVyYXRvciogdWJya0l0ZXIgPSB1YnJrX29wZW4oVUJSS19MSU5FLCBs
b2NhbGVJc0VtcHR5ID8gY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkgOiBsb2NhbGUuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgMCwgMCwgJm9wZW5TdGF0dXMpOwotICAgIC8vIGxvY2FsZSBjb21l
cyBmcm9tIGEgd2ViIHBhZ2UgYW5kIGl0IGNhbiBiZSBpbnZhbGlkLCBsZWFkaW5nIElDVQotICAg
IC8vIHRvIGZhaWwsIGluIHdoaWNoIGNhc2Ugd2UgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGxv
Y2FsZS4KLSAgICBpZiAoIWxvY2FsZUlzRW1wdHkgJiYgVV9GQUlMVVJFKG9wZW5TdGF0dXMpKSB7
Ci0gICAgICAgIG9wZW5TdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIHVicmtJdGVyID0g
dWJya19vcGVuKFVCUktfTElORSwgY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCksIDAsIDAsICZv
cGVuU3RhdHVzKTsKLSAgICB9Ci0KLSAgICBpZiAoVV9GQUlMVVJFKG9wZW5TdGF0dXMpKSB7Ci0g
ICAgICAgIExPR19FUlJPUigidWJya19vcGVuIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCIsIG9wZW5T
dGF0dXMpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdWJy
a0l0ZXI7Ci19Ci0KLXZvaWQgY2xvc2VMaW5lQnJlYWtJdGVyYXRvcihVQnJlYWtJdGVyYXRvciom
IGl0ZXJhdG9yKQotewotICAgIFVCcmVha0l0ZXJhdG9yKiB1YnJrSXRlciA9IGl0ZXJhdG9yOwot
ICAgIEFTU0VSVCh1YnJrSXRlcik7Ci0gICAgdWJya19jbG9zZSh1YnJrSXRlcik7Ci0gICAgaXRl
cmF0b3IgPSBudWxscHRyOwotfQotCi1zdGF0aWMgc3RkOjphdG9taWM8VUJyZWFrSXRlcmF0b3Iq
PiBub25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yID0gQVRPTUlDX1ZBUl9JTklUKG51bGxw
dHIpOwotCi1zdGF0aWMgaW5saW5lIFVCcmVha0l0ZXJhdG9yKiBnZXROb25TaGFyZWRDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yKCkKLXsKLSAgICBpZiAoYXV0byAqcmVzID0gbm9uU2hhcmVkQ2hhcmFj
dGVyQnJlYWtJdGVyYXRvci5leGNoYW5nZShudWxscHRyLCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1
aXJlKSkKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICByZXR1cm4gaW5pdGlhbGl6ZUl0ZXJhdG9y
KFVCUktfQ0hBUkFDVEVSKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNhY2hlTm9uU2hhcmVk
Q2hhcmFjdGVyQnJlYWtJdGVyYXRvcihVQnJlYWtJdGVyYXRvciogY2FjaGVNZSkKLXsKLSAgICBp
ZiAoYXV0byAqb2xkID0gbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvci5leGNoYW5nZShj
YWNoZU1lLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkKLSAgICAgICAgdWJya19jbG9zZShv
bGQpOwotfQotCi1Ob25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjpOb25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQotewotICAgIGlmICgobV9pdGVy
YXRvciA9IGdldE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoKSkpCi0gICAgICAgIG1f
aXRlcmF0b3IgPSBzZXRUZXh0Rm9ySXRlcmF0b3IoKm1faXRlcmF0b3IsIHN0cmluZyk7Ci19Ci0K
LU5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I6On5Ob25TaGFyZWRDaGFyYWN0ZXJCcmVh
a0l0ZXJhdG9yKCkKLXsKLSAgICBpZiAobV9pdGVyYXRvcikKLSAgICAgICAgY2FjaGVOb25TaGFy
ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKG1faXRlcmF0b3IpOwotfQotCi1Ob25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yOjpOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKE5vblNo
YXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3ImJiBvdGhlcikKLSAgICA6IG1faXRlcmF0b3IobnVs
bHB0cikKLXsKLSAgICBzdGQ6OnN3YXAobV9pdGVyYXRvciwgb3RoZXIubV9pdGVyYXRvcik7Ci19
Ci0KLS8vIEl0ZXJhdG9yIGltcGxlbWVuYXRpb24uCi0KLWJvb2wgaXNXb3JkVGV4dEJyZWFrKFVC
cmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKLXsKLSAgICBpbnQgcnVsZVN0YXR1cyA9IHVicmtfZ2V0
UnVsZVN0YXR1cyhpdGVyYXRvcik7Ci0gICAgcmV0dXJuIHJ1bGVTdGF0dXMgIT0gVUJSS19XT1JE
X05PTkU7Ci19Ci0KLXVuc2lnbmVkIG51bUdyYXBoZW1lQ2x1c3RlcnMoU3RyaW5nVmlldyBzdHJp
bmcpCi17Ci0gICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAg
IAotICAgIGlmICghc3RyaW5nTGVuZ3RoKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIFRo
ZSBvbmx5IExhdGluLTEgRXh0ZW5kZWQgR3JhcGhlbWUgQ2x1c3RlciBpcyBDUkxGLgotICAgIGlm
IChzdHJpbmcuaXM4Qml0KCkpIHsKLSAgICAgICAgYXV0byogY2hhcmFjdGVycyA9IHN0cmluZy5j
aGFyYWN0ZXJzOCgpOwotICAgICAgICB1bnNpZ25lZCBudW1DUkxGID0gMDsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IHN0cmluZ0xlbmd0aDsgKytpKQotICAgICAgICAgICAgbnVt
Q1JMRiArPSBjaGFyYWN0ZXJzW2kgLSAxXSA9PSAnXHInICYmIGNoYXJhY3RlcnNbaV0gPT0gJ1xu
JzsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0xlbmd0aCAtIG51bUNSTEY7Ci0gICAgfQotCi0gICAg
Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdGVyYXRvciB7IHN0cmluZyB9OwotICAg
IGlmICghaXRlcmF0b3IpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiBzdHJpbmdMZW5ndGg7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbnVtR3JhcGhlbWVD
bHVzdGVycyA9IDA7Ci0gICAgd2hpbGUgKHVicmtfbmV4dChpdGVyYXRvcikgIT0gVUJSS19ET05F
KQotICAgICAgICArK251bUdyYXBoZW1lQ2x1c3RlcnM7Ci0gICAgcmV0dXJuIG51bUdyYXBoZW1l
Q2x1c3RlcnM7Ci19Ci0KLXVuc2lnbmVkIG51bUNvZGVVbml0c0luR3JhcGhlbWVDbHVzdGVycyhT
dHJpbmdWaWV3IHN0cmluZywgdW5zaWduZWQgbnVtR3JhcGhlbWVDbHVzdGVycykKLXsKLSAgICB1
bnNpZ25lZCBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBpZiAoc3RyaW5n
TGVuZ3RoIDw9IG51bUdyYXBoZW1lQ2x1c3RlcnMpCi0gICAgICAgIHJldHVybiBzdHJpbmdMZW5n
dGg7Ci0KLSAgICAvLyBUaGUgb25seSBMYXRpbi0xIEV4dGVuZGVkIEdyYXBoZW1lIENsdXN0ZXIg
aXMgQ1JMRi4KLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7Ci0gICAgICAgIGF1dG8qIGNoYXJh
Y3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVyczgoKTsKLSAgICAgICAgdW5zaWduZWQgaSwgajsKLSAg
ICAgICAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBudW1HcmFwaGVtZUNsdXN0ZXJzICYmIGogKyAx
IDwgc3RyaW5nTGVuZ3RoOyArK2ksICsraikKLSAgICAgICAgICAgIGogKz0gY2hhcmFjdGVyc1tq
XSA9PSAnXHInICYmIGNoYXJhY3RlcnNbaiArIDFdID09ICdcbic7Ci0gICAgICAgIHJldHVybiBq
ICsgKGkgPCBudW1HcmFwaGVtZUNsdXN0ZXJzKTsKLSAgICB9Ci0KLSAgICBOb25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yIGl0ZXJhdG9yIHsgc3RyaW5nIH07Ci0gICAgaWYgKCFpdGVyYXRv
cikgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHN0cmlu
Z0xlbmd0aDsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR3JhcGhl
bWVDbHVzdGVyczsgKytpKSB7Ci0gICAgICAgIGlmICh1YnJrX25leHQoaXRlcmF0b3IpID09IFVC
UktfRE9ORSkKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdMZW5ndGg7Ci0gICAgfQotICAgIHJl
dHVybiB1YnJrX2N1cnJlbnQoaXRlcmF0b3IpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L1RleHRCcmVh
a0l0ZXJhdG9yLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9UZXh0
QnJlYWtJdGVyYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTE1MDA4ODM0
ZmVlYWVlN2ZmMWRiNGMwZGMzMDY1ZDBjYjg2ZDM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90
ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNDcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBMYXJzIEtub2xsIDxsYXJzQHRyb2xsdGVjaC5jb20+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoK
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlN0cmluZ1ZpZXcuaCIKLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L2ljdS9UZXh0QnJlYWtJdGVyYXRvcklDVS5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L051bGxUZXh0QnJlYWtJdGVyYXRvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdHlwZWRl
ZiBOdWxsVGV4dEJyZWFrSXRlcmF0b3IgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybTsKLQotY2xh
c3MgVGV4dEJyZWFrSXRlcmF0b3JDYWNoZTsKLQotY2xhc3MgVGV4dEJyZWFrSXRlcmF0b3Igewot
cHVibGljOgotICAgIGVudW0gY2xhc3MgTW9kZSB7Ci0gICAgICAgIExpbmUsCi0gICAgICAgIENh
cmV0LAotICAgICAgICBEZWxldGUKLSAgICB9OwotCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IoKSA9
IGRlbGV0ZTsKLSAgICBUZXh0QnJlYWtJdGVyYXRvcihjb25zdCBUZXh0QnJlYWtJdGVyYXRvciYp
ID0gZGVsZXRlOwotICAgIFRleHRCcmVha0l0ZXJhdG9yKFRleHRCcmVha0l0ZXJhdG9yJiYpID0g
ZGVmYXVsdDsKLSAgICBUZXh0QnJlYWtJdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IFRleHRCcmVh
a0l0ZXJhdG9yJikgPSBkZWxldGU7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3ImIG9wZXJhdG9yPShU
ZXh0QnJlYWtJdGVyYXRvciYmKSA9IGRlZmF1bHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPHVuc2ln
bmVkPiBwcmVjZWRpbmcodW5zaWduZWQgbG9jYXRpb24pIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gc3dpdGNoT24obV9iYWNraW5nLCBbJl0oY29uc3QgYXV0byYgaXRlcmF0b3IpIHsKLSAg
ICAgICAgICAgIHJldHVybiBpdGVyYXRvci5wcmVjZWRpbmcobG9jYXRpb24pOwotICAgICAgICB9
KTsKLSAgICB9Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBmb2xsb3dpbmcodW5zaWdu
ZWQgbG9jYXRpb24pIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc3dpdGNoT24obV9iYWNr
aW5nLCBbJl0oY29uc3QgYXV0byYgaXRlcmF0b3IpIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvci5mb2xsb3dpbmcobG9jYXRpb24pOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBib29s
IGlzQm91bmRhcnkodW5zaWduZWQgbG9jYXRpb24pIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gc3dpdGNoT24obV9iYWNraW5nLCBbJl0oY29uc3QgYXV0byYgaXRlcmF0b3IpIHsKLSAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvci5pc0JvdW5kYXJ5KGxvY2F0aW9uKTsKLSAgICAgICAgfSk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBUZXh0QnJlYWtJdGVyYXRvckNh
Y2hlOwotCi0gICAgLy8gVXNlIENhY2hlZFRleHRCcmVha0l0ZXJhdG9yIGluc3RlYWQgb2YgY29u
c3RydWN0aW5nIG9uZSBvZiB0aGVzZSBkaXJlY3RseS4KLSAgICBXVEZfRVhQT1JUIFRleHRCcmVh
a0l0ZXJhdG9yKFN0cmluZ1ZpZXcsIE1vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKTsK
LQotICAgIHZvaWQgc2V0VGV4dChTdHJpbmdWaWV3IHN0cmluZykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBzd2l0Y2hPbihtX2JhY2tpbmcsIFsmXShhdXRvJiBpdGVyYXRvcikgewotICAgICAgICAg
ICAgcmV0dXJuIGl0ZXJhdG9yLnNldFRleHQoc3RyaW5nKTsKLSAgICAgICAgfSk7Ci0gICAgfQot
Ci0gICAgTW9kZSBtb2RlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX21vZGU7Ci0g
ICAgfQotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fbG9jYWxlOwotICAgIH0KLQotICAgIFZhcmlhbnQ8VGV4dEJyZWFrSXRl
cmF0b3JJQ1UsIFRleHRCcmVha0l0ZXJhdG9yUGxhdGZvcm0+IG1fYmFja2luZzsKLSAgICBNb2Rl
IG1fbW9kZTsKLSAgICBBdG9taWNTdHJpbmcgbV9sb2NhbGU7Ci19OwotCi1jbGFzcyBDYWNoZWRU
ZXh0QnJlYWtJdGVyYXRvcjsKLQotY2xhc3MgVGV4dEJyZWFrSXRlcmF0b3JDYWNoZSB7Ci0vLyBV
c2UgQ2FjaGVkVGV4dEJyZWFrSXRlcmF0b3IgaW5zdGVhZCBvZiBkZWFsaW5nIHdpdGggdGhlIGNh
Y2hlIGRpcmVjdGx5LgotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8
VGV4dEJyZWFrSXRlcmF0b3JDYWNoZT47Ci0gICAgZnJpZW5kIGNsYXNzIENhY2hlZFRleHRCcmVh
a0l0ZXJhdG9yOwotCi0gICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yQ2FjaGUmIHNpbmdsZXRv
bigpCi0gICAgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGV4dEJyZWFrSXRlcmF0
b3JDYWNoZT4gY2FjaGU7Ci0gICAgICAgIHJldHVybiBjYWNoZS5nZXQoKTsKLSAgICB9Ci0KLSAg
ICBUZXh0QnJlYWtJdGVyYXRvckNhY2hlKGNvbnN0IFRleHRCcmVha0l0ZXJhdG9yQ2FjaGUmKSA9
IGRlbGV0ZTsKLSAgICBUZXh0QnJlYWtJdGVyYXRvckNhY2hlKFRleHRCcmVha0l0ZXJhdG9yQ2Fj
aGUmJikgPSBkZWxldGU7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3JDYWNoZSYgb3BlcmF0b3I9KGNv
bnN0IFRleHRCcmVha0l0ZXJhdG9yQ2FjaGUmKSA9IGRlbGV0ZTsKLSAgICBUZXh0QnJlYWtJdGVy
YXRvckNhY2hlJiBvcGVyYXRvcj0oVGV4dEJyZWFrSXRlcmF0b3JDYWNoZSYmKSA9IGRlbGV0ZTsK
LQotICAgIFRleHRCcmVha0l0ZXJhdG9yIHRha2UoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRCcmVh
a0l0ZXJhdG9yOjpNb2RlIG1vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQotICAgIHsK
LSAgICAgICAgYXV0byBpdGVyID0gc3RkOjpmaW5kX2lmKG1fdW51c2VkLmJlZ2luKCksIG1fdW51
c2VkLmVuZCgpLCBbJl0oVGV4dEJyZWFrSXRlcmF0b3ImIGNhbmRpZGF0ZSkgewotICAgICAgICAg
ICAgcmV0dXJuIGNhbmRpZGF0ZS5tb2RlKCkgPT0gbW9kZSAmJiBjYW5kaWRhdGUubG9jYWxlKCkg
PT0gbG9jYWxlOwotICAgICAgICB9KTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV91bnVzZWQuZW5k
KCkpCi0gICAgICAgICAgICByZXR1cm4gVGV4dEJyZWFrSXRlcmF0b3Ioc3RyaW5nLCBtb2RlLCBs
b2NhbGUpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKml0ZXIpOwotICAgICAgICBt
X3VudXNlZC5yZW1vdmUoaXRlciAtIG1fdW51c2VkLmJlZ2luKCkpOwotICAgICAgICByZXN1bHQu
c2V0VGV4dChzdHJpbmcpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAKLSAgICB9
Ci0KLSAgICB2b2lkIHB1dChUZXh0QnJlYWtJdGVyYXRvciYmIGl0ZXJhdG9yKQotICAgIHsKLSAg
ICAgICAgbV91bnVzZWQuYXBwZW5kKFdURk1vdmUoaXRlcmF0b3IpKTsKLSAgICAgICAgaWYgKG1f
dW51c2VkLnNpemUoKSA+IGNhcGFjaXR5KQotICAgICAgICAgICAgbV91bnVzZWQucmVtb3ZlKDAp
OwotICAgIH0KLQotICAgIFRleHRCcmVha0l0ZXJhdG9yQ2FjaGUoKQotICAgIHsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGludCBjYXBhY2l0eSA9IDI7Ci0gICAgLy8gRklYTUU6IEJy
ZWFrIHRoaXMgdXAgaW50byBkaWZmZXJlbnQgVmVjdG9ycyBwZXIgbW9kZS4KLSAgICBWZWN0b3I8
VGV4dEJyZWFrSXRlcmF0b3IsIGNhcGFjaXR5PiBtX3VudXNlZDsKLX07Ci0KLS8vIFJBSUkgZm9y
IFRleHRCcmVha0l0ZXJhdG9yIGFuZCBUZXh0QnJlYWtJdGVyYXRvckNhY2hlLgotY2xhc3MgQ2Fj
aGVkVGV4dEJyZWFrSXRlcmF0b3IgewotcHVibGljOgotICAgIENhY2hlZFRleHRCcmVha0l0ZXJh
dG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0QnJlYWtJdGVyYXRvcjo6TW9kZSBtb2RlLCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKLSAgICAgICAgOiBtX2JhY2tpbmcoVGV4dEJyZWFrSXRl
cmF0b3JDYWNoZTo6c2luZ2xldG9uKCkudGFrZShzdHJpbmcsIG1vZGUsIGxvY2FsZSkpCi0gICAg
ewotICAgIH0KLQotICAgIH5DYWNoZWRUZXh0QnJlYWtJdGVyYXRvcigpCi0gICAgewotICAgICAg
ICBUZXh0QnJlYWtJdGVyYXRvckNhY2hlOjpzaW5nbGV0b24oKS5wdXQoV1RGTW92ZShtX2JhY2tp
bmcpKTsKLSAgICB9Ci0KLSAgICBDYWNoZWRUZXh0QnJlYWtJdGVyYXRvcigpID0gZGVsZXRlOwot
ICAgIENhY2hlZFRleHRCcmVha0l0ZXJhdG9yKGNvbnN0IENhY2hlZFRleHRCcmVha0l0ZXJhdG9y
JikgPSBkZWxldGU7Ci0gICAgQ2FjaGVkVGV4dEJyZWFrSXRlcmF0b3IoQ2FjaGVkVGV4dEJyZWFr
SXRlcmF0b3ImJikgPSBkZWZhdWx0OwotICAgIENhY2hlZFRleHRCcmVha0l0ZXJhdG9yJiBvcGVy
YXRvcj0oY29uc3QgQ2FjaGVkVGV4dEJyZWFrSXRlcmF0b3ImKSA9IGRlbGV0ZTsKLSAgICBDYWNo
ZWRUZXh0QnJlYWtJdGVyYXRvciYgb3BlcmF0b3I9KENhY2hlZFRleHRCcmVha0l0ZXJhdG9yJiYp
ID0gZGVmYXVsdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHByZWNlZGluZyh1bnNp
Z25lZCBsb2NhdGlvbikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2JhY2tpbmcucHJl
Y2VkaW5nKGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBm
b2xsb3dpbmcodW5zaWduZWQgbG9jYXRpb24pIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9iYWNraW5nLmZvbGxvd2luZyhsb2NhdGlvbik7Ci0gICAgfQotCi0gICAgYm9vbCBpc0JvdW5k
YXJ5KHVuc2lnbmVkIGxvY2F0aW9uKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmFj
a2luZy5pc0JvdW5kYXJ5KGxvY2F0aW9uKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgVGV4dEJy
ZWFrSXRlcmF0b3IgbV9iYWNraW5nOwotfTsKLQotLy8gTm90ZTogVGhlIHJldHVybmVkIGl0ZXJh
dG9yIGlzIGdvb2Qgb25seSB1bnRpbCB5b3UgZ2V0IGFub3RoZXIgaXRlcmF0b3IsIHdpdGggdGhl
IGV4Y2VwdGlvbiBvZiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IuCi0KLWVudW0gY2xhc3MgTGlu
ZUJyZWFrSXRlcmF0b3JNb2RlIHsgRGVmYXVsdCwgTG9vc2UsIE5vcm1hbCwgU3RyaWN0IH07Ci0K
LVdURl9FWFBPUlRfUFJJVkFURSBVQnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoU3Ry
aW5nVmlldyk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgVUJyZWFrSXRlcmF0b3IqIHNlbnRlbmNlQnJl
YWtJdGVyYXRvcihTdHJpbmdWaWV3KTsKLQotV1RGX0VYUE9SVF9QUklWQVRFIFVCcmVha0l0ZXJh
dG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoU3RyaW5nVmlldywgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbGUsIGNvbnN0IFVDaGFyKiBwcmlvckNvbnRleHQsIHVuc2lnbmVkIHByaW9yQ29u
dGV4dExlbmd0aCwgTGluZUJyZWFrSXRlcmF0b3JNb2RlKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHJlbGVhc2VMaW5lQnJlYWtJdGVyYXRvcihVQnJlYWtJdGVyYXRvciopOwotVUJyZWFrSXRl
cmF0b3IqIG9wZW5MaW5lQnJlYWtJdGVyYXRvcihjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSk7
Ci12b2lkIGNsb3NlTGluZUJyZWFrSXRlcmF0b3IoVUJyZWFrSXRlcmF0b3IqJik7Ci0KLVdURl9F
WFBPUlRfUFJJVkFURSBib29sIGlzV29yZFRleHRCcmVhayhVQnJlYWtJdGVyYXRvciopOwotCi1j
bGFzcyBMYXp5TGluZUJyZWFrSXRlcmF0b3IgewotcHVibGljOgotICAgIExhenlMaW5lQnJlYWtJ
dGVyYXRvcigpCi0gICAgewotICAgICAgICByZXNldFByaW9yQ29udGV4dCgpOwotICAgIH0KLQot
ICAgIGV4cGxpY2l0IExhenlMaW5lQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZ1ZpZXcs
IGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlID0gQXRvbWljU3RyaW5nKCksIExpbmVCcmVha0l0
ZXJhdG9yTW9kZSBtb2RlID0gTGluZUJyZWFrSXRlcmF0b3JNb2RlOjpEZWZhdWx0KQotICAgICAg
ICA6IG1fc3RyaW5nVmlldyhzdHJpbmdWaWV3KQotICAgICAgICAsIG1fbG9jYWxlKGxvY2FsZSkK
LSAgICAgICAgLCBtX21vZGUobW9kZSkKLSAgICB7Ci0gICAgICAgIHJlc2V0UHJpb3JDb250ZXh0
KCk7Ci0gICAgfQotCi0gICAgfkxhenlMaW5lQnJlYWtJdGVyYXRvcigpCi0gICAgewotICAgICAg
ICBpZiAobV9pdGVyYXRvcikKLSAgICAgICAgICAgIHJlbGVhc2VMaW5lQnJlYWtJdGVyYXRvciht
X2l0ZXJhdG9yKTsKLSAgICB9Ci0KLSAgICBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcoKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZ1ZpZXc7IH0KLSAgICBMaW5lQnJlYWtJdGVyYXRvck1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotCi0gICAgVUNoYXIgbGFzdENoYXJhY3RlcigpIGNv
bnN0Ci0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KFdURl9BUlJBWV9MRU5HVEgobV9wcmlv
ckNvbnRleHQpID09IDIsICJVQnJlYWtJdGVyYXRvciB1bmV4cGVjdGVkIHByaW9yIGNvbnRleHQg
bGVuZ3RoIik7Ci0gICAgICAgIHJldHVybiBtX3ByaW9yQ29udGV4dFsxXTsKLSAgICB9Ci0KLSAg
ICBVQ2hhciBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChXVEZfQVJSQVlfTEVOR1RIKG1fcHJpb3JDb250ZXh0KSA9PSAyLCAiVUJyZWFr
SXRlcmF0b3IgdW5leHBlY3RlZCBwcmlvciBjb250ZXh0IGxlbmd0aCIpOwotICAgICAgICByZXR1
cm4gbV9wcmlvckNvbnRleHRbMF07Ci0gICAgfQotCi0gICAgdm9pZCBzZXRQcmlvckNvbnRleHQo
VUNoYXIgbGFzdCwgVUNoYXIgc2Vjb25kVG9MYXN0KQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChXVEZfQVJSQVlfTEVOR1RIKG1fcHJpb3JDb250ZXh0KSA9PSAyLCAiVUJyZWFrSXRlcmF0
b3IgdW5leHBlY3RlZCBwcmlvciBjb250ZXh0IGxlbmd0aCIpOwotICAgICAgICBtX3ByaW9yQ29u
dGV4dFswXSA9IHNlY29uZFRvTGFzdDsKLSAgICAgICAgbV9wcmlvckNvbnRleHRbMV0gPSBsYXN0
OwotICAgIH0KLQotICAgIHZvaWQgdXBkYXRlUHJpb3JDb250ZXh0KFVDaGFyIGxhc3QpCi0gICAg
ewotICAgICAgICBzdGF0aWNfYXNzZXJ0KFdURl9BUlJBWV9MRU5HVEgobV9wcmlvckNvbnRleHQp
ID09IDIsICJVQnJlYWtJdGVyYXRvciB1bmV4cGVjdGVkIHByaW9yIGNvbnRleHQgbGVuZ3RoIik7
Ci0gICAgICAgIG1fcHJpb3JDb250ZXh0WzBdID0gbV9wcmlvckNvbnRleHRbMV07Ci0gICAgICAg
IG1fcHJpb3JDb250ZXh0WzFdID0gbGFzdDsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc2V0UHJpb3JD
b250ZXh0KCkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoV1RGX0FSUkFZX0xFTkdUSCht
X3ByaW9yQ29udGV4dCkgPT0gMiwgIlVCcmVha0l0ZXJhdG9yIHVuZXhwZWN0ZWQgcHJpb3IgY29u
dGV4dCBsZW5ndGgiKTsKLSAgICAgICAgbV9wcmlvckNvbnRleHRbMF0gPSAwOwotICAgICAgICBt
X3ByaW9yQ29udGV4dFsxXSA9IDA7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgcHJpb3JDb250ZXh0
TGVuZ3RoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHByaW9yQ29udGV4dExlbmd0
aCA9IDA7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoV1RGX0FSUkFZX0xFTkdUSChtX3ByaW9yQ29u
dGV4dCkgPT0gMiwgIlVCcmVha0l0ZXJhdG9yIHVuZXhwZWN0ZWQgcHJpb3IgY29udGV4dCBsZW5n
dGgiKTsKLSAgICAgICAgaWYgKG1fcHJpb3JDb250ZXh0WzFdKSB7Ci0gICAgICAgICAgICArK3By
aW9yQ29udGV4dExlbmd0aDsKLSAgICAgICAgICAgIGlmIChtX3ByaW9yQ29udGV4dFswXSkKLSAg
ICAgICAgICAgICAgICArK3ByaW9yQ29udGV4dExlbmd0aDsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gcHJpb3JDb250ZXh0TGVuZ3RoOwotICAgIH0KLQotICAgIC8vIE9idGFpbiB0ZXh0IGJy
ZWFrIGl0ZXJhdG9yLCBwb3NzaWJseSBwcmV2aW91c2x5IGNhY2hlZCwgd2hlcmUgdGhpcyBpdGVy
YXRvciBpcyAob3IgaGFzIGJlZW4pCi0gICAgLy8gaW5pdGlhbGl6ZWQgdG8gdXNlIHRoZSBwcmV2
aW91c2x5IHN0b3JlZCBzdHJpbmcgYXMgdGhlIHByaW1hcnkgYnJlYWtpbmcgY29udGV4dCBhbmQg
dXNpbmcKLSAgICAvLyBwcmV2aW91c2x5IHN0b3JlZCBwcmlvciBjb250ZXh0IGlmIG5vbi1lbXB0
eS4KLSAgICBVQnJlYWtJdGVyYXRvciogZ2V0KHVuc2lnbmVkIHByaW9yQ29udGV4dExlbmd0aCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChwcmlvckNvbnRleHRMZW5ndGggPD0gcHJpb3JDb250ZXh0
Q2FwYWNpdHkpOwotICAgICAgICBjb25zdCBVQ2hhciogcHJpb3JDb250ZXh0ID0gcHJpb3JDb250
ZXh0TGVuZ3RoID8gJm1fcHJpb3JDb250ZXh0W3ByaW9yQ29udGV4dENhcGFjaXR5IC0gcHJpb3JD
b250ZXh0TGVuZ3RoXSA6IDA7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvcikgewotICAgICAgICAg
ICAgbV9pdGVyYXRvciA9IGFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIG1f
bG9jYWxlLCBwcmlvckNvbnRleHQsIHByaW9yQ29udGV4dExlbmd0aCwgbV9tb2RlKTsKLSAgICAg
ICAgICAgIG1fY2FjaGVkUHJpb3JDb250ZXh0ID0gcHJpb3JDb250ZXh0OwotICAgICAgICAgICAg
bV9jYWNoZWRQcmlvckNvbnRleHRMZW5ndGggPSBwcmlvckNvbnRleHRMZW5ndGg7Ci0gICAgICAg
IH0gZWxzZSBpZiAocHJpb3JDb250ZXh0ICE9IG1fY2FjaGVkUHJpb3JDb250ZXh0IHx8IHByaW9y
Q29udGV4dExlbmd0aCAhPSBtX2NhY2hlZFByaW9yQ29udGV4dExlbmd0aCkgewotICAgICAgICAg
ICAgcmVzZXRTdHJpbmdBbmRSZWxlYXNlSXRlcmF0b3IobV9zdHJpbmdWaWV3LCBtX2xvY2FsZSwg
bV9tb2RlKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLT5nZXQocHJpb3JDb250ZXh0TGVuZ3Ro
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9pdGVyYXRvcjsKLSAgICB9Ci0KLSAgICB2
b2lkIHJlc2V0U3RyaW5nQW5kUmVsZWFzZUl0ZXJhdG9yKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUsIExpbmVCcmVha0l0ZXJhdG9yTW9kZSBtb2RlKQot
ICAgIHsKLSAgICAgICAgaWYgKG1faXRlcmF0b3IpCi0gICAgICAgICAgICByZWxlYXNlTGluZUJy
ZWFrSXRlcmF0b3IobV9pdGVyYXRvcik7Ci0gICAgICAgIG1fc3RyaW5nVmlldyA9IHN0cmluZ1Zp
ZXc7Ci0gICAgICAgIG1fbG9jYWxlID0gbG9jYWxlOwotICAgICAgICBtX2l0ZXJhdG9yID0gbnVs
bHB0cjsKLSAgICAgICAgbV9jYWNoZWRQcmlvckNvbnRleHQgPSBudWxscHRyOwotICAgICAgICBt
X21vZGUgPSBtb2RlOwotICAgICAgICBtX2NhY2hlZFByaW9yQ29udGV4dExlbmd0aCA9IDA7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgcHJpb3JDb250
ZXh0Q2FwYWNpdHkgPSAyOwotICAgIFN0cmluZ1ZpZXcgbV9zdHJpbmdWaWV3OwotICAgIEF0b21p
Y1N0cmluZyBtX2xvY2FsZTsKLSAgICBVQnJlYWtJdGVyYXRvciogbV9pdGVyYXRvciB7IG51bGxw
dHIgfTsKLSAgICBjb25zdCBVQ2hhciogbV9jYWNoZWRQcmlvckNvbnRleHQgeyBudWxscHRyIH07
Ci0gICAgTGluZUJyZWFrSXRlcmF0b3JNb2RlIG1fbW9kZSB7IExpbmVCcmVha0l0ZXJhdG9yTW9k
ZTo6RGVmYXVsdCB9OwotICAgIHVuc2lnbmVkIG1fY2FjaGVkUHJpb3JDb250ZXh0TGVuZ3RoIHsg
MCB9OwotICAgIFVDaGFyIG1fcHJpb3JDb250ZXh0W3ByaW9yQ29udGV4dENhcGFjaXR5XTsKLX07
Ci0KLS8vIEl0ZXJhdGVzIG92ZXIgImV4dGVuZGVkIGdyYXBoZW1lIGNsdXN0ZXJzIiwgYXMgZGVm
aW5lZCBpbiBVQVggIzI5LgotLy8gTm90ZSB0aGF0IHBsYXRmb3JtIGltcGxlbWVudGF0aW9ucyBt
YXkgYmUgbGVzcyBzb3BoaXN0aWNhdGVkIC0gZS5nLiBJQ1UgcHJpb3IgdG8KLS8vIHZlcnNpb24g
NC4wIG9ubHkgc3VwcG9ydHMgImxlZ2FjeSBncmFwaGVtZSBjbHVzdGVycyIuCi0vLyBVc2UgdGhp
cyBmb3IgZ2VuZXJhbCB0ZXh0IHByb2Nlc3NpbmcsIGUuZy4gc3RyaW5nIHRydW5jYXRpb24uCi0K
LWNsYXNzIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IpOwotcHVibGljOgotICAg
IFdURl9FWFBPUlRfUFJJVkFURSBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKFN0cmlu
Z1ZpZXcpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSB+Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJ
dGVyYXRvcigpOwotCi0gICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihOb25TaGFy
ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yJiYpOwotCi0gICAgb3BlcmF0b3IgVUJyZWFrSXRlcmF0
b3IqKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvcjsgfQotCi1wcml2YXRlOgotICAgIFVCcmVh
a0l0ZXJhdG9yKiBtX2l0ZXJhdG9yOwotfTsKLQotLy8gQ291bnRzIHRoZSBudW1iZXIgb2YgZ3Jh
cGhlbWUgY2x1c3RlcnMuIEEgc3Vycm9nYXRlIHBhaXIgb3IgYSBzZXF1ZW5jZQotLy8gb2YgYSBu
b24tY29tYmluaW5nIGNoYXJhY3RlciBhbmQgZm9sbG93aW5nIGNvbWJpbmluZyBjaGFyYWN0ZXJz
IGlzCi0vLyBjb3VudGVkIGFzIDEgZ3JhcGhlbWUgY2x1c3Rlci4KLVdURl9FWFBPUlRfUFJJVkFU
RSB1bnNpZ25lZCBudW1HcmFwaGVtZUNsdXN0ZXJzKFN0cmluZ1ZpZXcpOwotCi0vLyBSZXR1cm5z
IHRoZSBudW1iZXIgb2YgY29kZSB1bml0cyB0aGF0IGNyZWF0ZSB0aGUgc3BlY2lmaWVkIG51bWJl
ciBvZgotLy8gZ3JhcGhlbWUgY2x1c3RlcnMuIElmIHRoZXJlIGFyZSBmZXdlciBjbHVzdGVycyBp
biB0aGUgc3RyaW5nIHRoYW4gc3BlY2lmaWVkLAotLy8gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5n
IGlzIHJldHVybmVkLgotV1RGX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIG51bUNvZGVVbml0c0lu
R3JhcGhlbWVDbHVzdGVycyhTdHJpbmdWaWV3LCB1bnNpZ25lZCk7Ci0KLX0KLQotdXNpbmcgV1RG
OjpDYWNoZWRUZXh0QnJlYWtJdGVyYXRvcjsKLXVzaW5nIFdURjo6TGF6eUxpbmVCcmVha0l0ZXJh
dG9yOwotdXNpbmcgV1RGOjpMaW5lQnJlYWtJdGVyYXRvck1vZGU7Ci11c2luZyBXVEY6Ok5vblNo
YXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I7Ci11c2luZyBXVEY6OlRleHRCcmVha0l0ZXJhdG9y
OwotdXNpbmcgV1RGOjpUZXh0QnJlYWtJdGVyYXRvckNhY2hlOwotdXNpbmcgV1RGOjppc1dvcmRU
ZXh0QnJlYWs7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
dGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwYTMwMWM4ODNhYzVhNzQxMjVjNzM2ZjhiZjNkOTNj
M2Y1ZjQ3NGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJ
bnRlcm5hbElDVS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVm
IFRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VfaAotI2RlZmluZSBUZXh0QnJlYWtJdGVyYXRv
ckludGVybmFsSUNVX2gKLQotLy8gRklYTUU6IE5vdyB0aGF0IHRoaXMgaGFuZGxlcyBsb2NhbGVz
IGZvciBJQ1UsIG5vdCBqdXN0IGZvciB0ZXh0IGJyZWFraW5nLAotLy8gdGhpcyBmaWxlIGFuZCB0
aGUgdmFyaW91cyBpbXBsZW1lbnRhdGlvbiBmaWxlcyBzaG91bGQgYmUgcmVuYW1lZC4KLQotbmFt
ZXNwYWNlIFdURiB7Ci0KLVdURl9FWFBPUlRfUFJJVkFURSBjb25zdCBjaGFyKiBjdXJyZW50U2Vh
cmNoTG9jYWxlSUQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSBjb25zdCBjaGFyKiBjdXJyZW50VGV4
dEJyZWFrTG9jYWxlSUQoKTsKLQotfQotCi11c2luZyBXVEY6OmN1cnJlbnRTZWFyY2hMb2NhbGVJ
RDsKLXVzaW5nIFdURjo6Y3VycmVudFRleHRCcmVha0xvY2FsZUlEOwotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L1VuaXF1ZWRTdHJp
bmdJbXBsLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9VbmlxdWVk
U3RyaW5nSW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmRkOGNkZTNjNWE5
OTRlYzkyOTg1NDQwODAwODE0YWUwZGExOWRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0
L1VuaXF1ZWRTdHJpbmdJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgVW5pcXVlZFN0cmluZ0ltcGxfaAotI2RlZmluZSBVbmlx
dWVkU3RyaW5nSW1wbF9oCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+Ci0KLW5h
bWVzcGFjZSBXVEYgewotCi0vLyBJdCByZXByZXNlbnRzIHRoYXQgdGhlIHN0cmluZyBpbXBsIGlz
IHVuaXF1ZWQgaW4gc29tZSB3YXlzLgotLy8gV2hlbiB0aGUgZ2l2ZW4gMiBzdHJpbmcgaW1wbHMg
YXJlIGJvdGggdW5pcXVlZCBzdHJpbmcgaW1wbHMsIHdlIGNhbiBjb21wYXJlIGl0IGp1c3QgdXNp
bmcgcG9pbnRlciBjb21wYXJpc29uLgotY2xhc3MgVW5pcXVlZFN0cmluZ0ltcGwgOiBwdWJsaWMg
U3RyaW5nSW1wbCB7Ci1wcml2YXRlOgotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKCkgPSBkZWxldGU7
Ci1wcm90ZWN0ZWQ6Ci0gICAgVW5pcXVlZFN0cmluZ0ltcGwoQ3JlYXRlU3ltYm9sVGFnLCBjb25z
dCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKSA6IFN0cmluZ0ltcGwoQ3JlYXRl
U3ltYm9sLCBjaGFyYWN0ZXJzLCBsZW5ndGgpIHsgfQotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKENy
ZWF0ZVN5bWJvbFRhZywgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkg
OiBTdHJpbmdJbXBsKENyZWF0ZVN5bWJvbCwgY2hhcmFjdGVycywgbGVuZ3RoKSB7IH0KLSAgICBV
bmlxdWVkU3RyaW5nSW1wbChDcmVhdGVTeW1ib2xUYWcpIDogU3RyaW5nSW1wbChDcmVhdGVTeW1i
b2wpIHsgfQotfTsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0vLyBVbmlxdWVkU3RyaW5nSW1wbHMg
Y3JlYXRlZCBmcm9tIFN0YXRpY1N0cmluZ0ltcGwgd2lsbCBBU1NFUlQKLS8vIGluIHRoZSBnZW5l
cmljIFZhbHVlQ2hlY2s8VD46OmNoZWNrQ29uc2lzdGVuY3kKLS8vIGFzIHRoZXkgYXJlIG5vdCBh
bGxvY2F0ZWQgYnkgZmFzdE1hbGxvYy4KLS8vIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGFueSB3
YXkgdG8gZGV0ZWN0IHRoYXQgY2FzZQotLy8gc28gd2UgaWdub3JlIHRoZSBjb25zaXN0ZW5jeSBj
aGVjayBmb3IgYWxsIFVuaXF1ZWRTdHJpbmdJbXBscyouCi10ZW1wbGF0ZTw+IHN0cnVjdAotVmFs
dWVDaGVjazxVbmlxdWVkU3RyaW5nSW1wbCo+IHsKLSAgICBzdGF0aWMgdm9pZCBjaGVja0NvbnNp
c3RlbmN5KGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKikgeyB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdAotVmFsdWVDaGVjazxjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCo+IHsKLSAgICBzdGF0aWMg
dm9pZCBjaGVja0NvbnNpc3RlbmN5KGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKikgeyB9Ci19Owot
I2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OlVuaXF1ZWRTdHJpbmdJ
bXBsOwotCi0jZW5kaWYgLy8gVW5pcXVlZFN0cmluZ0ltcGxfaApkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDE3YWYyMzZiMzFkODE3YzlkMGE1M2E4ZTlhYTk5NzgwNzAxOGZj
ZjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyMzEgKzAsMCBAQAotLyoKLSAqIChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJXVEZTdHJpbmcuaCIKLQotI2luY2x1ZGUgIkludGVnZXJUb1N0cmluZ0NvbnZlcnNp
b24uaCIKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgot
I2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Ci0jaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL2R0b2EuaD4KLSNp
bmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgotI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL1VURjguaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBVbmljb2Rl
OwotCi0vLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBVVEYtMTYgZGF0YS4KLVN0cmluZzo6U3Ry
aW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgaWYg
KGNoYXJhY3RlcnMpCi0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShjaGFyYWN0
ZXJzLCBsZW5ndGgpOwotfQotCi0vLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBVVEYtMTYgZGF0
YSwgZnJvbSBhIG51bGwtdGVybWluYXRlZCBzb3VyY2UuCi1TdHJpbmc6OlN0cmluZyhjb25zdCBV
Q2hhciogc3RyKQotewotICAgIGlmICghc3RyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lt
cGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoc3RyLCBsZW5ndGhPZk51bGxUZXJtaW5hdGVkU3RyaW5n
KHN0cikpOwotfQotCi0vLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBsYXRpbjEgZGF0YS4KLVN0
cmluZzo6U3RyaW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgaWYgKGNoYXJhY3RlcnMpCi0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0
ZShjaGFyYWN0ZXJzLCBsZW5ndGgpOwotfQotCi1TdHJpbmc6OlN0cmluZyhjb25zdCBjaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKGNoYXJhY3RlcnMpCi0gICAg
ICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oY2hhcmFjdGVycyksIGxlbmd0aCk7Ci19Ci0KLS8vIENvbnN0cnVjdCBhIHN0cmluZyB3
aXRoIGxhdGluMSBkYXRhLCBmcm9tIGEgbnVsbC10ZXJtaW5hdGVkIHNvdXJjZS4KLVN0cmluZzo6
U3RyaW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzKQotewotICAgIGlmIChjaGFyYWN0ZXJzKQot
ICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVycyk7Ci19Ci0KLVN0
cmluZzo6U3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMpCi17Ci0gICAgaWYgKGNoYXJhY3Rl
cnMpCi0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycykpOwotfQotCi1TdHJpbmc6OlN0cmluZyhBU0NJSUxp
dGVyYWwgY2hhcmFjdGVycykKLSAgICA6IG1faW1wbChTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0
ZXJhbChjaGFyYWN0ZXJzKSkKLXsKLX0KLQotdm9pZCBTdHJpbmc6OmFwcGVuZChjb25zdCBTdHJp
bmcmIHN0cikKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBleHRyZW1lbHkgaW5lZmZpY2llbnQu
IFNvIG11Y2ggc28gdGhhdCB3ZSBtaWdodCB3YW50IHRvIHRha2UgdGhpcyBvdXQgb2YgU3RyaW5n
J3MgQVBJLgotCi0gICAgaWYgKHN0ci5pc0VtcHR5KCkpCi0gICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKHN0ci5tX2ltcGwpIHsKLSAgICAgICAgaWYgKG1faW1wbCkgewotICAgICAgICAgICAgaWYg
KG1faW1wbC0+aXM4Qml0KCkgJiYgc3RyLm1faW1wbC0+aXM4Qml0KCkpIHsKLSAgICAgICAgICAg
ICAgICBMQ2hhciogZGF0YTsKLSAgICAgICAgICAgICAgICBpZiAoc3RyLmxlbmd0aCgpID4gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gbV9pbXBsLT5sZW5ndGgoKSkKLSAg
ICAgICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgICAgICBhdXRvIG5ld0ltcGwg
PSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKG1faW1wbC0+bGVuZ3RoKCkgKyBzdHIu
bGVuZ3RoKCksIGRhdGEpOwotICAgICAgICAgICAgICAgIG1lbWNweShkYXRhLCBtX2ltcGwtPmNo
YXJhY3RlcnM4KCksIG1faW1wbC0+bGVuZ3RoKCkgKiBzaXplb2YoTENoYXIpKTsKLSAgICAgICAg
ICAgICAgICBtZW1jcHkoZGF0YSArIG1faW1wbC0+bGVuZ3RoKCksIHN0ci5jaGFyYWN0ZXJzOCgp
LCBzdHIubGVuZ3RoKCkgKiBzaXplb2YoTENoYXIpKTsKLSAgICAgICAgICAgICAgICBtX2ltcGwg
PSBXVEZNb3ZlKG5ld0ltcGwpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIFVDaGFyKiBkYXRhOwotICAgICAgICAgICAgaWYgKHN0ci5sZW5ndGgo
KSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIG1faW1wbC0+bGVuZ3Ro
KCkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGF1dG8gbmV3SW1wbCA9
IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9pbXBsLT5sZW5ndGgoKSArIHN0ci5s
ZW5ndGgoKSwgZGF0YSk7Ci0gICAgICAgICAgICBTdHJpbmdWaWV3KCptX2ltcGwpLmdldENoYXJh
Y3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEpOwotICAgICAgICAgICAgU3RyaW5nVmlldyhzdHIpLmdl
dENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEgKyBtX2ltcGwtPmxlbmd0aCgpKTsKLSAgICAg
ICAgICAgIG1faW1wbCA9IFdURk1vdmUobmV3SW1wbCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgbV9pbXBsID0gc3RyLm1faW1wbDsKLSAgICB9Ci19Ci0KLXZvaWQgU3RyaW5nOjphcHBl
bmQoTENoYXIgY2hhcmFjdGVyKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBp
bmVmZmljaWVudC4gU28gbXVjaCBzbyB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gdGFrZSB0aGlzIG91
dCBvZiBTdHJpbmcncyBBUEkuCi0KLSAgICBpZiAoIW1faW1wbCkgewotICAgICAgICBtX2ltcGwg
PSBTdHJpbmdJbXBsOjpjcmVhdGUoJmNoYXJhY3RlciwgMSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaWYgKCFpczhCaXQoKSkgewotICAgICAgICBhcHBlbmQoc3RhdGljX2Nhc3Q8VUNo
YXI+KGNoYXJhY3RlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX2ltcGwt
Pmxlbmd0aCgpID49IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAg
ICAgQ1JBU0goKTsKLSAgICBMQ2hhciogZGF0YTsKLSAgICBhdXRvIG5ld0ltcGwgPSBTdHJpbmdJ
bXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKG1faW1wbC0+bGVuZ3RoKCkgKyAxLCBkYXRhKTsKLSAg
ICBtZW1jcHkoZGF0YSwgbV9pbXBsLT5jaGFyYWN0ZXJzOCgpLCBtX2ltcGwtPmxlbmd0aCgpKTsK
LSAgICBkYXRhW21faW1wbC0+bGVuZ3RoKCldID0gY2hhcmFjdGVyOwotICAgIG1faW1wbCA9IFdU
Rk1vdmUobmV3SW1wbCk7Ci19Ci0KLXZvaWQgU3RyaW5nOjphcHBlbmQoVUNoYXIgY2hhcmFjdGVy
KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBpbmVmZmljaWVudC4gU28gbXVj
aCBzbyB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gdGFrZSB0aGlzIG91dCBvZiBTdHJpbmcncyBBUEku
Ci0KLSAgICBpZiAoIW1faW1wbCkgewotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVh
dGUoJmNoYXJhY3RlciwgMSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGNoYXJh
Y3RlciA8PSAweEZGICYmIGlzOEJpdCgpKSB7Ci0gICAgICAgIGFwcGVuZChzdGF0aWNfY2FzdDxM
Q2hhcj4oY2hhcmFjdGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1faW1w
bC0+bGVuZ3RoKCkgPj0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAg
ICAgICBDUkFTSCgpOwotICAgIFVDaGFyKiBkYXRhOwotICAgIGF1dG8gbmV3SW1wbCA9IFN0cmlu
Z0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9pbXBsLT5sZW5ndGgoKSArIDEsIGRhdGEpOwot
ICAgIFN0cmluZ1ZpZXcoKm1faW1wbCkuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGF0YSk7
Ci0gICAgZGF0YVttX2ltcGwtPmxlbmd0aCgpXSA9IGNoYXJhY3RlcjsKLSAgICBtX2ltcGwgPSBX
VEZNb3ZlKG5ld0ltcGwpOwotfQotCi1pbnQgY29kZVBvaW50Q29tcGFyZShjb25zdCBTdHJpbmcm
IGEsIGNvbnN0IFN0cmluZyYgYikKLXsKLSAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShhLmlt
cGwoKSwgYi5pbXBsKCkpOwotfQotCi12b2lkIFN0cmluZzo6aW5zZXJ0KGNvbnN0IFN0cmluZyYg
c3RyaW5nLCB1bnNpZ25lZCBwb3NpdGlvbikKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBleHRy
ZW1lbHkgaW5lZmZpY2llbnQuIFNvIG11Y2ggc28gdGhhdCB3ZSBtaWdodCB3YW50IHRvIHRha2Ug
dGhpcyBvdXQgb2YgU3RyaW5nJ3MgQVBJLgotCi0gICAgdW5zaWduZWQgbGVuZ3RoVG9JbnNlcnQg
PSBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBpZiAoIWxlbmd0aFRvSW5zZXJ0KSB7Ci0gICAgICAg
IGlmIChzdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChp
c051bGwoKSkKLSAgICAgICAgICAgIG1faW1wbCA9IHN0cmluZy5pbXBsKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAocG9zaXRpb24gPj0gbGVuZ3RoKCkpIHsKLSAgICAgICAg
YXBwZW5kKHN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3Ro
VG9JbnNlcnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBsZW5ndGgo
KSkKLSAgICAgICAgQ1JBU0goKTsKLQotICAgIGlmIChpczhCaXQoKSAmJiBzdHJpbmcuaXM4Qml0
KCkpIHsKLSAgICAgICAgTENoYXIqIGRhdGE7Ci0gICAgICAgIGF1dG8gbmV3U3RyaW5nID0gU3Ry
aW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgoKSArIGxlbmd0aFRvSW5zZXJ0LCBk
YXRhKTsKLSAgICAgICAgU3RyaW5nVmlldygqbV9pbXBsKS5zdWJzdHJpbmcoMCwgcG9zaXRpb24p
LmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEpOwotICAgICAgICBTdHJpbmdWaWV3KHN0
cmluZykuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGF0YSArIHBvc2l0aW9uKTsKLSAgICAg
ICAgU3RyaW5nVmlldygqbV9pbXBsKS5zdWJzdHJpbmcocG9zaXRpb24pLmdldENoYXJhY3RlcnNX
aXRoVXBjb252ZXJ0KGRhdGEgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0KTsKLSAgICAgICAg
bV9pbXBsID0gV1RGTW92ZShuZXdTdHJpbmcpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFVDaGFy
KiBkYXRhOwotICAgICAgICBhdXRvIG5ld1N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoKCkgKyBsZW5ndGhUb0luc2VydCwgZGF0YSk7Ci0gICAgICAgIFN0cmlu
Z1ZpZXcoKm1faW1wbCkuc3Vic3RyaW5nKDAsIHBvc2l0aW9uKS5nZXRDaGFyYWN0ZXJzV2l0aFVw
Y29udmVydChkYXRhKTsKLSAgICAgICAgU3RyaW5nVmlldyhzdHJpbmcpLmdldENoYXJhY3RlcnNX
aXRoVXBjb252ZXJ0KGRhdGEgKyBwb3NpdGlvbik7Ci0gICAgICAgIFN0cmluZ1ZpZXcoKm1faW1w
bCkuc3Vic3RyaW5nKHBvc2l0aW9uKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRhICsg
cG9zaXRpb24gKyBsZW5ndGhUb0luc2VydCk7Ci0gICAgICAgIG1faW1wbCA9IFdURk1vdmUobmV3
U3RyaW5nKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3RyaW5nOjphcHBlbmQoY29uc3QgTENoYXIqIGNo
YXJhY3RlcnNUb0FwcGVuZCwgdW5zaWduZWQgbGVuZ3RoVG9BcHBlbmQpCi17Ci0gICAgLy8gRklY
TUU6IFRoaXMgaXMgZXh0cmVtZWx5IGluZWZmaWNpZW50LiBTbyBtdWNoIHNvIHRoYXQgd2UgbWln
aHQgd2FudCB0byB0YWtlIHRoaXMgb3V0IG9mIFN0cmluZydzIEFQSS4KLQotICAgIGlmICghbV9p
bXBsKSB7Ci0gICAgICAgIGlmICghY2hhcmFjdGVyc1RvQXBwZW5kKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVyc1RvQXBw
ZW5kLCBsZW5ndGhUb0FwcGVuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IWxlbmd0aFRvQXBwZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoY2hhcmFjdGVy
c1RvQXBwZW5kKTsKLQotICAgIHVuc2lnbmVkIHN0ckxlbmd0aCA9IG1faW1wbC0+bGVuZ3RoKCk7
Ci0KLSAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkgewotICAgICAgICBpZiAobGVuZ3RoVG9BcHBl
bmQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBzdHJMZW5ndGgpCi0g
ICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICBMQ2hhciogZGF0YTsKLSAgICAgICAgYXV0byBu
ZXdJbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChzdHJMZW5ndGggKyBsZW5n
dGhUb0FwcGVuZCwgZGF0YSk7Ci0gICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhkYXRhLCBt
X2ltcGwtPmNoYXJhY3RlcnM4KCksIHN0ckxlbmd0aCk7Ci0gICAgICAgIFN0cmluZ0ltcGw6OmNv
cHlDaGFycyhkYXRhICsgc3RyTGVuZ3RoLCBjaGFyYWN0ZXJzVG9BcHBlbmQsIGxlbmd0aFRvQXBw
ZW5kKTsKLSAgICAgICAgbV9pbXBsID0gV1RGTW92ZShuZXdJbXBsKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChsZW5ndGhUb0FwcGVuZCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSAtIHN0ckxlbmd0aCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBVQ2hh
ciogZGF0YTsKLSAgICBhdXRvIG5ld0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCgpICsgbGVuZ3RoVG9BcHBlbmQsIGRhdGEpOwotICAgIFN0cmluZ0ltcGw6OmNv
cHlDaGFycyhkYXRhLCBtX2ltcGwtPmNoYXJhY3RlcnMxNigpLCBzdHJMZW5ndGgpOwotICAgIFN0
cmluZ0ltcGw6OmNvcHlDaGFycyhkYXRhICsgc3RyTGVuZ3RoLCBjaGFyYWN0ZXJzVG9BcHBlbmQs
IGxlbmd0aFRvQXBwZW5kKTsKLSAgICBtX2ltcGwgPSBXVEZNb3ZlKG5ld0ltcGwpOwotfQotCi12
b2lkIFN0cmluZzo6YXBwZW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzVG9BcHBlbmQsIHVuc2ln
bmVkIGxlbmd0aFRvQXBwZW5kKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBp
bmVmZmljaWVudC4gU28gbXVjaCBzbyB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gdGFrZSB0aGlzIG91
dCBvZiBTdHJpbmcncyBBUEkuCi0KLSAgICBpZiAoIW1faW1wbCkgewotICAgICAgICBpZiAoIWNo
YXJhY3RlcnNUb0FwcGVuZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9pbXBsID0g
U3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhUb0FwcGVuZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgc3RyTGVuZ3RoID0gbV9pbXBsLT5sZW5ndGgoKTsK
LSAgICAKLSAgICBBU1NFUlQoY2hhcmFjdGVyc1RvQXBwZW5kKTsKLSAgICBpZiAobGVuZ3RoVG9B
cHBlbmQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBzdHJMZW5ndGgp
Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgVUNoYXIqIGRhdGE7Ci0gICAgYXV0byBuZXdJbXBsID0g
U3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChzdHJMZW5ndGggKyBsZW5ndGhUb0FwcGVu
ZCwgZGF0YSk7Ci0gICAgaWYgKG1faW1wbC0+aXM4Qml0KCkpCi0gICAgICAgIFN0cmluZ0ltcGw6
OmNvcHlDaGFycyhkYXRhLCBjaGFyYWN0ZXJzOCgpLCBzdHJMZW5ndGgpOwotICAgIGVsc2UKLSAg
ICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGRhdGEsIGNoYXJhY3RlcnMxNigpLCBzdHJMZW5n
dGgpOwotICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhkYXRhICsgc3RyTGVuZ3RoLCBjaGFyYWN0
ZXJzVG9BcHBlbmQsIGxlbmd0aFRvQXBwZW5kKTsKLSAgICBtX2ltcGwgPSBXVEZNb3ZlKG5ld0lt
cGwpOwotfQotCi0KLVVDaGFyMzIgU3RyaW5nOjpjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVk
IGkpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltcGwgfHwgaSA+PSBtX2ltcGwtPmxlbmd0aCgpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9pbXBsLT5jaGFyYWN0ZXJTdGFydGluZ0F0
KGkpOwotfQotCi12b2lkIFN0cmluZzo6dHJ1bmNhdGUodW5zaWduZWQgcG9zaXRpb24pCi17Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsID0gbV9pbXBsLT5zdWJzdHJpbmcoMCwgcG9z
aXRpb24pOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSB2
b2lkIFN0cmluZzo6cmVtb3ZlSW50ZXJuYWwoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVy
cywgdW5zaWduZWQgcG9zaXRpb24sIGludCBsZW5ndGhUb1JlbW92ZSkKLXsKLSAgICBDaGFyYWN0
ZXJUeXBlKiBkYXRhOwotICAgIGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoKCkgLSBsZW5ndGhUb1JlbW92ZSwgZGF0YSk7Ci0gICAgbWVtY3B5KGRh
dGEsIGNoYXJhY3RlcnMsIHBvc2l0aW9uICogc2l6ZW9mKENoYXJhY3RlclR5cGUpKTsKLSAgICBt
ZW1jcHkoZGF0YSArIHBvc2l0aW9uLCBjaGFyYWN0ZXJzICsgcG9zaXRpb24gKyBsZW5ndGhUb1Jl
bW92ZSwKLSAgICAgICAgKGxlbmd0aCgpIC0gbGVuZ3RoVG9SZW1vdmUgLSBwb3NpdGlvbikgKiBz
aXplb2YoQ2hhcmFjdGVyVHlwZSkpOwotCi0gICAgbV9pbXBsID0gV1RGTW92ZShuZXdJbXBsKTsK
LX0KLQotdm9pZCBTdHJpbmc6OnJlbW92ZSh1bnNpZ25lZCBwb3NpdGlvbiwgaW50IGxlbmd0aFRv
UmVtb3ZlKQotewotICAgIGlmIChsZW5ndGhUb1JlbW92ZSA8PSAwKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKHBvc2l0aW9uID49IGxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhUb1JlbW92ZSkgPiBsZW5ndGgoKSAtIHBvc2l0
aW9uKQotICAgICAgICBsZW5ndGhUb1JlbW92ZSA9IGxlbmd0aCgpIC0gcG9zaXRpb247Ci0KLSAg
ICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgcmVtb3ZlSW50ZXJuYWwoY2hhcmFjdGVyczgoKSwg
cG9zaXRpb24sIGxlbmd0aFRvUmVtb3ZlKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgcmVtb3ZlSW50ZXJuYWwoY2hhcmFjdGVyczE2KCksIHBvc2l0aW9uLCBsZW5ndGhUb1JlbW92
ZSk7Ci19Ci0KLVN0cmluZyBTdHJpbmc6OnN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVk
IGxlbikgY29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCkgCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICByZXR1cm4gbV9pbXBsLT5zdWJzdHJpbmcocG9zLCBsZW4pOwotfQotCi1TdHJpbmcg
U3RyaW5nOjpzdWJzdHJpbmdTaGFyaW5nSW1wbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2UgdXNlZCB0byBjaGVjayBhZ2FpbnN0IGEg
bGltaXQgb2YgSGVhcDo6bWluRXh0cmFDb3N0IC8gc2l6ZW9mKFVDaGFyKS4KLQotICAgIHVuc2ln
bmVkIHN0cmluZ0xlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOwotICAgIG9mZnNldCA9IHN0ZDo6bWlu
KG9mZnNldCwgc3RyaW5nTGVuZ3RoKTsKLSAgICBsZW5ndGggPSBzdGQ6Om1pbihsZW5ndGgsIHN0
cmluZ0xlbmd0aCAtIG9mZnNldCk7Ci0KLSAgICBpZiAoIW9mZnNldCAmJiBsZW5ndGggPT0gc3Ry
aW5nTGVuZ3RoKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgcmV0dXJuIFN0cmluZyhTdHJp
bmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqbV9pbXBsLCBvZmZzZXQsIGxlbmd0
aCkpOwotfQotCi1TdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpIGNvbnN0
Ci17Ci0gICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlIG1hbnkgb3Ro
ZXJzIGxpa2UgaXQsIGJlIGlubGluZWQ/Ci0gICAgaWYgKCFtX2ltcGwpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9pbXBsLT5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgp
OwotfQotCi1TdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIGNvbnN0Ci17
Ci0gICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlIG1hbnkgb3RoZXJz
IGxpa2UgaXQsIGJlIGlubGluZWQ/Ci0gICAgaWYgKCFtX2ltcGwpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLSAgICByZXR1cm4gbV9pbXBsLT5jb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpOwot
fQotCi1TdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJl
dHVybiBtX2ltcGwtPmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKTsKLX0KLQotU3Ry
aW5nIFN0cmluZzo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWls
aW5nSW5kZXg4Qml0KHVuc2lnbmVkIGZhaWxpbmdJbmRleCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
aW1wbCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX2ltcGwtPmNvbnZl
cnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4OEJpdChmYWls
aW5nSW5kZXgpOwotfQotCi1TdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0
TG9jYWxlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUo
KTsKLX0KLQotU3RyaW5nIFN0cmluZzo6Y29udmVydFRvTG93ZXJjYXNlV2l0aExvY2FsZShjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2lt
cGwpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9pbXBsLT5jb252ZXJ0
VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGxvY2FsZUlkZW50aWZpZXIpOwotfQotCi1TdHJpbmcgU3Ry
aW5nOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxlSWRlbnRpZmllcikgY29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2Nh
bGUobG9jYWxlSWRlbnRpZmllcik7Ci19Ci0KLVN0cmluZyBTdHJpbmc6OnN0cmlwV2hpdGVTcGFj
ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltcGwpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICByZXR1cm4gbV9pbXBsLT5zdHJpcFdoaXRlU3BhY2UoKTsKLX0KLQotU3RyaW5nIFN0cmlu
Zzo6c3RyaXBXaGl0ZVNwYWNlKElzV2hpdGVTcGFjZUZ1bmN0aW9uUHRyIGlzV2hpdGVTcGFjZSkg
Y29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IHJldHVybiBtX2ltcGwtPnN0cmlwV2hpdGVTcGFjZShpc1doaXRlU3BhY2UpOwotfQotCi1TdHJp
bmcgU3RyaW5nOjpzaW1wbGlmeVdoaXRlU3BhY2UoKSBjb25zdAotewotICAgIGlmICghbV9pbXBs
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIG1faW1wbC0+c2ltcGxpZnlX
aGl0ZVNwYWNlKCk7Ci19Ci0KLVN0cmluZyBTdHJpbmc6OnNpbXBsaWZ5V2hpdGVTcGFjZShJc1do
aXRlU3BhY2VGdW5jdGlvblB0ciBpc1doaXRlU3BhY2UpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2lt
cGwpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9pbXBsLT5zaW1wbGlm
eVdoaXRlU3BhY2UoaXNXaGl0ZVNwYWNlKTsKLX0KLQotU3RyaW5nIFN0cmluZzo6cmVtb3ZlQ2hh
cmFjdGVycyhDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyIGZpbmRNYXRjaCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1faW1wbCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX2lt
cGwtPnJlbW92ZUNoYXJhY3RlcnMoZmluZE1hdGNoKTsKLX0KLQotU3RyaW5nIFN0cmluZzo6Zm9s
ZENhc2UoKSBjb25zdAotewotICAgIGlmICghbV9pbXBsKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0gICAgcmV0dXJuIG1faW1wbC0+Zm9sZENhc2UoKTsKLX0KLQotYm9vbCBTdHJpbmc6OnBl
cmNlbnRhZ2UoaW50JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltcGwgfHwgIW1faW1w
bC0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgoKm1faW1wbClb
bV9pbXBsLT5sZW5ndGgoKSAtIDFdICE9ICclJykKLSAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAobV9pbXBsLT5pczhCaXQoKSkKLSAgICAgICAgcmVzdWx0ID0gY2hhcmFjdGVyc1RvSW50
U3RyaWN0KG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSAtIDEpOwotICAg
IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gY2hhcmFjdGVyc1RvSW50U3RyaWN0KG1faW1wbC0+Y2hh
cmFjdGVyczE2KCksIG1faW1wbC0+bGVuZ3RoKCkgLSAxKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotVmVjdG9yPFVDaGFyPiBTdHJpbmc6OmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkg
Y29uc3QKLXsKLSAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKCkgKyAxKTsKLQot
ICAgICAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0
ZXJzOCA9IG1faW1wbC0+Y2hhcmFjdGVyczgoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkKLSAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKGNoYXJhY3RlcnM4W2ldKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYgPSBtX2ltcGwtPmNoYXJhY3RlcnMxNigpOwotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChjaGFyYWN0ZXJzMTYsIG1faW1wbC0+bGVuZ3RoKCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZCgwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1TdHJpbmcgU3RyaW5nOjpmb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0LCAu
Li4pCi17Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0K
LSAgICAvLyBEbyB0aGUgZm9ybWF0IG9uY2UgdG8gZ2V0IHRoZSBsZW5ndGguCi0jaWYgQ09NUElM
RVIoTVNWQykKLSAgICBpbnQgcmVzdWx0ID0gX3ZzY3ByaW50Zihmb3JtYXQsIGFyZ3MpOwotI2Vs
c2UKLSAgICBjaGFyIGNoOwotICAgIGludCByZXN1bHQgPSB2c25wcmludGYoJmNoLCAxLCBmb3Jt
YXQsIGFyZ3MpOwotI2VuZGlmCi0gICAgdmFfZW5kKGFyZ3MpOwotCi0gICAgaWYgKHJlc3VsdCA9
PSAwKQotICAgICAgICByZXR1cm4gU3RyaW5nKCIiKTsKLSAgICBpZiAocmVzdWx0IDwgMCkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgVmVjdG9yPGNoYXIsIDI1Nj4gYnVmZmVyOwot
ICAgIHVuc2lnbmVkIGxlbiA9IHJlc3VsdDsKLSAgICBidWZmZXIuZ3JvdyhsZW4gKyAxKTsKLSAg
ICAKLSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIC8vIE5vdyBkbyB0aGUgZm9ybWF0
dGluZyBhZ2FpbiwgZ3VhcmFudGVlZCB0byBmaXQuCi0gICAgdnNucHJpbnRmKGJ1ZmZlci5kYXRh
KCksIGJ1ZmZlci5zaXplKCksIGZvcm1hdCwgYXJncyk7Ci0KLSAgICB2YV9lbmQoYXJncyk7Ci0g
ICAgCi0gICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oYnVmZmVyLmRhdGEoKSksIGxlbik7Ci19Ci0KLVN0cmluZyBTdHJpbmc6Om51bWJl
cihpbnQgbnVtYmVyKQotewotICAgIHJldHVybiBudW1iZXJUb1N0cmluZ1NpZ25lZDxTdHJpbmc+
KG51bWJlcik7Ci19Ci0KLVN0cmluZyBTdHJpbmc6Om51bWJlcih1bnNpZ25lZCBpbnQgbnVtYmVy
KQotewotICAgIHJldHVybiBudW1iZXJUb1N0cmluZ1Vuc2lnbmVkPFN0cmluZz4obnVtYmVyKTsK
LX0KLQotU3RyaW5nIFN0cmluZzo6bnVtYmVyKGxvbmcgbnVtYmVyKQotewotICAgIHJldHVybiBu
dW1iZXJUb1N0cmluZ1NpZ25lZDxTdHJpbmc+KG51bWJlcik7Ci19Ci0KLVN0cmluZyBTdHJpbmc6
Om51bWJlcih1bnNpZ25lZCBsb25nIG51bWJlcikKLXsKLSAgICByZXR1cm4gbnVtYmVyVG9TdHJp
bmdVbnNpZ25lZDxTdHJpbmc+KG51bWJlcik7Ci19Ci0KLVN0cmluZyBTdHJpbmc6Om51bWJlcihs
b25nIGxvbmcgbnVtYmVyKQotewotICAgIHJldHVybiBudW1iZXJUb1N0cmluZ1NpZ25lZDxTdHJp
bmc+KG51bWJlcik7Ci19Ci0KLVN0cmluZyBTdHJpbmc6Om51bWJlcih1bnNpZ25lZCBsb25nIGxv
bmcgbnVtYmVyKQotewotICAgIHJldHVybiBudW1iZXJUb1N0cmluZ1Vuc2lnbmVkPFN0cmluZz4o
bnVtYmVyKTsKLX0KLQotU3RyaW5nIFN0cmluZzo6bnVtYmVyKGRvdWJsZSBudW1iZXIsIHVuc2ln
bmVkIHByZWNpc2lvbiwgVHJhaWxpbmdaZXJvc1RydW5jYXRpbmdQb2xpY3kgdHJhaWxpbmdaZXJv
c1RydW5jYXRpbmdQb2xpY3kpCi17Ci0gICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwot
ICAgIHJldHVybiBTdHJpbmcobnVtYmVyVG9GaXhlZFByZWNpc2lvblN0cmluZyhudW1iZXIsIHBy
ZWNpc2lvbiwgYnVmZmVyLCB0cmFpbGluZ1plcm9zVHJ1bmNhdGluZ1BvbGljeSA9PSBUcnVuY2F0
ZVRyYWlsaW5nWmVyb3MpKTsKLX0KLQotU3RyaW5nIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01B
U2NyaXB0KGRvdWJsZSBudW1iZXIpCi17Ci0gICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVy
OwotICAgIHJldHVybiBTdHJpbmcobnVtYmVyVG9TdHJpbmcobnVtYmVyLCBidWZmZXIpKTsKLX0K
LQotU3RyaW5nIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFdpZHRoKGRvdWJsZSBudW1iZXIs
IHVuc2lnbmVkIGRlY2ltYWxQbGFjZXMpCi17Ci0gICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVm
ZmVyOwotICAgIHJldHVybiBTdHJpbmcobnVtYmVyVG9GaXhlZFdpZHRoU3RyaW5nKG51bWJlciwg
ZGVjaW1hbFBsYWNlcywgYnVmZmVyKSk7Ci19Ci0KLWludCBTdHJpbmc6OnRvSW50U3RyaWN0KGJv
b2wqIG9rLCBpbnQgYmFzZSkgY29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCkgewotICAgICAgICBp
ZiAob2spCi0gICAgICAgICAgICAqb2sgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIHJldHVybiBtX2ltcGwtPnRvSW50U3RyaWN0KG9rLCBiYXNlKTsKLX0KLQotdW5zaWdu
ZWQgU3RyaW5nOjp0b1VJbnRTdHJpY3QoYm9vbCogb2ssIGludCBiYXNlKSBjb25zdAotewotICAg
IGlmICghbV9pbXBsKSB7Ci0gICAgICAgIGlmIChvaykKLSAgICAgICAgICAgICpvayA9IGZhbHNl
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIG1faW1wbC0+dG9VSW50U3Ry
aWN0KG9rLCBiYXNlKTsKLX0KLQotaW50NjRfdCBTdHJpbmc6OnRvSW50NjRTdHJpY3QoYm9vbCog
b2ssIGludCBiYXNlKSBjb25zdAotewotICAgIGlmICghbV9pbXBsKSB7Ci0gICAgICAgIGlmIChv
aykKLSAgICAgICAgICAgICpvayA9IGZhbHNlOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgcmV0dXJuIG1faW1wbC0+dG9JbnQ2NFN0cmljdChvaywgYmFzZSk7Ci19Ci0KLXVpbnQ2NF90
IFN0cmluZzo6dG9VSW50NjRTdHJpY3QoYm9vbCogb2ssIGludCBiYXNlKSBjb25zdAotewotICAg
IGlmICghbV9pbXBsKSB7Ci0gICAgICAgIGlmIChvaykKLSAgICAgICAgICAgICpvayA9IGZhbHNl
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIG1faW1wbC0+dG9VSW50NjRT
dHJpY3Qob2ssIGJhc2UpOwotfQotCi1pbnRwdHJfdCBTdHJpbmc6OnRvSW50UHRyU3RyaWN0KGJv
b2wqIG9rLCBpbnQgYmFzZSkgY29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCkgewotICAgICAgICBp
ZiAob2spCi0gICAgICAgICAgICAqb2sgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIHJldHVybiBtX2ltcGwtPnRvSW50UHRyU3RyaWN0KG9rLCBiYXNlKTsKLX0KLQotaW50
IFN0cmluZzo6dG9JbnQoYm9vbCogb2spIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltcGwpIHsKLSAg
ICAgICAgaWYgKG9rKQotICAgICAgICAgICAgKm9rID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICByZXR1cm4gbV9pbXBsLT50b0ludChvayk7Ci19Ci0KLXVuc2lnbmVkIFN0
cmluZzo6dG9VSW50KGJvb2wqIG9rKSBjb25zdAotewotICAgIGlmICghbV9pbXBsKSB7Ci0gICAg
ICAgIGlmIChvaykKLSAgICAgICAgICAgICpvayA9IGZhbHNlOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0gICAgcmV0dXJuIG1faW1wbC0+dG9VSW50KG9rKTsKLX0KLQotaW50NjRfdCBTdHJp
bmc6OnRvSW50NjQoYm9vbCogb2spIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltcGwpIHsKLSAgICAg
ICAgaWYgKG9rKQotICAgICAgICAgICAgKm9rID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLSAgICByZXR1cm4gbV9pbXBsLT50b0ludDY0KG9rKTsKLX0KLQotdWludDY0X3QgU3Ry
aW5nOjp0b1VJbnQ2NChib29sKiBvaykgY29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCkgewotICAg
ICAgICBpZiAob2spCi0gICAgICAgICAgICAqb2sgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIHJldHVybiBtX2ltcGwtPnRvVUludDY0KG9rKTsKLX0KLQotaW50cHRyX3Qg
U3RyaW5nOjp0b0ludFB0cihib29sKiBvaykgY29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCkgewot
ICAgICAgICBpZiAob2spCi0gICAgICAgICAgICAqb2sgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIHJldHVybiBtX2ltcGwtPnRvSW50UHRyKG9rKTsKLX0KLQotZG91Ymxl
IFN0cmluZzo6dG9Eb3VibGUoYm9vbCogb2spIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ltcGwpIHsK
LSAgICAgICAgaWYgKG9rKQotICAgICAgICAgICAgKm9rID0gZmFsc2U7Ci0gICAgICAgIHJldHVy
biAwLjA7Ci0gICAgfQotICAgIHJldHVybiBtX2ltcGwtPnRvRG91YmxlKG9rKTsKLX0KLQotZmxv
YXQgU3RyaW5nOjp0b0Zsb2F0KGJvb2wqIG9rKSBjb25zdAotewotICAgIGlmICghbV9pbXBsKSB7
Ci0gICAgICAgIGlmIChvaykKLSAgICAgICAgICAgICpvayA9IGZhbHNlOwotICAgICAgICByZXR1
cm4gMC4wZjsKLSAgICB9Ci0gICAgcmV0dXJuIG1faW1wbC0+dG9GbG9hdChvayk7Ci19Ci0KLSNp
ZiBDT01QSUxFUl9TVVBQT1JUUyhDWFhfUkVGRVJFTkNFX1FVQUxJRklFRF9GVU5DVElPTlMpCi1T
dHJpbmcgU3RyaW5nOjppc29sYXRlZENvcHkoKSBjb25zdCAmCi17Ci0gICAgaWYgKCFtX2ltcGwp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9pbXBsLT5pc29sYXRlZENv
cHkoKTsKLX0KLQotU3RyaW5nIFN0cmluZzo6aXNvbGF0ZWRDb3B5KCkgJiYKLXsKLSAgICBpZiAo
aXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpIHsKLSAgICAgICAgLy8gU2luY2Ugd2Uga25v
dyB0aGF0IG91ciBzdHJpbmcgaXMgYSB0ZW1wb3JhcnkgdGhhdCB3aWxsIGJlIGRlc3Ryb3llZAot
ICAgICAgICAvLyB3ZSBjYW4ganVzdCBzdGVhbCB0aGUgbV9pbXBsIGZyb20gaXQsIHRodXMgYXZv
aWRpbmcgYSBjb3B5LgotICAgICAgICByZXR1cm4gU3RyaW5nKFdURk1vdmUoKnRoaXMpKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
cmV0dXJuIG1faW1wbC0+aXNvbGF0ZWRDb3B5KCk7Ci19Ci0jZWxzZQotU3RyaW5nIFN0cmluZzo6
aXNvbGF0ZWRDb3B5KCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIHJldHVybiBtX2ltcGwtPmlzb2xhdGVkQ29weSgpOwotfQotI2VuZGlm
Ci0KLWJvb2wgU3RyaW5nOjppc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSBjb25zdAotewot
ICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBBdG9taWNTdHJpbmdzIGFyZSBub3Qgc2Fm
ZSB0byBzZW5kIGJldHdlZW4gdGhyZWFkcyBhcyB+U3RyaW5nSW1wbCgpCi0gICAgLy8gd2lsbCB0
cnkgdG8gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgd3JvbmcgQXRvbWljU3RyaW5nVGFibGUuCi0gICAg
aWYgKGltcGwoKS0+aXNBdG9taWMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChp
bXBsKCktPmhhc09uZVJlZigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgU3RyaW5nOjpzcGxpdChjb25zdCBTdHJpbmcmIHNlcGFyYXRvciwgYm9v
bCBhbGxvd0VtcHR5RW50cmllcywgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKLXsKLSAg
ICByZXN1bHQuY2xlYXIoKTsKLQotICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKLSAgICBzaXpl
X3QgZW5kUG9zOwotICAgIHdoaWxlICgoZW5kUG9zID0gZmluZChzZXBhcmF0b3IsIHN0YXJ0UG9z
KSkgIT0gbm90Rm91bmQpIHsKLSAgICAgICAgaWYgKGFsbG93RW1wdHlFbnRyaWVzIHx8IHN0YXJ0
UG9zICE9IGVuZFBvcykKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3Vic3RyaW5nKHN0YXJ0
UG9zLCBlbmRQb3MgLSBzdGFydFBvcykpOwotICAgICAgICBzdGFydFBvcyA9IGVuZFBvcyArIHNl
cGFyYXRvci5sZW5ndGgoKTsKLSAgICB9Ci0gICAgaWYgKGFsbG93RW1wdHlFbnRyaWVzIHx8IHN0
YXJ0UG9zICE9IGxlbmd0aCgpKQotICAgICAgICByZXN1bHQuYXBwZW5kKHN1YnN0cmluZyhzdGFy
dFBvcykpOwotfQotCi12b2lkIFN0cmluZzo6c3BsaXQoVUNoYXIgc2VwYXJhdG9yLCBib29sIGFs
bG93RW1wdHlFbnRyaWVzLCBjb25zdCBTcGxpdEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0Ci17Ci0g
ICAgU3RyaW5nVmlldyB2aWV3KCp0aGlzKTsKLQotICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsK
LSAgICBzaXplX3QgZW5kUG9zOwotICAgIHdoaWxlICgoZW5kUG9zID0gZmluZChzZXBhcmF0b3Is
IHN0YXJ0UG9zKSkgIT0gbm90Rm91bmQpIHsKLSAgICAgICAgaWYgKGFsbG93RW1wdHlFbnRyaWVz
IHx8IHN0YXJ0UG9zICE9IGVuZFBvcykKLSAgICAgICAgICAgIGZ1bmN0b3Iodmlldy5zdWJzdHJp
bmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKSk7Ci0gICAgICAgIHN0YXJ0UG9zID0gZW5k
UG9zICsgMTsKLSAgICB9Ci0gICAgaWYgKGFsbG93RW1wdHlFbnRyaWVzIHx8IHN0YXJ0UG9zICE9
IGxlbmd0aCgpKQotICAgICAgICBmdW5jdG9yKHZpZXcuc3Vic3RyaW5nKHN0YXJ0UG9zKSk7Ci19
Ci0KLXZvaWQgU3RyaW5nOjpzcGxpdChVQ2hhciBzZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVu
dHJpZXMsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgcmVzdWx0LmNsZWFy
KCk7Ci0gICAgc3BsaXQoc2VwYXJhdG9yLCBhbGxvd0VtcHR5RW50cmllcywgWyZyZXN1bHRdKFN0
cmluZ1ZpZXcgaXRlbSkgewotICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udG9TdHJpbmcoKSk7
Ci0gICAgfSk7Ci19Ci0KLUNTdHJpbmcgU3RyaW5nOjphc2NpaSgpIGNvbnN0Ci17Ci0gICAgLy8g
UHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMgMzIuLjEyNyBhbmQgdGhlIG51bGwgY2hhcmFjdGVy
IGFyZQotICAgIC8vIHByZXNlcnZlZCwgY2hhcmFjdGVycyBvdXRzaWRlIG9mIHRoaXMgcmFuZ2Ug
YXJlIGNvbnZlcnRlZCB0byAnPycuCi0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5n
dGgoKTsKLSAgICBpZiAoIWxlbmd0aCkgeyAKLSAgICAgICAgY2hhciogY2hhcmFjdGVyQnVmZmVy
OwotICAgICAgICByZXR1cm4gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGNoYXJh
Y3RlckJ1ZmZlcik7Ci0gICAgfQotCi0gICAgaWYgKHRoaXMtPmlzOEJpdCgpKSB7Ci0gICAgICAg
IGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzID0gdGhpcy0+Y2hhcmFjdGVyczgoKTsKLQotICAgICAg
ICBjaGFyKiBjaGFyYWN0ZXJCdWZmZXI7Ci0gICAgICAgIENTdHJpbmcgcmVzdWx0ID0gQ1N0cmlu
Zzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGNoYXJhY3RlckJ1ZmZlcik7Ci0KLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBMQ2hh
ciBjaCA9IGNoYXJhY3RlcnNbaV07Ci0gICAgICAgICAgICBjaGFyYWN0ZXJCdWZmZXJbaV0gPSBj
aCAmJiAoY2ggPCAweDIwIHx8IGNoID4gMHg3ZikgPyAnPycgOiBjaDsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiByZXN1bHQ7ICAgICAgICAKLSAgICB9Ci0KLSAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycyA9IHRoaXMtPmNoYXJhY3RlcnMxNigpOwotCi0gICAgY2hhciogY2hhcmFjdGVy
QnVmZmVyOwotICAgIENTdHJpbmcgcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChs
ZW5ndGgsIGNoYXJhY3RlckJ1ZmZlcik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgY2ggPSBjaGFyYWN0ZXJzW2ldOwotICAgICAg
ICBjaGFyYWN0ZXJCdWZmZXJbaV0gPSBjaCAmJiAoY2ggPCAweDIwIHx8IGNoID4gMHg3ZikgPyAn
PycgOiBjaDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1DU3RyaW5nIFN0cmlu
Zzo6bGF0aW4xKCkgY29uc3QKLXsKLSAgICAvLyBCYXNpYyBMYXRpbjEgKElTTykgZW5jb2Rpbmcg
LSBVbmljb2RlIGNoYXJhY3RlcnMgMC4uMjU1IGFyZQotICAgIC8vIHByZXNlcnZlZCwgY2hhcmFj
dGVycyBvdXRzaWRlIG9mIHRoaXMgcmFuZ2UgYXJlIGNvbnZlcnRlZCB0byAnPycuCi0KLSAgICB1
bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKLQotICAgIGlmICghbGVuZ3RoKQotICAg
ICAgICByZXR1cm4gQ1N0cmluZygiIiwgMCk7Ci0KLSAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAg
IHJldHVybiBDU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHRoaXMtPmNoYXJh
Y3RlcnM4KCkpLCBsZW5ndGgpOwotCi0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0aGlz
LT5jaGFyYWN0ZXJzMTYoKTsKLQotICAgIGNoYXIqIGNoYXJhY3RlckJ1ZmZlcjsKLSAgICBDU3Ry
aW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBjaGFyYWN0ZXJC
dWZmZXIpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIFVDaGFyIGNoID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgY2hhcmFjdGVyQnVmZmVy
W2ldID0gY2ggPiAweGZmID8gJz8nIDogY2g7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotQ1N0cmluZyBTdHJpbmc6OnV0ZjgoQ29udmVyc2lvbk1vZGUgbW9kZSkgY29uc3QKLXsK
LSAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgcmV0dXJuIENTdHJpbmcoIiIsIDApOwotICAgIAot
ICAgIHJldHVybiBtX2ltcGwtPnV0ZjgobW9kZSk7Ci19Ci0KLUNTdHJpbmcgU3RyaW5nOjp1dGY4
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdXRmOChMZW5pZW50Q29udmVyc2lvbik7Ci19Ci0KLVN0
cmluZyBTdHJpbmc6Om1ha2U4Qml0RnJvbTE2Qml0U291cmNlKGNvbnN0IFVDaGFyKiBzb3VyY2Us
IHNpemVfdCBsZW5ndGgpCi17Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLQotICAgIExDaGFyKiBkZXN0aW5hdGlvbjsKLSAgICBTdHJpbmcgcmVzdWx0ID0gU3Ry
aW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGVzdGluYXRpb24pOwotCi0gICAgY29w
eUxDaGFyc0Zyb21VQ2hhclNvdXJjZShkZXN0aW5hdGlvbiwgc291cmNlLCBsZW5ndGgpOwotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RyaW5nIFN0cmluZzo6bWFrZTE2Qml0RnJvbThCaXRT
b3VyY2UoY29uc3QgTENoYXIqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBpZiAoIWxl
bmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIAotICAgIFVDaGFyKiBkZXN0aW5h
dGlvbjsKLSAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxl
bmd0aCwgZGVzdGluYXRpb24pOwotICAgIAotICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhkZXN0
aW5hdGlvbiwgc291cmNlLCBsZW5ndGgpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LVN0cmluZyBTdHJpbmc6OmZyb21VVEY4KGNvbnN0IExDaGFyKiBzdHJpbmdTdGFydCwgc2l6ZV90
IGxlbmd0aCkKLXsKLSAgICBpZiAobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKQotICAgICAgICBDUkFTSCgpOwotCi0gICAgaWYgKCFzdHJpbmdTdGFydCkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwotCi0gICAgaWYgKGNoYXJhY3RlcnNBcmVBbGxBU0NJSShzdHJpbmdT
dGFydCwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShzdHJpbmdT
dGFydCwgbGVuZ3RoKTsKLQotICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gYnVmZmVyKGxlbmd0aCk7
Ci0gICAgVUNoYXIqIGJ1ZmZlclN0YXJ0ID0gYnVmZmVyLmRhdGEoKTsKLSAKLSAgICBVQ2hhciog
YnVmZmVyQ3VycmVudCA9IGJ1ZmZlclN0YXJ0OwotICAgIGNvbnN0IGNoYXIqIHN0cmluZ0N1cnJl
bnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmdTdGFydCk7Ci0gICAgaWYg
KGNvbnZlcnRVVEY4VG9VVEYxNigmc3RyaW5nQ3VycmVudCwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyICo+KHN0cmluZ1N0YXJ0ICsgbGVuZ3RoKSwgJmJ1ZmZlckN1cnJlbnQsIGJ1ZmZlckN1
cnJlbnQgKyBidWZmZXIuc2l6ZSgpKSAhPSBjb252ZXJzaW9uT0spCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQotICAgIHVuc2lnbmVkIHV0ZjE2TGVuZ3RoID0gYnVmZmVyQ3VycmVudCAtIGJ1
ZmZlclN0YXJ0OwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHV0ZjE2TGVu
Z3RoIDwgbGVuZ3RoKTsKLSAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlKGJ1ZmZlclN0YXJ0
LCB1dGYxNkxlbmd0aCk7Ci19Ci0KLVN0cmluZyBTdHJpbmc6OmZyb21VVEY4KGNvbnN0IExDaGFy
KiBzdHJpbmcpCi17Ci0gICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICByZXR1cm4gZnJvbVVURjgoc3RyaW5nLCBzdHJsZW4ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oc3RyaW5nKSkpOwotfQotCi1TdHJpbmcgU3RyaW5nOjpmcm9tVVRGOChjb25zdCBD
U3RyaW5nJiBzKQotewotICAgIHJldHVybiBmcm9tVVRGOChzLmRhdGEoKSk7Ci19Ci0KLVN0cmlu
ZyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGNvbnN0IExDaGFyKiBzdHJpbmcs
IHNpemVfdCBzaXplKQotewotICAgIFN0cmluZyB1dGY4ID0gZnJvbVVURjgoc3RyaW5nLCBzaXpl
KTsKLSAgICBpZiAoIXV0ZjgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoc3RyaW5nLCBzaXplKTsK
LSAgICByZXR1cm4gdXRmODsKLX0KLQotLy8gU3RyaW5nIE9wZXJhdGlvbnMKLQotc3RhdGljIGJv
b2wgaXNDaGFyYWN0ZXJBbGxvd2VkSW5CYXNlKFVDaGFyIGMsIGludCBiYXNlKQotewotICAgIGlm
IChjID4gMHg3RikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpc0FTQ0lJRGlnaXQo
YykpCi0gICAgICAgIHJldHVybiBjIC0gJzAnIDwgYmFzZTsKLSAgICBpZiAoaXNBU0NJSUFscGhh
KGMpKSB7Ci0gICAgICAgIGlmIChiYXNlID4gMzYpCi0gICAgICAgICAgICBiYXNlID0gMzY7Ci0g
ICAgICAgIHJldHVybiAoYyA+PSAnYScgJiYgYyA8ICdhJyArIGJhc2UgLSAxMCkKLSAgICAgICAg
ICAgIHx8IChjID49ICdBJyAmJiBjIDwgJ0EnICsgYmFzZSAtIDEwKTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW50ZWdyYWxUeXBlLCB0eXBlbmFt
ZSBDaGFyVHlwZT4KLXN0YXRpYyBpbmxpbmUgSW50ZWdyYWxUeXBlIHRvSW50ZWdyYWxUeXBlKGNv
bnN0IENoYXJUeXBlKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaywgaW50IGJhc2UpCi17
Ci0gICAgc3RhdGljIGNvbnN0IEludGVncmFsVHlwZSBpbnRlZ3JhbE1heCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8SW50ZWdyYWxUeXBlPjo6bWF4KCk7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNT
aWduZWQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPEludGVncmFsVHlwZT46OmlzX3NpZ25lZDsKLSAg
ICBjb25zdCBJbnRlZ3JhbFR5cGUgbWF4TXVsdGlwbGllciA9IGludGVncmFsTWF4IC8gYmFzZTsK
LQotICAgIEludGVncmFsVHlwZSB2YWx1ZSA9IDA7Ci0gICAgYm9vbCBpc09rID0gZmFsc2U7Ci0g
ICAgYm9vbCBpc05lZ2F0aXZlID0gZmFsc2U7Ci0KLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIGdv
dG8gYnllOwotCi0gICAgLy8gc2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UKLSAgICB3aGlsZSAobGVu
Z3RoICYmIGlzU3BhY2VPck5ld2xpbmUoKmRhdGEpKSB7Ci0gICAgICAgIC0tbGVuZ3RoOwotICAg
ICAgICArK2RhdGE7Ci0gICAgfQotCi0gICAgaWYgKGlzU2lnbmVkICYmIGxlbmd0aCAmJiAqZGF0
YSA9PSAnLScpIHsKLSAgICAgICAgLS1sZW5ndGg7Ci0gICAgICAgICsrZGF0YTsKLSAgICAgICAg
aXNOZWdhdGl2ZSA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChsZW5ndGggJiYgKmRhdGEgPT0gJysn
KSB7Ci0gICAgICAgIC0tbGVuZ3RoOwotICAgICAgICArK2RhdGE7Ci0gICAgfQotCi0gICAgaWYg
KCFsZW5ndGggfHwgIWlzQ2hhcmFjdGVyQWxsb3dlZEluQmFzZSgqZGF0YSwgYmFzZSkpCi0gICAg
ICAgIGdvdG8gYnllOwotCi0gICAgd2hpbGUgKGxlbmd0aCAmJiBpc0NoYXJhY3RlckFsbG93ZWRJ
bkJhc2UoKmRhdGEsIGJhc2UpKSB7Ci0gICAgICAgIC0tbGVuZ3RoOwotICAgICAgICBJbnRlZ3Jh
bFR5cGUgZGlnaXRWYWx1ZTsKLSAgICAgICAgQ2hhclR5cGUgYyA9ICpkYXRhOwotICAgICAgICBp
ZiAoaXNBU0NJSURpZ2l0KGMpKQotICAgICAgICAgICAgZGlnaXRWYWx1ZSA9IGMgLSAnMCc7Ci0g
ICAgICAgIGVsc2UgaWYgKGMgPj0gJ2EnKQotICAgICAgICAgICAgZGlnaXRWYWx1ZSA9IGMgLSAn
YScgKyAxMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGlnaXRWYWx1ZSA9IGMgLSAnQScg
KyAxMDsKLQotICAgICAgICBpZiAodmFsdWUgPiBtYXhNdWx0aXBsaWVyIHx8ICh2YWx1ZSA9PSBt
YXhNdWx0aXBsaWVyICYmIGRpZ2l0VmFsdWUgPiAoaW50ZWdyYWxNYXggJSBiYXNlKSArIGlzTmVn
YXRpdmUpKQotICAgICAgICAgICAgZ290byBieWU7Ci0KLSAgICAgICAgdmFsdWUgPSBiYXNlICog
dmFsdWUgKyBkaWdpdFZhbHVlOwotICAgICAgICArK2RhdGE7Ci0gICAgfQotCi0jaWYgQ09NUElM
RVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwdXNoLCAwKQotI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDE0NikKLSNlbmRpZgotCi0gICAgaWYgKGlzTmVnYXRpdmUpCi0gICAgICAgIHZhbHVlID0g
LXZhbHVlOwotCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3ApCi0jZW5k
aWYKLQotICAgIC8vIHNraXAgdHJhaWxpbmcgc3BhY2UKLSAgICB3aGlsZSAobGVuZ3RoICYmIGlz
U3BhY2VPck5ld2xpbmUoKmRhdGEpKSB7Ci0gICAgICAgIC0tbGVuZ3RoOwotICAgICAgICArK2Rh
dGE7Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIGlzT2sgPSB0cnVlOwotYnll
OgotICAgIGlmIChvaykKLSAgICAgICAgKm9rID0gaXNPazsKLSAgICByZXR1cm4gaXNPayA/IHZh
bHVlIDogMDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgotc3RhdGljIHVuc2ln
bmVkIGxlbmd0aE9mQ2hhcmFjdGVyc0FzSW50ZWdlcihjb25zdCBDaGFyVHlwZSogZGF0YSwgc2l6
ZV90IGxlbmd0aCkKLXsKLSAgICBzaXplX3QgaSA9IDA7Ci0KLSAgICAvLyBBbGxvdyBsZWFkaW5n
IHNwYWNlcy4KLSAgICBmb3IgKDsgaSAhPSBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoIWlz
U3BhY2VPck5ld2xpbmUoZGF0YVtpXSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Ci0gICAgLy8gQWxsb3cgc2lnbi4KLSAgICBpZiAoaSAhPSBsZW5ndGggJiYgKGRhdGFbaV0gPT0g
JysnIHx8IGRhdGFbaV0gPT0gJy0nKSkKLSAgICAgICAgKytpOwotICAgIAotICAgIC8vIEFsbG93
IGRpZ2l0cy4KLSAgICBmb3IgKDsgaSAhPSBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoIWlz
QVNDSUlEaWdpdChkYXRhW2ldKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJl
dHVybiBpOwotfQotCi1pbnQgY2hhcmFjdGVyc1RvSW50U3RyaWN0KGNvbnN0IExDaGFyKiBkYXRh
LCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaywgaW50IGJhc2UpCi17Ci0gICAgcmV0dXJuIHRvSW50
ZWdyYWxUeXBlPGludCwgTENoYXI+KGRhdGEsIGxlbmd0aCwgb2ssIGJhc2UpOwotfQotCi1pbnQg
Y2hhcmFjdGVyc1RvSW50U3RyaWN0KGNvbnN0IFVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBi
b29sKiBvaywgaW50IGJhc2UpCi17Ci0gICAgcmV0dXJuIHRvSW50ZWdyYWxUeXBlPGludCwgVUNo
YXI+KGRhdGEsIGxlbmd0aCwgb2ssIGJhc2UpOwotfQotCi11bnNpZ25lZCBjaGFyYWN0ZXJzVG9V
SW50U3RyaWN0KGNvbnN0IExDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaywgaW50
IGJhc2UpCi17Ci0gICAgcmV0dXJuIHRvSW50ZWdyYWxUeXBlPHVuc2lnbmVkLCBMQ2hhcj4oZGF0
YSwgbGVuZ3RoLCBvaywgYmFzZSk7Ci19Ci0KLXVuc2lnbmVkIGNoYXJhY3RlcnNUb1VJbnRTdHJp
Y3QoY29uc3QgVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgsIGJvb2wqIG9rLCBpbnQgYmFzZSkK
LXsKLSAgICByZXR1cm4gdG9JbnRlZ3JhbFR5cGU8dW5zaWduZWQsIFVDaGFyPihkYXRhLCBsZW5n
dGgsIG9rLCBiYXNlKTsKLX0KLQotaW50NjRfdCBjaGFyYWN0ZXJzVG9JbnQ2NFN0cmljdChjb25z
dCBMQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2ssIGludCBiYXNlKQotewotICAg
IHJldHVybiB0b0ludGVncmFsVHlwZTxpbnQ2NF90LCBMQ2hhcj4oZGF0YSwgbGVuZ3RoLCBvaywg
YmFzZSk7Ci19Ci0KLWludDY0X3QgY2hhcmFjdGVyc1RvSW50NjRTdHJpY3QoY29uc3QgVUNoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgsIGJvb2wqIG9rLCBpbnQgYmFzZSkKLXsKLSAgICByZXR1cm4g
dG9JbnRlZ3JhbFR5cGU8aW50NjRfdCwgVUNoYXI+KGRhdGEsIGxlbmd0aCwgb2ssIGJhc2UpOwot
fQotCi11aW50NjRfdCBjaGFyYWN0ZXJzVG9VSW50NjRTdHJpY3QoY29uc3QgTENoYXIqIGRhdGEs
IHNpemVfdCBsZW5ndGgsIGJvb2wqIG9rLCBpbnQgYmFzZSkKLXsKLSAgICByZXR1cm4gdG9JbnRl
Z3JhbFR5cGU8dWludDY0X3QsIExDaGFyPihkYXRhLCBsZW5ndGgsIG9rLCBiYXNlKTsKLX0KLQot
dWludDY0X3QgY2hhcmFjdGVyc1RvVUludDY0U3RyaWN0KGNvbnN0IFVDaGFyKiBkYXRhLCBzaXpl
X3QgbGVuZ3RoLCBib29sKiBvaywgaW50IGJhc2UpCi17Ci0gICAgcmV0dXJuIHRvSW50ZWdyYWxU
eXBlPHVpbnQ2NF90LCBVQ2hhcj4oZGF0YSwgbGVuZ3RoLCBvaywgYmFzZSk7Ci19Ci0KLWludHB0
cl90IGNoYXJhY3RlcnNUb0ludFB0clN0cmljdChjb25zdCBMQ2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCwgYm9vbCogb2ssIGludCBiYXNlKQotewotICAgIHJldHVybiB0b0ludGVncmFsVHlwZTxp
bnRwdHJfdCwgTENoYXI+KGRhdGEsIGxlbmd0aCwgb2ssIGJhc2UpOwotfQotCi1pbnRwdHJfdCBj
aGFyYWN0ZXJzVG9JbnRQdHJTdHJpY3QoY29uc3QgVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgs
IGJvb2wqIG9rLCBpbnQgYmFzZSkKLXsKLSAgICByZXR1cm4gdG9JbnRlZ3JhbFR5cGU8aW50cHRy
X3QsIFVDaGFyPihkYXRhLCBsZW5ndGgsIG9rLCBiYXNlKTsKLX0KLQotaW50IGNoYXJhY3RlcnNU
b0ludChjb25zdCBMQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2spCi17Ci0gICAg
cmV0dXJuIHRvSW50ZWdyYWxUeXBlPGludCwgTENoYXI+KGRhdGEsIGxlbmd0aE9mQ2hhcmFjdGVy
c0FzSW50ZWdlcjxMQ2hhcj4oZGF0YSwgbGVuZ3RoKSwgb2ssIDEwKTsKLX0KLQotaW50IGNoYXJh
Y3RlcnNUb0ludChjb25zdCBVQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2spCi17
Ci0gICAgcmV0dXJuIHRvSW50ZWdyYWxUeXBlPGludCwgVUNoYXI+KGRhdGEsIGxlbmd0aE9mQ2hh
cmFjdGVyc0FzSW50ZWdlcihkYXRhLCBsZW5ndGgpLCBvaywgMTApOwotfQotCi11bnNpZ25lZCBj
aGFyYWN0ZXJzVG9VSW50KGNvbnN0IExDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBv
aykKLXsKLSAgICByZXR1cm4gdG9JbnRlZ3JhbFR5cGU8dW5zaWduZWQsIExDaGFyPihkYXRhLCBs
ZW5ndGhPZkNoYXJhY3RlcnNBc0ludGVnZXI8TENoYXI+KGRhdGEsIGxlbmd0aCksIG9rLCAxMCk7
Ci19Ci0KLXVuc2lnbmVkIGNoYXJhY3RlcnNUb1VJbnQoY29uc3QgVUNoYXIqIGRhdGEsIHNpemVf
dCBsZW5ndGgsIGJvb2wqIG9rKQotewotICAgIHJldHVybiB0b0ludGVncmFsVHlwZTx1bnNpZ25l
ZCwgVUNoYXI+KGRhdGEsIGxlbmd0aE9mQ2hhcmFjdGVyc0FzSW50ZWdlcjxVQ2hhcj4oZGF0YSwg
bGVuZ3RoKSwgb2ssIDEwKTsKLX0KLQotaW50NjRfdCBjaGFyYWN0ZXJzVG9JbnQ2NChjb25zdCBM
Q2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2spCi17Ci0gICAgcmV0dXJuIHRvSW50
ZWdyYWxUeXBlPGludDY0X3QsIExDaGFyPihkYXRhLCBsZW5ndGhPZkNoYXJhY3RlcnNBc0ludGVn
ZXI8TENoYXI+KGRhdGEsIGxlbmd0aCksIG9rLCAxMCk7Ci19Ci0KLWludDY0X3QgY2hhcmFjdGVy
c1RvSW50NjQoY29uc3QgVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgsIGJvb2wqIG9rKQotewot
ICAgIHJldHVybiB0b0ludGVncmFsVHlwZTxpbnQ2NF90LCBVQ2hhcj4oZGF0YSwgbGVuZ3RoT2ZD
aGFyYWN0ZXJzQXNJbnRlZ2VyPFVDaGFyPihkYXRhLCBsZW5ndGgpLCBvaywgMTApOwotfQotCi11
aW50NjRfdCBjaGFyYWN0ZXJzVG9VSW50NjQoY29uc3QgTENoYXIqIGRhdGEsIHNpemVfdCBsZW5n
dGgsIGJvb2wqIG9rKQotewotICAgIHJldHVybiB0b0ludGVncmFsVHlwZTx1aW50NjRfdCwgTENo
YXI+KGRhdGEsIGxlbmd0aE9mQ2hhcmFjdGVyc0FzSW50ZWdlcjxMQ2hhcj4oZGF0YSwgbGVuZ3Ro
KSwgb2ssIDEwKTsKLX0KLQotdWludDY0X3QgY2hhcmFjdGVyc1RvVUludDY0KGNvbnN0IFVDaGFy
KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaykKLXsKLSAgICByZXR1cm4gdG9JbnRlZ3Jh
bFR5cGU8dWludDY0X3QsIFVDaGFyPihkYXRhLCBsZW5ndGhPZkNoYXJhY3RlcnNBc0ludGVnZXI8
VUNoYXI+KGRhdGEsIGxlbmd0aCksIG9rLCAxMCk7Ci19Ci0KLWludHB0cl90IGNoYXJhY3RlcnNU
b0ludFB0cihjb25zdCBMQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2spCi17Ci0g
ICAgcmV0dXJuIHRvSW50ZWdyYWxUeXBlPGludHB0cl90LCBMQ2hhcj4oZGF0YSwgbGVuZ3RoT2ZD
aGFyYWN0ZXJzQXNJbnRlZ2VyPExDaGFyPihkYXRhLCBsZW5ndGgpLCBvaywgMTApOwotfQotCi1p
bnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHIoY29uc3QgVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5n
dGgsIGJvb2wqIG9rKQotewotICAgIHJldHVybiB0b0ludGVncmFsVHlwZTxpbnRwdHJfdCwgVUNo
YXI+KGRhdGEsIGxlbmd0aE9mQ2hhcmFjdGVyc0FzSW50ZWdlcjxVQ2hhcj4oZGF0YSwgbGVuZ3Ro
KSwgb2ssIDEwKTsKLX0KLQotZW51bSBUcmFpbGluZ0p1bmtQb2xpY3kgeyBEaXNhbGxvd1RyYWls
aW5nSnVuaywgQWxsb3dUcmFpbGluZ0p1bmsgfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJU
eXBlLCBUcmFpbGluZ0p1bmtQb2xpY3kgcG9saWN5Pgotc3RhdGljIGlubGluZSBkb3VibGUgdG9E
b3VibGVUeXBlKGNvbnN0IENoYXJUeXBlKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaywg
c2l6ZV90JiBwYXJzZWRMZW5ndGgpCi17Ci0gICAgc2l6ZV90IGxlYWRpbmdTcGFjZXNMZW5ndGgg
PSAwOwotICAgIHdoaWxlIChsZWFkaW5nU3BhY2VzTGVuZ3RoIDwgbGVuZ3RoICYmIGlzQVNDSUlT
cGFjZShkYXRhW2xlYWRpbmdTcGFjZXNMZW5ndGhdKSkKLSAgICAgICAgKytsZWFkaW5nU3BhY2Vz
TGVuZ3RoOwotCi0gICAgZG91YmxlIG51bWJlciA9IHBhcnNlRG91YmxlKGRhdGEgKyBsZWFkaW5n
U3BhY2VzTGVuZ3RoLCBsZW5ndGggLSBsZWFkaW5nU3BhY2VzTGVuZ3RoLCBwYXJzZWRMZW5ndGgp
OwotICAgIGlmICghcGFyc2VkTGVuZ3RoKSB7Ci0gICAgICAgIGlmIChvaykKLSAgICAgICAgICAg
ICpvayA9IGZhbHNlOwotICAgICAgICByZXR1cm4gMC4wOwotICAgIH0KLQotICAgIHBhcnNlZExl
bmd0aCArPSBsZWFkaW5nU3BhY2VzTGVuZ3RoOwotICAgIGlmIChvaykKLSAgICAgICAgKm9rID0g
cG9saWN5ID09IEFsbG93VHJhaWxpbmdKdW5rIHx8IHBhcnNlZExlbmd0aCA9PSBsZW5ndGg7Ci0g
ICAgcmV0dXJuIG51bWJlcjsKLX0KLQotZG91YmxlIGNoYXJhY3RlcnNUb0RvdWJsZShjb25zdCBM
Q2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2spCi17Ci0gICAgc2l6ZV90IHBhcnNl
ZExlbmd0aDsKLSAgICByZXR1cm4gdG9Eb3VibGVUeXBlPExDaGFyLCBEaXNhbGxvd1RyYWlsaW5n
SnVuaz4oZGF0YSwgbGVuZ3RoLCBvaywgcGFyc2VkTGVuZ3RoKTsKLX0KLQotZG91YmxlIGNoYXJh
Y3RlcnNUb0RvdWJsZShjb25zdCBVQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2sp
Ci17Ci0gICAgc2l6ZV90IHBhcnNlZExlbmd0aDsKLSAgICByZXR1cm4gdG9Eb3VibGVUeXBlPFVD
aGFyLCBEaXNhbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgbGVuZ3RoLCBvaywgcGFyc2VkTGVuZ3Ro
KTsKLX0KLQotZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgTENoYXIqIGRhdGEsIHNpemVf
dCBsZW5ndGgsIGJvb2wqIG9rKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgcmV0dXJuIG9r
IGV2ZW4gd2hlbiB0aGUgc3RyaW5nIGZpdHMgaW50byBhIGRvdWJsZSBidXQgbm90IGEgZmxvYXQu
Ci0gICAgc2l6ZV90IHBhcnNlZExlbmd0aDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHRvRG91YmxlVHlwZTxMQ2hhciwgRGlzYWxsb3dUcmFpbGluZ0p1bms+KGRhdGEsIGxlbmd0aCwg
b2ssIHBhcnNlZExlbmd0aCkpOwotfQotCi1mbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBV
Q2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2spCi17Ci0gICAgLy8gRklYTUU6IFRo
aXMgd2lsbCByZXR1cm4gb2sgZXZlbiB3aGVuIHRoZSBzdHJpbmcgZml0cyBpbnRvIGEgZG91Ymxl
IGJ1dCBub3QgYSBmbG9hdC4KLSAgICBzaXplX3QgcGFyc2VkTGVuZ3RoOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4odG9Eb3VibGVUeXBlPFVDaGFyLCBEaXNhbGxvd1RyYWlsaW5nSnVu
az4oZGF0YSwgbGVuZ3RoLCBvaywgcGFyc2VkTGVuZ3RoKSk7Ci19Ci0KLWZsb2F0IGNoYXJhY3Rl
cnNUb0Zsb2F0KGNvbnN0IExDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNl
ZExlbmd0aCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIHJldHVybiBvayBldmVuIHdoZW4g
dGhlIHN0cmluZyBmaXRzIGludG8gYSBkb3VibGUgYnV0IG5vdCBhIGZsb2F0LgotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4odG9Eb3VibGVUeXBlPExDaGFyLCBBbGxvd1RyYWlsaW5nSnVu
az4oZGF0YSwgbGVuZ3RoLCAwLCBwYXJzZWRMZW5ndGgpKTsKLX0KLQotZmxvYXQgY2hhcmFjdGVy
c1RvRmxvYXQoY29uc3QgVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgcGFyc2Vk
TGVuZ3RoKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgcmV0dXJuIG9rIGV2ZW4gd2hlbiB0
aGUgc3RyaW5nIGZpdHMgaW50byBhIGRvdWJsZSBidXQgbm90IGEgZmxvYXQuCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0Pih0b0RvdWJsZVR5cGU8VUNoYXIsIEFsbG93VHJhaWxpbmdKdW5r
PihkYXRhLCBsZW5ndGgsIDAsIHBhcnNlZExlbmd0aCkpOwotfQotCi1jb25zdCBTdHJpbmcmIGVt
cHR5U3RyaW5nKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBlbXB0eVN0
cmluZyhTdHJpbmdJbXBsOjplbXB0eSgpKTsKLQotICAgIHJldHVybiBlbXB0eVN0cmluZzsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNpZm5kZWYgTkRFQlVHCi0vLyBGb3IgdXNlIGluIHRo
ZSBkZWJ1Z2dlcgotU3RyaW5nKiBzdHJpbmcoY29uc3QgY2hhciopOwotVmVjdG9yPGNoYXI+IGFz
Y2lpRGVidWcoU3RyaW5nSW1wbCogaW1wbCk7Ci1WZWN0b3I8Y2hhcj4gYXNjaWlEZWJ1ZyhTdHJp
bmcmIHN0cmluZyk7Ci0KLXZvaWQgU3RyaW5nOjpzaG93KCkgY29uc3QKLXsKLSAgICBkYXRhTG9n
RigiJXNcbiIsIGFzY2lpRGVidWcoaW1wbCgpKS5kYXRhKCkpOwotfQotCi1TdHJpbmcqIHN0cmlu
Zyhjb25zdCBjaGFyKiBzKQotewotICAgIC8vIGxlYWtzIG1lbW9yeSEKLSAgICByZXR1cm4gbmV3
IFN0cmluZyhzKTsKLX0KLQotVmVjdG9yPGNoYXI+IGFzY2lpRGVidWcoU3RyaW5nSW1wbCogaW1w
bCkKLXsKLSAgICBpZiAoIWltcGwpCi0gICAgICAgIHJldHVybiBhc2NpaURlYnVnKFN0cmluZyhB
U0NJSUxpdGVyYWwoIltudWxsXSIpKS5pbXBsKCkpOwotCi0gICAgVmVjdG9yPGNoYXI+IGJ1ZmZl
cjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW1wbC0+bGVuZ3RoKCk7ICsraSkgewot
ICAgICAgICBVQ2hhciBjaCA9ICgqaW1wbClbaV07Ci0gICAgICAgIGlmIChpc0FTQ0lJUHJpbnRh
YmxlKGNoKSkgewotICAgICAgICAgICAgaWYgKGNoID09ICdcXCcpCi0gICAgICAgICAgICAgICAg
YnVmZmVyLmFwcGVuZChjaCk7Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKGNoKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAg
ICBidWZmZXIuYXBwZW5kKCd1Jyk7Ci0gICAgICAgICAgICBhcHBlbmRVbnNpZ25lZEFzSGV4Rml4
ZWRTaXplKGNoLCBidWZmZXIsIDQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGJ1ZmZlci5hcHBl
bmQoJ1wwJyk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotVmVjdG9yPGNoYXI+IGFzY2lpRGVi
dWcoU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIGFzY2lpRGVidWcoc3RyaW5nLmltcGwo
KSk7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJr
ZXIvd3RmL3RleHQvV1RGU3RyaW5nLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93
dGYvdGV4dC9XVEZTdHJpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkNjYy
ODAyMDAzOWYxYTU3MDRmODU5MDVkODBlMzkwY2Y0MjE2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93
dGYvdGV4dC9XVEZTdHJpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5MSArMCwwIEBACi0vKgot
ICogKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgV1RG
U3RyaW5nX2gKLSNkZWZpbmUgV1RGU3RyaW5nX2gKLQotLy8gVGhpcyBmaWxlIHdvdWxkIGJlIGNh
bGxlZCBTdHJpbmcuaCwgYnV0IHRoYXQgY29uZmxpY3RzIHdpdGggPHN0cmluZy5oPgotLy8gb24g
c3lzdGVtcyB3aXRob3V0IGNhc2Utc2Vuc2l0aXZlIGZpbGUgc3lzdGVtcy4KLQotI2luY2x1ZGUg
PHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSW1wbC5oPgotCi0jaWZkZWYgX19PQkpDX18KLSNpbmNsdWRlIDxvYmpj
L29iamMuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgQVNDSUlMaXRlcmFs
OwotCi0vLyBEZWNsYXJhdGlvbnMgb2Ygc3RyaW5nIG9wZXJhdGlvbnMKLQotV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIGludCBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoY29uc3QgTENoYXIqLCBzaXplX3Qs
IGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCk7Ci1XVEZfRVhQT1JUX1NUUklOR19B
UEkgaW50IGNoYXJhY3RlcnNUb0ludFN0cmljdChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCog
b2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKTsKLVdURl9FWFBPUlRfU1RSSU5HX0FQSSB1bnNp
Z25lZCBjaGFyYWN0ZXJzVG9VSW50U3RyaWN0KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBib29sKiBv
ayA9IG51bGxwdHIsIGludCBiYXNlID0gMTApOwotV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHVuc2ln
bmVkIGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9r
ID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCk7Ci1pbnQ2NF90IGNoYXJhY3RlcnNUb0ludDY0U3Ry
aWN0KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIsIGludCBiYXNlID0g
MTApOwotaW50NjRfdCBjaGFyYWN0ZXJzVG9JbnQ2NFN0cmljdChjb25zdCBVQ2hhciosIHNpemVf
dCwgYm9vbCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKTsKLXVpbnQ2NF90IGNoYXJhY3Rl
cnNUb1VJbnQ2NFN0cmljdChjb25zdCBMQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRy
LCBpbnQgYmFzZSA9IDEwKTsKLXVpbnQ2NF90IGNoYXJhY3RlcnNUb1VJbnQ2NFN0cmljdChjb25z
dCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKTsKLWlu
dHB0cl90IGNoYXJhY3RlcnNUb0ludFB0clN0cmljdChjb25zdCBMQ2hhciosIHNpemVfdCwgYm9v
bCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKTsKLWludHB0cl90IGNoYXJhY3RlcnNUb0lu
dFB0clN0cmljdChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyLCBpbnQg
YmFzZSA9IDEwKTsKLQotV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGludCBjaGFyYWN0ZXJzVG9JbnQo
Y29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7IC8vIGlnbm9yZXMgdHJh
aWxpbmcgZ2FyYmFnZQotV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGludCBjaGFyYWN0ZXJzVG9JbnQo
Y29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7IC8vIGlnbm9yZXMgdHJh
aWxpbmcgZ2FyYmFnZQotdW5zaWduZWQgY2hhcmFjdGVyc1RvVUludChjb25zdCBMQ2hhciosIHNp
emVfdCwgYm9vbCogb2sgPSBudWxscHRyKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCi11
bnNpZ25lZCBjaGFyYWN0ZXJzVG9VSW50KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9
IG51bGxwdHIpOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKLWludDY0X3QgY2hhcmFjdGVy
c1RvSW50NjQoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7IC8vIGln
bm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQotaW50NjRfdCBjaGFyYWN0ZXJzVG9JbnQ2NChjb25zdCBV
Q2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyKTsgLy8gaWdub3JlcyB0cmFpbGluZyBn
YXJiYWdlCi11aW50NjRfdCBjaGFyYWN0ZXJzVG9VSW50NjQoY29uc3QgTENoYXIqLCBzaXplX3Qs
IGJvb2wqIG9rID0gbnVsbHB0cik7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQotV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIHVpbnQ2NF90IGNoYXJhY3RlcnNUb1VJbnQ2NChjb25zdCBVQ2hhcios
IHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdl
Ci1pbnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHIoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wq
IG9rID0gbnVsbHB0cik7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQotaW50cHRyX3QgY2hh
cmFjdGVyc1RvSW50UHRyKGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIp
OyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKLQotLy8gRklYTUU6IExpa2UgdGhlIHN0cmlj
dCBmdW5jdGlvbnMgYWJvdmUsIHRoZXNlIGdpdmUgZmFsc2UgZm9yICJvayIgd2hlbiB0aGVyZSBp
cyB0cmFpbGluZyBnYXJiYWdlLgotLy8gTGlrZSB0aGUgbm9uLXN0cmljdCBmdW5jdGlvbnMgYWJv
dmUsIHRoZXNlIHJldHVybiB0aGUgdmFsdWUgd2hlbiB0aGVyZSBpcyB0cmFpbGluZyBnYXJiYWdl
LgotLy8gSXQgd291bGQgYmUgYmV0dGVyIGlmIHRoZXNlIHdlcmUgbW9yZSBjb25zaXN0ZW50IHdp
dGggdGhlIGFib3ZlIGZ1bmN0aW9ucyBpbnN0ZWFkLgotV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGRv
dWJsZSBjaGFyYWN0ZXJzVG9Eb3VibGUoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0g
bnVsbHB0cik7Ci1XVEZfRVhQT1JUX1NUUklOR19BUEkgZG91YmxlIGNoYXJhY3RlcnNUb0RvdWJs
ZShjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyKTsKLVdURl9FWFBPUlRf
U1RSSU5HX0FQSSBmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBMQ2hhciosIHNpemVfdCwg
Ym9vbCogb2sgPSBudWxscHRyKTsKLVdURl9FWFBPUlRfU1RSSU5HX0FQSSBmbG9hdCBjaGFyYWN0
ZXJzVG9GbG9hdChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyKTsKLVdU
Rl9FWFBPUlRfU1RSSU5HX0FQSSBmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBMQ2hhcios
IHNpemVfdCwgc2l6ZV90JiBwYXJzZWRMZW5ndGgpOwotV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGZs
b2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBzaXplX3QmIHBhcnNl
ZExlbmd0aCk7Ci0KLXRlbXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFjdGVyKFVDaGFyKSwgdHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBpc0FsbFNwZWNpYWxDaGFyYWN0ZXJzKGNvbnN0IENo
YXJhY3RlclR5cGUqLCBzaXplX3QpOwotCi1lbnVtIFRyYWlsaW5nWmVyb3NUcnVuY2F0aW5nUG9s
aWN5IHsgS2VlcFRyYWlsaW5nWmVyb3MsIFRydW5jYXRlVHJhaWxpbmdaZXJvcyB9OwotCi1jbGFz
cyBTdHJpbmcgewotcHVibGljOgotICAgIC8vIENvbnN0cnVjdCBhIG51bGwgc3RyaW5nLCBkaXN0
aW5ndWlzaGFibGUgZnJvbSBhbiBlbXB0eSBzdHJpbmcuCi0gICAgU3RyaW5nKCkgeyB9Ci0KLSAg
ICAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBVVEYtMTYgZGF0YS4KLSAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgU3RyaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0gICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIGJ5IGNvcHlpbmcgdGhlIGNvbnRlbnRz
IG9mIGEgdmVjdG9yLiAgVG8gYXZvaWQKLSAgICAvLyBjb3B5aW5nLCBjb25zaWRlciB1c2luZyBT
dHJpbmc6OmFkb3B0IGluc3RlYWQuCi0gICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBuZXZlciBjcmVh
dGUgYSBudWxsIHN0cmluZy4gVmVjdG9ycyB3aXRoIHNpemUoKSA9PSAwCi0gICAgLy8gd2lsbCBy
ZXR1cm4gdGhlIGVtcHR5IHN0cmluZy4KLSAgICAvLyBOT1RFOiBUaGlzIGlzIGRpZmZlcmVudCBm
cm9tIFN0cmluZyh2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKQotICAgIC8vIHdoaWNoIHdp
bGwgc29tZXRpbWVzIHJldHVybiBhIG51bGwgc3RyaW5nIHdoZW4gdmVjdG9yLmRhdGEoKSBpcyBu
dWxsCi0gICAgLy8gd2hpY2ggY2FuIG9ubHkgb2NjdXIgZm9yIHZlY3RvcnMgd2l0aG91dCBpbmxp
bmUgY2FwYWNpdHkuCi0gICAgLy8gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA5NzkyCi0gICAgdGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci0gICAgZXhwbGljaXQgU3RyaW5nKGNvbnN0IFZlY3RvcjxV
Q2hhciwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mKTsKLQotICAgIC8vIENvbnN0
cnVjdCBhIHN0cmluZyB3aXRoIFVURi0xNiBkYXRhLCBmcm9tIGEgbnVsbC10ZXJtaW5hdGVkIHNv
dXJjZS4KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nKGNvbnN0IFVDaGFyKik7Ci0K
LSAgICAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBsYXRpbjEgZGF0YS4KLSAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgU3RyaW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcoY29uc3QgY2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIENvbnN0cnVjdCBhIHN0cmluZyB3
aXRoIGxhdGluMSBkYXRhLCBmcm9tIGEgbnVsbC10ZXJtaW5hdGVkIHNvdXJjZS4KLSAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgU3RyaW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzKTsKLSAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMpOwotCi0g
ICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIHJlZmVyZW5jaW5nIGFuIGV4aXN0aW5nIFN0cmluZ0lt
cGwuCi0gICAgU3RyaW5nKFN0cmluZ0ltcGwmKTsKLSAgICBTdHJpbmcoU3RyaW5nSW1wbCopOwot
ICAgIFN0cmluZyhSZWY8U3RyaW5nSW1wbD4mJik7Ci0gICAgU3RyaW5nKFJlZlB0cjxTdHJpbmdJ
bXBsPiYmKTsKLQotICAgIFN0cmluZyhSZWY8QXRvbWljU3RyaW5nSW1wbD4mJik7Ci0gICAgU3Ry
aW5nKFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiYmKTsKLQotICAgIFN0cmluZyhTdGF0aWNTdHJp
bmdJbXBsJik7Ci0gICAgU3RyaW5nKFN0YXRpY1N0cmluZ0ltcGwqKTsKLQotICAgIC8vIENvbnN0
cnVjdCBhIHN0cmluZyBmcm9tIGEgY29uc3RhbnQgc3RyaW5nIGxpdGVyYWwuCi0gICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIFN0cmluZyhBU0NJSUxpdGVyYWwpOwotCi0gICAgLy8gQ29uc3RydWN0
IGEgc3RyaW5nIGZyb20gYSBjb25zdGFudCBzdHJpbmcgbGl0ZXJhbC4KLSAgICAvLyBUaGlzIGNv
bnN0cnVjdG9yIGlzIHRoZSAiYmlnIiB2ZXJzaW9uLCBhcyBpdCBwdXQgdGhlIGxlbmd0aCBpbiB0
aGUgZnVuY3Rpb24gY2FsbCBhbmQgZ2VuZXJhdGUgYmlnZ2VyIGNvZGUuCi0gICAgZW51bSBDb25z
dHJ1Y3RGcm9tTGl0ZXJhbFRhZyB7IENvbnN0cnVjdEZyb21MaXRlcmFsIH07Ci0gICAgdGVtcGxh
dGU8dW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+Ci0gICAgU3RyaW5nKGNvbnN0IGNoYXIgKCZjaGFy
YWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0sIENvbnN0cnVjdEZyb21MaXRlcmFsVGFnKSA6IG1faW1w
bChTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbDxjaGFyYWN0ZXJDb3VudD4oY2hhcmFjdGVy
cykpIHsgfQotCi0gICAgLy8gV2UgaGF2ZSB0byBkZWNsYXJlIHRoZSBjb3B5IGNvbnN0cnVjdG9y
IGFuZCBjb3B5IGFzc2lnbm1lbnQgb3BlcmF0b3IgYXMgd2VsbCwgb3RoZXJ3aXNlCi0gICAgLy8g
dGhleSdsbCBiZSBpbXBsaWNpdGx5IGRlbGV0ZWQgYnkgYWRkaW5nIHRoZSBtb3ZlIGNvbnN0cnVj
dG9yIGFuZCBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IuCi0gICAgU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgb3RoZXIpCi0gICAgICAgIDogbV9pbXBsKG90aGVyLm1faW1wbCkKLSAgICB7IH0KLSAgICBT
dHJpbmcoU3RyaW5nJiYgb3RoZXIpCi0gICAgICAgIDogbV9pbXBsKFdURk1vdmUob3RoZXIubV9p
bXBsKSkKLSAgICB7IH0KLSAgICBTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBTdHJpbmcmIG90aGVy
KSB7IG1faW1wbCA9IG90aGVyLm1faW1wbDsgcmV0dXJuICp0aGlzOyB9Ci0gICAgU3RyaW5nJiBv
cGVyYXRvcj0oU3RyaW5nJiYgb3RoZXIpIHsgbV9pbXBsID0gV1RGTW92ZShvdGhlci5tX2ltcGwp
OyByZXR1cm4gKnRoaXM7IH0KLQotICAgIC8vIElubGluZSB0aGUgZGVzdHJ1Y3Rvci4KLSAgICBB
TFdBWVNfSU5MSU5FIH5TdHJpbmcoKSB7IH0KLQotICAgIHZvaWQgc3dhcChTdHJpbmcmIG8pIHsg
bV9pbXBsLnN3YXAoby5tX2ltcGwpOyB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIGFkb3B0KFN0cmlu
Z0J1ZmZlcjxMQ2hhcj4mJiBidWZmZXIpIHsgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KFdURk1v
dmUoYnVmZmVyKSk7IH0KLSAgICBzdGF0aWMgU3RyaW5nIGFkb3B0KFN0cmluZ0J1ZmZlcjxVQ2hh
cj4mJiBidWZmZXIpIHsgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KFdURk1vdmUoYnVmZmVyKSk7
IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLSAgICBzdGF0aWMgU3RyaW5nIGFkb3B0
KFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYm
IHZlY3RvcikgeyByZXR1cm4gU3RyaW5nSW1wbDo6YWRvcHQoV1RGTW92ZSh2ZWN0b3IpKTsgfQot
Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsOyB9Ci0gICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1faW1wbCB8fCAhbV9pbXBsLT5sZW5ndGgoKTsgfQot
Ci0gICAgU3RyaW5nSW1wbCogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQot
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZWxlYXNlSW1wbCgpIHsgcmV0dXJuIFdURk1vdmUobV9p
bXBsKTsgfQotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
ICghbV9pbXBsKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2ltcGwt
Pmxlbmd0aCgpOwotICAgIH0KLQotICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBBU1NFUlQobV9pbXBsLT5pczhCaXQoKSk7Ci0gICAgICAgIHJldHVybiBtX2ltcGwtPmNo
YXJhY3RlcnM4KCk7Ci0gICAgfQotCi0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNigpIGNv
bnN0Ci0gICAgewotICAgICAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICBBU1NFUlQoIW1faW1wbC0+aXM4Qml0KCkpOwotICAgICAgICByZXR1cm4gbV9pbXBs
LT5jaGFyYWN0ZXJzMTYoKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gY2hhcmFjdGVyczgoKSBv
ciBjaGFyYWN0ZXJzMTYoKSBkZXBlbmRpbmcgb24gQ2hhcmFjdGVyVHlwZS4KLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICBpbmxpbmUgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogY2hhcmFjdGVycygpIGNvbnN0OwotCi0gICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVy
biBtX2ltcGwtPmlzOEJpdCgpOyB9Ci0KLSAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICByZXR1cm4gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hhcikg
OiBzaXplb2YoVUNoYXIpKTsKLSAgICB9Ci0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgQ1N0
cmluZyBhc2NpaSgpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBDU3RyaW5nIGxh
dGluMSgpIGNvbnN0OwotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIENTdHJpbmcgdXRmOChD
b252ZXJzaW9uTW9kZSkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIENTdHJpbmcg
dXRmOCgpIGNvbnN0OwotCi0gICAgVUNoYXIgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAoIW1faW1wbCB8fCBpbmRleCA+PSBtX2ltcGwtPmxlbmd0aCgpKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAoKm1faW1wbClbaW5kZXhdOwotICAg
IH0KLSAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBh
dChpbmRleCk7IH0KLQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgU3RyaW5nIG51
bWJlcihpbnQpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgU3RyaW5nIG51bWJl
cih1bnNpZ25lZCBpbnQpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgU3RyaW5n
IG51bWJlcihsb25nKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFN0cmluZyBu
dW1iZXIodW5zaWduZWQgbG9uZyk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBT
dHJpbmcgbnVtYmVyKGxvbmcgbG9uZyk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRp
YyBTdHJpbmcgbnVtYmVyKHVuc2lnbmVkIGxvbmcgbG9uZyk7Ci0KLSAgICBXVEZfRVhQT1JUX1NU
UklOR19BUEkgc3RhdGljIFN0cmluZyBudW1iZXIoZG91YmxlLCB1bnNpZ25lZCBwcmVjaXNpb24g
PSA2LCBUcmFpbGluZ1plcm9zVHJ1bmNhdGluZ1BvbGljeSA9IFRydW5jYXRlVHJhaWxpbmdaZXJv
cyk7Ci0KLSAgICAvLyBOdW1iZXIgdG8gU3RyaW5nIGNvbnZlcnNpb24gZm9sbG93aW5nIHRoZSBF
Q01BU2NyaXB0IGRlZmluaXRpb24uCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBT
dHJpbmcgbnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KGRvdWJsZSk7Ci0gICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIHN0YXRpYyBTdHJpbmcgbnVtYmVyVG9TdHJpbmdGaXhlZFdpZHRoKGRvdWJsZSwg
dW5zaWduZWQgZGVjaW1hbFBsYWNlcyk7Ci0KLSAgICAvLyBGaW5kIGEgc2luZ2xlIGNoYXJhY3Rl
ciBvciBzdHJpbmcsIGFsc28gd2l0aCBtYXRjaCBmdW5jdGlvbiAmIGxhdGluMSBmb3Jtcy4KLSAg
ICBzaXplX3QgZmluZChVQ2hhciBjLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0Ci0gICAgICAg
IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZChjLCBzdGFydCkgOiBub3RGb3VuZDsgfQot
Ci0gICAgc2l6ZV90IGZpbmQoY29uc3QgU3RyaW5nJiBzdHIpIGNvbnN0Ci0gICAgICAgIHsgcmV0
dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZChzdHIuaW1wbCgpKSA6IG5vdEZvdW5kOyB9Ci0gICAg
c2l6ZV90IGZpbmQoY29uc3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0KSBjb25zdAotICAg
ICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoc3RyLmltcGwoKSwgc3RhcnQpIDog
bm90Rm91bmQ7IH0KLSAgICBzaXplX3QgZmluZElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmlu
ZyYgc3RyKSBjb25zdAotICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmRJZ25v
cmluZ0FTQ0lJQ2FzZShzdHIuaW1wbCgpKSA6IG5vdEZvdW5kOyB9Ci0gICAgc2l6ZV90IGZpbmRJ
Z25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmIHN0ciwgdW5zaWduZWQgc3RhcnRPZmZzZXQp
IGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZElnbm9yaW5nQVND
SUlDYXNlKHN0ci5pbXBsKCksIHN0YXJ0T2Zmc2V0KSA6IG5vdEZvdW5kOyB9Ci0KLSAgICBzaXpl
X3QgZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyIG1hdGNoRnVuY3Rpb24sIHVuc2lnbmVk
IHN0YXJ0ID0gMCkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5k
KG1hdGNoRnVuY3Rpb24sIHN0YXJ0KSA6IG5vdEZvdW5kOyB9Ci0gICAgc2l6ZV90IGZpbmQoY29u
c3QgTENoYXIqIHN0ciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAotICAgICAgICB7IHJldHVy
biBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoc3RyLCBzdGFydCkgOiBub3RGb3VuZDsgfQotCi0gICAg
Ly8gRmluZCB0aGUgbGFzdCBpbnN0YW5jZSBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIgb3Igc3RyaW5n
LgotICAgIHNpemVfdCByZXZlcnNlRmluZChVQ2hhciBjLCB1bnNpZ25lZCBzdGFydCA9IFVJTlRf
TUFYKSBjb25zdAotICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnJldmVyc2VGaW5k
KGMsIHN0YXJ0KSA6IG5vdEZvdW5kOyB9Ci0gICAgc2l6ZV90IHJldmVyc2VGaW5kKGNvbnN0IFN0
cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFydCA9IFVJTlRfTUFYKSBjb25zdAotICAgICAgICB7IHJl
dHVybiBtX2ltcGwgPyBtX2ltcGwtPnJldmVyc2VGaW5kKHN0ci5pbXBsKCksIHN0YXJ0KSA6IG5v
dEZvdW5kOyB9Ci0KLSAgICAvLyBDYXNlIGluc2Vuc2l0aXZlIHN0cmluZyBtYXRjaGluZy4KLSAg
ICBzaXplX3QgZmluZElnbm9yaW5nQ2FzZShjb25zdCBMQ2hhciogc3RyLCB1bnNpZ25lZCBzdGFy
dCA9IDApIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZElnbm9y
aW5nQ2FzZShzdHIsIHN0YXJ0KSA6IG5vdEZvdW5kOyB9Ci0gICAgc2l6ZV90IGZpbmRJZ25vcmlu
Z0Nhc2UoY29uc3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKLSAgICAg
ICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kSWdub3JpbmdDYXNlKHN0ci5pbXBsKCks
IHN0YXJ0KSA6IG5vdEZvdW5kOyB9Ci0gICAgc2l6ZV90IHJldmVyc2VGaW5kSWdub3JpbmdDYXNl
KGNvbnN0IFN0cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFydCA9IFVJTlRfTUFYKSBjb25zdAotICAg
ICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnJldmVyc2VGaW5kSWdub3JpbmdDYXNlKHN0
ci5pbXBsKCksIHN0YXJ0KSA6IG5vdEZvdW5kOyB9Ci0KLSAgICAvLyBXcmFwcGVycyBmb3IgZmlu
ZCAmIHJldmVyc2VGaW5kIGFkZGluZyBkeW5hbWljIHNlbnNpdGl2aXR5IGNoZWNrLgotICAgIHNp
emVfdCBmaW5kKGNvbnN0IExDaGFyKiBzdHIsIHVuc2lnbmVkIHN0YXJ0LCBib29sIGNhc2VTZW5z
aXRpdmUpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIGNhc2VTZW5zaXRpdmUgPyBmaW5kKHN0ciwg
c3RhcnQpIDogZmluZElnbm9yaW5nQ2FzZShzdHIsIHN0YXJ0KTsgfQotICAgIHNpemVfdCBmaW5k
KGNvbnN0IFN0cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFydCwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBj
b25zdAotICAgICAgICB7IHJldHVybiBjYXNlU2Vuc2l0aXZlID8gZmluZChzdHIsIHN0YXJ0KSA6
IGZpbmRJZ25vcmluZ0Nhc2Uoc3RyLCBzdGFydCk7IH0KLSAgICBzaXplX3QgcmV2ZXJzZUZpbmQo
Y29uc3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0LCBib29sIGNhc2VTZW5zaXRpdmUpIGNv
bnN0Ci0gICAgICAgIHsgcmV0dXJuIGNhc2VTZW5zaXRpdmUgPyByZXZlcnNlRmluZChzdHIsIHN0
YXJ0KSA6IHJldmVyc2VGaW5kSWdub3JpbmdDYXNlKHN0ciwgc3RhcnQpOyB9Ci0KLSAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgVmVjdG9yPFVDaGFyPiBjaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpIGNvbnN0OwotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFVDaGFyMzIgY2hhcmFj
dGVyU3RhcnRpbmdBdCh1bnNpZ25lZCkgY29uc3Q7IC8vIERpdHRvLgotCi0gICAgYm9vbCBjb250
YWlucyhVQ2hhciBjKSBjb25zdCB7IHJldHVybiBmaW5kKGMpICE9IG5vdEZvdW5kOyB9Ci0gICAg
Ym9vbCBjb250YWlucyhjb25zdCBMQ2hhciogc3RyLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVl
LCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDApIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIGZpbmQo
c3RyLCBzdGFydE9mZnNldCwgY2FzZVNlbnNpdGl2ZSkgIT0gbm90Rm91bmQ7IH0KLSAgICBib29s
IGNvbnRhaW5zKGNvbnN0IFN0cmluZyYgc3RyKSBjb25zdAotICAgICAgICB7IHJldHVybiBmaW5k
KHN0cikgIT0gbm90Rm91bmQ7IH0KLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYgc3Ry
LCBib29sIGNhc2VTZW5zaXRpdmUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMCkgY29uc3QKLSAg
ICAgICAgeyByZXR1cm4gZmluZChzdHIsIHN0YXJ0T2Zmc2V0LCBjYXNlU2Vuc2l0aXZlKSAhPSBu
b3RGb3VuZDsgfQotICAgIGJvb2wgY29udGFpbnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJp
bmcmIHN0cikgY29uc3QKLSAgICAgICAgeyByZXR1cm4gZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0
cikgIT0gbm90Rm91bmQ7IH0KLSAgICBib29sIGNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoY29u
c3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KSBjb25zdAotICAgICAgICB7IHJl
dHVybiBmaW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyLCBzdGFydE9mZnNldCkgIT0gbm90Rm91bmQ7
IH0KLQotICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTdHJpbmcmIHMpIGNvbnN0Ci0gICAgICAg
IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+c3RhcnRzV2l0aChzLmltcGwoKSkgOiBzLmlzRW1w
dHkoKTsgfQotICAgIGJvb2wgc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmlu
ZyYgcykgY29uc3QKLSAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5zdGFydHNXaXRo
SWdub3JpbmdBU0NJSUNhc2Uocy5pbXBsKCkpIDogcy5pc0VtcHR5KCk7IH0KLSAgICBib29sIHN0
YXJ0c1dpdGgoY29uc3QgU3RyaW5nJiBzLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0Ci0gICAg
ICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+c3RhcnRzV2l0aChzLmltcGwoKSwgY2FzZVNl
bnNpdGl2ZSkgOiBzLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgc3RhcnRzV2l0aChVQ2hhciBjaGFy
YWN0ZXIpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+c3RhcnRzV2l0
aChjaGFyYWN0ZXIpIDogZmFsc2U7IH0KLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBtYXRjaExlbmd0
aD4KLSAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgY2hhciAoJnByZWZpeClbbWF0Y2hMZW5ndGhd
LCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdAotICAgICAgICB7IHJldHVybiBtX2lt
cGwgPyBtX2ltcGwtPnN0YXJ0c1dpdGg8bWF0Y2hMZW5ndGg+KHByZWZpeCwgY2FzZVNlbnNpdGl2
ZSkgOiAhbWF0Y2hMZW5ndGg7IH0KLSAgICBib29sIGhhc0luZml4U3RhcnRpbmdBdChjb25zdCBT
dHJpbmcmIHByZWZpeCwgdW5zaWduZWQgc3RhcnRPZmZzZXQpIGNvbnN0Ci0gICAgICAgIHsgcmV0
dXJuIG1faW1wbCAmJiBwcmVmaXguaW1wbCgpID8gbV9pbXBsLT5oYXNJbmZpeFN0YXJ0aW5nQXQo
KnByZWZpeC5pbXBsKCksIHN0YXJ0T2Zmc2V0KSA6IGZhbHNlOyB9Ci0KLSAgICBib29sIGVuZHNX
aXRoKGNvbnN0IFN0cmluZyYgcykgY29uc3QKLSAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9p
bXBsLT5lbmRzV2l0aChzLmltcGwoKSkgOiBzLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgZW5kc1dp
dGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmIHMpIGNvbnN0Ci0gICAgICAgIHsgcmV0
dXJuIG1faW1wbCA/IG1faW1wbC0+ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShzLmltcGwoKSkg
OiBzLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgZW5kc1dpdGgoY29uc3QgU3RyaW5nJiBzLCBib29s
IGNhc2VTZW5zaXRpdmUpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+
ZW5kc1dpdGgocy5pbXBsKCksIGNhc2VTZW5zaXRpdmUpIDogcy5pc0VtcHR5KCk7IH0KLSAgICBi
b29sIGVuZHNXaXRoKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKLSAgICAgICAgeyByZXR1cm4gbV9p
bXBsID8gbV9pbXBsLT5lbmRzV2l0aChjaGFyYWN0ZXIpIDogZmFsc2U7IH0KLSAgICBib29sIGVu
ZHNXaXRoKGNoYXIgY2hhcmFjdGVyKSBjb25zdCB7IHJldHVybiBlbmRzV2l0aChzdGF0aWNfY2Fz
dDxVQ2hhcj4oY2hhcmFjdGVyKSk7IH0KLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBtYXRjaExlbmd0
aD4KLSAgICBib29sIGVuZHNXaXRoKGNvbnN0IGNoYXIgKCZwcmVmaXgpW21hdGNoTGVuZ3RoXSwg
Ym9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gbV9pbXBs
ID8gbV9pbXBsLT5lbmRzV2l0aDxtYXRjaExlbmd0aD4ocHJlZml4LCBjYXNlU2Vuc2l0aXZlKSA6
ICFtYXRjaExlbmd0aDsgfQotICAgIGJvb2wgaGFzSW5maXhFbmRpbmdBdChjb25zdCBTdHJpbmcm
IHN1ZmZpeCwgdW5zaWduZWQgZW5kT2Zmc2V0KSBjb25zdAotICAgICAgICB7IHJldHVybiBtX2lt
cGwgJiYgc3VmZml4LmltcGwoKSA/IG1faW1wbC0+aGFzSW5maXhFbmRpbmdBdCgqc3VmZml4Lmlt
cGwoKSwgZW5kT2Zmc2V0KSA6IGZhbHNlOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
dm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJik7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZv
aWQgYXBwZW5kKExDaGFyKTsKLSAgICB2b2lkIGFwcGVuZChjaGFyIGMpIHsgYXBwZW5kKHN0YXRp
Y19jYXN0PExDaGFyPihjKSk7IH07Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgYXBw
ZW5kKFVDaGFyKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdm9pZCBhcHBlbmQoY29uc3Qg
TENoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB2b2lk
IGFwcGVuZChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIHZvaWQgaW5zZXJ0KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHBvcyk7Ci0KLSAg
ICBTdHJpbmcmIHJlcGxhY2UoVUNoYXIgYSwgVUNoYXIgYikgeyBpZiAobV9pbXBsKSBtX2ltcGwg
PSBtX2ltcGwtPnJlcGxhY2UoYSwgYik7IHJldHVybiAqdGhpczsgfQotICAgIFN0cmluZyYgcmVw
bGFjZShVQ2hhciBhLCBjb25zdCBTdHJpbmcmIGIpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9p
bXBsLT5yZXBsYWNlKGEsIGIuaW1wbCgpKTsgcmV0dXJuICp0aGlzOyB9Ci0gICAgU3RyaW5nJiBy
ZXBsYWNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IGlmIChtX2ltcGwpIG1f
aW1wbCA9IG1faW1wbC0+cmVwbGFjZShhLmltcGwoKSwgYi5pbXBsKCkpOyByZXR1cm4gKnRoaXM7
IH0KLSAgICBTdHJpbmcmIHJlcGxhY2UodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwgY29u
c3QgU3RyaW5nJiBiKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+cmVwbGFjZShpbmRl
eCwgbGVuLCBiLmltcGwoKSk7IHJldHVybiAqdGhpczsgfQotCi0gICAgdGVtcGxhdGU8dW5zaWdu
ZWQgY2hhcmFjdGVyQ291bnQ+Ci0gICAgQUxXQVlTX0lOTElORSBTdHJpbmcmIHJlcGxhY2VXaXRo
TGl0ZXJhbChVQ2hhciBhLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRd
KQotICAgIHsKLSAgICAgICAgaWYgKG1faW1wbCkKLSAgICAgICAgICAgIG1faW1wbCA9IG1faW1w
bC0+cmVwbGFjZShhLCBjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJDb3VudCAtIDEpOwotCi0gICAgICAg
IHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdm9pZCB0
cnVuY2F0ZSh1bnNpZ25lZCBsZW4pOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB2b2lkIHJl
bW92ZSh1bnNpZ25lZCBwb3MsIGludCBsZW4gPSAxKTsKLQotICAgIFdURl9FWFBPUlRfU1RSSU5H
X0FQSSBTdHJpbmcgc3Vic3RyaW5nKHVuc2lnbmVkIHBvcywgdW5zaWduZWQgbGVuID0gVUlOVF9N
QVgpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgc3Vic3RyaW5nU2hh
cmluZ0ltcGwodW5zaWduZWQgcG9zLCB1bnNpZ25lZCBsZW4gPSBVSU5UX01BWCkgY29uc3Q7Ci0g
ICAgU3RyaW5nIGxlZnQodW5zaWduZWQgbGVuKSBjb25zdCB7IHJldHVybiBzdWJzdHJpbmcoMCwg
bGVuKTsgfQotICAgIFN0cmluZyByaWdodCh1bnNpZ25lZCBsZW4pIGNvbnN0IHsgcmV0dXJuIHN1
YnN0cmluZyhsZW5ndGgoKSAtIGxlbiwgbGVuKTsgfQotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIFN0cmluZyBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpIGNvbnN0OwotICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBTdHJpbmcgY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSBjb25zdDsKLSAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRM
b2NhbGUoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNvbnZlcnRU
b0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4OEJpdCh1bnNpZ25l
ZCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9VcHBl
cmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0
cmluZyBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxlSWRlbnRpZmllcikgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBj
b252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRl
bnRpZmllcikgY29uc3Q7Ci0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIHN0cmlw
V2hpdGVTcGFjZSgpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgc3Ry
aXBXaGl0ZVNwYWNlKElzV2hpdGVTcGFjZUZ1bmN0aW9uUHRyKSBjb25zdDsKLSAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgU3RyaW5nIHNpbXBsaWZ5V2hpdGVTcGFjZSgpIGNvbnN0OwotICAgIFdU
Rl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgc2ltcGxpZnlXaGl0ZVNwYWNlKElzV2hpdGVTcGFj
ZUZ1bmN0aW9uUHRyKSBjb25zdDsKLQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcg
cmVtb3ZlQ2hhcmFjdGVycyhDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyKSBjb25zdDsKLSAgICB0
ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+IGJvb2wgaXNBbGxTcGVjaWFs
Q2hhcmFjdGVycygpIGNvbnN0OwotCi0gICAgLy8gUmV0dXJucyB0aGUgc3RyaW5nIHdpdGggY2Fz
ZSBmb2xkZWQgZm9yIGNhc2UgaW5zZW5zaXRpdmUgY29tcGFyaXNvbi4KLSAgICAvLyBVc2UgY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UgaW5zdGVhZCBpZiBBU0NJSSBjYXNlIGluc2Vuc2l0aXZlIGNv
bXBhcmlzb24gaXMgZGVzaXJlZC4KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGZv
bGRDYXNlKCkgY29uc3Q7Ci0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFN0cmlu
ZyBmb3JtYXQoY29uc3QgY2hhciAqLCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIpOwot
Ci0gICAgLy8gUmV0dXJucyBhbiB1bmluaXRpYWxpemVkIHN0cmluZy4gVGhlIGNoYXJhY3RlcnMg
bmVlZHMgdG8gYmUgd3JpdHRlbgotICAgIC8vIGludG8gdGhlIGJ1ZmZlciByZXR1cm5lZCBpbiBk
YXRhIGJlZm9yZSB0aGUgcmV0dXJuZWQgc3RyaW5nIGlzIHVzZWQuCi0gICAgLy8gRmFpbHVyZSB0
byBkbyB0aGlzIHdpbGwgaGF2ZSB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCi0gICAgc3RhdGljIFN0
cmluZyBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqJiBkYXRhKSB7
IHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGF0YSk7IH0K
LSAgICBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBM
Q2hhciomIGRhdGEpIHsgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVu
Z3RoLCBkYXRhKTsgfQotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgc3BsaXQoY29u
c3QgU3RyaW5nJiBzZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMsIFZlY3RvcjxTdHJp
bmc+JiByZXN1bHQpIGNvbnN0OwotICAgIHZvaWQgc3BsaXQoY29uc3QgU3RyaW5nJiBzZXBhcmF0
b3IsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0Ci0gICAgewotICAgICAgICBzcGxpdChz
ZXBhcmF0b3IsIGZhbHNlLCByZXN1bHQpOwotICAgIH0KLQotICAgIHVzaW5nIFNwbGl0RnVuY3Rv
ciA9IFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmdWaWV3Jik+OwotICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSB2b2lkIHNwbGl0KFVDaGFyIHNlcGFyYXRvciwgYm9vbCBhbGxvd0VtcHR5
RW50cmllcywgY29uc3QgU3BsaXRGdW5jdG9yJikgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJ
TkdfQVBJIHZvaWQgc3BsaXQoVUNoYXIgc2VwYXJhdG9yLCBib29sIGFsbG93RW1wdHlFbnRyaWVz
LCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdDsKLSAgICB2b2lkIHNwbGl0KFVDaGFyIHNl
cGFyYXRvciwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHNw
bGl0KHNlcGFyYXRvciwgZmFsc2UsIHJlc3VsdCk7Ci0gICAgfQotICAgIFZlY3RvcjxTdHJpbmc+
IHNwbGl0KFVDaGFyIHNlcGFyYXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIFZlY3RvcjxTdHJp
bmc+IHJlc3VsdDsKLSAgICAgICAgc3BsaXQoc2VwYXJhdG9yLCBmYWxzZSwgcmVzdWx0KTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgVmVjdG9yPFN0cmluZz4gc3BsaXQoY29u
c3QgU3RyaW5nJiBzZXBhcmF0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBWZWN0b3I8U3RyaW5n
PiByZXN1bHQ7Ci0gICAgICAgIHNwbGl0KHNlcGFyYXRvciwgZmFsc2UsIHJlc3VsdCk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGlu
dCB0b0ludFN0cmljdChib29sKiBvayA9IG51bGxwdHIsIGludCBiYXNlID0gMTApIGNvbnN0Owot
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB1bnNpZ25lZCB0b1VJbnRTdHJpY3QoYm9vbCogb2sg
PSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgaW50NjRfdCB0b0ludDY0U3RyaWN0KGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAx
MCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHVpbnQ2NF90IHRvVUludDY0U3Ry
aWN0KGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCkgY29uc3Q7Ci0gICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIGludHB0cl90IHRvSW50UHRyU3RyaWN0KGJvb2wqIG9rID0gbnVsbHB0
ciwgaW50IGJhc2UgPSAxMCkgY29uc3Q7Ci0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgaW50
IHRvSW50KGJvb2wqIG9rID0gbnVsbHB0cikgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIHVuc2lnbmVkIHRvVUludChib29sKiBvayA9IG51bGxwdHIpIGNvbnN0OwotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBpbnQ2NF90IHRvSW50NjQoYm9vbCogb2sgPSBudWxscHRyKSBjb25z
dDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdWludDY0X3QgdG9VSW50NjQoYm9vbCogb2sg
PSBudWxscHRyKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgaW50cHRyX3QgdG9J
bnRQdHIoYm9vbCogb2sgPSBudWxscHRyKSBjb25zdDsKLQotICAgIC8vIEZJWE1FOiBMaWtlIHRo
ZSBzdHJpY3QgZnVuY3Rpb25zIGFib3ZlLCB0aGVzZSBnaXZlIGZhbHNlIGZvciAib2siIHdoZW4g
dGhlcmUgaXMgdHJhaWxpbmcgZ2FyYmFnZS4KLSAgICAvLyBMaWtlIHRoZSBub24tc3RyaWN0IGZ1
bmN0aW9ucyBhYm92ZSwgdGhlc2UgcmV0dXJuIHRoZSB2YWx1ZSB3aGVuIHRoZXJlIGlzIHRyYWls
aW5nIGdhcmJhZ2UuCi0gICAgLy8gSXQgd291bGQgYmUgYmV0dGVyIGlmIHRoZXNlIHdlcmUgbW9y
ZSBjb25zaXN0ZW50IHdpdGggdGhlIGFib3ZlIGZ1bmN0aW9ucyBpbnN0ZWFkLgotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBkb3VibGUgdG9Eb3VibGUoYm9vbCogb2sgPSBudWxscHRyKSBjb25z
dDsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgZmxvYXQgdG9GbG9hdChib29sKiBvayA9IG51
bGxwdHIpIGNvbnN0OwotCi0gICAgYm9vbCBwZXJjZW50YWdlKGludCYgcGVyY2VudGFnZSkgY29u
c3Q7Ci0KLSNpZiBDT01QSUxFUl9TVVBQT1JUUyhDWFhfUkVGRVJFTkNFX1FVQUxJRklFRF9GVU5D
VElPTlMpCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBpc29sYXRlZENvcHkoKSBj
b25zdCAmOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgaXNvbGF0ZWRDb3B5KCkg
JiY7Ci0jZWxzZQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgaXNvbGF0ZWRDb3B5
KCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGlzU2Fm
ZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpIGNvbnN0OwotCi0gICAgLy8gUHJldmVudCBTdHJpbmdz
IGZyb20gYmVpbmcgaW1wbGljaXRseSBjb252ZXJ0YWJsZSB0byBib29sIGFzIGl0IHdpbGwgYmUg
YW1iaWd1b3VzIG9uIGFueSBwbGF0Zm9ybSB0aGF0Ci0gICAgLy8gYWxsb3dzIGltcGxpY2l0IGNv
bnZlcnNpb24gdG8gYW5vdGhlciBwb2ludGVyIHR5cGUgKGUuZy4sIE1hYyBhbGxvd3MgaW1wbGlj
aXQgY29udmVyc2lvbiB0byBOU1N0cmluZyAqKS4KLSAgICB0eXBlZGVmIHN0cnVjdCBJbXBsaWNp
dENvbnZlcnNpb25Gcm9tV1RGU3RyaW5nVG9Cb29sRGlzYWxsb3dlZEEqIChTdHJpbmc6OipVbnNw
ZWNpZmllZEJvb2xUeXBlQSk7Ci0gICAgdHlwZWRlZiBzdHJ1Y3QgSW1wbGljaXRDb252ZXJzaW9u
RnJvbVdURlN0cmluZ1RvQm9vbERpc2FsbG93ZWRCKiAoU3RyaW5nOjoqVW5zcGVjaWZpZWRCb29s
VHlwZUIpOwotICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGVBKCkgY29uc3Q7Ci0gICAg
b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZUIoKSBjb25zdDsKLQotI2lmIFVTRShDRikKLSAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nKENGU3RyaW5nUmVmKTsKLSAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjcmVhdGVDRlN0cmluZygpIGNv
bnN0OwotI2VuZGlmCi0KLSNpZmRlZiBfX09CSkNfXwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBTdHJpbmcoTlNTdHJpbmcgKik7Ci0KLSAgICAvLyBUaGlzIGNvbnZlcnNpb24gY29udmVydHMg
dGhlIG51bGwgc3RyaW5nIHRvIGFuIGVtcHR5IE5TU3RyaW5nIHJhdGhlciB0aGFuIHRvIG5pbC4K
LSAgICAvLyBHaXZlbiBDb2NvYSBpZGlvbXMsIHRoaXMgaXMgYSBtb3JlIHVzZWZ1bCBkZWZhdWx0
LiBDbGllbnRzIHRoYXQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUKLSAgICAvLyBudWxsIHN0cmluZyBj
YW4gY2hlY2sgaXNOdWxsIGV4cGxpY2l0bHkuCi0gICAgb3BlcmF0b3IgTlNTdHJpbmcgKigpIGNv
bnN0OwotI2VuZGlmCi0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFN0cmluZyBt
YWtlOEJpdEZyb20xNkJpdFNvdXJjZShjb25zdCBVQ2hhciosIHNpemVfdCk7Ci0gICAgdGVtcGxh
dGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBTdHJpbmcgbWFrZThCaXRGcm9t
MTZCaXRTb3VyY2UoY29uc3QgVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBhY2l0eT4mIGJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtYWtlOEJpdEZyb20xNkJpdFNvdXJjZShidWZmZXIuZGF0
YSgpLCBidWZmZXIuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
c3RhdGljIFN0cmluZyBtYWtlMTZCaXRGcm9tOEJpdFNvdXJjZShjb25zdCBMQ2hhciosIHNpemVf
dCk7Ci0KLSAgICAvLyBTdHJpbmc6OmZyb21VVEY4IHdpbGwgcmV0dXJuIGEgbnVsbCBzdHJpbmcg
aWYKLSAgICAvLyB0aGUgaW5wdXQgZGF0YSBjb250YWlucyBpbnZhbGlkIFVURi04IHNlcXVlbmNl
cy4KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFN0cmluZyBmcm9tVVRGOChjb25z
dCBMQ2hhciosIHNpemVfdCk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBTdHJp
bmcgZnJvbVVURjgoY29uc3QgTENoYXIqKTsKLSAgICBzdGF0aWMgU3RyaW5nIGZyb21VVEY4KGNv
bnN0IGNoYXIqIHMsIHNpemVfdCBsZW5ndGgpIHsgcmV0dXJuIGZyb21VVEY4KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSwgbGVuZ3RoKTsgfTsKLSAgICBzdGF0aWMgU3RyaW5nIGZy
b21VVEY4KGNvbnN0IGNoYXIqIHMpIHsgcmV0dXJuIGZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPihzKSk7IH07Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBT
dHJpbmcgZnJvbVVURjgoY29uc3QgQ1N0cmluZyYpOwotICAgIHN0YXRpYyBTdHJpbmcgZnJvbVVU
RjgoY29uc3QgVmVjdG9yPExDaGFyPiYgY2hhcmFjdGVycyk7Ci0KLSAgICAvLyBUcmllcyB0byBj
b252ZXJ0IHRoZSBwYXNzZWQgaW4gc3RyaW5nIHRvIFVURi04LCBidXQgd2lsbCBmYWxsIGJhY2sg
dG8gTGF0aW4tMSBpZiB0aGUgc3RyaW5nIGlzIG5vdCB2YWxpZCBVVEYtOC4KLSAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgc3RhdGljIFN0cmluZyBmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhj
b25zdCBMQ2hhciosIHNpemVfdCk7Ci0gICAgc3RhdGljIFN0cmluZyBmcm9tVVRGOFdpdGhMYXRp
bjFGYWxsYmFjayhjb25zdCBjaGFyKiBzLCBzaXplX3QgbGVuZ3RoKSB7IHJldHVybiBmcm9tVVRG
OFdpdGhMYXRpbjFGYWxsYmFjayhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4ocyksIGxl
bmd0aCk7IH07Ci0KLSAgICAvLyBEZXRlcm1pbmVzIHRoZSB3cml0aW5nIGRpcmVjdGlvbiB1c2lu
ZyB0aGUgVW5pY29kZSBCaWRpIEFsZ29yaXRobSBydWxlcyBQMiBhbmQgUDMuCi0gICAgVUNoYXJE
aXJlY3Rpb24gZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oYm9vbCogaGFzU3Ryb25nRGlyZWN0aW9u
YWxpdHkgPSBudWxscHRyKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1faW1wbCkKLSAgICAg
ICAgICAgIHJldHVybiBtX2ltcGwtPmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKGhhc1N0cm9uZ0Rp
cmVjdGlvbmFsaXR5KTsKLSAgICAgICAgaWYgKGhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5KQotICAg
ICAgICAgICAgKmhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5ID0gZmFsc2U7Ci0gICAgICAgIHJldHVy
biBVX0xFRlRfVE9fUklHSFQ7Ci0gICAgfQotCi0gICAgYm9vbCBjb250YWluc09ubHlBU0NJSSgp
IGNvbnN0OwotICAgIGJvb2wgY29udGFpbnNPbmx5TGF0aW4xKCkgY29uc3Q7Ci0gICAgYm9vbCBj
b250YWluc09ubHlXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gIW1faW1wbCB8fCBtX2ltcGwt
PmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKTsgfQotCi0gICAgLy8gSGFzaCB0YWJsZSBkZWxldGVk
IHZhbHVlcywgd2hpY2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBk
ZXN0cm95ZWQuCi0gICAgU3RyaW5nKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBt
X2ltcGwoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQotICAgIGJvb2wgaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKTsgfQotCi0gICAgdW5zaWduZWQgZXhpc3RpbmdIYXNoKCkgY29uc3QgeyByZXR1cm4g
aXNOdWxsKCkgPyAwIDogaW1wbCgpLT5leGlzdGluZ0hhc2goKTsgfQotCi0jaWZuZGVmIE5ERUJV
RwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB2b2lkIHNob3coKSBjb25zdDsKLSNlbmRpZgot
Ci0gICAgLy8gV29ya2Fyb3VuZCBmb3IgYSBjb21waWxlciBidWcuIFVzZSBvcGVyYXRvcltdIGlu
c3RlYWQuCi0gICAgVUNoYXIgY2hhcmFjdGVyQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAoIW1faW1wbCB8fCBpbmRleCA+PSBtX2ltcGwtPmxlbmd0aCgpKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAoKm1faW1wbClbaW5kZXhdOwotICAg
IH0KLQotICAgIC8vIFR1cm5zIHRoaXMgU3RyaW5nIGVtcHR5IGlmIHRoZSBTdHJpbmdJbXBsIGlz
IG5vdCByZWZlcmVuY2VkIGJ5IGFueW9uZSBlbHNlLgotICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZv
ciBjbGVhcmluZyBTdHJpbmctYmFzZWQgY2FjaGVzLgotICAgIHZvaWQgY2xlYXJJbXBsSWZOb3RT
aGFyZWQoKQotICAgIHsKLSAgICAgICAgaWYgKG1faW1wbCAmJiBtX2ltcGwtPmhhc09uZVJlZigp
KQotICAgICAgICAgICAgbV9pbXBsID0gbnVsbHB0cjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci0gICAgdm9pZCByZW1vdmVJbnRlcm5h
bChjb25zdCBDaGFyYWN0ZXJUeXBlKiwgdW5zaWduZWQsIGludCk7Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICB2b2lkIGFwcGVuZEludGVybmFsKENoYXJhY3Rl
clR5cGUpOwotCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1faW1wbDsKLX07Ci0KLXN0YXRpY19h
c3NlcnQoc2l6ZW9mKFN0cmluZykgPT0gc2l6ZW9mKHZvaWQqKSwgIlN0cmluZyBzaG91bGQgZWZm
ZWN0aXZlbHkgYmUgYSBwb2ludGVyIHRvIGEgU3RyaW5nSW1wbCwgYW5kIGVmZmljaWVudCB0byBw
YXNzIGJ5IHZhbHVlIik7Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiBh
LCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsKGEuaW1wbCgpLCBiLmltcGwoKSk7IH0K
LWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBMQ2hhciogYikg
eyByZXR1cm4gZXF1YWwoYS5pbXBsKCksIGIpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFN0cmluZyYgYSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gZXF1YWwoYS5pbXBsKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSk7IH0KLWlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgTENoYXIqIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4gZXF1YWwoYSwgYi5p
bXBsKCkpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNoYXIqIGEsIGNvbnN0IFN0
cmluZyYgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGEp
LCBiLmltcGwoKSk7IH0KLXRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBWZWN0b3I8Y2hhciwgaW5saW5lQ2FwYWNpdHk+JiBhLCBjb25z
dCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsKGIuaW1wbCgpLCBhLmRhdGEoKSwgYS5zaXplKCkp
OyB9Ci10ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBWZWN0b3I8Y2hhciwgaW5saW5lQ2FwYWNpdHk+JiBi
KSB7IHJldHVybiBiID09IGE7IH0KLQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0
cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiAhZXF1YWwoYS5pbXBsKCksIGIuaW1w
bCgpKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IExD
aGFyKiBiKSB7IHJldHVybiAhZXF1YWwoYS5pbXBsKCksIGIpOyB9Ci1pbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gIWVxdWFsKGEu
aW1wbCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9Ci1pbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IExDaGFyKiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuICFl
cXVhbChhLCBiLmltcGwoKSk7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgY2hhciog
YSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiAhZXF1YWwocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KGEpLCBiLmltcGwoKSk7IH0KLXRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWZWN0b3I8Y2hhciwgaW5saW5lQ2FwYWNp
dHk+JiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQotdGVtcGxhdGU8
c2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmlu
ZyYgYSwgY29uc3QgVmVjdG9yPGNoYXIsIGlubGluZUNhcGFjaXR5PiYgYikgeyByZXR1cm4gYiAh
PSBhOyB9Ci0KLWJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmKTsKLWJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmLCBj
b25zdCBjaGFyKik7Ci0KLXRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gYm9vbCBlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmLCBjb25zdCBjaGFyICgmbG93ZXJjYXNl
TGV0dGVycylbbGVuZ3RoXSk7Ci10ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGJvb2wgc3RhcnRz
V2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmLCBjb25zdCBjaGFyICgm
bG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSk7Ci0KLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdO
dWxsaXR5KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbEln
bm9yaW5nTnVsbGl0eShhLmltcGwoKSwgYi5pbXBsKCkpOyB9Ci10ZW1wbGF0ZTxzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+IGlubGluZSBib29sIGVxdWFsSWdub3JpbmdOdWxsaXR5KGNvbnN0IFZlY3Rv
cjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+JiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVx
dWFsSWdub3JpbmdOdWxsaXR5KGEsIGIuaW1wbCgpKTsgfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRv
ciEoY29uc3QgU3RyaW5nJiBzdHIpIHsgcmV0dXJuIHN0ci5pc051bGwoKTsgfQotCi1pbmxpbmUg
dm9pZCBzd2FwKFN0cmluZyYgYSwgU3RyaW5nJiBiKSB7IGEuc3dhcChiKTsgfQotCi0jaWZkZWYg
X19PQkpDX18KLQotLy8gVXNlZCBpbiBhIHNtYWxsIG51bWJlciBvZiBwbGFjZXMgd2hlcmUgdGhl
IGxvbmcgc3RhbmRpbmcgYmVoYXZpb3IgaGFzIGJlZW4gIm5pbCBpZiBlbXB0eSIuCi1OU1N0cmlu
ZyAqIG5zU3RyaW5nTmlsSWZFbXB0eShjb25zdCBTdHJpbmcmKTsKLQotI2VuZGlmCi0KLS8vIERl
ZmluaXRpb25zIG9mIHN0cmluZyBvcGVyYXRpb25zCi0KLWlubGluZSBTdHJpbmc6OlN0cmluZyhT
dHJpbmdJbXBsJiBpbXBsKQotICAgIDogbV9pbXBsKCZpbXBsKQotewotfQotCi1pbmxpbmUgU3Ry
aW5nOjpTdHJpbmcoU3RyaW5nSW1wbCogaW1wbCkKLSAgICA6IG1faW1wbChpbXBsKQotewotfQot
Ci1pbmxpbmUgU3RyaW5nOjpTdHJpbmcoUmVmPFN0cmluZ0ltcGw+JiYgaW1wbCkKLSAgICA6IG1f
aW1wbChXVEZNb3ZlKGltcGwpKQotewotfQotCi1pbmxpbmUgU3RyaW5nOjpTdHJpbmcoUmVmUHRy
PFN0cmluZ0ltcGw+JiYgaW1wbCkKLSAgICA6IG1faW1wbChXVEZNb3ZlKGltcGwpKQotewotfQot
Ci1pbmxpbmUgU3RyaW5nOjpTdHJpbmcoUmVmPEF0b21pY1N0cmluZ0ltcGw+JiYgaW1wbCkKLSAg
ICA6IG1faW1wbChXVEZNb3ZlKGltcGwpKQotewotfQotCi1pbmxpbmUgU3RyaW5nOjpTdHJpbmco
UmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+JiYgaW1wbCkKLSAgICA6IG1faW1wbChXVEZNb3ZlKGlt
cGwpKQotewotfQotCi1pbmxpbmUgU3RyaW5nOjpTdHJpbmcoU3RhdGljU3RyaW5nSW1wbCYgaW1w
bCkKLSAgICA6IG1faW1wbChyZWludGVycHJldF9jYXN0PFN0cmluZ0ltcGwqPigmaW1wbCkpCi17
Ci19Ci0KLWlubGluZSBTdHJpbmc6OlN0cmluZyhTdGF0aWNTdHJpbmdJbXBsKiBpbXBsKQotICAg
IDogbV9pbXBsKHJlaW50ZXJwcmV0X2Nhc3Q8U3RyaW5nSW1wbCo+KGltcGwpKQotewotfQotCi10
ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4K
LVN0cmluZzo6U3RyaW5nKGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj4mIHZlY3RvcikKLSAgICA6IG1faW1wbCh2ZWN0b3Iuc2l6ZSgpID8gU3RyaW5n
SW1wbDo6Y3JlYXRlKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpIDogUmVmPFN0cmluZ0lt
cGw+KCpTdHJpbmdJbXBsOjplbXB0eSgpKSkKLXsKLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIGNv
bnN0IExDaGFyKiBTdHJpbmc6OmNoYXJhY3RlcnM8TENoYXI+KCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoaXM4Qml0KCkpOwotICAgIHJldHVybiBjaGFyYWN0ZXJzOCgpOwotfQotCi10ZW1wbGF0ZTw+
Ci1pbmxpbmUgY29uc3QgVUNoYXIqIFN0cmluZzo6Y2hhcmFjdGVyczxVQ2hhcj4oKSBjb25zdAot
ewotICAgIEFTU0VSVCghaXM4Qml0KCkpOwotICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKTsKLX0K
LQotaW5saW5lIGJvb2wgU3RyaW5nOjpjb250YWluc09ubHlMYXRpbjEoKSBjb25zdAotewotICAg
IGlmIChpc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGlzOEJpdCgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0g
Y2hhcmFjdGVyczE2KCk7Ci0gICAgVUNoYXIgb3JlZCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2ltcGwtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIG9yZWQgfD0gY2hhcmFjdGVy
c1tpXTsKLSAgICByZXR1cm4gIShvcmVkICYgMHhGRjAwKTsKLX0KLQotI2lmZGVmIF9fT0JKQ19f
Ci0KLWlubGluZSBTdHJpbmc6Om9wZXJhdG9yIE5TU3RyaW5nICooKSBjb25zdAotewotICAgIGlm
ICghbV9pbXBsKQotICAgICAgICByZXR1cm4gQCIiOwotICAgIHJldHVybiAqbV9pbXBsOwotfQot
Ci1pbmxpbmUgTlNTdHJpbmcgKiBuc1N0cmluZ05pbElmRW1wdHkoY29uc3QgU3RyaW5nJiBzdHJp
bmcpCi17Ci0gICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgcmV0dXJuICpzdHJpbmcuaW1wbCgpOwotfQotCi0jZW5kaWYKLQotaW5saW5lIGJvb2wgU3Ry
aW5nOjpjb250YWluc09ubHlBU0NJSSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBj
aGFyYWN0ZXJzQXJlQWxsQVNDSUkoY2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSk7Ci0K
LSAgICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNoYXJhY3RlcnMxNigpLCBtX2ltcGwt
Pmxlbmd0aCgpKTsKLX0KLQotV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGludCBjb2RlUG9pbnRDb21w
YXJlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwotCi1pbmxpbmUgYm9vbCBjb2RlUG9p
bnRDb21wYXJlTGVzc1RoYW4oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpCi17Ci0g
ICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoYS5pbXBsKCksIGIuaW1wbCgpKSA8IDA7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgdm9pZCBhcHBlbmROdW1i
ZXIoVmVjdG9yPENoYXJhY3RlclR5cGU+JiB2ZWN0b3IsIHVuc2lnbmVkIGNoYXIgbnVtYmVyKQot
ewotICAgIGludCBudW1iZXJMZW5ndGggPSBudW1iZXIgPiA5OSA/IDMgOiAobnVtYmVyID4gOSA/
IDIgOiAxKTsKLSAgICBzaXplX3QgdmVjdG9yU2l6ZSA9IHZlY3Rvci5zaXplKCk7Ci0gICAgdmVj
dG9yLmdyb3codmVjdG9yU2l6ZSArIG51bWJlckxlbmd0aCk7Ci0KLSAgICBzd2l0Y2ggKG51bWJl
ckxlbmd0aCkgewotICAgIGNhc2UgMzoKLSAgICAgICAgdmVjdG9yW3ZlY3RvclNpemUgKyAyXSA9
IG51bWJlciAlIDEwICsgJzAnOwotICAgICAgICBudW1iZXIgLz0gMTA7Ci0gICAgICAgIEZBTExU
SFJPVUdIOwotCi0gICAgY2FzZSAyOgotICAgICAgICB2ZWN0b3JbdmVjdG9yU2l6ZSArIDFdID0g
bnVtYmVyICUgMTAgKyAnMCc7Ci0gICAgICAgIG51bWJlciAvPSAxMDsKLSAgICAgICAgRkFMTFRI
Uk9VR0g7Ci0KLSAgICBjYXNlIDE6Ci0gICAgICAgIHZlY3Rvclt2ZWN0b3JTaXplXSA9IG51bWJl
ciAlIDEwICsgJzAnOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Ym9vbCBpc1NwZWNpYWxDaGFyYWN0
ZXIoVUNoYXIpLCB0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgaXNBbGxTcGVj
aWFsQ2hhcmFjdGVycyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVu
Z3RoKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgaWYgKCFpc1NwZWNpYWxDaGFyYWN0ZXIoY2hhcmFjdGVyc1tpXSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTxib29s
IGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+Ci1pbmxpbmUgYm9vbCBTdHJpbmc6OmlzQWxsU3Bl
Y2lhbENoYXJhY3RlcnMoKSBjb25zdAotewotICAgIHNpemVfdCBsZW4gPSBsZW5ndGgoKTsKLQot
ICAgIGlmICghbGVuKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChpczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIFdURjo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc1NwZWNpYWxDaGFy
YWN0ZXIsIExDaGFyPihjaGFyYWN0ZXJzOCgpLCBsZW4pOwotICAgIHJldHVybiBXVEY6OmlzQWxs
U3BlY2lhbENoYXJhY3RlcnM8aXNTcGVjaWFsQ2hhcmFjdGVyLCBVQ2hhcj4oY2hhcmFjdGVyczE2
KCksIGxlbik7Ci19Ci0KLS8vIFN0cmluZ0hhc2ggaXMgdGhlIGRlZmF1bHQgaGFzaCBmb3IgU3Ry
aW5nCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci10ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxTdHJpbmc+IHsKLSAgICB0eXBlZGVmIFN0cmluZ0hhc2ggSGFz
aDsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8U3RyaW5nPiA6IFNpbXBs
ZUNsYXNzVmVjdG9yVHJhaXRzIHsgfTsKLQotY2xhc3MgQVNDSUlMaXRlcmFsIHsKLXB1YmxpYzoK
LSAgICBleHBsaWNpdCBBU0NJSUxpdGVyYWwoY29uc3QgY2hhciogY2hhcmFjdGVycykgOiBtX2No
YXJhY3RlcnMoY2hhcmFjdGVycykgeyB9Ci0gICAgb3BlcmF0b3IgY29uc3QgY2hhciooKSB7IHJl
dHVybiBtX2NoYXJhY3RlcnM7IH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBjaGFyKiBtX2NoYXJh
Y3RlcnM7Ci19OwotCi0vLyBTaGFyZWQgZ2xvYmFsIGVtcHR5IHN0cmluZy4KLVdURl9FWFBPUlRf
U1RSSU5HX0FQSSBjb25zdCBTdHJpbmcmIGVtcHR5U3RyaW5nKCk7Ci0KLWlubGluZSBTdHJpbmcg
U3RyaW5nOjpmcm9tVVRGOChjb25zdCBWZWN0b3I8TENoYXI+JiBjaGFyYWN0ZXJzKQotewotICAg
IGlmIChjaGFyYWN0ZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Ci0gICAgcmV0dXJuIGZyb21VVEY4KGNoYXJhY3RlcnMuZGF0YSgpLCBjaGFyYWN0ZXJzLnNpemUo
KSk7Ci19Ci0KLXRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gaW5saW5lIGJvb2wgZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIgKCZs
b3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKQotewotICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShzdHJpbmcuaW1wbCgpLCBsb3dlcmNhc2VMZXR0ZXJzKTsKLX0KLQotaW5s
aW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0
cmluZyYgYikKLXsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhLmltcGwoKSwg
Yi5pbXBsKCkpOwotfQotCi1pbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0
IFN0cmluZyYgYSwgY29uc3QgY2hhciogYikKLXsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShhLmltcGwoKSwgYik7Ci19Ci0KLXRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gaW5s
aW5lIGJvb2wgc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcm
IHN0cmluZywgY29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pCi17Ci0gICAg
cmV0dXJuIHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmltcGwoKSwg
bG93ZXJjYXNlTGV0dGVycyk7Ci19Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEludGVnZXJUb1N0cmlu
Z0NvbnZlcnNpb25UcmFpdDxTdHJpbmc+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gU3RyaW5n
OwotICAgIHVzaW5nIEFkZGl0aW9uYWxBcmd1bWVudFR5cGUgPSB2b2lkOwotICAgIHN0YXRpYyBT
dHJpbmcgZmx1c2goTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCopIHsg
cmV0dXJuIHsgY2hhcmFjdGVycywgbGVuZ3RoIH07IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdU
RgotCi11c2luZyBXVEY6OkNTdHJpbmc7Ci11c2luZyBXVEY6OktlZXBUcmFpbGluZ1plcm9zOwot
dXNpbmcgV1RGOjpTdHJpbmc7Ci11c2luZyBXVEY6OmVtcHR5U3RyaW5nOwotdXNpbmcgV1RGOjph
cHBlbmROdW1iZXI7Ci11c2luZyBXVEY6OmNoYXJhY3RlcnNBcmVBbGxBU0NJSTsKLXVzaW5nIFdU
Rjo6Y2hhcmFjdGVyc1RvSW50U3RyaWN0OwotdXNpbmcgV1RGOjpjaGFyYWN0ZXJzVG9VSW50U3Ry
aWN0OwotdXNpbmcgV1RGOjpjaGFyYWN0ZXJzVG9JbnQ2NFN0cmljdDsKLXVzaW5nIFdURjo6Y2hh
cmFjdGVyc1RvVUludDY0U3RyaWN0OwotdXNpbmcgV1RGOjpjaGFyYWN0ZXJzVG9JbnRQdHJTdHJp
Y3Q7Ci11c2luZyBXVEY6OmNoYXJhY3RlcnNUb0ludDsKLXVzaW5nIFdURjo6Y2hhcmFjdGVyc1Rv
VUludDsKLXVzaW5nIFdURjo6Y2hhcmFjdGVyc1RvSW50NjQ7Ci11c2luZyBXVEY6OmNoYXJhY3Rl
cnNUb1VJbnQ2NDsKLXVzaW5nIFdURjo6Y2hhcmFjdGVyc1RvSW50UHRyOwotdXNpbmcgV1RGOjpj
aGFyYWN0ZXJzVG9Eb3VibGU7Ci11c2luZyBXVEY6OmNoYXJhY3RlcnNUb0Zsb2F0OwotdXNpbmcg
V1RGOjplcXVhbDsKLXVzaW5nIFdURjo6ZmluZDsKLXVzaW5nIFdURjo6aXNBbGxTcGVjaWFsQ2hh
cmFjdGVyczsKLXVzaW5nIFdURjo6aXNTcGFjZU9yTmV3bGluZTsKLXVzaW5nIFdURjo6cmV2ZXJz
ZUZpbmQ7Ci11c2luZyBXVEY6OkFTQ0lJTGl0ZXJhbDsKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oPgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi90ZXh0L2ljdS9UZXh0QnJlYWtJdGVyYXRvcklDVS5oIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvaWN1L1RleHRCcmVha0l0ZXJhdG9ySUNVLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMjczODgwMzJhOThlZDU5YjUzYzdkYWZj
ZjdiNzMxYzcyMDU4ZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvaWN1L1RleHRCcmVh
a0l0ZXJhdG9ySUNVLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgPHVuaWNvZGUvdWJyay5oPgotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyTGF0aW4xLmg+Ci0K
LW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBUZXh0QnJlYWtJdGVyYXRvcklDVSB7Ci1wdWJsaWM6
Ci0gICAgZW51bSBjbGFzcyBNb2RlIHsKLSAgICAgICAgTGluZSwKLSAgICAgICAgQ2hhcmFjdGVy
LAotICAgIH07Ci0KLSAgICB2b2lkIHNldDhCaXRUZXh0KGNvbnN0IExDaGFyKiBidWZmZXIsIHVu
c2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIFVUZXh0V2l0aEJ1ZmZlciB0ZXh0TG9jYWw7
Ci0gICAgICAgIHRleHRMb2NhbC50ZXh0ID0gVVRFWFRfSU5JVElBTElaRVI7Ci0gICAgICAgIHRl
eHRMb2NhbC50ZXh0LmV4dHJhU2l6ZSA9IHNpemVvZih0ZXh0TG9jYWwuYnVmZmVyKTsKLSAgICAg
ICAgdGV4dExvY2FsLnRleHQucEV4dHJhID0gdGV4dExvY2FsLmJ1ZmZlcjsKLQotICAgICAgICBV
RXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgVVRleHQqIHRleHQgPSBv
cGVuTGF0aW4xVVRleHRQcm92aWRlcigmdGV4dExvY2FsLCBidWZmZXIsIGxlbmd0aCwgJnN0YXR1
cyk7Ci0gICAgICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7Ci0gICAgICAgIEFTU0VSVCh0
ZXh0KTsKLQotICAgICAgICB1YnJrX3NldFVUZXh0KG1faXRlcmF0b3IsIHRleHQsICZzdGF0dXMp
OwotICAgICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOwotCi0gICAgICAgIHV0ZXh0X2Ns
b3NlKHRleHQpOwotICAgIH0KLQotICAgIFRleHRCcmVha0l0ZXJhdG9ySUNVKFN0cmluZ1ZpZXcg
c3RyaW5nLCBNb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmxvY2FsZSkKLSAgICB7Ci0gICAgICAgIFVC
cmVha0l0ZXJhdG9yVHlwZSB0eXBlOwotICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICAgICAg
Y2FzZSBNb2RlOjpMaW5lOgotICAgICAgICAgICAgdHlwZSA9IFVCUktfTElORTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZGU6OkNoYXJhY3RlcjoKLSAgICAgICAgICAgIHR5
cGUgPSBVQlJLX0NIQVJBQ1RFUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB0eXBlID0g
VUJSS19DSEFSQUNURVI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgcmVxdWlyZXNTZXQ4Qml0VGV4dCA9IHN0cmluZy5pczhCaXQoKTsKLQotICAgICAgICBj
b25zdCBVQ2hhciAqdGV4dCA9IHJlcXVpcmVzU2V0OEJpdFRleHQgPyBudWxscHRyIDogc3RyaW5n
LmNoYXJhY3RlcnMxNigpOwotICAgICAgICBpbnQzMl90IHRleHRMZW5ndGggPSByZXF1aXJlc1Nl
dDhCaXRUZXh0ID8gMCA6IHN0cmluZy5sZW5ndGgoKTsKLQotICAgICAgICAvLyBGSVhNRTogSGFu
ZGxlIHdlYWsgLyBub3JtYWwgLyBzdHJpY3QgbGluZSBicmVha2luZy4KLSAgICAgICAgVUVycm9y
Q29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIG1faXRlcmF0b3IgPSB1YnJrX29w
ZW4odHlwZSwgbG9jYWxlLCB0ZXh0LCB0ZXh0TGVuZ3RoLCAmc3RhdHVzKTsKLSAgICAgICAgQVNT
RVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKLQotICAgICAgICBpZiAocmVxdWlyZXNTZXQ4Qml0VGV4
dCkKLSAgICAgICAgICAgIHNldDhCaXRUZXh0KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcu
bGVuZ3RoKCkpOwotICAgIH0KLQotICAgIFRleHRCcmVha0l0ZXJhdG9ySUNVKCkgPSBkZWxldGU7
Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3JJQ1UoY29uc3QgVGV4dEJyZWFrSXRlcmF0b3JJQ1UmKSA9
IGRlbGV0ZTsKLQotICAgIFRleHRCcmVha0l0ZXJhdG9ySUNVKFRleHRCcmVha0l0ZXJhdG9ySUNV
JiYgb3RoZXIpCi0gICAgICAgIDogbV9pdGVyYXRvcihvdGhlci5tX2l0ZXJhdG9yKQotICAgIHsK
LSAgICAgICAgb3RoZXIubV9pdGVyYXRvciA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgVGV4dEJy
ZWFrSXRlcmF0b3JJQ1UmIG9wZXJhdG9yPShjb25zdCBUZXh0QnJlYWtJdGVyYXRvcklDVSYpID0g
ZGVsZXRlOwotCi0gICAgVGV4dEJyZWFrSXRlcmF0b3JJQ1UmIG9wZXJhdG9yPShUZXh0QnJlYWtJ
dGVyYXRvcklDVSYmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKG1faXRlcmF0b3IpCi0gICAg
ICAgICAgICB1YnJrX2Nsb3NlKG1faXRlcmF0b3IpOwotICAgICAgICBtX2l0ZXJhdG9yID0gb3Ro
ZXIubV9pdGVyYXRvcjsKLSAgICAgICAgb3RoZXIubV9pdGVyYXRvciA9IG51bGxwdHI7Ci0gICAg
ICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICB+VGV4dEJyZWFrSXRlcmF0b3JJQ1UoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1faXRlcmF0b3IpCi0gICAgICAgICAgICB1YnJrX2Nsb3NlKG1f
aXRlcmF0b3IpOwotICAgIH0KLQotICAgIHZvaWQgc2V0VGV4dChTdHJpbmdWaWV3IHN0cmluZykK
LSAgICB7Ci0gICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpIHsKLSAgICAgICAgICAgIHNldDhC
aXRUZXh0KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJP
X0VSUk9SOwotICAgICAgICB1YnJrX3NldFRleHQobV9pdGVyYXRvciwgc3RyaW5nLmNoYXJhY3Rl
cnMxNigpLCBzdHJpbmcubGVuZ3RoKCksICZzdGF0dXMpOwotICAgICAgICBBU1NFUlQoVV9TVUND
RVNTKHN0YXR1cykpOwotICAgIH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHByZWNl
ZGluZyh1bnNpZ25lZCBsb2NhdGlvbikgY29uc3QKLSAgICB7Ci0gICAgICAgIGF1dG8gcmVzdWx0
ID0gdWJya19wcmVjZWRpbmcobV9pdGVyYXRvciwgbG9jYXRpb24pOwotICAgICAgICBpZiAocmVz
dWx0ID09IFVCUktfRE9ORSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZm9sbG93aW5n
KHVuc2lnbmVkIGxvY2F0aW9uKSBjb25zdAotICAgIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSB1
YnJrX2ZvbGxvd2luZyhtX2l0ZXJhdG9yLCBsb2NhdGlvbik7Ci0gICAgICAgIGlmIChyZXN1bHQg
PT0gVUJSS19ET05FKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0KLSAgICBib29sIGlzQm91bmRhcnkodW5zaWduZWQgbG9jYXRpb24pIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdWJya19pc0JvdW5kYXJ5KG1faXRlcmF0b3IsIGxv
Y2F0aW9uKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgVUJyZWFrSXRlcmF0b3IqIG1faXRlcmF0
b3I7Ci19OwotCi19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93
dGYvdGV4dC9pY3UvVVRleHRQcm92aWRlci5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvdGV4dC9pY3UvVVRleHRQcm92aWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDczODhmZGJmN2NhNDliYTY1OTg5NDM3N2YyYjFjNTZhZGFkMGRlY2EuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvaWN1L1VUZXh0UHJvdmlkZXIuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJVVGV4dFByb3ZpZGVyLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVk
ZSA8c3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0vLyBSZWxvY2F0ZSBwb2ludGVyIGZy
b20gc291cmNlIGludG8gZGVzdGluYXRpb24gYXMgcmVxdWlyZWQuCi1zdGF0aWMgaW5saW5lIHZv
aWQgZml4UG9pbnRlcihjb25zdCBVVGV4dCogc291cmNlLCBVVGV4dCogZGVzdGluYXRpb24sIGNv
bnN0IHZvaWQqJiBwb2ludGVyKQotewotICAgIGlmIChwb2ludGVyID49IHNvdXJjZS0+cEV4dHJh
ICYmIHBvaW50ZXIgPCBzdGF0aWNfY2FzdDxjaGFyKj4oc291cmNlLT5wRXh0cmEpICsgc291cmNl
LT5leHRyYVNpemUpIHsKLSAgICAgICAgLy8gUG9pbnRlciByZWZlcmVuY2VzIHNvdXJjZSBleHRy
YSBidWZmZXIuCi0gICAgICAgIHBvaW50ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZGVzdGluYXRp
b24tPnBFeHRyYSkgKyAoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHBvaW50ZXIpIC0gc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KHNvdXJjZS0+cEV4dHJhKSk7Ci0gICAgfSBlbHNlIGlmIChwb2lu
dGVyID49IHNvdXJjZSAmJiBwb2ludGVyIDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
c291cmNlKSArIHNvdXJjZS0+c2l6ZU9mU3RydWN0KSB7Ci0gICAgICAgIC8vIFBvaW50ZXIgcmVm
ZXJlbmNlcyBzb3VyY2UgdGV4dCBzdHJ1Y3R1cmUsIGJ1dCBub3Qgc291cmNlIGV4dHJhIGJ1ZmZl
ci4KLSAgICAgICAgcG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRlc3RpbmF0aW9u
KSArIChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ocG9pbnRlcikgLSByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihzb3VyY2UpKTsKLSAgICB9Ci19Ci0KLVVUZXh0KiB1VGV4dENsb25lSW1w
bChVVGV4dCogZGVzdGluYXRpb24sIGNvbnN0IFVUZXh0KiBzb3VyY2UsIFVCb29sIGRlZXAsIFVF
cnJvckNvZGUqIHN0YXR1cykKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGRlZXAsICFkZWVwKTsKLSAg
ICBpZiAoVV9GQUlMVVJFKCpzdGF0dXMpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBp
bnQzMl90IGV4dHJhU2l6ZSA9IHNvdXJjZS0+ZXh0cmFTaXplOwotICAgIGRlc3RpbmF0aW9uID0g
dXRleHRfc2V0dXAoZGVzdGluYXRpb24sIGV4dHJhU2l6ZSwgc3RhdHVzKTsKLSAgICBpZiAoVV9G
QUlMVVJFKCpzdGF0dXMpKQotICAgICAgICByZXR1cm4gZGVzdGluYXRpb247Ci0gICAgdm9pZCog
ZXh0cmFOZXcgPSBkZXN0aW5hdGlvbi0+cEV4dHJhOwotICAgIGludDMyX3QgZmxhZ3MgPSBkZXN0
aW5hdGlvbi0+ZmxhZ3M7Ci0gICAgaW50IHNpemVUb0NvcHkgPSBzdGQ6Om1pbihzb3VyY2UtPnNp
emVPZlN0cnVjdCwgZGVzdGluYXRpb24tPnNpemVPZlN0cnVjdCk7Ci0gICAgbWVtY3B5KGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHNpemVUb0NvcHkpOwotICAgIGRlc3RpbmF0aW9uLT5wRXh0cmEgPSBl
eHRyYU5ldzsKLSAgICBkZXN0aW5hdGlvbi0+ZmxhZ3MgPSBmbGFnczsKLSAgICBtZW1jcHkoZGVz
dGluYXRpb24tPnBFeHRyYSwgc291cmNlLT5wRXh0cmEsIGV4dHJhU2l6ZSk7Ci0gICAgZml4UG9p
bnRlcihzb3VyY2UsIGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbi0+Y29udGV4dCk7Ci0gICAgZml4
UG9pbnRlcihzb3VyY2UsIGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbi0+cCk7Ci0gICAgZml4UG9p
bnRlcihzb3VyY2UsIGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbi0+cSk7Ci0gICAgQVNTRVJUKCFk
ZXN0aW5hdGlvbi0+cik7Ci0gICAgY29uc3Qgdm9pZCogY2h1bmtDb250ZW50cyA9IHN0YXRpY19j
YXN0PGNvbnN0IHZvaWQqPihkZXN0aW5hdGlvbi0+Y2h1bmtDb250ZW50cyk7Ci0gICAgZml4UG9p
bnRlcihzb3VyY2UsIGRlc3RpbmF0aW9uLCBjaHVua0NvbnRlbnRzKTsKLSAgICBkZXN0aW5hdGlv
bi0+Y2h1bmtDb250ZW50cyA9IHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4oY2h1bmtDb250ZW50
cyk7Ci0gICAgcmV0dXJuIGRlc3RpbmF0aW9uOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L2ljdS9VVGV4
dFByb3ZpZGVyLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9pY3Uv
VVRleHRQcm92aWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWRhYWM1MWM0
MWYxYjgyNmE4YmEzZjE0ODkzOGU1ODBhODE3MTU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90
ZXh0L2ljdS9VVGV4dFByb3ZpZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgVVRleHRQcm92aWRlcl9oCi0jZGVmaW5lIFVUZXh0UHJvdmlk
ZXJfaAotCi0jaW5jbHVkZSA8dW5pY29kZS91dGV4dC5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1lbnVtIGNsYXNzIFVUZXh0UHJvdmlkZXJDb250
ZXh0IHsKLSAgICBOb0NvbnRleHQsCi0gICAgUHJpb3JDb250ZXh0LAotICAgIFByaW1hcnlDb250
ZXh0Ci19OwotCi1pbmxpbmUgVVRleHRQcm92aWRlckNvbnRleHQgdVRleHRQcm92aWRlckNvbnRl
eHQoY29uc3QgVVRleHQqIHRleHQsIGludDY0X3QgbmF0aXZlSW5kZXgsIFVCb29sIGZvcndhcmQp
Ci17Ci0gICAgaWYgKCF0ZXh0LT5iIHx8IG5hdGl2ZUluZGV4ID4gdGV4dC0+YikKLSAgICAgICAg
cmV0dXJuIFVUZXh0UHJvdmlkZXJDb250ZXh0OjpQcmltYXJ5Q29udGV4dDsKLSAgICBpZiAobmF0
aXZlSW5kZXggPT0gdGV4dC0+YikKLSAgICAgICAgcmV0dXJuIGZvcndhcmQgPyBVVGV4dFByb3Zp
ZGVyQ29udGV4dDo6UHJpbWFyeUNvbnRleHQgOiBVVGV4dFByb3ZpZGVyQ29udGV4dDo6UHJpb3JD
b250ZXh0OwotICAgIHJldHVybiBVVGV4dFByb3ZpZGVyQ29udGV4dDo6UHJpb3JDb250ZXh0Owot
fQotCi1pbmxpbmUgdm9pZCBpbml0aWFsaXplQ29udGV4dEF3YXJlVVRleHRQcm92aWRlcihVVGV4
dCogdGV4dCwgY29uc3QgVVRleHRGdW5jcyogZnVuY3MsIGNvbnN0IHZvaWQqIHN0cmluZywgdW5z
aWduZWQgbGVuZ3RoLCBjb25zdCBVQ2hhciogcHJpb3JDb250ZXh0LCBpbnQgcHJpb3JDb250ZXh0
TGVuZ3RoKQotewotICAgIHRleHQtPnBGdW5jcyA9IGZ1bmNzOwotICAgIHRleHQtPnByb3ZpZGVy
UHJvcGVydGllcyA9IDEgPDwgVVRFWFRfUFJPVklERVJfU1RBQkxFX0NIVU5LUzsKLSAgICB0ZXh0
LT5jb250ZXh0ID0gc3RyaW5nOwotICAgIHRleHQtPnAgPSBzdHJpbmc7Ci0gICAgdGV4dC0+YSA9
IGxlbmd0aDsKLSAgICB0ZXh0LT5xID0gcHJpb3JDb250ZXh0OwotICAgIHRleHQtPmIgPSBwcmlv
ckNvbnRleHRMZW5ndGg7Ci19Ci0KLS8vIFNoYXJlZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIFVU
ZXh0Q2xvbmUgZnVuY3Rpb24gb24gVVRleHRGdW5jcy4KLQotVVRleHQqIHVUZXh0Q2xvbmVJbXBs
KFVUZXh0KiBkZXN0aW5hdGlvbiwgY29uc3QgVVRleHQqIHNvdXJjZSwgVUJvb2wgZGVlcCwgVUVy
cm9yQ29kZSogc3RhdHVzKTsKLQotCi0vLyBIZWxwZXJzIGZvciB0aGUgVVRleHRBY2Nlc3MgZnVu
Y3Rpb24gb24gVVRleHRGdW5jcy4KLQotaW5saW5lIGludDY0X3QgdVRleHRBY2Nlc3NQaW5JbmRl
eChpbnQ2NF90JiBpbmRleCwgaW50NjRfdCBsaW1pdCkKLXsKLSAgICBpZiAoaW5kZXggPCAwKQot
ICAgICAgICBpbmRleCA9IDA7Ci0gICAgZWxzZSBpZiAoaW5kZXggPiBsaW1pdCkKLSAgICAgICAg
aW5kZXggPSBsaW1pdDsKLSAgICByZXR1cm4gaW5kZXg7Ci19Ci0KLWlubGluZSBib29sIHVUZXh0
QWNjZXNzSW5DaHVua09yT3V0T2ZSYW5nZShVVGV4dCogdGV4dCwgaW50NjRfdCBuYXRpdmVJbmRl
eCwgaW50NjRfdCBuYXRpdmVMZW5ndGgsIFVCb29sIGZvcndhcmQsIFVCb29sJiBpc0FjY2Vzc2li
bGUpCi17Ci0gICAgaWYgKGZvcndhcmQpIHsKLSAgICAgICAgaWYgKG5hdGl2ZUluZGV4ID49IHRl
eHQtPmNodW5rTmF0aXZlU3RhcnQgJiYgbmF0aXZlSW5kZXggPCB0ZXh0LT5jaHVua05hdGl2ZUxp
bWl0KSB7Ci0gICAgICAgICAgICBpbnQ2NF90IG9mZnNldCA9IG5hdGl2ZUluZGV4IC0gdGV4dC0+
Y2h1bmtOYXRpdmVTdGFydDsKLSAgICAgICAgICAgIC8vIEVuc3VyZSBjaHVuayBvZmZzZXQgaXMg
d2VsbCBmb3JtZWQgaWYgY29tcHV0ZWQgb2Zmc2V0IGV4Y2VlZHMgaW50MzJfdCByYW5nZS4KLSAg
ICAgICAgICAgIEFTU0VSVChvZmZzZXQgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
YXgoKSk7Ci0gICAgICAgICAgICB0ZXh0LT5jaHVua09mZnNldCA9IG9mZnNldCA8IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpID8gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0
KSA6IDA7Ci0gICAgICAgICAgICBpc0FjY2Vzc2libGUgPSBUUlVFOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5hdGl2ZUluZGV4ID49IG5hdGl2ZUxl
bmd0aCAmJiB0ZXh0LT5jaHVua05hdGl2ZUxpbWl0ID09IG5hdGl2ZUxlbmd0aCkgewotICAgICAg
ICAgICAgdGV4dC0+Y2h1bmtPZmZzZXQgPSB0ZXh0LT5jaHVua0xlbmd0aDsKLSAgICAgICAgICAg
IGlzQWNjZXNzaWJsZSA9IEZBTFNFOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobmF0aXZlSW5kZXggPiB0ZXh0LT5jaHVua05h
dGl2ZVN0YXJ0ICYmIG5hdGl2ZUluZGV4IDw9IHRleHQtPmNodW5rTmF0aXZlTGltaXQpIHsKLSAg
ICAgICAgICAgIGludDY0X3Qgb2Zmc2V0ID0gbmF0aXZlSW5kZXggLSB0ZXh0LT5jaHVua05hdGl2
ZVN0YXJ0OwotICAgICAgICAgICAgLy8gRW5zdXJlIGNodW5rIG9mZnNldCBpcyB3ZWxsIGZvcm1l
ZCBpZiBjb21wdXRlZCBvZmZzZXQgZXhjZWVkcyBpbnQzMl90IHJhbmdlLgotICAgICAgICAgICAg
QVNTRVJUKG9mZnNldCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKTsKLSAg
ICAgICAgICAgIHRleHQtPmNodW5rT2Zmc2V0ID0gb2Zmc2V0IDwgc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWF4KCkgPyBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXQpIDogMDsKLSAg
ICAgICAgICAgIGlzQWNjZXNzaWJsZSA9IFRSVUU7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAobmF0aXZlSW5kZXggPD0gMCAmJiAhdGV4dC0+Y2h1bmtO
YXRpdmVTdGFydCkgewotICAgICAgICAgICAgdGV4dC0+Y2h1bmtPZmZzZXQgPSAwOwotICAgICAg
ICAgICAgaXNBY2Nlc3NpYmxlID0gRkFMU0U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdU
RgotCi0jZW5kaWYgLy8gVVRleHRQcm92aWRlcl9oCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9pY3UvVVRleHRQcm92aWRlckxhdGluMS5jcHAgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9pY3UvVVRleHRQcm92aWRlckxh
dGluMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YTBlMWU4NjRiMjk3MTQ4
MWUzMDljNDM1NGU0MzEwNjFiNDVjN2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3RleHQvaWN1
L1VUZXh0UHJvdmlkZXJMYXRpbjEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVVRleHRQcm92aWRl
ckxhdGluMS5oIgotCi0jaW5jbHVkZSAiVVRleHRQcm92aWRlci5oIgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0ltcGwuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIExhdGluMSBwcm92aWRl
cgotCi1zdGF0aWMgVVRleHQqIHVUZXh0TGF0aW4xQ2xvbmUoVVRleHQqLCBjb25zdCBVVGV4dCos
IFVCb29sLCBVRXJyb3JDb2RlKik7Ci1zdGF0aWMgaW50NjRfdCB1VGV4dExhdGluMU5hdGl2ZUxl
bmd0aChVVGV4dCopOwotc3RhdGljIFVCb29sIHVUZXh0TGF0aW4xQWNjZXNzKFVUZXh0KiwgaW50
NjRfdCwgVUJvb2wpOwotc3RhdGljIGludDMyX3QgdVRleHRMYXRpbjFFeHRyYWN0KFVUZXh0Kiwg
aW50NjRfdCwgaW50NjRfdCwgVUNoYXIqLCBpbnQzMl90LCBVRXJyb3JDb2RlKik7Ci1zdGF0aWMg
aW50NjRfdCB1VGV4dExhdGluMU1hcE9mZnNldFRvTmF0aXZlKGNvbnN0IFVUZXh0Kik7Ci1zdGF0
aWMgaW50MzJfdCB1VGV4dExhdGluMU1hcE5hdGl2ZUluZGV4VG9VVEYxNihjb25zdCBVVGV4dCos
IGludDY0X3QpOwotc3RhdGljIHZvaWQgdVRleHRMYXRpbjFDbG9zZShVVGV4dCopOwotCi1zdGF0
aWMgY29uc3Qgc3RydWN0IFVUZXh0RnVuY3MgdVRleHRMYXRpbjFGdW5jcyA9IHsKLSAgICBzaXpl
b2YoVVRleHRGdW5jcyksCi0gICAgMCwKLSAgICAwLAotICAgIDAsCi0gICAgdVRleHRMYXRpbjFD
bG9uZSwKLSAgICB1VGV4dExhdGluMU5hdGl2ZUxlbmd0aCwKLSAgICB1VGV4dExhdGluMUFjY2Vz
cywKLSAgICB1VGV4dExhdGluMUV4dHJhY3QsCi0gICAgbnVsbHB0ciwKLSAgICBudWxscHRyLAot
ICAgIHVUZXh0TGF0aW4xTWFwT2Zmc2V0VG9OYXRpdmUsCi0gICAgdVRleHRMYXRpbjFNYXBOYXRp
dmVJbmRleFRvVVRGMTYsCi0gICAgdVRleHRMYXRpbjFDbG9zZSwKLSAgICBudWxscHRyLAotICAg
IG51bGxwdHIsCi0gICAgbnVsbHB0cgotfTsKLQotc3RhdGljIFVUZXh0KiB1VGV4dExhdGluMUNs
b25lKFVUZXh0KiBkZXN0aW5hdGlvbiwgY29uc3QgVVRleHQqIHNvdXJjZSwgVUJvb2wgZGVlcCwg
VUVycm9yQ29kZSogc3RhdHVzKQotewotICAgIEFTU0VSVF9VTlVTRUQoZGVlcCwgIWRlZXApOwot
Ci0gICAgaWYgKFVfRkFJTFVSRSgqc3RhdHVzKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBV
VGV4dCogcmVzdWx0ID0gdXRleHRfc2V0dXAoZGVzdGluYXRpb24sIHNpemVvZihVQ2hhcikgKiBV
VGV4dFdpdGhCdWZmZXJJbmxpbmVDYXBhY2l0eSwgc3RhdHVzKTsKLSAgICBpZiAoVV9GQUlMVVJF
KCpzdGF0dXMpKQotICAgICAgICByZXR1cm4gZGVzdGluYXRpb247Ci0gICAgCi0gICAgcmVzdWx0
LT5wcm92aWRlclByb3BlcnRpZXMgPSBzb3VyY2UtPnByb3ZpZGVyUHJvcGVydGllczsKLSAgICAK
LSAgICAvLyBQb2ludCBhdCB0aGUgc2FtZSBwb3NpdGlvbiwgYnV0IHdpdGggYW4gZW1wdHkgYnVm
ZmVyLgotICAgIHJlc3VsdC0+Y2h1bmtOYXRpdmVTdGFydCA9IHNvdXJjZS0+Y2h1bmtOYXRpdmVT
dGFydDsKLSAgICByZXN1bHQtPmNodW5rTmF0aXZlTGltaXQgPSBzb3VyY2UtPmNodW5rTmF0aXZl
U3RhcnQ7Ci0gICAgcmVzdWx0LT5uYXRpdmVJbmRleGluZ0xpbWl0ID0gc3RhdGljX2Nhc3Q8aW50
MzJfdD4oc291cmNlLT5jaHVua05hdGl2ZVN0YXJ0KTsKLSAgICByZXN1bHQtPmNodW5rT2Zmc2V0
ID0gMDsKLSAgICByZXN1bHQtPmNvbnRleHQgPSBzb3VyY2UtPmNvbnRleHQ7Ci0gICAgcmVzdWx0
LT5hID0gc291cmNlLT5hOwotICAgIHJlc3VsdC0+cEZ1bmNzID0gJnVUZXh0TGF0aW4xRnVuY3M7
Ci0gICAgcmVzdWx0LT5jaHVua0NvbnRlbnRzID0gKFVDaGFyKilyZXN1bHQtPnBFeHRyYTsKLSAg
ICBtZW1zZXQoY29uc3RfY2FzdDxVQ2hhcio+KHJlc3VsdC0+Y2h1bmtDb250ZW50cyksIDAsIHNp
emVvZihVQ2hhcikgKiBVVGV4dFdpdGhCdWZmZXJJbmxpbmVDYXBhY2l0eSk7Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW50NjRfdCB1VGV4dExhdGluMU5hdGl2ZUxlbmd0aChV
VGV4dCogdVRleHQpCi17Ci0gICAgcmV0dXJuIHVUZXh0LT5hOwotfQotCi1zdGF0aWMgVUJvb2wg
dVRleHRMYXRpbjFBY2Nlc3MoVVRleHQqIHVUZXh0LCBpbnQ2NF90IGluZGV4LCBVQm9vbCBmb3J3
YXJkKQotewotICAgIGludDY0X3QgbGVuZ3RoID0gdVRleHQtPmE7Ci0KLSAgICBpZiAoZm9yd2Fy
ZCkgewotICAgICAgICBpZiAoaW5kZXggPCB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCAmJiBpbmRl
eCA+PSB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCkgewotICAgICAgICAgICAgLy8gQWxyZWFkeSBp
bnNpZGUgdGhlIGJ1ZmZlci4gU2V0IHRoZSBuZXcgb2Zmc2V0LgotICAgICAgICAgICAgdVRleHQt
PmNodW5rT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oaW5kZXggLSB1VGV4dC0+Y2h1bmtO
YXRpdmVTdGFydCk7Ci0gICAgICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoaW5kZXggPj0gbGVuZ3RoICYmIHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ID09IGxlbmd0
aCkgewotICAgICAgICAgICAgLy8gT2ZmIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgYnV0IHdlIGNh
bid0IGdldCBpdC4KLSAgICAgICAgICAgIHVUZXh0LT5jaHVua09mZnNldCA9IHN0YXRpY19jYXN0
PGludDMyX3Q+KGluZGV4IC0gdVRleHQtPmNodW5rTmF0aXZlU3RhcnQpOwotICAgICAgICAgICAg
cmV0dXJuIEZBTFNFOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGluZGV4
IDw9IHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ICYmIGluZGV4ID4gdVRleHQtPmNodW5rTmF0aXZl
U3RhcnQpIHsKLSAgICAgICAgICAgIC8vIEFscmVhZHkgaW5zaWRlIHRoZSBidWZmZXIuIFNldCB0
aGUgbmV3IG9mZnNldC4KLSAgICAgICAgICAgIHVUZXh0LT5jaHVua09mZnNldCA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KGluZGV4IC0gdVRleHQtPmNodW5rTmF0aXZlU3RhcnQpOwotICAgICAgICAg
ICAgcmV0dXJuIFRSVUU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFpbmRleCAmJiAhdVRleHQt
PmNodW5rTmF0aXZlU3RhcnQpIHsKLSAgICAgICAgICAgIC8vIEFscmVhZHkgYXQgdGhlIGJlZ2lu
bmluZzsgY2FuJ3QgZ28gYW55IGZhcnRoZXIuCi0gICAgICAgICAgICB1VGV4dC0+Y2h1bmtPZmZz
ZXQgPSAwOwotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIGlmIChmb3J3YXJkKSB7Ci0gICAgICAgIHVUZXh0LT5jaHVua05hdGl2ZVN0YXJ0ID0g
aW5kZXg7Ci0gICAgICAgIHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0ID0gdVRleHQtPmNodW5rTmF0
aXZlU3RhcnQgKyBVVGV4dFdpdGhCdWZmZXJJbmxpbmVDYXBhY2l0eTsKLSAgICAgICAgaWYgKHVU
ZXh0LT5jaHVua05hdGl2ZUxpbWl0ID4gbGVuZ3RoKQotICAgICAgICAgICAgdVRleHQtPmNodW5r
TmF0aXZlTGltaXQgPSBsZW5ndGg7Ci0KLSAgICAgICAgdVRleHQtPmNodW5rT2Zmc2V0ID0gMDsK
LSAgICB9IGVsc2UgewotICAgICAgICB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCA9IGluZGV4Owot
ICAgICAgICBpZiAodVRleHQtPmNodW5rTmF0aXZlTGltaXQgPiBsZW5ndGgpCi0gICAgICAgICAg
ICB1VGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCA9IGxlbmd0aDsKLQotICAgICAgICB1VGV4dC0+Y2h1
bmtOYXRpdmVTdGFydCA9IHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0IC0gVVRleHRXaXRoQnVmZmVy
SW5saW5lQ2FwYWNpdHk7Ci0gICAgICAgIGlmICh1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCA8IDAp
Ci0gICAgICAgICAgICB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCA9IDA7Ci0KLSAgICAgICAgdVRl
eHQtPmNodW5rT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oaW5kZXggLSB1VGV4dC0+Y2h1
bmtOYXRpdmVTdGFydCk7Ci0gICAgfQotICAgIHVUZXh0LT5jaHVua0xlbmd0aCA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0IC0gdVRleHQtPmNodW5rTmF0aXZl
U3RhcnQpOwotCi0gICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGNvbnN0X2Nhc3Q8VUNoYXIqPih1
VGV4dC0+Y2h1bmtDb250ZW50cyksIHN0YXRpY19jYXN0PGNvbnN0IExDaGFyKj4odVRleHQtPmNv
bnRleHQpICsgdVRleHQtPmNodW5rTmF0aXZlU3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih1
VGV4dC0+Y2h1bmtMZW5ndGgpKTsKLQotICAgIHVUZXh0LT5uYXRpdmVJbmRleGluZ0xpbWl0ID0g
dVRleHQtPmNodW5rTGVuZ3RoOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBpbnQz
Ml90IHVUZXh0TGF0aW4xRXh0cmFjdChVVGV4dCogdVRleHQsIGludDY0X3Qgc3RhcnQsIGludDY0
X3QgbGltaXQsIFVDaGFyKiBkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwgVUVycm9yQ29kZSog
c3RhdHVzKQotewotICAgIGludDY0X3QgbGVuZ3RoID0gdVRleHQtPmE7Ci0gICAgaWYgKFVfRkFJ
TFVSRSgqc3RhdHVzKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZGVzdENhcGFjaXR5
IDwgMCB8fCAoIWRlc3QgJiYgZGVzdENhcGFjaXR5ID4gMCkpIHsKLSAgICAgICAgKnN0YXR1cyA9
IFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+IGxpbWl0IHx8IChsaW1pdCAtIHN0YXJ0KSA+IElO
VDMyX01BWCkgewotICAgICAgICAqc3RhdHVzID0gVV9JTkRFWF9PVVRPRkJPVU5EU19FUlJPUjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKHN0YXJ0ID4gbGVuZ3RoKQotICAg
ICAgICBzdGFydCA9IGxlbmd0aDsKLSAgICBpZiAobGltaXQgPiBsZW5ndGgpCi0gICAgICAgIGxp
bWl0ID0gbGVuZ3RoOwotCi0gICAgbGVuZ3RoID0gbGltaXQgLSBzdGFydDsKLSAgICAKLSAgICBp
ZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZGVzdENhcGFjaXR5ID4g
MCAmJiAhZGVzdCkgewotICAgICAgICBpbnQzMl90IHRyaW1tZWRMZW5ndGggPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihsZW5ndGgpOwotICAgICAgICBpZiAodHJpbW1lZExlbmd0aCA+IGRlc3RDYXBh
Y2l0eSkKLSAgICAgICAgICAgIHRyaW1tZWRMZW5ndGggPSBkZXN0Q2FwYWNpdHk7Ci0KLSAgICAg
ICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGRlc3QsIHN0YXRpY19jYXN0PGNvbnN0IExDaGFyKj4o
dVRleHQtPmNvbnRleHQpICsgc3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0cmltbWVkTGVu
Z3RoKSk7Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCA8IGRlc3RDYXBhY2l0eSkgewotICAgICAg
ICBkZXN0W2xlbmd0aF0gPSAwOwotICAgICAgICBpZiAoKnN0YXR1cyA9PSBVX1NUUklOR19OT1Rf
VEVSTUlOQVRFRF9XQVJOSU5HKQotICAgICAgICAgICAgKnN0YXR1cyA9IFVfWkVST19FUlJPUjsK
LSAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSBkZXN0Q2FwYWNpdHkpCi0gICAgICAgICpzdGF0dXMg
PSBVX1NUUklOR19OT1RfVEVSTUlOQVRFRF9XQVJOSU5HOwotICAgIGVsc2UKLSAgICAgICAgKnN0
YXR1cyA9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludDMyX3Q+KGxlbmd0aCk7Ci19Ci0KLXN0YXRpYyBpbnQ2NF90IHVUZXh0TGF0aW4xTWFwT2Zm
c2V0VG9OYXRpdmUoY29uc3QgVVRleHQqIHVUZXh0KQotewotICAgIHJldHVybiB1VGV4dC0+Y2h1
bmtOYXRpdmVTdGFydCArIHVUZXh0LT5jaHVua09mZnNldDsKLX0KLQotc3RhdGljIGludDMyX3Qg
dVRleHRMYXRpbjFNYXBOYXRpdmVJbmRleFRvVVRGMTYoY29uc3QgVVRleHQqIHVUZXh0LCBpbnQ2
NF90IG5hdGl2ZUluZGV4KQotewotICAgIEFTU0VSVF9VTlVTRUQodVRleHQsIHVUZXh0LT5jaHVu
a05hdGl2ZVN0YXJ0ID49IG5hdGl2ZUluZGV4KTsKLSAgICBBU1NFUlRfVU5VU0VEKHVUZXh0LCBu
YXRpdmVJbmRleCA8IHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0KTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obmF0aXZlSW5kZXgpOwotfQotCi1zdGF0aWMgdm9pZCB1VGV4dExhdGlu
MUNsb3NlKFVUZXh0KiB1VGV4dCkKLXsKLSAgICB1VGV4dC0+Y29udGV4dCA9IG51bGxwdHI7Ci19
Ci0KLVVUZXh0KiBvcGVuTGF0aW4xVVRleHRQcm92aWRlcihVVGV4dFdpdGhCdWZmZXIqIHV0V2l0
aEJ1ZmZlciwgY29uc3QgTENoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVRXJyb3JDb2Rl
KiBzdGF0dXMpCi17Ci0gICAgaWYgKFVfRkFJTFVSRSgqc3RhdHVzKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgaWYgKCFzdHJpbmcgfHwgbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgewotICAgICAgICAqc3Rh
dHVzID0gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0gICAgVVRleHQqIHRleHQgPSB1dGV4dF9zZXR1cCgmdXRXaXRoQnVmZmVyLT50ZXh0
LCBzaXplb2YodXRXaXRoQnVmZmVyLT5idWZmZXIpLCBzdGF0dXMpOwotICAgIGlmIChVX0ZBSUxV
UkUoKnN0YXR1cykpIHsKLSAgICAgICAgQVNTRVJUKCF0ZXh0KTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgdGV4dC0+Y29udGV4dCA9IHN0cmluZzsKLSAgICB0ZXh0LT5h
ID0gbGVuZ3RoOwotICAgIHRleHQtPnBGdW5jcyA9ICZ1VGV4dExhdGluMUZ1bmNzOwotICAgIHRl
eHQtPmNodW5rQ29udGVudHMgPSAoVUNoYXIqKXRleHQtPnBFeHRyYTsKLSAgICBtZW1zZXQoY29u
c3RfY2FzdDxVQ2hhcio+KHRleHQtPmNodW5rQ29udGVudHMpLCAwLCBzaXplb2YoVUNoYXIpICog
VVRleHRXaXRoQnVmZmVySW5saW5lQ2FwYWNpdHkpOwotCi0gICAgcmV0dXJuIHRleHQ7Ci19Ci0K
LQotLy8gTGF0aW4xQ29udGV4dEF3YXJlIHByb3ZpZGVyCi0KLXN0YXRpYyBVVGV4dCogdVRleHRM
YXRpbjFDb250ZXh0QXdhcmVDbG9uZShVVGV4dCosIGNvbnN0IFVUZXh0KiwgVUJvb2wsIFVFcnJv
ckNvZGUqKTsKLXN0YXRpYyBpbnQ2NF90IHVUZXh0TGF0aW4xQ29udGV4dEF3YXJlTmF0aXZlTGVu
Z3RoKFVUZXh0Kik7Ci1zdGF0aWMgVUJvb2wgdVRleHRMYXRpbjFDb250ZXh0QXdhcmVBY2Nlc3Mo
VVRleHQqLCBpbnQ2NF90LCBVQm9vbCk7Ci1zdGF0aWMgaW50MzJfdCB1VGV4dExhdGluMUNvbnRl
eHRBd2FyZUV4dHJhY3QoVVRleHQqLCBpbnQ2NF90LCBpbnQ2NF90LCBVQ2hhciosIGludDMyX3Qs
IFVFcnJvckNvZGUqKTsKLXN0YXRpYyB2b2lkIHVUZXh0TGF0aW4xQ29udGV4dEF3YXJlQ2xvc2Uo
VVRleHQqKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBVVGV4dEZ1bmNzIHRleHRMYXRpbjFDb250
ZXh0QXdhcmVGdW5jcyA9IHsKLSAgICBzaXplb2YoVVRleHRGdW5jcyksCi0gICAgMCwKLSAgICAw
LAotICAgIDAsCi0gICAgdVRleHRMYXRpbjFDb250ZXh0QXdhcmVDbG9uZSwKLSAgICB1VGV4dExh
dGluMUNvbnRleHRBd2FyZU5hdGl2ZUxlbmd0aCwKLSAgICB1VGV4dExhdGluMUNvbnRleHRBd2Fy
ZUFjY2VzcywKLSAgICB1VGV4dExhdGluMUNvbnRleHRBd2FyZUV4dHJhY3QsCi0gICAgbnVsbHB0
ciwKLSAgICBudWxscHRyLAotICAgIG51bGxwdHIsCi0gICAgbnVsbHB0ciwKLSAgICB1VGV4dExh
dGluMUNvbnRleHRBd2FyZUNsb3NlLAotICAgIG51bGxwdHIsCi0gICAgbnVsbHB0ciwKLSAgICBu
dWxscHRyCi19OwotCi1zdGF0aWMgaW5saW5lIFVUZXh0UHJvdmlkZXJDb250ZXh0IHRleHRMYXRp
bjFDb250ZXh0QXdhcmVHZXRDdXJyZW50Q29udGV4dChjb25zdCBVVGV4dCogdGV4dCkKLXsKLSAg
ICBpZiAoIXRleHQtPmNodW5rQ29udGVudHMpCi0gICAgICAgIHJldHVybiBVVGV4dFByb3ZpZGVy
Q29udGV4dDo6Tm9Db250ZXh0OwotICAgIHJldHVybiB0ZXh0LT5jaHVua0NvbnRlbnRzID09IHRl
eHQtPnBFeHRyYSA/IFVUZXh0UHJvdmlkZXJDb250ZXh0OjpQcmltYXJ5Q29udGV4dCA6IFVUZXh0
UHJvdmlkZXJDb250ZXh0OjpQcmlvckNvbnRleHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHRleHRMYXRp
bjFDb250ZXh0QXdhcmVNb3ZlSW5QcmltYXJ5Q29udGV4dChVVGV4dCogdGV4dCwgaW50NjRfdCBu
YXRpdmVJbmRleCwgaW50NjRfdCBuYXRpdmVMZW5ndGgsIFVCb29sIGZvcndhcmQpCi17Ci0gICAg
QVNTRVJUKHRleHQtPmNodW5rQ29udGVudHMgPT0gdGV4dC0+cEV4dHJhKTsKLSAgICBpZiAoZm9y
d2FyZCkgewotICAgICAgICBBU1NFUlQobmF0aXZlSW5kZXggPj0gdGV4dC0+YiAmJiBuYXRpdmVJ
bmRleCA8IG5hdGl2ZUxlbmd0aCk7Ci0gICAgICAgIHRleHQtPmNodW5rTmF0aXZlU3RhcnQgPSBu
YXRpdmVJbmRleDsKLSAgICAgICAgdGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCA9IG5hdGl2ZUluZGV4
ICsgdGV4dC0+ZXh0cmFTaXplIC8gc2l6ZW9mKFVDaGFyKTsKLSAgICAgICAgaWYgKHRleHQtPmNo
dW5rTmF0aXZlTGltaXQgPiBuYXRpdmVMZW5ndGgpCi0gICAgICAgICAgICB0ZXh0LT5jaHVua05h
dGl2ZUxpbWl0ID0gbmF0aXZlTGVuZ3RoOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChu
YXRpdmVJbmRleCA+IHRleHQtPmIgJiYgbmF0aXZlSW5kZXggPD0gbmF0aXZlTGVuZ3RoKTsKLSAg
ICAgICAgdGV4dC0+Y2h1bmtOYXRpdmVMaW1pdCA9IG5hdGl2ZUluZGV4OwotICAgICAgICB0ZXh0
LT5jaHVua05hdGl2ZVN0YXJ0ID0gbmF0aXZlSW5kZXggLSB0ZXh0LT5leHRyYVNpemUgLyBzaXpl
b2YoVUNoYXIpOwotICAgICAgICBpZiAodGV4dC0+Y2h1bmtOYXRpdmVTdGFydCA8IHRleHQtPmIp
Ci0gICAgICAgICAgICB0ZXh0LT5jaHVua05hdGl2ZVN0YXJ0ID0gdGV4dC0+YjsKLSAgICB9Ci0g
ICAgaW50NjRfdCBsZW5ndGggPSB0ZXh0LT5jaHVua05hdGl2ZUxpbWl0IC0gdGV4dC0+Y2h1bmtO
YXRpdmVTdGFydDsKLSAgICAvLyBFbnN1cmUgY2h1bmsgbGVuZ3RoIGlzIHdlbGwgZGVmaW5lZCBp
ZiBjb21wdXRlZCBsZW5ndGggZXhjZWVkcyBpbnQzMl90IHJhbmdlLgotICAgIEFTU0VSVChsZW5n
dGggPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7Ci0gICAgdGV4dC0+Y2h1
bmtMZW5ndGggPSBsZW5ndGggPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSA/
IHN0YXRpY19jYXN0PGludDMyX3Q+KGxlbmd0aCkgOiAwOwotICAgIHRleHQtPm5hdGl2ZUluZGV4
aW5nTGltaXQgPSB0ZXh0LT5jaHVua0xlbmd0aDsKLSAgICB0ZXh0LT5jaHVua09mZnNldCA9IGZv
cndhcmQgPyAwIDogdGV4dC0+Y2h1bmtMZW5ndGg7Ci0gICAgU3RyaW5nSW1wbDo6Y29weUNoYXJz
KGNvbnN0X2Nhc3Q8VUNoYXIqPih0ZXh0LT5jaHVua0NvbnRlbnRzKSwgc3RhdGljX2Nhc3Q8Y29u
c3QgTENoYXIqPih0ZXh0LT5wKSArICh0ZXh0LT5jaHVua05hdGl2ZVN0YXJ0IC0gdGV4dC0+Yiks
IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0ZXh0LT5jaHVua0xlbmd0aCkpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXh0TGF0aW4xQ29udGV4dEF3YXJlU3dpdGNoVG9QcmltYXJ5Q29udGV4dChVVGV4dCog
dGV4dCwgaW50NjRfdCBuYXRpdmVJbmRleCwgaW50NjRfdCBuYXRpdmVMZW5ndGgsIFVCb29sIGZv
cndhcmQpCi17Ci0gICAgQVNTRVJUKCF0ZXh0LT5jaHVua0NvbnRlbnRzIHx8IHRleHQtPmNodW5r
Q29udGVudHMgPT0gdGV4dC0+cSk7Ci0gICAgdGV4dC0+Y2h1bmtDb250ZW50cyA9IHN0YXRpY19j
YXN0PGNvbnN0IFVDaGFyKj4odGV4dC0+cEV4dHJhKTsKLSAgICB0ZXh0TGF0aW4xQ29udGV4dEF3
YXJlTW92ZUluUHJpbWFyeUNvbnRleHQodGV4dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwg
Zm9yd2FyZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRleHRMYXRpbjFDb250ZXh0QXdhcmVNb3ZlSW5Q
cmlvckNvbnRleHQoVVRleHQqIHRleHQsIGludDY0X3QgbmF0aXZlSW5kZXgsIGludDY0X3QgbmF0
aXZlTGVuZ3RoLCBVQm9vbCBmb3J3YXJkKQotewotICAgIEFTU0VSVCh0ZXh0LT5jaHVua0NvbnRl
bnRzID09IHRleHQtPnEpOwotICAgIEFTU0VSVChmb3J3YXJkID8gbmF0aXZlSW5kZXggPCB0ZXh0
LT5iIDogbmF0aXZlSW5kZXggPD0gdGV4dC0+Yik7Ci0gICAgQVNTRVJUX1VOVVNFRChuYXRpdmVM
ZW5ndGgsIGZvcndhcmQgPyBuYXRpdmVJbmRleCA8IG5hdGl2ZUxlbmd0aCA6IG5hdGl2ZUluZGV4
IDw9IG5hdGl2ZUxlbmd0aCk7Ci0gICAgQVNTRVJUX1VOVVNFRChmb3J3YXJkLCBmb3J3YXJkID8g
bmF0aXZlSW5kZXggPCBuYXRpdmVMZW5ndGggOiBuYXRpdmVJbmRleCA8PSBuYXRpdmVMZW5ndGgp
OwotICAgIHRleHQtPmNodW5rTmF0aXZlU3RhcnQgPSAwOwotICAgIHRleHQtPmNodW5rTmF0aXZl
TGltaXQgPSB0ZXh0LT5iOwotICAgIHRleHQtPmNodW5rTGVuZ3RoID0gdGV4dC0+YjsKLSAgICB0
ZXh0LT5uYXRpdmVJbmRleGluZ0xpbWl0ID0gdGV4dC0+Y2h1bmtMZW5ndGg7Ci0gICAgaW50NjRf
dCBvZmZzZXQgPSBuYXRpdmVJbmRleCAtIHRleHQtPmNodW5rTmF0aXZlU3RhcnQ7Ci0gICAgLy8g
RW5zdXJlIGNodW5rIG9mZnNldCBpcyB3ZWxsIGRlZmluZWQgaWYgY29tcHV0ZWQgb2Zmc2V0IGV4
Y2VlZHMgaW50MzJfdCByYW5nZSBvciBjaHVuayBsZW5ndGguCi0gICAgQVNTRVJUKG9mZnNldCA8
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKTsKLSAgICB0ZXh0LT5jaHVua09m
ZnNldCA9IHN0ZDo6bWluKG9mZnNldCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1h
eCgpID8gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0KSA6IDAsIHRleHQtPmNodW5rTGVuZ3Ro
KTsKLX0KLQotc3RhdGljIHZvaWQgdGV4dExhdGluMUNvbnRleHRBd2FyZVN3aXRjaFRvUHJpb3JD
b250ZXh0KFVUZXh0KiB0ZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4LCBpbnQ2NF90IG5hdGl2ZUxl
bmd0aCwgVUJvb2wgZm9yd2FyZCkKLXsKLSAgICBBU1NFUlQoIXRleHQtPmNodW5rQ29udGVudHMg
fHwgdGV4dC0+Y2h1bmtDb250ZW50cyA9PSB0ZXh0LT5wRXh0cmEpOwotICAgIHRleHQtPmNodW5r
Q29udGVudHMgPSBzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KHRleHQtPnEpOwotICAgIHRleHRM
YXRpbjFDb250ZXh0QXdhcmVNb3ZlSW5QcmlvckNvbnRleHQodGV4dCwgbmF0aXZlSW5kZXgsIG5h
dGl2ZUxlbmd0aCwgZm9yd2FyZCk7Ci19Ci0KLXN0YXRpYyBVVGV4dCogdVRleHRMYXRpbjFDb250
ZXh0QXdhcmVDbG9uZShVVGV4dCogZGVzdGluYXRpb24sIGNvbnN0IFVUZXh0KiBzb3VyY2UsIFVC
b29sIGRlZXAsIFVFcnJvckNvZGUqIHN0YXR1cykKLXsKLSAgICByZXR1cm4gdVRleHRDbG9uZUlt
cGwoZGVzdGluYXRpb24sIHNvdXJjZSwgZGVlcCwgc3RhdHVzKTsKLX0KLQotc3RhdGljIGludDY0
X3QgdVRleHRMYXRpbjFDb250ZXh0QXdhcmVOYXRpdmVMZW5ndGgoVVRleHQqIHRleHQpCi17Ci0g
ICAgcmV0dXJuIHRleHQtPmEgKyB0ZXh0LT5iOwotfQotCi1zdGF0aWMgVUJvb2wgdVRleHRMYXRp
bjFDb250ZXh0QXdhcmVBY2Nlc3MoVVRleHQqIHRleHQsIGludDY0X3QgbmF0aXZlSW5kZXgsIFVC
b29sIGZvcndhcmQpCi17Ci0gICAgaWYgKCF0ZXh0LT5jb250ZXh0KQotICAgICAgICByZXR1cm4g
RkFMU0U7Ci0gICAgaW50NjRfdCBuYXRpdmVMZW5ndGggPSB1VGV4dExhdGluMUNvbnRleHRBd2Fy
ZU5hdGl2ZUxlbmd0aCh0ZXh0KTsKLSAgICBVQm9vbCBpc0FjY2Vzc2libGU7Ci0gICAgaWYgKHVU
ZXh0QWNjZXNzSW5DaHVua09yT3V0T2ZSYW5nZSh0ZXh0LCBuYXRpdmVJbmRleCwgbmF0aXZlTGVu
Z3RoLCBmb3J3YXJkLCBpc0FjY2Vzc2libGUpKQotICAgICAgICByZXR1cm4gaXNBY2Nlc3NpYmxl
OwotICAgIG5hdGl2ZUluZGV4ID0gdVRleHRBY2Nlc3NQaW5JbmRleChuYXRpdmVJbmRleCwgbmF0
aXZlTGVuZ3RoKTsKLSAgICBVVGV4dFByb3ZpZGVyQ29udGV4dCBjdXJyZW50Q29udGV4dCA9IHRl
eHRMYXRpbjFDb250ZXh0QXdhcmVHZXRDdXJyZW50Q29udGV4dCh0ZXh0KTsKLSAgICBVVGV4dFBy
b3ZpZGVyQ29udGV4dCBuZXdDb250ZXh0ID0gdVRleHRQcm92aWRlckNvbnRleHQodGV4dCwgbmF0
aXZlSW5kZXgsIGZvcndhcmQpOwotICAgIEFTU0VSVChuZXdDb250ZXh0ICE9IFVUZXh0UHJvdmlk
ZXJDb250ZXh0OjpOb0NvbnRleHQpOwotICAgIGlmIChuZXdDb250ZXh0ID09IGN1cnJlbnRDb250
ZXh0KSB7Ci0gICAgICAgIGlmIChjdXJyZW50Q29udGV4dCA9PSBVVGV4dFByb3ZpZGVyQ29udGV4
dDo6UHJpbWFyeUNvbnRleHQpCi0gICAgICAgICAgICB0ZXh0TGF0aW4xQ29udGV4dEF3YXJlTW92
ZUluUHJpbWFyeUNvbnRleHQodGV4dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2Fy
ZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRleHRMYXRpbjFDb250ZXh0QXdhcmVNb3Zl
SW5QcmlvckNvbnRleHQodGV4dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2FyZCk7
Ci0gICAgfSBlbHNlIGlmIChuZXdDb250ZXh0ID09IFVUZXh0UHJvdmlkZXJDb250ZXh0OjpQcmlt
YXJ5Q29udGV4dCkKLSAgICAgICAgdGV4dExhdGluMUNvbnRleHRBd2FyZVN3aXRjaFRvUHJpbWFy
eUNvbnRleHQodGV4dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2FyZCk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIEFTU0VSVChuZXdDb250ZXh0ID09IFVUZXh0UHJvdmlkZXJDb250ZXh0
OjpQcmlvckNvbnRleHQpOwotICAgICAgICB0ZXh0TGF0aW4xQ29udGV4dEF3YXJlU3dpdGNoVG9Q
cmlvckNvbnRleHQodGV4dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2FyZCk7Ci0g
ICAgfQotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgaW50MzJfdCB1VGV4dExhdGluMUNv
bnRleHRBd2FyZUV4dHJhY3QoVVRleHQqLCBpbnQ2NF90LCBpbnQ2NF90LCBVQ2hhciosIGludDMy
X3QsIFVFcnJvckNvZGUqIGVycm9yQ29kZSkKLXsKLSAgICAvLyBJbiB0aGUgcHJlc2VudCBjb250
ZXh0LCB0aGlzIHRleHQgcHJvdmlkZXIgaXMgdXNlZCBvbmx5IHdpdGggSUNVIGZ1bmN0aW9ucwot
ICAgIC8vIHRoYXQgZG8gbm90IHBlcmZvcm0gYW4gZXh0cmFjdCBvcGVyYXRpb24uCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgKmVycm9yQ29kZSA9IFVfVU5TVVBQT1JURURfRVJST1I7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVUZXh0TGF0aW4xQ29udGV4dEF3YXJl
Q2xvc2UoVVRleHQqIHRleHQpCi17Ci0gICAgdGV4dC0+Y29udGV4dCA9IG51bGxwdHI7Ci19Ci0K
LVVUZXh0KiBvcGVuTGF0aW4xQ29udGV4dEF3YXJlVVRleHRQcm92aWRlcihVVGV4dFdpdGhCdWZm
ZXIqIHV0V2l0aEJ1ZmZlciwgY29uc3QgTENoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBVQ2hhciogcHJpb3JDb250ZXh0LCBpbnQgcHJpb3JDb250ZXh0TGVuZ3RoLCBVRXJyb3JD
b2RlKiBzdGF0dXMpCi17Ci0gICAgaWYgKFVfRkFJTFVSRSgqc3RhdHVzKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaWYgKCFzdHJpbmcgfHwgbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgewotICAgICAgICAqc3RhdHVz
ID0gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgVVRleHQqIHRleHQgPSB1dGV4dF9zZXR1cCgmdXRXaXRoQnVmZmVyLT50ZXh0LCBzaXplb2Yo
dXRXaXRoQnVmZmVyLT5idWZmZXIpLCBzdGF0dXMpOwotICAgIGlmIChVX0ZBSUxVUkUoKnN0YXR1
cykpIHsKLSAgICAgICAgQVNTRVJUKCF0ZXh0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
Ci0gICAgaW5pdGlhbGl6ZUNvbnRleHRBd2FyZVVUZXh0UHJvdmlkZXIodGV4dCwgJnRleHRMYXRp
bjFDb250ZXh0QXdhcmVGdW5jcywgc3RyaW5nLCBsZW5ndGgsIHByaW9yQ29udGV4dCwgcHJpb3JD
b250ZXh0TGVuZ3RoKTsKLSAgICByZXR1cm4gdGV4dDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RG
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9pY3Uv
VVRleHRQcm92aWRlckxhdGluMS5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3Rm
L3RleHQvaWN1L1VUZXh0UHJvdmlkZXJMYXRpbjEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODFjODU3N2ZmYTgyZTU1NzU3NWU5MWNmOTk2OTBhYjhlMmFiMGQxZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvdGV4dC9pY3UvVVRleHRQcm92aWRlckxhdGluMS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVVRleHRQcm92aWRlckxh
dGluMV9oCi0jZGVmaW5lIFVUZXh0UHJvdmlkZXJMYXRpbjFfaAotCi0jaW5jbHVkZSA8dW5pY29k
ZS91dGV4dC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+Ci0KLW5hbWVzcGFjZSBXVEYg
ewotCi1jb25zdCBpbnQgVVRleHRXaXRoQnVmZmVySW5saW5lQ2FwYWNpdHkgPSAxNjsKLQotc3Ry
dWN0IFVUZXh0V2l0aEJ1ZmZlciB7Ci0gICAgVVRleHQgdGV4dDsKLSAgICBVQ2hhciBidWZmZXJb
VVRleHRXaXRoQnVmZmVySW5saW5lQ2FwYWNpdHldOwotfTsKLQotV1RGX0VYUE9SVCBVVGV4dCog
b3BlbkxhdGluMVVUZXh0UHJvdmlkZXIoVVRleHRXaXRoQnVmZmVyKiB1dFdpdGhCdWZmZXIsIGNv
bnN0IExDaGFyKiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgVUVycm9yQ29kZSogc3RhdHVzKTsK
LVVUZXh0KiBvcGVuTGF0aW4xQ29udGV4dEF3YXJlVVRleHRQcm92aWRlcihVVGV4dFdpdGhCdWZm
ZXIqIHV0V2l0aEJ1ZmZlciwgY29uc3QgTENoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBVQ2hhciogcHJpb3JDb250ZXh0LCBpbnQgcHJpb3JDb250ZXh0TGVuZ3RoLCBVRXJyb3JD
b2RlKiBzdGF0dXMpOwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVUZXh0UHJv
dmlkZXJMYXRpbjFfaApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL3RleHQvaWN1L1VUZXh0UHJvdmlkZXJVVEYxNi5jcHAgYi9QZXJmb3JtYW5jZVRlc3RzL1N0
aXRjaE1hcmtlci93dGYvdGV4dC9pY3UvVVRleHRQcm92aWRlclVURjE2LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTFmYzJlYWI5YTQ1N2YxNzc0OWY3MjNmNTIwN2YzODFkZjI5
ZmFhZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9pY3UvVVRleHRQcm92aWRlclVURjE2
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVUZXh0UHJvdmlkZXJVVEYxNi5oIgotCi0jaW5jbHVk
ZSAiVVRleHRQcm92aWRlci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotbmFtZXNwYWNlIFdU
RiB7Ci0KLS8vIFVURjE2Q29udGV4dEF3YXJlIHByb3ZpZGVyCi0KLXN0YXRpYyBVVGV4dCogdVRl
eHRVVEYxNkNvbnRleHRBd2FyZUNsb25lKFVUZXh0KiwgY29uc3QgVVRleHQqLCBVQm9vbCwgVUVy
cm9yQ29kZSopOwotc3RhdGljIGludDY0X3QgdVRleHRVVEYxNkNvbnRleHRBd2FyZU5hdGl2ZUxl
bmd0aChVVGV4dCopOwotc3RhdGljIFVCb29sIHVUZXh0VVRGMTZDb250ZXh0QXdhcmVBY2Nlc3Mo
VVRleHQqLCBpbnQ2NF90LCBVQm9vbCk7Ci1zdGF0aWMgaW50MzJfdCB1VGV4dFVURjE2Q29udGV4
dEF3YXJlRXh0cmFjdChVVGV4dCosIGludDY0X3QsIGludDY0X3QsIFVDaGFyKiwgaW50MzJfdCwg
VUVycm9yQ29kZSopOwotc3RhdGljIHZvaWQgdVRleHRVVEYxNkNvbnRleHRBd2FyZUNsb3NlKFVU
ZXh0Kik7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgVVRleHRGdW5jcyB0ZXh0VVRGMTZDb250ZXh0
QXdhcmVGdW5jcyA9IHsKLSAgICBzaXplb2YoVVRleHRGdW5jcyksCi0gICAgMCwKLSAgICAwLAot
ICAgIDAsCi0gICAgdVRleHRVVEYxNkNvbnRleHRBd2FyZUNsb25lLAotICAgIHVUZXh0VVRGMTZD
b250ZXh0QXdhcmVOYXRpdmVMZW5ndGgsCi0gICAgdVRleHRVVEYxNkNvbnRleHRBd2FyZUFjY2Vz
cywKLSAgICB1VGV4dFVURjE2Q29udGV4dEF3YXJlRXh0cmFjdCwKLSAgICBudWxscHRyLAotICAg
IG51bGxwdHIsCi0gICAgbnVsbHB0ciwKLSAgICBudWxscHRyLAotICAgIHVUZXh0VVRGMTZDb250
ZXh0QXdhcmVDbG9zZSwKLSAgICBudWxscHRyLAotICAgIG51bGxwdHIsCi0gICAgbnVsbHB0cgot
fTsKLQotc3RhdGljIGlubGluZSBVVGV4dFByb3ZpZGVyQ29udGV4dCB0ZXh0VVRGMTZDb250ZXh0
QXdhcmVHZXRDdXJyZW50Q29udGV4dChjb25zdCBVVGV4dCogdGV4dCkKLXsKLSAgICBpZiAoIXRl
eHQtPmNodW5rQ29udGVudHMpCi0gICAgICAgIHJldHVybiBVVGV4dFByb3ZpZGVyQ29udGV4dDo6
Tm9Db250ZXh0OwotICAgIHJldHVybiB0ZXh0LT5jaHVua0NvbnRlbnRzID09IHRleHQtPnAgPyBV
VGV4dFByb3ZpZGVyQ29udGV4dDo6UHJpbWFyeUNvbnRleHQgOiBVVGV4dFByb3ZpZGVyQ29udGV4
dDo6UHJpb3JDb250ZXh0OwotfQotCi1zdGF0aWMgdm9pZCB0ZXh0VVRGMTZDb250ZXh0QXdhcmVN
b3ZlSW5QcmltYXJ5Q29udGV4dChVVGV4dCogdGV4dCwgaW50NjRfdCBuYXRpdmVJbmRleCwgaW50
NjRfdCBuYXRpdmVMZW5ndGgsIFVCb29sIGZvcndhcmQpCi17Ci0gICAgQVNTRVJUKHRleHQtPmNo
dW5rQ29udGVudHMgPT0gdGV4dC0+cCk7Ci0gICAgQVNTRVJUX1VOVVNFRChmb3J3YXJkLCBmb3J3
YXJkID8gbmF0aXZlSW5kZXggPj0gdGV4dC0+YiA6IG5hdGl2ZUluZGV4ID4gdGV4dC0+Yik7Ci0g
ICAgQVNTRVJUX1VOVVNFRChmb3J3YXJkLCBmb3J3YXJkID8gbmF0aXZlSW5kZXggPCBuYXRpdmVM
ZW5ndGggOiBuYXRpdmVJbmRleCA8PSBuYXRpdmVMZW5ndGgpOwotICAgIHRleHQtPmNodW5rTmF0
aXZlU3RhcnQgPSB0ZXh0LT5iOwotICAgIHRleHQtPmNodW5rTmF0aXZlTGltaXQgPSBuYXRpdmVM
ZW5ndGg7Ci0gICAgaW50NjRfdCBsZW5ndGggPSB0ZXh0LT5jaHVua05hdGl2ZUxpbWl0IC0gdGV4
dC0+Y2h1bmtOYXRpdmVTdGFydDsKLSAgICAvLyBFbnN1cmUgY2h1bmsgbGVuZ3RoIGlzIHdlbGwg
ZGVmaW5lZCBpZiBjb21wdXRlZCBsZW5ndGggZXhjZWVkcyBpbnQzMl90IHJhbmdlLgotICAgIEFT
U0VSVChsZW5ndGggPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7Ci0gICAg
dGV4dC0+Y2h1bmtMZW5ndGggPSBsZW5ndGggPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptYXgoKSA/IHN0YXRpY19jYXN0PGludDMyX3Q+KGxlbmd0aCkgOiAwOwotICAgIHRleHQtPm5h
dGl2ZUluZGV4aW5nTGltaXQgPSB0ZXh0LT5jaHVua0xlbmd0aDsKLSAgICBpbnQ2NF90IG9mZnNl
dCA9IG5hdGl2ZUluZGV4IC0gdGV4dC0+Y2h1bmtOYXRpdmVTdGFydDsKLSAgICAvLyBFbnN1cmUg
Y2h1bmsgb2Zmc2V0IGlzIHdlbGwgZGVmaW5lZCBpZiBjb21wdXRlZCBvZmZzZXQgZXhjZWVkcyBp
bnQzMl90IHJhbmdlIG9yIGNodW5rIGxlbmd0aC4KLSAgICBBU1NFUlQob2Zmc2V0IDwgc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOwotICAgIHRleHQtPmNodW5rT2Zmc2V0ID0g
c3RkOjptaW4ob2Zmc2V0IDwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkgPyBz
dGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXQpIDogMCwgdGV4dC0+Y2h1bmtMZW5ndGgpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXh0VVRGMTZDb250ZXh0QXdhcmVTd2l0Y2hUb1ByaW1hcnlDb250ZXh0
KFVUZXh0KiB0ZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4LCBpbnQ2NF90IG5hdGl2ZUxlbmd0aCwg
VUJvb2wgZm9yd2FyZCkKLXsKLSAgICBBU1NFUlQoIXRleHQtPmNodW5rQ29udGVudHMgfHwgdGV4
dC0+Y2h1bmtDb250ZW50cyA9PSB0ZXh0LT5xKTsKLSAgICB0ZXh0LT5jaHVua0NvbnRlbnRzID0g
c3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPih0ZXh0LT5wKTsKLSAgICB0ZXh0VVRGMTZDb250ZXh0
QXdhcmVNb3ZlSW5QcmltYXJ5Q29udGV4dCh0ZXh0LCBuYXRpdmVJbmRleCwgbmF0aXZlTGVuZ3Ro
LCBmb3J3YXJkKTsKLX0KLQotc3RhdGljIHZvaWQgdGV4dFVURjE2Q29udGV4dEF3YXJlTW92ZUlu
UHJpb3JDb250ZXh0KFVUZXh0KiB0ZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4LCBpbnQ2NF90IG5h
dGl2ZUxlbmd0aCwgVUJvb2wgZm9yd2FyZCkKLXsKLSAgICBBU1NFUlQodGV4dC0+Y2h1bmtDb250
ZW50cyA9PSB0ZXh0LT5xKTsKLSAgICBBU1NFUlQoZm9yd2FyZCA/IG5hdGl2ZUluZGV4IDwgdGV4
dC0+YiA6IG5hdGl2ZUluZGV4IDw9IHRleHQtPmIpOwotICAgIEFTU0VSVF9VTlVTRUQobmF0aXZl
TGVuZ3RoLCBmb3J3YXJkID8gbmF0aXZlSW5kZXggPCBuYXRpdmVMZW5ndGggOiBuYXRpdmVJbmRl
eCA8PSBuYXRpdmVMZW5ndGgpOwotICAgIEFTU0VSVF9VTlVTRUQoZm9yd2FyZCwgZm9yd2FyZCA/
IG5hdGl2ZUluZGV4IDwgbmF0aXZlTGVuZ3RoIDogbmF0aXZlSW5kZXggPD0gbmF0aXZlTGVuZ3Ro
KTsKLSAgICB0ZXh0LT5jaHVua05hdGl2ZVN0YXJ0ID0gMDsKLSAgICB0ZXh0LT5jaHVua05hdGl2
ZUxpbWl0ID0gdGV4dC0+YjsKLSAgICB0ZXh0LT5jaHVua0xlbmd0aCA9IHRleHQtPmI7Ci0gICAg
dGV4dC0+bmF0aXZlSW5kZXhpbmdMaW1pdCA9IHRleHQtPmNodW5rTGVuZ3RoOwotICAgIGludDY0
X3Qgb2Zmc2V0ID0gbmF0aXZlSW5kZXggLSB0ZXh0LT5jaHVua05hdGl2ZVN0YXJ0OwotICAgIC8v
IEVuc3VyZSBjaHVuayBvZmZzZXQgaXMgd2VsbCBkZWZpbmVkIGlmIGNvbXB1dGVkIG9mZnNldCBl
eGNlZWRzIGludDMyX3QgcmFuZ2Ugb3IgY2h1bmsgbGVuZ3RoLgotICAgIEFTU0VSVChvZmZzZXQg
PCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7Ci0gICAgdGV4dC0+Y2h1bmtP
ZmZzZXQgPSBzdGQ6Om1pbihvZmZzZXQgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
YXgoKSA/IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldCkgOiAwLCB0ZXh0LT5jaHVua0xlbmd0
aCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRleHRVVEYxNkNvbnRleHRBd2FyZVN3aXRjaFRvUHJpb3JD
b250ZXh0KFVUZXh0KiB0ZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4LCBpbnQ2NF90IG5hdGl2ZUxl
bmd0aCwgVUJvb2wgZm9yd2FyZCkKLXsKLSAgICBBU1NFUlQoIXRleHQtPmNodW5rQ29udGVudHMg
fHwgdGV4dC0+Y2h1bmtDb250ZW50cyA9PSB0ZXh0LT5wKTsKLSAgICB0ZXh0LT5jaHVua0NvbnRl
bnRzID0gc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPih0ZXh0LT5xKTsKLSAgICB0ZXh0VVRGMTZD
b250ZXh0QXdhcmVNb3ZlSW5QcmlvckNvbnRleHQodGV4dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxl
bmd0aCwgZm9yd2FyZCk7Ci19Ci0KLXN0YXRpYyBVVGV4dCogdVRleHRVVEYxNkNvbnRleHRBd2Fy
ZUNsb25lKFVUZXh0KiBkZXN0aW5hdGlvbiwgY29uc3QgVVRleHQqIHNvdXJjZSwgVUJvb2wgZGVl
cCwgVUVycm9yQ29kZSogc3RhdHVzKQotewotICAgIHJldHVybiB1VGV4dENsb25lSW1wbChkZXN0
aW5hdGlvbiwgc291cmNlLCBkZWVwLCBzdGF0dXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludDY0
X3QgdVRleHRVVEYxNkNvbnRleHRBd2FyZU5hdGl2ZUxlbmd0aChVVGV4dCogdGV4dCkKLXsKLSAg
ICByZXR1cm4gdGV4dC0+YSArIHRleHQtPmI7Ci19Ci0KLXN0YXRpYyBVQm9vbCB1VGV4dFVURjE2
Q29udGV4dEF3YXJlQWNjZXNzKFVUZXh0KiB0ZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4LCBVQm9v
bCBmb3J3YXJkKQotewotICAgIGlmICghdGV4dC0+Y29udGV4dCkKLSAgICAgICAgcmV0dXJuIEZB
TFNFOwotICAgIGludDY0X3QgbmF0aXZlTGVuZ3RoID0gdVRleHRVVEYxNkNvbnRleHRBd2FyZU5h
dGl2ZUxlbmd0aCh0ZXh0KTsKLSAgICBVQm9vbCBpc0FjY2Vzc2libGU7Ci0gICAgaWYgKHVUZXh0
QWNjZXNzSW5DaHVua09yT3V0T2ZSYW5nZSh0ZXh0LCBuYXRpdmVJbmRleCwgbmF0aXZlTGVuZ3Ro
LCBmb3J3YXJkLCBpc0FjY2Vzc2libGUpKQotICAgICAgICByZXR1cm4gaXNBY2Nlc3NpYmxlOwot
ICAgIG5hdGl2ZUluZGV4ID0gdVRleHRBY2Nlc3NQaW5JbmRleChuYXRpdmVJbmRleCwgbmF0aXZl
TGVuZ3RoKTsKLSAgICBVVGV4dFByb3ZpZGVyQ29udGV4dCBjdXJyZW50Q29udGV4dCA9IHRleHRV
VEYxNkNvbnRleHRBd2FyZUdldEN1cnJlbnRDb250ZXh0KHRleHQpOwotICAgIFVUZXh0UHJvdmlk
ZXJDb250ZXh0IG5ld0NvbnRleHQgPSB1VGV4dFByb3ZpZGVyQ29udGV4dCh0ZXh0LCBuYXRpdmVJ
bmRleCwgZm9yd2FyZCk7Ci0gICAgQVNTRVJUKG5ld0NvbnRleHQgIT0gVVRleHRQcm92aWRlckNv
bnRleHQ6Ok5vQ29udGV4dCk7Ci0gICAgaWYgKG5ld0NvbnRleHQgPT0gY3VycmVudENvbnRleHQp
IHsKLSAgICAgICAgaWYgKGN1cnJlbnRDb250ZXh0ID09IFVUZXh0UHJvdmlkZXJDb250ZXh0OjpQ
cmltYXJ5Q29udGV4dCkKLSAgICAgICAgICAgIHRleHRVVEYxNkNvbnRleHRBd2FyZU1vdmVJblBy
aW1hcnlDb250ZXh0KHRleHQsIG5hdGl2ZUluZGV4LCBuYXRpdmVMZW5ndGgsIGZvcndhcmQpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB0ZXh0VVRGMTZDb250ZXh0QXdhcmVNb3ZlSW5Qcmlv
ckNvbnRleHQodGV4dCwgbmF0aXZlSW5kZXgsIG5hdGl2ZUxlbmd0aCwgZm9yd2FyZCk7Ci0gICAg
fSBlbHNlIGlmIChuZXdDb250ZXh0ID09IFVUZXh0UHJvdmlkZXJDb250ZXh0OjpQcmltYXJ5Q29u
dGV4dCkKLSAgICAgICAgdGV4dFVURjE2Q29udGV4dEF3YXJlU3dpdGNoVG9QcmltYXJ5Q29udGV4
dCh0ZXh0LCBuYXRpdmVJbmRleCwgbmF0aXZlTGVuZ3RoLCBmb3J3YXJkKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKG5ld0NvbnRleHQgPT0gVVRleHRQcm92aWRlckNvbnRleHQ6OlByaW9y
Q29udGV4dCk7Ci0gICAgICAgIHRleHRVVEYxNkNvbnRleHRBd2FyZVN3aXRjaFRvUHJpb3JDb250
ZXh0KHRleHQsIG5hdGl2ZUluZGV4LCBuYXRpdmVMZW5ndGgsIGZvcndhcmQpOwotICAgIH0KLSAg
ICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGludDMyX3QgdVRleHRVVEYxNkNvbnRleHRBd2Fy
ZUV4dHJhY3QoVVRleHQqLCBpbnQ2NF90LCBpbnQ2NF90LCBVQ2hhciosIGludDMyX3QsIFVFcnJv
ckNvZGUqIGVycm9yQ29kZSkKLXsKLSAgICAvLyBJbiB0aGUgcHJlc2VudCBjb250ZXh0LCB0aGlz
IHRleHQgcHJvdmlkZXIgaXMgdXNlZCBvbmx5IHdpdGggSUNVIGZ1bmN0aW9ucwotICAgIC8vIHRo
YXQgZG8gbm90IHBlcmZvcm0gYW4gZXh0cmFjdCBvcGVyYXRpb24uCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgKmVycm9yQ29kZSA9IFVfVU5TVVBQT1JURURfRVJST1I7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVUZXh0VVRGMTZDb250ZXh0QXdhcmVDbG9zZShVVGV4
dCogdGV4dCkKLXsKLSAgICB0ZXh0LT5jb250ZXh0ID0gbnVsbHB0cjsKLX0KLQotVVRleHQqIG9w
ZW5VVEYxNkNvbnRleHRBd2FyZVVUZXh0UHJvdmlkZXIoVVRleHQqIHRleHQsIGNvbnN0IFVDaGFy
KiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgVUNoYXIqIHByaW9yQ29udGV4dCwgaW50
IHByaW9yQ29udGV4dExlbmd0aCwgVUVycm9yQ29kZSogc3RhdHVzKQotewotICAgIGlmIChVX0ZB
SUxVUkUoKnN0YXR1cykpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghc3RyaW5nIHx8IGxl
bmd0aCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptYXgoKSkpIHsKLSAgICAgICAgKnN0YXR1cyA9IFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHRleHQgPSB1dGV4dF9zZXR1cCh0ZXh0LCAw
LCBzdGF0dXMpOwotICAgIGlmIChVX0ZBSUxVUkUoKnN0YXR1cykpIHsKLSAgICAgICAgQVNTRVJU
KCF0ZXh0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6ZUNvbnRl
eHRBd2FyZVVUZXh0UHJvdmlkZXIodGV4dCwgJnRleHRVVEYxNkNvbnRleHRBd2FyZUZ1bmNzLCBz
dHJpbmcsIGxlbmd0aCwgcHJpb3JDb250ZXh0LCBwcmlvckNvbnRleHRMZW5ndGgpOwotICAgIHJl
dHVybiB0ZXh0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyVVRGMTYuaCBi
L1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L2ljdS9VVGV4dFByb3ZpZGVy
VVRGMTYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNjMmMyYzhlNmM1ZmFkYTc1
YjVkNTFmOTZiYjhhY2UwYTcwNGFiNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC9pY3Uv
VVRleHRQcm92aWRlclVURjE2LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBVVGV4dFByb3ZpZGVyVVRGMTZfaAotI2RlZmluZSBVVGV4dFByb3Zp
ZGVyVVRGMTZfaAotCi0jaW5jbHVkZSA8dW5pY29kZS91dGV4dC5oPgotCi1uYW1lc3BhY2UgV1RG
IHsKLQotVVRleHQqIG9wZW5VVEYxNkNvbnRleHRBd2FyZVVUZXh0UHJvdmlkZXIoVVRleHQqLCBj
b25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgVUNoYXIqIHByaW9yQ29udGV4dCwg
aW50IHByaW9yQ29udGV4dExlbmd0aCwgVUVycm9yQ29kZSopOwotCi19IC8vIG5hbWVzcGFjZSBX
VEYKLQotI2VuZGlmIC8vIFVUZXh0UHJvdmlkZXJVVEYxNl9oCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvdGV4dC91bml4L1RleHRCcmVha0l0ZXJhdG9ySW50
ZXJuYWxJQ1VVbml4LmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0
L3VuaXgvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVVVuaXguY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhMWRmNmQ2ZmI2MDE4NzhjYzhiMGYwYmFiMjk5NWU3ZGNiZjFhNTNh
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi90ZXh0L3VuaXgvVGV4dEJyZWFrSXRlcmF0b3JJbnRl
cm5hbElDVVVuaXguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oPgotCi0jaW5jbHVkZSA8
bG9jYWxlLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1jb25zdCBjaGFyKiBjdXJyZW50U2VhcmNo
TG9jYWxlSUQoKQotewotICAgIGlmIChhdXRvKiBsb2NhbGVEZWZhdWx0ID0gc2V0bG9jYWxlKExD
X01FU1NBR0VTLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuIGxvY2FsZURlZmF1bHQ7Ci0gICAg
cmV0dXJuICIiOwotfQotCi1jb25zdCBjaGFyKiBjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQoKQot
ewotICAgIGlmIChhdXRvKiBsb2NhbGVEZWZhdWx0ID0gc2V0bG9jYWxlKExDX01FU1NBR0VTLCBu
dWxscHRyKSkKLSAgICAgICAgcmV0dXJuIGxvY2FsZURlZmF1bHQ7Ci0gICAgcmV0dXJuICJlbl91
cyI7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0
Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtl
ci93dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxYmRkMDYwMWNlOTNhYTU3MDE2MTVmMjc2NzY4MmNkZjBlMWMzYWUxLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgQ2hhcmFjdGVyTmFtZXNfaAotI2RlZmluZSBDaGFyYWN0
ZXJOYW1lc19oCi0KLSNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotCi1uYW1lc3BhY2UgV1RG
IHsKLW5hbWVzcGFjZSBVbmljb2RlIHsKLQotLy8gTmFtZXMgaGVyZSBhcmUgdGFrZW4gZnJvbSB0
aGUgVW5pY29kZSBzdGFuZGFyZC4KLQotLy8gTW9zdCBvZiB0aGVzZSBhcmUgVUNoYXIgY29uc3Rh
bnRzLCBub3QgVUNoYXIzMiwgd2hpY2ggbWFrZXMgdGhlbQotLy8gbW9yZSBjb252ZW5pZW50IGZv
ciBXZWJDb3JlIGNvZGUgdGhhdCBtb3N0bHkgdXNlcyBVVEYtMTYuCi0KLWNvbnN0IFVDaGFyIEFw
cGxlTG9nbyA9IDB4RjhGRjsKLWNvbnN0IFVDaGFyIEhpcmFnYW5hTGV0dGVyU21hbGxBID0gMHgz
MDQxOwotY29uc3QgVUNoYXIzMiBhZWdlYW5Xb3JkU2VwYXJhdG9yRG90ID0gMHgxMDEwMTsKLWNv
bnN0IFVDaGFyMzIgYWVnZWFuV29yZFNlcGFyYXRvckxpbmUgPSAweDEwMTAwOwotY29uc3QgVUNo
YXIgYXBvc3Ryb3BoZSA9IDB4MDAyNzsKLWNvbnN0IFVDaGFyIGJsYWNrQ2lyY2xlID0gMHgyNUNG
OwotY29uc3QgVUNoYXIgYmxhY2tTcXVhcmUgPSAweDI1QTA7Ci1jb25zdCBVQ2hhciBibGFja1Vw
UG9pbnRpbmdUcmlhbmdsZSA9IDB4MjVCMjsKLWNvbnN0IFVDaGFyIGJ1bGxldCA9IDB4MjAyMjsK
LWNvbnN0IFVDaGFyIGJ1bGxzZXllID0gMHgyNUNFOwotY29uc3QgVUNoYXIgY2FycmlhZ2VSZXR1
cm4gPSAweDAwMEQ7Ci1jb25zdCBVQ2hhciBldGhpb3BpY1ByZWZhY2VDb2xvbiA9IDB4MTM2NjsK
LWNvbnN0IFVDaGFyIGV0aGlvcGljV29yZHNwYWNlID0gMHgxMzYxOwotY29uc3QgVUNoYXIgZmly
c3RTdHJvbmdJc29sYXRlID0gMHgyMDY4OwotY29uc3QgVUNoYXIgZmlzaGV5ZSA9IDB4MjVDOTsK
LWNvbnN0IFVDaGFyIGhlYnJld1B1bmN0dWF0aW9uR2VyZXNoID0gMHgwNUYzOwotY29uc3QgVUNo
YXIgaGVicmV3UHVuY3R1YXRpb25HZXJzaGF5aW0gPSAweDA1RjQ7Ci1jb25zdCBVQ2hhciBob3Jp
em9udGFsRWxsaXBzaXMgPSAweDIwMjY7Ci1jb25zdCBVQ2hhciBoeXBoZW4gPSAweDIwMTA7Ci1j
b25zdCBVQ2hhciBoeXBoZW5NaW51cyA9IDB4MDAyRDsKLWNvbnN0IFVDaGFyIGlkZW9ncmFwaGlj
Q29tbWEgPSAweDMwMDE7Ci1jb25zdCBVQ2hhciBpZGVvZ3JhcGhpY0Z1bGxTdG9wID0gMHgzMDAy
OwotY29uc3QgVUNoYXIgaWRlb2dyYXBoaWNTcGFjZSA9IDB4MzAwMDsKLWNvbnN0IFVDaGFyIGxl
ZnREb3VibGVRdW90YXRpb25NYXJrID0gMHgyMDFDOwotY29uc3QgVUNoYXIgbGVmdFNpbmdsZVF1
b3RhdGlvbk1hcmsgPSAweDIwMTg7Ci1jb25zdCBVQ2hhciBsZWZ0VG9SaWdodEVtYmVkID0gMHgy
MDJBOwotY29uc3QgVUNoYXIgbGVmdFRvUmlnaHRJc29sYXRlID0gMHgyMDY2OwotY29uc3QgVUNo
YXIgbGVmdFRvUmlnaHRNYXJrID0gMHgyMDBFOwotY29uc3QgVUNoYXIgbGVmdFRvUmlnaHRPdmVy
cmlkZSA9IDB4MjAyRDsKLWNvbnN0IFVDaGFyIG1pbnVzU2lnbiA9IDB4MjIxMjsKLWNvbnN0IFVD
aGFyIG5hcnJvd05vQnJlYWtTcGFjZSA9IDB4MjAyRjsKLWNvbnN0IFVDaGFyIG5hcnJvd05vbkJy
ZWFraW5nU3BhY2UgPSAweDIwMkY7Ci1jb25zdCBVQ2hhciBuZXdsaW5lQ2hhcmFjdGVyID0gMHgw
MDBBOwotY29uc3QgVUNoYXIgbm9CcmVha1NwYWNlID0gMHgwMEEwOwotY29uc3QgVUNoYXIgb2Jq
ZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIgPSAweEZGRkM7Ci1jb25zdCBVQ2hhciBwb3BEaXJlY3Rp
b25hbEZvcm1hdHRpbmcgPSAweDIwMkM7Ci1jb25zdCBVQ2hhciBwb3BEaXJlY3Rpb25hbElzb2xh
dGUgPSAweDIwNjk7Ci1jb25zdCBVQ2hhciBxdW90YXRpb25NYXJrID0gMHgwMDIyOwotY29uc3Qg
VUNoYXIgcmVwbGFjZW1lbnRDaGFyYWN0ZXIgPSAweEZGRkQ7Ci1jb25zdCBVQ2hhciByaWdodERv
dWJsZVF1b3RhdGlvbk1hcmsgPSAweDIwMUQ7Ci1jb25zdCBVQ2hhciByaWdodFNpbmdsZVF1b3Rh
dGlvbk1hcmsgPSAweDIwMTk7Ci1jb25zdCBVQ2hhciByaWdodFRvTGVmdEVtYmVkID0gMHgyMDJC
OwotY29uc3QgVUNoYXIgcmlnaHRUb0xlZnRJc29sYXRlID0gMHgyMDY3OwotY29uc3QgVUNoYXIg
cmlnaHRUb0xlZnRNYXJrID0gMHgyMDBGOwotY29uc3QgVUNoYXIgcmlnaHRUb0xlZnRPdmVycmlk
ZSA9IDB4MjAyRTsKLWNvbnN0IFVDaGFyIHNlc2FtZURvdCA9IDB4RkU0NTsKLWNvbnN0IFVDaGFy
IHNtYWxsTGV0dGVyU2hhcnBTID0gMHgwMERGOwotY29uc3QgVUNoYXIgc29mdEh5cGhlbiA9IDB4
MDBBRDsKLWNvbnN0IFVDaGFyIHNwYWNlID0gMHgwMDIwOwotY29uc3QgVUNoYXIgdGliZXRhbk1h
cmtEZWxpbWl0ZXJUc2hlZ0JzdGFyID0gMHgwRjBDOwotY29uc3QgVUNoYXIgdGliZXRhbk1hcmtJ
bnRlcnN5bGxhYmljVHNoZWcgPSAweDBGMEI7Ci1jb25zdCBVQ2hhcjMyIHVnYXJpdGljV29yZERp
dmlkZXIgPSAweDEwMzlGOwotY29uc3QgVUNoYXIgd2hpdGVCdWxsZXQgPSAweDI1RTY7Ci1jb25z
dCBVQ2hhciB3aGl0ZUNpcmNsZSA9IDB4MjVDQjsKLWNvbnN0IFVDaGFyIHdoaXRlU2VzYW1lRG90
ID0gMHhGRTQ2OwotY29uc3QgVUNoYXIgd2hpdGVVcFBvaW50aW5nVHJpYW5nbGUgPSAweDI1QjM7
Ci1jb25zdCBVQ2hhciB3b3JkSm9pbmVyID0gMHgyMDYwOwotY29uc3QgVUNoYXIgeWVuU2lnbiA9
IDB4MDBBNTsKLWNvbnN0IFVDaGFyIHplcm9XaWR0aEpvaW5lciA9IDB4MjAwRDsKLWNvbnN0IFVD
aGFyIHplcm9XaWR0aE5vQnJlYWtTcGFjZSA9IDB4RkVGRjsKLWNvbnN0IFVDaGFyIHplcm9XaWR0
aE5vbkpvaW5lciA9IDB4MjAwQzsKLWNvbnN0IFVDaGFyIHplcm9XaWR0aFNwYWNlID0gMHgyMDBC
OwotCi19IC8vIG5hbWVzcGFjZSBVbmljb2RlCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcg
V1RGOjpVbmljb2RlOjpBcHBsZUxvZ287Ci11c2luZyBXVEY6OlVuaWNvZGU6OkhpcmFnYW5hTGV0
dGVyU21hbGxBOwotdXNpbmcgV1RGOjpVbmljb2RlOjphZWdlYW5Xb3JkU2VwYXJhdG9yRG90Owot
dXNpbmcgV1RGOjpVbmljb2RlOjphZWdlYW5Xb3JkU2VwYXJhdG9yTGluZTsKLXVzaW5nIFdURjo6
VW5pY29kZTo6YmxhY2tDaXJjbGU7Ci11c2luZyBXVEY6OlVuaWNvZGU6OmJsYWNrU3F1YXJlOwot
dXNpbmcgV1RGOjpVbmljb2RlOjpibGFja1VwUG9pbnRpbmdUcmlhbmdsZTsKLXVzaW5nIFdURjo6
VW5pY29kZTo6YnVsbGV0OwotdXNpbmcgV1RGOjpVbmljb2RlOjpidWxsc2V5ZTsKLXVzaW5nIFdU
Rjo6VW5pY29kZTo6Y2FycmlhZ2VSZXR1cm47Ci11c2luZyBXVEY6OlVuaWNvZGU6OmV0aGlvcGlj
UHJlZmFjZUNvbG9uOwotdXNpbmcgV1RGOjpVbmljb2RlOjpldGhpb3BpY1dvcmRzcGFjZTsKLXVz
aW5nIFdURjo6VW5pY29kZTo6Zmlyc3RTdHJvbmdJc29sYXRlOwotdXNpbmcgV1RGOjpVbmljb2Rl
OjpmaXNoZXllOwotdXNpbmcgV1RGOjpVbmljb2RlOjpoZWJyZXdQdW5jdHVhdGlvbkdlcmVzaDsK
LXVzaW5nIFdURjo6VW5pY29kZTo6aGVicmV3UHVuY3R1YXRpb25HZXJzaGF5aW07Ci11c2luZyBX
VEY6OlVuaWNvZGU6Omhvcml6b250YWxFbGxpcHNpczsKLXVzaW5nIFdURjo6VW5pY29kZTo6aHlw
aGVuOwotdXNpbmcgV1RGOjpVbmljb2RlOjpoeXBoZW5NaW51czsKLXVzaW5nIFdURjo6VW5pY29k
ZTo6aWRlb2dyYXBoaWNDb21tYTsKLXVzaW5nIFdURjo6VW5pY29kZTo6aWRlb2dyYXBoaWNGdWxs
U3RvcDsKLXVzaW5nIFdURjo6VW5pY29kZTo6aWRlb2dyYXBoaWNTcGFjZTsKLXVzaW5nIFdURjo6
VW5pY29kZTo6bGVmdERvdWJsZVF1b3RhdGlvbk1hcms7Ci11c2luZyBXVEY6OlVuaWNvZGU6Omxl
ZnRTaW5nbGVRdW90YXRpb25NYXJrOwotdXNpbmcgV1RGOjpVbmljb2RlOjpsZWZ0VG9SaWdodEVt
YmVkOwotdXNpbmcgV1RGOjpVbmljb2RlOjpsZWZ0VG9SaWdodElzb2xhdGU7Ci11c2luZyBXVEY6
OlVuaWNvZGU6OmxlZnRUb1JpZ2h0TWFyazsKLXVzaW5nIFdURjo6VW5pY29kZTo6bGVmdFRvUmln
aHRPdmVycmlkZTsKLXVzaW5nIFdURjo6VW5pY29kZTo6bWludXNTaWduOwotdXNpbmcgV1RGOjpV
bmljb2RlOjpuYXJyb3dOb0JyZWFrU3BhY2U7Ci11c2luZyBXVEY6OlVuaWNvZGU6Om5hcnJvd05v
bkJyZWFraW5nU3BhY2U7Ci11c2luZyBXVEY6OlVuaWNvZGU6Om5ld2xpbmVDaGFyYWN0ZXI7Ci11
c2luZyBXVEY6OlVuaWNvZGU6Om5vQnJlYWtTcGFjZTsKLXVzaW5nIFdURjo6VW5pY29kZTo6b2Jq
ZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXI7Ci11c2luZyBXVEY6OlVuaWNvZGU6OnBvcERpcmVjdGlv
bmFsRm9ybWF0dGluZzsKLXVzaW5nIFdURjo6VW5pY29kZTo6cG9wRGlyZWN0aW9uYWxJc29sYXRl
OwotdXNpbmcgV1RGOjpVbmljb2RlOjpyZXBsYWNlbWVudENoYXJhY3RlcjsKLXVzaW5nIFdURjo6
VW5pY29kZTo6cmlnaHREb3VibGVRdW90YXRpb25NYXJrOwotdXNpbmcgV1RGOjpVbmljb2RlOjpy
aWdodFNpbmdsZVF1b3RhdGlvbk1hcms7Ci11c2luZyBXVEY6OlVuaWNvZGU6OnJpZ2h0VG9MZWZ0
RW1iZWQ7Ci11c2luZyBXVEY6OlVuaWNvZGU6OnJpZ2h0VG9MZWZ0SXNvbGF0ZTsKLXVzaW5nIFdU
Rjo6VW5pY29kZTo6cmlnaHRUb0xlZnRNYXJrOwotdXNpbmcgV1RGOjpVbmljb2RlOjpyaWdodFRv
TGVmdE92ZXJyaWRlOwotdXNpbmcgV1RGOjpVbmljb2RlOjpzZXNhbWVEb3Q7Ci11c2luZyBXVEY6
OlVuaWNvZGU6OnNvZnRIeXBoZW47Ci11c2luZyBXVEY6OlVuaWNvZGU6OnNwYWNlOwotdXNpbmcg
V1RGOjpVbmljb2RlOjp0aWJldGFuTWFya0RlbGltaXRlclRzaGVnQnN0YXI7Ci11c2luZyBXVEY6
OlVuaWNvZGU6OnRpYmV0YW5NYXJrSW50ZXJzeWxsYWJpY1RzaGVnOwotdXNpbmcgV1RGOjpVbmlj
b2RlOjp1Z2FyaXRpY1dvcmREaXZpZGVyOwotdXNpbmcgV1RGOjpVbmljb2RlOjp3aGl0ZUJ1bGxl
dDsKLXVzaW5nIFdURjo6VW5pY29kZTo6d2hpdGVDaXJjbGU7Ci11c2luZyBXVEY6OlVuaWNvZGU6
OndoaXRlU2VzYW1lRG90OwotdXNpbmcgV1RGOjpVbmljb2RlOjp3aGl0ZVVwUG9pbnRpbmdUcmlh
bmdsZTsKLXVzaW5nIFdURjo6VW5pY29kZTo6d29yZEpvaW5lcjsKLXVzaW5nIFdURjo6VW5pY29k
ZTo6eWVuU2lnbjsKLXVzaW5nIFdURjo6VW5pY29kZTo6emVyb1dpZHRoSm9pbmVyOwotdXNpbmcg
V1RGOjpVbmljb2RlOjp6ZXJvV2lkdGhOb0JyZWFrU3BhY2U7Ci11c2luZyBXVEY6OlVuaWNvZGU6
Onplcm9XaWR0aE5vbkpvaW5lcjsKLXVzaW5nIFdURjo6VW5pY29kZTo6emVyb1dpZHRoU3BhY2U7
Ci0KLSNlbmRpZiAvLyBDaGFyYWN0ZXJOYW1lc19oCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1N0aXRjaE1hcmtlci93dGYvdW5pY29kZS9VVEY4LmNwcCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi91bmljb2RlL1VURjguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiOWE4N2M5ODUxYzZhYmY3YmRhZjE5MjM4MzNiZGVlMmRhZmEwNWI0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi91bmljb2RlL1VURjguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDg4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTQgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJl
ciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVVRGOC5oIgotCi0jaW5j
bHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci1uYW1l
c3BhY2UgVW5pY29kZSB7Ci0KLWlubGluZSBpbnQgaW5saW5lVVRGOFNlcXVlbmNlTGVuZ3RoTm9u
QVNDSUkoY2hhciBiMCkKLXsKLSAgICBpZiAoKGIwICYgMHhDMCkgIT0gMHhDMCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKChiMCAmIDB4RTApID09IDB4QzApCi0gICAgICAgIHJldHVybiAy
OwotICAgIGlmICgoYjAgJiAweEYwKSA9PSAweEUwKQotICAgICAgICByZXR1cm4gMzsKLSAgICBp
ZiAoKGIwICYgMHhGOCkgPT0gMHhGMCkKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLWlubGluZSBpbnQgaW5saW5lVVRGOFNlcXVlbmNlTGVuZ3RoKGNoYXIgYjApCi17Ci0g
ICAgcmV0dXJuIGlzQVNDSUkoYjApID8gMSA6IGlubGluZVVURjhTZXF1ZW5jZUxlbmd0aE5vbkFT
Q0lJKGIwKTsKLX0KLQotaW50IFVURjhTZXF1ZW5jZUxlbmd0aChjaGFyIGIwKQotewotICAgIHJl
dHVybiBpc0FTQ0lJKGIwKSA/IDEgOiBpbmxpbmVVVEY4U2VxdWVuY2VMZW5ndGhOb25BU0NJSShi
MCk7Ci19Ci0KLWludCBkZWNvZGVVVEY4U2VxdWVuY2UoY29uc3QgY2hhciogc2VxdWVuY2UpCi17
Ci0gICAgLy8gSGFuZGxlIDAtYnl0ZSBzZXF1ZW5jZXMgKG5ldmVyIHZhbGlkKS4KLSAgICBjb25z
dCB1bnNpZ25lZCBjaGFyIGIwID0gc2VxdWVuY2VbMF07Ci0gICAgY29uc3QgaW50IGxlbmd0aCA9
IGlubGluZVVURjhTZXF1ZW5jZUxlbmd0aChiMCk7Ci0gICAgaWYgKGxlbmd0aCA9PSAwKQotICAg
ICAgICByZXR1cm4gLTE7Ci0KLSAgICAvLyBIYW5kbGUgMS1ieXRlIHNlcXVlbmNlcyAocGxhaW4g
QVNDSUkpLgotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYjEgPSBzZXF1ZW5jZVsxXTsKLSAgICBp
ZiAobGVuZ3RoID09IDEpIHsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmV0dXJuIC0x
OwotICAgICAgICByZXR1cm4gYjA7Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIDItYnl0ZSBzZXF1
ZW5jZXMuCi0gICAgaWYgKChiMSAmIDB4QzApICE9IDB4ODApCi0gICAgICAgIHJldHVybiAtMTsK
LSAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGIyID0gc2VxdWVuY2VbMl07Ci0gICAgaWYgKGxlbmd0
aCA9PSAyKSB7Ci0gICAgICAgIGlmIChiMikKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAg
ICAgY29uc3QgaW50IGMgPSAoKGIwICYgMHgxRikgPDwgNikgfCAoYjEgJiAweDNGKTsKLSAgICAg
ICAgaWYgKGMgPCAweDgwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICByZXR1cm4g
YzsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgMy1ieXRlIHNlcXVlbmNlcy4KLSAgICBpZiAoKGIy
ICYgMHhDMCkgIT0gMHg4MCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgYjMgPSBzZXF1ZW5jZVszXTsKLSAgICBpZiAobGVuZ3RoID09IDMpIHsKLSAgICAgICAg
aWYgKGIzKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBjb25zdCBpbnQgYyA9ICgo
YjAgJiAweEYpIDw8IDEyKSB8ICgoYjEgJiAweDNGKSA8PCA2KSB8IChiMiAmIDB4M0YpOwotICAg
ICAgICBpZiAoYyA8IDB4ODAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAvLyBV
VEYtMTYgc3Vycm9nYXRlcyBzaG91bGQgbmV2ZXIgYXBwZWFyIGluIFVURi04IGRhdGEuCi0gICAg
ICAgIGlmIChjID49IDB4RDgwMCAmJiBjIDw9IDB4REZGRikKLSAgICAgICAgICAgIHJldHVybiAt
MTsKLSAgICAgICAgcmV0dXJuIGM7Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIDQtYnl0ZSBzZXF1
ZW5jZXMuCi0gICAgaWYgKChiMyAmIDB4QzApICE9IDB4ODApCi0gICAgICAgIHJldHVybiAtMTsK
LSAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGI0ID0gc2VxdWVuY2VbNF07Ci0gICAgaWYgKGxlbmd0
aCA9PSA0KSB7Ci0gICAgICAgIGlmIChiNCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAg
ICAgY29uc3QgaW50IGMgPSAoKGIwICYgMHg3KSA8PCAxOCkgfCAoKGIxICYgMHgzRikgPDwgMTIp
IHwgKChiMiAmIDB4M0YpIDw8IDYpIHwgKGIzICYgMHgzRik7Ci0gICAgICAgIGlmIChjIDwgMHgx
MDAwMCB8fCBjID4gMHgxMEZGRkYpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHJl
dHVybiBjOwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotLy8gT25jZSB0aGUgYml0cyBh
cmUgc3BsaXQgb3V0IGludG8gYnl0ZXMgb2YgVVRGLTgsIHRoaXMgaXMgYSBtYXNrIE9SLWVkCi0v
LyBpbnRvIHRoZSBmaXJzdCBieXRlLCBkZXBlbmRpbmcgb24gaG93IG1hbnkgYnl0ZXMgZm9sbG93
LiAgVGhlcmUgYXJlCi0vLyBhcyBtYW55IGVudHJpZXMgaW4gdGhpcyB0YWJsZSBhcyB0aGVyZSBh
cmUgVVRGLTggc2VxdWVuY2UgdHlwZXMuCi0vLyAoSS5lLiwgb25lIGJ5dGUgc2VxdWVuY2UsIHR3
byBieXRlLi4uIGV0Yy4pLiBSZW1lbWJlciB0aGF0IHNlcXVlbmNzCi0vLyBmb3IgKmxlZ2FsKiBV
VEYtOCB3aWxsIGJlIDQgb3IgZmV3ZXIgYnl0ZXMgdG90YWwuCi1zdGF0aWMgY29uc3QgdW5zaWdu
ZWQgY2hhciBmaXJzdEJ5dGVNYXJrWzddID0geyAweDAwLCAweDAwLCAweEMwLCAweEUwLCAweEYw
LCAweEY4LCAweEZDIH07Ci0KLUNvbnZlcnNpb25SZXN1bHQgY29udmVydExhdGluMVRvVVRGOCgK
LSAgICBjb25zdCBMQ2hhcioqIHNvdXJjZVN0YXJ0LCBjb25zdCBMQ2hhciogc291cmNlRW5kLCAK
LSAgICBjaGFyKiogdGFyZ2V0U3RhcnQsIGNoYXIqIHRhcmdldEVuZCkKLXsKLSAgICBDb252ZXJz
aW9uUmVzdWx0IHJlc3VsdCA9IGNvbnZlcnNpb25PSzsKLSAgICBjb25zdCBMQ2hhciogc291cmNl
ID0gKnNvdXJjZVN0YXJ0OwotICAgIGNoYXIqIHRhcmdldCA9ICp0YXJnZXRTdGFydDsKLSAgICB3
aGlsZSAoc291cmNlIDwgc291cmNlRW5kKSB7Ci0gICAgICAgIFVDaGFyMzIgY2g7Ci0gICAgICAg
IHVuc2lnbmVkIHNob3J0IGJ5dGVzVG9Xcml0ZSA9IDA7Ci0gICAgICAgIGNvbnN0IFVDaGFyMzIg
Ynl0ZU1hc2sgPSAweEJGOwotICAgICAgICBjb25zdCBVQ2hhcjMyIGJ5dGVNYXJrID0gMHg4MDsg
Ci0gICAgICAgIGNvbnN0IExDaGFyKiBvbGRTb3VyY2UgPSBzb3VyY2U7IC8vIEluIGNhc2Ugd2Ug
aGF2ZSB0byBiYWNrIHVwIGJlY2F1c2Ugb2YgdGFyZ2V0IG92ZXJmbG93LgotICAgICAgICBjaCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pigqc291cmNlKyspOwotCi0gICAgICAgIC8vIEZp
Z3VyZSBvdXQgaG93IG1hbnkgYnl0ZXMgdGhlIHJlc3VsdCB3aWxsIHJlcXVpcmUKLSAgICAgICAg
aWYgKGNoIDwgKFVDaGFyMzIpMHg4MCkKLSAgICAgICAgICAgIGJ5dGVzVG9Xcml0ZSA9IDE7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJ5dGVzVG9Xcml0ZSA9IDI7Ci0KLSAgICAgICAgdGFy
Z2V0ICs9IGJ5dGVzVG9Xcml0ZTsKLSAgICAgICAgaWYgKHRhcmdldCA+IHRhcmdldEVuZCkgewot
ICAgICAgICAgICAgc291cmNlID0gb2xkU291cmNlOyAvLyBCYWNrIHVwIHNvdXJjZSBwb2ludGVy
IQotICAgICAgICAgICAgdGFyZ2V0IC09IGJ5dGVzVG9Xcml0ZTsKLSAgICAgICAgICAgIHJlc3Vs
dCA9IHRhcmdldEV4aGF1c3RlZDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIHN3aXRjaCAoYnl0ZXNUb1dyaXRlKSB7IC8vIG5vdGU6IGV2ZXJ5dGhpbmcgZmFsbHMgdGhy
b3VnaC4KLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgKi0tdGFyZ2V0ID0gKGNoYXIpKChj
aCB8IGJ5dGVNYXJrKSAmIGJ5dGVNYXNrKTsKLSAgICAgICAgICAgIGNoID4+PSA2OwotICAgICAg
ICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICotLXRhcmdl
dCA9ICAoY2hhcikoY2ggfCBmaXJzdEJ5dGVNYXJrW2J5dGVzVG9Xcml0ZV0pOwotICAgICAgICB9
Ci0gICAgICAgIHRhcmdldCArPSBieXRlc1RvV3JpdGU7Ci0gICAgfQotICAgICpzb3VyY2VTdGFy
dCA9IHNvdXJjZTsKLSAgICAqdGFyZ2V0U3RhcnQgPSB0YXJnZXQ7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotQ29udmVyc2lvblJlc3VsdCBjb252ZXJ0VVRGMTZUb1VURjgoCi0gICAgY29uc3Qg
VUNoYXIqKiBzb3VyY2VTdGFydCwgY29uc3QgVUNoYXIqIHNvdXJjZUVuZCwgCi0gICAgY2hhcioq
IHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQsIGJvb2wgc3RyaWN0KQotewotICAgIENvbnZl
cnNpb25SZXN1bHQgcmVzdWx0ID0gY29udmVyc2lvbk9LOwotICAgIGNvbnN0IFVDaGFyKiBzb3Vy
Y2UgPSAqc291cmNlU3RhcnQ7Ci0gICAgY2hhciogdGFyZ2V0ID0gKnRhcmdldFN0YXJ0OwotICAg
IHdoaWxlIChzb3VyY2UgPCBzb3VyY2VFbmQpIHsKLSAgICAgICAgVUNoYXIzMiBjaDsKLSAgICAg
ICAgdW5zaWduZWQgc2hvcnQgYnl0ZXNUb1dyaXRlID0gMDsKLSAgICAgICAgY29uc3QgVUNoYXIz
MiBieXRlTWFzayA9IDB4QkY7Ci0gICAgICAgIGNvbnN0IFVDaGFyMzIgYnl0ZU1hcmsgPSAweDgw
OyAKLSAgICAgICAgY29uc3QgVUNoYXIqIG9sZFNvdXJjZSA9IHNvdXJjZTsgLy8gSW4gY2FzZSB3
ZSBoYXZlIHRvIGJhY2sgdXAgYmVjYXVzZSBvZiB0YXJnZXQgb3ZlcmZsb3cuCi0gICAgICAgIGNo
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KCpzb3VyY2UrKyk7Ci0gICAgICAgIC8vIElm
IHdlIGhhdmUgYSBzdXJyb2dhdGUgcGFpciwgY29udmVydCB0byBVQ2hhcjMyIGZpcnN0LgotICAg
ICAgICBpZiAoY2ggPj0gMHhEODAwICYmIGNoIDw9IDB4REJGRikgewotICAgICAgICAgICAgLy8g
SWYgdGhlIDE2IGJpdHMgZm9sbG93aW5nIHRoZSBoaWdoIHN1cnJvZ2F0ZSBhcmUgaW4gdGhlIHNv
dXJjZSBidWZmZXIuLi4KLSAgICAgICAgICAgIGlmIChzb3VyY2UgPCBzb3VyY2VFbmQpIHsKLSAg
ICAgICAgICAgICAgICBVQ2hhcjMyIGNoMiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pigq
c291cmNlKTsKLSAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGEgbG93IHN1cnJvZ2F0ZSwgY29u
dmVydCB0byBVQ2hhcjMyLgotICAgICAgICAgICAgICAgIGlmIChjaDIgPj0gMHhEQzAwICYmIGNo
MiA8PSAweERGRkYpIHsKLSAgICAgICAgICAgICAgICAgICAgY2ggPSAoKGNoIC0gMHhEODAwKSA8
PCAxMCkgKyAoY2gyIC0gMHhEQzAwKSArIDB4MDAxMDAwMDsKLSAgICAgICAgICAgICAgICAgICAg
Kytzb3VyY2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QpIHsgLy8gaXQncyBh
biB1bnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZQotICAgICAgICAgICAgICAgICAgICAtLXNvdXJjZTsg
Ly8gcmV0dXJuIHRvIHRoZSBpbGxlZ2FsIHZhbHVlIGl0c2VsZgotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBzb3VyY2VJbGxlZ2FsOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgeyAvLyBXZSBkb24ndCBoYXZlIHRo
ZSAxNiBiaXRzIGZvbGxvd2luZyB0aGUgaGlnaCBzdXJyb2dhdGUuCi0gICAgICAgICAgICAgICAg
LS1zb3VyY2U7IC8vIHJldHVybiB0byB0aGUgaGlnaCBzdXJyb2dhdGUKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBzb3VyY2VFeGhhdXN0ZWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0KSB7Ci0gICAgICAgICAgICAvLyBV
VEYtMTYgc3Vycm9nYXRlIHZhbHVlcyBhcmUgaWxsZWdhbCBpbiBVVEYtMzIKLSAgICAgICAgICAg
IGlmIChjaCA+PSAweERDMDAgJiYgY2ggPD0gMHhERkZGKSB7Ci0gICAgICAgICAgICAgICAgLS1z
b3VyY2U7IC8vIHJldHVybiB0byB0aGUgaWxsZWdhbCB2YWx1ZSBpdHNlbGYKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBzb3VyY2VJbGxlZ2FsOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEZpZ3VyZSBvdXQgaG93IG1hbnkgYnl0
ZXMgdGhlIHJlc3VsdCB3aWxsIHJlcXVpcmUKLSAgICAgICAgaWYgKGNoIDwgKFVDaGFyMzIpMHg4
MCkgewotICAgICAgICAgICAgYnl0ZXNUb1dyaXRlID0gMTsKLSAgICAgICAgfSBlbHNlIGlmIChj
aCA8IChVQ2hhcjMyKTB4ODAwKSB7Ci0gICAgICAgICAgICBieXRlc1RvV3JpdGUgPSAyOwotICAg
ICAgICB9IGVsc2UgaWYgKGNoIDwgKFVDaGFyMzIpMHgxMDAwMCkgewotICAgICAgICAgICAgYnl0
ZXNUb1dyaXRlID0gMzsKLSAgICAgICAgfSBlbHNlIGlmIChjaCA8IChVQ2hhcjMyKTB4MTEwMDAw
KSB7Ci0gICAgICAgICAgICBieXRlc1RvV3JpdGUgPSA0OwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgYnl0ZXNUb1dyaXRlID0gMzsKLSAgICAgICAgICAgIGNoID0gcmVwbGFjZW1lbnRD
aGFyYWN0ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICB0YXJnZXQgKz0gYnl0ZXNUb1dyaXRlOwot
ICAgICAgICBpZiAodGFyZ2V0ID4gdGFyZ2V0RW5kKSB7Ci0gICAgICAgICAgICBzb3VyY2UgPSBv
bGRTb3VyY2U7IC8vIEJhY2sgdXAgc291cmNlIHBvaW50ZXIhCi0gICAgICAgICAgICB0YXJnZXQg
LT0gYnl0ZXNUb1dyaXRlOwotICAgICAgICAgICAgcmVzdWx0ID0gdGFyZ2V0RXhoYXVzdGVkOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChieXRlc1RvV3Jp
dGUpIHsgLy8gbm90ZTogZXZlcnl0aGluZyBmYWxscyB0aHJvdWdoLgotICAgICAgICAgICAgY2Fz
ZSA0OiAqLS10YXJnZXQgPSAoY2hhcikoKGNoIHwgYnl0ZU1hcmspICYgYnl0ZU1hc2spOyBjaCA+
Pj0gNjsgRkFMTFRIUk9VR0g7Ci0gICAgICAgICAgICBjYXNlIDM6ICotLXRhcmdldCA9IChjaGFy
KSgoY2ggfCBieXRlTWFyaykgJiBieXRlTWFzayk7IGNoID4+PSA2OyBGQUxMVEhST1VHSDsKLSAg
ICAgICAgICAgIGNhc2UgMjogKi0tdGFyZ2V0ID0gKGNoYXIpKChjaCB8IGJ5dGVNYXJrKSAmIGJ5
dGVNYXNrKTsgY2ggPj49IDY7IEZBTExUSFJPVUdIOwotICAgICAgICAgICAgY2FzZSAxOiAqLS10
YXJnZXQgPSAgKGNoYXIpKGNoIHwgZmlyc3RCeXRlTWFya1tieXRlc1RvV3JpdGVdKTsKLSAgICAg
ICAgfQotICAgICAgICB0YXJnZXQgKz0gYnl0ZXNUb1dyaXRlOwotICAgIH0KLSAgICAqc291cmNl
U3RhcnQgPSBzb3VyY2U7Ci0gICAgKnRhcmdldFN0YXJ0ID0gdGFyZ2V0OwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLS8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbGVuZ3RoIHByZS1k
ZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBieXRlLgotLy8gSWYgcHJlc2VudGVkIHdpdGggYSBsZW5n
dGggPiA0LCB0aGlzIHJldHVybnMgZmFsc2UuICBUaGUgVW5pY29kZQotLy8gZGVmaW5pdGlvbiBv
ZiBVVEYtOCBnb2VzIHVwIHRvIDQtYnl0ZSBzZXF1ZW5jZXMuCi1zdGF0aWMgYm9vbCBpc0xlZ2Fs
VVRGOChjb25zdCB1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIGludCBsZW5ndGgpCi17Ci0gICAgdW5z
aWduZWQgY2hhciBhOwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyY3B0ciA9IHNvdXJjZSAr
IGxlbmd0aDsKLSAgICBzd2l0Y2ggKGxlbmd0aCkgewotICAgICAgICBkZWZhdWx0OiByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBmYWxscyB0aHJvdWdoIHdoZW4gInRy
dWUiLi4uCi0gICAgICAgIGNhc2UgNDogaWYgKChhID0gKCotLXNyY3B0cikpIDwgMHg4MCB8fCBh
ID4gMHhCRikgcmV0dXJuIGZhbHNlOyBGQUxMVEhST1VHSDsKLSAgICAgICAgY2FzZSAzOiBpZiAo
KGEgPSAoKi0tc3JjcHRyKSkgPCAweDgwIHx8IGEgPiAweEJGKSByZXR1cm4gZmFsc2U7IEZBTExU
SFJPVUdIOwotICAgICAgICBjYXNlIDI6IGlmICgoYSA9ICgqLS1zcmNwdHIpKSA+IDB4QkYpIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBzd2l0Y2ggKCpzb3VyY2UpIHsKLSAgICAgICAgICAgIC8v
IG5vIGZhbGwtdGhyb3VnaCBpbiB0aGlzIGlubmVyIHN3aXRjaAotICAgICAgICAgICAgY2FzZSAw
eEUwOiBpZiAoYSA8IDB4QTApIHJldHVybiBmYWxzZTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IDB4RUQ6IGlmIChhID4gMHg5RikgcmV0dXJuIGZhbHNlOyBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgMHhGMDogaWYgKGEgPCAweDkwKSByZXR1cm4gZmFsc2U7IGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSAweEY0OiBpZiAoYSA+IDB4OEYpIHJldHVybiBmYWxzZTsgYnJlYWs7Ci0gICAgICAgICAg
ICBkZWZhdWx0OiAgIGlmIChhIDwgMHg4MCkgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIEZBTExUSFJPVUdIOwotCi0gICAgICAgIGNhc2UgMTogaWYgKCpzb3VyY2UgPj0gMHg4MCAm
JiAqc291cmNlIDwgMHhDMikgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoKnNvdXJjZSA+
IDB4RjQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8g
TWFnaWMgdmFsdWVzIHN1YnRyYWN0ZWQgZnJvbSBhIGJ1ZmZlciB2YWx1ZSBkdXJpbmcgVVRGOCBj
b252ZXJzaW9uLgotLy8gVGhpcyB0YWJsZSBjb250YWlucyBhcyBtYW55IHZhbHVlcyBhcyB0aGVy
ZSBtaWdodCBiZSB0cmFpbGluZyBieXRlcwotLy8gaW4gYSBVVEYtOCBzZXF1ZW5jZS4KLXN0YXRp
YyBjb25zdCBVQ2hhcjMyIG9mZnNldHNGcm9tVVRGOFs2XSA9IHsgMHgwMDAwMDAwMFVMLCAweDAw
MDAzMDgwVUwsIDB4MDAwRTIwODBVTCwgMHgwM0M4MjA4MFVMLCBzdGF0aWNfY2FzdDxVQ2hhcjMy
PigweEZBMDgyMDgwVUwpLCBzdGF0aWNfY2FzdDxVQ2hhcjMyPigweDgyMDgyMDgwVUwpIH07Ci0K
LXN0YXRpYyBpbmxpbmUgVUNoYXIzMiByZWFkVVRGOFNlcXVlbmNlKGNvbnN0IGNoYXIqJiBzZXF1
ZW5jZSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gMDsKLQot
ICAgIC8vIFRoZSBjYXNlcyBhbGwgZmFsbCB0aHJvdWdoLgotICAgIHN3aXRjaCAobGVuZ3RoKSB7
Ci0gICAgICAgIGNhc2UgNjogY2hhcmFjdGVyICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KCpzZXF1ZW5jZSsrKTsgY2hhcmFjdGVyIDw8PSA2OyBGQUxMVEhST1VHSDsKLSAgICAgICAgY2Fz
ZSA1OiBjaGFyYWN0ZXIgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKnNlcXVlbmNlKysp
OyBjaGFyYWN0ZXIgPDw9IDY7IEZBTExUSFJPVUdIOwotICAgICAgICBjYXNlIDQ6IGNoYXJhY3Rl
ciArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqc2VxdWVuY2UrKyk7IGNoYXJhY3RlciA8
PD0gNjsgRkFMTFRIUk9VR0g7Ci0gICAgICAgIGNhc2UgMzogY2hhcmFjdGVyICs9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KCpzZXF1ZW5jZSsrKTsgY2hhcmFjdGVyIDw8PSA2OyBGQUxMVEhS
T1VHSDsKLSAgICAgICAgY2FzZSAyOiBjaGFyYWN0ZXIgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oKnNlcXVlbmNlKyspOyBjaGFyYWN0ZXIgPDw9IDY7IEZBTExUSFJPVUdIOwotICAgICAg
ICBjYXNlIDE6IGNoYXJhY3RlciArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqc2VxdWVu
Y2UrKyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNoYXJhY3RlciAtIG9mZnNldHNGcm9tVVRGOFts
ZW5ndGggLSAxXTsKLX0KLQotQ29udmVyc2lvblJlc3VsdCBjb252ZXJ0VVRGOFRvVVRGMTYoCi0g
ICAgY29uc3QgY2hhcioqIHNvdXJjZVN0YXJ0LCBjb25zdCBjaGFyKiBzb3VyY2VFbmQsIAotICAg
IFVDaGFyKiogdGFyZ2V0U3RhcnQsIFVDaGFyKiB0YXJnZXRFbmQsIGJvb2wqIHNvdXJjZUFsbEFT
Q0lJLCBib29sIHN0cmljdCkKLXsKLSAgICBDb252ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IGNvbnZl
cnNpb25PSzsKLSAgICBjb25zdCBjaGFyKiBzb3VyY2UgPSAqc291cmNlU3RhcnQ7Ci0gICAgVUNo
YXIqIHRhcmdldCA9ICp0YXJnZXRTdGFydDsKLSAgICBVQ2hhciBvckFsbERhdGEgPSAwOwotICAg
IHdoaWxlIChzb3VyY2UgPCBzb3VyY2VFbmQpIHsKLSAgICAgICAgaW50IHV0ZjhTZXF1ZW5jZUxl
bmd0aCA9IGlubGluZVVURjhTZXF1ZW5jZUxlbmd0aCgqc291cmNlKTsKLSAgICAgICAgaWYgKHNv
dXJjZUVuZCAtIHNvdXJjZSA8IHV0ZjhTZXF1ZW5jZUxlbmd0aCkgIHsKLSAgICAgICAgICAgIHJl
c3VsdCA9IHNvdXJjZUV4aGF1c3RlZDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIERvIHRoaXMgY2hlY2sgd2hldGhlciBsZW5pZW50IG9yIHN0cmljdAotICAgICAg
ICBpZiAoIWlzTGVnYWxVVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KHNvdXJjZSksIHV0ZjhTZXF1ZW5jZUxlbmd0aCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHNv
dXJjZUlsbGVnYWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFVD
aGFyMzIgY2hhcmFjdGVyID0gcmVhZFVURjhTZXF1ZW5jZShzb3VyY2UsIHV0ZjhTZXF1ZW5jZUxl
bmd0aCk7Ci0KLSAgICAgICAgaWYgKHRhcmdldCA+PSB0YXJnZXRFbmQpIHsKLSAgICAgICAgICAg
IHNvdXJjZSAtPSB1dGY4U2VxdWVuY2VMZW5ndGg7IC8vIEJhY2sgdXAgc291cmNlIHBvaW50ZXIh
Ci0gICAgICAgICAgICByZXN1bHQgPSB0YXJnZXRFeGhhdXN0ZWQ7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7Ci0gICAg
ICAgICAgICAvLyBVVEYtMTYgc3Vycm9nYXRlIHZhbHVlcyBhcmUgaWxsZWdhbCBpbiBVVEYtMzIK
LSAgICAgICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0cmljdCkgewotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgLT0gdXRmOFNl
cXVlbmNlTGVuZ3RoOyAvLyByZXR1cm4gdG8gdGhlIGlsbGVnYWwgdmFsdWUgaXRzZWxmCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNvdXJjZUlsbGVnYWw7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICp0YXJnZXQrKyA9IHJlcGxhY2VtZW50Q2hhcmFjdGVyOwotICAgICAgICAgICAgICAgICAgICBv
ckFsbERhdGEgfD0gcmVwbGFjZW1lbnRDaGFyYWN0ZXI7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAqdGFyZ2V0KysgPSBjaGFyYWN0ZXI7
IC8vIG5vcm1hbCBjYXNlCi0gICAgICAgICAgICAgICAgb3JBbGxEYXRhIHw9IGNoYXJhY3RlcjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChVX0lTX1NVUFBMRU1FTlRBUlkoY2hh
cmFjdGVyKSkgewotICAgICAgICAgICAgLy8gdGFyZ2V0IGlzIGEgY2hhcmFjdGVyIGluIHJhbmdl
IDB4RkZGRiAtIDB4MTBGRkZGCi0gICAgICAgICAgICBpZiAodGFyZ2V0ICsgMSA+PSB0YXJnZXRF
bmQpIHsKLSAgICAgICAgICAgICAgICBzb3VyY2UgLT0gdXRmOFNlcXVlbmNlTGVuZ3RoOyAvLyBC
YWNrIHVwIHNvdXJjZSBwb2ludGVyIQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRhcmdldEV4
aGF1c3RlZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICp0YXJnZXQrKyA9IFUxNl9MRUFEKGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAqdGFyZ2V0
KysgPSBVMTZfVFJBSUwoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIG9yQWxsRGF0YSA9IDB4ZmZm
ZjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzdHJpY3QpIHsKLSAgICAgICAg
ICAgICAgICBzb3VyY2UgLT0gdXRmOFNlcXVlbmNlTGVuZ3RoOyAvLyByZXR1cm4gdG8gdGhlIHN0
YXJ0Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc291cmNlSWxsZWdhbDsKLSAgICAgICAgICAg
ICAgICBicmVhazsgLy8gQmFpbCBvdXQ7IHNob3VsZG4ndCBjb250aW51ZQotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAqdGFyZ2V0KysgPSByZXBsYWNlbWVudENoYXJhY3Rl
cjsKLSAgICAgICAgICAgICAgICBvckFsbERhdGEgfD0gcmVwbGFjZW1lbnRDaGFyYWN0ZXI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgKnNvdXJjZVN0YXJ0ID0gc291cmNl
OwotICAgICp0YXJnZXRTdGFydCA9IHRhcmdldDsKLQotICAgIGlmIChzb3VyY2VBbGxBU0NJSSkK
LSAgICAgICAgKnNvdXJjZUFsbEFTQ0lJID0gIShvckFsbERhdGEgJiB+MHg3Zik7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi11bnNpZ25lZCBjYWxjdWxhdGVTdHJpbmdIYXNoQW5kTGVuZ3Ro
RnJvbVVURjhNYXNraW5nVG9wOEJpdHMoY29uc3QgY2hhciogZGF0YSwgY29uc3QgY2hhciogZGF0
YUVuZCwgdW5zaWduZWQmIGRhdGFMZW5ndGgsIHVuc2lnbmVkJiB1dGYxNkxlbmd0aCkKLXsKLSAg
ICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU3RyaW5nSGFzaGVyIHN0cmlu
Z0hhc2hlcjsKLSAgICBkYXRhTGVuZ3RoID0gMDsKLSAgICB1dGYxNkxlbmd0aCA9IDA7Ci0KLSAg
ICB3aGlsZSAoZGF0YSA8IGRhdGFFbmQgfHwgKCFkYXRhRW5kICYmICpkYXRhKSkgewotICAgICAg
ICBpZiAoaXNBU0NJSSgqZGF0YSkpIHsKLSAgICAgICAgICAgIHN0cmluZ0hhc2hlci5hZGRDaGFy
YWN0ZXIoKmRhdGErKyk7Ci0gICAgICAgICAgICBkYXRhTGVuZ3RoKys7Ci0gICAgICAgICAgICB1
dGYxNkxlbmd0aCsrOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpbnQgdXRmOFNlcXVlbmNlTGVuZ3RoID0gaW5saW5lVVRGOFNlcXVlbmNlTGVuZ3RoTm9uQVND
SUkoKmRhdGEpOwotICAgICAgICBkYXRhTGVuZ3RoICs9IHV0ZjhTZXF1ZW5jZUxlbmd0aDsKLQot
ICAgICAgICBpZiAoIWRhdGFFbmQpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwg
dXRmOFNlcXVlbmNlTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWRhdGFbaV0p
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKGRhdGFFbmQgLSBkYXRhIDwgdXRmOFNlcXVlbmNlTGVuZ3RoKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaWYgKCFpc0xlZ2FsVVRGOChyZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgdXRmOFNlcXVlbmNlTGVuZ3RoKSkKLSAgICAg
ICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gcmVhZFVURjhT
ZXF1ZW5jZShkYXRhLCB1dGY4U2VxdWVuY2VMZW5ndGgpOwotICAgICAgICBBU1NFUlQoIWlzQVND
SUkoY2hhcmFjdGVyKSk7Ci0KLSAgICAgICAgaWYgKFVfSVNfQk1QKGNoYXJhY3RlcikpIHsKLSAg
ICAgICAgICAgIC8vIFVURi0xNiBzdXJyb2dhdGUgdmFsdWVzIGFyZSBpbGxlZ2FsIGluIFVURi0z
MgotICAgICAgICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNoYXJhY3RlcikpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBzdHJpbmdIYXNoZXIuYWRkQ2hhcmFjdGVyKHN0
YXRpY19jYXN0PFVDaGFyPihjaGFyYWN0ZXIpKTsgLy8gbm9ybWFsIGNhc2UKLSAgICAgICAgICAg
IHV0ZjE2TGVuZ3RoKys7Ci0gICAgICAgIH0gZWxzZSBpZiAoVV9JU19TVVBQTEVNRU5UQVJZKGNo
YXJhY3RlcikpIHsKLSAgICAgICAgICAgIHN0cmluZ0hhc2hlci5hZGRDaGFyYWN0ZXJzKHN0YXRp
Y19jYXN0PFVDaGFyPihVMTZfTEVBRChjaGFyYWN0ZXIpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFVDaGFyPihVMTZfVFJBSUwoY2hhcmFjdGVy
KSkpOwotICAgICAgICAgICAgdXRmMTZMZW5ndGggKz0gMjsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5nSGFzaGVyLmhhc2hX
aXRoVG9wOEJpdHNNYXNrZWQoKTsKLX0KLQotYm9vbCBlcXVhbFVURjE2V2l0aFVURjgoY29uc3Qg
VUNoYXIqIGEsIGNvbnN0IGNoYXIqIGIsIGNvbnN0IGNoYXIqIGJFbmQpCi17Ci0gICAgd2hpbGUg
KGIgPCBiRW5kKSB7Ci0gICAgICAgIGlmIChpc0FTQ0lJKCphKSB8fCBpc0FTQ0lJKCpiKSkgewot
ICAgICAgICAgICAgaWYgKCphKysgIT0gKmIrKykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCB1dGY4
U2VxdWVuY2VMZW5ndGggPSBpbmxpbmVVVEY4U2VxdWVuY2VMZW5ndGhOb25BU0NJSSgqYik7Ci0K
LSAgICAgICAgaWYgKGJFbmQgLSBiIDwgdXRmOFNlcXVlbmNlTGVuZ3RoKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghaXNMZWdhbFVURjgocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYiksIHV0ZjhTZXF1ZW5jZUxlbmd0aCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSByZWFkVVRG
OFNlcXVlbmNlKGIsIHV0ZjhTZXF1ZW5jZUxlbmd0aCk7Ci0gICAgICAgIEFTU0VSVCghaXNBU0NJ
SShjaGFyYWN0ZXIpKTsKLQotICAgICAgICBpZiAoVV9JU19CTVAoY2hhcmFjdGVyKSkgewotICAg
ICAgICAgICAgLy8gVVRGLTE2IHN1cnJvZ2F0ZSB2YWx1ZXMgYXJlIGlsbGVnYWwgaW4gVVRGLTMy
Ci0gICAgICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY2hhcmFjdGVyKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoKmErKyAhPSBjaGFyYWN0ZXIpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKFVfSVNfU1VQ
UExFTUVOVEFSWShjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBpZiAoKmErKyAhPSBVMTZfTEVB
RChjaGFyYWN0ZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGlmICgqYSsrICE9IFUxNl9UUkFJTChjaGFyYWN0ZXIpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgZXF1YWxMYXRpbjFXaXRoVVRGOChjb25z
dCBMQ2hhciogYSwgY29uc3QgY2hhciogYiwgY29uc3QgY2hhciogYkVuZCkKLXsKLSAgICB3aGls
ZSAoYiA8IGJFbmQpIHsKLSAgICAgICAgaWYgKGlzQVNDSUkoKmEpIHx8IGlzQVNDSUkoKmIpKSB7
Ci0gICAgICAgICAgICBpZiAoKmErKyAhPSAqYisrKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGIg
KyAxID09IGJFbmQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKChi
WzBdICYgMHhFMCkgIT0gMHhDMCB8fCAoYlsxXSAmIDB4QzApICE9IDB4ODApCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgTENoYXIgY2hhcmFjdGVyID0gKChiWzBdICYgMHgx
RikgPDwgNikgfCAoYlsxXSAmIDB4M0YpOwotCi0gICAgICAgIGIgKz0gMjsKLQotICAgICAgICBp
ZiAoKmErKyAhPSBjaGFyYWN0ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFVuaWNvZGUKLX0gLy8gbmFt
ZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3Rm
L3VuaWNvZGUvVVRGOC5oIGIvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL3VuaWNv
ZGUvVVRGOC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTRhYWQ3MWVlODAwNTQw
ZjI2ODIyMDUxMjkzNTk2NzA2MTlmZjhlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi91bmljb2Rl
L1VURjguaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgV1RGX1VURjhfaAotI2RlZmlu
ZSBXVEZfVVRGOF9oCi0KLSNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0xDaGFyLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotbmFtZXNwYWNlIFVuaWNvZGUgewot
Ci0gICAgLy8gR2l2ZW4gYSBmaXJzdCBieXRlLCBnaXZlcyB0aGUgbGVuZ3RoIG9mIHRoZSBVVEYt
OCBzZXF1ZW5jZSBpdCBiZWdpbnMuCi0gICAgLy8gUmV0dXJucyAwIGZvciBieXRlcyB0aGF0IGFy
ZSBub3QgbGVnYWwgc3RhcnRzIG9mIFVURi04IHNlcXVlbmNlcy4KLSAgICAvLyBPbmx5IGFsbG93
cyBzZXF1ZW5jZXMgb2YgdXAgdG8gNCBieXRlcywgc2luY2UgdGhhdCB3b3JrcyBmb3IgYWxsIFVu
aWNvZGUgY2hhcmFjdGVycyAoVS0wMDAwMDAwMCB0byBVLTAwMTBGRkZGKS4KLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgaW50IFVURjhTZXF1ZW5jZUxlbmd0aChjaGFyKTsKLQotICAgIC8vIFRha2Vz
IGEgbnVsbC10ZXJtaW5hdGVkIEMtc3R5bGUgc3RyaW5nIHdpdGggYSBVVEYtOCBzZXF1ZW5jZSBp
biBpdCBhbmQgY29udmVydHMgaXQgdG8gYSBjaGFyYWN0ZXIuCi0gICAgLy8gT25seSBhbGxvd3Mg
VW5pY29kZSBjaGFyYWN0ZXJzIChVLTAwMDAwMDAwIHRvIFUtMDAxMEZGRkYpLgotICAgIC8vIFJl
dHVybnMgLTEgaWYgdGhlIHNlcXVlbmNlIGlzIG5vdCB2YWxpZCAoaW5jbHVkaW5nIHByZXNlbmNl
IG9mIGV4dHJhIGJ5dGVzKS4KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50IGRlY29kZVVURjhT
ZXF1ZW5jZShjb25zdCBjaGFyKik7Ci0KLSAgICB0eXBlZGVmIGVudW0gewotICAgICAgICAgICAg
Y29udmVyc2lvbk9LLCAgICAgICAvLyBjb252ZXJzaW9uIHN1Y2Nlc3NmdWwKLSAgICAgICAgICAg
IHNvdXJjZUV4aGF1c3RlZCwgICAgLy8gcGFydGlhbCBjaGFyYWN0ZXIgaW4gc291cmNlLCBidXQg
aGl0IGVuZAotICAgICAgICAgICAgdGFyZ2V0RXhoYXVzdGVkLCAgICAvLyBpbnN1ZmYuIHJvb20g
aW4gdGFyZ2V0IGZvciBjb252ZXJzaW9uCi0gICAgICAgICAgICBzb3VyY2VJbGxlZ2FsICAgICAg
IC8vIHNvdXJjZSBzZXF1ZW5jZSBpcyBpbGxlZ2FsL21hbGZvcm1lZAotICAgIH0gQ29udmVyc2lv
blJlc3VsdDsKLQotICAgIC8vIFRoZXNlIGNvbnZlcnNpb24gZnVuY3Rpb25zIHRha2UgYSAic3Ry
aWN0IiBhcmd1bWVudC4gV2hlbiB0aGlzCi0gICAgLy8gZmxhZyBpcyBzZXQgdG8gc3RyaWN0LCBi
b3RoIGlycmVndWxhciBzZXF1ZW5jZXMgYW5kIGlzb2xhdGVkIHN1cnJvZ2F0ZXMKLSAgICAvLyB3
aWxsIGNhdXNlIGFuIGVycm9yLiAgV2hlbiB0aGUgZmxhZyBpcyBzZXQgdG8gbGVuaWVudCwgYm90
aCBpcnJlZ3VsYXIKLSAgICAvLyBzZXF1ZW5jZXMgYW5kIGlzb2xhdGVkIHN1cnJvZ2F0ZXMgYXJl
IGNvbnZlcnRlZC4KLSAgICAvLyAKLSAgICAvLyBXaGV0aGVyIHRoZSBmbGFnIGlzIHN0cmljdCBv
ciBsZW5pZW50LCBhbGwgaWxsZWdhbCBzZXF1ZW5jZXMgd2lsbCBjYXVzZQotICAgIC8vIGFuIGVy
cm9yIHJldHVybi4gVGhpcyBpbmNsdWRlcyBzZXF1ZW5jZXMgc3VjaCBhczogPEY0IDkwIDgwIDgw
PiwgPEMwIDgwPiwKLSAgICAvLyBvciA8QTA+IGluIFVURi04LCBhbmQgdmFsdWVzIGFib3ZlIDB4
MTBGRkZGIGluIFVURi0zMi4gQ29uZm9ybWFudCBjb2RlCi0gICAgLy8gbXVzdCBjaGVjayBmb3Ig
aWxsZWdhbCBzZXF1ZW5jZXMuCi0gICAgLy8gCi0gICAgLy8gV2hlbiB0aGUgZmxhZyBpcyBzZXQg
dG8gbGVuaWVudCwgY2hhcmFjdGVycyBvdmVyIDB4MTBGRkZGIGFyZSBjb252ZXJ0ZWQKLSAgICAv
LyB0byB0aGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyOyBvdGhlcndpc2UgKHdoZW4gdGhlIGZsYWcg
aXMgc2V0IHRvIHN0cmljdCkKLSAgICAvLyB0aGV5IGNvbnN0aXR1dGUgYW4gZXJyb3IuCi0KLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgQ29udmVyc2lvblJlc3VsdCBjb252ZXJ0VVRGOFRvVVRGMTYo
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBzb3VyY2VTdGFydCwgY29uc3QgY2hh
ciogc291cmNlRW5kLCAKLSAgICAgICAgICAgICAgICAgICAgVUNoYXIqKiB0YXJnZXRTdGFydCwg
VUNoYXIqIHRhcmdldEVuZCwgYm9vbCogaXNTb3VyY2VBbGxBU0NJSSA9IDAsIGJvb2wgc3RyaWN0
ID0gdHJ1ZSk7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQ29udmVyc2lvblJlc3VsdCBjb252
ZXJ0TGF0aW4xVG9VVEY4KAotICAgICAgICAgICAgICAgICAgICBjb25zdCBMQ2hhcioqIHNvdXJj
ZVN0YXJ0LCBjb25zdCBMQ2hhciogc291cmNlRW5kLCAKLSAgICAgICAgICAgICAgICAgICAgY2hh
cioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQpOwotCi0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIENvbnZlcnNpb25SZXN1bHQgY29udmVydFVURjE2VG9VVEY4KAotICAgICAgICAgICAgICAg
ICAgICBjb25zdCBVQ2hhcioqIHNvdXJjZVN0YXJ0LCBjb25zdCBVQ2hhciogc291cmNlRW5kLCAK
LSAgICAgICAgICAgICAgICAgICAgY2hhcioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0YXJnZXRFbmQs
IGJvb2wgc3RyaWN0ID0gdHJ1ZSk7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQg
Y2FsY3VsYXRlU3RyaW5nSGFzaEFuZExlbmd0aEZyb21VVEY4TWFza2luZ1RvcDhCaXRzKGNvbnN0
IGNoYXIqIGRhdGEsIGNvbnN0IGNoYXIqIGRhdGFFbmQsIHVuc2lnbmVkJiBkYXRhTGVuZ3RoLCB1
bnNpZ25lZCYgdXRmMTZMZW5ndGgpOwotCi0gICAgLy8gVGhlIGNhbGxlciBvZiB0aGVzZSBmdW5j
dGlvbnMgYWxyZWFkeSBrbm93cyB0aGF0IHRoZSBsZW5ndGhzIGFyZSB0aGUgc2FtZSwgc28gd2Ug
b21pdCBhbiBlbmQgYXJndW1lbnQgZm9yIFVURi0xNiBhbmQgTGF0aW4tMS4KLSAgICBib29sIGVx
dWFsVVRGMTZXaXRoVVRGOChjb25zdCBVQ2hhciogc3RyaW5nSW5VVEYxNiwgY29uc3QgY2hhciog
c3RyaW5nSW5VVEY4LCBjb25zdCBjaGFyKiBzdHJpbmdJblVURjhFbmQpOwotICAgIGJvb2wgZXF1
YWxMYXRpbjFXaXRoVVRGOChjb25zdCBMQ2hhciogc3RyaW5nSW5MYXRpbjEsIGNvbnN0IGNoYXIq
IHN0cmluZ0luVVRGOCwgY29uc3QgY2hhciogc3RyaW5nSW5VVEY4RW5kKTsKLQotfSAvLyBuYW1l
c3BhY2UgVW5pY29kZQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBXVEZfVVRGOF9o
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>